[
  {
    "path": ".codecov.yml",
    "content": "coverage:\n  range: 57..100\n  round: down\n  precision: 2\n  status:\n    project:\n      default:\n        target: auto\n        threshold: 0.1  # Allow PRs to drop overall coverage no more than 0.1%\n"
  },
  {
    "path": ".dockerignore",
    "content": "# We actually need very little context to build a development image which\n# mounts the source code as a volume, so we ignore everything except the few\n# files we need to build the image\n*\n\n# We only need a few build tools and the requirements files, that is all\n!tools/**/*\n!requirements.txt\n!constraints.txt\n!tests/requirements.txt\n!doc/requirements.txt\n!requirements/**/*\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "content": "# Initiate black usage and reformat codebase @lunkwill42 19/03/2021\ne6634e512c8ecf283c85a701366620e724806ab7\n# Re-ran black on everything due to apparent disagreements on config? @lunkwill42 30/04/2021\n78effe45d0febf7103714b7b3f0b9e277db287e9\n# Ran black on bin scripts, as some of them seem to have been left out of the previous reformats @lunkwill42 11/11/2021\n5d49efe59059c19da2d09d0ae695d498872cdb72\n# Re-ran black on everything due to apparent disagreements on config? @lunkwill42 22/02/2022\ne0496b75789656f5abca770e928988fd09bf7803\n# Re-ran black due to new version 24.4.2\n18245ec1a042aac23c4c85637d3454e8d1b5a1bb\n# Re-ran black due to new version 24.8.0 @johannaengland 22/08/2024\n90d33264b4d2aa106395f247e23830b0901bad3a\n# Reformat code using black v25.1.0 @johannaengland 04/02/2025\na48942953b76e85f09094ed90e09c4e227f90b02\n# Reformat codebase using ruff v0.11.9 @johannaengland 15/05/2025\n2c3d056a25e7a190074a0feb79fbc0104e91284c\n"
  },
  {
    "path": ".npmrc",
    "content": "legacy-peer-deps=true\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "exclude: smidumps/\nrepos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v5.0.0\n    hooks:\n    -   id: trailing-whitespace\n    -   id: mixed-line-ending\n    -   id: end-of-file-fixer\n        exclude: &exclude_pattern '^changelog.d/'\n-   repo: https://github.com/astral-sh/ruff-pre-commit\n    rev: v0.14.13\n    hooks:\n        # Run the formatter\n    -   id: ruff-format\n        name: \"Ruff formatting\"\n      # Run the linter\n    -   id: ruff\n        name: \"Ruff linting\"\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "version: 2\n\nsphinx:\n    configuration: doc/conf.py\n    builder: html\n\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.11\"\n  apt_packages:\n    - libsnmp40\n\npython:\n  install:\n    - method: uv\n      command: sync\n      groups:\n        - docs\n"
  },
  {
    "path": ".sonarcloud.properties",
    "content": "sonar.projectKey=Uninett_nav\nsonar.organization=uninett-1\n\n# This is the name and version displayed in the SonarCloud UI.\nsonar.projectName=NAV\nsonar.projectVersion=5.13.0\n\n# Path is relative to the sonar-project.properties file. Replace \"\\\" by \"/\" on Windows.\nsonar.sources=python\n\n# Encoding of the source code. Default is default system encoding\n#sonar.sourceEncoding=UTF-8\n\nsonar.python.version=3.9,3.10,3.11,3.12,3.13\nsonar.tests=tests\n\nsonar.exclusions=python/nav/smidumps/**, python/nav/enterprise/ids.py, python/nav/etc/geomap/config.py, python/nav/web/static/js/libs/**\n"
  },
  {
    "path": "AUTHORS.rst",
    "content": "Network Administration Visualized list of authors\n=================================================\n\nThis file tries to list everyone that has contributed to NAV, in the\nform of code, documentation or packaging.\n\nCurrently active contributors/maintainers\n-----------------------------------------\n\n* Morten Brekkevold (formerly Vold) <morten.brekkevold at sikt.no>\n  NAV's lead developer. Joined in 2002 to make NAV useable outside of NTNU.  Has\n  been hacking and improving bits and pieces of NAV ever since.\n\n* Hanne Moa <hanne.moa at sikt.no>\n  Joined in 2017. An experienced Python developer who contributied the audit\n  logging code, and has put down many hours in migrating to Python 3 and modern\n  Django versions.\n\n* Johanna England <johanna.england at sikt.no>\n  Joined in 2021. Currently hacking away at open issues and learning the NAV\n  codebase.\n\n* Simon Oliver Tveit <simon.tveit at sikt.no>\n  Joined in 2021. Currently hacking away at open issues and learning the NAV\n  codebase.\n\n* Ilona Podliashanyk <ilona.podliashanyk at sikt.no>\n  Joined in 2022, working mainly as a front-end developer. Currently hacking\n  away at open issues and learning the NAV codebase.\n\n* Jørund Hellebø <jorund.hellebo at sikt.no>\n  Joined part-time in 2024, working on DHCP statistics integration and building\n  HTTP/REST API management profiles for Palo Alto API implementations, among\n  other things.\n\n* Simen Abelsen <simen.abelsen at sikt.no>\n  Joined in August 2025, working on cleanup and modernization of the front-end\n  codebase.\n\nOther contributors and previous maintainers\n-------------------------------------------\n* Vidar Faltinsen <vidar.faltinsen at sikt.no>\n  Founded the project in 1999.  He doesn't code, but he knows his way\n  around a network, and has been a NAV mentor for all these years -\n  producing documentation and offering keen insight into the problem\n  domain.\n\n* John-Magne Bredal\n  Joined in 2000, and was instrumental in anything related to end user\n  detentions (Arnold), the web interface and the API.\n\n* Sigmund Augdal\n  Active from 2017, until he left Uninett in 2019. An experienced Python\n  developer who, among other things, rewrote the ipdevpoll multiprocess mode.\n\n* Paulo Pamplona <paulo at nordu.net>\n  Works at SUNET. Contributed a bugfix to strip null-bytes from bytestrings being\n  made safe for PostgreSQL.\n\n* Joar Heimonen <contact at joar.me>\n  Contributed Palo Alto ARP plugin to enable ipdevpoll fetch ARP data from Palo\n  Alto firewalls.\n\n* Ragnhild Bodsberg\n  Contributed various bugfixes to NAV as an intern at Sikt, during the summer\n  of 2022.\n\n* Philipp Petermann <philipp.petermann at unibas.ch>\n  Contributed support for enabling CDP when configuring Cisco Voice VLANs in\n  PortAdmin.\n\n* Leigh Murray <l.d.murray@usit.uio.no>\n  Implemented group-based ipdevpoll and pping, allowing multiple\n  instances to run simultaneously handling specific groups of devices.\n\n* Ruben Andreassen (University of Tromsø)\n  Contributed the initial support for IT-WATCHDOGS-V4-MIB, GEIST-V4-MIB and\n  PowerTek PDUs (PWTv1-MIB).\n\n* Bård Schjander Flugon <bflugon at gmail.com>\n  During his internship at Uninett, he wrote support for pluggable NAVbar\n  search providers, consolidated a new SQL schema baseline from several years\n  of migration scripts, and contributed multiple other improvements to NAV.\n\n* Emil Henry Flakk <emil.flakk at sikt.no>\n  Wrote the IPAM tool introduced in NAV 4.6, and continues to work on\n  Netmap/Geomap fixes, among other things.\n\n* Pär Stolpe <par at stolpe.se>\n  Contributed more flexible LDAP authentication for Microsoft AD servers.\n\n* Christian Strand Young <christian at strandyoung.com>\n  Joined in the summer of 2011.  His main contributions are implementing IPv6\n  support in pping and asynchronous DNS lookups in ipdevinfo & the Machine\n  Tracker, as well as fixing various bugs.\n\n* Christine Anne Sætre <christine.satre at ntnu.no>\n  Interaction designer, hired as a consultant from NTNU to give feedback on UX\n  during the NAV 4.0 interface redesign process.\n\n* Morten Werner Forsbring <werner at debian.org>\n  Packaging NAV for Debian 2004-2013.\n\n* Roy Sindre Norangshol <roy.sindre.norangshol at sikt.no>\n  Rewrote Netmap from a Java applet to a JavaScript implementation based on\n  D3.js. Wrote the tools scripts for building NAV virtual machines based on\n  Vagrant, and contributed to improve our automated JavaScript testing.\n\n* Eivind Lysne <eivindlysne at gmail.com>\n  Rewrote the remaining Cheetah templates to Django templates during the\n  summer of 2013. Also contributed to the design changes scheduled for NAV\n  4.0.\n\n* Trond Kandal <trond.kandal at ntnu.no>\n  Wrote PortAdmin with John-Magne.\n\n* Ole Martin Bjørndalen <ole.martin.bjorndalen at uit.no>\n  Wrote the MailIn system based on a Perl implementation from Uninett, and\n  periodically contributes to the service monitor.\n\n* Kai Arne Bjørnenak <kai.bjornenak at cc.uit.no>\n  Write radius accounting logger.\n\n* Magnus Motzfeldt Eide\n  Active 2008-2012. Rewrote the old PHP-based Alert Profiles interface in\n  Python/Django.  General code maintenance and rewrites of mod_python based\n  systems to Django, and was also involved in the early development of\n  ipdevpoll.\n\n* Marius Halden <marius.halden at gmail.com>\n\n* Matej Gregr <igregr at fit.vutbr.cz>\n\n* Fredrik Skolmli\n  Active 2010.  Contributed bugfixes and started the threshold configuration\n  UI.\n\n* Thomas Adamcik\n  Active 2008-2010.  Rewrote the Perl-based Alert Engine in Python.\n  Also rewrote the user admin panel to a Django-based solution, and contributed\n  much to enable continuous integration using Hudson.\n\n* Jørgen Abrahamsen\n  Active 2008-2010. Bugfixes and features to various parts of NAV, such as\n  report, smsd and ipdevinfo.\n\n* Kristian Klette\n  Active 2007-2010.  Wrote Netmap and the rewritten Network Explorer.\n\n* Øystein Skartsæterhagen <oysteini at pvv.ntnu.no>, 2009\n  Wrote Geomap, the OpenStreetMap-based traffic map.\n\n* Roger Kristiansen\n\n* Stein Magnus Jodal,  2006-2008\n  Rewrote the SMS daemon from Perl to Python for NAV 3.2.  During the\n  next couple of series releases, he cleaned up the entire web\n  interface, defined new policies for how to code web interfaces in\n  NAV, and rewrote several web tools.  Introduced Django to NAV 3.5,\n  using it to rewrite the creaky IP Device Browser to the IP Device\n  Info tool.\n\n* Erlend Midttun <erlend.midttun at ntnu.no>\n\n* Jostein Gogstad <jostein.gogstad at idi.ntnu.no>\n  2007, implemented support for collecting IPv6 prefixes and\n  neighboring caches, and matrix display of IPv6 subnets.\n\n* Kristian Eide <kreide at gmail.com>\n  Active 2000-2005.  Wrote the first Traffic Map applet.  Instrumental\n  in the redesign of NAV for version 3, for which he wrote the\n  getDeviceData SNMP collection engine, the camlogger, the event\n  engine, the topology discovery mechanisms and the network explorer\n  and l2trace web tools.\n\n* Gro-Anita Vindheim <gro-anita.vindheim at ntnu.no>\n  Active 1999-2001 and 2003-2005.  Wrote live.pl, the original pinger,\n  and several other parts of NAV 2.  Maintenance on SQL reports, NAV\n  v2->v3 migration helper scripts.\n\n* Magnar Sveen, 2003-2004\n  Designed the new web interface for NAV 3 and wrote much of the\n  surrounding toolbox and user preferences code.\n\n* Hans Jørgen Hoel, 2003-2004\n  Wrote the SeedDB (formerly EditDB) and the original Device\n  Management web tools. Partly involved in event engine's handling of\n  device lifecycle events.\n\n* Arne Øslebø\n  Active 2002-2004.  Wrote the first Alert Engine in Perl.\n\n* Andreas Åkre Solberg <andreas.solberg at sikt.no>\n  Active 2002-2004.  Wrote the first Alert Profiles web interface in\n  PHP, and parts of the first Alert Engine.\n\nThis dynamic duo wrote most of NAV's service monitor and parallel\npinger:\n\n* Stian Søiland, 2002-2004\n* Magnus Thanem Nordseth, 2002-2006\n\n* Sigurd Gartmann, 2001-2004\n  Wrote the SNMP collector for NAV 2, the report system and the syslog\n  analyzer.\n\n* Arve Vanvik, 2004\n  Oracle plugin for the service monitor.\n\n* Erlend Mjåvatten, 2003\n  Wrote the original rrd browser and supporting libraries.\n\n* Bjørn Ove Grøtan, 2003\n  Wrote the original message&maintenance (emotd) web tool, and\n  contributed initial code for LDAP authentication.\n\n* Daniel Sandvold, 2002\n\n* Erik Gorset, 2002\n  Wrote parts of the service monitor and parallel pinger.\n\n* Knut-Helge Vindheim <knut-helge.vindheim at ntnu.no>, 1999-2002\n  Maintenance on various NAV 2 parts: The SMS daemon, SNMP collection\n  scripts, database backup system.  For the most part, Knut-Helge has\n  contributed invaluable insights into the operation of a large campus\n  network.\n\n* Trygve Lunheim, 1999-2000\n  The original introduction of MRTG/Cricket integration.\n\n* Stig Venås, 1999\n  Wrote the original arp cache collector (arplogger.pl), which\n  remained mostly unchanged in NAV for 9 years.\n\nThese guys were involved in projects that were precursors to NAV (such as the\nfirst attempt at building a topology graph):\n\n* Eric Sandnes, 1999\n* Tor-Arne Kvaløy, 1999\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\nThis changelog format was introduced in NAV 5.4.0. Older changelogs can be\nfound in the [HISTORY](HISTORY) file.\n\nThis project uses [*towncrier*](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in <https://github.com/Uninett/nav/tree/master/changelog.d/>.\n\n<!-- towncrier release notes start -->\n\n## [5.18.0] - 2026-03-30\n\n### Security\n\n- The CSRF cookie is now marked as secure when `needs_tls` is enabled in\n  `webfront.conf`, matching the existing behavior of the session cookie.\n  ([#3829](https://github.com/Uninett/nav/issues/3829))\n- Passwords are no longer leaked in cleartext in Django error emails when LDAP\n  authentication crashes. ([#3870](https://github.com/Uninett/nav/issues/3870))\n\n### Removed (developer-centric)\n\n- Removed obsolete Docker-based test environment. Replaced by test suite\n  changes that can run in 'normal' development environments.\n  ([#3849](https://github.com/Uninett/nav/issues/3849))\n\n### Added\n\n- Rooms and locations can now have multiple names (aliases). Aliases are\n  searchable throughout NAV -- in the navbar, global search, device history,\n  maintenance, netmap, network explorer, status widgets, and the REST API.\n  Aliases can be managed in *SeedDB* and via bulk import/export. They are\n  displayed on room/location detail pages, in search results, and in SeedDB\n  list views.\n  ([#3314](https://github.com/Uninett/nav/issues/3314),\n  [#3315](https://github.com/Uninett/nav/issues/3315),\n  [#3815](https://github.com/Uninett/nav/issues/3815),\n  [#3818](https://github.com/Uninett/nav/issues/3818),\n  [#3819](https://github.com/Uninett/nav/issues/3819),\n  [#3820](https://github.com/Uninett/nav/issues/3820),\n  [#3821](https://github.com/Uninett/nav/issues/3821),\n  [#3822](https://github.com/Uninett/nav/issues/3822),\n  [#3823](https://github.com/Uninett/nav/issues/3823),\n  [#3836](https://github.com/Uninett/nav/issues/3836),\n  [#3840](https://github.com/Uninett/nav/issues/3840),\n  [#3841](https://github.com/Uninett/nav/issues/3841),\n  [#3844](https://github.com/Uninett/nav/issues/3844),\n  [#3851](https://github.com/Uninett/nav/issues/3851),\n  [#3852](https://github.com/Uninett/nav/issues/3852),\n  [#3868](https://github.com/Uninett/nav/issues/3868),\n  [#3880](https://github.com/Uninett/nav/issues/3880),\n  [#3895](https://github.com/Uninett/nav/issues/3895))\n- Added support for two-factor authentication (TOTP), OAuth2, OIDC, and SAML\n  login via `django-allauth`. Authentication can be configured through the new\n  TOML config file `webfront/authentication.toml`.\n  ([#3622](https://github.com/Uninett/nav/issues/3622),\n  [#3676](https://github.com/Uninett/nav/issues/3676),\n  [#3834](https://github.com/Uninett/nav/issues/3834),\n  [#3862](https://github.com/Uninett/nav/issues/3862),\n  [#3873](https://github.com/Uninett/nav/issues/3873),\n  [#3889](https://github.com/Uninett/nav/issues/3889),\n  [#3934](https://github.com/Uninett/nav/issues/3934),\n  [#3936](https://github.com/Uninett/nav/issues/3936))\n- Added a report of devices without a known uplink in the topology.\n- Debug log runtimes of individual NAVbar search providers.\n\n### Changed\n\n- Auditlog entries can now be sorted by individual columns. Hyperlinks to more\n  details are now provided for actors, objects and targets that still exist in\n  the NAV database. ([#3776](https://github.com/Uninett/nav/pull/3776))\n- Updated markdown dependency to 3.8.1.\n  ([#3812](https://github.com/Uninett/nav/issues/3812))\n- Downgraded spammy `WARNING` log about alerts referencing deleted objects to\n  `DEBUG` level. ([#3927](https://github.com/Uninett/nav/issues/3927))\n\n### Changed (developer-centric)\n\n- Standardize vendored JavaScript library management.\n\n  Vendored JS files now follow a consistent `<name>-<version>.min.js` naming\n  convention and are tracked as npm dependencies for easier version management.\n  A `vendor.py` tool is included to automate installing and copying vendored\n  files. ([#2470](https://github.com/Uninett/nav/issues/2470))\n- Tox environments and GitHub workflows switched over to uv for dependency\n  management. ([#3859](https://github.com/Uninett/nav/issues/3859))\n\n### Fixed\n\n- Fix network explorer search not working after the first search per page load.\n  ([#3853](https://github.com/Uninett/nav/issues/3853))\n- Fixed l2trace crash when tracing through a netbox with no associated prefix.\n  ([#3866](https://github.com/Uninett/nav/issues/3866))\n- LDAP login no longer crashes with a 500 error when a user cannot be found\n  during group membership verification.\n  ([#3871](https://github.com/Uninett/nav/issues/3871))\n- Fix report column tooltips (`$explain_`) not showing when the column also has\n  a `$name_` override. ([#3876](https://github.com/Uninett/nav/issues/3876))\n- Fixed a crash in SeedDB bulk import when IP addresses contain trailing\n  whitespace. ([#3884](https://github.com/Uninett/nav/issues/3884))\n\n\n## [5.17.1] - 2026-02-27\n\n### Fixed\n\n- Fix collapsed multiselects in status tool filters\n  ([#3797](https://github.com/Uninett/nav/issues/3797))\n- Event engine now yields to overdue scheduler callbacks between processing\n  queued events, preventing long event batches from blocking time-critical\n  tasks. ([#3798](https://github.com/Uninett/nav/issues/3798))\n  - Added missing index on `netboxentity.deviceid` to speed up lookups by\n    device. ([#3794](https://github.com/Uninett/nav/pull/3794))\n- Fix crash when rendering navlet error responses due to missing navlet ID\n  ([#3802](https://github.com/Uninett/nav/issues/3802))\n- Fixed a session crash (`UpdateError`) on the login page that could leak\n  cleartext passwords in Django error emails.\n  ([#3803](https://github.com/Uninett/nav/issues/3803))\n- Fix chart widget failing to load images from URLs without query parameters\n  ([#3805](https://github.com/Uninett/nav/issues/3805))\n- Fixed `sc.05.16.0001.sql` migration failure on PostgreSQL 14 caused by\n  ambiguous `||` operator when concatenating an integer without an explicit\n  `::TEXT` cast. ([#3806](https://github.com/Uninett/nav/issues/3806))\n- Fixed a crash in Netmap when the topology graph exceeds memcached's max item\n  size. The graph is now returned successfully even when it cannot be cached.\n  ([#3795](https://github.com/Uninett/nav/pull/3795))\n- Improved active IP collector query performance (~10x) by utilizing partial\n  database indexes on the `arp` table more effectively.\n  ([#3793](https://github.com/Uninett/nav/pull/3793))\n- PortAdmin's \"commit configuration\" endpoint now returns 503 instead of 500\n  when the device is unreachable or does not support configuration commits, and\n  no longer triggers spurious admin error emails for these expected operational\n  failures. ([#3801](https://github.com/Uninett/nav/pull/3801))\n- Turned support for `REMOTE_USER` back on. Regression caused by the new\n  auth-system and its complicated route to the finish line.\n\n\n## [5.17.0] - 2026-02-13\n\n### Security\n\n- Enable CSRF protection in entire NAV web UI\n  ([#3395](https://github.com/Uninett/nav/issues/3395))\n\n### Added\n\n- DHCP usage statistics graphs are now shown on VLAN and prefix pages when\n  found in Graphite ([#2373](https://github.com/Uninett/nav/issues/2373))\n- Added \"more than\" / \"less than\" option to the \"Last Seen\" filter on the Room\n  view interface list ([#3313](https://github.com/Uninett/nav/issues/3313))\n- Added hyperlink to management profile options in SeedDB netbox form\n  ([#3643](https://github.com/Uninett/nav/issues/3643))\n- Added browse tree and description search for easier maintenance task\n  component selection ([#3778](https://github.com/Uninett/nav/issues/3778))\n- Added support for SNMP v3-based CAM data collection on Cisco switches (Adds\n  support for SNMP v3 context switching for logical MIB instances)\n  ([#2811](https://github.com/Uninett/nav/issues/2811))\n- Added script to generate GitHub, blog and e-mail release announcements from\n  `CHANGELOG.md`\n\n### Changed\n\n- Finally switched from NAV's homegrown authentication system to Django's own.\n  This makes NAV compatible with a lot of 3rd party libraries, and is a\n  necessary step to support MFA.\n\n  This is a big change. Test thoroughly before putting this version into\n  production. This is especially important if you have configured `REMOTE_USER`\n  authentication.  NAV's classic `REMOTE_USER` support has a lot of bells and\n  whistles that Django's support lacks. We have added support for NAV's config\n  options but it is a little used feature. There should be no need to update\n  the confg file.  ([#3626](https://github.com/Uninett/nav/issues/3626))\n- Allow users to set a subscribed dashboard as their default\n  ([#3572](https://github.com/Uninett/nav/issues/3572))\n- Refactored `dhcpstats` backend. Users beware: option\n  `user_context_poolname_key` in `dhcpstats.conf` renamed to\n  `user_context_groupname_key` and its default value changed from `name` to\n  `group`.  ([#3766](https://github.com/Uninett/nav/issues/3766))\n- Upgraded jQuery library to version 4\n  ([#3730](https://github.com/Uninett/nav/issues/3730))\n- Upgraded Marionette to V4 in the IPAM tool\n  ([#1873](https://github.com/Uninett/nav/issues/1873))\n- Refactored dashboard navlets to use HTMX for rendering and updates\n  ([#3635](https://github.com/Uninett/nav/issues/3635))\n- Stopped CI testing on Python 3.12 by default\n  ([#3741](https://github.com/Uninett/nav/issues/3741))\n\n### Fixed\n\n- Re-enabled sorting by actor in auditlog table, now actually working robustly!\n  ([#3581](https://github.com/Uninett/nav/issues/3581))\n- Fixed breadcrumbs missing from JWT Create and Edit frontend pages\n  ([#3682](https://github.com/Uninett/nav/issues/3682))\n- Fixed bug where Netmap views could not be created or updated\n  ([#3737](https://github.com/Uninett/nav/pull/3737))\n- Ensure that the auditlog entries for deleting accounts behave like other\n  entries. ([#3738](https://github.com/Uninett/nav/issues/3738))\n- Fixed IP Device select in Add New Service form\n  ([#3749](https://github.com/Uninett/nav/issues/3749))\n- Filtering on SeedDB Patch and Cable pages now searches all visible columns\n  instead of only the `jack` field\n  ([#3760](https://github.com/Uninett/nav/issues/3760))\n- Popover arrow is now correctly positioned when aligned to the end\n  ([#3770](https://github.com/Uninett/nav/issues/3770))\n- Fix bug where Getting Started tour does not highlight the correct element\n  ([#3771](https://github.com/Uninett/nav/issues/3771))\n- PortAdmin's save feedback modal now appears instantly instead of being\n  delayed by a network round-trip\n  ([#3772](https://github.com/Uninett/nav/issues/3772))\n- Add global CSRF token handlers for all HTMX and jQuery AJAX POST requests, to\n  ensure things do not break unintentionally when CSRF validation is enabled\n- Fixed a crash in `nav config where` when no config file directory could be\n  found\n\n\n## [5.16.1] - 2026-01-09\n\n### Fixed\n\n- Fixed location search for locations with slashes in names\n  ([#3717](https://github.com/Uninett/nav/issues/3717))\n- Fixed `pping` and `snmptrapd` crashes when attempting to look for config files\n  in inaccessible directories\n  ([#3720](https://github.com/Uninett/nav/issues/3720))\n- Support RFC3339/ISO8601-formatted timestamps when parsing syslog messages in\n  `logengine` ([#3722](https://github.com/Uninett/nav/issues/3722))\n- Fixed GeoMap display of rooms/locations with slashes in their IDs\n  ([#3724](https://github.com/Uninett/nav/issues/3724))\n\n\n## [5.16.0] - 2025-12-19\n\n### Security\n\n- Upgrade jQuery library and dependencies\n  ([#3582](https://github.com/Uninett/nav/issues/3582))\n- Stop revealing actual API tokens in any type of log\n  ([#3686](https://github.com/Uninett/nav/issues/3686))\n- Escape column text in audit log table to mitigate potential XSS\n  vulnerabilities ([#2803](https://github.com/Uninett/nav/issues/2803))\n\n### Added\n\n- Added support for searching for inactive devices by serial number in Device\n  History tool ([#1996](https://github.com/Uninett/nav/issues/1996))\n- Added OS version and NAV version to exception debug view\n  ([#2082](https://github.com/Uninett/nav/issues/2082))\n- Add proper audit log entries for API token manipulations (legacy and JWT)\n  ([#3405](https://github.com/Uninett/nav/issues/3405))\n- Added a Django authentication backend to do NAV legacy style LDAP\n  authentication, in preparation for authentication system rewrite\n  ([#3498](https://github.com/Uninett/nav/issues/3498))\n- Added confirmation modal when deleting dashboards\n  ([#3648](https://github.com/Uninett/nav/issues/3648))\n- Added test/research program `nav_cisco_auth_sessions` to retrieve information\n  about authentication framework sessions from Cisco switches\n  ([#3711](https://github.com/Uninett/nav/issues/3711))\n- Added support for searching by description in main info search\n  ([#3149](https://github.com/Uninett/nav/issues/3149))\n- Allow `NAV_CONFIG_DIR` environment variable to override where NAV looks for\n  configuration files ([#3697](https://github.com/Uninett/nav/issues/3697))\n\n### Changed\n\n- Added new dependency `distro` for identifying Linux distributions\n  ([#2082](https://github.com/Uninett/nav/issues/2082))\n- Load info page search results with HTMX\n  ([#3618](https://github.com/Uninett/nav/issues/3618))\n- Load filtered device history with HTMX\n  ([#3663](https://github.com/Uninett/nav/issues/3663))\n- Disabled broken audit log actor sorting\n  ([#3581](https://github.com/Uninett/nav/issues/3581))\n\n### Fixed\n\n- Fixed room urls for rooms with slashes in name\n  ([#3661](https://github.com/Uninett/nav/issues/3661))\n- Upgrade select2 dependency to latest version\n  ([#1873](https://github.com/Uninett/nav/issues/1873))\n- Strip null bytes from LLDP local chassis IDs to avoid `topo` job abort errors\n  (ValueErrors) ([#2479](https://github.com/Uninett/nav/issues/2479))\n- Fixed ipdevpoll inventory job crash when including Comet T3611 MIB for\n  collecting information for other Comet sensors\n  ([#3566](https://github.com/Uninett/nav/issues/3566))\n- Properly redirect entire browser to login page when a background HTMX request\n  is received on an unauthenticated session (e.g. after session times out)\n  ([#3656](https://github.com/Uninett/nav/issues/3656))\n- Fixed accessing seeddb/room URLs for rooms with '/' in names\n  ([#3659](https://github.com/Uninett/nav/issues/3659))\n- Fixed broken event search URL\n  ([#3677](https://github.com/Uninett/nav/issues/3677))\n- Fixed accessing SeedDB urls for locations, usages, organizations and device\n  groups with '/' in names\n  ([#3712](https://github.com/Uninett/nav/pull/3712))\n- Fixed bug where subnets were not selectable in the IPAM subnet allocator\n  ([#3692](https://github.com/Uninett/nav/issues/3692))\n- Fixed bug in SeedDB IP Device form where enter in a text field triggered an\n  unwanted connectivity check\n  ([#3694](https://github.com/Uninett/nav/issues/3694))\n- Added success messages for JWT Token Create and Edit views\n\n\n## [5.15.1] - 2025-11-17\n\n### Fixed\n\n- Fixed crash reports being sent by unauthenticated clients accessing the API\n  ([#3650](https://github.com/Uninett/nav/issues/3650))\n- Fixed non-working port overviews for devices that contain modules with\n  slashes in their name. A broken interfaces API endpoint caused both\n  *ipdevinfo* and *interface browser* port lists to malfunction.\n  ([#3652](https://github.com/Uninett/nav/issues/3652))\n\n\n## [5.15.0] - 2025-10-30\n\n### Security\n\n- In preparation for properly protecting against CSRF attacks throughout NAV:\n  - Added CSRF tokens to AJAX POST requests\n    ([#3465](https://github.com/Uninett/nav/issues/3465))\n  - Removed CSRF tokens from GET requests\n    ([#3472](https://github.com/Uninett/nav/issues/3472))\n\n### Removed\n\n- Removed unused vendored Foundation CSS stylesheets\n  ([#3479](https://github.com/Uninett/nav/issues/3479))\n- Removed vendored Foundation JavaScript library from codebase\n  ([#3542](https://github.com/Uninett/nav/issues/3542))\n\n### Added\n\n- Show VLAN netident in ipdevinfo port list\n  ([#2160](https://github.com/Uninett/nav/issues/2160))\n- Dashboards are now shareable between users\n  ([#2344](https://github.com/Uninett/nav/issues/2344))\n- Show device MAC address in the Device Info tab of ipdevinfo\n  ([#3222](https://github.com/Uninett/nav/issues/3222))\n- Added Django 5.2 and Python 3.13 to default test matrix\n  ([#3467](https://github.com/Uninett/nav/issues/3467))\n- Improved user feedback in PortAdmin by loading live port details in\n  background, after initial page load\n  ([#3544](https://github.com/Uninett/nav/issues/3544))\n- Added search results preview in navbar\n  ([#3577](https://github.com/Uninett/nav/issues/3577))\n- Documented how to enable IPv6 connectivity inside devcontainer (Docker)\n\n### Changed\n\n- Updated NAPALM dependency to 5.1.0\n  ([#3495](https://github.com/Uninett/nav/issues/3495))\n- Replaced SeedDB IP Device \"check connectivity\" JavaScript with HTMX,\n  including improved user feedback\n  ([#3560](https://github.com/Uninett/nav/issues/3560))\n\n#### Non-visible and developer-centric changes\n\n- The dated Foundation JavaScript libraries and CSS stylesheets are being\n  replaced by a combination of HTMX-based features, new internal libraries and\n  newer alternative libraries. The goal is to keep the outward user interface\n  more or less unchanged:\n\n  - Use HTMX modals in SeedDB Patch tool\n    ([#3461](https://github.com/Uninett/nav/issues/3461))\n  - Replaced tooltip in status actions with accessible help text toggle\n    ([#3463](https://github.com/Uninett/nav/issues/3463))\n  - Replaced Foundation Joyride with `Driver.js` implementation\n    ([#3468](https://github.com/Uninett/nav/issues/3468))\n  - Replaced Foundation Topbar JS with JQuery\n    ([#3476](https://github.com/Uninett/nav/issues/3476))\n  - Replaced Foundation Equalizer with JQuery\n    ([#3477](https://github.com/Uninett/nav/issues/3477))\n  - Replaced foundation alert plugin with custom JavaScript\n    ([#3481](https://github.com/Uninett/nav/issues/3481))\n  - Replaced native tooltips with NAV tooltips\n    ([#3482](https://github.com/Uninett/nav/issues/3482))\n  - Replaced navlet modals with HTMX implementation\n    ([#3487](https://github.com/Uninett/nav/issues/3487))\n  - Replaced search hint modals in Radius tool with HTMX\n    ([#3494](https://github.com/Uninett/nav/issues/3494))\n  - Replaced radius detail modals with HTMX\n    ([#3514](https://github.com/Uninett/nav/issues/3514))\n  - Added fit-content size to modals to support large content\n  - Replace IPAM subnet diagram help modal with HTMX\n  - Replaced \"about logging\" modal with HTMX\n  - Replaced Foundation dropdowns with custom implementation\n  - Replaced \"import dashboard\" modal with HTMX\n  - Replaced Machine Tracker modals with HTMX\n  - Replaced modals in ipdevinfo tool with HTMX\n  - Replaced threshold form help modal with HTMX\n  - Added custom NAV tooltip as replacement for Foundation JS\n    ([#3449](https://github.com/Uninett/nav/issues/3449))\n  - Added reusable HTMX modal utilities and styles\n    ([#3461](https://github.com/Uninett/nav/issues/3461))\n  - Added modal closing behaviour controls for close button visibility and\n    outside click handling\n    ([#3537](https://github.com/Uninett/nav/issues/3537))\n  - Added support for positioning popover on multiple sides\n    ([#3550](https://github.com/Uninett/nav/issues/3550))\n  - Replaced feedback modal in Portadmin with HTMX\n    ([#3540](https://github.com/Uninett/nav/issues/3540))\n  - Replaced Foundation dropdowns with popovers\n    ([#3531](https://github.com/Uninett/nav/issues/3531))\n  - Upgraded tinysort dependency\n    ([#3580](https://github.com/Uninett/nav/issues/3580))\n  - Replaced Foundation Clearing Lightbox with custom Lightbox plugin for\n    room/location picture gallery\n    ([#3530](https://github.com/Uninett/nav/issues/3530))\n  - Use fixed position tooltips in status widgets and SeedDB list tree\n    ([#3576](https://github.com/Uninett/nav/issues/3576))\n  - Added support for controlling popovers with client side events\n    ([#3578](https://github.com/Uninett/nav/issues/3578))\n  - Replaced outdated timepicker library with flatpickr\n    ([#3587](https://github.com/Uninett/nav/issues/3587))\n\n- Modernized Django URL config, mostly by replacing usage of `re_path()` with\n  `path()` ([#3515](https://github.com/Uninett/nav/issues/3515),\n  ([#3548](https://github.com/Uninett/nav/issues/3548),\n  ([#3631](https://github.com/Uninett/nav/issues/3631))\n\n### Fixed\n\n- Protect against unexpected NUL bytes in SNMP strings by stripping them\n  ([#2479](https://github.com/Uninett/nav/issues/2479))\n- Fixed bug where status widget tooltip gets stuck\n  ([#3301](https://github.com/Uninett/nav/issues/3301))\n- Show friendly error message in Arnold when attempting to block ports on\n  switches that do not feature a writeable management profile\n  ([#3383](https://github.com/Uninett/nav/issues/3383))\n- Fixed bug where ipdevinfo job refresh does not display error messages properly\n  ([#3385](https://github.com/Uninett/nav/issues/3385))\n- Made it possible to un-revoke JWT refresh token by recreating the token\n  ([#3457](https://github.com/Uninett/nav/issues/3457))\n- Fixed broken all-time searches in Radius tool\n  ([#3500](https://github.com/Uninett/nav/issues/3500))\n- Removed \"no racks\" alert after adding a new rack to a room\n  ([#3506](https://github.com/Uninett/nav/issues/3506))\n- Show distinct filter groups in Groups and Permissions modal in Alert Profiles\n  ([#3523](https://github.com/Uninett/nav/issues/3523))\n- Show errors on invalid IP in Network Explorer search\n  ([#3534](https://github.com/Uninett/nav/issues/3534))\n- Fixed saving rooms/locations with active alerts widgets after editing\n  ([#3561](https://github.com/Uninett/nav/issues/3561))\n- Fixed sudo-ing to the default (anonymous) account\n  ([#3571](https://github.com/Uninett/nav/issues/3571))\n- Fixed PortAdmin bug where restarting interfaces fails\n  ([#3589](https://github.com/Uninett/nav/issues/3589))\n- Fixed tooltips in Device History and Subnet Matrix tools\n  ([#3591](https://github.com/Uninett/nav/issues/3591))\n- Enabled GetBulk / bulkwalk operations under synchronous SNMP v3\n  communication (enormously speeding up PortAdmin SNMPv3 queries)\n  ([#3594](https://github.com/Uninett/nav/issues/3594))\n- Adjusted size and position of \"close modal\" icon to avoid overlap with text\n- Fixed bug where QR Code button is not clickable\n\n\n## [5.14.1] - 2025-09-01\n\n### Fixed\n\n- Correctly display current chosen filter in Status tool\n  ([#3442](https://github.com/Uninett/nav/issues/3442))\n- Fixed showing activity graphs in port details in ipdevinfo\n  ([#3484](https://github.com/Uninett/nav/issues/3484))\n\n\n## [5.14.0] - 2025-08-21\n\n### Added\n\n#### User-visible additions\n\n- New SQL reports in the *Report* tool:\n  - Added an `operational entities` SQL report.\n    ([#1947](https://github.com/Uninett/nav/issues/1947))\n  - Added an `Events detected last 24 hours` SQL report.\n    ([#3305](https://github.com/Uninett/nav/issues/3305))\n- Collection job refreshing from web UI:\n  - Added button to refresh `ipdevpoll` background jobs directly from *IP\n    Device Info* tool. ([#3350](https://github.com/Uninett/nav/issues/3350))\n  - `ipdevpoll` can now immediately reschedule jobs on incoming refresh events\n    on the NAV event queue. Refreshes can be ordered from the command line\n    using the `navrefresh` program.\n    ([#2626](https://github.com/Uninett/nav/issues/2626))\n- Added QR code link features:\n  - Added link to \"My Stuff\" menu to generate QR code link to current page.\n    ([#2897](https://github.com/Uninett/nav/issues/2897))\n  - Added button to SeedDB that downloads a ZIP file with QR Codes linking to the\n    selected netboxes/rooms. ([#2899](https://github.com/Uninett/nav/issues/2899))\n  - Added config option to switch between generating SVG or PNG QR codes.\n    ([#2916](https://github.com/Uninett/nav/issues/2916))\n- API additions:\n  - Added API endpoint for looking up vendor of MAC address.\n    ([#3337](https://github.com/Uninett/nav/issues/3337))\n  - Added API endpoint for the `NetboxEntity` model.\n    ([#3378](https://github.com/Uninett/nav/issues/3378))\n  - JWT token signing features:\n    - Added API endpoint for JWT refresh tokens.\n      ([#3270](https://github.com/Uninett/nav/issues/3270))\n    - Added new tab to *User and API administration* tool for managing JWT refresh tokens.\n      ([#3273](https://github.com/Uninett/nav/issues/3273))\n    - Expiration times for issued JWT refresh tokens can be configured via\n      `jwt.conf`. ([#3016](https://github.com/Uninett/nav/issues/3016))\n    - Added support for including API endpoint read/write permission claims to\n      JWT tokens.\n- Added password security warnings:\n  - Show a banner if the logged in user's password is insecure or old and it\n    should be changed. ([#3345](https://github.com/Uninett/nav/issues/3345))\n  - Show a banner to admins if other users' passwords are insecure or old.\n    ([#3346](https://github.com/Uninett/nav/issues/3346))\n- Added support for the *T3611* sensor from Comet.\n  ([#3307](https://github.com/Uninett/nav/issues/3307))\n- Added support for fetching DHCP pool statistics from Kea DHCP API.\n  ([#2931](https://github.com/Uninett/nav/issues/2931))\n\n\n#### Developer-centric additions\n\n- Added HTMX as new front-end library.\n  ([#3386](https://github.com/Uninett/nav/issues/3386))\n- Document practical usage of devcontainer for developers.\n  ([#3398](https://github.com/Uninett/nav/issues/3398))\n- Added developer utilities for easily dumping/loading production data into\n  devcontainer.\n\n### Changed\n\n#### User-visible changes\n\n- Replaced QuickSelect component picker with dynamic HTMX-based search in\n  Maintenance tool.  ([#3425](https://github.com/Uninett/nav/issues/3425))\n- Replaced QuickSelect component picker with dynamic HTMX-based search in\n  Device history tool.  ([#3434](https://github.com/Uninett/nav/issues/3434))\n- Dependency changes:\n  - Updated NAPALM dependency to 5.0\n    ([#2358](https://github.com/Uninett/nav/issues/2358))\n  - Updated `django-rest-framework` to version 3.14+, for proper compatibility\n    Django 4.2 ([#3403](https://github.com/Uninett/nav/issues/3403))\n\n#### Developer-centric changes\n\n- Replaced usage of `twisted.internet.defer.returnValue` with regular Python\n  `return`, due to deprecation in newest Twisted version.\n  ([#2955](https://github.com/Uninett/nav/issues/2955))\n- Redefined NAV account model to be usable as a Django user model.\n  ([#3332](https://github.com/Uninett/nav/issues/3332))\n- Remove unused `ColumnsForm`\n  ([#3243](https://github.com/Uninett/nav/issues/3243))\n\n\n### Fixed\n\n- Fixed missing ARP API endpoint documentation for IP address filtering.\n  ([#3215](https://github.com/Uninett/nav/issues/3215))\n- Fixed broken location *history* searches from location view page.\n  ([#3360](https://github.com/Uninett/nav/issues/3360))\n- Restored ISO timestamps in the web UI (as they were before NAV 5.13)\n  ([#3369](https://github.com/Uninett/nav/issues/3369))\n- Fixed broken `Add to dashboard` functionality for boolean value sensors\n  ([#3394](https://github.com/Uninett/nav/issues/3394))\n- Fixed sorting by timestamp columns in threshold rule table and Useradmin\n  API-token table. ([#3410](https://github.com/Uninett/nav/pull/3410))\n- Take advantage of auxiliary `end_time` indexes on ARP table to improve prefix\n  usage lookups in API. ([#3413](https://github.com/Uninett/nav/pull/3413))\n- Made Docker test environment usable for devs on Apple silicon Macs.\n\n\n## [5.13.2] - 2025-05-16\n\n### Fixed\n\n- Relax API permissions for endpoints used by NAV web GUI tools intended for\n  non-admin users.  Several tools stopped working for non-admin users as a\n  result of the permissions lockdown in the 5.13.1 security fix.\n  - Relax permissions for API interface view endpoint\n    ([#3373](https://github.com/Uninett/nav/issues/3373))\n  - Relax permissions for API prefix usage view endpoint\n    ([#3374](https://github.com/Uninett/nav/issues/3374))\n  - Relax permissions for API list room endpoint\n    ([#3375](https://github.com/Uninett/nav/issues/3375))\n\n\n## [5.13.1] - 2025-05-12\n\n### Security\n\n- Lock down API access for unprivileged users\n\n  By default, NAV granted full API access to logged-in users, regardless of\n  their configured privilege level.  This would give unprivileged users access\n  to manipulate NAV configuration and even elevate their own user privileges to\n  administrator level.  [Read the full security advisory\n  here.](https://github.com/Uninett/nav/security/advisories/GHSA-gprr-5vvf-582g)\n\n### Changed\n\n- Update NAPALM dependency to 5.0 to keep NAV web GUI working\n  ([#2358](https://github.com/Uninett/nav/issues/2358))\n\n### Fixed\n\n- Fix filtering of 'Last seen' and sorting by 'Last active' in netbox\n  interfaces view in room info\n  ([#3329](https://github.com/Uninett/nav/issues/3329))\n\n\n## [5.13.0] - 2025-03-07\n\n### Security\n\n- Omit Palo Alto API keys from ARP plugin log output\n  ([#3251](https://github.com/Uninett/nav/issues/3251))\n\n### Added\n\n- Add option for showing OUI vendor name in Machine Tracker searches\n  ([#3292](https://github.com/Uninett/nav/issues/3292))\n- Add cronjob for populating database with OUI data nightly\n  ([#3320](https://github.com/Uninett/nav/issues/3320))\n- Run test suite by default on Python 3.11 and Django 4.2\n  ([#2850](https://github.com/Uninett/nav/issues/2850))\n- Added tests for device history search\n  ([#3261](https://github.com/Uninett/nav/issues/3261))\n\n### Changed\n\n- Upgraded Django requirement to 4.2\n  ([#2789](https://github.com/Uninett/nav/issues/2789))\n- Upgraded and cleaned up various Docker environments used for development and\n  testing to Debian Bookworm / Python 3.11\n  ([#3284](https://github.com/Uninett/nav/issues/3284))\n\n### Fixed\n\n- Fix minor incompatibilities with Django 4.2\n  ([#2850](https://github.com/Uninett/nav/issues/2850))\n- Fixed non-responsive search function in room map widget\n  ([#3207](https://github.com/Uninett/nav/issues/3207))\n- Validate interval inputs in several search forms to avoid unhandled overflow\n  errors (switch port activity, radius top talkers report, radius error log\n  search, radius account log search)\n  ([#3242](https://github.com/Uninett/nav/issues/3242),\n  [#3245](https://github.com/Uninett/nav/issues/3245),\n  [#3246](https://github.com/Uninett/nav/issues/3246),\n  [#3247](https://github.com/Uninett/nav/issues/3247))\n- Verify that multiple quarantine rules cannot be added with identical VLANs in\n  Arnold ([#3244](https://github.com/Uninett/nav/issues/3244))\n- Fixed broken module history view in device history\n  ([#3258](https://github.com/Uninett/nav/issues/3258))\n- Stop sending error mails to site admins from graphite-web proxy endpoint when\n  graphite response code is in the 5XX range\n  ([#3259](https://github.com/Uninett/nav/issues/3259))\n- Ignore case of sysname in IP device info\n  ([#3262](https://github.com/Uninett/nav/issues/3262))\n- Add user-agent header when downloading OUI text file\n  ([#3291](https://github.com/Uninett/nav/issues/3291))\n\n\n## [5.12.0] - 2024-12-16\n\n### Removed\n\n- Removed dependencies django-crispy-forms and crispy-forms-foundation\n  ([#2794](https://github.com/Uninett/nav/issues/2794))\n\n### Added\n\n- Active maintenance tasks that only reference deleted components will be\n  automatically cancelled ([#3229](https://github.com/Uninett/nav/issues/3229))\n- Alert profiles filter match value dropdowns now support interactive value\n  searches ([#3238](https://github.com/Uninett/nav/issues/3238))\n- Added support for setting access port VLANs for Cisco Small Business switches\n  in PortAdmin (by reverting to non-Cisco-specific handler routines for this\n  subgroup of products) ([#3249](https://github.com/Uninett/nav/issues/3249))\n\n### Changed\n\n- Switched to building CSS from Sass using webpack instead of deprecated\n  `libsass`. ([#2849](https://github.com/Uninett/nav/issues/2849))\n- Run tests using tox version 4\n  ([#2973](https://github.com/Uninett/nav/issues/2973))\n- The ipdevpoll plugin to fetch ARP cache data from a netbox's Palo Alto\n  firewall API is now configured through a new management profile type assigned\n  to that netbox ([#3147](https://github.com/Uninett/nav/issues/3147))\n- The old-style `setup.py` script was removed and installation docs were\n  updated ([#3176](https://github.com/Uninett/nav/issues/3176))\n- Ensure that CSRF token info is included in all forms that have been\n  refactored to remove the `django-crispy-forms` dependency\n  ([#3157](https://github.com/Uninett/nav/issues/3157))\n\n### Fixed\n\n- Alert profiles filter match value dropdowns now support more than the old\n  hard limit of 1000 choices\n  ([#2908](https://github.com/Uninett/nav/issues/2908))\n- Disable deletion of the default dashboard\n  ([#3150](https://github.com/Uninett/nav/issues/3150))\n- Rooms and locations with periods in their IDs can now be properly retrieved\n  from the corresponding API endpoints\n  ([#3186](https://github.com/Uninett/nav/issues/3186))\n- Fix spurious crashing when loading some Netmap layer 3 views\n  ([#3225](https://github.com/Uninett/nav/issues/3225))\n- Improve description of deleted maintenance components\n  ([#3228](https://github.com/Uninett/nav/issues/3228))\n- Stop SNMP-based `arp` plugin from stepping on the `paloaltoarp` plugins toes.\n  Note that this **requires** updating the plugin order in the `ip2mac` job in\n  `ipdevpoll.conf` ([#3252](https://github.com/Uninett/nav/issues/3252))\n- Ensure that each account has exactly one default dashboard\n\n\n## [5.11.0] - 2024-10-03\n\n### Removed\n\n- Dropped support for Python 3.7\n  ([#2790](https://github.com/Uninett/nav/issues/2790))\n\n### Added\n\n- Post lifecycle event when power supplies or fans are removed\n  ([#2982](https://github.com/Uninett/nav/issues/2982))\n- Post lifecycle event when a module or chassis is deleted via the status or\n  device history tools ([#2983](https://github.com/Uninett/nav/issues/2983))\n- Database model for representing Organizationally Unique Identifiers (OUI) to\n  identify vendors for MAC addresses\n- Script for populating database with OUIs and corresponding vendors from IEEE\n  ([#2945](https://github.com/Uninett/nav/issues/2945))\n- Module for generating JWTs\n  ([#2948](https://github.com/Uninett/nav/issues/2948))\n- Documentation for configuring and using JWT tokens in NAV API\n  ([#2618](https://github.com/Uninett/nav/issues/2618))\n\n### Changed\n\n- Upgraded dependencies after dropping support for Python 3.7\n  ([#2790](https://github.com/Uninett/nav/issues/2790))\n- Changed Sphinx version to 7.4.7\n  ([#2826](https://github.com/Uninett/nav/issues/2826))\n- Changed required PostgreSQL version to 13\n  ([#2892](https://github.com/Uninett/nav/issues/2892))\n- Moved the test suite's web crawler complexity away from the test discovery\n  phase to the test phase itself.  This reduces the number of generated test\n  cases from `N` to 2 (where `N` is the number of reachable NAV pages)\n  ([#2966](https://github.com/Uninett/nav/issues/2966))\n- Link to the doc for using docker for development from the README and\n  mention what ports are used when using docker for development\n  ([#2978](https://github.com/Uninett/nav/issues/2978))\n- Many user-facing forms of the web user interface have been refactored in\n  order to remove a dependency that keeps NAV incompatible with Python 3.11.\n  This should not affect looks or functionality.  This work is still ongoing in\n  the master branch and we hope it will be complete by NAV version 5.12.\n\n### Fixed\n\n- Correctly delete an IP Device's existing `function` value when empty field\n  value is submitted in the IP Device IP Device edit form\n  ([#2269](https://github.com/Uninett/nav/issues/2269))\n- Fixed crash bug when reordering filters within a filter group in Alert Profiles\n  ([#2979](https://github.com/Uninett/nav/issues/2979))\n- Fixed IPAM API crash bug that caused unnecessary error reports sent as e-mail\n  to site admins ([#2989](https://github.com/Uninett/nav/issues/2989))\n- Fixed bad tooltip grammar in ipdevinfo \"degraded aggregate link\" badge\n- Make the test suite easier to run under MacOS\n- Skip tests when 3rd party requirements are missing, instead of outright\n  failing\n\n### Security\n\n- Ensure that CSRF token info is preserved when refactoring crispy forms to\n  non-crispy equivalents. This means that `flat_form.html` and\n  `_form_content.html` templates will include CSRF token info if form method is\n  set to `POST`. ([#3056](https://github.com/Uninett/nav/issues/3056))\n\n\n## [5.10.2] - 2024-06-03\n\n\n### Changed\n\n- `snmptrapd` renamed to `navtrapd` to avoid naming conflicts with Net-SNMP\n  programs ([#2926](https://github.com/Uninett/nav/issues/2926))\n\n### Fixed\n\n- Replace incorrect fix for premature ARP record closure introduced in 5.10.1\n  ([#2910](https://github.com/Uninett/nav/issues/2910))\n\n\n## [5.10.1] - 2024-05-27\n\n\n### Fixed\n\n- Fix Machine Tracker DNS search crashing from exhausting all available file\n  descriptors ([#2669](https://github.com/Uninett/nav/issues/2669))\n- ARP records of unreachable devices are now closed by `navclean` cron job at\n  configurable expiry intervals, rather than immediately as a response to a\n  short ICMP packet loss ([#2913](https://github.com/Uninett/nav/issues/2913))\n- Palo Alto API XML responses are now parsed based on keys instead of indexes\n  ([#2924](https://github.com/Uninett/nav/issues/2924))\n\n\n## [5.10.0] - 2024-05-16\n\n\n### Removed\n\n- Removed references to IRC support channel from documentation, as the channel\n  is closing down ([#2907](https://github.com/Uninett/nav/issues/2907))\n\n### Deprecated\n\n- Support for Python versions older than 3.9 will be dropped in NAV 5.11.\n\n### Added\n\n- New ipdevpoll plugin to fetch ARP cache data from Palo Alto firewall APIs\n  ([#2613](https://github.com/Uninett/nav/issues/2613))\n- Introduced `towncrier` to aid in collaborative NAV changelog authoring\n  ([#2869](https://github.com/Uninett/nav/issues/2869))\n- Add library utilities to produce QR codes to arbitrary URLs, for use in\n  upcoming features ([#2887](https://github.com/Uninett/nav/issues/2887))\n- Added towncrier to automatically produce changelog\n\n### Changed\n\n- Change the Docker Compose-based development environment to use more build\n  caching and avoid running too many things as root\n  ([#2859](https://github.com/Uninett/nav/issues/2859))\n- Changed required PostgreSQL version to 11\n\n### Fixed\n\n- Avoid running command line scripts twice on every invocation\n  ([#2877](https://github.com/Uninett/nav/issues/2877),\n  [#2878](https://github.com/Uninett/nav/pull/2878))\n- Fixed `full-nav-restore.sh` developer helper script that broke after Docker\n  Compose development was reorganized\n  ([#2888](https://github.com/Uninett/nav/issues/2888))\n- Fix missing delete icon in form selector labels\n  ([#2898](https://github.com/Uninett/nav/issues/2898))\n\n\n\n## [5.9.1] - 2024-03-15\n\n### Fixed\n\n- Fixed broken `navclean` and `navsynctypes`  scripts ([#2875](https://github.com/Uninett/nav/pull/2875), [#2874](https://github.com/Uninett/nav/issues/2874))\n\n## [5.9.0] - 2024-03-08\n\n### Added\n\n- Added option to enable secure cookies in new web security section of `webfront.conf` ([#2194](https://github.com/Uninett/nav/issue/2194), [#2815](https://github.com/Uninett/nav/pull/2815))\n- Made `mod_auth_mellon` (SAML) work for logins ([#2740](https://github.com/Uninett/nav/pull/2740))\n  - Also added howto for setting up `mod_auth_mellon` for Feide authentication.\n\n### Fixed\n\n- Cycle session IDs on login/logout to protect against potential session fixation attacks ([#2804](https://github.com/Uninett/nav/issues/2804), [#2813](https://github.com/Uninett/nav/pull/2813), [#2836](https://github.com/Uninett/nav/pull/2836), [#2835](https://github.com/Uninett/nav/pull/2835))\n- Flush sessions on logout ([#2828](https://github.com/Uninett/nav/pull/2828))\n- Prevent clickjacking attacks on NAV by disallowing putting NAV site in document frames ([#2816](https://github.com/Uninett/nav/pull/2816), [#2817](https://github.com/Uninett/nav/pull/2817))\n- Cleaned up overview/intro docs ([#2827](https://github.com/Uninett/nav/pull/2827))\n- Various cleanups of the test suites:\n  - Remove `FakeSession` redundancy ([#2841](https://github.com/Uninett/nav/issues/2841), [#2842](https://github.com/Uninett/nav/pull/2842))\n  - Fixed activeipcollector `get_timestamp` function implementation and its broken timezone-naive test ([#2831](https://github.com/Uninett/nav/pull/2831))\n  - Fixed broken statemon tests ([#2832](https://github.com/Uninett/nav/pull/2832))\n  - Fixed warnings during integration tests ([#2847](https://github.com/Uninett/nav/issues/2847), [#2858](https://github.com/Uninett/nav/pull/2858))\n  - Preserve 500-errors in webcrawler tests ([#2861](https://github.com/Uninett/nav/pull/2861))\n- Removed nonsensical pydantic requirement ([#2867](https://github.com/Uninett/nav/pull/2867))\n- Removed warnings when building docs ([#2856](https://github.com/Uninett/nav/pull/2856))\n\n### Changed\n\n- Modernize installation of NAV scripts/binaries using `pyproject.toml` ([#2676](https://github.com/Uninett/nav/issues/2676), [#2679](https://github.com/Uninett/nav/pull/2679))\n- Changed the documentation theme from \"Bootstrap\" to \"Read The Docs\", as the Bootstrap theme was no longer being maintained.  This also avoids unnecessary JavaScript libraries in the docs ([#2805](https://github.com/Uninett/nav/issues/2805), [#2825](https://github.com/Uninett/nav/pull/2825), [#2824](https://github.com/Uninett/nav/pull/2824), [#2834](https://github.com/Uninett/nav/issues/2834), [#2837](https://github.com/Uninett/nav/pull/2837), [#2833](https://github.com/Uninett/nav/issues/2833), [#2853](https://github.com/Uninett/nav/pull/2853), [#2868](https://github.com/Uninett/nav/pull/2868))\n- Various changes needed to move NAV closer to being fully compatible with Python 3.11:\n  - Replaced all uses of `pkg_resources` with `importlib` ([#2791](https://github.com/Uninett/nav/issues/2791), [#2798](https://github.com/Uninett/nav/pull/2798), [#2799](https://github.com/Uninett/nav/pull/2799))\n  - Upgraded Twisted to a version that supports Python 3.11 ([#2792](https://github.com/Uninett/nav/issues/2792), [#2796](https://github.com/Uninett/nav/pull/2796))\n  - Upgraded psycopg to 2.9.9 ([#2793](https://github.com/Uninett/nav/issues/2793), [#2795](https://github.com/Uninett/nav/pull/2795))\n  - Dropped code that was there to support Django's older than 3.2 ([#2823](https://github.com/Uninett/nav/pull/2823))\n  - Upgraded `python-ldap` from 3.4.0->3.4.4 ([#2830](https://github.com/Uninett/nav/pull/2830))\n  - Enabled running test suite on Python 3.10 by default ([#2838](https://github.com/Uninett/nav/pull/2838))\n  - Stopped running test suite on Python 3.8 by default ([#2851](https://github.com/Uninett/nav/pull/2851))\n  - Fixed invalid/deprecated backslash escapes in MIB dump files, as warned about in newer Python versions ([#2846](https://github.com/Uninett/nav/pull/2846), [#2848](https://github.com/Uninett/nav/pull/2848))\n  - Fixed deprecation warning for Django 4.0 in test suite ([#2844](https://github.com/Uninett/nav/pull/2844))\n  - Removed an adaption to Pythons older than 3.7 ([#2840](https://github.com/Uninett/nav/pull/2840))\n  - Install Node/NPM in docker dev environment ([#2855](https://github.com/Uninett/nav/pull/2855))\n  - Vendor the PickleSerializer ([#2866](https://github.com/Uninett/nav/pull/2866))\n\n## [5.8.4] - 2023-12-14\n\n### Fixed\n\n- Allow admins to configure ports with invalid or unset native VLANs in PortAdmin ([#2477](https://github.com/Uninett/nav/issues/2477), [#2786](https://github.com/Uninett/nav/pull/2786))\n- Fix bug that caused PoE config to be completely disabled for Cisco devices where at least one port did not support PoE ([#2781](https://github.com/Uninett/nav/pull/2781))\n- Fix PortAdmin save button moving around for ports without PoE support ([#2782](https://github.com/Uninett/nav/pull/2782))\n- Fix PortAdmin bug that prevented switching PoE state back and forth without reloading entire page ([#2785](https://github.com/Uninett/nav/pull/2785))\n- Fix regression that caused maintenance tasks to be un-editable ([#2783](https://github.com/Uninett/nav/issues/2783), [#2784](https://github.com/Uninett/nav/pull/2784))\n\n## [5.8.3] - 2023-12-01\n\n### Fixed\n\n- Fix non-working SNMPv1 communication ([#2772](https://github.com/Uninett/nav/issues/2772), [#2779](https://github.com/Uninett/nav/issues/2779), [#2780](https://github.com/Uninett/nav/pull/2780))\n\n## [5.8.2] - 2023-11-30\n\n### Fixed\n\n- Fix broken \"operate as user\" function in User and API Administration tool ([#2766](https://github.com/Uninett/nav/issues/2766), [#2777](https://github.com/Uninett/nav/pull/2777))\n- Fix crashing PDU widget ([#2776](https://github.com/Uninett/nav/pull/2776))\n- Fix bug that caused PortAdmin to stop working for Cisco switches ([#2773](https://github.com/Uninett/nav/issues/2773), [#2774](https://github.com/Uninett/nav/pull/2774))\n\n\n## [5.8.1] - 2023-11-29\n\n### Fixed\n\n- Constrain version of 3rd party module `ciscoconfparse`, in order to avoid NAV not working under Python 3.7 ([#2770](https://github.com/Uninett/nav/issues/2770), [#2771](https://github.com/Uninett/nav/pull/2771))\n- Fix ipdevpoll crash error from using SNMP v2c profile example that came with NAV ([#2767](https://github.com/Uninett/nav/issues/2767), [#2768](https://github.com/Uninett/nav/pull/2768))\n- Gracefully handle encoding errors in invalid sysname/IP input in SeedDB IP Device form ([#2764](https://github.com/Uninett/nav/pull/2764))\n- Gracefully handle errors from invalid profiles list input in SeedDB IP Device form ([#2765](https://github.com/Uninett/nav/pull/2765))\n\n## [5.8.0] - 2023-11-24\n\n### Added\n\n- Initial SNMPv3 support added to most parts of NAV\n  - Add an SNMPv3 management profile type ([#2693](https://github.com/Uninett/nav/issues/2693), [#2699](https://github.com/Uninett/nav/pull/2699))\n  - Add SNMPv3 session support to the synchronous SNMP libraries used by most parts of NAV except ipdevpoll ([#2700](https://github.com/Uninett/nav/issues/2700), [#2710](https://github.com/Uninett/nav/pull/2710))\n  - Add SNMPv3 reachability tests in SeedDB IP Device registration forms ([#2704](https://github.com/Uninett/nav/issues/2704), [#2734](https://github.com/Uninett/nav/pull/2734), [#2727](https://github.com/Uninett/nav/issues/2727), [#2730](https://github.com/Uninett/nav/pull/2730))\n  - Add SNMPv3 support to Portadmin ([#2712](https://github.com/Uninett/nav/issues/2712), [#2731](https://github.com/Uninett/nav/pull/2731))\n  - Add SNMPv3 support to `navsnmp` command line program ([#2724](https://github.com/Uninett/nav/issues/2724), [#2725](https://github.com/Uninett/nav/pull/2725))\n  - Add SNMPv3 support to Arnold ([#2726](https://github.com/Uninett/nav/issues/2726), [#2733](https://github.com/Uninett/nav/pull/2733))\n  - Add SNMPv3 session support to ipdevpoll's asynchronous SNMP libraries ([#2736](https://github.com/Uninett/nav/issues/2736), [#2743](https://github.com/Uninett/nav/pull/2743))\n  - Add SNMPv3 support to`navoidverify` and `naventity` command line programs ([#2747](https://github.com/Uninett/nav/issues/2747), [#2748](https://github.com/Uninett/nav/pull/2748))\n- Power-over-Ethernet configuration support for Cisco and Juniper equipment in PortAdmin ([#2632](https://github.com/Uninett/nav/issues/2632), [#2633](https://github.com/Uninett/nav/issues/2633), [#2666](https://github.com/Uninett/nav/pull/2666), [#2635](https://github.com/Uninett/nav/pull/2635), [#2759](https://github.com/Uninett/nav/pull/2759))\n- Extract VLAN association from router port names on Checkpoint firewalls ([#2684](https://github.com/Uninett/nav/issues/2684), [#2701](https://github.com/Uninett/nav/pull/2701))\n- Add link to our GitHub discussion forums in \"Getting help\" documentation ([#2746](https://github.com/Uninett/nav/pull/2746))\n- Add subcommand to `navuser` command line program for deleting users ([#2705](https://github.com/Uninett/nav/pull/2705))\n- Add toggle in `webfront.conf` for automatic creation of remote users ([#2698](https://github.com/Uninett/nav/issue/2698), [#2707](https://github.com/Uninett/nav/pull/2707))\n- Add proper documentation index page for all howto guides ([#2716](https://github.com/Uninett/nav/pull/2716))\n- Add description to threshold alarms ([#2691](https://github.com/Uninett/nav/issue/2691), [#2709](https://github.com/Uninett/nav/pull/2709))\n\n\n#### Developer-centric additions\n\n- Add tests for overview of alert profiles page  ([#2741](https://github.com/Uninett/nav/pull/2741))\n- Add make rule for cleaning `doc` directory ([#2717](https://github.com/Uninett/nav/pull/2717))\n- Add an snmpd service container for SNMPv3 comms testing ([#2697](https://github.com/Uninett/nav/pull/2697))\n\n### Fixed\n\n- Improve validation of maintenance form input in order to avoid unintentional crash reports ([#2757](https://github.com/Uninett/nav/pull/2757))\n- Handle invalid alert profile ID form input without crashing ([#2756](https://github.com/Uninett/nav/pull/2756))\n- Prevent crash errors in esoteric situations where multiple dashboards have been erroneously marked as a user's default dashboard ([#2680](https://github.com/Uninett/nav/pull/2680))\n- Fix broken `navoidverify` command on Linux ([#2737](https://github.com/Uninett/nav/pull/2737))\n- Several regressions related to input validation in Alert Profiles were fixed:\n  - Fix regression that prevented filter groups from being deleted from an alert profile ([#2729](https://github.com/Uninett/nav/pull/2729))\n  - Fix regression that prevented activation/deactivation of alert profiles ([#2732](https://github.com/Uninett/nav/pull/2732))\n  - Fix form validation with \"equal\" and \"in\" operators for adding expression with group to filter ([#2750](https://github.com/Uninett/nav/pull/2750))\n  - Add more expression operator tests for alert profiles and fix cleaning in `ExpressionForm` ([#2752](https://github.com/Uninett/nav/pull/2752))\n\n#### Developer-centric fixes\n\n- Restructure alert profile tests ([#2739](https://github.com/Uninett/nav/pull/2739))\n\n### Changed\n\n- Allow write-enabled SNMP profiles to be used for reading when device has no read-only SNMP profiles ([#2735](https://github.com/Uninett/nav/issues/2735), [#2751](https://github.com/Uninett/nav/pull/2751))\n- Improved howto guide for setting up remote user authentication using `mod_auth_oidc` ([#2708](https://github.com/Uninett/nav/pull/2708))\n\n#### Developer-centric changes\n\n- Refactored web authentication code in preparation for future changes to authentication flow ([#2706](https://github.com/Uninett/nav/pull/2706))\n\n### Removed\n\n#### Developer-centric removals\n\n- Remove remaining uses of `Netbox.snmp_version` ([#2522](https://github.com/Uninett/nav/issues/2522))\n- Remove unused function `snmp_parameter_factory` ([#2753](https://github.com/Uninett/nav/pull/2753))\n- Remove deprecated Netbox SNMP properties ([#2754](https://github.com/Uninett/nav/pull/2754), [#2761](https://github.com/Uninett/nav/pull/2761))\n\n\n\n## [5.7.1] - 2023-09-18\n\n### Fixed\n\n- Fixed regression that caused Netmap to be unusable in 5.7.0 ([#2681](https://github.com/Uninett/nav/issues/2681), [#2683](https://github.com/Uninett/nav/pull/2683))\n\n## [5.7.0] - 2023-09-07\n\n### Added\n\n- Even more complex and flexible configuration of NAV logging is now supported through `logging.yml` ([#2659](https://github.com/Uninett/nav/pull/2659))\n- Added howto guide for log configuration ([#2660](https://github.com/Uninett/nav/pull/2660))\n- Currently non-functional (aka. \"blacklisted\") alert sender mechanisms are now flagged in the Alert Profiles tool wherever an affected alert address is displayed ([#2653](https://github.com/Uninett/nav/issues/2653), [#2664](https://github.com/Uninett/nav/issues/2664), [#2677](https://github.com/Uninett/nav/pull/2677), [#2678](https://github.com/Uninett/nav/pull/2678))\n- Added support for polling and alerting on Juniper chassis and system alerts ([#2358](https://github.com/Uninett/nav/issues/2358), [#2388](https://github.com/Uninett/nav/pull/2388))\n  - Juniper only provides alert counters via SNMP, no alert details, unfortunately.\n  - Since NAV doesn't support alert state updates, a new eventengine plugin handles alert count transitions by resolving old alerts and creating new ones ([#2432](https://github.com/Uninett/nav/issues/2432), [#2519](https://github.com/Uninett/nav/pull/2519))\n- Added a new `contains_address` filter to the `prefix` API endpoint, to enable lookup of matching prefix/vlan details from a single IP or subnet address ([#2577](https://github.com/Uninett/nav/issues/2577), [#2578](https://github.com/Uninett/nav/pull/2578))\n- Defined and added abstract methods for Power-over-Ethernet configuration to PortAdmin management handler classes ([#2636](https://github.com/Uninett/nav/pull/2636))\n  - These are needed for the upcoming vendor specific implementations of PoE config in PortAdmin.\n- Implemented configuration file parsing for upcoming local JWT token feature ([#2568](https://github.com/Uninett/nav/pull/2568))\n\n### Fixed\n\n#### User-visible fixes\n\n- Properly dispose of outgoing alert notifications to invalid alert addresses ([#2661](https://github.com/Uninett/nav/pull/2661))\n- Fixed crash when attempting to log device errors with an empty comment in the Device History tool ([#2579](https://github.com/Uninett/nav/issues/2579), [#2580](https://github.com/Uninett/nav/pull/2580))\n- Fixed bad styling and missing linebreaks in traceback section of the 500 error page ([#2607](https://github.com/Uninett/nav/issues/2607), [#2628](https://github.com/Uninett/nav/pull/2628))\n- Show help text instead of error when running `nav` command without arguments ([#2601](https://github.com/Uninett/nav/issues/2601), [#2603](https://github.com/Uninett/nav/pull/2603))\n- Prevent users from entering invalid `sysObjectID` values when editing Netbox types in SeedDB ([#2584](https://github.com/Uninett/nav/pull/2584), [#2566](https://github.com/Uninett/nav/issues/2566))\n- Removed upper version bound for *Pillow* image manipulation library, to fix security warnings ([#2567](https://github.com/Uninett/nav/pull/2567))\n- Alerts that cannot be sent due to blacklisted media plugins will no longer fill up `alertengine.log` every 30 seconds, unless DEBUG level logging is enabled ([#1787](https://github.com/Uninett/nav/issues/1787), [#2652](https://github.com/Uninett/nav/pull/2652))\n- DNS lookups in ipdevinfo are now properly case insensitive ([#2615](https://github.com/Uninett/nav/issues/2615), [#2650](https://github.com/Uninett/nav/pull/2650))\n- Alert Profiles will now properly require Slack alert addresses to be valid URLs ([#2657](https://github.com/Uninett/nav/pull/2657))\n- 5 minute and 15 minute load average values will now be collected correctly for Juniper devices ([#2671](https://github.com/Uninett/nav/issues/2671), [#2672](https://github.com/Uninett/nav/pull/2672))\n- Fix cabling API, which broke due to internal refactorings ([#2621](https://github.com/Uninett/nav/pull/2621))\n- Only install NAV's custom `epollreactor2` in ipdevpoll if running on Linux ([#2503](https://github.com/Uninett/nav/issues/2503), [#2604](https://github.com/Uninett/nav/pull/2604))\n  - Stops ipdevpoll from crashing on BSDs.\n\n#### Developer-centric fixes\n\n- Moved more of NAV's packaging definition to `pyproject.toml` ([#2655](https://github.com/Uninett/nav/pull/2655))\n- Pin pip to version 23.1.0 for CI pipelines to continue working ([#2647](https://github.com/Uninett/nav/pull/2647))\n- Improve ipdevpoll logging of SQL queries and from Twisted library ([#2640](https://github.com/Uninett/nav/pull/2640))\n- Stop making skipped validation tests for non HTML content ([#2623](https://github.com/Uninett/nav/pull/2623))\n- Version-locked indirect dependencies of test suites ([#2622](https://github.com/Uninett/nav/pull/2622), [#2617](https://github.com/Uninett/nav/issues/2617))\n- Improve SNMP forwarding/proxying container setup, including adding IPv6 support ([#2637](https://github.com/Uninett/nav/pull/2637), [#2516](https://github.com/Uninett/nav/pull/2516))\n- Documented a recipe for establishing SNMP tunnels when testing devices on otherwise unreachable networks ([#2426](https://github.com/Uninett/nav/issues/2426), [#2435](https://github.com/Uninett/nav/pull/2435))\n- Run Django development web server in \"insecure\" mode to improve simulation of a production environment when debug flag is turned off ([#2625](https://github.com/Uninett/nav/pull/2625))\n- Added a proper docstring to `bootstrap_django()` function ([#2619](https://github.com/Uninett/nav/pull/2619), [#2168](https://github.com/Uninett/nav/issues/2168))\n- Stop restoring stale tox environment caches in GitHub workflows ([#2605](https://github.com/Uninett/nav/pull/2605))\n- Added tests for ipdevpoll worker euthanization ([#2599](https://github.com/Uninett/nav/pull/2599), [#2548](https://github.com/Uninett/nav/issues/2548))\n- Added tests to ensure snmptrapd can properly look up a NAV router that sends traps from one of its non-management IP addresses ([#2500](https://github.com/Uninett/nav/issues/2500), [#2510](https://github.com/Uninett/nav/pull/2510))\n- Avoid redundant graphite time formatting strings by re-using constant ([#2588](https://github.com/Uninett/nav/pull/2588), [#2543](https://github.com/Uninett/nav/issues/2543))\n- Make detection of running in a virtualenv more compatible with modern toolchain ([#2573](https://github.com/Uninett/nav/pull/2573))\n- Revert to having tox run its own dependency installer ([#2572](https://github.com/Uninett/nav/pull/2572))\n- Added explicit back-relation names for several Django ORM models ([#2544](https://github.com/Uninett/nav/pull/2544), [#2546](https://github.com/Uninett/nav/pull/2546), [#2547](https://github.com/Uninett/nav/pull/2547), [#2549](https://github.com/Uninett/nav/pull/2549), [#2550](https://github.com/Uninett/nav/pull/2550), [#2551](https://github.com/Uninett/nav/pull/2551))\n\n## [5.6.1] - 2023-03-23\n\n### Added\n\n#### Developer-centric features\n- Document a recipe for establishing SNMP tunnels using socat/SSH ([#2426](https://github.com/Uninett/nav/issues/2426), [#2435](https://github.com/Uninett/nav/pulls/2435))\n- Updated/added explicit relation names to various ORM models ([#2544](https://github.com/Uninett/nav/pull/2544), [#2546](https://github.com/Uninett/nav/pull/2546), [#2547](https://github.com/Uninett/nav/pull/2547), [#2549](https://github.com/Uninett/nav/pull/2549), [#2550](https://github.com/Uninett/nav/pull/2550), [#2551](https://github.com/Uninett/nav/pull/2551), [#2595](https://github.com/Uninett/nav/pull/2595), [#2596](https://github.com/Uninett/nav/pull/2596))\n- Added tests for simple searches ([#2597](https://github.com/Uninett/nav/pull/2597))\n\n### Fixed\n\n#### User-visible fixes\n- Ensure event variables are always posted in transactions, so the event engine does not accidentally end up processing incomplete event information ([#2594](https://github.com/Uninett/nav/pull/2594))\n- Report broken cache configuration as an error in Ranked Statistics tool, rather than taking down the whole NAV site ([#2561](https://github.com/Uninett/nav/issues/2561), [#2563](https://github.com/Uninett/nav/pull/2563))\n- Show error message on invalid ip address in ipdevinfo ([#2590](https://github.com/Uninett/nav/pull/2590), [#2589](https://github.com/Uninett/nav/issues/2589))\n- Link to correct room in room report if room has a space in its name ([#2593](https://github.com/Uninett/nav/pull/2593), [#2592](https://github.com/Uninett/nav/issues/2592))\n- Work around duplicate internal serial numbers in Juniper equipment by trusting data only from the device with the lowest entity index ([#2583](https://github.com/Uninett/nav/pull/2583), [#2493](https://github.com/Uninett/nav/issues/2493))\n- Make save function in AlertHistory, EventHistory and AlertQueue atomic  ([#2594](https://github.com/Uninett/nav/pull/2594))\n- Ignore LDAP server referral responses, rather then erroring out during the login process ([#2576](https://github.com/Uninett/nav/pull/2576), [#1166](https://github.com/Uninett/nav/issues/1166))\n- Include the `new_version` variable in alert message templates for device hw/fw/sw upgrades ([#2565](https://github.com/Uninett/nav/pull/2565))\n- Update NAV blog widget to use the new blog URL ([#2585](https://github.com/Uninett/nav/pull/2585))\n- Handle invalid IP address input in ipdevinfo device searches gracefully, rather then crashing with a 500 error ([#2589](https://github.com/Uninett/nav/issues/2589), [#2590](https://github.com/Uninett/nav/pull/2590))\n- Fix broken links to room details from room report for rooms with spaces in their names ([#2592](https://github.com/Uninett/nav/issues/2592), [#2593](https://github.com/Uninett/nav/pull/2593))\n- Catch Validation error in filtering of prefixes in API ([#2606](https://github.com/Uninett/nav/issues/2606), [#2608](https://github.com/Uninett/nav/pull/2608))\n- Redesign the 500 Error page so that the exception traceback if formatted as one\n\n\n## [5.6.0] - 2023-01-20\n\n### Added\n\n#### User-visible features\n\n- NAPALM/NETCONF management profiles can now be configured with custom timeout values ([#2460](https://github.com/Uninett/nav/pull/2460), [#2390](https://github.com/Uninett/nav/issues/2390))\n- Post lifecycle events the first time new chassis/module/PSU/fan devices are seen ([#2391](https://github.com/Uninett/nav/issues/2391), [#2414](https://github.com/Uninett/nav/pull/2414))\n- Accept JSON Web Tokens signed by third-parties as valid API authentication/authorization tokens ([#2483](https://github.com/Uninett/nav/issues/2483), [#2511](https://github.com/Uninett/nav/pull/2511))\n- Collect \"chassis\" serial numbers from Aruba wireless controllers ([#2514](https://github.com/Uninett/nav/pull/2514))\n- Added an API endpoint for module information ([#2517](https://github.com/Uninett/nav/issues/2517), [#2520](https://github.com/Uninett/nav/pull/2520))\n- Result caching added to ranked statistics - including the ability to populate the cache regularly behind-the-scenes in a cronjob (([#1504](https://github.com/Uninett/nav/issues/1504), [#2398](https://github.com/Uninett/nav/pull/2398))\n\n#### Developer-centric features\n\n- Added `buglog.py` option to fetch issue numbers from git reflog ([#2474](https://github.com/Uninett/nav/pull/2474))\n- Added tests for  `get_memory_usage` for all memory MIBs ([#2376](https://github.com/Uninett/nav/issues/2376), [#2441](https://github.com/Uninett/nav/pull/2441))\n- Added tests to discover invalid MIB dumps from smidump ([#2501](https://github.com/Uninett/nav/issues/2501), ([#2521](https://github.com/Uninett/nav/pull/2521))\n- Updated/added explicit relation names to various ORM models ([#2539](https://github.com/Uninett/nav/pull/2539), [#2540](https://github.com/Uninett/nav/pull/2540), [#2541](https://github.com/Uninett/nav/pull/2541), [#2542](https://github.com/Uninett/nav/pull/2542))\n\n### Fixed\n\n#### User-visible fixes\n\n- Empty alert messages are no longer sent when device software upgrades are detected ([#2533](https://github.com/Uninett/nav/issues/2533))\n- Merged two fixes from the 5.4.x stable series that never actually made it into the 5.5 series:\n  - Metric values of *0.0* are evaluated correctly by threshold rules ([#2447](https://github.com/Uninett/nav/issues/2447))\n  - Validate maintenance calendar input form to avoid e-mail spam from bots scanning for vulnerabilities ([#2420](https://github.com/Uninett/nav/issues/2420), [#2431](https://github.com/Uninett/nav/pull/2431))\n- Properly log (for posterity) old and new revision numbers with every software/hardware/firmware upgrade event NAV posts ([#2515](https://github.com/Uninett/nav/pull/2515), [#2545](https://github.com/Uninett/nav/pull/2545), [#2560](https://github.com/Uninett/nav/pull/2560))\n- snmpwalk routine for synchronous NAV code now correctly handles end-of-mib-view errors ([#1925](https://github.com/Uninett/nav/issues/1925), [#2489](https://github.com/Uninett/nav/pull/2489))\n- Removed deprecation warnings from command line programs `navsnmp`, `naventity` and `navoidverify` ([#2389](https://github.com/Uninett/nav/issues/2389), [#2429](https://github.com/Uninett/nav/pull/2429))\n\n#### Developer-centric fixes\n\n- Use pip-compile's backtracking dependency resolver to fix failing CI pipelines ([#2509](https://github.com/Uninett/nav/pull/2509))\n- Updated libsnmp dependency for newer Ubuntu runners in GitHub pipelines ([#2532](https://github.com/Uninett/nav/pull/2532))\n- Use same version of Django for pylint runs as the latest stable release ([#2536](https://github.com/Uninett/nav/pull/2536))\n- Fixed a slew of new CI pipeline / test suite problems that appear after new years ([#2537](https://github.com/Uninett/nav/pull/2537))\n\n## [5.5.2] - 2022-11-10\n\n### Fixed\n\n- Fix serious collection breakdown in ipdevpoll by re-generating a valid Python representation of CISCO-ENHANCED-MEMPOOL-MIB ([#2494](https://github.com/Uninett/nav/issues/2494), [#2495](https://github.com/Uninett/nav/pull/2495))\n- Fix broken trap processing in snmptrapd ([#2497](https://github.com/Uninett/nav/issues/2497), [#2498](https://github.com/Uninett/nav/pull/2498))\n\n\n## [5.5.1] - 2022-11-09\n\n### Fixed\n\n- Delete and ignore module devices with fake serial number `BUILTIN`, as reported by Juniper equipment, in order to avoid spamming with `device[SFH]wUpgrade` alerts ([#2491](https://github.com/Uninett/nav/issues/2491), [#2492](https://github.com/Uninett/nav/pull/2492))\n\n## [5.5.0] - 2022-11-04\n\n### Changed\n\n- Bump `lxml` from 4.6.5 to 4.9.1 in /tests ([#2443](https://github.com/Uninett/nav/pull/2443))\n- Links and documented references to the NAV mailing lists have changed to the `lister.sikt.no` domain.\n\n### Added\n\n- Add link to #nav irc channel on Libera.Chat to README file ([#2475](https://github.com/Uninett/nav/pull/2475))\n- Add `mac_addresses` attribute to `/netbox/` API endpoint ([#2487](https://github.com/Uninett/nav/pull/2487), [#2490](https://github.com/Uninett/nav/pull/2490))\n- Add ability to filter by alert severity in the status tool ([#2467](https://github.com/Uninett/nav/pull/2467))\n- Support for fetching ARP cache entries from all Arista VRF instances ([#2262](https://github.com/Uninett/nav/issues/2262), [#2454](https://github.com/Uninett/nav/pull/2454)))\n- Link aggregation information added to NAV API ([#1765](https://github.com/Uninett/nav/issues/1765), [#2440](https://github.com/Uninett/nav/pull/2440))\n- Support fetching memory stats from `CISCO-ENHANCED-MEMPOOL-MIB` ([#2236](https://github.com/Uninett/nav/issues/2236), [#2439](https://github.com/Uninett/nav/pull/2439))\n- Added a flag to `navcheckservice` that shows all available handler plugins ([#2378](https://github.com/Uninett/nav/issues/2378), [#2437](https://github.com/Uninett/nav/pull/2437))\n- Post `deviceHwUpgrade`/`deviceSwUpgrade`/`deviceFwUpgrade` events when changes are detected to devices' hardware, software or firmware revisions ([#2393](https://github.com/Uninett/nav/issues/2393), [#2413](https://github.com/Uninett/nav/pull/2413))\n- Call a `cleanup()` method for individual container objects after ipdevpoll save stage ([#2421](https://github.com/Uninett/nav/pull/2421))\n- Added `Device` methods to resolve and return related objects/entities (chassis, modules, fans, power supplied) and extended device descriptions ([#2428](https://github.com/Uninett/nav/pull/2428))\n\n### Fixed\n\n- Avoid potential resource leaks by properly closing configuration files after reading them ([#2451](https://github.com/Uninett/nav/pull/2451))\n- Geomap \"link to this configuration\" now actually opens the correct location at the correct zoom level ([#2412](https://github.com/Uninett/nav/issues/2412), [#2488](https://github.com/Uninett/nav/pull/2488))\n- snmptrapd can now identify an SNMP agent from any of its interface addresses ([#2387](https://github.com/Uninett/nav/issues/2387), [#2461](https://github.com/Uninett/nav/pull/2461))\n- PortAdmin now ignores incorrectly configured VLAN tags (tagged as `NA`) on Juniper switches, instead of crashing ([#2452](https://github.com/Uninett/nav/issues/2452), [#2453](https://github.com/Uninett/nav/pull/2453))\n- Fix potential ipdevpoll crashes due to database fetches in wrong thread ([#2478](https://github.com/Uninett/nav/issues/2478), [#2480](https://github.com/Uninett/nav/pull/2480))\n- Handle Graphite connection issues gracefully in ranked statistics page ([#2459](https://github.com/Uninett/nav/pull/2459))\n- Handle Graphite connection issues gracefully in device group detail page ([#2345](https://github.com/Uninett/nav/issues/2345), [#2434](https://github.com/Uninett/nav/pull/2434))\n- Removed needless carbon data chunking from `activeipcollector` ([#1696](https://github.com/Uninett/nav/issues/1696), [#2462](https://github.com/Uninett/nav/pull/2462))\n- Evaluate `0.0` as a valid numeric metric value during threshold rule evaluations ([#2447](https://github.com/Uninett/nav/issues/2447)\n- Updated dead links in Geomap documentation ([#2419](https://github.com/Uninett/nav/pull/2419))\n- Link from IPAM to reserve prefixed in SeedDB now works again ([#2410](https://github.com/Uninett/nav/issues/2410), [#2422](https://github.com/Uninett/nav/pull/2422))\n- Improved inefficient database queries in Arnold ([#2425](https://github.com/Uninett/nav/pull/2425))\n- Updated tox examples in hacking documentation ([#2427](https://github.com/Uninett/nav/issues/2427), [#2430](https://github.com/Uninett/nav/pull/2430))\n- Fixed an `AttributeError` crash bug in the `naventity` command line program ([#2433](https://github.com/Uninett/nav/issues/2433), [#2444](https://github.com/Uninett/nav/pull/2444))\n\n## [5.4.0] - 2022-05-19\n\n### Changed\n\n- The changelog format has changed from the legacy format into one based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n- Transceivers are no longer classed as modules ([#1154](https://github.com/Uninett/nav/issues/1154))\n- Generate more secure API tokens ([#2366](https://github.com/Uninett/nav/issues/2366))\n- Remaining instances of \"Uninett\" in footer FAQ have changed to Sikt ([#2367](https://github.com/Uninett/nav/pull/2367))\n- Upgrade to napalm 3.4.1 ([#2403](https://github.com/Uninett/nav/pull/2403))\n\n### Added\n\n- Support more recent AKCP environment probes ([#2107](https://github.com/Uninett/nav/issues/2107)\n- Collect and graph temperature readings from JUNIPER-MIB ([#2342](https://github.com/Uninett/nav/issues/2342))\n- Add support for wildcards in report IN operator (a.k.a. `(,,)`) ([#2347](https://github.com/Uninett/nav/issues/2347))\n- Get VLAN tag from Juniper chassis cluster redundant ethernet interface (\"RETH\") names ([#2357](https://github.com/Uninett/nav/issues/2357))\n- Collect and graph memory usage from JUNIPER-MIB ([#2359](https://github.com/Uninett/nav/issues/2359))\n- Document NAV's various command line utilities ([#2368](https://github.com/Uninett/nav/pull/2368))\n- Add a contrib script to ship ISC DHCP server lease stats to NAV's Graphite instance ([#2371](https://github.com/Uninett/nav/issues/2371))\n\n### Fixed\n\n- Don't display JavaScript alert dialog box when generating links to the current Geomap configuration ([#1016](https://github.com/Uninett/nav/issues/1016))\n- Optimize SeedDB prefix listing queries ([#2156](https://github.com/Uninett/nav/issues/2156))\n- Fix broken deletion of quick links from \"My stuff\"-menu ([#2334](https://github.com/Uninett/nav/issues/2334))\n- Display friendlier Juniper RPC error reports in Portadmin ([#2362](https://github.com/Uninett/nav/issues/2362))\n- Get rid of warning: `CacheKeyWarning: Cache key contains characters that will cause errors if used with memcached` ([#2379](https://github.com/Uninett/nav/issues/2379))\n- Get rid of warning: `DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated` ([#2381](https://github.com/Uninett/nav/issues/2381))\n-  Get rid of warning: `django.contrib.postgres.fields.JSONField is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.` ([#2382](https://github.com/Uninett/nav/issues/2382))\n- Rotate room image thumbnails correctly based on EXIF orientation tag ([#2385](https://github.com/Uninett/nav/issues/2385))\n- Fix Django JSONField import deprecation warnings ([#2396](https://github.com/Uninett/nav/pull/2396))\n- Fix broken documentation build environment in Read The Docs ([#2399](https://github.com/Uninett/nav/pull/2399))\n- Optimize SeedDB room listing queries ([#2400](https://github.com/Uninett/nav/pull/2400))\n- Optimize SeedDB netboxtype listing queries ([#2401](https://github.com/Uninett/nav/pull/2401))\n- Optimize SeedDB vlan listing queries ([#2402](https://github.com/Uninett/nav/pull/2402))\n- Fix broken deserialization of Rack data ([#2407](https://github.com/Uninett/nav/pull/2407))\n- Remove unnecessary quotation marks in SeedDB ([#2416](https://github.com/Uninett/nav/pull/2416))\n- Fix incorrect handling of stateless event posting in internal APIs ([#2417](https://github.com/Uninett/nav/pull/2417))\n\n### Removed\n\n- Remaining Python 2 compatibility code ([#2319](https://github.com/Uninett/nav/issues/2319))\n- Dependency on the `six` Python module\n"
  },
  {
    "path": "COPYING",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "Dockerfile",
    "content": "# NAV development container. This is NOT SUITABLE for production use of NAV.\n# For more production-oriented containerization, have a look at the separate\n# project https://github.com/Uninett/nav-container\n#\n# This container aims at providing all the build- and runtime dependencies of\n# NAV itself in a single container, and allowing for running them all directly\n# off the code in your source code checkout. It is intended to be used as part\n# of the docker-compose.yml file, where the PostgreSQL and Graphite services\n# are defined in separate containers.\n#\n# Run the container with your checked out NAV source code directory mounted on\n# the '/source' volume to build and run all the necessary components inside\n# the container. Changes to you SASS source files will be automatically\n# detected and compiled, and any changes to files in the python directory will\n# be immediately live in the web interface.\n#\n# The NAV web interface is exposed through the Django development server on\n# port 80.\n#\n# REQUIREMENT: For the users inside the container to be able to access the\n# source code mounted at /source, the directory and its files on the host must\n# be world-readable!\n#\n#\nFROM --platform=linux/amd64 debian:bookworm\n\n# We're using mount caches, so don't clean the apt cache after every apt command!\nRUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache\n\n#### Prepare the OS base setup ###\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \\\n    --mount=target=/var/cache/apt,type=cache,sharing=locked \\\n    apt-get update && \\\n    apt-get -y --no-install-recommends install \\\n            locales \\\n            python3-dbg python3-venv gdb \\\n            sudo python3-dev python3-pip python3-virtualenv build-essential supervisor \\\n\t        debian-keyring debian-archive-keyring ca-certificates curl gpg\n\n## Use deb.nodesource.com to fetch more modern versions of Node/NPM than Debian can provide\nRUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg && \\\n    echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main' > /etc/apt/sources.list.d/nodesource.list && \\\n    apt-get update && \\\n    apt-get install -y nodejs\n\nARG TIMEZONE=Europe/Oslo\nARG LOCALE=en_US.UTF-8\nARG ENCODING=UTF-8\nRUN echo \"${LOCALE} ${ENCODING}\" > /etc/locale.gen && locale-gen ${LOCALE} && update-locale LANG=${LOCALE} LC_ALL=${LOCALE}\nENV LANG=${LOCALE}\nENV LC_ALL=${LOCALE}\nRUN echo \"${TIMEZONE}\" > /etc/timezone && cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime\n\n#### Install various build and runtime requirements as Debian packages ####\n\nRUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \\\n    --mount=target=/var/cache/apt,type=cache,sharing=locked \\\n    apt-get update \\\n    && apt-get -y --no-install-recommends install \\\n       git-core \\\n       libsnmp40 \\\n       cron \\\n       sudo \\\n       inotify-tools \\\n       postgresql-client \\\n       vim \\\n       less \\\n       nbtscan \\\n       # Python package build deps: \\\n       libpq-dev \\\n       libjpeg-dev \\\n       libz-dev \\\n       libldap2-dev \\\n       libsasl2-dev \\\n       # Useful tools for network debugging and SNMP querying: \\\n       dnsutils \\\n       iproute2 \\\n       iputils-ping \\\n       snmp\n\n# Make an unprivileged nav user that corresponds to the user building this image.\n# Allow this user to run sudo commands and make a virtualenv for them to install NAV in\nARG UID\nARG GID\nRUN groupadd --gid \"$GID\" nav ; adduser --home=/source --shell=/bin/bash --uid=$UID --gid=$GID nav\nRUN echo \"nav    ALL =(ALL: ALL) NOPASSWD: ALL\" > /etc/sudoers.d/nav\n# Ensure the virtualenv's bin directory is on everyone's PATH variable\nRUN sed -e 's,^Defaults.*secure_path.*,Defaults        secure_path=\"/opt/venvs/nav/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",' -i /etc/sudoers\nRUN sed -e 's,^ENV_SUPATH.*,ENV_SUPATH      PATH=/opt/venvs/nav/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",' -i /etc/login.defs\nRUN sed -e 's,^ENV_PATH.*,ENV_PATH        PATH=/opt/venvs/nav/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games\",' -i /etc/login.defs\n\nRUN --mount=type=cache,target=/source/.cache,sharing=locked \\\n    mkdir -p /opt/venvs/nav && chown nav /opt/venvs/nav && \\\n    mkdir -p /etc/nav && chown nav /etc/nav && \\\n    chown -R nav /source/.cache\nUSER nav\nENV PATH=/opt/venvs/nav/bin:$PATH\nRUN python3.11 -m venv /opt/venvs/nav\nRUN --mount=type=cache,target=/source/.cache,sharing=locked \\\n    pip install --upgrade setuptools wheel pip-tools build\n\n#################################################################################\n### COPYing the requirements file to pip-install Python requirements may bust ###\n### Docker's cache at this point, so everything expensive you want to keep in ###\n### the cache should go before this.                                          ###\n#################################################################################\n\nCOPY tools/docker/supervisord.conf /etc/supervisor/conf.d/nav.conf\n\n# Make an initial install of all NAV requirements into the virtualenv, to make\n# builds inside the container go faster\nCOPY requirements/ /requirements\nCOPY requirements.txt /\nCOPY constraints.txt /\nCOPY tests/requirements.txt /test-requirements.txt\nCOPY doc/requirements.txt /doc-requirements.txt\nRUN --mount=type=cache,target=/source/.cache,sharing=locked \\\n    cd /opt/venvs/nav && \\\n    pip-compile --resolver=backtracking --output-file ./requirements.txt.lock -c /constraints.txt /requirements.txt /test-requirements.txt /doc-requirements.txt ; \\\n    pip install -r ./requirements.txt.lock\n\nARG CUSTOM_PIP=ipython\nRUN --mount=type=cache,target=/source/.cache,sharing=locked \\\n    pip install ${CUSTOM_PIP}\n\nCOPY tools/docker/full-nav-restore.sh /usr/local/sbin/full-nav-restore.sh\n\nVOLUME [\"/source\"]\nENV    DJANGO_SETTINGS_MODULE=nav.django.settings\nEXPOSE 8080\n\nCMD        [\"/source/tools/docker/run.sh\"]\n"
  },
  {
    "path": "HACKING",
    "content": "This document is now maintained as doc/hacking/hacking.rst\n"
  },
  {
    "path": "HISTORY",
    "content": "This file is the changelog archive in the old NAV format for versions prior to\nNAV 5.4.0.\n\nVersion 5.3.0\n(released 22 Feb 2022)\n\n On January 1st 2022, Uninett, NSD and Unit (all entities owned by the Norwegian\n government) were merged into the new governmental agency *Sikt - Norwegian\n Agency for Shared Services in Education and Research*. This marks the first release\n of NAV under the new name.\n\n User-visible features and improvements:\n\n  * #2245 (Link to room details page from SeedDB room edit page)\n  * #2274 (Hidden attributes for devices)\n    * #2323 (Completely hide all attributes starting with \"__\")\n  * #2309 (Support a report.conf.d/ style config directory for reports)\n  * #2311 (Wishlist: Info about locations visible via /report/location)\n\n Other fixed GitHub issues in this release:\n\n  * #2280 (Only ethernetCsmacd interfaces are shown in the room viewer)\n  * #2310 ([BUG] snmptrapd plugins crash when posting events in NAV 5.2)\n  * #2315 (Properly upgrade to Django 2.2)\n  * #2316 (Upgrade dependencies that will need a newer version to run on\n           Django 3.2 or later)\n  * #2317 (Upgrade Django to 3.2)\n  * #2321 (Also list local conf reports in report widget)\n  * #2324 ([BUG] Example severity rules distributed with NAV 5.2.1 do\n           not actually work)\n  * #2328 (Remove \"no access\" message from login page during normal\n           login)\n  * #2329 (Upgrade to dnspython 2.1)\n  * #2341 (Warn when database config isn't readable)\n  * #2352 (Fix Python 3.9 compatibility)\n  * #2353 (Document the name change from Uninett to Sikt)\n  * #2355 (Add Sikt to About page, copyrights and graphical profile)\n\n\nVersion 5.2.1\n(released 23 Sep 2021)\n\n Fixed GitHub issues in this release:\n\n  * #2304 (Display alert severity values in the event/alert details\n           page)\n  * #2306 ([BUG] pping is unable to report unreachable devices in NAV\n           5.2.0)\n  * #2308 ([BUG] Alert Profile severity filters that ship with NAV are\n           outdated)\n\n\nVersion 5.2.0\n(released 16 Sep 2021)\n\n User-visible features and improvements:\n\n  * #1928 (Document 802.1X support of PortAdmin for end users)\n  * #2289 (Add config option to disallow editing of uplinks and\n           downlinks in PortAdmin)\n  * #2295 (Redefine alert severity levels and make them configurable)\n  * #2297 (Document the event and alert type hierarchy)\n\n Fixed GitHub issues in this release:\n\n  * #2296 ([BUG] Portadmin save API incorrectly returns 500 error where\n           400 is appropriate)\n  * #2298 ([BUG] PortAdmin RpcError on JunOS 20 and newer)\n\n\nVersion 5.1.4\n(released 24 Jun 2021)\n\n Fixed GitHub issues in this release:\n\n  * #2281 ([BUG] Saving alert permissions crashes Alert Profiles)\n  * #2282 (PortAdmin SNMP error handling is broken in several ways)\n  * #2284 ([BUG] IP device interfaces don't get updated with speed\n           information)\n  * #2285 (Extract Cisco PoE port mapping method)\n  * #2288 (Disable the PortAdmin \"Enable\" checkbox for interfaces that\n           aren't editable)\n\nVersion 5.1.3\n(released 09 Apr 2021)\n\n Fixed GitHub issues in this release:\n\n  * #2159 ([BUG] UPS widget is inconsistent between showing minutes and\n           seconds remaining time)\n  * #2240 ([BUG] Workaround for wrong interface speed SNMP\n           implementations)\n  * #2253 (Drastically improve page load times on maintenance edit form)\n  * #2254 ([BUG] Search after partial IP-address crashes)\n  * #2255 (ipdevinfo maintenance task link should be to task details\n           view, not the task editor)\n  * #2257 (Exclude Coriant Groove port sensors from collection based on\n           portAdminStatus)\n  * #2260 (IP Device custom data should be \"urlized\")\n  * #2263 ([BUG] Job 'inventory' for xxx aborted: Job aborted due to\n           save failure (cause=ValueError('A string literal cannot\n           contain NUL (0x00) characters.')))\n  * #2264 (Hardcoded vendor name)\n  * #2267 (Link to filtered report must be urlencoded)\n  * #2269 ([BUG] ipdevinfo shows empty Function-field for some hosts)\n  * #2270 ([BUG] Documentation search does not work)\n  * #2275 (SshChecker not handling connections properly)\n\nVersion 5.1.2\n(released 15 Jan 2021)\n\n Fixed GitHub issues in this release:\n\n  * #2210 ([BUG] Traffic graphs use the SI unit system rather than\n           binary prefixes)\n  * #2215 ([BUG] NAV will refuse to identify LLDP remote port names that\n           contain trailing NUL bytes)\n  * #2235 ([BUG] TypeError at /alertprofiles/filters/add-expression/\n           _init__() takes 1 positional argument but 2 were given)\n  * #2238 ([BUG] Geomap doesn't work if DOMAIN_SUFFIX is not set in\n           nav.conf)\n  * #2239 ([BUG] using DOMAIN_SUFFIX  breaks netbox links in Geomap)\n  * #2241 (Allow custom tabs for port details view)\n  * #2250 (Fix formatting of small and negative numbers in Rickshaw\n           graphs)\n  * #2252 (Fix broken serial numbers for Juniper, APC PowerNet and old\n           HP devices)\n\nVersion 5.1.1\n(released 07 Dec 2020)\n\n Fixed GitHub issues in this release:\n\n  * #2200 ([BUG] HttpChecker crashes when username/password combo is\n           configured)\n  * #2216 ([BUG] BGP sessions with AS numbers larger than 2147483647\n           cause ipdevpoll jobs to fail with\n           psycopg2.errors.NumericValueOutOfRange)\n  * #2221 (NAV 5.1 Netmap is blank)\n  * #2222 ([BUG] configuring juniper device description results in HTML\n           special characters code)\n  * #2224 ([BUG] status now shows box as 'down' even though it is up)\n  * #2225 ([BUG] Alert export errors prevent proper processing of events\n           in eventengine)\n  * #2229 ([BUG] EventEngine alert export crashes on any alert from a\n           device that is a member of a device group)\n  * #2230 ([BUG] Cannot enable dot1x mode in PortAdmin)\n  * #2234 ([BUG] Bulk import, 'NoneType' object has no attribute\n           'split')\n\nVersion 5.1.0\n(released 26 Nov 2020)\n\n User-visible features and improvements:\n\n  * #2021 (Add SeedDB action to clone netboxes and rooms)\n  * #2051 (Link to affected devices in Management profile)\n  * #2128 (Add device filtering options to ipdevpoll and pping, to\n           enable support for horizontal scaling and distributed\n           monitoring)\n  * #2175 (Implement NAPALM management profiles and connectivity)\n  * #2185 (Modernize the type dumping script and make it available as an\n           installable script for end user use)\n  * #2204 (Add support for configuring Juniper switch ports in\n           PortAdmin)\n    - #2173 (Clean up PortAdmin ManagementHandler interface)\n    - #2112 (Refactor PortAdmin's SNMP back-end classes and factories)\n    - #2115 (Refactor portadmin configuration parsing bits)\n    - #2121 (Use nav.config.NAVConfigParser for PortAdmin configuration)\n    - #2205 (Adapt Portadmin UI workflow to meet needs of multiple\n             backend protocols)\n\n Fixed GitHub issues in this release:\n\n  * #2078 ([BUG] NAV daemons are unnecessarily run as root)\n  * #2103 (Support Django 2.2)\n  * #2139 ([BUG] fanState and psuState e-mail alerts say \"no message\n           template is defined\")\n  * #2141 (Work around lack of entity names when collecting sensors from\n           Arista devices)\n  * #2174 ([BUG] PortAdmin never issues a \"write mem\" operation when\n           editing trunks)\n  * #2190 ([BUG] Regression - mysql service check does not work)\n  * #2197 ([BUG] Bottom part of room images are obscured by image\n           caption)\n  * #2198 ([BUG] CSV export from Netbox interfaces in Room view produce\n           wrong filename and content.)\n  * #2199 (Make servicemon HttpChecker use the port number from the URL,\n           if present)\n  * #2207 (Netbox reference is not passed to customization template for\n           the ipdevinfo \"What if\" tab)\n  * #2213 ([BUG] NAV does not import room position)\n\n\nVersion 5.0.8\n(released 23 Oct 2020)\n\n This release fixes a single regression caused by the 5.0.7 release:\n\n  * #2196 ([BUG] ipdevpoll topo job crashes with a PostgreSQL\n           operational error, due to an index size error)\n\nVersion 5.0.7\n(released 15 Oct 2020)\n\n Fixed GitHub issues in this release:\n\n  * #2106 ([BUG] Cached LLDP/CDP records are never re-evaluated)\n  * #2182 ([BUG] Delayed delivery alert subscriptions crash Alert\n           Engine with a NameError)\n  * #2184 ([BUG] Unrecognized Neighbors are never removed when all\n           neighbors have been identified)\n  * #2187 ([BUG] Locked accounts with a NULL value for a password cannot\n           be edited)\n  * #2188 ([BUG] Useradmin user listing becomes excruciatingly slow when\n           many users have password issues)\n  * #2189 ([BUG] Regression - ftp service check in 5.X does not work)\n\nVersion 5.0.6\n(released 27 Aug 2020)\n\n Fixed GitHub issues in this release:\n\n  * #2144 (Prevent ipdevinfo from crashing on weird device names)\n  * #2149 (Inventory failing on DLink DGS-1100 : 'TypeError: argument of\n           type 'int' is not iterable')\n  * #2150 ([BUG] Interface down is causing widget 'status' to display\n           'Could not load widget' due to HTTP 500)\n  * #2165 ([BUG] Delayed delivery alert subscriptions in single time\n           period alert profiles are never sent)\n  * #2167 (Fix potential typecast issue with SQL migration to NAV 5.0)\n  * #2169 ([BUG] macwatch.py crashes when logging notifications about\n           found MAC addresses)\n  * #2170 ([BUG] Alertengine stops dispatching Slack notifications\n           indefinitely if Slack complains of too many requests)\n  * #2171 (Warn about user accounts that have issues with their\n           passwords)\n  * #2172 (Prevent login/password changes to default account)\n  * #2177 ([BUG] Attempting to move IP devices to another room crashes\n           SeedDB)\n  * #2178 ([BUG] PDU widget stops displaying properly if room is\n           deleted)\n  * #2179 ([BUG] UPS widget does not display properly if UPS is deleted\n           from NAV)\n  * #2180 ([BUG] Entering invalid dates in Device History search form\n           causes crash)\n\nVersion 5.0.5\n(released 13 Mar 2020)\n\n Fixed GitHub issues in this release:\n\n  * #1994 (snmptrapd linkupdown plugin does not handle v2 traps)\n  * #2101 ([BUG] Geomap data API endpoint crashes with a TypeError)\n  * #2109 ([BUG] ipdevinfo sensor details page crashes with\n           AttributeError on unit-less sensors)\n  * #2111 ([BUG] Logging non-ASCII characters crashes NAV programs)\n  * #2113 (Document advice for robust e-mail)\n  * #2114 ([BUG] Unable to save status filter in [Status] page)\n  * #2119 ([BUG] Latitude/Longitude is displayed weirdly in the SeedDB\n           room list)\n  * #2123 (Drop support for legacy status preference pickles)\n  * #2129 (Euthanize unresponsive ipdevpoll workers)\n  * #2130 ([BUG] Cannot import dashboard)\n\n\nVersion 5.0.4\n(released 16 Jan 2020)\n\n Fixed GitHub issues in this release:\n\n  * #2074 ([BUG] ipdevpoll inventory job crashes for many devices with\n           an AttributeError)\n  * #2075 ([BUG] Editing existing API tokens shows no enabled endpoints)\n  * #2076 ([BUG] Missing Javascript multiselect library used by\n           Useradmin API token form)\n  * #2077 ([BUG] string handling in snmptrapd is broken on Python 3)\n  * #2081 ([BUG] Bulk importing netboxes without a managment profile\n           raises an exception)\n  * #2083 ([BUG] TypeError is raised when creating a csv for download\n           from a room-search)\n  * #2085 ([BUG] TypeError is raised when getting navlet)\n  * #2087 ([BUG] Reports with many pages crash once page 4 is visited)\n  * #2090 ([BUG] Marking machine as disabled in arnold raises TypeError)\n  * #2092 ([BUG] ipdevinfo sensor tab produces too large Graphite\n           request)\n  * #2093 ([BUG] PortAdmin crashes when viewing a switch with non-ASCII\n           port descriptions)\n  * #2097 ([BUG] Adding a manual detention without a number of days\n           until autoenable crashes Arnold)\n\n\nVersion 5.0.3\n(released 19 Dec 2019)\n\n Fixed GitHub issues in this release:\n\n  * #2015 (Broken Mikrotik LLDP-MIB implementation causes ipdevpoll LLDP\n           plugin to crash)\n  * #2055 ([BUG] Navlets crash/appear blank if their config is stored as\n           legacy pickles)\n  * #2057 (Make servicemon run on Python 3)\n  * #2058 ([BUG] navpgdump crashes with TypeError on Python 3 if\n           exclusion options are provided)\n  * #2059 ([BUG] Coriant Groove sensors names appear as reprs of bytes\n           objects under Python 3)\n  * #2060 ([BUG] smsd gammudispatcher error handling fails on Python 3)\n  * #2061 ([BUG] silent_include tag template crashes any view that uses\n           it)\n  * #2062 ([BUG] ipdevpoll considers the same devices changed on every\n           reload loop, causing massive scheduling problems)\n  * #2063 (Massively reduce the number of queries produced by the API\n           /alert endpoint)\n  * #2065 ([BUG] some servicemon checker runs crash with a\n           UnboundLocalError)\n  * #2066 (Increase the max number of shown alerts in Status page to\n           1000 and provide feedback spinner when loading data)\n  * #2067 ([BUG] Alertengine Slack dispatcher fails with TypeError)\n  * #2068 ([BUG] Workaround for faulty Aruba ENTITY-MIB::entLogicalTable\n           implementation crashes with TypeError on Python 3)\n  * #2069 ([BUG] ipdevpoll inventory job crashes with a Django\n           ValidationError)\n  * #2070 ([BUG] Servicemon SMTP checker fails with \" a bytes-like\n           object is required, not 'str'\")\n  * #2071 ([BUG] Active maintenance task list crashes when tasks contain\n           deleted IP devices)\n  * #2072 ([BUG] Servicemon RadiusChecker always fails with \"secret must\n           be a binary string\" message)\n  * #2073 ([BUG] Room image upload crashes with a TypeError)\n\nVersion 5.0.2\n(released 13 Dec 2019)\n\n Fixed GitHub issues in this release:\n\n  * #2035 (Enable room geo positions to be writeable in API)\n  * #2036 ([BUG] logengine crash with AttributeError on every run on NAV\n           5.0.1)\n  * #2037 ([BUG] ipdevpolld multiprocess mode logs reams of TypeErrors)\n  * #2038 ([BUG] ipdevpoll psuwatch crash with TypeError immediately\n           after upgrade to NAV 5)\n  * #2039 (Fix broken natural sort implementation on Python 3 )\n  * #2041 (Geomap does not work in NAV 5.0.1)\n  * #2043 ([BUG] Syslog analyzer search returns nothing)\n  * #2044 ([BUG] navclean does not work under Python 3)\n  * #2045 ([BUG] Exception is raised when visiting /api/1/alert/ID)\n  * #2047 ([BUG] ipdevpoll jobs crash with \"A string literal cannot\n           contain NUL (0x00) characters\" messages for some devices)\n  * #2048 (Support MAC address device IDs from CDP records)\n  * #2049 ([BUG] ipdevinfo old style Switch port activity view is blank)\n  * #2050 ([BUG] Geomap is missing links between nodes)\n  * #2052 ([BUG] ipdevpoll inventory job sometimes crashes when saving\n           POE Port information)\n  * #2054 ([BUG] pping resolves all boxDown alerts on restart)\n  * #2055 ([BUG] Navlets crash/appear blank if their config is stored as\n           legacy pickles)\n  * #2056 ([BUG] Cannot add activity graphs to dashboard)\n\n\nVersion 5.0.1\n(released 05 Dec 2019)\n\n Fixed GitHub issues in this release:\n\n  * #2016 (ipdevpoll inventory job crashes when processing manufacturing\n           dates from ENTITY-MIB under Python 3)\n  * #2019 (IP Device info \"Neighbor\" tab is blank)\n  * #2023 (Netmap layer 3 crashing)\n  * #2025 (SeedDB bulk import file upload crashes)\n  * #2030 (Ensure internal snmp agent check state stays in sync with\n           global snmpAgentState)\n  * #2031 (Fix PortAdmin crash on invalid IP search)\n  * #2032 (Replace SNMP community columns in SeedDB netbox listing with\n           management profile lists)\n  * #2033 (Don't crash when logging in users with old-style password\n           hashes)\n\n\nVersion 5.0.0\n(released 07 Nov 2019)\n\n#############################################################\n##                   DEPRECATION WARNING                   ##\n#############################################################\n##                                                         ##\n## NAV will now also run on Python 3. Support for Python 2 ##\n## will be dropped shortly. Please refer to the release    ##\n## notes for details.                                      ##\n##                                                         ##\n#############################################################\n\n User-visible features and improvements:\n\n  * #1793 (Add maintenance filter option to netbox API endpoint)\n    + #1995 (Add maintenance filter to Netbox API endpoint)\n  * #1859 (Improve portadmin support for dot1x)\n  * #1905 (Add support for alcatel DDM-sensors)\n  * #1908 (Add display widget for binary/boolean sensors to \"racks\")\n  * #1919 (Add support for external sensors from newer Watchdog\n           products)\n    + #1926 (Add support for most external sensors on newer watchdog\n             products)\n  * #1930 (Refactor IT-WATCHDOGS-MIB MibRetriever implementations)\n  * #1943 (Improve support for boolean sensors in racks)\n  * #1947 (Management profiles)\n  * #1969 (Store local chassis ids from LLDP-MIB and use for neighbor\n           lookups)\n  * #1970 (Add API for management profiles)\n  * #1971 (Provide option to automatically enable CDP on voice ports)\n    + #1974 (enabling CDP when a voice port is set using portadmin)\n  * #1987 (Refactor power supply and fan monitoring functionality)\n  * #1988 (Add status monitoring for Juniper PSUs and FANs)\n  * #1989 (Collect optical sensor measurements from Coriant Groove\n           devices)\n  * #1998 (Remove support for alert dispatching over Jabber)\n  * #2002 (Refactor installation documentation.)\n  * #2005 (Export stream of serialized alerts from the event engine)\n  * #2007 (Support REMOTE_USER header for web authentication)\n  * #2008 (Add more database stats to Watchdog's \"NAV by the numbers\")\n\n Fixed GitHub issues in this release:\n\n  * #1978 (Netmap layer 2 traffic data requests to Graphite are too slow\n           and too large)\n  * #1979 (Location alerts widget crashes intermittently)\n  * #1980 (Using the wrong Radius dictionary file can cause servicemon\n           to eat all available system memory and hang)\n  * #1984 (Blank sysnames should not be allowed)\n    + #1985 (Disallow blank sysnames)\n  * #1990 (Make type changes immediately when unknown types are\n           encountered)\n  * #2004 ([BUG] Interface browser shows wrong \"last used\" date)\n  * #2009 (Ensure rooms require a location attribute also in the SQL\n           schema)\n\n\nVersion 4.9.8\n(released 22 Aug 2019)\n\n Fixed GitHub issues in this release:\n\n  * #1753 (SNMP-less servers are no longer connected in the NAV\n           topology)\n  * #1941 (Interface information pop-ups in the status widget tends to\n           hang)\n  * #1942 (get_mib() should be able to load MIB modules from outside the\n           nav.smidumps package)\n  * #1962 (Environment rack widget edit mode crashes if there are racks\n           in rooms with non-ascii characters in their name)\n  * #1964 (smsd crashes when discarding non-dispatchable messages with\n           non-ASCII chars (or for users with non-ASCII chars in their\n           name))\n  * #1972 (Ensure PostgreSQL unique constraints are consistently named)\n  * #1973 (Stop explicitly installing pl/pgSQL during db init.)\n  * #1975 (Unhandled ValueError in eventengine when snmptrapd posts\n           invalid linkState events)\n  * #1976 (Properly display sensor data scale on sensor details page.)\n  * #1977 (Use Juniper 802.1X VLAN workaround in default configuration)\n\n\nVersion 4.9.7\n(released 07 Jun 2019)\n\n Fixed GitHub issues in this release:\n\n  * #1882 (Invalid VLANs are generated from Juniper switches)\n  * #1920 (Provide a hook for adding extra information in the What-If\n           tab in the IP Device Info page)\n  * #1946 (Vlans are categorized as linknets on Cisco Nexus with HSRP)\n  * #1953 (Adding new public filter in Alert Profiles fails)\n  * #1958 (NAV creates Graphite metrics with illegal characters in name)\n  * #1960 (Add option to control user administrator privileges from\n           LDAP)\n\n\nVersion 4.9.6\n(released 23 May 2019)\n\n Fixed GitHub issues in this release:\n\n  * #1782 (ipdevpoll snmpcheck algorithm no longer works as expected)\n    + #1952 ((snmpcheck) Store up/down state in NetboxInfo, so we can\n             properly sen…)\n  * #1931 (Support for HPE Metered PDUs)\n    + #1933 (Add support for HPE metered PDUs)\n  * #1935 (The VLAN dropdowns in PortAdmin needs to show the description\n           in addition to the id, if any)\n    + #1955 (Show net ident for vlans in the portadmin vlan dropdown box)\n  * #1944 (Sensor links in Environment Rack navlet does not work)\n  * #1948 (Verify LDAP entitlements)\n\n\nVersion 4.9.5\n(released 02 May 2019)\n\n Fixed GitHub issues in this release:\n\n  * #1890 (Temperature gauges do not render if multiple threshold rules\n           apply to it)\n    + #1921 (Handle arbitrary number of thresholds for a given sensor)\n  * #1902 (Sensor widgets should hyperlink to sensor's page view, not IP\n           Device's page view)\n  * #1903 (Topology missing for LLDP-enabled Alcatel switches)\n  * #1906 (\"Cisco chassis/module serial numbers decoded\" report crashes\n           when filtering)\n  * #1907 (servicemon DnsChecker fails when DNS server doesn't have a\n           matching record)\n  * #1916 (UninettMailDispatcher does not work under NAV 4.9)\n  * #1917 (snmptrapd needs to log more details about received traps)\n  * #1923 (ENTITY-MIB implementation can no longer resolve physical\n           device classes properly)\n    + #1924 (Support cross-MIB type definitions in MibRetrievers)\n\n\nVersion 4.9.4\n(released 28 Mar 2019)\n\n NB: This release introduces a new dependency to py2-ipaddress==3.4.1\n\n Fixed GitHub issues in this release:\n\n  * #1639 (Not all NAV programs respect TIME_ZONE from nav.conf)\n  * #1762 (navdump drops function-data)\n  * #1788 (Deleting an alert profile subscription that has queued alerts\n           will cause alertengine to process all those alerts as if they\n           were new ones on the queue. )\n  * #1885 (LDAP authentication against Microsoft AD using suffix bind is\n           broken in NAV 4.9)\n  * #1894 (Terminals that don't support colors cause nav start/stop\n           commands to crash)\n  * #1895 (Verify nav.conf values as part of nav start)\n  * #1896 (UnicodeEncodeError when LDAP user with non-ASCII characters\n           in DN logs in)\n\n\nVersion 4.9.3\n(released 28 Feb 2019)\n\n Fixed GitHub issues in this release:\n\n  * #757  (devicehistory search by date ignores date)\n  * #1792 (Precision of several Eaton/MGE UPS sensors are wrong)\n  * #1812 (Malformed subid on (old) thresholdState events can cause\n           status page and alert API endpoints to crash)\n  * #1818 (Update ENTITY-MIB definition to RFC 6933)\n  * #1855 (IPAM subnet suggest function is broken)\n  * #1856 (Geomap doesn't work in NAV 4.9)\n  * #1857 (E-mailing of business report subscriptions doesn't work)\n  * #1862 (Please add case-insensitive matching on interface names in\n           ipdevinfo queries for 'ifname')\n  * #1865 (Servicemon resource leak causes all services to be reported\n           as down)\n  * #1871 (Alert detail headers are not present in e-mail notifications\n           from AlertEngine)\n\n\nVersion 4.9.2\n(released 14 Feb 2019)\n\n User-visible features and improvements:\n\n  * #1837 (Save config to non volatile memory in portadmin for dell\n           switches)\n  * #1853 (The navuser command should have an option to verify a user's\n           passord)\n\n Fixed GitHub issues in this release:\n\n  * #1784 (Breadcrumb missing from /useradmin/tokens/)\n  * #1834 (AlertEngine fails to send email if EMAIL_PORT is present in\n           nav.conf)\n  * #1839 (The interfaces API endpoint crashes when using the last_used\n           filter)\n  * #1841 (Useradmin Token listing crashes on NAV 4.9.1 if any tokens\n           are created with no endpoint list)\n  * #1842 (Netmap layer 3 graph API endpoint crashes on NAV 4.9.1)\n  * #1844 (PortAdmin crashes with TypeError if an ifaliasformat is\n           configured)\n  * #1846 (IPAM fails under NAV 4.9.1 if any Organization object has\n           non-ASCII characters in description)\n  * #1847 (\"Rooms with active alerts\" widget fails under NAV 4.9.1)\n  * #1848 (Stateless alerts are shown in status widget even when\n           checkbox is left unchecked)\n  * #1851 (Fix searching for other things than ip addresses in\n           portadmin)\n  * #1852 (Empty NAVbar search results in ValueError crash)\n\n\nVersion 4.9.1\n(released 07 Feb 2019)\n\n Fixed GitHub issues in this release:\n\n  * #1820 (ipdevpoll will not schedule jobs under NAV 4.9.0)\n  * #1822 (Command line argument support for nav daemon startup config)\n  * #1823 (Old switch port layout screen is blank in NAV 4.9.0)\n  * #1824 (navdump crashes when dumping service table)\n  * #1825 (Alertprofiles crashes when attempting to delete matchfield)\n  * #1826 (Device history crashes when attempting to browse the history\n           of an IP Device)\n  * #1827 (Any l2trace search will crash with a Django FieldError)\n  * #1828 (PDU dashboard widget crashes under NAV 4.9.0)\n  * #1829 (Any toolbox descriptor file containing superfluous equal\n           signs will be silently ignored by the web interface)\n  * #1830 (MAC address prefix filters are horribly slow in arp and cam\n           API endpoints)\n  * #1831 (Threshold monitor crashes if rule returns Graphite error)\n\n\nVersion 4.9.0\n(released 31 Jan 2019)\n\n#############################################################\n##                 NOTICE OF LICENSE CHANGE                ##\n#############################################################\n##                                                         ##\n## NAV's copyright license has changed from GPL v2 to GPL  ##\n## v3. Please refer to the release notes for details.      ##\n##                                                         ##\n#############################################################\n\n User-visible features and improvements:\n\n  * #1423 (Add API endpoint for accounts and account groups)\n  * #1509 (Add active alerts tab for port details page)\n  * #1646 (Add event/alert details page)\n  * #1615 (Room view - want device/interface count)\n  * #1624 (Add support for Dell DNOS-SWITCHING-MIB)\n  * #1659 (Add an interface browser tool)\n  * #1662 (Business reports, device availability - filter for\n           maintenance)\n  * #1667 (More interface information for linkState alerts in status\n           tool/widget)\n  * #1705 (Enable use of api endpoint without specifying version)\n  * #1706 (Audit log when users operates as other user)\n  * #1739 (PortAdmin - users should not be able to set trunk on port)\n  * #1758 (Writable vlan and prefix endpoints)\n  * #1761 (API netbox endpoint: filter on type__name)\n  * #1791 (Implement IT-WATCHDOGS-V4-MIB and GEIST-V4-MIB)\n  * #1807 (Implement support for Powertek PDU inlet status)\n  * #1817 (Add hook to customize tabs in ipdevinfo and info/room)\n\n Fixed GitHub issues in this release:\n\n  * #1683 (Avoid \"magic\" Django bootstrapping in nav.models)\n  * #1703 (Upgrade Django Rest Framework)\n  * #1709 (Rename verb for changing interface admin status)\n  * #1728 (Upgrade python-ldap)\n  * #1744 (Replace automake toolchain with setuptools)\n  * #1752 (No warnings for Django 1.8)\n  * #1786 (Make middlewares work correctly on Django 1.10+)\n  * #1796 (A crashing search provider will crash the entire search ui)\n  * #1798 (Environment sensor rack API crashes on missing sensors)\n  * #1799 (Portadmin errors out if making changes after using browser\n           back button)\n  * #1800 (Alert profile listing \"Remove selected\" button needn't be\n           visible when there are no profiles to select.)\n  * #1801 (Network Explorer MAC search always crashes)\n  * #1802 (Saving a threshold rule without a target crashes with a\n           KeyError)\n  * #1803 (ipdevpoll should be able to perform reverse DNS lookups using\n           /etc/hosts file)\n  * #1804 (Unrecognized neighbors report crashes with 'bogus escape (end\n           of line)')\n  * #1814 (Change the NAV license from GPLv2 to GPLv3)\n  * #1819 (/prefix/usage API endpoint crashes instead of returning 404 on\n           non-existent prefixes)\n\n\nVersion 4.8.6\n(released 25 Oct 2018)\n\n Fixed GitHub issues in this release:\n\n  * #1738 (snmptrapd stops logging after receiving HUP signal)\n  * #1741 (Use of Object.assign breaks ipdevinfo in Internet Explorer)\n  * #1750 (API arp and cam endpoint crashes on invalid mac query param)\n  * #1780 (Machinetracker MAC search performs unnecessary join with\n           Netbios table)\n  * #1781 (Machinetracker performs unnecessary duplicate DNS lookups)\n\n\nVersion 4.8.5\n(released 21 Jun 2018)\n\n Fixed GitHub issues in this release:\n\n  * #1688 (Report crashes when using %, * or non-ASCII characters in\n           filter values)\n  * #1693 (Changing password from \"User and API Administration\" leads to\n           KeyError)\n  * #1702 (Adding log entries with non-ascii characters crashes page)\n  * #1711 (Regression: Report crashes when attempting to sort a column\n           filtered on a non-ASCII value)\n  * #1719 ('navdump -a' puts status messages into the output files)\n  * #1721 (Widget spinner visible when opening tool-menu)\n  * #1729 (Room search \"CSV download\" CR in \"last active\" field)\n  * #1734 (l2trace crashes when searching for invalid IP addresses)\n  * #1735 (HTTP errors from Graphite shouldn't crash NAV's Graphite\n           render proxy)\n\n Copyright changes:\n\n  Third party copyright owners of NAV code, like The Norwegian University of\n  Science and Technology, and the University of Tromsø, have signed over their\n  copyright for their code contributions to Uninett. NAV 4.8 is still licensed\n  under GPLv2-only, but will be relicensed under GPLv3 in the upcoming 4.9\n  series. This should have no impact on end users; as a company with public\n  ownership, Uninett will always strive to keep NAV under a free and open\n  source license.\n\n\nVersion 4.8.4\n(released 05 Apr 2018)\n\n Fixed GitHub issues in this release:\n\n  * #1638 ('array index out of range' when viewing a trunk port in\n           PortAdmin)\n  * #1643 (Location with active alerts - edit title)\n  * #1650 (Submitting a threshold rule without a target crashes with a\n           KeyError)\n  * #1655 (Auditlog only displaying the first 100 entries in the log)\n    + #1654 (Fix broken auditlog browsing and auditlog more things)\n  * #1656 (Sensor widget crashes when sensor is missing)\n  * #1660 (UninettMailDispatcher does not support non-ASCII characters\n           and requires SMTP server on localhost)\n  * #1661 (Business reports, link availability - want description)\n  * #1664 (Remove bracket syntax for url parameters to Graphite)\n  * #1665 (Interface details tries to get sensor data on empty\n           sensorlist)\n  * #1669 (Shouldn't use CAM to select topology for aggregated ports\n           where LLDP is available on the physical ports)\n    + #1685 (Do not consider CAM data from aggregator ports when there\n             is LLDP/CDP topology available from its aggregated ports)\n  * #1670 (Treshold editor doesn't work for metrics with hash characters\n           in name)\n  * #1673 (Repeated traceback e-mails for Internal Server Error:\n           /netmap/traffic/layer2/)\n  * #1676 (Audit log changes to API tokens)\n  * #1677 (ipdevinfo should link to an IP Device's audit log)\n  * #1678 (EventMixIn.get_subject() should never return a string)\n  * #1680 (SeedDB patch editor only lists switch ports, not physical\n           ports)\n\n\nVersion 4.8.3\n(released 11 Jan 2018)\n\n Fixed GitHub issues in this release:\n\n  * #1619 (Port-filter in ipdevinfo ports-tab does not remember choice\n           in IE Edge)\n  * #1640 (snmptrapd documentation is outdated)\n  * #1641 (Inefficient deletion of obsolete SwPortVlan records)\n  * #1642 (Port details page crashes with NoReverseMatch exception for\n           ports with slashes in names)\n  * #1644 (Certain UPS units trigger an AssertionError inside\n           ipdevpoll's bridge plugin, crashing the inventory job)\n  * #1645 (navtopology crashes on self-loops)\n  * #1647 (NAV 4.8.2 LDAP error at first login / user creation)\n  * #1648 (Several NAV subsystems crash when config files contain non-\n           ASCII comments)\n  * #1649 (Negative values leads to mangled graphs)\n\n\nVersion 4.8.2\n(released 07 Dec 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1591 (SeedDB does not warn about too long room ids or location ids\n           when bulk importing, it just crashes)\n  * #1628 (Room status widget crash with MultipleObjectsReturned in some\n           cases)\n  * #1629 (Following a link to edit an IP Device that has been deleted\n           crashes SeedDB)\n  * #1631 (ipdevpoll statuscheck job crashes in poe plugin)\n  * #1632 (The ipdevpoll 5minstats job crashes with an AttributeError in\n           the statports plugin)\n  * #1633 (The ipdevpoll 5minstats job crashes in the statsystem plugin\n           on VRF master devices)\n  * #1634 (The poe plugin still crashes on devices that have no set\n           type)\n  * #1635 (The statuscheck ipdevpoll job crashes with an AttributeError\n           if device reports inconsistent PoE Group indexes in POWER-\n           ETHERNET-MIB)\n\n\nVersion 4.8.1\n(released 30 Nov 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1618 (ipdevpoll multiprocess mode broken in v4.8.0)\n    + #1620 (ipdevpoll multiprocess bug fixes and tests)\n  * #1621 (refactor cache handling in report to separate concerns)\n  * #1627 (The navclean command isn't installed in NAV 4.8.0)\n\n\nVersion 4.8.0\n(released 23 Nov 2017)\n\n User-visible features and improvements:\n\n  * #1156 (Detect topology of unrouted VLANs)\n  * #1225 (Service Http(s)Checker should be ok with 401 status if no\n           user/password is configured)\n  * #1232 (Collect Digital Optical Monitoring (DOM) data)\n    + #1559 (Added support for DOM value for juniper devices using\n             JUNIPER-DOM-MIB)\n  * #1240 (Add a widget with alerts grouped by location)\n    + #1554 (Added a Locations with active alerts widget)\n  * #1242 (information about power over ethernet (poe) interfaces)\n  * #1243 (email availability reports)\n    + #1570 (E-mail subscription to Business reports)\n  * #1313 (Deleting a netbox is extremely slow)\n    + #1542 (Deleting netbox in background with navclean)\n  * #1420 (Upload and browse pictures on Locations, just as with\n           rooms)\n    + #1555 (Added support for pictures in locations)\n  * #1503 (Extended Location information)\n  * #1505 (Better ports overview)\n    + #1562 (New and improved, filterable interface listing for devices)\n    + #1600 (Portlist improvements)\n  * #1506 (Add option to show source of ARP records in Machine\n           Tracker, to avoid confusion in HSRP/VRRP lans)\n    + #1541 (Added option for showing origin in machinetracker)\n  * #1513 (Support adding, updating and deleting IP Devices using the API)\n    + #1612 (Enable write operations for netbox and room API endpoints)\n  * #1533 (Feature request: toggle all VLANs in portadmin trunk)\n  * #1545 (Added auditlog for trunk edit in portadmin)\n  * #1584 (Cleanup django_sessions periodically)\n  * #1599 (Option to filter nodes by category in ipdefvinfo neighbor\n           graph)\n  * #1611 (Display list of allowed VLANs on trunks in port details)\n\n Other fixed GitHub issues in this release:\n\n  * #1211 (Optical transmit/receive power sensors should have a relation\n           to an interface)\n    + #1558 (Make sensors relatable to interfaces)\n  * #1345 (Collect bridge addresses for neighbor identification)\n    + #1548 (Collect base bridge address from BRIDGE-MIB as part of the\n             bridge plugin)\n  * #1510 (Create new SQL baseline)\n    + #1544 (Updated the SQL Baseline with changes before 4.7)\n    + #1614 (SQL baseline cleanup)\n  * #1523 (Netmap lists interface under wrong netbox)\n  * #1549 (Topology algorithms partial rewrite)\n  * #1557 (Power over Ethernet support in ipdevinfo)\n  * #1564 (snmpcheck: Fix database access from main thread and per\n           process cache)\n  * #1566 (Remove inline pydns)\n  * #1585 (Remove support for outdated versions of pysnmp)\n  * #1602 (Remove django-oauth2-provider library dependency)\n\n\nVersion 4.7.3\n(released 09 Nov 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1402 (Maintenance alerts about non existing devices)\n  * #1590 (IPAM: Add quickfix, logging for prefixes with no VLAN)\n  * #1592 (Report crashes when attempting to sort a column filtered on a\n           non-ASCII value)\n  * #1593 (Logengine inserts quoted log messages into database)\n  * #1595 (Drawing sensor graphs fail for sensors that have no human\n           readable description)\n  * #1601 (Updating room id creates a new room)\n  * #1603 (AlertEngine crashes when processing filters containing \"not\n           equals\" matches)\n  * #1604 (Running ipdevpoll in multiprocess mode will delay resolving\n           of snmpAgentDown alerts)\n  * #1605 (Log output from ipdevpoll multiprocess workers is lost)\n  * #1606 (linear gauge does not fill with gradient)\n  * #1610 (Remove stale topology information from ports that are down,\n           where the assumed link partner is still up )\n\n\nVersion 4.7.2\n(released 28 Sep 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1516 (Default maintenance duration too long)\n  * #1532 (SeedDB bulk import of organizations and rooms crashes on\n           misformatted attribute lists)\n  * #1535 (Alert profiles - filtering on location does not include\n           sublocations)\n  * #1546 (IndexError in portadmin search if ipdevpoll hasn't run yet)\n  * #1553 (Status widgets crash if filtering on locations with non-ascii\n           characters in the ID)\n  * #1560 (portadmin may change vlan for incorrect port on non-cisco\n           devices)\n  * #1565 (geomap does not render rooms)\n  * #1567 (Moved searchproviderlist to settings)\n  * #1568 (Fixed deleting non-required schemas in search_path)\n  * #1571 (devicehistory - device group history does not work)\n  * #1583 (Netmap cache crashes on non-ascii strings)\n\n\nVersion 4.7.1\n(released 09 Jun 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1524 (Auditlog is a top-level module, causing all of NAV 4.7.0 to\n           break)\n  * #1528 (All ipdevpoll jobs, except `dns` and `snmpcheck`, stopped\n           working after upgrade to 4.7.0)\n  * #1527 (ipdevpoll logs every line twice)\n\n\nVersion 4.7.0\n(released 08 Jun 2017)\n\n User-visible features and improvements:\n\n\n  * #1174 (Rewrite ipdevpoll's multiprocess mode to use generic worker\n           model)\n  * #1183+#1463 (Monitor BGP connectivity)\n  * #1236+1416 (Feature request: API for unrecognized neighbors)\n  * #1239 (multidashboard export import)\n  * #1411+#1515 (Add PortAdmin \"Write mem\" support for H3C switches)\n  * #1428 (added broadcast & multicast counters to interfaces (ipdevinfo))\n  * #1467 (Add support for Comet MS series data loggers)\n  * #1468 (Rittal cmc iii support)\n  * #1469 (Powernet: Distinguish between phase load and bank load sensors.)\n  * #1472 (Added support for Raritan PDU2 mib PDUs)\n  * #1474 (Add a comprehensive view of collected sensors and their data on\n           a new Sensors tab in ipdevinfo)\n  * #1475 (Collect sensor readings from Lenovo/IBM PDUs (Power Distribution\n           Units))\n  * #1486+#1488 (Add a rack based view of environment sensors in a room)\n  * #1489+#1492 (Avoid redundant port counter collection from virtualized\n                 instances, such as Cisco VRF)\n  * #1498 (Add fullscreen mode for all maps)\n  * #1518 (Default setting for map starting point when selecting room geo\n           location)\n  * #1522 (Auditlog)\n\n Other fixed GitHub issues in this release:\n\n  * #1403 (deleting a netbox makes data-collection stop)\n  * #1456 (The old status page code should be removed)\n  * #1462 (Netmap performance improvements)\n  * #1493 (Status widget, \"Not device group\" filter is wrong)\n  * #1496 (Missing jQuery tinysort javascript library)\n  * #1500 (Sensor details - fix spelling on \"Thesholds\")\n  * #1507 (The regexp for ifalias is not shown)\n  * #1511 (Minor IPAM improvements)\n  * #1512 (Update old javascript libraries)\n  * #1519 (ipdevinfo doesn't list aggregators for some Juniper interfaces)\n\n\nVersion 4.6.2\n(released 16 Mar 2017)\n\n Fixed GitHub issues in this release:\n\n  * #1326 (ipdevpoll -n option may be unable to match single IP addresses\n           in environments without DNS names)\n  * #1344 (Location is mandatory field when adding a room, but not when\n           bulk importing)\n  * #1433 (Users with non-set passwords may crash the login page)\n  * #1437 (Eventengine's modulestate plugin will not handle alerts on\n           modules that have duplicates)\n  * #1454 (Alert message HTML templates break on events that have no\n           associated alert type)\n  * #1455 (Alert profiles with vendor-based filters seems to crash the\n           Alertengine completely)\n  * #1460 (\"arp\" API endpoint produces server error when mixing ip and\n           ordering=netbox)\n  * #1464 (Selecting page size in reports eliminates search parameters)\n  * #1471 (Fallback to default set of sensor-collecting MIBs does not work)\n  * #1471 (revision library stuff should be renamed to cache)\n  * #1476 (OverflowError when searching for IPv6 prefix in the navbar)\n  * #1477 (The Prefix details page should only list GW and GSW devices\n           under the router ports list)\n  * #1478 (l2trace hardcodes internal URLs)\n  * #1479 (Change prefix links to new prefix details page)\n  * #1480 (ipdevpoll sensors plugin should verify enterprise IDs using live\n           queries, not db lookups)\n  * #1481 (Organization column is empty in room deviceinfo page)\n  * #1484 (cant save status filter when filter has special characters)\n  * #1485 (AlertProfiles crashes with a UnicodeEncodeError when attempting\n           to save a profile with non-ASCII characters in its name)\n\n\nVersion 4.6.1\n(released 26 Jan 2017)\n\n NAV has moved to GitHub. Issues are now tracked at\n https://github.com/UNINETT/nav/issues . Due to the migration of bug data from\n Launchpad, reporter and subscriber information has been lost (all bugs appear\n to be reported by jmbredal).\n\n If you have existing bug reports you still wish to keep an eye on, you can\n find the migrated issue by searching the Launchpad bug number in our GitHub\n issue tracker.\n\n Fixed issues in this release:\n\n  * #320  (Error in IPAM function after upgrade to 4.6)\n  * #321  (Graph widget modifies graph interval to 24 hours, no matter what\n           the URL says)\n  * #891  (\"rooms with active alerts\"-widget needs event filter)\n  * #892  (cancelled maintenance tasks with no endtime are displayed)\n  * #893  (Long log lines cause logging to stop for ipdevpoll processes in\n           multiprocess mode)\n  * #1022 (Some dropdowns not sorted in Alert Profiles)\n  * #1024 (support external links in ups widget)\n  * #1425 (Using arrow keys to navigate when there is only a single\n           dashboard moves to a 'undefined' dashboard, resulting in a 404\n           Not Found)\n  * #1426 (Left/right arrow keys are captured globally on dashboards,\n           making it impossible to make small edits to widget titles and\n           such)\n  * #1238 (choose columns in status widget)\n  * #1412 (multiple dashboards should be presented as tabs)\n\n\nVersion 4.6.0\n(released 01 Dec 2016)\n\n User-visible features and improvements:\n\n  * LP#1248086 (alert on loss of redundancy in an aggregated (portchannel) link)\n  * LP#1531850 (more flexible system for location of equipment)\n  * LP#1634874 (choose columns in status widget)\n  * LP#1646405 (Improve functions for IP Address Management [IPAM])\n  * LP#1646408 (prefix details page)\n  * LP#1646411 (Collect and store static routes)\n  * LP#1646413 (Work around buggy Q-BRIDGE-MIB implementation in Juniper EX\n                switches)\n  * LP#1646416 (Add a command line program to manipulate NAV users)\n\n  Please read the release notes for more information about the new features.\n\n Bugfixes:\n\n  * LP#1626856 (ipdevpoll inventory job crashes if a device reports multiple\n                modules with the same name)\n  * LP#1629823 (prefix usage api endpoint lists empty results)\n  * LP#1630506 (Arnold detention crashes when switch reports SNMP agent error)\n  * LP#1634903 (LLDP topology bug when two devices share the same initial\n                sysname)\n  * LP#1638568 (Incomplete topology information causes eventengine to post\n                boxShadow alerts instead of boxDown alerts)\n  * LP#1640714 (Erroneous interpretation of LLDP-MIB port numbers may cause\n                wrong topology to be detected)\n  * LP#1641522 (Chart Widget unresponsive)\n\n\nVersion 4.5.3\n(released 01 Sep 2016)\n\n Bugfixes:\n\n  * LP#1592747 (Cisco chassis serial number decoding report should include\n                modules as well)\n  * LP#1597666 (No data collected on some Comet web probes)\n  * LP#1608869 (graph widget does not update)\n  * LP#1608920 (make graph widget time controls optional)\n  * LP#1619136 (Specifying both starttime and endtime values crashes the arp API\n                endpoint)\n  * LP#1619138 (Searching for IP addresses in the arp API endpoint is horribly\n                inefficient)\n\n\nVersion 4.5.2\n(released 30 Jun 2016)\n\n Bugfixes:\n\n  * LP#1567939 (add buttons to change time period in statistics widget)\n  * LP#1575112 (Missing switch ports and CAM data from Aruba switches (S2500))\n  * LP#1594271 (Sensors with non-ASCII names or descriptions may cause errors in\n                status widget and status page)\n  * LP#1595445 (Some or all enabled VLANs are sometimes missing from Cisco trunk\n                ports)\n  * LP#1595835 (Collect binary inputs of Comet web sensors)\n\n\nVersion 4.5.1\n(released 16 Jun 2016)\n\n Bugfixes:\n\n  * LP#1591973 (navstats binary is not installed in NAV 4.5.0)\n  * LP#1592281 (ipdevpoll statuscheck errors out on some Aruba switches)\n  * LP#1593193 (Race condition may make eventengine ignore events at random)\n\n\nVersion 4.5.0\n(released 09 Jun 2016)\n\n User-visible features and improvements:\n\n  * LP#1321249 (A new tool for generating Graphite metrics from PostgreSQL\n                queries)\n  * LP#1531851 (Trend comparison in graphs)\n  * LP#1531853 (API: more flexible authorization and administration)\n  * LP#1534481 (Maintenance task selection based on device group)\n  * LP#1546434 (Add bulk upload of images in room view)\n  * LP#1577318 (Add timestamp filtering to cam and arp API)\n  * LP#1588187 (Cabling/patch registration and presentation in need of serious\n                usability improvements)\n\n Bugfixes:\n\n  * LP#1551217 (Alert from 3rd party - maintenance mode not respected) [the\n               4.4.4 release did not fix the eventengine part of this issue,\n               this release does]\n  * LP#1590654 (Lost ipdevpoll database connections aren't properly reset under\n                Django 1.7)\n\n\nVersion 4.4.4\n(released 02 Jun 2016)\n\n Bugfixes:\n\n  * LP#1551217 (Alert from 3rd party - maintenance mode not respected)\n  * LP#1569704 (Supplied Apache config example doesn't explicitly allow access\n                to read files in the upload location)\n  * LP#1570814 (DNS lookups in web UI leak UDP sockets until resource\n                exhaustion)\n  * LP#1571010 (timeformat unreadable in scheduled messages)\n  * LP#1572580 (Malformed month names in syslog messages cause logengine crash)\n  * LP#1572599 (Adding VLAN graphs to dashboard does nothing)\n  * LP#1572894 (portadmin: Save all button disappears on small screens)\n  * LP#1573486 (netmap crashes when a room is not connected to a location)\n  * LP#1573569 (portadmin: crash when cisco voice enabled and visiting hp\n                device)\n  * LP#1578108 (eventengine enters an infinite loop and stops processing events)\n  * LP#1588201 (Status page describes many threshold alerts only as \"Sensor\n                object\")\n\n\nVersion 4.4.3\n(released 31 Mar 2016)\n\n Bugfixes:\n\n  * LP#1538270 (PortAdmin crashes when non admin try to remove a vlan from the\n                trunk)\n  * LP#1543529 (portadmin: default vlan is not setable for non-admin if auth is\n                enabled)\n  * LP#1543953 (Wrong units in Gbits/s graphs)\n  * LP#1544059 (Subnet matrix is no longer helpful when no scopes have been\n                defined)\n  * LP#1551205 (Subject description of 3rd party alerts in status page are\n                uninformative)\n  * LP#1552198 (ranked statistics give vague error when no data exists)\n  * LP#1554466 (PortAdmin: when proper cisco voice vlans enabled changing vlan\n                changes native vlan)\n  * LP#1559004 (Extract VLAN information from Juniper routers)\n  * LP#1563369 (Rickshaw graphs do not update on interval change)\n\n\nVersion 4.4.2\n(released 4 Feb 2016)\n\n Bugfixes:\n\n  * LP#1538029 (Rickshaw color palette is bad for color blind users)\n  * LP#1538113 (report widget crashes with 500)\n  * LP#1538270 (PortAdmin crashes when non admin try to remove a vlan from the\n                trunk)\n  * LP#1540839 (ipdevpoll inventory job fails when deleting old router\n                addresses)\n  * LP#1541246 (alertprofiles: adding subscription fails (when form is not\n                valid?))\n  * LP#1541358 (NAV doesn't work with python-gammu versions 2 and up)\n\n\nVersion 4.4.1\n(released 21 Jan 2016)\n\n Bugfixes:\n\n  * LP#1535647 (Broken graph widgets after upgrade to 4.4.0)\n  * LP#1535688 (ipdevpoll multiprocess mode broken in NAV 4.4.0)\n  * LP#1535701 (subnet matrix has no visible feedback to user if prefix\n                utilization API call fails)\n  * LP#1535723 (Room page's interface tab is blank in NAV 4.4.0)\n  * LP#1536031 (Unable to create a new user)\n  * LP#1536060 (Unable to get switch port activity for anything but the default\n                interval value)\n\n\nVersion 4.4.0\n(released 14 Jan 2016)\n\n User-visible features and improvements:\n\n  * LP#1248195 (Make NAV compatible with Django 1.7)\n  * LP#1350815 (Add zooming in graphs, like Cacti)\n  * LP#1465571 (PortAdmin should log to separate log file)\n  * LP#1466373 (seeddb confirm navigation when form is not saved)\n  * LP#1466440 (Device groups should be searchable from the navbar)\n  * LP#1466462 (Report pagination is nearly invisible)\n  * LP#1483578 (request: enable-button in /arnold/details/)\n  * LP#1511363 (Organize scope-list in Subnet Matrix-frontend)\n  * LP#1526789 (Support sensor discovery on Geist-branded WeatherGoose products)\n  * LP#1528124 (Autocreate new types with sensible vendor id's)\n  * LP#1531159 (portadmin: support for Cisco voice vlans)\n\n Bugfixes:\n\n  * LP#1248205 (403 Forbidden on front page with apache 2.4)\n  * LP#1518246 (subnet matrix - first subnet is not shown)\n  * LP#1518251 (subnet matrix - /23 prefixes are displayed incorrectly)\n  * LP#1518254 (subnet matrix - link to prefix is suddenly a scope)\n  * LP#1521107 (Messages widget does not refresh)\n  * LP#1521124 (Django security fix in Debian makes time periods display as\n                blank)\n  * LP#1526282 (Module replacements will sometimes crash ipdevpoll inventory job\n                with IntegrityError)\n  * LP#1532701 (Snmptrapd fails to post link events if module name is unknown)\n\n\nVersion 4.3.3\n(released 26 Nov 2015)\n\n Bugfixes:\n\n  * LP#1518950 (machine tracker - form should reflect link parameters)\n  * LP#1519362 (Forgetting to add a name to an alert profile causes template\n                selection to be cleared in form)\n  * LP#1520119 (Servicemon silently stops checking services after running for a\n                while)\n\n\nVersion 4.3.2\n(released 19 Nov 2015)\n\n Bugfixes:\n\n  * LP#1487436 (arnold rejects ip-addresses that ends with the number 0)\n  * LP#1488003 (Alert Profiles UI does not enable multi-value select for the\n                \"IN\" filter operator)\n  * LP#1488010 (link to ipdevinfo if applicable for subjects without absolute\n                url)\n  * LP#1488441 (room map widget does not load map)\n  * LP#1488774 (Arnold documentation should be updated and moved from wiki to\n                Sphinx)\n  * LP#1489843 (javascript require-libs timeout)\n  * LP#1492246 (Topology of disabled interfaces may linger in some cases)\n  * LP#1494190 (clicking on a shared time period in alert profiles selects all)\n  * LP#1494232 (hovering a shared time period in alert profiles highlights all)\n  * LP#1494233 (When exporting switch port information from a room view as CSV,\n                the output contains extra spaces and newlines in the first\n                column)\n  * LP#1494279 (Inconsistent Servicemon checker names)\n  * LP#1496396 (Service checker descriptions and service checker argument\n                descriptions are not displayed to the user in SeedDB)\n  * LP#1496780 (Threshold alerts are not very descriptive on the status page)\n  * LP#1497970 (Add SEMI-MIB to retrieve serial number for HP 1810 switch)\n  * LP#1498323 (Traps from WeatherGoose devices no longer work after rebranding\n                from IT Watchdogs to Geist)\n  * LP#1499343 (The wiki page describing background processes in NAV should be\n                moved to Sphinx docs)\n  * LP#1500423 (ipdevpoll: Transaction managed block ended with pending\n                COMMIT/ROLLBACK)\n  * LP#1500425 (Inventory and statuscheck jobs of ipdevpoll still can fail after\n                an OS upgrade)\n  * LP#1505524 (Retrieve software version for HP 1810 switch)\n  * LP#1505945 (Add API endpoint for VLAN information)\n  * LP#1507467 (Temperature sensor gauges as widgets)\n  * LP#1513046 (LLDP neighbors with \"funny\" names may cause ipdevinfo\n                NoReverseMatch crash)\n  * LP#1516956 (Services should be considered on maintenance when their parent\n                IP Device is on maintenance)\n  * LP#1516972 (Maintenance status is not visible in service matrix and service\n                lists)\n\nVersion 4.3.1\n(released 20 Aug 2015)\n\n Bugfixes:\n\n  * LP#1464660 (macwatch AttributeError when attempting to post events under NAV\n                4.3.0)\n  * LP#1466734 (Portadmin should link back to ipdevinfo)\n  * LP#1467508 (report export csv not working)\n  * LP#1469620 (Ipdevinfo: switchport activity only show activity for last 30\n                days)\n  * LP#1469988 (arnold does not reset autoenable date on manual detentions)\n  * LP#1478827 (Include vendor and description in the netbox API endpoint)\n  * LP#1478835 (portadmin snmp timeout while saving)\n  * LP#1480262 (Rendering a port traffic graph results in a UnicodeEncodeError)\n  * LP#1480814 (Non-ASCII characters in username will crash login page if\n                authenticating against a Microsoft AD server)\n  * LP#1483145 (seeddb invalid ip crashes check connectivity)\n  * LP#1484386 (Floating graph control panel intermittently appears at top of\n                page when selecting Port Metrics tab in ipdevinfo)\n  * LP#1484423 (ipdevpoll inventory job fails with AttributeError: 'NoneType'\n                object has no attribute 'strip')\n  * LP#1484427 (ipdevpoll 5minstats job fails on some Cisco WLCs)\n  * LP#1486415 (IntegrityError when posting chassis events from ipdevpoll)\n  * LP#1486430 (Jobs \"inventory\" and \"statuscheck\" fails after switch OS\n                upgrade)\n\n\nVersion 4.3.0\n(released 11 Jun 2015)\n\n This release makes some fundamental changes to NAV's data model to improve\n support for non-physical devices (like Cisco VSS and Cisco VDC). Please read\n the release notes for further information.\n\n User-visible features and improvements:\n\n  * LP#744943  (Add switch to toggle display of traffic lines in Geomap)\n  * LP#961212  (Show planned/active maintenance tasks for device in IP Device\n                Info)\n  * LP#1149160 (Auto-recognize HTTP URLs in reports and hyperlink them)\n  * LP#1166695 (PortAdmin available from the toolbox)\n  * LP#1169550 (NAV's data model should reflect modern reality, with virtual\n                device support)\n  * LP#1242872 (Option to turn off traffic stats in Geomap)\n  * LP#1248081 (New interface/tool to browse unrecognized neighbors)\n  * LP#1366895 (Report widget)\n  * LP#1421644 (Support Weathergoose traps from external temperature sensors)\n\n Bugfixes:\n\n  * LP#1233093 (Report pages crash under psycopg2 >= 2.5)\n  * LP#1397257 (Port Admin may not work properly for any non-HP and non-Cisco\n                device)\n  * LP#1447973 (CDP/LLDP neighbor matching fails when multiple ports match the\n                identification)\n  * LP#1447999 (Existing adjacency candidate data in db is not deleted if a\n                device's CDP cache or LLDP remote table becomes empty)\n  * LP#1448086 (Unable to identify LLDP neighbor's port in some instances)\n  * LP#1458826 (1minstats job crashes on invalid ENTITY-MIB references from\n                CISCO-PROCESS-MIB)\n  * LP#1459138 (Ignore Cisco reserved VLANs when collecting BRIDGE-MIB data)\n  * LP#1463724 (Increase frequency of module status verification)\n\n\nVersion 4.2.6\n(released 23 Apr 2015)\n\n Bugfixes:\n\n  * LP#1248083 (The ipdevinfo \"Affected\" tab should be renamed to \"what if\")\n  * LP#1248085 (ipdevinfo \"affected\" tab needs to properly list the affected\n                organizations)\n  * LP#1338388 (Netmap link traffic does not always show)\n  * LP#1435451 (Vendors report should only show Vendors in use)\n  * LP#1436125 (No CPU graph from some Cisco CPUs)\n  * LP#1436388 (VLAN number cannot be forced by router port description)\n  * LP#1437318 (PostgreSQL load driven up by overzealous pruning of old\n                ipdevpoll_job_log entries in NAV 4.2.5)\n  * LP#1438930 (No negative values can be displayed in graphs)\n  * LP#1442538 (Graphite-web doesn't support metric aliases with non-ASCII\n                characters)\n  * LP#1443775 (alert templates for climate humidity notifications does not\n                exist)\n  * LP#1444416 (netmap L3 crash in urlresolvers.py)\n\n\nVersion 4.2.5\n(released 20 Mar 2015)\n\n This was released to replace the broken 4.2.4 release. The fixed regression\n is this:\n\n  * LP#1434520 (pping is unable to post boxUp/boxDown events)\n\n Bugfixes:\n\n  * LP#1403365 (offMaintenance alerts for same device every 5 minutes)\n  * LP#1422298 (device history crashes when viewing weathergoose events)\n  * LP#1422316 (thresholdmon AttributeError crash)\n  * LP#1425536 (Status widget error when filtering on Device group)\n  * LP#1425846 (alert profiles does not display without refresh)\n  * LP#1427666 (watchdog is slow)\n  * LP#1428071 (Portadmin crashes when searching by sysname or ip)\n  * LP#1428578 (seeddb test for snmp version crashes if neither v1 or v2c is\n                supported)\n  * LP#1429868 (ipdevpoll jobs that are no longer supposed to run for a device\n                as flagged as \"overdue\")\n  * LP#1430795 (SeedDB room edit form asks for user's location, shows no map\n                until permission is given)\n  * LP#1430797 (Geomap shows no map at all when no room positions are defined)\n  * LP#1430802 (SeedDB room edit insists on inserting a geoposition)\n  * LP#1430803 (SeedDB room form position indicator icon is missing)\n  * LP#1431780 (Trunk port status is never reset on non-Cisco equipment)\n  * LP#1432056 (mod_wsgi option WSGIApplicationGroup should be %{GLOBAL} by\n                default)\n  * LP#1432057 ([appliance] missing python-dnspython)\n  * LP#1432620 (Unable to load Netmap layer 3 map with ELINK peers)\n  * LP#1432682 (Should be able to specify exact subnet prefixes to ignore)\n  * LP#1433063 (netmap zoom and pan does not work for some views)\n  * LP#1433120 (Shouldn't generate linkState alerts for intentionally shutdown\n                interfaces)\n\n\nVersion 4.2.4\n(released 19 Mar 2015)\n\n Release retracted.\n\n\nVersion 4.2.3\n(released 12 Feb 2015)\n\n Bugfixes:\n\n  * LP#392148  (Add microformats in maintenance module)\n  * LP#1108736 (seeddb vlan page have checkbox but no delete selected)\n  * LP#1242868 (device group improvements)\n  * LP#1248095 (device groups should be searchable in the NAVbar)\n  * LP#1316608 (Search in statistics gives stacktrace)\n  * LP#1398382 (AssertionError prevents Netmap from loading any graph/map)\n  * LP#1410687 (room netbox interfaces must indicate that topology exists)\n  * LP#1411243 (Radius error log search: \"could not convert string to float:\n                hours\")\n  * LP#1412735 (arnold switching from exponential to normal duration gives wrong\n                duration)\n  * LP#1414934 (Expanding some switch ports makes Network Explorer hang)\n  * LP#1414943 (No collected IPv6 prefixes on Cisco Nexus routers)\n  * LP#1414975 (network explorer doesn't report backend failures to end user)\n  * LP#1419746 (portadmin crashes when searching for a netbox that has no type)\n  * LP#1420836 (Parsing of sensors with names that contains #)\n  * LP#1421126 (snmpAgentDown blocks BoxDown event)\n\n\nVersion 4.2.2\n(released 08 Jan 2015)\n\n Important note:\n\n  This release adds commas to the list of characters escaped in Graphite\n  metric names, which may change the name used for some of your existing\n  metrics after an upgrade. If you want to keep your data, the underlying\n  files need to be renamed manually in your Graphite installation. See the\n  updated release notes for more.\n\n Bugfixes:\n\n  * LP#1169559 (Print button for Netmap)\n  * LP#1394522 (Netbox and Location bulk import formats must be changed to\n                include data attributes)\n  * LP#1396913 (Status page, filter on Device Group)\n  * LP#1396920 (NAV 4, Internet Explorer Compatibility mode)\n  * LP#1396924 (NAV 4.2 does not work with SASS 3.4 or newer, but the install\n                docs do not specify this)\n  * LP#1397255 (Subject text of psuDown alerts in status tool is non-\n                descriptive)\n  * LP#1397886 (device history script timeout on many results)\n  * LP#1398382 (AssertionError prevents Netmap from loading any graph/map)\n  * LP#1398791 (Maintenance system stops working when an IP device on\n                maintenance is deleted)\n  * LP#1398815 (Rooms, hyperlink inconsistensies between report and seeddb)\n  * LP#1399558 (portadmin tries to write to memory for each change)\n  * LP#1400307 (Need easier way to remove services)\n  * LP#1401114 (dropdown for ipdevice when adding a service is fubar)\n  * LP#1401470 (ipdevpoll TypeError: unsupported operand type(s) for +:\n                'NoneType' and 'float')\n  * LP#1403066 (Some routers fail to expand in Network Explorer)\n  * LP#1403432 (report.conf, wrong url for netboxinfo)\n  * LP#1403797 (Geomap is insanely slow after migration to Graphite in NAV 4.0)\n  * LP#1403803 (Geomap \"loading data\" indicator is missing)\n  * LP#1403884 (geomap sends data request on every tiny movement)\n  * LP#1404207 (Intermittent ValueErrors thrown from pynetsnmp causes ipdevpoll\n                jobs to fail)\n  * LP#1404222 (Conflicting sysnames cause ipdevpoll jobs to crash)\n  * LP#1404225 (Multiple DNS PTR records for the same IP address causes sysname\n                to swing back and forth in NAV)\n  * LP#1407625 (/search/devicegroup takes too long)\n\n\nVersion 4.2.1\n(released 27 Nov 2014)\n\n Bugfixes:\n\n  * LP#1395710 (api token can not be refreshed from the api)\n  * LP#1396514 (Status tool in NAV 4.2 shows no events if API call returns a 500\n                error)\n  * LP#1396516 (Status API in NAV 4.2 crashes when there are old deviant alerts\n                present)\n  * LP#1396517 (Status tool makes hyperlinks out of alert subjects that have no\n                defined URL)\n  * LP#1396531 (logengine spams the error message \"KeyError: 'LINK'\")\n  * LP#1396914 (netmap filter on location excludes links)\n\n\nVersion 4.2.0\n(released 20 Nov 2014)\n\n User-visible features and improvements:\n\n  * LP#1063703 (The status page is becoming cluttered and should be redesigned)\n  * LP#1374384 (Adding new devices to a room on maintenance does not put those\n                devices on maintenance)\n  * LP#1383624 (Machine Tracker should search uplink data as well)\n  * LP#1383625 (Machine Tracker MAC search should also search physical port\n                addresses)\n  * LP#1384262 (Add unrecognized neighbor search to navbar)\n  * LP#1388078 (Add IGMP Multicast group usage statistics to NAV)\n  * LP#1389226 (Arbitrary attributes on netbox and location)\n  * LP#1390073 (Add support for AKCP sensorProbe8)\n\n Other, less visible, improvements:\n\n  * LP#1388835 (Maintenance Engine needs a rewrite)\n\n Bugfixes:\n\n  * LP#1385121 (\"Add graph to dashboard\" does nothing under certain Apache\n                configurations)\n  * LP#1386716 (Maintenance task with no end time displays incorrectly in edit\n                form)\n  * LP#1389121 (when searching for an ip-address with space in it, NAV crashes)\n  * LP#1389145 (Netbiostracker crash on unparseable MAC Address)\n\n\nVersion 4.1.2\n(released 30 Oct 2014)\n\n Bugfixes:\n\n  * LP#1236387 (Netbiostracker doesn't handle MAC addresses with hyphens)\n  * LP#1248084 (The heading \"devices going down\" in ipdevinfo affected tab\n                should be changed to \"devices unreachable\")\n  * LP#1359111 (Problem getting inventory for HP 5412R)\n  * LP#1370051 (Whitespace in machinetracker widget causes stacktrace)\n  * LP#1370517 (Several search views throw 500 exceptions where a 404 Not Found\n                would be appropriate)\n  * LP#1371026 (ipdevpoll topo job fails with AttributeError)\n  * LP#1373841 (link from subnet matrix to machinetracker gives no results)\n  * LP#1374391 (graph widget should have a target url attribute)\n  * LP#1375749 (Maintenance calendar does not display task starting previous\n                month)\n  * LP#1380583 (Python requirements in install doc are out of sync with\n                requirements.txt)\n  * LP#1382460 (Ambiguous search input crashes l2trace)\n  * LP#1382492 (Machine tracker searches crash when results include devices that\n                haven't had any ipdevpoll jobs run against them)\n  * LP#1382522 (Radius accounting search crashes when searching for hostname\n                that cannot be found in DNS)\n  * LP#1383624 (Machine Tracker should search uplink data as well)\n  * LP#1383625 (Machine Tracker MAC search should also search physical port\n                addresses)\n  * LP#1384262 (Add unrecognized neighbor search to navbar)\n  * LP#1387215 (Rubbish CDP neighboring port data crashes topo job)\n  * LP#1387598 (ip2mac and inventory jobs crash with \"IPv4 Address with more\n                than 4 bytes\" on some Cisco devices)\n\n\nVersion 4.1.1\n(released 14 Aug 2014)\n\n Bugfixes:\n\n  * LP#1052804 (NoReverseMatch error on multiple pages when adding IPv6 host\n                with no DNS name)\n  * LP#1316599 (NoReverseMatch exception when trying to load netmap)\n  * LP#1333170 (Disused prefixes aren't properly deleted from the database)\n  * LP#1338548 (Searching for an apparently \"invalid\" hostname crashes\n                ipdevinfo)\n  * LP#1339575 (Room and organization data keys cannot be added using SQL\n                without first checking for NULL values)\n  * LP#1340193 (NAV gets confused when re-using VLAN tags for multiple broadcast\n                domains)\n  * LP#1340576 (Virtual status of router addresses cycles back and forth,\n                causing net type to swing back and forth between lan and link)\n  * LP#1355693 (Interface names not present in linkState alert messages)\n  * LP#1355923 (dump.py -t room crash)\n\n\nVersion 4.1.0\n(released 26 Jun 2014)\n\n User-visible features and improvements:\n\n   * LP#744951  (show % usage for smaller subnets in subnet matrix)\n   * LP#1062298 (Watchdog feature to monitor internal status of NAV processes)\n   * LP#1169557 (Room and Organization opt fields should be replaced with an\n                 arbitrary variable=value scheme)\n   * LP#1248092 (ipdevpoll CAM collection optimizations)\n   * LP#1319657 (ipdevinfo alert tab does not display alerttype)\n   * LP#1312648 (Remember user's preference for number of rows per page in\n                 SeedDB list views)\n   * LP#1311205 (Change administrative status of interface from PortAdmin)\n   * LP#1334243 (REST API)\n\n\nVersion 4.0.3\n(released 26 Jun 2014)\n\n Bugfixes:\n\n  * LP#1255978 (Add Arnold-information in ipdevinfo Port Details)\n  * LP#1301191 (Portadmin vlan change for many interfaces takes a long time)\n  * LP#1318534 (Publish timestamps is set to Default when editing a Message)\n  * LP#1321246 (vlan search result should be sorted by vlan)\n  * LP#1321251 (search for Netbios in Machine Tracker widget)\n  * LP#1321634 (Some alerts are never resolved when devices have moved around)\n  * LP#1323206 (device history-link in ipdevinfo not working as intended)\n  * LP#1324108 (arnold fails to manually detain when sysname is uppercase)\n  * LP#1327098 (ipdevpoll jobs are marked as successful when nothing was done)\n  * LP#1333167 (Netbox.up sometimes out of sync with actual alert-based box\n                state)\n  * LP#1334258 (Geomap fails to load any data if a single Graphite metric causes\n                an error)\n\n\nVersion 4.0.2\n(released 15 May 2014)\n\n Bugfixes:\n\n  * LP#1302403 (Unplugged HP power supplies are marked with \"unknown\" state)\n  * LP#1303804 (No graphs are rendered if graphite base url doesn't end with a\n                slash)\n  * LP#1304279 (values in threshold alerts are always 100)\n  * LP#1304455 (Submitting an empty search form crashes Arnold)\n  * LP#1314503 (migrate_to_whisper.py crashes on mismatches between RRD files\n                and database)\n  * LP#1316091 (pping dies when carbon is unavailable)\n  * LP#1316600 (external tools have no icons)\n  * LP#1316965 (NAV 4.0 collects port traffic stats from EDGE devices)\n\n\nVersion 4.0.1\n(released 03 Apr 2014)\n\n Bugfixes:\n\n  * LP#1300117 (Fix for bug 1295092 causes ipdevpoll inventory jobs to crash for\n                Cisco devices)\n  * LP#1301251 (LDAP users with non-ASCII characters in their name cause login\n                page to crash when user lookup method is 'search' (MS AD))\n  * LP#1301260 (seeddb prefix edit does not display all fields)\n  * LP#1301343 (CDP cache is never refreshed on devices that do not respond to\n                CDP-MIB::cdpGlobalLastChange)\n  * LP#1301349 (Module down alerts fail to mention the module's name)\n  * LP#1301794 (LDAP group membership verification crashes with\n                UnicodeDecodeError when username contains non-ASCII chars)\n\n\nVersion 4.0.0\n(released 27 Mar 2014)\n\n Final 4.0.0 release. Please read changelog entries for all 4.0 beta releases\n to get a complete overview of the changes since 3.15.\n\n Bugfixes:\n\n  * LP#1293616 (missing cascade in table account_navlet)\n  * The map would not display when editing rooms in SeedDB.\n\n User-visible features and improvements:\n\n  * Stale link state alerts can now be cleared/dismissed directly from the\n    Status page.\n\n  * Sensor readings are now collected every minute (the `statsensors` plugin\n    has moved to the 1minstats job. Please update your Graphite's\n    `storage-schemas.conf` accordingly, if you have been beta testing the 4.0\n    releases).\n\n  * The POWER and ENV main device categories have been added, to categorize\n    power distribution equipment and environmental probes.\n\n  * Added \"Environment sensors\" tab to the Room view. All temperature sensors\n    on ENV-category devices in a room are now displayed on this tab, with\n    gauges and time-series graphs.\n\n  * Added support for the Comet P8541 web probe (remote temperature sensor).\n\n  * UPS-MIB sensors: Fixed wrong value precision on a couple of objects, and\n    added support for the full range of data available from the battery,\n    input, output and bypass groups.\n\n  * Added a \"setup guide\"-type tour for first-time SeedDB users.\n\n  * The cdp, tftp, cs_at_vlan and chassis checkboxes in SeedDB's type form\n    have been obsolete for several years, and were finally removed from NAV's\n    data model. Bulk import and dump formats have been updated accordingly.\n\n  * Even more tweaks and adjustments to improve the new UI.\n\n\nVersion 4.0b5\n(released 03 Mar 2014)\n\n Bugfixes:\n\n  * Fixed various bugs around the web interface, introduced in previous\n    releases.\n\n User-visible features and improvements:\n\n  * Graph widget now has editable title. Default value is taken from from the\n    displayed graph.\n\n  * Make global graph controls float on top of viewport when scrolling on a\n    page with heaps of port metrics.\n\n  * Added the much sought-after button to clear link alerts from the status\n    page.\n\n  * Front page widgets can now be re-ordered by dragging their anchor icon;\n    the re-order mode button has been removed.\n\n  * \"Add widget\" button on the front page was moved to a sliding menu,\n    accessible from the plus icon on the right hand side of the screen.\n\n\nVersion 4.0b4\n(released 20 Feb 2014)\n\n User-visible features and improvements:\n\n  * A port metrics tab has been added to IP Device Info, so that all port\n    graphs are available on a single page (just like you're used to from\n    Cricket).\n\n  * Sub-tabs in IP Device Info are now hyperlinkable.\n\n  * Portadmin UI has been reworked again, based on feedback from NTNU.\n\n  * All users are now presented with a \"NAV tour\" widget on their front page,\n    which will give an interactive tour of the functionality on the new front\n    page.\n\n  * Introduced widget for displaying the contents of `welcome-anonymous.txt`\n    and `welcome-registered.txt`, as was always present on the NAV 3 front\n    page.\n\n  * Introduced button to add any graph displayed in NAV to your front page\n    widget dashboard.\n\n  * CPU stats from HP devices are now included in ranked CPU statistics.\n\n  * New button in ranked statistics to switch between regular graph and pie\n    chart.\n\n  * Improved titles, legends and display of various graphs.\n\n  * Removed obsolete Adobe Flash component that was used to facilitate CSV\n    export of the room switch port view.\n\n\nVersion 4.0b3\n(released 06 Feb 2014)\n\n Bugfixes:\n\n  * LP#1270095 (APC sensors stored at wrong precision)\n  * All VLAN utilization graphs produced error messages in b2.\n\n User-visible features and improvements:\n\n  * Inserted the new NAV logo, and completely reworked the page footer.\n\n  * New NAV blog feed widget added as default.\n\n  * UI clean-ups and improvements in front page widgets, login page, Geomap,\n    SeedDB, Messages, PortAdmin, Radius, Syslog Analyzer, IP Device Info, room\n    photo database, personal preferences page and others.\n\n  * Fixed Internet Explorer 9 brokenness.\n\n  * Tool descriptions have been completely re-authored, and are now also\n    available as a subheading inside each tool.\n\n\nVersion 4.0b2\n(released 9 Jan 2014)\n\n Bugfixes:\n\n  * LP#1262644 (seeddb bulk import does not work)\n  * LP#1263040 (ipdevinfo should not crash when Graphite-web is not reachable)\n  * LP#1267464 (NAV 4 must provide a tool for migrating RRD data from NAV 3)\n\n User-visible features and improvements:\n\n  Various UI improvements to the room photo database, toolbox dropdown,\n  Network Explorer, Geomap and Ranked statistics.\n\n\nVersion 4.0b1\n(released 12 Dec 2013)\n\n User-visible features and improvements:\n\n  * The web-based user interface has been overhauled/redesigned, using the\n    Foundation CSS framework. One of the goals of this process is to have\n    design elements that are properly re-usable, and a responsive design that\n    will work better on small-screen devices.\n\n  * Cricket and RRDtool have been replaced with ipdevpoll plugins for\n    time-series data collection and Graphite for data storage and\n    presentation. More information about Graphite can be found at\n    http://graphite.wikidot.com/ .\n\n  * System and port traffic graphs are now browsable directly in the ipdevinfo\n    tool under each IP device or network interface. The advanced user can also\n    build more complex, customized graphs from the data collected by NAV by\n    utilizing Graphite's own web interface.\n\n  * The threshold management interface has been rewritten from scratch to work\n    with data from Graphite.\n\n These are fairly large, not backwards compatible changes to NAV. Please refer\n to the release notes for upgrade instructions. For testing the 4.0 beta\n version we recommend installing NAV on a separate, perhaps virtual, server,\n and migrate production data according to the data migration howto found in\n the documentation.\n\n\nVersion 3.15.10\n(released 26 Jun 2014)\n\n Bugfixes:\n\n  * LP#1321634 (Some alerts are never resolved when devices have moved around)\n  * LP#1327098 (ipdevpoll jobs are marked as successful when nothing was done)\n  * LP#1333167 (Netbox.up sometimes out of sync with actual alert-based box\n                state)\n\n\nVersion 3.15.9\n(released 15 May 2014)\n\n Bugfixes:\n\n  * LP#1302403 (Unplugged HP power supplies are marked with \"unknown\" state)\n  * LP#1304455 (Submitting an empty search form crashes Arnold)\n\n\nVersion 3.15.8\n(released 03 Apr 2014)\n\n Bugfixes:\n\n  * LP#1300117 (Fix for bug 1295092 causes ipdevpoll inventory jobs to crash for\n                Cisco devices)\n  * LP#1301251 (LDAP users with non-ASCII characters in their name cause login\n                page to crash when user lookup method is 'search' (MS AD))\n  * LP#1301343 (CDP cache is never refreshed on devices that do not respond to\n                CDP-MIB::cdpGlobalLastChange)\n  * LP#1301349 (Module down alerts fail to mention the module's name)\n  * LP#1301794 (LDAP group membership verification crashes with\n                UnicodeDecodeError when username contains non-ASCII chars)\n\n\nVersion 3.15.7\n(released 27 Mar 2014)\n\n Bugfixes:\n\n  * LP#1251211 (portadmin wishlist: option to reset active interface whene\n                changing vlan)\n  * LP#1285601 (Switch ports on non-existant VLANs on Cisco switches don't\n                appear as switch ports in NAV)\n  * LP#1287700 (SeedDB will readily accept serial numbers with trailing spaces)\n  * LP#1289219 (affected displays no information on nodes not in topology)\n  * LP#1289320 (Submitting invalid alert subscription forms cause crash instead\n                of error message)\n  * LP#1291956 (LDAP auth against MS AD broken since NAV 3.14.1592653)\n  * LP#1291978 (User supplied login name is not escaped in LDAP search filters,\n                causing possible injection vulnerabilities)\n  * LP#1292513 (sysname/reverse dns lookups are inconsistent or lacking after a\n                bulk import)\n  * LP#1293621 (missing cascade in table accounttool)\n  * LP#1295092 (Only modules and power supplies on first member are collected\n                from stacked HP 2920)\n  * LP#1297200 (powersupplywatch crashes when there are more than ~1024 devices\n                to poll)\n  * LP#1297767 (Django exposes sensitive data like: username/password)\n\n\nVersion 3.15.6\n(released 20 Feb 2014)\n\n Bugfixes:\n\n  * LP#1274406 (Power Supply status is not correct)\n  * LP#1278433 (Link to alert profiles permissions is missing)\n  * LP#1279748 (Malformed timestamps cause internal crash in activeip API call,\n                instead of proper error message)\n\n\nVersion 3.15.5\n(released 06 Feb 2014)\n\n Bugfixes:\n\n  * LP#1241624 (Attempting to access a restricted resource when logged in as an\n                underprivileged user causes a 403 Forbidden response with an\n                empty body)\n  * LP#1269714 (Physically replacing a device may cause all further SNMP polling\n                of it to stop)\n  * LP#1272226 (PSU alerts are not shown in the status page)\n  * LP#1273706 (\"put on maintenance\" from status page doesn't work properly when\n                NAV and PostgreSQL are configured with differing timezones)\n  * LP#1276509 (Access ports sometimes wrongly categorized as uplinks/downlinks)\n\n\nVersion 3.15.4\n(released 9 Jan 2014)\n\n Bugfixes:\n\n  * LP#1246684 (AttributeError crash in Machine Tracker when search results\n                include data from deleted IP devices)\n  * LP#1255958 (DHCP service-check failure)\n  * LP#1265753 (portadmin does not allow empty ifalias)\n  * LP#1265755 (portadmin fails to load template for ifalias format)\n\n\nVersion 3.15.3\n(released 14 Nov 2013)\n\n Bugfixes:\n\n  * LP#1239998 (Invalid MAC addresses collected in ARP data from Cisco Nexus\n                routers)\n  * LP#1247051 (The necessity of SECRET_KEY in NAV 3.15 is not documented)\n  * LP#1248524 (Ranked statistics report results seem random in NAV 3.15.2)\n  * LP#1248941 (Enabling [defaultvlan] in portadmin.conf makes portadmin fail)\n  * LP#1250760 (Existing CAM records aren't closed when switch has _no_ more CAM\n                records)\n  * LP#1250846 (netbiostracker crashes on non standard result)\n\n\nVersion 3.15.2\n(released 31 Oct 2013)\n\n Bugfixes:\n\n  * LP#1241441 (UnicodeDecodeErrors in reports with non-ASCII data on some\n                installations)\n  * LP#1241611 (Ranked statistics search results crash with TypeError)\n  * LP#1241627 (modpython authentication shim appears to leak open PostgreSQL\n                connections in Apache)\n  * LP#1241630 (thresholdMon crashes with TypeError when sending a threshold\n                event)\n  * LP#1242673 (frontpage small screens display links above status)\n  * LP#1242905 (Machine Tracker result sorting breaks down for MAC and Switch\n                search results)\n  * LP#1244120 (Subnet Matrix crashes under unknown circumstances)\n  * LP#1244175 (Using SQL to insert custom device categories will cause Netmap\n                to fail)\n  * LP#1244191 (eventengine dies instead of re-opening logs on the HUP signal)\n  * LP#1245370 (Subnet matrix crashes when only a single scope is registered)\n  * LP#1245419 (NoReverseMatch error on some Machine Tracker searches)\n  * LP#1246226 (Cannot delete IP devices with interface stacks)\n  * LP#1246684 (AttributeError crash in Machine Tracker when search results\n                include data from deleted IP devices)\n\n\nVersion 3.15.1\n(released 17 Oct 2013)\n\n Bugfixes:\n\n  * LP#1230240 (navsyncdb command is not installed in NAV 3.15.0)\n  * LP#1230299 (Cricket+NAV 3.15.0 may not work under Django 1.4.5)\n  * LP#1235355 (Machine Tracker performs unnecessary join on netbios table)\n  * LP#1235356 (The netbios table needs an index for efficient joins on the arp\n                table)\n  * LP#1236753 (machinetracker netbios search crashes)\n  * LP#1236813 (Alertengine crashes on nav version 3.14)\n  * LP#1239139 (Weathergoose2 GOOSENAME not initialized in snmptrap handler)\n  * LP#1240855 (Mac search + DNS crashes with TypeError in NAV 3.15.0)\n\n\nVersion 3.15.0\n(released 19 Sep 2013)\n\n User-visible features and improvements:\n\n  * Devices' conceptual layering of interfaces is now collected and presented\n    in ipdevinfo. This enables you to, among other things, see which physical\n    ports comprise a port- or etherchannel. Some vendors also use this to show\n    which physical switch-ports are forwarding packets to/from a given VLAN\n    interface.\n\n  * The Netmap tool has been redesigned and re-engineered. Multiple\n    improvements have been made based on user feedback.\n\n  * The Netmap contents can now be exported/downloaded as an SVG file, but\n    this feature is currently only supported by the Google Chrome browser.\n\n  * Multiple parallel links are now indicated by the Netmap by two parallel\n    black markers drawn across the link in question. Details of the underlying\n    links are are now properly displayed when clicking on the link line.\n\n  * Interactive next-hop neighbor map in new ipdevinfo tab.\n\n  * \"What-if\" analysis in new ipdevinfo tab displays devices and organizations\n    that may be affected if the selected device goes down. Based on NAV's\n    topology information.\n\n  * Images with descriptions can be uploaded and attached to rooms. Useful\n    for, among other things, photo-documenting the contents of wiring closets.\n\n  * Subcategories have been replaced by cross-category device groups.\n    Arbitrary selections of IP devices can be organized into device groups.\n\n  * Potentially out-of-date CAM and ARP records are highlighted in Machine\n    Tracker search results.\n\n  * Community strings are censored in SeedDB IP Device listing.\n\n  * Geolocation of rooms can now be set by clicking on interactive map in\n    SeedDB.\n\n  * New program enables streamlined dumping and reloading, with optional\n    filtering, of the NAV PostgreSQL database. This simplifies beta testing of\n    new NAV versions by copying the production database to a test server.\n\n  * 26 more metrics from APC UPS devices are now collected and graphed.\n\n  * mod_python is no longer required; mod_wsgi is the new recommended way to\n    deploy the NAV web interface.\n\n Bugfixes:\n  * LP#1055383 (netmap saves a new view when it should update view)\n  * LP#1057423 (netmap algorithm indicator turns red when clicking on\n                something in left bar)\n  * LP#1062203 (ipdevpoll job configuration description)\n  * LP#1165039 (Selecting a datasource for bulk threshold config intermittently\n                fails with \"internal server error\")\n  * LP#1169926 (Replace mod_python with Django/WSGI)\n  * LP#1213818 (LDAP authentication crashes on non-ASCII usernames and/or\n                passwords)\n  * LP#1222666 (\"Uptime\" in ipdevinfo never resets)\n\n\nVersion 3.14.1592653\n(released 15 Aug 2013)\n\n Bugfixes:\n\n  * LP#1146778 (Statemon's icmp.py and ip.py maybe obsolete, remove if so)\n  * LP#1198897 (ipdevpoll doesn't guesstimate net_type correctly when rfc3021 is\n                in use)\n  * LP#1198970 (cricket switch config typo)\n  * LP#1200514 (power supply daemon bails out if pysnmp_se is not installed)\n  * LP#1206510 (ipdevpoll LLDP UnicodeDecodeError)\n  * LP#1207722 (Usernames are searched case insensitive in Microsoft AD)\n  * LP#1207737 (LDAP authentication crash on non-existant user in Microsoft AD)\n  * LP#1211299 (arnold interface crashes on missing interface)\n  * LP#1211692 (arnold must display former interface info when interface is\n                missing)\n\nVersion 3.14.159265\n(released 27 Jun 2013)\n\n This release rolls back changes to the camlogging system that were made in\n the 3.14.1592 release. These changes caused cam records to be created\n erroneously and also a massive load increase on the server NAV is running on.\n Upgrading is HIGHLY recommended.\n\n Bugfixes:\n\n  * LP#1195206 (MAC addresses are logged for most link ports, causing huge load\n                increase on NAV server)\n\nVersion 3.14.15926\n(released 20 Jun 2013)\n\n Bugfixes:\n\n  * LP#1177754 (SRV and OTHER category devices have no uplinks)\n  * LP#1185786 (maintengine.py crashes on any maintenance task with room or\n                location components)\n  * LP#1185848 (VLAN topology direction is wrong in cases of multiple links\n                between two devices)\n  * LP#1186193 (Cricket collects statistics from EDGE switches in NAV 3.14.1592)\n\nVersion 3.14.1592\n(released 25 Apr 2013)\n\n Important upgrade note:\n\n  * The Cricket trees `switch-ports` and `router-interfaces` have been\n    consolidated into a single `ports` tree, where all physical ports' traffic\n    stats now also are collected. After running the usual `syncdb.py` command,\n    you should run `mcc.py` once manually (as the navcron) user to ensure the\n    Cricket config tree is updated right away.\n\n    When everything is up and running again, you can optionally delete the\n    `switch-ports` and `router-interfaces` directories from your\n    `cricket-config` directory, as they are no longer used by NAV.\n\n  * NAV now supplies its own `subtree-sets` configuration to Cricket. If you\n    have made manual changes to your Cricket collection setup and/or this\n    file, you may need to update your setup accordingly.\n\n Bugfixes:\n\n  * LP#1165193 (Prefix Matrix Doesn't Handle HSRP)\n  * LP#1165206 (ARP Entries on HSRP Subnets are Double Counted)\n  * LP#1169553 (Consolidate switch-ports, router-interfaces and physical port\n                traffic statistics in Cricket)\n  * LP#1169837 (servicemon debug logs no matter what the log level is set to)\n  * LP#1169872 (VRRP/HSRP plugin is not enabled by default)\n  * LP#1169986 (ipdevpoll spins in its tracks and doesn't reconnect on database\n                connection loss)\n  * LP#1170221 (Subnet matrix crashes with AttributeError when only one scope\n                prefix is registered)\n  * LP#1170291 (Mac search + DNS crashes with AttributeError in NAV 3.14.159)\n  * LP#1170329 (eventengine dies on loss of database connection)\n  * LP#1170374 (Alertengine dies on loss of database connection)\n  * LP#1170634 (The SMS daemon dies when database connection is lost)\n  * LP#1172204 (Device history crashes with NameError on invalid date input)\n\nVersion 3.14.159\n(released 11 Apr 2013)\n\n Bugfixes:\n\n  * LP#1155128 (IndexError crash in Machine Tracker)\n  * LP#1158214 (mcc.py does debug logging even when configured not to)\n  * LP#1160921 (Geomap won't load map data over HTTPS in Chrome)\n  * LP#1161108 (Room bulk import format doesn't include geo position)\n  * LP#1163256 (snmptrapd crashes with \"interrupted system call\" error)\n  * LP#1164582 (netmap bails on fetching network graph if interface.speed\n                missing)\n  * LP#1165017 (Adding 0.0.0.0/0 as excepted range causes netbiostracker to\n                hang)\n\nVersion 3.14.15\n(released 21 Mar 2013)\n\n Bugfixes:\n\n  * LP#1152173 (Deleting rrdviewer.conf causes crash when attempting to view\n                graphs from ipdevinfo)\n  * LP#1152599 (VLANs periodically lose one or more prefixes)\n  * LP#1154626 (Threshold bulk config UI unresponsive, with javascript console\n                error)\n  * LP#1155096 (Filtering by category in syslog analyzer doesn't work)\n  * LP#1156647 (Topology is not cleared when ports are shut down)\n  * LP#1157154 (Netmap stopped working in NAV 3.14.1)\n  * LP#1157594 (netbiostracker crashes when a netbios host reports an empty mac\n                address)\n  * LP#1157658 (Failing ipdevpoll plugin should be identified in log messages at\n                the ERROR level)\n\nVersion 3.14.1\n(released 07 Mar 2013)\n\n User-visible features and improvements:\n\n  * NAV now fully supports SNMP communication over IPv6. Please see the\n    release notes for more information.\n\n  * Most of the service monitor plugins now support IPv6.\n\n  * NAV documentation is slowly moving out of the wiki and into Sphinx. Now,\n    every NAV installation includes a link from the front page to the\n    browseable, locally installed documentation.\n\n  * The Toolbox can now be collapsed into an icon/title-based list if the tool\n    descriptions aren't needed or wanted.\n\n  * The ordering of tools in the Toolbox can now be customized individually by\n    each user.\n\n  * The status page and portadmin have been adapted to work well on small\n    screens/mobile devices.\n\n  * Portadmin now supports editing trunks.\n\n  * Portadmin includes a new feature to enable trunking of predefined voice\n    VLANs on access ports, for SIP phones that support 802.1Q trunking\n\n Fixes and features:\n\n  * LP#483534  (Subnet Matrix: Display description of prefix in dropdown)\n  * LP#736818  (Reorganise toolbox webpage)\n  * LP#965144  (Front page needs link to Status page)\n  * LP#1060976 (Portadmin imports nav.Snmp.pysnmp_se directly)\n  * LP#1062206 (Camlogger should log entries from non-access ports if connected\n                device is not a networking device)\n  * LP#1062317 (Support SNMP over IPv6)\n  * LP#1062318 (Servicemon plugins should be reviewed for IPv6 support)\n  * LP#1069770 (Want a mobile version of the status page)\n  * LP#1069771 (Want a mobile version of port admin)\n  * LP#1092154 (Portadmin crash when unicode characters in ifalias)\n  * LP#1092156 (Portadmin crash when it cannot find a netbox by name or ip,-\n                and interface by id)\n  * LP#1092551 (Bug in threshold, crashes when searching for netboxes\n  * LP#1103376 (portadmin should highlight changes in a better way)\n  * LP#1134390 (Machine tracker crashes when inputting non-ASCII characters in\n                search)\n  * LP#1134392 (Invalid IP search patterns cause abnormal Machine Tracker\n                behavior)\n  * LP#1135699 (arnold fails to open quarantined ports on cisco devices)\n  * LP#1137799 (cricket runs eval on config that contains curly braces)\n  * LP#1143962 (Device history search for location crashes)\n  * LP#1146602 (Maintengine TypeError crash)\n  * LP#1146604 (arnold lacks links to relevant information)\n\n\nVersion 3.13.1\n(released 21 Feb 2013)\n\n The release notes were updated with more information about dependency changes\n and the new alert message templates introduced with the Python-based event\n engine.\n\n Fixes:\n\n  * LP#1126340 (arnold t1000 crashes on pursuit)\n  * LP#1126341 (arnold autoenable crashes on missing interface)\n  * LP#1128868 (Arnold does not display a candidate for manual block)\n  * LP#1130093 (NetworkX 1.6 throws exception in eventengine)\n  * LP#1130103 (Typo in ReportListTemplate.tmpl)\n\nVersion 3.13.0\n(released 07 Feb 2013)\n\n Fixes:\n\n  * LP#1092848 (logengine regression: crash on various non-Cisco syslog entries)\n  * LP#1102831 (machine tracker ip sort does not work)\n  * LP#1104025 (vlan view needs a search page)\n  * LP#1104027 (vlan view does not draw a vlan graph if there are no ipv4\n                prefixes)\n  * LP#1107723 (collect_active_ip crashes when prefix ids has been changed)\n  * LP#1108647 (navbar search should search for vlan net types)\n  * LP#1108702 (Unused prefixes are never deleted)\n  * LP#1108880 (Physical port view annotates all non-switching ports as layer 3\n                ports)\n  * LP#1110368 (Messages UI crashes when entering non-ASCII characters in forms)\n  * LP#1115013 (Modules with status down don't show up in 'Delete modules' page)\n  * LP#1115109 (Machine tracker switch search lists all ports if no results are\n                found for the target port)\n\nVersion 3.13.0b2\n(released 25 Jan 2013)\n\n Fixes:\n\n  * LP#309705  (Add RSS feed for messages)\n  * LP#735521  (Tracking machines behind a port where the name has changed\n                fails)\n  * LP#1014513 (Ajax calls need to handle session timeout)\n  * LP#1062136 (linkState events should be sent only for redundant links)\n  * LP#1062197 (ipdevinfo DNS table should be on a separate tab)\n  * LP#1062200 (ipdevinfo needs a port view tab for physical ports)\n  * LP#1083511 (MachineTracker form data is reset on result page)\n  * LP#1092154 (Portadmin crash when unicode characters in ifalias)\n  * LP#1092156 (Portadmin crash when it cannot find a netbox by name or ip,- and\n                interface by id)\n  * LP#1092848 (logengine regression: crash on various non-Cisco syslog entries)\n  * LP#1099321 (cricket frontpage displays !short-desc!)\n  * LP#1099393 (ipdevinfo room link should link to new room info)\n  * LP#1099412 (room opt fields with links should be clickable in room view)\n  * LP#1102923 (eventEngine doesn't fallback to default alert message template)\n  * LP#1102924 (Missing alert templates for upsPowerState alerts)\n  * LP#1103403 (servicestate plugin doesn't add service details to alerts)\n  * LP#1103455 (active ip collector is insanely slow)\n  * LP#1103459 (active ip collector does not detect that it is running)\n  * LP#1103505 (arnold crashes on manual detention)\n  * LP#1103923 (vlan view breadcrumbs missing)\n  * LP#1103926 (Unhandled errors in eventengine topology evaluation cause events\n                to be ignored)\n  * LP#1103929 (Netbox.up winds up out of sync with actual alert-based box\n                state)\n\nVersion 3.13.0b1\n(released 14 Dec 2012)\n\n User-visible features and improvements:\n\n  * The eventEngine has been rewritten to Python. This was the last remaining\n    Java component of NAV, meaning Java is no longer needed for installing and\n    running NAV.\n\n  * VLANs are now searchable from the Navbar.\n\n  * IPv4, IPv6 and MAC host counts for each VLAN is now graphed over time.\n\n  * NAV is now able to detect and graph data from sensors on Cisco Nexus\n    devices.\n\n  * Maintenance tasks can now be configured to end automatically when all\n    components involved in the task are up.\n\n  * IP Devices that are down can be placed on immediate maintenance until up\n    again directly from the status page.\n\n  * Subscriptions to MAC address prefixes are now possible in Macwatch. Use\n    with caution!\n\n Fixes:\n\n  * LP#305435  (Sort by \"Start time\" or \"End time\" in machinetracker)\n  * LP#305441  (Button for \"Put on maintenance immediately\")\n  * LP#317800  (Color gradient to express utilization of IPv6 subnets)\n  * LP#341703  (Manual detention does not pursue client)\n  * LP#361530  (Arnold: Predefined detention does not exponentially increase\n                detentions)\n  * LP#744932  (Arnold should give warning if snmp write is not configured)\n  * LP#833959  (make install overwrites nav.conf and db.conf)\n  * LP#922793  (Possibility to set end time = \"until device is up again \" in\n                maintenance)\n  * LP#961097  (Don't list cancelled maintenance tasks in active list)\n  * LP#961100  (Show component details in maintenance task list when there is\n                only a single component)\n  * LP#1057509 (Mouseovers with number of active IPv6 addresses in Subnet\n                Matrix)\n  * LP#1057511 (Get sensor information from CISCO-ENTITY-SENSOR-MIB)\n  * LP#1062130 (NAV should graph IP address usage per prefix)\n  * LP#1069773 (macwatch should be able to look for MAC address prefixes too)\n\n\nVersion 3.12.4\n(released 06 Dec 2012)\n\n Bugfixes:\n\n  * LP#744963  (generate short interface names in ip dev info when necessary)\n  * LP#1074323 (Machine tracker crashes on partial subnet search)\n  * LP#1076913 (cricket-config is not updated on update)\n  * LP#1077881 (snmpoid octets should be bytes/s not bytes)\n  * LP#1077949 (ipdevinfo helper functions crash on invalid input)\n  * LP#1078259 (templatetag add_interval does not exit cleanly on error)\n  * LP#1078292 (ipdevpoll job logger needs to log interval for manual jobs)\n  * LP#1079088 (logengine crashes on syslog entries from a Cisco ASA device)\n  * LP#1080663 (ipdevinfo netbox overview does not display edge netboxes)\n  * LP#1080727 (portadmin does not follow organization hierarchy correctly)\n  * LP#1082381 (ipdevpoll oidprofiler sets unsupported when value=0)\n  * LP#1085826 (portadmin shows wrong available vlans)\n\nVersion 3.12.3\n(released 01 Nov 2012)\n\n Bugfixes:\n\n  * LP#343857  (Invalid IP in subnet matrix)\n  * LP#1052907 (Threshold configurator does not indicate the unit/scale of a\n                metric when editing a threshold)\n  * LP#1062230 (Removing a threshold doesn't clear an active threshold alert)\n  * LP#1062236 (PSU alarms don't show up on Status page)\n  * LP#1063728 (TemplateSyntaxError at /info/)\n  * LP#1068097 (navtopology crashes on CDP data from Cisco Switch Clustering)\n  * LP#1069688 (datasources have no default unit)\n  * LP#1069751 (Subnet matrix crash on scope with only a few large subnets)\n  * LP#1070798 (spaces in search words in navbar are not trimmed)\n  * LP#1070846 (ipdevinfo crashes when searching for netbox that does not exist)\n\nVersion 3.12.2\n(released 18 Okt 2012)\n\n Bugfixes:\n\n  * LP#1052902 (linkState remains unresolved after links comes back up)\n  * LP#1052906 (Cannot add thresholds with decimals)\n  * LP#1057403 (cricket sensor module does not clean up old config)\n  * LP#1057514 (Removed PSUs and fans don't disappear from NAV)\n  * LP#1060974 (Web interface crash when PySNMP-SE is not installed)\n  * LP#1061518 (Room view \"last seen\" search needs label to identify unit/scale)\n  * LP#1061520 (The ipdevpoll job \"logging\" should be renamed to \"ip2mac\")\n  * LP#1061521 (The \"lastupdated\" report is horribly broken)\n  * LP#1061526 (The ipdevinfo job listing should include interval information)\n  * LP#1061529 (Ipdevinfo \"recent alerts\" tab should indicate unresolved alerts\n                by changing colour)\n  * LP#1061532 (My SMS list should sort the newest messages first)\n  * LP#1061595 (Machine Tracker no longer accepts a prefixid argument)\n  * LP#1065442 (Search for ip or id in navbar does not work)\n  * LP#1065464 (Searching for a partial ip in navbar crashes the site)\n\nVersion 3.12.1\n(released 27 Sep 2012)\n\n Bugfixes:\n\n  * LP#1046221 (SshChecker.py only works for IPv4)\n  * LP#1046777 (no breadcrumb on seeddb IP Device)\n  * LP#1050890 (info/room - roomid with spaces crashes room listing)\n  * LP#1050905 (room view port ordering in netbox interfaces is wrong)\n  * LP#1051869 (Netmap selected node elink renders incorrect)\n  * LP#1051878 (Netmap last updated field for selected netbox)\n  * LP#1052435 (Netmap crashes NAV if install has old simplejson library)\n  * LP#1052436 (Netmap fails reading request body on django>=1.4)\n  * LP#1052804 (NoReverseMatch error on multiple pages when adding IPv6 host\n                with no DNS name)\n  * LP#1052885 (snmpAgentState alert is not resolved when SNMP is deconfigured\n                for device)\n  * LP#1052893 (When adding an alert subscription, it's impossible to see which\n                addresses are Jabber addresss and which are e-mail)\n  * LP#1052898 (No fan or PSU-related alarms are ever posted)\n  * LP#1053866 (newest instead of oldest entries are trimmed from the ipdevpoll\n                job log table)\n  * LP#1053961 (Netmap algorithm state indicator is slow)\n  * LP#1054091 (netmap save as dialog does not follow NAV's palette)\n  * LP#1055586 (ipdevpoll aborted due to plugin failure: tuple index out of\n                range)\n  * LP#1057366 (Netmap should warn IE users about min. version)\n  * LP#1057373 (Netmap traffic gradient enhancements)\n  * LP#1057374 (Netmap renders wrong linkload color for 0%)\n\nVersion 3.12.0\n(released 13 Sep 2012)\n\n User-visible features and improvements:\n\n  * The Netmap Java applet has been rewritten in JavaScript, with many\n    improvements, including, but not limited to, saveable map layouts and VLAN\n    topology tracing.  Layer 2 and layer 3 maps are now separate, and\n    elinks/peers can optionally be displayed on L3.\n\n  * Searches in the navbar will now return results from rooms and interfaces,\n    as well as IP devices.\n\n  * New room view with powerful port overview, enabling sorting, filtering and\n    exporting information to CSV files.\n\n  * IP Device Info has been cleaned up, now with more information,\n    navigateable via a tabbing interface.\n\n  * A map of registered room locations with status indicators can now be\n    embedded in the main page by removing the commented-out sections of the\n    `welcome-registered.txt` file.\n\n  * IPv6 traffic counters for router interfaces. Vendor support for this seems\n    dismal at the moment, so keep nagging for software updates!  If upgrading\n    from previous NAV versions, new cricket configuration templates need to be\n    copied; please read the release notes.\n\n  * ipdevpoll now supports both VRRP and HSRP.\n\n  * The maximum number of concurrent collection jobs in an ipdevpoll process\n    can now be configured, which is useful in situations where the process\n    runs out of resources such as file descriptors.\n\n  * ipdevpoll job runs are now all logged to the database, enabling more\n    details and analysis of job statuses in the web interface.  ipdevinfo will\n    now display a timestamp for each of the configured jobs, complete with\n    status indicators and warnings for jobs that may be overdue.\n\n  * The Maintenance and Messages tool have been migrated from mod_python to\n    Django, and especially the former has received some improvements along the\n    way.\n\n Bugfixes:\n\n  * LP#736825  (Replace ip-hostname search in toolbar with a more generic\n                searchbox)\n  * LP#1009497 (Forward slashes in location names crash SeedDB)\n  * LP#1039490 (Mixed IPv4 and IPv6 elinks are mis-labeled as lans)\n  * LP#1040043 (Incorrect layer 2 topology in networks with VRRP routers)\n  * LP#1043791 (MAX_CONCURRENT_JOBS needs to be configurable)\n  * LP#1044321 (SNMP timeout value is not respected during Cisco community\n                indexing)\n  * LP#1046227 (Django >= 1.2 deprecation warnings)\n\n\nVersion 3.11.6\n(released 17 August 2012)\n\n Bugfixes:\n\n  * LP#1023567 (ipdevpoll logging system uses too many resources)\n  * LP#1027051 (ipdevpoll is not able to gather ARP and ND data from h3c/hp\n                devices configured in IRF)\n  * LP#1034864 (serial numbers disappear in NAV 3.11.5)\n  * LP#1036656 (ipdevinfo only lists uplinks for switches)\n  * LP#1037059 (CDP neighbors reported with IP=0.0.0.0 are mis-identified)\n  * LP#1037460 (Cisco switch ports disappear in NAV 3.11.5)\n  * LP#1037533 (ifAlias is not updated on changes)\n\n\nVersion 3.11.5\n(released 21 June 2012)\n\nBugfixes:\n\n  * LP#722561  (Netmap:incorrect link load info)\n  * LP#1009002 (Unknown orgid parsed from router port description causes\n                ipdevpoll inventory job to fail)\n  * LP#1010013 (KeyError in ipdevpoll interfaces plugin on devices that have no\n                network interfaces)\n  * LP#1010018 (IndexToIpException in ipdevpoll Prefix plugin)\n  * LP#1012001 (ipdevpoll inventory job fails on WeatherGoose device)\n  * LP#1012032 (ipdevpoll inventory job crashes on devices reporting invalid IP\n                address netmasks)\n  * LP#1012034 (Unknown usageid parsed from router port description causes\n                ipdevpoll inventory job to fail)\n\n Various performance-related improvements:\n\n  * More tweaks to avoid producing unnecessary SNMP queries.\n\n  * Switch port detection on Cisco equipment has been improved\n\n\nVersion 3.11.4\n(released 31 May 2012)\n\n Bugfixes:\n\n  * LP#644155 (Network Explorer never returns response to some searches)\n  * LP#912276 (Device History Request-URI Too Large)\n  * LP#996955 (All sensor stats are named \"Sensor\", and clutter the ipdevinfo\n               view)\n  * LP#997008 (Failed ipdevpoll jobs aren't properly rescheduled)\n  * LP#997606 (add option to run each ipdevpoll job type in separate process)\n  * LP#997980 (bad MAC for IPv6 addresses from Catalyst 6500)\n  * LP#999606 (dhcping is not documented as requirement for DHCP service\n               monitor)\n\n Various performance-related improvements:\n\n  * Internal caching of collected SNMP variables pr. ipdevpoll SNMP session.\n\n  * Various tweaks to avoid producing unnecessary SNMP queries.\n\n  * Added database indexes for some potentially slow and frequently used\n    queries.\n\n  * Added ipdevpolld multiprocess option to run each job type as separate\n    subprocess (enabling this will consume up to 60 PostgreSQL connections, be\n    warned!)\n\n  * An -n option was added to ipdevpolld. Used in combination with the -J\n    option, ipdevpoll will run a single job for a single netbox as a\n    foreground process.\n\n  * When new jobs are added to the internal ipdevpoll job queues, boxes are\n    prioritized in ascending order of last update time.  I.e. ipdevpoll will\n    run jobs first for boxes that are new or haven't completed an inventory\n    job in a long time.\n\n\nVersion 3.11.3\n(released 03 May 2012)\n\n Bugfixes:\n\n  * LP#912217 (Breadcrumb path missing from Alert Profiles My SMS view)\n  * LP#912763 (Alert Profile filter form cannot display more than 300 rooms)\n  * LP#929375 (Status page needs an \"SNMP Agents Down\" listing)\n  * LP#929376 (Status page needs a \"Links Down\" listing)\n  * LP#955794 (geomap variant normal, does not finish loading map, and shows no\n               rooms or links)\n  * LP#961221 (Maintenance task cancel action still visible on cancelled tasks)\n  * LP#961996 (Geomap CPU load indication is always red)\n  * LP#962087 (IP-hostname search in toolbar translates all numbers as IP-\n               addresses)\n  * LP#962093 (Report CSV export crashes on non-ASCII data)\n  * LP#962146 (Faulty SNMP agent implementations crash SeedDB)\n  * LP#965147 (Want clickable \"function\" column in Reports)\n  * LP#965149 (Invalid link to function in Server report)\n  * LP#966063 (prefix report, missing argument to machinetracker)\n  * LP#966072 (invalid link in Usage report)\n  * LP#978618 (KeyError in ipdevpoll psu plugin)\n  * LP#979754 (scope prefix is overwritten by lan prefix)\n  * LP#983737 (ipdevpoll cam plugin TypeError crash)\n  * LP#991714 (Requiring group membership makes LDAP authentication crash for\n               first time users)\n  * LP#993932 (ipdevpoll LLDP plugin MultipleObjectsReturned exception)\n\nVersion 3.11.2\n(released 12 Apr 2012)\n\n Bugfixes:\n\n  * LP#939429 (throttle linkState events)\n  * LP#962939 (navtopology crashes when router trunks exist)\n  * LP#965972 (neighbor identification via sysname is case sensitive)\n  * LP#968917 (ipdevpoll UnicodeDecodeError when storing unidentified LLDP\n               neighbors)\n  * LP#969069 (ipdevpoll.log fills up with snmp_open errors)\n  * LP#972211 (Switch ports not discovered on Gbe2c switches)\n  * LP#972363 (statically configured bridge forwarding entries aren't collected\n               for machine tracking)\n  * LP#972442 (ipdevpoll profiling job crashes with IntegrityError)\n  * LP#979737 (throttle snmpAgentState events)\n  * LP#979791 (ipdevpoll LLDP plugin crash with AttributeError)\n\nVersion 3.11.1\n(released 22 Mar 2012)\n\n User-visible features and improvements:\n\n  * Unrecognized neighbors report is now back, with improved information and\n    populated with source data from both CDP and LLDP.\n\n  * Running out of available file descriptors while opening SNMP sockets is\n    logged more informatively.\n\n  * ipdevpoll will not run jobs unnecessarily for devices whose SNMP agents\n    are known to be down.\n\n Bugfixes:\n\n  * LP#890142 (sysname is not updated from DNS for non-SNMP devices)\n  * LP#953967 (Don't store router port addresses for shutdown ports)\n  * LP#954766 (CDP plugin crashes with AttributeError on some devices)\n  * LP#955087 (Geomap fails to draw map after OpenStreetMap shut down tiles@home\n               server)\n  * LP#955789 (sc.03.11.0004.sql fails on PostgreSQL 9)\n  * LP#955808 (navtopology ValueError: need more than 1 value to unpack)\n  * LP#955861 (ipdevpoll topo job IntegrityError)\n  * LP#956772 (navtopology doesn't delete unused vlan records)\n  * LP#956904 (ipdevpoll creates unusable Vlan records)\n  * LP#956910 (ipdevpoll is unable to detect cisco router trunks properly)\n  * LP#956955 (mcc.py creates sensors configuration for netboxes that have no\n               SNMP community)\n  * LP#959081 (Error in IP filter causes AlertEngine to crash)\n  * LP#959156 (ipdevpoll AttributeError: LoggerAdapter instance has no attribute\n               'warn')\n  * LP#961123 (ipdevpoll topo job UnboundLocalError in neighbor processing)\n  * LP#961206 (Non-conformance to IPV6-TC in IPV6-MIB causes inventory job\n               crash)\n  * LP#961238 (ipdevpoll topo job crash when storing blocked ports for some\n               Procurve switches)\n  * LP#961566 (FieldDoesNotExist error in ipdevpoll: ifoperstatus_change)\n  * LP#961573 (ipdevpoll ValueError: u'1.3' is not a valid sysObjectID)\n\nVersion 3.11.0\n(released 08 Mar 2012)\n\n User-visible features and improvements:\n\n  * LLDP support for improved topology detection.\n\n  * getBoksMacs replaced by ipdevpoll plugins in `topo` job.\n\n  * Q-BRIDGE-MIB now also used when collecting switch forwarding tables,\n    meaning improved machine tracking data for switch vendors like HP, Juniper\n    and Alcatel.\n\n  * The Machine Tracker's IP search form has consolidated the `To` and `From`\n    IP address search fields into a single `IP Range` search field with\n    extended search syntax for ranges of IP addresses.  See LP#643544 for\n    details.\n\n  * ipdevpoll can now be made to run single job configurations from\n    ipdevpoll.conf, to run in the foreground, and to log to stderr instead of\n    its log file.\n\n  * ipdevpoll will reset its log levels from logging.conf upon receiving a\n    SIGHUP signal.\n\n  * ipdevpoll will log the currently active polling jobs upon receiving a\n    SIGUSR1 signal.\n\n\nVersion 3.10.4\n(released 08 Mar 2012)\n\n Bugfixes:\n\n  * LP#947080 (Netbox attributes aren't updated when modules are found)\n\nVersion 3.10.3\n(released 01 Mar 2012)\n\n Bugfixes:\n\n  * LP#906849 (Status page does not show current IP devices down)\n  * LP#936926 (mcc registers sensors RRD files in wrong directory)\n  * LP#937622 (a device's supported snmp version is never updated)\n  * LP#937677 (type, device and various other attributes aren't updated)\n\nVersion 3.10.2\n(released 09 Feb 2012)\n\n Bugfixes:\n\n  * LP#258298 (Service alerts aren't closed on service deletion)\n  * LP#392022 (Incorrect IPv4 net address prefix link in Subnet matrix)\n  * LP#744930 (vlan report for closed vlans is empty)\n  * LP#744933 (IP range searches in radius accounting tool ignores timestamp)\n  * LP#912210 (pping crashes when its PID is >= 32768)\n  * LP#912219 (Network explorer incomplete domain names)\n  * LP#920882 (moduleDown alerts reference affected module only as \"$module\")\n  * LP#920886 (Status page doesn't show modules down)\n  * LP#922566 (SQL syntax errors from getBoksMacs on PostgreSQL 9.1)\n  * LP#922586 (Cisco 1900 switches cause getBoksMacs SNMP walks to go into\n               infinite loops)\n  * LP#922616 (report system behaves badly if accessed without a trailing slash\n               in url)\n  * LP#923641 (Fan outage on HP devices never reported)\n  * LP#925928 (HP Virtual Connect Ethernet modules report crazy MAC addresses,\n               making getBoksMacs spew SQL errors)\n  * LP#925956 (link from organization report to prefix report crashes report\n               page)\n  * LP#928754 (Installing database on PostgreSQL 9 fails)\n\n\nVersion 3.10.1\n(released 05 Jan 2012)\n\n Bugfixes:\n\n  * LP#903096 (Ampersand in organization id crashes ipdevinfo)\n  * LP#904605 (netboxinfo subcat column links to a failing page)\n  * LP#906763 (SyntaxError in powersupplywatch.py on Python < 2.6)\n  * LP#906845 (Status on front page shows device on maintenance as down)\n  * LP#906850 (Alert Profiles NoReverseMatch error under Django 1.3)\n  * LP#907193 (COMMIT/ROLLBACK error after deleting device (Django 1.3))\n  * LP#907204 (seeddb crashes while adding an already existing switch)\n  * LP#907741 (NAV 3.10 pping inaccurately reports multitudes of devices as down\n               when pinging self)\n  * LP#907772 (navtopology crashes with TypeError)\n  * LP#910849 (ipdevpoll wastes time and I/O bandwidth with unnecessary SQL\n               UPDATEs)\n  * LP#910855 (navtopology doesn't avoid multiple instances)\n  * LP#911684 (radius accounting log crashes when searching)\n  * LP#911786 (servicemon stops sending events)\n\n\nVersion 3.10.0\n(released 16 Dec 2011)\n\n User-visible features and improvements:\n\n  * VLAN subtopology detection has been rewritten to Python. The old\n    networkDiscovery Java program is now deprecated.\n\n  * Alerts when SNMP agents stop responding.\n\n  * Alerts on power failure SNMP traps from UPS units. UPS-MIB (RFC 1628) and\n    proprietary MIBs from Eaton Corporation, APC and MGE are supported.\n\n  * Configurable port link status monitoring and alerting in ipdevpoll,\n    independent of SNMP trap configuration.\n\n  * Alerts on redundant power supply and fan failures on Cisco and HP devices.\n\n  * Statistics from all environment sensors (such as temperature, humidity,\n    light, sound, etc.) detectable through either ENTITY-SENSOR-MIB (RFC\n    3433), CISCO-ENVMON-MIB or IT-WATCHDOGS-MIB (IT Watchdogs WeatherGoose)\n    are now collected via Cricket.\n\n  * pping can now ping IPv6 hosts.\n\n  * ipdevinfo and Machine Tracker now perform bulk DNS lookups in parallel,\n    improving page load times when DNS is slow.\n\n Bugfixes:\n\n  * LP#744940 (geomap should default to a sensible start map)\n  * LP#894727 (No server software versions since NAV 3.5)\n\n\nVersion 3.9.4\n(released 16 Dec 2011)\n\n Bugfixes:\n\n  * LP#898992 (ipdevinfo displays all ports as blocking whereas stpblock report\n               confirms that they're not)\n  * LP#900723 (No SW version on Cisco 4506E L3 switch)\n  * LP#900779 (smsd crashes when discarding non-dispatchable messages with non-\n               ASCII chars)\n  * LP#901623 (mcc does not update maximum threshold value for interfaces)\n  * LP#903128 (servicemon/pping opens a new connection on any database error)\n  * LP#903681 (room report should include position)\n  * LP#904178 (smsd removes permanently failed dispatchers even when it should\n               ignore permanent failures)\n\nVersion 3.9.3\n(released 01 Dec 2011)\n\n Improvements:\n\n  * Using the `-d` option with cleanrrds.py will now also remove references to\n    stale availability and response time RRD files from NAV's database.  This\n    should help against the \"Availability: N/A\" issue seen by some in\n    ipdevinfo, whereas bugfixes to pping should prevent it from creating new\n    entries while leaving stale ones in the future.\n\n Bugfixes:\n\n  * LP#586334 (HTTPS service checker doesn't work with Python 2.6)\n  * LP#744958 (ranked stats config file should default to mbit/s)\n  * LP#888056 (MacWatch GUI crashes if the input of the MAC address is invalid)\n  * LP#891542 (Add option to make smsd ignore \"permanent\" dispatch errors)\n  * LP#891568 (logengine cron mail complains: global name 'ENOENT' is not\n               defined)\n  * LP#893591 (pping crashes when rrd files already exist)\n  * LP#897175 (ipdevpoll stops polling a device whose type is yet unregistered)\n  * LP#897194 (NameError when adding IP device in SeedDB)\n  * LP#898128 (Trying to seed - when going to USAGE crash)\n\n\nVersion 3.9.2\n(released 17 Nov 2011)\n\n Bugfixes:\n\n  * LP#300708 (Improve the link up/down trap plugin to include description)\n  * LP#338696 (Postgresql service checker is actually a port checker)\n  * LP#787957 (No trunk information on H3C switches)\n  * LP#802408 (Lowercase cricket rrd file not found when sysname has uppercase\n               letters)\n  * LP#854696 (Adding a new filter or new filter group in Alert Profiles fails)\n  * LP#858055 (Creating a new maintenance task with ÆØÅ in description fails)\n  * LP#862208 (No cricket stats for directories \"routers\" and \"switches\" in\n               cricket)\n  * LP#865292 (HTTP service checker ignores query string)\n  * LP#890190 (linkstate trap handler does not work)\n  * LP#890607 (Set supervisor SW version as chassis SW version on Cisco devices)\n  * LP#891090 (pping creates multiple RRD files for same data, causing ipdevinfo\n               to display availability as N/A)\n\n\nVersion 3.9.1\n(released 12 Aug 2011)\n\n Bugfixes:\n\n  These two bugs were actually fixed in 3.9.0, but were omitted\n  from the changelog:\n\n  * LP#737102 (Trying to add a prefix that already exists yields an\n               error, but an entry (without the prefix) is added to\n               vlan-table)\n  * LP#771677 (the delete button on seeddb/prefix is missing)\n\n\n  * LP#643469 (Status history link URL is ridiculously long)\n  * LP#643472 (Device history search results lack context)\n  * LP#643544 (Partial fix for: Flexibility when entering ip address in\n               machine tracker)\n  * LP#726545 (SeedDB should verify SNMP write community)\n  * LP#751302 (Change the name for prefix matrix to \"Subnet matrix\")\n  * LP#754602 (seeddb: improve Move Selected)\n  * LP#790178 (pping can crash if clock is adjusted backwards)\n  * LP#804869 (Interface-URL in 'machinetracker' yields 404)\n  * LP#817201 (network discovery vlan index fault)\n\n\nVersion 3.9.0\n(released 01 Jul 2011)\n\n User-visible features and improvements:\n\n  * WeatherGoose snmptrapd plugin now also supports WeatherGoose II traps.\n  * Added portname information to port listings in Arnold.\n\n Bugfixes:\n\n  * LP#736905 (Changing a vendor id creates a new vendor instead)\n  * LP#749376 (Seed DB: Bulk import for room should require location and allow\n               position)\n  * LP#787986 (No information collected for devices of unknown type)\n  * LP#789005 (Config option for portadmin to turn off authorization)\n  * LP#790600 (ARP records aren't closed when router goes down)\n  * LP#791146 (oidprofiler job fails under TwistedSNMP)\n  * LP#791150 (ipdevpoll doesn't work with pynetsnmp installed on Debian Lenny)\n  * LP#791222 (ipdevpoll fails under pynetsnmp 0.28.8 / Debian Lenny)\n  * LP#794511 (navtopology crashes with error \"can't adapt\")\n  * LP#797143 (unrecognizedCDP report links to removed ipinfo app)\n  * LP#797576 (web login crashes on first-time login for LDAP user)\n  * LP#798146 (Lots of data aren't collected when using TwistedSNMP)\n\n\nVersion 3.9.0b1\n(released 20 May 2011)\n\n User-visible features and improvements:\n\n  * NAV's threshold monitoring feature has finally been completed - Threshold\n    Manager is a new web tool that allows adjusting threshold values for\n    individual statistical data sources.  Alerts generated by the threshold\n    monitor can be subscribed to in users' alert profiles.\n\n  * MAC Watch is a new web tool that maintains a watch list of MAC addresses.\n    Whenever a watched MAC address appears on your network, NAV will send an\n    alert that can be subscribed to.\n\n  * ipdevpoll can now retrieve VLAN configuration from Extreme Networks\n    devices.\n\n  * ipdevpoll can now optionally use the pynetsnmp library as an alternative\n    to the TwistedSNMP/PySNMP combination.  pynetsnmp is a ctypes binding to\n    the well-known NetSNMP library, and should noticeably improve performance\n    if used.\n\n  * Layer 2 topology discovery has been rewritten from scratch, due to both\n    problems with the results of the old discovery code and problems with\n    maintaining the old code.\n\n Bugfixes:\n\n  * LP#739718 (ifName should be derived from baseport number if not available)\n\n\nVersion 3.8.6\n(released 20 May 2011)\n\n Bugfixes:\n\n  * LP#777821 (ipdevpoll crash on IPv4 addresses in IP-MIB::ipAddressTable)\n  * LP#778422 (No router addresses collected on a Cisco Nexus 7000)\n  * LP#782161 (Only IPv6 client addresses collected on some routers)\n\nVersion 3.8.5\n(released 14 April 2011)\n\n Bugfixes:\n\n  * LP#745616 (edit vlan in seeddb needs improvement)\n  * LP#745620 (change text descriptions in seeddb)\n  * LP#746381 (Add a report to display all collected interfaces, regardless of\n               type)\n  * LP#747104 (Missing interfaces are left lingering in the database)\n  * LP#748852 (Avoid using the word \"handler\" in SeedDB/Service)\n  * LP#749502 (Seed DB: Indicate required fields with an asterisk)\n  * LP#751310 (Not possible to add a function when adding a new ip device)\n\nVersion 3.8.4\n(released 31 March 2011)\n\n Bugfixes:\n\n  * LP#415376 (Log more info about cause of blacklisting alertengine plugins)\n  * LP#723362 (Edit IP Device - feature request for delete button)\n  * LP#726545 (SeedDB should verify SNMP write community)\n  * LP#735513 (seeddb room main view missing position column)\n  * LP#735514 (Configuring VLAN on a Cisco switch gives SNMP error)\n  * LP#735516 (parentheses shouldn't be required for geo coordinates in SeedDB)\n  * LP#735519 (Modulecount link from type report fails)\n  * LP#735935 (Missing columns and wrong column titles in SeedDB's IP Device\n               list)\n  * LP#735958 (Arnold crashes when deleting a quarantine vlan)\n  * LP#736899 (PortAdmin cannot find VLANs on Cisco switches if vendor id has\n               changed to anything but lowercase 'cisco')\n  * LP#738609 (Intermittent EOFError in web pages)\n  * LP#740017 (crash when attempting to create alert profile from template)\n  * LP#740849 (inventory job keeps going on after device removal from seeddb)\n  * LP#741573 (t1000.py KeyError crash when following up detentions)\n  * LP#744839 (Login page crash when LDAP manager_password contains % chars)\n\n\nVersion 3.8.3\n(released 15 March 2011)\n\n Bugfixes:\n\n  * LP#730524 (ipdevpoll oidprofiler says all OIDs are a match)\n  * LP#731252 (ipdevpoll leaks memory on database exceptions)\n  * LP#731318 (radius accounting page crashes when user has non-ASCII  chars in\n               username)\n  * LP#733115 (pping crashes when re-creating RRD files)\n  * LP#733152 (inventory job fails on IntegrityError on internal module swap)\n  * LP#735365 (Cannot add top-level organizations)\n\n\nVersion 3.8.2\n(released 3 March 2011)\n\n - This maintenance release fixes compatibility with newer versions of Django\n   and Cheetah.\n\n - Changelog for 3.8.1 forgot to mention the addition of a new \"offline\n   devices\" report.  The report lists serial numbers of devices known to NAV,\n   but now appear to have been shelved.\n\n - NOTE: Users on upgraded installations should update their status\n   preferences.  A missing setting in the default preferences assigned to all\n   new users would cause the status system to not display devices on\n   maintenance in the \"maintenance\" section unless they were actually down or\n   in shadow (as described in LP#723688).\n\n   After the upgrade, go to `Status` -> `Preferences` -> `IP Devices on\n   Maintenance` and add `Up` to the list of states to display.  This choice\n   was previously not enabled.\n\n Bugfixes:\n\n  * LP#591602 (Endtime in maintenance period overwritten by a shorter\n               maintenance period)\n  * LP#720669 (can't add components to maintenance task when existing\n               components have been deleted)\n  * LP#721270 (CSRF Verification Fails on Django 1.2)\n  * LP#721273 (Multiple NAV pages crash on non-ASCII chars under Cheetah 2.4)\n  * LP#723619 (Maintenance crashes when adding multiple netboxes to a task)\n  * LP#723688 (Status doesn't show devices on maintenance)\n  * LP#724266 (MachineTracker inactive search says all IPs are inactive)\n  * LP#724322 (netbox.uptodate is not altered when saving in seeddb)\n  * LP#726402 (Rooms should be listed alphabetically when editing IP devices)\n  * LP#726472 (portadmin should report error when snmp write is not available)\n  * LP#726524 (prefix net type classification may be wrong on first discovery)\n  * LP#728336 (`nav version` cannot find version information in NAV 3.8)\n\n\nVersion 3.8.1\n(released 17 February 2011)\n\n Bugfixes:\n\n  * Various problems with the 3.8 build/install system, discovered during\n    Debian packaging.\n\n  * LP#618555 (alert addresses are not validated by alert profiles ui)\n  * LP#646708 (ipdevpoll fails to shutdown)\n  * LP#667771 (LDAP fallback to local password authentication regression)\n  * LP#715801 (Wrong gwcount in prefix report)\n  * LP#715807 (Prefix net types are wrongly classified when single router has\n               multiple addresses)\n  * LP#715851 (Missing config files during 3.8.0 install)\n  * LP#717144 (problem adding position cords on room)\n  * LP#719232 (AlertEngine crash error: filter() argument after ** must be a\n               dictionary)\n  * LP#720024 (logengine crashes when message contains : characters)\n\n\nVersion 3.8.0\n(released 3 February 2011)\n\n User-visible features and improvements:\n\n  * The database schema can now be kept updated automatically using the new\n    `syncdb.py` program. Please see the `NOTES` file, and run the program as\n    soon as you've upgraded.\n\n  * NAV can now configure descriptions and access VLANs on your switch ports\n    when an SNMP write community is set for a switch.  This functionality is\n    accessible through the IP Device Info tool.\n\n  * SeedDB has been rewritten to use the Django framework (and has\n    subsequently been reduced from nearly 5000 lines of spaghetti code to just\n    below 2000 maintainable lines).\n\n  * The number of concurrent ipdevpoll jobs can now be limited on a per-job\n    basis, to ease the load on your system if so desired. See the annotated\n    `ipdevpoll.conf` file.\n\n Bugfixes:\n\n  * LP#643550 (Include ipdevinfo links in switch search in machine tracker)\n  * LP#545029 (SmbChecker runs out of available file descriptors)\n\n\nVersion 3.7.4\n(released 27 January 2011)\n\n Bugfixes:\n\n  * LP#645892 (report: csv export does not export full report)\n              This wasn't properly fixed in 3.6.0.\n  * LP#702796 (Syntax error in HttpChecker.py)\n\nVersion 3.7.3\n(released 13 January 2011)\n\n Bugfixes:\n\n  * LP#537220 (logengine ignores seconds from timestamps)\n  * LP#562242 (Prefix matrix crashes when viewing IPv6 scope)\n  * LP#689629 (ipdevinfo crashes on IP addresses on VLANs that have no VLAN ID)\n  * LP#691571 (old serial no association should be cleared when ip device is\n               replaced with new hardware)\n  * LP#692580 (delete location crashes)\n  * LP#692997 (Machine tracker crashes due to limitations in allowed interface\n               names)\n  * LP#701451 (snmptrapd fails to decode certain SNMPv1 traps)\n  * LP#701453 (snmptrapd fails to parse SNMPv2 traps from WeatherGoose)\n  * LP#702257 (alertengine crashes after alert profile is deleted)\n\n Improvements:\n\n  * if loglevels are set to DEBUG, ipdevpoll will now log full details of\n    stackframes when unhandled errors occur.\n\nVersion 3.7.2\n(released 23 December 2010)\n\n Bugfixes:\n\n  * LP#586334 (HTTPS service checker doesn't work with Python 2.6)\n  * LP#649761 (ipdevinfo does not show router port IPs/prefixes)\n  * LP#649767 (ipdevpoll should be able to exclude prefixes via configuration)\n  * LP#692959 (ipdevpoll doesn't delete extinct router addresses)\n\n\nVersion 3.7.1\n(released 07 December 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release fixes bugs in the NAV database schema. If you are  ##\n## upgrading from a previous release you also need to upgrade your ##\n## schema. For information on how to do this, please take a look   ##\n## in doc/sql/upgrades/README .                                    ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * LP#674433 (ipdevpoll: local variable 'obj_model' referenced before\n               assignment)\n  * LP#674466 (Room coordinates can't be edited in NAV 3.7.0)\n  * LP#675532 (ipdevinfo crash on Nortel interfaces)\n  * LP#675543 (ipdevinfo crash: could not identify an ordering operator for\n               type point)\n  * LP#678436 (SeedDB crashes on unknown IntegrityErrors during delete)\n  * LP#686435 (Queued alerts prevent IP devices from being deleted)\n\n  * The installation documentation had grown stale and has now been revised.\n\n\nVersion 3.7.0\n(released 11 November 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Features:\n  * Geomap is a new tool that displays a network traffic map geographically,\n    using OpenStreetMap data.\n  * LDAP authentication now also works for Active Directory.\n  * The user administration tool allows administrators to act as other users in\n    the web interface, useful for troubleshooting alert profiles or privilege\n    issues.\n  * ipdevpoll now enables the psyco JIT-optimizing compiler if available.\n  * New \"Direct neighborship candidates\" report, useful for debugging issues\n    with topology detection.\n\n Bugfixes:\n  * LP#671385 (ipdevpoll - DataError: invalid byte sequence for encoding\n               \"UTF8\": 0x89)\n  * LP#672444 (SeedDB crash when updating IP device whose serial has changed to\n               a duplicate)\n  * LP#666195 (Arnold error on port quarantine)\n\n\nVersion 3.6.3\n(released 04 November 2010)\n\n This release fixes a regression introduced by version 3.6.2.\n\n Bugfixes:\n\n  * LP#670947 (logengine crashes and spams admin once every minute)\n\nVersion 3.6.2\n(released 04 November 2010)\n\n Bugfixes:\n\n  * LP#609105 (Alertengine mailbombs error with insufficient info)\n  * LP#638745 (logengine: TypeError: int argument required)\n  * LP#666761 (ipdevpoll integrity error on serial number conflicts)\n  * LP#667182 (MachineTracker details link leads to 404 Page Not Found)\n  * LP#670817 (SeedDB crash when editing services)\n  * LP#670832 (dump.py crashes when attempting to dump obsolete product table)\n  * LP#670833 (dump.py produces invalid prefix dump)\n\nVersion 3.6.1\n(released 25 October 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Features:\n\n  * ipdevpoll does not unnecessarily use database transactions any more.\n\n Bugfixes:\n\n  * LP#656870 (report cells that were previously empty now say \"None\")\n  * LP#658251 (3.6.0 mcc character encoding)\n  * LP#659012 (ipdevpoll errors on non UTF-8 or ASCII in user-configured values)\n  * LP#659196 (ipdevpoll IntegrityError: null value in column \"ifindex\"\n               violates not-null constraint)\n  * LP#659760 (mcc creates invalid config for interfaces with spaces in name)\n  * LP#659786 (smsd gammudispatcher UnicodeDecodeError)\n  * LP#660975 (ipdevpoll removes sysname when reverse lookup contains no PTR\n               records)\n  * LP#660992 (AlertEngine crashes with message: 'NoneType' object has no\n               attribute 'end_time')\n  * LP#660993 (smsd crashes on SIGHUP)\n  * LP#661008 (Alert Profiles: Cannot add filter expressions that match text)\n  * LP#661028 (Arnold crashes with 'ValueError: invalid literal' when blocking\n               a mac address)\n\nVersion 3.6.0\n(released 07 October 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Features:\n\n  * ipdevpoll performance gains.\n  * more debug logging options for ipdevpoll time statistics and job status.\n  * improved ipdevpoll handling of renumbered ifindexes.\n  * more graceful handling of DNS errors in ipdevpoll dnsname plugin.\n\n Bugfixes:\n\n  * LP#633126 (netmap shows wrong topology for switches)\n  * LP#643340 (Schedule maintenance doesnt pick up boxname)\n  * LP#643474 (Location context lost when refining device history search)\n  * LP#644142 (Maintenance crash when adding location or room components)\n  * LP#644985 (Netmap doesn't link properly to IP Device Info)\n  * LP#645892 (report: csv export does not export full report)\n  * LP#646602 (ipdevpoll fails on Python 2.4)\n  * LP#646607 (Fatal UnboundLocalError in snmptrapd under Python 2.4)\n  * LP#648658 (AttributeError at /status/ - nav-3.6.0b6)\n  * LP#648687 (Netmap does not show link traffic in 3.6 betas)\n  * LP#649624 (eventEngine InvocationTargetException)\n  * LP#649635 (report crashes on international characters in org, location)\n  * LP#649636 (Duplicate interfaces after upgrade disrupt ipdevpoll)\n  * LP#649640 (Interfaces with migrated OSPF metrics cannot be deleted)\n  * LP#650976 (ipdevpoll : Save stage failed with unhandled AttributeError)\n  * LP#655564 (NameError at /ipdevinfo/svitsj.foo.tld/)\n  * LP#656263 (getBoksMacs is unable to find interfaces corresponding\n               to CDP data)\n\nVersion 3.6.0b6\n(released 23 September 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * LP#590765 (Accounting log in radius-module crashes when clicking on\n               details-link)\n  * LP#627352 (mcc.py crashes with NameError)\n  * LP#627358 (ipdevpoll crashes with TypeError on Python 2.4)\n  * LP#628012 (ipdevpoll crashes with SyntaxError on Python 2.4)\n  * LP#628023 (ipdevpoll crashes with TypeError during exception handling\n               under Python 2.4)\n  * LP#628058 (invalid link to netbox report from vendor report ipcount column)\n  * LP#632289 (All modules listed as \"None\" in ipdevinfo)\n  * LP#633974 (ipdevpoll IntegrityError when using uppercase in\n               NTNU-convention router port descriptions)\n  * LP#634944 (Maximum recursion depth exceeded in ipdevpoll)\n  * LP#634951 (ipdevpoll exception logging masks unhandled exceptions' origin)\n  * LP#634958 (ipdevpoll: object of type 'NoneType' has no len())\n  * LP#639604 (ranked statistics ignores 64-bit traffic counters)\n  * LP#641315 (portname search from report overview page fails)\n  * LP#643381 (Changing user's name resets password)\n  * LP#643467 (Color legend for switch port activity always says \"30 days\")\n  * LP#644161 (Network Explorer search requests fail with\n               AttributeError/FieldError)\n  * LP#644219 (Netmap UnicodeDecodeError)\n  * LP#644339 (Router port count in report to high)\n  * LP#644340 (invalid link from report swport (Module-link))\n  * LP#644342 (Failing search forms in report front page)\n  * LP#645144 (Status page ERROR: operator does not exist: integer = text)\n\nVersion 3.6.0b5\n(released 26 August 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Features:\n\n  * ipdevpoll:\n    - properly handle IP device type changes.\n    - improved vlan/prefix handling.\n    - no longer idles forever inside database transactions.\n\n Bugfixes:\n\n  * LP#562242 (Prefix matrix crashes when viewing IPv6 scope)\n  * LP#595796 (csv export does not work)\n  * LP#596863 (remove deprecated database table fields)\n  * LP#601001 (prefix report from IP address scope breaks)\n  * LP#603585 (Link to machine tracker from ipdevinfo missing)\n  * LP#623826 (extract_cricket_oids crashes on parsing cricket-conf.pl)\n\n  * Checkboxes in seeddb interface would never be checked as they should be on\n    page loads.\n  * After having introduced continuous integration into our workflow, many\n    small problems have been detected and fixed.\n\n\nVersion 3.6.0b4\n(released 08 July 2010)\n\n Features:\n  * The SMS daemon will now increase the delay between retries when SMS\n    dispatch fails.  This should decrease the amount of spam from smsd when\n    there are transient GSM failures.\n  * ipdevpoll will now naively report module outages.\n  * On timeouts and failures, ipdevpoll will reschedule jobs within 60 seconds.\n\n Bugfixes:\n\n  * LP#537166 (Community indexing used for non-Cisco devices)\n  * LP#589046 (ranked statistics displays no message when no results were\n               found)\n  * LP#595797 (link incident count in avail report to incidents)\n  * LP#596852 (extract_cricket_oids.py uses the first result for \"gConfigRoot\"\n               even if it's a comment)\n  * LP#597569 (servicemon continues to monitor services removed from SeedDB)\n  * LP#598104 (non-django web systems missing account context objects in\n               templates)\n  * LP#598111 (login page doesn't do utf-8)\n  * LP#598362 (cam table not equipped for module names, getBoksMacs fails on\n               insert)\n  * LP#598426 (arnold presents active as 9999-12-31 23:59:59)\n  * LP#598437 (mcc.py fails to move rrd file)\n  * LP#598508 (smsd dies because of incorrect DB API usage)\n  * LP#599260 (getBoksMacs SQL syntax error during interface update)\n  * LP#600193 (duplicate ifindexes on migrated data cause ipdevpoll job fail)\n\n\nVersion 3.6.0b3\n(released 24 June 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * LP#338655 (DNS checker doesn't report version)\n  * LP#502877 (Default Location and Organisation in install)\n  * LP#567840 (missing alertmsg.conf for cisco AP trap)\n  * LP#589033 (SQL syntax errors in Arnold)\n  * LP#591671 (snmptrapd only supports pysnmp2)\n  * LP#593555 (Setting for default smtp-server)\n  * LP#593645 (Arnold sends all e-mail to author's hard-coded address)\n  * LP#595943 (ipdevpoll IntegrityError on insert/update to vlan table)\n  * LP#595944 (ipdevpoll TypeError: unsupported operand type(s) for /:\n               'NoneType' and 'float')\n  * LP#596813 (Adding a new netbox crashes)\n  * LP#596841 (Multiple vlans returned on lookup cause ipdevpoll crash)\n  * LP#596857 (ipv6 prefixes are not collected for some Cisco devices)\n  * LP#597579 (db trigger causes deadlocks in ipdevpoll)\n  * LP#597589 (ipdevpoll does not check for interface mac address validity)\n\nVersion 3.6.0b2\n(released 10 June 2010)\n\n  * LP#567840 (missing alertmsg.conf for cisco AP trap)\n  * LP#588270 (Error: 'column \"to_intefaceid\" of relation \"swp_netbox\" does not\n               exist' in getBoksMacs)\n  * LP#588669 (Switch port statistics are lost on upgrade to NAV 3.6.0b1)\n  * LP#588676 (migrate_cricket.py says \"No such file\", with no indication of\n               what file is missing)\n  * LP#588700 (snmptrapd dies when using psycopg 2.0.7)\n  * LP#588742 (pysnmp2 and pysnmp-se conflict)\n  * LP#589087 (getBoksMacs error: column \"swportid\" does not exist)\n  * LP#589597 (ipdevpoll not installed during regular make install)\n  * LP#590747 (ipdevpoll leaks memory)\n  * LP#591244 (ipdevpoll idles in transactions)\n\nVersion 3.6.0b1.1\n(released 26 May 2010)\n\n An update to the b1 release with corrections to the database schema\n initialization and upgrade scripts, some of which were missing from the\n previous release.\n\n Bugfixes:\n\n   * LP#585535 (manage.sql script broken in 3.6.0b1)\n   * LP#585539 (DB upgrade script missing from 3.6.0b1)\n\nVersion 3.6.0b1\n(released 21 May 2010)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes substantial changes to the NAV database. If  ##\n## you are upgrading from a previous release you also need to      ##\n## upgrade your database schema. For information on how to upgrade ##\n## the database schema, please take a look in                      ##\n## doc/sql/upgrades/README . See also the release NOTES for more   ##\n## upgrade info.                                                   ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n  * Main SNMP collector rewritten from scratch, using Python.  The new design\n    specifically avoids Cisco-centric assumptions, and should improve equipment\n    support over time.\n\n  * Various improvements to the data model:\n\n    - All interfaces are now registered in the same table.  Switch ports have\n      switch port numbers, while router ports have (layer 3) IP addresses\n      attached.  Interfaces of seemingly other categories are also registered.\n\n    - Allows interfaces to relate directly to an IP device.  This also means\n      that NAV will no longer create fake modules for chassis-only devices.\n\n    - Modules are now identified by textual names, not integers.  This is to\n      support vendors that do not necessarily number modules.\n\n  * MailIn, a framework for parsing e-mail alerts from third party systems and\n    injecting events into NAV's event and alert queue.\n\n  * Enhanced report tool flexibility.  Reports now support any valid\n    PostgreSQL statement.\n\n  * The report tool can now export results to downloadable CSV files.\n\n  * Added a simple availability report summarizing all downtime during the last\n    month.\n\n  * Ignoring resolved alerts is now supported when queueing alerts in an alert\n    profile.\n\n  * The defunct device management tool has been replaced by a pure Device\n    history tool.\n\n  * The IP Info tool has been merged into the IP Device Info tool.\n\n  * The Machine Tracker has been rewritten using Django.\n\n  * Makecricketconfig has been rewritten in Python, and allows for more\n    flexibility in configuring Cricket for statistics collection.\n\n  * forgetSQL and psycopg1 dependencies have been removed.\n\n Bugfixes:\n\n  * LP#483524 (Arnold: Make mistaken enabling of ports less likely)\n  * LP#425700 (Arnold mac-search)\n  * LP#411817 (logengine shouldn't delete messages on every run)\n  * LP#393471 (Maintenance engine does not post on event queue)\n  * LP#333208 (Unable to rename parent organizations)\n\n\nVersion 3.5.6\n(released 07 April 2010)\n\nBugfixes:\n\n  * LP#538001 (Inconsistency in ARP records)\n  * LP#540213 (Confusing debug output in Alert Profiles)\n  * LP#451933 (getBoksMacs SQL error: \"insufficient data left in message\")\n  * LP#390577 (Wrong network sort order in prefix report)\n  * LP#550738 (createdb.sh fails to set schema search path)\n  * LP#551499 (Cricket cron job fails when using default autconf settings)\n\nVersion 3.5.5\n(released 16 February 2010)\n\nBugfixes:\n\n  * LP#383854 (Netmap RRD-values does not look for high speed data)\n  * LP#390606 (Radius-GUI menu-tabs doesn't show)\n  * LP#392475 (No such file or directory: '/etc/nav/rrdBrowser.conf')\n  * LP#395091 (cleanrrds.pl does not support timeformat from gfind)\n  * LP#395185 (Adding new components to a existing maintenance task forces you\n               to create a new task)\n  * LP#410168 (Alert Profiles crashes on filter deletion)\n  * LP#412996 (Invalid Reports URL after login)\n  * LP#416833 (Switch port report's links to machinetracker are faulty)\n  * LP#419750 (Multiple Cheetah templates fail to compile due to wrong\n               encoding)\n  * LP#436589 (Radius link to session-details lead to wrong session)\n  * LP#450279 (UnboundLocalErrors cause smsd crash)\n  * LP#485725 (uninettmaildispatcher plugin throws python NameError on SMTP\n               server error)\n  * LP#485785 (Alertengine requires SMTP server on localhost)\n  * LP#492188 (Missing 404.html - Django error in NAV-3.5.4)\n  * LP#494036 (AlertEngine does not handle inconsistent database state)\n  * LP#515400 (Jabber dispatcher blocks due to hanging jabber-server blocking\n               alertengine)\n  * LP#520505 (Alertengine reinitialises handlers for every send)\n\nVersion 3.5.4\n(released 14 May 2009)\n\nRegressions:\n\n  * LP#376430 (Web login fails under Python >= 2.5)\n\n\nVersion 3.5.3\n(released 13 May 2009)\n\nNew feature:\n\n  * getBoksMacs (the camlogger) will attempt to retrieve the list of active\n    VLANs on a Cisco device directly, to ensure it has an updated and accurate\n    list of separate forwarding databases.  This should mostly solve the\n    problem described in the currently last question of the NAV FAQ.\n\nBugfixes:\n\n  * LP#276248 (Small css rendering bug in MachineTracker)\n  * LP#324769 (netmap: lines do not terminate on the router)\n  * LP#338638 (DC service checker doesn't work)\n  * LP#338649 (DNS service checker doesn't work)\n  * LP#338715 (RPC service checker doesn't work)\n  * LP#338725 (SMB service checker doesn't work)\n  * LP#341575 (ipdevinfo service list crashes)\n  * LP#344140 (dnsMismatch shown as Downtime in IP Device Info)\n  * LP#345783 (IP Device Availability shown as N/A, should be 100%)\n  * LP#345853 (DataIOExceptions from Netmap when using Windows)\n  * LP#347226 (AlertEngine mailbombs: AlertQueueMessage matching query does\n               not exist)\n  * LP#347776 (logengine crash on log messages with years in their timestamps)\n  * LP#348853 (AttributeError on Alert Profiles permissions page)\n  * LP#348892 (AlertEngine fails to confirm SMS privilege for non-admin users)\n  * LP#351499 (Advanced search in reports crashes in Internet Explorer)\n  * LP#352236 (\"Delete selected\" button on My SMS page, but there's nothing to\n               delete.)\n  * LP#352316 (Servicemon dies without a trace)\n  * LP#353121 (No alert information when alerttype is missing from\n               alertmsg.conf)\n  * LP#366032 (Service availability shown as N/A, should be 100%)\n\n\nVersion 3.5.2\n(released 17 March 2009)\n\n Security fixes:\n\n  * LP#340516 (XSS on login-page)\n  * LP#340542 (Possible XSS in Arnold)\n\n Bugfixes:\n\n  * LP#285349 (ranked stat should include router ports)\n  * LP#285352 (ranked stat sysuptime does not provide link to cricket)\n  * LP#319590 (Cannot delete quarantine vlans in Arnold)\n  * LP#319594 (Duplicate quarantine vlans can be registered in Arnold)\n  * LP#334789 (Arnold crash when enabling missing port)\n  * LP#341099 (Most alerts queued for daily or weekly dispatch are\n               never dispatched)\n  * LP#341561 (Servicemon crashes when service checker init fails)\n  * LP#341617 (DummyChecker crashes servicemon in NAV 3.5.1)\n  * LP#341619 (PostgreSQLChecker crashes servicemon in NAV 3.5.1)\n  * LP#341733 (Multiple simultaneous pping processes)\n\nVersion 3.5.1\n(released 09 March 2009)\n\nBugfixes:\n\n  * LP#285362 (netmap: link to ipdevinfo port view on links)\n  * LP#290192 (getBoksMacs syntax error SQLExceptions)\n  * LP#322328 (Netmap backend fails when nav session id is missing)\n  * LP#323087 (Parsing of VLAN routing interfaces is case sensitive)\n  * LP#328451 (snmptrapd idles in db transactions)\n  * LP#328544 (a hyphen in the organisation name results in an exception in\n               useradmin)\n  * LP#328959 (AlertEngine errormail storm on empty alert address)\n  * LP#330058 (TypeError in IP Device Info)\n  * LP#330062 (NullPointer and DataIOExceptions from Netmap)\n  * LP#330425 (Undocumented dependency to python-xmpp)\n  * LP#330426 (AlertEngine mailbombs admin on plugin failure)\n  * LP#330436 (AlertEngine Jabber plugin crashes on missing config)\n  * LP#330464 (Alerts sent outside of timeperiod)\n  * LP#330513 (NameErrors in t1000.py)\n  * LP#330914 (ipdevinfo crashes when room or org id contains spaces)\n  * LP#330981 (SMTP service checker effectively DOSes SMTP server)\n  * LP#335326 (Multiple simultaneous servicemon processes)\n  * LP#335412 (Missing port number results in no Cricket stats for port)\n  * LP#335462 (Status page crashes under PostgreSQL 8.3)\n  * LP#335474 (Duplicate alerts sent to same address)\n  * LP#337220 (smsd and snmptrapd don't clean up their pidfiles)\n  * LP#337694 (radiusparser crash with UnboundLocalError)\n  * LP#338254 (AlertEngine crashes when profile with queued alerts is\n               deactivated)\n\n\nVersion 3.5.0\n(released 22 January 2009)\n\n  * LP#294191 (Useradmin and Userinfo gives Page not found (404))\n  * LP#300649 (snmptrapd logs crash as normal exit)\n  * LP#300657 (snmptrapd crashes while parsing a trap)\n  * LP#302740 (autoenable in Arnold is not working)\n  * LP#303120 (Machine Tracker switch search by IP address produces\n               erroneous results)\n  * LP#308943 (Quarantine VLAN dropdown list does not appear)\n  * LP#309287 (Attempt to move or delete filter in filter group\n               crashes Alert Profiles)\n  * LP#309290 (Attempt to confirm filter expression deletion does not\n               work)\n  * LP#309703 (Freetext search in maintenance does not work with IE)\n  * LP#315380 (No SMS alerts sent in NAV 3.5.0b3)\n  * LP#316281 (snmptrapd crashes on SIGHUP signal)\n  * LP#317028 (Undocumented dependency to pyrad)\n  * LP#317413 (Missing argument to changePortStatus in arnold library)\n\nVersion 3.5.0b3\n(release 04 December 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * LP#285360 (netmap: interfaces swapped in popup view)\n  * LP#285361 (netmap: use domain_suffix for shorter names)\n  * LP#286922 (Netmap displays layer 2 links as layer 3 links)\n  * LP#291551 (Alerts queued for daily dispatch are never sent)\n  * LP#293519 (Radius accounting log search crashes on blank username\n               or iprange)\n  * LP#293531 (ipdevinfo does not redirect directly to ipdevice when\n               domain_suffix is not given)\n  * LP#293624 (AlertEngine crashes with UnboundLocalError for local\n               variable 'num_sent_alerts')\n  * LP#294075 (Alter the popup text order on ports in ipdevinfo)\n  * LP#294191 (Useradmin and Userinfo gives Page not found (404))\n  * LP#294578 (AlertEngine crashes with UnboundLocalError for local\n               variable 'queued_alerts')\n  * LP#294590 (\"connected to\" missing from GSW port details in ipdevinfo)\n  * LP#298034 (ipdevinfo crash on missing availability stats)\n  * LP#298039 (3.5 sql upgrade script does not flush old alerts from db)\n  * LP#299851 (Cannot view public filters and filter groups)\n  * LP#300449 (Make metanav and launchpad links more accessible)\n  * LP#302412 (Add link from alert queue to alerts table)\n  * LP#303967 (AlertEngine crash: global name 'TimePeriod' is not defined)\n  * LP#303969 (AlertEngine crash: AlertEngine crash: object has no\n               attribute 'timperiod_set')\n  * LP#303977 (navTemplate.py missing from NAV 3.5 betas)\n  * LP#305159 (Report advanced search form cannot be opened)\n\n\nVersion 3.5.0b2\n(released 03 November 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n  * Radius accounting module added.  Enables NAV to store accounting logs from\n    FreeRADIUS servers in the database, and search this data in the web\n    interface.\n\n  * HP SwitchStack support removed.  This functionality would cause much grief\n    for those who have non-SwitchStack devices from HP.  See release NOTES for\n    more information about migrating to this version if you monitor HP\n    devices.\n\n  * The report tool now displays the timestamp of report results.  This\n    enables the user to see whether the results are retrieved live or from the\n    report cache.  The cache is now also invalidated immediately if the report\n    configuration files are changed.\n\n Bugfixes:\n\n  * LP#273030 (getDeviceData crashes with ConcurrentModificationException)\n  * LP#276225 (Local reports crash)\n  * LP#276230 (Report name missing from automated report list)\n  * LP#276246 (Report's advanced search form cannot be closed)\n  * LP#277569 (Duplicate result rows in Machine Tracker)\n  * LP#280145 (getDeviceData and eventEngine stop working after PostgreSQL\n               disconnect)\n  * LP#283102 (ARP records are wrongly associated with scope/static/reserved\n               prefixes)\n  * LP#284939 (AlertEngine resends alerts over and over)\n  * LP#284950 (AlertEngine re-sends SMS messages indefinitely)\n  * LP#284952 (AlertEngine logs are too verbose at loglevel INFO)\n  * LP#285328 (ipdevinfo crashes with TypeError traceback)\n  * LP#285331 (Duplicate RRD file references)\n  * LP#286309 (Add new subscription should check for missing alertaddres and\n               filtergroups)\n  * LP#287434 (DEFAULT_FROM_EMAIL setting missing from nav.conf example)\n  * LP#289823 (AlertEngine idles in transactions)\n  * LP#289825 (AlertEngine eats RAM)\n\n\nVersion 3.5.0b1\n(released 07 October 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes substantial changes to the NAV database. If  ##\n## you are upgrading from a previous release you also need to      ##\n## upgrade your database schema. For information on how to upgrade ##\n## the database schema, please take a look in                      ##\n## doc/sql/upgrades/README . See also the release NOTES for more   ##\n## upgrade info.                                                   ##\n##                                                                 ##\n#####################################################################\n\n Launchpad.net has replaced SourceForge.net as NAV's project site\n provider.  All bug/feature number references from here on are\n prefixed with 'LP#'.\n\n New features and improvements:\n\n  * The four NAV databases are merged into a single database.\n\n  * IP Device Center is replaced by IP Device Info, written from\n    scratch using Django.\n\n  * Alert Profiles, user admin, user info and network explorer web\n    tools rewritten from scratch using Python/Django.\n\n  * AlertEngine har been rewritten from scratch using Python.\n\n  * Netmap replaces the old Traffic Map solution.\n\n  * Tomcat and PHP are no longer needed by NAV.\n\n  * The report tool now supports local site reports using\n    report.local.conf, while the report.conf distributed with NAV can\n    be kept untouched.\n\n  * Reports can now be configured to display column sum totals.\n\n  * All available reports can now be listed, so they'll be available\n    even if someone forgot to update the front.html configuration\n    file.\n\n  * More flexible location/room/device lookups and selects in the\n    maintenance and device management interfaces.\n\n  * LP#258331 (Warn user when port activity interval is larger than\n               the actual data set)\n  * LP#258340 (Additional information on switch ports)\n  * LP#263610 (List more info about SRVs)\n  * LP#263897 (Add a duplex mismatch report)\n  * LP#263899 (Add a spanning tree blocked ports report)\n\n Bugfixes:\n\n  * LP#262301 (Machine tracker links to ipdevinfo using wrong sysname\n               for old records)\n  * LP#258304 (Bug in color legend, browse/activity port view)\n\n\nVersion 3.4.4\n(released 29 October 2008)\n\n Bugfixes:\n\n  * LP#263931 regression (Status subsystem crashes when there are custom\n              status page preferences)\n  * LP#273030 (getDeviceData crashes with ConcurrentModificationException)\n  * LP#273866 (servicemon potentially crashes during NTP clock adjustments)\n  * LP#277569 (Duplicate result rows in Machine Tracker)\n  * LP#280145 (getDeviceData and eventEngine stop working after PostgreSQL\n               disconnect)\n  * LP#283102 (ARP records are wrongly associated with\n               scope/static/reserved prefixes)\n\n\nVersion 3.4.3\n(released 16 September 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release fixes bugs in the NAV database. If you are         ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade, see the     ##\n## release NOTES and the contents of doc/sql/upgrades for more     ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * LP#262303 (Searching an entire IPv6 subnet hangs the Machine Tracker)\n  * LP#262296 (Remove obsolete cricketoids.txt)\n  * LP#262287 (Arnold SyntaxWarning: name 'manage' is assigned to before\n               global declaration)\n  * LP#263931 (Status subsystem crashes when there are custom status page\n               preferences)\n  * LP#264226 (AttributeError: 'NoneType' object has no attribute 'save')\n  * LP#264690 (report template loads deprecated javascript which slows down\n               page loading)\n  * LP#264318 (Make NAV use PySNMPv2 on Ubuntu Hardy)\n  * LP#264731 (unrecognizedCDP report fails on PostgreSQL 8.3)\n  * LP#258271 (unwanted static option in prefix in edit db)\n  * LP#260330 (Error in 3.4.2.sql)\n  * LP#258282 (smsd only logs to stderr before forking)\n  * LP#258283 (smsd runs happily along with no configured dispatchers)\n  * LP#264274 (Status preference page reloads every 30 seconds)\n\nVersion 3.4.2\n(released 01 August 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release fixes bugs in the NAV database. If you are         ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * SF#1805509 (EditDB says: Unsupported SNMP protocol version: 0)\n  * SF#2023345 (Errors in manage.sql)\n    - This fix requires manual intervention; must run SQL script\n      doc/sql/upgrades/3.4.2.sql\n  * SF#2031154 (Report pages load unnormally slow)\n  * Various small fixes to the Netmap beta/preview.\n\nVersion 3.4.1\n(released 15  July 2008)\n\n Bugfixes:\n\n  * SF#1967784 (Cheetah 2.0.1 errors on some templates in NAV 3.4)\n  * SF#1967947 (Building NAV 3.4.0 for packaging fails on Netmap)\n  * SF#1990664 (IP Device info crashes)\n  * SF#1991654 (Many PHP errors in AlertProfiles under PHP5)\n  * SF#1992863 (Arnold presents wrong ports when detentioning)\n  * SF#2008627 (IP scope matrix crashes in NAV 3.4)\n  * SF#2014809 (UnicodeDecodeError in IP Device Info)\n  * SF#2016635 (Status page crashes under PostgreSQL 8.3)\n  * SF#2017947 (Maintenance engine crashes under PostgreSQL 8.3)\n  * SF#2018505 (Register device RMA crashes)\n  * SF#2018579 (Messages RSS feed crashes)\n\n Also includes various small updates to the Netmap preview version.\n\n\nVersion 3.4.0\n(released 16 May 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n  * IPv6 prefixes are collected.\n\n  * Router IPv6 neighboring caches are now collected and made\n    searchable in the Machine Tracker.\n\n  * IP address matrix report rewritten to also support IPv6 address\n    ranges.\n\n  * New Netmap preview included.\n\n  * New IP Device Info preview included.\n\n  * arplogger (iptrace) has been reimplemented as a getDeviceData\n    plugin.  Starting/stopping iptrace is no longer possible with the\n    nav command.\n\n  * Advanced report search form can be opened/closed without reloading\n    the entire report page (requires Javascript-enabled browser)\n\n  * More flexible configuration of LDAP authentication allows more\n    ways to organize objects in LDAP servers.  Now also allows TLS\n    encryption of LDAP connections.\n\n  * Machine tracker now links to IP Device Info for individual ports\n    found in searches.\n\n  * Specific prefixes can now be ignored by getDeviceData based on\n    configuration file setting.\n\n Bugfixes:\n\n  * SF#1680011 (User admin panel crashes with orgid > 10 chars)\n  * SF#1702800 (The IP Device Center does not properly flag disabled ports)\n    This was a regression fix.\n  * SF#1707993 (Character encoding problems in Cricket configuration)\n  * SF#1716297 (\"PSQLException: The column name prefixid not found\" in gDD)\n  * SF#1949567 (eventEngine posts duplicate alert for duplicate start event)\n  * SF#1954786 (makecricketconfig.pl does not escape descriptions)\n\n\nVersion 3.3.3\n(released 14 March 2008)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.  See also the release NOTES for upgrade info.      ##\n##                                                                 ##\n#####################################################################\n\n Bugfixes:\n\n  * SF#1897681 (Wrong traffic counters used on Juniper devices)\n  * SF#1899431 (ARP records munged on router or prefix removal)\n  * SF#1899476 (CAM records munged on netbox removal)\n\nVersion 3.3.2\n(released 10 December 2007)\n\n Bugfixes:\n\n  * SF#1831074 (\"Value %r not a number\" in IP device center)\n  * SF#1847738 (t1000 uses wrong field in database for fetching module)\n  * SF#1847772 (No switch ports in IP Device Center for some switches)\n  * SF#1847776 (Arnold blocks wrong switch ports on some HP switches)\n  * SF#1847934 (Compile error in FrontpageTemplate.tmpl using old Cheetah)\n\nVersion 3.3.1\n(released 08 November 2007)\n\n Bugfixes:\n\n  * SF#1550393 (HW/SW/FW versions flipping back and forth on devices)\n  * SF#1811548 (Wrong results in port activity view in IP Device Center)\n  * SF#1812189 (NAV says no cam table support for many switches)\n  * SF#1815618 (ERROR: relation \"arp\" does not exist in manage.sql)\n  * SF#1815756 (Service status matrix has become cluttered in NAV 3.3.0)\n  * SF#1822583 (Crazy numbers in ranked statistics)\n  * SF#1822650 (snmptrapd is unable to load any handler modules)\n  * SF#1822651 (snmptrapd loads plugins only when traps are received)\n  * SF#1822731 (snmptrapd fails with a TypeError)\n  * SF#1822760 (Browsing service details fails with PostgreSQL >= 8.2)\n  * SF#1828136 (arplogger closes all arp records from non-responsive routers)\n\nVersion 3.3.0\n(released 01 October 2007)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n  * Plugin-based SNMP trap reception daemon.  Comes ready with plugins\n    for LINKUP/LINKDOWN traps and association traps from Airespace\n    equipment (Cisco WLAN Controllers).\n\n  * Greatly improved browsing and searching of device history in\n    device management web tool.\n\n  * Redesigned web interface to make it more concise.\n\n  * Switch port numbers replaced by interface names as identifiers in\n    all parts of the interface, including the Machine Tracker.\n\n  * IP Device Center now has a tab to display router ports on modules,\n    and also has detail views for router ports.\n\n  * SF#1556369 (Support machine tracker switch searches by IP address).\n\n  * Status page automatically refreshes every 30 seconds.\n\n  * Logengine can now parse syslog files using a user defined\n    character set (whereas it would previously choke on non-ASCII\n    Latin-1 characters being inserted in the database).\n\n Bugfixes:\n\n  * SF#1733239 (SQL character encoding errors in logengine)\n  * SF#1750311 (Status subsystem crashes under mod_python 3.3.1)\n  * SF#1733356 (Alert profile filters based on subcategory do not work)\n  * SF#1660467 (Status Page crashes when box is down/on maintenance)\n  * SF#1742713 (Messages retains db connections between browser requests)\n  * SF#1739532 (l2trace crashes with traceback when searching by dns name)\n  * SF#1702676 (EditDB assumes all SNMP devices can speak SNMPv1)\n  * SF#1724688 (Missing quotes in arnold.pl)\n  * SF#1798698 (PSQLException: This statement has been closed)\n  * SF#1792351 (No traffic map load data with PostgreSQL 8.2.x)\n  * SF#1801886 (getBoksMacs throws SQLExceptions for LLDP-enabled devices)\n\n Also various other small bugfixes and improvements.\n\nVersion 3.2.2\n(released 01 May 2007)\n\n Bugfixes:\n\n  * SF#1550393 (Hardware version flipping back and forth on devices)\n  * SF#1588465 (moduleState quarantine does not work)\n  * SF#1669763 (Port numbers are wrong on CatOS switches)\n  * SF#1669975 (Cisco VLAN interfaces are not properly ignored as swports)\n  * SF#1675508 (getDeviceData produces OutOfMemoryErrors and freaks out)\n  * SF#1680004 (EditDB crashes when adding a room that already exists)\n  * SF#1681256 (t1000.pl refers to non-existant database fields)\n  * SF#1689137 (The OID tester ignores responses with empty strings)\n  * SF#1697527 (NAV daemons don't properly re-open log files on SIGHUP)\n  * SF#1699058 (The SMS daemon dies on temporary dispatcher failures)\n  * SF#1699068 (smsd/gammu doesn't see that SMS was successfully sent)\n  * SF#1702800 (The IP Device Center does not properly flag disabled ports)\n  * SF#1677074 (Router temperature over 300M degrees Celsius in Cricket)\n  * SF#1702860 (EditDB crashes when attempting to add a service)\n  * SF#1661395 (SMSD's BoostDispatcher crashes)\n  * SF#1704164 (Confusing label \"Last seen on switch\" in IP info center)\n\n Also various other small improvements.\n\nVersion 3.2.1\n(released 16 February 2007)\n\n Bugfixes:\n\n  * SF#1661327 (Makecricketconfig uses 64-bit counters where not supported)\n  * SF#1660516 (eventEngine does not work in NAV 3.2.0)\n  * SF#1649947 (My SMS crashes if user has no sms alert address)\n  * SF#1661381 (SMSD's database queue fails with SQL syntax error)\n\nVersion 3.2.0\n(released 02 February 2007)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n  * New messages and maintenance web tools, rewritten from scratch, replace the\n    old messages system. The maintenance tool features a calendar for ease of\n    use.\n\n  * SMS Daemon rewritten in Python, now extensible with dispatcher plugins.\n    Existing plugins for Gammu, Boost Communications (www.boostcom.no) and\n    e-mail gateways.\n\n  * New link from alert profiles enables users to see their own SMS queues.\n\n  * More information and links in the IP Device Browser. Among other things:\n    New color for 10gig ports, displays serial number, displays software\n    version and displays \"first discovered by NAV\" time.\n\n  * Full description (ifAlias) string now stored for gwports too.\n\n  * All reports have been revised.  A new report lists unrecognized CDP\n    neighbours seen by NAV.  Reports now display 1000 rows per page by default,\n    instead of 100.\n\n  * The status page now shows devices and services on maintenance.\n\n  * A new tool to show ranked statistical data collected by NAV/Cricket.\n    Useful for checking which routers/switches have the highest CPU\n    utilization, which interfaces have the most traffic, etc.\n\n  * NAV now configures Cricket to utilize 64-bit traffic counters where\n    applicable, preventing counter wrap-around problems for saturated links and\n    reducing collection frequency for gigabit interfaces from once a 1 minute\n    to once every 5 minutes.\n\n  * Room IDs can now be changed in EditDB\n\n  * The OID tester component of getDeviceData now runs faster, by not issuing\n    unnecessary indexed community snmp queries.\n\n  * New About-page in web interface.\n\n  * HTML templates restructured, much of the web interface will now validate as\n    XHTML 1.0 Transitional.\n\n  * NAV installation can now properly report its own version number.\n\n  * JVM options can now be configured individually for Java bases subsystems in\n    nav.conf.  Java subsystems can now also be configured to use an alternate\n    JVM installation using the JAVA_HOME variable in nav.conf.\n\n  * Cleaned up output from nav start/stop/status commands, to increase\n    legibility.\n\n  * Removed gDD dependency on the system's /usr/bin/host program.\n\n  * Arplogger now ignores routers that are known to be down, instead of spewing\n    SNMP query errors by e-mail.\n\n  * IP Devices can now be deleted directly from the Edit IP Device form in\n    EditDB.\n\n  * Nice, new icons for several web tools, now with SVG source files.\n\n Bugfixes:\n\n  * Many SQL errors related to missing tables in FROM clauses fixed.\n\n  * Fixed bug #1551839 (Cannot change IP address in EditDB)\n\n  * Fixed bug #1602315 (EditDB crashes when attempting to delete rooms in use)\n\n  * Fixed bug #1643321 (EditDB crashes when entering invalid IP address)\n\n  * Fixed bug which crashed EditDB when devices returned SNMP Integer values as\n    serial numbers.\n\n  * Arnold now properly blocks switch ports on HP equipment.\n\n  * Changed inefficient hash indexes which caused the logengine (syslog\n    analyzer) to run extremely slowly and PostgreSQL to run up an insane server\n    load.\n\n  * Fixed bug that occurred spuriously, causing the Prefix Matrix to believe an\n    entire network scope was a subnet on its own.\n\n  * makecricketconfig.pl would set strange umask values when writing\n    cricket-config, which would cause permission problems and possibly make\n    graphs disappear from the Cricket web interface.\n\n  * ... and various other small bugs.\n\n\nVersion 3.1.1\n(released 08 November 2006)\n\n Security fixes:\n\n * The session mechanism of the web interface contained a potential directory\n   traversal vulnerability.  A mitigating factor was that an attacker would\n   first need write access to the local file system of the NAV server.  The\n   vulnerability was discovered by Jim Gallacher, and is similar to a\n   vulnerability discovered in mod_python:\n   http://issues.apache.org/jira/browse/MODPYTHON-135\n\n Bugfixes:\n\n * getDeviceData no longer attempts to map Cisco submodules into NAV's data\n   model.  This solves several Cisco related module problems.\n\n * Any module without switch ports would erroneously be detected as down when\n   the module monitor ran single handedly.  Typically, they would stay marked\n   as down for five hours, go up for one hour, then down again for another\n   five (#1583453).\n\n * getDeviceData threads working with equipment that enabled VLANs above 1023\n   would crash, causing incomplete information to be collected from these\n   devices..  It no longer crashes, but NAV still will not properly support\n   more than 1024 vlans (#1518783)\n\n * getDeviceData should no longer generate repeated, incorrect\n   deviceHwVerChanged alerts for HP equipment (#1550393).\n\n * Fixed bug that would cause a getDeviceData collector thread to crash when a\n   device appeared not to support the ifHighSpeed OID.\n\n * A couple of getDeviceData plugins had NullPointerExceptions.\n\n * Initial Cricket/makecricketconfig setup was botched after directory\n   restructuing.  Makecricketconfig is now more flexible when locating a\n   system's cricket installation, and where its config and data are placed.\n\n * Some SQL errors in EditDB were fixed.\n\n * Fixed bugs in SNMP getnext handling in EditDB.\n\n * Fixed an EditDB hardcoded limitation of 10 characters in an IP device's\n   orgid field - the database allows up to 30 characters.\n\n * EditDB would crash when inserting devices that happened to return non-ASCII\n   serial numbers.  Non-ASCII serial numbers are now ignored.\n\n * Removed code from networkDiscovery that attempted to traverse non-routed\n   VLANs.  This code was not properly tested, and potentially caused several\n   topology related problems.\n\n * Build/install errors related to Arnold were fixed.\n\n * A bug caused by hardcoded values in Arnold prevented it from blocking ports\n   on equipment of other categories than EDGE, even if it was configured to\n   allow this.\n\n * Status page preferences no longer crashes with a Python traceback\n   (#1521695).\n\n * The Traffic Map admin buttons no longer disappear when the Traffic Map\n   applet is reloaded (#1495566).\n\n * The traffic map would never display any load data for links on interfaces\n   with spaces in their names (such as ATM interfaces on Cisco devices).\n\n * The \"black load\" syndrome of the Traffic Map has been compensated for.\n\n * The cam collector would not insert port numbers in cam records unless NAV\n   had collected proper ifName/ifDescr values for the ports in question.\n\n * The pping and servicemon processes now properly perform a double fork and\n   detach completely from the controlling terminal when daemonized.  When the\n   daemons had been started/restarted in an SSH session, this bug would\n   sometimes cause said SSH session to hang on logout.\n\n * Fixed a bug which rendered NAV's Cheetah templates incompatible with\n   Cheetah 2.\n\n * Various other small bugfixes and cosmetic changes.\n\n\nVersion 3.1.0\n(released 30 June 2006)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n New features and improvements:\n\n * Arnold, a subsystem to block users' switch ports by using NAV's\n   Machine Tracker data.\n\n * IP Information Center web tool, displays any information NAV has on\n   single IP addresses.\n\n * Extra tab on IP Device Center to illustrate switch port usage.\n\n * The IP Device Center will now display a device's software version,\n   and a timestamp of the last update made by getDeviceData.\n\n * A \"refresh\" link on the IP Device Center allows the user to trigger\n   a new collection run to refresh the device data.\n\n * l2trace web tool, enables users to trace network paths on layer\n   two.\n\n * Autodiscovery command line tool added to contrib.  This tool will\n   try to discover every managed network device within your network,\n   and add them to NAV.\n\n * All logged in users are now considered members of the new system\n   group \"Authenticated Users\".  Minimum privileges for authenticated\n   users can be granted to this group.\n\n * Password hashes stored in the account database are now salted, for\n   slightly enhanced security.\n\n * NAV now supports reading interface speeds from the ifHighSpeed OID,\n   thus supporting speeds above 4.2Gbps.\n\n * Initial db setup now suggests creating only one database user,\n   instead of the previous two.\n\n Bugfixes:\n\n * Dependency on pysnmp=3.3.5 (the unstable dev branch) has been\n   removed, please downgrade to pysnmp 2.\n\n * EditDB no longer crashes when adding devices that report duplicate\n   serial numbers.\n\n * AlertEngine would crash when concatenating several queued alerts\n   into one SMS message.\n\n * AlertEngine would, under certain circumstances, not delete a user's\n   queued alerts, resulting in constant retransmission of the same\n   queued alerts.\n\n * Some improved debug logging in AlertEngine.\n\n * DNS lookups in getDeviceData are slightly more robust.\n\n * The cam logger now runs 4 times an hour, as opposed to once every\n   hour, which was not a very good default.\n\n * Missing Traffic Map icons were added.\n\n * Machine Tracker would crash when doing DNS lookups on inactive host\n   searches (#1509944).\n\nVersion 3.0.1\n(released 28 April 2006)\n\n Security fixes:\n\n * The report interface failed to properly sanitize user input,\n   potentially allowing for SQL injections.\n\n Bugfixes:\n\n * Some modules import python profiling modules that aren't always\n   part of the standard distribution.\n\n * pping would crash if there was no route to a host.\n\n * SQL Errors in the server and trunked core switch ports reports.\n\n * Some devices would never be taken off maintenance.\n\n * The default web greeting still mentioned the word \"beta\"\n\n * The SMTP service checker didn't properly extract version\n   information from all SMTP server banners.\n\n * Registering mixed case device names as sysnames or DNS names would\n   result in dnsMismatch alerts.\n\n * dnsMismatch alert text would use the DNS name as both the sysname\n   and DNS name values, confusing the receiver as to what the actual\n   problem was.\n\n * getBoksMacs/mactrace would crash under specific, hard to reproduce\n   circumstances.\n\n * There were potential syntax errors in the NAV perl API with newer\n   Perl versions.\n\n * Some NAV processes would not gracefully close database connections\n   on exit.\n\n * Several parts of the web interface would report InterfaceErrors if\n   a database connection was temporarily dropped by the database\n   server.  Please report any further occurrences of these errors.\n\n * Newer versions of Firefox would not properly render the table\n   graphics of the web interface.\n\n * The machine tracker would not properly sanitize user input IP\n   addresses, leading to strange errors and backtraces in the web\n   interface.\n\n * The Alert Engine would did not delete processed entries from the\n   alert queue, which caused the database table to grow indefinitely.\n\n * Much of the Alert Engine's debug logs were unreadable because they\n   referred to many entities by their internal database IDs.\n\n * The type information shipped with NAV incorrectly specified that\n   Cisco 3750 and 2970 based devices did not support the cs@vlan\n   convention, thus disabling proper CAM table collection from these\n   devices.\n\n * The HTML on the NAV login page would be sent as plain text under\n   newer versions of mod_python.\n\n\nVersion 3.0.0\n(released 16 September 2005)\n\n Improvements:\n\n * Fixed a bug in maintengine which prevented it from doing it's job when the\n   database was busy/overloaded.\n\n * Fixed a bug in the integration between Alert Profiles (PHP) and the Cheetah\n   templating system (Python), which would cause the Alert Profiles web\n   interface to act up.\n\n * Character coding information added to all NAV-original Python programs.\n\n * Fixed a bug which cleared a user's password if the account editing form of\n   Useradmin was submitted without changes.\n\n * NetworkDiscovery now only checks for closed vlans on active ports.\n\n * Fixed a NullPointerException in getDeviceData.\n\n * Fixed various problems with Cisco module/submodule translation in\n   getDeviceData.\n\n * Fixed a AlertEngine/getDeviceData combination bug which caused AlertEngine\n   to log loads of long error messages on events that lacked an alerttype\n   suggestion.\n\n * New option to have AlertEngine log error messages to a separate error log.\n\n * AlertEngine now sends error alerts if an alerttype has no configured subject\n   line in alertmsg.conf.\n\n * Added report shortcut to search for strings in prefix-netident (added to the\n   front.html config file)\n\n * Added link from Report to the previously hidden feature \"service matrix\" of\n   the IP Device Center (added to the front.html config file)\n\n\nVersion 3.0_rc2\n(released 20 July 2005)\n\n Improvements:\n\n * More data for the snmpoid table, please run the new snmpoid.sql to\n   ensure your system will work after an upgrade.\n\n * The Service Monitor's RPC plugin no longer complains loudly to\n   stderr.\n\n * The Messages and Report web interfaces will no longer\n   intermittently cross-over mysteriously.\n\n * The alert message texts have been updated to contain messages for\n   all known alerts.\n\n * Overlapping time periods in an alert profile will no longer cause\n   double alerts to be sent.\n\n * Modules that are down can now actually be found and deleted in the\n   Device Management interface.\n\n * The Traffic Map system and Network Explorer can now be properly\n   configured to run without a single NAV root directory.\n\n * Alert Profiles web pages now include the correct stylesheets, so it\n   won't look as funny.\n\n * Several getDeviceData-related problems were ironed out.\n\n * The menu on Messages' maintenance list is no longer ugly.\n\n * IP devices put on maintenance will now be taken off maintenance,\n   instead of remaining on maintenance forever.\n\n * Maintenance-scheduled IP devices can now be properly deleted from\n   messages.\n\n * Next/previous page-links in reports will now work properly even\n   when using advanced search options.  Also, advanced searching on\n   database fields that contain underscores (like sw_ver) will now\n   work.\n\n * Performance improvements in the IP Device Center.\n\n\nVersion 3.0_rc1\n(released 09 June 2005)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n Improvements:\n\n * Eventengine BoxState plugin now uses a queue for boxes down in\n   order to ensure that we don't send out boxdown alerts prematurely.\n\n * The Gwport plugin of getDeviceData has been rewritten and should\n   be much more stable (less restarts of gDD necessary).\n\n * Most of the reports in the report generator have been optimized and\n   will display much more quickly than before.\n\n * Various improvements to Cricket to better cope with changes. This\n   should make vlanPlot display the network load more reliably.\n\n * Send email for boxShadow and boxSunny.\n\n * WLAN devices are correctly detected as being in shadow.\n\n * Only allow editing of prefixes where the nettype table says it's\n   editable.\n\n * Attempt to fix several instances of bad HTML markup in the report\n   generator, which would break on various browsers.\n\n * Attempt to get the module number of Cisco devices correct in more\n   cases.\n\n * Handle the case of duplicate module serials in a graceful manner.\n\n * gDD collects data every 6 hours by default, although the default\n   is only for new devices. The collection frequency can be changed by\n   setting the 'frequency' field in the netboxsnmpoid table, and the\n   default value can be changed in getDeviceData.conf.\n\n * Add option for setting the logging level for NAV subsystems in\n   nav.conf.\n\n * Try to also discover closed / private VLANs.\n\n * Support for PIDs > 65535 in pping (typical on FreeBSD).\n\n * Add a 'monitor' thread to the cam-logger which exits the process\n   if it hangs for some reason.\n\n * Using a separate database server has been tested and all NAV\n   subsystems should now support this.\n\n\nVersion 3.0_beta10\n(released 11 February 2005)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n Improvements:\n\n * gDD now makes sure to give priority to new devices when its work\n   load with old devices is high.\n * gDD now refers to IP Devices by sysname in its logs, making it\n   easier to track its actions when reading the logs.\n * gDD now correctly updates the netident of elinks.\n * gDD will now also attempt to extract software version information\n   from a device's sysDescr OID (also collects sw_ver for the device\n   itself, and not just its modules).\n * A bug that prevented the service monitor's LDAP plugin from\n   functioning from time to time was fixed.\n * Router ports that are administratively down are removed from NAVdb\n   by gDD.\n * The report generator now supports multi-line and complex SQL\n   queries.\n * The SQL queries of the netbox, gw, sw, edge and wlan reports were\n   optimized for speed.\n\n Additions:\n\n * gDD will now collect memory information from devices.\n\n\nVersion 3.0_beta9\n(released 21 January 2005)\n\n User-visible changes:\n\n * For performance reasons, the WestHawk Java SNMP library has been\n   discarded in favor of Java SNMP, which has a nice GPL license and\n   doesn't hog resources by creating lots of threads.\n * Machine tracker searches have been redone to be more like in NAV 2,\n   due to the complexity of automatic attempts at correlating CAM and\n   ARP records.1\n * Makecricketconfig should now generate correct interface\n   descriptions for router interfaces in Cricket.\n * The previously disabled Server statistics support of\n   Makecricketconfig has ben re-enabled and fixed.\n * Start/stop scripts now use \"su -\" when switching from root to\n   navcron, to reset the environment before starting processes.  This\n   may have adverse effects if root has his/her environment variables\n   set to locate NAV libraries while the navcron user doesn't.\n * The report system should now correctly count the number of gwports\n   registered for a device in NAVdb.\n * Edit database no longer throws exceptions if NAVdb contains\n   organizations without descriptions.\n * The default priorities of the web tools have been adjusted.\n * getDeviceData should no longer come out of sync with NAVdb, as it\n   no longer works on a memory cache of the NAVdb.\n * getDeviceData no longer deletes prefixes of the 'scope' type (which\n   makes the prefix matrix of the Report system work again).\n * Improvements to the module monitor of getDeviceData.\n * Load data is now available in the Traffic map.\n\nKnown bugs in this version:\n\n * getDeviceData will at times seemingly \"forget\" some IP devices and\n   stop retrieving updated information from them.  Until this has been\n   fixed, this can be worked around by restarting getDeviceData,\n   either on a regular basis, or when inconsistencies between NAVdb\n   and the real world are seen.\n\n\nVersion 3.0_beta8\n(released 08 November 2004)\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n User-visible changes:\n * Encoding info has been added to several python modules, to make\n   newer versions of Python stop complaining about PEP 0263.  But\n   there are probably more modules that need these changes.\n * Attempting to stop not running cron services using the nav command\n   will no longer yield a Python exception.\n * Alert profiles containing time periods spanning across midnight\n   will now work.\n * Interface names containing more than one forward slash now work\n   with makecricketconfig.\n * Added config file cricket-views.conf to define which views\n   makecricketconfig will create.\n * Several editdb crash bugs were fixed.\n * Default set of reports (report.conf) were bugfixed.\n * MachineTracker had a serious design flaw in its primary SQL\n   statement, which would cause arbitrary and erroneous search result.\n   The automatic combination of arp and cam data should now be more\n   accurate.\n * When there are no active messages, the annoying \"No Found\" message\n   is no longer displayed on the home page.\n * Some missing icons have been added, and new icons for some tools.\n * Some strange errors on the web were due to small differences in\n   mod_python versions used on Apache 1.3 and Apache 2, the ones that\n   have been found have been fixed.\n * Tremendous amount of fixes related to the getDeviceData collection\n   system, more accurate collection of module information and module\n   state, detection of replaced netboxes, etc.\n * Errors in getDeviceData and missing constraints in the database\n   would sometimes cause several netboxes and/or several modules to\n   refer to the same device and serial number (which is supposed to be\n   impossible).  This has been fixed.\n * Improvements to vlanPlot layout, including links to IP device\n   center and Network Explorer.  Will now also display an error\n   message when contact cannot be establishwith the vPServer, whereas\n   previously it would only present a blank screen.\n\n\nVersion 3.0_beta7\n(released 21 July 2004)\n\n Changelog for version 3 first created.  This entry contains changes\n since 3.0_beta6.\n\n#####################################################################\n##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##\n#####################################################################\n##                                                                 ##\n## This release makes changes to the NAV database. If you are      ##\n## upgrading from a previous release you also need to upgrade your ##\n## database schema. For information on how to upgrade the database ##\n## schema, please take a look in doc/sql/upgrades for more         ##\n## information.                                                    ##\n##                                                                 ##\n#####################################################################\n\n User-visible changes:\n * Several fixes to the web interface makes it compatible with Apache\n   2 and mod_python 3.  Example config for Apache 2 included in\n   doc/apache.\n * Syslog Analyzer ported/rewritten from NAV v2 (then known as navlog).\n * Subnet usage matrix ported/rewritten from NAV v2.\n * editDB can now edit cabling and patch information.\n * Improvements to the editDB interface:\n   - Fixed typos.\n   - Simplified a few procedures.\n   - Clarified cryptic field names.\n   - Red asterisks mark required form fields.\n   - Can control groupings used in vlanPlot.\n * Improvements to the messages interface.\n * References to the eMotd subsystem have been changed to messages.\n * vlanPlot applet is now displayed inside the NAV web framework\n   template.\n * The nav command will complain verbosely if it cannot import the\n   nav.startstop module.\n * Lots of \"hehe\" fixes by stain.\n * The following utilities have been added:\n   - dump.py to dump live database content into bulk import-ready text\n     files.\n   - navclean.py to delete old/expired cam- and arp records from the\n     database.\n * pg_backup.pl translated to English and rewritten to work with NAV\n   v3.  Example config included.\n * The user adminstration panel now has it's own entry in the toolbox.\n * Visibility improvements to vlanPlot and Network Explorer.\n * Some bugfixes related to getDeviceData's collection of information.\n"
  },
  {
    "path": "INSTALL",
    "content": "For detailed instructions on how to install NAV, see doc/intro/install.rst.\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY: dummy clean distclean testclean docclean doc cssclean sassbuild sasswatch setup-playwright .FORCE\n\ndummy:\n\t@echo \"'make' is no longer used for deployment. See 'doc/intro/install.rst'\"\n\nclean:\n\t-find . -name __pycache__ -print0 | xargs -0 rm -rf\n\t-find . -name \"*.pyc\" -print0 | xargs -0 rm -rf\n\t-find . -name \"*.egg-info\" -print0 | xargs -0 rm -rf\n\t-find . -name \".*.sw?\" -print0 | xargs -0 rm -rf\n\ndistclean:\n\t-rm -rf build\n\t-rm -rf dist\n\ntestclean: clean\n\t-rm core\n\t-rm *.stats\n\t-rm python/nav/web/static/js/package-lock.json\n\t-rm -rf .tox\n\ndocclean:\n\t-rm -rf doc/_build\n\ndoc: doc/reference/alerttypes.rst\n\tsphinx-build doc/ build/sphinx/html/\n\ndocwatch:\n\t@while inotifywait -e modify -e move -e create -e delete -r --exclude \\# doc/ NOTES.rst; \\\n\tdo \\\n\t  sphinx-build doc/ build/sphinx/html/ ;\\\n\tdone \\\n\ndoc/reference/alerttypes.rst: .FORCE\n\tpython3 doc/exts/alerttypes.py > $@\n\n.env: .FORCE\n\techo \"# This file was generated by 'make .env'\" > .env\n\techo \"UID=$(shell id -u)\" >> .env\n\techo \"GID=$(shell id -g)\" >> .env\n\ncssclean:\n\t-rm -rf python/nav/web/static/css\n\nsassbuild: cssclean\n\t@if [ -f package-lock.json ]; then \\\n\t\t(npm ci && npm run build:sass); \\\n\telse \\\n\t\t(npm install && npm run build:sass); \\\n\tfi\n\nsasswatch:\n\t-npm run watch:sass\n\nPLAYWRIGHT_BROWSERS ?= chromium\n\nsetup-playwright:\n\tuv run playwright install --with-deps $(PLAYWRIGHT_BROWSERS)\n\n.FORCE:\n"
  },
  {
    "path": "NOTES.rst",
    "content": "=================================================\n Network Administration Visualized release notes\n=================================================\n\nPlease report bugs at https://github.com/uninett/nav/issues/new/choose . To browse\nexisting bug reports, go to https://github.com/uninett/nav/issues .\n\nTo see an overview of upcoming release milestones and the issues they resolve,\nplease go to https://github.com/uninett/nav/milestones .\n\nUnreleased\n==========\n\nDependency changes\n------------------\n\nThese Python modules are new requirements:\n\n* :mod:`django-allauth` (``[mfa,socialaccount]``)\n\nPython modules with changed version requirements:\n\n* :mod:`Markdown` (``3.3.6`` → ``3.8.1``)\n\n\nTwo-factor and external authentication via django-allauth\n---------------------------------------------------------\n\nNAV now supports two-factor authentication (TOTP) and external login via\nOAuth2, OIDC, and SAML, using `django-allauth` as the underlying framework.\n\nSee :doc:`/howto/allauth-and-oidc` for details on configuring external identity\nproviders.\n\n\nRoom and location aliases\n-------------------------\n\nRooms and locations can now have multiple aliases (alternative names). Aliases\nare searchable throughout NAV — in the navbar, device history, maintenance\nsearch, network explorer, netmap, the REST API, and status widgets. They are\nalso included in room/location detail pages, SeedDB list views, and the bulk\nimport/export format.\n\nChanges to bulk import formats\n------------------------------\n\nThe Room and Location bulk import formats have changed. The column ``aliases``\nhas been added to both, so that the formats are now specified as::\n\n    roomid[:locationid:descr:aliases:position:attr=value:...]\n\nfor rooms and::\n\n    locationid[:parent:descr:aliases]\n\nfor locations.\n\n\nAuditlog improvements\n---------------------\n\nAuditlog entries can now be sorted and searched by actor, object, and target\ncolumns. Links to detail pages are shown when the referenced object still\nexists.\n\n\nNAV 5.17\n========\n\nCSRF protection enabled\n-----------------------\n\nThis release adds CSRF (Cross Site Request Forgery) protection to the whole NAV\nsite - i.e. POST requests to the NAV web backend will require a valid CSRF\ntoken to be included. This should not be noticable for end-users, but be beware\nof the unlikely case that some form or front-end feature stops working due to\n403 errors. As usual, issues can be reported at\nhttps://github.com/Uninett/nav/issues\n\n\nViewing DHCP stats\n------------------\n\nThis release adds support for viewing DHCP usage/utilization graphs in the\n*Prefix* and *Vlan* detail pages in the NAV web UI.\n\nSee the :doc:`DHCP stats documentation </reference/dhcpstats>` for information\nabout DHCP stats in NAV.\n\n.. warning::\n   To accomodate for this feature, changes have been made to where DHCP stats\n   are stored and read from in the Graphite/Carbon timeseries database. Some\n   manual renaming is necessary if you've configured NAV to collect DHCP stats\n   prior to this release, and if you want the stats you've collected up until\n   now to show up in the new DHCP usage/utilization graphs. See the :doc:`DHCP\n   stats migration documentation </howto/migrate-dhcpstats>` for more\n   information.\n\n.. warning::\n   To accomodate for this feature, changes have been made to the name of a Kea\n   DHCPv4 optional option in :file:`dhcpstats.conf` and its default value: The\n   option previously called *user_context_poolname_key* with default value\n   ``name`` now goes by *user_context_groupname_key* with default value\n   ``group``. When this option is unset, this means that NAV looks for\n   user-context objects in Kea DHCPv4 configurations that look like this:\n\n   .. code-block:: json\n\n     \"user-context\": {\n       \"group\": \"first-floor\"\n     }\n\n   as opposed to this:\n\n   .. code-block:: json\n\n     \"user-context\": {\n       \"name\": \"first-floor\"\n     }\n\n\nSNMPv3 context support for Cisco switches\n-----------------------------------------\n\nNAV now supports SNMPv3 contexts when collecting per-VLAN BRIDGE-MIB data from\nCisco switches. Previously, this data collection only worked with SNMP v1/v2c\nusing Cisco's *community string indexing* feature.\n\nCisco switches maintain separate BRIDGE-MIB instances for each active VLAN.\nWith SNMPv3, these are accessed using SNMP contexts (named ``vlan-1``,\n``vlan-2``, etc.) rather than modified community strings.\n\n.. important::\n\n   For this to work, your Cisco switches must be configured to allow the SNMPv3\n   user to query these VLAN contexts. This typically requires a command like::\n\n     snmp-server group YOUR-GROUP-NAME v3 auth context vlan- match prefix\n\n   Without this configuration, NAV will be unable to collect MAC address tables\n   and switching information, resulting in incomplete machine tracker data and\n   potentially missing network topology information.\n\nSee the :doc:`/reference/management-profiles` documentation for more details on\nconfiguring SNMPv3 profiles.\n\nStopped testing on Python 3.12\n------------------------------\n\nPython 3.12 has been removed from our test matrix because of issues with Python\n3.12 and race conditions that affect coverage measurements in our test suite.\nNo tests were failing, but the coverage collection process would fail almost\nevery run on GitHub, causing all our builds to be flagged as failing.\n\nThis means that, moving forward, we cannot guarantee NAV is fully compatible\nwith Python 3.12. Additionally, we normally target Debian for production\ndeployments, and Debian has had no releases that provided Python 3.12, which\nmeans we will never actually run NAV in production on 3.12 ourselves (Debian 12\nprovides Python 3.11, Debian 13 provides Python 3.13).\n\nHowever, our test matrix still includes Python 3.11 and 3.13, which means we\ncan still be reasonably sure things will work on 3.12.\n\n\nNAV 5.16\n========\n\nDependency changes\n------------------\n\nA dependency was added to this Python module:\n\n* :mod:`distro`\n\nNAV 5.15\n========\n\nDependency changes\n------------------\n\nPython modules with changed version requirements:\n\n* :mod:`napalm` (``>=5.1.0,<5.2.0``)\n\n\nShareable dashboards\n--------------------\n\nUsers can now elect to share their dashboards with other users of the same NAV\ninstallation. Instead of relying on exporting a static dashboard definition to\nJSON and having other users import this definition, users can now *subscribe*\nto other users' shared dashboards.\n\nThe active dashboard can be marked as shared by opening the dashboard\nconfiguration dialog (the cog icon on the right-hand side of the screen) and\nclick on \"Share dashboard\", followed by clicking on the \"Save sharing settings\"\nbutton.\n\nDiscovering the shared dashboards of other users is done by clicking the \"add\ndashboard\" button (the plus sign next to your dashboard list) and then clicking\non \"Find shared dashboard\". Search for a dashboard name or another user's\nname. Clicking on a shared dashboard name gives you a preview of the dashboard.\nTo keep it permanently in your list of dashboards, you must click on the\n\"Subscribe\" button.\n\nWhen viewing a dashboard, its owner is clearly named in top right corner of the\ndashboard.\n\n\nNAV 5.14\n========\n\nDependency changes\n------------------\n\nPython modules with changed version requirements:\n\n* :mod:`djangorestframework` (``>=3.14``)\n* :mod:`napalm` (``>=5.0.0,<5.1.0``)\n* :mod:`twisted` (``>=24.7``)\n\nThese Python modules are new requirements:\n\n* :mod:`django-htmx`\n\n\nIP Device Info refresh\n----------------------\n\nEach IP Device's *IP Device Info* page shows an ipdevpoll job status list in\nthe lower right corner. This NAV release finally adds the much-discussed\n**Refresh** button to these entries.\n\nThe **Refresh** button will ask the :doc:`/reference/ipdevpoll` background\nprocess to schedule the selected job for an immediate re-run. Once the refresh\nis complete, the entire page will reload to show the potentially updated\ninformation.\n\n\nIssuing API JSON Web tokens (JWT)\n---------------------------------\n\nSince version 5.11, NAV has provided simple support for authorizing access to\nthe API using JSON Web Token signed by authorized third parties.  This release\nadds two new, important features to complement this:\n\n* Signed JWTs can now include claims about read/write-level access and which\n  API endpoints it should be authorized to access\n* NAV can now issue its own JSON Web Tokens, through the *User and API\n  Administration* tool.\n\nMore information about creating the necessary keys and configuring NAV to issue\nJWTs can be found in :ref:`local-jwt-configuration`.\n\nWe expect to deprecate and remove the old opaque token system in future\nreleases, once JWT support stabilizes.\n\n\nQR code generation\n------------------\n\nThis release adds two new QR code generation features:\n\n* A new item ``QR Code`` has been added to the ``My stuff`` dropdown menu\n  present on every NAV page. Clicking this will generate and display a QR code\n  \"bookmark\" that links back to the URL you are currently viewing.\n* The *Seed Database* IP Device listing tab now has a button to generate a ZIP\n  file archive of QR codes linking back to the selected devices. This can\n  potentially be used to print a bunch of QR codes to glue to your equipment,\n  so they can be easily scanned and found in NAV while on-site.\n\n\nNew API endpoints\n-----------------\n\nTwo new API endpoints have been added:\n\n* ``/api/1/netboxentity/`` can be used to list the internal physical entities\n  that NAV has detected in your devices (chassis, modules, ports, fans, PSUs,\n  etc.), as well as their serial numbers.\n* ``/api/1/vendor/`` can be used to perform bulk OUI vendor lookups for MAC\n  addresses, based on NAV's downloaded IEEE OUI registry.\n\n\nInsecure password warnings\n--------------------------\n\nThe *User and API administration* tool account list has for several years\nincluded warnings about users with potential password problems. One of the\ntypical problems are passwords that were last changed in very old versions of\nNAV, which would use password hashing schemes that would no longer be\nconsidered secure today.\n\nThese warnings seem to be too unobtrusive for administrators to notice;\ntherefore, this NAV release will display a warning banner to all admins on all\nNAV pages that there are users with potential password problems. The individual\nusers that have these password problems will also be shown a similar banner\nabout their own account.\n\n\"Quickselect\" form in *Maintenance* and *Device history* tools has been replaced\n--------------------------------------------------------------------------------\n\nThe so-called \"quickselect\" form, used to find and select components for adding\nto maintenance tasks, or to search for device history of selected components,\nwas built using ancient Javascript technology about 18 years ago.  It had\nseveral issues and was really slow on NAV installations with many IP Devices,\nrooms or locations.\n\nThe form has been entirely replaced by a more dynamic search tool, which will\ndynamically search the NAV database for matching components as you type into\nthe search bar.\n\n\nCollecting DHCP pool statistics from KEA DHCP servers\n-----------------------------------------------------\n\nThis release adds a new program (and cronjob) to collect DHCP pool\nusage/utilization stats from a KEA DHCP server API (:program:`navdhcpstats`)\nevery five minutes and store these as time series data in NAV's associated\nGraphite server.  This program is intended to be extensible, so that\nimplementations for other APIs can be added as plugins.\n\nWe are working on graphing these statistics in the *Prefix* and *Vlan* detail\npages in the NAV web UI, and expect to include this feature in the next\nrelease.  Until then, the only documentation for this new command is in the\ncomments of its configuration file, :file:`dhcpstats.conf`.\n\n\nNAV 5.13\n========\n\nDependency changes\n------------------\n\nNAV 5.13 will run properly on Python 3.11.\n\nDependencies to these Python modules have been added:\n\n:mod:`pytz`\n\nPython modules with changed version requirements:\n\n* :mod:`Django` (``>=4.2,<4.3``)\n* :mod:`djangorestframework` (``>=3.12`` - in practice, 3.15 at the time of release)\n* :mod:`napalm` (``>=5.0.0,<5.1.0``)\n\nOUI lookup in Machine Tracker searches\n--------------------------------------\n\nThe first three octets of a MAC hardware address is considered its OUI\n(Organizationally Unique Identifier), and identifies a vendor, manufacturer or\nother organization (as assigned by the IEEE).\n\nNAV 5.11 added the :program:`navoui` program to fetch OUI assignments from IEEE\nand populate the NAV database with them.  NAV 5.13 finally utilizes this\ninformation by adding optional vendor lookups to Machine Tracker searches.\n\nA new cron job, ``navoui``, is also added, to update the list of assignments\ndaily.  You will not benefit from vendor lookups in Machine Tracker until\n:program:`navoui` has been run at least once. If you don't want to wait for the\nfirst run, you can simply run the program manually.\n\n\nNAV 5.12\n========\n\nDependency changes\n------------------\n\nThese Python modules are no longer required:\n\n* :mod:`django-crispy-forms`\n* :mod:`crispy-forms-foundation`\n* :mod:`libsass`\n\nIf you want to build NAV from source, you will now need `webpack\n<https://webpack.js.org/>` as a replacement for the now defunct :mod:`libsass`.\nWebpack is used to build many of the static resources (mostly CSS stylesheets\nfrom SASS source files) that are to be served by the NAV web GUI.\n\nDeprecation warnings\n--------------------\n.. warning:: The ``[paloaltoarp]`` section of :file:`ipdevpoll.conf`, used for\n             configuring HTTP-based ARP fetching from Palo Alto firewalls, is\n             deprecated and will be ignored in NAV 5.12 and future versions.\n             HTTP-based ARP fetching from Palo Alto\n             firewalls *must* now be configured using management profiles,\n             analogous to configuration of SNMP-based fetching.  :ref:`See below\n             for more details<5.12-new-http-rest-api-management-profile-type>`.\n\nChange ``ip2mac`` plugin order in :file:`ipdevpoll.conf`\n--------------------------------------------------------\n\nThe Palo Alto ARP plugin in ipdevpoll had a problem which caused the ARP\nrecords it collected from Palo Palo firewalls to be unduly closed by the\nregular SNMP-based ARP plugin.  This release of NAV fixes this by making the\nSNMP-based ARP plugin a \"fallback\" mechanism that doesn't touch ARP collection\nif another plugin has already collected ARP data.\n\nIn order for this fix to work, **you must change the order of the plugins** in the\n``[job_ip2mac]`` section of your :file:`ipdevpoll.conf` file, to ensure that\nthe ``paloaltoarp`` plugin is listed *before* the ``arp`` plugin.\n\n\n.. _5.12-new-http-rest-api-management-profile-type:\n\nNew way to configure fetching of Palo Alto firewall ARP cache data\n------------------------------------------------------------------\n.. NOTE:: See\n          :ref:`management profile reference documentation<http-rest-api-management-profile>`\n          for instructions on how to reconfigure your Palo Alto firewall\n          devices in NAV 5.12 to enable support for fetching of their\n          ARP information.\n\nStarting with NAV 5.12, a new ``HTTP API`` management profile type has been\nadded to NAV for configuring HTTP API specific parameters used in fetching of\nARP information from Palo Alto firewalls running PAN-OS. Currently, this\nmanagement profile type is only used to configure Palo Alto firewall devices. If\nsupport for other devices that similarly can be managed using a HTTP API is\nadded to NAV in future releases, you can expect to be able to configure API\nparameters for these devices by using management profiles as well.\n\n\nNAV 5.11\n========\n\nThis is mostly an interim release to shed old dependencies that are ultimately\nkeeping NAV from running on Python 3.11 and newer.  While there are some bug\nfixes, the main new user-facing feature in this release is the completion of\nthe lifecycle events system.\n\nDependency changes\n------------------\n\n.. IMPORTANT:: NAV 5.11 requires PostgreSQL to be at least version *13*.\n.. IMPORTANT:: NAV 5.11 no longer supports Python versions older than *3.9*.\n\nPython modules with changed version requirements:\n\n* :mod:`twisted` (``>=23.8.0<24.0``)\n* :mod:`sphinx` (``==7.4.7``)\n\nNew Python modules required:\n\n* :mod:`requests`\n* :mod:`pyjwt` (``>=2.6.0``)\n\nThese Python modules are no longer required due to support for Python versions\nolder than 3.9 being dropped:\n\n* :mod:`backports.zoneinfo`\n* :mod:`importlib_metadata`\n* :mod:`importlib_resources`\n\n\nMore lifecycle events\n---------------------\n\nNAV 5.11 adds more lifecycle events that are posted when devices disappear or\nare removed (i.e. they appear to be taken out of service and put on the shelf),\nenabling a more complete lifecycle log of individual devices:\n\n* ``deviceDeletedFan`` is posted for fan entities that disappear from IP devices.\n* ``deviceDeletedPsu`` is posted for power supply entities that disappear from IP devices.\n* ``deviceDeletedChassis`` is posted for a chassis that are forcibly deleted\n  from a stack by a NAV operator (using the status or device history tools).\n* ``deviceDeletedModule`` is posted for a module that are forcibly deleted from\n  an IP device by a NAV operator (using the status or device history tools).\n\nFeatures in the making\n----------------------\n\nThe changelog references several features that are not yet complete, that will\nbe completed in upcoming feature releases.  These include:\n\n* Replacing the existing opaque API token system with self-signed JSON Web\n  Tokens (JWTs).  NAV already supports API authentication through JWTs signed\n  by authorized third parties.\n\n* An OUI vendor database is added to NAV, in order to keep track of which MAC\n  address prefixes are assigned to which hardware vendors.  This will be\n  utilized for machine tracker searches in a future NAV release.\n\n\nNAV 5.10 (Unreleased)\n=====================\n\nDeprecation warnings\n--------------------\n\n.. warning:: The next feature release of NAV (5.11) will drop support for\n             Python versions older than 3.9.\n\nDependency changes\n------------------\n\n.. IMPORTANT:: NAV 5.10 requires PostgreSQL to be at least version *11*.\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\nDependencies to these Python modules have been added in order to support\ncommunicating with Palo Alto firewall APIs:\n\n* :mod:`PyOpenSSL` (``==23.3.0``)\n* :mod:`service-identity` (``==21.1.0``)\n\nSupport for fetching ARP cache data from Palo Alto firewalls\n------------------------------------------------------------\n\nPalo Alto firewalls do support SNMP.  They do not, however, support fetching\nARP cache data using SNMP.  A new ipdevpoll plugin, ``paloaltoarp``, has been\nadded to fetch ARP cache data using the REST API built in to these firewall\nproducts.\n\nAccess credentials for Palo Alto firewalls need to be configured in\n:file:`ipdevpoll.conf`, but a later NAV release should move to providing\nmanagement profiles also for this.\n\nPlease read more in :doc:`the ipdevpoll reference documentation\n</reference/ipdevpoll>` for configuration details.\n\nChanged names of NAV command line programs\n------------------------------------------\n\nNAV 5.9 changed the names of most of NAV's command line programs by removing\ntheir ``.py`` file name extensions.  However, the :program:`snmptrapd` program\nhad a naming conflict with Net-SNMP's trap daemon, if installed.  NAV 5.10.1\nrenames the NAV trap daemon to :program:`navtrapd`.  Please ensure your\n:file:`daemons.yml` configuration file is up to date after an upgrade.\n\n\nNAV 5.9\n=======\n\nChanged names of NAV command line programs\n------------------------------------------\nNAV has switched to a more canonical way of installing Python command line\nscripts, or \"binaries\".  This means that all NAV command line programs that\npreviously ended with a ``.py`` extension now have been stripped of that\nextension.  Any custom cron jobs or scripts you have that may reference these\nNAV commands must be updated in order to continue working.\n\nIt also means that you need to make sure your :file:`daemons.yml` configuration\nfile is up-to-date after an upgrade, as well as the NAV cronjob snippets in the\n:file:`cron.d/` configuration directory.\n\nThese commands are affected and no longer have a ``.py`` extension:\n\n* ``alertengine``\n* ``autoenable``\n* ``collect_active_ip``\n* ``emailreports``\n* ``logengine``\n* ``macwatch``\n* ``mailin``\n* ``maintengine``\n* ``netbiostracker``\n* ``pping``\n* ``radiusparser``\n* ``servicemon``\n* ``smsd``\n* ``snmptrapd``\n* ``sortedstats_cacher``\n* ``start_arnold``\n* ``t1000``\n\nWeb security\n------------\n\nWhile it is only relevant for older browsers, the HTTP header\n``X-XSS-Protection`` is set to ``1; mode=block``. It does not affect browsers\nthat do not support it after all.\n\nThere's a new section in :file:`webfront/webfront.conf`, ``[security]``. When\nrunning in production with SSL/TLS turned on, there's a new flag ``needs_tls``\nthat should also be toggled on. This'll turn on secure cookies (only sent over\nSSL/TLS). See also the new howto\n:doc:`Securing NAV in production </howto/securing-nav-in-production>`.\n\nNAV 5.8\n=======\n\nDependency changes\n------------------\n\nUpgrade your :mod:`pynetsnmp-2` library to at least version *0.1.10* to ensure\nSNMPv3 compatibility.\n\nSNMPv3\n------\n\nNAV 5.8 finally adds SNMPv3 support, although it is not yet 100%\nfeature-complete.  A new management profile type has been added specifically\nfor SNMPv3.  SNMPv3 management requires a host of configuration attributes,\nwhereas v1/v2c only requires a community string.\n\nAdditionally, if a device only has write-enabled SNMP management profiles\nattached to it, NAV will now try to use those also for read operations.  If\nyour SNMPv3 profile supports both reading and writing, you should be able to\nget by with a single profile per device.\n\n\nMissing SNMPv3 features\n~~~~~~~~~~~~~~~~~~~~~~~\n\n**SNMPv3 traps**\n\nSNMPv3 trap support is still being worked on, but no working solution is\navailable in 5.8.  See `issue #2755 for snmptrapd implementation and progress\ndetails <https://github.com/Uninett/nav/issues/2755>`.\n\n**SNMPv3 contexts**\n\nVarious vendors use the concept of \"community indexing\" to fetch multiple\nlogical instances of MIBs.  Examples include Cisco switches, where multiple\ninstances of the ``BRIDGE-MIB`` are kept, one for each active VLAN.  To access\nthe switch forwarding tables of VLAN 12 with an SNMP community of ``public``,\nthe community must be modified to ``public@12``.\n\nAnother common example is devices that allow SNMP management of individual VRF\ninstances by modifying the SNMP community.\n\nHowever, since SNMPv3 does not use community strings, it instead provides the\nconcept of \"contexts\", where the default context is typical an empty string.\n\n:program:`ipdevpoll` does not yet support using SNMPv3 contexts as a\nreplacement for community indexing, so the types of data described above may be\nmissing from some devices if switching them to SNMPv3.\n\n\nPower-over-Ethernet configuration in PortAdmin\n----------------------------------------------\n\nPortAdmin has gained supported for enabling/disabling Power-over-Ethernet on\nJuniper and Cisco switches.  The available configuration options will vary from\ndevice to device and vendor to vendor, so the available presets will simply be\npresented for selection in a dropdown menu if PoE support is detected on a\ndevice.\n\nREMOTE_USER autocreate option\n-----------------------------\n\nThe external authentication integration system (popularly named\n``REMOTE_USER``) has gained a new toggle ``autocreate`` in the\n``[remote-user]`` section of :file:`webfront/webfront.conf`.  This option is\n``False`` by default, meaning that externally authenticated users will not be\nallowed to use NAV unless they have already been pre-created in the user admin\npanel.\n\nThis changes the old behavior, in where any unknown user referenced in the\n``REMOTE_USER`` header by the web server is automatically created in NAV.  If\nyou need the old functionality, you need to set this option to ``True``.\n\n\nNAV 5.7\n=======\n\nDependency changes\n------------------\n\nWe have removed the upper version bound requirement for the :mod:`Pillow` library.\n\nDetection and alerting of Juniper chassis/system alarms\n-------------------------------------------------------\n\nJuniper devices have a concept of chassis and system alarms (e.g. a failing PSU\nmight trigger such an alert). Alarms are categorized as either *yellow* or\n*red* alarms, depending on the running hardware and operating system.\n\nJuniper provides SNMP MIBs to poll information about the current number of\nalarms of each category, but does not provide for fetching information about\nindividual active alerts.  To get details about ongoing alarms, one usually\nneeds to access the device CLI to get the current status.\n\nNAV 5.7 adds support to poll the number of *yellow* and *red* alerts from a\nJuniper device, and produces its own alerts when any of these counts are\nnon-zero.\n\nTwo new event types are introduced, which can be used for subscriptions in\nAlert Profiles:\n\n* ``juniperYellowAlarmState``\n* ``juniperRedAlarmState``\n\n\n``contains_address`` filter on ``prefix`` API endpoint\n-------------------------------------------------------\n\nThe ``prefix`` API endpoint has been updated to include a new\n``contains_address`` filter.  This can be used to filter prefixes based on\nwhether they contain specific addresses.  To search for prefixes that match\nsingle IP addresses, a host mask can be used.  E.g., to get all prefixes that\nmatch a single host ``10.0.0.42``, query for ``10.0.0.42/32``, like\n``/api/1/prefix/?contains_address=10.0.0.42%2F32``.\n\n\nEven more flexible configuration of logging\n-------------------------------------------\n\nAdvanced users will find that we have added more options for configuring NAV's\nlogging output.  The available configuration options are explored in depth\n:doc:`in our new logging howto guide </howto/setting-up-logging>`.\n\nNAV 5.6\n=======\n\nDependency changes\n------------------\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\nDependencies to these Python modules have been added:\n\n* :mod:`backports.zoneinfo` (only necessary when running on Python versions older than 3.9)\n* Our own fork of :mod:`drf-oidc-auth`, as found at ``git+https://github.com/Uninett/drf-oidc-auth@v4.0#egg=drf-oidc-auth``\n\n\nNAV 5.5\n=======\n\nDependency changes\n------------------\n\nNone :-)\n\nAPI changes\n-----------\n\nThe ``/netbox/`` API endpoint adds a new read-only attribute:\n``mac_addresses``. This is a list of MAC addresses associated with an IP\nDevice's chassis, typically collected from either ``LLDP-MIB`` or\n``BRIDGE-MIB``. In most cases, devices will only have a single address here,\nbut sometimes, the two MIBs will disagree on what is the main \"chassis\"\naddress.\n\nThe ``/interface`` endpoint has gained two new read-only attributes for LAG\ninformation:\n\n* ``aggregator``: An interface that is part of an aggregate will have the\n  aggregate interface specified here. The aggregator will be identified by both\n  its ``id`` and ``ifname`` attributes.\n* ``bundled_interfaces``: An interface that aggregates multiple interfaces will\n  have those interfaces listed here. Each interface in the list will be\n  identified by their ``id`` and ``ifname`` attrbutes.\n\nSoftware upgrade history\n------------------------\n\nNAV has finally regained the ability to save device software, firmware and/or\nhardware upgrades as events to their history, as the new ``deviceSwUpgrade``,\n``deviceFwUpgrade`` and ``deviceHwUpgrade`` alert types have been added to the\n``deviceNotice`` event hierarchy.  These alerts can now be subscribed to in\nAlert Profiles, and will be searchable in the Device History tool.  See also\n:doc:`reference/alerttypes` for the full list of events/alerts NAV provides.\n\nJuniper ``BUILTIN`` devices\n---------------------------\n\nJuniper equipment tends to report soldered-on linecards as field-replaceable\nmodules through their implementation of ``ENTITY-MIB::entPhysicalTable``. These\nmodules are also all reported as having the same serial number: ``BUILTIN``.\n\nNAV versions prior to 5.5.1 did not safeguard against this Juniper bug. This\nwould cause NAV installations that monitor Juniper equipment to have a single\ndevice with the ``BUILTIN`` serial number, which was shared between all\nmonitored Juniper netboxes.  The attributes of ``BUILTIN`` devices (such as\nsoftware or firmware revision) would be different across most Juniper netboxes,\ncausing them to compete for updates of the attributes in the NAV database.\n\nThis went under the radar until NAV 5.5.0 re-introduced the ``device*Upgrade``\nset of alerts. Now, every time a Juniper netbox is polleed and the shared\n``BUILTIN`` device's software/hardware/firmware revision was changed, an alert\nwould be generated. For those unfortunate enough to subscribe to all NAV\nalerts, this would lead to a storm of alerts.\n\nSubsequently, NAV 5.5.1 deletes this shared ``BUILTIN`` device from the\ndatabase, and adds functionality to ignore any module or entity that reports\nthis as its serial number.\n\n\nNAV 5.4\n=======\n\nDependency changes\n------------------\n\nChanged dependencies\n~~~~~~~~~~~~~~~~~~~~\n\nThese Python modules have changed version requirements:\n\n* :mod:`sphinx` ==4.4.0\n* :mod:`pynetsnmp-2` >=0.1.8,<0.2.0\n* :mod:`napalm` ==3.4.1\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\nDependencies to these Python modules have been added:\n\n* :mod:`sphinxcontrib-programoutput` ==0.17\n\nRemoved dependencies\n~~~~~~~~~~~~~~~~~~~~\n\n* The :mod:`six` Python module is no longer required. It was only needed under\n  Python 2 to keep compatibility with both Python 2 and 3, but NAV 5.1 dropped\n  support for Python 2.\n\n\nNAV 5.3\n=======\n\nChanges in governance and code ownership\n----------------------------------------\n\nOn January 1st 2022, Uninett, NSD and Unit (all entities owned by the Norwegian\ngovernment) were merged into the new governmental agency *Sikt - Norwegian\nAgency for Shared Services in Education and Research*.\n\nThis does not change our commitment to develop and provide NAV as free and open\nsource software. We still have the same ownership and the same goals - we're\njust doing everything under a new name.\n\nIn the coming year, references to Uninett, both in the NAV documentation, code\nand related web sites will slowly change into Sikt, but for some time going\nforward, there will be references to both names.  For more information about\nthe new organization, we refer you to https://sikt.no/en/about-sikt\n\n\nDependency changes\n------------------\n\n.. IMPORTANT:: NAV 5.3 requires PostgreSQL to be at least version *9.6*.\n\nFurthermore, NAV 5.3 moves to Django 3.2, resulting in several changes in\nversion dependencies of related Python libraries. These changes are normally\ntaken care of for you when using ``pip`` and/or virtual environments with the\nsupplied :file:`requirements.txt` file:\n\n* :mod:`Django` >=3.2,<3.3\n* :mod:`django-filter` >=2\n* :mod:`django-crispy-forms` >=1.8,<1.9\n* :mod:`crispy-forms-foundation` >=0.7,<0.8\n* :mod:`djangorestframework` >=3.12,<3.13\n* :mod:`Markdown` ==3.3.6\n\nThe new Django version also removes support for Python 2, and therefore removed\nthe bundled copy of the :mod:`six` library that NAV utilized for compatibility\nwith both Python versions. Therefore, until Python 2 compatibility code has\nbeen removed entirely from NAV, NAV now depends on:\n\n* :mod:`six`\n\nTo ensure NAV runs properly on Python 3.9, these dependency changes have also\ntaken place:\n\n* :mod:`IPy` ==1.01\n* :mod:`twisted` >=20.0.0,<21\n* :mod:`networkx` ==2.6.3\n* :mod:`dnspython` <3.0.0,>=2.1.0\n\nTo ensure the NAV documentation is built correctly, Sphinx needs an upgrade as\nwell:\n\n* :mod:`Sphinx` ==3.5.4\n\nBackwards incompatible changes\n------------------------------\n\nReport configuration files have moved\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe report generator in previous versions of NAV read two single configuration\nfiles from the :file:`report/` configuration directory, in the following order:\n\n1. :file:`report.conf`\n2. :file:`report.local.conf`\n\nNAV 5.3 replaces these files with a :file:`report/report.conf.d/` style\ndirectory. Every non-hidden file that matches the ``*.conf`` glob pattern will\nbe read from this directory in alphabetical order by filename.\n\nIf you have made local changes to your :file:`report/report.conf` or\n:file:`report/report.local.conf` files, please move these configuration files\ninto the new :file:`report/report.conf.d/` directory, to ensure you can still\ngenerate your reports as expected.\n\nNAV 5.2\n=======\n\nDependency changes\n------------------\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\nFor building the NAV documentation, the Python module\n:mod:`sphinxcontrib-django` is now required (it is not required for the NAV\nruntime, though).\n\n\nChanged versions\n~~~~~~~~~~~~~~~~\n\nNAV 5.2 moved to a newer version of the Python module :mod:`feedparser`,\nbecause of Python 3 issues with the old version. The new requirement is:\n\n* :mod:`feedparser` == 6.0.8\n\nDue to recent dependency conflicts with Napalm, NAV also changed the version\nrequirement for the :mod:`dnspython` module. This is the current requirement:\n\n* :mod:`dnspython` <3.0.0,>=2.1.0\n\n\nBackwards incompatible changes\n------------------------------\n\nChanged Alert severity level definitions\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWhile a severity value was always attached to each NAV alert, and could be used\nfor matching in Alert Profiles, these values have always been poorly defined\nand underused. They were loosely understood to be in the range *0-100*, where\n*100* was the highest severity and *0* was the lowest, but more or less every\nalert ever issued by NAV was set to a severity value of 50.\n\nNAV 5.2 changes the entire severity scale and its interpretation to be a value\nin the range of **1 through 5**, where *1* is the **highest** severity and *5*\nis the **lowest**. This can be roughly interpreted as:\n\n- **5** = *Information*\n- **4** = *Low*\n- **3** = *Moderate*\n- **2** = *High*\n- **1** = *Critical*\n\nMore importantly, NAV 5.2 adds the ability for you to configure how these\nvalues are set. Read more about this in the :ref:`event engine reference\ndocumentation on severity levels <severity_levels>`.\n\nChanges for developers\n----------------------\n\nNAV 5.2 requires all Python code to be formatted using Black, and introduces\nGit pre-commit hooks to ensure all Python code is formatted using Black before\ncommits are accepted. Read all about it in :doc:`hacking/hacking`.\n\nNAV 5.1\n=======\n\nDependency changes\n------------------\n\nChanged versions\n~~~~~~~~~~~~~~~~\n\nNAV 5.1 moves to Django 2.2, resulting in several changes in version\ndependencies of related libraries:\n\n* :mod:`Django`>=2.2,<2.3\n* :mod:`django-filter`>=2\n* :mod:`django-crispy-forms`>=1.7,<1.8\n* :mod:`crispy-forms-foundation`>=0.7,<0.8\n* :mod:`djangorestframework`>=3.9,<3.10\n\nAlso, the Python library :mod:`Pillow` requirement has been moved to version\n8.0 (In reality, NAV is compatible with all versions from 3 through 8, as only\nthe thumbnail API call is used, but the latest version is recommended due to\nreported security vulnerabilities in the older versions).\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\nFor NAPALM management profiles and Juniper support in PortAdmin, a dependency\non the NAPALM_ library has been added:\n\n* :mod:`napalm` version 3.0\n\nRemoved dependencies\n~~~~~~~~~~~~~~~~~~~~\n\nNAV no longer requires the :mod:`configparser` or :mod:`py2-ipaddress` Python\nmodules. They were only needed under Python 2 to keep compatibility with both\nPython 2 and 3, but NAV 5.1 drops support for Python 2, as previously\nannounced.\n\nChanged configuration files\n---------------------------\n\nThese configuration files changed:\n\n* :file:`portadmin/portadmin.conf`: The option ``write_mem`` has been renamed\n  to ``commit``, for the sake of a a more platform and management protocol\n  agnostic view of the world.\n\n* :file:`daemons.yml`: Daemon entries now support the config option\n  ``privileged``, which defaults to ``false``. A daemon with ``privileged`` set\n  to ``true`` will be run as ``root``. Only :program:`snmptrapd` and\n  :program:`pping` will need to run using ``privileged: true``, as these\n  daemons need to create privileged communication sockets at startup (but they\n  will drop root privileges immediately after the sockets have been\n  created). **This means snmptrapd and pping will not start if you keep\n  the old version of this config file unchanged.**\n\n\nThings to be aware of\n---------------------\n\n.. note:: NAV 5.1 fixes a bug where some NAV daemons were run as root, giving\n          them an unnecessarily high privilege level (never a good\n          idea™). After upgrading, you may find some of these daemons failing\n          to start because their existing log files are only writeable by the\n          ``root`` user. You should ensure the NAV log files are all writable\n          by the user NAV runs as (``navcron``, in most cases).\n\n\n\nNew features\n------------\n\nJuniper support in PortAdmin\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPortAdmin has gained the ability to configure Juniper switches. Juniper does\nnot support configuration through SNMP writes, so the new management profile\ntype NAPALM_ has been introduced, which enables PortAdmin to use Juniper\nspecific NETCONF and RPC calls to get and set switch port configuration.\n\nPlease read the :doc:`management profiles reference docs\n</reference/management-profiles>` for more details.\n\n.. _`NAPALM`: https://napalm.readthedocs.io/en/latest/\n\n\nDevice filter options for distributed monitoring with pping and ipdevpoll\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe :program:`pping` and :program:`ipdevpoll` daemons have gained support for\ndevice filtering options. Using these options can limit the set of devices a\npping or ipdevpoll instance will work with, based on your already configured\ndevice groups.\n\nThis enables a form of distributed monitoring that wasn't previously possible:\nIf you have a group of devices that are only accesible from the inside of some\nVLAN or secure zone, you can install NAV inside this zone and configure pping\nand ipdevpoll there to only monitor the devices within that zone, while telling\nother pping/ipdevpoll instances to ignore those device groups.\n\nThis can also be used for low-level and manual horizontal scaling of NAV's\nmonitoring functions.\n\nThe new options are documented in the daemons' example config files,\n:file:`ipdevpoll.conf` and :file:`pping.conf`, respectively.\n\n\nNew type sync script\n~~~~~~~~~~~~~~~~~~~~\n\n:program:`navsynctypes` is a new command line program to dump the NAV IP device\ntype registry as a series of PostgreSQL compatible commands that will update\nthe type registry of another NAV installation. Missing types will be added,\nwhile existing types will have their names and descriptions updated to reflect\nthe names and descriptions of the source NAV installation.\n\nIts primary use may be for someone who operates multiple NAV installations to\neasily synchronize the type registry between those installations.\n\n\nNAV 5.0\n=======\n\nDependency changes\n------------------\n\n.. warning:: `Python 2 reaches its end-of-life`_ on **January 1, 2020**. NAV\n             5.0 therefore moves to Python 3, and as such, you will need at\n             least Python 3.5 to run NAV.\n\n\t     Most of NAV will still run on Python 2 as of the 5.0 release, but\n             from this point, Python 2 will be deprecated and we will start\n             removing code that exists solely to keep compatibility with\n             Python 2.\n\n.. _Python 2 reaches its end-of-life: https://www.python.org/doc/sunset-python-2/\n\n* :mod:`xmpppy` is no longer needed.\n\nUpgraded dependencies\n~~~~~~~~~~~~~~~~~~~~~\n\nThe version requirements have changed for these dependencies:\n\n* :mod:`Django` must be any version from the *1.11* series.\n* :mod:`feedparser` must be any version from the *5.2* series.\n* :mod:`networkx` must be any version from the *2.2* series.\n* :mod:`IPy` must be at least version *1.00*.\n* :mod:`pynetsnmp-2` must be version *0.1.5*.\n* :mod:`psycopg2` must be version *2.8.4*.\n\nRemoved features\n----------------\n\nThe ability to send Jabber notifications has been removed from the alert\nprofiles system, due to lack of demand and the no-longer maintained\n:mod:`xmpppy` library.\n\nBackwards incompatible changes\n------------------------------\n\nDaemon startup privileges\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBy accident, some of NAV's daemons have been running as the privileged ``root``\nuser since NAV 4.9.0, due to changes in the process control system.  NAV 5.0.4\nintroduces the ``privileged`` option in the :file:`daemons.yml` configuration\nfile, to signal which daemons actually need to be started with root privileges.\n\nOnly :program:`snmptrapd` and :program:`pping` need root privileges on startup,\nas these daemons create privileged communication sockets, but they will drop\nroot privileges immediately after these sockets are created.\n\nPlease ensure your :file:`daemon.yml` configuration file is updated. Also, be\naware that after upgrading to NAV 5.0.4 from any version from 4.9.0 and up, you\nmay have some NAV log files that are owned by ``root``, which will cause some\nof the daemons to fail on startup. Please ensure all NAV log files are writable\nfor the user defined as ``NAV_USER`` in :file:`nav.conf`.\n\n\nNew features\n------------\n\nManagement profiles\n~~~~~~~~~~~~~~~~~~~\n\nNAV 5.0 introduces the concept of **management profiles** to facilitate future\nsupport for *other management protocols than SNMP*. This means that individual\ndevices are no longer configured with read-only and read-write communities\ndirectly on their SeedDB entries. Instead, you will need to create one or more\nmanagement profiles (also in SeedDB), that you assign to each device.\n\nEach profile configures the options needed to communicate with a device using a\nspecific management protocol, such as SNMP.  If all your devices use SNMP v2c\nwith a read community of ``public``, you will only need a single profile, and\ncan assign this to all your devices (you will need another profile for\nread-write access, if applicable). Conversely, if you change the community of\nall your devices, you only need to change the single profile.\n\nWhen upgrading from previous NAV versions, all the pre-existing and distinct\nread-only and read-write communities configured on your IP devices will be\nautomatically converted into management profiles and assigned to those devices\nthat match.\n\nThe API has been updated to include an endpoint for management profiles, and\nthe ``netbox`` endpoint can be used to manipulate the set of profiles assigned\nto an IP device.\n\nSee the updated :doc:`Getting Started Guide </intro/getting-started>` for a\nsimple introduction to adding a management profile.\n\nStatus monitoring of power supplies and fans on Juniper\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPower supply and fan units on Juniper devices are now discovered and monitored\nusing the proprietary ``JUNIPER-MIB``.\n\nSupport for Alcatel DDM sensors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nDDM values collected from ALCATEL-IND1-PORT-MIB are now available as\nsensors. This includes temperature, bias current, transmit output power and\nreceive optical power values.\n\nThe implementation was contributed by Pär Stolpe of Linköping University, and\nhas been specifically tested on Alcatel Lucent Enterprise OmniSwitch AOS 8.\n\npsuwatch ipdevpoll plugin replaces powersupplywatch program\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe :program:`powersupplywatch` program (run periodically in the ``psuwatch``\ncronjob) has been replaced by the new ``psuwatch`` plugin, as part of the\n:program:`ipdevpoll` ``statuscheck`` job. Please ensure your\n:file:`ipdevpoll.conf` is properly updated.\n\nSupport for Coriant Groove devices\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNAV now supports collecting various optic measurements (as sensors) from\nCoriant Groove devices, using ``CORIANT-GROOVE-MIB``. These devices are used\nfor disaggregation of DWDM systems. These sensors are registered and polled:\n\n* Optical channels\n\n  * Frequency\n  * Power\n  * Differential group delay\n  * Chromatic dispersion\n  * S/N ratio\n  * Q-factor\n  * PreFEC bit error ratio\n\n* Client ports\n\n  * TX/RX optical power\n  * TX/RX lane optical power\n\n* ODU\n\n  * Signal delay\n\nOption to enable CDP on Cisco Voice VLAN ports\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPortAdmin can now explicitly enable/disable CDP on ports when\nconfiguring/de-configuring Cisco Voice VLANs on them, if instructed to do so by\nthe new ``cisco_voice_cdp`` option in :file:`portadmin.conf`.\n\nExternal authentication through the REMOTE_USER header\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNAV now supports external authentication by honoring the `REMOTE_USER` HTTP\nheader / environment variable. See the :doc:`reference documentation for\nexternal web authentication </reference/web_authentication>` for details.\n\nExporting a continuous stream of NAV alerts to third party software\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe :program:`Event Engine` has gained support for starting an external program\nand feeding it a continuous stream of JSON-formatted descriptions of every\nalert it generates. This can be used to aggregate alerts into third party\nsoftware. More details are available in the :doc:`Event Engine reference guide\n</reference/eventengine>`.\n\n\nNAV 4.9\n=======\n\nLicense changes\n---------------\n\nWith the 4.9 release, NAV moves from a **GPL v2-only** license to a **GPL v3**\nlicense. This is strictly to remain compatible with the free licenses of third\nparty libraries we wish to utilize in future releases (in particular, *Apache\n2.0-licensed* libraries).\n\nNAV used to have multiple copyright owners, mainly all from the higher\neducation sector of Norway. Uninett was able to negotiate the transfer of these\nrights before initiating a license switch. To avoid similar issues in the\nfuture, if the need to relicense should arise again, we have adopted a\ncontributor license agreement.\n\nContributor License Agreement\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUninett has adopted the Free Software Foundation's `Fiduciary License Agreement\n(FLA) <https://fsfe.org/activities/ftf/fla.en.html>`_ for NAV. Anyone who\ncontributes code to NAV must sign this license before the contribution can be\naccepted into NAV.\n\nOur preferred method of receiving contributions is via GitHub pull requests.\nTherefore, to reduce the overhead of the CLA signing process, we have\nimplemented an *digital CLA signing process* for GitHub pull requests, by the\nhelp of `CLA assistant <https://cla-assistant.io/>`_. When submitting your\nfirst PR against NAV, the CLA Assistant will automatically comment on the PR,\nprompting you to sign the FLA digitally using your GitHub account.\n\nWe would like to stress that Uninett is a *not-for-profit*, government-owned\nlimited company. It is our intent to continue to keep NAV free and open for the\nlifetime of the project. This is why we choose the GPL license, and this is why\nwe choose the FLA. The latter stipulates that our right to use your\ncontribution is void if we should ever attempt to relicense it to a non-open\nlicense (ie. one that isn't approved by FSF or OSI).\n\n\n\nDependency changes\n------------------\n\nThe NAV team is still working on porting the NAV code to Python 3, which\nincludes moving to more current (non-deprecated) versions of the Django\nframework.  This means you will need to upgrade various dependencies when\nmoving to NAV 4.9.\n\nUnfortunately, Django releases have a tendency to drop backwards compatibility\nwith many features, so expect future releases of NAV to move to even more\nrecent versions of Django - we expect to land on Django 1.11, which is the last\nlong-term support release of Django 1. Django 2 drops support for Python 2, as\nwill NAV.\n\nNAV 4.9.4 will require this new dependency for the IPAM subnet suggest\nfunction to work also for IPv6:\n\n* :mod:`py2-ipaddress` must be version 3.4.1\n\n\nUpgraded dependencies\n~~~~~~~~~~~~~~~~~~~~~\n\nThe version requirements have changed for these dependencies:\n\n* :mod:`django` must be any version from the *1.8* series.\n* :mod:`djangorestframework` must be any version in either the *3.5* or *3.6* series.\n* :mod:`django-filter` must be any version of the *1.0* series.\n* :mod:`django-crispy-forms` must be any version of the *1.7* series.\n* :mod:`crispy-forms-foundation` must be any version of the *0.6* series.\n* :mod:`python-ldap` must be any version of the *3.0* series.\n* :mod:`sphinx` must now be at least *1.8.0*.\n\nObsolete dependencies\n~~~~~~~~~~~~~~~~~~~~~\n\n* :mod:`django-hstore` is no longer needed, as HStore support is included in\n  newer Django versions.\n\nBuild system rewrite and source code directory layout\n-----------------------------------------------------\n\nThe entire build system has been rewritten, moving from GNU automake to regular\nPython setuptools (since NAV has been mostly Python for years now). This also\nmeans a lot of files in the source code tree have moved around to suit a more\nPython-centric way of installing things - that is, many \"data\" files have been\nmoved into suitable Python packages:\n\n`templates`\n  The global :file:`templates` directory was moved to\n  :file:`python/nav/web/templates`\n\n`sql`\n  All the SQL related scripts were moved to :file:`python/nav/models/sql`\n\n`htdocs/sass`\n  All SASS source files have moved to :file:`python/nav/web/sass`\n\n`htdocs/static`\n  All static web documents, including JavaScript sources, have\n  been moved to :file:`python/nav/web/static`.\n\nInstead of statically configuring filesystem paths and usernames into the NAV\ncode at build time, most of these variables are now configurable from config\nfiles at runtime. Building and installing NAV now entails a sequence of::\n\n  python ./setup.py build\n  python ./setup.py install\n\nSee the updated installation guides for more detailed instructions.\n\n\nBackwards incompatible changes\n------------------------------\n\nChanged command line options\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSome of the NAV programs have changed their command line interface:\n\n* :program:`alertengine.py`: The nonworking ``--loglevel`` option was removed.\n* :program:`pping.py`: The ``-n/--nofork`` option was renamed to ``-f/--foreground``.\n* :program:`servicemon.py`: The ``-n/--nofork`` option was renamed to ``-f/--foreground``.\n* :program:`smsd.py`: The ``-n/--nofork`` option was renamed to\n  ``-f/--foreground``, while the ``-f/--factor`` option was renamed to\n  ``-D/--delayfactor``.\n* :program:`snmptrapd.py`: The ``-d/--daemon`` option was changed into a\n  ``-f/--foreground``, while daemon mode was made the default.\n\n\nChanged configuration files\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThese configuration files changed:\n\n* :file:`nav.conf`: New options have been added. Some of these will be\n  *required*, as the new build system will no longer build their values into\n  the NAV binaries and libraries. All of them are present in the new example\n  config file:\n\n  ``NAV_USER``\n    **REQUIRED**: Which user to run NAV processes as.\n  ``PID_DIR``\n    **REQUIRED**: Which directory to store process PID files in.\n  ``LOG_DIR``\n    **REQUIRED**: Which directory to store log files in.\n  ``UPLOAD_DIR``\n    Where to store images uploaded through the web interface. This option has a\n    default value based on the system build parameters, but it is recommended to\n    verify its value with your system.\n* :file:`smsd.conf`: The ``loglevel`` option is no longer supported. Use\n  :file:`logging.conf` to configure log levels.\n* :file:`alertengine.conf`: The ``loglevel`` option is no longer supported. Use\n  :file:`logging.conf` to configure log levels.\n\nChanged daemon startup configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nEach of NAV's daemons had a corresponding shell script for controlling process\nstart/stop/reload in :file:`etc/init.d`, which were all invoked by the ``nav\nstart/stop`` set of commands. This has been *deprecated* in favor of a new YAML\nconfiguration file, :file:`etc/daemons.yml`.\n\nIt was a common pattern for users to modify ipdevpoll's startup options inside\n:file:`etc/init.d/ipdevpoll`, e.g. to enable :ref:`multiprocess mode\n<ipdevpoll-multiprocess>`. If you previously did so, please migrate these start\noptions to the appropriate command section of :file:`daemons.yml`.\n\n\n\nNews\n----\n\nInterface browser\n~~~~~~~~~~~~~~~~~\n\nA new tool for browsing and searching interface information across all devices\nin NAV has been added to the toolbox. Inspired by the new per-device interface\ntab in IP Device Info, this more or less supplants the existing interface\nreports in the report tool with a more dynamic tool based on NAV's already\nexisting REST API.\n\nInterfaces can be filtered by device name, port type, port names and\ndescriptions, link status or VLAN. Thec olumns of the paged search results can\nbe customized, and can include sparklines of interface traffic counters.\n\n\nSupport for DNOS-SWITCHING MIB in PortAdmin\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWith great support from Marcus Westin from the Linnaeus University who made\navailable equipment for testing, and Ludovic Vinsonnaud from Institut Optique\nGraduate School who requested and supplied documentation from Dell, there is now\nsupport for the DNOS-SWITCHING-MIB. This means that most Dell-devices now can be\nconfigured using PortAdmin.\n\nWith Dell devices you can specify three modes for an interface - General, Access\nand Trunk. NAV uses by default Q-BRIDGE-MIB to configure interfaces, but this\ndoes not work for interfaces in Access mode - which is the default mode for the\ninterfaces. Thus to properly interact with Access mode support for Dells\nDNOS-SWITCHING-MIB was implemented.\n\nPartial support for IT WatchDogs / Geist V4 generation products\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe newest environment probes from IT WatchDogs / Geist have moved to new MIB\nversions. The University of Tromsø has contributed partial support for\ndetecting sensors from these MIBs:\n\n* ``IT-WATCHDOGS-V4-MIB``\n* ``GEIST-V4-MIB``\n\n\"Partial\" here means only internal sensors are supported - external sensors are\nnot, thus far.\n\nPartial support for Powertek PDUs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe University of Tromsø has contributed partial support for collecting inlet\nsensor data from Powertek PDUs. The implemented proprietary MIB is:\n\n* ``PWTv1-MIB``\n\nSupport for HPE metered PDUs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSupport for ``CPQPOWER-MIB`` has been implemented, so that all sensor readings\nfrom HPE metered PDUs will be collected by NAV.\n\nLDAP entitlement verification\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNAV 4.9.6 adds entitlement verification as a possible filter step for\nLDAP-based logins to the web interface. The new options are documented in\n:doc:`the LDAP configuration docs </reference/ldap>`.\n\n\nNAV 4.8\n========\n\nDependency changes\n------------------\n\nThe NAV team is currently working on removing some bundled libraries and\nporting the NAV code to Python 3. Some previously bundled libraries have been\nadded to the dependency list, while others have had their required versions\nchanged.\n\n\nNew dependencies\n~~~~~~~~~~~~~~~~\n\n* :mod:`dnspython` == *1.15.0*\n* :mod:`asciitree` == *0.3.3*\n* :mod:`configparser` == *3.5.0*\n\nUpgraded dependencies\n~~~~~~~~~~~~~~~~~~~~~\n\nThe version requirements have changed for these dependencies:\n\n* :mod:`IPy` == *0.83*\n* Also, any version of :mod:`twisted` between *14.0.1* and *17.9.0* should work.\n* :mod:`pynetsnmp` has been replaced with the :mod:`pynetsnmp-2` fork, which has better support for Python 3.\n\nRemoved dependencies\n~~~~~~~~~~~~~~~~~~~~\n\n* The support for the old **PySNMP v2** and **PySNMP-SE** libraries (and\n  consequently, the pure-Python **TwistedSNMP** library) has been removed, since\n  they are outdated and do not provide the full feature set used by NAV and\n  provided by our preferred library: :mod:`pynetsnmp-2`.\n\n* There is no longer a dependency to the Python module\n  :mod:`django-oauth2-provider`, as NAV's usage of this non-maintained module\n  was severely limited.\n\n* :mod:`ipaddr` was removed. It was never a direct requirement of NAV. It only\n  mentioned in the requirements list to satisfy a missing dependency of\n  :mod:`pynetsnmp`, which has been rectified upstream, so it is still needed in\n  a complete system.\n\n\nOther changes\n-------------\n\nThe :program:`navclean.py` program changed its name to simply\n:program:`navclean`. If you were using it in any cron jobs or other scripts,\nthey will need to be updated.\n\nNews\n----\n\nDigital Optical Monitoring data\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nRetrieving data from optical transmit/receive sensors are now supported for\nCisco and Juniper devices. The values are graphed on the interface details\npage for each applicable interface.\n\nPower-over-Ethernet (PoE)\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPower-over-Ethernet data is now collected and summarized for devices that\nsupport the ``POWER-ETHERNET-MIB`` (:rfc:`3621`).\n\nPoE information is found on a separate *PoE* tab on each device's IP Device\nInfo page, where an heuristic attempts to map PoE groups to modules within the\ndevice.\n\nThere is still more work to be done on PoE-reporting, which will likely\nrequire use of proprietary MIBs (which are also required for definitive\nmapping between PoE groups and modules/interfaces, without using heuristics).\n\nTopology improvements\n~~~~~~~~~~~~~~~~~~~~~\n\nThe topology algorithm has been rewritten for improved processing of LLDP and\nCDP topology information.\n\nThe topology detector now also supports detection of unrouted VLAN topologies.\nOne *caveat* of this, though, is that VLANs are now also discovered on\nswitches, using the VLAN names configured there. If your VLAN names aren't\nconsistent between your switches and routers, you may find multiple instances\nof the same VLAN in your NAV (as the names are mapped to *netidents* in NAV,\nwhere differing netidents imply separate broadcast domains).\n\nNew port listing in IP Device info\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe old \"module-matrix\" based port layout in IP Device Info has been replaced\nwith a more dynamic table listing of all interfaces. This table can be\nsearched, sorted and filtered dynamically on many interface parameters.\n\nUsers who prefer the old layout can choose switch back to it if they want, but\nit will be removed in a later NAV version. Do not forget to give feedback to\nyou nearest friendly NAV developer :-)\n\n\nWritable APIs\n~~~~~~~~~~~~~\n\nThe API endpoints for netboxes and rooms have been write-enabled. When issuing\nAPI tokens through the Useradmin panel, you can select the access level of any\ntoken (all pre-existing tokens will be read-only until you say otherwise).\n\nCheck out the :doc:`REST API documentation </howto/using_the_api>` for more.\n\nMitigating slow IP Device deletion\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIt has been a known issue for years that a device that has been monitored by\nNAV for a long time, will take an equally long time to delete from NAV. Old\ndevices have accrued lots and lots of related data in the PostgreSQL database,\nand by not deleting old ARP and CAM logs, PostgreSQL essentially needs to\nremove the IP device relation from all the old log entries, rather than delete\nthe log entries themselves. This gets slower the more data needs to be updated.\n\nDeletion of IP Devices from SeedDB now runs as a background job (the\n``navclean`` cron job, running by default every 5 minutes). SeedDB will only\nmark a device as *\"to be deleted\"*, meaning it will still be visible in parts\nof the interface until the PostgreSQL delete transaction has completed in the\nbackground.\n\nE-Mail reports\n~~~~~~~~~~~~~~\n\nThe business reports tool now has the option to add e-mail subscriptions to\nthe available reports. Very good for people wearing neckties (or who need to\nreport to people wearing neckties on a regular basis).\n\nOther improvements\n~~~~~~~~~~~~~~~~~~\n\n* Locations now have their own details page, with a image upload function,\n  analogous to rooms.\n\n* A new widget for showing active alerts grouped by location, analogous to the\n  room alerts widgets, has been added.\n\n* The source of any ARP record will now be reported in a separate column of\n  Machine Tracker IP search results, if the *\"source\"* checkbox was checked.\n  This can be helpful if you are experience \"duplicate\" entries, such as in\n  HSRP/VRRP LANs.\n\n* Removing a trunk from PortAdmin has been made into a much simpler,\n  one-button operation.\n\n* The HTTP and HTTPS service checkers will accept 401 responses as OK if no\n  authentication credentials were given in the service checker's\n  configuration.\n\n* Neighboring nodes can now be filtered based on category from the Neighbors\n  tab of IP Device Info.\n\n\nNAV 4.7\n========\n\nDependency changes\n------------------\n\nNAV 4.7 changes the minimum version requirement for three of its dependencies:\n\n* PostgreSQL must now be at least version *9.4*.\n* :mod:`psycopg2` must now be at least version *2.4.5*.\n* :mod:`twisted` must now be at least version *14.0.1*.\n\nSupport for monitoring BGP sessions\n-----------------------------------\n\nBGP session monitoring has been added as part of :program:`ipdevpoll`'s\n``statuscheck`` job. BGP4-MIB (:rfc:`4273` is supported), as well as the draft\nversions of BGP4V2-MIB that Cisco and Juniper have implemented in their own\nenterprise trees (which means IPv6 BGP sessions are supported on Cisco and\nJuniper).\n\nPlease ensure your :file:`ipdevpoll.conf` is updated to take advantage of the\nnew functionality.\n\nA ``[bgp]`` section has been added to :file:`ipdevpoll.conf`, where the\n``alert_ibgp`` option can be used to toggle whether BGP events should be\ngenerated for iBGP sessions. Its default value is `True`, but this may not be\ndesirable in a full mesh network.\n\nThe new ``bgpState`` event includes the ``bgpDown`` and ``bgpEstablished``\nalert types, which can be subscribed to in your alert profile.\n\nThere is no bespoke UI for listing known BGP sessions in 4.7.0, but there is a\nBGP session report in the report tool.\n\n\nipdevpoll multiprocess mode rewritten\n-------------------------------------\n\nWhen monitoring a large enough network, ipdevpoll may not be able to perform\nall its work using a single process. To take advantage of modern\nmulti-processor and multi-core systems, using ipdevpoll's multiprocess mode\nmay be an advantage.\n\nThe multiprocess mode has been rewritten so that instead of starting a\ndedicated process for each job type, an arbitratry number of generic worker\nprocesses can be started, and jobs are assigned to these in a round-robin\nfashion.\n\nThe multiprocess option ``-m`` can be added to the ``OPTIONS`` variable of the\nipdevpoll startup script (:file:`etc/init.d/ipdevpoll`).\n\nSupport for more infrastructure monitoring\n------------------------------------------\n\nNAV 4.7 adds support for collecting sensor readouts from various data loggers,\npower distribution units, and cooling devices, used in the latest HPC\ninfrastructure being deployed in the Norwegian research network. Among these\nare:\n\n- `The Comet MS6D data logger`_\n- `Eaton Williams Cooling Distribution Units (CDU)`_\n- `Lenovo (IBM) power distribution units (PDU)`_\n- `Raritan power distribution units (PDU)`_\n- `Rittal power distribution units (PDU)`_\n- `Rittal liquid cooling package (in-row liquid coolers)`_\n\n.. note:: If adding Lenovo PDUs to NAV, please select *SNMP v1*, as their SNMP\n          v2c GET-BULK implementation is either broken or not implemented.\n          GET-BULK is NAV's default operation for mass retrieval operations\n          under v2c.\n\n\n.. _`The Comet MS6D data logger`: http://www.cometsystem.com/products/monitoring-systems/ms6d-data-logger/reg-MS6D\n.. _`Eaton Williams Cooling Distribution Units (CDU)`: http://eaton-williams.com/servercool/products/servercool.php\n.. _`Lenovo (IBM) power distribution units (PDU)`: http://shop.lenovo.com/us/en/systems/servers/options/systemx/rack-power-infrastructure/power/\n.. _`Raritan power distribution units (PDU)`: http://www.raritan.com/products/power-distribution\n.. _`Rittal power distribution units (PDU)`: https://www.rittal.com/com-en/product/list.action?categoryPath=/PG0001/PG0229STV1/PG7274STV1/PGR11260STV1\n.. _`Rittal liquid cooling package (in-row liquid coolers)`: http://www.rittal.com/com-en/product/list.action?categoryPath=/PG0001/PG0168KLIMA1/PGR1951KLIMA1/PG1023KLIMA1\n\nImproved user interfaces for sensor/environment monitoring\n----------------------------------------------------------\n\nDevice \"Sensors\" tab\n~~~~~~~~~~~~~~~~~~~~\n\nThe ipdevinfo tab previously known as \"*Power and fans*\" is now named\n\"*Sensors*\". The tab now includes a comprehensive listing of all the sensors\nNAV has discovered on a device, regardless of whether it is able to collect\nany data from them. Charts and thresholds are available for each one.\n\nRoom \"Sensors in Racks\" tab\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe room view now includes the new tab \"Sensors in Racks\". In this tab, you\ncan create customized groupings of environment sensors present in a single\ncommunications room.\n\nAt Uninett, this view is used to get an overview of the power load and cooling\nwater temperature on a per-rack basis in large HPC installations. PDU sensors\ncan nbe added to the left and right side of each \"rack\", and arbitrary sensors\nfrom other types of devices can be added to the center column.\n\n\nAvoiding redundant SNMP polling for virtual device contexts\n-----------------------------------------------------------\n\nA new feature enables you to use SeedDB to specify that an IP device is a\nvirtual instance of a physical \"master\" device. This can be useful if you use\nCisco VRF or VDC technologies extensively.\n\nNAV will avoid polling interface counters, system and sensor data from the\nvirtual devices, but will instead duplicate the data collected from the master\ndevice - thus avoiding overloading the physical device with redundant SNMP\nrequests.\n\nThis feature was sponsored by the University of Basel, Switzerland.\n\n\nChanges to bulk import formats\n------------------------------\n\nThe IP Device (Netbox) bulk import format has changed. Two new columns have\nbeen added, so that the format is now specified as::\n\n    roomid:ip:orgid:catid[:snmp_version:ro:rw:master:function:data:netboxgroup:...]\n\nThe new columns are:\n\nsnmp_version\n  Selecting an explicit SNMP version was made compulsory in NAV 4.6, but the\n  bulk import format was not updated in the same release, so any device added\n  through the SeedDB bulk import function would default to SNMP v2c. Valid\n  values here are 1 or 2.\n\nmaster\n  If this device is a virtual instance on another physical device, specify the\n  sysname or IP address of the master in this column. You may have to bulk\n  import multiple times if the master devices are part of the same bulk import\n  file.\n\nSupport for dashboard export/import\n-----------------------------------\n\nDashboard configurations can now be exported as JSON strings and shared with\nother NAV users. Want to copy your colleagues fancy dashboard without putting\nin all the work of setting it up manually? Now you can!\n\nAudit logging\n-------------\n\nThe beginnings of a full fledged audit logging system is included in NAV 4.7.\nAs of NAV 4.7.0, only changes made by users of PortAdmin will be audited.\nAudit logging from more parts of NAV will follow.\n\n\nNAV 4.6\n========\n\nDependency changes\n------------------\n\nNAV now requires the :mod:`markdown` Python library, to ensure proper\nrendering of documentation in the browseable API.\n\nThe :mod:`IPy` Python library is now required to be at least version *0.81*.\n\n\nIPAM (IP Address Management)\n----------------------------\n\nThis release introduces the IP Address Management tool, sponsored by the\nNorwegian University of Science and Technology (NTNU).\n\nInspired by the already existing Subnet Matrix tool (reachable from NAV's\nReport tool), IPAM was developed to assist in IP address management tasks,\nusing NAV's existing IP address prefix registry.\n\nNTNU has, like many other higher education institutions in Norway have lately,\nbeen merged with several other institutions, vastly increasing the number of\nassigned IP address blocks to manage.\n\nWhereas the Subnet Matrix can visualize a single network scope at a time, IPAM\nwas built to visualize multiple scopes interactively, and to allow for the\nvisualization of nested scopes. The tool includes search and filtering\ncapabilities, including functions to search for unallocated subnets of\nspecificed sizes and mark them as reserved (via SeedDB).\n\n\nStatic routes\n-------------\n\nAlong with the IPAM tool, comes the new opt-in ipdevpoll plugin\n`staticroutes`. This plugin re-implements the static routes plugin from\n:program:`getDeviceData` (the pre NAV 3.6 collector), providing you with the\noption of a more complete IP prefix registry.\n\nIf you wish to automatically collect statically configured routes from your\nrouters into NAV's prefix registry, you can add this plugin to you inventory\njob - or, since your static route configuration isn't likely to change very\noften, configure a separate ipdevpoll job with a much larger interval (e.g. 24\nhours).\n\nCollecting a router's entire routing table via SNMP can be taxing for some\nrouters, which is why this plugin is not enabled by default. The plugin can\nalso be configured to throttle the rate at which it sends SNMP requests to\nrouters.\n\n\nPrefix information page and usage tags\n--------------------------------------\n\nA new per-prefix information page has been added, complementing the VLAN\ninformation page.\n\nAs before, NAV will automatically collect the usage category of VLANs/subnets\nbased on the NTNU router port description convention, if this is employed.\nNow, prefixes can be tagged with additional usage categories manually, through\nthe new prefix information page.\n\nValid usage categories are, as before, editable through SeedDB\n\n\nLink aggregation support\n------------------------\n\nInformation about any type of aggregated link discoverable through the\n``IEEE8023-LAG-MIB`` (LACP) is collected and stored in NAV.\n\nA new event type, ``aggregateLinkState``, with the accompanying\n``linkDegraded`` and ``linkRestored`` alerts has been introduced. If link is\nlost on an interface known to be part of such an aggregate it will cause NAV to\ngenerate a ``linkDegraded`` alert for the aggregated interface.\n\nAggregation status of ports is also displayed in each port's details page.\n\n\nMulti- and fullscreen dashboards\n--------------------------------\n\nUsers can now have multiple named dashboards. A default dashboard can be\nselected, which will be the first dashboard loaded when browsing the NAV front\npage. Any \"add graph to dashboard\"-type button in NAV will add widgets to your\ndefault dashboard, and widgets can easily be moved between dashboards.\n\nA new \"Compact dashboard\" mode maximizes your screen real estate, by scaling\ndown the content and removing the spacing between widgets, while a new\nfullscreen mode takes your dashboard and browser into full screen mode, using\nthe browser fullscreen API.\n\nEach dashboard is individually configured using the dashboard menu to the\nright. This enables you, for instance, to have a different number of columns\nfor each dashboard.\n\n\nNew dashboard widgets\n---------------------\n\nNew dashboard widgets are introduced:\n\nAlert\n  This widget can monitor binary sensor values or arbitrary Graphite metrics\n  of a an otherwise boolean nature, to be used as an alert indicator. Uninett's\n  use-case for this is showing the status of the server room physical security\n  system on the NOC screens.\n\nPDU load\n  A very specific plugin to display the power load status of APC power\n  distribution units (these are the only PDU units currently known to be\n  supported by NAV) on a room-by-room basis. Uninett's use-case for this is\n  planning rack placements based on power consumption.\n\nUPS status\n  A graphical widget to display the inputs, outputs and status of any\n  NAV-supported UPS.\n\nRooms with active alerts\n  A version of the status widget that aggregates and summarizes alerts by\n  room.\n\n\nHierarchical locations\n----------------------\n\nHierarchies of locations can now be defined. SeedDB will now present locations\nas a tree of entries, and parent locations can be selected from a dropdown\nwhen adding a new location.\n\nSelecting a location for a maintenance task, will implicitly include its full\nsub-hierarchy of locations, as will filtering on locations in the status tool.\n\nLocation hierarchies are not yet respected by alert profiles and the Netmap.\n\nPlease note that the bulk import format for locations has changed to include the\nparent location as the second field. Both the ``parent`` and the ``description``\nfields are now optional. This makes it consistent with how organizations are\nimported.\n\nBusiness reports\n----------------\n\nA new \"Business reports\" tool was added. This tool is meant for more complex\nreports than the pure SQL tabular reports NAV already sports. Each report must\nbe implemented as Python code.\n\nCurrently, two reports are implemented: A monthly device availability report\n(with selectable months), and a monthly link availability report (with\nselectable months). Both reports are based on NAV's alert history.\n\n\nJuniper EX switch series workaround\n-----------------------------------\n\nIf you have Juniper EX switches, you may be interested in the new\n``juniperdot1q`` :program:`ipdevpoll` plugin, as a replacement for the regular\n``dot1q`` plugin.\n\nJuniper's implementation of ``Q-BRIDGE-MIB`` (the main MIB module used to\nretrieve information about 802.1Q VLAN configuration) has multiple bugs,\nseveral of which Juniper will not admit are bugs. The main issue for any NMS\nusing this MIB to get VLAN information is that parts of their implementation\nuses opaque, internal VLAN IDs instead of public VLAN tags.\n\nYou may already have seen that the VLANs NAV has discovered on your EX\nswitches seem wrong. This is due to that implementation bug. The\n``juniperdot1q`` plugin will use a Juniper proprietary MIB, if supported by\nthe device, to translate internal VLAN ids to public VLAN tags.\n\nThis functionality was implemented as a separate plugin, due to the pernicious\nnature of the Juniper bugs. If you wish to test the plugin, simple replace the\nreference to the ``dot1q`` plugin with ``juniperdot1q`` in the\n:file:`ipdevpoll.conf` section ``[job_inventory]``.\n\n\nnavuser command line\n--------------------\n\nA new command line program, :program:`navuser`, has been introduced. This\nprogram provides some simple means of manipulating NAV (web) accounts from the\ncommand line, which can be useful from a configuration management perspective.\n\n\n\nNAV 4.5\n========\n\nTo see the overview of scheduled features and reported bugs on the 4.5 series\nof NAV, please go to https://launchpad.net/nav/4.5 .\n\nDependency changes\n------------------\n\nThere are none :-)\n\nCabling and patches\n-------------------\n\nThe cabling and patch registry was introduced originally with NAV 3.0, but\nnever gained widespread usage, and had therefore fallen behind the rest of\nNAV.\n\nThe University of Linköping has graciously sponsored a reworking of the SeedDB\ncabling and patch forms, so that these are now actually usable in a NAV\ninstallation with more than a handful of switches, cables and patches.\nInformation about patch points is now also displayed on each port's ipdevinfo\npage.\n\n\nnavstats\n--------\n\nNAV 4.5 adds a simple program, `navstats`, that can be used to periodically\nextract stats from the NAV database and store those stats as Graphite metrics.\nTo configure your own stats, however, you need to know your way around SQL and\nthe NAV DB schema.\n\nFor more information, see the `navstats` reference documentation.\n\nAPI changes\n-----------\n\nAPI tokens can now be managed more flexibly via the User Admin tool. Multiple\ntokens can be issued and revoked separately. Each token has its own expiry\ntime and list of authorized API endpoints.\n\n\n\nNAV 4.4\n=======\n\nDependency changes\n------------------\n\n- The Python library :mod:`django` must now be version *1.7*.\n- The Python library :mod:`djangorestframework` must now be version *2.4*.\n- The Python Imaging Library (PIL) seems dead and appears to no longer be\n  available in the Python Package Index. We have replaced the dependency with\n  :mod:`Pillow`, which is a fork of PIL. NAV should still work with the old\n  library, though.\n\nInteractive trend graphs\n------------------------\n\nWhereas NAV 4.3 and earlier would call on graphite-web to produce graphs as\nstatic PNG images, NAV 4.4 uses the Rickshaw Javascript library to render\ngraphs from the same Graphite data.\n\nThese graphs allow for more user interaction, such as zooming and value\ninspection. The are, however, not as readily re-usable by passing around URLs.\n\n\nSlack dispatcher\n----------------\n\nNAV 4.4 adds a Slack dispatcher to the Alert Engine.\n\nTo dispatch messages to a Slack channel, you need to create a Slack channel and\nadd an Incoming Webhooks integration. More information about that can be found\nat https://api.slack.com/incoming-webhooks . You will get an URL to use for\nposting messages.\n\nThen you need to add a Slack alert address to your alert profile and use this\naddress in an alert subscription. The address is the URL you got when setting up\nthe webhooks integration.\n\nThe username, emoji user-icon and channel for the messages are defined when\nsetting up the integration, but if you for some reason want to override this you\ncan do it in alertengine.conf.\n\n\nSubnet matrix improvements\n--------------------------\n\nVarious mysterious layout bugs in the subnet matrix have been fixed, by way of\na partial rewrite. Utilization data is now retrieve asynchronously, which\nmeans that the matrix itself should load a lot faster. More details of each\nsubnet is now available in pop-up menus when clicking on them.\n\n\ncheckService.py has been renamed\n--------------------------------\n\nIf you were using `checkService.py` to test your servicemon plugins, this\ncommand has now been renamed to `navcheckservice`, and its command line\noptions have slightly changed. Run it with `--help` for more information.\n\n\n\nNAV 4.3\n=======\n\nTo see the overview of scheduled features and reported bugs on the 4.3 series\nof NAV, please go to https://launchpad.net/nav/4.3 .\n\nDependency changes\n------------------\n\nThere are none (unless you are a developer, then you should upgrade to the\nlatest version of pylint).\n\nData model changes (chassis, serial numbers, virtual devices, etc.)\n-------------------------------------------------------------------\n\nThe 4.3 release changes NAV's data model in a fundamental way. Previously, NAV\nwould equate an IP device (a Netbox) with a piece of physical hardware, a\nchassis, possibly with a retrievable serial number. This has become a rather\nantiquated view in modern computer networking, where multiple virtual\ncomponents can be built from a single hardware unit, or a virtual device can\nbe built by stacking multiple hardware units.\n\nThe old data model would require each IP Device to have a unique serial\nnumber, and also for any module in any IP Device to have a unique serial\nnumber among all modules in all IP Devices.\n\nNAV no longer has these restrictions. The hierarchy of physical entities\nwithin an IP Device are collected from the ENTITY-MIB::entPhysicalTable, if\navailable, and all stored in the NAV database. NAV would previously only use\nparts of this information.\n\nA SNMP-less IP Device will no longer have a corresponding (physical) Device\nentry, while a multi-chassis stack (like a Cisco VSS) will have all its\nchassis registered in the database.\n\nA set of Cisco VDCs defined within the same hardware unit will all present\nthemselves as physically identical to the hardware unit. Previously, this\nwould work poorly with NAV, because if its uniqueness requirement on serial\nnumbers.\n\nNext, we aim to write support for collecting this type of hardware information\nfrom Juniper devices, which, as of this writing, only support proprietary MIBs\nto provide this information.\n\nBulk import format change\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBecause of the changed data model, the serial number column in the IP Device\n(Netbox) bulk import/dump format has been removed. If you have old dump files\nthat you want to bulk import into NAV 4.3's SeedDB, you must remove the serial\nnumber field from these files first.\n\n\nThe new chassisState family of alerts\n-------------------------------------\n\nNAV 4.3 introduces the ``chassisState`` event type, with ``chassisDown`` and\n``chassisUp`` alerts. These can be subscribed to in Alert Profiles.\n\nIn a scenario where an IP Device is a stack of multiple physical chassis, NAV\nwill produce ``chassisState`` events if a previously known chassis disappears\nor reappears in the stack. A chassis that is removed from a stack on purpose\nmust be manually deleted from NAV, just as purposefully removed modules have\nalways needed to be.\n\nThe eventengine will further suppress ``moduleDown`` alerts for modules that\nreside within a chassis that has an active ``chassisDown`` alert. Previously,\na Cisco VSS that broke down would cause NAV to report a slew of ``moduleDown``\nalerts, one for each of the modules in the lost chassis.\n\n\nDeleting out of service modules and chassis\n-------------------------------------------\n\nWhen you physically remove a module to take it out of service, NAV will\nproduce a ``moduleDown`` alert. To remove the module from NAV's inventory, you\nwould previously need to go to the Device History tool and remove it from the\n\"Delete module\" tab.\n\nIn NAV 4.3, deleting modules and (now) chassis, and their corresponding alerts\nis directly available as one of the bulk actions on the status page.\n\nLink, module and chassis status verification\n--------------------------------------------\n\nAs part of the ipdevpoll ``inventory`` job, the ``modules`` and ``entity``\nplugins (which both collect inventory and performs status check against known\ninventory) only run every 6 hours. This is not often enough to provide a\ncontinuous status verification (and updated alerts).\n\nIn response to this, the 5-minute interval ipdevpoll ``linkcheck`` job has\nbeen renamed to the more generic ``statuscheck``, and the ``modules`` and\n``entity`` plugins now additionally run as part of this job.\n\n\nNAV 4.2\n========\n\nTo see the overview of scheduled features and reported bugs on the 4.2 series\nof NAV, please go to https://launchpad.net/nav/4.2 .\n\nDependency changes\n------------------\n\nThere are none :-)\n\nRename some of your Whisper files to keep your statistics\n---------------------------------------------------------\n\nThe 4.2.2 release adds commas to the list of characters escaped in Graphite\nmetric names; commas cause problems when constructing target names for\ngraphite-web, when rendering graphs and retrieving metrics. An out-of-place\ncomma will cause Graphite render requests to fail.\n\nIf your Graphite storage directory contains Whisper files with commas in\ntheir filenames (under the `nav` hierarchy), and you want to keep your data\nhistory, you will need to rename these files by replacing the commas with\nunderscores. Something like this should do the trick::\n\n    cd /opt/graphite/storage/whisper/nav\n    find -name '*,*' | xargs rename --verbose 's/,/_/g'\n\n\nMulticast listener stats from IGMP snooping\n-------------------------------------------\n\nNAV 4.2 will use HP's STATISTICS-MIB to sum up the number of known multicast\ngroup subscribers per HP switch (i.e. from each switch's IGMP snooping data).\nEach multicast group address seen is logged to Graphite under the\n`nav.multicast` hierarchy.\n\nWe wanted to support similar functionality for Cisco devices, but it seems\nsupport for Cisco's own proprietary CISCO-IGMP-SNOOPING-MIB is very poor among\nCisco switches.\n\n\nGraphite storage schema changes\n-------------------------------\n\nBe aware that the example Graphite storage schema\n:file:`etc/nav/graphite/storage-schema.conf` has added a section for multicast\nstatistics. Be sure to update your running Carbon configuration.\n\nRewritten Status tool\n---------------------\n\nThe Status tool has been rewritten from scratch.\n\nThe old Status tool hardcoded table listings for specific alert types, and not\nall alert types were supported - meaning some alerts were never actually\ndisplayed in the Status tool. This also made it very difficult to dynamically\nadd new alert types from plugins or third party software, without modifying\nthe Status tool code.\n\nThe new tool offers an in-page status filtering form, which can also be saved\nas your personal status page filter preference.\n\nAny filter configuration can also be saved as a new front-page status filter,\nmeaning you can have multiple status widgets, each with a different\nconfiguration. When modifying the default/anonymous user's front page widgets,\nthis means you can also decide which types of alerts, if any, will be\ndisplayed to unauthenticated users.\n\nAlert acknowledgement\n~~~~~~~~~~~~~~~~~~~~~\n\nWith the new Status tool comes the ability to acknowledge open alerts, with\ncomments. An acknowledged alert is not displayed under the default Status tool\nfilter configuration (but can be added by checking the \"Acknowledged\"\ncheckbox).\n\nStateless alerts\n~~~~~~~~~~~~~~~~\n\nThe Status tool normally displays stateful alerts, i.e. states that have a\nstarting time and, eventually, an ending time. The can be actual problems, or\nmore information states, such as a device being on scheduled maintenance.\n\nHowever, NAV will at times also issue stateless alerts (warnings). Before,\nthese were normally only accessible in the Device History tool, and through\nalert subscriptions in Alert Profiles.\n\nThe Status page tool can now be configured to include recent stateless alerts,\nwithin a set threshold (the default is 24 hours). The default is still to\nleave them out.\n\nNew status widget\n~~~~~~~~~~~~~~~~~\n\nA widget version of the new Status tool is also introduced. Users who have the\nold Status widget on their NAV front pages will see their widgets replaced\nwith a Status tool widget filtering for *boxState* events.\n\nBy default, NAV places a status widget on the front page of anonymous users.\nWith the new widget, you can also control what kind of alerts anonymous users\ncan see on the front page.\n\n.. TIP:: To configure, remove or add more Status widgets to the front page of\n         anonymous users, go to the User Admininstration tool, select the\n         *default* user and click the button :guilabel:`Operate as this user`.\n\n         While operating as the *default* user, configure the widgets on the\n         front page to your liking. Click :guilabel:`Log back in as ...` to\n         return to normal operation.\n\n\nNetmap redesign\n---------------\n\nThere was never time to clean up the Netmap tool's complicated user interface\nduring the design changes released in NAV 4.0. This has now been rectified.\n\nThe map portion of the page has been given more space, and the view options\nare now contained in a hideable panel above the map. Your saved views should\nstill work.\n\n\nSeedDB IP device form redesign\n------------------------------\n\nThe form for adding and editing an IP device has been redesigned. It no longer\nrequires connectivity to add or edit an IP device, but you have the option to\nverify the connectivity if you want. As a result of this, only one step is\nrequired to complete the form. Should you go ahead and save a router with the\nwrong SNMP community, NAV will shortly raise an *snmpAgentAlert* for this\ndevice.\n\nIn addition to this, IP address verification has been added to the form. When\nadding an IP device by its hostname in NAV versions prior to 4.2, if this\nhostname resolved to multiple IP addresses, NAV would select an arbitrary IP\naddress from these as its management address for the device. The new form will\nask the user to choose one of the resolved IP addresses from a list.\n\n\nCustom attributes on IP devices and locations\n---------------------------------------------\n\nYou now have to option to add custom attributes to your IP devices and\nlocations. In NAV 4.1 this was only available for rooms and organizations. The\ncustom attributes are added in the respective SeedDB forms.\n\nThe attributes added for IP devices are displayed on the IP Device Info page.\nThe attributes for locations are currently not visible outside of SeedDB, as\nthere are no canonical Location-pages in NAV (yet). The *location* report can\nbe amended locally to include those attributes you want displayed, in the same\nway as commented on the *organization* and *room* reports.\n\n\nNew command line utilities\n--------------------------\n\nNAV 4.2 introduces three new command line utilities for advanced users:\n\nnavdf\n~~~~~\n::\n\n    Usage: navdf [filter]\n\n    Lists and filters IP devices monitored by NAV\n\n    Options:\n      -h, --help  show this help message and exit\n\n    The filter expression must be a method call applicable to the Django-based\n    Netbox model's manager class. Example: \"filter(category__id='GSW')\"\n\n\nnavoidverify\n~~~~~~~~~~~~\n::\n\n    usage: navoidverify baseoid < sysnames.txt\n\n    Verifies SNMP sub-tree support on a set of NAV-monitored devices\n\n    positional arguments:\n      baseoid     The base OID for which a GETNEXT operation will be performed\n\n    optional arguments:\n      -h, --help  show this help message and exit\n\n    Given the root of an SNMP MIB module, a bunch of devices can be queried in\n    parallel whether they have any objects below the given BASEOID - effectively\n    verifying MIB support in these devices.\n\n\nnaventity\n~~~~~~~~~\n::\n\n    usage: naventity device\n\n    Outputs entity hierarchy graph from a device's ENTITY-MIB::entPhysicalTable\n    response\n\n    positional arguments:\n      device      The NAV-monitored IP device to query. Must be either a sysname\n\t\t  prefix or an IP address.\n\n    optional arguments:\n      -h, --help  show this help message and exit\n\n\nFiles to remove\n---------------\n\nMany files have been removed or moved around since NAV 4.0 and 4.1. Unless you\nupgraded NAV using a package manager (such as APT), you may need/want to\nremove some obsolete files and directories (here prefixed by /usr/local/nav)::\n\n    /usr/local/nav/doc/hacking/netmap.rst\n    /usr/local/nav/doc/hacking/using-vagrant.rst\n    /usr/local/nav/doc/hacking/vagrant.rst\n    /usr/local/nav/doc/html/hacking/netmap.html\n    /usr/local/nav/doc/html/hacking/using-vagrant.html\n    /usr/local/nav/doc/html/hacking/vagrant.html\n    /usr/local/nav/doc/html/_sources/hacking/netmap.txt\n    /usr/local/nav/doc/html/_sources/hacking/using-vagrant.txt\n    /usr/local/nav/doc/html/_sources/hacking/vagrant.txt\n    /usr/local/nav/lib/python/nav/web/api/auth.py\n    /usr/local/nav/lib/python/nav/web/api/helpers/\n    /usr/local/nav/lib/python/nav/web/api/serializers.py\n    /usr/local/nav/lib/python/nav/web/api/views.py\n    /usr/local/nav/lib/python/nav/web/netmap/forms.py\n    /usr/local/nav/share/htdocs/static/js/src/netmap/app.js\n    /usr/local/nav/share/htdocs/static/js/src/netmap/collections/\n    /usr/local/nav/share/htdocs/static/js/src/netmap/main.js\n    /usr/local/nav/share/htdocs/static/js/src/netmap/models/\n    /usr/local/nav/share/htdocs/static/js/src/netmap/order.js\n    /usr/local/nav/share/htdocs/static/js/src/netmap/resource.js\n    /usr/local/nav/share/htdocs/static/js/src/netmap/router.js\n    /usr/local/nav/share/htdocs/static/js/src/netmap/templates/\n    /usr/local/nav/share/htdocs/static/js/src/netmap/views/\n    /usr/local/nav/share/templates/netmap/admin_list_mapviews.html\n    /usr/local/nav/share/templates/netmap/backbone.html\n    /usr/local/nav/share/templates/netmap/graphml.html\n\n\nNAV 4.1\n========\n\nTo see the overview of scheduled features and reported bugs on the 4.1 series\nof NAV, please go to https://launchpad.net/nav/4.1 .\n\nDependency changes\n------------------\n\nNew dependencies:\n\n- The Python module :mod:`django-filter` >= 0.5.3\n- The Python module :mod:`django-hstore` >= 0.2.4\n- The PostgreSQL extension ``hstore`` - may or may not be part of your default\n  PostgreSQL server installation.\n\n\nSchema changes and hstore\n-------------------------\n\nPostgreSQL's hstore extension has been utilized to implement the new\nflexible attribute feature for organization and room records.\n\nThe hstore extension has been distributed with PostgreSQL since version 9, but\nwill on some Linux distros be shipped in a separate package from the\nPostgreSQL server package. In Debian, for example, the ``postgresql-contrib``\npackage must be installed to enable the extension.\n\nThe :command:`navsyncdb` command will automatically install the hstore\nextension into the NAV database if missing, but the installation requires\nsuperuser access to the database. Normally, this is only required when\ninitializing the database from scratch, using the ``-c`` option.\nTypically, if NAV and PostgreSQL are on the same server, :command:`navsyncdb`\nis invoked as the ``postgres`` user to achieve this (otherwise, use the\n:envvar:`PGHOST`, :envvar:`PGUSER`, :envvar:`PGPASSWORD` environment variables\nto connect remotely as the ``postgres`` user)::\n\n  sudo -u postgres navsyncdb\n\nWatchdog\n--------\n\nNAV 4.1 implements the first version of the Watchdog system, which is\nresponsible for monitoring NAV's internal affairs. This new tool can be used\nto detect problems with NAV's data collection, among other things. Its primary\nstatus matrix is also available as a widget that can be added to your front\npage.\n\nA future planned feature is generating NAV alerts based on problems detected\nby the watchdog system.\n\n\nNew REST API\n------------\n\nNAV 4.0 shipped with some experimental, undocumented API calls. These have\nbeen deprecated, and new API endpoints have been written for NAV 4.1.\n\nAlthough the API is still in flux, it can be used to retrieve various data\nfrom a NAV installation. See further documentation at\nhttps://nav.readthedocs.io/en/latest/howto/using_the_api.html . We know a lot of\npeople are eager to integrate with NAV to utilize its data in their own\nsolutions, so any feedback you may have regarding the API is much appreciated\nby the developers.\n\n\nNAV 4.0\n========\n\nTo see the overview of scheduled features and reported bugs on the 4.0 series\nof NAV, please go to https://launchpad.net/nav/4.0 .\n\nDependency changes\n------------------\n\nNew dependencies:\n\n- Graphite_\n- Sass_ >= 3.2.12 (only required at build time)\n- The Python module :mod:`django-crispy-forms` == 1.3.2\n- The Python module :mod:`crispy-forms-foundation` == 0.2.3\n- The Python module :mod:`feedparser` >=5.1.2,<5.2\n\nChanged version requirements:\n\n- `Python` >= 2.7.0\n\nRemoved dependencies:\n\n- Cricket\n- rrdtool\n\n.. _Graphite: http://graphiteapp.org/\n.. _Sass: http://sass-lang.com/\n\nMajor changes to statistics collection\n--------------------------------------\n\nNAV 4.0 ditches Cricket for collection and presentation of time-series data.\nCricket is great for manually maintaining large configurations, but becomes\nquite inflexible when integrating with a tool like NAV. Also, Cricket has not\nbeen actively developed since 2004.\n\nCollection of time-series data via SNMP has become the responsibility of NAV's\nexisting SNMP collector engine, `ipdevpoll`, implemented as new plugins and\njob configurations.\n\nRRDtool has also been ditched in favor of Graphite_, a more flexible and\nscalable system for storage of time-series data. Graphite provides a networked\nservice for receiving *\"metrics\"*, meaning it can be installed on a separate\nserver, if desirable. It will even scale horizontally, if needed.\n\nThe parts of NAV that collect or otherwise produce time-series data, such as\nvalues collected via SNMP, ping roundtrip times or ipdevpoll job performance\nmetrics, will now send these to a configured Carbon backend (Graphite's\nmetric-receiving daemon).\n\nDue to this extensive change, the threshold manager interface and the threshold\nmonitor have been rewritten from scratch. The new threshold monitoring system\nuses *\"threshold rules\"*, which leverage functionality built-in to Graphite.\nIt is also essentially independent of NAV, which means it can also monitor\nthresholds for data that was put into Graphite by 3rd party software.\n\nMigrating existing data\n-----------------------\n\nExisting threshold values for RRD-based data sources cannot be consistently\nmigrated to the new threshold rule system, so you will need to configure your\nthreshold rules from scratch.\n\nWe do provide a program for migrating time-series data stored in RRD files\ninto Graphite, which will enable you to keep old data when upgrading from an\nolder NAV version. Usage and limitations of this program is documented in a\nseparate howto guide: :doc:`/howto/migrate-rrd-to-graphite`.\n\n.. note:: If you wish to migrate time-series data, please read :doc:`the guide\n          </howto/migrate-rrd-to-graphite>` **before** starting NAV 4.\n\n\nFiles to remove\n---------------\n\nMany files have been removed or moved around since NAV 3.15. Unless you\nupgraded NAV using a package manager (such as APT), you may need/want to\nremove some obsolete files and directories (here prefixed by /usr/local/nav)::\n\n  /usr/local/nav/bin/cleanrrds.py\n  /usr/local/nav/bin/extract_cricket_oids.py\n  /usr/local/nav/bin/fillthresholds.py\n  /usr/local/nav/bin/getBoksMacs.sh\n  /usr/local/nav/bin/mcc.py\n  /usr/local/nav/bin/migrate_cricket.py\n  /usr/local/nav/bin/networkDiscovery.sh\n  /usr/local/nav/bin/ping.py\n  /usr/local/nav/bin/thresholdMon.py\n  /usr/local/nav/etc/cricket-config/\n  /usr/local/nav/etc/cricket-views.conf\n  /usr/local/nav/etc/cron.d/cricket\n  /usr/local/nav/etc/cron.d/thresholdMon\n  /usr/local/nav/etc/mcc.conf\n  /usr/local/nav/etc/subtree-sets\n  /usr/local/nav/lib/python/nav/activeipcollector/rrdcontroller.py\n  /usr/local/nav/lib/python/nav/ipdevpoll/plugins/oidprofiler.py\n  /usr/local/nav/lib/python/nav/mcc/\n  /usr/local/nav/lib/python/nav/netmap/rrd.py\n  /usr/local/nav/lib/python/nav/statemon/rrd.py\n  /usr/local/nav/lib/python/nav/web/cricket.py\n  /usr/local/nav/lib/python/nav/web/rrdviewer/\n  /usr/local/nav/share/htdocs/cricket/\n  /usr/local/nav/share/htdocs/images/\n  /usr/local/nav/share/htdocs/js/\n  /usr/local/nav/share/htdocs/style/\n  /usr/local/nav/share/templates/alertprofiles/address_tab.html\n  /usr/local/nav/share/templates/alertprofiles/filter_group_tab.html\n  /usr/local/nav/share/templates/alertprofiles/filter_tab.html\n  /usr/local/nav/share/templates/alertprofiles/matchfield_tab.html\n  /usr/local/nav/share/templates/alertprofiles/profile_tab.html\n  /usr/local/nav/share/templates/devicehistory/history_view_filter.html\n  /usr/local/nav/share/templates/devicehistory/paginator.html\n  /usr/local/nav/share/templates/ipdevinfo/frag-datasources.html\n  /usr/local/nav/share/templates/seeddb/tabs_cabling.html\n  /usr/local/nav/share/templates/seeddb/tabs_location.html\n  /usr/local/nav/share/templates/seeddb/tabs_netboxgroup.html\n  /usr/local/nav/share/templates/seeddb/tabs_netbox.html\n  /usr/local/nav/share/templates/seeddb/tabs_organization.html\n  /usr/local/nav/share/templates/seeddb/tabs_patch.html\n  /usr/local/nav/share/templates/seeddb/tabs_prefix.html\n  /usr/local/nav/share/templates/seeddb/tabs_room.html\n  /usr/local/nav/share/templates/seeddb/tabs_service.html\n  /usr/local/nav/share/templates/seeddb/tabs_type.html\n  /usr/local/nav/share/templates/seeddb/tabs_usage.html\n  /usr/local/nav/share/templates/seeddb/tabs_vendor.html\n  /usr/local/nav/share/templates/threshold/bulkset.html\n  /usr/local/nav/share/templates/threshold/delete.html\n  /usr/local/nav/share/templates/threshold/edit.html\n  /usr/local/nav/share/templates/threshold/listall.html\n  /usr/local/nav/share/templates/threshold/manageinterface.html\n  /usr/local/nav/share/templates/threshold/managenetbox.html\n  /usr/local/nav/share/templates/threshold/not-logged-in.html\n  /usr/local/nav/share/templates/threshold/select.html\n  /usr/local/nav/share/templates/threshold/start.html\n  /usr/local/nav/share/templates/webfront/preferences_navigation.html\n  /usr/local/nav/share/templates/webfront/toolbox_big_frag.html\n  /usr/local/nav/share/templates/webfront/toolbox_small_frag.html\n  /usr/local/nav/var/cricket-data/\n  /usr/local/nav/var/log/cricket/\n\n\nNAV 3.15\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.15 series\nof NAV, please go to https://launchpad.net/nav/3.15 .\n\nDependency changes\n------------------\n\nNew dependencies:\n\n- `mod_wsgi`\n- The following Python modules:\n    - The Python Imaging Library (`PIL`, aka. `python-imaging` on Debian).\n    - `django-oauth2-provider` >= 0.2.6\n    - `djangorestframework` >= 2.3.7\n    - `iso8601`\n\nChanged version requirements:\n\n- `Django` >= 1.4\n- `PostgreSQL` >= 9.1\n\nRemoved dependencies:\n\n- `mod_python`\n- Cheetah Templates\n\n\nDatabase schema changes\n-----------------------\n\nThe database schema files have been moved to a new location, and so has the\ncommand to synchronize your running PostgreSQL database with changes. The\nsyncing command previously known as :file:`syncdb.py` is now the\n:program:`navsyncdb` program, installed alongside NAV's other binaries.\n\n\nConfiguration changes\n---------------------\n\nThe configuration file :file:`nav.conf` has gained a new option called\n`SECRET_KEY`. NAV's web interface will not work unless you add this option to\n:file:`nav.conf`.\n\nSet it to a string of random characters that should be unique for your NAV\ninstallation. This is used by the Django framework for cryptographic signing\nin various situations. Here are three suggestions for generating a suitable\nstring of random characters, depending on what tools you have available:\n\n    1. :code:`gpg -a --gen-random 1 51`\n    2. :code:`makepasswd --chars 51`\n    3. :code:`pwgen -s 51 1`\n\nPlease see\nhttps://docs.djangoproject.com/en/1.4/ref/settings/#std:setting-SECRET_KEY if\nyou want to know more about this.\n\n\nmod_python vs. mod_wsgi\n-----------------------\n\nNAV no longer depends on `mod_python`, but instead leverages Django's ability\nto serve a NAV web site using its various supported methods (such as `WSGI`,\n`flup` or `FastCGI`).\n\nThis strictly means that NAV no longer is dependent on `Apache`; you should be\nable to serve it using *any web server* that supports any of Django's methods.\nHowever, we still ship with a reasonable Apache configuration file, which now\nnow uses `mod_wsgi` as a replacement for `mod_python`.\n\n.. WARNING:: If you have taken advantage of NAV's authentication and\n             authorization system to protect arbitrary Apache resources, such\n             as static documents, CGI scripts or PHP applications, you **will\n             still need mod_python**. This ability was only there as an upshot\n             of `mod_python` being Apache specific, whereas `WSGI` is a\n             portable interface to web applications.\n\nNAV 3.15 still provides a `mod_python`-compatible module to authenticate and\nauthorize requests for arbitrary Apache resources. To protect any resource,\nmake sure `mod_python` is still enabled in your Apache and add something like\nthis to your Apache config:\n\n.. code-block:: apacheconf\n\n  <Location /uri/to/protected-resource>\n      PythonHeaderParserHandler nav.web.modpython\n  </Location>\n\nAccess to this resource can now be controlled through the regular\nauthorization configuration of NAV's Useradmin panel.\n\n\nREST API\n--------\n\nNAV 3.15 also includes the beginnings of a read-only RESTful API. The API is\nnot yet documented, and must be considered an unstable experiment at the\nmoment. API access tokens can only be issued by a NAV administrator.\n\n\nWrite privileges for room image uploads\n---------------------------------------\n\nUploaded images for rooms are stored in\n:file:`${prefix}/var/uploads/images/rooms/`. This directory needs to be\nwritable for navcron, assuming you are using the default wsgi setup.\n\n\nFiles to remove\n---------------\n\nSome files have been moved around. The SQL schema files are no longer\ninstalled as part of the documentation, but as data files into a subdirectory\nof whichever directory is configured as the datadir (the default is\n:file:`${prefix}/share`). The Django HTML templates have also moved into a\nsubdirectory of datadir. Also, almost all the documentation source files have\nchanged their file name extension from .txt to .rst to properly indicate that\nthey employ reStructuredText markup.\n\nIf any of the following files and directories are still in your installation\nafter upgrading to NAV 3.15, they should be safe to remove (installation\nprefix has been stripped from these file names). If you installed and upgraded\nNAV using a packaging system, you should be able to safely ignore this\nsection::\n\n  bin/navTemplate.py\n\n  doc/*.txt\n  doc/faq/*.txt\n  doc/intro/*.txt\n  doc/reference/*.txt\n\n  doc/cricket/\n  doc/mailin/\n  doc/sql/\n\n  etc/cricket-config/router-interfaces/\n  etc/cricket-config/switch-ports/\n\n  lib/python/nav/django/shortcuts.py\n  lib/python/nav/django/urls/*\n  lib/python/nav/getstatus.py\n  lib/python/nav/messages.py\n  lib/python/nav/report/utils.py\n  lib/python/nav/statemon/core.py\n  lib/python/nav/statemon/execute.py\n  lib/python/nav/statemon/icmp.py\n  lib/python/nav/statemon/ip.py\n  lib/python/nav/statemon/mailAlert.py\n  lib/python/nav/statemon/Socket.py\n  lib/python/nav/statemon/timeoutsocket.py\n  lib/python/nav/topology/d3_js\n  lib/python/nav/topology/d3_js/d3_js.py\n  lib/python/nav/topology/d3_js/__init__.py\n  lib/python/nav/web/encoding.py\n  lib/python/nav/web/noauth.py\n  lib/python/nav/web/seeddb/page/subcategory.py\n  lib/python/nav/web/state.py\n  lib/python/nav/web/templates/__init__.py\n  lib/python/nav/web/webfront/compability.py\n\n  lib/python/nav/web/templates/\n  lib/templates/\n\n  share/htdocs/js/arnold.js\n  share/htdocs/js/d3.v2.js\n  share/htdocs/js/default.js\n  share/htdocs/js/report.js\n  share/htdocs/js/require_config.test.js\n  share/htdocs/js/src/netmap/templates/algorithm_toggler.html\n  share/htdocs/js/src/netmap/templates/link_info.html\n  share/htdocs/js/src/netmap/templates/list_maps.html\n  share/htdocs/js/src/netmap/templates/map_info.html\n  share/htdocs/js/src/netmap/templates/netbox_info.html\n  share/htdocs/js/src/netmap/templates/searchbox.html\n  share/htdocs/js/src/netmap/views/algorithm_toggler.js\n  share/htdocs/js/src/netmap/views/link_info.js\n  share/htdocs/js/src/netmap/views/list_maps.js\n  share/htdocs/js/src/netmap/views/map_info.js\n  share/htdocs/js/src/netmap/views/netbox_info.js\n  share/htdocs/js/src/netmap/views/searchbox.js\n  share/htdocs/js/threshold.js\n  share/htdocs/style/MatrixScopesTemplate.css\n  share/htdocs/style/MatrixTemplate.css\n\n\nNAV 3.14\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.14 series\nof NAV, please go to https://launchpad.net/nav/3.14 .\n\nDependency changes\n------------------\n\n- The `pynetsnmp` library is still optional (for the time being) and\n  recommended, but is **required** if IPv6 SNMP support is needed.\n\nManual upgrade steps required\n-----------------------------\n\nIn NAV 3.14.1592, the Cricket trees `switch-ports` and `router-interfaces`\nhave been consolidated into a single `ports` tree, where all physical ports'\ntraffic stats now also are collected. After running the usual `syncdb.py`\ncommand, you should run `mcc.py` once manually (as the navcron) user to ensure\nthe Cricket config tree is updated.\n\nWhen everything is up and running again, you can optionally delete the\n`switch-ports` and `router-interfaces` directories from your `cricket-config`\ndirectory, as they are no longer used by NAV.\n\nNAV now supplies its own `subtree-sets` configuration to Cricket. If you have\nmade manual changes to your Cricket collection setup and/or this file, you may\nneed to update your setup accordingly.\n\n\nIPv6\n----\n\nNAV 3.14 supports SNMP over IPv6, and most of the service monitors can now\nalso support IP devices with an IPv6 address in NAV. When adding a service\nmonitor in SeedDB, any monitor that doesn't support IPv6 will be marked as\nsuch.\n\nNAV will also properly configure Cricket with IPv6 addresses, but Cricket's\nunderlying SNMP library *needs two optional Perl modules* to be installed to\nenable IPv6. These modules are:\n\n* `Socket6`\n* `IO::Socket::INET6`\n\nOn Debian/Ubuntu these two are already in the Recommends list of the\n`libsnmp-session-perl` package (Cricket's underlying SNMP library); depending\non your Apt configuration, they may or may not have been installed\nautomatically when the `cricket` package was installed.\n\n\nFiles to remove\n---------------\n\nIf any of the following files and directories are still in your installation\nafter upgrading to NAV 3.14, they should be removed (installation prefix has\nbeen stripped from these file names).  If you installed and upgraded NAV using\na packaging system, you should be able to safely ignore this section::\n\n  etc/rrdviewer/\n  lib/python/nav/statemon/checker/*.descr\n  share/htdocs/js/portadmin.js\n\n\nNAV 3.13\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.13 series\nof NAV, please go to https://launchpad.net/nav/3.13 .\n\nDependency changes\n------------------\n\n- NAV no longer requires Java. Consequently, the PostgreSQL JDBC driver is no\n  longer needed either.\n- To use the new `netbiostracker` system, the program ``nbtscan`` must be\n  installed.\n\nNew eventengine\n---------------\n\nThe `eventengine` was rewritten in Python. The beta version does not yet\nsupport a config file, but this will come.\n\nThere is now a single log file for the `eventengine`, the lower-cased\n``eventengine.log``. The ``eventEngine.log`` log file and the ``eventEngine``\nlog directory can safely be removed.\n\nNew alert message template system\n---------------------------------\n\nAs a consequence of the `eventEngine` rewrite, alert message templates are no\nlonger stored in the ``alertmsg.conf`` file. Instead, `Django templates`_ are\nused as the basis of alert message templates, and each template is stored in\nan event/alert hierarchy below the ``alertmsg/`` directory.\n\nAlso, NAV 3.13 no longer provides Norwegian translations of these templates.\n\nThe hierarchy/naming conventions in the ``alertmsg/`` directory are as follows::\n\n  <event type>/<alert type>-<medium>.[<language>.]txt\n\nThe `<event type>` is one of the available event types in NAV, whereas `<alert\ntype>` is one of the alert types associated with the event type. `<medium>` is\none of the supported alert mediums, such as `email`, `sms` or `jabber`. A two\nletter language code is optional; if omitted, English will be assumed.\n\nTo make a Norwegian translation of the ``boxState/boxDown-email.txt``\ntemplate, copy the file to ``boxState/boxDown-email.no.txt`` and translate the\ntext inside the copied file.\n\nVariables available in the template context include:\n\n* `source`\n* `device`\n* `netbox`\n* `subid`\n* `time`\n* `event_type`\n* `alert_type`\n* `state`\n* `value`\n* `severity`\n\nSome of these, such as the `netbox` variable, are Django models, and will\nenable access to query related information in the NAV database. Various\nattributes accessible through the `netbox` variable include:\n\n* `netbox.sysname`\n* `netbox.room`\n* `netbox.room.location`\n* `netbox.category`\n* `netbox.organization`\n\nAlso, since `Django templates`_ are used, you have the full power of its\ntemplate tag library to control and customize the appearance of an alert\nmessage based on the available variables.\n\n.. _`Django templates`: https://docs.djangoproject.com/en/1.4/ref/templates/\n\nVLANs\n-----\n\nIt is now possible to search for VLANs in the navbar search. The search triggers\non VLAN numbers and netidents.\n\nThe VLAN page contains details about the VLAN and its related router ports and\nprefixes. The information is linked to the more extensive reports for each\nport and prefix.\n\nThe page also contains graphs of the number of hosts on the VLAN over time\n(both IPv4 and IPv6 hosts, as well as number of unique MAC addresses seen).\nHistoric information is easily accessible by utilizing the buttons next to the\ngraphs.\n\nBootstrapping host count graphs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCollection of the number of active hosts on each VLAN starts as you upgrade to\nNAV 3.13. The graphs will therefore have no information prior to this point.\n\nThe source information comes from NAV's logs of ARP and ND caches from your\nrouters. If you upgraded to 3.13 from a previous version, you can bootstrap\nyour graphs with historical information from NAV's database.\n\nTo do this, use the ``collect_active_ip.py`` program provided with NAV 3.13::\n\n  Usage: collect_active_ip.py [options]\n\n  Options:\n    -h, --help            show this help message and exit\n    -d DAYS, --days=DAYS  Days back in time to start collecting from\n    -r, --reset           Delete existing rrd-files. Use it with --days to\n                          refill\n\nTo bootstrap your graphs with data from the last year (this may take a while),\nrun::\n\n  sudo -u navcron collect_active_ip.py -d 365 -r\n\n.. NOTE:: NAV does not have historical information about prefixes. If your\n          subnet allocations have changed considerably recently, you shouldn't\n          bootstrap your graphs further back than this if you want your graphs\n          to be as close to the truth as possible.\n\n\nArnold\n------\n\nArnold was rewritten to not use ``mod_python`` and to use Django's ORM for\ndatabase access. The rewrite has tried to be as transparent as possible and at\nthe same time fix any open bugs reports.\n\nSome changes are introduced:\n\n- The shell script for interacting directly with Arnold is gone. If there is an\n  outcry for it, it will be reintroduced. The other scripts for automatic\n  detentions and pursuit are a part of the core functionality and are of course\n  still present.\n\n- The workflow when manually detaining has been slightly improved.\n\n- The reasons used for automatic detentions are no longer available when\n  manually detaining. This is done to be able to differ between manual and\n  automatic detentions. If you detain for the same reason both manually and\n  automatically, just create two similar reasons.\n\n- Log levels are no longer set in ``arnold.conf``. Use ``logging.conf`` to\n  alter loglevels for the scripts and web.\n\n- Some unreported bugs are fixed.\n\n- The “Open on move”-option in a predefined detention was never used. This is\n  fixed.\n\n- Pursuing was not done in some cases.\n\n- Reported bugs that were fixed:\n  - LP#341703 Manual detention does not pursue client\n  - LP#361530 Predefined detention does not exponentially increase detentions\n  - LP#744932 Arnold should give warning if snmp write is not configured\n\nFiles to remove\n---------------\n\nIf any of the following files and directories are still in your installation\nafter upgrading to NAV 3.13, they should be removed (installation prefix has\nbeen stripped from these file names).  If you installed and upgraded NAV using\na packaging system, you should be able to safely ignore this section::\n\n  bin/arnold.py\n  bin/eventEngine.sh\n  etc/alertmsg.conf\n  etc/eventEngine.conf (new config format in lowercase eventengine.conf)\n  lib/java/\n  lib/python/nav/web/arnoldhandler.py\n  lib/python/nav/web/loggerhandler.py\n  lib/python/nav/web/radius/radius.py\n  lib/python/nav/web/report/handler.py\n  var/log/eventEngine/\n\n\nNAV 3.12\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.12 series\nof NAV, please go to https://launchpad.net/nav/3.12 .\n\nDependency changes\n------------------\n\n- Python >= 2.6 is now required. NAV will not work under Python 3.\n- Django >= 1.2 is now required. NAV will likely not work under Django 1.4.\n\n\nCricket configuration\n---------------------\n\nYour subtree-sets configuration for Cricket must be updated. This file is most\nlikely placed in /etc/cricket/. Compare manually with or copy from\n`doc/cricket/cricket/subtree-sets`.\n\nTake note of `$(NAV)/etc/mcc.conf`. Module `interfaces` should be there instead\nof `routerinterfaces` and `switchports`.\n\nIPv6 statistics for router interfaces will now be collected. For this to work\nyou need to copy some configuration templates to your `cricket-config`\ndirectory.  NB: Make sure the `dataDir` is the same as the original after\ncopying the `Defaults` file. If your NAV is installed in `/usr/local/nav`, run\nthese commands::\n\n  sudo cp doc/cricket/cricket-config/Defaults \\\n             /usr/local/nav/etc/cricket-config/\n\n  sudo cp -r doc/cricket/cricket-config/ipv6-interfaces \\\n             /usr/local/nav/etc/cricket-config/\n\nRoom map\n--------\n\nIf you have registered coordinates (latitude, longitude) on your rooms you may\ninclude a geographical map of the rooms on the front page by editing\n`etc/webfront/welcome-registered.txt` and/or `welcome-anonymous.txt` and\nadding the following HTML::\n\n  <div id=\"mapwrapper\">\n      <div id=\"room_map\" class=\"smallmap\"></div>\n  </div>\n\nIf you feel like having a bigger map, replace `smallmap` with `bigmap`. The\nmarkers are clickable and will take you to the new \"Room view\" for the clicked\nroom.\n\nToolbar search\n--------------\n\nThe toolbar search now searches for more than IP devices. Try it!\n\nFiles to remove\n---------------\n\nIf any of the following files and directories are still in your installation\nafter upgrading to NAV 3.12, they should be removed (installation prefix has\nbeen stripped from these file names).  If you installed and upgraded NAV using\na packaging system, you should be able to safely ignore this section::\n\n  doc/getting-started.txt\n  doc/mailin/README\n  doc/radius/\n  etc/apache/subsystems/maintenance.conf\n  etc/apache/subsystems/messages.conf\n  etc/apache/subsystems/netmap.conf\n  lib/python/nav/ipdevpoll/plugins/lastupdated.py\n  lib/python/nav/web/maintenance/handler.py\n  lib/python/nav/web/messages/handler.py\n  lib/python/nav/web/netmap/datacollector.py\n  share/htdocs/js/DeviceBrowserTemplate.js\n  share/htdocs/js/devicehistory.js\n  share/htdocs/js/EditTemplate.js\n  share/htdocs/js/ipdevinfo.js\n  share/htdocs/js/jquery-1.4.4.min.js\n  share/htdocs/js/jquery-json-2.2.min.js\n  share/htdocs/js/quickselect.js\n  share/htdocs/js/seeddb.js\n  share/htdocs/js/seeddbTemplate.js\n  share/htdocs/netmap/\n\n\nNAV 3.11\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.11 series\nof NAV, please go to https://launchpad.net/nav/3.11 .\n\nDependency changes\n------------------\n\n- `JavaSNMP` is no longer a dependency and can be removed. There is also\n  therefore no longer any need to export a `CLASS_PATH` variable before\n  building NAV from source.\n\nTopology source data\n--------------------\n\nThe getBoksMacs Java program has been replaced by a set of ipdevpoll plugins,\nconfigured to run under the `topo` job in 15 minute intervals. This job will\ncollect switch forwarding tables (CAM), STP blocking status, CDP (Cisco\nDiscovery Protocol) neighbor information and also LLDP (Link Layer Discovery\nProtocol) neighbor information.\n\nThe navtopology program will now prefer LLDP source information over CDP and\nCDP source information over CAM source information when building NAV's\ntopology.\n\nUnrecognized neighbors from CDP or LLDP are _not_ stored yet by NAV 3.11.0,\nbut this will be reimplemented in the 3.11 series.\n\n\nNAV 3.10\n========\n\nTo see the overview of scheduled features and reported bugs on the 3.10 series\nof NAV, please go to https://launchpad.net/nav/3.10 .\n\nCricket configuration changes\n-----------------------------\n\nNAV 3.10 now configures Cricket to collect a wide range of available sensor\ndata from devices, including temperature sensors. Devices that implement\neither ENTITY-SENSOR-MIB (RFC 3433), CISCO-ENVMON-MIB or IT-WATCHDOGS-MIB (IT\nWatchdogs WeatherGoose) are supported.\n\nYour need to copy the baseline Cricket configuration for sensors to your\ncricket-config directory. Given that your NAV install prefix is\n`/usr/local/nav/`::\n\n  sudo cp -r doc/cricket/cricket-config/sensors \\\n             /usr/local/nav/etc/cricket-config/\n\nYou also need to add the `/sensors` tree to your Cricket's `subtree-sets`\nfile. See the example file containing all NAV subtrees at\n`doc/cricket/cricket/subtree-sets`.\n\nTopology detection\n------------------\n\nVLAN subtopology detection has now also been rewritten as a separate option to\nthe `navtopology` program. The old `networkDiscovery` service has been renamed\nto `topology` and now runs physical and vlan topology detection using\n`navtopology` once an hour.\n\nIf you notice topology problems that weren't there before the upgrade to 3.10,\nplease report them so that we can fix them.\n\nThe old detector code is deprecated, but if you wish to temporarily go back\nto the old detector code, you can; see the comments in the `cron.d/topology`\nfile. The old detector will be removed entirely in NAV 3.11.\n\n\nLink state monitoring\n---------------------\n\nipdevpoll will now post `linkState` events when a port's link state changes,\nregardless of whether you have configured your devices to send link state\ntraps to NAV.\n\nTo avoid a deluge of `linkDown` or `linkUp` alerts from all access ports in\nyour network, it is recommended to keep the `filter` setting in the\n`[linkstate]` section of `ipdevpoll.conf` to the default setting of\n`topology`. This means that events will only be posted for ports that have\nbeen detected as uplinks or downlinks.\n\nTo facilitate faster detection of link state changes, ipdevpoll is now\nconfigured with a `linkcheck` job that runs the `linkstate` plugin every five\nminutes. You can adjust this to your own liking in `ipdevpoll.conf`.\n\nSNMP agent monitoring\n---------------------\n\nAn `snmpAgentDown` alert will now be sent if an IP device with a configured\ncommunity stops responding to SNMP requests.  The ipdevpoll job `snmpcheck`\nwill check for this every 30 minutes.\n\nTo receive alerts about SNMP agent states, please subscribe to\n`snmpAgentState` events in your alert profile.\n\n\nRedundant power supply and fan state monitoring\n-----------------------------------------------\n\nNAV now finds and stores information about power supply and fan units from\nCisco and HP devices, and monitors for any failures in redundant\nconfigurations.\n\nFor the time being, the monitoring is run by a separate program,\n`powersupplywatch.py`, which is by default set up to run as a cron job once an\nhour. To adjust the monitoring interval, edit `cron.d/psuwatch`.\n\n\nIPv6 status monitoring\n----------------------\n\npping has gained support for pinging IPv6 hosts. _However_, SNMP over IPv6 is\nnot supported quite yet. This means you can add servers with IPv6 addresses\nusing SeedDB, but not with an enabled SNMP community.\n\nFiles to remove\n---------------\n\nIf any of the following files and directories are still in your installation\nafter upgrading to NAV 3.10, they should be removed (installation prefix has\nbeen stripped from these file names).  If you installed and upgraded NAV using\na packaging system, you should be able to safely ignore this section::\n\n  doc/sql/*.sql\n  etc/cron.d/networkDiscovery\n  lib/python/nav/database.py\n  lib/python/nav/mcc/routers.py\n  lib/python/nav/mcc/switches.py\n  lib/python/nav/web/templates/seeddbTemplate.py\n  lib/python/nav/web/templates/selectTreeTemplate.py\n  lib/python/nav/web/l2trace.py\n  lib/python/nav/web/sortedStats.py\n  lib/python/nav/web/netmap/handler.py\n  lib/python/nav/web/serviceHelper.py\n  lib/python/nav/web/ldapAuth.py\n  lib/python/nav/web/selectTree.py\n  lib/python/nav/statemon/output.py\n  lib/templates/geomap/geomap-data-kml.xml\n  apache/\n  bin/navschema.py\n\n\nNAV 3.9\n=======\n\nTo see the overview of scheduled features and reported bugs on the 3.9 series\nof NAV, please go to https://launchpad.net/nav/3.9 .\n\n\nDependency changes\n------------------\n\n- A dependency to the Python library NetworkX (http://networkx.lanl.gov/),\n  version 1.0 or newer, has been introduced in the new topology\n  detector.\n\n  NetworkX lists a number of optional third party packages that will extend\n  NetworkX' functionality, but none of these are currently needed by NAV.\n\n- An optional, but recommended, dependency to the `pynetsnmp` library has been\n  introduced to increase SNMP-related performance in the `ipdevpoll` daemon.\n  `pynetsnmp` is a ctypes binding (as opposed to a native C module) enabling\n  integration with the efficient SNMP processing of the mature NetSNMP\n  library.\n\n  `pynetsnmp` was created for and is distributed with ZenOSS.  There doesn't\n  seem to be a separate tarball for `pynetsnmp`, but the source code\n  repository is at http://dev.zenoss.com/trac/browser/trunk/pynetsnmp . The\n  library has been packaged for Debian under the name `python-pynetsnmp`.\n\n\n\nNAV 3.8\n=======\n\nSource code directory layout\n----------------------------\nThe source code directory layout has changed.  All subystems in the\n`subsystems` directory were merged in several top-level directories:\n\n`python`\n  All the Python libraries have moved here.\n\n`java`\n  All the Java code has moved here.\n\n`bin`\n  All executables have been moved here.\n\n`etc`\n  All initial/example configuration files have been moved here.\n\n`media`\n  All static media files to be served by Apache have moved here.\n\n`templates`\n  All Django templates used by NAV have moved here.\n\n`sql`\n  All the database schema initialization/migration related files have moved\n  here.\n\n\nApache configuration\n--------------------\nNAV's preferred way of configuring Apache has changed.  The default target\ndirectory for an Apache DocumentRoot has therefore also changed, to\n`${prefix}/share/htdocs`.\n\nNAV 3.8 only installs static media files into this directory - all Python code\nis now kept in NAV's Python library directory.  For Cricket integration,\nCricket's CGI scripts and static media should still be installed in the\nDocumentRoot under a separate `cricket` directory (or aliased to the /cricket\nlocation).\n\nNAV now provides its own basic Apache configuration file to be included in\nyour VirtualHost setup.  This file is installed as\n`${sysconfdir}/apache/apache.conf`.  See the `Configuring Apache` section in\nthe INSTALL file for more details.\n\n\nDatabase installation and migration\n-----------------------------------\nNAV 3.8 introduces an automatic database schema upgrade program.  Every time\nyou upgrade NAV, all you need to do to ensure your database schema is updated\nis to run the `sql/syncdb.py` program.\n\nThis program will use the settings from `db.conf` to connect to the NAV\ndatabase.  It can also be used to create a NAV database from scratch.\n\n\nPortAdmin\n---------\n\nNAV can now configure switch port descriptions and native VLANs from the IP\nDevice Info tool, provided that you have set an SNMP write community in\nSeedDB (which is also necessary for the Arnold tool to work).\n\nThis functionality supports Cisco devices through proprietary MIBs.  Devices\nfrom other vendors are supported as long as they properly implement the\nQ-BRIDGE-MIB (RFC 2674) - This has been successfully tested on HP switches.\nAlcatel switches seem to block write access to the necessary Q-BRIDGE objects;\nwe are still looking into this.\n\nPlease do not forget to secure your SNMP v2c communications using best\npractices.  Limit SNMP communication with your devices to only the necessary\nIP addresses or ranges using access lists or similar techniques.  You don't\nwant users on your network to sniff SNMP community strings and start\nconfiguring your devices, do you?\n\n\nDependency changes\n------------------\n\nThe INSTALL file used to refer to the python package `egenix-mxdatetime` as a\ndependency.  This has been removed, as NAV stopped using it in version 3.6.\nYou psycopg2 installation may still require it, though.\n\nNAV 3.8 also adds a dependency to the Python library `simplejson`.\n\nAlso, don't forget: The following dependencies changed from version 3.6 to\n3.7:\n\n* Python >= 2.5.0\n* PostgreSQL >= 8.3\n"
  },
  {
    "path": "README.rst",
    "content": "===================================\n Network Administration Visualized\n===================================\n\n.. image:: https://img.shields.io/github/actions/workflow/status/Uninett/nav/build-and-test.yml?branch=master\n   :alt: GitHub Workflow Status\n   :target: https://github.com/Uninett/nav/actions\n.. image:: https://codecov.io/gh/Uninett/nav/branch/master/graph/badge.svg?token=0o6wdrEwne\n   :alt: Code coverage\n   :target: https://codecov.io/gh/Uninett/nav\n.. image:: https://readthedocs.org/projects/nav/badge/?version=latest&style=flat\n   :target: https://nav.readthedocs.io/en/latest/\n.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\n   :alt: Linting and formatting\n   :target: https://github.com/astral-sh/ruff\n\n\nThis is NAV - Network Administration Visualized - an advanced software suite\nto monitor small and large computer networks.\n\n:Homepage: https://nav.uninett.no/\n:Documentation: https://nav.readthedocs.io/en/latest/\n:Bug tracker and release management: https://github.com/Uninett/nav\n\n\nLicense\n-------\nNAV is licensed under the *GNU GPL version 3*.  NAV includes software from third\nparties, which are either licensed under the GPL or compatible licenses.\n\n* Copyright 2002-2021 Uninett AS\n* Copyright 2022-2026 Sikt\n\nSee individual source files for more detailed copyright notices.\n\n3rd parties\n~~~~~~~~~~~\n\nSome of the graphics icons come altered and/or unaltered from the Tango Icon\nLibrary (http://tango.freedesktop.org/) or other public domain collections.\nMost of these are licensed under the Creative Commons Attribution Share-Alike\nlicense (http://creativecommons.org/licenses/by-sa/2.5/).\n\nThis product includes color specifications and designs developed by Cynthia\nBrewer (http://colorbrewer.org/). These color schemes are Copyright (c) 2002\nCynthia Brewer, Mark Harrower, and The Pennsylvania State University and are\nlicensed under the Apache License v2.0.\n\n\nInstallation\n------------\nFor detailed instructions on how to install NAV, see\n`<doc/intro/install.rst>`_. See the file `<NOTES.rst>`_ for release notes and\nupgrade instructions.\n\nTake it for a quick spin\n------------------------\nFor instruction on how to use docker to run code straight from the repo, see\n`<doc/hacking/using-docker.rst>`_.  Please be aware, though, that this is a highly developer-oriented environment, and is not suitable for production use.\n\nContributing\n------------\nFor instructions on how to contribute to NAV, please read\n`<doc/hacking/hacking.rst>`_ .\n"
  },
  {
    "path": "changelog.d/+replace-use-l10n.changed.md",
    "content": "Replace deprecated `USE_L10N = False` setting with a custom `FORMAT_MODULE_PATH` to preserve ISO date formatting for Django 5.0 compatibility.\n"
  },
  {
    "path": "changelog.d/.gitkeep",
    "content": ""
  },
  {
    "path": "changelog.d/2927.added.md",
    "content": "Add endpoint for getting, creating and deleting maintenance tasks\n"
  },
  {
    "path": "changelog.d/3881.added.md",
    "content": "Show room aliases in tooltip in IP device info\n"
  },
  {
    "path": "changelog.d/3916.changed.md",
    "content": "Exclude JavaScript test files from installed package.\n"
  },
  {
    "path": "changelog.d/3954.fixed.md",
    "content": "Fixed post-login redirect not returning users to the page they originally requested\n"
  },
  {
    "path": "changelog.d/3959.fixed.md",
    "content": "Fix crash on `/messages/create/` when used with Django 5.0+.\n"
  },
  {
    "path": "changelog.d/3961.changed.md",
    "content": "Improved the usability of the two-factor authentication pages with status indicators, clearer warnings, guided setup steps, and copy-to-clipboard support for recovery codes and TOTP secrets.\n"
  },
  {
    "path": "changelog.d/3980.fixed.md",
    "content": "Fix unclickable edit button for widget titles on the dashboard.\n"
  },
  {
    "path": "checks/check_test_names.py",
    "content": "#!/usr/bin/env python3\n\"\"\"Check that new test method names follow the given/when/then/it_should convention.\n\nScans git diff for newly added test methods and warns if they lack\nconvention keywords (given, when, then, should).\n\nUsage:\n    # Check staged changes (pre-commit)\n    python checks/check_test_names.py\n\n    # Check branch diff against master\n    python checks/check_test_names.py --base master\n\n    # Check specific files\n    python checks/check_test_names.py --files tests/test_foo.py tests/test_bar.py\n\n    # Read unified diff from stdin\n    git diff HEAD --unified=0 -- tests/test_foo.py | \\\n        python checks/check_test_names.py --stdin\n\"\"\"\n\nimport argparse\nimport re\nimport subprocess\nimport sys\n\nKEYWORDS = {\"given\", \"when\", \"then\"}\nPHRASE_KEYWORDS = {\"it_should\"}\nTEST_DEF_RE = re.compile(r\"^\\+\\s*def (test_\\w+)\\(\")\nTEST_FILE_RE = re.compile(r\"^tests/.*\\.py$\")\n\n# Matches: +++ b/tests/some/path.py\nDIFF_FILE_RE = re.compile(r\"^\\+\\+\\+ b/(.+)$\")\n\n\ndef get_new_test_names_from_diff(diff: str) -> list[tuple[str, str]]:\n    \"\"\"Extract (filename, test_name) pairs from added lines in a diff.\"\"\"\n    results = []\n    current_file = None\n\n    for line in diff.splitlines():\n        file_match = DIFF_FILE_RE.match(line)\n        if file_match:\n            path = file_match.group(1)\n            current_file = path if TEST_FILE_RE.match(path) else None\n            continue\n\n        if current_file is None:\n            continue\n\n        test_match = TEST_DEF_RE.match(line)\n        if test_match:\n            results.append((current_file, test_match.group(1)))\n\n    return results\n\n\ndef check_name(name: str) -> bool:\n    \"\"\"Return True if the test name contains at least one convention keyword.\"\"\"\n    lower = name.lower()\n    parts = set(lower.split(\"_\"))\n    if parts & KEYWORDS:\n        return True\n    return any(phrase in lower for phrase in PHRASE_KEYWORDS)\n\n\ndef get_diff_staged() -> str:\n    result = subprocess.run(\n        [\"git\", \"diff\", \"--cached\", \"--unified=0\"],\n        capture_output=True,\n        text=True,\n    )\n    return result.stdout\n\n\ndef get_diff_base(base: str) -> str:\n    merge_base = subprocess.run(\n        [\"git\", \"merge-base\", base, \"HEAD\"],\n        capture_output=True,\n        text=True,\n    )\n    base_ref = merge_base.stdout.strip()\n    if not base_ref:\n        print(f\"Could not find merge base with {base}\", file=sys.stderr)\n        sys.exit(2)\n\n    result = subprocess.run(\n        [\"git\", \"diff\", base_ref, \"HEAD\", \"--unified=0\"],\n        capture_output=True,\n        text=True,\n    )\n    return result.stdout\n\n\ndef get_diff_files(files: list[str]) -> str:\n    \"\"\"Read files and pretend all test defs are new (for checking specific files).\"\"\"\n    lines = []\n    for path in files:\n        if not TEST_FILE_RE.match(path):\n            continue\n        lines.append(f\"+++ b/{path}\")\n        try:\n            with open(path) as f:\n                for line in f:\n                    stripped = line.rstrip()\n                    if re.match(r\"\\s*def test_\\w+\\(\", stripped):\n                        lines.append(f\"+{stripped}\")\n        except FileNotFoundError:\n            print(f\"File not found: {path}\", file=sys.stderr)\n    return \"\\n\".join(lines)\n\n\ndef format_plain(violations, total):\n    lines = [\n        f\"{len(violations)} of {total} new test name(s) missing\"\n        \" convention keywords (given/when/then/it_should):\\n\"\n    ]\n    for filepath, name in violations:\n        lines.append(f\"  {filepath}: {name}\")\n    lines.append(\n        \"\\nConsider rephrasing with given/when/then/it_should, e.g.:\"\n        \"\\n  test_when_no_incidents_then_returns_empty_list\"\n        \"\\n  test_it_should_create_incident_with_set_description\"\n        \"\\n  test_given_expired_token_when_refreshing_then_raises_error\"\n    )\n    return \"\\n\".join(lines)\n\n\ndef format_markdown(violations, total):\n    lines = [\n        \"> [!WARNING]\",\n        f\"> **{len(violations)}** of **{total}** new test names are missing\"\n        \" convention keywords (`given`/`when`/`then`/`it_should`)\",\n        \"\",\n        \"| File | Test name |\",\n        \"|------|-----------|\",\n    ]\n    for filepath, name in violations:\n        lines.append(f\"| `{filepath}` | `{name}` |\")\n    lines.extend(\n        [\n            \"\",\n            \"<details>\",\n            \"<summary>Why am I seeing this?</summary>\",\n            \"\",\n            \"Test names should follow a loose **given/when/then** pattern with\"\n            \" keywords like `given`, `when`, `then`, or `it_should`.\"\n            \" This is a suggestion, not a blocker.\"\n            \" The check runs on new test methods added in this PR.\",\n            \"\",\n            \"Examples:\",\n            \"- `test_when_no_incidents_then_returns_empty_list`\",\n            \"- `test_it_should_create_incident_with_set_description`\",\n            \"- `test_given_expired_token_when_refreshing_then_raises_error`\",\n            \"</details>\",\n        ]\n    )\n    return \"\\n\".join(lines)\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\n        \"--stdin\",\n        action=\"store_true\",\n        help=\"Read unified diff from stdin instead of running git.\",\n    )\n    parser.add_argument(\n        \"--base\",\n        help=\"Base branch to diff against (e.g. master).\"\n        \" If omitted, checks staged changes.\",\n    )\n    parser.add_argument(\n        \"--files\",\n        nargs=\"+\",\n        help=\"Check all test names in specific files (ignores git diff).\",\n    )\n    parser.add_argument(\n        \"--format\",\n        choices=[\"plain\", \"markdown\"],\n        default=\"plain\",\n        dest=\"output_format\",\n        help=\"Output format (default: plain).\",\n    )\n    args = parser.parse_args()\n\n    if args.stdin:\n        diff = sys.stdin.read()\n    elif args.files:\n        diff = get_diff_files(args.files)\n    elif args.base:\n        diff = get_diff_base(args.base)\n    else:\n        diff = get_diff_staged()\n\n    new_tests = get_new_test_names_from_diff(diff)\n\n    if not new_tests:\n        return\n\n    violations = [(f, name) for f, name in new_tests if not check_name(name)]\n\n    if not violations:\n        print(f\"All {len(new_tests)} new test name(s) follow the naming convention.\")\n        return\n\n    formatter = format_markdown if args.output_format == \"markdown\" else format_plain\n    print(formatter(violations, len(new_tests)))\n    sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "constraints.txt",
    "content": "snowballstemmer<3.0.0  # incompatible with Sphinx 7.4.7?\n"
  },
  {
    "path": "contrib/patches/cricket-win32-null-bug.patch",
    "content": "diff -ur cricket-1.0.3/lib/Common/Map.pm cricket-1.0.3-local/lib/Common/Map.pm\n--- cricket-1.0.3/lib/Common/Map.pm\tThu Oct 25 02:48:15 2001\n+++ cricket-1.0.3-local/lib/Common/Map.pm\tThu Jun 20 17:52:01 2002\n@@ -17,7 +17,15 @@\n #    You should have received a copy of the GNU General Public License\n #    along with this program; if not, write to the Free Software\n #    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n-\n+#\n+#    BUGS : If you try to get an interface description from windows computers\n+#           it returns a 0 byte at the end.\n+#           ex : snmpwalk windowshost public 1.3.6.1.2.1.2.2.1.2\n+#                returns : MS TCP Loopback interface00\n+#           and when you try to compare this with your config file it fails.\n+#\t    The problem has been fixed  with :$name  =~ s/\\000//g; in line 169. \n+#        \n+#\n package Common::Map;\n \n use snmpUtils;\n@@ -156,6 +164,9 @@\n         my($row);\n         foreach $row (@ret) {\n             my($inst, $name) = split(':', $row, 2);\n+\t    #Windows interfaces returns a 0 byte at the end.\n+\t    #The sentence below fix this problem.\n+     if($name) {\n+  \t    $name  =~ s/\\000//g;\n+     }\n             $main::gMapCache{$snmp}->{$mapkey}->{$name} = $inst;\n         }\n     }\n"
  },
  {
    "path": "contrib/patches/cricket_zoom_1.5.patch",
    "content": "--- grapher.bak\t2007-10-10 13:38:20.000000000 +0200\n+++ grapher.cgi\t2007-10-10 13:46:26.000000000 +0200\n@@ -551,6 +551,14 @@\n \n                     my($cache) = $gQ->param('cache');\n \n+                    ##################################################\n+                    # Edited by John Magne Bredal <john.m.bredal@ntnu.no\n+                    # for NAV-v3 NTNU 2007\n+                    ##################################################\n+                    my $yokohoma = $gQ->param('yokohoma');\n+                    # End of edit\n+                    ##################################################\n+\n                     # create the mini-graph URL\n                     $gQ->delete_all();\n                     $gQ->param('type', $format);\n@@ -569,6 +577,44 @@\n                     # of trying to cache it inappropriately\n                     $gQ->param('rand', int(rand(1000)));\n \n+                    ####################################################\n+                    # Edited by John Magne Bredal <john.m.bredal@ntnu.no\n+                    # for NAV-v3 NTNU 2007\n+                    ####################################################\n+\n+                    $gQ->param('yokohoma',$yokohoma);\n+\n+                    print $gQ->start_form(-method => 'GET');\n+                    print \"Enter maxvalue (m/k/M/% - blank revert to autoscale):\\n\";\n+                    foreach my $key ($gQ->url_param()) {\n+                        next if $key eq 'yokohoma';\n+                        print $gQ->hidden(-name => $key,\n+                                          -default => $gQ->url_param($key));\n+                    }\n+                    print $gQ->textfield(-name => 'yokohoma',\n+                                         -size => 10,\n+                                         -maxlength => 10);\n+                    print $gQ->end_form;\n+\n+                    my %lettervalues;\n+                    $lettervalues{'m'} = 0.001;\n+                    $lettervalues{'k'} = 1000;\n+                    $lettervalues{'M'} = 1000000;\n+\n+                    if (defined($gQ->param('yokohoma'))) {\n+                        my $yokohoma = $gQ->param('yokohoma');\n+                        if ($yokohoma =~ /(\\d+\\.?\\d*)([a-zA-Z])/) {\n+                            $yokohoma = $1;\n+                            my $lettervalue = $2;\n+                            $yokohoma = $yokohoma*$lettervalues{$lettervalue};\n+                        }\n+\n+                        $gQ->param('yokohoma', $yokohoma);\n+                    }\n+\n+                    # End of edit\n+                    ##################################################\n+\n                     # pass thru the value of the cache param, if given\n                     $gQ->param('cache', $cache) if (defined($cache));\n \n@@ -1390,8 +1436,23 @@\n         @interlaced = ( '-i' );\n     }\n \n-    my($ymax) = graphParam($gRefDef, 'y-max', undef);\n-    my($ymin) = graphParam($gRefDef, 'y-min', undef);\n+    ##################################################\n+    # Edited by John Magne Bredal <john.m.bredal@ntnu.no\n+    # for NAV-v3 NTNU 2007\n+    ##################################################\n+\n+    my $ymax;\n+    my $ymin;\n+    if (defined($gQ->param('yokohoma'))) {\n+        $ymax = $gQ->param('yokohoma');\n+        $ymin = 0;\n+    } else {\n+        $ymax = graphParam($gRefDef, 'y-max', undef);\n+        $ymin = graphParam($gRefDef, 'y-min', undef);\n+    }\n+\n+    # End of edit\n+    ##################################################\n \n     my ($ymaxlck) = 0;\n     my ($yminlck) = 0;\n"
  },
  {
    "path": "contrib/patches/nav_cricket-1.0.3_v0.2.ALFA.patch",
    "content": "Index: compile\n===================================================================\n--- compile\t(.../vendor/cricket/1.0.3)\t(revision 9)\n+++ compile\t(.../nav/cricket)\t(revision 9)\n@@ -1,4 +1,4 @@\n-#!/usr/local/bin/perl -w\n+#!/usr/bin/perl -w\n # -*- perl -*-\n \n # Cricket: a configuration, polling and data display wrapper for RRD files\n@@ -66,16 +66,22 @@\n \n sub check_and_set_lock {\n \tmy $lockfile = $gCT->Base() . \"/config.db.lock\";\n-\tif (-f $lockfile) {\n-\t\tmy($db_mtime) = (stat($lockfile))[9];\n-\t\t# Do not recompile if another process already is busy compiling\n-\t\tif ((time() - $db_mtime) < 900) {\n-\t\t\tWarn(\"Skipping recompile; already in progress\");\n-\t\t\treturn 1;\n-\t\t} else {  \n-\t\t\t# But warn if that other process is dead\n-\t\t\tWarn(\"Forcing recompile; previous compile aborted?\");\n-\t\t}\n+\tmy $tries = 0;\n+\twhile (-f $lockfile) {\n+\t    my($db_mtime) = (stat($lockfile))[9];\n+\t    # Do not recompile if another process already is busy compiling\n+\t    if ((time() - $db_mtime) < 900) {\n+\t\t++$tries >= 5 && do { \n+\t\t    Warn(\"Skipping recompile; already in progress\");\n+\t\t    return 1;\n+\t\t};\n+\t\tWarn(\"Lockfile found, sleeping 5 secs.\");\n+\t\tsleep(5);\n+\t    } else {\n+\t\t# But warn if that other process is dead\n+\t\tWarn(\"Forcing recompile; previous compile aborted?\");\n+\t\tunlink $lockfile;\n+\t    }\n \t}\n \topen(LOCK, \">$lockfile\") || die \"Can't create $lockfile\";\n \tprint LOCK \"$$\\n\";\nIndex: grapher.cgi\n===================================================================\n--- grapher.cgi\t(.../vendor/cricket/1.0.3)\t(revision 9)\n+++ grapher.cgi\t(.../nav/cricket)\t(revision 9)\n@@ -1,4 +1,4 @@\n-#!/usr/local/bin/perl -w\n+#!/usr/bin/perl -w\n # -*- perl -*-\n \n # Cricket: a configuration, polling and data display wrapper for RRD files\n@@ -388,7 +388,7 @@\n                     $label = rangeToLabel($range);\n                 }\n                 print \"<h3>$label graph${plural}</h3>\\n\";\n-\n+                \n                 #\n                 # If we have this, we should use it\n                 #\n@@ -518,22 +518,70 @@\n                     my($format) = graphParam($gRef, 'graph-format', $defFmt);\n \n                     my($cache) = $gQ->param('cache');\n+                    \n+                    ##################################################\n+                    # Edited by John Magne Bredal <bredal@itea.ntnu.no>\n+                    # for NAV-v3 ITEA NTNU  2003\n+                    ##################################################\n+                    \n+                    my $yokohoma = $gQ->param('yokohoma');\n \n+                    # End of edit\n+                    ##################################################\n+\n                     $gQ->delete_all();\n                     $gQ->param('type', $format);\n                     $gQ->param('target', $thisTarget2);\n                     $gQ->param('inst', $thisInst) if defined($thisInst);\n-\n+                        \n                     $gQ->param('dslist', $dslist);\n                     $gQ->param('range', $range);\n-\n+                    \n                     $gQ->param('hw',$hwParam) if (defined($hwParam));\n-\n+                    \n                     # this parameter is to trick Netscape into\n                     # always asking the CGI for the image, instead\n                     # of trying to cache it inappropriately\n                     $gQ->param('rand', int(rand(1000)));\n \n+                    ##################################################\n+                    # Edited by John Magne Bredal <bredal@itea.ntnu.no>\n+                    # for NAV-v3 ITEA NTNU  2003\n+                    ##################################################\n+\n+                    $gQ->param('yokohoma',$yokohoma);\n+\n+                    print $gQ->start_form(-method => 'GET');\n+                    print \"Enter maxvalue (m/k/M/% - blank revert to autoscale):\\n\";\n+                    foreach my $key ($gQ->url_param()) {\n+                        next if $key eq 'yokohoma';\n+                        print $gQ->hidden(-name => $key,\n+                                          -default => $gQ->url_param($key));\n+                    }\n+                    print $gQ->textfield(-name => 'yokohoma',\n+                                         -size => 10,\n+                                         -maxlength => 10);\n+                    print $gQ->end_form;\n+                    \n+                    my %lettervalues;\n+                    $lettervalues{'m'} = 0.001;\n+                    $lettervalues{'k'} = 1000;\n+                    $lettervalues{'M'} = 1000000;\n+                    \n+                    if (defined($gQ->param('yokohoma'))) {\n+                        my $yokohoma = $gQ->param('yokohoma');\n+                        if ($yokohoma =~ /(\\d+\\.?\\d*)([a-zA-Z])/) {\n+                            $yokohoma = $1;\n+                            my $lettervalue = $2;\n+                            $yokohoma = $yokohoma*$lettervalues{$lettervalue};\n+                        }\n+\n+                        $gQ->param('yokohoma', $yokohoma);\n+                    } \n+                    \n+                    # End of edit\n+                    ##################################################\n+\n                     # pass thru the value of the cache param, if given\n                     $gQ->param('cache', $cache) if (defined($cache));\n \n@@ -649,6 +697,33 @@\n             }\n \n             print \"<h3>Targets that are available:</h3>\\n\";\n+\n+            ##################################################\n+            # Edited by John Magne Bredal <bredal@itea.ntnu.no>\n+            # for NAV-v3 ITEA NTNU  2003\n+            ##################################################\n+            \n+            # Making links from giga to non-giga graphs\n+            my $navlink = $gQ->self_url();\n+            my $navname = $name;\n+            if ($navname =~ /giga/) {\n+                # searches for non-giga graphs\n+                $navname =~ s/^\\///;\n+                $navlink =~ s/giga-//;\n+                if (-e \"$Common::global::gCricketHome/cricket-data/$navname\") {\n+                    print \"<a href=$navlink>Non-giga interfaces</a> exist for this unit.\\n\";\n+                }\n+            } else {\n+                # searches for giga-interface graphs\n+                $navname =~ s/^\\///;\n+                if (-e \"$Common::global::gCricketHome/cricket-data/giga-$navname\") {\n+                    $navlink =~ s/\\%2F/\\%2Fgiga-/;\n+                    print \"<a href=$navlink>giga-interfaces</a> exist for this unit.\\n\";\n+                }\n+            }\n+            # End of edit\n+            ##################################################\n+\n             print \"<table border cellpadding=2 width=100%>\\n\";\n \n             if ($doDesc) {\n@@ -1241,9 +1316,24 @@\n         @interlaced = ( '-i' );\n     }\n \n-    my($ymax) = graphParam($gRefDef, 'y-max', undef);\n-    my($ymin) = graphParam($gRefDef, 'y-min', undef);\n+    ##################################################\n+    # Edited by John Magne Bredal <bredal@itea.ntnu.no>\n+    # for NAV-v3 ITEA NTNU  2003\n+    ##################################################\n \n+    my $ymax;\n+    my $ymin;\n+    if (defined($gQ->param('yokohoma'))) {\n+        $ymax = $gQ->param('yokohoma');\n+        $ymin = 0;\n+    } else {\n+        $ymax = graphParam($gRefDef, 'y-max', undef);\n+        $ymin = graphParam($gRefDef, 'y-min', undef);\n+    }\n+\n+    # End of edit\n+    ##################################################\n+\n     my ($ymaxlck) = 0;\n     my ($yminlck) = 0;\n \n"
  },
  {
    "path": "contrib/patches/net-snmp-memory.patch",
    "content": "diff -u -r net-snmp-5.0.1/agent/mibgroup/ucd-snmp/memory.c net-snmp-5.0.1-local/agent/mibgroup/ucd-snmp/memory.c\n--- net-snmp-5.0.1/agent/mibgroup/ucd-snmp/memory.c\tFri Apr 26 13:11:11 2002\n+++ net-snmp-5.0.1-local/agent/mibgroup/ucd-snmp/memory.c\tThu Jun 27 15:21:44 2002\n@@ -304,8 +304,8 @@\n         for (j = 0; j < MAX_COL && *p; j++) {   /* scanf column-by-column */\n             l = sscanf(p, \"%lu%n\", &m, &k);\n             m /= 1024;\n-            if (4294967295 > m) {\n-                *(row[i] + j) = 4294967295;\n+\t    if (0x7fffffff < m) {\n+\t        *(row[i] + j) = 0x7fffffff;\n             } else {\n                 *(row[i] + j) = (unsigned) m;\n             }\n"
  },
  {
    "path": "contrib/scripts/isc_dhpcd_graphite/README.rst",
    "content": "======================================\nUsage and notes for isc_dhcpd_graphite\n======================================\n\nThis script needs python3.\n\nFor arguments, try::\n\n        isc_dhcpd_graphite.py --help\n\nThe script runs ``dhcpd_pool`` (full path given with -C) with the flag\n``-f j`` to make it emit json.\n\nBuilding the prefix\n===================\n\nThe dotted-path that graphite uses to store data is controlled by the prefix\nargument to the script (-p), the optional location argument (-l) and what\n``dhcpd_pool`` returns as its ``location`` key.\n\nThe default prefix is \"nav.dhcp\".\n\nIf ``-p`` is \"nav.bloviate\", ``-l`` is not set and the ``location`` in the json\nis \"vlan1\" the resulting graphite path is ``nav.bloviate.vlan1``.\n\n\nAssumptions about Location\n--------------------------\n\nThe script assumes that the value of the ``location``-key contains a vlan-name\nof the form \"vlanNUMBER\", regex ``vlan\\d+``. If this is not the case, a warning\nis issued on stderr and that row of results is not passed on to graphite.\n\nThe location-value is normalized so that a value of \"Student vlan2 new\" is sent\nto graphite as \"vlan2\".\n"
  },
  {
    "path": "contrib/scripts/isc_dhpcd_graphite/isc_dhpcd_graphite.py",
    "content": "#!/usr/bin/env python3\n\"\"\"Send dhcpd statistics generated by dhcpd-pools to graphite\n\nDoes not attempt to reconnect if the server is unavailable.\n\"\"\"\n\nimport argparse\nfrom binascii import hexlify\nfrom collections import namedtuple\nimport json\nfrom math import trunc\nimport pathlib\nimport pickle\nimport re\nimport socket\nimport struct\nimport subprocess\nimport sys\nfrom time import time\n\nDEFAULT_PREFIX = \"nav.dhcp\"\nDEFAULT_CONFIG_FILE = \"/etc/dhcpd/dhcpd.conf\"\nDEFAULT_CMD_PATH = pathlib.Path(\"/usr/bin/dhcpd-pools\")\nDEFAULT_PORT = \"2004\"\nDEFAULT_PROTOCOL = 'text'  # MB doesn't trust pickle so we go with text\n\n# graphite likes pickle protocol 2. Python 3: 3, Python 3.8+: 4\nPICKLE_PROTOCOL = range(0, pickle.HIGHEST_PROTOCOL + 1)\nFLAGS = \"-f j\"\nMETRIC_MAPPER = {\n    \"defined\": \"max\",\n    \"used\": \"cur\",\n    \"touched\": \"touch\",\n    \"free\": \"free\",\n}\n\n\nMetric = namedtuple(\"Metric\", [\"path\", \"value\", \"timestamp\"])\n\n\n# parse comand line flags\ndef parse_args():\n    parser = argparse.ArgumentParser(description=\"Send dhcp stats to graphite\")\n    parser.add_argument(\n        \"server\",\n        help=\"Graphite server to send data to\",\n        type=str,\n    )\n    parser.add_argument(\n        \"--port\",\n        help=\"Port of Graphite server, if not on 2003 (text) or 2004 (pickle)\",\n        type=str,\n    )\n    parser.add_argument(\n        \"-f\",\n        \"--config-file\",\n        type=pathlib.Path,\n        help=\"Complete path to dhcpd-pools config-file. Usually located in /etc/dhcpd/. Default: %(default)s\",\n        default=DEFAULT_CONFIG_FILE,\n    )\n    parser.add_argument(\n        \"-C\",\n        \"--command\",\n        help=\"Path to dhcpd-pools command. Default: %(default)s\",\n        type=pathlib.Path,\n        default=DEFAULT_CMD_PATH,\n    )\n    parser.add_argument(\n        \"-p\",\n        \"--prefix\",\n        help=\"Path prefix to use for the metric, overriding the default. Default: %(default)s\",\n        type=str,\n        default=DEFAULT_PREFIX,\n    )\n    parser.add_argument(\n        \"-l\",\n        \"--location\",\n        help=(\n            \"Location, if any, to append to the metric prefix to build the path.\"\n            ' If the vlan is named \"vlan1\" and the location is \"building1.cellar\"'\n            \" the resulting metric path would be PREFIX.building1.cellar.vlan1\"\n        ),\n        type=str,\n    )\n    protocol_choices = (\"text\",) + tuple(str(p) for p in PICKLE_PROTOCOL)\n    parser.add_argument(\n        \"-P\",\n        \"--protocol\",\n        help=\"Protocol to use to send to graphite server. Default: %(default)s\",\n        choices=protocol_choices,\n        default=str(DEFAULT_PROTOCOL),\n        type=str,\n    )\n    parser.add_argument(\n        \"-n\",\n        \"--noop\",\n        action=\"store_true\",\n        help=\"Do not send metrics to graphite, print what would be sent instead\",\n    )\n    args = parser.parse_args()\n    try:\n        protocol = int(args.protocol)\n    except ValueError:\n        pass\n    else:\n        args.protocol = protocol\n    if not args.port:\n        if isinstance(args.protocol, int):\n            args.port = \"2004\"\n        else:\n            args.port = \"2003\"\n    args.actual_prefix = args.prefix\n    if args.location:\n        args.actual_prefix += f\".{args.location}\"\n    return args\n\n\n# run command and store json output\ndef exec_dhcpd_pools(config_file, cmd_path=DEFAULT_CMD_PATH):\n    flags = f\"-c {config_file} {FLAGS}\".split()\n    cmd = [cmd_path] + list(flags)\n    result = subprocess.run(cmd, capture_output=True)\n    if result.returncode:\n        sys.exit(result.stderr)\n    return json.loads(result.stdout)\n\n\n# reformat the data\ndef render(jsonblob, prefix, protocol=DEFAULT_PROTOCOL):\n    if isinstance(protocol, int):\n        return _render_pickle(jsonblob, prefix, protocol)\n    return _render_text(jsonblob, prefix)\n\n\ndef _render_text(jsonblob, prefix):\n    template = \"{metric.path} {metric.value} {metric.timestamp}\\n\"\n    input = _tuplify(jsonblob, prefix)\n    output = []\n    for metric in input:\n        line = template.format(metric=metric)\n        output.append(line)\n    return \"\".join(output).encode(\"ascii\")\n\n\ndef _render_pickle(jsonblob, prefix, protocol):\n    input = _tuplify(jsonblob, prefix)\n    output = []\n    for metric in input:\n        output.append((metric.path, (metric.timestamp, metric.value)))\n    payload = pickle.dumps(output, protocol=protocol)\n    header = struct.pack(\"!L\", len(payload))\n    message = header + payload\n    return message\n\n\ndef _tuplify(jsonblob, prefix):\n    timestamp = trunc(time())\n    data = jsonblob[\"shared-networks\"]\n    output = list()\n    for vlan_stat in data:\n        vlan = _clean_vlan(vlan_stat[\"location\"])\n        if not vlan:\n            continue\n        for key, metric in METRIC_MAPPER.items():\n            path = f\"{prefix}.{vlan}.{metric}\"\n            value = vlan_stat[key]\n            output.append(Metric(path, value, timestamp))\n    return output\n\n\ndef _clean_vlan(location):\n    regex = re.search(\"vlan\\d+\", location)\n    if regex:\n        return regex.group()\n    sys.stderr.write(f\"No vlan found in location {location}: invalid\\n\")\n    return None\n\n\n# send the data\ndef send_to_graphite(metrics_blob, server, port):\n    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n    try:\n        sock.connect((server, port))\n    except socket.error as e:\n        sys.exit(str(e))\n    try:\n        sock.sendall(metrics_blob)\n    except socket.error as e:\n        sys.exit(str(e))\n    finally:\n        sock.close()\n\n\ndef main():\n    args = parse_args()\n    jsonblob = exec_dhcpd_pools(args.config_file, args.command)\n    output = render(jsonblob, args.actual_prefix, args.protocol)\n    if args.noop:\n        if args.protocol == \"text\":\n            print(output.decode('ascii'))\n        else:\n            print(hexlify(output).decode('ascii'))\n    else:\n        send_to_graphite(output, args.server, args.port)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "dist.sh",
    "content": "#!/bin/sh -e\n\nshow_help() {\n    cat <<EOF\n$0 [-r revision]\n\nSimple shell script to create and sign tarball source distribution of NAV\n\nInvocation with no arguments will create a tarball from the HEAD of the\ncurrent repository.\nEOF\n}\n\nREVISION=$(git describe)\n\n# Parse arguments\nOPTIND=1\nwhile getopts \"hr:\" opt; do\n    case $opt in\n        h) show_help\n           exit 0;\n           ;;\n        r) REVISION=\"$OPTARG\"\n           ;;\n        *)\n            show_help >&2\n            exit 1\n            ;;\n    esac\ndone\n\nDIST_NAME=\"nav-$REVISION\"\nTARBALL=\"${DIST_NAME}.tar.gz\"\n\narchive() {\n    umask 0022\n    git rev-parse \"$REVISION\" >/dev/null || return 1\n    git archive --format=tar --prefix=\"$DIST_NAME/\" \"$REVISION\" \\\n        | gzip - > \"$TARBALL\"\n}\n\nif [ -f $TARBALL ]; then\n    echo \"Tarball already exists: $TARBALL\"\n    echo \"Please remove it.\"\n    exit 1\nfi\n\necho \"Exporting archive of NAV revision $REVISION ...\"\nif archive; then\n    echo \"MD5SUM:\"; md5sum \"$TARBALL\"\n    echo \"SHA1SUM:\"; sha1sum \"$TARBALL\"\n\n    echo \"Please sign the tarball\"\n    gpg --armor --detach-sign \"$TARBALL\"\n\n    echo \"All done.  Enjoy your tarball:.\"\n    ls -la \"$TARBALL\"*\nfi\n"
  },
  {
    "path": "doc/_static/custom.css",
    "content": "/* Custom css for the Sphinx theme in NAV */\n\na,\na:hover,\na:focus,\na:visited,\n.alert a,\n.alert .alert-link {\n    color: #1f74ad;\n}\n\n.wy-menu a:visited,\n.wy-menu-vertical a:visited,\n.wy-menu a:hover,\n.wy-menu-vertical a:hover {\n    color: #d9d9d9;\n}\n\n/* Show the logo on mobile exactly like on big screen */\n.wy-nav-top > a img.logo {\n    display: block;\n    margin: 0 auto;\n    height: auto;\n    width: auto;\n    border-radius: 0;\n    max-width: 100%;\n    background: transparent;\n}\n\nimg {\n    margin-bottom: 1em;\n}\n\nfooter {\n    margin-top: 2em;\n    color: #575757;\n}\n\n/* When people creates documentation they usually end up with a big honking list\nof h3's. This makes it very hard to separate the different sections, and adding\nthis border helps a lot with that. That and I always wanted to make a css style\nthat used some form of pink in a not horrific way, and it worked! */\nh3 {\n    border-bottom: 1px solid lightpink;\n}\n\n/* Contrast for pre elements was to small. */\npre {\n    color: #2c3e50;\n    background: #ecf0f1;\n}\n\n/* The following overrides the admonition colors. They all pass the WCAG 2.0\nlevel AA test for contrast */\n\n/* This covers the admonitions 'note', 'attention', 'hint', 'important' and 'tip' */\n.alert-info {\n    color: #2a617d;\n    background-color: #d9edf7;\n}\n\n/* This covers the admonitions 'warning' and 'caution' */\n.alert-warning {\n    color: #9f5000;\n    background-color: #feefb3;\n}\n\n/* This covers the admonitions 'alert' and 'danger' */\n.alert-danger {\n    color: #a73a00;\n    background-color: #f2dede;\n}\n\n/* Highlight versionadded more */\np.versionadded {\n    background-color: lightsteelblue;\n    display: inline-block;\n    font-size: 1.3rem;\n    padding: 0.2em 0.5em;\n}\n\n.guilabel {\n    background-color: #ecf0f1;\n    padding: 2px 4px;\n    font-size: 90%;\n    border-radius: 3px;\n}\n"
  },
  {
    "path": "doc/api/mibretriever.rst",
    "content": "MIB retrievers\n--------------\n\n.. automodule:: nav.mibs.mibretriever\n   :members:\n   :show-inheritance:\n"
  },
  {
    "path": "doc/api/searchproviders.rst",
    "content": "-----------------------\nNAVbar search providers\n-----------------------\n\nNAV's search bar (the one seen at the top of every NAV web page) provides a\npluggable architecture for search implementations. Any class that implements\nthe interface of :py:class:`nav.web.info.searchproviders.SearchProvider` can\nbe used as a provider of search results for the NAVbar.\n\nThe list of ``SearchProvider`` implementations that are used to respond to\nNAVbar search is configured in NAV's Django settings. The default list, as of\nNAV 4.8, looks like this:\n\n\n.. code-block:: python\n\n    # Classes that implement a search engine for the web navbar\n    SEARCHPROVIDERS = [\n\t'nav.web.info.searchproviders.RoomSearchProvider',\n\t'nav.web.info.searchproviders.LocationSearchProvider',\n\t'nav.web.info.searchproviders.NetboxSearchProvider',\n\t'nav.web.info.searchproviders.InterfaceSearchProvider',\n\t'nav.web.info.searchproviders.VlanSearchProvider',\n\t'nav.web.info.searchproviders.PrefixSearchProvider',\n\t'nav.web.info.searchproviders.DevicegroupSearchProvider',\n\t'nav.web.info.searchproviders.UnrecognizedNeighborSearchProvider',\n    ]\n\nIf you want to hook in your own SearchProvider, local to your installation,\nyou can do this by manipulating this list in your :file:`local_settings.py`\nfile.\n\nA simple implementation example\n-------------------------------\n\nThis is the current implementation of the Room search provider; it will do a\nsubstring search among room IDs, and then return search results which link\nback to each matched room's details page.\n\n.. code-block:: python\n\n    class RoomSearchProvider(SearchProvider):\n\t\"\"\"Searchprovider for rooms\"\"\"\n\tname = \"Rooms\"\n\theaders = [\n\t    ('Roomid', 'id'),\n\t    ('Description', 'description')\n\t]\n\tlink = 'Roomid'\n\n\tdef fetch_results(self):\n\t    results = Room.objects.filter(id__icontains=self.query).order_by(\"id\")\n\t    for result in results:\n\t\tself.results.append(SearchResult(\n\t\t    reverse('room-info', kwargs={'roomid': result.id}),\n\t\t    result)\n\t\t)\n\nThe actual work of the implementation is accomplished within the\n``fetch_results()`` method, which must return a list of\n:py:class:`nav.web.info.searchproviders.SearchResult` namedtuples.\n\nThe ``headers`` class attribute defines how to extract columnar information\nfrom the returned ``SearchResult``'s instance objects. In this case, the search\nresult tab for *Rooms* will contain two columns: One captioned *Roomid*, where\nthe cell values come from the Room objects' ``id`` attribute, and one\ncaptioned *Description*, where the cell values come from the Room objects'\n``description`` attributes.\n\n\n\nThe SearchProvider base class\n-----------------------------\n\n.. autoclass:: nav.web.info.searchproviders.SearchProvider\n   :members:\n\nThe SearchResult namedtuple\n---------------------------\n\nA ``SearchResult`` namedtuple consist of the ``href`` and ``inst`` attributes.\n``href`` is a URL used as a hyperlink on the search result line. ``inst`` is\nnormally some kind of instance object, typically a Django model, which\nrepresent the search result itself.\n\n\n.. autoclass:: nav.web.info.searchproviders.SearchResult\n   :members:\n"
  },
  {
    "path": "doc/api/sensor.rst",
    "content": "Sensor database model\n---------------------\n.. autoclass:: nav.models.manage.Sensor\n   :members:\n   :show-inheritance:\n\n\nipdevpoll sensor plugin\n-----------------------\n.. automodule:: nav.ipdevpoll.plugins.sensors\n   :members:\n   :show-inheritance:\n"
  },
  {
    "path": "doc/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# NAV documentation build configuration file, created by\n# sphinx-quickstart on Tue Feb  8 10:54:59 2011.\n#\n# This file is execfile()d with the current directory set to its containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\nimport os\nimport sys\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\nsys.path.insert(0, os.path.join(os.path.abspath('..'), 'python'))\nsys.path.insert(0, os.path.abspath(\"exts\"))\n\nfrom nav import buildconf\nfrom nav import bootstrap\n\nbootstrap.bootstrap_django('doc')\n\n# -- General configuration -----------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be extensions\n# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.doctest',\n    'sphinx.ext.todo',\n    'sphinx.ext.ifconfig',\n    'sphinxcontrib_django',\n    'sphinxcontrib.programoutput',\n    'xref',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n# source_encoding = 'utf-8'\n\n# The master toctree document.\nmaster_doc = 'contents'\n\n# General information about the project.\nproject = 'NAV'\ncopyright = '2012-2021 Uninett AS, 2022-2026 Sikt'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = 'dev'\n# version = '.'.join(buildconf.VERSION.split('.')[:2])\n# The full version, including alpha/beta/rc tags.\nrelease = buildconf.VERSION\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n# language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n# today = ''\n# Else, today_fmt is used as the format for a strftime call.\n# today_fmt = '%B %d, %Y'\n\n# List of documents that shouldn't be included in the build.\n# unused_docs = []\n\n# List of directories, relative to source directory, that shouldn't be searched\n# for source files.\nexclude_trees = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all documents.\n# default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n# add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n# add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n# show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n# modindex_common_prefix = []\n\n\n# -- Options for HTML output ---------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  Major themes that come with\n# Sphinx are currently 'default' and 'sphinxdoc'.\nhtml_theme = 'sphinx_rtd_theme'\n\nhtml_logo = \"templates/static/nav-logo.svg\"\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\nhtml_theme_options = {\n    # The maximum depth of the table of contents tree. Set this to -1 to allow\n    # unlimited depth.\n    'navigation_depth': 4,\n    # Only display the logo image, do not display the project name at the top of the\n    # sidebar\n    'logo_only': True,\n    # Location to display Next and Previous buttons. This can be either bottom, top,\n    # both, or None.\n    'prev_next_buttons_location': 'both',\n    # Changes the background of the search area in the navigation bar. The value can be\n    # anything valid in a CSS background property.\n    'style_nav_header_background': '#2c3e50',\n}\n\n# Do not show Edit on Github link\nhtml_context = {\n    'display_github': False,\n}\n\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n# html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n# html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n# html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n# html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# These paths are either relative to html_static_path\n# or fully qualified paths (eg. https://...)\nhtml_css_files = [\n    'custom.css',\n]\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n# html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n# html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\nhtml_sidebars = {'**': ['localtoc.html', 'sourcelink.html', 'searchbox.html']}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n# html_additional_pages = {}\n\n# If false, no module index is generated.\n# html_use_modindex = True\n\n# If false, no index is generated.\n# html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n# html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\nhtml_show_sourcelink = False\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n# html_use_opensearch = ''\n\n# If nonempty, this is the file name suffix for HTML files (e.g. \".xhtml\").\n# html_file_suffix = ''\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'NAVdoc'\n\n\n# -- Options for LaTeX output --------------------------------------------------\n\n# The paper size ('letter' or 'a4').\n# latex_paper_size = 'letter'\n\n# The font size ('10pt', '11pt' or '12pt').\n# latex_font_size = '10pt'\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title, author, documentclass [howto/manual]).\nlatex_documents = [\n    ('index', 'NAV.tex', 'NAV Documentation', 'Sikt', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n# latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n# latex_use_parts = False\n\n# Additional stuff for the LaTeX preamble.\n# latex_preamble = ''\n\n# Documents to append as an appendix to all manuals.\n# latex_appendices = []\n\n# If false, no module index is generated.\n# latex_use_modindex = True\n\n\n# Example configuration for intersphinx: refer to the Python standard library.\nintersphinx_mapping = {\n    'python': ('https://docs.python.org/3', None),\n    'django': (\n        'https://docs.djangoproject.com/en/4.2/',\n        'https://docs.djangoproject.com/en/4.2/_objects/',\n    ),\n}\n\n\n# External links definitions\nxref_links = {\n    \"Graphite\": (\"Graphite\", \"https://graphiteapp.org\"),\n    \"PostgreSQL\": (\"PostgreSQL\", \"https://www.postgresql.org\"),\n}\n\n\ndef setup(app):\n    app.add_css_file(\"custom.css\")\n"
  },
  {
    "path": "doc/contents.rst",
    "content": ".. _contents:\n\n==========================\nNAV documentation contents\n==========================\n\n.. toctree::\n    :hidden:\n\n    index\n\n.. toctree::\n    :maxdepth: 3\n\n    overview\n    intro/install\n    intro/getting-started\n    intro/getting-organized\n    howto/index\n    faq/faq\n    reference/index\n    ../release-notes\n    glossary\n\nFor developers\n==============\n\n.. toctree::\n   :maxdepth: 3\n\n   hacking/index\n\nIndices, glossary and tables\n============================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`glossary`\n\n"
  },
  {
    "path": "doc/exts/alerttypes.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2021 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This is not really a Sphinx extension, but a tool to autogenerate the reference\ndocumentation for NAV's event- and alert type hierarchy.\n\nIt should only be necessary to re-run this in the event of changes to the supported\nevent/alert types, or in the templates used to generate this doc.\n\"\"\"\nimport os\n\nfrom jinja2 import FileSystemLoader, Environment  # Jinja is a sub-dependency of Sphinx\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__name__)\n\n\nfrom nav.models.event import EventType, AlertType\n\n\ndef main():\n    env = Environment(loader=FileSystemLoader(os.path.dirname(__file__)))\n    template = env.get_template('alerttypes.rst.j2')\n\n    types = [\n        (eventtype, AlertType.objects.filter(event_type=eventtype))\n        for eventtype in EventType.objects.all()\n    ]\n    print(template.render(types=types))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "doc/exts/alerttypes.rst.j2",
    "content": "Event- and alert type hierarchy\n===============================\n\nNAV events and alerts are organized into a type hierarchy. While NAV's backend\nmonitoring processes usually generate events, the :program:`Event Engine` is\nresponsible for deciding what to do with those events. In most cases, events\nare translated into a corresponding alert by the :program:`Event Engine`.\n\nMost alerts are *stateful*, i.e. they can be viewed as an incident that has a\nstart time and an end time. If the end time is set to an infinite value, the\nalert is considered unresolved (also known as *open*).\n\nSome alert types indicate the beginning of a new alert state, while some alert\ntypes indicate the closure of an existing alert state. E.g. for ``boxState``\nalerts, a ``boxDown`` alert indicates that a new stateful incident has occured:\nA device is no longer responsive. On the other hand, a ``boxUp`` alert will\ncause an existing ``boxState``-type alert to be resolved.\n\n\nAll legal event- and alert-types are registered in the NAV database (and can\nthus be extended, even by the user, if need be). The following are the event-\nand alert types that come pre-defined with NAV:\n\n\n{% for event, alerts in types %}\n*{{ event.id }}* events\n{{ '-' * event.id|length }}---------\n{{ event.description }}\n\n.. list-table:: Alerts associated with {{ event.id }} events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n{% for alert in alerts %}   * - ``{{ alert.name }}``\n     - {{ alert.description }}\n{% endfor %}\n\n\n{% endfor %}\n"
  },
  {
    "path": "doc/exts/xref.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom docutils import nodes\n\nfrom sphinx.util import caption_ref_re\n\n\ndef xref(typ, rawtext, text, lineno, inliner, options={}, content=[]):\n\n    title = target = text\n    titleistarget = True\n    # look if explicit title and target are given with `foo <bar>` syntax\n    brace = text.find('<')\n    if brace != -1:\n        titleistarget = False\n        m = caption_ref_re.match(text)\n        if m:\n            target = m.group(2)\n            title = m.group(1)\n        else:\n            # fallback: everything after '<' is the target\n            target = text[brace + 1 :]\n            title = text[:brace]\n\n    link = xref.links[target]\n\n    if brace != -1:\n        pnode = nodes.reference(target, title, refuri=link[1])\n    else:\n        pnode = nodes.reference(target, link[0], refuri=link[1])\n\n    return [pnode], []\n\n\ndef get_refs(app):\n\n    xref.links = app.config.xref_links\n\n\ndef setup(app):\n\n    app.add_config_value('xref_links', {}, True)\n    app.add_role('xref', xref)\n    app.connect(\"builder-inited\", get_refs)\n"
  },
  {
    "path": "doc/faq/faq.rst",
    "content": "===\nFAQ\n===\n\nFrequently Asked Questions for NAV\n\nIs vendor X / device Y supported?\n---------------------------------\n\nNAV supports any managed (SNMP v1 or v2c-enabled) routing and switching device\nthat implements the relevant, standard IETF MIB support.\n\nUnfortunately, many vendors seem to eschew some of these important IETF MIBs\nin favor of their own, proprietary SNMP MIB modules. NAV has adequate support\nfor proprietary MIBs from large vendors such as Cisco and Hewlett Packard, as\nthese have been a mainstay in the Norwegian higher education sector for years.\n\nFor any other vendors, we suggest that you just add your devices to NAV and\nsee whether NAV reports what you want it to report. If it doesn't, submit a\nquestion to the mailing list, nav-users@lister.sikt.no.\n\nWhy are there gaps in my graphs?\n--------------------------------\n\nThere are multiple possible sources for problems like this. Please read our\n:doc:`guide to debugging choppy graph issues<graph_gaps>`.\n\n\nWhy does NAV list my device's uplink as *N/A*?\n----------------------------------------------\n\nThis means that topology discovery has failed for some reason.\n\nUplinks/downlinks in NAV require VLAN topology detection to be completed, as\ndirectionality of links is part of this information. NAV may have actually\nfound the neighboring device on your port just find, but is unable to detect\nwhich VLANs are active on the link - since directionality information is\nmissing, NAV doesn't know whether the neighbor represents an uplink or a\ndownlink.\n\nPlease see our :doc:`guide for troubleshooting topology\n</howto/debugging-topology>` for more information.\n\nWhy doesn't device X show as down in the status page when I know it's down?\n---------------------------------------------------------------------------\n\nFirst, browse the device in ipdevinfo (search for it by name or IP in the\nNAVbar). Does it list as up or down here?\n\nHas the device been placed on maintenance, or has the alert already been\nacknowledged by someone else? Check your status filter.\n\nRemember, the *event engine* holds back *boxDown* alerts for up to four\nminutes (configurable in :file:`eventengine.conf`) while waiting for the\nsituation to resolve itself. While waiting for the recovery, the device may be\nmarked as down in its *ipdevinfo* page, without an actual alert having been\nposted yet.\n\nIf things still seem to not work, ensure both :program:`pping` and\n:program:`eventengine` are running, using the :code:`nav status` command. Then\ncheck the logs of these programs to see whether they have detected the\nsituation. :file:`pping.log` should indicate whether pping has failed to get a\nping response from the device. :file:`eventengine.log` should indicate whether\nthe *event engine* has detected *pping*'s notice of this.\n\nA device is down, I see it on the status page, my profile should cover the event, but I am not alerted. Why?\n--------------------------------------------------------------------------------------------------------------\n\nFirst, verify that the alert engine (:code:`nav status alertengine`) is\nrunning. Use :file:`alertengine.log` to verify that alert engine processed\nsuch an alert. Did it cover your user? If not, double check your active\nprofile. You may want to make a new profile that covers every alarm, to see if\nyou get any alerts then.\n\n\nWhy is my Cisco switch' syslog full of SNMP-3-AUTHFAIL messages for requests from my NAV server?\n-------------------------------------------------------------------------------------------------\n\nBecause of what Cisco calls *community indexing*. A 802.1q-enabled Cisco\nswitch will maintain separate switching information MIB instances (BRIDGE-MIB)\nfor each active VLAN.\n\nQuerying for switching information for VLAN 20 requires NAV to modify the SNMP\ncommunity used for communicating with the switch. If the community is\n``public``, NAV must use the community ``public@20``.\n\nTo obtain all entries from the forwarding tables of such a switch (i.e. in\norder to facilitate NAV's machine tracking and topology functionality), or\njust to know which interfaces are switch ports, NAV must know which VLANs are\nactively forwarded by the switch. Sometimes, Cisco devices report active VLANs\nthat it doesn't have a BRIDGE-MIB instance for.\n\nUnfortunately, if NAV tries to query a VLAN that has no BRIDGE-MIB instance,\nthe switch will log this as an SNMP authentication failure.\n\nI added a new IP Device using SeedDB, but nothing happens. Why?\n---------------------------------------------------------------\n\nNAV's SNMP collector, :program:`ipdevpoll`, should notice the new IP Device\nwithin 2 minutes. Be patient. If you're impatient, restart\n:program:`ipdevpoll`, or check its log file, :file:`ipdevpoll.log`.\n\nHow do I make NAV send SMS alerts?\n----------------------------------\n\nNAV provides an :doc:`SMS daemon </reference/smsd>` to dispatch SMS alerts. The\ndaemon uses a plugin system to provide support for multiple methods of SMS\nmessage dispatch. Examples include a dispatcher for a locally-attached GSM\ndevice (using Gammu), a dispatcher for a simple email-to-SMS interface, a\ndispatcher for simple REST-based web SMS API's. You could also write your own\nplugin.\n\nWe've always recommended attaching a GSM device directly to your NAV server,\nto ensure that you have an out-of-band way of being notified about network\nproblems. To do so, get a GSM device that's supported by `Gammu\n<http://www.gammu.org/wiki/index.php?title=Gammu:Main_Page>`_.\n\nWe've found it's best to avoid handsets, as these are built to be exactly\nthat: Handsets. Sometimes, they require some form of user-interaction to\ncontinue operating, which isn't always feasible in a datacenter. At Sikt,\nwe've had good results with 2G GSM terminals from Siemens/Cinterion/Gemalto,\nbut currently we use 4G terminals from Teltonika (TRM240).\n\nHow long are ARP and CAM records kept in the database?\n------------------------------------------------------\n\nNAV stores ARP an CAM records **indefinitely**, making them available for\nsearch in the :program:`Machine Tracker` web UI.\n\n*However*, in some jurisdictions, this type of data is considered personally\nidentifiable and its retention is regulated by privacy laws. You may therefore\nbe required by law to remove old ARP and CAM records from your database.\n\nThe :program:`navclean` command line program can be used to delete old ARP and\nCAM records from the database. Many users run a :program:`navclean` command\nfrom their *crontabs* to clean out old ARP and CAM records, like in this\nexample::\n\n  # m h  dom mon dow   command\n  * 6 * * * navclean --force --arp --cam --interval '6 months'\n\nSee the output of ``navclean --help`` for usage details.\n\n.. toctree::\n    :hidden:\n\n    /faq/graph_gaps\n"
  },
  {
    "path": "doc/faq/graph_gaps.rst",
    "content": "===================================\nDebugging \"gaps in graphs\" syndrome\n===================================\n\nThis document discusses various causes of missing Graphite data, AKA gappy\ngraphs AKA holy graphs (or even completely blank graphs). You should verify\neach issue in the order they are listed.\n\n\nProblems at the Graphite end of things\n======================================\n\n.. _graph_gaps_storage_schema:\n\nWhisper files have the wrong storage schema\n-------------------------------------------\n\nIf you forgot to copy NAV's suggested rules for :program:`carbon-cache`'s\n:file:`storage-schemas.conf` configuration file, you will have problems. Same\ngoes if a NAV upgrade included new rules you forgot to add.\n\nThe Whisper round robin database format expects data points to come in at the\nsame rate as specified in its first retention archive (the highest resolution\narchive). The typical default values from :file:`storage-schemas.conf` will\ncreate Whisper files with their highest resolution archive set to 1 minute\nintervals. Traffic data from NAV is collected in 5 minute intervals, which\nmeans only every fifth data point would be populated in this scenario. That's\nnot nearly often enough to draw a continuous line between data points.\n\nThe :program:`whisper-info` (or :file:`whisper-info.py`) can be used to\ninspect individual ``.wsp`` files to see what resolution their first retention\narchive is configured with (this is the ``secondsPerPoint`` value of archive\nnumber 0). If this isn't 300 seconds (5 minutes) for any\n``.wsp`` file located under the :file:`ports/` directory of a device, then you\nknow these have been created with the wrong schema.\n\nThere are two ways to resolve this. *Both begin with adopting the proper\nstorage schema rules from NAV's suggested config*. Following that, you can\neither:\n\n1. Delete all the existing ``.wsp`` files that have the wrong schema. **You will\n   lose data.**\n2. Use the :program:`whisper-resize` (or :file:`whisper-resize.py`) program to\n   resize individual ``.wsp`` files, by specifying the correct schema (as per.\n   NAV's suggested schema rules).\n\n\nUDP packets are being dropped\n-----------------------------\n\nBecause NAV sends data to Carbon using UDP, there is no guaranteed data\nreception. This could be solved by using TCP, but with a considerable\nperformance penalty. As data collection in NAV is very bursty, it has occurred\nthat the kernel's UDP receive buffer has overflowed, causing the kernel to\ndrop packets. This leads to gaps in the graphs.\n\nVerify packet drops\n~~~~~~~~~~~~~~~~~~~\n\nOn Linux, to verify that packets are being dropped, you can look in the\n:file:`/proc/net/udp` file and find the line with the local port the Carbon\ndaemon is listening to (default port **2003**, or **07D3** in hex). The number\nof packets dropped since the daemon started is shown in the last column. To\noutput only this number, use:\n\n.. code-block:: console\n\n  $ awk '$2~/07D3/{print $NF}' /proc/net/udp\n  4031\n\nIf this number keeps increasing, you are affected by the packet dropping\nissue.\n\n\nIncreasing the UDP receive buffer\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf packets are being dropped, you can try to increase the kernel's network\nreceive buffer to avoid this. On Linux this can be done with the following\ncommands:\n\n.. code-block:: sh\n\n  sysctl net.core.rmem_max                  # See current setting\n  sysctl -w net.core.rmem_max=16777216      # Set max buffer to 16MB\n  sysctl -w net.core.rmem_default=16777216  # Set default buffer to 16MB\n\nExperiment with different values until the packet dropping stops. You need to\nrestart the carbon daemon (``carbon-cache`` or ``carbon-relay``, depending on\nyour setup) to make the changes take effect.\n\n\nCarbon's cache is saturated\n---------------------------\n\nIf the `carbon-cache` daemon (or daemons, if you have configured multiple) is\nunable to write data to your storage medium at a fast enough rate, its\ninternal cache will be saturated, and it will start to drop incoming metrics.\nThis will typically happen if the volume and rate of incoming metrics is\nlarger than your I/O subsystem can support writing.\n\nUse this NAV/Graphite URL to render a graph that can give some insight into\nwhat's going on inside your `carbon-cache`::\n\n    /graphite/render/?width=852&height=364&from=-1day&target=alias%28sumSeries%28group%28carbon.agents.%2A.metricsReceived%29%29%2C%22Metrics+received%22%29&target=alias%28sumSeries%28group%28carbon.agents.%2A.committedPoints%29%29%2C%22Committed+points%22%29&target=alias%28secondYAxis%28sumSeries%28group%28carbon.agents.%2A.cache.size%29%29%29%2C%22Cache+size%22%29\n\nThis graph shows the relationship between incoming data points, and datapoints\ncommitted to disk, while superimposing the size of the internal cache on top.\nYou should be able to quickly identify any capacity issues here: The rate if\nincoming data points is continuously higher than the rate of committed points,\nand the cache size is ever-increasing (until it at some points hits the max\ncache size, configured in :file:`carbon.conf`).\n\nA healthy graph may look something like this (where the rate of incoming and\ncommitted points are roughly equal, and increases in cache size are only\ntemporary):\n\n.. image:: carbon-cache-status.png\n\nYou could add this graph to your NAV dashboard to monitor it continuously.\n\nThe only way around this is to scale up your Graphite infrastructure. You can\nadd faster drives (solid state drives aren't a bad idea), or set up a cluster\nof multiple Graphite servers. Please consult `Graphite's own documentation`_\n(or Google) on how to accomplish this.\n\n.. _`Graphite's own documentation`: http://graphite.readthedocs.io/en/latest/config-local-settings.html#cluster-configuration\n\nAs an alternative to this, you could consider whether you need to collect\ntraffic statics from every access port in your network. If you change the\ncategory of an access switch from ``SW`` to ``EDGE`` in SeedDB, NAV will\neffectively stop collecting traffic counters from its interfaces.\n\nProblems at the NAV end of things\n=================================\n\n.. note::\n\n   Unless you have been changing the job configurations of\n   :program:`ipdevpoll` considerably, there are two main jobs that collect\n   statistics using SNMP: ``1minstats`` and ``5minstats`` - the former running\n   on a 1 minute interval, the latter on 5 minute intervals. The `1minstats`\n   job primarily collects all system stats and sensor values, whereas the\n   `5minstats` job typically collects interface counters.\n\n\nipdevpoll stats jobs are failing\n--------------------------------\n\nIf any of ipdevpoll's metric collection jobs are failing for a device, the\nmetrics collected by that job may either have incomplete or missing data,\ndepending on how/when the jobs are failing. There are several ways to check\nhow the jobs are doing for one or more devices:\n\n1. Go to the device's IP Device Info page (e.g. search for the device name in\n   the nav bar at the top of every NAV web page). Check the job status\n   listings (at the lower right of the page). If the `5minstats` or\n   `1minstats` job are marked as red, the last time this job was run, it\n   failed. If the jobs are marked yellow, they have not been run or completed\n   within the expected time interval.\n\n2. Grep the logs for errors (for any device)::\n\n     grep 'ERROR.*minstats' /var/log/nav/ipdevpoll.log\n\n3. Open the Watchdog tool from the Toolbox menu. Any ipdevpoll jobs that are\n   repeatedly failing will show as errors here.\n\nStats jobs failing due to timeout errors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nDo the devices that are timing out have any common factors? Same model,\nvendor, software?\n\nSome devices are particularly slow to respond to SNMP requests at large, while\nsome are slow to respond to particular SNMP requests - in particular, we often\nsee agents that are slow to build large responses to ``GET-BULK`` requests,\nwhich NAV always uses in a SNMP *v2c* session.\n\nYou can try to alleviate the timeout problems by increasing ipdevpoll's SNMP\nrequest timeout, alternatively in conjunction with reducing the\n``max-repetitions`` value (which is the maximum number of consecutive values\nipdevpoll asks an agent to return in a single SNMP response packet when\nemploying `GET-BULK`_ requests).\n\n\nipdevpoll stats jobs aren't running at the correct interval\n-----------------------------------------------------------\n\nThe Whisper round robin database format expects data points to come in at the\nsame rate as specified in its first retention archive. If ipdevpoll does not\nsend metrics to carbon at the rate expected for the given metric's schema,\ngaps may occur in the data.\n\nIf the device ``example-gw`` is missing data in its port counter metrics, you\ncan attempt to verify that the `5minstats` job for ``example-gw`` is actually\nrunning on the configured 5 minute interval by grepping the logs and checking\nthe timestamps of job completion (when you have already confirmed the jobs\nthemselves aren't failing):\n\n.. code-block:: console\n\n    # grep 'INFO.*5minstats example-gw.*completed' /var/log/nav/ipdevpoll.log\n    2017-11-10 13:46:21,400 [INFO schedule.netboxjobscheduler] [5minstats example-gw.example.org] 5minstats for example-gw.example.org completed in 0:00:06.151333. next run in 0:04:53.848691.\n    2017-11-10 13:51:21,510 [INFO schedule.netboxjobscheduler] [5minstats example-gw.example.org] 5minstats for example-gw.example.org completed in 0:00:06.259981. next run in 0:04:53.740050.\n    2017-11-10 13:56:21,293 [INFO schedule.netboxjobscheduler] [5minstats example-gw.example.org] 5minstats for example-gw.example.org completed in 0:00:06.042444. next run in 0:04:53.957581.\n    2017-11-10 14:01:21,747 [INFO schedule.netboxjobscheduler] [5minstats example-gw.example.org] 5minstats for example-gw.example.org completed in 0:00:06.476202. next run in 0:04:53.523833.\n\nThis example shows that the `5minstats` is consistently running on 5 minute intervals.\n\nOnce you cross a certain threshold, depending on your hardware setup and the\nnumber of nodes/ports you are monitoring with NAV, you may find that ipdevpoll\nis having issues scheduling its jobs in a timely fashion: There's too much\nwork, and too little resources to complete it on time.\n\nThis is when you should start experimenting with ipdevpoll's\n:ref:`multiprocess mode <ipdevpoll-multiprocess>`.\n\n\n.. _`GET-BULK`: https://tools.ietf.org/html/rfc1448#section-4.2.3\n"
  },
  {
    "path": "doc/glossary.rst",
    "content": ".. _glossary:\n\n========\nGlossary\n========\n\n.. glossary::\n\n    device\n        A physical entity, which in most cases can be identified via a serial\n        number.\n\n    netbox\n        A device which is reachable and can be monitored via an IP address.\n        Also known as an IP device.\n\n    IP device\n        A device which is reachable and can be monitored via an IP address.\n        Also known as a Netbox\n\n    module\n        A sub-entity of a Netbox, often replaceable in the form of a\n        slot-insertable port or controller module, a transceiver, etc.  These\n        are not normally addressable via a separate IP address, but are found\n        by querying a Netbox using SNMP.  A module will be registered as a\n        separate device in NAV, and tracked by serial number if available via\n        SNMP.\n"
  },
  {
    "path": "doc/hacking/adding-environment-probe-support.rst",
    "content": "========================================================\nAdding support for a new environment probe device to NAV\n========================================================\n\nThis guide will document an example of how to implement support for a new type\nof environmental sensor probe in NAV.\n\nThe specific device used as an example is the AKCP sensorProbe8_, described by\nthe vendor as:\n\n    A High-Speed, Accurate and Intelligent Monitoring device. The sensorProbe8 is\n    a completely embedded host with a proprietary Linux like OS which includes\n    TCP/IP stack, a built in web-server and full Email and SNMP functionality.\n\nThe goal\n========\n\nWe have a sensorProbe8 device with a range of sensors connected (temperature,\nhumidity, etc.). We want each sensor value to be logged and graphed in NAV.\n\nSensors in NAV\n==============\n\nNAV has a :py:class:`nav.models.manage.Sensor` model, which maps arbitrary\nsensors to Netboxes. This model describes how to collect data from a sensor\nusing SNMP, and NAV will automatically collect, log and graph data from all\nSensor instances registered in the database.\n\nConceptually, to add support for a new type of device with (possibly) multiple\nsensors, you need to write a module that will discover the SNMP-available\nsensors on this type of device and insert each of them into the NAV database.\n\nIn practice, you don't need to fiddle with the database at all, but just make\na class with a standard API to report a list of sensor descriptions to the\n:program:`ipdevpoll` ``sensors`` plugin.\n\nCourse of action\n================\n\n1. We require AKCP's MIB definition. This can be downloaded from\n   http://www.akcp.com/wp-content/uploads/2010/04/akcp_mib211210.zip\n2. The MIB file must be converted to a Python file, using the\n   :program:`smidump` program.\n3. A MibRetriever class to detect and report the relevant sensors to NAV using\n   this MIB must be written.\n4. The :program:`ipdevpoll` ``sensors`` plugin must be configured to use the\n   new MibRetriever class for the appropriate devices.\n\nDumping the MIB\n===============\n\nThe downloaded :file:`akcp.mib` file defines a MIB module named\n``SPAGENT-MIB``. Its definitions can be converted to a Python module thus:\n\n.. code-block:: sh\n\n   smidump -k -f python akcp.mib > python/nav/smidumps/SPAGENT-MIB.py\n\n.. NOTE:: The SPAGENT-MIB definitions are somewhat flawed and will cause\n   *smidump* to output some parsing errors. The ``-k`` command line option is\n   there to make it produce its output despite many of these errors.\n\n   It does not matter that the output file is invalid as a Python module\n   name. It is loaded dynamically by NAV, and should be named verbatim after\n   the MIB module it defines.\n\nThe :py:mod:`nav.smidumps` package is where NAV distributes Python versions of\nthe MIB definitions its code uses.\n\nExamining the MIB\n=================\n\nExamining the MIB, reveals that it defines a number of tables; one for each\ntype of sensor that can be connected to a sensorProbe device. The table rows\ntypically define a sensor identifier, description, value readout, value unit\ndescription and a bunch of other more or less interesting metadata.\n\nWhat NAV needs in a Sensor record is:\n\n* A unique identifier, that will not change when the sensor description\n  changes.\n* A description of the sensor.\n* What base unit is used for the value readout.\n* The precision of the value readout (SNMP doesn't support floating point\n  numbers, so decimal precision is achieved by reporting a large integer and\n  scaling it by a given factor).\n* The exact OID to use in an SNMP GET operation to read the sensor value.\n\nHopefully, the MIB provides us with enough information to record all of this.\nAs an example, let's get some data about the available temperature sensors:\n\n.. code-block:: console\n\n   $ ls\n   akcp.mib\n   $ export MIBDIRS=/var/lib/mibs/ietf:.\n   $ snmpwalk -v1 -c public 10.1.1.42 SPAGENT-MIB::sensorProbeTempTable\n   SPAGENT-MIB::sensorProbeTempDescription.0 = STRING: \"Ambient temperature\"\n   SPAGENT-MIB::sensorProbeTempDescription.1 = STRING: \"Temperature2 Description\"\n   SPAGENT-MIB::sensorProbeTempDescription.2 = STRING: \"Temperature3 Description\"\n   SPAGENT-MIB::sensorProbeTempDescription.3 = STRING: \"Front of rack\"\n   SPAGENT-MIB::sensorProbeTempDescription.4 = STRING: \"Back of rack\"\n   SPAGENT-MIB::sensorProbeTempDescription.5 = STRING: \"Temperature6 Description\"\n   SPAGENT-MIB::sensorProbeTempDescription.6 = STRING: \"Temperature7 Description\"\n   SPAGENT-MIB::sensorProbeTempDescription.7 = STRING: \"Temperature8 Description\"\n   SPAGENT-MIB::sensorProbeTempDegree.0 = INTEGER: 22\n   SPAGENT-MIB::sensorProbeTempDegree.1 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegree.2 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegree.3 = INTEGER: 17\n   SPAGENT-MIB::sensorProbeTempDegree.4 = INTEGER: 16\n   SPAGENT-MIB::sensorProbeTempDegree.5 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegree.6 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegree.7 = INTEGER: 0\n   .\n   .\n   .\n   SPAGENT-MIB::sensorProbeTempOnline.0 = INTEGER: online(1)\n   SPAGENT-MIB::sensorProbeTempOnline.1 = INTEGER: offline(2)\n   SPAGENT-MIB::sensorProbeTempOnline.2 = INTEGER: offline(2)\n   SPAGENT-MIB::sensorProbeTempOnline.3 = INTEGER: online(1)\n   SPAGENT-MIB::sensorProbeTempOnline.4 = INTEGER: online(1)\n   SPAGENT-MIB::sensorProbeTempOnline.5 = INTEGER: offline(2)\n   SPAGENT-MIB::sensorProbeTempOnline.6 = INTEGER: offline(2)\n   SPAGENT-MIB::sensorProbeTempOnline.7 = INTEGER: offline(2)\n   .\n   .\n   .\n   SPAGENT-MIB::sensorProbeTempDegreeType.0 = INTEGER: celsius(1)\n   SPAGENT-MIB::sensorProbeTempDegreeType.1 = INTEGER: fahr(0)\n   SPAGENT-MIB::sensorProbeTempDegreeType.2 = INTEGER: fahr(0)\n   SPAGENT-MIB::sensorProbeTempDegreeType.3 = INTEGER: celsius(1)\n   SPAGENT-MIB::sensorProbeTempDegreeType.4 = INTEGER: celsius(1)\n   SPAGENT-MIB::sensorProbeTempDegreeType.5 = INTEGER: fahr(0)\n   SPAGENT-MIB::sensorProbeTempDegreeType.6 = INTEGER: fahr(0)\n   SPAGENT-MIB::sensorProbeTempDegreeType.7 = INTEGER: fahr(0)\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.0 = INTEGER: 223\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.1 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.2 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.3 = INTEGER: 170\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.4 = INTEGER: 161\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.5 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.6 = INTEGER: 0\n   SPAGENT-MIB::sensorProbeTempDegreeRaw.7 = INTEGER: 0\n   .\n   .\n   .\n\nFrom the MIB's description of the ``sensorProbeTempTable`` object, and from\nthis output, we can surmise the following:\n\n* A total of 8 temperature sensors can be slotted in. All slots are reported\n  in the table, but only the slots with an ``sensorProbeTempOnline`` value of\n  ``online`` actually have an active temperature sensor connected.\n\n* If we want decimal precision in our temperature readouts, we should use the\n  ``sensorProbeTempDegreeRaw`` value. Unfortunately, the MIB definition says\n  nothing about the exact resolution of this number, only that it is «higher»\n  resolution than the ``sensorProbeTempDegree`` value. The *snmpwalk* output\n  seems to suggest it provides a precision of a single decimal digit (i.e.\n  divide the readout value by 10).\n\n* The readout value unit is given by ``sensorProbeTempDegreeType`` (and we are\n  given to suppose that a value of ``fahr`` means *degrees fahrenheit*).\n\n\nWriting a MibRetriever\n======================\n\nNAV provides the :py:class:`nav.mibs.mibretriever.MibRetriever` base class,\nwhich provides the basis for implementing classes with knowledge of specific\nMIBs.\n\n.. NOTE: MibRetrievers are not a particularly elegant implementation, as\n   subclass implementations are isolated from each other, and there is no\n   interface for querying arbitrary MIBs without first instantiating the\n   specific MibRetriever subclasses you need.\n\nFirst, we will need a class skeleton to start with. Create a\n:file:`python/nav/mibs/spagent_mib.py` containing the following skeleton\ncode::\n\n    from twisted.internet import defer\n    from nav.mibs import reduce_index\n    from nav.mibs.mibretriever import MibRetriever\n    from nav.smidumps import get_mib\n\n\n    class SPAgentMib(MibRetriever):\n\tmib = get_mib('SPAGENT-MIB')\n\n\nThe :program:`ipdevpoll` plugin :py:mod:`nav.ipdevpoll.plugins.sensors` needs\nour MibRetriever to implement the ``get_all_sensors()`` method. This method\nshould return a Twisted_ Deferred_ - a «promise» of a future result. The\nresult must be a specific data structure describing a list of sensors\ndiscovered on a device.\n\n\nExample using a single hardcoded sensor\n---------------------------------------\n\nLet's hardcode an example result for a single temperature sensor, based on the\n*snmpwalk* from above::\n\n    class SPAgentMib(MibRetriever):\n\tmib = get_mib('SPAGENT-MIB')\n\n\t@defer.inlineCallbacks\n\tdef get_all_sensors(self):\n\t    result = [\n\t\t{\n\t\t    'oid': '.1.3.6.1.4.1.3854.1.2.2.1.16.1.14.0',\n\t\t    'unit_of_measurement': 'celsius',\n\t\t    'precision': 1,\n\t\t    'scale': None,\n\t\t    'description': \"Ambient temperature\",\n\t\t    'name': \"Ambient temperature\",\n\t\t    'internal_name': \"Ambient temperature\",\n\t\t    'mib': 'SPAGENT-MIB',\n\t\t}\n\t    ]\n\t    return result\n\nThis returns a list of a single item: A dictionary describing the first\ntemperature sensor from the snmpwalk from above. The dictionary should contain\nthe following keys:\n\n\n===================  =========================================================\nKey                  Description\n===================  =========================================================\noid                  The OID from which an SNMP-GET operation can extract the\n                     readout value. In this example, it corresponds to\n                     ``SPAGENT-MIB::sensorProbeTempDegreeRaw.0``\nunit_of_measurement  The unit of measurement, used mostly for display\n                     purposes. It may also be used to discover which sensors\n                     actually measure temperature, when finding temperature\n                     sensors for a room-view in NAV.\nprecision            The number of positions to move the decimal point of the\n                     readout value. In this example, a readout value of *223*\n                     will be registered as *22.3 degrees celsius*.\nscale                The scale of the readout value. If the readout value was\n                     specified as a number of *MegaWatts*, the base unit of\n                     measurement would be *Watts* and the scale would be\n                     *Mega*.\ndescription          A (preferably) human-readable description of the sensor.\nname                 A unique sensor name (can conceiveably be the same as the\n                     description).\ninternal_name        An internal sensor name. If, for example, the actual\n                     readout value OID for a specific sensor can change over\n                     time, this should be an identifier that the sensor can be\n                     recognized by over time. **This string is also used as\n                     part of the Graphite metric name** when sensor readings\n                     are sent to its Carbon backend.\nmib                  Should be the name of the MIB module that the sensor\n                     information was found in.\n===================  =========================================================\n\nA note on standardizing unit names\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSpelling and casing of unit names should be standardized throughout NAV. E.g.,\nwhen a list of sensors is filtered to select only those that report\ntemperature values, it's much easier to write a filter if every temperature\nsensor reports either ``celsius`` or ``fahrenheit``. If you register sensors\nthat have units like ``C``, ``F``, ``fahr``, ``°C`` or ``°F``, it's much\nharder to find *all* the relevant sensors.\n\nFor this reason, an attempt has been made to standardize on a set of unit\nnames in the :class:`nav.models.manage.Sensor` model class. It would be wise\nto import this model and use the relevant ``UNIT_*`` constants from this class\nwhen returning sensor dicts.\n\nThis is exactly what we will do in the next example.\n\n\nCollecting actual sensors from the MIB\n--------------------------------------\n\nLet's rewrite ``SPAgentMib`` to collect actual temperature sensors:\n\n.. code-block:: python\n   :linenos:\n   :emphasize-lines: 9, 20\n\n    from nav.models.manage import Sensor\n\n\n    class SPAgentMib(MibRetriever):\n\tmib = get_mib('SPAGENT-MIB')\n\n\t@defer.inlineCallbacks\n\tdef get_all_sensors(self):\n\t    result = yield self.retrieve_columns([\n\t\t'sensorProbeTempDescription',\n\t\t'sensorProbeTempOnline',\n\t\t'sensorProbeTempDegreeType',\n\t    ]).addCallback(self.translate_result).addCallback(reduce_index)\n\n\t    sensors = (self._temp_row_to_sensor(index, row)\n\t\t       for index, row in result.iteritems())\n\n\t    return [s for s in sensors if s]\n\n\tdef _temp_row_to_sensor(self, index, row):\n\t    online = row.get('sensorProbeTempOnline', 'offline')\n\t    if online == 'offline':\n\t\treturn\n\n\t    number = index[-1]\n\t    internal_name = 'temperature%s' % number\n\t    descr = row.get('sensorProbeTempDescription', internal_name)\n\n\t    mibobject = self.nodes.get('sensorProbeTempDegreeRaw')\n\t    readout_oid = str(mibobject.oid + str(index))\n\n\t    unit = row.get(\"sensorProbeTempDegreeType\", None)\n\t    if unit == 'fahr':\n\t\tunit = Sensor.UNIT_FAHRENHEIT\n\n\t    return {\n\t\t'oid': readout_oid,\n\t\t'unit_of_measurement': unit,\n\t\t'precision': 1,\n\t\t'scale': None,\n\t\t'description': descr,\n\t\t'name': descr,\n\t\t'internal_name': internal_name,\n\t\t'mib': 'SPAGENT-MIB',\n\t    }\n\nLines 6 through 10 perform the actual SNMP query against a device. The\n``get_all_sensors()`` method then delegates to the ``_temp_row_to_sensor()``\nmethod the responsibility of translating each table row into a sensor\ndictionary that can be used by the :program:`ipdevpoll` ``sensors`` plugin.\n\n``_temp_row_to_sensors()`` takes the ``index`` and ``row`` arguments.\n``index`` is the row index in the SNMP table (it is an OID suffix, in this\ncase a single-item tuple corresponding to the temperature sensor slot number).\n``row`` is a dictionary containing the collected table columns, keyed by their\nnames.\n\nExpanding these code examples to include all the sensor types provided by the\n``SPAGENT-MIB`` is left as an excercise to the reader.\n\n\nHave the sensors plugin use our new MibRetriever\n------------------------------------------------\n\nThe ``sensors`` plugin employs the configuration sections ``sensors`` and\n``sensors:vendormibs`` from :file:`ipdevpoll.conf` to decide which\nMibRetriever classes to use for discovering sensors on a device. The plugins\ndecides on a list of MIBs to query based on the type of the device under query\n(derived from the *enterprise number* in the device's ``sysObjectID`` value).\n\nAKCP's enterprise number is 3854 (`as assigned by IANA\n<http://www.iana.org/assignments/enterprise-numbers/enterprise-numbers>`_), so\nwe will use that to select our MibRetriever in the ipdevpoll config.\n\n.. code-block:: ini\n\n    [sensors:vendormibs]\n    3854 = SPAgentMib\n\nAlternatively, if you want a potentially more readable vendormibs section:\n\n.. code-block:: ini\n\n    [sensors:vendormibs]\n    KCP_INC = SPAGENT-MIB\n\nBoth versions will work equally well. The latter works because\n``VENDOR_ID_KCP_INC`` is a registered constant mapped to AKCP's enterprise\nnumber in the :py:mod:`nav.enterprise.ids` module, and our ``SPAgentMib``\nMibRetriever has been mapped to the ``SPAGENT-MIB`` module by importing the\nsmidump in its class definition.\n\nIf you implemented your MibRetriever outside of the NAV package tree, say in\nthe module :py:mod:`mynav.akcp`, you can modify the ``loadmodules`` option:\n\n.. code-block:: ini\n\n    [sensors]\n    loadmodules = nav.mibs.* mynav.akcp\n\n\nThe ``sensors`` plugin runs as part of :program:`ipdevpoll`'s ``inventory``\njob, normally every 6 hours. With these changes, adding an AKCP sensorProbe in\nSeedDB will cause the ``sensors`` plugin to discover and insert the\ntemperature sensors of this device into NAV's database. The\n:program:`ipdevpoll` ``1minstats`` job will retrieve the sensor readings once\nevery minute and send them to Graphite.\n\n.. toctree::\n    :hidden:\n\n    /api/sensor\n    /api/mibretriever\n\n.. _sensorProbe8: https://www.akcp.com/akcp-products/sensorprobe-series/sensorprobe8/\n.. _Twisted: https://twistedmatrix.com/\n.. _Deferred: http://twistedmatrix.com/documents/current/api/twisted.internet.defer.Deferred.html\n"
  },
  {
    "path": "doc/hacking/extending-nav-locally.rst",
    "content": "=======================\n Extending NAV locally\n=======================\n\nNAV provides some simple ways to hook into its behavior, without modifying NAV\ncode, by manipulating which Python modules are loaded, or manipulating Django\nsettings and templates.\n\n.. note:: Some of the paths provided here will refer to ``${configdir}``. This\n          is the NAV configuration directory, as output by the ``nav config\n          where`` command.\n\nPython search path modifications\n--------------------------------\n\nNAV adds ``${configdir}/python`` to Python's search path. This means that the\nPython interpreter that executes NAV processes will also be able to load any\nPython module from :file:`${configdir}/python/`.\n\nDjango local site settings\n--------------------------\n\nNAV's Django site settings file sits in the NAV package hierarchy,\n:py:mod:`nav.django.settings`. However, this module will use `Rob Golding's\nmethod <https://code.djangoproject.com/wiki/SplitSettings#RobGoldingsmethod>`_\nin an attempt to load local site settings from a ``local_settings`` module.\n\nBy exploiting the abovementioned search path modification, you could add your\namazing homegrown ``my.amazing.app`` to the NAV web interface by adding a\n``local_settings`` module thus:\n\n.. code-block:: python\n   :caption: ${configdir}/python/local_settings.py\n\n   LOCAL_SETTINGS = True\n   from nav.django.settings import *\n\n   INSTALLED_APPS += (\n       'my.amazing.app',\n   )\n\nJust remember that NAV does not use Django's migrations framework to define its\nSQL schemas, so you'll have to do the legwork here yourself.\n\nOverriding Django templates\n---------------------------\n\nNAV adds ``${configdir}/templates`` to its Django template search path. You can\noverride NAV's existing Django templates by placing your own in this\ndirectory - although we wouldn't recommend it, as it can easily break your\nexisting NAV site on upgrades.\n\n\nSee :doc:`web-interface-customization` for information on more integrated ways\nto hook into NAV.\n\n"
  },
  {
    "path": "doc/hacking/hacking-with-pycharm.rst",
    "content": "====================\nHacking with PyCharm\n====================\n\n`JetBrains PyCharm <http://www.jetbrains.com/pycharm/>`_ is a Python IDE with\na complete set of tools for productive development with the Python programming\nlanguage. In addition, the IDE provides high-class capabilities for\nprofessional Web development with Django framework.\n\nJetBrains used to provide NAV developers with a free open source license to\nPyCharm, but their open source policy has since changed. Sikt is now left to\npay an annual license subscription for a few PyCharm licenses, and these are\nreserved for Sikt employees.\n\nConfiguring PyCharm for use with NAV\n------------------------------------\n\nHere are some tips for configuring PyCharm for efficient NAV development.\n\nRunning unit tests automagically on code changes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nClick :menuselection:`Run --> Edit Configurations`:\n\n* Click the **+** sign on the top left of the dialog to add a new run\n  configuration.\n* Select :menuselection:`Python tests --> py.test` in the appearing menu.\n\nRun configuration options should be the following:\n\n:Name: NAV UNIT TESTS\n:Target: :file:`tests/unittests`\n:Python interpreter: Select the correct interpreter for your project.\n:Working directory: Set this to the root of your checked out source code.\n\nIf you are developing using Vagrant or Docker, make sure to select a *remote Python\ninterpreter* on your virtual box, otherwise make sure you have all NAV\ndependencies available to your selected interpreter.\n\nClick :guilabel:`Ok` to save your changes.\n\nGenerate documentation\n^^^^^^^^^^^^^^^^^^^^^^\n\nClick :menuselection:`Run --> Edit Configurations`:\n\n* Click the **+** sign on the top left of the dialog to add a new run\n  configuration.\n* Select :menuselection:`Python docs --> Sphinx task` in the appearing menu.\n\nRun configuration options should be the following:\n\n:Name: Build NAV Sphinx docs\n:Command: html\n:input: :file:`doc`\n:output: :file:`doc/html`\n:Project interpreter: Select the correct interpreter for your project.\n:Working directory: Set this to the root of your checked out source code.\n\nClick :guilabel:`Ok` to save your changes. After run the new Sphinx task, you\nshould be able to access the documentation under :file:`doc/html` in your\ncheckout.\n\nKarma integration\n^^^^^^^^^^^^^^^^^\n\n.. NOTE:: The Karma plugin is only available under PyCharm 3.0 and later.\n\nSelect :menuselection:`File --> Settings` from the menu. Go to\n:guilabel:`Plugins` under :guilabel:`IDE Settings` and click the\n:guilabel:`Install Jetbrains plugin` button.\n\nSelect and install the *Karma* plugin from the list. A restart of the IDE\nmight be necessary.\n\nClick :menuselection:`Run --> Edit Configurations`:\n\n* Click the **+** sign on the top left of the dialog to add a new run\n  configuration.\n* Select :menuselection:`Karma` in the appearing menu.\n\nRun configuration options should be the following:\n\n:Node.js interpreter: should point to wherever your :program:`node` binary is\n                      installed.\n:Karma Node.js package: :file:`python/nav/web/static/js/node_modules/karma`\n:Configuration file: :file:`python/nav/web/static/js/test/karma.conf.js`\n\nNow you should be able to run both tests and tests with coverage.\n"
  },
  {
    "path": "doc/hacking/hacking.rst",
    "content": "=====================\nHacker's guide to NAV\n=====================\n\nIf you are contributing code to Network Administration Visualized,\nplease read this first.\n\n\nContributing to NAV\n===================\n\nOriginally, NAV was a closed source project, initiated by the Norwegian\nUniversity of Science and Technology (NTNU), and eventually sponsored by Sikt\n(back then, known as *Uninett*) on behalf of the Norwegian higher education\ncommunity.  In 2004, however, NTNU and Sikt started distributing NAV under the\n*GNU General Public License*, making it a truly free software system.\n\nWhile Sikt is still the main contributor to NAV, developing NAV to support the\nneeds of the Norwegian higher education community, contributions from third\nparties are highly appreciated.\n\nWe communicate mainly through mailing lists and GitHub_. At times, Sikt also\narranges workshops and gatherings for its customers: Norwegian universities,\nuniversity colleges and research institutions.\n\nTo contribute:\n\nGo to https://nav.uninett.no/ and\n\n* Join the mailing lists.  The ``nav-dev`` mailing list in\n  particular is for discussing NAV development.  So far, this is a\n  low traffic list. We can only hope this will change ;-)\n* Get a copy of the latest development sources by cloning the\n  Git-repository at GitHub_.\n* Take a look at the `project reports from previous development projects at\n  NTNU <https://nav.uninett.no/wiki/navprojects>`_ (NAVMe, NAVMore, tigaNAV\n  and others) - design specifications and other useful bits of historic NAV\n  information is mostly to be found in these. Unfortunately, some of the\n  oldest project documentation is in Norwegian only. Do not hesitate to ask\n  for help on the mailing lists.\n\n.. _submitting_patches:\n\nSubmitting pull requests / patches\n----------------------------------\n\nUnless you are submitting one-off fixes for bugs and small issues,\nplease take the time to discuss your change proposals on the\n**nav-dev** mailing list.  This will increase the chances of having\nyour patches accepted.\n\nBase your patches on the relevant Git branches. If you are submitting\na patch for an issue that affects the *latest stable series*, base your patch\non that series branch (``<major>.<minor>.x``). If you are submitting\npatches containing *new features*, base them on the ``master`` branch.\n\nPlease submit your changes in the form of a **pull request** against the\n`official NAV Github repository`__. From there, we can review and\ncomment on your changes. The entire CI test suite will be automatically\nrun against your pull request, and the automatic CLA signing process is\ninitiated by the CLA Assistant.\n\n\nContributor License Agreement\n-----------------------------\n\nTo contribute code to NAV, you need to sign our contributor license\nagreement, straightforwardly based on The Free Software Foundation's\n`Fiduciary License Agreement 2.0\n<https://fsfe.org/activities/ftf/fla.en.html>`_.\n\nTo streamline the process, we ask that you *sign it digitally*, as part\nof the GitHub pull request process. We have implemented this process\nthrough the help of `CLA assistant`_. The assistant will allow you to\ndigitally sign the agreement using your Github account. If you create a\npull request against the NAV repository and have not previously signed\nour agreement, the assistant will automatically post a comment on your\npull request with instructions on how to do so.\n\n`The full agreement text can be read directly from the GitHub gist used\nby the CLA assistant.\n<https://gist.github.com/lunkwill42/0ee830087cb7c4ebfab814d34f406ef5>`_\n\n\nRationale\n~~~~~~~~~\n\nNAV is a software project primarily made by Sikt. Sikt is a government agency\nthat provides shared services in research and education in Norway, which\nincludes operating Norway's national research and education network.\n\nDue to our experiences with FOSS license compatibility issues, and with\nswitching the 20-year old NAV project explicitly from the GPLv2 to the\nGPLv3 license, we have decided to implement a *contributor license\nagreement* for NAV. This will help us ease the transition if we in the\nfuture find we need to switch to yet another FOSS license to keep the\nproject going.\n\nFor the sake of transparency, we've chosen FLA-2.0, which is a fairly\nstandardized agreement. If you already know the terms of the FLA-2.0,\nyou won't need to read an entirely new license agreement just to\ncontribute to NAV.\n\n.. _CLA assistant: https://cla-assistant.io/\n\nAdding a changelog entry\n------------------------\n\nWe are using `towncrier`_ to automatically produce the changelog from separate files\nat the time of a release. These files can be found in the folder :file:`changelog.d/`.\nEvery entry should explain what a change does in terms that are understandable for end\nusers.\n\nWhen creating a pull request you should also add such a file.\n\nThe name of the file consists of three parts separated by a period:\n\n1. The identifier: either the issue number (in case the pull request fixes that issue)\n   or the pull request number. If you don't want to add a link to the resulting\n   changelog entry then a + followed by a unique short description.\n2. The type of the change: we use security, removed, deprecated, added, changed and\n   fixed.\n3. The file suffix, e.g. .md, towncrier does not care which suffix a fragment has.\n\nSo an example for a file name related to an issue/pull request would be\n:file:`214.added.md` or for a file without corresponding issue\n:file:`+fixed-pagination-bug.fixed.md`.\n\nThis file can either be created manually with a file name as specified above and the\nchangelog text as content or you can use towncrier to create such a file as following:\n\n.. code-block:: console\n\n   $ towncrier create -c \"Changelog content\" 214.added.md\n\nWhen opening a pull request there will be a check to make sure that a news fragment is\nadded and it will fail if it is missing.\n\n.. _towncrier: https://towncrier.readthedocs.io/\n\n\nDirectory layout\n================\n\nA rough guide to the source tree:\n\n=================================  =================================================================\nDirectory                          Description\n=================================  =================================================================\n:file:`contrib/`                   User contributed NAV tools. NAV doesn't depend on these, and any\n                                   maintenance of them is left up to the original developers. We do\n                                   not offer support for these tools.\n:file:`doc/`                       User and developer documentation.\n:file:`tests/`                     Automated tests.\n:file:`tools/`                     Scripts for aiding in various development, build and release\n                                   processes.\n:file:`python/`                    Python source code.\n:file:`python/nav/etc/`            Example/initial configuration files.\n:file:`python/nav/web/sass/`       SCSS stylesheets.\n:file:`python/nav/web/static/`     Static media such as CSS stylesheets, images and JavaScript to be\n                                   served by a webserver.\n:file:`python/nav/web/templates/`  Main/global Django HTML templates. More be located in individual\n                                   sub-packages/Django apps.\n:file:`python/nav/models/sql`      SQL schema definitions.\n=================================  =================================================================\n\n\nDevelopment languages and frameworks\n====================================\n\nAll NAV back-end code is written in **Python**. The web-based user\ninterface is implemented using the Python-based **Django** framework. In\naddition, there is an increasing amount of **Javascript** in the web-based\nuser interface.\n\nIf you wish to contribute something really useful that doesn't use Python,\nwe may consider including it in the :file:`contrib/` directory.\n\n\nCoding style\n============\n\nNAV code should adhere to the Python style guide documented in\n:pep:`8`. Ruff_ and SonarCloud_ are used to automatically validate much of\nthese coding styles in our CI system.\n\nMore importantly, all Python code in NAV is automatically formatted using\nRuff_, a great tool for both linting and automatically formatting your code,\nobviating the need for discussing most coding style issues in code reviews.\n\nConventions for writing good Python documentation strings (a.k.a. \"docstrings\")\nare immortalized in :pep:`257`.\n\nMuch of the legacy NAV code was, however, written without using any specific\nguidelines for coding style. While all the old code has been formatted\nautomatically using Ruff_, other :pep:`8` conventions aren't necessarily\nenforced here. We always accept patches that clean existing code.\n\nPre-commit hooks and Ruff\n-------------------------\n\nTo ensure all Python code is automatically formatted using Ruff_, we employ\nthe pre-commit_ framework. This framework ensures our pre-commit rules (as\nspecified in :file:`.pre-commit-config.yaml`) are run when you issue the ``git\ncommit`` command. This includes automated formatting and simple linting rules to\nuphold our coding standards.\n\nOnce you have checked out the NAV source code repository from Git, run the\nfollowing commands to enable our pre-commit hooks:\n\n\n.. code-block:: sh\n\n   pip install pre-commit\n   pre-commit install\n\nIf your Python code is not already formatted according to Ruff's rules when you\nissue ``git commit``, your code will be automatically formatted using Ruff, and\nthe commit will initially fail, allowing you to inspect the automated changes\nbefore attempting to commit again.\n\n.. note:: The NAV codebase has been reformatted multiple times using automated\n          tools. Every commit that potentially reformats the whole codebase is\n          listed in :file:`.git-blame-ignore-revs`. Git can be configured to\n          explicitly ignore these formatting commits when running ``git\n          blame``. See `this blog post for more information\n          <https://www.moxio.com/blog/43/ignoring-bulk-change-commits-with-git-blame>`_.\n          *TL;DR*: Run :samp:`git config blame.ignoreRevsFile\n          .git-blame-ignore-revs`\n\nPython boilerplate headers\n--------------------------\n\nWe will only accept code into NAV if it can be licensed under GPL v3.  Each\nPython source code file should contain the following boilerplate at the top::\n\n    #\n    # Copyright (C) 2018,2019 You or your employer\n    #\n    # This file is part of Network Administration Visualized (NAV).\n    #\n    # NAV is free software: you can redistribute it and/or modify it under the\n    # terms of the GNU General Public License version 3 as published by the Free\n    # Software Foundation.\n    #\n    # This program is distributed in the hope that it will be useful, but WITHOUT\n    # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n    # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n    # more details.  You should have received a copy of the GNU General Public\n    # License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n    #\n\nIn this case, *\"Somebody\"* is normally you personally, or your employer,\ndepending on who legally owns the copyright of your contribution.\n\nIf a file uses non-ASCII characters, it **must** be encoded as *UTF-8*, and an\nencoding statement should be inserted at the top::\n\n    # -*- coding: utf-8 -*-\n\nJavascript\n----------\n\nWhen writing Javascript code, try to focus on modules, not pages. If the\ncode is HTML-related, it should take selectors or objects as input and\nconcern itself solely about those. This makes for much easier testing and\nreuse. And of course - write the tests first.\n\nWhen the module is done you write a controller for the page that plugs the\nneeded plugins to the page elements. This should fail gracefully if the\nneeded elements are not present.\n\nNAV's Javascript uses RequireJS_ - use this to create modules and specify\ndependencies.\n\nPro tip is to create :file:`require_config.dev.js` in :file:`python/nav/web/static/js/``\nand add the following configuration to RequireJS:\n\n.. code-block:: javascript\n\n   require.urlArgs = \"bust=\" +  (new Date()).getTime();\n\nThis makes sure your not using cached resources in your browser when\ndeveloping, something browsers love to do! See `config-urlArgs\n<http://requirejs.org/docs/api.html#config-urlArgs>`_ in the RequireJS\ndocumentation for details. :file:`require_config.dev.js` is listed in the\nrepository :file:`.gitignore` file.\n\nCSS\n---\n\nNAV uses Sass for styling. If you want to modify the styling,\nyou can do so by editing the SCSS files in the :file:`python/nav/web/static/scss`\ndirectory. To build the CSS assets, you will need to have Node.js\nand npm installed. Once you have these installed, you can run\nthe following command to build the CSS files::\n\n  npm install\n  npm run build:sass\n\nThis will build the CSS assets and place them in the :file:`python/nav/web/static/css`\ndirectory. If you want to watch for changes in the SCSS files and rebuild the\nCSS assets automatically, you can run the following command instead::\n\n  npm run watch:sass\n\n\n\nDatabase\n========\n\nNAV uses *PostgreSQL* as its database backend.  Namespaces (schemas) are\nemployed to logically group tables and relations.  NAV versions prior\nto 3.5 employed separate PostgreSQL databases instead of namespaces.\n\nThe namespaces currently in use are:\n\n=========  ===================================================================\nNamespace  Description\n=========  ===================================================================\nmanage     The core knowledge database of NAV, containing all sorts of\n           information about the monitored IP Devices, events, alerts,\n           network topology and machine tracking data.\nprofiles   Contains NAV user accounts and groups, user preferences and alert\n           profiles.\nlogger     Anything related to NAV's syslog parser/browser system.\narnold     The port detention system Arnold stores it's data here.\nradius     Radius accounting logs, updated directly by FreeRadius' PostgreSQL\n           module.\n=========  ===================================================================\n\n.. note:: **Django vs. the database schema**\n\n          NAV existed long before Django, which was \"shoe-horned\" into the\n          legacy NAV application at a later stage. As a consequence of this,\n          NAV is quite tied to PostgreSQL as the database backend, and does not\n          always present itself as as a typical Django application.\n\n\t  The most obvious difference, is that NAV does not employ Django's ORM\n\t  for defining the initial schema or the schema migrations. NAV\n\t  implements its schema definitions as pure SQL scripts, and implements\n\t  a home-grown system for schema migrations, which also written as pure\n\t  SQL.\n\n\nConnecting to the database (Python)\n-----------------------------------\n\nRaw SQL / Legacy database connections\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo obtain a raw SQL connection to the NAV database, use the legacy API\naccordingly, e.g.::\n\n    import nav.db\n    # Get a connection to the NAV database\n    connection = nav.db.getConnection('default')\n\nThe above code will open a connection to NAV's database, or, if a\nprevious connection with these parameters is already open in the current\nprocess, returns the already existing connection from a connection\npool.\n\nThe ``default`` parameter is there for legacy reasons; it specifies the\nname of a subsystem. The :file:`db.conf` file allows configuration of\nseparate database users for each subsystem (known as a *script* in\n:file:`db.conf`) of NAV. The default :file:`db.conf` file specifies a\ndatabase user for a subsystem called ``default``, and also specifies the\nsame database user for all known subsystem names. At present, using a\nsubsystem name that is not configured in :file:`db.conf` will cause\n:py:func:`nav.db.getConnection()` to revert to using the ``default`` name.\n\nDjango ORM\n~~~~~~~~~~\n\nSince version 3.5, NAV has provided Django ORM models for its database.\nUnless you have very specific requirements, only solvable by using pure\nSQL, you would be best served by accessing the database via the Django\nORM.\n\nMost of these models are defined in submodules in in the\n:py:mod:`nav.models` package (since NAV was not originally divided into\nseparate \"Django applications\").\n\n\nChanging the schema / migrations\n--------------------------------\n\nThe baseline schema is located in :file:`python/nav/models/sql/baseline/` - the\n:program:`navsyncdb` program is responsible for running this when creating\na new database. To make a schema change, you **do not** change the\nbaseline, but go to the :file:`python/nav/models/sql/changes/` directory and create a new\nschema change script there.\n\nSchema change scripts as numbered, using the following pattern::\n\n    sc.<major>.<minor>.<point>.sql\n\nThe ``<major>`` and ``<minor>`` numbers usually correspond to the major and\nminor number of the next NAV release. The ``<point>`` number is a sequence\nid - pick the next free number when creating a schema change script.\n\nRemember these points when creating a schema change script:\n\n* Create separate change scripts for unrelated schema changes.\n* Remember to write SQL to **migrate** existing data, if necessary.\n* Do not use transactional statements - :program:`navsyncdb` will take care\n  of that.\n\nTo apply your change scripts, just run :program:`navsyncdb`. It will look\ninside the ``schema_change_log`` table to see which change scripts have\nalready been applied, and it will detect your new change script and apply\nthis to the database.\n\n.. NOTE:: When changing the schema, don't forget to update the Django\n          models in the :py:mod:`nav.models` package. An integration\n          test exists to verify that the Django models can at least be used\n          to run proper SELECT statements against the database.\n\n.. WARNING:: Do not set ``OWNER`` on anything in the schema!\n          If using Django's own migration system to generate a schema\n          for you (via sqlmigrate) or some other helper, you will have to look\n          for and alter or remove any lines that explicitly set OWNER.\n\n          For Django that is any line looking like this:\n\n          ``ALTER TABLE some_tablename OWNER TO something;``\n\n\nVersion Control\n===============\n\nNAV uses Git_ for distributed version control. The official repository\nis located at GitHub_ . Fork that and submit pull-requests for review.\n\n\nPush access\n-----------\n\nPush access to the official repositories is limited to developers\nemployed or commissioned by Sikt.\n\nTesting and Continuous Integration\n==================================\n\nMuch of NAV is **legacy code**, as defined by *Michael C. Feathers*: \"Code that\nhas no tests\".  Our goal is to improve this, and since about 2010 our test\ncoverage has been slowly increasing. As of September 2024, our coverage is\nover 60%, and we aim to increase it further.\n\nAll test suites (except those for Javascript) are located in the\n:file:`tests/` subdirectory.\n\nRunning tests\n-------------\n\nWe use pytest_ as our test runner, and tox_ to enable running the test suites\nin matrix environments for different combinations of Python and Django\nversions. Our test suite is divided into two parts (``unittests`` and\n``integration``).  The unit test suite can usually be run just fine from your\nlocal computer as long as tox_ and pytest_ are available.  The integration test\nsuite (which includes functional Playwright-based browser tests) requires\naccess to a PostgreSQL server.  The standard ``PG*`` environment variables\n(``PGHOST``, ``PGPORT``, ``PGUSER``, ``PGPASSWORD``) must point to a user with\n``CREATEDB`` privileges, as the test setup will create a temporary database.\nThe project's devcontainer takes care of all of this out of the box.  Beyond\nPostgreSQL, each conftest configures the remaining environment automatically\nvia :file:`tests/setup_test_config.py`.\n\nTo run integration tests (including functional browser tests):\n\n.. code-block:: console\n\n   $ tox run -e integration-py311-django42\n   ...\n\nTo run only the functional browser tests:\n\n.. code-block:: console\n\n   $ tox run -e integration-py311-django42 -- tests/functional\n   ...\n\n\nJavascript testing\n------------------\n\nFor JavaScript code, we use Karma_ as a testrunner, Mocha_ as the\ntesting framework and Chai_ as the assertion library. Assuming you are\ninside the Docker CI image:\n\n.. code-block:: sh\n\n   tox -e javascript\n\nThis will take care of installing the required JS modules using npm, and running the\ntest suite in headless Chrome.\n\nAll tests are located under :file:`python/nav/web/static/js/test/`. Create new tests\nthere. For syntax, assertions and related stuff take a look at the tests\nalready there and the relevant documentation linked above.\n\n\n\nGitHub and Continuous Integration\n---------------------------------\n\nWe use `GitHub Actions`_ workflows for continuous integration testing of\nNAV. Multiple workflows are defined in :file:`.github/workflows/`. Most\nof these are automatically run every time a change is pushed to a branch\nin the offical NAV Github repository, or when a pull request is opened\nagainst this repository.\n\nDevelopment environments\n========================\n\nA complete NAV development environment has many dependencies, and not all are\nnecessarily easy to satisfy on an arbitrary developer's computer.  We have\ntherefore built two different development environment specifications based on\nDocker Compose, which should make running NAV for development smoother.\n\n1. The oldest of these is a plain Docker Compose specification. Read\n   :doc:`using-docker` for further instructions.\n2. The newest of them is a `devcontainers`_ specification, which should\n   integrate more smoothly into most popular IDEs for Python developers (such\n   as PyCharm or VS Code).  Read :doc:`using-devcontainers` for further\n   instructions.\n\nTips and tricks\n===============\n\nMake fixtures for integration testing\n-------------------------------------\n\nUse pytest fixtures to create test data for integration tests. Fixtures can\ndepend on other fixtures, as shown in this example from\n:file:`tests/integration/conftest.py`:\n\n.. code-block:: python\n\n   @pytest.fixture()\n   def localhost(management_profile):\n       from nav.models.manage import Netbox, NetboxProfile\n\n       box = Netbox(\n           ip='127.0.0.1',\n           sysname='localhost.example.org',\n           organization_id='myorg',\n           room_id='myroom',\n           category_id='SRV',\n       )\n       box.save()\n       NetboxProfile(netbox=box, profile=management_profile).save()\n       yield box\n       box.delete()\n\nThe ``localhost`` fixture depends on ``management_profile``, which pytest\nautomatically creates first. Shared fixtures like these in :file:`conftest.py`\ncan be used across multiple test modules.\n\nFixtures that create database objects should in many cases depend on the ``db``\nfixture (either directly or transitively through another fixture). This wraps\neach test in a database transaction that is rolled back after the test\ncompletes, so explicit cleanup code is not strictly necessary:\n\n.. code-block:: python\n\n   @pytest.fixture\n   def my_netbox(db):\n       box = Netbox(...)\n       box.save()\n       yield box\n       # No cleanup needed - transaction is rolled back automatically\n\nUse ``get_or_create`` for objects that might already exist in the test database\n(e.g. rooms or organizations created by :file:`test-data.sql`).\n\nForce the custom Django 500 error handler to run\n------------------------------------------------\n\nIf working on the custom Django 500 error handler view,\n:py:func:`nav.django.views.custom_500`, a 500 error can be produced\nintentionally by browsing the URI ``/500/`` on your NAV installation. This view\nwill by default only be available when logged in as a NAV administrator.\n\n.. _GitHub: https://github.com/Uninett/nav\n__ Github_\n.. _RequireJS: http://requirejs.org/\n.. _Git: https://git-scm.com/\n.. _pytest: http://pytest.org/\n.. _tox: https://tox.readthedocs.io/en/latest/\n.. _Node.js: http://nodejs.org/\n.. _GitHub Actions: https://docs.github.com/en/actions\n.. _Karma: https://github.com/karma-runner/karma-mocha\n.. _Mocha: http://mochajs.org/\n.. _Chai: http://chaijs.com/\n.. _pre-commit: https://pre-commit.com/\n.. _Ruff: https://docs.astral.sh/ruff/\n.. _SonarCloud: https://sonarcloud.io/\n.. _devcontainers: https://containers.dev/\n"
  },
  {
    "path": "doc/hacking/index.rst",
    "content": "=============\n Hacking NAV\n=============\n\n.. toctree::\n   :maxdepth: 1\n\n   hacking\n   hacking-with-pycharm\n   using-devcontainers\n   using-docker\n   javascript\n   release-procedure\n   writing-a-servicemon-plugin\n   adding-environment-probe-support\n   /howto/using_the_api\n   extending-nav-locally\n   web-interface-customization\n   /api/searchproviders\n   snmp-tunnels\n"
  },
  {
    "path": "doc/hacking/javascript.rst",
    "content": "==================\nJavascript hacking\n==================\n\nWhen writing JavaScript code, try to focus on modules, not pages. In short:\nfollow the `module pattern\n<http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html>`_.\n\nIf the code is HTML-related, it should take selectors or objects as input and\nconcern itself solely with those. This makes for much easier testing and\nreuse. And of course: Write the tests first.\n\nWhen the module is done you write a controller for the page that plugs the\nneeded plugins to the page elements. This should fail gracefully if the needed\nelements are not present.\n\nWhen this documentation uses the term *module*, it refers to the\n:abbr:`AMD (Asynchronous Module Definition)`\n(`see API docs <https://github.com/amdjs/amdjs-api/wiki/AMD>`__) principle,\nwhich follows the *module pattern*. NAV's JavaScript code uses\n`RequireJS <http://requirejs.org/>`__ to load modules and specify their\ndependencies. RequireJS provides a\n`rationale for why using AMD is a good idea <http://requirejs.org/docs/whyamd.html>`__.\n\n\n\nAvoiding caching\n================\n\nWe highly suggest you create :file:`python/nav/web/static/js/require_config.dev.js` and enable\nDjango debug in :file:`etc/nav.conf` when developing.\n\nMake sure to put this in your RequireJS configuration file:\n\n.. code-block:: javascript\n\n  require.urlArgs = \"bust=\" +  (new Date()).getTime();\n\nThis makes sure you're **not using** cached resources in your browser when\ndeveloping, something many browsers love to do! See `the RequireJS\ndocumentation on using urlArgs <http://requirejs.org/docs/api.html#config-urlArgs>`_\nfor details.\n\nThe :file:`python/nav/web/static/js/require_config.dev.js` is in the global Git ignore\nlist (file:`.gitignore`).\n\n\nJavascript testing\n==================\n\nWe use `Karma <http://karma-runner.github.io/>`__ as our Javascript test runner.\nSee :file:`python/nav/web/static/js/test/*` for examples on how to write tests using Karma with\n*Mocha*/*Chai*.\n\nJavascript hierarchy layout\n===========================\n\nJavaScript sources are placed under :file:`python/nav/web/static/js/` under NAV's SCM root.\n\nIn the JavaScript root directory (:file:`python/nav/web/static/js/`) there should normally\nonly be global configuration files for *RequireJS*, *jshint*, etc.\n\n::\n\n  python/nav/web/static/js\n  |-- extras/\n  |-- geomap/\n  |-- libs/\n  |-- resources/\n  |-- src/\n  `-- test/\n\n:file:`extras/`\n  contains special dependencies and tools that are\n  useful for JavaScript hacking, but which aren't necessarily implemented using\n  JavaScript themselves. As of this writing there is only ``downloadify``, which\n  adds support for a *save-as dialog* for asynchronous download requests made\n  from JavaScript.\n\n:file:`geomap/`\n  contains JavaScript files related to geomap module in NAV.\n\n:file:`libs/`\n  contains vendored 3rd party libraries (both *AMD* and *non-AMD* libraries)\n  which we use in NAV. These are managed via ``tools/vendor.py`` (see\n  :ref:`managing-vendored-js-libraries`). **Make sure** you add the JavaScript\n  as a shimmed library in :file:`python/nav/web/static/js/require_config.*.js`\n  **if it is not** an *AMD* library.\n\n:file:`resources/`\n  contains resources that should be available under the Karma testing\n  environment. :file:`python/nav/web/static/js/resources/libs/text.js` is such a module which\n  is required to be available in such an environment to run tests with\n  templates that get loaded using the *AMD* pattern.\n\n:file:`src/`\n  contains the source code to NAV modules which use *RequireJS* for dependency\n  handling.\n\n:file:`src/netmap/`\n  is the **Netmap** Backbone application.\n\n:file:`src/plugins/`\n  contains re-usable JavaScript plugins.\n\nCSRF Token Handling\n===================\n\nWhen making AJAX requests that modify data (POST, PUT, DELETE), you must include Django's CSRF token for security.\n\nGetting the CSRF Token\n-----------------------\n\n**Method 1: From a hidden form (Recommended)**\n\n.. code-block:: javascript\n\n   const csrfToken = $('#some-form-id input[name=\"csrfmiddlewaretoken\"]').val();\n\n**Method 2: From any form on the page**\n\n.. code-block:: javascript\n\n   const csrfToken = $('[name=csrfmiddlewaretoken]').val();\n\nUsing CSRF Tokens in AJAX Requests\n-----------------------------------\n\nThere are three ways to include a CSRF Token in the requests.\n\n**Method 1: With jQuery POST data object:**\n\nThis method includes the CSRF token directly in the POST data. This is the most straightforward approach when you have simple form data.\n\n.. code-block:: javascript\n\n   $.post({\n       url: '/some/endpoint/',\n       data: {\n           'field': 'value',\n           'csrfmiddlewaretoken': csrfToken\n       }\n   });\n\n**Method 2: With jQuery headers:**\n\nThis method sends the CSRF token in the HTTP headers using Django's expected header name. This is useful when posting complex data like FormData objects or JSON.\n\n.. code-block:: javascript\n\n   $.post({\n       url: '/some/endpoint/',\n       data: formData,\n       headers: {\n           'X-CSRFToken': csrfToken\n       }\n   });\n\n**Method 3: With serialized form data:**\n\nThis method does not require getting the token from the template explicitly, but is done as part of native HTML form processing. The CSRF token is automatically included when the form is serialized.\n\n.. code-block:: javascript\n\n   // If posting a complete form, the token is included automatically\n   $.post(url, $('#my-form').serialize());\n\nIncluding CSRF Token in Templates\n----------------------------------\n\nDjango templates provide the ``{% csrf_token %}`` template tag to automatically include the CSRF token in forms. This is the recommended approach for standard form submissions.\n\n**Basic form with CSRF token:**\n\nThis is the most common pattern for regular form submissions. The CSRF token is included automatically when the form is submitted normally.\n\n.. code-block:: html\n\n   <form method=\"post\" action=\"{% url 'some-endpoint' %}\">\n       {% csrf_token %}\n       <input type=\"text\" name=\"field_name\" value=\"\">\n       <input type=\"submit\" value=\"Submit\">\n   </form>\n\n**Hidden form for JavaScript access:**\n\nThis pattern creates a hidden form solely to provide JavaScript access to the CSRF token. This is useful when you need to make AJAX requests from JavaScript but don't have a visible form on the page.\n\n.. code-block:: html\n\n   <form id=\"example-form\" style=\"display: none;\">\n       {% csrf_token %}\n   </form>\n\n**Multiple forms on the same page:**\n\nWhen you have multiple forms that perform different actions, each form needs its own CSRF token. This example shows two example forms for resource operations - one for renaming and one for deleting.\n\n.. code-block:: html\n\n   <form id=\"form-rename-resource\" method=\"post\" action=\"{% url 'rename-resource' resource.pk %}\">\n       {% csrf_token %}\n       <input type=\"text\" name=\"resource-name\" value=\"{{ resource.name }}\">\n       <input type=\"submit\" value=\"Rename resource\">\n   </form>\n\n   <form id=\"form-delete-resource\" method=\"post\" action=\"{% url 'delete-resource' resource.pk %}\">\n       {% csrf_token %}\n       <input type=\"submit\" value=\"Delete resource\">\n   </form>\n\n**HTMX forms with CSRF token:**\n\nWhen using HTMX for dynamic content updates, the CSRF token is still required for POST requests. HTMX will automatically include the token from the form when making the request.\n\n.. code-block:: html\n\n   <form method=\"post\"\n         hx-post=\"{% url 'some-endpoint' %}\"\n         hx-target=\"#result-container\">\n       {% csrf_token %}\n       <input type=\"text\" name=\"data\">\n       <button type=\"submit\">Submit</button>\n   </form>\n\nThe ``{% csrf_token %}`` tag renders as a hidden input field with name ``csrfmiddlewaretoken`` that JavaScript can access to include in AJAX requests.\n\n.. _managing-vendored-js-libraries:\n\nManaging vendored JS libraries\n==============================\n\nThird-party JavaScript libraries in :file:`libs/` are vendored as minified\nfiles and tracked as npm dependencies in :file:`package.json` for version\nmanagement. The ``tools/vendor.py`` script automates installing, updating and\nremoving these files.\n\nListing vendored libraries\n--------------------------\n\nTo see all vendored libraries and their versions:\n\n.. code-block:: bash\n\n   python tools/vendor.py list\n\nSyncing all libraries\n---------------------\n\nAfter a fresh clone or when :file:`package.json` has changed, install npm\ndependencies and sync the vendored files:\n\n.. code-block:: bash\n\n   npm install --legacy-peer-deps\n   python tools/vendor.py sync\n\nAdding a new library\n--------------------\n\n.. code-block:: bash\n\n   python tools/vendor.py add d3 --version 7.9.0\n\nThis installs the package via npm, copies the minified file to :file:`libs/`\nas ``d3-7.9.0.min.js``, and prints the path entry to add to\n:file:`require_config.js`::\n\n   Added: d3-7.9.0.min.js\n   Add to require_config.js: \"d3\": \"libs/d3-7.9.0.min\",\n\nAdd the printed entry to the ``paths`` object in\n:file:`python/nav/web/static/js/require_config.js`. If the library is not an\nAMD module, also add a ``shim`` entry.\n\nUpdating a library\n------------------\n\n.. code-block:: bash\n\n   python tools/vendor.py update d3 --version 7.10.0\n\nThis replaces the old minified file, updates :file:`require_config.js`\nreferences automatically, and pins the new version in :file:`package.json`.\nOmit ``--version`` to update to the latest release.\n\nRemoving a library\n------------------\n\n.. code-block:: bash\n\n   python tools/vendor.py remove d3\n\nThis removes the minified file from :file:`libs/`, removes the matching entry\nfrom :file:`require_config.js`, and uninstalls the npm package.\n"
  },
  {
    "path": "doc/hacking/release-procedure.rst",
    "content": "=========================================\nChecklist for releasing a new NAV version\n=========================================\n\n.. highlight:: sh\n\nCI status check\n---------------\n\n* Verify that the GitHub Actions workflows (at\n  https://github.com/Uninett/nav/actions ) related to the current stable branch\n  are all green.\n* If any tests are failing, these must be resolved before moving forward.\n\n\nReview milestone for next release on GitHub\n-------------------------------------------\n\n* Check the list of issues targeted to the upcoming milestone at\n  https://github.com/Uninett/nav/milestones .\n* Are all the targeted bugs closed?\n\n  * Please remember that the series branch must be merged to ``master`` for\n    the related issues to be automatically closed by GitHub.\n\n* Unless any unfixed issues are showstoppers, untarget them from this milestone\n  to remove clutter.\n\nGetting the code\n----------------\n\n* Start by cloning the latest stable branch (or use ``git fetch; git checkout\n  4.8.x`` to update your existing clone), e.g. 4.8.x::\n\n    git clone -b 4.8.x git@github.com:UNINETT/nav.git\n    cd nav\n\nEnsure generated docs are up to date\n------------------------------------\n\nSome documentation source files need to be built using a running PostgreSQL\ndatabase. If any changes have been made to the default event- and\nalert-hierarchies provided by NAV, these documentation source files need to be\nupdated and checked into Git.\n\nIf you have a full dev environment running (such as the environment defined by\n:file:`docker-compose.yml`), use the following to generate new docs and verify\nwhether they have changed::\n\n    make doc\n    git status\n\nIf you see files under the :file:`doc` directory were changed, these changes\nneed to be checked into Git to ensure the documentation is up to date for the\nnew release.\n\n\nUpdating changelog and release notes\n------------------------------------\n\nTowncrier can be used to automatically produce a changelog using the\n:file:`changelog.d` directory which contains files describing changes since the last release.\n\nTo add these changes to :file:`CHANGELOG.md` simply run\n\n.. code-block:: console\n\n  $ towncrier build --version {version}\n\nThis will also delete all files in :file:`changelog.d/`.\n\nTo preview what the addition to the changelog file would look like add the flag\n``--draft``.\nA few other helpful flags are:\n* `date DATE` - set the date of the release, default is today\n* `keep` - keep all news fragments\n\nCommit the changes using\n\n.. code-block:: console\n\n  $ git commit -m 'Update changelog for the upcoming X.Y.Z release'\n\nBump and tag the version number (and sign the tag) using ``version.sh``, and\npush the changes back to the official repository:\n\n.. code-block:: console\n\n  $ ./version.sh -t\n  $ git push --tags\n\n\nAnnouncing the release\n----------------------\n\nUse the announcement script to generate release artifacts from the changelog:\n\n.. code-block:: console\n\n  $ ./tools/release/announcement.py --dry-run\n\nThis parses :file:`CHANGELOG.md` and generates three outputs:\n\n* **GitHub release notes** - Markdown for the GitHub release page\n* **Blog post** - Hugo markdown for the NAV landing page\n* **Email** - Plain text announcement with numbered link references\n\nTo preview without writing files, use ``--dry-run``. To generate specific\noutputs only, use ``--github``, ``--blog``, or ``--email``.\n\nFor security releases, add ``--security`` to adjust the email subject and\nintroductory text.\n\nThe ``--enact`` option automates the release announcement process:\n\n* Copies the blog post to the landing page repo and stages it in git\n* Creates a draft GitHub release and opens the edit page in a browser\n* Opens your email client with the announcement ready to send\n\n.. note::\n\n   The ``--enact`` option requires the `GitHub CLI <https://cli.github.com/>`_\n   (``gh``) to be installed and authenticated in order to create GitHub releases.\n\nConfiguration (Debian versions, URLs, email settings) is in\n:file:`tools/release/announcement.toml`.\n\nAfter running with ``--enact``:\n\n1. Review and publish the draft GitHub release\n2. Review, commit and push the blog post in the landing page repo\n3. Review and send the email announcement to ``nav-users``\n"
  },
  {
    "path": "doc/hacking/snmp-tunnels.rst",
    "content": "=========================================\nEstablishing SNMP tunnels using socat/SSH\n=========================================\n\nWhile developing new functionality related to SNMP collection in NAV,\na developer's workstation isn't necessarily attached to a network that\nprovides the developer with the necessary access to communicate with the\nrequired set of switches/routers etc. For internal equipment, this is\nusually solved by connecting via VPN, but sometimes, the devices one needs\nto talk to is located at a customer site where there is no VPN access.\n\nIn the case of having SSH access to a Linux server at the customer premises,\nthat is allowed to communicate with the customer's switches and routers,\none can establish an SNMP tunnel to the customer's equipment using a\ncombination of SSH and socat.\n\nThis guide will document two ways to establish such an SNMP tunnel: one using\ndocker and one without.\n\nCourse of action - with docker\n==============================\n\n1. Replace the build arguments ``USER`` and ``UID`` in\n   :file:`docker-compose.snmp.yml` with your own username and user ID (the\n   latter is mostly important on Linux, as this ensures bind-mounted files are\n   readable with *your* permissions.  Also, replace the runtime ``user``\n   argument with your username.\n\n2. Copy the contents of :file:`docker-compose.snmp.yml` into\n   :file:`docker-compose.override.yml` (or explicitly specify this file to\n   ``docker compose up`` later, like this: ``docker compose -f\n   docker-compose.yml -f docker-compose.snmp.yml up``).\n\n3. Change the line ``command: 192.168.0.1 user@my-hop-host 10000`` to the ip\n   address or name of the device you want to reach, the relevant hop host and\n   whatever port you want to tunnel through.  This port should be free to use\n   on the hop-host.\n\n4. Make sure that ssh key to the hop host is saved (you can test this by doing\n   ``ssh user@my-hop-host``, it is saved if you're not prompted for a password).\n   If you haven't generated an SSH key yet you can run `ssh-keygen` and follow\n   the prompts. Afterwards you can use\n   ``ssh-copy-id -i ~/.ssh/mykey user@my-hop-host`` to copy that key to the\n   server.\n\n5. Now you can start nav.\n\n6. In SeedDB: Add an SNMP management profile with the community for the device.\n\n7. In SeedDB: Add an IP device with the IP \"mydevice.mydomain\" and the\n   management profile created in step 6. Click on \"check connectivity\", which should\n   be answering \"ok\".\n\nTroubleshooting - with docker\n=============================\nWhen starting docker:\n\n- the error message\n  ``mydevice.mydomain_1  | bind [::1]:10000: Cannot assign requested address``\n  can be ignored, it should still work\n\n- if the error message\n  ``mydevice.mydomain_1  | 2023/02/21 13:36:11 socat[1744] E bind(5,\n  {AF=2 0.0.0.0:10000}, 16): Address already in use``\n  appears: change the port in the docker file. Some other process on the hop-host is\n  using this port.\n\nWhen adding IP device in SeedDB:\n\n- if an error message appears go into the docker container using\n  ``docker compose exec nav /bin/bash`` and do ``ping mydevice.mydomain``. If that\n  works, then make sure you're using the right management profile, because\n  tunneling works.\n\nCourse of action - without docker\n=================================\n\n1. Forward a TCP port from your machine to another, which has the necessary\n   SNMP access level.\n\n   .. code-block:: sh\n\n      ssh -L 1161:localhost:1161 user@the-machine-with-access\n\n2. Then, on that port, set up a UDP-to-TCP tunnel using socat on that machine:\n\n   .. code-block:: sh\n\n      socat tcp4-listen:1161,reuseaddr,fork UDP:ip-or-name-of-switch-to-talk-to:161\n\n3. In a different terminal window, on your localhost, set up a socat\n   tunnel to tunnel UDP traffic on port 161 through the forwarded TCP port\n   (sudo is necessary because you need to bind to port 161, which only root can do):\n\n   .. code-block:: sh\n\n      sudo socat -T15 udp4-recvfrom:161,reuseaddr,fork tcp:localhost:1161\n\n4. Finally, to test connectivity in another terminal window:\n\n   .. code-block:: sh\n\n      snmpwalk -v2c -c public localhost SNMPv2-MIB::system\n\n   (replace ``public`` with the respective community string if it differs)\n\n5. When tunneling works you can add a new management profile with the\n   respective community string the switch uses to NAV.\n\n6. Then add an IP device with that management profile and 127.0.0.1 as\n   IP address.\n\nTroubleshooting - without docker\n================================\n\n- if in step 2 the error \"Address already in use\" appears, you can figure\n  out which process is using it by running\n\n  .. code-block:: sh\n\n      sudo netstat -aupn\n\n  (these flags are Linux specific, use\n\n  .. code-block:: sh\n\n      man netstat\n\n  to figure out which flags might be helpful on other operating systems).\n\n  Then kill the process by running\n\n  .. code-block:: sh\n\n      sudo kill process_id\n\n  If the process restarts on its own it might be that you need to kill its\n  parent process. This command can help identify the parent process:\n\n  .. code-block:: sh\n\n      ps axuwf\n"
  },
  {
    "path": "doc/hacking/using-devcontainers.rst",
    "content": "=======================================\nUsing devcontainers for NAV development\n=======================================\n\nNAV provides a `devcontainer <https://containers.dev/>`_ definition to simplify\nthe process of creating a complete environment for running and developing\nNAV. This should integrate smoothly with popular IDEs like PyCharm and VS\nCode. There are also command line tools to interact with devcontainers for\nthose who prefer not to use IDEs for development, but we don't yet have any\nexperience with these.\n\nWhat is provided by the NAV devcontainer\n========================================\n\nThe devcontainer definition resides in the :file:`.devcontainer/` directory and\nuses `Docker Compose`_ to provide three containers:\n\n1. The main devcontainer, ``nav``, which should be provisioned with all\n   dependencies normally required to build and run NAV from source code.\n2. A PostgreSQL service container (``db``) to provide relational database\n   services to NAV.\n3. A Graphite service container (``graphite``) to provide both the back-end\n   (``carbon``) and front-end (``graphite-web``) components that provide time\n   series database services to NAV.\n\nWorking efficiently with the ``nav`` devcontainer\n=================================================\n\nTools like PyCharm and VS Code should automatically detect the devcontainer\ndefinitions when you open the NAV project in them. They should typically prompt\nyou and ask if you want to start the devcontainer and re-open the IDE inside\nit.\n\nThe devcontainer only provides an environment for development, it doesn't do\nmuch magic in the background.\n\nTL;DR\n-----\n\n1. Open a terminal inside the devcontainer.  Issue these commands to start the\n   web server::\n\n     navsyncdb\n     django-admin runserver\n\n2. Open a second terminal inside the devcontainer. Issue this command to start\n   all NAV background processes::\n\n     sudo nav start\n\n3. Open a third terminal inside the devcontainer. Issue this command to\n   automatically build all CSS stylesheets when the SASS sources change::\n\n     make sasswatch\n\n4. Open a fourth terminal inside the devcontainer. Issue this command to\n   automatically build the HTML documentation output when the source file\n   change::\n\n     make docwatch\n\n\nPython environment\n------------------\n\nThe Python environment inside the devcontainer is a *virtualenv* located in\n:file:`/home/vscode/.venv`, and the :file:`/home/vscode/.venv/bin/` directory\nis automatically pre-pended to the container's :envvar:`PATH` environment\nvariable, so that any program inside this environment is available and\nautomatically executed within said environment.\n\nThe environment is built at container startup by `uv`_, using the :samp:`uv\nsync --all-extras` command.  This ensures that all runtime requirements and\ndevelopment dependency groups mentioned in NAV's :file:`pyproject.toml` should\nbe installed into the environment.\n\nUsing :samp:`uv sync` also ensures that all NAV command line programs are\navailable on the :envvar:`PATH` search path, and that changes you make to their\nsource code is immediately reflected when running them. If you add new NAV\ncommand programs, however, you may need to run :samp:`uv sync --all-extras`\nover again, to ensure their stubs are installed in the environment's\n:file:`bin/` directory.\n\n\nConfiguring NAV\n---------------\n\nAt startup, the container installs all of NAV's example configuration files\ninto the :file:`/home/vscode/.venv/etc/nav/` directory. This can be confirmed\nat any time by issuing the :samp:`nav config where` command in a terminal\ninside the container.\n\nNAV's :file:`db.conf` configuration file is automatically imbued with the\noptions necessary to let NAV connect to the PostgreSQL server in the ``db``\ncontainer.\n\nThe container also provides common text editors like :program:`vim` and\n:program:`nano`, which should enable you to edit the configuration files if\nnecessary.\n\nConfiguring JWT signing keys for the API\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you are working with the API, the script :file:`tools/reset-jwt-keys.sh` can\nbe used to quickly generate new RSA signing keys and configure NAV to use them.\nSee :ref:`local-jwt-configuration` for more details.\n\n\nPreparing the database schema\n-----------------------------\n\nWhen you start the devcontainer for the first time, the database may be\ncompletely empty.  You will need to run the :samp:`navsyncdb` command in order\nto initialize and/or migrate NAV's database schema, before any NAV programs are\nusable within the container.\n\n\nRunning the NAV web interface\n-----------------------------\n\nWhen developing, the NAV web interface is best served by the built-in Django\ndevelopment web server, using this command in a terminal: :samp:`django-admin\nrunserver`.\n\nThis server will serve on port *8000* inside the container. After running this\ncommand, your IDE may prompt you to forward this port to your host machine, so\nyou will be able to browse the web site from your desktop browser (in some\ncases, it may automatically forward port 8000 also to your localhost).\n\nLogging in to the NAV web interface\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe ``admin`` user ships with the default password ``admin``. If you need to\ntest with unprivileged users, more can be added using the *User and API\nAdministration* tool in the toolbox.\n\nUser accounts and passwords can also be manipulated on the command line using\nthe :program:`navuser` program (see :ref:`navuser usage docs <navuser-usage>`\nfor details).\n\n\nRunning NAV programs\n--------------------\n\nNAV command line programs (those specified by the ``project.scripts`` section\nof :file:`pyproject.toml`) are all available on :envvar:`PATH` and can be run\ndirectly if need be.  The :program:`nav` process control command is also\navailable, so that all background daemons and cron jobs can be started by\nissuing the :samp:`sudo nav start` command.\n\nDuring certain development tasks, it may be preferable to manually run specific\ndaemon programs in the foreground rather than using the :program:`nav` command,\ne.g. :samp:`ipdevpolld -f -s` instead of :samp:`nav start ipdevpolld`.\n\n\n(Re)building CSS stylesheets from SASS sources\n----------------------------------------------\n\nIf you make changes to the SASS definitions, you will have to execute\n:samp:`make sassbuild` to rebuild the CSS assets that are served by the web\nserver.\n\nMore effectively, you may want to use the :samp:`make sasswatch` command, which\nwill monitor all the SASS source files for changes and automatically rebuild\nthe stylesheets on every change.\n\n\n(Re)building NAV's Sphinx documentation\n---------------------------------------\n\nNAV's documentation sources reside in the :file:`doc/` directory. These can be\nmanually built into HTML using the :samp:`make doc` command. The output\ndirectory is automatically served by the Django development web server on the\n``/doc/`` URI.\n\nMore effectively, you may want to use the :samp:`make docwatch` command, which\nwill monitor all the documentation source files for changes and automatically\nrebuild the HTML output on every change.\n\n\nRunning JavaScript tests\n------------------------\n\nThe JavaScript test suite uses Karma with headless Chrome to run tests.\nPlaywright's Chromium is automatically installed when the devcontainer is\ncreated, but if you need to install or update it manually, run::\n\n  make setup-playwright\n\nThis installs Playwright's Chromium binary along with its required system\nlibraries.  Once installed, you can run the JavaScript tests with::\n\n  tox -e javascript\n\n\nInstalling Python packages manually\n-----------------------------------\n\nIf you want to install extra Python packages that are not specified in\n:file:`pyproject.toml`, use :samp:`uv pip install {package_name}` to do so.\n\nPlease be aware, though, that these packages will potentially be removed any\ntime :samp:`uv sync` is rerun.  If a package is a new runtime dependency for\ncode you're working on, it should be added to the ``project.dependencies`` list\nof :file:`pyproject.toml` ASAP.  If it's a development tool that is nice or\nnecessary to have, it should be added to the relevant dependency groups in\nthe ``dependency-groups`` section of :file:`pyproject.toml`.\n\n\nDumping/loading data from remote production server\n--------------------------------------------------\n\nFor some development tasks, it is useful to initialize the development database\nwith a database snapshot from a production server. You can read more about\n:ref:`migrating_prod_db_to_dev`.\n\n\nIPv6 connectivity\n=================\n\nNAV is fully capable of working over IPv6, but Docker is not usually configured\nto work with IPv6 out-of-the-box. This presents a challenge if you need to\ncommunicate with devices over IPv6 while developing inside the\ndevcontainer. Fortunately, since `Docker version 27`_, IPv6 has become a lot\neasier to configure.\n\nThe NAV devcontainer definition already places all the service containers (as\ndefined in :file:`.devcontainer/docker-compose.yml`) on a separate IPv6-enabled\nnetwork. This network is configured with IPv6 masquerading, to ensure that your\nservice containers are not exposed on the public IPv6 network.\n\nTo enable IPv6 in your Docker daemon, you will need to add something like the\nfollowing stanza to your Docker system's :file:`daemon.json` and restart the\nDocker daemon:\n\n.. code-block:: json\n\n   {\n       \"ipv6\": true,\n       \"fixed-cidr-v6\": \"fd00::/80\",\n       \"default-network-opts\": {\n           \"bridge\": {\n               \"com.docker.network.enable_ipv6\": \"true\"\n           }\n       }\n   }\n\n.. tip:: The location of :file:`daemon.json` may vary between systems and\n         setups (you may even need to create it yourself). Please refer to\n         Docker's own `documentation on how to configure the Docker daemon\n         <https://docs.docker.com/engine/daemon/#configure-the-docker-daemon>`_.\n\nTo test IPv6 connectivity from within the devcontainer (assuming this already\nworks from your host system), you can open a terminal and run something like\n:code:`ping6 -c 4 google.com`:\n\n.. code-block:: console\n\n  vscode ➜ /workspaces/nav (doc/devcontainer-ipv6) $ ping6 -c 4 google.com\n  PING google.com(arn09s22-in-x0e.1e100.net (2a00:1450:400f:801::200e)) 56 data bytes\n  64 bytes from arn09s22-in-x0e.1e100.net (2a00:1450:400f:801::200e): icmp_seq=1 ttl=110 time=38.8 ms\n  64 bytes from arn09s22-in-x0e.1e100.net (2a00:1450:400f:801::200e): icmp_seq=2 ttl=110 time=39.4 ms\n  64 bytes from arn09s22-in-x0e.1e100.net (2a00:1450:400f:801::200e): icmp_seq=3 ttl=110 time=39.1 ms\n  64 bytes from arn09s22-in-x0e.1e100.net (2a00:1450:400f:801::200e): icmp_seq=4 ttl=110 time=39.1 ms\n\n  --- google.com ping statistics ---\n  4 packets transmitted, 4 received, 0% packet loss, time 3006ms\n  rtt min/avg/max/mdev = 38.753/39.087/39.399/0.228 ms\n\n  vscode ➜ /workspaces/nav (doc/devcontainer-ipv6) $\n\n\nPyCharm oddities\n================\n\nPyCharm seems to have problems with properly detecting the correct Python\ninterpreter when running inside the devcontainer. When started, it lists the\nproject as having *no interpreter*, and the only way to fix it is to manually\nselect an existing interpreter (specifically,\n:file:`/home/vscode/.venv/bin/python`). Unfortunately, this choice does not\nseem to be persisted anywhere, so every time PyCharm is re-opened inside the\ncontainer, this interpreter selection procedure needs to be repeated.\n\n\n\n.. _Docker Compose: https://docs.docker.com/compose/\n.. _Docker version 27: https://docs.docker.com/engine/release-notes/27/#ipv6\n.. _uv: https://docs.astral.sh/uv/\n"
  },
  {
    "path": "doc/hacking/using-docker.rst",
    "content": "=====================================\nUsing NAV with Docker for development\n=====================================\n\n.. highlight:: sh\n\nDocker is a lightweight \"virtualization\" framework for creating isolated\nenvironments, useful both in development and production.\nFor more information on Docker visit their homepage_ or read the documentation_.\n\nInstalling Docker and docker compose\n------------------------------------\n\nDocker provides up-to-date documentation on how to install it for most popular\noperating systems [*]_.  NAV's Docker definitions should work smoothly on\nLinux, but may have some rough edges on Docker Desktop for Mac.\n\n.. Tip:: To avoid having to use sudo with docker commands, it is recommended\n         to add your user to the ``docker`` group. You may need to relogin for it to\n         take effect.\n\nGetting started with Docker Compose\n-----------------------------------\n\nAfter installing Docker, you will need to obtain the NAV source code.\n\nThe source code contains a :file:`docker-compose.yml` configuration file for\n`Docker Compose`_.  This configuration defines a fully integrated NAV runtime\nenvironment, with all its dependencies.  This environment is designed to run\nNAV directly from the checked out source code, and as such it defines an\nenvironment for developers, not for production use of NAV.  The alternative is\nto manage all the dependencies and integrations on your own host machine.\n\n.. tip:: Be mindful that :doc:`a devcontainer-based solution\n         <using-devcontainers>` is largely superseding this way of working with\n         NAV development—at least for developers who prefer using IDEs.\n\nThe quickest way to build the container images and start all the services for\nthe first time is by running these commands::\n\n    make .env\n    docker compose up\n\n.. Tip:: The first time you run this would be the perfect time to grab some\n         coffee (and maybe redecorate your living room), as the initial build\n         may take a while.\n\n.. warning:: Running ``docker compose up`` will take over the local ports 80\n             (for the website) and 8000 (for graphite). You can override this\n             with a ``docker-compose.override.yml`` file.\n\nTroubleshooting\n~~~~~~~~~~~~~~~\n\nThe container images for NAV development are designed to bind-mount your source\ncode directory inside the running containers.  In order to avoid leaving files\nowned by strange user IDs in your source code directory, the images will create\na non-privileged ``nav`` user with a specific user-id and group-id.  These IDs\nshould match that of your user account on the host system, so therefore the\nDocker Compose build process needs to know your ``UID`` and ``GID``.\n\n.. note:: This UID/GID mapping is not really relevant if you are running Docker\n          Desktop on a Mac, since it uses an entirely different mechanism for\n          bind-mounted volumes.  You still will need to set the ``UID`` and\n          ``GID`` arguments for the build to work, though.\n\nThe quickest way to go about this is the :code:`make .env` command.  This will\nattempt to generate a :file:`.env` file in your top-level source code\ndirectory, which will set the ``UID`` and ``GID`` variables from your running\nenvironment.  Docker Compose will implicitly read the environment variables in\nthis file when it builds or runs the services defined in\n:file:`docker-compose.yml`.  If, for some reason, the :code:`make .env` command\ndoes not work for you, you can create the :file:`.env` file by hand (but supply\nreal values if you're on Linux):\n\n.. code-block:: shell\n   :caption: :file:`.env` example\n\n   UID=1337\n   GID=100\n\n\nUsing the container(s)\n----------------------\n\nThe Docker Compose specificiation creates several containers (called \"services\"\nin Docker Compose lingo).  Several of them will mount the checked out source\ncode directory internally on the `/source` directory, allowing them to always\nbe up-to-date with the latest changes you are making in your favorite editor.\n\nThese are the defined services:\n\nnav\n  This container runs the NAV backend processes and cron jobs. It also runs the\n  ``sass-watcher`` job, which will watch ``*.scss`` files for modifications and\n  recompile NAV's CSS when changes do occur.\n\nweb\n  This container runs the Django development server to serve NAV's web-based\n  user interface. By default, Docker Compose will expose this web service on\n  port 80 on the host system, i.e. at http://localhost/\n\npostgres\n  This runs a bog standard Postgres image from the Docker Hub, to serve as\n  NAV's main data store.\n\ngraphite\n  This runs both carbon-cache backend and a graphite-web frontend, for NAV's\n  storage and retrieval of time-series data. By default, Docker Compose will\n  expose the web service on port 8000 on the host system,\n  i.e. http://localhost:8000/\n\ndocbuild\n  This container will watch the :file:`doc/` directory for changes and initiate\n  a rebuild of the NAV documentation whenever the documentation source files\n  are modified. The built documentation should normally be browseable via the web\n  service at http://localhost/doc/\n\nAccessing internals of running containers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf need be, you can access the internals of the running containers (to control\nNAV daemons using the ``nav`` command, adjust the running config, or whatever)\nby running a bash shell inside the container, like so (for the ``nav``\ncontainer)::\n\n  docker compose exec nav /bin/bash\n\nManually restarting the web server\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo manually restart the web server, all you need is::\n\n  docker compose restart web\n\nRebuilding the NAV code from scratch\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA complete rebuild of the NAV code can be initiated by::\n\n  docker compose restart nav\n\nRebuilding the containers\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nRunning :code:`docker compose up` will normally build the container images,\nbefore starting them, if they don't exist already.  However, if the image\ndefinitions have changed (e.g. when you are switching between development\nbranches or changed the :file:`Dockerfile` definitions, or any of the files\nused as part of the image definitions), you may need to rebuild the images.  To\ninitiate a full build (which will still utilize Docker's build cache), run\nthis::\n\n  docker compose build\n\nAnother valid method is to use the ``--build`` option when starting the\ncontainers.  This will ensure the images are always rebuilt if necessary as\npart of the startup process::\n\n  docker compose up --build\n\nSometimes, you may find that a rebuild isn't enough to clear out all the cruft\nafter switching development branches or adding or changing NAV's default\nconfiguration file examples.  The Docker Compose environment defines two\npersistent volumes that will retain their data between restarts and rebuilds:\n``nav_cache`` and ``nav_config``.  The former exist just to share some caching\ndata between the various service containers.  The second ensures the set of NAV\nconfig files remain persistent between restarts or rebuilds, and also that all\nservice containers can share the same set of files.  When you really want to\nstart from scratch, you can fully nuke the Docker Compose environment and the\npersistent volumes using this command (before initiating a new ``up`` or\n``build`` command)::\n\n  docker compose down --volumes\n\n\nControlling processes inside the nav container\n----------------------------------------------\n\nThe main ``nav`` container uses :program:`supervisord` to control multiple\nprocesses. While the ``nav`` command can be used to control individual NAV\nservices, :program:`supervisorctl` can be used to control other processes used\nwithin the development environment:\n\ncron\n  This is the regular system cron daemon, responsible for running recurring NAV\n  tasks.\n\nnav\n  This is a one-time supervisor task to start all of NAV when the container\n  starts.\n\nsass-watcher\n  This is a process that runs ``npm run watch:sass`` command to monitor and\n  rebuild all the SASS-based stylesheets whenever changes occur\n  in the :file:`python/nav/web/sass/` subdirectory. The command continuously\n  monitors the files and does not exit by itself.\n\nThe individual logs of these program are typically found inside the ``nav``\ncontainer in the :file:`/var/log/supervisor/` directory. The NAV process logs\nthemselves are placed inside the :file:`/tmp/` directory inside the ``nav``\ncontainer.\n\nControlling log levels and configuration\n----------------------------------------\n\nThe log levels of various parts of NAV are controlled through the config file\n:file:`/etc/nav/logging.conf` inside the containers.\n\nThe ``nav`` and ``web`` containers share a common configuration volume named\n``nav_config``. This volume should persist even between rebuilds of the\ncontainers themselves. If you want NAV to install a completely new set of\nconfig files from scratch, you may need to manually trash this volume using the\n``-v`` option to the :code:`docker compose down` command.\n\nViewing logs\n------------\n\nRunning ``docker compose up`` will output everything from every container to\nstandard out, interleaving logs from different containers and sub-systems. You\ncan instead run docker compose in the background with ``docker compose -d`` and\nget logs from a specific service with ``docker compose logs -f SERVICENAME``.\n\nYou can also enter a specific container with ``docker compose exec SERVICENAME\n/bin/bash`` and ``tail -f`` a log-file directly. The logs are by default stored\nin ``/tmp`` inside the container.\n\nLocation of frontend logs\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe logs of the frontend (generated by python via the ``logging`` module) ends\nup in the ``web``-container, not the ``nav``-container.\n\nOverriding the compose services\n-------------------------------\n\nIf you need to override certain aspects of the Docker Compose service\ndefinitions for your own purposes during development, you can usually do so\nwithout patching the :file:`docker-compose.yml` file. You can \"patch\" the\ndefinitions via `Docker Compose's override mechanism`_: Simply add a\n:file:`docker-compose.override.yml` to the top-level source directory.\n\n\nDumping/loading data from remote production server\n--------------------------------------------------\n\nFor some development tasks, it is useful to initialize the development database\nwith a database snapshot from a production server. You can read more about\n:ref:`migrating_prod_db_to_dev`.\n\n\nPreventing NAV backend services from starting at container startup\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can add the environment variable ``NONAVSTART=1`` to prevent the backend\ndaemons from being started at the ``nav`` container startup time (allowing for\ncomplete manual control of daemons, by entering the container using ``exec``,\nas documented above). This can be done by adding something akin to this:\n\n.. code-block:: yaml\n   :caption: docker-compose.override.yml\n\n   version: '2'\n   services:\n     nav:\n       environment:\n         - NONAVSTART=1\n\nThe same technique can be used to insert your own environment into the ``web``\ncontainer.\n\nDebugging via logging\n---------------------\n\nSet log level to DEBUG in ``/etc/nav/logging.conf``::\n\n   [levels]\n   nav = DEBUG\n\nYou can suppress logs from a subsystem by setting it to NOTSET::\n\n   [levels]\n   nav.arnold = NOTSET\n\nYou might also want to send logs for a specific subsystem to a specific file::\n\n   [files]\n   nav.ipdevpoll.plugins = ipdevpoll-plugins.log\n\nHappy hacking!\n\n\n.. [*] See https://docs.docker.com/install/\n.. _homepage: https://docker.com\n.. _documentation: https://docs.docker.com/\n.. _Docker Compose: https://docs.docker.com/compose/gettingstarted/\n.. _Docker Compose's override mechanism: https://docs.docker.com/compose/extends/\n"
  },
  {
    "path": "doc/hacking/web-interface-customization.rst",
    "content": "===============================================\n How to customize parts of NAV's web interface\n===============================================\n\nSome users like to modify parts of the NAV web interface to add their own\ninformation from, or links to, third party systems. In doing so, they override\nsome of NAV's existing Django templates. *This is an unhealthy practice*, as it\nmay cause errors or missing functionality the next time they upgrade NAV and\nthe forked template changes.\n\nThis guide serves to document the various official hooks into the NAV web\ninterface. It is assumed you have a working knowledge of the `Django templating\nsystem <https://docs.djangoproject.com/en/4.2/topics/templates/>`_.\n\n\nHow to add custom templates\n===========================\n\nNAV's Django templates are located inside its Python module directories. *You\nshould not be modifying these directly*. If you need to override existing\ntemplates, or add custom hook templates, you should do so in a location that\nDjango will search for templates *before* it looks into NAV's internal template\ndirectories.\n\nThere are two ways to do this:\n\n1. The simple way: NAV includes a :file:`templates/` directory, relative to its\n   config directory, in its template search patch. If your NAV config is\n   located in :file:`/etc/nav/`, you can create the directory\n   :file:`/etc/nav/templates/` and have Django find your custom templates\n   there.\n\n2. The \"proper\" way: You write your own Django application and include into\n   NAV's site configuration by way of a\n   :file:`/etc/nav/python/local_settings.py` file. Just include templates in\n   your app as you normally would in any Django app.\n\nHooks\n=====\n\nAdding custom tabs to ipdevinfo\n-------------------------------\n\n*ipdevinfo* is the tabbed interface that displays NAV's information about\nsingle IP devices.\n\nThe tabbing system HTML is built around using unordered list elements\n(``ul/li``) as tab headers, with hyperlinks to anchor tags. The content of each\ntab is a ``div`` with an id that matches those anchor tags.\n\nipdevinfo tries to include the custom template ``ipdevinfo/custom-tabs.html``\nto add extra tab header elements, and ``ipdevinfo/custom-fragments.html`` to\ninclude the ``div`` elements with their corresponding contents.\n\nA simple customization example\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: html+django\n   :caption: ipdevinfo/custom-tabs.html\n\n   <li><a href=\"#foobar\">Foobar</a></li>\n   <li><a href=\"#frobnicate\">Frobnication</a></li>\n\n\n.. code-block:: html+django\n   :caption: ipdevinfo/custom-fragments.html\n\n   <div id=\"foobar\">\n       <h2>This is a custom tab for {{ netbox }}</h2>\n       <p>It's got stuff in it.</p>\n   </div>\n   <div id=\"frobnicate\">\n       <h2>Frobnication data for {{ netbox }}</h2>\n       <p>A perfectly cromulent tab.</p>\n   </div>\n\n\nAdding custom buttons to ipdevinfo\n----------------------------------\n\nOn the device details page, there is a row of action buttons, just above the\ninformation tabs:\n\n.. image:: ipdevinfo-button-row.png\n\nYou can add custom content (more buttons) to this row by creating a\n``ipdevinfo/custom-header-button-extras.html`` template. Here's a simple\nexample, adding a button that takes the user to a a third party web page:\n\n.. code-block:: html+django\n   :caption: ipdevinfo/custom-header-button-extras.html\n\n   <li>\n       <a href=\"https://cmdb.example.org/device/{{ netbox.sysname }}\"\n          class=\"button small secondary\">\n           Lookup device in company CMDB\n       </a>\n   </li>\n\nAdding custom information to the ipdevinfo \"What if\" tab\n--------------------------------------------------------\n\nThe IP Device Info tab titled :guilabel:`\"What if\"`, shows a summary of other\ndevices, organizations and users that may be affected if the viewed device goes\ndown. The tab also provides functionality to send e-mail to the contact\naddresses of the affected organizations (if contacts have been added).\n\nA custom template named ``ipdevinfo/custom-affected.html`` can be used to\ninsert information at the bottom of this tab:\n\n.. code-block:: html+django\n   :caption: ipdevinfo/custom-affects.html\n\n   <section>\n       <h4>Information from foobar</h4>\n       <a href=\"https://foobar.example.org/device/{{ netbox.sysname }}\"\n          class=\"button small secondary\">\n           Lookup affected links in Foobar\n       </a>\n   </section>\n\nAdding custom information to the port details tab\n-------------------------------------------------\n\nOn the page displaying details about a port, a custom template named\n``ipdevinfo/custom-port-tabs.html`` can be used to add additional\ncustom tabs. These tabs can be used to display additional information\nabout the port, using data from a Network Inventory System for\nexample.\n\n\nAdding custom tabs to the room overview page\n--------------------------------------------\n\nThe *info* subsystem is the part of NAV that displays information about other\nNAV objects, such as VLANs, rooms, locations and so on. The room information\npage is also tabbed, but its tabs are more dynamic in nature than ipdevinfo's.\n\nAs with ipdevinfo, the tabbing system HTML is built around using unordered list\nelements (``ul/li``) as tab headers, with hyperlinks to *other URLs that will\nprovide the content of the tab* dynamically as the tab is selected. This\nfunctionality is provided by *jQuery UI*.\n\nEach list element must reference a placeholder ``div`` using the\n``aria-controls`` element attribute, as shown in the example below.\n\nThe room page tries to include the custom template\n``info/room/custom-tabs.html`` to add extra tab header elements, and\n``info/room/custom-fragments.html`` to include the ``div`` elements that will\nbe placeholders for the dynamically fetched content.\n\nA simple customization example\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: html+django\n   :caption: info/room/custom-tabs.html\n\n   <li aria-controls=\"foobar\">\n       <a href=\"http://example.org/my-exciting-html-snippet-generating-url\">Foobar</a>\n   </li>\n\n\n.. code-block:: html+django\n   :caption: info/room/custom-fragments.html\n\n   <div id=\"foobar\"></div>\n"
  },
  {
    "path": "doc/hacking/writing-a-servicemon-plugin.rst",
    "content": "===============================\nWriting a new servicemon plugin\n===============================\n\nThis guide will document an example of how to implement a new service monitor\nplugin in NAV.\n\nA quick intro to the service monitor\n====================================\n\nThe NAV service monitor is part of the legacy *statemon* system. NAV\ndevelopment has not put much effort in service monitoring, though, focusing\ninstead on the core functionality of network hardware monitoring. The service\nmonitoring system therefore has its limitations.\n\nThe basic limitations are as follows:\n\n- A service must be associated with an IP device (e.g. a server).\n- A service must necessarily be hosted on the single management IP address of\n  the server. Multi-homed servers are not supported (although you can\n  potentially hack this by adding an IP address as an argument to your\n  plugin).\n\n\nThe goal\n========\n\nWrite a service monitor plugin that verifies the presence of the phrase \"Don't\nPanic\" in a web page.\n\nWriting the plugin\n==================\n\nThe basics\n----------\nA servicemon plugin is called a **checker**.\n\nRequirements:\n\n- The **checker** must be a Python class inheriting from\n  :py:class:`nav.statemon.abstractchecker.AbstractChecker`.\n- The class name must be suffixed with the string ``Checker``.\n- The class must be contained within a module that has an identical name.\n- The module must reside in the :py:mod:`nav.statemon.checker` package.\n\nWriting a simple checker skeleton\n---------------------------------\nWe begin with something like this, in the file\n:file:`nav/statemon/checker/PanicChecker.py`:\n\n.. code-block:: python\n   :linenos:\n\n   from nav.statemon.event import Event\n   from nav.statemon.abstractchecker import AbstractChecker\n\n\n   class PanicChecker(AbstractChecker):\n       IPV6_SUPPORT = True\n       DESCRIPTION = \"Checks for panic\"\n\n       def execute(self):\n           return Event.UP, \"Everything is fine\"\n\n\nYou can now open *SeedDB* in your browser, go to :menuselection:`Service -->\nAdd new service` and add this new service checker to some server.\n\n.. image:: add-panic-service.png\n\nShortly thereafter, you should see this in the logs (:file:`servicemon.log`)::\n\n  [2015-09-02 10:22:14] abstractchecker.py:run:107 [Info] server.example.org:panic -> Everything is fine\n\nAnd the service matrix status should be green:\n\n.. image:: panic-service-matrix.png\n\n.. note:: Another one of the limitations of the service monitor system, is\n          that the status of a service will be shown as green even if the\n          service checker doesn't run. It will only flag an alert if the\n          service checker actually runs and reports a failure.\n\nCongratulations, you have just recreated the\n:py:mod:`nav.statemon.checker.DummyChecker` - a checker that accepts no\narguments and always reports a positive result.\n\nFleshing out the plugin\n-----------------------\n\nNow let's make the plugin do something useful. Instead of replicating the\nconvoluted :py:mod:`nav.statemon.checker.HttpChecker`, we use the Python\nRequests library to fetch the web page and examine its contents:\n\n.. code-block:: python\n   :linenos:\n   :emphasize-lines: 11, 12\n\n   import requests\n   from nav.statemon.event import Event\n   from nav.statemon.abstractchecker import AbstractChecker\n\n\n   class PanicChecker(AbstractChecker):\n       IPV6_SUPPORT = True\n       DESCRIPTION = \"Checks for panic\"\n\n       def execute(self):\n           ip, port = self.get_address()\n           url = 'http://%s/' % ip\n           req = requests.get(url)\n           if req.status_code == 200:\n               if \"don't panic!\" in req.text.lower():\n                   return Event.UP, \"No panic is needed\"\n               else:\n                   return Event.DOWN, \"Panicking!\"\n           else:\n               return Event.DOWN, \"%s status code = %s\" % (url, req.status_code)\n\nAs you can see from lines 12 and 13, we get the server's IP address using the\ninherited :py:func:`get_address()` function, and build an HTTP URL from that.\n\n.. note:: Servicemon does not reload changed plugins, so you will need to\n          restart the daemon for this change to take effect.\n\nGiven that ``server.example.org`` is not currently running a web server, you\nshould now get logs that look like this::\n\n[2015-09-02 10:52:58] abstractchecker.py:run:107 [Info] server.example.org:panic -> ('Connection aborted.', error(111, 'Connection refused'))\n[2015-09-02 10:52:58] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, ('Connection aborted.', error(111, 'Connection refused')))\n[2015-09-02 10:53:03] abstractchecker.py:run:107 [Info] server.example.org:panic -> ('Connection aborted.', error(111, 'Connection refused'))\n[2015-09-02 10:53:03] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, ('Connection aborted.', error(111, 'Connection refused')))\n[2015-09-02 10:53:08] abstractchecker.py:run:107 [Info] server.example.org:panic -> ('Connection aborted.', error(111, 'Connection refused'))\n[2015-09-02 10:53:08] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, ('Connection aborted.', error(111, 'Connection refused')))\n[2015-09-02 10:53:13] abstractchecker.py:run:107 [Info] server.example.org:panic -> ('Connection aborted.', error(111, 'Connection refused'))\n[2015-09-02 10:53:13] abstractchecker.py:run:133 [Alert ] server.example.org:panic -> DOWN, ('Connection aborted.', error(111, 'Connection refused'))\n\nThis tells you a couple of things:\n\n- If an exception is raised inside the :py:func:`execute()` method, this is\n  automatically considered a service failure by servicemon.\n- When your service checker reports a changed state, servicemon will retry it\n  three times before posting an event to NAV's event queue.\n\nWith a web server active at ``server.example.org``, you might get this instead::\n\n  [2015-09-02 11:08:18] abstractchecker.py:run:107 [Info] server.example.org:panic -> Panicking!\n  [2015-09-02 11:08:18] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, Panicking!)\n  [2015-09-02 11:08:23] abstractchecker.py:run:107 [Info] server.example.org:panic -> Panicking!\n  [2015-09-02 11:08:23] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, Panicking!)\n  [2015-09-02 11:08:28] abstractchecker.py:run:107 [Info] server.example.org:panic -> Panicking!\n  [2015-09-02 11:08:28] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, Panicking!)\n  [2015-09-02 11:08:34] abstractchecker.py:run:107 [Info] server.example.org:panic -> Panicking!\n  [2015-09-02 11:08:34] abstractchecker.py:run:133 [Alert ] server.example.org:panic -> DOWN, Panicking!\n\nAt this point, add the string \"Don't Panic!\" to the document served at ``/``\non your web server. You should soon see this in the logs::\n\n  [2015-09-02 11:12:23] abstractchecker.py:run:107 [Info] server.example.org:panic -> No panic is needed\n  [2015-09-02 11:12:23] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (UP, No panic is needed)\n  [2015-09-02 11:12:28] abstractchecker.py:run:107 [Info] server.example.org:panic -> No panic is needed\n  [2015-09-02 11:12:28] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (UP, No panic is needed)\n  [2015-09-02 11:12:33] abstractchecker.py:run:107 [Info] server.example.org:panic -> No panic is needed\n  [2015-09-02 11:12:33] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (UP, No panic is needed)\n  [2015-09-02 11:12:38] abstractchecker.py:run:107 [Info] server.example.org:panic -> No panic is needed\n  [2015-09-02 11:12:38] abstractchecker.py:run:133 [Alert ] server.example.org:panic -> UP, No panic is needed\n\nSummary so far\n--------------\n\nWhat have we learned so far?\n\n- A plugin must inherit from\n  :py:class:`nav.statemon.abstractchecker.AbstractChecker`.\n- The plugin must implement the :py:func:`execute()` method, where all the\n  work is done.\n- The :py:func:`execute()` method must return its status as a two-element\n  tuple. The first element must either be ``Event.UP`` or ``Event.DOWN``,\n  while the second element must be a human-readable description of the status\n  (which will be attached to any events posted).\n- The plugin can describe itself to the outside world by setting the class\n  variables ``IPV6_SUPPORT`` and ``DESCRIPTION``.\n\nAdding arguments\n----------------\n\nTo make your plugin more configurable, it should accept arguments. Your plugin\nclass can specify mandatory arguments in the ``ARGS`` class variable, while\noptional arguments can be specified in the ``OPTARGS`` class variable. Each of\nthese must be a list of two-tuples, each two-tuple consisting of an argument\nname and argument description.\n\nAny arguments provided when configuring the service checker in SeedDB will be\nplaced in a Python dictionary in the plugin's ``args`` instance variable.\n\nLet's make the document path configurable in our plugin:\n\n.. code-block:: python\n   :linenos:\n   :emphasize-lines: 15\n\n   import requests\n   from nav.statemon.event import Event\n   from nav.statemon.abstractchecker import AbstractChecker\n\n\n   class PanicChecker(AbstractChecker):\n       IPV6_SUPPORT = True\n       DESCRIPTION = \"Checks for panic\"\n       OPTARGS = (\n           ('path', 'Document path to fetch'),\n       )\n\n       def execute(self):\n           ip, port = self.get_address()\n           path = self.args.get('path', '/')\n           url = 'http://%s%s' % (ip, path)\n           req = requests.get(url)\n           if req.status_code == 200:\n               if \"don't panic!\" in req.text.lower():\n                   return Event.UP, \"No panic is needed\"\n               else:\n                   return Event.DOWN, \"Panicking!\"\n           else:\n               return Event.DOWN, \"%s status code = %s\" % (url, req.status_code)\n\nNow, restart servicemon and add a path argument of ``/foo.html`` to the\nservice instance, using SeedDB:\n\n.. image:: edit-panic-service-path.png\n\nAssuming there is no ``/foo.html`` document on your web server, this should be\nseen in the logs::\n\n  [2015-09-02 11:13:49] abstractchecker.py:run:107 [Info] server.example.org:panic -> http://10.0.1.42/foo.html status code = 404\n  [2015-09-02 11:13:49] abstractchecker.py:run:124 [Notice] server.example.org:panic -> State changed. New check in 5 sec. (DOWN, http://10.0.1.42/foo.html status code = 404)\n\nAnd if you then add a ``foo.html``, containing the phrase *Don't Panic!*, you\nshould be good to go again.\n\nIn conclusion\n=============\n\nNow you should know what you need to write new plugins for the service\nmonitor. There is also a wealth of pre-existing checkers whose code you can\nuse for inspiration. Good luck!\n"
  },
  {
    "path": "doc/hg2git/README.rst",
    "content": "NAV migration from Mercurial to Git\n===================================\n\nNAV migrated from Mercurial to Git as its VCS system on 17 January 2017.\n\nThe file ``hg2gitmapping.txt`` contains a mapping of Mercurial revision\nnumbers to the corresponding Git revision numbers, in case they are needed for\nposterity.\n"
  },
  {
    "path": "doc/hg2git/hg2gitmapping.txt",
    "content": "# map of Mercurial revision numbers to Git revision numbers\n# format:\n# <hg revision number> <git revision number>\ne3ae479f288005c80b337fffabdc8b82919e3785 804d2d8187c171c3c20b2113081efd344b06c0ea\n709231604a9564e83f49504526fbe7864b733f3f adf4164957b1ce68354c2e5a78a2321cec53fd79\nf1c1e5592ea8ce7469ff818ffdf516d92ee07717 fdc761fd79acdea31ed79ecd73bb3bcd61d3cf59\n728d4a38a22fbde9238f9d26e2c07a8333490cf2 d5a42d1c9ef877cb4f067fb54640eaa95b59dc8d\nfab8d6dd115f04cadd8e95b3a4a1adce839e2537 90fe9614ba7ab9adbb81e0d28ca7dace789a5d3e\n256762bb0714c437794a060847f5828d96245bd5 a64513d6deb2fda1a1bc62489b8da8e25620bb19\n1fc6250f58b7562e56980bdcc6e6d8526218b934 0be71a1b73bd4cad2514efb4ae1dd94411eed20b\n80256a7717c8960cedbe8040abce949ecb2c3080 2707720399af66f9ac56231f571d0236e3b47e0f\n5c94fe13ba60a4c31f8d1446437d01b37aae84a6 989ca15077cb506395e20325631ab6714c023732\nc9fd789d4b1d65c188096f7cd8080fe2f86f64c0 dec75cb1901df5f4e5f3512e5d3c6ebf41014325\na95c04393d7833cb4b52ce9a381b42d5f5492d18 1aa8a12d4a8e6628b0292f72dec9cede8f21639b\nf4642c210445fcb9df6c2ee19b505c4c1acd0011 69b28c427587c1f1870c3fa37e801338cdf78e64\n22ba50852cbc721961b419903c0d31e6cb2a5647 2067f0b7a9950d4348540226007a6b3938739d38\n5a08ecc31a8c1e1d7d5072495698a9bc90a8715a 6a1b23341718815a428d943ad6910a0005944cf3\n2c0e85abfca4c248333d9e8cee7eafe6a8510b59 a55d296cd224ed1af420b8755c2cfafa99b83d59\n5726dc58f50749c53b17134d16bf4474cce577f0 0895949b2b3a6dc147d6a47d912d79bc76593108\n9c782d0be64971076d6a2b46cb4555e1ee0d26a9 e806ef7025d4baf2e078a0882bdc1ccb3ad531b1\ncad01912761e79ac1e0f044696fe200568c4d4e2 f6b7afa838e1bcf0d88e68d39b6da2e2e0b95b31\nf8b30ec5484d82e8df5570332776adc4472d288d 5164c5c852353b3bee77ec7a24f9c1e643fb7d3d\n1859795cada1caeb39b85fb451b8eba99df810eb a3411548b9022cf8ace8285c2ee1da541496502b\nc2f8285aff3f990ea00c57b9427dc52d77a4f241 fdc4ccc7f6eb23e46d1b15b1b85eae0fb59a8b33\n29c955231d7e7c99195322f25d0835eb7eddb452 f5cf62985bb428a1c41b6f60ce14e1a8c544503f\n973ff707d8f0aad63d98fe9eafd661614952262b 6935f5be5de304cf7010e5f2e7cffa5896244bf5\n2457c478cbb216397ae735f6fc21a6cc6cfa5731 54fb9161709bb5e531cde41a8fc9a0fe59310cdf\n28cf3f80e1869e6e12db23e57797c440e4ae308d 00fb48bf0ae9e5f22c45bc123dc5fd727da9d67a\nb8dd8fbafecf8e2956acd27518411d7f296cdecb bdc54a32d9bfe6d70d2acb288b42dec7228aa109\n4ab1f34d7b1db2c5874df9d93cc20ea042eb368b 298b32ad11f7308be8b532f007efadd8e311fff7\n099e8ba2c30e572208828b12b04c3c817c5ba750 b7872552faa5011137178e5cb299c5ae2cf3f879\nf797e71e99defc08c6e584c78146f66a9b7e340e e5b1004b5aa74fac515e3e459f50efcb21267d35\n6291f917ff348b7b9590867cbe3c46610de9812f 320f976007a3eb9100511bfcc06c6e26f8ccebb8\ne386112490835acdbb7a4e2f8c472a68d9d5cb45 afc28e3f8167a0ba993aaa014028d094e2ddc139\nef596451fe90efe7467c9498d1c736f0f9f16056 271d6a17009cd48eb7fa315db442c4fb70b819c5\n127c01384df5b28d48a80d456d2b47ae5024b73d bc87940c86e60267e39c8b266bbc6bc916a177d0\n03413f2f7a1178686c58bbce0249511cf6c69775 bee1edba3444eefe9dfad1df1a5f68298b8a81c7\nf231a95ef55524e6e98ef0199d4ebd972bb59bc1 6b2c244ff7c099440e2b0e0f3e4c49b5fede3f4b\n9bb67176e57a36900104c1d0d5d2f2faf87f32e3 200de279aec591271abf6b7a2dff6c0f35b2d052\nb17e31ff296ba49509482fe017e45a88f8be0c34 8c640f534ecdd6e88415cdf3db5ea3fb0f2c6bc7\nacf697a8886cc75f3bbaa8b3a63cde29b4d2943f 9b3078d89b0e11cd8260039fdabd5d7623134af4\ne158bf4eada037755f1317ef7a12d69f04440ac1 f79e09ee5bd3e400f0c7b64bc268211e17eeae2c\ndd8d4d1921f9826af5364ea6a6f19f3fbd1829b9 09bfa94001222e2f30e8eaad9e3800fc34582ebf\nd9cea461f7ea26eccce3734585933d179c6e819e b743ddff59f5781ace8694e1f56fd6dc38a228b3\nd900425da479e7ae7a8229e1b4bc167c9e3f9e6f b91da96d1264be2dacfa44c1e1c2f3e7b7323a5b\n439059a87b0ffff05f4e22e1e77608fe9ef2513d f77909843a4588d073120e2702d0e6ad19b310b5\n38f797d40a4b858ad6eb713a14bb45ddbb17cc92 fb51a925782f2fd6e2a60e70fc8e138fa479fdf4\n6ad19a61bc4a027f3a0812fec4c9a8977a06c646 fbdbeabe81574176336efcb2c66e31e3c8015805\na875ecd49430a7cc78c3c249623e9f0c5acfc20e d5103abb0357e8db32dc7d8be5a179d2c568e761\na67ba93b7511c978c6ee9fec0b9f40f7cdaa8eb0 2c52b5c47b9da3faab18ba73597ec4ee26ac1dee\nf972bb9d09431ecb407d2862e787f55ef9ab0d92 39ffeb7b1a3f3e7e83f786065d33bccfcd553fcf\n566b35038e044de2ba81586381d1649fca41d966 0c7fee5363547f9296b7c828b5fc3d71defe0a31\n9079831b018978b5f8145f5102f352c878559383 ee9512b2882b664d95747a8f1f3890ab9554d151\n164201a863eaa4d0a57c72443bfdfe3268c5f9e6 98c6db75be47e4a392ed933927ac9fed2f3aa321\nb5c9eeaa5f93a1f3551425eed5aebd836c3f988b bb05dee21a1de2e4dc8de2d3888d378d3658c26c\n7eab7870770d9eca98f45d6789fb94757953fc4e 45ae386e136c0b2b111225af8c3bd7db447cba08\n792bb1c4b7347d78f51f1e5219000f7a165ec687 25a733c7058c12314cfa4cce66811f3bc55177bb\nc9377303e62b97812729bee66da1e89b20f6e62f 44264f82b69c58dd79f9eab914308241a2d077df\nf4c8b830a7c667a949d4a67af4329997516ec586 02121c72b9672eeb830d2556a9a7ca59614237b1\n17ed13e74e7a98e070108b2a52366f015c23a057 aa3862b59070490a0515edfdeb4407cb60738cd6\n701da09738c7741bd4f7d1ec8b92f90aeff99d12 9f0730b9475d73a8613005e08e95b9da46428cc6\nf3fc138fcc2641007c589a45ebb8d88fcb6c62cc de115cec77f3262488168b4c693a5460b73d698e\n194823f941fa06431e927a9b7ed10bc23470b483 92e61576771d316dbd801535e33909af2a51ae76\n4e4277095db9a43a4683a855cc602646ef9ec260 5347d975837c4415554e3de59af2151d6d2039ff\n879a7e09bcfdb97df29f721dd5c8ca1daecb4977 0597baee7c20ad80b0ae048a9fed81cc6293e239\n98a69776839bd3e1b1168f12471d022a81c82b7f 0806fcc34e45fec0d41db55b83056fca1fbb59c5\n1535e2a40ad5b197e0a4f2ef34258e173634f303 fbb16d70ea1c93471a1ae5fcbc253849ea5a688b\n7b6f7680844c279256a26b21e97c33c103b41876 895b97120b3ad147c58c1dea41ba932a8c44774e\ndb0579c5cd031d596d3d10cb3af9f1fa1b9d99fa 6b0813e0377a33aa20f7155bee21750646865d3d\n01c0540a90e135c0ea21b64f62fcffc859e45857 41621e153df9d10b2a9237d12aaf41d39ae828e5\n9cee290f5fc5462e05a3f67fde0be0b9f7e94be9 bf1bacbd3516601768cb43ac645a764f021c41b9\nf3c207477e49e95178fb5c49538cbac7b4921390 230443163afc5bae0a00bd8113cdaec4c47a6d42\n9dcdb8681928b0a598f80551bf7dcac9de9707e1 b379757804bca30c4eceb931616aec040e687ebf\n624c1fb11d87d18536567f1495123c699b245cad 97a49cb39ac8a4c2d9507dbdb6e03356b63bda28\nd21ed7cdf14ab07eabaf0a37a7402627e6c7c0a7 f5a3b4d066264fa68992e29890c94262ee263bd3\n4e37acc1425919fd4cd6f31a6b3c9d629fb76b45 f18c0977c279946900c1aa96e66706a3b82cd359\n477682721e6a962b520dd373cc55df8aca7a864f 86195af365d791f100427628b02d60d1e8285e5c\n7181eeebe8b9f4f9b485fa88493ef1642e4de79c c3d1df0fe52dcc8686da2476c38521aae191f3b2\nf132f3d6a3beebdc4996dd7d8fc51d87fc098fc7 f511f13cac21c80ae6390af0d68483e8ad85e30e\n8ca58dfe1d752fc489622d84a17fd88e3da8ad69 28ddd38ace80b6c5fc96f297c990ba2a2826cb26\n4c6e44f7ee9b7ece41b1dc3da8fb5d102867730f b370e1588af4db8621deda1457283985131d15f4\n04a6a6f55b1ad54faac16cce3cff17608319838f 95fa50e2c98f8c8c1b581b1e702ce1cc56a56ca0\ndd0e8e42a45069122e8c8dc8278cd07cb17b0ab7 d71c9f5a6d0b05c81d3d6950f4080d448babb5f7\ne88b850c66f42064e4022870af6891b2c0d88f3c 08e887cfa3d3dab68150699bcfcfed0844b82357\n86610c3503ed9a8b165ba3c89874e3af517415a3 b76ff49804e567e57a3032bbfa44b3e819b48fb9\nbdf9c737be9170d0a28aea77a9dd69c4b9aa3fca 491bba6aefa1d9198ce34d6e6a53d6fa1c3e9209\n3e30de8b130c4c90d04fe671d69a060ffdd2e4bd a3fdf048d4099e6e75af5dc6d806b76d6f79d9c9\n6a158980de911099fe30bca858adbd818e5c834c 932b130ee3e8c55479ed38a4c5cbaf793bccfdc1\n6a5446d65a78314635784d2977fd0fa79b227098 781cf76ec31ea6234c5c81f30c9b3c5f022ccbd9\nccec40351d18ef4f5128c88048f8161d21b1244b 2dd87e566da986483efbd7f995a6971b7c277558\nd47543a97db8928d381b7c62b59f973191c39233 e8b28963163a47c5e787cbb84bc46e7a8fab0c85\n10f69cf85a7ff0097bce93c8d06a17c32230637c 31ade125c74894e2ba0297e07e74052c4ed8065d\n206fdc84e1246ddaf3d6d3c4fe67cccc5bbad9b9 4a7cc13976cb0a795cb7ab0db827a68c7a2425ac\nf9eb82700b809cee3c3af9d0f02ddc387f883bdd 51a0d1e2a54612456625cb6935bdb94333b9110a\n0bb19de637d54bc78a8d737c4f359986f246178b 78cb384164794aa5e99973748117016b6a4df09c\nb7e5da15d7f7f69a4054eb56f06fb87513aba06a 42c8e8b711395710b271fdff7aceb100ecd6c541\n27bc45c8b212b8482ebd646837156f71e50723fc 8485d6643a3ee7c7c79a3d62aa48480c7717e45d\n2054dd48574349dfe584e9209fdbb64e506d1652 7ac26ab53bbc02ac35c84b6aa35280fc413b4af3\nabb7a5538abc702f4a4c4ef19a87dd5cf47b0a7a 4a81c4f254dace0331ee86afb7e0d99d8ea732d8\n59bf2dfbaaef72450dd753911add333773486be4 f951205cdd90c94249daf33e402edde00cd42a3d\n58121aadf339533bbbe52b11aaff648b90748319 4c7ec8ac43b287a642a7aae88ec7f6f3239c9c57\nf92b196ed5e460c8071f0f70e6151ad34b2a4bd8 86b609002d71a79afaaac23f9b4419566436aef3\n9671b19432a3072317ac4d09d41746e786f99179 edf3320041bf5f241053f17e8d8fa82a715fb9d2\na3eadf8a936da63c7921f33e792c60cea758d72a f7120a0a0e849a4d80f2a243d9eca32c97022242\n4724bd9ab8e3e9417a350c5638b99aacead1f399 6ddc41fba38824a255f620e55117708de20ef1cb\ndf8a8749dc6dcd0a43090d127c6983ed755cb423 580d3657cde512527d8e11c919e6583eb99ab43b\n49e940f711b2d936d1f4350ddf9acbec2c0349f0 56d66ee8d2f0b1fe80546bf7a2024e22e10fb57e\nf71a9e42d100542b61fa2f58c7c5fb894b64328e a6a26662583887b16dda58fc67209e5d39440cc6\n39fd5c1f329004997b907bb6567ef1878fb58f69 4a662250fe7a24afa403d781f3f5b92e06755a07\n22eb9baa74318c8f4842ec83109e0e0c72dfedf4 a7b55e623d281c23e7588a99ba7ec95473ef498d\nb7b1ab0d6d3cfadcf43b800f419f0f7d26625fcb 7aa649032b0d262795f2c8fd27f6a7587c8e8804\n1f802653fcbd891858b13089463fe4b15df5955d 47ac52359e7e1153d0a7c2f22cdbe57d848e7cfc\n2b6f910a35796fcbcace7a07e7897c1d12597e3a 2e7809aadd1a79a30f26003e256010e2f2359d49\n94e28ab0f99cbb7f36f0612aa0942f17269184f2 fb6e888f92fac3b58b51cd4754b67b86edb1c549\nb68b67b7c5f2a0def1b45d4b64ae6c4b67c02b73 ddd49aa5cb23c1d26af7da740807243b02e0d0be\nb622b141a7e7aba57969462b2863436ed6fe7ea8 8031172c129453ddebbcff2ec7e56047008e9547\n9bc802e712b2ea0b5e8e48fbbea7bb8a0f91158b 71b724acbec85e1de08a4da40e5da4e03fec8185\n9a7abc977146ac5703f464a6509257ccb2b26a0b 8166cd316c72db1dfb981348cfe1089854c9fac3\n536a6f3b5767ed9f3456435c016ad3e2c2a2d5c4 ef6a783ca659f5441663ea9085e90a824ea85e39\n23026197248d52d696bcaa4653b0850c6230804c 14104a96c5bb18e3d88bc63159ec408b744595e8\n031cc76853797bccfedb748a026e55bbe5e9b40d 5b00ab587f6fcaf7889464e0624a45efd0a82eed\n14c56cbdd3d51802f50f9fc25005f1251d6a951b bbf74bebaa1734d0cf889442e4f2ba6153a23e36\n066cf1c5854cd69764c3217beb76e51d0866bd36 b293ad5ce4f83a427a26be98d348e53e995d4dbe\nf19649c3314ddebb47cc68cd7b18e66666a8a18f ed53e95dd9937c98f7cb6c17b8537d0ba92d595e\na557a5229ad138419bbe545db5dccbb21f5cea1c 923fc7de20cb9cef6569e29ca9190c4801f69a2c\n0ae6263d88c8fff4ecfb4c01be49c0eb68329d9b f236543d8dd524213da6d9742415fdfb8d1f6a82\n9c927ba4ff4835e681ffefb86c18b915150c4702 6c1911ed6d501e4bd24905feaed36cdac59f0b7f\n34dc7f27cee285054e3fd8846d8d3380251e869e 4e93e7bcb9388fdbaebd1407ff954a60e8fa700c\na9227b2569f27ea7dd3182e4e75f16d145b62783 82d17837a6e55d00adcf57dd8751f8f8afa5b7c8\naf8caf432e5d881a3caf4bb7b7c2470fe46cf030 00b9a56bf461d2b8bce00dda35c2e79365a6556d\na1834a5f6a5f1f670a8f8c725fb0f896467f0422 820dbb76e11a3822c859fce16f3ede2d04a73bf9\n68da82aea2731bdf91fb5bbd5c13662702d3cd3f 41d5033183db9b6da1af13043e751c8a3931b578\n24297004f3e770d72a958165a1554c2697bfed22 d0c6a66b22dc4b863d4fdeefc84558726268f992\n469b2d64b3085fa751faf6f067d7bd158db58ab0 2f9224129c62691ecb50ef329fb569847261b504\n4cea3c896b1958b52da33bef74d3e033b45e8bac c4ac09c1bf45f602273974b151fdcaad1eac27d3\nb7b4b22f01046e908b6c22ce614b2499cb1b9cb8 73d8fb5c8b56f0dfe479da58b594b5ecbaa836c3\na7a6e0dcf6993b22e6e60ee91903aac617c36736 8df862e1ce481b3ef4aabe55cb255c0e473b585f\nfeb23530265162a510ac5bdbf03acbe17682cb43 fc0ccfac09d5690577947dc4cdbda371389fa6f4\n69523ee1fd8850982579ee5ee798200678ca0519 caa8958878efa35bf0be7108a5d5768f6d95884e\n33a986501c17e2d69ac3791c9a94c18db0964547 b11d77d7bcbfe5bfa49dd148d4223d3cacced18c\nb6dd919daf4d9aa2a9084b05d09de483614b663b 06b8a0945c44b5c2a95cd18f88e2429619fc7cbc\ncc69d7d6c69271897cc7d08c0ff63d72174fc372 12a8d92ab7472e2b2ec1ab5230690c1c77d28f1f\na286159ed1890a254b1c8c671f72a0c65d4bbb51 f6df9ed93eae490c80285bbf30f6264583691790\na3a026b14a1897d73d84581a72375574523b09fd 42b1beaf562cb6f06ecc74d68a137a45214f44cb\n3d1e0909b8a8e3142a2e6509cb2797ca6b43815e 4ae8875f5abf42bf1e420546ac660a59f2f74602\n51b6ba250483cf5e6eea3219a232809652a29957 97434ee861eb51822bdfab5b0fa07528ee1d5d59\n45dd9a9b7ea5ab2f2d55301add1352065b153697 efcc8ce482274c3c74e0992e688a3eb5e35037b6\na6e3f43d734ab4660693342a905b94d722fdc86a 55286589bfd85fee1597c6d62620470a805bf482\n83940fc0d0a5c5840472eed521e6bae641ffcaa2 558df2a7dc40237f6938b33a728e5f489f4b32fd\n68383114adaedb8a65ec11f7316c7bde51c5e8df 080f7f6a5724be6bf2fa825cc58d931810af730e\ncb8bb82689f8426df6c88d6647b46d6bfa7c427c 8f2be53ab41d79c0b9209c7b6110dc9a65c0881f\ndf5ddfd38dd923fb89235f349197a61b08155a76 63260aab47bf5f7a410dbcf803a8ba51fb8358ab\n49259bf96ffdd957cfcfa22282c716095942b549 9d91cca124cdb119a7ea6e5e21e2f1bd4f5d6cdc\n4d6d5fb2702d2e51a88b0a5af6579a89a66c45bb 7169ba4102c78b2b4174cce531905f9c821dbc28\nb4282c11c236410bda0521441a405ec7244d4d8d a7f225243ec730aa0fcd72a0b0e90fba8ac408e5\n67ce45f3b5bb540b425325357cd161bb1803a93e d9013d59689547cf1e8757524486df8cc399a27d\ne21d73a4277196ad5546015d25ea12447815ef6e 95f965276fb0ce9aa62dff5cedf3dadbb3b4dff0\ne1ce5cd0b31a0909efe25709772f96c362d8be36 c9eb66b59e3fdd70276f7f6e6308a8c2038b1708\na0fb61d1daae6362c91c13465f65f660e164a49e 1be87462d9ff3f32351fa1e865f8246485a2f847\n0f199aa1172b1422eaac2ff68afdb259816689bb 3dafeba2289d3e9deb758055c9e704c66a9722ac\na98dd690a37c2320d7bd96717f8661919342e468 14f3820799fb95ace0a78c721eed1176c0ffaafb\nf982f015a5f4685e783449302d581cd3183a1bb1 53fd6fd14f27655d8ea134b29ba80fb30d3efdda\n993d49fe554e64b78ffeb52fdf6fa5a41af208d8 dacbed93b2d4e78a674762cf61ce8acb139f37ad\n53bf330ac35a5cf57bae0a8addc3f5505b73aa2d 0138e10765a3e4de8f07a32beee52a0e7b3b2666\nee1e89d328e4c74154b2adf07262864b882b82e4 c88d7e485fc4335d107ddc9d79f985e368372fb9\nff4ac46743945308848b57263f6b23e72dd57914 139d38c403f4f7502d37ffd27d52f626efd90584\n9d4b04e99f391e3d7b3ba8bfe597caab466a1728 4f3006c91118c63dca4f19d0f333355263236a97\n14c30ee68469887176aec360b13f969cf668c073 08691763470ec461470e4537e1c57ccbe5892e09\n29e1f539844d1f543d89e16a9299602845fe5301 866810e73406ba2b0550d38ea4c025ab4357e0bd\nc69ac927a36a487c8de785296a53b0a553695c29 9b33e33975e5fb75a9e98fa6d266e143ac0f0f68\n07ab0f862a0a3e36ee9a539b2bae2e2af1a653eb 26c3592b8bf444fd4639fa7c4ff9445aa8f5130e\n7f41ce0be8e6f1bd5850232ad4b4d8c984aa4887 e6368e50d534049c2318e7205eccb8481fc943cd\n1c72da1735658fe971ab1ff79f89016e93d44f57 31df643ce8e92729101386866b76ef2d32815592\neb9017cda93b4c33704be8be1db747634a48494a 93833fb70e9b1abd62dc734311792ef3399b9125\neb065efc654e201ad60d99c73e4719a8cafdd6fe 2ad7cf65dba603696c124dde871c90162ca7a514\n27d6291c0dccc5c73862c3183875c58c34779cb0 57e3445138a0b3de0ecbe51babc95242001043a4\n652cdad3f7edcf389655455621a8d2e225470203 b43a74731d3c6f011bf296c777d4c65a098ccb9c\n754c61ceb083b695374cd240361a55e48ecf3de5 40edc8b93f4b930532138e2c70a69da75810ce06\na2847dea7d00ab71f092efcb034c7d8fcd368412 6deeeab4574875aee9e52d89243cc222177b8cde\n7574fd9eee9a9292567e814ca69717d7f66133ad 47d2178900e46e9cd60f03b7863134c247ec578a\n31bea5304229b7fce09dc9cca9b3dfadcc86bfb7 0b7dcf8b2d74c176d73592eb77773624197c4f68\n20b8c7406586acf7eed4fece8d4d42b62d684197 c825c4aa687588bf8f44b41d65c00fe18f670f10\ne7228639432e1dcc7940fde123c5cc988e900bfc b9ab1c45354e2fc363dd255cdb30d54510a6cbee\nf4c931ef45db8aadffbfa06518bbfb66e2f52dbd b40f64402b3cb5ecba62452dc8d3bd599bcd56ed\n7ae4a3ed1babdc70b1bfd9d444b463ca0165dd9b ba541cc0072e925cd02ab665003fc89d6655bb35\n0e8c232d98ca31e96e406376b2317dd7481ac0f9 dcbe9b634b6143e6be7a3ea7b4c9b8116144e376\n353d8b23ac641ff4982ebe0499a3c0b3f0c1b156 c2ab18880cfc3ac21835ce22e8837c14922803ff\n9bda0f58545aa13b63224cb3cf51317db42fa34a dcd8767ab1f41d8ba17546ead9a9f1a310df7ab8\n0292cdc29781f7935561209471917f523daca852 f688ffed8be4a1ab0f2611a55a1bcab87ebda1a4\nd8055d72e18e147303c486b378d9a275997ea8ee 15318f155afde49a204ee268bf3365b18a9f8daa\n3a2632dc91390d2bf154b4c18090558eb39cc9a8 a5b5f7ceb28801bdba710cc0123d171c4df9c4ad\na64dc858f7176f8052392bbaa8f9ba5d3445f7f9 422d24bbe99ea40fe82714d29969d5dc9b7ebf6e\nb8dbb81d691c30cd0fccdcdec8509df822dd757a 343a8d322aa21d1a04192693863c04874c503cc6\n05bb311fa371aa4436055d24213706a6e4c6a734 f04f3a056dce6daa1bb4522d1845e5b9ee2e7b5b\na3ab598b202b1a202b98b980475fc5155883dd89 b0f33c54dbb41e835bedf92e0c74b33f9846b47c\n9d81ab0468c84cc95546d8a17e2299a7310101a1 58994bfe4998823a11920378aaccf4168e4ad5b8\na9d5cd4346483fef107fc86586ea5508239a27e9 a87c0d379611871912cdafe11060c330373e15c7\na905b51e46023a1c806aa8526724ec2cfd12ce71 48e02f3588db04da53c76e6daed63bc5815ead2e\nd78f8646eeb2fe31afaa37e9e01ed6f78348d5d1 e3bbf3687911a9b7700387f8d1877fdb359cb59a\n596c971a27dbd52c5e217b7863c6f2b7a3500c50 b8d6ca6b448bd3367fd0fa1856ef1ef40c13d378\n10541365dd85b870c54ce3a53986ce76da80d44a 46806fef2b35f904dca635ac2580ea5c239bbffa\n5894d539b79e75d731417d5d8617b14a21a7e99c 38b8e1c74ebbd34f3c20d1488dd7436096491c49\n44f962b9d8b23c9dfb6076654efb8914f0af275a de92d8a8d3843dde5329fc743d6c5872c57c4d2f\n44232c7f7f69033f83a8f27aed736b735f99b4f4 058ef3499f610846d6e1343ab06228ba75451c89\n1cf1d25d937ca45b3572fa98d220a050ae120867 877588d64fb7cd892a8c78cb24e3c53f1a2fe2e6\n927b3219bc261ec98bcea0fe031a63a522e24480 119fb10b70d09556e30b5bab454c71b9b4bd65a1\n50d5467876847fc82affd1add8e4e0795d4d3b62 786770c79115ec5a42ff38494b1447880df6135f\n038fc19f2a2e24c96cc130e04704d1a7ca7c59d9 763544a5e5a5be62d8acd22c2b44176cacef9099\na13d5f710d28b4f99c64cdd6fb30104ba108f410 bba44500178cddc70e131ae191152d9bbfc2b421\ncb88af275f77dc053c0d94e756ad954be00f44f5 85eb71ae19da77564bd3156c0e5919e07692df68\n0a65084a6fdee75a4a333eb11184a3d37b65ac3c f3ac378b4a20e5f5e7e1354ec5412d1d92a25569\ncfb0aff7ff72d962528d6e230efa9b99c1db11e1 3eca0998ae9189abb0858ab5c83cddf55cbc596a\n37cabc1ce5e2eec0f4e39f7bfc46cd5573a44eb3 6667f1cc75ceae8dcbce469d8c487186e4b74901\n2428b10e00d8a8218cc28507ecf6079d8021b3c0 0f20f43e888969e13b4293f3dd5f8d05bcb2e738\nae149e21682539057ff76d71341ed99154f15e4b af770198d2d1f42ef92700d7577056ee147eabf6\n7b638e6128324d82ae13ee5dd4e14f21dc22d889 71e630e03157989dc64823b08298d9a5433f2476\n9c365a4090b4a9e3a38b52c92a5f6d691664b348 a89ae16c14ff152f324888a6c1bf8a8c14341f0a\nfeca136455d0ba1f246f9d888045c2697a11a85f 55fdec8a6d84cc1f71100db340804fe6859a12ab\n733919142a8b3d06867f17186d821e0e9cfdb3b8 d2eed54b7515c043666c36afed6f70bde6077470\ndc42dbb0f2de0f5b7233a674ad266965e270de27 cd80fff902e0d239e0b1be2fdf83233228cf7986\nb6d6e0fb207b37d41786f0bf70f2b7fb1d200671 19ddbfb0a1a45e314771a1c09aa0a4cfd8eda49d\nca9d18b223268d613a7616dcc22aa0209f780833 08cde3597ddaf85a7bc585e2e2f560b031f8d8f0\nd4b5d3196048ac3711c9c07fe403b93929566e14 0e04c15573532edea3648cb1016276590dbfb836\n0f784fc302862709fa5adb69a80c40ad2b30ab76 78f0b1ae475fd6d0f8fb4537ff6e33372d584070\n4d2f89b62e1025e831a7a133b4859de9fa5c5653 77aa783ef6d0f5b1b50e2738d0009cbe24c91e0c\n28b17af5a7d6f8bdb859d88ca23924f1cb29b93d 5d9b5021536079c1f434364e117a9c99041846af\n72fb6167ba7a5ec6d3989937b4f0cffc963a5078 b9eb32197ca19969c66d9f1c763c21b4b37c4bd8\nd359194137722b064f8038a9f075f1d51da977ea f45e67ca75245416e12c4caa5f43abf4c64f7e24\n425c9cf4a40aade957f5a8402dc40369374e7428 088c9fe2f0e37f95b14bfe3ad497447df1001104\n1621f1fb78f8d6815cc4b6ede6e31e053751312d e01ce482be6ffd8e66c78386f9642f7218035fb8\ncb5409fe894c00b3c6d0cf3e590da680e2501871 5e3e11bce35ce37974685d1311df99b553751f72\n0bf98e773be339088a1513871f4f9b0c7ff55f32 8639a90e4706276f8a760661b82516a80405eb6e\na5954226ce2df00241a2928a4cd17dcd1c2bfb8d f4912ecef4f5543013a08d21306f8f086499d5cb\n33f6050723a196b8aab01bdc5b62e5d857d28bc1 7f08f84bcd21c086fbdc68600c81569fb597d79a\nbd7350ab648ba11ce990c7ca4d822a335c4e022d b6c5920efe5e1fb72f83718313d3228ced0cca0a\n80768bd512c26f2c5df8f2acb5aafad912190786 18bfb54e79cef9efb10b64f9509bbf65b4132117\n4fb0e901b583ede14e25d0c874d11b7aed769882 90a34ae38c7b4b0bf224db29b7f107e1243c6b92\n5cdf2739afad3a9e5b2fe96b18e8aaf0b84677d6 cd987682ab79ff0692d21ed72e142341a938d284\nc78f20c08bb4a51a661de479344b49d5c781e852 5cd4c5c14f87bcf921a5555460acba4163cdd54b\n46dc587b09f91e002c28d68ce8aad18529ba3f97 8fffe4a70e0847902c0ad2fc0c30ab9d3ba755dc\n54bf099d8fff3cedfe5b704b8cf2e9f8f0392c84 c98ee171ab5d354e964f72d15b04f4af57c4ce16\n7282ada31ee35d6fe7226e9b614ec526a9ec2a37 64f7e5cf51763240ce12679851778cdbf7a64ae7\n8fd4051bae84d8ef5bb3069133b675c40ec42d27 dd526ca20b850da3989848cacc7b767b0bcbf77b\n6db3258f3fb3242e8fc3dd3b92d9bf16863b997a 49a332a7f7eab6c9787e21d8ef8dc50b9b55fcbe\nf97dd72de49366f0326d1cd4860450b26591e600 5b3a2ecc4d002a454e745e6821c31d30ea9899f3\n9a7e84438eabf2b1d7ef899bf979c71bd17aa65d 7f0141081d812bd615a7184742a7403b96b76fa3\n1ee9f8a96ac9097a70584ed6ccac3175f4bbcc9e 08ade02ed8d99043a7fba2eea8b57407263d10ef\n25c07c102fc6e1019fc14c6319fe62037cc30afa 28d28ef17b2ec7b5b313fc19d0834f3e4119787f\nc2eab0d350c0a75d76cd97de5430d9740e35ee84 6650cbb3f21f609b79992172fc28f6960246c302\nf41c33b3cf1fa866d7a89829f00a03861258e87b 008a1928fd1d4a683cc88d8fc1e774880468a328\nf0e3bd0663054ccb0a112bc003f51ab9bea9323c 0f500e105ab885e6dde0f3747eea8ba4387c25bc\n350a95abb9c3f1859457a772d5af5fa47cc9be7e 9fb87933bc8ccc4a6e944533fad8474e5dc21ada\nd6b150f22f7773f622cfac2d0bb5baa29c17783c bdd388144b5969ba45cb36d4cb505fd2db100edf\n6f186b8d5ff00724d3728b1d28c988cdcdd1ea71 2c53d3f726ab2671a2afba223dea97aa89d3c415\n7237e5b79bac61610a53098a750208cbadb8360e a53713bab15c65366ecc7f6cf2256129378d3aa9\nc163ba977dfdda2491c0c69c8642fd2a03e0d7ae 6e22fc432301fcb8f591c162862ebbf912c47f62\n4f3f4524def29f8484b731aa729a59c75215d8a4 eb059eab136c3786111f6be2a42b3ca02bff3632\n8389b4174f45cdf859c72652556767c5adbf6d6c e7f7fe2ab701d3753b6d7a06b4faca1a16f3ac6a\neb36c7610877b9c03623038593ca0c84d3393135 532c52549081dce320c9b19a96cc633d14d7527e\nd945e6cdb16ca2a211a401a14d1c1f2ef50d8a37 6c89df9dad37c43a507be05cf272eacd83351152\n65fba99df1f69f61a1cbfc1ea3752a650fd8e5f3 944ceef5e1ed74c0de1dd612d9814bed02383c8c\n88df416028ad960eb0a1fe905b08eebefa4da6f3 41e7df5730316eeb1a72345221260d715d047715\n7802a34859fac404729a42bf860e6b36840cf095 a52414f2baf02c8a740ea3e1ce83669647d7d915\n90027dff6ab39e4bac4d849f4ed8891e08822f50 b35c35f2dc19ad68413fc4124fea0820484608a9\n269cbb845f7381e0b2bfdfcfe85ed24a7a4a4b6f 795a7b988926c0f29ca40cd179c3e0cc769398d5\n3f45ce96660d3d46d014a8da0f58d2803fe280ac 3803b5b9f2df02264eceb97998df0a44a3e0d57c\n55d77c4d804916214665230335084f5a0a599419 a1ba6c510d7181e594b16dd5415a981ac1d3e864\n7dafdc623252d201128b7c3ee5ec783406aa7517 a3ffec7b6b4a3d5a3b3efa2fc4fa927de223ca1d\neb64f792b9a181795f6b80265f854c39a19de5ab f3cbbca17d85239ead2e94fb5760acf33b64e2c8\n1ad44f68dd5db1f2c125ee52410b22668d9a2589 f55c40d7ca9b740a634be9943fc7f6cffdf30b91\n6705dc69467681706d08f6438c5617ad47b39c3a fbcd090f3bfe01c360781a4c203f92102af21402\n92ce637dbd95c4271b4fb06574b9aac1df5fe653 9256ef7754a7b417ae8f7009e136f51a05507558\n3ea257d6554cf9110ffaf5ebd0990e090da81e46 234ac8598b77a094ff83a90e5f870ba57b5452a5\nd7a03887c74d17fec9d7712a4248dc7cf6d483a9 729e1bf6b3a0375c71bd9efccbe676f6f26669b2\n280c3e79bde0f6990056aa80d84fe333f3d73b00 6da7737ca3c542a26a7224fd56c80d2dd1641aab\n9161c46afe4194c99029ddd08e282490d74d237a 5ebba7c8846f56d2b759759a91ba68d61fd20aa5\n8ea515ec9e2ca8340773f8d21a33614b7af44f8e 57466e6b3ed26899164201baad88cf816b6fe900\n2368e9fdacf1102d6bafc3042c1cbc7e66e6170c eabdfae59cbaf46502e76ff633f56ea598c71042\n9ef555ff74459650f1a9ad9c5ebc96aa524cc335 da783953aef9cd9c596a3ad41d419163e48cda86\nb5d8f7e13b6f903b7d3eb368d0757e373a55d3f6 0bf447e907ca8e559e78223fef571f82273eca49\n6e63aa7c35738e36cd51584960a30b77af240f00 04d295a523137304aaa3f8aabc73ade11366e16f\ne9ceaa4a119d0397015413990e4ad0d41e6b9a24 fbcccc407c1934db6297d29007289ec6c886b537\nce2174bf6acaa9864f97ce83f6993b234cb48bc8 88b36c1227c52e22fd9adff12188654833aeb838\n3c4c7a33dc6aeaaa05478746f6ce92708dad374e 265c949db0d10c530ee35cbb45e19ea6855dde08\n884f2a8e08def38ea242ac26753473cca6f00b74 e123083d52da4d575fd00589c57c54f3d72148e4\n3210428fdec8889fe516f62f6c1283ce61fe3836 9ea3a7f3fe89f2c4a4ed70b8061a1444e5718035\n281c3209f319e1b5a5cece211d976e9d105223ad d32dadd815b6a09bc622f8cc52837d113e73d9ff\nbc540dd2e8b5ac4d9f7e4956d592b3987258b3ae cb099c0d5a43e08279b8f770d1708a16b7f6abe9\nb6a417d2432db42079bc5c7c744d5d8346b3da06 3eefe50015d1a3ba7f751bf12135d597d870673e\ncce52600fb697f8e9a45f99aec08027cc2e46601 abdc74f8831bcbb74d9325f19cfd5a96d7be5ab5\n4185222643e011c420363e1320ebfbabfb2da18e 290f329ce8c14f21e327d06b636cdbd6b79b672a\nbbfe2793da5e279734db62f027dafa4b964a5d1f d4e3707418cb3a08bc8e9ad6a9af84ac4a7274d7\ndb9098723887ba920d3df24d7bc9adb00308be03 adec4f22f426d5af608b968e62f36275d227ee7f\nc09bf49bf1af4e6c10704f2b6f246fe066e99cb6 247f84cab7381178366099a521f5cffe64e212a6\n76b5524515f0c79aca6de94e254c41498bb8134e 864355ea2992ef0dfdb8188160ee37e8f8839578\nc686bad7d3fcdbbaf3728bf17ee72c8033ce2c85 c711c007db325ae8302d30d1880c0abb70f371a7\n5e675c032897573cd6a945076fec86ba485f3682 50bf0db54bed58d4ddb536ff5e347cd3b45b8b63\n59d18ddc2b0b106b3e680cf85cc03d29bac4cf73 bd9616e06571250b030d9a5db884b967857b93ea\nd5b3c52ccf5afdaac2f8eae21bc8ddb0ae7b81a2 a176da5e3c5ac6b1dbeee60207c1bcf92abf1ff5\nddfaaec26f9a64b14d462b3c4ea828cfbd4640fe 8c0980ef16caeb7547e92f9ff9174fbf392c8c6c\n03e00b81ed31474b74e1ea4b18f65dfb501debfb ec8b96340b11b54b420d2a7bac2ae32c8d9fd3a3\n2a570175f6a9f38be6b0e9b7a011477eac00db7c a725fd135ce60371d5ac2beca3fadf10c635fc3e\n5c96c52193740ae9598f8675f2ec1211547e6a4a a7e709b9bd6fe4576692904f929b9e10e344fec5\n6472f1d4513ae11a2791901560cbf6136ef0820f f4236e92022d8061f7f4e578dd05ebe6dae60ce0\n61a4b859454025bd104b718168d5dc33800b47ef 849dde757cf93fe4820180c841ef28101ae09811\n65b4a62b40e66f1f2d63efd00336b2fc797ed168 96e19fcc6eec6301b365120dc2688284b0f3e769\na8d943f6ea284da1735783518ceeb42304653a1e 2d8e29163e5800f6ee0228cb7154f3656b9a0f9d\n80135df131fa882d81bac963c8299341bcdc5adc ba3a4b3f2d69995ea4e7ddc8b4e8e93c2c100a6b\n3552b3dd808d3c41b946e28af20ef95fc24a3a9d d59aa6569be813475367f8512d72b8a8da39f38b\n1f9c2b52804464532c3075c2aeab8fb1f9d6e17c 427625d9488f95197b2efce997b5576ea775304f\na835ba0d3384fa1483a456863ae8c8e5818a4cd2 c8c5662c679f64af537459a9cf876146fd100984\na235e6884abd9b9135db2e3ec43b308493927f10 af4037aabf184cca8b55e892262285e75d921481\na2ae42a20b52e8303517cabe2c8a2b9162859457 c3392bb67265151f111e6a469f0c03662243bf7f\n1c6bff222d8860b2cb42aabad15813e111f7af94 4a39c14ffd3331e94401495b8450941e2c578a91\nf9265aaff42a52bd87e56e7e8db0b164b979627c e10fca3c854a7716b7b7ae594dd60c90cf00f85d\n17172480c825784a17a1a3643002cfec11a8854a e0d9234867f6d0273b2f7d430d38cfe8a4d0ef12\nbb86090be9fb9cd65673cef54aa2a976e88400af b1c16d58dc726106240d7f4d3c2a836071483910\n6be19390e8c354e8a482dd8c633458ac9d8033af 1a1a72c3e956f1ed86be0c4f67c39b052237f21f\nf7dfe6be4530c2b40eb0f449e3d810f6f285946f 0d915ca17e4f2ed63897a51f5da927b2b59ae3eb\n44e28875b5dfcb087ab8408de34e01b374bc59d2 c9ad1bb310af7914643f4d873763ba4380e972d7\n9be1884be327140020ed49003bec369f6a977acb 7400883f92f2dfc5593ce3618074d2b776fa40a3\nc61663636970a81e0fb4338f296379d0bc50e5bd 732ea752b559387cd06808d6e7775ffa3e262899\naaa12a94be33ae1ad9d71ccc62f36861f351aeed a7d60cc5b5f4d464e2e7936391b1bd39bb51d56c\n2f192fdc0e80c83158507cf8b9c509837a0549bd 26642bf9d59eaac5c3f7fa99bbaab0f2b351369e\nb685db52705e0a3d0222afe4d301dd625c521b55 3d9b1867cdc1a20baad8bd8ad6fd955eba01b33c\nba7c5580a61c988a35450cdda669bf59507e5c49 c97904f69390fed5c1a76030662acb63494b2781\n29e88a1107a5f06ddd617c795b10a212073b4f55 729fef476856b17ec8acc3a3469c740c65945071\na852425327a685cf8a95849e15e7ac38ab865fe5 f813c7adea3cfbbb7e33f1d8705b8f132cdffcc0\nb501a83df240af22b3eb3e4f7f3d0cec1c1141eb 75bfa7ae17314a5d783694d93ea18241f4124c0e\n7ee2e52f9987e87939f3fd2fe0bf9441f3f36c4b ab86e63a110a7c67e522f2f0fd2edf668a17c7d2\n9eeed2336a128cce003e3169357144ad5ac31649 17609326d49546e23bb885105a87096774a9b04d\na9bddcd62bda6cb7e0b5e4aea14bc6db72a28f4a 276394952a64d63391e303b89c4488726b6c0977\n084308e26b1c602f54f9059e91109d5b76acb504 a79a5ce598a79925d49d51e3477c460380920e64\n3f442415bf37cfc6381db866469d81b8b21d82e8 9ea3ad92e9b86a50b6f6674c35e329602b50842c\n4d277518f42519aa4ba49416559192a722064c28 58452571a3aa735c267f1061e43075e4927e332b\naf8d6f15988d1597aa2f7ffef344fb65f0ce7ebe 6a8485db270657ea2066b9612d2f3ef677812f06\na52a73382a5a9ab251fab3d9bbcc1ec69cfcc86f 8e46a6857cc0c8273aacfed9a54dbb9ee7ba4a9f\nd448aaf16d8044384c000ac81b157ef175893a7e b63f4c3f0402a1ac07603fa23d12def4092ac23a\ncba70d2325c5bd65fbfb1ebbbc0e2428e1627dbb 6bfb7500024e061c4b9310146fc844608ff4ca00\n6f3c12e5a7c7643fed2733febd7e67814401a8bd 7a745682c0d7b90b9585d1e1a2b9516ae380d899\na15faec93e119e1d9dc996769e02761c61bff2a9 60992350acf34e727b8edba9c2c87309c61ba052\nd187bc3f44ef2f2149b21c8dd52818b898266ed4 643696c3d6034cabb178cbadc0f5f079e4a9c06e\n98f1027cc540b8f50591e9deef8dbd4d51182015 ccb0327253b745ef754715290a492d97fc04b948\n988e5d470b351934c617ebadc9be24eade1dfcf7 4ff19466e5a3348ae0d2fe0898f9df1bc5182237\n018dfe6a63729a37bd999a340e63124d96e77989 2cec6ceeb003d6cdf8aa8572c1fa28306ea29056\na31bc2875b8411d166bdffe7f8c82cfd9375b0f7 fedad56a08b39baaa450967c24894d63a309e104\ndc5e1ad4c082a28721986b87be80dd43f4dc4cc6 1d81b67931ed07a0e6ad1b9f796f2e5df79fdf2f\n3ad04438055ea25bb316c88ef580542ac40f12cb 5705531f40b6f7039d41844b6164b2cf60273a53\n8643d1b8d92c4191e90c9a142659e4e29fe73523 1bb3b796557e27adeaf6bafa079c779034521388\ne927d1d0df783130c1cbaef2fe36c528d2ec4827 ac4bdc8182812da6f2544b8b63edfa619b736088\n3024a4fa29f4caeae7be958d0fe852805e792e6c 1754568fa8e01b09e7cf770ac98fc120efe8bc8c\nc5ba784779317c8d38ba3a0923aad66174f95846 6062dbbf0efbff003a01f7e179b451a898491668\n5032c41001f8005a0da1b84a782e98b4dc0b7656 625d3e80cac8d857ca7a7a60626f8e6ce292ec5d\n9ae0174da2099ababcb07224c35bd2b48c952ce5 9c4f5768e3cf7df13da75ee32cfe768ef93ce7a4\n412411fb9fc6170a7149367d4d1b4fa3f41d4b11 74b44407e543379997e4aeb4f547d6a99eec5ee5\n4ee5cd84673eb6bcc21aa6360d69f592a851f238 252bb1d16d9a063e5e9f7da6df24076e2f90f84d\na90027704c44d752e75e70654ea9a0611f9ecb93 04b832454839230744e3e5f6bcc6ef8981e4f3a1\nb88c03e108f487d30199844c75de5765b16fc0e5 e04d83c84bc1033d3080080a406e8efd8af27e57\n9983711a73e6a39721c29085ecd01722c0496809 5c7da64a9ce3d36898c4f156da58503cbf9c83be\n3794fc233843241eeb932d2fe4abf0dae9db4585 8441da2aa72b827c9c37f5f00fc1c0ff746fb975\n0716d1f3ca500b57bcdb1ea9685c50b57cf7b65c 162afa194b90a397cb9bb1586765b7415785a7ca\n73197ebdd3b8844ecdb4fe017e4f80e173ea34ed 5b68f3e9c89dccba5a76b63181e2d37cc71edafe\n6b95e077761717b2221f5986ce74ceede322129f 524413633250adc86e8364fb309a774b8aa195a5\nb2e06e0cda41b5133162d01256ad782497411344 9318c4360c3ed7aa66b66f3eb9af45465cc83df3\n2c1dcd79954e9fef7e04b11927b7bf09a287e459 c1963965e6a6064e23dac9f98f63f424cb0344e2\n5268463b7895964fada25d893c12db8db1f60658 08557a37585e4de6625d3447e6e871c36465d2d2\n3f38a259f8dc8884516c6de6a05763f37cb4e303 67ea2083f8b46982a92d86161db675f34cb8641a\nf3ec1ff1e6c2a1f53a923b1bb180fa7ae75c27d6 6de95e1c83f60bebf707780f3a945623a7f44d69\naa749f4fe88defe848a7554f17423cabb2bac032 89d2c966771c8c0aefab1978dc563158fb867c58\n9b8972d8079d34a4e1c5602f14fb7e177a5a700c de2ff1c225da7f51fb90703bdebda0daebd1685e\n617923131568d359f9debb7973232879450fbdf2 65515d1edd9d5e1babdc12f3dabef15554b13927\nc36c9ed901aa7cb3cbf4ecb03a301c6836ce35cd 990594f466fb6e92e144c4d4b974618cdcc70651\nba720b4a52ab813e6d3c5e446a8811e8936959f5 4c05ccfbb4bc385aeb080582652ad1a6e5366b57\n8d3abd21c4dede407ed0b537f41793d3605102a5 53dbc297a6d2ea2e235b9f4d162aae4e9bf3b5e7\n36b5d4f1ab1033dcfa798df0ca08fb1a629d6f51 998947561cd33a0f69a89a9f0adc9caf1a423ab8\n10956f1385cab308e9395b590e33242f1fdee35a 9f392af56cf2f77d50ea8b40bb1d35f3f6bc5d7f\n5b62bcadafd9dad7a6d49d39840b88aa90d82e66 6fe32b4e7dbaf19fbeec75a05522eba5f3148cfa\n1a911982b68b0aa58b4271a329367b7cd22441cc 41d603e2e492328216938fea401b48654bb8ab65\nca7f65f2a095b2cc6dc74a0db722dc19ec183277 93d59f071376f98caa252a884a4b903a829c9d72\n0f826202364aa77c9d2e0a83a3d60e4bed94a3de 23072ae71f2bfc5aa2c3b934eb331b2492855cfb\n8f93c410d5e6299067ae5f9351dc236eb67530d7 69e20a8b61bc803be4152467df426009632b268f\nbf6731a0124de91e6b3b4aa087cc313faccf8755 d46321e4011d9bbea65cd07942ad3863bf340f68\n86edbabe410d7549713155dae53037589dd933d2 21863c47dd2b6c6ec0430f404fbbc7a082693054\n2795bc938185f863892f4c74c77d1a260078d896 c19e5b2b22d0743d0f48d0d2226fe041cf4f6f38\n80fc1f2b8fd0b0669ed730ccc04279ee9f1d1da3 15dc2420974913db60e77806bc0f9123bfcde7ed\ndfa807d19d6f9f448639d6e3a24d757354ba59b8 b43f39d4312b800aa51dd0171a933acc5f22ddb6\nc2c1edd14a7cace00b8ec51238d79e0bcd29dedd 735d773b8f0d7d556660a3c12c5297ecdcfc3bf1\nd6513148f5f47b9f0efeadd11a02cd8fc6d21c80 04b6a2b96dc8937cf39cf7347ebec4e84257b86e\nabf59ad51e4394f46c9bcf8503277686c1c848fc c967e9dc63211cf0f68a868c2636a863298192ed\na6e563b1a38197b35ea987a2134d4bfb5d087188 9ea3144e9d8696ca6cbe6a819ff126a7f4eaea92\n1bb8ad607a24eca99756b6629c3f5c4f5eb0a1eb 0a42c807df7c100d74fb8d5724d6aadaa9dc1b5f\ndd935c6bf8f72a49d799e58088b3a3cae89c1092 c14e03830c3b4b2e06fa0e9bd5eaa59b33716d74\n6d7d6afebad48d8446c5808cf365ea5e576c4182 13ddce555dcac5de6c165604d396b1dbf68fbe17\n5c66aac21734c08a8200faa5077e074175bc1792 0664d78a0cfed32cefde738224888b371bfb6c6d\na16343fe88da79a80d3d8cef86718cab3df58b54 c183f1567d7affe6aece802d1eebff2620e49321\nc60097dfeb9b5aaa25869cfe51e77df552fc0ecf 2ec3abf2e649a11be757d154fa48689c6a0e23c6\ne3658a3ba3bb13ce8d70ebde5d117cfc1100035a 86fbbbdc4345386bb91d94c5064480577ae2618d\nbb255ff1512dba8ceba076b292d5308e836d486f f85f2d798831dab579436980b5f7a6b23ddbb4af\nbb30692718a76babdea5ea4a1eb9312fc09161e7 65a596985d34044d28ef10b76bb4ed992cf3fca5\ne8b7685124671e6d137449be0951d15fdada844c 8d2733be9cca9d58783502ef61887f8bba129bd5\nb689411acbc6528deae71f6f056d44e4a44182fb 272e06efe7fee08c0daa49c08e7d4b7689a3f670\n16ce789f72c38f74d579d6912e48828891ba81e0 982e16870f452e65b0ec616b8432e2a52422000e\n3c8dfa1db772872936ee940ecba3cfdcb3c92aeb e0404e35e4137d348057c12078c0521b3aa6c978\ne94ce35724c7adc05dd1b3d8eba07781960b077e a8891e68bccd046a6bd5803446cfe17c65ff5908\n2f397e1be5f430fb8006148a3ae3a8e3007edd0b 24ad3283a047eb7ae569e65a3729705fbb5a462b\n3f49d4490b68416bef9a4930d1b688229ee773f2 80d7c4da0cc0b9f24033f170ad37f35ba0b739d7\n557dc69fc35744bcabe6df03ec4cd506ae2c9985 6294eb58d9fd7f85e19a93ab233c84197b87ebb7\n167259db611ca9cd79d7e3437c7723b51ddbe2ea 769b59c2085718e038099bf3af00787ac17d926f\n7d1902c69dc0ffdd634128fe899cda5b03a63d67 d626823c9ed43fbca64b868ed3a73d5059723206\na8c2947d399009d1132b5008e25dcee21ddbd0f8 29cb9b93366cf94de8e458cd6969c714c0c61a56\nf0decc4db55199c31c638eea6963318b4fea15f3 fa93bdca8191ab6eb60d58d19170997abb317e2f\n4ef83bbe634bb27a5dcaed54e053ed270fe4a734 b87bfd5881ae654dcc701b87d0f685f1eda71eb8\nd39b7da3bad6f25fb5afc928e2670f01ec40df23 3c6ffa53d78ce19b8372a8df11c7e7d7016e8bf3\nf1fa677b24192bc788b7f31652d4df13c6d30612 5608b889711bd2fa759bb2a3357529aecaed19a9\n7c206a940139caa809e76afe0543069d1a9411c4 fcbac3706be803566657d1bfe2757074b6406055\n26036d6a84fcfb12604bc46dd44771299a019eba 03312c7f48d58cf5add0d02d49dc8eb96ee9022a\n675f78ecfd9116381f392bbe1815d8debd9a8e8e 47de34f16311b82edaf2d6b64f9d93ffa814f326\n199c31ecd672670857406353beec1995132e0a03 b9ddeaed96aa459a7150cd4d8547ec36a418c073\nd32a477fc19d0d04c5424002a0d3feb1674b0d04 17d57f8e9ab5021c6c8175767ffc28e51a9ea649\n4543ebe328cc674a482551ac4ff66314f63472a1 648bf9326b69dd482c5ae60b1792476b0ad85306\ncc553914f54c707978df0a5e7f80e955045e7d8f 416cc44a04d1b6d3c5fd09fe816b1c5f043440ce\n7c63a444913cc1ff05b67a423c9a1cfeaae25ede 1c2312d3dda8fff0bfda556e85ee313821f2cd4c\n6d84f21df61c9f5477ded59e66048e2f7890932c 8df5cc5a11fdb746852dd0bde3887fb3cbbb5c48\n2c600d89a45d2bbba62b44efc9b9d6c5e2783896 b02c4b2b92fc84481b8f8277f705f88c7dbad37e\n3f12466c1cea3a11d73a5d5d2bfefeddac017c25 49ec10ba7141835ca624214ee863998da6fd961f\n201c263ed1bc075750e70586b5bdf23a8fb4af37 17ed833ad77e928a3dc03afeae40132349df0bb4\nb408f347e4671ace424746dc99d7bb4520743be2 148f725fd97afbb17d054af71d496014cbc99a24\ne98ded9a386665ea17664562cc9c40d5f0ba8374 0700a2135b86ed45d4b978a67dd46fe4ff945293\nd9ed2a12832a6b38c2cf171e93993b151cba27f8 3073ff6c0233318665edfe8e394776ae38425741\n97fb72dba45fd05a41d99ac75da7141ec098c5ec 51265049467c6dafbf32e9fc8d498fd906aca64c\n64376b31c3aeba94f6209afc15383af3d1ec8a96 38bdda44405cfb3785f589745edb9f5e0e11afa6\n81ca3a8bb952a384c106afe0af0a0f067fcd20ed a16d248bd11a3a7b0d36296f1f211be2fae3d42b\n27077f0c2bc687505c98129c066f79461215b8ea cbf18a80b6b1ab3971f9683b56d6b349ace90a07\nbf1ef769b8aace163a0ffc5ecd39efca4d69aca3 c8cc5c2c99bd4b2c694eb081e9c485923e024db5\n856fd40a773b2b967c8ba68a8bd3b2f463782100 0b85bf6e72d683a4917d614e08ff16f37e3e11ef\n1943c2f147ad4cd846077835897264b998269725 248a17eecf720e76430d2722a381ab69d857c9e5\n9af72c496d642175fb33912b5f9fa0962d458671 48a3c37e8527bb16f9859593ca81d2a1c56ff750\n4189931b2d9c7f0bb12f1ffec1fa00255d8e7ad8 bb8a355ddb4cfac9ff702f95ae2e08c5aea68fec\n3274ffa0516049a11d32470d2b47f4f95816109c e832c0b41f87ee9e07897102fbc7b94c8fdf3aaa\n87bf3aaf89d763ce3088034145a05553c5c89f7b 88fe7a5cc24d42f29dff1aca5e6d606b2ea370df\n4ea7d17a39ea2515ef5b2d5ac2e5a1f1a3bbe7b4 4842ab5868dea7bcd732d163cf32e0e5355e0371\nf1958653a17812f0b1286b1a981673be6e2ebf36 c9759f176a89b76f890db75d7334a7290924e0d3\n23a812d078634a3f3af8320e0a64d7af1c36cf00 facfe94dfae0afe07d7c91812513ec4ae0e341da\ndf8682c837b92ba1305711b3900e6a66e1a84b7b e3bfbcf2a448c77943e52a2f6fdce6f3c65e489a\n2dacf83b9a1ef82f90d1eccad85f6bd0c87da588 4a0b0c868c50033fa37e0c65c051b4c83d4709f9\n18eb62e2b1a2fcf5e5da35e8c991f693d1c61f1a bf7100ba682391df83a5083d64800923abaabb8f\nfe95f7983f1e8c91855492b398228474d04fb127 3cb6cb6aa2faa355fa5636db1a4f5d6f1f60c946\n893c5d506f8a05f62d14759cf98f0d5038c7f11a 9d2530b09b9e7bcd826fe8a9ecd8625c5fb1d885\n118ac12615e165506ca375c1b344fa90cef8f0a1 39959ca7603992e202fdbfaf7b58b233764887d2\n69d0840027fbeb15da41d1d5b4bea5c376782487 602e3c288a740097c10efdf1e00c54723e9ad041\ne230499f3d2353a3978b776d1006155b6700e578 efb3c49cc5b721e20f3396d63ae99f76f4a5bd8c\n94d9c7c7f68f3a4c56081ebc5fa9488295653082 4b8c18d730f6822dd6414007ee5e08ea8371e19e\n0931bb06437d7d208ed59726649c7c122393d496 c3904a7e125fcdb7cda10fa0d927e32ecac271a7\nb27a0dc103f94b232cb92cd1650b4c0415bc7179 ffec5eaf9f08065e1252e1fc66da4f7e9c5760a8\n90fef3ac294a5310643c648c537b2aa59896674e 72eca4ae1e10aba0bc21d5dc759c67f02db68cb0\nc0da7abd39e9534f7803727266e7035f13143473 88d9d3bae341b6066e4f4414ae366a6942df48ee\n16f92a9835ef34e7591e99ccf4da0736e7d37615 d0d7d6d0a13c832395fe83d0d2f8da8524642de4\n8af8a6a46e1d26fe929b1a2d339e1ec97fdd0d2e 6717e5ff5c5ce29cbe61aa712893128cb921a222\n5c329524ec9a732354e1873cabc2ae123b5bbc63 cefc578fe8791602acccdbc8fb882ad164fc4b9d\nf80fb1c3fe23fe495f4b5cc6e13a58708cb97370 34ec9d2d6ad41fa6de83305673338f354673a375\nbbb448317a8a57a09cff276bd8c2b653106a9684 4284d0ab4ab265a22077f3b74ac85593dc92c241\n8f5c97ea819dc75f49fb8f7a71f2359cbbe5c3e5 b0cafc007435a18e367eea6e87fcb3e17ec1af28\n8ad4013f7e7ba2316dbaa37382dd3b59917770a8 1c7e9beaca1066108620c36a90e0b4d82e397413\ne4e6c9603e87c589ceb6bfb76780e6087cc902e1 99feb7dbfc6e268c2a6268619153eb5ed71f1fbd\n56a239e7c7588a59769d1e9623a73134f82c583a 12a853ace1f17b03c18e29ad3cca0e5cd4e11e97\n6d5effcfcb27189408b02d843772005039fda0cf aafbe196c13e2bfa80f1ea54ceef04dc1d3c0120\n0e349ce1fb677904fab87061ae2c9e6f33d5e5bd f132a43447502954636ed3cc04b1b814639c13de\ndf73dd0c74cb68b6240eb315c537539c82029256 1689b834c70170f833520bc9d5a560fb34e09595\n6d0b1f85f5b555de22fa5f866e205d9f2a79013e 7010132b39c9031891944b615f2beff8c0ce95a6\nf1fd6b0b6e70b7587e523e6bc31df376fe5fef31 c9706e8bc71c4e89c8b586eb369dad678db28874\nb0e73178ef052b0e2256c7973168d453bcc4cd3d 69780ed5d01f49665ac9f440d8e069c79e54a6cb\n746846a16a2ab0427699a53dec040d0591186dfa 84004e20b288eaa7d1acf2c8c106b81895b6d869\n9caa0565ce0cec75c6cec683df1d2a748efab2dd 2565d35a23c5405371aa331b25f95fcdab515de5\nfc60c68670979ed290e9acfef1fe81882efdd366 37e4221650247c3a3ab3225e314cb57afff79b78\n2f4a216c351dbaa94949b186d3eaae91a8041170 70bd90193439d18676ada3c75ef7cf75a77656a4\nebd8be774840903d1b8fdd444899f1ef2a028a49 1927405c04db51ecb936f7bdc57de71513c4049a\n54536b17d47d6a336ba5d46f5fb41bd9f182a014 e50ad2c162b1043a8e7eac43b7688ba652903f97\nfdcbaeaf863861dbe345b3118c7faf540dab36eb 7ca298f6fdb3ce2cf199f767e2bfe8a093ca2ebb\n9bda132591158af575006335cab9053dc42b6348 947ef4836c63e1ff6d57fb6af287c7e6acea3e95\n71d758535ee1fdb1085b313eaa00da23a0639988 2fb8af58f82c881b9e3e3425a55de560ed7a702b\n8a68f466f460ec4f11c4b55f4ab4251ff6af9014 2134f9c60b3a07a660a8cfecb8c8bef2a9b3ba60\n404225667decbe95ef133691c76dd652dac3190f 13694ec6d2139d5d21a043fe26112ddfffbe25d5\n9859bd0a542761706834f4d63d825fc5c1ad2062 9218dc73158401b4fc404fccbfa996769554b5c2\ne67e7173723cca9918803c2fbf70f85303ce511e 82bdfdb19d645b7312f3739b5f39d7c6c074265d\n225d530fc9c88aef743f68b2ba0688280e35c19a 31ea99e948d6489019d5c12d790dc3f8340cd58b\n968cf3f61999aebdbc814326dbdb42d7b257cb21 d156767aed0efe51682896653223cba26aaf1ba7\n7c7c9cbdc5d2366a28ba664a8ecc6067489171ab 304d0efd4956da5f350a8a539171c678c3bae2a0\nba6005b5a0e02a4ecf033e351507ac47fa27c009 771148cdac16ec652b1d2a5a423606dcb2774ef9\na567c1a7ef885a2285e2730099bf6390e1990476 beaa7eb999cf693ae7f6d774550197eff909886a\nae4657bf502aa8eda559303a454334d4a5b73665 e9d31ac84fcd3f7cf0de0529360384445d1495c4\neba58ef5cf1e0156a1c6b681c97ad72926ded6d0 e79c566f291263731faa1c9ec071c9c914996ff4\n2739247b94139f97c8bda9cfbdb0034de194f073 b66d9049034e275b78743c16abe0d66a71679efb\na479f6dc13861075be49e8ca0b7b4c0de8345263 23867066e6fa74b12712797773e2f752dc9b170e\nd0f3ed4b610e86fc1d0c6cc3db37375dd8d38949 67706946774ac502a0aef5884a36305fe34a6acd\n9afcf56656b61b88623938b01717534eb8a09bc3 59fe8c2d79336c34c239845d43c61c621e44de1c\nd3f8d052ccca7d796d99d8427c9c48a4581142c2 ce21180d7511e024b81c3dad8a68ab11aa420045\n7400bd5c7a6ba6f1b03edb557f3285480fd78e00 2a5df6054b2b10efcd4be1e04a27075550d0734b\n1f36d97551d7558d9c579b5a96866fd2da82828c f60fa7e5c74c44daed07cd2017b6318ae962ccee\n61a1d83fa4ce995701cbbc8c2c057ec21fb76b19 7a7784e1319c5e4c59f8fb2c9b2a9912be340ee6\n0e7370a2068ec495a750b7f26f3cc46ce66acc30 a34010532745b649057bdd277bc35378a9891e36\n5c68298804437d21459d06ca5444335e3cd13be4 ad1ba84881c960e9b54c077452f51a0fe0471ceb\nf50a3a79070d81c61900529326fd855857ef3daf 83beac181c5254e12219ad2821eba9e5702072a4\n265c907d5d5630139e92c7ed9854b72deb9840ea f82bb0842e4ee95b1acc47fc48eb375653d36435\nd285ed88a49a2c3d93d0807d142a7f89d211cedb 46144b300afad57766747e042489808d1b659e11\n1fd6ee91308f0c63cf592da835bc0f2857f4f0c8 90447147a38a66274a96ff3c4c86402f8a5cfa72\n14b26684bf886ba0bc11ed9b9cb72f72e15dbae1 0e8c473f8ecc73f80bc3f28f5c23fd147e28d96d\n10cec264c0403ef82c14aa459b1bac7f635eaafe c2e22a8eab80a0957c06dbb5c953f41927480cd4\neaca6281283cbae29713caab517f1593409c407b 9836843dfea49e84c374eb09064fe1dd11dc99b2\n84910413906d0c8e60e8217e567c948de5e9348e b9f4a502303bebf1899a102f4c6a15584deddb0f\ne16c2ff44830cc76bad12e57a96941186bacea09 31a5059721cc3a08f60f3fef29273769daf62939\n05ea11c828da939f12bf9911b23c47d7dbdfaaf9 5c16987c10d152c0e425b8beabd4654257d6af4a\n8e0536556528fc198ea779a88f6895b2c8381d44 476e9bab2e6d37e7e6d5970302865e04c5b53a27\n494557e73e6c0fbfc53d55deedca489630e6d260 a15a02c05ec265b2a7c4dacf24ad82db30acf559\nfafd21418d354cb61f99f2fb4d7f443b6eba6326 8975eca866fc2df139df148a3aa3ffbee1c01552\n27a6a35bd6c7a9705e240dbd338f6d3bfacaf38f 95873a82d4d0573ae752f2c50a698a9ab955ca4c\n25388c4b8cc3e7d7a413487fb7a3daa9ef5bb06a 6dc26dedf742f3dca3283f6dcb4afa104b651689\nd75b244ab6fa920e99b57334f8a572d725c75512 c515fca1fa024af5947de1075e59a9ba3b07210f\n46542428075a2ad1d9631824a2969dee7e274b7e 5017177bc5ea90b52d9d9e33d02bb0939c0596a5\n81214f33ee16e395b44a7013ffb7ebdbbc35aad2 17f180beba816002a66ee43babef2ab6073f823c\n4e0fa4da6a5e3d228f0212886b33f4ebb6b0bd8f 23450900d84238ff73f7557897f080a5eeb3cc20\n69d5ef8228f4de53b1703d6e0653558619935252 d0d11fc56f025cfda4bd0f97581f4f47cdf31c68\n77975d6028149520a67ee16a9ba3efbf897ad184 46aab697ce38ee283a39c68ee6f87f6118a41758\neb749be5455d28ddf19949e13fe33155dfc4dff1 cb663f719f537a76e37b7ade8b0b805c2d041599\ne673e64b46ed6ce0e8e79429f2012617218edd1d c709c1648a0bc5e7495345a6d85bb039c5ccc696\n78de7724f20b97b07cd7cab7506a274e7c9032c6 c0089084702c1de19f388dec7a161219b840a0ab\n1aed372103711d2d5f06298473270e03c10da188 a8606df04bcfebf99f0701d70185170ef0cadfde\n5d40bcd550d337f5b5b64fc2903a28ab192ab0a3 d3cc9e23a22b317f15164d9ace2e18ba745a6854\n6e3cd2dd60c250c89be6e0fdf8ecf08ba6f511cc 58ec6f354e4d3118c91d88771a83efdcfef3b115\n2202ab5bd535389a236766e378b902aa08cf3958 e97a9ce938e28d30c8ca7a7e68308f6c7d68d2c6\n6aa34a1d31c95c0bb3758753c0b55dddff627a0b 479c9a6527d59048b4200d65a850437d7500f7b9\n00400d5853edbb45369adcbcd02641b68832104c a5c29a0e39c687ad520a3a6b9ffa83c7d05fbc76\nd13e736aea5782afd606edb4e00fd17bb25f73ad 0b246d8c918e6ec76c3168cdd458d9feb989cc7a\nd6e885937583f00328c5bb3cc5c8dab24cfca3f7 03942b4e1d138a3cd15d0b141f2c084634afc5aa\n8ad522928b2c3cbb958458149a34cb6e71f3da28 90a256faef3e6599d9272a5429857cfb669ed55f\n10194d08a3355e0aef3b435abdbd7aa69c23fd88 646ee6c6a8e0662b272ca5c51eb69059d5a2a74b\n1c3dbe7af2baaf398c3aa8bd86f83503f441c6c3 c9c8c69e30d099e1df1bee4d632e4ba2fba3f982\ncbc4867c6b16371f424d486fd29c8583a3ac6571 2b75f88aba9e1dc1b8c967d3f2293a88ee234745\n5e4fe2922f65eb8fbe8b2015abcaba7f94b16338 a5098de425ed688c81e0330e55298bacdaa6d53a\n99ad8dd782af707c10d4b444cf51b122ed6566b8 20c95f1274961de39755827202f7fc5804ddb27e\n718985a7f2ef4711f1712cb384c59779f69935b5 ea1c6f506cd9ff81e10e9baa790e0cf33c34d396\nba2a425ecf54a34b03e737055877a187ba61d7f8 d361ff650703d4457ca06c246a2de764c64294e0\ne878e1b6401a79861382dc39622e7832d6ad3e77 99328b1bbe156102811da3e0c712c83a41ce20df\n1e70a0f97575d0556678d087f2476c81b74647c8 bc36aa11e4e27414b2ecc9968b434c840d1fe015\n0f33791490d5a29b7600d1614b3636ad42dfc9d9 5acfd9d6790fa00ee505d5e1be7df338626139e5\n9abb7b86cb12aade4d543a68228cac795db16ea0 0c9c7e66799a05714f24489f4a204df1ee49a4ab\n9804cd41633c09a75cfd02a7dab8b09afbfbd25c 0b688c47c6029eb5f9ed22bb6708cb9d7a64cd11\nf524f6973ad26e3ed11b3fd8ae67575935df3590 4922824a869882c576513ce4e42a94808868cc28\n682057bf7b1ad40a0dd0e057ad8c8dad9027fc15 f5b0b4d576c1ea4288fe924c852e78b64da510e3\n74c1fadcea645c6088d0afcbf591cca9a81d738d 44ea077fe17daf05f3088e008b08863d981fab31\nbd0d8ae8880b8a185a35b85c554d5239b52039a2 2d0a7fda9c840bcf4e426b560bf5b9fe2901c62e\n84637e38b634c16c1acfabc66824b5d56442d101 e0eb609455cebca421ffba7c1d35c3ece53bc869\n571162f53c12def0767a88962dde8aa6cb39acfa dc9bf7eb5e840c5f31c33a1c52e92e3ce8ff8e17\n396aa3e97e25b7f1af139cb943f6f3b60550adaa 432072984ed277034105d726d0f8505d7c9074a9\nb1fa1f1c16faf3f5a87a955c4de04d9a788a901f 9b9aee8476706cdc3b9349ded245813620f4a015\n61c8e28ad8d04f649c3671f22a5e08d1b5e2c022 3fddaad222861b56ea798742c26c9fccec3b9b1a\n50b9eb129946f1efeb48d319cb22890b278eea59 71764a62f2ddaa674fe905bc86519e48071550ff\ne1d8e95f074c95c882d226d5f5551cb700c3d529 f23c0a0049cdf2fbecbf4b18b599d9e58cfbb0f0\nadada0d7498bbfcd44f976bf22733335c44429ed 1438ed0f171c559c74e5ca0c055d5e7eaefe1a31\nd0cdf3520c462e4af777ed706bbc38ad6518bf93 6e2b5a1029ece461e3e9ef9dfdad497c3eaa4a7b\na88e515c47a3b2be5a9f9af4d66639a2873d7610 6e3d487b9c0bd9bd1707dc2e9bafb4327eaeb1d5\n1246f0fb7f5cf6efaf89bc24bbf2a0e38bf09511 482e83a4083c1bd21134c89dfbfc7f1808c2ee5d\n7c693806ff4e4ff4f02adad571819a6a6c289a75 63e53f2baf25e954dbc76898ec6b9db2ba48a416\n5982d160b166b337a9d6aa870839b37bd5dd14ba 28699c02051ef00dc1c80fe420e94611dc253c3e\n6049498d33468e657ca0993f16e5069bd183dd59 67ab337f32f0e9f238de74d8c78af9a5144d8611\n5c5001d6d567f3b42069b9fc19a9afff06f306c9 1d4f92eeee3293100faee31c04b9776d2770af7d\nf5c82be86dd0fab01cc837e9c8cf5c68b731a5af 54289c8f4ddef9b8c426da460cedb8f0db0a65a1\na2a28a40abc9903f27be51a95d109b4eaf0ed36d 4440a780ccd4df295279966b25e97d8a58ce83a9\n3e10c9996147c7daa8fa778fd8a150823319c8e1 f0b49d73717f4ceb1653f8ca576861f1807905ac\nc19e8b4c88fe92f543013a52ccc62aea067a42b8 46a119b38f721349f9e7c4c0f8b8e92a0e357e54\ndf8223d57c3ffe47b251b105f017c0f2affb59ab 434e3ed3ea09db53963521f23f6717c05271d65c\n8a817f953ae9c47430de8a9364a434d0ebf49bf2 66e322d0ff5842243eb416d75933aa415c6c5136\n3c2d1254336b2995b89f4ab2d05d80e8c9005cfc 881c8dbf269f43cfd19708d50a2c1d75c8b3fa26\na28b0a8f79f37cb8e84431e443345bd04603ff43 f96eebbe4bae1da3de8dcf60282fd018aec2a13f\nf5a0a0ae24e868be1d2b976296d8c06b319773ee 76c2b3cfc5e13a29161fbb1d1d45e163aa479d97\n0a6d3f01e151869a9d4ea9222746d5cdb86d31ad c0b0297ad060a2d31f78332f994fcb5081ad9c8e\ne1a20e7768fe51f5d816020ac7880489650c1f10 0738e87a69e64b28db38beecf1c3a3c72db41ba6\nfd13b371366c71f29edc5d701b9b7236705da6ba cacc1d2667312767568ed85f5489cf6480eee7fa\na4eb63e3a6266f16689c699d68a9a681124678a8 98a685381a5ce8a5c4e9536e1a954289e16d7689\n08d78e1b0f09835d7de50950ca18c4429efa1f55 c45e9158077993e56acbfd1aec6a337706c6377f\n8a85c481ecef3c76c442dc2c9e1021715f2cb79c 2f58c21a4918ad3cbc0b5a5dfc88145299ddcb59\n34f2182ca9aa5214177de0a50ab8cec536ead947 cb0589ad814d4fa621066681e8b4a89811a6d05a\n6eaa676930e2ccd8aab23e9c534685eff8f675ec bb6a886f649e067adbe4cd74238459e0d891d381\n973d70dd58f34ba698ec54371b3ae68ad2c60bed 4ad2efd8a70c644c972213a5261b53a623958bce\n42f883a18033b263f2d0c11afeebe782b9d49710 fbf9d5fb0b7c4f2dea51baa94be5b88918de0ea5\n8f0dfbf34e3bbe2d57ea739804edee6e38d68361 d709e214205942ad4961bfa319c6355ae6b1c781\nfec40d006dd587605e8c9c078b10ecca5ef0fcee 2aacd12fb52e335c56ed451a07b8b6d61f664f97\n002b53a30629a4aa96884cbf9cc204058c860441 a97ab69fc4328cc32021da3dc7aded51dde350f9\nff4123cd704c0a928d239c26eac4a8f4b5c793e8 c65de875008c1f143867dbed5cb955edd7da2538\n7d014d09f7f5b4d3387559732db16303c9dd4869 f99041c2220232c2078a9352ec41d4634c94aeb3\nd2e1b92b71b36995dbd70c4235178996dea18be0 dcef9d47dcfa83896b6f921b2de8e16d799bfe29\n4c40902463bcb94cdfe2f44bffa237e686270954 f4318b720ddb4faaf7b84f447a1371b8b4fe45c2\n12f298bea553adc4d2c72ed59abb99532563665d 91aabf05b3fa2054e0c462410f2400038f5ca4e6\nd281b161340662b4411f40e7faa9dba03c884b84 9663ac4e3c8283ea6665118851572e7500a3d40a\n146e5a82cff3aae464f0a8790587fa19487c7032 1e71d7b0fe841f1457553cdf3ce5e75f4b77d781\nc3b899402a4452764df0e9a8c078f54fda21bbfa 0bbf79761377fec5a0918c49509cd8780ae7c5aa\ne13eb2264ce4f577c5ee982c9c880e91565aa5c2 9f308e381bba833cedbe6040e9fa93227d984e97\n80c075499e39e41b0a210c2fb3e3c9cba970d019 a6565ea8cc0d05ffa14e74f2040753c101147b02\n76202d75d6c1ffb6bc5da5eba4d4b009d193b906 a59f9ef5fd9087dbbf4993644c0d528587d82b84\na7be2a031e12ecc29dd213b7dbd9f96613f3e237 144739b938afa6c20f67a10a0632a4f30d71c8d7\n1e7b8cc88ea971ee83473b0e77b917695ad582b9 ea36d8516ed439d2d621bbc2736e7dee278dae1a\nbb5032b4be64c9eb5470c141b979cdf127e33472 e7a7a5a0dea588149cdfa414d36471ac5c91f6b4\n72d10c4c50cf532474a4d39b9214f99c6246a59c e46a9724d8cc393a0e0f1a80362568b713899ff2\n1e1e6957fe5e01fbe23d4a1f10951cba8d604757 3d7635ebb147942c7c3e34ef5c5bbe4da7ca3600\nde4b6336d627f765bc98a234e1ab4d83e71872de bb1c538a7a8d7d353842c8b032bf2812a0265c44\n2259cad7d947b396c99d6e4922a7832c86d9c6c4 e0850bef4fc2cc9a11745c04f8fc89d65032cb8c\n021dc3d5432a690744b6c112ed81827108c28840 04545e4a759a2ffb6dacc152cfb367e967c41750\n99c48104e6eb874300ce2e61e076738cce9fe196 0e00f1943b2748cc8fbc895d65d9ad6556315a56\n9e07fc9a0af7411df6631034d14186656d4614ff b3b13326585e3bb2f998ac089cba4f36170d1ff0\n3b170710d035b747cdc19ef9362151841aa04425 4275857c21ab7e23528644601c003a69a1adfdd1\naef3cb517066d1c8a07a61fed9ff6907095b86eb 64f6a847f2edeae326946c2b4f8d14a53aa4de16\ne1510668097234ac1a1a9bb293b2f2b68880391b 50c15c1fa6daca0517eb8e4b0d488aa1df3d811d\ndd56ddbb89610eaed66d87cc883d09978950e93a 4651789221ee0d08d645fd60ad4d8d0e4a41f527\n1ec4bc63bcdfaefe6137fcc513008dfdaded1b9d 9d96ea6961b6496f109ebf4610d7e2e86b54498e\n1f8349e35910a4cbd0ae5831037d21b221e8f9a6 7d33ae617a83cfce497f3193dc100da2f0dd745d\nbd72ea7a99f2ebfea1ade18d78fc5277c6d1c3a3 b4a22f114c47e5b1dbe8d17e347aa144af12fec2\nbea576cf7e751b709d3eb59770920ba8f72e1fca 06df2d718b9b17921a492a9ed64218f686745099\n1eebc799667641e3dba4408d0603a726457367f6 4e8e78c83f3ffd18ab56c1468268da5dffe76d80\n86aa5a571b8d2f2a608f435f822b15d8d64656ce 95a13a3837f78bc0bb8d653124fb7e0ff9728086\n74b604fd6e09ee1468080e07506efb77c601b3b8 b6b6d8e8271c3414f8271c14e9b435208fd2a073\n1bd39e35e1c2962db7cc11b31204016c31bdf3f8 9946f9fa59ae21d74c679f12ec0fdb57910b9887\n1edabfb257479c85ed6b75d8fdca7a4f38af08a0 e9af93c45b60fecc03e515dcb53f3d980b35b150\nd49a92efd5194f6c39be5bc8f0c28f0aa2f1026b 9610dc4994485caf4b4517f49e0a3beeb9a4b711\n3a0e1c7774c4164139a861ca67ec712d5e4bb810 4800aa0342f32403a644ebb4c98a977d3085ee89\ncd21b17d1f234421980899fdbcefa0a92fdfcafb 9e65774bbfbc2b1771f745611a4cc7a4a1b3e7a0\n9b35045b7077048749de24dde096cb625757f32d 9fb656f82d1bbc719dc8e011003d6477490dd12e\nd64b00a7d744ed78817687b7f3f343ecf2801b4d 95760e4c11c6f982f16e5d10bd7465281460363b\n1c9d4c90abfea9ff1fea6d799b5adac0b31dbe98 a7e6237fdd51aaf03fc1d8b060623ada44e486e3\n322c1c91dec5b7b2f813f678ca124a8032fa8d8d 94f716e144081fb64b5acc74178c3aa3fb974ba4\n7f31684cbfc514a711e72d34f56c4f8c429773ce 1a610bbac4f42b1c361f71ad8abe81cfcbb9dc18\neaab57bee7384a2cb013733bc0602acedf97f9d7 df8b0eef12a49d01df30ff5d4cf802e674f91141\n94d041c434f7fb0f5d75c570111d0de1d4f6831b 8af9f41e1a342af1732c9d3a69fcc077ae530119\n5f8c7d07aa52f0b4fbe1c21bb8f20a7c99bc551b e4e103e5a766853e68d296c64e02238641fc279e\n4d7284926a06f201898a69eb1b556eaf4e7b28be 235f4781832ecc6f1aea15eed3d6ae3894ba7188\n031bb077de6a6cc1eb6bb4102e04a31d1900e0a3 69556d0f8de2980330f574ee7ee120bb3be97d02\n2b17b29809a724fe1ae789c3ce061005f74d289c b898837628b43ce94b6dfc83b2bbf35e208ab7da\ne763e652b925f4f226bd12e38149d072e1cb1cb4 831fceaa01ce0d976e7441e426697d0f85b2accc\nc407dce0048036c1d8a12dd5ec29567f59e4f925 54af0fb44b2fc61afb26a57fa2f1de94174ab56b\n31ba7e10d680bc3edf8787a605f72ddb3b3bf664 566db891322f62c4031aa89e874b7325fac29165\nb97b8464e7aef9ce1a4cdc855763307615b2c051 6ae2ef54512e4ffc8e604d5448b9560c40fa12e5\nb5915329b4bd41c4f6327c596f540a87bc848f5b cae58133ff71d6a2f2bf21974a0c4bf0fa5fc7fe\n753875cd280ad644a224c2571f86c1e9c5063be8 99bd70c85ba9394eacab3ae69b992ecbcf3c871e\n7824b9706e884466bdc438c997e3f1b75c069cd6 1c722ac59c3e9c6bdf9e5acd428f1a18239bed7b\n5cbd036122d0e48c13ae75bdc120a78c2c9132a0 c55d8d8b8bc0aae788ebe08fa9b866e26addb813\nbdd1a6b0194e89fee42c5ec4642d0030de942d74 8333129f768f1ece7d5126f8b715050fc4317e3c\n60a66ca7654efc5b13de35711b0f32c0251baa5b 0419428f028aa0d58c1f7be3ad315c3f8b0fa291\ne04a3a50b3c5a95e4ca1a3fbc72e2cdc98d8fac9 78824bc56d9881d4c4f91dfa7abb8bc0c1ba67fb\n14198198e1fbf3d4fcd5c3e593ac8ede2b47d1f1 017075a9d93f0899e1befb67ccdbc6dc47e717a0\nca031bf0def8b8a1711dc2e7adefe7f256374d06 a3ea842676dd86366aef77eee16abc01327843c7\na949c8d280dfc0cb3edfa9f081feef2584305c35 449c3215cf10cf5f4fef1137e4fcb4caae0a2d9a\n74f218a3f90e08eab943e04cab9dc4a0f4c84bf6 cceaaa513ef12b37326a8daabb302565cab1540c\n856839cec4c85e21cefa748dca8dfcb3b6128807 1e0d866a45ac3e2bf1fc0524673a4cb177925d30\n927f1aeeff195c38bda8b3e4e74d4485b43c15dc dd49b3bad46d563b213557fc4d7f3b5c6538b8b2\n799ff31b1f41e7d7a6c768855e02a6d7c0f80da5 909217371916bf1c22e7da5d42b352ec08349f10\n852ed0498accbb755913e300e7262ae05f8a0f7d bb90a025bfdc276221981f2e0bdd568b3742d175\n68a02618a21321ba2637dd1ecca95e5a34447362 2fc1f9b998f45ee01cb5d2e8fd3f100d16d4bd54\na43b94af3512c116c305b074a237fe8bb0436eda 5de8d266ec4e79beaaebc33f83cb8b81d6965e67\n8a3692da9f4aca24b35cdce0260dace03845e016 bfd5e09d80911f8b03f2aece248def5f5efb5987\nc47dd70d1348e6251affffd07dcf8b4ce45e71ba 2101b758e59603a10097700656255b226103b0d5\n5b968d096a66afc32a5286df53ce7e0b87ed646f f0117a60d53148e1e92a26d0da35d74790520626\n70224e18496d9d34b23335a27f14c6d08eea1aab 224d4c455818e4ded6b874bd93fc1b54070ecb45\n90269d22120998579d6db3309928021c37432917 7e8772ed5e1c28c8c1cda59fd14fdba6b5d6c63e\n0bf1bca434fa18f8f4641460b3d7abca983f0c75 b15301b07c02016a5944025839cff97bf8b1c745\n0306ecb0af6bfe958843811efa5fdedad0b76c8a aca494df02802570e3f4447fa5d876e1b8b5f8b2\n7140c9b4b9ffc04cd8f9563cb04ddcfe4605bf9f 5ed2f391b88ea10d50c5c75b6f7d8307b54dab44\nc1c58693e8a2015db9dddf38cfc1e3fa048ec47a 8fc134184033d9095a5127150b3a474b3d7fd475\nddf836fd3e953418f42cac2ccfbfe5dede3b8c48 1f9d67fad8e5c61908cbe76aa8fad2310698f3d2\n029e61228f4026e838c4493cf4369a512463ee84 e2deba139b34193d9b2c513c09d6434a83608f16\na942b9a95bcf6d4949165a764b2558739977bee9 8478953f8b351283b705cb8e2b8648f7e05fdcf7\n1c20e7dd1dc1e05965258797aa95e7c522835a2e 8e7777e639129add3aad1be65bfe5c61018d88d5\n16efef5022f735dc4f396e2b6e6a3bfd71fa5cfd 427665efb900017328f393c8c2a7152e87b83869\n50ef0b4f81efdb6d52c05e75a1b8fee12e0c2b91 7ab9b9cd081c9c2cafcdfb20a56c2434d0af93f4\n363b6b8d6a62af2474d586a0a9ff86f0bceaacad a07399491e780a07e73d9ad123f14c3a01890838\n149d93f399e8fe7bcf145a501fa03cd8d31fa46a 8ae9bc9b12f5904b52db47df0a4a4a77bdc8c4aa\n7b0f164153d8ff07331b33497726593a426005c6 92fdf1941d3dd3bcd672fc68dd77b137dbeff0ab\n1274861781beca8e9b02ae5b00703f58321786b4 f1639f1a821b70e37e0c010c74f91d241f5d23f9\n4e69b92a89d4b6b3e696157bf6ebc638baa58cb4 49ed5665df4dfa3638f01092bd9db1dd7b6371de\n727462f735f201b925287650a18560f128649b3b a8618d530454b8a3d7c02cae193ff71bc1ec90d9\nb2b0d85300ed7c13f127503ee6ea658e6272d3ce e4a1bc4010ca5fb729084e3e7026e7a773d136d3\n25ad661e25615df9e3f9a3773af989c0914d8b46 23b3b50e708474eaec11a9f553a993394707fb47\n7d1169d3c94cf5729b2899d9f27847adab2cf314 c3608faf0619740b4eaac6e6aa46142ce3584703\n60e51aa31b9c14618f39a404d23e3c0e9ed6e12b b9259b65f6a9fbd6c71a227a308245b3b7082fcd\n677138907610c6c41e14a16fa44a239b74508ecd 6557ed2691cf4ee8038856e08974a5ce2144f722\n06866a63e6bb9f7aa563d5b05e855703e0d11046 50f5c51e3a15539ab152f5c5c382591080e09a7d\nc5bc6f300da709c8efe78697272beb0a98767c3f 566bbfd449a6cb66dd901c04c7aee02eec398659\na4a66148aa584536c0db0b9c13bf93fe16bb9bfa 5e8981cd8571a282b5387c307d59f604854dbe1c\nc25696be20b53a9ee2f7618bc6aa6cf4a55a680c 77e157e06a2178e303fa3c4bdb692a3874147b05\nc96e594a2f2c6d67d8a3741c8d47edbc69ad900b 732f3c84789f445cb823e72129db2f004f754ef4\nfdc198eb05f916856d6ccc871193fe57cbdefd61 25ac7f98fde10b117b00acc436669e77adbd6e91\n4a9cd03d0c06c6a2d9fcdf8a8ae78191e6a5bf1c 951bb89f8d35f96e5c9caafd263b7a415082c535\nc13b2f46a0bb236a2cd713606d7c652ec928dc79 230c7b109bfb845e09086306b08deacd3d5f1edb\n25995be28b6187fb1a4d005e42c31bd8eea2c184 9fbb5094c7b1bda34b4968d27ca094210a091b44\n837b7422e57f03ddfceb7969fa806d3f6fb28cdd d6965f8308d8e54659cea9175c7f746067eca650\n128b9bf58845ace3a1a17798798f006bf04a425d d0e3e639ce99cd78054adfd13d25c29926559675\n3c9dfcf7683087336eae14f003af3279eb8c860d 589f791ee3b159be6a76265ef29829a0ad5af1f1\n1a2556c3d742565cde51fbd2d3d12287cc52adfb 6aa5a11b831004fe2fdf0bfc62431e3d1707ad15\ncb12198372b3f9d9470e69ab20587fcb750c8595 840fc6af588272763f93adaec0498344c4d0e4d9\nff8b25e57977557fccd9227ecf9708690efe56e2 047db15efd2dab50eaaf5e910c1040f934534e2c\n5970a5cecbc0aa1ae75b66da3d7bb961724a112b abfca8cfab4f81c7e218d214fde2443b7001748e\n766f787fa17c5c5d0c326e510d6a76ff5fe82508 94dabf5c37249a56c4f7cbcb944e6e708eab9530\nb584d379edec807367ca49451016701b32b94f5c 66693f90a14954f3bf5f858243f7de607a7b4c08\n4604dabcff1bfa2fd9f02a5e13127fa7ba03251f 13581a1c75a4a8d6d3f3cc9f85e999346241d965\n6b79c00693c0ab73a156c0d9bcd9d60f7a2260e2 3f6a61bfc5d7c59965d7402ef76790aab052415f\n413288e74d47a5abff1b1260905d99813c982694 fab64974f1a0cc3132c9f80efd516176100e5f6a\n6023ff6d662fc34474c08cfbb03f2952aeb5fe2a 722b0f9127746623dd16f3c4a5edc03c7f6db000\n8336ff99c7cdde21dd4cc2a4ee00a6b22c4dd5bd c224d2465c4ab063bba81e2738321cda66b3a970\n729561007c8fc917cbb08ba2c2259c4f4ed150f8 f2bf1f10eb905d50bde0a649f51f2272ea89ea51\na97a194ba030e78b77b5b8e4bcb5751f8ebac58d a141c1b728bc3979c987cc6d315b4c7052b2e63c\ne86394f7f86d74e2092b0bbe1e22ac74c21af975 8ee66b56d6e70e7c3b28d0bfe38ab2392d3099cf\ndf2368f0adff5f45bc1a2896ecacdb49d5a7fa61 bc2a1c8d6cda0372100da1464d4e08fadc679a53\n5c6ae38b24ebab6029ceae33eb317a4a10982964 a6ea9971b80216ce91e8428d01019106aee9d16c\nfafacafc35e33a3d0ee8b0991895fe59ee5f19d1 31885945e63ee10764744e684c0058e0b8fed8a0\ncc76b4b2f009274fd36b10dd373d00f8dc24edcd c06d90415a89b841acc9545272ac02dcb61a2897\n82f77e46ea79ddb890e57dfc0b72447435a0cde4 5498ad31b06c3f396f36edb39a78c2a933858193\nca2563f0948d975f5b1905100b5d853e5d44b2ba 2a48e557d09e7a53d94de374debb6b3051fa3ad5\n7a352042fc1a10a097cb7a2406e6337213e2bb1f c396b2de5df070ace422950187f2cc050053d85d\nacf00df9da1b699463721e95a6ce449c9420d266 fa535ad6efc8d3557fbf05beef1667073ee9df11\nab60b663d4b838a17d73b46a2d8f3f58aedbec17 6300f9cd14043864b698d4d245d51f2048755050\n3e1b7d99750c6732f3b0b3349487679e206b6a12 dc5db6082f14f158ffc7f694ed7d91c5e40da4c4\n1cdb0db6dfffc8de2f08858615a8c9db84c429f5 1fdbd19e40b69520752de639542d22c28175843f\n114ed0496822d6713844990c1fa0030b4ceaa734 9143c0566286aaded35640acf15cf6a1cfab9f1f\n4785346ee07bf0cf0a28cec54ca6d56b069b8e1b 2962d9a6ff9958d8f6a7b20f1af3d3993485f4ac\n3fb9fd9dfacaa96e611471d0465180e86c93d587 55e4038690b93304784d6c92f565d4979c36833f\n8911de20cb36135b8173f194342629b0e20fc99a a2a481380be9dfc72c0799db3581269fdfb87507\n3e9c30effffd030454888dbeb37ffed18fa410e2 279817b2c6492bf2d84c770c08169b795331a84c\nb7874d767b599c0998642505d54d718f8e629529 4f021836800b1be289dcefddc80fd085ea1d652c\n24ac76d6c09dace1cf845140fba7d58edf6686e4 b1eba50fba2e8fac1604304d3933e2b225dac9f0\nee89fb0b5f8ad57a3dab42278fdc2d83ace655f9 62a142addc65579246c26747b19f1281da1fc078\nae624085a28f171e3e754ff87d0f8b7ccc83fd57 212733bd2ff0a2af697c0f6b436011e5ce79c42b\n2b9ab5130c20b62a94ee458fb63ea230574c715b 37403b4821c912aae058b854e89a6b0041fac74a\nf22cfee3a4d1d75b19a5f6318c6130d066283ead 11189c4968c48322f27fdf9e8d5070e8e7229f74\nae974afccc9f8dcc4fb586c2376a07e56b9f36ac f986484299a983cf31fcab7810c64d2988fdd147\n8fdf2bee5c8583cdcd0a80decfe64c4d5c25d16f aacea5bcca521f9d891c1a9403026e38e78599ec\n0c8f9283908435833e277e881df01dcbe89ed153 34b1c193643fe5bcbac598d5b482e9c717d2d9e7\n8fc69beb0beb4678d88184bb91d786778b1edd3c e04fbb21706d38b6fe71d797bfc2eabe4d326ff1\nbfcc012f7b3ba78947614ec4a61263e9926ef589 354c2a7fe9c2b0b0e9fb3bc6bc47399dc0248746\n4246997f8d29863a5de82fef30c99988f4f05147 100f88f3166e86e4041fe5db404a1145d8288b6e\n3c6bc7bc590367f1a19f165305e07c6581a8d0ca 1e17b025085ec4b7175c1a7c4b3aa3a54bb6a983\naad388c0323f5640a62807d600e3a3ade90b6583 833e114f92364eec2064d3e6084fe2d19afdfc27\n2c0fb47e7fef6c0edf901b1ae63d728fbe334c25 df480ecffe52a225b31b43eafe1ba35201d978b7\n1dbc641cfccfc16ebbfca87b0d65f6509a054106 2be86d9937f86139dc2f5807196695948b5f83fb\ndc95fc618f30e91543d39b2c3670bc1219b4b9d3 3e09eeda9925524e97c4c7df4a43d8542d9e5315\ne68b5072160683006031a36342bb6a85f290752b 932f31d98503c92894a21c496d777f69215c3d88\nd3157c4e1b0134335edde0f240b096c458029c5d a0bff4b458aebe478b04c6fa63832e6cbbb3be93\n61b64d2b09213def87ddcf679804345284a5090a 0702f195b0788084a3b55815024d22ccfc901717\n144c8aabc7bc079225f6668ee3c2898d962c21bc 2ba53eaf4dc496c75d5aca8264a1b6b3beb0c4ea\nd3e0de1af8aecc354eb4b25190fafd63082fe3ae 23439c8b8c2d05bc7bc523eb8bc26dfba7462811\n2a86280cbabfdd241b3136c1fd8cf3e8d53bd329 6b783afef8dadc072cbfd386c54f36d93775d2b9\n0793c6c8ba31198e0e8838fc376e43c8b6dd2a51 bfc9919d30d3a178725422e302fe8230c53b4f39\n4c3c5df432e90998453d6ce7aac239d866ced765 a1ed7ffb7a2851311ecf2428a53600116c75bdbd\n6a7fd0c30ed9a150a388f7a4c8737bc3145eac0b 282adc570c3e26e7329144c4c9b702474199c564\nc734f7c92ff583e53385182aeb1ce5b8fecb0b7a e33e440e6b7f8cb4e993b025c9578d9827cb2d0e\n9bf4cf34235a63981bd526954aafc683960c5dce 8de5693c6a53498bf484d4648e2f0582129676eb\n94c320bfaf6b0e1baeb1ec80ad42d7106a399125 aee1c047b4f28bee42c4364270540454dce6a96c\n3507d2fb19a0e8c12f5b2ed25c48a141c9a3cff4 da9767218a690c37158949726e2ab7778e80c18e\n73bfbbb61182bdfdfaea2e971c0429063dd9d53c 457ab4b4ebb9cacbe66442f1c80c34a326a4ac8c\n54f55e497831c504844697e83012fe7dc9166fa9 f6b26bfd9f49695b7abd1d8c9bb37834920de1d9\n735b075c48bc383a0dedad13c316e74e179c69bc 4969c476b2933d4182b96f3325a38207c06e19cf\n3274caed50b905985ba5998975648bcc0b2e8e29 b61551c0d78e021cddd7b2c4d075bfa8470fd25b\n6ad642933202bfda5c16c781c7fcd40d9a7eb6ab eaf6e21e19ba70902ccaf593123d67bf91ad13b0\n62a97969557c9729dbfc093a710f68bbe063b353 07191d6dc9e15ee89d194a184851b69a55f33e79\na0aae1550b64cd17d9e3e383a166e1f84c3b6c8f c6e8fb072da89b33cc97f807c0d3d5fd1ddde20a\n1871ecbbae220e558fc7543ba7b8e2d3753b169c dd118045bd6450d7a7b2086d9051cf7a7068619d\ndf101fb68db27e3919b1f22ef2a5bb24aaf6073d 70e41cab0fad1f284019dbe41e0d2ec96faebf2e\n76409591dc809680fa2f2c774a1ee06490a4325e 4968c592d1deadf41039a3106bcdbab6946a93ec\n1dbce0fdfaec2327650acbf0f8988e526c81d3c6 4a3c474b8dc266050d37ae57d602b557f6cd7fbd\nfacc821d6b94020d3ff60433e1d299169f8bef0a 293be120c39b336d216d248071e5c7da1a3b3efa\n56a6850dd99b3665057719770d9f5df3bcae6c96 e30ebffe5392168806c44dd273a2fcba515c3a82\nbf80662a6bb99130f6f188d64035d1f1993a2f5d 59cb11aa349b3b1be1383e779c57f2a1eba44e4f\nba8bbff50a6bb146a4350efb1a0fa69bb5e28f1a 485c9f7f63d672c911e153fe08d503c4088e5623\nffe38e9387759b9f9a01168d34d551766a29062e d44122f889612e02d6dca7e166d05770f1f835b3\n6d9b064c1ad13a99ce0f306279447171735e6f39 14b0bc929b5a06f0ddb688fa39ab83e1b8a950fb\n9b37f710c5a0d3dcf5240064228439901a74b0b4 7e76e69549ed96df87f78c79ddeb38b93a360bb0\n92dd41c60ac6c69ab5d8476c0c8ac1ad194634a3 9b252e1a1aa26e9ed2ce27166952fd08afe7065a\n6affb0772ae8f43483332f0c69dc8a8dd270ac81 4741fc117a77d8744769799a049f6c8e077cc81b\n3dfafd2ad9fb0136d1bd027edd08ffccb9633685 0b317be33e602dbbbd8d0f584858a111ef2629d4\n77fde429659965247140311c484bec3b0593be36 0d9f3b1f092557bef97d501e29c6fb8b7f4b8faa\n205dfcd415f14721fab7fb4785483f0bca686c6e f51ac851f3baf77a8e612f64aefa4302e175e92c\n1124f1617f3014db980ef26237eff10369de3b3a a32ed22259191f4ec9b6bbc1524ba0b4ba5ff910\nec9f19e2471be906be7ab593b0d03498f9afd10f 6776ec45280fbff3bcda13439ce75ad719644681\n3db686694019620af84739a4c5fc5e110252a307 551787225b9e4bafe65678e721e39deccc2ceff0\n039103520804b7fdd652cd6ba73566bd8dd079ea 5caf4e828f8c6b03c1992bbc3ef7207d5abaa496\n783c965b506aba09de1fd5a1cc55d6cc448524b6 268cd034e6e3a06762fbded280c719dda909b79f\n82c64d5ae490b0cbd524ecb084cc72e37c2fa1da cc0bb87d188553c9997c792bbdae8f2ddcf05274\nf5ad946f9dba4022d46b8aea2ab3b0f49876d76f 194e0e203ea518aa27301606f181b315c284884f\n3d8774e0466bb4905b0e6027e4ede14a95b80f8a d2f409e03e381e5544cc1b68622f092c3a07d7b4\n2c67c24090321742d50b902cb0ccce9564c57e60 078f68c69c45cb616310d7e72a3759ee432048c7\n69f93acda55eb7178d7bd4947893524cb146b345 c302260ef05ff5316c5b195012d36d3764394a2c\n6bc95028035262315330c97b58f37ab113afb61e e75bbd4facfa40e7cca0de6fc0ed1075d22db04d\n8f0f6dc261b1bd0a166916668dc0d62969a032d6 5dbcb7fa807fc0d91f4e2c294cad067d0cf5474b\ndd9cb3869a0488e296c054eca2d782cdd8779d31 6c1cf6df68c0d0afcf4697e81a04bccba3ac8606\n52e8ca0e6bbe733536f7af2442838ff0327f70e4 a302bdd215acf3187d2af2752cbeed9620282835\n8e553c16215863497c133869a7beb6ad7b550c5d 8abec2a5a291d9bed464755ec73bac4b8d8980ba\n8abc25bb64debfb1bffa0c87778bc1391bbf12f3 e7ad4b19e3301cef099dbc947930d0dc5ab8ac87\n8848be896409ea1043b0c9d061440992ca70147b 9f663dd479ac78e49af395e204ad96498be53a04\n777944e4324f0ec4638ae8c3ea760d7751e7ca8b b0d5e5f0d7138987e3b42cc3f57466b159b7c644\nc02d47dc3fc89eceee4494d26698f2a7cffb4a84 be26c60ce89ab7520d58214cdef37cd8e01f4b94\n2292ae6f3ae8df91128c63f8c0cb2585b9655c80 05e8c6d816b3eedbb25bd9631ff1d1b3f1c4323e\n9a5caef7c806e3bacc0615686646d0ddb3722bab 2333e067847048452d78125741ee5a9df8c88b5a\n1290681a25b147226d70aacaaebec1a2b57aba66 16a9e5f765b6217411fb57423c76f6d015f3f1f0\na4c05ab556fd9f986987d6e5ecffe51d9696d89e a4aafb92303529da2d9db9097a0e3c1f8c83a42a\n24b220f2eaaaf1caf20aa53cd6eca42070149551 3139b1b99cfe58fb469ff38d923668323ee5b74e\n2f09bd4ab02eeed0769336a478948b7502ecc60c 881e9ab973df1db7e305aa5a6224ff614921d531\n33548c7d70dc811e4e87409bc1a8c7654621805f 5ccdb9a3ee52159cfd4a8eb6183a062856bffd4b\n7ebf23860ad3d5eceae4424c8898ddd975502bdf 87bca5f4b65b8f02c2b4fe65c1eba1142b0aa6b3\n35eca1d107861af9444a14a6d7c61b66b3045e24 edb5fe969bc25418f7bf99d4d0205c02c58fdb93\n61eef2c625395d2627d7478993ea871e52508355 3b9d1b0c8f44292c9a74a68ae36173259e4c6079\n8dce12e3def50ccc60d6a45d6d6fd6288389e79d c0ea064d48302d769700467b34fb55dd193d0690\n8d3ff718975e89fad8b3691af267d47eb53bbf22 95e09972d46772def6fb68ae10523410bbff057a\n46845a73cb68de9e1d67ef8d4ec5c91a83508335 33c4bc9296098e0de3cebcb6cd28a0b1398c127f\nb9b71af4b05b27bf8cbe48c1de7099cf91284557 65f8c954e0fe891990b0f3c26e5136f50e3c79fb\n6600a0b443b61cd01981767ae663050df57de2b7 01ca72a49cf21926b55305be70f40eb699c6a5e7\nd6866ad984f0cb8db296ce4e84bb5b469923e50f b02c3e0a0266f652bab0ee12ba563fb4fbbabc87\n4c1e67f77690abae2f549749385acfee179b54d1 9e33af57024e242bc0b6191f6482335fe9d93a0d\n21ee11fd993258dc8a56517d90b434f4b30a7158 fb8e6e0ed3aad18b57b4f5a1d3222a64c98ce352\n9950b9ba65b6296f1b7dfb01386edee75959ef2e ab8d5fba611904bc863b4e3c6a45bdc8b6b674ef\n4ab83917f06f9b68f8c9492b8949a4e3e4afe3dd df287015a0d3cfac796b7a553abfbae34aca77e5\n2f03b2b77ab76b2823acfdec92b5333fbb9f36b2 330cdca80f622ecbeedb988bf246b7f59d3fae96\n3bd99623745d6ff3cfa6ddaa441a36eab087cfe7 9bfd68ae3a4f34360a58c05796b525e88bf56d88\n4dc7218a9629a5fa83950cef288b29e67bba7350 193bfb657459d66d96ac2b285da0988277f359cb\n1394cd52e02c151efcae7b4766ec7cd4a89933cc cc8f102a3668f7d96213b29f38bc883e58413713\n916c768ee31d2fe32b74f3a81574c24263573b31 b0aef221cd5f8c9e8e49ad37c5d21ecf893bac76\na5ceb959f3e847fbad913b789917b7b6000fa7f5 bda328fc5d10fa57e2a09e0d08f54638b9193e31\n9a2bf132d6b041a0722a067b61123cc402c65c10 ff3cc225f7eebf67b6691f2d5f3b09b4821f3824\n03d2695df50c0997a098aed8640195e0dcb071df 07e09c468e78e84cb6103a6e1b5c8a19b913fd91\n40c2e57006036fba846a959b954f4a8afbc1c7ac e3b9ba2bddefe7c41e5c69829d9750eabbc543a3\n17502cdd1b9756ecf40365261128725d0e4ef12e d014c28862bd629be485e97c85158b8cfb10fd8e\n57c07c53b979ac1bbd8f7e2796811831b1d80eef 974f2c15118456e2b487715a21cae2e3e874018d\nc79b22b25ac82bc9ed61ee1fca0a148f6b0c04b9 eb681288470e7344ae6123191620fd4cbfc7749b\n02dfa6dd49306e2b73d454460a1339f9315bd685 df8008eb883b548f5ba93f9d7f33b9ebea7b0e9e\n37aaa313e17e52d2b6d9806ab5bef1efea901cad 72bb1afe1a13d6c2ee941c09b95291958217a832\ncbc34ca15b3b4fb4697ec560762071f26a331645 9400a06b93b3cf04b28d7e5dc3500053e26bfcc9\n2f554ee6ae0e290fa5fc3e2ba7603dbfd2075e37 382db8fdf9267962873f7bf751ae13a374aec1f8\na3495b3783f132e2048ca9947fc1f577b1ca5790 a3e78538db3451cee8cee08d9239e54a4c2acd27\n0c61204b28e1e6836eddbd6849fcfa8a0fed06c1 1acb2d469bb7250ffd952946cb6e5310b673271a\n9e3961dea7f50a4bbd1884c735f4fb02f14b7fae cacc2c31c543218d6eddb9141dfeebaf6dd99500\n1453b54880f92147628fad494fe33feac8a3c68f 6ab4ddf4bcb2436676b299299a67255035b475c8\n54c5b94ffe6a9ab55bbdad646be3938efdf1be2d 24b9d6d80b7c0aa1a82ba1f49095050f3b5c7e86\n8b842c32e42c82e217e10ad40686c7164c2a1012 b102dc53c2a6f45b2dd8a2197a26cd77df942e0d\n5d967e01298d006d88b67b251f2ff7d74a6f287a aa277cab965cdb1fed5ded378782c2f9cc36d18c\nb3dae1a722625726386a1572102743052997e98c b91d145db1c1bac18bcc582e9a054f4db6f87734\n9096c77e13fe87d7366a75114e1d282294aaf19f 7d6bb41e579651f8ea6d79228689d421dd747269\n8cebe1498ef52866c109469cb6b8ad6a737f33cc ccb2bd935731a324f97442ad1fcf22ff6ecd7cce\n8d126dd081d198e4ce8adbd37b15ced8d886024c f6ba7852b796743cbbc039887b84603d5caeaf42\n6df88bb0e07a81d99a6804d61deec5a4cdef9883 118a5fe7b097f10b1db56cf74b02f7d9f7da84c6\n462a81bdcbfda3884e1d4c777a1e081fe4d38205 610071efbea32a5307d5f9183b76bb3dce40c8e7\nae980242c44a1bec0cb1aa5d7cc9587c22ad4c5a 391db7c027000b725fc4255b3bdc94c07fd64be8\n83beb85b801eb9cbbf215c4464c0d82dda688da6 d67247ff073a1e8cba67815b02b2f370982eda9c\nb84dc022bb4ea1f1ddaf7cec69eaed4f8e60c86d b9eebf249b78739e32a9c7093462d2df6a984de4\n5ce74d7a494f4a689b24b17cec8eecb823989331 4878c069f0671999e3ebb20c1b0568377ce2c85b\naba6dabaeb5047e47329a236373d5e32abcf8648 d6ee53f24e106b0838a5efc5aed91ec4a58740b4\n77280efff82f64baa42f295905b7a8ec04cb8c27 00ceaca047f5bbfdb91874805a32695cba373765\nce5a40aae9be11c2c98ad6c8670ce42b701e3dc7 0a7bcb6229a3eb071e394d4a7529619fcdcbaf8f\nd1483b5bec517d011afb7297772ec77cdc7c4292 8930711612f6a0d154d8e11f67705855147ced94\ncdfe4487f4af5e7891d9e595fef0e12570db64cd cdb317b81b13c1522a8e464beea4a56d599376cb\n477cd2c4ccdcdd301d472483c93deb97b7395a7e 35c6bf6dabc7811d021c45468752fdbd4fb75ff0\n7e9912da4d76eee7839765f2ad2442ab24cf77a1 798f9c158946762a461497391d33493def21ddf4\n3fb37cd13a810403aed6eacf3326d67d1d1a0b22 7eabe325ec6c39c361aee566a62e794f038dcee6\n6f125da5a97492419cdc7fe17eb364667fd580b1 4d9b787dff2d6df2c042f416bca6365b7569f183\nd1bb11f095bca369882150474db05f6557e32e0a f643f3cd8f1bcff014ac7c6e500dad5b22e60bd1\nf823a75f7e0bb6390f8fbe6f3626dbcf94555ca2 0497cf68b49db44b1a6ceccffc32bd2d1b8ab3e5\ndaa97ee466fe45b0d73ba8fe505b833cb3ea39dc 96ee4a6ab9dcc3eb1d4786dbf610acd7550b3048\n27e9db0b857b49ef9a456459954a9269dba1dbff 7d09277c43abd0e27471d605babe51b9bc632bc2\n774031172c9f1b4d7fa07262fa5973a5d763b0c5 68c5314270734c94fcd63b42cf2dbc8dfa821ecb\nf9238493dad09e18afca2e16f2a00c676277e518 74985dc2142bd6e6c04e35be270cea45ac48107c\n920c9ca32806690ef2750be17d3cc9c2cc1a6866 dc87301eeab57b6020d752ec3376521b75d50079\nf59bb000f4eaab65379ce15c5bba8b750bfe2a84 da44565a6df78d57b9cbcc1a25b44c4627a5ff69\n9b09f58f61eda0d76d3f99b7fbef91179acf953b a755432e0b9a382dd745f8294dbd730e561289d8\ne1522f3884500333152c61f90d400da729581e3f 7cbcf24caf01a1302654c7d3b5b7676563316fb5\n1ee2af26fa1f9d4f48e2a2947fc80cb1c6b54069 d3f7343a9058b20a6cac7a5f905603b75cffc0e4\n90755707c98665cd65e75618f8a37df079d5bd30 c4fa4290f201c300d648fdefa9775db53198c921\nc176da0a647c819a5409bed6911a5cf858039152 1fce7b55d19b4e02fbda27b302ff76fee726e683\nfe8cca2496230c8b04079fb64aa5f469d192c5f6 5e964b40c86c01f9b93bb31175ad83e902057088\nce5f1733cf3da50fffea24522be6b044108391af 6e47cfe64d9bba94d05285f362fdfef2d597b5f5\n9e98bdc5a4c1a36683813abec67864be5fd0c3d5 12d5ba7c92a0bbca8c7e1e6168ba7470851c68ee\n2404d4e8e50b9ed5828b1a9c7c2d6489f7248770 1941364ea8c7ab3d566a04c53d59a1cd1551993f\nf0303c98ae4794714e44718b98f1f01311f0cbdc 281acb26035bf9292d1ecf3a467cc2ca731bebe7\n6cb043874a364ecc9cdb4010edc5ffdf0e487131 f23a50305cbde2491689af0c5effb919a0d41591\n06ce3d635fe8e5e294e550ab12baa2ae863e3952 c923795d4defd6970e85b4c99676322691b6a107\n773e27ec924de86d56829c0128a6db201dd7a462 4c95764ff5ad0ead07dd027e4b2c0d41d4776a00\nfef462d5c4b3de53fa9854b23735a34f5df6b546 409141fae8f2166c96ba8148261d44045d55af4b\n25c8fac6804c62f8fea65fe6f36749f3fe145b4e cf165ab87ddee1ed88883f0da66183e80f12bffd\n28fd8ee2e8f67938e5adbc674bebcff75d38fa64 eeb39cf365628c321325ed461ffc770a88991e4f\nef00bdf846d9dbe49a2349460aa26bc2f48395d6 20db457c826de8ea914c44f3e9c4e6ce006222b8\nb84d9c53f2100402c1f4fea4cbb95bb096db2858 4076226e2f0b486bc000bd46ec8ecb74eb64c337\n686ed71a5de52e69025d748eb57ae384a1e97a4a ccc8ac687e910401a48218cd007ecaf4a6a1d30d\nc4c739cd641f51f18a170f25a1c824b2cf1d68b1 841fcb380aa703a2d89f328deab8f999fab5472e\nb0f62e852e5f1e4f0b7394e73078408f63503cb2 b6dff3eec99be49058e2a18c64788b750dcb0496\n4280a4fda8391e55bfc4b0679909c3522c6a82f0 8ff8e64084a246903f4759e40b1091618e69618e\n7cccd418b10d43694972fcfaf44ff4ebb664de45 38b85b0d7d977fd549ebd8396f60280dab9610eb\n431d45675d9e87989bb82ff230b6a3ce375779a9 7ee9db2d6c3863d028bb04596dbd5c5360abb559\n07219f0a740c755f531771b03c2cc68f39f28e29 391bf0d4310a90a1b058e35abd0609e010be741b\n3b5c29c52f0d8ee48b2fe0b447380edd16bf970c b8994a667cf1f6329127be5568e36ccc8d9abdbe\n023ede42e8d78167a81727fdb9b548f2dbc613a2 df6b8e9b710205048ff5598f16ac83755cb051ec\nb53b687e8d1b5ba65873f6b40ec9b94532096669 f322a5a3d51c6194074067fea71364c350f700a0\n5da11181a3bd5b2377a28ba1ed980397dc6f7610 6f135fd62e1becc1e39d6d4b6710ca8722f6d3f3\nf48797cf46e1dda92093e47b23ea673770ea3394 c6698a1dd49f445327ca8accd105721cba62b333\na83d67886261b80390835b5d07e91f55a0a3aa93 6cb5fa8cddb36b3c84fe143de4779f71f81462d1\n81f1d19141de33d38972338c419812e02310a68f 00ceb86b0988beb1911e2781abf662570180a5cc\nbd0acabdce740446922d9f329eed60747d537ce3 32adaa7b795e3a6a6118465b845b7605b3ba5f3a\n5fed1e7092111d01794fbb118b86c601da808a28 5010305a6eff5bb319b262f0f335ae8d848cbeef\n07885f7be63d756d9f7dc10c3e78d7b7343d3945 969c5cd12006ddc406ae8c9ec317fb62817eb082\n08d4828420ed94b8d271233f395f175022efd4ed 218d8aa8c8dc166eddf5b5c9f216aec822da78c6\n5faf3e7c85a80c7be744c419dad56e8abe23fadd 1cf2328f818e40878d509442d4813a040563adbb\ne8a5384c5fbd8ed19c8a51336bde6e62f338b209 ec8702d200f4844b2e69d0912f9c01807817b5b1\n98fffbdf4d1c0b0eb595c34dd258e36dc386982c 34ac6cdc068019a3e68e2e210cdd9c6d41f41488\nc748a9aa89dca2c55fa71b16e251d9fad5cdb623 4bf0085736c1ce17652bdba7d567e06ca1bb57ce\n4474b3dcd7228803e2464c366fdbccf5897d2778 62b999a2f0eccec0825e7d341ece1853082ea312\n624ea19dc91c77e5b39508c214dd5a323801cb4f 28d03e9cd6b348188e5e995a2cb41556ae428d9f\n8097f8289e5d84f362baf09b276a9f55cd92adee 049b20f104bdf764487f90555d30ce4114953e87\n5aec96aa9f03a10856556b13483052d4869bec80 fa795f17c1d81e51bce552ade2575195f547232b\nc96d6f89750df53a406a4954ad812d98bf8abf99 cecf83e4b4fef33b7d4603fa252588a681271745\nb94df6c91634dc2f93badf01b01c302bc8f9af2d 4ddf6f91d57272d42451027e354c03202c679d71\n092fd45e46bfb59f5ab0e36b5655559c3b91e9ca 1de618bbd9adb1246a638e82d6732889101df2fc\neccd3b05a196df3501d2801a80ddbe18c3e18984 a555dcd73ced2554539b9bf108cb779e57173213\n9aec913700b433f10a3f1661ce7aca359e4d3f1f b036422424a878f5c9ba6f31bb1e4351d631ae6e\n075baae3673392ffb99b85b19d5c6946ef91dd43 5b6addffca78d47a5b5c9f3ac9d8488ddf891ecb\nb29e3dac4e4166ec9496caa8f34762e213688df2 badfd0b975f0d32c7b046625e683d6470db05b54\n6cf112b485a5e84bef8f7d2aedf6750ca64a0ae5 14c318ba8e81b29372e9daef85a1f2d948490e6e\na25fb16b1111e62cec7787bc219097629ac849f4 441a70fa6b7feb0735a329039c8f5b3ae99ffbf1\n74e51069af5635fc1745c8472502752eb151dbce 92608d68bf17a60730d69647b7fa75f3201d43ad\n583f5e9b4b1e57d742d94bd139bd66753b24621f c184f2ae204a95c548a1b1f301ac8a9081ec6aa1\na0f069d5d8d3f0779d4b8e078f385f759a5ea9e4 f6480e0eb525a0953ebe28d199b497ed1de21720\nc1fff44541f09581a9b57e061e038d39df223ed9 d63e90f15a2cdba051b55649b3880894b7631db8\n02012362af28185211b8d63fe2848a3d1f7d00c4 e8282dcd88dd34c51a2b3c09a79f6fb3980d6503\n0482739acc9c9f4b7789effcaf944b8014f52afb 738223170bd9b2ae09c443cc9507a49ca0d101cd\n8bf990f0512de5805cf8a298a022d0d04776c5ea e7e0b4848dce717731d346b601d6fe0ae922f7cb\naa8d4a58de83a3117481a9e6b2aa77bb907ce2ec c816b45784adf5863e69066d2c791be6a0b44302\nd0085f6d66a91bf4a2ab07fc5be98155201e787d 831c758d0e4b2d24a4871b1326d0b96ef9d7cbdd\n8bbf152750333eb20bffe777b0742ee431b1d5aa 108f888c198732dad4f1a07718fc6569a2226806\nbba0ffc44f28ed0fe53bcaf8b9627bdbd8579604 ecfa18563b55d75003ef11f1c600a1db93355692\n591dc56227958031b9dc5cd2ca3aacce450afeb6 0dfacfef06a8a49faa0cd8a131470b202dba0fab\n5cc2fc2ea440bbc0bd53b05d66a17ec58223350c 347f9a6684436f1a4ea7b0eb6db3eb75a259d860\nd1d845a53d014d05ca26ca18a380852c1202628f da0eea5368a550cd94fda1ce3c9f65c762031eb3\nad17794216d236891845a67289d24359af81e2e4 8f0ff8472433028bd16b1b5470ea737fc51f5481\nb1d3794d8f00a583dd4a6f399b6a3beac465d7ae b6624584728ede55042d952f4f372caf861c6061\nef00a1def8312986645a1dfd94bf865fe9210cf9 c5a8690aed5ba4fc174993693ad896ae6fb6e7c6\n1126d71c5b93ca0ce2bb7159eb2958e51b133d02 a76ddbd07992260c22ff1cbec0fcd4cdd1a5cde9\n5319a4bd69c72d6fc6855aa4e3a12938499edf1e bda2645505af12b4060ed7cf11f4b1d00d6f8e09\nc7bf1d043dc12c9c73e46c5c548c98382e370a8a 25b6de00c7770fb90b56e52fc9ca3e9115e90a44\n62972d9b326d129aa956d6f228572586063bc6be 40273f0527a3c27c2a3f53e549a278ae3ada5e01\n3cbbf611288a56f10ac3eb7621f865c8d1eb3aec 662b55d19de791f43d5184191285c4b0be314248\n45f024aa3dfcabe53af566a33beffa30767c5747 5af1ddaf6d6d056d129d1a2c8d862a341134fa61\n30f1bcddafbd0fe2eb44838340edad008abeeed3 b3ccda2d7feff78a4b13ab8ef343e9885c2cd869\nc7b11efe31647d566ab5d88afc39a271b9d89d25 21f60bbb5f4a3e4fc38dcebee98133f9da2389b5\nae4ec2bdca6fdfa79ddabaed0a5f64220c9982ce 5091b606bc7ab1dcbbd659cd2fb394666f81240b\n1d284377d0493a6f7d243c0aa6e4b1af0b5aa22a 9ae7c993cd8f1be92ca4a091f79393b92de216ae\nc7218fcd25035f028a4e29d51afb6918c8be8a9a b58453f87d8c668ca844b8f45702eec7e5f0dfe0\na47908792a50d390ad30a9bffa8444f18bd88679 9a7a66d31d4433d3dd6899c5477863d48a145bfc\ne0d8233422d098418272eb2af776c801befc6722 49e50cf305d48239e42696d676700f4d74594753\n89aee415294193e688430a51e76bbd249707ce45 377f8bdfbd9a1a9e8770b6584a5dbe322f344375\n5ceaf3e5105965b52261d5b0e0e77621cb998e59 3ebfe2d39b74c92356feb6d7f3427deb4f58b06f\n40bc6fcf59e6f34de9b7d2395880817064126676 b33b9c758704af26fdf5fe254218d7eb65fdfa61\n9b01e5c3d1f441bf2927c76e19da883e04308e1e 36ccff18574709a908a45f4542a19bfff1f20e09\n67f074beae556b0fc42531e27333c8c38e8d8ae1 954242730cfdb2478f41a0e6700e296815e7590b\n6d9ef0dca81dce02ad781d7b34b522ead407a883 12418e9fcb24a3a632f1fe73dcef4f83a2d15f75\nbef93b57ee19e91a0a5782fdf8f089e3b8be0ae8 64b1108fb11949f6482cb18eca477110dd3c5028\nc62ce45151bfb9d9f92eb6e803b2ec53a63ea7a4 08c76dfe0993a779dc21e4e4105d761a7f96c7ae\n51f403e8508ea24554bc5c3f6743cc26731506c0 1d0d1570de6bd6b2b3aca174463d8b216210f117\ndb6f845d0be5d8f0dd57b77708a4e3724fff32f5 28e92e3596e9e8c3e973179c89fb94091b2c8c0c\n32e07382249da67923aa71eae6f8b3d80130f74f b834ab4aa8ff2098efd6149483d18fa2a0352c96\n8302a1267d46b4c209d5c1b8dd70a744421210d5 5b752294f790c884a58889a6c334115870b7f97c\n03e4903f1685410c9948fc18ee6ae2b7e5151eb1 79cf567892242ec24d96c98bfd79670041b0b92e\ndefa6b499436821277a9ed7725be7f2cb4720d1f 01fbcf967206d3dc86f90b6c7c3ce6802285039c\n6c41b3055b243e797ec437471f9279d8f59978d4 fab314b2fae51285663e476ff779b49285b628fd\nf2865c102c74d95df01daeb70f1894e144f94211 6d3510492c13d3fd2236fcd031e83146081c1f69\n760131f65bd0220a5003a2ac55bd5859c69b503b 6039cde15cffe6c264794bca05cfaea5c069e2bc\n1a43efc0cb52ea1352288ba6117cb9e10b2b4d2d 6dcc631c22b1ce4fcd88ac3acc59256aa4d28037\n0d48887772594609d1274a3aa828e576bc454ab7 8e73a7bacbfb55d90c0e983d4af38d36ca81b954\n84afabb7142c6a452de4688aa19949de6881a6a9 e81da7e907c31985760448a6564abe5c92e7d3aa\nec5516d81c21c459b767964816c65a05e4ea5d60 ae784e0b0d2efb6a84026b3b3d3290fcbd635dcd\na6ef46d337f6d7ce11e5acfa3aa7e1a6a56be9c5 cda83bb448c6ed1945941351bbeef3b91b68eac8\nc381a0a44495d5966692366be8f23fe715d74972 ee09e4362a54f359787be2a195d3e8c6da29c6c0\nfb620497fc84a03440558427b5451acc1f1676f7 b85f3a89a4a8d528b7cc7f952bcf1067ee01964b\n0c4fbade1c51e1c5100d3da1c22df02444875774 d7e14877386ddcd9ee6182158ad86cf11cbc1ba7\nc3014403a3f6e1b4bc29ab364446fa0f672af504 f4de490faa9ffbd9c0dd1f0bac2bb34c5580167a\n9d62de3c301f9a0b6c4e84d7567322db11ebecfa 4c69e209101b0606e4aafae5ad01ee38cb400e14\n27f39a35661bbfbded561bf578894b2599f350e9 411c0ab28036be0951f3aba79d72fa126eafaf2c\n8a2b5a97aeab423c57055478d14cf0e5c471e6e5 c9748c6bbe62564bc7819209cedc426443e5880d\n0b6b25d634cc3d2089eaf0261755479ac27f94ff 3939ecc2b951a8e7a17d1fa9b0345ffe35c4d802\n95eafc6c68ae2ee36d608c78258e58bdd2881a82 e007ba1a4068cf5c067eecd21c8272cfd0bef88c\n73269e2e0551500b31ac55c01b05e5de2d7be029 0c8d3319c5c10f144fa492a5adc1dbe3f468e0ad\n9663e58acbe57c4679615e3d3ee9ea608fee0ba3 56f194213b83128710cdaf5130bb0cc21ba347e6\n1ad77d43a2a93af74878ee1cd8de7f3d850555b5 595d325b26b20f691e76af8d52845920dd94ec46\n78379190a5930b3f3a57221f18337f9065009ed5 584d9e91d7bd9b2f9f2235682e7740f04ccbc1e4\ncbfab1f20782d311b5aa129c31786f9176329e18 91d14cdd9d0b228ac70ac15d591b920d56328b7f\n44a1b60f2a3aa8a0b60c15b71a46cb1a5baeaf84 7d818a82f6835a2e70f351222eb532b6670640ef\nb5c3fc483b7cca3ff3752263d7e74513bfdc8e3f 7896965d5f89973dee2d5271650b2a3fe42cc8a9\n3334596bff5a2dd3a246201af86e7f751362fd7f ecfd42ef503452f32502e72e5f1940d9e02a20a4\naf1d47ebd211773ca9b2c9abde7986e11170f592 27ee81fc80e51e8989bdc84e85711501ce907e23\nc3e47bdac3e2484f4f5d436413559b5a8f8d0329 762f14179a33bf06bf1938f143597d0c61045801\n68e098f97d7d14fbda97dbb4fb7b98f0618ff3f2 046374076954b94a1d6df2ab109f0dc0d14b6e36\nee07ca27339bcf81c239d67eab16a410ff3e011b 2412e5c595a9a9f2c818b39349a2f4546e023430\nab0aa6076213c9aedf05dfba099b4ec670d9c3bc d90f33c203b4832c97b6229b638592ead8d184bb\nc5a190e85a567251b3e8915b517213de5990cb2e c1a5ab6e226b84b8a573c35a655db858631ca19e\nc96d4dc2b2e65047a1323fe5c64c435325fd3d19 08ecc23f3d9c262cc94527a65603bf39f8a5a432\nfe1db038070dc6bd357e8967fe41b74fed211c5b 3e458aea31ce028c8c2692f6d4874598061d87cb\n0b413ee408c1ef7cb8810916ee351ac735d72b38 66493208b14682bc37767f38d03c799c48a07d9b\n1a16ffbecd4849e24daefc98866370bf0a8c368e 527f0ef8fa8bbe334b528529470156ab88405579\n31f777b459faaa80bd6d9c3c09728752c3b27f1a 1df5cbd69f19291e13cce33a40fb480af7a63752\n8e65c212e583e4a3b4f1338234563113fcf8112c c95a57ac18949a4b3db1e0043622b18139fdf9fb\n36d3b1858641fe980ae04ce0e0b732552ac9c6ce d6ca6ab5791db572e78b1e6b24b8b5343d7c352e\n4f433d6fa3c6500e60381137603543c5f4f9979f c3e5b185fb1b784ada83e25a2dcb7ebd269ddd73\n4d04e716152fc872d49093ff6e5530a81c81cb8a 2d99995d3841a8f53ca64ced14994f4e30e481be\nb833cd5209372ce1ef620c9e8bc5739b09a7d5d6 02dba48921c84100d9ac75a66c4831cc29a05647\nd11cf9011f92c6598fa2190c3f066e17c3a8e58e 744213bb43a4f46077e08370a5435ef67874b280\na7d366e0af5d5eb27cf0854f6378b44d28c59efd 6f958e61586bea6d9c76b491dbce5852a6332ee7\nd869fddef605999f1cad2e9988713ee18e0e5dc3 4cce6fde5897bd11b8d91560ed95474431a65712\n5b00d62636683b2802bd1e27d823311ee1af7877 00864bdb8ee168498e84c598ee29df2ac91a725e\n8219ba435c4622c8c6cdfe402b32f999bad2d53a 91d8cb326d26b8f784405767ad116ad7bd6ad449\nd38c5ce0c5acd7ab009e8ac1ea573cc19fdb081c b787cc6e5b41a094e07d256b8ce8caca67f18bf8\n704ce717b737b11f3fb8cd622375b84fc48f4dc0 12f4856bbbc46ef9fcac97ece4787b1779202b12\n6bc2ec7b5db94764c292b626195943be95bc7738 0d04243eaee64c7312238da42d0ae8571fdbfcce\n887b1866ac063c9edf0cf4ad88e8111ef8e23cec c74ccb092a224e0c8e176555f330ac409d0b2c20\n35a958fe60fb582332526f465f545eae27a49047 229301e9afce9f1ffd2af96a9a6a2c476d7ac8c0\n32cbf9300002ada94e9e910a0c098789d924986d b7cc7f07094a9b5cda3cd2a464339cca465cd814\n2006eef726e67fc0542de1f800d83c89c56329f7 18765740475e2e20e93cd4715f29f34233ed2c26\na8dcd4570aded55c7f68f0577e5f56359b227bd3 5f50ecf641e04468b043d63c769d036efb3c3647\ndd61c4acec224c28e7a4d257b90ebfafd74f4bdd e08db334437dcc4b9779719daff19288aac0e099\n8b2c53be58f05b14cfff992575db36c1d2c834d0 e7b7c17a2d5b9a48b73a4a2ee4e96c2dfc25dc5f\n8ae524e988c2b48a0efa6af3c9a6e54d06891f98 0fd9d9d3225386811c89e3f1249c0ac6f738dca9\nf8d4694a511fea53362b2383c10f833813eec03c d31ece64f2418dd0d216a4a5f31bc61e46f2da4c\n7f5dc6341a09fcc85a32e18cdd5a028e81e2f4bb 59b9c2ac4cbb4a7d59f91b250250ce25a63a49dd\n612f2c4b9b68fb4294082b3ca5b199cbf6a4db4a e1436c3e7696067ccef7f3cc219ffe6a31a5834e\na195a7c70f63d5fef5b7d2240599d62c9bf2b56a 7d66890e34207f76ef10a49dd553226b3e2b79e2\n930fdb09bcb8ef68dc0f3c8eabeac5ee371b63df 729cf5c4a17c3c0ac4f7d45272850f35e4dff446\n8a5ffaf999de848472e3cd34f2853c13cb263741 be8dad56229ef055f8984ccdef90cc68cddd5a21\ne1213ceaab48f4988c1449856e711ef048e33760 71aa40612f89ebb2be271c4d46f151e319e9146e\nca7f2a0a827a2c3bad4dced3bd680041e766d4eb 9e2e54d58502180cf06d216727db4b4dd2a15045\n9e4a2a6a7aab1541aa6aa0d2a3979ac9285de3a6 eb1fbf4bac905278f44a960e21a5cb0f4f434fbf\n1899aeddecc3c61d2303cc571b1d0c09d7f84dfd 2f59437a9b51ffeb55e4bec487b477252d7c03ee\n224df41ce165da6c11b1443d367a8a5a7980de3f aef29ea2978918e9adac8bc4b4b58158036c1f57\nce9281d95457999a1ab65f220191be32edecf9c4 acf2645307738d456f50f7f18470229fbdb06c5d\n68d953a3eff9d3aa45ab44a7118fdbf36686cbda 2bf58aad57c7fe32e52fc81e49990307bafc8653\n8d6e93a96368e91ee151b748247edfa01471c6c5 6129612c8f51bfbd3aa27d5a7975580d027971db\na1ac04065f9f541148bff02246dc19f5fe7ea65d 781ef4152a45dba2e1ef49357f893ad47fc0d4e1\n3fd2df08e7301ca8a72f9545dfdf9af4b0e69c33 c294d01bc927b578a37610d7d6091f6952d40ee1\nccc088b525d77286709cf6b249e0b281ee847e5b cd70b1cb0a33b402c006c739c1c5bdcc65fff142\n01ae3f979a3577c2989f560cfa8bf8c9d57bf44f e539281dcedb3796322a3ce18274af9fa2102e35\n2a213cb9cb5101b56f801f58be20ac56902ee058 356eeb44c9b9e0b7cccb22f4ec78408607b81938\nde95180755f9ec6a8f4b6b23cc017bab7cc04cd4 8590b0ed614c31ab6318700b9e1bed6bc808a8b2\n9b9bc655ea36a8f0b8966117cb30391c88ab865f 802b3ee8145ae53826d2b9428dc4c8f384353adf\nbb4d55dee2985684e539de798ae45903010ccd16 f0da9019035f34d0d3e35806094d63232100895a\ne4041c6e05b24a9d269eb14797b8e27a9fed0070 07b060485f1c0b2b79e80b2d55c537d2afa6c1fd\n406ffb75c1938fa6d5bd598017db98632395a5a5 485dab5fcc8fb7d9f47d8bc8fe1eb19dc119f45e\n95ba0da820d290b6e31f7b8b0d1e9570b872ac20 0b87bb0c2309f069e0d0eaa398782dd4b7fdea9e\nbb5a78ee524a2ea0d5d6ae686046ececea783485 aff33da4f2ad85724c218d6f9aa5fca475a9540c\n50dc983d1961d016c46556297cd4d455250a9b2c c5b946f7f3a23956f7569cd635dd8ec5e8350b76\n4e90b8a2debb4e88453a18abf5d5f0adb502b5f4 150f4b3abdf540a6879f2965300b5270638cbe4e\n4e0dec04b8baeb3c22f4149ca3f208d9ca77b8cb 2e1936ce5372bf5c91e9394a2145effaf696ac7e\n2d4d8cf0d39d551630eee980e25c8b1075c08ecf fd1db184ea1a376f4302c9960097a94220df0fe8\n298d3a1ba21993bffcd818039bfbcd9ccd9f01b8 74427fe8b7f467e2b312b6cf1c685da1dbc94f72\nbbff8fee0b4adffcd9039b1ee1acb5a523bce1d8 274acf731624d8bd757dfa02e5449a252463ac69\n047eca9aae879fc7097c955584c55e0b8940f974 a97ca0b98472a4dd1abcf4445ff06f139b281aa3\nc60e120bb3eb883ff144ee76e1516c63ababca00 87e11f0c7488f1b36e6b966a0f850b15c09def8f\n696beff137b721e00093d36040f392e930edc064 41780eeb1c899d511210fa0decd3289b54d29328\n05c4f7486f88e921eb2fa0637068a181b3115703 9cc1d4dff5e11cbe15836a9ba65d16ef1764ad66\ndbbb5b98b9de9dc56affee163c2ae43a4020be61 aa43e4d390fea4bd90dbecd8aef2b21da4d2e286\nfa67975eb5c4a4b9e4501cc0b01d4356e01f794c 919ed395c6d083d41e2f059907bedbca9176729e\n45588fa2d6fefa606b5fb8a0801f8ac9028b8ff3 a5cfc69681cda591fc92f08a9230ae830e47783d\nbb2c33e4a5ffeba99e9975b03c941e88954a5241 c09779381e4b0b17ecb1b6505b93a9c6846fdcea\n08398b347e34194a75bb508a69a1c900e245c14a edddee83a848c32015fafdd870d0f7b6871b02e7\n6b0a5c32ca6b6daaea6df64ad5ced4664e2d9dc9 7f0451c70e834305357d8587834f14632e4032d7\ne8ccc92a1baefe02d3f00ec69f9c735956d0f52f 09f4931cb7951697101eceb8f6f6fc6be6010499\n96f48766f77ad4b6ec18a40bf97ca6eac9dfe898 307942d2d8e978a0738e4b9d5e850df60ba86f7e\n9b1c1f02d17f21ac7a53c1bf7ba841603bde0da8 793e34d98fa028d5f12521b2c27669145a96ad01\n7f680281d01a22eb521f32d15eefa0fcfea3ab94 d4238c69af703eacc93f09cfe746c7cd4566bf3a\na57ff19a72687e3f1d6dd252efe836eade0b3722 93f5bef497fc21703199418abe6b359939b98765\n2e8f31a521241bd17e1094215fa57ee2740716f2 caaf39f56302a86fc1d726311914740fcfaa9009\nf58feadfcc75ade32a161b783cfb2266e0a59135 67fb0f0d5e6db73477858da17e561ca52249ebfc\n6553416e95e22dc13d4968158765420f9b5da93c 16cf083258c1af5927885857b3068def4174897b\n9ab6c07fd70a9ee5be1f9764e6d1ae0cfa84a7b9 6b9679acfe9a96a528d38aa6eda531fdcf4f5c20\ne093e38a7fa3cde293bd2a3ec0fff025bd02db0c 2ce28ada0a77ba3cd0fa2e4df06d3d286bb8ae9e\n3dcd663f18516b634bc145faa1e9941178b2632e c060274eadbcd3ca1e2c75e1d6127a5325f257d7\nfbe4fe82cf4b8a7bae77eb36f96a5bd4695c6784 12fcdf3de11cc4c404799e680eb5fc640f9d65cb\nd9025f90da41e475e323c0bc4fa045e58a20a0e3 be1ab9715fd2f4ba1eeba9bc1561eb7644ee0e70\n65f37c1f0398d556f3635c45ec88a390d70aea18 e40bef195267504f5932304de9eae9abd0ad4abb\n8fc9d02f9a587b40d0b2ddb1d7859cbd0eb31c6f 2e04821b88485dd3ba413faed52c17db1fa96f08\nd9c4bd7c6b746d36079e841d86a04259b377decb 37ea979b353041d1325e2a7eef6b6bb97f64572e\n5b71f366f9f7fb9633efc11dd728f258c9ceb8b2 e82ff2446685436e55fc34359c35782d7cdc97a9\n1ad0548091fa8ed58077514bb6338087c6665e89 4f81367e3d7f9b39b0d0b24aad48b6c0ed16a040\ncebcd6edd53632a54ea74fd881fa463bb9e52bde dcd3863ae7d443e93335ed0f406d5f854544886e\nd87a3ff293b87583f050ce92e90fa6fa47e347c6 c833d62fad7c6e39785ec0177f3e08e4dc4b727d\ne0fa0adbb0cb4429128245fe927b91720775b55c 7054d60c52bb3d9e1cd9d08c991afc204f1ffafb\nfd90fa39d52a2747d4898ffcdc2138492fd8bbfe 19f937be62286e1d2ced3b81c8b58ce3934f8bde\n5022202546b1aa1787d9258abecd2ed3149afd6f 588bbe684e4fb5acabc5783c8a13ec0730de2f7c\n5bc228840ff39a759570f62a0b97938ce3548fb5 e30fef73a7cfe410b9faa871c265f8842e4e5368\n3f39dc17ba681d6bf08b938fc503ee0a52ce926f e0bf3f84cf8f7a56eeb309e3e79096358aa1a0ad\nbd02479da4a0741b0de283300dfc2b12ba2fcfd9 8b6b0ca24621d153323ddab00ae6d3592dd81db5\n748fa679d5b8be9dae41d7bb447cc2d32fbe17e0 3122c87c5fbee00f238d0ffc6585dc08111e44de\n27259c5ce8be158507e8ba011307873825402f0c ebfe439aebfcca17afe49b531c4f0952599115cf\n4bba348854a8cf69a2b12c8868ffb56e9717acb7 4dbe987c6eb7b68943f328602db615b7e6795005\nc337c4734d83008c660c8f2f366f86d364775519 d2eeb6dad17c0945025365376d2d97b69dc0369b\n07d858e233b85061059e1a0bc7ebeb84896df3c9 78cf66fda5379fae404f88d3a87af372f6c6103f\n261756068883c67549e3b81d96da604dd323c67c 91bcb5e2eb140c63855682d2ebd38779d6f9046a\na35f428997a335ce5a615257d6c64c5a620ea279 4f998535cd2c2f19dee125acb5444665780419bb\nd74957bda72f3a728088d96bb9f2bad0b0b47a1b c3de22cdee5c0536c4590ad37aa8ba16a1aa54a1\n65449505565b2c2a0bdd0ff0dad071afa9f465aa 00f21ff43b2431cad666cdc07ae314540abf8eaf\n8b023cc5a2d48af3cf96d75f826d683b442b5456 3bdec10f07274577988d624a88117e4b9572e800\n33d7db6d6ff58f7172600e9f54586f1f9177af1f fc7d1c42aee23b6a6ecd4beae828a4db13dbb7e6\n9493cf79c983a8975a40e57796f6ac4ce9aa5c43 809bde093b9ff8cb7b305d1c3a8c96bfb0308725\nfd3abd056994c8e5aa73f18cef52e89a86b881ac 519e35294212fddd0830b037af239f8133833e16\n1adf7e6b421e9b2a8ed42e65eb9bd54e8d0d142f c80467dcfcc1b10e4224c21f6f5691260dce4ea5\ne9eb446d1f3fd50fbc6f98f14c378f007687c7ef a1618fa15ac47476d0a0ad3c5aa7e2d44e221784\n42ca66eac622f945649dec13b02652775ba3a041 3dfd2f12dd81af6e5090e802ce43bb49bacb6b50\n2055e6e2532428e2872eebecf14d70d580b547ae a1e5cee9f99de09a14e66e65d5461080c65d11a3\n1304b49dba2e0871a1f4742a49b87ac71387ff30 9dfd47742ebb49f8c2115ceb371566536bd120f7\n9c9351f3515b58ea1621e55a0a4804b29c5207fa 740d93fff3ca0f095439055cd8d64a19d20eb727\nd73347a02f12a47dab810bdba98b42605732d30a 873a33e2eb63d96decc2746750b11043573efcc1\n922c3a85b2b463f5e42f91187742851193143689 dd27fd29cb4b8f9cf335e735523b26b71c0a535c\nbbf12dc76e18bd038df3e9d9d8a57463a02307c5 fd4b67ff7c2288cbeb9a630fc41d0bae22008c75\nc48db7f28d94ff0884edf83f11a0092402f5330a 996e8b2e24716070961256b2a1d7fe7963a67bbc\nf1febf8e9028348fe3b46c91b56b0c9c36479998 b34bbea35e38503b67aae9a108c69f9717b70f6d\n3b49ceaa0b22f4b22842b6bd4d48ecb53e0440a3 1152edee0c86ab2fdd77e41b9847f489dd706e6a\n2eb6748bf1e1f9d07db988fc346d06692f485ed0 d8d1323b17880b994c3c642f38f69b99ff44db31\n459e15bd53b2767ef20b22075cf6d9c8076b0f19 59d77b505d1c67be765a751667c9e66a10460b99\n36e5c1482adb4f5c247df6ab58f1778e0f61b526 9890d751db3420cb15efe56d20d9471ee9273e44\n3fdd458cfa2904af668c928eb1b20a75457a32c5 3894490bede0160b02882adf87bc1162cb68351b\n4a71460a4d8d431345b1c8cce2276c047c7c4340 ba5a0dc973ff6a1edf3552abd10ccdc4ce8ad92b\n18ba207f37e98d166b4029661773e8bba201ef8c 14d00a3378b4502adad2ae4a2105f09e32e4c0e8\n7c404bc4de65372f68dd641525c955810d60bda3 8631b1d9ca4a5f6615c53b404c1879607721cfdb\nd04dd209c4fe22879ca4808baaf0a67da0555369 d12e351f52dc008628378a871cce87545e51f95e\n83f94b4686cb403315fcb126f0fe71b6cb6e7ad0 b50b47ffc5028456df70e4b2e6f3e43b71fd52d5\n5df477126211a2db907313c09ddba37b103134a4 8da32b09f2d4e6015579149c5cccee52bb334f0c\nfde9722e4086fa086f7b15659dc0717d73c054da bb66530060baf286b7a55d69bd3fd34a1ce6632c\nad2dc7a36895ef57ae03483031cf8cc2d5ff36f4 fb05c65cfd84100cb6c768b591bc1a088094c807\ne3733156c788aa1d1aa978e02a17ef1e9ea8e379 2c8de3d28080a99851bde9e196e919b8f6a25a03\n2134ebc51d80533e55ae428a7c435ae64d94063f ce1ec05629323614b39c231fe6e5926f66b8c5cb\n6ee7f2af56dd80ad8738a2e846667d2bbbe10da9 1309dfa4a0a596afaedd668daf6e9479daa9f294\n4461e19600c3c17228b9e7ea4d71e0b9ffb29cca b6a31541441e906411d09444d2cc20a7e6af20c7\n3c03d242dcbb0bdb6bc8dc114ffb032b829d0229 63cdf9b7efffb4883041a4b8172bc5c88e1f569a\n55ab5f16f0ae76e7298dcfdf369e09f5e7154abb 2cb0d269d6a039e6ba0b80917c5324ffc9ed3f7e\nb17678b93dce337bc0c505e7383f40bb3f1af914 747d693fa8cca89192cb40c5e609614d9d0cbfce\n2c730f49815261c5ead3553652587118dfbd8b8a c54e1a744a3442048d05afa7ecc913e1eac9648e\n904d31c654cd262f2e7cf6b983ff814a3c49f364 01cebb4c87a896735340edfc99d60fe3cc429954\n95a55ba8007e988426b609a047ccd990116040bd 9b64d291ed56baca56d50e4c969f496a1e1a47a0\n1b89b851c4aa3f3a7f90bc454f1718b3d240b6ba 78c2edb22eb7692121fef3f7387fae226c5b2432\n35e72021c70d7b44c41eac5a9e9ee5ff4ac44b9c 9447560e10c557ece550ae1f878ea450ee6ce15b\nc0708141aec2237b05d10c1a4ec05e90a10f50ac 65c15dc3be3bc7a30fbff17315cc57b03df9f088\n914c99061ddedba67422de11b291e41193b2908b 33924cc1d5fc3f33d3821d159d11156abe22dbbd\ne390a868bde61a0c6ca5aef2b2125c1cfb24bf4e d57977178a0b171922b35a25f5b269df1831b29d\n64a81b24a2c9a9bb9aa42c5e58ea28e53183dd4f 6c21cd027ea7d5b548e3328a30331d2d2d7737fd\nb027f9722b098b7331d9c0a790833dd3e6f98650 5902afe3ae73e9d3aa17ab3096da3944f727eb6e\n2e6f9968b197f3592b89652f439c19703e23fb46 7e6a3d9b5e9d09f367ae789ea61b2b7743d25e87\n583cb5c4884fbce3a75a90484d374d58543b7cfd d58e8384a6b04423062681f85180bec3d0d3f852\n5084d297050e43ca7f63dbfcea6b07d887e021c9 bbddd8c96b428901923763a48bb8464fb4d9f601\na8109444da2004328888fd84f7f24146a57b2866 8d7a0925643337331a0acb1e542e24fed8e1c825\n46c1022dfb6233e281a4c8290eed77191f58a1e3 f315c8094f6c0aa65496c0141ea4dcb56122179b\n8419c77cc12df3439b5e958195b0573cba34aed8 b45adaba23343b2b6c2116dc6dd492ebb5217480\n43cc2d2a6edb190dc7dccf920a313cb837110732 75b21c094a12679c33cdc6eda3486b6377498f96\n9df62e8f37aa3914838dd3978d24471d34f08de0 e684f7dea3dbabfc3678565bca3debaca706e878\n7e2451b732b203054af846f21d6987b934e39eb0 bc7e05e5e9ef68b57a6a6cf3d0f3b930e9b4907c\nf54d931c305c165516d1858851132db1e65f8721 42098b1105d9c066e57b9866189752a7488108b9\nbea2f6069176c97ad3c367cf23f79ed0a6356b33 4c5efaab8fff392e85a95bdb4e60f127d6f49903\n806b16b24df8eb0e0cb993021ce6b4f5a7cfb42a 76a357101c975da2a5a71d9f56c25c516152999d\n3e58ac22abf6df193f2100180fb625fd280cffb8 45d189efeb8354ac599632b732a9d865aa35bec6\ndac179a4deb10b7c564195a2dafea9e6cbfd00d1 16e5d2bdf74b8b157c461f6229ec562295f43dff\ndc8038cfa77a7cded18dd640ae162aa5403996ee b3e5fa8e592e7b7e96665693663b8a8d2c92a1fd\na86bb92b8294f23a0b3dd371729dc4c53dd8f73c 6a9c7ed8aacc7ca516398a4470cbe461bf64a476\nc5005f2900b87f42c0934181e5072f87ccf5a2b0 ac582ab4ae779cb6b6fe000ad4397cc55520b0ec\nba2b07616c7e224adefa8251942a9fefb3a8514f 4fd3ecef5bb994bc718504fc7d1730d519fb99a6\n8bdced420027c0019ed51fedf79a76a7030e2d90 db9180cb3946a4cd9715ec73656ac40859130bff\n4eebb67d4795dfa728699a69b27dc841ec75062f 67cacddbe61b674f0563e852ce2abb008b2dccc7\nce3f70577a8c2ca5429b951e8dd9450fae25107e a4e00d4453b170ad8e97384aa59aa8f245b85ef0\n503414f4685f0a1973989a5474da9e8869649bc7 ff4b115eb096e9686ba1fa9fa41dcf95839f757e\n487ab99c1735d28b1e0cd481220a9a863128041f 81f83de2bda7fc2201f4ddbdfe55e9dd606c420a\neda6d98825ff15eef6d30a4dbbaff84f61e6ac36 c08701d9a1af28ea249bc7e50f06ec293aaf6791\n263bad0fcff608601a03bf32e2e1c623b7f92d12 cbf74177c9a421bac16765b83b08a18506f4d6ac\n62eb8d9bfe0924524a23c58f8cac1d6baeeef062 543b23f50b37ef1449ddabbf594fcfa4a8152a0e\nceb1cf9f73733fd82a70951970ccc6d90c51aa52 b1fd0e689ebdf799f6ac48f7d9d14c4c7aea6f58\n05af4afa4dae5dc23123b74fba0efc66b84dacee 773ff57fd5446fedb05e9a3b02d69c676d80ac9c\nbca7dc7dc97390d0a12e968e5dc9eade4acc8460 4c2111ccb0e249684965167fbf4b7cc84ba660ac\n0aa799161c2a2dbe71121dc332a7b08600d5e4c1 3a2c2e77e0fe0a3c0fce05c03d3d1b6ae9e48f25\n90d9567d407c914d0671a27d018015b10ca85809 6bdee18a255c90b40d6243149f87c77eaaf719e0\ndf75cf41d6aa512201a4d96b549c047526fc9204 dd1ad25e347f804b36fd8f16865a0df48957576b\nccf6882c471a4510f921dc3d82015189b8ba7571 8909ebaa6d42b6609e6c78789d2d45a5a49bcba9\na835abc7afdf5d24ed84828c865810a06fe158db 0b36ba70dd54bdae5005a765c284cb9b86039171\n132786ab7ac199344db06b7c84092b9c1659ac87 9314de4772ccf97b10c66292c20a189c8a45185f\n6b3f15895b23e7a4ea91421e0dd9c6b60808633a 892ae780e05be9f060d1f3038abf5a556e94212b\n06c033c109ee1064591292692d184f1a694ba634 d56db0b5336ed7cfad32513dff8ba7d9fa91024e\nc366834e29e9613f866e7ff9f10d71684a4624d9 4bcd2457ed089c612f9c21ec24636f95d767de50\nd914ba117c6af8aaac5d3ab22268ed55fefe6122 7db0c27e232fdd07a7df5ae1ce993e007598e068\nea5e0035fe18df64b2e95fa109208014ed42cf3f 137a9daf16bd944698e1bce0e41477d0eeb0b798\n2cd02d341cf7de398747ca1be45fe25cbef1889d a47cd309109a2cd68af58d53d859493d8b840a0f\n7da82f984ff713b4f9a6b34373c8b406239f19ad 48aebd232577344bdebc65325ca38998aba709c4\n9cf3acd825bc46145dcd20c9e8a5a43ba4661c00 d73758f812b41b4aecc2a104f710305be1ad4572\nb0dc6fe81bae66a9895deda379ba5190d2eeb354 90aaee043bc1e07c66f4e9d63558dfb445464643\n068ba6104506fc5211968f155b523fd8a9ef760b 2caa8f21f3dd68996d68c80e38866d2f80264a4f\n3bdbe69d55b3b0760708c419384bc320ded0158b 558359c306cb55c20525d451032e717d9eb05ccf\n9698ae53448a6560ae66233691a39850727b7d0c c0b1a65783a01d5a618af70a448f05cae9047b61\nc7e46248d331180a37e19831ddd6f81dc3a522f9 244fffd3af007f1ddc304e2a734b7767a5263716\n0b5eddcb2c0c16c342bb87dec14574033ed0f610 9fc6cec7a0813ce773a3f372c25abbbeab3d61bf\ndabf00f752c120b8f18a5f626fd291f5e352a686 4cf38a7d02401164aa214870bf7a483b6cc4e6c1\nd836a471185eb6a7a618ea0b911899e79774cb08 50a0dc882412a3f823b19d82c3cae43497930592\ndf89b3d9ca8dc39d1c3a6829fb04a9a7c1449b39 6b580cc819e9dd875f879fdade6bbc79c6e23af7\n7ad714170e67a19e7caf6722dd4667d30ded6305 14530504c277ad9583627cac30c5879b9fed9f04\nef7046ae1271240cf0db54f3d810c95cf851bcfe 9e85f771d4d3289ea86d30c51ad4f0da21cc6c1e\nf3605a404d03223d6a78be2e386fc003eb960c9d 0763812f797ca6cc003d53a59d29fb35213cca82\nacc63852899ff2c1402292c567d90372e6439900 f4777883e2d94ef8d02a30df0b05afc3ac522582\n280911492651ae31a56884ec048c1d8b82c8145d 836f0acc3ae14bbc3fc821c90e109d270b81986e\n39170cf479e4679a001fa2b3f6831b005109c8fe 63333172699f6803de041d02a69594bac8a3e8da\nfc78eade80ed470b52a8d202ddbc5f42c1216245 ce9b5dc0480eb14032d40d0bc2de15c52b5cff0e\ncf52cc44a38eac4fe749c193d970c7dcbb408702 49a85183defe22d0c605c23afba8d594dcddab79\n054916d1ffb9e6aade11e20f77c2012a396adebb 4fdbb2430ccda398c1272db7feaf53b82479031e\n0ad0a1018ab8d495b1ddf9308174ea9a2c6ae082 9c9f4fe969ba0444078a1c9113ccce8ec1d81ef2\n2fa1bd72fde73b7468eb668df713e34d37ef0458 4391cbed8588370f2972a2a0c05ee18727a9b05d\n9993af06baaab533bb520bb6d9cacb40478bd00c 609af4841427a82d9fefa88a4fc04eb6a6867381\n7ace30aace64489738bba78ace4525e5b5aa4faf 59acb0f3a44d7e772f732031e15b2a75cd4fcf31\n00b836e0dcab8deb77f651ac4a2af4806c2aaa32 34807bcfa5006f29bf9a8789c655139178fdac89\n1179eb5315a25f885d7220a516cacdc2795555a6 f7b5285f666fec23e9a4e68938e4850d03105b79\ne4719c1d483f4aafc6b5c77d0bada3a79f34395b 5e2c44f4e4ab3a386fe0fa42190fce0a2112c8b4\nde5a85e0d4032fa1470dbde157bd0e398c127190 a0cd3ddb1953108d7baaa9823b8c93e1a738b52d\nd618d834861ce10652cb8426b9afd048eacece5f 4625c28597e18ca859c32b7c380872465a09c43d\n1db15db91429b53aea04f08a5ce89f8be0c30cab c5fa19bf662108e9d3b2edb53caaadd6c0e485d0\ne415f0b151477d85e5cade509854d91149026afc 0b05b3c32ab262ce8bd2fdf1c07fcf35a863eec2\n8125e52dd472fdb8b7ad6097e3f2e3fcfceb0dd3 4b1fef05856d97369b8a156acd22ba26b523d140\n5e069ae16d22ea92b9396a6931164d2edd63b88c 529c1ec15cc878cca8f2fc28c2d9097c4beff4da\n6765877d3c1944cbd29c22ede89ccd18de34988b 4792e17f8adb3a8898fe7d00ab16a24601425c93\nf17b07e76d9e257aef68cc841f1e3020c46ef57c 2f7f88324d7c72e9aa9afdb057cd308b487c9f47\n01d0deba3a0f4b0a43ea0530efea6d0ee3412313 8778fedfedb540f9446071c312255ddaf5dc14b1\nb32486797c5a1d0f5491af228cdb52b37f3e4f62 f0232cf057f62844c969296ae05ee8bd21258b11\n05612c3ae7ace59bc4264066f7eb14ee6b0db7e9 13d705e1193b3ee1a61f42a87ca4ca4503aeab6d\n77360b1dfa9c9e372432f404e425dbe53dba593b be5bf31d13fa075be0756e86e6aa028db1ce7a99\n08db3de100976a6db7ecf0b4da0f27ccd30beefc 2362f9f4d1a30a1acc537ff0b178065d2804d05f\n2a346121edd114c12403c2851d27868d67ad86aa 2771dd8c0f8c22ff483d9ac7c7f8f21e16254988\n598ef7e8802fa6241271b1e8ef70392153dd6065 80c88a931a33d04f3d44a8049f7ed2886abf757e\nd6083809681d5b54b7249bd3ee38e176e2cb0729 84376997968264307a20f3a37e13b69a6b18f20d\n6eecdc63fe52f6d06a06ab5158748ef037c4282f e55f85317adb5745e396f9525a7c68b358d155a1\n57a0bf140c4d6e6bddcf5a8f34e9003bf3706921 85e2a7d179105b96a2ba69c1e29c94c12b19bbfb\n7d593ee0aa7f579f3e971071579a60111cfe1b11 2c64303afbc57690b68a6072b57e7eec31dbd424\ne9670dc505339eb361e875501a8b0c8a895412eb d5b2af3c30366075006762d885ed2cdbb24c3609\nbfe79a878c24f354db08179eb15a4a385d1d3c02 8181b5768c7495eefbf93c6b45d86f29ad986356\n189dcd1b7d4f3e7c0ddfc927bf3ea9dc50775ea5 7e871ba284a8a2186d13fbb4620975f4bb72afb5\nfee4d30e5fc028e26fff46fdfa9a81d09edee565 2155044833cde71d8b69b833afc962def6b24f32\nfba79930f99443299c450f640ace73920162973e a9c6fec0afc7ee7746e4e2f592f5c5dc966dfe9b\ndb3a95a67470089581617333d9933cde5603aeb5 15d72f8ba835da831a563329b3918083c6208d9e\nf472f9482f6a4dfbb4c77a3163c8d637b477ad24 39e8795961744d40f220fcffbebe152da7756b2e\n90dd58d8ee98914547369295786bd2791b4e1cfb 777946a0898d3078c35470c9304027ce3c6b98cb\n05ed9e30858aea4ab426df9e4a21a111cce9ce2c e088d6b809c5e7d8f0fe65acabd28f4277279010\n21a0fcf134dd8aa26bb72a507b8d1bbeb4fe7bf4 07bf3fbf55dc2ffa17cddc952f525fb960ec7ae0\nc1539d512de5d5906b4a40f84308c87ab352976b 064cb3bfd7ea12ea29bbf15aa040b3761f33f3c8\n3eeaf8d52e121b299aa25d5df1d91b834440154e ca57730374e221f4e21bdf35eb434fd3722d039b\nc27a1e63241d606586700e190b1e06db0855d1df 2037610d1d569969be3b0cc9afb8975340a2d35b\n143471ba8f4f70fc2a06399a8401ffc1aac72cee 18202bda8506f73894c4867bb288fbd9ff1fbfb1\nbb2789fcc682b59c8ffaa391c5d74c4a175309ae bc53deb8abb80f3469914d22838bc920110b0581\n9d19037af9b99c3419eb51981dfc5ed4fbf843a4 9eebd84d9d64f003647572cdcde50969b3af589a\n05b571ead689a126839ac8720ed4bb014a65ee16 fac0c208208e849c8f9fd07eae5cfe9eb04c7fb8\nbbf99c838ba24a42aad05da3b77a3917d078d7a6 2a4ce6dd877bb0ee220e5a91f1e9567aea1f5a0a\nab0c70c730b8078d476269c97d1c55a0a43250c7 df93f3b0ee6c97625bfec2322e8d5d95f492f5ff\n2d0ae7de57e565c18ef72ce60d132bb4355cac6c 187e3624b4dca9468331db9b37c812b3b418773b\n7f8fdd664b05223c419afcb54e85f6e2626a2203 cafd91969ce7328aaee304a1fd4a841a4019b566\ne90d2f56a94459d480fccfb2f10433045a41e5db 594e6bb3bf23f7abe8425fc325675db1125d0ba7\n028ad406113548ee7fd16e20a39a2b730ab280fc 97233743fb57c9bd79783642d8e41ba346126d5f\n7f1dd607ed24252b34e7c08b1d5adfb8bce830e3 36be6f55fec0c99888717691bb48dc793ade9504\n489ce4f93eb9e282abe1b41ccca1ebbdf19071b6 dc96b9601efdd16e4f55a2966c649952abc452bf\n943ef21cc665ae5295102d2cde321a9e091670aa b5bb81e062f051125efb7e6bd5a5b6942d4a3047\nacf5ff4371d057f279e8971536cfc6d7725dac11 8e3729770021fc6b6030a6cea6b758caf10f4692\n7e0e88055d714b0fe5a61e43827b7d5885932378 c796134265e882a2def445f823e1edb7d852be1a\n147c9564fc4da2da1b39dcd911e56d84ccc5bfc2 468a289d4bcf1018731fa4f5a2d5675a23d88928\nde03ea171dc7ae5f2bfd16ff6a94d42c31f11c4e 920c0dc1a51026c60c06f94c4a99337285f16b6b\ncb48a4b1f53971b95ff129aae9e7cd70341383b6 2dbfad8fb2e82a3a2583b6886d874c987940450c\n27ede33c33ac5d919aee819be717a065c1f3c534 c7bde7cc26b43a344c396b3f54d749b126703be7\nc248624ab17c340eb388f957842642399461343e 29c1e0e203658564a972c1d936515d249841e9f3\n74a783bbf4bb7720c40097f9a83d8b166ec006f7 8abe5c54bd48d82e52808736abaf4d252802cb5c\nf87ae6706086fa6ef0f8c82fad29df79ae0c06fb 0e783de6a3bdd2c5625b3bc7152744234f0d181c\n52bb812dc70bc13fdab1033ffc7b2438522f6740 ea9d91123784f9edc2111d7a7af9b402bb7e30eb\n159ac1bd990c088d9e4a406e86d450d944f2c1ed 051667005b9c33069f49d8a7a2fd6e14fef523c6\n5d68decea56cd01b4e39ae45fbc470d368f7793b ee486462a51d280309bbb479bb432a781b0c25b8\n8e0f27ad3a125ee977b78e648bdd6bcb75f6998d ca2ea8625c22abddc65890123b122aad00ce5699\na6e8095cab099aff92ce767ab0909ac1f6406857 f214fdfd1927cbeb71aa930f0a9dbac2d8d8310c\nec14505f5ef1136291363727fab13bdd13cc624f 0ba25627e22bfdf12c91f2de6c81559a09b375ee\n28581f149084ad73dd424d78b65fda0b4165353c c4a717efa0f35352f93d5d27a0dc1347cc626134\nef0769a66090dd188c9b7863e4714c4bb003df6e d371a077640612247a2d2fc090bc51905f7f7bee\ne7f8cf6f1ec7fa1632b31a9a0c613880f8b60dc9 564085f993aca3ea2e38c7dd1f17e49c8c01d75e\n53d761675307f9a7cdb34e250456eaeea9ecc7e1 333ed60f4f5faeb69538fe321ae03fb146e1831b\nba796abd162a8f0dc7dd271c0ea0daf89cd4fb15 05bf94f3fb82164a44a49d98aa906cd5f5158338\ndb6035e79fe74a44d3b938f99a106cce963b011a 5b7c0cf387ef5133aa8eea9b74c8eb8e7e9d1d2c\n6e0227316be46707e2973772248384bcd3151f0f 916593bf7992b0c7ff853e7fae86041381d63dc6\n437202e6d657ee064e65f26202cb18a55fd78bdc 90548a67fb6e3b98e56b4f3efdbd724ef0bfd56e\n4e7b3bfed355c6428a431ffc99ff545f0c6252ca fa27ba6897cd170e27d67727b7d339640a3636af\n0d51a29958e1eaeed56f5b2a4fe1a2bd5cd52363 264bde8d9ef4acdb090e5fc2e3df962e0884fccb\nea20e9908355e6a85a5ecd33f29801ee147d4456 077bf2bdb58916149f6cdba3017bd293f44b419f\nc47861b1e7f39099a00e0e3e72c7c28c33ca096f 8afc373c77c8593d09cb1a9bbf7e498165b038af\n3b8b22493d88276b702b64ffe4865330ac193502 96692b94f76e76a6f4cd2dda04a87bd6b1d05f43\n7180e39c0800fc9a3735ec1f8c0ddf2814f721aa 6c406aa279edd33f6ca30ca6f8911a3e87aa874f\n516227fd6743d1825b3378c8b36975938d47a217 9950b54399fdd35c87437c411bbc075c8dc13057\nff43ff19b750f603209aa153721bf06dd037f550 fa663d18c26258c5ab5dfd0e30a6946b8efe1224\n5b301e532c10dee5cb606274dd9ac22b3ad5f3be 06c802a21bb2e7a55214780e0a4c533a647430c3\nb2e1e21eb94e0005a0fb65b05b8e0322deac48a5 6ec41ca775d47091021a65f820723c18f7d53f98\n333f0326ed6583c933f9318ac79c78999957544d bad7626c5a417c601d108f9779082904dbef41a1\n1c0f7b9bb085092a12c0312f9c049cf8e02d9a52 023e1f4174e91f65b7a8ab50d9d4dc46661801eb\ndfa19985d339613b7364afb6e0e3420b5c4f5471 ec1818018567d567e6f564d4e202f6985a845c14\n185de12a4ec75f750a8a53c2ee7bd4dcc8e5d961 3911c1fb5d6b8fac3f50e6770aa7897e32d58dd3\nae11ce1926b04ff6c05b0e8f40855415f673f331 4359b76c2e98ffe68922a31b1e3c55ea035f7f7e\nc30fb80ce687189ce605df7b2003d8deed45d801 3807d666e857540357575f238c05d3bc15ddb5bf\n862f51f996b96159bf7dd7f1a6ee9e58203c37c1 b2bd8a36a17d43d5a6e004cbc6885ddeaa5cb57c\n3365f0097bd326ec528ac594ccc25ba9eb33dc0e fcce218142db6f5f6e2ee5751931bc28fb8038a6\n2add581852239ca54ea853708a4a6505cb8f749e f1cdec39af4abb60091f7f55d073134336ad4ed2\n12724e72d38ecaca26481f5355a61000f9a42b0b 57bd18f3676d332e36dfd45500fa193b614c86b5\n7d5d1ca04f1c402564f51df1fc542e327511a5e5 48885e0395a142b873a9a28c0a20a35da9c21304\n89cfb20c190791d24125d4b7071872c7421c568e 866436505a45e2eefca6144fe2aff6f1773b3f51\n1665f0b0a35815a4446054befc94c45c505da970 136bddbb9ca697d9fcfda41a7519758cae262ed1\nd29c1c8f4e935cc8828a6ef7a2352815abb3c44c 7e1dcd76e057a4d6ffac74433d7915327f3b07b0\n51cfa707f22728a88d101c2fd3e189daa7a53bc8 95b29f919b09eda88e82bb7f605e04e5147df536\n59dc51af663c3b8a8eb8d96dbd8f22172d995911 eceef209200e83d7f6a4682b410f53333a783f31\n75ff86a1a12518b9282325497cc9edfe71ac0e59 da631e2b11ab261dafda3f0560706112c5d0fdc7\n980d6ff5712f4faebcae3d6146cd379869a7523a 4e8f65d003f72185f37d69eccf83130da30b4fc5\n6fe6cbf43bb7dda3aa3769bdb99cd97ec0c4003d 9ce93bf133aeeb1766d27cdfa409035e96fc4b4d\n3b697495319c530ee25b14f2bf1b4ef0c009ceb0 e0de1e3b9ca66278315f397784a32e1a37e8b598\n12dd198006a12a1d9fbf49a0b5708f645efde60c 2a039d1d0c301c12b3cb11924b39ba7872524f1e\naeeb2ff31a9a5f5664c731637dd753f96b1b2daa 9d64f3cb8abd437b2797f860e833e9230eb85ec7\n5c54a8536fb704f0db51327c195a03c7aa131c6c 2601964d891c5e03727e440045820469a2e267e4\nc1579545252e392bc34cfc9a392d9522b019bb75 df64d8c8dd6b533ebaffebfd03b59952ffb8d093\n2a33f265c63f6934017e36f48f9105c54313444a 5178be113e7661424dd1f0c3ed03b3dd9de3b779\nf01b9731c24f1681b33c4e3755b20a5a5aa8f49a 16a2d9e6c69c3308366e43fdf5b0c391836887ad\na0e6daa8f9db1a4cfdecbf468ab2aa545e7b8de8 9e9889f824cecc428cdc528a0360177ce88d5d76\na755a2fd78f41c75b3896bdc5066945ba3d4c52d 0b9e3e496a222cdfbead9131c2bef055aa39db84\n663012cf3a54b1c3d6ad3a93df7eec30a7dcf38f da73b5ca20c97414d439cb171150dd7da6149381\n66aad575c803e9332b70f58f6b1ab2b7eee1d59f 9725566b382b744c9b46d9477be1bad07231c2fd\n1c132223ef065f72115fe310d79267acaf25f1b4 faaf7db891e1279fd8d5b2a50897bb01510439a8\n94cbbf7fa91696a98a30e762d19a8fb149ec092b 29ee7c41d67953c1920f280b2dfb1bc2e83adf7c\nb5a3d1960c1804d00911a527f8a69f908e05f209 12ba01fe9c6f0147d233d1bc7b005129f0442824\n4df6dc354109d07182b40bf55cd238b6ceecc4d2 4ec8a55ed9442947e45ac25e38ef598bc80ac6e5\na1e3c3f8af9a485c61a9d360a0306eb03c7a8d3f 82fec657aa2b518568eb542128c9a0ab58519670\n141bd6c0c2565fa944818e5525e7b856529e1540 c6b3ab12922e29b89d8510558576c648c8d77eaa\n3c37a475000c1fbb6d11e14231134257ff1eb760 108a98961d791d22712ab9c3aded3c6e804a2406\ne25cabef22e3fc84179d3e1e92a0ccd5bd40c93b 4e2fa774e24cc7c8f144f4e7dcf0c979972b6e30\na25ec146819fb997c336fd9e18d6147a8cd0d693 69fd504b662b6a19ea4dabcdb9fd6b4ce5a463ca\ncb03b1767b3b75b5f5ce32aa40e65d6a55874c35 f02ab39b54263169ce0b4311c947cc2acfdb348b\n38aa89850e6a6f626eef7021e95661f27875118b ca289c2bdb0eb510c9ce41f9563ac034f8ba6662\n084a6e4d0e816502fb1306e66f66aeefac0e0479 77e6dfb54979fbefe0cf63dd3464534a7b5fb852\ndeca71c941fbfbb33ce991f5836eb0de04417382 1847ab58852409262bac8820c0427011c5908574\na678477d915b076cb1dc90b626fb596215074151 3119203ead9d76c077f6aa98c8f4152e6d7d08bb\nf6dc6e0f6577578cea4348053be0e41f57985570 b1a7c15852daa532c5244708baec4dc4b66dbbb5\na0098dac9cf616a98bebb57dc1490709d8363b64 f0c948cf48af189d7ec53d2a70042ee1b153ce8a\ne0d6f26cd59a772b0146f9e70d548f5c2b5367b2 36eb83b172e6bf20f2ef74ebf9733b18643f2c75\n3b02aaeb1ce691afb2076c5fdb9524703aa5678f fba58017a7bc1e49857194bcb6dee982fe598bd5\na257212dc7068e5515bd4c0d71d16ab7be0ee005 3c8045ad25608e7dcc0598cdf4c620575d3b8cb7\n99045e544c31fc3a6492cf82eb3c8b01be8fa841 7a6465a513d5f282f1f89af9a78ca58d20a4d6cd\na654b49b490bed224ce3f99e98ef8221db548d10 4196f414671cc114a8966176d3e5ab023984f1ff\n659c0ee1e0c7a6d60425d1d5076607865847e340 bac388e5c0729fb69b725ba77b969ad2f3d7948e\n3b4f96bc643c69e112aea4d5d8f7c4c4ef5a1ae2 7833d920b94bcff25271133ff30a9e7bda70d2d6\n2713af2f39a8bb913490674eeba74b630e380029 c8cbbfb4d8feeef2f3255ab146e69281587404f7\nfb79fd5aba087084d7bfe519e68571c34df3d4af e380d37f56e3d4b21a623e5fe7913ca11280ec1f\ncebcdf956827198874294daf9b2c5dc60c49bcfd 41b38bfbfef0bb478517c973b1e93f42d9b325d5\nbbb6403db411dacc6218aa398f9ecb345d51fbef fc346ebded5f61720168414b47232a530c6f5f8f\n581c3f7a1f64bb340f03d7ffb24194af0c6d4f4c bdb84f21cfebdc27b47017cd0bb2cbcdcfde145a\ned564e260a2c6ddc06b8509a2c592f8531d6b5c7 f033403d7cadad43a2dbba2dceaa6c55cce0c1c1\n4b56bc9f38145dc11e99c3fd2ed1fb8dfb9560a4 6b7588e35bb41f88a396349344847641bcb66aef\n37f78913a2e53a60f819ad2faaf47c6efdc5d5bc a4467e642f601cca667ff2c0d77c2fd24e05465b\nd71eab7b89c1d978a069e8ce335241ac88b8e2a3 f9c36dc8ee6ad0514cfe6c1d6f28ff666ff8fd03\nc5af714420ab25c68430dd546610d05d4f4875b9 dc83f0bfa1965ba9fae22c7e639ec9333b079785\n32cccdee8b9141083a52f9d5309f84ef268b39f8 c7a2b0c074f05bbe69653ae90aacdf507af61cae\nb5343ea82466698c58a4f6a63e19ab8768748281 cf6f4c77dbe40701c1655df3f88f802092dc6a77\na38e139dc5404540366d250371ead88fe27d1536 2fd7a1470c88231791a94d4b0fa6a9626ec2f5dd\nd2ccc9bd293a62d192059be4ed9f8bcc5f362263 cd0365a2e0ff0dfd48795a1fbbc53a3715742f02\n095327a542dba013693a1cfd620be0887bc947fe c8e3efd7d4064fb5caab0a15107d706b912781be\n55ee9e27942c2f011ec27c7bb4652526eff7a8e4 b160c7ba172a97c56d7581aff7187e95c85ae0aa\nd75c19fcbb1409cb10fad546fa86e719dc196014 2a581562a39d8de8f1a5b6dddcacc1b6ed53b502\n9d31770219098424bcdbba3e39f5c0fcf43fa682 111955d28453dd68b70be8138e9eed82a99eebe9\na7efba3197342dbc375bafa8c77cd84c6edd2cf4 7884bab35cefd18c3600657cc05da87097d3bb3e\n40a7d4035da5f6b26c075e655cdd63eb6533ae40 7a28d788cc28869efb594782c0d5faafe3dd19a4\n79ef5edb30c344d4fe4bdd0d0b07c17993a096c3 3944a860c9034639eb0f98c0409c60b822a46c69\n78117268c1b03fc1a150d8824c03da533cc869b5 e1d7cc16d2a03c5b41993059dc88d8d44db4a477\nf86d1b52a625927411c30834826b400a317b7e9c e1c45417b9860ecdc4c91fe4da8aece288c2dff7\n5e9e68f6fee6a37e9036e3960b3a66099d37343a b3c8249ca499901de13c1768a8c9991bfa8eee43\n842eac909ebd46c3659906fdc7f8ee94ba20b512 d0432132bddedfed531bf9f109ddf6e13a4a1c19\n56d0c933ab486bbfb49525e1622b0a31e8ecb138 91b44f4f9c578971e1400da9b790279288bb3011\n7085f32fdc31384aabf7db79f469ea5f7790355f 42d0afe4549fbc96a5661793e0170423b2adbe64\ncffaaf086baa7f2c268140c33a2a9c90755bb69a 2005ba077c1344025875a3595c64c86e03cdef4d\nf41eeb0f59ee472cc4790915c1484bb3819e3b7a b189c7b454188c41f1f084ad34930e5702a4735d\n6580dbadb7b3cded08f09e09df4b40e3a07f30e6 28d8863444c6fe86b0eaf6cb7722822c1a33ca2a\n0f08669a376c40c260f910ea50335a6f253f0bd8 7c3c439d7dedb068ff0cccb80008ba73d5ba8b2a\n3824807560ea0b864e55d01be3e71f5f04b21c94 ab3ab942aeac353bf4ccea74e2924d171df1bf3a\n81ddc2243c628285b78e5ab5ce21e57c7e5cbda3 a21d5da2430c8ade29001264909505ba44cb503b\n01f50b8cd76bebcd95ec225244d85d5d33c7757c 7978cc72d8c7eb476e0c9b86888f64f11391fcf0\nf5279ec6907273bef4b72b5d862276a9bebd0009 d3e253969bf0a50831f80bc0fdd6f41e0d74bf0f\n72b27f3d49d22a43c34d10d828be07e085008193 e2820b73a84bf9e604302f60814ff59255bad269\n157a8995611f9b71e992c8f0025a1b4c088d3882 f4172a02cf4b86803ca149245ca5d3f909b06087\n7ea0e8de32d25602d73e827743fd6c6f557b9e81 57e30071fe083a4268a387667b0b2b0338f08c4d\na5bd9278f505d35549da8c1db075b795040d3cd3 e933cfdecb845267aefe21a60105a5af49b8ef14\n8b97854192540c5576e751117a7efdd343ef9b83 afb659fa54d299c952c2de6b1c5a39a680cb10ed\n7635c20161d17047554a6d804b9ba2c4afedb9f8 eb767a0f29243803b1dbbe8936ce4800f9ddd13b\n05bc16f202405d5fbdd3f5e4e5e054ae57fdb7f4 ee8f49de9a81f29b569ea45f8b3b92d672ff3155\nd03c7bb882ce4adf3c067b3ce219d24879d71038 ca4d3a135c3afcf7411856354eb4befcf9a5dcbd\nd2d85d6743fc648bd2c15e35a50afb3e58edae5a 2c3a56ed08be25f923816715881c36127c414196\n35fb587d63509fc71ae5f8dc323902ff4eae4b9a b4f9ab514610b60643aaaa13cdf55022514c50d9\nb53b054f3025dafeb3c0858e8d07875cfb7a196f 8780c56d57f5772d68ac6c55d2a00403dcff1891\n8572531df964ea1d5e8b9fab9cb86e292bba4c4d 440ede1abe7b8ab0dcec5461864ac3bb7ebe00fd\n7b147e456c9f3860d193978f3b6057620cb6cdc9 3e806f6f6033e377ec511679eaadea6ed59d1423\nd9796d4c47944d4af1028405a467da940320125f 4143b0ce9e873e973e1ee0316f44e901b862fb57\n1505f73f22137b13663195a1e4caccaa4cdd20b8 310dfd2bdf9251667aef9da71abe3b671652111c\nb676e165b51d14f45d5f42aba085c7cb2ac8bca9 796ac9c47c9a1c18cc48658eb998b09ceed24a79\n63a5adb65da839401141d73d138496fe0a683821 47e684cd2435094673ab94fe97091b871c06b2fc\n69ce4097c0b430155fcde9a504479c27c05dc3b1 4377edb2ae3364be1645e79977bafd9a8095c77c\nf2a890487645447a3c91f8c4c444538930aa5614 dcc9c0434991de9e5ed834ea7747731d81da958b\nf14259cf64f51e6b57c6712fabe20aed496662e5 45a1c3127df43515572fb674ed12e66cd4aaccce\n82c93227c4a729567eeeb3edf40358ee164ae6e3 261dac0fc58e9d9095e27fb7316c67732f7ba6e0\n96af1c0329511468910b87ff0acc6e035455096d 0d73730b7a445d2bdd5751a66e8891a24acc70b1\n9874ad7d3b55ad97cd0e258daae7c2b3d99fd42d 51fe9feab5bc38119f8166b9191e32fbacec3730\n92628ecca5de29ba7b37278270c61d658be0b662 89b41cd866494024953b2899134ad0e932f3934b\nb2fc7aa349d4b3d468d998a7bcd755a6ac7092aa 930232eaebed6fa5b01902ecd8bd6856658f3092\na1eb00844a2a42bd498cd0f9aa044d608d842468 008a70603c2a1df6edc2080e9ecafb74c5e2bcb0\nd969603a3ec077769239e996258c9ca56c852360 9572b50e59b049ca66ebc70e6b7ff17bcfcba296\n28ab45c2a840863117046d9ad30d206ebba3127f 84641d528964d956b8cf0ebe0f7eafffd5c22cd9\nc95c9f1ae65973699dbb0f1c4823dd3db9be1fcd 86df8aac1405672345b27cc0f00034ee7c68f07b\nce9242ca9d81f815ec253f7b812637a39134edaa 43f961b0684d241898161ca0e3578eb90699e9f6\ne3a130b01c532580635ead44e41dd264aeed23b9 8bcd5282fe1e24998b3249514c7ed080419ffec8\ne0140c742eacbbc7a4582570ead209e658513b9b 32fee3430cf8f64f7a73a47669647b16ad17251d\n1823e17b84ac63c2e5ad6446e5f09a42a429cca4 f20681b3f43f52b4d5f37c66637a24b4baf3887d\nf88a9101c63cda1bd9eba01702049fbb44865b34 2a9009d7f604e849995d0097b2dc0ea9e64f4351\n457a2b74430609b69c79c58df20a670615ee8073 05958374a4b719ce1a5a890099ad9a25a0dc6f4a\n7b7680081b5c333c78495384496ee0786fccb43d f301243ef9502383f2d786bba45205395230dc39\nf1832d8cccef330b6638907e6a5c3d880d659501 217e95832d82ab5d1dfd3267e34e6f1b68293f19\n64f5ede9c0ec6ff00d7991cdbb9ecfc9d23f6d9c 776aac9a2ba2b196319c202596d8c27c794a83e6\nbb622a0b22df22ce5e7aa7c3a4d21fb432dcf3d7 3eeb2fc63e5892d9dc050c01ca6b6d8dd7c55e25\n4811799ccc6a99ccce617aa7144f9418fd9a5e5c c06a0d5989ba9e5ff03ae73add8fe8bcc16c5920\nb7d95c2270e2b74749312e897a8835477b95487c 378dfc9a1555db60f9848e52ff8b5ee115ff98b3\n7781d6c091ae10d0c27bd6e579ef9e57a5a53f1f 3faabcea0acf69f790f4051bc32daabe0db5417b\nf3f20652f213bc278d7080cd269683fb0918d37e be672ae07fc38a54ea47209cf835b69aa64d8f90\nd07a07a9ec8f298616b07f31d8dbc755218d8a93 63e1ac48bef24dcee20ce41e627b264e9339a4ba\n35e1279ec9104b11a4ef5203a3ab02bb8aa9284d ce9b6e9ae6376ce2daae7f97e67c77fce875b87f\n40ddffdb0dcf3747e058de4080ea5dac5a95a839 45f654906dd37be113476e1b9cf1ccf24aaffb8d\n815ef80c67eb4ae7883281d473c8c2304c4d1482 b9df7c80d4d23d669e6c69e1c633342ee18f1d5f\n55e323bcd4e2d635ec85215815bd033846d1b59f 9f93cd030e7865f95c0ffa5e8ae9b61556cbf29a\n49dff49ce13287ae44e6d0cefd52774779221a03 52eb7109b4664bda88002e569a22767af1d5b913\nfdcba44dd2f80c7a088f5393b0d0a2a742629bc0 44f3389e6c1bdba1b854b69caefb5f808a5a68f4\n9a3c3cda99a43eee2bdc9fd67ad1f43fc9eddaf3 53eb217cb5bff05944cf0ca82b7d87f7880f6267\ne9668cbdc1a642beda9df515e7bdd6bc72833f77 b8f2c048beed777976eb41ec126a8f284fbce057\n568037f883010b9433d6065c4559f6364192eb40 2185d64098dd8242f7b7ee2332d7d310dcbee0cf\n714655e58c1d41723dd7316db86b80a5637e520f c2bab742d4b50f48c6b2ae95409f015a8fcce38f\nacc3867981b7ef3b5b67cfdcc3e925a37cd1d3c5 22f0bff14f17ac16ff6b6e7efb138d8935cc7160\n4d56a550d8f7333d857ed3c8f4cfa2dbaa3082c9 9d2b6d73defb7bac7af16599c4dbd337988e9e3f\n68d2f0d20adff7dd8a8714a099ee1bf44787fbf0 4d1d4b8677f7ca71c0ac80e30919deb050482bb6\n0cb99aa6ceb2d2f501e1f704c0c0daa64191fe3d 31e074f4b3b47b7eaf113ec174739d8512f4d82a\n2dd2c828e2720af3cbbdd101cf9aa2ee284ae6d1 c605fa91f4d6b72a762dbd6fbdb482e98b2fc874\ned67db76eb163de6cca0e903fdd97a52fa01f94f 382df57da800dfbd16f5f986c0b67b43d3d9aab8\nbf2bac23bfc13f5f3b2d6695515ae9ffddb01a67 591007f6f0d7c4422fb01ada2b7ad2d961685df2\n9472f104f25e1ca57e39723ea36baeb1b9ae8b55 d728615f42743e0c605d6a30b406bc7d6b61bea9\nf8cf7b2e6922743a4f20951bd820842912fc19e0 7c4defd86aa68860b75841927a12e55cb4f8230a\nd6d52e82e5525af6541f2bcbd9f6a6a9112a2928 1cd940cadfe19f3641cd9d890f315f1d8c444df7\nd75df246c395c3be50905b4e3b4ca4031ae622c5 2cf8278ad33e9331cbc5a2287ae45991fadb5d7d\n4e0fae79e5f7dc1a38e23a1c5a83693febfdce5d beffd4bb33629bbde9b6bcc41dee1323382d2d2f\ndff4213b076d02d29e72d5dfd90cd01dd5893281 b558858ae1246d214cf197742fd7cf89a739ff29\nc452acd2ecb9c8ff01d1c34feccff5f0f6dffc91 822870c2cbc70149b38b6cb25144dc4d5b4474f7\n4b4cc50685a2b630d8dfebcc4bff4877f08cbccc b5e586a514efa6eb877634e756bac8c4b44c618d\n40dde6e9f15e860f7d7427340e0d579da019ceb5 756aa3cb2d263644fb303c42c717d138d7f1a957\n58725018fe648b782b0da17c0ea556c6fd29aef8 70f278174a759c94e257af110616e1368d1a25b6\nf05db1ceedd358938ce7555eb7c8e7036f8939d8 6a217625d1447b8b479cb14d7746c65ab8390d43\n98294f8f48e96213a155e9ef64a259edcbda417e 9d72b546888baea2f16d2ee508ef98c025deb0d2\ne742518d220d2d82dbf9e569ac83f87c06bccc4f dad26e9acb111d6e10283617607d812bbf05146a\na12253bddd69e8ed304598262677fc6165317c89 fd66104ab07527f88d6b4d4c99b2044aee6e4f1d\ndc22d2ddd4561cdd22f7f0afad1cb9bbdf171d69 c11583a9d700d2250e592af9b89f6dd6656e319f\n077a7df7a258f33ef16b9ec6282b3122ff2df9ae 646791514161228ca98d629f8bb94d43073b2bc9\n33f3bb58e65089d458494fb000f08edf20e7bd04 8cfa18ef4c4dfd11788ef6106c6e550be89527fb\nb9ee5466f18c8b11f666c43fc907149094771289 9c0e5cfbd522328d02076ddaf64b00c73ca9119f\na6caef3551ec0900855322af3169d38557e2bb1d 9eaed6fc38e702c8a650de17bdc29655a61b85b3\n255a7e60cc25c3d319134a496905fda32b1d25dc f5b771c7ffec02b20ae3fddd1066120e2659660b\n833c48d4693f14ef68672acf2118e240cb5cefec 826a3bfd2f3d5733b483c174e59724b46d0a3fae\n3080340d42d6a42004ca4b87c4b5f320786ba0ff 7e69df00655cec9aff6b3e05f00f4d56626be1d0\nd064dc98ac1be4c7aa78f6fee1d75ee9b33b9e36 930fabb4e5ec0aa52ec47da676b9533650f5d933\na77160c0459330a4621cb051b6da79c529d904d4 a0d87a0e0eee27e726be4c55df5c511e32d459e7\n4c3c544fd9ebcdd9dd3762a59157def46c6d51f3 14ac69f77c5281ccb82c4190682e7bcc1490e65b\n62aed950d738a4b63de4f3fc387ed3a8869ee025 f04077ccd48f49ac080a7cac121192f378f63310\n812a9bc5f44215f5965b7ea0f0557480e8a1a1dd f409c5ebf8d760d83decae6855111249cdb94eaf\na22bf03c316ee25cef9fd9820bba5497c419b512 2cd0f40dd884024320a430352ac5cf2bae232553\n75a34e3544b88411df1ad71ae177b623095775e0 fedcc5a922de2ca53001063e5ff16166639c9aa2\n7f8caad3647d5dc63684405a9ed4b81b7b4fad89 6919febceaaf61d518abf33595d9479e3fc550de\n1efdef4c494eeeb7ea46b626b1f7261450d05c9e 59859304a3acfeff3290c5965ee250362d7af40d\nbbc440344b6e1cdb84c5848a65273d7047a232cc fe8ca07f302505c61d68b07ba0584fb0556f3b9b\nafd9c1281fc99016b91259890f85bbf53daa9339 9cf34434c16644eef3be1b06cc66c254ae63f89e\na3e529a02e5d32c71ef5845e57235c3a4913c61a 3b08e0fae5f9fb9ceadcfe1c2a5680e02ed5ae31\ncaf0c699b4219e595f4f5ddee94a5b6c7110dcd6 8e20c0149cbab367b926622ec7cd8dacfbe5447d\n984994fa288a624f9e354298b0ff2ffec255b4fd 85f0524c48495ab138ab7e1ed89741402dd5a8ff\n2b8d89192ac7b4f2edb21b5fc95d05a6f07fa161 d33622038d358e6adfb5a70447dd6b8a171bc309\n07b4f0b5053e1e6277a650992600103360d7a6f3 286d86c01b5b92aab14026cc6a39023d671c27ce\n2e39ace482d970723ad2509494c6d5745af78c3a 99b6618625474e1d79a730bb4b78bf2081ec9f8c\n1434661572377ae5721ab1aa5786efbc26ebc954 4b7fa102534284a6e3c1a9e04daffc99591c3c69\n2ad186a40a8d5623ebccc1a1a74ce992f862cf04 317e8d0dd289cf1873f88aa446c0147304d3c560\nd44cc520ee649863c52e3f175d7d86dc2f92e726 a33121141a524b821da73ffc36becc26ffd84a78\n9b72bad2060116c35b51f6419101cae6a3d9981c 24c1cfa89370a5d835809786fb9923439087a5f2\n92643be3878daa0d60270820216331be09f42e87 3a75048aa6ab4f30f07258cc18a156f64f902309\n7ab95df960fe411dea3d6e5442ab90429f99ece4 084e183de851d3056103cc0742475853edc98ce3\n72b1148efda4ce43c6027958d88770e3c5f9bc24 b73df08606f08d66f89557bb02966a79eaf4a110\n8aae29c276c65c286810724efc35dd2363c9531a 2f7e6783ef44676e24a883bfae62dbe842e9bdf7\n1746d675eca79308b5dae294a15acf83705157f0 79bc6c86bf1144b8c6879a6ad6be5ea37fd073f9\n86e6cb16d799c8635ff65d117117edb1961ce34f f7265c2e915dd456510aea87a9b8284d49e04d04\n39d9092824493ef076961e31c3fc4f0797d73845 9d2a5f902e447c0e53a1ccd9ecb5bccb02d0f034\nc4778122e59e56fbb7bcdba97fe4256f78d55f99 dcacbfcccba5e5419358968d4c81e4aa293e7409\nd29d4e968801a582eeb16bbf64131dab230b45c6 965fdc8874212a94c9d1ea0ad0cd2f40f815e099\n18abfa0b774cd7c26eba9a1698be6ce8c74e6633 4ee2f33d975e3a00a9ee5d52b3f1d122842eae66\n5efb8af64f73ca1d18a7f5db122db540cb60c19f f9bd3ca20f3de3be6a1591ca57fbdf3dbcc38505\n6185ff7731337fb0038f1a3ebcbd9188bb3cd604 2e4216f2d1cca8d3bc506510707e11f77ec04470\n852fb995a664a74259049e2ee4814172df430fb7 ea3d3a25725ec9201078aec1990c33f3472d2794\n036dbf9a743f8821b67fe7a5efc462f9d2f5eb56 60669a1d54679c095fb99870565beeb54590b482\n5404563b289806941cbd43e67a21bc8a15e04131 ceee33e4feeafa9a2a224b4d52f390138691f592\nf71e7d10f35f94da425ae26eafc991e1af8b9bf0 a7fa297db9daaf074a6d142f18e510c115f35ad9\n36a04d17d9f59bc4339a50803d0c01da685f3110 b832881284be316822e52db0efc94123fa747e8b\nfcf891729c22e1f2014942b61da8476a1e551345 7816b53644791c3c23fede32f03660f3999167bb\n6043dfa70697c52972ba19b34951ba86e6d8599e e7a4a0cf93da33d0df617a004f5907af76ff1c9f\n75c9c57a2a79cbd4004f0f3196dd3355da991c31 9d7a8b7fd04d71513d5255e92e5608a89bb41394\ne17592981761f842753a5fbf4bfee091e70e5daf aab766758726718e26c8319eae0926f4e49c865c\ne0164df841ffb6252996cf9d39c36ed7af158084 26d61ffbac090a20b8bbf08af67caae7e3b5f4b1\n0a2f8c5d898aa44a31d0ae50ad1e849a556a5636 394b62588559bb779189d6ecd2f65a1f9b8b3bac\n86df8481a7bc86d02617082bf3abdf1407de091c 8db89cee01bef12a7ebea615b546bfaac2dd7fd2\n01bfe865e2d16ba4987156eed3d9ea72e9bc86de 61d2684ac44c167c36e73e7b02678bb844f0eb19\n7edc43715f566bab6b4c8385c9e9fc4a547e3a6f c546a7c40fc7f1c48e8849846d967bde319fdcf3\n894f6952638b7e4ead5cedaf037ddc6f73a35b8e 633dcc6715a428450b14ec4d14294ebafb639bad\nd6d70896b415bd325dbb4ce417ac98797d29c79b 84750504afa8f2901708890a1cd93c7f4f19c649\n3080fea48781b6048efe09020e4edf7a1ece79e5 3c954870eb689fb71cda49b2e91682d5ff477a4e\n255574f155b635cb3b9cdab7272e7762f2c697f3 3d82272d9d65d9d8853640f800bf61e6596835ef\nb01dbaadc2b9d9c58e8be763cb9eb8d3daa520de 4f94170ae8dcd6d38da08ac3650a75f96f8ff5fd\n39918db9bcc5c8fdd8d9370f22a0263e9a307862 d27d64498ba6e05d8db786a54a788b7b40452c34\nd34cddc0beb692904495bd72653efc5d7ea0fca8 7e15ce74709abc9c092c05b3cef4cc42eb74039c\n64e764bb08e25adf2950b1c29f5565c71a53f973 2ffbb7b377d538b916e0654338ce0c3cbffe258f\ne0075c7f889a7bcb7f441597336a2bffc90365e7 65968540188f0fcc3005d19592843fec7482e2d6\n3ad13191a6b760a9be8ebe5160a393372e941807 4256aea2f50bb567c4ab77b32c8b94f26812dce6\n9f9ebf45aefa84e27fdbdb29773a32fbf3495381 f2c82e8b80fe0e9397b9c2e4acabb15b108de20c\nba113aaefab0d5abf686abf8b82978b3f012495a 571202ecd77dfcf021d3f9e3a52405815feff4b8\nafbb04b90320157ad7a87e033e99c3ab4feb2eac 31035082284c4d75d4f6b33357180bcabc6c8652\nbcd96b5b641522e6636981f3f1d0c25ba9a39026 0442d7d857576b5a81404c9112870b156be00090\nbfdbd46e63f93d204ce8dca1a4b32b573b8af3bd 61fb8ceb5d9a139628fad309cf4b8cda897bf2a9\ndc1851835035b94e1e58925b68d033add920f79a 0186441c135f68a75f3eebeef393d430dfbfa1ed\n75ff4da1f7eaf05912244dbdfe2e62414e622227 98a62da81d33b28ffb59ef8b26cbc25a02ddbfca\n15c62b4e3d87f346349a79ca8c253b9a8d0a2994 a0339267c3aa70f27bd12725b684bf7c0b916fa3\n9be50116011216377e64929ebe3943b92b2f9d42 81e028b42ff2b651277d289d180fec335d1f72cd\n54ea27049cfe47474629b04782268f1a237e1016 5f97473cccc594ec84df770d6fd9b2ed348d4019\n3851267fedcc1c3ac1532a8b3ed2d3208d7fba43 b3ed07fe1b31de61e3fd201625939b6457ceb2ba\n19056ed6165d9a8e35e887897e214df7559be7e5 025047683b61e2a15386a975c4bf494ef28f0f8b\n50f8cc34bdc266d29d27f857aca622cd0107fe34 686c788a1fdfdc8ba7d5029e8bf98335c9f976d0\na2d07f8527c2d728057f0f1d5dde747b2085ea4e 0b6046f9d51d51bb8ceb2d871d609aa2d26c136a\n63b834da1ecc73f76c4241face3c5935a2e9acdb 90c6b2fb5a9bf33c96f4d8c39d2dd0b07f4f4ac1\n2fda82df89a6d8f7f8438c1876fa646f3a7f1e33 567589018658dc69740c15661f7776c9ea901f3b\n9629e7f122d96e7b398ae28b853db1307f1c419e 235325df74d632a60a38bae04e17715a5217f125\n03cfdf58c3fecb16818c6b625251dd269a7e6137 2338265a8998f1ef5453ca63809a84ece9101d3b\n55f5c7784a4229b64f58bb768cab5ad1aa226cb5 5d5dd78693ef383adf4e3ba94c0c052a3faa7417\ndf1b785493de891c6ecb03d9605490fe7f1841f5 408ac9fba8788b540b99552592ca0bbc051e2f2e\n7612a476357ea6d2d3670f701b9e056263fd8adf a4253568c65dfce03e4929cc72b8242be8f19fc2\n50ccfc52246febcf5a7ae5b22eb9a3f7d4171b45 a12060789323b63d0b0ed229e88ffaa2f1a57f86\n7cbd02e1a177f7beb748eb7d8917cdbc97a968d4 9206359fa9fac177a684cbed273c7ca24c9d0197\n4a7b5ab10f945b646f3482f3da48598823840010 7cb1a218c6d1163db6a1bf5af7a7c0403844e23e\n8016c4ec85d443cf00f9de249ccb5ea9853933ee 44d7d08045baf38e3c3b7f068cbd5e5c9f29c2fb\nfbeb5459805d76308750a385e0087af8d8b277ed 10b7f49f934fa490132dd74cadbab15d44900abe\n1f1d784b8e6f772390a950118121040ef61b30a4 746c39972aacf9456b21608dc8ee3781da6d7f82\ned9c615c60a5d36dcefed3d4f7f885e8f6ac620a ec7fda823c9080d0710dd107009bcdbb4e6664ca\n3873fadacc680806665b3fe2683039fbec0d4f42 96f1965630fa60ecb6640c00854187d5a2779c70\n3ee59e6603b557a7f83c4be838615bf1f17933c7 0988c4aa4e9a985445de3e4af404325282276484\n52564786ea46256ea171944b20c1b54141484232 bb76925415f223183f37448d61fc262eb091c0c9\n09c56f634e830e9d08007cda9e8359d60c4c1c3e a5184be0005c993d9057049c6eae2cd10182e156\nc71f79fff67bb265c85885fab9edfda9d402d076 71ac2912435409feb04db90ad972bf96ee43a34a\n03ad33b74e36cb20b4c5fb47f87ffb33008daead fa82217ea1fff94de681f15efde4fa126a663850\n7f6f4633989dfe34534901431bf6c4512f5ac3d3 b921bc3781e3bbfe5b431aa45292bc51e4efa329\nbc21cca4027be308e5275ffa70035e9e62e18238 130e20d20738ce70fcaedaeb9c8de20199f724cc\n6649f94e9bd0efeda3cebfedb58eb026368e7fc4 feee098b3026e708d2f328e3ac9ac8074d555298\n31d7c0fbda56cdc775db72a5d02bea56c9d78c95 b9f09e876bc833dcbf14644d74c33b4a358f1f67\n3a80e4d86f6f89b47885ea203cef1ffd89429ca7 3e7550129e2e7911d5ce4c1e6a6900b650f6e0fe\nb178f3d6711987063b111c8c252bc468abd807f3 2d6cf78655b44bf0b8c9b9d3f5348540de0c5e12\n29e345da7172e500949bd58e46f3246f0b44aec2 1ff75b46898f188ae7257e33b3442fd623dcf37d\nbef0329d8a67eff5721fc0e67f4d4fdf71c0fb19 f410867946205be0e806ecb98bb469d78a9fa2b8\nacc03fa2418c9e9d4f6f645ba959f474e8c7e310 626b7294597100ae0028609e1861372c4e754304\nd7c0a5143e0812ca38823e7a324c9f65ef8a3b68 6f9659e979ba8633d4655fe083446480cd8348b5\n71d5cd88eec6495a50bc79ce2660ee2b69bba324 5021e3b09aa5f0ecadbc279323eb08efd772d662\ne04eaba634a654294757ddbebefa05e811f2a081 04efb70596297bc7919ea23664c429ffb8aca5d4\nda452cd1b49503c35515f7572e37bb0024944e5b 2aa4d33c11d56eec8c5ca539763d9266ba9e3aed\n513ca5a224680edbd1947d6d7879961a074ca8ee 57ae90c66722a5ca30ef69e257b076259306b769\n2de36d3b89fca4f8b30601fa99e90973598a90f0 010ec73702f61c9ce40b3b3557d42d2b9b8fd1c6\n2bf1920c29113cc1d476008c411bc52047b26a9b ff0084406af5920fb035c763211e2c22ac54f7ee\na25c0bad61112fe9d2cf85731e8bec3424591f56 5f4028faeda53a275515f617514ba0138299dfcb\n35bb5d1fc9e465d507aa2db3cfd6f9d49772ca31 4e32368fe707c06884d37459009bf393a0aeeb15\nd4e905749193992d2930165e2fb5c92c4f631a7f 11724fbed143078cbda8c11b5b4c4a68a6b83805\n78bb232b8ac521f067eb04acaff7ed35da679116 8344fe48f7a6d5a7d449201bc0e3f99a3f0d0dee\n427304f0301372580d0c4e88dd1646b98c4d27e4 50929bdc41183db66bdc48a309964319fb4aeebd\n29fa8a560d82aed614459dbbaa5192b41b7c6f87 58b8c93aee225844f6fdb890eb6e51a585f6e1ac\naa2a278f10466bfa4a4ec1d7bec0f47c9f420ef4 aa641bfabb3caf3e5a0514fa86d69b2c5572bb71\ne9fd623d7e60b53a63a050dd53114e9ff7563768 e470c2cf72de9a970c9bf55ac00a20b1fb925ed5\ncfdacae8947297a848f85f3e5ee34b1cb99b6870 02c81a43a6f7eef6e98313ab9967606600401b31\nd9754d4620fb1c5d08adb625d54891d7268e374e 78038a027e01618c4bae375433fea22ec4a62a13\ndca30c3fe9ddd213100362c9dccefedd1ebd23d1 6aff3c95a09d418257d17ceb5e75cd4b8eaf55f9\n1f7f320ed42da58efc70c540337e317cce22aea1 7fa1b0d35785c6ad7b6bf33280b5bb9bd4c99f32\n06dd0d72d23e3c7b009b041e55244db301c258e5 17ca8763118022b2fd4234c4278752c34a7f9cd6\n383cdbb00bb74a69db9c4a6cbdb8e39b91ae1be7 431ab6aa9fa70ce25ba8d8bc595508c164c66282\ncbee384bbe6c35fffa224c81aac725631de22986 12fe581025d5c514c8a9b889367dbd84c405321f\nd1a0f3526c835bf3d602a66e99094dc534788c17 af5a4aa6dc4e56f6ac4a9c61d9420b4dba2a5ae5\na1d12be13af07b9816a0080373f56f9ceeb0d05f 44b8178c2ff415455a56c3d2046b16c2d650f18c\na78dc0dd79abcdef054a4d845399cfa65a0b28b8 4fd1ea1c93bcab7d6605e27126f569a2c6801e11\n2a1e1609a364b1ce53d7c5c6b3c71fc44d6c253d c99fe9bac3d2be93099b8f4dc8cdfa17296c73c3\na573d5ba53dbfed2eb89e91d3725a08cdb674c5d bd28e48943f35f22dcc10126b041bcbb2d721bff\nc869c401063e345c56e2f9f522bb1cfd42874ffb 2167638af184edcc6adf42108e1a08d99d208e14\n68e2b105705dc1e3dc6863f7c8a3886d56b03313 b3415fdc1d9a3e79968ff244ef39e0763f7b0d77\n5dbeba31b2593f3f55646b5d93ed425ae4dfbc7a d8fe36dee235e29821d7a6eeeed9595663ddc204\n6d579c1f1c1088af5cee45aea39f0397ae9b11bb a038550a91b07be6af6de0df66ab342c4b808674\n2cbdcd78597bf45640efd7781a80e62330557c09 a343f4027a87c24b51ec9fe443d3f7087aea0aa8\neb345317736f530ee0fc5e8061a0539ba9832b66 ed2a381a1790d993edfb848ff14984edb53d6c41\n3e7bd972b7fe66f8df84b96d4c7eee5e66cf1999 952de83eb141baf21ebb80ed6633fd1219c50008\n385038e8c8a6ba85f70ab715ac3b529149069c6c 85ffad6ea4a9729b4e6f4feb3090ae9f16597cce\n10bffed38aa9f6f9c0e813854bb652fffe380ab7 c7d04cd4bc43bc77ea23d270fa4198ca01b0234b\nc375f395af7851448233aa345780083a3fbc12d5 b58edc2998899490b5cb268834c2c4f5d057ca86\n04ad119a5dbb9e1dde2593bd6f97e117fb7da872 8dab0458957dd57c1b4641b88a0882f912a95540\n93870b7c695a4edc86c5cb6ca02a4c4b514c9c09 6cec5d7ad722065318d492963123e265a802d900\n7693287f60e0bbe0096c70393dd27b5d09dfe41b 5b201f3ddc539c34cf43269f02d2907bd1a0611b\nb258d9ea89e3354e813c38c3d88db4ba7db19b91 03cf886e98c9d510cba2d6434d35d55d9120a270\n069023e4f59cac7481d3163eaf636dcc256b8f1e de3266d9d83475a9a2493ba2bd2d72a65ddc1404\n33d42014a07f462861453d3c5fa74bad6f1a0393 5541667fb7c10c98282bcd8ca1aa914346442f08\ndcbd3e18b2011d4dea98c31060d022dc04775753 4a71be138df2628fe2d3f834b2e2f963563eccd2\n379a5f5add5125e6c6db863e3b8a1b5b6f34f766 2872c4923460701b7929fecba81acd69afa00dd2\n0c2509d45cd9afeb310dcbe663eaf2ae9d61f18d 7becb604bcb18cd5977ec41fc13ba4470fc9c9f0\na4481b31c00c38de0662536338c7216e732637f1 d1f4b1c16bc715d7494d300ec62b7f31b9a5477e\n0701432e35420b24943f3292b3fff9e77fe20b90 b698bf93d115c6f853f711064901f62f8e594fce\n2430d349eb21013c49d9e82154bc94ff5155fee6 cf810cd68f51c102503a7b3a15d3d2c71acc612b\n2dcda06075bb2a91f2f9d0e5a50d3ba11fd3c17a cc993eb19da8835a434d8a4d6d374335c944202d\nb973eb3b18afe2cf1a912d07365ccdb2fb30a4fd 51d9c98544d7fd91866a8ad98921c85c2520175d\n87badb3265ac82e6ed5244100a33fef90f1e4414 b98ebb02c738410be87cd0759697aff18d3b1a91\nfd115429925b29d300f13f3214442fc0f0f46aad 2fc1bfb550c33512faa3f1ebb42c385f7f414a8c\n61f632cf31eddb7a4d0f59f6e8896c83da23cea5 49fb5a37d7fbc20d486188f867521b005b3c0493\n8150674a7c9dd142948a5e7a75fb592f65f46423 50cc56100095842a4937eccffbd7ed5439bbfc05\n2c888e5140ece003d4d34151908267038e97552e 4893ebf26aa4e9504573da7764f2abaa6bd3a2d7\n1d6ed369ac08de8baa001ae014a7a6690c62fe36 329009ab4c6745d1a7e59d2693db70147ea778d1\n09f38804c909863b027b8fc655c632d3dc30a65a 9181276ba51679b2327bff7a523771c116be8f1e\n34624ab3bd28a48e792ed528024699dbc4867101 d94d5c3e7cd6ac221cea9731e2bb1de2f0ee7f6d\nbb3395ef7c8f136b6ea39a912303db9bce66fdb3 30dd7ceea6ce837aea4fe1614f09219e16244b29\nf540eab5277d7d38ba099634e211a8c6a1195a36 ff16edc5be7eb780f4050011944063e8d57918ad\n1edc51f25d6c2e81ffb5855226fb6c551a4c804f d39500ee65d687e8b7560544ca684c16ff9fa7a6\n2f809b5b8eb9958b3c4aa9bc51e0d16295403055 38f4d2a064012933b3996af4d4117bf6c5f97e6d\na4702e927ea83c233b974bfec69ea71b7e29c1ff 44fe66c485e4b2eed7a4a790ae919fd325e3ecfd\n8bd237f63d05a9a7684d7029ac713b2fb6df7c57 0326723e3699803f0eaebe8fa45e952b8eb65c28\nbd38c51bd81acb97551b947a28c06538b7aa3572 bfc86c2541d809d2e554863c46eb0b483716741a\ne6603675768e674b5ed80e90c06aff215d7d5e96 961bd0790a02e0a66f2d752177cee82d3bf3e368\n3b9e4cf77cd4781bbddc674d2bfaa0bd4c36bc0c d9fa08ac04251b1fdf3c075d83f4b2f0fbc853e9\nc065d7dd8b5478c2cdd2cb984e6b469b5baab6b5 607944cad277d3752e01b5f8af5426fc2b513c47\n2d39a0a14c3bb9adf01c59e66c2ef9a626993449 ea965aee9e692bb45c193c65fddde3f69d025338\n2ce96b8de405d1661163608469b6b7e5ba55f224 f5da03d31af29b0beaa7d21f30863302d36e8f89\n3e175aa9d597baad59ce3a38be76bb00b6d11b33 c7bf4f963a653d4f7781039ecc58e8e03c26a12f\n809982de995dcc228b4a57e5ef5e58f8dc6b39ba ead0ddb0f119887357b6712c8aa05b21e27f02c1\n86a0014c411d6f2c360234482841c9576aa73cf8 75ff621e442be2f569fc393b896e314ff9269447\nd7361d0fcc23bf210974f8b410615674494da1df 461982d76a73b514567e119ab9edd681c675c19a\n1379c8885f4a3b267881a33c614bbe09bd72f846 c81383c90196ff0cb93e6a2736f0a7b35697a7d0\n5d130809aec611ce4fbbf349ded2b9ee3f7ac0f2 8463d8038cb2c4314c65af1fbfdea1cf4cb3949c\ne90c44b860fba35315863e1b564fb83f71f34c2c 8c6c6f655eeec88c1170db9911ab0efa4df92279\ncb539b8a3dda087ca36fce23686ce6d0f19cf4fe c5706bee774b5ab02f6d5a1d5a3e0458d14aae04\n123b9361e36a1caeb888427c6d86608b4aa66588 445bb39cda71af44d79e7d9044996cc1222a3eb2\nb89cf22c7241dad645e01a1c96d8c5dfb49a302f e1ce76c81c4e9b5d2c317e9c51b9408dcd1ea0c0\na1d678ae3ff7624c48e2b825fe4a7b2c5201143b 79dceaa329e0b063f7e1e26bb8945e4fbf9f8e48\nc0df83f771b7edc7371dedc924fa91261953eccd 03da7885c1590c55c54c0758f94c2663fe68da67\n96e04873c2be7b473b3f528ad739db63446bb4d0 f74710afab3c909f846ea711db2a02343440353c\n8b80e2ac9e2301d4b953b49cc577ec4884a4eb31 b5adf7b32a616ae913bbd13a553e0fbf57013c75\n2c5fe24a067e9d0d810640615dd40db53c21b40a fc16097fcc5196c0fc8ea63b74b8ac9552b94398\n2bebdd7d34da58b6ee0a74373b4cd510971d2201 be3af41902561ca6c45c93829a9d23173fd2a736\n075d402ac0b9eb4803b409ecc5a59888d9aff218 db4bb5d1e7fc9bd625ff15a0deee5987ed82911a\n8164312aae23236383951ffebae7e9fe84eef214 d36c3e7de30f831e960113b1050a6ed7a3f9f1be\n37997e853dedbea9eed01c93544a364525e69452 85e796a105666ffb13f75815aaf55e107b4c21ec\n6c43b1da9ed72410f9f4c89e3ccda8c89c2cde6f a53b518156136e6a0c6c58f9bd31957b44bcee26\nd47889155fc4720185be693048c0e98847a41a8e 3827f8c313be9a52146d834f0dabe1f2bc381172\n87248cee88356141bfc7b390eed6277ee80dca59 19dc54d6883615d082059eab2c9daf810818d03e\n179d36ea7d2b9ef931e8822fe102b6b6002b4a96 330da1979b7c60b8504e02a357880b48a7eeba22\n87b5888990b620745ae21976d7c4432e5265250a d1616c4f6a6d261c3ca5b6ee87f72cd8967f4041\n6aebc1091a5f6cc90cfc53e278998f652d85ddde b21c8e0232c25d9c9b7befbe3be354d70b634df9\naeee84f4cf8a45fda66fd5d72aa03fd715728617 899bf08ff3c86f9dbc30a1b83b065bde831c47ca\na5d6bff0e9bfab581a9d7e21c30bdaa510d5bdea 7802bf5b6a8cdf58c16b7cd524520254d6dba15d\nf31f705a2833bf5657c48e3bec0627a697c1eb26 6b31fe76a4fbfb896647d0afa093e0fe549e2252\ne74f96f75eee4a5fa338b0b6b88159bd30acbb2c 35b43feffa4f310ae779c91bc797a0840dbd0cb3\n3b73c499cc18fc757f6d186721ce0ba58f744c6a c61980419d8f5a923a2b63cb64c74d44363bcc19\n27f3aed6bfe8c69a77378a83256974ab2b57d75b 8c2dd15b04e414df99da6ab2e802392a93019a06\n854c59d660175fc6017d4924f48e3b8d2cbb3d55 2e549bd5af2c30777bee1704e5affd4fd3c8d213\n0500dd86115a2fb4b429f040501a5553e1a3e639 ca2252ee683fec450dc80b6386b8ac2922def975\n176d175a6a2e8fdabfdf56684913c5059546d030 4e72f811bc2bdb8f78a449556a6e6746680092ae\n9823bdb9d142eee7d1b561f9d63de24861a815e8 a7169b5c16b6a2ae7547ec5f3905e96633ccb742\n701acbc4de728f9f818cb733fb4e08fcb3de2239 1b42b4f1915389db463ba14d1148cccd043a4051\n9e6f2a6bafbfdacf18a7ee934254923b383cefc8 82da11953e191f8cca9baba1b4895d2040a49f02\nfd16d44df88b7be040c2125b27b48dd19b3cdf40 6e8b194b54fcdf01e5b027a8edae22ac239bcbbc\n1c833bf5a0d153c7aafb3d1192d957fa14f9f525 c80423ec06b1c1c991200ffff9d6fbc81472d5e3\nde83496adb4511dc0288cde2c6cd5ce2f991450e 011a8d270b52f12d73152c12078bf1252d52d28b\nf7c3f60b0c916ec138a91f472d9e5676c6c887ef 14c892be994a4d1569fb311efa18753becf4cdc7\na96cd3ec1f2fa002ca4bffde5abf1df8d80d9ea5 cc877ebab42fd4cf65cbb0fb5fabc33c8993df56\ncadea391620e51c6b93242f89cb24331b85bac05 23d9ed2d22e8fe9fc314674462c94b5f87d3313e\n5908a77ef3131c7f6ec73e1dbb8e1dfdaa9a8a50 1f8ebb8cd61af8249e0b9f772222ca3eb7886e14\nea96d2ec173f160785c9096b8ee6e70424c8d32d 6ce2716a02d4cd21507f12838e89106590ce8bf0\nabd47ec872b9ef81c8cff067ebd0994699c1db42 0e16c7febb3a2a9b815eb8df4ad719044b29783f\nfacb3398b1ce39d5cd83258aa2e4b10b41161fe4 f6e43d4d7881e65fd8b18dbb1c0906cf46f489e2\n7b2edf5a068f6d58898d7c3117b8dfe62bc2e07d 8298ffa818d7e525a59f74dbf8f211dbfb735b9f\na5d52bd7f3644d0b488b7277ad8a611ebb70937f 87b813266a57feff92962f35cfbab116b5b1a0de\n2df6c761109b78598b1d8345e35ca0e22bb734d6 34446f288b85dc3dd02201c94c7c9c3e961cdce0\ne3172714d5da3642675b02c62bb09da2c6ea8390 1b5e2b2643dc902302a7dd7a5070235d86af89b0\n6453fd8db0f807521aa65cdb686d692e742426e7 cd1dc3cd831d61c9bc8bba7dbfb096c97ce9687d\n3f7d091b0f7da5c081bdf145380468ec98b602b4 84955d746d5a203cca4fd14becc74b8a488b9b71\n26e16025696c5f78bdc0970d1d099c0caa09f9a9 890e1ff6840cc85d1e1f5775b54d5e49a62252c5\n72803119ab85c4a1e6b7e7e8c6c6120a0e3fc51f 50eb2e09aaae2d08dbdfcfeba989c53a82f1039f\nf1d04c6639e8e82956f073cafdd6db3d2497a2d2 d5eea39b2563e85bdd09c7c124715ffb0fa35eaf\nb8978fce03d9277c1371883348990d269c175435 d2b6d998e7755f45295f2af9eac33b51605432e5\nb47b94b4f56371decb844b2cd00a276bdb588504 fa5623368fc12551d4dfd0ba454ab984871991ab\nf2a4fe5a21049871a52f679243b4d39b35a7a65a c09b3330f30e87d8ecad8328787425f14041d05a\n8162cc3bd8946394e96fdbb115e156ff5f624378 d7ea034f4c6ce8736817c5b4463d438910bb676d\n46888c3a332501d5241af0d119a68c939521944d c7ece8398152eb3ce7ab578359ca76b90ec2ab6e\n3f423e1ed168c6ea559d0d8cd1447d1175d5e4d6 74c8ab3df2b656ec3e538b7810a553ac2efb86d6\nfafd5c5af15363931285747729a452f16d0bc3b7 d61b8d7aade0f3ab0d570290e310c479a07214a8\n9119c92e90d7dc291e0eac3733ed6cdcfd57d200 35e5c6b4b21c0c6f38319717f51f542478decc04\nbb69f1bb9dc69afc636c84d3165fb2f3baed837c 34f54528409ee92770ecf49c0a28384493fa1fec\nb57136c2cac90a7041376c615033b8d95c76b22e b4d74b7c63c0c8fa331e778191435a24c52c8c84\n0b64bdcba955209a35b843b8ecfbda37a891a869 77b7e86254d180f6768028b3b5be21f670af504f\n1d84cdcc89498d224164302abd0dcc68f470e137 f48afd3bc89ac6bec0f8ba3bea12af175182e8d7\n0cdfaeed87b975af341f37bc78cac6a0f9878d04 d4d6c3452eca2f2ee737431e78c462d8bbf08368\n40d215e8f3a57b4dbd52ad60db0c43f5682c1e05 5ec6633df7456fbf00c572979ce165ad999fb634\nbb526c6d9a8d62f6d5bf70930f0ac83a4391a7c5 0e5928b29017f11666ecc665407b5e40b1b3055c\na239405b4b4e05c3043acb1571c38e1ebf17611d 86629287e650eee84927e15a93ea0d004101e328\ncc61b92ad6074308928b51bcb90b1c0cf7fdbe91 654773929fac9ef921d4b73d2bbaa35b9c788d69\nd43637c30fec23a7f9cc68705cc93ea8dbfb7bee abd76d443917b8a8505e0057340f8a0bf1b4ade7\n26225b6cebe2581b90edbded98155b348eb44312 1d35ecbf41115123a319e960fe23d8c2de49a4a2\n612e972dddeb60c002022386421d25e90b6a6ead 72a12371633d6d89c63f42fc422b67f079f01469\nb1d2b02d0bac2f87325e3e3c03cd1f07832ba79a a550a383a94bcb16d10baf531ceeb4329b1d4dd6\nd4d9880cfccdb8e405f5617c7b3e1c0d46c5f0b4 a63b58419e0323457864c8e76b8efcdbdf600e3a\n33dd8a5e08956daad35c1154806e9b95ca3a4622 40abb9526ce20a9aea1da5d6935b2d6f11fb1f13\nfbf1fa87c4920f054dec31511e7900de9b937b7b 9547059b08d916f69978079bfb7abe6a3361a949\ne6afcd6f01c0689b8d5161aa989daecb1304f254 aadeca63ea425f5e762ebdd8f5206e5b0896f318\n1f57aaff2c386cc607c0417e5301b535707d08f4 c0c73b8f93165b9bb49be90c73b3b7a7589e578b\na4ab4fa724a97b137343af17eca1277a7cd19feb b3acab1c25025ad349466ead7f48e26e541bff13\n63d350cfde9ae1c1548c2a45e4171c870b5af281 cf9fbd90031cfa78c352777ba73f07a92fcc017f\nc36cf0f6307f79b99a35f30d06ea44ccd9904485 6905798e7dfe044a97e0864df552a8d0c46d2705\nfc64f394d7612863b6c2e723828e9865cb1d7f43 5cc348dc8e270a9217129c2f4218fc878a157094\n814e7949dd73ffd842617e20dfd521df95fbedf1 70369147f369c906313af318a112aa654c792a08\n73502e0bc88f2665e756b32fa4d7c5ba76d95e51 f5d0a911392f05e8de3d9e02bc199c6f74898635\nc74811b0660f536d4ee67fcc4c90a5d691309ebd 9f17c91b345a4ceadfd614b5b32ed10cecc3f4ce\n2d674dd2e8858efd1ab20abc8616356d32ffd448 a30a08db17dc7da92c323e4a9ac4154b9a30808b\nb891607f405420dd0ff601b50c4d8ebe8436a480 c0ff125c5e60b870a16ba49d6a7f2daa00fc9176\n20b5ec0cf2792d3ebd1484f7a8ccd32697ec1082 d925470dfd13d7229c9678f1ceafb4e5799bd456\n8c3ed92d47a4418b2ee16fd9d214f9937495e909 5a6ae86c7c70416bf5781112baaa0a16adad0026\nec2e7b0aabe90ae6ad3f73dd0ba76a273cb4073b d08b2c706b88c121eafb85926bca70528f8b9e6c\nb4eafb5986be118d74bc8dd68f6a4df4298f43cd cbd411b9cafaa156bfb2666b4d413037429e730d\n21becb46d0459f03715da3a94584431d27c71a49 7d72f70e9bc0181b332bbdea828f3c9750a1b34d\n6d6934479fd18063dc62a9aa2ef9ba73764d59f8 1e3f1552014ecb43fd58893dfc8f3d3ca3adc4f4\n54a976b26b35368fbe376c00f5118e123104a1f3 9a56785704b669266581c23d9133526cb3668c21\n20ae58be2d9e58381d2c3e510603e2d87771d869 97ab5c3008af689f50412fb7b9d64dc456ffc26b\ncbf5fb7c324576e25bdbcf049f2d55e117009042 fe523fde12bd7260e83bfd786e092ca24d368c42\n4b3c354b67872d92593cb2a7b52be06921c2e1a6 8aeca17324188480853833a48890d9388e2b0ce1\n82ef51c1d6f1153074715b76dffe2acfca491ee8 526f1a403fd88c0686942fd88e8e0b18af4b5813\nd00c4689916628d18a6829a23c05c8abb924d93f 334cf6cb8c76a0728f5b44683919992539d80080\nc5f845840dc64811051bfadbfb9fc5c3af98658d 67eea12857b99a04c7e2340128b68919a2c94696\n81ab2b265d97d199773d282eaf2012002ad95f5d f70cb89156f832161490ff1eb4486135ade74ae7\n9c26726189039c6b65e6b9642d7f9e33ff23deee d1ea63298f8bea6364d2ec6a25f7eb8059d56bc8\n84fc2376ad222c6f6dd637290fff4f55070044f6 20d375005c3bf0382532cc6090465b24140e741e\nf7b472cc63860f003200181cb438f58e09811796 bbe61041fa53c68b6a251289f5817e4abcdad56a\n1d67cf3ab0df669b3965b57f7c1782811db225f8 f0c000dc3e1b354192626d0cbce3122e052dba55\nb359358fa36c93bb7d7298a47ee24569acc94b0c 2f0a24f94b3911481ad971c2160b059e57a10bdc\n3853602696edf97c5b3da7525b884170a5bd625b bbb2035c848c755d089cd37bf67d2d70daccbfd1\n71d05dbc242458d0e8419378b2a671e46c780506 33f43d8d76272ab00134fbab625f478adb087761\nfe74c7c5ab0c1c3d050c502220cb3d65fd674f64 b13a2acae0c32662e2081df57f99d47c2f591f72\nf90bde042d0928248ae4e50d9528639f64719781 08d4fc8dcf264a289821296036d57bd5a43d2da4\naffbdf667121cd71346b480ea2d627394f2022a2 d6bbdb190dc5e2f182222f3dbf613f831b21e1f0\n22faba94d2b25f81d121f00098418bf09382f967 ad225d6909326b5b6c6e6fe6475123962f121bc6\n0afb213969a4afa3389df772aa6e31c953aa54bc 5711757ea98efe50cf6f772ff3f96fd74185f88f\n8e2e78b4880c9d6d0dbfd81d9a13437f86e21c98 94bd1082ec51008a0002bc813b8be0bb6b5ccdc1\nb777c92b1faf43805c8ea978733973860b1c2e90 5aa51936ad822b7e881df99d44551c76b56e0da3\n47cdcc52cc94c066631eb20435bfdb28e09f2dd2 b8767242cfd74424a26e58460fe3c5aa71e9eb40\na338b2c53b6f55fdf416fe09c95f78f69f1dd89f 1746f806e6f4aec6b5e96ec34c8f0ff8d81e3cec\ndb4c0199811c420665cb4a44e2d4eb57c619badd 458d27b15a58cadc9026b104d1033db168ae6941\nd80500bfae2220ac51de91149a0da79904b3c5a1 e9bad781d3113b48008f20ffe2a2a159ccd2c791\naf8b1d27dcd9c20da04d3a2ae5d00269369fa358 7bf6f271d4c4d8d7e7ca65bd4c28ddff995c0101\ne17bc6ff1fbd9503405274a797dae8845caab30e 2cb9e3cd08cbba6a92085f6150ee2196e22be953\n85585466567fcdc81fdade25e84e3275e5f53a89 a83e78e7813ce0ec64094b04f6588f5df0b52215\n9054e0a3dbc46c8901c552a696b9a866bf0daf5e 2c7767c761444bdfc671b9169b34fa400a6de39b\n86d7d2282cd0f7bcb34baba72823755324807e63 533f8f8de5a2881ad9b39257de7f46748ce4ee49\naa841907552d4c1f7ed90f00524a37cc525d2e76 252a9129a601d1c0a569f3ea748972a47ac36e5f\n77c9957d8f4baed41b2af79df695424e86f622f9 02885e823e73af394ba8b7c029f148400f9da482\n1958bac349fa89370ba1d2eac45713e80ec2ef73 c19acf3c09839aeea6b0e4165be0a5dcf24fb4c3\n5f27db5c583efec765a96d4092dc3b443e5498b5 36a5439a429ae53c9dcf119ee5f9642233e81851\n5ee28b6a650af2b3d70d8d19652a09bd255ccf69 6768233b93c6190424f4a21110c6bbcef1336c3c\nb826ead48e14746a261c8033bb63913c22706750 1579d7cf6d2eee79950fde6c3930879d6da24316\n699b557b4d57a3d3263b71f5db45227d48dca0e7 9de1ea6a136672f71ad8409fb47ecddeaf68e5e6\n45ef99eb78a5f3ff8a7409ebea9ba9a6f2dac9bb 291bfaa5b3b9b35ab2cc51148e8fb8a7eb259233\nf6aa71083004535f2a7aa724f3c952c33ab84050 58f307ea4b94d9cb4f3f149572ebfbaa29081e2b\n79ed37a4abebfd1297b24b776644560c601ad635 32e426778d11e50bfd0f8f93c2a219bbadb48291\n4a4d4d8e0075da3ea41bcfd0c3db459630c3c61b fc3252c3e2fb06f2de86945d1ece0d4add84ebb7\ne158d0d2a6c1e1e0915cf5a8c2f109e84c85078d 127a6fa36934d4f4de119fae6d8f6dabd6a563dc\ne42aef28a70578eedcd113beedad1aa5deb82f73 e193eaa578c6666cc217990d8437a0fdee76de85\n98a6abdf261dfbf38520c0b871ce1e274d039cb1 814b7103295bd9d66cc4e74139c2818a290e9398\nf191c073892be3c185f4f6c0abfa482bf71aa611 a2d2d8439ef05fc287f53cc530fc2bba5c7940db\n7f1d4db8500759134cf5a667828d7be59129a934 21823832087389bc12f8349a50206dd61e275aab\n9116dc484e4bab17ba80d0d1d2c05feb911959e5 e214f46f309f51339d248feb4f7c1a8ec8f3502f\n62015b05c3027bd3ff57bc56a36e7f9e11fa37a3 7a7855864d23904a63cfeb75659b17e8ce710f99\n4e0d34dc0cc2a79fbfeb5df9645ba5a1c5d461d1 59eb4b415dd81d3fb2587b18931005ab6b93a39a\nd3ed9c229f88466b25c2b9516ccf7764f5d47480 c4b3b2e395da0e90f1c04828a50316e521022078\n39e8ff22296c7b2e9c8fbee624b5ed09e836c494 96e0df459b99e46f9242c90a3f5d3764e5c6e2e8\n1ccf520007b4e76bca2ad77e9983c39d4f4ac1c0 7ad9905a840f55653c930d774f7ae1940a56e1a4\n27bf11e4bb5ff2c23e3abac848b055b25b66af0b 7ce879218e66a95b7b03cb0809513eee19e072f9\necd037d93af2be651357d69faf7542e00290ebdc 2d2b92069046850b30dcde71387d4313c833b0f5\nd7a43937571737d5c3ebe4cec6b13b470fb04767 b8f42e3e50cfc1934e4384cbd9c02ab3f8872db8\n244294b5a4d48d7ecd387a9679a7f01c808ada81 0504a2b9117b7ba974a3919f4ea6b25abeb9cdd1\nd22e07ed86a9f9d02591446c2ce6408bd95ca50f b177a38ea8f74f3ce892c6bf073e1a63ee0397ba\n0dc53e2c9b47de179c0d99490792e8e40504b843 63ddd85d23111fd9c1fcda6bf9b29d547ff7b859\n44783e449dee154c35cef617b0867c4c6f4b4c1d e74811fb7c1b24bb96fba6bb40de7ee1fc9ba270\nce7203537e69bbafec90c7ffe5bf46636224314a 379fed860cd270407802e16d3ca7ea7f64202a45\nc2d29be1afe40467166827ed6b4769d3d6e833c3 8f2c1e4b30f276f687ee9506718e69565319bd88\n7bf79db2e1a2643a16a890388f79658cb77dd28d eb3449d8dec9639f98dd01216765b1fade8685c8\nee06da923b5f97c11d405e5c445824ca74bb5063 86949edacd7d7d57dd1040fbc7eb122e6dce3bb6\n41f7e0b7f943705df49e4677798b531b095f3bb2 d1462e6b190c8013b123c4380c606e4723718b08\n0935122aca41eb592152f56bf4ce18dbadf6b23e 3fa9283cca3792674a1ad43169958700f89f3939\n461191c5e355fe434935c3203496ad3cb1c33f52 9ee2ca0b0393530a0db87497322113177099afc7\nb344a21d324c34a1ae3370cd64d167def1306fd5 26d3ee854c5c96c8512efc3672ce66db9e5ccc46\n2fd40717f75705377c52412e4e6f2304251a61f2 1ae5cba3b0ef7adcc21334110c0ffae1045f11ea\nfe4e9098fc53d78325f35634f1f47c8750ad3131 1fb19bcdf3ee0a0a69ddd2e17915824487fd9676\n5171135b2a65d8b01d087e811642d433f6b6a82c d724898e1e921558c6d11a6a4bd391ede1242257\n271c5b1590566477a9565498b074aa89c967d887 646442e8613eb59bdfb0be8083afb51a74259ae0\n987cef948a46b3272135f68464d429c1375cecc7 86ebd3bd9d94544a821ebb44190cb41696520a9c\nbab9a0aea65c1d043a9f898caff5c2144242abd2 431464d1defdbd4c93ff2925250451d90553199b\nbf74a01c83aeddc70204069eef11e093e63a66ea 8ebe499043a1484b14b2318b70fbfbe49e6eaf30\naa5caa592ec54e2ff18e62b8c7c8329179cfb96f ecc9f19d94fa408449ead4dc3f35665ace05e288\n29758faa6d9cbe5c9c72931764a86c366f7f2ea4 5901d9ba0b5d051ffdc3945dbaade4448792c935\n0775bd95fb00ba7f60c82340856aebd0cc86af97 8b4b58eeeb014ae9d8378ec1e7e1d5bcb7501592\na7e1bcda2862c133ff25aa7dec56cecdd831637f 27809f0f7003bd4b0a15f5450cf1907cecc33813\nd2e0b1b589cd04b0d516a068d20c8f604fb40988 6801a5cab33575509624d00c0d5fb5ec9a0906c0\n741ced0e3f23e6d59d89a97760d61a9a0e26ce3c 4c40a5b30518005372973b1a01d692c921c6d21e\n3eb9a8eaa4b9dc7a8f21110856f931fdc0d3816d 5f37415f70b16b03ca19eb5859a7726b6a9b9b5f\n0f53029e409d3029d423a7793b42c12e3c73d84b 554cec0cb5564d2abd6f6d32ea27cb7514e4996f\nb085b33a5e72a2a697322787516fd7ec538a9f45 4ca3cf9f2a3bd0ce8eb68197ae5298c76c15fa57\na9c3902faf64446d66e598b65a28d08069f9e76f 21f396faee19060a141d45e75ff4a2aa68f3bf61\n6e710c56ffcb4657c161ead14c386124c4039f7f 97f17ccb440c16b1fdb4b8e67857115f38ca7704\n10e057958b208bd033a5fd171b2508b97be9f366 755596822df2f03de42ef015682bd7b4a94e3f08\neabe09f797e6ac2d7702423b13b5dac55c143a70 e32393eadb0e13c8a09d6f60ab787ebc89648dd2\n74698156c457c5b12167a8ae81b201a0974fc2d3 004e7382d37fcddd965bd8fa007c57de26dfcdac\nbb37ef7f58c15c91bcfe88b4b2987c2cc7010113 a9c8d3948e1384eb7ec076f8de021804c220b677\n73e0d5d47470cc5b4800d2a81868448ba411ecb4 4adf3c2688336809ed07657246214fff04910fe0\ne9a841236c31a1ae4a017fe07a32f5e05a0edb28 3258d1a745930620659be12f0d0f9f10f3f38ba3\nf9ba29e0fdd83cff6b9c4762ca05be927f28e775 3b192d13fe282b31bde6decf254921bdc801b3a5\nfc2da3187883229acb11ea1fdf7039863d5985f5 a90a80e3ae4d5028c50b2799d607d3d01f341f5c\n3c215de80a9f4094e4fb605bd97d2c5fbcd82655 f012ae1e7e64e14c0e0271099d9bd663cf700f52\na65bfbfe05238e09ede48aa540ecc80b90ded2c1 aa78e4c056eca8d07eaa5e087c307e6cd7710241\n2cf18bb1476eb89f63ca9c30e0bcbc02681f8844 3c7c833ae52c357efe988e32ce9c22a08ca8e049\n0013b20902980d51b7b7838e06048dc60dca49f0 38f80b39f8c729becedcfe67f7baf020a1e16051\n5d227e0c57f614bb077d85aa3369982a5f1a33ab 44dc2662b98ee4d9c283109574a52a63d7635351\na3b5dec785b7dbac72bd51530fb923949826ac3d 7a0248ccce086fd67e35b221a974a0540ae46067\n9d85ff1bcb0a16ef51653c73db701f48d4d931e3 92cd2a2a3ba535562db6b4755a7f17135ecbad00\n81ed5d1b732aee2e9b99ade763cf88548aee239f d64e35aa7bcd61eda35896e771cbfbe7d1858bba\n367795f4d38279c7a15f21ee959b6aaf9d852168 fca3a64357530cded2ae031d5878a4ee1b9757a1\n93f0c0e66430c7c6d0fd6e00eb942dfc9d38d7b4 bab54253c39e0080e6d32b178e49459bb0da2bf7\nb060d82ccd897d248040b2b82f0fb4fff5a935ef 98379d879d12b6c06e1abf4771759d278b7348d7\nd684dba8976852a4779d3559204aeaf74e0e3711 428ddc49f4bc9fd38c637332013b922d3eb1297d\nae84ca0d9ef9f3d6fa8a06f4af75dddcde50d60e 5f3ced7a867ff1181ac3032febb0af661226b882\n4bea656ba94c2ac40595c78c9106305065de4a2b 8cb8ef0583aff3bdab579b7b03b5920bd76874b6\n86ad84456a3231ba349a45d24c0d84dc1fa6b89b 3d16234626bd0547cc1ce0b149758ec323211a80\na3f73328003a2cae03a407222b4179013559e639 dfc2bc3c73240562c7efdb6e107d50d7950700ee\nfdd7adc6cefc3bdf8dc4fec43ee80a9536549f65 943ac2ae6497ebf793f486e6c0a140b7356ac4fe\n7a507b422d086037f3e592aec247a28682eb0b77 701b6d74463bb35ba5c94a4f4cec6ab491ea0f4d\n8c79b5416dc970867881354a87826c32c7925bb3 63de7ce6b0b823b0b69ecc2a50f0441b0a70a1f2\ne671a4cfdb35aaeae3d810e3b27c9e7679f679da f424670c892163018b6648ff8061ba72149e7913\n25277de51ed84216c9ca0280396951ac700c1908 a6c4cf80e4246037e495d078789eca30e804e450\ncea8fb4f4553a1abea43a868b9eb9881f75d07e5 279ea54143cbefeff88345814eda54c5c72c7c8a\nb6ec1131dbbdb17ffeeb7a12c9db1c24df44d0e7 4a04d8b627a22a16acd8cd5c1b7ddfad4553530d\nda6cae1d7c1ac464e9da2c1d9b921315e9420d78 092339f3047adf7898442b5d17d5bee4f86c2a89\n025571839eae5258d1da4821bef8241073df526b e79f6111455ba56e8ceafbf20626d9af5ebe1708\n7f531e4ae33aa89e8b172cf9efa8e7bffd78e6fb 441520ded15e6fc9516d25522d182054b3452152\na1abf8d6cc1faa1636f9d3399cf0087061ef88a2 6d77d34213351a0a3126d87b678ea56a73c9b42c\nd5a840a81e62415e9773020e5e77cb06e0581a34 5c38df28bb88e1b3f5472fa050206a859ffd97e1\n3d302c0331a1a3a236bbfd639854da76620a0c9c f19f8328c4b8fdd086ed8e6e2043253da45f18ff\n18789b726d80630d3563219b3e611508153eb9f8 2b2acadf828177707217ab73389ab2b8bf5cc8fd\n4d37fada09e28ad31eb641dc1124ede43a232736 091db924ca5467b8f93e3ccd068c35ac49558bba\nd05bf95f1d55e38410cf7b2315c1637c3dca1e89 4ef16257dd2a26b929074e8677a4f7ae680f214b\n0417a9087d9a57c8853ffd7c4312d8fa2cf214fa 40226b7eef747bebf8d1047c2f8ce89e25bb32f7\n924f3b9f89319c3ea96cdc1a7e12c612550b6ba5 a0258c8cd8777700dee40f4b78107792f1237262\na76bcd236396c81548a45a4c1d07c1886547d327 93f543be3287f7a677055230f089bf0769b6be87\nd5b5227b4a3e411e27708320fe36840cd512f1db c0e493cc8ffcc20ffd1cd59a0392906febae570b\n952cb7f3c52141695ef1e067597b1d998ae3bcd8 893dd045bc7fcba424644c188e48ba188f74027a\nc06f0eaae78c5d1865ece2601bcac4cc5e345416 96fd5a0d0bfcc2c507f67e594dbdfa977ad1bab2\n068d245f6921fbf9621013c75316d66d8ef7e17e 82fbb5da4be3f8947b540cd7aeca13097bd872f7\n8fb999d3f5bcbab6bbf8db652645b41904dd5d84 162c173147e5d15b7bcbdb573ddfb43af2f2fa5e\n66de7bc77e6ce32538ad53fc6b29b4a42917d1b4 3eb045daaa34fbbd6fd277e415cdc63792d0785b\n49831abdb97c1e3a2549780316b8d1f15f4bfc7e 24c76edcf7f51a607af63ae8ccd12a7a9334bbcc\n8098b56d8664ec67cce682a3d772e18178cc3ae8 f2bbe8ed99e13352ed07628ff784f6dccba6a8ae\na756d67d3395087a6153053370c72615920fe30c 2c35858fb1391c895e1e2aacdf1f827634cec3ce\n238f7c4469c22bee4ea1a7bb067d1409d49d212b ff770530c0883384f0cb86bc5b74855592173a7b\n4a0ca17091a4ac86af6653e5b2b335d9605e4d22 a11fdc57567318f65acbfae84d8c544442794b00\nf4c06ccf39983873b60d46e3e6e2d518c0e3d7a0 9bb8fcdac251f9b464fe04e0debb56fd3a46909f\nd5db1c938da3f6a3ccdf82657d7804f429537686 b0a5b0b5377328a3f6b4c0d0360d07250014d5cc\n8c811d64fc441dd5620b8f598b61a3eab47e24fe 84f78cf12ad2154b784010fa4b220dfa20641d22\n5968956bb442dfd2d74338a79e3c5a3ae22a41ad 87aab28152cd6be9943207001034d964c6f5a1c5\n33ff8dd7ecebbd56ac5788a9524209935c720f3f 541348cb53c9f9e8c3482491d2cc29ad17c61b1f\n944d4b6147bf9f9370612ae0db484bba1f05f4f8 7f6fe7163eec79abe6fcf7e8e3151e6e649da552\n041a9ecd544886c62b921ad6c5e49151dbc03a41 2f5c6a39759e8e4a2e9b72f9837ffa2daaa62633\n81f40227c3664db09d211108c4f299422ccb155c 69ec32b71ace26cba4c8c1dea4b4755eed912163\n3c619ba69072411c7d7bb4f85928ba65e9f193c9 55aa5b4da075f8f27cf002054d5bc1e5960935ff\nf8cd05a4727aa1edf4dc143ac4bbc7177bc73512 06ed875f7944ff29bc1081cf1c41b89468d70fd3\n0f4c13232fe625fdf98e047b984de63535175783 495399b21b4ec855355dda0416fed20f8732b364\n62becd49b89dc55488f550b9b972fea99cf499c8 c79dd53c5c7e5c588df351b8c7aee34d56a9c617\n4bea9f34e2d1150fee22f5ace1085c58ce2a6402 455fe11a1dd6e567282d0bb0c8581de2a1196b0c\nc89b84ca93a367239d3b811feffb0dab136b26bf e9a48ae59016c2bb06a2d8b3a828fa6bf76f8164\n89c14ac310a51319df5fb5f9a8fc63be83da5e05 867a4bf0be2159977e3a59425cdc1563dd0e908d\n53171e03013e411db44e555bbc16daa4f2eb1ff5 87f97fd2917d73e2ed51a494ea5e1c21af2a7d32\n1229c36f49b12c29224af3e0756a3aab899a41a5 5f8cf3ec364bd60fb34c071974750b0da597efd4\n16d243f756c3800665af01779600cfc32a398234 11afb08bc1c8cc9817eaab50ab141662c52fa7b4\nadf4d38535bc1804dd55243c2a3283a61635525e 525468118e8d9f9576a98abd02aa4c40a3da10db\nbdcea67c819f4563dbaf80d86dab3dd5cff428d5 f9aa6893c9c1631089ca57a304f6f9305668cdf6\nbccce50d304c401319db8d9fee64e0ade6d2dcb3 70a4a137ff811603b155584ce2058c84bf19fce2\n7716c0932951b795fa431785a535022b078301b7 2724c40fa839dc0376c54521046a183542060235\n661806007bc009a27a1a556f1819949db893d5fa 2a61a140adc07733b1d9e37776bbfa2f505fd6c5\na37ffd13a2b5009f26ef080a2538fb7b9eb405be e58010978f72ee06432f406185b42940ba92c1e4\n5afa910c6f21a75459bd3987d2b819aea088243d 33d7887019666ab4309748d1c7b9272d3f52dd8b\n069f8bdf48d27d877e138c4d517ceb54026ff6fd 493f927a64ca75e1c9445328274b080fb685b08a\n9fbee37a30d59e12176d7451ca5aa14683282f68 2ead9c34669287559769d388b911103498d3ba04\n9400082af4a0d667291c707f5601c3d0498d223d f2d31d4184cf8eef1da75c5ad8a5864aea8c123b\n3de4e0a5b9dba254e08ec5688a41c9d625541b01 316466a2fbf4165d6cc0a0951141de32a84e6d60\n6194d5617f2acab57034eea80e0cdb13856c6ad2 dd3414b56b9cb105ab6db427941ddd52f616782d\n3b8de32da4530f602eb9874086243860a69a0bf9 6933410e43f4eb39012e43d8d9db945b82b8522d\n122c36ff94bab8af83eca74321486f2ee585e903 780796f9c20ac6549c24f69334bcc75120b38388\nc76d77e8d2eca92040e18657231aba7609f36a99 1760e961584d7af501d44bbcb653cfb6a1f7f4f6\n546a063417858880751216ea862aa0a5f0151504 8f171bd44df73eac46144571d97181c0d67fda83\nf7858ab1718b0e846ba05a9649d6c253f73014a0 ef888ff255d5d8a54c569552602aa74e57d47867\na56613483e08307ecc4db52510fd4fb584e438b6 4b861c710eed770d77916b245461581e950283f7\nc40625a2dc5d5e4361b335952ce95e5d76540595 96dad5acf97221a031e2a8a6c4dd5404384e0c94\n7c952728eaad816c53655a561808ed62d1ea9f8c 5b4d1481b852f91eeda651fa48fbcf4cb57ce5f4\nd9c88a10849e43671ebd3d8a4405dbdb38895fa0 ce40edd1fba7201d0e23bb8e934b71ff0bcb79f7\n225eebff5a4c9e4e3623048bcbcd887d3c0c651b 9de5ebbed3620d473b5c4c54edf139f81b1d9758\n672021bba919b0b0ae0b52d5dac3d49f108b82b8 3f644c2c9974b2f225e7f97b0e89f472d9818cbd\ncb1deddd038c35335ddfa5edce8fef213e1bdd52 3833a268c2faf45350f7b4bbbaccf45a007e2581\nf2f43e71cf09d5c9b148e043b43e080595412841 39d4676dfd5a397096bde21cd945abb314d4b6ee\nf60253de590bb8a7b5bf17fe8f11b2ddb11899bf b8bfb1876ee83c8f84b1479b47212c7f5bc68ba0\n3419413a42e9287d0dfeb2b46546ed77c6c4d497 014799c1fffd2679ba9e468efe87954f9841be56\n3bebb942839bd8d15518e54b830c4d9b19827ae3 326dbed87b3632fafac18f9ad8881839ed2bca56\n6dc143f5ca62c897b0208ea53e2d3a0d7ceecb5c f716e888d878013c55f45cf8eca6611f0ef3d4eb\n3e1004fe3ab49176c1f03e0f3fb8f50f3133b809 c6c936a9d8103c5f375e7d0ae253da8b9390816d\n852e301f19e9ee025a19e806a114e7f46cea91d2 e1b20fd73a1df0e5eb2605c60ca2b92a6ee2b900\ne1a6b30a49a2de92e79c99c3817f2bfe3dd948e0 6f4292895758367c7645d967bd9c09e8c3a2cbd2\n3b44c18b9338b8415aed0059ddddadbe89219aa7 0e1c9f8d689b2c9217cdd8c061c686b6f42c82c0\n0bee7015571e3558527589d0dd06412bebc14d86 b7568495bd6022c4c4245fc0ce36d34584ad3d7b\n0ef96aeee0b875af9c8cb31539f1f3a5955670bb 9fe8b6bac40a113947ad7dd9c51f92379643ba88\n0110f434741bbf8e275c765dd40504b5d330bdb4 d304ec910676904b24d836706343938a9339a7f7\n7a4420e26aed45f2bd12b54f921bd2b7119718ba 6d5022e7f26709ae3de939b3fad78d74a696f4f2\n8d337bffc47e9637ee9f3e1036834321715d0a53 822eb98d474d26fd203da5296dab7642760cad63\n0a25853c6e256b72e56c7f03e6ecd9820b321201 517569d6782499d36c454522c6ab2e72d727f4e1\n1a3ae5142d9a1f0febeb8db5a94d68b241b732fd 262e03dd6ecd8a089640cfbed03a3b3cb295bed5\n67a7b5eb32ff48548d0435a892080ae04db75b7c 3576589fc14353ce91224423184af1dbd938c6cd\n699af18daca6f5fba908602c44d050674e83658b 458ce1b2a0894b97e6e97d24fd8df997d0281a37\n7a0300a167a1c37d4d8d7ec330a4dfcfe948666a 03a3d2cc919120e4d6fc602edec9f63ccffd9fc0\nffb2e676cc13ea4c3d4ca986fe355e63394761c5 789ad94f11a472d2774481414dab23697ad7516e\n252257b960c19e7dceb9c7dca4f4653a4bd8d2a0 35691ac2cdc9b7ee0dbd6fb055bf39e157621835\n546132dde95a378ee481fc5c4f1d14e2d6d3f694 22b1e958226bf0c8ac2a4bd3fa1c03fdb542efd2\n2d21315ede8924986be58f17226a08c6bd6c5947 0dfe14f6290666e27034b16f1fe5826b586edd96\neb6e35f2067211f7582922908ef81104028fbe98 38b146eb59cb041e841c18c5b6cf57e7190abfd0\n561fa3b8c05256cd5f1dfbfe3d7cbabf350beb87 9a2a17b28f14c0a093c45214e342e218dd8be3c7\nd2eab0792232bb9e246fb8d37848c5bca53eac35 5e613c1e01b629df83eb97d6fe4c51bc60c85615\nc311a573ec35d76eca2de3945f52e2bdd35f7926 85324c65c5d826386eb64b0f64267a72f5a9d4c6\na49834082ff5087a48344e84f7d8293290f61a94 4f701ebf52dc49739b2e321f25347ebe6ebe3e6c\n31571188b5a7996fda601f31d38d640d288a3e40 f7dd4f9cad137e4613713a7e51efc770f118e819\n13c7bfc1be1fb7a3a3344ccc462c3b846e1f9236 17a9f9136f06d1114c9b9c4d3865787e1732be42\n7bc5ded91f9119e37106dd2e80834b1cff5f6dc7 5d54e9d094a2308fdf4729e137040beda021e677\n750919b1a8634ce61008bfb6bef5492a0e472843 270410874c83d8c3e907e221a46aac2bba493b0d\n156105546e98da7f9d0a349dd85370347037d836 120a0685b8cf5eac280cb08149cc8c128c8ca7ef\n5c9ef0fe5eb1d66539c504f70cfe2db0129816ad b5b54d3fdd23c2e82d1201dcf05600840fd563f4\n8c6e882098ccbcb9873449d0d368e59807a3254d 809f4e9e4d217f8f7c652d17153a32623f00bbf3\n8b56ed21d641febe56c2c5161dacc040201303c1 315a91830f2aa2412c8e98016f777f21a4cf3042\n1891d58e24ccb453f235cd322a801fc1a5a6927c 091f8db8bb83dd4db975fbcaad7763a1cd714413\ndc5d4a4561c3c7b4782e2d123f15e8e6419f3e16 89857c005d89f96da86873b8bc34008c63de256b\n11029d06e3de5aa841d77b072f1445d54ee802bb b521f2483656631e0bb4b51e274f754a2adc72c5\na4d86e276b0885a4c450c9925eaf9dbadaa8d260 659fd662af99cd2cabe08a096e2aa47624fa3b46\n08b209d1ae7956d75ebf93767b681b0110539529 3aaaef5139a0c2654c7a341112327938fab2d139\ne37388126c2ac6efbcf56753019d13649d548913 3bdbbea38f0631373562beb1d755d849f76b459d\nf6f3f9aec6ce679a831bae665f7ac8d3b3c9de0e 45fa9b1164ac71b7d05ea575cf82aa894ce66abb\n5dcdbe69118178fb4696575287cf1c25d60ec741 13cae331932d3d9e9c5b3d664bd917bfbe223b63\n77b4aea2cd7f663f7cdfbb9a0fb19a294ccea9b0 4245d374ee7de7c3a1d06435dc501168308ef366\nad844b51152801088e7125905a010a49ff99f68b ba1de086dcae140bd68f9f3a361e71b4f0d761a3\nf7f5c399b94e52918436832075fc0aec449f9ada 9884f1aeb294967f0ce67a77fe8a13a4e26853bd\ne3ae3775e1a64bc1767a9a31f158e008a53ed88d bd67ef080d2cf464528b27d4a61650ea5814f81c\n1717173d7b3d5f3afdd0ddc26006c717d0ecad22 5b8c230d485edb9d46081d9ec9ec7f29ac6711bd\nd6d17efc8a63bf6c6657975a62927b7c4d6bbaf5 53b015e5eff236c94373724086b97e19620431bf\n88ced1429e7f753dd492b96a6cd828cac036f43a 634adedef4d0d16e96273f6db137163b582336ef\n5cfbf55e1fce6ccde496fa27337edae7de45921b dbfd5ba361a24378570e58ca87299601da10330a\n39afbc3566aff289fa67d28c22df8858360afdeb 5e095686291bad33c703df4bf889ec67c82106b8\n4e1cd228733c4cfb98c77e2d38644d969ee50820 745768b7b50c8b10cc98fbd661874c5b722a0425\n63e79b33259644f9ee8a7b0f5cb2e641f41e8805 f47322618b458a3be313e4b3037af8b77f7b7ef6\nf1145bb0b53962c8e30bef16b3f1b4cd6a455740 c1d54b5714dce1a974199ab34530cb1dae508a60\n131017f5cfb12a54fbb693fad260267bf5c70d7a d25252cccf216de44f9e29cd67ee70247bd4747c\n3e72eba07bf0e36e25a1fa57d21849a8fd97137d 6c6ffc9a18e45f616c2172a9f2ba2b07619a09da\nca3b79ad952643b8ad99b86144e115c17fbdceda 94bf586bb6093184d7cb969dd885f15cf3a634fb\na8bc9a057973d76abf590ddabe59e0c837a82127 c5be3f06524c5c8275dad765dee4c60158a5726e\nf5c8a11b3313c539b39f41d90e718f6ae3b87dc7 b206e58369cd066a62394af97120aad61f770c68\n3809a2210dc3be9ab1e59c9a13685c75ddff8a6f 269dfc096b1b1aef3e448316752f7f50e4ae8cfc\nb99241772845d7dfdc4d4cc5d31036cee7f79b4a 7fe2948c7bb9a34d04d08c5fde8d7b44678d1648\n8395096a5edfe80d2b18893796dca09cfd3243bd 5c4c48bbfeba5b013f6961a6407cf8255c843654\n8a2258a6f631fd3040cd3eaf75752958047a3c01 b809ea70ae19aab2e6f72a8d603ff97d14e30349\n30ba5d77a8c40caf6c8481119c51e58a25df6518 5d8ee79f1dc28b2759b3fcc8b83a2c5c0cd26d80\nb93c6534335efa0c953d051f810cbf7eb4538832 a272e39671da0eb9b95b11a95275326c3a8f8151\n2ff4aed93ee2ef654c80ea31b36d198fbcab8b20 cfe4c9acd9b1f6be08a522ca80a394f94c20b645\n90a781f52d8c328637719ff7248b9e4fe770fe16 81234d4d737a694fca9e4962ab35120002a019a3\nca46c7f4e8e6702de75656a9e2661d25c5552ca6 dbd092cd15b171d76a42fc8a0ed50e5f0999484d\ndb250d87c2a48a954afbde20c957a4fc422f097c e5c5c68c0c519ab0eabb12c3f5f9eb8d7fc342d7\n88a50bea150269b58f7ecfbf39a8fff7068c493b f2ee7cb00ed86e0c0295b7862889b08c177031dd\n0cff33bf15bd1650dcb5b6cf280ded8c74dc4530 d3c9199d95022434b5f7df202fdc3e3fb9e4c446\n56cc287c9825533cecd759a5b27feeb1473b9e83 5a7511b1283047f55285a5ebf26664328541aad9\n3c9a9c7f77321e319575e0a760390432bb51a180 f557b75a79f910c00fd4340add2a56ef3fee7436\nd9098edea0e2f281838807d3de290952b564ea47 d84d0bf63e3b098c01b2c622490648ae0a9cf1d3\n2045bd7b05b8f4bc6e33167efeb99db5ad6a308a 88f8325952dd1aafdd579ff064853714d8104623\nf862ba47427825d5446b95d44df7013a235d8625 fcbcb85879cf8627a5b0decce114a4e24e53ab3b\nd047ed9a0b0062610849f8df75376a4327ef3264 ec4825532a1fb865f7512e2d9086e99683d0d2a1\n3ae09e0e1e5171c27bea8d8e1f869822939bdfdc 54437010bfe6060510666713024b3fc5ad49d619\n2bfacb6b83680e208e22872689bc00679a5e8af2 b4436e8c0334d7daf41a0f7c80964a434996e455\n08a8de67a285e645033e13bb0ad81e065f31d098 be7106e42188941ee66cb2163f05e9b63c0a1d51\nfe6b75149b00f88cc98c7e6cc9b9fd882ed65314 7d94f2a4696a900fccdaed68599efa2c9e148c68\nf2a191438e25a9c4f348e7e22e03d85f282a2fbb e439a553575de05b6190b1eb8a09dffb5803a4e4\n61e93f428d775496635f08059b440e02e87a4247 d087b2f2c7a8a62c54d3cc059c2ac5245fdf945f\nfe563068adc3cd4da9fbed4a82419a222efa6760 4e202be620db84cccbfa7666f0cd1ae99c3e2ec7\ndd3a41890c65712c94c4d8e7437560db97e7d4f7 edd360c833e1fe2d4aa2f01a7eaa1b89db90f568\naf17424004986ea007bef97c1ac3cd21665be71f 5c916beffec6529cf67754042a380f2587568c6e\na1a5660699df49b9e5009f40cc33f80ea1b0ab68 c90cabb023d9f52b6b4987cd9b8a07f7967bccee\n9fd4001cc2500aefc729812c3c34d3e5be794556 66f6b421f0ed4e02c657289f89c27b27b18edb7a\nbfc8884d78cf3a696903709c03ff3869105d9421 ab3a995b7672d504eb2a7acdb54957892bdb3bd4\n97eb3b2c3fd4bc09fa4f7b43b18d1dfed53e8ad7 5b45477b2dca3b2df710c430666559e511dc7547\n740e59629d46ad85ec3eb66d2d95fdd3ea0834a5 d9245d2a573bce1a938da0eef9e8a52dcbd4922f\n83e1dc84043a6abc24de781fa5f9402e804870d8 6de538bad5df3bc4b5017892e727b7dd46d8d55e\n5f4b3a7b46030e2f5fb0ece637980372436eb0d5 28d5c76feb035f24a5977cfdddd34e26c8d2b443\n373089a363871bcb81846c3952ed1629e3abbd03 b6652f389b682fa430504d29e03fe56958f4776f\nf4eb65670027f415a386bd864f42ecea1a7506d8 a9c13e5a4a8690653798503b1e755cb4582e7a59\n149601070ed5db51f67c186c16da1aa452b9483f 3c3567ee21ff65dc69bc5adaf77bd94b0bbe8285\n97aebc6837749d77b4691be3350852c84de69988 e5e27e96da3ed3a6dbab1298c4309e81cdee6e7e\n58d47f9d927323b72ce8950b69183ce5cc8f56b8 6b659620d56382c31a486adb58e53451957ba679\n5085cf5c2e509de909d0dd72628a952fe062e762 1abda76866be74ced2e9bfbc42954d45f4acde22\nfd529cba7efbed27ff30f5d15ac7af9c9351ccea c1561f9c58e4e9d613d3b784616f2caa1e97826d\na6ae221faf21830626f68bdd6c2d860661fda679 6d743e8b971ac2ac006a7de85ce8a900c83288d7\nd21e0a217c729f8784f85a15c985cd4d9bbfb3d4 dfb0984168195d27683b9e51052a5db6f44aaded\n60c0ab379694b4bf502dfc5addf2d7ddb00e7110 6155c414271aee3acbcc484f633ad635638e5024\nab48868700b359884048f4b3cbf877de55e36ce4 ea6aa710193138bbfe3c051bb9dd2d43ab3e5e69\n74d049469a05b208cc0dccdf08f9b70dd3d7eadd fd586697679115d34b6fbff119e3e9ab72be17a2\n07a2a795c50289837bb34603e8f290f5ecf40bef 76801b8b5ce79111805a4e69d177d059bb4390ca\nb32fa9d26038f04bdd8a41caf6cf2aa510ad24be 3c3c473ac3d7535af331873f4cc1e36df9494ac6\n5812094d99c238d342e98d34a22335b016513461 7a97fe6bcf530dacad4c01689f38cdab6600aac7\n5f483f764544f549747deb2241337aba0441bc09 18e2c401a31b71f121e7f84e5bf5578b4c4642d9\nbaed0e6f6412dbed158778b95dffa18c7d5bd957 597c032b93b2cd9221a7976943a9aba679977bc3\ndd367d1adb1391c1a127dc7cb7fd360158a2718d 0af14e78ea00646e39d397f0c776e7a95e1b0373\n31c5cf0057526673f4c6e1e0061f4cafde0cd725 7f64a234750c96a2145185581993dd2b03d67522\n357f7de30a7d56225d9f439d326d7531ba9256f3 4b129e7b90d09d9ff2f95071c12858b51393365c\n9c03d039624b47079614801acf6a6cd5ae35d304 639d59ad498e3df49a48d9777dbce8a831c4037d\n98c90349d84a0d0970d54df5509ff20358883c02 9ee50c9ca5d55fab6f3414054ac4499fb8c48153\nb1d4bc8a9f278cf5554734325554f09960e36bc5 e7943a311e198163dc8f63cc8101d3e8dedf0272\nc5a8388b13810fffc2e5b43f48a70ad8df7ac687 a066c7819193e457c3636e3d0931bbb6744d4ed6\n08b5f92f148f6c37390ddca166ae94363da4c9cd f257cbeac5760ca44e5435bb2e91d34c466c973f\n54f4df52101b1bddcfd6b134f7f34072ec681b7d 624ad35839899bdc76a07c4b992a6b5937695879\n9fc59d2254d1a1fb4eeb774249af17fbd5a9deb9 8b2fb3219566c502627a5353b3a2b95515e48af5\nf9fdcc7c2eec8edc161aa9883c4101d4f6fbed6c 35d3b90b143222521632890195f95db2ddae7f26\ne7e67235a9e27c4a2fd397811cbd8917fb8f0b24 c7fa6a67e21bc8daca90d5f5eecd1a12cb43b628\n6479278301183dd2f010b6a3d61acdf6f0c76730 a21fe4a7e00f53f586529433d2b1e722b491cf0d\nd588d96a663a5dae14bb2a9825063977ce075aa1 483e815f8987dbe90e0d696f4741995cda3d0d01\n06c96f5d2dd7619259d5a73d573dbacc58fc1756 5aaa4edd3d2b5db3343e2efb387091d80bd251a6\nc2eb8c16c577164133915e27027ebcaa2148bfaf 78a7cf940ff05568ce3730d426c84b8cbb4c362d\n7cc2ed36a90a2a84b405b58df04861035d448d1c 56f457f9abbdd59327aa457d955bbd2560bf8bd7\nbc711d3be6ffb8e37046ec2fe9bc1dcfbd1e8d0e 2d29a11d5a532a4264de7753ec8f6fd38764f2a6\nb1623199bc6bec0f511a39523ba13254d93a18e9 b9d5c7fb53c1289f3ae1659f417844888bc39fdf\ne0adee40bc7e8c312010bb00d3f6162a1afd5587 799d064621405665293e5f277b387f6210868933\nbaf4223f226ee7ef16b5f6aec9750c3aa82e3c75 7a751ecde095f0c5aec2852eb4463b5a51c723e7\nbc9e9420209e7509a2aa4f490d256a3e2ab34bae 541a192eebc20aa0b56e8a60066d541f5f8bd62b\nec5f7b0d9d7be9ee50a022380114177119824801 d736de16a9d7d12798033958d8057ce483fb0961\nc00cc9e9f1d4b3c7dcf131d76cf9d4f868d51c62 651873bbdad893260caf1b088c0a261746ecec61\nb7b11926a4dfc6ffab2919a818f536ced21ba4c7 68ea801bb6fa5e18f602baa2396818131acc5ca0\n4578e160cc76a9feb3c0f1f57ceab84737f66043 3b558f0ed5edd83aa101b71bdc063cda2b39950c\nafd3bc80d3f0eb79df03191282bbe85398e18abf 1b71693031c5491c9553b130f7413acdfb843faf\nb69e0f3ec41f5ae4fc27c753e18173873412bc4d 644b350931c422f13af8aa447ab3dd0ae2fd266d\n5be80788c4be83cfdc1d66003651a07a4c7439bc 406e18db2a2e0c3fa50322a0fadb7dbef0ffdbb7\n6c9197f6d6ecb1187b60d598ff854943aacfe2b1 ed64f1c907bc5d406e521f305f5a2d426e33594d\n92981a73a88d3a41ef495bcc4b5e34e46f01caaa eaf6b74ac3d5f11557d0bf30ff8da86c158c34df\n1b0046ea85245ed656970d485a52d5401a0e1631 74ca1d86da0fa683c985b715182f23ed2f43a5a6\n55429f5eba88a352985f97dc4abb39e5c2038cb7 ab51310985fc673ea6f8024e0173d8efa0718637\na71d08d40d116dbafbf90fb25cd9b9bb95af58c9 1532c938650da3b2dcb021b46d56813456e48b35\n913033b03848711c668cca69aa937521139397e6 af3b3e467d368c65d92978257297ab0df28ec9bb\na5e00f4891c9031c3eaba5e6e6f1e34c40ccb2f6 7efae024d7848bdca74bb522fd955e56621d107a\nf64b3bbf2e34e37946548885fd2af908ae6b4007 7d2a4c5d6f8e518048463b99b55f30b121da396c\necf45396e26337e75c597fdf2196549db723c724 b3549a471de2f771b2dbcbb2769b616d4efc3dd6\n1d8b73a1e752bc63725fb3f58fac57847f14af98 805dee3dfac6be873afa24878c63b4f079c4cbd3\nd429a2ac28dda8a7a91ad86933e3d14d673a1f9d e1504b2e5aa49f4646caa18ec24f39f8c7c0e433\nce8913e313db5e1359fe23881e7f871a9837c22a 0e756337a37ed806ec1b0e87092145b4a874e65f\nf4f01fab59c84e90f801eb1593d61902c5748d98 3c8c49bc495054ef6a6af14ab4bd810c7b213442\n6f6bcd7268c079cc7b96f9c0f8062db68d4f1e98 553d3b2e5d7104d82e756e3c55f4de10d5fc337c\n78926afe22785d7d9029f087f6da6e782b048883 6621ac80f3d37bc5dc93b39be3dfbaff8b7045cf\n9c17d4aefc785389df7e19b8026152c40e8da870 110a37a911491454d5824112eeb9f9d90d1417bd\nc63ee48d1b61bfbf1150fe100e3f444addb9ca9b 9bce659855debd8ec891e20f458523bf133c7acb\nf36910e80db0d0aadfdce3ce970d1a9229f6c14f 29407e9547661fffc7c8f6c43eda59e611043d15\naecb1dc857a930f1cc23a2de9974e4a0548eafea e8744316c91e0617f54770e745f38287368988b0\n02d185281cf36576d095df4755be2fb6fe804eab ffdd09a0514dff1813057ed4d236af79a4fbec6c\nf57e16e14f84239d76e33bf90706263417fb0f8e ba2a5cfb753895fc068210cb96a2df17769456a4\na9a7070d3caa11d6ce928fb69d6434c8ea907d1a e65dd8d5141fdd63b1701902059064b4aad2d6b2\n0d4a0a64a4baab5f80c27dd8a75262b188180dee 87757de6f503661e446ccced708ea57c30b37582\n489ef04871b42c3cea9f202f39ff7ade00297410 f03f2e993235ebe27dbabec7df5b8dc21fc8d7da\ne9442ea5d26ee8397d573e4d04100b09863dbc72 8ffc2624f93069d995d116ccfa365d3afcaa9be2\n4374909dac6b97aa6ea5003300aaf71205a350ba 79448ccc97021843eaadd37a838786df39e7a858\nda149ade93796bafab04ae9352bdb7246d4e5bdb 7ef47330aba5e4495791b408bed091347e2d8e17\n27398b062b538e6539c44425bb9b2776198896d1 788f35748945657fc06ad0331c75f1b65b6d1d95\nc0af7d300d7272c815b7d563aaaa062e13aa8325 7b3191b8f76ffd2e713de0cf1dc4bee50117e1b6\ncbb6b7c37c05f5ae1af1e18418f6a36e89520e04 e3adb9b5c5edfd4bc7e7e44f57969a01deb644b1\n6ba9a81e4ca6f3b2b2bfa577923ff71042ef73fd 6649ea2a9fd5f2e0fb5c1798b9f7647367495089\n574fe7a94d44b2a48998dca9b334ce631b119625 290459e7cb576fdb1a7206abfc6784a5ae99b608\nfcfb5ae9c339c2341d55eefbac9c0b02df5c89ec a8af4297007addbfbd553ca89847205fbed784bb\n051142399c7155f4953b6e1a5a44314e882d5918 38cff9d7fd286c39ee933ef0257e20da988fa36c\n856f70072b2f11401bf9659690b15ba005158e51 8aac9a6e07ebf0d25257d68331035cfabb74bbdc\n21549712e2f40fe864475a0f7610e84f712e58e5 c1d420027e0cd648f79b3ad8bbd53589cfb40dd5\n81fe87f2ccfe9022872cc3eb2d358f74dd235593 d41a06c69e57eb57b11559b38d7d4feba647a21f\nb75451db554f3e98b78d7be7eafde07f95f8460b e42cbcbb7a2611adb63325bb4f2028769eca43de\n25542d5c29968ce3a608c63d5e4a22b31bf20fff 2bd28258f176d3fafc2d119bc3b52b15aed44d14\n937aed38b256cd7ecd62df15e874307f80fcbbfc 8a40da0593bd85e68e6998647d7d383c20e1ee62\ndec0c57ae28ec1cdd30c25b551b290f4a6e91a75 785d5729642f6bdfd580368c11ef64dc0e3a3682\n146a169ccd925ab32b0c2ce87aa10cf4b5e4da19 d4ccc32fd1caeacf56ccacb1ff7ca2c041f3a679\na5f30bf318dd377fb69cb938c682da2cba234e47 5f6c4e3caa44e3d0ac185e002181fe025fdfe0b8\n091f2fde3abd0627e4a145bec139c2008f4078a7 3bc3dc99c374178c3955f416861785d4080d33f6\nf34a67d83b90e6bf2eff5411e5b087aa655d997a 877d8a87ee213783f0b1de239ce5a0d1fe25a67d\n2829b9e1c6a3b10cb123e0f97c292b5be6f92a5e 30b2bb8d8157061bbfc12ea018903bf08dd9639f\nde9c0f644f7e7aae580d8cbbe3dc86f2d5f666e0 1ae738ca9cdb3b3146f81a5aa08ba8a62dcc0ab8\n2b17235ccdff276595cf99bb855453c780007c06 5ca991ab6aeb379129a2bc3022eae9b4fd8d097d\n605df59512bddfb4d1b40d7affcb5b4963f5408a cb2f8af8edacf3b2dce0d03739f4ed201f0be49c\n9a1710fa2ca7a1019f5b6e13998edc1297058871 e57f0905ef69e55f9a0f23c5de911ee8da80abc0\n10d3da5aabfd5e39c088768b1c06e6489d9ecf63 acf5e051241249c586a07f47391e512ebd2f45cb\n4b6fe91d798a54dc27bc6c40df529fa0d23ee468 2592060e0914d2dd6a63c175fed1b1e46b91eb0f\ne4063bc0efa174c364cc06eb436f40b8d3e146c5 4244229ca947a6a9021cc0711a6b53653ad49192\n39c0e2a58140a0295697d0fc6e5e7a447689cb0a f3bbf527d1ce5bf3c387e7ff0ccb32d131058df7\nc744867f5ea47b98ed55629da1bc02c183719092 2bd53e8d2733db765e7079f5bbcc2af3870ed174\naa17aa3a2625a9c72b50bb12f51fe54aac1da290 ee2891bf6d78a73af32dbae8e96bf5f05567c3bd\n885a151c410e3a0a7bfb98e52d2e8b8cce60d9f2 c752aba81a8908b238af79e42a6bb66dd27469ad\nf5cb4d2fcfe6099487c80e35074b69b590f83813 c6913541af52602d46c0760287a7c2335c4af077\n87b01e564d87c9c409ccded89f59d02c179ff39f b3d9292b5e6920861a9d4ab02abc8f37a2f3f842\n35a7376b2a6d3427e978ee6f6f7a9d488a6f836d 285df656358739d29b28b596dde63b5252144a93\na449d93beb4cc7b537141a106e809aadc51957ba 300a338c9e8a172883e43b02f0a167f2827be7ab\nae170d57b057f77fac26bc6a12d4091c9afb7239 e40ff0e2b546db84d1c90d62aee9097d1ee07faa\n668727aab52f80259ce1bb0c1600c8ec11102748 71b39e7654faeae651787a0da2d4881c5e4d289b\nd0ae1da9d629a13a78b3cfb0d2ae205170b8c494 a2a42fc4bacecfb6c3abb59db6b017c82d348a11\n245880577407bd99750ed479cfc36e6b5bed9bde fda5f8d5539ddb746755314a0c3a8fc79ff2bc34\nc0cb17ce6608d0423a5d154b8503c90c94b140ba 7403a463c98db0e1ca1649ab17c76936f1376b23\nc39462393e1a56b002cf8a84f4a4953882507503 73c7e810d8a5b8d537ce4f375b84be0187887677\n3207afec0be90454fd39db9d840bfc791160dff9 c54c3e96328747ea99a7b0722839e2dd174b8ff4\nc3a63400ca52a1948eb24aaa16b9060d97b58596 e8a51f9dec3adb38e2035961d49fe95048d46012\n77d21617b2517ca1bbd4ca50ef1518530a31c7ab 7b960ba3f901e0a041684b3ecc1cf1843da46688\ncaa09fdfe640c5cf32e247687cfbf8e3bb40ba4d 5910e50653f404fb0b4f5ca6a245b5cdaa23d3c0\nec1ed14841d4ba27883ac2ed29bb5ad00545467c 3d8feca78720a689ce2213b0788a0b7f73cf48ff\n262f6cc306e33beac382e745741664c6c9d962aa 8c8bff91082bc25da63d68d12e8333199ac7f074\ne13c7b260177e890590d817e3186a16138c80043 004d7800363fd80472bdd763ad13f7199659c9f9\n70ca6e9252dc721ae3f9b03b7524020d07370ef5 126ba413fc7e22eadf67d9a25892c4c0effca273\neff332a37482ce17e9838c71d3058a7937405793 8604f6cbc327de41ec4d1acf259ed1a5eb70c834\n82c1f2fe9bb77a8c5b491337bdc5d54e18ed6783 17d895e29dc628e7008bd944f2b4bac8a1a0bb19\n6632e12e6db5674362509fc9a2e3ff3dcb87044e cfeb428541a6d6fe77c69393955daebeeba532fa\n38cc68cee9741fdcc0338a63c1bc457b1826f219 8b82938a933387e1616649a65438af2a2a11ae8b\n6d349c0eff205e9b202d458a04bbbf5e3f257e73 0f1f5c1ad0985a2ff56021d794fedb2c9b15f097\n583fab531d7333c297d70ac23c34994f87e5e3fd 898736d7690fad3ba3b8424e75326dd037e71ed9\n4f043459ff80a52a5c9cf605392c0e91eb49700e 3debc61eaa72ea03f404b9e378b65d3be98ae30a\n38c3556ac3eddab72b95b678c3e2e32e23051736 d2980f6c91de463f4d90f0f57cd6571ede7fd69f\n6a9bdc8deca16aed7283f3605622c2fc702977d4 55e1e1c0774527f95bfbc7a641bc1a580d7613a4\nec01caf59e670efddd4423a7fb672dba1bb73bd2 f9ededb07cdc5ad9d3243b09bcd71db9ef976bc7\n1872905065ebc085e52e28606e4cd155a139cc34 4ba25bb65fcda55604ad5e072c1628296e098c1b\n09e6bc9ffe33854cb38cd2ae6e210df91326ea8f 4a6ed578e19b2df0a7899c21492485974e3f6393\n73406b91ca9b499770b20980877c64c400d16ab4 ab2e9807332ade846ba91b882035d68a3de986a6\nc060007affab05cee427e6ba25150c317138a519 7a97c2b9865d3a01b002f323b3ce86160377a46e\na56887a1cba4191f95c9bad40feb0e1927324239 285a5c6acf21d2269dbc0f9c9612f1681bb78707\n59db4eb30005686ab595a9907c05d838790f236e fd1c29c790943b2fb312bca6c0e5d8be809187ae\nad94da7b2fb5bcc914e5806d7799c5a15d87fd07 db46bffc1291653161e5e9a086824c2e9a0fe3de\n39527d7910602ceb542503e65c69c3154fb564cd 69e12d256d8fbf98a9f255f0f0ebe18bf9489a8d\ne842265800b8ceff90874b350f168fe33fd514ee 070b6558ef7acc6b66fdbaa40493235a40eb6756\n458ffd0ef94409fe2d34a144c6150b36ce32043c 220ff74c76f1ed1711a746b7bf176f2d71218920\n21772020f53ac7330c736fbdeecda3e5880e120f f7970681c171e46b5b08113a5f266eeebda809cd\nf1f3399290465a9670dff9214dd489f66af93e19 3445485c0556139f97f8bd121fb6407c03fc4a1a\n64f4e4fabc9f3f49218aa4c08e3cdef882488bf2 fbf9fcf45a99f4f9d674d0f689afa1cf9d7f86aa\n447cf0c8a54381d609b8ab2d940df3724114c6e0 61b36aa6f739dcef1b7a37efa8e2de42421aff49\n7555f1d67df6ba8c11b2d5c2d772e0b112c26a87 bdb7fd49a65c37e9825129949f2d2e5788873dee\n795b129fecec57696e71fa175b08fcfd0a237723 1aa8568a0f6a656bb7a7a1c9328e96da781fb6f2\n5db535c6859fc7916c05d957e4adca6c795389b3 e02c0c7e4c30d0b5d4190dc5e5143af0b6931fb6\nefbeae71c7da451c92c3c9597858b40031b95c11 5448c2ff4cfdbbaaa987f5789d08f5ba56b557c0\n549298651c5e64ee60f619573428c61808095a0e 6aa6502dd7c00790581db7fa07251d0bf561734f\n5c5b254d723173a0e0bab758f632c4c24b4160be 19d345e7933f5d3c6b24bee96bb405281e5e0a71\ne2365a21bf7bfc6895f94746be6ff7bd83df85cc e39353913fc2a93d209d22590ebb08e8c2250fc2\n0135bb1d95c7912a4376a9a12252902243058255 68a4cb69098694392addbb6f02fe7b5df765b464\n1565cf7bf9c21a883e1a9cab39557f70abd29748 ae95dc20bf712fb60232a7bd19c979f334f7c563\nf95707d6dda12c23e9a2243ae0c5bd6db352a02d 48c21324aebb9988b4fce5bd966033f62d698901\na1d958c50055cefb4c12b1ce52bc45ed9f76c705 2a957234accd909bb32a341376b141e2a8914b12\n6bbc7fa7d711d92a133553dc88d0cebefcab1d3f e2b45b56205cce3af31a2719902dff2b548e03ca\nc8e06562df102904b13cd3ea0e4e7c809afc55b5 1c31963c277a1ee75864039f74f1a0389dcfa040\n32d96420e9494a45927f373a37087fb6d0eccc18 ef43deb7feb608f94e60336b8d127cb9c6c964dd\nc73c892fd6deee2e1f3c143d1c9c5dcc77975e4b d067b2131370e4232600b4ba19b0918c542378fb\n1e9c766c0e16a2da9c5e6ba43301fd1694803319 fd2f39cb7a21d03c61efef05ba651903cb8365f9\n0ac7839a80e749f47acbebe6f3e1ac27c623d959 e4bff7d8290bb17d035fe5aae7a419bddb52d958\n3e33f29cb4bd9f4d52582f8d7eccbf1981ab46ea 245b8050336d34aac78fb533d4d2525c50bc7a49\nc5e322dac059e4d478b97931f8d6439b2aa48101 9b054fa7113c4b8a498fb5b06a0e18215d16bdbb\n6a91c63bb642e26ce81323549b7a8f36cab00e75 aeee061562d87c99f88817c07460daf86c43d3ad\n0bbce282037c25fc32c7910797d94316b91e2459 fa3ae6134b7fccc25450cc0fce22ac6789b570cf\necbc4fc61647a0578ee47def4ee432e5436b00f7 97ab5327aa7015213d0c6d1beabc57fc4bd2bc83\n986185bf4c5e69638618b7f35b34157a1a6cf65c 3b3a541ed592b787a6fdd170d3263d62097ddf80\n4d0c33fe9fde0d8dd8b7e9cf09538ed9310cc0aa 98c0429922f05bb49d114d658abe07356017f9b0\n30e5f15bc199b8e526d09750f443d2d5a9863696 dbd96e63d0fac2d68c057247369cd27a5c4327a9\ne097ada3d455ac63ca3ac82782b75ce9286825e8 3b116e9ab55da110da3fa85970b5cf3b5e233cf2\na2c13ce4a4c61705ccea89e98a546317cf3d11fa e9daac1af3cb12ed0af0faa9283be60691b7e5b3\n42f405de53985cb7282393dfa0c5f558800450ea eebd2173f208f79ab10f02244cd9797ca61ef4cd\n5f3d078bfb1e8ae9534782ad0c088b1793efa8d0 647b923db89199ee6a4b4f4ae7c52ce7d5ccb79e\n63fe39a5cdf4c182707004a38a0cf77145666ca8 42a55d51e42c902c7081777d10d575af99b52641\n846a18ebcb8fd1bf7e1be526743482d282c7f4c9 d925a90f5d446c32ae63ee7700a3e7d5caf0e58d\nb147e8fc761f3bef62d75679be43e02d9010a681 603cbf4f05b808054e361b90d8b5fcff5b98abcf\n4fcb1c2c1f891080afab44996115fd051b72b0a9 ea22f83175e043de685b90528ac850f48cb338c5\n1341f5440ed0e69e4e2b0cd9fad621ed1417d1d4 544e0dff541a3a89a8135ebf097c0055ead29862\nb6608513434510428c38f5844e34cd571af65fce f302111fe56d5432539aa19d0da11f0b543d8200\n4584a9f8db16bb73368724a211addbbfc3be601e f037d4fee20cb158d59e15b76733e410f984d1de\n8f2ed1124036697bf87830590e52dcfa66abf147 5a0cd633731dea88e73f2dea9f38cd1f33cade0a\nfcf7673471ad96abd67ec43e7414c9644e24139c c6b14a381b02ceff8cd5fd88b63d9251853e86dd\n718c1cc83f34693a959082926a240cdad3e0a257 37ed4928f3b247a6badf522d60f0c5ce1a37a848\n625321ee14a93ef43c1ac526d5100341a54bfe33 baaefa0c383dc344e145e0b53d0bc39f5dd1af36\nb619c7cb019e7a032c09a62360cc5673c3ecc27e 8011b8e7a49b16e7a0de91a878d367a9fe5b75be\n009509c36e4cbd140792e543c869d97387cbbc51 15aa28bc5cabcafe62f84ffce24318def7cfaedf\ne353fcd76e9b0909934ff847a60c74332da06ea1 d971903c7ee4c5cd11575e109b1e0340d0fa58b4\n9ec54c4cc5e0883ff2aa5732a21140894b8ba5e9 2e37ba84ecc4e4075cf87fc7048cc7d615778bca\n2db35497a3ca5d39d890a005752ca1b0802d3b0e 8d5cfe1c5d1016181e1af8bcbc48676d85f81e88\n54ac81d8e966fb5b3427c8d4381be3d37af4de98 0d63ca4a61eeebc67596e09672f5cb3b299205c9\n0595054d9290a8abbece0a3cc64ce95d96737530 307435b3225fa4ed89e0c12f3e44579b88f3e182\n93e7aee65c10ed1bc0067edbdb5770784878bbc4 1834576db452873d314117ce060a8f2d6afbe259\n2e5c332a537adc9762ce68cca9e19b1d1fa53566 f06168e62e6774b1b6f49ea6395316e4b14acd97\nafe65935e5fefe2a5ff5473d1c4f0e966d544cb6 f23c950ac308006984423b9663e4ee9198eb68be\n574ee8b3d4ce61dd41fdb2b8f1980056cdad3e63 0b339928f821f670d34a299bfd2b69bd92b72636\n816b5183a0598fbfc958466b7c2d89261a9ce42c 4b659d6cfaef1cae2668daefee55980a6a87e1ff\n596503cfcf3dd914e3bd93ba951ef2a22048c3cd 11b5765214c6582143faa5cfc471494c3ca973c0\ne864aee80729790426c5c1938c0410c4bfb58163 e7f9ec3ee8b190b2f8f274ebf4deaa2ad9ae0bde\ndfaed4e926374777d35c3c897aea7ea1eb9c04d6 5ac1ce2f686c3b9e724366602154e360838d475b\n8cca37056ed6af38f1b0c255f76f1b1bff56706a ae43699b00a9bd4e968dd9a0ea6857029c03eb53\n6be80f408c911753a097e8a987fa40eb3ae7e727 4c1301246364f10f49aa693199e7b2e302e3ab4f\n7250a0ed471d646125cea36e22226e31f4056f80 7e5dc2a3f3898c067b0ac677c9213d2cb01f1781\n42572f0b7f2eca54e0dd2593b2b70c41169132e4 4a152744e16104a2062ea80456ebe690cbc6db5e\nb1ca12bfbd38d0c90fda8f995c87dde52d252e8f 73ac3f3eeda5735c383b874a77c90119f2a9b58d\n8661d02ec6e67d5093422dbb278b128e5232974f cd27015c4713b745575390aafd30a8c2169dc516\nd680591fa718ffcf9ccd5ae8aa80ab22bef76634 4625d8882ccf3a4c065fe9e68d66a4e838e412fa\n86a2afd347adb5ed93985750d9b3f3fa3602456e 9683042f076413f0499f1f5bbee91cf1cfd2f93d\n143e19c273cd5fcd63d6201283d5fb6cec054c96 c6036176d595f9804826c8db8c208ad35905d899\n20f75ef57e3bf70864e8355261d20eba50d643dd cc3df49bbc14a2ace5c0a072677648606057c766\na097124410a316fb576207347b28a61e827c45c3 1a202deac0635368e6fa565d987f1b3acd178a44\n087b89b29349b8a2dddf960b3b7b8a084b6fbf85 7dff77d4b8ae108c75fef93940dfda4d07a697b0\nfbf06f05b96f922f698e7255cf4a796f4c94f341 53b3ef5a82f23df9d1f3ac897a4f8726142e9cd7\n270634a08477ad1138b9f55d0aaa6b017324c6cb de08add5a90a6131a2d8c8d9f24c59259cd4d150\nd6e0373a089de2838f9e79f38eb7e2e74d037d19 d8dbcda5d8842cdab5d2ef5c4045eb83fdf3f8fb\na0a300f3a632c98df98c6bd51f4adace965119ea 69373483f9b9cbd6ec2474d0cbd63a8e37a8f6b2\n05f89336f98f8d39d75e0f48d2930d6f16c07c9d ede795a6408e53917e1e410eb336c24cd6f6c4f2\nb4920637e817c998476e4c081b13e7f097cb9b8f 539354374e7546cc41cd7a962c5da5512f29c655\nca706b7be4812b6f87fd585c7d428e461cf57a37 61f7fd06353d07324031012887e8b2e1643774d5\n34fd921c1031778afeeb95a96f967b46ad5a3c67 5aff7393672e50789908a1bafdd0a09bd28dc3a1\n7799e2f5bc587108977e4d0f41de61bf413ebbf5 d22d6af29dc395f1dc35104e451248fac812d4a1\n99a5933f34ca74f2a9b81bd7121f08f2bf246e7c 9573a8aa90764a14b2e5a7621b658b1b349e0a2f\n02921c3d3f74a20f758bfec1ae3b0266dc9cf30d 379b8a9e7d8f25c3e6b86eeff3f62bccea2b981c\nbcf5c79c7dfad21b4e95e70a3550b788b89608f5 ba0f3d513ede719cba9cef594e99c5615615b315\n11e7cc083d6616724a57f230d731a8046d7cd8dc f94f9649d0e752b100bfde128a2ad855961be232\n0f5f4190b097af4af19470ecbe6a9446f7ba1998 43eb9208886564ce15d54edaeca4453fc125c489\nba9a578ccc408a6a1efc9c28483102c531500de9 b78b07bde1b830aee3c510e11282fbf82cc2e4d5\nd73145ac9507044354af6669aa8b52927d40b6c1 111f1c6805b79f028c06df3df3cd7c6896350f27\ndafd18493943470e578cfb1477bf9d70ba1d4600 b19f9f97959c59f8396e4f2a7565f1831478c95c\n95ba697f718695b6a808b3e7574a35e6efe7248d ba8427977f08803dfbf1a13dbab8b30203c89711\n1e829aa0a11644897fef8b69332110f3d2692546 99591cab1a735f87415ceff42b1797503191a2e2\n60628e35af7fc7be9aba97341d91f76ed38d4274 eca0a88acb89cfc028ed36d851fb122530435441\n787b20c25aaeb7883f933001c6c44cc3153d8696 b347a2efad27d7e14d6e38be0a40d952ff18009b\n53a32940bdcab01a86cba94c38fb71da2849e363 74952d8a0d0cdd72a3ac3ff04432a020d2a7e02e\n2a6499c46f2ded47f1027ed12b8bf65c56394e13 8a01b009c21ae6bb7e3093ae80082dcc461973d2\n138cf99a133b5f41c065e51aa5d77341453d026a 8db7c9999d928dd770997329c6025b380f22d3f7\n6da04af41faeaa4913752dc07a095848100a5b71 0d1a7575f2e3fadee5a6755a29b63eb64e03a635\nec47cb93e9912f93c927f7e84ba336e34a5fbc5f 93f6b1c3840d5140eb679440451a6095ba6335d9\n74ad09ff7a9b20d2b90595ebc89d4a3e84b93cb1 d5da9bc1dbe55aa9ba0a11fcfaa84a50978fa15b\n8073478cdfed4cbb685afc2f4e5668db7ffd8008 2cc9ce75663ab1c976660dc99bb2635e7e6aabfc\n9b9e5ec72347898003325a3a72a926ea36499ee8 9aa4c307335282d2e16e6c87bba78cab0d7216f0\n1ed26be9c3d0d6413a39c18a21edeeba2d528b6f 715c9fee43038b0462437c8ff55c2903f76c6f3b\nb5a4a80075a9d62824c6b18f312b4cbafb6c07fb 8292fddb59c95eadfb4558f360186589e0448cd6\nd44d4bb9f4cd273665c30d140be44bb177772fa7 9a482569db9d89e25a213a246fe4503fb7055714\nbaf8ee0706df6b92422d7429990851b3f95641a3 16ff773cef7bf02a2eb3cf455a6ba9b433fe8692\n254fc9a8df556d714d2fd977a2de247328ae4a7d cf8062d7d4e6c24311d83920078e5e65e3df7abd\n7b4f6ff915fc686b49a6652437dc37307e66f4c9 45fe155b94770a8cc6f4227847e7612de582453d\n7fd09cd71a53f0e2d40ce164aa72954ec8597627 4abdf4c7b92459435ef4f0e6a513911f2068e6cc\ne15116c73310baad788708e9181509c687ddd9d1 3dcb17a2bdb2ee623506425691bef9bc203c0a66\n75e8b2f24e04332e62e1fe5deaa87034c66f4c20 785b7bcdd1faac9570d5f89a0b22a4e3bc6fa162\n623595b913eb5f5bd6bfd9a8e75692ab96481836 f1ad9b27531b635d821f06ac428ad0fc1b04afee\n37c93c74d1f51201cf7b3f97fdddf5932a380fd4 77096c46c8a19ce28a901238148038955af0ab53\n03efed1aed0945b0fb3578b9c19907bd41f1dbc1 850b05b99e9285e1fd0c268377ae24c8ed03bfe2\nf3fcd52d75e665d991716f7a529ab8f54c5bd186 9e360a6ac9c7ddb3db319e9b1f7fbb629502c136\n52fa4d9486ed56e89d62e6f6fb5c7d662e7070a0 6eddf8f6459c5130738daa9148729b49115ce1da\na9f91858cc62b4ce3f6f893c4936521149a0b168 b29721c5c3f4f876ac70fbbb6ddb01902ac55fe0\nf0bbba5b3e517d3d97c25b66da1bbbc24eb660f6 9ff5e7154a7a39e6d8f899de5d5f9a950ab1c441\nc646cf60f8164a204222dde5f648532eed5e98a1 76dea0c86a581fd3c340e249587f8824e3900e50\nf4b77529a4efadf227b12457e8ca35015ff672a9 73f5a7c0777217ffbac7fcc186c28be27f100df7\ne2e19922e31871ffe8631fa32232ca696b9a99f5 ae62f51e484b108fd4d66c0971ac5a32c1ce6d1d\n52f21458e19962883b27deff0646518d7b84c0ee 6f1b514eccf07dcb04ef2f7a3857040a0564de4a\neb9b00b357435b61c2afbb8fdd32e811509827b2 3bc26d1333a8a23930af5dceccc79efa7e5b3e13\n4a6662eb793d34b661273d2c5fcbdea5365d75f1 bb1a1051938dd32d2693421d30e6123a68450dac\nc389ccce302fc483e10b2bc00b19b4d1cec838f1 aea5ae80ded13f2ca761d770c4785dc3f7e8ca95\n9ad973e5e61b7c9322cbeed2c7b89f6dabe778f4 0ee39d747aac04dabccebef95ae5adb656e09a8c\n84e885dc0260a9edc07710f2664fdafd68808f28 805eb00c1cb4451dfd3a090c17959e71cd79f0a1\n235693e5c71ad4a95d9bbcc34bb350c85decee0e 03d0a7abb5d21aefafa81b80c77f234512b08fd2\n2ec0ac908c710f78955316a2c0620d9f51076a16 12be2edae21f820f5a574b0ef908b0c709ea110a\nd5f0bcc4c190aad62f90dcca38748b1106ad6dfa 7e65881ad00f2b3b433a245e052b8ea64a31f7ea\nd279e1408768e7e3443ab9d2bf438406ac8c66df 0405ba0e1cb059a9eab82c61ae85288ad5d36476\n3e356f679eb9f0c113dc48b3c42ebbdf71cd01eb f73fb9c40fb41152f477b5223ff9197664044271\nf057e0b42e38ff0562da8fd045878ee0db27ebda faf34e4699836764d4cc5e6150496f6020aa6b50\n83614ce69da3f85b2fac42865b659ce8bc29d543 88b434d3beeb5e227ea98e476fc5afcb478f3f86\nfdf1cb5035db91cff7d778150ffbcb3b06d79bad 1ed52fb3220761a7d96ecdb2eb67c4c8b4dad33a\nbd0954583f77abe79cf9c242a368d7093c65c444 ed226198b8b261ae6bb7a90bd0942413c356bcd1\n5847fcc2406bf77bad3bd47279728fad78fb8560 6632cb0f9b34161136fee119ace35f533c975b7f\n47e9392ab4d9e383f2ed1851cad8636d1c5a1803 dc29a675dbd5640a389f1599c58799967342362d\n54b5023c232123b2e39966cad627227cddced4a0 d0c1bcc38b7c86b294295cd06888959062610e92\n05b98c178fc69ae94243b17b5c68194c1e064cc9 996e447fecf57cc4291edcf0d37b028c40fe3ac6\n58096012981598c18c47d0968dcfce11e97888f5 8f38da7ae162919686d294058531b18980e20613\n086768a566feac1bc374a94003967dca1dee7705 ddd665c86162a869759467aab5b2560559da7296\n3516376b1caf6ee89026ffde0dd075f24fe8ea19 012a03539ec93c660f7faf6be28c874caeed34ca\nab82a0130a1d251c80f277b3a2f9b62097995120 6dd814f93f5861c25acce5ba0e25aa0f8cf6735b\n9ee05d28f0ce68088c4811e5887dd09c3fca13da 76a2d647bfc167f7175cad7783bfb8feaf100f90\nd5b8334bcff0bc13aee139f97d670d71b45e2887 f5cba737a22438ddd34e29abd52efc3b635b311b\n2bc74f4dd57ac83336f6ef5fba44c53a3eb71e4b 3d9ab41adb36b160868daddd4323085c407c9ea3\n4f66053cd4ca2f87a6cefe4ea179a2dd2929dee4 c3059737537dfcebcaaa334995b1aa53b8e78f6b\nf57db45ae13880a7231bc3f0f531fe98ce39796b 813a759362f07e3e16979e5d6e743ce52f41d9b4\nce9249db7a37703dae615726672fc455190d0813 96f79b4c627f89de511b7463cb32200071f8a643\n7cd80650304ea4009d5836c741611c16dc22b049 162c2b2cded6c1d8ae64fc77040650f6ae551110\n572790da8d1861f757ce7372d6d0b4609d9e1182 76c8c53b5354e9a6ed23010888bc81dd5715a5b4\nae475d5a07fa9def4a82fcdc4aaca1872548880c 1cce566be114f8a0ffbb528c0922f28e68eafed0\nf2e25c512224255e4b60dfb19563d2aceeb31f0b 3c9f315557d905b7cb3513968eb450e364b96275\n9de8aa04ce9dfed6abb837d942e5f0c1c3045723 0a945e38a5ad540076717399a054908d3d1880bf\na46e44f31f75d1fd7218a7573af5a0894982861a 5e62feb5568ad893c69f61b09279a3ee89a137f4\nda8edd908a29cd9699e4c0f67ff5fdaeef7f82dd 462b41ffb3863c1faf339e0babe1553f65dc2c6a\n8da238472a360d6fd746b0f1bec2a8c13ee5be8a dcb1e3bfac3f380495b8f3d8ea552c9559ff7b15\n048b51455acb8fe6f05788010bdf8113bf1931e0 b0a7a89326e4533db8d985e124c6d1e06c4abb08\n2e411f291e5a6e7574cd7ab80363e3c8d8f39dc8 74745a7710a64fbc68d0ee7f28d6e4708c82ec39\nbc5a8d5b8da7ad9d7e451cd5a9ee946f23649800 fdcb0edc24cfb88d79d307f28f1ef9252238d0a1\n33d7d44ba38f50fd066c391d80c489bf529a12ba 1cc345b61a3e7fd92a5947645826cb63b6ea3a05\n93fd9a07d4d27f1daf2075d3a20e87e8b2fa4b39 5e70d15949095c9a8737a94724d05f880ba964b7\n5dc90d0db26257c151125c83cc95598ba9395a71 7894d7867339dc8d2a856a30cf8de67fc46032f0\nc4bbefd3e4e94228d1dd79d1054b5f9e371cec6a c9b78b5112d7c2391d74ec8ec0cbb57a2056bac1\n8cdc8a821af1de0de242b7ed77d8f52907f7037d 1aa43a94e8803ab6978b38d4f509f342707988f5\nb75d96aa4ac6bfcb2052fea9b2c029e1a7d62f2b 8750bed80317cac6b2aa6d791116a568dc60049b\nb84048c33fa4f226b668df37a47d2060e9b3a7c4 9e47ab5bf751cd6887aae84d1044290ef18a2fb5\n2bea1f62bd8142ba40f938c180eaaa67e4c26825 36e41d5c0d2ed522175dc16cca00224bcc7adc49\n9b27d67783be8239ce489aca93ec051b2a0fb163 b056373a05759ec58172fa510b75387389737ed9\n3da7e62190996cab93b88d72ae226dec917730ed f97f01a317f65b7579c6a80fefff26524c56f2b8\n486bb2313bf90a8889d2f72c4939d58100bd025b 0778a3bc9ec4eb2a0fecac444c6492370a299692\n1c43bd625457700ce5246124b76b83cf578ce5cf f72ed3e26518522d2b01421d4a0cd386a3d9bb9a\n0a6c45c1a0b18cc51b4cbc2a20cb3b3724a52946 1286e5ca458790b8238efc9564d7656436654181\n992f79ccec40556c88c2c36f769121724168d641 9768775da65a1c841f8a3827d034e2cfac1b3ea8\n07c0a06727f6cba4b9b580df72bc76652c48775e 6422c49156f28b8386cf06a12800d1979beb2ae0\nfe873e53edd2348da3eeecc254858dc9b134387b 53bfb0c2a8376f3d7088861178180e5c398e8b8e\n75676b1867fe11d3eb61559971363531a262ebb3 9996ce0e0f36d4c16ffd187f1936996a38043612\n9471ab9ffedc299878b2cd879d96d6edb0e0d8ac e36fadf31d2c508dee3c0645a1afbe3e1b4ddb12\ndc3b82a4b14b65185130244f3f8263ee30540169 0f243ee509080c18e508ae32b3c7920debb4ac72\n473479ddd9f87c68beab56036a600e857805dfb0 9f1ccbe0ee9e13cd34d7424615947f2037eb7f88\nb42b4b25393567906a95a33dcc2f11bc0b01209f c3dd285658e1b5ec175bb524520b5394dff84a66\n48805146dde49e6af42f55824bb5ed27470e11d3 f5f1eab1532a90efd0293e2783bc54f13e0e4da2\n4d0eee3f7d771bee138eb00a1065704033f104c7 4e92af0649aac15b5396adf3e0efbb8466bebf24\n865886bd7e46ba786edd77dccf7a28d58814f90a a3b965d41efab4062218fbdd7ad87043f6da582a\n3a2e680accec476471db0e65ee031a3c0b38477e b978ffa6849ea23e39ab2a36cc4bd78d712d3cd9\n53aae9632f04c03ae0b632ab2d8f91d7828f0100 4e0c6f5db5ee89ec6586d6c97170cc2c07d50b68\nf3f437997350e650e1cb0518b9b0d0f55a543701 5863ac8cf51eeb2698b88a9cc1fcbde2705602da\nabf01c11f3502df209445030d535b2e063343592 9cb1e467e2646550126e26a01f7ed288fbea5978\n1ebb47e0feddc306643f914250b1421cb92b00ce e9bb03c8982dc00271979a433562d9daad55b05a\n28c63c9807ce38b3c5a1d2a39c15975e5c7f0865 89f2b89d55895d59c814fbde4222f118c750ea86\n64e28761a507f8906f41738642c4887dd3e15e0f a1a9a72de1347960003f2101d19a73ac9be3d6d4\nd12dc26a1a9443f9c35a09cb4690fbbe561a426f c916389c2923a7da6038ee85b364f81ea878b477\n1506d15e7d66f801b6796c85aad54327417baeaa e261f56962821f63f87690943f80ac7005851999\nb04772c8c768320ab3e5aa14034bbb7daa2fcf06 2c24390157c5bfe81957748939d8245138d51c29\ne06ac3fe85bb6a5bbde5ca6747d5ffccb7c729af 44639f12d5fcfb43beb816abd0cb3aab125a5403\n86ef0762e32eabd66130428f7c80718b83aef3f6 f18a414925d0d649f810cf02ba2199b2df996e42\n29d5867b2b64ecfd1b377b63d90b32d0f728e3eb 4ade2ac461ad5fa68a2f8f23ce90dbcf6074f31d\n99fed1d54c181192a3a5d73af6ba0fcf7d57864a aee05a50338e39a38a9f3e8c0cc73e843ecb7f81\ne949077639fdbf6ac24398002aa039d99ca430ec b324efce7ad87f700ac9403402fe2fc7ac1fe895\nac473933f396ae5c12980223437c9ab9add243e3 4ca198caa26365b52a431f02bc13d01385b434b5\nf195a630dedbed0ff4a83f46f3603bef86ced657 c1336d78dd3a965b67a572a9bb49031db11c65f3\n5b1092daed8747c50bb4c874c52b10ff003b0dfc 855486eb85e9f980f3e92a43022b6eac109f37fe\nc34ceb57129b823f408dcd063f57d4ca309b456b 5a771cf96b26c7160966de545fe1e42efab05e77\n129da35bae82e9e90a5c7a9e949a6f9682e1cd36 d6962c722f12f1ecfb7f63fa8f76730dac6b939f\nfe5ab876ac57c8b2befa172d566fd54c6d4d6e07 32d6a0cb093c5cba5f8cad6b4b94ff2fcaf55de7\n3dddb787eb2fcf70fcbd26b958b9fe66526b642a c357d7ea6a8b459e3fd9bba8dd563e6f7bc56ecd\n2a85f3a5607cc51497547988ca5c838303dc0300 ee40029997b72aa70ade282e92f6805cc5b6729a\ndc14ab46b58db704a71466b8b0bd545708619543 b55cb4793dac340b3578a05f8760d2bf7295e2d9\nd803c2dfe4c01c15e118903cf6af9b4f7f376a3c cdb4a2455357a9a4607189e6a4a8d58c3d6f2e9d\nc6e9246aed2156f7077d5162d224e37f43217444 1845ff8246d35c6474229a27317bba5a5dc16597\n4dc285df3f5eaf786789d3cb24416f531f889c5c f2c36bcd1277398a5ff50d248081b9cfac315b58\nff2219de6f2a06524566ffc16bb8b4f0db4714f9 bd5ffce7eb5164637c876892ccc14efb69b4b73e\n27a2115511978b2c835f0f4c2f44fb273100da28 0869d56d37543c7084f314dc877e93baea71a8a1\ne50dabedbdd73cf07b10122f17a425679c36e25b 7eb72345d1c13e87836d0768a50320a6c500a8c5\n72f0e2620fa0f38b4b970b6c5667ba3c646f5db2 8fa33d2b66972c9bfb7fae9f85ddb6e1c1fa1268\n1caaf25883b122a92f37eaf680fbb51a71c2fe40 e19768da37d4ecdcccbd52753b3c3cc71bef1e43\n6ebbfcb31b62479ae04299b66c3cf5e396c32ae9 89e7cee3a2f8e3da52927f15b6c601c2bb596b99\n156e95827106b351c3765f2b1464c65e59984bf2 2f580b884477dca45bb574dbdf75375e6a9793a3\nb998cc4a6619356007a0b84fef599bef7dfc1170 e0ed14aad3e5ac3cf82c83a2425573d55e87184b\n389f4beee54fbf08867fbd0542681293996c2970 779ab7bca20f07b015a65b33f932021606e70b47\nde2816fc4199c09d249ad7c08190ff0de79b7499 8a39e57d77c94798200cf12a636670f15e471355\na4e2c1bb3ebcb9bbd13999576bc05f7068e4e782 27fb9b5de7f71cc8042aaf6f80564e64d8e54f4a\n740026796fc67a67408b3b72f47fbbac7284cc0e 3c759f6250c74a44e39c364506e276db35a54a16\n84335741fe466e1b95d4943e71d57c650c81c445 29332cd99b42f9f065d60eaf6af2d6a44f8a4ee5\n65f741781e316520e6d93b003dc51f9b58d6c598 cb0c807bf38f2d863922fdc88b8f0e468ab76cf8\n205471ef27960202f19fb6ded5ae7db3d837ee6a 731d580a7b2a4d1bdecbaa585f75a8a787a1780e\n2ad983ce9d76c6c7793b08a86be19c7040dee0ff 0c98925912792f24241a4d2d5b62054c3973ef18\n910dc5b15587670ff04c9bf9a79f597b0e1445df 87db06a2ed584c63c87260814b7cf5ae6f542605\n275c2c61b24ee9f788e5ad8370f1d1ee88cac147 fff97a548e31bbccbbd3786855701372d9318ced\nbbfd7bae22c3c5dc4b8f02d585b31b23fde4258c cb00c0f4d43a7bdc5f59dc908daad89ac9cb16c9\n2d9ef353bfabf0b0f430f743f3d66c55b17882dc fbca6d2cce1ef20eafe692a751dfd3848d51aa24\n0ba49a0853920d3cc885e5094b26a9acbea6f458 9c9c90296ebd15f824bc2d819b00dd7fef33aedd\n9cc74dc912d2da37d2647484b9dad14ccbea7a64 66974ef3b67e6eef11de896c9a498f8d5a67cb22\n3bad08a17f621174cca7d7c1e2d95f2a6b1b7944 4f87989b0777f43c5832f3e9e5de25224dfe42f6\na5fc9826cfb776abdc7468bc11100741b86c8b3f 23fdd05fbcab2f731d12e90510760f92517a436f\nc40a74886e37fc36dd1a57e9d005b07305b8e38d 577538118a3134a2948767a0730af7b51e77504c\n50f0877b2053def24ce4a0f8d09f51e5ab4dde55 ab029cf18bb77d8dce34b522bb984772c8184c5c\ncd5ef2f1f8ce7245ac3205aa1a1bf6195769aa87 80dbfb0c499a5589d6a26b2075b9c80a858de8dc\ndd313de79ae55400f4e5084af26de57aa21a2d7d 3234eccddc97e271b7b7e780c81744f2cc724476\n9e9f98517ba90498176e3e94bbe8fa80730a9dd1 ecdeaccf59a73151e1dc5e12c2a2b72c76668201\n07c6ab676273d31291e28a244072f4c7dd44b2aa 826edc9d50af28d81a653c31fb18149af752aa42\na0df8c0456023f5053baa1ed35e09db8a4ade70b e74101d20f1876e962cadfac028e38bf25ff11b0\n89b3aca9dfa2bac9b20d5c93e0eee3c748f1f8fa 9b29fbe1d7cfcc74a6d2b84c258910ace99758be\n57ee536dc30a60ef4a8766c95dadd993df15731c 62333a964b8462af56b1ef0df405661624f96ba8\ndf623a58873a5f6b9bf194749afb4470e3477eb9 c06b70cd04631e6af15749b57cc2ca7242c6f08d\n5d8bce5ebc29b39ae28a8f1f2181f2d5ecaf1b35 984f2ba811fc3e01d31e1fd9c8ef4c4d9f6499fa\n724697e991bfc1bb640882ec6b23d0718e64bddf 1670de01853e5760e467ae77180d84d9096d4dc1\n9003cc00bd68f8d2a12e11fce0a98cd9df728ce9 396d9d36a8125f490f0e48ce9531a5cb6bdcd750\n8846084caa73c1b5af488cba80bf8c57bb35de2f 85919b2c5fc58b243b0bba583bb8049b9c39fc28\n69d174fb2681306a65fc0a2bf9cd3cff051fa5ff b4a459b6e939bb69a076aa072e500ae8017798d5\nf36022f51162f28dcab3447d0c35dc9c359a2f47 c33127a9b8fef33e9c2fb2c51ddae8aa3280125f\n779f336cb7c724d3d94e1db88aae2049327aa44d d9a406022586654637837b2725d773796099b6b1\n66ed316638b1ac5d542dc7ed00e5d345e5feb19b c0ea5f8d0cebbdcb3d98ccb087d3432899c87697\ne7f94df73cfa49dc9eb7c1c8803f4466729a5a05 473edbd8d7034a6731a04d585271db9afaa61454\nf05de9d401fc883c132cdbed028776041f17c9b1 4557b437885709699394f81351eacdc62fdec63c\n162a2239225b4fe733611acd4e1a78ce9c04a204 1b68d0028b34b24005d3a099a263c74bb53ea0e9\n95a38bd3c2dc44919914e4f68afe1bff2df769e8 5951070582af7a1d776af6200e07a01cacbd9fa5\n2ba42b05e6530917f6de0edd974492e245fec376 5b2987d05966e9caa366bdf3c265f1a49ff53ba0\ne1add481b60e4001803f30981a7e50bb1d3fb200 c12c0f2fef62ef578ddd9397fcecdf1b370651d8\n1e892ffc7d9a17725ac369682132e5fc0ea86243 79191804d5cdc1d3836e55c73762c3ff6d5303a0\n2632b7da21b0132d05c58a657f15e0f1b7b350fc 56f2f2654ea57cb89487db3d5130f0411c61c0ed\n54d8d7e964372c1e76f6748bcf5849ff1df5390d b61b929bd0219750178221ea32abf6a5f47f7deb\ncf0bb4ad5322b0398e5c62ca9c736da7423b6767 49d05698434e5b114990ee3c0240af067d53b253\na40b6ca2572a36bc728860f57ae30d00485cd8a0 8eed76300215c3782b29df8a108f205531c3b5c4\nbd918d1b979bc528eaebacb0057a21b1135c91eb 325213e2b6141023cffc2acc2735bd51a1eac7b2\n734ed7b5dff6ae488adfab1944773cc1ccf58cc4 3821c98651aaaf921514d315271e4e9b8170a3fb\n0233a12f89de4824214e11ab475b40b1a671d8be 0883735b7fcb7c96458aaf760b579938ab90b19a\n9acee0b05d818ff223608ed54605a872768c3e4b 5ae4527f44fbb02d2e8f9acf07d0abc3a7872638\n6ab89f5d4ba2619e34ae21bfdfa74b48f0899724 5465d06477caf9c0710d963a56cd39834ad06c48\n687455ba2c3f1cab38e4eb6e3e3913d17e599031 e58bdb5b78bfbae6ffb95684f0e89c9e2737e3d9\n26a10c4bad2dead13774f7d0e6794389c9431928 e935e3410836999f3ffd678804bd124b5dff4d7f\n3c5824392b6e03b74ac031aabc9292b523e6b7c5 9d8c64520734b52f9b1e2e022f459d0b53d68fdf\n8b8a3e81216721efd14ffd3bc7564d77a41beac4 44c8397b7677adad2ab1e9024fe69e49ae601af4\nd3289a2640f2b179c9b48b5941a41aaa94331d4b dbe3e33d0162b0e31124ee7f08c7c0c89d48a634\nbb74d968702be10d3aae6a72a7fcf8bfaece8330 72ac9a523d3ab6f2bda7f402c2a2ad5b6b059810\n07285b1d7d70c1f9f0003e4324a855ba2e61b876 d6f3c3203f5c763a010ac7d545ff10dbcddc1fca\n9f0bb716144037b9288c91db4714cff5a7e087ad 1147907d00339f07b09f66ac5c96bc3b66278349\n41c4903d47d0f6014763e6d08c018a1559b280b3 f543f366a02e6006003704f84cbb8773a8893a81\n547dfff6e1df49b409b18f75af59339dd16a5b48 4acb954a451c6483b237fbfcbcb29f3d2311ed50\na4139324747d7d91a71b32bcb4fb5102c650ff90 0bfd148492e180560922287e38952b2d320380ce\n2132a94f9faea3bcf106689d9283928d13639a6a 65185902697f139290ce974ab6c3374e051126bb\n71247bb851de797a6cee97d44ee2a62159a5ca55 5b725baaf4800fd7ecfd74f30b058432ba3f8312\n0da67aec08cc4bd95ca19837fcdcd590ab8e3037 8c4148242e3a40940c2fbb0574247d204fc0f854\n67e1f01137034d01a56f52a9790d7ca0a3268da0 6a2cae4a698ff7f69cb753419e7761a44dbfed54\n09d807cc05a7702f1ed138238f57113598febe9b 5a238fa7979b251f30de34414abcb4bd6d26def2\n18fc59cb85d932002e88c510d5d62a7b5bbe163c db54c7fab04e9f70a15b14e1006e5f5a9bd0bf60\naa202d993677fe7fae8095e28498f273cb8a5ef3 13f44050a06a63f24b1f310a57bd96d59d010e98\n3ba2616a82a7876d72fe8457ed050826a710fcc9 2747a38634faf9ac882f514e467708a3b778f82e\n4d84694e70ecbe51f545711d6929c8a3f50604fa 08559b6ee6858a82b2247eb97c0b61706b244da4\n207e5538d1e24f58fa9383c155630128f11b4776 b21e84f9ef24aa146abdce08463ad21dcd1dfbcb\n848f0192128d1f169e3305c21cd5936872c1b505 56c9cd20a31b9a0072e5073635196d4dca05af81\n53969d9cdb9426a8218c1204697b4e479b4718bf 40d2c4a752380f4781c481b795fcfe05bd69f602\n642990c9200a8fb0ebb6e205010edbda14ce774a bc8495b70b99fea3451cccac9a0636f7debf7409\n204514a9dc8cc16517f8a373db60fd3726bb6796 ab1e2d02e4a66c9cc10726f8ad3fc4aa1a56691d\n67afedbc0dd745b5cdbad580ddca58834792e039 3ca2d0771154921ef71c985bb75a88462a4647c9\n2f5bda39ab04f608971493728788da8a94335a65 d1f39783ccfcb3b1bc840f8f8a471407d1122a3a\n1f7cab7a5be9545660c351825639a190b1927b55 f9a130a17227e2375349ec9e7041cd44949a7343\nb8426f5383e1c04d7ae1a4d87c53a7cf0bdff27f 2c910872cd8fa72f08bb95ff28b143a14fd82413\n03e7e14d9137309068b4ef742e99688a62032f80 6f8236c97018055b7a6d567aa1a240b25ce7c665\n794ba9f9fde6569f4dd4e72bef0b5c99497a298c 9f319a1e6e7023da1812f8f5b0ab047d83cd3694\n1b848b0d73ef06c0ab5b754ebf037a01312c8948 d8ffda1aa8824e670ea6e5ebdbe944fa1db97e83\n58461f3b727bee92c1da707bc4886047cba9f91b d5d3082a2c8c3c5d9fd0cc2bcb3ce25c0dfca8ac\nb22b36515616c6251aa85102cc52368d00a63658 21f0b4a32388fc2ed203d6235cb89ea1efa9eb12\n1d12de5b9d5783fa5caf5937dbd342b6c8a54f4d 311a29b9d9b2a272664da01ebae91c40732dd90e\nf861044b71ffb11951a5eda4e990682729949326 a06935999dffd63e7ee3ec518bc60f4b14e3bac4\nc3313786588368b67793f7774e84dde2603384bb 5777b6d4cb35885fd548e86113070ae8a3f6164e\n053985944e16cc93204c488e9d3cbc1f12b02f0b 4a627cf81ce5454d00244f1db9a7b2d3ddbb69be\n0decafedcd7aa623dcc52403e8956f6384f952c3 568cf095a8c439676813bb62b7ba92eeba9af575\nc9f5b589c682e11877567bc08068717fca7da888 950ac171572720bec6a0ead1c59ed7a473afe2eb\n9bfa2690dc3676c7176d65e9a1e8a0768a1650a7 0b100cbeb01b790caa6f79517999e9f9e450f078\n211b97fab0260527c47551032aa34a29bb243968 b950fa0019f6fcecbe11e8f085cf906e717d8e4f\nef4afe6939e8d548682422ed603993948a7d706f 1d2c880b26ff1d930aad22eedb86cc4f8d32380a\ncd6a4990f5c428bc2183f32602d67b9c1dd9fb3c 0e7c356db44161a79ffc8b42abbb18efb894d4e5\n5eed5ee74d41ad8bc4aa257f434d8482859dc81c 48c9d385db94fdc3dfec237433754da0c62be5e0\n132b25762413ae4ec9cd6578b267d6a09221598f 7080297c1a7117ff2e815118a0302850bf9effcc\nd464a8d2144e0f73820251c1f189e1bf8eebbedf 54a52f6653b09285777b00990a98aec72f3f0a86\nd0af5a8a0d6138bff7b7b14484c8ebea677b23a7 e60d3bf4c39a4d4026d113d09d13b11467eb361b\n546ebeaaf095fceb21588b37750a8136556f0d21 eb5ef77ae75fab314701b9dad72b1eb4513c78b6\ne3282a703f88aa98617661f761de45dff813d290 e2a428e5feafb597b353113992474189822cea91\nd7b04cfc06690036f4bd7d6e2b4e7ad17f7e1a84 ed4d9c4e9fddc76ef3311e9e682d6fc0a768d644\n92a6125820ac585719b526aaedfd899cb26f9272 72091ec438c18dfb1bcfa86c805d100858e1160b\n4a4301e598f6eb2373bf39bb58b245c3911b4a61 5e831b45e60f7d6792185e486952e6454488f506\n94bfa9a0c12fb6e775319d9fcf7fe2a6ea740b72 bb082c1c9d12f77c5e92fe60a0a4ad188eb97f20\ncb2c301ed70d4fff7888c45e9d86e8cbf708b6c6 7729ecbd596e5f334e27af666bc7be48c19919c9\n0c1c74795dd18197b62bb9aa5fed13a09089fe67 f9468edf9544ce7678fbb397c1a6ce418cedc493\ne43c37706049eaca4c8f7a3ed14efb480a0979f3 6a0fcfc98e1ecbc13381de3b44a2b2f8cd87eb67\n88ad5b5e976036b123e89f1108cd153ff7dae473 ba039a80e46b1ba49f8a380e68616b74abab1f57\n7c95cf44d2be2d2f9dca46467d0d50b97d5c440f 35943e94c0008515606ec3f470ba4f98f8684990\n06319c44fc8b3d0c7ea774261f541feaff39687e fda6b617e396730413f76faddc1f9629252f3171\nbd3efb8183800ec0f5d39a708a6ebb42a9451ab0 5405da7a042c3ffd5c0fcaf7e73ecb9e95b52654\na144d38cbcb2075a86f4e0aeafccf10101cec2ec 11a02e3d3366cbfbf3dc00bf7e7a70df88b38ed7\na4ba5c9621f62fbf68d4172a223caa5d87999591 27f67d730dc7e4fee56f0635e6f0c3bacc9ed14e\na4cc0ad3c3c85ba020d6c1d105bf775a6b8249e6 e2cd98c9e9d6da1072a26d3cd5b1dca701061830\n286f1dcc0a60cd7fee7dc4acfe23d3919c6adbd5 0ccc94b862fdc13f7c53812a514c9497ce4eb749\n67ee72f05fe46c2e2f8ac134327c52a25bd70a2e ada9ad3096175e74704932f77e7d9e805d671b54\n25951e0768196eae66332e19d668e2f48315d16f 42c2aa7f0761ed9d260ad95383f38a199a736091\nfc10db1c2531726dd6f1e93e649c4ebb2f668199 9efcb849661f927c3cd49cdcf46d255e50055c61\n6329f7fb7d59799eb65ad3313f833f09bc39d2d0 f0487756d692e71ff249b86e694592e098212eb4\nc7469d4c3655e239b7fb936f867523fbdf82be91 07812820d06cc71fa9f7966f1e480514b6c82858\n04961bc024dcb7e1274ff2d336dfdb6e85f5e78c ba3f00958e68e11ba5633b7d09c0335be0cd68c9\ndd718f24c465658fb6c8e8cc33589575dbc62ae5 2da68aafe6bce3fd5055a801f8731c3cec5187dd\n8eb5d4198fd46ca72830c8ccf258ed05604d70d1 83d18021b157616eef22d1cc70bb01bef1cb0bd7\n7152f3fea7e560a2404bf17c9011c1f5feb88f9e 7d0729e059d64ef45da118258aaa3b3089e28cdc\nd995022baf5a39d559662a16873fc782080e5f11 cfba8fdb8a7ddde39a9c482fe17324dd1a70c90a\n50d3970aaf40c8d5207dca688bca2e3a203bb270 0dc4b57b7be1ec924b0eec0df3e61bbec4dd2540\ne94849d0c2af2fcdafeddb7011508c303ab437b5 06b0c1089d8d57c435ddec4dee09224ed7370e1f\n8be6382c54e0bfb207e336557eeb97e3b1fcabfc 42ac0b302c095d5bd01f3b027e1049283043d4ba\n39e5424d2faea57335c61949e38b9b4f23484afe 324a3b0ab84445ce5a75a580c15e1d1e9bff087b\n933ee7c7b3779a87ae965500c859068050e66d1b 0ec44f2e476b985da303a32c1246ace47ed25157\nc07e1999c79700b4b509a4eb33a18571ff999cea 1c9824efaa530e8de108cd62a1f2d20c9766c9bd\nfcafbfd42ca2ec4c9ef22bb3b8a0d619c859ac52 5cb6c616cb8f755f064bb72e3ab5f43dc2bd725a\n8333d48ef4331c144e8298c66cd6227ccb86516f fa64158aaa05556c1ecd0e769957140d80f81f72\n8bd51c89338977640eefc1c4e96e8deb7136258d 447c55505bc441bea18ecf8620bb728ede665fb6\n9c640bc76acefd647887ebc846ea9926ec7a9d53 89d19d3128c00105542baf5422b685d493b0df09\nc3eff4147d90e586f4592a3eb08ccca5752b1e10 acddb14447e0c3c360920bc03a499e0a9dc3527b\ne46c47c0f3379277f3b94e176744e1f1e2ef64fe c0133d85ff288921d82624735f2433545a8e6841\nf403c7978b51f67e35947efc0e52f8106e83b753 6b57497a47e24726b74b8ef32c7b38bb82fe2d15\n79eefb286e117598965df77d062b86b87f0dea75 440abc636044a3a615958615084e66324d55b113\n98356f24be39c0c08a62a3919b5b8e89b43c9980 90713e029b0d1b46e16223af78569372926eef23\n0efaa06237552b69547a4afa89689568a291705d 9cc96750a29f201f9121d41beee16fcb379b29c8\n71846d540758386da8ee3d5b25e8f22a9f9f5e67 3acc2cf0109c0ae6a67855349c82e6c11253ef3a\n960e42e5501b79d6c27be3ecff01b735f60bb3f7 f3ad49093c0af97bcc66c6fd5225b5f69e2e202d\n5e63ab202ebee7b44266badda001a19e5a6a14d5 d60b22a42b42d70393972f502e5eeba6b208bb5f\n11f44fcf7e988f481afb62e6c87c3a9c776d1ea2 51f13e5dfb597e91701580c8b5ccb28b65064b9d\n344abfa5d4a6bb4594188b0622481eea6eeac2cc 6a5e5937709d0abc839a90e57fa754c5879f6b14\nd93a7d30ee341a6290ee96ec0ea151f7e46c0c70 3bbfc50e8b2ad3096c76df32cadcd3e6ed1795d4\nef5e53bce540858835c63e48b92a55fce8626205 febbced27064eeef3ebe03d8857416841ef87705\ncecdb23abdfd949c9fb96d6ffac78cd479a1cd47 79161b8a6eedbca6e923f01d10b0907050124231\n1eb1392902d25bfd4670fc0f001c54c7fc7eed64 358622e9b2865db893ae4fa5c3e73d5525783449\n7111a5719e1d3b37434cc270694519102c6c7812 245452c48946c60b88969be46e3681de8b46cfc8\na35fcce2bed5ba6747e4e4e26ec182a555429c0a e46dd8c45c5f3119ba5ab88115947a1a94ee3329\n7dcb8158b5fa7ccf17cd2998fdd18f64488cd526 9f83fe065872b10108cd27a5ee67394990c9330a\n64393d60df19e9f6fccfe4904eb0cb9c7ce8438a 33f300160ca91a49695149a4faa552f72d0a6509\n1101105bfd677e2edfe0242d0417f85cf51f2e60 3f3e3a575e8b888d55827dab092af0cb1f8a2483\ne28837530ff595a6919c2c6fea1d1fc781f386e3 a3ac6276a55b6c1c6d16dc76e2dbbf8a65780889\n059a43bbfe189f400e10861003e493c34740c4c5 60dcffbd4318e2308ba8990bfbfbfce40d88fd58\ne6c88f2a7e2df04558b553e06c59aebbd8923d9b 9f61843b5a8ee4eb60f0e8e0560d76170ed6d6be\na50f44ae6f149131e06ded323d991e48190a611d 27c2b1ee9b9ab95d1f79d56615f475babb7e71b0\n018c0aabd9735f7de23d8ae8ba04228c8aa1d4ff 9febf709e7676e9d57f1ab14d94fa64021d18d24\n4155e1f22547e91bac6ec548e3fa0f0b4ac88752 75fe07fb41d232933ac48883d358c928105ef3f6\nab807b1444eabd73cba04e0e7e1023b95bac05f3 e181b572c060af0e7020e7c0438a50cee570d1da\n6272d97a22c51d6c71e070b823d731a036fe5ec1 31d34651bdacc6b18f2f34e186695b2585879129\n3780753c3f00d3c2d5d2ee39ba3c2e8ecdf2f9a8 71fb4e42cb7937d0d05fa4c4319812c57b2ec9b1\n3beb71a70bfe5f1acda0e62f281ec13018b5ea16 4ac3b1dd85e24bf23d078821837da8612273f3ed\n890e8fdad1078c639b6c432ab991cab1d5efa2c3 f66e58df3b99ddfa3967944b8ee6fcffc94b9dba\n1194737976787a8251b0d40a75b6b0796ea5b9d8 ec16b7337e5614532737f2a380f9db230db9b55c\n9449d1ec5fc2ea53964d6220324d77a483392fbb 92c7f621300b03260b5471cbe43299cbf7617c23\n78a536adf74baa98df3420ae8d338e0ffe652f56 aa711460017177d4b014ed2fe2bf5fbfb1ccc4eb\n3880ca48a2bf035946d773872a5338e88ba2f096 fd205d918e5496e4cfeb9a10abc51d83dd50c4ad\nabddbe5c86b5791a69b57b20fd4b481cba8a2097 9c452ef4a9d13602f9c49c7eda9a6053fd02d89f\n5b0bf582d1c58092e702dcc0666e7d1b00122f79 e354c5797121f35b743af49d4edb44ab514bffdb\n30bf43208c0dc0b7747e8c51fe40f4e328d3bef7 41120e308abf9be6dcd680fdff6beba296e32522\n617029c4c64261eba9896d140ee7688954dbd2ec f6e67255456f58c0efa43a3b7743e84af3042cb6\ne3c0a5419a421f74c154a9219388abd1da9bc9f2 bfedccac430cad71f4a602eb1f889129df1ba594\nb93c30ba5a74b7a9a74a0a7374bc7f2efabdc9df e7c30d27a108ee5d6c305314df08654717999820\ne3064e43a14b16b0de101c6e90937fefe938c181 523b8efb12b9e58ad5e51ba123d6c8d88b7747aa\n3ca9aeebbc45ddf110979a7ecdbaada0960b0ac7 6e299f85975478ed4f7b5bb8a87296ca91b8d6c8\n35ea84e2ef167c226bb347adc6b8d7c9d25f776b 620429d9bc5157687cec2ea54b6a10b345bd3c2f\n61f6f244b7212eebd9ad36cd41a4680941956df8 3bd9e3614f8e84f509c14897f111424858405fbf\nd357434f3240d7d9e86f7f18fb131d0c7e2e223b 0c3684b2916feda9908a8d2d7285d28262121a91\n47df694ac19ca08af50725b22751dc94b85abb34 492298780e4220061a8ec67d2dc2102635e51f33\n94690c40e2c4d9482b114c702f8fcffc94c8fec1 99ab16702540ce1b921b1023015e85d20484fc9d\n3facbcb19d4b4bd95a767e34f1ed6e291d9616bd 969e57d70b01ce101a2e432354420f44abfbdeaa\n9766b877ac7e79772f2950840078bfb9502c0aa3 ac01d2b1962f55c249aae837eaf722dec71b1a3f\n2059b3174f9c75d4b2645a78c64a0a191cd14c90 5063b3bc23352010d4087f9445c391323d4606ce\n23a25f7bcd0f99b67165421eed7222a1c4df3090 69344bf2fb5ec0dc0358ce8e6e4fa59e031b7228\n26eb0aac5b48d0fa889b4340a22dc9369624d2e1 91d3dd8952df0a04c1410d57860f78e6ee784d5a\n17339d192615194767063261f1f961832ac10539 b00fec28431c41c955b50b27c433036b2c21b635\ncdb0e38462002a36f9c1f32ee3274e75217e3605 6796213ac9f2f754ab6c874f30e02b0b4b8bf0c1\nd2446225011bf2e6c00a946ca89ca6bfb8748c09 030b3b4e1ec31a39673dae46a3491c37a96c9eb9\nc2d800867ad02e82b3b8621e868b637bfa54e891 71414141213aae7b69f2928b402016fd4938f7e3\n599537fccb13bd6564c8f94c6343c6e591730859 26170467fe73b1de1af39e0183f05bd11ba4db6d\na1e8a1d0bd61d579f958b752896c8d1af057c542 cfe29808b1d1136800219f5ce4b626c04968d4da\n440d40286b78190c4ca7dffd7a0bb7d4a7f3b33c 1eee1e7156712f20e5f4e83967d70097a3ad83b8\n067b1c59e6b2272c4f763c94a75562ea529388af 4f1e5d74b1f3966366a8eb5ad3cfc898ac78bc97\ne62a662489bbe2a9124540e675ca1dc1a56e7bd8 ef4ada683ac1cab6c156b8a32dbabebba5c5bbc8\n8ee53ab859aa39018d5b6ca5035edbd8201c66b6 de2ac25a17d86b15504dddc18b75abaca5ef4053\n454e06511e37efbf4456039b9c4eca5f40cef670 f1c02c013f0c7fa8f1353931ebc2f40e2073fc2c\neddeae988a9359527d79506b512110b22746fa8b 8091df37cf29cf568d6a8847f04065d1aa646a4a\nac71e80af47a7ad64689aeb477022efed3f7b54b dd66bf2bf8973235f8cdd98085300b832aa3c457\n7df1fc4d6615857504f6d796a9302bc3390c770e db6e4698dccf45bc3cfe9f6b9678e49386880506\nd6423d4c28c50a54a480e140b56d04ad3eaeacee a4cdaa0eb3a40994d9e5bec0afd4346b5052e42b\nb4e7c806c2afe2d1ff0f569061f213f683ef2486 8470e34c7736faa57914f4bf043a7491b07821e2\n717510fae8aa0a1411471b3f183ced7a315a3006 299c45c13bf339225b7cc39fd74febb39cc516ca\n5df77bfcfa1d205ce7ffdfafbd9b4064f40d07d5 6419dfc830f4a7402b782c1d431eb926c8c508b1\nba1ae2bd49a6c283e759f593532e39896c24f1f4 a0ba682a47856c44bb30104a0fe9c0c9ab322588\n86a8bd591e387ff1df3ec1d9d364db94d35969be 4e49a9f4481c2093f11a7644033705aa70489b52\n923f56aee17b66ff3069fff0d447770377275614 8692620643e1d2aa29349dc687eb274b6a087d80\n096de7a2a8acaf12f9855f5568524f64c6017e42 14d2fbc383de415ed40af0c355b084c6be573df8\n3006aed97c9a33ed40c960caebe0963545eaa2c4 b8905ad963a35f1683c9a60f808f6244143515cc\n2df93dfb43fbcbf94c95672a14a9b3a8e315b785 ba8cc5b42c0100384038005b2f6d4f0d43e71bbf\n047a41ae121dd6474ed2b14f75cd5fc9eeac18e9 67d68626c8177d244af92b108dd649db8c8d19ab\nfd06f911d356469e566f16029ccdd090d3b249d2 ef8fdf75b9651d86c94012602f50fac2384151a9\n180c39dadbca383b234b520ddbf9cfe410890c36 86e314008453b27fb796303fb6dba827c9e8da2c\n60fd2804ca003139a735696f05a8763be9469db6 7e8e0f3aec3b1a3d1a1d58083d65feec67f6b7f4\n0a2526053904405acb5c6fb95dfad8a8d48310bc 9f68265cc3053b0117f948f11cf5ce0460b985c0\na335dd60bd2b6025d2423762da656ccd964c32cf 8cb72f07a76aa4df7ecb15187c1dd6175a89f306\n34a57179c673ff42fd7af4cc1113e384aed08529 61441b4975c43edc1e5cae40eaec5af7f39ad8f6\n864c900019e559ffc456952a64a2aad0858b4955 87cd2b79d82fd0552e3431298ab3a67c67c21abc\nc40ff94690d08ebc97db60ee65fa8dfdbcaad86c 1a80a342e319f859b16859596e451d7ce28f1af9\naf4532dde1e5bf57d6065671fd8c9a2c8324ea2f 43038ba41be1f0783ad23d8e12881569d217b047\nac26d7edb768d2b0c457a524ac3ff4908544bc8f 66faac5272f562c521b9c2e11505318cc62299f1\nf209ee73d2c9e6273c69f84e9530315d25d373cd dedaeafdf14aec5055d9f005bf3b1f0a2c186a65\na2793252048660bc5501dfc70062bb39de0b2c77 aba6c52b11fef392e401750b69eb561cef33518d\n500ebf8b86505eb04c4876a39a9cc08b831d0c0b 4de2d4dc073efe08d010f9ebddebc9fef00e4559\nda425527a030e4cd7bce5b4aac6bee5e2f529a15 bf869a918c308136484c287b6f3309dac02be2d2\nf5b70da0578c94c5b3beb9fcc06a07cbcaa81f66 194ff6a9cbe419f36a848275542a2bceb595c879\n029b4cebb735e2bb865d1d55993eb87123dac11c 5357bb98893b58f0799b433804e831a186586a36\nef10e210bc6fc14d724154c473f9d65a34a48d66 40681cf0d4207436469b7269643f298517ce9d79\nedf611889d53f2451f40fd6669252685a5cb6217 766b03de3173e79f2784d4638a4a3652f5927f42\n85db773c5bec471c2040641a3a39c2c76fcadb0f 81722c6e1487f5ecedeff1c1b4f911f36fb21759\nd967465209a6f3c7b60238b5b6c247262538de1b 83148d65e6ab92c59bf93fac77e41c941eb2b60f\n0c8ec1a87c0ae674b9b13d74d420edaadd4f31cf 7d316ee13e5598a89b7c45f7977b3ff9600a4632\neebc01ecb58a18e347f064907e660e77d455d6a9 7894191eeea33d7bc287f78f9bac448bb1bd2316\ne66fb74e07129b27abbec6be0e89c5f5cd5745a3 f08c0de7433850707fce07ff24af2e2760d0f1c8\n35489e1efe9cef55e520f2ad22ed9c90767142fa 5fdbf01ff7b09a32404de28450af4275406e6efe\n72681fd14077193a6f1951fff19414a6d503755f 598be40fd0e38cc928a6ebc9a25b5315bc229f8e\n68012f7fac241cf9062e8ada02a1e7ef9152ac3b b41d2342aeab7dd84d19cebc30930dedf0eccf63\nd0b216c523d181aff40af757452b427e96b1eeea 54e2f0064a813cacb35efe03c87cebf6e508eca9\n2fc174a2900277f960fe9342b5f114da28147a66 556ef2e0b02a78ddb03fb3f7777af8147e0868c0\ncdce7a014e4ee33f12621415df8748c2b947bd79 78bc49c3eedd6da436d94d2f0f5a8fc9c66b92b1\nb7e72abc47b3ed8a75dbfe038140b443d0169666 dde7abb9ae32d2c4e1a0aa20322d493e2aab688e\n83389b31d0eedfef70a42f002f9cbf3231658635 1784450255b777437fa48cd86f0cb6f2f9275922\n2f3a9ffb3503babcc9d6f67293ba41547cb1c3ab 3e53251a0327d80367b7fee31f26716747113246\nd60e58be97291a3352b0c226e49ea4907482024d 6c7935a480367c6378eb7b4586faaa0fa2755468\n6032d7b50de80a8967ac84f4c12e5bb95bcd784e 767f5fd18c81448957c748e9e8cb747428b8ccf4\ned0ec056c29600443dc79d406e89862d529bf333 a24fc2d56a3163469ba18c0d03785c281948f265\n0b1d73df1433c2bc2a6761d8d4734f582b23b3ef 2fbf68801294ee6fc44aa09ecf9e08bea448f84b\n33ffd4fd5f470de9ebea1c4352b78aeef0e0a317 b2cd1a6ab9fa31ff8603aa45c51369892a54bc51\ne20b16e99e602d3e7d79876e433af8c2f5cbeb6c a953e6d0dd499a5e643c86f490040630faf34a7f\n08ca007d2886fc1374aece32a3be7a1ced5d2e0b 1df37e3cac70e954174bface15965e63744eb0e6\ncf86074fd4b8c1b9dd61ec39f576cf995dc0c95b ee91a72891e5e80e5999281c981e672128d1a3ef\nf1f2eab8f8c1b31f50510426c1404f2fdfe5fbab 86ec076869a6c2ae873cfff5ba897f5c37b911bf\n7b541f2ef694027ec5540072aa13375c95a643a6 04f1c88df2d7fc28ff1e55ce2369c2555a4d9d98\nec275e92a67239240c9532dd09b2080ed660ed04 41a2bafdeaeb27ea3d5c37b17fbac34083b8ca79\nf9b180d3f037c6405438ebbab8705a4f5b14940f 2c80239242697d6f45d78c7178a66afc6c3ccfaf\ndfa2e643a5990f28ecdd1c0ba313d5c0a8792330 fedaddcf1d93ab67878b9c36620d6a6e5799055f\n17a5dfbbe41b2c4e9655ec6b068b1e956fead536 a16ac5d73302ae264fe9ce21a44436faf47de483\nc4d2baed5de3ec7f35f1beae9b4406b2c117d817 b72b3496d48ea5c3fc0ec9a10e7030eccbfca12f\n2d887f980457ad1e0fbc08a88fed32d326dc29a4 26b3dc6c80ae69fd3e5ee7e89a5840e1256646af\nea8378fea2d91901cb2622417beafde0918b3206 630fd339ca2378050f1325a63e3cd63b73e614f0\n11ffefd2977c1a44bc7f77d09b5f61873fd8eedd 4a69ccf4516e4ee356121eee39875763530048ff\n66f6745d1f24d734909cb97ea94ca989fb7a2892 699ad3d4ebf8b7415478e82e151585a3a9564067\ne23a76b54fde9ae980d6b5822f5263066b81756c 5b5564fb34ad5988922879bb26c9ec4fbfcfaf70\nc1ed7edc6f4059ab43b29a1a237c94b7db01a80d 91158e36918359dbee8526188a35af4da6f2d394\n0af0d44a742420776c1088068c00edc7b3408438 e393d5a595a2d7776daa2876b9d793e25f3c5aac\nea1ce5b5ba5ffa72579f2ecac93634b243b210b0 59f457d5ae7633e716576ea198a79663cff1c9ca\n57440fbbf3ee3be81570202e8306bf9d531529ee f669a2f8b77e15000ce6d432f3474d2e7a1490e8\n344688faf096c56fac6afbefdffcdca2c88c1eed 3b9b9f9af06acd7ff24d073d55790cc521150bdf\n4493fc0d34c98a3845ab919338626811ddb862a9 93a226af62da567af5956f7222b7618a05b08a45\nef27b0f367a234f85f944d37049b59d4f8c2113f b2ebbf2ae799df3c7bcc829e4264424a4fcdc79e\n939c175e53cefbdb66b4481166ed6fbd75e85eb5 88d6a974fb86521f256ca4c37e641e3e81316239\nfcc26f184b6bd477b4f1c5770873d829f19535c9 340a361ca9f0de8d9a6e32a7642cd7e63a5b284d\na58dde2b0d76b2868c9df3441cad0a0303a2891e 423e4cc791cf1e15d2bde392ce35b77ee3474775\n0064e786e5e06efefe2efd60d82fc99ed33ca919 711630193af6b7ea4406b31e5b16e834efd0ef41\n3648769d0849966b77a65ec2518413779c37e668 567edcdfdcd11fa4e61c7c17e40e87f590763f7f\nb1a36ccb9f55874ed8c77231d62ca21e488c9fa0 24b5911deda63c55482ccd887584519ee9405c0f\n76f28aa3c3d4492f6b6ff0e5d83faff366220339 6b6655fa036ec5f5e7afd1c93e7f1e77050cda33\n739c84795bd82bd5d642b5237e8a63ecb0328e04 5338f022170d4db228ce346c2da75c606b476ec1\nf9cc39f8e3d842772fa528e5926279e621c5b24f 99674d262598d595f7a65c4e26144a66d3e1019b\nc2794bf8572cd8d50552f0c1fb8504382a1cdc6c f4ecc040c1c746ea1c27a3efd4611384f515e155\n4684187bb5e49ecadaa8154d24a7683b5d10fbaf 63486a3b484d265b00d7d58ae32be0f7ef6c64fe\n4ee9a159996c2ffe59b488718eb53ef7cef2bfd9 e57f4d34a43f567cbf3c13245455dfa678e18e00\n93537eb4dae0a611ca957889c40c1db3da620193 d9175db62c3bece1ef1f1846650ab37b9b4685e4\n401970e29ed5e5f1351ef015316d95f912a294aa 02febce32a8391b8fc3e8999487c25720fca318f\n7dd56fb57043caa4221d9fc8ac6928e02f735fd0 23b28a313f0c00b3d9ac27d12349e307ae7e969e\n362a384e9bea43910ae8438a6d90d584bfa89e2b bbb4ce2f1a34232e979a23604646818d422bc0ee\n45d86029c1fa8e78401b54ba001837e915cb9cef 57a428c265091307f4a1750bef3f87c8224c3458\nd78b37751a68d7bf4708f8a837a84c730897adb8 b01e6652f16fc4e6779bf1413d1ae236fa9000e2\n518352e028291bbd1582fa6262979586e98852d6 9598b85051ba8e23384bfa39679f404538e1752d\ndb2ac4cfd63df4ca6d8af2ac7952cd5b314aaa5f 25fa9a70615df97ec4a45eb8ab30c017eb87da7c\nf8b5f7993c75b1644fa17e3e2b37e13f6d37fcb7 87d1b4ff11563054517a50a485994ff24329f899\nba00735a5da686cf264d8bcb486294b9ecee5bf0 4adee4e1acbdb1920017f1928912def6a3de3764\nbed670a8eb2f5024c8cdbc3e46b53cbba8bc36df 93465ead227dcf728bb0bb0c8734ea56f0b8c271\n7eedc3494843dfba07f71ab569cfdc7e400b9785 6b93bc7852545311dc9e35dee245e077ab950858\n34df3242a2fb92b4fcf4ec7cc8cd77689a89b3b9 fe140a32bf8cc1515bf54a14f1a96784f4532abe\n401c85f1b33e1bfd9d2c640caa304127babd7473 763297dadbd848d9fe6e8d1a321e33398a137f15\n2e68f9aace18ce9631409cb4ad14ac679e8c99c4 fe4f870dab626cce49a3c097ffbf93d1b97beba4\n051f1f78419a77d65fdcb6608e1fe6729f1930f5 909dfc30fca7f1daaf89b06bad6129b79004e85c\n5c59db89d8b4e91bddf5e473702ebbfd0ee6eb65 2ff7208f37daa64180d827b3c089c8239d001eac\nc5cd9233840253a45295855a8a80a8278571dcbd 6a77e1f2a5b43a4a6e12cd240fca1c7e848f6d12\n60c7149907232351c3e88277a3a728c3ed604358 557a6f7b5a8d2b0963e31a3b251474c2236862ca\nd3e9ec6243960a02dbd1226a125d24e75ee5c6fe 4d8b0d7d864f55bb9941ffb061e45f95ac7e576d\n7bd4b27fb8dd80bdb2cfc4bc92947a2439cc8af2 0bcbe7ed8cf7a0486115c21a51f8804dab6ae724\nc521b354d39f024a6009b96c05d0eb4a135c4705 fc2764a31ba60d87ac291fbae5db6be65e9c294f\n8e6fad2ff83bd3b7c23a0ee6873e9a3e5ca428a1 37f7409d47fbc290860c2049a79ded9217f75da2\nb8e60f78ccc50ed086f61df7026a70a96eec6675 01af4929fc09caa5a8194c5ccae648b5f72b719c\nc87229c1bdba339169ef3a1ac8c0a9dab3cebbfc a2858038c7cec169471494db75c5c57d818d8654\nfec146f2e6cd9705393216d26eb4cb8b16645bb6 c387668c4b0ef119ea8664f6b2fdbd1558dd7ba8\n6c43bbc6bf6185f1487a76eef6cb199da71d732a 7abb6111b358bf4821f4a98af41e2a483e7c0b62\n716417dd13f3a8de32308670f0f46ffb3b1bde57 a0b42b39b51c96efc792202854fafa8badcbd93f\n30a9a430642143a9e6d1eb7afedcb4fe8dece63b baf4f41752468c2a38e42664c8be1c971349cead\n74c9c2447c59ab12c8bdb9bd6838031266374ce5 6ac18f0aff021636d613a1c0e4e95a5b550593b7\n79394015c4181d3bfd5581ed6c99c3b4fb180ed4 4a7dc5a7256cec40853a2fab0b017130ce4ddc28\n69acbc4575cad30d7d02684e553a115a11601a4d b085ee4ce7b176e27d61d595653cfefed9d9e07e\nb80854f166abf27e8676ac32cefe1be43bd867ea 8c68c0a22dbaebbe9c0a293d8fc9ec681efb0126\n12384ae48437e9f3c56cc6bc8f35a8eddcc0d204 608b59889a0c58fa97bb2c23b2b118dc4b6a8def\n30d955dba8b3bf4bae1653cdc0bac93108aefead 69bb4d75f1f3fce80befdba9f876044646033471\ncc0b114be5eb1ff36fda214ee9fe1e45264cc256 8ece5ea0089db7eaaeaf44d9967820b0467939de\n4542acde1d75445bf1054b85ac4200f209be3791 6992930347fd7dd9f53b98766cc76d5f9397ad46\n929376d031c70e738ad0ba265bb3d4b39078f776 899514062ea1cf99256298689221bf8b484543b3\nefe015ebcd73587baa55eb26b4567543af45d889 4c86f3b138680bec02df2c16a1d6cc753d8ee5a6\n055e3bf61ae408d825986567c45d824deed5301f 6d49881b1aca5a50aca2c7cc6c15dba7836dfdc5\nfe72c5cf46bcdfb21f6622237fef8af0097bf8f6 41596b00bf183524aee0504207ccc82ca88acfd3\n021d20d800a7004cc916edc840beb0ea17626958 37875e6f126b68b6a7f1e29bbf42e7f64e6953da\n496130f6dddb74de05902df6b694b6a6ea1be67e 9c52dbcf6cc56d6bd5488af0207cfdf3f2c67b96\ndcfd4c7454b4a23f741d325d3e4d5367a162948f 0b7694a2db2db0404abd533a1903a03a70288680\n7e996d3229fc8afc96abad2f4e57a4a5630c6e7f e15cbf1781d7e31a118a1b07c3576e0af089150c\n0c5f57eb970a58dd0cf034e1855bfdbb129f6023 2eaaccf2331f349232e224d9d5fd5224581ec2dc\n0b923d505ea395aeb71861dac6ae72d7dd290b49 96951d832753466ff4cd3a1613f6b43f355e76ce\n336665b901ba2e6bf86a444b98b15b577406239c 246241d0659f791f291d271b86a05c5543f285fd\n4ac00e6e1039c08bac1464f2134bcd0471a1545a 143759ff775ad42563c9c51a241ec5abb74042fa\n73dc1d292fedf2a3eefa5f917a86cfcab6861076 bccb9ece1cfb2f8d8c0c32d9b2946f6d4d74e04b\n2619f045c6e13d8a5f5904132e2bbbb0c2e7e8b2 15b0ef13e3c1c2f1d951b1e64101e6787eaf647c\nedcf3450a8d016160aa9ab7f6375d5831c03b511 ba1cc72a00774be8fd7c62e90f44d07ba93820ec\nce2e25fbb7f8b5344f2eb75ed687807b46ceda1c 70c7fc071ddc3735edaae7019db382cd06a40460\n82df109eead44fc6023d6016b1e45eeea65d0e65 07d606df47f06ad9a54224abaf604649a7a5e7d1\nd264503cc3d80fdc72e4abf9a442ddfa1dd460e8 950ab580ecd82ea7a22a06e81504c5bf37deb9cb\nd61885260ec701496f4bd4d7dd7ce2b3c771cda9 b616d8ec1ce5f7431b11bae8337ad6a184d2e652\na48f3e7bcab02f94448277f600788a1cd078dabd 8b7bc811764afb96f7b3d7ccae4ee633fa271213\n6f6eb8af470ca1fe7c941e0a93d65ebf0535ee28 d7dec06b33eae338540b4118ab8e09420d0ec764\ne672ad4a18c8d073d271684b2a0056b1ad2bb3d9 8da952d1672f03f48ca187ba229e2baec56cae4a\n8cbd49c3305c726a29bcf68738e1c7056004988c b5941a2bf4955774bf03f5c4fa63b3fb52229150\nbfcec586b54cfcedd5be08cefc8632d8faff2754 de98543740cdad960f5105fb1abf4cb1922cdc03\n5d524a18347ea188e521a1973f9b4db7d07a5b5c 205ad92935efb3722f9ab9bd4b04281672a3d143\n92fad00a4a566c884f016ce1b2c463ad5f7311ba 49e1b9c07cb70931232b2b974d7d69197e74feb4\n9e133a8ec5536f177197ee5c10efb203fca376b4 726d72ded0a3cbea697d790a416620b0b4fe6ea5\n9331777d30f4d1184adc2d46b0b0f84b733261d4 68268057e944e501b3eaf96160a9e6739e08f02c\nae3d03929bffa439600081fc0e23deeefd85dd0c e89a5a4da1c83e86f499c0e887acc0fafb2bab4a\nbd9c82cf0480e3d3650d40998b721064d87892bb 661b2ff18f24964a015d9c201e20a5b89231e094\n6e4cf75259d1f7486a785e8eccf4a6535e5a0a8b c4295e48bb08d858f4d8581917262f722e793dc9\nb73b04785972e041e48d6d9e515edda6ca098630 b31767eeb251b62899340bf77b69bb17e09c27f9\n5996cfebca69c45d17a8b861a6ae3b662741b69d 803e4eb4f8db9ed613bcf7f81f27b330d6a0397d\ndd67dda43058be3fd1ebd9f7dbb2c8d69a34b6de a97a5db7f335064722edbf464fe438dd370dde6b\ncf425bf5989ff89c6acfc08552c704bd0f3e2c47 5cbe9b8bc46a625e5ecce9e85650cf0c78a6df14\n698f431f883c497235a4d2d4cd7c99fec89f7e70 ddf64d7954d8970d9159ad2702eac4cd6a7327c3\n089e1cfcb46b885d76b7efc74bed8f47ff940211 30bced0adb9439ef12a2312552c11a85285abedb\n8b78c33392e63329f0df0dc7f9139c373f65959a 73e0f92e1ec084802e48565e0b1afc555e67d523\na2c1a700088f062063f26a01caa87f6d8ad88de2 6eb6e2ffada31bca753723043950c25e0837e6a2\n3f19d174c7a173877d6030ac08c17d3e880bebfc a1a24104625b8a004401e8d98e6b599dcbf1c3ca\n8d0a272ca5804d26485f6cb43c22572f1c03b4e0 8bea2c8aa4d09df7a29e581e371faf555960dac4\n30b5a0d570073cead7c1b156b14351584e6feb6d d65e9a8a0d7af645272d082703fa8c86311cb0e1\n754f0ba8680198fdf26b411fee87710f86bdee0f 7d4e7a5304fe634e20f0a8f29ff5299ff5e8c271\nb84adc2b70e6bf0db9e41edf8a7575541cef40a1 b7cde581f028f530b815e23f501ce8abb87b7d1d\n846bb758f7dc251aacb6f4e648f3a8c6e9db7dd1 a284c24ea0a0bc710040924ee55ca8245e243fb2\nd21cb2f4447d68aaf0e9a25d12416cbcf16d744b 6abb7a5f178b9e13357297d296dca699ae55cdf9\n00392d3dc1364c7ecc33cd6f047caea71a72c3f7 f1c17d07babcf2b592b4db38cf8121679814c23c\n0c471c85fb4abb5d07e7c2fd7db06c0f32333b8e 1954d69eb376e947152b9b99e7df3f7dc1743bc3\n14959e4dc8e23c20029b473785f4faf270788962 54a1b72eb1e45e90b73b08096824396a861d85d9\nda4aca5ef6d99ba4e5f5415fb154dbb03dcf4d4c 886faa10df3c707cdc6a32c9966734a830ca69ae\n1f7567aa651d57827692f63e178def1c54c670df 2a8774f945869cf0b53d373644bbee01f3f0fad2\n7bfdbfbc3dcdf2576cb10c0a7b803488e2707c32 5a2485cd33fcbf3a7d74b8af97ffee22f16478e2\n52826463172492f28261a56e59573539b23a6707 dbe230d7dba285dc98d3a1001a4d9ba7de03844e\n07b377b28039343f466e110837d11e969e05bdfe 1d7bed0673e2a75fa3f278fec2dd4de7a1ccb0bd\nc82c3fa57f1b378a354fbddce366c185aa5612ba c32d4d229433f042ac927f8dad0e81db0a0528e4\naf7d4d4f734bd163fa5c52440b95e66b4e86f626 1c6f12622ce81cc333468f0ace9daba38a0ff6fd\n87295d4f74d0e692237c28267c81c66456aa73e9 3bfd25636894dfec7174269c08a62fd3bcb6a4a5\n08c1a82cc6b6551d9ba7cc5b26fd5e44f32ebe49 6f260fde45e4e45669df6725b1ded2f66bb64d4f\nffe992a10f7100278c801e5effb1b2d118c1d4d2 a4f7a3120518ceaf9b9565421a7a05bd9feb7b65\n9b9ecfdf705f917e084d4908b7ffd3a9f5f0cc45 ddf11ac830f86f111e4738a5fe5f15a9e01e3d02\nfc24567c524821f744b7c524cedadcb564278652 b4137c2b6db188d78203c0e8e138df6d771427c5\n7d97cdff296a9dc59a774877de59bb6d1c22f8eb ec05b03a9af984fe692194b988d19ffa8371e0b7\nf36f419c220d7ddc92468c7feb7746ba5c5f89b4 7508d444d0f020d11a6a1ef8d52942875b4b3ce8\nadad7401f2b871b409ec43253e380ee443082baf 1a249b6bcc74a363ea86145bc57a4965b68d39bf\n310f666ab2698a2bc3fe4881be2af9623606ad66 5c83aa32e23b44478abac1c5e9c87fbc0a85d051\nadd07e783858f16e052feee73f810e060051b3c3 0affb07cc5239419eed205c7b2afd541284c8058\n70ee5b55748693509cb67dad4dcdde707eddff05 4d2b1f3e8ed7485f1300c05720de85e739211f78\n22d90d470668544d99b2efb665b9ab6ef7100447 f639341826a044c0f616b4d18c42047af18f736b\n8eecf046274747ff053e8fad5d1e1f5ec9c4c216 60faba1ed8a157de32c86b3420ca3a59df7feee0\ndded93cc36392a5553a0846bf5f85189264d3c09 8348cf8dc6e81c96ac906f00da88b4905c65a10f\n701c402e04ee12b97cdc141b25a67a5ef361a12e fffca0e64b3e10fdfeb8816d762e3b07263c5a0f\n6d63311f18ccf5258464824f596cab1a84af7050 2bad317ffb8a0332ac92821fb90ae12de8695531\nbe563abb4bcf0cb41065218bf7b3e9b1d2b88221 d65bd1d888f03a6510a88103eb91ca7e60b3c4b5\n4f66fabdd988fa763f45e7d35d0a659570bedf9e 583601eb59bf1507a3b3bdb9662630439ca37c34\n1b5a3fca919ac330c2234a87e65ae4b72b142b65 299fd3e2284a1879bfe9669c2bd6f1edbb8acff1\necd8be9d3589508b61fa819468dcfaeba267c402 fed97741e301f5ce5f5016a29e4eb3c50c09c6ec\n9c247956ae35df75f390539097dc67554996fbd8 bda1f56a6517c33aebbfcf8747e78b12c1260570\n5244f0ae6bef216b3befef73c43f51e2ca8c6ebe dc67d5da145968f20edc88d2d47f022fe9416f01\n894c269a227ad8b1c208f7a2330df257e9099fb3 05db335d877c264f21eca98f4c7f2e0ae4937e33\n338100f9a942035fa44438ada2c06d8c654c088b 976f970bf8239c57c80b68b2ec259e5232c8b157\n267ca7bc63e56343c1acea001b7e25d3e63ca3bb 36c092653db37a0f66bfd807a87f27c7a2030b49\nea1b4af9f7fcfeade0ae89022d44b81f69a475bd c7d606393b009246a5f4d738e32032b54c5b42a3\n07b01dd26935991a59e78093914657105348508d 3745d7735a0ed12db62f121fde5b30a0d630871a\n3dfb6be50dd3c9619389d2a99ea3b1c6edfb661a 0043b5e19f2b5af2d0de8081010945e42dcd05c4\nf094aa695da4e753018a9764ed59ecc3234e13eb e4f96312dc32ce7f69f761333aec446ef99e7af6\n02ddc3688f88624e32e44799493a1c61a610d398 63912f72f3bb969ac7841aea3826a9262a8b8d74\n33462b17d78bf5d0921bca142ae7ba5a256fd053 7f4fa96e04d345e71cccf1b38dc146ad548e3c6e\n6c44e4a5d35f528647241309c7e30bb810226fe8 96e33905b3d32d77fd4c890e54b452d89bb52556\n0b8278e909775a2c632d6e43f0b2b236612bd25e 578dc38c901d7141d91b064660214929be0a5945\nac7b174d602dcf6650b31511dd9cc97a5aceb5d0 6d5663982cf365b61775c85e9f341e8d691d7251\ncafea3ae842c9bb737f955c325f633fe1a5c21a8 13d4bbb8f2901e4807471f97900118da7ed37830\n64de5b4693a253cfca7fe29e07ae194fbaf9847c 70574ae3d41ad84b15aae8bfd0a6d4a811ae78d2\n946d56d19d83e999669e7704551d05ef4a7614d2 1e240e5914862e2db04b32f6778c9be224d23480\n7d279dcda145471426c0ac8c16cf50f4d7587e10 289afe298509c564ed7691af08b6144e275081d0\n6104c404216e7c5332836598d60ca5abd022ed74 7ebe84d28d4bdd67391769696bcb0227f386de23\ncb7c2760547ace3e5d9a7c88c4b6bf0a0b175562 a16693b28261d9d936c5c1c2ef61fe8a9d45a23b\n9d036f7d3dcfce47cf8fd20f2150b4cba903af24 fe1ebb4754df54da2ede93a5cfbcbfa6f9041239\n2df08d3bd242227be4770f0f07f2990a8109f984 8d546d2ccd6cbdaf2300ef1cd93777e7fed4db2d\n16d3c6b35f2d0c10250526e23d1bbf513958687a bed885eb5e6777b3bc81ce34ea5dfc8b0e627e1b\n289a8114a022f5adbc3750bdb0b2e88a67f949a8 06504da146e6239f517c622b8062153b7ea7ed4c\n48f809cffe41e30008a1a0e9b0069d325e19ee86 8e6c75cfd4550b6976f1bf732ec38f3bfb44932d\n7eb5d866b7c462894f4c62d48dae223a98df02f8 bff27e735e40394becc8fd1ca67f6564db9b5496\nb400073b41575694b7e5f03dc3306605101ac349 7418b55abb102550b68212d0ff39d438d56482a1\n89a6b427f9c5b0bbafe7c1613191c00ee116750c 7877095bcfcf6e02d1b15273fb09bf51845b691b\n762557125dd61b1a93c764aa2a0afe3f45f302a6 74c2260f662556dc3fa47205283ee5aa50a1288a\n1d85901cf5a756ea9b92644e44bb703da3b48e2d 67403f57661539c158009a1af834653a422ee1e1\nbd0b99f22d9f0eea755bbf1e8d2fde72daca116a 59f6886501abaa8d71aa4790365ee9d3aa1b4241\n2bc81582990ddc9b5bbd6bf0fabadcc33ba79683 952eb366dc056f122d053ab47356392d45940f3f\na85ec2349010584e5c8ebed5d09b4e390c50b2dc def0e78bfa9c2375fd54cecea6d410d03ac57ddc\nd5718312588b9abc50c44cd5f0f382cd1d0edad7 a6c75fd4cc6630fa3bd2bc5a5cbbdd288d2fb871\ndedbb9e61082f09da50c494099d19663c1287d37 d55bcefb84a032dca7ccd59b7ae46a3ae2321186\nbdc647334ff7ce00dcb2712d4c0212a5d97bfa2d 4e6bec6016ecb69fd28fc1dcf84985af2189152d\n637b33b6d1d2b05ab51989299b20e16aef1478ca 15c824cd030bf63cd7cf48dde569e2b51b8251f7\nf146f54a1304e554b8964f284c12e6ba9e60501c 6d2b9e4f045aac494b89f93b0c9e9235ac80e9e6\n4da14c57c00ac06319b6aa09f0c88e77ec30ee85 76ca9d0d3d3d255c4d310dcef491cbc389ed143c\n68c341ef4b28d048e8ebda446e3fefec5f75c671 7a91cb268a431655b0d77dc0bbb19175f0918525\n1dcc559784e8393738d69240d9b805c4cb00fc01 703f7eea500136d4ff5ce73da595991aec643a60\n5ea5304ad3fe8f5c096864f623cc60a0c2e25f82 c687c7054a42cb6e60ad769c23ce864d0d0d0ed1\n4b1ddef157d8af834961b1c08f3286c77d1fb165 5721687a79febd51ad83eb3bf6e8cb33ae9bd701\n861ce3839f819410d0e5e4dd6294653441b4300c fb379fa7271d18f8e086fc8263d433803886aeb0\nd59f6ab6c7582053b1223369c74e3346e1e3c02d 04083de1defcee9cfe54ef64a4842852c62c9b40\n58a700f7e332b4e03d4b1c0837b96032b327a3e5 dfa5adf64412f08af1f731f0cb674d097d8156cf\n222cd051d31aa4b846be2cb3abcb52d5a9b69192 0d395b2f467bce674eaf7b360f2dbbe55bd5d88b\n1e0c452f7cad452892bee08fdcf94dc9e77210c8 e2004d6dcd0dc664b2f627ee6ddccf78dd5c693d\n3b466ab6a194c8416e96ee157187710819ae7b8b 2c0fd9956eb448d046af4cce7b2fbed40fd16558\n82ed3ec9a8f78cbb7d42ee4acc87d03ea5a9961d d8f855c1bf09b99a80e29c9675b6ea27eaafde64\n5fbc8849018395a0b0f3e2fbd640de814445b3d0 cc6ab38dc2760b4b1bb487066ed08e3956535436\n74e7d92721ca13f3e48ef6e4c6dcfad195601bd0 48d39e9f785305ffc820143197c8f5a05a4341be\nbc974273e86f2c645a4c948214a46523e0c10063 20b6196fe127ffbfa02b883b5431c5dd76c44b43\n5c7f75a66e1fc613a58c91a8459cf86736f351ea 9507eb2cf3c28fe45a67d4e094b66606523c3cf8\na2fd164c3474bad56f4bcae57213427f5b0065fc c82de444d7a022ce02e8916cce7d213e97f0588c\nca69713acd0a97dea286c16b8c0df7f26cb6ece0 c309478396b87b02c8f3cf86224976b7878830ae\ne00cc3ae52d312f305d65aeac90047dd70bd089a cd3869754c6132b29c465addbcc14cd05d7d8ea2\nee1acd45ad79bac2e7a07131fa43d2b8e97a0cfa 253538068a741352cb7396a8577a82cfd30b1289\n5e7db4771c3080f6dfdbf2d8bd38cd4a5f04eaab dd6676544a96efac3a11be969c6889e50bbc5d52\n943449d08eb9a482b1fa80ac4ebbc9a9519f839a b77ac9bda8daa3daf3ae83362d2de5d0ff334782\nf9fd04dffa260060ac305f9b867bd4855800827b 32fe84806a1a2d67d660d0d2c20154c2cc3533a8\n59420ae7b9eacab9986ab1fbbdab596246c4af82 7e7a98be30bdc77558a1a9ddb7517b3ed7dc8cc6\n07052ac5f5fd03bf95306a8370d6b0bc8e3e8c70 22e38c90d15a053fea6f898728d85a05242daf1e\nb79a7eae9097398f6df3172f2ac368b73e254be7 7a7ecdfb30a34182f9e21156eea47263f6a99d93\nd25b8863103c80a0c6866f8c8dd39fa3a4fd600b 6f757a8951cf690f67da5887becfd51a1c9c69a2\n7f47ec4a7b62285c1a5915c83b7c9b50a461740a cc207570905378c0d87f3711edaf7d5d276b7629\n51a9843a62e0ac33b181db34b90b8b232ecc6931 547d831b5a5c451f7068a2ac522cbf03e938655f\n02a7fe93b95dd6c73cf565387b3a58722df32129 b375e5c281a3b1972d68a577e54d1a46834b6174\n7411d9441cedb1e6f4facb608cf65f4b197856e0 13322903ace58b3190190507d29fbd2d843a8f5b\nad09484eaf860593106dff23f106f07915387ed6 4205ccb3f5a159525bec0e655217a72a6f72c581\nad00ccac6f3455ee1a2f553d3669ac141d3f9005 80fa12c03d2e0d17ca9e9f23ccfa1102f9d40273\nb4f1fbf4debf763c5c48486285a11acf0cfcf454 aa650753bb55b2fcbb30ef869033387a161c3c18\n765974e63653698bd72bbc17e384deed4217c317 0e31617cef443e7923f28eb9d183464076e82a33\n37fd84d096c1968b5f35f882cba9c72d2c4ceb59 d251b2ae75a44832cb2753ab048eeaebf0d1b7a2\n3667f76e2d526d34533d59341080055ec104bfd4 dc3b428c435225daeb927583566acade31e3b7d4\n80b8fc40dbaeaff4c51d69eb8999cc25e6520849 517d145ce685e6d629ba71c7627dd54510dac7ca\ne9bfcfdbeb5efacfff140c1da67a9f0f1ddfff41 265d92237fcb5943185f4a8f4acc830a3fae6fa8\nea90f9d56701e8df0d1b47d82787a6a2d534bd9a 8a34837103b48c1ebf0052834059b7809aac5a52\n73a432de98b156091a020c8b01e4fcb033efb583 6523a3d49950092fb0aab0c7d57a8a78aab3b3ca\n47120857b066466ba0eb9cd13afd27a546c14c06 f49447dd5cd37f536b534a2a7f5985e0ebbd3ebd\n02922cf66691a93d0369e04829033bfb9c1416c0 e0cb6e2650d7554271aa1e3d3bed695ec6b43c07\n1d0b21b40fff6331de0ba5e00cdf5a21606e69e8 8d8c1551a80ee7bd17f19ec9c15e7b067df17b6d\n4b2c74a0957c5d45be802129e45ed023a717e728 590b3f793b96d1498fb00601b8ea3d18c3822c5f\n04b363a2c1fc8bfcd8ce8bc0f3f71858d0b2eaff 18ed2c0f69650ff8bf8eb1d16a54c4a7c35d4884\ne2d8e4760a9af9f2413980580991e4ae0e0996d1 f1b938b73e510c8a0c9352e81855fef638df79cc\n0c9badd40e68bacb6399a5a757968a110069908c e67b430d8127393d114a41c6f3a25b31723dd7bc\n2fd3a6f43ccdc7019827fde4c565e7504c2e6276 4e0546216658dcccbcbd02f37fc755fd3dbe65af\n195e8ac9f98109a902e906e0d265a84d0566829e 8ff3f6da045db270214dea1a5237e4d7b0646be1\n00efd9663a399357f113b0cce175b8b7828ae35b 23c0fbd85de3a4beba5a810e06fc04d252578d90\n1eec2a139d35d9bdaabacd2e836612cfa8180b5c 5f7a8a3c24ddfb85f2adac7325c248c95fce0637\n8d514559fc7ed502d969788365c5a35a029937f5 e9622ad68fbee7f8030afe8522f9f709eda70647\nf0c99b0aa2ef51e2afced7d00707f72ee273d19c 4aee1058c3b90330d480f7a59f48280c288307ab\nb1d127cd4c0f692c925dde8c297b2f7cf93a2769 7f0dd87cee90df812b93bfef7f271a381c10ae00\na1ce4c531679291bfbae3be75ca719525df415be 6d32fe3ae7798dc7ee4a574d3ec5987b590d81bd\nc6f269c647809b9ad040b15874f0cc359c465c93 48fd3b50d55b27b866f588532969d91909df40a4\n38c68641f1e435d8f0340f090aaf7aa11fc33857 274f6fa4d7f0b771e4299f440522ea434091c7a3\nd3648c5eca67db20002a146d2433d5dc79c7fcba 0031d7494e446d24a479439931e269ae4398201c\ne212cad9e09612496a73e3014395e169211fcc4d 2e5ab189a8677ca5e2e311a472d11ba7c3f0870c\n242010859be1f3f552c4665d75cf0ee46e1d6807 10abddedd1a33a9a86e5200e950c2515192af180\n8f898bcaffc922ed217d7cf190b65f452f3599d7 86e3b594bd28b14ccd47b4d72e6b5a7f6e14995b\n7630328046406398152a347612be9a3bf2ca8d6d 183ab938fd8e07d840a578f030ea87cfb52eca97\n73514f3212506aa9f2ffa1d3ff93403e61d110a1 0b25292ecdca6b928c195bc6b46989286b33b55c\n7c10aa7d0f58470755c78eb6fd4fcca50007d54f e6e7cfee8133e7e791f0a5bdb639a43c38f7d7d9\nf84586bc57ccf345f870a73df1dd8b4ad93821e3 677fae719b35562c60b5ff65dbad96629257dd7c\nf2231524702810692b8f14ed85df983df0f4f144 2a047ab36fd0e8dbfced3e288ee7681b9fe4f336\necc52ee2e9798411433eb84fa06e5954a93b7c8c 80974d38da42c08136bfd04814eb203a0eb284a5\n34b01a55c4cc456513f4ba0ba1abba7dfb966445 59df7dc8757cb3c8c4351e3f4fdcc7c38f3a89ee\n6e1fd5a5fc2b63d60d6e7d47fb1715f3d7359583 2fbbcc5a986453dddb37bf624ef6cfe0ab4ecca4\nca801daaeeff08124bb8ad844f89a7f04fca10b9 0b9ff867375131cb4350751314d373faa3adba7f\nf0ce9a9b6d3bcea9f8e8f8c19d8ca4ffc4eff80e e564c936e927dda564a4bdd0f03b9eb80b0117ad\ncda17512b25be7d10b3d3dbde93f981c795f620c 451aa83ee36762c4fc7a90dfee8ffb256d2efddd\ne7f4ae66cb26bca7365fb7b53e040f8ed7ecc143 d32c86ac657dc99b7f7f013e0a4eced3b7ed3a36\n3916e70db8ad80db96d8fc64ebdf6a7e9eb11d95 179d97a9835451d4cace3643bb75d84188aa98d6\nbdbbb33077ab546e1b6941b6185ff39a72948ddf a85dfca3853d1f7ab18e40ee93223050426558ab\nb639264e4a64ac143c6c686b8af22986ec8613d3 2f8b8b6fe250abdf9042a209d889b84410d16048\n0a05fe312254b4384ce69b7218df46e6a835a18c eefc3d8b0e8a8267b16d4d96ee315a3930c7f3b2\n01bbabcb38704b975ef119100bddd9b35e05609f 115f8f1abb7fdbf4ecabbc5c30fe20d996a84bc0\n9b37b23cd3a9cbd296b9ec2c56ccaccae113f303 e099852373644836346b8ae3f4d563904eed30d6\nc0d561b75a3928c26016fbb4e4ccdf79bc7ce215 33940edf5839cb68f3a81e2eb3eb92bb45b3f77f\nf9b6e0fecbbedaccb69e1cab47503a485f3e81e7 ee159f18e483013910c692f279840eb65566822b\n706f79ea5f7c76bd29f0036c7ff8f9d2050af81f 960023a8e967b5608a1e4f6768563414c2ddfd4a\n6746ea25ca00f8ec373ef6ccfc63e4cd60d982b0 4ef4e7cc7aecd084d3b49f7421dea7cfe73b350b\n99887a5a23f5a65bbce37d944651da360d5a1312 c3e80e7f5d8be40d0a7315d2f418b00a2f92eb82\ncb85917ee403a53f6e96905cb9605349b2e178c7 86b2eba1c6fbe35cc8c6bea56da804484d49e847\na83f7207007c2b05ac3f236776d5fed923d42d91 9f207c338d70ecbf903387c80e635b8e09a13b0d\n410c20ab8846d61e43f30eb3a4386991755bef68 2807a7ecd71bf929396512ee350c16da49142175\ncf0cbc795230e115662644cd1cddd7b915ff8bb4 13bc97d328909d0dec2e41015ca7da6cdf558021\n39425f50dd2af574480bf01869b42158d2ae3e98 64894c0b123b2ce32cbe0da1b2989127fe8fadd9\n472a7740cacbf9bf52fa7f550370ab5aa53dc8dc 61f7a7a02615adb44c6c8f6bdab3478c9dd0a34b\nfa73824123b260e5493a42dd109a56a22c78f4a7 70d266cece8a0263351269cfc3d35859072b7c6d\nf53f5ecb90c69714a07c501d382e151d033eceee 4dbbebc6a8072db89bd3cec12936fe4a6595cc96\n94f906bb36dee8d0db14ba0018cee5984545f2b5 1fc5fcc54fed76cf254c1f2db8bbb6951b0f5f5e\nd1bc845aaed688cf24a32ea725d5168df9e72f14 7241545529b83357352e27c03d6366658156b5ef\n4dab775f0ed134b780e9b232f4edd554337daa24 89e12f685277a595ee6fb8b4dbe6fefefbbc710e\n0d21014f142856d7a6e045fe692d415db5298744 42f2407b4757db62b91e4ffe9719dfd14d2d6e84\ne4ddcd896388b8fc3f5eb9893add30a93279c67c 2674325c316309aa2bac2f404dec772e491547fc\n34fb9bc1f2cd2015874d4a94416683c4a95949f3 f0fc7fd1e674a5358d5422b8fb7a7485114d97c4\nc1e01d8267f0dab4a457ceb89622a77e00fba258 c7cb5e85fdc99a05779e0ab5eae0ff49d81f4817\n2e660e6cabc60d3ab9352c22c023764e3e69f2ce 77220cf977d9ab706296450a0d3514a0273d5ef6\nd0691532df71be9744c4a0f5751d392208a980ff 02a7cddd5190c99c528560311fe0bfac85b27fce\n431e964fe6308beb66425486eb2ddac74b94e40a 5685a7edeb7e25d188c1168b056be4f24c1bb11d\nb8a9bfa28d2cfc808f9395a86cea3ecba64c8aca 4c7540129ade2940e9ace2bd1277aab8991c43e8\n32e6bbfb36fde12fb5645bad7b756ff536c8a027 b37edc8e5e1c4c26e7db1a1dab489e98ee52c9f4\n9e78bec8346b1aeab6c8d412115353b92f7597b2 500ad8add6a92fa4c6461a122dcfd3a507aeb0a7\n8ff1362eb597f758ddee82c6b3a0b11c422b0062 6e8b474486c6b8f4113358ed7d5199fda80c6353\n9ce0a41c2bd6fc1e3c8934d3c76ac44b4aaad1e8 7ec9de457f8533bad5d844e04aa03e90fe435bb1\n769ac6a9552bc21e07d784d0c55ce230216849c0 d4efc2c11724cc87addae4d9614f2529373b7e05\nb8a0e6557609a80ae7e20f10b31056b94a0a1d9f 0e7b754aace2990dc0783a024e46271ca10bdd4c\n287726422bc71c15b9652ee3c9e2e92da8c7b096 c62504c0aad9e3d4f1950fcd55e23f753c28cb9d\neafa0860240134367597e998401943011f868410 d4c901a802b6ef682512e8c8b82f1680b9f8887f\ncf0685d62b597eff1a816d576e4fd434a7a01048 f4a016aae4ec01085fe8b622ec586ddc9cc462c6\n0ab13fa40eeeb1bd3f5628adec4bd26c496e65e0 959de97caf34798893827b9a908af822ca7cffe5\n387b9e6b4919355f50b5119644200ac8d99db1bb a9e85cd68e44396b1d1567fd2d7b1157e7c74551\n74a061920aa0a477821d2dc6be47ea578a32b235 08af8a53f4df38eaf2a472249ef8f60dfe7f18a8\nc3db78d569cc11ad5db847dd09ddacee68055e91 840c7ba7b0efa2fa72299cb3a7665e6c28baacab\n6feeebdd90e688560b6dc713d9a03142165e6194 2d3de482c7334c0a111c06729a1c4373fa8067e7\n26e9b8d7711ca71f57447946df26765f1d34bd2a d289eafb102061aaadd5d28c0a4572c4adebf335\n6b1d6f0d0e95ad90d4ef6d35a0375262fbdac63c fb5f856560d790fb447de8a706be9d3a6c1d9b15\n70e4e98b6e3885d7808b0df12b6cf6d66f611b59 09624c607d5a7afc3024f5e5065d545e3eea964c\n6ecc4b4d2ea124058c91113394307461839a68f9 98194a5a7b8353f631f7b6532f67fd37a96ce953\n959c7cb2d005f094859ee4896a139a8b0e68d64f f1f2c9b914443de06c0a17efb7a2a895b8a22e7a\nc50203daed1eff4c2f941850ddacea802d5562d8 3cd336633034548f548736d18321c906c5e0a10c\n6acfff5ca165658bcc016fc3ed8a928cda6b265e 65694a86108c4d97a43974831093bccc0f0debe0\n448e1b674678e93a38dfed3fb46f620efd3aa812 91e7218e1f1beb892084c47122d25702ec336e8d\nfe7d61d62795b95663c62708ef39b69b816dffdf c0d28fbe65a9beab59ece02c2bf8d66964bd7a5a\n8da380f8571d77593b922221dfdaaa7d1d7bcf0d ba81a842646c2b8ac8cbff9ef1f100623c733810\n7ff79071a0267def271a1a3b3833abb638e15f18 1cf67f2dc4beafbf6a1aeba11bee02976dc0e742\ne16093be8b36a08ee4ec9865b839d902df5dfe9e 473d02499f61b3fe545c39e702cd67aef418ce80\nf5649a40cc40c0ba019ebfbf2f44bc2dbeac0699 09737121a91ed89942145b9be872e78078984a17\n6aab91b9ebfeafa64e6b00ff1c8cb55af6b1894f 24e7a0c20de9104367949af23f2d106974a87e82\na0712a73429c0b27878bbce77210f145d375c72f 7a9770bcb5df252eca7166f1e82d9908fa7f3903\n9e131f2864b3529bd4e74bf11bbdf18e10d335d6 2f7433d4947bc7e51845612167f6c47208da4ca9\n3721b907610f1195c17535e9908ed2a4359001ed 53daf9af4f1ea3405817e8e54aad43e351bc2a78\n8cb0ae9098209ee0c9724f68e0299545c3601eec 36c687da4a4d11e6a1ad8d95f3cd59f9f001023e\n40021b6ed541eab8605d09d6e9dbaa898ae481d7 20dda00ddcd2629d7ca6d6d763e7495966579cc1\naf0bc73dd9b329590eb4ac0942090d133d4762c3 0342c43b75be7a0f2e41cd7243a18142aa6c366f\ne6c1cf60419a41f4427e7f82f02713b8c15dda7a 844c2ca85bed442d1f5a05fb789a2083fd5335ca\n835cec13c6fcbc96b1375f766343495d61c90f02 bcb63423c6195d98d7765815e599b9ac180d3d82\nb8741dcb156c68dfcf331a6fee37af8fa5138e2b 649a25ede89b74fcbb106322b54db5eaf3db1752\n85c768132dd1a1105d2b8ef6a35d36f91849aee5 72faa0c37a6ee901c33462bb1008c3927336e676\n0516f6a35a40603263b97ae882dd21ab19bebdde 0be9d46bfd3c3f2e4b13b5c25bc50caf7cd72e01\n8f5fb598af3e8d89df1ba1b6beb87610f96cd4c9 9bc253896c159979f21cafc7f71ad185e1e7f8bc\nb7d94b523f3fbb0f48fdbbec6e0fdb3472481df3 efb6539e166ec7277f60c12352564df625e320db\na33a43b407dacd6ccc0b5cb0f36153d7c7007046 88d019ccf5b5e07db30f53464eb3380dcd390cb1\na7ed2b735ce96c8231475ed04a71c8ee8e1b7f80 bd9416270f2aa460a6826afc36327440105584e6\nc7832e3688cb0bc91538ca68a77b33da1cb1ea23 bab0224344e245cd74fe6a342aee2467776e4b61\neb4e7bdcfea999427fea0529dbef474d1561180d 255c31230fb54df2c30cd0fa1d8fd873de755c7c\n09b33f6b49d093c62b709dee5deff0655afefd81 9ebf28e5e5e68d545349acc9878272b9a5a3c1d8\n00622c7c0ef37bb61d03c3396548714ed127a2c4 a1938eded8ecc18ba7bb4860dac296a89a305cf1\nbce2bde2287d864298d49cd9ec170b046674e20e 4b2180f99b84dfc6f9735f6f8cac42181dad79d2\n27cb715b61b886fa25525377e32d5cc5ce575b21 745f069680610c91640b093528444af46d97e3dc\n948a659f41c35bac0e553d8473144ab9ac965f41 e8b0ab253c47753a198c62b85fb75e146d13362b\na71eecc0d3bc57ccf68ac508230df1d999df199b f1a754f0e563d16954c9fc7ad20952e89785b8eb\n3a37810aed587a829419017f2de968ed38edc197 0af870ac154190799d71287ff4370de8d44d3491\n5ab1a6794e65b2d352f9217e7c838b7dbdc16d1d ad13f68237b033401f0a4605553c2fd456bce314\n7e285a2bddb7aa83ec132e7eedd3e06702b54f5b c202457b19b8ab1069f5a0848c38353cbf856043\ndfce774d16e0b613270c805e782d2ff156717ad8 c17780d24426a26e40a1adc8442d5602a1503197\n48e00f90a8963dc7b3c674258d8b25fa6fb62147 0efbd32d067adb5940219163b77990c4a9261ec8\n021f212cb8adab72e0aa2616c0619a531e2ee9d7 4dc6277799505c948d9c8478649c5c76e9f0b7d6\n0de2e77375c9d6a679fb76729074a71797967e46 40c70e2dab4ad64a116d22584f7592e584025f12\n12034613f421f57937bb22c6201ab34eb3ea06c2 0535850b132c02b28ebc7c85100426d17e1dc98c\nfac0356ab7ed6a5ff4b75fe6f1dbb15b76b1ca6e 58848cf1f2f3a2d389ab42886cf0ede8b3d7ba8d\nc0bd16e2ee3c1a5e60fc4f430cc10975cf2c87bc e86f70f13ff6af02f93bc2b43102d8680f9c5913\nbec6ef0048db76d7168dd8b6141c8f6aa3a6343a 4da6002c50dc7e8eff4c2da7bdf1ff9f9d5bb6bb\n297bea77d76bbd12adfa5ea54617fed8d0db9a8e f8a2271809903690e9c2a8ef7c27cd918d1b336d\ndc34e0b91ac817752f5b0a5155e45be535a533a0 63e2e3e669632e5c0ff12dc78b339276e66ef105\nab1b1d57b715b753d15cddb429bb9b0b0786198f 54a498fd213e4c4fe541ba0605f72fae69225f90\nb9e83c5137a69e783023ccef9023bb9ebbd58272 9a2a1b781c6c1522fdf9de712eb75fd7e3f9757e\n67e8e18e8746514215145851c38bb5e33949d2be a350aeea5454ae6e1ef9f107472488f6d3fca0f6\n71638d2728eb2892f730a0644fb6589372001a40 e41cafedbdc966cd9936256b558bc56911ded612\n7360f0ea9f3f9fb9ebf4623fcf538f6182cd1546 18b38be36c7336472fd1ecf4ecb4e7a2da20e985\ndcf63b86520b91a6cd2ec0b7d2bd8e4a390181f4 2c236d5377da350770b786a047e6c48172a25890\n116543a66fae1b1162502c2858e521af47cd524a d111c1409fee133369c17decd8c8acb71a286074\nc3f0af59b3d5edca0014263a1085ac5c86fb722b 87152ed287d42a704126d41fe786c0381fbb5bc1\nc57062e44259f5e8e710f97311c6592f3e2567b4 d781c9dae5ba63b5f0f8c7913d93e908992b930a\nd90dd95ba77d1db71f37677d42bc169f9671097f 9edeb803a50ce1fcdd21c72e168390a9620950d6\n2ec1984db60800461802a4288a742cc97daf7fc2 85aa46535fca3a8c02a838a4c097c0b8bb87ad6e\n9161af0c8465bed548e181a63419f2a72f2cb8b5 fd64a3f71cdfb281d39bfaab0f9a4e109fddde29\n6936183666086b1f38620a0522ed5330459a3dfb d933e3b7aec4415de69e91070aed85749a49952b\n15fb37d91836663fc19f032cb3fea5098685e230 f01b19475a0043ba1a389498e712429166c0fdd1\ncc295df12a20117acd2ebfd9d99692d0c8c16b55 fcc06ee66365a7b6dae1a3ae51857c795e2d6b67\n102289229f1c4314a0883c0e18d99a1832fff54e 03894f499ca1ee2eea22901f37c91a4d7f29c200\nf8f052993cac4dccb8b1a12a50e9586e8f3ac9a0 1d835a321505642ebb6a8bd11e4ddd325d1b284f\n4aa998899d30ab7a7f202d87c75a528cd1757f4b d4803d8c63c99ad530b1fdaa6a844091137eccb5\n6b446f5b6db785002eaf21cba01cf3aae60f2aa6 a3916aa4c761f5dbe1a5df2b1d02b9d701658567\nb7386ca2e3fbb1faf3f3b8b8606118f3ddbb0ef6 6f38723fa6435359b77fdb8aecf3159fc191a8dc\naf97370287c98672ce7a37179b9909889bfbee17 4a76af53ed31ebd1b67c2ec83d327fbf67f7fc3c\nd5aa6f7a2b29631e41d98c2686530ac5109bc9c6 4390df3853c5b1099f5c404ccd703d317415026b\n899d95e4e22f677987ed1058b1102253c3bf10fa 26dfe4c97af00e09c70868e32965e04211d48a07\nd4daa0ff70019394d046c45ed5bc92fd1c5d7172 96dfdb6ad8340b4f68b2a30db323946b7c74609e\n4d1aa995808cc8ded038dfcb3348281ae2865678 c7057b78a87ba95582ee22245a9b5ddbb85fce3d\ndcbca26c88d9348b65a81a1fd7c7ab167c762765 1a058981464820f0302e58c840f2bd0f456d8b61\n55fed3e7d615852bf301e0906529ed48147864e3 c3b255eb030799ac1a97c8b4732aa19c0048ee4a\n76ef92d649c53d526c7b880b2f602fc9f8f2c587 3c8ade5b4a50582cbc314c1a271eb519936c7e09\nc1ffcd66abe173578ee353f177d06e1de8dbe414 35f3208c29dad35bdd0f1476cb954bd06c56a357\n4385505b9c454f2065d29d241d31807d967fbb74 3f9092f281139073fa5224f802c5d43f743163a1\n8dff4d1f34edb8ffba586b5d122af6489c378a17 c5e31a272b6889e67d8bd9cb3dcf0bb34154d183\n522d10e77703f20936db9c06a34503459a75353b c0350b2b1ba81918ed151f0c5a85c4cc59d4522a\nf956e08bdbc2a78b2b7099ed72a3a448bccb2aa2 6d68d4aed87efd0d2273b1afd27dbcbef913adda\n6c14a726c869080980149ae378936bef0bba80aa 053be19975f39d81a9f4803ef4eb8469e1af0e04\n80f38701fc45f288f1fc02777ae8c65fafcfc69b aa10d24da1d906f1a4a643785a087991d2884a14\n5fd9d94b54a869ad1e8135579d173995a6f9c602 0183d7d38db85167f72ba9c3b8ca6cf16309289d\nf19b853f702ba3e2ab5e415f7a357aadddb87c05 999f43c36840a753d606929f33f54eff1a65b54a\n5562976ef096a52db8e8c0af77b58c74c6ee10c3 0634b987c3a074d8caa48a5853ff6791515fac17\n0b9af7e529e72d6c0e250260e14882b61426b47e ff895cec62c6445781f15061c2894fea1c6af7ee\n5b387ef40fb0a27adb18ed053ca2d46a2e739fe5 94c4af1afda627ec58065b1e8e3c74534a3a3e82\n2401d958571795105711959b2a79ae2467f0796c 952551eaf548bca9763d580c5382a76f802b71d7\n885ee5f7b4ee3adba2ca5f34661b2ff9aae8890e 3cbff201a87eaec70ea24e554d868382b05997cb\nff18b5ba78f3808b72696956fab0e0363ec9618c da296dbb0157aee678a1e62478b495be186c31f0\nf49065b2741d347b607611b41e47a6218527d02d 98b5a9aa5f96ea221d2dc98918e42b7805f030fc\nfde373f11386308498dcee4977127d62a5a289a1 66840d09759a0a1988463b127e3415bd9afb8248\n79f7ff470be51e97508056f6c7221ed8faf879f3 87a63c6fc6c99dd5bca843641d8ce74517284331\n62ee1f17b78cd36b312c24918e8595c25f92a8bb eb5d50561be40adb9088d6e4ac24fd7c54b0b8ba\n9f91a705d8ed377faed89d0abf6210da1a299542 ca2bb02bcd8d7aa8c4ef7824cb541955d4bd95e5\n3f384ce7c312079d72a2df5ab072e399b31bf7b5 b6355ff46044a293ec4a16b006c07c845ef27b8e\nf829205d7aef063734a23aa7e7295afc69a41551 121e4e4cca03a3e8f841a4e84c627fb3a2298bed\nb209da3ec43bcce23b430a8a36e9bb81a4420045 e5b0a0e8b431442465457773a0428785a3a160da\n8efd33b0be95d0478ad18fcc120878ae641a15c4 e48245e2200fce57d21089b345492ebe6f30b0e3\n86eb4bda5dc3231ec15a16139c590b2ea6b35d37 a8a49b64714f592f0bbe7ff11a931831df6d943a\nf7c2e3a7f15e9bf6cb90533791a5e0b840d785c7 4683d242ca5aaf1708e27a36efd799025ec6cb83\nffabe871d58541efeb50fd08b16fcf3cebe96012 a14cd5182340b23b72584cbe86eb3eef3d538703\n6231c41ebca78346157e3f67f99c02220d3dd3c1 ccc29ee444e3c2c43034cf969bb91befea22db3e\nd45c71b7a44d88fd7409821d983c8dfe5d230e81 821a189e510ded0c2895eb4632171b8d0e469b06\ne127f0ce6281ec88cb80aae5ef85f1b1e59422ea 8878cbbbf92b808a33dc646c1f424f84474295b7\n4fe072ad1c5b0f25ef1029bedb6f667c71b85422 ba2de75d60a75b0517acf5f9aed720f330278078\n25436039157d5b05ebc8c959e3aeffa931db4ce8 3ef672d00a5ae553880289c6ba4eb811fa7b0bbb\na195b50a7bbd0a8586d91f2cb86391ff03cc27b7 abb770564e27168b0332a15ad5aea0f2814760cc\n0920cb7e8fa411fc8686e9051afefc211f905dfe b90f6f2cd78e1891f400ed6acce8050146b941b4\ne09e3b5fc9eefc6a13e6a019236f4fc9df9e6c2c dfc8828bdb9eb6486b2766bb08c2f091d0192a96\nfa0dadf453bf3ff65e218b9a33fb3d27dc627abb be37f9976001242c831711f934a8841cac5f2814\n0b61a6654ba3fd1e2d0028de784a19e3db5d700c 3d24980b30686cb6db3dc993933e8011fcbec434\necebf99293aefc4a71e7a4226ca3802afbb06ef1 d45f57996f77b49ba337415d767ed320ce4a8456\n6ab47c595b937b8472eb5b4f8ac0e3cbe608b640 adf5c929411f1f730b908910953392084748e9e8\n97528f84f122c9384f7352c9ce82d2c53b005991 cde9227c75368e454e9322883419a0039ae98f5e\n3762f8805442bb7a2d613f5d81a17fd21fdddead 70f71fae0f32f94791df19bfcdfe68dc730c1dc7\n7eba5d1137174c8f3bbe2f745fe63e1e18e7f96c 62b91c8a3e9bbbde43c3d9c9c991e7978ddd9504\n7c351a996b2a9e73b609d2682f6b574cbad8ea7d faecbe152cd7623723d7c27a207c14a27178c72c\n63ad362b4d142f1e2e332c28b140fcad7913e261 cfacc30cd5850b913dbbf43a00a13b2129501247\n1a85e4de3afda5d5f3f20d96fe79710ee467a8fc 4c685a8e4ef7117a807b218c322cdb6358e19878\n5cbf00eb1f873b6bcf4a23681432241b08b5dcb9 3b3e14885cc72762accd1410d1a507ab66c1db94\n7f9201dc0f00f7c0a74c0185e66b5c9dd1fc871f fbb69d0d086c0f50f9a9b56a16c247062e00c1e7\nab75039bc6ab635e06a9b65fdf43b9a0d3e6b092 2c5b25acb97429b91af5debd5fc6428465212c3d\n86f009800ad4a5d471d3d38806d192ffe7b34407 fb1a8aead09b4a61d772ddb3289900c89e6b2c26\n787175f5ba384093e0f40d8bb4e3d55d824da8e3 b02923967e95497b3c3c827ba865dcfaed903269\n80905128a543169c868633e8c7b5ae767cc42960 18cbbd63bcbc9ecad8e74e682f6292ab0895e8d7\nc1978cc4c97ef7935bbd424ad6b90a17eb8fb633 277d48de5910a915aa3b5720d5795ca480a0bdfe\n064ab95cc896542e1a876b05c01c52ebb9fc8c20 0e65e6e898503f51c448166b000a388e5969ecae\naf9e0fdeb2ea1af7aed383f3e6fa7bf968340b93 dbff2a7185ad92aed846f913d56aa6e6106dadbc\n34cf574059b0b8c5e33d93683fa132d39ada1b3b 45ebc17088440d9bad05deb3411094ea451ce4f3\n80ca923dc32cd42d834a339bcb2b782e9135531c 0ff15c5ca3d8bfc5069015c90b7d9a6ff4fd00c4\n82c43612480c0b57b716faf0b05794afc7632160 766ad21148879763f572fc3f7b0ae26a6da9cc06\naa304a581efb8862789e29aac357c5fc5241bef8 41b50ded1aed3ee61791377f45cfadfaba7d4dcc\n8e88a9491c967938420a15697949640d29b77b29 944bb62ad35b30ea9e3104ce060e4a89d9d1271c\n52aaa0e133e75dd13ec733c55e794ae05b677cf9 6cf8d29cc6a9499897928f15d75ebd9175c7ca9d\nd1f5858f126191ab9777d3a0ac7b281f7bb804fd d5ddf3b9d8561269e0cb335b154cffd9583ab9a2\n41a022c61df44fceec442d47ae956ddfe58b745c ca60bdf5826fafea6c5909e7973541774ddc205f\nec9ad5e899798eaa57ea46c59dde752bd37ecaa7 625800712d323f522e0a8292f346f46d84cb740d\nf5e4f05d814443b130d61916b35ba0b0bca3f479 3887e7513cf46ab96190cebd332bd4489852b11d\n6d730a7219e40d4d66ce69d5a4f1517a8be05bf1 716d8871d634b3085dd16796c7a18156de6effa4\ndc1fe30dbe583ed055181249f4fccb60e82964e9 8601b672618092b320e2fe3268fc5cbce9061a9d\n4ba337a68611138dbde9f124695b012f576972f3 bd1c2a8a316a31483ecb5cc69fcdcf5752eff31c\n219c39d905b7ce4aeeb20d0180c6bf804bd5bf70 6f70f040eacf34ffc4c9f5e8dca2220ad5652089\n4aeedb22edf80ea687a8887209521ef568d94232 1d660e3ce69449ce336245bf4a5d5bed8c3e35e7\n682993023ea3de7ffe9aee9f8c469ad31867160f 7cd861ccadd33b2122b656d7e4a310fc6da40aea\na73ce744a6cee704d8f0c596627360ece7e671eb db1007c7b56a8d535e47893a56499378b1b49751\n45b44e7a060148ac7edc2e67285a79e31af3c00d e2bd8728fce8cb429dc5a672ab77c2c643694705\n16ffed6257fd67487d0c230781c71f30e7d6afbd 33cd9fb7f5c97e3ff3fb2599eb43df309ccc1262\n242a140c2ddae9851af0818dcf52d2b725593991 7acb6a6d4f62ffbf56cf21ca87d859d23ea0cb3d\n348fe2e6ec48e5658ef5eb8172e36229521ad72a 6ff3cb4790be7e6fb4a37e97ca255715ca789086\n737b04dcde22bab7859bae212a8b73a76e65e1cb 00501855741cbbddf07058bb738a010d99768e48\nd0229320d4799a3fbc074b8f3c01c6879e0419d5 693e7e27839c19be70872a6dbe1b54314c0cd14c\n7319a1fcad00bfac27340f855097d0ba92a89b84 2d525f060b75eccc28ae791c6904d1c264f5e308\nb002f46b1dbd4de8c41b4d85c9afe8cb92d01aca c60e66eddbac25b208fe9f9ddd9844db788c751b\n048ae6b82d982d2b006f8a698d945ab08473d1d7 3265c73137e8f2e57b148708c89ed2f472056bcb\n67290aa41e964a03dd6b90f88100c7d203561491 8b33586a15dcc61d49a521cdc2cacf0d4c627d05\n3826a026410a317825da785e1297658519f5aadc 8b73c8575aa7a3fde30e64e6588465349cb56b7c\n3e45b53605fdda36474a1ccc9ee50afe06293905 f2cdf0a89d2eee057401d2696c1b6cb147fc60c2\n2ca8f67b0df7afb7b7aff271b21f2fd73fabc281 03e06030e38db7beec741938c33ddca7e2229627\nf4ce238f5d96f19d242bb0f673a67a37d70b1e64 9c08183567715d48aa6a35823d5590b0cc291821\nd8ebcc92642a59a2c98ae966e62e170f81e4ac6f 687dadab6c640b005ac0aa915c0341148d12ea47\nee94ab08da6533410b37eff63b392549ead5b789 5a00a55bd00fc658f3a8640325492ca73d94e6d2\nd8a5ab112cb20730669665ffbe10bc23e796b8a0 3688ba35c4be3aa816bec661cf4087b4c5eba55b\nc0ed9714132ac85c402e2e5962f7f859ba68cc0e b945cdc205beb97972c5b60e5729f51c8bf845d5\n45b6af200341479e23556946f791c45babf62eec 8e92313982163e4cfcbc35fbd895f2f404417bfe\n37b4757be6bef61e679f1496fb088d128c9562a9 15ce8b2589d23743293170671649a6b18d7bd97d\nd153a3bc4a0843a344160f18cff33d9a69071d27 872a60f8e84c17793363b6f2d5cea3d8a9e55f0e\n7c0fc2d6a0d4d543e2493c4758cecdc8c028542c 19c5d1cd989e45eb522a1cf88f8b3b1ab0be606f\ne6d2012232fbdc894c5461ef03025a3416cb6e9a fecb3a0ebe1e2bdbf0eee9828c847066068dce5e\nfa6647e8dec8b625930c5539b0af720339dd6233 8c19dac030e03575c730a481bf1f77b4c7f4a19c\n7737cc8bccf6e3f4a7fed5d1d707c5f2ee867b66 ddced324ec50c92d79307a80b8b573c1be44de8b\n0d16502f2dcce50fec0eccff4d8951c2c11e30d6 93a82b2c26782cd2ab85bfb83b092b1cbb768793\n0f628de27af113828ca948236c68d59a59e46a93 1e799cb0c54f3bed754e8809cf0cad79f40de997\n462d314c6ccd0efbf82b7932c3a5e3dcd13ce197 404c4616a986d39c80ca4c8313e1245db5655d60\n495735df2254e5cb203f59be639d3336b09b7f1c a6c16218912dfdb7d608d97c28472fae693dc643\n8142d9294e0cb60295d4632412cfa4dbcb5372ce 46de6cdc1d3c8154e806a443dc7349756ac45ba5\nd2a8691f3bb1848c38e6bec49f01bbfbf805abc4 c86c98b49bae7dce88598d59fffab501a9523365\n56ecc79238ca026cab324de3d9b96cba0a8216d3 45af935604399706c8a8bfd55187284f1ef9d19b\ne91c9b96182820a1281889bb619f6206d6304a2d 822747298f196c261354f9c1528e79d1b5a689f5\ned759c90e6a4082e10bcdf32159d1d1d0444f589 f37e12af9dc88482f6016024e359b373c1e2e354\n830b1a08b12a566f9e24707735f9adec27759932 fd90c9903f15a7ed5fa484b5cb971747a8e46058\n711650d6c30eb77b90d5098e4d7fd97b8f3e316d 32a4255db15cad78f4617f1a6c6329ddd24e1842\n24d95ba6b7711f74fc02391a5476705b7130142d 43bc23458c600bc60629b6c3d1ded7bea7538745\n60b6d73ead5e4bd4dd0519a47f9497ed1f7736f1 a67a02148c1f9dab863ad77ec0eb738a5c10da44\nea4bc27c90b24c4cad9e2f729be7c0449b2021f4 701a60301902f75ed9be5f2b7104591464e4bfa2\n6d2fbb6d04110d2a79a923af1923874d6ed74f83 26ac3a37bb7927839e73b24eaa62a6024e0b63a0\n7e131029e11214bde521403389e6554f9fb30e0b 522c25c00fd4e796880371c16c5bc14c389b5a59\nda115c3617a9892c714b1bfea0a38b52ed05fef2 56f55c4e10d883fdc1416c38fa9fd5d50ff379fe\n620fb2860bb8a902e879ac461d09324b18bdd911 71f4a7f188767806f9f9cfba7ca402f47d37ab98\na9f97e40b0a39b52c850609b740fb2d516697f72 8b61ba68807a7a4ad9a40ed8d13272b1ca504ff3\n15a42c1bdb3bc9990661bf622a8403d921cd3274 e45ba1afd4ba4e0ce48f34738cf0bc45fff1e095\n1d28eea89c7bab348ddcce07d23b13c74747c6eb 97671c6ed2fdeaf9c24c66734447f5f9b88988e6\n47fdd86f474e16cbafeb6d0b80cabeb20970d573 b35e01d8c54d89e41538f7adeccd23cb75999c43\n2aeae93513c1fc83edad9f68cbd4c591978c7703 e9f0838967504fae8bd94fd94a1601d940632343\n4107762856bfb191fa974b10ea5cf0ce39fadc25 9a8d2da0b0e7c0a2a5dc73872ab63c70de610bf1\na9174ea6ccab5a38dafc5f238679b9057df93651 7edbd19ef6b9b4764423a48384ccf849329c0f6d\na84282e90a518fe38599cadcdc5a2eb2d81bd304 a6be8b9cc6209cec26cfefbf74502e1aa218c2e6\n22b9b1b81b5221bdee5daf71b727f22297fcdf99 a39e4ec0a039b0581b39a1f77e0fcd0546e2f089\n720dfa5eea53212e0f3054f426294cce6a6d2e85 8a4fee2456ba136b89a662d48a0f803899b79771\n2544dac3a90a1d5ee43e9826f62b20e348e37f71 89a0e22859323dad2b30efcbc82db3e44653b12d\nc1610533d66eedb959ab51151a3f745b86cdac34 f2b03730b3f8ec63f713c0b5e2e60d1697eb2bad\ncc9fec9f4a5f3e2bbc3e457eb3b0d59fd2ba1898 5162a6b1643fbc0dd9f2e9cbfd3d3b78e3c525ed\n3ec9d00a9cc77894fb9a8d17b32a4f85b8779fc1 6425386efd0ff303ed162e1ae648a3ad95b2062d\ne269a8a4df7bdf2ba12daca91cb0dc655cb7ebd0 b8467b569d9b8c4ab4e0b1aa4f9effc2a7d1efb2\ne2d2a43114e6073ff3a1b0ec4c5fe2e2608893ac 80d39cc8398dd9b1333cf5a17bc9df0926348cb4\nf765ed0f867ce5cb84efb7a316caecfb01b62dee 4ecf02794124f0e9eaab88217a90450f2addb805\nec12967340714984b4f0a3ceb14162f01d7da7cf cb02ae3f72f2de34005c6463b1d3a3ff6e70c61b\nff456bb6a0f7489c08070de0288c87df358ef5db 612abdea67514a790b4f86d468ea53e32f03a28a\n34e14a83dea6b7ef50031cc433319255c0842f26 27803fbbb0f55ffb584b12c569d2c0c21de15aef\na36da79933bbb35ed6e63f3ce61eafe0b0cbacee 8dea9fe1d3033df698cdd39c8bfe83d0ede297a5\n26753331a6cc59438375ed06b7b0c47161339afe 56954fd6668a4e902f93793c2e9990c9e200be5d\n0612555f5c0a1859f28afb4b081c29338aa41343 034bc7beee4f59e72b99006c8f4efc4e6b225c72\n94eea4c839889888e27cc92770e8a10452b9447c 24baa7c224b9281c4245c127857b5c7cc0e16cb9\nbd9c831200203bea59814c1a11f9660d9593ea30 1823563de26345dc0bdfdc36f0d98fa3e801cdd9\n88a1e5bf98043fd413ea0c8d8426b849f8235ea8 0506d56c12bb46dd1ac3a9ded84dcebcf408986f\n722539f5a600cc724323eb7e6e49eda5b13edc5e bb6e7f6e0df5d97837231e0c6ce1670313c5d718\n5212361a6cc768c2e994f0ec7fa17a52217c9f54 868f4b9c051193d90aee3636a5369bc5704ff964\na4a22b85ecbff8c81cadff10c0c04bb4830788ed 386ebfe8dd950e8bdeba576b4e40a62c5f9d31f4\n07ea8d0a63847f3ee06a76c4cd01401cd0c70b3d 9156b88957ccbd8069a424dd4ab819e9c48cfa48\n2a80203fe841e620c374340aa267de8b50e08210 c052c9da0f919bd9b1ba1ab4a4496fe233a51970\nbb503b97f20c3aba1126bb7a4badaa9a8175db64 e56596cb11e9fb8c4068d87cfb908a41a1c6b002\n653bf6bcbeabe7c6685207203ac63542911e83b6 3487cdb10e93743500b776c93ddd33c7c96105c3\n87d7a3b9ca55c3fc150df1084632009852090734 1087c652c173e609834c286f9134ef06a900c847\na16f27f92ff4f2e38e3b92f3267047b5a18c0634 df706f6add61cf450394cbee6553cdcee653d39a\n5c28735694f34b436cd96af6adafc04c773bbac4 9ecc47054d654c35ea5062dce65e1d7e7ac40219\neec8a68acde9448799a2f7ae530e29d518c3f211 512c6d29f7f0212ea731aaf2f8bf34bf2171e1e7\nd21e66c7a887a933f357e2706bf94b4f93f9094d 89f6a8e7c9e895664587aa22bebe7c5db772e531\nb7e26057860eabf1950f5a9d2e405a570c7e353e 44201faa50aa35e77fce44caaaa057b8c94e2ee6\nec52df08c3690ad9d2473938827f9a52cd55efe0 64cd130649af0bcf5d3f38a1217bfa261c647a01\nc9fca0f6a3e5f1b210b1afded91ed2c13ed3dea0 cb2487c0148b7eb1eb923e4612af3a18cac6772c\n63b6177fe397682c91f9118286c56355f9cdd1b6 7d05283fc6e963a46fd56af98eb6693879c2eaea\nf78989bf8ebb38d06111277b8acef56b309cf56f 07e6997f51fdcdb0f12ad839cdad27ea355edd81\ne34190fec006d9a810fdf76eb3b36b5cb558fa3a f40084347dcb71146dcc3c6cecfa3394cfdb100b\n8a54ac07270cd308a528b0baac6bd35e9cb5fd0b 9897bbd1ee516eb0a26d1ee65da878784796ee30\n55186ee27a0255d2813293b6a047db08e3fd2440 ac8fa397a49034084f390306173e9b26b6b253a2\ndfb605eac1cccb6d172666537a8ddf5838f5c7f4 9842c5b8b5c7d8eeea191387bed9ecce13d902ad\n8538490d19ac2dd1578664d7adc0387f1cf69686 9692a3e621c13a6d3c2e08b22196013f65423637\ncf08c4736c6bd7fb00d716cfb250705e397354c3 4883a6c3fd07da6aaf387cbc69f56ac83186a061\n83a42fd3187118ba4e9497b1adb072a43b6d8eeb c2897493eecd9919caa8334dce0ecbaa3c756419\nc4b85a1eecb2e7b8ca20a3e77a46a84634080256 f545d9d52ef51f94c06296652209366bd73d6d81\n88b644485e4b2e044c9558597ee3003f734cc8b1 7bdbdf4124b1f04cdc4dce3f8bdd7050f5b2b38f\n07f3d81581b373987cc0b9dd4bba350dee1335e1 b88fc4d3a44d5606cd264daac5db4f0c1fd9d579\n827ad5e11505a899c3dae9c0de9e1595a3cd775d 3e5e7902e46fa818fdfffa1646801b085122ff64\n0c80dace3264942a3f35bf9a51f8680a0abc311a 26aa63d8de56c8f2e66c40320b03b35388ecd2fd\n2bc7e69d90e371ef4b893fdb8d5d5ec5dfa5e1cd c52c6232237b0ceeb90d77a19b16c9b8b98b8c67\ndd05fa9a90eb3979db8e36d2668d5691709aeb86 f400859d29b3308569d65b6ed3d39551d519e9cf\n3cc68166fa1bebffeb8da77f5ae030c9514bfd91 b33c944ccfe236fd89f8b6610d63db77c8406b77\nc4128f67cb9fc17cc6c145cb7015b568bfdb58c7 c676f445c6aef98f4ac26bf79424c2498c90d30c\nf2bbd72bde1e35fee1be8e5b474888b85f85afc7 874c83a4019e7462d16f50c330565c5b3dcdce8e\n26409afe41913669643ea13461cc2dfcfea0fe14 80c2144bd80f445da9b245c2b8aa2c1d05b6af58\na5c94163bcb9333181bdfae231145bd0eae39375 a726ce026a8b282e2740c75127e2258674003630\na5d1a875587347ab4dcfc3023695e0341a92223e 3ddce34df98853877b460d4624524bb5f18c1d71\n16a8688a6dea4c81f281489d4498598057ac03f3 75b9d534bde910e56be12478776d59ea6895c3f1\nfb49c6252ae2e5751ae61c2f2670966a3522475b e9f2a7362d75e0f6af870f9d426ff06dd9f8a169\nbf11977ab2e484a8a5b224be8b33352e6c5c6799 6e04eaac5dc761119806b389c98a98e2f43ce5bc\nc5bcc14506e7338d27d374c867e1d54812f4f76d 282827b4f2c4e1781ad35601a36670eea49358fd\nd93059b53d7d720cc3e1561ed4105696b9dbfad5 38ff2c47a2be833293fa459fe5de2cab00cb0207\na0a81248e4d6b8e320072071189995380b65d371 e87f09d6690952586d888eb0e026e91e7606a1c4\n2fd5c934a132902d8c82314fb855738b7e43c3f5 a41f3183f0bc01897cfdd56b7e2e9d863533a28b\n60e9a1e35e089ad6d39bf18a0c758ec65c17b437 5126a21fb5cd4d82822ff87e886e1507616ec064\nf83fe38fa6dcb9b87c387f7e5516d2e6122db231 5bab71889e3f911357f95825060f2b4912221087\n38aaacecdb7da09d4195ef1558e5b5afc51782b5 460a2df0ecb5ac4f2880299d451cffbf620141de\n4b91eac02a7a2d50aab8935dff94cddf6d5a6c32 f8f1b14b5bf0270bbc67996ac3ffb18f702bd05d\nea80ad0b87201df60f605eb3b938880ab969cc2f f8590c3da225adec77e8616520dc8bf83361a0d6\n94882f571ae1b5eea62f989650c625d7d531fe56 ad164f817716f0833b90c2f19aa1b2375f989eb1\n1daad73b5dfd3df31228f12e6c61caaf5b3ad7de 1a8ee53839d09c7cfc5966a07b96da57e8acc325\n5f3429c43b5d9696136037dd76fc870d6ea7e421 c97bc2c3b2f520352f2c33fc81b3b7744c86fb00\nb4e876144542f04e1b384260ea8640dc5da3a4a4 9479913a19e7fbefa516e3e0637587a3bfa389bf\n9188cfb1871077d079ea477ec21461fa0a81df4d 3e3db71fc8205254f48fd56ef8d445c5e5188612\nc5a7869f299667efe8f122d587b87e1cf9900b97 aef3776fa909fd148f9065a21d0ef23e0078004c\nf006251b5722e3a3f5ab8075eb93257c67bbc89e a106164963fe7e666fdec98a67c8e927e3786b2e\nea72df78a3bd55867bc2ec4d210ff2faa18872db 705ebcb646e8b71928b89000ceb88799af880b7c\n634ea6c4642f2f277cddf5c1191878e6e07455a0 80ce2316deab047e02564fb6574b96a2c5ff9079\naa9a2125d3117f4b1644c7e0eee178e0a2127ef5 32ef3aefe4ff0602b91b2a60d392e4e3b2ada81d\nf871a628f4a72c08b137d08333768bf4434917d8 3b816c65b93d0ef21aff982c4c29708a3702b6bc\n5784ca3a36faa0f76c3e71ac25c6d7845a817df8 9aa6dcbf5d23f4a90989c4ef8468f153a3e5cbc5\na5933111ef712104e759ccbe678af7f3c8b169e1 771dd4158e5a7e3d8dff2841349588d806448299\n79abb89b14deb8b7c1ae6eb7c57602f9c2b6b913 d725de16750775ded90445eb1d563dd55c1a3a32\n01184279a640e6b2a0c6262557639674dd8035f1 6dede0964efebbb0bc2a00e2daf72f0934a57552\n5156dd7bc6fcdf92defb6d56b7b7f423c11da5f1 384e7bd6b735dc5ccc63c76be1fdbc42ab06cd6d\naf7cc6a6a2d9132f99538c1a342aa695926f08b2 1d2e99d50ae902299ce7536af7a6c1192ab2a172\na0c5281a7e4c81fee7d3b9c802e81ffea2a9b4c7 a0e26fd48ff3c0c49a7b332b680c333ef8db8908\n50a9b9a30398f6b2816bf4844048bef9dd750c53 603460b0b8f81418c6576fde24bb650cc224102c\n773c8ef571d07ae9a053f6e03fe0c37513c0bd06 c61db3b31d20cfdc1c14669194aeb200f4114e7f\nb72ec874eb47b8f8e6c8429c798bf55371e26eaa b4215ee728fe5fd9b041000aee227488f70abf30\na3ac9d91ae70b7d812c6c218d2b63d7052c907b4 aca7a6bbee476a1bf1be4df2023df5f247bf87cc\na25787a28b4cf9878fee2989c99cce67bb183b55 d4bb565f4745b21c341f30b64f6191c737dc1494\nfd8b2b6ddc6d72079d9137cb8899e15a6ffa4a5f 0d559cba547ed81bca3bb7c81933ff24ad1f7c77\n66501d370267487f425c0cf42001398107ce5299 dae6e4ae8948315c2c0e039a8bdf7ce7777383a2\n8a60051d67288d08990185bfe2bc6e4d81286cb9 5864cc8a49bb0ba40eaef556bb2db0dd394ba902\n58f3a7ddd94aa1263c1f605122f0e2cfbad2b67b 16da38e33cf9d3c8fb58407d996233d72e64c7e7\n895cc7e511e68e5b68f578f393a322819a4eea97 efbf6af558a9483940336d4df20b3c3fb364f61e\n81617dd1974b41f975d56c6d693d14c67daa7e05 2daceae629b791d6f63e78feb80d68d376052c51\n658b2915b9341d958e2b4e719f0bab3b76166378 6793d13b75c7e36e0f7ae6fda9c14be633e9611f\ne5c0737f65a263c6837f46f8012ec0cc8b8aebd8 12ba1f9929bc4ca89d82bf58590ecbdd8c6be9ac\ndcad71fbda1b2e027a20b0013d356c5b7da09599 30674af89b08064bdb24a35fffb2fe481372de8b\n6b4b1c8c3267f081b07a1a7503827a992ea1fc43 c2bc748de8b266351e06a5e5a73bd884dbcb2142\n407e31d44ad7b91ab84af7f7535e405f7d5a9125 301b7b5790c132b41fef470cdf203d315586652b\n6ef3f12d522c21ffb001ece15dd363b05c489d15 09a30bed1151a2a380dc11c7a8f22727e577b27a\nbe06b70b88450f28f29e0fcb1a25d19f3df1a38e fca885c0b83f3af65622a48aee50296262135ac0\n747181b7ce5561bcfe353f73f405ded26c417e0b fb197590386496d47fb6744ff349fe0a7451b5f8\nac209595587624ed7129a4c5f430505f42628319 64e7ac2c172bd82306e28e2febeb3027f6c1e038\n9e2643d3dcff52b377e001edee5f605cbbb35d62 3957d50641659397aa0f1f5c47e31e3cc9e526a5\n1aff50459c56b7bdd05e3f63730a7fd3f0c1dcf6 e057fdb79c2542ba7453480666ac2c9e53e2efd4\n4246417fb974bf2bf121891364924132c972a299 e51ba117862572eda7d8b12dd7a3fef032cd8ba5\n5a38b3decf20bb543b5dfba225ef5ee2d49562a3 9b6303c9a1ef4ffd9042407becfca0a0929d901b\n0b934256476b4c2c02932b89ea2cb34c3dd2035a 02febdb24212eceab33b99bae348cc69927a70b3\n2e6bd6b90c38a4942e4465cb16a0e935fe6cfc79 4949eb466160ba1e19889ea39efa4186206d9e73\na7e72cb934aefab321f4c197e25e8b2513ac3ff3 d34858b2061b768b03112f69ac62b90b992fd6bf\n86ee36de1bdc5106bdd71df05ffc3bb5d97c6f47 2c5cd79df9f440008334bd539203a9a7b890b720\n0b5c1f4fdff31f6e2b94f1757047b2e0303eb190 310390b50d4c294418d0d7cf786e21e819305e22\n09cb3a239ae325a9ac741264b6556b5b34f26734 b3be486e9c9ce40b841b4792ea90e18a6c0b6634\n953a71afd187c7f39da21989c212c65e0e940932 d4c76937195aa2a63b266eea030ba859a6ac99e1\n1e435829a0972a07c4933969fa13dbbd987c46a0 a37b10dfa2f15d1f13c8acf7aa13bc29b1f0b086\n6b2847a77b8eb3a3e5da0535c9abaabe9aa8afd1 1237b153125b205d4b2c4522f3a9ff3698f2a736\n92f915ca49f8441152a422fe666ba9a30a5ea004 6ee6d7191f069546453dcf317a67c4bfbd3044eb\n46351d897ce02f0a9d39e8d4b1f16221d798c23d 111d09f4a8fc023932f4e9709303e65b4da6809f\n7a60599ffe94b12c60c63c8141e8acefbf1cce4d 8417eca80af34d421600c8413d81cc2169046eaa\n2069433ac84b68b12150686dd218aa45bc09024a 3f6939186f2cac500908fa77f93f234d6240fcd6\n11d0bc0f313295e8a81c70df49bba39ee7bb64d5 2740ab893ae04e1353585364029042afd2f6abbc\n3c04505d7744418effe1399091642ef9eb3d9470 d3413f9d6096e621fa631d54c65ab8adec5c8f5f\n5c615ba291393a5293b7bf4e3e793ed89c2716d0 0b470addbaa634dec5250bf7e5d6296c836a6186\n6c16925b75abf5d70413df8b5091dd2a8425e0bc b4e3761c12298f7504122f65ea0a3f91a54333be\n1cc938b22fdce7a82221988603a66a53ed2051e6 6c0b1a4c5248db5587632f7ff932854117f436ba\nf23316e3e4edf69357fe3e23099ee1cd7ea476bf 49796887de58fe42015d2367ff72dc30c59eff4a\n7850c7ef8a9e0ecb4f0b0c12f686ccfb747103da 3d4262d6b9ee9fd0c55903c04a8d791839d586d5\n7945620427faac450dd49b6ed88137397852d8b8 604834fa154677c17a21ea0af0315ab5dfe150a5\ndd0bbd963c51efae1c6527448efb68ac73dc5036 3ab0ec3f034cfec3a1ffb1277c91a1ab7b5991a4\n21876f23d6e2382bacfe6e75500cd04992907d21 bd0536e993d4d0b8c52259dfdfdc09486587c0d3\na028abac9896434b6aadf6c5dbeacf336eeebebd 88fe2367b5825814ec9444760c7ead5680cb8ef0\ndcee7a1b90d17a1fc4de98c0f0926dd91a0c17d6 196f59521c45616f3e044e47eb9889b73ef5472f\nabc22b71bc2433ea0481d0d8311598abeffd6698 857d32f81dc9ecce0caf6bbf37e324ded550c246\n4e405ad964198b6a6ef5c7d8ef397b9e34d1c935 61a3428ca1b5265162fc271277d07c33e9af2da5\nf14e07d2e7386914aa687ce03dbf82f44d4e1076 eb1b81c038eb2cdabacd356105091e16595a62c5\n56c42e6cec821c3ba4a57c4e8626600ec1d69076 181f11423dcdf46cc4cac21303b45b70efc2c0b1\n1c7832963e3cc3797e0bad27b2bfb9b73a32fb86 e73c140e8a2d3fceb212473781e1fc87e524db57\n1621cc673910b65265dcda100921ad6f7223c10c bfd689db513af68b83b79098a421c14912c7b644\nb1442e1ff51def995a47dd5330ea4e7604fd5cf8 b4ee7f8ee17089d841e04131a1425044ffe678f1\naedfe98bf6a23879d83abb9613a6e511ee046d4e d0f406041b31f729264da1b98bbda0f5064ca5b4\n27e9a53f108bc6c7bb28ca8f2e0fafa7884643a2 c3122541543e58591e090431cabfdec32d2aaea2\ned42e102db488ddb1c4199adaace130e5b996eb5 6292a48f6a1dcd3df4c215e49bb0199762a9073f\nb83822e9a4bd10c05dbc3da4ad84337ff060bbfb 5c6705ac87df83456ebbb5146ddf3c1ee254a5b9\nea9cc000befc60fcf55bd5b9b2f589403c06bcc3 664ed33d197e2c1ead37fe4d3a9bf81e5c9599b3\n108128175ee1e7db31aac95f7139dfe0977a09fb 3986e8e57e62db08cf84297a0d4f1c27868e72d3\n829bd4123945a5e294fb30ad17c57dd182ac2afd 9c0a60a77f0a2a9ffc5a69e7359115fe22454e88\n50195f48623ee90dd6b2b1bd351fce59a9da9bf9 9be57cdf6febaeb8fa2f59b4d0d746dad18d3952\n36b34c555982fa454bd2edaedd95644937a8c1d5 fb0ea828d0c5861e132e133c615e131bfb43e3db\n8786f18477d4dae91251e2d244633d622ee2fa6e eb759028f63fe43f686dfbc3efb5f79e9c0a1cb6\n27c872cad856c09e6aaa2f090215fc2f47fcaed6 82a5ef3d9ac97e4d6a8eceb7cdfccadc25fb70cc\n7ff9448439fa958b1a150a07b79cc937a33c94d8 a8272c795c7171f92a9ca0b0787b9d5aa079e072\nacd7e6099985987544d7de76fc4f6745e3b27f85 21cb21c20f2a1d29e3e4c8001c3e7f078adf1d08\n42582220bc80abb4f16b84798a1483ac3f517e1c 16ac80c25e62e79b8afce4cf20ac7abbe3db01be\n497307b4fd20873a7f1c11398770979ef55359d3 a27994d1f6ecd80ff674b5484ceee2138ebfa3bc\ncad38542490e55ad50820540919b71682fdd74ea 0c946c339ed8ec567b589295581b3e60ca56a84b\n73e1b7cae0d43b9bfd37370cc796d278d1a211c0 ec1208479a0aabe6e4705ad591e8127336d56456\n1a7064c0a57389545135a46b94329c52b7a3ef61 0e83a4a7ee59339adf23cb98889838f812411a8b\n9e090ceada9b7cbae7f9475ad5d7c742f004d7f9 8e96c9e313cb53e4b2b9bb59918d2e9278f3553c\n64d792945e1912b6894bdddf27e10aecb4bdb35f be861e07fa1253fc8082190f693744f85d58e49e\ne3deb1d6462cde3c17f21a74424e96d5cf94c9f3 2412dfa736abf92106faa99249f2bbcbfd543af7\n4cf29240f6001fb0f974d1e1cb7791ab82e8cac6 6357a36bb305ec9ce2299cc8784c0e65c4569f56\nd20b8d28631d82c54a52235baf17cf128d041053 84cd54b818301c72783fd0345a3f1586ce3836d1\n8293a3eb7ac118cd8c30158401b5c1784ba13663 f74c843e0d4e10986cb499d4033b4908118c963a\n030af992518b1486980e23575486166d1decc588 d7c097ce66f08cca37c23ae9a5deae8cca628b77\n69a9c444d23cdbf15aaac9f5b5d6914de21fc4e8 0ada3957af2c3f119b9ab8c7bbf6527c2aae2a7b\n2fb3dc2dc6035a2ef15e5a94773551d17211ac94 a95021d5a0829221699b58bb39b3fcd5030d6dcc\n41b608de729f869fb96789865b29bed833a9bd7e 8a5d630ccd0793b29e70a44ba618a1323002c788\nf95bd6f1087b8539b5f06ecc16617d67ba7c8029 65499f6e41a7afdd04bc97d5396dc714eb080dfc\n33e3257ecedf245e94d89e882c7607c956137b42 c4cf5858fed4e5f46a3ba7d1f71f93681160fd0a\n8dfeaf5d1e2ee911634f00ed6bccf3fd818fd7ae fa0dd9fef8b4df35e146adba156a536915d3dae8\n3bc77524fcc4e79b5f106a83341b46471f212e79 e35f27402acd37d35ce9748e41b34df179d8fa9b\n2f84e8ce6f046d946804f2d898e9681af2ba94e6 eb20ded99e4d65bba6fa57cd8c6605806b2718cb\ne2b7a4a9d1834da285e19d0b0e18e333bad88351 3d51208451c773fd86890c77feb16b971270cb76\n0c84eebe36dbb44ab74ec5c8d18aa72399b1c155 484e678f7328a3ed5813022da69ced3e0a3124bf\n1a980744f46405bd0c6bb78fc33c8d6d3ed05d53 7084a51f349915989cc1f0272ace06a07882449b\n201b09188fbece2b13585c4d4514e6ae36b2dccb 1790a5df0e7fb66cd730bfb2e981314e01511fbc\ne995fc44286c3c42b15c2c3a2fa717e0304ef3f2 bed64852d09a306a6b5a934f32c75ab5f96b968a\n6e943d1a49be7e815dd295059ef1540380ca8026 940057a02d12485a5cfff6d57b804ebe254a521f\na0bf28ae9e71f65acabbefd49249edad359a4d7c 0b506a11506e619419791266c83d32a644552871\n3ef118a0052cdcd59341e9eb212b90de0968a8cc 4f1c699ca2ebd3a146f9c573fbfaf04cec4874bc\n8146c58c2b641323bfefa0cf2a04e96a444cc36c 03a6cc3faa686df4adda3ac6a04fbfd0cb26e290\nb6d46e580169a1e07c8a9ae9de2bcd20808416e2 0b4e102657e2cf1b6cb6ca2d3f6b115469e635f7\n8e1c0ecf8fc831a9bf9c5eeb9ae70566a23affee 6952db9c645adc5dbacd7ebd3c9099736f28ae5e\nd2350570c5a408242ce3a024ede82aeb8ff1494e dbc7f82771ae41e38e59f16791500d5c17e865ba\ne3598c9e72839add5c90c2af9e7c2c0197177280 2da02bc209fd4d0395b23526f24110cb4419edc4\n0ac6ff443d12978073fe1a7fba3539aa1ec6eec1 99ffe5f710575b2e342ddd7f1702dbef0b85c339\n7f82c5a1b49561eba294df2cc09bb25a89d1828c e72358653b8a9597db56755a5e93501a804010d5\ne3e16a859c45912c89bcc5a2fa1d8997b265face 25ad83443cae3e7654b0e9e1cf08e2bcbea65538\n3f1e25da028c6b076a7e6663a035c259f1300c15 24358afdeaa6f64ca43cc4aec1d8f7076bcfb8ae\n992c34861f0dab0cff4fecdaae5e4fab489c1bdd 0c6dc8157872b8e50d32f40b6153f3df694b26b9\n2e592b6bc42fadba373986dfe0fe29e57e0a98c7 02d86a5f4772e76ac13dc97d29041e1a06d318a8\n980bbe8a34bc9bc5e04050615332ee5effa1e63a ab6946f8b2b3ab042616525cecc2929c0f19ea1b\n19cebfa83c1b7c4ca13763adc3c7425e61a221e3 7c5e06cbf736d7368dc84d3cbf64fdc6bf11f41d\n6fbea19c724faeef85d65138604d188a4248d0cc 0e6d0395d24046155275ad33190c19f388e4be82\n3c312f722bfbae4abbee9260308275a3c54b27cc 71e8c2fe2d8efac75dc11e3446b615bbd68a692a\n79930ac5cb05e6633c3b33421de2900b87a92ef2 bef277c9b37dda7cfcc6450dc07dd73479bbdeae\n3bdb0896e2a392e5fee17b4014020678ff626c7f 3b76c9f9e0e1e584a2831edf57a5609c630719b4\ne40ea4e02eada17f553159a8f71a82e56874e943 e205733ce604fb85de355083cbd3b356327b2c1a\n3431813e7c635b5c68daa078f30e952d6ba555cc 3060bfd527b2a80c4f40750f36496641994a096f\nf0026de987e450eb44f4f84505d1074fdaa7f203 15fe3f8ec5c176444cedbee61231db54b868c985\n199ce5829c4627edc59d61679c672e4a304347f4 92094fadfe5b7dd6e80600b3aee228eb340eb972\n0a7829e3c22b6d98a7b5481ca4c50a099e287fd1 9a63352b8dea460f916f8f37ddb58dcdf4cfc89f\ndb080861ceaccb9d378cae0966894000ba4469d3 bf2e1f368adae7c146cecfa55c2f0a7d4e29327c\nf5c05d0f14487daf75f677aa0640f6e42ab4c47f c4f90b3c1d5d6e2d8516be79a2607a1e4bee9e53\ndd9aa2409eb9d97e6044cad8595578061b1010e0 2fb7ddc479c803a01e84448eca8c336e483f477b\ne39557df5ad8b3f59bd4cad7304619df730ce1b7 66912b6d4efa80b50ae6289ee8742f2db49529e4\na02153cde03f6e480974c144b474570e4f267150 996fed65515cbc29d2787ac6768455214df5acca\n0fdb05a445a37fbc2db7047d90dad91ad867256a 69ba6d9c6fd56865b3ef85c5104f2688c77ddf85\n3bc28674f8374cd268ee859d07bd067c06c55395 5ef6868555a44efa858915924b441b51b0521e56\n52ccbe637ab7fc6a6a2e845c7a84af5427d98b3d b29d0bd1208294b1f3317491cb6c0b71c38b85c9\nf49f5f8020bf3a7a66716a9b5ab7864a8ba0f443 e962ad1e415940c7e0058c9ac5fdbd8ebdec2153\nf1ac64fd254994f7c616960c0327709a5f6ddab9 28420f587e22382c594f4ee3bc7c82b49e175a69\n6d37cf347cab4829c1c164224f8ff48ef81044cd 758a0bacfdbb102d44e489556ecfd3e82b628907\n0ab66e113c3684b539be5bc9fb394b3116719143 9cd3f170430827aeae72fb18a5068625c26193b3\n81780404ef2c311d37c8a04046a364f1cdecd182 2023424a30b08aa9a29fa27e78a2416baf4cc191\ne7433f2b50301d8034496553f1b404ed0cd9d7cf 20a334418ec836f38a3adc18ba1c95eb1a7bdc5b\n78e1b17a2d7ad6cd6cc3fde5e8370143c9212b2c 9f884325ae02eb43c1f31909dda5e5817fa00d42\na2591d4dca3673c7e31b87b69987c5279f4cf8ec a2eb6832c994994e73a6e2ab3d7dab8614e8e9ba\nae0227223b45995cd4bd0795b76ea4e14352c397 547c2c3e509fcad5ad30dfc4e7204401a73c4af2\n6bdf21f80bd6510573c2c71c9b34b5e361d3fc81 d3d743a4cfc9c02971cdeb24f66b48c7200ad8c0\na0edd4bba40c25485a6ed44cd948607034a75b62 53f2b55d03a832d06c6c72e25432160d0bb596ca\nc4cb90b4ee51890dfd758ddeb0b276fbd7a0c6e1 b69bbd34a25487680e5281d94fc222f223014011\n9b85f08c78385bbc14e21ea721cedbfd23ae8558 63029c328025caa6383f1854549fcded3246a3ab\n30532821f9b6474505c26be17217068a6617f659 2ccce8a2a9c0b4265df74432534b78890bce3c0a\n736db303f5ba8e6bffb656763ec0d9eabb1ad879 d69a82c4b41645ede8657ae6174ab0221afc6e9e\ne7d92a75b9386c276be41d9c58b29c3340549a9b 8cbcef0bfc7bfd05d3d6cc767af36d4a470af5bb\nf4f6083d097de31f260aaa996102f05423953957 0844d40933eef25d8b1e463e490fa57a15f77c1d\nb8e6ca7cee6da7b16543a1d6dac7b20ec661882b b7906e2f15b340dab6fddfb8138082a3e5a753f0\necf5ae9d3dfe8ee65573b555e548b62602031ade f963188195f800d2e776d2081ed53cf9092d2588\n4147ff675ae2a948af6d63be8e47c7f1ad89f482 96a2feed87451dd049ca9e88b822970501a4b949\ncbeb2bcbd46df9e2637d84835f5c88c4eefeb984 92200cef8effa0eac8ff9d4de4cc9edf188d9d8a\n127bfb93e0070aca0145ec08a096901fd9903000 92b5018ccae58053407b274b6f10c687216e477a\n305be31f727f46c0bf1290ecc36d2af3dec368e7 78b7a05231f876a14213208b3738be9723ccab97\n2e638b96de9e7a2fb6ec7e5f0e6cf284ed110ca6 e648ef19ceda3ca6003990adb35d2b4cfbf1f185\nd401e48a013555ac0ea6198025b1d47d1170bf0c 8b90b5d740ec74a89171eae8bc9c547ddd0fb0b3\ne552803bdf776513d0c3ed1b4803b57814149278 d9ec50b1d94f5b8a0fc397e25bd05cef7ecce587\n0adf3d7326bd870d27fb306a75f98b323891636b bfc39c5386a0169fe598b52f60becf896f9f6cd0\naa982b8623abda54b3b6aa80fd333586c1ab6a6e d28056ab2683e608f2ef81c06db9294fa2118eaa\nb828500412bb60d7e04efa56fcaf34b8c7e6cb11 8a3d5ed724c2fdc563f33f38efe59bef52472c0c\n92064e99ea9846906905d321289fe2f8d3649f79 204af87e647b99116b3f753aa1ec8e0acec2872c\na644d6862d95ec4695f4e35585d46cedcc96b3b9 f4d59fb06382f816582babc7299c1c21d50f6f40\n4f129944f74fa2be75f78e3c8f9cb338f14f8c3f 24a97c9f4ddc40ac06ea1a7f7a21880028976cf7\nbc0e8e65bd86a17c1b087c43168d149b3f537a8d f76dbe88b66b9350342759805e51c62b7fb82cd4\n1e5530339e4552fab84a76393095cd7f42c1a558 2847a6fdbf361e296acde787ef61b84dae6a37ec\n596b8b6d1eb2d40feca13c437fc4cdebf75a79dd ee7adbd49e96ac594e7687ca42acea17255a4ef3\na443f95b52b2ea17a93e37b1309a21df9ca73c41 469e223743e879729df8d0f5f13c778dc39ded0c\n30526de9d87513f987fb315403d77a9d75d5f7bf 841b3334dd0338ad88c9dfe2b2e3dfdaba0ef375\n6284751be3a14ae4f2c9cae17f7fabfd0bf0aeff 7adfccecb9a91fa1d288c1def9a5ea05f6ccb017\n8eff98478dc397f130bcd4b831616c833b3c7e84 af7768f49e90a8dc452b800e1532f60b08a5249f\n9c4a1a878e8dc3949d84eafb58520d0dc6aed66f 6370465afb6a2bf96b542d7a38ee1719c74ee595\n79ff1a4df20c0718827a7c4e1be3f481271fec13 f1392182c0db9aa080993eb7ba903da55f19ed45\nee6050d7c2a05a9ec687612ca30a696a64d067ca fea15929bda21e93604854ce04947e292b8b6aab\na5705c7b96f31fb9d27ea327314c32ba431f7ae3 4bfe398bea327b68fe0a05cd9f843ce849deb83e\nfddef95a663d409e1e0968b2f938af4b2afb0de9 8a6c7a39b00046c0342898779e4d84731df8339d\n4c46d968916c45e7cda119bc4acfabfc1e36a397 855354c61b5121f5e0ab605762b7412a35f2f1e3\n3716b360057dce2a824e26b64f35b8788387869c 39ac49d0578b6f992972afb16f60ba99903abf3d\n6f7fd539c2dcaaba32a37a6025956227f8785c5b 41d79a92f12d06e5977d4b9f44b373a5e3e58992\nbd471f27510290645528175ebc0e098a01c98eef b49ba1182aa08e04b8f66ae1a4e62dbdb4ca0c5a\n9bb44311a16f2f33ce5bea6cf590c37fbe0804f6 b3b029945a6dde22c0f415973a70eb9ce94876d9\nf5d2b664c4622babf99c22d21266cd5ee93e8205 716cf57a64bd55f46b532b2bf3eacae88b9d03af\n7f8713b4218acd6cd2ce7759612e825a71e14d64 5f234b511d444ef6a18160cbe3911bd8776abf88\nf1d3d8f43668ebb8fb6a3de889b6a47dc4318df1 192d956c10a39bc2aa0a570a4a8b067405bbf903\nb37242722e0f4a250dbb67a1de5c33fcb498983b 3525bcad28f05e857ca239c44f3af68cdf3b505c\n20140487c17c3d7cc24e013b05a93c59b21485ab ff8a853cc047780b57964356cfcffb97865fdce4\n1d4515fdb7e5abf43625d466d7f31e5d67433fc4 f2b30f3499ddbbf8e4374550e411c69c878c5213\n49a85e7d72b2250bec0f314a35c1ac021c3ec2f7 78be585757cbdd5a76b8b37695cdf0f92aed1a24\n4278877deda59a30b3c731d78d69a3cb7f283dd3 65f6b3be4b25d5d9764ebe3c20e6463e0c741b9c\n5753477a61a7a30479360d1f10c6f5dbd5a3c561 4e909edc5b0e2e26f3744902654c79f54637f9c1\nf8a5f158356c9bb4c49d77613fc87881af6bfaed 218e35c19256af6250322a0584bc5384a8fdf316\n10ef0d2663596f7fb9a1e647c80dbe07390fc202 4b5be952e02838c595b93023a8ba9863f6bb3e2e\nd5b01a84ed3ce717b0d5b9fb9d9a88aee25c7ac8 2bc68a703f637297e068c44866e3b21f65c4ae0e\nfd79e40ba452257445354206a4357126538bc140 3021eb447e7e517ea1e38be55ac1dc7c0bb676a8\n7f8f26c70c7010181a42aa3cea5d3bba9ce5b9ce 942fab259d6f09638c15ebcd96e1eadd8bffabd8\nbe037f629c7ae64ffd8aa60161e551e1c2160c3f 56ce4f054164d0ecd6efc4d55b80aa5eacd26f22\n4f2ee9155dfc7d7d1dd55dcd966d494d48d5f67d 8d3e95525387625fc3529f611306e446306c44a3\n9cde3c99091a3b508b142def861980cb06b28a99 4483b8289c34e63dede95b888b5ec47eb2aff9bb\n5fee91499bf1bf56c153c6d77a1e272b71191dc2 81b31cf8d1776170bc413c886c7bf73eadf30174\ncf4ad86f24083b08f406f75ae408e0f311bf5c6e 1e82b40fe95551b851febba2c387b1ec3283089d\n0de319595d732f1185710ef6860927bc633b1bd2 9355173e1dd3e49d118d8aad4d2743e028110bc5\n0b07d1dd0403ca89f53da1a2a80c1ab614548c71 48dbe829730662b9274e09e7adc312013e919421\n02f67c17e46d65d741f6b4b3e695b47de8882c56 4b18cf5148c73b2d857c035acc339ebf352634e2\n8da4d9c1c6670f7ce35fc7c42c3267dc75f63a5d 510dc71ca1c7221f123162293cbeaa03ece5a52f\n2e38403612030add975539ec2432b82fea9ed25c c7352cf048e9566f9d5ce999bf89aece663cd0be\n19100e23ec3f9a3a9077ca90fa39e957711d49cf c5bb5e675e2e18c4c8ab32ec96bc0a4e5e4d227d\n26eafe074f6be07141b2c1bbbc3a57819bcc22fa 22fc90aa5c93ea337443a065a7e868bc590bbdf5\nd11867f83d518c77525a8673cf09cb1ee49d6eb9 b63c40f6eb41d4f85f55044c8f6e66c34c8b4784\n2ba6ae431cd479c1774d7ab3cac76e8bccb4b489 b56e12a4b5faed44ceded79b77896858e7f979d2\ne32d84565361b65d15820793fff5c319773959d9 04c0c8763d03ddee4bb12a0b2f22dddd78d13e1a\n28058f2731950fe3f301cfaa0722d9865d726aa5 2d362226d699f62f45b6c32e869ffd86b7eea3f9\n3949f5d91989bfdb98f379f0ef2567deb53c8915 560083124f281215f4d18f90cd95967ae0ee125f\n161ffcad832f434475232981d39edc0c30abc76a d57a2ab28a8697d9269f311567aae6c73718246a\n5fd10a1a3a82d46be6876d2ccab709e456ba727d d8514d588218c7c1ef94f0e491e36e2cad534836\n844456ed271cadc237a20036a95a1c6207e494e9 c5c3d52214cf5290b6268b9c82eb6a496037a7e2\nc08db3c033bdf8f8db3efb7c0b0422a477a18149 ea42675ff0d3bdd8f701c7e3536dd7967221c703\n6226d41c99108ca03faccd2d3c7467250dc25508 aed2723a84c5d98a1734d396266874d466877d46\n187974cb34a50a9d497132c48e2bba935cebf3e5 efbe1bb577de1e51949e4390020526af6677f067\n9c0be481fea65252489e8692e357dbff9cfd639c d5b46315971a85343c19e1eec97d34eb3c371ee9\nb4d226a0b0a9d3800cb0fa2d6bc623ccdcabf0a8 0105e121135c34b2090ba174ed926aaff079d21e\nb8a5594baa2744b9a9142e2933e62abc049d85e6 1352b7bd3d0bfa227a2a9a545cf80cc9515fcff7\nf611ce7e21450ce5e63be760dcad0353516092b2 d6399165e3254c62535205a4c01427573234c124\n46bd8f33896d3b95c6a899958de3a35cb26c1b1b 4707e0b805922939c955c342d7f27aef26e2746f\n2764cb47af9a0758e4d879e5f0b4d5df7f95210e 31285ba0ee7c20622c72f5952ab74299739590c1\n679331849b0b7a6291f3bafec14a00986987617b 42ed1e4edc874ceebff2615bffb0366c11a40e1e\naf28565d312c8d845cd69c3b243c4cb8d05a5c08 45bd57163816874ec876a26b74f1c65b0665b908\n6521c705b6ab25924171afd3a01abf742f6e2cc2 23f7bd4c5b53101053c6beb531b864e2e7d56672\n95bec224571915bec384cc2bc7c3d9c1963f221c b8e68645f3c514518fe8277b0c105a2d4c46955c\n6f9dc545512154c48c4229369471d77c57fac41d c90793ea007a80edbd7da6d7d8c47961d47ed507\nb05f4503113529452d87d848e2065ab2e3f0a427 f3501bd844cea6af741698d61e842c241e8e967b\n83d7515e62444d547370401db0970a98304ace8a 4ebb29e9f6bdd5bfd17a313124fca2391e2a3a77\nf591954a3d96751c9b507be0dc0962d22a994f8e 9daf021d116ef6b8955dd2028876a7043b9bf92a\n1333954c31a40d73887ef5dd48329d283ae3e1dd 013f47a207be6d826055ffd0d7e73ef414d61b75\nfa3f1ed793d02d86e74c4c4a644018660787b723 1a59c144e4eb4729ea623100ae790ef896e4a112\nefb89f58bd005af38cfd2913a9174ffbead12ca3 be11d0d0a2fb18d3a453a5f0c3214f1535641aca\n5b8ef2447e240ce4d957bc4367462c02e8e7a129 7d0f17589c35eb11af299477dbf12ee7d7e26dc4\nc8ff0443ec860eeb6669883e690be0830061abd7 59fccf9e967a7f7bdf14250b2e1c56486c97ac73\n6c580aea6dd6fd8966795f4e59a8f0139a48ce78 da522ea9e3b019751cca6ffc87c13cc98674b03f\n7bf21aa6b648788e0b7cf5fc42a11a80c7ad2be7 13ec46dc220f55fecacb3ccda251c29353d9617e\n595c34a965ca2209c8b06a1136aede44ff40cfca 58abab79500b4acce58d6ae58ed38f3ae2baadfb\n25ce99432fdf20071e110518d157223185eb1b92 0f2054c14985236eac1659ca949132471930497a\n3d4ce7cb6a310543229de96c827e18b5ea11b813 8a6c7c00baa8c6f719f3e5101e6f1247595f1094\n50cfa8b881fff11189cb4652600bcf61003aba84 922618c8113db5688d797059e94531a7c72a06dd\n12d87fa995d81579ae7821455c9896c1e43cf331 7ed46415deee1ea222cbaec7adb93cc78c0cd2fd\nc9e0668bdb8327a3ba31eb3a56163027205b6627 1151d15c671369a5f7fb29d86eec55308a4cac08\n43e8873c2b074efbb58d34103433ef07e08de673 db4aa4db22dccca75b6640e45bc23ac46505795f\n9093bfd93b15ccef5b42c1120c2e11ec7f48fbff cbf36d750d0dbb031c5575752a5fae0534ae7e9f\n2eeb427c96e6f58c84411a20ca150eba45c8d8a3 c9ac5d8a1d09ca5810c1a407c651612193f3af42\n2ba72255e87dc8b415dfc8600ee8773da146271f 1efe3e657b11572c666ff534ddb05fdd908b6c71\nd8157b8889b86e5d362fe3373c529b17f10f6235 2c69eb6a0030c492f7376661bfb0237d820bc1a9\n1312da2ea8ef1dc0bee98d00c2812f462b45cca4 031b907480ffc2a57c478ff65625963f95b32973\n06e26e68498b752fd145f6e1d2f6aced632399f8 8a4740aee6ab68f129813a4e4b09780cc05d45df\n76f8eb685887f18b5ca239b78006ee3e6f82da29 76973334127ba97415712a1e7884b48c17b12e5e\n4313e9114a249e3cd29a4260f0c4b38c772b6859 d1d3c8ab6f729b1a321df8f2b459a8e86669f07c\n017d61855f038e12696fa6614d43841a93698430 b2c947087f39c85e2a8c713754c455f05ef7f293\n482269be18afb5c4f9041c0a33e6c22daa71590a 649d6a3d57331745b0afd3e720007666cf50ffb6\n3c17bb0172334e0a2870cd3aefd59a5fa36da966 8588dd38372cf1fccd27a3abc8fecf3d2c891b8a\n8d9581531e7d3413d0b1506655cd294ce8cc944d d8e541b6355fb669229298cfc1f9dba4cb88ad66\n9f92645e00643c17585a13e6a9b37d7c13e645c0 80553c50c06fe9618e6dc74b2d176ef19b479759\n478b430e015ad49220b886487d1dd4d7277230a5 972aec36d27740285f9a41971011c98552a4a035\n651c24b0d87e524714fed854d6400e107588c1cc e4e31f35822e6deb4969cb7734db77d61df08bdf\n0982056dbef352797a2c5aa95327c612a1dd2dd7 5dcd14f8f3b4c55945def790fc7a582d2148a127\n321daba68c9f600a85f73799d730565d8d52a865 cacdb174f137e01a15fda481a181a4e2c61c99a9\n4f2e2c8dabd899a95c24e9dae1ecef2a938eafab 0740256732310a6dfac8a5b53cf6b5aab84f48a0\n55f53ccebb3bc3034bf0911474eacf6356157761 2a3c5618c15b6cfee37774bf767b6425956eb166\n6b30dd8dd6c67a6d36e0b29b5e74706e4c57ba2e 397861737ce369494cc295fa1773fd4d7e06a907\n56d99630343d0f5f3cb6c9b4bd73e5a72320ef9c b7e88246f9a1a81ad8fbd9ef180a4a91ced062c7\n759efec840463bc41754eb8e52abc2985802b5ca 852d23d4dae6124befc3f491caf7a9a47dbdee2b\n364419ae8aa94237a5904a3a7b9206e4c209b8e8 b8c526f53af29c0e9ee141f9f2c5289163f33598\nc0ad8099ba75e146f758a888d438d69f3bf18567 c961f6a3d01ab660be3cb59b0f0ae09d34975c83\n67ccf892726ee05940f33ad3074df0f6d0e5f553 ff284dc56ec83df6a1e2e6298333c31ab091f439\n96837fb5f0a8f9c25473961591d76335cfe76b30 61a8b6c6721f2ee25c1e32cabc691cf0c515ffe1\nfc720ba7fbcadb998aa61a611cb5a7b9b068959d d97462da2838843d8b7d9c58325bdab136de20b7\n255ec63cdef411860dd8c8ce07372b0674204f62 d2df5f049a2d9a4da8c332d2e1efad8795283a8c\n56db94178675ca0c184b505385385dc6253a7409 cdf18e76747d13ce47c6b71a19ec394a0f0df186\nead63302bb69f50e877ac9dd18517736297eaf17 20daa4b1c6c0b9fdb60322df5f0f3d9454c3aac1\n701f7effd94c151e028101ad059af5010569fba0 e6f8789b58efdde188fa4e31cf70a8462009323f\n2e3a3ca103b6a1c5c4832566247a94bf25bc3955 66149cd011e6104e18b17a8d49137b5280a648d0\n26b792f205d2e097de13f56876914b5752b99157 abc264e18d2ae44bc076a712affe6aeab2866dc3\n1124a5e630ac53eea9ea0f840fe8d58ca3b256d8 8269210c670838311f6fdf51c74ef9488efa3a93\n8e640e526a139138a29e10eff641b6cc0f0982b0 cfcf0f185f9194848655de53618d6c0e477e427a\n0218a2ad8f0e1cab1790dab1832274e32e4f3b6a aba69d5841a58b7227db4e9a5addf86f5c43324f\n7a5538539d7f5cdc49179116c9612294d955bc5d 52141aa468b7641db8e93e6c60773e18f8ea2c4d\n24c054d44932390555061499e0c79d0c514ccb52 2f9a59e8c87ac4f16e7c5db6d111b56c5b528d46\nd039895fb90ca67602829259f64d02fe22c44010 3fb16114fa1f6190e16b9815cb2cbd3cf45327ad\nb5b6bd29294579d471e33c283daf30a84935ab5f 09a355acb517fb7a34a236c4eb7d28289c95b3d0\n815c21888fe9d103199c8e8c2c1812dffbfdbbc7 456138c985cee124b67577b1a55108183bf9082b\na2c84b768951564b8cb9c4e6f96eda05ae0a1cd3 b25a76a62da579dd1d7986c43f7723dfe5c5794c\nb106f56672b7138f580e79c28974c47dc935a64e c09f8255444e5fd2234738d856503605bc2c1d48\nbd838e4141a4efdc45abd602f81feeecab43f863 8fc8473bc734a2af8dab47870ac83964ecde31c0\n4630d65187bdf945be4939b61a17a9a73cab1a9d 6503bd5618b4d62fa9c8d60f2f774df963cfd34f\nd2c3a7c63af24856ace67bfaf8c8b395393ac527 5593c8803458401f98532071dd0427486b6b60ab\n2aaae75850bc13cc6ca429f1c3431c207280fa99 0879ac33a11c826e11064f3d419144478cdc03e5\nc8795d849b9911a3640abe6ae2bf083cea9fa4ce 42416dcd2a194097085a9e621406ab278f7d1d93\nefbf62e1d0fe49670ef784b71d0312d14d8f88d4 15b65d2885e7c63e19be2c23ce2f70ea5d841a87\n962cd08b3d264bdccfafb3034110dfb377f9c8c0 40e3303e39ad14ba2c867bfe8097740916a4eb7d\n04f3844b34833719514fdc6ef4aa161264012e16 572bdbca0277c60a296fb5d838e13ac196ad782a\n1b8da49bb5277fe8039963af4b64156dacc09132 ea573576042b8e43d61ca9f9ca0bfd21a7a70cb1\nac14bcbd998ad29509d31b8c2d030569e4b8f331 ade7c04fec20b7d674f362c8c0a0a8dfda64462c\n48af8d7ed2cacbf0366a084a82640c2f0a4c563a 7794bef18c2ebc06f340e0b434099e75699850ca\n554a248c67c87ed442eec61c9cb8bf85bf4bf874 52a7a126883ac85c7955c7251eb47026e9726e03\nbad902b8a46096d2f736a0f45f374ad827d14258 af8f778cde60699f87ce74d4eb00a9fa843f0318\n34554e66dd0cfbe5c17cd68091b180f1be8258bc 6d5ff455b3afd8a125860b130bdf6cf362e8f51d\n19c169b62ac6b4e4fb5f7175a7621ab82a153a6b 81d904fa851194cb10ebc066c16a13d4717e08ce\n637eb918d5821911d523985b846c580020cf523c c0852fd1a49b60e93a6f1185be1ceedba009687c\n13777f60fb68ac5119268a1691b55cc4927b6a90 4eea47f13dfeef58ad1a35bc40af70f9921e95c3\n7f55c822a83ea742ed5576e9c8bcc423f03d19ea bfa93b4711a87d35d0bc8c32042afe302ff3c837\ne646cb1ed895df3dcc83ff5f537c071aaf72cb1e f2b30628af087755f3c5ba689c74cebb3356ad2a\nacabec6398c320a31a2be869b4519b054733beef 0da1afca01332cee2ea758bb126251603c3fd3ec\nc736b9b6c65d2cfca02a185b6baff1ed20b59beb 4d76489f8f44021b0598a93ee110a91d3ae12624\nf27eee86488104af7819d48174c164468d48b18a fff83281613dec3b699f14ae6b836ba8de04caa6\nef264126f310e33387cc7d18f7a02e0a147d72de a9b67774aeab0b2f366ac473a0d57a7b96f8af1e\n3da85f59be451d70fe389cc72ca71f8c00e16add 8fae784205efb28663b4d7c2eedcedd3bc5ce147\n9092ae45ce6eb0f541e73c84e001be3bae5dbc8d 200835288f6850f99e586837206c61440e2b541d\na116fba88324f36212d9f53dae7f0f9c855f0f73 b2383b859094b97063a0bc745153a8f791816cb0\n7cf41b9465d6a081c22839f2250f3043809669c7 747c49f253d44eb6cf6eefcd5a4c50969f93f400\n8091063d9db06c0b1b81f1a94ab28727d9f76271 516f2e95b7049643979811a1d9c4b9d5ca9144cf\n27612a5258a4b049ea98e2f3505c7c959f553fb4 b9bfcee8510a87cee151c79af67800c6e982310c\n78f03a19b8376ee3c8c70cd3d111cc4d35e3d5cc 04a4a67d1a9a9cb27500e8e3bb29b458fcd07765\nb8c51cc6bbeb45c72e36bdc31a7d171ddaf669e8 22d80984bddefc897e57a1584ad1c916715010a7\n654f99a1409088b912e3ddfd15071042483931c2 1a34dff8b3431b92d25a269a5c7b22427cee5c1a\n18a4fe8932235a326a8daccae3a3331dce648e8d 81396f72aadac591f646459c3526f0423ffc81dc\n94df8cfa9faf5597adaffc15aa33141ba3335dff b596aca1c4d7f6ef83cb51a68286c8e4a985b3b2\n9e793e9c4b49c48eb34b47055231f96172cc2dab fd34944128bad775cad5ad195111a18d974fed89\ne55d96c7b8d0c8b592ed907edac2f794400d2d5e 32501a0a98d710f593d0cf2ab5c6f9d00db55795\n0b3e2e9152e813ecaed16f2d35558e6a202169ef a21276dd672098a2c242960f3957d6eae9f4a913\n5f01d86f974137b1a9938b3c1dda802670bc5990 1e9ce4ab08ad158de7b0332026563aba2ec25ad3\n533d4bb00fae1433b7bd293de435957fa1f16114 0fefa68ef8541aedf013170f65474da5235fbfbc\n5575942fc50d142865dca3738124d8449a0278b0 b1daca86ac55ef93c11b911729a45d06a0e1840c\nd15f1faca747e6af45dffee85342f98b85b455cd c29fb9e1298a0528e628f70ccbbd641a26fc031b\n97477ff2a26732bd0e3af7180f558db8ec89cb89 0865f75f3edf52ec6861f1899b43c5f351c4dbf9\n0c240073d78ae0988a71106312bf9fe75fe4b167 a843c4a6de03c128a7c38faa9860f0879627cdba\n8c7dc2e0b7d18bc919b138bfcc095e1d871a692b 9dcf90f5cf46136ab0f8e71aa52d4f80353658e5\n634751c85ea4df363f7429203e40026d98b0236a 3c08079040fcf6bb992af9480c40527d0ee4b486\n1d52e1347a59881c14d5880146a22d78ba6abea4 ada91f4593663076bb38c125fae10cd25045a643\n70e0061119b4cb936533016eff8025eca236d4ce ba6bb62b987054040b84a19be2d5cb27c22c11c9\nad341e7870d6dd6216d104ad7932cd73fd47e955 30f5d7095d96eab1b9b3ca0c86926a22e597b2ee\n93c4653ecd5e5894e13a830d2037428b6f4a8ab6 ca1c3d920e397d164cb5f246a97755189658b559\n73b30eff8b63450508dfdd4bd9e990accf4c2ba9 d6942505c91b678d73a02ed7351a3b59f7bee45a\n7b2792927540cf3d37acb1bc1a0080d16b7245f0 c9c6711d026a7696ee916ae898c86f9158c27abd\n6fcfc52e61323e9a08722cdc4edaf75cddbee973 3b02ef707faf5b053d78366c1d2e18ba41313fe5\ne9fb3222c662f11f056c73fdcafd9c02f91296cf cdf5a8ff000e73716b83432f22c5d8a9f24221d5\n0b06c68355a902c7a3d7218d206f23241747ff6f bd831d55079cfbb0d7382d0d2ee5e6a6ddac2f17\n35696dfdfcac924202bb8b442a758928a5b724fc 9e46fb6956953e0bd0d283e21cdfc9fe8a31f126\n10af2a651bb36803ab01e528e684e1ba37ce431f 0b8a588f4fbb81e1e1b2cc2a147af7d56ab32c4a\nf7569d827523a18d04cc4746e251d7505df38b25 54d39b80ae8187f9bb4a780ddee36b4181828302\n5c1114d539e7a53cc3ac82a5a2f41a5223ac6b0a 702f10d4ee191ea55775f18e8985f49bf824eb51\nf1bb56a67b4c7c004fc6a2b23af2bc54c4a0d0e0 dbf4bcd95b0c7fd10ea47b4b9abd4adb58bbf5ed\nfafc20ac0c2e588d856bdbc35ec9aa588313464c 1a82ef7dac903db5c749a01765ea76ec4ac27152\nea56460b4fc08e0e2a1265dc7b7af554a751c014 c7c43946f6650754003ba3d8a0cc4555a9b8becc\nfccacd71bfc61d8079f05775bff4f0db52409044 ddf73a30e7a375584561a7cf43eef8ada159f640\nbbe22e63b034c3be7fd3ee454fdaec1637c7a90f 721cdf0d1fce233efe8b18f7d567df9158e5be85\ne3ad2d2f98b77d21d896e81fe320502144755a3f 69224ee4b6257b97cfa3971cfc1dc1182be67c42\ncb1a273e3ea3c35d4ce89867a0ac7c9736937829 a461fb84edca349912c7e24a3ec7218794fde8fe\n066509282a125b98f827bd49c1828e0080d45dca e5f88b9fd3acec43d666eb8eb2b86aaa64ff4662\nbe949b24f9a5c8c5ef3d46e6ab8d6a1e5f692c10 73fad905636a69dd4856f8dbf6f19fd128f83cab\n6daf8ea56beb37183f925e5aad079b9f61d88548 d406708dfc2ee1a454db991a45c951971d6dfda0\necfc066ce2ce243a27968f44106ef7fb441c743e 657d9cd131bf18a946d2830cbbb97e60fd9596fb\n61e0e0b02e41fbeb08b4efe5a92f86a8d9187e6e c87c77777cc6f4f1e60bc0808091ad5f3175422c\nf5b3589c61045a6e93b6f3e9cfc7cd0ced99f067 0cb5178777f65f77cfe05a99525abf80d84f3ffd\n2fa1f6937e04ff3c44701350b09c917d2b1849a8 b6cf2c4121c649eaff491c78a8b1c37816b24983\nb8c9efe1ae28cb9a96f4ff6c65d314447a33e285 7550ed975c4c6c6efc241f30fb0d7511c747a761\n1b09aa5ee731b828f246731cf1cf80b2a4d81c5d ce9c9f1508c63796ff297e1ee00df894acde1952\n6969423b6350f285b1ba95ad2ce3e8c28210d990 abc74e1994500425e72bfdb50d5cccaae5911839\nec6cf719addfcabddb4f5fbb47de9b18e251c95c ad944c8915770c9b2b567529f556143c9d43ebdb\n1b9628c145ddbdd3a4093829d06c4267b83cc903 a957396eec9d8220f8fe4753ae7f4f2f04f958e0\nf8b4fed955f5c546dce7803264c9bd6b63df94d0 9d731ac507a3c876a0f00884d18cb63d185395da\n979622b7c6a7bc11440153dc8396fe432d370253 593ac1e19c82d773773ba4c476dcff25a5a0c60e\nb6ba7d3f6a338bcf92c39d02f073c66635098313 f0a7b92beb32e4a951a06c75da47a94ac29562a2\n02a04793da1aa69c3bddf2dd4b9f6fefce98bc02 c1676ddc4c4806511764684efe03e6be78b751fe\n38deae5a48c419594d08ad643400ca1895710f93 8400f713773a7f417c08945327fc04c1b720723f\ndceff9a317dfb59c2d79d0620db35abbbafa056b f69a95c09640ec6ca5b0cd383a884f1fc03bce79\n58d554bd880445865d5142b6355c98ffeed8e468 7f08583ea09b8d7af4fd57ef837ed57fc6f4207f\na454609368b0a23e3cc5cd491a14615023fabd35 8bd6ca193e73333c5eb78bcf978000234e6333a7\n44a210cb69b2f23f360c05c61075ab64f472761c a2e9c3c6c26013c57889426068cad79abae5e0ff\n5cfc965e2982f56017fe826ee18b8e6d553c82e5 796de2dc06e242a185409865424f9d9b565854be\n4d51d681076c87fa3c35cfd28c6f66e4fcc4810d 375f8d6ce1606f6dca9f0d62a1c35fa951225e51\n6febad8286fbd4bcd1fc56f7ba0c6ba50ef0106c 5b1157e7a88ac1ed98877fbc566bc62c75760e09\n8a5de305591be26913a54bf40e17d35b4e8bbbea 9214320a63565694105068aaf7c1f667dbe11282\nba9adba49e94a55b0fc1386788a8be4d64d4dccf e20a626306d6a6e33b7fa98f35a70b37f19eaa5f\ne1201372de864cd222c30fd0acceea3623de3265 6f962d6f4dbdb26f3741fc9f6e76ff8ddc3425cc\n2ef53526319427813639ebe34a4f875905075703 2a3e114cdc6d611fc31a4fe3b7a29dc724c521f4\n6050eedfcd19a6c2e107834572caf26bc0b7d792 e3a6e1d76a3dcd7ffd60f0d82b84c72d4629f96e\nd90bbf60d48757980ced116c0cc81ebc6a190435 1a1102de35b0fd3db00ee02b769a0fa0f163259b\n7b6f740e3fbab26655d676d2305f0c2b58071a9c 43a15b69918c959556ede985de84d9c8f532846e\na245e2a8ad0e47643bce90bf0fbe465ba06e7452 7567396311cfd4c2ce6523b140582049d1a3463a\n48073b5f4142d3407e726a74234390d85505a0c9 78877b5165f13785db75fc7499d9455c894e89e5\n4c685c853a24e0925991879798a65856e8dee4e9 53e2c9926c3dacb4616be7295084e6a68948eb0f\nc8f57168cc413c2961e2cdb242afae2577a2f052 69c851ec2ea6835ccef0863abf6862dae5f4f12c\nf185c19918857e8e0ef48c4cee4bdaf2756ada7f c59c3e986d4ddaa0b8d29c1aa24634812288c402\nb1938d3de817e5109baf8cecba1d9f9affc5e940 b82330e3e9fe166e2be0b04e3e91fe8032709d7f\n35fdf0d9db825abefaa1166015fee3e92fb8f204 c7e8a261c951d7909cf9650a7a42e85016c27974\n5c9011de5ea875476db50c7da95e7e98770df6f6 f0e133d4ef307aa7247694aeda0c261dd5a9d867\nbb749dd5716a27415d7c32f26710302e160308bc aaabfe94e1a514cf90dd6aa93060ab4aab78fbf0\n90ddef0150cadf4d0ecd699eb0d76954741acc27 8e09dad651ff2610dc1160898ed124046195da2e\nb0e35735b54f44b90ee345f1802653cbe9c1da4a c6fa7d4567254b0b7dc174079ef9611810c7cad2\n3121fb35713f81117da621180a4d740fa3a557ad da79a268026a84105d5afb8effb1698691a39296\n31344a40da8d5970386d0ef1085fb9ff0ce2628f b76afd07670483a554614c061b478d818dfe80ce\n6a5cb3ad7c538b29d5a82c52b162389d3aba20d0 fdbd6280c51db11348a2a959accd14246c3fa8cf\n33c1448902bafdb24fb7aad0927050dea31b28ec db68b0a502d0ddd51df826ceb6f6d5799a079d65\n63899cf06fdd4c4bd3c1683b532a6cef2fe1841e 5e07885f942ffb5ae870eb029fc3232481fc253d\ne71317eb4e0d6a7a560f2c80475de9a286556ac2 474eb8d19653f0944486afcd0051f6c60b927eaf\n0f5fe9a1d4aa2f8511a0569a35ebdce9bf1e6d5f e89f02915d14e5aa1f4c554731afe55aa9d67cd5\nff627c0775b5b7efa4a941e8c04f937ec9cb7181 981b1811bf38cd0d640a430b7972e3c6666161f5\n56aff8f16af580167c5124a9969ecb476ac2a214 c9248c7bc761110bbd4a3e068731f376c68995b3\n710772d846395d87b4bddd3ee381c3bf1b163f67 a654a728974d9a47f063c2349799a65649c71f68\n66a7adba58097d25c7852ca8ba11ae7e0d78bb70 6e066479914a4e071e024ac65fd79f42d8af8164\nc639f406fcb9d07b387925a87c1c997493251efc afca6e5e219d033075e5d6f2ed6063f240b390d0\n2fdd432161d46f28e330be086e9e9a177513886d cbaeede82d42a0f6aa0237f309108fb34483c064\n6d4bc8e1f5769b161086976f082aa83b056ff4db ad478c33fb4f55575f84a2b32ed99c2da6ca1aa7\n7bd5a5c5bd51fd96bc28775864bbac7dc9f42590 d8600c491dbcb563511f39926e00b7e4ecb8fd60\n8289a7a33ddd3c9deb9ee6a54f73f14dc56594cc 7e1c3532228a0217665e62923d39aff4e5b5f105\nf6868c5eeee14dc47f5353a2872bf122d5beafcd 7f3ac4c795ce5a8dcb9a77d5b82f4c612139efc0\n8370567ba98adb9064714b209ccabedb85cf6750 9b78ef2602c545062c164d97e3a0fba8bc611469\n6b1462d93b12056542ffaaf48e70db71324858fe f060a6d3d30ab12f87ec144b12658ed520bb93b2\n21b58d11db071204c9aad4e4e370f861e3cb4f12 c9ec5aaccc9305ddc20eee3b7919acbf1eb5ecd0\n5e5ca20a30bcec71ae61243ac28be1785925119f 0a52a89a93c45bb260d321d075553929491b663a\n7203d2f690c7dff3f9c7ba55dd3fb2d79f5e8be6 9f82746163a7a1515fdc2d63cfad87d5ed6412e7\na1f3809b126278f08a82b128fbc943b647816ae5 4b253bfdcdd4a92b390eb4ca854c236ce0344a56\nc746fb76ee5ca3d19c3c40372379dda3f90b2a30 7f4ca3a1251d75792b40b7f1fcb551f983a646e5\ndf5272b0e0bf601a2a341ae669c1a8d6850b8e22 20cd26e7a6ceef1f5b19534e65655f8fbc277ea6\n01929f2ca6bea35f6ffadf5d78de3b4ef05f087a e02a130779c1b0bf46283b057971052e792f3322\nd7c01a9868f534328c70d748091771f1571dbee4 c0f502248f5bbea1e3fda2515bf0630294a51697\nb56009474970ced7a29eb36b9547f203e9c758fc 0a7e87a915455b9b6622072637d412640dd27a9f\n5b3ac66014ebd2b47e393e10d372e2d874b78f03 c521d172bf4fe12a3b54f08a73e6645bda17f14b\n813cd7709a071908b07b3f153620846fb8614a0a 593f98994d3f9885218a9eecf44ec6e85d48a23d\nf6a8641ec29fe413372b2ba5c375e7486140b66a 77465d3c7b98ef3db2cf6ea66e468d22effc47ac\n9b23755cef52a9f599471d2c08ddceaa6697eadc b32de12d2beb89f92e0e1e12d4f9e9f36e84ba05\nf68071447c6f516f9ad4ccf92e5b3c6aea53f902 3f01ce8455a1b48ec0b27df0e8b248a1acc3aa80\n1d14e0ba06a4386527188b52a40b6458609be638 09879cd0fc27a038ec95e18a9f2c372523ae2058\nce672d1392b95bdec07cf2323a0fa8df509a248d d6ef7596987f39b39a06114d45f1fcc058234c2b\n0738d235d22801938b0a656d57004b4fde361cb3 21c0cc1fb0e8dfbbb6d95142cd4b8e4308c10b9b\n729c290043e4bcce02ad838ef1278bbbacb6d25f a95a87936831aaba4676aa22d097a534dd1a3aa0\n1ea81d2d23ff2a6c77b5019b4b877693a2e73309 7b97b6b72110940822b10ff8450f9b5b444ab331\n83af78419ecfab8125a7ed09d1981219b90e8c48 b64f50f3b5102cc77542d01ec3716ce0eae8b555\n8683966658624bd1025518d197ce8ab0ca1086c9 5c34d336d1c1c028242cc2c1148bee8e6d3cbe30\nbac2763187365287512c25ccff6cb85eafe7cfff a70e1e568deaf2007f2ba1753fd0b815a269987e\ne82f5f3baa8fd8c13f733e9501b06271bd9b15ad 94ba5f33e7660c892bc019a9ddab095ddd60512b\nf792e62e662f0ccef37e906375ef7c69cca85c18 19ba1136708206eedb004ec07ef493df66dc8bc0\n6614d15fd92174dcc5747d71d1451475390e135c 6bd1721918d9df12d020ad235c2ccdb839cec948\nc5078ca0d8d427ca3a11aa71a654f2f6bd8f313d 10030e0f330e84582b9b39da78112690f321b6fa\n45abf041fde83195ccd28b76eeb69f09046dd8d2 0d7d8c23068bffea4d1b3e078921bf834e7f0e0a\n6c7696c522f9886d4699cb667a1a99946061aff6 3e33ceaa54ba11cca4a063cf4b0152af3e1130fc\n6b0a294a2759ffc4be2abf0fb8589286b384e5dc 5181b086a210154eac73b42d213889c14c0315f6\nbd4a592ab16169ee08dad040f38b3f68867be99f a130a9237392b8951e08a55e707c50c9e5bd086b\ne2a1a22d16129a7ff78940e090f1b10505e792a7 55740761276c754099137bc904b71e451fca8507\n7ce191cd77a3ac53a563747c40a64e14b126f8a1 0606f9aeb502a38ea30e3fdb4619b6cd16f4c154\ne629b880cb237d894a7e59579b2748c0a6010b53 205b2d2e008e92323c48bd6e26305c8d1b439f4e\nc74e3d203dd89e2ef612c96f01641a31503d0cf0 fd2e32ce8ee7449f139a76b98370c062ded8edcb\n82546c065405d662cf0c8e385420c900724e3ec5 a698a8ac8c2c0729b39a8305655c1348c154e9b1\n041f4929807b7ad479651d360c6f6c47045b11c2 2e2a1a1f0bd768c697f70680542a82aa02e78acd\n2c9c561423c26d09ede47d9d8eb4414bdf6c05f8 e97f050a1d0e9aec742af50fce897abc3fa77f8a\nc10934acf0e839c9f9a8669756e77e48bb7d60b8 be10da03abd06b034631deeebf43fba737240b90\n7e8f356eb407c822cd493b432389a3a33958d241 9fe16610077f60c88dcb5dfd0fb100c746c06d3e\n6f4d733ab4d3f983f2293561ec359edaab458345 7445d5efdea10a52fe6fb60b68f6db712fbc8fdc\n221eea750d8d355be0a99a68cd112dd603714906 9fa6f9cb49885d5d412d6abc4b6e8a5b4816b7e2\ne16b6dd7c122713bedc185b29faf7155827b452a e9188bc20d289392a6c3abb1e8be38d8eee2f11b\n3906ae9188e5a774ac9708a92ca30c340aaab37d c0919fdbbff65f5144065d0073086d904d3ed99b\n51935d3f6576cc12f712e26839559fad57b1a224 90d74f1b1a25f3021169899dbf652aa06f8b683d\n1a5d7e664d4da514a606218e886c2704d8ec120b 0172ea10838925f85a8d2f8ab3a0f2f89e87c35e\n131e9e1989d5bd7be7c04ef03c2baffd4c1fbf43 7030186b6f2c67068671addd83622fc5d757c9f1\na58b3784a1ef586213a6d5c787fbb0379b5607ba e31cbd20fbd3e40f0ee1bb6aadd2b728d10346ef\n41afaae8920157e7bbf1e9e392c4f4e16847c47e a9d67d7aeab2ab9b6ced8dd007674e1d9cd04b7f\nbdfa570fcb62797e2da9b1126b48705a7c4f1e74 0d7b8488523159e11de9b4116d72c4338f7bc9d2\nd638dedc842f1ddd15c62dc1d6d16d4d9d468084 3b835eaabcb5ae82f469c2c5e2df7d9c8e634c10\ncbbe49f27778483bc42e29bfe6359ba8edcf6cb0 e6e6c266f20ffd44df480c9452c3ce94a66d2508\n6a9756596ea8e9878a06ccec834748e24b777bee 10b8ac4af8d6c758422b033bf80551cf18184f5d\n6e838a0cbe4e0bb2fdd8e74ba21fb63c8168aec5 6952b2396c85306798d15de62f519877902a0135\n9d76a9e3fb13d1cc675020e6c38e5afd7d00e7b6 0440304a39c61f7e424270a0bee041c95639b4c8\n4ea08867c61fe3083236391faff62e43c5ad6513 b3c2669e14e705bec4bae94932e4185d25978929\n4e20087af355a594387711bd523504fc923fb63a e3f2c67103c8ea4cc85da33d818dd77c8ad85b5a\n5ac639e3edf7ab64a60332f697c23c0f92541725 714e5b180e29695a24a20c32f0af5e7a21f2cd10\n76132b7f686bd4a036a7a3088c80ff44bebcce48 2d5077bd1a1daae7906f88cef293accc803c57c0\ne4d6e5c54e631bc049c116f49987bbca8820fb2f bbb4a0883730a59439708651a62e8ff11a8c5f7e\n6cab9dbeb81ff68751dc09103b4d1b9f43ed8ea1 afeac4814651b5fbacfaba8ff852f3ffcbf35436\nb798aeb7c9dc673b3fc000a6d34091e1eb5a9248 e9cfcb3bfcc363c49a954a315efd36914f810766\n0290651ef7f308acb9032eecb7c34bd775f13a1f 7eaaeec497d38c4c243191638e9162c9b0f3cbf9\n610153dde2997a339e10cb4efebdb4ae9bfcb694 01fb79dd3d78e7a4f1ab022c12ff90f30c09187b\n12af807b158eef3f5ea3b00e0724c265be02a3f9 02458a75df67b9213b2bfe82645b5d07ff9b0853\n43a2239fc516906c7dca827b04fc5c897d686f91 96a236019d6dffdc4f198ed77e97ed21de99883f\n0b84c3f5a1d8edb9256d68b1bd75f336a0078ce7 15017b376e926b15397b7a327d2f0ba40a1b124e\n48f0f4816e88a5023992f1d05690e325fcdd96c1 03d5e684a25823c5fbf451563ca0fbbe390cb926\n4f1fb8e424d3bd8755be788caf2ff10d038228ed dbae11600680d79a16445bc27d7b2f04b4321652\n56ca5d19588dfada5884a85e1585e6cc17bff53e aeebd972ff55d6b75b84b45a44ad53b3b7e24790\nff7bfa6ef3feae01ab2f82cb487297faf6c1838c ba23a557002f94c97909436f8be3645b267d7aa9\n6e4804f0d05afb98d732aa349b852addc0e09e2e b1ae53138c00d19022a2372beb2a27318c62d84d\n1a85aabf7693b5ac5cfabe5b1ea30b58f5dbcf8d d16a3c32dd390d2eabadb58404478506c21b5768\n7691327811f8ae9f52dadc2df364a03943f55586 f063d1390801990a48e5eb5a899b6368d3350703\n8125cc45924aee4f26cd23ddef12ef52c00abbf0 9b3998789ef5169964197a53aeb2b9ea4fec0059\n1b670702677c9629436f2af9c01080201159f01a efac4b14fc457e5754e3ce26c861aad6e22fdc2e\na59e6aef4060ebfdf5b0b6b69bf682c956575515 66d092145cb247876c51fa1050b1ca1d8e9673f8\n4d7e7e6f2d645bb095aaceb96324bd6299cb867b 5e5b60e85e06d984eeef36981466004286b04576\n0a874ba6bf4319bd4e6f48ed06618aa711d2a22d d2c6b1264988cbb19ea31ed8554ea93ff80fed42\n48358c4ef4aae906ff8ebe6e18720d006c5b2141 2514c707fa568403c8de2b98d52faeee7fa908bd\nb8da2be454b7bf4046050d1516dda67b723d16d6 0cc02d0a112cf388f7beff2901daecd2793bc1d1\ncb9cd7dd760af1ad17f867583f6a8ff439369991 32b1a8fa8663e5828f917e1c7034570d0df712f3\ndcf6092d7e5cc47855c95088fdee35dff1e13aef 7b12ff7b69df71e5dae09f25f7b49423e4fa26fe\ne52707c8c55ddd9b43a1d3b72a6d7399b68037c2 c7ff14cf3d25f62820e5c391e8c921cda3d23ee2\n23954d09b43a0d30c7e46e94d0bdb74b0519a025 b986632ad3b26bdab5389994fd9b712dcf899ad5\n1bbd00d2d20290537d563852fd9cee2d912fb10e 4001b75228776279da272ee292676c607034cfb2\n6822638388b123e6ba29f0e8592f8f98127d4138 55a6d95f11dfed6c9b6917ed8affeaae3a1c110b\n191cb3d51f066b84026a3fd9ccd6484244ae12d5 0afc16479261c2dd2b84b815ec2463c316182ec6\n886901ee45d8ade08bdf885c7850d79750b5974e 970780754586d29abbe077c12709ee4b978ff5af\n899d80b48443c693f9b4d5f302c4a08a88e899ee c56a83d69694671bb5e9b5912262527070f1a86d\n1206717249ce9ef5ab2bf92c89b52e71a9df5be9 45e6247611f1400d5f3bc39167723538d4ee0cbe\n8adbdc914c7c28d36d978fd1e5a72b52af86624d e5f2a758870baaac4cb692d3b7370937f34f5ce0\nbbc763417e249563080a0ea791ef48346fb57df1 75de55cf2d2afcb7c7c43432a41aa3e7b71f7dfd\ne9df5cc521fc1bcdb679eed91e75e784e6531037 b1fdd09f0892febe9c23ef6cf160bab246ad8915\n31565f0326473db2a517e7dead931df63a9f7a74 6ee3a62c4805d8b1c019d1a26dfdb0885d9b8602\naa680f3db4d4967f4503404961bd860b8ed971e3 a2c5e427aee4d85303994cc9edc6818ab6c92b77\ndfa5b0af99c30498cad2220eec68fe20b19ed368 00b1017dfc4a0f25fa9ec9fa5082b7da3d068a6f\n4921d56ce65659999ac9dd7af52fc34548ef2bca 9ac51ffeae8481423d8937e033395c1a794a0cb5\nf11587958e0af2bc1fccee189667767e9d06a5a1 be2a4bc09b203af2b4792a5454f8f7455c21e8fd\nf440423c86b8ab2b9643956b04740febf3e38da9 2ea51551d9efe5dfe801bcbdda417fb050d4e284\nd973dee8eaa89c644a69acf071a6d7f913cd400e 539fb15f26a358f30414832435d3dba8b7a07f69\ndee1b47ef1d36fec45bb29565d2edd46a8525b95 9da2f538681c4320aea442f0adebd50608789341\n513621de24468f8adb15231650902e0c8e9dfe82 c3f0f49f792237440c6e4a594adf49a828db321c\n6fc35bd72a18b72a02dba68a4bb28621f647e3f9 b98119283e36780d531b595a200bd398d2a5774c\nee9d3629d318eec593b2213974916f3d20c5b4a9 db741f30d31e061b04463d6878c265c0a8d4dc54\n335bd7cb453378f0429bd51c3793bba7f9bbc1f6 4548d772c5b1bdd909408b7464afd7d7a85741c3\n0ed4a50b434c1765fd38efc12f701d867e2c0971 73d82c093efa60d1656430c015f8b66af8ac5bab\n4101d024f56b220863c851d461365c1d1e044964 d108f2664b95c169d4b72db3a99f993fc6e59ac7\n6d641ba7afaa781c00a53fb8cbc96b43192c7577 c8432e3ecf9d797246c5492639221b1b79bf828e\n716c5a66e3eb5fb95fa682863cf381fc81ca6e52 6eef1a25046a26f132b903e8979821e41058a4a1\n58ee3f8d5b335a0e091543cb953323af12615274 17270caacb1665b04fda3ed79f4b4383e85ec3b6\n648b9c0ece6f2d884d7a08abedd327ba47cc2956 a1dece59cabf6eb1f8fd28b934758039a88a0a03\nad6aade322e2cc324371fe71d4bbfc34b9ae04a8 696008179945c47ee2ac6ca4d9d198fcc84cfa44\nbd55ca2a2bbd3b8eee8aa2a279a1d237cc6465c7 b9a03d6ecab36d58a20f29ef12b7a6096ee3fddd\n4eb55bb66de05ec63adf9bd782a6f820d39edf70 c757509f1b036722f365917c1234ffa9fecc9d4c\ncc05e51bcc4a5077d45ac5f3027688dde309668a fcc4fe8ae979d14a55f6d87d2de27d5e290f7b8b\n261a525412e88e878feb764e449319c6bc5b78f9 6c51c22e144f04c58a60dcbd0dda0c18d25bec3c\n5d7494b4be8a38abfc2d60b48c86670bce459f10 e4dcad3f5ae5f7927edfffffc636243b365899e2\n01cef15cc011e6fa274713459f7f24a796980f94 2957ff432528b3c638d1a4ac491e732f8cc65a7d\n00d0929f54bdf028d13fb676321db5509ec61358 24744764d26ae0c9b34e89c7c39aebc532121e38\naa07e2a9c2a59daca863b72d7ff8ed9284721541 63a807f089c346fdec6ca90f631ca6bcb519d626\nef54697165eae9dfa772f2f9766bed6809503306 73ec60604d53974003ac2b4af181e9ec8b191a7d\nadddaa28891a8cdf95b22d3819918cb41e1c6923 57f24a89c622a320dcc20a30fc07cac0098897e4\ne8ab666de753eba9dda08b70c1e0efe3fac9573e eb2f4a310754fede752214d7565f84205ffcec75\n8406dd243199207324d2aa93066f4d8a7522d7d3 b188a9012b263df71d2e076f3a11741e4dd04f35\n180dffe59685f6864926d78f78271c558ae56c73 fc490c5588aa4dcc145fea9ebec1b268212dceeb\n37ac1af4b459b62c85ee4f46f989f14236bd6702 156093456d6477d68cb0bfceea73c84a460486ab\nfdc3996a7cd216f16f8949b355d955b957e34b89 a54deac1a33e2dc613a89d3253d3c9f974ea4fc3\ne825cbde8033b9e32460a9bf394befac6f491e33 4a1f1c8f3d90cc9ed7e07cd0b75f17860352a7d4\n1e2957b5650ae1bd7492520040ffc64791b3da11 5ae356441c904e89f71aa9b6a1683ecfdefd5d5e\nc7086833ec78fdd8c4e2b22e69ce6d23d833d7ac 4d4c50af79e50e9c24c394005ff553768d9ee9f7\ndd6cf02e7d07c9e1986b729c2d41241f16df5a67 e9e0c3ec60da242284ffe4cdf2130496bd76b97a\nb83502c979380ce10f037a67a7c4e4e48035b42f dffab5528829be73f55777ad8359873c14ba4386\nbb7c908bdeeaf06bc8ac2fdeb812540598940e4f 3b4db0472946dc6190511252cb33d2e481c3abb0\n513d89232d4cca5a37fe64af021510e19a8e404e a66eeef06079daddb620f0b8fde16c877bf1829d\n72bfd4d557c69f91dd628a6334f996b14e865005 7db0158259b10ef47d40c0686d81f1f610c540df\n2df7c73628b650d967d28add162261b0546d0914 625073882ce124ed22387cb2d0b4e54dbb571306\n65e6659a1616f2898f0d82ab974ebe251fb10342 ad1d789f662dbf7d40fea0658bbed857efec9465\ne252f9e84be7c5e66e2778461bc660b092bbc0d5 39d89c2e18b5be95ef80b008ed9b959c410e47df\n1903682ae103a8c24e207c88bea1d8e434219556 63dcddddd5caf029c38adb113a65e1b2660602ad\n4e01952fe37e51f167f3a7ef4b7ad1a5c08fec39 b1a8358b6e275ee3736719a6f0a8dab5c829df4f\nafaf0b00745d4081ace0dfa6ba743be4ca32da51 14f79c905989cc48387eed6deef04258bf1a74b8\n776f3865f9c2cff47efde795c25dec33ebb80e97 e1f9ce88c0637f7dcbea14ea58dd1fd08228f638\ne34890e3e033c628d0603eabe585c6e83a4bf597 0e33163b0f2fda3d446f0823e87343d34aa89977\nf1eedea6b5d4f4fcb5cf3c678838d944a3124599 b8915ba0e5b94b0b2902928e9637b8ab2f2921bb\nebbd5035ddc2e43d9f6bacf8995dbc6c8c3b4c65 a1032ccfd3621a07457aeeee7c709e8ffec7be3d\n8b5d2dea8b60cdcd406d9e52b9033a8520804d89 3b96281e54a3bd9b4189b03a11c31833cb5a7e0d\nb3607c75f5e5fb5bfd919056166f956a2ff52e26 2d9c37a85e664e8e085fc5168161004e649292bd\n69f5cd2f9434bd6d33c296e89132bb1b867661c7 f1f54d9ad13225ebf849c61e34da10153075fece\ned8b9f9a5a01a9cb386d34e6246844c673fffc14 83a714c791af21fc20fd08bfaecaa099496fca2d\ne2bee83793efae85933eea60c9aab9279c87a52d 2705541e75b590c09457e933efec08378a6c962a\n8429e7142717443a4fa56e8ac3cbfc8302f1e225 3063a0d3b85a2b76dd3f0704ffd403ce0b60f3ec\nb571855f6e4bfdcc7a555cc6dd58571aa3ef9e46 8387d584a643c9636f4931bcce266043e8edee69\n0cd41cd24f7aa6056a0b453a2871ec46e2d79396 e19fb3bd71fb38c9df7be15b75c55553d542d321\nc5d688734e064e703fb7ab61d9e8db29ccd31168 126240c0233367d06460ba329b8337f43bc92f70\n409af56222680016903a2e8d4a667ca04f27d324 97627ae958feba73c3c720b111f8592db4293f70\n872004c419f8f3658bf8705ee4873a13d6a59a20 c1262ab0f081c5c02942fd718ad776958f381a3c\n27da93a98e50bcac73ef586fdfd19a9cd289c33d 32196cbc7d33e20b0a0a56d134759e1f926796ca\n86926a9ec4180e555daf5fedcac755e317457f38 cef68d298fa62051dff26c80873e0af42e4b9eb7\n7e3b8bb79e0bcd4c829e8e2b6c5f425b172cd583 8597c664dd4a75a24b37070a4d82f1c4f6c7dcfa\nbd4143c8a049a953deb7705c2d794c11a75006b6 01be682d6539fc6668dfb05b8fd3b6f98f84c408\nc0c9572ff4722b27923c4677d5068e54ed666d7f b6a947ffe85fc88ac46dddb300fdbb32e53403ff\nacba79bd33bdbafd3d4837b90b31a3f2188012a0 25e4a76b8ef1f3a71c0d2e64a076baca4b8cb3d3\nfc2946ae1b6f930db26d3e47d5eb83fada42c53b c73d40b1bb9f8efcdb21c545df38dbe09a58dffd\n97f9fceb25775939ad39c6fc72cd7c64fe506aae b77e9afe7a00713072c308f0a3b6e45b4dbe46da\nd153c3954082cbc932efd45e2850b5781b360c17 dd0a4f91a4a3f6cf58ba6e6a0a11ab5b9213580e\n0581916836f135088116a36609ec5fef55a84825 a3b7096b79fbba7a590c8f57b2b0ab83852905ff\ne8e5f5d084036beeb7632c5e7504c656380e4ffe fa34c8e5a57913e6e968e45737fba2ee1afc8383\n116c1035c9381a09ac50cad42be1133d3c8a855f b92d0db212927810419929188d3532dc3b7e3e4b\n3dc329b1d76f2e51d008fa388d57c0d01119e003 de817b0941f96072dc6fd1dd610b40dac4362183\n203b66e224208e374b91abd0f1049d9d2c6482f0 e736e2294b2a6696dbbbfe6e9547664f6742125e\nc32a25faf06d86dff66dbdf0b5ce74e731098c4a ee6004276cbf638269ff2dc9acd5bd4d7058ad42\na01451018b7cc344d04021a1c17d4cc173999554 e252dc251584ab524cc4243099f1f839e9dc4a70\n1aec80418a7ebec29d274625c2723bf5393fcdf5 6e655bb33a0453487a7cf3a387ef484aa2c84a42\n70ca6c81ecf6da39257fc409bccef38f7280e186 27aa1432252bc3e40eea1e69818cd6cf7c33e778\n20afcf9f749a8b3b85154be86656872401e186cb f802903898b4d8b604d46d6921a3a13b3efbb115\n414750fc3f992b991d0cf1a7484de82adf461130 e1d017a8125a7af7e8a6043a5180ae1112500a1e\n73adae301f52b1d976c5d30007a962230854fe63 654c0ae11a910493612117e6dd01ce1fc6ec30d6\n7b845130a92897f424df58ae5963a82da009d318 aa41304b2b8bbc58a10cb8f7d8b4419b629d2c30\n80426849b039728a559069b821cdb46d50157fdf 4d94f45ff4904e17f86eae30c6410a40144a61c1\n688c13f836aefce915ba1d6dcb08ad3bc518d72f 86696efffaee347596b2bb7628523e9676ced220\n47799025248d0c63830537bf1907388b47646441 ffa8e5ae3ea08439a329b9662d4384905b1b2f16\ncb95ae7235ab48412c4be887ef0569b7b223fbf7 4d5779ec5e4156c06b22323c82fe6b409f8a74a8\n95212ebb179887b6f228a2afd4b35b8998984e3e c1272e8473be27e85810e48bfa75b901c134f718\ne9e9b747f62470eb5ccd668d82cb8e3a52d80214 6a9d6ca3a1e3d9f6d26e1c4d544204ee147508d8\n66226230d2d7ec1f80fa278edf3df48e31bf63fd b63a17f240f6a41de0f72881fd83cd9505f89060\n76669b74f151e4bf34907f9e2d2ded9d34b103bb 19df0d894b2b0f2defdb117a95c02aabb6d44116\n95caf5bd738efb158ae80fb34e70dea0b112dbf5 952dcdb9f7054d544c3b213398be627d17b0ba7f\n8d76a381f40e42b6849d9133f81ad8b1aa53a89d f74e0f444bcc1caf78eb0016100e83afc5c8fcf3\n3dd04eef237a755922d2c1f2728db8fcaef06918 273cba36761caca3603ff5ef879151788d0df86e\ndc37d934811308622d5289ed2c087925b11864e5 cfa8850f088184f32b82fff4fa7f0cb62d7e6cc8\n20d33a9d4cfebec1be1369c3b811a08e5450220f cf8a4ed5ecabbfea01cf4cf656d3fe3fcab9f1f9\n48836dee86a7b160ce7276972eb4eceec70bcb6e 1336ed4f40a705c9debcda57b98a6c92b1b6f02e\nb096488a60a8f0d63c3847c2567b47cdf7675c6f 5be0b390418de511a35aedcbce6475c07a8490ea\nfd5b8c845a4b18919a606838d9bf6dc47fd3496e c9f50be22894a83bbe1f45fed14e85ebe797884f\n97a14a5b121fb22d7960a847869563918c07c40a 4d9f488b385fa4f82f35281d4d14f1995dcd168e\nc427fcbc40843e3940774ceb79dbf313f958a6eb 4fbd361683055c65a63d52d086256283ccaa9ded\nf4e6fc9b70e67b91756aa5d5f3a9030f7955b6bf 414c9d80f5c2c4109c189e713ac46bfc651e180c\nc8eced8d3e24f2fd6e8d716c92825f43a0f0e1a8 4f5b243324d9004e37898c70b7bbfc2986608059\n298023b74a1649eef436d0b771b62b809e69f200 52dd5f1bc7119479afdb4b66116cb365743442cd\nf10b4baa0274d66888870ff5e07befddefeb2501 6fb15ee8d5487988a75ac790ad6f2c37d7dea423\n85a98164000d9db5ebcbfba75ecbaa860a84ee47 d0539ee9ab4e852fd652546fd1f7d05a9566d279\n2e6cd186af6079630ce95d4f8223b6656c64eb1f 8188a16f7a00241663dfa95b0dc3927067b9d028\n09ca49517260ddf6444116661b2a7772aaf2819a f6daae1120cbb016e0494f88a11f9f2f40f7b6f8\n4c8babb010b5c41371bc28bfac883d886b6c4e14 a37ecdd9ef7d58986ffb8158f5737a1ccfb0d093\n7520ffd6203c5e184929cefccfcdc087b46bbdc5 67c594707486ad8428fcc6e6546e465379d54de5\nb69c536ba7fc08ab7cb00189f57c596b9a9afb27 4fe27038580484be3bfebea45cd3b27b9669b6a6\ncb5476eb128b57d9ba7dd0af7c00e2147c74b413 15ac3ae8aaaa038ef7034971cbd9d0e9a1d4c758\nfbcd287fc18d1b97cb060253869836c798ff4bff 95be484b113e5189a5f757a3904035e4af478ec7\n67e379404875fa34a3f042cb461b47d8a38a8503 f85e1e46c9161a1433fb1ec03c17f4d37909413d\n579f5f759b021d848ebe36af8137343e109407e6 ac7e8e1edca87e67bf10a2ab6c84210e4bcac339\n174566fb210af7a2bbe09a80ceaaa92ec0fa9b27 b1dc443305eab30dd1137411d3cc6fe4f6a660b7\nb65ec30b69725ef4e0091c044e1528c3394e8e0b 3399ae371dee6732c2be36aa4ec9b4ba1031e8a2\n6e42d21b9d399b5137cf0c49c090431092d264d9 b1db8ced6ab7706f9eb9450fbfdb97b0185e0e70\n9f9083fd954f616d75ee2322fd80a9939feed086 8204506ac229c415494d66ab650996a52147f2f1\n7b7779a82b0aa7cc794f802996d3413e41b91996 88462ea2eb2338183d814e1ec85691d4f0af1726\nb873019ddd9bb7176355fe56ca5e32d1b9a066b6 1cc4f11fe98f5000d98e9be708debcfcc3419e68\n3ee0923cba3834074106985f1eb0897ebaf0481c ac6314fa60651a3589b06a7cbaf45422a5ef078f\nc3e61849d8d56c8d2d62bb1bcccc82d2332c70a8 21241c8f2f4201f5ac6eddc8cf4d225250e0637e\nda640fc8e7688ad1122332b1c0517a65a302c145 89605548350ee4515595dd666fc3cc9e004898b1\nfb63e68dbe8faa385f80a4681dcb0ace887d3a25 bbf7cfc4aec5e98c360d9921b12eb98c6856ef16\n79e1841d67b8913743e1a81d4eed21a6e9b88d59 53acdedbdf86335c9058c94b69a1289652180917\nf910a744144009d68806203a2c978dfdaaede6ba fc4de447b99b91b9f762be60b7e28e207db53abf\n5019351c76b1e262fded227ff8a954b5ae5bbedf b98b0ebc78c7a7eeda0a73ddbacc7b2c1b229295\nb67ef51136eda82df2fcf58d9c6aae13c8111e03 d2a7201cddfb83fd7bfe75268ff6321226187c01\n7f56e4810f83e12167dc27c318bdc3d677d47f11 5ea4481219fc246a6de567c0b24f60ee2ee49a32\nf5bee446de3c429c36fceeb90c012df63d063484 9852967cd29150c04674c39e6d2a78ba586b7a23\n05ec2957f02d01a8999a2d8ee7f7323146771c4e 44ef934611a73f06ed3ba3871f5acd6365cb862a\n3e788161e7f7dac547626a32b31e9b081ee0d7b7 1af6b6216c94fcbf7a22ef9b26371408944821f0\n731cb731a2672b5d1ff5336b46fd8c1416ec5e54 322d3b03932cf39348a0d86f0050c1ed44040f06\n7af6508c977b00a18824e7a97556a268245859f5 7057e769e9c5dc7150ff2d8e913e74b5b69bbf97\na1aa42f1bcbf7beea60504aebd983562a3a82316 f849e4e753f0d2afa06155513528dd4cbd9aa29e\n484ac66706fcd7fbca48f3a2bf49d36381b44de8 cca4d55f993721d732f5954cf74d4e0e0eae1e2a\na8155de10eba8438d16846021a99a471a89007c9 ecf72d9611a92e38b846d90eb4a34d3ba8d6a732\nde3e659e21fb877e212f8ce2f72b198a099e68de 8c492d1ad232a8fc08279c59a3ba345fbc2a3232\nd7cac34e2f95c0eec84c814f959d5dab2088d190 db6d5b97b3f10795722bb0bc7cde7612dbd4306e\n1bd2c6bf7955439c0afc1a2587dfa71aa63d7942 40607232ef0ed540c1a0eb89f3b789327566240e\n92a9c1dabec51b32df42c4096bae891c39d21359 dbbe7286ba24047e957723358e86fc6ebf937e46\ncc5c4172d82caa46b0e38fc5d0b9d83db9c3372a 546ba5c1f8db2a5d776b7fbae0701d02ccf66f38\n245617f80aa58ba3f10ce4b40a8d19716235dea8 d8dc19c07ed75a9c1a7637008390049f3a24f4b9\naeacc827d9e4327492fde29e63aa034955b1847f ec3d5b9d63f07b8f848051d1e01fbb8c9f89b429\nb48e0c91df2847b2d3c943f9e11012db83f2eed1 341d9f0930d27e0b1b7422737ce0ff04e8fbd753\ncbc7ddf102e283a187b4d1d3e1c533f8eef5bad3 55e1fced9da6a93c4e5ee1bba25b4221f61bd033\n4a9fc5b0c10903d3f6c33b6e9d76b83a92999c1b 81c77cba9aefb61ec3fc9e38854b7d0b4219ae2d\n5c9335b92d51237eaa2450a44acde217d733c98c 7915f1077fbf4a8ded57981861bfefa73f9fb328\n41eea61113d6702d843b8d67c39b983868b1ba70 123ec3db9d55fac7639f317840ad11ea540d23f4\nc8d5070072618713f63f27d868b28d3b2b44b7e8 1fa66dbb5b3bbfc4a840b16c15d7c0cafdc70d84\nafbce61da363eee656210adbf0bde15f9894ae69 305ee4b254a2d51cf1f606ce3aa5ba7636c5b2ea\na3098b3c8113db9ade4c3c7eebd7f8e66a808eeb ab34e404c3f1bfce568ccd2a4a67c501be344730\n72248b4f6cf23210164f87cdbb0784ecf71c4ff0 0464268e75cad980f105185371ff5e88af8ba70b\n9a167a44faa6a7d684861488a5b612c026d240d3 1666395620d8d90611cac5737c07abd59bbdbba4\n399b2456962ae09a722816998a2d22660ade683c 4181c239068c3c10d0422ae98a8c151d82de917c\nf2aee9611892f27247957fa1c6d8057a24c5763d e0cc7c5a18741d1d142fe6419645d2554ddd902b\n5085ffa72f30f14d581e343c2cae05d8acdd9dde fa167904fdbae0906ef6fcb5f24bf3cb20f53526\n50c024a95071348bf1fe65913e155c10c33c6790 81882ae3211cb12619011a2db490372c45737997\ne29d3bfe1aa8e8d2bb1ea6f87e503c84be36825a 5d291920164f44e560d041944c65bd1e699808f6\na32e33c63c79410f27ed0a45c585485694e67d96 3d65637d3ba96fc3784bbf92426540b78bc49149\nfd9eab497740f239e9e8d894c1ecedfa2c384565 2fd92462895ee95c85041d208152fcdd8b3fb592\na8ab6c111a5974ddf0d038f81452205456367925 469e15da6773c2a885ab56da4ad3e0e363fb631c\n123cffca8b0fdc3f8e6f50c8ba2844ad3635b03a cc5560176d19f20e36a156286bda74c6c798cda2\ne38669e74066c5e6c84653bb0ff911568b02009f 60d80101d745b534de429a54fc0bc18780d8ecd5\nff69f5e3068a1340709df6a364b949f581da80cb c174f2b493afdf9588cdef699692f4fdb2dd2117\nf51fbba7b9d74ebb88a4d14db967a61ff8c14728 4a60f752c1edc408b469bc7e7513e345e9721c1c\n3f20d046ee14550183e851d5a9ded69ab84c4042 004408545bc9dece9be1e92537d67c1118df29a1\n76b579086fe979c4fb191029d3f1fe110c69d046 a8037f881398031a86abc35fbfd5d4439812a3c5\n21ef79ee164df17cbec393da1468dbbd52dc3415 529be7b21a54eeb3992681a3f255708c83baf841\n88485f79b0fabd214687c20198bfa68578eeaef2 d3febd76db12f3e40253c88a3296d7636ac3d0e9\nc1d9f13a1717a2f074c32f5b66c1c22304470a0e df1b2c9b160a7d39719dcbd5c602e74772c2f83a\n109706b8d7eaf6f9ee555b0188bdaa1182b9dbee 04adad8da2eca061fe6d287f4580b3b93036688c\ne1763dbc5ad263ddb768cc8fed3b3f3c8434eb76 fdee18eade860ce54322030cf367ef067bc0a7ad\nf02203bdc0324c8031616aa14dbb630553e0ccdc 4d9811a5e40f72d3b62cfe36dfe5397d1ec21f82\n5c11c304c5dd15f2a0c2c250f3b46844ba827218 d94690e7cccfe9285c25dc93aa42eedb627402fb\nfdfda6b76aa4a4dcf3ee6da50c9acf9f76f3d9d6 4650b9947e1967428f4005900e906cc8e066007a\nf4aebd63d51493ea30b4656acd38437bce21a499 03687d4a9c36f7c8ece27389a5041ffc0cf0ea40\n5e97eee1f77e0fec50e4868b8204a1feacc00631 21284ccf5fdd067f30410b32d01eb9a610051953\n093681418e668fe4c54dc7091bc624b04eb81a05 3045186f0a3fbe96ed7a9cbe1b85b6e9325d80e4\n3d7a831e7a3ed3f28793b22b77386bc96a491fb6 049a895ed07e5cfde4e5bdfca5e819549843c59e\ne622031a74e3eacfffa8fddb996b4cd9846c0078 1f80fe11caa646ae6da78cc3029a6e4e5d07dfcd\n98ff1a3314b4d83d50de32aaa66baf46cb25bb8d c7679018c6c39e4e5eddb91f6a2eee218f2d63b0\nd223f9b1477ee7d02ff90c412e6af2cc79e9195a 5bc015e2aee1d27365437177bac037a41d8f0ad8\n13c077be925685508464e1a9eca1946caa2e9231 5eb90a4d36fe3faef2956c0808b8c7e49481165c\nc3b691706fae1559a5dd9d5a829090847fe604f8 6ceebd3da20e6ba43dfa83a0d91be8cdb1580c6b\n9206f4f5b32f91cbaf6db9587fedb7ae2fd207ad d2f217e83d236fb339b953bac573535dbf4c2aa8\n3d347afd45d9ed07ab8c69ac4059c8e1c9dc10d7 760568e8bb60d1dd3a1019e32418e2e3f22f96fe\n03c5fa7970b3815f7becb82098c93ecf7566323f 2ce933d586d9b128f1d3e4c79aa8bbd1e17fdcb3\nb50a1a26335ae01e5a3d7b6950111116779498e6 73dac97fb1ab4c29d588d32a0742b76777dfe65e\ndd41b5dff402c0884c26d95f3c4c433b5b080efd ac23b1632ce87ac82d94a030c82995cfe0ccbe7d\nbb240e0677c80b2377289110f7f8ecd3daf7961d 141bb6149d65272d62dc7750779e3aae9ee7f4e7\n6794e37f2e1b7aecfeaa089a5f02116cbf3ea303 0857df65bc864b6eea11a079bb33a5b92f4c9c0b\n98cb6897938478bf6d8016e7a24b030ba87b523b 8d2f1b0bc6070da9c2b65068c0fa690ed02f1e7a\n664e56095642ad8294b8f3a35c2d3e820d9836e3 a12c8ba8f0673c697bfdfd31a16a37d3a1e3c345\n0a17bb08522dddeb6887ffb66b2c5ce95090a02d 86b7175bf1cafc8b09afcf2560fa15997b0328d6\n8d3b0aa5dc9a8fb9f1a82435e44e8bed9f0c8959 d8aeedf1e729fc89780cd2db268284dbacc2fca1\nf7bbc9ac9feb8c1bbce350287aabadfaeb5cb187 9cd0c4b5225ffebbee702d79f61b28a8b892be6b\n1822b738534d078178195447ac760d5b66860987 2fc08868e6dcf637213658445b1a7d4e95a43417\nce9a2be91b47f0fc56b51dfd093a6fa9bc074d6b 52f289d09c0bffe53f0da9a4a7ebdc00828454a8\n7463fe1eb27c00e61a321318300187867b28fa2f ad3906a32db3b39f78884b479a7dd02213dcab35\nfbdc2f5b882ad16ce87f54d4789cdd832fce5b35 dd9139b9985ed2f47714bc51256ae3957ceb3da4\nf5477315ba1a64e3412f63c5c34bcd4cf5190cc4 ec55dfae6ae9f96505b5a84735bcf5e4ef5a3a2a\n740e51c4eaa762238442a8b6bffe05d23e36f774 5363db98a36e52c3b8968c21f041fd479c303c2d\n346c3e6c0a14303dc589d2101a55464492d66678 252edda385efcd4124442e68efc0c10197a8ab29\n164a9b5a9e989fad3f21f7eec2bae94944419547 c3009a226ea57a338c4d11c28adb3f2f6b8077ef\n015e5a682f66690b00ab919f7ec315d427db866a c6e970bc845e8ff702fd1de515e9cf27043e4cff\nca42ce3f8d415a307303e37726893284d316f1b9 1de609df6cc263c218fbb8aac2f0efbe9430e49a\n13e454e2151bdc22ce3b28a8962261ba3839f5ee d4ff7b71666d0f84d85d5be2f03f4bc3cfe3c72d\n2c3bc496d0631a564a46ba71f6b37bff26b1f6e7 846331e55104035de082529f0221999c7fb5f757\n6589db70f7a0888c47ff91df0d3da0d05f7d5f6a a244f9a9684330bbd85e1f7f43cdfba5bff9ef65\n588bb90ea8f7ed2bbb24dea2a1156b2d5d3ae962 fb0321ebca674d9aba311386b165e5ae073b8096\n2ca1fa09920dbda2f3603e36579cb3cb7f1a0f16 b72988cd63ea0d3f0272f3fb50402cc85fd63289\n77257399ce5afca06ef851e9581500e81fb8d225 b256c9e75c3f5311e8a151bad0ceae0aee70b283\nec97da52f643343efac61b1b177f3d935d1fd47b da37a21649aacb926397e9bdc27a0bbd72e10b27\nba200e65f3d9e857956d763ca482456efb2275bf 3c89b55ce7290ae5531a29c7a39ff51c8f994a89\n0e360039bb9231ca888fde4b64d091321633d687 e540c760f8a9d34e2c498a9dfb152285fa3e2831\n9bfdb339dd4d99906dd3b8f1d9d8d7c9312abec8 bf12583d2b4b1d163740fc94856ed7a0ba3a3d17\nbd9a53354e0948b7858812c57f2811de0b8c775c 62364dbf50ae77a12e633f1bc03dadba1d32a428\n5a8d9c17009964a355b6f848b769200b4b2cd530 9ca1bf331a4e353d5d580dd09314407034512bca\nb3cb2bf695e9b088ba865e95ce5c01c701f3c5e5 4fcb67b5f6752e75a8e233e4281d18a0f3d9a86c\nf9a5de9ed00bef513e0da3c8f1712cf5c59ab1a7 d1b521ab92d6cc5642036edd03b3152049381043\need3febd6728b511b1611e2b8ecf0c3d56e550b3 bd9239ecd4e6b7e161a7407bfcad9e63f5b8eb40\n2bacd0e3a8dd94caa4807ab93842ad80ecc548f7 a6026cf6711e57ce197998224d574b2848c6772d\nc30d418a0684116fb57910e3485fc176d9fae0cf 2a54da7b4b90aab1b6e63924fe68cf498e1b5234\n9a06bb230663d95a02d59a7d240d0b9756111ade ac26ec8082a6961602f2d52a4be8d704713d6b1d\nd8b34f5d67a96ef82dc1ef45cc0743bd0a5a981d 7eff44ba1e2f7ccde5deb800061c8e017f40704e\n8a01855c5fc53c38b63c00c1621aeecefa5d2260 dfa443bede97959de5089bacbc252a0e34c3d675\n68161b779b3866c0e7f0efddf9084c942d951cec 94e8a4a3501ce92033b95d102c9cdb257c97e295\nf88fdf1c5029182b1d64ff9bb29038eb40f0ba82 eb3c0e26822c7e537ea2862ea208966c4b8b16de\n25fd63b62c68272cb9bb1c45410af64de7cf0542 231a1898ba2c884d98b79dd06aeefbd5b25ee323\n92019a57f4fdc16a21f2313d9e2cfb4713daf894 d83bf113c56f81db6b961ff0b91d6766a4f1e2e3\nbd3f9e8c7e41399282f980be8214a5c2efcc4d19 9fee7944f51ea883cacce008b603d46cc17b26d2\n426bed520ec8eb486b6ae3ed2243321cec24a940 d18f6f36cb94a027c4ea3772426935185f67566f\n3fb663ead14a13176d465655778e53e2c57a8d74 c8fd620ea3101721a661ac15ca8fb4110a079a0b\nf7c7ad5341fbc52b2a88175cdca1c96786579e2b 537f60f6f4891f33e004f0fd553f6412695bdaf2\n7336e968706d869ae312a42b6d7d75c9ba3bab1a e52e725be4925c3dd1b7c1abb9961304491d73b2\n2b3da1841781e902706f028b6d09e6da6df8f2ac 349a991570b3a628756f9219cc7be4989a83c420\n2e977ca82b4553519c29f686e53df45b76c47ba7 943ea5bb413b685929a905285291c3e1243abfb8\ne3cfd4e75410bf32d0dae78076a7f9fa31f19de9 4014134308de0ce4e8e1892fa1fa2d3ead89667e\n45eba41be049b637e086d7751d7b624b1210a966 ae4910908e6040c67080ce5a54964f5d2a31886f\nb9ea6ccebdfab6e80e91bab576a4bb60dc7fa625 dbbd90223a80a5b80a02869b1d9ccce87efa4707\n9c4aa3632729b512c2a039f935745aaea9e45e75 7161176d30240ce7cd61bc932f0d57e591affedb\n4b2965a569c8fcb89f4d86d5eef2c29c4f1ad695 a16688838bab47073345ce794cc88699f2c35c0b\nd05cdf45fdf70f5475c1d4414f08e4043cb254ad 96af54ba3d7516039a9d791214c0c4c8b14d45a8\n4c1819ca3f4f3be0a4a0b0f4277b14e905a6c609 0ebf404472af9a52499fa12cfc5357eb201ea053\n988d3de9ec832c1150d698011a1cd10657da3d0b d86c65116d45fbf41be043c2db56b5ef8e77ed22\n4ba4a3aa8490c1b2213b17e4ab2dd6fc55b97c9c 9398f35a23cd748e3a1ac911322aa32a3cc75387\n8b1c4b64e4f0f6417f13a37a04f1a0748adf3469 64aa8e1b6c37ae95d5a691c0c1ec178423afa415\nf6805a2ff20d934478f40cac9ef027f4516f3db2 a4e10ebcf575147684f796dd96305dad3e0c1a22\n0b6f0c591ede1eaec7a2e85c812e3b3875558f51 f6c9397063eef3fbcb797a64d90198e899266bb9\n6508844b9d0efcd30b5139a6ec723634eacf6711 dacfdc82a5a1b55fd9a1566ab7864417a1d51fb9\nd1e1ad3b3cfc3d096a49f964155cd394179a55b6 e875f150251cf01bbfa5ab0adde6134d5e2897b7\n47645bd5330ec0cc88f4896f18cf6c86455b2cfb a7901866dba21f28881abf179db2d99362f28c4a\n2609befb0057f664dba37d3e6377710ced396c16 ca804b4bb87dc19a5532859fe6f195e63aac8ecc\n8537ead7873b90fbd87e7838b134f6737890a6b7 c345954042ce29d6d18e5146d7f02783c80170da\n294ad47160da8a5a8b6a15d2060cbefc80113d4a d5836da0d9b412db527a4f9966f19a601bc99374\n6244adb481833339fc190a59773c00f27b0b595d e794d356697b04011c0f5740b2a787b0c8b68f88\ncb6bdffb41c2d26f7ccfdb3ae16c48924e9de3e4 8efa64802b58360018cc8035d4ce4551b08301a6\n15ace3b8878e7fae100ad0a1f1909e6ef62eecdb 8c2255cc372cbc3c8bdf854c468f89a69efe8c49\nadfb824f6ddbfe2883eca006bf2470588984a63d c0289717ac669ffc9fee9ea12730c113df92d7a7\n7ec48c398550435398251917a519b0d0c6383a27 1adf93c80b796ad7813110d98672c52ebb2c5689\n34eaa45a11a19d61f6bb2a897aca39766393e397 5a65ff60e00463615e2b71f8dbfad65fd2c6da74\n1a4c1be313516ba32d6c3b815b41e54d5cb0a817 6668d19021ef755f952c96d15ac0b6f789aac85c\n7f30bb41006ebe7573f99cd52765757175525a85 675e757d2bffb8d3fd88273a5480f3160c6d6521\n23c80090ab097ffb0e4f3b52a83c83df2edb7290 7130e368855f9fae743ba7f18290c9779c96036e\n40f6254bfae326c51c890bef096b26f00230e1ed b76c8773b77fcad3f221d639914f4962bae3227e\n23037326b3e75bb33dbed010bf4c2bfadd77b04a 9952dcb075ee6f9e7675f36c6c1b08b402d09703\n85472adc447de2b4a57fdab44b8446dd5e4423cb 7f8f7342063cc9c15f99d9294ef26c215e3d692a\n0d7400173aa57d285657cdf8b9df7ccedcc22201 714443635996f5564b6797c488a7ec643b849a12\n42f77aea1022e474d18c555e615cee6100bd0b65 e6f4159ecdfa513ec9ff79c3fd96a1a3f98e0048\n76b3f3e58b7ee037add04f4f9a0ec29b03332916 e195656f0d9f8c5e2335154fd51063becb67d726\ncebe5a947b21a40b711a6f36b94c03bb55b7a4bb 9d88f6d62ac0f4034aa342e6f4fd9984d114795e\n571036dd23c10edc5ab06a02e27516950cdcfbaa 3fb344d343c666fdabcf137a9f73083bab258d85\n37a16660251c7c7717194b108f6122657fa1b72e c089e8489814fbc5f811cfab741d67ab4abe2701\nd5c14f90fcba80f83ee890f20921d2dc0d873e4f 3bee8309c79d66d0de6e69e2085fcdee9b0e7ff1\n3351c19bef17035e464cb5ef7b1fbf388a360cad ff0d814719c71d2a132e96083dccc6bffdeaf863\n91e273a261a59a892e59191916f25f43eab560c7 2cefb744025a99c8b563c8016696e91ed0c1d389\n0dfa1637eff3459e49f850fefdac78e6b97f3fab d85f8084dbe9b79dc6fc0a40d2d22ddced5df83a\nc2e9dffde5d42ca4740e6c2c8288949c81e60abe d166275bf833e930b6fefab2f81d56b1d629040b\nffb1ad3f963bdb9c99bfce2609982937f17a8d88 16a75c97b351ef55ff084c9d5be846487e0c57bb\n93e2c5142b9ef7796e74e6109a248c120b34bdca 787f8d22912fffc9a869748d742b2c79e9bcb558\n44dfe0789f55ad7af2463204581c3bce8d27eef3 77cb5364e804dd9831d3551eb2ac67975ca64c13\n85aacc9946f544ffbfe68223261639b5b96967e1 5091c6cd81586ddb768734fa63f67bbeda137d8e\nd7fce0ce9108a12ae611d2842641bc6a1c1dea89 3a9f2f2c0e3e817fecaf4d4f86df405d16cb6d53\na3006bcb85c5ae5f898c2c43e204c2ffe015b1fd 35a18156c03d300dee6ee4ec0ad1eb0afc342d23\n357a3ddaefc42451ffc49a609cef3f9f0fb9ee68 b10dfaa6effa231e1c76a398cabf0cb2e9f2d5ad\n5f6b8744d7ad8832fda46958b4d0b930c7ccadb1 8c805eb23c24ac954d4771fb1805f6a0b1022ab6\nf22a4905ab9c64d5853af0e6de18e00c49050c70 097c23e59edabec5267cc9da3b070c9ad6a57735\n888ab1ab0f65f1b9cffd62e759f4e3bc337817a7 b7a3029507e2a39c08064f81bd2f755c95b2d819\nf7cd8d567adf38c3cb955b03663c29551a9838eb 05138dcc52aacea708cf46ba151bc97d4abb438a\n07d036b427a318dce4f90c7fa9666d1f9fd44387 50b92c7e4dca63b7caba31b01263888b882fd8d4\n648bbb37aa35f86eb7af61ebf9d7d7f0a72311fa 9288c1abee40573b3a54fafc702395c7e0f8a6c3\nffc06cf9c8569ad35cf75e957f522e7e2c405ce9 48bd282e606b3db1ed63bca5eb30a4363d1f83b3\nc2ccd50371ae41f94b8aa8476d83e1d43bf0a710 616e38a01e3555e6541d6f8980db7acfacad14c4\n56df60870f35a59072452c9d42be3467b1bb15f4 b3b29602477dc5bae82a829eb8163221a3fc3ec6\neb34bf3a6bfd33eab96e1a37d9d3afd49c193f1c e5239f3bc9213b0762c0c95875dfc280d3a09a38\n3b1a3c3f50b23a80cb98d9bde07d30475e990fd8 65a957800fee8e59dbf093f79458430baa650a97\n25d13295dd10fd7caade018eb2f832c676afe75a ee7147f4423208a23b4cdac4a61bd2602117cdaa\ne2292eafa4d3bf36c19ebaa9481786ea64aec956 e074974676bddee2367b0f8a176eace18f80c4ca\nfd92584039493233dee3d4f9be79e26fa417d445 b3612f05b455de7cc6672a4de681a024f33f60ad\nde2d6121f5bc3fcaa59fbfb6e80aad9ff2f0281a 9aa8e453cbf75465fefa405f7376f804384da6d4\ncc29bec70b68828f30da957a86ce58e55e538680 07077394e4d0d3832b725570cd321345e0a917b5\n59d34a0d5bd28d3d9e8bd2d761eb99ade088a2ac 0c904b42c68c57d27973ba15c8958785b6944216\n60ae897b0bcb11d29e822d1d125062e5f3358638 9df992ce88f6f55df549d6fe67073c735e993739\nb867623af98a70c5c6768d27417d4ce1ec0cf8b6 58b1ab1efd08afb5dcb1c14fed1d035a0abc67b1\ne140c7a578f8516946a9591c581293287dc769c9 640771d5acbe7254d7eb5ae4a98fa7dc5670148f\n982aba2c94abbf5edaa7be60dcf85a3674847722 e5d1e4cfeb38a45a03e0a6bf848e1ad7e048a840\n35897ca9c051a94fca8ab180735f9024d811de9d ab8e3774309ae6d7d819a8e56000bbe429359532\na52bf84316e3e32e9429f2a41b1af54a051cce0e 64be16194618dd14a4c76707b238a34063e2adfc\nb296ebbb9ef09fb8ccd9af3919755aa5dfb56217 cd4c57b068533f52d831544dc429afc2fe5c62c4\nc4422eb3c60748ad09438af0beebcf68558f69fc 7484a56e0d6f586852de77defad06ed428c9f658\n7f5b597e90efc5eefbed3de193e6e6d517a27a91 20a719fc6e72f10bd9350bbbe3e795e575a14555\n90c7b3c50c7974e4c5909919377e6879004fa234 76de8c51dd26291f4dfdc89ff6c9facc610252d3\n1872599f7572ca2b33f6a67ef1b0f0485bb4622e 951e2f75343b577b3690237c0bcba4927bf0a746\n22fe595f2e45005b75545a81cf576b7a5ebdbe51 a16772b62505e201c71b0aaa99d819cfb26e00df\naaa96a4e879dd674aa0a68b2da773450a6e8cf4c b1edc95f5cde98fa156f87e4ea302234c926f9c5\n91daf42295f0d0c47c425877c20d6cb37f989a07 6c6450c02047e546fa42397aa4de9fefa609f5f7\n4e949da180c049d16998795f663e4180f586e866 a4716a5c36e02696ac15c6c42749c4796cb5e052\n201cff53488ab73caa6b519f38a85184965ff0b7 2524e51561c95102c79063caa387a76df518cec1\n664a14ec566bcec76fa9721d6bd67f592f6085b7 15bd01cc5eb335eb4dea5bb939fad2bf25b874b5\n4f68a76c78677777c5502b55ffe694609269d686 506834e72f18d302937730b4795c9a81a7e46c08\n688b17b2fa89075ee14daf13e6c8d9fd8848e41a 0d0ca237335831e23bef01868436b5d8a8c414b0\n738869afb707ab9995ab44f8a07bf548e14cd50d 01daa554843a7c845ef69fd52159d475a4debe50\neeb40a0eabc3d3dec6a647fcfe524688b7bd6e16 093644be5871b34d15dfe21a87bfee5469c0253b\n25e8d97486564651124aca1d6f09f5e9513130ec f46f41899223511b41556de95b6b8f62d36c6211\nf0a4852d9cab95b5cf6d3217674d6291aa1dad58 a586f89ae0449a006077ed01dac8510917642875\nab60356721bed8f910c0583953012d62950787b8 2654d20801b31fb300b7786f66d54e8b083289ae\na702771cf91771e34cfaab22a5f8ff4041a104a8 9e5c96b56bc1f5bff4c5755688088c45a929a1f2\n86115311d34d770a77a306f9a32a14ed12235cf1 da13ac3fa0affdf254f1cacd5def631136b1272b\nc75345e962b154cb1aed69dc0c2af6f4d1baccfc 691af00d66e43afd44eecc14cb45178df7f7bb4f\nec671bf9d7a615c4b74f0f06e1bcfbb714b57792 2f8222e32b0c8d91def3863769609d5e531e1a05\n705957d57a145acf5b3600d9f4a99387904a65f2 141c913ad4b6d2a0e2fd98a13bbed25df0b475d7\ne96b765962d95053f5c09bd499ec7c7460483012 485825ddaf70fcd68141889d7896bf5c02e63633\n6c9643372b26fd7801f56b9c3e8ccbd328e0b037 c852d3353d84da7d720f186f2cb9650d16485206\n5ff50c5ac42a9e146c9165f53bd989cd6fe80d6e 04a0c5a0f60860bb236837f3fff07423e260f3d2\n1e970fd9787c59e7a11717ea9d8f96147ee58c86 166ace7a14e8a22f98d5030f1643c48a8188898f\n8e4a644882a790aa6b24817be46e3e0333346eab 718c9f1e35d46eac381ba0489b11bf049df4c9b9\n8a51a0bca5d24e70f895d22ce9122e1075e01044 af11b59680e243cd2c406e13cf9e9f7d8614b5a9\n70da7acd8e3dfb736bdb0de772f28dbe9aa34eb4 30c2e73721795a8e4e10d1ed7e7986c965974072\n60dd50cc6a680a222d40c0d456467cb0bce6553e c52d129b51c03d84011f40d44f5c926a806987b3\n0bdccec20b6fd2a72523be038cea3be80d78abf1 0c5c9512a880f49da8d3f47b40c4b29bd5875d43\n61c2f6ed931af4f5eb1c9ee30690600e5490f007 31213163a983da7f765aa930a4997efaa99d0e4b\n1c8f7734c62090e5698c6d0b32f3e3b37f4f0365 48584e456f8d0209fd1c990cb68ea259f1333859\nd093a2665845617d44ad4155baec8634fd5864cc a24c6572d6cebf19fd3349676cb2aab83a5cbff6\n108e2502641bc7bc06c1424a45b621abc42a8687 7fb0c19e5993f161c560c7b2ddb244a1e3a38736\n327f2b793fcde87d105f96056fd9953b791cd532 0297818e4e7a7803a5325f8ae02c5ea15975ec00\n7099237ffd55aa53df993e753bd26885c5b3b881 89ee6814845ca80615e361dc120e1995529e45eb\na78c66f228cf36af70234f72565cfb197242433b b382b4391c6f5af5c3c1555731f4d08ca129b9ab\n90483ae542098672d03f3fa0faec58cfb7aaa7d6 d48a2350971281169547954e393d165cf9a7f7c1\n0bc0372bb681940aeaf7d1b433eb83bf55805a01 eeace03e9c466a94ec637993bad4936d8a74d666\n31b77544199a20818ae9dff1e5f18934534e72f7 b3673b1105a90e2a2d8c63098bbbbb3b0b361033\n97e0fdc99de1ac2dec59902757ba083b7b339b9e 31699b8f26fc9490ad688746f280f4425fb435c5\ncab60faa3a85471d658e1dbad8a37247c826379f 96f430dc18952562731e9876e6486f96aabfcee3\n2b41153d0af07c8ffbcfd8914cf0b7063f4365a1 09c5986a97ea2c075c06bf863a30a52c4fd17292\nd89dfcf65de3ca6415c59949a85bbc6308410151 d834aaf535c47734d6cf32f0fef1ff4008dd28ab\n4b3bf04b2a2f31daada19f8ea27aa95caadcd448 af859386590755462a1d49ac0a529eba24287996\n3c018b265f821ef3de2f120e8eba25c4c344d32f 0495cf214d1cceb9b705fb89f1f41e6aa8626449\nefc8d6228b67ee5167b498809e7cf5a154555310 e808cc7eee6a89ebcc4e367f9fb8d7b5714a5279\nebcc6ec3bfe3c3f8c165065d4fb1a4b906049da3 9b6c174346877fa0923bcb01e8531f2a9a45ee4e\nda2e6515e79d58fc0e02aa47ed7b9de11ffdb4bb f225488a13649e6e4967ad3550ae1d4e33483a05\ndeab417d810bae1198072fcc55f9de050127a40d 3c82dee26af7f3ad49d1150b7f8bf1795251ac4d\nc623e01e0c8f81ced87e2762026a9ffffd8bb605 d501604a14c74977bba634a97fd5fad332d0dfca\nd612aa63f11f856c5101a4f5228eb79c01b56bfe 70cc61bfabf75da788f9d3e59a0d48ab223f2a76\n2be20fae31ac87f7a9dfcc857cbf4969c8909c36 0ab1c73bf702ed53eb54e4b589a23bc274f2922c\n790955261c50a012eadab27efce200001185a258 b7b734700a334e2d6750b4dff8ec04cd0a061a8f\n0badb14a59f5496a415d4aea7db3b2774dad814e 925104b965e7156bcc769ae65973a58c373fe15d\n7259d28c938bfcf22fde93f6551c18fdca979123 65d7983c300112b6adf7ae56046daf814edbfc40\n50238b7effa52db9b2bf80a50596e809b83ec431 880939bbdf98430ccf77b97649f05a952cbc5008\n1aaef6a2072d6aadf8cccf5a979a958c3bb0a310 f80dce7b9ff474bd54fe41f66eee2c55b607fbe3\n5b257be4c99bde0e59eb254d1afe10967062568a 42e843b38031905c2fa6b152c1fb3ca6d964bb43\n560bd2b7f3cdffd43268c57723c8bcbedebd7fea 167f5fbd4b4d8c6bc70025c3a1078f6954882f83\nd3876a970b1703b85785ab98314c071a010a2155 ffd891b83fc9f3221b8c1a638abfa2a7b48dfc2b\na471c62f0a3883600a824988cae6a998e7123cc8 12c0f999dfc675b99a7ff9c1e0b160bbf0c36d02\ne4985b285a06e7d0cafcab15ea263dc9e964dfa1 2a09eef4777a38adca4452197c9d92d12d7ffdc2\n44cd60a958dd5b428e7178d2f846390de432b792 3c42e6bfbc116699a18feab2b8c47fea4e97c82d\n39ce1538b0c61d3160111e6b74097e912864c452 cefb871c1b5295de4d1b0672cf59f4324d8d525f\naa932c9daa731f2b72493420e4bc386654f1be30 9169e959eddac2c15ea6e1ae61bc685f862c467b\n0fc44bde70ab9904efca11042b596ea31eff75c3 f3790747f7bc05088e8db4b33eb71626cbabefe2\nca3adbe97ea665bbad36e01221cacf69ee740bfd 81e925d5b77d95a01285bc4df7618add92259db9\n5ccefbebad0e337e748584c3d5e2c33e2074b807 00fb6d5f406bcc8d46639cc03b79b462d48f3575\n495d0caacffd39e895f32f62ca5482c02a0be17f f247262d6a40dd22fa95d65b045c1a0a4e8b2b76\n654ae5e3e473a51e29bc6ca33e695478d56de076 72c565966496cc9e554a9cb72099719cae036647\na98add5369f30d96d2c62cf67aa8d98722917e23 42ad69b49873273c302eb6eb34767e626a26e0ee\n0228d633aee0ddcd64ee89392522e1a8a3c4b2a0 16e83a8f18aeaece7fff3b7b96fc6fa66fb50fa6\nf8c667206d6b015f4b6497f8a23876d309ecde00 2db23ce7080ddd143304a68a8701b2a51d48a892\n1757e7722b5538c6c2dccacd7aed0458991b7182 7041ec71bbcdc46eaa8c82d6095e23677d99caa0\n160285e56b1b9aa09191cd1a5f68c4b501495730 38c36cfea1080255c83a5d8bf92fecb925a2d631\n5f267742c000fcaa0af1bba6d53eec22b12108e8 d428d9fde78354455d21071f907486b8ed5c150a\nf709be825dd2b3e1b660141cb884469b0c5b6263 3f31302adeabed4228e51c5479fdd7069fa4890c\ne66a3d920b6666e38a992740126e18e115398a7c 6819446d1766e2d11bbb96477096e8615a42706b\nddfcece39a14f6d19093a951d35f33672b6502f9 fbf296490e5149f5b99e725f103c9c80beaa19cb\n9295123e27fe3884c8607009d7b95487384687c0 a0e4b521ad20546f2d8753e41e251c6e0c7e1def\n28397e6636dce2d7375de89cb241821a06f5e2b5 d68f8a45ba5baac93450a2035a6b0c8355f99949\nc6a1c9cae549dbb4c2ee3381ff268a2ebdfd1a59 e6042bda6933650a9fcee600b79039163ba5ccd3\n164a3919ed1bc2e15c850a084c655d2223da381b 530375604d5efd47b663106be366c8621e2202e0\nf59582db94112908236ec40eb14f9469c4d7b56c 786a9b7c47f3b1cb40eec385cd615f46f652b866\nbc2e1d61014577ebddbdce4fc7462a80c827987d ea15ff0cfda899d898f2ead58997047d85376236\n74530222fbdc70f66e11e1a88336060f272dc81b 7395aab53c4a50b5c4646c7cd8077ce5b579468c\n95c3c85b9a673edfba8f9db62e7d4a740c58a28b d03cb1262bcec2e2bb2b8bf2bafdc273e3332fe0\ncbc4a84ae6d118e1502aa996ce5a3e6a9fa63e5e 0ffbd9c9f9cec6410197dc2c5c4a09a39874813e\nb5fc18a21caf3a84850791bfb0165352cddac314 76e95545fe63f424489e1635b6d50f5990f57fac\n284e70af887c7e8c2cb4cf2b2f650d8a1e310660 56deeb2cf51aa9099d305a8e294baff4807470ed\nb7124ce9f271f64a3ae72a8a10bbf32e0398197c 9297e35b73bb72a5d2528f5e3ce87c4cf8343998\n5cc99dc508d18f28f6c2d0dfc7c3753897aeb103 8c0b0208af53bf59b4ae1956018cba4f1b9a2829\na67e2f05d4e69f6f1201c4a7424e187130cdd6f5 0fd14253b34825fb223caac7b6fa6f84b36ad371\n71597ad6dcd5e30f97eadf32c490062b5f839e99 b1210e183294e9dcbf40121dc381247d6b4dcb54\n62c01977f19ad2d82e7d3e19a086b911876037d2 cd18a71d37a96fc0e5b6690ad7e4556f0debe7fc\nbb0e03682ce699744058d3e8a8226ca643a4d35f 5c5ffc4f3fa7c5b76c209ccb88909e3cc0560ef1\n62a7331b02c50565ec6707d4515b8dd255006def 46a0e5111a9855270289f574b199965860091813\n32705ae7a6a3ee10cfbb366012bbc192f904db08 06aea4ac1ef08486efd7a9c1c03280fa02deec84\n33e08fbc286b47761dcc6f436a5a99850f0f1397 d1b885ab59898c037e2889f8dc2b876d3740e7dd\n28f821163e8a9fff4638ffdb61d8cf56cbe30ae3 6c3512b62d8c49b444cb0786e635dcc461315233\n13b0b23f27ff60da35a1ed021abccb1047b8111c 7160af7533d073536a6f872f189f4e18909e01af\nf1ac0e050ae95a466a839aa42d0a21bf8ba297d5 649b1b27d984899a752391b960c885e7d16bd9b7\nef7c633770c436590a0b24d25e8016dac0b42539 55e2f44837d5577f11dc953e8f3b733d008de397\n0088bfac63fc8e071efc9ba336bdf579b8826871 97359d69c5a1091ab1e398ec7aa31bdd87078762\n943c0c4c28ee90b88c5a2ab884a6a84bcf16c9fb 0518838a1762752f8f88dc02e2305db531e05468\n07970c28aee50e3c0e0ec2a7bc4a18a763f3de97 3efd1ceba13c19173ae52a9b9d1d6ae1de6475f3\ncfd5485b621c7f9d487d837765889adcf052e5eb bb352a66d8aa10ed3ceb34203a1407b4fff36dce\n9d802564ba6ead74c0840692661df1d444de7169 3de89ec594433eaa97e2a0747eaff53186b1f8fd\n3374c8937e257f7afeb911e15eebe53146ee94c7 82534222827b5aa46e5c8092057d55ec5ce29963\n56f3f57d38503fef7c8c168a12eee727320d178b 85011b73631cdb50af5ce7feeea9e7dfe4d71e93\nd05bed9c30975b7e1d42eabae9f29795e8f7c306 66dfefee3be1c0d96ae9644d9f2168ab3fbb4046\n3a0906e9e94a40bb7341525d4b9bd74cfa2b7881 e519c7cfa381eabd670432b8186303f96dff0b4c\n2cb85f4efe5862234af0327f782ddbbf9c9ce062 e117f40b4a7d5bd0e60c0785877e8bb8640e03a4\n5f9f961c7b778809779ea823c409b6140b3a985b fbf5b351c6323df6555b6e9d01019677fdf70811\nc470eb1caba9fbb464d87500fac96574d9be2b86 0febfca000d4a8b134c2b0052e774123c1ab3d8d\ne7580627f12fafb7b1eda89bd830fa8fe81b9361 e196c0defc7b90357c4bf75726d1241fa274e079\n78da07494fb805a4e9439f1f614c782d5a49413e 8178f943db4113c4a86cbe2d1923f72f40df4ab8\n271680eb46efe096572db1ae384bc5a7a6ff59a2 f044cd16ba8a6edaf4fafa089133fa02377ddac5\n92c2ab29d05302d566b6c7ac592b8970da3a2ea4 6acd549030997e821f4845546c7a43fc2f411f35\n3331b69b204761d11efd9621fd069b60ebd4e439 c06fe2d4142d7349d9649a73f4fe26d2f0892236\n34377fe98dbfff51ee6ec25d2a10da0ed33c0b69 82edf703e3fd9f61f0d5a3d34e7a5400c656dc03\nb96031c4f90ad378ae9a01e1bc7d77945a84d7e3 755aa1c1182be78c570faa242974cd7370f1bffb\n3bd4b11de3f37ce8c572ba08bd5cb95402fa9a3c 583d01a279dc3b65e3553a638c2e6afc9497c598\ne2cc86cef1ab995ad4481b6be86defd74c62022e 1177f4603ad2264327cbe640d5c92270aeebe62f\nd13ecfb988db8d4b37048d90812823065924c5a3 bf8a3965f3279ed82b5816f211c5325616c62498\n8bdda5a77d508f2ec49975729d3b055d272ccb7d 529872fb2316f3c39d027099720e7e3efadec7ee\ne569760be8297e5e95cbc09ea1f161c1f1cf01c6 d91ef2c62c8756fe5084b4b246f2eedf0df6b05d\n3fcaf28b04830b9b01b0f48da6999ff304833e7d 9fe495ca9621540a85bb6ba2c98f2ccad28bd89a\ncd47d9de758ac3345943fa7f11a7067125bff250 f48fdc49231b140a684ad0e663e3a0e0d5574164\n0ab663e71fa49b7f5b23e53194a9d2ddcdbfe272 9772dc6a5331a65cb1271e2336f8c3066ba4db3d\n9cfb8df034e289b6811906543126139e4a9abee5 ec12ab9387e2e76d4028ff0002429e1125a07f01\n2e01228a89d8b37c59bff87987cd59ba7ebd0374 a099e3fccbeafd96ecab6e648b710672e41c1bac\n4fd6957e4eecd3c754d90709b09c0c2d19637278 73d8bb05352a4e2b3ecd58568efe86764db47e28\n0f5237dfc1c3483feaa8d2f2425cab83a0bd94a2 a43bae5218ab49d008f82b29a2d08035c9f52f47\n7891e920cfe405c42df127ae7ab88d3badf3c463 2c00385c6ea5fcb6691331b1d7db80cc4571e779\na5202c1ff0892ea78d97ab4e2418cc1c4301182a 4bb38da42e8adf8422d825914328d9aaeca39555\n40922ab9653af941788ad7e80ab8edeb1b2f5a2c 6723a32747d72ae8c4fb88621949b9b690d33f3f\ne13843ce826ed420d86a16e695d4d0b8b092233d cfc8daf64ad0684a7408da3ae1b3ac792f0396f5\n1d86b62a312b0e3013942cc89fdb45a6cb4c709c 5c35c53ee3adac89253c42554951e26a79e7bca0\n149bacc64386a0d82596f96005366f119c038c54 52c7201618b9ec4d92a4af9c1ab960b1e9433e6a\n34bd66675fde0feae9ff80671d88f5f5e604b12d cae565f83ba7cac24602cf675385fa7cd2afee03\n8db3eb206e6d57b2ba329ae14150004e76d293b5 a7f0da6be02a5edef2457f8a41786c5302adb02e\n95511a65b3cbc6f3ac11c27b714504d4d803b8c8 17561b39c2a14b07804c9add12b29b6b639b001b\n4857d50db216d03eadf030d453e1b17a06ddacfb 48eeddc42b3f36327d28ed5492ec59cc1e68e58e\n270eb85021a50939a1e2228fabbdcc8f6c4475c2 8a1cea881a63d874fcdf532e531b065bed003ee2\n9c31b5ad3e9ad3b7786aaba764c897be6520d4c5 b51a76b7e02278bde5a4c80df8b4e4ac83cb7fbe\nddd0259b4ee56936254a2c11c6c7a46ec2655aa9 66413922d0e990cf2c0e708f75adbf9599484f4d\n5f98e610d9924b401ec33c78b3ff65c265bba750 030788585fb0e608a7927e5f48504753ff197ec9\n3b92fab06015abb2c9f40ed0f6c6d7e3b14a6ec7 0f903da65cd6d4d87e06e4da6c3d8e0ff36c2c96\nc2ccbcc721c7d53652f44b4c949e1252e44b7d80 a090b60361d38de6af1db18cfc8fcfdbe4edd3a9\n6bcd111036d436c04a34fac35aee2a8665901259 942a20dbf15ad89a4b59265d2afc8a5e85d1ef9e\n0eadd025790b488345638bb97c21e2ac2546ffa2 d50e4b93f94c01bbb875c5a09f152429166a6490\n0cf83b324fd35cd250fe6238857b4edec07801bc 357282514233a3054c0ccbb6935cd322bbdc86b4\n3d65f0b3d76173aa06b0ee79a2a1f2d73db8ba42 d9a5d4ce107f44edb82308db28d25a2c08213dc2\n17c97fe8757798bfdebf7279aa1693ad89966761 efceb6cb6476e184b8c5d8a6a93aaca3c3b1dcfe\nbab5d102a4d6917232c3c8f8f06326112fe73961 9633b9bc03d911f98aea666c8bebc880a96b8a48\nefbab326a122ae326b1f81c775425af402004b46 c2a700150e56da9e98781a7b607f02b052670cbc\n5bf979798e5e0fc8c3cd56a29089017d6ea30592 7c6cb57e9731c8bd48ec689312edea100a9f854d\nb8bc6c2299b2e1876402701e1bdd7c742567f472 f95d37a3b588f5ab4c4ea8784dec2ba8bb993aac\nda4290055486b75f0b48f72f8e4901a17975ff22 e4db6a073678445389dbdfa05fd264737bff2afb\n918dc8e0e14daf28373ada4e2e3a220bed44df60 2e4e95dcbfd24f49c9769944b85959f8f73bb8c4\n98f3c36098a7df25ed04fd084adb53182ecbb224 5821a0b311e7c3b30a1da919303ea67a1cc70595\neebb43e882d40745f042a556f2cf7d9900ac3493 61a03f49fa9998f4d79ca41ba5df429926954f57\na998b0a85fa63b6434ec0cf7e5141bf8995d9e22 3913dc415800ea12257ad4b38ece5d67afe32b3b\ne03107e0106355586a3ba4ff4cf5d65e568be104 6be78a0213092513a0c24c1970575b3e5ed1243a\n39f17fd36092896496bd9f6360dc46512046c9f7 208977311cb750b4ff7465a751e92b875d35af41\n810f1761e31119c3a9146d2287e30f36c4ae354a e325ae825a63aaf41408aa3b93e05da827ba528b\nff974d95159a6595aaa6e4e91e7dd21aeab4c6d0 6d8081cc7e6bb42a80d5f196d30bbcafe14decc8\n7292dcb2bbb83ec80fac0bef6e82cae628517050 af98757d51a3d9cc78ef23b65688fb3390f5411b\n672700c586526e67e16d33a920e69c7b0ff97764 6af18b634a2ce187cee04ea5cb9fa60babbe300a\nb51da4b5ae410218ee5cc784e4fabf9b069cc670 0ae2e88dcafde28eb9d0157202ba60762eb7245d\n3726fc748f18b158532d18277928933ad72640a8 4f254c8efe0236c5cdeb22b69ce0e4da28a2de12\ne948f040ecc7653b6aa760201685aed8d6a01475 cb20f06af4c0dab8588e3b35def835528861dab7\n0321d7aa7bea7590d5914f6c8a34ce03dae0d405 c55a3a83ef09cfc4e07d9f14df6851d56870e3d9\ncae7c50d8d9f741718b7d82c03ff4a9bc0698d34 82edd4f24e43a29e1db4dad51d8b13f975a0d14b\n8f08b3315fb98aea8138a0d6199cb254e456db0f a0c3cc2febae25cee8a17e35417cdf16803ceb41\nc5a6416df1b5155baa890693e5517aa3afe2767f 542de7d578fb493c557f0ba5bbf6f76af20ff228\n71d8062b1de4c3f19e55579e99072080f8bd1e25 3a73fe555954ea9f7cfcaf13fc3d21b3d65e1bc2\nfe8433bc7f39070e9ed1ca8c8099a6204a3217fd 66242502be32cc6a191e012ade458e95ddc87f8b\nda12b0ebf0ef9ebc6501b5d9c8c50fa0441d25e9 8585ceee17e158976ffa66ec3aff0ac1196254ca\n30cccf60d311298b270b6dcfdbf9795435b6428d fb085a6edef5cecb7b64c03364b5874665ac0b6c\n92da929b5f695424863ce022e82f95d17b75dde4 a8c66de9129ec9e12ffbaa31579dbb4c334d3ab7\n8097f3a11d3fc6ef6a6655bb04fbc33b9825ec22 e5ae42fff1081adf4b6d74c3c3aee423bb21eb52\n4107fdb89854b6e7dceb0ef46dba668e46de06e7 579ced46357fc465c36dd4fc1d2314567122664f\n324d7b2fba4801fe1f56d1b03bcd946194659593 b6cfae4cec408f8917957953751f018718f699d4\nd3cb2d9f60803af9dbd0736bf4aee9fc0445392b 2fe5ff7f0822b6891424a40ebe464ce2b9636a83\n8173585cbbff0d3aaf777aa01c6aa494d0d9aa68 e9caf0542475eda54a66996570fc22e1d0c9d867\ne95a96e219049bccf17e8e2a3eb24bdb5777a233 e0c04a3d171d1c68473f484450237d9f95d46402\n3e282dc41bb053a1a6c7119c38be2c2e9193f48a ec310703cf5ef2c9fd6c20b60dca3b6f9eba58c8\na3c819ca1ec24e8d9c8c6a14d91216e50cccc244 44e90bc9d24df193480ac283da48f55b1330cdde\n2b8c407ff603bd3cb27284fbf695244a24c6fd04 fc10560c177f5451a357c30d0876b6cd27adcf8b\n0c96c87aaaeb8aa7be540f23e699a72566dbdef5 ac16ab257d34cadb4d55b477297f658b53dae2bd\ne46714ff625e139f73ab9e832c899b2781f2ab51 f0e75f3779a2778a260534a20c4c7c6918381613\nc6708e5da39f70e6353f0d4d7fc94e485fea2219 c3774ffae17d03d54d1e98b1a4ed059e7db54326\n244873a7bb78b6d1d33f93d118a90b51e6b981c8 a376720a96bda4c17abe1144c46a052a1ebdc298\ncdc9b73c00595de3f6520cc9f073846069bb6d5c b3af9d50f88be7311808acfa20b8e83a1733d080\n62689746d6af72aa0b6932548c5cce3064511569 a04d5aa13ba19695d2a8537a88952aaa593f8380\n0d77969646bb08174a14f6ce464d8512fe355df3 ddceccc92152da67aaaabbd9ae7f5aef14010ef6\n32830f592693a754aad7c2cbf431ed2a6a33353c 261ee665dfe99cbc48b56882f5af0284164b8a4d\nf25bf4f4580794e28ea05786972ef73681ad8fe3 275a782cba813873e73f76ff6c84f70319c0ca7f\n478d3f2c600e92368e6335fb33fbccfb967e5a02 2327c854f1f66807d76ecd9d7ac273205e63ade0\ne288377a07eee0db308b85b2889ab3763f089459 98f76b746ad59a80b8464c3ac5f57157bd32ee34\n2cad4a72b2ef08bafcd74c0950818f293ef955e3 399065d2927fd1d61469db2f64f7727cff264f00\nb752e94257cc3718b3a586cd1630755ec12c25d6 63a31cc16ab27f9ad170854414811c6667c4684d\n95fbbb5e7d8c502cc0e52076217a8e9a3e335ad1 82b8d98f4ea76d9b06b59cb86c584ed99df88e72\nd2e95327c977e5dfd7fec7cab7c7bdbdc95080d2 33311e7b7143d40040bc9b36fd12ef314f15669c\n8d0ce7c2e715b09760e4ae56a502eb7fbf7300fd 661eec09f7bc2a0d9a1f99fa978b619e58c0d292\n857e7ee94a4424572ab3f3ce68a1698f2d659a39 fa4edeb971d770e0617ee3bf8d35077befef92f1\ne7b06a20d3464d21c2e89a0b3e966201c0bb8b53 9a46159edf2fcb2379c7f867eb8995328247273b\n76206f1ac4023b2f665a6ff92bac382f539858b7 56178c607c43bd12e366627fb94f05595d331dda\n3b5798b57122bc0436e9bda3a41cc895ab3f1e9a 1fc6c41d12de6e2fee18509dea6c51e6a8b6f5a3\n2102a555dbb0f8c4f99ab9ecd54564e423cc55cc c553396b915f557e4d4ed715038a3b55cfb430d6\n4baf066a47aa206471f13ee2d19d4b1a8f8a859d bc733e5090e4fa1bb2b48ec46e659bfee6172c39\n7bdebf6f7dde5d00846ce0f2ce53d1ee8980434a 086b0ca15e55cee149f874b122894c393c070947\nf6b674784ac8ef4d584e75fadf344284d680216c 5e037414e946c043477ba0686580c393457309bc\n3124cdb99f928ed56d26d31a4122769deb66b35f f7622b8b57a08fc6c618a0db1d74bb456ea9e224\n7d314b55e04c72915ba8133cfca58c49fce38719 f1863b1dcc3d540cd4101cea6c361f562855e93b\nfc9e43194705463dc63f8b641df98bdf7d5afa42 4ccc72644b8467e77df796e2a0bc2d294e5d7d0d\n25862b2f3f304e4b760ef95a2b9e56934453d86d 4078568bd7879c652d08b65d45aebd5338855fc6\n9eae30b73754ff9073f7e2672d8e2baade9d39d7 6d3da1bc09b7c56e8fec6cb1bd4326ef42553db1\n2b6aef5bf14a2e58406c08475f2e8898d7c58cd6 fba7176adb88b00b18a3bd0fbb07991227a670f3\n48bf15551466044c2a4959fe5cfa387c350d750e 5d6dd024d144180c1a211b2ffb82590926003aa7\ne0787ec957590c67f6f3194d730ff47f73a5eafb 05d8d598a1b3100be8bc5383e394e65842e89529\na81b6746810d0062c46cf4e3bcea9bc86238b28f 7798a7319da8a102391c8b78bc70c913e7b2ee01\n4bdd30bac7dc34d8c2c99e03218ca7257b726c6c a561fddcd5ea6c91fca0c7a3d32e6f45e4c67493\ne7baf5e646000ee81cf420359e103a25a71da94b fab5eeb29e88b9b9ffd5d7ece5e12e96b3752051\n9533d99943b81a479dfcdc1e373fbd85c38b8e60 59d18fa5a99c0042a27cf0bdf7d495df17750933\n568c58e718f8de639080d79a8f72786e33380481 4520ebdeca4c1d64881826080b4853bdcd22e25b\n9ea2376e78b016e7dbf1777d84e508cf61e30a5b 6bec6364dcd77f36eeff87d8da21862c80c4fd4f\n3065bc14d7827b7e2e50acc2bfbf7e46aa7c27de fb5b35ad15a924389de07086c00b6529b15f205f\n298466db731422718d82e069bfd8f0144691fd04 ff895ca3a7b34024818b2e6f02e57c5331219641\n39445ac3f9048d8f846144e47f07d34a8fe0b0ca 472521d04542c3266e62cf00a4e3986a494798f2\nbb6ea3e5eef40417d297456e3655b3eee70ce4d0 8378f7a21e0238f3cdda292b98810b29db4d9613\n46f2ff7bb42712da283fe786aceb2f0e84f5057e f7f43053bc721aaea1df8efa1abdedd7e75b23c1\ne7a95f23747058b2096203f2df399237be8a5b03 ad3556e61f4147552811ac97c04c2fefd8b15aaf\n7fc2d605f4785d08b3de23e3d41338b358bef8f6 def517bdd0a96683b6360c99301d01c59eb75337\n95061459ecf272dd57eff08e6064c8c6cb7d45ec 6fb2555903b698a33901b0b1bf0c55162360eb55\nddb955828b92f6affe986ad73a4829717d186473 e5c40fb30c7f7603296a01ec6029f5a4756b0fdb\n12e8cff5b0280fb093b27fc7b1e8e5ebce0f6ecb b866206a6d06636efc5d55add9ca3054f4181a97\n6443ee57ce8e31898d6adcba93eb0edd9ab1eb90 ce2f8bacce5ad871741bac5cdfbfe50a9d6ba425\n1ddd5ad462dba1e2de9d7eb44b8e22ef5a8918e6 8dfb164c4b0a248cc08d6ad301bff586e7c707f4\nf97f17de8367674dd916cd7b01d6c6ad39efd148 c987833e5b0b5b2c4fc95a51a452e530240dc8c8\ne1fea2808dfffb00110a8522be7d97ab3a853408 ee84f70c2591b046e2d8e0c1dc7372dd663f2e48\n7130e68945fc6f8154fe981eee81f67048e4713c 9e16e5161eb8446fbb43889e32e86f831128add0\n66bd6845abc17e5295a318015297b7f30d39ab5f 460c1ba196e24b727ecd635804bfbba172c4fb9b\n4683eb36744972167d74ebd656dc32c8de1b0b9d 02927094387f2c55ad683509d63d2e5fb2ca825a\n72f3a2d1729e7b6b393cb1ee59713fe0c2529091 e2988c966f72716610d824f95055c41fa1337ebe\nd2cf419a9dd7679f31acf5ef9dc10bf52c9058ee 428102141e8a27983147ccac7ff8715c5498bf8d\n3c4bf503adf5f4f381b6e59f2de8af6602da359c e7ecc03bf2e1ce20a34d7103b3970e44f3743b92\n74a6c5eb6a915361b35bbfef612b407253836d6b 527ec63cbb7fe41ff95a1fe01fde5b33ca4d6dee\nf46128ea698f3abfa8cbe323ce8620d955a5c2f8 52930ecf41c31b218496f01677f4cb114b835a43\nd72edb7fe5d4de29dae62546dffe38ca52109d90 cfc4b75400eef00fb618357cfa2ae36e4dee0796\n1fe3e6be65754e222675b9539fa67b19124d5577 d1322d3bbd25c0f80986acc5010e00525cfa0212\nfb384eaec1d93b1e54da34f577c2e316d1bd22b8 5d94894f967763e46e68a88f870f985120b65a86\n881c90b38b4a78bdf7abbb87ad73de6f519f17ca ca53b0c3ad8ea21d5488cc38276050f9efec5bc6\nd870765d367e2110ccf29fea08f92290fe1f2c0f cfb6be6fd9c9d78e1662cb76d91ce4d52bbe4735\n4ffd2bb9e77a2dec1deba542c975150c5769d1c8 8675b0a74dd0935459b2339d956fa9a839996adc\n5ce7c692bcc336107e01560eca5a6a9c57c6b9d6 e48b02f183134f470ad882b79406442d9726e39e\n5a58c7bcbbc9fb025c4b68a3702462a596154561 c1d6f9e46e9147f5831c5ba6b28851df3eb9a664\n34d31202215dda3dbbe73ca4c4b1df59d355305f 90ea1acd8b6e9e6d245405d74f756ff7f7506b94\n93ffa7121398deb19198904b08cf6cab3c9bee62 9edcdb63afdc47ce9066c12c9f630a5508865792\n023344b8dd49b8b76878fdaf355c7728187f0c08 d2da9094ecf59d0bf2763da6b2c39d8b7abef17d\n835889a0357dce28d6b437206baaeb8882f60211 19926fa82caf6dc3508ecd5ec11056bd8c352b79\n81bde56876ca1f257d71bffa44c8b8a3cf996cac bd16511a2a4672bd64b57e2b323a1cb8e11a3308\n906a54c2a36acfa8f17f003a234b9664b7d1abe4 15a3fd230aedaf5ee4288d6d5f90df5558f6433e\ne58e02472dc4e3ef02f605b52f7ccd353c778ef0 93f1570c2613be9957aa95cc686d7e23f90b0172\n3e46703454531eeac8d5cb5563be7bae1e1958b9 4d6d650f35f5473fa8496d595504b5a1b73b7a7b\nc575cd8ec875eeebe2543f64f22fa83dc99c343f 5630e49a85ab4b4c03acc16b05296927b79c0a04\nf1f493ae1aaac2294ee87e428446298066a19300 f1651e1ed7a3e56c9c8e0fac78f4fe6cc4654aac\nc97b0ff156d025eddc8eea3c0c39703c1591908b 64bb43a99d5316a6a8eb85fe5fe6ae44084dc897\n3d4ac7fc3444136f859124e2537fedcd168aa9ed be83581bf2348a5ac451f96367e44828deb3b401\n23148a4bd710e8a13db1769589ab8a420e488e60 93e7b6b3c9ca5307e3a7ba55573b1a4c93744f9b\n236563cd18af9b0ff327af74389cbf8aadc5f3a8 434b43edf03769a11be3f632819e1db76883536e\ne7febb50287677a9624595a29fc578c39f872a65 6cb287907f07b3a56d0eb8b50d42ac610f75224f\n4b1c07284cea97e957c81ee325d9726a3f6e03b9 3893c32829b6fbb4577ea6430afafc395c7b670f\n1775623d32010610820b330172a317c0196ff89d 154952e372c0d09cc30bb91fece58472290d1fb8\n47683f492809108af667329815120c4c2be73e8d ffdbf11260222bc0d5c3968e744abd0282449d97\n2b6146dd39b56d5808a9d4102443b258d67522ea 2448462b9f618a497f03e52eccc02a9f4f1d3c72\n3f2a6e2638eead568b368e96d2d6a7575b3fc868 74a3fe7b876287dec5502f8723c6f1a87880c00f\n8a0388187e72b3eaa70c3055ab62231cc2ae8452 73e42935a30b280ee4a4c6efe31681e2854aebd8\nddac4bd34263a051afea90f5d071d00edfd4f926 ef11a2105459215f58bebc3106440339eb178449\nc22c5a042af253defe59896246452e36cc44ee5f bbc1c6f9888847925ac77379fb0c3f1304a815b0\n99a37db7ff9f2bf52687faf68facd2069a6a8999 018d0628f66134dea26441685bf31bdbec5d80eb\n726ad173d97118769e2c3a3a4dd20fd54e4c2933 be58224d6cba7ee7e33691a24ea39cf09ab17dc4\n786aa58411793d380a66471c77af4c12384611e8 e0311b9b3eb3e674a9a34ee03007dade7516f7bc\n73aa1128feec083d0e07cde76d90c3dacd9bf9f8 de1d6631a07243134a3d8f1fa928a43f1d641ac7\n45b5cf7a47bf467e9da7228e716e972047de977a a92df3cde224ecaf2134ab0a6f4a0643f7ef9fe6\n580b1b04857cfee7cd0ea1e48ba50eafa8037559 8a34c39ed69a2b22dd827389c46e2788223638d4\n718158dc10e6d5e93dbeab040d87bbf57c684d38 a9e4a206e3d09ade60218513c0668b08679d0c37\nd10b8c019ca5dd12f5f083e3e12104b90907f56f 308b06ba180ebed8e8749200695bb62d9eb00e8b\nddd9026c3f0d605ffd53291ceece9ff5bbf8f1f5 c5103bc2f010166e572df2cc2474f10d13e0536e\nf0ad238f25121dbf16ac0cf8c27b807d17e01f12 0cd415e6f2c84bb738d01bb804e6fe18f7a8408b\na452896a001f6b1103d0fc13a85718f70025fc40 c7b43420dc3d8ffab6dce01821a251db10692e77\nc4fcf252749847c7874d717fefd8659f990adf98 806085522db229506d19bac452b81c45dfae3dee\n3f50b060b6aeb70aacb55fc2b747def1e0d15f51 6d78edd4fd78d9d269026b0cd25bbc2d982ea7a6\n8c1066d7028465c9ea635c79909b2233c1589454 5bfd8a672dceb34cb387797fbc6eef51cab1a0b0\nb3646fee666657dbc8ca04166102891475bfbda8 9b8102ac288bfe97bf36f5773a0dde2dd7d2231b\nf5ff697e6ac8651e5af8f954d2d229c5f4cbed9d 2e76015c42c031ae0b432f241c8d28b37dc0d745\n68f1d0f53b991a3f4fb9c511fd7d1d5b94dfc0da c990c28543d1a305af0d849b49e52d6c947c697d\n92269951675269faca11f73c08a460ddf86135d3 383e0ed4d83075956c89c31b744652fa197400da\n804a61f7032f193ca257d0ddf8981f1874d44f5f 22b3cce891dae50b4aeef57e8630e158bcbac092\n6322be504d4ad020f6ede759de7cc9cc7e69e957 6e23774a8ae6eccb870db826723a1d386a4283bd\n3511c6c87e24002fbf3ad8c37da0ee19e310ace2 2bb8cec8e1da40ffb8b1ae30aa656ebfc4d0dc00\nc660772141376e2778ce270071245e458ab09608 a5ae4700d8eba780435cf8f10e159e7f71e6c5a1\n073059bed3e9b3bb2e033eee40f9a156aaa1e053 7c0cb274b726297e48ea104dca45bee5385367b8\n5434350e21aaf7a0d15fc44e86a0806dbcfd7f71 37525404f954216917954056dd3be44e3ea19361\nb0b4bcba0cdaeec13fe2cf04d5af5b5d3f7fd5db 4b79284c579bdb084a8ae62b6c2baa55aec3004e\n97a46a55a5ca3c993d6dd91af53ef0073b975268 4af706d85b5d023194322505d4c7b85ee5da8396\n42429c89f50b7b9bbb06a73c716ed6c027a92514 0e9c03b69cd427e60c1ee00f43bfd70dadec3bfb\n2001e5bd463364665372b422e0c4eb0dae015b56 88a5c5a3bced95a72e6c9013c3b7b7b248da393b\n0a15743ff2a3469894f9d5b5bcc397c7f73a3477 f5cae52fdd44d8d7f7e0a317d79240bf76992c3b\n97a08e7229b0f79f3ee0714249545b96d8408b5d 79d5f52e9f369eefdcada08b039eb90e2fdb4b03\n6d6ab0b69b44f3f11ee6d9be58730b1b7d378af1 973fd811dc17a84b988b3831c29f08724381b323\n6eb0dc177c81716ef997ed9f3b9f60b7f13626bd c4c15a12c27a40a03dc7c5bdb19dc799d630b443\nc91ba8f38f5f23555790abfcca952669b029f7fd 602487cfe075c5607efe6a7187c90d4c7275ee9b\n4cd9a50e25cce04d5fff801a90afa7296abb2cf2 6df2034a5a173ba6b124daab2d006308b7ca1403\n5723977ec2d60d12a38f14481a93c5e8df0f3f7a e0295a9b269ffb11f9477c6c0a668802364cfb88\n5df045dc27f537fa79eb5b2aa4a79a93b68f8e7d 50089a13bb8e00f937e81487d2df9c61c5891802\na67e6e31b3f3eb84487fd6ed4b27f0615da8c7af 6afcdc392e613b573fc5ff48e2fdb9f78b44b97d\na4f49bcc544d2e58fb8f69cb228d7b6de2329b51 8b613b7bcf659096b3e07c8e30875f170ba2f2a3\nc453a1a30feb0c836726a0814719949bdbdbb126 8993faaf77124cdca6df6829e742f95714b9c0aa\n10ccd6e41fc63e73e64f0ed8214aacf991c6baa3 13572ae409618e3e38aef397d6951739a1e99e31\na663afcba2613fd1aee04f5259581bacb4b16977 869a47d1d59887e8de554923531d98f360fb3c54\n9bf57986b170bc5658ea60adf3e7284587b4be80 57b403e911d471764939c98c8ff0980be298f971\n9e408ed63072cc0963761c8214ee9c8174623599 a91a0905d4bd8d551d1e56d1eeb10de48dff3ef3\n17d11b7189760659bf7bb0b2e119724a4e8c6034 82199e53c408dc1cfebf9da380531b648338d9b8\n00d766d19fc7945c8c4f551e55d2faa97862fa84 78afa3db943cc877b050ef4f1d1838dfb6f2d53a\n51d7f8ebc45d151f7ebf4cbcab2add2e99a0187e 08cad57488462b6a996646abe11b8d36790e622e\nbb31831186dd6c0586910b3a8b3d62e4282ed540 459bba6b8bdde8a16ff99ef753641cae1b2d0499\nf60a92c47327774465c2f3b5185e6d1684c0f8c8 5f72facc43c3faddd8d095eef594bafab02fad86\n07807f41a9bee124c56e3d5971943b5da4c4cdeb ce610ad934e919367a940fa88658161105936702\n944ea1186ba36a7d29afa2745c896c112550c477 f827a7a28d0410c3aadaba3c2d73880ccf1464e5\nff45856ffcef79b15c837bcad399ecdebc0daabb 4b4cd3e35df1833659e62c4688b96f29debf6d25\nf024d2bbfd26be98f88356578a3cd13077ecf0ec af075e55a96d65a3db4749f1bf6e49419c3c545a\n557dfb38f39da4cbfaecc706d449fd2d1179e145 9a1221b979e9be3245d57d0f9df57fb624fb25fe\nc7d22a45da3aefcf11b0953faf48f32979cffb46 5f7b9bf8c2d6dbf1932922d3c05e23e7b066dad3\n1ac584ce3a324e5bd41efb726de399d728f8c5a9 686653a19a7c4940455d3f52d9359a616586edb7\n74c091d150495c7f47222597c372f686f8fd934a c2b6590eb5d06ff2e6a2ce72f93b49b4365ab213\nbb1496fe483dd3afb809c1d37db02cb4d4cbdaf0 2e110c4fb0c8547617f95d1d17a20547a9f16966\n71cef7ccadac6d3b340f28104cb1c281a2933c28 3dfea4828c7bbfb454063cd634657844fb933edc\n7561f5032bc673b9cd4d2e8b978e290b9c94160a 6a42e9944de205340fe03ccc12b3cde37c02a6a9\n5e6a4c922b1a600158a96f44276df9f60ed618b4 8779150dff2404b30db0d77872382d38dee365a5\n4919feba9553188de7920af3346770523fc99bdf 3eb1b7ebcbcc84f336a95bcb76f022371b86d622\nf27cb7cc575f68e2ece2a02c5ce9be6d79461a0f 79a47dd63e0598b01dae112ab22bea00ccc88058\n80d48cf025615c324b68d5ea6736edea699c857b 00ca367b074426ab946f5e751ff29b387a586f54\n2430aa4c4f52ee09367198fb8e789e1b1ea6335c 9792e152adeee2a2f70497ce68637db894266db2\n70b209503ce76ebca1359d25e5895f99f039b5e4 c4c61e72904a55fb7d97e120cb2d72c757d295b7\nbb36a8b20ed84d97c562fee267da14042c2b650a 38907c9a627307fe33b01adc545859eee0391b6b\n85df15fca077d97deafb9ce04d42326f97ac8927 88f671cc482b014df3e3b4f5cc29e9ad9ed5a11d\n4b827889f893a8a2791c1d3f35d02ebef5ae46fe 0e7f73d54f2fdc079fb5f75920db385a980b2507\nf952b06781bf7808e86be89c23185a928a02dda3 8ed8060c2683d51b93426add2c893632e7137458\n57d69ebab7e40d04d6e24432b3a3eb2ae7741afa 843fd1d80e2e606fa21e09e283f9a5c90162f72f\n046b1713bdb4c34d05b1faf53d14dfce047791af 136bd64a7642897815383f08aa3a5f0ec9020f2c\n2465843642ea063bf982339dd2eedfa652b47594 bd3373e0e544cb6c87e9bc29eaedf5366d8a3b24\n09fd7a896df616ebfa7ccfe363556fa380627acd f0f3f6cef4e192e2199b55d3859490c476da1f23\n49017219dcd96be6e681a915a00e6fd79e0b86e9 68f03abd69c76ab4cac3f0d210d8c194e5fe5a6e\n4d290ba96e422180c83265c5681a5a91cba30359 1e71bc548190fea41685c86a4585326de82c8cd0\n8f32d94557f5086c262fc7231e91e2ee09382647 9eeeac885e61e09190358f31923a7c2befad4878\n4c7f177b261408b488a0d58f8d2b3e75d575076b 242dc2e7bd6acd1de4b0eb1aa4fcc65d91ead383\nc58c814e27e99ed3846a021fe0116c223b51ee58 6d262f1260acca88bbf61cfbaaafea72f37c5296\n364e83fe6b6eff2dbff90966bbddb6cc02c250d5 ddc94a2955ad3d6eca36019ee9480669a4c89e28\n64c57fc9e9a3d6c065d5e9800220c20053f33cef a43c2c11fe44a4237a895a6e3333b0c06319fb0f\n8d3e0787467b790c8af609c39590690961e07194 1962b33e2b5d29295544f9645d20e71cff3c84a8\nf1daaaddd19513ca450449f05812c62df97733ce 75936856b0af2a1db50593fc2197fa407170df63\n0ff00a6f873ff72fccdc0429d589b4da67b6b367 68480b2e18a9fa8469a9125c053815e01e64205a\n161aa4bbaba827af42b550eecd8fc4221efe63be c5cf7d6033f0def1e1c9d87c7ec3665d1ddd906f\n713cf839716b8e5c1d978b6d8eea6252fde827c3 dadad8852135c3628c4b0d65670f8a297532b9a0\ne7c85ed0a43e5b712299824951d24940eccfe919 84c7ecbf1fea146fe3806d07cbbad957e91a2de1\ndbb70ac4bac55f9319f33dfbe73c540f8e0a74a6 42dbfeaa78c93f978978e67c5313647fff6ce030\n322909708e8dc855c9172091a7950095781bce03 3554c8e49e46b249cbcb22cbc7c1e3aa8e70e284\n55295d1c4e411225408ac4df1593fe7ae7eed72f d7bea6d8593c8778b3fca95b60a0feb43cc3d6d9\n976ae5e096b03eac1aaaa4b7e0ac22916d4727c4 2a046a933774653f83b9b730ec6842db8fbf1aaf\ne614bf7a7d4039b80b5064a50976f2ac958942a9 e54717dc5220f4e0d8e12b52a92b07f3ecb7f9f6\ndbd9fd916ffbb052bbbd06fd680e95a2684d6c76 2d6d1c81349180d013a4709109200fd476ec6ba9\nb7577f7d050bf6b37132ad7c38e192897616cac6 70f419867e7008acb894df1c9ee5c1cd25ac7581\n4e401bb24f79b29dede29ab1b7dcf3fac2d5d3ba 447f9f6ffbd0b7b7d8693c6d456463d054fe1628\nf411c454e54828a444003d7c1999d809189966a2 e5b43fc70b9cd15dc7900245d98b283c47a2e964\nc0dae42d35d812d8957bd226e382619d6c98d04e 4cbf9fea42a2ed3cb3697ba5aa0c93122e134344\n2f8dabc2cb06c97bfd654325ff113cad952d78bc d1647d02212c96f4a4f61f4ebff262d2e57753f8\nf42724973767d12b35f3f60cc0da878db0d9bb8d fe4e96e2699971a48f7c32f2e27e08be339320dc\n748c264d0ea863222ffde465fd93ade82d71fb67 488b511124205247da699c0ffc43212d61c7a190\n675c9fecb3842318b871ac386c28aabaa614ba6a 296f727f8b9787dcb40f999a72d45093f077f6c4\n3e734499fc34328ddb656013337984192b6adb86 bec8bc419f1c2ac42e759e72c730d1a1ea7f01a6\nae26a8ce71993e612306f0e54f465cd1eff623dd 21b6d1f510d2e65cbeecadb73887ccf25fb88e7d\nbd533d96bcde34e69df83a1ec66bd450c5aaa71b 71f8ee9c43248977ebbc409fa41601b17c842cca\n2f3c81ff0bda54ca3a034d6118ec8d404755e1b7 bb21ab47c04eb21c2f65f7810d79dee88765b44e\n8f1734e543c40030356657e581105bb1f72d2160 038353060d2fccea0cf84c17bc65d92a7fa25ec8\na34376bc02b707f7f664a783e5bff48dc152279d 308d2d22b0e78bb36d914a8b754fe82a70ac713c\n69e484facc0a56cee63725589e335907eeb25eb9 e7aab8fd61c0ca2c0fcc3499e856609b0737ccc0\n1cd445b11ab5f9af1834fbbd6026470b2aa721dc 20436730f7878a2ca98db79e48167496ccb55ac2\n9151768c05ff9a20ea0cff3466dae2594a02e04d 0204f3f96620ed89958d8f7e7f1fd32ba604bffa\n52727e1379c2cce79309696c245cfaa543466af7 1e011f21af067e684658ba257629a96ec346a9cb\n30cf6b7ef8b63cc216856c3940ae919a05e31b9d 9b827546ead20e225719f71a53fec7d8dbad24e3\nc33c8ed62bf319579dcf02354c3b4b95dffbad8c 15f506e7c51aa7ec050822c3604aa5f314eecd76\n78128e09a7ca129ab12e0cc435e5fbbfa88fe1aa a29ebf6136b460255c8837b521142a78d7898acd\n8fda8db649cc51b28761514a5faacc0af2047be9 2999ec1e332c8fdc0045580fc0872d54ef866c53\n881ef39bacd194720c3dcdc642daa5d320682568 dfd7bc6ef77cc29e0e803091429e7a3efdc20d16\n023966269795ae584558e268d166d221d937b34e ed239cfb18e4443a6d0dffa3b18cd559ab2be948\n3c6cf21aed1e36b17cade607a1f86e4fec9911b3 78ded12b81b47a8337a891f1907fcf8545c62351\ncdfbfc217dd1857af81860fa2d5e190243fc0901 4c24b08ff0b6e8d93b69161e9ec837ec99fd74a6\n0dd77760453e8bba153338c425713bbf759cadd0 bd864857051d3a46db77e2164189dc6ef40f2af0\n81f8d06fb653a570b9040a753dc95550b90b7599 c136259de4e68d137d05d49031e49c33eaaad80c\n4434bb6ec489935a85607c8e88770a5e38a36c59 2777597a996c4a19c178cf72f8a0a93151228ea6\n41f6a0719bba756bda228be05d085d757a2b39b7 dc04867b03ede67dde4ca3ef3e3d732b7461ecdf\n8f7cc200730babbcb8051506d6f4348931b03d8f c3e363d74c88379317d4aae438b6fc88bc568d38\n837f4feb836e14e4a4853fd919a088a9c104c3a5 457842d148e1224fec2c25495d54237480ffa36a\n040c4c91149268a4625efe351d44c1bae60bd61d ea0d2c1d44735e8396586bb90ba7f9d2ae1d6a21\n953d6d16eacdfbfc1ec001ee254d1adcc7733ef4 6b7e0cabfa216531d863ee0c96e6bfbc0ccca638\nab0c33b91d39c9dd9ff94326ce3f09d869252376 daa8b4cbe133332cd878c0934a2b1efaf5b13fb3\n7b5854f4c0393725286171ba349a65d4d96e289a 17f95f9c3817b7bbb73bf89ae93ca187f66c05fb\n005be59b10890ca3ce7a05956e206afb00ed7fef 49f0e5d3aaa9e16a5cef29601d2172dad91b807a\n52dfaf685566e3bb6bf3fc54f160d34c4d6eee0d a33d0e3ab32c85ef4bf81573342c33fa6376fa8f\n10473e9cc610d35a99333be53414539aab0575d2 a12204fab542283d31211ece0433d941daf74c87\n6f144f599e0b4bcccc664d2bb62b67e8cbe0a17a 575a932af931f4d54564f13c2a818885e3cb4e37\n061b39291b5254ce950eb8c7b3f48e14f77d93a6 7900614a69b23f568aba0129f1f6d97eaf7c8581\naf4ff9a9da5b10b4dd5a18767fe15357a1587ef6 98a948bdb006462b4e878fc35b8bc0578a9309c6\ne53741d599fa3794934e78b0d1e92c0211aaa15a 3ea2672b4d3a6c5b1fff7a01dd75d6ef0a32044e\ne5a76833ebca059d978697a96dc35f79496991fa 1baa56696254fb4f988c45818c819ce101d1b3eb\nb9f7087fb05a30979ba48db86f0b37469515ea4d ff957a01049aac08c60e70342f5935c43c65f2f0\n3b97b92093eea2ae54b6975b57f7f833a8001ad1 9dd747f4b5db2b72dc61f362fcc4f1d20604d200\n4cad5e488341cf32000e88f50fa8aeff40ae6cc3 84ac9b3b79c378747633b106e73718b8cf66c89f\nf6847613b4eba3cc7e02c32d18fd7eb7fe36c668 fc60919332b517c96ec93a7150a52f7e802ec9ec\n27f38cb4ad40e8c29fe2d8032b3f3d073e028d4d 73e5310cff52aafc4a21c49ba35006b937c42f65\n7e666e3f4eee170a6d3aeadc9ee0390dd9dc17ea 225c35ca6e2e31867345335a9d3768717ea94d40\n542d9a5493d7369b317b23912c796208db142b72 39fa62e7af4d5fd41d3542cd3e3430a88fb37ff8\n250031d727bdd4058dc79d1a18d8d02ce2424f8d af73cb8179f9d931ddf426cd1165f92e231886e9\n8b8817222945d2a9286e79940795b5fd6f911ca3 051256d6df3f5aedc6ea11d8dab44127e43a4b13\n23f3c4b1a04e0c6cfe9645750001d5c5269c734e 1689808baf191004a97bfdaec72437ebbceefd6f\n3b51bc46eee54cd0804650cbf5905563b5472254 8aa10d84ecdff3b8b9ff4c6ed603f923b263e805\nf97a9fa75d2afb79506e030fd067e1cc63c6d131 73e6cb1e5be73a33271531f541d786cb128df383\n0c65211a8f1ae83b874acaabbe673e3d4dfaf3d4 39a6f8cf9aa92ec0dc468522d8d73f446a4584cd\n3c68ce34627b7dfde87942bedd4ab6265f5958e8 013c0b1d7d0c83348c2a8525ab9933a07a350518\nae0acd8a8c90f8ab6951477512da0dc357bc60c0 2654db59fec38d5a749869ed0cdf581758f39226\n4bcf239be31ed55fb353297f32b587b82e31512c b66e0dd82be5f8ba44481e065750ed668444d499\n7de2406a00e9894c20337a67060181e03b5edc9e 1497d889bc9d905d804ee91848d6023bc0c960a4\n88fc2cf30cbda34c1969ae42aa6588f7cc1ebfd1 da04185558c543c9aafc24b37b83271893c9797f\na122f2c1144861970851326fc21271ea48af3161 113253c826ae847dac1484ea399be86e3eab550f\nc156cbc9ee2972408c1b0a8aecbd63de6f270cee 04da0bacc4626bd5bc53d01a77b17b748fd20d94\nc9af062a8ecb4391f3ee4b4bd003dd6717b0cd4f 3d2522e78f440b2b9945495bac0c955e952090a3\ne62627b1bde39199c268a55ce37625793fc6f332 1ab93482916eee9f33d5c3290a9766df56f4e309\nb78fcefdc0b52d633e289e99074e5bd67366edad 13dd5d8c0a88239c7f3c61ab7934241ba47fb706\ne9251fe53803aa9b080934963d8c348a0d280e39 8ed3eed764086b2a86e5f2300bc71e07bb130723\n1a5d696a20246f930bf53697ac86a7a9582a3140 f0239f505648ad43d50851dffbce7f3fbb951957\ncae00cba525060291e1a68da492d94aa1ef7603b eb1f0bd7a5c86e6f2724ea2364b7a2739f7eb0de\n8bc67d80d3b3213489fc50ffd88fa3ceabb9067b a7896ee887126cdd6756495e72fc588efc2d3ebd\n42d4889b92766bbe655ceb99266b42c4fad0d6fb 89abba5a3a5756317d743e1f043a8a8a0489e760\n5fe505b93c87efbcc1ec17d2877512bfbff966b3 10804cb2734f92b62032fdf0c382a228f2e94026\nbe7c837dae69d7483ffe68df476fba40e4b3ea5a e83371d29f13174148ca0bcd199413bb06973866\nf3b92300fa92ee3bae53cc951cd690af3128171e dde4cb20d3745351d530e1ac1a45d7b1343a63de\n3e332bda86dacbf7ad3a0bbc4ff174a5bf305aa4 2771fd76e594c980dea543539a49feb3afdf4103\nd940a7e193a6fb730d103d22a4418dfbc325c5bd 3755101268ff1e61042450a334e7106573dfcf25\n87c51d45c2b7848865d03c90d7020b2cf919ca2e 6b2c3452ad715bd070d31d4b5e865a5bea58eb10\nbf83df3e78ba799b4df5983502fb5e7aa7739113 888656ad6ca887187075a47b67db248194d90822\n23bceead54d7826983e9cf452ae874bf0e7af18f ef738c27f04e1911358161d801aced0c44fd0a48\n89d21dccae5d7b0b42eea918d02a20eab3731621 f9f4dec0e103ca56d9286caa162b8a0bba74119e\nc10ed83ce648caa91f260508bf72c1be0ecf489a d1f2d70f1db7f916a46f8acaefffe2b1958f3bde\na890533e1d0370bbb2775bd1d143fcac0ef21f22 e4c94c24a042907961da484da4171a0f0c12e83f\n8a6bec617e2280bd221029405b9e858ba0de27c3 e30039959f5a453afe8957bc05d7c136710c2c7a\nc6eb9001fa3c607ebfd259e1a5117d3d16caa01a 4587f7939a242946ec020423ca183c24cfdbd0ae\n6bd9840f34f874284712d15ae296a700d2568c7b cd15123793336631a8223503a5df399355412dfe\n5b874614770d6083e2ebeb5f2099d0e2ffb28b7c c42f7a8034ce6e3fc08404c2e21ff91e51eae696\n517fa64b2ab97e9e901baf8d18830a0e4331e1b1 35b1d62ea58c5a25356b00b52b267b8f8bc2aff0\ncefe667365aef94b215089077929b54b3318452d 1e30ab98442c281fab343bc95a9818fe796d2b75\nc9a4613977004bf1d6a0757897a61236f9ccc2db 7a1a692d7f48a0d253e1f73e32bba7fce5e8f7a7\nbcb298ffa49369ec3ef52570839bba11ade48e81 0588fbaae4355c34e7d56727dc0b2262993b21b1\n118c4e9e9c0ec20d0f2dfd7b7f95a938d679839a e2994eae99820cec46972bd642dc1e3df60a96ac\n0b653e37b92e0de17b321db00f238a651c9e0fa3 fffa6231fabe70a85325e6da72876ddcb8ea73c0\ndbcf38eb0975ab98b94598de5eb975bf6698b312 e0a0595a8b149d95824ac20d9d5a19cc7d8fdda6\n2fcccd43d78facdaaf125aa04717f1a0eafa612f 4214249b4948b7ecff7b51768945a264fd3e753d\nfa53b76f7896fe9dd902e833af1c2f09c7c148ec 14a8bdc29639b6240c779b3d12c5e526896143cd\nae9569c7d1955efe1b3c225f484a91d18d24dbed c58bdab3d038b5abb26711e78fef500b53b1f587\n082b3ef14045fee71102336b333687b47ac7f452 0764042452f475bcfb5ec4a0af2ec07dd2739228\nfb1f8b8fabf5972d46d13996ae160287f79e98a9 4b8c8c1430d56596bc0d340b88ce4a2a93b468e2\n8394e9cb7ba42e968b7129cd8707c868a51d7c5a c4c6a96a1b0e75dcbb7093e95b0fc478156f0f6e\n0ce252dce59e494f4c993cb0dfbb8fc4f4d827e1 9f4e41e3c0a197203c9aa9a67e05e6390aaf3935\na448e7826bbb91f78c57aed33a1a516d2d2ae883 1ca55121fb19c5e24d9df30d8bfba168fd3511cd\n25b8ee0144cdc0a766575caff0a79ad580a3866f db0981239515a92cc781b2ba5cd92ed6d6778b6d\naa747ebacadd1a56824177474747d7260bfcb81b bbaa0aae0dce8d0ed73ae072e373c6ddfac084ec\n2498ee57a5fb4ae5389484f46a8e9d76ce40f117 527b52c5efa4d31e2a41f98bbe5c7462736e3605\n3d252f10898ced80aa6a00a8c988348b44c48683 56b15f181235fe324183175d477e5febc4ded24e\n1fddb9bfe6cdcc50a688c67ef4c13bf61abbe4af 0fe4f5b8df1a93ca1a5174d4b72d7fb14b979823\n73d7a7206ace9a06944da95c77f2de8dac3f86a0 6aaed80398d3baa019217e852a8b2580ee315a46\n92a8f7bc03e8859509a151f0c1f13efcbc17aabc 2658dc011518ad7b02fafcce18a9ee8fbf3e0b1d\n662c1eb8308291f21554ee498fc08ffa3519e6d0 b992fd19c28166764f2b6fa770611725b43bc585\nb2bc0f130cad5f8709fcbcceea8a894878e0979c a3089681f1c371d83e397ab71a7cf3d9d6c16f66\na37127fd790053389383ba01456468f5093875c7 dac0fd42c6ef1b56f5f583b9d193537b27abd5da\ne3ace3cbd41a30a14618d8b698b1d26de3a0a77b 8b19b3489bebebfd7d8d21b6672f0f535bded812\n363ff3b387980b4f1726417a8e12eeb3e79f39c5 c355d6141189e5ba2dec20a0b11497642f9af863\n52edbd03df16f1b28f30775bf7bdb7355f1865a1 80b23389d2feff26bfae16e0f98b8d811a5475e8\naf088ceee5c9fe822255fbb085cbe9af8c11d8cd 0725f946ec975abb4338b24e35e7f648d3c9a545\na16f3c9156b0eb5926dfcca8bf57bcfe6c260bcd a1e9a4f956ecbe038e86adf8095b23b1626bb6c9\n943b9a337c81f64db00d8e4331919b014885540c 80610a517c11ee4276bab51640c450b15f7e2361\ndc4d6cc5818aa1ca49a91af8a9940cb5f021bedb da5275398e00dcb1d2bae05794c055cf748a9e7e\nb73d00a0c4bc0ba7d6368dcaff3d053379b31e39 53188a6f4b724b4f6c97a7e9d99fe3f1712c2e31\n73f9e17d5c45e2c56a5139230afef2ebde91dab6 f607b67947260b4f54675f802963ee6a4e43743b\n9c7b67333dafa9fa49045a3aecbfd303f03c028b 3d747c78f22801752438d00403b4e3c9822ac6c2\n809f53d7889683c285f91aa542789e772d67b4f7 e7c87ecb959571c234b905d2cc0683be1b10177b\n2ada31da6bea0d6d418ca2c52bd9e7ee9b122701 5a162964047a0edb3b1ec9346af2dd81fbf872ab\na5e4467f326f06439d55e864a521873270663e3b 42f4ebd567503a5a3895819795f1e6d9712aa518\n4f654316d9681f970c51e8b3e3bab83844dce872 88e0ad8bd2ba624cd555d5fba958c30a9cf8b175\n0b1a1693c700d734a78fa28b44593fb0c881bcb7 45163bf12eb19dec2dbbe4accfa244f24a8fa501\ne847cd3b0f80adf43ff0a66aa6ecd8cc503b3735 86ea278b38db60e0efca03b4e75278d687644ce8\n36c3752a45e770f045b07b37c20281f9536cd1eb 50146c8296ee64e2c4747b80eeb6326f07369b1e\n7c01417d7b322392083eeec98f6add5a69f338b5 5d09c2f30e599f2256a3ffdaec1755ed857db8ed\n6d40f758c0a8710710ec38da17bcfa52f37ee0eb 4d04de40b9d6184ce89e3c2672e1c3dcebd70a84\nc358b2a00db3372427573e120e190a3d8ff398d6 95b67a073f00cc3ec9008885dd3de534c019cc0e\n6f8ad755079c38442c44e47499db1c8f819a6be7 738be4613db588aae41e6809bf7b2d6cc9ac10bd\nd88b112f19a2c3ddecb73ac037edb20594d2f804 75e3790b61ef12f75d2e1a1d1408c885f9ca998f\n84a99689bdb7ffedf7ba7f86cd7e9ae1990da29a ec7d6b635b09e5e324f5560f24c1ae4074ba2950\nb0fd592b545577745a22c2d416614fb50121bb80 50b713dfcb04f8d53205376fa4e6c042816c3bd3\n5cea26baf33a60fe6fb58e61a0353cf82759d0b1 229b21a1765a5175e6e54cb9585b2a10bd96ead0\naab22c731691dc45c01265cd67b7a1e46081a28c 47ee8923463dacf3b0a08bd254e95bc96c645df9\n15f6b566135ee6afd6b85bc62977c4cf5962bbe9 99e6fe03ef0b9ae91d8d6418126618078567592e\ned6221e9399dd9cfea44a89060cf1ddfe96e90dc 83aa3ce64a18dcc3fbb693c616351eb95f725771\n4194f01c817b839abb4c421377ab6df150e1dc73 a848cde1e38a0d51871de1483fbc9302d20d2920\na1e1330330c366645f10f3d410ef072d1cd9bc78 1e4cbb903cf8a082ce131f84e1566981fa64da01\nfa4358c1a526a8854f6ec5a496dbb9c147fc4b94 ac46291c26dd72628f9a0d5ed624d698cb4c04b8\n8566c7aed38162545439b907a4bd1917de86c1c1 a6ab95e63cf059a717155c1182262d1c4aedb83d\n8835cc6c7a3f9574af0a81d8f8788abfb4f0f69e 1ecc28fe3a2bbd866e1e22d67102c86b1f863699\n5bbe6d0ff361476fd2ac8a036d6036b29b5caa84 38f964ac621e753ac0a005c4a284c460e618d7d2\nbc18efa5d65dad0b7cb53c1b04a967291323c814 b5a2e68eb6c30fe4d4db8f251ce6a87120035e99\n1a002d221ebfa0a874ea32997b00f3451300b5e8 a27d6ca1ce39f3b3b5a01cfdb67e6853be6f3723\n07a98c62418189bad5d9873eff735c502eae2d33 a66791a505e229a783c3cd27b03778f332e4eae4\nfc62182ec9ebb6d300c12bd2011c8d4bcc944777 bd88ca2d226fae2f391025f94eed560744187d92\n76797b0d15e9e5b9ff8d3b56398ff4097b5ac856 752f1b3dc0fbefb67819d7fb40b791d5b6f1c1ab\n1973355fa36e44ba4f83e7123e90dcd8fcfb66b1 a65169b0876a587e1417d1f037d74ba183551d17\nfb15d305a13bff44d02a5cffd771b6f2c625ca2d 0488026333611b7fe36b1d572089ce1a26a131c2\nc692406a747395b13d3655e709b0871e8af00dca 4d35ff7d82e813bd1c7ce6bbdf5c1a3962f86843\n8dfda76eb8d7a656bdea54e8409f74a7e21311e5 914eeb6163afc0ad559daa1d9161455d4c852018\n827bf6e47cebcb0a52d28015583de89f66fab35a 0628481673cf339982b98e8887ed61130f86584b\nefc3398e3436b6d4816970d9a79d91f7f1379290 6230b8ec39640e1f4a58db13658dd77c622848b6\n2b9e000159c107f9734c29ebb846a81ccd377d19 3c51b03fb5d87d7029114b2ff6483957371126c4\nb4fcfc63cdcc2092107a22bd2428b323168fea4d 600b330f6824e4decd70922a8015a160d797d213\n7bca3591c1f982047bb368c2edaea2b433da745c 94e5a97efd2d60ff9ff40a5b67972552d18da2c2\naa8f593f5eaf586b1890734c12a57139248e3148 70ce6d68ad076154b99fbb68e5c38d5a0fb48362\n035a3638776faf98e7f5f1938f6c6043729ee7b7 909e5945bb4dabb64dc4d2dd3796a6f6f6a1b62b\n3d666a02b9b543cc1957a76d4119708c7ecd07ad 624a92b5a356c693eb1e6a4a0520dc56c04d9b2e\n796c406d5f296aefbde75997d3e83cc149150a40 f85c18f0d2e5bf92b76320a4aa4f93c425cfcbee\n06a0d260b14de2d8acabd4f8bb511ef979ba24dd 77665c72dfb930bbd411af6354ca8d669a2d5049\n5959628760840cc9a9efd79afd9fc6d325cdb91e 4b0d1c0426f9e2db9ff67488e35e9cb3b3374f31\n672f6bd06ce1f86b388b3e65a62590be9712c51b 3d6763e185ed158edf3bb6bb1cd46a6b99b78c73\n43634f81a9cbf429a6a58cd3dee5f7595809b295 3acf269e8627ff870002077dc249633bfb74a17f\n66d38b21b376ee7f801db2e6e95c151b6e0cbb05 7a11a184b580eb85c54fa098538bfbf5ef7f2ccc\n44cde22a5e75f8176431b5e5ae656b73851b601f 60da0043e0a4eac1225bbdd68e22afd6be2c3051\n1af948944455155efa0cff77a89a75b934f36652 b7ecad978aac81ebfe61a4448873fae4538d737e\nf65948c0d020127eedab9daa6c2b8c7b5cdeb35c 50d329bbabb17d678728cb3a4b4211ba3d754dae\nf1ec7c53d4de5879292d9823e562f9464e9c5fb8 40b8ddc98108065d52b152f6b0b94993419fee78\n3feb53f25fa9745da945ddee9af16a71ebb251e8 be15bceebc5b5cdf17e895e79da7a217238f87a9\n4526d38a3e80df427c4bd7e17f4a46cc0c0772ba 8960a110e53e0bc982fa2501d722eba57456b93f\n51ac4adf00f5197078bb7665654a4a202f2b7004 fdf68754f9068b166479c8e7fb32575395a0c1ba\ne317428753530390d64c8251b9d2a236aa346d3c afdab7775fb1f0d6772ed2dc100c6aeafb675549\n038e1086fd6e70acd1586aaf16ac4f2bc3df9104 ab08195d3ef9c2f716273898701e82d52cf20069\n3e91c9148030c3b016ce585d95fbe18fd3867140 f669c954f0ad0c449d0fd2304ad9bed70b074dc7\n24fdff0cd827ec15b1b4992c9daa64a7b5e72250 edbbda92ddba7275b41eddd5328eb3d6a787a0ff\nf8345be5ac53fd1c1f772f9011ba3e12e1055938 4a064a37ec753ee09b84fe24ee1e531c95af15d2\nac82e5c7d9774a265841229924b1e90165be5987 0a9025b2d1f4b3ca917f851b9a232d8f50ea956c\n87cfbb445749bca872a582ec1544fdd80b7e1f53 3c751b19df7be9506cdd5b9cd5696d26dca4f45b\nf089899e599e4c249f57ee9ef4a3ced316f4df05 26ce74fbbdeb331e13d28028bdb7ed6909a963c2\n05f7a9b0e9c58aa5a321990b0ae49519f1b1bfc1 ddd39113a0bb4cd5fb4c33a47c6970697ae40d65\n1304b72b21f14a137ccea291f9cdfaed0ecb0fd2 90eedc69605372c178ee02b6050c55b9ec6d906e\ne502cd0c5fc3ae4de580b726a7927930d58466f2 f2d521cec6300c0cbe46c36aef722fa4b5970c4b\n0748f5cf6a7a8ac763b27e2790135407ccdc3cad 416282db3d0b134a1ab2199c440aabe056813096\nde319e10f4a0260a190fe5c13fb9c37b5a4b5681 a49892a0ed492b89cc7bd71621f2cced6969b7d8\nbb7bddfba84cb76aada20c06dc49f7f1867076d6 3da4d72c402df387ad444859f18376b16edf6cb9\n3eed3672f02c6a54f2934b7018414d7720aba1c8 aaebddbeed603cf146b7483ab854a743688b5846\n4d1249a2f02ba96ed936e2fc25534688186eddcf 94a22e093f4c6c468ad4101e77fd42e18e366d78\n5e880e5bf12d3c38ad7d8b4f7dd8a226d82e770f b2f71b9cdd2be42dab0bd595e192faa50fbf033c\n769b4b666b69527eb29e25dce98e9489c3f1a362 587d8e2fe8f6eab970d3dc05f87f51cbde33d61f\n38f50798062a7fed47f2d403f555022662ae029f a2714fe203edc440e63df93900f975789a4ef6d7\n2f2552c704c4fe16776ebb9e9409c398fd252f61 8da20db8ba7f229096a4267ea9a515d850191624\n9e0731b697a59f2d500ff2d9abb877938421c1e8 0e39e7a0d236011fb8429e6069999dc59ac7b54b\n6911d0742819606c0df606aacb56a9f66c42339b 185971d595c9b95aad2ba6c52afdf2a218e2406e\nd94967a8217c1d871d08f745ff1cc5b33430672d ed9288d326f028278b490aaf3268478a16b923b1\n102a9a2d00d860bc3628fdd565c9090b994a13de 5926293bc0f44f3b2cb5cf820d8b329dd9ecea37\n03889cf339db8a7e10eb4c31a1a75e86776ef873 5962b0a6b29c0ae24b5bb9124b84a778a044a2e2\n4ebb3c6ef45b920ad05c4281b234573a5f72addf 42f12e4e0cff6119fec11887a95b6bb3793f701b\n09603997331b52428d0142f44309395013d3e588 6c8bf17c4459fd79a00da559ce840cbd1edb3934\ne5cbf2a556564b27bf9d0bb8776f782cfbaf1540 5aa847fd3cc2d6c913b0c654402bcc642843ce6d\n43b22d1cb029e108765d55cf5a068e2c20845c22 3739b5860945f81d75c4fec1b95f2740f49eceee\n418a4e5be99bffb54bc1a94e97044e8efaee934a 195c26f1c982fb0741041de31a1d5c89913ffe28\n77dbaf1b6a0b83a60c3435bd2a88177baf527c4b 44b1057d0c37c965d3c7f89e9664fdb4cc344472\nde6a411f229520af7995bbf2e5acb501689ceae5 8842f53d6172216d0af4084d9ebb57458a2aff94\n0a7f0a82a901b1a576b891a6dad32d39158934b8 c5fd5ec7ca38255975c853d8ffe469e0b5be127c\n4a8aee1a4e5dcc95aca5300a7548c97e944f0a3c a961e0b1fb2b5c5b11b7156b9c587ac909f0a0ce\n0081d56f5db02c56c6dd223ade224d6f00a5788a db084fca4926ab36f8ce43de24ccd4809c43d4cc\nb8c4a0704e0c8c6154171fba2c92f6492933d3b8 81c25921f4b9e1b486700cf231d1a9fa62f68d27\n577ee3880be10c53be514ba5aba3d8611e4515b7 add4d5efb70edd8cb79f7eb484b9dfe6612a671a\n09d9bb10b63cd555edf52d781fa334ba3bc1a7e8 a7f0727dad473d7c9d1170adaff45cdfc552c148\n7ef77d474b8f743459cbe0c6b4e57afcd9a5b7e9 b57d20e84e0523718f79986f33d2a7f1021e2b44\nd4db5fe14ed68514675eba7048297ca22419d521 e08125497e517c222919ee771a284522fca5e6a0\n0b7e26e1aa85b63fad20f1ff80807444a736d0c7 943d17ffb8aadca0b68b3d0b21490802c576e314\n0e9aa57e0ebcd9019b4518e057a3f014fe1938fe 82ea564deab6297f5d9c8ff269505231d6b170f3\n6efceb378563b85bfe49db8708c3e7c7569f4106 46cf35e6c522a452d168a1a2405050ef8b6293cf\n6fa28813c5ed97b87129887d18ed4c1f80d6b488 3fb8399d0029782a7352bd20918b04857f0e7a9c\n8834079b1eaf6fbe4fa6f649e2ef1dd7e5d3ce9d 97bd139a88c96fee5389a4c3023e89d4e0c29ee1\n3183b0335b20cf9ff0daaef1544eb8fe04abb49b 815edf63a31bcd35ed9f240ae1b9262c4277afb5\n9d1d11261a411e32fb684f9f1350668d7dddced0 c649832ee36f0290feefeeb2cfb99f014ad1809f\nca11af4aa197b846154f099a09a1c274cf90eff6 f84ca396d348108058b6d6c0820ad559a967feaf\n1fef51265b5856e0cc2fd9780c33176b47e955ae 39de498f6337fc4ef27e8c08cd51b8695f1a8a77\nc05bc4538b0cae1c18f6ee17aa4bcb0511df82f1 bffd2e83817210f54388f758835ad1180030e4d9\n6caf8706e583f0e12ace498711e8e2e69a109b63 bec3f7b28df5e0da5c9c83cad98a1ba528c35c51\nda04ed105f552c5bb280be83e31faec3969e03c4 a89557521dfc1656bbf402c1ce1701a2870bf864\ne951001d71f4edc8165fb0370fbc667f19593727 124fac58d66a168ce23cea7948b09cd015a2071e\n5fc18e3dda12a6533cd1bb63e673a4ef860d3fb5 5261251b3660e34c33beeea2bea1b687b7f22a24\n46bf3d9f19508640eb8580b8bde9cffd3da8667d 82a2c9e02fc6d4811c5875127b8fe43c039ab2b1\n52deeef3bfab31a9db64ab4a66ed3b17620427e7 dfabcfa3ac417cb3a9235aabce0dc5b1977c0620\n51fd69eb56bc47341d23fbac094f7e07bf955117 8e6240819231b25cf19b4aaf7bc020b23fbc3b21\nacf8ab21fe1f9fdee851ca0fb3023d6c2563519f e84f443d0762094b21aa1e8c936fee3bb51d700b\n0f05c9762b70ba75c150786d17e9e4bd0b655f56 0e19bb3df4a121a1e7abc4ba328098d225b53579\nc9bdd75016253fc3a97b89c844f6b2c68c299ac8 3013fec3bc1e8475e5a08e7664ba5d7e63d32717\nd59f20a1f61ea0d84db1d714c841030044e8e41f 2c453ee24a35d7e9dbb9762d21f589d597734d78\ncfc9419ce3e3b97c80c07c4ce6e15644ebf12187 c25ad4f18717f11c8538c86816404911e1301a73\nd19842a03d3ff61236b10fe7b78964087b603611 2f0805c5e250bd5ab868fe8b14611e38e6d697bd\nd3597402096f629201fc4526ecbe3c9c395200e6 7a2ec2ab23286616bc89c29173677a2416d6303d\nc1909fc3b021b080dda651e16aa75b049ba89fec 8f142159d36d432a63212032c0060cd37ce1adfd\n54a2f4cbb49e39d7b48b753c2b87cd571eff8df4 de0caff2b4880141b656707c6817a8573b309a1e\n0720fdb8eb73dc3ccf67390af2853e98c1f9cf9b 79b8acd6812f1ef99a73dd865676576cd7035c8c\n702a757c1ef3c4e2c6058a777ec5db05af3a290c 93d0668697613bd7ac0cca26dafde708d8bff63e\n2a28e3277f7743c802edefa56958cc8358f88fbc 3527d4fa8d27c072601639815689e81dbe853af7\neb571fcc24c842474ca8b60dcf96671ff90359a6 13b9a5ef324e67289b6fa9b5e574ea10efd15d3f\nb1aaf0a95e37250a42499b23f2b56efdd2fefa85 f926fee22de70eb63d302fcb32f6f652b2ff26b8\n90b4d4db939941b8fae8c9ea258257064326b633 2cdb75fd7ec0925df17e3d32464b562891f71f0f\nf6e7313da237331a4aa388070e33251f7b3ae195 04c1665d17f5c14b0d43af7e55f0e36a399f5227\n5efdf704de37fa5a8c7a4fc71e2a153da09cbbd9 2e07dfc2bda76b2625d874c12dece38c15d73cd9\n65881a238c721224e61de5f45e7f7eb0e3e9176f afab43e050e454bd477532e358fcb637fa9e53ee\n0ad449b5c8cb3b436dff546e61fb58b369c36021 c5bf461db75d199c6b231c6d1d66740151d3d129\nb53e37c6ccc6d56e5d77caf99fef1b8ac16b6d35 bc9b80b963e1e164369d3f63a23e65c13ea1ff91\n7c1a9f8e232b4801aa01f15846177feb87853567 926dad1444fc0734bcf9e19620f85484caeb0c5b\nba73256d4010a02421cbe6546d1d95c57001c7aa 5b2e479bfa979d2dce23109f2ba58458ab3ab127\n5657631bf0d989f6bd0f408818a9c8ec95e80d6a fd8bbdc6d1f9f4c21efed2b5d303ab90ac4046bb\nd9e5ee41e285174510c2dbb44f5d89a7b5247c7a 311795c01a655094942d8daac4799630955dc255\nb50cd04581a1057eedeb2e402eda093b307f0583 e1cf25e75b6bee45db1a0c9e099d0f5dc6ca7fe8\nfcecb6423f22de62d1a6eea4378f073da6368549 97beb02ab47df27ac8432e0a04bcb8d5578452a0\nb1e22aa87f4291316cb2ec0b666d9a1eb15c7c6d d0b4def2adb93803d99e3e5ee42c77d598178faf\n9eef6fcec17d0132bff1b4efddea0837068d1f76 86de9f76c9871dbad3a90285b22e03745c4fe5e1\na26c28008e4e1787eb96c030992ab7e89cc56001 c294817c8ec7787207e57ffaf3fe331619ee55ef\na0f80088b0af11046476ca9cf8bac6a2fad42854 78688c2dfe5e4789cf2ce083e1aa1c3bf3ee6975\n1b9db1df2195e5edecf4cc60a617de91e10a28f8 dd356bfcff9295dd592a99cdc68fadf5d66f5d24\n1322db53c697222b20a034bc079df9a4309207fd 8dcd1ce510b58ba9599a240ef1e0f5a4a76b49c6\ndc9f51a9eecbec332dd24f8db7e3025440658a43 a1c24cc1e1bf6e8f2eff3408b3a4af81f0cd6056\nc9264f82e9d1a811da8087b907efa7df355a1a38 0f41e607286967cced4d6761ebe6bf1c88c6e71a\n8acc5107fff959f70c423ac6f12ed35db2ea05d3 e350b244fa0b7defa5c7de27013abadac3d7d5d4\ne688afc4c27fd8b743cacf2eaa5166db9ed0ec86 7672000d54488601bde92438760a52787051669c\n4ee02770e776e3345199181900510ac406ed060a 331a8a067ba7347651672cbc0eda8e38b4b9ab6a\n5492d0c818b707fa3cf12a9a34b40ce66a30b34c 2a57180723027930cdc546b116b602670822ddc0\na862c7306c16d33f927c0f7b77ecbb9816d542cc 24f10b064389a140f33f3412f9c653080c4dac0a\n88e6632c8f80077bcf458bc6e319709cdf12dfae 7f9c26ee0147e3f4fbaf47ceee526a8799bc6a6f\n10f2d6a84f0447c2b3795a76905f4c69290f71d3 4de83b09dea4119a33791a9e29b46a4725bc50be\neb232e10e7cf911d544f0510e3047e9b56d680a6 a4048b6956109bcc037f477727f69c52cac9ed76\ndcac7dc46b67d16812b524a944ded20c0a337c2a 8daac56b527830ade48e7578dd6782946607f958\n5f3e0cd7300b75169d7c68106d6ced0f724f1d29 ae42c23deebeefa4afb01482919b596575121bf8\n0a64f38020624183a3359895c75c50ae7fc9255e 5f77399ecaaa1a2af7ac4ef283afed38472daf54\n7ecd91a3e629d8e4f28d847cb67a5e987d131af8 500beac40b3bc46ba08c3ef843fc1f4c2f535fcb\n624c0345a9a48fda54b93cac4575b8ec4e19f08c 1df730630898d2d0977476be20131c66605a6839\nf13235aa8aac15d258fa9aba890b1ed20c8fe4e7 4098be7b6a6d7699bfcb1a668ac175027fae5f49\ne0182795d8e936212cbfeb69770abedce17550c0 b43bc7c1b315210f04073812fd05a7d0721510c7\ne585eec3336166592e515b858021fdaf098e5cf8 14f8d986a77c4045a309e6a93374e679c546cd87\n04843ec390085c38195cd3de3061418f7bda30e8 0137905de31e02c7b5fd68c6e2662dc147614645\nd3d1fabcc0e53e18abf9ce4371c14d3ddd89ef10 3c93fc6043d853aaa347648aadd8aa33808dc1f7\n1991ddbcb240e6ea2d376069807692d6d7c88168 d4e6c79944b75c074dd26fd1c4c054547e4430b8\n59ea94a31a807940001cf9c71ca6652c4cb27366 ab2fa2ccfaceaa15b91dd7071125be4c3e452b32\n73377fc19392ea09c45a00e4bc8362b99dbb27e0 8519f984a4e9e02a9f97d5dd5eb8287d7c5949c3\n8d97f716757b342834ef3fb9c0150297b5ace24f b3316a5cb42a3d8597230c064afe1b9cef64094d\n81d34e37f5510c455724721e79359018932e2bb1 554f7f628c2b6b781c490d13176c0dcc473762ab\na42277a8e64aaaea60faf1febae656b429261ebd c0b4ea200db7208faf5f2dacdd99524c8b968b01\n47016d1991d6bba096a339b6533e0ad757d4b2ec 7ef61415c5bf24f330abc407dac7532e5771a190\n914bb3647f45ffcca6ca58a4fc69fa9fc51cdab0 4a340d1ecb99f6e1792d4887c8279cfda3153cf6\n2cc295d9da84c2f3506f894f118867b559accdce dc736dcb92f585a2ea35b38ba50bb791c61dd029\n1e713d61d85f84f86b3a90cdf45e63a9123ff8f3 d048483a09d6218aba9f579f1534a0e66e81e559\n7c1005bba51ec8512c55d9b6df62eb8c988e5bb9 5d5c311623c04f01c5056233ee8a23c333338fcc\n6d61419fbc618e58a1f7a4fd881ca49f5657b695 cb9e4992f11a4b0a26749a69147d3e9712021292\na0c27fe317a5c3c816c2316f88d62b4efd95adc6 7550452dfdc5ba87555598defbaadb4357dc2e40\n0ed7df20f93a1429f2df73ce09f4e9c1683f62b6 d0b27fd1b94716808f03afc98913d481b605333a\n338e40a6ee7ee933e99b7c1830e6aa3821a5c2b1 b55406340eaca5aaa84498e13118164eb8e39700\nb2441cfb1a5c0a998b73e65a3270d975cb9a95e5 e2d8f6d43a92fed6ee02a6af99d1e3af38a8d1ad\n35f7a242f1133e2250f46eb6306aa024c686831f 057b731126ae3e8293eef5fd1bded6a8ad579d09\n1800ee558f3991a7e41bcf9eecaa2738330e7008 433ae598f298c9ed895ff09b135aed9b793a457a\n006c07261626acfe38fa32d0064c55403f28a73c ea2846b61191eb31a44e0f5782971bd2a7c6e4a7\n0f1362d8ede318db3f5fa35371aa511eb684e384 02d9c8e31a850ea18204a551301b2fc6a94c53f6\nb11776b645999de6dac532c8c81791c578e5819f 88a0e9c2cb66b04c60ba930acf39cc8a18509fd0\nb84f4c433361cf860f77fe4aff9a97db7109af5e 2e8bcff6cdbc9c15a7cb71c1c462190665df440a\nfbd17141b08f809fd76dad615aa319ac5132688e 77c9ba7b4b83e3ebb8fcd0f21449bfbf3c703bc1\n175461b4f915ba7b1da39d66bb60da61de84ddc9 3c5627a2bfd1096ff1a72ddbdafc49eaf566cc6a\n252de1e2d3edeb523353a9d2586fb9809fba51f9 f1c78b1aeed9c1de3492055a380b0d4390c235cd\n9745fc0cffc1a87fde2e9eb137ec48dbb02ef74a 6d0e22232c8feff229749861e14a0678320cdb8c\nef4ee712fcbd96bdd3a42a5c0c51c1a385f3ff7f 74e6014f98208a19723bb6119712d742a8a2b5eb\nbf8814f06407567ec8eb3ca6654bb1b9b060cdf7 a25c0e9fbb74a7ffdfa7de4840ee3cf8beb9b69f\n347b3edb407588e4c95f1740a2b9dbd4cfbb5430 6ccebb850a2de0e923158282fcb96b055da2c9dc\n28c741691ad2b4f0c277889349cad8b855e7196a 90fec7261f04b8c3e69e0f71048d8e855680d248\n44464a25895f7413cfb09ddb136917a635102cc2 8e2be7200e3e9bf047897456a9669bde3fb30f45\n67585808fdc0b46ab3013fac8756418367479a57 7a1c04965a20f3206d2a234dff0238d2240c75b0\n0df1a9cdc84409fd55a0ec71a2de9b208b43e49c d95a7039b4c82236261af9bee0d2c8b14334124e\n4f6d344dfb9ff3aafe0c9cff4b224941c2949c1c aa571f538e410a460be4405c966f8d59a94299d1\n30654ced51bef6e8da272ffa493fc15eeb65bdce f20e34b46a800246e6b9912c9d903228e4b5688e\nff1e6cc1c0e336ae713c2c61bef035f1a37a8fa0 8b52716d8f2b2ecc2f1afc35aa45b27e9d164b12\nb02d00a6ee68a5621934048b9ed4b136e30fea72 eaeb7431184fbb64f89a3dae15aa9680c30ee124\n9d43215bd6539b730ddf3388952972783e614e7f 53d779b53a27a4b217aef504ce937c06c80c46f3\nbeec86f4834df557077ca7b19320e5b032d464f1 5b99b001a5e79c66129da0e2927c514b25e684af\n68665b0f55bd76d8b3181f4d921444ed9ddef232 3b58b77cd50fa1b8d062fb783b2a3941af8f9e3d\n4221a23f9d08e85ce27ea1692497ee823e056c63 f8183c3b283d048767ff51e724d7f96262eb0885\naa3091a97341f504903c1160406d6a9095a5c890 4f73a808912c9dad58544fd692e62ea422360aef\nf94c10c1487e9ffd6f853e5127872d444b9f2eed b3ef457bda37011081337c3f9c2999bb1796874d\nfa27fddaf7e58192a825f3d2e5d072c5bda7a04e f9eb12327f5d6ac8288efe1ee4b47e4c376728a2\n1f3268987d57d0bb1c29145a6b26343ef2f8f0b5 d4064a0a96362994d464c4dec31268124de707fc\nfe3b5b8f8af099ad38771ebd386c58a2d488115e 4de732f76c00883ff9491c85eb36248604b48f14\n4018d1f88fbea042a1a9bc1c39678f376f77cfb8 f689bd04834c9836a1ca9c0279728c1657ed3097\nb019c2a3180b94d64629f62fb09c86caca74947e 46a26dac8b4eae8c187a8b09373cd81738e3f6d4\n5f4c732141dbf7ab9dbe3db1da07d6947d387760 5a729b3a8ca9d29994e1d4a1f77ac96cd9877acb\nce820a0b87d9ade4b1924f24fb02b7a8c4b3efe3 f92de16750a0517c06731784bcf5cfd9ee68374a\nf61b707793f933102df0747c966db5f3f62bd43c 47664f9d3fecdfabd5a1a20e4f666b124764b70c\n918a2f82e94c9ea58149d9c0594ae030904631de c00dceb918a73e6b0f1fe1d11cc4c3a710aa1ea1\n38632b12e7b45d98a57e86aebc11940870d87a63 1765fc796a82263a00827b0f4191429029d34c9c\n85044972271ad3907341f744f7bf5cd754ffc1d5 16bc437be6467a2b00d34c89d0e83ad700d13e60\ncd34e317dea3496d49a0f70e3a860acc0b436e0f d1f8e8c69e595338dd47c59c54e284af9da80d41\n9d83e8f7ef754000db63c1f1ece5f3ee24c9e9ba 88d5108fe7ff7fce1cf8be019a9e74bb6a340a25\nb7c824179548b128d6224318a1a4f2f096d29522 82e80d51c5807220323c08fc3286833bbda796f2\nb5c95289d55a6ff781e96cad8f02c00060988343 4a0e9973df495202379f8ddceaf04000ad2fba7b\n17e7ccad14856cd59c8b7af0322771cc63c8a2d5 a8797c73273483cd32e8dfe2c9920256ce37a93d\n84350610d4cfff37731476e49358b23ceb37b4bc 32f900dab2ce3afe205a38e6222f61bd9c1c7c08\n1ab72337650da9d1fb313cb3375d6d0262465606 a3cef452debf558b022c51105ff4d1cd75e013d1\n29e551c20d23374a8d7c967f08ee3197e48745a2 8dc1a7c589f1db5e427945d7b29fc006ba61bad1\n1c0ed195015409686ee52f3ae4da66e5f80429f0 eb8505b1003ace46e0bd116da01289049d760178\n0aa0ad63dddddaebfbba9bcccb7ed65b99253d3a 9b4dc23dec23903e5915a6d940de2780b2f8615f\n158689504169935e62aa543c7fdff4c94cf1009a b59f00c34f9d899c8ad3f46cd42729a18cd42b24\n7d869f2b6dce5d078dd125f65a26119407ef79c7 e916f2434999f4adab8ee22abfef6161b387112d\n6985c840e63a82039c9e6beada7953bfe455a651 10cfd6f04ca2c8bfc3e24b82733c4d03ed86b116\n541c4e0f533bb11cc847c1823f7099635e9da4f1 d5bc2b5e14eaa96b00bc3806a24b9a7520d58cd1\n31abe5167ea0f9edc787c0e4555d3929490afdc4 adb78fbdc3e709ffe8513335e15034d85391a45e\n8b90d20272750fa1554de8780a1e6d1a5030732d 08a1798fd05fc091b156120529a152c740db2fe3\ndfc0820406031da85b01e859eefbe58772bd809a eb5adc9adadcc2264621bc2af75027d72a8bc624\nd27bc68f4e5c1ad10e3def1a8f74c6d4795465bc 1c18dbf0d41e35c39270636825e39716bc388c9c\nd2dab92ed30b6bea9fde477082900f2e6dd88b2e 45741001ccc73e3c9cefc34f92466a51914ac2b7\na7850e9af59ffd3e4a3989786ffed06b8d11cdd7 2ea65daf57c66aa067129cd35d00534915d62ec3\n0581ceb31e8d479a81b303f58cc0c53e291afccd 6ec340c03487aede33643bc6b41084231da77189\n6bb435529838f7b665f3f19b559d7fb54e550c68 9a8b90bec9c371205aadd4d61855f151b25e5c7c\n1bb1ca9c3541866948def54fb93922f2e0793871 6c52b77b2f4e37ff0ad77cc4f2268201da3e814f\n7debf313fdd894776691b7f1c64279b0f9963251 85c7d2d6e924128f3b76b8841c805b440b1b7858\n89a46f5886490d05388576d159a7c3c99446b707 579c96c7bdf88fe913da707a62f8211fd8dacd5e\n55628b1a6b84208cbcf7a6af22c32035182bf1a1 45a853eeabed9d5dfebfccd05ba9be57ba3b7336\ne245b93ffa2bd2b091e3eedb182d6e77923c8f6f 80158f7a01c7eb9fe64000ca1bfef6bb9dee91b4\n60c39773711e7fb9816deae42d94d7dadb3b8754 c4beab9a3d427a748d62c6196dec1c0a91b86851\n0c074e2d8c42f4fabc91230723e1a68ffcdfd9da 1186458a690ca81cfcd46550d11bf9aa26bf7cdc\n456dbb88e194a9ae2f40c4e9068fd5e3a52d023c 529b13c15e6f0cce7a05e3c4de390f6169fbe728\n6b814bbb11c3403fc58566959d47554647ed8f6b 66b2f18bc2dc36d457befebe1882c510660b8195\nb5b9d87aa786b37ceec84f63184084d08f7ee536 5749732349b935a34b6edf6b989624d3eb91ac77\n2acc0d3a6a63306098ccc5a8933c0c0b2262b7c9 826af6665aa00a9c6c8ab1eb08b2527631952781\n3c615fe17188772c98aa46b92330279a1496a553 383048a9864b84e2fcbaa11e5ccf8e0763dd847c\n4a00850ac1e1b86edefefcb81e3b0619fc76f978 bda6afee986ef6b66f05280d6f158fc93adf69fc\n4fa2b3c7daca15d39f7cb15aa14a0c4f099cd022 85f3afc53c8fa6c84b7f14ee0d1c59695abd5f14\n083b6e9f32956389e077962d5893f3b308e8fc79 68bb63e2f7dd34ea5e0761a0eabc737946665872\nd936761d41227b7e4acabe4aba2d5b530f62e358 836717bbcb5c6ecd6162d1f9e1f4b11c917781d1\nb761cc52bd374ceb33b004b79c44639cbd1143d4 76f0f6b52a6057b7aaf030d1f880272cf69fd486\nbacde62421a9477509a5cd4175956dcf4d78df9f 270ca7bb41a8357efd041b2c19b37fc66c7deb67\nfb98ae8678282dbf00388def97fe8015eb8ca2ba ae36883429a4b54b849910264cfcd933dbf17ba5\n6683b86343260a007997f4621a5776b50513cc60 00c0792ece6acc3ddfc614146e9662541d0c5240\n45faa0aa6bb995030feffde5573d92109e048885 de9ef8af336ffa383761d4bee8aa7e18904c2887\n220bec7eb2787b4690c98335d647d42e2cd1a088 c937cac29ec1ef07c8cc29e5ae948aa241eefc56\n3b0ea2677e99dedcb6fe77ca061f537dc7a78ed0 da9c2541454225ae5555e3929b99705cd5b930e9\ncaa2769a19cbe7ab42895ad3c9c20ba51b066c0f 1bf55981dca40734c77c07aebfc40cb56dfbff32\nf0e32461e0b35e7b24ee5a1492adbacff4b535af cc97aa9517b61a165d6cb698ab7b4b2dbda57396\n98c9b1583ac5082a8efad6497edd237d8c046649 8d980e0705987214b442ef2d85a58edd19c57ae4\nd7b613266ac1e52fa3764c75b43f3f1e7ab35067 df85cf429316776145e7eef6dcd927a6679b8083\n241d1b0ad82b52474d5fb311b6a69f46040d95ca 8145d42d6d386b2ed2a3cf2a349cc9c84a30112c\na7059fc96219e1a59fa25c41eb96ac2bb6b9dd17 c55461ae0f7bafffdc95f78831abbca94b5c3308\n9c22cba4250c80f7cf3bbcc8a9170d334ae70fed fd09e26a5db1352054083655f87ab2d2b576b69b\n973f249edd045a685da27916eb3a41e5527a2f64 8d1a3537aad44207d67ffe6e306bf188199fd05d\ne0cbc0907c333f96e12332511fec742370dbaef9 757be37dceded64e250612938fdb39c3fa3144f4\n54e7af89b9111260667dceb6dd1c8ecb26ea2957 db59183dbca59b491a8c95f5550443c70920e661\n107708c50aa8b9fc142751beeda0e7c7674d66b7 97de6f3edc91dea110d0d8aed4274217421c4098\ncb3fd5b7b44cf9e24222cd71ef894e628b697ce8 1ff567bbe4d024c5bd113149dc9b60185b564a2c\n754cb51e669810d6aea5050269517985de30f5b0 b6e367ff8e5c269919b11ad3bd65f95c1f099afd\n4edf8a9b4a174ba9771dddf80286d19a6ddae2b7 5f84518a57057397e7b0470323e223018675c15b\na4a609c9942bfea9e4bd15ebc744954d0d39186c 7ec8fa6e08c8f1d1046207c20f67e4dbcdcc4904\n1f39595c5a7d4d1ee59041d91f28a4c7f4059f39 93ed997f495ac1e06734994ca02bed26a07d721d\n61ca21e796a3bf7925784fb8275fee993c1487bc 5af774fee6caad6828eb7fdcc7b79cdff70af8e0\n57aac29d3022ff60962fa6c52bf7ea21b640a133 984bd43945ca61f9ea325cdf95e44afb75c5f3cc\na8106e632b1987b180d0037909688697b07cc5fd 6c9a8a8c56c512e48a4252a73ffea3a8ab19e3a6\nee75956d5ab2736dbf26811713ecfe4091918441 09eda29bebf091131558ad9f91cb9cf67c0ea78e\nde297b62bfd9dd8f972ab45f8babac7db9b68ea3 7c977128590c154afe88aabf678837356e48b9bd\n2a7b57bee369c67ed1f32cf7ac24e29e50121460 7272f3f8f6786ea20b03ce65f773578f45d40a58\n893cfddb6add3e6e55970dd15427a1bb3dabd0c5 a52ee8cffd2e23db3f287346c59101dac973508e\n1a0856d26a6094c0a3ea13fbc06a709a10cc0d09 07d5d65b07860b9c9cab554d088fdddb2ff8247d\n98948839eff572985f743cb16a11bbb800b1adb6 5a98139d4fe35290accde631efd9e5eddc3115ac\nebb63eb9bc2c06c555424a82351b2399c9e8b173 7a60e93cc950fbf6c647176e2a72a04ce3d27625\nd0b24761312a095a735e3446c2240d57c3b20fbd 44780529255de49007ed0bf38e1f9d5f7af6c801\n987cb92d844f47ef8a98b5fcf0e8af946a927921 bf7446ad05630a59f097b451eb6222ee42ccc8f2\n058586efbf55426485b26977be4ac93041824e15 3bf2294f6b0889e2645bd538c83c1ec63b437d23\n21e98aba004ecabecb8273020d1b3f3c2c23b074 92bcd160cb5fee03908b4f2b37f3b2ab0e4bc5b8\nb37771fddc6f49d72b0ab6457a30c397350114c8 6161be481367aac8191300bf7455373a41007a63\nce5a48652dc42f0a0a61057f9608b50f234d7e50 49431181668adcd04dc5a54e7743c8fd24893786\n18cf6832d5325f66358b342aad48bb222be8bd4a 581ae02b96c1f46a482ebc6d0e5aefb7a508d2cf\n62d6675033f7a3298c828de87791545efbbb0d9e eec1a5885cda7d480bc2d663de3e5a1b985ec2cc\n0be90b40a044329b2b54ced3c23540087c8d3f44 8f8a365b2cc005aa40975c59c0994f6971b41c1e\n1e3110d313ecdfbbb0c27839d4e99b7752ca4b51 81d3e08bf000a9f79c1b6ea48dbe2d94e0f4faf0\n3078086bab11a8543aaa0b5c3eb4e1f389f19356 3bf5827169c44fe8df544f1cc3fe280efc045c6f\n9a2de6a2fafe0fe085339adeb567b681474a6e31 03901ff0b151aeb45eab45a9a74b90fb0b130444\n0451bf7b2af4efb34a8848f16d799959edc0fd43 80201bbc9df73165abd369aee6dd7fa098364665\nae08ca6830165dccc68552cc1d59688cef7a6fb6 441b197240d587672e9e002a3589c6cccf1c4128\nf735b6183a323139ea552f8a17a65d98adbf818d 42c74e042447cc74072c16c2a288f842e75c2109\n27a8069dca192e497ac6d9742b91a979535c73b9 fc96fb7bb6ce4cc790a730d6a0bc6c997be27386\n4cca3778e4516a6442fceccb31973a773c530218 5fd11c79674927ad40f784d21ec34eaf044aeb4b\nb4b6ea60db6912587ec3def10e5fb2086289f4a9 6a4d82d48bc7ade9d5019504df2755c7b2aa4dbe\n6bdb589dd7fedbf3561c1c372375229ee5aaee40 37c9761abece12b015943b7323aa31446ff27261\n401cfc260593732a7d2fa3f217e5b17b5be227bf e0e9b204d4a847719dd0d99a0f5cad4bdd8455bf\n354e0f5f8ff38725eb5938258079789359eb7bcb c3254288006cbeb77a8f25714a9fb41345b47fa5\naba62b056efdfff80f2203fb7adbcb2f1378cce6 ac10fb7e94fe518e9a0d029a6e70ea26ba3b2421\n5117f3b25611fea77200dbb30118b5689409222d 4f3ef4121e865c4ce7a797f907a0589d418c5ab4\nbda9731b89dfc193a691617c57b34af93ab50b6a bc3439e62ae299fce031b5ad58b2d75aa7507e65\n4ccbfb4dcf8a67064b0c4394238ea3f99fa550fb f1ae246ef9595eca16f73b32f5565784d1c95f5d\nd9adde250f0d5d6c8bde265c7231fdd4e522207d f63401a2741965946ab3b5d9716eeecc15f1105a\n7e691b21e8006a706538f3712ca18cd6bd24d86a 276f2f7128dff8cc743a251cdf5a6b84700e3be7\n0be09ad9e008bba09f9f5b394e21ccde7e8e2a24 4523fe430728ed73d663368afe8a7a0387d5fe8f\n2486d5294be409a91717cc1f53c7d6873b134f06 e92e55a36a88c9132c6b1157901b356ed1b657e3\n384a52b85a5b6ef0f4505642d517163a48bd28fe 39080139f37fd52a9e8c5480c2538ee7fa7290dd\n70c6526b249297f794c911a3d363c8d4c7e81533 8287a00fd2ce9caabc22965888562fcbffaebd13\n889efc59eb0bdbab8d8816086be4a212c92c6a55 3b74070920ccb80a7ac98bc44be716518feca239\nf41f006a679a17a8ce1daf3a78b3b70780de218e 63233214cd2d95589d4512827f8be1ac99d34f75\n24b23f696c69cec645087e56e04e1e73da2acb13 ff71305df592b796c609bc0e67ed46fe60850b82\n6071976caf34feecb1948962092be7cfdde4d8b2 95dd41e762eac24812d7e89aa43bb5ec6b3af679\n641d8c97946fb042201e2d322de2eabff2485af2 9a92be6b49d1a65702718532093f552fcb006e48\n41f5a023df45d48b780d6e3f39ccdbd7c756cd6b 42d91cf929dbe1c51a3fb485c821b2d2f731b1f8\n140920e6cb6ff567203b0d02fe99480c675cb0b5 c93f45c5f8d721c24b9d403b0cb114278f23c423\n646ec311eb023006e284c217e5af1f14e5ac2187 ef11c04d71b61b6068b143f972a2959d95c066c0\n1399e1b2a9473487a9fa3cf15406185bae01e640 6411f59c25ced159b5a6be6d2bd5820b53093017\ne6b43651bd52b2f9175bc8fc03b055a147e55ee8 a87c940591234ad303edc0698b76fd9e820d0772\n9a050aef261f03fa25b5097119a82f16037127db 6b42a3006b35d76b25dbd1efc0effd8510d8c44a\n8061d09a5724e8f9ea42fb5c8612a743f25625b0 279dfb884df92f1d9aaaa600b1dab169e8828a4c\n6523c9f18a8ce0a0de7a8a04e055aa521d36ee98 3055791d7dc0fbb4f22932771d104f226fe6a71b\n8425d498e4caa8511f91b4cd56867f3acea8d80c efc02c3b18c758668f18e4af4d9b794215bc93f9\ne85b52972d9baedb25e58138f820c95490d280c3 1262441202eb357e764fe1e5703a8bc1b604c96a\nd71b92098e30fea7bee60d8c14c432aa02d3e786 b2c449d238875592437aa21904b6935f32373b5c\n0633280225ad6124009c4d6c7750963cfbc768f9 2f9e7225586439d136aff3e135f1acaeef9f4a5f\n105964458562118ecc888f9684102213a4e0b805 0699a7cefbf5c7168ccde9f24daccc273f77525b\nec1f54684751bffb9c0dd78c9251eb45c1e6549d a82d47c4fe1c163ed98e928f1837f4d8e32592b2\n0428e4cfe0e222655cf29805e6c2c2d9e3e0b4c7 d7d7c88da6eb4b7a4c2b5752d5f6c4876969066e\n7d1c41955f5f97ea7f1dec23e5d175ed2b2b2d6e 788e01f4e50f5b318f27d4389cabb358c35cfcf5\n226a4b07f4ea661a512ecefa5397fb7a046bb4a5 5f6dfb71510b33b6d331202d08e8bc51eba13865\nb57eb6bf9f7d0e6f0aec17c7bfb99710674f5230 bbfd7d630fca5dc66f5113e05b78e1cb37ae4431\nff274eb3ef5d1e6c9fa34f1fc3cbf1ca59492547 40c83659d63f26e0e4989862a44b3e3b6935b877\n795368c656a1361abb4b3384e865e4d5f42eea27 c7291ac100e92f6800d01793f313a2615bf5624c\n52af8244729122b4ad02a18cc75e8c937b6ce424 366ec18c8686e6af267f45bd12b628fd38ee1851\n6d770579201bed79e4534b2ab32137613f8a96d4 357ebaa80b2faff03a40791a35eec6d0b11fe429\n3a80de2f122d5b2049c0dfcb4efffe0206be1ba7 cf5ac79aaccd166bb84f00dd4bc44cba7e4f91fa\n788f94f77834ff24023f829ee762aae3ae4f4813 b5c32a1c9af9f8451dc30d971a498873e3756100\n009363d5b455e08c58604e0a6d715eaf734d078f 83c3e7b60f8fdace3b9e4e73ae83119c9dd8018a\n4288a0c7e262650cc1def00b9f7ab65c7f23794b 0fb34cbbe1e74963d260e9764fdb62b0ee038316\nf038df75e79c87271ba0bc43202b0ee9104d52fb 272a14026a9fbd61e431e59cdb165e09c57f89be\n7757448448ea2f6cd0864b5177832dd00f077895 06b34579429368170d4d9ad646704d2e322002eb\n3bd791259303475ba374bab8554095b2f00a60a7 3234df81daa59969603050380fdc72294c186685\ne0b91fc96bb478d2c004c004d44129322d0eb669 910c5dddbd821f96039154f9572beaf59006968a\naf97520963ffe11128b8577a02935f17fa2e9c4c 6a2a815a1bef099286c5c9607198d2b9d47b5176\n503f1e09215b987d59f3f2d1d0b3dded3e518eeb 8c4aa8f6e94cd434ffd3c42d17bb5c0e0bc6b0a1\na08c8e2241ff31b6f54ac924b1d1254048ca364e 5baa2d1846134003767430f8753c453a16406765\na6de958f67ce576061b7951dd352908d989f2445 95749056035aa80b54ab60adbea7e2c20e278bd6\na01a6076869edb0fa5baa5a0c6b541df18aef5eb 119cfbf0b5f0db8a533f941b31e5e5476cc3e21b\n494329ea738e60a8d6e4defc9107d8cb2778caa2 9ccc39d023747bb9c12b85db72162a5bf4a67b59\n2fc74f19e7b992510962aa6f34963e7b54148a9b f6a759117b76c30c0c17d6a43789fbd5a52be601\nf79bba20ff674c31e11bebb27e07386618fe80c0 344ff953238802badf19f35b254ab2f4685ad3f8\n2d14f6ba86332a49878cc75fd2d82e9c1a23b682 34acc8f93b3ab49a25f91fd15c12c84265bd28d5\n11ce618eacd2dff69dffb562e664974193da3ab9 478d73848c2581fe2769e27603d8c5021ec631f0\n664cac007168f8e0c3f85309a936c29888ca8227 7f7ea7df11eb065aae14c3260a63e1f81520296c\nffb2ed9cdad564437561f477e1d26fb351be53ab 79b4cfbb1f0371504262d4e48be5f43c594739ff\n9ea987574c3389e851b0890845bd19b0138c1d10 1a9845689a3d3ef2e674c38da5b282cbd59f3190\n427902016c3d9bd0150fbe330c80e368ae335ea1 a4a6eae64cb1e7ff7127bd65466a7b2cd8ebdac6\n5b39693f7a5c31b247c07efead1cea960b7ccfb5 4a5a9c16474f449c2dcb7ef0bd302993517c5d6e\n1e96be5d3004249d2057e39dbf840ed6c318600d e866c9eceb6610cf75864e4c248a9f92750eaf8d\n9dab918ae5c83c426d2774a7990e3c82628fd7a2 68028c2305bb4d18d6957efc7f05e1d3f92a9934\n8af58fccf858e8b8528f0ba3c5d6cf4931ac9d08 ea5cd1674f394956070ec188e7c0edc682807bf4\nf038949673001904e7a84c145fe682b8fd44431e cc9cbe2216616c2448991b16d239000afe4265b0\nbaec0fd041a71286e5b19d4117fd39aa4fa42b57 0cb787001acb02bf3be3850090b69358e51d4df4\nc9349108971c6206248024a5fc741d1b2bcf2265 581d20feb8b4ded8f0fc0f43210177a944aa3e22\n13aaa5756c1c6ef0b40efd446d198df0a1890149 79e1c994fea9370f57a6ad820c4c98dac7568083\n794fadc0c6a4108efaeb9f461b67a5315f445dc4 5f6218d862e3671400fbd3cb45c5685454d1b5eb\n7cabe926ced22884980d147deaf0460104fc6d80 ccf8e854c606d2d6627c2f6afd63b11cf73e6e91\n0191b2949587a1b77c103f3e31b0805e8e9fbca7 bd23e9b8ea843ecd85a79f73869fdbdd95ea0ebb\n4a824c55b5a95c515bb685767fbf8ae3ae8d7cc0 eb962c2654760c9566666479130b58ee0126e091\nf0421b1f19e101b7d459c001f9e3962c8efc98c4 9d656b48c26d05a05da94e0847d2a71ca6d95c3b\n7bc4f04fb4ce6b984287125766fdc2b170fadf87 c18a74a04a7cc724af6352a7f531f84d8d8b496e\n5cb6b98b6a1ec7285e5b5b668d2f41451e87b266 163cdf01b81dbe92aff7ba55b30b91cdb73b6e4a\nf28146f19305160e40dd278960f2bac62d59b09c 230d1a50c7bc1101740654b06f08e936ef65c780\n33a30597190cb42c8379ba76ad0c2513c8446177 3276cad009458ce5b3de85b8541da21877ebb51a\n1d14bcbe870b6ac7b00a78cda51f2478321cf990 cef31b6b89bd590fb96f385be209fe0d2686c820\n984908cb7256a0017b663749b464e3dd4f8258a0 73be5bf35c08ac5e15667ba57d02b48d497811a9\n539991baf7360beb109e18fd714168681e07475a d6be2092d410fbc1d324e7f17a58cb44053c8b17\n576328a534b147264b60cfe8052c78bd9b8bc849 ad90b5f338674ed6af3dc7c5ad5959a645e4aadf\naba643ea8772c6f08d2f8ec8c6cf2408a5516180 164814c97c92d12c5c49729beefffd9adcb80ac3\nbe1df343c3ca5c84702b14dfffcaa199cfff6ab8 2c684b9456a245c1fa2201bd90c49ac51969c824\n619523a219a0c57dd26b4e2e3a11bbe9e14e04e4 51ebc5571711d428e85fd2b4aa001748e4c0fc14\n07fa976c157785f14deee711eb78c1f2feb441c3 de64fb7d42630a81ab523dcf313161d943a30abc\n5b16a8f4fdcd96bfd27856574f1badaa319ab89a 6f112b8243f5bfde42494b722093f0340fe2c848\n31189ee94b04046511fd733eb3830fd77cb09613 a93b3f8ec46944ec364bf09a37d44c12cff462a2\n73187517d2346caa088ffc126aeba2e3972ee299 d72eacdc3518a2ddfe807cd6bcf03f4609d7215f\nb60dca3fb0f3c67a6d13f87398d1613dcb70532b cb14667891ddcbd107a179c8ff90f23504f4f3ea\nf5f579e8e868bd4b7e3b49240d52d90d8512d46f cc13f876f4db2b072b55c29fb1098d491515609c\n403ecdf716448066e60916050b28fad8342cd188 4a37ac153e63659495a0d6031b3332be25cd6d01\nb2f541b5aa029071921243dff3c26f7f3ff27135 8db81d75ea40ba3e2c4d9390725bc4874b866e36\n234da9efb0fd520900d7f0bb10da231b92679ebd 5d030c2af23efe066c30ba5c5820566923f93f88\n864c4072d05ac3f28f51e5971d93be5f903e6be3 169d70678d6c5f1b3418e12ed07dde7ae2c84a96\n14ab51850a2ce61ac0ea551ac706b1a27124b7aa 5ed19f9585e6245c54f0922e8fac6901e58e844f\nda84a9e4fb4cdcf350e701e800630611706377da 65a120a841d573f30e4f3b12f10a9912c8408e2a\nb310ec4fd4f6a7ed04252b33595a965489b83ddf fee1b8bb549901b277db7dc4333d4f3977060e06\nf3310f8be44b0e8455e121a9ec531f271b42ba06 6fd359e8b69ccb274f4e389556d145691c8d2848\na752b4425b019856f0d4fa9512ccd4d2f7ec9486 72ddc5ea7fff54a58decdff2e01698eabd67d76c\nebf100491e965895f6338ef188ff2305ff09257d 5d8b9232f5b6984b880fa4ee08e2d54a385893b1\n49a0beb65313700eef38527288c3924ad5348c4b 9c9081a40fdf0f7c70059106ee21908f6790cad1\n8196a36b223d15e16b7317b86280b9eacaed62d6 bc5af66b5ea74ce16b0fc6dc7ec97f8b2ca96186\n2d0a2ba9dc4e97bc7b786cc8fe12cb22942f5df0 8e615d43312ea8cfc2e4b21b54f28ec89c881047\nded4d4746af8320783c72d676b68a35ee158e9e3 5f815079c3444c7cc1c8cf474ee636088d31e2d1\n6fb22c9d2c967acf0e5ef27773815f3c0c170cb0 425b148823016adabb0a56b4985e8d89c850c589\n59925ea5f9c4516c7a64d0667c37ad0b57da97b1 962fbc76d0fb93df6e7a961efd633058aeb1013b\naecfee1b28676d3f2fb777aa3e5d08644e7dacaa 648d6a66f459e7117868ef61c69e6638da073126\nb9fb3ba0f36ee6325bb91a4ae6eed45f001041fa 714a1262535e762eb50b60d46c67979ba111ecec\n66a2be734b8f66209fdef4407b60f225dd670812 68a0422459597d3bf686e521ec2734183c5dfb47\nd6855aa81f5ffe56fdc0a4fe3f17e3588f925f53 5636690657cbe65a9d034b99cfd392e3dba24c19\n0a0e5769542f6730296a117312dfca113a9d472d 7d49789124e2d1286bc7a8f1b19c7428d4c77df6\n78ae1a83c9d4d9271451bb6852c5b61d25265811 e24662b48a23733aea4c8a71a711c75235cd84fe\n6ebff1f741cdb12342a4fd2fb9c6d3b6aad7624c 8303eba187a55b3a5b22aeb90d4d08b2e5e472d3\n9ca7e65a0d608f405899da25901ac4ebdc0b60e2 3424ed4e668d139301942db06bfb38e2f3aece83\n970b542c9d8603bc0632597b8f8c5a2a7a4b32e4 8a96688c374e5ae3652f8bc2ccce60a25f5c65b1\n91a98b041f2d53ec26db86765d80f6227b00f5f9 66b8270d828f926eee35c0a419cfdf7940bcd284\nc481f060a705662e41799b020b769918a18cb53b 489f399611ff1f72d3a4f826d4f0e2436f713fe9\n12e212788e5b6e6ef55bbc557f4763d1e5772f5b 41fdf8b813035854cdc23b9777e3c747956348d5\nf476db168a7ae172456aa2294c4a1fa9ad6f7ab3 c8a9877447fed8a3f7176cbe9d9ab1a9e53233b4\n7b72de918bc36b696fd4a5adbd5d5787e0320add 5bfacd165daa44aa0976efd50f31ffd4072158b2\neec35fea8a45384fbd06b27dd9f896e863cdbdd5 4f38a2b773cb1496487815a9f6a4dd08883c22f0\nba4b25e8cb1fff535b421c37dff834c7e4bbdeea 8c52e487aea49b5b20c88b423638061952c70e97\na5016cc6da3509077fcb51d3231f8a4412ab314a c62a217761e0dfc86dfbf6b5ab663f398a5b6287\ne8f12db9cef0023b59d3a0aa4d1d31f7f0782c93 6291d0dc7f69a8b80a6088d58d061655dd335ddf\n076ed958649979365640e24337724243e21eb356 85524678d7625836a27efe62fc8fb148ac07544d\n7b916b54c7ae87f5a25e84be62ae08043b2c3c05 cbad23a564c2612b8c149ca1d4b281b143e808e4\n48e12de224aaaf9f1a773c6dd4ec6dfb3f564e83 ff066e15c841d88f9e505e063d5c38c1a04340e7\n58aebc0adb75119df85713ec98fbb00f7a9def18 d3f798878bd63c0b3e3f1092826346eef131afbf\n679facd7141c09b17e316b9cd71a883786175c28 7d4add52161d317043602c11eb24e94bbd66e69a\n2a4cb4c8b446c61cb8c179c6ce6b82f3f07fe368 2543577be7287ba9996e5104a713106ccc3ca597\n19402c3af10eb0fa1c21175dcad7053fb68e6e48 eb5d8d69e5319c89e3c3ae5f9e9329be6bdd0879\na0fe6fa7de80bb6335a36825335256c88c1dab58 4c582b37dcc489f9a347b3ee928a1a6b5bc82403\n028fab1df4785abdb5bb47f9d208ab1460dd9acc ab3e64efe8ea407d8a81ac0ae69cff7c2b77d96c\n89dd56dbe86a02a432da9a3ef499c7ac48696852 b6fcdaa707ce5ec0d4879c4975790a80f2445f0d\n4d565b982447b3278c3dae817e9effeb90f0dee6 5d37c5b2fb898e4ca099ed42ee5a2044464848da\n71194e8a20a0c00ac768dff87ac58170e5f999cc 580a24a4e53fe100fba8b8d8ceddfbd442b94705\n5edd1e814af70a823e05c2e28cca2d5ce9d85531 6e2c663ffaab55e4e7cc297b53bc5b3bca085444\n089649b096610dced49f6cd3bb6e3b963eddca88 58407c79daf489820a074f6e3ea5cd9e3ed4e121\na783ccab9c3cd8ee70154aa56e4f7a4f4a6b8d05 34b199fd29f0e4339a64642e03446f30280d1383\nec0009aa09822e0cac07fbf1ae10c48d244fda9d fdf88d242c914bbde57351a93abb3fbfe0f9daaa\n2cc46650ef3758da3297bd379d617f4c642561e4 e193d621a13bb00d259a4424e625b72f0d521604\n1a9fa258f856fa1f1b6ee89fe30b81dd47d318d0 5743978e9319e6d64b3ad6fe27230e545b9a0e14\n9380876bf913d9badfcad65e2e7ab8407a85baac 0cc7be9506c976f4f8ec0e6ce258531eb44db592\nb435d6bd750cb093b10aa9493f66b8d783289a28 888815eee4d3e613a16aaf740beebb267664088e\nabf4da6684ddf0a96eac945b703dba2df4cf160e d1700186a78fe7dbd96e8aa364cf9b789b445d9c\nf28e016ea98457af152ff7f21f097d9549eff94b 6f2623268108caf14d5bc4813b84e39f49560eee\n25628ae80000ceaa6b23dd62ec0de3532dd9e134 52d1ce7a2fc694cf472e2a293cf1351b47e60ab3\n2d5a822a44f22fafb90c22dbcb0ef2ed079a76ba 98ef5384887cf025c22aba60b585e3fd74387bf2\nfb676a3036064cb0dfaa322c378a87d0073aaef3 a15948ff34aa36b85aaf0aa3a3270bf1001a7777\ne35a9bfc581a92693add1f1f6709ce90135310e3 b4be7ee7bbc3a91b5d351686248dd2138feacbec\nb2c72c8718a083ad382d23b1b835e46358f97e92 054b4cc174df5ffc541725d9bfbadf005550808d\n4bff8904d3942381fe62f9bf364cfc1747cbc0e4 7e1c2f1bd3cb14f79a0e543f382e4ac3db891ee7\nbead44c49cdee57f54979debe75da86adc723dbc a4873d42ac671ea40a285b6c4d4d59f58b535078\n08a8630f4b1694025b05eabfa74a1ce3643f0845 ff7f8dde65023327ba88749366720d10d6e05014\naa9000c1e007007996266173a901e3bae368448d c99612b599f14b42858dae9a10b290daee7fb401\n28eb11a0f8ba2ea4509d2a09fea7102cd233e3a9 40846f6a13034cb1d183374d5bc70fad251c844e\n6631df7dcf067adfed8762bbe39a647ddaf9af40 b71a868f32f3c5b7b4b9e0278e92415b581da2e3\n7ef09a19fb8beb126f5883b6bb5783672aa40e0b a6f7a3fe1ee91d4cd9eecf064b6a76c747e46999\nfb2e504c71f0c3dbeb32486c264656b214aa0f2d 917a4bf6e61e32d9c0c4ea8b6f71879baa42d3bc\n9d1416f1853629b5aab98304607075a5c16b8445 1e8621a9338f36127ddade4bb8952fef69d2dbf7\n9e8c54337000ffba483257c578a5ed971293142d d8b2caecca1ca5056ee832f2772ec00f9e77ac9f\n83af46457079fab577827eba9fa2b6e2eaa8b7d7 7bee34c7410ba6af548b2dd04c8da0b477d9a548\naf68041947ae0d6cf8279117e92995d30540e962 56774e0b5f813f468b854ad56a22eb8a42162019\nb1706317895d6f538ced27edfbd154aa4ed448c3 e52c64d167a5186b87ff90f64de302e4f48de199\n1718e4bbc9cc8289ef605ac724ba541dd00a0ba4 91d35e0a69c274dc78879a00df0cff8b0d72498f\neef121f4521cbe520d1b4c821ae80de56df23a7d e1b1ab0ba8500134feb2ffb93b73faee964d2490\na3edd681b079d598ebd35399ee6e55d41f589766 dbc584c967db8d2810cbf28d021d62532bf62b8b\n8c450edf682b06f6ea2edcd588f3eaa7c17b129c 32344c66a7845473bb49f57e7c8fcbc55b9e8a06\naa91153dc960698fd04c9ad872a977b4c498fbf5 987b99e97c759d913c0951cb3daef4e047f6128d\n6d27af55ac43414d4274fede959719cdad7bc371 60b7e665a152f8f876e5d90724bb777c2a0d02d4\n462c8d1fb7fc06bb9f25e78833f1fb03b38606e3 1e2e2d0798a3a683b968d8e48c9d15c4218d67a6\naeb444922b6dc7a8a3936bc4b019b74e723c5e42 7c434841703f86607e6ced9fcc80485f32d01900\na784997a55a0e430ad2c1ed3e81361dbe8281c17 38f48aa679de8b726dde5d4e8cd8477223ba9423\nc7a1c2adf9528edb57bb9553fbd0a2ba8e58ae9e eadcd1a2cfde6c2761cef23bdd0d955ff6200d4a\ne2588e52939343530ca156af91589efd2a3b98ea b0f8b132c2017406b1755c664485b4300c51da63\n9063c7347f06c445a0d8768eb88e41605e778fbf 27e08bf145318bf9e28a596f4e77529b63b41d0a\n4b4da9a7302ba79e0ce9b3bcef882dce1927e5e5 a13991a6c83ddbae2eb39dbfe686a26547d82798\n062a0c3886525a29de878448211ca88cd5f33cc8 12cca7ae9bce6735f81f5fd7e333bbb8d23cc16d\n2138209fbc3e9777811fd6478249384d6b9be4a5 69bbfb4527a7354ea24942bcf5e9787d8a008f0e\n088e9380143c2761c7957e53f8d252c7368415be e23be2512900ff856da8333f971b3ab51d18bcce\n12774991511c1a600db01934570189d07c7d5f0d a7be2b3dd8513f16a514cc98e169887ffe79c113\ncbc99aef0db4aede7e141f9185931c1aad676eea f2e50bea7f29517ede17c6c1cad3d7fe9a7ee57c\na257038a92537b434252ff87b77dcf845806eb3a 2f1850a94d90b046486c349f342fddb361ce0ab5\n3d210f9f37b634598dbfa2ed16d2105865b58ecc 74b40a4a8bd8a1b986aa974cae51360c65d00994\nfa879a556285151dd0ff262ff4e946898caf2b91 cc73ebc404e829afb60a5d06e9b6be7fa3cd83e1\nd5650498025f0e8b2ab978ffa83a4f6e42e20c0a 71e64db9cd9a0e371039b895c17bc911ee76f70f\nad752c10ce691e11163d32efdbf63ff7771a187d fa32f69d0ab395089ece41e714a45d7d825a9dab\nb170b54f209c26d17d7d3742b0449662e5e71ad1 0bbfbc433a25ae007ac2febfad44ec34d5c9860f\n7c0b406c2d2243d1a246f0dd536fdb21b3a583a9 f27c0616b0b386e2950f7ad69940b2d437dcecee\n5a7248fa40a8ce74b387f204b338842f9a5b54d2 60b626955642501ae05310c91e52af1a0abcaac8\nfdb13dab0676fc119f2a680081af867952ea54a5 a75f4c2b85c6ebd926c131221418b12340ce585d\n3235d574a850a51143b38e5747e03f71753fb547 f79bbfbe4be3fe1ee041b5b4e6f116a2277a1202\nc04887ea4dd8a2a879c4a767c71e841c7b4b4283 ff9dc1f078bac865999c58c854291ed14d869e32\n9f2dc6dfbfee60f33fc02ea97dfcc58101ddade8 c09dce02bfe4595fdbee47612108715c398dbb35\ne11b7767d80dcaf2242023639ec50865cd99f000 d1283776f489460d360ac1ec2b2140b570678167\na85dfa8c40f5bb3f2c1f5478c6a2e0716ffd6947 e60db6b7ae7bbec15b7516da70de484f384cbc24\n536ae7b74f33fc4b7b8d2f517b3e6aee6c00d032 ede696820861f133912fa3b89e2c5543f138bdda\nf70d14ef4fa5a364faf83c2f81c277affeb2ffd1 82da4099d8250e7f7ef15d7ffd2bc822b86a1507\n9eb559f65108f10c78ef11b7996c8ff0af60445c ff75e84f563f0dbd660c5d7ce7cbcfe8389584b0\na7391856c596f83d9e7a2a30d48b31566886c691 eaf0aea1efd0d4dadfee5f0001656fe720917327\n25464f404f5327bbd9d83df0beaed8568cb8cf47 e1704cb3fea1244787f0c2d94406c794d2c464d9\n8ff52d591445ff73ac8170e384f3b5002ea20d1b 68a510f30a9cbe3dc51a3b444f003a7adf315209\nd484cb2063e26954badac995b7a1637c0b9a0289 ebb06def7877c2da354b79b59a2cb4ddb54169ed\n823ecf7b3afd52911528424fa7575a296c309eae b2a3e670954d935af5649453621d762ebb87991f\nccdcf671b2fdaedcc455aa26bfec7c8af4f7c2b3 32a3947c9e0ff37df66af505ec700407af5a7432\ndee8e370a06dd5951aec1e005b9b9c740d4483b3 c66c11f2d61a3b38036a1ceceab677ca47df4d13\ndfa16ae63060c5935ccdfac36bab6dce1370dacd cb4cae8b079b8903c8ed2e74e6f91078a1bf1974\na8f1a62a266c826f85855e5491489740828a3b72 84f1c4edde1835764b7cd8e2b3bf07fedbbadf76\n87948fe4f9a54f45a742eba240deee15495aa6f4 73c95673418850abee8c576b23153d417e828d6b\n0568d00aa5f0ce577a8cf50bea68f99740455ee9 847b41865919a714302f30b7aa08d88c35a78c7f\n9dd512b5fe106a43347577e0ddd08f1db959999e 9999c67923ef18e38600ffe293adfc132d8c48f4\n50839f3dd69b6541b5668a53c6c9c51259d214fb 1ae62274a545120e5af1a18c9552fad31326c45f\n17a21f195b9f899fabf64bc30afca96cdf0593e7 d972c97336b86a47584eae50db7720af77151006\n560d1705fa97c4f345769f8fb0a8feeab3def088 14622f7517bc85ca1f71ec7b032c046c3e56c5b4\ncbd5730a77d910df4abd60855e675a547c57b7d0 5434f7ee84f6ac3d6353461b81e19b67903e9588\nd70c9bbe915da2eadbbe554ea3bd4ded30a4bb74 f428ce3cd6c4449cd4ad530d384553c9cc5e3c6b\n01b7df4fd2541df70672f28f87f49ade1b50635b 1f780a507daae6ffa22c1b401830ca2ab7e83ea5\na4b0e9dbb0e42eaefaf0722df0a40c78a0c16a35 a31d438e771994b0b1bd2eed7b3588fde6983b36\naaf04cf31847ca15d021ff9bdbf6ff16c5c06f92 d6131fb99bb73242463fe37814b07d5fb66214d2\n31bcffbc461f46e8620ae4953ce74868384293c0 fff1436a52e7d6e7d86f34067dda7f523eb271f3\n6b47db1dfcac50790a87733de5365c94e9ba642b 2d9436662ba2af5832d29cf5e7dcefd116e948cb\n2ed13fdfb217872e367176eb82568c248da54a1a a7d64652b087133e9f84d1282c8e7f1cf53eb5e1\nfa5c5870d340baea6a9072dae5f34168e24443f7 589c78e3523c502fc93486bae658c8b85ae2931b\n247bc96b8d520f11e95b3bdbf92339d653a81739 18a0c1450bbbb93000945951ec77235b85d16795\n04e3030c7b57d5f27d8abf7ac7ca9efd76f5ce58 959fd09c0ddb316808f273670b3566d4690139fb\nf7e2246203b246ba65e3ce3a8d567197b2551f75 00d82b77fb7af4dfab7f5a8b7cca343f963c3c27\n260f31a6d8068afa2dc83c36132e1d5b9d10fe29 1b91069054094f5e2dadee58d2e6978cbfd13c13\n5c04e2c583f6d46c1409e45c56a6f7c26a30b813 641f944365f6f1abb88928f67fdd899e3b27115f\n9a760ef251b65647a92f3a3174d9e2c98cb35ce5 d38f736b01b0e4f2297e9490e76b35a3fed21643\n15e7b0727b1bdec1ac2768cb358b768bd38cd4b2 6ea74353e080737247f62f7ea81000da798d1c0e\n6dc3a17bd2299c638825487d1ed5c8fc68432883 9e9ec565e1ff38c984c8781d706cae4afddf3645\ne65be46227d0a914df8240b21363786a4c1b7119 4dedc070aa4ab6aab7dc35bcdd17f4f9f2cc8d2c\nec32eb352168851b1726a8110efffa842d10aa70 d2ee057e79537672f765b497f53f071f608997c1\n1011ff85737deb6dc94a66a047f07f63ce44f391 d096ee6216b0a9b452e633830c3d3d1d24c34ba6\nd1bb41cd080dbc87650e24ca2354fc83fb0f7094 96428bea543ce63f37b84bb5fd3aa50801dac776\n89d7444bf0736f63314ca993b493b095de762859 23ca0cd1759c94b84b0f7a7fd85a34cc3ecb6ddc\nec965a376b0329754bf2aebecf8ab3f9f2b31888 fa8b67ba086ead865e05da901e1bea128a459206\n91f2b122b488518ff2c2b4d9ebc8ec243e141bbe f7a37f8d24fe780956b2252ce5e5bee492525095\n084e765685ddb768d848383a2d6b4fe01c1b93f4 597323bc400fa3b66efaff9db7eba3722d778161\n32204a9746ef1826fa7b47c2ffbd5afdca52890a 589407cf4516f36d1a844281aa3688b4da2a20af\nbe61ec0a19bdac4f1eb51f7d97348de69b80de9d b1a997d8b3d9598168ca9fd610837c787b79784a\n48bfbbb5bbb5cc1b8f103e669b2c229301479c4a 52671c25f9a2944b39437bf32a870b26888fff89\nbeb833d85618a3515e8f3778863ae822f55e2e39 892c6a70c9f47fa6aa82fb66158557d418fff02a\n9b0d5a179dfe1e272d6b162d3e765635e62e856d eb4fa9d8fdaacd8fa20b27d42b64f0528978cbd4\n098044f07ad5f2ab4e1a47b324e5458bcd07af0e 66d9abae522f30ccfb463481fe1e50a58b7b0701\n40a1c8883488a1cff4daf64b67fcb00faa76404d 72f9280d3f98c67a264296381708312762497f98\naee7f3df4b19e09debc4906cb870580ee11ca58d b1d61be20b2ecae3d835febc1d56f5050c150639\nef19626bb5d7680714dfa002faa05500c6ffa7e4 94e1c233e9ea303199816436838b5f57dab73814\nd31a0d2211ccc7e6a40c2d347732fdb229b927e1 74ea23bdaa34fdbeba9fed22efdd55205f7ef5c1\n81356ef99ac62bc549fa00e0d7b361b06db10cb4 251b44382f6c27fe4bbd96bd2cf63a9261ac1b99\n362ae3c08d26d332b44c8c2ea7818662846a6fe3 c57a43e34803118d32cfd28bdb41ba688e7116d7\n71c103589e519b96cfe58a294c44173f1e6e6b1f 48a8773087c94b5ab3b22293a0019c529f311f37\n0f59d71a08784d11497b776b5eab34739c41c656 e22a935e09bba501a8bcc846d9326f8f300e0dfb\n3caccb435fab4205d05c50511fd9623df7c4caab 820e686355b7f25cf8f914adb15191fb75488553\nd97f5e585d706d2d7262293ae86fb47a35972d24 20c0c0285506a46c937546c2edf4b52ae82d0dd7\na670c5131ff3e36049d53c887a17cfdb2e487c1b 4969e22097a3e0362025444f345a48384bd1cb27\nc930cc6537e607ccee940c21c81a42b698d1e7af 93e9bcc7f24ce1010d3f6ac9ccc5294a5bf3b8ed\n03e86237355116302b2b78c5e38305095f290c06 398075ce2f0b774f822836e3fefeecc8bccad778\nbf5a8734aff51293dcc8c73d40e50290783d9f0b d459558a013237661f62a98f98c5b88f9e79418f\n86eaf4a536deb24d5fe2f847ec1676648e3891a9 65e9e1a87d878622a583fec151ef4d1ba24ae7e1\n657ac686d77fc7c632d814604fcf4a9838a85c59 919d16bc4b4716ba43e242d2e8d355eff521f0f6\nf413b2f7bce2df8e65bb9b0c99d7411beb85089c 9413aa3db0633c03faf24d3c7f4b64052fb0d751\nf253ae46cd6f8f70a27d862a7a371aeba154826c b7df424366f2962b4d0d8af55e44d0a09463d0a7\na148d097253eb7fe50404eedac79870d53848be6 d9d711dc62557ea1420cfbf4828d387a130c0247\nfc947eb2b8d530b897776484d79bcfc5987d77f8 54b80216f6a1995302ab2cce10df0aeb903cb1df\ne2c4ce094dd3748981d8d5b6767b4c67fe41f224 f3f40eda679578178dd1dc453cab124f27ae1982\nef296deffe26e4904230075ab5622076b7a9de7f 562ce01b34ba97d1c576614df0a7f432576c346f\n9d140ffc72632d86f1c8947b1d84a52b55013810 cdd0fb89371b66c4f4da0d3489a9041a3d411bf4\nc03825e5cc359ce15ae5bf15303519e70007d310 4791d02e0ae5320e16d054170bc620b6794baafa\n7bfc9911a11853c1e3ad5fa34d5163fbf780a9fb 08a1920285343da23edf6e20bc107668048ab926\nc98956eb66c8744383d0e3fa6c4584af99708b1e d645ca446e1e143dbf49e75b6878b05396d88399\n1a1bb5dd20cc953d2ec106f17a934343c5e95748 314caf2eaa1d50e979cd4f5a7963b88c73cb7222\n2ce58f44d93131f9ee32c99605d105f04274db0d abde1e79153aa45cdc98e3beaaf499d8d65818fe\n7a6bd63b2a7f5e987f15ffda3ec5e4f61577b344 59ae9059b794de74e65e9486a26a9d4d35799619\ne108b6ba273cdd2126223c3389f7cfcf3ac24e4b 5715fba39487a974a3bad269dbac18ddf82d1fba\n4d2ebbdf63d84c1c9ee57d9e5ea80bff8c8f581a 711c04da479145c0530c310f617195d61f53702c\n19b920ef77f61964e72a5da6625344ced10b0cb9 a99169f2e93ad54f24d9133a721efd0165ac5ed4\n5c78dc575d3a552b076af7c8b3307f6767f1708c 65589d546e80079aa09e3f799f791766e55450b8\nfdda7266a9507efa31e0aac6df624cb93726fc93 14837f925207421a69b3908e3ae239a561591158\nb204f7245a756b57ace6dc5a636cc11f3c515fa4 859bfc3e61fc64bfbc3bc6cc34fca01b84b50e93\n945510344cb3acbd4150b5b3c808a4146f6d2765 1bf05efd8ad0c58b15206166f670336218a79960\n1c6d93b049f17a65833a528f58f8fc1ea4ab8718 60ef324c424dbc972c4e88a3f0cca1863ecfc84f\n7ed5857f01c0bae1cb3955414bacd76af860486f ec155ce962f694af355d842947a38b6c8343d38a\ne022d40a53212c93b189ce1fe27e3ce1cf35c7da a559fe43cf7a133bc7ea48339c8cd3b420d8f181\naf80ee8a3a58e2f3cf5f5e601faa05166666fc15 a56cc8d428b68bfc6ca77edf2085e7371428fca7\n0a191d59f7d9783f72d256f2975c877eb3e6abc3 08e8c3b5115200338f4d25fd4a115a8d99d08df7\n7c7c6a56ac0aeacabaccb248f8dc778a849be5f1 8eef3dbff9df24302ca7894ba888ec56d1a5b7a1\nf8671067686999941dc7adecf1550d5e2c3e4f5e 4b5791f46ee2c045b649be42c7b2a3742b1319f7\nbc9c99c01cee77cb409d367cee21e8becf2733eb 47a859b7d71aa51116e4d94334571534f871d681\ncedbec43176163985b4cbea930adfd4b31288f7a 8762d9816fbc059f97783173332c10d718d319b4\n361af72687eaf51e417dfdb9ad64d67da446d216 06072eb4ceb56f4d14d4776dd2999d13650ffdd4\nc8683c575cbbe428e914473bc539a34f616d97cd b15fb1b3654933de1046b6811a540356da196f72\n6c279621e47cfff16e0fc8947a031168394dbc99 d6c90ca3816deb5d4e20a85da73d6f24c35bfc98\n685b1011b68838d0ffb460fa3587d7c1726e019c 1a74f43d90511fff678307f333f4549c78882374\n094e0e81341b5dfd5cea908a9ac8950271490fcb 2d15801d3ee7e09234c9cbf6cba3802d1625b64a\neb51866ec98f6194f5b05f3af8c92a8cb153c7bb 2ca542e0f57a437f697282d0bff1a61779f3c435\n2e12eae655f6ff5025026220e3129011be1ef03d 3efaac724782da4d1e65cfb10baa58a232c02ae2\nb93a742250d91e2a6644d3959af48bd5a8cad93f 2a5188ed6b663ca7c73b5a681ec6891c9052c5ab\n8d666af507fc5e8710e1df3624e1831f82784b42 85ef088de6999bf3f78e2d754655270d41ecdc5f\n8b340b29faacc74bcfef0c533e2b366aa6ea9fda 4251210f550190d127751e0da9c3f17c3dc2df36\n200708b312d27c7092f42896a2c066e85a1f105c 92cf94b50d7a3487d072e0aec17a240f9a9df000\n4ca18603b013e45a94c12cb6d3885b46f8a72f8e b9e7254677425a3a83dce2136b20e01edc48ec5d\na807593daf2283f03369294f329e28902cdff4a7 727bbdaa53ef855720314f084d60ae263660257f\n518e3f0df3e7393e0939ff6ba70f8ec81ea5af7e c1558146f7090cbcf941647fb20ad59735a58ba9\n2b7151416ecc5e0b403d3355a1bb15036d080655 133b98a1ee1a0903df3874b39df23d7dc112dbe7\neab23278ff051ede7b01b4de873dd2e7d1edc1ea ac9ec8ea416c9dd22f4deeabeda2487e5ca2cc16\na8a3e4f624c55b7b4b6a616081c07531479f6dbf 5ff59039c5fd6f6d0aa5bbc48ed54f7c5fcc9b38\n7943f903b60f5e587d7cb1b2cbbc1073104a38af 7ccf2f368152d13d055ab95bfe908d0b4a871c87\n1f8cdbeb711b3f755e010cef75292a01de8c806a d6705028b8993578ebc7583d618d11aeec86d861\ndba0e821eb3413c5e959c1d6cd0967889148e409 10efece564022cebd1bd23414bbc13b1e36db004\n9656d6343a4fbef690e98610680cfe1625e70511 c545d6768cbfb58d594b45c7b28aa6680c604629\ne6c5170726b6bb414a061f076ba557e2d4db5624 fa47dfe71e4518f38e493303d3321a64e7fe4fe7\ne7c3abf2f8d94a398c62f811497efbf6f2408bf0 491d7397897329ebb23ed33b4955a6163d2dc8d7\n9a273c3de06cde3c4100b3f7b13494b25e4c1eae a21b6186f32bfab89a4bb71fbec98eb6d5939043\n7ed8e6c7a33c6cf6044e26dc5b9a54a4db17c7f1 6f87e9020eb2c674a6ddc24cbc8b658f178aa5e0\nfa23a7837b3049e5aa000f396e5434be963c6e2e bf2e152afe9b9c7f9690f08670614571e7ae81fe\n9b788cd63544dcf4961ce2f8e7bf8a6f9e6b1571 5982e8d056428cd4e4d9c969aa8bd55d86c8a15f\ne90bfc8c974eacf0c3a2adbc80b0720bff0406c9 8658afbcc11fe42214d369fa1832729db49e0ac4\ne887c4258de2038a2a627099786d675bcd960210 24b563fc924d704c21449dbd3384c61af40041ec\n90426adaa4a5760a9dfdcd07676f656c84dc2121 472cb060d1c16dde35c5e4e53ab448d368baf8b3\ne952eeeff11e154254ddcebf92126137744518cd 9cfb296a0f8be7fc9c925082415ceb5d802c4e4d\ncef14f899029fa7e49fe12e96287696f15ebfdf7 16ddd250f5e113fc0885c88add9d6ac699887b32\n073d3214fa78ea71cc4e652a2ff6b5c23048c353 ff65d376bce2c25069c9f11dffe60a6c7a0b2792\naa166b1549e16127e38e6bf18a09a5dcfa7ae271 7c49643828a4a8b9b213b89ccafcbe0774e04be1\n52497156771bf0127e24af515f8dc4acf74cfc74 3d92fb38dce69ab9c9b74ef98b5a5b4c1254e873\n4c8cad3600c10c935121322ebafef8d079173b82 fae37f4c3771e77cea47d14f652cbe59b3d11078\n15178e7e3d198395621f355878c668cd889efac6 3d5c69fa14048b4fe1acf233c647edd939767bc1\nfbaea037daa4a921182b948b788ebeb9527b8ad0 80457f900e99162854f010abd67ed701374c9b1b\nab9cb43c6e26c887b38290fce842a689e9d6df42 aed5e66dde5c8b779f2f34a32e0a600b2294303b\nc571a28503e81d9b57f74b4194994088df777d30 15acc265303f03add0d2969975be998a4d2dbb16\n9d5786d17c44c45b3691efb73df992b7e34976c1 f4ca26eaff1d564e631397da675a59f753dafc61\n53c8069e3ffce6b549fe14c975b99bd0f49840d6 84a5a06b64dd6e0b0bc66646b1c8fdbe7aaea13b\n1a52546ac4d8ead0fb77d4b0233b0cbd4be296ba 74b94b8b4f9dd7db127273b70fb021d9a8319137\n181499376084a288ccbe5b76c823c612acce01d6 185416958f2ba99a5db8b271963d28b11a10dc41\n39bf92342e479a1f00266228a52594822e83f498 d31f72a13df5930872449ee86d80a52a59220cd1\nedb794ba4022ffe89d73e0af8231a9a40340b85e e6c9451c3fab193fa0b7e56abdbe642cecbd6149\nc93bdc300c0460502389c5263ac60f0ff1c2c06e faa0f403462830239a14a54c6b481ae1aad51f35\nf696e53d52a7f1fd184aab0b8e02354be801553e 32c0bee524c8387733e0873eaaba79ccad01ea05\nc24418af013c1dad3876d0c4b523355a45f1eade ac80291aab0b3fe6bd47781da38ed907607b3fb8\n16b7c3c64fb3c5b310e1a635d7c46725848edce1 f05ac265477e5c5cbf8e2b31207223b58aaafbe7\ndc19db8f830110b92c6367840b193e4519005529 04b2d7c2fdc4f2ec577092f48d119698be94ba11\n5ac21bb8f7fd8b51f6519b4aa0dbc6f3ae2155e9 c4248fc2b3b47f6a9dea200d1841d1199bdcb8f9\n85c93cb84947992d5afedf55038549e7146e9fa9 f4ddf91db4d3fe2d81ae692e05fe7452026689a2\n6eb85987a861e21438eb6efea74a01f367e7156a ea66d032aa40ea81c1c98f09acd8590881fbb910\n01fff6d2cfe1b5ae8105a3defbb4f12931e0e19f 307dad400bf99a14cb6fba57533b13d9749f32bb\nfc82233e8de2d600712b2b08067958d83cbc13c7 3e93b22b30545d9c0cc05769ce1d0c20d6875bec\n7ff29c7aff99511856209549be6090bea1904c47 0f11af4a778c9976e7f4adb6d9a50679932223a5\ne997a21e47b4c9f1cac75009cd5f2688e17e3fe4 b40a537757b707da3adb95ad10fdd0944514c365\nd55e14ec620cd7c0ea56de230b93205c0ea166c9 93ab2c0412188ee7ab25551dd3e1c34da28ec515\n03c6bddf950abae1c401e0f0085978b0679d27f0 29f5daffe800c1d8c7edfc7e1f6439137377883e\n843d0e66d4d5b269e592471a2d686fcc6cb442e9 f191b824caaa50378bcc730ade65f0cffeb69d26\n64a128fc4a1fab72fa6fa619f174ac0fa44df05b 2b7b2b44471a4d06f51f2b5c8d385690553f00f1\nfd4d968c8258515071af7b0f50f85d00ba7d1ea0 b2666370b9d03e30538282b027501ebcab45ad7f\n6cbd9d680b3a503f3c85bb6266515788e2910642 eec8f4e463568f938a3d5d3dfaca26c35df0a14c\n8b32c92c227ae1f2d11c6c54982a49ac50e1d352 75212816b0946e82148fe3dbdddd9cb4aed09d90\n7b1a9b129dbd12722c646e37b6492d2664bb6995 bfe5429fa21d8c9e64a110a056afcddb105321c7\n13eabbef4b4b103840454888a01674ac6b83d167 45320730f7e192ce99d74b1dd46eefb5d99475d3\ne9309147d7c08cc24da5fedf61d3e236a2609a07 d01c1bd09d219d6ee024a4f4f2e949ecc916248d\n0d41ade0194aa0d903649b5d35a298b74d8832f2 783d550a6389ce178cef64e0596c94eaceb78bc7\n7af0507f37730d511c5f90850863b8a71d079c4b d7a01750d2d102de07e35bc4f39dfd81bbebfd72\n518e635d1cf25ca24a7c6fcfa1bee826aab39ba3 885f37ec6e6a1ed3fc45bbe97d8e7e0e2a944ef6\n367f33baf5b2099f4e668327c4965ee044d88153 2e4a942e5cf9cb020ad0df6cd6832a6943cb7468\n92275e25f8db075b1a7f29f6726c13923e640a3d 86e6d4d6415dc6cb7936043ca207a0b382b6de53\n3aa121a7ef6ec226d26cb2295591e6e0f3d3faea b6d30f7c8d1f0087a6165272e420b09923fc41c3\nee2253adad72364ab91225662dfbb705d5a835da 305f84979aa02b4b4d420b1bcfeb5d9eb44ea2d8\n2f5aaa2a9a5e2b9bdaabf091237866b4817537ad 4b055798641378252b7b3ebceec777a53650360d\n2563ecfec7e01b51c1fb012f7d83259ff2be3db9 5433eef5c1ca338286bf2de1e8bdd0f1952c1985\n2663cf275b8729c1173e395e93921fae947622ac ba948d7d902908eed206d27d28c58da94ee41533\n4c5a2d7e548b687097318793605831b370f137da 87b4e377b22ab6e8a0ba50e810380c753bdf85f5\n5211e8758dcf4920f5a42a2365867d91c43ea9c7 63891a8b41b02e13b513e77c32280fc78e4acf5a\ne2a3f80e2799823f1339497ed149d1a236cc0dac da669fc9421df9245855185f17ac0db31ee0099b\n1b1fce9ad0f6e74990376b0d4927878084a6cd5d 771f69f80146796c6da8e8926466dc153dcf2154\nfe85fbe2a7fba6d64462a0465e12fd16d4caafbc 166614700190aa5150c236a142f77342918d72a0\n35acba0d97fb1d58fa4201fe74f95f8011f5e1f1 fba1dcf9e8a2e0ec36e607f9a6456c29dbe367b0\n8914684dcb658f4f9840aaa194092531e37c981c 4e12206c4e6602c47452981e890ea31a84edb5d0\n431d58f2cd09c770d4f219d371974536c92759ee ea40b749bbf81ae42c231d017a6fde9993f35e39\ne759fac83f09dccbc34b41bc0f28eda3bcc6df50 1d2185602666714e5ea352f857197dbcae237593\n01aea1ec4081548e9b12c13f50b864160099aeda e00846702d0f5f6d450e7de2e3480a292b39ff78\n8e99e452f915082fd9310e165308a170f5c7f3a6 7e8e2b5ac1506f7dfeee76696b4b7d9d5ce534ce\n29f7ae2b1da6dc81e9ee7c94678bfc94d025cd23 ad18a0174400eea1aaa554d6e6a128e098882be2\n37522f2bc671345b3d7e0e606dfa77b7297366f4 d8a8fbb749b4de5b07e02e4ff6ab86736d04cd28\nc72f67c38d8a373d41c71c48d99b3240b10258f8 49649176543a352d99c922fbc46efbb9d3d424b5\necaf63db65a215cea52dc405fe603dd5bbb90a7e ad5990dd8638069713ef36102d1fdcdb3d77ca29\n87619ef3ca6c8f931a6bd8838a30c416a568bef8 e8bb008e5b26ea2ab69bf1b11d2959e45960e0e8\nc10b384012d3c2a6bf6aaa0de34ee6d637361e1c 32694db02e92ef67615b5f2b8e43386470858dfa\n653bbb21f58afcae3b4e7b0f3426619daab29242 bc9ae1833684b0598f5e282b178e99ef47d2813b\n1c963680b51d91bb94d2ed7fdffada40ae95ea42 f228524dbcc5389b7be3f26be4ad5db2ae6bfa9a\ne37e6b0df23d698fe94c9b89c5262693e8afe67f a7ef67c0fead3a29bdecfb651f8cd68228f4f397\n7e60616a4ac63c42d9191736f03572810ca2ad86 174992fc609fa84c87ef7fe0ae4405bf8a6f3057\ncbf8457164f6f5982dad6e39e142d8cfeec2763a a875296396c75780a5d84d040828e1554b42a9af\n31f3dc20e4c5c9ae993a3f372389a06bc1469858 36b9f2b85a40c00e75e2d3d7c4003ff493f497a9\nf91bc84a91aa1838a136bec5f21d152683571210 7ead9ae0e177bd10ec10f7591b7bb60f025a13e8\nf15d2e238703e12a31a1d778ca2edfa80273262a fff81e0fbca7e72d0883dd9f67d6955d4c60d665\ndfe2329661475198abe93fd3f6bd8bb9f4dee65b 6d09501e51d0e5381518697ceb75b89e1f3dfebc\n90d8881241cbd5706da4163cad37ef08376fb3d3 442310e13ab0717c2b546c9b85929df9f65f24e2\n6c0220d11738745f3b4648c7f8edc2d37a9c27db 354bc43ce3deeb73ea1088028b95f24671715903\n9d0bca65629601c8ba8475ebc6a3149db884e0dd c3841829084c5c3ef9732a811ac3cc4d83e15531\n74e49c3c843574f83aabeb30e1ed5d71fc1e0b30 fe37004a08253b669ebfdb1fe17755eb781c6cfb\n7a6a1fd831e1076a8487d32cf42f96312e64bedc 462716e5297b92184e3a238ee12fc7cd39205ed3\n31e8bb4d07e0abede45c1790bd70b9301daf03bd c4a5db00634b72d9440047c0a030e0fdd89e6d81\n9b152a55f19f7e80b74900cb629cfb9a58713220 940b7dac99feb1a7a7458aa78c47e9731eb6c49e\nf0cee01cc8133113664fe49852426814b496a560 06918e25d24a6b7da7742319b7ec5967f1dc8173\na978aa3697865615e9a409327dd8e3af6b0376df d0d8b8ac25d8eb40f4261c9859792f15409404b7\ncfe62d81be57632f4b7ddf86181743e70773160e 395941c370fd6181bfeb0b41401d4c81ec2eb1c6\ned3f4459b7ee58fd885773737d55a9378856c1fa 778a298e564eb6af08a10cef1f48fa78ceac70b8\n55b158e7f6bf880d146fa2424be4ed9c6391c42a 2be1461d82d8c011b3891738c05505c4c365879a\nb3eb3927e3b3c2350227130ae8614bf2da5393d5 a21e4485f781c3c4547a08d52eb15e328f772c53\nae8d05b2cb1a186fe06638dd1256d4236359ef4c 2b8b963f0b9de5538953d2bcd29e3ef598344a47\nee35646a21a3028424f1d2620bb1fde3cc61ce2e ffe2621803727abd65bd14830895a8410f7161fd\nd6bb97c89d8570d78e6aece4a91a283035f6a4b6 6eac27eb389d4a0f9800b6f30f7e157cf9246a42\nae177e1ea0efd032f511b31f224e29c285eba0d9 5a8fe99343e2d91f1b7e1b6c0a64329bd4ea8e00\nd50e1156c102f02b2cab7af58cbad57f2bd093b5 0fbdc1dc1fcd75e15518c1bdee3d0108d023279c\nb40b98462fe631f03a089ab7428e1d77659bb830 f7f944313d966b12515e7a5fe99a8a5857aaf307\nee9e92afb08af65d6c206adbf5d4edd1a65083d1 b24ebd2e4444809c50d01158c974a1b16fc5f7e4\nc5d0154176c7ba009092e9e4fbf41771c6bb1217 c90024b748e7e4b63960d3d9fec7426319f2e70d\nb1c4155ea0f4649a761877de7bd676d2b370d70c 6f0a9fae7f042373d2389c1a4ee73caa593048d3\n76d586e2ef32182c064841d096d6194442182bc3 8460f69dd19e938f638257c9be69dd03633ac8ef\nc2429b0c025307ca4dc78d468954423afc0f2ed1 a69ab59e354e101ed5937c3e3e7ee3990d783c73\n06ee87247cd6473560040d57a71569da5a7b4ad6 3caf1f266aea4e72c3b7c82925adeb294a583fff\n6e1f8a2d9c401469c3992c6f5fcd3218f1d121ea e91fd856fdd5fa56bab3130978d598940dc40269\n4144e539c9986a17b04f180dc2d8c6388c3d35c3 bb7e47da5c46e80469d32250d7fd98328bcf58b8\nc9d9e18c6f8b324f60a9412428d35ec87b57ca1f 957510c351778583c75f4a4a82775fe1a0949dc9\n9d74865cf6a57d3f12a5e300422d635f44ff6c4d 209f61a50771990f3cbadaee38c5c70da39d0359\nde57f201690a41d02377b6c4102d497416bfe6a2 77d57594ad44b149041770585fa90b18deb8a37b\n13ab15ff2ed3b7f2918af5b4351ee0e68c18a670 63a2c0f75d060b6a9a58d982132fc00acb56d90f\n53983dd36ff5dfee2632c7feee9254d4f884bd6b a81e65c497ae8608c92fd2f666764bbf74b2563b\nad9d449b95cae58087a85c05ac059de11fcc4018 0db603422165e6a3031cba47e5e7dfc31b4531e6\n2c6e5451b66b1d7fb6237f1a5fefd629aa4ae965 00993fcb9fa7c484df75e69017dbebd16857a37c\naafd8003d1c3ca5b16955aff0b364ca6001cd60d 1975f8ce6d5139b558d93b22a11577cc77a59415\nfe90d956da24f51639250d8d2608b688ac0abc69 56bebf58d95ff8c106f0d718153dc45130f1b569\nd553fc239f2996422f88a2635b3c00dfc3c5ad53 b4d754fe0bf29a59380782ed655dedd4d8a0f6b6\n236ec8481aabc8ccf3391feb64b881b6f83bc4f1 e0bba7b146dfed16bd362ebc43b307dcfcdc0d66\nfe01468c2325a96d30dc638a2ceb0bccac89c54b 0483ec26041fdd1e107dc5689b417310ec24b251\nd21b36b8fdc42ffde5ea2caef43542406ed8eebb 21c86ab66df77661afa81b73b2fcadfb214ce3cc\n8d1a14a4e66c770104bd832e9424f00235c3f828 b22bd99e3414abf8f86f9e2c5531d2ec2fe68d88\n47b93fc55805c0364923d39ea1b64823fb40af6a 3e2088a42f64ad398efc6cf7fc47c8b857570c29\n9698f3aa3d1bdce235dcc08a3a8ba66910cd9147 0de52988de52de9353dcc2b74793d027ff6c6fee\n3b06520295865b8de160692dadce8bacf4b40d9b 8093b135c5e9e14f9374cef91555f27d1984eeba\n86c237481621e3b0a2e2132ae9413a950aec8f5d 89f3758f23a4a28c9f42a349756542a53b2416cb\n4b90dfb0ebe4ac1a0c6586a59f1ae880b815f9f3 d00307054f4282d158294abbf238bc4c5a8563ff\n4d3f25f9dd4b76e14f30042881e3ee7c8c2f036b 204d04b3eb2d79292030ce50f2a48ed6e6e71917\n5ef48c4186178c08ea24f1a82f17ddd1da07f86d 5ba9188e46e008e6ad6e3db7e38858e715d4f7d4\n3c60c2e52230acc11aaa1eae4b9785701aee1259 c5c3ebe033d7e9999b31fd16791e43ff9995e425\ndea81dc13c29daca069b2afcbb5a93408b2aff05 6dac921bc52e8813f6ba767eeee624558d253360\nc2d385a963ac667de80a8490022f858827431edc 036061542fa66a7ca6bb76c203441ba5601a8365\nedfd65d9ad2b6c0f8348c32fd9b3d33cc17e96b1 fa543daba565ed890334a498bc2d21e95111254f\n3727abc3502f9b32cb35d39e994041248a19bccf 9d1871a7e3cbf1565706e41c3d2a31e774fee917\n3fe773b0b828425e254e3010dc376ac3d2a561b9 cf7b0ee2b08671b2a99a63d0f9fda181dcb59fd5\n096307f96fe0082133836d2e386123dba9b49258 232a7b80d0a78d5600c1f8b1c10cc0f9b209dc13\nfdd880726feaba08e4653ad012f46b70cfdff0ec a7c7d12bf8b35816d33c201d39860f73a914abc9\n42765172172a7ac1f4b4d399e825b662b859658a a9a0017a459c1e369c7ca6a160bc0eccf904fa48\n4cc0bb53bd7dc0da823b90e880b8fbc50c572efa de01afbffc8f2df038392891448c6f0ccd01917c\na60babb5b7997238d7927605461f480e366ba27b 6cf7493a147c6410606662a732b80e3c3ddeda06\nc066f2bca1989e4ceda474daf9c32839b1a02048 301e5ece5dd150953d57e979032e1931a65cb859\nc5c3978b01e499778a5f6756d782369fed6c6cb7 43ff85151b5ab602b1487f06985a877ed3f31a0c\n8ce8526fc95d5a24276d855388641541fe0432f3 320ede783e6a95a5976fe3ec3a8427b9601736e0\n2a47b11d7ae228fd9c81958826b3bcd03ef92418 a0a658a6b47f8999d06399e5920a0fbdce80b9b2\n3e3ea1e13da00038dde8463d32458e07038f5825 8328e68d828e20515bcc441dc983e8431de108f9\n2828e1dc96fe4d76cd5f77e6886dd8cb0868d38f f7f72f62fa60686f7453202a0cf96f26d234351d\nbfcacff2204bab11f2998662edf0ea35dc67ee6a 5a7f13661b4cde5986ae7d55a0f51caa70d13338\n2c3a671f62ca990d2a1a924435d1eb8527361840 49f30495aa407280d21c8cb216c0e70675040095\n2dcb252df8e3782afb9f934e4652086d306cb4f8 7e7c7501ccc51dd7b664fa63f176712790819778\n558611c9655442e2df9d4a9a6fc9a65b89a3e9f9 3f15f94c42250e88249d0ba4a9a8d7220ff24cd3\n00202cd02d19e6205de02f80248378bfd2bc96a5 5f212c7a754d2213ac13c5bd2685ba4b30bba8ef\nc506ae5fd68431639d9d1655960452fe6d13488a 52f5c9e1d88fa038faec51126781797513a07209\ndd1af871662cf57d8618152dc9579e81d9d22e45 dbb316c02171c993581232edbdf729bf56d1359a\n157c025701c9b43cc8fc91fd45653a227f2f54b1 aa4361c4d163f1785101acbc9c85e163ac335c3b\n62475336bd4f446db754ceb662e89aed0dfb4db9 580e1ff7c1fde3a1720ecffcc0b4bdaaa0925578\neb58be1c863557e9a9bb4d7f4b6abad883462c26 44c0fab6708ed183d13e136731ba0f2510b1b250\n61a8f8cea575b1e3c06b203f1aaad218b880684c 9c7ffbe1c8a20b9b437a3e6de6ede392d4dff611\na8b74f6b8056bfaed14b4f886e12abc7577ae75d 7d82c4c4575fa395bf3b87da76314ddf6cd64d19\n00e028e8a8b8bec9113e9dfe19b051eb242fc0ba cc0b6c08f5544d50e306e43931af7f60d065820d\n53d8fbd8285039eaa26b4f0e9d7abd867db3677d 50a00ee067ad5225ad35f5db9e8ce141cebcf824\n1b2b0b6bd196283aeed93a453db6eef9616b2edd 877ae12cc7545d23abbe5fe2f31001090fcf31c0\n262785deb96fbc470c3117b02f58839d3e7be352 8f1fef3d1df103bde6fe4b03baf87ba74fe4265d\n9185d156ab3241e90a47cf13a81bd14fe8436644 3175198a334ff8b68b4398eeed9937e7c3c4bc19\n1dcbce33fe11a5c117ec00d1562036714a95eb92 f90681982c0ff9699c279fc6d1d6ddaef1cfd7e0\naacc33dcc0ecce56e9483dd97eaa5604df3297c1 a8047d0883f1c29f6d24cd733356c5daf6137397\n1f29ac0ffdcdad15310811e2cf2393cd7f1a36c5 4907071177eef8c0d9f2428d8b5b6ab1b01315ce\ndf404a9ee2233e92a19fcc05046368c18c1042e8 4b9543eecc04365f2e94ad85fdc4d029f618e99e\n8b58da831fdef197a6f39f546e496c59a52ba128 04cfe2298d21330b67774286467accb9d02f9c75\n1777af6362d8c9d07bccfa428549c1b79e5ddee6 a2ed957ca55cda288ecd9ccfa756ac54d87ac6e5\n348b0c2c275179d13c3f9b6186aff91b672f1ee1 938f871be149d560d8ab36e73b141ad2ff5b1b7d\nfe25aecc888843b0ef26ff7a00425ed5255eb631 4dcba4a2ba78b27b5f5857bf5a7e931fe90267ca\n8fea6e18b77f23b7a6e32c9209875b045680ece6 3f349c2745c1cda6d4543798ac40c79c8aaa7555\nf65dc39b07e6b69b7c8df27a8351306ffeb620af 69bb0397ab50aef10d1443876fc65915a6ebf9f1\n61d6750235d3982356244fc0ca2764fcf4ed0fbc 650e628b2a74886ef6931918bd2fbf252002fe4b\n1e3ecb8337f56168fbd8a903d399e3d100897836 89ada3562bc4586f1b52059073f558bb8126fb63\n114a21cd3ca2b661b03c565b81d458c8efbd15a3 5fd2150935f74dbf793b609ba5f7651c22862727\n678c25d0d304d1b696a670309de24268e171a6af 7da0d1fbf8208fb673486db0b722b1e8edba5da0\n0b1026d2e7428d17f6776a9fad631f17f614ddc5 de3b532284a53a774eab11883b2fb3bfc085ae6c\n03d9f79b2673f554920fe829ff6054153f024a3d 5082b797a287075b2ed9a92e00521ec42d14e9c4\n4941c89c028a101d08b9d73c506559885465802a 8c472dfbf1a0b56924c65441b117c30f16c5b59b\n64a6ddbab914b85d26341ace61f00f7ec059d02c 8e877ae2bad4e400eec7a9719cbd3d678fe5f653\n2a5811cbdff7ea592676f3d85d1bbd6c287732db a4f6cb598673a61d5baadb9e26e039c258cff923\n5a68341dbf237d0b6ee3a5382c79ea489e26b505 a4914596412944b84cf13410f4f322d356983d5d\nffd5e46fde6944201d1d9154ce4b100e975ea4a7 f88283d97ff4799eb53794b26abcc88b48b069f4\n680eeb4c37940d2f742560a207ab5e2a700bf92c b2ae310a5a4b0dfcda00ca542552afa583f4185d\n331f49b465ff574fd4ce86a7edfa9ec59e592db8 35983d55b4062e516862f6e4043698957b768fa5\nd976117356b256069e33ac41a642a2b3fd43b050 6fe427e39a5b0a73e83189b6f8410e1979faafab\n1957c4caf04f2d3953514c1d9ac3e4a2c2e889cd 066b7137ab539671288598d831b25e34aaa38115\n9d06f6c75cf7b62fc0952a871f89f2d515700ee1 e2d1e1c9422aae808e2a36b3cc6716754accf68b\n77a7c84062cc600a0baf8bd66e661d16ec5ef969 1e313812de3c9672b3a654d84930e1d7e3a13068\n3b2aeb7b1f4a4a77199ec4be4f73b34099063f57 f11a2656b9bd4135726af04d7d75052f133b171a\na03b0d334cf6e6606e1e01db27d3f3925fa8f309 2fe5587c06a27b018610daabd0cfadf786d7b525\ne9b0567fe927c7e1be8f679e02c69b75d0428cf3 825d01fcf2503fb566c1f3cb5807ee6a321e22c3\n0e079837da61ba8a9d6f406a27569c9c484f1b08 d4a07deeddabf6e2ac487d1e5cb07cf46df38c87\n61777fbc120d3d2b579902cd27132cbdd94bfb70 0baf494c2f70df53f0868f5db3c9777b43675849\nbe646d6549f3febf4f51f034ec8cfb24cc75a76c fc12d243d9f06fbd06adb3cee9bf85c647b77756\nc7a72d300beb946cf6f70e1ce8d32f3956a503b4 873487bcbe2a6d0c710c24bd85ac55fb6fbd5b4b\nfc1d61fa38bce4bd8295c6eb2ee9265ac353bb1b 58f5e0ea6999c831d816fc44df27869f7128f9aa\nb4578e16f62c1961e1f8bcf416432d94a6edad6e e959e76a2179b289b49a07ed1f8cd0c6645d4f5f\ne1d1e31ae995ebbb19b11666be32c0779beb16c7 8495722cb0454fe05fa4b7f40f3427ce5ea4d760\n75a0f0b419af21514c9db8518381967ec12f2755 a89544c0bd6f225b2ad489b16e0616fae212b81d\n27bafa663af5051992b350db46edc8d1aa254339 f1473a4fbc3424bf00a3915b835199cf45f64e37\na2b78b9d136f3de0919733e76ad5500802d1e10e aaaf56e3fc577d9f766ab837138f90ca2afc578e\n042b532db2bcd7e61d5552aed53887078cd28f31 d7b2f80bdb3958a6c05570268994ff95bcaa1bd2\nce817a1c2d5b341dd7a4856cabaed3415e231777 f7dac6ffbf94cb4e255ce57d99004349c41c2906\n8a5cf71d91ff6a1738efa5a278543f4139df5ed8 9fb4f058b914088cd29cddb58280895e23dc15fe\n0c361dc63079688bc45cacd1f4e4975adb0e9463 537f1a18da316dff0d63d8789f38c4bad1a4bcaa\nf4d9c95df72107197acb80699da1555aa7fc41e7 52fe81f2a12b7ae510190f89eb50df885dcc272f\n82041b9d801aff56c979acdcd5cf3739027ccce4 ff9dfc0074e06063f75e01bce2aa7843d9673c7f\n2d3c87948ef72f803902cbc8477fb2081cfd6a79 8b83e18d8c5825706407b45ff4e0e75154e86c47\na5215f24e2967d799133003bae241afc85f2f289 6d73d8f54120feb94a5ab769a3ffd427251bc627\ne43ab3ce262c19e808a1c6217254ce4abf65577a 25a4b9f666b6cf2900d9268e07d118428d11324a\n04fe496a497da8c4501e092a794551eaeaf4167b df299bb65b6ad3bd3d04ec4e0228eece3c9db5ee\n0ddbc35129ef361a238e2d7ab8920df465e63339 371caed74d935813d477a1dfc97e05f45f73917f\n621e525d51cc3fba195df1107d9aabbf6da90682 fb2dd4172f57f08ed5981dd1210a7ddca881e836\nc9f822b100f1a7d4f4cbc76f3a53b645b8f15d84 460a6dda0f0753c59a8ee765523c1417432f6bb3\nbac3d9caa2c6d375513a629da509c329ca1314db 87acc3bc0c033f326a7258761abf4b54b1631585\ne7a696beea6f22e92d7c935f3a380dea0cf7e7b5 f721db3cca16f42af765b29bc8c8ba448bf05760\n3d40b84032cb4c7a598cf3ac3917eb82ac53c3c9 80feca913143ea913bf17427d6b823cb253f4b5f\nbb793e2eeeacab321c3176df4bb8994aa5d0912a 8ed5b9b8eccc2ef0fdac06c4b466c235aa7dd629\nbf80fa21edd26c5836e2af2e72fc0f10abe7d24f 81f81dc7d2917cfb6fe4371d371bdc8a0cd6295f\ne68bda69b0678bf1356e18cfedb01f2f083269a2 f67427c5ea1a66475683c8e6e3e0c0cbf5daf912\n710bdfa017e05d2fe49e37c98676a2a87aae8c81 01d0f47a191ba8895056e5d834fcd10a2aa1c58e\nf27a5bf6bbbdbced523f236bf6dcb9c5626bbe12 de9b22576c27c73beef16dd022aa4f90fa9254d1\n5b53826bf591044f4eef5281a01dc615996398d4 1e522f98317a679a76a5db6bd53b441887d09e95\n3db34478ea0c599ce9fca462a56c99d69d5dadf4 6b17976ce830e02b6883a20cced2489d131d089d\nfbd22fc99ce17ec0c2d0f5e7012fe402021f9b63 91c41fe249b59a736a88129f2ab058e2dffb3535\n51c470dc758f1a95cfb4c88873815c686765b771 a19b1720082004abde10222d86000dd6d62ac30a\n94d0483c183b4a6783c282172468a4bd919d932b 2fa3a89388420aaefc3d475e255c8842b0d3bd2f\nf63f089da60af7f73cce25ddd31e8a292a8b00bc f57d26dd6deb27adf37a20abfbdc2887ee9bd256\n658c5b8c060bbef7a3220166e85e4ef685ad3ee8 75a220e4af6bf0bfaf298b50d0be28fb91e0e5bd\n838ce9ef27531baf3c58579e8358525c2485e33f 85d372ec0ecc03db3f3d0bfd72706cf5a2ca3e52\nff4eec3c6345cc180f28a9707a43b05214b71768 6f165a4ecdcaffe1f73f574470ea5afc3b61299e\nefb4f9d00c9d012a8aa25dc0320f32ab3a7499a2 3936137e4270052db16537042986b6d81610bb3a\n37cefa9ba23ed9b870362fbc9873ae5eaf5c50be fdafada7bc182d39ae209b777c9b44be39463fc7\nb2d0a4699bb1f5322d9ac1f58a9f367bf8bf9649 ce06cd0f1a844d2aad9e8245c6b5f4c90988eece\n65992ff141c9f90a235110dc45018d54b685d858 b67daac33e683449f22c849166fd43b8962d3a18\n42fe8c281d60e989f4338e032d063b06060667a2 c4773a33c58186203508d3b484e360deab98c46e\nb03ec367af22b9303ae962438921c57156f920e7 9fb0bb4060e30c8ba226bae41550cdf584e25fa9\n13571b1e873e5406fdfb5c7f9307ea82f499dd23 cd4ee6225347e39b747fc1e2874f2c8dcaf673f4\n1e67677346b4a8d4224ecb2f49ad1442afd36069 8049907703aeeec5df1581d4c81b3e7aa54bf021\n9638776b1b61a580475018699e16ab5592594468 d1bcff0cb7fa392680a6d1d0d2181e403a3d33ec\n88b8d46107a051d7aeb3fcccd0b7424c95a67478 46c526409060fac2888a3e64d83704d7caa6f90d\n32a2f85ea2388471255bb69a332614efdb4ba13f 0e61d74e17960897aa7b41ab32854913b100564f\nb32ec4458d5b5c29cb974f61c007395631c7d0a0 561cbb2a756cb28c1932c37234e5dca38ad72b06\na727592c22e8e543efa581eb00cfc73c289b1257 66c10125e3c854baca318d26bc956bc4dc71ab4f\needad232c1ad7e78724476ed3271713507fe3b71 ca349c2cce42aa8cdead5958b19456f51e1ea767\n5cee624e165efde16adeaa54846e7a3bb87b27a9 808cb2fb061a73bea1153cdaf2e611828814d35b\n099d8a97618cb45240f7bdd89306264820eda6fa 4b331042e56d33e4464fc3e1157c8f56ee1ed40e\n7f172c01b735589a664745710668a2d3374acb9a 2428de4895474bf61b07462918d70aa380e41b5c\n60008b3b4c2b36fb0dd615455376d7ff112574ab fa38277d7d30abc92b8c24b2be4a35fabd331d61\n83a4c1b294c7b5baeb116307e89477f875df081e 2496d5bf34b450bd74babca9c7cfea4e9faa25b5\n6de0fe0797c7e402a665ac7055ec219278aa61ed fa4eca2f43f2b7921b21975db4b61963db64bf2f\nc85f71ac5de8e0b51bd8b73596a9aa50d9a7df61 c7fe367389cdb8709a82aa6b658151df1f008333\n3fac406435582b7a839242c01f3d67fd76412551 9bd51232627a3d89e6815eda6ff72f0cfab7c3df\ne564f6a29b0956935ebd223ec8694dd755b6b590 26f7978e72827270af431cc7bfc5d58610fd6250\nab9795aa4a8660e65d1368493a8fcb008d517a51 a1711184ae635aec4aac7aafeaeb38fb89fbe487\n0ea1f37de63e8eb4f5c78d57785123470090d722 69c71aa6e1e854e58f27a8fdec800a044148b59b\nf031f7daa3c08eb7c02ec5c15904400bf281e6a3 838f04ea05a1907a5b97dc248479f9a592c11ee4\n34b50cff8321f31922106fe1065071d124edcee7 233e0f267f8708151f3143868d6ec7f3d5ab2dab\nb1de964889c9e32bb49adce5b330acac04e1e445 806f1183cd8141844fd52d0fb334a57dc56cd077\na2f8d6e246cc93741914b560b4b839728d10e960 2e4190eb3409a3211663e612aeb68f97d4a61879\n60f47f1babd2fec00bacab2bc7fb4015c054ca46 f87b8981d321a4aae6748dafa1b269458c137cc4\na2436c702033e2985e0b5427ef9c5d2e15b12922 8ad9903e0bcf744e143bd388f3df711c32628983\ndbbab9eb57e1d9b77aaab30ed831084b7c2a1867 66cffd0b6d813516a603da42fa24a531245fccaa\ncea0c0b69c547fbd1a1dadd166932a0a39c515c1 64d2a543e23028565bd1bbd35f59eca26a01a8b0\ne2d87d855e5c9e328a3550d9afc4f930535a3a21 6a18ef4cfdd241a07b12e42b757309fca9ddbe2f\n6be04780e22165ae36670b40122b6ed26a0626dc 84db24118a8e32c285561f2723678edb3bbd5037\n226bd790ec6dd9a591340304b5ce85664a992c24 9913a0791a1529b48c7c9ff696f5b4c8ec393974\n60bdedfa7a12be5972ecec0d45980711914a0f05 3178278bff3408e428203d358135aec726d5199e\n2fdb72cb14d782c98b8e0220b41d7811617c4c90 2ddedad0d206aefb06fead4ef63f0f5610a57465\nbce7c31fffcca076d47434802bed0592375d60d3 cfabe235b34d2ddee1a2256f38b9c4121bf0296a\ne57d345626f83c528d47b3684ffa4ebca3cab9d9 5fe6e6f3b77c1c6eaf78e9578fcb04da06963a95\nb64f28c66730b024f8c7aedd2fb72c110f6086f9 296cebe68a07f899a034039978c9f691020238c9\n67134b117a4afa7ddb9bbd255c1779b552c45dc9 07f5915f166a2439cbb142188b133abed370d7d2\ne11ed1f339e7cf6971f437f1922d2b51fd1702c3 e967bd8c6b06e0a38b9c677f444047f2ccefc8c9\n55636a482bfdd57c0b5620f8c4f2458e00507f33 b0478093eda33f64d0c85ceddde284421eb1b8ee\n9bb4ba17b7e934d4608cefe9ab63e4a630fc50af 1939a14a960f525cd799d0391825039c8decb7e8\na5d991933ffcf2d15b590ed3738d6275ed26e9ae 7cd2bf289ff8708df57f6d7e3a163f9d7a4284af\n329b350d02c2d987c459bd32b458266bbcb5b631 5f6670aed8321eb33f0df47c4cf2fcfb550fb0c2\n8a672d3b16389d4c398c949bc659792f3845fe70 ad1658299fddbd2f306d8baf2e004154671986e3\n5ffb64aa137ea76ceb5ec27526eda8b0f6b3c725 2e5ded78d38a9d2afcff13b11220bfbb813e538e\ne088d1e4c74c7d293df026e00a7ac9a59c52731e 32281601cc60177c94d2ba1e96b185833742baf4\n9e4971dcba4422465d3059aad9da6a2777f3d2d7 781d6bef9367eb609e8603c2f0d8eed3e3bf1c93\n0bdf391f9d46700a81427d6c82009ffe86ff19b3 a19bc35665ed5697799fe3303b1260cb90faa689\n00b4a23b6766c690f839b2b8f29ce21d78821128 02e41ef9290638d2d236b41b5f1e03fbe0ed5c24\n0e0e7175b232873b5a0f39b8b7777942fc27216f ddaa64878df85be8beefe4be65aa4c406612a9de\n14cd48aecb434cc8d390a7c74010055cccf55806 ed4b70578dded8b2b4a412784fb2ca946c6b5510\nb9a998171daa39ddf7a36a02bd0789297a4cf5cd 24ac8f2f772afeafc0a05daad12fc5bc91cfe65a\n69b4a16aa1fbaf2e66b0e38019272b3d5942a1fb 5315dd4bc87d7ebab4ef4397564739431bb7aaca\n5b33bf95889452f4b020d9357a2746c8e6ea496d 3dfab238c3d328f388a04889365571684dbcbaab\n570b67d2cebca92fe27cb079a193aa385091dec7 f06efd4e9116e86def4726ffc1c6146cea25ec5b\n790fa424c7e65a3b21526eb61de7fa4656b859d8 438f06161698bc3d4333da1ebed618d461b632e8\n9cbc5610186687a6c04f4324e584f6a201e2df36 09f16055a8c777d720f980e65933620eb9a284f1\n184ef9c9385709cf6bc2c1cb454bf9ef677fd1a7 e6fbd81d199dc61a6947b0b7e40c0dfc758843c1\nbb03267fb0fa4ee65aa75f3864eb43f4d0c7f9a9 f2c265ea452547108f08432555cd05781d98f0b0\nc684717ba03d1916ca7a539a66db6b6c1b2906cf 097a061301d21e333c2fae5443be33a434cd9b05\ne1ce2f5f4d2959a677771fbca2e56047b5774941 a337d00b286e76de3382be54bf01878978c38610\n5290765969095f121284fd74b18fda4516cab8fc c9e411af5a575612e9a0acd3427dc37e103d0ff0\n86c587adac25feeb738dcdbe888b9737ab47b41c 83b9cdfc0111e848b5dbe0034a06e94e4ef00417\nb88758f2862cc16b83352c4228abdc938193305b 023e5c53d2bbc79dac11a88bcbfb66c9cb5a5e7b\n2daaee402afbcc088242a9dce75b45831d620725 1d70564e7d405ba24bd1faa5b6c9338aa6b6ee51\nbcb3bc4c9a01b45808d056518a39d7348e6586d6 e9154fad5fe40176647f2d9997f2c798f52a9a9a\n15d270f6232a9f466788ec8997e0b0b9b9107c1e 296511fefc81ca2290f669082382b152ec9d2d11\nf4aadb4ef96e305cf3e60df7b692bde16dbe38c8 74c73690cb0b3649b1a6dea57c04f5bafd1b2dd0\n27e6d1af87c12619a40b58a12439d1e02a766f35 ab2142590a022fe9816f06b4fca3c287a4be50a6\n5039d4bb3979e4888dbcf64fd6dfb98ef692b327 8bc39bd75fa0a61f4cd06c816d285bab36b1a988\ncf4a2b551d365d610c29d6ac7945c4307bae5e00 a99dbb295c7ba198c8540e91ba3b83578212c4a3\n7161c58120865672c226a82f13a8be0639dba21a 47dbcb02cf79de9b4327d69a3a109029139a869b\n54226bee3fdae880598b6ec2a89cbe6c6bb068f9 9e5bdbd962dacef79dac889ca5d11f659d5a99af\na5234ad6bb24ce894e8426053063dadf9ac8708e a7ba687e4c4fe9e33a39cb1fc08408433e280e15\nfde7cf3bba0ebd4e08f9b7818d29da26049c3219 48a52c75dcc543165ce985716b5f20e3b5b50a86\nd8d4eb38c422305f162f55ca89f0ab58b7180eba a7afd4c55d0312cb959f169fbb5fccc73fa6e1b8\n302c7e75b0c099bfcfdd9f0cb55a336c94e13737 d0662e656dd9fc41448d17086962510d5de5b376\nff56947a91095c6235ef6f71f72bb88b7b5791f1 71ee0304ca2ae7f56ef59f731db48a09ea111f37\nda98e94f06d4af72b831a9ea8f8ea518ce5dc261 c1c3b4c83cd2c74e282951e4b78c1e6c5f259cf9\n13c1e2373e767d11a8f9adb396b776d91efe4d5b 1f039de336bf380190a77a587eb1133e6e439e6a\nfd132187af3c49eca9061bc32e5a4885a31381df e8c4c78b116b55681c1673536c082058630ca327\nd650dc7de2e095e5723a6369e4f4675b77800d98 4dd7c02cee16a4e30c291826540188f9888f3b10\nbe0c6441fde01ed966cc22acaf64e9193d098f2a 52405b70badade6ae1506143e3d535f851159d18\n6d9e7a3fbb5a618cf5029357d603086b38f04c76 adc1078cd69c0619780b6ac7184edba1ef1a87da\nc9f4b827f1e70ed07136297e3b3bcc849544d73b a1c2aa8c8a248ff8c4d86cf1897917f2840fa7bb\n64a8045267fe9d8e95cfbe2d907f4fc0b269f59c 6f9c794ffd08c0e3ba60eca564a59d3d4fb6346d\n2a999c20db22f85899abd7e0c009b8061d0f9d8b 52d65b0f6c2b9304d9961927659af3c7ff6415f0\n96a509ad0b0466c403ef8e7cee1e9f9954ba0b15 16628283cbc8a12c581ddf319b520be347705319\n22cd6bacce3fd994368397f4f188e323f1847d34 25f8267ee3126b81d00addd5a6eb1fc1ea8abb66\ne8f653e1c85cfee727942dad53ad984e5a1f251e d015d14e8e2349ae6a0f4316362c595fcaaf52f3\n95c8a307cfa9e5d135f458b5a4cf316644597403 2038606dddcd3d7341fd81e9629a5119ddd320de\n9513843fb8844e5cea429bba0b2c4487e0006bf4 1f19317cc058a4b68d1c01cf29c500309c1ff534\n7b02544186ed9b6fabed6de531bcd0ffd5c8ce39 733081a8bef7a94d3299eafc891767e9207c4523\nd7a7b4ff7afaef2dd30d4e9856be7b32dbdbc36b e18f056d60fdd51bcfa8205eee3ead7a02ae6510\n372f9eeb6efe94504251adbfc9b5eb654f7b843e 4f1aae7ac03e5031458ac3b72a24fd824eaf8075\nbbf377f3eef7de32d4014db2b23cd9f2ac2c5695 4ddb1ee7b665a19142c9d289c56a0589eb32ff38\nfe00bd75b1573b85e1585c1055a6ed2e800ba29c 73cdbc15307994be49d5163a8c7793ff26b97abd\n372567fae3d040e94ab4a572c93917e41fb9da4a 45f4306e8caec2b66ea7797271fda89064fa0f1b\n45353ac556b6f4c26548384f02423d4c02f8c5d5 70a0d583fcac06ea06051d002f6fadbd9ac0bf70\n8d8fb880e7d989e828f882346efd84fb215ccf29 504ad0407c2430069da055451ef96c9615fe0247\nf905ace36f4205d200c3506afcef9b1563555a3d 8369527c710248c4253e539f6188f2b7464faa0c\nbe777da2c33a0b205c9a6d8e7ac8afdb598d2d7a e29845ece2d9ccfaf6e315cc912a4c314b129281\n38f1f933b05b0b1c66019a6795f58d4e732501cc 2625b56ec3abe75ca44a5b4920149764056ccd26\n6776036d763689f9a565ba5a2c46f93732fc2ff3 e20028fdffff0999a822423b5c4b076dfa2617dc\n2baad8b257479d851419ff452add9042eea481c7 1951fa4fe3b3e3c6ed837a6be95d025f8260461c\n0214e2c849b9883b30f489871d0b52964f989794 66933f5cabdb6f2dc0e686fbf3071f990dd3efe0\n82e4f3e4183f15975f0d0733e038421b22babcbe 006e6bcb5a16a18f6a171010cbd06bb576f2fecd\n52f940eea7e44f5ea3f7d1031a6497ed965219c4 36a4f3efb8e95a1a8ccfb0d66ecb99365052dec7\n5fead28e8f33975b95622d82a01c27bd4203fb65 d02e14afa2a0c162b5800cf03652d881352250e7\nd772d4905191fc4baf783394cda7d9ab6c798da6 748a12baffbe96f2e1ef070174cf7b4564d37b0a\n625dda2f4e2d399797c8be20846642ba45fdaec0 1844f2e778838945d206cf638dcc4feb23fc80a0\nd24f5283651d2bdd9b85100faea4c483b829de6c 1b13bcf745232d1a2c3db0157e19bffcddf4dba6\n2bee8548149bb79761c1e43a17b7c6ba4361765f cbd132f17f86cbc52983b631c6e5c62ab6b4eebc\nccaae53a43d15b596ed6f4407d0e7a6900da51e2 0103d17cad09fcf83ba7d285124242fff15a739d\nafc648a0efb574b79337fbe0aef1198079b4dfd2 20b34ad41cae954188e9212beb31f761e63109c3\naeea449f36eac3735124da44ab0de5f2f334574c 8103c8bb0359865554822e2b8d1a7477b2cbacd8\nf2d8775d04bb0b33d22722487f01a3447dc0039e 06e6266b8acd7e8cd359b871ed55cf43ae2af26d\nfcc4e981851f723872924936c7fcb843ef7775f8 3a41fb76bd183a6da044762d89063dac7472a69b\n1c33a53d397bd7e8057951941ddb2ce0cbc4753e 43dccc0c1f5684f13a13d1695ff85108c4a2b435\n783d6f2ea532d3f71ab1c0f286b9a0a1f04b527e 0e539760c0c5ac17a42e914773b078dda882e913\nd1d8ae885a58b44ddc2e8043128f77d067a562d5 6d215b09efdab87d2ce7b40a32e21d6f3e34fe67\n7697ae9f9a438713963377bd051d57cbcfa34923 5586a02e03d8772f8789bcbde5314fed33fa1b77\n06af8b96a2e6103abb0142280f41d52d4a3e765a d7ea1bd2ca2df1de73c86db4797cc0b3648cff32\ncf20982b4ce2e5cc0effde669d823118650e8338 adbaf5a15bccd09fb2de4ce3d1514e9296e1a12b\n9ab98a08dc3748e17c5a3f6ee205d45b20cdf095 004c49143f1f611ecd6920c690dd26f1049fdfd3\n8503d701ad4f1ea9d05a973a3b8c1072869c9c0b 0e95123fba8317f8b1fd86b46c1193051374f66f\nd87b11b0f1e0f8775da12b4af1e09a92d7ff507c e9dac97226fadc51883433334af19d9552cb51c9\nf52fbb63bafd1efc7da6ad121d59996fa8926a82 20e4628c5a0f0b51f30e3b352e39585d3d96b321\ne988804bc5a5b33f0861ab7cbd8f887bfc804e06 b280927f580997e1863a3d375e1828ff22bcdc30\n897c287cdfa96e581a733921e6236e3ce69abefe 51a33ada86e477c42458699258bbcd5d023f697a\n83c18db13fdc704fcfc04ec485c26d99af49795e efbfe37ded1b98fb2574fa095ae6bce42a1af85c\nd6319d06cde147df604eca0fc8f555b5e218fcc6 fddb0d3ac78a2191bbd8bab59ba48c8d857e35d7\n040591f330cdb2ad3b5cda4fab9d9fca86f7b93e a7d9f43926fa0748729f532184f536ee50d03e46\n42054f5775b9491868ead08cbc0866b99bcfcbae 6821687e02b6b99da3503b5f9d2fa9fb6ca9e047\nfb392d5e9dc76c067d7b4b5731656960fa17b31a 8f42d77a8baeec2ed90c471bfe009a1753145cb1\n545739653f18343b899f5a5a45f31df2f2593d44 ec415dbde36ffcc3ad9792c864d0ec0c0064088d\n8cd3983354395934a98c7b866f60e2140b293d35 f75b479e190709fcd8cd09972c91809403b92e88\nbed8a04061f3728ee67b10c3d155d82037bfb5d2 c7316ceeaebfe4f05662fa7186876255159cc3a4\ne8e015b1d39a35f6c20d9f48f2c2b81ed99739e4 a79df112cdbb143122ad10038ff67c3fa4744f60\n5627c1faf83e610840785bad5f46674b42ec138b 850c7af985e497da1feb705be976a1d54c606365\n3946d99a8bf5bc7e045f7d12ebe6e3e09eadad31 98339bbc0b25ebb09b7a20cc9192e5d2a6fb4ecf\n5cc2124f3f537739668d7f3e20ed131c6e1af7bf ea8cde8ba7cd78fb2a2460ecb39041b371ff3093\ndfb43af66910d81187135ce544470f712ebbfaac a2f99bfc8e58c50b50cfab8d8ede2326598b6417\n59a0181a829e7d2afe4bf05e2cb9e6e1cf851300 317b7daf3767ff86fcb956accce8084c71dba100\nb1c28a8480ac72909c6ca4ffc7bedc5ea6a87377 c5812f3acd18e8fdbc616c00b7c849b3be830193\nd84191af79be89b6903263fd561ac3bca31ce796 aa9b34c39db5b30d4afac4930af6817dd2783411\n66405ca88306907b4dadd52f9ebd55f20b126946 93bbf1314da3f518f4c8710a91ee8826c9be8666\n2d2e285ed49d1f8c270e1730100508a0314cbfd7 578e5491cd6e09d25d586796ac4f041fe2bc3e5d\ncab6c786e746268c0ce273d72f4a383c348887eb bc230c418b808791a366b511c4e715d3635d50d4\n9f442e6ae4b030c99c3a8d5cbae630455817fd3c 44dc4a47848c2602646df268244839c8460eefef\n9d622dc4416bc0aba2ac18d04e937dff1d1616cd 6df0eaac428afcba451948dffb8b4e068745971c\n075035bb1452b37b521ff179581b28a505bb573d 3b94374934ec4a2e183b41aa0560d2d0e0380891\n776a5bcc70d298448fd0948aa44a18f3bb7e8b6c 49c2590915a6fb9bc5eb23952f52d1e5169de13b\n6b23e311c43a55dcee04905810d99ab06a8c526a 8265385f81f28be765832c091911ae31cdb9f3a5\n96bd85c08b0b38d5f523df0d94d73621cfaeddc6 3531c0ede2278db1ce97f6a26f2dcfb115bc140b\n636f3fbe0885a5e4c8d7070285827090e055992c a839db13ade6950a5fc8a69bee267579fc0213fb\n70e7302846724458b471265c807294bd6578ee02 ca2e1a3f188e973c3a3f65f6423d13af2c9aac4f\nfac05cacf054579e099104f1e031f7e2d9d28c5f 69ee32d1b469c4893dbea67c5c0d7ff69a84a68b\n818b6429f87dfeaa3e154441d2e33d855b72868c 53dfddf46b2787cd22d65009c375183399b23af7\n70ca283197b3699cdecae06e2755f2e8a6dfe9b3 c041ff932868cf7314aeec220ccc4f8cbb075eb9\nfc3739bf55c3830fd07d371867491de00d6dafb1 45cb695d4d4c0246178bad71dfb9d8ff802d3819\n5a4bb1f9fa3ec039e15bf05d4755ec0b65595079 4be38c8b00a4cd620686a815fb8c6bdc8bb9c875\nc252230d0bfb05be6631356960860b4b71d00cad 8f661537d8791304535da9748a338a802bfc7bf0\n56d08f839b84ba21b2556c215fa7d366611df3d4 8631815a609d845d586d85c76fef588a99674c9f\n18a406d9c3113056f25e7fcbc2847cb31f094510 9fe7d79d958447c93b936c872e399546f83ca1df\n6909acd6d818bb6ddb32ea4242cc817b88e939e5 d1160e364afa414d27e5660fb12f886732d1eeaa\n8ff6a893d70af6a50ebc8e7a88c117e320864d02 9f64e103a8b5ab24488bd7db85e5abd660cda5a4\nc2efc4093f0e39227399f84bd9c6824825d5cbe3 030e5233970e29faaccecc8462b5c852f2a4deb4\n9a408ee77c703777f43058de3493943b4b46ccdc 55ef64bcd4fc59f942b98ea2415d8486565994cd\n1992277807ec7240757401b2eba9fbb23de5f4c0 b1affbbcb8c7dadbb8c9aec72f8f1a04a22220b8\n2b125479d7c6bcdf7d95ee0316ae7fb4729bd031 cd22d36d77a26820bff6b8c3d84886b9940b2550\n484662089bfaf74e11da3844916d99becbdcbe1a ab0c5057a6abf86518ef5c1baf1ada30f1731db5\n3a0fff31dc7489409ef3733107dd6fc061857368 caa80f14bb2a47b6936b67299e509699cabce44a\n580217a6df5f8021b33540ee5648be1cc2c89c7c 337bf2293b7cb5c06262d3941e3ad1b897edc9c9\nc86a8129f3f2ad4fca32b558a470c5315a60472a 66eb87dd5885e3deef5737731f4559ba78bc190b\n017c4364336db586c433f9d9d0f7e8b52a63b9ad 7e5c89356150fec9ef7697be60d95f4c31176177\ne94f48dd8b54a97cfbd9564e7d143a23c2fe0b62 d15f4f23c01130e78d1a9aa96e80ed1101d37013\n4a9b931776bfc5e6d603efa4cf5d0907e8e5e0e9 0b46e5c24ceb01a5512f08037085e9d751000a53\n0194d09604018932b9783fd9587902430158c932 40aecd169563e04c8b7d433f35748ed82175f450\naa2cb6e6e35f707af2175fae6c832708aac8a494 96241164d3f4637b3f0a681b09cacb06bbec66b3\n5f0a49446fb888a3969904dc6d56ec7852ac5726 dac80fecbc54d1a0f2bb4dc83369980a5e7a8067\nad3c418dfebfa8c1b5b28fef91cfe6e7542cc564 deb94ccef1eabc671f40f7f8143a0d34da1f929a\nf06de12af98cb78d98507f83f74cb039e4e2943b 971c7784a2c8351972db116672302c92466c03af\n7501e59f1a1a07c5450ec6cd5d2ffbe74d2239d7 187c2825013ed71d5ce3389b8e514b097cdc0ff0\n1300a4ab57da7b7b71b25b22b4d8013c27709776 13ceed89d728fd84581679cfc82399007b4eab4c\n4feca784421e5b49e9ba83a3ecb6395ec69657dd 42b69ad2222ad61cb087500f9384b4386a247c77\n30f310550d45df06d07e7b67238a29a6086bfa38 b7605cd17cde080ba72e46bca424999a1841a55d\n354df792dc7704bfa526b67da0aa262b33a86b49 99b8370589b5378140aac7d766ed974fc24b69f8\n5e14b8b2730223fcd5b78adf0da31e896bfb3fc2 b8fecb465fa80756361d5cbe0a3964a75dda779d\n50a5986428d245879244ab7ca43f2e6f51e504c6 42b94073c8ad1b3000043f09cdaeb03ab229d86f\na06dde4df68af864caf5d4900a65901bb0530664 934e2132c4b2c5044c183c4b8c5f321f006ec0f8\n40246276a902ed6fe246dc38bc49a65de524d3ec 93a38183ad0d9874d83778c1a32e5b54452d7dca\n4cbc70349d557d0a590757c9d2359023b112cc0d 79f263f7d68f81dba5808dfd95090d871612b222\n0eec58d955bd194da5f9997b5348d4408adf276b 5476c300d7543dc32ba260c3ab01bbe149a0fa66\n46189828c5cd6dfb5c0e15dddbafe8826d7302a4 e44bad841685fcbecc19ce6acfa7c1d1672f73ac\n6de7fde02fe85f37e08d3ecf0006e46981440798 990d62d7aa838846292a39b050e1aa50717fc8e5\nb3583ffa74482449e4fc6f0428a228df01d58df1 fdbc329218fc9f159ec5cc31dc9f4498f6537d03\n8e05a946b72bb6481912e12ffa4048ffabf484d6 0c43d49a101482aee8daae640bbda42242da12bf\nbe91b314a06977712a928e2cf59cda20a8cf6a1a fe16bb413c697212ffc7f53ff3d322a4711f6e0d\ne7cf5568dd80e8f8cf356ecd8bb5a501e4366645 e939e257bfb4f8921359cfbbe29be8afddc4bbd7\n44ca802fdefcb3b6e17572c4f86e4b4a92aec17f de203cd8c30662e1e9f5f820573890c3e1e26132\n0072dbfb1ba816394c7e3644be035a966377b0c9 33d74965ee1006eaa8468c2ad714b6fedce6d214\na67261d14c453d7ddb6b2863b0135e952723e912 c0c0d14fd3aafc9535a665cca748064b79b06b48\nfb974beb66816cb659a432a3e337575234ac7848 cfbc143b85736ab196affed0240bc1036b4b0e3f\n3840ceaf1de8333a85a7d30904c067fc9ef277c9 e1280b8969d319c0e595532aeffeffb02db48423\n14bd9b59ca73ce98b32a7225444891cdfc003283 fc3dc5cdaa45fdc9a2781af19c51d0a7b99fc5ed\n040b2970335f9289b81d156bc8e45e1cbde97f69 24dc96331f7b0f299c5b406af621b530b3132384\na8255bc6ded5a242fd186bca6932188335880cdd fd680429ba715d9f67dcf516e4f1d97df4468cd6\n9f5b1b0cb20fc03df800df09b4f3ea5f00d7f230 951eadf68e4b8de39d6ace69d959c554f981e258\na648487a0f52b818a89a1db06c1b3d0e92b09ec7 5ae0b1c8e72bdf632dc21a672eb900b4598398a4\n2f2164658a3e0fc214d07fcdd5b753ded0026fea 283fb95bf7838d0fddf3dbf36ce6b1d589e794f1\nc8b8e73a25f8246b10cbd43ec0b3b896cb85d758 d73bc59984ff1bc755be95f1fb98c8fffe35714d\n206856f0b491dabc8d1a0ac8dae03ac96da08913 1f9f82201a9e0439d79b74b17a7247598a4cf8ad\n40e3e85c29badbbe2b3270f40b1bf9404b846408 44e1e1b53ba3ece6abfa596a3d26cf1ec13ae6e0\nff9fc131f4eca14b6a821568544d1d002e022d38 03157d1d8cd60e3a20b735caee5d53f6d3bbc1c9\n8a039a3f49d45ae4decb6b98e59e65b9fcdda2c2 a052225265cbc221216cf7698bd06f636a023cbc\nb0b5fecf13fed550d2f768da9a86d698becf2c65 68f55af1bbef036207c3a2162b6116a0543329db\n1326b11dcfa7093e780c5fc4d2e4551d6c2c437e b569d6d55281cb8a3ab0203dfc71b3d9248b828b\nc90d840e4594a47d7adfb2c96474d4912297a206 5e6b08ad07591eb8379b2dc1fae768208f6ec9fb\ndfd22d909a17f7a01c7ad671726a7671b03b7e4a 2a4f880d0816593d32707df7d6e6b87f479974d1\n3e47bcc179cde038825007f3195df5a2b53ff9d4 6ff07fffb75cd6ae4c189d257cfc70137ad70940\ne7ea707157b829c005c79ebf5b5426ddf11d711f 59711a709f2aae7546bc6277c062632bc0e5be4e\n617f7cb7d564355996ada9b2238b671fdd830cce 24cdb3631ca8701fc04728e5246fe6ed4ef3cb75\ncf7cec096e74db4b5d857e20af4fcdcd5a8ebecb 88a2e20267ebb2815ec6efe4e925af40124c0cb0\nf08e36f4fe9e3e382916514fb8f0211eceb32ccc 7965bd17a89ee682ccaaaead08da7d5b534c5c2e\n2a9d3bb9aedb2a48e23d02b055ea4f481ebd5711 9cbb367f9c59ed7972535fa504fac4d80c0be192\nea66d2b1cc4fd3f878a15147c5a826ecd1c17db5 32e39258a828f220d99fda54e682941db15930e8\n3aaed296e548431f2e79792a34fe3d27434eedce d3ad1020dda221f23fa3b38aa371878d553f6b18\nb9480ce573a06a1f54148aa669a15c39ecd46e8e 431ae7e48c4716c3999a86c25fcb03b108b2cb7e\n56f6d892d5213d48515576ea442fb66de4792469 ec14328a73d675b4491cfd3402ca94fb01d9e41f\n17d8180c79efedea536063de4b471f360e7d612e 7529a61348fe1058a3b7a8a4b46d6496d9cbe45d\nbbf1bb1dfc4b215cff98e5d95f974e03dc066e19 81ac33cf8e71f821004d1ed5759344e834420307\n1122e618310720d67b43e6cd8bc8efc786aabcae 2327f0e101a50c61134a1486f300493ee4542e88\nd5d329128970fd3625f9173571aa6a20e5ad34db 9ea5bf7138b3b1151c7619f6d1f29ed085b70e27\na9b3108aa958a4bbfbf2f6f6b2c5030fb94bf8f0 286973a1a4aa9a7ba8fd3157c70813a34b0b3fe9\n4c6c6db8d2f0962e83a7a129f79040fb4010d26e 560016e7955174f5aa9a850d4d90b7c5d2f00507\n23b780caa8ad02ad0a1357c3d557ea8881b0a9ac e1bd60e3ab61d72685225f11857523d067999c33\nca80d1eee8379a96d438214e51c7016894082bc3 5290f7e2ad2c9edbb16d773c3ff8662f2f6ad6c6\n2ae272ee53ed70efb342be57d9615047a04207d7 10472bd695710c65905b6834113061d1d2f93778\n9b408c82421f7053172bd111f5b0f2db066eeed5 9bc138af86017824547485e88e729e373cdcb906\n0e56fa2f9a3466e743700e84bb6ee246af39df62 0fab75634d79c2d804481165a2fc622062350c55\n4a480597a3c82d123486ef7c0130b0eb24a04a5a 1e876dbbe63e8c25b099a9858c7202099d943e5f\n8413f984c586c1a4ff980ab41180f5bc346283e9 451ec4fad694faa77ad0b1abb4d3c89c983752b7\n06f8936d3c8fb7a94496ce3178a24979438c2ac1 74bbd0ddeadef496e94414a82dacdaa85eb1e305\n4a0bb7563cfd261481bf66a4d55568cde7901d18 03db98f80e97a951d84e2a700ced1fbb382e976f\n866ae2edf762a1b0c9c19ebd9bef4668035b7cf7 8de2178e437c213a101d481afe3c393862419571\nf04d6e094b9de0b388447be52e7ef9f0f8434eb3 61e641cd6141beb7e866ab62b5170a834d73ea70\nadeb6265628379d6b9fa5533fff73f4709d4f8cb 69def6f2f99423b150a790f6b02675f635839037\n25b784fa39ce096ad805a2323e61e6768d8f8d2f b10bc7c04502bd51b99416094932d93da8f23ae8\nd5a166d45f8e7d4cae9eb03dbd969d6983f85e76 3908d5999d65c77459a745324e3d014d754a6238\n2a19627e8886e4eee55bf1458c2d2d8eda12e222 2be0d17bb78b5cfce71713a9b5101ddf79fdd432\nd1669b5e07559e0bd909bf020742f9608573991b 19e1118c8821bccbd97b1edc0522e6502b6de8f7\n26774822765ee71d6ee6306fa6323bf28c9b67ba ecb6aca86efc2607dcc6bc2a18bd0d48cf991104\n2abdde4e1bae12455323300fbc9bfaeb4885b845 15da8b59cf974e975f075dcdf7a854aa055503a9\n4035db24dbcde3cddd05fb22b33dbeb261048441 83cef874a57e76ca549d8c2ddc1d708ea683e1e5\ne8cd49118aa6d91a629b212701b7d33d6efdb8ad d62f06407a930e247d5a4b4e3b68ee1339518996\n7b24f23322d7e5e637455f57855fcde7089e9833 34a1ed2f3dd2e399e859aa7e3aa3ff816f7eabbb\nae88e4bcbe4abd498ff8bafd5c5094512ed8945f 9bd4def1a533dafad70a93bc497072be97c4c4a8\na393217aedd0121d0d2561b3b6d298a5eb780029 1e5cadfb12478aa2550a1ce6acbf7f2c7c8ecdc7\n84137001ea0a1c7c9da52d8691206286dc84a72f e63c1709ff8af1ab2455af96c2a1138f50171ca4\n3f430dae90008f23208b21c75405aae26cd67d4b 66af6303c2d01dd68c035b214a107f5a0ca3202a\n55399d010ceef737443c3f38c69a70cbbb6dccc1 fbff9c1356204ece8406a35c79f83addd3c33169\n15dd65ef12c5634bf1c89f6e7b4b3923d8736c1b a28c8d499c67c4c87976e413e40a0d2f71a1711c\nbadd49ea25d7111b0da85da89e77412560b4f945 3857c2696aefe9edcc84139c8dd62cab0d74e9fc\n2a113bf8db21f3ef0f179201429f1e0e7c8f1c9f ec52dcbb2ad6922ea15ca34e895242dcc0bed363\nd30386ab7bd0018075b2ea70ca0428bae5a7753c 08260039b45c25ab4ce8929819c2a7d1e82e457a\n20de5516242c58434d55f68a0aaf4e01576161fd 9b15cf10cdfb5531d0d814774a4204e81addb700\n21db52ba98928a1e765a17f605f3584fb1ac4118 f2538798e91650deabd4bfd977ddf4bc6558d840\n2606cc20d7abdcf8c78c7b51bd35a746e5223646 3fb593acfae1d8e133edbb9848f49b3da8b5689a\n98b2416cf2134922ce3ee38269eec6267b2ce455 dae3a45300e0c132dbbe584e309f3602feb0df5f\n0358d348cccbbeda6cee63b72a8529214eff9823 5151265bcb153b69df112107c11ad26138fe1686\nf31b9d8ca7a1b1834f1cfee06fa0c5cedff648b6 f4534c0558de5b24dd59537399d1f569c4396708\n7421dca7139d13bc72c9c71c035cf5452d07d482 a20d2ede9cd1af497dc33bb6a85790695b34ec57\nc063c32056f402373f6aa84e1162694cfa8f35f3 335adb82e1d4aceb7635cfdd0323a41a6a8ea0b6\n682484dc8143d4434dffd2ea33af369d7f5e278e febdbd6c4ee8c8dd85f396f02a27c149b0e336db\na2a6a5ddc98931a68494dab9cb795ea31604c432 fecd5df3dd90db3a51e22a4104af21f08f69cf1b\nefabb1e60cb8faab79fd3f984f8beb20babbb6f4 30d8b79e6af9f916c1566de3b888b0b0f8ab68d8\nc95c5ecd65420620a71b9266992c6a48068de0a1 b58db72a641652dc15faabe9082d948fb7db3880\n92911c5e0a865e93336b4af67b47d9f2e276668a 53333c1e76f96ee99704aed6ca9e6b497c8782a6\na3ec82d135c3359b13d70c1c12dc18ef677b53d0 843d4146c06dcc78d3044f2914d12041da2a9fed\nb07c618f4e27082fcc6c31780a187e738d65cc44 9036f7bdd5afdfc0b21c6bbcd5e1352f10c1da7b\n2cfb6c882d5405e97c7e48151b9ec28e19464415 3171bf6a3c00cfb17e4918455f0401ff98567c65\n946322116f4fd438d701c9cb69fb4f2e029ce7ea 4d110bd9752dcd573813c924bb1f71806274355b\ne1e6d4ab13610f83c94392da6666e381974c28d5 95ed6528fb3c2b2a37be821d2611c95a001ab433\n648f94c9fbb0956e7a9304369a7ff7db4148398d eec5524cc6023df659b1db1429f195849ba83fd5\n59c00ca6e1257366113137cbc5b6411cfc9e20b2 e3259423e4cd7a04faa4018e7a0a84abbaf5d4c2\nc16dcc662a161cca33da339dcfb0668b1e35366a cd9bbdbc6ce7d16d1182448997c8c145f18937d9\n8436290fd934a9ed41a03e2d684cb62e4eceab29 52466c5c29037f029cf1a276578391a35756305e\n8d2aa7a24f1e0f753fcd9cfcbd782e2ecdff4e21 e730bff512db454143c90d33a069762e3627a5cd\ncef58470c3587be6de257cff032afbd18e37902a eb226f1353696581ad01e94a3dc6a89f8ade99c7\n554b14a74e8368f46d593808e66521ae65ea5a40 9e94fba517732e39a87ec7737349fae741ba7e86\n4e8c6dd1c048fb78cebf7085ad936891b67b94e1 8b99e88da6375174fb34cdb5c9390f98e79c8bc1\n29eff85422a3c4935f49121f1804f732a3a3ba5d 3cb7329cc86f585fe76a80cb9df687550ec8cebe\n9ed1ec30e72877f2c7a6a715d308fb0235a29a28 10c5339c010caf51815fbc07cdec1da0172cde46\nb34c26f383c12e190d391139868822a2a7ce4803 defca2c8505063e3effc53c72d6436bf066f41b1\n292d78bc4c395f7f28ae11797046a6e44ebacbec 8a3371489966474b96efcda9d5dcef3dbf66f636\n989d56cc28c6297af8b6e73af8ca85a6bc653c74 192da695ce9cf245b17c8e0172e6044a73215fdf\nd68acd75b13d5349498d938d4fe0cb23a14eeb2d a26e901fe60f4aba360bddd8761e1d521f7bb692\n6bae292685da9035f47150f7efc55cc27ed5c9b6 b627f3daa9205fef027ca2c5607edc8836f227eb\nef85340adb9552d737a2295d8760ce9ae3316d93 dc27398d5aee0815fc15861bf60b2336f4f7fe4d\ndd9f67df98ed841911461c3398328da0abb25929 b57ca6adfe3094eeb34409067891bfa4cfc956d8\nf15821ba4eea6249183565e9b262bed7e9afe885 063779d964b44f4bdf8d357f38f568c3485be3d1\n247affdb8f9c78416cf09911c745f0644a9951bb 5bf8d4eb90c5c8200036bd96cf97ad2612842344\nded6dff9e00243a35ac6bc15154142fdf548ec08 aa592539b0ea467ddb0ea1d04d48e576b5da079b\n607d2fad58ea91e341678a2fe7456e8b3f0ad9cd 1edc561af15e350fb4fe4558ebc99a01ee655a1f\n7abd3b7cae61e37e4eeba978ec7b2b9038cd1a99 58075b2636a438cb0d6e85190bbf5f70117c402f\nd02df5cd4847ced0d56bed4c35222b433fb39ae3 8713781126ef7cd83a12734514c7c4eb3c295b15\nc3546d932b6b4e70047adfc66923fb77de9cd0a3 b68238d069556012cf1f8e0073c5e82c204cc629\na49a9d3e5b27123789c74b0dafae7624b20267de e45572299a66c9dbc0a39a7c5a64fbdce675fc4b\n8b5777ba8af4054c1b7a86dcd4c3c99b82b507dd a0cc7fca4cec52a82615506c38a3b8039e7e2b12\ne5748962f76adeeb454d573b1f9b86eaf66af29b f5c2a4a44f3fa6ce6b6bf1578c7b168318889349\nf818b1083d55f1460ddc5d1aa9cfd9b06762097f 3523191e34f39af3e98fbfb6161cfc1eff0e0e43\n66bc029cd9a542adcbe5e0ff3727ce3a6e52de78 f834b9038e1941fda81827e7df08d521cd8508f2\n4822c4bcec38a93e192145177120c68e403a9eb0 c498d44768f1dcb53f4f2fbfcd7240b95ab6cf64\n03c501e371cb1fba776f8ffc7daf8d59b7de4c05 e50cd8b9929233ee47bad6d3b948de68e332c01f\naf8f8fc404ae06fe9ea5ddb2cff9c39ceec0c4f9 49414b0640cac48e1bdbf07e6eedd4739b6b60b8\n06dd717f54e2978e84f207bafd70d4fda21f1a9e ff49d463a6b426f703e20ced2de483b830fb999f\n287bb522a3f10a24c5f08bdf0b9de99642b8bced 9ea311f13975a8d880455b6604660a8e696d1e05\n71b34aa8b2bc5cc4b75d12863039d08d10c18d0f d0a94e458a7481d9fee0af7439b4ed7ae96d8c38\n27e9ceadcb20f07265efe51cc083ac9ab2f08da7 cdb04b7ed64def4e2a4200c150f432af092d32c7\nd6daf83a389bf74ae25ca7c28b55a4179e55a68a 5cbce8c0182ba8d3421abd95376830adf76fafb9\nd5af859575842024fafe94276f87a39548caec5d 55d79ed9d9a260ff7f245a4d7a643bc2feb219b9\ncc761ee011af62bb0dde9a2845292b4bab19ad23 46c1dbc5b477bcd1042b8144764e8f42aa0f1818\nb87d0eb17d7a568ec4fed43ce24b7b649c5943b5 1e6451c3306979e545f12bede0a1186f79cbd18d\n373ed0d2b7ac98df499539e5b4a7301c0350003f abce7b460e246355a20bb70e30c74dae4748c393\n0c41b2a93fe9dc08432f3e592399310964346dea 675ae1c2978779b264eaf246677a20e6b25b51b9\n36335c1c550b9d24d33cfb2999f94a5d4cd09871 615d69021d511db5cdc6f64640bc38c5b306d1ac\n3c73f9c9222373be25aed9679672760d4e4bab4d 3b325fd2ddc0e2e4167985f703d5fb69e18261b7\n2e3a05e4c6d0c47ab1800529f68bc823c6b3a3c8 0a03a417b115e9411b293a6d82c07eca42189409\nc5d882e0ec711bc74ced71332b8363cb9ecd885e 6afeb644e4a8df58d53dd68ee391c8abd2f106e6\n109259e18e3783c50ee7d889195daaefad4ea844 01f5f11879690ae8d39237188877a15f9e94c9df\n66e88ff69ea7a8e1e67cc2c0c16828f4235055e5 6a45ab28a1216b2424050fe384ad951f298e23f9\n967ededb6d323053c6491d52890d5d95963fccb5 7f12465764676c9b18e2e01e65212f39652254c2\nb14cd61549088ceac63a38a3b5d08dfc3220197f 6421a9f01d98ed0a05767cc646363632beea9cfb\n1e4168ead90f2a990eac63d7c323069a0c408275 f01c215dce04356843c7492f87275489080facfa\n8ae78bd6be097093199f9af2af44a6d4eda6a27b 060f36eaa2d8de2d173e480cb699d4328485d98c\na9cf8d62d16894f88714e033f9f9b6c35d680b5c c009dcf0ced240497cedc90b1399294e790d82ba\nf410f0a21f6dcf15203cf0faf6ca457dfea86746 d7c3ab2bda3d8d1985877a57b3efdd683d42ac99\n9ebc28034e7a0a9d2f3b7d4a5340e126a870ffe2 6bd9ea2e0f998a7d84648d05d7fce2d838ffd0bd\nf341ce6b3455744bcfa01ed5d6e7bbc564d8f21a 49c9c83d9c922dae66bef9a1f2283217421cdc30\n5271a2f5368d8a062040a7ff139b0c1d153d0167 a4d242f971e146be476eddb20057cb656252042b\n8c5d20850090b6b21a6ceee689e8f32a0957da29 e97284530b716618ef8367699f4706214acd3327\ncc128e111ef90c776f8f9c30257d7599fa43181c cff87777010e657bd8f4f9632b564f691e607b97\ne398f1766efa22f0a8d3618666d6e7adae80c6a5 0262551a510e8abfd45db5bdb82a404f35d442ed\n0210e9602fe3b907a790fa5e823edf2b85cac0f4 773838853fa3985ea2376b7df91c5bd2298a989f\nafb8860005228d42599cb229fdd01262d421fe6c 8b209eb02ae429c7d844864244214817197d9a56\n8423afff8e9ac57931ff0f3944e28e6bbf116dfd 6cb9dda62807aa6f81b88f8c38196eec1b5bb6aa\n69717f487a82f1f66a8a8bfc89de55c7b85b5995 a625e6dab8db4912f3f16c4f4ed076e312c0888f\nfb6e0731d878d8a9fed38802a1a12da97060a972 dd922f205ee4694b34497978749cf529f4e58fcd\naa65a7fd7931284c1ebe5d3f9b5061aa23bba145 8c12ebab35e53b9f3870a190f977c6d6fde539a7\na108f8e2cfbe9e42d5811770962dcfabd2e10c46 9e017f09533bb7367e5d8147d6b351d6521c6c16\n302be527f625beff9883daf75526dd936736e3f2 da4809270ce34e9d3865f81190da15282e3bb136\nb4f39af64c83e44db773c609eaeb0ab69aa6adbc c20ea768b5bfd620ef2dea97fd05eae3be1223c3\n51c9566932d8732a72badb51c508b9da51d302b7 56917ed9e91fe7aa11ce1d51187964078558ea75\nd0d4dbb2897f4006aef7148fb23bdeeef7b11f00 db3ddc9ef0a4ae47cc77ce7297c66b3d86182f4a\ncfde54bbf7ec444b8818b2a6dcec3d6f26586ec5 957284bc2bfc6d5ea6eb1307c3af858ec5e1eea4\n95999c048e5a51bb86d724f48783ddff5a9d95cf 7c0705dc4219a4ac2002c6efb3f85c1553784360\nf25f9f818130fa90940108f6c2aea63382b87ae3 f20944c25acf94311bfe598b09f89ed5082eafbc\n578fb78eb758074ffd5b5e969479100566692e89 6bfd245b3b492611f429472df48713b112a8ff25\n263c4131b45352bec7229f09fdd2d2b4f2ad3ca9 69675b0b1d942c3ee20dac35213c045a8fe57954\nf5af2bd86047b0f256c2d87e0f6031d2eb88a3cb 8f6908c9200e3122faac7dddd6c8727766d03880\n0ceef539857711ca6431afca62ae98164010e6ab f18ec47e21ce605dabfb971129bae8210b2aade8\n74ca4381244d29fe2366f1bcd6b924c0efec9e9e d8812174a6788d0f261d440a646bc993bd0a2479\n39f81c11b2fec4543378b19512e73addba8226f9 1a0e9e4c9f3a434d27f9c95e0aa5a48cbeb54349\n14554085ade855f947ca957e2e827b0f408edba2 3b73b6f45d1d7e205b3ed789c7782952bdc45f4b\nba575a5b6bcd3dc0f4b85346c4bdb40716f40a1d 37f31d0d6a7aaafc09de673c9341f9f0d2343e58\n060771e1590f8f9097a1c4cbc421a4eb868b1778 fbd4050898f0cc5843826a569e6a3133721f69e6\n929f2372d281162e9b2ef1868fa4f5d35a8025dc 95f3831b5f0ba20b93f7f0fd2f587784734ebb76\nfc8fdd6dc9279060eac3fa7417b3b2229d7c908a 2afc88db320f0e253f5d2de0b042a5a146c29f1f\n73b85e964c6c0ff39ffe29e266703e96d3256edb 27d2491a4e8b8f05da6afac0dac3baaeb831b6fc\nde10c1e7ce2ceca9c132c0d9ed3fae725b59c4a6 2fa55f3d38d99eeb14940f53b0c275902f8d7400\nfccd3c39a647be89304e035393d464e9983e636d cd557b52ed1d31949904ffbd74ef5285af52f1c9\n7dd9a6994e30b4745fd24ca79b7e2f45a25a9b5f 88be2238fdbcad2f8100b2aba528f874fcae2009\n279d07091d434c0a418a1c84f4ce387d1991f889 8356f346dc72b5f067cbd18bc6d870e302810e25\n02b5747e76cab1ff56302a59dc2fbb0cc3181521 2025311b01f81eb4ececf5f5c7ea9da6ba590f1a\ndda47bba22cad20145f024597a3db7b41f28d7d7 4897be74be2d1966067cfda885c5186e98f17690\n1f51d2578d24b67cd8d0ad87de9102cd3a6f73f1 3529a650279fa8c1646ceac2c0bbbad429f1119e\n24a89451e9cc8eb3b9af05731fe914266e903aee df7ef31dedd2118a537ffd56e5f3eaf2db0ada0b\na42b5090087fcfc71df07bc338eaf405dc561e58 abf0ee74d2c8cefad1af88ed3cd838b5556a1019\nca1e9af224952b436a74e0b43c1b1ad8f5a858df 6a0ebe06b18b5c90b1ea47c946cddc0d8a44c1fb\nc02ed049839cc79fd39682b42d79eb14103f2974 611759d1c2f395746c07cbed6857994c23c3a40f\n37e0f493b2f99bf173bb93adc6f8de74a7eafe24 2373b181088400782946bc010a31003f8da36de2\n530beec2b7b05fe27abc2c4a4e6315ed2eeef738 08404668271322c175878c14e17b5b4b0484ad99\n04648895a0f98c955b0cbda63793435637c81288 b6f58bbd0482ac1144489a34378914488cb9e6fc\n49a77578363aaf835f4baa67e6f442f170d2b183 be28293dd46d14ea503bdacc4ef2783b8ad30a68\n227d2e8c4391fb7ba17480f49deaa22461bcfce8 947db6a0055878ace9c469f67b5c13df7bbf80c5\n6e606a084771392829131a919fd3eb8a2c0fe698 e97d655df7bcc125b107cc66414566b46beff970\nebee4f4b74e3001820ef84cd1747ee9ab1afc3c2 a38754e8ddf91dc79b5e22ceb7ee24264d403c51\n59f385b39b27e1f0ef26379ab0058d4dba67ec14 45132e3a14496cc8c41577ef960ac00c693402f7\nd4e7190070c59bf525ea527e89d29eae59c93fa3 6e780aad53bfd25938adcdf6e05c4b1d725d3807\n2eba46464c57eb2cc7bb29a69eafa77dbc06dbd0 aa5196ff9e60385dcf2fa60688ccf7dfd8196192\n179bd611decc0eb8518c537efe353cdfaaacef28 8fb6ba33545393bb5f2beabd7a026a6cc382d0f9\nb967d158b819c8c5bc548548ed2bdff45bf378a5 92be0fab504e7aeee27236023eb5de42e5e17be9\n72e8ccba4defc5007906b6d7bb596ae0397735cd f7227439be478c5900fb77c80259e739a2883aea\ncd0a25987322b1790422e923dfc49e266e61e6db ddbe57b0f73b1478346bbd3b985290ca5759d5ed\n9a953f9fa4806f2d8f972af94c77a106f46742ce 9540e3251d463ce3fb1f3e002c7c727eed353a8a\n4fdebe5ea8a477c4294638e09ddee5c8fac58db1 1a5124f925a21057e62f37de4e54a43e49dc32ed\n789c28cdcb06388494bf7ce5b275c64a731ae69b 14bcaabaf423c0ea83c469d9ae32c907db3f50cd\nd1f2276b2b6a572a0952e1e210867a72c7bda21c b183085ec20b567ee46aefa565b05bac362fa767\n406c04ae16b281c6dde8fe98e7fbe2f797ba15f1 44cf09dd90f219028cdd1472edb3d298646a2f5a\nc86d8f1d89832aabf13a2375b3275bdfd556bba5 1ff6c62ef1e4547d75b9187df8f1a1c4b4b93253\n182dbbe5f2b0edf64699005b12dd92652f623b97 d67840ab3fae816a54528e0eed2808ee2da28e39\n81d713595ac20ea30f89afef60379f49308f13e7 6bac30a8733c988f5076accb605a4d48fa0e26cc\nb46bc825b985ae5e85e5036688be0d91cccb287e 20c2815543e53bd28087afc46f246b467abae11d\n46561ff73f92ea6eb6ef7b51c1e58d1127b07e87 c998228c1ea01b2c585a40eea2d81e716a155e17\n379f56cfebd14d87fdc2685640e92545bd3d0440 a267013c6d251a9148570c4cd8b194be52e38a92\n80787e82434d07480e92bda598e41741bda683aa 6817f9bb3b74c3e1be393088b62b669ce6f5e73a\n20926cc8429f399c9efc8a9ba0edc33d03ac02eb e0649bd930c91c835ddd74435e2e197abd58f2ea\n7c65e7495e7e167686e7affca4b20e8eb807a4b9 8cbcc4f296adb1be6b52ad70557d5e1dd60ce93e\n0bf0001a2934cabec63f84e1ecf97f2e67886d66 a54ce0eded8a4ab145df43cf49eefdf2c9dc8e85\ne5af13d1670c196cc4eb0c588a7faee4031e909f 5cb8c82604930d9e3b064eb7ddb56e7cd674e0ac\n2a577c410a3e8af9900cca54969965641e03e8a7 5d559082f7d141befff3ae881883e6adadb91106\n42ff23f5e08466bc7e181c0652724fb5cd42f4ee 9ea1bb65cfbfc2a1895443bf05560aca914f5291\nc8417155d84347d852eb059af99962de737c5e62 78089bb4ada1ea9f5a5fb01086581147ca1a0877\n49baaafb1a29c68ee24cff18a11a85d7547afb68 5ec43b551c2057362fad40ce87ae0ad55f439a0d\nbcaf417bf22d31ea092d98b9c64d66a363a571d8 4ddfe5981746759169dbc551024987e12d94b5ba\nf78df042e0e47cc3c4f570c8a515dc3640e36bc9 ae7e423b29af885eb0a5797d51ec6e5e904dcd81\n714fb65a78ed9672b2c7727f52e82886886a7817 042310a457cd632068ad9cee4415e994a5754848\nafb2c7c9c700e3cc8c842f3d7b6cb9f327faca54 32aa6450d33c10903ebab5228edd8333d7a814a4\n50581eeab596a93eddccfa45637af5ca01618beb f4adaf36aafb1716ac7c389be53b53877fcb6a58\n65e15d1c37b1bb03e8631137faf0b94e1f0aead8 465c7c2a81752e77189ecadf22b0e99d4df17ef0\n9879c9368e6b41c9456b56308de5ec5472d866d7 56a3f48f724eff11bd865039193a50d7614678cb\na1ead38bfecadc5a27029f29814df491c5e58c4f 327c9467b38082da805fbe36b76e9ef122a2c0c0\n70c3745b4fb96663c101987a95d94e225744eee8 303dc1d10e47c9221f170a3a65acd78dcbe45da5\n99134f6e7c3c78c175d9f77400c40077573a2545 fc594b6762831efa72d2db7ac8eb40a81381df48\nafe57415a60114da66506a8aafa041d95e127570 6f61ee7468a0501d7c6842cc475434e524492a08\n39151a35b69667e3a15f4d0282314b823e971dbb dd7efd5806c3a264c1bf19390e1892ea4ee13a49\nc99d64acad24945610249135e1dfda8163d24177 65a0f492cc3fa462baeb9bf166584cb0fdbd5567\nfdb0dcaad6d69df54373b07797d5e0a2828cfbb8 83663eb028453883f16fd49b144bda83d20b196f\n28de25c7437911133d03bfdddd127e272dec0c60 61bf88358e722624186fa773541024927f5b15d5\na83d142b77ada016f32744b83c6439379e6f9bc0 ceeeab2f5c02b8e60852783a8d3c20de61d516a0\n4e8d5a19ebaf30bc05c88c73c21e84a2277da13d 6a7cd2ea69e5439c01ae0fe6e3e64524134167a6\nf80af9a23248caf0bb874c93d9fe41083806a8d3 7ae2be8669f5da3466e3b25cc27e983ec774cfcb\nd39be6dbd8581922c7a5edbf285cd864f80ccfb5 3cd961bec3142bfb07308abe87e7eb2ec10053ea\n299c38a1e9b92b74a5142d7a0640cd89f56d18a8 5b52004119031760383cf516c38c330951d99f77\nc9d71dcc57ee1e9a7b81bfe3ed36a71a1b5c9318 7ecd0d2991eaba5495d29a597bb0cb3d96b79a72\n88ea036ad4256600a647d361e52b5228f3a5d30d 00795f68eddb331867bd55516361f58a4f039ab7\nc1e53e355a3bbb9e5b24ec16df36daa6c1f7bb64 31691faa0ccd764f6f872cafb1ba9716612814f1\n0525bbb37dfeb836c3843cc4b5f5447e94a5f45b 7091363d1f4f6bae88a57a5841575e16bbb502e2\n5b7fdd3b896ad8250066bbbf04cab57d5135fed6 33983353d68b5c08638820736a4897ef4d4dc665\na5c566eca9b689284fd1e56c1e666d10d32a1117 8d0a14d6e77d33b255782dbfcd439097620a25d5\na3b373feed2181f11be437be391783341c69d210 f9a1de1d1fe3a8d5b8e9385e0679244f4e036165\nf0889fa894ddc2bd68b16e5a464ad2941f56cf05 680b7a2e4b9e67c7d2b101280b29964531757b3b\na3259c6c917e10d822701e1de8ad0e623999518d 3112a98647e49fd43d2e9ca3e81b6ad67b1abae1\nca34299a230ff8cee19d6720c103df260cf17c6f 382d6fb113eb6536dff9854fae95a5d5239dfa92\n81c58ab3ed8fa75cb959e14bd90b8d7b678eeabe 52152d767c682065db72c03a5536c973a0a2bdc8\n5861bb165347c8be4d5cff8711687f791fe15cad 2027485ed0ea5e7d8b2944b91f45456e809edc8c\nca919dad48fef0778f9feff49f4d97f769455a3e 14195d7b5cfa5da377fecf9a1979aec11f09b95b\n41f45951ce87c6847217efda27061d9c5584df79 a0e302e3bf01d20e22d99ef3d5039160a4734136\n0d1fea8760102fec91e2f567085f4a2e43b6ea71 af443f166347be990f702fc48d7679a9b94e2c20\n32ebf24085395ed5aa1c349dc5cee1612ca330e3 4da4c9a610fbe328978c56f3d5b48fedadc29522\n8d062e793cfb0f6114e750a19cdee89beaf9d26a d0fd174573996be24124e5a7983c9ea5cfa1a0c2\na319d3871a43fba392e3c37747005441890025ad df47cc4043fc0ebe6b0bf614ac044a75a8a2345b\n38cc8571692f35ae71fe26a350fa562071b6f1c5 641685282bc637173862f26f1beae5f6196d39a2\ncaf52acc8cdbb556ea5bb39b0fb0541b25c16119 acc496bcf4975b5cbe6e955191e08cc301c25ba1\n4b7dfc32b2917350fd55fcfd334f0b4f773d4d54 fa6501c8b2f5dda2a2ed597610f4e266e32c00d3\ne9644d7331e4ae236d2cbe1e17a55edf9c946be4 c261eb55de07dcc773696a7311f63332b24c3f86\nbe89df0c9d931e11b0ed71dcdff4101338c27a59 703fc2663bb02f43ae2c7431d6d4ec33b7ecf082\n388cd711d526f710de6cb3e4aa44e4a72e7b11bf 205da26fb1e23ce1ad1047bd5a73dc847ef74e74\n69e828fcda86b7ba8746b52f7aa43ed246443f76 4edce05cb10125b5137d89d8b54a6892af69d3d6\nceb50a049a6b1cf1fd4bdeab0868b273f8de2ec7 e4808e89344f8d1de0389450d5f492b9f454963b\n855afa50aebe4bd435a47957db74fec65173132e ddd268fa51672e9e24698efdbb9da091f256b48e\n11dad2ee0e8c51cddb5ccb5c4328ca36e80aae36 62b83020fcb64ccd2926d913d627af49aac52f18\n12861894cd2d6607a5e10ea6d9f0eeffeb7e34fe ba9da6cc7568b82f409ae999594a012e85d7b01e\nd9f559f8d659b8e240c4259b9ee164661a864ddc 5e043bdfdeecca0f721aacac536de1e24d1819e2\n56ddeeab1da8a4f8c05c4a50e9a5359bd816e758 7555b55df01a24bf8a1417720214590e68010344\n1a07efeac5a62a60686bc7c3dd878cf42b00a9ec 29e41203018a230d93e0398cb097809f378552c5\n79a077a0c941856d2fb6acfd288d90723ebba868 0590a8352dbbd02ff46d10e6992d0b54fe3b00d9\n7947b639a61ad43c715968075f47bcfea5b5b1c5 0a9499183445341815efc6b8d9b83747591d033f\n2f16a13f1fc7992fbdcf82ac7dc0600d0a768686 1a1e430714cb8ddc22d77e4dec64643bf7af4f64\n33ca2150c672b985f4898bdc21b714d983e137f8 cfda71c61f607463c2d1cfea493bd862888398f7\n0e699e5972712b887c1af1c992609e5a542e3d5f 78567fdae8d6b935d8fa76c8f0842c2c55ad528d\n9f792fcc9a04da0c987a231e0a6bd1cce82e959b 84cd64befc7ba98be10bb4049948e7eb74afe95a\n28d65ee5fdfd9e748435239874e979d09fc91ca2 14a7603c23c04780bd220a24d9105ae4706de1e5\nea87cd753ee7e9b9d232356ef6eb7a6835daef5d 66ce31e85dbdb008bc9ba3e221e06cc94537c0d5\n63feae413f4d521d80a01ffa261d74c9475dd99b 63e1b282750f38459419a109b70ab18211c747d4\n1674ee19452382378fbaa9750d23f7dfdd5c4935 2ed4b9e297eb05d9f847026a2152647c393ada24\ncf6788ed56a83418933a3861b1e08a1c9f9ebe44 dba7c400b517b7c13bd0d1def2987366c892ca69\na51d100eed9e9648e480280cc50a72264987db1f 214543d9c540fdbf9f9f027b48a6d73086a6d51d\n7910e74b251df69854285282af1dc9326ff3eeec 10bf958f695a01fe4ed44f0d125629e36567baff\n373de62296c9d035659f016585fc01acd0f03350 3ede50f8adb4260ef62b735756c6891c643d8dbd\ndbd526c404744a672a1ec3357c855fcf52a69773 d7d0d40d8abe28f699e9e4f76b1c048577013b08\n6b2a2837097b47beddfe058f1f33c52a68fcbf85 c3756ddb8d7a71516c11d37ab2d958590adef59a\nfe92b967109541ad659286ea14aaf7de7eeca623 f5ce35900d48a2e9d8adc2cba43cfaea31e138da\nf8a1480ec40f7a1cd8ff00dbb2094dd50e283376 0787215c8a37d89698a9f3616b3ba3d6ba2f28e2\n9f03c0808e840e01b5f9024009dccbce694a1b48 ab05312d8cefc47298faa104dd0499078e7848bc\nc1a513fef55a34c9ff7e96a0c9d609bab13ad4a6 875b7315b22e5f808306b6676e4ead73435a3521\nf3ba5bf12d63293b3f3051f4ac6ed1afb0e4cfce e706af52718269dfb08d74bdd837ba8437bffe69\n7cbdf5d247816523fe90ea30c8db99e571d5bdd5 32d382e6994364163f38936d895958a821b770d7\nf7952c5fe9beb8b31ca279fb2aaf84ec22416a11 8a3702a89c3e21ebdc71fccb4baada7b18f441b1\ned2e5aab2604e42ca705bbedbad08892634f76e4 a09c90d805d9e5f2400904377a270792c6d03995\n39f770dd0830bc668b6ce373f4e364fe581a2173 89eb3f99ea5e1f2e6283b2b4c88c6d199abde747\n1708d867497cf0e77c60e8dccaaf5faf9fa901aa 8524e1734af98078d7444ec8a2fe9471b05d65b2\nf063baacf0b202daa16d6c33415fbde97ae1183a b521df809e13cab1f27466b4faeced2b94afa3f5\n1ac4f57e2034a70d0aeb2bc3c4793e643fe1cf49 9878e88cd33783f895cfa228cc68b61780edcc2d\ncfd978e5e0a323482e32fe52e9be2f7217b32067 9a467e3185a02334a96aaf4242d65a9e665aaae0\nd4c0d7554e60ecd83f9c96a845507dab6c5ba6c9 2b3e7a5301dc54a0e352248b5d46cba1f6315f5d\n23bef95cce681baae903ddb8f6d2e3ee7fa41584 71db124c7b3d18f43745e3d1ef735e6733e2c542\n92bad7ea1a523569d6bb547427c295093babc144 6c2e6ff868b68d7587b74eb05e467781c528b3dd\nca1531df85874992051bfaa1014285851b18f0dd e1a38b072d1ba6acc1332a6ae03a2fdda1c1eb4c\n85309937940e6a1b5dbaae07c119e9e61e4fc739 bcde08c67eec8e1e8f39e96958c93f7aa7d7bbcd\nb53c759fbb816c55ff44c9611359d29c3c18d047 0fcec2399a33dea9e60fc29ef1dbff445e118031\nb86f6e48f421eceeefabaa49f4d930545e3a7882 e6c9be9e4ac4e86b6bb74875086d97dae6695893\n6dd7f90157f3a14b6256155824fa904908dbdc8a f3b3eb424c71ab09dffac0839778f2c4da333577\n7fa3a5644c2404fb941bf481404ea2edf49ad007 3ad4e5fdafb473025c43931bdb6631d7e9358581\n905ba40e9a8e232584575b7ffbc3e858482a8f4a ba196441d3b27e9f8a9fd625c6e17519773a730c\n29e33c9324e8fb8d756238d98fc19a88f5ed5501 662a7a02e4b6184591696cd715eb5bdbe0131ab6\n609f14cc2d507db296d4105e623bc67a587aeda1 473399629bcf02ce18bd0e42967426e96199dbd0\nf47c9f0478a51e8debe56eb584feb48c49620486 1248614617eb39a84bc5c5a750975418a5936b06\nae0bb6bdd91323f9da7915c2b0d302e147147950 73d53d1351e696d61fd8008644cf59ff191aec2f\n1b4cd319df33097fc5b9b285e29a05f30c685010 ff35bdb56624e6bb8465d1dc1d9dc79dda93995b\n161b4044ca95a860e5fcf7e0aafe5ac12b24951c 2e124800e9f64358d6c7d9456436ca458ba48f43\nd135d369e928ffbc081a5b1685d9d22b94ef5ae9 2841e240615890b58002e54b89ea9c8d0161f369\nea827794cd8f1e9330d1561f736590b06054f4e1 f23a09d5c7bbe924929626936485d87b7a00f2c8\n58997577c664252e69b39e7cf4845e7e59616c03 a9a214fa692168bf3a82d791470b522b11f8728d\nab20c6b47222bad1792bd2f612c9cb40c89e2660 717f033405b09f75799a3491483548b7ba5a01ff\n41153716d1c2ee2a7ba466086abd28d096dd802f 34bd382094ba5cca2792ad008a20610795931be1\nc9b6933154615c6d54cc292e4280de56595c1a81 bcddfed78a0b03668687d42abe21925957c6534d\n48716d5cd4d07fbbea52cf52042f9f47ff174fe1 d3fe8712349e9ee51d90fd4fe8f1e2ee51ff0476\n4f37a446692e53578afdc82e81aededfc4a9e588 9e916a2854ef83257760d6a61dfc52a6159ba195\n014f63a328a90ee4d45d11944a6e6f741788b492 2dff04b914225f15b2c8f12bad1567cc5bcce0ba\n5fa560d8872439a21dabc5140a435803b347b06e c48d8df8714ad09885ba462e72127dea39ffca99\ne20b4636861af3cdb3e2192add48cf14a3006bea 0344597bf04867f3d1a0eb8f1f87fa15979325e8\nf9d935b41cfb569e0b9a01d03f1f2f7bf31d3cec 9d6a5016122a2fba814bf8273eaf5a8cf15b823e\n9f8593d8ba1cec3acabecc7fb607f70b30d382c7 820e6e171ed81155d0c186e58cfa373bf4c75495\neae3f6243b1649d13404f1ff5dc297fa03d36af1 0a0e9195124d46eb6c00f0616287812a0b1ed1af\n6234f382161d8fb759cd215044c6de9cdff1023b d00c1d79ac73b5a5b7e7e505bddb74bc3ab1521b\nc08e51a7d193d9cd7d31efaf62b55b26a4bcdc7a 1e48adea7330428dddf1d51cab9f491bc382d3b7\n869d46dcdb56d0c13dc39d084834817c570148f6 5847e70626908fbc7f939eb9c5bd9a90646f72f3\nc5ad6c86a8cc9864d414589570ca0c4763911d01 37ba32fd65c9fb3f2757fcc907a05ec3377a28be\ndc3af473abfaad16d1ab816d9f4d4f6f3aea87f2 be4784bcc165505d6e6bc8e7ef090951866b1e8f\ncca5bfd9413a6b3c51f4d62d84ab49decc9bad10 05ae84d2c0cc6cf929134c946ded1a2014e1e10f\n2917a5bb328295126767c955464a4e0e1d616567 4492613e7ba8324eb3da18a11c0b87fd4310b5c9\ne118940cb64ceea6ff2bebc7b8f851806f83bf12 cff160cfb1dae34fdac9000463746941f2779dce\n0530924681cff76881b0a41d9102029bcd772a8a d2f53eb3a949fa769fbad66db703b13d25e9bd68\n9dec93304eb041605ec6a759fbb238fc2e18f2e3 a054ae7194997ba336b6c9faa9926b9d46a4355b\ne5fd32a93c29b715b71eb5bcd6c9c5869d4d72c3 4f7882fdc1c13d44f38884afd6675f32a19ec540\nbb33b21ee3bc2cc6c42cd0882bcdd8ba1ad681b0 9b4c2121cd6be9de3128e46bf2bca9f177f530bd\n729966ae3b2970df05f3f0815e5b6e5f8cc4ad2e 7318433b158a765eb68ea0bcaea4324c5f6b7c3d\n2b4ad4aa417abdf818135025163db34a1767c2cf dbba2cc77b9441ce771052c08c42be59c29a9be4\nd11fd374d6761c9a69bbca23abc8e3144cced1a0 303bd85b13d525d883b8169e5de4c7412a8172d7\n340aadb26941e907bf7c74292e4f41a462a650ee 2004f901cfcebda0101dbc199a308b535754e7a8\n8ff38c8b0438ceca9f94808b654f0d8e53cf4b31 60126f159c2997d42944963acf2d380f6bc5a520\n66a62beb6cfd10d44892898a8e646d32125d7185 bb31638e1136cfe7f89268179a3f9dfd3f979b38\n6128a986ff1a323f7fac5e11e786edf624d865cd 5fe107aa3682938bf5288b509b460d5531d2bd36\ne3288bc0dc3996d9ed471d2200fc84b3c9bce7b3 e5d44b885ec2b5df9eb760fa3e043f95284efc75\n9daf301cb4171457e653d45d98d24cc9d0eb7e47 0f77d4e6585e803c1847d63a4b9b0d79baa09fa0\n368dfc7e1ec93cb6ff9c2e9dd7de2aed3bedaca0 00a1bbb8958f5170b2afbdcddbfcd8a4d0d473b5\nc9e6c23b4b1b390106f772df6c5c4d03303c7aa2 271dc578cc4e53f500b2c9a8a57f9e12e4ee15ce\nb858cbfd0048962f9c63859c563b89ee550b1614 884ccb625d5ed3a0e45c05b1cd5b3cd2baa3e90c\n2c36f69468af3ec8098689ee1676b117a6021c33 a8eef915d827686efeab46fd2c4224610cc7f2fc\nc6606acdb815c910bed03e6140f46293ec6e5bad 919b8bea7c4e666c3832705045765f92d0c0ccef\nc497ccfd0de2870a296bd71e939a7e40146a70f6 6058177a249795aa4c675817f6fdcbd574ca9d7c\n817305058d0839bc9cbd7e8d34d9de12e0d47341 424e541cb1bc59e776e8615b27079fef4d2983fb\n13cf9250467de6329e838944b1179d404dd7681e 723183ce9aac33bc20b7182b6532ff34ecee3781\nd94a94e58e362c89a223324659108339e11b2ea8 87c459158f2b5a1207b66d05642745c5ddd10534\n8c452e88029d0f55afe5692466aa289d4c6e5a18 bc1e3d3d7aeca3145a830d11bf35c161a906025b\ne3b07407d678cf5a26b991614b716346305dafcf 2998dac3919e719c8088413261998bd9f5988aab\n8754350fe24b5a469a0867757623b9cb73399a32 aaf55d8130818a44c06f02f03f6ad39f2b857993\n45ab335b3146a7228811e9d4bd0501167239bfec a39f5d4f2a98c8f34bce943220704cc541c1cd93\nf5b061c6d2e8e3cd6454073fe28ae48f18a24dc2 ab2d260aabf2812652cc26591fe9afd672feda52\n90ba9913520dd71c8f5dfc98fdbf6ea09af27b95 42efb3f7ed87c3bce9702d772da40d69dc0c6f9b\na5fbb146fcb329217f48a256c156bbebb564ae6b f0e157a19308956b5e6e92c20eefe5a3011231b1\n61c2c4c4c15b91ff02111de846b8cf55a8460f46 afe63d7e3a74b669ebe330c8daa7c5ac31bdc815\nfa7565e7deb16be5d5778f19aca580ea039a8474 7ba41b9387f702945230ab220c504f5ccc94dcd2\n6cc35e794aadc89ffbd7388e039cfb4b107e7202 af894f67669c3c98db90579011a305b125228a9e\n41d664e4be1a682c2e013b2ae59109cb4d3d0968 1afcd725a035ea47b915ff56a5f5d212a87cd279\nd409bd7c0c4a3603ea2f0efcc8eda0e76398b80b 98bb44e4f5fa2ba0e7d99d0b439e3fce562a3b98\n294cf58db15124aad79ef65a363c236b645a3321 ca85a2bb18701f5a79a12d75844c1a618880dd18\n260609562a88ba5e4d396cda6c3388931dc39808 426b8f50bd783a1bdc4de3c2cd312c8a6996bc13\nc179a12fe32d630759924beca5250ce4f51350c4 3114763048084d6b81ff9924736851d5cdb4b776\n475453d2aa9331195e25e0416457d6546708b447 58b60713f6e58bb1658bb727e2d7292b26eaf6e1\n3e81996e690d656d9652bbff9d900938d5d85331 11c56337d43b693d2f2a2d45310b9b61b268d4b2\nc954d7414f86f5a377ad729b708647bb7d8ec325 069ec66fab027ec19c7bdd4158bae0611dedb401\n5419d307e073457c8bf23d3d9c35829e2913940c fd0dad2beeaaef66d64e680224bf894417bdb1b5\nf448c6c7634388dd54007f530b2ebc5fd9629be7 93e4dda8d93b283d1539f17d44b78355912f3f20\nc6f0585cde060eab312b79bfb2a15762e89a49f1 a9816a6ed9fa05841159ea62d769dccbe4174e2e\nfd3bae79d2160f293540cc8403b526e5fbc1471e 4c97f9a93aad9baeea0f3507cda4181a242533d8\n1683c80c48a535e879f675b9acf6559228d760cc 9ef06940deb4b0e51cc2e7b547cd747f9121f0c8\nf37c081ba20a5d66d0960be84e7f330ab5875883 be6d2b33c1bddcdd2a74389bd5a2caf6152e8d47\nd004384bffe1517fd659dedc6da6f8091d27782d 73ea2bace9ed571c8fd187227943926044b22edd\nb3617324086e5199898c87631e5d93d1e56edfaf d20bad20584cc7bba463429ff54f8ed0cba4f5d9\n2fded7ead30628e78229a93b275a3323ddee2f51 1add617a52fef473b886bb3e18f885b309b1ac02\n41cbaec44f34cefe48c23b37da8ece4a5cf535b0 323cd04b422b0c7796d5f18acd08be813b0773e2\n3a7b11e3ba380dfddd79182b553a78e7f0328ab7 493042cb239325f8deeb20fcf75c77b8f88ac34c\n5861bb2fda50a297e7f51459ed396c010a48669f 68399c2cb4b24b06da5a301805ed4a81dfa7eab0\n62e4f4a76eae84e3132f55c870d0d62281853592 de198401b4b15c3f2abd192990012f0e4f86a454\ne3312b8817c3ec3b3125cf567551f229828de41f 8593d12be818f881517beee1cd6ed99d00462ed0\n34ae9a18bc6c3837778a7f4bc3ca30c4f6985cc5 22039023d90f20c04032bb2f3465721ed5f5ce09\n0aacd97168059e9ffea646bb4d01e783dea2d968 f00b9b11525abca28bed94a41552ed9718d0c713\n2a32d4944cb5fe9918aee4c655f31011be676b6a a721dc9b9c4b5f3cd275d3c1b7070c84b2f7fc76\ncf97798aa2e577f67d587cbbc19929ac45a892d4 64b0b492ea7fabedb253d7cc57e1b2427b1c140d\nd772e155923ae5aa03f11fffa8cd4245fff64ed0 e72a0776b0329176fd4b083593fa90fafe16ef74\nfba5aa0f976909bfb4729257eb7c8eb7cd253b29 22d916f23382130b185b6ee58abe6d1ef1786583\n2120f3b1251c63146c6b19e4fa735f3da2189c75 6aac61758457d060ac385c73ee07dc03e9963880\n520529dd9799af54683ef2fcf422e875b33493c4 5800dc57c10eb40443a2340608d5dc1ca591330a\n91bb0ee5406c69fa830a79f0358b8e4e678d535b 993f6f36e6eeb4c0a327bdd8f47b4d075bc8df98\n7ad49a86268f1011341666e5e187c12c35580909 d32708d1506b3fa4815c77fc42aee5e1ac29956c\nd182825401bb4ceacf11ae5ab691fa88443a8382 db032ab187d6ec749c2bb2c4cd06d66aab0ba31d\nb7e7424bf5c52fe2a83a67aed58e65ada3e35338 fec96f09d3c13d73135f7a0c9d2b88f685f826cc\n9f9cb1882f6f92f5dae65b6a55297961a052e2e4 c23de974348c93d985d6fa96b81a9eb2d4980efc\nb54e19a7e2beee63b69497f7a5edde7f7e57269b 4ad67e0b503385107384024d77b83d9ad456524a\n6efa1f12ff57030b0923330a3db9f17eb75e0f16 99cbf2da17afe1e3a781f013182dc0d48245ff21\ne098ec3ea0a53a5e4b2932ee33c949b6d55e8965 58d905b21badc02cf5bca49db53aaa8e10f4f352\nac816d2ea863a16bc56fdd4accb433e0d04e471b 9bcc7bb564fb6031f12a513cc680c21fc4206d7e\n710e3f4edce20f9b7629ff2d7bce0577f2c269d9 2439eb666846a433912ce874b86519f1ea50c6f8\n54214c7316304d7fff5e9704d58170ffb46210af acac96e8db619d3604d5b1b077d5662763293356\n19849ee277fba2d06258df62c5c757a16cee3c57 70f6ea7f7d2709682972b89654b63c842c2a42b9\n32a5019a4f28e45869096010306dc643c58d4648 ea954be24ec9375259b69614ca9d1040b064c8d8\ndd227b2f113c26f1a5ea6c0385e6a69a6b2970a7 5555e9f3efd2d336ee498b326f5e6aee72733723\nf5d47125e29135a5fbdde61d15b55e79cf675c76 3eec441593b9b434ad9f390d1b7e3ad49a40a095\n42fcd6fec1e20a9cca5c95c1235b56a95d009015 e6c513ffaa0f9fc81b0f95decf553b2b5892fcd8\n0c65333b7c9d170f4e31a77fab7890167ef99a14 18f78ccc09b8e504d877187c07a86f6f5f648b25\n8cde5b1611ba19788c174c14ed8af4e82ab7dd26 bc779bcbed7c578e7779b08c80644cabc360fb52\n89e2454f3c06903925481293527d1b9a04261a21 ad220ac86048384a5f6ffe254d9d8bae857f9b9d\nd9faa0175f2b013879ff70f34ca252f7feb1d42a 2d8caf702ed87a68fd752730d964b753a86ba293\n828b4e0ebe715f65d6b6d54b8ed62c7aa747f190 33208cb700e88aaefe48db695960fc7b81aa2f54\n61a602d25690250ba31d781cd2022005140116cd a6d5edebe92eaf371f3292eaf073fc764bf4a251\n7349dbf4f1dac3264b78f9d218fefe0ff23e1a68 b01ac8e7a9a32c7c7f532c6aeea6f0d242408a76\n721521d5b573c105cb80b3efe7490171f2c5f6db ccfb09b8c06dd6d1c3446669aa0364c5a78a663c\nf0394d5fc5e83cc20260f44f5bd2ce728ab01f91 b225d31efbcb65a2fc82f5c63bdd53a471ee9b73\n2bbad09000341e37801d061b3f113ebd890c403c 7478c7b09a18ced644c7c08039b45e8638736dd9\nd0477d96d6d4da190f3cd16a33aee6577ed9e573 ba1e2839b73f9d7c7f4ec4cc489872f70e793f70\nc774634d55638de45fa593fe763cb27ee3fb60ef f09538a1348c9a52674f83ea234a4899a1055353\n624a909b13c5b51667b98cbae8b355a5e5c98105 21151bf7734f3b61cacb2e6aa643b069b0188b9c\n7bc64e16f09f75dc4524777d5834258dace611ae fbf5c4bb91ae427264332b95207075ec0eae9de7\n9adcdef0d7585e80b1e6f26db0bf96ebbbd46c54 e50a018e102a9fa1d3a40605f88c6fb46d926259\n9829fc3ae073b366b2cd1282185ecdf6730a6100 2df1ae17fcaedb3314d59a01a9f2c468f58312d8\n62aab6f4a35988c6b667438b60e632ec95e454b1 8a3bbffa608535869e3c10bd2b32ffd11017c3d2\n10bc732bd6743230d793fb5c740e9504a1284643 466fd7863e0762522a36d681f4659cb6e3d08c6c\nf4c9c999e61c3ca0920729fead9d0637e55f74a1 7fb6f6aa90a63531a3e7d8ec9ac554eea25e9a58\n3046cf9aee2a7188b33cfa0a5686cc2b7dc26ab8 d10bcc3fd692f651e596f4cb1a84179403864e21\n784563795e8490a299101aef61c193239cc7e495 42741e920af4907459cf03873214a910b50c1a64\n84bae12ba70a351af873db4d6c6226ac7e975bcc b38b97f037d98195435c4d8806bf441b42feb453\n2bf0430ea78b57a28ae99d7f1346a78d9b928d9a 9d90ad8a5cb5d82926dfdedc21ce4e51513c2895\nc1cf1373b2ae377199c0d9f68f208b475739f854 2611c601e03e977ca6f8bef7399c4448addb53f1\n41e865bf28c306b186331713cfe74c84adb128b6 dd9b98c1a57e2d672ea0e7e816369cffd15063e7\n1e7e7be46f8375ab2f23b0d4a31bd004bbd950a8 62cee20a91fbdf9e99c552b8056a11f78cfb09df\nf6fdc396015589d70f03dc39368ac71ecd5216fa 0932ca23062a2cad27d2309edb19819da41c0e9c\n21a4f24fb2e164d24ea88c31fbdc00da22c8fe26 423331e6ca9de235cfe861003b5bf9aaf29c6194\nd532805bcf7bc79cfc1235a5e5028a08a1c94333 2db01a03889c749bd4f5c9f62b67bf8097d43d85\n530f4c365aa902a39dd8b90d6786527ea06ec936 0db310cc9f33119b95e3d67beaf96326198c707e\n51790a121e60d97eefa25e84201bee7c870374b9 ad3138143aaf90f2419b5a0fb9af81f6b1027047\n77abee926ad6b9cf2dd6e41cd4ed941a60188d91 12725ea6cb3d9d23f099c5f809e1c8445970d3a1\n89436194b8ff66f4c8ad4816bc33a0c6bbb183d5 c9adc19623b20c0ee796f96e6f4024410ee6dca7\n89fa54af593edd418a95c317e9df0b86f2bec6a9 161d7e79f6de3ae216fff8c05ff2d4329be533e4\n815a065b26fa344f66ac7833941b576d181adc70 e681e9a256bc5908b3d4c001294136758fe8ca3d\nf6979723e9320147d0a960045a2046e2c847f03c 26ac822ce9814ef83ba938b5e63618c66f16cb57\nb6a0a34a8a5edbf5c637c92f4c8b5f05066a7dea 0caf717df6bc5acd977fdea37539ad5f328ee495\nc0b4e8f90f7ffb94fb784dbb58351077f1bb26c3 94779114adfc073974c591e50c6359f0c6d239a5\n4aabfc3b3b4b78ff0a1c4530f71e08140002986a 09413ca440cd29fb8790f03a319361f0cefec8e4\n0d00565e695d7357fb01c3ec8badfe283f2f750c 40ad8c937a4f524bf977d82870f477eb79aedb60\ndc79f62fb68841140cab6a94bf1506acc8c415ea b2125c9476c377dd86c251d2162fa04aa56dc967\n98f293d6420c62edd1b9b13a47bd0b7875581149 a2f3e91e0af159216ced9a76976caa01d57664f0\n35209be8203e180ed531308a44c36ea45f329b5d 5ff3a2994fd5f7c6f9dc33da7d4178ce935c4b5e\n2d2a318dec9b3f2662188d4ff2cfc9db0cfb0a2e 60a5764205a55edde6f2494630e19f52f0586d9f\na6aaf8434c3f340c78086bb6e4821fdd58fc1fd6 e60ada49a71dae03fbbc442576c2c225b9765aea\nbaa0e25de96d22f7ee99490499cdcc265df2fd10 7e711488d17e50116ec723eb1f3304b23fbe4414\nd61928e0951141870b98e609ca48375b91d57d45 befda1c4609d86fc2bc4b1f086bee5713bfc61fb\n6d1bc7820a11b90b5928074ad69798cbd7786d36 ae57443b187a7c1dc832d6bf0ee5ae2e17ce01df\n7c50d8ab9f1d6e984dfb71803c0317d89c3bb3e7 8cdb5836ec13dd5e44f1be7a7f64e617232c9b5b\n53fd4b1fbd71ec2222b4bdcf4d49ccd84815d0af 256da60856bb9a7f261a0d30fcfb98933a1eb993\n81c15bdb88320e87efe56ac0efe74ffce86b81d2 1df135cf88e26515ae8c826c54765450dbe9c801\n501ac5bb8c3a05e768c7e2d30b67f72eb7ffd30c 7385590c674505c35618914c5bfaf63bb402d059\n5313389b422ff9b4dea5a7adfd4d700ab11768bb ae9685224d9e89f48bbe6bad085994a51b11c0e5\n8b42b7886ef4a5d28503c4572996b016b4bfd672 895ca1e22b53c1da9376412f6484ea23092d48fa\n5dc885456d15cd7368aac2245c1936e4b072c446 98f5398924cc261c51c95069a7139074ad4d801c\nd606e4427458583edc34da1f7a0b761f8c0c477d 4ad87960366746c947a870442f99b07fb88baacf\nb8c464e19dfb44d2c2840c96a27ceccd00b8e583 c35b63b8dcad966d95c9716c32eed535f40de4e5\nc712a9dcdeb55161c2811c88d6b26d676b1d0d86 415ea86df38e24e5d00343c1f07d8c74e582f7f0\n0a45aa2b66981d5379795c271acca6d49909fdec b957a25b855ad141ab164abd74387023a4dde30d\nca368068b2655b9202d720a252d423e681cfeced 758cd461f48bc7c1620d4902880a6a1bbbeab4e9\n49367a2cf76508dd83fcaee637c6266c1d3eab8f 99ebcfdfce3cb604a1f387fe61a5a49dd732960c\n2f4ddc44d7d4823718e8f12b1ea04a19d322ba41 61257586fdae220372ada1f9d19408cf75839247\n7cfe2a9d25f7613fbd43615b90fc47c705acd269 23c5712e1a676124da1e2ed94827a2fceee9362d\ndb8e786c8b3172d45a9ee6f70dd2b91ce4abf4b6 c5c0f40ae24dddeecb8f23ae2048ead4f4ea6ae3\na8a8523d49e5aacd95e199f466f513c6ee4fbbfb 5f86f8ef138ce3c4a727ff7b77133f609f8a690c\n6bf58bb0a31e75d4b1de0e4d1e5f9c79aa874878 29f0895933115d081500227e73c6dc58e2457864\n120a57186cece77d6bba6ade2744a6ac7b4313e1 bdba6749cd86aca04eac3ca9103244bc2aabb450\n66bee1352be5988ae2a5466c074a36a52c9f70ca a913d91c2eb19083e141b96faf11feccc2905b70\n57b5e57580f18e41d1e9b6e7159f4d2ec3a2a07d 212f2795d0a1ed92d935de8ecd0b8073eb26e89a\naaf8dd8ebcce34acd45424f5d5bd064aeef1a1e3 ead39690a37830a5d950c1f4d9811b57c9c75404\n64dcac6f838c41ab65d2fba471d6393b06a5e0a2 02646d47a75ee37863d1e85d61fea7bef2ba145f\n57731a8e3cca12467fe6a4c1680a043c35791a50 97b947318d09696f16787929dbb0b6b0ff29c9e1\n10f3cd7a3134d87c4665aa6df1f0405c1cf2bb66 c82c4f2ceb2e800b20d23a02ff71528f5639b91b\n84d7d099a6b82be12d79b12e2dca3337d0e98161 6628f92cc940073581d02a62176e8267b8f71024\n9d33dad688a534c03577fa140717fca720108a10 489dba105febd72a2dd924f3d2184c6d2dec232d\n0dae5956d13b2cab9b63efde1346482c5bcd1e34 1da32424ac447f00cb737ccdf391913ca577eca8\n72771fa511b2189f6befc890047a1ac533575da5 d3386e07a698e3ac542e9e87e4a80c7ff5e8e567\ne6ea1b980766d9be7bcb672773616bee850c6a8f 779855c3b2639be1247657e342cc2a44d98d8572\n69600afa7f1c0d33db7e3ad2b3142e9b55c52367 1bece3508951793115b74ff3b402b34a723ae922\n3bac541dafba281d49841b3b4deb0e7d73d3b025 576b03bb166053055139b5c6efb8fb82326e0105\n6b9b4d62f85d32d347fc651244a2ed14ed55dd3d 7677bf51d03cb01d90c86acf7f93b85600f1b542\n6dab132af8ec57bf45d1043623fb7eb30d81cb44 d62eb082f41a6d81018a367bb98b5b180e3f8e4d\n304d3b8281d752e8162afbfb242969814d14e993 7aa2cb77569482337962adb064fecb21e9e99eb3\nf675da6c777180afdfbb70fe66a2386baa4449a4 52f54e1f1876ca434030872177d7d78aef815f2e\nbf04a2f251b965e44f96347f466aa12c23da88b5 fe3726e20e0af7dc69b76ed0b082b28c9c664145\nfe37d7c9bcde83affbd7c67d344c1bc922aa3008 50fe822bf50dbbf9d8f7e6dc72f73469535ac8c3\n02fe8a1a2ec735c30de160f5256878de8ec6e495 c03a2ef0637cd07bd8898218e73cd7ad1d18025e\nac53152bcff325d44e9a6839c13cb66a89b5b481 77510863c31ba126517de43eb4970939c1f9daa3\nbd85e832cec671ea5ae2d6cb16d3c2954673f30a a250547ab8346de2ac29233366b2bb74a1da72e5\n438584580f724a0eeeb32ce63796b8ff1b541b33 cb4789dec7812cdb96a94a23ff1704a63bb3bb20\nff1e6b17816d2644d7e4152ee979a24996d943cf 91cb6936ba43ae239af2d9b6b6accea1df408609\n93bdf3048de25facaadaeccab30a49debf95e2a1 3f46aea23477092084db5d820ba3e80ff26d59f1\n8094e8a440ce5e8294c354c81083641e0497d9bb 61da824a3c7af70f0aaae6145a421667ffd31938\n63ae517c082b373665549b247d7b44a5db881509 5c11dab449c6f104e3e9e4aa77f5e062d241d241\n9d35392a3ecedaaf7047e2d75e894decd359573f 92b75ed08951ce21f4fceb9dbf4163c670d718d8\nd2ba1d4219c2a91cd5545fb610f054d5c81c5d98 13792e853ab874a0da0637ce085d6cdb194f7cad\ne0d245226beb073b241588970dcb46338518eb9f b5da158e8c44b8ad3edfbab6072905108e99c476\nff98892cde6ea0081ed864a0c05fb9801658dc60 f2a7766125ce174a69baf55ebeb397d9e5f2f19c\nd202a3a99c43d22c208776059715e8abae3daa79 d648fd6257683c8f062729e06fda6c8c00bc94c6\na11446cd8c73fd54a4b211301273f446c26066c2 d84eb3091c366d06df9a109f06c92888fe8b7195\n6d707c407eba5e5f26af23cf2eb637c1d9ba8cdb db6fcfa7d7e02fd4ce2e2958421e1f8c7271beb1\n7d5c731eb1c4f6886e8c6d52ef5f576aa5851b78 c5d6d823d4a90c6641059a6ad3a72a611122d059\n86ac9c97422ff5e2b27b39faf990257dee7cabd7 35e7f290c7d0559269f15d6001254b82a2810732\nf5724f30a1d47e90e48a6b845765a97000ad398a 00be5ffa821dcd0304e532bc57626e7a5368d165\n9ea5c9a0da7b1f707dc13dacf72e0bef7d17f2b2 67c965639cb2d354656986025e453288ceb44bd0\n7a9e79d92e01d1b89e7405848cfc87659eda4db9 af3764efa52fac83741af4e9070a56485614a0c1\n2b8323bea314f1f2071bffdd86398205f93c7d60 f357957d0d4c1a031cae9f813feb9a70b954c449\na0a6cc43bdd413974943546d977422ba3af57180 5e307724520bdc76a77b15d563e802c5a1400ca9\ned3d9b1a5bc27fc771815065f309a8cd985b279b d8317456f09ce30ac1c2ed325aa400c09aa45c27\ncfab29c869a3d1c79a75f4e484f21b7265912eba bc4ba1d24ac3853baae21ccf882b0fa55f9bc388\n0c2ba79dfdaf5aedc3e2e7d5f7e73aad3e0d50ad 42a94fad3a55bb1e6ea500481642f28f3fcb06df\n2b94826d5b43c2a7deb327e576ed9ba2d5f0a255 bdfa07edeef78a03fb2314de94c161405a2add24\n3550a75c746e079e24944832af9a4081ed6e0ad4 ab0d4c187f960deae38d767a3eeb44526eedb0ad\ne7bf5ee9c97e5ee2ccac9f4556c0899a6a4c7df4 8e1b7abd187395df161e790e423bf1f4ff72f027\nfb5dc29b6e7387a27cbb7dcdee0e2a7bd07bd13c cba0d644404caa4f47193b50cfb305ea861d4ac2\n5da9f7b1bff4230916dc8532cf0947ce35a91b39 e33a2803bdf4fd30f2f43055fb2a75b8c655a4cc\n32efd7738c53867dc31fb876f7c08045eed19e61 2e73ad93ae97246161d46270142d1ea0e6637fc0\n18284958fbabcb3aa787c7270e74ac1b63f26d51 24ef2b0566fbe402cb2a13d0912e69a321c219ff\nb1ae600efbc8ac30b9b73c79caa72951a38bdb1d c23ccd3780a8001993a7155634912c41defe6294\n6acc628ae231788a5f3107a79eb4a146ea2e5b03 6b9874ede6fc1a9b6467e9f0a6e6ae95cde20c01\na1f1be20c8981816ed9709dfa28eb4180456f24f a728f12216a753d1228fe4c3a19a0225dffb36c8\ne7704d175d60095f34457c4ebb53880785e14b85 172780ebc8567004b6eed2c28194a8e72086a563\n3989b46860c098efb17568ba5799c8602333052f 8969cb953e8064c997063741a846111237edc1fc\n49456dfbeb53abb36e56571705b17052a5f6d1f5 890b478d84ef205cc965bdbf91faed370d5269b4\n35d22c157b7246796ba50ca6f979dee7eb1ba78b dde1f5e5bbeb7402424a5a5b8c7e1cdfce547caf\nd22f2558f936ffbde883c46b57685ccfc759ca59 f477406954bb19d5698215e149d83d99dc7dfe7e\necfc459d981359f4f4b08c9c62a7cd88ae30f1b2 e1820a0f4db2b4dfe09664e7a90a5a7ed0641b46\nc430c05934deebc4d5e668cb7ee194eeadb9bfc7 6b3bce5f518fc28c0e5a6d958ae01f45486d7495\na21bbe279a5cc5b286bb46f2869e4b243e556e45 fa15343852d7022a573e1e293e16ec65963fb212\n05fbc276ccf5209e24abc52c61358e6622644fae 03ee2eb2e6474bd0d6f32986b93975174687b5a3\n666501a3364a705920e1c760e7b667d0e06f01eb 715f847ad2ad0d214c2867d02d471214acebcdef\nf65db2fbcca04a062cfdbe5a05ad56a0da37eb79 29ccd5caa034d294adadcfd0f670d920faec4a42\nda0f08a4bb1da7de2a37e50eb59324522591685a a9a08ee921643b0bd9ad62bfadf6707565fdda9e\ne4ed9c317dcd631283ba3cb0785b09921eecabf0 75c842506334dbf26784f4b20cea716ab69779d2\nf9eecb71e309117bbe4144ceb714e934883d4a4d fa07a75361c0376797728c94fa4708b2652439d9\n6d4ddb647f698a39ce1b885766e4ed2620c0e015 cecbdba9efd21b0aa294d522ac4da196dad39ba1\nb9854f719a3ce9fe51cc981ff4ed112eeb1e1ca2 6b19ac08e867fcc18098c4bf597b23bcbbac4396\n9d440c1faac5724472310e88e585d58d3ffd363d ccd0043445650ad4044af8e88a2072fb7b98d352\n4eb40d829a510aa3b13ebebe9f83454c2ed28f21 948447a12134328632c3c55f4db14517fe19c21f\n2b99d8a68bd53738e2e50c8f167c53decc2b0d14 0ad44658d12cdf834bcfc06f8d353a167085e31c\n320789d98f038dbc7b3357e7cd41065d96c11a08 66468a705047ffa8855d7541a45f8fe5d7b8fcdd\nf7a9feff59584fec52ec8c958496093205a65ec2 58bed0917c2f233d090338f0214f8abadc239d29\n419bb39a86363dbc69a6b0688d666238ad41646f 7110cb3f3021a47f8c7d35483f85c89dd928c145\n0b9229019dd1ee4051e3998c89dabdc6340034a8 1b7fd5d6a05a7ab073e46b918ae3bd408b47a7a9\n80c3ceaffa3b27693b0cde0be729d3699347c4e1 3942c69747ff5fc3f703fd51966a1b74adebaaf3\n5c1a83f9c4dbecb628e7c82440694b789724c708 c23fca381ae99501c8835b08f007fe96dc236e04\n7e42fbf8d546e83611d516181bf60d11fb231302 2e4d9977ea74e9bc26d2966741d8d57140db4bad\n6dc0603bdc8e58543658fbdc4ba49d14e273f822 2080a1a116a5d508c7057ad9c66fe984d619135b\n3fa585aec35e733bf1abe6fd5010d1429fee5d9e 2fb8f18fb2345a9d5776647019cda00b05a60cba\nd82459a461b7a33427d284949e88bc38806ed686 66f0221aa281e54c03d8690ecd9c6a22b867977a\nb963d0121797b7313f0d69253f4d8097b400db96 a84d3d72d70061e620c85789583882a233c47557\n29df0f673102b9a97e78c76034987186ac8656cc 8dba529128efc78109a2ecb6bbd524797053553b\nf3ba3b2e4abecf23e974638e4ef98e81f9d7ebc9 ceca9566b086e6be231c4915d48d99336c099b2f\n0c46e22e3a62b405c42c0c3d4a1e5c39bf00a76a 1c3e6b80169a06a7ab22215b70f9a8286dd3e3ec\n335c4c1b433054bcdbb9353348b4fc787fdb0cfe 748c9751023fceae98b0765e0758bb9f513b9dcf\n49a0c41e47e88f63d277787ce82dbb122431d51f 58e1de5d9db065639618c3a3e588d2051db7a938\n6c61d1e1b5294db6eadd7c5d0972f12a693f716d 0a2cbbcd974412aeb2a91dab842ddaac20a16c0b\nff89e50c19df6525937955a9290a6b06006dddce db102a5be0c2c64664a617896e9eed44d4de50e0\n3c33536f9b76ae3124d5456e310eff8cbb71d8cb 84218b470466844d0243df3267c81186e7f05508\n923fc8a239c8081f3304652ce1a6a12d03e05082 d4291fd311423c32b634399aad403c8a607571d6\n86d83bf062df58f7d6a7e69303393c8243be1ebd 82f46c1f446878aa81079bd8ebca37c17213a742\ncfd7507066885a90d906926f5796c750c7d7f213 0fd8bd666a3369a9a5d99ec9254124aa00a5214d\n5b3005406820889ff3b4215f7731b98c5942b118 d4836245ba351bdddb14d20bb7f648b34c20877e\n4ccd2ef0abaaff38cfbeff22123dc30adc450b93 cc9a752257650123303da1c64f6a698e52450363\ne0a8576779c0f0792880de3c22b5289c622fe885 5791535a4e5fb10226021001cfdd2cdd5b86e89a\n9c117579043b73e463b76cc1e0ba10eb8acfddf6 be2795c7a20af94d4f0758e008b500a7e4735342\n41c8fcf886e1c1086172b7837312c2f35362b8e8 fd61b75553977abac5d7d9e36b64a19ad5670117\n173dc7c8417bf118ca0ac47d0af8d686bb5b78ad 852e84f485df34110363d8a8a59a1233b8869d97\n5b70d76ac0b7d54a9d3f6efba2eed4288137be17 350d67d36cce811fc59a16352690a2284e87fbbc\n3fb9f9b1b70e3824540e8b047975793615841d13 ac89a8568a4b120b22a7534193535d49162ddf5c\n870ee3d8823d1615182f134a4632b1b06cc23914 dcb87e442e835826fc19d15897c2ec214481e693\n98913a8d04468c503d0abf758063e1dbf71d6acc e43ec06efef0e4e24d719a9cb24847137756106b\n826de3a5674f8ad2f46196ec7eda8eac21155db6 c545233408ed16949413d230b52012c3d14ee65a\ne028facfc579745990c79b87738aaa7d83077ef7 e4018ce5a0e598531e9d96b39c718e0f109ef448\nbeb351c861ba6389ebb73c2385c60605745103a4 2676b143f7fcee4e7428041b57f86cc588429ebc\n441f9acbb758973cb6c2032358d2adeeb56ac5ec ce6bc3ddf9a402a9e7253bfe5125bd972bf713ec\ne819cb1475cb9a54eaf83f858dcdbbf61bb862d3 73e4898eaa62c9b5d8944a24b4415c0e441f9d1e\n88d66b05c52dcd708ea75a2d17a297071ab823eb 0a706cb26ea44cb17b05c5593aeea1d57388687c\nfb5622be5926b8e2a7f4aee5e80020dc56599ec8 ea174415d09910937d6d25f1c323761c9941a8c0\nc8a92360189207cecb4e988cd94054e892f6fe00 ac7c4b7dd9be3615ce0932763aa4fda33cafd2d3\n30c6928fb91b3d9379f19abbc5b1fbc01ef33392 6cbe3c2deb7a9c162253ee657f2900ccb70e2d1f\n761a05bfe5d0b61a2634f6b53421e3bb01a25f88 4746f14eb650b03436b91c1515ca58a993627f35\ne612c4842bd2a2170d50dec0896806bb6c7b6e2e e3efdcb90070e90963649a948fd748b2805514dc\n8b825526683bf3c76d9ece0308c9b1a51f0b9ca1 2dbfa282e74e5f6b5625a2602006296db49637a1\n422d08cae85fb84f5de6d5aa52135d56b449776b c2a585ea0b2526210dff56e0fa5090076e101799\naad973c3a3d691b84f20540d099b57df65c909c5 3a0549e6bbf27feb066f292d0fe9e44fef94b081\n7ccf255458f2a1e5f06db20ece1b7401dfcdcf13 60ddde53ab53d754252cd162da9c64b550e247b1\n654e7fb99e6fe71c3f84cdd81f1947bf286218c0 18763bb53f9185d9bee2a91eaca2b1ba4ec931ef\n88e85cdaa9c4ad27f640520bacf556e6b2287128 0336f5400fce82df54629011560da73ef28aa99e\n80766d8e2c9d2729a735acfcd4de0936bc6bd5fc 59921a0f80ec7110cd58139f5cd7d2f98783f345\n41bf61bb76700b449372a79a600af9b358213dea 3dd07d26a8dac2bedac45606f13072454c9f9713\n431943ebd08504484880d40ef68a8f19bde03a13 0b811210b47e859d1008ecc15aef47a55a4e1ad6\n45b630e53f648d00dcac2781d0620d6ffe7030fd 49ded7c50c3d043d0325dada92e3b145f823230d\n1d2461d07a973a9f1528bba244a9712a46f51e1d 8e7897d4f9d52e571a08403d5b713b363f0f0b6a\n9831d17f3fc3b780190c98846f886a601bc666c0 3e7197338bc899fb0dbe14006708d5c21a24c5c7\n8aaa7ed5bc2a4f9ea5da969039c9e59b80c159f1 f091b2be1909b6dae353c9cd181386987a9917f9\na69decf9348eeb182b5b4a7c8ac0c7c32fbcc2af eb64074ca121e292c8b69298972cc399aee063aa\nfec3781b769ee8245cedd3d279e6f8c223f5e438 5bdb4ce7167814d14091a52f4e6ebde85d942937\n6a9f51dfad94016cb2197be5444ef5d8ac077c1d 0595c5537f2827b8b4aec4070d8b31f1ace8fa4c\nb9729c69c8b4812615d0491166973ad88e25401b f9760f7c302a0137f7ec2c942248a4a878206a2a\n575494f4b63bbd395a421c8c6ad6a560b38bde48 4cc3d4b15035f48db88625d4875ed2ba41174e46\n949bb71a9510665025d142d29c7127602c1c82d6 c7754bbe2b115f399a9468666490b1d73532923d\ne0b120e9dad7f9e2ac0a33c21f0b0af742194eb0 0afc04d6fd0095b7d408934a2b7ab328d3eb22da\n1f8580b7a202269574cf1054aca202c4f672b49a 305a69bfed5f1f59451e616ce38dabd5b047f050\n88319ee6007d6fc3419174c0ac8166313fc8cea7 9999b067812182e3229d8d7a09ac6e8544572037\nd69f4bea32076930a6bc46199208e38dd1af116c 4fdcf441c38bc6526318d5df4e30797882b4a22b\nbe0f253b16da47100a3a6aeb9f0dd0b66154fb61 ccd50e9d17ceaf430e12e517bbe1fcc43e2b74f4\nedff6386c20f774dd2f6d0c31964f75110fcec75 94b8f38cbd9d62ffe6e1f6dfe497dfac2ebaf103\n1366330feb34a42cb45e43f028f315cf98ec8b4b e26dee602060bd9d5e64508ffe5a1fda7cb41ad5\ne027e4b0ee1f68387c7ad3c7db3fdb12a7f79f52 ba47d179669d0188ff2191e75ab1c09886dc08bc\na93a4fb1c79302db2a41f7830ee0006c80e47fd7 4ee8cbeec6446b980445894bc3506a6dda22c210\n271dc17224bddda5f77433c8f1cbb7cc5454ed0b 05c9a5d37b59d8b5d49fd6ddc9b989450cba9a81\n126e3cf83d1ef6bb0ad2e27658e510b0753d75f1 9455461dce90145f2fb2891f6471520000e1f4f7\n6749f8a3c63ba1ee14318f2fff56b5d933e112e7 5d4e177ff6bb9d4fa52a823e71b876f5ecddaed4\n38b2aef40a53ffc6948ef75099605d3f8e3d8945 d62a25ad47f9ab8dbd7cddd46ba222589cef15d6\ndee25049d40536afe006f255ef9941fce0080630 7a1dc66413311812080238a3a589632ba20cafa2\n1f165742742fce983f983d2aa7c736422557719d d4e02ce1faee6a2c27587a37e34c9dbe40a88048\n1741b66f0b14c887adf10b3e21b10ee1c3862f93 588c95a0191d38edb3774f2d2b6d00fe1876d50f\n3a1964c94f47c395e3a7133eaac1d82cebdc57f3 f29a162299eac22988ae608f99c8d69e6687dffb\nd79f4601f593700d82b66f9ee274658c854ba1c0 d62b407e63844d6e2bcc481ba8df0ebf89d617f6\n7e2075ee06f00da7f5e8cf56013d2d61f7ba1c26 e8b497e0150aff2eeca46e394539cc0ef9376a5f\n923e3e57813b10de64b7da6eab26f8f6bcd3d099 233e888642636f03a53e883e612f652ddc56b2b6\ncab49d9b518efb4cbd84fbeb5109a05945df98e3 6dd4ba8c6b4f5e7e728157c9eefa12dd889de1f1\nf015452f84fb7d96ec6c0c4a8e8df4748575b747 b02856b0e34f803f0e99e0667895b39aecd82318\n3cfb843d4580223749088885e8ae7230bdedfda4 61717c11eaffa547f0d52543213d0a6ff9d9e9e8\n260649d06ea0bae112c0d382fefbef7e8bbd70e5 3b1ab15a16acc6a0c37c9193cd03cf478da61d88\n9fd94bdb696c64a9ccc0392962c03982bda51b99 7b762fabfeaff52211c14d31fe2c802931c853ec\nb5d5e7e6017e552484f30a38f7580475d18a4923 1f937b2fa35886ac0fc06cc6392f6b662bfd0625\n3f7d42dab5cc07e9253b6963b70a48c12b0607a0 8ae45a7d78a249bcf679e17e7aab3ebe91225075\n7b53d52bb18cbe9b5a34c0736861d973125da211 75f3de07e811a72bee29c1ca2061a996354a7c40\nc1a8e641b9065087ecfa2b80a01b17b533185159 eaf1e42722f14f8b9952573fe8c5364db3312099\n49bea25215a2ed6bfb3db3501858e566bf22a038 ffb270c4f1301ce782074894b37afd83426feb2d\ndb3e8e0c7fef4bbc4078eb9d7b72d717f995a6d6 bc454202e671988e095de23e6cfbcd156b988110\nf31d9e0821fcbe12a3d654c007c1a70f0e2a0d80 1f30d07c3b5b2c62fc5c3ba82ebe02490c992d16\n044b96a30d9815b645e1161bea09f9dbc7879662 6aa30de53999671953124fa93d7c48f0650f9d85\nfe952add2bb0f7be1122531fce73a55a5473ed10 8df081f7838af2cf7f169ed13494073d8baa98e4\n8d8271acc26109b5bf3d9940b5390e2a4e3dde3f 1dc7f2a4cbab2549b0796554caf2bbdcb1350ad9\n68a92683687bf7122381f50393cf7fc3131e9bfa 67ab0b0512661df2b8b16bd01c60254906999c38\n6c11f12f303ea9386d85a0b4e073cb0d237a660e dc04038fc559f38afe1a1e56f38c23aa02bb4bee\nd54de1fb418e35fad9bc45461778efe73acd0a4b 5d72981cf3107fa6f944b83723fd6ae229f9eca7\n5da480b7c336f6181a62d857d7bfdf8063e8e1db ad3df0b4510ba70b6b439ab44e6494ffe638a3aa\n8de18aa6bc1591f1ebda54050adcfbe5970f9821 2c9e56c3a2b6339e58ea3f56a55795d116c4cea6\n87d01467062678e86dcd4c559238761a59b41480 d3a30ae50a99393193939268bfb41e45821a570b\n4fac485f37c421045a896af06f333e2905d07245 d2bbb72db4c5221921e6e0406e93546bce03fad2\n7a4b1d46afd9da5bf1ec1e5f259c68398546c5f0 c1c61888a3fe7aa77c60e8fa4bcf832b2e09564d\n8201f08546b2a5eabca6ef901b555384433f4140 8d37fd9b1e2b4edc4efeee918adae518698d33a0\n9193859f9fc14b69ca7f8689dde80430726c7d14 059da05ebf82694753ee46c629b9ba1d948584d6\n41ccae83179ea3ff5f00143184de241131ca34a4 6d7d41bce1668e600506a2c84bffcf56b016c507\n1a6891da9413a494699a006ad221e11c71457672 1bac3653747a40945e8a5f9c36b16d84b0ac5f55\naa32ede10d19c7b99c1168385ea77dc6f08d2cf0 d90edef5b927455e81a2b1f76ffd33073d6f72a0\n1db010e2aeff4f71270232c7325481e5d2fda96d cc8b5c0d11bf5599d55925099d6f64c42180bc7e\nce4a65793740bfa4f60406ea9a355d445e8361f2 8707aad5beaecbb7e1d18454dc0922ff13c8ad37\n5693cc11a9eed9efd999a241bb746e772083aca9 986e6ebb0da7b998f0117480b129ce62832a3e8d\nf21f303258dd4d3879ea5799817de25f69773a66 513415029caf84fe4a0eda7092b53f86fe46b4ea\n57d2bf77e235d75c168e1eab7594c670a3ea2d10 30b3abdbc5f6fbe35292fb37081a7bec10bba591\n5711cb90cc0d2014168ad852ed16dd9d7fa1b3db 0852d7e7aa87052b264180366506fcff3d0c87af\nd59339ffb8644521ffbdc20933a06a84508c0537 f64b6dcc8a1ebc928291060e86a8daca8e5aa7da\n0d526c3557f4285021a0fcd2067c7cec33eda273 44d82806ca1e410f97a7899374c6fdcd5e2050e9\n7b9dd583ac01510f0660ae382bc5b668a649350e d07831d908a36b1515f53ebcf44d836bd869d759\necb49ad5437e974ffa036132e944228fd9eb7b95 2f33bb8ef9636c9810a4e99623061f72cb3e0c8c\ncbb70567fa589553ff98c25bcd3f7310698726d9 9aec75b9aaf41dea2c4d871b16340dac9092fa70\n44fc0d93efb50dc72a0b6b3d4218eac99796e23f 0c6743d679d7faeb562e1cfa3eb12eabf3e82a52\na59d202b70770f3d70236de9115d1d610b898c61 d8617000d7aaab868c71dfdbe6634c65ad3e60da\n509b8907b182a587f4894731b58e9f985a721332 f88f73e14148b8107f7dc2f815c8a11703e1a26b\n7988cc10bd85a89cb8c285accc177d052c740cfd e1b6759f44372cf03adb5aa58f940e0cd392cbed\nced95ccb688063b7e0b357672046c28a721ce51e 0015f601bfa599cde5b2f23a9817e93bbd638214\nd15e741cd14235f3b0e844a7637e5a72cfa9ef66 a7ae23e2f918d2a4d36ebf6736042f4c4f36f86e\n701fffe1abe98b096aab21997b143d72cb6ccdf6 2f655a5ba9a5f6278fa5b7d717b0d6a1b5b8fcbc\n1e8128cd5219344181d03a20386af76d5eb83403 760f9d8f6b852beb6c6231e95358b01d25111609\nd8f66945d2b2fa5c2a78df9137edee8f3a18ae42 e8aa751b45d46b24adfba052bc5fdfecd5da3950\nd1c82ace6c0e82f7d78ca4603a04067650e38711 9dad3a063482923e2816d35eb40a4d23bc056b8e\n2d49210a469107207add2b6026e3cb636fdd41be 91e921f392d36c9936f925259b212b1906272444\nc1f1be1bdaa7a3a5f5e18469634539dcbdcafa5a 268a003afd8ceaf21d0b072032ca81c2b99a160e\n091bca28754badc8e3f6f3791160a30d5f969ea7 aedb664318b2a907f8a09bbaf5deacdb57ef6190\n905de9d8f230ee12f9ed31292338878abb0e5554 d4f40a8ea49cf0e03273d3ec786e4d9f91d3176e\n6dfac0e7e682ba97c71a1423f46473beab29a332 d85906727249588d0d47b628ea36a5750dd56ee1\n5566cbb2199aa648791a9473af276b5437bb5fe9 728dd28b601083bc9ef69ef64a69200a7b240629\ndfe3ea4018fe3bd1f4f194a6a082554a262a80c4 8960587e2689721aba42f4879dd011b89fc68980\ned4b061f5942544fa7590b0e12f761c448f3c7b7 d2e5ab9cf53f48f7c100cd3e62775166b75f53c2\n74752ed0b9d7a1c16affb813ec58b54df6791526 92fba18309cf8c6b2ae0210c8ff4be0ea5df3309\n2312867bf4f1c40f4e2ab195506a5531b8f62dbb d92b4f57fa6cb733a32f7037880fda03822e5aee\nd4db9ed9be9c698858530dc78fe8131439187df3 ff90e26959d09af3c8b16b89c8b1c1dbfca2e505\n105b798438f9559cb7cc30ef97effba730d922fe e7a7213a685feb0e7d57314e13fd26a02a825151\naa0afb21bdb0f8069d6a2de96eebec9af78ced1d 961225a175dad370b2785a1abedfb4a292bc702a\na452878dd937f10ee655d15b0eecb494ddffc9e0 032e7c51f4aedacf705a4e0a5b7558e6f74eb1a3\n63a7d26f75db63b140b54d6141648649043e9d1c 677b9c92c8f977b113305fc9c993a08690733328\nd4f6a495aeb3bf0da6216396fec2230de65f7052 9f290886ea3eb148f869bd5d603ada26e31b38dd\n9573f0b8d5818ba07ea9a2f57d9b01971cf06309 f6f2b19b57f6237b7fb3f455b4433b2ac2cff2c7\na9d455cc4c925135b8c5b85b9215d2aa1d15d69b f9a106bf8b6880b428675b9eda10433ac90bfdcf\n1abd065b52108e3bcea2e611d5ac0f50d14098c5 1bcee261173eb06a6ad763b1cdb3dd438f75bc14\ncb266e83400ec83e17ea130ea001776c357db9a8 2c071c998a3a67db66c7e77b0696c62d9bcff55c\nc625c4e4835ffb42e483c6839f351d71d12e122c 4e521f6b7ccd0103aa0941f958e1ccd905b80e63\na58119bafe8fb8993328ff64105d3fe8e49e666e 2fdeaf31b5607da8c3176c89ecf312bd8c29093b\n091feb0606a54953ba33d60265a80dc6ce83a128 13745b08e7a3f1c8bc3849be03618917bce6dfc4\nf1625c60d1a229bb2a3735dc96048e904e6beb70 7d872dcfbd2ed5352d880f81d7f36dfe3647f5d2\n77682fb62d77c1abb224ddba410656339a05fbd7 1c7d4b1dcad888e0ca03c9ae0fed6dc72c10d7cd\n97865bb1fee18f78d2461e8bcf690ee40c002886 392e2491c895cd90a563539acbc388a9f7ed05d0\n9ea785d64ec1f4e369f8c94cd83d9e1656005398 42837cf195fe654ec05b94ddbf2940a95961bee8\n1a84e20d44e58a2ae6c9e684c1c9f7a5ae7d5fe8 d6a4343ad31349aabdf1e28c49bd76e6d9daac01\nbfc7328c81f00f30d968d2dc43451cfbb5d1b693 9d75ae78f3272be65907f36cf8dce55c760a9a00\ncc5a04c5672cb4113b0da093374af8fbe7f2fce2 6a4c78327f7b9909968787b1a479583e1c9a8ea6\n4d4a89504158a9a9ac9e081b282da913c1933de0 5035aa6f44aa97046aea1508eb95ef23952155d5\n8c8d82ae9505dda7b6dd69f66f579cdec276dbc5 d4e1d629fe785845ebdf92b62165e117cd90a258\n97a96d20f75712fdda6b330995b1b97605d3e45f babd6ef7509d678fb54dc7c6b38ccebb8443d0c9\nf7062f4a69ad6edb42bd281fcfdce29409fe229b 27bc1abcf697ae52aae46bf498381a5071865410\n49050d9c7a3ce3c513c35a895b70d339faf2adfa 9050e28630ac6df03bcc427bb3dd2e69cb0f7678\n9d536a1fdb2f4d9b1111d942dfa09ff6ebcb62e3 2748ea7571b7952e0d0a87caae6fdb1d97f74412\n52dfb2baae241347ec2580894c925276f6d43a38 b3b2930d59afb9e64bd8882f9637a70deb77a924\n39e9d5a7c8806eea1f40734b4a749b00578483ca e292187adcff0a498b44cc0ce8927fb44a3aceff\n7efaf8bfb93249942b73d3e96ed7b576a5fd986c 32434d09cc287bffdf778fa9543b2103504e60cf\ncdc1065892be3e837edcc1f94aea49f01c30de68 efa83535a936ec228006daaa24ea23c85c65db13\n8089e9fa1f50e2a0430cfc9f5f7ce605c9bf07ef fd77b6a619226e8a99488d2186d3217784d75170\nff0954fcb96607ac5cd86a6c40bd885bf368e2fa 90e34cbfe654d8bd683b7fc308a1e6650437860b\n9c5ed64022043ca55ef609aa88b6802da1e87115 3bf822600dedf967d3ed159856b8a3b53e29b202\ned282d500608aac30824ae9bf831e1b06542ea26 e3cb5bdd866f9350dd1c8aaabe374c28f53fad1c\naeaa8f380962b90ece8a99b80342beb5d159daf8 3c7dbc28964a153a86e3b968f025f35f6edc63ad\n4d267c5df195e7ee2a9b484be41c40ab69910a54 a06f8f7a63167d97b6fdb49c7d9539190ffd0390\nc9c22be5a7c3ed7ac2a5de8789ddb1f07e8ff859 b845ef33cb174334919fe25b0824e73b3f56b395\nb29720fd574590b3cac765125d750c1b8a025186 1b82a01dd8c1244a88545693c24190a50efd3407\n110ee357fb8047c381aaa20b4bbc8614c3619b7d 5a07bac76ed15a057177f8d3022a305221c3a33f\na429a5b0d4873ee1aa87cca440c3e2e05a0d6f4a 502d74803741b93675a0a687e60a9d5123b1b9a1\n2faf8fd38ac51ccd3d25d9a4b647b0fd184cdb82 fd6efb635a6778fbea9045f9876aae5248084c61\n593c45d5d19850a19a04ae94f550b273b0ec8875 94dfdfce88b4c019464d2bca7c3a3ea57d17a03c\n4f12350d9c4086475c0a0ad1f8b973906f7cd0d3 064ba804b7dda2de41b91f8fd518af24bf0b9ee7\n81c27963ade54c8dd07a28d6355d31717b5a115a 2ecb26562ee99a627b5b91d77975c1a70659fd2e\n8ac49811455a1aeb931c91ea74a2662d4a83b897 e4e532ce01587373a92e40c9fa6579ad27debe0d\n011d62b66ca8308a04f49357588d6812ec3c39b3 1527125e8a5f04b494e581b3fa661832e438a284\n6f562410e6fd1ca3bbc897f7470f29022f008793 eb5351266be0748f4fc3f2a8136f400834c60ea3\n3fbfbf9b286fa16be3cac89fbdc28ea8597eb9cc 4586f5677d16cf6fd8eb7c0ab7ea602f18782872\nb77e3ab1b5478842d367013acaaa06cf57a6c8d7 aa3eceecd617c076fc2a581af16f2c7063dcfb6c\n0054c3a8f0e9df3afe65b3cbb70acf0a520f771a 0380d9b1e0b29cfd6f60ac7b00fd88174330d090\n7af41454a06bf871232da3df28f5396ad2531629 2b0179b925c3fe0f0d2f19ba92acd55eb6465dd7\ndab75d41730540c2563222b7e5e186a10e005207 25a02d46f55a9f74fe6e7be02572cc086e123f66\n72ee2f1c694c46010c7d97fead21b70ef7ef2646 99788fb1d89b4a87cdc6b5dcb8173e67d28013a0\nd42cc6157c34f712e4ea2b6bdb932e22afa044c6 4d4658c5cc2be451511b16d4f6ba57086b687330\n7ac3405f4945b550f77ab27b090104ad82f8c906 355523d867c54bb1fc736ae39a129c533495e088\ndba6ae3521f9a15f7812197bc19ffe06d49c1a27 1a29e3520c8251a76cc5d72a250f4387688cca24\n44b0f6e131a8b12b085b4e53943bf5a12c0da102 ac2bbc14aaf22ec960874a473351004112c7dc75\n08103dd2230bc41fa3300b0a300ec979a3766424 4de684df1cf48cb1f6b2f626cd496b8f18e4e51d\n374ddbf9bdd02018dba9d41d00e425c89b60d070 fd61c81abd917c5065ea26fb3f1d1c4b6e59fa63\na1e948aca8d7a7ba0fede4b2c313eeeec24641a4 d4d6c3ec88230ccb86934fb95c19fc5161e41f6d\n0fcbbfc9a0913934d2354cb0dcae4a9493b61261 649cfc7941a161a79111968b3704f07e113eb416\nee1f6f2ffe457267c42a9244da4254cacc2aec36 66fb9567556620bdb41fc992c80f9defe48c77f3\nfbdb3cc4027f6246c8cac9ee22643ef6dcf8b953 37425662624508125d0ecb8ffc65200e3837b615\n252ca8c824cd6c7e7eb1eb0e164b29fab1304cf1 8ec97bd8e7acc5719ad6472d3eb499a3bc16a51a\ne0cb5d0a47f31292bc85b582f215b2ec19fc571a be29684c4ffddc7a2bb1908c9665bbe581b3cf2a\n0bff142504b505ad3ffbc015b99e2e45ccbc3d0f 03e5a64a76edc2da6e772ea8e28cea51895855e2\nb2b013e9a4b80dac79a9709bb34d3eab15818c5b 3e392e6e2e9a4cebf2bfe1e2061a73bf23df6199\n154f0ec5a1c1039c07e4fdcc5213c9b4920a68d4 d126ef8fc2b1107e0cf659fe68bc231193ec8b01\n471a3d8100fed3ee542b7f307cd83c39c7f05ad6 089588499f4ea4e69729e4c0e069c384aefea82a\n317b8ab9359940bd13033b9b893e09f4b9c2a9a7 aa8e118a396c890c3b0fb5373a4cf8ccf3fab47e\nd0dffb9a142d6e2d564053a5b427fdb26e133ccf 958153642bddb1231605dea626b797619086842d\n80994e250142af52800c681bfea6becd798132e6 b5dec25f05e5abd5ec31f9cab17c3f5a7fda665b\n4b417cbf35e1ed0008564c6922d77e4023336a7b 8b5d315fa08bb04de02c786c7a273a0ae8892d72\n4721e7fd1c0fcf3e66cd7e399095f27c652de108 ddd35657ed137b3c80d00f9a7bd4e10efdd7ac51\n5f4a8ca40e746ff0a960e0e9c3cceda978599718 397d3ca15c5b6b6f0dfb4b00677e940f0f0fe053\ne967ac24f36469ec85b974b2ffaa5a9361817b7c 4682c0188c3d29f9d2d725ec1acc996bb9d5ee3f\nc898a62e34ce07f905df78b00963de0c9da6acba 18a7a89c2194e9a32e3190c9c0daed4cf74ae5ae\n4bf3e61cf81860a0cdc2eff09c565996f5da6117 e756f4da93f4f992ffedaacc929b951e2e2c2f79\na250aa6ca09ca67c62bca29075645a250fabd64a e16ac112dba2fcf0d48aa5a10873e3faa107701c\n29821ddf9ab082179da1000610e4ab70ee12c23e 59ef3b2556509870819e86aa141edf34be530321\n7d03f26343147a88fa4182ecc3916b82c52b8098 5d2b305122f7b5685aef3cc905c92e7f955f25f7\nb1be1198c3db58d05882c51990a8e26cf57a3de9 f5cf57f2431f51c4e5e4be07f0f64c72105bed56\n569a4885b01eb18618f7289a9cc17fde2a8a9eb5 4d415ac81853b8955cc304555885a6e749a4b7b5\n5a5af3fa2e251c7977cc1d22453b27e47cad3a21 b0471049a2bec6cb2898fd1d625b8aeec1cdb5b5\n29ae611279a9337025b39c0f8be6277edfed484b 068e47ce9fc3b098bd4aae0d23685bce1e01b070\n1b0494cd4a7a5bd36e7b743ce1a62ddf44cf3c5c 08fef103b912874ba4051eed401474dd799c5d5b\n9a38bf2ccd778b53f402178c728cb66145bd337d d2bb681e715236111d8fcbaf8876551d643b37e4\n0738acbbd58e04928633f13b481e4974210e2657 3e21567c8ed5728fd113301e9fb8d61da303ffa0\n8b3b130ba2d947f20c6dc735a26dbb0c2a10f0f3 bffcc4e5e319fc62f1e13e9ff5fcdea19c72eda5\n727b047ae9c3e8bf40a7aaa51d8d4d735a565fda 0bbebcca9f851bb4cf8ce907bd0e3e702dd22043\ne8201fc69a8ff8cbbc894ac8d6e4a74dbd5ba978 a9d540c6aca691ddb2c3aa318b65e3048447a691\nb75ab2f0089dd11d40557ce29f622a802f12b116 5fabc6b8b5b0cc99a58475fa7331b4192568263b\n7d6ddd6716c0d53f10d8cd4ea82170431164b8fe cfd9abb6ec3bce25cc520e7aac04c0a90196fa96\n9ea312ad83b53d0490ba9463cefcd3709641bb94 60812f12496e0822cbf2463394592ff856bd6a42\n14595a7ccbcacc758a9a6d93fa29806013c46684 00e23df8349470097713c998790d554379403232\n05f35eb839d006ffc8660ad98ffdbfa562314fae 73d45e96b1c6eca700707e5ece401c95493d0cd0\nce699b99eda872b63f7e542304b26121ad8bf70a a4510a3526b1d022bc2b18df1d57d7a680db2598\na10f0cf61e4d4f1c79acf2fce385e3e970c9e56d 842db6437106208b867066aebfe2919665f9afa6\n809eb3e6e9a45ec81cf8c7c65f64f535ab78f5d0 20a7e908cba4216a8214b8c92ac72e2e689c6420\n3052454e9d271c7bd77f27939aec57173afa1456 7fadec2d2a69356b0e28c6d35240423de6bcaeb1\n249eb50fdd14ce1e4a99fc6971faa031d0b68ecf b42911eef0c02320c36b2d959953c99ac7d12033\n2e678014241edb5ce43cb643ade2cd74903c001d 4d4c12b6db3dea41630ff32b0a40c16fb7864746\ncf9b26ee0af038cddc4a649bcaeab5707191b1de 42549b47ee0f2d66e012f1283fd41eb7c8910315\n1094c01efb62e8e30bc6b3aa2ef35e5ac68f8795 aa751d37030ad90d9e9d5d5d234ba7f16359d812\nc1e3af206e18258aca352c21d68822acb47917a0 3abaa320b2b48d6e158a820d1bca1d8cc317b2aa\n4570c12d47dc434c2b4d22f8ff1ed3c27cd5f0b1 71495d4050295fa61a23e8601d152fe7e701d4be\n964a33c1031a60514f9c2b8f46ea2d8d8680877a 9539a65a0d4bd16165918b970b6815efeeb55862\n0a560dbb1f4d5b0618b1fd3f69413af13f965320 174d8905da648a059b4f7979a40ca1bd68c4f1ff\n656138d6bca5a673b07f45f73e515df20f10e15b aa81279b56ab9aadf3f3d16119080292073aaf6b\nb222d89f919044da3fa486e71e7fcf0d7d113820 bc1262e0e6bc591a42acd8889056ea486e5f864e\nd9bba53266ab0bdc6f0ed2bf4b11e7ce0ec441d1 f09c66d135c9a15f29b5d1ca6c27e4abb53d1882\n5c17c2928615efef8df4dde8abaeae134a4a1d5f 97e8411f7eb8b4ecc13faab9b9abf2611d2a1445\n4ef75e6273139bb23d1a2d8437c2eb920b56b4e2 e109901668e9196477f3d5958327998c270d42be\n8c72dae82c0e835630f26634f9150b7c2a6c41d0 f774990affe5a7788bcd2913d3f18de22b545db0\n85fe9de6c4e2b77835dc5242208c797b242467c8 be98ac0d66fd1d65fa49e97ce3f9399e50896035\n10f3e7ce70da2651a6ca1a2c24f5f5c5831f54e5 c3ce63122a25249668eff7fa69844e2e9886a682\nde54ebf734a50c2bea959d429c95f048b6379d0b 8d7115792fbe8c5e9f962033df71dbb48b1afc8c\n7977f836683e1c9b0f34b1d13b9aefbf240c0e7f 83fd95c64bc381c2b8675d3f4e86d34168a8c7b8\n1901c5428216c37ff6e62c9d0899258bb3971d1d 8912ebf91aaa4172224958193a73c4afc10dc346\n789fc0861c99253824edaca933ada62f8c9ea6a0 987fae33825d3383c481b9b30e8fbb7248686e16\n1027556156fef65ba0a693985e57072486e387c4 eef1f16b84db9787eb95cc5d39f9948f809955c5\naacb3c166ccd104b1f49bdf1918baf928fe2da5b a20dc79f0c10c71037c8db8b0fb12b6611dd2a66\n331bf64c57152c6dc49bce0e389583fbc3486ab2 9208d07b3c37bf5ae61cb5fb95f5910810139299\ncefc87162fe0ead110ac8619763d02b935d28d34 ecf3812cf5296be3a94ae35eba67235eff147048\ncfa2c9544da83c0a5792a1c88144d925d084dd99 b261748378ff10ed570239ffcaf5756811938f22\n3788766abf0737da95e9edfcd4e6788e9658159d a71f93d72c862175729745881821fba0a720f5d4\nf78b1de7e86c2d6b576302fa9fda1eacf0d997fe d3ff983852caa96811a06fb2a432a6833283e5f9\nc617c29b7cb5d58b19d261eb035af642b1475fa6 5411af73c298012e53c80f6175d08f6784cec61b\n8624e98fe6a9374e0b3c290563e7ac8188bd965a 404bb8972479017d6dcdc2cdb10304f180550098\ndb0a57d5777de1cee17defd45ee81b1349381758 f962db1b7b4b7c11826d46d787797e6f1a59f315\n2b6e05f65728701171cbbe908335c03ce8a1ae44 6c6bb96942f1839c9541a6108dd77147ea706a09\nbb1be090b112ab13d1e8ef1ecee29db08ea0f792 bf2d6d0434d86a9e1150f0505c614e98affe6312\na49f35072d5e41adb4cf794023b9a3195730effe eeb09d479cd101c5ece5706550e6531f1a3a2ed4\nf432966b1b31e3b15330535f4e22cc0f05a9f22b 521191add3388423c8b05bd88ba2981b945de474\n130323603d156dee99cbb908311002b37fbb8dfe 80638266382899699783ce7fcc291298b88a68e1\n51dcb1ccabe00004624ec118c516e99f62b516b5 16ff1d3a8eba3da5c07caca6ddc3c0bb851f3fe5\na47589f0e474a29e9c23239e2991bbef062ee263 646597294a2dfdccba238ac9f94f60368021e1e4\na29305ddcb2bb095875774d6b43d71e1e2f50d5b a33b2e992eb98eb2eca6105e967c73b928968296\n1911a857f968782f013ce8c2047da2ee5795d922 1f79cc109d47a2f9ceb9d1b8626a63d43dd25e03\nbfb1798b4106d9095553df87529695db27742352 d6c30e5e8a587426eb43f1515609d055cb8c74bf\n3c51bab1669ca37d486a2e94b0c86e63f3fb0324 5cf0a90dc1f8e05e469fa1e63d240ba395609f37\na6a04291ed7b0fb101a4adcd14ca79f956357d32 3ff8165c6e062a48fa3b91b3989a199b2bd733b8\n051e271387058be4db5f40cb05c7acbe4ecb2c7c 9481bd25a303df9d99b2388e02fffc3fc248efd7\n80de871c6830538f774c66ea864c365d480865a7 34e42ccfdd21676547301ed952d6770b35b57db6\n3a2c2c7e826c5aab71971d69a014329361bd8dd7 d858d8eaed1161e7a3581a901d85b1fa57f123b6\n88a735e24312b18f88759f46becb3754c58ce498 03e629e11c9929aca8af3be20e7467ed2f076aa4\n96dc60141f1bdf663c3bcf50134c43aea5c95d4c aa924a6c6f2b25f67cbda2d495d13d8cc7502bef\n0784e0ba7bf6cd56014ec3e1a180fc9bacc3b73b e3f78feb6cfe7e35c6af11f5342023b60c9b4c72\n4845379e7d86665ee75dd92782c2e84069e4a09f bec0e2149466ae07b3b0075491cb0435042d0664\n045a98cc20cddc01d4925bc1a42cb7df564f506c 1adabf9ac569615065e71ce13f584b9d413792da\na87ea76b5e49dbba8612070f6565b3a446d6f6a2 444d4e12766f4a429a5ceb91c732535ec346cb9b\nd46bfd06c97c1e3b15bbb0e76810aadfda1c4d68 44bce6f36e8637b6870f9c0c7a648b7d28b8f85d\ndbaa0079f323905707fc42a975fa9766a6b497db 030c63a7abee1dac0f3640adea724598299c64c4\n50b87e5faca6a76db9935da089497a2b198ae98d 387ddbef561b56134d0b5b33c386a057f544ddab\n189cba2fc8bce21626c988d98cc648d8565a49e4 28248c1ee2d9f0b1317fb8b7c4b04abf61f5d4af\n1b140317bc4d7f31b83fec492d102ec82504a169 c0f26c67cb9391029aae573a7bcb62db81859765\n1a8737fb889800f80d2fe0a14b9b4d56cb3cea8c 0a1359109a6dedf187c2ad6bf5d23229c52053d6\n606ecf82df0da1f119765bafa79874170734e25e ab90109eab5565e3a13d342bf1319822e12b7683\nd6c939948a932506bd8046c575a34ec157bbe131 9a61206a632b42179a3f5bdffeac2ae7a0b198f8\n702f34facf5d8f43f607e0b570f4837058eadbcd 8d7b9800218132587f86d56ee01d4ff4aa013e38\n77809be50d093f74798a1c871068cb0ca5583a60 724dd1bb8beb55c554d97ee58ee188d41ca25472\n81f1f239352cd1e8629f34e9b4612db34cea4864 efc72ed8d861d3fc865c0cfd86877400849042fe\n2c1319d70313712530b87a69fbd62db79005e532 4a56e77105a43ca6a66d5749064a36927456a910\nce330d24610f7583ddb131ae36b4bc3947195953 c49c9fd243d91de314cfaebbc43d7d3f5f16ac60\n28fe73db8e9ebd83c8c6b70bfb162fe9647bbdda 03a7948fed0c8b5338d41bf34ede93c512ef7787\n0107354a8832d6dfc88ec533dc509a67d186c829 bcd80041a00fefbde4f77e8047ed80233655771a\nc3dac2bbf5fd01fe31de6bf03089ff04118b7b56 4720ede0bbe34f456fb7db90b7bb457f04480dca\n6fd44bfecf473ebd5eb70cebd0fcf736886509f7 6397bc8e1779ed9254c1ba774e76900617688cca\n01c9197e8f77b2ec8560e8e9f2d8a5e01ba94854 a093600e347141e625974ccc2bf014cb3b44b8ae\nc592ad8a5c1f78b18de3679ce486cd70abfcbc1e 3e495954f7a9523dcefcc6584adaf0ce80934b9a\n5348f15af64a5acd5106f0117f4920dac64cc2ff 7c4e6b5316a41969cb88825ee02a380f45db035a\n1c80bcdcee0ce8c48a1e088eaa823c5d106d34e4 d0dc1822502f8fefc2c38e423f3cfd5501bc2fc1\n63628435de00518ce9561d002efe1e2b6b4c5e0b c84539e1f1f72867c1a84c0e23f328d64695b927\na9c7631167abfced6e985a10c80e1217798d2fa7 4c7e59eaf65cfa23ac5cd5b9efbb759b505da9ed\ned91e3e23a495ddd19209098c310bc5cf271afd2 29925bee2ae3f25fc2711961bd4670b214ca0b7b\n07b82a5c707403429ab0a4b01a5360d2e863bae2 874a1494430d2e8563172b8cfca4ca124c517f55\neabb550ec0a5f8245c4f20ebc150a53f557388c9 7ac7f8787f15ef1a777c1e40f69bb06cefd2f20c\n2f0969d5233ecf9265842605a12b58b0574a37f5 d23dea279b536c0cdd5193c858e29e88e857958d\na4ab514bd734cd45115a8e6a5d894894865a91a9 135eb37bc7dfc22c9a3c55f573e82a068e7c6d43\n826d53367c988264b925d68fb695b52de005f916 e55dbbf6fbfa9b2897121d952c9e642837871ffb\n9b0936e077a0b64b82017c2375132bcd8d25c273 7e735818d42db7d61d481faa3a15c835a63ff618\ne4acd5e37bdb791283c6bfb66d690f65875a419a 6ef28350a69b39c55176dd9e721d6b211c0ef54c\ndcf85bdcb286fba03e3576712d6e89b5af33a4ac 0f9b866a83f1a33149ce510e9ae9e5234844eeff\na341d0dbfd6c510906f236c764b877731cd9203f 7d7f809afb661bcebd64a7662bdd4f12913926f3\n28da88da984761cb760b1bcac510304054581864 40ea82bdf9d739ec75a24218e7d9053a5eb22bba\n071744df023de00e7dfe1a82f6bf9115d68d6547 91fe0efd463266482e6453e40dac71c2bbbaae6a\nd60dcbbe006b2355a02a35f19f25ff1a9f3d2198 48a546c46431204b54eb02756788e30a5d72a0d9\neceb917f05017e35df09d947429a1368df4cbc20 15b468d7e1cc48aaf26a02151b25b70764ef3b12\n95ce739dd0d7b0641774b8f12b9ddfd572973edc d2df79548b7ed7959638c0f72f47a9889e9caba3\nc4288c25a166168d68df94141498103fd721952b 32a1dc13e7314daa6f16a5a8d5a8a7e67abeadbd\n4dd07f23f0d41465d6a09fcdba250b50c28c8e29 58170e9b222e9074f6a774c74fbcb6f62225563a\na8cb785cce2d9895ac7050afd9d1e09279aa3cc6 b906714341b7c394b9471e3859f641e6f9398651\n7bee6fa380d24c55f24709632b666cd739a3cf6f bb1b58a2a3a7c3225be7efedcf1344598d169a87\n855d459321b9e81f6f07e4bc270d610e58033806 1c35be2613256e0f009606f490583e336f14d30e\n71e0ff4ba554d1b7d5b98eea209aab4c1ed583da 1ef09c0dc6fc4b9bd8285b6c22ae973a16497cb5\n315fab986b81415473f42243025a777843438f36 a61a9b5a5e5ad59449d45970c4c58bca123fe92f\nb9518c245fec9a68d55dacdfb0039f917f1c3194 45e83682232c38549d0275da60d2249dd4f60aaa\nd45ddc89ca632166ad749a39f49a4684fb5de3bd 8f0069f0c20025c320256304f38eb676c3d56dca\nc4db4bd248e0131929d289f603f60cd3ed722e14 1267142eb05200c4ff90d3fd25db727b27769efb\n7ab030be8788fd75b8f78b143320a40039b59b54 4220097aada942757f7ea4188a61b136034d6dda\ne4e51ba35760a5f59e5c045a93e83c6652cbbb7f 57138cfcfb32b94dd6b0a89e28da88143b6863cf\nbe1cc808f35623eee69b3ece70394a61d5b9fff2 dd94217f5ad36bf70d43ec061d85f6997c3e4fad\n5ec0c8f97c11ebd0a5a4a320c858112969f71b93 9ae2a4340c7fa2eb9b2c00e95210e74a2ff382b0\n28b8c81124c100bf26d1ebcc7158347bd60776d7 aa4ca6627f45bdfaada6ed1bef3f6cb376a2f2cc\ncc130c28c32531b3e4721eb4e70e45bbd1dd773a 0c3b326d6a3d7e700ee1bcf5c76647475e3a7091\n444a4da3ae69ef3ed989bcc0393245b24d26953f b7f65b830d68128438a88cbcd06c41639575763d\n732c74086f69b18cd743ade434c03e82bd4ebbd4 2a4bcf16c273dc777b76561c6c4f57484aeda7e1\n3ab91f70cc3e092f850e0a09f29a75e3de270a46 3358f0c6b6864ffe383bb64529cf33462e5dc127\ne0cf56b21fd96ee90c1c3d01f4451a49a3da65e9 350b4d00662f6191e812c0f467215a0f3dc6f2c5\n1f1651b7722dcf41baa1aae9e6b6847a5dc3e4c5 c211c4a10cb66caa7226adbcc8c3e8ce1719f08c\n65ed2d9b3d973bfef8f1f8b22a08a00fdb63ef68 40c2c2a59d9797e1a97adda083334f80eb3935ea\n9b2261f84af687e92818adb53d912865282ae63d 4960229d40a9803a15e79479e01033b37d47b6e3\nae8e6af40aa8e26511571f0a6da5cddc6482b982 d387336b7bb84799953e9dbe79279f3f0eb7a788\nb2476845ed1314a78294de1e5391ded0aed40c10 03750e377ad669e83cfa2e1e9c9a751f8016b576\n13ee4dd8a51b890306e5621924b16e59e66635c2 0e16f9e92ea8a4d1ed05cc50c6e7016fc328e5dc\nc1629849df2d8607e26a5273b66ea60d4ecc924b dec8624bd3c8654f110d7882bcf5e31ccc4c03cf\nc43aa8c0c56c31d99e7a1cc13e187020fe28245c 7e988a99737b9c75846aebf491679de94881d387\n05b2f606c0f647fa16c58f351ff5e3ffad4ea630 0f3c787de8758ac384ac9275d47c2bdafb806564\nf9ac7aca338c6722df464004e04c6ef18ec5c778 331a94fd9c941031471938ae948d3e7fefd869de\n06e3df66e11ae81bef5a5ecd6f9404af46767f8a e9c712c6da437053aba724667e645090aa87a5a9\n3889711df66164ff05f07df1b7edf301b4898585 03f8f569eb90b31084be1f216f7fb25d959235a9\n17f52c7c770b6c11683c41b71f2a3ae9ef3c7460 021f3cb8d942f3a9cc2138374eda08c049e4924a\ndffea06cd8c8ad8a5a1a21dda23682d17454b6a3 66c7e6ccc97c748288aa0b1cedcb840334c0d52a\nb401fabab70dfe0fcefe1caa544f26d092a592ea 7670dca633455ddfae94012bb0959a1fd559e248\nf6cbbe1de7194c37b22431629b65c357e109f36d 53816d2f806cf3282a3d92058ef57c9d7a6523c9\n7d03956111f929f04056e0a9b4c393820518a341 d57322fa1cf91273009944dcc7f669c5212a6d6e\nf7b0ee125cdcab0e5a05a9279788aef1527a39c5 a6f30c28b8777dbd22fd68b8c2b879a4fac68c0f\nf5db99f7e89abd5c7ea22c67819db5515e3a800b 83b276068f76a2e05620966190e5e7652a9d109b\n01c8b8f54eddb57452daf74ce32fd73eba386ef7 498f3ed4635944a7f55eed820ef3f8e9a931513b\n2b99cba9d18ba08dc3fbcd40a5d7c059d9005395 fa3c0ad75f03a1d4ae170df4417b8df9e03a7089\n84d31c96a70ff224d028469a1c85d3017f38c22a c6b0d3248aa2d58beedbdd772fcc8c4258f32b62\n08bdbd2422fb14010c75458859099a0ef5c2e13c a2266002232cda6014412118298db9a9769ae1c7\n39f7dbef93a065149dd82bb94b2d9ee71e02b233 119ae0d3ce0285b025ce96019ae9efac8a344384\n13363f51b049376a554ab302ec2837ab9ab2fd88 3c78da2a05eb586c71c8b6fcdbefefcf24ecbb3f\n8435e532ebab74a3201ced6a85b719f75a2f0f90 24162a6fe301ac0d6a8cf7c1816a339394f49a8a\n9d12a8c7f7f2a274ed7e74650f497cd3931ee340 d66ebf13f03710c0244c4fa5af41f195e2a64226\n4a62476a04523ffe157f42c0807a827254fdde15 ef84a0db39968ea7e66077c5fab53828961b1ed3\n87ce23168358c40afbc2429a596ccccac0f8d051 d9373a5635bb91915e49007b86c89aae98a74da8\n46d743dc7f9bdc7ed5ca531743f6e469661045ee 23ac9fe57e272f97677ec153040e95b5e97b82d9\n6dd53dada2590478b3df75fcdb82868a19b5f5e9 4aafc3f3ab18b93bb60e4f77ef013ab9c8decd02\ncaa9670b8cdd93372975dd53d60b8b872e0a6123 61d85361710cff459d974ca039cb7e07c1d3dca5\n0f7fb12a022a2c95600810864e8945fbab8262df 95f3f68762668b506fef006d533068f0af8b64b9\n4f7758f991c85c7c234c3f0ef0209d9b51b3009c 3989683da748396a1481ed8ca938d3eb983c4ef6\n6d27fc941bbf4a948a82c38f0076d9a9e8b92fa9 5fb3da656cd1e5368841febfe4d82ef4a949b325\n6d4bbd3b5a6eb62ba2417643ca37edc123d7f57f 12e1cd74a38f8b55d852c196e5779c0ab2315c8b\n7b3ca1019e2ab234c428a5476eb0d3b5c1e547da 42eaf62310df1de99d752e4276f478feb00cde18\n926fdcd7b703b32b68635decce8b65263348d079 432fe9082596ab5ea139c8f2a8ff9f1701d96700\nb21c22bb19a0369c020a3fc717c17f02b2058f9f b3d308714d6d6eb399eb175813dbfa0d5244d8ac\n400f0f9d7bbfe9d6bd810879bf2b952b55c2a3e1 6ed701265336f117a50b64482b9937b1d9500878\n962d610e14639beaeb7429e0aa2977ef9a803671 aed07a31f503a476eb62a6c395a8b2f3047028ea\n72f823d3edc4841c4dcc7c2d55ae4dca26164a15 0430d7eb3de4309f24078b1b1d9d6138b810fe13\ne4d6d661744307804f01f6f6f4f634ad23ec7ad0 89f58f07e30dd74f1e892bdb741dddac7ddb8413\n1c943dfbb338ec650cd41d61c9d4cece3217bde2 492f5b26b66e109662c98bd94a082f5e095c6599\n5ddeee0031ae0dede38b3631c5d77e007fe2199e 4dcfaf252891d7da7c0627ad5903f83c32e18619\naafe6235066c4230f713f86fda3b5ead9147216f c7fe7ffb28f12faab1041e627063a8ccf6704bd1\n5f9eda9b0747eb47b456d870bf49e2ab9d0eed39 cbc8edb1d14cfc619191547d83c6c7751653cabe\n01e305246311c9713023678edb4c44468eb80e0c 787ce9b4eb9c88e24a6d1338a6e01c5da6c454f3\need6857f32cba7bd43361ba9567dfc34abb0d00d a11b55a1f830cdb84896a70282133c8053d5669c\n50bfdc3752daac176de16f7d1cc8c5c14e860570 66c3bb9b70de2eb2c81cd6eb83b259254284a0de\nbcc43db657164a9d77a923f17575988dbfab454f ffd47bd3dae1903711aed59225c4427906eb1c03\n3fee88b07b714a18c22161e638d185a4688e2158 ac1aa4d4aae06ecb601b882987e9b95aae16e88e\n698e6b8cb42048acd66e13466b2d9e2e28e6f909 c32fec223c325fc69ab45c50d7c0ab733814c046\nb5f700d5e337384acc33f983f9cc0b6e0132398c 6e2ed92a0da9df928837ef0f6cb170c3523351b7\n55db776a93f04eb5bc21a90167183fc50f42ae88 b7ded009553c725724aca5ee8ed33ca75cdcf27c\ndf464f5cd5657d553bd1fb040232de83f58a2874 08e8f0ccbecde693ff7bc723c48b601901d5976b\n63f6fae8646ce60521ffcf1e6551f78677238fe0 22696d507b3a5022b2fd7abc7b177e01a51a0ba6\n231ee00fde7155eab66db81530d4e3856ec59d30 30186cab3b34986b10c94e21da0c0b190d5b3ab9\n8bfe15a43b65ebe6a1b68e6bf245704ea97dccf3 c32b5f4ed465dfe24b24d82a4716b5ea6098eee5\nb6e078a9ec2c2ce485bb00c5e1f6e7f3974a0adb 01f992b06ce892af73c3da24f5833573721847ae\n67f9604f7546e1f6cf19704d1383494d624ff5d7 d6c38b400a86f4e50815d4734f90eaba9e225f7d\n4bd2ed660df48dc2d08559693f555c5bf7817cbc 2c97b9755a2b425f05c7d6af9fb45d5e488206d8\n2507b4ffe6366db6a652909e27322983c307ec41 d018414a864ffa41f1adaea0df2af7a4bd887204\nbcdefa130ffdc9f231325bc756c7f810b3622214 a8dc07dc68d51db94848b833e226fd5eed078bbe\nf7a291b29a636d097dab13726d525f269da11885 0e91cefb558b95977e4c90bf2e8c00657ff5c9d8\ne07b87af15f7e575b3dffb56dced1ff51b8e5997 50f6a9c767d0669b43fe007ec91a17ff0dad3ae6\n19b57ecd69ff27f1f91d9cc9d8dd7d666d50960b e1da969fafc8d6604c6848bf09f09d54dfd339bf\n541ceb43a2f9120d1b6bac7c9da046c2473bf218 fcf6eab7511af4cb06fcca61d2cf6aefe43572ab\nfbf60fa4ba1831b574badc6429f768bda30d8ec1 41b7e8238b1a427343d83049bad94c0d9ad78860\nae9433684cdc6daae523db811a3c338f9635af89 b6573c4930f2e1d87845ce690c0e8db3d90b225d\n2b261b8bdb3a0d0add13c627be8e1eba0d5f9a7f df9dda905dc92e08cc64e09fcb2a2df28db1083f\ne48941f9fd53a12efa1bf513518ef6d227595bc0 eb3bff3a45ee964e17a16e3801f3acc09548b290\n80ceea1a1d791f7672d2d19523b4b16d3e80a3cb 0eb2992129ea6792d5667e0dac1127de32943cf6\n1de07b725a6e361e349dacd826f535569fb49c15 251df54a302357ac87f30a6c2093f37e58504a6c\n31acaa16557fce1fe131b4ef2538e62a4739026b 82b8f91dca56184e3ff4307b0657b029f71b080d\n9e1ed1a896504780a84832215cb71410067187ff 3b1da34dc8e8b74500a0e118659976b9a1b22216\na0e2645de76b1e319ae1daef16b81fbf501c12ac 8f6d263c07a08924957cc022fc8504e80c7ce8b5\na7afa316745985722187811218d5eda66075fae3 6b7f79ab472f7d668e2f92ca38e3ffa8dbe8b825\n8e678a980fafe514abf800db6099046ab1eab1f9 e181cde45ee022f014513bc96001c1c474963ddd\nf3c561bb9c156b4a423088e4d8aa239c676a59d3 d625dd565cf6219af686f402948c85e2cc3b1bfa\nc743e0163e5d1dc3d731cf1be5468d441463f576 7f9d297dccab0af9479cbf561bfccc7c8139af76\n840bc1871ce84583d8b00b5a878c9ed439028476 1555d4b7f88809a7c2730f64af699ce36543ee6e\n3c7dbb830cf579c27c6e714bd68bc0275c99877a 7930c036416f74c9c1cb15a821f9a68d114b578c\n1f9d230d572408556c8e4ff3e95ea1ea5a44149e be210e1c3349d1e0fad32df4d5158d9e084b359b\nc2f7666cb2330430e1fcd3339890837119d6a734 4c005671287e562f5c09df606306894d4c03b521\n304f1f7bd4a9fa18a549e9c27fe08fcf217dcf41 795c2beb01d4e838582182999089399bf7119e9a\n4b40e61c48ca7a0de9a3523c775cc0544c267b1b 6ec20d6061aa3cdb9c5f6a49024b95cc275ce968\nd9559506c6ec83c003781b339994423a6b0ff6d2 ee710945cac6db157ae6e789dab0cbb0a7bb4af1\n14765b107781981ece9737f894965c0497466554 03558896ab06836af5b238cf1b394774288ca189\n968e6c24034adcf762954d3e85a7f219f54f684e cb69ab2cc2026ec278934b31849cb5f4ac1d7776\n9c3e7bee130a5ebabaecd3b9a85e7f429d0031e2 41a898f433b5143be90aca9b069f0bebc4cb869a\n5e989456b58d90e27e3cc59085484f7484ba8358 07f7b6c6c5a624ce12178e3c82a2eaf623fc3d6f\n1803a0fdd22654bc38a200134847745438756c86 65781ecd17fb2a0c7f6d90c06da69c0266c84832\n5e24d7649224906a78282aaa69a1cdfe4727406b af3d361a96d381bd58d40384892bc2f31d2ac7b0\na84c0266800511e5825bf1f2ce89b27c98648cf1 8bcda7112f64cc3c620888a8a504f1c3cdad4e3c\ne873c123506f1d6612d31652007b9f08d55f34f5 788ec78c496657e91d9d55f3349efa4cfd376198\n3241d12bc7bad76422998a242af76a12102b9dba 60ce5f36b7c8e81e604bdc6e34614483aea9069e\n7f04c466335d7da0a0f0d56d18ed0027c87009da 31c3b7679ea4812b2a7fdceb04048b325ac257fb\nb2021e7085d64154729b2cabee43a266b52d4dcf 289f31a2fd57b3b89efdabe1bd6b86d86fea868e\nfbe2e280131d904fb040023b8aa14deae7f623ac c24bdc54bfccf7f087f5f7107e3a4906275d7e5b\n2a42592a85dbe45981bffa60bcd4fa738cac0794 8e7434caa9306fb0d20b03c82722bddb8f83cb1a\n53feb0c0fff0a10a777241340446b9aa76994f2d 116a15ebea133235041d8c37404ff47d86f3ec27\n3d9caab42db3d31f5b793c7824c4c01873dfb1dd ed794caeae4d6af43aa824f6d88a6f0f1fa43ec6\n1c563c255604f196392f8ddd45bd8e51be6c4d96 9f5451f6a5308b7120885b4a87a209bff9ff96d4\naa6ec390d7fd88c37e9c9e6a941fe134d53bb8c0 ad4894631c9d77769fe11dab305d6db35be8ca4e\n3a9f457a3151f93409d65e3c9e049c1b75a5c8ad 773823727e8616c76ebbd9416f720c6dfa2ef00c\n3667afcf57f2235daef0963b35b677b24bc07612 2ab3e63749024ca30ae1ddbcbc7172b873abe1fa\nf994dee5bb27792969c1961f2a7a20190c5777be 521fb780bb99188d0a4fd51ec9a772aa87a57766\na1925947867e4a95b60817b4b3dbc4ede51478b9 879e3803d89a95030853232dce09b8cf66a9283d\n04ae16a18762824076460e426ac9572837747f89 4370f25a45023309b9b81dd27ee75341dbd18f86\nd14ca4f3a1a19b2fc8359a0e339e58a0a9ffcf18 49fcf8e0c84cbf45ae73d4b23e42450f55d41e13\n64d2c2ba35f8cca5bbdfc4d6256becc74e6f349f 850dd9cefa654b54d3a8fe0124d2a8159b751b05\ne1469dbb5aae438a3d7825a21bd3db0217448076 ca67611422fe0daf9f7fb57fcbab709671aa2385\n71f47bb20a39d063d000d8627e63e49ac507d623 8b426d3e4a6f3831c6f81b57b5eba02fd220f4b2\n39ac8b7a65984062a2fc33f5f6c7090cada0ed4e 94f859ba5f0196d3c423ed2875a4a55f8fc277de\n74981701d05914e2cb113ae327a8f1695d56db2d 92dcde806185f5642e81b12557cb79ff32c3ab2f\n42a6bde78df625abdd06723ea39b0e155ad5af63 cb854145fb027d1e3ebabc323b2185d6d9f2bdf4\n2a5358238b889bcf395835753e36186201bf90e9 fb45b5cd2e0de0dfe0f3c9bbce513c3816fc1d5b\nc5462a307bf4d10ecc06357d1e113913442e5a30 ba21353ab70fb9b4996d92f3a24f6dc539551b76\na3c57835c4a3cfe381e48296261513ad1a27dc59 a3c8584760124bc089275f77eae0fa0783d3d86d\n6c5925107b3bb373b9323af77dcb11ff886b2fc3 91e6f9e1e18c7277e51969dde4ac2cf76708cafb\n85be6f495040d4ec9ad9cb508890a62c4e23ab8d ef7ddcfcfa495ac863d3fef42362e5b29aefba21\na29c1ea3b4ea500ca7dbb3a9926de8b7f9ff2f10 92c0e6c2b148e3638ca67b552ff11308e68cd5ac\ne90fc090a76959a8b81236328b5515606ffd84f7 fc905138f7999db96584381887de9764c8bdc380\nae3eaaf7e673ce1454163a8c9c42de8488687b4a 501c85bb265c04fd2d8c4e29b5329b6e18702596\n8e1522d98dbb7985a2d3d0d26d85c192a6d5fba6 b125157fac7981e31a1e5667d5387230dde9139d\n956c8c462c5a18ae7c0524fe076fb4cd729a11c4 3f8c601b55b842ed6c0f2b37072768a7a15e763a\n2f73d7d0c36b42fe6e4445d0d058fcba7110b857 ae3d4d2acf966f81bef3a9829980eadd04fe3863\n1f262e8b4eca2c5114368d2452cfcde6997a7887 8effe52f016a1207f576d728c2db8f25c53935da\nbb8f831db14ee495d75f7fb5f21b4df764b782b8 2657a0d25d711c1769e4912a52b4fd4848c76f1b\n61edf082d2b2d5feba8ebfa24cd22b74a1e34193 1671f58990a0565717738fd1577d5e3e1d6a0784\naed3acac0f51daa3f0ad01a67fe8265e09ba45e1 5fec9a9e7c47efa998e12167daab83815f3fb2ba\n82fa47a1e230cd699e6351dc8945782be81a3ab9 0cdbbac80657b57115b697db0ad6e8122e7f1d51\nad2c92dde3808ed7283a8aa79fd9dc259a2b9153 afe7ace823d24ee6481b8594c4c192d577b20ad5\nf609ef55593d19268d09c02b4ae98221f0821e0a 19c8c46c511daa9f38cebedb79b20bad61d620f6\nb4c3f45b6a94ad8ca1bf467ca554cee1554f8e82 83fcc61f783a53720af930f6022ac057c33bab24\n63fb115078e5ceca84781d3ddba897cac9845780 d09fb04646c4c1ed4ce360f58c64c5b926126aab\n4122637fdffd0cbdc183f3caf6f51d0ec96d3656 07f945899c9306408d65ce4effd349e2a421519d\n44c9d059415919d5a2269a6c2158b4b6ea9fc910 2b03da4ef7334a4ea8b58009b1bfef2369f9e61e\n4fb3b206584c31d1dea9115c0a795060e50de5fa 336850909328cf9e5173b7e451df47c980d26734\n3980008b35fde6512e25209506c87305c5b12b93 e3e15ee47975fb1042c7e190e4c7b01edf49db0d\n0cb4f35e2693c75711343690799e9eb385aa26a6 253afbf1d9dd8d11432e4dc02339a895d4d09354\n5de4c7ec8bf4d95e7ca067f98e7488e5b41ffa77 1702bd26a28787a97b4323853b9dcf3b026b3473\n71c0cbcd414cead77ec0d013a023ebfd3955154e feb5eda5e41411077dd0ae4faddd8fee14caec04\n58fa319eda7deb903c82e870b6e0579ddf63a460 e4c0f019b5b3a84f78af552a0b753ad63448b0bc\n245450451fc334951cd37c0daab7a42deb4ba0eb c20c7d62c310aca8f93b093efc3dbf4902f83ab8\n25d84cc2dcb9ff679f603f2d43aea49fa67c61b7 0f53ef1a14468f4a886a785526087b67e70071d1\n7c6df91b7c0bd0cfc9b1526faacc7043c9b5d830 6be480ca4e985673efa03d65d11ff2e6331028e8\nc50efd2793e329483f31ab1fe82458e44a7a3743 404e1e2815bb878fbcadc3b52099efffe8423bad\n0b98465e022f3979dbd1e905091b27df341e7980 f7f2c908a06ceda74cd0ddeccd718627f71aba2a\nab10887e8bde215cdd85c9fcd2bd2850b0c37cb9 623f30aeb3697158d12b271d94037c10a956f4e0\n42b068c5940990e23dec4cbe796f45a3498b7eda 8a75d6d149660b77f2e0e4329a4631efbc52ccd3\nea8b9c03bf7f98c682e6438293bc19d17743fc13 13d901e2cc3019461828cc09ad254d0dffceb9fd\n38f6ba2a1d501bb3f9389fb71a1d5507fe442aea ca5c5da292128a329982ee9eb765ca713d7b8af1\nd916ef873ecbc551eafa4aad999a86b648b210e2 995d54f36caacd4cf4bd8b56e3eb137799c6fdda\n33fb15880ae80a2dc28ed2911733ecedf1f18ddc 052ba70df87974beaf0781ef8858c209cc5fa22f\na82f331cc6cd75be2495d145adabd64afba5cf95 7b3813fc81a3b7cba5f5e3cb98294640fa8d800f\nf8bf67013ed3ea4732173f2c4ef74ee1c113c508 cd6a498d43ce7fdfd8d932df2612d6ce1e422995\n2b0b2eb74946cd2cf2cdba39ddc5bf0f6128e481 461c2e8304420efd3ff9f8e3bad2ea7081e3acec\n742238bb0f3d473023de547d83203c42e3987c77 ea662beeb338ae0cd5ffc99053f3b56c959dea79\n82a8266766de1f8bcd449a398ec86c138a1ad2e0 f13e036db38f81c9ca70e8e40ac9b81962beceaf\n3d2dfcfa8a865ff047b26b8e45d7c43688e5044b dfe7c978f80894884d3deb6b1d723e94e1f5eb28\n437da7e95b6c357a2436e393fd7628c84b4925df 2699fb2d10f95c4f4ff688e92ba24932bb16651d\n7ceb28941dadec45bddb9d4dabe9924aabeea49f e503e0a63d4f6917e2621435b5a1bfb4abb64ed8\n0447ca194b4ddef90eef0703bf4906e49bdb09fc 88ef44323a435a21f811e164388a83e262e171a7\nb66c84b3317ebae92fcfc666e10e5d02dee2da03 386151eac7e88fc1e420fa6d2d74ddab9886fe9c\n6c7869ed7eef19686fb07752b0b52bf260fb458c c352d506e9d4fed2066370650356f295ea019776\nb4f41c0c3cefb80c8a80a7b29a3bc40b34c9643a 2900ad9b16455db24fc00abde0a4969048bde18f\n0d29e9fd2a0b614f5ff1693c92f2519376c17611 b339a604c67b7c575a175590532637eaec08dbd4\na04dd0ab43620f6f10d96275bc23cb057f4dfcc6 2762de1abe4ca70ad596a22f2896211070bda4f0\n17330bb94c37dbac03c47250d1eb50ef0bb360be e0f86c9599dfed5d466b14cc8999c9b23bfea25b\nf3317f0734e1ddf1abcb0ec58cf3092012eaa619 2c398d507489a16a8deb6e8f8f897b5aafc8a8ed\n8d9c8ff13434df345e36ebaa1ca16ed28326f51d e4210d4fb6a194ae85bf94ccbcd2ca158ca58042\n31decd2e4fb713738b5d8b3d63c46fdab7f42bb2 bdb5b9ff5a38a9ccbcecc74826fff8ed7626e9b6\nefbcde24b52e9c36dd7b661ef8425fcf67457206 f3595e0c718cdf5afdbd9d7c577097d4ad2e186d\nbd1b8b9d0d2470f0bf864429ed9d7715aa566cb0 bd73ffbc968633f339fc7fa7e764e644586b3a93\ned5a0818014b602f896a06e313b1b6d92532a321 449f0f25ce67362208c32a8f76ed077742bb35a6\n736c2f658c4b9d737efe09872d136ed46c7112ca f744df17bff7f1bde80538c067678488bdfef20a\nb6dfea251ac35e30fade2342e2ff6401b280290d ac7d40673e05d2ae928b3af0224ef403d0e524ad\nc1300eab8838e54d842f4304873f210f4400aea3 a851daca330e2db55559e2da820777eceb7cee3e\nac41f405c4633058e6cd800c7029292e4e5c3cc8 270def179c25f51bdafba5b260bb35352c5b3e76\n0ea434ad95485105cb5254ca2895d13a751cff72 e714d39f2e9c0f416f9d795261c9d38bb0c9f0ec\nff5e0aeaf169519c9dc6008aa5f1940982c02bfc 3d7c896624c1b8a83fcd8dd1cbe28157aa6bd824\n0928ac30fe51619556157414466bd9ba91175a24 d6668812d936df462d312b0fd221ce187bffd669\nf2f5c42348d3fab6427b2fc8cd76777fa0790ef3 9cc0c414bea38eac5c8a47410e44311264740a6f\n85d7b21af78307d5fcfb73c34923f0bed6f00d9c c5fb5e6c36b93fb6993279765b4fbf83a0c258f1\n40170b9f852ccb8fde24faa5f10d0d0507492f8c 221f45eabb5f30b7a58d8c7f6d36c4d7af024b6b\nc88733779019096c14e1ba2b61e47d840b334ea5 17236955e419873aa91d83257c6370967ff25ac5\ndee8024d7c2fbb4571121c51ee5ee7d8a6c3bd8a 09551186f28b322e53a116cd13c4629be257d132\nbe8a03550f325cf7299f579bd92f90430d087695 626044fcc10c02b259d8a2fc9e3e6b0830188561\n73156047d0141c8f154959be2adacfb6bac8dc5b d1bd718986c639f71c68f2380f8ce82db3a8ff45\n0f18748bc74741ffb09f2a90df75db2a1b9040f2 c098b565c76d81542bce01d88be9ccc7a3f0edd9\nf72c4bf62eb49790b46885ce30c59e4d4fc4b27b d1832d41dbd9aa5952661fd184dc2572d89987a6\ne0a783d7f6e00aa0fb966b9e77851994c07d7bff 8213d6a309c44192237b79e8e6039907a5c5371c\n8911b63becea7615d51d980a1e214b27dc65d173 108ca92d2dfd10ef243f9e53cac3fd2ccbf99f17\n81139d7263f11f318078136d1d667c44a5eac244 9f11035e4509a0206e9f10c8871636eb2034fedd\n2e1781d462b584a24fd558d64ee1c8e89d10e7cd 8107ad598ea9414cb1977d72f7e1fbdb26ab7865\n5b8a507a49a01d233cf52a289523f3e5a04faaa4 1ef592234c5f1716e344459473c225bbb3871d26\nd6a83056d7ce430da757b3e803154b8de5732c19 04c8b94910d5fd5e95393a9b13f2fcafad9d3ba9\n95583d00bae285d97a22956b4d0eb1b363cd0908 f8ad3ea0222cd007ec7fac7ba199bf50fb441091\na1d1ae857f6b34b26f4ea227f9eb96a1cc5b4434 d9d49ef647262d9d096a4a2a9ff13d2da7449bd8\n94e82c091a93b41760ae31419820d06cd76afeb2 001fc34a6b6ad0c1b3f96b9932a8a26d52b7ce07\n06a0b0fabecce803b90b30303c567830d34eee42 2e28d2fee2156d872767162ce5d49a25f53a64ec\n8de911a57fa9d50bfc289e684e7b1d2b5b4ddf26 4b743f7f0447d3a7329830b77c90e2abac25e412\ne00183ab3bfdcf6e6bf0a8c6b8d7341f9251c9ff 7670ed3abc533ebb65597698ddb1d5992e6c5524\n573499a86cf5f2a54b51eac4d92c6f383db7bfdd ae6f401bad58543de578d26cb96da1cddc60bc98\n64f45a78430eeabe9753243405dae1b624f5e576 2735293ee473d7a36c234f38cbfaf72b59c2ebda\nd010a726beb8c6db5c5071ad3947146918daac54 806128079b1c0452dc78d5e73d3ebc03184f8c48\n9914a3ea5aad5d6100b9aaa0d7546bc96bc3fe11 0fb1fff76734ce00550a997a0fa6b039c5c8dcef\ne1162b89ae00d5dd04bf98fe7edbc8529c14d041 07c785eb2052344aeb76f5a631960574107e1dfb\n5adb822c035da7760b4e024776cdd553bf4ec0dc aafc39591b45095517b4d9d975b2161d18374cf5\n0a9061889de0c67d95a32ec16149002c5219b8bf bda7b7277a6077d5ec109356feb5468725c026cc\nc9f7f0b801bc41c1222706512b9fae0f95020543 c47d9bffed4cb955d9a6c335264ef85bbb78b6b9\n791ac2b26f63a265a9bf4dfd7294eb8cdee34156 e2cc4f287d6699e07c212ef5bf8017aa6fcd07e5\n7c515d2b42cbb96aa56b2cc6cb7e4c72d8916317 677650bcfed88e6b0025c004f48b863aaebf9cbe\n1c360d351f5a42f629c54e27dafaae3a3b312373 195cc6261a1717cc7dd4e4fa198b44d7343d6faa\ne38423fc2fc9eca7763b46035bfffb358158b1bd 49eb25b31bc44674553ff0df5245983c01be7e09\n1d3c7f9d3d1f0cf91ab3c29973d0913b27873e24 80fbab623a62a1619f7eed1c569bc69a1f55c951\nc2f1200713f91937200ce64e7ee60d23ef6cb5fd 9b560c07587b3af69a5a2b454bbabb12fbca2714\nbb2691999111d51d6b82a4ace3d353420d2a6287 0bfdcdde2d4ea6d41f879e129596dab688b88b25\n7f1b7031ef49ea989f89159a88461d808157cbe3 89e9730993e994b5efac9914c7962097925fd70f\n95cfc9cefee48fa876f89635416dfdc6a9e7183d d705d26075d30471427cff2b4fe63046419a4058\na6b902067e3a65fbf0a21f917b9752499063e7a8 4bbb5bcb7133511524f721b140c9231cf9c110b7\n4446946617f4cd005004b44846d8368d700fe312 3e53f1c59875f0d39949326457fa9e1b012d2985\n697996c8e0ce3a6037157d252e3e6ef56ae69115 4b3ec27b9ea1bd4695f3d1a43113d2dc4ea541d4\nae4e9d8bea5367c273f6ba64dcf1004e26461226 f33f9064170ed9fff0a2c25e121bbeb5f181cf9b\n58ae87f733ec8a1ec667a2bd12876f2993951792 8382e79131692e9804d79245a769e706048fd9d4\n970ece67845b60a56cd28043724c027a3652c5cd 2dca4a4306335a8db78b17af8d197cf9712f417b\n4b0745c4448b7373f0fe4f2e3568f633e54f1a0b 00f95d988567113bfe1d586a72593463db8ad24e\n6eb7eef49f6d2bdf473788f621eb9175a70b76ce d023b8cea4e70fb4124e4a8332011b2e528ee28b\nde6e16d4ea314e2f52cdcc8de95c3bf786d55ed9 be718d5e4eefc221c49eed034b702594068b6458\n067c37fc7b64b7f76b0997bc1a70724b74790b20 1a53ab5e5e0551a1d107813658e5e96b62b8900a\n13d6c68afc9b87b2f504d87e4146d944beb43184 63c00ccc76afdae000bacf837f92010039a52024\na089846173f8dfaf2b9dc408c8ba3e3cf6533e56 c40571cc8ddb03c127dd8fd75b9067848c13d0a6\naacf0af779b3ef614bfbfbe32720d38dcf86d0aa 83ba12a5e6577f021c1d6e70be454a23f8198340\n4233135a466d0a4871cfdf76a5cf5d1e4848cbb9 d75e52980771fed4b23c54b18ac959209d948d50\nb2c5d94327b2cd46467bafd188e6d75b3c94f5c5 ade69db0de28f4f88369ffeb2628244b90230ac2\n60249a408aa97ad35412a232dfd3cf64e8b6e7fb 55007743220e7b24ebcdfe2aa7d87980b704b6dd\n18eabce33c12858ac7b65aa74797701f4a806b20 c9fa4ca5709e52e3a04c88d9a83c776d52920bb0\na6ec07f01eebc3fadf091227c4dd2f7cd98af9f3 791c5c5a79121c1e2fdc29c861aee58ba62d0fd4\na6049e0d7adbd5835913f274067ceec08ff7709b 0ce86640b85283aefed384782a730795856c9698\n9e5ffe2ff78a0d473355e8e2cdb8a0e64d0f0b28 6965c9271531725ab5373f34c34f75756708015d\n34c22487ac362da596b0a3e748818ae9c38a738a 18cea91d80010c4450d744f6ac3fd927ae76b5db\n5cd7abc7e648472ab2dd08df8298148cf677d967 6cc86c31b2e5b694a822c58102ef113357bef964\n3c280cfdb9f6e421764260c1c3dabf04255c795e d383c1224632f1cc54d7216bcd58a42e58cd1204\n3d194139101bdbfb8e9240e1037f7ede549ba694 234d5a794b44d807d039c4471ba3df4690518aad\nd3445574e2cc68127ca9d73dff8ce28907b6d959 8c683b8ab249ad96502dd177077b5ab539fff13e\nd771f52b194aca77d2315cf78cc817ddfd13c6a9 53f059ee2cdfca75ae556820b16738cf60c18c81\necefab308343b1b59396e396322b06695174c815 cafdbea9593a313a81a6f8407efb86bc82241430\n5165fc916d20c9a045dc8d55371f3b9806cf33fc 6e703ad0903f7e34ad181ba099668b29e0fcc08d\n6f8b9f06338434ee2b530d98cd94077c6c320d49 bd891a00608286979f3a3122ae6e5bc284076b04\ndc7b5c5e34a37601ab8d02a168b211eac46009d2 2cfc72f10067092273afd2aaf59811083d8065eb\na630a76df7055a5f50c73abb4019f238029757ec d82b8201b45e39fefe52c5039aa77f3677485901\n925fbdceb6a6d1daa86a8190ec77455b8a47b3ea acca8d95cac634cff311951d06eb6f07ca9e7448\n6c1cb46ae9dcfcde006f2cb888c1345a7d961bb4 01f408bd70f4e20ef1e0a4580f5c9f0b37836897\n93409ba16b4c27ebd52966e6f66c70d237176f76 b5bd6f2d6275a4e8b13704daf1d8b2cd95076f69\n1bce7b13b8adfec6169d67b41e6199f2d219d478 b607ac1ddcdaa72cb266885ea74c84d5ba5c3e91\n88321599c91c262da375ee713096a8057d40ad55 beb88246f7d7bdfcbf72785db7f264ed8d324ba4\nc2f16570277318141bdd7bf0c798a23033aa3a17 a7bcf9220bfb83fc8a212244bd54be10e008f20a\n94d2eb25eecb1a40442a6a0a17c04a291987b20e 4d222addd91060d2bf539c3ea9e0415c6aa133b5\n44855ed61b670e5fdc17e7db598b671af28792d7 ed3dc325974dcf5c4e48fc48d2019a24fb4ab619\n63f12c1d46c9285e84055b8a4372362e1fc52931 f89caa02e10dbfe614b7f8b588fd9db2eda8b28f\n7112d4631ace31bb97c01650b25d68419a541f13 a878345eb570723f36b3d255e6ef07bf737fa1ca\n3e773180d071e37eec095864408b77b1f03383cc ebffb11a47d3f7abdcf8f966e5a6442dbd2bdd13\n15eb883e4e00ed514a2b768d7866590e1eb57c54 a78e38228f79b5c2a565e57aaabaad153d49fc7e\nfc32a78f5fd07ec160a8d8fb93cde2e978ffde42 e90d93a6887a85fc67b51ff0995788eb1aaaa292\n38028747b1e77bb836de8083d002344e97bc61ed 2bb1bb6d56f4e8b4a742b6bd5909a7f772550a88\n7c95b8b1e58cafdbac8e15e69946f8c3b7589815 32fb7a11b60eae25ae75aee0a0844a8835993d3f\n4735cd377178ceaacd343b831aa2db502d38db1a fffb87dba04bed347d15d26e7cf59a9d11d4dc59\nd46c19d455a4f21c26d201666d5db6f9422d71de e7c2f8ea1d56359cdf9d17bef65ea4cd86bc7cb5\n94034d216bec96aa11a74efeceda23aebe890a15 60351c719eff76d006a7e0d635f2d0fff850e18e\n93338f3f5548b0526151a8602b04862083509353 e66fc9256367711e10eed4a9aac509d5207a1a60\n93a419363a5af3e144b2f5cd945c7a059f296e17 910ad891f6da44a57340b42d801c76eb0f707d5c\n01137c7d48ae21b39b454c6fc86a8455cadf85cd b923a23aa4951edf9944f58020d8a43a594799a6\n1e52a7c6fd527465bcbbdcad12cdc21dbb7d783b d7ac5b892d4e7be0e375458ebe4de533766d77d8\nb22deb0dbba7788d836dc30fddd663f19fc51b09 7b3ce821062e117c16a957569b062b5f1ad47110\n0dffa52ce1731c59aa0026e71e699312e08d3790 475a896d60fa81c78bee7ec56fb3002403621d37\n80e812879871ad3ce331dec7601b3a293b8675a8 2f29c10e594b9eab881dd9f9122dd3b7fe69b61a\n07f38c51f0b5da394e946c0567832d0e4ce52891 6c3b602f4ba7a5a0d20bd0d32f59b116f998e4e6\n71875f772ccbf05cbf16fdb89215a47db64cd387 b9544e2eb2a3ebf88409305f1c5fe83638233d0b\nb0692903fd4bcb1ba9dabd2bb264f15a62c95de3 ca5dc40a0da0975f5d436bb929110aae292edc42\n3f880d5487948e3efbf385438429f2a43ec871db b4278ed3f7afa39b3b57931133050be9ff7dffe4\n1bc1954fa78bc8ea0268b486104bdcb376b0ebb3 7cd5540de7f418f3bb0d7e74edf22157eb136089\n846ba9396ccdb87816326eef6782cdfe80d73508 3d4c3a37125ea953bee5c2b1abedb7790fc8f4a5\n5268e729c38e558354f75e457fdd58e906ebd343 6a89b3a3e4072d3626425a31775cdbc145aa3277\n3f49ce413203ab0a228e11d3492e9948afbadbe6 b2e1899b104938225b475d49a20c2fed373aceb8\ne1113cc77382777282ff453fb8aea024143e3a95 3e10fbd54be81883dad0e5f2d2e5a56545db2a9f\n7e3f119814c7c231943410dce10a394a5f4c1d9f 5f892152c23e6877a337df616a347d2ae5f143ee\na4bfd94884ac79e2db8cb0262f9e0aca7bdf2b3a c8edc6c2725f6635e16043a230e323dfa8fe92c1\n55610f7aed5907b07c81fef63f6df3929813b900 2a3e1becf1c55d4053d0d0e1065c665ac3d66263\ne9eca803a9b4a1e481e8c714c094b1e636701edc 2b55f571937bc6364b997811b052861e5f91b886\n8797ff34b4b3888d4c0e2c40d4f53452dd53a0cb 3a721480089fed19eaa979cdc1316499d0017e0d\n36bbe0a3be380db57c88d64d2b8c51b112bceda6 cec206e546576f263b7945d4407d6fc5f6cedb6c\n91cefaeed3016aa38a5a0d2350c916662a96bc0a c7279a09782376708a2f31b0e30cf0ebd2a39efa\nd0f3ff2e94ba83c3d7432130c49c9909590d2b1c 5c6a5ab707741d0d66cc703783ac4ad5537d00a3\n13d4d629c3219077ebd423339a5598c87558c0a8 dd638ea7ad97f3ebedf72c034254d119bb646acd\n57ab6462dd4f0c09d538b1be5e03b4095d04a5c8 5e5bb2719007db70cf79b3012726121305fae632\n7bf20d00b207498f3d110ae6aa895d74e0e7aab2 5dd6ef945609f67f2c8bae78cff6dce07d781770\n8b5439ab4309af7f07df5dcbb8530c37acfe2027 f2206cabab426a9a417d87c46e7a027ceee6688a\nff520c3a44d048419494feaa6e0cf6cc7bc97392 b0be1e0a863641924b8f88976a7e76987654883a\ndb608234f04b9951c27c7491fda5edeec0ff2809 cdc3ab05e551d35ccc8ea5e4a68716f4d3811fee\neecae5e526da61463d76009c8f562b476186dcb2 377ca983b6c25fa56d07fe5acec846b54391ce0c\nf77e8f40076c31880c9889fb87f94f3b518602ec 4eb35706acd2c116c32f319745044ca2b1372c2a\na8e8464a1673d9c560039ad1f7a1ef0545868660 502293939624e2b02e3156f764ea40beaf516ceb\n7ad1f64acb1b199949b777e33d2c026aa199075b 5c88c0a19622b1295f0032b3386042c463e805e1\n1809c24c82ad372fae807435a93d7e5fa46a4f8a 66a7649f5e01d309f0defde1f17ee386f3d3cfbf\n615776620e48c9c39d2924c83113ac4cd1cd7296 0e2521b398c2590dd356f5b3533077f16b420661\n89eacf1c3c17e5475ae78b0322d4ee0ce5d051fe 23c157f967a8161bb75ab86824bda915ccf6e41f\na86151573f70ce2b6ec58d1ab246fa40ecd74601 5ab1645b80d74b9a59172a8d53f427fadfd4cc22\nef4bddbedd8b9f4cd684800239b158c06c5a8016 0f322596c2f8d0014a321d7e6ad45d5c277f1a20\n25028a0fbcf4a2de1d60e93ad4f21fba4dff58c8 547d4e420706305679090ad7b66da5928fa71bfa\nf053e438e28ce19264f89ab5f5b7e37590f41de2 d36a89f8ec36c2c796fed48fb1197c36d9f821a4\n866c12982a7f11251fd1448bb47e984debbb3ab0 a93efeea8bf42e1adfc6d7d8bacdde1863d1a064\n493b678a032ff403a279e456714feca73cf0c04b da239e123e1264b97443ea2498ccc1f2529b8961\nc0d27b716216c1320d29ea1140d2afbe01d8a507 90839dd841ed510dd79a559c338204295dc4bbec\n60b3c917e6e207e0d81cab8e176afede3b37ed0d d083be5ab659ab509e1ec214ddca51c234b5a47f\ndd8ff177767a415e69add10fab9f1294ab3e3386 e0e80030219baf47ec8b3bf5a01b2e262a6bb66d\nef7c20bab11f2fe70da0c52020a3e80571833721 53d21624f57cd322b93c57f60c884a76fe113f87\naf81f8e40eb10e426d3f4994c3903d609e3bed32 7398c1b08caa172a5651cf3318df08aa3df85be4\nc2477842d79ef7a4d5ab23bec35d6760c9b0b4c5 aa2a7775820de82fcd3b67eaead8807c638ba215\n41bf5962fcf168c7c483190bc3f10adb70dc636a bd4dce5084574fedc6739df1c385b14e70f7c3a8\n35e6af4927abc87cead030b67ead23f9e50dbee1 b10823923603ec2618e3edefd97c03b34a52f295\nb53503829d56af411a92c4d48b9d8ebd9c39a0d8 806c2505d7a832829cba9d0c5c46a3f46a7a7c3a\n32293551e37180abfdccc0003e21bf9ca5a3f09b 3665ebe52ca4bcd8ffee4385b2eae7b98c8bf277\nd7e7a546a382c19a56c4c4c4e042c21836357205 7fd8c8165f9bb0065d0c4bd1b089e073825004cc\n6d460fd470a4002d40eba6a0b591e96aeb96efd5 5d1d17acd92ce9bb8f4463c91c1bc3df04ad4bee\nb19e75099775cec164889d9c5ce7ddccfd33b097 8cf22ec1c55e55ace5c64b4a808018e435615cdc\n2f61e14e1a18565999975d614fd96609233ceba1 a527975191868bd7b72881fd73cf4cfa4cfd752d\nf5e226ab8337538c4d69642ce596a105682344a7 4d08bb173154e079b38297d354e655326df46d25\nde402080ab40619fd734c05a3913c1149815c54d e23713370dbf113457eed3bd3ee27f69bda24395\ne2b2c75d0dd567556d65cc1ca6f20d336d48fa72 f583c68c88d1fe49321b9e1eecb7a3a7e46d293b\n3e9264e31e3d314342118e19134b37cffc26b554 d0c78d1426c2583a5fb5d39bc3a10dc817945cde\n3d03e1428ffa265b4abea2cea566c4a63e75d224 aec284f8188caddd5dbeebd059206ff163c9ae5f\ndc979c803b5a11a5fc1d69c184ee77eb454c5b92 99a6b7656ce0afac3eb3df0ec361d718eed683c5\n80662a3fbc34ea6e85442384c14ae1dd139ca834 8fa8b1ef4725f5b67f9dd12e26d084a33f4cba80\n3844247149b3b7ff6ab7ebf6d87bbccc57616b0f b96e679da50fb15b066d8873ea2d37d864025fef\na8dc8852dcfa1518fb9fc3e83b33ccf8881e6e3d 9ba42d268bfbcacd3b5d447fd7d6241b1cff8b23\n5e0109ff2ff0c60ce93e6cdea4be01bf5fa58333 b18fa3f4ec9e7ada5c1914c368ce2d8bf188931a\n7f863b35926ccaef25329cadbe9c963f393e1623 f9f98198add1e7e556a4bbd3810a5cc631fbbdf8\nca3f2b3ce2795bd5b9922c7935b525b530da6da5 012d6350b703b9a2f028a0a62809538e8e350b98\nefd66c3da9e78b2bd28f56ebac1ec593b2eab8a3 6c10c486efb37d57172a6f4ef2085ab757e0f79c\n8d3c1fe37fbdedf6a2e144d1336177ea9c10cf91 c73a8569086ce117a3846266125568565ea7d9f3\nbb00fed61c305c2ba95b4ad1a984b4ab9d9907a5 15d5556e7eb8d34a3a1535ca4d3847d70ccd88ec\n21c91397181a08987a72754fc7fd1b5bfdf8b1be 0f760f3975b263b905907b9e558028e25f63fa46\ncaa22cac417ca1758b0bba2ba6442fcdf5033f03 122e24ffbf99aaca2f9926fccf5a8bc5c22b593a\n179d90ed250352c486a534dd1e71b51ddb9a551e cc5c49ac8fd5574c2d1fba9ba0ba06cc49333d45\nbde907a178e946d415cdf6c53e9311dacc882eb0 e32d920e5cd8f272d2f87d43a6255ea6a89cb7ad\nb968eb53671dd4e985fdb89c9127d3ef17adeb01 f35c6cc82e82291b8b035fce1e14190c09d00630\ned05e9a1b43e21dcbb934519eb90e767356fc291 e7522d27e6232cf8f8845effa0343a2a12c51fe3\n8fc9a0127795008eabb06977b463b73e7fe5042e 82f55f523e2e41f01a10fdbf839450876bf8ed6e\n649c411d88d90f297e9b22a4069f4c6e9d98afe9 1498bc7be05aef861c103ce3ea176ee08f0e12b2\nf3ceb61deb18e0df31fdbb7b72a5c212d0f844ad 754007c5be5c74b83dc3d984af9fc98d1deb37e6\n78a8f12b89e4f0241d7c13500c72bb1e805b3520 8755696e8bdff870615445c1f28e67f1150b7c94\n066f8a1dbe511eddb2f8556ec3f2eb20ec7bced8 4531e1f5a5e3323a4f11982ffbc70efbcd8a4d5e\n1df52dd3474d0e35a0f0dffeded7603cf03d64e9 ba6b048b20fa16f07902f86867ca85b39140aafc\nad1a32b6b05abeb6a555b18252737cc1d1522707 ec21cc0e8f57607807f97b90519d95cc6c4ce0e3\nca478fb47a813c5b94ba1151ac0d949fbd8f034e 5c7dd006a9aa2a36293a3eb31f0f24acdca3d370\n8ad4c4c020fc38dfd8d63fcca8a85dbeb8782def 19e3ce15ac967b591bb368efadf47adb229b9f89\na60491fa754bc3994cb2c7007493d4ba4c34f54d c15ff1f64a25980680625b278c032629b02c22d8\n5430955dd4da411531a0bc97f206ca74f923714d 2c740a1fd9288f8b0b7813c8ff2096a800190b7e\n8fc98cce32f7ea86320fdb7e8d97c9e76903350a f82006e263cf85f5bd934a80bb4042a7d7a7c145\ndec790efb38ca2bcd0388f6ecb0f34e53a149bfd a4d061358cb5e8a9d375dc2836d32446828c1cb8\nc1ccd084d776eb7d0f706538dc5ff0d8d9ecb8c5 af89739a30f617f8fd1e017c9444b1d78e105a09\n9b39e6b40865682621f5aaf84342b3c5be6fb7f2 7982ba29d8c00a72e189496c9612550eb7523b7c\n0fc13bbb191754db701a56e45a68a8dae90ff852 d00f719b969760efd6431ccd7d23365c8f8bd1ea\n41c50c66ac773f3235235273b639c009629073e8 062de09c8f4b8303d8f2d427b1bbafbc7b5a0b59\n5a1d591a0839f6b0658a061392326830082a734e bf377f0672057bc861278d137837db38e3fd8762\n445fd6d03b528eb23a85d6c326391729a0298b7f affce281a70862c1984b4ca89a829253248eb809\nf232485c3be29887b72bf5e342f884d812ae822a 33440305fb2d0d0e03e6ec641a65bc885d85697e\ndb5082380c02884abe4fcb1b9721591532964ad0 25f6da72583787554a710ea983a93679d5b25bab\nbcbe718d5dd91506f3e6b55981809e2834b9ed5b 9f7fb0a6be055aee6858182103eb83e2c103f0e1\nfa6f6943acf7fbbab631812769f003c4c4af462e 560791d9cb1e3e0e2f69cb9ad73eb569c32b2228\n1d5a7984acab51c1bc4b7d9f38cf8692aac31cc0 187030787d7dc1af8d438ae8f00cb3a98b86e89f\n31b0bb4feaa5706c0d1d3468f27d5e1a71af96be 4506d58e2dc3919c322f21891330d810fbf3ab82\n8f96d156d2142a88c072867bf76f5afdf4a33647 221b4490f7cdc02505a357d7bb4de2cc2d814065\nc57b2927b5ef179cd04f36cbc7c68ee2d48dae62 078395428626f4fac1774f3e6a48669ac0520e04\n9772cf293b3e79aeb235c7208c60450bc4c1b074 403fa1e6b1f69db5c9e3de56ae2f817a8ee43af0\nf2b04f842568eacc59149799a7b172e9849afad6 396b47ecb3a2baf27e3252c43b4993494993b78f\n645cc7dd1ed6e0508ff654ef6785d84d479792a4 c4e93e3faddac56bece6c9ab209efc621c4f35ae\na6c5b5e4e402c8032c7d8bc4cdd67eb87346781e 2f6fb48d4e51796e843df8bb154c922d64db51bb\n942b141433f3e4a36953a435efe26a31cbec3329 1ec65e0ab51377f8793275015fc4e9ff6f55bd44\n42c16847e80bd57d91616affe97bff68d0e825f5 fd93d402e591ac6f0a4adc4b27c29cf4543a07d7\nb19cd17d8a7942741e161b50d4bac5e1d2fb9a85 f295a8ab9029d8d4a13edeed7913cd9aca826773\n55cd193d0deeab934e3cce71a9112ec8e7061bf3 d348fe04e1233ad89cfdca1f793c69ed87cf7c8f\nb8a76616cf3310e221ba86f225aec1e751bd8473 8741dfebd7ea4d2363e53a4653691dad6f9c60e1\n9a89fd763a77517bd6ec4f53d863900ed01d74f6 f18c50a41ab2da385c83513e68a3f7a0b16267ab\n46c94ba1bd996121442cb3ae99257cc9e5c3569a 954a1c3477cc3a0f340915659b5e8cefd9f04980\na12b0c41d698901d9f6c29df13193bd0680f535e ea6e82eddd5f2b2794c31152fa96e0c7a78d42c4\n6451761e3eb6909c43ddce3c2260db48c562bd3d 3e045fa61255468a7e03bd8dda7df2b4253b38ab\nb57e2ece589ca93b665ff575a5b7cfe50aa3613e 6990503eedb63393397b73f21e3144a39fe0a743\ncfddfeb6a4f4b650d6eb98c86b2a445e4e9b1b91 dea2de13a11313eed8dc0e707df3dfd0a8088229\nb272b52e7e0efe5212f2e40932d085839634a465 d24d78fdda0d6927016aa495f1c24c9262b3be1f\nff18f10a75b917175b5ed82c6f3ba6243e2259d1 db7e7a676bd9fefcb876988e38d27664fa77566d\nf5b0a173d1dd1cd6dea7bd8a6cbe67400981809f b8182292cdd849d686b40cfd6bede6ac4cb1f13f\nc2133f3fe3ea5d4fec12d9b9e9f73571e2e615b9 0329ead88c64b9a8efef133adc5a7b6b61e737a2\n216bc1f81da80bbf63bed3ed04d713423794228d d86671cdeab56a76587a2db2fa23bc06c0ff6a2b\n08d511526b2f424a04e194a1d2524653dd042c36 48d4b5cf92c3a6151c1d69a369a052fb250ee8ea\n2c5f78e3969ab17a3e47268a19f23616bfaa40e5 13eb9b97c96a1c2adcd2ba993b5bac7e6de59736\n820418ae0d406cb7e4acc6105fac00da466270ad 521998a6210e2df233115479603fd00adbe8df38\n20441ac5c6b3184e4f149df37e023a34f0590297 6622b742aa6cc878e47ebf6cf38569923c8a709d\nd8c702907e9f8daa6b6cf5d30bede30df2532740 3575e6c24c78f2e78d55edd5f46a5ec0ad5fbf19\nbf9b7b4d7c1d9783374bdddb4c3b3150f3e11965 06acd8e972d13d4284a5d0a30a86174e76b84048\nf0950d0da725d8a0564361f419c3d5de97559f94 af0746298ae6dabe3af20a7be29d8b550dab01af\n4892ab6d976eade54b70833798076649518bce17 dde970f47624706ac9951fbf610345e873d0c8d0\nd1da231c6cfdf690d27646f8ffbe2df5d52b9a36 add8bcad6c56d8f48831620e0760fb1faa7156bd\n9cf483c12aeec1336063f574e0ab3c5fd6801f9d 2048cac69c0f14d44ef20dc9dc64a1aecb222ca6\n3f0ac8bb5eb42e7857e5195b67cfe66cf40459c2 4d3042a101ee18fb56b4b2f1a815b5ca9781c08e\nb4152a629d5722cfaaa10c20b8edebafabb6ec90 e53a95cbffd34ae1ed136f05ff134a5c36543369\n9ea58a8bec975674b507f2d610472def235a1c58 8789ecbfee69f99c8e6b42dccabdd090f890d8c7\n0e250ab145e9474506f63dadc35c7b8f6aef3fba bb6b7e038c010a87e855ba815b8ca82c7a9c4d13\n3eb3128d57f5e2583e7ff89cb68ce6cb4ab862a5 ae8aec4735ecd43202b395616542816c0fdef5b2\n62af17482b964ece4a352379852c273bf396cf49 d072de0063e98186df895aa5977de664f1ead856\nbc57a8de280a49225c41f1bfc9ce6525e033e00c ac51f6314c67e723b945431353d6b3b1863622fa\n12a58641939ec1fdace357d28a185f4386181615 cb233cfeeb571f591026bb163f5b10f124e8eef9\n2c36150722fca1f0875e3ac01fb56335bce639b8 c9cf2816e96cafee956554a228422322c3ac3ed6\nf68e2550f80676e05e961808b3fc661cc0983c09 b29e7cf28df27337f897be04321119bc64f6a887\n0f4d764be5ff8619ac6202d60e49e561c630e074 4d90ba83e4ac88696cd5f6ccce7ea2b31e519ed8\ncbc189c2995a1c260e4b976028188126a1bdf12b a7de540d4f6518512a803b407341aec7691becaa\n7d31643da3b3049f98510bd53cdd035e00a9ed6a 804f5dc5e5b6c8743edbbcf48aaf117ad53ad108\n99d34ebb87badde0d3f3b5a8e9f713cc40c6e8d3 1d1acca63e183fb98e3b4264caf3c15cad161d33\nee0d37a0be4f1adca4f94e53dd75d15ef54a1c11 354ad56ca3041d8d6e1eb4af49332e9181859884\n6e183b9cc990f03f4b91ed5c1a1e2617c86bb0be f21698046d09d3640c8562aef3d7d62a21a9e7ad\nc437c0398ac67ca8705f1757c66d07d96da18059 91e83eacda4214836c0f105461aa660fc356d844\n75af84cae4431637843a0ad60e71dca3060b9206 a5b56ee48b6c250d42bc3de5a4666b3c0382155b\nd0715e28e2777bd28462e97e485e263a652969ba a53e1ccb26584f31559024ce455bdf132af9a682\n3fb258a4d338a0544e82fa6a72e0cb1e2c23e797 184e81291c7c04ac3707d777c8696c008ad0ceac\n8f17e89d151f7404cc67e7f16b53436df2a58c4e 5e8b47db04e7da50fb09c504b6c4b07b47aea6fa\ndecabe95d39fada80f65dffd62aeadaea5c8dcce 30c54484f300d360810f8f3e683565971dd4a158\n8d31e8968a79d0b1ba2dfc075575592157f80940 2d7b39172ab1848ebbfc3b48a94b6972f5f20111\n4e4ce37f6d4a866f4e4eee9769e4fe7fb1d7eab7 dab032816301676d31096f88507e354a0b5d41fb\n4f5fd0f241c49319ccdbb37b2c07084fa32fab57 4a1cdbd980f8c46c76d721b9be30802b5f632474\nfbfc73fe49c388c7ca4231b98149d614c7229934 a5462a3f26cf6452730e00ae8fbff1a8ea5a908e\n2e70210daa7131778cbf3b68219ebb34bf36d621 85dd5eb2b0fa00332495dba08d9146962dc743b2\n3ac913b10e5a996925e4acb33e6f33d796113a24 f18ab5499ae572e0920754cc490c782d1a1704df\nd527ced9fa5658480b81719a2a23e7c98cc422b9 8607e1c725d4499fa454d38d4b3b03942334800f\n2b6b34a74137fa8bc873d4ac7311e0d39f9ac094 94cb49d7357832d399126eb8d9f50ee05509c08a\n24568dcf8faa3fef92c035b5ac622391e165c5f6 9946d111c52e8adaf89598a80c59db53e7c280d6\nd5734a55717094f97cd554db08e0c87973814e08 e8245c9e008752efa10b17492cd5f40389a04f04\nd51207496410acef6a26e7b58644666466fd058c 8f6a28b571df9c0db57b3501cf4c9d4c88a73b84\n7984780bc8ca828cfff028a5364f741cfe958f6c 6e96dd83ff68ff9553a4aa5bca2ebf0fcbf7f0df\n1e2a4300047f901fd8082f78b35f9b94009e344c 01d61240321e21c36eab80ef114ad859b1a34ff6\nc42498757a7d59873c9ede41cbf56029905c0c5a a494e71de0a1d80f5e32283cc54442e1cba7c7df\n1e6afadc1fb913ffb018798cebfb851fd0b3f157 d053ebef4d0afbf4a09cfac6586a9ab0eb06effb\nf2052d58c79f61d603f8a61f79f47d083bc4152e ac513c5bd8e082a2186b7f70257ea2f1c83ae091\nd5535ca8af7e19bb4cb6bc840ea8bb368577a8e1 2c7499f7d4ff8cdf03423391365b086ede6f49d3\nd606885fcfcdbd3f542255bba795d30c7d9a8159 9b472864ac720dfa15fdaff898223543a7fc1041\na512b1c36e7e40fb8d1b6bd4703a33f3fbabed62 790ae94bfeef252d1c7badbe425975c62b1831bc\nf01bb246dc0d1bdf63dc45c1ba951597d1de3ab6 7f9c8e063cd6aa0da49500a1afae22eef2cdd6a0\nb53120d30fcbec34b6095e8e66fbfd39b34c0728 cdad953ce864f4cdeb3901e6cf1280f5a2e550df\n09544a0b28473c0b0d985bb90ada28366af5640f 1edd4c54fb7a7b278cc002dfac3b293bad4be744\n9db2096f6709ec77d790ac721f6a23ab856ed0ef 7d70c9c77c2c45cf0f9c4b54ad1f1d3ff79ad2c7\n8a6f5d8f8a012b4a050d64d2263db414d14a10d5 cf5fa46f2d1f383f598007b26e11556198ee47d8\nb454b9fcbd9157006bad62cf31a6eb5fd7e37cf7 dfb7595329d8d28a5476fae945bbf4fb12075617\n6139897567729e41e17c1acb21a8de9c5ba277cd bfd76f70ab1759fcc43fbefa72712fbc8bd6d124\n1cf60a4a0c8ab25b214990638bd84f19a4c1b6e5 b3a3a75aba149f829c1db0d17f5c9a7f17d8f82e\nb23053d9cad2daa1c5ea964984ebb2ed7afb0dbe 8afecd802ba47ca78a56ab079937a0ab73168ae7\ncd7d9de5f6c90c710eb3aa4efbaf9100037bd2e1 de520b84d0457b39a4cd4b53b5f3a24813d9d8e8\n77a43bcd8a1484c17dec7dfef66c3951cb159432 93c1bf72e102261f24470f240ed551c91ac9537b\ne30c5b4e541487a7c93230774ab961411b115848 762c24a6239d166d9cef28dea5c706bc1a03758c\ne1061ac589b959dea97fa0c8dfd7aac206ab8974 5ff3ed368df10f953ae82740bda8cc6038b4227a\n6deb5bae852afcded3092bf1eb458871c019a50c 2dabadb130af01a5ca3dae7ccfca6f8f47fb27d0\n8053b81ff2b8b41d7e94e5167368726589b6c93d 9c3c220eb841310cc6869c28a0897b23f08e6ffc\n716bad010822060bc2837c07e016ddfe9d5970cf 6027f2935cfa8b0128eab030bb69fa3217de7b59\n71f425079bb069a10802d5ed45df3c33258c8e74 6befb6b26cd369c0f77e95534d662774a7a3d077\nf3477cc8f4d142629d3fb9a28bdc2e249592220e 1b0b91c24a6c33b973315a4bf766b49643b3cfad\n640310b22df55d0d3880edc307f3527bc71dd62f faa882b89cbd80d34df7a5e00c76c0ddc3f7f57e\nbcee51e49a239aaf86c09d23e26693a98ba2cdc9 3ae17d05a1252a0dbd9b73d43f7c00b03ac0921c\na3f2fbb88f74b903dd46c2b31442f0c407579dc2 f2a24f36d03c10ff883c3c9be7a020462d69e3d2\n8379f0b4d5ab3f7a1e94697f39851a8139d1085d 25fa3989e493de97d1255902121e9a7d13df9c92\nf942ece3b104932f59d91459c7c7269831628e21 de1f1b76f501254598a2dd0fbeac7861e0e3de32\nce31ae68fbb314ada1bdaff1feae1ecf9349ea85 767f74c3d2d3d75596422b63829384937a5f98e9\n03c421fd4006184b36ee2566df3682d922906a58 68bde904c940e55ea39fdce16493b7302dfe0de2\n4cd731b1effd75146d25cce856053a291b4494cf 6d5da137ba94e2da19e85d8bbfeef82aa2751356\nb7313df8e693b6fc7d61df19620c857bed0f4717 33aa57bfdecd2ec37467cafd376e65109ec09bf2\nf19813bca7680c129eb56c37c9765f4498e34a48 72e93b9828643e107766059f07de6484f5595e79\ne1ac1716d57a9044cf275280bd9be083af2da8dd 303f7e77057ce228707392474031aff3661182e0\nf306a8f394fd56c6512438d4bbd861bf98772320 6f0ae796f98ff29b75fd0606d582a030fe8cb96e\n1d01c0d93aaf36180d8d351df73a74488497d5b6 f84f2ad80946d768f1d361981aaf711576f4ee7b\nd0fa53df3da47032822d2105b32e140804435d7c 4eba6812adfd89615834a8abbeb389a9c34f908d\n4f07fc1131da64f2e7d905f8646e63b3a881a4d2 259c6da04e653863e37717b4a18f3f4b974f82c7\n23fe8606fe6d8d969745a4cf891254f6e0fc5ec3 00e3140809c345539fa8bd5cc7363d585af254f9\n633974b0a130535f819dd8dad3a06ebfa087201a 4cc1ba08f2ce162e7a356440ce616f10ec66ac39\n7c41a10d05c9a483ebf76a8ed56fe719ab2a7ba4 158ad53ecffa094ac48d09c8af752a6b68be3ecf\n4bc3b4209edd995a0af50b4aca3ca75d452816f8 5f3de2dea7db7924763c6c9330ef31e4ead1dee7\nd28d741f900ab5d704940d9fa79734d80b72967b 37f68a1b60596866250298baa5f820e09d86e098\n736386b5ef9fdf16322b37d44054fe5deaa599da 0797f894c40de20a7d1a126961c1ed4fe425bb18\n3217ad21d3fd266539c46e33609e65fb5b6b0315 e81acd6eef1cb6ca90dba547e0350b9e00df5dbf\ne736b7714e69e469c9f02414c338d74908564566 e3fe4cd9f0f3befd839589ef15b58a5faaf0790b\n71a1194ee9cb76a20c6137f8fce85134b1a5e9b0 bb9e8c6a5f792dd79b8f69c825704828f9308bfb\n56cca66d25f0b53ab25020242df9b2d5beb451f5 8591d5134071b9cacc2193fd525c16774d8dc72f\n67814fd19cea5cdb42709d759b77dbbacfc3ef04 eed8df6ad29349808b749d5bd98fcf31c0ae41c5\n19b31a78acf35bb1e1c1516a325ba9fe93b234df fc6a88f27f5886bba70f208e62cb12c1ea717cd4\n7e30e31b1574ffc3783bed5343f9ea659206fff1 414304999483a8fa20b0f76fc3c96e0bf6790da4\nc5adac367cb82087397c8ae44855fa55daadd2f8 33e6a995491f79bc8fcc6e2097f619cd46e98f96\n12bdadc3596b2a6ccb9e56c371946496418fc5c6 dcfb4e5a181ac97b6c302fd1bb24d8c5e4be25aa\nb0c35db49bb1d8773254dbc670e9f3358c379279 dd0d69395b07493c26b885c413287af7afa21a91\n210f6916cf2674f29332f5cbf412497727bda608 d5dd22bed875a09d7546a58505b94336895aa7c6\n641344048ae90918b4ce4b3b8f7dbe77ea79a9cb ca2f552992f6243fae66ee7ef91a209b4588e65b\n7168c42ab464a48627afb51d96daa38a601c3577 da9f5865d58193b438d111fe3b60203b38460d35\n97d2597a404f21d34f5e9bc0aee65a5bb9eada2d 1b5e515be341ce832b7254a5f459cba697623b77\n43fe252caed0d3a04658d22a34d5c40b36722479 9c09d758cbb7992f33dc4858fb99efc193139940\nb5bb62bf478128707c258c2cb8294c9d9a03fbbb 30f07c02b59d4153e09bc9ea3b02ba519d839b4f\n04e6620aa263d8f0254d94fc0b40ad9e7e6fb153 0ac04103adef9ff2f1163afe4b7d14c3d91d65b7\n3e6d19d7150d9a10af7b09ecc24896425553cb5f e2cf40e54109bde3a2a2692e5abbf04f36f6421c\nb759417d7aa2fc1a2432f8426a20192c3ba2bd38 72cdca429ee27ad763809d8386743452b674971c\n9cd20b9bdb5d84d17c9a13a1db95783649d2a4fa 479eb9594e75f214f693665deb15c152e1547341\n9338d4577f610aba32b0666123e39d65199a304f f6b59ffd6af4f8d06593f64a5aecf624db3f0ea1\n04c962295d8c667fb00d36155fb4d3709ae1141e 38cb1c947c53e8cf5c137cad3f89b10c2f915238\nc9b2ed48c8b15b38c67a49cf496e2e93628f7459 76fd8a864aab93fc7b90de7cd9664ab88d0b8102\n4d4a797f2895c7142028f7c0ff33ed34fb3db5ea 970cf9fb62bc66866290336fe2253f64853d4630\n3a9545453c8390def18b074c888653376537a3ca 57a4267e5cc671609a9bcea93a29236768ba03a1\nfccb856522e1138231c7e3fb14c000c1ea11bce2 4ea63aeb488a8b4db16449a0c128fd7573f03302\n3b9e5f0902635b198ef7a51d997c966695bbe74a d409f282e0398655b62b030a526cde02b35f853b\nc82e4ab108c632a7f6e581179f6cb2e851cecbcb 60478717cc512e229b827c0e57103c3573f11e15\n93ca13a3eaa180a7def6ffc1fcafe1272f4744df 9f5fc0f9d319545fd7acaa5291ce4d957902c4fe\n7740560f4c5fd46b5d398d1358e202f692eb1355 c9db78e57373f3f410c4aa8fba70bccd5281f549\n32278584c8d638bb550edf6c7d3ec163798f50ca 9ffbeb0c4c69d7e921a12bce46a7664d98ef857b\ncd1760e8ba6600bf23e2058d1c98a1ad1ab9dafa 326fd8bb993859e165e01d396db7bbcb102f1209\nac76849e5a792cf482b5cf1e5200dbf09f846998 488a8629b0221ca28f0025b891b615b8e11421b0\n55beb8c82bbde0bcee36ed33e27ddb40c902aa07 8e5b8e71ee7a6ccf87f8eedc8b85cf96dd66024a\n2c321fefbdc83bbc0697d2c42d92dfa7ceee1abf 6911490ef4c4122a3c4230a2dc63a733654d82f5\n6369e576091d4543b8d5f6c9db68c00a119bdcec da1dc7141624fa4ff983b7fd00dbb74e3390b52c\n686e80e07f6d8cf1ccf859104367186c2a4ab0bd cff95b81c3c2df0f5bb13740092677751511b16c\n1e769d13c5ec62601547759eee9392c5e337314c d71ed063e0ea045c772551d62b6a2ccd824ce786\nc3d32556b76b1cec36c1a76e1cdb0488a04804a3 4bd9885a2bb3b3159c947d4ef10de1b69d1f700b\nda49b15ac8890d04987818d0577ca218b2aab6ed 9a73dd6fd2b51e9fac6019987df5f37df5fc4b4d\n7654aac580e2d3859a75c6728667948ec3e31f0f 3cf34e801676d30158c569a3cf590db8ab904012\n8078a9099d7602360f0a2238cef3043e47b0cadf 378f615706e9868e98dd47955973c67b038c1b79\n9bb829936435d25a26b1e7fb5a66a6bb48dfca67 6e70cf8ee01eec58160198c324b2a0699c086849\n2a7e47aa6641ada060fbe74daab89653fac77f0f 55153b94163e4176b5ba53c8edd9edab7fea3d56\n01ad8497195f89c7d14fd052757bba1ddad3a551 14764f6d4e1315b86d45d9851a54046e0bf522e7\nf9908ff0532078cb54acdfa98588097fccb0ab27 b34947db70fecf58b5db8c5d29dc27af1c0495c5\n49bd0f405291ca1124d6b638200283a53b179b6f 085e6d2f39957353286e39d879f96c90b0344976\nf157826d4541bdc27391db35fb8bf3623dd078a9 36a642cb106371da4664af534b06b5749b9011b1\n0e095aaa9abcf397d4e66b3f80a1b8594d9e09f3 2982d01374711c9d26a42a3b0f0d3127f0dd9263\n43ad36ff6da183b5532fba7a561402c228dbbda3 ad655cb309c9791c0f5ffd214255ba734af17491\ne6b6ee19c0f617245a528d690aaab9c110d9d96d faeff8f85105ad35191afc4f6b98ffa0912e5926\ncfacffc91f3f428293dd516e24362c3bae1cc6fd f823d95375b3d48d4ab226d3284d41161163323d\nc10f957c9968484b3d82e47a9146a22b9e68efe5 cb5e9e26387a918d33b095eac4f30316ba70cefc\nf0d95a46814fe42d0b3968d112220ad45d6d1335 b2a9d5975a57e0d75ea9aa56d5fdbee3807181f9\n8f0a2ff2de160dfa01f7c04da2840d1b27b982e0 d8e672e3ef29e6f59f093ee3c8ebbcd201a443a9\nefd5d9cf8e2443f82ba0bb1da918467cb82e4be7 f9ae8e8e6ff352503b0616321f2294ecb0c67269\n7315ea5de6e0734c1c3fa1637ed8e8301ad178e6 4e9a445f54f986e6dd1c7c124ac44104b1091c51\n1f77ebc5fc77c9be4382e336c6fa884b217b91cd 110f12cc73b4a37d273016093cd86cb459e55e2e\n53a3a993ad5d7c7b397670fa027adecb476e30ed b4cb51effd70667a0f1588adaf325f0836a35966\nb7a76801d728bdbb45e6dcf3f6135b2fb4457822 5620ead166e8ce06ce5c575901910fd38f9c030e\nbbc4700e78b94a207c6b05f4a827ea4ec531eca1 ea5ef4c4fd3425340272be5ccd293741a09d5e8d\n03448df24d6c2ba1f4270854cc2fd355017ef440 df4b00241d212aa1d16a65432661b0a6e7822cb3\nd44d6751995be484cfe759a7cdaf6e433cf3a925 ade95d32bc23ebe14a62cedb50e76ee08bad7525\na81fd3ea0ae8b65ff3ef40cf6c54639d32fc54f2 8d5ad85acf3653c9e8353b73fc12758ed89b4346\nf58caf5f8d77d31756c15759f7b7ba9077c15d44 229668fe5e0ed7b95377558d443c271e592ffe61\n7b7e8dc1a6dfe0bcfde07df2893ab72ca0ac4e7e da6bddc4450ae342b5a730453b7884affc315943\nd61184909eea3a18b9cd60ac9e1335049f47fdab 89bc00916abfca0f317aaebebeae218c416fb83b\n5885521a35cb6bf2a173e871422dfacbc5118633 67bab7a3d56f6d2a5fe226a7a098ace13477beca\n089cd448133c7ab0c442c409c0ca58be58fb5ab2 0d779f68cdf34ee702f03dbf2c03f2fb9f08e588\n0ae5cbe9bf3c740fa188d6bffcd83278171b1b7f a5590dcc75c9583dd8050788c256d6dc4475a1d0\n6c26ab0a5795d7caadef83d4818dd6c78ea2e3a8 5dedddf975b1cdcb67308f0251888a550f39962f\n067133fa1d83bacdd38602239b3b3acee2832f96 86adc6423c3774a61f3f805a40afecaa33a285da\n8004eb1453d90230d01c63999e2f1d7ded24fd77 c0a06c5571c89bbdae542bae93b5325b4f7f89a9\n8e658a2c2d413aae9ae91ce5b7b7edbe7d1fa6d1 6b1c226ea5abbde8c1bb7e044de362c32acd7d44\nfc3f82a7fecc79d390aee1eb1b0307d118ae8971 e822a764561069e4f8a3464d6fe13a93cf8f07b2\n24d389b3a094b060d006d1c823260d360a6c9db6 b5cbbc685ec6a8e67efd93a62c2a19fc17d4c669\nc8f795ebda043cf90c2783456a04ef73543c6e7a 5a658f15b04345539e287b9298dab0e5b44ff63c\nf8119476c15f6e31c339cbc4cf6340e8d41c5c7d 547efc8b3d82951bb70ffd581a1684640b0a0577\n27a5b009346ead377f72d9cc9a81b1dac3db7f39 1e7331e043779cf32b8ab513febf8b2ed586185a\n58c6d15f26636b2cfce61a765afa104fca8a092c 35a733645d6ee9237ceef279c255db913f059d86\n861acbb415a39646a2c2125cfb841b5c36a7ae7f 48579121fbd776298595c79fc8deaceaddbc8ce5\n2c33c1c7358baf7c584fbefbbc45b1297e747be9 75818af0041e32aae5c16a775dc8ea25513bdf24\n9e3c6e7d35416ad628def89a8235b1c4d832c8b5 64fad3c66f35c93f31b3d25267d3aaecd35d0a62\nd9957b5d64e64343812bcbcdaa5143cdc3814ea9 5e7f8629a8d396fe030764bab2cd3869781ffb85\n1bd5f30d3ddac474f7e5e2fd4d5b37f446357961 a17e50b8a655192bc97e18d650848915f91f47e9\ndc1582e598cc3bf8ba0861a120bc689e41bb76b3 4f9874186c24209e2fca7b4a20e7a9d367cf2108\nd593c94cb476518b5457b6861ea73c43fc957c4c 3a2914a2b22810b0c2877822f942bde60de03bcb\n9611ffe8bf6c69449038aea36654148ace28ce9c dfeaa984c90346818e6eb4614e54282fb994ff08\n955e45a7445ee335cf6cf9d7cfe9e38802371eaa 28598c685d8467813c909e97bf95bc4f2ef00308\n45ef38edd7f438faa67b34ee39646f23ae710aac 9f77802b8aa27bf2f20a73d87400602af1dd9356\nc9dd8a090e5fc11a2014bab7ac8aa9c8357364e2 f9237836e6f1f553d1f070a3ffe55dfca1d05bf0\nb8a78d7be900e04282fdb72ff5b4b12f21195228 b3b95d9955a0924d63b6df6eeb6192759460e277\n885afd0329dfd7129f9a3fabd198b024d9115df9 a696b9128e1264daca1560843d7b8ca79ad50f70\n9b7aea826aa967e6845173b7c08fd119d218acf7 490da3f6e72a2e6e2f3daab6af97061e1f71b100\na8ed050eabf1ddcfe7b59656d850c976a590ef52 a169c451c7bc244d15ce6fb3d82a3353335ed227\n533e422295f0ff70a593a1dd47e9621bfe5f784f 1369e6b035b4af7bd210414664c370527a2e69e0\n8c92b5e65cbde9ac4c60ae514cc6b31eef59d46b d920bb9d4f65c5f6483a5b17549d7cc6b5fc39e0\nce544d68eddc4ac561b927d28cfc062849485482 0faf491e34f5234f1efcec8ce231c79b02ae3e31\n269b03a7a7c67b643cf0f61a0fec813f3679ca51 43ade3f3662ed7c76221f551ec003eb02246821d\nc721cd051a608dba2f2797c98717a32e7dddc1fc 6c69045abd85a830b4e5fdc0ceb898a7e8df6b73\nb3b2197ebec7649d70cadd1c2b7fa935c626664a 197c6f852eebee199102159915356f120ebc1746\nd8bd2358867dea6ad276a0a841b25fa9089fa929 d9cb0fee747a33526f7b1e831f9070313fb19feb\nf3ddbc8a68901ab9d8bf246b3ed7c77ba96c124f 56d32d7185e561b7e45f188ad8f29c60659b7aa5\n005fdaa957ddb3490dd8243ecec8ac9bd72d9b62 ce592babbde55571fad31fdb34262b3026d65967\n10943cc5e1c7e6dae5a2fad8166e6c5d59e6b141 a6d813ad4e17298c21a76d452f54f13f56efa34f\nae4cc26487151a0d52e33b4e560b87bce996191e cc6e2cb933528dfff28efc4433805783653f48e3\n79fe108a08a89ffc383bc9055dc0e0a24e24297e a5bbace8f23e9dda58275567436c918a3b56217e\n426a199a381839dfc69505efc9e6d9e41d8be5c1 35294b609fa93f20b9a780a0fa05ef911ad12942\n2c6746d708f97aeb1ce66dea23d1fe35363a77b4 937cd2a751e8b44297c7ecb04a955315a3cf9206\n353c6ad060b0c8c86cd9ba8aeff235bf1fea1e7a 3fa6bc2b48a0bcb3a13524a7d32b6a2522d0c6c0\n4c5a52ea68b3a5538f145f8a3de5f35a92de2a96 f40aff9e0d01d79da129a5f91c426a5f5f072f6e\nf5ff6eed5cfafd3a2a886553fe22162cc8db0491 4b4bf9806983232a02e958c898887987011f4082\ncc81fd7e207efb875aac4eb157624113c0f2c837 7fd43cb35e74f7ca40036f8c86163643cd9457cc\n8dcaad44f10f97e3c08548318809a62cc77a9e92 575f33ba9322507e3dbd56c922cd6043f48ca27e\n16fec974283241ef99e54ba13056136307f2b4a1 328e6e3d68949302243e3aae7ffd349cf2061a96\nf919e030b45fd3b0024fc58f6cdff11eda281e0d ae1a582de63fe31dcc7ae054c40d9ee7cb48aba2\ndff7f2b65e9e4b78cb4cda1ce605849d050db34a f009fdead82bd0b59f87b6367a37d7e38d9fca32\n84f19a18df5f04aadad87d340e0184ab32e8cdea 12dcfd867a3113c7855c5b805bb74a534bce0d93\n4fb121c41cb3b3476410337ef83eafc93765fcf9 956cb56aec7c68d69b44223674917e270a22b3f3\n9cd5c3ecb8f6d56a587d1faa47c4e8150ed3426d e4562de50b46f7001390a3a84a29a7d6faa7874a\n5ed19097109eac6a533dafea5c675243d0023559 abc7ba1ba2c9109bbcfc6faf2546126c70bd38b2\n9f3f8626ead441c587bfd0e0ee591bfbc4d166b5 a45b83e406f6b1f3eca9a255a9f401afd7a4c085\nee37a0151dfd06946728bc93d2c5abf4a4f93d70 f6d71dca1739eab98b1c85d2f57b718c501c934f\n6004e43f6c7219f1a8c8ae70d1f0d23d14fb96e1 51e46cd61e6fc4bb8495311a3b84e1aaed99e4ce\n5be4af32c5db18a23eac412f95b1508c5fd0a509 48bd2881dd043fab6607372dabe7a1ca8db92f6e\n57bb1b82600990699c2d450c4f5f441208d6e94f e1dee1d38d8b39bcc9b054bc833af62c67615f37\n9a953386d0a3f85d1d2585c1eecbee7746f444da e924fbf9f19c5158436be3ff6a4bb2b3a8a2c42d\nadfdb6a0b04f0f65f33b0a31b96bc5ccdb99a9dd a11137c9a07f70e75a6af0054ec96366798c75ed\n7c4771bd3bad3e75ec8cb0bb9d62da01355611b7 b1cdf1cf16413012cb03a446ffd631aaecc7606e\n81c1cdc5d2b361ab4f827dbdcd7e412c7cd4f1c4 859a09c513cf4ba570d33d063c0bf37427199913\n2faeaf6a899bd6be380aabd50064f90d474defe4 0c67ce5ef8f2a5a86c6cea848815b19358636218\nebde6f232e721052ac7520c42b4eb32496360cd4 c343d6a4f67fb265d19577a2809447eb8956e765\naf23263488e047bfc378ab7c588ebfa04932e3f5 27f5ca2d41ceea230f097cf114474480132beadf\n3be3325e33be4bee459b54c9cb37fd4528cebba9 f8f46fbcb9f28c8c8e7d5875c958216f94dd1140\n5415fa61bc435f241ed6a03fa38bf66f2a9ca504 b37f39b5748ae2d92626e334161c5f36218b560e\n46bbb5fb44c49f4393860fd3da3eb1d0e91ccea7 9fe087657f94c86fb3f61590989c07fcebe20354\ndf01a70ce17bb0e1263be2be0334f5acf2dec7fa f4d5ba413e8be9561d8c03b33b59b058513c66f5\na8dc653e872849593658b391ddb588522d9a0e72 b49227bff0be68eb6bd61da486a4576b62130367\n887a2a7ffecfb46bbd5ccecd399face2070fd691 b39e4c9a415f0d62bf5f7bf64ffec2ad30f14e11\n3ed803788e81f6b1cf22b067cc45766453431922 80e9d2ab86e0376795ad123bbb2c3de4c5611808\nc72de4297aa208dc3f96a777f74e9c38c0a764f4 a27a3963edee7d51e7957fbc87dbad776e6be57b\n123b7bfb28d547c0070d6b4db395056b33389e0d 34e30fb184a2faeeaefaa67f0aa956f59e8fe3d4\nf1a4911af4f38afff4e3ec17a6ef06d597721798 9e28578f3bcc730023adbedb0546a660e5b31d41\nd40b01a194362ef43e856aaba29cc0aee9138b58 90ff86741bd83d5f3154fb55a208a4126d2497b5\nbaf44fb81e0426a979a0b90db6713a60eb2c6d52 13c762dbe7110e5693cee032ff89082c82e84297\n8c43d87b8e8df28bab8bfe63fe6e48aa7f75c773 220139a4e154eddc10d60356ede6462757846a30\n624e25cb7ea11f65b6730b179d72496410f30357 036b26a8c3d2a130dd81c47bb512ab5f3934bff8\n47247f3f20105f7f9fc067ced0ec4030a6a1b7a4 32064bcacb5321e94a613a6536241b1cac22e565\n9afe7ed1177e0111882f46e1576d9d7ce5cece21 41bb7af1a9f29c962349d484baaebc6d2436dd33\naadf03762e1d1d78698ae619635fc455dd7d2f17 437ae3823bb23c4da602b44c8d0eeea28073912f\n0f3e8f4ff4be573d1a0bd14eba2c35c34cfa487b 768d6d37d539a9f3d593a7198c7ce650871bbce1\n8aaf2d893ad10c7afbf3983cff1c61d9ebd5bf41 4a5d467fe59d5e71e812d14b7c29dbfecbce307e\n4b902fa41b296d18effd48a10a967ae4e893f921 187899b9d972b2c41ccf8d99ef9832118ec2b136\n513795e804f610470744e2cd20147b78a5690f33 4936f780ef81bf9e9e6c95731a9ca6ea8105ac62\n5dd3662f273850055802c74875ae3ebbe1f12bcd f07ccea2db42a146e6ccea26833fcd1f92049917\ndbd4d0691476d054d707dda297a2736f4d29c265 c16f02e9b76f1bd5b6b1f49bc09ac08a4f080404\ne605c49d29432465b99bab3643057005cf092cc1 62de23de863871551c96706c4d15021f34557bd1\nc7864cac785cbf25325005ca0c602b69cd0de7f1 c23c41df5eec4a95fd6f89e6c4dc2b7653f76e2e\nc6e584a9b4e8eb2cf3cec1fe5a66d406177629c1 98c0fcefdf5c516f32d17485d71d1deef8a77434\n02fb91e963ff3c662ef05dd3d51a9743ea4436ab c6fbb09cc5f15dda8a6a3a4c5dde9f332a6083aa\n5a58c910f5a323a1ac14805adf6348f0b841558e a2c84f527737bf0e5fe6aa2819aa2a7e507122fe\n931afa29f5506c8416a87d221c691bcff2bf30c2 ba6bfde5015bc065915d5c35108b0a6d220c995a\n38755e7920c44518fb543d8953e18508bbbf715c a133921da80dcef0eece17243d3cf28b32e36db1\nb95db75f5c71f43e84e3525dfaa09c4e1f7f5096 e8f9515fdb4e52c5af46e424446b9d87f81e3c95\nf53017e24f81b39ffd42d8852961157ec19bbeff c59a288f32f44765d71e3db65053c36e3253eb80\n2d73364b29193f9c5d369b12a59b9ef4976c2b20 9e1558e1b98574ce9bf100eac186bfcf6843a1e2\nf76e5eda83b9c3546b84df6a526fe7a8ee76e39c 1f7cd4eb7db16a641e3e322c980508d211de8158\n1675688e42d09cdb2c7468608f80c9a5d1e78763 be2b6c678264ad0c3bb9b6d45f3109702c76ceae\n645f5f966439759b88b9297807563f6e584eaa8c 59d4a974646d69f403b7bb64164484b3abd27ef8\n69859d45027bdb4b98c55426e9d3462bd3565304 63fd6ef2b7a98bd67e5d3313d6d4aa0789261b96\n1a8f59d3961a86c98a8f217afa8f4eb601298f6c 87fccbee893927a163c4bfb0edf86e310503a3ac\nc951cdcf86c43aca61a51c8854ba57b63eede923 7da7fa55d9b96ac8ab099e5da5acc8f118af7f68\nf1da16a9e2ca741512a9d50bf3168394054f64a4 2c06b3ff476717bbc4a678508f18970eee5e0d8d\nf19f9513137eada3c1e959b4beea8ae2c9874baa 0c1e4ebd3f14263cc14e1f5a096a173619afbc3a\n0e12ae47a353b60c6ad92bac1454a691bd3f00ef 64ebc161cc64064667dd5f4666f98a84d63cf966\n7dc02b4820cb92a839cb521b344edb4b9e541fd1 c05825d482a0abfe6bb004138a4faa3a9014646c\n61ccc74f767039063c806d0c45c1fae088a328f3 6e89a840836999d5432fdd09459e4ddf874e5b17\n5f1cdc784f9700415aa394b5e7f118d62dde0144 6329cc46c4f4906574bcd1c15aa4fc279f16876d\n2f2a3a67e498e18daecece7ac43414c2d7aa6c81 6705f3b79e60f04ef5c6414d29893cf8e6cebac5\n125e6ead0981fd82d04c2b79b3057eb62b749661 c5f19dd22ec7faca3f06569e995f28d99891b81b\n6952851e7ac05972746e1afbba7f0b00dfa212f9 7c7d528951e780639d90c9fd81dc6e53650ebe04\nb60b52c9bb347ecba9f86922a2b5b6f6bf250f7b 3b06dc7d2e41d83fdf63e84e0fcd1ba5fb2e8420\n56de5f0c77272fe344b42e9b4c5c9bfd7baaf85d b540653c56514f4483982f2aa73f10cea56aea73\nbac89313f4b80020b4251cbf9daed6c66a27b395 ede06e8cc4f4b7ab2bfb993a7a1cf38637468ff1\n64b7ab9997149d1d0186f2c85556733042dd3e64 59df15eccd89ec91f402e2afa50e1bb0d9edea52\n5e8e3942bf7ec131c047c020df621528b45bbca7 66f45dc9758c08d2cd93d0ac0d4e49169387192e\ne89f647839cce42a1c8d78cf6642fb96ff19e955 a496f0233f987389792045af4eed2b62241bb107\na348483668b9299dce0d5d2f9bda8e7ebea9e473 94d1f2a48acdd5e495c2ae0f9b616100fc6fbe9a\n4f11b336e3004e996ca9f66d7f93594c1ea416ff 79b516653bfb0c0569bd274a19982ea5c6ac2052\nab34a040402340abb877861aa206fdbc22c9037c 9f4e636505e82d0167ef341de22dea5a19751088\ndb6713ba36660cee2bd128af3eebe98bc910a977 f30c000f832917f381cbdd96fb91f23c3a7a84b0\nc4f83ec66840d4a1513e984f13e630c2a9e0307e 2af4a2a03f5b3bcc5ead3d0868885d54e8df640e\nfb4b453802770360a69aceba1525bb203c893b25 d3692097cd64eb0a0e013c3c3ca2a5ef55015704\n929df31c754aeea9fa2628870bd95100a0e1cb9e ca9cf7fd01771d61c4fadfa381fc56bfaff5d44c\n28736efde984b8d08bcf8910f3a36103a5d9c1b5 80698f9f220b2f25ed7a2f1fef27d17a87f369f0\n1045f6df05ea5e4a6882c9abdd1b4ae767c9e78b 067fb9d3e4d8e1776f43f7fb8d88bcd5e727839e\n76272fbf982bede0da94673cb4c8564b8870a3ed 9acf9ca2fdfa5e82b838057622ae3e87ebb84e3d\nbd12e23a9c874ddbd720225949ea174ee3edd10f e7ee1d18282911dfbd04e6e740eec47df8c13670\n8bd53a0b821ff2f4be59fc73329aa1d2b0bbefa1 ea1e4ea96bd9b253c9f1f90ab16dd2903a811192\n69980e532676b6fe55e0c426f28d1d7ab4f5d9a2 1192ad8b5c142b23ee54a9935aa98a4090335d8c\n755c9c1df6bda576eb683c034368692c07fd223e 46123a140667e29e6a7484ad8f82c668f49fa5c4\n7eaf82543ae7aa9f01a359c562f3aba9d5016d9a dad7c834d1454ff99ceb7bf7c53bb36303f8052a\n693927d6e1135ba31f148aeb6f12083656e6dfd7 268508425e3845077d7ac7df086fa2cef4e047a6\nf65aabc51048eca2b51361951a337f154e4598ec 35ea0ba881a37a01fb8a3d554f3d41d69bb2f132\nf4ed54db92fba6105aed058c4d3f03c279b5eeea 7c317415d7ee65e0af1fd812a3ebee51acba4710\ne76148ca2eb157213844f5e529d0a95e989e0513 214ba3f67ae311cabdb3fa32d1b5b9a2fc15ab90\n1a284fad6144d8adc99a18ce6c06e92802af6095 f2d2c1a1fc42eb5feefc3eaab658ac7386326802\n23e929ca7b62129290c93d0a28499bd90d3e8ece 16c4f5b682ba0934d5d3c0d9394313dd8a888b79\n6e5faed85c598d6752d23235df2ef79971b98782 ce2d0fca1fd55df7fbe3ebd7e4ed65c18e6c0aab\n461b8ff2166ca2bc985bfa1550f840fdcbbe5f4a cf249dd1d6a3b68e9eabcb58ba8d4fbd9ac68b4a\n7d307452aa1e218da6a6b9bc3d3bd46996bd02ce 2ddf421652833e7066752e03b6ea6afeeca7f9f8\nacc860cb7554aa839932e44d3f79dd1e8491ec0c 31a8acce228a0ffb4565c95cb9dbaed943514816\n9ffdc398fc96e1c0a69d1d1d07810466aa944525 52585195becb87a0ab3def05f10a88b9d89e6afd\n8d8ac90d4bb009dbbf18fb1bd2b56b458bace022 7faaf1c64a1d5f1b42c427eda3bb72f39ffa4cb4\n97ac889320e4c4c5a89231a55601f7e4dfc76a1b 9b06b6763ada4270c1c81e3236ec723e784111f8\n1bdcc9cb8bd6ede134c1cd9fcb6f1b467d9fd773 e9c08b8805740995c25ea9086898756157228e6e\n5fbab725f5e50f4ee5cad8c63771197ebb390fd9 db1f27d0bf6268161fabc27dbde2fd653b98eb9c\n2aabd9b235cbccc5c3eb66dd6dd56eacb7bff5cf 8c9f6c36144de7f5156b0f41a721ff2ae464b452\n296b14027e1ed035d50f41ef8dbf52e9af201715 ec19e9f6f0a55ca24aeb1aee5b3e3dcdb20726c8\na86b2c7bcdeed36d95a80c9e23162f5517bdc82a 5da5a1a1a91c9104efc4b1cfce0dcaeae4547d83\nd77a472f96d6e092ecb86aa0283e41507fd0669e 121aea371ad3de49f1368168d14f1e44aa9cb069\n5623b9ea3f2258b2df0596b1b69535860dad1af9 1aa379d5e7a44deb9b555cda64447778a1565414\n331efed407fb16b73fb3c0a4ee9451a4383178e8 36545f577e9ff65052d68409815e2719c11cd032\nba74867bda2741904b7694b9553ee83d9780f432 dd47c108fdfd4ec5f2498e0a155f7b43f3ed4329\na42a43153624f47d3613b17fa57e25ddd53a598d 8fc669a3e95ef5215fdcacfc839904c8bfaf37b4\nb54f1d3ad0c687e1405a7e799d66342e692c4d4b 75e13f454709ff3e5d802a71618eb6082379d711\n00ed47fad0674d8543905ceb9833cf90177aeaef f363027e0391924204b2c8a1f19cfa3aa7ff6d3a\n8ca4586879bbed6437e11e5f66721278bbecec99 d2de0b0eef08c4c0c5ab71687cbe23515362a93a\n15c08d004537569463719b88658918d092437006 be6dae8362e891c365374b8a937f3227d49a7b48\n4fa5c5747fc04a0aa9b425665798fdda2303deff 1a409b43f48aebe2aa8daee359a71dc2b7b14584\n81fae7f04963c3f0a488a9a4cae0c3be8b8d0b50 fca873f9a9f922e3b28a1f2122d7dc5700056e4f\n8a616114a36ef7e40c8c75bc80e99dbfd75952c0 e760f801cd5af7d178f610285868f44bbcea7e2d\nb42381b4965e7d2ce45545adc206c5bdaa53508c 096579855c4f91ae216d690850d12f7ebbeeaf55\n6af38c7009a38120d5e8e7b2a086a13b16450cd4 4607f658b00b6a100583e700b7fb49e35ea2c009\n53c731210f0219d40669749ebc017269ab365c14 dcc192f664a71a63a800b4936feca0350db60686\ne1d5dedde9ebb01bff84fb39115bd28fd60bf3f1 3f55267bf29bbf84fe998457564d8bd7e43049e1\n40d63c5b2aa28180f3e6a4a3101639cf2242982e 610142200aa112363891fafb4a13afdd97f8c21a\nb90601a620cd08f942fe0bfc738fcf219100b070 51bd02a062aa7e8db9462203d71b9e1df8a9bb36\n9aa9071095e62ceab549444f5a0b77084701307e 2b154eaca54d37e0c52b4f2eb377e1e52c29e6c3\nce15d869f315a9d1431839ee85848c8d89d10870 2cd06cc32ee0e31978e405f8f5a90528a32d30b3\na4a65f213edc8d9a9a3e7292b34d26599f210f58 75e973834ea0138f051ce3fc12621c2d16ec5f5c\n2c0929f6a076e49734ca5a2accc431146f7e0766 1c1c199fe91231a053d82a1c630b96cbd09b4b48\n4771345a7de581300d341c4c434a784c070bb929 93dfd1647a7e4f31d5310174ecf5f192d7ac5342\n154e7a44ea971b63761225ec94827a490e7c0ac8 41f613db57fee5d5b43581201512c1f3238abcbc\n360836cc3bbbfa62a381dd11ee4b18736f4dd35a bc861e9f06e2f8e97512cbba8d9fdeccf37d2e1a\n1f06df735916d2f6778442f663f969190d350019 296dc642eb59f3ad7b92647eb795ec4b9b6d72cc\n9e4a5bed54fbb40988ca8fec263880095e11e815 3d341c30989ffb9a86c7cfbc5b8f4afffd828220\n5a5add05afc598ca08e9498765b34f5384eb50cb 93b8c69f8a5c1e7f164cc228a59cd138eb37974c\n3250bbfff48a64eac01b183395e157c7771c3173 8d65ac9878ff11a0673ef66069ef2fd22707c8fb\n8c603cb62b26d71c874f7b264d9e852afb0c5c69 a0c204e4951c47314ec0a95b8edc612950cecf83\nf7be03dcb4b95cdc4d9cda94dc92bd6f093f1a59 e47a663e8b0edcf0b2a99f73bdab8ff19942d649\n1948bdb20d1dbb5c4196097215d62121b4faad6e 8dc5e471d860031d437a0802d0c419d7d6010fd5\n56639bce1b4e70b5970df92b9609c851d4a2dc3c 17de50d5815d438492ca8b4f699f8230325acc1c\n9efd09fefd17fa2213123c22f679aef59971ff17 77649b21cc98848df101eb155f65f7f76d4bb34c\n9033246bd41d9f9c544ab433c5d2466fab03988e 69aaf079db771c959d215c6e21efb82c7f53ea6b\ne07f5d02af5557948913c282907777132a3b6534 755bed6d6ad42e20ef08edf7f8fa4b15f3a5f797\ne8e08f8ee0532d76bc0fc97db726267e33ac74c5 11c6a8734581bda832ca57a0678df14266a7976d\n205cca445a43f699d2708c4c7ec7e7a61f4a175d 428e5856290acb219256d13026a378dba76dc230\nfb3132c7c99689a072c5a56645a6b23c39a51c97 6f972f39d4ab0c4ea8203ada87b7169653f5aa88\n48c28bb087841ed001d5969acbc376763a7a86c1 e0e39f51e3d817b97ddda91bb46ff3f57bba612e\nde2d07581a8e08a8539d36bfd137660ea2477e2f 349bf3a1a162faf54e64433696511174d03e7a28\n39b8a74d0809fd22ff85d1b45cf4ff64b2a80af1 1c11ed2ff2207e64b32d3c22f66fb0eabcfd97ea\n2ba2552dd4af97c5c5b80e9df884db3f558367a0 1fc0579fe7590dc4d03b40e837086584fe2ea60f\n60737c91728f7e7ec8c398574f2ef6a9897a60e2 a5be2d8b97280f89e9647f7e14bde0222280ae70\n802eac05cc72064551f8942f40a62ec1ded5ba70 de2e0c7a6e187da80a391b6736f7cbe3a84b6365\n6128ca7c43f1ce82e8654a91f6af0e38efe630b1 31af53c25883ca349631ebb5e79557d1f8e3d442\n956b949f67d6418569cfc3dd1f69e5eb76455aee 57958d53d86732fcd6f3dfb268e03116a137eb5a\nfbcd6b3eca9e689505c1c7288dfe09374e4eb4c4 148cecee8d3c7f2bd8a040058e8983f4e18686f9\n7549d66eb8fd39e7f29aca7b0769b60746f7802d 8d4744e8a021494e9ec8fed4bdba682338eeeff1\nbf1f31a31a78964a2371d3f8658889e0f1c67c8b 8a33dbc691431e8ecd6c6dceec6bb4b682ccd61d\n560fc6dea4488326d8e9d4a82232e51e40c4205a 3bb79630369a64ea544471ba5739a05df981a28a\n9a32c71df39aa5acb3662c5e6748d725e4f2a40a 5bd7ef9f9f2fb28b579eccdeddc170c88e2dd7c3\n833f43fcd7a46215fa370f05374ac9c8fb972b8b a7a061b760b1ba43d4d2c4d00202a5ad200ba316\n9089934c55b5341403b54262b5b4106622a2028f efa6b8626cc1642de1d44bf05e215a19c03c3cdf\na559fdec15c8b5142b3d365ca9a8d672e11daf9e 5e67304d7d2037a2669eee1c046ded98ad059380\n4396fef5285634fa9f5b3b69e7165f1c421d8b21 8e701f6e157a02253a199a7bce9f20742bfa8b90\n9e4961dee84bc65ba3d322b6b8eb370c68eff70e a5db72b64341f7af5fa1a7c3ae7c265bb4036e4a\n4f8c6af45cc1fc0b29923cf06019db94cd3450a8 0b65143fd26de5550cde2a826ec360b06a5f4f18\nabe4493dd2fe846f6647149f2cf53c4c2e7c2165 53381f3772ee781aca996fff432f849ab53cad36\n110ee8998c89a6438ffe0055a860875cf4bf72d3 a302ddd80d65e61a76d91de63184a9c0c94bfd10\n7074cb8a7388aa18395c7ff0e7f36ef48080bba9 91a3dd849465b69824220a46cab923a519136375\n0e9b3fe9e63f4360c375696224c466c31170d627 34a8dd4e67f0a3da6acc004233900dbabbf4bbcf\n59590f894767fcb5467ea601097498a6573e2d49 25bed9832985f311bee50585bbe88e0bf3beb05a\ne312413d830e448f67050a2f955e0f2fb7361003 728c394360125a338204c7592b9d56b377d16944\nefe96301db2176fca7bed5725187e4bef483aab4 821e4fc8543378aea9627067b81e681c269fe3a2\n4ff9d71ae3ec164a7e18b3cb4be80ba7c7b61ae1 c509e2432961e924eebccc979aa0ff16c9b2ffe5\n9913062713859875865026cab824b4e81a89e987 d99c4ea2df3240643f734b3f380c8f27decf62ac\nd3f24239160723158d2ac7c7ad6fdd1e69d3f072 5f3ca1273e82a3536868b358eb23bd94fcbb3dd5\ndddf88ab4717fbf0a2594e00ef249a10b8afe993 b7a110e024b1aa8cc6784d86ab6997fe79a7386d\ncef6962f931afb325e3a3b4c241ee61ccf0f701e 985d74e2a1b82aa9a89b28bb1ab5968c02dd661d\na6f0c3f8f29c0ce777817416a329a1b5675cf3dc d633247de5d8a7ae3eab115166a7015a84d39306\n3e3fe909c11ff64d1cadfe003b82fe0ad77ebda2 05aceb60e00f07c091812dd793535e0a991a61f9\ncd92a4c207cb9c980898211bc83d3d0279732685 f9d98a41f4c7f29959da930025628e066b521c32\n161dcc2127ab6149d453f75c442fbb7018830322 67ed4d75e0ebeb72d28d6143d444f3d554cb447a\n7d884dd96a2df40863df302aca4a1cb445095653 d36d2964538f46c14c0c957bd018ee9ab62deb82\n11cbe45ae69379c1e19662dcc6ec419f1e4ed5e8 6ba64cf1af48b9c2cc5c279b5da93def0c756d78\nac6e12d1b8ae4c0cb6e64fa515019b382d188a22 eda07cad2451f1b44028cf08f52d2cc06d1ccb13\n2288ceeb13972d6c6f2d96c2ce668a840b484725 61390f4a1ecc45584b5f6862ab11e326d1d2b1e8\n1393e284acdd09e8a82debed8067c4ebf394c038 dd6d85b5a480ffe395c55af0c848e2b3aaacbdf2\nf81c8406a332aa30b251e7fe4ead4c88ff85494e f158dc8212d145a27d18d183435f2ecf6ab8b3ee\nf2991349661c7f581d98c1bd560d0a3061a50750 26f7fbed0301d33b1429cbfcc65fe1204c6d1cef\nc142cea63e8fbf49f720f54ee017890692d5eae1 2cb83e37a00649b6cd02386e6d015b67b8b5cfcf\n68c8cdb60ce5708686ca38cab9e65bc3b749562e c79f933396856b0f04ca58b909d29e6897630f1b\n56e116660b3fe45c662306d32b21ba7d7fdd2c35 3ebf96945fa3205e6e558727043e0020d36d6244\n419b8a214d63db31e5d23b09ab84925f227ea9a4 27e383ac7421c254bc225744d1f90afac9c27124\n92a48a31d359f9884c9c76b993bb13c5d5093b2f 563371c186b5be81daf14f80ef31d9540b4bcead\n13986f7d6b07ce9821781abfeb2e0f0545d3d6bd 9d432a4b1ccffeaff6fdda6b64be305a9b206d50\na4c7c745225be44617a42c122d977b5c76cfa1ba 7235e19f46a77d4a6a515958b120fc40760c9852\n36f8c8826d23742b9361d38ec0d2dd54415db704 0b135d3766bd29586494d3e7378991cd6b434ea8\nca30237692406d91133459d38ca9fbaae91f37d0 816da24746501eb793a9d2bc95b1d0825565eb12\n80b58cd296af531d391c93814eda9d3a61c2b60b 3b60559ed3f1f379634ceaaa294466635c848252\n337d6404ab5d3736643007bf884c28d6d2228043 979634820696669bf2440edf77020b959df3877b\n574d04f3aebbf218c71ae11657bc749656ef09e3 a1003bea6744266a0098ccad8f1500667325ddfa\n54632dca96c44f9c0c62616a476ac7f1434d22d8 f3ab1cd066ab2a35f800ce1e171de2f6ac6a5723\n4a44958cf947485c9877654a48646fdd4733c0bc 43f6704dba3004da0fc9da8686d059961d9b17f8\nae98b1633c949b0da01c9022c425f97afbc8a77d f735264628a8ae9cf618918099891688eace2fe0\n0864db410a4c86cf146a8c062d0d0f9416a3b1dd 98127b887e8ec8675c5670825eb6689b015d223d\n29fb628177e2c38a812c07bedb27fb660cb08851 b2d6483191baa704fe982b85e59aab00b6e407bd\n454b4e6189157310221b9f6a821254040f117fcd ef934f686c577d8e170c3f3db8e2711a68f370b3\nd92cbdbd01a6f82904a43817439f71d690e132d5 93426a42a905f169e55139c97f125973e9948e82\n6a015790186cae6a20c96ad6d565b530237872e2 ab86b5820b5a34ed6c46a64c2a4d4e5b00329130\n43b96deb9032c055489b39f1eaf4c5328ed6b97d 351b33923494cf5355fe788a34d5f67b0d0fc092\n77d5ba3f6152bace476d300f7a34178f561f66b6 3e030aeb930fa7e6111070929c105fe65f7ad9f0\n4e9512b46b0ac64ec32f2d859721c5424a38d87e 8522e4ea4e2d7fd60ebe47e9ee83edb8361c3615\nc5e54c7e72ed6c4205c2804648712913ea3950b0 13825b36b9c2f02b93dd13f990ecc2457ebc43af\n898e9a9a5215a66ef755378398e58c36afcd02da a9619a6ddf7e801a573aea2a87ac704f980f05bd\n3b63b10e2a4e18dbfd3a24c35d50c3322da1fe18 c2bb48e20cf9b45c0a370a7184df8119358a8133\n5b44834a7b6a751ba3d07ab58594dae9edcdee3a c5e3a5000bab89447bceb5dfb8040eddbb0944e4\n4dd36e30eff60bfbd64177bc885ea420e087ed37 4cf644371e4d3d5e2bb45cae973b5018dbbf4404\n1123d083666eb7f0c15f164abb67370e4f308cb2 ec1e8516bb2cced11b14d9913c81d6ba716a065c\nf6b386912213d002bea87a8232fde69223a33f51 981caab615f733c613d8627a4a6fb46ef67a75eb\na4c57227a4a4286b0ff92a386d445e454f00c21d 3770aa5cc9f96c39bf1769071fb9d56ec483824f\na98d7eca995cc3a18ef89840e2eb6e58574f72c6 eef6ab1241e315bf26df08fb8c3dc560f02a3b86\nde496ff48ecd4e1ce06c70aef1cc8db57e65e874 aa696221639d53a54cc60c82dc0848ee70d51a94\n99b42e52c0e5a5a0a082308263060ff51fe404d1 8c1ddeb5dbd4669a4159d772b03377a83a9565f8\n2982b37a3ab2b7e3baa5be1805ead5ecffd85a3c 01cea65cb580335fd124347ebef9fb79a1697233\n066576bf6f69e2ca51cec58140b0fa93c37a747f 9efb3d5983369af72e6d0854d7aa85e5fe373da0\nd0cc5aedd2e6fba7c87992c8ff98aac656c2e3ad f5dc463b0ab9141d0dec6ba3ce896f67ce42cfc7\ne8ed3946fa142de9b8ba4e29c8fc0ec000977097 f292f5d2b261c423b294357d8f6528fd8a6ddf02\ncc6d878bab14b812dc608d8a0837bd7e8a52ba66 19cdf2028a9082df0fd4b587c227e947cc1db0fb\nab33b56df25da495c19cdd6e286a9b7a8c9236cc ce631d7e5b82ab8a181a7719848dfdc16e397b5e\n75dab79ebc1462f1fcd564e1f2faab58e5a16cc5 77b3b8c7dcce62d0f9e93158d5641b5dc9a88bba\n22e8c7a7625b4fb804eb35ca2e37c00dcc3dce19 faeaad603961c4653bdd42577b76f1f45c1fc2af\n5535e09546032757c08b7d031504cfd330f48c17 97273f397e97e55cb38362fdce6e77b9b7ec9700\nfcb29074ab47ff5056c667e2f500c1cbd3d96d01 fe80056775a8d7d6091e2fe2f6568226a6869d42\nd21a327f5d57c15719ab3e85936c8f8dd81e8ccd 169f6ee44e00912f60662ab1403158481a9e8035\ncf911230d1974e5a7c879afa240e277ffa8c7745 0f299f0bf7e7bddfdffdd4b9a8a564b4c15c01c7\nd66e02d6796c5abc3f94d13ede2b8c6e44abec21 f2aa0e22b0ad56cbb7a946f93477785088869480\nc8369e07f78a46fa5bcbfc35e4743ef707f13605 0936e1c5138aeac96d6d73a84845ec9e63b723fb\n37aa6725380eada809932d423632ae94c664de3c 330f04e218568532fe253c9a1b36e0f8f51ff5ce\naf2b1b7e21e472df9c4b93c12ee818dcfb0f5b67 9385ea4a21afcfc10fc0747aa664ad0e753be6ed\na40f006a37ace6abad519b2db45abd5e5805de0e e33546054a771c60e16a27700fe9d7b8e92cad30\nc9be1d26ad9bbba44e6f90aba1b05ee7b1c9232c 87a7dd2d68de69717cbf5b5cfaa39f0aafecc67b\n4e8f4cba15614b99bf20f3fadf4fc1ff1d6c4589 58608757ec1e91ef131596d3996ac1a16400b6f4\n889f16fb40954afb08d3b03e1d6714133a535cf3 7c623b83c65bbc2f9148f60c63dea98c0b27af44\nb9bfcd519147b46c43762fe72b074401966285f7 439d03d94d9a073920109fe8a3c62b0437331e84\nfcd8c849007b468f55c1c4b4e0934240f19a8511 32805bfedb63b307f09770b2cbb3558532baa381\na9bc741a0e40c4136950a0f1bd9909830c3a051d 4d5cfbf512e80c25db3288a303ad2f4f86688181\n2e23f2260cd147bed571cc2f005a1aa2116d2269 091d04a6e81ed911b1d5a658907463f466ad0c6f\n7aa0385861b16a7af897775e0fc1fff5e72a77a5 95eddcb041c7380e3e94c581f0a8671d50db48eb\nf22ac7b502fb37e1b3c2dc1913700be7b251c922 a5dbe0412129cc4a3c35b8ddd3f7276f8422d825\ne8b3ea2aab5606401adbe686871088c55d3a8473 0a41f345f9a6960c38cc2df525b5599d9ddf6823\n4d2cb62b8bd8402ec517934ccacb92edb26fee75 6046b466eb1609afc81d478eac8837a751141b8c\n7ecaf0929f586451ec4f44fa5ed0c897d748b42a 9a0e6896e66340ac8371175fd2635c1ffb77b456\n6b7beac2da98e5e774959dfa5c70b2f7274ce6d9 bb484e3fc1aacb8c2d871000a1ea698d8f400e5b\n56447a192828501508cee4b107d8d38594f8c5c3 435ff2628829863c505354026259a8c7f8bbc9d3\n853d712ad9ebe1e418a747171f2b5a9df4fc621b d2d67d8e3bdf50ac9368265f5785b3e572328a9d\neec8dc51d526986fb340a1fcf18d608d70135038 43c86a2da3f10825e5d2dc9917c0a9ba5b1146a3\n7828084ef155ffe3d5ad2ba5736e76dbfe471cbb 242006f2c90a612d8f8140290610cb90277a9287\n9b3b0f3b87e2f8f0d0252611d2acdac1fc641bb2 b1bcd2c46fdf505aa5de4ac8f7e8526955ec32f1\ne9b2917479429912466856a6fc07879569b67990 7889b873aaa9a3a1851f37fc274a419c4b716a00\n21de98f572998470abdf22f128ca6a51be3b6db9 0034f34ae3a09bcc06892d3346687a381172000c\n4ec088d35390db37276fd3f1f17dbaa85f61e901 34022f06271c68d543bc6508347b354ddc4d12f6\nf46f306ce37687d64de54a7ae972bb045de6eb30 ed3197393e8e2751dbe152f317ba7a30788f10e6\ndf61ed9c521cd5084774ca833bc94da7dbc436e1 7bc12cf946fdeff32a457753fe9214339d92c2c9\n4e6c259c057d9d7ceb6b106a7c5298022c140a40 e62f06c61ad6d6d3f5b543628b16beae79183aea\n42b968ab6e9b22bffb60ef1a2eddd6ea0b8fb802 a9b31656db535ea165195276dd72b88499f0cfa4\n74ac18d1c7ddb0f623e8818703fbf2b34adea5ba ad0c4739c324165c8bd2d37f87d88c824aa23fe4\nbda32005506cee81df7f034816f7f4515b63c393 1fcb6654caf4a00b75181affa80336d7836c9922\nd01bb01c2f6afc9e7ade5fb42210ac8ce191bdad a88c6ac4f7ac6d443f85d1d1d33d3ef15604e1a6\n9f8ffd51dcd6db819b80598198a6a70cf088022c 57d614ae9661029193e73b9b41e07f7632f57728\nedd88da8a9c674e1f811481ce2cdeb7747eaa521 5b045b1ecbe301259c895de849ed0e5da2a4fa7b\nc048214ced54fc594ed11301e65cfe9cd6a0b366 971d5cf62623884a55c9c0980a08bb6ba84eb6f8\n27d4a24bda7ac4ab3f9cb535c885eeb8548cf81b e48a176cd921cb25ed6773aff4232f06239d7e3c\n6e4caa96dd81715256325d564aab35a3bc73d82a d51eaa86f6f0666a86b0b9af724577f1841002b1\n6b72a8c8a6f20e285c82babb1a33b877e752c1a8 c1d60e4d2b07a8173dcc615cc5fa90df596db5c6\n7394a989ff46b1ca0690a831bafbeeac7376ce77 45b6cbd1fd55ce81c075c105b53234ff86287317\n8036dcf399a2e66863acf73933372874fc2ea272 7296fc511eef41247dc779e1f93a6b23a5813b0d\n4e54bd25abd6ceb80a03358b3187e11dbd921712 23e441bc882815752d7d5508b711cb15b1dca5c6\ne795dae2e8ba8fbe63ae8c6c1ecd679ee3893f35 7db1da79c2f6d91f6b9e7511642d73dea0d3e591\ndf43a59e239c647a0a25ced372d22fbef35723fe 2bb56459fa791ecc93822ae033b26be50f5d0228\n73f1ef6a42c6c1df7d660fe2a89c7f80a4ab0471 85f56ca6093e0dcf6902ed912adafbfc56d9d1a0\nd6fc451985af3ad90b3c686c8ce5fdf1173a940c be560b3d5cfc1fe0b2c18b5ba2460157e1ef5673\n0ead7114f0de0aa76566e4d73ee152ce2bdf12a9 8c9f0aa772d5c5390598559a72cded492e0e5ea8\n3ee5b1266b3a77c74d1bdf8c4d5a15048014af68 722ec6102e81ce0a259694bfc9dd76c02e77d061\n1a197a121ded5e904cc7d93c4b1ddba5c97236b5 6e132fd53f390a555266866645e2256c35f00a53\n5b06d8a25e62340b7d023bb2df291edf33ed6cc0 76fec54c65ad36c68691c771e0b412dad76a5bc7\nc837daec77c7608426293b06ed9921b565c2c579 c99a079db290bb539561a394485811c3c90008e3\n12ead5553c74526260d30cb5f55359b2529e3e8a 2b8c3a137ce7e1725d1cbb8136d4bb40ae03249f\n1c1a15ae783ee26b960e4bea5e208428c86c8351 3841b8cbc03a333a36dde6c52d0623a0bde0b71d\n88947b9bf65f12cee9f2d1d6f6eb0b71781414a0 610133a38d451a3648ba57a8dd48ae9194056207\n382fa96061c833f1ab72584bbf666c1002179b24 09d852b7f6665c0c8e959f77d4064a874a4b60ac\nc918b7a2cfa8992e2318be42f69732e8ee1b663b f74947c8609f009d10386011aca67aa580dac27d\n6b3146d15b359ef8b57e5dc8746204f25ebcc757 d5fa49693df61311a674127cf5a1ee27d9fa7a34\n1a53a0ed41fca1dc71ddde0457828dda33e1b284 b68fbdc9e252096017f10ef3f14b13ef366f22a5\nb9e95f7b16efa2b3f67d9c69aab624e5900f3021 7ef503a30839b6df8be1d05fc36afbf8d06b6882\n3ec998dd816c23e6ea01f8405b023f18f2e4c6c3 8b8f1a19bf88b9202b4b5665bce8a4d91a79ea53\n5fa216cb6ee5d8c054a17d599bd3e297f0499d51 8add1cb270b363e090179caca2ed07dc04304439\neafd6a0710f57ca3a2065eff15dbaf3b0f9fa2c2 2c4a5af89778cd593859c485657cd4fd52b5556d\n7967e8421f72aa2cc8b752e88adc48d1e5a29cb5 a2295f35ddc68680f84cf11d8d04357de63d41bf\n13e085672ad422ea34571e088e0f49020c7f88f0 17a2ed59e9f68397d353e5a3e314a34da0723a55\n35cd89e0a41d0f02c28c1bfc2ff096548324e8a2 1f9faf4bd4be6ef5a47a213dd25e886869361839\na8fd40753ff6e7fcc636fb674d49928d6e9c00ac 33511672e839d2383ebd8f45e564a23440eb1474\nc7b9d14bf20e0f9403fbd81b7e773513dd507eeb 2e710264a628891fb726eca7e3e9da7612bf323e\n7d7558c376aad2b3b3f874537ec7d63f478c5e7b c95e3f7927a75fe8f00e1b7d2ee3daaa9c7405e6\n6f8187b0413db1d54d287a8218a134059dcf9871 ddcb4921349764059e8d235767f6a19fd6bc8f6d\n5319123e0701517629c8d15d59c712caa9d9b29d 863f55b4882bfdcc15b013dd74141a3783fe7442\n4c21f0c8c62d92183472c6b35808b1342aed24b0 ee63013aa4b72ca260f6728649619c4bedd41b27\nefa6f23057204b27a365fc30e53918e20412643c ccd93fc8485e8b02daacfa40110e8d9a33354f7b\nbf5b141aeac8fe6d7f6f34f41fbe09a6d89c0b45 0860afb819227be21efe3fe95ad7143d997db866\n23ba957709079c669c7144e29c6753f2828a9790 df085d0425033d898e6a406dd86591c4215988f8\n2392467cf54989e4e5aa780c6baf0322fa8d92dc 917753d7d15eff9ef59599923f49e2e0c77de532\n4b5d676cd6cd4d7abb199e1a82c4553e1b5dfc67 e82a2ee6a567f60f024b87cccd8b1ec7ca5aed11\n4c6c9e90904db95a9fa7aafe55e4ee3fa7e936f0 a8af7cac5b4efeb4d2830034bc21121f76a8e0d6\ne616acd2fe85f75c57c32e9053f4ac4cf5642ed1 787dbe15a3b8e2adc82bf61f4e9bae4ba69e901c\nc4248ba2ebe9836d80eb0ea66eaab9076951169b 1f7bbe08ab6159250dd66fe6ced29ab11cd33808\n71612eca0d17d3787f06c4f1e98860792cd175f5 65bab82a1e06dbeabd472364cf1842ed416cae35\n28250109a1372102a3a09658e11f02c2b8aa5834 85d362b131a6bf2ad2867b528594e089fe5d311a\nbed28979ea50a1dffc3e8e05aff8a267c690e8ee 3e1bcdd5cbe3bbe6860274cbc5457e9937e5847d\n3324ee0ce8c6f50789338886a3ef514b1602005a 4d237a9484db43ecbb266daee6d2ca1bb4e4eb5b\n9bc1d613d0b211dc6d812eefc8bbaea8d3bc7094 0790d6858f2a4e4c1785d123a53b6f6af29305b1\ne224c88c37e4f4f243086ee2e8cc5bba738d6368 158d15aed1f7ee403ec5a999b5581255764b3835\n6b23a0fb3524cee026b05dac1038deeaa88b2eb4 8a0831aa3d2b0d5c09acbd63069372a90fb6ca40\neb7175d2e5d4aeb2efe17cd33fc85e03649ac62b 05e50b6a82062ce65fe4b7963b38c714ac0e2cd1\nee66a6de010a36f3d656e285e0685852e4f22175 141ee2976592d8c491c7b476a0857ec8f5c1dffc\naaeb875b1cd2477f86a6e1225a767b029b166510 00bf26461681ecc4462fcdd72f114d0f8ecbdecd\n214a7c5f7d7de341811ea3c26e67f952fcffc7b8 1dd09abc795bc1348696ea410f2f51aa6e1bdebc\nd0fdbcec5591b266a79240dab00b3b217346cf26 3f85be0276b9957e6f53a9d0915238af3bd5d44e\n47aff74dfd1623d93f9a1686dbd0f76ee553bf13 07f1b5d588182cb0855ef309867e0ba7bc4fc10e\n70b72dda7b03c371fb58f33182045e1eee7542c6 18c1227159b6aa6676929b369b2f85c48abc2a8f\n33b6976b5dbe32b05347040ef4af0a588fad676a 5b69f6d4618a3262b3b3496577dcb40f9cfe3801\n452773e8d981a98e5611eff674c49a78d72d0399 a2784cb54a04d676e9c8c9696c2020ce2eda7acb\n56dd84416d538507c7cb8660ebfcc27708193fa7 6411e9b4f762392ba867231bf7c915189c60f76f\n8df09bbe0607f2c19d455239e398799c60ca4452 e07a1aba5c3666ff0be315f30ac6d198e2d4e743\ne9cd4740b723ba70d578615d35ec21cd5a922bb5 251f89d14cbb9a68ec1f684d0a5c8566b9ce2526\nb41142c457518bd02d065e21123016174e4c767e 8f3c3d7782db0d5c3a413a05f13d8b4b15333f0a\n5fe1c6b955100c60a8e1387a9cc7862422c86179 9457a9fa8ee29c6bdbf055b3cce892dd8ee66b1a\n0ec2d433a6556e9f615fe07e393b431e87962e6e 63e9e68c582a324d66d5417a116b671f83cfaf83\nbe9a3fe6fc366d6bf8f887d840604d5323648e07 f57e6634ef52e29444d94b93cccecf4214342c3d\n105a5cfb06651beccbe406ddfe21fbe95c3b94cf 96aa2305ef28cb268605d7f52dc90af8c124da16\ne43c24187c12856d40222e8fdfe0635a1345df0a da6907dea3d2ddd5a2b144afdb256a0d924e6674\n234cfcef0d7f11a6d768b3edd65637942d5a90ab fbd9125a5b5550eb0a5fa27a228782e27c59d143\n4205b6f46c24f53540edd18dab3ee6f7269963f6 85746ce7045e3adefe879a050641e29dcae24a5d\ne19789c852d45ee717a27d1fa62c594e83e534c6 6abe1c9a61f604a09c74073902421d47bc1c4b49\n150302f65d57c2be2f6d68e7a0ed5aca984b874c ec435b3ba8b5c7dcb207c233f023d28a56cc24fa\nf18bc1131f3d9171d6e833ffcf599006d0ed04b3 56a47fae004a6c1270773129d6165573a14b709f\ndd6a465749d31f67611e943e133aa6cb2845413b bf9a0993b36324c36c041682029f01df8dd39677\n35c629c8aed39c30d0309fe9756ac85eef383050 4e6e616c2f9eb8b6b7ec32c243475a7ed1ce8f69\nc802ae874dbd2833e885c67e6497c157f24928f9 8eff583fa66444b192e4aae48585f31b24533638\n1f221166f73172e4c994cb0c4e749a52d75b8c12 0fe6369a5ec13d312be082dc308f713169f2b185\n86549aa2789e3d609478fc19ece995ca3596632d 982c05a09ae586872dcd733c681484d82a873e8d\n96b3a962369c94c3ba5b6cd012c2cd91fdd6ca71 2811075d12161c22187fa243e75320a522477265\ncc9725105f99ebb265ad8cd9cfed836b0e32f90f 8c0d056e44bc83badf8ae4d4fe2da9c6284c98d3\n52a1bd7217153bc013f55afff2bce7b32df8ab89 042dd476d0155afe0fa2420c4e7f0357e2f4b2a3\n54ce76926145a52199e942bbf7e409b5f0b60edb 33131ed6d05f756cfb6b172e62aae13947fd98ee\nd8e7bedb4f252cc9404de9894dc3ea192b06cf6b 6224499538d1aad61eea8077ccb3b7ebc48ca3e9\n16a2e6a09a217e1e1d5e0f50a4d22f5914145806 c85ca779a91a17d56705d24911870b8f52c419b7\nb04bcd5c57e63fb905c42398e82c44a02bc42dbd 93d2196ca350d71bd519c3a4c0757f684785ae23\nc97a47acaa40d2c9d203d795d5f4e05c2606fef6 6692d0708815c4b65b9e9999af28b005724d91ee\nc0e41102fdce2644ef4aae7546175937ad1628b1 d083385da49ec6b180bbfc44958a81e34bc7909e\n98f7343644d2bcf0b495367105d7455db47d647a 837f84dee8343e4ff81ac639fad50f0db69cc8ac\ne58e663f49f055ae2475d7a9d2eeb90e64cf0b61 e4b74bb91a76682eedc730ac8a23819458f76c6f\n18aceb2908020ace45aa156856a3ab07859a4719 611c154ce64f24e6c115487fe90e9772eb750b0f\nfd62eb60bbd7ab3466435241a7159e2bad229589 6800557aefb1f996322cce4b56cf249927c3ed08\nf4d8ef2f743f46b92613f3fa6909dda2f5a2858d c88f0227d879d49ea5d1b9bb58c8b27ea9064745\nb74ca5b1a2b6799caa6901969e41109ee7cba7a3 284d0bb70f32a0b8c981cc0d8dea80180152c143\n7d303064e00f181c26518aaf3267d7c7e1327650 6bb369283b16eef01fa964d3adda894626b5f2ee\n103fa491603a9540f39fcea5e5f588048d258a3d 5d9534e25573e32091d936a3167cd76954d14de9\nd51b954a6db2476980dbfc01cdb818ed2b368153 e536149180bab043dbee4a1765e1c4ded3b25dd9\nc43fb1dc43e54cbf449856eb4eb87b20b05d9b53 8d910dc95b74c55551fcd1b440c06d928b9f7b96\nccf65cdf5bcbfa91f4ccfa6f385e69dc9fe44910 61cadf7ff9310b7dba82ee8a33a03b0e79a59808\nef22d104901bf87d309818b446fe1602a29a826b cea085a713630c5b5c44ced8896d5384c95fccf1\ne762c05cc5f7f5ab04ad7e49e2a03de13de7c3cd 2270076c5f649ae9bd6f6191ba245cd34806ed37\n7bc8b94e5941697abdb0e740dea526e013a866cb 7ba590415010034b45e6fa7cea6323f93f98606c\nde137552d46b7df7af5832182c3a62043f3ef60a b1718c3b0fdb10018960524cbfa6a837f35b6d38\n55d60e9bef53befbc496c66b2bf285887aac0417 17ab97ee562c89bb7947be35f2439a0a9cd2aa22\n13b722f097d588a72a593b39e88dbcc218872b5f a6bd594e79a7e8cf876c6d051b03d7c060099a98\n4656070b2b1b5a7ebe5724e9355cf19678090743 7048ee33522bb2a04c418fd7264bd430d1163d14\n7bdc2cb9cdd684fe8afd83df86a1919b00372d07 b396d795d0e7e9e6d267ea4eafd03d96c6307578\nccbd42aa4bf9c410ea4dddf991758c7e19952eb9 2ad86ae39694422836dddd42c150b59dca2d2f8f\ne3640a2f16879eaba44d7a08cea6cdd81d9c9c97 8211e3066e24abcb9f819182096872b08e530954\n052dded9fc62bfee5ff24e5656b73d5c12eca818 c2c8bd0cbee8474c792d6f26d2cf545c61989541\n500d8809e041dac2633a32a3364c1b4d3321cf78 c8acc04e4863e1af89726ef33af3f7367fdb85f9\n3c8bbf3b7586dbb9d38749c3cc4e89c3cad2553c a9f87ea22fec4bac4e073f7592a08f71b5bc6173\n9e951648b6e42952540055999a52e53453683f11 61d3f50077c859703c9f16cb156252b175156f54\nde03a32eca6d35bf7a9125c8397ed7fda9d894d3 f021227d26ffe5555fb530d183a0a3093748d7e8\nc747b6995c5ce6ffb67de9071aacae5b475aecce 0c6d9f0a3596c4cab2be7c07ed8d32dca909cd73\n71bcb708b69a45fc1492d8b4923edb1c7fbf673b b57a98dbaea0675ee2822a14098574318e236f48\n1c1d92400b592f6915a71e2ea86cb509a4980188 a1fad93f373e90644fe4555fc5038310ec6aaa15\na08c88a5874ba9574e160350766d34c0f155dcc7 2de4448b81716f63f0ca0a207576c9593eb2df03\n19c57a07cf0a22885cd8b2e11d698f614e766c5a bdb610cdfff08b3cfd2597eb6bd51611d2025fd4\n68ef9094dafb9720a30957153602a3d1a1c89bc6 be50ca60d00b5e2955b1568c5ed8c4f201999785\n0dd50e4b140d7a22a8784181a5b1998f8592d76f 1de7765c563f237f17e232543a6cefb126c6d75a\nfb42a5b5c320d94ad33932568ef8aaf4b3f9ad60 dcca8ee3eed5afe2392087786d934b41912d4249\ne18e42ba631c3e103b6c02938b490bdef98ee896 bb725652eab260615764f8484ad2e8fcf428cf30\ne3fabef80e8bce1c2404e801bdc7aa3f416b5d8d 6dcc3b7a6abfd522b73c708f02e4cdafbc525384\nac8a3bce5c7a3d6b63af867b668de267d2fc98e0 43453c4f736fc094f587a3a1fe37df0055b92d83\ne4af64df82b59260c3c83c2524f84ad1a02f9db4 a1f189b79252fdc8ff98c41044b326c5961c1eb5\n1ae71e7b9dbda742791d2aaee32cb3dc304b0c65 a175ecc5302685181019322a66812e910901de36\n45bbbe981bf19c0f6b6ebf7ccde3cca730378082 a7ac3c220bdcdeea021bac8d7644a15a3ce6c951\nacbc58a0a836c6493eaf2afcc174548989e0dbf9 650747dc0f634ad6f638ccfb3bf12458923c1e1b\n571a69ef11e45b46987eec4e897cddd4fcde4dc8 cbe4457c63e208574414dc93f75d8639ebf89b67\n7c3f135d8eb332356504fcb262e3cc9525e31d78 6197c0acad419fa146d169429fe2ef0c374b79e9\n021b04e6797ecf136034c0c707d8d52a5a107740 4991bd2198e32518f97f5caf0e6a840051390d72\n1f571c90174348a69256832355a463a957d38d5c e293d69ee0c4f995f67542bde961e9bd2a60328a\n9ae34699ff7136ae97cfaf96079e80513de812d9 16b4079801570d21f0f08f31c43c4149cd0db319\n791a3855514fb3768db9bcea77f17d3f00a74ef3 6232d78d9f262e7f96d45553a6f1deb4b41fa2f5\n84deeae271ccd3af975a7f48fd8a051141e1203b 8f1c6f8578bd7f28236e93a282674e1dcb5c7e78\na78f3a0e8cdfc47d85f2f58d63ea4879a1c1f5ea 6639d75ab9579765db65c8578e4e3351f8786323\n7ba5d40d11ff5b15ca37ab4ea6d050faf459ea82 6993b3d9055ca409bb35940cf75b728b2d02aeec\n322c3d5862f54243f59ffd5c3cf49f9d6ccfdcc1 e041031f3d80fa34a3ab18812165d7531e6b201f\n78cd848da81d93824292d9db8ed8f6d460cb4e3b 0477f4f71bc22f0682d792f9489d000ede8e1be7\n386b18607279355aa08c6c00e57ab03115d7c7a0 4aaeb468bfc3312c763d604eab0ce62d44f06c7c\n7fd9a809970631e6ed907f4c1f65b7d1dfb2708b ad76cae30d033efa0ae95fed22ec93375b5cca4f\n081d0bf374505158dbf4fdbae6b48cc0417fa33a f248b14e7d52e610aef39fee25397a057af3de86\nfd494c2e585658f4cd72d42c2b354b6dd797fbe6 5f5a415ea557104ef6856cfc26c65f265c1ff84b\n776f7025077ed19c56088468f9c0a72650a7a1b9 49785cf53d5b375fba2d727a42557979a0e857f7\ne6f075ac99aae9cad7f0e92dede2d88e686005c2 af7d27f8f682f0a0abb005bd86b8ba1d918306ae\nf54e303f00a09c88ddae6b8383a4718c92b19a58 cef66fd437f3b7876d62344dac2e588478853364\n8526915cec26b225f9debdf2c5d24694c3a574d7 fa43b6a877697712bbeba3324bb9d66fa1c698d3\nda1793f77ed7e0c5b60f5b7d71e452bd936c342b f9e8c309be68af4e326113d39b8f031f85141b33\nb8213a415179d7a349e4cf9655b491617a061f60 90c7459937643e5f6782a96e06b01cd3aac8b48c\n5275243f14d27132f9464b11b2a02f5a03737650 80a711ad0a74857ea0dfc68f6acbde86f70b9d7d\n94833b9fb9fb5be860921ab1fe65cf89fae27d70 c27e485141cc8348d2a85d2482dad0be0da26852\n3f3a6a6f3ed93070c13410becae9b7b030b07da2 ae747c7eca9136d2b8cb7ea63b55f4a758fe9319\n150119b62ea9c5d228a07e8118f5a401d903605c f73578d6b9835f6ceb71eee42c20074457cbc380\n5b39bec5164b70c21c2573300f6a7651511ce2cf 5d361f3917128433492e9810e4e8b8b3950f7469\n64d1fbcb918b83769bc24606323fd7481d978da1 993d1655ca6b7cbbe460ae41f7e19e98871aec9d\n00b6d2cf06127008f13160a238ac75c5ed133da1 4ffcb0fc1bdb0a2f0b4b1a9cf1fa212466075877\n22beea78e366a2e06105b4bed9589f9aa53d3f86 519e31b3b1d3123d43e5036084a5ec28ab743a86\nf2a002af6254955ac2984617e3a1bd40da754040 19a85970a572b6b0df4711d39a9afb7a0bf63c9b\n08d2e4bcb52957b82705b90d975481c285ebd6ab 524ea2ee7c2cda60ae6013730c5a3a703a8db571\n3d35478a27bd0e17c751087000f8dfca371eb8b4 21c0a32d82c7d4099070f81120792c9075ceff37\nb8bd03fde36c1ec83d3e1249393f00e8a7f85c3e 9f4de77258eb5da8f5d03142b2cae9a1164fbc42\nb4692066a7903eb2f4b0a8b2cb0f31d777d47702 97a23bdf124ed2f57575067783b532d6fbac15fc\n7cd1066545fca1cd421d09a5e3e9b927a5714d5c 3a5e5c9bf7fc47655ecf396e6947ec93fbc07091\n4d952ac223d851083c82cf436da17bf5e44b7515 d1d5856ee80bc269be8ea742e4944d2e1eea512c\nb2213c2d92b70500ffbe1ec947b78121cd262285 706ae5fd87e0afda823ff80aa6b7a6c0dab8c855\ndd99509d303074aa54f1b6e6c5154af694b7c492 857223a0bef02811b00164a32ed9be2439f3a833\n0c21cb89b3f754f0779972839d02ec204d887a9d 1500bbdc36ea21c80c44e5b3f1f2ea0d9d026026\n4b7e5b581d43c97561a791dd3fe6842f106a79d8 ef6eb8d326ed70b74bbd93437b1eef8bdaa611df\n2d64c0dffa9c946286d048bb056ac4794913891a 923819a9ed877440f788e6c09af958208dc9bbcf\n68c03eec57a5217e3d17db5463f295f1e186aea7 8b5ae799fc6866fb14beea531abe331992ffd2b0\n3d763ff5ab0289e792573f0833d1c23223d870c8 32646f5ce6e9672b8e49ed80711bb41c70fd7eb4\n1814454189f205813a8c8369bddd6442d11a0750 104006774821e4b5400f1b883e3593cceb3357ed\nd62d602ba5e3e6a803f61fc0a52b484b348413f8 09904fcbb13963919b9e289d80a252f0d18cdd9b\n75ab3155f887cffe3f3454b308083d35808e1690 85962be08c9ae237b5c2dcb9fb93d8b67929d3cc\nee8c16350fe20b7daa8ecc867046c1568dda90f7 ea62fbbb9d7ade9b67b1e3e3bcc1fd064b205c52\n1e6ab50f2e5709e86309c4830eb92c370e580c58 1a1084577681381210e9c4f61a56aee31642ac46\ne45ee92c707da35098ac1f897c29b787bd170368 4ce18870c7ea70f0ccd508ffd79f08edd519a460\ne438991b38c94e0cac8e5431ec30bd388510f044 e2f4c05f6922c9a3e99094a4583c08c16152504f\n0d2ccdd8cd52dbd7524f949ccbd824568062b340 34fa991972fbce99fe7196442f1500b08bba34b2\ncf7870a3cdca2838de411f5d86829c6d10fb76cc 34bf75c833480ac027ab7736af5adaea6006b807\ncebdd1bbb5320b5b7c5ef87111508ca80bd8a94b 9b3ce42d2b84f825d9497d53d739cc15f6222c2b\n23eb35f86312ee2936c6b2418b52e9f1f78cd5d2 ed8453f1ae4643daec9e8bec4cd327129ad52ec8\nfa5d63dd2b7c8dd6a4acb5244b9e8313000d1eb7 20c96fa63335cf067fa9b9f7e9222b92e31c94a8\ne04e217b8b709b08982fef1b18ac1e7eed96ec7d d7a30ce540c5946dfc169a206c76f91415b71519\nc714653052aa94e73278ce53feaf3e0063bfdcc8 31b6d10207fbb50463b42e4ea2142c1bceb18092\nf76ec297d942d6841287f47fe820d983c4ab290f 98e9b7e02ffebd82219dbc3f46733e934deffa39\nce5ec9d431288b13d0d973b3198a4e64149204f0 36005e3f070de3ef48d1f247c88d555b543cf3ca\n61a95ac1456482eaedaaed950a88739eff90c380 09fee422a2f515dd9fbaef040e6f21fba006df93\n2f2d280e745cf3d7e546a23dc164b5071940e8b1 a7997b2e580be1510e2320b938267c2d2395829f\n9aa531519ef1a3179539ea0d1a2ad2db7734d120 37da062dbfcfd982dac077b5fe2e35abdb238bd1\n75fec28e03c502cb020e420371d4d25a19f565d3 a997dc2487ecfc12ace8e73b2bdc94ac5b4b92a3\ncd0f86e2dea1e43a44a6d5207421f9a6e507f5af beabc3c6bd418ea8f7d64e997aeb4cefdafc76b8\nf11da578b5cfe03d122fc8e83bc5874d25ce13df f2d0a4e555a3225b92c27e3272a218975a2f5108\ndc193fc733e06a44823829234c40b6e2df9ac558 794c0900a1075e04f83f3a53c3c29ec1ebb28cc9\n8ff847c55920a0255f9515945a762be4ab253980 7fb1e838a1703cc665e6b5e88569ed1404510ab6\n21c11b6a6df9b4aac9aadb48d8a19459a6c576a9 319a82d3ce360331beb0e7e31e1554d3f1bc1a0d\n9f2b9306d3b255318c58ff1aa8ebe7ab6a11f4af 49574eefe2ab40cd87019d4866c45ccfcaa39f5a\nd53aeaf3d43506f61ad6f2f3e45573d5bbcfd2a1 462d2bd053880ef2d2ce9c5ac2bb0ab767de06f2\n66ac717fc4d239046ef0210673f302b5c2227a07 8ef0427cdd47172f41bbf793b23453ea847870a9\n4d74372f5833858556863b534dafa2676aab88d3 eb09f2df31c9185f9832609c233d5e6356bd6cfe\n5cce5ec5d2b25873d23c8c677d0a9116f2b5fd7d 11e2373b0e65b54522e7bb05ad9aa591596dd181\n839221ac3c77cc5d33497d7f3ac63eb098a1b72e 8cac1eb025ddd74c2a93c8fe2e4071b10cdec015\n8b826ef8ae64aec29f972142b240e710f7f8aca2 6616019948ec9de0a5b9d804e32675bbdb67cfa9\n672c8b78326bfb64be5e778dea49ed65cc629e55 4e0eb9a0b882169f27f4fd53b5c808abf0ee0b20\n1a01c613730f66f38d101328fc9617c7aba80b60 4b21aa529da6691129aa22f81fbd09ae8cc10457\n88a4086e3aaa2d47d6df9a94819ba126d99b61dd ac97f127820f9b1703b9e1fdf74038235a6799e4\n1409829b73bc8781b9881de84e1a7f64b9c6be4e d97d8467140192f9ff2a448925515f0131ececc5\nefae33f3262fb441ba48b94cc3bb8eecc38b43f8 18fe8dd3bc1bdd2f2bbb5846f75614cdb72142f1\ne83035897cdb5c56c972b7ee38c940b938938581 9e94c4d11c52ac7ea7dee1b7c30d2c16217bc079\nffa9bd100db757ea2b2316d24d9e971a6b8a0677 56f7782207b98a924128d04f5efeeac4a07b0df2\nc6451f81fc2b412663b62b59e563c97face44b8b d2f9ed5cae889cfbbc2a5600da3dd12f45799318\nebee86a6daeb76706c6d50536b90b9357106b482 ef3109bfd32cb5dc0dfdf9fd18371c8bf206cb53\na8c2d6d163d73f30701fef9b63a7ce2d730f36ce 57de8ca2d086a66bbc9f9e6892671b59c4d7bebd\n9c88f2aba427b76750be773c831adc1aeb757468 f0a4f55e61e1935daecc34640fafd08736934d70\n542e51dfe04de052feca4101ecd1e5422f7f1792 f959b6a57172a45c07dac0cbfc1ebfed8403aa91\n96f73a79d20f56e4991b4aa372a8fdb935250f3e fa3cb1fcb66aa8e9489649daf59e868a1bdce37f\n30e499bf952efb9a2469ecfafab32087dd77b7a2 912127b92bc5ae670dae44af4741a310dd47d9a3\nc65c7158988a7078a8414d218c507f81331968a7 f5ae4a9b0dbed7ffce307531f9bbdb075d63922b\n4260cd51c3c1680585523f6ce9a3cf6eb4c17182 811df8ab8f8b8606b487c3bfba2cf211acc882e9\nf7d62f4fb11f43bf313b234382427fec686ba59c 17ff8ac3f1831db822f280c47b5595313afe88ee\n7ee01e3bed51932a53a1f6785df2078eaa50d59e d02e09f0aca914b96f91b30ead212c1023f71c87\n1bd1af1f7fa0e4a5261f68114a90e2db43b463d1 ab6c478f92abd22df64392411840194856df8ba8\n42ebcea1172d548b8130e1ff8a8d1f592143f3ea d48e4303a17c2cd84b0914ae10a02657a96137dd\n7bd0d8d052a82e208d8915c5275c3fede58064d9 e231b3e0ec563ac3e7c0d1e774974b3f2a7d832c\nccccaf653a9f7e32b3356eca3ce4f19bd3849d46 4b6a4a0151543a2db8983dc71ada1c5f44016ec4\n4bf1a5978af35ff9139640cf5d8d44be7e35d142 df44fe8e08055d79047c579627e594b17cb8f532\nccf7fe895cb99b4560be434eab7e8c6c66bfe923 0ec301c4c3ac261102e5d78b96e95e41461926d6\n8c51f8dea8ebecc63b7fbefd5fbd53c1becc5b32 6869e788f9df7a4b9fdce7669569bb084d6065cb\n9519153d5e4b80a0750f4306964ec5e936cfb120 762ad5eba0a4300b11d715397bd4e8ce03fd0fde\na50b5898b61dd340e78596194ae74dd4c1d1e64b f664b95c946a89a747b7c8c1a695b6c3f805543a\na6a617d469993883d69912d9ca0e42d231d865e0 e52bcbb9c459890ecb4b1888b81abedda37bb531\nf5c5912bcb09d0e8f8cf601e74c00af089ec3620 80186fb5aee956ce3e2e7de0916bebab70e4fa06\nb2e759f1e6094d53248b8636355bd0f43b72ffe6 306b627fc6f6edec6b8342c4a76f9a7a020ae48e\n5c0d26f91e2a55bfaa4dd80ba3a0573edf0bb04a b1a9420d72c4ec17a0d7cac491eeab884cc44053\n88104a29bf0c542f3b36783412dbc507c435cb6c 646ff16f8c1918ce6e452a3018146224aae5f157\n43971036ad65e0de6e14be1e1d2306e967ff8584 ab32fb67141ef32ef2926a6115d8a0d8e6cbdb05\n5bcceb67d2fb2d4152c26589389233872148c83b 357506233783ff0ced0cbdb546aceadf53ad47eb\n5aeb98a44e525a8a8e44e0901450e2b48cd690b3 d24ee44aa94e1781b69cff8efe45182816b240b6\n7e91a4b6ee9ddd9b52f465f2e69fa649a57cd827 9b3cc021382386003f5ed4790db6b3f572b0f7fc\n80882dd0c55c149e6cf7904e4b1c10418ee6ea43 67ff79b64035ec076f83b5d315c447f68ae0e6aa\n7b90fe8ce31b034bf594e5e85dd99dfe48b7183f ea93be8726e12e565be0811151e9012c4885ae49\n3b0feb439454ac3b58529d4d96c147539e4756a0 4fd1ca6ba71dfd64fd6f02593491f792ee0bd7fc\nd41c55cc55e0eeece2da53e1b6ccdf7103869e35 8c9f9c98989a9762ab235819303fd70d22d920b5\nac5c5a95d30966115e24af845dce38cdf54c8049 57c97a6fd40a0586d849faad05e326c3e670145e\ne85d8affe12926e6f9ac0abb2bf88660879da832 c166faf56ecf6373f7db5638c87a2459a3e4346e\ne9ffc90dd9c7184e9951a1f337b5487463b8cd16 cec93fa49a495787a970153268587a29ee752d13\nb7fdf6935abaf19503ad3af869280a70e72d78f6 3da64c356f56624a73a861a68952f8de272e2a13\ndfddadb78c07b6147361ecb35df9d18fd87a762e 963e9c560633672157e9703617e7ce4f5714fa8a\ne9541a7dff306249518ffea79f220e9d6161d952 74f892d3d501c6bcd02110c191ef9e580e1fb5a8\n78ae0c8fadcad66ca031b8fadb86de7f266d64b2 d2d2b071487ce6b58fbcc3f4f0330e3c1d5267bd\ncc78c58dc5ce51dadb41f04f3bf1c59008dc2b40 d86bbe58ef6961a996e294dfbe515243a07f661b\n27d0509c8111153f37282101faf65a27a2ab94ac 24ef4589f163d39f33730984690e9455002b16f3\ncf5a26e08a365c3f4fd3306788a971cb36942cac 8812cd1463e31049e1b8d8e48c39f5548a5deb53\nde5d12219b7814545be6b56e6c22cb22530387e1 ee5593dc411b383281f6b32986b0c92417589c2f\ne70d2ed4d86ba91c9b50e9a822ca3fab964e94c0 58e1498fd53eb3f805bb1a706a54d40db0154ee4\n963af81bc34ef16fc7508704fe0bfe06be76b692 6ac43dd845700f89b7764227d02d30a65ae36368\n3ab2177e669d2bc50abf986386905f34ac465bee d6e577d5256f43814e2ded07620449611cece362\nd03d56a4ff20cfca629a1183444fc8a90e5eae42 29731f5ff15d10d2a075642f22b0ef969990c42f\n97c3a0c8f0263992a2c46eb514a2f1de870361c6 a4fb8a39440220de33a3ce28cf2277740f66eff9\n0b52f50c0a7d19d3704c3a4b743d32b4ea72d27e d98abb7965f15580cac0abcc14b3365c55143cbf\ne9da4026bd77ddf5f2d28957ba577323bf9e212a b2ed7330722fd9d9fe690913151050f01986d5de\nd29bc426569e6a7a04f395b860346885c335c138 c2d781a605e744186277287ad38625bf04f5b068\n672e7d96bd7566f9b87fdf6e7d6a710201d5b6a9 61675652cae91121310ca7a18d975afaab52a962\n43f7c4483d17fe14abf0f668e16298f290d2f6e6 ca74a1a581d3e938b9b4890fdcfd0830b61ff7a4\n84cea3cffe33ad26736da82586f4175ef9c74286 f41d686b361832780d0083249dbe0a31a4b39c7c\n21a6ef2335e0ba194d831a7dbcdea6fc8a4e148f 6ca270ad444d983f34a99c1a9ca57687e2a562f5\n04cf995406c74ddc52b83a934ac342c057f34fb0 495579fb6be128ebdbbf2c17ab79b1a56be18805\nc417be54ad07d54053d1b3202b0330dc3afd18af 505e9be6a5f0b7ba314cc17860b73fa2bf0dc917\n04c54deecf6ab0c499b31c287246ef4c6697ecb9 1cf9b9c183ec6ecf1f5a678fb90921d728872ab9\nab719e96bab42da8ef40482f8b540ddfd5b30501 0f690b998f282e6d2b07fa2f457f1b900c84f9bf\n919ac6ab9c9af6ad55f0ac0272465a1ddce6c0a1 bda7ff4bae97fc3e3351dd73d5f95b80b36e852a\n853667d481dc27700a418890d2a352d2ed5a635d ef3a5e887d7d5ab63f8dee75f5955ec8655ace85\nf24b5b7cea9471c2c88664b1fbec6cac5df8f796 778fe5521700e50a1aef0865ff3e8cdf381d3a9d\n7d9758463adaf409bf681add6670efbb84caca2f 1332e5a29f79ff362f04bc3daf196e6de7256ba9\n74fa1ba8841a4161219aba16f84f66ae699cc2b6 d96faf87271cd4351211ed8c6ad831a1f38d60a9\n123c241ce692f3efffb2ccf006b53ffdb256b3a8 8fd0d7b7c07561ea3a7b9808a2091da8bc204ca9\nb0a2a44b319fb3c57e2c52ba557e95a9ad6f4722 b51c07b125856a0505434d727e329c312d7ed708\n96492ef93c080d3d59337ad87d219cdfc9de2ff9 cedc734621e3a5b78b3e7941cb073136da290c30\n956f97261cfbbc1dae8f3f66ede740f2346464af 4205fb5a70abf3e05d09b63c63916abb5a46d5a8\n358d28997467755d9414fd3d6369706ae88ee870 883b1b64deb2dc1239da0284d7b02ab8bf5c7619\nacb549af0a9ca1b6eed316988e6d610b14ffa4f3 16a1029a7ecf8d84c984d0f8dd83c9a62380d977\nbac645f237d2dd36087acd5e6118a0edc55fcabc 3b1fda1ea2dac3b1a6d9bc5d3aad57751abc894c\nc368016aafa362089f8f86852931f075591781cf 05c81c880a3ea20f53f94c7e50d2546ef1600026\n7bc76889a3113927c6b1e89e952d54f561863466 be0055f6f79658e66fbcff943d311c42135996eb\neb43d219e910014987fe42c91b149591aaf4693f edf2ef9cb6590bbfd423910f2fc05e5aa42ff71e\n21af072c1c6763bcea9097f171e282cfeb020af3 1264b1fd1c8ce91f5f3fa94c39611152b0a413ba\n54824dabcecb366ec31449fca08aa5665c2fffeb e45a605e8d94975d525159f25bd39882d7450645\n4f532d23a02e18dbd0b6484ad5b6ae4fe7c2e360 f7a61372b0d9203f4b682282c2c5b36c9744fb1d\n11cc43d5caabe2011ed7b7372b40d34b6f7d80eb 51da2089ec70f686fb0c5e1fb436ae3e7b2fb9ae\ned2367348d38ac9fa02e4f1a97210516b77f3ff2 77933d66c7db1cce128acaad3a2fc26badaf2412\n2993f18339900cb25a161748d2070597840c1bf3 a04c6c47acfcb32ff337771f4c5a1696ecc3f104\n01e2b5c02a92d6061c2d2cbbf9e8bf357debb018 d5afb60a1907037a5b49800e0812e2170977dcea\n11e66491401c1aad766e07e2ee194433fcb827b3 6b14094fa008ceaff6c6403c79002ac2bd73333d\n406a87730ae463aaec1fe64a230402a87a7811c7 64c0953bb8b030e185c7aa6ffda1973e8eed8f75\nabf3a6bd62f874e0aa54705fd4e5ae9c0a4c2eed d1d804c5560b490ce67b09c849b686375dccbc12\nde8e18df25ebf17873bbd6c97fed356681939052 4cc00c6cbcd152727ecb6dd0b06a878acd3dcd98\n570f35ab133138cbc3cc2e06a27399a38333231e ca25c371e7ed806d5bf92da4d3d6e49b37ceb844\n5c07e8d08e1d2f7194b7d466b764f80b8483dda7 ca812b90cc1e8eb05fef441e29b486a1f0e5445b\neb811460a096ce3145c82d29259cac7d86924765 a6f237c5608b2b5e6ff0a572d35288df115a8640\n3d18ac5389728826eb850ed944a91e04fb132282 c4ef8f579b95ee87f76cb425d0f5aec40ff1991a\ne8729190aa774edf96461eef35ea2bb46ce7d754 b1130ef08d67c6b9eb2d968756e3080c13c39a51\n55ac11db346057ba517bc87b1d818b0f828f223d c89d8bdd668b5b67e7cf47bd6b2e91ebf47c53a6\ncc4bdb840744fd4a5372d87b0bb38a452b8af18b bc07f33e44e3dad6cee5b2dc8258fb463c3d0a62\n86b636682acdb6ba25ca62d3b8395006fba07866 c25eb88758a38c1eab037cc02b260d3844e989f6\nc18df4883173702687ab776538475858a3eaf7ee 62671b38980b6ddea26e74d527284d24f2644a86\n1835f59ded0816f904612c8b055a24d14085825e 4c53e7c3795981d4f17b8d399e2704cb16537bec\n42d91958d9d7ab9493bd216b159090645c57b056 8c592410e3668ad23b8d4b841d3f02325ff077f1\n16979a4904c797842eb3ea0c215b2d0314578c5b ed697317fbf43feadceb2c92b8482fd8abe898ff\n7d6b07ee0edb4e484516100a45901513306dcd4e d0b7f110a85cf5cdb1463949cc6a8e16d8842d38\neace65538017b4df5cc5e864c8dfd4b22911950e 179a77bcfdf87b6c45f0c4a142d634e39c9fa9ca\n2516d4221f9383c92b40a23b8c2f8ac690e0d48b 03ffe9abbdc85917a359e4118140859c6f344a39\n28c15d534cf38e64489ff3970f947323dcf7539f 39c391857c9be3d3b41858f7c37a23773ace8bf9\n4956f2e88777dd6f9d887d3d6430b945e8679595 d41305386520dcb24a918bf10ac129983af83e95\nf7896df3b20633a01b3a3cd3a7cf655ea2ef3a4a 44f140b5f23fb190b39fdd78cd8f46e80ff41ddf\n6530c47d9c369cbbbb636c9defef07fb7ea28e96 31708df70729635104e4a77f4b9d2472e711fdaa\n96d270932d36c08ba4222c5c9f18d76ef35bc671 acdd5a7eb488a90233bf4ac1b7b81088fc96c13f\n930629e806d06b559e80ebb6665cb5c9cd7292a9 8e37c86eccc3aa4d53b446db8cea9eaf723e7efa\nc7746fdb80afd587d2a0c1d15d9cdc20ee3dc1b4 4400e6ba1d450104ec902309affaf3cd5c5a9229\n4a34528afdcfb020b09109475a8790103b992823 dc1a36d5f1adc391ceca7a7073d86722c6abdb1a\n787ee05ca34a20c6095e381da7e26b1c87b61da2 c676809f9a2e055e345591d1ed83f8419ba5c9f2\n82ca8a122b9ede7b1ace78c0c2ec4f9053359eba ce7ce00ba5f492e6c555342d0ed1986f86e6a7ce\n80fc74196a5b16aa6c0cc6573fd45ba0076a1cf9 b443e1e9a0a335e02a734336e7052517c08e3b85\n81d738e7bf317b605a59e4779ec46d0d275631bd a2a78f1ee015806dd16abb8c72b1206b837c8797\n92f8c4d0f392b2854bd5a00666a84c8f04f52d94 018897ea338533ab90aa3bb2ffb971313f4bfcf5\n77b3224e12e9eca496c20d91b68950a374b0ca32 5e67c0ef62367dcfd270a7b8da0dcef12dd2e678\n14bb337d6c1e9c7deaf8b9c0a2e0da877519065a ccf0653389a5db5e6c3847d0217c545e3d21c268\n2bc88da0a96d3c180c6bcab2e666b6d03205dbb7 f83c0c0abf9296f6df539462804ee963aa2ece85\n8ac9b72b3de2e5bbd05efa3d5181a2f0f46a5ea8 8fcea9ebb5ed9111f0eefe1276cfe6c4ac7762d6\nd49b6e03771ef61d39d0dc24e4cfd4f6a265352d f4dbe1d7fb31ffe8a24bcbaea03663aa7f5cb8ba\n7fb9ed2384445b924456f7ce3741da7f3fa6b0e5 b9fd7dbf21671978c87599fce811b008c937bb00\n149008de099b4ea2d530497b71575628003e3098 04a12f8721a5109ab105f41bfa494828c877e6e0\n9d6f0a6e6b84eb3f9617cbb537c2a619cc4202b1 13f2f5453c093d89f6382a549f289f00bc237e7d\n117056c649c5d7f786d6a48c295a803dcdd2a800 05be26c9af87801580a534b1fd3d99705e03bd5e\n365374dbbbc7905ba646cde20a79a7686283e325 fd20151c01034a4ad6d4ee5956d9cb327332c3b2\nfff8f00dc9eadcb59ac5a541608e3576d9f01bbf 453ee3ba63428b3d1d72a1694f87b8ac5f5c0a14\n848752dab2556c8aaf03fecd64e08cc8b496afbe 206e92bfef7989d7ca409ab69c3963db446e08f7\n4462ad9871d0b561c1b06616e972d871568bfa03 eccd382d66290d2e37d78d5a82068e7636cbf4a1\n49209de52f384e3a1f617b6a30888ebb96ac715a 5dfe49e4a47430984198760ab41d2f5277d50907\n36f5748b129c891d6de12fefa23a9522fe7f35d8 b17b0b17020397750d9629bd92dbc5d892e605fe\n2efe794037cc45092648d9168dfd229be822ba3b 28660b87b323d4fcbe2a1db8db2e5f2ed70a3d84\nfc0f1058f57345638691254a5569d35f45ddc0b2 1a698a91a8e2a8529e4eb1fbeda06f406be17595\n287a750fea929142cf16dba065500e9454a0fe94 8d5b0716743877d110c07ced8ec7a8ad33249fae\na14f47013bf2f2efb9e02db7ecddd8dea1127d3d 6c0d481dd3383d04c4ae47b08d247aa6300514aa\nb031e3907af744e78e0c07c54360845089492af1 0d7380f001e319486d2d3c799feb72573783ff7d\n8e1deb26dabe599d3b60790478ac5ea2bb3fd151 9be99d284080feb6b635b36dda5457cfe2cde9ee\n412579b62b344717dae7f0e0b56647ee8c7d913e 15d7feca94af3a28d9eac6643f2bbf64f0075170\n0ac6a0c370f709f6bfe32ada6d8a3225986e1688 bc9bf84fc455cbc830e452749e82f70142fb8f86\n885abca1d9ffef9f004c53c07229dd68a8e04f71 5129fd3dbbb98af133f6ea6d8cdaa23b4aa0e111\nbb43def5bba3fcb7367aedb5820169cf56444f92 cff84f255b51b6e15ecaa70533077cc7661fba13\n931b6a749ed0d5ba0ce688bcb084affff2a3bce0 74c254bf1def88142d68cb125b3528d7b034a5f8\n9c4c1ff8345ea4d7e778e3323795eace6785b5ea d16de3b9814141cceae7f19aa6278fdf7cbeeb30\n8882d45462053fe35dd49362f2c34f8e6f6a23d3 aceef73087a945da803e0341284af6c924997c88\nbcc929e5c746fdd1eae008120b04781aa59b7e8a 186fbc368595586596e4d10b20b0a8d2cf52cdcd\n1a86fcb52fb0f8275520ebe00a771d02db6cbd0d 565e8963adba360b0442bc5d029b88273237c717\n65f775f5b70e82b7cd93793d62aaa9d3b575853c 29ae9a32bdc5d26235ba1e5970c4f316519ab86e\nb5fc856846b76e70bac2b7eabffbc13186a9690c 83fdf9a1c472044e9389c198ce22b076d327be64\n95264c6fb74a5a2c14644804edd6f665ab65abea aab272519cedb17c531b0dad1a2e98c41dd8bce4\nbca74f39b8e19c23f73b9b2dcd42394ef5000984 6a6d3372ec2e787bd6c116cd331242bcb813a02d\n9888955d836dc8279a217bec6c0d23d0fa4c5ec9 e32027237533ce736674c9fc73cd0e6f1fc8969d\n3b87cbb4943f6ee55bc14bf4bb6ef80c1d16edea 26ecf97575f3fe953344f0daf78956bd15f284aa\n57bf5acb98f4e44bae45f9bd556b98f69fb79d0b fb2d7c2b136af1e7b327ff9f4a9f749d758ba570\nb0bc27c757e4aff04abaf71fe159fd9d17005f87 ea177f77f84b2e8c387fc14dfb992ccffa5445d6\n6f984506865415e53a618f332772a93a18963632 84c1137dee358fd340201dda6daed09c00d94cd9\nc6072729b16a582863e638e28f568fbca2cf8340 562486ea892859a20cdd3bf409b58be6f068fd13\n68e677a599b030b3c99327077e43d6e63d43e3e9 2452a4b95bc24185ad1a8ccd0049731675ca0b23\n1ff4cdd7f34c6467c3a749719ab1781b3c4aa93e bd49eb1cbb9976157ed900f3840519b66e98fb73\n6a482abcbb8c640fcf29d99529980a01b285bd6b 00b8d3f68af5b93a4b1229117ae0dfcfcee3ab33\n82eed1e9601c0bbacf1ea3720fa3e231e7112601 873193a9b031b60f6dcc191acb918ae66b02a90d\n7e7237bea66745c69b2a65dfc1ef1ea59648649e 8a5dc038b3efdcb851ddef6216f2d1ee12c50e43\nd099da07429d2f8b92f68ec954e5e43f2bd1f2f3 30399120c84d71f87e5e1d9569ad225a65c39f71\nb501756e5cf5485a2027c24f931e46c0813ea502 f94dbce881cff569d7dd961a80b04709ae2432e4\ncc9808aa6197a46378c30442c9ac3ffe62fee973 b6b9c42e085f97f2deda356d800878c8f5e96bcf\nf0a99c0f1526379707e3aea15d0783ae58795f60 1c468b704a16d6fffad5a33205601ea26763d61a\n28275244eae0fab2f63bbf9e30d747831e235342 7d3f6dbe0719f5754453ba586efad38e35836c8d\nb8a507df01871114e01053e7ef12cabfe4efeb64 f357a7d6e7ed2e60b3075c806c0ab96b5c8d8719\nfea4d8e1c215157cb3f963a2fbbb72b156f6e886 7cc09b9c6061f0c83a1c175e94fb8ad1101eb9c7\n7af0babce0d4680452a99e407b6059d9241e05b9 af6a816b9005549930d3650c18e6cdc08eb96c93\nb8cb1c9f563b038d0cf89d1d16417bd90c830690 fbd69a27bf2c1b594107d77e8f85a8c5d62c1e7c\na3f799b82d9845a8324cac19a4484fccc6572e19 0fd9c85a0d34e4cd4ebeae50749d06505d6264bb\nf8d515ff985aabc733a584ec15df3c163f02af85 9202c6e506483b825203944365e7b11df2ccdcdb\nccca9517be2a24ef6749b6ed80bd08568a1bc53e 809eb93ba386977df46cb2ed358e3b46a34aa137\n66cf24d3609bacca9474504869b3a22a2cfd2f02 8a4e77f2d4cd223bc2a0b6d55f8c667fc0e1a70d\ncada61c5dfb2720b0dc1976545a0c797615cf339 8b82dfd701080514d372df07d2bfaf3bbc5413c6\n614daffc2d7001568dec3f2e5a8f2a6d3cc8e8f1 f220e962d0a57cda7376a435ed9ec8fcc61a3f25\nb97a61ab88832f08b0aada75fceca74b5ae64828 905e60854db0594129ed8a3674fe637167afb122\n88be1ce1fa39bf3df82bbdb732fe512d9a7a11d4 e6a6fbcc566a3166316f5781e69b4a912ad5fc40\n1fe2a38c519066e5b7c4f4beeeb199d55cec4686 7974a4565262379b7751dacca41dfcf95a30f164\n1e1e3f2eb13f95ec7750cd7ddff940a4ae905ca4 2be04765f975133ac2748be34fe172837ee446c8\n976c6e9713fc7a42a062f7ac81979423559dd6f0 6aa8080e8b3867e3c3b1542d8d95144a59f48271\n4e3aa3f38b7146abf964a124b385eb3fcfacbe4b c8b69df34bf313adf188de4be37b80d4003498db\n559061b59cf63c49f101642db21a40e8d776cf6c a8d33f7ab05477d51d5659ecda2985b7c90cd951\n8e47d096c3a9044a2dc6e02c24420d3d5205d844 459c5080b3b2de2a039d36eef41af66ff3304904\n090f593930b721c869220bacc37a57a2bcbaeaea 7be3dd15a4c3885499608fe392649281c633f2ee\nbc5bbcc53daf5a17ae0cd3137fc3485c122e52ed 56ca9151c2c868374271c17f0f3660a3b94a59f3\nf66ec0abc84fe374ab625cb3bfcaeb2a0a6d42be d1bdb1de05b4a35249649e04fbc637c90d1f2747\na61df3bf0ccdb6ff21a97d3f7f4e8370fa928bde 868f363be7b9f8061628f3c02c95e87997cbf749\nd293ed0e74e4a40f0d537f527eb984e64dd3d839 79a2e0d1604f5f92455bccb7ef4c0db68d9f835c\na095c6d12b783f0ba77dfbd455909ed3e365e5c0 1d49c1ad0fc9fbe5fc6f731c9e68ab7461de494e\ne6508444e6c3241363b0555a5c794184d2eb5e45 60c8f617d6434b99d8ff0d3ebceeb01d4518e578\naa1636c663ff4976e829c1ec518a3548cc93cff4 9519306b8266b83e998cf5c65f4e540c68e81792\nc3a1d8f95e7ff8bb68f5bf338f407c8936dba7d8 9f207300e5dfa8a57ceffee0f1c1703f4f99cb93\nefc82370f2c6e2f8338b3895e69ba6a488d685b9 b84a18c9c58b8f677299f912e452466bac6356e0\n438cbfa213c229decc86fb19aeff81a2b5b0df69 a42831d38c072d4eab5b9e6e9e4070aa775ab938\nab483efd43f2fee7756592185facb4c62233b6a7 57b0b5f6124211ed66c419aef38a4ff044ef13dd\n1cdd452cd2c82977c3f2839548a978bafe37994f 18f5e2149f29fe850c7f95ec3f2383662e06dd9c\n7578b13c0b8421fcf7af1907a8620e38cf6fe63c 10b6c004d662fdd6947d68f1a62e23d9b0e2b7de\n7b132907cec2740669e0ef6896d6c35faa24adee 3b22f113dc284c852d8a3e17bfcc311cca18aafc\n7e88e12f1f13fb8c9c767b24e0795351bf3d9867 3794ca9014943dca2442438215848fdd676268ba\n18ca37525b4b80cb5a215a9f0b1fc3f37e384e43 61610df5ff496e60bbcfc1877aa4431d3bba8e4d\n578a21c2f14640d5c147fb73fd450451415344e2 02e70a98ff8dba0aa3f803f9701e59e0ada91e2a\n8332b40b850de8019bd486e1146bc9b972412141 e39349f90fa5d0b6676007e5a782a4c1d89d1326\ne1e3042a5ad30a9545235318fd9dce6d6b620ab4 7294376870c2d37762c362fe52821d9688c5728d\naebc8001ffbe9e4364b85bbc618e5201b4158634 47cca2fadac2f15ccd8ecf25c62372bd5e0fe7e6\n76bf0ac89d6e1f96a3d832fc8e47b58bce5ca079 3672085a520016dbee1fa22af6d505d72f80c546\n1784eff8e2f49b1f7c17ac14bcae6ba7c0a04554 0d73b2d6c1d6038247dfb3507233e7e4408c6443\ned47e89f649f3d4744b5a13eaae2f61c7b8cce11 694f6dc1a4cb4e2225178ea7dca28253db365eee\n828d9e84ab4998d7aca74ac02f57dd2e683b8689 278e122b0eb50883c61dbff706c195df8eb56d2f\ncca460dbe81ba41b2c310281677ff5fe110c1147 83726946ffdd9fa392d98d6fe0ea7d606560595e\n6ef0a57834fbbdb3e95debe1f92a1965c9e8c953 1356edc518beed4b9ccc97edd02f8daf0d8cbe00\n6ad09f9f0eb726f5879b1207665d68fdd43da0c6 f08f41630f3d8806a4e5d18428988ce1a0354e74\n15ddd7586f8c0e1e68fdf60a9740bda8f78b3c86 a72dee0f98c30768d864a05f1b4ff7e0574d6979\n36be8527b430682c3b1efdd9af6350b6f490d3a6 4ba47f48249a160175e52715d6d45de52b06e032\n571fde5c4c45a1acdf276da8638894188536b4d3 6b9661cda713dca788b26e7a2cb2c84ae4a8b613\n93db6d88e7fa6b063a726d33c3f44f0c5f5e935a e7ea8ca9a15bf71cbfadf6e46b8508ea4ca5c14c\nca73b9e6a97b4f878a356b07d5301a08b10a63c3 0956e210fd49daea6a18f11c5758d0c15510f48e\n5b569145973d308d986acc947da73c856d67211b 07da31b277a9fbbed48989af5a4450a2a241daad\n068350a66d769daeb3ab0fe94d017eaf60981adf f67ad685e1f9c2fac12a30817fa5d9b51278d9a5\nfe37fa325e7c564b6f3bd7d1ce7e91f0a7f14a2e 0a48bd0feb1b8c800e6a4e06f9e0cfdd219d2c40\n80546f24b2ad115346a2acebb6a8f4593b5590c6 3e7587154489b584893c6684bbd295cb82019f4d\n684b2d1a041a97830337a811a42a64547f79d91f 61eec512d2030c01d7762b3f6b250f11508c0daf\n463ec8738bf6ec620de2844eec440f7285caaaf8 e516e321b01779809ccf5b7faeadced9210ef02c\n4cb7e341a12d69c90d796996eff4db37da68b273 2a9e4d58634b6f3a404671bedf904517cd25113c\n1ce5fe399f271a0e8bb2d81304149f214b5df24a df79d5de763331c8fdd91cb67856d069351cc46e\n7ff74eb31dbb40892387870b7f2b4df7e7ac9830 7886e8287f15602d77f9d0071b1d2c92b7065291\n0b02127ae15bbcaa16c6608f47c3e776908ba459 124b08b16762e0e691fd8e61dfdf7370566076f4\n855863386f0c9405458086aa49569d3172c06d97 36be6fe30d7e4f1a73cc6f83a4fafbd6a95057d1\n3417a0b1e3a5e32f61bbbd26716a0b24e3bbbd8a 84fe795e4573430cdc4351df994698c67a39e7e3\nb4ca2aeab0368b34b00a68b5cf736a72dbc1778d 0ff09a76b31fcada248f26b488eae6f43adb697f\n221cdc9567444df9679e862582e6ae6db06e974c 529d94d87e570135e7a07de8eeb3dc5f81c4dfb4\n4bac4c43e951c5c7d6bd2ab538e922eb7419da9e 9d0d9162ba1d2cea712a21c31421751894a9d7be\nc101719a895eb03bbb828fede2264a472b7b398f e18b724a586ba2641802193ca8b672a26d0826cf\n50d18b7524d8888029bdde5d1e9a41db96f8d0df fab8f4359017c47e5ff91e40767cfa3019bf9d04\nbcb7e38ecb39089676a794cec2df78dc7a253ab0 7ae3e6338f7638227e5a50b6749410b3efb0deb0\nd9683275db433cda341ad6e241c6c4e7e9cf92d7 4db42ced3aff2384f6347fc08f80173f80c1865f\n6194164e40cbb21c8cc7c441acd28ac8871f7cd2 8dc70e2696135c03ffe7c2d50a6f07395a616092\na5a63e5d01d0e425d00302500554bd7cc5e1465a bec093e1cd8243bffaafff8efb3a33d135ab16e7\n8ddc5e0a93597e983c65d32672cee927c3c753aa 14f493974bdc520cc7aedc29abb89c557826b586\n82c7376ae42013ba406479cf715c0791a6cd8e61 24424fe313d47838e116bedb09b05c83bd522306\n69d85011ba055948ff25146bdb8654685e50b5ac bbcba31e518769fd8017e2d21815f30e0b4943c8\n7cce253d5a2fe648fd55e0fdc503e0ce0868aba7 622b0966e6e2998fd00b4650e3bd67ca04a3561a\n60381d83ae43733ea792fe80fcac08a8e62b40cf 93d08b8e50b3439aff01c8f0824966339640a3b4\n3f0e737ffd886a673416bcbe7324d415e2f160f3 0648f7f39928fda9d1f5114406ae00f81c35b00b\n96aa79a88ebcdd9114c70b6efe9b47249c3df448 4b25759ca8f2345c3b0c29c3881fcf84773d0b5d\nb9aa9b1e99775c865c547212411ae81970636e2a 7c7923a765bae9e2dd3aacf87cbe0539f15e3a45\n9df7318a83f3d4880c4268b199b445eabdaf5fd7 c5c25b2f20a8f529ad71f96f6fbfaf7f83785de3\nd6e2fb6d5417d227353c3ecd4bcb2ae4385f1b59 a5e2bde8bc42b59107c342632977d2e2b0941781\n1e98c3010c149e1cea364023779225fc9ba4d71f 4f537d9a8935a29c11596120a30c48249344bc7d\n20137d326b7a3fedfd3279dc4b46909816baef16 ff189d62ea28ae032595dcc2e310c0559d943cb8\nd573c697f1fe6a8bf3e327e654192ecd6c81b355 ed4d3b1ea773bea278f02d11b4bfc8f30b51e2c3\nc4e873345ecb1ac6207d682d11a0bdbae452e35d ee5b05588a00b752c0ca7252870604aa582c4c53\nd7dd9707595e1095ba34cf235244d57224b9c6b4 e0bd0c78ad694b2e39c27ca67f647eafc9144ce2\n6758b302d4ce37aa94514e539235b396d8308bb6 1e631013fce8832caece63fe98885984645b7d27\nbe2905467e767c6cf7bc25a489d0d5bb04baa742 69bc59281da49bff42e1a606060772351ae88be8\n49ba415a70adbf25cf354d207d7b8fc973a14d30 7a7656781cd43c963d9a16a2135376127476723c\ncaa40e31aaaf903d90ede4fb0fa6c5b7cf390bb3 31e778f3ae72610504ab71edda19c50356060979\n37061cb2206f56e9b1add392f181f3b9a449d80e fac363a27ed1d4fb88bff9786276cb9df5433a47\n6ee4c8491810d7cf3c476d5ac9363839d317d682 9abd4cc5a8aa2258335c0ed745570cb4e6fe67ad\ne3c8aa241d951c3a2f86ce1784f390347e0ba7d0 e65566d0224a2fe6ec2ad2f5b20dbb6c682ff829\n2300643f3fb139744c7e6e105856565cc121e311 c339b96dd3cac2a289bc299d8242c0febf0603d8\nd7189e0694fba164adac4b440c38c318a248545c e3ecf618e283ee4644b64502cf04575fc0214378\n68feea93c3e925aec494b774dd1c1afa230bae86 d8da51a41c369ea7c730d9e2a23cb36ad2ab20b7\n76e8e6e8944b41391771a66579a721d156c5afa7 b9e074d222eaa8efeb731a3861d34b5bf34397fb\n280fd8ab9b2d6335a1ca1c95c2be9e14095639d7 1d7eea29b9282dcc802a06bbea0ef87351bf22a6\n613da7879c74030f041583e00567538fd705bbbb 204d11476c70cb57f9ce5ef3424d4222f3b0580f\n4799ae93f45db1ef46f55f22df4eacafba1133ae 5a0bcad401688e5d327d929123d37c8cd9fb82ef\n3ea46b6e5efc6cf9af8765c98be9dfb092adee2a eecb6fb1d19c9ef2f9e229c82ea72661eb16030c\n0b54e81672cd778de155e0119d65ffa84ced51fc 940bf302e77b354f09ca8b9a7ca5f29287a5d133\nf8229dc201480b6dc7e8ee35cf762fb84712ed63 95c5129a9d957e7b1771868f39556f6ded1f50d9\ncd20b221573d6aca29e082edc5befad6ba04a3ba 5f974b945167e86b664889870b0db2541ad5f41f\n5ce1d392358388df6648b461781382723dd7ce59 c090cf6c37af723b59152c1a887d002ba08025a3\nfcd7974b9f361234d82301785c8a5fda1fc8a9dc 48eedecd1f39ff31a240ed4f169a49e4447ab371\nd6e0a6255b18d5551cf408a1e609e99e3ebdb525 4266da473c54d62feca7d8c2856e6da3791b67d4\na3d9c709fcd3cf4c1298662fb58db4427b177bc5 e2b7bd72cfa39245c6da46565e7f8690b04d91ed\n4064945df8fcaacff4297aa3daedf8f814ff42a3 5e5bbf6271d97fc0a348dc74474feef08700ca6e\n1e0bb6d654dfdafc6819c792ec4bc855b8ce5313 8320dee0b30a3e8d264a8e077c0b92f090cdab31\n51b9aca3013769609b41491355754b940bb6ed5a 9a779fee754f0eb19a5a90150788101e71782d6e\naed53204163ee8f7e9872f725ac1fd1d771b8481 547eed1db083e4022c615cc0b4a357e3fb23370b\nd216b2eb243e139195803ed2fd0fd2cf6210b3df 8ea620d775c9877f2fe00652749a1bbe3962a539\n7225a94720b5b4473a1f205130f6c38b3be2e1a8 33c7102b00165cb1ba24054c0c294f1ee5c4fc9f\n70d986a0a3dc8432a60efee1e5c587e09dadbd64 68f73bc8fc9090d8ee80c318a61d8491dedcaa5d\n699809b01dedaab2c688bd9172db73b0a6d17d2d 530a73ba3e9c4b8e9fff3acc43abb52c71c7af9a\n227f2869a226df4b53a749fa27d09cc7f18cfe11 6d61c3170f8c8f0c3063f9f0b6dd568c56c768b4\n085e1834a6dc0f7af2dbea23347c9749af111f3d 0a6b1b20de9a12e9fa48116e74e4811c6c310d47\naf29199e62c23fbd89ab7cf30a1a50c3246ce446 4ff6dd71b4c59ee6e7a5238ee0a9fb26604d2ad3\n20caadce36b8b75219ba4ed50f3420c0036cca55 8f62f8f68375a0e310463532fbfee9798c6fb738\ncef8e4a9c314b0c5ede53c308a1e300e0bbca58f bd99dc05f7fcc99afdedc821152c77a4c8f26bcb\n3b70be2832c8a1cc898b56a3dee5b20e9e06b694 0d35406f0a47340332bbbfdafe3f3af7e44ee8b5\n34ca7933697efd2f33acbbca3e046ff9b9a29fd5 e76696edd995b73681f8bf4939b54e9924bc7333\n84d7d1add2410a0d86ae40547b7e9e9913013a9d 6678e0fdf371c8a35220086a4db6d1953fb25bff\n62369f8b142719367d3199d25b0679fa38d83b36 ea885a3407fde9f0a6d3652919a6d76191385392\n091558ec841d9600e3d44ec36ec1f77684c15346 7138595fdc98962f1be6f16fce9bf8fa3125a69e\n8ef07b248589e7dd22978f1def679ebe5163c85c 991c88fefc5ad23d6b258ac8af42e9a41a17d490\ne6dff87636f459226bdad41c58b6855a8f66f4fe 46e470ed0dcb5278ce4305d307a135fe108db2a1\n8d849653e2a620ece799a0a4af69a0a315eee74d 017579ed0d6736da922b32084d074b6e0d9b1c7c\n45257873ca89692300e2c08665b740e14acf29f4 a7d1064bd38bac91a2623d83a25e492b85756885\n857f3998c51b3e234f3b3dda285a3b929da71e89 174ed9bb23c0a73ac64bf6c9771c667e8b6f3422\n3af4a3afac3ed8b6dfae3854f007de4642bee046 17fef373875711cadc79407f8a04b9f3d4451c32\n148ded9fd52f920124712b75fbba3bfa70d933cc b6e5b6d4335e59e0f486f89843a75df4c7305678\n67188564b142f2e7645190e75793e8534adfdbc7 df84e87ad16cc028fb7dafd64722b632b7b697a5\nd1ffcc5eee72b0d8bb0176ed691aca4fcb37312b 18691fe29cfd763353055649fa1b0b48fce742e4\n6194f4b46e2bc62600a4ba9d391b5a14e807b8f2 e445ee1da6648d509940be722cfd443560d373fc\n9ae9dd03c5a639e8f0f3f593e2c9b77f35d0e16e b6360e2f6837ab7409fad57a8e052a0ef241ec38\n46f7497b62028468afe0a834a45251fde42e1564 ddce9063c65d63a91aec74fea0e9107be791a739\n097853cc2bc6bbbbcd394a618d824c5c4721f8dd 928384f1772b40da95208e0ae58143fc11f27b30\nd1c546bb0aadb34909fc28c3a4949b6d169880aa 4491e582652080d5942ff82e83d2bc2b3d6b2371\nf37cd28da073dd7cde15292e558db43ca3105079 4bafc48e794b329502a20a76efe1ed740c60df70\n3fe5d3d225694ecfc66070ef748b75be008be6e0 1e12261ef08950c0df78c3b17d58a11b7c629cdc\nf2993fa4b653248c46bdbe47a0217f69f09560e2 1dcd8dbbf642c34483d044659d8c9d77aca5be2d\n6a000da0b374abe5d480be24be5f15f615d9d4ea 67e180872d1ba532a85b2f093b217ed5216c6b0d\n37bc0380c661a82bebb42398da09449ac9221705 6cf26228c3737a133b67b69c3e689acb16b09f25\nfcd87f80de8b550240d125a6851ddecdff5fe026 ff03881eeb8307f7f854427c7453879b25f40008\n0a82a0dcc951c5a83f4506e423c4455d1fa2340a 5444e4c0c41502486afaefd689f1ecbda4b98fe5\nb05d587d3fdb048e2f80bfa9a4c5b7336443c6e3 a50176141f1271f2e37ca9ca14587c1a1b8654ee\n7fdd36031ba2c2000e2c9d8ebcbf113fca2b8cb5 39cea3b98b1ef667f6376de816f7796d953915c0\ne65dbcab8d6753048d6d3f3b01a2088cc56ba508 6b0b53dffe531b56a977ced7cdb03a7a5322f73c\nbb705c21dd490e4c3fa95a65e4b9952c65e5fef7 9c5ee25e885e253861bfa25cb3f46f877db80a59\n921f9ee54175b31333305fbb2bef8efb4a6a54d5 11d6bd3767770fb05a6ee0e30bd6975df9955f74\na806cdc677f1b039343a651414d1f56ae005fe0c 922f627b3ff7020d13dc6944f8309bd08053bd5e\ndff0d7b22e0914c26a10ec4a293747bec30d82d9 21e1f3b36ae4467773bc8640b8f2bb42be916b42\ndea3d2b4c093461602216f85059ea742f9a33370 34d448f9a959c06eba3ab15c03a38b5ce515f3a1\n514919f486b5a32b73030353d36a492a756334cc abe77f102b96fa436266bcc3124adcf084bdddbd\n5d65eadf1e45614d384eac478a6a770f2eef8905 a81a32fe23804ea6d9a3b7af2516795c37ca5a9c\nfc634e53440381be97ca025bc6147bb8101b9c9a 34014ac768e5c9f21a0f97557ea410212759f30c\n0c74d2542a6ec1dae1d97ce540b03456a9fa4819 306c93a1d82ad772875dec82081b167d93194bdf\n8725f99ba630f06fafaefe7e62fce205f7b10f69 a77ec479008ff536fca2ce24d4f4547dffee12fc\n1b4c068b0bb0c83feec6bc1212f7814dcdeded2b 1e45509732fa0ec4d7b9aff5c6f380b709777927\n2f1ba7f8b4f648f44865dcc20809c5ad406b3f08 b87aab20f6b8aa9499ed64b556b6746ca4c9d14f\n4cfaa7d9f819f4de0563b039ea254762c90b97c8 57782e38a90ffb2656b74fb56d36849256a01323\n8acae568b4fef0e1af2b40074c7437c04c2bc2e9 e126df8ace905da5beefa6b1b0eaf5a2b1fbf510\ne95dd9d38c685bdac03a1c787a47bd13b3ebd00e 7e674cf91fe9d66951d5218ed3dee2c3d205e710\n53bca276bc3265b99bb81557fff49a22a1e5f9c6 ea97426a98454f5ec5e79fd41fd6e712fa11ef70\n23ecf67eda454f93efc3186a3021d1a279fa4ec2 b649bdafa2e13fe21f762b3950ad95767ef567ae\n4a3cad5b47e682ef80206d290134b76d9e15b2a2 a9793402f6fd98c34ff3d2ecafca475fffd8cd3c\nccb9fc4e3febb199d1ff77e283aa45d22b8c0e9e ef11f9a8d2b863129c3848f80b479fc2980f143c\n0017e94fe55a6c81457d0d3eb973302b8f423d38 2e9b19f75b39843d85b517e46f8c975f3907e65b\nd344df7dc92cc08fd5d198373d4714b87aabf172 6a8aa8dd0b5a6de15176dd15429b065b47ff49c6\na3dd082ea3827c58f9807af45980d8292c5bbf31 21f56a9a6af3e3ad5e88d4640c2052a2ca978b4d\n216c88b18265fd21310bc474579d56f9c44e4ed1 5bdff54c7e5763f7378837d28d3ab873e3a67279\nb94791a806aa5ea2a799cb78d59f5882e52e38d2 5d18f222fa86cfe9586ba5dc966f31b48371cc0e\nabc0c03900652d7da35135b6597599073c3bca08 5bd9d007acfaa1708f432181cef4790dce751bb9\n3cfecd9e225314690877f0ed6fa25dccc3689113 d149fa0e523951a665fa30f32d02f880f4d3c0c5\nd63699490e767132f6ad2f32c287ffa100ccd459 604ba90f9ac9a2a7feab2d58e6389e11499dd90f\n87c433df5a7ac33d97a8b3964e16e1705fed1110 b1a7a5e2665c15b72f18dec8ade9faa71983f308\nf7d3aa2c3bdf87b3948a4728864a30f4f78142d2 1b993d35b5dc7b75761cc76d2387a683501eb812\nd9324ff5c82fff251562c7c8d321656a8427b4f8 0538861a564a961ce3ecb02d2a8c255e087d458d\n44bf58669791b454eb2d67ab01918cb5b06d4d2a de7f0fe80acf7d7ae64bc32962a9577539194e60\nf7ab5b18a04f368e69e9539bbc788238c077cd64 4ec8c2e74bbc63f8dd889a83a5e62e214a0d4928\n40b6c5b6d5649eb470bb7b94d136741159c95186 5d7bb39f9f3634326c710c6e326ee2a47c38a9f7\n01a06570b631f57b7f7fe70108addfccda19c11a 42daa57854cea35e2f590d2a0acb48a2d3ab5f5f\n2a97a667fcf6d47345319f37b9ef51fa72666ee8 a3c76375aab9484b4bfe168dd0a3a90aba54256c\n662348f3e37b02727b49da26c9fd7ab7df2bd09b 97b5655c1c3ee0205461d542b7a53782daedf571\ne5da8a134e6ffffe9f1a80a1f394f7ec0ebea2de c89cb03546e5b25b5ebcc76d0d039e6ec995af85\nd6a3d6ce4d6d3a54279031edcb5c94f84003d719 ceaa1393aaca4887aae086bae8fb9fe91423a6df\n7389df4d6c02dd2b41962be64244f4f69cbba266 300c0d627b7343ba6986d6a00e53febc3be3c268\n32204776325ee5718f0a30a786eaca427249f80e 7c98638a782d26721c552c485f3e5a640e1c73e6\na5c07097f7b055b3f1f108828684d4a5269ce681 3a5dc2c8f016c55d62156f28b9f00d7c45064275\n6b37b232254b7f28a93ebb53af4ad6f07b122fd0 113cbf0e8abaf1e3788f157414b6d2f897e71abd\n537f4dc6bc363b164fea4ef2ce237044872e2c39 5713fc3d06534b61ad30a8013e3208677b47b440\n99beec3e0742cea5b538efebe01956f237670932 e34e2324056899f7bedf242194aa4086fcd50179\n7051673c905bab7d4e8d0e8c9241695518608063 515b87e82a4fe0581c3c4901ec25eea58bca7be3\n2f3c0a042e251452dac3f31c9a4f165f603d4295 1103c25a8d0f59608bd4443ad887499e8bd386dd\nf2c2d5079d8ee5bdd9e235b8c962f201de449328 6d9902b66fb19ae2b29bb4648116d8a916ce7163\nab0bbce500cc3f7e5fdc0565d583d8b15d781cdc 287bc20b12ff848a8438a936637ccc89435d330c\n048e4c648071697c6dbaa21e2c677dc1fc01fc54 0481c646c9abf687e8c37b58dedcc901f910ac26\nf4312d2920983763cc00e1d85d81abc02ab04e0f 3f0dca969e2c930e15e1c82b8a4a5e012af43ac7\n3c55bfcb43b0dab747ecae78f58ba978aac61384 d577ccc8d38b58abed92ed4d65416c67c5814299\nd19cc7e2a75aa4d1f461f17a168588ffb0ac4274 5957a2051ef368be0188f984c6643ba4e5fbaf01\n9d8a295f1ab489f276346f60f3e3e962c2ffccc3 e1b6df6e179129de9f1370e6d05862b8d7ef7e16\n866436f2a260a15b5d9eea99bdbc70881f17e30f ee233d85f3a35c62a5b770880712fc4685b21110\n6d06d6a467b3b5864443718b8545886457cbb234 7176e5bb597bbacabe2a01fe32297dc7fa6e0df4\n0fcc92d8f6674e8807b6948694bb5c593c65093a 62c1eebb4d921299bd95afed6818c13d586c5ae0\n4b7cc960b6135a021086d07e6ec1d193b315830e f6b2b0f4e0e6bcd7c83e16708ca247d7be585fd4\n69ad85c3f984bbbf6ae2629e34a63e53b3adb53e a6f10c5af83d3c127304334e0c04141a1337037a\n6dfe3989b63d2646aabf487e8e862efa42b46ace 1e2e77528de5a15e3322a9abc13813883ed7a586\n8fda1d8cf84e7b14eee4da3c2fbe8f5dabb87e0e f214264da9722c125e37ef05b9147294db0e3486\nfa04755520ebdb1208b9bd810189d8390b003b68 7037c4def7cbbe0b3e338950c1f2007c734bd141\n071d1b9c9be61222f15dd3d0d4230cea87275c02 34dbbd3481a2e6231253f38e85041586a6a13bbb\nf008738650da2df18f8f2108a81cac9c0d11b4c8 2750399332f6aa6520a8646ef02148331dab7228\n13eb7947e520be362b8f775577ef93bea3db807b 17ad2225c484e70d330b288f326b64fb1d519b18\n300829ba7246242e1f9a50f2694ba2e530308f4b e0be45e29453c64816d70c7a7036e0d43090758c\n0c61371929179ac528f80c3aa1b70edae0cfb391 92debd9e88dcb770537837d401b16d242513218d\n4841c68ab6c449160ae8b1944a95e06dba56c11b 93c47a4b03067949a6b05fd732a5e9add8b8a153\nb43abee645c8ff9e4ba1da8c367c3440f02d796c 755a8c12623ce1f8e72c7760f04a0748a7f74ff9\na34d07502021f037a989bc5852071eda1b00d6c4 65ed7b7a5758939406307af5fd68b7a69538b490\n75553e1d258bbeea3803ac521f64d623d6da8ad6 0975e0afa0e8e6c43b492ac1fadb9905d3d07eb7\n0737ed2c92a37b9b22f80e66db710e781b8c0132 0de1f4ba366554fb85a8a018343cba1d5e8cbd59\nc3ab92161354ae2558c7e1d290e49081195200a1 fbc742f93cb73932ce6ac47535626bb2412f12c8\nf79f103f6a88a7cf9c3c150e157d44d07d201074 669de37a2cc370fda1a8bf7ed3e8f5019a0db79d\nc416caab66ff98e882cd7955d457205e7dcae04d c955652a4692db817ce5fbaab0a7724c8501ba5c\nef7d3a20f35dcc8ad166c67c564388e8885208d3 1dda1505986e691e1f1cfe81f197831bb8726a56\ne1a350df1469ee381585ab9a3eb69e09bf388198 467d7af2cd9dd17c10101eafbb96f4b1d9a0b361\ndb72532af5c052b9b6738c9824ef6fbbf2070990 37ffa942abb2332845370eb9bc0ec5bc1d7a8a8b\nd5f772ca957f2acf947db5a89a5e5dd2e66b057b b6c25ed48c96fb0753fc795c131720228fc3634a\ne8cd9cb216f1607d02e4f685de13930db29cd666 e0990a193420ed1aa4033c2d4085d67b7230fb6f\n6191084eb10503f3bdf40ed0f4636859783a3d7b 0839b36e879cda4b098c54f228b341754642ca30\ne5afbf0d1a330cf5b81be270e9313703014bc433 a3a2c983c019b20fc5c6676bdf47c7adb913dae5\n072f80af9a6a573e53a6003b5ea3c95d70185b66 f0e812ae149bbb752dae82a962c8b230d62c83c9\nffb240ae54b3faca1ab66f4f532a1d6679ea23cf 157d34da629be336c316f318d85307807d132662\nd34db8c2c992f253ea7e9f9af5d0449f6c14515d 15b69f02d8c5b0b3d726bb0c09b6645a8e67d2ae\n5cffacc172810abaf1281059325da2692bd3ab22 24f739d423fac08d309947344a45c7710f530237\n4e4f03a207e028b815043b228300dc2a8a278b92 9b37ccb03e98d26b7f6dd55d8d49b46fdb02922c\nc96c640675225649be945f6e1afabf389ab9356c 1a78e01f6efa9800ea1a1be047c9f71e3d8df06c\n7807203cc75635d4a23b1f16b38e9e8fc110015b ed92aff64d0f0e385734cb1e4b1aa9b09518268c\n41ad4dd3ee3037c8d75e275a4ba7a6cbf117165b 87056c79cc826ccb2d311014a895544d7326a8c8\n27df53e1aba62f43474d0938e437a5f2fa460f48 6b573632afe3339739d98f62d26eb35602c35e92\nf1c70aff19b8a4fa95dbdcf7734aa09d0b4f257d 817bcc7f2d598a87cb512754c8668b1378aea3dc\n1a9cbc9d8d0d4c38addaebb53fa1dc06cccbfb35 9a168a909ee029fccc8d197b1dfd81996e684f47\n2724c60a32ddad067b50957a5ed6053fc03acbc2 e26ac54ed7be350bbee12d188d70826bb74b457f\n7c0ce54c3745f37acfae204a4c2e5d42c191b766 a0d5d6599941fe7cfa6cb8da72f91be15b907751\naffe53a826796258b74c4b591986f8e40c88888b 7ec8069abe6a5038887f6bcd44c0eac3f0dd9587\n973756d39ac2b311a8f503ddeff8c5e57bb2e151 77da499b151a7f9b9e7fd1b4d7001f98053648e9\n84a0a288dd83bc5c2a89e921dd5990ee80c99b67 593e6efefa53494da014ac59795434d211e5ac72\nd1f6dd5d51ffd943f9f49dd4efe810828bc400b6 239df3d6cad4a6d8b18f67b6d81b0a9b59cc6c1a\n34b5695344bce70aaf5c4f2cd76dadf463fd5527 736e113fd0b4ad17602b1deb4ee46137d595c6c5\n0f6e79b29b244e167df79bfcce615e8afda4f482 3546e075ea5e1e09e1947fb7990f9d28a905184a\n487730e63ba711fde5a25bc8b21bfdee846726bb cb72975a61bef114f40e51aaa40ee5decc1c8503\n8e76f77f1c43d773965ea77172e6c37c6690acc6 aab52690c1fa97c33ab7d63834e7892b3d24d449\n100fa9a8f35c24f429a5c7c2568c58d1e73f9a58 de3426a60d5e6570a0d44cb80cb3efe079e5f1ad\na15e7ffb4c4d15f7c08d5932a03dab007097854d 25d22e6d1e950197f25b93d40e8a4930afb83aec\n8c58056bbc263b8e8765d1d70d5cf7812b8f224c 31de8f72e4162e43ff1d1598c771cf686c56f4ba\nc1eb7c04a50147cd861c36ffb50ba5c1667b826c 7749204ead05ae5e44f515df1cc22d7d4c51a3a4\ndb0e7e71df0304b5e97b8974e2e762056ca41832 bf322a8dc7051c95cb7784e91dccdafef6e6d37c\n0fd66bce99ee31422a34911fce72888bc6811043 ba4e940ca14c738dfa9e67f898811140bda2838c\n0440b8d023834ffa1e498abfcdfb2972a7a5151e 25285515ca18816f73027825f603d065738c1cb7\na31f5e4d8ea6edf129038ac6a7157ba5b705f37c e24ed906e37e6923c8f1275764c32504566eac79\n198bd5e72cc7fcaaa748de0dfff0843664d1d6a3 65688a265cdf35790c9be801f4cea59a2444329b\n1e5aa8bc74d9ea0d12a8559307c1e195559753a1 140a36ad28896797361fe3965a76682b639e4174\n63b0d5b1159e840b98c66fefbda5de6027a22462 7c1ddce5c77110835b7716b97b10270ba0d6a973\n2d135969606122ed6ada278b639329c45b94e4f9 89296e025c26138fbf859ffa369d807b012a7e31\n426ecd3d8fd5a172becfbc727b943282f0c8c157 f22d60c122a9e3e584192a7c1fc7a506a8d669d8\n31607cdeb9fc38ed8dcbfcf3bb55fda21dcc980c 4ff37ebcac51deedcd4d04ac5c34c4589286c106\n7ca47bebd80331b779da9204460a6647a4c5d367 323696cf752c47d77a269eb61657fe61208e0b97\n7fd233f80695352bb3db0f35ff5e6758c42a2f0b a25da4504623cf2b25d1208350cda81b8074b10f\n992efa419cca32211a4993c1c695210220a5298f 6043e408b12a34e4c7815396ecab68a26d2b31dc\n197275ff436b9e5dfb43d0dcd6c15c4084956df9 6036f04430b51b34be257275090509268dde96d4\nb6944098ae5a6474a13b4622e3b8ccdb3853dd73 5f381a67ce2c8d1c1895a48f08ecba218e023474\n50c762ddc16451e652352bbeafaab60e96b7ccd2 5f1bbd43da71fa0c20ed07d19ff58a478a0735a9\n1e25c4ba725b294d5e8ffbbf1227f95563008112 3960adfe43cb7e217b96ebee521b81c038eb88b3\n1d2aade0cd6aa6e70f9b61b160aae439552fd5d1 12030ad232822321f20aa31c6efd723960d6d0ba\n1e60a00891eb9f8b1a0edc281e00b52ff11b9e13 6a8c1f35d1205c596bf891ac4db0cd9284bb79d0\n5f411d460721c714cdb70bc984dac16559a61f9b fe84b314a9831c6063291b26e5f716ebdb4194e5\nc01f8aa3cbeca50c5a9b4a3ea978a0cf69bf3f52 4f5731c48bcceb4c2aea45aa8d6247f4ca05854b\n99e0ed12add9fad0e629421aa23d9e36a3ec04bb a8f4b579b071e52d23772d479a89b384520c79d4\ned0a1b0d8ad4f11447f69fbec72bf67441999dd9 effcd34a4cf3ea47a044672c5f958570058d7d68\n22520b470a6639930ab2efccf0b8e4005e94ac3b 22fc337170e1f15a90a348fad92e2779f793ae0f\n6b11af7c78aa28891814357e55aca91538bdb023 7fd681dc2783294357e68358d4a0d8e0a97b5a63\nd11351b6cf84ae0e673a8f95996277d97f17ad9f 83fda0686025f0296c5daf39c9a7032794392eaf\n6c795fea74d195d6f40c06244ee8ce762436dda6 181f751454db956736b9d48ebbab9d8f7918d9af\nce939270c0f6331017e47657b7168e582f048ae1 9f4d8e29ddf9a933e5562c984e6526728fce3e96\na448c01b21ea4d42175333d64db7b94baa5d1998 da8d2648c68a42384d820eb17b9d8a1863910235\ne79cda687eb84f355c7790c753f0c09222ed04d6 7f89bc8db9a8d9be551ba39499c4bb1dc75558be\nf07a2f8ef444076ed9d95f4c60c761075048477b 2c0221a1a3e18cc5aa9739bf8902229eb2188f3d\nec5cdfaa1cd230f44169fb9daff1436158338df9 bfa6bb5f0c4e749198e48eb8158fe714958cd435\n0b3014a2c8477c0917a8ed9770ccc2d67a2bd00f f1337654a069efa3c208609e54b69b2aca8548d5\n8d370f22a53a2d32fea9ed2443c996073be8b984 9d35e565cbd6a710ca474837827e118cfb125461\n78af89eb98cfd00d808f9b5dbfc04167ee3b717d 7dd81347422a5d5b38e7930a25463440dd8ec9a5\neeed05a87007ce0f59acea2aa38ea7d382a9b8a8 b44b895e2e4c886868a6c9ba47fe513210b009df\nd659943cb803b3e10e5ec1064bb230bf30af1b88 179b3f6e9c01450e0625d3134ace68c0ef552f99\n4eb51a95971c774873801a4053eff37e1160366a 8c098a3ac8d2f246ff121681619219864d182b1d\n0406447e43da7de1af3a64c4c770531ff222f32b a24ab4ede2da3547264711e38021405461393ace\n452e13a310b2c1604d86658b16d0eea9df833fb7 25ac2b2978b9cffff8d0b3a5fc10ca8b9cc42ac9\nbb4a606614bc0ceb05a662cb9135d3e3918894fa f922ef6e0a1319fbc4ce1cbafb6554aff77fdee2\ncd2533627fdf4f6123d3a54a56ae93bcc5df0509 27f9950a556a98e61c9fdc7d0ba046e1c141f4ed\n8240ceac45ae4a86500567709fa3d21f2976870a 08af04fa4239b50abbc88179ac4bbeb184840c6f\nd1c8c220f0dd73346bfa68d00835acbfd85f3d5d 13e8d4ef513f09aac6719c8b9981922908452949\n55a124f848c0a401dede954ea12eedd9d9cd78ec 05e5b6eed0a14528822568010b20317ef8c3281a\n003c11d33fe5d50602106c75db2858b3e419d133 671127c35fab0d8e4454b1b4cb1a9e5715b76ea8\n33576f1123bb61f35d16e21cc032298035d39a70 ef38cbd53447fb64026c8150899934f56b675873\nbb71b7d1519f977eaa28dacb40c7b1632ba711a6 d54990b6a1b99ae7f06d1859d91b3e0407593122\n1b8e7a58cce4f746a799915c29a9e16b72770cb3 df5b2169db719be35a5ce2d0a06e2f0a10a19146\n15fe36347480d79ceae624ffdab29c18d7eba80b 6d9e2eb37cb0a88b5278a0a64def7c2044007da1\n807d519a93c71c6a58f8152080b6a2514a385019 4d8806370d3c6a21a0c643ae7f12bade2ea4ba48\n5657206734cd900dd4ae4c8e81e8bf803f25eb0d bc8438712a98fac9bff30e20de06b23883123d1f\ne988eb6ec60d8dbe9095981ae6efa9133559909a 5ea58be45f6ecd8b66abe4b652f337508e8f6191\n3dc20e5b372fc128181053d93d184ec55a73953c 79385a843962ca2923b695305a749a232e31eb4d\n9a22019fb6c8cb492a0c479ad3bd622466ab0306 b50a6279ca97a02c53d903d4332b9a7de7f14064\nab745fb318001842156c175c80fafa97cca1be36 39476b66c62c885638dc1b40136604f1d0ebf956\n4253b53297ae2e59f9fce89049eb3b90c44394cd c1cb8d6dba4e8abafcec9d7ad90a3185eebf9fae\n93959f1c88611dac33a7ba564990f585affb945b c56481a97fd0ae3abb2466b6ea1f18b29e2affe9\n1fcb9666b76f8c7f7a6aa65090cc7939674bfb4d bfc70457fb3fae50d871c30865c93d2203857e45\n5e3950f0942b1d9ebe0fe76e9e1962e0c7bd5c96 643d8175ef07d1b066e12be0bb68260c0c128210\n457f9631888674fdffd5cc260dc3c8d4ea919d7e 7433a7f36ad67f7a6bed1bf9f43f976cbeb3fdef\n4c643b5b36c6ccaa8d989ea37b42b24d91fc0329 f8c878256e6c731d18e52e95f5c536c479f7881c\n4b9f72af272c95e5a34c83500600f19f20341706 0aba075e490ed4e8d5bdf35ff47e59a497dc5905\n030cf36e326e035d0eeb238a358b4a5449d25ac7 326a8f5ba168a032acf62b90ad3f05c0057f5fd5\n387566abbcc4ee93aadb61c1d256a15b6ea04204 b0acdb8c9cad56e69f9d6f2b5431748dbce4d2e1\n02aeadb592120da2e1d1695ce7cbf85514b474fd 00f8f86e11d634fde5629d5d4a38f7809b739fd3\nc870477fc813b5ab33fee2881d1c48da2f7cd84b 3214b94ae90e1be4c4e3b4eeec0b3f7ec300c056\n45e91b435d362d364adcf9bca4378f9e42c0985d d0c18b91d8b880a88e0880ca899600999addcb62\n5ed60ce147700b7b064e359cae5c36aaf6b64a26 e03210f64862c3b03258c63a2f079770d9483340\n3de826f89898fc854df21418724340ec2cc4e4eb 4d514096bd1793c05a630e9d53ec7a18a18677cb\nd50544344aace06fad2733c07e9991e762117bff a8ac8c4dc7117cb7c8565e2436aba1cdb18c275b\nf02e9fb9ef74bd82200d0cde9ffe8d1386689826 a04f7893a39e7e960151a7009c19a428f31ba615\n7d7e4cf7b067c9eccba8979b1967cebb88792967 34ad9f168ef1be1c5f69bacc743c6fa2fad06c9b\nc2113ebf3b0821a3617a9a8d86c4096253d21bd6 7047320842458de60e804b98bb6362cdf0f60c9f\n641b44aefc5c92b9af639c1fe9416c9d289efffa 0a990f6bc2a3e087e610d1edf14d5253fee16d2b\ne0b3e9177b79734570e4f4cdb771b6888104f63d 690efd7c3b97e46d3cb649cc450251bc299427c4\n90d5e2f507b4b08adfe6a601a977a8d2881c2d72 54c2e8815bb1b993dbd9c28930b43aa55b246402\n1866df8faa9ea40e9a183f5c5a2667a582e9457d 2f80a7612d2e879936af12444943c09c9e5e12c4\n6d23f411fc6f579d6d8212e3c6b5c6ccd12ad5fd 61997f67c6604d10de53cb522ab2171b5cde3ae8\n5f23221e553e0f4c5808071551bee456a9d8718a 4e2c4b9ef2a570fceeda3b6d426fe779a606c115\n60be39101b113d28dbe66f18e0e353783c33e162 6a88fd8bb9a23693d806cfe0c2c4decae5d42b6a\ncdcece6fbd87d7659f6c02d86204c6a4c0538e92 040e53d55e2c00743e1daf39bc8b0ce91bc83a5c\n36b7d4efe15a753a03659ed5b73d661d2167a91b a1e80ec5f01ca8e187f8898b2739ee60e85c03b9\n8654513bb8804b563417105d698537eecd9683e7 5ad011fbde32b3325f79eac40082876b7d48e39b\nf2f4df85f2d0ac790d110e59147b9ac76519745e 50466148f0161558e0b7e50d555645b3f7deab59\n58de44112de29f301cf980d390ccdb34acc38de1 1f12751d77e4c861f900da2bc8d91065ec862899\n495b480af46251efc0828865e1404091c28b34f6 bcdad3bef8758e06cf0979a5fd2ace47dec6d59c\ndf99a8a99e4bcb3ffc1cd47ac006e22a97d08a21 6dce8457ab69ef030cfbbae0ad169a0637436f0f\nbbf44d087cdc0d6389427482d92e1353bf081e91 495d51ad1e69d4e1171b176f7df49fe9c79e4a7e\n340321a8784f92658eb65a656ddeac51773505f8 fb34a31c0518b4d59af20d9bedced61e3ea9e638\n626dc22d824a4b9c0c27cb2602f41b14aaaf2fdb b25afdd2df672934299634c791d6e33d7f279024\n57f0e4b623657ecc515df0393df351f9ff7883ea 2f8720d78e3ec6e8919abb0ef44ab8788d73758e\na502b7d6762d73178a0ec04e58f3c04b3b6eb950 dec2ca6d220e2ca36cd917b1c8a9804365a5ff2e\ndf31e396700da7ef18d20500715bd7a5e4e93677 8be69536c79e7f434330d6ef83f535f504601c01\nb05d2df14c3ed39f501b43c3e892efda31c80ab2 fa1d16028624da8f11590203b3319d405267c61c\nbbbe531bc2fbd499f9ab87519f4f2d99dd5a7190 f089fe16d8aa67927c844068ec57289b5e379515\n60b8045d1383756ba63c7ba14d0bc9d638b18666 5aacd2324a8370e3421f69eb545ee8dd048c6c2f\nc600ddcc0b5d5a1d19429aebe0fc28b50cf07065 02a69e9e60fd80a98844c53701121dd704288641\n6807be2c0b9b24cd38c6c8775041aae28025e8b1 5c05d4316ebe26cf2b6668901b767d373d992e08\nabbc44f421f43a5c90a0e3a9e8655577b8102c60 757afd5aa32ec9bc97fbff3e73b4f6dd83077a12\neccc2dab3f4743f3f8117e232886913164e043b3 bb2a504db9beabd3ce094988c444f367da518429\n2751ea3afbca61d8308472742958f731707a2492 380dace55506b145c9907b677dcd994ccfdaecdc\nb1c4fe161e9c39507fa013a5579905ff946c357b 2640fbabb820195ef5103a7f423e04bee6b717b0\nad7c5b85360fb4948328ae60d1016a4d5a356982 11373b6b09c51b9f45a72b6ec4a889fb252a7b8f\n1ab52af270399b962605169bc18148e86d7f8d05 afe01d5df4d3bf50efde9e23d0a774c985b16b36\nc3e0e04218d5424821fe76a90b2072fee3abb062 cba60046bf06ee8cde26bdef110839e7bc480dc7\ndef997884d756dab960b3c057a3aa1c73de5c2b1 cfa031d96bd4ea6ca66630a41357bf058f12d5ad\n3bd3b9c3c78b83235a2ed0a75f51d9d4cea7c455 256dcae22cdd0ed1780594d5ff11de7d7430ddff\n50312c94db11ef036a348e77287dd2e2652e02e4 1d7c3b93f029cf44b9b6f50e6ccbf827b8fdc7d8\nb2574781082ecfa52b12e0dd01f7bd1cc080d8f6 610738c17d175702f26a16122be85db1fde22857\n0cc87b7f983975263294baf57a3f41d4d200c845 db8a668af7e97361c8df6ed1ffc285781d05608e\nf4d46bfaa419afc50b0eeb893a78c72dadb9f050 8885e1b3908f3a44b12d80c270f899901d0ace86\n0e3a52c391fd4a7b863c4703eadbd4a8e2153679 af584282649e3211a50dacfca44548d9ce9f3fb6\n7c3ffa5bd37c7c2a3f3d3010ebfbd8661988c6e6 d655d4dcc5603b0a71f8ae6e59746dc91cfd7a2b\nc11539548074f72f92d0d3284f54bed0ddaa68eb 5e6fd5a76c7920263d7676abbfcf1f831bb98ce7\n1fc6b70d05af67167c049d73c137a991bd1cccc5 b8080fa285f77b91d755fc885688d54efcf9a06a\nd33755d7f7c10c0b1cd8e301e682cbc490619a28 e7229226aa07339034ed632df1c6cb654e431209\n1a8366809a24f168770146d99991f85c3bbdb022 74b98c1a5e5930214acbfbd5948f5d254e9fdc1e\n81a36837a8ccfe93ca28572067be6b0daf17c680 ef86cabd38ea6a2d3720fa9bea62a0d806b2d483\na45c0674f9cb0b2646dc962a771b9553c3641450 9679760bd2eb852f9c1d6b833ce6c094557ecbab\n071c622c3e56fccc3b974afda7a18de9e9efe800 7a94bde7b5434553da8b5229ca6244c4c8de1200\nf38dbec486d3546c1c8ee6195a7f290f93f89359 11a76c1dd4c59010429f2e083c487f87dc4dfbe0\n6a304d4fb45cf993228807e5df0b991db3b5b6cb 58308a0a549021f06b5461758eb3bcc055389af0\n836a6ce3449ae188748f43b2232f399a6a693b70 4a45846e39cf619284e3e12871a76709bf23b468\n96397b9b4d571054fb6705d9ebb422e8c073968b c0514f7692af1d51765db86ac769823371f7b84f\nce20cd28ab303243eb9fd184167e34f73696a714 0f87c76aa00597c9bca740e6b0179d05a3e1ee09\n753bbe5d8450cb685b7e83e1b078f2d50d599b42 a60a2a408f950445c721d17be6c765880ee0c790\n4b698eaacc188e786fbc9cf39a834722e3b7fa46 8336a27a000b406852b0856d3d935144cfd097d0\ne5c8fe84b87e28bba85ae780224aa41d8f04def7 61f73c957080e9dcee8fc993f47c9bbe9495de90\n14664067d029dd7274b4ad118ebb8095f44b79e8 c2f15f5cb11445d1a6c741a6db50c9b782cae4c9\nfefe1624d89b6bd4f5f1aaf632f1b8c040233cda ff20846e291154c1e1c4922cc8310c3cbdab51af\n321c3d6d28eb9ca89fd9b0ac8799cba34e0d053c 277e5240cf1220e45b8fcf04197da51af72243f6\n56556dcce3eac405382aa0eacef1033cab22c23a bb8ea2184c1f33ffa6a8187dab49afc9f30470e8\n61b3f8947feca78b96f760f549b05408484cb564 d081716504a4fc073cc3280d67af165057fffa8c\n41e9e3ac8ac7623f548a564271c801a9d38a87a6 d15cc00c37d1553e1e81a2b40600c1212f06b381\nb8bdfc7405228746a7ff96a625e00d4e28fb1b4f 4d82bd3d9ca04467894c80c5d5a271bc5febaef9\n6a1d36672c3f6c23d477581f6bf11efaeb481513 de49377c6c82f6fc31909585d8c33d30b9f65291\n3951d68a42b094f5fb68e99fd2315d1796d6d2d8 df00f71e0db79f1fb27c314c657e36f2aa29e66d\nec5facecb0e1a31cb87f7861eb609fbf64a2eb38 31853696750991de5f489ceef519ac30cb8bdd55\n06d1cd0881d470ed11f73d9c3a5c85e1568e47bd a9ca0acf7ffcbdd0dca4f3be108f8bdfc2e684bc\na518a5a2caa21852d6e70fa53492b300288a6cba ff93cfd573de3d3fa4b03c261ec842b95374b2ab\ndf5cb188ab3ae841299fafc5c7e58220061df7d9 84f5afbb2103b266163dd13d24fe66397ba6845a\n883aad1cef1af146e4b03680db326c50e0159b73 7c6a5fedf312f653ba9d4ce7027dec5625aeddad\n7a0bb9218250dae2ba915e8e42136476828d2c11 e1a9a3b68291f915a1fa077de42317f145d50c19\n0f6ceec4defff2395aa7cd2a72b328173a57fd16 f7b6ec3ea852d574ee6eed5eaa82cd0ed8fc0480\n4fc06e566e202fee8a0f958807b6b951b3280552 a8e17c15a7fa0ee5eb231965ab6138b05c4caa3e\n76dc953c025a333e674543d2f908163ba651b148 5bd1ded2034339204d9f82cbeda1a04ea16e57fb\nfda442e648de85d85f2cbaff25cf7a3b4b71ffd4 bcb5bcf199424fba990f4080c2139003371a5806\n2eaa9fd49f09ba2c171a88a461ca7e3ca516f92a 3293f3eda15d9a330ad82d8ea0d8cc5e41f2f462\n83717c875dc42ccb71655fd88ab52a33218892e8 c7a6f8885f64c65502d7863ec785c8c9c3129d11\n034163b41ae2edf97d9f113a0d738a6f77de54e1 22bf6d02e0e05852629c28b6c080ce4eaf986686\ne94a64a9e9f3a46e2bb76abf9396658c07e2d591 ae0b0c49e0f3f8a3fdd1f23e1248f02e51a2b253\nf26401489d32f165fc1e56ec95f8fed9181def66 fc155b7c554295a218e6a075261bb3b9e2c9b90b\nc55571d9d3ee647bfb4990c70e7de11f30511c44 56e348823ae9b415d089b39037f510f4742fe103\nf453f8ef4ea1fbaff7b7c537e8821535c6f57402 ad70accf55d3cc8b5ba198606c672ca119d30677\nd5bad31954a9125a8446d798d558906e61c71f78 60642f3fa92fc2875e15f3f49ffa23182c158693\n199a0c197ab770101957e3db66e29ef66a39b027 0bbba0ed47fb52592637ca29fea69284f81d022b\n3a8378efa5689c3f02cb030787fa4728132bb817 8786a4dfef2801e920019e4208e6144c15c8f987\n600f9839b2c7ebcd7ab7a646d8b9713ad03f2f59 fa2f969312b3e70f4513dd17bb00dee29c9759df\ndf5ad1f7789d77908966809856d5965de63267db d98ae3c5212e1b7cbb76ea80372b58de4a938175\naf5e7f2fa5986a488bfc4643ce554d7b0a0fad63 80e2a7ce6a7013fff887c2e03434d37f9f99471e\n97e0130a8677bfb6a881570685ce07326a789d1a e011a929056495ef46c90e11004601bb9dd68f6f\n0311095fb3f0fd9c33cb5bdd5bf26b07756c3703 ad37f749fe9b46068a325ea8f8f3a296c372a19c\n1f329b33d049938eec7eb7760b5e1ed156ee9a1e 3f3196f3b613a1315149dae0cbda283c7d90d593\nea64716f1e2a1c14c854f71cb09ee4243178c2e4 6a2913b13ab9d49730615cf76888c6e5bafe7e94\n4da45ad676ea6ff1937824227a0b81a7fb2286da d906a76298bd6df09d0e145d62c6e254d66ac878\ne10fc256a32cfefd03c2a9433861906187cd80f6 6b7e70d982fdf74c5ca4615662a00f3d71e775a6\n0053ca01589d776284ae14901bbc90c45f58b6db a97e9e9b741affc7809615ab63da569956722c17\nee7252e8e04f7129b3b924467065a9af5103d874 ef6e7196ec2dae66559a0ce8e0c22d44384af1cb\nea7002777cfb810203774492319360e3447eb87f edf1b5ef3f527f31545eda4928e66da97e6e13fb\naa2828ab1cc41ba83f1f517157230d55d8e8530a 473ade1405176571ffbcb0af00f5f4b87a35bdfb\nf799d8f63367e11cb7d4f3787bed2002b719b251 ec386049aa55f8279e349e82891f16b7a8617a31\n63ff8a0128e9257fea28365c21ae4ff494778218 f2fbae515fca2c481e82205d54109834122976d7\n328cf220a4aa9b6cbe61258e4f1fe58fb7c2b6fe 12739522ca6e9dc0a7224c28df3383eafdb3123a\n1b501bec65e4e26f8cd38faf3edf64552533bdf7 e1b7561abaf66e4e17f45c8fbd81a88a2e1d4e18\ndc275e1aa1eca618b233deb27913a3ad5d692b95 759c57ca6480b2cfdfdc68fc4f0c1a2c5886274e\ndcabd19c7732ced10282332dbd60a00a5f6efa53 bbbbef691f54a3b88c0a27ccf83d5ecad540db85\nb2dbeafd9ff05efbe60259690a8e9980a7c34057 8853b3bffd6848f9fa72ab11be3836ef58edab27\n6c5105881f0172952f390a40061e8c5c68453d0e da7f1e29f9bb253dbe5f5b4663cbd9d696f2c745\n6fae689e2a44c3baf07355f81716fe252ab28746 d68251e477b9b3e5dbd28bddce8b5d5fa20a6c90\nbcdcef820588b761eb765f288de50c0599cd3432 fce0394800b56df37e7f26b4fbbdabf280620abc\n9067aa97068994659cc0a79e28d1d6d6d8dd10f8 27fa5db726cf73ef267c0a16ab6a8dc120aebdbb\n200a4300e7f2aeb23cd624173f73579606de39f4 e1fd855945f5330193044ae2ad106a30ecf5e535\n3fb568f25535140cc7b447cc416f714cb79903c9 b7ecb0c9b50ae80e1110f2ac413bf347cbffbc88\n1dbf164d82342b3226ca4ba6602d8f72bd45d6c9 0c50e90248ee0794532715d23b357148621fc26e\n949d1dc451265899396cfe5be4b0c4756a13ba47 c0063444672ae577bbeca0028f740cf7d6df3bbe\nfd79c70911c19370fcccfbcac2499cd9a7581920 009707423864fbbb3e70771b33e75a6f8924710b\n0a3f0edaf0917b54ed82a105768dbdbedc64620b 65ec372dc196701a88017e14680dbd4d54dd5ee4\n7026dac8c882095bb78cee06f6718244a6dcf84f bc27261e47c919f5e647ca4011b134d7fcb177c5\nb0ec5ee9bd04974abf1bef0cab5a222cd734e948 42d3e8ae30f171417a03c495ce63d8340338963b\n746add37e8f5f79b1f59d0c298c77354ddd74aa5 61467b24c7d0b451cab5e3764366ad0b59c3e908\n3b1c9e0e76b924f986f1fc94f140ae0e5d98b56b 8f3f36013f1e6b048c532a4b3497e18fe45b6a67\n73d685089b53f4182caac7aadba34ddfc5d4e5ab 2ef09cec52a045b47b3a3de704f7467ac2615073\n02e0cb4d82506f0b0bd16fa68ccd6da37c1933cd fc4b70e40204a8e71edc2bba035a18729581dfc6\n97d23a9a996d4359d9111a042a8c5d195f353f27 86dc140e1e80fb2a7cfdfe1afefda1a485d67803\nf60986a2b4b6275be088369994ad33b630ca3b2d 6763120bbb9af4b561ecc0ac6ebcb5e9490aa0d6\n05af34c947896b250c0f5c382e9b5d9f0fad07b4 762f50d8e31be79c60aef2d7586e2a3ccf69c454\n75c2a1c1c37eb8f9626ad90002db825a868c5897 5605fd03d78954ad98010fac32656147c0979f2e\n963b4084845943e7e6cbc1122d7c99f1ebb9e317 a9f3441fba319942a5c56390334e6acafcf9e308\nede872cfbba5008a1ac15e767eedf685bb01ab2e 80f8d4be384393c97f4427098e692261677de69b\n0277e5f7aa30a780f4ff7360b073eb14eccd5ac8 16c97a4fcae2e4381ba51a14231d862570207b37\nee5683be4a89184832c5a3421869fc84c4fcb9a1 c37ad4a1ce4d45e18483ffab561dacd1cfacfdde\n3e90e8c6102d0ce9035b986af2e2c715748ec722 1f27f4b90fec26acc8a7aa8d9a56069d244e893a\n05a892f8b564c881ecdf6b98e99ab2feaacf1f44 9aef6db61381f3cbc55f091201fc9947dcc47af1\n23f4916d4b54af053a07a5ff0fd3f09f9bb96eab 7e278380456797443c406fb4441a363a9aa8d5cb\nd59fceba1b5c7bbf1e7b66c36debf1a725cf3886 3f82d70a998e0862e6890a68db871fa60329b1f5\n71fe71e9315023b0a66b490e58935fa466ea71ef a3acd8d1884533de879df4bff46ff623af828e38\n01e00aee734d45ed9756dc4e5cab068183d623f0 bb8d061f441abd9100064cebc64c1616f37ccd5c\n120d110647824cd22045bac4d341ed0925401cd2 46499b0777e3230c3c5511fe509d1aeaa730d194\ndd0210904183eafbc78519743df5c1828ff55036 d912c728f7cd92ea0a08bc4bf817081f1a10661d\nab409bbf1beb6afddb5214d1d9879d0b55ad6a30 72da085aa4a0b883e0cc7499be69a8f94abef33b\n4dc7f47985509ad4e2137152bfe901ced24653a3 9cffd073e1b1118c1199611494443497043910a0\n5f130341d55f225c04c700e9adf19f4087c1966a a114914ef53ad7df3278b4ac523e1163663f4240\n9b26f0d36b98c765a1f24ef22f01f65be203e911 74f9048037d210ecf1dca351f5cc0ba94f6c541a\n0d7edea32cc5b059d2e0936fb80dfcaac831e73c 93fb606b375581d1bb56fbc03ad3680217f476e3\n5e79038b3243d2c70dd6e6de799554024aa017b7 0d4189acb468818e9ddeb1c746c9d713f74ef70a\n9d93854c4ff1cdb241ecb950030ea4120b77f6df abd7578235693cd87da2326cf152f85577aae2e6\n93f5135741f2181e399eae89fdbb91131d161860 8b0a15f39d5ea8fc0257169bf60ff05feabbad89\nbad8013eec6b81a87bebf0093b70b48dcaa5cbfa 1c237a5ded75fe9fb5a13479264a895730eeaf79\n81789be60b0ade01c283cefd297c65db0bf862dd aa7cd4793301233f5cd84693f76560200ea0a8b9\nb0802e55e708ab7d5fd49dba8b9a22ac8bab7688 193d1f515bd8403400189060a7744a3d7a5c4895\n122cb99a59fdb7bac8fcaf1e1795e16fc9a3f7ea fe7b94e89be0b0db6320436a5f4a8746c0dfdcad\n7f6b7df06638a566c9979dea0aeac4a02154f38b 627777a86b97e3e315da9e111f0d1ece7ba1e775\n745930f2123120f105985fcbc886e45ffcf7c130 66d18a1f6eb7ff08ede90b7f415e43b266fbb0eb\nebd4677771ce637a4dbc9964c33f6ff43b3cd6be ed7f4efe73531445b829b9b90119f586cda9d5be\n26b9057b50d31bdeb43a7fb1c93432dd375950bb 643f1b4c09633a891cfa1bea5f0ce4b45b650fa2\n25a694384b046d7b7190304e1279884301ecf41e a31acd2984389d2031422a9925c081a5e213ad97\neb8032f87814c301fbd74b6fbbb07f9d04dec19b d0b09343095d3a7491c0f602787529dab1a305fa\ncb20040435923007ab475793b68f293236efc79c bf650ea33ce4e882d7cf2809d048ac4940d84cb4\n8ab04849129595ec2d88d2ecd2181284403b6672 076f817a6a314133583896cef653c6a641af7b14\n7d55676716978afede3fafb2743fd4b236c184cc efd79b7a9460d07f1706234a2fe5b796bddbd453\nf6c1eca889b4303326964247e388ec7bae1d7b26 94a6af9f333ba38d48aa9a1c8d4220f81826e375\nf82630ca2cf56d0e8440a71af2497008d52a3976 9c6436bf040d2180ace868ce436a1c81f0ac8633\n9224f53683a36862d4678322941e01cea5ea2add 4aa1974acf5b528adc4b28b80a35f179edd6e205\n689b55e5f528e4aedb8929d09e0f4f30c0bbf11d 9784b2a2623e572427932f81011fa6f93a213499\n49e3b7488fcf4e3050fa63d15df56e853586e235 a76e568fdc623241e3348cc825a7171c46593136\n712f6f01d1eb5a8be29271fa4de3fbff875dd0ff 0feacf3c2f64ed1ddc5ed790d793fac3af537da4\ne772f30d18218ef7c83e89b6faac674899bddb3e 12d3062a25be673fd3b7ae3b81d201a390df0381\ne458ea8809e7b2b96ee0a77ae60d9c2eeb2eea67 ae6101c48939684afe51aaf633a26219a65bc153\n066eac56e533c3716bb61fa6b28a5d2a2d9c13ba 1c442d5875367cbdb5553d60998f9098e18f1bfe\n44a0626f1a982d19f856c1c9fb21647f473be94e 53f6a9b0ebb2111ad05920328ffea8fd088c8846\n1926e13e7fa3705d6bf74547e5d3df96862fe98f f9d866c90b83b7eef4111fe126f8193ea99e21a9\n4c876c01dfddfbaa988d7ad8c9105fbc6e6ef0b1 087e107eb51bf5821e123db0f5d43541fa4abc53\n990ea02b326c50e4f197e911824bf48de0baf847 a3feb6f92c34cf376561b67fec3394688f7e585d\n05a212be4c5615a5eaceeaf8c46f9ae8283b67a3 ac0405c6008445aa00c98d018fef7518381b0d32\nd83818cbf33a56bc6d45718f8329418b48673412 5684cadeb46ce7dfc596657995bc58e35ba7127f\n146a6b56068e154df28e9aec476e01ed65110e1c 4e83eb3dcd584650b8e7c5a6891a653d0f76c22c\n3b634bf5c47f8532cf097fe00f4c745933682dba 0cb556996e680f9360c1a7027766bb8ae2ad5c89\n8c1ef025d1fd4471c923511d9ffb5d4fabeece2e 89a181d0472c2f6728c42ecf56fd043bea94ed47\n6f91edd07cfedaa179bd2e1722adeb7340c544a5 74926cf2a86f0b431eb82461b7a665da3f3c62f2\n660ec5bda28060fdd67334c0f6656bbb159ea999 c4ff63a6e6bf3940ea65c7bfde57df00bc6abb6f\nc54f3ddfa9aa5acc2bda629235d455e6d9117b1d 9059e5e96c249857b52fc4ad14d3c9c26c8ba9b7\n7537718ad2c7d17f2faa57524ede03d02b2a73ed fcda147255928749ddd58600a19d54bea90aa714\n6b6c8c379481379f9a5c072846258819689d7b9c 807cacfb4b6b68b89579ff6a0a6d068ff259024d\n8faf82c1d2e4562144622dfb9ae5d27d725d70b3 0701f7a04ce50498211bd8a2f9bb65e135b4041a\n12b7d425ec871168736d6873cfa99aca4c8e6d38 7c72c63dc32a40852ff9148161709cdcfda4c0d8\nf6cff1f4abe37730a43a7fc371d03352d4ba38d4 31b6f9bc85d7384b3c78dc6455391143f89176cf\n1802fa9504585df159e9c57a869ef256e8d95843 beb24bddb93d7759c15a4c0683f16d114a43d62d\nd2cd7a33f3a62ef71efaa90537057a67e6c020e5 58e811d6a703d6f87077984eda6c3389d3f65642\nde970c544dbe1c49b7af463a35a57ce831063e11 927e23d1180b55bd599410e2a4cdaa6d30b7dc2d\ned3b4e824b2e9437ecf192e815bf61bd95444b4f 50e3a14611eb00afeeeb09de993d416ea0dee88a\n17d6938c67915d90a9ffe40867e58b36d8bbd689 8fde36bcddfed25aaefaa8bab94a12d86a6b93df\n48747b26e1a9cb1193e3b8ca31e0747d63f92631 a35399ef13c79eec1c351ecc0cfbfbb841d7dd79\nb0239d3341dd6ecec7d8b9422868ecccbf007e39 a0d46342bc225987a7baa7dad92bcea560a534fd\nb00137badf67cd598afea849ff8df89be02a9a82 f2617344f13bb08bd3b35bd17b342978ab963a2c\n9755d0e161b6e92adfd112a18516b11a64793037 3c1d69832a60565ea00150ca433c8be8cd695095\n86b9f3ffd7e6270d16896fa6650445a3f8c0f4d5 195c258be7c58559540abdf9d18e939ccbd6f52e\na98f3d0a067eafa38482ba25a008e4f52049ebf9 b549a0d90f16cc9f295b779501acf63c869cc69f\n301391ceb6547823f9aa7571baeada5f679a6f9b ab7416549716863a2ec6a1c02fd6cc1d84f8ed52\n9df9ac1ee6a0bf186cee85bfe8499b72f9e676cf b8198437dc01f8702b3af4edc69361ca0ea10731\n28ee062d7d691ff4344888efc8fe089868b9b0c4 88c97f49a7da40d133c8e77d5015b8eaef19f86c\n3d169cc5edd11647c4195e9e7e0a5994054395de 272b95560085c22b7f072b221ab0cfa16e29ab6e\n6032ef6ada5ae78980566c61408fc31a5680f507 8eb30c9f0a575885571fc11d4320b503c3869f25\ne19b42c82e87cff7169102e1f9f15c4cc4bc8399 0a7cb78c309741087538650d48fc13ea37f84c1b\n9e3360f81323e0808d97565a533a33de738eeb73 af565bebac1a9f2893395f63a27249c6fe809652\n75aa57e77d61a6434dc789a875bd21f6dc8914e6 fe1bb27a47b121aa22b34f03c3522166ec1417cd\n1bff55e74e2b345ea270a0cadf8eae9d2fcb8c61 07072185ee1fe885a1b08f4f273cd2a488f72efc\n8b00274bc139f4c48de3131b3b41955cd9bfae9a 7abae34b3bb278ad5741982621a519c8404c1814\ne572fbcb81a709b4894ff88b96d2c75796cb47f7 1f6537ea0f89889b89ebcdf54c12fa930ebfb1de\nd6745225730ef962c2aedbca0310369e9e4f9bbb d4cd219c551e3c13020eef273f4b790751030571\n26935cf229695990436f61e23945374732a287a0 dacf75c5a758804fcd093bbea7e66bfa18d39bdd\n09f83f63f821cb8a8bbc7ce28a2aefd707b96011 2b2c649ed5de2b2679cadfd338849504777f14d3\n49f8e5fbecafc7fcf7713277d32063a7be1da473 e90a74a74a29c408438c2a1a30ab7e7073f077aa\nb50aa2603062a3bd6df1b3e698d9ec3b90051139 30e23264f2b7238ed5996ce76bd663c272feeac4\n84e93c4ab7ea81bd4ecbbcdbfd517fc7c5b2c3a4 d60bc88972f2a1aea2f06fd6359d9318fabbd7a0\nfaf14967638004f86a49f5a8ddb1a0839a4ae62d 5dd237a7f0e708fe4535b2b435721d76074b41dc\na437de47b5acd30c1fd0599a26a65c2f1439383c c1711d4e78fa977072c49907780027ee50a6f006\na04a80453d6cb8ab7db050ebc3333288c936b1a5 cd94e71ec1dc3d554f1f687e07f45e8be81ede86\n5a0057920ef8bbb988a0ddd6b5a0cf8cd4821768 10327e32f3129c0f81b60a2118963f0dcfc821e6\na5a044a1122708bbf3c140657c2e40eea76c395f 882e8e7c4370a52b3ed620ab7ab0d28362c80aab\n99bf2a33fc0697a7450944226ff71dc745ef2b5d 2e3e4edbf3b022b969512902d8d4e651311f15bb\n1ad122624839364dcf2d102cddb65efee18568a6 338b33746bcfc7a9087be7c85d34d9c70c4201dc\n321cfde1396de8fb053f3b3879e65da1b5006919 afd622e66f29ebbc2d2cbb7c5452a3e2d746eae6\n47113acce4539263742a23129c4d57f70040135a c67f34579c785d3e71f9b2e6f6853c5d1e58c06a\nf139488a93682bda9d533a6f97ad4883a8740b82 ff1473ef40a4971b64a1e6d0aa5c24442f6d802a\n8170a03fa7455fa1465ad115c33277d8c828ec79 2c1438de592bb66aa0f776943dbaab756c1b387f\n6ceb5e74452822ce98ecc72d76ef7b75377caaac d309b20a13d26285373cab2798aa154f24e634a2\nc51eb70a3afebebfb80722e02732c022e350a5e6 b91750e079492f97318952adc00a97705019cd0e\nb5ea5ca6f4b4ee872885fc947d49222418ec9162 eaee6baab4f1c87397a6be2eaa6ceb840fe20ff1\n72179187f8edc054c0d47b7079f66a2592e15672 b70e08eb8eb79104616a83cb5df701b82a4f1442\nf122c43b8e1575a48415a403ef1a85b27c05235d 38fe75ceddee10bc218157e6dc9b554b06bcafd9\n31eebe7aa6e702a882d51823af3f468156c990be 8bca5651d7eabf59db3f415fcfe0906650cd25a0\n12ff42563a967e9ea3f707da50b9291eeaccb0f5 9cfb02ca043cf9cacef25a188816a4a694992ac6\nc2b00784a9a01163103f25a0c2e47b3c1737031d fc174a183d997ee25995b2634fdf4eea2b6866bf\n9ebc8f329a31518efce5c3904036a23ec8aa364e 2ffbf7081474d646c9ee28fe0f17f46c20b63e0a\n8a91d9ce807e2103b2824ec9675169f9e3531cc6 1329b9e7889fb7f1d12dccbbe1d57f1420f01093\n70e8517c8c2b430b1a48e79da0cadc511e2f0b25 a2d5188e65ae4ab067171a5f552bd129a201d2dd\nfea26002f790876f67b4b129d3f1eac89a171426 69929db2ee1244351cd985d6ceb1b3c8fb6f7ebb\n4765bedadfd3554d4185bab5f4cda154e1e7a1bc 26cdfcc11694a5c5b2c0dc402c1a5afd954b94c8\na73cbdc80cb0870bb89a96922e45c0d41003b4ee c44cfa0db52497405a70351ad1883e465140cd70\n475c228a07e83592e66a7310f30757f5b102877a 530593cf44f2a29377b70a6d4cf78c7deca2e257\n6380aaa41ce14e30ae3220b5544f16c5a0e7ae60 91259f0f2b32868f175da2f890a0523d515628ba\nfb6bab11f2775ad348ddf98eb80f09c635a7d014 297a62436f2eee810795263f67a8da0e2acb7672\nb2d0377b287d2f6cae8b6b812fd49b67938e7207 4cc7e23b98d764687a4964166154791c62698539\na89efebc563d94c756fccc117c5b20f17dde06d9 e3bf1d72f8e80f87b92d0495119496bbb55640ae\n9d192bad0f4f5978c6a759c0d441205df69f9b75 8476e6a94666c70cec1de8c9839875dc942156eb\n67c4fc22ee800f52b331df9d53fac11371c11870 93c633474e5f22a45d3708c4c7fc37fd26a390c7\n3ff517b088fce5747fed8a3da70c347004fa794e 6167e73a4640d13b53c1697602451786633b3362\n5ae48791e0cea678e8bd7558be9b33078cb76668 0147be76d1eb9a777aa3df0d934db62ddf7f839b\n48a9cbd58b2097bdd6354829eec055a073b61ffc d557ae50df7a305341c101a6684221b527467d2c\na0c4807df36525ce618968814b6672301c1987db e0c7dbea0b67adc073cb3bd71fbb3f82a3f59260\n9e013b7d40cbb186cfa0fd651761c3b9d2d866f1 1754e6cdd6f53656011c0b63e300a90333e5684a\n8175232ae3a539a7a3a512aa3bc9e458e6300f2c 467e02d93a0a49ed2814f2c0f7f9c32316a8ae4c\ncbf79a909c8673a3529cc24c834045cd7a5082c7 c9a0b526c32060db96bec0f4bd4865e03ff82810\n03710121302752bc74a51bee27db011d8737b163 ff05ffce5f4cad07d052a81f11fcc89a4cc09051\n41e1920271deb3c4f644afac772f564ba9737a17 c00497cab485f073c1028fbaac199b6e0e898c80\n61aff21fb5ddbeea9d1c71a195fc4df73f9359ec 485122fc0010e5fa7928a543180fcdf4b7437e38\n55b423ca2af33a017a56a129d8feb486632df785 fa329903453c117e37e004a05075fdd33cd845ed\n3892fee1333761b1d67ee31b268086f2e504ade9 93d58e8491ed1e184514eb9fb29deec91cf3d162\n90f1933962311fb0ff3df4cb37bb6d10204de7a3 636d2f2c064678ac5e44a403210a566200ee7b66\n1fdc01a43ed62d8954cceece81e7e9723f322549 74a803ddae0b5dddd812e949b72d9a7e3a7ce298\n3118a12390d4e94853c38b6e32887169b35d117f ae177561530ce48c250bb8f567f7866b640c5871\n8d7976b45827f23143a24cb8fc09cebc83ff7fc0 38f66cf877745e632342cb137440da92679f9324\n65a6d0b32463f377d94c68f316ef91fd6307b788 1f8f19b611ad83202b215c855d9dbe42c0af93e2\n3d6ae322bc2132c7ff68bb5882bd748e3a19acb5 58b8ffc0ccd6cbe1d60dd99c93d4a168ec9698ef\n87726ebfb896c3e9101c3e6f8b2625e78044fbd3 8f7652ddf4facd7c6dd9ce1017ee80a5a1be09fb\neb4bc3fdaba9533a7a2b542cf785ae7ca32149ba 67af9294cd52951a9cc4871a9e1ee39b122a8b24\n243c1240e73a6fcb3f2e7704ca206344d08d0ca0 ec59c6063c1dd349e45c003fb37a23282ee30b74\nb76b77e6c4d4e58c51e06d50a28dbcfe7ba1ac01 b2d563ebdf35bbf1ef7d2ff0b56d5924bf7a1264\n4c4a7192dbacb74eaf78683d9a5d49318ad1f30f 1acb6046da3302b68520d53c8547ea567aa0b41a\n0efb1bb9b0dc43c168f69625f58ca0301d4e2d25 0fb96f5b85a6ae7fd35b10654837473373e86675\n425b33ef935d008243aac7cfb0d72dfaf54feda0 80b495cc354489c0e363551da9987d902ff46c31\n5528e8167b27612a9d3a3dcb15d44601f889bb8b c5e8ac4682bf9568b621cf91f6c7e7a2291a7f74\nd5a35ac041d17237983472a4c62fc6e4162a8310 a811ae84ed872b5b011b68dfcba068b4466b67c0\nd3d9ac6580cc88ac28c602d1feb2e5ee81d9f870 c8b9304916cbf29e353020080fcb9ad8aa0214cb\nf47e0c2c0049e5eae1362793d8302cbea1b65143 4b978f6964b1e51ce2b2e6507d69d1d54eae441d\nb14c7f920eee0dafe4dbbeec1f211cc926aff39a d96dee056e9111e679617a4a98d7840a75091815\n1ee6ecd335019aa79748589158f0380696e1eb68 a6e645b645e4da6da47ef08b1f9b3f3cc968d3cb\n35011a448e4a39f3643281a3716074d775e53333 692dad74666fded62d6fee2c48dc0e4c168865a5\nec5a7b94f8ddd82b739dcd6d32d5b76c1f8ed20f a7d7b7bf99c6a30b943549561a1e1af7e911f8bd\n3d9b3cfb47bfb58ac5e3213d3aceec244d55715f 78f3127fa5eea1eb33a4854e099f29f0e3df1cfe\naa39ea50b68bf4f207237f0a84c7979e49aa17ae b74c30689d47beae6332a6c001e2dcff1237403c\n4ecd5f8b4d704f0b88806280f05d33807d6ec121 c42b8238e04035baed38ed7b4b5ba19b26fc5c72\n07119b71f72f063976d1972535164f58b3f60c7d 3dc3528219fdc20d693206444bce3cc748a772ff\n31972a9227d84c4bdabe7ca5a7d6593305a77131 5b3da2987012bef6128f6f842e4c2a0347871480\n3ede3e6304d183a0e82a0bddf5c75baba0adbcf4 8a3fa671735a087f8b692d8c0c1660c5ffc67507\n7aac47b946c594e016c85c938428dc082c3e5d4a fcb2b0efcc0622cf83dcfa71dc6b8ce0694d9f8b\n19cad6f271b3c96e1097d5e7a0d92f63a533f8ac 2f08d3e6f31b8f3f74fc5280c86291719433d0f3\needa2f25cf5369cb65d29a42827f726eb9ea55cd 8fcb4c9dc6f5c3687aca85494e2faa053eca945f\n1f28817878481c4b9d823cc25b10fc0e3db4d590 d7ad35ffbc3ebbe1a78261acbaf5fc1fb6c9d598\n12b26842647b1762a5628b4c687dfc68b6c254b6 25034d70243e33b1224ac3d9aac0f2d7cdd70d00\n8f41cc24bd93281b9ba20bf1b8b5eea3a2d93858 31fd39507579fd8b5962b8af325c0f2fffbcb1e7\na4fd9e6d2c2fc223bd7e0eddf643302f56256c10 79050eceef60f9015d9f8707d031c354874060b9\na3a55d716775e9475a961ab52bcec94560d6c7ac b6d2d7303a5f25ea90d69de07b490b79b98c9c9c\n46703489c24c3e1b2ac5aacb9213a6fb469d97f3 df24aa8cf301beff0405335a1b9471621eb67506\nf5082abad0385ca28a90d8b658af42dbfd3eeac3 6899dc78b27c32257ded5a497f9470ea4062c40d\n9c816f6318e5b8540713323b6fee2d3459935f56 6b3c17eb1ad4bb3844e18e827ba37ebe4fc6c1c5\ne44b2cf8b018147fb8903238a4747d5732ade804 301e8f23c98d0c5a01a18cc60d83dadc209e03ed\neb5be92c3ade8dbb5a445d1655ec1b0149088634 11a4825e723d015f6c638f63a6059eff6fde8190\n4889fe7791f6df2989580cd74a6b67a844c60919 9a3ff9a518e455b45ceaed7ee488c676886bc2a1\n2ff99c629db5bad305a302a26139acdbe0a851b6 60eae74f90bfe40df2a2439306767805ad1aa5d2\n419939785059083e9924cfb2608c97d39cf58538 f0d045a1684419e75e919c588be54433abfd6ebd\nd18c514c7584b4e0196dc0ee8d58d3957a28f128 4d2ffd61fe335936ea376b87c9b019df82466357\n54436eeed200aa2a96f742f3c7e9b6a4d56a720e 31b38918943b287f7ad8124c65e4dcf2cd393730\n490471593c494e58cd81cb5c2ff18fc3a5b92ada b57fd9b827f26072f05dd5acb46998548d22d557\nd36d72b82d48a4fd17dac482db672564f65adbe2 aaa7c5250fb16172a056e54fe5fc7f081e051c09\n0dc51d5b67f6810642f74cced043cffb1556efa9 a9bb3593bd9d2fd2dd2c6b154d27252bf0d221e1\nef51fc4b05190a917285812edf2a1fd8717ea3c6 c83787dcf7a37ed5d733dc5a4670d99be09f3878\nb859b8eba2e6ae3147d2cf4264e7539c71b441d1 a1ca977d45c3d51fe41d4e2604145f24085cefc6\n93f89c017d475a25bfb4b1b8fe62258839862fd9 0737a782c85f24bc9aa0004f78ce0a45097e4d9b\nfa895da72a0505612b9b6dec53da46e88bb9860d 073cfb75d1482c48c213fde6e15ff15b1f86855d\na0763b8a5b92c2056fbcda93979f74cb602f1c60 6f269ec0f7685d01d8a720f11716845d83bd52c2\n2edc9a8728251eee63ea89d6b0e5382c30dcd5e1 71cb40ba28cc64199a423fd5595567dfef22895c\n160c7de6f10ba171a3b29a2d410342893de788cc e3717536687609288c30337c9e65fea5c25c5784\n067323e8557da2b449b766ba3a64d0584eafcb3c 82a3c926cccd74939255476ca9786ba8ef6f417b\nd0f9049daf35b4819d893d12720dd09cc62e34c5 2f975b9437434a73fccf8de1ee59f4ebed04c6b9\n37f3faa5738db127d958412510d6011579ec4911 cbedda71ec557fb55b76858392485b096c38d57d\n750ca38ba14a27e51e080bf90d572f81befb1424 3746871760644a0c8d684c3e41a18e6c2e257e01\ndcc1992e6721bdc5e00df896751a97a20160a923 22d66301a46676661d9ed544fc0b24f460ff5807\nc02afe4b09001711ff46625afb6ae4c901a4854b 517bd34bbab74b7477b21035e066d86db923f92c\nd52e61c6eea2495cb4154901c4f0fd5f7d52dbd5 eee9d3b7c934040da040fc77551789006b476067\ncb50135cf683067351fcd34a1d76140f37488267 1e0affda81c1c677736e48fbdfc7c833d92b9b99\na18c3e853cb66dff52c030723dbd93d9d4c870b0 b73cdd5fd995736515600a7743d7cbe482a1a4ee\ne8c28a9642b420e081044fbe677347509c1d274b 2ac414b51f9409186606ac2e6de985594c42dc13\n711dd7d70efaa368f1d7d3792033b6239a0ede38 0f9da70b0cd8b12266943790b17ba5fa29964a05\n54be1721f74265a8793f192cddc8429f5cd7db7c 733ac5894f0665be8ffc5bcdb6f8ee3b3d39e1ea\nb37c435f000276b18aaedbdacf9ea7f2a1a8e136 4b0e112f55426d50fb9d2aa109184b8a147fd6fa\nc69e446442b33ed57e79d217b4f4eed6727e9e1e a3b50253c9d1f2237b5a0bac17f71a37c02c1862\n698b2e6f55ea333b7d3ff6ae28443523f25a53d7 650e12d6612a5b9577e02e09bddf20d6e54838b3\nf401fb2bd7b495da9a4e2f3de4b252b9defe6bab dd0d9eb06cf2efa5e8eb545d0d184fc7c5b1d6b9\na183388c848f1304a6022139bac9a3d691a94a37 85a7e9860273995175872a60533a96d96d2775e0\n5405083e5284bfcc01a28a6fb1de2dea6ce902b6 adb777b69bb2ec5e16f2446055f34f6b3d5b33d2\nf41ab6e33131e8d5cc8f80a3218194b982fee3e4 0a8a0b933b7aa8e78e94ca564c1ad42ac742a079\nef68f2100211985fff92fe1f61f66d0707ceb7e4 c2951d83274411ac141b1a686aae261037f47813\n03554e3dc2e0a6a359bf1951652708a9654db832 c767266b5c89e3e4211a84edd4ba1d68abce70e6\nb82208244ccbf06de0a6795b703a7138c6d40770 6ccaf7fcf2c4ca5e41ff1acdb6925f992df748cf\nd116d7c318358f91a193d9625cf63f09d48d1940 5cac3f4334df603a5a58dcf591c232627f581ed3\n39cd521cb5bb661c7d1ca75b9c652b060567d64f 4b2bb6d812c08ec6e0956efd703af13325ee60f9\nad67b3d0f2959f54c813c1de717a42813b7f4173 abdee5e6205ba89ae68351565fa7876e4558e880\n8706c7a02c9ae486ae14a1a121c3284686f7cef1 ef97c37540feb4cdf72b43ad41883ef5f222225e\nb3b7b1e604ef5a29c36b67c80a266360275e0a0f dc25cb32c77c8508518f2c8fc048af43b5fa7f6b\n02992feaa25d18853b2339467d75c8ddcfada81c 977c70bf65005e8d2831fbf67bbb08d09eb42c77\n172cb028fbac7f4f363c4667b3c601c73eb830c9 4522b0acb6bd6f49ee7a4fd7800e907feed287af\n63adf1775263ec82ad17082fc1afc62b81338681 030fa3391f58bd0af04710afabb4ad39bf49ee30\n77cd931988a53bfa58cfb56a9cbe40b4a7245bca fb9ad706fcfe857dfb9a4345ca9138985729d9ba\n3d675b019f19da4b3fb8a3b53761f151cfcbf288 7627cedfdef9e3c59cc5fdfc782a74c71b849d0e\nd66c6a6061c0fd1afa0fc94cf1af01466616d381 463a013364ad420c71ab4a1a8d870f82e06440aa\nd33e28d7dc7d925a5f29c13f98686ce6560dc336 1aa30ac9dbdf82a023421f5b9fddd0040ea88b5c\n15be5972b70d36973e825018d55fa720e86e40db 424c6449ac7599b6f56b6c1f93bbcb86ea2bbe69\nee4b973e8280244d351925aefd67a1e6e7b25898 0601ebf9757353222014bffe3403c0469b336259\n09bb6d3b1d1d4ff772acde597d9d43394ba20a34 e72d922353e690aaaed1aaeca82165e9fcbfeb1b\nfe31f2d293be137a98ce52d6a1e5912a19c04ae3 02059b409a125b7151c92eaed582ba89b6ceffe1\na47efa3012e32947f77fc946b4014fdff08254df c73ac2fa27ec46aa3c98cfc15c29715a1b967f6e\nfc4a1e612c269732e92394b6b94756b49e16dd22 85523113bac79656932be868de59da6428085aea\n00141e9acc93daca11d951dbfc7a2c20b9321d72 d37853b2c0583091be320b93a92564b6ebc8a3b8\n2eed1339a2841eee50ed9e15ef811a23e5f81e5b 69e6f276923eefae95a3fed24c6a660e48eec9bc\nea3a3ea9e1bc3f8299734f83fcfe185d40d19a10 90e2332b1891144b195f69a78991ce203abc5ebe\n66866385dea952079632d783967766b10994096e a059262143496c2677b5c429cb0f18316e96ebd7\n823d321f238167af9e2c235a755937da41f8b336 437898bc107cc43eb62c904695e4fbc41b361103\nccbc45e98d0c5797a07f3f504dbdffdffe22ca9a 073c6198089becfe9c23433125c5aebd02f976be\n3b24b233761a666eb8fe7e8f95c8177c18d98168 0e0241363d24ec28156bcd8d06ca7964a0014073\na8ada2478daa63dbd8e64595ed6b0075e43ac47c eadc639ac8d0a78a9d1d10f9a9db3e8af2bf6367\nfa332dcf8f96256945e31208fb9dce30ca379b6e 8c0e60065a42dd18a57326633e03f9064de9b4fb\nb5bc0500a273c276b03f3cfd03f4442c02d1c639 ab40b11278a9bafc5469fa8b816aba56c9d4f858\nfadb1f52c8c3ee076efe19f01f36d528711fe430 1b2c61e74446eff938211a0d6cd381922a7e6cab\nbd63466f9b2a9f8a881eb322bdf0c32c9d6c6c70 90bfc684b6d75db9985fc5074486b3ae6d68fbc9\n46f9828c2384f9f2eeb7a07a324ddafb7ea2d012 63592f9989dd0ed6701991f99fea8eabd7960991\n59932b8c8b29e80d3f153867dcf0a78442b29ea8 8473d7595085b734bfa725c2c0a6eaf035b7c719\n2f46b7b07d337653db5ef174381c210df333a00e 2b0dc65d58c9a77e60dcadd56caeb2ce4233321d\nac3cdc6cf301dfd4704c3da9e7908383fc49dd66 743e24351f2dfa32cc6ef9b10880c8abad620759\nc3c8f3144ca600446dfe2b6dd582abfda67e49b4 a3a8e174152f72e1081de8072930a12e5a46017c\ne9c980dd6a4120bde93c678a58e659afe8d22beb fce7059454580b6782f969603bdb5bd59ccb3782\nd8544862f8bbdb0e51ce58c307b59e6895d7a515 56bcdf9ffe4d6b1f9b0cb8eb443317785ce1abcd\n199d03c50bc422ad4273167b55625bb07a06ad11 931c32b534f76c6681480e93126cd4119a9875f6\nc460a65d1eb2841179b96ee88581bee4826eb8df 5fbd9d396b2a05c24030a9049c2a0c02b86f9bd8\n96a6ec371764da149d857b30ccd0c13ae21bf3d6 9b548b3fbcc508eac2f8f7055e45ca73cadaa4f9\n208ab0fcfcdeb37fd7b7fe800ac2a1a87b1d4c1c 4fb6f8c3621615867f3352d1319f82bfd005bde9\n278fed7b270fbde5c50d7291e60773060f3deef5 48dff7324d2c764f1d2a97b910d818469edb804c\n811e1ecef40743a64dcebd1302812b50a7f7fc2c 185a4c991986d978028aab7a3d8688f1b912cd6c\nb6b7ebc4c2e9b6def812142fbbf88e2cb6f9e0c1 43ebe7442129c6c388ee9bfe76770d49a0dc4e7f\n5671d5fb08d223a3708a4b26a40185bf3dc2368e 200a99325c03cc867a5c4504f0693c996f2d1aed\n3a51acb59cee08074ed05b4e79b4dc179b93edbd d3571dca5e5b1a07cdab0137b6d8f94adefb2390\nea6be2503945ce44ed49d6fc1bcdbf2949482e6c 824613df4c776a053d0f67062055d7706cacfb06\nb4301de9854a78f727daf8d0a42b634a8ae12bd4 049c63a84a8c21beca308a268794569ec195c923\n4209beeeddd3cc102a6b9e50d9e88963235d610d 7ba3b6fec2ac87d914c4f069d6cc097bec557707\n71651ef14a03576a98c01cefb6b676895dea955c 28b545e8dccd6b33471edeb52996b60d3ddbe895\n4874aca3a56dac20a667186ecdf80ce67c9eca4a edf33bb0b0781d8fe6e23805dfd718ab843439cd\n77b1926192d0fb10e5bb1aeaf6ba19404c1b7101 557ae5667c10e5a5be0cf3218b42f0526e28bcff\n70225e5de09ef685fcee65d119577c0ba1e8bacd bccead7702caf68f59bf24085e8d9cbe77853abc\ne1e8ea8a8d48d68c472eb4570df94125fe002222 f60d430b483cf386ee9283b1c0f63bdd5ff8c625\n394c9253ae6d96777d9c2393af9873af63c25a51 1bbaa59181e40344f7f3ed9c3b448dfbe5ce06f6\n1b398c05df787f4d231c003d38b096c233130c48 4840a1f8e0728982960e41ec1562f7680ba537f8\nfd354d18d43a66b0b2bf92f3df20e946bb81ee82 c2ee8e65efcfc7363d1b2908b1abad96329cef02\n6c659e97f8a54cf2331e75baa2f7e7d251ca4fbf c7babc677ef3490a95b292a3318ca62f5d433568\nc8631b88422c588794553f5d52975d44554eaace ce34732a3d8d376111db7d1a26b834bf77047f9f\n945f4ee2bbd34c2e5e065dbd485b46fe29338cad 7589af4cbbda8470390cb32c2061734d6467cc5e\n9df8aefb00eab29a56d1917ced828ef58010391e 787d7b421cbcc97743599a903b865aec6693b1b8\n433f02d7ce2641330bd5b4a9536454c12e54aafa 5a9f41a8bfe0cc40188cfdc647d2e088b80cec44\n85af18ceea83aee3f10cadc76a30563b0989a3bf 03a39cfeef9df2b483de772cb16893b3bc8900ae\n8058592cb51a35dcf86e91a88469b7a4f7891d6e 7b394ec982ef43f49b220d27de46658fe476e443\nebb9a81d3d345e130fbfd3b289d74fec0ba6e151 b410e6d4368150fc35c587f4b79322c4fce39080\nf886ab9467bab27fd59570408605aa243f7a2130 01c367e7f197ccff03d06254f1de7da1d47bea05\n001f3a102924acf3825c38bf568666d7c89dfc41 a6178d15cc897d117703464f28d469b462ed23e8\n36e9e7dfab1b4b472830a7de73b3fa0bf75f4b03 1e8db2fb8a0bee991274a9e2cad81c0790757806\n7784782ecf3afad907242acd9d23d9c0d87f6a83 3317914e8df38e0cecdda73a36c633972e23c236\n3906a2180ec61d8144b0ba74245ea5ea59fe751b d6dbc393e25f817ecd4253af97f1349e5e8d46b0\n5c6449d76e9765ed58d9e666320c53b652b53f91 366ddc66efdcd95750febeb4ddedf6690b9b3c2c\n629c512484e9423ad931db9a002b441fe373c3de a2bfbaddd713dd404a9d727045898cf7a91785b8\n4b324b8b38365d798712d656523b248bd5441490 4b1d74c2673d98ce11ad40bacaff4430a5c6549e\n366145645fbe90ebd04ce33109f0e01106a9c9d4 3412d76ba1e88ada1d0cdbbaeef19bc6bc19f7d6\n0dc966c6b9dd5b48ec25a8714e7850aea15d62a5 d95671a9458b3de06aebd6b5b69b7cb99a8a8bca\n97ecdbe31dc418d61a254d1849f47907cdfcfd99 0ef2a2fb1ff8c41dc10810a0ebfc2149f56ec7c5\nd6e47897e93012b29aa252394cf1f6685f79fce0 0cd39c883ed30e8cf2bf59757ea71fa3be411932\n1f63d51614a5003e1379ac5ffb1fabf8246577df 67cb85cf88062f0bc8c1f627586d3e98bf6c8ab9\n27adb8a08969637ddabd32847edacd8fa7fb364f c64283f43883d2854b4fb2b702b7bdeaf9350b1e\na47b190b0f061c9436c68807c964dc3ba1eeb33c 9b87a215d3acdd05ee67961ea36a5aa01925716e\naea5bbccc37875a633cd8ec924807a1761a18aa3 032d5e122e88c83c4d845b2bdb4a34d6706eb24e\nb56458445962c9646272726ff99aa835d4442028 467b6164b93586d842c8391f7e04967dbf62f611\n5b6be741caba724eda26951e4d8172badfa73ff1 d7c47821aa4177254d5d9f2463f1ff40e7c5b050\ncd6347cca56fe2e9e704252ab137c76f091f781d 3e258a0f1c2d7bcd4e1352b842a10d3b02dba587\n74e8c9740d8a5124f69756ef77a25e469c0fab38 0663090955922a7979020dee9952caa0b32391de\nc8ff62dbbb975085cec11ab1c238c328c7cc991f fa3ab14e0bae69a094565b572fa84285faad8bbe\nb3209b7f872d4fb97c63a6f681910ec63cda71a5 38815d45a696db0c532f55e96df5c5f1e81ace9c\n012f0b401d240620f642e2ed7dc57d01abd832d3 d9013deafc06643d1caf0598c931da9fffe48e36\n50547efed1b8d2829afffa37131d593cdeb2e78b c77d80da82081622bdc32ce6878582424ac8d2e0\nf4c49eda3bd9817529681da66160b00b7b60bd03 269ca1956f4be0609af8a81c7745230b5aba0f2f\ne5ed4e1446886098de77602bd3f877e404f4cf3e 5b2788a60a9cce1884ea63c57bfc31a7596223c9\ncc17141d1bfba3d03a90012e7dc042baee486218 5f058378ef013aac06513d8cbcbf7580e5bb6e32\n1305846c281e479a91d27b24f315077da1da03fc efb26f1410f299ad9c1f22a98b3cbec888438678\nd8ace796d7421314608669100169ed5768c07e89 3a1d2ebef5bc8e45d3571a032e09a46c59148d18\n10f8d0caf04eea696723359554a5c9bb12e26ef0 449d5de6be02c662a7ad5dd572ce0c91ad52c645\n1e4c89d99c9f3f320d18564e793ec1d20a8c6a25 e76d28daabf85c90c743929eb6557eeb518eaad4\n9784e186bd81b312b4c547bae5959060d4a66618 1da147bcb0e94b44609c2e46c8a29109d3c16190\n67f083f41a9a5267d239df4b5c96648ed1229e7e 0374ac896011daba9a7dd2e22af9d4425a6b4c6b\ne457a8140c7e2c676462c4938a68bde8fd564345 532c31d5c2d7467ecd91f186285ebacfd3da1625\nc30d78cea5cb5941c5b3ad65a76c19260b187c59 0056ff78f5b80684279b07ddfce917532306b0a4\n7c7962af0ed388d8ff9e1c07c9958d4b1f3aee2c f08a6d3fd605bc10fd7ffedf96731f8c05a6d374\n0b40da348ed9bd67d4e77c1fc80cfe6488734649 06a4dd817f8a51bee3b47642aadf3158e75570fe\nd81d5a766a46496198324e46cb1b50b06affa9b1 ffb994b73ab4f9d4ab7b371522b7c6db855b35c3\n3e17d1e8eece4750aa4ce4e910083c42c01d8b92 264926a2e8f343e9983d41f4c6457cceb17a3f6c\n503b4e5ab67581050c06960c3e6518168d009c8e c0b12635edad68cc5532206e29f56e85338a7d76\n82bbcf57f2105ae06c8e5cb79426e95504d7bb40 7cfd848033a1c1717feed9510aebcf889dcc4001\n611bb263f58cabcf0a88e67d5f212fbd76e5d3fa fe01a13220851b2cb0a294e6dc434869cad9a120\n706cadfecbe5582f2a18cc184110a9ded39df1e3 98bbd051e536815cec735feaf0b2fd2381196b23\n4b3679c5068cabc68e1b8db8d3ae579a423da626 237ef014181fb337fda54372d24f4ed43ddfe752\n4d44d55536763e869cfad3669d4cfdf16607b5d9 50119c5d8709e4362f659d3b17e6b9898e86fcb8\nd0112765c63e5c0939b969d90ae521bd28202899 6e5bec69f5e88111c3f19e0e90bf3871a56bd14c\n3824112a3c6d097640d07651edaaec1536fdb0ed 20dbb137c0461bac9979a628c09a4482620e440e\n65ad9e956465feb7287f18405100818c53d27138 486886d96573bf58b6362f72260605cb1d099f23\n2c52f9b1d1cf43f6e3927d986e400f396378e0c8 f55cc513ef69804813d83e494cbb8fb2411ccb9c\nad97817dbab1579141798504fadf42468b317d64 38a52bb6609e3e207c34b3111dc4fd2d2f6b2ccb\n37a9072df4284fd641bf627a91726332a08c0985 3bdd3eeea946ad933f4eebcc93c4fe369a615897\n030673fd42135c458d5740263e85bbd73a691d7e 00b032ffaa8b251360e99ef6cd9781eee132c233\na4b8bac0635f1da7fcc15fa2cb7ad53292030dda 31f10558e1eb627183c25582d04e12fb7684a9f0\n3ffe0f381b0b92af1bedde447bc64c62bcfc07e8 7e10d411f7b09d5cd405b94b9b18a3a959c43425\n723d2b52d2448ef449f9c98a360841213f3af909 6f06c18a13302578aea9350c0fa8cab097a0da77\n133c2180fd7a1406da14f32dd3b9e6ad2480a0c4 d3697aa9684b701b5ff881b8c7f854eecaaae656\n095e9ff1a116ab21bba12a97e64cda9e30c239ab cef822a09e7817b01199b709b0800b786561c8c9\n2f948f43d0362c180d9c6c61abe7325ca8f3b256 bc2f2b12322a039efbcfea6a6830c5a6dd302e78\nd3052e53a884b02ac19ce8a11b86980b695334c0 63042076b429a597b6a0cacf4beaf9886c32dc36\n1785b29ef444fa9061e2bbb6c2452e86615d477f c7a9973519bec3d32e5a63dc05d6c447152e0d1d\nf39097849af0a94ce8091f089af87f79e70d4893 7e32ef9efa40d3af01a7e9fade4c4241cdd6975a\n12766b7d79bf32ed333bef0bc723d85241ef93e0 f889224bc7ebdd33a08ff9ccf0bbeec8bd8d81c8\n15d910a1e8954737ef00648395f23f65eeabe4e0 509aabeae1d4ef823439d049d061cdf2f74de034\n7dbe14ff8b1fb6b80f9c95aa4b97042b3ad508bc fb10e92a55010232907c6424b32ed556375c9374\nb5b8c0831c005762959ccd01451ca23fd937f95b a14e5170649876214dd73917220acc4af5d52873\n4dc5f4691bd971ed55300bc79889d32bea55693f b5b348fa2a12583c40f8274142a1b3703d2b4c8c\nd787c5d9e83de9fc72822370607b04ff0475e7e6 d37fcd5dceb371bfe66e7bcbb9ac2619512bb106\n514da263d63d547798ba3135e8f3063ecf081f93 1fb04846660bdf915e766bdef8c6ce0087707040\n53ac43c66d34a4a7de9e1d9271d071e6ecc8c841 4ab39502462d5bddc87e2defad4d6b53865856ce\ne52b35e524a28d69c821bb399450768ab25c5d82 1b1db84e1a4abecda094a7b96597bcf9868bcbb3\n84ee2838a1ca35021c68f611c476449c93391de3 40857dbd766d81103904efb18adc81ee67adcd5b\n6b57ab7c9b768afbfe51033809abe5672173b94a 657dcf14280c9ccc538e48d4598412ebf6ace8c5\n3a7dd4617320114d3ffab2fc66def499fa9d1d7e dfd9b3b1db31b92cf9bb7b08378698d92bb9ea4d\nbf799b18f4372a117034dd2d29a2a88f128e3a84 5f62f3f185a6f9f62c7562f3ab077b078c799ee1\nac185454710363564a6203f00a3f16357f6bf07c c9804af4e065265774396d83a75ed76b742fd7b7\n5acc52ab4cecf317ac2e05c611f2d8c37e6a4050 eea56a29ba9033c21609cbcc8b2889f7fab63f98\n538063d1529efb820b1b65f2677e154976d916a0 055ab49a675eef5dfb062e1602704e1b8211a81e\nb562cfa268356430c6cbef80c61133a08921c5aa 0fd7d50757e44581c52af6c3c46879732ce78d3a\nda6e3239e6989160b40ef1e0c288700cda8c6334 b5e8a4a72000973d4d9297e49004c1596c075101\ne27d8289233a47c8f02ffc533db78f4624530903 7ea6e014478e2c45533cc953a271cf50147a3fe6\n625f9bd7efe71d04d79c373fb6a3232309d21448 b3f9228506c351a47b05246f0f2520d567ddbfef\n71d1d170f79bbf2bde433a2fa49231426a498e86 cbc2e89d7fcba4cf421d855ef8147ce6f2f7ea28\n7919348e30b93812f4ec275db49fadfbe5be13f3 c1c1bab1cc3b1d2246f2b8029e62db839de53162\nb552cfd9bccb43ba2f6051730931277ba9e99e5e 229bba6149dc472e35a351e4d9adabe6bc79d7c2\nbb51c464534286ba53a2bf1541197ecde85f06c2 539659022d4fbc8544f5105835a3a5beb70f4985\n270ab192aa3227703c1434bdb82efa5d265f7dcd de03947b3c16adf4f60a8f1b17f4ec960b368b68\nc34779d8b20a40aed69d03752d3bd0cc0a05e6a2 7ed3bbb8f4f22e8fcc10063b7faa89e1ddbf3359\n4bf879e967d3f088dcb3480f8ef662017e37442b 3745e48cc4767a70898884054483f66c2dac4fab\n9bbc11ab43df258ef5b1b6a6d7a374b89e508c0f eff02df41bbfd85a7559eec343bda2c9b59553ef\n90d05a382497d731ca5c30672549ed948e0f7999 e020d4b1325a51856a517b826fa49d589676c289\n7ee77c416e8e1cd62ba66d04c22d090914652528 c583e91afa4eb049aa5a53eabc2399c9432c39a0\n9949adae6115f1a051788a8da212c25a2017e9ee eaad730b396a867ec7452593363cd45cbdbc9ae3\n6141946f75bb6b7b76d5db42e79bdaf9f4818886 3e6f2df1f117ab595b9060cb31903479d0e1dce8\n7c1533a0075f7819ac7e585338dedbdcd3920dcf 50747effe7059ee2a035dad9559b862a9bb294c4\n33001b93995a95674b4f6d37571a728174afe052 683d2a3022428346846cbb9b60e702f6cbca4bf2\n78806e04592d88471e221fdb6256492c7becf754 0ffd55939549d26fb241fca296631cbb87cb8954\nd097bb92a4f7d07980533bd1423351a1b6988dc3 c99d69c542d817cad77b49b2e80cd1259f394a5e\nc1adc180691e08663d31f22b003a048e156725d2 b2db41141873b28a91cf4bd76ab36292b575a412\ndc05416fa8e9983588d6b73416c208c48e052916 ecaec125cf59643a42a877b3a9e8fb0e3c779295\nf24d5b1c4ea047cb9ee146cf5277785844441786 5debc659c5ae5f1eaddf9a35017a2feb2f625cc0\nc29fca91943908c3c1cbb9302b39dfeb4180f4d9 25509b799a248929860769c31cdd6e7566598f63\n04492978c21a19c571f12612c71d40b4fdc588a2 a6c1263c46d7e80bde0f797a8a1050dab5132938\n8c19c4cbbf8d946a19a628303cffb56c4a85126f 611035512899a19f27f06145e1853061c26dfed0\neda9065a1a09f0d012174e34f73b8059ca8b810e f8d9558392b2dda30a13eace2d2aa31f970849ee\nd1b002e650a4a81ebdb82a65a10cd27f6a5cfc61 e871988234899eb3068fcde6e589ea62a157bd89\n82d721abb8403f796db69f03a37385419c14f323 fd025796963de3ebc89142543f13050ce878093c\n7a3d8c741472e1f9fab9d6e1f79c137702b1f192 49dd17b341264edbf4586b194e078373174cd723\nb64919987dfea55478658d0b1e20b68e38c3ca0f 872c56f6182b781622f6901462d9c810d38516c6\n96fe8031fdd9afffc5c1c878031498ede726f7d5 d84181069753cda21d76c81a52f387aeeb551e8c\nfd7afc1d0f2d444d4aafc59ed9a94fd49a5c7110 319e9bb22a3626c55fead06ba19ac06f6900d10b\ne7092052b945b058ea482ea9b7a0757c4907155f 08a5a524918adc1c4d8f98ab9faea5220193f7af\ncf66915a88da6848177c733e961c670a7f99a172 6709a74778b0793d5ad16571be3fab2bd568f801\nabfbcdecf3da2b21f068cf7cf54d4bc874d6e735 968913c57a44f6c68e3ab6978a9bd4a82e9cbae4\na2396abb300fed0402854d8270dbbf183ea70eea 81e9da0a0d2bde96a7099fbc079a4a9f5864c46c\n7a473fa1b7d80925b355a24511cef5acdafe6862 061b4d6b4b775842cd15c3f42c4642925709e491\n2a78fd165a54ba85b1bebe838287027f12eff773 b66843e3b1adcf5e07bc29a381ebdcd244276ede\n0cf6bc103156060fc17fabcd3acb8f9ba0275d3c 9873c02ff40bf7374fcdebfae9f194cc0545c79a\n72290572421f60768fc500ca7ff0e1580bb36d3b 52ab6dcfe6d754ab9935ec8e87b544e53f7fccfe\nb8ea97e9bcefe9ca071e681a44d84251289e9a6d 552f3e939e7ccda0e7b6335dfb8107a9af09e856\nb4cefc3299ed0a774670580bf47405a386d6d8ab e0f3b85ab59d9a0965bcd2ff012a24aad1d430e4\ncc8fc2d7c1718038217f733efe0ba4424a6d08d0 afa7f4b46b223cfd9bc82c973790103bd6c63a57\n9be5cfde4773f3d790f87695feeb776479e25986 d51531db8b502d8a96dd839f7937d6d8cb25a9ea\n30e14d9ffd524769c006aa6e7b960b4be1eb872d 489e6c3bbe65c58891feb8aa90cc976bd89d19e0\nf511d69585e035da946ce55535a55eb83772f4f0 79b2b946aa086ec3db5433f30bc37eb64f602985\ncd3e7933f6bc64190ad421a0245d6f19ca9c9ed0 fa95998b3d02e420791887449bd5f7ed6af15524\nefe900d29d7aa51f4e0b12e9c38b578a9121f7b2 44dccd95c1894ba45d3f44a07877df6bcfebdedd\na3a30c58e4e2f0013a2ca4eae4f5cd75aa629359 6975386f3fb26479d986832220ae6d780c427764\n07d709515cfa500c9212effc48e500400398af86 266b9a2d1586fab7209267fecdc08427610827f5\n11ad19efa5fe42ba70ecd405beaa568491161392 41bd9e1996216270318a198f4ef8b780a24406cb\na3a61321d4d1e5bd5cd4fb353ee4e88b1ac1eb7b 2793fa3a99e7bcfafa18c1be4f876dc07e1d16c4\n359591a67fed8a212d2d826f305bbeb763391a5d 6bcc0ff833f179ba3815fe46fd79abf2ef616cbf\n0950f065b11b95eaae581a73e38f15a20ec0f5b6 9513afb5600cc6dd9cc025798d04766305e7ca52\n88c502fa6138ef60fe049ad2ed7d0961a900a43a 0712f18951914719ad402e982fd59defffc5a3a5\n8df84b48d26d90feaace1bec45914e61c8581f51 43c824635c90d3f2d7054e69aba990c65b7a9404\nc247220762e607e8cfcaba5c0b468c3d8ecd2a52 54950c8ffcdea5338176d54edc83744abf682e42\nb31f4117164ebca402dc6d9b5c806a20e54f5a9a 0395c69bc6a228ceff6b5822f96786f8220d348f\n5613e69892062e018d50c6a9e3867f7a625bed78 08f8d3998b85f0e2a3fb7db61b82eab96c44d48f\ndbcaf2cfa76c23c2f1d7e8e5c3a494a831874e6d b6799c3031f283092b8f8230aee4a63c9d454005\n989d37a9018d6dad8c90b51e78c0f7ab7b3f1b24 7f45bfe39120fcb54bcab5580e3779c418dee5f5\nf4e69355580a8986fb38ff631a4b29577ca45065 3640563ae64e23f5bb6e4aa7a09c6dbc879f78d1\n125cd1f0a1616ed8b004359f0d38cb2385b99b45 f1b691d5c93d66a7ac5fb657dcd9f96b5a4ae78b\n4ff661bd15aadd0de9c1825cc69395da80e2707f f872bac0ff06c54206999a254826492008dca7e2\na576b851e574294f791c68fd20f41ae2446e188a c060395bbc5c21d8d44c17d140033b6c3def5b3b\nb43e156e721608ffcd0ad63f48335b47a4c93851 b9407a1dcf1555d1ed4d934bd0e127375cdfdf86\n40ba89c84485b67046092232653160bf4b2329f9 bf4c7f68cd7fc31d9395985d312635a4469b1d47\nb4144726a47a770ef78376649fd5d870b62aa6cb f1b3fb9d7c9a17e52d3d02a941832478bbc3de03\n2731e3a80d5799861ac07d3d7d4905ba90bd80de 395d292a6242bd21f5238e7696e9a152fdab6c7f\nefbb6d75ee2e23d915a878bc7bdbeb87449849c1 ddd34f6a395070c6c1b9e3fe69e43156aec8b472\n88605a66e9c7a0820bbb1b722080ba9790b92296 cab9a49c7942311a081bac944c0a5086a7349275\n6ff4902e89fc54b341361a062124d2ff1615e3fd 1ce41beb803bc0874e7af8563d876c3841dc6892\n1cbe5eb474bcd8d1041918b2f9ab418a40e7ebda dcb9fef3ef058e4c7874b0d43c53f59c8b19802b\n4352cbb395354b22ad2863dbf7f22cd0642b6b4a 21cd78253cab38223be646b8f1079e3c469224f9\nfd2aacd8975b3f9ba2af981b996c150586bf9715 8a33610f14ce45286e9e90feccae100dc7a3dc5d\nf29239d6b2eefcb76f3c76c43de716d3dfe68b4a cc26a46650a128aa69cd35709ba067fb752adc8f\nd20906ab742db3d162252c3f3049383773c07a97 e72b6dc973f0e000da3e2666a725882271f1a7a6\n8ec6253edd106954bddbcfde676f6bf71805240f a5af11d031297d79d67303b546549f324971014b\n86452220b57a201acfe6a4480df3cf0a2b3c301d bd4f62f5893a0469b2a888f9ef10281ff1ba5147\n8707bff09be5dd2776d89738dcb9e7bc1a3df1b7 207f8b746c16fc7e542b3468679c504727e41a65\n9cbfdb60474a51ea476a9439f4aed8ec9413b01d 6a6d5e551692db5949abafe0da883b7e008d171a\n49d3aedd44d6ffd6090aba9d2ca9c85db1dd0e9e 6e804882affc11803f3ce6f7ac49c9080ca56918\n04c44d8d5fbdb6d0c2d0965a132ca5daad2e5f61 bb4797838208ffed228f9a8a566a8d744cc8a295\n8abd117e3046000ac940fbc3c4b0502319533a76 94f4d1228157047908aed5e55af527968f51b334\ncb19cde009e6dff849c354bd1a926e6d8766d241 043a798781c342bff46d9a91167b601cb1019262\na7f3644e6f2db3ff957380229c5a24800fdb270b cf68d87667dcc3ded56c17fa144151d28ae9b860\naccb83c497ab8553ec9d36ace59f1a0efdcba992 28c15f1d0d3698035c9e4a2cd5bad7e95d2a8014\n569febfe69ed5ea3934288ab252a8b87feee2711 7e4ef05442169aea253bf6131960d301e3f52d1f\n245f7639522867108b15f61f758c0c84fd1ff57f 17b51fb79b7536cf0e9e67c66f13a92619895183\nc6e2ce092af7c6785a459099944bb47bd1beba3d 941650c1d3c4112be51a4b83f1f5639fe1eb8611\n731bb0aa51db783c98ff9d4f623594ef36bb958b ae2ed2bb4d14a89fe4d13031675bcb5d73b5c552\n5005c716ca88e7065e63aa7a97352ec2e7889888 d9eccddd4a340958419dc5f851ed64c4962a444e\n627f1e94619c7ea9c4b9dad4dac5b1d0e067c9b8 ea61567727dc40d1d12de426f32441c1081e3396\nf1949b9d7b4174871f34e15ede25721855953e2d 8549cd140ef8fc5b86cfd89bf4c67fce69e3d259\n391d4cfa220b0cb1639a4989fe8020d33f2ecf6a ac5342720379e99589f3eda18fdf66697dcd8306\n282dd1c757da7004485495caa15a53f9c8aa4c2e 6ecb19c2664d4de5d7f79d63f8a6f1e846a7c5a4\nbf1db5de2017783fbe3409dd0421dcda6b5393fc f79c14124c7649bd55f1c7012d017c857c4ff01e\n6652d4c129ea349cb6cc0b51e7a05ea243bbd6f8 ada65d1046bc42aa051519a3806e7ac6ac8250b2\n0698d689bd1c3b5697b94d1cb453d968ec583225 55ffc6b7fe726bb6940d50660fd4b1e25345156f\ncd9223ce2c5773073ad7f317fbe2d2005c3c3460 7349bd2349e4040be9aa1170d943870a16d5c519\nc592fbecda33db9e66e842cab968149f93365ad5 8fc3958e4ff17b1406dffabf464123f8c4683161\nac8701e9597537bd45f0db3416c00bb056225080 28b1f1a999abf1689a43698182abc25804782445\n7752e47f05bbbf2d3738852d0b9c702d35a94c4e 8725d58d2fdbf3ddf7fddb0f65048e3d4ee4d8d7\n3f6308ac64c9a1dc906ee9ccdd08349fdd3016b1 16fd1b2b5cecf40ab6951e817bb5d895ead22562\nf5c9206c4079b87e4efccb5e6d8044cd1fd2b6ee 2cb16ee9d520ed26cf955ff2a3fa51c217abdfb6\nad0c42986d38341b9f1af32af37156ae6ee4a427 bdef986145ef76adf86eb8b65e211686fb9d6b45\n7a9e03e757a14f4462b04dce9e0f81bcb922f9c5 8e044b64e4c8c00d86986a69444fe47e122bcda9\n8ff9979262435ab473ab632b65cb3748391339a3 607ce26ec323e41fd91e83253dafc02df4857447\n0c54619ae124492756995544a4a92ee0a7c689a6 762520eb20dc22b29b61864fdeb629573d03db0e\n378621923758850ed7ae2dec0d4f27416b5c59a4 3aaf218218dc70597026b4db77f2beb4168ab8fb\n30a660729ab04e8d8f8b5fb1682ab3958119daa2 ac4cbde465876ebc343147dcf1acc31d1d2d7961\n4396ae72f102a25310b10ea3809f5545b34f747a 2a097a103d8b44f8d48fff03f7181c6646d10be2\n48a5c7d69441d3a415446dedf18b80b5b22c9c74 24148f86e505c5e67bb0e092a8ee5954b82bdd66\n7a8a296bd22d563b1686502bb6c8261558c18086 6de4caeadfc5116fc3959d9ce1b6425c0630f4a6\n3505da57327dc1dd25863fadc7d036f8a25d2c93 913be06bb97f45f9bfe9079452b7d830e81fdc2c\nc59d89d01b4b75f3b56d875ef7aecef214fbc850 45e3dd743616502cc48226c118408029d3b866b3\n1376e151fe05127dfdeb513c6b86e3381abc3c7e 105f2ca3d28c34864dd4701bfb15bf6a773d8845\n98b3a0b4c6f233953612f073c3f9a47024682ab8 4534f9b80abd4191a7ffcc7dc6be4536afe500bf\n7ea206564f94e3be688a08209241944d37acda62 c79b457214a4706bbe118ca603014c61925e8e1c\n568e1c1bfb6c01d31f27548324360e88c63e5c38 ac88b43d83ff751fa99070e5efa638cd2df95496\nb1432f97a823131448a0746a4efff626b85296c2 78bc4a6062a5d6aa5883d864cecfec5d4937215a\n5f383a951e29548667ee351ab957414d951786a8 d7dd443f493ef2c585fc0116fa90ed8b073ccce4\n55642c97702e99e78b7065361aa2e89479d17024 b799c56d65ec7599200c59bdc25d6648f7554cb6\n6872100d7c2b131c089a9338dc3a605d2ca52e0d 1026a3f34e51d0e65a8b8ee7890e2afd05cd1d5d\n21695f4c1c5045973bfc266ffd90f0b250920417 d16ed7859ac4aa83ba904220b583f548b6ed2189\nb4622a04936a7450605978c24931519cfd3168da 31219ae01454d90373248c7badef43cb115410aa\n10d6072b04bf48f727b9b1366a67eaf4708c62ed a3ae34e41fe3502be845609a0dc774f3c4f5c0bf\n68004807822a9d241ad061334e8aea488a747f23 b4af03a1957249e8bd9a87e8351799ec4f0ac5f3\ndb1b1302082c84cdc339cc339a15dfae799b1e8c ba1dd8d078e939edfcdb3986fd2e94173ce55da0\n2c07466bd9497f1325b768a297bf1a6acbe27476 a64c92f7617c67515dc858fb83aab01a62522960\nafdcba6886e76f28059a97cee9ede538144e2a9d 491fc20b57dc94ab99051f1314c18380e45b574e\n8efa80d03ca4db0925d7ff7027b7fd92f8b85341 8dfab6c886aa9971a0647fae22b65f21cde76bef\n5ac825826b86361447225beba874a093d28a480d 6adcee1dd0604cfe024fe9857fa614299cd71687\nc4a99dc3fcc63e204d4fc9bd00968682c9ca8428 fda7c21a52283555713c3cef5ccb52e6e3a57df5\n6347a89bd2e57c886137bafd279cfdf9e27b795b 0caea0b359328c0d5bb9f1a1960df49e6ac07fe9\nfacb25534c788cdd6f376c54df540c97bc921375 4f3e80feb30b9bcddaa0f8629c99e12c3283b55a\n8943a24699cf07564e7e73bfcf4d8239d2e771e3 84baa0435e8728a1c644743c13feecb2a8c1d422\n644bfbdc8a188c86e8b690e34f3959fe918809a4 c8a0eb8ff5efdfd3948c0d010d68a3d887abd13a\n279b375bfcdc0f45f9b30f59ead3d5f8ca59bb9b cb39f59c5304e5adb40e40b7d112f2607d9290a6\nf6abc6eee943800c87fcf687ce09c895a83841d1 3ad0a2c83523300c7a8f2be500c4d16a8f9f398e\na7a4c46a5c7aee309344666329789354a63f27fc 03f071847a110b7d54402e616805a4e55049dc04\n4c53dc309a154bb548a4503a7c3c228fcb686bbe ed79373e4c14ec80622370763cb0f5fd3377143a\n1a0d20b1d67df67c7916c7604f6da6f6eb1f3380 16d3ac36e26937fb607a56f78c091bc1c58879ca\nce78b18ed40f1b7da5617a18178553c21f6b4d6b 302f7603eae286b905646b05d7d21c6741d7c650\ne3bf9e66caf4be1eda21ababd468d3a1ebf9f5dc bd55e5d74e0c6e32a1cf3ed0aa98fe7e2853ac1f\nd96d25ba9c6e02e8c1d89d154c363352c439a383 2430a0b59b91d80266dfe5afb74fb63b48a15c52\nb0ee6d4b954eb300a3cbcf07439f5f38610fad1d e037d35a54832aba5e71e2f3c41707995e23f2ba\n391b132d857b67a38a8e3273ae2a6351b6527c07 f9089d9178cc5379ae64dd2a646e26f9cfdfed35\nb1f3067bbb21ac23320077a6959183901372c3e7 5ddcad631d27bcc4530e594d4e4ffbe0c1783653\neb16938179b038b8ec5e0f606e4fc654463100bf 32e543cc3de6776d651ecab89964faf27e4c9e98\n9392d310495e8ce5e010529b80475fd011d40575 999ce9e78e59d56de4fee9c458b97a96fd5c3f13\n474b889e34731d39d2dbe8bfc57255bc40500141 55f4b9db89604d05678f7bc8e495c0a0f35889ff\nd6b81195640f26070dd3570a138ea151097e032e 9bc825aa48790f11331a363a7dddbd11b245a8f8\n71babbb00ac8b83c32c0127851b79ff77bb77823 a1c60e4b1ac5153c5b4592edc65af37363010020\nf5963c5d11bac76f8d64589e80be4e24a6b4da97 0b7a84f6bd6b980c27db7b7f11ae27dafcf492d8\n62089d2ac4909a227f2e94bf1f3a5c84ee62169b b7891eff95c75dce5a4a3f84fb38a4e51cb520eb\n70324b0917151000c6952eb8eee678ebd3e9b7ce dc9f8cb140080dd7db42f8ce83d12a1482647e5a\nd7969be2a92e25375df3d8c6525a9e596ffba371 b123877d1ee5fdfff7939f7c254fb1a074a64840\n7c01d2bc8b4fcdc1c193e1c95a6d22b71591c518 e33f7fe8c25ed2ad78d221337d67ef5c8385b419\nfd88be3a4ae518530ce7ad2cc8893acdce9f922b 064a4b9ea9a8de59123fb4fe6017fdac614400a2\nbb53ca92828dab344bfe4ec7e819786f184b8fb5 f0798e10854e0a168130b260e5baeba325ae3ead\na95d75f094502efbb44ba481294cce39adf243bb 0127385e8c5b02e0b02b89f4c41c1e25f31852db\n58a0885b9735a7a9faee64c9fae18b6b98f89a4a b9f0f89361b859506326889122190b47ae097d51\n74527c282d2ea51213b1ca645751b7c488a499b2 1b72474162ef9e5031d1e638d589dd24e66d1e31\n24736927a2787097596f6e4dd82f56b785faf040 c6d23037c01948f32a9b2cdefc6ab6310ef2971e\n4015f559460d2ab5a74e36cdb80af3bb0ab7c646 df500c174d302c8bd4438b584307e5687b8a8e3e\n7ceb572c4b004b3e3542dfe45184fe6ff3a599ae d719e32747e176dd514852d1e8feb1f1d7c12ee2\n5ebed09d204aa9a14db23b37544763ee0419d9f5 e43c506ee973220eba1f13882a792f8641885e9f\nda0ea477fbd730079f0ee4932a669cd68bea1c4b ca5d7bd8e6b0278f1105255e4dd98087c3872766\n70b895561593c8cb6feed3afb3b480539eccd08f dad9d048ded5f09b1d108e101462f180423e360a\nc7a8bd5299bbf7ba5d8778062d722115e7f7271a 93b676a604db6e211acccb40b0fee426cc15c59e\nd5ae159ea7848c4dfae5c6b6553c1ee4911af568 9a9cbeb47ee7127c620c550ccf10cc77462fb157\n9d5281b01c6a3e099178f60646e6cbfecdb348db aa82633748052a077618c193b4ad76e8cbbd8fba\n4adc4f84cae15c77db8cf6fb8be9aca2265038bd 75d4f5830099068a7b9b446ac3caf81de23e5d76\n21e81fda188b2c3942331368b35fb1535393ccb6 eb3b303bf828bc2c7a13809047a028a5e5817be9\n456ac840b003301a4c90e4c10242f9e3d5e57be1 8c72f427150310931280eeed27a4542926b81311\n60c14b89ca884bbbf2ee1215573337b4967728f5 683364a4607a0b4271eca4427930b5218cd1a6ab\nb037ffe11e64f3173792df703d173bf9e486c37e 00a3d447e3a5f16cad00603b753f352069686fef\n8bd10465da8ddf0e838acb3e068d213c37dcf759 719c179b11063d5af9852ee80fd0e6937ffa2ab4\n8d0dc6faafec2109768098c97984ca194ae8991e b90de4658391e02669e3cbcd8aa0983122c75157\n625c8c0f6e90a8eb4b467e9f8354842ef81c77e0 edb6a1b7aa491bc2a6d1d328ae3a48e942994536\n4751b22fb09074f01386542a7b44c62a6e347073 7512932b1c0728e89120802bd319a784f71287ad\nfc3861f0304e0214cb39c7e7b49d681c53ef73cf 86b602c4865e74fd7246fff783a1d5401557cc5f\n224e8708d146ad3626bbd7362d90130c2b09335d 2ff69762c12c0d1f3164d05199a8ee831eb0c138\nbbfedb2e79108d2002287f336f0fed94fc036649 f4b0023f0b65509751913fe89e248f9752cb4c51\n262646f0bfd6bc50be1f1cd7f0fb9720ed08a314 e5132b1f25ac5c2ebe66ec6df225e45d4544e458\n5740b24da21f55b0d4843ca4a76e7409aeff452c f62606a3c33649d52cbc72fc15f83706ab589c00\n99b43aa2a2f349c0f7c862c222e128110a8e4bb3 da3c2f1c25fb316b86bed55a5e675c6cee8d1f89\n493196a1934274e460ed6c3e556569af5d75ccb9 f301a3fef308bf8f50e11b2eaf822a8c34991bc6\nff9066af9b4178f5551e0d1550adbc36e066d688 4acae8943643d6789ce946651737cbac7cf1466f\n9d2127e10cec48979d741f5252546a72fdf2a905 a6632bc09b97c90dbfe37460dc8d0f69f986b0d7\n92c0ae4cddfee6ced72a20975bc1a211ff32ba3c d79ca28635590bfe18dfa73bcfff657c0aad5aff\n9e36c7daddc200be43a8c6fbec7e6b1c29c7e146 8c508dfaeeaad2dd307e39319940307a5d9bf1ec\n7cb973bdb1f7ed8cb36d1c742ee1ff1ec9334a9e 255b0091096d2650c2f889f4f011c16800fb2957\n0d6e122b8993de95b18567fabfb7657cce381003 a0947244d558f856aa1025ad237e20a62dbffa17\n6b1dc5c67a5061cc824687a25d77352c05e80512 85ee328454d92c6d736000d0b771ccb66a5b398a\n20dd1644f4c89ff87d06e278d52fcb1b81b1f3f0 247af7ec7ee2841847af98f5c10e278b6f4fd3d6\nb9092fe25f50a6282bce2cf12d63bf84669d4fa0 703494f4b19a872efe0b4cc5f0be926700bd5ed5\nd933bcd12ec1a1b9f5d125f73c3760642c1aa6cf 3cc16c46d96d9d5c630ff26704467c401c032cdd\n26bcb4366c1599b36fd6666859540755e0108ee9 ad85f9119b4375d70d1ebd91f5c1858d231aa72d\n95a3f86ed11a3a2c7ccd7ba8abb9df9002ad6b1f 95e9c7eee9d781081870bb62d995a23554261db4\nd1b0c08fe0b1397010b48a911d638734e38ef7f9 6be4e07e0ff115d04b75daa8e328363a2c996fa5\nd19440dc908e54c9a2eac4ccf4eeb51e517d740b f37312d0de2d96b8539aef8027a51aca78a777bc\n621f8a6328cdf65c5107c218c2e362e7d8dcee0b 083ddf0ebfb8f30b5b72c980a05c07d141096cf2\nf77bdd568ed99d8abe81da5c281f5f6159d1c1db 0e76838172b8215f88e7c259c0b77dfad287888b\n12246e572b9857d85042a02ce4fe4b8379660570 8c52fd1227a1413c8cb764f2a5ff67c791319e5e\n17bd7442795f3b16534bb1bdc9ae5c334326077f ffc29de0d453f3a735abb3eda7624cf7773f6c9a\n0d523b7791125b03109107729e3e038fa2179432 3c750e4a12e119bf8dc58d18d0e58ea52a5fe308\ne597f8c5620c5dafc5b5540ac49303f7da0551b8 141c1c062889aec59cb941a67b3184536c666394\ne79c02c590db0d074d492e0c246c9183acce70a9 e685f937bd4fdb57b48e380e8981d2af61eac08b\n2ed52ba338b77f5589f4e565ef60117c8546fcc3 00e8dd4ad379b0bdf40120ddeb6049499a3c9a30\nbf060a328a3710d9a30c8c48a913f34d4f641f51 a7ef50bc083c57a2f7b282d090f938636dc84a07\n1a64abc9748ac9aa92d341dcbeb898a3df9c52b2 ab9b5bbe4b999def462971ee1095d0cef665f52a\n5f2b4360dc2a03c61704ba61fb432246a23801c1 5f966a3f9f1d0497afd74417a41d383b039f42d7\n6626ac62e9c28942afff331408228e2d657fe8a5 bfa45f81a260fe9cadd27373ad43ac0dc3e244e3\n01b77b49525e087a5bf6e28a3f6f5afdcb07c951 2dd70e1f0642adbc4301f1e114c15567c0e2162c\nc8d4cfbb775b6ce344a62093b1afb7540de4f648 0e0b50669022e883f13abee26e0eb851da8b0e47\ned911e756df16d67027327dcc5470a6eef9232c1 c123888156c5ddb6bbb1066a9cb4fd0a2e1a2c46\n591c65d8dd0a0a4894ab11247e0398644ec897df 753922c398d3bacd71e419bf8e293cce0de3b8d9\n3f73bf2e6f65f03da910a85448e2a1e4649356ce 01a0eb978743f4355a532c583f32fd136aae5b2e\n4cf2c6abbdaaf0e01190f66202cc28b2865e32b4 d67a33fa63e733a36fe3ea0d425682819202ae87\neeefac296113d21c1612e08043ab242c77957e8a e7ebc75c06b2c80f5049a2f39971907370355eba\nb186e8ab7582a11d54606901286d13f940a8b8a2 9bd2c1c4b51b8d576c688e188dcdda04aca15e3c\n677b2fb827bdd4df35eba28d7a62dbbf290fac72 d681bd9cd2e59fd2ae22ad1f8ced08e274e8772e\nca5174d6177d901250915f15d64e85433c5c9d41 93bbc5f8850e27620cf4c34fd59c9d50a234015c\n7828d11b62eb4f39de72e57a8a09ad885a11e686 bd9ddac7c072b30dabe706ed7c7abee112ae1bf0\n2660c06f969d38d1493dd12400f4dc90089a8c38 f286e908f2c22bc4a421a73b595fc5e55ac6c727\n17c4f04b15e7efa2bcf0486ac84ca2e4e5a60635 7e10d2614e558886b858f3165dc4994e05e0028c\nc8b24119bb7a9ae1a5a38db7a2d20579e391da15 96ff41ec13760d326a43cb2c2f44b31e392799eb\n3dea17dbda0e913d57a68d908a788a0048c8707a 9cdf433a5e81b86e6b8c49da25d141cd2b3fa4e3\n50ce6345d81fd6c2ebaabb48ec064ea000742def 5850d03fa3bf6627657f73fd5de5e0dc959d1fdf\ndea92640d32953f00af1327da955af327d8d883c c6c4145cd0ad9660f05a6391b51b4e2290fa43eb\n04a2c4f448fdef0c507cbe5161ad3f0802e837bd bed15fa7824d2c73c3e14985c42c1b2cc4b35c58\na3e5ecce45a02429fe063f0f02b125b1d9532f3a 48baa8132035a80b26137188c15a2b31995712e4\n32e456e3e07f819f7f74dc70201a950bb8cf3825 92d5562a9bebae343a2fbfc67e1768c93b799a1c\n5a04a8dee5528f253523999c0fd91d95f2dcfe51 9519873223c356fadc17d0c9313773d82b08149a\n506a8738acd3574ab96f12bbff5c84ec977c8ab6 7e0f5a3aab814fd5abe609e18a656a85d9d64012\ne07375df8ded3a58d84c2debc3c5224578de54ff 3aeb5103223ee568ee0688090c3d567caa754354\n2f70f1bce80809477399eed28b7462830f9e2b81 e2ab939c6a139f2f9d34954314963372786dddbd\n7aac4cbb5fc5e4c599fb2cbccb75dcb6b4ab27e1 b6586ad4a22f27c9bed937656073e3584c7876aa\n11d5abe432aec2067fe51ae7c738711f59f3b536 57e6f55a90b56d4d3048719b114203e3325bf844\n42d0bcc41b3101cb79592d2a207c3093ab3676db 97fc1715f6f01d46f62eaa989e483d2b2a0b15e8\n9e089246075e81beb6090fbe31c0480defef8f10 2fed952c7431db38aee35a123a282c1af8f7a383\n370304a77fb212d00a4d64834a03a186b12fbf57 7ac8cecc62d0ea82231a54eb148fb047df30e6c5\n102a29dcc1e6d03641eb23fa7a43418d785a1fe6 63c706cde2689882859e48332141512421da3366\na3afb5aa4b7216215a7021077948ebc8752074d5 ab4502f592da844e8a100ce70a9811bc7a839fae\n00b76e103b656651d9d03ad29a8980ca4158af3c 1000984448254de2330a6ee9eebc20069f32bbdf\n9a6e663b48e8f6755dffa02d49f743bb9de4e1e9 e4b8290c3c2d768404397e21b3d77943799a313c\n75c104057299c1f06e0e595362b4f4b56aa5580d d39751e72c187dc9beff00d24355b290b6b5b024\n4b0427c348caed232d27a2011191a503aca22f02 3f2b84de9acc6d3f93b84a84ea25335ce1af2033\n2a9f37bb4e3bb38e3c947b1df3c3592f0957b1de 65eeb7b92f6915a2f3b89c319a69ea0ce8d7ad8f\n27bc1d8bd1cacf979513b6aaa36501f2669c9f6b 6dae08d8e75dab4f3fbe1425c887c5a098636a36\n1432125d1fdfd15e03caaa79d3e078c464734a58 1a1cce5ff017df165a052fa702d736f79e9db9e6\n6c966ec54b5be79ead7a3aca2451b99d7b7f59aa 525b5fea4f22880103f75a289c6e04d9d01d7751\n1fdf4f07589c77ead555bbba4fd9a0493d0a1b61 325cf3e0f6a75f4c1128962dd3053177c072cd7f\naaed5fb7b372811e2bd4c807ea89c22f944c1ecf daaad28d0127e036471fa8bfb4d9d25c5fa4f2c1\n983dcee4297a48e3b2fcf5ac0b1066aae2f455ce e480188ea1be9dc34383ed5fe9c6b457c54272fb\n0a9126454a78f912ab35c5ef477025d45e9d9863 d26587eadcc4d06b464d65757e3a994312d5dc31\n84f4318513d561fc3484ccb8eec035c6d9d087a1 3bc3e94127c593d2088811c3ec66d7c51d08d178\n303f82e1b544fc121cc47e6429ae45122437fd65 11540ae2b143f982365c367e032c7a37bded528b\n865b2eef158d8546a12fedd374e6e19b9366196f b04c76ce5bd79f4029f7806611b3215e14c9521e\n0a3a84aee120316ac737770ce545797b11155ee9 a5db69266d7a54d798769c82fa25ea94855c1b52\n5b2bef259dd9e29c4f6b2fb6c9004d0d25254b68 34dbe1cae76a8525fc93fc44f73a15402cf4b391\n5a839ff6092457de00ab92d29b7bef362588b7ba 9a33ba41cd2c6bebf2fe84d6a81cf92944c0dccf\n702242b3b0072babd43a1570a3166e5930fe4fb5 46d8820c19b7b29493049711c02281bffcaac6dd\n0c129416fd4f46bcd4f5a0e309377c6abe96be88 a4badc590f9db6fd69c6089b07a59f1bc47e0270\nb48bc14408e664326a749517f348da9cc76d8806 03994a44f8e83cf82eb175bf9abaf33d69226e01\n9cf912de1c8bfc1e6c4d0f00b341fee0dcd8218f 8887c51d36f1396cb34447faea3311ba5d3674fc\n972772859b4f6e2ec27247a0cbeaaea79875be52 453efc1eb4f941ea26c2b983be3fc7682cf125f1\ne1273fe2630cad98917974b2e050aa6fef283f37 a94b0e472c75118f38a0b3a0e921a269c6e8af9d\n0efb414d13e689ed5abe82e4a2971222c4bc90fb 05e17145ceba20f683b30625ffce59029e304f86\n51c320088b07c7546f012957d1c2fc433ccde4ef cdaa63c96dc1807aed2deb74d8357132774492b9\n353918b26a9e7c6713848e0d47885674754b4024 c2eb96a54297bf40047c497a5f657951de9c45fa\nd5c6290a6eb276ba5ddf2ecebdde1d0e12109cb5 5475894b1df69eba5bf33a46cb3fa196f8be29c8\n36da6cf45d027dbc5c46ccded9bd90e91614a78f 082412a61ba058cd50d3c5dcfa3f43e30d5a4b65\n08fbe72341bb775fed050f6b6e480b8c8e6d9cfb 45d726cf03bdb34d29086ef685e32fa4a066c080\nafd3d0bf5aa5ba78231fa575ed2160e077aa810a 276447e81fe291d144d9636185919bd8062389d4\n84b8e0ef7d2394809d936a6bcd30c1ffcac3def6 4b4b09cb2e29c6b24bcaa482227143e7ef535f14\n37e5c5837090826875b9acda86d5f5bfaf750c99 5c7de2e57f456e4a04909635a320b2314a1048c8\nc4713651903503fb37eb99d30738a3044674efa8 f1d88123cf9b706b3aa5febb17ab6a6fb071e28d\ndd693377d1336e122ab2297bfc024da614f09a8f cf3c64c7cb27885ca5dae848d61aea039b4b16b8\n05936f5e7de2d625a9644579388d0fbc86bfc7d2 8964e93f71dffc1048287cc59d64642c4f93a27f\ne93f30eb41906a3b0299f204fd9fa373ea3018b6 cd8f51f4d30654f8582be7d97f9cecda2314a07e\nfc88c92fd6b0b17e0c19aba3e44cf482ee2984d1 bf266f57f19ea19960263c3da506e3bec21791f6\nac30e62c76cf1b2dafd5885fc11bf381133c4c53 301a535d8e1467d9dadfa7b3ca57938802d6bc47\n5697b090a157b0e5771b186ec2cb25084655fbce 28c7d7e51c30e9dd05f7cf2ee5bf036ccde45774\nb9b460b59468a5af38a52dceb17f11331de97006 d45f54be0deb11194cd9b54b72414a17b18bc64d\n1fb4848157edbf2b606dbb7d94d22fe990659ce8 bed6479189457b3600c4658c71a297f01f6fe074\n670bbf95d2017e3f543412d22a3a66d3a01efb74 5bc35ec2d77ff07d8685533815372b20f821b47c\nc2cc8bdc2ef3f5ae0db2eaa9412aea4bc08eaeb0 73e091931d488daed35e951e5d82a3f0f5a749c2\n0e91b08ffca2f2ccc24575242c9ea1345d3ac094 c6208688b58e971f46c1fc82712795f3ae96c1f0\nb7e05778662732e577ad1e318cc5abab9dd55c20 b25e3ab2123c5cafbe5971efa5747c0756f7836e\n67559cf7b969d0aa3d3c00143cbb85d6cebad44c ea57dede79d3cd62427e49f013aa87de2b35a110\n6d312891d242b70e518d9ebf0835ea7ea0c85ccb 1c045ad0f75d1eef48ac887b5eb5cb4311a8ffb0\n966fef12de1bbce3254df9f581f4a82744bdb47f 81f6528e904785a4c3c6c0fcd54c9c209f1f7c38\nbaf4e06e53d87ceac48ff45300899cad2c656212 d327539ed4f24de3086a438da1cfb70207ffd38b\n4a84331229ef5a0475cca3215927dba14a35eef8 6b235722a5bf039079d5d75d2dd888de457efa2e\n1fd92182f0bcb77f3c9410b0aab16a484b8a1248 b537f4a466f64f2762459ea9636899ad3952d0ef\n0a49a57a989860a37b1bc0e0292d9dc630d75603 f07d5da5079b97de657be0be8068080a08926268\n630cad933ff3dda573f33f5483c598641804237a 055814827219af34f1eacefead84e23b7e8cbf56\n15c9a9fa50cb8d8df4cde5f43ece3eb6e7aa76a5 66f1e515f038745a2da2b64fd1e07143516c5170\n6b6f40c4984d55f9c29e3d15dc44c965d22ccf6f 64a834e332007faed4a48286270cb549b55e3987\n4b11aaebbedc3b0028af634d80da6e308c4b8b74 2dcdba169eafc0cd4c17fe2472ed290f77e097fb\nca250df5404be048f8c06935015a478370a7b973 d3e1c7e6b520ec80508f941d695f023527f848ed\na677d1b3a6eaef19e82449d494097ffed8a32dc0 d6a0d9cc03c53078303953241193895420be9f14\nddaa7d9c71eaf137e8bce3c61485c7649c35d17d 7693a7d6f5a7645b1eef0b97b285af78e4573ae0\n955beffa4af54e2c3e9a9bdf0b4c67a5a1f8e313 9de7072eaa913c0bc590c85b583440a54c109b65\n45a2523a20181738450f0dbb49754963a2521b31 da2a3e500f54a3f974a8346da3b918acc1a86477\ne1580841fcdee3a1182fa034e05e55ea70b41266 ef05cfebfc74065a50902980b887c8b95247b752\n5c819d90a81b64411540e47c9fedeff51b38a1a7 87e50df9aec5614c115d91b6f12d45fd9e2645f9\nec08f3ef4229b3b72b39329468432e5af9f1a825 ee7bbd6304418136bad436cc1981b1e1d2119fbf\na7acbff7db4fc439542def8fd7b49527a1df97ac 3a1708498cee6f6f6c188ae14235d7b8a8ec73a4\n45f8a74feadd1a8536301108bdd6d7c7dd79c010 aa053f135ef263b5c1686c8e66fcddb4126e358e\n0a51127c8867e18fcb1ee8d5eba6eec4de78ca50 f30d87717f4d5909af1acdec2b8f2d113cafe8ed\n77dbfc08a19d5b28e8aee770f046c784655c978f a43a4c93290cdc4983430c123c49c003bd6bf61d\nf6f8adae587c539a45a41761f0b23ea0f194d220 588581bc8e17d42230347d0e0ed29f23f9280198\n207882ba251f457cba352366569df69439734d43 b9c1a580ba9d3bed58cb37e442184df90f05ce71\n0cce867a2881d6ccafd7c94f83d8b569e6e38ea5 cb1ca26e295ec90cd27c71441f5c0be378e9976c\na78ac0d0ae85f8b53d07a61036b9e3093282bce1 95e1ab31dba0785709e205aa694b815743c8f24b\n56f90051fa1dc62289ada94b1d46cf4e9eefcd98 da357bca22b7bd4cd100d08c6e7438d23e23ad1b\n8697bbadb5d40ca7b54441a69869245aff8e16fb f6fd610c09e2360525dcba22c03336e42a9c2ba8\nd893faea14a326e5c9d37cc9b7ab9e12de06467c 0c7d21c6a77356b4c7878d4ba3d1470391abdb9e\n2cbfc3c75973729b05ee5177bb42edc74c8886fa 60e810d71bdda7f9b73a890354aa10109f62de5f\nc6fc3b117ef4cb1c0f012a4112999e7278b7a044 97c915439b9c2f244d92367c6732dce51ca08706\n2c08223ff96f42f509c0b6a986da2ba3823a80d0 4bfe168ea9f371734d80f7fac37c9723376b852a\nf26b923d2a8990fb4984f98c1f078aa532c84c69 cb07fe0c28421de8f575c6af708a9f377906325d\n24404dfa88089f28d9c91a0db06267a0aaad7d65 2522ace626439e489fb51a0e23bfe62359629ee3\n8a3c251c195666628b7e9aab3c28e6fb3df1f96d 530c4cc2039037935cd6fd9e4745d71122abdc96\n2dca31f98d88b0cd7ab50fa5ed99047535ce279d 6a38dbf8281d10a093b69fed3f48c8a5e27be650\n55d41f8dfcaf29b6684d6a7ff8d270ef848b5711 9e3786cbac098751fd6506987c960801c4640eca\ne149fface510c7cf51b61c6fb0818a723aa1fcf0 d59803ebf65ea3abad88733806b0cb99e1933df2\neb4967173759356ac44480b4c2c47bc7fb4697af d38f0a01eec1faaea3cfbe598a22d8b56a322198\n87d64cd3ad689ad031dff3d2aab36b724b651b6d 6502e3565fdc0f69a6ce4db4f2d3f5266e71932c\n2f59841318e57c2587c32b3854365e3413be0761 51b35816a1b9c65bc57eedfd6851d74dde1b021f\n2062e44709820ab2cc5a912be0105edeeae38215 d37b2de58330323c94182f727732924199cd8206\n8cf4938bb0693cd952e8ccc85c039680193193c0 7e4b01c2d57e7ec91f40c3df02a417fd3ed4e2e9\nb79319d6409ac7a0302c14cecd8f5af19d52e587 acf2ca8af9a1bf9e57b3536943bebcbceab4802f\nf1cbb8ea128044881b1dcd4e3b8cff8ae4a8f388 b736f753c23993cea6b02e1c86349e645b80726f\nfa2040b2fd35096a554607c7b41b64744c8a00c4 b145167bfcb51f5df4def618fbbe650c612e8fe7\nda2ea390a3138eb9e83aa0a6c2d690d786998c11 d0619f89ad66b8ccc23e77505f5b360f5ffd97a2\n8a6a465c9634aff68bb1ab3dbdfdc8a7b0d607e9 5e0183dd6952e59ef258dd4041b434b25b18b8b1\n5000611fad20d12acd2eff5636e2ad44bd02a61d c9419daee74dd40864320b0c9877fe92b922d9ad\n751895ab08ecc2cbb6e0f6b9c9b787e9985d4130 51fed3b2d1fd5af76133dcafaf3f70c60a7dc6fe\n9f3f5136ef939ffe2a9923115b8fd29962dbb789 ff996e3b4a1b40a2b219f2d88d48cde2696cc23f\nd3a1a41cfc14cc66a75d01ed227e336c2a7c374f 9d600a26f5c5142fac7b17d60a85ac4c144f0dc9\n7d90a0f8581d1bd220ea96f596c8894422cf3268 4ada8dedb3dfe4b6644cf711e03c5c050d22e077\nfd0c4c2ec56053d61acd2eac9b91cada6934dbad 60163ab517db705e1ccea6c9f98b1db29aabd068\n732a321080320bc35efea2d56240999b48733d87 4f2b65ae547f61e717338758cb27aea16de24534\nbadca4b916fddc572c8cfc930e79c33c9cbe6fc6 2765d01a0b0f9bffdf6e8db2672810f01469a57f\n3e86e2287c38b1d7e719d78276d6ad087970fc59 950b7e98aebc47ee4c40d45cda4c2834044800ad\n5eeb41e607d5111b7f0069eaf9ae2cf0c927ba17 b34f0ddf4e2549c0d1fbdf840b09b3048cc8a504\ne961617aaa04664d9f732a2a291d2ed45d8bab2d b917f9348b341128d874a94657e44b5e5af0bac2\nc8c1f885bd6e0860d42997a84a870535e8195ab0 40d27fc8a3acdab0ef0dc08de9385acfa5996550\n41f851c069a5d17b7a7ac2da203a534b7aa1cd3c 0606371f8d7fe1c80f0bb6d10afbc5d87b345c31\nadb60cad0d64b0ed15f3fb0b7fdc96d8cfd78cee 76c1eed72a77ca09cc8cb062052bc5360b86da0c\n54ea0125e98d07a7bbf3665673b502f2c69634ac 21f10261f034d691f8892ddbdffb9009c0499b07\n9345c32440e8300c8b70282628729d41063c93ad 4277d98c644e4f3f6fc31bd7de02fdbf3f8c06c6\n237c6667535e624a15cbf0c9e9eb3416c507c320 92d93f61fc66a8d5eb6d88e079dcc74417861750\nafe46757691a12f198169d83bb0bb8a51549a56a 4bc4ccd928bd8cbbcb2b4e63006ca1c84acf8240\ne1c5150fd73fdb64c4b34a50ccb8d8ae1c33607f fde964bb5355400bb552048737570e3f08c7506f\ne844e6dada91e25511a3ee6fa5b0dde832d74246 7eb4b5e7ed6a9dabcc7dbd58716760454b5c0c89\n8b2bd33a6f33ada632abcd10954215cc294af8bd 3903089af1636d70f744a4b77ec3eace7be9db1a\na5f6eee9386708a3e72685c0d88cd306b5eea789 6da02f6d17a5904cea4358c53b46e12964bba353\n5fc9d45794949bffe72f46ef9b8e199572471b3f d4e566ac3614a2412771357a5f8bcb7f16724b16\ne7017ebae9de6523cccd998a3dfb1721fd76f0ba cc24eaf370d63dd70cb70f2385ba39ccd90c7f79\nde05c4c4f3b90bba9e22918506d33bbf74163a9f f41c671693dedd4b6e7c9f95ec9927dfcece48bd\n2d0d36511940c51a952eba5189461ff5ccd908bd 1d512fac7cfcb4be35ff2affc153f4e63702b8c1\n1911c584388b5a4325fa016004454fa0f5d29100 fb78b4fb0765446f495b7ccb49fda5c7cc841961\n8acd131207adc4b24f57f5bec198df519b89cc61 1576dac71d6d1394b48dbc2ca56b835e60c5f04b\nd7e16657527353da73271036d84b11521aaf5f5f ca5a9d783a30a790963f5f8c11e9c7536a777d02\n11c5de2a7258f20de49d4cb5b1d89c2c3aaaa48b 4c4f65ed17df04584e306bd1c6ba8c6cfc68c87d\nad7c63b31b9b9cef35827ae0a4b373b2395c9d3d 083a497c84dfef37c87e300d074063b4bb75f630\n386b910a0d809965c152cf9f0f180dd060dbbba1 584406f0c811e1ca64a27d224d24ef03ea852220\n31a15a22d12d6f6e41cfc1dea87dd68df7d22fb1 a715a85c598ca6111529d886b78ebd8da15e2cbe\nf1bcf9b15d98f060056d887d539c6c68f570af38 e34a62971804e8da1d3fd94848381121a7b0ab27\n57e9a2b110c06c03c2c2bd50bcb308588b15e684 52ba55059d675051e3bf407cfe7cdde0c55ea021\ne81a623f5c4f0a926587c4745998693c7c054dec 131e213a6278559e8322168a9d20959bd54c9fc5\n79eb8a2abfe2dce50303bb7122f7ad9d97d0962e 506257dea887ee6b15c0ee6555711c2612e5c230\n036d956e4a1f1c85d74a3ce585ab48d4dbd0692b 610c7c25714ac9f3ff7d6e8f6af05bca28d598a9\ndd1b5ec44f930fc027ec6528ee0b214ee3adb01e edab649a0d7fb255a5898531eecf9ee1b40a12b0\n3170aba2cbcf6dbf8e3a028a7a94585bcb2ed222 eca7bfdbb6fbc8ef898256b9502dfbd596644d9d\n92533eaf0bade438c5bba5a3b2b47a0514a65949 ddca2b749ebe5414074834a094cfe142118114cc\n17795dd501bed709317de031653f7c44200a30c3 4604d96e529edd00c1613df69530137450eebb7e\n8f55388d3b0705afc38523540e901274af63a981 869105c6bc38cada720116e61091c7c1ea406294\na1f89cad1e164e70c3ca1e97b966bbe3240bf38f 3b4d5b1c1af047a1d01e42571aefd615e58acb31\n12c91ebdcdf0c82c38877c39a041ee2065fe7cb2 0b378d5b71a1955233ba7880f96e78460c44d97b\ncf33f19df58d2ed52e001667c9d67d363074cf55 642aefe28bd4c550e1857802e60be3f2ae94d879\n4da4c9b46f428eb985c7f2d543f493f676fb59d1 2c33446016139f40fb8bb6080cd83279c8d16dd2\n221c8df95b97b1fb9e01295e781207ae78efcf4a bff8ea7fa20a6d696341d924ab5aa6739849be31\nd83b438da422aec3bd4cb5c468de6018db4eccce f7ffe4b4749b7b2b76efcfa95bac67be7e2f4fd7\n6f43d1c68e62d6c7e780b2e4dfb552f4abd514a1 52edd80cbce99d63c52e4320e804f9351c092ac2\n6aad07bd94db331c315c6284c134b1c321e8bfc0 c5001c6303f6dd72940a4b459e474dc7368d5cb3\n7fd3a054cffdb68cea4b1e0e54531ab76ce3a96e 53f94dd612febe0346a69195b5ef9652ee9ee442\na3faac84b54c040d3168628820ba22e53b42d731 77dc74d4194863326080b59fce2b85fc665f00ad\n7bfb6cee247e4637642173f614aa319fe7dabba9 f70943cc323c38712a434718ce54f6950519b6f7\na1d3cff3296bba60fad1c995df490c569113c6f9 3962b302ff177cf8d5b4abb761ccb6a745f437f7\n0cf60a79e2d3c4f835ef9b994e98bf7027a4d8b4 96208eaaf26c730d340f3dda65dc1b13151a7940\n927f0929e5d3adc2fcee2c20e4ffed889d2328f5 886579814d6a4bd1376f5bbd39a71c66a77b9c36\nf391bf03b151b971254c125ee14ee02f3e7fe13b f8dee247e502044be8c6e2e6cd13c4bb4d0d5028\n8e2036d21c89b3aa815053ea6aa632be281e77e1 030d3b2758d4b3e53323dba577b0351acc7f9736\ned5753deed0851b0a718374730cca721626a789e 2eeec7f742c0631d67d6b7bdac2e218481a5db61\n41ab84d30489759975094fab521d86f425674f0d 56147a2886b1e30ce2fd8a5aee6eaf4e44f47c70\n014dff76a663cc287e62b221a2ae436df764c35b a972f940b67a5c0152b6720fb1b86e050c0f126f\nb0c9e671687bc3760bb3f8f4da675ade80add37a dc41a0bc20e515f993d14dd41af87646613a02b1\n9316a51a88858f6a0f7f1ea278ad374add10d58a 81387e28bb8e696ba88f8c064ff77ff282b18302\n0cb415cef6a2516132f142407a9357525c668ce3 18ea7b5c380f78814b969a273fdf22abb9efb7dc\n7dacbd782f04276fd8d345e73f667e5a9cbc7df0 995a8d5f7c799533fcfad4dc1056bfa93bed9301\n9ccaa022cd23244a950389b5bca3324f4b55a98e 7238ebe1f5fbddb3d52ca1a121eb4b7da82288b6\n0d26cc83aaa1606b337ae7df0660d96aa34a48c1 dbaf7975d504a882c03377d1a845e234266c1b02\ndbd7efcba84bb77e6559c62d61dccd15b2dcc461 639db527a0e05a8390d7b8481ea8752099bf0a24\n7203c7e065395fed2792594a6e5cfae42698d593 6efee699535e5fbd09ed1da90b440d0bd67476ad\n2d8c559825ae00e70c6ef4fbf465074a44a6b420 f9a55d6edc3f2b9d5c528afeb7f2c46de76595b3\n9c442c4b3b224230c3057fff4aa886ebbbfccb84 3a7a714dd74efdc3f040746b0ab53e62c182bd99\nac8f6eb51ba86f49fd3f7192a265ad7774fa8840 038e83af4897185b08c2910b7a05fa111b21ef0c\n9446b8ec4cb82b3edcfd52e03435082637e44360 1add409478bf34ea7921bcb249706c5ed00b4569\n1e4e208c43523c989b037915ae6811bf70a1cf21 4c77a96a1c414079a8af22fef2a80f59d71aba16\n6fdd545e0e92b87ff02a2298d9c9614f928b5454 12bc93844eb90c6c4480c4dbabdc455408c371be\ncbf83e26887d11b8f1b88def3d69a2af9f1b05dc 4d782b91b17e287f87add30a130b7fd310d28220\naace61481accf1aa531309793845df3fb358abc9 865150b4b346508946c84eac63f82fe6b6beb26e\nab67dfd984292373475987160ed2ab3dc7aea149 e45a94b973f81db363e34a049af4d36643f5e7f6\nbe5733bb8cd7e9e36173e2284310512063d5144d 880a14360157afcc90d50ac76fe78ca0557c1e06\nfde758762dae0fa21395b0383b7afd33112ce643 dcb21a125b94672b3d590a40bbba0eca7a565524\n7328336e759ecf05daf53d30b7451fe0853eb213 ddc94f1cee0d32fa48ff6a47d98f14eb584a50fe\ne1ef996ede14cfccdbf85fdc71acfbd532c7bc5e f723eb3c53cada3c65ec35b456458dd3cffcc4a0\n1e8645d150103ce77fa973428ef065b56be71e84 b0b1ad7dd7f764f13061df83358864188143c529\n2a5c7564a2f2e8747f7ba845d3cfcef59888c9a0 80bc72f7592c42bc539d74aa6c791ebaf4121b1e\n25aa4f8ba95852a9fe8db3eff2eb674cede9ba3a 40a2b3642cdcd1208e3b1fd4d99a125e6e6b3eb7\n36d1d408eb5a1d771b4775308059c83dbfc81e30 ece10f87a5b16f2ee868fa21ae0f1e913eb2a5ee\n800a455fa71fbe61cc01ed8930b4cf4c6ee3c9a8 29a0aa709fc6e1d69fa31cf03e38bdf1fd2c4660\n8df965bb6e7a1aeadd31894cfaa3ebd95e6a50b7 9516c8ffc151cd6e828e5e38575c4e55f9dd7527\nbeb0e80c443afb5b02c90b0444d97277e9de02f2 0dfb4ee730ccd341c3e73ad149ed35cfc0b27a35\n3d9f4158fe6e3b695a022c556c408e9bfa81c956 09c194d3491481dd3fdaf4afa9048aaf161f3110\n2b45c84d4911a7f73ee72478db391acf0af7ff1f 38c1f09ba3ac6682eda1ad49f5a10b77c02b4924\n541aa282bd25c206f74de90cffef4cdad4e65cb8 9f3292f44b0b805f615be3bb329720943ae78d9a\n8461176080d962f2b2a6d7c14f84e2aed03962e2 0348a7ea9f53e16693a94c4a9927c3908f418c62\n747eb159314391b81aaf22f4df5189884113fa3e 29793068b1afefdee1352ba8630f637d6ade4705\n595ef07542d3a09fa37dbac1dd86e43eb011874a 6be7f1424e7b1fb5188d11ff18c8d8af848c9cae\n213580965c2d2689cef36b8015d88a06f8db4927 68d6292dc19a73bcfaf0ccb4764569ed5b87330c\n45959505b26c79c3bbe0513b0de07064bd8f634d 9501dff433d2e40601df540bc8146e749e3621ca\n6425c7c61fbf10d41dec91772a107be7455ac699 393e5ac8cc53635b49f7089b37584a90376bf5f1\na3e519b5b438e0e4053f139203dfd5285eb8672b 57b61ebfd44dd9341ed60bed2400ce8d460b1bc1\ndb9a97a1d1b5740e94c8e5bd1f34fbd3fe2d50f2 d66a87faeb5e72562a20c0243042172dad1c903f\n3c82a5f2138a9e1fae8b38c3322fee992a16acf5 3b2f707026669e8031418509241f31eaf01d265f\n75af733bfee407325761729e3a9bc678d2fd3f81 ca4795ef8ca0c04dc570715afeb4cec58f53a27b\nfaf3ec192a8333d2d0ee04154d71f0c694299c50 2200f2019eda7a709f9cfe916421e9f1659a3e81\n09ff3858b58f6b6447225d672f43893c2f0fad7f 89044f217bc4baf44991279f6517f1ecf7b072fd\n03848126db3926a2a5ac05cbeb3bd54e99c5ce99 120e8f8b3637f87c65a836d65e447947e9d843a0\nfef25fd76c993f3d3c0803e58e1c4f03ed0fca1e 96b8efede130b661c47bdcb405662847ba1c967c\nf6fb42d2f074f0b88060b4573c02b8af51afc621 6467e5028fd92c3a84a6d997873f0d8f934d13e2\n296c723759efe9d1982a8888b7cf2df94d07394f a90758d28a147e1dad4910f5d82d8031218524e4\n6b5dadd7a537805974a6cb5fab39e0543fa5dd99 9f08764e55a2743a6e0156491e70ea180c862176\nd7529499271faad36a51d7a684d1b6223c3d6169 798d8c6b4130a94350c8b88235fea6836733abb8\n9d6231f999eff9766b6d782824e09b1a45955717 8d8d12f7223c8c72ad2ef82f3802d40c71277d4c\n5ee1ca681c57ee384d93f9fc7700b022a665d6f1 488ce91d56b71f9839004af0ba7d51ed930da585\n1d703b52796e21c43bcd1a06aa46cccc1b0bbadb 8fcc3984a8620885db5652aa6a6dd75bc328eca5\nbc6eaba0bb6d023289d09ebd7e4c7b2c10556b58 c1a181ddcc9b99f9b80844d91f204b402397ed9f\n8f489a67beaf300ed0eacff145a7b31fc60422e9 b29334c20a2427d3bd02ad2c19465c466450da47\nbd32347e58d2279883dd3a0efcaf56d6cdf70592 922da01dc2d8b53039403b65d787f0eeeaa64288\n04f17c3906091ef773dbdaa69ae80d0966c82776 e2a0480bad5519c4f64b6b191470534441bf136d\n07a17a055079b8909e7454242f8aeea3f0562d54 c18025d69db4eae2f774cb4cc14638e6d0396423\n81ea18777b791f8ecef032e34009bc160e7419ab 94493cdf987ceb88af7c587debf1896428e59d6b\nd188d155d2f9fa03e561dc8365f60eae0ea1dd1f ff281446eaa05b0bd4b85f5728be0725e08ddcef\n78dc11e77abdd0411de7dd9d469adaac54d075e8 eaeaed45891afc147bec87f8681c4242f42c2ace\ncafdb9a216dfe5882ae9dc2a0d605d45754b9220 42cdb7dfe747c6ef9a2ca86945848feddb6ec273\n81580f234103091cb4fdd72a395eb3a8e927ec03 9c73601280fe9aa53d30d996455447497e3dcaaf\nc3f38003a6a9308e3d9893af2a94e36d00ae1b6d ac50540f91d574a310c9759ae69aae16a1259f4a\n756e303ecf659b02dd96afb6b60019cab895c3e3 d7c413a78f210e4fd4ad2e9854a4d810d0e2f879\n2222c3d3d9f3211d53bbc39c410c33a257d90de9 d62ac4701197b51313c4822b7484dbc3fd9aa357\n89a2c896bff69d14b828956bb8bbb12105818cf6 a4161b83f50ac25d6dc1df8fc36716ff16d9472d\n0e86412aa1eb016758306f2627c6fe56685c29f8 d295554c5746fb878b4ba9348381cfafb0ba0ad4\n3ff46b086dcc704ca1d8a8e2e37426b2f7192607 c2d4df29d654fda63b4083fcddadcb5d1b8cbab8\n088c4104b30576e7204662a614355bcbb497c6d7 d7a1897e0771745918b77590274dbfb06bd3220e\n71e2d76b00146c0b45d945853e46233b0293cf8b ab808c000199d36079dfc5d3648db2d0c225d1d4\n42a0c1095fac40bf8dae917a7628d08a9c73ddec 6c2054a7a05a8e8b9240050443180412de16d5db\ne2422a53296f8a9eeb27ad7e687b91643af1ed84 a9626e5af3efcdf79eb3ecc8a3ec42efc2e228d2\n724364b9b741c03841c250bf7b2c4fb51120c758 4d9c38f83e345408fab9366ba47c584107463256\na9931b1762087d3e9b82acb8d117c3c44e6155b3 d8bad1ba14d2a50c7aaff69f6a7c1b9452ff49df\nf2d8a5af16e58a50edb28bbe338f86bf63e40473 e1ad39ba12dbffb71f18d0b438d5aac2fbb71983\nacf99c12b8f9b10aba6c88b54a5ea9a86ed6a2f9 e5db8eb57395d7204fed0fa8f9f637984afe593c\n9130d6486f4a480146a6db0fd66afc5ead17b8fc 0485bed4fe1a756b78d5ee7118f676d7caa3d876\n33d4f2ab5c9494327db43f2276a5463e067fe377 ed00cee3cfc53dce469479e2531fc725ffb81412\nf2367d2f5c64bd8dd24e21422ea485baa3200846 71da8136cfedac896f326f10b2572c7c1c597a6d\nb34fc5a84db7d131426009a59378cd5a62e109d4 9ad4f7c8c7540223c7768cdb3ded37c9d4f6d53d\n503459fbfc1c32a787a3af15b07c1febe9e9fd85 b1f50d4009a7392dee5e37c3dd14ea5129c81c1c\nfa67408cac586f09d4a44fcfd33f63c17dd9216a 9c532460c99c4eebc3b33acc58d90b7f4b6d11b2\n33bdf93f2ae2ff3dc178b3079628c8f32bb3a9dc 5b616858c4c0dc82c69a3f68878f6024b7f69acf\n11a1c883f2043e22ab65fdf3548fdb6e4e101699 d05ad0e96c72a06ac34184d03f952add22a9bfec\ne92b4988cd569e2a2405c94b1b23bb16c7b3d55c 003c917a57826239526c76eca33a67f9c809e3b4\n1ba683dddb82d2f8dc7cd5e35fc96a9de2066917 054a54119d281f31696f0add4fafedaf32d941fa\n9978a870a60e10f1bfa7ccb1b3a98bdea3ea7f9b 0e5af3a36a9b335c2ee1d966e995c876aae49368\n3a789b14ebedf74aff662251a420548e8a900361 e959151915f007921ca750baed86e376d60404eb\n044fae3d245344ca21f4f516236c07e472290dbd 4393e4851e25b238e97f5504774fa8501cb268fc\ndb570f5249b649e25053569279b329c9ae51e0a8 aa9a923f20c13d3a92654b923d8d17119b647e19\n2cf784d5479dfb4d00df4181f91bca8a67a6cf66 c5a700f1baec5f0b424b534a2ce87a33b3d34451\na8b7eae0cecd5d5f54d23eab9399a1faef7e998d a65d27c51cd14016c8e261f1ec17321a3f98fe54\n4199a086b2de0b1f6f9836864be3bfe8519a8cfc 814cfecde0f2a93aabbca92f2b7a8918b57e97ec\n4d7dd74db5e6df427ab956df7a0aa2cefcd06a7f 161284a498a3193bda8610520f998564c9c9efb8\n5592c4306c06ff9a56f89e6b39d77fd8f754448f 70c396407861f60ec90630ea2a47e163be727e44\n8794b8f4c9a6e0e858155eeb670102203e9b5b98 da776bc304470b78bcff49e11cd74ade3b1ca174\n005fc7b29600407f5dc904206e4eed9337db71d9 ecc3125861bcde91a7ab8347b9d19fb859159e00\n88f56fde9724801fa4b3b78f462ebceb891ddd69 a0fe97f0715f5940e09e9598e7011f53d9b990c4\nc584f543e39734a18258e93008368dec5da151b7 07dcd425e4ed082f93c7235b6cc173666d02b396\n75a67bb4ee5037fd78efd64af99d7e5bdec3bc71 fb59d566ddfb805bf6ed994c167be119049ae9da\ncb88f71658387abc26b6cacd88e8b5eda1c711c2 2c0ac48fa1193957a719b5635db1d335c7faf0df\n60345b0cce2271a6ca4ff270ed62fce9e75fb2be 6b15050d9e986ae33b2ecbc1635358e52adb0cc4\n0a11e67d73bb89e0a2d5dff47dfcba2ad032491b e80554eed467470c007e0f35b39baead3053f2de\neba3e0c681ceda21277e7816cf56928c380962b0 5b1206e42496411d8df59ff4c0c839793b2a9457\n0961978127ed24b69f4cdd6824fb6cd6a113a751 52b98694b3a1df93add6380582c19e0a2ebdd718\n584e84a83d4d1df98d28bc5e4ff44b5623ba30bf 3485949787889289a330bfbc15ebbb64830e778a\n20ba0bb1b5aa9a62c4b45ddf7de47a8645a142a8 7e97e552606b216a866ccbf353b4f4942b3d2e1e\nd761e03cf6c26e215c8f3526defbaec509f06d85 037be942d5c07d3de6e3623be86178a8ccafd4d2\n8ce6d1ade6cd0410087f024eab6441a1e86f75e7 da7f7984afba779a9377a13fd91e63794663ab1b\n66607a1f763dfac65158629be3b71da8c2ba4d83 af038c0b3e96254cf0ae733f2315fd063dea12b9\n27ff1adcd0cab5f23dd8c2b789e34c5089646f20 27c9ae5a60f8c3dd9f7a21a185f341f9e9cc15d0\n7aa3d7989ed332bc8c0dd50cf0df19d250b1fc11 7405a2119e40aa12298aef5c57cdd16954506bc5\nbcf2fdaa97ee79f2e9bddf153eef1fee448369a6 9db0a781ca8e33b9155f25df42c3d8d00f0f2f0f\necb6f5757bb7ec547dbaaa8f273d769863b13f3b 462e52f80645f3a8c5428f54485e6996f140fcb5\n176c4683b1eb8efe0f2ef34b97f1d3dc4d6620c9 382f582a82c216891986914da83c49f9a0a49af5\n0ad0a128eb76d77872eb17bbbd35362e0026df15 4eee768eb1a1e33334b41490de7d04bfa9f7342b\ndfc78eaca23c7a8cf24aada2fb896f892798dc25 e215ae9c8abda1b67a0cf013d067bdca2125321d\nf6140f7fd43b496b622aada14a55459c41e8c292 8b1dcbd963e756f5dcd84e3e5b6e48e50efda6e7\n36b7ee64f60a29cf5821f3689acb23b892cbb093 bce92486afa38e0bd5efec74a731b5b391cc7fc9\nf1d91812110f9e34943666627d86f0421058b3b9 993a0c589bc887af51c47682b3dbc50f0bc18b48\n1c00b5cacb77b0cccdba7368df610c26f6d94c4f 7a06acb8469ca6e42834be1a42ff3a75f86e3d60\nc8c4aabdc366d9693a81c0bcaf5efb84bab2c42b 57cfdd32202fbffa91925ae9fefebb785848bade\n0f5d57bccf610c5f414eda37eb2a94d57591f51a 29bddd44a77cf24cb00cb39db5af950ef6d28393\ne1ba2b66b7381810c0a9f82a879a8405eff603eb f6ab437f649c3fcc1657d7d6a7e564239bfb2b5a\n6a70926777ade225699378b05f4e543549bb70e8 bb8cda3af0b99bad80a6d58149f511d4a6637af9\n68cd336db409555b492528616c0003fad4bd95c4 9cd95d5ae912d0a444089400ddf57d9fc3b6e65c\n9906d133a393a83059cfc615b7cb507b68e8be4e f7e557686408f6b408e328ff83722aa870e4dbcf\n008b470da5485315a3a53abf394776ce65aea4cf 19c4eec1abc7787de18b12275915ed03ff8f11d7\n880854a319a9899b3c292b8bbd3613e4384605ae 716d0497b35ff128f629ce0d8c38aa2d2cc9b69e\n3122b670a650fc08b4542073c5fc82636333b175 e4c12f35a94237bb7293f7c1060b8b458f6c07aa\n28731ab97a26bd9e1edf76f4cd33369ae2cc8dbc 9ae2f3c4fb93bbf0ae70e102514a34cf23296b08\n42d2b769f1efaff24f6071ebc789fda5e4db45a0 99472c564788506a354cbddd7c8dee9a46a542f1\n2b7f81ce50d462159ecdebc1c806429674e2ec21 f3832acd89f540668c5661c6b51b458fd8e4beee\nac89ab2ba5ba426148f78539d2a4dc4ea1516b69 19da87e854a6795bad079576b8163ba4685dfe2a\nf1013f52803ec750995b583d8f32a0e7ade20a86 77c59b6c4561922c62c0c4215dcb46e1292b399f\n60053906bdbc2938e649bff60d946feba5991074 f7821c65d70a8834a4f99e1272fa04938d705c5c\n47c177224ee27497bf892eaebd8a21bc7b76577d 50d2b9f30a083a2667d272d687d733b008589f5d\n8f392fe4fe66107b239ec8049358e1d070f89eb6 7ffd68f6ca816faf0d23d9b2e27026f388bc5bc4\nd68b2d1d1f7521208e5363f618eb0540dedb2e82 425b02cb0e70a97a5fe7f970e84523a1fe782b28\ndcaee1e8498ab41be0fc5d290801984e2ea6c3fb 1c1bd7ad35a780e8af863840d1ce86e6a8b742ed\nfd393e1d7cbf05e4e86a6113d0ce0cd89c01d237 8b2db416c1a119df4c51d7dd1e8bda047ca4a158\n562faa4aa261441a5f843bb3093bdb60384ea0e1 1689268bf64c96b08641ce344606302c94652fc8\n1ccf45b26bc93ae180d8fc8185355d5eb0623fbf fdf0693202c9bdc19339a4f6161ea1b1362b2cd1\nc325e0f45ed96c420fde721f876baf35cb48e5b5 fd968ce042db7f1b2fc7e515f76c10cf9164e8c2\n898d4ef82b55826b0ea54c9becebad39ae8d4c66 e36bb00b64c1b2a149aae2e65a6d02b70629161e\n1841a240e15575a4214e11576d0c942dca3aad2c 76908b94ffde909b971c465ecb44dd67f10aba48\ncaf48eb3cfc5b79380a8e87f3079848e790c1fbd b1190d496437004bb0aa59b3b70795cc58a2329f\n6139ced5ab43e1c57cb91e54896eedfcf74bbbe4 d5fc879a6738ede33f1bd95fc8d3666031db761c\n2c6705dfdee92142b6dd2e3adcb516a68e0837fd 7c003ce7db0191b25cd62d7fac7d2250ade00e1b\n01995a60fd14c62607cb764e6ee81e033fafe213 57795ce8d96d112257d5f5b14e925d93b77e790b\nfad8edcbc1a363091543fb1616a2233a5f7dac9c ac7dbb174d662388dd74e2b1036254974149f24f\nc49cb06e00399aad9d01017f45876df1fd360962 8f4a3897cf9fc5c1ab3ce29f1fd412ac636f613e\nf9f5217b45959e73bb61298ae92536354faca670 e275ce36f8ee56b062abf5642357c06273d2974a\n23b19a335d4d08bd79a57dac3a9b65b7adb2a123 1dbb5a0a7952fc4c1c3d70224c395862fa4fccd5\n87aa038014612b20b7824a7783fdaf0cbf636d19 464af8d8301b29dc2e2d36ffac27bc3f91a97447\n0e3992a43c7caf0ca139a2786412fc5c42e98f62 8b34a5381038ca6b3e428e557c73994323938949\nff482088ee11fc00f80a8032f6adbe21e34f1a05 a613351b8a6268036e6b229719526f2a2f334210\n72bb338ab0ae1f645dac77b22a95ffc93c4b91f0 bb42676dc9edf387cf950b6bdde6d1b7970462b4\nd066f6e09fa02812958a8e817c99b182bbc8faab 18f71cbafd3bb4bd70c052db6aba55f19bf8c4cf\nd710601c2ae905944caddfc3d4076a23afa1090a d05fa5389f84b90d823ecee809c86fddb32ba833\ne7d9457af317190f3b09630b6c9928862f73f9ac eea1a10ee9595a16177162b0c06ecc4631a25ff6\n0171fd15e8eb1f8fba966c7707a911e31e66313c 36510f81df45bd7bbebff5ee875e253699e152f4\n203fbefb6a94b7826fa692e57a7caa289282fe6f 026ab42b1091b137c6f9d0d2428b6fdfac5543c6\n3969149b19b10d62323f41216669501d0b206130 321e111daa1dbe427fb330f4e35c6c34bcd0bc69\ne611e7d56ce80da0d2d148f02783595c07232cd0 887a57f5ec6686e40495d3d7be7581090368133b\nac3af0791c6d61bfca07d950066c2f950da49de5 d487bf3236f6cac746bd3f13e4a74fb05f0f6ea9\n299be2fb978cec5f4c112c8dc332f071ed77bd67 31a4a09429a6c11d10f230e67941999e3f335011\n108c1ed06c9f3a2b1a62e3c20de0f62cc653a591 f825daa6fa1dd13885463f9f1c7249a51c7367a9\nfc9e20879215f58ffa030bc49b4e2e687a42819b 786bbf51801edf5ccea242f705b948527658bf81\n1a7aad4fca4e8a8bfbe30e3ef12f338d6e1c20c2 ee410de59f67371d50d9fa5de615767cbe64a7bc\n5755fc5e7106bfff4f52cf3e4f119595f1a72b9c a93aa4acaf3b0351a94cd2d227bdfe874a8afca8\n6ace71726c837406837cf51ded748f2c2e32199f e8b478523fa019e7db10ffeebbae9992f30f51c8\n176f8621e201c24cf4fd0ca2fd11c0cdd88b1882 0bce210fb68edcae830c7a5d8278a5b968799f57\n6bb32d3e2cf6c7dceadc3d5051708defa11d496e df9ca67d27c2bd77c8d6841d351a4c4d03bdff64\nbc00c4bbc59172d68210c9725412f9f7dc4ee745 cd2f22f131b6016a7d60158fecd2c376a8b79a0d\nfeb6f41777c34d72d10f62953531e2f3c8c8005e 65a21feaf3991a829b39a408dc5d0de3a22ebd26\nb17d59a431d3575da13c7ef65448ce682ed25e34 d5fde9493bae74aad281cd9412e36cdeec31e0ec\nc7cb25f648f7243d4459886ffc419105fa1b01c4 6483dcb80cdb7662a9887dc199257c168383768b\nb5d8028c2e5b44afedb11b75ae9bd949b4ec910f 519b549a5b27448f25b8eb573728f38069ea72a8\n577813692b4167e7b1d49dee9e091e2c8c85a9ac e458d6ae78e6665af3bdbbb4074945e59dd28374\na933623c52b4bb008b3b5e01f0602df7e7393f60 3388f9913e1fb6fb79b107502b6b16826df34a38\n41c3505fffe2514dd1fe11a44aa769e81b151446 e9a1781748cb76c24935f69e789badb342b59732\n5957d1a61e9b51adfc804a744c5cc501dfda3f6e e52fd21dafba7a39945371928f6dbdff181081ad\n5020a390f5eb2367c475b03fe6befcf61030b6a4 62245337f42f5005b6aaac3448ab91e549708432\n96f177ccdc85f6c8d2771198c24be6509d5b5b89 487bb9b162151bc85c8ae4220efe16b61702c8ff\n3e6e4573f1694fa6b41a13e65dcff326d55142a4 12c0fe2940fb0be4e14910a5bd382a733f00eeb7\n9caa845e88679187656816942054572ca673ea78 9f8b604d59f245a10905594a2d6760076c0fe761\n90bfa24b58f5be91bc45d72c2896af890ca5a176 b106e483e04295a9f2a4966924f88a34291628cd\n54ac59153bd7c3228e8705fc73497839f040d436 f9760d196db08c2ea47482c1cfc2899bcb081b27\n41ee58c214fa3892e9f005a2d14f1718d715f12d f58ed81c9cf0642384e07a545d726bf90207e49c\ne4db7cfcf7cbd2c99ae4455a6a78da865431172e 4df2b4f3eb3c11c1c2ba62f1db3077fce9d66d27\nc9113b6aeaeec30c8e775dcf5eb737a6fbb1780d b3e149a7828bc710664eba36e22f55a70aa125d0\n801b52a549e5085145ef9af73109bb5d726bc040 62a78de2f5f9a9dcc626926249b47cbd921efb85\nb130ad33908ed6161b86170c584197fcad12fc65 43ee9e8eaad6b36ed81c7b0acf71438847eda58d\ncde912129ee867b0f77d8516bdc8a009d63c4771 9e6df2cd73b5dbd0117b17c88a0b570ffd0d1dd5\n365c77c625792c8228e72ed5d59dacab650351d7 afff8357104b25c42ced060528803d7120d79374\n243b5377ad18d297ce4e9adb536f4643512de890 e938c49a24070f99180d53409299cf9319e30b84\ne2a3909a19e38b36a42b4a3a4c5e95e504be18cf e8a6a59ed8624b5e7d9a152c84599972e2563aad\n8110d0a1a430d867c6999077e83e198ef9114af4 56a1f2fb9a3b81ddfc94b29282d4f53c61e40d94\nc16a84413ad61f1b0331a73e66c4f438be440e87 6a38be62748c7b2ce08898c98117978055111eef\nde568ebeec36963f81c8842f6e4ff4020d1eec4f 38a5cf59f14a9dee8a78df02ee1116ae136bce7a\n8e5ad494054235c802d30afea74ca4c51d4b1d3d 71096c71fe95826c4b27d61359c86bbd5860ef4d\ne4e9b16b323827e6b1aa1f1826667bd81df6f7e2 17aa8261a2f9736a05de73e99ec014a78fe36892\n92596d7fc00e36ecc766ee7973e6dd15824cf5bf 08405d81852948f6ffb3bd000d2b2f502a743133\n6ef7122cd50cd0f8f26d685f333dc43e654d4fe9 b27176fa88ddd622ceff7846432f49011bdf3fb2\n5beea19a8a60fe7fd38237024516a39751d8eb5b 93298ada2d1e91a6b2d7dd134f98645769ae9bc0\n674809a220a3e87a6777ee5958681df4af5c1ec0 0a7229ffc2ecd158ebaa862fd0f1cee0a32fd69d\n104038442995bd007b33fad9c0899c7989807234 65ec73e628db57cae388520f7702ece09cdad9f6\n29cf132feb7733af4edd9d6830005028d9940d48 e5be1d559a4f2ebbe16832e92826fec46ef4cd99\nb59118dd119e9474da8aa451b9ca00bb1f757a23 e6c0d1f44c1a46e544b2c630010bd45a09bc525e\nc40457fe110472c790082c5a648d67b81125ce5b 7c4bf7557a5fa00539f1834df8e10c7583d36a33\n2747c1f1635475a0029284d2ebba801cf313f61e cabe9985dd31383648f729ec453983331afd90c7\n6dee205e7c02e4b5fd605d70d88f2d1048f8d74f c90fb1f96f0d4258928ae2e07666b70e85808d6d\n61b6cd04e63cb6b3689d402a9da2c01835ed0513 1f14ceb73945f37ea0a4c62dbdb365be86de0071\n630eb438813b81fbb537b956d52e9364b62380ff 0eac5bbc0ef1fa4e59881dbf47f95162a9750bd5\n4475637d0423727c660eb18a244fa2f7a7d1eb35 80d5477aa6233f2a2027f92a97c268109c30f7b4\n55b554a26f68fdc69c0464fe3b4dcf3d129c4e60 94407d12e1a9fcff61bf81beca8e9220469dd362\ne5e5147b5c8a513e30806b91d7bebb6d46c3120c b148a0a8171a75655cfd6e4ee550fca774c46625\n44c852a5bb18e41d590d50ee798fb99bcb839557 49955b88cd0544586f145a84f486649bd90402ff\nbff1867e97596231dc9d7a9f06ba0bbc355abc4e fa41c6df900bdd02541ee1a9ac990a6cd8f2a5bf\ne2cf77810125f85d980db88440974466754158b7 29359728e3120c39d6c60ea3a931b954bec36311\nfb0d23ec66ed1c882db42ac013fd8c75673e968e bc9c79f45d9ec56cd5a56b120fd523a8d4d7c98a\n2464005294c39950d7693d5a6937df7b99513a0d 643af5f625180ee71c5373709e6527ee96c0802e\nbf6d2d650c35c9283eb1b5196e8e45786f8931a8 6b88e282a43f4ef134f7938a6d976bfaed982848\nb755396ca489cf3b6fca9f43666b731110139db0 06de15e9a74e3da2b2309b54fb2c6899e20d781d\n077243842c2e246bfd9d82dda5a0208cf6c3ab9a e5c50a09f55f3d4b3e238a6e1f21f0fbe734f240\ne8a23ee3e00b83698900f43b128714808bf1f088 4ab43c5984da7423d09c9967da388b3a468edd88\n9e305c564027f30f6fc45917435eb3d1808d454e 1bae56a8f621f13588353aac02a3491cc01b8b16\nc163dfaeea66d0806b4e267368236c52f8d6ad3d dc4a61a58e502fcc45aa5cc746833a19052b26be\n9b3b6da705b52310d2b8046f54efc2b449fef17a 6c911ead14322a9a0624a2e02c13dd6968c5dcc6\n4754c892fc09d62f77daadaa4c942e16e6010775 7dacc275f128fca4ed8248a83f62d1340e5f432b\n892b774680fc209e943a76c23f9e19e7988357c1 522776bdbc4e8ff31550f770826bebce23b4646e\n4194b509e8a50e011cc14c0a7951b94436986f70 235317fc7a78804276bcbc318a921e30b9ced0fc\n66225f8feda5c19534abffba3c23b4b725719898 1a5addce15e039034e34ad5519e40078a3e0b2e1\ne6f918051acdefd377ad7ba918a412171fde8e61 5b5dfcb1a7f36927b9e3f269101ef8e4f63a8c4d\n710312461d859601220a9f7244fb2651f56af8d9 b4f464caead496e4c7d49d7980c007230489a905\n4a2f6ccac5ffd7fa71e591a605cbc8fe24c71ee1 1f3d826149101a36e057239dcd3df177b1b933ab\nbd3a38753310b19b26a5eb71092c6cf016a73c30 4de02c9408b8b73f3235c0b732b37c8df3c0f5d1\nf1996bba647b23d7ccc98f05829cce1d1c5ab03f 1593e81f7ec5a3bc954a939a39a15e38c41c4d25\nf708d0f04f51fe0619dba86a9bf75e4c9d7756bf a8ab9aae67ab05747eb9841141df899725a5d0fd\n7dfda6b3b09d159fb80d84bebf2fd47dbc867df0 4ab84986e2056fef5fe8acb3877755966afab20f\nbf4e0674cbfbf19ef4c410761dc37cedf1db0a46 1871c5ff61c9a8047a7fdebf37d78f464804ea01\nd907113889780590b8c746e6ba8d42a3b3218dec b8cf02a4aac7ee7a7a8ed75262246b4a7cc690ab\nc9f77b211a35d2abe8971c44719d291a572ceeea 92817899dd8ad0e6a1574cca54b8255c2fffd2c4\nede53a554804d8208f1f0807e983e0188cb083c6 50a7427be8db84404b5304953edc72e4871fe953\na34c11e0ec1e2a2215b4f8ee8ea10023d35c8641 fea599a2bf67ad5f8722d645a06cd6789a182a9b\necba8e3ab86d6f455c036ac904760ec463aaf53b 505bf69de48d3c361813ad256808360b73bb57cd\n2f0603d459e643528e5b3d4c7ae5330e26ea2b47 99c5f4d8ed7821bde7aefc53be0c3ca4bc07c103\nd0d3501b00aa658f578046e03d026302555030c8 7f229a0dca2e7952767feaa02b5bb36b1f6bcf8d\n05cfc5af4731578d9aee3649a1e0cfabe50ab429 eaea6202c70dab7275c7b4f821a287983ff32c13\n01ae577c305fccbe042121cf5d1d2b90c499c156 0f452349cd1b73e7e20361d5aa4c5b15b9a940ec\n9fad64b05d004e8aaecdd9d8a0f56635f583f79e 8475aba04831d840067ff7a5bfb09218a2c02146\n73fa1c6da22cb7fe3c5444450bdafa868cbc247d f435f4de9fecffd6cf5cbacee1466fdedc594b51\n027c633ad874cd55db09846f9e54041b1f13ab17 54af2f45231fdeb64661bb63b11fd72ad1e98d26\nbd3ebefb23867821a147c698d04f50845b400f6d 1b9aab689b971af10853740c95b5b1c4a467d27e\ne88bd55a1885e0b3a4562f462075948cc66bde9e 57d7e202a3ef16d65cbad28aded72730a6e6a3f7\n91800516bbc6c57fbe4e9034d80aad8ca3e9770c 61b93a92855b1e09c65dcf1d039ab804cf0b7db4\n79047bebd23e6556b7b342c8b8160f69552f5d1c b316a3e3cbe9536897efe6aeb81863fd4ad43297\na4c2249e0bf3058486aa7dba1266385699ea749f 341c1f665f0b2eac454f28a8e5eee5a19f256543\nb1b79e5f09d7fff8bb74261d01fa3854909c158a a449d7952a14542549860d7274db4cf901da84ce\nc3ec2aa1a4fd370665a57e748ee575f69c8200fd 5779f49890f55ab9a8fe0ed175c1bf7458d1a17a\n7124c2004eacd279ab053f4c721edaaf77a3262c 1e2b4006a42f249546d76229406748aa81c0ae2c\n5c089dec04a471f7b8b9d226ce05e49cb3b9a3d5 cbed021b98b76bc5875d5e4dbeb973b6f7c35656\ne81a282d7c8fbde92542337abb6bd27ec58cc78f 503b4dfc6c7bd593bc20e9769d23dc33eb74d84a\n1ddb6a76a8f45c15a592237a9ce97afc3cb02b14 72aa7f08f80c79308a83ab6cbf223e432c12f347\n73899367fc2b234ba615d90487d4696e644c59aa f770f4dacf71c70b8f854002d668e933ffcff8e7\n3534950f706233e1578261cb96f0f5ea262e111f 47e82a9fb90efec8f829e5dfde4e8e4a7ce8685a\n2e0c63d9f6ff3a015d3899c8553d8e9476caf4e2 ec7dc5dd911689281795ce8a56620a23154da645\n15f5a96badcf77b6f60a0a48ac860b8fd7994db2 3a93598a2794b8ee8589893b3b07b360f681722f\n54e6fc94748ed7c9714490b32d4272c4b29237b3 35e791d08be3f1a754f29d2810ffdfcab80f7204\ned1aeeefa2e8e04600c897ccc9b613762381aaf4 15b196087042cf952e0d1557daff8d5ee4c848dc\n3d08c2815d10fa6212b3c59ea77c5f558fad26b8 ab71ab8a5ee131ff8ea3a80bf250a100551fb7a9\n3f32dd965172ff5591682fb04e6eb2bb606a6204 8122c52533443d15c05ec85c531c2c239da5f9eb\nc91bbe296e1d4165d9fd702fc3faf634eb384532 3ae3d4789f318851c9d24ef025da97250e189351\n11a901fd8768f386d73561471896aba329e44aef df122f1c1a7d18c84b2a84dc387c09b711d9751d\ne9302081a8fb409d8cbd67f5591400d3727e7e58 3c3d7c38c78da54872e4499c3b672be1a2e32fe8\n72f1f76b9d38a75b1b76f1c8549638c590de2e9f c32458b48a3c8ec4c8e35ca275622d39dde90604\nceb7b9f15bb98f824bfad93a7007e61472a2d6b9 f814accb9bd276cfd3825abda0615f11bc658693\n9ad19ae55cf01b4a802d876ceb240eb33dfc12fd 7fba17367df7ab9135fd8b4e31f6beb482412bc4\nf0cc2aefaef1a1b7b0a9b1ce2b8e2d7abd60fcb4 aa03fdf3dd8a28a0fa636441592dc9a4c1b07545\neb2a087b8ad729c4d1b54cec5bff1cf2bdb06bc0 7bc33b3d26168eae0b6201916c9973f449034627\n1b2439a06f220ce61013265ffc323e63d5f44126 a61e835f53457f1220106ea24740d00b472b23bd\n563c00caa95d376388704868503e9e224b44f5a2 b20a9ab409df37f245f5e6a5a676e06724787492\nfbb2e54d803008915f35c9e5225b4dad445bc87c b3a8b84daf81f03a542c96f0638c12576353261b\nbabee36f1bb550b9cad1772d09191779521d51aa 028673a82075f73446179ef460bf7238fb29f47a\n2bfc91d9d44fc8c94e3767de0974df07489161ce 539fdba58862ab5e00858d5b1907e23660bf14a8\n99eb380bb2f47c2af9d17488908b2c3469d3167e 3702da24d53f3ba7f40a53718655bf9064562275\n5c448f9474eef8bda7c3eba6316ebe116e89ace7 27bc8c40fab1453d3d92244dd6c4197e0ebe1062\n6f6950946e77f5bbb4e931b875faaefb1921d31f 91b095dfd24083219ca9a39f84dbdb21d8e4cf5e\n8aaa36d530d94631e98fcef3b3707ceefcb1fad4 afd1c53da8fcf080f88086bdde8575235edffd26\n694db2a539d85adb7da98c319914f697008b28dd bb058f9195d904e6bb311b9c38ceba487f4e5d2b\na544b3c232c5c72a14ac9afb47fd83b84b4146f0 8100d5bdd888987fe249200ed5bb3e5db576803e\n9932923aa6b2dc29c819def4d0e884775fcfbfc1 b55e3ad22d451ae7cfd92ee360dea70c3d991863\ne7663a1318a5f782ee5358cebb29eefd2847a86d de9a7c00c1ae102b25dbcc91d674721bafb19607\n6333e6565d89d3c07ade590cf323166591475c5d cd5ffc2998dd4b03cdb9d3340ebf31e0c94978da\n42f1ac493c80e60acdd194ea259e33be59848a2b d524084d1e55abe10512a8097eb54caf38c8b9dd\n5cc382cff2f53a3da4d23e16c27e0de1771554cc 6b556c79502fcb5292ad6e971e9a08aeece8122a\n8dd10d38899fb776bdc576493ab38cbd9a3ac1ac b2a66d97f254408d1aeb146ac182110e3e232e67\n74a1ea7764f85fdbcc3b0712cc24b1376bf3aa7d c7bc694b23e42e04503f899c2aad325902af5e5f\n6e497cb25ed77c5b1ef4d4e76e5ee209fc76196f 6769edd64ee975963240d7678afdb902289355a8\nb9e11204712e444365f90ee95e8651c8200ced48 e78883d91128bead89a8c736a62c330fa1b436af\n397ab40634a5084d4ee2100332178d76c484d7b3 419c9177ad5d50b42885fd522d7fe663f44c9070\n577b7ed0aa51fd73de7a33087274a7596624002b bb437baa646e10f0847ff82e8a6cb3f7972b2b9a\n18133b58c88ebfeebe1218f0f3142e4a5b781748 376dc770eca8e47b6e615291b85384914e7887b1\ndaeb2dae7408f842fda20f996062f6df14e39237 712b0bd8a560780a9bd027dd470f830627d0119f\n16409ba4d5775e8329fbe062b937c61e980ff384 10d9d029deb4e1da52be6cefb9b14db95437cffa\n9dddd70745b74e8d39df441043bdaabe15071bb0 1c73a8355def1f9f4c7ebf4542ee27fe9d318cd0\ncd71656f61fb8246f0c8e88e3f18b6d72a41414d dc80e4ef542c7b91964bb36edaca7e16c9d48add\n4586e0bf9d434691d25a33b2b645561e8d0eab55 bf8bdece5eca9026309b0d17999500109f7a8daa\n5eb4acf15cffc3ccd52a3c479e6c8c832ffab312 3de5dba8e94ce1c898db9c93528d7dde091d1b56\n292491575a2e62122b6fa1fcbc715c9bd52205d5 96bac8271be58286b61dbab10e7e3374e470ba2d\na2bd02b1995f620625e328f8894c6e5e3fca441e d604f68ca7534abf9b1795761c28ea6944078c70\nef9df3c2d70fa1565f49713ebb3c22132b25378b e6f77f3038b759e1a6b73a735fd6185852f61929\ncafc9da09a3d2977e3555f0fb767f67e7859cf7e 63319dd2b7348464902d453da41d8f4355830cba\nefcc3fddd0d9cd86cb3532ebed0bbd33098e209e 8c3cbd37144539bc15343243c6d2074beaa03c7f\n7922057363651dbfba2de699962cb17c0bd19738 af509e2e761405beeaf3e2265dafba37e482ff4b\n7a143afdbd6484a1e87eb9b7dc1cb647a516da63 f36502e3d7cfaf6e217bf6505a64531a84c30ac8\ne878cb52c08ecbcce5fb9b94a4319f11864f8d33 3779db0ab3d9a150634692f583c451d8ffaeb055\n91cca8b836bac683b3381def6835028f86df0916 143ae35feddcb2c2afedf2ab7083b0b1f54ec3ab\n5f79db98ec4b1cddde0ece2530cd686b5909739a c29976ef021266128f689981a6cad4ab38fde972\n506a426761132b2fa04870230cbd7807a309a293 faaccee42a34605efd18d3632caeb8e2556a7267\nbd4fbce264d8c57f295d353618291726bbd80d95 d7c47d8fccbd66e60a1fc80b2ba34f289b79c337\n086d602114f175f72e00194b5b305c018448c909 603a6af579226ceeccd3091290a44e0ae6baf075\n3b95cbcbe4689966857eb49e38a5c68418fad617 0896d4914c137022b8692ab5901fbd841c78d6d5\n1aca505473a92fe9b35cd324de6b21a2c610ddf9 b2cece441de1756e1c25ea1475d66c726cf57145\n440226f264c122b1f7a5e832fecdbf59dd64bc0d 3880637315451ab0d2d079c008cee4f6bde18c42\ncb6c4f3d34aad04e9f71477cbe059b6ec90d6d49 7123fb4709788f1b2c7549bde8110a7ecfa79a21\n8b409bf9e8ade3b964df8c8273081647cb626b34 0971c53134c2de4c341d407561f91bd47ec9ed6c\n6d7deba2c6a2c5faba3a5b2cc75ede445f935af0 939ebb8e96b10dc41122bde79988777132dd32c8\nc1d76a93235c02617c0754a3a4dbaded789d5cad d114b007e940556f2f14927221e8ad08e10bda8c\n4f82206510c5a02a4c69459d63c09fc4f8eb19a1 45cea9f08be205f71a88c9dc1b3cd44d102f682b\ned7caadf6ae0a72098884213683a19d3dc9ada66 10a46bbbb12a18c2ec4858e1af328040f82af5bc\nd7b5fd102836d6edb6802aed7dc53a4e400c61aa 70dfcf321e352f078b08834121d3a1afb495d836\ndf7b95ce1cced4c47b0fbc4c55feab8dac3998d7 9d9702bc231e8ee4c17e08f44f40aa02cad5702a\n2bd7901f18b824ffb2ed74358b23b64530ab0a2b 5994e22e42fb406785bc40b50e3926f16f09ee15\n97a5cd7f42f76bab5182f0523128ac481dfd46ed b246fb2eace2dfd931dbd7ad1616d688afdf05c4\nb7221245d69320a65195cf19bd6c530d0c568647 bfaf80d04120d199d4b65d6dacafb16a3310bb22\n40a67c166b1e6b0c7a923b21fc54c619066e8562 165e31c2cc5fed586794cef87a20bf035c9c9fd3\n645fb7dd3d39023a9965c3a19e9b0cef58384851 f4916d7c0a93bb953821b256030f2f9ecf105d72\n60292e866dea4ac4ba3ee6d95b725397ead67049 0acf8d8818e919ba00f6844e6427a95ae6fc0ee3\nb729473d96e78e86557e8282143be57da4ac838f 405eb057aa8f00fe70a88d6a12b882add52cfa4a\n35722deb32f23fc2717eadf6fbaad879a79390e0 bc291dd8e3e32c49e474d78e785f88afa60bf1c7\n6f4c543b7e46f8ce2909ce12628ba0d022de5082 175a6f9aaa933188b53f2072109fb26f63355870\naa3969642ecf6b3f2e9648032da798720491b320 004da3a6857ef19c9bc8a865910e662eea9f20f7\n0afdcbd34cde81ead92bd7b821a282c200ffe894 966144e3128fe0194486f283d0c4beccdbfdaa64\nb4314c0481edacb6c3ec87aaea68c9cad39261a7 54ce463e5889f7ff27161a5c4d8e18fcc931a5fa\n38411c88b5588eeab68f82263117c4ecbfe23d54 b0a2c0f03ecf5cb17f5db6da3f0f6810162c793a\nfbb50efa36049090b3d7f5560ada295e457c06b3 b841b48cafcd8681fd048b65b8df07b77c3cddc6\n6c7d27e96d601841071f4fa08fc269ece7d54b50 e8a4bfd1d47105649c83e5e28502827283839992\n3dcbfb60e9a57c88c7e55eec8565a34721087877 025a6699d469aa2c338450768421332bb5221c4a\n99c89c263d1cb11658cf15cb6638d210487f9026 2b0b811397a47377a988da0e2a5d96ba931dbf13\nbc6270b1b5875186f11cdd5d27217fc10bfc720a 91e40e1e6b023a8dfcf635f53697006325cf95be\n46ac4958c80f905dbf3e0cc6ad4939d0430c1c06 86bce15d64285aa6fe85786ed45ec1040f4d983b\nf83a7fa2490243b3748f5c6c4a733df0c6a8cb51 d3bd6910f2023d31abf7c8fb63f499b646c16347\n7cb025b76d60f538689d38143eeb59cfec58c1a4 f8c51dfb934101005061a43d1b11dd1cf42d59eb\n81a917a4e6cba6518fbabe58ac53390ca4328e8a 6e97b5fd68d80fc71fff87a6b0aa69e1e8e16ce2\n39107ee5ffa1a882c5b3ce48317004d8d18c0d0a 6f4356045efb129c04e404028b4bd5bdde20ccf9\n778d9e20da3a800fb061f0472bdbb76e311ef421 dda0be175bc09a97e4dfe6bad370e11f5a2416e2\ned00a296f90862180bbf18d80bd773e23b9f96ea 95d012108764654273324cbd4865077ec07cbf71\n62ded30c10b94fdfaf9c73ebe65edc54a712a1c6 575539cd9f007dbb40293bcb5c281caad766443d\n39d269619ce8d6e6a867bce7e418c0b3f629fce9 191997263c1e91cfcffca3a367a25d6043902733\n7d48e073b7ac61794221a165da6bce160bcd9828 c0c173a1409a5afcfb1a4f0abf36d26931059394\n60377eaec77dc2e43cb053e69e7fedc26422e14e 03725d1ddfcb9c4a5516b2e524491c1f62eeabbd\nff7645ca2a1a3057a56f2b6efd0e62ae1867c5b2 a1940056bfd0ef6d6dd51f268484b9bb125b35cd\nb945f8100749a2a697c8080eb49640883a3fd324 daf28fad2ee44be08c168eb8ed2912166ae2fe6e\n1c5f105f52115656646f506fc48ac7fcc825e4b6 7ec5e8bb9214abe3ca3dc325873db997048dc498\n7f74c8883bf07c9cce579de392c25ea6ff7e26a3 879058b7cd35d654357748edae9afc1045ef875e\n634090fbe61aaf36b2245e0602c8d6f5b644c694 5fbff6d6de451267b31403842b19adb3ece914f2\nef32d571675b8caddd817eb8aa4a4425f48cf8ae e7704b1433467bf7e3ada754aceada85cd46e6c8\n53d0203deef7e6ed6ea20eff89e3f89ed5b80682 6d89dfdcafe5aaae060ef58cf0a04287bb99fa7e\n52b84784414ccbbcebcf7a76f65f07a1ab5771db d62019ac41faa837a6fd75bb9391178e513aa8f0\n9356f2d91572ed1c7ca87f9824cd46f8af65610d 7997a5cd2d33564e065f1c5492ebdd4b3e7c23d0\n64b4c60869aca7beadebf90157ca2dbf1e0eb2f8 a6cf1f7690d2dbdb3c2167d0ad3dc1e7275a4601\n2feacd66e2b4079897fdc25f2c4ac5b66f196c7b 200b59b0e5666f7722656acc1cd1ea4cac00242f\na73be450af4b1d7f3e742b9b9a0ef708a8f1ee0b 2d0a204750fe14212ddf16b942251bc1f9cdd960\n4989532329bf1c13ff15a3fb27c348c12e1e915e fb2aadeb669d1beb96f7ba1d58d406cdd0e686bc\n9d41ddd1cd334f1bc3ea116e4829c412f91be0bd 4dd9921c1f03aeb059738bb1254c89423b28e1fb\n9d2e0a77711913a0577dcc3552750fb486fc1db7 bf5cfeb3663aebf326c535a2e8ee8223fdee51da\ne00df3dbee340f430d4c32b237d19867280d6547 c6d6a59e7cd45a93d0ffd689b9cefe3419ae0e33\nf892ff951a5c14c4674c3bea76e76fbe6cab9596 500d936f099ea1c1526cbc7e5dfb79080e25fe6f\nb4e919087b0ac8880db04e24895b2e33046a2c8f c48cbc36a234c9bb112ebd3969bcf47985adaa9f\nb1af2ee7e064e6062a313c36dc66ba2eed8078d3 2fd849aef03f180aced1663ed00e9a3022b2607d\nfbf0a07ac6457830e368820a432e85b1e6fe1563 4128be0515c0dfaa2213120c92a7526c8160b7cb\n6afa30bfe0ced8889eb453d908415527d77d7ced 3521064a3ecfecf027eb6966c77194b671ed0abb\n43f4693acf846381a10ec333d6bfafb305ec7de8 65ed00afc6345165296b33d5900b6988c612e2ae\n5ed923acfc65bdb1ded4ea3b7f9edebdf9c8a05f 9a251bfa58fe8e6e5b2e90beaebfd6ff06b3defa\n47b23c96b905b42aff1ff57d57c853bc9cf29569 742a396fefadcaf8812adcce46c26c1f3ba52c27\nafacd53a10cce7f89303b599263b95a13f0ac7d0 91b8d94c2611554994b841c393d41ce2a7e1214f\nb74122a5135449e0424dd9b8d2b84f45343e19be 6a50a736668562239cee0ddf8df5835c9f36bb76\n54f1a8a97c1345644d1d4f32a935bb578a3c7a25 831a74e596c3f17727e41317b2ac84a7ac6e7755\nb19aa95da0c3c2f153d6317693b81a28b9ba0db3 2cd716d5c2c4e3b8ce957708a190401372e4a2a1\n0c1215a2d80738120faa46165535fc27cced98fe 70df4b037a7f3a084f0948625d7d13c878b33393\n8bd171d01a7f9f3601d59a57fe59005e8282091f 64324f890dcf010e372f5ce2fb462107ddff4a55\n9bfbf0227c80b4b625e72a96726db6ac8acb11f6 f4637d1d10543bfd538afca9de5ef53b11309431\n77e4bb669a25caccae63273c850cdd2ca0697097 a0d25145fe221a2a2f722f12330ed4a0ea45710f\n276429a4947a9c7bf372232c6bc065248b6b6f46 57b0a6ea4f53c69335e57f5385d80da609c776a6\nd22138f9c6a16662aa0f742475f0cbab8238fdf7 a00b0a171028a0a25e7e544251e92ad0e13d26e7\n6ea2aaf9d20831da400bae85aa9b411c3f547a5f c06f9e8497e661584261082ab2bd9b432b19d943\n627eda32d37acfd5fb2faffcc11261c31e3dfd63 b89e92d386c93f75d6335e23bcb3f50266a8d061\nc81bb9479c38c964a6e889464cf0f106f57be47f bb0c84a6008fa696e93bb47e48039aa35f76c95d\n4472f1fea81bde6e4e135f2ecde3bf318a96b292 d3df8384d12d181922526dc546419f6a24f20615\ne91d23a2b927fbeb0bbb4b2755b195049b43bfb5 803da34c27d388b58ced4bbca4b28d478b7b2fff\neb8216e3fa0e4aeac68339f1bf4a25653b7671a9 cc145528d3596dd68c9dffac55cd523f884cc0c8\n6b7e0f9139d1e9d0d483f24bce24e765c15abfac 7f71be3f7f7447f1b3e74f56efd61147d30b81a7\n634cf0437eebf5b302dc13a17ae329c475adbcee 80b85773ca533574123ce6d33b0baca5e4e85d39\ne1e98d6d52e0d1295c7376c6a6a7abb0702c5840 3aff8c2cf9aa3e7e6288ea7373bc1ff8079ce122\ne5a210ef0672694b059e7358fad5b58f0186de34 da11e84ed882d2a93e75d2215eac562def0086f1\n544b41549db643ff1f1486151e1a08de75162430 7f9a92109335afa24922c6246db03ebf2001945a\nd6116e8a9fc08cd8ad9140831a8af1b99015c173 8990be0dc6d4e43cdf3cd58e3c88a1e3160d06f7\n875ca0dee98a935ac50e3832614371b7adb02747 b850e36ce8533999d5b41e90f31e5d85e5fab09d\n9bb7a648581af69d8537a847ab24bd6f25a62aad 7fdf654909401ee6459de476860e09c726b12f62\nec991baacefb51bb0f330812d924539e555ba3b0 9b39784efd94e658bfb2c90aeba9b60e18588bfd\na4d254bbae861f2a125ff219c05e9d08a0724a7f 64363f8a073fb3114a005ea734e2fe58da191859\n03cec6ac1a01c635228c97267e52ab8446198e0a a607783123b53385f603654f075e82f7f95c7d26\n43364e2493bef84d9aa7016cf938cdb89779bf00 50890747985f341538c8600131eb2c542d54bf18\n357c855c7c22afb1ec8619804c1599bd7f820ee7 25ba9eda6324bb1b451e4b64f8813eebaaa84297\nec07b41dc2cabf83dfc98176921369b1c419836b a3a4db3e92e34d85b09848ddab4c44076ce22293\n6ed8507792b81f37083374547dc105fbedb1f8c1 95f1134aa0875b04df3e8a79a37c4d2dbd929d6e\n61bee7478e7384d085607a2abfba2fc8c91cc419 187b51910242776f75c35f542a27c83d0c514a5c\n3e20ae6542d7d8caa40a6b983b0f15e0d4452918 f0a8d1eed625c669f3516d18b5f523b43eb187dc\n419392a6a2ed1731394bcc0886f6e3bb2bc44da5 d9075c19c1ec8f25f643a06f14fa083f98ba2023\nef8e7dbdf3faad9b7555fb9c98ee7c7ec2ee611c 729a3236c9ed6d8741837b85c9d7ee21f65865d5\n148376063e7d510ea832333b286b97aa9a063bf9 b9d3f59f303740a0e5638fd4382d7ed50f98da5a\n2e8ca8a63fc7c0d13ea7ddc3195fb46450fd985a c8549d286a4ca6c1d15194d0801fb7e941efbe0f\n96e255f5d2e55254f72e11443064ab189148be18 5bc51071cb3f9ce38b1edfa9c03a09813715f0c0\nb1f7956504d18cdacf8fa8a6038b37551cfe9073 49c6375e3c72bd38c645d960985b66b6e64540f1\ne7fca0bfbea3089b3e2efcff1c465edd0b71fad6 83be47017d95638ba5446366d5cf3eabc877d61c\n1a49816ac72f93ebed145cf61108381e58e30388 8091659cf8b2cae05725b168f98f06d80aea0c57\n6753275263f74d63bb4d532f9244b01f0ca6fd6a 2dd5e435c2825ba96c3cef62a58da6ef0175af71\ned30514e4dcaa7f01d985543ed2bde9bf5c1b36f 2fe42183d545c370f6af4bf4c58683f00156e070\ne71fa6e0df88164044c49bb0f9522f142d58ca0f 6e61213ba0137e2ea98406065ccbc7b1f4a90dd4\n29213523463de141a8ef1db2f2520470b7d9cd01 ca951f6ecca3de7785b8fa1d806e51395c53d9e5\nc6be0f43bdd5a481fbe3b549c93ab26fc3d1c3fe 481abc444cac5243074f1835b4f8bdd6bd4042eb\n1fa57c0cdb855f74d7653635a1a39d3905b3c128 ab43b80b4c54eab348f552b88a88658a9478f824\n44d7bcec5cc141cdc543e22fa33555b9bf1621ff 181c8ac491169cbe9059ac2f4133656875c35f67\n6d9fbd02edadfe330d3c82210e4ef7ae1535a1c2 433cf2c305c84aac19e19c47229e8680874af3dd\n96768228ef48f5574c5f4026f5e9bb951c9c95cb dc6d6183b04ef4b7e3aa3729e2c10e22bfc3d7c5\n942699b90e02af5c4fd3c6e905a746653e35c5e2 32726aea74f20da1ba59e44703bf350a15e0f718\nf6b15a344575d347a82c1b5c137e25a54f0d56b5 c2dea3bcd2a644812077dd77622c1acc81af5c69\n69e36cb85b880a257326b5de9b4826e3440a1f80 ab5df0809a9990243dcff51e60b5cae5b499fc56\nb54ec7bbbfc5d02331982ffbbe6984494fbd40f0 48657f1f686b48a5b59a18b99d21a9f63f5ccca5\n07163724e650169ba9df4e6a535cb004fa246c34 db3e293cd2f67e51fea28f116585fee4dbd16a55\n6405c73473fd79fbe6fd3c6bf0a6b063c59ebb44 0864051a07c1e30992c8a4f5a1e0fa50bf4b88f6\n516efd5456a4b9bc151c23e928a4923112361e48 b6ce5ad17b8dabcc2ed666bda1a73669ce7fee13\n7d7c11bbe58e2644acefbe0b182bf25c06b1d94f bf10ccb1811550b9eec822b6ec739e2ad864aa5e\ne96f8ee74d111cf81f9b55bd079803d7acc30e2b 3c8b7373f7fb053b4426e68a4739d8466816b8aa\n2054955dcc0d6d0c8d4bb91f7a162a8de115da60 5b02b271b5a6b5d9839ed748d5f7eb2b0cd426cd\n2ed845fcf2b4c34505f978388aa9dff29095ac70 3f5b838216b4aa9996db5688a862cc443a42723e\n12dd7f93aeff6d522ff5ebf66943154d17d842da e76aa03e105d166ae9cfe9c54f2fc4e55e9fbd62\n8a2dea24ea3c122c4de54ace7eb18758bb9223be df547900691a350f5120a911724b2be6e1483855\ndd929e734612b51b8abc3d762ab0a3fcd07e5584 90a5694908eef4077be8f5c1d87c41dc8e5bed8f\n1b72179a7d024db64e3137a6638bbfccf9cae185 9cce95a867395276ea2322995031546afa272386\nc6695decaf8c1c12426c79b0e49d714ecc40a43e 3d186a9ea22a6691a5b615f314ff8fd23a32ed68\n6625afbbdb5cd107bbe6b1a40657ab5629b89517 4a0368da63ffd16388802ba03e797095316f308f\n73a06c976369a348239cdc6ed5ff3c50e5d03d19 9db16f317c5e2c0d891bdedc80ce62fe50b37805\n731f598f65222b247216045f20aa14ed8a8e642c 6ab862258b92f572edd01449297263f9c26e0864\nee64531b1dddf80caf3f10ed117b45a6304ee2ab fccd00cf4ab15c409e626cec575ff79772839328\n0e514f0636e2796e9a92bdbff8d566af3afb24d4 c444393b6a9af815f00f027fec755d47e5844733\n7f7b1d57a20225d878a8c1167f2cc9e7a4d45eb6 cb7698080fedb295db0eb9c271e9eecfd3a017f5\n1b85c633d96e89bf515300dd8c40e4ccb1a90369 61e92d0cada6bdc8e55c191c03ccf5179660b18c\n10363aa8031b0a126007b5819235bcc2966e532d 772769e9d17ee0e88d4b20b23f3cf11dd62b6f66\n55e0c2fceeb166945f46c736805fcea8affb4a83 e1a8296ca074798330a98bc578930b3c9982462a\nbfb1f474996bc5dd99f2a1188c01a6bc07814f55 b6f7be809db01c95196fba801b4d5b9cf0cf1e82\n398113509711c5ac8e7ed2e2271524e355ee2cab e652e731201c23e350128920919549358a38af2b\n28843a5d383f231fd118062216021886f0fd9ea7 39d7c296453293f84daf4c7811fb266405b1226a\nd3c7fbb2a34ffbab344217118aede791851b6825 5407d36eadc23b48fc799222efee4a6c810fc06b\n9490341ba3f3fd05f9f10733e550203609e9d245 25b9e5132e8a433756a0d0c98bfe8e976e5f91d3\n63564cb166a73db21f10a8ce36269d62f62e342b 7b47d0c386e6bf5c98725d668667f19d8c75074e\ne211aeaf2b45948e4e4656fc92cec4d6d46aa0f2 4401c2293e617547b43907f7658007df84e2162c\nde69ae4ddb68435827dc8277544466fc18ee59bc 1279e738561a5e8f83b455941714b101f6c31598\n0a6a0dd1c627777d95ac60e4e060638b34456221 0eb6b9d002cb5da26c6f76424c15c36eb5314540\n332a3d6ffb5a1ca2a7d633a4501a82dd11720c49 084020322fd3e4f1fa6d05f6a093f6f3b1e15bf9\nf1b8517c98678dd363023f0a09bae8a26abff993 1128239b7f9deeeaadbfbb5505d9eeebc3ce2492\n4288b0aed19ac1f0779867f6afa153d506904d69 2524a41c15b6f905c49bb470e5e187e9bddb6e49\nb4e4b2cf72d566198e8aafc5c2e0c2506e6c254a 9fbe87598fe2b3e0cc06be77f6ae5c6e07e41f90\na0bb32d175b6f8541314071c32d806af70bb380c 17eb27ac0ff82d7c3411cd0d93de2259ba31221c\nda935040f1f69d095a0133ed55ba626122807cad 3e62e23e35f950c356a2699afe9226a7d0c74aba\n1c7a57c8d60326b6ef7c66cbb04597514e8e909b fbf592ce770da36a63075f1a7abb0dbe40321589\n3d898daded1f6905f3f3fe025fa370042d4fdc12 bdd983be73f7d144f1815f75a11169baa690d435\n88f05583adeb91d3b0773f574f37d82151e9a546 f370a9b1f01acf31176f22ea41cde08678574489\na1eca3ef174894e40eea09d79477fe018a5f4a1c 660323fb45efca823675e300c4e2618119986c73\n9fd6e7f717d11dcd6d0d348a7c73f714f7966e58 8d4dd67460bb86c3d0ce0e519c92219d12f29bcb\n123d48e234d3690f7100aee751c1ceaed62f0c6d e2a95f36afa5ea10b1fa095d8c442492d36769b1\n0c277f98ddaddc0873c990c61da5eec6611428cd 4132213fc9ba644c88607705bb38e4d1c77315f5\nf22984e52a32be524bff837effc0255f8a647014 d74b9a8ba400aeca71dc225fbc2c03e6775b4b22\n9e1f8243a78cae78f60cab4573c5acb33536efa9 8d69306a578a2011b6588c1aae3389e18379dfe7\n71d8d9d2308e4743b05eedaac34306de0eafe5e7 f00fc3cc86ced4a48f22beef84990019294973d6\n7d2d4d270899bd6f8d3bfa6aeb4a2758965a42d4 9c329a1a12059d3cecd50ca60c5d3fec341cd83d\na819a2b838de4e7cd8a7fc53afba4f159581c5cc 4e09ef0a3151417a02b30384a1314d2e8029aca1\n3edc5f76a5f87935360213012d98b9df625f154b a5922473121d8e324054151ce9c36eb3aa35f396\na88f01a7c1908d81787be8f464f31cd39c2bfab6 20b2ae434f067f91b392a50b8d581eebe126c24b\n36fa0652d791128f0b6506d1a0a8b96145072384 832423c1531d64ca87fb21141c3b4b99008d30a2\nf58e2e6200c49952a32995fd6be6aa02ed9d47fc e80f158cae91e8f005a3d479f890590f718eb75f\n80ad32f698ef2bfef69ac92b0850ae60dab44aec d1fa794d991f23cc1b59ec067a0724a2d6656798\n45c524413e3af29481579a6e0da43bea59484c0c a70d0cb7d265942e1e7e48f59826294d4a4ac87e\n6d16292488f59bebbfdf6c5918c82a496fc6ab4d 00206d17b4220555debe073b7ab28016afdd3cba\n9d05c43236344178d16c2c659333614d7dde84cc c02ed58c8c36a9b41551cc78a636f08e896e4b90\n21a03974ca6d0616cfc643de2cc4e5785b2b9e05 429a404aa9b7be512752f64023be59d334c67515\n09e718baa6a9b375c5e6577a005e7d82f62aa43f 9dc88cd61a29d8e8c90edbb4cbcff0f4242a5693\n7d0ee3f2646241f6d646f21d81770aa3e41a7ccd 98a37ea1e6d9e0fddd0b61d495fb3682efe61615\n4c1a194fa75e441e8ada901deaa33791dc165026 e01280a4490822c33d0fc657dd7a7a6a76018036\nbd6da9d5da795e292f7ca72918ffd885b5dfef02 52cd48d77b26c26c31fb91ffacaa367520e27a6e\n0b6363412365ea2e529d47ef871c71047ca90e8a a6142592599c3b45cebdcff46ead5dd193892dee\nef82de8b5663db6acbd02ce83b6dc306ccad3652 e7f00d5cc5821ddaef2a1ce64fb161ce6570a168\nd3328f32789d6decc2118e84208ec54b234e96fc 2a9df48e0ace5d9e5ca9c467c4577b1a06e4aae8\n1846ba8267194fe346a832565e37fc26b91b51b7 d79dc55b62bf79b8ec10397d2d30f0732d8d8ddd\n5f62022bd5712829551fbec9df77a1890a5fcb1e 79e08e1cc0c8457d3c0ee750d427f9659fdcda93\n6e5ee9a4d23b4809c73d63ddd3fd0f69e632bb6c 8854e6ce2eba3d3c03611f4cd11eec2809ad08ce\nf0411bffa68e4039dca906de988d4608b232ab86 810639ef60b5e11571678fbe0e99cc02cca0605c\ne3de8f5ca25d750df0564bc3f69b959c4e5277c6 4d187bbda6e5b685964fdc0e09f847ae18b808de\nad2a91f4cb93ad4ef468e608067ac6f8154da8b5 ee807c5a92208909ebf88fce67c915b78465b0ba\n509ce46eeb1b4a308d1fc5a30bf75154a0f353e4 02c8696e72abacb370bd7d68b83575b583898ad9\nb02348ca584ffbc80c97cfb97cdce1f51664937b 4e00a2351d6c6126be289208d1cb68eb31330892\n707a4d2fa53f5856a1cd97b42fbd3cc3f13ac417 c9ea8ebb52486f57b17d17967c485620255dbecb\n63990987b44a1ca83dab214d91fef2ad300633e2 4db3da49196f3157e44d6dc55e1f5ce060bc977e\n1d1125c7d6c900d375767978ccaf40a78e43db5e 640e1673a0c7573031e47194a5b7713f226a6846\n2f78ac712477a42f1d5b964c6a4da8915d713e51 85ff62069f7aa9c9e8f1092073ea3295e8c3a0ac\n342d5bb9d6a2d4e3cf174e9a30644c2997da691e a36aabde03e9434bf074fbb034dcf47be38f0211\nc837ad09776dad0fa1a057a8ea4262ed637fa0fb 7c72863dd104eeef05125556a3dd96cdd04a3a5b\n9c3041048ff6abb54e3bc58b4a1d044ca73b34bf f3ea06d425018b06fae667e4f3d2d1fa300fe259\n904495722afb5ca1672b7ab25e78ae1bf07251e6 90e6b03b32430ecc1ee5463bcb1974ce7eae70d6\n59a9578dace32d05521967c43d6ba2417697069d 001e4c69f3b4242de99cdf469c01f8a12f4547ad\n805a409f41d5b8672a8993d6d0dd927e2c1130cc 3180a8c0776c853e8d7812c21e330684607435ec\n8c420af452dd8b35ae226c4e47ead393988f5fe0 52e829e93e96dc619b9d07f84d24c2714c8d22d9\na0e9e75d4151dd7225db2a608fd33e1e8944fbeb 77f5001ee4202741c3d1a34d3ce060d009e39562\n851bb45d420153cf40f142770945d95f3e4cba22 8a8a25072daccbb470e8ff8bd76850a0b1bd6f37\n8d05836111c2006f590bbb3c12cfbf4d7c73394f d25ddc37df237f6d9a96da42a1d1960c18091816\n6e801f7800b4db533a4a368105c20c04c225e255 6548df7b16b936bb6512702f2d5e5351127a10a6\n7227a671b351032d27c4299e02412081caa37d95 67671b080e2fdab7ef8f00b8a1ab5660c77da93a\n32b085873958ffda74563c094041033f58d8ecab 690965c363fdfce158d2a6d8be8fb7289abf0308\n3fc816aa84231af90762ac7b9d92c3c55ad1d95f 039a766d6b8f6ebb1bd710608a42e727b6210b01\nddf969607f3d7fbdd91ac74ed60c188fedf1430b 7b481cd48dc13f3b4d2db4f6d5f21cce8706db3a\n2e65eeae60c9b63121e119526259d79b04310640 9376e609eb62674cbb85dd0da46c3194c03b265a\nca16aedac75af614371f186a5a864251ca435b86 806799f136c88aea710fab9b66c8cf6741a4840a\na8eafef42cf5613a579397097855115a8bc8ed99 606f9224c2cd4aa7f04885722601da0507cc2a67\n0fc49308bbf4d77f46df2fa8ae5ae62e3ca9d731 998828e20d2d42894a067339039eb9daeaeb493f\n6fba56194c43e30e1b09a31b7dcf2e37ad204d39 2787aae0a41867dc1569a5858b7c95021ce15606\n67de8b3f6451dd961366da76ca360df01c2ce291 6adb9dc9b873f82c58d2d37801c0a1f7a00a51d1\ne7343e3d516ef075d1f9ffcead8ca7fea7fc2644 48c28cd44da9ddf448cf261f9c6645e4cb8ae31b\n8ea496e114e37bc96cb0eacfe5bc957c24734df8 e28e4c56964f9c52629d3bc6a3d4a29e8666dc64\n7c47c99f35aa190c9c6c421734922d058efe994b aac2c7ee40482ef546736b592c89d3d1d96d6d38\n9bed39845263f86d7c83aa7d799feab66eab0ff6 042acddca2ffff36bd99eaacd2338a0f8e3664f9\n101c0d8630fed2a8220e4e1d09eed1520748876f 4490206720c64c5eedd936b333baf89c5d150f23\n2dabb1e002523d370656472fab4a3d36291c52cb c2bbc65d3f8e4381ec38f28c33f5ab746c383b0c\n513b76aa21ca557f57c4451eb8793c7f56f961d3 4d4c7427a617aecd4bb34dfeb03207b52d0f3cca\n818516c52d4bb43f40962966ad321a9d108b0150 b119ce55ccf5fe205a1520546d692a7090306e65\n28af3df0349c278e85c9a7b37e68875f069f8e0f e51b502dbedd8d5b3e3f54c03c9c0ab22ae818d4\ndbe2ee1ef630ed4270eb7adcf7278579fb1336ab 64bece5d0dac047d74555bcc653108c901fdf205\n7216d08f6bb2b6ee0cc5dd59876f5e7fb7b8d6a7 5ee0732099e8b0c919754e865a2bded2d1624133\ne46c0085b69ad839ccb0347cf6a0c8d95893eeec 70274c759e49da052fe611248d0ab639a8b15caa\n5167dabd8580e0217fbc968084a0fa22a21ced95 76d8123dfc2eb7706050b9bfc654d42c19c62d15\n15e458c3b84d12924c73ed74b96a5d1a7f981375 f94fa14434ed3bf615400ecab9dc41564ded56b7\n9df10434d21f6a9bcebc8b729fe120a98f247539 1c4d2fecf259ad7b52cf23c582df337f844a6e08\n43becf99e16e9137797842d5bb4a34a2d6dbd422 ce6ed1cba26aa3f1d9424cf100cba3ea2a0f6857\nf95d8772ed8b01cea0f0894bf28b406bc2be19a0 9327f6c963ff6e3032ce14a0e78c04f3113f366f\nfc657f93c0256c0aa4bb875af3119a3bc6507f14 d9e079c842939ca9811f7b43a754b76f67a26ae9\n9e265cdf893e11820725ec9ad71dcb8646a90e9b b16f46ed740c0a736fe8d9ab40904d59eab9fa8a\n82c17e58cbd2f487e70545795fccacaee6d93546 f160d8a327f0430827cbe7e0994e1cf87323c52d\n7b6bacd5f4a480def01fb9296b240baf72a57f83 06377c50c7c2820700baced8cd6b12ce1976ba42\n3e9bb3cb74a43d8e265603097c8ebb8b5db00ef9 620d11ea64273f5ca5295e67e2a630d339f8d005\n73a9655add58388629ae4c47a417c0c93dc14894 e0b95f85adc908b95f202e20ea27ac1b587e1da2\nce17f0955303b189ddec3ae13ec480b64a6e8a99 f0c27f4eac3a2b9fd4db27dcbae8ff021736357b\n683be24fd2f784fe115cc3ef8494379404bd10b0 58faaee0bb52e9e630eda2546d5bf4daca49534e\n3253ac25a1ef06e6cf9236f5aff6496f7134cdd8 6c76e8011ec93519f0d878c6c06090abebae4cc3\nd2a7a151962b7109fcb2a245a290e92d343d42b7 92c7eb62f6ec7274802e9ed81cc21a3ee82f7daa\n3fd6572a14f54a9fef4fa51686e2995a2f8d8480 84798cc4a9190680219b298dc087ea995ceb46a8\nda90015344778f09dde0796c417b42d0ab0a3ed8 ea741bbfbc5fd4e00754e39209f08ad36d57ab43\ncfb4395399bc51edb3bd6150288106cb008abbd5 23ddb497e497c55d73ecedb160d8abab4746f644\n2350e155c5670125c6d5370d50bba25fd47752db 0537676576ca389d8d348eb6b723424467474211\n464d3f6a0a66240b872f5cd2fa64d408037e034c 7d45b25852e5fd558decc9365c84520db2547c5b\n3c9e46da84ffafcd8f347cfa1d7aaf24b0169faf 447d2ec77c16d521ed584d29d0226bf85e030a93\n42d6f850cf8798b1edbaf2977531e59a7729c7ea 2bdca570775b03117c04601a4a53d59a39029cde\nf8c920ca61a7c49fc626a8d26ba48fc21504cec1 2a68fd803b8453c90dedf7ac1c9b00a86ac7e3da\nc46ed4940fa09298f4239adbc41377273fc4cea6 62d5edb18092e6ecad0d7ae1a148ae2c03d279fd\n152bb29994ac5ffdee4684da0b8d97e4b2ebbd10 2b79ef13800b6e3b05f94fa240e7a307f0409448\n8f9e972f4ed50ca646c83c6722420c5e013374b6 3219c3910bfde2628edc65cbeee4851b0e7eabdd\nae694f10a23bf13732c7003b16cb6b2aef7625c8 37fdd2370819aa90dbabffc149a40f5804ec8a5e\nab22a37777d176b45f5f72c6043fe4d4b118e453 d6a695c5a27c55431d62e13158749c364bbf13c4\ndef8927908b632f8d55abedf027d53ec508e6bdd 55661ea9c2509970d8c472262a56c9c4df9209b7\n864987c98a8d4b831e8d83a3e04a3cc0a898efd4 85098c18c84a973812164fb61e6c45e82922a81e\n025e2897ef9a19c85d6b9e755287496058a9a87a 594aa755a95c625ea285fbc224e13df619f34409\n4c89ba7f27bb006c6d5f740b7d34a4f3d3f66ed3 0148d761bf9b3b7f55af95865eae02d3207d4d5c\n1f273bb7eeb34b8ef78a42a0d71122a0b47dffea 1dfb56a0d2b3d4b2614d8cee4980888f7c475adf\n2302e197a732985aebb21245cc59afde742fe536 4ac7b6e75ffd1ccd69c3390679c604deffe2e535\n3acf06920f19d3adebdfdcf2b03704e21847c231 49cfbbcd1cf34af4b7a7e48faa62b12f41cfb8c7\n28961b4912a14bc6626fa4be23b10e8988033f1e fb38a025c13d3faa1a61c617cd88e39483f3c296\n7104895ab155c952405bac04c05bc0d8a91c6414 9470b56e466397c62e5c23485af2b114e9413564\nd64512968a1ea2daaecbb1aa58934ba9b22f5dc9 575030b30047cb5a1c72b2401e98f4a6b113dbf0\n50e3ee79ccfc94a865812eb7291680bae2612d95 23408afb86440cbba0de793cb08e69565a19c987\nfb134ddf8a7f19f61b48903c229b80e25bc0681f 3d60d68aa3e555da8c566637dc2ae1eaef95f7ab\n77508f1b5f0aa660a40f5acc4a4d3929a92193be d192cee3a0f112b99466f91139d318538b3aa6f5\nab37a96e3d31817e74c5cd8e205c4db1c5caa52f d777e9aabf768ff5e58a798122aceb7f457d9691\nae197c08275cc5d10d32707054cbfc23fe82990f f3e784ea993ce7c248ad11f08277535ea93bad31\ne1cf144952d02af595f4b16be34b30eab413d998 36567ad0cb7aeac8ba530141d012ecb47dd19412\nfc867f6bdc0f8556dc0417f80c55d0590d94efdd bb34b825f4bc59e14e37b809654f62517949faca\ncefbb76984feb4d77cf1e98f871a855188bdef14 71246e9f652e82ec5f90b1f5396371233b59a64e\n3d0c61f98b19546e39545615610a9b214bbfe0e2 ac0c1297051a441e44109900963aa477d1769df7\n82900309aedb95a81649d09b1816768dbbfa6bc6 60dd6bfa7b2a49bee2180951c7f35adea05cac9e\n32554daa46d48a2c77e337b65b1d4d0bc082d1fa dd167d3b35620923656d48ec154fa1c83c186bc5\n8a25ea8ac917676de2e8e9c3dcd2776083caa71b 3bb7bc8ea097630844df0f0c59a0356f2d02fed2\ndc856c56fb105685eb70cc3d5120057d0683ab1d 993acedd98fd1ae2cdb81d0a05fe44ad4a23630f\n00a1d2e8343cf1ea7e1bcf7a325bcf94e1782c8d eb04b9c3f218069c3103c67ae66302da1a598358\n9c145e88c81783fec92dae75a10302ff3a145091 dffa8c56cb3ec210a0adeff14050b976e59c9f89\n389e7a54653b9df72985662d5dbc82dde6f7028f 5a2ca4c48e74dbbdac57643215824f9db13d291b\ne4144d914db9095563810408a6b44ae3b022229e 24bece7b001527cd489d25ef194f1c7c0e3bcb25\n429141a535beafc04a925431503182e95069f9fb 118200e26efd05ce82d06f023b9e94145b04e5c1\n5617f4e8f1b65c1643254b824d3b7e8f4616e91d 329492c66da1116ba1f26fb13c282e2a3a335348\n9de79902cef558cf092ae60fedc3c52c7410f876 9a749aecaa253393b19134dc100ef25993452424\n14a44e5190e622b394a826e56505757c4d2542e8 acef382c0175fd022461248e13fc885ac2660d81\nda5901480c81d19931aac488542e042ebdedf798 d9f28a5979f83fe16f846213cf7da2b585d225a8\n7514219e0ceac744728cd30b0e453fbb4810f240 5ebc6cece943ebc089e3f3d4c305891122e9bfea\n78d5a6ab2475ca02d41556bd9d7b8159a2a6a70d 54a3515699eff7bb585e34ebc5e447c9f00d1506\n815b3afcd0f5147330ac13e9830a2878a2410e4e 0d46ddaed4e0fbfa607fbd158405c63c19097392\n218eb543dfe2ad6028fafedb89c985d3e292dec2 90fbba11ec9ac2afa71758bdc88e3706bd3498f9\n938cb98312ea5fcfbbec98415c9c32524ab2f413 f166d0d49099f8dd5ff8f1548e5f4ce4a36162ae\n490caf100b9dd2310963a69896720a5c07d9f2b3 57572b6bf13ac95430f4838a84e7824e231a405f\na77ea07e671c880d1d280dc656ed527ea249a41a 74db014427876c06c2df275614e48d2dc835fe3f\nab13206f134a6836000997f2ccef008d7350b56a 5cd32b405f2127bab5f9c4e3c1cf2e2ead18a70d\neb6bb970ef209a992d94873540d711f178f3f857 81360e56793f71a586d5e9998acdf365b8ea7c52\ndd93baa1a2e92427da9578d1701f1e5ae43507d8 335371211e82231aa14627f2fb20422f2f232907\nb94f7ec701250c762427be2170736513c1a962d4 44f6ad77c478de819908528d9e61b33381472189\nbd341ec492a20efd190dc850f765b9bfd1ae1451 9f4a942a6618d3446e2e83d7f84f54850aeacdec\n597efcf0480b9f8004b106856527bf80920fa29e ad463001037c02f1a3a40562f854776ca57429d4\neb043e18a84c425a5bf7342b5a9f2034169ac5cc fe7c0d60f9a27687143b06d54c5867961637beda\nbe6595f128a4767473ea3e6adb7992980a51ca65 19863446c90669f2690a67c5ba1d40b1b8e44dba\n543e9c2676f1a983265d87e18931ce71f28217cb 8209e3c60cbc6b3f4736d2b72149f0922edc7388\n48c1ca78d313b8df46fd4fc3db60c3334d86c135 3af4c03dcb4cf0f6bfab8082d0634a863d60c019\n277d738a2364056377574ece9d11966ca611f915 7f2de2b75fb7c5906e46c1c072ecfb25e7d1dfae\n9777fe83ae190c17e03e6c330d4682a26ad6ce14 253a7f071988cf307922583d1b6b83717cdc1c4d\ne22b3fab9aa773615b564016a9ec25378a76adfc 3a30873c835363593fb4db41828a3917c10be58a\n59ff16b48a822fe6c46c6c7e9337e32a0716b4e8 11d3e4eefda627d91bf8e4c70b775745e2bcf6d5\nf06cbf53b56dba19c5c5188f02a986cc322989f9 8dd1cc7ae026c04f89d7526691d13e650b618caa\nb9e819e90c9dfe38e7913360f283001f30ab91e4 5c5c53e8c696fa46d059f71d921e46e0c5932842\n8eae21d268d558a4915cd4ba7c27b67b503c58c7 d49525bbbcc31d4f13b98164fd783c63cb17da95\nef0b94c62fa785b352335856cfa447cac09af7bc d56ad99ba8b279a87a8531c1efac632f98f6ed6e\n6284595957b682ea6fdef3ddd8cb5001e475c135 ecd6ec27407fafc1e406ad6295f7ef38065bc0a2\na9e4e8c17b9f8882e7ad22428fcea7e7b40426e2 0770649d17ead921c3ca88f8c9624e06d60d4a9a\nbc6ee6cccedcda66fb7283f6cec69c811f613367 b31909ed03d0de88dccaa6e101db109250845f74\n635f128a646b842cc8bf6b29085dcfc90e284e6f 62c0dd5a417774b1a0ea1813b66e621cedcb965a\n52f9427a53d05f0b48568339a4e47710a4936e57 57349d64925d73dee52277f73fe6d3bc5cd34ed7\n074aa666c807aef5daa41f3ab0c935184c29e635 1cc49754c0273a9e9009a990eaa324b9834adc12\n8cd38531fd6a72c2a1793c2ef6af6e500928a504 83280e1184888fdd3afa63f5953f88aa5c4dfbbe\n23907e5e216b3020ca42391f5359862ae8344951 98d7e3ce0d90c026eea9bfd0aacff258906ef0fd\na2b290e97d3c791f04778b8e0eb3424ff3649d9e a9c50fe7e25dffbf8b18e84a3b0898b1c17a3434\needb0658055c5e7bdbbfa77ca7b2cd56a7c4517d 1ae463e2e72d6c43be126e9c34e2f1f4c549eeb8\n29ba643dfb94f8efdc5cf5e40a9537e7e9ba4175 76ace3268222664e4876c585b9aea12cafb601ee\nc39140f51c4600e575b4281441885fe2ec33b279 6cec3f455edf57a7e43f1bb2f18f55844efac23f\n4770d0ec0fee0d8e0abb243883f3931b836a2ad0 c0c04ca3d83e6d45c68a28c54311570a8258e7f2\n3acfe538d17376ffc457c41e34c99258588e7b98 f39322ffd008d9e005433761442565b76b8e9c6d\n88c0978c2c502c743cc8819a66fadf4cb48a3199 8894b588991a6b238618dfec8d04b6a8f46ccf40\n9e23d940b91adeae3995f2be2c77ff0dd08d7116 78673da8c375cf3a38b7450a59b62e0c9ebcbd9d\n887ba68d03676b0836036252bfda47a347688907 bf734cb6a6a016ec6fb8ccf4a4ad9a8df50cfaee\ne894aeff3161e779ba70aa8ed04e4708d2c03b06 0c4923213058fcea17f6c08af1e2299fd6d43fc9\nd04a65d4c8262de8ab72f5e21a133e5e0a696705 8af1b296aa9f2a2f548d18348e86228a28fcdbd6\nf125c6e3254bd03eaae6d1f95fb61858bc87340f 7984d43b093108476dd7aa225ac784dfb6f2e34d\nc9013f251845a8bf934770f2655f7c6df61bc2d2 b250e0616a2e1a77d3948925f2a9a55a60c8438a\nbe2fb8d454ab445bb3ef298af1d5f720450a792c e9c67577c2612589c82c5629a30f77948c9eb155\n03dd15d96bc9a6f4f445bb851a049762c5f1ff88 dab732c78877553d0b565d6f1f6ea429148bea27\nc230346e112850a1521044385e9f6d9bb37fb87b 87abd1dee5047ccc1606bde2a0219271246d039b\n5d1a39a7f280f0925883e1510ee456310f8c09fd 1da2fd8ce5965efb86b17a2ad480a609907e29c0\n50a232dcdea520070e77fc6abac8d944c20cfcaf cb65506af1c257695c22da0b353898e80011110c\n1f4981bc526d2408f7773404bd205ad7bc931cb2 4e6adb0ba189a6a1b7d96adcfd8fa427e39b2cbe\nee86de00a5d53a67a6f53d54b301999581d24687 ab0457b160c5f33547619a4d3e1c10cf5fba33b7\n91af652fddccfa2b0c2e2a77880b6d244705faf3 854411ba46884434f5891db05d4d825ff93ca974\ne8f54c04083417330128f003658db0031252faac 106f431878802383c57d930ed2f1e26e443a77ba\n787d3f907f357af602ff0036e868afae4dbcd530 d6b50c05d0941a8860f42b6e84186a02a5544219\nbc9a4fa323e8d5efb3741596874f84cba0f3e081 ce8840daca6b28f3205850f442bc4bba8e5f4f96\nb1688ac881e37cf59bdf1b5740e0c2d50a49085a 1692ff244f79d0e552271d625bbe334ebdd01e66\n1c92b6f2be200e7c9563cf792b9b66109db07259 5b85f9c59aa47cf8da7248b74e0a0152bf35f2c7\n25fd3ed741789c751c22a0cd300fe61585622744 75e672bf10b30536e581bc29213c8ddd4fd88a22\n0d9f3867e90f07c3428ef82d5187260b042058e0 439f09944c3203138184fbae9cdfd767d191ff54\nfd2bdfa515a24fd3d93258134d557117b77df591 b7dae63ffffa41d267041e389777e8c6833f8549\naf85f59bd8f022137b705261fbfc0436d49976a1 2d0b88c6b7832525a55a813a12d917cbabac25d4\n331bd599f382c1450b507bd792e86a99130476a8 9e4c310b9398c87a680d37a898303bdf6e66c5a5\n3acea6de70765e7395da599b0bc099b146ad823f 7e502ee5a31797fdce3d6e95d0bf4e1e73a32cae\nac233fc04e1acedd1e7aacc9f6022643ce5b61ed 18fc0d8dcb7f4bfd8ee5f47a1b3c6c0c39ad4232\ne1f73d61f52800daba07c5ac526e82f1e6cce942 1feec079c2ed46e3e93dc1f1e83403ff267c208b\nab96f39e630951bbb14d92748c5b2ce81f691d39 1b0e7bcbe5f67c72eabded271cc46748033da038\n9a93b046d43826f5dd9c0974f0aa119590733f34 ffb0c2b9b6a3e1d27e9ced9eb5a00ae52e5a7eeb\nd78c92f9a6f2c0631a3359e0d32a49ffe28d6239 3279ab81311149413e7523705dcd4be1c4f13259\n25ef5660e755b2df887f30a3a8b0f6703b4dd3c7 fd2b08f35b8f2750b39d4d40fee6d5dbff06907f\ndb591ee92f9c8f46cf8140f958fef72a37f3033f 0c5024c73af8019bbe5d291691eec01a9a89de13\n948dc190979f319c23d7fced64bc2e1c89a573e6 3f3704e905728bde8a011cf68b9e52157edd9a40\necbf2d82a6fb2bc4b1a0deb32ee753ee8150be0b 3f74179f46ffbd2bd97f0e6cc8178f96f1506981\nb7f5326a6bc7e36beded40d09f424d61c7d4d37d c7840904752994e9c358cc9e936711e453007729\ne47453559f44c15f48042c23793de612ee8988ae b68aa16e071942e7ae8b3b1224d437265e316f30\n0254d5c07e97655936e7c4cf7f90dcaa90679d31 278c5a1d7a67320e8537b83445dbed41dbde0517\n2c491f4431c575e034b905aff86762c2d114cc7f 87fb14d1f2ac6df522d3625aadb11b03166ce4f1\nb2571857294c8f90d3e8b6176928c758eeb0529c f1ee34ce02ccc916e1a1ecf9d861b8b627a22055\nbe8bea7a8e6c39c7d5013e4b832f7318b7b07504 f4162461025742864ab9ec14a46d1dcc1129f6b9\n3e164e9c01a4e04a31fea40218d9593cd602c66f e325ea0cb4b679575a0b850278a09626a1462082\n4b3f56657080357152021cd55f8cbb8683d8bb37 51f982a928392830a8922b57c14241f73f99a5f9\n80c9dbb30e2f416418e75c48be605e02d8a4254c fce2fd6b09c0970be3f986654c962c9af8dc1fd7\n6d6b02c887e433c1cd5823061d479f64ecb85ff2 991c38f14c555d1b3b90eeba01ee785d7a9ae7da\nf22cec9ff6b428dcf05a722cbc80b95c57e7f71c 9ae5ea8225c46aa21ab6642951bb7511909ddc01\n39fecb81b0eda8b6db7808aee69904df58ea7133 e6262c810d774f41f356e4f422bf1b4a51ea9180\nbe9d5eb78b7054845e6bdc60206b4beaf16a36f3 e07addd3f64519ce9657d7315f4c9002f5fa3f1a\n17bad5022e3dae827f422972bbaf43ccc68384c7 8c008957ec09ca7892c20476469f9a79e79aa369\n55caf563a92855d832f5e56e08d5f98e392c2ca0 914195d22506da825b7d713fab6f35675b11e3b1\nbde8f3919faed0d24b3bfeb73cc8fea1ea41d685 c5c88fb50a94fff7113a9ba1bb2ec2bc20fb61fc\ndf439865cd139775516f85eb330d019fdd58a482 e8d0793425a397e3f290b0d97fd90ae21d681a1f\nc947640df235291e1cad08c2c6c548050ac61818 1ba098a8927467a568f1fd39d0be128d4205cea6\n4f746e2be1c4527d2cd546c5dd4f498a66c2c275 9408c692b6339d02d278d84ae71981c8579b1ebc\n6d069d92ee2ea4fa989d413e082bb4483b60db14 80ca51844c1eb1fdd357c13ed3c948d2085ddea8\n8a65849995fcc5ae1a498158163f6fd95dd92c9c 55660059c7990e3e3947c6c3bf7f00b0fe82cfee\nd08a65f983f56ec9de371aca8a80d2d3dfa948a6 b43fda48394f11d69d0a6caac66406b4f4d88529\ne49a901bee18170fb108f104a0b08d389257b923 cdf596d4cc44657d9e5d0c405bb601391e6d387f\nb5b1ac8a41a5f9f31189b174307b0bc6f718cc40 dcce591f5d5a0709a6a02c0154798db5e66d1ecb\n650d65840bb966bc94ea0bdc6f2e3ac68cb74510 f7bef484d062a21075cc2db43c7fc4a9c8a8e79a\nb390bd6779e643aa7a271a1a1efdbf8db629b4d2 35a7ca1a3ffd01614e07032c043168a00b8ef232\ne6cf343f33403ba71e0e25a7bc77d7ca968e4f42 de8e95a5a6df42c252a5abc90253d10e0622eb50\n76a6cbf1da9d50255b7da686a4ec5b3e8e1201de f74cb9764eff75497982d0eb21279a36bb801262\n561de68952708ce0bf284b1112684484cbcca441 9c901f0ae363ac3d34331632056816993aa91fd1\n4f947dcf4a4e2de2b0dffb87399bca83ecf36899 c68ba03bc7ee28878a425c21cc0a7ebea98161aa\n6f5a6fd91c4a10499e80c75a1e31821f78dc9134 ab8036b2a4fb5210d5f9d2405541c8af38bbde07\n8cfeaee510d52ed0f085621825a182ff560e7802 ceaaabd2a9268c56a99c3b9615e9642d242b1feb\naef4c76ffebfc0a69e97fea11f69c2868356d2ae c176aba09f8a8348548c569cd18a37311739a976\n8193b037bba6d9ee6a9f08bbc9b8958a1c5063da d5ed5604896d75940ecec3180f3e58530a019fcd\n40a102fb158ad412b5516b2ec191a65db7ff8b4f ac1d28df5715205a3ae62b6f866fa33d3d9de9bb\na9feb545dfeb0958b67e94cbce89ca2617659e3f 1100b305ad800b0cf4804db5368575ea17125498\n3883cb0bb278c4e2831aa5095984c298c427d8c6 d6acb48557b55864142ffc3a6a775163495b80bd\n1ca96200661a15439bd26317f611bdf9c9b24e22 4d92065f8c3a2d54d2793b694aa9dc56a304348b\n48e35ef6af79d56aae6ef056cace52d3ac630bb6 169282d3bf2f375c30ee6ab05466302bbd5710d4\nc431b2d950af48c068276575eb09b58dcafe3266 5b960d39f46f09e47eedbff34d070c34dbd3769e\nc0f79c6670e37392a3b496152a4daade02d9279a 1698096d86923b8b5eb977735d7b2ee4eab3185f\n8b059bb876c55cfec83358d610e677d89c318623 37233adcdf11c9a9710bbf075bf7f80eb46a6b05\n4e7625092c95a1143b053781e075a0656dcbcb5f 237caf69c075659837a82a57b3b3dfe7d8d34c34\n5419b3457748d0241216dcad11e881ead422f8ab 211453350a5b1d33fdd956715a1340a0a018d819\nc3bc8177494230edc931f5948ff99950ba016652 fa9013a1eeeb021e3adec274a613b1cca1e2ab1d\nc9451c9d81d83a10518d6666868dedbb874e5878 e62ae44ee9e6bf7bbb5d5984250f99f6b0d64e89\nc8c5d9d4cd4d688f973360fb2fb42cc9d94afcdd 1451328b624adec4ea0b68732d81459fb448dc28\n0c076f5e559b7068595fb2cb706a000815883f01 5ae27056701ff2e38684c8020d4a248be52f6b3d\nf4c8f764f48fb5d4e38c683895e9bad8c8126a99 44b49c6eefdc0a09f709d2b7b589427a7fc2ccd9\n013963b7f6cfab8037a80f99c796743c5052253a 81751be6458e6fe6c7a5d621d0462102cd3165ae\n46f6d4c0a2163ee2e86a9f6d5deb139bbe138e33 23a88c4b50eaec052d11664a9c41417029fc5f7f\n8498c66a7f44fbea41403be3557309c2dab1b5dd 1204c72e68c8c5fb89b73cbae7d0bfed3727005a\n435234dd6f4c32981ce48e169bf5822fbfe2082c 9375877b69d0536b86dc08926ebbf7ea85809583\ncbcdb80fca1062dbd53e165c54c0bb5116b7bd88 9e777fdb82ca5462fc26b127bb70ebb93a869ec5\n95b865c02b751786e8f495673cdafa3d990f0701 2ee9833c28f8f7afcb5d3bd95f2df8e1ee3a4748\nbab36e0fe5d8dad241a9c5a30ab38110a1304132 1c0759ea6d5b487ba115598f5da39d6b61fcd894\n5f4edfed5b0d599cfdc23d4ad87021d13e0a4b39 9b5c762136269480b6829436bc4e306f1e2daba5\n269d18e794be180d1d17ffc7555c000a73adb553 e18e29f29a515ff6341faf48903bbc76bf7b4744\n8c680ba2edc216688c86e61f1f7e2babff2bf082 f2685518d6c0ef5eb51a7d2f295264c9b189e38f\n223b6cf2eae3e3c8959696f3f0077cc41e0ae170 46058c30aa1a3124219e5d280b090990668624ae\n231cd4c23d28ea5015f8b8b37becdebe3fdffd56 0f6e8c9488ad0daf1644791552df8950e5ed3879\nd6d385d75d424f4987644fbffa7766d39d585fe4 337ad08980fe8cc91507da4433fcfead7520eb9d\n5e5e4245e90c97d2dcde2bc91dc2a6f91accb53c 66406e6caa9e718b03d5d2438bd145508d4d380b\n392c11989853b6b2bc90f6c1c34d250f9599d148 db67621a0c8315fb75b7f7710cc6e343cd59829d\ndb09992d7773ac9b5099e121526521c3f68751a1 3896e9c0c443ce98f795ebe1eac9d2bba2df7ac4\n03029f4fd6ddbd6027f81f721965482afbd2df58 0ab1e4a119f48d67ebd8c7090072332f138c983c\nc165754ab88266c1af67278d581a0c1408318291 b757168a5aecb0798c09b92c1b7d5d9ac9cd0549\ncf88226bbb05908a90b628132a2f4f31864c1717 262459befd5a1c816e16ef16d3bfdc1cf975e2b4\n612797633e64e8d7b8e39d18e17f37437e3f4432 81c12a984891863b394dc8bfdb3025a87fe9990a\na8e805d2fa68e0066cd728af179dc71d3aeb5e3a 400028332f2f848fbd266a5da30bc37258e54479\n2bf06b74f7732d0febe749bd8aeb56f6cf24d1a8 51d8951018957621bb4568750e0c45f42799669c\ncb6ed0117b9c6e150ae06830760e656d0b5e0d2e c7d38f3bdc94a785c6cb2c5785daacea29019ef4\n0450a752641724ebcb54456d8bacb3ab79f62b13 3b7359dd96b6c7665118e3b1051fc49e7d634880\n62bee10b9d8baa5f509d986b6e775599ce13ce52 825790972de67ef240998e52a2bf3ab1ca7d5868\nad8565d2a7d07efce794f7ddf977ca71e0134708 d4f6c9ebb9a8185ee052493924acf77cb5e1fc27\n62fab5b5d4cef09f119ed0319304a91b46fb92c9 5f855ecea1949fdfd283a94d1faf22e324c4c267\nd0d19c6196419680d1f9cd0b3287be616b847f48 79a61f198b1c609564a663a4dba05f8df20801e1\ne9aeb9c25a4edcc5cba03e0e424b08ede6ab0ed8 99ae83dfdcb546d32350b89573fe4e47a99ba348\neeedb0037dd37c769e6092f301615fa3c90897f8 9b6d17c281c41370c4fc62d159059c03d7374044\n23a5c790367054d0053e6bfdf51d562b6df6f7c3 da00a19e7f00ab7eb5b3b2529b967d4fedaf44ab\n3dfc901e2732d0a0e05f64338b141bcdd668a9fc 88cf25eaab24cb88d752b1c936aeb8220212749c\n7bc8419e480e4682cc6dceb59b0032532eff78ec 83b897a369fb86145f84599ce523b74f33a99628\ndc0517feebfed097cbff043ccff5e3ff0d98d2b8 1606134df0d838a4deb0a74997b6434a55b67e63\nf420df94a3de43164bff57256d2e818a98eda806 50a549444e3647ae5e71acfbde0d5d8661dbbb60\n9dd2a2cc3d23c63b405f19338f28cb6513a8a399 5789855ffc82336ceae20d6ee9dbedea7c333491\n2be19b918d292833a74926a7696bf197275f0e38 b93b38d18eb0975aa630dd64983927afb1dc9e58\n36ed84f90e22a6f517a6d4f3c1082c7e3bca02f8 54ff8852ef8c0fac58f4ed34a71039f1ccc948e0\n4dd04c785aac679c79b866c7226b583bdd9c2211 b3b51d886944167e8d35b7ef1b914000dbac28b1\nd0a34a367ee53232da3240c1aea7be72d45c09a7 434606f1cde025a896b0aea36b22a87f0dc617d0\n7cfd666322be243f4f30e2815c03e9d9ec503dd3 4f4b7c3807188fa88271361a7809aaa2cf67f1f2\nb8338e5ba822a9cd8304eea88c7388ebce86ec2d 65861007af1ed7edbeeef6fea7640aa65a57a517\n0467ae10b1f763afd64b94d4d0ab7cd510343b10 decd3487277ef2a2ca2115d8d55121195199c6a5\nd984501c413519d660aa512c0ee945fd4c31a0c6 dd740a39cd8e9ad240f6243b4982aa910a19f84d\n3a12a5e2711c553b4997d2b141754c84560a8cd8 1a6c79f6a898db1d42cca798e33cf307561edffb\n6bbf022363bae897437e970681de03b29c23c34d 63a96698ec159f9b9385ea1a573c2c2840cff245\n5bba94b6cced22cd5e24264b702c230b62a5ac8d d3879a79a70c0fc402276912bd4c0d645f37757a\ncc61a7db388cc41617438d1e4827fd9addec97bb e2e94696497f621cff868e9a92be14a135e24150\n8060297315e899b922f339cecc7cb0e874709a6f 624a657ce832d75589477e72f672777d4199c47d\ne52871e5bdd068f32182724aad480620e0c5029c 8bb836c422087c243e31d4ca76808c8772fd0fd8\nf15b22e16de3cefcafe541cdbfce6686b925104d 19e7efd303e0d496565306049a17a26c70b41898\nde6ee3a9817eed30fe1c0dad40d0e79f5ed005ff 1a9953ffeb20d1bab9c87647edb44787a7525344\n81b80d1a2f3d5431c6cba514a86b3e02352b7695 72f485f53bbdc81ba0340685a83b4711624d1b96\n94ad566a8f88ebb247281f0700e588d5be4bf75d bee2951f096b5d764425c389402584df36b0a5ff\nae2982b449fd0a1cbd96fc9fc748803f6781111c 8b542148a8184b90ed42505f8c1e497b6173b680\nde0553ea7096fa5cfc095cf1b75b76a7984a77e1 5f7a9994b4e05d03554c54ce9caf2f1779fd8393\ncae52659747bc8fd8dc42fa0ca7ce01e315ce715 337b0b043bff09533d5ccb81d3de41cf4d5671ac\nd50d3876c04f6ab7e2b984c668fce162748a3413 2c973dff2dbd1e540b09a616471c7f13ad917ca6\n965602b129a2bf4f3190333e465cd7525a58c790 5d496c3a3d54a9d489ece8fccfffb323be2b1faa\n21761f3a91a46f9dca7b2f4d53f155477bedb287 b731d3e34d1a0727c524e1a1d1a0158875da6fb5\n69cbcdaa5c9bd6c195f57682ff5425231dfb969d 36c5dbb658d767ae94e99e6347ccf0ed5fa883a6\na19d90420c3fdeebe80a46e1c0cb9e566f4b17d3 3d0281fe0138f8e6d1f893b9971d564ab335fb2f\n6be2397926527b8b0e6a39f7e2ffacc557b6f3b4 5435b5340cf4467833ccb42415a319c78018e0d0\nd06f68253ddfbad8a5ef774ee8d77258cabe400c 8f0cd8f98c2747060bd1035a3c43b6f1306dd12b\nac9cf445745f15068687f8b47bdf0b6f9b1026b1 0b697f464233a5719c13aa45abb0d1398dae210d\n5eaac0109011b2e0bc3631a91278e59371956b20 116204d0f91509d9c872e07021b19d91a672aeb5\n64c544dd5491c86bf39c17a332fe863b49c99a1d d7ddee439918a5fcda438717d0271f31d6bfd58a\n672b05f3dfee898e2f6b71b65ed4b25ad1f6008b 8c46231df00916371f7a09298e82dbeda5fe8477\n35e06911404b40a59cd7b20d90489e37a352f2ec 54eb788bd4e8037ba30735030d4fde7e7cb78d04\ndeb1aaf9ee044245a97e2be8d851651e22c39893 d0e78af2b848f09d7944956b2f9b6cf5b16a5712\ndde463fb0f09a6752e6c2f57e3041b66c5598315 7c7690552b1b0c92d21be376355734db2125955b\n2844d5d3602ebebd3a80c3855ace38267ff6311f 4347cc7de3af2b0617507d0006a9d1ea03e2b92d\n73aff7e0358a4728a688633e7adaec69c8e63d91 8e2cf681095b4efd0ea0d235af8ad370530bebab\nc91abd220f2a1dc4e777e73c0ce00193424342e7 d2664bc8995d4b4ba8cc0dec8f54db729d5c5450\n8dfa7eebc37b46f7cfdd5428a4bacedca0ec0d6d f5e8d85cf08564c1b5c587483dbea80fab02d3aa\n77ec2012b56cd0f193a58446ee2b69fc78915942 7120b4c955e2a3b4c4bbefccfbeee4f3203e0f25\n571b1229b39471f76c2ddf9fc1593493a45e9c1e a2f7dba9b5776d997be0098e69bdd82fabb7a629\n6e62676a2366e8c51a315945d875ec7b9f33612e f8a8c4d22263b548e34122bec4f2285504de944a\ncba43a1e86a0d2538c45a8d7ec136e5ff6ec0d65 24b5775e089284c5934c7b251e196f65dd317003\n9b9bc8efb023111e02948a23d8a9c5841c491b80 550241b2db9c833ec104a59a267da2bbc9d36e7e\n13b88cd4f11661b79c57a746722d21a6cc950db9 ee553ddf4082cffa092d3391efe6b483a52ff07e\ne440d60b0aafdf9db94ec5dbaf4b7bc2f52cae9e 6d302c97d28337e7e761b4a9d9884a4e5bf12a74\n97259902b9fbfaaa4edfbcf6ada31043063c4c6d 6f3e2b1688dbb8f0c777db5e8ca3648b933c49fe\nd4b9e3d747184ec7dc78bc71df495d9952c4ec78 a8476999f22bdf5e35164b372579558b753e97ba\nb7be2f4c8f17ed98d27d2b8afde9558c716a6dcf 7e6ea1fa767ecaaab3e25775080fed0c551e0c08\n2dda131ccaf3f05e6e53d5d2bc490fa0b1d56a41 b3f4556ec7ff2223b94c04501d429c6b081f8375\ne37ad462c1e2a7416d523b8d5d4f87fe9f0f22e4 161859325c55036035530f8746d4f9b22be4221a\n0b78099a40c5c315e097632ae851e736c6633723 1a24468b13d560b3861cc32fb46419de13134381\ne839fe9914ef872a86d6c0398a96817b51a077f7 2fc2090026a52e24241d59f39815082cb3f4b3aa\n4f2d08976b54acccaeac14ace338fab8d7df0c25 43c7308950517c77650075ff3c57e8749e022f06\n5f1cce5d6b6e477c96ec6c542c9bef1ae1e73525 481d36414c384d3633e43643cb0701b76e9255c2\n11ee3c4cb485ae5dc1eeacd5fd34fa8f4b9fdae2 2c929b31060bac6364a128f91df720216764b85a\n53666750c962d186c8995fdc3a3590e034e8fbd8 7f68af0362dc90f4a8c4c9f80f111a7b431c2227\n2e399d4c5aa1df3f68aa3faa27d5e46b18ed9c0b 015fa92fa547dfe62ebcb492aad47fa072ff0e33\n320fd6b6af69121ad8a037b4ea6d5293ee895c42 626c50f3ec594d2b9d205e4e50d31e6deacc28c5\n693a444e1f84c4a5787c8a6de3b1698ac2376fdf c745f07bafcf418474282fc0e7af1a11625876d0\nab8c033954273ad7886e53d2b5afed330df4177b 6406f5112d1e3c9ecfb1ea606c2323285d978f13\n2d3701593362c7790da28f40363d3ec9db72bb00 24593ee8d78e1ea9cd07b807674cf81ffff4a262\n99dbdf0b14a7bb2f21a59f82a3cd2279d67bb77f 2374a44a62ac8e961a51895ebdc049fb5155bea2\nac7218727ea8d9a687974a9c18b9a9eb5b5a60b9 5d22ec3f97f00cb930f7519152580fa616e6b056\nb7e404e7cd289e85270e05a3046e7b7586db790b b602608423c9963a504cdf84cab3bfd1e5c260c8\na8335db593ee2bac94842e0e42117a2719ae33b9 c601560e90004582d2729c38d84cbdad848878f1\n9427100a46d13df1a00ec0ae673aa540b518f821 e747c57073ecc26216ccf279bad5de41e1f07368\n28569091472e87202109b6092a053a7ea9c58bb3 30e498cab2499d3cfeba83ec8601455c25b2b03e\n16de54a6643f6bb10e2d88223c9856d10d17b166 5334d5e62fee69caa651239920550fa09e5888d5\n5c6485f56a65dea6e43481530e6c48d5e83a1614 6e7ea7f8c74ffd4b74cc7b5b768ba1f137c64240\n09eb4709f7d024de55a1d900dc6381c99c51ba81 e971d968b54d1fc2164486e7ea39c1e30ed4b420\n87af28cb90f96c171fb8de761c83ceb13f329f68 9a1393bf58aa5b47dfb0e41c3505c529219422bd\n5854f372ba873d4f80798099de17c35eaed281f9 6ca640637849a5d1f2650b176e6bd17123bddbfd\n68a146b11e0b1e1cac2f3199b909a53ef47d8b86 30964bb826b96c63b84e46006eb03d5c5e8d9216\n842eaa430b78fc30d47bafc299bfea7c84884446 77e2b31c1f1c7cc170d3d51ad5cd64a4ed3bc021\n059992ec49abc76d4ba3109556704f54462a2593 07baf0f0cc3c520b226b6ba203abfb98c25986e2\n0adb33f3b738bfdc7ae4b283e970ce9d67b230f8 e14da6ab41da9e4261ecc52d74762ce79eac8ca8\n35e083a48db50b7df3362612e3faedddb11c32d3 d14bc676fef8ac889f1ba6d5d0017e026b5ac7ad\n6a976ad20c206a316e4db64b1b74feab8111d95c 1304123f6468aa9fd21352de6ffb69b2932f4f22\nd7d68ecfc1b8c6c0f372053aae43debf8dd1d6f1 b6b8280d17c89ff6b23d0b3850f07cb9b9847d41\n8a795ecc9784a37b6a4849793b14beea37929cbe 51706b3eafd4176591fc45c711a0105976f5ce86\nc3ad5dd1432bc9c9f9714d4646bdcd9e14c50ae1 f0b401a1ac7369f58efa9d0097b70b28a92e6296\nb54d96f9fddc2cf2b9cb1d1ed5daeed10446e266 32dd604c4cfc2d6248c45f3b0843324efda70f56\n6637ea8dfbf3082dbdcf2cc8ad89933f9d1d08ba 9e1c37f304e8881bbfd6a6eb63aa369db61d74aa\n005cd70c24e0c9ac3b007cbd6fe039dfcf5bf1db e9401627e491a97ba8dfe3004c81f5b2819202df\n6462dc20bb0a6abb744b62996490b509afa9f7ee a7c589e6c4545418b166f36ae0edf70abc49e218\ne3e4c0f06a09799f1a3447634875317b97e503f2 32004c96d1276d0113abaea114c2513eace22c17\n3953952368e6b7151bcaed032cedf7e02242c31f 2450506af4fe506aed60e04df569c0bf1be87716\nef54f1d5d4ab5c07a56bac37b3c42ee20b070c6a 96e2e0e377fa33736ef520c5ec37917033b79897\n2025a7a09372285f21fbd4f3cb3dbcef20259ca3 82d7689779019801a9f3db2feda1f5f522cf4e8c\n60fd91b2e899455a9743706631c66725dc87f6a1 e54a931b8540f6f0a81f9057d9f5910e1081bd23\nf0aea36231411c8027f0c69754a85150014bf62f b2e1ea7d61748b15c1c1c7c7638c81c041b9f95a\n9f3862484b9dbd9713ca3ce45587223bc7037f1b fec48d7bbe5903e44cd4b82d1f6db29a6026a33b\na4e8f95b7c0d5a529d3a02adeb0abb701f39f4b6 e326cf5c4214938650ade799a93e539817c2d4b9\n17e7a24dc14ca1e145494c3240390e1d0fdca2e3 370c3765c9f64f39a7ee8a61b8e83d3d4913da49\n24086a006f73ba7fb9443cc1d389b63dd3d6e216 3b44ad2121ba0f3f9adb397741fa866a1ec6c4bd\nfc572e50d581a519655e5838e01ff706ad470f3c f7f0a5cbd40e6eb488a9b9f8be04d3d971169626\n8d53466b8a139b47dc792bd4af86d11229d50700 27e25e979f9ede550bfe6b25b5aa23c15ae158c4\n4fc1acbea9f071e3738427207acc82f755a8fd6e 9161b0e33c28aea7ea1be1bfc06d0329aae8de89\n300d49bee2583d2fcf23bc6f00f6e5d20d590664 afcd8c8c0f5fd190c9bfdb19e8c163a7b5848461\ned5acb66762bb2f4364a8e652564bbcaf3aa874c d8447cc59cc842931bdb4f4cb3640165691b4447\nc6c76876839369f900592a275342443f4bf7f7d9 009d3c1f7905d48910ca3ed16e0f1ba9eb2bfb4d\ne35314c4e725d4a7c53a6ac0212f4fb298961aa5 d56e0225945b7434a2892a732e937a180899414a\n4ef28ff337cee64775fb95a99da43799000b02be 33f18846acbc3d54f42e7c9af033be58e4631a16\nc28c2c1661b8f0569d9da59a38ae0a9cbc1d0e25 1216380478103d79d9d7b8a5907458c59578abe7\n0a88ba8af96f9b9fc8a9eba71dd99831aa878852 04ca58d801ab868bf23ed5716c59f5fd3d9abdf7\n5ed32a942d546b3ccdb5b159519c7613cc420d6a d0939ee4e947be1bdd133e0095a6639d4f1711d8\n60a9c6fcb8431c7bd99062c2f548098e8adfd971 cf8566358c15220d50406d80913ef406477ff280\n480d94297168541bbb9ccb706d96b529e6416a49 bab56d858dbba8a95cc3d9b7c6087a9302f3807f\n96095c8ce98ae74448c50924353afaa04dd3ac30 2665c38505f441882ae9556859659681c5f3e2a3\nd2bf33c81233068951a439da2f6f667152069c34 daf3d9c6929f55e22d7cfc3629cee3946ba4a7ec\n206c8a816c4b7c27ae2dac74a6689a1f5b346109 e272a71e0b832e15dbcc05a9503e80ffaf5f2020\nfce2c8a8ff1c1173f83ba16e6946e224ca2cb5f6 089b4b811afe32a812db5cfe821ec4cd73a585c5\nae2e514d431a04ae89c804d399f1cf30f860dc32 3ee916605c0269872898b98b6e49ddc6503a4546\n60cff10832e50061f91d32f7be96a015ae4aa209 153c57418407148be6b89991e2eb5b8563376936\ncae8f050e25eea926229a065ad2df8dd097c7732 85042cb6dfc79f3316bca30f0147b62e47e66bd0\n7fc9a8ad655dc938208ff9d5fa1f765cdadf6977 ea8243b362ddb64ae67c4acb1c213e411ea1547f\n7e54df14883dc4abb43bfa2d3c0a38832247964d 64f21c065c8d9bb44810a7be1bc1c5e45b69e54b\nc42038a431447643b65abb773646ef59414824da bfe14ed682d16d735278f62cc563579f7055061f\n31a6f19672f530db34e84ffa44e829f05e62f43c e2d6b39f8b3f02c6f300e9fe27cdedaf96f44850\n0842d1c57e123d91a8edd530dd7dc915ddcf8747 aa8c1e61ec759acc8c491d11bdb7bf7f620482f4\nf6b1ffa622c116dbd46c11663928635e1a60016f d74163772f52d5db37b6a8807715739974ee065b\n8f8e9def6f84a461110fc1ab0112efd8fae402d4 1dfc58a9ff38cc139b9780cc92fda4a597375a98\n3170a0371d9f8f52e0db4d94a971cf470799d3fd c82c2251a9ebe97b9d37700396b634da83317ea1\n5926466780f1b009edd1e14a6d2587371b89c6b2 e39c81a93ea7348121134a048d556bcb6b5333b5\n5b0f0840efe517cde5f34f3ca03161716d74abd3 68fd0efef1f483c46d4bcc8c09b2e3fef9b2ba4d\n329cbcfbcf3997bfb891e9a9cd09371615b36de5 c22f8f96f44dfcd5e556948736ca616ca83d6b3a\n08c0d8eb6ab8fd7671d67d1aaeb926e42beb8070 71d95a9673daf09846ac3beba4d7c800ec005e57\n97354b3e8642410547bf19e885e5861c8e800930 a9db7c9a319a881447837c5f5fd5636aff1841ce\n8e2dd71dfa731ceb31a8df69d7f8619b1591e461 e1cf865a2aed627f5802c492e2fe0a3c4d4ba5b6\nfd9f051cade25753050f5389846ad1cfe194ca07 1fff8c9f51ca6b3cca8aea4909e2301d945a7df7\n177f98ea63f4107d41e88a8eef0d3e676763231c c2b980e0083afb7ca2c694feb64a82322e4f3344\nea680ede168db893f0bce431f7db1c2b5e3947c0 46e2b70c37a669ef277c3496e96d03e72f61bf40\nbaaee73220fc3b315809102b209fb1af7d84ec66 4535f4b06b275eb5406b02a4c26dd702b98c7da7\naf8bf69821e001a03cb75a1ec787baa96f406478 09db150b0cb23afee32890f5211a4e16ab22f60a\n80ed14dddb7bd9f2d2df3f3cc5e093409e280dd2 74d8709ebe46e9b6e2cdd22c2d68faa73c30e0ec\n1fa26e9b4ed72f2d8e5b2199d63ac4da70bb446a 6b4c70c611ede58659d590e5b1cde2593eddbaa0\n492120e0ba3d72bd602e0fe518cb3edc973e9e79 ec9a33cb70a25378db4f62246c8220837f85df3d\nf1450442fb4c116d0405e7e850398d657202f428 ccb31b183295b53e16caf3b08b1e2343e7406a60\n26b478fff1e432ff83e4ebf58bc68d2d54fe3c28 bcf3aba83068f8bca11acd462a5ae7a2338846ee\n4f86aae12b23e6fc29b899f53d7d7b31bd2b6aad c98963856e6ac290ea2440bb4e7f646e8433c9b9\nc38fa7539f3c0b20a11b8bbc8ed3f3f9ce7aea47 901daba13e2698209b8d0c57693b61db2dc0e047\n0b02c4384c37bef045c74089bb5c0781d3a0a346 d8b87aadb87034200d4a136fc72364489539a8b9\n2e722ece3678654ec9fa6ca05fa88d90bbd78a77 268a89a22fc8988218770f3f9d33ff5ac0b9fc76\n22acc79f1eb26472503a8326757697c4b0366874 f3f272319fb4af0e4419baf6d0d9f946ad2a6368\nbb292e1c6007fa04155dbc4fdbc905a8e363789a 558dad32496f2e8bf804153c7ea36be05b027cd3\nfff4d72d4b1f615c8f492ee88b7d4167e6efae16 15fff318141b5eb72c747e8a6314c6cac695b334\n490ca4a2027535f7ff9abd4b857d7da09039a70a 42a6c3d9fb9018db514a2f8e4128798e8d534210\n264d5c37394cf824c7674dd6ea5b18ff0994a3ca 82843cfdbbe5ed68ab6d7a8eadcc146da71bee23\n547ad816f5d300f137edb5fc12787673ce75c643 bf5de8efe463680ed5643b8a885f27c830960e63\n41434ae01a36987f3869ad245d025c5f6c771f28 222b2d0939d8d14ac9cb38f18d9a2213f88f1507\n50a7cfc8ae68a71f5ad7882dfdcc36104566cd3f 15ed1e79f9b16e58bd94178d5f1eb3ce675de341\nc84f2d4412dcb1eeb07fe82b65398a5cb4ddfe67 3235867c68536ca933637b0fbb34618a08c2a90d\nf8d17d03267c58aafda1f2e1b73f16788bd8bf49 a13f3c6ec0f7735977546abb0a94340a4d4e72bf\neb55dfc1b6b4105a9b8d969bc1b8ab3389a2f9d9 03ef4c062c2790f73aa6981335aeaf2864ef2ab8\ndc656d3377f5634e2ab6692b2447c9c0d804f5a2 9598fca35a01a36544f404b5ba5de31168fc6fe3\nb68ee65feea8c70edd6a5e1c288221333ff28f5a e53fb671e1bac47f38eb76b1c75b3f55ae4035bf\n92f23c3758eed9f01af344374be411c766251eba 13ba5c2e09385410d170606e647b02bfd939e0dd\n152311a3957e709e709eba601305e9570c5f289c 3e4801a98f8a074f90642bfd5089efa7e9aec32f\ne83c5350cb46e33c1532baaafb23a0c331697500 2153aa3862efba48059bddf439e30ea9e63031a9\na7be064f56b6a0bcba632388c819f5b47c6d5168 51ac8fbbab046c6303ccc12d4b0d5329268f7511\nc89667675f6696101ffe3975545b568c74c2770f 1bb2e19b751eddf785a149965617d76bff1f896a\n62bae6707123d006663794c573ec0b93d655cafc 1c1b5aeeae3369d7e081ebe69807080228c3ec11\ne2e9bb4b76a291994d9535784b9ce32dac5816fd eaf3cde8d999d90aafbb5d86ee04eba4756b0cd0\n314f7a84eed0491d617b7847fe5ca9c2a30c6d04 6825c559c2040bcee1f173cff9ab054834335581\n2392b798654e1425555e3eb61f47f5f5612e334f 5fb76b50046833ebda0ffcced61fd3e4cfd4d6cf\n0903dc0631dcd4b1d23754aa8845d5de38e1205d 4831603753cab12c23301f0456e5865ab03bf11d\n17ea4e4ac2fbf837e650a2dcda4ff0fdcfc26aeb 343e66ba96e6a760f603eba4fd05c177616f4d6e\n6c39aff0648efd186c6e9de1b9f464024df13bd4 828ee16bccf6aaa28b2e1a3edfe4714185385ae3\n4bacfd7f9e188395c7c3d31224085f499c0e877a 9f767f1ad0e94b658c3cbe55b8ca549741d660fa\n603fdb6a0160b1a1d214df786679acb796fac2eb f6a0d7ff43c3a0ce212d9a1572a4f23538a0ebb4\n3a736025997a488ed24325401db8c5edcbf934a4 36608a1e9b0a2bbf0194036a97243f2faf5b78c8\n1304e97507685c039f67ae943be53b2f5a2ff0d4 37eee428e6e1fe51c85c202a9e2c3ad89bb981af\nca8989e9753b2fb0b95abbf6eda2310d4e19931e dc141fe0c7b7cd03ceb22dc28bb7af15899d6057\n1d045e6cd4d80a6e6513b0fb45f774ab28e939d7 e2077a363697647c8b1a9025c1bfd2ffec47d7c1\n569f1af85fde0df6faadc7a8c76fb416142f12e8 aa5c6f7404b9bf883ed1f0508ef79fa7c1e751f8\n888b6ffd2c637324528cb289cb5b32938dc1a2f6 53fd0e481c0176c7e3215bedddd75ed7acb409fd\n577cb9946932762a34caa442879645c1696fa1d1 bc4b95b2f2f37c658e7588d0596a69851e0690c7\nc5d74d5a83610cf540e15b4ae939fc8954dc0de6 d6bd1c2e325b95a16d1751b0b1c63ea006724caa\neaedf83c9298403f4d87d7df5b6d855eab6cf288 4c6c5bcea9650f946abf83cceeb5d14850372c86\ne70f8e9a831cb6d012241bedfbe4f1c7af65e8e1 ebdf0e942faf8952d72a317d110a84b390f1b7cf\n768b3abf5453d2537c5070b9ee2ce52ff35cbe73 b38c74d63bdf28a0efff933ce695d261bc0a009d\n462b96631ae92f21f7e164e07b44fdfbc5070edc 5570f29faf172f281997d08665a0e3b79d2b9417\n47b06df50fc6ac3a02ee97a5621af055c8717a7e 0bc7927c2cc9c0c0a5680bfb633dcb736c2eba5a\nba6d2126ecfb44f7693ec99dfe532006e6928e7b 02b2f1dea69325b418645beed858f2f6599d76ae\n59f3f3998dda3ce8dad01e132f155415bc69d523 447eba1363d4840e354b23d5157ece458a36bb93\n66265e66f5b4ba25ddfdae9dc1d61810842a43d4 922af4972e9bebc0cfb78a55cf96d9cfe81e9fdb\na61dfa3a1131580bb39d33a633b209ef84bd4027 7353770a3c54bcc60097d12f8267292d9cf8372a\n9360c4d38584080064ac116a272ccb9b1bc14ac7 9b959b9dea4308f4de61849883526f9441c76fd5\nd942c6a12bc7b54c788ac3f6e2ca345c084627a1 80bdc870250e1a79eefaabb7577b56c088cf21a4\n1fcdd6b6bddfd3883334446740303b7573a85494 ab94a4f65d072bcfcca9aace744ef3a92064e819\n0969e52989d1fb40ef3a5a1473c6c7a737fa54bf 5f7feb2ef86f345783836687a42ed651bbf91b1f\n624624d409af764011842b45fd2831a475a3b28b 5db163bca66c1a4efb2e6b21866159d553b07f31\n998519fb0abaf0820e451656507d1733b6e9acc9 f5a0255c1b8f004cd96082b38a84956ffcfee91b\n3ede0818b878a70072b3f770fa1ceb96d4f12cd2 4abd303592f44701259b78119c20a7022d12846e\n8ac41b05f263806597f53701e4798f946a24b659 281de065cf76cff2c6030e35c007714e5c007a65\n63eb38c63cb7578a9da1964505d8c9488b142a98 4d9112bd537efadd54dafbeb0b822469067fb487\n3b3cc3ec6a2d8c3c1a17ef9d87edabe2f61c7e56 e5a7d710db2d3ec2787e5b1cf28591bb7323d033\n5dfa64f155de1b9753224826bfdd702292f3344e 44023c531ba7ddd83cd45cd682abddeb2d127841\nbbd07d6f49285f8e2ac5a5555549d6741add1e5a a71ce42a57989b809b580d46cd5a9bd970999766\n898a5e0a1a0ed0f470d80e02067c50422ec070cc 649bcc82502ec9d1ea87f2c1c36467553cca3c2c\nb458012aa4a0ba266c2ae1d8a81834ef7e92c2f4 d671092fbfe802cb4ed17a6399e090366184dbfc\n2653ff55b5ee0216637dcd1f3db1040454812cbb d3b9d76f3608bee80215960926d05b98b83a53b8\n1b61084f3291018a73b7c6ef895a78a2bc0b7b63 becb26a8183ee390e65aa64a6edc8fae3a29dc23\nba105019e3ab739bf3255a77325a223073b59490 6f831b6cb4592f3769d58aeefa63c6ba176e31cc\n21286625742a222308767cd8ad4faa345fef040a 31fa8ed4f681bd33bab7b475c02643d60be5c97d\n35d98d105226a9d4e0cfa0314b5bb78853ae1e0c 89fca0c14aadb00f07329b36d0421b5967e6d231\nf688029e24d36700952e152ba725b09872a9e959 80a125473212e9e61bd8c42dae5fc717f15e5a3b\nc6b63771f14b4758c7597d3a9e001ed87c08b304 369500c90d0a5e79084aa04fa2890a12bab680a3\n366c43fe0b9e107de71e570203969c829cfd8fae 001b78e6a9da312268a0229a07a8adf3aebdb520\n4f14b5869d67d45e260816e9ef334b680a99d80f 708136a1899ea55ccb384b3ecbfd84709e1e803b\neaf69d6279a22ec8eff6dafa329a89a2f0e8f7f2 350e6a8ddffbaa1fdf7d7e3897436d0d8592a05d\nd55b47fa591616cea744d403ebfb3bb9053f5840 e379dde13f29257a5fa7cd09c04ca0dc56d1eb3d\n9bdbf2f890653b1af120d19409c2c576f3aa779b 709c672a6f85bcfc000eb1381818edb667239643\n8a95292a39a20d63388e93dd619d685482679b21 71a235b3b92065ab67c44d6ae17a69e71979f378\n374c40eb3e00827431685a527537ce3db941ae78 c4b82486bed6ecad7664dd1b43b4807952819beb\n0452bf7129179c15aae75d5132300068453491ca 1c33b6c9154ff378520f4de389b8120b4614d87a\nd1e513fe653a0b20057108df1cef3d69dc952f8e 6b62332e2396de800c74a5153c36a5ca9150c2b7\n953976fed57ae493892e93d141c53c84cf2a1f23 bbe4eafb80735f4c2229c461d98ae7ab3e6c727b\n52bfeacf7988a5e66f55ad839fda7f83b4052c04 466b654c9f72588977e0384ad9c784cf2b15daf4\n1207a7a2c6f6b60e63b994114c2b46956716f276 e79214a6bca57a7443c67d6e8ebeb87c0ec7ad1b\n15953c20d15a7d18a28151268b1a1084109295ce 05a4043b0750ab6491e143aa07063796c3b73f80\nc644831668a343c5994421d3d80963e7ffd5d5b7 48e3ee06e17854c23b1c677bfeca68572841f9e2\n376a2262120399aeba2db802fa7da07858777d00 9af24832da293bfc6268a435bbcc03fc66d3b7ad\n185ffc8d9d56d9084523400271812f50abb474e5 294e4bca5a271703b8b0b723c9b64e9763b47a67\n4a23b785f61e4d9d1fb86ce61f25cb0a785b0577 1fbb939371d30299db73045c8f908b12d0423296\n39f4081847a2373666ffcd68ddf909ced32fd8f0 57bb3baee8bc2546565bdeadb5ce0dbefa869ba7\nd4ff536ac704f0e6feecbca83bd6413149118361 5da412ef18f04ff77f3ccf15adf6ecaf89cd02e4\n87f53eb4554dddd2df7ed6cd921b39ef95ecba9c 0ea192d8a831771a43c20e0bf1f979a622f086ca\n8980e10c46cc611d8359ca6036361b276d5cb9f7 564d09c4d786deaa7de3a9647475fab272de47f7\ndee95be05c1138e96dd078d25f48333c1996b122 54c279a65d227a2b11458e53ec81169643aac1f2\n4ec2f25d4862f7228af1a44a972bda4e0e16f80a 800e0e7ad3cb8745119a0e7a1f0ab9e0c76aaa20\n659243eb8fe65d6f7c9777e3ed0b4938e23b9325 a753469e73b2e68ac60939d5262a01b37fd09ac1\n3305b1767f03245e603442792e1fd382cd8dcc21 723cf9b2b0efa83dbd40a3c5c0251b08e9357cb5\n95cfc9ebbc72236094beb3786de9d0cb41e2899a 7321923514b77b68c7a2a4b1b58623317a99e865\nd35e86fcfcaa3fa3dfd540d1ce3c1abbc1358284 2c52c35a196aa8223d259b3aaa4d49ae5bf0b91e\n77a36c6e3ac6ef940038ae2c5075d192d8f63d42 a7034e9645d2fa37821e5bd4d72eef10aa8d806a\n8da7f3504c53905b82f1e27373b71eac14d0eb00 240d52b3f653805de47da8b7dfeee49e9f87c8ea\n5a509c25aa832209a7e78952d49a42e3425dafc3 d209a717c0ce58163406f3f1536a1f6f98da4657\ndaa54bbc19886af2ba067911dcc68cd9afa64ffa b1de6c71767ff3c376d6f037a53bc3ac520155c9\nf9b322cf416618b0ef50b38ae0a0437cba3926f6 25b49e2390829999919dd7f3779e9ae9312fd240\n9065077faa4f37538fcecfa719d04983b265c431 7055097512abeca793026d376f89c0527fa13bf0\n631c4db293d687c4e4ef8d464e39210c6c8e8c2e 039cd33ebb059431741be46f256dfd957c8fe80f\nbd39536722c8020ab1b623c2bad7142afb394ba0 67820ca076509f018e3dc9dbacd49e23ea2d0910\ne3ed4717bbad4610fbcb7d0f756c21d472f79c60 ae2565d8e0d7f356c9130073d404480f8c2b58d1\n73c5380715436ebfcaf8b4ce046f26dd870f0f4d 8e42a9d191046d4a633d89ff77997c6de3ae3335\n0adba16bb952a276bedf9726d554351ffdf2731a 419ff1fe058f46fc38a187658bf39c0dc34adcf7\n75a9adec9ebaf6feb46a19600cc0fe7d79fd6c0e 99ab9154ae3d36b67d3aded36fa6c75cbf694cc9\n83246ce8d115450526291d27db4ec61a26e9ddd5 00f4408cf1cd531aba471b1ef785d1351f947095\n780434a5fe600ad770a3349e780d41b7664b8c08 426ce7340012b6ffc80ac336f1303402332093d2\n5c300367c3748c69be6168be20141ec8d66ca898 edb84296b9b7d957e0bca897cc3322e7d257054d\n49ccc2beed0717795a27f1e618f38935e55dc9c9 d2416aed745cc92a81f414c0a3400fa30916594b\ncb75bd15062aaaa63cf5b908e8fdafadfd92c3f1 1e57775ef32019f71b84b17dc595594caa620e91\n05656280f76899568fd20800f4de9711f6a260f8 53b15653d85c2b322393d1154238db6cfc97d249\nf0106f73870f4e5ec77eee5173c29e3ab2eeca9c dfd0252aa5c550e028f7d91014a2e40ca2dd5137\n1f68c26c9ef99048d329a2fef159dab4ac82c896 ba700776701516c384cf1d3025620c758088fa4d\n53c729297979971ec15b40fccbf6be06433ad24e c6962c333b98a02e05e7d7c3e2c160e0cdfa6fcc\nf39b733a3ec8acbb19fbf6bef9841a34f4be86b1 aa79319d480566abe25408ad13ea05a121ba3140\nf4d408db6d9ee444786765c0a18cd11a7fff702c d145907d83802b250d29c11087dcd5415266e573\n91e07673bb2f2310e5913fa9d5c05516cf63ab17 53e7d06c947c0e15a6081b113f166a072d469cc1\n18f7327ff1d686700509551b143337f3c1b9a83d d422bcf77a7ecce54953affe00f3e90a2b3e87f7\n8a5182dc0008ec0b0e02b462cabdcfe502225247 38b93f15c042326da0dfaa44eaa959ac01dd10af\nee2b40f522e86d52cdb136d5869ed479225231ac 90181a51d36779d7cc7f4d9ab673f20ea4f83d39\n75e98c743978bfc84f6c6ae3b728d2be6ad01a51 81cb932f2d0aedc255e319fa0e2bc95369655549\n811fd5189be3fb8d758956da2d5a84b3065451b1 b5a3341ba3e9c1ee79cdbb0ecc2dc24b7b1d0f27\n00138d2b99932358c47a5d46b5acd208284a32d9 eb9d474ab02d904754b45c4a4677df565dc0cba6\n8edfe9815652ece74320e6fecad5cb9ce1f0df33 87de206cb2a6b1c4329990888781d67e2b6a1b6c\nf81604dc2dd2e84f069a78bb51b09dd72cd66e30 f9739dfcfc835f4c81b1d4d7bc98204b5fbdf2d3\ne0e816b6efc4dec42319da15408116f8a1947721 d4f421d1d121aa17629d3c33c86b135af1bd8d1c\n54b9c23e6dd505045c7498d0e4ad1182bbfa73e6 591922f1f10b67ad6a40ee1b581908d36365250a\ne5dcc8c3783e5c29e72167797ba16270c55fcb9b 80ba92d6aea64f175b6226794118946811a47016\n9b907fcc76074b4881c58966e03a508ecd306a8d 0a4a32c833ebdd525ed3abed47cad383ba620b31\na1148e927e79876ea5d964cdd53f94bc3b60df43 3942a37cd612b0c525319cbf5c574b78369849d1\n23229bf52a07151b369a9b9e7e96a9866ec888c0 a9130687100157253de87f0fcc6ac1b27e3fddd9\n9d65345a77653f89a02067b1d6c24b1f95c05b07 09c035d6cddb8d379dc57023c61a3d80032fdd0c\n31bda8df23028415a825a79b48637374db1be47e 0cd2586a42f15ebe778d1d4996d4e102035268d1\n094f4d5d4306082d5b62b1e3f2add2a74a30d373 54a3163f4bdde48115cd8bfe0f89cd4b666c5663\nd59c41a1beceaad3f15d880ac632221e5150ff75 f549afd90e1eae9968a5d7f5fdee6d5fec1682b3\n64c179caf52703c9d3007c9b5b2d0105b4aa1719 0462e26f2d72f9a47747798a6d4c67c720c16c50\n9fce8909b392b236473155c42c5b3832b6f167c9 2325c903c4cd9370ce536291fbbc7951fecae2f4\n758a2ff064d4e16abf17c489dfb78cd35d4423dc 1db1f0d23633631f8060835eb037102033c87bea\nc5c982f6462113416fc8a14247e9ee6c2e2a09f6 9c3aec93e9f15bb98cad3e6c9dfa004d183015ed\ndfddbf44847415a3270f41f228a618ae5a8fa9ba a0ae695a537417af97d35658a6a7d6f7eb226b39\nb6080690dbaed11976e0b5cf01bce67a9c1f2b62 d95b83b436ecad71221dc2395788acabb974a66c\nc35fb8b8cf1d658c05ec0a55fe4e3886556ab982 b5bb64cf488cf351bebdaa6814f87f6884a77973\nd33d5714a3297c282a39488ffdad1b91d29801fa 728b0d2c702e83d9f630861a3ae6e403bbc475ec\n9bcb1d2f358ac5f5032b2c080455db4400e83f2d a0c8f01fcd4bbf5ef0cfd3c544db08ba4b6fd565\ndb8a89bb44ff3d96d8d2bd5d858eb350d00d88ba f9f2b70ec8df8eda0048d7d97f7391ec0a20457b\nac844c83a3cb0d895fffa57197a90a8b8d3871b7 623e9c20c8b7bd30275b714e6d762610e4717742\n861a01ed9f8e86a40f927899e895274b003a6785 a3cfe182370fb1a37cb77845018c354448800b4b\nb67a2567420a355f49ab200986d0234872f87498 503771c36f0175b6495d985bb2dc6388f7774fdc\ne63aa27fd758e5d550443ae0045a7f9ac301566a db76ef1025fd7ad4139b510131314897a25dcbf9\nc6d0d3e90f636a124a18ec7b7284df84c06f980e df9220141d166e20670a61b43b14867907682a48\n127ff52e0f1c5c61a4417596f10dd1fe13279861 3f385e8e4b7fe59f1b7255d9e9305b464d239efb\n63add00d845d9263cd6b3f289b35dbf75ea55961 af5ce4eaea0fb0986f719e776c37f69ef3250b9a\naa8e72ef3ebd656da4c9137cf5520103c0f02f17 f5177518296d4b1de043dd21a966966b892b3e7c\nab9353e147fdd3fe425407f347535f2471b6782b 356a1cf1fb9632402b9f884dd796a24f051ef07d\nad83cf9bb14f9132b3cec047b16d57a38ab9b203 ed31870339d73e42c313b09915b4ad1dd888affe\n44c0e217ee35d21483e99ab70372331fb8bc0b94 bd12639fa1046796d4de2cb398e25dd5249e125b\n2c5e589f545798c1a49948574d4d99edc13fbf03 db50a3e1cb60906a86b7f4497276f9b89a717cf1\ne257a422c399b004f184d5ead7e29c97bfc15353 7118ff9d253ea4bd3551aab5a84ed2360e74a071\nd0d9f7f25f27b1877b1016620d7e177be9ab8593 e7770c8e284709c53969c8bfb7174fe6faf18cce\nb1b5793f97badbb2093ebb53e6d2b9ad164ffcac 08ef9536c81dbc3b2a32085a53a86e83129df7b5\n88141322c886b9022fa52f94ab0c261889f300df 8c7190e0aa789c22776e67ded0a64c2cbcadd940\n6337203407fa3c62f5f462cb14e8e0dbdce36652 05dcbbcbfefef0f79fa1a8285cca3b85a3f3013d\n8f25879f1a272d8e0ed462bbee48e91ce0ed5731 db69344dfd9cd2b46a8a51182601dfbc9a5a4159\n4b05b160471abd3b5dd998fd8a77a04cc05ab6b2 6dd5b306d14f1c3c7bb2076f34eaf04548913114\nbf6e02cf1551f25b1f3f3e27fe0175324c644a4e aa924e8b732abd41c69264e8a864500dab55895b\n7e53a511cb5fbe298861bf149460ea756f7f0ea9 ccdae33806db4b83f95bd1ff6820221a747ce87a\n7e0039f20ce525f905421f2e932940a8127162fd 99b0492ea1fae106631100b541b82a792d9028b0\nacc4a777335a4d7713e90d469a5a090b60888a00 6995f5540e1c9466189280538e7e3ff01ccdea3c\ndee9f85731737bfdf84391547bd454b612c15438 2d9ca63fc987f840e9b39a87776cc62eebba28fb\nf1cad2b60671ecabc3142c1a6b0f931632d29052 1e40ac803dcf3eb301ecbb2697ec6059a262763e\n7b2ab8953e54f203e40a49009ef325e29141939b 12348ee249b385ed33bf746430399e990a291f3b\n3af5d5642725b1650ae6d969236645f2ddab60e1 66007e1088817da2e0ed764de290dd2d246182c8\nf97519fa209b0c308ab37c41f69d25a0aa51dfb6 1120bdb030acdc6430354afd570f389999f73d9f\n7c3f6267f314f8b3cba1864007b423bdecd4d226 2c55d9449f541f8543d353dc0577b2858fa51edc\n61ec8651fbb77a18acdd409f83d00271a62f8df0 8ca80e9517e4aec03f62b9c02153d33209bca976\na3cdca05c98e1d8167a71f7daf04edef4ad24ed6 cd5617fd6fe31943cfe87e12dfc8df2dba86a3dc\na00e229e15bf96ddbdd508e93c6ae87edc717df2 e257953dd2184ce2c3d681b7458ee91b85f3f842\nf6c29cb040ea132a30c86bede9f232664fbf3a3e 7a1522bd0cbd6e40a3d9dfd7d04d49d7d8031fc8\nd29ba20a419475112a23b2c4885ec5eb9b1feb58 73c229b1ee0d0e613430105ea96638e8e030ecc9\n958c4a40626a89c47ac2b103cc23db90882f9831 88103ace04bd410641fa0647e9fcd7c4938423aa\ndaadb0cb07cf96d12eb297feb2ce3ef841f82c0b 3764fdfe8785b3009ccb517060484abee1cc63a7\nf52b1cba3f2022f00f95f6df4b378d91f21df331 b157fa77c37ef0049ea3d9f4dad86ade6d3763dd\n74086971f0c039c068a06af4fb2cdf3af65d7bbf f5ca1685fd2eb8fb10eb71191b1b7c3bfd448692\ne05f5fa14bad9205de4f0dbe585ccc8a84706126 1b7ff393ed0e991cd5e176446c53d88b1859972b\n40933074052b0bee4656d70f717d49d925f5514d b2fbc560bd44e3a492fa316f7271128a3a8c33a4\n572780589a287d0783cc4d3e8e865e55295747ec 4d07bfdc4b095fe1769acf721f890ce02bba8271\ned300fdde191da4d3314a407a3d1069dd420a5ec 5ebb31ce94e5d6856e640f837987b5f9bc0afdef\n9cc7db7ecfb1b81f47ae8773c5ecffa3c1a03dd9 6917cce8cf1c92dde121c515f470d9491a807fcb\n24d5b58638305d259759846efdfbf3cd92aaabb9 1794142401b73ebe34d239a054be15b3738e8927\n4d537ee6492bb8a926a3480d8074522ee7acf32a a397c0f4254a29be58e12442eaf5dbe73ed691ba\n2b3919a26d3a3eaf0b59200066f4d72c1dd5a8dc e41211da9722720b0ce082daa6c790c24133bf0d\n9fc95f390cf2d11903c40fc8a67ed6c9c8e7cb6d a2a72a019affc97725071310855ae2a151889a3f\n86fee246e48b92d86d4ea1cd365fef14289031b2 479f1df040267364086e47e3a29d789b46b53c76\nc9033e3cecfff3965f99d6732b5c35925c704c9e fba92a117951d30ee9a5bed669b9ab203723e35c\n4aa62d86d670db1629bed58a535718e01ea96966 f3ce35a80ad26e63b65bf44763e263e9bf47b176\n2e4cfc8a45d7fe26a1d0da31363bdb76cb6a8282 73b71fb90b3b0643cae84ae9b83864b29c943175\n66836a5bfc51fbef5437531dd3102509b975d426 c424dd282a8fc0cc2c7c15dc5d912daa40bc75e7\n5a41d29a04a3b678d2e87020c772d4144f419cb5 45822760ba054ea06d1d8f9e9bf7db77269663ce\n483b392d37482768472a9c77497f84b68c7af432 88736ab959fc00e742cce5bda8af6c3548d91d91\n9387a3b2b271d2944e4c88cb2b153ec96d269323 826e952d90ce51e7b30b172a070b119d9a5dd4d8\nb21146fcd008b1e8cbd6bb79167ee3a2c754e91c 78c0eb8876a5d783fd324ddab5be23b1931777c7\n401f15395910b919748c82ecdc98833b37318c08 f2a7bdf742fa33acf056a1a393fc1b81abcce7a9\neaf103a045eeefffd49c8b3ccf1f7f672ee4bf3a 07cebfc45545e3160f88e7b47551b02a5c77a3c0\n2bc880d6df1822e9d65c43344afa10cb4a8a4776 fe3541133ec07fbd30ccdb51b73616f01154370f\n7afbb57a6eb1c1b0d7ec3239e3ec5e194a899842 f0f11146719b283e8087b7ccd2a9a4e972379944\n99d20c7adeb4078a1370dbb46d14fd468f894e56 c46b0223b17886e822b9dc68f2c959fd8a8803c7\n4f33ecee05554a84fcc908649de4cc7ba4f1d90c f2dfc2118c8b9f43425c9e179eba4af745fc7a7a\n870d6d8c0f0f213fd16a751061f05feae8412696 f5258a75c2b1f4a936d140b60003796e6e63a86e\n23e5abc6df6dbcb4831e0e3643a13570b7b585c0 6cfd6b451e241458272c8c958103bfdafa6ad4c8\n4ea58bb08681718345855a316d4c70b7a19e6ce8 284c2093ff51d1fadab042dbe9f0a0920592591f\nc5932292328dc8b3280b39afa652150c84335c47 6381a473e8923513d194993b6a14774a5ea8ebd0\n415d65aa11ccd5b45aff6bae2a9e2b5fab7e8bf3 5c76c5749208ec0241ced6b09e25dbb0fa53d12a\nfb07e2bb65b913a727cf9ee888c8bf3f8fa24e3f f721c2cd94187d43715704c794035a895ee02d6c\n91f0b53ee7ff101d867f74baca8ad3d2734b4fe5 12aaa1ac6d375c07e86c7864bd083ac152d9d16d\n3533291623dd97aa70f75fdcbe6e5726a7e9ec5e e325a6fa28bdd57074676ea7758160a3fc5506fd\nb8787dc3acd81ff07aab7b5cdf0d87465dc1d3b2 4dfdb8a93e838a83bf55cace4141c415143f4ca9\nd59b29652be9ade2d7d41e39567696d9411a00ca 72cdf73783ae50d22eeb19940ebe877da11d3319\ndabbb327612cef3ab2a89ca364a0d63ee7f29d8c ac5187de5a4667a538e42e0523d14cecddc9092b\n658f09fe6c94587b720216ecf04c14ed783424ee a762eaa5ef5f7fa90e2bfefce0b0b41b441433c7\n732c15ebeb3f112df5944841db72d13d8a17cd6d f93fe6a5ba4cc75f6b7435740afe22a7db7350ee\n94c9568347e7109552536c8a3719ec8c29d1ddce 17edf53cf3deeddd0cf114e7de8c69f701be8cae\n0d30ed6a1df7d84c9459b3380f5641e585be9612 59196e1e39a77b29f4e0097f3ae57d2722f7a788\nd4648bd0e8f65b78ab9de41aa80ca10c89ee237e 0b8ef0758a1232884d63d97e7e2e217eed6f3609\nc73b7dc069ae7fe486e24463ed3370879e42b1ce b4c8eb01a085e1fd6cc61729923d1f2a6e049d97\n70a45e7357c6b069f14c03ca7fd90d9b21cb26f0 11d520bae9e7cd7fb37fc6c6552e1a125561eaac\nb3a5f60d160517bc125d4b82f1f1cde163346b85 7b3f101c8f1acfa82a6ed93bbd90d1495973e71f\nf89c1d9783c50865ba7f9fe3fc3eee5032302856 2b7fbd14dbb880c435eb555c409f49be2d207a56\ned443319d7cfbdf6d3cb266f8542f99d94460ddc b419a73152e29684e32cf961f2de555aa80c6612\naa51b768c05e11eab34204401816096c5bbbd4a3 36a98136094fc5ae0b98fff7061ebc686e890177\n1460af1f50481bfdd1181da06c419a6eda28ba5b e3505a543b1b1165bbbbb49688e493f28324f110\nbdba9cba82d099a07f21cb850eb96fea8834a4ed 660a7963b223d585c5803c9b22425d9ba3a8e068\n141741b2c2e0ad44e8a82ace6c62118ab023853c daa9aaadcafedffe99bb4fbec20a8a9b18b59a69\nba3d6b38e0730f264e52032eba0b0cc99428ff41 c8e68b8f46ec5f62411be3c4e95642447a47a2db\n4115a0a3f20f121544d1bcde4ee1fc29caf466b7 137069af1893003ff0a0a1595f309de7f52ed2fe\nd0cfd4b1f5c42a9f345f232ed4e6a71014be5f8d ff646bd50a14a9773e83c120be50fdb8f2befd57\nc0535953a1b601bd7beb267a5bac252cff8c9a88 9a964a97c01699f4155b6334e612361b169efb30\n8f129076138b0e201f25f701e29e1e6bfbfd2955 85482d41a2d135b1c4ec00a687439721a8d40a0f\ne57b2f2703725811ff3c2458cfb1f215cf2c445c 4df3c873915e9248b5071e97dac78fbea9c7c446\n149de2218b26f7d1591b377109304c6a2223b5d8 670e2ea916fd3267ecb2efc2b95f31f9447a569a\n8bce3c4bd52b81daf8e5bf5cdd19763fd38145eb c52ec35223e8440764c0c23a19e1ac354098f876\nfaa40b87bba638daef84146eba2fda75ee1e8821 0564181055af719fae1759ca801d2ae2d06d1008\n8ab173603675c6675be4a6d7dc3b415bd8956e6e bacadd5c3f7bb06bda60428cf78ceddebce1d007\n74cf2a38b69c0f3262b1d518b9f516d00e867c6c c418bf73ddb21411c903a84deab88c2e001fbc6b\n5f6c0173ea63fa3fcb0ccdad1148aa9fdfeda9d5 31e2a27171cc2f06f7df2511fd08faa167a74c9e\nedeba235fb9b77cf7953e341d661cda8bec0c3e7 ab81b39adb0288298da9d5412e51bdd665d871ae\n363cde4546ff9f9e6f0b1790445402e68804fd93 8f54b8d1ccd1c01151ed5aee19a0f17278788d36\n1b31ed0e7ded28552f7076f3054156914d7ad013 3108fabf54d952af283a6a425a350c17163d8e46\n3f82083104ac311ecb0ef6a141a363a20088809f 9a3981ef99ddbbe4af8f0fc0522d5a2ccfab3069\nbfae23764aec7d61138b4c4a2f7048301f3a6c4a 469a3811184dae4d78b17b1924009958c6899479\n9ae7aed031c6e46546d7a6987b25383f8d2fb796 dbfc0a1ad70d769f70b8184a65d8a2d2b76f27c8\n08ee5249c6a7431ee571272c44ad3faae14beffb d87e961cf8ea8b71d0415e9ad6f9512e20b516cd\n1f650d9e1fd9efd3ec75793c885acff4a2eeaabd d70b7f0ee97291a360ea1041e6b1393eff7dc2c0\n7aa80967b789b40d13debe545e479a024e3c6093 d0d924bc47881c4f97fd83518bd5d0282ef5fff2\naf678e740b3a3cbf229c8aa3610a29f30b96785c efed4f18c444b5708002ba125b9bc7fa2a32ade6\ne8dd460fa091f3c26069772a203b2077aa3ae63a ceeff211b8f2ff83803045f35369e258f2af7aa6\n33591f3db53d298061aa394bf4006e1752efcd48 96c9a06e8dbad1b267c689d20206ca1691e31153\n142d6bedd7be2e3da93aab5f4ff15c4118cc0f4e d52fc703f7ef245b37733b811e29ee8e4bb91b40\n2f0100738fff1f40788caaa4b7dc34090fe330d7 61c5caafd32a6e97541b02a0a0131a6eed25fdb9\n23f4e06609a339f5633222e3d34976ac6b302319 f33ffc8e2bc7cd04d8a2e7d7f47bac83904deb06\n96f4c7a9a240d9d8fe0e3f3cacc17e8e3010428c 9247d09cd785d702fcbedaedf885e2ab6e700f95\n7cdac91d8c9b17cd302b64d72ba5b44d0e7f86fb 1e17d60d4acf7f48e88f9ae49752e0be215e423c\nbfa8cb9b2f446dc3155d96a03fe86196cfbf7f64 575c0bbbdfff1499d12b02eef33458427f22441a\n7f7ece96150b6fa392f68f266b36a7cb3e14b436 ee4108e8cc7f44659b143677516ca14e165e533e\n156197137137d01f5e1e3b5a06c49781aea6c0ea 616522dd74ff8286afc7e8bba16e152a21d5719c\n87f06f4f6155562f9c471921b43684b3a0107eea a6346b08798e58efafb49b856a8c700cf1a7f301\n2c393e1d7c8cbef53ac746a40d46582a9c185a48 2cc87750979b00df38d8c58ff345cc7360d305b4\nb9f1c335dc9265b1b961350504ccca35ed5e63cd 3b8f94fe61d633985df402e820818d0d4efb7cba\n3d5d0a6b674fd4fc96a0b13b1686a6f7a7182680 baa3bc5a22f645822a58c5389b8ba82619264a93\n9a944a3d0c3077f6ad4c945c49c2bc7a9d7a0f46 b83875c60139edf0dfde7c90e1310acea284190c\n936b59defe37b0b59268fb4a2b11fe9354c9ca25 cfad7546c67967fc729f3a5038e3c8aa70d50e2e\n1b11eb8b609ce6dfd32f42ca3ce357ef2fcd0d68 4a4c17e1adfd1b56eae96a015b169d90e9b0d6ea\n5cd171f6834f214858a83fcec4aabbbefa093c3d eca80f2ac439339a71c4bec065244bcb1f854f72\n5f586f0edccd76be9a9b5a86adcf1395e90b9716 567cee24cabd6b8fa41d3feb7b00b73ed4f1a9d8\n2bd67e7a992a5e03bbc6ebd451d47e4b2c3c1e2d cc616e2ff04342a3fea4e1f4a94d7cb6f479aab8\nfc6e972cce143d44ddf8d793df863f8faf8219be e8b646e60e39e2402de163bca5cb669210c97bed\n7719ea95177950a35317affb5a3d1e3279712b1a ba1dea6bb882738c6a2c31df43f271243f4f16be\n97dcd6587a5ef62198ee11cd78048902abcb41dc df18c3166987c03d8aa71fde633016103544c264\nd310dd9a7eb5ed5292ef76d8a4f0904afa41dddd 513dd97486cc515a3f8e27753c75f135fc2e9d5b\nac9a735e8c54e15e7ebc8bcacde4043193b9d5c7 b69b3d9da17767e99de8d427aa55e4a072400dd1\n67bf61b47324e0818237ec27e3bf4b3d858bb1f6 621e2105c7fd8124de86bd377ea953b801fe9036\nf7a6bbc4ab91948006a82c519a7f8a1f0759ef10 074c640a63ec3dd7b530095a84f79eed1afed25d\n5f88894592da95bfd7af789b61db87d7ab6717ec 05f3344eb5e0531b68cc302bd2accf1647da64ea\nc16335518137b93f95419a10c7565a1cb0c44b85 a4d59b4c680de451ed75907cf07892e85d546372\na1095a505dd6ded3a3708e30f808c2709bd0ef44 93c9c9aa15d552ec7c8395230e3dba6af8d4f43f\n0112c5ed38a66fa0fa1d729a7b2c38dd05771513 efeb761a258b70ea42f02dfeab7e4e62b556df92\n731a06596ed32c01b03bb520c4318388595d16fe cddd57f420b123b85fb7f828860be50c638a6426\n979ee3224694c270b95dcbdc5dcf81000b4948a3 879d767a65f15c40f31acfa52ee906b46469155d\nd572abeed13706e94f07ee1c9e46c83368833bf5 6544b2e66583d7e8fc39431ade790b26435cba64\n68079b604dde005a5401c3583d3ce843c9e2f314 ce55063dcc22d946a6d51ef34eb2035f0d59d08b\nfbb1e3915afcb00638d76fae690926cdb90f6bc8 3dbd58921cd5bf85d6db74490ff7985cf09a9645\n43d9fc24c420ee6029182e79ed23bfe46cdce823 798201d50b23c7d37eea7c32ebf16b3b295a5fdd\n1291814c2d6a1cd4cbe7bcee7fac265df3c87c56 ef5249f9b1d1557a08ee6569a1318f2ab9391d07\n6c0be5863d02889dec11f62a60a85acf2f975a0e 31eafac089700cb574a6a8c7dd39a1a54af4d39e\n278ffba4524d3902e1b0c7e47aeb6e139d9e850e 5d5efda30275b174c5a52991b1d9f2da12843f5b\ne018ceb0807f885b7187d0c454329f533f62d5be 4a0970fa9f7fde1ca32ec5801dbbd79ad007028e\nd5e14405484bf38f8b9973d3cd5926237153fbf8 d5c39dcfa126cad8c60fc2be13815c1f67afd1b7\n822fee0b70269e19dcd3a5da8e23d4f59bfe20d9 916ca1171aab0d43c9ddf6748b89c41beb1e9cb9\n8f7aae2a76ae3e945f26b8b2d5726d08211d5e42 93c909484f0974aed89ebe1f7948c0c3f57cd58f\ned69008a006754b9c85ca80e3fe28e42e9138427 e6d249a34ccf93e0289fdcace5ee80925efe58bb\ndfd74e8294311ecb917988ef0325cfdde90bab33 15a857a85e28809ef9d05d83baad278a8d8d6490\n6bbfac5e955cb7f1ee24019dd8973ae5610b1f61 bdf4457b42a46979a0b4ef85471bf8261f62231f\n7185813bb81c94a2b1bdff8b574a7c3ee6735235 fcadec73290ebf1002059c74bd6388e448251e5f\n3d8a2de5ba48a721b0ed4e46b1a3f35332cd1a61 c43e9efe1b5e135fe157431fb827b2e9f5d21e8b\n694c04ba7d3264465dd6357921e1ac1c73b450a5 c57c1871d7672aa2cc3318421da1db4fa475cc8c\n1bc129050044dddf0eff1261967b95ecc5a2a65c a6d347c7ab9d1c3c787b921720ade37bffdcd1da\n43068dbc08313104cb49512a0e0117f60607b5bb bf497678e87e957ae8bae56133bc50e682b8d443\n9a02af0636e7b94c877c5263e9893de7c6759b33 2763b2d8afcd1b4d663be3db1029b588e884c1a1\ne18e9598427d3c865a185e0031f8653ec8326bb9 277efc5adde1f5fb35518de1fe1d6e342e262d05\nd6e5c8afabd02ee6815afe8013ca2ba2c4e111b9 99ad7de2688ecdb23ea89e718291650d4a643e37\n981e4c14280208a5d0d712770b6541eb812c8d99 5f5255d02117546953cb7385edc8d1cee7c1e167\ne8727cab6468bff1dfa155af5de1c4328b656d29 9dbca68709989bf9b4301db25fb8e56ce6f41548\nf0102f6749442550b532bced1931ae825ddff924 d1b70eff5438a045f4fdaf68a305a74784e80191\n0611c2c07f13dde780d4e5b9940edd88f5604b98 834c7ca10543c92695b6d80a24888f976856a2e1\nc0d8b52c561a3540e1692a18e8791c96a07873f8 a231ed23daba6d5c0934bb8fdb8594192492aed9\nfd0c73874c58f19354292ae5d9c25d0948055d76 b02dc818476ca13366c471ebe5fdb821cf640748\n65b9c48ed0b3d06b323ee31bdfc3de73673aa28a 385622c34ad0ea06a65713923331ce9eb50b3a56\nea50adc9a3805ddef5feca3f8564839054f77781 8d78ad83505458ca573d5b0b04855e5ee62b5ee4\n7d642450407e70f2cceae2134f90f8aa053340b3 a92fbeb02f9e166b1438b42f1d9b012c13a53526\n8778b488d3a005bbf7613bbeecb9ed053f9494de 12a0cf2f37f7816f53674556a465463dff6facc6\n2ea205cc462d39328c780a9038a3d6ee7ddcfa2a f99090a07ee71aacd34fc2421280f79fdbb3ce06\n52df721d6b381354d5fd0807a35e3468d9877c70 3ba648cf71960ca3ce12de610efaa766030be13d\na5c2df1de65ca6432b836d91157f60fb56ef68da 6b4c8306c7df74fc20458cea7c8088f2cab120a5\nadc76ba6109144415b300f8601ae167d77d0a4f5 22dcc0d7f455e571861c6f24ebda3aa12427486a\n160f24605af5d58a9a80762d122b949eb29ba5f6 7669dabdcb49560098ab7075f29931a432f6a837\n3cb4c8faeb18893831e40c5e3887ec7f36161a10 538111bbc11f2be4910b9da7a6439facc763016b\nee7a467de680ac7481328acc5578b31e34e2d8b4 e2191f7d519f073215d57b8b704237fec38646b4\nca9d3ae59a60848cd018c1479c769e012084ca44 936f808bbe3042c29111657a566c865bb14998c4\n1b7228dec1aafdcdcd3584747f6d6807806b4cc4 d17db3c4b78814d80149eb9547c6e7422a67f604\naca0b59434e4698fcc8b5cb04efa4f686d57b50a 627a68bad6a4147f538002ca2ea2e85ffe1d02b6\n1294a074604d4a298217fcc2e67521d529be26b4 84136cb8fca633b5189e39ca89e8425178914a7e\n7a260165d5915dccc72b985deadc38f92770416d 1de7a5fa1954be4f980c1de7b5347e98396c85f4\n5377660ec9d0f03a29520f5ee98904af93233582 8fe24b98ac7bf22477107d1c7a02c7fc020d552f\n784ad8d2cd44d6397d36667ff6a28371e9f7e8d3 044695df578096b256f27d471f9b91e1e197677a\nae13385f321a1651dec6a549dd398ceddec3acc5 0b3ae1305e25e38534bb810bf206a6fcab0d632f\ncadba8f503743175dbfa6e2257f0e9d18b2fbabe 4355640c2aa0b87cc4ba2a4ab2dfba71f7772306\nea635dfb7a46906b20cf4f4048114573005e58f4 6c1762896b59f615efdccfa75105ec1a25211587\neb6a31d7c3e1341640b287938e88a5731ef5c35a f2114213c4bc89b20fa21e0655f6d5eb8043c743\n6f8999380756368ca9cf81cebafc28849a85baec 8db6c29101fbb41ec6f7ad290952b5f5378fc49b\neaa00d3b4f6f3f71a8a6dfe2cc612f0301a27696 fb0f151d01ae10f03913f3a21200174dbede8488\n409b017642b4e4013329413bf919377e5caa2b40 de0bd86135c71a83711e33c0a8c8655d02007a32\n33e7f7fc008af44be1da2d9cf41018419509730d d2573bbe9043deb2210870cb2b0c34451366d12d\n089eed912c2aba6aa48240700b4f4f9128e61b12 2337ffb97668851e7e878a69553d5a2f98d68cbf\n5ef00ee93db306b7ac0218320b6d6162509da91b 1cbdc96781405905cea1d066d091c9a0c97856c7\nf5e2d0c640e006c18fbf1e4d11a20744f61a306c 65e2b845d5ebf1e78f2014c002fdb4307b5c61d6\nffd5346332f55bed28375c0efb2a0686ea5f49d9 2c5c032efd8640f814826b44a204e99cd42df283\nbab4662ccb65fe96a900aeb9d7f9bfa32b527b65 d431447166035d0e5ce611c3eda742d203840595\na9f2ecadfd68f414c9f99797c683f2c4210d02c6 a3aacb7ec7934f251302d97c897ccf6d1286c1a1\n8a4e9d65d09049266e0ab22079300def76eb6829 97e466bce53d9b9386addfaf69709d8dd623bf28\n993d8bc8203cd0679d326fb9399816d1adaefc71 7f6314673c9cb39843ea050bdee09f1f940a21e5\n5bb581787175ccd676ff03a82ff1f9481e62f6a0 2a02e96339d9af223eb73d4c386588b840e4b3f6\ncff7e3141ffde082703d18b7d3cdf332d7a93059 1ea801236b37e248a8d8e6ca377bdd9476be60b1\n1376c60b69441126cb9d700965f35352f274dbf1 8c51d8ce5cc72127dc3ba952676e10a63bd08c32\nc01cd488296882188ca7534d10325f42fae2430b 6023a00157b7ca2b9251725ce38944f44ad128e7\nac90f8dc62d7afd916991df1647bd83dab4ac8b7 32225661ed2b06e5bda7336df67c7d055b9b6a2b\n4d9497a60ebeb7d6f5b42c5cbcd4c3a091cc48cc 4d73fa6fa08a5c6e0a038bab6f0630d6d22a4a38\nfc1f38e33aa9473b8b2b10c9974bdd7e1a00eb48 5aac8c52bb47fee847b65b5cd70668c446d3d6f1\nfc34ce653b6f73ebe54cdc04b3d25572fa3b5606 109ea0c54874ff89cb5d81fbca3c5e947a72d7c4\n2a67ebea7bd3bdecd6e62a68ba353dbac9811914 dd5883d2e492d303c99e73b8f2de0896f91f27a0\n433c39e082dd36dde481c4fbc3d6c941278ead76 59a4819cfadfbb9c324700be08090f3739b2d24e\n8340364b61d5c825fa73705a1f3797e5e24eee40 1049ab614da7553ca365902e5ff2de6fe21061c8\nfb96486e7739ce6445d46058a9d446cdb3b3b98f ea7a9229ae8972921fb6de96c3df2d0f0d608d2a\nc17db1dc5ee0c3c3031cf2e99302c37e9c3a84b0 54b2dd103a11da2283dd82fb6a44bacb7bdc00a7\ne187d6b90e071f3927d0d8577377ea2527d44910 b3433debabbe526a580128ecfc2d0d3aca02d027\n894077394591a92c440f55a690220eefe49b24e0 c89481f0c104fe1d5e93ad7c965dd1b7604e4587\n0834c6dffd03ec802aa1b1eb7be5882d065172c0 e0ae95657233e8744b2214571fa6e9a6d3cd8d59\n0c31f1513f3b72aad9fea521515c0df266cd3f93 4996c518baeda103a121bd1faa806d6f69565d93\n02cd942d861a1ed8fa72593476ed46562353d863 10002709bb24789db69de31098a6b2036562dd3f\n2fe92406aaddae0cd5976ab1d9d485a4f3736598 ef3cbddedef15d5db3a4655ccce098609967bd60\n78093f0ab3495e95a34405f31ef44e89fe42c5fc 99d0f111fa28b5ca8ab66b5f7b66331bc6ac4af3\n08786a5d3a1420bc1ef3f3a8cdfd52cce92a81c9 8e52009906a984b305a49f40eef8053f55642c3b\nc2685b7493206296ae26c2e7a03cb5a635fe8c3d 521e5459312d5334cd8d5323bdbaf80594ae8432\n7f402bdca8835ec3876ee082ab918576bdd28cab 51933a0c4522f89846a51f2c40f8542aadc2b991\nc97858ef9dd0c178218a9ae522f11c53aafc15cc eccb00357a66693cd3adcc8ace6140e5455572cb\n58661634b6b962ee02764a586056fcb234e88a44 861d11ce17ab390de22347b6160a1d7a199c57aa\na9225a265f3cb2055c92f7b2314ff367b87085f2 e7240ceafa40b7afe8db9f50f93612aa21de699b\n0393f0fbc1547050a3c9d152099c162784dab0a1 b4f61908b91fc9e4219526b88fd66f9f949fddad\n0d80b0ea0d5814edb399a25571b304c654c20613 63ccb4fdbb2fdac5d63fac99cc9319027abde25f\n81158b62211fd70fa5a6dc2ba5716de81850bfbe 81ee8e21d4c9f0646071958cb718559631f1e22f\n5f009bc1e18337ce76734de1e2ecda2d6b3bdf11 ae2d88ed9da38cc41df0bbc389fd91c3daaab49f\n7434622bb73fb745caf6407c234b4b7b495fecf7 304b105a4539f67640825f1fa011922c787c7ddf\n13f14ba53b576f38a7be8a90e9f2466444558efe 15089206d56ff2604160ce21fb37f6fb20559b01\n28b9cbbf4663206ba37c028934b6b49b0704481f b63faff64537e1fe13dfc00ba1e627c51d8b6d81\n66f1454b2f1a8a9bfdc5f535e74f3eb4149228ac 77723579ebf97e770bf9b026d7b8bd60d3783f6d\n1d6131748796767be5bfd8f1ed5cb677f30375bf b81931f1f8a7bcacca98c892c72669b3af0506e9\n24bc341beeb651c0282b632b130c526d2a27ec86 6dba4d924320f0049a085f9118450bf91e762ea7\nc40a0a2b9fcf5b2d2e59f56ce7e105860315dd90 77f339dd71ea10700cf7e825e4470a7538efbb61\nc60a67f6c2d968e3e4deb527e9b3acc735789e27 005455a7495ca0a0feb054d1ef2ac7491b7b92da\nba87ea622fde431270e9907eba145e64eabad557 36899faf130744df1a1fdfa7444c7b3a19563bb2\n17033548a33a95824e2d2880bf371cfe44c788dd aa7e9600c25098f3ae7cb593044367171b1f5e76\n3035dbbc599efcd9f1da6ba9dd0c5f21ffe4f8db ecd9298acfcee443c65b70aa91ed7be0b2759e54\nc535c3411b1e6bd4bd8f47ad961e5a0eb5ff2b47 d8fab8c22651f09bb6e8de87ebba0a20dabb2ecf\n7cf0e038eac23536a80d85da3cf2aeab6928fe53 f61bae207c62ceeec29b2d53d5070e5dc374e81d\ncf8181ed8ea054baf6fc6b22f39e082658be02af 2108545db989fec4806ecd8c66b9ff73bed6a289\nf092467b29c3aca56e838965eba48cfa0a972022 33aebe38698be46558647fdde051df1e6c6a6b2a\n462d02d43abb87112d39acf3c2283a9fdb94fe7c 181ef8b81fca0bff5cbf18f15da4f138e86be564\n76760fc81fc197c8c56976aa37803c852c44eb78 308d2c2642a68a933968795f863e884b8a58efa0\nd4f6460fb3484a50bdb63123d61b17d97aa6a7a5 b2775c5b4ed08a6a77d36dff908179f65b4997dc\n7df3efe2466a96365922aacbc91286567926d278 3daf9ba227b51e5055e77b1e609afecefcc92ac4\nc15c4ebee864513df5bf8e21b5e58f19ae72e52a 1347effba7ddba5f58678fee0c1e97b415433224\n68744176984a0a358762e24bb77d1005860f6833 62655b2ce773e0fa0df9201e6b61a570a33296eb\ne4843b883c521f0f39c69f627e4929cd2546ce62 5b286c9770fd2da4bcce521c05320df28aa882ae\n8309a8de0cf2593b5eb071137c3521c3012e729d 65176cb677e53fb3d60fff695572bae503a1adf3\n99fbc06d477c2c0806f2068b59067ed9eb88e5aa 490d50008792311e63a164c98064b8e1422c6c88\n5ca23b966c3caec7b7d806f91eaf9ddd110b0437 edc1becbb7244c15b6b5070bde64c68757a505f8\n55d416f81ea386c031986900d5d23a7cbc685550 82eb4a48989392e717619d937e24e7fba9e040f2\n9a4b476ed8a83bdf8152e0361559c798dee7500b 1f7753dc135e64fdfc5a0d9cb665245255909ed8\n5de2a4b69ceab0f0734f58b225693d8a724281c5 83226fdd9974307a7a053f8fd998a315f18bd666\nea3350b1826ceec6a644f961cd7af4253da7965b ee784278e771064339725153b5a7f5c75ee542b5\nd10e28877890a762de6f73eebcd22bc5967e4354 cb1e39643bc9b583257bd9aa93660c5a4aee1118\n357a7010fe52a37f538c6f6577f58297dc43698d 65db3ae4dd1c9955a2993e637da0c7b5702bc2cd\n1e188f6306bb80fbca60e675e7db05229a2bb06a be4dece3d4e8b569c2b96f7da865c9e2d03d7702\na42160eb772c230a568bb30b6b6facf8aabbcc9f 8f33be01295c8a5e7aa190cadf4cf8b8c7c44e1f\n69b00d06cb76bf45f274eaa47ba62d8ce25e41fb c5ec9e9ca5e390878cba792d1ce886420a19e299\na6ae30b709163d3475f4e2fea3c865beb38b1506 2c7f90ae59b2b2597535c7bc73dd399e122a7e07\neba54881c0a5109025d4b148f0dd8f3298a31102 6d1acf52902363615209d9b504b4d09a38b1fa9f\n82b2614c97ad59de5f212dfa3fb66f9b4da9f1f4 55459d6bfbb937b555f3f0c704095702290862f2\n6559903909464f01cb8212e9218c55bd871c4a87 a764aa1aaa916022b42267bfff4985e32f646137\nbb5caa3bb59e2d6cf0efb4c1605c80dc74f368e0 b1ef1fef428fd3c1c438f7510c19a8de708e6f09\na4877c922478aaaa40b27c51cc630bf9f0ee2693 4477f088f70336de1dfdf8ee6c7b9402e3cc95b2\n095c52302bb9183bf4fc229498f30d5b3a380528 9ac88ea614a0b57b58a94e5f3182f4bd392a110b\n0cbfd8320a79148011951c89f9c7c037734224db afcf634467fb46af6188f6f2e63c29bf3bc36ec2\n0123e790b103b03fa9048453547e159685fe8469 97f85faa719aa4be07b7800f78455f9e65d5f056\n07475131fea9ec9efe3bd5c6f574aa59a4bf95d4 f3c3bb518b29da5a1d2dfda9d30d6a58567fbe75\n7e1491a9ea63d79fe2c48322d45a35b1afb3ebb1 3913c8b24d493cca6fa4898b2148912763dde617\n3a52f0ffdae45410a14d17c3d190334d22b55ceb 8111ee504895cd64cd163c0050797d1dcf2d316d\nabadf47b93d70777f63d73dc569e0eb1323e7726 7982dc14f0223d8042ee74009a203f0bddaf451e\nf3492efdf22f2b6de13a6e3aca64780d06fa5330 2fe07d5815089696668c34154a9b446b33bbbd79\na1c10d1cf0879bd8f47e022e1844eaec05b749f4 e8f36fc85892a29136d4d39a635284ca362b123e\n554cfc64b2bc0fc44683c7bd6fa0698ab7e48620 5b026cebe81e9a5608673ce7fe1e086ec7a7406d\n481e5ea4e223c967c69b19a8bef441b7a0799ced 36b35d019dc6a47055fd8b47ec965a5d1c6fb78e\n0da8411f444c16efab23644abfb4e54ab2374067 5df9fd6b47ddbf7367165534bb5eb5470dcc8d04\nd5817d368192eb066030cd626d2bf94433e387f2 a0e7895fd2eb9b2d361d30d4a6ade28b910c5f4e\ne9821cb75c183c567a96c58a707cdaaaa1193afd 5ac786955d1833bc96568530cf8f94159d7bd39b\nf46ca52420139171351fac1fd686a024b8854148 3fc872d7e07e410ab429b795a141d930d253f994\n9aef943765af2ca6b326ec3565db293daca7f022 f58e447f60497f9de9db98fd69b239f2e70286e5\n54ffb2e70419b213a2d23b5009cc2cd3c020235d ba1c46cd3a2964ba65db8fd68d1a7401d2b90c5d\n1bccfafcdd0e5c38bd5d3064e19d28048abde699 28732a22d30018653c402abfb4a47245cf788fcf\n10e717070df9aa6e882ac91b040dd7248529c3fc a85de24328c4e4c8323764f9b193048ade493eda\n07c05b3fb61a4535e9e44e009319e6e2f9515c21 d1fe7628b4fc40660f29c391fcc88dc18fafeabc\n97571cc28321c5766b92074131bec7ccc7c34e77 73667d724b9557f0dc38b373059651a91aa7688f\n002d7675ef0d2511e07bcfb0b69dc0dfaed876e8 eef1ed23de3a2b983fb8c737941ebd34b9b4990c\ncf4aeb878bb1efadd3f3c703859fafc7e03cf331 c78f2dc7bae25012bbc08e4184298ae3a18ecc43\ne27a50c5075944a78960c56fa0405635dd63dae6 c3219b5d77986848249437fd1b5e00c3072c377b\n106c9772d13b91bc65014a7bf4181d90d2665fab 5225cbca53a2fde87377ec403cd9a184fd096702\n985ffa98042f5a4a6151a98df854d96148f24b32 abeb12dafc0bde3fa183ef53161534a968c33361\n09109c6e17444fadfecb8ef0d7fcf55cd9c709e3 4d479c1bef2c826702bd8fb88cb8a356c460c4f0\nccf464241a144088f376b66af7fbb12a9c6e0324 3dbeba88e0554a03d250624d2fc8fe5b57c032c5\na3296a5d332332f8c1cae51c8363268bc28c6e9c c19587741c529a846cf45ae566502b7f25dee1ac\n6f611b1ae5d3da1588cd217d24354824b1c3715d 9fb2f528c4c3ddd76a6b5df33ef0b689b72063a9\n42be64b6ab6a6cecdf8a9993c4e820754b71023e 6bfbd3bf6a1de0d4ac2a757a0e42e4595d91220d\ncd6886c301471bb565ba35c11d033bc3de543f52 429922fcce86771be4741f72d3650c6e4d6614a3\n266213459f40fa3ae6ba8dfa332116f5b07c405e 6ff1b1c3e6addcec202baa28ea743a8d27015f76\n635ccb1893026c7faf6a33726519c670683bed81 52e3f8c7fcdfe56330b2280492354039a5037d6a\n0cb624ddb494a81b747e5db1ed4ee0f10f08c7f9 93164474d0d6ef6740ce1fdd16b9368abd9ace7c\ne216048cef7d622291e4351d3dcfc243b5b303ac f5463c2fcb01151ec9dc88c433642ecd682b2b5a\n8e7f38927ec3ace000108cc4d97bba73423bb812 fd75ce10324f4787d9c2be2eb8b432582c44d575\n903001f4f45b5e76417399a1eaa181c91388b896 dfc5f3bfd92363cf40ad2c9185bf5b9588ecb2cb\n90b46ffbe22ecd70c699ca8213ae4158f882571d 2f25af9a20dd0b9e65c4353cff9becf312d7918a\n4820b1f8d5a78719175004402c35ab05315c9e1e 81030a076bf155444ba77cd7344faf9daafd0dcd\n2ee3f213e1f20c3e32b6f4f32249e2e7190b2007 a35d48a95029fd81d249e7487e1f86f085b192c2\n71b937601d6b27189b558524b558bac7fd590c21 c8e9e854195a5d9500be59f395887607674175e1\ne503ed5662ceb4810839d98d609e2e528f5d0d6b 3bd1082251fee3354aba7232c3bf0fb5855160d5\n20f19cb3cde7c254f5b19bc2f4bec6184faf76cc b12d187b8fe11fecc8d4877447eb08e17737567e\nfb0893b95beb4d2d583adc0317c024a3402e6ba4 558e574526c48cf7e5e2b069537137e0d34cafb0\nfa8865a0de6cccff4446019002105687370faa17 dc1e3bbc26afc3d5049cdad4dae18df0c9c32852\n0a8dc9129592a015e6bb334a3998bc97248c4250 6300e6cd04040c65573e56aad45f882b7657f1ea\n4217195fbd6bfffa27a83d208f9f4dd74fbca706 e0752d68608757fb316e289ccbf9d064140375de\n2a453aa378993a62a6b48b3411fca33401e0e594 0b02f83d7be885fea95bb527cb96646f55786dfe\n9c366c407ed7b404cbbf04a45f3aa2f1c7f8fc64 c76de8793b14bf49908ab1b507836d779882c941\n564ed0f6baacdc4db77716c504cd4d82f00ed7cd 0fddf833e54b5ce07c99a2576c1e32def711d2cd\ne1ebbf4a161346a98718d0b895ee19e65c9c2b42 d386b9d46839c13c169e7d98b50dc65ec36eae09\n349966b7cb69bf024be182aaace847c918d42e19 0e0176ae793b4788f4752c7e6c7c895d423cd51c\n70680f7ca944dc2d47a32e7fe67be653013ec94b fda592b9a14d0877d68e0c157c2b7ba448dc1483\ne2cdde4f50bde65c2f5098b2b7d3f9a30172607f 8ab24f46602620760b569c2480a9213763b5c2ea\nf139412367aaa3908eb649f7b58e0961f475cadf e14f9f4632cd981f3511c40a061e2d675a7be4b2\n1f732f3d6689f6395b884c1d5e232e21e8769a0a b6b7587ac478ea72a5b0a65dc03ad366bff4a17b\n79302fdcb4379b796a3fbc24940cd0f0fc322956 42e4168ca65166d23b5aae0ecf74b30b2136b906\n0c80d2c224e7663b85935ca80b197c8af3bbc214 9c041c8fe85057ef97d2b4d94c3aa5eb47beb407\n34aa44a054dfe70acb9b86cfa85327c5adde331e 8c369132b81bd67713f772398848b8c111f288d8\n3b0af5840bf7589107f47408ccac561c8e8a02db 7894c5dfe830877181e7ddb43c6de80745d7531e\n6f3c64b799445c899cae76859c4d8c10a7f4c0e2 8e45821d8307d04c6eb110da12e46cb005d0928d\na770e7de1d40e5da82d2932c5e175d210ab60f6e 81ca0ecd3b74627cc9a9f1a7c393a45af76d4ceb\n84f4920d9f30957d7f35051fb19b0b8dbb1158ef 714ad868690eca5d7e1b4ac07797c432007cf726\n6fd4e376c51a6cee57b33ecd92678a598363c198 a7586d5f95d79bba4fb57af2d44997ab3b6da54c\nba16173e0f0833b563c351c82c065a753e63caec 99f94021f7895c409f2f0eea4df0484899652a20\n806d3d45a34ceb56da292b0c572d652906d855ba d7d34b69fe92e2c8d1003fcee1d8c5cbf63e08d9\n41ae833c33347d694b5cb6da8006599fe379111e 52555dbc066f8b9fe1e4ce2fa6b20e668d693cac\n91f170a71517791a857a70c1f9d60e49d3e542b9 77d2b1830fe5178b1534d4e44c662048666d3b70\nb99f67b05a2cf5693f98db17c3c49f992eb0c3be 7c39e999ee77228dfdd0321234595dc9343a377e\n06964fa9a633f46243634f5430a26b4efcd8b721 d05b0f6df46ce73e40c5e1b6a9e266dce157bd73\n499c0766820494c6a0ac608fc41feb47e9034a47 dc2b624b75329f717a1bc3d11c22434477861aae\na69931533868c4e56ee3d87817c4662012e59dbb b5022511652746efd1af5e09c7908d4aaefac35b\nb003bea79172daedc191f735fd07012cb1f27d88 f760f7e086b94f08c751e52f40efa9e76223cc09\n2a17c12bcd48060a402e60f7d0135e97e00d9b9b c648ed5e93fbe13e330d4f45eda1bd99615cacb8\n6590ceb42d023494408357dabf0b84e193a3deaa f7fd7ab422c6c24ead2e1d322a60eb4b7b9ac7c1\n895900d7a9a4bcd35886aaa46b6d62f98ef3c2de 9a9888f26d7040cd762c5ca3764e6a8ee695b117\n0a91ee2111027ebd02d5caac505c83998c2f8932 1d33b5a3514a9e94eab9b508e498493063d52aaf\n5f4cca144956a88847b7998570de234423344d42 7f630f15d5a64af683c421569041380f7ff07b01\n424696bbc4b2cb58476eadc637dc3df7976c80ed e30e9846345fcec00c21efa90608113ca18f0f64\nfdf36fcd9b058d53aa79c297e9907b26cac02e0c 9170fee2bd98d71c4c43c5c4a412ab1d9319a091\n492149853478c6a0a85a6fae948281d8e2a23a6f adb5f592e36886f61230b91909839d6fe3817dbc\n327078ce58fdbcf8a4da15f246d86a1d175b8fbe 9444b2a8a8baf8b2dad347450ca28ce4e3b2d844\nb7f19668212ab6db2c96320de3ccc4bde78b7255 6cc6116870eca317ff07f5aaa0e0d9bacb264dcb\n8385fe8e74530ff1d7d53a6f5676f70b7e2ab97a e0a8c6a6591c3f9f8ec34e173161e2a40fd49ebc\n6d280ae237239ae975ce02175824089350cf8110 d4846841405f73499e1b1951852f66b1c901ba84\n9e408875bf67f4d6052c29a3710f2e77a71f9bca 0472c8c7e4250a6c99b473eba44eec41f2c3853a\n056f0ebceeae105347850fd202a0ed2270e49466 911753845b68f41948cdf672831ba320036d9618\n44e7412915c766eb08b3c483e26cd0686115d0ed a3455b604ab121d26d3d9e843f5426842faaa615\nd2129290cd5ef678905fe6b1c1146e5c92d88ea1 8067642959b033208f45737a4cd9e0e107aae001\n3f0aeaded5bf4574948ff6a38aceba3699cfbcf3 00546c1d9471edbea571b2589f326ae8a6777964\ne28fd7288d536b4a0eadd3303b62391da346a386 7430ae2277ae565ef0549871de08e3d7686becc9\n08c7379f281ed24a027f949b59d14b7561477dd9 69c18b1ccc5a1e9e5d39d9fd9405b5a63c8fb1a3\n5077d6579e1a5b297d867b757ddf2629cfbb27a4 09805fca6769b011b5ee07ff709180c8db3ce01a\n6b8cbae9ca24a48b57160a16974f6c71beb9348d eecea807fd0aea19415937994c33c4743ffd37a6\n319e841a804dbe9e3908af1e608d98e9901f39c2 1c717dd8d6eba4dab2f4987b0cf871fc1a8b11f6\n8b20d0f00fef7e202b11c9ab59368697fd2317e3 da810b57777b7456bee6377384e2063d8b6307e1\n402fea0bd960aeab2da9542ecdb6fc5c3ebb15a0 c2ab580af7133e387e51e3c6e07e1f8b9d9d391e\n17f42d8905e1b7decc86befb07b58ecf7d2cd310 9cb8e262c707cd1df112958c6403011e2c62a948\nc1ed575f7f603fe9df9ec75bbfe4f263c2900ba2 d81221112a2b24705ad9e1168808f9ee0dc9270f\nacf279414dee4048338f7bdef1fe423881fe51c6 c678eda8626b568f8e7959c3082ecae43d995536\n6726f2383ccace3f6fcad2360481ff02a4e31392 d53a13f8b1eb54b103a5be1ffd97c8d7cfb2e7cc\neab955b6a8848d08566cab1dc70d180a176ae959 9ea55bec92fb29ebfeb5433d441f02f5a4e822db\n1d146068c0562f354efd384cff5a17f89ad4257a a6a42f7898cf359d34943edd41201e8bed4a92cc\n1d9ef74967f67344199600d3b25470c5609dc78a 49aa3261fb558a42e956b2b5b8c366d5db8005e6\na20b1f60987b06e2d6a78ad53a84fb4fdfb54997 81f0bc153be199a7b24d7239988bf4d6da77aed1\n9a26e81088b018038de5c20d3e391157614a2d4c df41d7b589cba7d2b20d4d53b0169095fd649507\n2788f85a29d3207ff0ff19b0169cd0211252b5aa 59637ac1bc0ff14df68c5bdd9d5d4e8227787ce6\n15662e42fda132cbcc89cc2e3d90aaf1672912d8 46d256d26db9ed1bf23e7e17a0f9a51faf40b1ed\n4fc3249ff5ca7d54b88b13b23ba2d3b2e52fd985 907b2ded644492381787eecf3ec3029001bef206\nff6cfeffa83c6e55f2d67d12efd6cc98c5a06669 4d110281bd0bf130462bf0836001a41fad3e5e2b\nf4c05ba8d69f04f20ce463a82c8786a4fc38ff74 aa7b39aa88a750ef0f4efd5cd4440f4fb1ad2a8b\nd0e84f22dd05d0fd3d9794aa1c04d72fcbff525c 465fa3364dfab9508741c5c6e242dd95e60a5c82\nedd1b648acfaafc23bf9d6051a167c7f50b94154 766de12464ee66153b6896050c1b636651ba7003\nea1289f277cab90e65de1fa2325c4fdd21274f17 efade36456fb8ae68f1aec8fa92a4f23fdf4d2e7\n966e54f6e0fe22383978a01d3fdbd0243bffba06 a069311b436ea3ef3c9c47abcb1da8a8af0f8ee1\n99001ff6af24fad3b2984f80c07bc4005c1a0fec 3476e30bab716bad5e200218a5eed1228b82c7c3\n68f38f6b72b3687fde903ef81742971b8f13e083 1b352894f2b6f684df8f52fddb98c218139713b7\n755c4eeaa5d6b6a12e42410d7766ce23c51eeeb7 33bec7cf4191fe27d2cd1a83f7460f314adf2f8b\n002ba3d391cdabc0c1e9cc4f4d766518ba27ae80 4713559496d91fd8853dfe3a2d5345d402ae8d79\nf47dbd86e6c9ad3330eab96f64224ae8af47c646 7162b32c95b98e690377af9f8430dc7469f2c392\n63362a2e4b191fb095d8a1207940aabbb5ac123a 1bf637549b2134c2a6ba1ff9d77b4536c451ce55\n12ee7757bff2f5d8f308c1b9852525e513bbd308 c690bccc26ce043814104fe96db3ef59e3865975\nd702baa9f93eca7621fb23c95fc19d69c2a2dc29 5cb1c044857690ffdb80ffb060d8c04caa8e79ed\n8ccaa4664a1a357df6928d3cbb85d5f37ad7105e c92c30a12f2817653957b36aa8f0caf226874848\n486bcc93b859e7b4fdcf65a677f1caed22aab881 6bffa8a2767f0b2d4fc15546c1cf4943b6eb3a5d\n643ef850823e717a57a200fdf3171394ff624a79 ff6bb9c46697eb72993ea5c644f61b3d7448797b\n0eb5f2b593a82e58d88d2b1b4106d8fbb842c498 1101229b55078f1fd4d25de141594f084b329aea\n075c0e9eba0d7ec2ebda91841630c087772be136 177a8c814ac7dba51da0c423e0164d6d9fc3459b\nd772bf55fd95ab1b015f7399375582d33b228269 fff0a44c72bbd58c02d1b50983f603ebe0ab4cfe\n7f88231acfc218fe80c7e01e24ebf09dd0d5d5e3 c41717463426e572c8c6de924832dd83aa1830d3\nbe83a9c899ab8f55f3ea548529adab50fa5a866b 25d1aa9ddb2be88042f3624d2eab02772f3dae67\na200df0c10dc084d5bd051f4df5c80609ea8d4b8 c519eda9a59857812dac58b08a3adc0fd3775522\n75a8b05152f7ae538a7421d8900ce8ca28fb2b43 6fddcd3614295ad2e73cfcc2f72a8ad5e86d3aba\na6688b99fcb71c242124a6ba6125955ab4b3f270 83a6942cdb329f6e2fdf9d69137cfa63575683e3\n21354c62afc1f136eb9836fe17f01202369412cd 1b16b14235f6ec87a0073cf601cfa565a8589b08\n84eaf41c8360d0d4cc4d356ecb568893d19f2921 7e1b130352da01291bdf3e17a433b05d4fb1f831\n78238ea56ec7a12604d61c6f3f098425bce6bc33 53a4fd7953f9c89e7f8ae182660163a59bcafbe5\n7aa6ae6bd6f1fb6bdd51f79ad1842b533869cfef 0c5c2081fcee5df227825bbfc8abd547065f028e\na02792707fea3bc7fa12049c37d2c19fd982c799 ebd11b0fb0319e2924361fb40836f83c6850b330\n0be756600c696fdf6c569d7d28811b8f84a00545 b7a431b488e8b0b58cefa85a1b1d42b68b08bba8\neea5460eebd7889fda0017331d6dd3b94970c36e bc8b0697d4e568a03b9a528bd80c3ec96fece2d1\n66f3d66ced876bdaf632aeb3e055012c5506715b eafd9474d5846c5ee429becd3b4782279d3a18fd\n8b3d5c8efd7cabe18f760a4078cbfdc837c43443 e786131c96d42ae21013ffe9cc7d68737e1d6c91\nd4e15b61d8e5e63e4fd2964a6c7a41a31fa80ede 438c4d933ef5cd253402a5a67dfead4d4b28ae51\n54ac9099f4aae37b177f3db809ae52e789e71f4d 468d175efdd2d92e0ce60d37298123e113ba30b4\n53abe1b1aef52975cd7aded6f220c3652db03660 59bb533559b49f5ba7296211e8646e455231bfe7\n04cb41f0ac8565c320e3881fa288f7080b81e58a 6ff0aa2e354dcba3dbb145038082d467a24d06f6\ne2e33f2f4c616dfb824d51e75cbfd7245557ef00 4f62096940d80448336e01d4390013d2467f771e\n7debdf58ad988f7f7ec1f6b79b012c5f24d21d6c bf2b249ae5c77b3ce5446155eca4d90cc4080de0\n81778fb81809d4c5795714c0eef31b47b5643750 00709af2a94d91ff099d7ee5ae6a8752bea988c7\n46388940ecaa7d601153e736b0ba2eec9b517ef4 932202e0cf021aae9c99430e408c0b9ee2bfbc9d\n62d114d325486f6234bf9662db7fc7fd8efe6a58 6646b3beab4e4172d3749b42d5aa5d079ef5ae69\n7b124464dea1b792a66b9cdd0a6ea7ed651d299a 058a226318c65f9735ca978561213caa34d151a2\n14a04298103daf3cbdf7ffb70bcc2c909e48c396 d668c14b7a6f88891501fd46fcb9bad1b8df2f34\n6bb107b41dd70ec326f12df1199425904a94ef82 bccd92155692aa80ef7e8172b140d3ae4b8e88a3\n06a283921c53e6f0485ed1ca7c5f7a58fdc91d5d fde2a37d541f67daa40a578745f065399824e979\nd9a06c3129a1dccba05755a5c5294e1c1968b47c e33eed173a840e556f18d55802519db2279b834c\n8c2a8b96962f05dab1164e1ea4b018605b2d74c1 645bb05ac0524825dba7ccb1c8f7a4051cd07bd6\nae6625f4e9043deb6cfe1d91ac503d7685afbb54 56a1bf2f3361bad9d66bb414b8ffa06a52d0c3c1\nc2c106a9c0d17917d1eb09e2fd65fd566e902427 35a9e4aa75e546a78cdb7db5fa71caba1c9203db\n3e997320bdcd25497574ebfdaa4874a936b466a7 ef2117d1027f39531ff499019a3f917e8e0d9e27\n22b255334fad2575f7c4668d239507f6e3f263ec 694aec8675ef3cf343d2612c7f49b56f8d9d2b58\n2585a78ac58fe8da5ccb392ead314a45e93004bb 6f16cff33bda9c5f166ea0ce26949df8792c4a9b\n8b93a304db02ed38ee4971c78902d59e42c0a21b 814746c0842cb8515052904b61f07d978eed96fa\n51e460df94b1ec35d46e0c86577d63ceae9c647a bb5a7ef69efa4cc7c0fdd26a881246240d8a9e46\nfa1fce1ebb54377c18e7d1da0092c7ae942c996e 9f6b97101c171f96a11204718e231e250053ea49\na02503bf24fde5bd631e59746dac5b288f17b8f0 5b2a86c5a308ab975360aadb9760b654acaf8ccf\n60174b542a09709f9052c93f35cb034bdabc90f8 8425fbf852da69e0cedc9fc469475eee2f6bbee5\n8d6766cbcccb911be2f67d10316bdb932ccc240e 036875a1af0553681272b47fe810fa03ac4547f7\nc9ec0b161f053644e0c49bbedd617942f70c6bef 8d7e24be6a8090e4ffd441c32be54e0b7afd90e5\n417b5265ca992feb8b81a19bf574fbd24b7e7a7d e87c780a23c716dfa317ab17b554471f537493a5\n1f7c5064a79554ff5bb2cbab42323173906b3671 83e3782c01f441dbecab5824cb05311a998a7da6\na0fe815437b70e9ed6d734bca8083fea0eebb2d7 381e9d08133c6e0cda7ef5cdd9c7d62400cf57c6\nb0983a8145fe12255545ff74f0f964b2022b2f12 56a2e177ded83f40949a019e653e8002e00e2be9\n20d81cb397b3f7c7a7448b26e1faf5966fddfa0e ccb92097b45e0f0908cba820e4a3ed0ee13ad04e\n755606b9dd5e6d07c28346c9156b2d30352e1299 ef03b2147b8616035b6ded2f1a35eec50a8b2241\na9bd098622acd07900c973f78c6ecfd5f5dc0133 432a2a59b40b835e3e0cf2146dd3ea80328b404c\nee47272cbdf72396c71830b305e6df4d02e0d4c5 466dd781e251796467f186b1b6b36915421bc123\n491773b4c391a35af28c95228c4c741bc02a83d7 445c63daa7863e3f19ebe043a0f47d5b070be371\nacc7ce3a8e48b60910f0ef0285aa54836c7c9801 d60d50273e1f81a89e8e0d056d008919c0aaa9de\n3c1452110866abf67be62822c39f71e896a126ba 1f0bd90639f2baa8e013af2557242bb79204c252\nd0e088685d1325b4ed1e42121fe3dcd60b547d47 4ada8b92660f15c90eaa9ce49941506b3c9e40b0\n1134e571f16e8b169ce71e3a2a4cd25172ef289f b69be53709dbc9b3a0e57484de71e5cf08836cbc\n07641c17730ea594c539467cfbfacb04e4be5e56 fb07c872928b4b875a04e5e869866421a5bacdd4\n0ccdeeb5c9dbbcbc8b1540f6178f51f0fa86274a 5b14368a6f817148efc273b431d37ddaae922999\n39127ba1bff443ec188328d52037067af7773432 92073dccae75417bf50dc7d1d5d7f5c54ae38f9c\n8a62aab43c3f596adb3a5fe24166623bb0ebac04 0cd641123503b8b1488ea01b34e14f0a94228e53\n3902c5c2d4566b7f3c14c1be716aa1335ad71d3a 33b6e902c8df0c8bd176a26c2378a20b63a2a031\n1a4aa34b207cde68146f511110b18de2a9b74fa9 4b6dcddb2fe6b9906421b8dbabbc1d7a931dced7\nea8f813e6ce7472e8018d3a82dc2add9385a6adb 9c96ee399bd235fe4ba5647de4716dabf6662ef6\ne6f8251f6bbbb5548a4b43fbd2539664d95208af ec2d0452022c12c72b09d3378394d923af9998b4\nf563c5f8534477ee64ccdad39d8db38e6786b57e 9180f0ddd470b2483736d5a1561ddd1a16e4ffcc\n183014a7f76270cfc02a7879838f5af29f6f28dc c1b16412a111db5984a6d695d3d63edae4990a7c\na26b78bffab71c7dbae7a3bd96493cf38413b57e 1eaeed4822bfdfa7a730c577e1c3736957a9575c\ndcbfeea58692ac19b54077daaff4f7a00ad624e8 02aa4311c5dd410138788e987ed5b865b5f2f56f\n080c7cbd6bfc818df8cf83ca0a8518cc90afd2a7 99bf14ff8e3c35dcdf46eb5c1362174cf2fd9976\n7ec39ba083aca82200d388d0d16bb02609568443 f14b868fd57bc795af7a57f4b2089b000da2f115\n073c0f930d954fc9af596cb58c4ff5d5bcca470b 6e077ad76224178d26fe69a503b9584572fc9fb2\n33dcdf750f8401bf2114eb50d4121f3f4bef2c1a d0ff0831f6d60cb61b772cf01ac1e29afbdc3419\nabd5f5e50bdeb0163143aea5d722f5a5a00547cc 76dea0f29274380c36bd12b50c2b70b23c829d25\naa13acb2af4277ab154258c364d9d16e42b7ad9e 214cc05f0be84f78cca55177aea83ad92c67f870\n5de612d5dc3e89f66dfa29477d256706c03a9407 4bc24438bddf060299c32af3e35aa69841127388\n421c58f8471471bc98b5b9b79a0bf3710b30b423 22df10ac6b6914d9d729cef15c0286af1c7231b6\n799338d2a02276b1064bfd61dfd922f197bf12e9 42effcf28006bab483e619883d8daec3d12c6639\nca573ab914063374229b34e896ba8ff5271233c9 b71b8fb9cec3aa4cbef26cb72cca119a67e07169\n2b5a69af92b85e22fe450b10948a5c932bfc01df 09c3cc0dda54531f93df27c16b4e6335eed89653\n46751da01b841d85092daa1d862a30e4248649fe ff9d4d13f637fc24658de856a372706b688f450d\n8376ae98828c603898ead79ec18d02fc686f858a e0a0540a8f9bfe9e92d6b65539d86c2ed990a854\n8f5e4c80ae39e749e94134d31ab42a4fded8f138 716ebcd918377ae3a5d5d17ece2f6e0546c4f44b\n7c35f3a575f22d69ff23b1cb858a13cfb9d8eeac 24bb206bd5891a843a92470c5b3e413c5ecdf77e\n0b52f72316a974dc2cfb2a40f4c036a549365f50 2510ebe0b8b0c8b7a358f863525a8c121d7466e2\na094fd2a11ff75961299f272957c9f5e6f12b54e 394e9db69eb9980836ad4552ba8b6b48d64247be\n302a386d86e53927bdec74c7cf378a06006198d8 075895757cea5263e79a33a12b22ec7432842a14\nb1c656b7a656eba384fd7596636ab8be515945c3 235e121779cf5c99c466ad1887c496a9997cf833\n11b502ea24e1cb3b02dd4c6b97ac25db8975e1c7 b330db99363928b545277f51fa11bb4d0341bbd8\n5ed833d70c32def3ed7f80f56e112b5cb90fe7ea 490a34b62015daceb145840a15a71ba3000521b1\n5391ecbbb5505a207cfc176ba080d3c2f051b257 902b29d7399107841035cac10ceb7d3b79a27102\n4881beab931ba3f0f75ce86ff5f9ce207bac6212 c3098e9e0e7057a27422bd9e196dbf288764b6ac\nb51f4e396ba43f2fb617858fcd19371d753b8767 a46686a11df48d6859b6a8a059175914493a82bb\n16e14fb56a2a96ef262f3d98f1c486c7b02bb9e0 c51383b4a227571bef8a9890b9cd4dcd420748ce\n43c7c514857ebf8a9d6fbae43d3c9584fa8d2814 434980f849f14ac4fe4544f33365ee57020b946b\n88e4545cfaf1e3c98d8fd11df8f4156fae0f0c2e ddb560a0571252702e3a9178bc145e922e61d515\n04c4cdd341c967e23b1989e6ab7f631d39bfa0d0 c6b44841f609f847a4d29c4afba84f34e2a242e0\nd392ef270d76f2e5b01c367ec36ac3530b77670c bb937fd92c88d650115379df63b761f40b0245d2\nffce1eae4f793aa024f3c0024ea8418ace7ca93c e2bec9984e32d32c33e67fdd14ef47ddc510ad65\n5174a7955a6edc1bc5059b9faf573e759020d562 2996a1e262711a485a8dbf93992ae8d73fcb45cb\nbd23ab47fcc4bb476746778019b95e3ca848d363 57dc957ed9faa9885e849a19bc8d088b3a4ae7c8\n7dd883e0d645610640ad6e76d0a1379682572e21 76f9ad12ab5d7950f56f504de44181bd34abb087\n795a03888c7cc76f0a094d3d3b28be132c876c53 f1db251a34ff8bd8405c3e97ad330029ccadb686\n610f72df955b97a6e97a87157dd3b8768c9c6a5a 21eb5eb35a238a2dabb0f0ff9ec5be1efd667d05\nce54c1ff8f0db680dbbb7ad71bcb2447651c8f1e 1cc13181e4fb2ee12a8e6117eb38edce26735e71\nf2c17f80eabe7a229c15c4143801f38ca361a64b 98429ff15bc01ff5ab96b9ec3570814eefe4ef4a\n70994eab352f8be7b84c4c6c124414baeb16a630 c6d7ba20b4dbe87d2ade7164cfa532908e88aea1\nc59e9a7e0b3e8f88021cca9896c346159b1b5ad9 7872b0af026ce799436b87fc70a3830c97aa67bf\n71601f63c18e6382b6c9ec015e06820cdb1bfd4b 935387eb854137ec78611918be076fea4e2de285\n83c81c6becc3f0d07a8b1ee2bab816e319faf5ba 4990106430fad32193e5ad30ddb3d44e0104991a\n06fda41f8dd94c01acaf535220fcb66cc2062790 c53abafb99a0ed76b52468082f66c02ccd1c5416\n7538b9d18d4eba8daf6503dbb58f0f872a494c3a d38bb3957ab3e74a568b542cdea9b26b4dd1395b\n18564aaa60ff70cf00ac4ebd404b16732a1503b4 f88d1bc20df0866c34f4f211427f75826e86b373\n3825dc3c14d9192f047613dd9045d215746482a9 1186b4719c4b5e701fce62efc806e59951da7307\n7b5c0d1fa704a6e4c8f2c48a987cefb5b8928d4e 42e7bfdb131bc25d15226123bdeff8c9fb656edb\n7a9ab5f80cc62c0425c17536ae53253a68c2f457 dfae111e86cce4656ac9c75d474ddf2a70647e41\nddf7650be2c7af6a38b0ef8001777f1af29d34d8 c9eeeb530e4c18d6a54a06a4400694813d44d606\nce265d629d9f654e182a1e6d6a4c5cdfdead0860 44de6fe58a6af7a3640b569467b01ad03387b219\n88f1406b56fafea7b50c4ceb597635441084d868 3fb1073972de48486b48f8eec00fe90b7cdf4567\ndce2fe8213c882c45b91fc083aa6ffa5b845ab69 ae01f8b87223dca82c1bfddd9c493e0cdbc3d25a\nb372fd3d59bb9a377360d67ed8c6ab3001c9be00 0f6e4284fa99c6ae11131bbfb5fa1b2902972699\ne72b506e2bdea992a010c6a38fa7404a84a2c1d8 a41f823397aba1d07b3846290396221fb2f38322\nc43566274df8e83e56fef49883bcca3c2cf6782b d715213ca93900520c8261447d15b25a5c9ead5b\n15738618f816ecebe2b43014e49f7bd62722dfd1 ced61bbc0e0b99dfd7afffdbd74f606decbc92f6\nd4a43e27093f4d455192d2178ce6fea2fe336dcc d83ba11a61bf0076629e8ebceca62d9a26487ac3\n9d137622896d8c9f8bdb48b44873f283db9c3db3 72ab111aaace79955f17b8f5d40fb6bb9c84b422\nac237b64254937f00aafbb6f1766c452339815b0 ef02469c741f33b8270dc9a4ea31e85833cd5d4d\nfe76d9d975fb27e2e3ae274b210ce81147279f44 cca0c5a2cbc5a2946424b21d73c88525d362f092\n9f424829eaff51f3ce27fe53e35b351b3ef39627 4da2c26dbc87c53eaf071133113ece7bdd597ecb\na39e8faae51a19a521b3fba7d9b1d0893ecf0258 006e325633553cb0d5b2efad007f4fe754687366\ne353916d587ac22dc79d02ecd0e542eddf8bd7cc 02addefebf26e7230ead8cda82bf29047cc3b35c\n4c05a7bf3a114f12474d084d449925328526db7d afefd744ac94b3ba338e750f28f4a132112436aa\n3f45dde50363bd6480ea82a1c84fe9861b14b53e 432037b6d89964159e2216930decef9c8e3fd2e5\na7618891f2c001eab7ddfd09b963af11905b49f1 6134c35bae6ea61cd95daf89b8509cbd139022eb\na4034086050a015d7b997daf0e67c8c9f995a0e2 addfa3a8b3386639ad0176e961bcec3771a9b9f3\ncbce70e84ad976ae6560c76248b4416e83385073 aadc1c86a84a58452a68d1ac95ebd9507d790cda\nf0ce3fcdae1b5c1fad552e1a74f46e2cff81437b b0d364f53598c49c6540b6f670e6ccc05d704cc4\ne63787db4ec4660e39cf3e22992c6d6eab62a3c5 33a7483015d21304e11d6e0939139342fe4f345e\nb92f41ab51712af622a582c3bf6886cdb30e48cb 55fa458a9322c36d123951de66ec8ba1e762acce\n9d401aa822fd189b55a133ae3adf6a27c47901af 02cea5f5054140523962bb30253b4af27e8ab898\nd6280d774bf1ae0f63f73fe659cf28357479918d 8024f65af7bd15547246148d72f23979490845f8\n6749c35c1840bb33ee53f8f44804102ee17525ae 563a3ef530f9f8c5dddee9d69ccc048c8ba1a36e\n95b9df88419d762009191b744cf97d3bfde75b58 e3e8db573abaf898fad6a3123c3e1d3f57fed471\n4a91bd34808b88930ed88ba87559b4f5aae8effb c5f9349e05bd2a2fddc09c893ccd4657c4e8ab6c\n9931fc7ed28b892cd255dfcc0d0fca474408f4cf 85f50630b3df1f723d745318663c2ac40b978d0d\n3a9cea16b1d9a52fda0e4c2854d1df16b6f3c426 5188de92d8b025cdae11a5a2226085ff9dbce094\n1c5aad7b18210f753334b7e58d435e79760129dc f32b411f519bdec0576f8df65e70e877f9bdd486\nea4d9b37005db62544fab2f89f855f4a16d67180 a92fef2dcba2e9946443e2daa8e5c7471ed8aa23\n69077bdcbd46f477da35fcbdf894e0099cb4f662 948f94fa2c08b2636145711f3317aaac8e95d8cf\n0d0db1350106328ecb1c4b6f5d5b0315e897e544 0af273a5b2e88eabde26f7a1b44f2887f6fac357\n4be70a7846e43cf1062068a3ebbfdeae91ee0950 667f4ad4ca6ac3bef200f4d3c27dea9efa95de0c\n6648b6657cacb70c4609ecbfa3ee8fa22a0ea7e9 3c8c9e5e36a7ab16df408f3c477bbd9921b23369\nbc0411a49cda92492b48b56a74e203d228b9c82d 38f6fd24ab7a3d51cb716578a11ab241464a7ba2\n208ebb0e80687289d4646480ffef8cbd19b3fb36 27246a5b9baf37b0411615662b0be4fc3238347f\n9d5f0c424d6233ed6555d92f3f548e3bcd996dc3 910bbffe134a1e675e4f1c9dc243a78b61339709\n6637cacef6aa8e02c2c32373d6d838230621ff97 973e379c62398ffd97ecf6563b06daec91005ff2\n0c4040844731e9e61f66e12f33252da895d913df 8f9ceb1f11c81cfbedfc6cda81c8137b9a36b3d9\n46ecd645672b5a6f0b1490e06fb1c2fa94d194c5 9bfe3421a315d547cdf86c700df9933121ce1b14\nc832b7b1930a9a0bcbd14713c8ec4715425a6896 50e333f4c8282d0889c4606c31c416c98158ace7\n132919d887b6219593569a2a696a34e43595c966 8b6d53fc049424e9a10afe2d5314bf76b5a705d4\n737fc6110c5631eeb241996bfbc710e0ba74de9d 0e615f47254010433be141bd484511781f3f1bb6\n05ec7c7c94ce3a3a62f82bd87935671224c85ee9 9ea04ac07d9e56db9901bcfbbee1e86b95841563\n1454d8f4a12c3ea5369a8518651f57121727f8b6 891c42e425c09956d1d2c3db1d9508de93140c5d\nd8a2883cebc41396f066975c43515cdc3b5d4b16 74420885d37cfa83dd4951a2d79eefae6fd8467d\n4aca4b5c90585bf5cf8144bc0df6145559cb86a4 7b1afe2789e892dcc92fd5a52ee255d65e853fbf\nd2739dc89cc282c7884c9f53ece9906a2379839e 78a233182d3c235bae2a36488c9e2ef78cc65dd8\ne334ed42f33fb06f41567639c559b59c39937353 2728c64d9d35833dd6dc24a78c07dc1470b1186c\nce9bdf3a84979d4c64822670da8eef628aae17ac ac45fde09684ee469dd5774662f24acde9855c7c\nbe646086c9a560c313e5754ce00ac2eafc133313 f5e70f8b3bd271f857077e77f30c753284c3cc39\n0153bd22689537ea73d3d3f7373c1740c0cbe3b5 bc00f0326e1fc2e7d0f19938f032ca9a7c58df46\n5800298011349a81f8d9af0c39d2c7a26eaa9b59 8ef709fa15da21cb66602c59b212b1abe67cb718\n99c17de2a530d0eebc8cb6e88c37602325b701e0 7d2cbe9f6433541f1b49eba4d9d2a76511e071e5\n4b7817a4dc7648327f4943b0fc8afaa432689b53 cfc0f8967f1960d78f069d6ec3141a3bad6c3cb3\na7ada61f9315d130e92e5b2dac3ab8beb4750210 73f6af70107501f80b7356355a749c806626a68a\n99fbc252ebe686370ff2094dff20271c666ecf56 af2e54de97749af3f5ae4a3e2625c8bfe753c13a\na0d202f0d688ecea467c9eecc68586ec57dd6243 db68cf17d530389db84b6ab09184047ede1d1329\nda6687f697199b6f721141b21d8914a719594d68 e39a038643e996339a22f70f5c15d98c08e7b37e\n85a0c7128287b9b0b5804294cb888b325aecde9f d309e2bd6804f96e979a12e57420ce5ceb34e834\ndd63e2a80830f6ee30ff033da692f92800fb9b47 d1bfe9dc581e2fc80b383d6ca10783f0cf56b7ce\nd8c4bd60efe383b89e874285869de0b4e84d490c 27a490ba41030c25180a0fb9dd5223b04b3db10a\n5731452b0a36bfd0602f9450ccb4c91d3665dc1c 85887acdce29296b9bd6d8b1d3610969762d54e3\n40ca45be4f10970c90dde50a6dad2384e99dd280 9c28250140adf5b29a5525580359b276f6d3a217\n366ba30a4260c9dce4f4b1b0579c4aea011d96af 07f74a4d9327a3f52ac45721b5a3ff17302a87e4\n15a1b70d1a2dd0ac7e3fd081761c53a9094924a7 944f7fde33459cdf7e73a14a01a4bd1399225e19\nf116f472cbc7694fd8f53a26d764f66f478fb293 7ad658fd3f0d897b54b53880d9897cbc2ad9e442\nc5e6d996726eeacee6001c88813cbd1c87337b20 248346e2ea92c4ba12929fb7b5ae811947ef3025\n9e3ba7c01cedb922e4df895a3eca6ac72ade8b05 49060090e5b5f0452d2151f9019088ff656def82\nd47960118da97614f98f0fb4e686b5265c5e4890 7b74967a758483cf54b025764f84923b4e9d94e4\n5505d2bb0ab40411723658be57e14dbe85f93edb 858c33306c65994cf3ff16d326a746a7960a9f66\na21f0e60d5b39c9a855a14eb500279f93b06e9d1 b1af5bf800ff7ad7d7a8e3c480c553b2c98cb1b6\n0694de868c0f60ea809e4851c58b7dc1b80e22c7 72776b8d8b3656ec2671f16be508f40c18e3befc\n28b0a88cb7582b938b197bfae676a314e59d0a80 3dcb68638ef675915141974d9740ccc06fbd947e\n93b5662406b4e0be6173c717afa68664384b0677 6a3f48457e082623003aaa06c1ea75a7efe828f8\n4d843176e9c74571eebb5ac436cdfef042e99e75 d1b741d1b9008ecbcd610cfc48b8cdca7e4ffa46\nb778b3acae5f757bb9c6bd3488ada10249cb3929 e2b6796efbd377468cfc6c97bb879b80235ce6e4\nd3f4e751be0fa829a85db93987b1f96ee3bafd15 4576523375904a62e182299a7d4d337fc6889dc0\naf4484dd12ab55c8d886a593695601bfec15f070 81c04e99586c984c5fe8dfe538962a510163e2ed\na8a165c4b193c3969c1cce49f0fd91aaab47b097 4a8169b7233b796899cf017f6f981d3c95f2fa0e\n19298c045ff3f98146526c765794ecd62e2ce4ef 216cf4e6d5c494c622d8c29e67dc637e1cd4664d\n255a8e4eae412f5363fd2f3aa22c5df585ab89ae 091c86eeddfab8c8978f8a3b0bffe804a811e8de\nf0ed6bd924d6b7603009d416c16139ae11cc5201 994cf12b8f6048f8d06e2cbb579669eb519c0cad\nb74b3532cde92c3f54a0d83d1e5db953de1a4239 dd780736954fd7ff3d8783234ce95b450cf02b41\n4fa86e8ab332a03e08313e131d4507fcddc12f7a 69250e412fce6fdbce97264513ed9bf3860ae2cd\n6939601936df67d19b19146c2555908fc8c1991c 5e9a13ed91e32fb9950e283a279d2ce59da09d43\n139955abdbbdefbb61ad7c829f5158752a4157d2 7a49c05bcd95d477aa88ab74a24c0dbc2b8e9318\nf438322d5cfe0337572e7063ce7d8655f8732b91 b1309422ebf02d54a75939b332d22766cc146266\na70af49ef182a01287015bafed541a07d21e2d6d eb7229689354baae318aa9a3c37c296273833e51\n5ebdfeab6a67957bd102aaa1a1da150f63bdd830 f95e41d9fc9c6e6ad557ae13211491d9b75d76b0\neb64f002fb212d3d6fb998e2fcc87dd51ac9e906 151980fc6d0dd679bd013a2692e79e3a2530a907\n8acceb6b2f73c52030bcbdd5a2d06f9d8bec52f9 4daed9531173c5186c306ce377c4e36ddbebd602\n582b5bc3a77492885d7221054dc40e0035fbf241 360c7f17e671ad30a9c6fe20a7498ba89a77e760\n720b4a5f7ff67436ce8d53c234ca54291594d0f6 f5c74b07af373ed9fd2719c162c12b375892276d\n92f257b0e1565423a6804af9b81f2cb11f46552e f3ea950bebb724f699895b89fd79e94dbadc8bd7\ne484db72b52e1a8060d4165c931aeca7ae17065e 0dd7222e3390ccd0545038054a7a6a9033441510\nacbf06edd04489537ae6aef2b768c28a605fbf4c c426b71bb8e9ef2379d303a223feb4a49ecb1ba4\ndcb5873a7c03039251b644dcf00885a056f8b9a9 c00b12ca6245d1a783e1a78c6652c8d19ad1f5d0\nc69b3c86843f315bbf9d9238a08848398c096664 479f2368a75aba5818d717a0289ee123f39f7ff5\na0ba9245e400bc9c67344dcb393e2f39ab68f04d 2fdcff3aabdc3af2c79f6c668c78d8109cd6a397\n930814e177c6712bd3d0e457f15497cf74c3ad4d d26c98b56906d25efda01fd2c636b64d815e71a1\nd0208391fe012bf26f4003f1cc3cfbd5daa795e5 39c7a59b953c738c61407ee37d14b724de40a2ff\n22a8617ff23061be8f8440807a5dd514b3c9f2f1 27c67ea65e467bc92930c86e1a2d2f960cb08610\ne2bf2be37fb65b5c1b3cc5a2238938b3bbfaa9ba b34bc23989d4b36de21a198dcb4ed6638c712cdf\n91d90a4ec9beb2e4933d4c98b8432e123cf50bc1 3623a82805bd9fe9a90714eaf47e099151b76216\n55466c224381bd32555c4c56cf7803f945b0f81a c2a7c07ea30ae1f41fb889e1698b81462a68da3c\n0fb6ca38710f8510786f4c424a9fab7cc5ca9ed0 05661bc4935962d79083f3c0f12bea3a6202cdbd\n93f4a0d8d3fc91abac320d9f5f3a391953e07855 4346003f6c17fea1ee8bbf2c82ca18941cdae008\nd70bd1852fc67037441069ced317a7c3cea58458 37bfe29ae1c8636a381cf6ccabdc489650367479\n20e521159766e7166fcd21d299ea2c23f248be0d 63330cd0474d9cfd21ab5bd423abccfd9206fa56\n72436d7b79139621afa3a037dcc1a1b2a9a783e3 d2181a20c538519b9a8375d0a7ffd5fd1fd9e89e\n773f8156408fc91e0f2be1a6a39011f1998f84b4 8715f2fd2225089ff8aed91901930bb15093acb2\n5353387550d8c24152d34a392d945ea1bb343d27 27a8ce0ce8eb21f3a99ff56f35d6ce0ecf813319\n901ded4595b9f1b15619046666a393d604bb12dc 9be2460fc77c973fa36aaa8a4053c8585acc3955\ncd34145f7fcb44a1ca02133f9dfb09efb052ce9f 502e51d840bcd36d20e508b782b44f11bc334da1\n75c034f93f0e94069a14f3c63de1e9d83f49659b 5dee7dfbbedd83e88a5144939325da78433049a7\n2689eb1d19451e7a6a766fa827367f93f5780a07 080dc9b83f77490fa203e40b9ea5672e8cb10569\n7a337b76290162c13c79d625f00870e25576fc9b 15ea592abb8ccaa9626ea00b1a2d7115f5884fd5\n64085090a409c17c240e45662a02228346087bb5 f5973bdb303be86cf54d49ca14a9a5daaebf27a2\nb5e0e6d3fbd81769c0fc23847f9cb490acd5072b d3491f3383f9bea4e5549aaea542a86c3a4d3e68\nee6f707efc772afdfd2edf0a4c78be119819f484 e4ecbfd806e1b5a2dd9db7634aecbc2dc24965fc\n074e0892283b439d77b2aff54e0d96384c6f5961 cf8f828ee2e31441afb3343c852d383669d279c8\n24ccb41cee83082a4446418233851b508d478547 81ee62036401f31df374fac482ed1be2a750f93b\nd082b0e6a993c2d0c30b151ceaa83fed67730061 85a635a3f2ea425e092c50df253e299220aef135\n3ecff2d9ceb9d8f70cd2f75850a1ec06645641d2 5970b7420b8915f19bbb2488b33110d47a45b1ae\nb10da9efcc32508a3d375ccbe66424f6f4bd1498 33d50870bb031f7c1adc7ac164d79a7956c6e324\nd9496674870e7cc0eb31c8493fca43fbe62adc4d ab0bd6d1ecbe7403c6a05903e33080b4b3e8e428\n4ebf1e580a74d7d0c8297bef1b79abe6f0c15b59 6f6a3f3c6dd32212fc0565811e899cb05d3de96f\nae2fbd7a8b8f2db0224b1c684fd4e09d37643ef6 69553471861df68086d8a619132fac23c189046d\n6e56142454a89b885c9bdf8bd8f9a5b110c00232 a1731d5443570871f09f05c3e1c473e57f2c2a50\n123c2a4b6795ddcb9fe2a5d8e7201c2c9befc7db c6c758a76e9c4742f9f1b749c24673b9326ef7b4\n1a9d2743a241e1c226956f16f9160000f566d144 434a21bc3b299d57986611e371430e8142b714de\n4b1d97d3303b5d28d8066049e89ee258146c1eaf 5442ab117efb71c736eb282f5e6697d11d4bafd5\n63cd304834cc08fea6c9a03a1bf8a4153277e8b4 166a7ce8c3c0545db297e7e64c97934869a7b0b3\nc541b593f794a8200f416e0b392ce8004d2d4ce2 8cb8f81089ae6c9000d685fcf961153b2cd22c1f\naebe98d356018bfc5f0374c585856ffc42103301 9a4b8e52851944a9a9d317dad283d393f15a962c\n77906ac93eb5c578316c20a518574e2ddac64198 6f45c0a92af5fa68cd1f72643fa3cf77821c3c78\n2ef35e0b94c73a89b24317a73195294475d268c7 5e47e0ec2fd5ac3b9a1e1a31fed278c017077696\nd29988f1ff273f7aa8db39ea8f4a0dc606e19a13 3ad5183c1a3a42999cac662725b8a5de704ec2f3\n823538a4c381b2e853aeebfeb547dad4adc0f1ec 17ea4854ae9410500f9de5683e3e4ef70f4d8e79\nb302b6e8fc92273d884e241b841d2994db98385f d1577c49ab85f7c24a84d82640864ad1b1fadca7\n161cc8ef0946e1f5239bfb9b8e7600374de1d3e1 d22957c8f2164a5c646abad2550a53214a3f5115\nae97672566b76e1e44f2bfc2ce883f1b2cfdbb40 865d0ae4f3e2c393072edf8958521022aff32c21\na5292f86e8c447ca5b335ace52dd55b7186b4e7d a91db8c90e4cff07fdcd86e0a4ee2df8201a539b\nbf23fee342e0be89013d454ebe95efa1dad7230d d06bf82249ee03e5bb2db033e5958c9df20b0fb4\n92b041f63f7234f9c5239cd59a834ad4e16bd727 105c38b553eec061ea1d19417668bd676acf143f\n96ad7a59b5d9f5815f27d14993b4e53dc58e8494 4e93e65c6f7978dad3b876106f9effe2cbde2eec\na5115f32af1318628fc759c01957f9aec70c2342 a64bb122a626e0209456da87e6d15f338eba445e\nf055b23bd22fc908b6b5f9793cd9ffb568204baf 994a2647d26767ad44e0a8babe9fdf5b28baae32\n49b7d1405862f0b977b0f588f82c109a9e9b1f92 ceb6104a61a3c3b263d93d76295299e0ae04f99e\n635e21b935c56fc6a88f4a4a9a9d0a56a4795a8b f9ed8b800d63a3cc64a466d939d780224824400e\n8177877f3db0afb973e561d7118c2afc2aebe618 bdcf6f261fe5da7db27265ceddef9239439ea8ca\n6acadab2f22e3b4c30464d23bc8b71daa572b35c 8989cbdb05a9ee15dd4d216a014aa973d697a6bb\n4e98fdebc9aaca9692c6081c289b650a064cfefd 33f0e654ac43dfa86f2107879c106272cbdf0de5\n10f78634fb15a32a29669ed98aea33c4f3934fe0 3e4e307d2a46b7dab58cb006a34ecbabdc216593\n54c4610ab228ac6585f44d8bd27545e12ae29f52 73e4d130ab160851986b8b04fb149203df7c3631\n60d74b984fd628315ade7c2f9d2412e7caf9fd61 ff25234fdb8f0e294ce36141a8e65f2510a321d2\n56ddf4b3ae2e56a44b301260da9bdbbb9b61ec97 722286e7e5462b227dacdebe02f33c4bab8a542a\nc6ce0d695ce8cc28b16afcf5d7ffd33e3e8ce392 6ad5d06d0dfcecff6895cfe9fb5d35ac1f0e89a1\n665d36241375fab7700d779da8d466e53b4c4a74 98d8757099428f3ff8047f62270ed897e53c3202\n9d2fb29a1fffbb6152ae3c6ee1dfd5a250da1b15 43dbffefc1fc9b497c0b7d5f0748299333d8f9a6\n339d86d86693811c4d709160ee5078c2e333da17 5fc916198de4f53c84d3b491fc46ca1a690ff56c\n253d1a4ad62996a5ce713f5885894c35e0c4f066 c0a49913ee7c5bf85459ce706713f8fd8fa3a26d\n25fb30243847ca565c681842e6632898466fea9a 1cdf38449e78afd91a493e34bf13fc4cfb3a6d54\n2326f0a05942853f6bb31fdde3f1a9bc31e578d8 2306ad2c7fc15c680ba504482739b432f09d0a8a\nbd65c05ee846a9751129acbba93086e231b7a3d1 2207985ffc2e4bed34a1bfda086230a0c9fbf8fb\ncf2b04d30de4291408c7d1949be50daeeb2908b1 ac4b8c8a86e65f0fa76dd1dab92fc11f8455c1f8\nca42725cf6efa173be4995fb7cb1e67aa3d2fdbb f459dd76ae829f2048b6053999516009f8ae0ffd\n0081981249e2dad237bd081028d4041daa7cb70c 2a1df4be57d190b5961f31a36a1efff5148f7d4a\n22f39b7f91601725907bf866391a16182f8837fa d7cbf6bb1807b416c51db1822f1313b1a88a75fa\nd09accd4ae1f66231c8a908def4fbd0dba5e8cef ffee4b15e1a1adf0d44fa7263c6dcb7753eb5eca\n2a7440572f6989f76192b8c69da0de8af6e7e796 b430889da7d2b1ce9a0c9d73d04b58e4c3b12534\n03a116c7d4116d3491dc9e676e808ee2fe4dfc72 5b59cb8d12f50c8ac9a17d33ca9bbde675dd7cf7\nce8a152936e7b9f61ad8bee90eccf3f3d35df72a ebfce9e34e451f50d8c09c61b027b0b6e4186f72\n0f7071645404a587ee6b0f8a67cb315d78132288 08ca0ae052d0975ad9420ba47bfa0675bb2f5548\n913418d43fabd8809bd7cb9ddb04da1cc1f318a1 ba8880fb0c743898899e3c803dcbd6dc88c9e3e6\nf73d985c8765fe26cb1413c85a0f00ecd4b83276 a41f77f8ef136499a2031319b3e7ce4f61723f5f\ndbd2cd905711d3a27ae5d95a5aec08ee5addd0c5 94a2f208a4c26c22c8fc004781df3cbc47ac0295\n1cf024f438cb0dfb175d832a3eb3b46a2b505131 c69b41edda2713170a2b1e7b652f43850d6d4b87\n0bcbcd6cc50b1d357c19c3c37c9eb37ff178b2da ae111c57320e7c7f850bb7654eae106710f8e2d2\n1e58cec498c0e38ec4c291c517aa9d2714977b46 90a13bef713855154a827ca5f94aecf87433520d\ned20648f0f445fc18cb4e52f7465c36318be49d2 40628bc2e5851b8a9217a2f1932ce32177e4a6f1\n4e5b90cd50f12d9af181489f4c4949e303f35991 43bfc2f7bc747e0162dad621b1cc89d3adc603b6\ndc4a9c350f0440ed048fc2e51df5944506a8b751 53a5de0cc393477c9822b76b3dea39eea7e64d46\nf369a0f71f32fb2142e7856f75139afaa10f6e06 d9346fdc231c100ea86aaa1f99b48b6aa15ddb9e\n4be626b65e98463c2c2400340b22edecf95e3ebe ed8f221bb20cedce9e6e4de86316c59317424692\n2f0de01db407dc7ea24a70b29a7069eecdd4d455 9c63aee18655575b37e0551da97ac29a2ea3fee0\n6a039068097dc76aa9c06d6a46a509537db2f02b 6a66da55aad335cd5658d24591b4d7f9cf3a128e\n27cf134c088e76a6f95501e94aca38d565e0638f 72dc8c3a4bb7f96f72c80a65f097f26b3b0f72f7\n99e0e2ae5a476849041460cc445056d50b7080d8 d05242907a8d8ea752ce311c53883af5ee5df035\n896cd618dc0d95f408f4e1ee184369211649cdc2 37659eb8a785aaced465369037195a9f3dcf4d6b\n151e37135e5c1e8ddac97ceed3f363c03b290c14 da1789775b06c2b9e1d8fc5af05c8b8cb18a6657\n09f4ffe27bf1eca9a6551e588cbb79e498a821b2 2e4db2c715fe47ea19a97e542a9bc424c38e5782\n18290c9d1d980b4904d2d82781e8ca638fba7b21 093dceba010bc07c1eca12c0434c0d4fe81a2f73\n1bc5010936649233187116da187063aa141c0caf 36684880996a6dbd359302290debb92a77d7f486\n2e4274c62edab23559a20dce87e06c87d94ba32e ab1f1db9e5ba596809eece62ac1297b08e9acce2\n30d14bf97cc9d6453af6d256f048237b9c26c606 47d2210d31f6f9eab419308218ed937c7e23aabb\nc963d1925dcfac6015cf73ae3199af29758aea6d de20cc7ce6bdec5bc51084b20e81915d00d042b3\ne356a40803f21e591c8edf660314024d75daf7c4 061c2865b6bf4da6ca35e3297e0c13adf0be0ccf\ncc683c0aebfe70c78903b1ae355aa2df819156b3 ef611fff0a783cc3be15e49b9e69eea034597503\nd7e8f7e0ead6350740f2def74bd10fccfe88f057 98f5e1a25fde002cdc4b68c8d249f188a294888b\nc53c6e96689763b6f70ca4bed6ddfe53139d093a 1feb46e3efef47b09347970d68a4572650c02c8d\nd367eefc55446615a99ed5d2295bed118404ba39 a3a98c221ada65e4645db697e9d37db12bd9184c\nd478cef16481de8a71735b7a7e3c0b7a7fec74c2 42bd39ed6208e33edf4eed7a3801878445d71707\nd9135a4d50fbbc29ceb806cde6cf3d502e6effba 9234915f882a61b5be384ebf21cb20f4da8ebf03\n2373bc44f9e672b54d1e5a86d8a237fc8836d11c 5165685257dab11f1c052a5940bf6b7203effc05\nef41aa0858a937cb07737a96ecf3e895410226e6 c05006fdc879b5293932a9701a8097cfb8efa4aa\ndf5a3246fab9853127f88ad6ce15d7d751b94ae1 bbddea60e6f232d3f07fd69bf1c51ce591d75bdc\ne1d7b82c04036e3a0153ef0bc4a3513041a39e91 e461d75f4a246ec38d13e8dd03f90491b6e89067\nafab84d47481ef467cca137a83488709eb37cc4a 662fe339786f435a302ee358d05e709d2f7efe4f\ne67b2d471e0b470028bd879f30f50f3b40d11f5c 6f56f1a0781585c04038cdd8021d7a31ff226530\nf45405f6a7674af1ae392eda30912bc700311888 742a90ea397eaa80c4ab9a5728ec31c4434ac3ba\n2bf25a791acd4ba3ad0f004ec61ea7952202298e 4ec490b038aa1a24dd031596d13ce02c417e2dff\n6256118a0955d025b1ce991b7c30f5826f1b27ac fad371166c6a3cc8be79a193cd4171ea5ad960c3\n7d2fa1619c9e9f65500fb9868e3dbe447e3c2913 becdcddf5b79f846e4ba1f4a43586f69e4370f79\nb8b9efe3a8768689046c83ec650a56853f71b21c 3848184b7a8c59f5c1b392c3a7195cfb4609b7b3\n659f4265d8805caeed0f3d9414058a8a6bb59938 83c470278836d498d12596545ef992e0441eafed\nc843958350c3ce7f3c0bca6bdae269aca7e2590f 221408c72e800698f8368acc3b15908967ec6985\ne40cf9a67ea2b3114992e1debba84a2e683c1c01 45b2da4b7251c1af261a3804c62fb316a572ad45\n88b977f1df268955b83dc6086bbf463912ef0589 6b75a469d453709c0df3f7389fa9bca23ad788c5\nbb4ec7b2ee58cc3734bb1b675a7053a0d5b4ff4d 4d6d1a0a10c696b0e45169d09f849e323ffa3ac8\n07172b7ef687c781e6889ea414595f37db7639f9 05d905e824b000780b110baf7f7fce6938b83026\nae8e4b86ea8e5130b13bc4335cefe67656a84919 d494f1697578afd91b2398595ae19d4164b8fdd9\n96995e42b8c34e278e2f834ccc3757d02d8e6e83 c7c383d776816aab85c876d15d96f469eaf48c0f\nde175df02b91296f5b04f317a801b4d471f7af76 18f47e1f732f034e7625d1eaa1217cd69402f6a2\n8027e3c45cc9bc52e9fee149bfdbec5bad1a860f 34474d76a2ae42094957b693af8ef59e0aafcab7\n837dbb4a19fa63893a6a1ce94504f64c67a9aea4 98fb13a159d8a2fdf94329b816911cffb6aa4d4b\n3f7b7ce751fb4e06a0e97a6e551e46c0f5b291d0 acbc27844cff8bd201dc7f7f69a4b5bd8b9f8cd7\n19e578ce84114348b3888d5deac464b4e695ec97 8b2aa7cb372e6adb11e8dbf1e4a6d5b0646726fd\nc762b7a4c029022d9229058c66cc2f4e430f52ca a1647988d9c48d6208a6884c689a1fd360d60bcd\ncb87d9e677586c67adca44b5e6be64877c7d8fdf 9f13a5cafa68632f887352cc18ed87cbd83d3825\n2a5ac0ecba807936ab9bb05dc823db0bc07f16f4 8676b5c93801e85f2acbb144c1611a2b064d815b\n2eb6dc5ad25835a298e6b0f45082e0d4898c29b0 7ec752713aea5c8835d54a1735b49789aa552075\n10fd6ab38861a06063ac57d922ab76fd73117b70 a3b63fd6254675e8885f011b1ad07528c2c313cf\n5489260cf42adab867ffa51e831ad2e17a4f79e7 1e9117c213b7e680b6c3ca7f86afe86760820e47\n2d6821173354e9f9914cdf9de63e61312fd1f290 70714ec53eea8f5aa0ed59c9820fe635fba879dc\n9fc1c9dac283f13a7a32a2ac9e9a761d2d75d613 0a7c6488a4c29e654b08649d73088ab93601dd68\n1b07a037178ced7f8335c92cd4a7ccb6d7b246cf f6878415864ea2751c4213dfdc2aac95e3e7875b\ned08255b3769b9231f0a8942c6077a6197c9a4d4 cc5be79d6155a962fc8e456aacd752335ea3db0c\n059dbb86314f54cb08d417426ccb0949abe0835b a11027cdee16205edbf5712f9b4251681bba950b\n1fd2e7030d56d95afe4af973e57a6b0b0caaf70e 368e9cb0b8e35ccfe16c1acdfe5141b740cb38d8\n788d44311f88b37ba61237a0e7c91494ddc6d86a 1d829e90a0a2c44deb53504bdda9da80ed17d8f8\n7056cd3e5a08ecd55be8d6d9fb3baec073887c45 2d1a2ba1c095d08fe5b5c35a9ff1de2f4a2a6698\nf77c6c3e717417444f0cbe1ce466215a4c089339 aa8d8760e7e69f714f06ab64d38d17361e9192b6\nd8d6048db6b386ddc1eb8828d783f4d437848b94 7abe2c1f0ca903ff7674d86af7bf6d3c89a8726c\n2e1934e0d2110ad10a9cd36de7dd281a7db16212 83be783f37aaf931c95c8211210f4d493193ddd8\n4096fd666b9cda478449f7fa25a80ea3b42bafa0 9af8cfc45008db829a6e1d9695b7b13709557fc1\ne83cee247f972edc9999c916d490f69cf55ab95f 6026fc9179120773d9c6e111be88cd45aac95469\n077b63283a6ad17ba5fe34da21d01bc97eab4ffa e0aaa62f0e549f16e09cdd25505bbf62b1981358\n47397dc3b11d5e0144851d3d126cdac929c26d60 cd03bfb775c9cffd3f69f2a8c3c05dc0c4ecb2d3\n589205b64ec9e3d62cb21ee8293122bc3aa51e03 0bd7d047b30b93c062dea14000cc740e78aab036\nf7303e56fc679b20fb26d75649b8d1bb41cf0dcd 6a050144e64f933eb27dc7e6dd41c02ffd312c16\nea23284d67eed876cfa353236fa77fa88511469a 17919ac8ac1162596449fa9cad7b7788bfc90d0b\nfab5272926c01690b34419af7d42a011128711fe b01a16d841a52ae790a39b25009e05c8c8713ce4\ne5fc48115055cd373801db10c15b966c7c2d6737 0a889a6fa4d51c88caba9fca6e3b2d4affa29a23\na285ef7b6137407bd39482882e30212370cfe718 ec3a601d118c698ef54f13ff67cf181d9baebb9e\n6eb04b15cf8400c407fbd95cbf973e055bd0c36e 2fc6dbeb1fbb3480001d753a951dc7f2aa2c5338\n6e8ecdb9b8a8461aad8922f355003a2d42835ec9 240d0c69357a7192d1249f8693e33d9096a69ab3\n5be854a001491993a970ad4cbc880e3df8aaef0c 0900d7bb4a1b4cec5bcf49ea2f55d3f9f5590479\n47207938a2ad09433fd9679c66c1bb0504f2c713 a6b15813b726e1487118c69d6bd8e1c4a16db833\n03658131e414d8f57d8bf1a09344959ae03acfd7 714de8d1fe7cd437b124e660e7b76841c30daf94\n76b651d6dd3fe2277ebaca5e0418283a70c4a08c 2b86b3605fd69965d11924c47618ed0aeab9982d\n8694ed994d7b25e89df3dff9771dc8f808f61ee3 043f3b45bb9b9f59d03943616baabaf2cd2afc33\n4eacc6bd7459313451fea6a657ce7da7cf4d4c08 5fccd7e1fb2c835087259828955101685d3ac4cb\n0ebc1a58cb58a6f8114b93e6083572bc7e539eb4 bfd5889b4dce0c80710cb081b39313abadd03d6e\n9cbc7c22dbd979eca7415f21fd5cbdd090044482 d37dff5ead8a5b61d15bbe041cf0cfd49c046ed5\ndbbbba65e9b65fa857a95735af75ed02950af490 dab8c83ac48bd401a75fa14b104900110ecdb7e1\n71b59967efaad76a7d33e2824187ac4f8e45237a 73055d39a4ae310538a2e80a026526bf3d92720c\nc78c144af2568d9846ead2bfb0c907e8008f707b b87b8b5231f8b074aff0ce98d84b01a97145ac7e\ne1eca5b5dd4f4364a1518f8a26ae517c0933753b db70bab73a7c558556ac4f3493a67f94dc2dd74f\n82ad5fbc13651ea786625869dc4655d58907bb64 5211b5d4a1ef7f3fb36e0ab8534421f6896f44b2\n4b800a932658193b5aec4dee1ef105c7f19d4259 ecf6df9618b7abc772996b5556615e5d9bd2ce2c\naeb75a44620625ab4ff07bcd2b9af5bce8fb2857 c79647e3bb2441c262cb57d44c9c7bc3641999ab\ndb8e383a1774988f5f11c0825f2327fd668e9ed8 5a370813eef9ccae2ca24228453d454bc6858c3f\n6918b43d604e05ec8557b184928e0d21e7d49a02 6389f44e385cd53f4250de6dd686dc69960d3872\na5876c6a7fe8cddf67eb0007d8d23403451de8c6 2c433756b8593647816b7fff877db0e739903801\nac6af89854ea17be07b46fd9b2ba1a050914070f 8ca4cf29099f883cadf70c0f6a5e4b1bb15c759d\n7b230dbfe7dbe5d43db84de964008406ee81393a 07ded6640357a960abef7e4b71e18eade2dcbcfc\n7eec7a1e5dac2aa7e7e4b6acf560885dff3a581d e0f7c22e5c3c6ccffbeea665a63cfd6fc209161d\n39d5dc8d0c923d89602362727b10e0efd733209c 842bebfdfb1237ee20a51bad08f20c69ca9f9f27\n5cb6c902716be816572534e9768222368ec84bd2 80221e6894f8f4382e3aa2d8d96b263f54f15b6b\nd7fb050b3880577d424aaa675b7279e9c0cd5868 08612efc6f9c7b7c741151d7cfd70c6f3685336e\n911a0111e5f24ea1f5ba512871beb7fc34dd9472 21d58dd184907df72545e2e6ac9812663216a3ae\n35bb02369e86d4b9ecb544b9da95fe46c14254ce ce06012c287fb7085bba3154045c930df68d4f76\nb312e35b4b17f7ee33d1bdb83872ca0ee7e62675 9103af5011ded28c008402511907ab7b3ff8d0ed\nbfe17904294c43624b24a57fed516192d783b329 9e9464fc796f396036d6a14bcf0be2834dc67668\n3f6cbb63eb2db2bda3739f9a5b5ed8f6457502f1 ecd20d72993f4dde818ebaa717b1d4798f4f96fb\n71ecdc3f27a755d7d73bfc0b3b2a439522c5e632 ceec8def09afd8b552847163457a8fd58ed789b6\nc594c55461d35d86b1f9b8891df884bb203c553d a25d94d4664db7f5051e3503c9a02c92d9b4455d\n863b4c6b65b7be44e97780e2883918515a7ba0ca 168742bbf84abf0eadf32a6680e6105371bb15ea\nfdb67eda36fd3dde72bfd404133606336f0cecc9 aceef70dab171689c5fd56025a224aa20f3bc63a\nb30cf2b49acf39c2a80a1ac92c7c8a0d9dfb9647 c79ef7d895d3906d04d0fe7811213a86234a7207\ndd0a95f5a55f3fade900efdccca0c24e87e8329c d3bf21f3964830a23c14aa35d69d7adc0daaca10\n22df4075a4ea242cae8d7436e2b8f6df39b5bf4d d1db9d02173b54ad8d06d5aa9a5152ee958ea605\n08ee091af6f97b82f71512097674238f730f6683 0695e42992b61fa1cb4f8f2d784a5b76bbe0258e\n7dafaab23e45958f89b348d304de1c358202d63c 50e364db2ece114a12cc4fc4f51a700559834bd9\n7487825d511c0774b158adfc58f099bd75801ad3 1a865bb10b3c6d8819ee1ffa030b2fd564fb542e\nbe163d721df99f756bce88df6f34121b1fba3a6e b98cabb236a0e993e96a984cb7de2a7c35f9c5ef\n3d85b9aa4607f8bc2ff29cdae43314e234129f59 e8f5376856f5fb70553429d32bcff146ad960d49\na864baf9413c185f15dccbb98fbffed03c8298e8 50ad443c2272076f8492c76ac221fba8c78e4ec1\n1eb620a46cfd0397d01894e5a044e4e5f8cc748d 0b795206312c4851b814f7a162e1d80ff77b6016\n812aa95e656ab3b03e7c22f73e7e2f1a4a093242 4b60a6101640d11454592ce0256df9c7d7127261\nc5b20df7a690af83d5ed4d752be903e7efef5a10 8100891f81115b76e0f1b6bddce120b2b4ae6c29\ne756e0d9e97896d50ab6d5f3f22e47728ddbb087 e0d67ea59b19274d7e568f946d89a4bd43e9bfb3\n107159330e507887759ba752f262d02069ecac93 c38e2adb80398a43ce7845af0bd02fe6af54d88c\nfea781d73a6bc14e336970b911d84a220034edae c5a23835ea66ee495d95bc0bb87993e6e661d784\necc2f2117a934169c038760e00861ce5f1da58a8 2aba22ac338c65d4c469add935b0b9222b4c57c7\n445e6716e103d7421904b4c536339fdf074868aa f0c917892ba5987b459e2bebe8b07ab326eb4abb\n10ce8b7233887d93e25027935d35a44517216ce5 d1fb19de8705a44014339468be6e714481618036\n75e7b618c198aa6d9aceafde8347ea5a0def5eac aa6817d3fffd97b3fff399c9e54b1b385b7c0d58\ncd081e90dbc4623259891e52da2c46bcf726a0b1 e2edb8e4c1cbff94491271ed24493ee9c2b784a1\n04485b0c421b9a64f477573925d6a2a3959da14e 7908a62f04b08a16238f60f25887c38b05aaa468\n1f14c4914d93fd452b2628ead58c44c43e631656 5b14aa2172ed6dcd43c16a9f590c1f4ceccc7435\nc243e7805992d704f9f82ffb95fd952c6d63002f eba92b1a59912e63e59fd107d414135fb5f2a124\nec6a6aec4ea962bb6bc173ab420dc1714b420c1c 47a8d0d37b2501167da2197226ca7daa1acafabe\n89fc0b99f36b6d3ef601f5634ee0ec4afd167b87 7e9ed73f7d1dcd5abb4f0f47b5b03ed95541be25\nf3243333e4c0d2639b2141318e1a57a2999bb60e ab276cb78aed12e1b1252a52ae0524c8c457e23c\nc11b116f1b88c7e17a433b018b4ea2036eee9096 d5cb95700f086de7c16dc04b310207fdee9b3ccc\nc008795c892f1c89c882a17a79a75763b4c5f1b4 7f7f04ea909d30252155a2b2987ef3b4825dd3e7\n9b5e5dc918789b4a4cc2dbe4d89d299f8bb42748 26c7a19d086d9563f9a51f1b755b8b0c1b299d79\na393756513f1f9a7cf473a52b6436900dd045b27 7368bb78a0fb5f8700287318cb0fb765422c9cbd\nd03101ea75b0d6de2038cba52c763088d623e46c f2e936d76641b516bce63ba871501f43cdf405f5\n893c0206013a177d599f2444f16151e123cc7666 0b126fda56578328dd4b123660bcbd6fb760fc58\n1dacade2c31e428d8fe8b5c4dc4da1d38e1b319a 579da9d9673a2669ea2eb763e21a48477c1c4cd2\n872a7aabb1d6627c37b0dcc2beb83614f768ea27 639f3ac11881562b0566c58f6f996ff94dc399b0\n081d56123dd0508c56f1a100767514e78a9afd1a b7001fe4a01d360bb323a472231c3e233d38c1ae\na9fe52bb4aa1c821b3c16aeacd326ac2aaa87e85 42c3ee4776d7f243d04535cd27c96babafd4d83e\n2c90f02a4d6f6c1cc75f05cfcf8b2cbb841ee6c8 2f12fd4903cd3c50a43b61b20478f58ae0e77ae4\nafb323273a422c4723dd9b379473450294399c35 19fc6d6a95a1a5177469047849fb8298a47366b1\n5b79b6e83299f57af1d61f1aeb074aa232f42c83 c3121a8fce4f88ca322a102c437d148001c2c6d9\n43202cc1f87a5bee858e6b5b4b8234d75d00eb4e e4b381cba3ecae4804cdf0f29542ff4cb3597d86\n46a0272a55980c73e4ad4234fc218559b4e95ca8 b7a69f527f6541d49fb2ba3a6a413bf78f998a9d\n2d1b9abb5ad2ac23f46d63610c07113073484569 bf9ec8f62550ace77e45f2db810286506db06f15\neeeb0a236e4871e8f6db70ebb38bafb4e1fee9e0 4fee0a9d646d8a2e1dec2d42e0d561819935ca0d\n958fec4320b6bae18cfcefa646e0a3a8291406bb a16d492fdb7e7c583d58e5fac375803dc29d13f3\n0ff37f3ccec539c2fe94a17a7852dae81e1c0e0a bd138df512852a8280be15a083ae87de0f7f8fd1\na42277af96cecc27080ca6d462d98fc58680d3cb a7239348b736cc71f64145958b550df892e8c8a4\n3e420c680dcf1c6e2163e523123f513d96c6ed44 bcf776153e36cb6662f3451b2c0ceb39712ce339\n9668b3fb5f133f4071ef61a2f9ce8f1a70b8e6f5 2d67e5a5ee2ebdfad8ffc76e17348de3b52a5872\n83d3e202170b6ba9adab05976812a1d70d3ee284 b84b704c415b557d072128bd8160a5ab060523ad\n4778a12fc20cbfd13f0b19d5b6901ffce143f21f 86f0a69d13a14e80bdacdd7003b6d8f553ee57b1\n5b71813ab304fba06fb42d550bfc0d08d26c9e1f 88055662e07b632b2d5c54d37e9a7b6c8220aaf3\n9da27b15d48a1352494f5ef1a4ebd70735ba120b 52787e3e4c52f739117ba2cc66a560ebe54ac78d\n65b4399e08f329dbaa07e7536b96c7e6540ee8b3 087d379f797241bd504a3a69f3e79eea40198652\n3e8d2a5c92c200c12e3486d6c470ee4b4e6f8dd1 e5502896f4cd4465e4c1a891d013fc5517b6f5e8\nc2a3b32dc7368ea6ab69c319c5ef79a998d53f5d 164fd28d5b1a0311ef818f6922be2e04b4baa52e\n7513088138229c4179968ef28d01c0c618b95f70 6130d080098d39aa7f377f6b7bfc5e4a1dd662b5\nc894c1467ee34ce1016e9f833e385178375abd1d e5734cbc288f8526477fd193aa548e0425670685\n833cf55cfab6deeb0ca0b2cdef65872864293959 ad3f14c6e0af64ab33fcd1595b85b08bda78451f\nd9edf46c8678a4831ff3f416c2b28d8285a0d27a e6f6f98d97a814a986da7dbb9e855fc3c8991f98\nd1899fc08519db1f5989fbff0a1cc5d18fb8f2fb d9e5083811eb0e244f6904691a11206871c30ce1\n3dbded7d6071b74e643d6a6b605e921db79d76b0 f65e6deecc73a00f0d24a51624e1f1c45c4c3a8e\n8d79b838e47456976514703ff460255c597e1f83 5c4c30651463599ec7e6b2bf5a0133cd0e90027e\n9a5256b625581774d918e3003b94c457290e06ac 12d1b359810f2e407e66bf960bd47a89990034c8\neb954a584a9bd4cb95ebeb68c0194e45e67a9e09 67624151ca6d79e9a583be223afd60b0f9bc343f\n96d5db12e0765bcd9dac1fd724faec28b3eda119 94b88f459bfa0e9eca9b52b143915298f21416bf\n302b77335b5c048102e1a264a8d4aefc3f6c1854 2b2794bc58d68ebd322978f16105c554e27baefb\n44ad84bc27c9d7295ff5aab34788f40608baebf3 64ddc24715b21c1ecab9660e45babd69d96fe0b1\n11e223ce1f4cfae3a8c67c5f9b9bcb58e4e4fcb2 0609b9b1dcf8c1c1a78852afeda7273047336937\n042f21dc558e2375ec3ac51bff76683aab87836a d630ca09b9d1f2e645cb217b6424013eee8d7841\nacc8e6253c4cfa63ea9eefb655070edba300f8ae e2bb3fbb9dbfb4c77b6b4980e060120b7ea3ec89\n9ea47b429f151a30731d72fe18069196b02c8d96 29f06ab408972aaa0d0c96913acbef7920e7338d\n8bb1741acec7cda6353f9e429eb456f54a44d471 ba5c3f9e9bc7ce3bd32994f582766799b2338b4b\na9005da2d0a59846be797ea6225636594e7f8c4c 9abd25ce4526af309ef55aa55babb467183a7ecd\n371152cbfe053b898fc6e51a456e0850b07772a7 b4570c71aabed7cde18b8168e6fbdf43e35859f4\n27b935c760656a24f69a05860d40dfe6afb3bea4 8d2bce1871e88dd78a62b94af21e2d6c4e4f0eef\nc57f06d62d81c24e0989a1074367fd264508f2b0 705273a47642cc6f06c7fcfc7ea1533d5de4630a\n054e4154e89d7268791c62be47ca72cd61c63c38 5b8f421355eb4176e868e879c02b028d01d8f463\n24a32d8eef321bcc5b5292ab529be334cc720a7f 0fb05220d86911b067b4a7dd4015bed7cdc4ff19\n408967b6dc7e140950d356d7e803ac29e830bd26 8e923b5c9530558f2a5bcc0c073b5fae80208730\n6051bf5edd1f378f9c5aa838517c8a93c4ad4985 071035d029e295d2cb19abe845107ef7053ab3ac\n47fb41fac8d680a621bf14c2b414fb204fe993c8 e5eac57e60b032c458f5ec235d6c8dd08cef0996\n9153e6ed0091c978e400ed5ac9945d5698283f5c 2508ecf17dd850b2c6ad816b7e8c2f05cc6eacd0\n507893e138641496a73d0e77f8923dd8a7d7f999 b0ae05c8ac7c9b312af47035013b2a874da8c742\n6518f812b93def34116c9e6765d3ecc3776c3832 49a59a13364a700222f16759ae582cbc09738dd4\nec6275d65a8e587ed30f5d038a0c8b540979ceb6 60535e4601a32f0667d55b7d187d143b0295a5ac\nf91f6a519ea99ce0f26417e8154848bce70d721b 82dacfd60d8d90538b1814e8fcbf85a1ff914abb\nddc94b96024140eef3e84c56cda68acd12c188a4 aca0701f53a2949288bc06c1770e5a2d6c56c740\n9f07d45474cd8928cf6916e8c4a4c631e4766d39 57a8e57c09d6c3e58b92e5767f6640b435eb9792\n578eefb2229526574212731d34a28524989c1152 4e7e64ba36808b33b6586a0803f85e1703bad423\nb88ac91c573b7208cb526ce91983c8a9919285b1 d0fcba6aba7a88c1395c8a89c663c9caacc27a52\nb3bf8ed96b40ca250f59b0a136ae361c18d3ba11 cfbd83287f1dbfe7d15200dcdffacf3316e63355\n13cc1135b96cdefd6ad94d7f1330bdbd84f0d93a 4031d0e7d2ee5b77c1d2410cde5574db708c9b6b\n560031ba8ca41711b6a2cef6cbcf4d3dc65b0ff5 2501ee91f1d4b4b478d5c1565e23ff14c453ba99\nd5825ad6dd731fcaefb4ffdd13304456f57ec022 8869e1d5542d87c302112294863c4d161b7eca0b\n83183bec6f1a4367edc65df4489c39e6c93e00de a69ce5f67bba22311dd57edf47487d826ecf40b1\nfcc167223d78b88361657d58c1617447bea65fd3 df963443ce3e436269368467d72781a158de3906\nd829c1d6293357a0e773be985ca398f9642ff54d e01c64698b5a154179ec4bab49fcfc99a417d99d\n968b61c7fafc04553f68af7b9d82c9ab78087abe cb54dfb24b2be55049176d33593f34d138d3b872\n687c3d0c9a58c68021959c6d19a0d437f6057fb2 0566179e24ecc3df21dd276708ee6356fe83be9e\ne7935d79d62b69ee5dfefb210081439171b0463d 22b535ff74f55d8b81eb04c5c44e94d5e6c11fda\n18f9ed9cd590e0a1d6ff948fcd9236dd44e53d68 f0506cb123ce32cfec22a903b4f29dd9cb3c27d5\n1245f2d93c1c3de68bd4a7708c2f60682a5f10b2 198144ee187f8f74e3cc476acb541a67c96f7ec3\nd13665754661c797b1fd03dba835fb38936757b0 6964f5a4ddd6b7a1bab917e7add54d0387cd9508\n1480a7ffae667efc0cacdd1ed5a0986e173a362b ab9c3f7b94c2e38316f99c0596ca7b786dcec59b\ndbf389d9ac9bc7a165dbbefe09933e0c56284357 68b33ab7f40bab1a98df85ec4cf5c181c857afa9\ndb9ccfad3453173c57b30f056be75d9a399d2ddc 3244ec8edea31036deb4e53ecfcdf383be8ce597\n4b7bf29250967cab0c041cdb7546390c77f41611 f3c1de171c4de48e407dbfeb2dbb5cf5fc1eeec2\ne604e89fcfba18c721a4590da0be53a7c93f72d5 4042ebf5141a6dcb51725169747a57a56aed9270\n8c42e76d7f9563d005925c1f7930b38afad85b36 9ab7536d1cb28246f13809fe69aa69445d1a428f\n968b7b5cf3452dfe6a67bda2ca09bed1191d249a 57864efe0275df7c6a7d75bc0af80dabc3534b22\ncc024fb41ee3b1c337f5a33e54462efaf7fe9b36 959c6a492729b4ecc5a7fd51db56484f2619bb3e\n4f5a4f9c1ba052e1ad68bbd0884e28e0099cee2f bee1647a783327e4b2a43aba2b95e3ae0248ba0b\n8e2ee1c4faa6c998a04fffa05a295f98a284c443 bffa78a02d95e1ab89cbf98372bbf57e452dc965\n3decb7a112a042ead643eae04aaea0963e210a0b ad7b8b1906158d1670d5a97ba3b8550c55893be3\nc95dc340ed520248613fe2ef7d81f5ede860221a 86bafb6a1ff7e7cfc1d6e41c159560292dbfbd6b\nbc4746ebf913dd79f3e52f5216b9b8b40af79558 dc1e498e2c0ed16077c49f9e0f5c65105c552f38\n3dd12c32e8a48204e62c708f2ba8629853fdf8f0 5fb519fc13499242b15b1f81f35b4fa1e68c0da8\nc7b40871d1527250a051fbf1ee9f262aa61e82b0 bfebcfa90e363f8dadcabcccdbc3506309ff5df8\n76455dd06073aead82cd3aa198a1625e4f4d7041 682a8170c8b81e4cd390c9a228b868715e5a9168\n774c89e9e999d27760c3f658d6b457a410ee3be8 c84d2acf6fa1a6e046dc535db2c5726f6e640e85\ne99c0522537706c551114c8cefa58a55d07ccea1 8d467761b9999504f7a3dc5da942c1d8921922a7\ndd314be7d39e22d7e0272c08b016a945b07943fe e0ab0c78f2dea4303caa284a8dd91e941cc17b39\n16d48a091e95e385914b20472b7c0445adfb1360 6b2e714f9d1bf7e7630cc01725e852934ec141d3\na8dbffdeceef4329e24f050f5a3354186b03be7f 62ea6931a438129df414d704f36e819b4ee544c0\ne533185d69c5c6ba7eab1ab0e244371f7f44f529 0ed650056f0b66966a8ea7e2ec44681d2c57eab2\n09028f708fa5f78aa2120970f878bf0cb6e18630 7c522c7da19edac463d8257eb31b1ce6060ef4e0\na91c02b3e3a790b3589590b8a177fa75155d7ac9 718b5796558442d99f2543159d479e94e431f65e\n3c0b9f9a0c57a7d3bc5a0894a650bb01579f93bf 51d84d5051ce8ff02960150966babb975f8dec22\ne408197cd8b25b1668148267b8d994962695a905 4b1d35da95286d1c51a4331b0b796c8861dd4596\n2bf986048401501e9d7063317101c0a474a0def5 163d8b166bf4a48e0a9f80160a3298f43faca74e\nae0c05e8f4d57137c3da56d90223aabec35c4b10 eb5f9a183502c93251e61fff808c34c287927b8d\n804e3f864398744cfd7823c408a1e84a369415b5 3c2f1f5534cac621ad633d30dea487fbb6badd97\n28014ac237b04f014cd247c88db4c7e53f819c81 ae4781144b6d83e7d0c470bc783bef43bd7b50c7\nd64b7ea716ae0ca6a135080bcb69916703ea303b 1efe686fcc75bfd7c1203f549cf4ae165641f991\nd622475158153d980549debd71f6d71d34ffc226 29db1d9926ba9af48da0508fb4dc27480bcfa7be\nd3f7e5c7f18c59e648b597ef50f1170069459a25 c6ca8aca15671b7bfc04013843a678c752988f44\nc3278b4f941aaf7a769f3ade38a5ee48a1de5889 ed8c5f7353bfb1e7980ff5ed591b58143c7dcc0a\nbf42a52d2935e500ec0cac503887ba4a0a3ecadc 3c621e8959df17e7d0a3a2598dcb18303443f5df\n1d25f4ee526c7657e94211eda4380f628923d3cb ab15be2377e565bf130bae3a1ff7f7cf933a3a9f\na0d896d1124345f4bf14c55f27cea0d759537da9 16514143019c53a36a98fb74d827ba75e0df865d\n7e66cb77a20c6e788cf9617b92585d9f1770b650 ae6fb716ecd8b7c89c66ff911ca5e319f55ac8eb\n3b002c1fff8a3adcaa0bf77c47b8b2ee809e7679 60d206926f2ff5966be9d7ff96fc6d0a49d26917\n060b99089cf52581954b2b7c4d5f6794d3a1e3be c6597e83f95ae7e41bf43712d5733648759f7fb7\n7ba1b342f6ec4be7d4ffb03dc628816e36d335b9 06d22a26ef781dbd9bb3b61a8b66324d8abd9a9f\nd09e5ba3929ed6aec3bf7e318005d08f25038d83 47573352f87b1bed6edd8fbbac55b4ab6938266f\nc76a8d89e64e8d119b6dd81d5b47f02ffab6b003 36b55dcb0116702bd097803ce400a5a7ab282596\n70fef9cfe36c4d3912f72fafbb2585c5afbe3e76 8988e4184caee26ab8cf2e049771baa63b5391cd\n9c720e0bb281d26690c85150b89c3dd959d34f61 9e53a4600fcc30641ddd76e54607f358956b6f2a\n1de59929994cb4b168a61c249ba37c09dd8dca67 e21767787576516280c450ab4a69cfa3fdb906e4\n5b6ef340d1c9954884ccccc778fe83991663df09 2252673ce3d72711e50178d182891fc1fe937616\n66cb85837bb180ce7bd0b01a455bd91efc17511e ca7d4b4cae31c4a353a9769a43c194584581d5e2\nbab8cbd45b8292ffdc854ecdb0914e5139570c1b fdd61952ac16efb1ebb77318b2fad536c6e577e1\nd228fb6e9912650fcbf2f9015f0cf3cd971dbe72 30fdb0324dfe01ccd85b81ddc71c7bac70ffacae\n6d0c924232f9cd69c7b6211bcfea25e9421144eb 206d3ffd9678117703eab5ca4be6705b7355f49f\n8ee32dedbad542429a3e645c38622fefacfd5301 6b82084d9096a397dda3f162fe776b05468ba855\n5902d7031c0aba57a2b687e69d22fac7c15060a6 3cf6ca9dffc84e42d0d5bcdcc91949f8df4055db\n8c800d8398a2714dc4f0c6da7f33174465036682 5e86446b114aa9f13db0571c3a754f9531de5512\n2d4319f46294d09bb8beefb5d7faad382fd93ae8 017b1890b99245bf9a4b35d4d057f13e0107fa0d\n2deaedbd83feb6c3a1bf41fff8b59842c60c84f4 809ada767b935d0ed1e572b295ee62cb2d24b1ca\n8c2cb5682a05713b0d76d6b3188ba651adae6282 d82413279dde96548663c2d2e46d83dd805cbd73\nc4ae08892d20a336b3d563cd2cebada433586331 dc9aa3fb4fa9030e59e80035266ba2b8e500f1a6\ne129d0e05206daf80ff7aef9057177420928a018 8bce4d24e94205d181aa8ea10c212e7e238fc91c\n654ae960b2f53dbc868278b8745690fda54f3300 6fd3fb9faecfc7d2b09e89a3976f74315675aa4b\naadb272b56e8a98f9a52b112567ed44ee21be216 bafd42e73e275586defbbb6bcfc378902f8b935c\ncd63794fc831c379fbe1d12c4addd149909a7c1a b23939e432fdb094781aaa581f51720c0b408195\n5dce775f49a0b7f564d5bef2da836aeefa583fb1 7f6b9c96e5c44d569e9953c87e80b4dbb5ec8784\n35cf211274f409be65677acf69b4e283a3c1af4f 8932a3c989c8125fe37ead7017bff87b699763da\n397a47b39a37acfd70631425a7da9c26c63cb7c4 1f655ebd6bbe0cc4b057f13d402826552eedb159\n6db5fcb2b77998b3a902732ca70f548776e83e8d f2ca0a2cb335597c70f7b81abd96773a3c0360a5\n5809ef7faec4ce2713938d2d0f22547de2f4faa5 7daa09bfd3d38a72ccc7625e1928afd1fb0d65a1\n314f6ddd031abc597ca241d94eb61c064cb933f7 54955c07337a8b43507371815210af2cd9d2d28b\nf1aa0f1e1c0c4c8db2d12e713de720c815a1d3bf 0e18fafb568ecd5e8e7d94bf3f72c2af2fb0a936\nc7b00869c5e0139c50b416e6f598bd83a1b47ce5 094fd8c92caf208d8f70894d472bf70419fa918a\n8b2de5f6a9e2708dcfac22314ae3b7e512eb02a6 cb95a27f5a806238e980b7f19d15368d83a2d0dc\n28d1a29ab59c22adef6f6efea2a1efaa40be9b40 c0add434897fe2a090b55e5b6ecf60dc1e63edcd\n3a56165cd577ee4c89d2150e90aaf6f11e466ef1 cfd80097979223fab45aa642472c51981e47fa92\n2a0e7a61131289f4b4bfb703689b26e216428579 dc86357670e9e4e622fb99c0472fcef2473df200\n86305a401bbfb708311718bc6575a5122f2a7807 20113c673248826cb86db901345d2c22a95b8706\na131b6c2ca14d911c5999fa3fd5b0625882f180e 0353efdd6c9a22dec7c6f190ab7a13b1f0449a12\n9e287c920f6cbd0589ee8dcdb2911077a86a43b6 8224a168c3828123f7f28846e2576818be929804\nfd15ef81091e8a1a46007947eadb8f2a322775af a4b5be756b2b837ee1def467b9ccd25f5a6f1c50\nf6831f9c52f66ddb61b22172ca4bfb2d79c537a1 4cc346a086a369092cf2d284d2d7ad54ca866b4d\n5dda9cd8742ea956984f6ac327e1ce59b46f56f3 85b39b921b50e3d9d44f689f0740e036ef5e6dab\ndcab4e09241871238e3543e88342c9fe709d2f1b ba99185ba3bab2f19b592006d9555359d52fd556\nb4a2d2fc2684540333781b4c354a04b340935ffb 59096d658f611a32f5b3d77272824cc66e4079df\n401a71a8ad739d8f75df1ca09e8c8d04ea2b436f 10e7152ee6a77131a8f5e8a3c81242018eb20417\n1ebfae3ce29c5c875e0d360428e5e59bd47787f0 dad3f853d11b0c9ef5e1fb302cfc9e80c4eb4268\n65e998255206bd1f1d0991b508b2d197aae7f5fa 8ff70100bc64419a4d8a202e567fb55596fa31f2\nb93b1b08fa6328287cf025352d0a288d09ec0e94 191c2e237e3690f75b8e9139a38456955fb4f944\nb93526ab46deae65164bed2bf9a1192042d9c52a dde87bde743e3def30111f1379666892224538f3\na1645b268164889a9205b272301788336771a75a a71178ce8bab019742c6294f83352f6bf0819903\nf030a99078ff4651aab1c83cb5a622eff2a8818d 1d09a1422b53bfd25386705771104695af72e973\nbca460b6132c794b4532f738007b8f1e16046af8 cebf9afbc583987be1549bb6a7b4e2c4073695a1\n8dfa56e541d82415727160c1788701d50f947444 1f4041939b0d48d0786b8b2fff4aacb73216eb48\n36fdb100629ed324441103a57c041d35ce2f506d f9c97500f1bc3b866f93a4444b1f776270d09bc5\n7f8757c4ef9c79504016f0a66df6d980fe5a57ac 6f7ab66d41c3b5670aca447d0c126f785e2777df\n1173249f7707afe6179b3692b36e0239100ef59b 6e38a29b95d1720c595bd4afc44e8d25df7dbbc4\n48d7480e2216aa98fb202fd684666271eb21598b 63f33bd80658352224014ff5dd9e9c418f3eed0e\nfb4f0025e1fb4c3fef261d716296c9c6dd08ddab 11393efb276b1a007b89433c35f95caa09a66258\n700170029f7a4ee31ddcbd14107b8853bcd82c56 bdc19e8d735870a7c445cd757d05060430248d73\n4be0e7696787bee1fddfa0bfc95f0d633b223fb2 019c1eb97db0bc3e1ecad0102b2976bc38600c0b\n946bf89189925e45040d5004abdba87b36c71a5d b90b2a2869b6594f90cc7e92d0c251e385105153\n3673124f8c94e723fdb5b0d59da7226a2b09a49d 78627eb4158750b7c53cf5bc625d62ba22042a0a\n1c5c900bdd18b194639adf5fc127c2e9e61ee9f1 6e29e2fd2dd1fa6ae4d83288b62e3165be9cc4fb\n2bf7b4a27152c2f26e42e635e6fe2e7f15057ba3 b314c0fdf7d95f12958300fe2f09b8cbfff880c8\nfb985d0c17039c4024fda35bf6ed9f0793801761 dd1bd4a5a7ae6e3fdf63d7bf163f1d470f6b4663\naa86a3dda10aa17cc2be2b2ef9058d04c258b083 bd27403f837fe146f0322de93acca03cd4c3d992\n2adf90b926162847e15490a13d592cced76641bf c1080e15b46f99f02bbae89b142441e017a7b9ab\n72b2d02c222109f58ac2e14492aac41fdb3b1ddd 3f7bef2cf565070badd1d6bf497965529b702dab\ncdc37cb35dfb8c6d27ebbadcc1688478a8e65855 f71a577e6c5e256af91bddb8ac7a66ff42fb3687\nb65ae9120f02a9cd1cfd84d86151633e7f10b3bd 2a476eb8403ffabfa6e5c9087ae5c250e1006e14\n7686275e9252812ff3b9383e7cf4ff8d159f15df 43b1a7516d2ff253a7ff050746cc69638833a167\n230c862eefc3f41f31195c192a6ca7b502c38b68 f76093b1ab64572b91ab6d7f6bdd517bfc27ea34\n51021949ad8dfc10fd798531cd9cbf8a4d237369 a3783318359cb0ab3380e835c33f151e2c293345\ne624d797a0b8c0081c0d471aaf21c616b69c7227 870dbad46efcd41adad6c3cc7c8930e7b5a2eaea\nf21bc197ce8dd991843511ae7dd705343f2944f6 b272448ef37551bc57c89ec0799fbdf276a08de9\n8bbadc6d181224ba519b6ff46bda6fdce4f5334a 7879ceb9888bcc25ca168d0aaf7df3856e579437\n8fad87fe588227a2f1be02eedcef6ff7d3859754 655cb53e36103d9946a70dd7bfba381cb51ca3f6\nf7c5d6c5f7ec610455ba46b28642136dddfafe02 1fec022851c9d435b2b7f9088679cd5bcfe568f5\nf85c2149f4be5687b47a91049ff3f6593fda5fcc 32ce35c3db51d844551be9bd715adcff1276169c\na70060750ddfcc281bb335e572cb93479a558f02 022988867fae112453d506824b389b2c4e359f49\n9c6c24ea76c886513327d1789e80e9af6ecfdc1a fb98fd069e972377195760a4aedabea748b0d803\nc78bc7eba8f68875434c4f0afb2dd2d323ceb5a8 00bf24a842199493212a30e9d314533f759cd6a5\n681a4b85003ad2d8172724896795d69bdb051194 e665c3f1bd209e715d8737730ee5cb91c98d5db3\nf91e8d882f9324969a18750e1a5c9c5f38a8de94 32c1f3dc2958de3d6699b9d0a77b4250ae6a2ebd\n8caf57747a2e712080132c9fdc45f940a7184ec6 6e07d8ebb1dbe7d89a421624d66ca34f9243f14d\n65ab2a4958f87a9559cb839031dda2f490594392 a2e0869d3cc468e76165960a89b62c2ae5fc1acc\n1e07702e9230f9e333652cdcc9c2aba3d948c4d1 9cfd11828de72d524e2b546c24dcf7d2cbe02352\n950d308ec4ea537464708740a38b6242558973ef 2ffcd8dc7c8a715c47660ccc255d9087f9eeadb2\n72c61004721705f1be5343c656132016a29898ac ce399ef19fee4cc73b09024efd39dcdfa5c6afd3\nc084317bc47bcfc131035bd58ec41d84321178f3 93aadc428fd66a8b7d4a583f3dd873fc3cd0f637\n46ad08ee7466e98ad9bdbb3bed1f7b79aa6cc2a3 e80733b0c0bfb885f885b4c6785771456dcdb8bf\n69c9f5359c1ad5a0b4ae21efb3adeee4239d5214 4f213ebd08899efaeb53dea4cbfa67ef88f251d7\n338c48b3e4663b7b694bf345e9ae9a698acad608 1281279861bb883679fbbb859d7fa8f8124a4de7\n1d99c96d0c6233827f966cfcd136a85376eece50 5418ea94d984b35a9b2cfd224dbe814b95b6d564\nc82487a20e21519c995aae56cf80a45cc3f59942 94033fb4db4c7d74084cb5d10d2b77d4a9575bab\na4d8c5032c88e9c515d29cc6c2d44d8fd1223dcf 4651a6972d09411fff8946a39b51e3f669c8d9ab\nf2e9764a859c1dd64b913e798697e500d7e85ad3 0898c148d4606efb2dca2d1ad05d039014dec7b7\n6757b51580cce1dee82895ae3e8958200896bc0b 457814235cd2ff6d50f22f7719e14cef327d1635\na5a2db1e744ba15b50775a85b0f9f8a7dc5a250d e63c381f784b45f30a52c1d928a118e958205120\nba3e204952b729e96bffb347366fbf56a6cea458 2292411e093f5ccdf4b47acbbd21ffc63344d04d\n70b016ea96bcd6925cb020160dda3ba0b939faa5 82756d4bbce603c336e8258830cdce359e2049e7\na1bf902ffd821bd52fecd7c578e1eb65c8c36bab 1cbf4165b966cdcee46110b38be7a6d3539cf17f\ncc45aa2253382a3e6885dd5bf6a5c16a494566b1 4ff3966025b288dc44b3e4d74b7cf37cd22ea1bc\nbcb9c09f9c346c443ec5f4dcd3facc4caa530acf 065b662248d772eef9427ea23e15078e80144ce2\n9b831955d2a59d0e3ca9c614ee31d2d2a956e45a 741ae250e14d2baea7682310263ee47698ddf703\nc6e8aad71f0a74f5799c3a3bfc71f39e26571387 5604f8a3311e981fb1d1cc0408db573d32fbde43\n71aeeef2a5c32285eccd125a2e31b05f5c96ae72 00d00b8d35baf20917d43773fb188a2c3e48281f\n170312c44ae5012364867c6629a876706ccc952e 34a34931b2b0f305189b65c5e8397c942f5cfe0e\nc31a6ab6aa018fbe7187244b46074b254bd7c904 687d804005ed8ac1f4ce8972ba30705f54cf07ff\na035332c55d4c261246f86a5d57ca88329dc9ba6 9f72dde8765e404c91b49d03a2b7b3f1b7d6eb4f\n77bcaa4cc495143cfd4bf8ac869fde5111546353 04accaaaeee974c0f44f3e99234135787d12fa4a\n270fa24ada1db7daab0881e2457795d01c858c79 3443e08396d9e73baa263488db6871ae640fe2db\nf00003f18f44ba983a7b7546222cd9fae507cdcb ee4de8121f09daf8db5322ad18542d9f94bd15d5\n30cce552b871a0c7230ba0e43f7017b0f77db1ab 32f6ae9c40e4fb6a76a711f926fcabcd0ff4e35c\naa2075fe349f878354f0375d8747a271d908a623 40ce0c0b258a1df3476fb802c6bd946582a0d626\n006b54d105748fc2a03e7f27ca113b1c9562cdb0 4b178178d6075f5fc6fd8e8b85003131a1a83ad9\n92546448ec91d7e13f777f7bc6fa7e01b9cbd8f1 4832d2f2e689fb05fa06acfeab71507160e30f83\n08554c12e8c42676da8e921c128b9ab5b2d6dcfc 1539a95c8ba7c01c761fc510ad695187b43476ca\n22bab4dbb618e845a14286df7e10858c54b1b40a 5bb5761964aed76e9926b554cf3577e235f3a811\n37da4fcb3f7aa6a0f79a7ed6502e1bbfcdcf1965 e9060aa38f2a1d2d74ed752c5fbff44193fa157c\n11cd64041d1c2bfa9c19614e644e3bb043f28bbd b079b6f6ebb1027e18b2d6e5c9c22b722656d4a2\n50f1161ca75546e2f5ddfb998ea0fe6820ec9a2f 51ddffe7581465ac36ba0be54d0e81cb37c1f908\ndc5bfc22a8337169b221a9359c649702111d1649 c3c56a62c3de221dfefa2a7e8bde78706a17fd03\nb59d0561f4155a7425b0c858c8d4e983548f629f 0b8c43bf4b864f32557c93cc6adc9774d673f55a\n0a451cce41fbbdcbb824573c6996af8d791fc0a8 fd67e259d11844ee840b14e91e8078e16fd49750\nfa9763c2f83ee301d2d5ed3858fb5790c7df655f 38f0e5b05c7fd5c552b0f0ebbf9e8b8b03a58e08\n6db4c65c4c7fe47e1272dfcd5d6fbee584d6b3c7 c084c0d603d1667b990295784560409765a14d55\nab3a91bc211ff8ddec3491b00ab6ae49cee6385e 998574e702c098cd28564f3f55eaaab6febf0500\n80860310b07cfe5660d5207e981ce84410a103cc c84d11788345bbe9782df33d19eea45ebcfc4534\n1a5623374c4b577a85cbc99da9cf85df92298187 12803b532844e6132a2dc499424d6daab59da843\n65aff1ec679dcf97d4862d4c427058a6ad41c1ba 6ea1057e9fc788657430fb64b081e34641647341\nc5f24519304510dd561ecf3dc5bf4bbd2abd2d72 1c1999097ca1e12d4ca17f55e7832ea204a6e0b4\ndca3b92ef8d50b5ac4fae7769632ed6e7147368d e4ff9be2c410ccb4ea6e4fb9426bc1291ec7f78b\nbbf5778959eeaab8e0f847ede7c0214de0b857cb 2e12126fdb8367c291c5c9f277c7c033375ef149\nd492807e73778fcba91871ae3c17b781a0ace839 83a3324949733f58e4f3dfce8b736e71fe607612\naeea0081a3719cdea2e65ba8202a953c49279a2a f1d4f2cb3b5158b1cfd4bd12d2a9733f53524739\n910497e491b06a0ea7664a30a35e9bf3249c6852 df0070c4b367fec6d38bd89b5b94b84f72c1be83\n8d4dfad4062447d722a00020adfb7e77f902a632 427f0a537ec47f1aea2da30283cf5a1eeaed0b2e\n706712bbe9d86d20d892eba9944e399e24184044 51aa050ff38470eb955f2cfcab5822bbbef6b0bd\ne9336711a25203c32f866db8dc447d3861cb30fd e4d365efe28fdf4e54be157e6e5bf35b826eddb5\nd090d1e79b6e95577d6f1f7f327d785e8e45f9e1 38aae3e1a508f3397d365e3d0f6fdd2534beb77f\n040dd1f54b35c80517a0d08ff83c52d61eb95d75 f891c852d98b9bdac988e01708f9bf3703286629\ncdb8b692c97a77c314881492f7f365d66693bd41 e9bf4b27bdf34409da5164a6bc8c7c9a396d1425\n41e1f6c2e1d52ae09246f943099db59a79039df5 bfa38b61aa6f1b68d5822512da72610141d09f45\n1d90a225c8779ec4edcbfd2a21cef784bbccee64 67c9710d00c15fe63c49d92d36520ea53424940f\nb8fcdffd6ebed39a4cd14d459433b9291a1c6155 4c56855412bd237677eaf93710947c904112f5e2\neeb3494ddedab3490dc4d141cab935673e94457b b4143cc6ad6e75beac417f825e2f394947a56c81\nc8e8c71bab14f92886c8b2d2334aad21dbd0dacc d06fce65751869f9fc6909bda33a947dfeb18821\nff84953eb9c5a544ac93126c7fbfd783af5d619a 0783ced15aa2cad9697c12d140695d5d715a16b9\n8a184e18c76c1ac9e6da8c4acf5327a3539c438b 551ca7881ce6229ab3cf55dec49df54a2d87b54b\n6e1a5e8b82649fdd7ac67548a9ac96b8c07021e7 22e4220896018c6ed090e843b496aa1207e56884\n7de8ece4a9842103087500d0aea6e2dc0564da16 1eb9fadfb958a31d18935e7a7a64f559cd222e1a\n628a1e73c6452c9e671ad5688888dfa08c240b3d dcaece62db49df19631780c3f417f122ba2fc62a\nf1ef3e8934a5824ef539e317933c0a8fb28bb751 fb8077d74bbe03b1a0b33f9fe561d63cd50dd03a\n609d11619b4c91fff131dfd16776a72ad5e649c3 0d6942cdace4897dd04a65a536785043cdccc362\n993d4246cb13c865156ef14bb16d24342622acc1 065cfeacab165028705ade7c7a9ce9044cc92291\n994923405224ac223a87b8e08e42d95a963819e8 3b0863c8d8a74a1e0505c4aaefd5bc6e988a6e59\ne23d43e74171c802cb5036c2b35c82b4191c6d8a 79e5629d1df07bfc889e479c667010c0b35ddf1f\na8cced41a74b382bab2d6d31e28753c7554fcd4d 3d9bb90f434544d175a28b153f1918869e85e85c\neb7aacde520ff1e4be97395bd59f1ca594113f6b 80f102c36e11a26589dc5c205fd0b53e95450474\ne3b84a26147e60c7cb8b5d4e14ce67d5c41e2b9d fecc27ee99e5a42c4a702db6f47cd93d3b6c0091\n90564063be461fbc536d8585b1e7c6927dde3ef6 3d5058744fc3a05e602eb5183115df3fa1ce9cdd\ncdc0dda24981b88c8a8289f97dd1251d64efc4b9 708af369fb7b8310d762e0ad9626a243e641f66e\ne0cbd964e8c37653d9dffbb8714691611efbb241 577174fe818ac00bc3ba8d8158edc93adb48a48c\nb288c152231022d5f26a8be63c3e25aa4cc7a2fd 43015f9a7b5edde502588c41509903494427aadf\n7e73ec06f6f28ebd8f9990271412373959f31d51 2f9c70aa1ab0479ae1f1bfa14c7cf1b8c247c634\ndab789d2e6a855525d206405e79a408fb7e34942 106d527432dc0c65feaa241b91814eaf35a4bf49\nd52273083c5cc207ef55906467b2c6d5bc137bc5 d1cce076ea96144fe3e52adc97efb5d76fad0537\nc789ec9429513f39712bd0eb47b1c1c33a9255bf f47209e41de78deee350852ca18e62a2538246b9\na08b56b239f41c5775b8affe008100fdae741fcd 245bb6d9794913f1021cf6efd08805c66b0b0e28\n05ea6d26c130d3ee893357c592d4058d4cebe596 980d4d59b52c50d0e07c1ff25d2a0f55d8fc95a3\n43a7c01fba51954bb6d6d097f6197b34e2e65475 adcd7a5b52851fab2bbd399dd2e24d63f46d5914\nb6d204eec9ac2500b53c33757b9979a71c518fef d26ccb06b848feaa798b07da7cabb8d1a8ee0900\n8bc0de36cc549e8446addf5e18b726c699e05a43 e6cb88266d5c6589945093c09bb65c953b891a1c\n9fa69a41e99941c90734a01f85e03d2090914cb9 213d576784f1203e16a5f7330dc9ab6011fa7896\nf08200a98d16b9b9c4b5603a643fd07f9b4722b9 b61753ebf3f348715240a2e6eeb3f9702ce6c113\n2a1f3941dac3fcd5e3dbad2f9ccfd54531e5dd67 287e38048239449b0c8fbdaa6d3d6a4a6f0733ba\n6e996883cdd6a129e16e5b2f6f7de39e74a83fff 9e30b9af20d523c4a88ff9ec1eb19a8ee3f9c524\n210075648ddc3282eee018c5a503e4c28ef832b3 cd82edf86f4b5f04f237a9ec3ad9959a9b2aee5d\n5d7665ec454fd4cc4f2c237eb27acc954f4c80ff 43c42f7463e67f04c5fe6d4533b0b6623e23791f\n40df81ccc263c8babf79ab7bb2300ec0df4b2e29 faa90577946c7f3cb98105c579c732e4130d98aa\n6058c14bbf048bb1e21d92460341eb570c39840d 92935455a850676893597c5c9f97bdb14f5fa325\n400ce7a14a563339275f1f9ef547ae506e3f444e b8031a1db8bda2a7b6717a385291cb43f0c2579a\n3aafd562c7f268bbe3a58aa0a6175f2b3d43f106 833e67fb28811db4e2617f4d60bdaa8acd2cf265\nb9c098e9268cb28dcdb32648449303638b169780 0dfca8beae1ffa917a8cb2f3ebc3c45ec16c18b2\n5857eb451976faff72d94acb7491b053e4bd1710 70544aedb69f6c5df74f9c9ffe4d0f14b00d742d\na58403a3fab492ef01896a403db967edc548494d 9bf71033dc8adaf1b548e0ba41b9c30e4cb2507a\n836fc7a69b7e1c264c31e7a2b14ebbfbeb502b6b 29a27157244672fa19220a23e3fb52a50454427f\n82959a4061dd7ae758879ca91d62ae293dd8293f 45e0d221f629cc0a7b8d731030b4724c1586a50c\n5bbb5b4cedc74edb5eadf2b407cf37bd9df05ead 47f0197855978a90d9acff2f9f2a64f308f475ec\n509656f9611928f02879b23705b44dea8d1189d6 4b72b48fb709441cbda0b0b145454b516c7c7e88\n7d1e994cdd108a1d17fde8445e7b2c833ddef7c1 be3d939ef3183bbc94db158c7782eec61c75d66c\nea1a52aad4a03b508662d31dfaf25ab6636f3ffe 910bf59de21744f55a664605d7de6bb4890364b8\n32328eb05d8d286c623343ad7a25f46dd1c489b5 ec640f47567cc088f67a6f676e15dc3ab341798a\n1ed240d616df522a5dc5104de9b69eb0d268ffc7 9be5449a2fa520207316ddae4aa632fe61644bfc\n012b52438bc6c2716ea715ad82586fc41150ba45 fde00a99a41e80755307140a5320344d60b536a5\nffc72cc7bb43fe94bd9aa1e10800a03237f9ef53 280306c48ec900d938136b5ab16293188792f687\n371d833fb13c8ad13c04de0c702d26171c4d0ac1 80a739d32f7a4d030b540be112ddcb45fefb1840\n992e0369827d4445e280262a4f43f5ab215a6ddc c2b25c801a984767f645c087eb0df152655492a5\neb9e9f3efb9f966449771881d4372c54f4af752e 70dbafa8866af436ad04f93b375c16193299c41e\n006bf53df063f8e0dfa7f54c5001926fbe0516f5 2c94c04a6926ca09bc31dd62a70e0b09c0714b97\n351cd62b98695aeace2d9613897fcbcb1713cf35 0c7b2910466724a9bc723caae290d0396796f5c5\ndde6793bea2d30ecd569a24b28bf5eeb07c14592 ca9f77419e6c14d531d679aa40c38e1c3c2c90c2\n9758b6cbd2c6bba43b5851d6de21b95e108acfa8 f186eeea9f6c4b50aad48b7dc299ebdf668d4f88\n434f3ec82751b6c5ee0508a3a775685df1906851 2d60135dc9d90ed2e4944581328a11d56bfa01d7\n0a08d2b8db1d608ea18d4e319bc0095cd2b561e3 ee9c0f099c9a0577266bb7fc26c65b090c327d93\n20e552a12c647b632a6497e583dbb097dc3f2ef6 3c7dfb8abcf7e37670f6db5d395ef99654b575e4\n228a4f5e11eab47044ef9b1b6e84003f10cc1100 59e6cbe05af782ea0c4b116b3b4bba8865634cb8\n5e86c86ab4b26762d8068d62811a321d9f07bf73 5522307115afd776f1975417bb8651183615198a\na637e7ee298026dfd2b0b787dce8d978f269c464 782509fbaa591b283c22c3a120d259a1e755fbda\nc48597bda3479cd5eaa58ff68165cc6f8465a7a8 adbbf229341d43db14945e7966f8188f2c1fdebc\na482f8924f88498b8b288f9414e4f02a6c06af23 13db636227a1ab473acb684f9e90ac4522ce6607\nc3862627882f6b0fc4e9d42d38eb8de7318ba7ef 3620dc0040065b8a4d35360867b1fcea403c5571\ne199480407a6ce19af4a2da5d32bb1b33bc06300 26bd6d590100969117d91e87f1f5fa882968bb21\n9147c5d1ac26329717eb0ef59860075f32711053 a57f239a150e7e769367c3876a3007c7a1463043\n0201bffe9c940f04cdd6b8425693d35f6be8b264 2a091213a127a4a1aa901533de5a866342aa6366\na048d89b97e3b58f51a84c137e96d9ccc574da51 595300936ca5be8f80afe89eda02cada1ab98d21\n5c8f7a6305f66e3999eecc89124b573e3c00fb10 0e506a24e6043fba5fd5c27f8d079f23da99b37d\n0b40108bde6271f824180fba4cf6a2ddff0dc691 227ae7460d5c58ec77a73de71f058c2b21cfe4b8\ncce698a7ba259eeb01e2cd68320c1b9bebb8a47a 105d4babe4be31b2b1f9a4654ae24432878eac43\ndff1a5e5834e381dd162d30faec69924fbe02574 28f8761706c38948cadb4563579c235906ef2e06\nc136ffca31106e33905b2523b910b7fde88f0baf 46fa57d7262599dc861ca29b84c0ced3c488ee28\n93f8a929a9abac6b038e1a76db245b331680a5c6 99b907a97b7df5991646a9798659c486e64b4d39\n9b1f239ab0604d46a72b4a47a44459cbe00704c4 339c4e8c1026907f8770bf4ca37b42a15dbf4d2d\n2aa65219df5f540977cc8e94e1ed32d20fbad520 0860e07e27108a6b1ba1893db09779fe61feab12\n7d3298c8e2c3308113d5a57590966e16f6b7b8bd fa7c87fc276846ec0f45dde2c1473d4d75c21f19\n33aed8a5f3a0c74cf37dfd21714bb7a84e10c7f6 68c3c9f6c11543a94ffca04beea1178079734dbf\nb5eb1cf626d46a7e490b916b69c2ad3b31eb6202 4499f07873bbaf30fccc6b03249b43fb76f2a273\n70d716530fb035cb6b09f76dc17280c5d094056f 95dae8cb6337192240c8b5cf84f4c2f13c8802c4\n4aec3f8ee61bf89708610b3ce30b5598333fd3fc 06930f93281a940a342c39968461c4818fbeac35\ne9c2f4ac19ac633d1f50ad4c903bf8e541b999e5 3d1ea939a111f7f806188d9817a25ee6ced96790\ne4db5dcb3ad97c1ed51a0818d6172ea98749a705 fc40b9cf93e4e074664a64da1d91d42527f97ab6\ndaa9e8222f8640f4ddf1a734f67db64b0d902523 9cfef020892470d8badebc259f299595bf513d12\n68703558b390ee0b9780e1fae75ea8216a128077 0783d5a399f22693f35a58f15fd9e5f57e7c7bbd\n19c6f304e434648f522887243029bd14ffa91807 c6da798fd1297a03c5399b7e07c98c67a44eed40\nf37ad9ba3533d09bcbc469d0301b25ec5a707285 a6926378018e55803ee4258b065393f0d0a42e9b\n936f97c33240ae81a5f2a7e8276ee0378672766b 2c7b96d7cf16f215830fb2f607f830957aea4785\nad5ac9dfe8a4ca0c8edf09ce1ef59e638d41f0bb bbf67bf74f5517385ec043813bb12dcd6d5ceda7\nbe44b39a028e6badc8697c24de1c1f5cf463edc6 e6feecef237e2858723f92fab44fcdd1e36bd8e0\nfb3f0c549714bf3a0130e7e7d32c7f5f4a6c7a9b 835cb6829155351b61ce8346c7fba7bef6212910\ne279e5dcf92211d913d941940057da509afbbd85 d8d876173818f2c7973cca07e592885f3b50f5dc\nd8698c4e1698c92ac78616de2e58bc233fe5e174 c901a8655169dc2d8984a34e8d2eec6dd6dc69dc\nce1a162b03e198fe8007f53529ac122e85c94e41 19d82c9d1c55c943d2dd7ab6684af8a681506a29\nef92c9adf5063c508689677d092d59a83b6db043 49bf188deaea7d5ee2ffc1f71883d706a6c82839\n4a0ed21f4c08652d64b5cce925aa5f7621ab81e2 694ff168dd5085809c2902db5f6e850ddd506144\n9def823508030cafca1a11cbb18efe822fa162d6 19dcec88b1b9d4f004feac85bfcbd11f01b83134\nfada39841319d836c0f399f7d3532ccd4f34d131 65931fcf6564878170883135530c319f8d81eb64\n31f99d93439be8d04449ef292785fe6d1480dcce f7590675aed95071bdcbeb56e569baabd2b7d72e\n3a4990f232979b629a0d0cd2cc6642ce9b915e16 15d709f8933dac4c52821e5387bc89661d2a1548\n8731a3ab5966b1fb767eff4a311ffc6294589e0c d9c63f30bb2db88e4b849a588de1a317618b690d\nb2116e73998e6329bf576de124c59be4552679f6 e30ddd64580bcd5210b46a846fceae78cde03dc3\n6450f8e884622bd09359bb4308a135c09b4d78b4 952102de999e25625b9c363e11e7519a7f7cebe9\n15487f049ea5fd2e11b5e8178ac9913e85955083 d947d379380d1f88ac02fdddebb3db36a989cac6\n5b8a19816fbf2b9efa115d93b7d09d99e5f66b84 7d742cc42c18a3825cea6f8c5486a2c82c78756d\n5ea73c47ecf03a57cdfcede06cd8c831fe148182 1e7f353dc0e10bd89dd09a02f3eda0aa5d4e843f\nf12fd4813118501979cdfd6556633d5d50e56ae2 87dc432f624f9e94ed5191973f5ad545123628ce\n286483d26813c15e18b772662d4664ea94749fd0 ddd90e3380364e90b863f58ba18760e1bebce76c\n1429042bfcee0390f68d60d32e4e8d7300ed719f a344eac30681080cebf15e9b0f4c468b7d5b893b\nd184e903a554fab572ea99fe147990a08c45daf7 ec655847d9ca207fcbbcfc08ad57f64ba4a40fd2\nee80e900d9d4b2485c6d18b7b5e3238e7a3679c9 0477e290179b5c194a595e930c0042c39fc15025\n28d06a0bf32c4c90aafefe34fd00b457dec7505e 083f54891f2ea3688253722138f20b63bbbe7638\n37d8435b1e04a2ec8825d97bc89963cbad13577c 98b718ed46cfaa946b9a27a7c4dd80355a011523\n793f344e7ffd19e282312f39bfc2a1457eca4c47 caf72f848c5c82d7912bf7a6a052434ff3344601\n3e07708cb7af1d28e788841c442962a45994c9c0 c7ffed00c1eb4b182ff1398d7d7f5b71174ae5d9\nb01792cd413257106431b114365aa3cab7122f58 14a5b6648c63110c17e4a306c04b0d0283a070a2\na5deb6ce6f417a9cce65660bafbc8e5c0ddcb30e 90910d9f98784ec1a1fa3ddaf810da83d28c8a14\nf63655d072e1a7dbd72e7dbb1418f1dd758bc0de 1cc1e7e06ef0f61b05e718ba4f92ca46ff462596\n3dd18d4002f36fe6b1e86ed870deb0a45eb741de 235747c726f7aa96ca7552f3a12da767040b1a7c\n9406721c0eeef105bc0a2b0ae46488e2b2c36309 b2d7bcc8f3b8164c178f4ebe12772ea068e99f02\n8d6c8c84cbe95a1f96e4a16de72e39b5e1c08588 fe12eca9275e4341387f6a579c214184a5b73346\nc08a7a93f1e011935c890752f865ce4164e53a40 dd21ab2125e606cc802c6dd5996436736760dc12\n44d23a78f2301043ad4bd61b0888c78d301b75bf d14439c354ee3d57a1e06c17ef655dea5be6f9eb\ndffb10ebdd909e2ce78d35f6b9b2e9fd20446cc7 da9735d40579f7c02674f0a535dc2808f16b4cff\n53914014deb0a077a910b0dd6adc009e51f82827 5937fb519379c268eb9928e748eea2fa735cda1a\ne69f2d3c949be268809aa380de793885957393aa 206ff20dd874f31a775440e826ded7c7c9edb4f0\n16c2b2575df35b34af4b8514f8860fbbad842a38 ab3a9b00dcbf94cee2da60de722406c41a88c13d\nbe7a29d73f4a9f096cf0a41b787bc0c8ebf903aa 307985f19a8292b729cb04774dfa2e0d3a22d03c\n2b91ea445bfdb7adddab6424e4e3e45aa5527e61 77e0283a0d65a67a9d13e1d38c7e6427c2970c97\nd4ddd579918c1b7b93d0d8cca56fe055f39ffea8 90d316428a3e732b5b09ff4b7cd2e3e26bcbd694\na090d761647c8d1933cad458e4af59dbbecf65ba 1a8e3e8aa8e9e3941a90d9aad73fe822a44eac3b\n1826340df2cab84353d0b64a01ffd44f62b402fd e64b64d6cd83eff5f605ed81cc2d2107d5cba9e5\nc8bbd41f6c0f6c9b34bf3f2f4d4a41b0a2c9bc33 162627602f67c3f313b19b647a8e6eb1d24d35e8\n65bb54951780b1a2ae06403c9770e860349aae65 57a2b2617e579ccd1c3c401bdd165731ce2554f6\n8f4dbd578ef05d9656509828a1610eee43c5d6e0 53156bbb9a38306860f72eeb4457463462ddc92b\n05a308e52ae6a2f0c91d3d8db429b89e95708a1d c5cfc4e963713247ade8c00666695dda5502d3f7\n30cbdf1287e20326ef3c28e5664d9700aa8b6d17 e509fb83f0a4b4a6033434dfeb884ea49367151d\n7990ddb14885d3dc6d8272d1b69ff34bbb185312 66d0b0418f88cb75f2eff7004b351d144c46bb34\n971dff491652cc3b412bda4b773845de631f14db e11cc5d772be83e13458bd95192fb0dfb4c8f73c\nc5df9798dda28a90a2225e617c14e39cd2295f6e 2b42e0a558e09940d054f161b7d2fcb50e741157\naf42c99e8781648d80d4497f0f7f7928fdc7a04b 8afec3b535b67ed52bfe7a34cd2082a707ce18ab\n82fbaa0f6cf526b9ddb496c14433108ec089f980 13532e9ad6a95547eabbf271fd2facdd2e6e6b85\n0f2b14c71257ae963ea1d61836b42d2f439317b9 9ab197c46c4930593d0fd86008b948f431e4493a\n4816bc5afe44eee12c291431fb8f7d658da07a9d 23079d8ec3c1f2ebbec36dbb623a2035439232a8\n47dd6e99fd493cfd4c350837d0267592f32dbf89 15a100d55401880ffa86defc92f9def9057af996\n1685e60191b43aede4e6cfeb745ad8258fe16569 c19bcc2a7114e439c49d07b80a93bb0f0ebb1dbb\n119afd1b094943de3111c200b38806470833b20a 227d76d8b23f0bf0f7485a54c7d34e343aa18eed\n77342000c0c9faa234a6e848511a87510ebaeb70 1691be9ba883c92f95b9b9df425d6f88544e4af8\nee63d2e58c1e788be29ac08781e0d390f1bd9545 26aee432e60fdaf7009f41dab43a2d364c01acd0\n1fa291e6790825290c4a3f66fec29a075df65e3c 00a2fdebda15ee8ac569c553d8ff7b410f3c537c\n1d67d204f16d1687de69802421b7d9d40cb93d60 7853bdc50f7beef06791fd2e721f0eadbe6d4bd7\nf7e2de1e0cd84a72ffe37f92ea20bbbe8d997ad8 fca98a3bd7c8d99f19da41c0206dcca43100f7aa\n52a337c44d1c43de598760d24f75779411d4ad66 71f98ff667a05a7b5eacae7780da9b636e462866\n4f06cb27710e3b571a4c8932ff2ba1fdefe6baf2 bc72d86f459b429ff8f3d09f52aa1f8278da3aea\ne57fed3f220830a26e898a53a523e1f248ee241b ad2d86de9f27c52b1031f63ef7d2b3acb70f37ba\n2fc0ff0900f17a505a8fdb6eb1b6ef7a65fe3f85 b22e3f5159b20b2873a0247fab7ff494b5c7660b\na6dc167a1d9b3e92babc2b32e9d21ef9618cde60 57f35868a86b5356f1c806ef05579e78abcf082b\n846d71b325e23db8945704199d197bf37591ba15 9bb78b7ecf985162eb0303d5ae7d924ec974665e\n0d3c03fdba02d6ca7b27b2b9699539c7b61c3f58 0bd2a3998fc8cb980806a162e85b3d46015d5f8e\n2697fddef1955183fd4f528afd0c9e4b947deae5 fc9d4514cd946b2df3d56c56e415dac809f45a22\nfa22779721e9f3c59fe054370c3350d703433e91 75f3066cb79b67924295793b5d9e3dd6ea57a89b\n66da4ba7887355b3c6027020dd78242ee20f532a e866174026a6d2783166804986371786ba85c2a1\n12ea7e55ab650c5dc0749e0f1415dcf8ef37f4b9 2b4e7f443390352a246ed1cc07ce086a89bab7f5\n8180145c5a5d600422d49d5f8fcc97c1164726fb 10c55a346fe0436291ae0fbfe631d0b17b29c6f3\n711ed0de9b78e359ee9fcb24fe5a247e250dbb53 b49de04fcd2915127ef809950cf2ba3186af2fa1\nbdd96241bc79dfe1a36081c74b445ea038f317c2 8f9b39e249381e27da8bf9d704c5d7c3da734e11\nd1912a4642b2401e073461c00d53b8bc3b5dd446 096d161e9e25ea68db7fa7b66fcb01b99c408cda\n29fcf4853ce8e6505e021582f8241f123f34b96e 1bef1632255b9648f8b994e31eeeef56074daba3\n4611ba19ffcc355a656b678212d718cc710e1ce8 a0582568afec637677c981df4bbe6b9dab6bf2e7\ne833829867da4bc2f956cd45be4e4194504276cd ff1159b83505c24508a3c7592ae36ec2da13aecd\n49077607dafced190520bf40a589bf5a05f08da3 094cbfe1b7a2258f9d5b0d3d6c30e5efd566b0ee\n7e4b938953449748f7246907f935fc76a2191a36 8536d124b296bb0a88b661b25f042ddaf4445fb6\n3adfd8653a02f081aa7bc275fc0eb4562c94c74d 7944c47173357a24eab0b1cfaa58d9e6ebe25c01\n989908dde06243905e77a77cbf346e0870b42077 d2c1219b8f18838449debd181d1fb536356dd9c1\nf98daa0da44335ac4049eaaeeb496482fa0ea336 0404fc43665f02da1ea6db8a439cdd3689cd6655\n88e5a27da5c48ee6c2561339b9558988ec0b122b 91645855040c13a1c39fc2798834e9812b0516f0\n5ebfb2717b5d4cd9520e90b1d5bb19ca9df25cdb 3a9aa7d0163a53a6db5440ce71f52db224e9d8fd\n82147cae907023d2899d749453157b62abf28d91 931f70a4d05a733dc1e0501eb667b0712b2bf503\n6571517906428fe45d252ee19378659cfb170919 d1c92f12e02a34190e9a873c28279229187a98c6\n1a3b43bb2884c9120d21c6857490ce3671838357 0ad3c1753dbbf065553d2162365a7073b2d399e3\nc9ac153771f66e797db2c8c011638e32435b0397 e7b40ea36eb534bb79d520933efa275bf91917c0\nbbf6f594fc466296ae52bce8e2d0c45db287b1c7 cbc16cc01661e34576496977264c3fad000a79aa\n3c1723568ecd304bcf140615418dffbdf4053f35 c549c0f16cff9b802dccfaba2f22d9952339f54b\n5aaf4698787dcafce9ae333c8cee928bda1327dc e9f01da2af57959f65d7ef5e8e20623264afe7b1\n03b0c4e2a6c41a996e37e15493029b2e720f3e14 82951e2ef96180729eb6a764a47c63724a68e60d\na17a42813148f73c487638d8e104bbfb557667a6 be8e8c7dbcdc397a000270b69b0997c62e0fcfc3\n679f33ecebbbebe74d1f71549fb177e0c6bdc719 8ec628c7145dbdc644bce2c47536fa77d892a312\n7d9a006a214fe4b5bec77bc8a1408eebda93fc96 38a94978534f259eb78326420636968f308e5986\n330c128f4f21ea97d4e8b8480df9eb80da06b905 7a22cbbcc0cf416ae3e32f336e2ced7ec173d795\n28ea4aeb525987882e2c2cf8e8d89e3b8ac6dd51 020da2d1584a0233cedd78fa51ee673f4fb09ca7\n2bb2882b7ffbe654e37b5a2417db748aa0823ae7 e51087de05cd55bd0576862274bfc965efe22f11\n3a69c064d11b6340bdd3a13998ebb047e6cfa57e afdf94912b3d3a470a4e30a49213e4815ef1c335\n26440e5ae7430c250b478077b7ec2ab10c7a1392 215f19fb0ae5237e29559c119caa3bac937be567\nd14457c4670f0c280a1fcd883a31256ef8c644a5 133fe2be85a69017d5da6ab5788c7d4a379e2a17\n7354dcac7debdc7dbf37a05c4bcb571a775674c8 8b381e5fbc296806bbe054f7ae8db06ed06344eb\n377bab7acb54004ffb406bead2b6ed893c355232 8e1eae71155eecb33f69babf39c364cd4c4a93e9\n149cd99933053436ead8107084ffc7400ee061ce e1123f879d1702f00043d9b76d6439f56d3e71aa\nf99da534bf92e0a59eeeb0b0f879efe1e49bd398 9ad23b7e6901526354efd344820c7e3f51c862bf\neaac569bdc938ccb791f75acf77649035be6556b 6df179bd4695c3733b7f32e87f9b66dcb3a0c92c\n7280ac69bd887fd85341763aa4724d35fc2be452 8b98af696d49f3ccd4b5969275328132ff0c0bdf\neff056f3fbd133a35cf0ce2fd48f60fb51a47bbc b3dc2962532f3ab86453e4a18ffe719316ffa376\nbadea814f1f1f1a220b39633a28e02f1047a8831 115853e01edf5ba0c678ec1d4e55d5969464aef8\n84c50c7396da470941a3a6523b458c59967408aa 225e58bad1ac20105bf47e0b6961d04e17dfbf75\nbde5a0399d5c5cc2786b7aca708aba339c7a685e 631a119657490ed2712ad4714527d98ccff3bedc\n4f4371efbad7e5e80017f12b32112e9305a7ff92 c73c08d3aad32ca6603c8d2905d95c36871b42f4\n44c844286627b8b3f1dbe9ce7eb71be57e4b8560 d7cb445c0307cd4bc469af5d266b78c22f70fe4e\n89c293c421fdbcd0a8c5ce4bd779a0fc3e8ade92 ba60627f40a28b1099538b603aba6c2e80ed1534\nd5566ed35e3cd78beb8208bc3ba75817868dcb3a c1a2c5b0278fdadb64f8b8f86931492192629483\n8a4246892370fc44278f351ffdce1e866d9fcca1 ac80b8365dc9f3ce0d3a993c135884c17f53725a\n716718fea5d141aa0ae6b767f3dca2e17943db31 228737ca7f670ed7e21e3ab510575d12a47655f8\n80ccc913b97604c05269b4276a9d5ce56df2a7dd ab59aa3f9b9a2f2115339f24a1b47a7c0bea24eb\nca6802bea9250d6c669491a4046ed1498070df60 787bea759843fb6607f02223b2a81b1c80074bdf\nbe14dd546729bc9d78fe0ca28d60620ba89619f2 0940858a0fe771d8be559cf0f58ea8371a8f8d84\n15341cb9ba252b7df483228220b9b3e76f3b3b2e 6fd7fe41e3feee89171e666593c28211dbce66a6\nb766133119f265c61b46c50d36c32617b01061ce 529030f15382baa4d88ac2fab64f2086ce2a52f1\n2cf82fd0c56b3eae83df87f3e600427681571308 f3abb059d1b9736d02220802e1576149f20d9f37\n9f53138f96f04aedf2bea6d64f94f7b4b14eb30e 7c7e0e773c67a761c77385700a3c11366bec6148\n5f59ae1595ac10e7d3fb3ef9d3d229d00192c2db 9280836293b2108f82a27c8aff95a1192236e949\n1bf9d98983fa51b53d385a80ec4f3bf2a08b96e7 2e23996bde88820c5e0858783a954d0b5796dd00\n160d38b7d0d95b8df767b9b89960e9afa052c074 9089916802bae7b6986f2b8fddb947563c775a8b\n820a9ddfe1fdbe39ae99c84d1cbb22eadfb311e9 b403e612f07aaf8d379418ba405a5ed34df8483f\na67d368c897dd4d54f5ba77486ed95bcb2423c59 1741617730db2247525b6450164692d3aca179af\n224ba93ae327c26129e2ee2e52e57c325410bcfc 5223c1833b53fabf89654455e6cc02392ba72db2\nba51f4706ddda4aa2662489256b7bde6ad41a8b6 58ff2fd543378b22f717b7c60f0cdcaa5f34600c\n8675cba62fffe63581de4a7a1fe070b69cbdbdfe 3fe4e82d6667fd93094089cfa5bcc7682017eda7\ndb4243d131cb15e02208a4c3c6e1fa4e43b5f256 192f80a2bb680fd3572b7bd3af9677ce0c0833ac\n3673acc9fa2aefc7091b318fbf634b35160e2bcc e78cfc7a1e7cc59e5ed0d913d2d2263b06d60fd6\n9b0ca0a3981a91aea90998179b061bace8d2ab76 7347ece9177155ecc23ec271531b0f6ff7e59c44\nf90ba5c84ac987dd45bc4e551a44a57ae9814f34 c215a188e680c80861318d7317949eb9fcf31a8c\ncc1fa1573caa041d23785319fb722b7113031e9d dc65359eefa9a3e5a310c976055adefba26323be\n6de0f2c6c6008509c67bda91b92bd73934f95943 0694139e17cbef7f0992d38929999b64c5a76b7a\na3a49fe52e20955251dee180cd8b7dcb2d508dd4 45a4de5720aca399836f91a77f9cfe4f10dec0e1\n9fa40ed529d0050fa2320f62b0fb3cf2b93703c8 ed69c47fe9e7d97452d6fc8b40aaa57652f5ad51\nb70826bb254a7509601b7c6e088fb5fd17f7029f 02bb12a90a21f6f91b3a6c34ada0159d39e1a7a8\nee52c53512f108d82c083023434ed90567d9e556 85d4b371e46f57036a30d09e5c5ef2ab81451f67\n854e3bce68b71f15ce6dcaf8c132d1616c390daf 4aa38afbf6aefc322c0a287348259879dda8ed81\nbab65606878248d739b19952df5f4f2811a05e9b d56e8087579fbaa8755ea2dc6f90e7476ded3d17\nec39bf9144cd2a4b7f0a244e2603e7949085b1e0 281a5c1b70df500f6831aadf993e3c5da22ee9fd\nc1f1277dea5820cf6ca3daeee7ea6e0159b7b47f c11a6210a6bb4bf304ed2a74cef8bcb23f5fa0d2\n8f39f02427b13c3882d2bef0db04edc9e1eb00b3 a155bc17af02d9d8b69b2bb207feb763c13c11fd\n6baf25d09bc5459ba8c0bdb194d42a02867581d9 f4edc0eb3becc4d014ee96d71cbbfb42b261da55\na0841ff82a9cfa451853a440640cdb9ee3c66a97 18bfed61b1a544c8fc9fa3e180786615eb8584b8\nb997c573bd05d6046558d05dc10a25e30358ad50 698f439612dbb272206e0200791cd18c6fea467e\n8d9e0373c15a1975d928bbbf382e9ff3bdfbf7e4 dca8cce89fbbd645b3712ceaaf24331fe499b830\nffc10c32e26324c3b4bbe19d60e7af12d2767e8f c6ead91a2793ec8ed43deec33e4e8ed5ee1b9d75\n94b73c546f2cdc8edfd574929801d323386ff64d 1a2a6e604c1c7377afcf736d68b1588a4b49bcf3\n6170fab1b745edbd27bc173f2689984fdf4cec1a 6728a641638c570588b29afdfa1e9b671e9c9aa1\n4ba206d630264ce57930cf8007e093af0318cd43 46773c92529825022e463a69f96596d4b4e9494d\n67f20a95a55ccdd97f856c4e9462cb96338aaf40 642d857b24774e59c3188088df9201ec4fcfcc17\n70c86246bba1e7a6903e470f181b0a860b0b855f 18ea891404c5dd120f5ee7de920152aef61ff5d6\n408f15c44eef4a5ac3a1e2d7d10f2182fcbc961e ea57acbc4992ed0b87f6e9e40df00bdbec2d5336\n80ee4f93ba72d0b706b132671cf573b700163ab9 f86c1d886a8fad6ed4e2d9db845f08d02a27bee4\na1e76af7f2af2b02f2ad554a40cbb8b938178f82 d9492f455ebbcf1977c4d1def8021f9e755363d2\n32c847d96e3aef4de117e149c4bc96b8adbfe229 dc1d92bb54969194f01c539aa6277154fd33ca7c\ne026e219500d59a0d4cded9e2f7736e73b85a324 7c7be85765000bd610d6b92481f3fb09337424fb\n31a685e2d6faf9e7736eedae539ab60626fbdc87 e12231138a980f2d1b50f996123207bacc01bed6\nba4ac6c9e9d5d71e7b5f0332bb035f202733ee88 11b8fbb464fa8186098be41f0d67720b1c43540e\n8bc32ffff325d52223cbb48764ed32666a5e53fd 9a13241d121d8fb66aadb573fa3f8342cd72e4da\n951b1574ecca8c2263c60fc32540bd8a39d23524 531ca2b0a503bcabb4cff11b244596a62e0c43de\n3fdc06c8540b8110cde743157fb0ae2fa3abce45 191b78a8663c8627d5556e1ef462f60b6f2a0148\n82fa161a60fbd0fe9f71b4d561e1fc35d7e0cd22 b5a9f665262cfbe500fb2085feb842eb1d3144b9\n0484a2bea1e28081478564d046654decb2216cd6 c4035dbcd5bb31f1b87d2f80d1a42a3bec3ca2a8\n44e9e4a28dcd3af416751039f79e84b8c73a3c0f 96ad96fe6a7a651a7652d324c6715f4e93969945\ndf7eba245a7668ce4bbbe11670eec6890aa95edb efc6f84017e37d5e442e8854b4cb7f5afca71c59\n6cdb14300e64f06310847d5aea0b45428753b61f ff81f2c2dc79b8fe457c9bb4482efe544e234181\n9644566b76f808f9ef4d7d19f3da6801554780a4 4ebd19ea3961d2747184e771a0bb159bc1cbcc21\n6451e2a0ef155d0986fd498f13b921574c5ca45f 01e69d745c92efc6ba01ab3b02846e29834873d6\n6c961b58fd37f7f8a2f8e0b096e78c50eb0faea4 0fd880f7956c0d3d3811205d48df6ffc50f6bfd1\n6819ffbb857cc6614601a1fdd8e27b77c6b80039 50e9bb9699a5417071d49cb0446584bb9e4f1c09\nb4dc095b72cee516328c9748284c8847556c2742 3ab74f21c9503a5b6dcc879b1c408b901ad5c14c\ndab69d417a712b1efccccf091319e81cc8121bc1 f233d5ec0b4259c2317352161d1d5d9e5aeebb95\n25b6ad2c26f6a34f89f28d3a56a4cbf542d194f1 aea3db0256110c672a4e3b96d326494692f926e1\nb61605052e227246cc28ef32f856c4a2f58b71ee f7afd7f40ecd4cdaf8e594e43c5bd8114540a888\nc3469c7aefcd3fc2076c17e454c8f55e3e63d3f1 1f1add80b94cc62d25e4179b46cea003bc85c276\ned4f8b469b051ea99c0eb715264f4fdd07d0e97a 27d852ff651641ac30d9d37349248f4b59deae7b\n772ad957143eda2fe1f80deece6c730fdd66adaa 09bccc75bc80100f2c9cd23719abb1094e999637\n3d7a60ad4a752450f9add5a4944e111ef12edd67 cda4d56b44f0bcf9d76e348e4cf9c32a34193320\ncbf28964985c1669c5f19397ccf3336e174bb571 e88e40942efb671c232a91a640fedbf85c020e4d\n6263b9b59b4eef414f95434eb9cff77755611be1 00b63bb5a921a65ecf83f27548506638129152a0\nf59bf5e8e4cb4751fbaee7c5dd690a6e758164fd 6942ea9294301a1b0f93131ea6fc0beb16aec787\n0b000d54cfe2989d4b09f07464e63b7ecb78f374 9790208fdbc1f0f774d33eac9251380529690aca\n941b1d71294630eca1ad6ee4aa9c4c33ed4107b3 ec1af1e11e5f601efe1416b29a99c7236552995e\n02a344d0e6dfecc4335f567341efdc68765f13cc 5b2318f2be5e5c94d16c21d71097293fae4f3e50\necf70f20c7e5c435eefc88bed7172578a90ff267 e5d7408db6fe65c335f129bcd53a90076c920dcc\nf5926e62f78822e4c1c427aff3970d4564e8a352 c56e43f343324bbc6046099e5d3388b98c112554\n573f7d031e3b847b678c4f891df3106a59f8fda5 4dd15d0a0f05b4d517b62e502dd723bdbab3bb3d\ne7e48cdd92fce8e7a5ce532d409718817d50303c 711c54f66be7c4ed62cd887f847d19450400a8cc\n1cc194c6130a9eda62eedbb8ddac28b485f258cf b9ac199cc933658741b3780f966c43674558fa78\n6a76243bce1c2e27151657d39a0a80472b9a1cf5 ef4b44e7eca77dd30af2279adce07e5e510e696d\n8217319eee3ac6e60fcc46d79e4aa3bd6f46854c b51a4dfa89090c0c9e44d738d5c3bd7de6f69380\nfa53b7b64bcd32ae1982eadb68781641227d15a8 b4c1e8838c6087c90374ecd84e9b9d861ae0cc2c\n349efa762a61bedcf0273871579e805c50a0e47a 581d62b50a6add3c1f9a51ba890f2f8bd488d510\nbf30dbb2988d57ac3d9fd0b9880296c35b7e6a2e 35e6f776a00910609f0e984dc6cf8f7add5b0634\n8fd130821c83af16129edb14f4202b6bfd16e766 36c320ad743bc8b0d2571eddc03d8f6be098ba7a\ne393f26b6b99f7fb8bfd5eb543e33c13e6c1a227 b2746754929013c3a2b5311c5c214c147dd1aefa\nf1e6fd3a809f33b1b69efaf3409974c8ff04f139 e303dc00abdfc884e9dd05f566a0d05c5afba465\n9f7c3d7f2411e20f4d0da79783c0a186f560bbb2 ec974425a7b19fe219e3c040c57330e809f22819\n5d8e8906317296169f74afa8a177e42e3a3cdc9d a104befd1529e2c78e992b96ec1884b009c2772b\n91ee084f1173a2d2b73b089aa6bf9433867b69af fdc28a425f1f9c82895fa0cadfb2be8c2edb3f09\n78b5b102f681ce6a91487c54e684d943bcccf8ea f5e66c20e4b387b4d4ea40a2be41fc637e4ad882\n92e2c9e4a73fa3ba2ffd4ce1c571fd61d1de9002 9fb4bdde76fbd24df1d496a332e630de77201d7d\n9d52ac252e8e0848ce2b8a7244936620699deff9 de3b8271fc5a63ad67e42c1417908541dc3a0b46\ne7d8dd0b1c22774b7bad82a944082200d140ee1f 2a088c856712df7910c2565d327da441247d894d\n35a1739ebdfff51766acb1cf7a93064c30a541d5 a0dee2b8ca0e3a1b99f87852c2ea6e6b557ad540\n73af653b473490c3b3750df60803182e95b605fd 7a4b98d735442023f9f2347484fe928c888ecb75\n7d043585bf41f5fe9d00658e28786274312ee766 350da89452b2d35a9a6c3e3acee54d6aa02d241f\n417106027c18bab1747f17b3d80d2006b1c12fbb c0637b8fd2717c55b35b9e26732a9215f2983f59\n02652d6d454308d7a364d015731d5790778a5f97 738961c532aad09b6e8568aea827112e997e1ef8\n7155f6046e1744373c0a51a8cd41bb613420754a 1f28098a1ecb8eb0a67528660988ee1c53354f29\na90d3f64342facc559a70515f7003683a7059219 06575534caceb5d882ee80db81ac86abd0d80101\nbbb2395fc37bbf6df9c87f364a63bb474cf43a0d a8f3fb31d7596b71800c0e444e3f80fe86770621\nbc0bc9550fa2b9303f91dd7d1055453da870be69 b05ddcd2d026dd7afc5c48cb6cca53674a6d4703\n306b1dd7c80805fc8bbfdaeb9fd549dd250a9602 7d75fa728534365679dde8f6109fba46a5c1883e\nad844425ebb417cfb9437f70eeed317e20f1ed63 5c70f5f96097494ef96dac1bafe8fc7107bbe540\n8101387cf37de1ee232c7972279ae87f9601db62 abd2a9d69b91b1558f971f8fe61d60daaa6433e5\nd983ed45aa8ad2bb6a1e41a27aa77d11c5025200 82e3bd19f1fa9169450b990378724a01315b10b5\n3d1929246c6852fc9e73721834ab0e2e4d2f8967 d3bf7738bdf27c0d90022f9a6f9ecb2b882e442a\n4be00929ef46881cd2fb0425100881746605d307 e8660863247a6920966cb4628e2a413387581a1d\n45875151140972cf057da32968122bc4c7d9d502 eb8c70b3b0081eb9ece39582d0c4cf9459a484d0\n726cbfb91da983b378a1a1a644a1fd0683ec67d3 30275809d5d0bf688f8e2aa6a8f32e2958b45861\n7233c49eb5c82329d7a91bcb46498ad37648df46 f5aa43e7d1128ad96e9b9b4fbbb72f2c669553c2\n3aa0b47958dff67d80463efb5bdf829ae11141bb bea14fcfff8ce074d7ec848f1a06c09ec0e6ae28\n7a6260f4f148663d423affb98520fea1d07b6717 873f53aee9b8f84a8d41ce9d0613b69eaaae2dd3\ne3646e11ef86367dc9be55b428c675c023a70868 e0f39b03b7c36e5b3c01d91b60ba658f94de8e98\n2333334eaaa87d0d8bdb0ff172c16321ec415250 e717306b891d9e772f1261394cd0da8551ce0d18\na6f0133e6d79e1487a060f7b7c251b4be73ca59e 01db0b09ef6c860ac0781af7f3791190da26bc6c\n02bcfb1af36de20c637c7b01c72525616fbf40d7 eba901a2da48d26315c6d75ae7960efa0b66cf09\n6551d02ab4bb5ee43ef867634a624f256fb41b1e 42abbfb980d3197f799e6c9ea4384a3e0a317acc\nbecd98d77b4517ca5b8f1e4bab3ca6a1bffc1a67 575969ac86e01823d1c7ac82ec091dafd993d004\n08f21c6cd217a74937f747e9eaf7d42ac92d5e4d dea64834af27e4ef3301cecd1c971fcf662686d4\ncbec9db55c5ebdff6e306c78d980296262552e21 17f1e30ea46c5fd53a44efe6288380b818a59b8f\nf92246d96eb2aa6562fd93de688980f97a85c949 b054ecaa91468350147b96b52ce374248f683fd8\nc4b99f28d68461c51f9e758e392d421733fdf4a5 03d68389abb22d93db4a2553e5050be115e1ea33\nbb98c4fe6720efef178ed30d87db1aec8e59bba3 c6e9c16da9cce5f7a67fdb33aa8239478dad02cb\n75a5b04b437695f71436f1deaa2d1336c07b2603 6336ec6d42f7fee03957008215380674a17a599a\n0561b6fb061cbc1335064265808685e443d350ff 89e3025e1a12996b2bb3c411b03076bd4dec7977\ne832b750db96e4fc9576bd05103aaf456fcf089e acd19d42f33529117e02a39c8bacfc37a3cce980\n2414fb31c3708d59f394896fd7b20980be28022e 5f5fcac43aa625145286c9d64961243c5008e84d\n2c16f99eacefd71dc66b274f3656c3300c809b6f 03c582beb3243dffa4367c989245830784b581af\n33cf903e4ee5fcdd3d1c69f18a0e30be932e48bb b94d5b2410e9f9e62a0caca840bd10427a1304cf\nb21be005a894d04d6a58d0fdb3091138e3bd3c11 404de7a82baa513f76246bfbfec72956a54426f0\n51234f652e67c439f01387d66b6eecfe27bec256 8c752e556d7f2826c0f64d6fe2247893cd8fb0fe\n001da5d05b9c1944813f5e9c6cf588adcfcda047 d3a532c2401d12df5956ec4185a05618981179ea\nb2a7ea042a648d1c5918ff7dad98123595dd53a5 3e2d0faf76ae0a077203aa139b0da3ccc52231a3\n5a9a135aaa96687aa4ad062e7652b918f635f7dc e676280d2289c054b417169db4c71424df16f3fa\nf4d83264831be84ed9e7da0a4b5192f0593d8994 f816924de862b749b2ff765f0f21009a34f71102\n59d5c2c0c47ceafd739ba7b0ce3069cd1db5cc05 dd3b3c9d7326c645ec7726a6ec18028b43f8d495\n507fff009c4fe8e8f05f90fb9bab78e1096e9168 18e4c0320b9450757117f5e58b40056d2f6faa78\n81972180a903c5de912daa88a1f99e0fcf957df8 f6ad6823f5cf91a913e675239341065993ed88b7\n4524420e0c1902f26c8a964df542ae3cb687488b 434865eee63656acffb2987e1a0377b4f3984eac\nee4b4ce4a3440636dcac7f2137254596bdd50c75 f24614352189d2938d0070339d5f4d6e80663316\n9316702333ea1ccc9701dcf3d7b8e11166984d0a e6b68331086e60f852b87dfdbb5597e07c44cbd3\nf561e36c8342b76743d7a0a0530b38b0e2677faa 34115e28077a65f10f636d15751165c3faeef002\n8d2e598579438eb10004fceb93efbf55c5759b21 7ce16dd7650f3eb5d0eda8f3ec2021437ab492fa\n5e75653fe024b8b85f095357df8395cd35960272 30960f5513cc204d161ffdf381cdac99f1ec6d80\n9a4845b5e5bf6f4d06b322d4d0dfa5fd8ceaadae 6a14b75fa7b4331dae10c77435bbcdbd91baf726\n9b5193bfd5c87744b28956a5b9793571fd9f30e0 95936c0c4a3557fc781030554c34d45129667536\nb53bfb0aeabd6b24bef67ce35724118b87accf5b 8ac0fc2d8c79896d0d7218d5ebcb2f99365de16e\ndd6d0f49d2a6c3bd10e693c69812232c990989fd 96c47690fff50781ca3411a89a148d74f35ea278\n8c7471a541ab4431e63f701b6b6ece70d55e24f1 5995f1f88cc1b02c3cfc03a3b4065c1cfbd2c90b\ncee435a4a909e4cfa72568a7c7757c527b73deae 11583aace8ec13c1e68e4fdd1999c74a7c2cfdc4\n9ee64e690c8d76b75095ed64c4b0c13ed515c8c6 dd55b939c077a6f6a5d3c5b516feb7a8b54f15e9\n0b26685b01852b38383ea1ab457cc80e75488017 0b069239f90ff7d3ab80e29e4b7836f69ec81ee0\nb601a2c4485a7418bdd98cf3b61957950ac57c20 37bc6851fc1a45498db5e65fce0904b193ed6037\n9bb17fed4f080b33c150608994ec09ec0c814f6a ad16b1898a9c8305a33aa0189bfa4be4c7f03d09\n0e62341c3c727d06f66be09ea962b69c280a79dc 91fa483422a07ce3d0fa694a0441948a8f43e0ed\n6717649ae6f2d19a3944107636464cc0f5c48dbc 99fefdb69de03befd957973432d82ed8b110b25d\n099f70308709c1fecfc5cf538c4af7fc955dad2b e2ce5fb163d365896dce11d2275a69480649f64f\n2f9ec0ec100a2a8e89a68959911a7dc0e55b72d2 0e6fa4c16bd3fa7e9b3669eb512496a03132b9fd\n9388118b46bac5ac165c455fe07c1d79b6443c52 6c360e5dfc80742557e403f31b69975a94d269d0\nf0e2944687045cd6baed6b5a468cec7fc55f4ae1 72ed4e83d2b907484b2adc38917523f9fa715e94\nca21ae70f03884d80c8197fc15ff3efe0fa4e61e 509248ffc9de3cbfbd14adcaa485a858196ac7cc\n0872f274eb1f438bf6c447db6274748c735e93d2 91362ee670f1fa3c0cae3a902952efcc414a6f85\n46a08e2c28b7669541a70e2605af382dfd481597 87064f85684165e70b2239c9f3527729083c7e18\nf87620232dd5476e0502069cf5a3a94dcaf35871 ea01165c11738b55b1d5f50f6400bc496f7a12d6\n014d322212cb790f9fd8a529c1183b164861ebe6 8f7c83f9d94e88cded44eed6a7b45b7f3e1092af\n40a5d1b52bc4e58ecd27a8d53a84e09f9c15e927 dba7b32f41b7ce39e9b0cd3ae67b80e0173e75e4\n623fd26a8798f6c4dbc0185f36ca488d3bffc9d4 1b2f7a9f98d94c96153a01a498ac32ceea0ef29e\n2b45a989cff6ad9ad5d27dabfdb98c2972dbbf0f fb5292aa3f0b9e524869e868ce5fb03e0ac97894\n9fca8189ca85403ad3f5a896a8bb8f957fa67b40 bda0c81318352e9d584dfd355c3697ebb6074945\naeda6ecbcdcd57c3f6cb67df44a9d974dc1095f4 28c6538bdf824858a9d57eae26d06286872834cd\n20f083d9aad33d1c00c517d45f0a8ff6c3cc74e7 2507ba0bde409c02daa2a3a01f6c3d6ddde2f15a\ncdc10d7195a10015fba3f391a820a7310652b790 6ed4cbf6a82efa3a28c65c96de851df999983c7d\n0192e361b7e0e9882f950315f1d6c544a9b50562 79780e5a82ea96a8c907ead0bdb8c65206e83d34\n9b27f8ded67ee8f1e6367d08ebad21498b6df81b e81bd11d32df5dc72c7cc1206e2a8d8998357908\nf0eb5e955d38a4749260b92b9dc830bbbce2ac26 085c64c0e200d31dfcb9a9858d888293da2c7da3\n6e074ef4b79b307d104ead0441d7ba8863694d1d 566912eceecfb4425821f477ae91333a5fb6d00c\n97d3deb1299d6513d44f8caae4a9dd5f4888b610 f088c3ea93fbdc1488f29f0dcb064e8166a3045c\nb83ddae4f9650792e7c54f3bf4a25b0cb0661e6b 85923cd960efe3ad23d7c406907993a683156127\ndb0fb425e2653301a695c9223f695c7b19c1a6a9 3285243c2df70f2f91c00546117d7fb6222e9acf\nb83ea0049c60d0eeb2699d704107081fbef8bfa3 dc5ee968ab56324534d489c7c2c5c7f68a313662\nfc6144e5ba628947b45e63c61b61e34c70aa3a0d 8a4f6b102e9cac4657bce5950801ae77851f6f7c\nfc7c029680debf495d641c922fcbed3632ac41a2 54e1e479dbbdd0b2c9d3fb72b8140f5bba18fcf4\nb0279d96af91f4613182d1f0cf9e4a8cda68cc65 ed3a6e89801e53d69f3a1cb4068158b36a279dba\n7b08c22a9ca2efd6d26a5f9509ec32e63a9e447c 5a9d10bbb8c871409d36c73a3f03a96bb70b07df\n2d1c9d74ce7cf565fe701aa93dbb8173cc7ad10d cd11cace1892bfd0672113262dc70141bca49e6d\nc4f78816188dfa24df94a787e6dfeffd3029b735 5a25348431811704d9073916627566244ca8ff71\n69917c6a1425d31d64ee544d397bbfb954131527 60c8ee9b70e393b1709c74581a58cf4c7f30d97a\n15ce883034e58f5011e911c649888ee2db4bbe6d 76d7227d91110cdcbf1f8babc81684551b79c257\n2ef14e288d708799948f6105f8b6c031391d35eb f783728dd48273f28fb7fc49176629125d5cb881\ndb337cf774455747f467966b9e8a637b65a50371 6ff73963209f492e3d35f2f9c54de524305d3864\n8b6b73a92dd479c74ccf6a190842a9f6325280f1 ac16eae281be0d787fa9e699a8a9ed5b7bb72f15\ncf9c2574b7bd8853a25324ce125be69d1de14d68 3190605d9c2994659b45739e9de801e4d7c0d629\n47d587fb9098e6637ded65d2337276cb7123b5ee 8772f257ac9950efd37ff3158dd5f92034aa8b24\nb493eba176e007314899837dd16cc2d048e18eca 87597e37fa9038db83271437537bd76f83625d16\n9b46eacd9abc8e1b925f9a7ee1f3056edf4e4621 49bcb9a91059bb245be7bfe5a8c33d2fa7518a3d\nd050b3812f978ce0453223fb8690cfadc22480ae 0e18f21d8d4efa7a891509aae7d7b696010030dd\nbd7549c7956b35da3503d44ccf47b8ea267c2478 40a93ffcb776b09c4148c354fafd06ce67859c90\nbbe7d6a69d7e1275b1b64226cc110b501cb7b8a8 cc296a6ce16bc26c8e25e333554f74e152497a1e\ncdc59b2dc663e14357803e342b6796c12648eacd f7e31a2fff92d230c4cbcde91bbdbe8226bde8ee\n1669f28eaee338a5600b78d1fa5812e1cb92ea39 db9066dd7eaff40db5351b990e207ee19dedaa24\n1d00c17eee245cdc5abcfb3c5322bc37fac32eff 559374688cb9be3a717f4f59388fe186bb98736d\nc178d07baaf0ab5d7e5b71e172315aad5b2151fc bf82dd4e59345255d99592a4b4f7329cc8ea545c\n306545ee917e2bca7be28e5b0c0889354a23e5ea d7a6c0b67802c82086e2f68ac4293830bbfb8b16\n9edc615532ca687aee5a4262df2116f465d51129 a09bbcccb9e6d76d13b9d2b0c53cbf4fa87dce90\ne87adb341822f16c6875031d2730d5c58c288096 b59c3a615afbe24557977b598aa9ed83d9027415\n936bd7a64d426fcee5e836d43afcdd25c93de80e 82ac36ebd4b37a870578047514e087df9b7487d7\n9d9b0b8670dabed7918f5cd1f9abc585527bf11b 6c36facc8e2a351ef2bda76620b7d602ecfdeeda\naf8a1f89d093d5ec95ce5de8766a2965b958c64c 73a5adfa7583616d095f667acfe19a5b61bfee5f\nd4b84484f501fa49b420f9ec56405aa91449dc67 7d60bb4080d93ac67bd393c7a7015ed589114106\n3daed9942decc09c38d147b292a28d4f0dea01fd f183d2de1e20a9aad49397e4a054cd02c2c68ff5\na65f153df12a982008334467aba639e7acd4cdc8 1ead6e7eb7e7374ba58d6450ad9b7ea3a77d84e9\n3283845894046edea7110f889e7448704884638b 6c3f0de723975066bb253dbea2c9184af7347183\n7a2f29740289d20e8831094281aa7d686ce8c019 a932f8c0e0ffd7a5c6255e0d1f872b36a2ccfd67\n09a847b5ecd6984cd8c3f021da0d677d65c2a27f 3216777219f0647d023f5c8a83b625e946fca2e9\nd11e4a2c25ac766871837bed69c2a612faedebfc 2aa4d3a4d0ff4eced0d908087ff4db34b4d70516\n09d811380838c5a99c1ae5591b25554fa4ff2252 1b344147574a2fccf411c607e88ae8c8b036fe42\na059ef8b51e32db1be7f81db262c79fee57d47f7 419409436c2e4ee4a8b9d33838f14e3be8ac1bd0\n3f9ec679088a9134999bc8247bd3c567fb002579 18626e80b62e808486aa1594cd076a94977dae1c\nc1a8326765ba05c485a4d4a3969f389e8aa882af 1e1b0e1e02cca5c5182266121f2778ea74e0e50d\n4ae9d28505388b993b03fbd44864a6e1f3c12df2 a188c82f3d94c05e59a1925ef09c0cd2946afcae\n39fdff64d57418657c1dd6a7f7a4e5f2399a8f93 2184e00fd0cd528646499f85ad3d1d4e96f67816\ne73b8646887a4e2d5b09494c3972c295c7da6622 abf050ef24c8e9edb1ea66a6f828d17ee10813cd\n842700d5401e0d9667e029906fdf2b8172f5c66f 68e1b5570e8f6ef26575f5e6f2950dde2d78728e\n1512baa4c9e6ae63070a7d7481fe185adaa5d8e7 9ce1ac5c49d16e6d1ad41f4392aadf542bf77308\nb4ea5007fc35c829ef2dce734b73a91a09bab58d cf4f5b9238a19d8d8e283707329e1062b4b01133\n15c57e8364bafec785a9447906ccf95c8177d89a b841184723e959e0807cb212f8e2ba4ad6ae7a2b\n83831623f81472a3642fba854d49973a80758273 7261634603e655fd756d1d4fd339094614ea793c\n3566788d28927f8167258d75e90413481911d348 5d8b62231afb5283513029742144d6217ec3a089\n680dcbcea5c84d1073c8ed046d728556cfd72494 23dedec61b7ca52e39e5491c910c4a89db988b37\nc9a48baec09a6df9b940ab5ebc68060ec65ee6f6 108c2758d01ed738bc4ceb49149e607aecb4dda0\n761c943981e080b650efe0a0a3646a97f01d0a13 5381b01f160571b3ec019d12f5aaed555a360919\n9d2c31089b214906351ace4e318e300fc0fda9bd c7b9fcfbd70c74c8e92a0a7047e38166c80b1f1b\nc0635283b6e39066a3acc9499e412abe03e5dfb1 94be91f0ca81aae660898062512074b739ef25fe\n9203b7445eaab820cc931d6b89bb6be6caa42d71 226013e0f7d9b94ec16392bdce641ce15c398cd5\nfc4e0555f91b19b5105241dc4fd7ced57094a18b 00a433692b175ede84fa029eae52a1a43a440107\n5a4ef9ae1008d25eab07ae5f73403a63a802455e 37aec6524979131fd5ffc322f56dfa739904b80f\n5d54beca76b463c2ec474b7a666b0f78d0979367 1fe25282cab24200f8875f24791952ff2476b844\n7589ee106f8add0f1974bd5d86e15c8103aaec91 fbae3ac2daefca29de958bd614776f8a35fcb6ee\nde4bb6a2ea0ec380d0098817878a9b05111731bc a956131e957c5f1a9a74c7aed12d6d8065ea4582\ned516237078954f9ce3f94ec9652aa56c2b9be6d aec33c40315cb72108ab84058148a33903d496fe\n1c399d5a6d9ca195da95955f337f7b29dd387767 1822451f8a005b1abafc8c77717d25f6f680f836\n240732b36bdb5fe75f6ef5acf5540974cb96c75f b0f6ce8030752150b573ad3d42f19b938dc9ceda\n74733f9e725d5123e3fe73b573b406a065131e0d 93c75dc273b7334bbacb30f1569e7830a6656435\n804df5c735b9ff3cc94d742c0085d5139bb1478c 1853e1ebdd046d2a9001c1df55af46e76ab91e19\nb2e85b6e409a4831e1b2129a54c173339e19c696 292895b55d9711fdb126f1a882cd7beeca56e1ac\n4fe2f517e4b2332d79c1b9554d55b25bad3dc38f 0326bb5f4a4f01d1037e3b2872f555c156d40def\n2be0963c30cdd088e9124760d9d6f434da5d1b43 462d886fb6bfd7e409d6729dbebedf91f5cae129\n078ecc57f517528d0fd2cb920e99eea1055f01b9 9d0c8a27a3283f7d19f244a2304ac1d8c2ae46d2\n334900dc7aeb03f840000d9bfe6526979ae040cb 6649ea8b3c8fb25e2583c3a441bcba6be3ef35c5\na58a99e1d4bc65a165444656feba88e9d493025e 1e082a85f808924ea2831264abad3641878dd964\n161ce17bfe1dbc12a1b0e216746992a822144fb8 149647635588a58a4b474856df9d6cff705c8406\n0918c5ee7ef33d8d381df328d5c7267658f9ec70 34d914546a2fd680091bc42e895b7313eeeb0223\n78a43a0d361a59737285064d069090da02164f5c 224ff0284d6e612b438584deed89f1e704558a9c\n39f18a3850ac28e609dea14e475e86d727bf8f42 12123a244376a6250e3e602a8694fd9724d95e66\nfdcf8fc448a18a453bdbdd8504e83db1939998b9 e57d0f757e297bd54545dd25d808aa1af57fcad4\nd25d230ab8b10b3d090cc1ade65acae6d74c0086 cd708dc725bb8c6e10cfdedf231145619a49ba2e\nac492247dd1d36ca996af51102426e6f08615570 eee13e450904ac5ad24ee0a60ca4e86b94b51628\n790cdd0d5158d46ceefbe2597dcaf63d97e39e6b 0270c5afb944a508cd7960111ec98573e626402a\nda1d29a641b18f5199746a81a74b97cd5bef3d32 7b837b8fe1a8a6dde19ad09fc4c2064755bbff9e\nc297841fda0068850a275eaa39a8203f43aba0af f4495ad1efd78985e0ef4f53a1eb66bca2374f27\nd4f763cc135f2e53b5d46b8e562018359347f1cd 957a1bc329b5e96921988b97963c33e25baf51ca\nf4db095b84523c554f4fcc0cf29cc4bb58537644 ae004af94e29ccf18a0922d3a167c2130b4f4234\n782df64f035e7f123a82eeafec7db1712292011a 96438f4fb9427c65c0bf7ecdd01b23755ff1845c\nb504da8214d93bc79c7c766b6bf5eba73e311c8f c266f7965195104e6f2e25c84f21cde2dbd11a45\n2a8721fb16f56c79524887fbe4f348e13de06a8a 23acab683e0a05818309789d76df49de02ec475b\n6f938a4d7d377259603b99d51270f8233f284fbc 8b76175af7e9c5669ada9ee71f36fb34612ba4dc\n70165cb277b5f1fdef92ab538d939cca53da7117 12294c8a95283481e72c2ce17eec6250f6eee1f8\ne4d353e34ec7683a82a107fd51c60bdd2f4d6b1a 30be0281ddb00195df4d57d5cdfd13c774497b93\n309c0728409dc76c617bbef43aa470638750b904 1ecb3cc3f47228ad09cf1e2cc6534d2644c84ee4\n101b9c55c4df6dddc7e63aac51337115934cff2b e61c35d5ee7d5ff14429cb4d524f865c0e9ac3ab\n9d81fcf5f0284945dc4f2486d72bfe24d105dabe f04fb77f00cd97ebad20d1c62dc4cbb89b4c3a1e\n6c60e09c3c734b885dba95ca528569888b1116e3 c512cec6f4f188b25fddf8b69715b280e77015ae\nae63d974477c3aa04c5edde230c1f0dd9aa666ca 3ae666c61e224f08954f41847e7a636ac2e52fba\nd94f352054591215cbc0c5c8f4b9ed40ad366960 fdbbb4c1bc42f9f178085f683aa57eecb2219708\n49d4f8991c2ec0406d8584653f87298ed6681437 ea8bb5f7a02ce6db7c4aaf340c65311252fa6253\n7049f0be5f07c6dd68b506c1942ee5e070a86b19 a97a8f328dd347b64fa10b70b72d1424bd4fbb90\nf0bba4b423cc99e08860350336aa3a2a61b6af95 11f366eada7e637ba11ceb5dabd544ca6aab3e31\n0a8188df9ae9252481948ba0bf8f372e259e3045 0fff0b5fcf0be92f42dbf171e1282697516dc5d5\n4f6ba2d2b254038f096915876169e4bf9bebb118 e652be47957a356f3c6395fa37eb443b054e09a2\ne2d47c049a4d633ddef1107661a36725e011b48e 0b816f8e65984a1679dedb22d3b1a4b553fb599b\n37493013a52b0b157aff51a3351ff1a5429a53d9 38db27499cdbbad44b292ff597091c00d76e3b95\n2f843f2a7dd9b14ee5ad74a87e41e818f4ccd1a5 c953e198f03de9c7e5f0ae519216f57ef5ed5dcc\n36de02c6ce04935c4809fa2accb31cbcea2fecfa 9da706da8b81b4bd6f6e42c97e803e45865ea1c2\n13e5ac9b6d5fcfe8aff549ca1a1c33d6aaf0466a bf2d5d8639f63232f50f8a83f313acd3051ea834\n1e371a72d0c141bd9809706759feedfdb3f53222 154bedd858f53b87c85323b5a293f3b0d84fc6dc\na5312c2d6f69f358179c91f4856c872bc5f202a8 f57ba951c9ef6ebf48a6488aa5ae57503d3c49da\n2c84cda8ef4de6240f6f03db84f4a75593bc47d6 9ab65baac47dec86a73d1d59e6387ebde6b88cab\naea74b77fe24eb35ddfa79523a38b63e1b3b752f 31f7eea521500d5d3220ee1f309010f99836a8a8\n6391be9676d02aa3828a61175df843d49de8163a 9134e776d9980cd8447df043e073c09d3d20fbea\n32cba95372e2d2db8d80d35214e53f7798710044 9c76467500ddad03cc186329f955ab6dd25a63ec\n530135b55990b02cee01b07f249e792b96955a06 614453c6b4cdd56d7a62115a4f1801d79d3ea940\nbb1db401a4919dfe1da820d98bff124b65c45640 241ec550923fef1cb87e0a9aee7f351ef8c618aa\nb95f402ed75ab64c05e4f630638dfd24f124d7a7 58b54c8471ecb217b6c5c33c56330556755c7fab\n257b1e6f8ceb538af77d7f0c39e7c29ccb15d1a1 81571645bba5cb21559b554631568279c849302a\n9325880099d6f4a8a3e8a3f5bf0f3f9e251b18e7 8dbb2b2251c15a2346c71b1ff20df905987201f4\n24c8a4263180d0dbfeb3109e9e7b218df9f4241c 066799e54b80d928a214e0ed4e0d7b0fafbacff6\nc4675c754b2a4158feadf0a4f885d393d1ce8402 3ddd3cc9c8571dd77a0788890557532a6f7a2c39\n12f909b9ea965bc4add18fd67732c7440c040faa 9172e73a482c6a8db78bb533c968912edbe85e6a\n95f19bc51debf7c4fd979095dc899810d8345a0c 28180ea48428195c0c93c2e543d4cca6205b50bf\nbed699afa99cb3a844666ae66109fcc64e320175 e7b50823d2a9b0a053894ad6d9b9baa568b47c76\n543637908e97d65cd036d4942dc3c35251625e0c 5cae0c0fbc0c91f5fb8afeefcf6ac8c7a6697055\n0506c6199cd3d6e940bd666bfa0ee57af75d1fe5 58fe4c4e5959cc309ca1a794102c6759ae316500\nb7b6825e679485fadb945b284e989570f3cdb08d 17d427dc1a92504440cb48b2291f899fbb338b7c\n6b90e75a44709296758628666ccd9b260a58ba2e 0d6c96767d8b7c8f7a0ca7746f21d6f513adbfea\n3db1b96c5a9c9d0a5404dd527dea6d2a293878b2 a9b861556ad2687b477656418b03e677182ffea0\nfea35c825e11abd129d4223270af9741305d747f afce3caf627fd7b2db99772d0aeba65ee51cfc61\n996f0d0c4922890ead288dbba43337015b9eeb0b a73e9f4c170cb1ca59d257616757a078fa2f5a5a\na2452235f39004478f18e6a936d4e42733349090 82c3532195b716bf4744c085e3da11409c91aa9f\n2609939beb0b64e05b3fdd4694d87c940e0825f1 26ceb0e659e0a62f69e9975b881c56eb6dbf6209\n5d34f23da47ce7b395ca1b327d1b6266978b3235 3f7799fc44423c3de709031276b1e8e68afab283\n1b5bb387d993e8afd0e18d73554a536a03b20073 f3bd82dc4468dd3855bfab119693ed608355c4d3\n260c0c771d43b6da6e58bbf07b74653d55c2e208 147e6fd320b96e1cd12eecec77e8ec12335d15be\n67ebbbc0dc7c439502328df9ce7a3f50fd3349ed a0a23966dac8c7417ae2417c07528a6b1b1ed839\n1e31591b43e9a12cfab6535594505d8359d6d5bd acf2416082a811529e331e50bc83c73090929f83\n319e09c3db105e68204d10bb0061aef82c3634b7 ce6913cb4764b0dba2bbeb832c02d88e3884b9b8\n98a584bd7af2a498c07551e0cb7fc26d75765543 573dee996a692ac47c567e2914ce33ac529a9703\nf2f1c9f245f52a5383fd10797e1d76f4dffb119b a13105b9b161f7971e89fd2039688587d9d4132f\nb875122a1fce975f5df0e16e4694f144b76a786f 8ce5bb318f6185696113863ba35db89a5eeda9b5\n17de8fb205998d4b703146bff8822644a4a4aade 50e989fa4e85e99f587db2e2d76af8d7e9675e04\n55c8762f3156b011887500e5312d5783a87244c5 3a69b98f84eb36634c607e12489d91d1e556d352\nf88a94b391d12b73f5295c5f26b6c2b27b867f11 dc57cab64410492a261b2873696bb5cf2d814d1c\nc61ac2e0bbfe38e10a28663e850e008e7b9a5be3 8d2df914a3f58913234ff56801cf02101bd1e946\n333a3530e879512f254eb3c5981219f0f29dddf6 8ff5f747f5a2b60528d89bfe7339b73c628bf2cd\n7e15c617a8001a47a71fdcd95358047c09f24c83 8073d19e7c345cf4bd368dbebee0a07ff00d5c10\n07a70b424714fe0d63308cbba9255445b121e536 339f9c72c6a4869ed5d9e3841f926a8b96b19205\n640aaa7e673bf262323edaaecf1eecf59263d780 d7a126652a9e59696c28ad8fb8f41f31a4e2e700\nb4f36513a6b19a2f385753bbc2323317697809e6 c575cc592c69287ef6551bd4868fb51f31b09a69\nb4e96bcc3225ca8e7e4537bebd6550ad6bf499f6 47c9738561fbbe1948353c27dfcb2326db7bcf36\n24d442ddf04a061d361de8eddcc4daa1030728e9 938a1ce00a0320f1900f145da889ac87f77b0cea\n572e4840420dd1e75e121534dc2fc799a4c4e14d 5290da45c6241a2e610c9c84934083a52c33dd84\nce332dc4ee43eac8ff143417b1079012ca8d2ebb 2b7b4020915f55d3503591180a1ac591daa7de13\n4d7efa506fc4aba0c6ca0fb8b73005987f592255 b9be037da13895eabe7118ca8379152b4e84a77f\nda59f59009a06230b534abeb7d217f04430fa5f1 d6012e34719ad1df0806c69e7336282d1f8e4c4f\n3271896146c2b7f9b5f3ab3c3423ec144af69fe1 b5ee7bdb02757b147eb817aed046b4c147488136\n8832e2b92ecd9af897b428bbb5033b0a5fcf3aef 12c71a7f0693e07eb58b350798ce00533d0f4e0b\nbd188c32715743fee774f104c70d5f7559af48ee 1b294e2c7be36545aa894add5e3ea79f4b236995\nd347b9a4c59e66c4a2723e3c4410bf464b4006c6 35731095502391a168cae12402b76c4aaf4f9fb8\n11828849eb4841329556d535dbfce12659b4b5a7 59b1f63d4b0367b2804d58465c051c3eb75456e7\n9c87816ec7d43216bde1a28dbcf97f06992cf564 f3172486ef449f74b80a5daa6c6abc35ab755235\ne59dc07f96c4e6216d9493a5ad4e60754e3f4614 60badf87299b6445e865c3256e36aa294ae17e29\n206a0505ae6cea1ba7c04d04b4ad3aa479f2e3f8 a5b4b38e95bbb74b7b5dc1ce561e513474685f65\n45477f22a4e4b2491547a3fd2739d9aa8807782f 882dfe6f1b13c8a9b58357f259def3e8a0660c1a\n277dd4df6c2aecc37843773f3ea2ec09a12e19ba 9c5e58ac86c0d60f1596b25f326b26aaf7b4f79d\n11724b717918a4c19ebaf1326a683bfe7bc76827 b41b9825deeb78819159fc788e8b44c7ea63a9c1\n36ff42d4d58c29fdca20b3071c5e7dfa5f077a41 c483379d35798e53d45ea31f507318e5af909b44\n56cb63a15137754a5cf42269ade14745023ff0eb 7abd7930c08f2a7af0ee3ae0e94d54dcb844b24e\ne4953eb3ce3907dc19c7e82710466d6c82208660 6885bcaaddea585e8e75642a66aaa7e0feede6e6\nedc6346e0750d9db54d60f246357125fc8a0f7cf 086b1f1fcfdd76f00585b95afc86d6574d1f7229\nc53a43bea0b2b7a864639fcc541b53f8f570bc95 7430131563f376506cfefd8af9246308c47d2c70\n453eb867a08e9de28edb1cc2c716f6466be24a1c 293b8c3eb9f2c2973460b7dfcea1aecfa656a63f\n7cf16690bc410fc2709c64aba7895fa5a6d91e0d 994138e43b94f45011a61ccebb821dfaacc0732c\n488a4a7299fc0b9d03e5e7ba841ef3a3d2907f72 b5923edde5fe705387e7d63b35eb7f5ab1852d8c\na6912415e669b662389b9c3d8dfd434d20a5dfd5 020a9072e959f6665717a41820196cd91feb9dec\n772005f35a4836222462183412c9758b094f27ef 28f01521c7d2b7add00f42cb9b7afdffa2c0da6e\n8573e9acda00dd5a815ee001a0ea93a264f9d0b6 5780bfdcea607514dfdc7131d4a669afcf6452a1\nb21688957458ccb23728a14bcd18bd2d7b3c7136 7188318526ac7cbc0d7b7d487e26f648661ab29e\n84c165ddf6906dfc78e541c63df4b3b11ccfdb4c 9d12121b8e7adc94995c7d18893e8b705789f7ee\n00ac404826db1b4abe05b98ab72e0e2e5db86208 8eaa861dab7bfe5a9eb5a7b5be779fe61f1949f0\n17ddae9fa66c35da8f0ac09237d4df4919ede78a 577aa568a9d6a553619db008cf1a9cbe5bf57e60\n588586736439841d3ac9ebdcddc279b5934f3ba3 273dba4e2bbc66adbc9b1027dceae7f5ffa731f3\n436a67fad00f8af377c7ad4eebd6871090b9163e 4c64d8ef8aa72d76ef610ea34a1de038851d3965\nb2ea8864465826bc947690c856e905e99b9fd4e8 2ade06ed72818bcfe649f8ec0b8577f429898dff\n052f1c6b223281c9ae0e6177fd24970c5a6aa624 bcc426a88f17d87f2d9286061061713d318676f0\nc53b4ca4f7439dae33e1c45191fe5e39b1977c75 7811f60fa49c5f01ae739f9868ac1155ddb172c3\n3f36026405dcf33a4288885fffba3ff753f55592 ffbde6dc72245e2ea84f075c2a1a7b0b53e7c8c2\na0844341cf0b49790886d754cde2dd1f53877ed4 66a9cbb0d8fcddf0f17f5a7cd0ab522698a25b9a\ne52d1c111a7c635b7512f5bb3c663878b6b864c4 c870663affb7166c85eafbb5f0362d69a861aed1\n62329788face0ed5884dc700e6b039260e09193b 8dd15c167dae1637348cece78090609ca146ff7c\n8cbad2d82170c13b09f47b3418a281dbfcb35b94 8797c5f147edfd46fe6706b19282691e6fd9e3da\nffb977cef077f10e811a118e373b317b96fc77e5 edff2b9f0f33210b1929a6135bc1a784c4333879\ne7da3a9dfe4f93d15a41d8c1cc1f3606fa3a906f d57671307ac24c806ed2537dec2d2ea79a6600c0\n0b1471af5ff9c34fa2d0b2c4bb11c2c82eb6553e 59210eff5651c3fb60722585710e635a1298b6d7\n52c612e659acf81af4eea90403955e451acb852a e06431c192537244a3cb92ed0cb40eec25724f50\nbd0450e4c8fb90d05c4f138ef2147ecc5ecf5f08 15e088981ac987c5fbacd2eb9feff3ba27b53431\ne83ce8975a536b83c5f33f4564595a741de02d87 a2f45aff68db76f0af73705edc84cfd934956aa2\n446cf4d499d072fc1116326de049b1bde724e99d 9bd39983bd31d8fe09553ffdc25133942ebeb775\n429496b34c6f7c70ce43b736b003ffe4b922062c 7dd853c1cecd03e9f0f73bdfd28897640708a14a\n801ce674c7e64e73b1f1056e35a679ba14e8c880 4edeb96e79bed32c2cb34719e9ce8b695a28e72d\n704ace3681af57daef004491834482c30449bd4c c21f8cdcd8dec1c15f1bc3df2f4d45867bdb9351\n1fe6d594a68b3723bb78b9122a2b4bdf7e357423 a97db4d038df3e878fdafdfa98e6d52f404d6ebc\naf474913eb470a26c5c52a913fd1a71083afc172 dea977444350a17c40bc7565a4aa5eb471d0dae0\n607261b230ea30324ad48198bf06cec19c5ead6d 970b4200d4374e05e7034eaa89259478eddf601e\n74ce391284d08911937af29182febc65923b6d60 879126bd11fbb2f5719acb257d44c54848e23029\n5fb3a937b93340e444c9bd5212c98eb286c3a1f2 f1f783110a35d9b6fb4cfac8b2c16d809c798b2f\nff43be9b9871580bbfae3b9e24346401a199e81a dc2995b7d267a77a51bbaa47dbc71a2227cf587e\n9ddb8dbad8d994f9956de171f945d0639a0d9002 2d0bd220601b8169e0828edb778907899bbe2642\n251f00c1199eb67053e4e564706135254ba9cd8f 925fe8b429ed9827728f65c867f899a63ce96ce8\na756e53889cff13fc59a33f14333a5db22116138 ba25c0d1b2c0fef3884714606d883a94e53ad572\ne69d89c766eb779b0e38636a25dc3d66d611e6c7 bc54b60c64429b245aebf24a3ba509883e0520aa\nf94a03b1caa11c45ae34309a0476fb81522a61e0 1a19d43816b25968906da19feb46a36ee9d4d19a\n6622c245a80e1eb00b54396cfc80affa88b4b959 f7e5e2120b113a7e4d7941dbcaeb504930267ae5\n3d9be3d8e17c8e6ecc6e49ce53362434d42c54fa 2911daf126ab8b648dc10887b418f4c88fe68efb\n1b9d09cb31decc3a68b00714df2a5fdfbe35ec95 bcac90dee076acf835dc2749d3be367fd0e65f4c\nad9fca01199a7916e5c345da3a11e8ade6264976 09d3fe1822339f45f9ace59e02917991bf75f9f2\necbaa890d24bfb1aae6bc070ccc2a1fca1401ed7 513231ceb1d36b359ef99e60c3e2113f0e2c8b00\n34f4e8bfa1d20b9ddcef724cff1eba0633636dd4 b65a40e4430a653629b683cd3a06103d54b160f6\n22d392514c3fbd75592ee754d7ba8049a919de63 c782674f60a33e4dfae96934f32543c6e91336c8\n6b014ecc4fba598c30b853e408fcc6aadf62929c 2bba7d8dba621e11cf6910a406a0722a35aaccec\nb57f828f0774de5d7e11e0fcb6a449715b9fee2c bd47847e4d765c39a2f3a38cef831eb81a5c74fa\n4c79a1e29f463e4adbc4f2418117d3b93a032726 221135676bf7e0babab442f578ceb0ee6d74bd01\n94faa7327b66668f2f9121f9a53e8bde5c84cda9 5f00f4786399dff0a596bc5495959f0ac5f404d4\n06dd6cbc27a407db3f41e04191f12401849013fe 362d9f74cb33d0571ba4b707fe27f4211a57d019\n3c564f5af8b6cb2077bb9d99ecc897e2997943f8 20c5608710ed5e7484b5226009328d36123557e0\n8ee29e66d44cff8b0242385b47f32e13ffbd3401 546dd2247d66cba9b12ca929fc5b7d827e4cd5c4\n4b7e010d7e8e665a124bb1d7bc374ef5b7b23637 e5c5653ac20a134d9dfab8dc2e4aa91e775bd1d0\n959cfc8604c24a5e16d4cd8eb13a9abf1be679bb 438a1f42e3024f3d9e8e07b8e80a78ff89246792\n560380a0898222995eeeabf78a425a4075a0c3af f469a88acea54d292926cde6471f9ee84f9eba3b\nd81f8f4f82bf0267739d4c772558a85407c27b74 6d2a57c5d6fece819a5b6194eb6713c52044ebf1\n6f4ba5568349311a67475846ebb56d2dd9106ec7 033b4b06864c4f443906162d5dae912d1cb3260f\n37808f3e29ff1deacadd6e3c03b1ba01b9ae6739 2ee0fb40cd8ec9d248cb6bb6737127a9d0034200\nee14307382a28fb45da4015431ee028b923604be f2559d28b8e5b3aa0b052073408882a4e07642c8\n2bd287bb13bbe77a1e22876e83efd445b3060844 176d404d9c73d56d876e2859d5b02bdf38d68539\n9cf770548a3970c7f9360d77da4550831d676b00 31bae8a40c9cc528e2eac77dd862997cb64c35b2\n0f6afadf64a5d962d374ab947a970916d73c852e 239f77566566084bcf202aefd8ccfc3fbf73eee7\n89719696ca1293f8c7e12a66fcbb419c711af1d4 a9534a69af1942e55d81a70c139f83baf2e6440d\n10142c981ca232be04feb4689871b06f17b73296 f8e45c8e50e06f5b692b14aeee78ab87c2d0408a\n3fb99bbe6b2d5e60c9feb8b71ab3158283f04f48 94a0d1d579d4d47f54f904070262e83bb7e126b6\n1d40d11868cf7d69b26b5742a132f48acb46758f 24cfbbd9cfe78e4e530c858102d7b60f13162d0d\n02e3c2649a2ec2c86c0fd69d6064ee1c32a12d50 676a2e955d18612ce2a04556cfa1b018969814c8\n30d1a14b54ba6d43a0aff2b809bb871234c227a3 581341aeecfeca6c0ad14492745c4ace51d880fd\n56ef34eed4aa472957fe2c628b8008f2e7e86c37 5ef2533ff18b06e410d17ebe4d771335975d0b33\n308a2710a312b9ef262c8539a32d460b47b0f05c 772e072e430601c1b51b615fc1bd5fb25cb2824e\n248bb37f9c75a42fba6a8e478ebd95d0db91906b 68fc04ef937eb31344bb7a142efc5a034fb59c28\n0e47cab06f8e99fa05f233c490538e868912b718 9f71eaef98d0d32ad5612112b07b2536b47691b2\nb2e838bb9666990ce16a32567218815e1db421bb ca15d79e821b3d05a69c658e882dba853003ded1\n5c36eb31cc9b7efd56e0d1360bb39603692fe15f 0c8547a0b26a73445c0942121227758a71e03e0a\n30db5a98b94d9b4c3d60c5e38e5c49d2ebdec920 991353b837721355169ce7ab49ee0afaf39c0311\na1aee08761bb9334b26d24e770f03f7df922f1b3 519eea09b9c40d7ab72b7bb3ebed79ef8b82a196\n4baab20fc9a3a6932127fa60df99eefc45f6ce41 8ad51b7fc85ae6506f7fe7bec1d8ee31802700c0\n8014993e3afae52272bb7a3c10365ffd89c0fd4e aecf16fffbeded954f4ac2dc7eb669b79c793414\n12043047a3ca2ad374c676bf1ee4ec0100ef1ec2 e058088b59324484ecabaf7f42372c1d81640a23\n5714cc0343f91bbc7b2adf9bf087156cd98ac9cd 82f9b691670e5a10a2b6e8fe0046896dc92f3d14\n2d113425176392415c30ff554906609409260b59 09c6934691f25ee0dff4cdf399183e96dd49aa84\n1aa282a2118f4f2db12cb0c1b0e77e63d365cf78 fef18398062a07502ff6567c83a7a637ad1f2106\n6c8c0b52f247fcf53ce6a5287a4bad7f1f8aa1ce 01bd592fd6e7d5390f76f86ec541f56b0b727044\nd039b5a8d212ae70c18d0cb4b410bad307118278 e6282f90490ce2e7afcb20c618f1d00573797ad2\n37fc1c6cc3d81880d26f686642dfc0275ddc854c c9f8516517958981a16d13a640e1cdd15d543cce\nc60dbad8de89e8506afa177f93a512fc55749e88 99eb1763f1be50a3574736da1cb4f67ee66fff16\ned0338755b4508df3ab6726b7e34d8a891749f02 b7d1f91f2e12827dc88b1776052c7b6312aa9820\nb7134e1f522b4d6e991e857d3f1e43f1d056eec6 01fcb9595b08783343d6808c7bea6cbf3e1a9350\n94346f07abe6500db25b43ee17ea38fc43b7920f 9a59a96785c7520a1c2e5838a78dd3a0562f051d\n9e15e1112b385009f511119aa6e9c57eeca1f3a2 6fa286f18781bb499900d0545203d7d1d70dac44\n85c7025a98599042ba7efd49ac4c315670795c69 c6f25663001f55c854dfdcec1bea43ad82609fb4\n4d4c0961f0d82d072d8d3b47c9a529a8f4dda11e dfe5079f53871125038a99ac8a85cc92a8247aad\n6d9b5d63f53f4bc9d9730d70ac6c506980ffa542 31c0b7d151431731f990d7595a876efb4d0bdcb0\n0c834ac46d39539e3e94d8ba846a26aff55f65a7 f85d950f74853466cc2f9a454bfb9caccc6b5d23\n29d0a7db9ad6055814bd9216f003ab475e231aaf e77d854e69efab07895be858cd8d34812b83df72\n3e30f03325bb2c56f6eb74483cb4aff3a6c5cd41 3bdf980b2d6a28f3a8168cde3af3a34b5b6a631f\n27f8738e9eff1d413a3a909f43c19a99c501c899 8f44ef0663cd8485642f31aa6d07fa863b08c01d\n2bdee45560958ceabd667260ed46fe8ba9d95879 1cdcb95f074ee515bff6a6d66cc2008fdaa7f81f\n0142e28ab7360f3eb1724a7a22bf6d7ac4a6bcd5 9745db9ad392d450aab4f96d975dd03e201a837b\nf3632d7f1c77fcb9e9ba5e3d0caa8ef8024caf9e 9955608e3527b41fddf4103f96442c10551b017e\ncce4cdad3b55bfc378ffb35699812625e1fd7197 da5473a01ec43aca81864bc2255b3a85990bd4f6\n315494b8d19b63d05761244fff8d2200ccf77660 f8339abf41bd2c111a8b870f49d1529dcb7d658f\n457757ed9901cf1d2c7eeb28b392368fb8bad39c 622801651ec7ba435b916fe8d224922b33b79029\n10ae85705d8c52af121d6b46f147ed9d2560d017 16087643b5162f2f88d426f09dc7bf62491ce4b4\nb0dcf4c545d3c13e83183ca9344407d139769a13 f574eacc1e98b04d9c4c8d4d8b66a9821930bec4\n6309813ff1b2a04579cbc9b68523c5a5b912b3da aab29627b77c45baa8f90837ad01e17fed177728\n93abdb2191fe229560e18b512235c08b299650e8 796ef8b2a0fb821a555a84d741d969a8ba11a946\n36ef25f108751139c118ba56e1d9fa975b610a82 2e75bb281bd6afc81bcfa824435f52b7d4881424\nf7ac5c917a9f9f95f6d8479f060b79ac44227c11 c42e78f82004d047d64c0785b67f0a2c035e05c8\n4d8333ea5fea5c3567802254e1af0b0613181f77 a1afe9730a22cd57a8d2ea8f090222025fd211da\nd395991164455d72bb2d3785832faa33b611f6d6 befcb7289b03a1c159a7227c997af9fc0e5ca4ff\n7c651a5a7c9f49ad189a884c374d370a4106973e d9513d17412e124b4fb5372698cbb1a5fd8c6807\n7cc306412bd592068b7ef23319eb682a1e28e7e4 f7d878242afa9549c188c1da69b214120729b211\ne1f877e3f61bfb532393d9eab8c008c33706115e eb651e26554031b0cf66d6d7307f5eb40ffeb35d\nd7be8d41d8f5ed0a52550f5278ca3ae6bf4d6ed1 b1bc818b8770f91361e9f3699d1e7ddd924102e1\n4b4c8222e8d7d3a5e2ba31d89358ea8382dea418 828da645c22bc286e3817c9921bfc959edffc9be\ned60bf0645591091aefd7cdb56f9fa48eac8d4eb 4fc28f08d04f180e185353d43c3e75a22c1e7d71\n73e68dae095ee8c4e8e0b280a73e2c89eb662bec dba826682a5601f9008eea647fcd961fe3fb586c\n641826e2b05216eeb4fd1491dded42e81d3c4d9c 560e4b4fd33ca63fdfdabb4bf584c78cfe69a551\n89b92827cdc81a1003b43c8ef22c1dc6022daf2f 90914f01446aaf7faa4ef881846b98a3376f8ace\n633fa79316957c0a92f67a990f6b7156f34c7025 fa712eff97fa3fbba8a8a22b12f692a6d5357275\na954dd3f5d797ef6fd35dce1db2ec091350eeaf1 10173d7c66803c59d1ee956d2c83c93ee3c525a3\nf172ea79b4033a061a30fd626815b34aafc0a4e3 2fe347eaf180c68f78dc6bf4669de1f130a58bf0\n893dafc6df2d71d58352072d55b3c565e3c4f778 aae7973a41ccb0b2f04aa89fcff96ed9ef8a6048\n57db5749340c981ee35baf7853606d95373531ff 70a4ff7df7cb7b4238912d6cda8902cb6353e6fa\nd268394baa39de78e9ac7627336dd04d843d747d 14956c5c2945cbfacf747ab776a913e8f776c4a5\n120ad146c09402dbc7219e0793ab04734c217d3f b9bb783d9d74e0306caa9dd82aa18cbd2b000f68\ne4a51e8243f2472c8a1045d1bb1f4ecc1ceea41c ee1722379fa0183678efda27c5b963397c6724cd\n58ab26ceceda4ace34d1bfa4a3b189c2e423697e f926f5bf68595b83fe0a3639e9a2a6623dd29ac8\n1e31c6918c456ed95dc33e326a30d3f15d666161 36826922dd3a9f3ab870be53c6134eb9a5808a26\n4fb7f1708e1ba75d52befa74e71d112f7d181a4d 87404e2a9ec5f73daaab3265e2f550214d73a746\n21b0d098e770f3f0f65708d32c24961271870774 5a8a0be44ff9ea3d822ec3d284cad42b74431cdf\nb3894065ebaeb435787e9622068fc3d959523de3 6f36f82ba480144fb57660339efce889bdd19f37\n15d34cbbb9c62ee69bb22ea74a2c32b95968df41 f009f8ecbdab7900ed2a2d2a9a7670097ac4a247\n253c3bcb97549bf7877328d87aa35ae15b4c9c5e 6d6028c46a2c945ad7a6e2aeee7257ae38d7763c\naddf043df4f87bf6ad800471cd2a36d9244282a1 f2e86c9a0bca8e2fba52b573ae564c8e0dfe60a8\nf541f7dd160162aeabf4e11260737412eb6c99ed a59616322691a679f4b9e705100a78a382b6f625\n60b4148b8fd14724a182a04f96047d1028209ae7 8e17798be12aae7d80cc4cebb48b3729103119b6\nacdc6042a7c63d249954865c9d6e233e02a4993f 97b800bd9fe6e22f07cb4083d7252d728a8bd94d\n47e344214d899e62364bbd0eb1647be690b57317 a527a9fef6480f0d5abf71e39ad81d6cb3b864cd\n08db9b2a74de8192d7f82165b2c33a27c38995cf a8e28e793326ca19cbd9525f7987914c26f18dd8\n6a0428a2133db769fb63480671a2970acfd48f10 71695026f5f1b01b6daf067f27dc093d0e6cb333\n92f45bae09f7bbecd5bd41bbf2b4eac55139b7bb 8f1a5bb70127c188091892f888af4ad30203d684\nd851cf55d4e9f8f2f41bab7ebc06432cf9dd3f2f 6714236c072af9b6caec171b1d29b8555c442a25\neffdbb4d25e9560dc193855e9401ed671918b80d 39e14460d512b4d3b4a8e5668a814d0c2335a74d\n6230a22ebfc7f7c5e54f2edefa5660fbc7d92ed2 40fc9534db381cce52a1df4eb85a62b2a1aaab9d\nda7bcea1b730c57f6410d3a834b3083dd666579e 1ab99992b6780e32857b2e73fd0b0dc8344e3e2a\nb73a6289227274932353bb30a07bc4d06d27f9c0 b6ed5d17a79570ded447aa8962e419895b7bc8f1\n6be9a08149b49cb91034ef278f18f4adfbbcf9aa 9264c85658238442188ec7c08017427cf3c4a96e\n13c327ac27f622cc755b194e2c002e29c421606f 8ffe0fb05559d6abb5444e4531f5b9f1cc212f07\nf9ec9bf16881b59f2305509b0549564784f9ba56 9392d4d465f963fb6eea0e8c64df439ca19d0ff1\n39b686f6dacc795899083b1b5e61305cb52848fe 2b0a82c6daac4f967b51d60a48a60c635a6fe21b\ne27e23fbbcff345375f130be69e8f18b39b37089 48b13a427dfa2bc87a071ccb0f2fcbdf95ae4206\n4585b338c59985544b1391ec9144e494766d0690 4125d52cbc3986a63515b00d795e716fde60bde0\nd1fa1ba1e285e432a9e122b297293287e433ddde 37c0c4e0e37f9105f32388174313f02d0fad7b09\nb74c88c89f4456ddd6ba2ff85c42379d1b877cf1 7a801544cd481add5b1170f9afd199af32517ff1\n5d65106b616b2f148cd6ea4eba28c0a0d3fcd102 ec352fa3af6b2a6a24a90cdbc4d1a5101072b588\n4f7bb94672a1768a5c25a638e39192e79d7b9620 a5a66a2d9c1d241d262b6d4a8a15b21c13bb1aef\n6cfe00cb5108e109f4eadadf34ddaa209a0ef9d1 1fd7d0a1a8b59899a5c6328dbd04b30963c56d8f\n79ff14b15ba3252b82e8dc4df366c4d3e5a969d2 582ca14de2fc982dfea176a896387e3a80a8482e\nd83de29e966e69a0b957d1de4d9a81925098282b c04a85ca69699ee7fd6f8f5964ae3f41204d392f\n8d596690791f447db61c1d1084b79727a8da4669 44d2260af7768d5630ff25829353c8c131c8987f\n63649558d18f037f47bccd73bc8109d81f796939 84ad5cc88a79ac67e5f759863864faf4a84a5495\nf39de6c7dfd878ecee12327c0dff7bd99a4f4179 717622028246697750c7675d1eefe57a1dff1593\n2f911021ec45146eb36b2777ba39a693c07e847d c0d52163b1e467448fa984f28f43df0e80415c62\n028640b0bc8309df4c1a28ba3f920eb0c0acffd2 a4f89c776efcea3537c932cca6da4974d0538f64\n22edd8917df9c1517e05509c65809e670d22ad4f 44d2714d814e7b2661068e8ecee811a28097fdb7\nbe005b99d7157c4ebe97d58646913c8936f1088b ebb2c118a88a9fa348a1fa6f14facc95758a03a7\nf1a6bc7fd2ed59e3fe5423719c2a34bf20f905bb ec9721a604793ead63670eced0e72bac07ac5b55\n891a9c575b350de1480928289a96eb76ab35d76e f300b6abdf4c01a82708cd436bc4ba55938c3663\n1e8238569a79b5077c5eefe68bff09106a638d5a 551180b5c4cf1f1e639516b56bfae4299ef5449e\nd1e2acabec0b4fc356fb651fcd225e503598db7c 2befbaf057bda1d77cf84e353c9f2bde6248be89\n63459bbbab1a55ddf728194d5d77b641b9bbcc0f aa5bb0a100a24c82de1063fb6bde81e4c7a18dbc\n4a034aed479fd6a6fe3638c77d75a4c72a065e1c 7523c09089445c54a1ea677605e818b5c2eb75fe\nd23164c3b6a145058e933157f3706c3f83fc96f7 f1becc55fcb3616bae1ef46985dbb17bc4124bc6\n975e4237141a4a20804442628d3cc833a7fea5c6 632c20021aa617599463eaf7880abd1a3500fd05\n6fefbd0e6124203bd22b48c42608a2500e6b4444 942f2ff86fe6e2e5d69bdf852942d77219b0b2b9\na54d06c5cd7e0d45acc185cde7c508d822bf75dd 860b3c12756fd01d957f98a13f07986af4f7a280\n161381cdd49c357f63f37f4ca5f950775a9b8126 9f64526e24a1cde0297b2e2dff4b00bf0ff88c3b\n4db9768710c76bb60e04e1f5f86f9aa86168b7fc f5ed992cd1867db9c91b11329723a59c1f2dea59\n7bef754e48acea0f58ba8199a04111ad2bc79329 381f07ea86bb67eb41e75aad6791f506526d87d3\n776966ca3458a6c978f56bbce8c05bc70f3ba147 8cea9b8d2c809983ee68af7c3aaad867dd6675d9\n839fc59d1937f8b1f22ab21595359a5980b6b446 78b5a69460e19aedc6fead029f85ca2b0f02f0ef\n2fafd3414f9817af216dcc240074860909817425 39bf6884dcbd75cc9555e02ab740da2a7dd3dc19\n95c2ca07046bf7a2a878a27637a9ba4b27a4b6c1 978b528cdb59878f3548e2f5e8a2c790294e6caa\nf8e6420e4c5ec054bc453e9d5788261a14b1a3a0 ccb2670373ab879004327121fae9df2798dcb067\n0612f02c066ef507763491e339ffa8645a70c5bd 9ad4421e2c2817d5e94c7241fae726b5051cd190\n6ded6392581b0a7f533543ba0966add119b425fe bbff21139e4b442a7f60af0896f2ab222623a065\ncc2eb6719a99c7232aa08f21be4bee53af476bf3 23dbb254b46fad96074e9289c7fb4f18abaf324c\n0233914c484b51d5bc545f6a7572ff3c56a42a85 4f956196394f5e59e4598a34e4857bb9ab6e9713\nef49a49e5007f86bfa0fb78b0fa73895c06fa0e7 0b5920fb419a26fc13d87319910ffc154d77120a\n4009e334bf0230c89df342fa3c05cf6ad0bc61e7 00ea695c762a30d4bceed73c1c518263f4da5415\n80ecd3f5d77d4826d2d72097cb695e9568fb1290 e991238a77c6ea842dcaa7b6375de2c5983814b3\n4dd9f9067580dd1b8bd228909933e9f5f2104f95 ab6604f48e6b96413903825fa3713a0e3271b02f\n3347311fd8f6960bf2a64eb6275b0c71577d76c1 057d61168d0662e15a45e5d400f14626fd42464f\n134606bd63491b5da91a22373739f9122f97cce8 7f0f961b223a4c51941cc9032c4b77dd5388d192\nbabe7ccef052b4a462bf6eb1ddb7feb600308436 c84d2934d0a4efbfcedb054378a665f8a9aa28ea\n22f4a2b05f7c9b24747825e12f683ae0b7f4f57f c4e1eb790e72b6907bd407553f283514e8c30826\n0aaef662c7e430511a90c69744f1f0cd12e01c86 cf5214704dd81ea7bf35e3ef00fdef7f5d4aa490\n99b9cce5f2d1ec87414e12249c432c7d8989e835 8a254347a6ddae318f626eb35e4a4e6d605feca5\n825d67bdae2ee9e17309c87303e93556e322a575 3671484b1f0680889fa3699c2befc4eca6b3a6ee\n9f11fe10f8679ad3d97ab65a8376f796043448cd 0ba4005a097234f23754192778a572383f74e0b6\nc09642f32dc092a0db592671f83c3d41021aa7eb 5e24cdb2295a1c786feda0b009d0c36540233666\nb9a8aa101e3fe652efbe83047c830a64878bfef0 e5e918a8022f72164ed40ad782809bbc1a08cae2\nf7486fbe6c562ab3e306b01bc8ffbb99722be32f a4e5486f346b47b4568b27eafddc6c823a987d10\nade15bb61c5be42f124fcae73671fb220818e046 cc55353a95207d1545dd00ea518154d843422ab1\n15354fe0dc6901ac131f2d558d954f8733148bf2 38a4384701c0c94c1d8542cd2528cd805b3050af\n16281d8f90a55e59f7af1d7a53df7bde138bb348 18852d475c383ca3eff43dd813b50757e780c93f\n043fc0d0f1a90652cfb0294493da484513c4ad46 10246433f506bc68fe6a8ddab7d706ba1972f102\n5fbc7955210ef24f833b1ef1353ff807defcf3d4 081ba6acbd155f3e2cdd9c88da10e0c072d55434\n4d579ac0126868f48ed7812a1033441afd4ed114 e51570e8f510ed3fa25489cc49ab8129ae2681ef\n447448d7307a4f9d38a3445cc71668f83ab7b6d6 b3b14faea7ce3819ee046f4a828e4c1fcee18b38\n7b7a7c9d7f5e90afedda03d7880f7c06bb3e9c08 4143d54c87a2ddea441ebab45cb5c0645bb73cbf\n4a2fe0bb2c3c158521eec645753be6ff05d0e5b3 d646ccb929aac755ba4f281e6710660a4aa367b4\n894a58b6b8dbbac55c394ac8434480f53edd6a00 3d9932fcebb5938c715b285aee7307f88c7c38a3\n8a0c134a344ffa89332a9401c72828dfadf2eb96 b8c67e893202a96127c012a20fb105770551541c\n02c6f2d6dbf874864991e75950c30c7986ae1b86 2f187819c24e6ca9ad26316709cf530c563d0c71\n55bca6b09aea0139a4a217a1b93f2bf227ba7a0d 1f4789e8eea457e179ac64373d8699ea8259d6e4\n7eebe9cf60bd66eccebf9de45bf4a808d0fa3c01 b75eb23591997d39283a04a89972fa5d6b4a1057\n468df7dc98b68aa4840a5d50b13bdcf4f7fe858a ac2f35c904534026b4fe0f664714bf3ae02f025e\nb7fc2e3870030a79367712e76d872624c5fd9812 67d94d34d91b02710e857703d8b3ffc8499f415d\nf264c5e6083ae0e0b3279e3db6d3f278033256ad df8d6a1a44469ef76a5ee937c619e8adbc3ad69b\neba51a3f5ee5326895f4ac464bca28b852693e58 fa270b0ad0bdce5c202aab579f169d8c73f90a88\nc2bb8fa1bc83dbe94b9bf8f13d6b2832dd598c89 4c8524543c13743b76b1e756709f185f3758866f\ne9edf08b07c1711f2692d6193eb2c56491436068 53bd682327b286a4749ff0f22c601463b4a0a9ca\n5db05379b394bc6cf117958ef1b06041c352692a 954a574cc8abc9b6a66915423e34fed9992fc42b\nce9b3478524623060719cb54046c5d236f030931 0ef6e2ddec89295123acea3e18736ad7cc7fb56c\nbc3fea270fbe35a2c4738c46c026b76b8fd275da bbd5c0c1dc03619a1ae4cc4a1421232cbbeeadc4\n371676eefdbcef55bb505b568c01a0b599678c5c 314be7ed7a4b8600a19d910c10f5cba27245a945\nf86b197b6c4cd46a38dea8bb745ae13a2e16424e cde21bb3ef7134f023f1e46bf829948d591c1bf2\n595784e3f5637a5cfffc04f9125194eaa6cdbbdf 01223087669fae189874008676da4b7c0dac250c\n56f8a9141bddabf2fcb03a74d2087579a86e76c8 c0d0734149f9c711b257d2311f47fd53ebb277a2\ne9daac4e49eddf157f7fcf2da5713945512e7821 a4afff284bf383ce23b405f0e94c6150982acd81\ne4098e89c9b3b1daab929db72a4b81264484e09a 951071da777cab049932f0d2dc0183c4ff79275f\na56d737df62558774aa10894a5e9d3e4021751a3 96f4d485e1a95238b1ba258eb0d5515c3851f823\n91ef0d8cea15025e82480b760a0b99f067db868e 65f905145e14605c77e6a395cea8de7f93db637f\n92f730d8b605b649e4ebf002624c7db9f9da4b44 761b6ff3905ef7ab8795876a5f03db637ca73c06\na5e2edbbfc4d8ba5c28dc3b2cf39a44f1f473644 7bc9b3297e240d7271801359150a78698ae901cd\n243cc5c4df29e29f8892977f6f9dd34d975f3e9d 881be3febbf6ba0385348867f0b43f5ee60d2f5f\nd35948d5cc022104b33e8c8e4d582b3889a6e5f2 6d895d83ab66eb2d17f535af5bb9d00af843a802\n91427b748064be07c0a9c7e755a8bf878aa9088a eade37ee0a8bd7eae961240a558b704ca327ee79\n01f664f014ba858cf0bfe7727880fed1dd0cd675 318c9a27ac025a18593118a86f994263ab2f0f1c\n298ef326685c4b51d67c5fce96e081fe9cdd7c59 84817680e4d6b838dc903da90836b584ae00c34a\na3d3c786a757cad39f5c6c456a5c1c7a6b0c77f2 9a8d391de6da6f5fe63ecccb071575e90e375813\nffe9f9cb2e9589c93ffc33475fb8ea21e86ca998 2880ed2e00a42ffd23c5ef6bddaca5eefc02819a\n84d294a0a34599225a64dfb052060cb587f2e26b afbdf17859d8eb9c41e58f082a4b84f6c68e3bdd\nb07f60aa25903174731f3c4210648320c6d4ea85 5f00f86e8b661e751874fff8e1f72aec3ba92de6\n1b526b7ec9cf15f2b6729cb20e5d36bfaf7f3d1f 286130041d0c21bdb1df33b4aba93b47800db78b\n49a4af91d496bd0fe90af915f312b5a4afdcf390 76e2f29960a0a90c622e49d91fd757c46e6e5a5c\nfa31f920bd5ceea3704f12bba129ee8e1c0a7844 2afff200814e297848c163bc7bf67d4b798f3d81\n383c2b253c179a922485083cd7f4ac525f0648fc f4c47657ffb75526d44ee39024367fc10b4f63d1\n717935bad1d166ebb87498afa243536d773872b1 d512d24740c6c6e3764191e0754748c1bfd86361\nfe83ac1200000f28e5082d99230a8c9be5fae393 a5c898ce03dffb692c87892e7c205ede13316702\n5113ba7170ff65264949282a021834b61e0609a8 5d2de8bc7a3be5a8d2119f5c3bc2fb5f7aeca39b\nea64631f45cf61e5daba91f845a4e6def95e5061 6aa45b8ac4e04b975f896082041e2bfc06dd44f2\n6dbb5a5884362f9d4901f86d58a74ed5ac195d9f a6f5e0845e152b78a303dc5c3177ac02c668b6cb\n42f7509be0849ed41d89b3b4b993505034815191 daa6f9df3482be2c0378cae8b3fb3b23aaf5ccea\nc2309b6ee444a0fff475df0c0965e14ff092cdd7 15afa6d3edd424545f66eb880de70fd53e42c422\n77476ae74b9e95d00f10842190e5d01662b744aa ecbbbf7d2568b426cefe363eff94760710da73ff\n4b79ff988567f81d7eb52aba5de7dcef577fe5c2 0d12c128163902f860d60d69921fbf6bbf6ce943\n75cb94d8fd99f1df414d7f9a9a254d1655daa159 f65f8c49b175561075ae3a9e4f55de13d13259d4\na94962815d0a3b26b2d36392573e099fa084d234 f12c687d32f70d124be793d34084c24b5c0f37fa\n7df7945fdbe4b85dd29bc7aba952d66a1c299fc1 c407984bdcd6179532640faf3f8c5fed32c0540e\n5ed977ccfce930b62c617819ba62ca48912e3381 99ac358d562df58974003a6b4767b3b03680f441\n7ab7c31c6b53a12e67e3604bbccf4f2bf4955874 d43a0a7465925edaf0157a9bc7b48086152dd6b2\n4820faa55869cfd67a9c73e3c27d57e2fe0eb853 92d975f9c869999aa85c26efc680fe2ea1bdd77b\n452afd07ca4513f587fdbffa8f08a07819f7ccb2 9354e1bb8e0eeb96ddb71cf18ae63791d7978d25\ndbc54de1e2a19909fb53bfc92a6b60d08a82cc86 60a6243c0b59444b41242d8d37192b2c1117b5dc\nf070e75a299e35c018e227620352c7334876f91b 163002e1decf7c315122976719fb2dcc1529cdd8\na641aca0f8d2f47c8627a6092dd3fab2b3a894cd 8655c096d880477acbc77cbd43f762aa6e8d1184\n81b40c6399cb874caf6ff1ff00b0618b3237c2a2 055470ba92774000fbe1716d580f46e01a0dbec2\nadda98200a224dd632afdec98aab1b85c91b9351 0e2dab571d0510a0082ea8fe2c13a1652d63b076\na086077dccce45f5ced8ae630ec3a8eaee6add4c ee274e6fccd866ad791590f966e0d19b96f48a53\nb51370459ca4c5609c29b99dbd82636ef2ff57d6 474e86f41fbe0597f604910134b12d22bf05bcee\n5b5841b614846b8efe15c1ceb15fedfbc794a9a2 3ae55cf9f73018ca7e315165ec3b4af8e7bbd3ef\nae8d601d602fc52c0a32b15381f05a1bde797a98 5f3911e3e9343bfc5ef93e917de8473ef97e98e9\nc03fcda388ee44adce1228eb231548a223ad5abe 0df5a41a749e6c7afc6bafbed3cc158e0dee0678\n354d5ba81e65978dc65597ef2938c3f32b13a985 4efe728728a5aa9307343e0a41fb6d8773c6cf85\nb5de91e16354915f397ba0262a496fb0e3d2d62f e8cc90da6a9445fa1540f76eb9350050a399728d\nca245cbea41fd1067e22d1ae6894dd32846f0872 740ae59325268b32470f6c74bcf529505cf37b71\n8e9ae6ceec0ec999ba76978885559f7631e4ea13 feec7b4f76accaf40e2e50761bafef6da908536e\n2550ff6aa54fb53ec998d5bb893621fde9c51de8 0286f0bdf82e16bd021a12f56a35c5121bbda7f7\ne8b65d54568fc5bebd858d2a914341ab2d7736f1 0d6938659ee77b282faac49792b1dfe4596958e8\n160ae19a4a9ea611ec8dabe7b0b87248432c8e76 3706fcd9a7d98e6595129dfffcb70b527c6937d5\n90889b21e99fa55de0f6eb22e24743789d9b9c95 4515f476e48799a148fd963d4f93525c53e7a034\n65368c8b97dcde0826405c3b9945da1f9821cc47 21c65f9571a9dc641fbd7a1f79a04bc58ed87f61\n37908e3264fd5a84c4aa6dd62f2185fd776ae2c3 0ea38fc7e8134fb01f51cd37463ced767f69d18c\n655ca35c470b31c51d9dfbf7a8fac6582d094bfb a74c32e638bb68ae3ab3cf2944384ba712f0a708\neb42ed0aab0ed948adb88e9de1e52ce0260530be 0411fda0807675c9d97068b60857d349e9f957fb\n3e5e615cf81b9806ed41aa9a72d7fcfd947453aa f5df3631579e4fa5883cc9b9c72ad789ceb6bce1\n705ded36a6f5965e634b838b77de58f19464f447 5172d4533ae65ae81188ac1c45507382df514c23\n39a9ce1b42ab2cb4ab32a387d7bd995c080328b1 75ca49f2ad49d515843251757b268cb7611493b1\n2bb993a60dafe46848c8519e3efcf37905bde713 a4e5c039e58e98090b77585f3cf8de83e4434907\n808b55f15c04a81029a6b123dc67391c621cd7c9 ddd9d0be8747c8278c0d59d4d702822c68df6295\nd89e487b0904345752d91e7e185944c4f20c6122 a9252a361ee8daf8fefac1765ac1490d8501b506\n55ad891abee0efafb45eaa0231245cc974ee5698 bc69a1168ba17292b3ee0f55a43b4a374697c5df\nc90f060880355e46a421d3d3d608e3a3fd5cbe21 c7ab274eda2fa043a13727728b263ca04ec16691\n273decfe7d07be52a297e2d8928cc63fdf182e84 521eade7cd94e3f788ff481640cade52a2745b59\nce2f9716cf48b25d5804493e5fc567f359bd4766 1f7beb771312e44004c243a5e3c22c502b116267\n01b683504da90ca64990455955756b1f53183404 9482b45e5a437786646c5a8239b95ce96368320b\n6ca715bfbb77c9ffc0cf3a50d152700ae52be375 67237d05f56ebbdcc6fb93d899dec1bd43c2e20a\n2b41d8f87697b0e7a3c3ed8249586da112d0a031 07883f10a2dd31892949a6e9cbc621f996bf5808\n5ac35903fc22a9fa49d8e0f9d566087e67c3da7a ed41daa017786394f9bd96da99aa9b50027e5edc\n732581330bb7d893611cd8c2189016a687d5d6b8 ff80eda7d91b9fa4d9e2a6e9f014fd7a555121f0\n437c225e7d9b51b0642644bfa2e5f7030ae26d69 962c4bccc647f783c86d10a6aec69e86f2d4447d\na9dccfcac552a7d9aa2167639e6001546f2f5a8d 7eea5b6409b5ff46c3e33a3113d4453da729c34c\nbe894f89c46b4130e0c08696f8227046075c32f5 edf266347abdbd869c5a5ba66d8f6bafeb799c0f\n664596ade5f8e152ae6dcc76695929f155384b97 880efb782b470095230ae6e9cfa4bcb1e3e3c26b\nc1e55562a70c9bd196242adde1c0c3ca1411912b dc38600627bf30503460b95d3f02229ba72532ed\n61269c75763600a577ea59f5307fd2874367effd 8dc77198e928d1947a47fc59539ead3bf6974c22\n547bd410dc72a58a01eaf45ed7bdd90c8980aa8f 568fb80c8fd027d040a84f1afbbf0e108ab87880\n4e314bf15465d1da8918ee4f1190c3279b3b417e ace8d5df55618f881541b95dda44a911a8d6cab8\nfe6cc4478f7a51fc216bba8f831f5002c0285cfe ad58b8f0d68d3897fd0dadb14fef8a08b7d96181\n2addfdbce4a9660c19d071a59fc02f228f0c9367 8f1d3ab15fc52a357eabaf23728dddc6dbe9939e\nbd358904dc7034573e0b1c10c8e5fb25fced2257 e4dc4e0f00f7e77aa0f1b37eac6ec14c2b4646c3\n63486259e1414653bb73bcc3f6164521fe309ba7 f1da64868f30c678f5c9aa8e7bfe7d342d10b534\n7e95aaa5681785be74ad9a487b58a78fff653487 71e45424ef3d6e79da54c84be50146fb06a3c2bb\n2fa6f64053e9bab616ccd51b1c60444161ada941 d9f4f3a6c5e82eafdc017c68dd156f12c6b68f57\n060da6fde17ad8f20a7e0ae4ad4ac195953345a2 167d891a35881229b41ab2dc33dc086bf5bdbed1\n5886f53a0ee3142ffb173d0247d39f6163fd4b98 dfecc6dc7f13170ce267693c0d56729123047732\neebebdd994e12ac52284364445f9a05245e83633 f432f34293c9ad3086080adb7e02d619c57aeb4a\nc16638ca8a812b121f9543325fe1f5cf7f87f99e df90d8fcca893a205d74dbfe19b03bea63a5217b\na2a88a6c98d8c88a144ddb9422f306c6571ed946 f7df6bff80a178bd2a34f46803380a65a0298fbf\n4a4ed3848069dcef1da73d25dabe6c0c23050fd2 bff5528076c805b89f3bc20373b229b7e0b4d031\n88fc067849732ada80dbd8eb4ca6da9569498616 584ad1188efb1061a1d86c1d5dd404094a0936fc\n86b805adf998e53a4ac85d896086e65333935510 8e62f1b0fdb9ad8736b24e5fc2ea844e18a4ff8b\nf3876e35245c96c18f9921d88832ad4415b88516 c891755a58a42cf5d7ce557dc6ec4d69e830d3d6\nb626c693497d92c3d44abc5b1122ce07c7a84aa7 32e67887712db23913c08e7ab97734c1ba23070a\n64644e8a700e68eb2d945a2ca4721f754f8e9cda 894254c97fa4dd9dd5626f20af9d12c690f66a48\n2e09f24397fe8950aa3e27ea571382cfd4ebbb9a b8372468d3aeea9aad8e09a9dd381b3b4a5cabb9\ne1788e20642155c84cc4b1a7e828f86ebb577aa7 ed946277297edd7ae147239244202df08fba728c\nb4f601a9897023bcb4f74d6886a01000d0dc48e6 5250525e27cc3b2efd09ea71e81aefff4af92885\nf0d83c72c0ba74c35830fd7272e048bfdb17a81c ffa607cdd92e89d3ff7ab6976b712ed4308e7bde\n633032ffa4697d8f7ea2aa91289810b3b5c65f45 485df8e7e0c5bd8876d4110c3f03a8107ad9b13d\n29b86fa5f700b1f60515da5f9da3d1643c3886c2 bfa46240719ad31180cedd8b257043d414ec4ae7\ncd0e3b8a8f55e3250c40d619f10d36e90b901b3d 20ab7da77546d4f02df6112cc53d752369609baa\ne444c6b551b1da57c51d748e4d7ba57b8748cf30 aa8c57b6d302270d896e57f9e003cd43c8439cd7\nd03e53409d9f5b6a764e25b9c0c1186c3be74750 b045e8bd6d1abcb2132742baf4bcaa17dc9ecdad\n92991099623044f3eec0cc196071dca76c5f7a8e 8692151cd4f39487a39b89baf65b53e813d4f5e5\n25b7b62848d0801804376294d48f6e64b364ad5e 0331ae0be29f06e995782c3d868dbe4646792efa\n06a63cbe2ead2cf23f1c70298de7664c04a29139 25b6383189853b2307397e8c6a05c35527d52547\ndb575327c26d23d5174a86792a5630c23b5dcba7 7d2712c5dd6abfb1979688e4246b62b5723dd127\na4b9b0f089630af70dd51f53e352a8eb72eba5c3 f6bf8e96a9faf6337159965d54f02d96955fe5c7\n9965a9553c3e722ed0c077ff0ed94b41854fed05 10f0634459a79a991e0f16206ce4ab5dc81ddbc7\n5485b73573ae7f5190818c23501f2db6a0703778 5fb9a01cd1dfffae416d768765b55b97d2c95f8a\n3aa93af184554ce36701037c83126a8cfa491f8b 224fcdc861a1ef895f449453c794cfb0d42183ab\n08d7ca19a3e99c0d4a53aa17d972deefc1fe8a0f 994af82308c86e45c8e7bb4072b07c2c42c51919\n9a72079ffe13532852ac7ab3f7aa19fda223701c a70f4886f0d9bebd343f0ba46ae61ed4801e6a36\n9183bd6a4f04c487b36f22ff8c3cd949e362f27a 0030ae120981569e1de08c2fc3d44c46c3cd3624\n240b717ecff9e2ef57bdf298581158816805074c 33ceaab863d3cdefc6c2f8bc157b49e9eb80af99\naeec1ea0458bf30401846fc71f564460b040712c d002dbe149227b78064acb3adee35f6af592a09e\n5acfc079b5d6f01330fee7049e25a96f08fd04fc ed5e2a0c99bc8f9a0a702922772adc9125791db2\n9bdaef0dc1f36b122995cdb3ce4978f6822da555 4df3f8a465d2dd2b808fdf7e374e66eaa1de55e2\n316aeb17000b3eee2ce2930760c17c237ca3a017 4ec01f9c6e762349ad37b2f4333174107f4737e1\n85cc2a584ad7bbc3455c4094dd59db8507d51ff6 d442d4a71ed2dee87651ed15887d36c29cf67616\n4ca6e6cf31e6003d9e1d9ebe55c8f84a01377847 1c032a737c1a2d603317da2e77f7cfc5fd74fb0d\n570efff00254aacdf0185aac42140e9457563da2 618564a80add8b5ab747f506ec0401cf21c6261f\n1fedfbcbb336b1b5ec285ac777e68866643bbf11 0779d976b4d41f7f09eab5d1efc60991bfef35dc\n5350140800c346e404b4884b453cba112fafc2df 94b14bc2dc369abdd9ee23ab2422e56a160beb3e\nc44d42bfd6e358e07528bed42d9b8cdeb2002333 007b6f9fe8e8bd0566fcf2e832c5f34af70ae5ad\nef1a4d8573be3071d7b81a5aae201acded7dfedd b46e771f84f3ec5a8af2311bd0f0692c4682d1b3\n5dba243eef97e9a9c62fecaedb8bdd36d573bc42 27f4e75e37de4987b5bdd08efe24ba271dfe2b79\na1d2acc76158b7bcfe4cf3ac8b67502b779ec43d eef91ad491d22d98f4f41b159e5a879d4cdfdf59\nfdeafe2dab09879ba877e3925f8506290ac9ba4b fbdfea506748cdbecc05f10d28aaff6537bedf57\nfa77d9714917a701120c983cd103a018f68d0079 739d23fd737eadb0e86261b5284f35b2da7efcb9\n3506a5434d515af452fd756ef3d2937d099b8c9f d68c7343989b251789438b29faefde8aec429dc6\n0b8a55e32ae4e876a35c61eddc91434596c13f0d b46002c9e42a89bc39dd30b9b77053194489474c\n7ee7fd9f7206349b8d340239f87fc6fb7543834f 94b3a52d28cc9425122be55e50d4fd2ae9b4fd64\nac566e9e55cc920aa108ffb19a07f0bc9e39645d 43faab5ab1cdce5512ee44ed581f065562e38ccf\n2aa540cef8f7827db87ae7a8b3ce3d89262b1844 d11e2f604a69a943128189cfe616fa4db4d40c06\nc41d1ce7d86e7af129622d98d897c40b4d345b78 5d94eb304c53fde8351965b2b69273ea9f625b0e\n6f19104fe363f6b87af935ccce73bf684512079e 765ed1caf5f69b9129cffc8e2c28a8751125a723\n51af998dcf2f22c3f32045c791e2d2922143f0a7 e5768253e1fb742d038dbe78063a4290fe5ce56b\n557249990f35e3a3dd304b37d343c766d36ad05d eb7a3e7df2fb21a944652e3ba181d42d707ba8c3\n0becb27938103d95ac19f13fd01e8b93aaf88bfc 5e14cc26258f3fb5bc36daf35577274a1080ce25\n067c6a5054cbaf79970f64cc298204a8dc51d382 e9352a3a42950e8f8bb86388f7de8701a1eb044f\n65ab7af039b950e7114079a1943ccf95c0120f1d 4f4e43d1c591560ccb3e35025f8fa40b9c1be626\n09ebeee2a98e7837489f8b0c7c094538b684eb8a abd2be49bff43674d3ccfa670db2706b41974139\ncc36efec377f6ed12dc0387407e472c547e34e65 7a0abbcc7b1ce090dfc863d455e69140df9ba5d9\n5441a3f50d5d150b120be2f927e8f6bc3a86c894 bbf513a775f57806d91b36dc9adbef6d8d317c35\nf27c9269937c948ee5e70813224712c93fac358e a379af2f17355f5f37aa5f5322ecf8320c4d9525\n0a95b38e172faf67d7f7a721d9eac443bc6b68d1 3d7183c8747d7d5c898cc53b07f7b60d6e1d1429\n3910349aa58630f2a5dddb8de159ce0a55dd2284 41c92dcc67ec6d6289e7da3dcfb70052ee61863a\n121e8941c6458f56b54044e193fcb3673f7e0cf3 201a2431dcb95ade6c65f9d4d8d793450e58e7a1\nf74ab70e56070370bca5a804d0371742f6b9f061 33d9e3189c9de79efae8ac1df0eb7a510c615d95\nbee08dce3caa56ac936f0261832c511d0316c4af 8d7ff9614edcd92994755e09c5b73f970202c221\na18192d63617241c87c176576b9a00ccc98cda8e 443473aec5220ef2a45c1b98ab30c75375a80f2b\ne01d1459a63185dea5ccb57073f80e782de6e93f 0b9bbfe92abf985b8c6c188f8e30fb4bcee7eb26\nc0d056de2c24a05472e995565c2282bda88bd868 d14c4318a9afe093a3a20d36be78ba1549c920d3\n7adc13ee554e63097ae34c64dbd8450f0dc8f3d3 a1b24c1e45488e11a71caf307cfdb98b84e043ef\n50cfae165352ca0e953b9b02e2f6b0fdd9229703 7507a2c8dcc6b74a82dc92cc39d4294425c906ba\n10b99ba02a0e9a3b2b072a9410b233623f83e211 dbd3258c618588f705c08d41c717c11c22c95d41\n3bdecd8c673dbadf0b0c06b8cb4a55d754ba33cb a382b9b1b85059b9a0a2963a5b424d54deacc282\n942f158678a1be10d9f45cea3f1c204fdbd94e5d 1869956e4ee2a64181854a51ec32c555355a7933\n7b309d82106b35769717a3855d47a778c2f604cd 1e4c176c3679f8fff07ca9bbd2483ccad2a321da\n648357c7263fef97be92a9c517db63051a114e5c 94db63cb5f034fe1abbe9b184261e166eb948fb1\n739dbed4094c52b7061de136eeb1fc26c452bc31 d1c77aefda360d8aaaceceea5eee4c9918afc2e0\n2a0b8500b880a9db73070b29f79c5d6a5cf3b9cb 2be94d01241a9a4fde943b65661aee964129bc82\nfe3011b5c250dbc730e1e0c262648c8c431b7baa cfb6063c1de817eefc4f4ca1c752cc1124d4d330\na417bb7e06d76357959300b5ab410422823bba90 008d461135160f256f6da407b019c13105a0ef10\n9a56d4d70be6938b268814175d7d49d3dd74d896 41d7f4445d2b0db670f04ae309e5af2e015c6358\na7fe79f977269faefb1101883d000393fc6134f4 639f36fc3bd00fb0c54e9126861cc732849e072e\n4a0c5c4e81f6ea423fa977fd04871f0f85597d9f 2b4470fb3578ec6a7b0c4c8bb446e177e33fe5d5\n032da7344d7d85ced3d90ba69246d1ad893cf935 8987e3d4666bfe667fe3b6e6482b4f5388ba99d9\n42306f4911b325e46bcdda7dd1e41fd55cf784a6 df8a5459c629ed19b76017219d36c8c9b0a3c742\nf1768874de148ae00b4b0b5de5c0f58b16e2e0c5 bd0a4076aeb35670c022062e8a1a5f9aba5eee15\n9c513e810df645a9611891e6354782a1bb76079d 8b2535d3509b56cb0351320bc58040c756c0f961\n415e4fb5ad6b652f9c8f97bd0592ed2e992cbd09 c4242c990dd19f5c3feeb850ba120499a15ce58c\ne4a1662e47880b8d945216f9acca34542a01de44 9a50170c1b346394e4b9ddb2f4e218d75a2a7602\n5f91a0b4aea3833d53a5f3a8864054263c32c9e4 bd4ee5b362a9c3b9504de811669d112a906567d5\n079bd7916b91442f48a1563ad5b5f634fefedf7e 698d336861dab2a1a6d768a48efb127b9514d658\n30b4c5750aa6a272a554c4d8e2764e44c52b2bab af2a1e187eec2ae7fd47c46470aca846a5af5c66\n2f32d453f8b9cb52283c015ffe97424b088026fb d857c1091568a4678541e1e234e79be12a1bf641\n7b223eb49f3d4c8d6eb79d07cdaa0c3745584436 6ff4e5256ff70a2f5438d969f2ccac0456e1be68\n9a153d1ed041058070a575a056a03d23696b9b0d d863fb92e6b2dee96b2b6fdec72e1eda78e6a2bb\n0c5e95054808ba093cee05a31fd8a7b74a736cc3 0efb9928b30e0c8cee7adc7248a7a57dd45df84a\n289f83a5f6bdc5e2ed53feb8bb59d9df7f951a4e 9bc46b6bb68cadb3ef7ce0e2516f6f6c4d352825\ndef2c8b27334ae588080fa1a55309a6947190435 d7242b53d31d538e131067bb70145a286863da82\nf1988dfa519efb3ebee34a419b5178cddb3e9e38 75ad9dfc5473ec70a7bfcf58e3344c349b4f6da9\n4fbbee388a026cbf35d8651dd8e9ebd84e176f79 e7f625adf1993b3e9aef87f12933cbb7fb6268ff\n39d942b235c92d424dc685b09dc6af84d30b498c 12987bd597128a7fcd2a5a6fd27758caa8c5eb67\nd66717564c791748c05a7803f37bbe6db26801ae 986844db41f880b1ffc175c5abcee2bff4ea95c9\ne5e4d54e599b2cd0c4d0f4ef9570dd6b346a5fe0 0dd837483c9328f1ba11906be1f99cc8c0234226\n75e66ddc9f92c982a1a575c4bbf8c407c4b0811e 94ddbddd130c158e009300acadf9466532c3e6ad\n80e58620edba8bf87ff3505e8fe08008e8a5a442 e44dcbc3e231614b4ad2a36cf81baf3ca9410dba\ne22f92b968a2e3421a93200877b54a36bc609cc1 003c262b9e67c30978d53af185f64c77cfe181e5\na221ec5fcfe3ec7afdee071d8b19c5fd65c6d5fe db951d97411e024cff5c8b3f235aecdb3a5b1fec\n6207ffefbc0ee1652ecf732b944326881b0d7910 dff23c7adb31d42b22086802a1d082811abf3ee8\nf03a957fd9ae7fdaca0dd79f7ce05f001137f188 d908c840adaff2ce1669c12bece389f5d60baa41\n13c864d25e0a00137ee57d3dd2b691552d36e893 11c8ab18e8e944fcda43a86304b5c581aebd3bad\n76a781a5acb1ab6b268c4bcbba5c50205abe1a66 49e99cba5ce31247423f36bcc83862ab2238646b\n082306664d13979584f7820be37e62d830c50d4d f367a617e035933386f760ec8dec46a8a27c81ab\n59093ed1a7f1212003d422f5b76c36a0bdef5e26 4f41f3258fd02584c68889b08a3800e793e00301\n05c45fcdc477a73c021199ccccd8e4c63a4a0494 1b6e54bcaed13fbf6b02b82e1b96dad431fb1140\n8988f3d8d5e2a5e98a4e824a9367ff97aaf5321b 7e8a4a52caf9d30ae0d7470dbd71c9ffed9182cf\n6c1541d987439f96b40906ef63734ed7e99cad71 2783212ef5cbb498f19107df9d5fa4fc128707e0\n86a64f689a0f133aa271a809b9aeb173f3e16e65 ba3e590ed724cb330b19a5fc11c7f1c1b5b5679e\n0714c9de82d127d820d281a3a527214e100b2c32 ebe622b6362b704a3b1c1a9ded51831a3df8f8e6\nf54b5ca26256ea6f2610b6dbc5184ff1d07451d6 e93318387d8b20b94d54f3f3c821ebd9f5eb70ef\na79d6a0aab3585e7a261e17bb5d04c246554f3fe 4355042f20baa677ef24e3ea60d4feb5fce1b7a8\n154573fe9d99411214695235930e1c79621ae80f 1c41b6ce46bd42b57b069f567f509a1a0ab8732d\nf5e6ab21d5320695d1ac4adf99f1a0a929ea535d c6036d0f4b55e2bf56b93a64ca35b6c5427cf857\nb0973b17f6e53579fd748db162e0bcc9b66428a0 303df7e143ef821a9859435c835cf9ac3385b6f3\n43ab2945096fced340463283707ca79e8dfc6c13 932a8547f7f6af7b56673f2fdac776ff98f52716\n4e9101554a30c32e87137c4a1da7816843222423 ccbaa553a57f57af209c32b754f3b03f736caf4c\n1274a5365951e34cc359a02666ac4bfeec13f0e5 3337f3cdbb65c5bd8f65ac32b0520b3e31f240fc\n1d0f93de2774272f8ef6079ed5cd35a2eeeb24d0 b2ebb856f10ae0c7647945697efae112d35f3fcf\n0119af59ddc2504d3338ea6b1c9a80c53a00e9a5 82973266bb278e5b42fbd80dbfe8b7718c2d8663\n9d8803d5961f876867a4cc46dc3b97cffdacf7e6 650bb741efe317943ae6183c0bc7b5af1d43fbfb\n12961ccf0fa30110f34e15432d9f06304dcf5f00 c84af601e722e52f9db56bdce17a378352dbd857\n4f2c673668ed7057c71086e6e4562a2313710615 20e1fd3bb1635034976843dbc7739aa6abddea52\nce0adab9652697cd7746db9b464f8166620ed9c5 6e7f198948b50218558a7e214e2325cbf4346fd1\n3ed97cdc17eb13e8bff66d798e781330e617f8d4 2bdcf959daba7765f1efa82adef8979775411e6a\n6bfcc00157052e9094c50bbf5e55cc33ccab685d cafc9faba1ef0f30fd9b25c0a84d81838ce6788c\n5538ca69cc8088ec6f3d92e529d68b4e2048deff 92b1dd7e8b423aef46bd3a49b96db681e20f6550\nf0ae440e11dc28a80cbe107f326c4cd68e10d2b1 2379f966cec4b75a84695cebb2628ea8b1200eda\n7cd8e1329b0d5bff4d4c5dced68f82492c3f5ecf 99389d9fe613b9eb52d32b179039ab252e9dd093\ne1841e041e0b27daeb66da7eb447182785a6a465 6aa7042e30e02c76607793a1653cbdfd4291411b\n49a3e5cd974ff1e9dc4fca433c2b4e77ce1160b6 fffdc6cc58064b12ac40f56e380b639e480103b0\n62628a22d97fcb6941521447f3a45a6924366c52 6240a95059769b64719a60f6ab93eeb116181796\n2f4562ced4d2e395df69927947d96c3d494b3d21 4afe778d1adf3c18abce12105d7a946b8d7d4415\n08588ac7810a6c320a5b7b9584e23b3ab5b472ce 10dea6434d755bc432745962f037d5b5b798d423\n83fb3f73b5ed482c3819db192d109bc235c93ea6 d38a06b2f2137bd2c866a0fc505127cd3888165f\ne4560a531e006074993a9fd83900ffb361219e92 8fe4795519eda0bd216f3ba926adef4579f37902\n68b5c92d9704d8946f54b92a208f84d01f1d2f5d 7da1c60022c34edf457b679aed0e25c5fe917a6f\n055b6a36eecd34989fec80fddddcf075ce234290 92fd17b7bbdb519a1164a850ce1fbf4876f35576\n29e972bbd5c9faf85df27fd9c38bee84dda1b210 03804aeb24fa6c7a9e6bcc8136fed34776090a30\n93064ce7e353e4491d57d57415aeda5bb59d8258 0eb0f99e03b8579e06fa9a0c332286c561270d0f\n3b35e4f17d2dd459bcad0f76ccaff62e35f6981b d2b346f1432ffdfa528ebd6cfbeb46acd964dd70\n237fd027293dadeae4c694115b7455dd4b48a14d 35d6c9a3dea4a13c469a55d8a4f35a4c9ac4414c\n4e3b732476e881a468c873081b74640afaa0fede 8cb7d9401024dcb1c3b999c4c6b3bc0eb0a87251\n363623bb95a90686e9462a16d9cad5c51c97f223 97bef6f13079f3e62c8a9f3de39812a423d7c045\na3c1433f074fbdf1b063d323d79b937391a09763 4d9e846b4e27da37afd26c7263f8d37c48fe0e64\n8a8de5a94addd0675195dda7409bef58f3da7a84 1572b4deaa9af9e0878775e52aa126db3f659781\nfeff5db6374620b8403e144e0331a0f4d29cc4be 453170e441738962cabb9a39a2c647fc8a4e6987\n9e73d9993fb388e482e19cd050cef23d49ea45ae 79bfcef439cc6e39ac10eada82d0525df3282a4c\n6e0efdfebee82ad72151a8029acf48a8697426e4 0138cc598b4f4d90669e8a68ffffdf4e4885e78c\n95cd9373a51cb2f61e3d03a12d4ad3eafe85580d 9f25c727fe4964ca871cb6371b1127c1c9e96c66\neeb6bfa3ddc1607c5991e27362bba6d9fc004db7 ce9120bdfb13fd46417f8994f4ffc311622ab216\na479bc26de1460513c00be5294ee19c928dc43dc ecabc9fa3fbd5e3a4168452c116d11259dcffa67\nc8495df1678c527672fed67d2742cf2d438b71c2 cc03716f06cbd39aa2c0e546c2cbb42f8d936e25\nc71d0442aa87805fedec1b29dac87ad9d4d62794 502d0a965cfe6b4b4432788c4cc94a6912192a24\n73689f5c2eca4827edbcb729aafe624eda26e654 7a368955340a754ac935f6716fab43df07b97733\n93a933123abb5071d9917814488f19993b7d123c ad2ed91df2634cce88ee4294351f979bfd0c0585\n6c9a6a9915147225bdca0e7c221e4532505f301c 00ba2fd52d0436e4bab968a87bc5bb0873f61049\n15713779550c58b8811da369893908b960cd9a60 2607431eca2ee63955af58fc6c4affb3981577a2\n632d267fa824201f61346378b3e14ed721775ed9 12d8912806f74ca30095905404cf9fed618e7b5e\n65644b3c7cf77734e3ace19f430f1fc78b53c87f 0768c7f7c9396ce84a43e856636b71720e9b1b30\n29005f497e08392ce8d6c905e2f5ebee8ff7cf10 18597e4b27c13f372f53a7158784c585653389ea\n7869098ccf54f93f9c9d3691970b904f891b8367 65506ff5d9d5daa7cb77ba3edfc4560ad783512f\n94f258f2c172a81119f1f4bd9dd1caa37fcdb8fb ab7482672187e56522961df811ab91f154056bde\n502cae7ba248be58fb8795e11e67af31cc52991a 33137407931b61ea4c38384fc65cc9faae3603c1\nd5d1a6d8dc4238dd6b7d0868d3b6730d3a8360b4 14e2be40479bc7f67498735418d7fb33c4f467a9\n9b04f8457e78b05a8743f5f34dad26337b828f5a aea3df7e5830d925c69b82c01eb3746fc87da412\n0d336ab775056cba54257a756ee92863d03b201b 1d6ef2aaeb6a6ff790d0df6aa2c70a1a843b9b01\n1a5268f9b1fce090c07030996e0537885b303b2e a29793e9117894b8673843c029cf173a298b9414\nc570363faa1f7e326ae4f0158aa0b1db8a113acc 60a7217dc44adf897fff1898036c126da4911db1\n6952c234ae496f8e303f82c74ed4fc499e4ac22d 3c391a51ebeb45d411ed10abd479aee3a324ae0d\n270e272b376fc9a3e930690387597348c99b33dc 1cb2c009160286f07d6f4d0ea42c303fc7188429\ne5aeeafcfc4dbb01a6f79e9f77bb3e0a40f946e3 43fd690cc354a2bfa5203e7aaf4b6868bd3c1fdb\nd4c800485fe55bb4417d15c1c88f068889abdee7 a8b2d6033b4afdf3ccb5743f470a9ae85488cb79\n79783127d808d2bbf882a77eae8450f05b87547d 45bce2ca87c98ed403de36438a2a75c09c1c8e02\n47db0dd0acf143985f34be0920f1dfbba686d016 3428cd0fb1fe3b7e32bf02997e533726a3a0f289\n1380e2298f8afb57122686107148c05d792ca095 2dc0434a60b8b9c17562a0648297ce7b9a034e4e\n63e11580ae6e93950568e20ca2bc21921bdedae6 78efe34fe68a51cff2f89e6e19ce40a2d33162a1\n48bed97d55de7d8399df83be46e7feaa04859e61 270aee41fd386c46d49b550570b17f0ef559dbd9\ne0e2ff0efb68e7d9715d4c031a89150e760a9e24 5cad559da86e5f857021442703bce8f32ad8f36b\n22e9a4ee0e0582b38b03ded2de63b48ed8f4888e c7f269d05d5f456fa6979fe3880269ffac34219f\n7c220c67f35f5be939ae7b7c5969493ac5f0cf12 3d631a2459f94623813e79051b77d8b372ddabbf\n9437072a5f104641cc122a0b609532aea31be827 00fc05e1f10da1bad3b9ebe4ab3949f67a46de0d\n68003d61e337a50d72e1a93f3c4f85094863751d 0c089b9e5134b289275a4072a3e5338da556b3e1\n46b124cf7bcf0231176fa3e9bb4f36d9aaed20e8 81324bd59dceaaa3d4cbcc6bd49118708fb1f460\n679f2dcb692e95a68b51c3eaaf11bc8572c142d0 50945e14d018906cadbcc2892ae68f188671a497\nc5e36e48be14007049cc11b5544a930c29425f2d bcf91241df54823fefc008691f3072f280e27a4b\n2990b6f3b1108dec6f64414da987836c54593414 b5293b6ec2f18532ebd60e542295ea1ec69f45c0\n0d04bdc5102da74147c6d65e26e83813ce94fe3a 6f9386331d86e82ad0bf87669f4e46a2ef6a85a0\n92bbeb90016ae8d3491e8fd65d9fefa3cc8a4b33 357dfc7e9b2d0e4cee2af9c7271a9d8aa91457a5\n5e10f9b8689bdfc813c1affecfa5c84b5f4be42b 269305b063ee495d3dfc84c388bd14476b28d888\nead956e38f0c35c3c9a56fcf1ab4ac945b5a48a9 a39b5defca94a5006def611ffde9f3cd27d3bcfe\neee9bcdaf54a620d7f02fa3b79f07c0473a6ef04 82c9a875e71d7a73f39ac597ecfd500436f19e70\n2f6e0ada77e501c7f0f1673e1f0a0c74649a6849 810dd9843dce06bad6f41546d2a4edb35ac790e6\n33a188208a69e085476b19af18d1bb47ff9f9ecd c0d670298536ec08505c062f700e2dc94e118d79\naba5d64af12b58c2cb17fe1c035160811d45d900 50f295cd27bb2610001ee7485006d856714ef045\n18d4f66d22c11a174079f9e187f1bc22b9f55cef 81b103919366a0725151ec0cf9c5489a8a30e4d5\nddd8425bbb3171dee7915ad923e36ef2790964ee 591f2338b1c95f0ab71a1cb05984a81ea4c9815e\n0b06a6403567e935fc44ff2366a8eb2f23f3983f 0b289c39ee602e45373bb8329942e05141ba08cc\na9dfc0da429efba58d148e180256f86e220407f8 60f36b9f48de4e105e73b9819cb4d4a0423b097f\ne33178a32c8583b59d95ff83905c20c31e8c7736 f1780118acc016c91e5362c09c6c62de177cdef0\n4c9afe880483a03889a5058a23abd78648530cd0 5734d3b73ba575b7e23f2f5dad596daa6d8b9360\n1e6092210b1e578298a2b290c7e33df1c3e5ba4e fae7f7eb996ad4750bb3ff0eb7e9ed7a169ea2f9\nb80cd2f6758a22504d9c89f80bfeed6465411ef3 ab624d31fd32db2f9b6dffe29bf4cd32a964684c\n26d82ba592f95693e5ffde4b75ed5a61292b9581 e88a009e9b8f627c392064bdfb420a7508601d7c\n3311113c70a44c2840e76c2266657bae40024580 7dbfbfae1acce2692f8370ffda9bfa49a378aa0a\nf259b3f9c6bc57016fbec08114a3e4d28b074be0 1ffb2ecee105fe9d0b15398cf1fcea824bc43bdc\nc63a70e0e926d7472242a12393472ef0a01ac412 df5e4d3e25cf6706ae54ac8c64d941df0f14c212\n79fd79e93ae758cfccc8d46a907493e173cfa6b6 50cc89ee22a05fd7df31a6fac34c1c9bbccdd31a\n9cfbaa7b2c0a392e32b1ccc93c212367ecb8c7f6 26018d17d41d3a7e3e3afb9d5140751ecf5aea10\n06af2511d6baf53c1e4e88fb797599c6145906de 999ffde0fb654c9ad498c58c3bef21d7c6e30afe\n4807ed8f8adf950818ea62b9f2439c787d4bca8b c7c752e64ff164474dbc71436af8d15e1eaa4560\n024e701e9a698da371c02c01d09e9fec1310e510 e8a36f0dd60554e616fb5fe14d7431eeecf25b33\nc28a0eab2fd86635cce52b6cbbd99516e100f796 fbb12fcafe8caa6c970c798aded150728b2e1319\n7008358a5fd9bfbe93882a9c33493e9c3ee77405 836aa0b01d5120ce3c1c2522c4025d0d503e1f48\nfafdcefdc4b7ab6b050c1bfadd8eff586de0583a 986cf61a6cc805c9bdfd34731b2a88f698079ef7\n4ec4a1de57b843772e73646a66b2130304c99964 adb7a58484496325a8ccd5e9e47ae8ede6ccc9ab\n969d0abcec5a0469a1c5ef6973ca016d35762638 1419556a443908145d4c173345133251a0279958\n096b1fda37cc02070b876697527c70c654b5e01f 13297e5272721af3f19add0d2be72a9da10d4e72\n017d4609d5bf74be053de19b71da999e6f10afc1 5fbff8b3df284ca12bd6cffc733341106219b911\n25919f6abed12fd3aa17f8185cfefd6e7de37599 8789a6bfbaf1d7ac818d339e3170177d3a66c2f1\nbc85a678d217e9895c470e47924365a948c147b7 9232c11ac49cd476828893e03be67653bd509141\nbcb20d33291afaf826813f7e96e1992f5bb12fc3 bd74aa99a245e0f082e53666548576c0c4fa3308\n243d5c24b5971d7f046161ebfed49a11f31013df 37ead2af19cc3c740b0bd74b8b9a3a88a8b717b2\n998d9ca549beebb1775f80d8980e1c6281acd0fb 84609415d2778ccaa4f114020be56ebe440cab26\nbc8cf84264e321f7d17b8f4c352312df0c042396 f78c42b259ca1339e9f838445028f5652279ff5a\n39b9e55880de9077405b0f150498349a21d7cfce 4873c21b60a6046185c91c2c21ec6711cdb444ec\n9f227541a4d955e3f128560209777e3ab3b34e65 05621c6024cbca3fe141566d1092c73d01d4e439\n80f1d23b20c91f2564037568ebcba5f91d5710ed aa350e7182a2a21e8454d80ba66a4cf57a7bb5ff\n9370465cfcdd3fd74173a0b58fe9f456f41dc4c0 8bcb4fe6980d9c2e8afc031041955cd5e8995773\n0603243b6df63f90cd8d6729fae81234b73acfdb 782ce1a254f50130a32b435d637c5ecffb478788\nc034af4f80ebf3995c1ca05a498017a2cb48d634 d8dc0a1dd3bd77876a9a06f715d0ac6aa7a4d919\n68be43907f4685249887dd61aff8e9d0f8072927 5e89d7767150bfb9db5731d0003443f35b7f2e20\n75d18b4857892ae55a275cff224e65d929b4e97b 18100c32c0e24b63faedc0e6da71b17209788d26\ne2ebf37272ed9ae03a34d853a6376e1132719242 b71772d9ee45fb0eb8b8cbe28e8b4d67179e17b2\n3180ebc402c337fa3ca7b126ddd461b899315521 6765e4a0c9eda9da3a4264bced80fcbdc4c414ce\n58774deaf1d07a45732d14d5187fb549622e78cd 59ae5e04a4f9c6f9f803fcaee90ddd8241728565\n785aec82b83d53297840dc147732b3e7a5a8aab0 c794f85a342616d4ae8d7951f032950a61edb75b\nf2e9442084a831a139ce190cd123d44cea511d01 7c4deb9110a6ef5253365b388c0efc70231c9975\n21926e0673287da5f9a457f079a0ff0fb8e1bf21 4dd5ac84cf8e1ce9ef209e218d1fed8244cd4cfd\nc6aea430830a32537eebe8ed204cf78d59e4d200 6f0758b1053bb4b2613145960804a6c091b6e9f1\n580a11908d9f23231e8ca6ff46f71993951101fe 48e4f6f4faa7a9998f002939796a97316201e54c\nf7178bdca279a8956cf063e2f019755740a9f6f9 02e85f5b8d91fb4496154f251b743cd76f85bb05\nbcf995842feae6519c502a8b7308cc156702f185 6312f0bace1bb7e0bb08721525365d1f61753698\n69af64ccf9e48d8ea07aa4fb7433e43d8bc6596e 7bfd842cb19b7faaf875fe5d43c9e1b092847e17\nc38c7b3f1ec1a5ae97b5a44977e85a178728b032 06b5d951e9c7e0e6211bd1e0172d3aad325387db\n08a26e2ddc6ce03b534d2bf4050fcc505efa3d98 fd3bba47dbe1aa19f1f567a27257adc0f04e17ad\nb09b0522fc76b36c506d71b5250073aa32051077 e49fc6d6fc638e7a531bdab1b96ea494dcbb921a\nc272b70c7916303c969811b412b09dff61c27b03 ac9cfb416e7c90ccc9de826f02f5bf5128d58797\n507adc445d3f02394fb99e1a73c1541224ab62e5 e9b0c3aacd53c20661757493f33d856fefa4d3b0\n1f03907e5297370256f0fc3db491d34811828e5e 12d4a6668cef3bebbd2dc8c01a7814ab38166179\n36ae6335b42e69cf0b240d52b4988c046e9f63ae 47a027752bab84722924ffad6c8296e01a475865\ne8f20e37c586e7bf02ba9af9f97400a82f4c707c f63deabfed561a1e59b39a095dabf169c1707e9c\n6538148515979c03157009ecad64fb0bf4df48b7 ce752926f66308cf1dffdd568a29aa84fba3c70f\nf656af96e2a44439191db3507825b66a0eb4965d 236df3ebf31cef25f53748117b5c7727208c4f1f\nbac24de1e0c8eb8db4d4726cd83bcbf0e00ece55 934e5f1078ed6a9ffed6999de81009e2f07cdd5d\n641df416e7589728e3532311e06ba960542f7f55 c9777dd28784b4091c0655f260280fc349d3dcfb\n4b6894f8f0a7418fd76e6992b64695477ce812c3 50f1eebd1a2fd4538d8276c4582501707606c75c\na0c1a7a16654550fb60eeff472b2acc76e8a97e2 625e2be8829245db59b31a9a01e7dc1e6d696053\nc55fc2f466e54f4138b94b566dfcff858805b961 0ed719af4b15c985365c670fa98b36c6ff5e6545\nf66edb3a99e2d285d2e081559cda8b975b93dfc0 808152c34ef7bde137b0ede91853f2fc6a1d29bf\nb69f97d5723d9c04e939f9d8a33c1ccdff4528be 8172abc3aafaa6af9d022a957b5fafd0e6543a96\n1149bb17c0d9bfe84e50650e7f31243bb735a48e bed1b9bec250e119f3bcdf6545a3265d06fe22e7\n6f563b1bd694657f7d3b70ad53c2f43e60b0aee0 d13ff7e983b5cfa90491a968e18a4dd5d5dde05a\nce7f94727d9188ac3210203dd0ddcf1e4ca64b89 8bece2018628e584111f2cc5d685bc725d8dbc85\n65420ec423c6d1e7d92d24481c826786a59be808 a29333d3b760cbacb47b1d249a172e59f4860fd0\nc602325e0936c2f46322f36901d1aa89a3c08046 68427e8564874da1060319001f3e3f7b92b052ba\ncddfd3223471109b33a93925a29fedba6919429d 978df75020178baeeb0a1308cf2056479b92204b\n4b12c7783d6e81abd37f72dc30f58952f88f3462 e713367c0e8e0da2b216f0df0abbee71446c1519\n6e8a1be930279a1cb815ce38e9b1d71ecb6cf848 86ce08cab00e64d5aa5136af0126ca8004407165\n3566cc8d9c53e2be53d91af6d4e2d21ae36aa76c 6f29c92322ed86b9bfda1ef0d6a8afc9a4ade9db\n4cd4049effa4682f9c1473a85431f0de58483ffc 0edd1dd6b8fc6b1ab8021f47b9ad8af310f373be\nf6a238b6d91072b57c8cc14a498b29d078395325 0b9e351abfa279fc5409f6784f30d0f4bf05a214\n83f1efd3ff706771a7ea0660280f13d8c8df9331 8229a074f3740206c0d5f7fa5dc3484621f8a97e\nc7183c1291af18717589ce00e2b448a540e538c5 f35d43286baff157f9b5de861492b646c0b3b9a1\ncec8480e5551f9f4dbabae951871588569ec8b6a 498de8c305103a0daf8701ef5e763cb472eaea88\neff281833bec635d2d44ac5c68a37b065c4be7b0 f9e71fe77f9dbb1e4b30fcaf48fee52170dc0555\n6d702290282e7e48d0daa13309ba424f1c2fc6d0 fbc2d5c45f08514e5ae47e8a2adb02dc81319a79\na8f4429d2455c3959b7c7a4a70445121885e3262 bd1ab1c3cf9572657290fad3995bb990cc61a218\n51eda82f7c86fe939cfd09e30fed91c775a68adb 47554fa7cb7d6aa2befeb56bb612fe7590923c93\n13aadae1a23a28b2994e77af1d948d38b1b858ea 8bc94e54680a62beb37243220cf0ac77a0dedc5b\ndeece3e0da5f51fc7e36d203724116b5684ef723 1a0782249b9a4d828a4f4c86da4091e5968d7d9a\n85414e168b8ba4065ffebd114e21458eb239b648 f7873ee49bf7380830551f4b0077e47fa08cc7d0\n04ac606636a387b63d831750cf8739a4a54c450b 8ddf9777e4ee2f277c9fa780c004d4d8d2ca73d3\n50b71284064078b294259681964646fcb558d7ab 2cf996630496efc20f404acebb6d45625d452b4d\nfda5ee8e872218a3da0cd8efb4a38abfe9f5a2ce ba67223d58da2e5e9e7d507227ae42539e77cd18\n3fcb6aeec2658a10d4e499d2244dbd38a23cdac8 7e6eeb30a54037d2ede923b73114b2d801207041\nc0b2825fc9b4485cc09fef5d409f9e903db84c36 0a54cea7f0383a25a03515c6c4fdf19a1c7c0208\nc0d4f26549be994000a28965377822c92316c68f fb685a0ee81a4439cc3d59ce24ea273ca775c107\n3a288c23a5b3524db3885cf4149f8e380d73f133 876da6b6fc3a7d37bd2849ec1c1a8c515ff4ba90\n61658341ad5e7bdb345e4071820fe70d74c81632 1c67966fb7476b195b81dd03ac16765ea43387cd\n88c09b5b69d6fccdcb30d5ae030183128948f23a 11aba5644c7ea61cf93f8ff6f7d575368af58ae5\n899b076eea7c2d4d8957c62eab9a25d3e1acffb1 fbf1c7fbf5e5b070ec3d757839f8a82aa08abb1e\na7c71b67defd45abb4d7ed9c2d4e9d9d8602fe43 9411709f4d1e9080cd0538c5a114145806ae4e4f\n3e5b7652c9fa4ac2307414fc31631527f756d6ce 203856c3b9ff9aec0317f5dc014397fae8e34c22\n400a20480c38a5d6473186afc2a4fb3ca263159c 32df6d740de3f9fcd9af1b7e5fe93b90605473e8\n70d867563a981e9df44d1608637cdf430c14bbeb 33ae81367d0730aaed76af8185aa95ba0cfe1da6\n41263d8b3b1bcda1fa4f529b84ebdcdd714a4260 3438863c3c48ca44488a0dcbbe13475240ce690b\n176bc526446edc1ecdecb67c68b9a72c4372a2d9 a7542c9e61b17386b595f0ec7e7a334297856334\n2315910d5fb508bf53651fad0e5b8ad1b9daf307 0716327348f761f0e3c270898243d1e0df1074c3\n1f9144f282c5be436a719b7cb601a639b5748ef3 73c96ce45ab58a077256dc1d5e92f45349926188\n9182cf531736d982274369bb7e13002ccc2a9e4a 441e7f9cb7a1702c628f67b4733f4c690cf8c736\n70768f6a917a11b29750e17941bb5ada894a9378 d7b93ef0562f458080a77e382dcd06ea12b8ca0f\n25e9ca97b9615b1ea2d5c8825bb35bbff7c9bba9 bed0485f16da2250dc30d0eb8d524f90e346c500\n012929cf18322c5642754eed07e10e7a4eb54dd2 d06f0ef2d75b6f57eb78eeca53abbb4a99584860\n0c27677953a49a946eee6e1e40c46bfef878769c a80fb54184d3fbeb06fa982a11e5e66b7841ee59\na749985c34d7449c2a329ba68dd67f094d5ec1be 9f1240c436990130a27a2557e3c11a2b7ba93840\n64db71b71be41b3de2047a3a681617414cfe8053 44386af236241daf81978ec2105e7fabee05c59e\nedc77b5fe8d3bd5200a6c4bc2c54e9c47c79d000 d3a677ee6f08b02b39a2597415c9710a64a009e4\nccd42d9b074a40a89df4b2984748740896b33d31 88d6ab8dbd0be2663e2149b5267a7452274e8857\nb59b0af95236d0f90d894543a73818e3b49c9d02 69d5d7e63a7fed08c0b56bade917e0d1b7b0a7f8\nca0559689e725ee357dadd39b4f9c5b181d2d92a 031b336dbc8dd9abd7b5c04cc1cfd5cfe5416906\n65c99c5fc7b9786aa90040fe2cf343208fd30077 326a8545d6624eed8716b25b3e4915187f6c68de\n6e8c86fec78d40653eccf8a97077b827c3294968 1dfaff949e16e510a25dd4ddef907bb6c1f60e76\n37d4ed0eb7b4294d1ada6418243326d5baab8281 29b6dc99edd5a169ff124eb3513f6679c9fd6790\n39b0113629135a3b018b86c2c98f358a2393c28d 3cb33c25d0b854f01edf4bfd1f2cc58266ccd825\nab78d107f0e09a2aff8815a9b7e62865cf32904b e5fafa5fddcce11be9d0e1ea9dca316701434350\n459018cc5c422dd765aeb5e8e5047e17b42ce315 76b855f72e467f306f0cde2edf4edbdef0f0a747\n06f8795b0ab11e054ca8aea24bca45be2bfb2e96 3e4ba38c6336de0b11c7e18aa7655c078f75dde3\nf415252a458a1099ca573ce1f61cc694351ab960 e7471d0a327a2171b28890e6af0456e5c5132f6c\nd0d79e6ce594422c7eedf2117ce86d6a410d2407 cb066f3e6fd9db805c7327724f9f8b2eb1930a70\n6e57ed8b2c8884a504999300f42be615d7779ebd 3315e711f69001a3774ea5eafc18bd06f833d6bd\n595f93cce8dc6463296fcbac4b1119bd61fba931 5e97bb99624132d0eb3030af4703b5e70e69b243\nb794225ea884ceb6be7b8feccf90c1ae0cc0e6e4 74848650a5d05793a659e2a7b9c941732268af5d\nb9251d1d42dd26b04d2b8b43dfca7d0a96332a51 5620ac364f611b4c0e8bb7c8e6d8751cee83998f\nbb729096f6bd2157d4a26060cf5e7a2b9901aca1 7cc017781c5adafc2235c4cbe40c67cf6effd215\n7ec858b32ecebf506155d7ab46ca563f5cee4501 30dfef13b3f5926248c5642a6d03d909028a9f5e\n1ead1add4f378001e79f3bf837c119d75228a11e 9624a56d143b3868780364064f01679c80e8c30d\neb816ec446440debbb128963698bcdd4c056ca35 7552108d7370584279a35bd3c803d29cda0d92fe\nd47515f720101e0841ec980b6bcd6f414420933e 238cb9f3fddecd61394c836d65e5b2d9bd7fe1af\n17577a7bde3eb1815606da381aa60b8808080593 fde3a397dde50db7c7d8dd45cdec70d43b3693f2\nc47b59043b6f204d3ce349b74af9d562dceee737 53fbebea830e28a5e75501909d5592ffc3ead57f\n98826e3e8b237bfb05386826a90769f9ac55c132 590bc20fdbc5d0c5abfe2b1bc1fa4f95faf26f77\ne2d95226cb9825de7c39d1d773203dd0430cadf6 124222f77a6046ec0a187c4cc8aec66f31609cc7\nbb956a73c86069a9ea9eb036b311341eb9abcb2a 695328cc0f5c70599c7ceefcba128761e4e28f9c\n69d2d5769f089316913b03fbc4361b2416cab778 c97df4fead16d1795e484af193bf4dc9672479dd\n28a262322aa47f82fab74271ca30bb40640693e1 bf7dc859d443879ed6ea32f683cf54415cbf8489\n81ce489787b91aeb86eb04b6f7bfe12299f887d7 6448f5ba97a3192cc36dc2cdabb7a6109ed163e6\nc8cb65369b9817d494ded503ed189276845370b1 7f89f04dc686ff410060bf1e99d89481203e66c1\n7f44ee3f3334a005478b456183b01ae2ab065ae4 b61c64e6ba3bbe6ab30c4b5741f0d3986aba70f9\n4caf8b7cf21b9f209937a888e84eff5d9ebc97c8 a4fc5e9b18b63a4515fc93f5af78e1f43d995581\nea33443153af366f6c7ce2a5f2f775f21da13378 ad52c9b9d62bf7e9c420853b1d0649b5c8c2751d\n55c82d59b9a167ee16f71df827ff45512b92d9ac 79f9f04bbc793fd99ad388e0c8d4adc1c2bdea5e\n0a0e7a301d7a2812c19a40eae90543fc9c0376e6 fdeb0113365731e9fd44496c8fe26cd0bfe10def\n673c092fd19950a10576ba62791d91b17d5394cc f5e6f98948628f66b69429674edc4d2f1f2ffcb2\naba3df4f81cbf929ba6cf82470bd2679df95beb4 601eb1da27bcf7be6dc6c3b7e1209359df83f932\ne9d5286e76079a0cacf74440b4a60c2a5af36ed8 d47075e5a54fadeba09587f755d2567cdd91a6fc\n60fcbde2b1431f842d00dc78ecbc397727c16d2d 844e849f6131446834d1f8b5741b903b92159ffd\n7434ee4042f1ecdc914361b06f2bdae71bb1e6ff f6dd6cae676d529fc853e2346a5fa4eb1fab09bb\ne60519fbd2636fe3161bac2e7102fca475444d98 40f00221ac56551147dbefa337cd525938d084ce\nc132fd3816756120e325c0a7169ea8d24c85f532 1409015a7c68d41972de95ec04bd8ddd0f71720c\n02d8bc968de1126d71b91d3292b1fc1889885d3c 6b32756078144a828f64893a1c1f470eda3f9fce\n578b9aad6f73b71ebd3016fe51508de58019add6 ab68d0edb0f340ce2f0abd6fd32b5b4e5591ddbb\n823f545040f2c6540f3f272ea204ce45c701b53f 3833681e2ece8f2bdc22ffd4ad574b60936b35f1\n4d484e3ab2e982962b7322ad4490423300babb62 3438a069c31b503768ad2b448861f5eac4397dec\nb90c7678a5aff4670c579e90709edad0c52dc66f 72df56be5949b7de791dd3922dca54916d7ed47f\naca265d4278b94f78fb4ccf803ca561d7cffd638 4e656ed3ea2361e238d9b7de4f4fd1933a00f4dd\nd4651027f4cef5f5cf972c3f6c70c5cf8930cb83 0b617fcaea888f315ff1bf1ce18578e90b24aaa5\nba4c9c0d4cc354f33161f1e515309d829f73b240 270394b9b575dee8b06c352b487b09681b517957\na91e4b9ef12177471368508a293f8bdde3c9fb66 52ad827b5d500537773924dbf7fc12c0567c3428\n6535259c7c5983de3ea1f39093fd34904dc5e293 116357293f402e23c4c45ca701abaa5362d8ce72\na7dd9ddff799d199c1966379a80c8c2ac5fff938 178f115df4f2695f0ceb77a151d2a9d09e255c49\n038c953cb9d3ca964537cf2a4f7143b0021856bc 6d47a029fd04a2cfa9a9ac4ed7ea7f865687b702\n2b298e6274a7782bdd995e46f67981e49e28f223 9ef59cec58f1f3ff2302b7aed7d2f0e99596d37c\n4410d640a16656867d001151a55abbf48bf4ad5b 372a5bbaa69670ab229a21e6f41dcb8073c25b0d\na36b58a75daabcc32e4af43f2e90d8d9a2441d90 159b797ae36e988c443e618443017e3aee64cbda\n96dd510268ecabd3a5deb4050b89e72c90b5fcd6 1218fe61baa9db48f63d3cf4df465b772796d05b\n3b4e1c1820341a8c305445f08df8c2c43d9542a6 0dd68e7c8205ac6a4b04cdc78a6e27f56cc9ec55\n4681a4cd10b1e56a3f6ad3c4280fd0ab2e2a0dd4 f4034aa5002a705a5dc7735b547de8e3cc961199\n7ea2ad464638b3332a02e89909b7c53c92b91085 4560e968cae2b191c8b854c68807537d060e7f39\nfa2fe9658874c00ec80753c5521b2c797c044b14 1a5b1642feae5210e0dcfa875b4fefb96e672181\ncb6d9d150de9c4fbd681bd29a8ff6c605868ff5b 73838fbf5adb8c3552cd3d68b2363d7cc358581d\nd192004ef2857b1a8f817e108ad88416c9d470ec 4969ac35fd2efea94b6daee878647498f461fd56\n4937fdb7bee7a352c28644f0b50cc83c1a62f0d2 8991db9ba3fd6696256e93af841d274d957167b7\nc61190daa23c17aec2c0510daf747b57eef3abe0 8e6a8aa7ac590157758915dbb92b6b1c033e2b58\n28b2730b341772a50fb635eaa887005dfaab0218 5470ecd0405531156685ef32fa6c8b1c8b41b542\n482111119d0bf3db8b73cef7997d0410ad7af0d6 ce921b0f100df986af6e04b385d341b7e50a71bf\n85ce8ce85653f61444a1f2a7c48f6ac8ecd021f6 1fa318b0d8635f0e2df55ff5d1dfa3ecce8e7cdb\n2b2a3778f304a162c4c6f07cd30f71921f20a122 d367686fd15f5ab0e150f7c488e4d9f09fb637e8\n6af77de2c3726d144c7f9ff0c80341863b3f031a 1f1497234882f0e1d40f954391fe2709b5e34a43\ncd2656d104714d6ecf295a85c3fd7c02505ac37a 5b65e0243fe20bcd2c0a6b3446cf00a0b3a895eb\n517121e2cad23bb5a5b1ee27a4840a836a5910fc 0aeceb3a2b69739c8977c638f6cbef2256af41d3\n7958e2e87692c08b3a055a153743a43e8982a5c5 cb2976fca577d3e9e37441d773454f8d1f1cb322\n2c398f6cc79171f95f0a26c5fbb10100f5d38caf e1393738870e5e112f56b28650fa18bafaa0d223\n31d038b6a6fc74787dcc4767417eb0a0d5e8c530 dd4356968ec6e15d7cd1655ba411f9af5d86e80a\nd3c4639f5e0d0d45d98a880601c502b2ad05c9a5 e9559b5cc8593b0325964214ba9f3b094c961e27\n5e694c9ad268ac5852e8f477b70a243e3e4f1bf3 b719cbe36d955ffb615fd1a62a5db81ebcfbc7f0\n219392493d907a838c1fd994804a47f4347b6b57 12f0d83c15d7c1d91e200cff5970e4513c5a2ec7\nf6d006c6ad3f9ac27bc1d6b429f180a00aaa72b8 02034b057f9efa8404eb27484b6314cd27cae8c9\n9a78a4ed06999c4e7afa153c5493535badc68930 c52bd0592fcec10a6de8440df70f2cc89cfec345\nab585345e3dd5fe5fd473402456b7f0f3a5f696c 173cedb92537b0059a20369c5da2f18bd6d17417\n1477601a5064be9a9ea2ff3d39c37be72ecad6ae 2bf9fb1fbc74617db349109b285b22c8e149ee33\nf742021e7676380f8e416dfd1af1463cce116ad0 bad8fd9381f6ef4adafa84b626781d26abecc645\n0399a7c1c76b1852168265a00e8c323d954d5333 bffa5e7a84b8890c70e46fbb955c9c58e5113071\n8c85c563b67f2e9a7e30134cf962d8b89ddd398e d940c7bf04768368297898e87aae1132500d513d\n10585c9d728b90cc38904cc556fc2c5e30fd4488 d0d218f11b3a5f35482911f8bc6a8a2a69ef7d66\n79098df8e8bfa1874c5e8edf73dfd9561268c906 2061db650bdb088fc9c3339b57188abdd09d7071\n61486b52c96f368726f4042c1143d3245da1f1bf c1a8bd685525610c31af3172e5921d63de89ae64\n0c06c3e3da92e51fff56c22aba745396bca38cff fa397e4dd0c184b787803b9c330c026d451b543a\n5be190af57fcd43f1db90aa412359f0e4845e8d9 4b0584539d112bb6268411d08c7cae26690330d6\n4e0475505033584007cf102aa4a30607553bb0b6 f8cb6410ce1176a1195588a171cb027b0afc0209\n109275858de39113bc6e5fdee3403d3581183fc7 bbc76886294059eea5f316d47d6598a657453338\nbf7af9ee3f209d41601db1ed6e945952d790feec be564dd2fe4b6086dc3ea3eccb007e0ffed8cb7e\ncb8c7174bab685ca47c18484f61fbf354f0d505f d194cbced7d03d23ea830a5f7a1680b586bb6e9c\n232681f109861f440a15babca85c9c9eb7038c98 773a060c0f9ebc8b006d022c0f4c785a880f7ed8\na85fe1baa52336f471bee7e3389408e28597fb16 a4f6bcefdd797e3510263797d0dcba30a3e49589\n7322f34ab724797822311c3f6033d37fc99f9ab0 bb7f87b038ece47a71dc3446e1939e9635696de1\n4a9e15f4fde3e3071df9223dccf72b755df0a28d 64bc141ed5561b744781de9ffc17a55ce2c26e1f\ndaeacd248c94ab8524477fe13346a1c2694847f5 aee324d7e43f3b4b00eba96470cb3c26318f24be\nc98ccd91f3f0b915ee7c367707b5a24688539a3b 0b0bf05bb85db3e6599ef141f4b35edf8569028c\n0a9a8eea7b342fbf45e4399ea138a2766ba5e6b9 62dc80bc9b2cb6547218c227a727beb950b47ff5\nd1f9733f7aee3111fb74f04ccb9309b0366dfb53 b966c52d3c037b4fe761c3c75edc0a5b9a0d4cfa\n5eba03c34009a61bd8c92c234c22decc52b787d6 a48b583e204d6eba7f96acc50bdf20b78216a8eb\nffbd89f5ebed568b43604d42ac2f96eee84413e5 ba347ec4b8870addc50ce2ac3c08e7c51ad4e718\n59c79bd649dccbbf29dbf3f519f3343da31906ff 83917ae07110180f546432683e27184da59424cd\n06d08740f3d5b4a52b3e9f94eb9a943f99ca7d58 0b3d3551a9a9e6c56e9cc072c601be17d80a7c1e\n57643683b2a703ff601452b32935d7c3a6d812c7 bbb40be6b00f30f88b7be073cecc7304b5bfc6fb\nf2b44de1c64191bab3ce205f71f59a2f491fa910 a1a75180f05ec2591276cf33501716d55765c9f6\n4734d787938f2f41155a5d34f7a9c01e3fa3966d 6f09b8734609419b8385123a5e887ce4ca8e1f73\n1dfb52029109c95b59b319328aa3602ad6f1fbfa 369d5c5625e3aa404328693974b2017f2be6c454\n10437276e524c83f1f33f137c9be9e6d2a3f861c a4ac52df92a4aedc6d9de131231585cc0af95d5c\nb7a31aec1c2080674243043c1b0304963a8c1717 0d0f90771b13be9cf9ca88804fd79279b81ae814\n2bda6a460b0083eeb73793027ff70a5c18bb6229 580c1845cd07f5c823793f7c419a489f36c32488\n44a8823ecc8f1c77a9a007e32658cb854dc2e4b1 96628722e4aac15c9a67be9fd2b3077538946c58\n4c8c49f1a035fd9fbc691bd3bfde554b3ace676a 605ae8748b00e1aee918e61f68cb67d16ff8dd75\n40823554f6f6db5921c0baa3f95cad2a91bce843 2cf9d5e3e87f60db243209090863880dafc874ed\nc579b8a97af8dcd2d3911e91626585fccc1dd5e9 abe7310141ef70b839fe125ea7bf8fc901cb285b\n42fe28b3247ffdc73096eaaedfdec7aba2ae5b20 b81812ef99616e71dc41d0e70c408622c74ce319\ne725a6552b57d1adff8c30a449f118f1b5eb3ef6 2fc0e9c090182002b305331bf4c04d4a5540cd9b\ncb7802768abaa806003b106fd359accdc7006375 61194b0550e2a62ae1d0b66e8344a8ec344230bc\n39aa91232a6a2496ce2f72731e96b2540f5b881c fc4d3f158e92b2ff9c1eee62d5b2dc46a954655d\ne222c44b0a6ee4900b95b47a28c322f0602ab7be 86ef29aab9ff23a5d97199c536dbd4883aac8fe8\nf4e2d0b75789d9c02a982d0e99b5350bef3e24e7 ce74a92e83b295915dd906325e5e9577175ee1a4\nb82c6eb9bf0f64e572746b7ad9bafda09d54b2b4 24dbc24c067220810603436fa8b41ef448c39c45\n516f82017de9a8998165bf76bcb1146e1ef41065 fa6e4c4b0acd06ef2b0025899d3807d5a016fd4a\ned560873a368ecc8ba5068cc5fb2428fc5f0c8b1 1e0f8946bc0095e2b7ffa2b0d0c69ef3103517b0\n9a633ba53c015cd31c3f7080369934423d1b3c44 d730da306c047ade7e8fc8affd4b7db4bd5862db\nada88a17c3f7899be071f48c70843b77128bd8c1 10899ca10b0d71b1523247caa423a0197dcaf57e\n9d555f32d200fed53c6f515917d2c8979983a296 6cf2f92be980cf0222964ec285b775d310498c8d\ncd67620689269774fdbf117611f852cebeeba3f9 14b4d304bc52ede86286df13432f210b3783e8c3\n7ad2a60c26cf351450c0b34acfdc2085426e6afa a5951b1677609ce8c7f3ebf02a56e9ac1bb56ed2\n080d9ebc9b4be51014c3b7e78d6c876ba1edd1c9 1eb69fdcc9af1a6d44fbd2651f5e495d9b19bd56\n3a7fb09b468cf19bee4ce2c107e41e750e4d0e35 aba84aab5797fc30675514aca9ba026be7e9ffe1\n8e34aa26ac36d4aa03ff2b454dd70ac0c25c5b36 5260e56e602af915601b969a5e458445625a8116\nd0a023312041cba95ee5db6f24ba1e2192c3d424 1e5088e60763b58617cad01088d499adb4b3d625\n75702957009c5e52cf5f32fa393e04c6c62f58b6 963e56c57b39fd102bac86e54b99eabe3c2702bd\n89ec0fb9693e6856a1ad350024535105301b4706 2ded93e5a56a9326b7cd8f09195e231173f65920\ne5adc2dd8aab0d478c70527eed000d27de3bf613 5e9e1981845d00549493841f6038288d9572617e\nae31b710493bda56330a1acd881367b40e793189 b4ae05b195eb286c2655fd8e25bdf0ffd68f6a95\nbd9e61604e115896c1f2b4839a007042609b5603 5669f4271415850b2041f9ab2587fc39d3a185b9\n03d9f369be95e0e18c0a377f552a4b2f7e9ce3cc 7ddaf4775cbeb8b7e14f6575d0c06badb352d2c3\nff83ce4fa834aff2c2d3c3683f26def37bd97ad6 c76b43b9a306aaebff8789e0074d62134a388352\na4b472fb1c12f94379c5f7c59913f41c548d5dc1 661a14b7db7811f39fbfc5635f6d3c9fe1c49a2e\n912ce7678d18474bf247b8c9c11a265a7644b995 8f6b031fea2f1a405c93c1cd9723a3fb4418edfb\n6aef212a3b3e8f07e68f1e140ea56566c4b22fe2 accc20e1f4647ff872296c936f459db50a03c84e\nd6f57fecb89587ee30c9790f489b018050d37292 4e0be1fb6e5d6c1eab573bd641f816c61cfa23c4\n9a08b9ce870ee477f2d0f1e673f67b995e122097 9dfbe937defaa58182fd6cdbf764fd22046c6c2f\nfaf39c6fbdec66ed197f7626bd22422d5e629de4 2d064f5375b3e517b7ea0459dfb68ef928c2199f\n120e8a83cab6d9b52329a002c35e15dd842c9e78 1b7e43b7942b4e19f798f6a01e82c31a0a1c2762\n0b4c477cd33ec33a716fd0b999d039c6cfb66b7c 49ee87fc7434c244ed9d692aa64f860c6b1be1a2\nea265ef9cce31bdfd76126580b5d49875428024d ea4b008622f4447f0dc42e189085e8260f3a997b\n1e77c33ab7191d71e180e38d1763718176823406 a466bb1db48d183e9fc4ac0bd968cdc569d4db8b\nab3c42a6567eca8630f30d5ebe447ff030b21546 71a418d622d2aefd213af98c792ef0002455072e\n4069bdd63709aba5ed3c639e46e90dae9b170e5d 4251de681b4050d13d9ff31c1b0f15fb2bd249f4\n3b516675f333eadedda005e38a2734dc3026f279 53f93a971c88d0b1e7af4e306f4135be4331fd28\nfa3487f55783ee612a0354a70784b2c4aa364d33 4ff59a26b78a6c66fcfe1a4f570b317a2c69d0f7\n529a5ad3f5d45562f50166579d66fc02a1b30ad2 01cba444baa174c8e87bedd5d49a952499ca088e\n19cb33f12b6c46568fe14576b18b75f545864c40 3541e370ca003d5938bddc219f170cd76ce1f47f\nc7a7f7bff28eec3f4765bf424d52f0e047e8d1da 34fc1abf1a9370bedc1cc503b549cc90b3845ddd\n740f30e9cfe4bb6c8a7c823bd82716cd2813036b 8d351598caa3e2fc3cc95ce6f6e1e53ce1aa8ec0\n5a4c8c5a9b5366c4bd01703b6fa8884f46f27a68 a3d88f3a5c7282527afbcebef3b61636e1e500f6\nc22eb03308b1852165dd8cc8c37fbf39a7e581c4 6ddba5b21b51141884059c3b81060725b3ceeb7a\nc560831a8e5102eaebf429458f9076827fb676c8 ab43adc813d326cb2167c9cd0e57a637322c8cc1\n3460859312e83c20ae5cd90051f49357017130cf a6a8392ef357ec6ab5f0b550ede77d9fdc89a3c0\nb5ff82b974efa6684046a92d0fc7ea594e5a5c29 4d243a9d3bd9d0d52b9ac9062ed41dbd18836bb4\n201399f22557747a79246d38faa2b0dfbb2ede15 dca49df22a1675d39238671bee21bfc381b7e684\ne977c65183833e6e89c00be49567b4f875e2730c 3c5c82a51b0abb6fc1cfcb48d98e3d874b5af42c\n846e926f23dedca98b1843c42c47b452e16f53e3 fd5260298b8150fcab45aeeca2e6e7897879f928\n2ace3fa1ead331662a88374d4071efb5c018c819 44d27b518af5e8dfd579a5065bf910cb791584a3\n40b14d680877e885969ab82d3c191da8553c61ab 2b856c3387fbf7a43a347854f40374e1c0b5e0a0\n092c0ff328ca4cb38f7b60ce7528633228bd11b2 9216ee77676247d1d7e37acd04b3045a05b8eace\nd277c296cf7a63b8793d00297ca141f84116060f 04c4b5c7eeb44e8fe119c9310e1b2b293ad92ea4\n969a7c81c778a63cdfd96f8e4e5ee91722586151 c7e565a39ef7307a44c0398ae5d115186f8cbc39\n4d54662fbbd40d159d77547314c182d7142b18bc 3a9c8e4a849ca7da3c17a9dfe95700855afd80ac\n9ab879b0a6af54c5d3bc8b6ba4d0122f52526ada ebe887bf2961da77ff5f66743d6e41e9b276f34f\n585c16798ab87381b7b646a6e43638e8020c61ec 4580d44b74daf5d84524b440ef19acb51bd7e16b\nd496db2cb9d56554e882f814e73cfa2e5018e253 1e216f341e8b357a8053ebb385829f0e00b586b3\n2ca05883c1414c3c6088c016a5027965c633960e 8bbc74739be6b48495a964ca92d4c4bffeeae24d\n089a884fef11a0bd9e9e2d9c0248fceaeeaacbb1 12c23f27726ba0d28e28f7aa878d1e0c5cf27c09\n7ead3e1e441717ca55faf22e59e42b9d075e3c26 21059d9d946e7802dd90b81af82ec2e423b5a275\ndb5033f12801f6eea40bbd9f04aff736e7fe9776 40f121f466f28416117be2c47b159cfb9273f6c3\n4ea3f393922013cd60c3a4c1043bc9abfb45272f a34c4e2993c3ce5df124df6b17ac7633c3f01b7f\nc0340c229db4966cd54ff52be79d4750703f5bba 1b26d1418d877ffe17645735111c4e05287fc995\n660ee187ae23545a50fe936eee70c39a56a18f1e 909f2d60657429ba56a4290996536b61565c56b2\nd65bc5dfabf3c4c5b541fe7f0ed2c09840768bed 4b1221d44e347d9f1c95403b70d9417a43fd6f95\ndbc971884a7db8615f100b4790ec281080a21458 ecf9ca619e225c796854e1d2e89f325466cbcf3c\n3e124bceb1e7d18331c4502ef34ca9ac22c5339a 2b8409ebc938a9d2595229c7627004aac0d89f94\n5e2f7c1c51d7c720f06e7952afd3d386bdedf6c5 649fc06b561261ca8089a2b3742237a6aa574c7a\ne09d7391edc69f4d44a060c3c5ebfa2fad4e5a06 d615a5a6a2ef7c4d2d9f43689a6e7ceb2da812bd\n1799fbbff5ca8357279be087a7d2bbf499425b43 9abe7be39b4ff7d09dc7c062bf7a35c24dbf45ad\nf205eff27df8c227c1f1db6d488e44b36d08aeaa 448021e623cad7c49967e320b90b1de40fe77f15\n1e6932e468de207c92af9752d54fd6f7f9b8d719 9e1e29a5a19adcb5adfc893a9e02427cbd24dfb3\n9cd9772eaba02480d2da3172cb1707d0e4460317 455075cc5eb3419ded8c631e65a9606d57ac0a61\n2df248aa78c867c7e354e55473ffb9c64369d385 5be7208adfb0ea8abc6a9eff9fce7589a88e857a\n7146fec5fa9d7e9adb84fc520a7aa95f44c255a8 e6efffee3124b1a8c02f5c5b1f32f06e6e2c61e0\nfdcea53da315cb67636da4370436358baf0896b0 b44163e00b002ebcf4a4fca33567d35a53059a1e\n8c17205bdaf67a3e2844b0a3d1a826304e81fb99 2fa140666465ecf6c1453e372b8adf42b7799fb6\n4aa64069a41cbca9ee564040e49e9cf791c7250f 6d83f72c7bf357d3388f9552037107be4df08069\n22444c36e3e1e15aa66bef2fb9380474f47996aa 47aa8bcda899d793a4eb1d2ca91c56e2cc2367e0\n6c4be86570957b724478c0f6b97bdec37a736538 314183f55223e65bc90707e10bea53fc0a4c20f0\ne9574f9cfba9a5be15ee7b0aeb01dfa65d575895 59c650831a53db1c9cfea4a20dab53cad3beb0a7\nfc5421c6126bc46dafe01437f847829326c472ad d450fad086e93b42c1f163260c2bce805b55cfbb\n2691d2d929b10b0f4e0dcfafc528519d26bf9d4c ae9cce41669b3feb999308fd5c208db29c5fe6f1\n387bd67efcd48a048054184015e93af0d9dcf7b5 d9c6a997863f5f9ded625e44d5efe730e24cb3a0\n7d376a5ce3fe7e58fd4d431d9f7d53d0e3a2e4f0 776c2ef313028b7f4d84358366336ccacc314ba9\nbc7763f519341a7de10917320ec6a41d52207cc6 07bdc520f17626105ea6ee8feb71fb50cb4f7908\n7682433b6abfce9c417f72a485e8ccff1b519e65 d7bedac51eaf7535b0c98cde4c8dc28d1948e4a5\n2a226abbb2bd59df3054b72985a6c84bea4537ae dd4ed3b36d914d23c59aed72edf2a08cbfdcb6eb\n6d710230cad717b02f54733b85a6de35357058ad dc1e8d2e94d6b82f0669f71206c03d9894359cba\n3cf3543b49e4cc8b5cf9c2919224c7719c6d59a7 593814424676ce5908cd0c5efff6ad2ae1580a85\n7fc9e28ac93638272a9dcbe26b5970259049ecb4 ebcd0c10e7bedff82ef12d1d9602d8525ec7526e\n16dc48a3202ee73e4ca98098bd6461b60373ca28 4b355aa536cb4639ec0886e17b2d837212a23044\n805b134b94936eb4bc7a4ad51908caea3dcc9ca4 11b5a90e75700d2045210fd5ba470f71ca1b7b4c\nf461e1a9ceac47d9382ce9bfd204fb3cae3acc93 1c7863680910cd8ecdab7a4085f962bbe4925ae5\ne29f37bd4d1e0535d2c59d19814adad47891ae66 d9fed27bd6866cf00f887cf05309a94d068266b5\n4666ffb0baa8d49414abda76e4f4ff2a1cfd585a 266b424123395e3e9812a8aa518c0329a9ea5529\n70754e92b76fa6e8114f2d7cad00ca536db18ce5 9553ab53e4da5479e4a7fa8993a277f8f0c5e656\n61e618a1d06cd2f9f797ecb03b5a6f209492bd6f 0de707db1511e3fe586ea13cdb536bbbfda9d581\n8c3de7015ba0c0c6d922b166b2b99a4465804504 73f4c9b0d8c28d6d9e1f31bc569793b1a6be8c5d\n32fe9f0646cef0f90572dfca56a226e29309bf35 da16c3e1d081f8e5be71032bd7ccb21ba24cdd0d\nb2d9cd50ab2dc1f65b370457ec9c3971d9ab10ca ad99a9dbcc85695ba29097981b50d013077a355c\n05fea3e36bbb48041d8b444b2d8cb6b45839a889 de5c028eacd6f1b15b18290dd88113383205bdc9\n005a729de868661763a5a4dee461b91e3731e3b0 5527b2921a7bcdbf8834758f897fd8589a42b0e6\n1588d363ccdf1d45f448fcfd08aa37383321b2de 429c830be28d2c7b8968a1601d2688c27ae64bb1\n7f652a8a2ae0df4dc26edf522484e6855bceff5d 6e6a45a8291c33d3a620a3b9098a04557bc4e7da\nced3db815e9b8c5d9538c6a3c17132669c22c91f 80d05b664391b0814b819506368ea3728cd32edc\na5a4bb57d04d860e7422109920185ce90169ec44 26c47b5b09ed03a79a4216543d0449118b9a0c3f\n1afeba48cbba7ec8e2ccdda061c6c53f9db26ca1 144a914171ead28e3c3374554ca67d957e9c2d4f\n7c027f568cf6360dc10e54e8ac19f4a5d8d3a9ec f432a476e161633a06b2b403c6bb8b106bf11dc6\ncf9e64fc44858edb12e10fce8905dce83e267f7a 2d821dd03e494dddc3a6a202752ea070ed753c2c\nb3cb199a9bd9444dba87bd2b164f2a88784966a8 251d602f91b26d1a463813b6829f8c6ad559d303\n1e590b2757964cc5f512e537b117e121d30ff216 2ae1cc43326df5e9c8b4cd141d8fe0607bbab879\n1753e23c6105d7197418fd82d032bae827262263 4d44d402229aa536c61a8f65e56383ac530dd560\n8c3c2b56aaaf50b3c895a9f54173478674e1a781 b12c9aa8605a7bff93ba6c7db7495e22fae56254\n3dbdadf0db53caf50828b6b46667f34c87b7a5fd f51bc484a39835c1b05a60f2420ab4e0302a86f7\nd2a1240a7e9f8f6a3539633fc0d9826a7bad5d5c 7e9c592a0dd9c0e2a129ac63d189770d15cb4ba8\ndd7375c64f39a3a205144dad31feb552ae45a434 2b9e445f73b98f853504bb4b4d55156cc9f5d719\n7ecf7b93853a6ee8f2f32a85ce418904bdbb8755 96268b0fc37783ca755f31abbeba8524fb1535ab\n0f82b05e3127457e1d19921be1cd4731015d7cc8 a13c15563d8df5e4ca662843e9ec9287af69c2ab\n403e0c2387ee07ddad2ac76fe233ff6049c1bb39 8db5371a8819bc40df9c9e27198657f899632ac5\n734ead0d71232ff98db34cb9780743857cb276de 82f1640ddc7aa176741635770318cfa116c854f9\ncaf1fca2792a151a910ea5d37a7880868c5bdaf5 855814c0a5f2f218d59ed0b082d4bacf38387a73\nf0beec520008efc80549c00ec8edcd70bd214b72 102f807651ddadfbc07e266cbb6bf507440d4829\n442e365d26809b56b3f8092cd2feaa370eb6d734 114da716701191e1f7432992f0a14cb3f694c976\n46e6066dc8ec7c9b3440fc634f569891dc491db6 2ed7cc6247ad70930bdc2f1902907cd576082fd8\nd49e4974f7d47eede6cb6d28c5b095f79966f2ad 8e265d96c8fa15c6512423377c1611008154b176\nb69b421efa5bb46483820a8f812c347a0a006f93 730f563c811efa7b08705abed87fabe82388dfb0\n033668d8e53dd433446f437295fe5518ab7acd24 f3536a1b7bdef656f6625b60789c2ca8205e53a0\n5f0cdddf8761a10e2778b3debb991955d69518f3 5adbcd35fafbd0bbe30f3d043d674777c4f7f4ee\nfa19733365847556ad807e2084d4228dd3769614 3520fe193469ff8c5a99e43e129a693f8a84bddf\n539bdbf4754e582a9217176218e286978263644a d570a767e211bf400e16a965452924917747f30e\n4dde3744a232c074bcde549976ef0507b7c7ff24 7e6e7001c74283ba1ede78b2435010c30807ff73\n0ea39d03aa454ecac83bb085b82ddf2d86f01665 a6b5425c9d8de8f8fcce715f89b39d44aa5f96b5\n6448121b3d9d66117ff418932b87486adb73e663 2ccc6207ba06aca9b7be0237dbecac743c93cb7a\nf98a671a5792c37c8abee5ef05bf44eef6a610a4 077b9909ae2a29870c14d45c68531c04bddd4aa3\na641eac0b272406270fb00af64e14abf7171b95d f2c04723d526d683b503b4e5a5035fac33bb2809\n615fdca48c4ee26c001e8765e4cec3e4e95fd70e bf32edf55f8a3787b03bb43d1c848ffb4dd0b67c\nceab5a015612c695df46f80c906a45bb9eebc323 054c6527f5c40b8b4e99be657037aaea57729f96\n19123f6ff93272b3ce34be23a991abe69e5713f4 311c73a7c05af7a518e95392cda4bde349dc8c3e\n00b3a359f213e92b1835dcc12712dbbfce752521 c1554c9c6b05f69ac77e6cc9a661913aa2afe0ee\n2311f55f9d4d48d7ac8e8e31c0639591e75cbd05 19fc9983857292f7d7abc1128753510b75f53276\n81fdbefadc3f0a72cb4479db892745073ade640f fa64fe3b00081563bad33a278ca86ccf77217540\nb44dcdf82bdecf62bcb32393b2a9f14e18fca8e4 c09be07871960b4b1a8520454cc4d9cb001a681d\nf944eebe905687a7fe17e6ec855647551311857a 671856998898aa05469b84ee5e01ccabb037e1d9\nf2b8e3c3f997961a72c8b8b5c03b9be96229e8ab abb016703d4f0711b1533fa1a16f28bd5f8ddd66\ne8fb0fdf70e4ce80e8a0040a4781fb3cd3f2b731 63b8020d5bef2ec0b511435b2083001bbe5eb1a7\n16feb281349ae7a09c68e6249a02d5b8b0553d0f 2a54e30be80bd17637856d33f10ccecff316de58\ne6fab047a0cdb413904f886fd44c0baebd2cc281 2e75f181dca17ab2c843afe54b92f487eeb51900\n156b899361fc9a5c45d156567105cd43e63371a7 2d03e88805f6c5ac070c23058cdec56d52771457\nbe8f938d9c73a4079f3cb91c4a05cf6859424378 84ae74fe5dc963c665c7012c0240ca3b6ae477c3\n6b3bf16b4cf2b95564dc1d84df1840cd6f8879f0 37cd5b78bc3e2d8a8b54c320c64f587924e5cb50\n3f33b07d7a24614d75370c45bb24e9a8954187da 91d66b03033b08e561a231570d2a8fd03e41649c\nec5f3b4da754dbbfa4b773305c3e6288fa217425 230dbc1aef45303b683b083cae8e08ff325f460b\ndc8f8028efb689644fc990ae3b72b2049fb5440d f2e261c4f1d3959c21b8bf35c07261d4f864696e\n882c7b354505ff56ce51fe147a160766d8ce4d37 80c6138f394d39937aff57fec33241ae4c51428b\n281fa4549b6c3abcf1f8e8d875d9db857364bcb9 1c0551eb883d5ff792bb9f21275a3effb9277bf6\n8d2a4f5783b8ce245606784173fdc28421be687a 35c37e2851575536facddf2fcc7abd88e6f73e4f\n82ed4d8e2b14eb6ee05b11f09dc3634fc9ac72f9 3071718c173ab1daf3d7f51c06248a147f26706b\nfce15c8624ea562aec209c715252fda78c03ab7e 2a10b1b68b1f28c1bc292409d9a38837da41f779\n55234bfcab4dbbe038fa802d876791bdd8fa47be 9b3ae31883df88031a8e0b00afa65f688c114342\n8761bd5df2252e2377d5ce769fa4406bb3cf2134 8544df408afa2c1fc6b453837402bc517c3ab48f\n28507a5535f2214bf6b2524041ccbfc2cfa3cc78 4104fa00c675101ce75d9bb06a4dba2eedc3ced1\n31a61d99bf3746538cdc197db5d69fd2afed4b3e 426fac408bc38babd9fd084912c0feb3e2e3733a\nd511b0a3c013e5935fb69dcaddf629237e883da9 90ee4c5f2f8618f0622e450cf12cd5f4e9220a02\ne91c7e40a714330598b4ad6535bb727c688d27e7 370e72ec25a7b4755a2c8ea13ff0a8c6aa54d9c3\n7603b9a51e07e8ad1972be31a53ca8886bfa23e4 72f6f9884c5825de1c79fa9bbd7676b08f6aee33\n825db1aac6ff2809cbe3d5dc26a639b1efa7bba7 9e929d6ab1f59bb93f7c1c4880aec7e85397a586\n56d5c0ea4665880747c1bd07aa00825e0916de97 b3d20ddaee113e0fb550ba2c00fb8db407ecc1d7\n753a0ad17d7422fb3c3fdfdd050df46733c2f86b 8c7d3d519125b6e3a819683d667bff2470720a93\nf763ddf26316694cd1ebf776bb186b8927d6cb09 bb72baebf082c586771fed1ad50b0af753aa3c22\nb6a73904f92c7d0b3ef1987ef79df3923fe72a6f 744b393c4358b99e5732ec2001ed93a92528d6a9\n1be6b1edf4df4abc9d7e2483370b3ee7b6015c19 4351dc4c0a1a7a12d947cc95eaec6bd1c0fd19b4\n9a8d41698379e12508d547e97a490a12217fb067 c92814ea53b597b6e63a43f87ef453cc7827337d\ne879537be37d782b06db54c0320501d2eb375c73 ff70f107f8a0f57ef45298a945d33fe75ef9edbb\n4aa726ece391ad62e437db494ff8a5b9b37666d1 69c51cf51964d802f2eb3901031fcf3898360386\n6ef746e0d2cf903e29be8ecc15705be2350b95e4 59e643cbf1ef425639ee9fda090c47aa1324d518\ne7c0ced3c2a73cfc6ae3416042e464dce4b8c4c3 943f8828aba9fcaa290686ffdc28cf18eb61797f\n72ffbc676594ce8478a0c54368e483e08c81b81b 0681a2f46f17b5d9bef6e2a76a4d924ebccee240\n82e509436778d43396603caddeb23e403f552423 a46b8310086b2f989a3597c7e18ea87522424286\nb9fc3ea0586d2f9661cdcff0b531e2563f5e5e3c fab5f5c56ddfe7c1c7046c917182e39275f61552\n266b69a52bfe73806e1591c712dfdd2da7dfdcdd 96a51e5645c77eb5e26a384308cd200f0bdceaaf\n7a7cc98cb4c76a5a6eaa09660606f10051d8a8b7 0a3e288777aef08a6cf55c1ad29be9db1e000f31\n3dc52fefb605d20a7c1b44d86077aee1907c5ada 61eccd1113d15872f8663c7fe613e5595f64558c\n8fd255627bb3a8b7789af7671cb5744b988556fb bbd7d8a5a62176bbf013f76eec022360f9987166\nf741a4143f923a3124e7bbe88f73a18a3904a51f 82b035ab99dbe23c16dd8fb14cc2387a7f99da87\nf8bfb3a42abe7327109a49626f49a2e3c306fbe5 01bce7d83cb7c84b7a7acedf2f40676d0523681f\n9ac4ca622938daf747ce86396f726c593b957e48 f93900dc3f2e1d2400f8dd39fe1ed6bb8a78e7b4\nd2f5048d167ce06729b498912baffaa453a7b916 b188005327f1d41a75859615c858d666a4da7294\nd158cb5a47ea8db89807fd1d56ee9d92a4fd818f d5a01b3404c77cecaa608e4458ad60fe3e760cd4\n12a6ec0c87cd5426ac6f27ad4da5d4ba6b8df8d4 d6c948ebb6e12ad94fe6656a76c99150156c4bd9\n71d27f79b78987a12c5692df490d6c7cf789f9fd 9617adb561b469959cb82276cf738ba89a501303\nc357808f24f1302c0359c4243522350fa4b21c16 b2d79be37ec70091f955f54b7757c557a602380f\n06d88a2df99bd6ace10d308a37f80c89fccfcabc f05362c4a6cb95343e368c812d681a289d12a2a2\necffcf9ec505c6299f875532481b9fa068b7bd6c 1334d9ce0dabed53725c6a0030cc0b1f0b47550d\n81a5b1b1b86f28e5cdaff927ee0f991d5e0cb0cc 0cc9a62f5dc283f3de36bf4d2095bfed68e5cecc\n45621076c838a3f76e326d8a8bc18dcfcb4f5f4d 61b44da5f6747b28652e421e493e469630cd8c53\nca1a66b07dc58cc5312ea9f480746dd0d2991903 b12936021cd4dfed72985f42157fc0acf703c98d\n6d06f1506bc1bf1de7007f72f98b0dc6ea30a4bf 9a14ab48c4bb5b9ebf089d2042e8463ddbbdebf3\n8e05e0e428eb2f1c46402c30ff6a1d5c638048c1 ee4d62313498cea20f8678c388f547f540de0582\nab953fcb4b4237cfb5609753178c5cab04ff1b40 7f5406e15e4f3224b4c1ec5ef5bbd2ec9fc2bba6\nebfea12a1200a30a9a71154f028a3737979a88db 8a3b24ed348edea3ed42462e1e8dac62bebf6feb\n8ce1ab576989def084feb4435dfc46e5a2e11a7a d7cdee29d5ef4814eb22381aa2770ff61e994be6\n5183bb1f96f2ed70687aa9655eab1a3788529be8 195d8be3185692e7247833bcd7ef1e215918df06\n145ecc458f3749155ee97f215650841b6489fb2c bb89e4db67c3de2e6a2b68eef45ddd7e0f80d05c\nbc168bc568081e1be0cb8f0ac9a7863bc9c42954 ad3825b49f472f5540d7af80ac9dbccba5e04907\n3122eca15b677efb8fe8b06b39503dd7acdd5d56 bc7f9c3e7fd3834466f6f7fd0c73fe4cff60e994\nd9f2185ab451c51f125b3ed399c096d02c9e16ab 6ec30ecd575c1cfe7862807d36f3c19a1e8679a5\n435ced96a82240e6a48b904dc832cdf4f6cbb875 5461d6adc66b010d5dad781a4533cd677f22f6d7\ncd445c2fa3472ab33ec204574b55348714cbf7f6 da1086c314330578a58e76bf977c618f2dd3239d\n89e4cacdbc7348395ca93c1b417d41bea9b5b1b1 2a4131f434a82b9ed4dbcca6b5e9382a89cebd7e\n3111b355d910192f79e0a0606d1bf5c0514f4822 0871e462dedb931a1146ebf921acbe093d664281\n2b1215c2abda8c6e980406a15781cd12f8fadf84 91e237810df935570533c6916b9b8b85b232245b\n159f181fadc508affad766e6b42246457d29a871 39d88c6f8638257e86794958f59bcd2b9e0d00fa\n631e23a53b26f02536502893725ff6c2f0ed9fe3 f6242e5fac24fbe500c8f464487515f92aff4fdf\nc564e454ced802eb0d5bd6765f8045a7bc6d4b00 a55cac6beddf275b0df84f7f4e949b4d366fff8e\n594bcaa63ab0dbdabbc7ed52ea1e0e4540072b7e 79a9b7ea4e57fc6f16f7acd47e15f2b3466488d4\n4c619ec279167da41006535bc853b64b0701b914 d5b510167bd3cb14f8c2448470cff2498326a6f9\nd8f2ee9d012f6655b6560f42554d1de562348d61 2ccc8f6a37cb1e33cc66d8e7b0362c4f3dd5fbd8\n858ed428cc765493784dcdfa8735bf0810d824f1 337cb40d48c1565774cbd46036b5c5c8fa1550f3\n14615aa6e40fc96973ff2265b6908704607c647c 84fb7a9b6a3336ad84bc9a8e258cf41fcd794a39\nc3a504c755f92c538bc5c4798f06a66794871d23 be259c3de0baef99fc203c17ba465f0c7560ae45\n2883225d6ae7a5da11a07effe9ae6d0ffd9f83de 1901de4e9ea459aea909c502100c1e4568c2df46\nb5ca5a0717177fde974e8a0c1389e5ae4c00f211 89affd66b2cedf64084c161cf8df6a71e57f8bbf\n414d34766e2d2d814c197575bbcfd377e6fa0896 e0e6153620df14b35ab2acb0fee097bc29628272\n1b981b06edf19d3973d9b1d9ba3e6a6b5734e509 928ea826d9cbd56455bed1001557ecd6139e83f4\n3f0bfa7ba4724dcf7e971ccc517e2c46ed5762b4 98506227c18277732f3aa09ad6b217918749f38d\nc59c5577e70d8e1a3a34f1df905ff1d295fdd7d6 cbdb1fe337f4102972cd7cb5f7ca0da401fb3ab4\nd5186381292b046d0f3c0d98fa6454e70231177e ec286705966289eb53afedebdc2fef7aa4f30043\n9f9373c712ef627990b3ba81c01461017098a7b5 0fed2863fc07bbd391f49523b8a8e78f72c9c59b\n6cec84e3139c339ce91a040f79839884b128decb 4d293cf7ff47d5211c563c4827458f4c9adcfa5f\n99f2c44f9420094b5bdd9e33fe3875b477dff893 24eecf0b234710f341c07dfd526fd6bbbba0a3be\n387fedf6ed1dcb9b5fd44a651a28694e02b1e89f da9e7355fc3a6714cfbfd41e93a1dc600a7593a9\nba8b0ca59d7032713a1d7df23105265a1edc4a2e b30e86645b683c57a6c72c58f26fb1871f2c61e8\nd59b0d3d63c74e54548ab922423656ef1e3b3810 dbc07cdf4211ec26c0af0f88d48279666314a3d1\nc772199e6ea4d189665eefd95e4dfd72a5122767 11165a3ed8fd5177f230127c447ca952ded7302c\n330a0e4539ed66e5861cb7e958e1075f20c401d5 90f1bf6d1d43594b720e5d0520aa26a6a3f9b8c3\n8e840e92e7e15111fdabc93c10978904ee4e7945 1580d5598c0805822e153cc02b493a62bc23b7a0\n163d78905b5da71d48dc2011af6fca7d305801f6 60ed672460623b726cc3c684926cdbc326efee54\n899ed9db125ab737f5a1cbba44f866d3841ff828 f5c0e5ca865320c82bff3133c697e734b918cd8c\n916c0fed73ffad741b2c80cbffb97db94054d6a2 827b878ff24c1a9fb365a66aff44f0aa3d1a537d\nf5b0895b3055e416d34c37a17fb81c50132cb843 bd56ab3202e1b5cff1547b607bbf9929f637a04d\n3ec9a33bc5d715138c7ef51cc33eaf4a1e233f27 07124367fb57be6d513d9a87ff42a3ddd6bd53f6\nceebc6df5f8ce1aad5451886137f51cd01784a02 6012a3cb944a24b64207decdfd8de566ae1ec2a5\n2e14fbe4155e380d00e9a6091aff3e245b2ef194 3758878585446b0885a0504e868428f0d676ed5d\n060ce1f65eca62c174f11b2d234bed7b901cfeb0 e05bc99e6e4bf6c339104bc03c7d892874436d79\n9901b98b6049a16dd14a5ea7c3069f4dc9b03bb6 a7a6cd7feb549f89b729af43e135090cbb26635c\nf15abda396739b9c65e0ca5380fe6bc478986625 34a230e2c55600817120dc85f4d13ab78968655e\n7cc30f8ce99c7a180249096bd06ad7231892d38b 81bae574edbdd46837d88fb53bfdc835ef653c7f\n684db6b01bd9ea1fd3c0b1f788ab9b251a563612 e95188d6e971fd028cbc494ee0c86bd4cf180c36\n82bf0b8185d85f6d5405549ca457374e181763e0 4305f7eb29008aab70393bdedf873d33a6b4ea3c\n743ac6691c078cf99a021b44da41604313fbb8b1 8dd37bba650b6e5e74cfd77446aa8aec1dc0d724\n027b208ea0dcc4e6e2470fbc0446bd7e6fd5f654 abf7515cbb598576f50b1286ba5454d6501ed4a7\n684d20b6b3f48c287c748ccae9bcbb189ccb7211 30b4250b57898e7ea6eccc4b3f76a566bf983e19\n466d97108153d0b3ef4b6b6202a1353871714fd8 fa2112dee4efc703489dc3f558f2a88e271a9404\n82da32a7530c5149c667b057554f9ac1b5612875 087e28414198089633a6dd7acd74d9d8455f7835\n8573fdd77bb047500d5e506764bce1c5c4d50f39 525394cd630c260391b9b142b4380a25da9ca09a\ncbb851a91fa0876a00fb76165c95ac7687da79e5 4c3506af1096100a85dcc94f0ca477350234c1f2\n5fa835cd41bb4800c2100be92926a874fb971b20 ef0afe4c3de6636ab8967846e0bcfeed22e7868d\n6ba1652be234a7a1551aa8f64cef2589836aa809 64c18200aea8dba5cc3dd6c06e3ac7a7bccc8280\n384134e60159b557848de6763542b2d0f49b2974 7b3fe097cf400741ceacb23537ab9ca786230398\nf3c6bb573aa9c5b82438ca876a948ef099aca629 3caa3901a7a6a90053ade924fa8ef27271459013\n0aec6b076f6c9e94a231e6da875d1bdfb5474ff7 fd2af5cca52b133aeae45ef6042747ff2e04d07e\n8a8e7c17b42a04ce6bb65ff5dec43bde7288ecb7 eea6b13c2eab224c5a8003363caf2e1048140d41\na7cff83bf070e8ad3d258990e7286e48f8192879 40726dea81885f61fa572ba6a979307d7df0037d\n98441e39c3e2e05543b26ee092371f7ca264ec6c 3edab94b10fa7096d55c411fe10ad8ad004c6807\n921becc0adca9f95510e8694856976c624873afb 0f3b784363f3358e024b96f7e0a4737c29e9582b\n17f25a4c71b6e5786d7b730b1b8ad0b3e803408a a30c8825ea5f4c14f35d488865275aa2eb24f6ab\n8dd9879db9c9302af21e743cc52b71c9fc54170b 14fd9ba5028a006befd54fec016e4f2b8dd16961\ncf792e5adc948f8065728535267e23145421cec6 637f53f74df288828b2a82d2314cca793253c642\n1bf0e810837b04db77d0926560e3bba878b500d6 ffe2a3fad978b489d5f1d66ae3900d7a4892f08e\nabc1b72927dd5f321d9ff12d751b558d074f5857 f5a6577ddfabf2a1550394349856c758d7973c75\n2a068a0408068e8dcdf64b6fc48cfb55080c01fd d13e1da5c555f9d80b8be7adce6c02de944fd57d\n2b2f6d72891d8b5fe16a8938ee35fdc58afc52b4 2ad905a4cb6b3e3370f74d557dc026cf15ba268b\n47e890980da382398b487582e08a5fbca10435cc c998953f2b4d4c256a9496c807f9dc937dda952e\n780eda2eb73b9f4e195c31ef82de365bf51cba78 64b737c695b35560675e1d10eb16125422a884d0\n5915b1d77e35862112adc2ccd49478a105ca0390 ed21a6d94cb0b203716a70049ca1538b7b595253\n60df4f42e47c146a291e814bc8ade4954419bcc8 68f8245165280f7404e2d64742b303e0bc87d1a3\n38ba2538df07d4dc1b3ee701be0839972a6272df c65aa7822c56bc6bb3a3d220ba53e4e6fd318d28\n62d837cd43e14a2c23a6c6850fb99ef8ced5a122 139f5ee73cbf1407bf8df02d244c62185f72137b\n25147933676603d9433f1c9a952f6be7efd92a46 22ce2740bd546f9c15f160db308019d28569785c\n4a8a2cc75b911af9a2ea42dec64bead2a12d883a 4701f1787d323568eb674d67163dd08f67176440\n76e717ee8c7434e49a31c34c74bff5e0606015fd 8ad8d39414d1c8118ef5ceec2f830d9af5b81b59\n34185e21aa97af77e9fa302e40dfdf47f1043799 946a7bc3d513f7e49cac2fff744855f0fc71faa1\n85e45977ed586db17f5321d1ffdfe718dfbc4840 879a7a15245e8ac3a9e3769fc20e2ca546cba74b\n9d889902551b0fcf99953fc0f6d8c5166e2d7a05 737d1f58d818f260f3139c4564985f98a8a17143\nf5c33069876bc046fc0c96144d59c4fea852a9a8 c4772157619a74eab8ebb978cdf8b51b3ffff57a\nb4e10602775cff7494a93f39bb0ca0a4ad541d13 b2f3f7b32d7ccedf67212e5ec68ddacb42078b1b\n31d349df43163a9e29a106e3aa3b454d53396c8b f38067f29a33d1120c7730e1fbc05adf942278af\n6a1f39811575b63456a3e167bdd10a77303eff8f f54d6ef54ac4cd956f69449ccdbe153b33fcfa8b\n0d7452136df5ab665b8da2dfb184c9e39969bb3a c81c6c19acc42a4ef015c3e4e0389f5fa3ae4faf\n206e347f8cb9958b4148055ef0bf517c2fa8eea0 69b632e578b860db9487e7ae1d08d223e054d842\n412baab2f4a0f758b84671f921a8309e1af83f34 9da1013577d566d545f1d197035ca7feaa49ba64\n8dbf9ed7042bd8aeea127688b132765e6a810a3e 9637344ac103b662d6edb4c00bb9c7e96b96e803\nafa4d9b3145b7c6e27c2ba41bd0f64b9d899644d 54d1c53759999fdf2ea9d3517b6b67d171b987b0\nb9b5185762b83938e886ad5f8a5ba2c87fab14f7 b389cd6f75195a8902d57d19b023477580e47bd1\nd0928055d75ab7c683be3baacc9a288c89d1783d 6b134ac7237a39c12cb94fb5c447136e20e2d0c1\n970ffc60da1cce74d6159ff11c78a063368cdcd1 6d5294b6e91633a98eac17410a62e07b099dee89\nc7b449a4ca82663e3cf60821f4185770492d0558 279625dea70c4bccea361860fb823a35cbaf9db3\neb28c0b8b0ca2ac612e06fe765d88cfa81e96dd0 a1db05e5c3c9780bcc3724437f00071416f79365\n0889d44c0a3df21656fb8e6ce21d27d1b6f57432 d571ec0dc5037dc3ec5512664ffbf72473835501\n15beb295f222f3d08f112e7e6faf07d839e20af5 41d8ee382397d295b321839a365c2bd4ae021bcd\n3ee53605753eddda12617afcf5e25436991c5d1f b10ea589babfc4906849e27edd4cdb471b37ceed\nad962e258c07e9d8490dbec58e05f17bb37bc763 62a26f114d5ee88383a56ffc7f08a34387a004f4\n2bb38d22209313fa51c98a8336720f9baf83295a 81c274357a1cf8140808f284bee84125bc4520d9\n8e3a57d5b8317ee238129e96b1226c338d955c7d 503bbce93e22b589ac13adb68c4005c64d83830d\n64d917d022552657b7eb4524498c55178981b0e0 64a45ffa134068a55d759e0fd1fc467e4769ff97\ndb266bc390dc954686c6fb1d90600273b8cce483 af31497d1abdc15f66e21f004e1a947b397be2ce\n9acee20684a00b39c17b793a89c6f3f251339efe ff33612e1dbb3d545f0ea8bfe82d6594f0e6188c\ncba052c4ee6d82d97504df559fc257cdd862ba7e e2b9cf5762322b07de7d96fe8ae6f5bf9f8dc96b\nc2b5269d5625cfe4ffab288e4663cdb48e48fa1d 1fa17daff3a1f6e0462115c5b2c88ce09041e126\n70ee78b797685edaf9b2090df194ece847e6ddfe 7c77192331faad8a277d143902d1fad8ef905ec2\n7b356c5f6d0df4250f6e186f2c08a94b908c27c3 dd78fef1ade94642e10ecdf11f6c0bd7bde3ee38\n2a8c3925ebd15145853d32cb35f396488225082c 88d0d406b68a8ba25789a94c328e3707d85ed5d4\n6685eda7009853d5b78fbcf9876a3be2498cc6d1 8086490682604e50a164b20497db118efe1960eb\n736d1e44b30bfcdb72e2267e11990345f7a4888d dd9a50f70f95c176206487939559824601369b8b\n3f51b1866b5ac5084d5d6a66161de3ce9a8ed2d8 4e25c91cb34941df1de2b42b579c21c17985eb6c\n45e20543b642f933bc349c93e1dc9738138aaac6 1817bd84070a7096343b369bffc04c964f9c6888\n39b6f8319b24dfe0cd037c7a180aeab9beb1db03 44979c3420088eba41722498bcd25e3ac08fa301\naa77f88048d90b668821cb5d234701f59c0506c6 2e1091ca29166a68873cc14d88c771797d03c669\n34826a186f16c0f50adb0da264e6524f93f650b7 de7ca56b89f3cdb6b698c0d1981d12953dc4d762\n8ebedc30f392909ee3f9f6a50c0cf00e5c50cb7e ad7c25306305655fd89b7f2f7f9da42756b3dc5b\n7f833a85c10426106f297cac2411b16d59a1a8ad 97d7238f5af3a77855574aae0de2980e3a18de4f\n2fddae9f8690fca075935fe515f9e7013cbdbef2 88f4090c7e0b5014176a23bccd975bef5d2e934d\nd658009b6489896197182f743cbfaf13a2ad92d2 af840e82fa64539e0eac38dd95ff29d51b16127c\nfdceb6870fd42706b5b57942c823807e4f47282b b3ce97d4e5ba26913c1cdd0d2071f037392969c7\n0e0c0ea09f8e1ca838603a456aa6df1bb303e7bc a4ab1df9baf567afb1621e22af8180bde5d28ebf\n90410290f1776c9330e0967046d310347be1c7cb dea1040d6db7779d3652b05bc642696f2f2681bf\n4b09dadfa88ab5590e95e5b8b56a8e2a0564a4db 8172925f9992aeaa4286a768af600270ca0138b1\n10092f5e684087ec2285866da59b1d129bd9cbf2 598a085413d8a6e5c73bda878c98f6a5a7446f20\n0cf703e5bd71bc31c97b941461bc16e862fa5bf8 5fcae4023e867f78174e15dbcb1cab7035c1990f\n751ee3426c120e3a1df007535e21698f4ec60b7f 2647c1520b2130c0d0738d281547d83bf917babb\ndd76f8f13b02768a86a59097b089c00a5887df1f 82ee1fad3bf9249280cb943b71c1bec83611cef6\n39dfb70b82bebff0e16c404f7c5e238d21586ff8 70521b08fb68905a1d1a1821158a5609481888ab\nfeea7c76806ad5e366f35a92a0a458561866cff9 de696d161390ca754624da3b3247073900235c83\n403278d05598a3a4f66240952ed124e7380fb0b5 eb7037caded8527253ee77064bf16d85009cc421\nd740170c93a9d39d0dd8daf9bf8534f2d0c1eceb c5cadbdfb6045760b23e8aee47000d42e2987da1\n24e13951bf9989ad404d999b7cfc78d5217d871e 0a44a4095962045150bfdf91fae8edfdfbfd27be\n71b0521905447ae251899918aa81983084b48345 a6be4d54dc58dae302fbaeb5c69a2be705ffd7d7\n963f2958d1c330f8d31619aefd55c1e4448dba95 6a3816d0a9541daf5c1251c95031ca35d930fc1e\ncf14e429b44218224960d00fb64e53892ac91ba7 d2cad46dc03a46482b591eab5f0d92156bf1f797\n539f79395403b443d001751c11d7be0bdf698ca9 d0e190a531a9dcc57a974a634d8085b84d855706\nf89821c420c0f2af43197a7d17fe36ade6c4b2ec 92e4aec3c3c6eca6d111d2cd6b3283f342dfa301\nd72258001d8380c114bc6b9c6f0b43359a35ca96 dc39bd63790cda8cea9b08e3a40e9fafbcb5a34f\ne0bf88f169c4b8c35cfff8cd8b4e9a70ab692439 9a2211f7dc117232d5bbd872e3cb33def4600f6b\n9cf0d597673a4e9fcd395ade478bfd304a84e608 e4d26e613963f854bf6d3c55b385b7b4e539e339\nc81249afde6618b7a98af5e5c70a3962e6afdfc8 d5a2a18eb3933ad939cc99fb77782fe707eed423\n8941ebe656a95e4ba132d2c928011acc7f430892 f16d90d063250a0fb3c25a79592b3762de839d71\n9925fd4bb347de8c83a3c7e508d820c1542c052f 736fc7b784619e61c2bf1dbbd0eb670292c0c5ab\naa2406e3a7d80e35f1a93c22954d7da2a83cbdf5 1a2f9e0e903938527a9e4e098be368ad46f84b91\n65a36a2c4dbcad02f9bb002d29c30e327bb29aae de69533bb4e5bd6dc96656a92339d8a71da6b966\n94d7d62c0a45a4f8383b328bfb9b8e1fb5b2b1ff fb30a1ad84fd575563ee88d3707d79ad5311437d\nf15b63b640a409418c039be624265f1941f191a7 5bdcca5cf172e5d06f7d30f79ca2d2020f3decd7\na910724f3184256b5f8a509825c066fbaaadfd01 b103408f83dc5046b9b3c23eeeaec259395aef3f\n7c6f7fe58a6bfa79dece04b66df278f28eca67ed d09ff6e0680c14bc2b623342c66fa8bebe8852dd\n8527ade677d1d52a45e7f05ecca60ecc2e27c222 27972795f879fd4a897eed6a9c5a5508eb0ca193\nbd4499a74e62096e1ecb8c68131691ba7f9fff62 58b5042fa4f10f49e28b28179c948ad8a2d797cc\n7daed14a7f275b3e318abce51bee2e91212541d7 3d1b07dacc2b89d3051340606fcb4236df3e2808\nb8cb436057cc4fa5b9bf4c637830c8cec9cf127a 5a5d06ca4424da65d9d0ed5852acde52918d0305\nec7d7cb74a2dcf913a20df827eb63522e0c12396 1bec33a050936642c5d78432a46a647a64b8a3e8\n3d26c8d8111935fdef85cf11858ebc6d2a579ac1 b174d29b9f5f5a8ef9b3ac3ddaab20e3575a350b\nd02ce74e8368ac6a010ed5275d7596594fc987bf a896527902d034a1dc547a7fde56ac4002684f02\nc80bdf87b0065e96fb311fb28a6464b20a05120c 9b3d0a41f2e4a508e49eb1198d256a849ea547fa\n3b8b80a32418e18d5398e48dfb079235d243e379 958390a6ad45e977b5530977e02ca3392a1da8b1\n32846acea92803d6031ccb78e468bcc53d5bc1ac 27daf1f4faf6682afb2d9982f7c8e20ee8742fb5\nb46cccd948bb782eaf0bb987f5b19d022e7e6d72 07ae27eedc79fe26f13faf23ca1e01e9d0483c71\ne0f34f834d9f872144bf74319bbeccfdab1e90ba cc13345c693eeafc79e12166a38431db870b1178\n7799ed508636e81cdc52ad0eb46073a18b31ac5d 12fec973b4ee27dfae1ea7c8026d45491394942f\nbb45eef32223c939749693a4f4a499599f26dea9 5de0e4bb28ad477056cd933a556eeee2f7f626a7\n461fb83c82160118cc861de4e0bd35a3e8c2260c ac2a568d48a762e652be5af9aaf7aebe7b5392ba\ne253731f057ad54d0173386b87bef75e4bd6644d 14a0daeb2a41c3035b46bc769a215aa01afff2af\n6dd8ee99960afb89dc4f2fe880286ffba17bc846 12395ee8d44d658f173cf4acd3ae352e07446e60\nf6c3e5e4b3502dc5f500b4dea50ce2b16495eae3 feb247f3ff208ec2f63a4c45dcfc0815b70b1305\n52d36d80b2334907ecb9bb28cd8edfb90e1674d6 99b3dfe86c8bc53b749143a6071467d418a2a61b\n8eaa57c3adcbc2516d7ec4cb88b77395cf5e66b5 e1c2e007d49f843b671f568f28bf53a3dea9a0bd\n8b55fb816d606d2e26d0532d7bb8e82624b276cb a1e89e066f65db54bf468b351c5f631cbadbfecb\nbd6dbb61f8c2d62f430bc779b0ad2adbf14d29bd 0417e85aff546e2d38e19aa73216838b70b870c9\n44d3629ae1352c143b3c1555d8c9db2ea4a16e43 a01edc2ff61cddf48d9e828237e84eb812935597\neae60dcc634563495cfdf453f02c58313982ebb8 9d173293004912e9c5de7aba82a1ce3bc1d4e2db\n5c7e9713d617922eddcc818fea1ac60a7527cc85 4ba3593e89677e44f02e36911b398cc05a925fcb\nd863854760499dd03dd04a8308c59b77d88fbe9f f1a9fa92180fe9d30dc0c27b27502a925cd13dfa\nfe2c26d4ecc953e735734d9326b70d89f9d4d8e6 4d3f6a77ad325ad4c5b8c2d2910d616a06834305\n3195faff1199e2379d4bd3f612c54ff2d1684e18 f3ec6386ac0784ef100266369e6c6460ed000fe2\n6464ec61d32ecd3b9b8b597ca4ae79fc707db560 ccd56b8abe2f9815428db3431349b43417b01d4b\n646966c91948b3ff135cc752492d7cbdbc896ec4 1481b7e1a4c342299c4ef24ba6dcb1dfcf70f545\n6397595ec65439f4e293c4edad2a1e8fc6242bf9 fe6a8fc145401e49a66e72cad1d5ea0d465e3197\n6a580be8e53a9cc5b8a237029fcfd8f4e713bec3 d192cfe2bedcb15074953071e54315289e190eeb\n3d91ec0e2216bfa2b759bc067f421999f0113f3e b913e43349ff50d27a9fe3abf7ff23392dd87753\nccdfcb6d5c530a7f6632848fefe3aa3357f0baaf 48933b991bd0c996d3f0dca75639e2edea9b739c\nce9fcbe020db90b719378f363d592a4072b9d828 7946250cd0fb5231ebf9136f5d4f4875ce8f7b60\n78308dd44182dc729d5f18dc951524ebd9231b14 bbf725f6d04e911b2a34d2eb61995e9518e91c99\nfc99ba44ebc42c6e7befcbb0c6692806fb139539 b0e56a9379d5b384657cc0f0b8d62a01e59f7bcc\n610bfde5769a7a93ec975416a9094847429bd53d 2d2866bfca04af28debf5d70c6155faf9dc84c6d\nfd7f31a68b766d90e57f24e3a7e588b280f53b21 45dc87e27035e47b8c90e1a0fb9f351147b55be9\nca36545dc410fb36e08586f670c38f16113fccad 4d5f5ba34f7627aff23f1f47f445c5fc31883a3f\n4e8d6a7826b2272b6279c98731c8f7911399dd51 8c6328d444ea27ba595ab320485b707cdf9112cc\nc8c139cda99faf8a15b577f86b2ad1177840ce6f 166e338903ad81c5872653407be3941f6dbf977b\n77ac549160949071948909b9b0ddba6d2dac44bf b53e1bd56941e995d0d6a2bbf491d25a30948e5e\nbf182a1118b34ae91d5ce1cd2ecc3d7b6894f6bc 2cb6f453788cf9b2ae2419722a4924294e578451\na1660bded84652af3f6f6abdd0f05a0eaed074d6 fb3605fd3e9493f494fd69b403e84e46b58940fc\n8c1bb6e1baea87c505700f698ac150896645adb2 1484663d45c9d6e07e4c022d4d3c86ba83a4f4ad\n4f18b46d63862ab5861aed2f12aad77cbd4fc23a a135dcd7722d46de5a54a19f921436fc6796444b\nac656566250687aa8d8e2de5d21c4318314c3d42 d50d8e0c45f2e59068fd40c18ee9cd622c748dbe\n95f2b8dc0ba8978b8e8a65fa97995fabf85224f5 198fc082b7249c64161ec16a97b194028f10fe50\n8f003225bdda7498936ab8461d710777a63b5b69 4a1db1c47bcbe8d047742161c6add6dac0b0a32a\n4d6ba5a9a29258d7eb76a766b1f2ffc3a1506139 5995a15e623aac44a3228be2ea5d150e84800272\nec2dc287b1466c510d4ece44b7a4eb0588f00465 81fec982f3fcfcaa9ad96118334397662b28c8a1\n56d5b15323ee43ae04d3a5ac6e6dc68490aba0ae d8957d59a1c09ffbd4d0f06c4d20b9f77991b6d0\n84113500bed3312f27bbdf5c87c3a59c258f05f8 6e04703274d59d205082a19ba4c7c188fdb824a4\n3badb9bd395b9a6c36d3959188d97d042711e256 5bcc72c67f735ca50679d309c6bfdd0840aa8bf1\n64064c7cff182631025bb8f040c7d366649a8e09 f798e54ccbc7a74bd422137b75381c24e75c1fe5\n7b014a9d013206092361349cf84e75501bf2f7a8 0821b5a3474a940084fb4f120b893169fb04acee\n60120e23f3a34b8c98c1a1e05b7e7ce03510820b 65f0a9de92d5a8c6f4249e3f0314eb4b31af52d0\ne8a4d7c1e0c270e93ab8efb52974854687d5ccdb 43eb42e4e2348800dc870be85e8974a051eb58cd\ncc6bb7e6823d373c0eeb7282ed01ed4b6f91fce1 103a57dbdeab6778d8fd7a467507b7e20562757a\n31e706ae1166f63fb948c0939cc33b7151ae63e5 51dbd79561715282d4bf23e06cad9869d98c1565\n6d867bc60f92d2588a3064d4400c7082b5cceb8d 9fb97b8e93e79d276e4e4e7746d37d8882292903\n7dfe63d965102c58659d3f2d4bb09c14427b0f4d 7214d15e75660bf490629e54faa07ffabc4a19d7\na64bd75d2230a68d7fd0f22f152d070d6da1ae4c f612e0d8315a2ee6bb86e6a969f8e216037fa844\nbeed0d842ed77499c3c68a891222381a2f570d35 dff75a33300683988a61d6db2591f63adfcb4e85\n5d7091d8b8afb33c7939e3c9832f2459bfb6a1ba b25096ec8d7583c801d3c451ad7f1784e2ab0ec5\neceb9c8d6961371825d222bf7595ddd34d1c6bc1 daaa7418d8546d89b9dadbb08cf4cfb2dfacabcc\nea0e33095e33317c48431cfdb7c7ba67fa9f5b00 21061116649226621067d64b3a83f22dbb76f17f\n4238f25774b2c0b6096a682ec4ae0dbca377837d 22e0a23b2b92749a7aa90b338e7a8af38484eba4\n2e99640bffc36d0cccc8c36cc2504c8f5d5a3166 138dd54125788def92cf19ad6c21eea54bed3197\n84afc4947dd12195960ed4845c48cd5888231931 257f27c1127d7598f6ea3e4f8168cef5e7742ea3\nc5fc9837dca32b9c0929769f935791adf9a0c393 eb6043df313ff783eead3015022188494b9ecee4\n34d5d14e960c19f11765d7f4923eba79a794166b 810db4a4d89a352498f6e4c7dccc0ef12b05d98f\n80be82cf8e03236ebf4ae33e01dabefbe13879ee e2fe120b4f3682c9d958964bb75d03f2a62fe662\ndc10892e9fe1e20a3e1f92f756caed83981d7cdf bb61b45a8ccbacb0ec3e6c073558a5ed53ada3f8\n368c153fb119f043b6fc8cb603ecb77a29fee0f9 e8ff7ce7cde34122aebc1da0287ae6bac246d80a\n59508ad5529ea2e20b6db8e24c36ff0a33ba4d8d 3b30060ec92230d675048bda75c330304ec398d4\na12f64a19058f20213fdee5bb448d1c05cc47249 36d858a63380d4a51b75840f605b32abec1de72b\n4bee77172a300d6b859ac99155c3303b38c5b5d8 0b13739ffc9c014e7e8a6b7b859c0798d8491dc5\n18ba7da1e1ae80c4fcbfa5c58ddaa5097c2b9f32 6c4bedfc57270d7362562c3f96e48a068537cc39\n57a0729bee3d4b4f778eec946caa4dee868c14a4 032fe9af250ef153376ae940fc1a20c6ce6184ab\n4b5522c797918b70b70cc24510d022679a6ba333 c8781c6482bfa7faf1619eed81857160cb50ca7f\nfd1c78fe005c68c0d7031df822e1657c21f54d1e 36e69371442e3ddb4e43b261fa4f960f1e6e25cc\nd63752ac46017685d402ca72e136aeaae90da831 b1f9c281f855d06396bec0eb29ea9484b669829c\n64c4f0c6cb38681b9af0ae63b66700858c5f3a1c dde6524298792f37cf6e8bd36cb74aa36a694564\ne257485f86e3300c51a5966e195a9906401d88bb 41d191df58fb96e5f47a5d5553347d962e2db06d\naf5d6017dfbb50a234529178aaf96bbb06df3c57 b74ebe19daf8221449584415669aa8ea48bf7258\na8f4a71cb6bd9eb640b840753a10ded26ccd3de7 06d6493df617ab32baeeb760f32398785c75d6a6\n80524fbbd95fc543a90dbbda712e90edeb78b9f3 1a9882268529c26810c3d6359155e81eb945ecb1\nabe7a722f5e0c2d4efaa2195bca6f4e9df756e7b 6bec3b9331925791c45dba7652f2d7fc92270f22\na71c3a391513c2ba47b0d4a65d90871297e14fe8 b8f3b28186a71f86e54d112aa85937de04a71166\n1e6dec7844f000ef109a376219663d7e7f010dec 03745430284f8703f98a0c89d21bc400ba730f55\n972788b81bccf3074e709649ef63a8f475c6f3e6 643d4d2c8d6138ab388581711a186f9903e3c6b2\n984305f9af2d55756fb34504b17154833cb3881e fff151c7124b6010cd8ddfb892d7f606970ec91e\n57defb7eaf78f7b5e5caa9f62e0b04628dca69ce 591aaf350783b048103cd0b6036eab1f3faa6a9d\n132dc530c7eab77595545b8975537b120a19d3dd 8e1329682f0e825bfbd54307a89584c18bdb3f74\n7970fce5c8228f821351d801921bc3657c5bd5d5 35fb0e36463c9cf92a9996bfca56a944df921e99\n1dcc2f7e0b403946a4b78166a99c7dba4533f2e7 d6220a119786c637ce4621bb63c8b25923fa7610\n3892d3cac7167f259ed452ccca516f753b1fd963 d49f7cdc2957766e5f15f29fafa68468afce94c5\nb3fd63bf04e83c103fac448d3d64ef935de7d861 6810b033b679b9a0eb7512ba14eefd8420d7938b\n699c8d2b1f8e3f1b8af1298fd6146d644caf4319 9dca1fee658c4417e77777d79be4d9fb763d3323\nf5176afadd25515bdfe9448b015f2edeaf5741d6 7f9d402b011c62e1e9c034ec6be6fff985fb6165\n7188a5df94257ad465e8d3f7739454f15b02ef68 09c8f82d38959722a03af2fad46ebe3ee0ab0138\n803b5a1629564cd09b2db42eab94b0486eb21227 658140032c606d5b7190d14b81a7a3709a27e0f7\n22a6aa7cc3842ff2d5a6b3e15b26e931c3118e30 3e73720b7872b48ecde144984bb1984507e1be53\n5bbc6b481a11f8e7033badeb0c6ac0fdc9728690 fb4f4bcf9e1af566c9dbb9f775f62b111f63859d\n4dfb77632bd1e550bb626ee264c23071642e6477 dee865d9f9b3dfd0d92b620f9aff5d5e48b05808\nbdd9298ca02b337d2678d9520e59d8b10c8da2a2 fe700540a7fea901fed8e75fb1ae36b766aa54c0\n43557764fa04cb540d80c7b955c2e041e978721b 41974becde3c3211df71816f3727f08457640aa5\nd92eecd31e8ebfa70e5f4840f5d48b7058d693f7 11bf69235d800cc760bdcecd89ba333e4ff14559\nd17330d1920783ade814bbcbde84167c2b5c5c27 2672b74105d2384095fb6f76303b44b4fdb14c05\n07ad1b2b7940534c7924763f2536d6400a5f18c7 331c7dbb7f86585631ddfaf5c043e47df49675dc\n02cfc0a01307fd279ad62f73f49871e20e23c400 d36f2aa79aa45d78990163f21224b8e3729698ad\n484db70b055faf14eec3e53edbb9b13c7223afea c1886a04e6c90253333c57fdb9ae434496f8c641\n2c60d8bd95ede173513830701aa1e5634b4bd416 376921b8f908242cc1b3eac1059edd77fc661f12\n588e5a941cae5ed72d7302b2520fb44313382228 9d3e6e4e2a0ff076b1efca031b98b05a7cbf4c80\nfbca749289ce90aae37939d40cac35d32a6f9b3d 6c8cb8f65c4f7b475e111ce0062a2df0895bb9f9\n73d68e46a7b2ad61b6b0b1e422f974a4cb97706f 163703eea348ccf34aa17b36848cd4e5c6e870ba\n8ae9f9a740ea12cfd805abb5e697a2c51a9aa480 bc273640ad72c41f9b7c10a44796a5543f6b905c\nab5d54b4a981bfe8d569788363837c6cd10bb59d 96bf47a5079db55c77c43312a691d387627039f6\nab30fb45479562c1ed17120c5f73a7ed51037e05 3d06980ea2eb16723716f73689e3d17416170620\nf477732da4fe2432e4a777b6b6edf48ff75f0226 18387393b8f4d3d688c47780b9f6455529ab9233\n577177b8aadee25bc447c7c9e26189291616afea 721d1d44b4e019502be628427afc8df8056bf406\n983f83b1d04053f232cc2b7bd977450730f52123 41746d5a71fcd533e3232eee4b571a6be0953faa\n0b34d4b9472b9ebc8f7ddadf8ae41ac50c2382e2 369dcbd37ca122d88bd922784c6c05c00ca5abe0\n7d38a21f0ab5384e726c29338af7589810fc2143 1a02a99a6dff2252b8d19247ad9334440625f730\nfa23cd910fb72597436a0ef145d60159f3585f25 88f87f78f25bfda30499b8b1bbca901b2047c5cc\n71a9a89b7e764134b3774f31671a53cb2946e7e8 1598ce3853778bf478b01f3df1e905ba275f3168\n291c025446006b3d6b04a693f466c797debb3e4a 93f9cbb752d6dde579580d59a98b3fea4f6f6d67\nf094206ef2d6af4f607d0b7232132a37cd79745e 85cdb4e13ec285769922b3d4d417a501e20553cc\n80c0fce8eacbb17c180cfeb641c190fe038602cd c040f0941fada6f5874d6ca79e43957a710994c9\n2862fd03f24eea0ce1ca6cdd15ecf93ee20b65aa c2d26ed80a4fd1769c269974ef297c9e3470e802\nf22b36f2e228ff44d4e14d61934bd81b460a7651 cf01dc86d787afbde7f99cb82729e44f24fba3c3\n3655136916524cd478d6e68de4d79146e9e9a091 9f341cabf4ae54a152786ac3b2cd743612a0211b\ne80fe2fb4e24c511831ba06296e4e3ac78cf92c8 33c85f55dd71924cf9fd6d98fbeb967c8b17a662\n63a5df391efb8bb02ee2a1df2a225aa22531cb80 48eda926f4d2d6c66cc5e24a1a94569576972a1c\n1d60af04f7c9edf5b5341b1ffed8997c8d9f302a 2a813ada1e327ed989ae7ac914844eacf6e49b81\n0d0b27d729a804562c69e27fdb798e3de11ba5ec b349e2c3fd9f6a917d099466b10da795048f0329\nc79fb706fbd9820b7daeac424170ed917376814a 17214c35eda1c130b4836230da2677e9a18fbbda\nded4e68ea2ab8f433700f03c4b172a9d1c788d11 db0e7690c6274391488a0c58067e77e0ae7bae35\n7d03f18c8f0c0442311b13866515625039a36e81 7dcf00f08485fe687cbc8099c083751b77909521\nfd0d1136df47dedef5a080e637c5dbfda2ebe21b 1422deb6bab8d2eb12d9b4c34ce94fd2402e169d\nf458e9de8d5b7df283446a0e82e1373cc4388686 93858ac4ff5a474c263fc2a7928c5c4803a4e29d\n6a4001bb37294f14160f02a492cfcd30594f1150 f7aa9b2536157bdd3dbcc45aed1392314578f459\nddb8ddd949806045d4060cc527f9791f01a1a0ac 88261e120027314bcae08a5d5b4429e2147a4abd\n6c8cbc8021721741f59c7c495e425093656d1452 c5850966759cdeba2984b0c74a46c8530241ad0c\n3a7e48313bde2479d3d9265c5c285bfb8bea7207 402a4ccf69ceba7c40b509a7333dc8332ef219dc\nc25cb9d7c70cbf1570d0b745c144ffcbe60595f7 1d3d7810e017e61863c075661107734455211cd6\n53ccc96d961053b0164fdabd86473276d5d504c7 2cd190a1f2dc12ac409c56664aea3588bee693fe\n45842474d4f130016f5d0def424a28fff18397eb 0cfcdb845e80ac074cce4a70edd3d1f62b35daa7\n4748648f9e542c65aee1c380f36a7fc087eba659 3fa3e9746fd02e5733275461d2825b54d42b587d\nff9f8a2a315614e636087427425b4df1641b97df 2cb6af730ba05e1a736cca69303d0e6c4eb55675\neeef9630a5fc062065768c2692f52aed21cb2aee 3d5690fdd5e185fb374e1999c21872d704cbbb85\n30ccba87d66f88f296e0d27aa7a2a15586fc48a0 1e98ea3da2272442cc686595624af4cb7e3beaa4\nb6d3b1b2e70a025fb1d0b4febba7e1c0bce0e93b 224b161865fe267caad9cb4b2bc3ea3e77f7855b\nacdd12314006ca1abf55f9f0bb3dcd0ae7e912a7 02bbc1219bac33b025ead392c1b39bcc58a65301\n09099f877cdb5a832707889ce44fcea1537ce5e9 166657621f2a9a3801f4b6486e5d3f87f5d60885\n5d1014ba68d3bd3e1d449a2dcf42ba9aa139f298 54e91adb1f80eae93da779ecd7f7aba5394eb1f7\n7cd7961b65aa8e3d293363d708100915d0572b4f e222d0c9a772f82afd8c8b5a5c3f6c25961156b2\nbac774ce9ecfd619011162a65c8eebfcfd8db9ba d6fa6f79477c15a356f81b011a998ddd2daca149\n6d29c1594e18980057b7b6b17545c76caf21be85 15bb26362843db81da25d9ef33a840bf0d8114a0\nff322e4e3ba1c471658a6d73142a7cc3e18a4ee1 b2278b068dfd3850b92106b14759c8b71acdaef1\nde71933f875b4050f7a96afa2f5879c9e5f0747f ac5df8d1801e7729aff88f5f057c5f404b1b27a7\n702eb46256e212102d52b3f104e00f522dc100e2 4e54f34ada1ae957a49b69751ce29f8fd61b9364\nd13d1e8efd37113b72864cd678091ef08aca6770 e26c24fb9c0b5962a891918610ab20e71bc081b0\nde6d35bfdbc668a92ec5ab2e410bb3441ec01277 1d7a9e54ccfad31563dc4406869938a010cc9613\n0214852695478a950a898aed12e3b643bbcd53df 83cabdacb98d4bc0df973cbd8a7b1cb434273e38\nbbace2b95124be303da778e2924224baec317906 b72fef2fe1233d9ff80911c1b3fd98492dc79d43\n677e680014a166fefbff156cacde8e0d280bd8c6 11176d5d425bff46c5a8910be2ae856f060e141c\nf821e47542cea3f5bac95049d1acb8ae5d49ede3 4a811b142d97b99563ce826869e92da60de68862\na2540aebe0e41d6e38f454ee7211ebc1de5aa852 0c55b03d94cde20b7b1e544066b0c55e84314e58\n364edff61ec5270fa3fa8591fa65109c8e5fdf21 dbbb3f6818a88f7480de49cecde71c3636ed8cd6\nb16a403b416c56731eb58402d067de19e308160e c4fffc82afab9ba5761186a43ec491c052ded0c1\nf9f56f3eb79d612bfa0ba2308df8b2de10f9fe4d 844499836357183bf12d536ddd80c0abeb2d05d9\nc3e5395db14995c8cd8c3ef137bb172cd759b583 de303bc09953519a3e62a6a37dbda85de831cc90\naea0d67fa2f9ce81ee4115f1d5cc87938cb2c1f1 53121a0d4acfac80de4425815cea81fd2c05e529\n0336af0bccd74c137f0ee2851b89dcdfcc149138 601b5bfe98470a38ad26506313f36be4e56db690\nb0cc0249aab0e35569aab4de22dd2fdef4b7e250 b755fe35a65434b6fce93b7aa0d41301882ec6bb\nf09bfccd58613b01fea3d3786639184699df4b7d b3789096d2ef30ccf6bfb2b5a41e1e4e5f0276c9\n974873323be15554df2b9cc734fbc2a1dbb231e7 8eae87205d98dc813184d056e1e23ec8fc1bafa6\n04547ddbaa249c12d5bcf116b1e2022b0e6c02d2 21f9e700299b1e3763db89edb79cb8b4742d7fc7\n24a57df7b97afbf7586b7490427a02dd025d7ba8 fa0333f71fd55504f5be09d1bcde1188ddae17c5\n9185bdc76493b4a65cc0033fb4c9b257b781275d 2688864b79674d96507f0c838af196ff53b5883f\n1c6748e866d50db5062f6242c2dc1d248694be82 7ac48d96a8a9bb19c783ea49a9aeb5972115c323\nf675a86d8772688807fcae6d241d6260a46fec63 c99a0b8772415d241c835cb23d2f8cf7ddcc98fa\n9b9677ffa522710d0fe9e275ab159a36ccbd394d 0dd9f9de56f8cbfcd5168f1be5047077d21b66bf\nb93e8b75df9ccaf157e2655face709fed38e5c81 c4edc585744a2a7e08e4d2a3cb0836418893167e\n38034da2cba9ec943c2bbe8b42fac397478dde34 cab7e176766dc518a9724cec981d2ba0cba31cdf\n61a9776ea7f0fea5e4a9d1a832faa2b9e068f58d 54927526132209ad246164e3c8876bd5534f8997\n8a7d05087567c7f97752ab4e0c14267cb0ea99c2 e1282fac0cddbd27e3634894194092f6f7061ba1\nb8f423fdb4582396293fe324ff8ea3f88a33471f aec861cae36fda0b43cc55df48b69f4c997e84bb\neb3450e2b1a4aa39c54197a6f9490b1b1c57f8a6 e37686e87ffc2b0ecf17f4bd4e426693cfeafd85\nd631a36be6961ff24726ee62921c36afe218468f c5ddf9b2b55e228148a43154a29c35828053674c\n9a6c81b695ad71a42421da9d9b1a117aeb2dd3fa eb61bf017f58b7c712a4b3fe5a4bbb1cedcb1e7e\nec452fd26a7e3f6f999cfd4d8cb5970c9fa1b5ef 761db3fc21e36b0a8b6bba158fa36c8464e184e8\n97512585e8a9d55a08ba73677252787193664ad2 7e4af1422590eac7ae32fbe8172ea8bdfced3163\n5d2ffd8ab48886bbb54f71c8abcd50daa63c1425 30d1929b997a59d656ee260407e1ce411b523842\nd76a510b054e93487d19bf237bf9eae9fbf11c26 2ea41250a788290c777f632e85617d64da22e4c4\n6faed002ccb54bf89682d4a20756829dafa2b14a 39d31fb8ff8bdda675d354aae02df31aadffb102\n5dc6d4cba38cb0d956cf2d0bc3bf8d4559790c12 594d9f3945dce52a2c99f6642bcd17b0e71d2e5a\n21411db940c314452ae8cd1f06eec7f0cd111635 d05016d9dc041f1a43492a23c566c35157b201ff\n7440b2ab4317939c5460da55adffb6ea007498be 89f0899420aaa48eb73e5e4f65d652429c1feee5\nfa266fa7ca66707d8483108a611d1c5c1d60bb81 366397c1d1a3cd4dc39af598014932331183b29e\n5b318e15e7b4125cb15a5fb54465ed91a5bdc201 173b128dbf930cc1ffcb2826b005835fab6650c7\n73f3e9a72e3910999ee2e7b0fd75292291c8aba6 00daf2e7ce83929650bc6df08daee46cc6c3820a\nc62326f1dd2609046c78d21eab093b9722b813c2 12358e31ddc1f9e622373396aeed52c71dd2af11\n2fc9bb578627b287715886abe817eac4804471a9 610df45f999a5ee1d2f17122980f33e8d2506402\n0ab203ea75127592c5256c0600938c08cfe49071 d46b9a87fdcb1e1ccf6039966e2a5be00ba2d721\na26aa0a0b512fd5e3864c6b5159dba845f8934f8 7bd1daa18dc9860e6358ab2d8e4a1ea6d9e1e451\n1dc0791c0c9e37848d4f1470b97f950fab443a7d 1480f8a240f09669356edfc20bfdb7f14c019318\naeea2a3adb9c77b9aff0e2297ae930090a3c0593 fc8a1b13f9cf2b776dd2cb1a5c0f178bfc7c19ee\n2b20bbf1530d28b0a4f023f7c5bd480a16c22b7a 2ba7f267711bf3c6cd4647648a00167656c3a862\ndf6e4857b6255cde043c08202b390250d615a8c0 5936cf503fccc3c33509c36428f67da64c4d3353\ndca64d74ee14ccaf51e8870e4a1b07647b276182 3c4aec2438dde96ecf8621b484ac7ab45888a427\n2ea32e9a1c1ae64a5509c3123a850bbfe011ff6b 7714b63b42d370404e93231346f2f4286299f4ed\n0ac3a967ae1afc23427050d8635e9dd9cd1516a0 e49da2597099935957b4f8f0feeef6896176724f\nb3686e04756141a4b2cba6c1e4c7c5e792660c35 0b98aace993cdf8af86ec7b953fdf9bb5386f148\n499e2b5e0f70f4d50f76224599f6c6d714452219 311efd3b8d3d76d24bf8b32c4e6a1d56c7ca300a\ncb949762960460e4dc3a70c114425e6c0670a5a9 59403a8f9e38179ad304e9ccd3dad5a650102aeb\n921589d0efaf6043159848ede2c2523efd25f940 b2ee580f4282833c364d8c8d1fd15009117899c5\n836d46afe9365fae3f210b86657cadb212004233 57e82051a4d42d4dae296af92cbcc4f71ff1cc0d\n468e102b71561749cae836191260960a76939aea 7ea4d77d08330784d4c743fdfea4307fc62376bd\n112ab415201b68ba5e4d1fb61581c77ba1670618 e790dd4b82e54613e6778952a454b2a129335471\n8dfdce5ae95f2d39f07be184d4b619c55ccfb04f 0dbb7c66cf467fbda652f9b585713a787ee09283\n1981c319d53fab94404d6978229ee0c201ac7cd0 88e9a2292228e56c82d29e0678d9bbd22e69a8c8\n0c3a907fdd30ad4517cf8003e090e70f345c784c 44372d06aca104dc564d6ffad4c002d2b317dbce\na8e20e72ed3e425858e3f2e98cce78e510ab5ac9 ef35169fd38cddfbe18f641d8b7cfe983c54ae44\n35c336c540b3f4b18ac768c5c9d998ea6f1475ba 9cf1317beeb11c6be9d42fa3d60bce67067ab493\n1abd4a43b914e14cd880ba9ae98acb404c9edc45 1d6b71728b7a2c8fca8a02ffc0b2c4a65fe3d546\n14c028f164b1c8c298ccb4508240a2e0199e15e0 58960dc6d57a05c583079d1710f9b381d0d5ce3b\n79f620e60212dc0c626ad3e1a9b00ffe543a7d0a a37698a71e36075d83100204c32625ed780f87e9\n94800be81faac39bb2a001c5ea1858b72d77089c f9da49af7124384313dfcea75cfa1cdba4554404\ne58714673fbcbaa5f57897401c95b4459d7d240d fad83ba2bef30c9bd48b0cfb35579834e72646a1\n8c0aff89d56952aab78b3d11440c034cf794d050 3e24d057b83a38a97f7bdeb77e9151aec5413278\n0b01ce2e1446769f8f9ea6188896d34a35cc254c e1b972249d9c38da3f9b1e45c6182e36f7861392\n7154433055c08582cfe68d849671b24c02049113 f95d6597c00e4c1e42bf9daed0b3509b3acf1e32\n5e0da71ae415f4812219af21927353c6a6949d24 504f4e454d6a2f41438ae151c03f524ba90bbafc\nc72bc2790fe38ecd6656b75af303fdebd1fadeb9 060100e212a4468265c28ed3d70324ea70704270\n145f3918f8345d60daa756ac670227e5327e5d79 7ac2fec5606d99e7584d630a2c5ac61985a2e34a\nebc944f26dab31cc1d4b0adc6793f3e28b7290db 60707fed78db76cda247dbb8c8b41a0a5c69ed9c\ne5bcf7a48cfcf2881430589ad4570ed03568b9fd a38ad81a88ad1bfffc959c82e65f5a37355205f3\n3c58bbeddb3c9d610106c349624b4a6940c1048a d79300d7b00af05a24c95772c9ac39804c5142be\nb0f5cbf63d84f60815cc0b414da75804ee8ec420 793960baba4d3513060022bfa2b9ba23f58d2e34\n486600cac0aa56e8d71da972b4f1d4ae7c0cb4cc 083b65aa922ff94493036a138806db5912653a42\nc79a6a4d5b0a3521aeda63d5d55dba5792b2fd5c 713df4aec8f66b38e79c51e0cb67ab4bdd0936fa\n102a193b95b5db1c6e6142d92a9f202982b7b0bf 60760d82ebb26a25860082da216f9b56b32f53a6\n34a4cbbd33e4f81ba20bb50613de7efd6d50ee7f ecd68980531d8c28477b5811b1c1a3265e935cef\n950f5880af09b2c851e83dd2cacc8f1ae296ff89 68e03419841f6c9687027273e42a15cdad735740\na4fecbdfc32a14e4d105fdb4cffcb7165830a066 95318849f239ef7702a8f9f3d4fed55231b283fe\n838afdab2a59a704d1018bf08789cd32b9cdde10 4898383c4c24be64f3dc5c2f3000688c1fe7ad8e\nd939a7c37173111da451ac1c1140e644d1fc3f18 540b5e42e5e838d17a6b476bd58e88937bea0212\n316c316c8852a1048a48fa4dc8d5ade96e58636a 77d018285578ec7de1d3771e344b4f1167397df5\n10aaa2bf4da21e424e851c840552f3ec138be7a1 7bd992b1ca677ef886b41935bd4b7c6fcb952e5d\n8ea5c91e72c7f7701a05f09ff0e7201e3f0fb222 b1a6875e427499b233b6e25c8d1a0a0283003f3b\n907041e207dc5b347d2f03855a25648fe6ddad27 685132137f11ccc9e688774ba3aa9cbc162e6518\n96e5f7ed0438e2fda35aa57bca383c9e0e2005cf fac79824483c99232b50486a6cd681a2e5003983\n477e9d1cfbc0cae64bb89e1a5fa9d6e4ac2626db 2e7f0db5761c2474a4702d7881ecf471881428bd\n41b412e1b65b54c7b990a7fda3cf046c962a9faf 9bc31acbaceaba0baabf64ff7258720362a09e87\n08456d5fbf38aeb2b7ce5798bc6633e43fcf0e03 64306ff6ad2e3be7dc46c234d001dc8eefb1d363\nadac229d4b29cacd2169cd017b3546b9afa03f9c 75418a8f98920ed9230de3d0d2ef6aa5adf98133\nd590118ebc1f965107462a265fa4d1024e6b6bf6 5e20ee053ae3d58048d7d0522b4f73ce14ee6424\n6e4eaa2ba56c556a7fbc00d0ab430029b3235563 67761f61bf33d4ef3f4309c046ed6d5dfdfb6af9\n54c5f1b8139be081fdba18dd4559d61cf8f547ba f25b33cd2e0e9245f255cc3d2854cd99b588e92f\n84f904309be77a66ec341581d17e968cf8ce44c5 3f7650ea958454df5f9e7bd589f6f7d6306143ad\n7e1a6cc08102c8430b5758b89c6e4ed86d16e912 3e358874a00fc29bb39045c10d8a84b8d661fb8f\n59b4fa6b799b278134f8851501d343e8dc4f4560 6b2da51e78ba146c9c35b8b0034766f182b96840\na33cf1c4d58b6e4164191cb7ba1d77c618b99b8d 386d60c93d44867f2fd4d3f2d53853e9dea9d2f9\n7be875dd2d35b20427138611411d8ecc76f1e395 32444922cf8dd9f44a422630452d0ad588e52a22\n694178378d139f25b73e49f1f7ed61a836f28500 ffbe8c4cc24e43006e678ab4ad8bcafcdc3de97d\n136f777c3f363793b08c28578031055550239920 1c678281bfb6c8303ebd1ced6ad964839adc3408\n172abf8785a6d611d5f9f7c2c22cfe82fecd8bbf 0590da41b4ffd589f0ed59c4f561900197d7738f\n46e44113bdd80bab1076997e0a5cfdecaa54bae7 45da423b90af7b713525e619bbe6babba3522767\nc13f94b84a3d7559eaa4deb218a1d955263e1b0c f4ee5a3071f0875d1f922f0c56228250dc232948\nb3dd8f5b07e5f21010879c46f71f10f815d76c2e 975b723587c622065467ed23dbafc4af7eeaaef2\n1f27ca6db033248699020c9121394d6f161fce5c e946e5ec79c10b6c3819ded1e35240e97ca5e541\n1a2d0751db85ba5c38a7c1c09df48a05b3926ca5 45b33424efff954bb99f98ea9d5e4b7e941587fe\ndda605b430d8a7f5d7b42b898330eb0e61dbefba d8ae13411b5cf6e765f37b31bafdc44683fc2edb\n663a378df37410488ff01e370a6c25f0fd0b8012 f44c8ed3e4c6c02da730eecc2d8a888577add30b\n609a8f00fc4ecf75ba1b3f500d187066b63f8ee4 6f224f3063cc9130f2abe215e31bba3edc76a8b9\n04518f2c68d287028728622908dfbbe47627571c 15880a4ff1bc8e02a7cab8b620a7f20119238571\nc80fa4d8c18daf63de25768194f20e1b06ca46f0 59c2b0739294298bdd8ac832f9911d659b911520\ndfdbba7fe7146f3ec3c2ac2e87c95d5ffc447570 b7ba248b5ea095f3dbb90844cd0363e1e3699b2c\n5dc744bac4db6ce8569066ea449e5bccb371ddbc 5d2d846959161c2908fc12e1b4dcaef92c115ccb\n42a0b1be14a4a7a2f1a53009f8663b69fa0ec381 ae2be25febb3fe301fe106c125fc23775c195b6a\n0963748ab000d9644df0258c7d19072046b02f48 3bbf36a57af760d4a9c1741935368f4d6e5e919b\n39633afde77da835db2ca15e191d0b0ede742159 e2b4aa2028dfd7256929411bfbafe7893b8bac43\nb23e35453bc9bd258a88f4755bb3e160f24a1275 0030bcdb56aab4d71642530d8da765f979fb2bc6\n98eb95074cdcde53790a4c616774c625b87f2a2b c5281b8dbbc134f9ec659d749266638872456fbd\na8df4d55fefa5d014ab5a29e241678ae5b65c313 5df006cc53d122b594d72c32ffa4b20d2f150590\n414ec0f402c6ac4f2551814f07ddc8856ccdb5a3 306277b25e4be4aeaf2c191a354d198b7164346d\nbcc7e8f3ea6744a770de3152e0bb46f888be35f3 6ad17537adcb102c4a8d196bd38df9beca973948\na4f9f3582e9b3a3b575ad018ff481302b00ad590 f90eb92c2e3db3dfc960cd8cc49aa39f08199e05\n1605af6d03d764fe32aec27a265a21d2a7fc67d7 a9a1af7c8ad250eea95dc67c75168d6c4893b053\n5426e5ef13126e0be82dcbd23020dd4dee983999 2a9cda3d8554f0fc4cd5cc32e86dbb54452f5789\n97860f94e8afdf2a0d5c95e4016ee62551c33344 999e732ea691b752a88f3815b8467bdb90eea1c5\ne869d249a138fd368c911b2ab3ff22f12cca3a76 1adab3b234fe36330eccab8c59318bda7235c697\nb95a61f281648d3469a9c19c44d53a3aa08904f9 c670f6196e7332e920938cff79ed69a44040e2a1\n86600c4e9ee574a526990b5229bd9c674219579a a870ecdfc3a7138a51093c95ad48436e3049af56\nbee23ba3204a44908072d6e3064e270f66c05b69 ad0f44ceb47705821244a03a7870db4cfa71b59b\n05e604ab4885a149a886e5e20bd4463939b986a0 e3b6be4d46be322799bfe507a6be18858b1be1e3\n5eccff2c520d5540944542dde7da8dce2516aa2b ae0ca394f86af1ffef788c0b65cd16cf4550ead9\nf0713f4c89a07acf2b2db3b5059581e7c0d18d03 c12fe3b4e46387c11e13f23a6babd065ab07314f\n8e5a61ab5f011e2c5a66f728820da7ab58056fc4 6003d7c0a1ecffa0e09d9e57c1c315f9dafd2d69\n926a712b29e890d94a50dafd931bc3bea694a176 a72d9ecc2511890aff83a0b7e8584904426db166\n53e418b1f66b22e072f55232d5691caa991ee72c e92864d1179fe78e94babc094ea3c9c94b35ddf1\nacabda727a70c68891451334a4f2266c5363871d d09eb2b1e55fab9cf2b7eb5a9c6dd77a157e3b22\n8534efe88ad60e3ea16fc236f56321ab4d6cf269 612cd8d11b933de792b7ea9e1bfafe74733e5af7\n90497cfcf57615c92226b76f49e2582bf02c7509 4f0d3da66d546ac0801b52975cf69d41cf64cc1a\nbab0f37011b72cd82df91b67298243e7b3a48ce8 19e93bdcb75a3cf7e231bb5da00ae3f25f6aafaa\nb56ec589c6be31e337c6c357050d13a8f6086667 f28cbac8354387a27f869b0078f20c9be299fd3f\n2f61ae41febef6562b94772a264ae1af92456a44 e31aa1fedb07e82d43cdf7c8cb4ba2a939476edb\n618890f436773db1b32c907cef9c4955763d38a5 5b4e6e5540f466d9a501b3a63c176b9bbb1f47ce\nb1f80b14746f0eee2fdd912f53ec9703d53f0865 8ddd0268c92fba981ed06909606875961161963d\n77cf0ddfb3badfc74bbeedda92458fc9ee6f5f7b 859e52930e9fef539b7a96055ff1f00522e4a4a0\n4df73c7cc51ef3f11835f1541bc776c082fc69ee 42469679c3590d0c7433f6d094f62c26f7e15fb3\n53625cb5f409ecc0a4028cf1592941dd7a9e2e0d 7e0e687c717b0312b34f9348a5c2cc68767ad743\n01663b0a86ee006b7feaf77b6bb05292f42fa038 6c6c75ea78bea4b8d2fd1c2743565fe7504d3f60\n9e9fde90cf6c8c7ab8eec5bba7654a10a9201411 f4a0111e3dd60a3521026d1b3fe6a4f7adf217c0\n603f2e33d0ee323c61313c15a1811b3abbd31b56 82a02d45da7cf662feda9e7a4711f9502e06e65c\ne9c9f641de811c2e9d04a027ed2b3a0a23400c97 59a3acd52bc75d9fc3a3c1cd9d989e8a2e23f970\nf6ca96af6dc65d52c8861d290343212f0a534c37 548bc71fcd7c5fdfb95bedcdcd0457a476510b32\nc5866d05d5bae65274a702f76e22980d713170ce a976ac049935ce92171089b6b5145235a1abab3b\n21a1b772ca230521e2b5a3f705ce2adcc2f2cdb9 02bdd4cfb5ba95e94d5f5766d88252e7eef4475b\n3a182ed5ffc1ce36d632156c85830f586977ee36 55c8449f10f822ce6b17e9c750caeaa4e1c162a2\n5e1a3ef4483f6415357cf0da251edea795bdda33 e2b6ef627abf5e383e8d9e7f9013ac4d084f207e\n782688ac6feabea5c91432148c188bcfb3cd7df0 ad688d35fbd644c5ab079825d99f710db90b635c\ne6a5560cf35c6b8758b0396013ff44c0f1fc5567 88b848024a47ab20039ae5a38a0c5645f20fd370\ncc80e4daf0949ab3ed6a126531802feb99cc514a a2b1777ea9e8afaee78ba615427622be310fc90c\na6233f54949a029a38c95ee0bc5858043f4b2825 05b2196b54bc9ceceaab5dbd00380a4ff9aaa5d5\n10ba7e365f9a6921ac634ca7765c7f542c6b4e03 f46983a94c5e6a312b9514febd3d393df5050c9b\n9af3f00dc227f69bb4e4ecfd8edaf6adbd4cd28d eddcb8686950c9c819fa58ba64a2ccc11ae13270\n1b79ffb6b042dcbea150facb0a871a9ae318edf7 5fd4399a1b240f6eb75b832a24a8e84fbb3b28db\n54f06a7460c47a4ff029161c65fae5c793b1a4e3 f9713de2715add72824d4f48796602f99cb365f7\n0cb25cf93cccb89256fe404a5a046df133133734 8dafa1e9925117ce022f0cb1754d6b03789eeb48\n5539e69ca35f3f22e44e076d3c50900e791b4363 c812eedd9b829244eee57489879addd2564d7502\nd1854abe6197cfb39f3cdef4113067148af6ee8c 4314c805d0ad1354e3a72c93f465232313e25fcb\naa53ac200814403ec9fdf01c5afa439d55442b92 06b146ec1ef802bca36bcd94342679570097117f\nfe88a3f4b02f22840032676a6711533408091e6e f16170aec286689b3d5fb184d88a3f4dd5cb11b9\n81e247891eea3623063576b1d11661dd3b1a58bf d70d068f8a3bf398a680844bd08eef5e1ff1265d\n35ca5cdb822e7723f1d0ed0a28a82992c4289444 4953ae10141065ac4870a6cc9f7f0656b1fbe6a1\n39a07eefdea1714f9d35cf66ef1afdfc1ac3cff6 44f39e9d1758f5e8a342a4f4e4f1f21c27e62dd3\n2ae5169369ab949b26f8b5febd42018a1235981d d4999ede14b00eae143e69f22c30aa9b9906a27e\n417fa964c080cd5470b6a388727b4fec075a9c71 192f172a4a07fc0df83d61604b5c54c3a556facb\n65cf26ef7e611664dd9b1e522943eda45d0640eb b37630cf6f0dd80becccc0e3cee3dbba1b4525f5\n0a50d412fae77854553ad0668f506ab9b883f95b f00b0fc7f4d4d0d58d3c4e57382252c722892671\n93365e8d90953d53f68a18d883a3f0eebe48065f 31e7fad783926aa3d804c09255f6111c4bde682d\naab689de4f09c0802171a4629a0d10a5d7a297ac 8ddf391c24290b7b82b11f8bc6ff41c079516554\n735127f1ecbf6a1faa8a14d98df0fb5ef40d60e4 9f552aa8bd988df34d6f99497e2f4fd584d215e9\na14457ebe2720ae059318187663aabb95814548e 72176aba8899defb76a436fd03e610d885a2442f\nc8915d06bbc496de9ee59da21528b6f1f5752be0 81e336e19ee2443980f75a02f1d0fc2726f896d2\n417ab104b959f3a5920ec40c5a5357f3e2a55221 3be2f136438262d3a9a902468f73544d7b665b82\n6d71d2056dbea0d096f73e4062798dc5d0126c31 85d2794fad7c117277cf4422fd19b100d75eef9c\n0cb934f53361e2778e958d661ee4fb862945c943 c9608bf6480e9f4b36e6ab3bfbdd6ddd5e46cae6\n2da9858320a4ca056ea28f9f9677e408eebfde63 d105885bdd58e2e759211ccaf67255fcb87683f6\na540426891d9904f4b8e0e9e439704488dccb346 ff1e87ff4c571dce083d142ec4307ae668d7dad3\na7cdcc5f4cc6abb1b45a4b22d3d04409b8cf0fbf 76c08fca189d292abb7e92608b91129e6467204a\na2ef0aafb985bee140087a9af6a1c5ae630ba87f 5e135971f9aaf5fb94eef48230e2b09218e32577\n8226072c8a8deeea2b4534b2f266fceafd21f297 c04ff6982dbca4fb4ff870ec762b3be6c30fb5ee\n16fd518031161dcb4038dcd09c4a77d83326c8d7 2bf97a4f13fa374c4955f7b8f5f7c2fea3eeb256\n8bee450e574a8752d3c0fad44488ee9e66cb1151 aaac0d6bd0378ea3ebf0ce02297ab87da454eea0\n814bb9bfb41d64c30c950789d4a0e9bf161a50e4 8983d71c6b0f7500fed54049c60253002f55d0cb\n772047e3e224166439065e555e944a9339084ded 0f3cad40b806c82998390e74815282b4573ecd9e\n1a7d59221e096840bbbfeb91ca99cd5ae950f0d9 80a297dceb49e4e5ccecbfbffc429f3cd6c97111\nbe20718f69d9b1b9a5794d539affefc59aefd6e9 50447415601aec7a74a0199b78e7b1da5b1d1dde\nbe81dadfc9b3e51f8be46e542ea90177cf29b222 4eb97859d9d77e15a1ce62380d62954d52cbac5b\n15582e9bfcaf2cb2c8961b6154af6a04307dbadd 1975824224d56bcb41a68e544a886c5b98e6b9da\n0f68f8fa4baccbd83b3ed079c2fb30eef2573316 d4dd91616539cd1e271bcffebbaf5ba7e0864ed9\nc4807b11e00c9309380b26e7960aa18c2b086339 aeaf990ca2cf01cae160ff341fbbea8bffefe458\n6efb0380d93774677a8138cfd5c3b27f16dd9285 5ac05a296e6499c6d02a39db12e41fbf5679878d\n69cd1a1a559f3af537166a60bac53739a2270e78 52789a852ce0222fa3dc7a42e114d3e241eec6e2\n7cc3635eabec2c2ddf3b436008f77e0e15653f95 9d845a810c7c4434d69a14d726fdf65fd7bae2ab\ne32952a4a42391e99fcb30cc95a4fdda920ae50d a30aae0189b7a591007657b22a1fa73560be55c0\n150ef8a5652fd5e1c4e3533d43cdf5c8e1cba64f 823879d21910a0545319cd93ae8439e48a14f39d\n360e12e191f7e0f842b81496a204a77c8c882d81 b1343dab3a8cb8692d73f66b2513df9af9ba325d\n73675e9784d24aa3dafbcf92c0ade1a653eae66a 4ad58f1a6456efca5fd7b26c67c58e00eda395c0\nb93be1f536a80089d9e991431839ca2ed71fcb04 415b8abe6b84e11f16e8f2b03f14a88fd4fbbd33\n97f84c000b39bea54c4f4701fc691a8541001664 b5007a70b1c004fe932645ec13f4247b461115aa\n8687679240c796ceccd6d6f6817ef43c5ca09460 e75ee623bea1393391bb7dff4a3287f928f7738c\n7e95273c643c8e1bd53e5d4820c1d957047dd142 d88032e4ac59967e76cab7a7739974a59c058b1a\n25802a6092053050381640e153ff1dd98c3cc24b 7b1b9ed225f934f155084504211f6140b92c14ee\n860e7583de1082986c2d4352cc1a9aebc5b3a383 06df6be8fa1e055838eeb0a10de08324eb2f9d00\n613c0df43d6b62d848ec36eec88fb5e8aae30ebc 17e03df3e0cbbbd5da35597ce52c4ba4d815a4f0\nc8926e8d1516e193693603acb09a0e911f7533d0 c5b3503a5a1b9dcc68837e93fee4eba46a06627f\n37d88487c0dd4f382af5b4dd2ad8507e256d230a f9299da28b9c7fb61d968bd251e66025b0b63fe7\nbcf787b147da7c77c66e315a757bb00c0e21e0a6 9a1bc35d735809c196d9ea586cfc86291115d567\n69ce6c471d53414dfc7f0666aa009254aa5757e1 2b086e4fc7b8a5ea627fb6e5a804c771e9f5c81d\n7b35e6ae06ca2a98a94173a9123aee686aebb417 fd724e971ec84901438ac469a18054ed2c6825e5\nc82adc4da5d39fd67b1af986fb869846b41d5b48 8c20afd0034389cdf5043c171daca6d028ed56b8\n34901eae4d4e5d1e1b88daa9bd9229ea845fa286 1b020d812a904238747e03c0fe1fb9619b51b8e4\n9634ef80c34748f6e73fac4d20dbf048558a88b4 970a09891ce43a702acd3b1436d07f99cd7044b4\n04e4eac126c9f6a8071dcb0a45f25ccbf00f92da 06cefe0f54858718d215ef5f8771c8a395161e3e\nc731719d752d71cedded28a79bb5137ecc93ee9d c54e8d5f7c1f1a4591da9908f5c27eb176cdadcb\na5fc8897b735558754e4ab720caacdaa327e367b 51c656939d678d4388b69cb1e1d7d2bad7b97d60\n30f663a5aacff721b1d8ad69b74e5609765cc451 e9b41520b5b8c0bb35bab15ff9a8a0d5baf391cf\n985ad7b15c9d0b3d3693676a95f47610257f3930 84271ec7b0b81e90d4d62051106a7005b48307f5\n4836c7f172e412bd769359d9291e1027f912ee5e 64177fcdb8c9fe5544198b0bb6380e26d06ad3c3\n56749b50b85312625fe7be1a916da5b24b1d9d47 15d2867f6df2f7d060b5f66cc62a5bf43be89630\nd77fc893d548482764a0af4adc69ab41dde9f9bc 7c911b17d380a6b05b0022b523e3b74c411f67b8\nbbf44bb52fd758111b41c57b7c7346be84f080be 98031492103ae763e6fcdf7677782eed64daaa0d\nfcbbd8f12b7391011f641540fa44193f09ac8617 ba01c3fec1913f012ef464d7f7235acb58efb962\n87f4c873feff029341b5d9484ec9c76132c815a4 a5a969a790c623697d288bbdcf6ab37e705d6026\n61ae6911e62404ba2498aae7ae73554d4719a85b 9798bc7dd2a38d844d72cd3a17fd9d0557fb1ff6\n3b03bc3a51688765416abdd702f385fcef11a420 9972fd97d52a8c2d386ef80ef22731a695cc8bb3\n48bf5160ddb1a3c05882cb2ee69082adb8b0842f dddd2d42419681d254565720d8f9a2efa834335b\neaa011bef7d8867f204f36e8dfe7bfcb197014fc e5843ac3466229a534406282017ea9f1878d6678\n02956364ee58b7a89030d9fa44f5876454dfab84 858cfd15c482a7bc8c557d09749e7b56410b25e4\nf9a5bcb90ecde37321b932d641c9c2fa684a866d 368811d4c7cedafbc72413890a4c5df8eb0b1a29\n42ca9e809ac4c4de05a5e8d625b80d3b8b9b65dc 9f4b13dadd3f78d7f8356b12e3fce3896a674d75\n32a12d6e69357208012b1f92639fb8d3952f954c c39b43b4540fc0cc243f3b17c32f2b12bd878779\n453600ef1dacea0fb948f1ee580a20dd11af497b 33ec9c773097f19d6aa0d9302755e9d1257e554a\n11762d9d721527a4ef275ccd1b751775d50ba61c 91659de90614ff7394e3b9f1f05ba317d47c4809\n49c9e186909bfe77746bb7440edebedf29fae75c 0398a0bce4de543720a16354bba0843ca0ff3fe1\n9f66af01b0724ee6af05cd578415dd483728e15a a60e278444a3580be8adcc01c92465d20e74b1d3\n3e6e108cbbca21853d1b3ccff8d5bf6c0879e147 1e209a56271e5313e30f79fee904474b2f803690\ne52214507d5df7720a658d5e7ba13c7d51f55abb 2d6ab24b517dff69641ac0de55b084680d3fb82b\n698fd9608dcb72d7c35a063993a004f8f4a58fe1 33305ec5c9cb8fdbd56de6a18393dd7ec2267903\n80026c322cdfced071061c8d7a340a7fcbea5b41 4010b9eb1b8efb47c1f2b1f610ae47018596a7c5\nc1427dd8fc37ffcd927d0703450e0eb314682881 76cc652e215a5c629a1540dd3802a6708210e07a\n7054eafabb1550188c49dea31adb6acc4629ddda 2ca4c8785f4be6cd5ea74c3ad2dc8ba3647df309\nc84092c0e3b4c9085b5935c3fb8f8bdd0a0aa2db 219c38ae0550591afb155aaaab8da3179b323fd8\n00f0e5051b76ccc86adfe0379db8935312362850 469dcec6d8e6ebffc5e8434501e7abe2bf630061\n5482eecf2fb9545bd02ad864207faa657f2651d6 31cc26077720d7722381f30c608c62e594bc5d86\n861066524d8759c544df06a2414462681429efc6 efea5e6c9eff8069676817b179cf87518f864b47\n930191a47b83e26e49e63ad6d5fc2c8ba662b659 f12011ee0c862ab1db135fe98011ad54cb79028f\n7f0469b0b6ad50a0c10aab376e4092ec44a1cc9a 654890543a9502003343358a74667aa84fce8ce6\n967cfdbf79193b1d2946a07bcb7484eaf61d311f 82abbd3db4fde6ae67f20c608eec59d3e5b30d50\nc41fed500341856478a52f0ca7a0e2a88ad45384 1ad1b143a610e8297c94959b976d79e6e61aeec2\n2cf6ba08c1cb4c4fa49360f268b3d9227a2be04d b0a1d9409814394a39bf2e19ce33808d13d167ec\n9d937fbcf1665fc91e0f7d4d217a314f62e48406 cf0b6d888c542ce632f14786e49b80d7fea36d22\n21e440754fb7acb6557b7362d0460c2c8224ff59 e40c89076673550e11fc6bcdd54b2cb90aed5b53\nfcf160964503f22efd00c0516b299c05e7180539 81ef56cc75f761bca7c076eb5739b8c2923d1c6a\n28aba81c31b25088d8532c6b7d32bd89fbf03a36 a290f4dbcd7e23223e5332dedbc08589dc8b27cd\nc39c39f5063fee2c31094fb2563dd0ba68cfa8fc 8c6e34ac805b4e8938dbc4c67d7630552c39e940\n37f93044cc87a611cced5cbd699d3088e3153743 130cfcb528496354e1f9cb74670916078ee03f4e\n93f14343b48a5c74e11f9d6b4bef4e4301705151 21d5f6f99f605f9dd02846bb5bed279afa69ca5a\n0b1d8e6cbae1473372c43e9c8fb15234ad74fd14 3349ddbec3c913998be4c0bd488b5597620f4fc4\na5e42b9d28c44d3296da3360ee0f2df723c1388c 56c59bcf903f089cba22882ecc96044f01fe1b2f\n580d08f2c31a7b4f3211d9f9aaadaa3d38f39386 490b1316a53216f969d579a403bbc8863cd36107\nf7f4f4d6948dd709b55c2b0bb7a7d394edebaf45 fd904e6be15013b4e67ce16445775dd027abee6a\n1c1a897ac84d489c02d405f8857341f6f7a94860 b20342a0d2b16463d73373463738a45eb3619752\n6036e49310ce6d5b6824775cbf0456c7403610f9 fa1a83c99ceae3618f6d3ecb29af23432227f3e1\n01d481bb1df9ab4352bd757c73383a5a28ada4bb 34b53538ba5fa4667f6c18102ef88c5f882535be\n973f23343a0d007842b81378511b3667d21031a7 1a5b470dc3553dc8c4bbef3af1ae68a6fa19ff79\ne7706eed265da656567fe0625f8f0f0aa580787b fd559185dc1676e13756a2ae198f9d0fc8a28e5b\n4b9b7b8d4d31918760db8837a0748db025eaf852 b84f4f2a33ed31abc7096fbe5a652448001b2845\ndb3b9209c836505a1189a9a6c39e32964c1a840c a2e8b4438ea502859eb1993513d6da29817d07e0\n7dc7b076fb61a112ea08b5dd22b56e1a893f0cae c02c27fde03aa84b56ae81fb8e8f39e8b5b0ec23\n540106c0cc53d1e32ce6fdba354b771cfe310ba9 2ca12bbf034b7087e145c943364cc115372d9b48\n4ca7a413e4b9eb28700113c5205bfb165447b737 9b61a73a4ccb88a4968c8ca31c4c5b3c3511e396\n27cac799e08008bf919d04eeac0801966741f0ce 1402d30d1b54bfdd86a0230bc29f1598be25e096\n2cd6404a006ce72b6f99384501d9c9763d289c21 800440c151dc918f76ff8a1165a90fb60598f099\n0bed1019ed36f60593235705b725ebef79ffa735 15787b8dafb285f1ed0a48eb467087cbf4352ea6\n1fc05f62c2992ec7c34ab2d6f33f9cc3326bb892 ae0a038b89217113d53e344d0b7b52c970b33fa2\n03232a3cdef9fcefcbce0e9bd1197d8245813d9a c829e9f9676640e3019a5c5f03d2764a5d73ccc7\n5e662a8a0a56903f7dc08de1f1b594d86f508bd2 0b00bf52b63d3c73386fb84c3921638100725c87\n6fb1de6fb88c8eefc24c7bb38f5d2d8e39c5ab55 c51dfd1aa224ca371441274cd9f15055f3174e6f\na8dbc1616fcc9ae371eb0a771b0f1c4666a0da7f a4a894e02c939887749f2738124cd5ef1683ef8b\n0c23e5f697e816784b941a432b6db25090485594 3e5c788013348ef9ee569b827d649cd7e4256e71\nfd7df7ac89a7a1099b74a938152fda9ccb4e7f60 d9737c677a84af1dd20e52b84477f9318016379a\nb0888c3e9b32b3c626eba128bc5ec9cd26659b1b 67be44475f2046904d6989f547f7c8e96dfa52ca\n37a96670187540fba171563c768e783a6ab1330b 7710cbed85b53995734725e28bedcfc5e5bb867f\n6bf89bc1e5701de52a549a232493d9f7d7323878 4a60e325352b4145196570ef1ae31a9f96651c02\ncf03e8f24da551171ceca6938709c8842a9df460 c77c4189d510b85440cc8b8f188ee50cd1da7606\ncf37915407d59977975c0b99e4b744c745b647f5 772a71ec1bf3e3e7634a69ad9b23ebd0597fcd4a\n56a08df59d6b2fc9c8783280816944b82a87580f b2c28c6256afd825328070c036d24db525a8f61f\n528420bfb9262999da2b60a7b275dea2041c497d 393c7ac2b2138c05312ab54cad5417b52850f0b8\nf1fbddb0ea04526cc4210e399c53515ffd93aa5d e6e96bde3434945e77fce58d07f69a953e8b5fbf\n1a89a3e8aa54f3494799346d652be493624e25be db279fe8c8b52e23f968d6a109a92144aacb149a\n2e1435e43b7b1ec580b7a6367a2c866cea9174c7 c22778af0fb79bd9080816c9798e2289fa33a1b0\n4448180356fea2d2db5b94ae91b97b7b8740c684 abe620ca19552c41c7c49d9902d05862a9adcdba\n57fc06eaee2dd9b0af093cc13261f476c956397d 3085c467e950a26d5ce194013077d5f42fb93b44\ncd2c3ad22489eddfd8fc04f803bf3213feac0beb 2ec9e23f4ae2508c1abf60ba7854040c244707b4\n8fe633da2e616108cdee8b8a058f2984ec9409e6 d6b3bae0b4c60a8216763d8e37c53e8ce15a2006\nebfc43eda785c5f35daae5eb49e608791e4a9ef3 23635761bc19631a7a27a414f21d855fef6fae82\n8bf2eb43a07a9740e882c0bdf03dd4fa926bea63 6d189ebcae499217888eed8efdef996f65ad1c78\ndba0b2f6023985e2ca680c913f5707ea5cb8ce01 29583425f95b40c9f1497ca061ca4039ee4bd440\n5082d4b9055eace9cf40315c262d07c4f38571d1 8ca30f44e3f8bd095873113a51292978ba3dad87\n3152204a2896b4fb29d396fd732e6c546f9a830a 42b9f0729132ede1f16a78d2b7f2ecb025fe007c\ne7ffb219131d929f82a43ddeff157f7d53c52990 422d5bfaaba79d01a0f69d42adf86646451625e9\nda7099a3dd9f2ba3a3919be80da6d5291325c58a 93aaa2ff6a27bbe1ba8bf287387b88ebe0d8db68\nefe07b2d592897a4c2a4ce7bc71de194e9bea513 cef220cb76ff9bc970e57025f9c4d63466a0cee2\n0823fb56959305c75d31d8812b0ead681118ef3a 9ca21d97cbce2dee451f5d1b1ab8c2c5dac00640\na643904864b57d5c6a6862d96ccca18d344c7852 e873354bad721845d0c2db8eaf008201e7df6c5d\nb350ca3e6c914b50c81265aa71c8c63b41b58d7d bde6204593f98c1b17a69f9ae8f4744f4d64e311\n6432cbf26963de17ac3a7e7608c711a52e079784 cc102878170d21ea8bc307f001b9a8b7bcd6dcd1\ne7aff929f6b0634d5095d87f425a2e562c9ffdd8 7811080ba3fc853bcdfc43230f8962eeba342186\ne4f4e810ce64df082386098d0ca78b06a27a98ae 42fd170cccfc2aa4b2801879b157cb20a385d595\n06a033a0b9561a641f062f3cf93b73a8ca26ac56 a611eff09078b4f6bb340572260b31e7bd4374bf\n37ea7288802ef04af5c710ebd06c2c1ff4424cdc 4690ae994efcb0bbbb76cba81c3b84ecd9688254\n84a0d7eb5d79266f77fc3ff9cac8de8af858b1b5 b3076dbefbe8d9b7022cf1abaa0996618d8101ab\n4de169b163c466b4defe50109ed28c4d190a7f2e fe83fbfcd8c04953f66afb23563d13b900eb8e0c\n9492be8fad0adccaf8978159a83002ec96a75a7d 38793946e4a6726b34d83cdab16c2bfdc6d71852\n01e3d89b73d356adaa85a27de6d4462bb19892df c0eb93e7f517a049496b638f275e52678d97d4d4\nf289af67334d267e31970121c9ec34d9d641437d 74c53e084b54916bae71af6642327e7f774fb4b1\ne84cd749f0f904ff7bd95fb51a607203d2374c1c b6ddbdf0438949ba70dc0c15c4891417b3915b2f\ncb35101e23ff39e85034e6ec4c6663e069eb0e82 5e565e596ed63bfea7f7a6a4064f7ee72e71584a\nf4aac5df85afbb85ddcbb5e8259045146306945f 1f746aa2625e5506496b77c95cbac7b0e94e9162\n4cb4e5ff2677a9ebd5832243c985aabce2be19a6 d2841f57e32119ec853613148327417f4bd81144\nc1a8fd4aa94dcdb88c9cf9b383f78c3c65b3639b ed7f2fd816f1e3bba5f7da829a70ac09d2715df7\nf8d70cb0a0591b667cd796cb69b9b002032513ff dd9d477fdef46aeaefc7d2fe15ac7d19ae0726b7\nee68bc9aa76ee0385984d17820ed594622568d89 8a81c41f5814c7d4727e690601487a5ce45ee553\n3e18950e44e43208acf2bb600a192259054d38cf 1e6faebae12bb6fca9471b0231cd1ff23367319a\n92a9e57077456b99564b1d5d3f06331556974fc1 764a544391c62c49b5c59cde7bde9d1f1753b0c5\nf4fcef1e462f287b293970cc358767455e02adb0 d07084ce22bd7bc32235ce9067e2bf91d84cb3b4\ndfba61928201c8780efb0496f80f6e26df194701 a018e6f80173b43274e7ffbe30ba98b813ced989\na5bfdff711a3619a2ae6922849160fbf0a021f87 9d742298ddf95d2b3a28f4f6bab5795d73ad6782\ne668cc18d44b623f1c8a254fc97c750f4aca65ca 40c6c351bd0fde42d1cfd6695dd013706340dad8\n1d73ce9ff89b19c9b4e02648bc0c4a0114406905 69da0a6c08ef6527d57fdafe6bcd400513d19084\nc15ae71bae8ad1d6c479d9b8104dbf33cf88b5dd 310d797adf731a69ec82812b151babc28e8a1d94\n7d84b78bd33bc803eb2da3f7653ae8c4df6a79d3 4084e24137db028464718be80e4901bdc6e87538\nf04436cfadf28cd0931bd7a52ab06dd52d2c2df3 27b051ecc31ddd3e2d725dd8745d181aa2b6dcde\nb007ed71058a166e86a1477115a9ace59fc4cdd1 66f7c69f16059c521bfa0b2a2e0fbda1276e9020\nc63696c11851e7736908b99600826d203b87b773 acec988456fcd791c7aaad759f2f002bc73418d9\n5fa04ab27c9d053ea03d9c276467f41aefaa99d3 55b9fb9834e44f1acd961d51bb9c464c22cc5b33\nf55708fe26a97ca7d6aab1a93123eae20f805a9e 88f97f8d11e9dbe7f335e5aa71ec5037db001c73\n4f2f4d2c5cf5be6c6cef3f91e61dc93c8f1f22c5 ab880b51d522b271502f5cad16ca6598223acd86\nf3a967a79e358144489b37bdc7344d0fde9a7a97 f2c00023d5b96e8fb732890a8b59be091c9de63a\nbb9d5990b1b1663f2a84408e165f2057ea130892 b355e4657e696243bcaf41827a1ae1bf572751da\n171d1d4fd2d9ef68a31ca89b269d77099ac1de00 3854fdd5a2aa3017c28779b58541add142321a3d\nb3ac18f21234a54e3878e3c9053d31e3ee6ac1bb 723dffc6c59562e7c3de4db04895c0884f9a24c8\nf367a6dc30b9b1a99f47aaf625a7ebf2f82abd9b 8b8d7225d257f460604389667971633359080374\n95103c1547ff57aa39519eb7ef1541803229b7a7 0a3cc1cb399e4f8f0218f1a481bd17c962aef46f\n29b78353e7041903f75cb6a3e9817702c2217be2 28187ff391e1d93821e43ac35021af0f6269e0bc\ncc23eedbb10b2d64af675c799f480fd819bb3316 d932ffaa441b4a65bf00bdfd96a5c5a39e2390a1\n7e1465a6fca48f244932322425095bdf1a339bea 37ad4ce67466f79b38376d6c10fd124710719014\n0edf1fc895611e4257dbdfac013fcc97cac568cc 145191e5f3e5d7b1a9bb5a359b29238af96f1cea\n22ed47cca615ae605bd97b8d2484cdef892b559a a80e0f268a7f7befb6f14a2429eb865f7456286f\n92e825ab8a29333067940c416640f80c71df6e5a 5e35dee0c8ca3e93d6f9780a6db9f3176c78cf4d\n6ccfebf6515de6204ee9e05970d488725076d632 4c5302d76021f660cb7db12a0a0a3238b03e3aa8\nb6fa620fc1f6ca25742c8531e661feedab20323d 159924908325c42e391ca313fd156be0d693f6ae\nbef223835926c803faa42a51cc1f85fdfda140a6 45fd95c4c3bbaca91cb180ed0e8e513b697ae694\nb91ab33b1cc3e1b6b1234b4e2b9770428a9a5cf9 4f4b3a45d2d830c30de389e4aba8404cac99281c\n31f23498f53a95f9b7622efe656c18d783a0170e 236065d7872f05b6e9aadb2e5dd0cea1a0b60dda\n04fb70258504ada872fc16af95b83654f80a4066 497ada76b02df9dcd27178f628ccbdda0a232bd4\nbce7fa634cbf563a23f711841a98060757730bbd e4b48d63bedc6bf558a02ed9b235985a8a0951b7\ncdc9f52cf43c0ea696b32aeaf3b86d4cdf8fc8ed 019910af26e557ada3d76af37adfb7146119f10a\n5000f396be183b7a0c32e95c9a4df7f0d15ea65d 5d2dcc52c36c5e76ba6fb7516c0a059ea5c83d52\n3891e9b689f6611d1553d668461fa3186e760f21 41fecbc4f50f5d9eafd5ea5bb876c55c85bb49e6\nd77f09aeb35745e42c0e753c8fe73414ad029b86 7571a8922e1017a7f453414f16f4709310f3a3a8\n8543de9ba8ec7754e8b7f213e74911a0833349c9 be078ac3c801474dbbceef607740f9fdc2420c53\nd4ad80e1d737b20c075782b5570c2c3eb9a2b00b bc258d9287b163cf2b796108df2598174f4a5e92\ncccb613498bfbfee1413d6565a130e0573699e15 777371fd3bb9d239c8ff766b41ff33ef1413038c\n647c2cfd9f882487e2356c27966eb3e223ee3763 59886d1b533074b03ee07906ddc2d066a90e553c\n7acb576e2aeef13cea07dbed698ffa795f88b44f 296639ff2053fa322bf08333d6ebfd6e102b9b3e\n70fab0f70b9fa9983d5c8e05015da62a83e26d17 890c6c01a6cef610b8b6b5d3d54c56f0e7e4600e\n46b8a11538c9b07a9a75a2b76a58684560988dfd c5d5d771d26a795dfc11678433596c0034804d67\na44803d454ea4553b787d9a701c5cfaad85e757d 350541d96fb9c422a5f790289e40059cb87a256d\ne4c21e933ac55099286852c0587a4bd0c6405d72 849af73de06f383c97713d0256c1eca245804ac5\neb7d188a2a29154643aa6e2eb52dc6ffb2116a28 35e96931bdce5975c0aef59f0bb512c399f58172\n269a70b532ca906febf0a918fea8009800ae6057 32fb13bd8a2037b023bde49478769778f913617f\n377524175ee03bb5fc59baef981a821b6520b04a 5ba0ad2812abfe47889b5da204e32dfd1382b52b\n4a4a19d4f02edeef92ce8071fe5e48d1fb07fbc2 fbba8ced9032f5a74c60e90cc5adf356e8107646\nc112f5be2ae9b15f7cc05c3e4cc01aa23e894313 ccfb96e71146514cc6d766f613ad8b4738e85c4a\na8c4cd48daed3daa5786a82b39e3a866bc4ee372 b28352e0c047f78350c186a7f0b007e765e26be1\nebd9207bcc34407622dbafcd033c4a243c7e9ff4 2fd8b810062e5450f9b74bb83b78a20cb597b26a\n3429e707ebd2476f2b04b7a134f2abb6d65e1ee8 c060b4c79ebcc61417af74c573cc2b3d2fc5964b\n618cfdc445d34e6cb2f367f4c3f29ac8e91fd011 ec03ab4fafa3e2dd1e483cde74b72892a0abb7fd\nfdadd39e4538c65bbfe15661a415cee29d40ca16 4ca4a32066b9cc5fa228d18dc34c2a338fce3caa\n6cada92ff28dc601b29e5c85922b27bbbbad049b 9740e5235d60bed0b13fe0abbfacb965e5a1c867\n08a7082ec83381b1a79e080ba8db885e0b4533be b521998274b5e35d779c776ef3f4fb272a30c2b3\nac67c9934417e4460ce3667a8ecf7d0486c362ef f7337e1234d7690043f4c3f33c64982b3eead78e\n3e0d24f968f7239fcb748ed9fb6ed075a0244d36 65f7dd82bde40877a90d5c9ac5d2d486fc18125f\nb659c2e5aa329b819ac50df1f8d07e99cf8ed79e a941ad1e20cf195747ed4fc98a95335f6a3af04b\n7f9d7a5693dc144bca30de2ab799b752b9c62809 c3ef9c012096370ea987d333a44621fb5a8c2b4f\n41ec2b26710b24a8b87abb3f195ae525ea2fb943 2b0e248d409b34035d8a2347a652ff8e389d98c8\n5e1ca3b00d6fdd060de772d602af28e90b3511c8 590e5e160937da77770f255e61ba128a3bc97b24\n89dd9902e92d0d5e3b59eb058896a72031c3f96c 0ad859e06f8e0b02ae416735d64a75d71ad1bf95\n27074e696b8e96d4794d3c3b1dfc0d14d43ea9e6 9b805690cdb8d77c1aec3d754868b98b035cbd9c\n7d2746d9912902395c6df683439e31265c07dcd0 b91ce0be9f64e3dc849a6c1af1a3003dee8b9c1b\n6839c1c0ab171d3330aabcb858cbd799f8f9e537 cb6de6a20be1909cfe47309baa1c4d2dd73657b5\n3150c68602c5c51550ace56c6102547fa145229c dcaa0728631c9f086fd844f0f9cd7eb2d78149d8\n2f04c1ff444c3387a527a2715eccee1a8ae8c784 d4821692026e33c876f576f76759eaa0abbc9ca9\n835b7a46a95d1140d25e11fa086eb1535ea561c0 de8628cd122cbd5bab2148afcf6bc0758c151a4c\ncf2c92ab6b4f08fe441bfed2e8da3061d0f5e3d1 1f186ebbecd6f242e4c9bb7770c3726b6fc008e5\n03d1691589e459690016ae3e53733583809753ce efc1f81261dc9e5921aae5db38be5788041cff90\n9ed493823f49208bc8539e567ce18d424548d665 03af94682255360f4ad71155e2e95b29172b7f70\nbc76502f45db04cf7a726a8ee39b92a4edcfaf98 be9dca99d685512a69fad5be1689b82c82c1d9a4\n18f8b6e45343a00e4c3edd449a56147d7fec1772 bf9441469687ef416e87de1fa0d1b5608b8ab577\ncd2a6f55a1702e695d6955e9c595133c1435f509 01a3d7ced3ef15eff88603bb4dc91ab93c5951d2\n6d5b47acab83dd945bdc2e8280fc963b3aea842d c2a3d94ef1c166c4018f44d112795fb31f7fd5ce\n1edfbc47314abe4856402e4ff8cbf97772833bfa 6dea97cf6a026575261ac394876e7872055be161\n7744a3eb9a3d2033441db956739b7569ba88894b d983d792b10c5789f62edcb988f71cc16944df19\ne7a5b68c902930a4fd9a0b6ecae1a0493b61b09a 5eb7b99d1f1769ffeef24725b9145c3b6921bfa5\nb7bdbe8670d531d342620972056c12ab75ed4885 626efec9c8c2f712af2f4305eb62b5c91f3e6bfc\nf72a5d02a04a9ebdf62086a17bfa20fc6b71a66e 9339ce064e69bbec31379b53a1cded9001efe3ac\n3191db2e2ebf640200358f502be7a5777d646c26 8fa323fab306083a03d171b4e839987f5bbfa8f7\n970ba5d86a2c0043d5ac2060b854f3d96fedf03c 6303177be1e3fa41cb9201053ef37a123f4a75e3\n1debe4a8b35c1d68043101c5713209186ab45632 e29f88e905a5e92d9cd3605d9d0a7baaf5bb663c\n73c66a7529a1df589700b1a44b561a289326572a 29b7bcb23e0c0175645a83c0bb3081d3157401df\n39908b7c7fec10774b29844d5f26703ba4b4a9e4 9efbaca47982fd634f77cccfed86ab9249d6dc73\nf945ed02b62646a3a89c18b19adcd4936cc76049 5a731d69607099471f981ed6c0ac044cd1d8ab71\nbd294c73e7ff5c2c25a1e3321a178b13937e4591 2232d8a289ab0173ef2a12ddbebb90c01efe12e0\ne21977afe32622a6100fdef01c289c1db66dba3c 020a2cfc9705983fafbf94ab5bcb9672e6a84378\nc4bfac78d6e71fbbe7045d67e9cc5fb03aea1ff0 67aa08d567f7554afa395769f8d4527ca5fb6c19\n00efb00285993cd01bdeba7f70e5ecb32e6732dd e8e051ec17d64cde19c93082d33dc22b48a57704\n96c17f0d10f8525c485fce4b345fd3f32ac282b1 9043a686dba9efccc923d18d5579420f6721a0d0\ne8dd84d4e2419ada4ff0b3d8b59b93be14d8a1f4 73dd6db6dc4fa158c96f0adedac4dbfdb85cca91\nfadc34106edad6be405e616f82b78a49d5791495 45ca875d6771e9cae902f0b80b0e3ba40b5dec01\nfef355ffd8fc7b7dcb88290711e5d8d929ec9993 e100ca5726d3597f4841adf95d21c7ded263f360\n50cc409697b10a1d93e4d42d5363814c3c2be192 f6f3423c42fb66e0aedc30b37ec5c96a5b79eeb4\nad324d06a5f1e2d571a16be6cd58159f674a8a18 ec940657ba7a9b8077ee9a5c21829f65f273063d\n3de500f86d583a4f5ef2b1d0e1b1bbfd1ff579fe a1bd6efb9a4d0153d4770e589286a212ab237ff2\nab528ae6af5b63f784c3d11d7ff29d77cc1d2583 54e199f0bf8621dbab40546f85c3f7e4afdd180e\n8790e5585934a7e58dbb2461c6888defd473ba59 64500fab434ef71d2808f0d7b9a3c418665b889b\n3826551f2380b6ec4445f5cd4c68d11937c06a85 95ec2e255194d86d96407a9f95cef84f93703b91\n082b46ea4fb1e676bec143b5fed9df188d8a3a9f 199e7f5517f21f0f8bdb68f8ab87a4da612fecfa\ndc1b132118c1d64366d8daff00d299d4cb824d6f 4d5b07fffef39de8f6788880b01cc336336b91dc\n9974fe09c23287d448965a5bf8a361b72309ba10 74f97c26ef8ca564b34af2b00054bd968c9e1631\nbe2496eb927b6471638c5980e6a00b69ba055128 e10a370e1bb24c11ac00676f891f11b814887b78\ne28b60f184483467001aeadb026c924c479ddae4 58370bc529c753025f2c26ccb1efc3ec19ef0804\n0787c22852e9eb3de8aaeec419b2d8444aab5597 d16de249844e6030956211fcbe414a2ebad6d3e6\na55e68537ea9366b99a85ab1235a8b1c4dd5e0aa 1b2ec6b860fa512dde175d45a2cbe85a5fe1da6b\n81173073bf763d3827e62bb694b9e4ee0fed14bc 167c5751e4f6222916df387b37a1f2f9bb5b9a23\n904d674bde7124b71e6fa721eb29e8618be04c1c e02a22f54952515a1def6631f861cd59e9315664\nefa988eee7efd8fefe385f2f3871d4dde5ca460e e7a9473b08b859f466c31896fdfc52bfba78695d\n6b8f22b9079d1a7a518fc53406936aa3508c2975 19d4c8a0c1cb5b9081e00ff2cf2e011509d98ed7\nd922c4e67255f92875db11d88a25493846e4b3af e678bbe4cb3b9eae57cf65f74b3e3d7c98d7d644\nc5dd0c4747a6996e4b2f0fd99909d54bec95318d 88ab1df0c08ef7fa1fb2fd2814de59bfa0c4e4c5\ndc08c872c61dc965ba076177f17f4c309c22beab 355e66ec74c6506d1d502697bc862edcf2236b65\nf6b0bcb64ce0ea60c32c7090593bfb5158dd89ce 4e89f2771f0b967acdd16f0750ef0a7aebdd7657\nbbfcebc2b5a2647d70506b2949c6d2c147857fe5 9400e6083e0a7612d933df56e16e71fa83ff9755\n4e051d1dcc4854cfaa5890aabc70953533dcda3d bd6ad6d0dffec89b174e96fc523c70888bd5c608\n9642a46e6fc77f51533d576ad805063d1729557b 565f873c279ef61924ac0e438d14ad4286bf724a\n8aa48de980befe3d967ca0700f5fd30f6c9a8de8 445d7b5074ebcbbc6f7c6f66defb138a080d903a\n7109a0f270daac6f2306a8fbaf590107fd18e588 ebe4d19dbd11fe9aacc1d6bb8f1772e0ec8d1a40\na25eb4aa4abc61bfa20602dfc3c3643c99f18d19 c694cca3c160c7b4341e9d80e13666556f56c776\n9e947ab212013062524a77e01f9a2faade185f4c 81d0b3356d5ac557198a9b816b0e2c3b54db01b6\ndf8a22114499848ec011703928b88a7d83777597 7e6f66484cf022aaedec88b3c32cd24507d0f72a\n7de691b52cd1e657d3ecee1170a7d29a236c377a 56921947b5196bed12e53bebb58748cd948ca79e\n2669752fa28c17a35b708b047929e8bf74fde89f 332d2ce2a09810b3e96bffff5baa09d076efdb45\nd1b2aa9bcc05a78c5de3a17f071cc85792674b58 6d9ea592bede91dd448d13e203d05a10b067a413\n4478cf9ec58c9ba22cc48dec069b0dc607f46719 69d02cc8d6d658aeb9d8b7d7d40d00905aa2d174\nf6f6f7f9e715c8ca7b18fa172d6deda6f684be51 3c3e08212a4495219a53ee53560eecac58261783\nc38d7592949d2e0fc70d500dc0ec1e2b5addab27 5bb3c8934a24f6350c3901f81bd00ac8794c4e4c\n23463073d44a85c41f1d590627d1f74618df29c0 c1abcc20c13561c82c35e0a17d256c35682dab42\na4e92c1eb3bb22b69d5f2930dd29e851039b1ab5 0ef3bd70b4aa2529d369bb51000ad693db37b9a9\n05f09542b2e85bd6ecee8d1956fefd90c21b8280 10750fec42f6cb6eb4451a55679768cf561f8c05\n04c79de7bf1d6b1d89315fe67d5fdd1090ddb4df d06e5cd9d270afa0a8cd0f7a30d57b136fcb9032\nf5e7a9cd327218eff28968323ae05363fe4a85bc 40d04fcea3fd73c9ae220897f366c04c11351f01\n15363728f57efca90e21d3ba01dc080c0d5d0448 949d982fca0e37be97a2ac1a7943d230ba408e99\n21682a7dd5d2eea5e26db008bb7507fc7c8575ef 22ab4475edc69e98c5409e173b5be558b5852bc5\nec4e2b496e54cd5e86debb099992ff7ef532bfc4 8e220e53fb6bcf0ef7bba9e97a95e1c593e18c40\n1692fdd43492d90d96fa5be520d5624ca695cc52 62c2020f247babda4fd292d9547b4dd9e080c3b6\n9eacabeffd779166a1e81ce344f990e37407dc53 bc64ff19d74193c0f15fedccba5d2580876e11ff\nee2019af1f13b5c4cb1dd5b3dded7c51d68996f0 a0c44f4441843a3c7f2bfecc695e3c001a7c1180\nfcab0f1b512fd59e2352dcdebc863daf7d1803ac 93d2214367e6a4de0a07723c69d4fd771b4ed5f4\nbd2c09f193dca5629237cfc0cdd354eb8a9a6e42 c44b498ee7f54b9cc4a6a0e1adb0055e6d76b57e\n7b3bd4870a7ffe6e3220a6263d75621b3e1c3600 47214e016af347f6b9103a998df4942c7700c587\nae8be11706a8fd5670a6cd014f5d56bc7fd893eb 4d3e5e20e5c6335955d2cf625dee62b71f7d7d46\nb8a8acfc0e15f721e8fc32859ddbd549094db5b2 1456b830b4816a2643fa26b5be66719a11cd7577\n3cf172bd5ea7528213d18e489b66fc8a9a822d85 65ed5702db8e6a1615635912fa4bb3da28bf3548\n5c01086c06c6018edc945904d3dc9319b0f85fc2 9714ce1980e897ef7a26200bce45739ac7cc2b67\n94b5ef33c6502ecc998ff31ccdfa52ed9afcdb3a 8fc446b5ec6531924357078262905ed69d8a7880\nb85f9981374f9eee212b2c1704cef4134d786ef4 064d3b1154a774565d8a890a42693698ca22075b\nba28790b96261e4a343e794aa206c5ac166a1e94 009a206d3d812ffb39eea4a62487c24efb585364\n2ece146c585a93839d48ce1bf778f153c7c0d97c 7a1f25bfa7433c99d7136d5f7a8af9415cc12010\n3871089c37113a7b0646188ef445120a0effd813 739cefa265f12eb59625ff9c765e5183b8103ece\n4dbda431135fe48193565118f179bd0e60c7f9f9 16df79694a00b67495831f33d8f19a51d6f47bc9\n833ab8ab783de8537e41adc7fd14ed3338bd141b 35f16f84340e4dc0ceab45d04dc1da1f35d43587\na45c3732f3a213da94f13f902dbd0dbb9edfca2b 1bba507d3bda1f68ca4518cc35ab1534e9f25daa\na4ee5bb1cb93516e57f26225bd58e23fbfad840e c3df3c43c4d1204c44582737dfec6d2b1ae9c1da\n3445454e5f5d66d8bec7d1e27410fbf0064e4db2 202eac7b579bf341fdd68433089bd920f11bfe43\n4c00352fbf888541eddb167a630b3db8c3692a00 a7073a0eeb303ae365f9300c215f3282c3e190dc\n3495ef09114674747a12eacd33320ad6eb292583 bf98cba151528d0d013da71c0bc227afd8ddbd80\n6190d2e3da5a32ee4a90b4e6778328fca80dd47d f6ce6cca3e2f681442595d060b03a19f7b792c67\ndd21715bdb603dfcd8d7095c00950460adc83506 f17db481027a227579d98704f79075a473d8277b\n5eec44983c8f0535f414f064893de0736d07b952 84bd42b2eef2d8d1ec49546d863fb361f2885759\n75abbe07f59e78d11a79af1efa7555178f8c6c85 d1937232f228a3305a357d9ed764dd9670ad69ad\n8f8014f4377ebd9cb59bdba46cf5b50ff75531e0 4dfd54deeee87c1264c6b278f5cd6906ae708c85\n75937dd69c8f7a24936e59d24af01f4b0c7a8c8f b29576b45e6cb45c8c4be0fcbd6200e04a71a2d8\n92145dc100f3871efa105539d2dddfcec480fe51 e26a9de024b04c078d6d95821ced2550216c919b\ndcb865bd12bf486f0ffa21bc53a4bfe1ca8df7d0 98532dafb0826c2bccb49c20b08ed29a05ab9b81\nae092d7d501c24785e4357ee37d71c15f484da1d b3a423a2f0b215cbabe308c099ab5514808c92fc\nbb2a0f59fe172970c15e08377c1ed12d5b99efe8 8656c32169c1c96a74ea6a49b20d03fd05c146a9\n7612fb4ed132ce8f977c673c040499034b1857cb 73f4a04d20b689ae66e55e099a11e945b9aa58fa\n0676f8b75872ef1c7891fb4327955d9bf43daf30 40b827a043182de0adff8336739315a972a9fc0c\n38d9f1ee7ccbf9255a9f57d767f05b5e5badf9bb 17aea40c591435586c28a9a2e82a27207a906936\n3de3b9a7ee0c2ff7f6d6148aeebe503a5ce65fb8 5c4371737a3f079a01f0fbcbe0089062df184279\n54dca4626c911d531559e6486916fd60aa4613ab 583af8e8f14c41fd981229c8862c6dd9f58c4f54\nbb91efe6a667f88f897708c7a5486b5dfded7a29 01e902c531613ee12c52b4f9dca13b52d4bd92f7\n4c7ecfac5fdbe923540f4772cb1ed94c308b26e5 be3fbe78284ccf76ada1c2118fa4bbac886da268\n313b6ad880735eed042266ca86442a59832797bc 2f28d7ac64356e4e5d2d5105e7b11c2e2d8a401f\n58c48465eed358012e30755d762a6987ee49314a 4a214ba052f8d4a96536c9a93fe094cf62587db8\nab46856836230dc972af85a6f0d504356129bfbb 2e8beae2c71bee794804a276cbb6f66865dc24c3\n488d99b0e049a0ae9a3f13662d219a3c44738c5f afd48c1abe5bfb0919942e47321f8d52aa6f3afe\n9a77c733336240acd47a5863f94a6bc4371b8c73 279b0735583ec28a7c2ba2c821f85511f9ed1aae\ndcae548e07dc3d60daf1376f2a1f03f75b14cf2d 758bfc30c985e154e5199187faff04cb2eb5d4d2\n1be522f238b1c78016cc6537af9692fc4decdd95 812efeb364dc1431fbc41881ebd000bad4f75359\n38753e16222e31a5704ed504578a141ae3e7dbb5 7d4bb543f133b45ac765d546d41033acbe5927ea\n42a3f75c896cce70bef5663dc501a92441a02c62 22c68c42017adea972ffc07db4cc80417464fa7f\nff1bc8100f05409268be7c7070e1e9d52f630d06 4161f65e658bf515fbefeb3c33dc02836470f38c\nfce79d7a79bdef19413687aed8ecdb6694997ca4 91bde41ffb8bd65f3d4958adb17123997d238c7a\n164f9babf0d78fc5f0d6f478d3e55667d84843f9 968d32ae82f1612b0729f23c9ea72695d764d0ad\n1bb7a7cb40d06b436af398cb856a1961e213d9f9 be4c54838416b606c7b5e63803d62789d931510c\n558ee85c48116f807580d3d6544177237b9bfe32 86d93e1139d598797b8c9547e34fffa1eb5b78da\n3c325fe77689feabd5955843f173398ae286d491 4c6f931bc6904cc87cf306d69df1cccc84110ab1\n6434386f3126caccbbe7162ef9f83a38cc664280 5b5c8a4e2a90b8e74d44ef289933c66269c08915\n2ab73cbf5327999a03f30b4f02ff7575bc23e405 c3043b462c5873be0a53e5278d181fc1fb40ef23\n60807be8aedcb332b167b1af4976b57c10591f66 0b1af7fcc013b666ae992ec965487bde42eb3ff1\nbbc391feede9161769050b23df2c30a1c0f5fc3e b1e923b59bbccd2109a7ad7be5b5a9b4f0e4ba43\nc6b6b369834e608fcf14c3b0c7acbdb4d5188740 75fbac88b8574c9ada10176b72b480211b155380\n728c3d654c84be3dafca2a23234045adf993a45a 8181f388a5ce4516c5e2ba0011ac1466b9325fda\n794bd8dd4f6fab8793d4d91dc4e8efd80cdc3471 00327ee7312ec68a52aefc4da522f3faea5e6671\n9fbb1cb249bd9e7f326ef228fd711fc5bba33ea3 1bce90f64459ffaacbcf61c7a7cecb75228f9884\n296d1432573d284f305c94365a9a5bb01ee65477 57eb8da5eb09345471f4d7de05779df9422c3a1b\n44837ff4f58f3ad667dc809562bbabc868be92a1 e0753a210124f8d9ccabcfda067791aaf9819f51\n87b8acb0cfdf52cc94eda46169596df3536dc290 1b8356db06705a99559f020687093ae23248f799\n2d22a4bdd894640a66dc8052c58f7cdcec5c1a92 c0462e65b50d474e6c7e997269d7e3cb1ae26b4c\n8221f6f270bdb7cea9ff6abb1ac58cdf8a2a1d1e 25fe2610d5b5357ba3cd8f93f17f228b330c89bc\n806d4083ef3099bb2bd428d8cbffaf625af98931 1f73d3fc84a919d3b9632b420c0a5ee23fcda23c\n033e1291209a6326dc8e2fb31a81362d3599d0fd 0d49da82dca2b7f207860adaa81d9921111cd7e3\n33ea7edc6f65c46cf83cc2df8b6b1029be0f725b e5d14c9d567fa126a12ca42a9e9761252ecc95b2\nd03cf31da15f009ff45de2e6a9e6910855db0873 a004f4388bce67dad82a78c389d589523090c55e\nacd01788689f9d86cdac4f17426792c891962925 f559dbea6f6630d6b60712c0fa2e5f2918d88528\n68655cdef69e7f8ea1037d42583d35d5fa675daa 63b6d74e828041c716afb73c4ce06941592aba3d\n5f97512ab93dfbe19b1f7c786fdac67d250873b6 63cac7542289f28be559afe0a3b11fe2b1a82923\ncf52e79ba4bf0a2400cee287210aa00bd4042ef2 9e6556abdc3d104fd9d8337d869298e5c0a9e74a\n67efb355ccdf97fe197688219fb87df98ca9c6d2 ff1ec485cf870b5f98c6e3e4c34e395c9745f7e1\n5b712d772b9ab9e921d8d8a428b56863e2006ced f172c3ce25f7b5f3116e5e8fb8803d28b31acbc2\n4aba662b601b7bc3773bb1aba03e035bdf5af5d5 22fda31e89479c2d441a6ac962be326497e27978\n9b50dcbd184417b16abdd0d437c04e2fcb4f4ed0 ba06d2f4f2c80c7c22ecdac252e152e64e1db64a\ncd2c82af01434a7f1906714526b2b15132ffbba4 78414fb44a936cb8aec7cd11e8c5cd84648f4abe\ncba252bf3b141c33df012693a996d6333f3ab2ab 6c1fa79512b206f8a372d235db351234ebede4a4\ne589e0234b5192d11a711e92562a815cb22c01a3 b52839ff4008766d0ff4c823f8a0137c731c69c5\ne7f06bc5d58b2d3628fea717067f51ef42f52203 e3fc2a0df079691b84351c0356d040cfbc53222d\n395ea6f48f4bf8906732d4a17f96bce29aa7662c 8b4b98fd49f97094c51bbf2d928dcde86ff6f17d\ne470f36d88bccc0333bdefd6e106beaaa4808439 bb152709ab1c6f2df329c4639b107a5eb014977a\n71708d8988ed6d0cdd4d5a1c3764088c8d67b8c5 3c34ecc91b7c765de24474810d01f9e786007537\n59cfa5919fd2a6d9a3872fce4c0c34a0b5057ea3 813f4a0a9d377fce8361006b53656ab2136eca5c\n42d8a7ed2ce260fb017f97508cfbd08a00d0ff78 a6c6d71850ed300dc86f5af5db3c486864df38a3\na253f11434861efb42b3180b75231aa5ff9ee089 58bda32193276269fd2dac14dd4722e4a7040a0e\n04468048cbc6c57e69e3206397bb232783df0031 3b315b779fa271d2c480bdc668649cc8a5781231\ncb4ce7e64da6778d1999013006aae5187ca3f128 425b9f870ffa3331e56cb3fe1de5366b95377818\n4fb22b46879780012d913988818e19e34a304db8 ab35c5294b80a9c30a4af87f07e0ac3864215f78\n64af5979f9442f9455fb69593d1e8183ea14d0f5 f71b2018a348b49dd7e062836d7e25bfaf296c6d\n11a1b16c14005278564a3542c48362486309692a 945f262b7d40638a9aad5611637c6152ecbf3287\ne351d52cf423227ce0e91a35d545bb0b674b4905 b484cf0a70aa9c4f33fd7a56dfa0fab9b95bf45d\naa164183e92c01ebdb2407ab0514714a62146ac6 8794ee0a40de8c5604a0322906eba3eaa57985a8\n5818f70270d3c7c9b2666b87458604985a56b446 26b8bc6e6da8efacb0e995d4a00987ad9939db1b\n0f9e57197a3c1298787846b44528923bfda611fa 6b5ee783c17e86e7d457a7113f77b885d6e9699f\n60167f258d7d2f12c62ab29eee91cbccaa8322f3 6c325f2aba8db57fb5777f9d3ad1045e996da30c\n6c1dceda4b2ad447c8612bb16862738b6cad05bd d50fec47a69c562d358b866ad330e5b58777cdec\ncdc232b86e268b2ccf5466cc3797b009f04d8fe2 60c1424ec3b4c105ada01afca4c81cbcef4ab23f\n9cfe3aae0041f1258ab3bb0ec7e2e3e83c6cfa77 1a025a96a0ba3fff28fb791338f756e2be0f9147\nb4f66f3dad1b73f8777e1f56cfeeb928c0532140 58e34ac8b55714a8bf96393f4ec7a8bfa406d01f\n0dec58ff4709ff3b13efb77e9b0a3a8630d9bc10 21cf33245fbbf2ee9f4fc5b129ea66fc430ba0dd\nc1b17da91017828cfa023234947daab5912b875a 8a19bf7c4a7594499174d9bc7bddb555364aef62\n43122e20791f48f5f9a559d18a0116d94d709979 9060ef0ae98bc055355e8feafad79e15f20e3a88\n19e9f7ece7eed4f9aa89d0765cfea121021a1ddf 074e552670f2b38ddff4a427542f4dc1294967b5\n9d47df808f3eb352fc702a2f345ca714c0a5102d 5f966767f735eae962f416c488430d22be71eafb\nf93bb595213f9d8ca4fb4637b098e32e63185d9c 53909ac532f841a81613b57636d10a9d78c8a02d\nfc42e48d18694d90d0c4f5e96d625fa90adb5920 49fff30dee3097d10ff32da309a23e5beae635d0\n59818deca61006ee893c0908863fb9f3102ec662 8f18e25def2dde50d3dbd790bbb5f72a8943c2eb\n53781770da86e12ee200c3001818dc371fad7a5c 0bf01d9c7d01b9248a2cfee09a25ac642ec5ca09\n4e7f6c10673e77eb4045a79a80cd8668bffe681f 7db0a16b98d19cd59ef2585a1f796429f5070af5\ndf2e05507fc07a7cdb20efd899f3ceb4cfa5b9cf 6f05f25dad7ac04716a3ff109f2272951c65957d\n74438fca85007d186f11460f24f26be6d2ef3489 03e1d477adc5e3fc53077e41955176e18b291ba2\nd62af1e41e3107c7c5efd7d500a0336a19b6781e b276ef40b2d9616080e8799a6d8504fab06c642f\n3f9d7c49ab4deaafc34c277cb15c7d015fcca9c4 c247f4ea612fb488d40a815cde91b5d4de4afce0\n2848dc018068f8ed5703ed4f7d0d566ad36370c5 1bc254f901b6718f0e129bfeb87864823207740c\n2f6d3b9a88bd4da5b9594bd4818ed5ffea6a2d5e b6975d5a048481afc0e2f5ea3834dd0ce176d1c4\n47cedbaf1b88ea0afc843b0d298877f8c687fdd5 f4af7a879cb44e0305044f10b7c107d45e990f73\n72fae83a5f20e64343b80bba8055e093fb4a4084 26663450fbf75344cbc3e1cf51f0f26de40731bb\nbd37fe564f5a0c609b4ba17954ad0636ea9694b1 0b1035ab53c15b023791855ca5fbeb046f4deaa2\n6aa68c6ccbdac6ff8be3acd65b507a907b8ae96f dd2ae910f10b3e4b78c4baff45914381023f332f\n276d233c837cff05be843325301986bd64386069 afe69c4106a4b407b5409713257e3c410c3af29e\n5ca93467a7df95abc5a24d20ff0d8624fa4ac341 11fd74835b92d9f8b2b74f400fe2bd60edbf56cd\n3e3c06dcd8057dc8924db9bde3d4f78f42e6cca1 7c8b63ad79dde00f671a8638a6633ce91f098f7b\n8918c1c948ba2b86b4ef8aa896529d9e848b43e4 b15307bfbe600b55d99ac93e7301ec8dd2294768\n51820c708edacf41767171a1e390f9397da3856b f821613b2cb142f5101f4585d370fa874c6e20f1\nfa2dedc0fb21af3b403e38494415adb8ff2a99ab 01388e13e15183ae024d4cc03cebdb76b07f1e4f\n21f77f5d3ac513f20512bfd7613da23748c2eed2 0c3422ac3cbf730c7f855ac7b4146186ef418038\nf67d352d294c69c8f9b7ab9486414161e89ac8b7 55a18782274f7cdbd0338158409a89d624864391\n204b193d4623ed4f0b2bdc9dad5536e659c93f7c 3cb8fad53833e6df1e07aa78eaae14a7a2d4fd47\nacc37ca917e3556cc1410dbe867a1cfc40c97a74 1b1a2a9bfaa2e78bfa1fa32ae4c97fde48438b34\n7567646ae234fc7c104f207a7d85ce2f0dc8b2e0 43f861e6016fd051267d8450e53b9b09594e054b\nff16b7ac64cbdd955a3a1c8c7497707c09142b26 eb504a3847793c1fcff6e26e1abef00ec74dda2f\na78c8641ce81d7bdf33c496edfbb06f74555ecaf 8c9110ad16ca5750c0026517a69b9d24d502f7b6\ndc912123bbb4a2314114711e1419192441ec359d 4530387edbf0edb275fae64b79e7f59dd02dd484\n3e2aee8c5553a86ab01defdb59626135e7094fb0 dfd0b73df5bcc402b30deb3423bd5aae8d7d7695\n7e1f6f35fe94a5f46684cde29f69bd56f9e13aba 1923a99543d488bcfc5cada0b7a6000cba1a8eba\n58e3ce2673c57e42563d7038632d7702bbe3858e 731ebd61c6f04dc54b36cde69a93e2ff27dd4f41\naa099d4b4dae4ba520905fd763ed8f3c209d43e8 d59cda828bcbdd8546cb57cc4c4c59069df231b6\n51dffc34b90bc7a0c733481c4d86e627fb3084b0 4b1d662f422217f3d1790eb695bbccf01861cbfe\nf2723e456df42d860c0070fb3c07e570d9acd06c 452725504795e05f810fcc104cba70f43e4fd9a9\nb8eb56d34f8c5a1aade2c0876b3042e0b51659c2 56dd856435eaeccbd3d3262569bc573dcdd6374e\n56dc8c7ab019861d5da0d4485d9b18f9a9d8bf29 951bedcb603054c38cf926e8ce01654ad4fa66e6\n4c0ec56e9450a1176bbab7756ca5307aa585d512 70f367d8e9d9343dc565e7ad35ca283a5dd0a125\neca6db0263b0ebc712a1db6a1ea4c7953237f0e7 605cab384c9dc2aad44aed3a07752eb6a242c8fb\n8026a877ed9fed8e7208753712e678f7adae811c 90cce1fa37a219a49ae37c52af1b112e2612171e\n177884f4c09a1c09dec11b384e42f8a8b6243270 c2101bfbf76160f942ef4b96a9fec00812b2a098\nb0626d7e9949e5a200603eaa9d5e2ee8d56b983c 5a2f06d8622ad9ef6338978bd95e19fd359a1a0d\n30674d342291f51ff8b743e8bcf9d25a3b25bc51 1a7e9dfadd52bd6a8eb644aaefa6fa2e74ef1b9b\n33d29f5081679780af7d473e9b28add2babad8df 805c3893d3b85e4be9990901371a2aea7deedd65\n2a3e36c04080cc07cf2b6a0bb58a1f399987a232 b2ab35c2dfd4f583bc3761dffd23b6208747bd51\nc735a850a4e4aba88b14caa06e92e385bee83c73 14d6f7207352519368a90e55a701f4a6361ed62a\n330b92943d197c93324b666aa330cc7d57e344ef 46a9144a5763dd9186cd340ec306585510898d44\neccb4d1e519d6f496915c5683f45a92202da7326 32032e68002cd420e450772dfd6771c897971135\n549139014a76b47b474dde5aec1f6bf23ec6366e 75854bf4860af932e186e27c6cddbdd34f0cf341\nae2f031016b6079611f6f1eccfef154535f6d3c6 d1c79d01f43a60dbdbc666259f732be656c2849f\nd10dc6c7b8d54977b7c38bfb6e5f795a28afd085 7186657da4b6f9094db698d6f2a02c30c36357f0\nec710dc64d05a4aa706c904e36e47103d16f4843 97be585f2f52336845d163d5c133f52b2abea92d\n1b6f937d05e26cfa446fdc14a8192fbf47a9d461 cb5703c3e902b6df5e01c86d8cf7aef9bc0cbe18\nd80bf615e1998f34e06d20fa45fcffbcef21f9a6 1baabbc071a0abb5e23d17a1d291d0529787def0\n5001e42bcf2412a7df7763b4832d1654ce6f6b2c 92e73cb5fc47c5da782a5c53b7300263b343c7d3\n339923cfd2355452d54098c2468f8c8ab7151015 77a866d8fda0450294e801715d32147cda5d52d4\n3629764ae897cf216e1ccce0ad416ec1bc752f09 2484ccc2dfd9c876229154aacac4466ce8d7857b\nd6917cda906b8fe7d71bc327d55188dc2957feb6 06e352175b49b935f9d4f98cca14e03ba14417c0\ncf1b0c60f64d863353822ea028dc425fe9a8185e eb3078426090192e867feacd20e5ba2f829a53e2\n1796742cb165326ba94cdbcd37e1dccd9cae1137 dac50f89fab478baa1a397e38e163da1c6bd75d6\n17519c1b162553319905374ba513cd9bf81d7003 cb6f0cefdb72dd5dbe6153c08a69e3d3cc13e9d7\nf6b1a4897fe28890c5ff0f36e3702e89d5d0275b 48b9af29e93798d069fdff448ca60dddf49b55dc\nb43299c0b27a9b3bf47c504d06bb7eda892c8c55 8fe3210113709a876168d086a902f8b6a9c39520\ne072f7e0322794be92551116d5ff4ff0310f841e ff6fa150bd128bdf2e137bc3bc0e9aab396f6512\n784445efed55d2abaeed6382dda100782ad4f9fe 71c812fd2645b9f06bb0b33d878a540be03ec82d\n42a1dbbedc32eff2fbc5e2ad7695eb5719e84d41 6a3a18977927312a60e96bf75b8def4d5638f31b\ncf0a4cc45f1ba242055f1e8f1b00270dfb92b9ce e7f364841cb37e5efdb33663b7348e16fd1350db\n2b1786c763698be0d760c475e8ff32cc325e160a ebe54cdab3a76b7e375f7e6970c8edcacacc3ee1\n40b808d3e4b09f3182a6e04917a0a93c395a20b8 f2d311832d0dd70239ecd5ec391144ece37cb189\ne83692bc717f36d40a67ce116ddc330dce4939e4 070c30ee09582cbf38ceb7f600b2148c6fcbed0e\n1cd7744f5882a3deeac2a20750b8a37f0a3d3065 eba890b6ac10b9c1f25029cc5f2777f088b85df5\n37f52b834b92e704472470eb581dfb9c184221dd fde1aae03228fce32ccef83a87594b902c84946f\n1262495df2a86634c8f58b9b3e9dd79636349cbc 2ae94dbbafb6eaab6023bff50ec95ee190b13ab0\nb56fa1a3c65342d1e4cdac62ffbffb7846534d05 c291f90b1baadbbd479677a9b35f600ed81bac57\n6824582d0883e7ec1c3b342fe28c5c1a19a0558e d43dbc84a5c383d666bbb31e8a657c51c982892c\n6d26fd8e3ba9562caceae58d79261f43a0aa6919 ed57b6013520fb5f0f54a67b404fdfaba3922246\nf2d99e79255368693ec55358a31e3f32871dddf3 7d74f66cf584b89737080f9f127d1e5f6c11e7d3\n27a0178605e853454de9aa232f9640e9fe4ed251 bf13442c0c85ff552fc7f6c683901cb59ceabcfa\ne518f30adb6e10d119f26d4d847ed8d6bbf37c63 c5d179a40974f43f5bac9b924f5eeb697a91038d\n3bb9f1c151ba5f7ffd39b8d4d2290796b52dbb1d a53093f7f0a59317f684c81fc7ac24c3c732f59d\na6650167775f9e732cfb4d9a6f2ffb0a34f7ea57 c678681e1a6137deef75a80315b9768784c0e1d0\n3c7b63ff8cb6fb60eaa1bb9b553036de0afe2fa2 415bb9852556c420a22a8aca67cfd90b506daa1d\ndcd8e738a5e030b528b3a0a0281b8a202a999c3c d7c8e6e2e3a9d96df29fdd779b898d2494657b0b\n7d6bbbce8961f2943ddcc90e13b386c50a440df8 908994f3d074d4a5757a647563d04f1442f2a737\n19a69db4fe8a1e030986b7499f3a57c6114c195e ba7ed711835a61c411df5a6bbac9a3ee5a5962c3\n0745d56e5c5c3831fabf12053130a3556563ed59 44355d1e9e00572d127e9cd06fcb0fe1fb2e3ebc\nccdf526412812b6d2bf0bb832d2fe01ea2bd37e7 13e263f81cb3727470fe50aa831d05220f0195bc\nd87aad076b4fe97fe4142705eb35911c378a2be1 5b8b2215d99fe8e82bc4ee75174c5d61f264069d\n9712b456a355532f53d51111971a83c0250426a3 274c0f0a39696c81bc09d92fca0b9ed91859bd8a\nc11f159ae61a23bb913c712417805f4caab27d50 a35ce35af2f80a8de2812bcad23ccf873f2b98dc\n45345b6845a52e91e7114a2e4809c4ba6119f6a8 8d576fb061de231fc8106620bb82fcb7efe40136\n30fa0a5bab5ebcc9baba1284abca755379d2617a 872f3c29c0182a73b0d49384d36bbd21760f7d39\n346bf54bd71cdceac353d6ff1664230a85a1ec20 b797fb603a263fc5e3b74fdec71d5e03cc5575f4\n53ea7b108ccc8ac0f35261cfbee2d5d300894fa9 98038e6865e7dd099e68af0364b6874f2af2dd9c\n52983e4a36232461d9dabb3fd3ef239c5bee66a9 e3ea1c066fe79a43364d4eece7824ed5f4593150\n916b74b647e6ff44e5ce7641eb9259bfc36109a1 6d3f2e604683aae054be38c1662c4724d97fc73a\n9fe18ca63b6dce8885cd3d08ee6fda5b74554074 f0cd2f87fdfc8387b8d96bcf1f18babeb6a231c3\nd2ccc2ac74ed407e3ecac196d20090412fdd7580 ed3a7d34d78fc65128b9a164b15fc10f096cfd86\n55211460890a7c68d67da5f2e09f66a9fc30c1fe a57ea51e1d3c39daa18f1ef3320656f88c23581f\n57427a62f6a32ef5137944698144e886a054f6b8 f686505ade06e0d4063dd93fc838c1c6b3876e87\n4f51aa703be8ec92bc93808a934d5727a2d668e1 74dcd11f05cc3affb96cfbcd75c02bab78e64ea7\nb95023c360f8578d4c6d642c4f122c6817612b98 811578bd6e4153b6b3c0eeb10a52f7efadf2d0c5\nc0404561eb3dd1b62d8144fd3e233da81a0a3b86 fa020373fa1061f51ec730841b05e35b794c00da\n29f4c01b91c2cb2eb5fa591bf20c8c60b1717624 44796e79da16439f0baecd7b8e19378a0d404a2e\n20f1b98956f59125ced6afbf6685d2bd14daa4a9 a5fd62148a8063c1d234bfa8c6e82a8961880f36\n5e491d5dbb6a11ee9664adae55cb98fa58b4fc0c c839e8d3f25b7a630c4dd1e8887c1ad4db6d6745\nb56dd89a4304ba2352731e44aff71adf6ce5fab5 8c25c0dd4cb486bb806357e224c2a05388181575\n4324ac0249e92aaa779772410dda9ac8c4f5c434 04ca00373d7c804c001dfb8ae53b107ab3b5cf72\nb23d6bc6a4787e64173c40cb96034fd9e1e8653e 7807988214401986e1b4050c00aee5668f745c5c\n50fdb5fabb03c6d791a2b7ccd4271f4a247742dd 5f4b0632b742742be8298e41696a9ae1cf3f6377\n321918d4410879b9121e89131251be31e0cee3f5 0581e86ade3c50974d71dc96455dc1f879928379\n2f2686b95d9e28dbde8344a75ed09adebd6f6ab3 f265931dfb9691c3d46d26bb207691d6ce611ca4\n6d1a8ceaab0ccbd0d81999b35ec24405a32669ad 99a5218f2c1608fff9ad332fc081deff1b7bb633\n21b3cfdf9fe12f03fffd2e3df48d96641be360b9 88ed1c04630932100df113f4b6d14c72bc60fb3d\nb4d5cb6820109780ede337bd11e025839b4e17a6 189f5d572c031d14121e7b3e5baa67a3a4324f27\n69c1c05390c93c21d436fbf902cbc08822b7e6c8 60d09d5aa9aff06c88b7390e31248c1f047c776e\n89c21b97878415440733969c8e7be0d70fba9747 4cf498bf2edd84574fb5e15d3cb1ea0ad4551ead\na63d8c4eeb42805094278c3f4ad01281655ac9a6 a7e9f0a9fd8b7a54055dc693d46354c5f3a7c25e\ndee406e5e3d8238aebd69a6ecbc2ceafd079fac8 9b5db23968b7bdd708bd0b624c46e8e6f828293c\n1391f0bc35b583de0edaa3cf680e4ac354f0f62e 4bed18d9c6afb03e776ffb10ff642a0f906c5992\ne87408f0853fb0b5e7a5da43a724efa71fd250a6 0cf6a5f78e033b32dada344769801e0a74f1687c\n15daa27ec15484d131f8ec844b1977ab05ae7cea 934e72ff3ffa59e4e9c7e2a306686d096dd10d50\n0e4f5b5fb5553226cabe4c2cf3ad610b8774e720 628d8c49618d54bf97d93ae06082d1f9c1fda0af\na1dec9016ea0aeae2e7e8ae2f3b1fc327e239fff ab0263666e09d6885889418eaf4c6d0d9d732099\n1823407d5ff0ed2859fc13d75bc640468429828b 1dd30257b69cda31f685f88f6789c9054938d1df\nb6eec4adae9f5b6e45b31c83e1fd2f0fd3a461bb 7bf56d75d8cc5b82975b0a648c2e5f2ac8d085c9\ncccb03034a156d4cfcc7c93383d9176271017e64 23dc725add4186ee7cc0c735ccbb94014f8f5639\n462758f6e37146573f96cc3c9655a084a5b11388 f97e91afbce022338d5e9f541610f3d3c919576d\n61204e8308636495a1954544610953e6b4110dd7 0fd7dd3d361dccf38c8dcaba7efd589120fcb157\na18352749b69ed3cbc986f23721c26aea76fc4a5 f09103a2caab6d67546abd34aa1d30704cabcc83\nd561d43cf5a8b2a99b216f1b5b3e55b497b8acb9 a1ea61cb4374a26cb8ffa984020b8fc3df6fdb8e\n6ed06946231a72e647b33a7572d2038339ca65c4 01e35484db20d32cebdbacb2aca6ed07e69cbc7a\nadc3b056c33445defca898849e1e2fc462fee21d 270ece3fff54dc424770cb6c192b5f625660ba0a\nf15cde4482e6220e0e9f12d19af66bb37aad467c 63f01608ac897e82d16b09a05548ba0cc88d2e3a\n3a8f70ee6a3d5f2cdba929f5aa09c4c99bf4cc1b 416c7d0491028d6ae5312a3f6b43223793732fdf\ne34bd0f155e4c375050370ca91ad48fcc60f13ab c1d02d34b8719c09e74f790a1b2cc09961038af5\nca684c7b9a9c9e587013647fb83864e031de58be 7cdace2fdadb83abba2143dcb0a7e3bec13f0f45\nf3dfd09b3f4476db04be41e7766ca7fdf620b906 cd6c66267ad8a4c5b6e3aafe6d2de79b4968425e\nc3b90ef6178e29e151b25fbfcc6a3cafd64cb0d7 e603369f6621bbdf1ffc596ec99e4c813e46303a\na059ab8f39441365ad8e1fa4fe56a2932fef26c7 df75878bbe7bb5506ff7334cc06a2720a3086efb\n85d4e96ffbd42247b53b28615058ba810d3095c5 11d33666072346e2a10061df4febf2a7ac579369\n7dc6148cb47029e4cd2c37c7a61377335b8448c5 2b5b7e4f6ad61ad9852c9815f956d188ec72caa0\nab463a639764092d3372343d015107063c227071 46644cbe9e9a474e69f550a5fb4b97de5ec90d41\n37f78ecc1f5d8e0c9997bb1395b0baaeb38e54c8 63c9dc114a4294037630e385a579f3c2f755a287\n610ad9901e29a361fb331dcd1d461753ccc0c7d8 d0aa45482ec46fa3dd1e7558cf6cf04489989ffa\nb865a30cac534354ad4cba1a65d08f3ea9861299 fd543cc7ef42da3a26dbcd687b147ce3b779919d\n6e536f52ae357b5dc4427444f5aaed08b1f4e484 e172aed9f74d595407aa8f7c9d20e5ee7acb4f82\necc26bd4ec5a050dff28059db6a9d9c98df06f1c b4f35f0521412b06567bd203ec20a21bc4198879\n2b9df3ebc798e9c215fa5cb7d7581cd3473463ec 041df00498abda48a54c0b7a598dbd925797532b\n44ef3dc392ff0dec0fe48d968abd6a0bc6ac45a3 355478edf9422ac0c5557f611c9bd33a3a008384\n3d089b5533e1f4f3e204303e843ca7bbedda3fa2 cef12be6c0b3cf2c7f9fc3aedb85c64ec83b7338\n0f339a3bd0edfbf519e06a0e9e41d7f26f752dc0 6ddd8c399f632421ad123cefad960291400eda7c\n3f2b4c360849bc04d6d877a7ae4054dccbe6268b 94e14c9e4d89dc23ac1a026a980b6986eede0e6a\nb71cc8b599948a70d7b364f84351fab15e00b257 95eb994d3ccf5512a4c6702bf4a402964101469c\nee76d1912a9e4f9d65677ce16212018729d783e8 66f9613c4b06cedca75f28f482e009f54fbd1b32\n6f0f293f4307dff16720d7050143ee90edb9b3cc 2a51f36f2a32fcc339ef6ee61000c76c75e89fa0\n8b6f0ae6d941e650e7fc1c8eff36376ab1a26c1b d9e389b1d452646b9bb94135d9d5e5bbe46557fb\n7af3f7693562c4e37f5614b07b28da24202f6e5a a8a57e96601f1fd99c719bde3554a6717b50661a\n01391c3b79bb689a02ea9f1e3988ddf3f6e37192 2e6fae492bf0b2aeda34cc0f2c0b6d7d11206aef\n31b8dd178d030b6386dd19fdb73568d6da75221a d20bd7bfd82b8d32d92b7c6bf36d4b51e37249fb\n202c19b8b8ad8de284cd51b2f4051d5e7080340e 444bf8c321946c5cc5db5c327e46aa252f7023fb\na0d460ccf4775151602c67569e3ea69e48686e2d 276ea1f61cff103ab754949f9b6db5561f6af470\n4c3a96f61ca4041147cce2bb07b84e617d2fac0a bd1e1f859cb9e899bb079221645db0f40fbfa21d\n50de8b2043b1c70cee019eb2c457f2eeac414c77 128fd62de38cd87a3d0ca85f8e386f1b5887060f\nf3005145291a0fabc8d22e5b94a2245b12fd6982 a8dbd42a13b97e546e7485102bbf3372222107b9\n3fd0ab03791ecfc610d954c67f771afb076d0b48 bd00a73eb1883758118fb0c2efe3375ecd4e3b29\n461be0f4f59ea8e697641593dccec8bd00588ae2 ce3749427db3f8311316126d681efb5ffae5006f\nce5050fd5a91a39d0cd71019f698a63988116d78 0c1eb8d9c360b92998b61bc9be9d12710f5a570e\n2c9799282a1a2217a1827423249760bdd576aa6f 14b1e057877529844fa7192c51bdef6c791dacda\naaf4e3fcd9adb94b6bb4a0307f393ca2f131f13e 3ce72a9d979f19c4260a74e9fa4ee6e7ec9072dd\n3766f8ebc475040d62e4535fa845e0c019a07518 edb8f1f8bc4ab8d471754d8d93365378d225b4bf\n7a4add93c5af6a015b88e46aa5b378c359c42c16 a5763796cc27ba4b89327b336e51ff7b6ca885e1\n541093661abdd8b321e5160ebd2f980b52ae1879 218c539c796e4f04733a3c8687340d58ccd57f74\nde69cec510650342a73fd7329124fae649fa3bf8 c7d4876026267f05f79bdc18c395e9b9ae736083\n9e7dcee97cfdc7bdcdf2d94629cb06dd8d2094e0 0023b1b9ee05a7b9b87c96b230316f6e7628c9a3\n426b12bdd76729bde3ff59f2d7b0d3348826735c c5318b3132f3c35d822a7d5b4402090989051825\ne9b46be1e6bfd982a072263fc74903cb865775cb e695f5261ef2dca67b9c42a0d82edfe5e998aaf2\nd238589c964998ae2105d46870ace072d1a36fba 45b002beb7a7d18b1eb7ca97bc3484041ba8cf76\ne70c80bcf75dfa0d8c9d9b565344476d01f3a841 c95ae409b701dfe3979aaac43f9bd3f81320b38d\nb6fa6ff21d268fa0949861553df398cda0df9c99 720e312c2ab70401cda937ba6e3174f1cbc34693\nd7e233bd254dc78fd2f1e5319af64ecf6fa23d3e 800615c6098eddcbbcb2d54d8ffe5f63dc61305c\n0eaf64aa35fa4d66ea35ba7553e556d23228043e 37a849b6a39ac21f622f76c047033b79bfc90f0d\n3542055830d7d6c70485afdb8a1573408ad8fc09 05903d2f79ad0dbabd12cddb7dd584411e14b28f\nb803ae8b9c433b7f266033f8f64e9bb072e18488 eec1939d215a381ede17ed49b6e3d6a356104a89\nb7d95b488707574e48bfe5ace7ca3d1e324a4fd0 e11d2c5bfff13ab0fe3cf2e63b3f655c81fe4867\n66292211f04b0f8cec3c742f9888c06353e9a361 4364d52f7a06f4699252a8bd38c564b4721c11a0\nc181d7137f0195b3208b94e51b31bf38b23f1149 3c6be1405588718d641d8dc1125d76f2a3f5139a\n42bd609434696395ba8dc7f2904b9ae014ae8df6 b70d0b593180a25cb2a93e55c2bb843b08103aa6\n07b552cb87ae7e47af3dcee3d91fb404f9f5d761 c11b446f2862f9234a7e98dd5e1416ab082ff62f\na9632ef2ff04a2bcdcbea8a4be1f258b8fcb6aa4 6db7d5b4880edbc38dc616c5b78a79aeadf2ef70\n9bb0dce2aecf0d60d3e66003a5bf4107477844ff d1f1f243c5124f1573de470c173ed4bad689ced3\n2f62cda2ec44e500f7972337550659db6e012dca 914925eaa37fa5f4df12a558c37ff8d23dc3bff7\nb4abfd508c2d75775c45791c760f88fb9c1cb26e 18b24c55640f189334b15c43a7536ebaa8b3e8f8\nc549544ddcb82b70f743dc747d8fd3bef34456fe 5314fdd023fe3db04db69e5a8d47ade29abbd513\ne737731d8fb07287375e5dabd61cba5ea2840645 cd8f5d5867d0ceb01f7399f7c0375de172294c3a\n94b94ffaa2904dd28189e0ad099e1a1412af30b7 82165ecbfa8c836f6abab2befe0c25cf64aa1b4c\n156ea15a54bfac75db865c2682e27c692332733d 386b1f749fb08796880fe148103a5058c9b662b0\n2a0570f76277ab9fe0fe20ae5b852cefcb720359 230dfccaac70c92e0124c8d6ef27bd9f60333e3e\nd9a158542f7f895cac21ea6bea2aa3f8656ce2c7 dabad728c8716dc357ff4d718c200d767323f5a5\n5e16ce859adc20e78ed0a5e57957ef27e8d604fc 53b1bda74ffcabff8b2a6337696d11c7291b66c3\ndca4c5a00e4224df9b4b07e2368c32d93ab4147a 3f2f7b82cffbb1f78b24af4118b427439de31498\n05433a5fd833f1dcb4674d70f522fcaf527ff27d 0519ae7a07af0ca3c3581a7aec260d752cfb5de8\n1d42aa857ee8563f15e804036595046c3abf392c 27558d3c1b30cf73a14fe8a951370167f9cb82c9\n6e50b095eea4dedaca1bccbb76ca9af237a6a7d7 ecbea4eab247e94c800cfcfb3459202b485fd4a2\na2718fd20fff9d8ec40ecf4f7bfd4a844f15c063 a2e9351ea6a338fa137cda7296c21070e18538ad\na41ac3cebe6bdef330b8bf338e6019d29011af2b f5adaf8cac29785e0a20b023b83e4bb2ec9248ac\n15c4c76a82fbb6dd2918686a03968a5712f8cbb3 e37d6e8fe48084702552a31e36c226f22b35de04\n5d6db4521cd0625de65201d695fab9272f87eefb 6ba893494b78d1e71e058f7237884b4fceac19be\n5c3cdfcebef575340acd469739f8b200f94bd821 0c139626eee2b42fe40d57d7dcf4f417423e0d99\n610e15c03292f5322f53f6e45b972e64cfa9ad6e 7f044e21cf70f09ef478f0ea432cf8f48761ed8f\ne48aa9dbbc8faf13bd373c498d71cc1b1f60a9b1 def3ee01853c6f240de1044839c09bedd3c4e84f\n68f32c0049a807c372a35040fae86ca30b7ec707 03dd221c7e69009950d1f73f3e215311a15fda4c\nf7038e36ce4627ac7d9b62db4dc5f1705f0ead98 f541ab70af08451c6b5ccacd2c4bc2b336f77871\n647f2c9d19d14edb3c51aa9278f949768a67b74e 973d027721486636738aff04bdde9fcecf1d7bc4\n890f9b7ef74be9accc480f3d64d3109b484c8f6a a5ea7e4970bb71b1e12e840f9d28f7a5442ce062\n2696df4340f38e05c34725b6a1f37168b5931f50 806e7f7163cdc0b79ac1fcb98434af8f140a53a6\n615d3b1d54b74272794e40efcea0a4fb9d797cf2 991cffd67c9e245b903bf8536f9f46f69b2006c5\n7e9948325b548b82d3ce7454fdaf6e5124db5b2e e21134b82c0d10074c8a477362793a6cc13d18bd\n627fe4519ead9e0ec820b6431d57a3715ca1e409 2ba7cb20325ce2730b8aee8100f1c40ccfc71749\ne574d9479a8ad91022ce45a867f7f8e51953f9dd e625dfa7e83372d79d86eba792f40e813ee889d7\n41ac46267e9f04ae86bae2c40ec73bca24d56a02 5ecca16e22479d688e84823dc0dd45c0a103a37b\nf1a2814c71dbf0af5c59df4c49e129ca0ed1bbf4 e1b7463bdec24785c3d0f52eff9accae3fbbf78b\n59482a29f2480e0b61ed65e77f36ad9018dca0e7 77394827b11307f760f401c48929f9a186e6b4ee\nbd7f0eaa3631c9331652a04fec526d70ccfd323f e325efadb4f98912cbd69ed44ea4bece446ab390\n7f82d49eaf21ec0837cea870c2d6660c46c277d9 5305acfe2cab20220c438cf9ea2c84c3c67cbf2d\n2c17df5160d6cbb07c3a143e6cf55c967080f6f0 305d5f2ffa440ece9ed2d5541d5740cd6aee4344\na2b1832ff3d04364d6ceac180aa60a54d62c6d02 0a38dd60fab53c084e25d3520a93bac099984a9b\n33da8f6b9f4c27e4b1430a8edfd440dd35e7335f 01af3c34e2bb7f717b309ce70b6de253a3caddaf\n661437da79ca100ad601daa6a559a73271d3dfd6 d6cddb389b7382bcd34c70372f0920c0f7f9ea3f\nfb5cefaee5d1b76d8082a970ae4c64a66ca7ccde baa4e7982fe07374cae8dac4a07fbe35b7c9c137\n715bf9ebc87d6065c1f35146633a0938f6032da5 e2b86f9cc483f3df2a0b6553505f8e503f04b751\n00a1e927831358ba8aaa5486e5afc3533767906e 13c1ec04accaa7097a929ec6ee4daa6096aae802\n4984ec8d3425f6136d06ca32f86d040a3c4c824d ffdd2fa73f0b2093b610545491f1d4a21018f009\n7621c5d89d34b559fd1269ccd36d246b5a192dd0 487a9379c628fd5124e1d9abd9567f9b1555f1e5\nfe6ea4fab825c5842ac4dfc2205600b1d29dddf0 7a38137aa07f424764c3a2578a29acc5a7c8f65f\n9b13d1d90307a2c2426d8798cdebf9702a064e18 2524404ae08fc23e266b81aaa9f9493e97d3dcf7\ndb6c996354ed0d4b174d55097796d3421a2d8eec 24e522d0bc6250ecb6b2a61cdcd111c02c2f2a10\n8e110303345e3cadb21268608cc7693fe1b151e4 47fb800b9e41f640487186adc1442092e7c4deba\n81fdb2109b7baf3735f76af260adebf3daee112b a955db592feb7fdfd6fc36a119826a9d2f290468\n5f79edd398f23b2bed4f72ed80a6d783f31ca3e1 eb7fb834288653edc724f1b0c4014a05453aaf72\n86bcd43c7187028eeead972e99108a4065e64274 9eb4ef28fb5342ce8c13e6f4d1adedb3bd1fc175\n4b0f1cdc19cc1f2464b3dbe0c417a0e69738fc15 b9852bd50a65ee6fd425cdcf8c0b2a3f9e7ac1a2\n2b3ff1d1a105f7422b6b1efa3cdee3f37f447be0 fb9ebd6893e50cc64c1d5e52a23e34c5f18a8cf7\n1746dd97530134e1bca7ae686f801011691fc978 7651d12c68a5334895c85f024b55cf8f13310eea\ncbac16ec78bef46ba9389f9b9a7ceccc9e03a9cc a5ae61b835792797eac4a2ea244096369af89341\nf7b80bfb97fbff40a4d72fef7d0bcc3c23f4995b 5c4b809e9896610228e5cbf39f9cea07a083dbfc\n4869ecc79644a795defa5a5185f3820716952a8c 018fe27a5ce007f5a9bf0d7f5bab6778f91860d9\nfe3cccd637839b5fc50f617ff64474dc9094975c 297fcd528779d717c6ac89a00b60a9d4a5d088f5\nf20e889ed9cd9597cb77fe3c7dddb84e4e277274 d27d49e7428189bc1920f7e48e94c6d98366c999\nfa1e38c8dd633e3d639835c1d8bb68a93520c338 d4960437eb810b309221051b786d60351e865ea6\nc3cd65079614321df0071c1a6041afb5978872fc ba473105d8113a8ba0188173a1153b2b34565e9c\n5f4fbee44c9608654f8f5d0ea003d22d60a602a7 5354884ca768c12ffd911f5d648d19e0204c139d\nd6604dfcb48da0268eaa16f5790af2d3cea7246b c64dc9f4f2d21f21a7b943a7891dbb2f6a572a55\nc7395bb3cd9858d6396e5ab03ab5c62524cff2de d1a8f91470fb0af818c3931f931e00d97f7bbbd3\nf38e7999dc2116d29916a9bffa0774cf67957854 3eef599ff90b60f69303ef3f1e51f8d21103fc15\n2ab336d4a2348c256d4bf93dc2cb7499128b749e adef318010f46854cb9e655194efa57b8c5b7145\nfbfd58ee039ef45e279727b54ba8a049895407e6 e060dc5174d77345e30da1ab758047e939688ded\n9d59d3d35c536ca517403a43ae6d17feae6e90d0 6c6a4fc7eed0e5cf3702e3a6df224ad1b472207a\nb09d2f3b4b823957997ace73b9e0253b5a57e1b7 ae0bdcc8f9a1ec1e1407bbb9a1d6814f0af31c3e\n06334a297dcd2490dfa05ca5eb0495459d99c3c8 f2ae2929bb6b2e06264b28753ffbe46fe6ce3521\n18c46543ee1c9b0f478d7e764cf2dd86f56079eb 18142119b5b6994252477857bf459d983cf729d3\n0320f7c68ce63de9969c6b5b19dcfab294074fa5 202b4e1eaede923d36a72ecde851f1ea3c6af36a\n5c309c929b43c878cbc2c5ced2a8659d0d09197c afbf8fbf77f8bb031788681b3ad0587f5c3567fe\n4b4863e1d71e849f2f533714cf5474494220bef0 b411931c8284f0c1add4b4c3d036571e529f8526\nc32032fa1a6d89c379ea566be078f95511add896 17eb3cf6d97decbd6963d5a9eaf7369ad23b7e47\nb44f289e1f4ae10c28ce849d04f715785cb32ab7 f52640c43261d186ac3a19a7978c664488dcd542\n6c3e10ac98a22b0529a9e4c927809374dbe0d932 9a841bbe916d28f5d4e476b288cf6174253729e1\ndb6e2a67706a8630e03166695c1e7ca72841fb56 6705e03ff7e20503cee566a7227951a24ce78642\nb1eb099eb46a55f806699f128b79724fbdbc9a30 cd0ed337213cd007709df319034e781d5c21315f\nbed345b85cbecfbe9c0f93845d9fb75f032571dd ae724bff9aee557561c633d34df1ef655d7a9941\n2f4a7c897cc91a18e43cfd89cf91311660370506 3ec879825dc0451af69996a227a67d919427adfb\n7c4652a0e0e0cc86f6bbaa094b93aedb4ca92c56 54b0f6480dc19849c14f0f170b33693e12d3f2ce\nfaa7c054477948c2a132cbf7845abef217e652e9 6f002a4b3e348b23cc6d00d5acedb5df2d159439\ned0b5ee68212498561f418572d28e998ea505d73 6cc33317d7cf848f7e1de95ca6bd6b5f7d3f4f39\n29939012d5671475642e6f3e91d13b1ef949d1e1 be521f3120a3994d7b24ef6181faf2997ad3f706\nfde33c41a6d3f10314566b1297de8fb406c1dc05 d65af98658755044c8c8d48ac728d7a042721cdd\ndb184915075f0f454ad2bf4ad230bb9ecce7064e 6b4ab9fd803eff8a96bb323f36453f9f4e2f12a8\nfc96682037c8cc3cc048e18fe0333455ae96edf3 22f55284f57e440378367fffe75981c69ce91561\n35cc2416595e1438ad6e15ecae6d439645de512c 24a60042bfb59a979590bd2a0e3f657c5c1acbaf\nc037262be22c4b2873c101d4810ac235172b53b8 92492a0271082d9c0605bcce688a2983fbc7881e\nbac01bda83874a33b20c6a7c0ba2ebec2c171e90 3e268624ff8e3d103247d33d645e94df88fdd38b\n601a2e0eca924db2a9a87f7d5cafcad4e81f64c1 2384b6262a49ff0e16d853bc3507742f24c81f78\n7f301a795e4f4770a7c4e23fb30d699dd68a80a8 72ad5d41a8668e7e8f85265fedc7b545177ac694\nc52f78170287caf5dd7b444750644e11663ea173 abcda44886abfac3f77e4a3a5f2d4d3fbc0ba0e5\n4b63aced5fb517da0347d6fb9fb85ec8abf0f0d5 f4244a3d304b0246b0aeae720d7e740fcc3d8f73\n701a7d6c9bb70f89b9671d6c108cde76bc029cc3 5cf5a23f72500169e0e26a63db9713072bc95c6e\n69a660311519b9ad4517ba15b94d7590e3ef3518 482878cc6730dc0982227b112412c1b98949e5d1\n8067657c700894fec87e37336c9e0ea55c21ccba 3eedec282f8804c490e2cf3bfe184a99a50aabc0\na8f4319bf0be4800760205ef11e63b4cac960183 fda755a452e0e6220339d029fdb5344f734e538f\ncc2c9485d3e9e16c574a3326ccc1443ca4efcad3 19fbe81f84bac8d37adea5b541f534213be38d70\nfa89808167966ad99e94c9c0b7743858ee221ab2 4b496114fddc73d812c0110f3c20c3e332048e0a\nbd3ff688ccc5dd52a0e05b3f7b156f294d45d75b e5d2a5d2e936dfc7d3de73b9898ce5b03e81c318\n329bb93e4ab0ac56d9ab7d0c3c823b5fd5816b4a 8025762b3ac46504bdb58aa418ec4719beef6823\n8dd49383f9de7e4df9cf5502652b286e978c3917 2b3f1a8ce9bb06ef8a5a7be2a02eb7caae8542e6\n5cc80b5c80364fc15d96fa44042eb1b6fffe2fea b6eca6f67fa7bd9837f5065f819615143294dd71\nb26a2d8da82d5cdae9da83c0a12909180d9713b0 30a75c2925ecf10c61e0767f2d4e98551c3c0d9f\nded9afa6d8e40865192f2b3ca003ce470884bfe1 98e3aab0b7f59b6f9c2089d44a9da8fc490559a1\n6d0524afda8fae42d3acc2d2da5f7fc81e5bfc28 e256ae63dd7ef35f705bb8fc841589aa9f853561\n8902a6e222dca9196dac73dc2a483aa04429f37b ccac3e0514fa04be132e210dba78db9af928ca2b\n50659a22fd380cb9e61074fa8a012da7a967e11f a1058d3a86d0556642d1b56310e9899bb607ed83\nc89753e6e55e13b30e6c5f7ddf74c65e5320b40c aae2052c205d6f5aa24217fc9bba7a7acd355dc2\n893ff47979b254492950be8d62482e585237959a 31230c1d0290a5a8e0a59f45f47b4290c0b85955\n4395de0b51e7fd57e2b9b81f1d1456d69567f82e 86efce014ea71342b6e61989d15ce0c896b423c5\nb95636e7907684ce207c8438afdf2972a4859eb3 0a1ddeeb74dd5e3c220637e87151941c28e6422e\ne14ae2d0d6cec912ab1636eada6a2a981608308d 8b082addfefe31fe17ac8489895954ce861ee1c6\n435bb3d8cb7eeba1f3db0fba14ee6096652b54be a04527ce4e4e2d6586ce5a39f447f409cfab70a4\n09d4484581007b40b758eef03424c8f309107eae e589dce0a1369238aebfb106570cd183c7ecf2a1\n920d472ebdc4856ba766fa9aaf1ec641f7e8f6fb e1134af15f2a34121e915ab3d07be691a02e2fc6\n1bd5e6701b512bea69b5201244d58395a4a08f28 5774e79ed2219023e92db77aebaa7a722676108e\n3c9e8789b48f6d8820392407698cc55365ed9be6 a4018fe3949e680fbfa48e044516193b99f65d2b\neb6cc8c17729e0a8510d7e69bdc4f3a962d35826 0a34bc809d2a59beabbfb603d981b8a3ef1706a6\nf5fdc9e473dd7d765fa9f72afb53af527e615ede e56e2f387a8f43a72f49b60722e4a15ca683947f\nfa31a041668e0e90d25bd48989005f1d34cfa887 8200087942b475e6f2dc50e75bad8a90560f5e8e\n2ba63f4a34651d05543e6967d34a011f9a03a1ff 8a38c24e9c3add1aef1f56cd4e6f17519709b526\nd9729685b44fc699a59b39f388b143cffff3000a 1429f9d767f65afc0360c83d7b3674b8ea336f4a\n6a90a4a020cce5ecaa160bb565cdbcfcedf28ae0 f4b0b585b89577a45ca11930bb6fe02031a2bf86\n3c3ef51316c2afa3b9651f9a0a0adb31de236762 1ff6c7aefe556cc9315800698b9461b88b61f69e\n38db7e92a52f6991d7473cd2876fc66a6a2719f0 2c171a86e73b0cc5a5e8fff2606f8bc1691afd35\nee7c18bb8e08f22d083b131578e4d374ffd5a1fa 45fea705e9392b096197e0921a890e65e23461a7\n48cd5bcdc225a58bc98c0a1bb95490bec87f78f1 ece1cb97e673775deba27c14b343b14bae43c0df\nab7c2caad6d6ebeb6a6e924c84292e4fa322b407 8815ca115f8a52e460d00dc9dde819bf02c9b544\n2e252cd1b86978c7b4dc2311e46c2109c70ece9a 72a7997cbc9660bfdf53be5290c1a923c17da8f2\n9547d2d8e319864b5c006944777f35a2edc1aa67 b618a074394efc27ebaf94dfe4983812aad24c49\n63b47e9bc40996a70258cd112e5800d08b767a4d 595f92ad6a0f83717f5a65323ae32c089474a110\n0e8f69b732089aa85b0b49597f126c9a378ce0f9 b0f000621c0e6b80f733a88c7b29ce445bd3cd39\n0891ebf471083ff4365898fa56a25222204d2353 9d0ee99f0ea0c7c8ad592ef6ebdf9d68e7077ab9\nc11fb7dada8dbe865f6e9c158d3e57e5d774b468 6ff75480c7562bbc94ae9c70703e37cf8db5da48\nbe9601688efd87cb4445d16dace34ea2bf80acb5 bb44a8a5191fa9b0fde53132ededd291ac3511ab\n8dae6316a495df8f27594fc3c0048c814be0ddad 93b004733dab1ebe7d975d32475eac0052a0851d\n6f0f9297fbc1e14dec4a4df3360341966acb2924 4c9f8e4d6100f03b74bb3938b4a854c61868f4b5\nd65c5bbbcb0b10eae295df5094fd5e526feb2261 e2ac33ebb7cbae28eba891d03155031df3b8b849\n58b7b4ed3fb2f256ce44e5388514f1aa86df9952 c3fc1d00baa653b7600a0e10af89d7aa2e8efe45\nd6b503bfab7bee792d7d83ff9b8328f8e27fe7a6 cc28117ed43108d373b2d1cb53b408525bba9c39\nc2f4e2913139a220e968cb3c8f0d2bdbb27737fe d242d874980bbae226da0b879a4386bf8d467554\n055bd36971ee7df97977697c94da9e4d5a5c8a79 d9384f2cdeb84879a30d7040bc64018ce657097c\nb879d4f88916645d06a43cca0574d17aa68792c4 2b9f48573d483ea7d5db55994f9745a2ae7ddb11\n46f75d19265d740a29fbb062d4e82abe33c13660 6c0d380e3da4dca0208418a438c849096a516066\n04f4db3c490459eef283ace2a643729b2ae65440 67dbd6ed6dd5bac2e2aeccb53d344865d92b15e5\ndcd519c7899b7f83787fd29c01c61d22b183600b b59086122f68205c43a292bd7ffc5561ac9cd765\n54e3e782df57365a4b771eb34b353b1c61e29f5f 5872170b56f805ca16cdb750258941c43181ec26\n36fb5670c135e8f3539676634d62fc12baedaf98 529ef0582c704150a43efe33b2f8a51e7f4fccde\ncc446bf6cb8f49f406fc6aae4f253b096ce43c55 2bfa985ad1327c0edc5ce76ee0139eeaf653ca9c\nbf90109cafc361cc890d9989ea7045665cbb33dd 9c59c1fc2ca1b60e427d68ec37ea682308b94c08\nf74138b8fee567824afed22f7783f5a02da29387 056c1eee67fccf89276d35e8cf4d129ad06987b9\n7fb5125f420fe871069a13c2ab462fed9a50bdcd 615ffe4ae09b3c0ad34f683fbedc1ddc838b8d42\n858dd1308d396f95711e1be452041ef6787b78a7 1ac6bdd79620da365fab9469b13fadeb68aa8a7e\nb1ac6ccd8dc8223cc4f722b318420830e02a0075 41b4ca7221dd7de5df851bd43447f79207be8187\nb95215e2e7f2c127edf92a29f12d8eea0ef863de 8cedfec5ec42ff02d99ce1ed945cae1c22896e96\naaab2fae17dfccbd817d171a8462ade33462b058 db886c196aff7553f279916c6f3f647ed4337fbc\ncc417c1d59185b8fcdade8f02c7c7d5ac4b544aa 661123d39457dffd4b1160b9f4c5a8ae1dd56edf\nfff4ad12239d229ebebbf49c13ffdea7a3cca1f5 48a456c1f59906b5674c34deaa53f47ddf08e981\nb1bd8695d29f4933df055ec30b8eb08b5b16f0a8 08d093a365b4b398f0dba1b22011bd54d951e529\nb3e7fd5e1fd546251fa4300e71410eeebdea6a52 8ac1854d4e4d357da8756ff55134812b8873ab02\n206bd62c381d5b880018c83e9b8aa53cd2d6421c 533da766f62083741e8ec0685493bd34abc7107c\nc01a1e278d3b03524fe845a40c10f0ef68143b3e a945b7091b38740238789363f042d8b90b264890\nc47fe403f9e39af682930ae1a104ef3eaa497762 46891f95b15a1753985fba6aaafaf12daf4d58b8\n091f90a3ac475f97867d232df57a35bf200784d5 566ce2a3a5299f2a011c88df461f3aae88406bd0\n049c448bc9de323c48b58bd5eb57f9e8b6a54fcd 82f440cc054ef03e38447c9bb56a6e15e49b96e4\n96be2b726d48f7366d61dead7f1f6547202d607d a01c011ba14d14e30239a8e80d0841e704d80d6d\nfe63a6b040590139a2a2e16d408c2510cd126ea7 da720b6f0028ae77f31a1e31d3553b001ad219f4\n1509b8003e2860446e8af86707b2cc590394292b 3b84af96549457489b794788a6d21035e0afb76e\nfa83b4c5e2e43d8f40f02ce53b6d7d75e16608f6 7f2f897fef76e449f341ae9312348ad23b2bd47e\ncb716e51e37d14604aac2397b81bba072a06f109 1771ec11310b0929c1b931a868f9bbb4f35f314e\n0d761415f8831ff1705d2a910a988873afd8bf53 072ead4473908a4f113a7eccaebce44f62c758bf\ne839fe741749ea31116918d21faeeb8981de59f1 6774afc561258a325928edcbdff7daaba1fb71a5\n962349336a5c1d5d768cd2c5dc2ac2778a4b8f1d b2f4b097c33c1dccf23f197bdb35c2bd3cce9070\ndbe390877b308ce8ee2883628c8b06736c21a5fd e1415b9bab4c75f211e3bb8304c76414ae56c30d\n17607d4b27853ce8e9a1fe9314d4bc285a3c3b63 f0cc31be8b967ad71ac983c6627334b2b644b62e\n8c1422945a242fdff35164f294473da9f6c0751e 430102b5ae36ea0bf381b2a62dc54a8fc2eb1352\n96bfdf9fc796f2405f13048fe455f65d109b1572 5adac0ca3c95b56d3237c42ad901ac8e29e88a93\nf477f422164f2c90865de5cea24c13043253ecde f1bc41e6eaa10f565d3f664d951c3c4273761c9e\n8c59f0982a428741e2d3125da9eaf7dbb5b7599b 4dd3d9987c49ae8cd82577bb5bfb16379eb05427\nb6fe71ad0dede4521578f636b78928398f83e1c3 8962884e08ab39ffec49fc04f46289cef9ac9142\nc56246803be6f65545705f89ebf19caf1105ba89 f567da85b42d85ffbb6b339dc0df82c760dd366b\n1e03883a2ca91f396dbff5fe7b575079483bb45b d16accb2ad6a6c16d8e7da56af0ea73374d2de9d\n94159da494528500e61cbed8a8f1a087f7f393ca 37b070738369d15801ffb57631bc2e7a0dacec0d\na6312edfe360d8b7ab026d93fc42a641f5d32099 4b9053c07a891f32a21f69e4e20b5422c186babf\n0e6345b425708ab681e1475f862bc7c668733925 7e98d1811670144435537e1e50922ddf1eb7d629\nd75e529fb307c36d562631e84e09d229cc6127d1 b264fb4514abf8cf4bb7d50849620920aaaf1ffd\ne3a929a3fbc1ce4dc801c1c08fc174746f5e7b5e d916d04b11839600b0d309b030e54ddc5f5ad9ac\n8fa2864a6f7c29d21b4c58c0e7846d038fa184a4 b6de053cdf781417df7d95526bfa06507a429407\n31fbb03d503e6c1ccd62b760d8449cfcfad2cad8 c79391c6914371712ee38d820f3d30f912868d50\n7e27e85c0075a79f333da41460b99aab2778f011 97c3aca200777890a1dde4b388acc2a8759c3136\nc8e4e7be934fa11ab369ab1016aa061f4ff1b0f3 04ad32dfc64fbadb344daa765d1df5486260dece\naa998bb2c64731de308a40b2de8a552fcbced0c6 45a4ea3c7343aef4caba20b5f72f3bf33e40ab3c\n08e3b4bc3681a4e00f960a4f63bafb6f74377888 ff647bc70d81d6ce012dd283cfc4bf61153513ae\nf0fcf23b8c1188f8bdbfc2497182944ad50abb08 57d97adb839cac1c550b8f951c12b2e3cc164883\n02df2fcf2614364aa96cf9dd1e70a0006a027697 9a8cea51f272dfe873da2a96f882f622ada55ce5\nb5cc440cd98d05d5f16c0a86f315bcf4e72619d0 2790c0ec2bc4d65a59c0425324a4a97d8b64ef9d\nd8ee2caadd8ded3553dcc68972267ebc6f096012 fa8df3262c519339583de2d04fbb52c91471daaa\n387eeff7fe3694d69af67e4ce0fe52fc34f756cf c173def3517550bb588df86d0c8c954204e6ca76\n962853f24b5cb3458cf08ef1603b87ba68791e4d b7b81ad7ac69bb3d0cb282ec4aeba1c977310157\n360fa769964fdf1cd809cd3dcb28a4159b545bb1 601d61d3930787e5da225b82082af558c0d05edf\n23e0e3bad19e365d7f0b9e9ffee7650735469f86 08d7279cbb7c43f142e977885fc6096c34ef640a\n6c60a2462e368e2b262b580e04bc409c02d5367e b234c33ab9da6ae69c886e8040b4cbb9df19b875\n51ca32049afc90e34c68dd64250d04185288c078 a0e0347faa9fd9cf97b698816a5450fd29e87dfc\nad1fc1aac2627ed65fc91284d3895c170e756bf2 6d02124a36ddf6b5f364024218aee9049fa0ad2b\n7669246344209321e471d36968017155c48768af 9c13e627faf1194ad5c426ee957f12095b754fcc\n74f899e01864fb22773307e64b57efc83e9403c9 a0c4e0bf87d1cf69fa1efd9cd6e9ff225c89e03f\ndd82b28d778e1bd482f95b4dd1717b23a5d39f49 94ea800cceb45e0b6c43496d3a8a91841c3c7e57\n369528f20b233f7d72cd7d4b7ec9af25b92e69e4 6edd2d51d823870e80527026a482dcd260a8d7e6\na4f739878f2d6a08b78004434a02bc008cc82962 e614c641bed0213cbe4b97b33bf6bc7e4d2860bd\n98973fcc633a6ce7060ff0cc4a5b5d379d739232 a56b895703bb797745d15dfa180afca6e2e6caee\n462e03380f1e7451fc81aae220af3f8a76d8722f 2068ed7d216aa248b0f4394f7f7e64e991526006\n9408060f994bc8978eda2f87cd05da40fa0aba95 d94b12bef6242974cedd738702d7f8ab97d0f0c2\n73014cfbb235a9f0bee16259ba0da9f7f3532a64 e5481376543b7e8e7bad65b6a623e96f5224624b\n7e6faf82916e118d9f80c899dcbe563811ad8797 1bf7ffce3294cb37ace56b65a65560590d1bf7cc\n072ad31fcde7a905c94aeb29e8f46928447a9622 1520e7c40f1cbe75df74da2ca3a565fab6aebe08\n4ffd49251cbaf9b2e999c26b71e289a4c4ae8e01 c1c7d0b94bcb4ce8dd4a6dd6f3cf5f4d8afe745c\n76e7f805f2c756bc1a591df76e7d16ae5691e257 9c6723eddae9e8559635fe9269d9a0b99b0adf23\na844d7ab2f477c892c6e0f7f0f7ae501c58a7521 baad0022f30b109b04d114b8ae71196fb1535453\nddd605854246468cfb8247b44e6d393319fa9cfe 74e10bbcc810c53a7ed0989cdad849e41cd78722\n86da213433ad422aec7a921f99d8f69e16ab3112 c18114acd3567c10819a6f8f7e3a722b22097ecc\na3436d3fa3d2c9cf9d01b2ee742c9a0385203ff1 4fc311f3422e850477965c5f92e8792c2ff60245\nb9b2d6f171a049b578003f4873bb85272eee602b ac74b6bc04234df102c3fc3e2874519e49b29d68\n3f63dc9414510aa652fc7415abbc39f3b6d92d5a 404cf92b573cf89fcb55c39d052f5bfd774e1a53\nfa0fbe64f3020366c67325199b3bf833611c291f 3e972f265faa76e07cf8e65e68016de8f020ce07\ne397100d70aecdff5e560050b0e366f79469fba3 10e86a47bcfa2454e89ce620c21735e64e6573bb\n0dce535cf433f39d2a906736316d4ec5eda3e083 1f0a9d943baa09f5e7dd8cbf05c7261b69ad0a7b\n47e62919b2e7bd7f69adf9e2ef0b1e6fe455ad32 189ed65b4fc098f8cafadf5e27c97d1db20b7785\nbae5649b0c45b6a790fc3b4259ee7af8a40c901a 69e057505edcb06918dcdfb70f2b13f67354501b\n86d16c11f0f4ed6b70b67d80239f5d9b8b4fd975 43b8a8f4a7c713d70ab25ecbe253d08c8e9de567\n000558014e261c23979a39b063161b0160729d6c 8b9579740f9faba3f245da68d90dd2b8ef8ac141\nfb9364ad3b1a2c075eadb0de9bf7ac28600ce556 4dfb1b34141f79945e2405946d6f4062fbb11a89\n79b85a7b82b277ade4806d18d62d1d4f2ef1aea4 f83aab7cb152d5be4d7b7fb78e3cf88bac7af8af\nab359b05f32601b7f4dfdef92927beb99fdfaa28 b6fea5c1e292b36d2e0b0a73e48d9028915e8d87\n28106cad829fe38f4e66d0990a301411529fc5c6 08b00e62bd74e176d0411077072e107707dde557\n78848d48f06c96267c64d663e739d0f70bacf42e d69496822a0013adc1e46f0c9c9ffae32fb1b79e\nbe53f251a7bf0d4cf930070fb906805008d85270 951c271978bfc19a7168721267efd0bc9409cff8\ne793da5475aa55a18c5516e9422f1dd8772a472d b9632c608fd66d1bc624a24a8ef97e4e97640c22\n134bb7e20e24e98817e433bd43d60c66c0ef005c a1d3ccca8ada885693b1f623479e6d3cba7fafdc\n842b8e269308db7d0d5431a00ca5df931806aec5 3c6212da607945297fdca40434cef7742ab319a2\nc038fa996ca2b37ff20a63bf409234d9c8a9a6ba 01ef8f78a53bbf55a5c340b5e1e29acd205c2151\n5d2b58e090c1c652c056b521f3551cc923b01a69 98ef32bfd07ff93e891c136a0921b8fd99b00513\nc691001884a7ca38dbd7cee9ca6ac2c7f85b12ec 8b2c8ffed9206e5532ee86a6560e54c19c0f0678\n4933944a2ccc6fad8a4ce811249e40676fe0b3a2 04a0ef74d91e838a090c7f73d70e16c7084ff22b\n2d4be9a9823dcb4eb46b56e71d9684597ce7c450 458e31d761bef77b870a1a367a633a39c95d6ba9\nbaa445fdead1dc7d2b0e2e9942a83fdfa219e5b4 db9628fc398638da92b971d476118fd2d65de14b\n8b6dd108df67ad75e103cd4933a4efae03f72745 9c2344e8620cbe3d5d2b81345e9909e31c8e51ad\neb905360512d5d7f553672b2f8eb752268f18af1 89747feaf1383c71b0d0f7f9b1460498b757079e\nf5aba90eaae4d7d6766890bb3e1b113c053432ad 89e05be19eb361acff5b7a7035e33855c2816903\n2498bd04fd2ae9b60308d40fd9ec202dedd13e29 f9cb28d36e582419c135e92bfe3ec4d7b3f3b620\n64c703bcee7f2b31eab651d3dfb6a2199a3ec6dc c274512a2ae7297052c46752ba4dce52c394b849\ne68f70f7e430ef89b2a9d25eac91e3871b9ed019 3c758495a3fd1987e96090e72704aa89f2bddf4c\nd5c9fe9b2ad570d1982842f79df99156540374f0 4a501a300166073d66d7a4d4e3c45daf8203116c\nac33a5370acf0e06630def137574b8a3fae29e9c e9846e26da6b7fb6516e00c72a9bba5ad2c5b622\nbdea2c8697df56c749c3b02becd72c1f838a3c77 e8752d8f250116cc542fd57671bb67359f7b07c8\nab09eef591a9bac81e4db3ab82ed7783ae92f16a e4a1e00a223bfa78c5817f85f265ff88aa48166a\nd51853d248fa7f5a5fcc0370f5ff57640d3d147a ba71d711c734c2165d4c059ad85e6e85ffffb8e4\n5faaabad16bb44a3bd336b74c4386381eb6a2881 7ef9a1b98975c276714b409c7e087dfc15446061\n3707738c3712e0f948ba963fd162a632b8f96592 dcf69a8615195c21d3af33c0b7953f06c69da0ca\nbd6f3b34c5ce473979ce30eb1eedddf67f09f3d2 1a164053bb6d136527fa4e778fcb3e78e2c6172e\n26c3298e0c4fc949bcc9a4a0304a9900589a8f18 96f56c474c238527ab2d6832316bc5d28be5650b\n1dd429d39b11594f08ca3bceedb6dfe3468e6f10 aa4dd0548f6ef7ee0f3639acc1e571b4f0cf6a1e\n5ad98587f62f42a720b5d04253caaa73a86138b4 af467755730bd14062ecd10e0399ebe6d3f33b87\nc04e3a017959a350dedc94c16fd626f27bb933d5 78d1e5707a23a513c264fe16860de0bbdd8c24d3\nb2a920d5c5282988fba43228c85cabc4ed1c09a9 3b1353b8ba17675956cd72e15d33da0a2252ef4d\nc9728ca7c8dd0c9fcd0852f76a35553383dcc513 fc92efaa3c4a2db869efbdacc9695d1e5d95fc80\nc1b7a597a0ab853f6f3aa78f47efd4e349a0442f c0ab5ebe74440c13de8c62dfc6a87db86dcc546f\n9d57d161fd7517ee2522e07654a598c6ed1c459d fe3fc03ba36d44f8e7b781bf7cf471636f23b79d\nf274726d70987f0d313d0b7578027638fb853fc7 5038be0a272aef448da9eb1596fa7f2038f2fb48\nf160dca87865efa9323fa8781ffaaa64d8a9b26a 2be115be79c1c62e88913c52b2db6911519f5a67\n86e25d8dc73b54b207123e1c326eeb66be5adef7 086cdc5c15246db59c9627c1493965dabadbbd80\n24c78264fa7d14a81b515d6de67dcf11c957cd21 b70221d3b659d3953d0fa047d955a79ea3118490\nfde143ff59809079332331b75df4f701d77901d4 e0a42917c7a0262c4a563d2c6675006af5784954\ne4ba4fae66d3cba289d43e8d0d1ce3c06b7b4a56 e17679abd6748a42f73823c923110ddd1a65973a\ndb2d55021ce09eb16418d1f8fb363989a52ce72a 905b14b461e07e42b97eedfff3960aa0c3d5bec1\n94a3e0f1635c97c1d6d74c7e046cfaedf83a5678 3d96c478c30e392dbbae04e6b9f723aa861110e6\n448c182a6b9c84465736ef407d8614346f74edf7 dd77b9e4d17acb1ea5ce720ac0be7bcc1e80c7ed\nf80623ac4e2919b33a5ded0697373bb332fe2fac 934295a496ec0ac8da8cbdba580d2f0eed667763\n0a8ed8d7269a8976cb23c06058dbffdc0897b066 e714b27d644bbf0bc204a1b6907332d792eb6142\n51f3fdcaacffcd4daa2a136b171d54753d14d985 14bc4af85bfac526502cacbaaa2f97285fe1c977\n1641055089db4865585e27ecec18c1b161252aa9 ccccc8bfd162ba03e94da3a8202db56eb5b9cc2c\nf0adb4046b14b0548641e91b01b642b1edaac938 1a3359f68b57e9b19ec39fe4c85407ddb17fab4d\nc186c87d7de0917268380604e7e24c5df874f02a fa2ab5118d90bf172dc44fa9140b1939eed931c1\nac1d74e84268fe2e3ec7dae65be87e0253d5fef9 b5bd4bed5caddfb3c0672b1760f847c3da0f8ad9\n3255f83b475e8a04f248def8061209d423805b68 58111f3f3bb9b3af67c04dffaf578c61b863fb3c\n06fcab94fc73f93e95e3f42d779b7e41d05e09a5 623465b1c922075f81adbbec887a95040d68f7c9\n7d3735326b72be5a1f16d65361eae4a07ddcbc87 e5e4b644a1fbc0b551fbf53b463aefa42fe05daf\n0d824981de2d4beb730a1f0c5488d2dc05be3d6d d190ce892a919a2df887cd11c3de97c0ae9cc097\n1815dedad506b3479373583e7b73da202813fd9e b65c0a7dfda15dc4164b777d9a790a3be59f2529\n9e6970c5c3f31cfd98a16a40cd94bb1146a57d28 ce0edcbbd265138e02e8bde678a6f17457419ce3\n8ae440ac10cdcda3147f49b096d8ffc6ef5c6203 e9b06ae56bc1b735b3aa0f2e70445f401c07f9e2\n1858e87a1600dbe5394be433b7100ff3a570f702 cbb81cdb3c878ed2a292cec84502b51f48f0d44a\n61244714ce7902f1ebbfd31276b78549edbfb71b 4c90f063eab775bbf0d51963a9253f3fb46fa832\nea507dd95c29d270ff08710d9f15f8248cfbf1dc fa85c5287b3ec7812d20e9f9fcb945e1cde00328\nb4cbb0d3ff5edd834880b9afdd580dfdc1ff2692 e24c2453e22c43238ca021358785dff0aef5dd46\n1a4541e23498ae2a301654c04f4ac06e70cfc72a 0ec1ee21d65ef234649653a6f466db4124b3c092\n30ba267cca1e0d237d3b2bb5cc076f847418e790 0cbad54f2f80dc171933ffa7f08a0f29d976b783\nf701ac3d1fdd6794510191634237456aca8f22a5 4fed688754880ad48bd6d8ad564b50ae4c27e8ec\n5113e397063c31d3a6ffbcf9d88b1def0db0a18b 0040c0a002320d71932be8df24abc9e5e2ef85a7\n17908b4d2849098b0941aefbab301b2563b6eb19 c3c60a45c89f07979db63c258dc83c1a97307049\n68a17cab82000dead6f495b3ef5e0a63044dfa47 b1787d84528a4be78ad1a6ba8b7c685306db59c9\n0dcf9bc8a3eb5adcc46a7b4ea5ffc94763485175 ccadc741795fedc8f59fea28ad3bbfa8411ca754\nf0d1a757d1420aae1f0533374c109eba15e8223b 873505e15c9f057a41115ae1d406eb5f34e876ea\nb5c243bfe818702b9528559ad6a0ec4461799c61 dfeb99b93e0d67ab91f8ad50b72163b97f05d778\n8ea6400f0d9157bdb54442b48f2f59a7c82bd87a dcfe869ed09e0fc863825702282bcc13cd64856e\nca72d08dd9737c61b2f46b82c90f88781246dd23 bd966a5fafb9651369c12f8a96a13c84f64fc156\nbf138d200eff9f473f25ef440e59eb15c60d40ea 4a8d4784a533c2d908c9453e2b857a99d8cfd58b\n02c781560a3a29337bc99c89402927c8c108c5d2 7a8e8ac49fcbce7ac75d848c1f09d3d4704a2745\n16fdc20b70d77d39e47f2ae05808074c66be503f 71402efdf372366ceefe77d988a7f836e9129e5e\n83278380ffdb361c6e73098cb34f9167e8e47a0d e017b5290fa2a89f8eac3d67e2973ec70496b405\n4e4287a93691441c3930fde2cc791ccf3a83d6be 1e0d0d8a02fdf2b100be74f36a518b3ac535a771\nd6333deb2dbdf1664c61edf6286d11e62b462e2a d814365f6b77cee5c452ec2779327636bb6695d5\n345309e97e4ccc567230e015f4a98c4db4201dca c2510dbabe21ae949ae46c510c7850fe0190fd1b\ne1306a68cc1a6f8ce20f0add152dc12a44ff6319 366ee38e0f9703fcd7fb2b437ad713f47a3b9dc1\ne4d910cdb6ecb46472fafa7b758e4f46ca2ea78b 90cedeaf9c4afdd6c8e1170cc9356c0dfbc4b419\nfcddc65734247c12d72684d91a977d753b8fae7c 652441a84c29182c0b1c9a1a368f2793fc4ce171\n6d0e8e6c8b31c4ba123c3f7ed85ead7824c157bd c17c3e2dfbca440390b0cb49863d7a70f240dcb8\n562134f7b3c6c84d71c61a4b3e566c06ed23353c ccb7bbefae0224b648f103e5ac345d180d567073\n572f8f44b0ffb2e0180066fa87dd9f7c9c9cb141 d88ff341a703ba683d04dea0afbd24e434fd95d4\n217c592c7d8df1d04a68c1b426b0a0c749140593 821ff199dde8c4d18e394e152704978f373c97a7\n3222b38faec27956f19a15ee856cb3b3f0f78735 638aa54265fcaf548a8a6d043147379570b50e23\nb2af163941e278e1673d278c9f00c2e737554014 f6e97ea971e79d324fe2838e3cf54b46de85bc3e\n07f2b68656da084d898ebd8b7dadedd081175a86 6ec538a214a825fcf9bc9fd2a44da5ed6777c347\n03dfe2ab3fb51925cdb019d14cdc477aa7d8bc98 c566252830d2079222fea6417282f8aacec036f7\nc0e6128c76aa250d1638ca4b491be7e097cf7faa 0daa14312d87d8f0fbeaf827eb10346e9600a98a\na76a03f0583442b19c8a80be82fc9079d1a005fb c2772f2a4c5fc2f372e4af2df71029571fb8bdf7\n637e57a9e16b3d9fa51d2837331c7be24379cf15 e66c9de40c13567b8f586e6cc5718c6de619633e\n29d455d79999ce4cd47ece82c6deb4b6f469298e d06e9c6f4a2b27d2063c74a85f2c2a9302d40ad0\n65a93073686bea884feb6d17222544704598b149 f7fe74be2dd4e4309f3b32fc3b0afbffd66c49d8\n90ea6882939d49e58bd7e3bc3501b98e081a7ae4 4107180f64aa1cd92948641243e0a480469c42e4\n669aead1637618fda2bd07533248facdee866b40 0619076f5a1c296988fec93fd33ec302091bffd6\n9df73de8d399838201046de12ef18fda4da067ef 31bb93bf85ca979179e3b67998643e4c2f272a3a\n07b950aebd9492d0f8151f63e9f7ae58d1bb2575 50d8518918d5a1582c3b01a9cd0b9b5c8a28083d\n62c88d4e68faf1ad79f1ce74ba04599c34f95ab1 ab6e6233e425b980d1ff6a2cd875d281268b12d2\n9809b274b794e7f7fa6e5998236679f5beeaa8be a26704a9de0d611ac74298e317d99974e760da28\n80209081804a8f8d001e28a7dd99391f980a8835 47038703855f16470530e9996bdd4a36c8f3b4e4\nc5409aca9c036a27c8233e398a4f2202d4004823 0101a8fce2733d298eee5313e5c301b2570677f9\nf4874479f62d5035b41e6ce06c35617d498dfb85 9a9c06235e7670420c63a106e630901dcec3184a\na3a8aaa2fef43e54dfe9cca8f889536cd329b9f4 6a6c2d485ad640acaa81bd15269422db741a9702\nf68a89310cdc94a6b419ba07eb185fb0c81c766e 6b58c8e0f206db34ffaf2df5faf66cdf4af24837\nb2a6d1fe1e3beb2988a9526b3126c67b0a75bccf 8dac7dc124cfe7e86d621251f8f36b0ee5d58769\n81d541a44e7464100e6d21b75e6c0e2d8cafa1f8 66d28778858e07ba1ac12977c9e68717ac1578af\n80aad8c831252af9470d71bf3646640305ec7069 f7b0b5acd21e9fb3418fa4766b72090d02ef7296\n1bcc222c73a1feae141033f16ce000e1306c7ab6 d36a7a83c21a448c4a6bcf9623e30bf7ef4bd306\nd0de2ad838d101fe3063cc31bc36611487e1dde7 3ad03e2e67d620c1c515e24aee34dc4bacc0c247\nc61860d268a35840e153d612a7589dc52957be90 510cdcbf1293fc46a5a584f6f87262872fe0e3d0\n0dbdd55b2d5d135a031f2af9d65d0f3ed66ab17c 8dd1d5c67dc966090680125224caf03a033f41c8\ndc11e2f1aaf24b98ca84f89c8d2750582b699d76 bc2623a75f18578bfe4f896b1cbfa6b76d502d5d\ne8cf8ad46049c6b8b78e9de25bda13ca045012fd d9c660ea60ba53e03db6e3fca1475f1ab15f089c\n18dac2c8aad0cfb459dc854ceba12abbd5d09c81 0a39cf9ab0dc3ec879b75a0729d1ea97f82cf854\n96d611db2568f80cb66fdb357f1bf47514417145 1508bc4128a4ff538a5f207be93676099e929e3a\n4398598c5354c177b4e67b7bf544386b4debb1f8 24db4e7fdd005fed07e9e94897fc7b542b759d9d\n43cd080ad4c2b534c9b5ecaa82bbb65856429ed7 9c2e49e4719114ce90c4e1f12ed03a803df15570\n4132fcedd63c1e41e9d2164685159baeef054f2b 4b296a736f5c41a95b711b80ac71f680f82136c8\n2404f69fa93a32a650dabb547458825c7d172600 d51d19c2e767ae6e7f305ce646b9901c68ce65fc\n7fa661bdc29f04a1e5bb6679b89f381c27b056ce 29280df9c83c2b61d8c3a1e921c5b86716f92d7f\ne93a59e37ab2fd42f48db74807d2ae7ec2b921a7 c61de2d9a071481229a41dc508ac080c88768769\n31123e517f33de3beeff3f30b1e7831e7c40317c 12c1d4327d1aff17e4323bef670cdb497209686d\n27aaea25c84e6dadcf9995fe96dde3b8b530276f 71a7e35b5e6fce00bc49ced40ce2fd7957ce7a5f\nc1465ba541354450ab1c00fe709035590734993f 6a326548514f4de6a82af09b7e1a4948ad0e3961\nae4b03296b8a9d7614c408b3847d4492ff19476d 2b43273049e683f49d6ab02d9f426f537535eb00\nd7c8a8618e0f65f28afd110582ac10f7c3c3ee69 bed578bc6a05f0736c1d7c09760c950100c2042e\n0ced9481c8265c05cc2207b8efff96ca02769407 63861c1e2021526a071053f83d1479f00d6fdf20\n06a711ffb9ef09c54ecf94765de92562b58d70f7 428b29757d08d9669a9ff258d31a8a391da5942f\nc92e53b5028848d6d0b424403e3c28e0351a788d 218be209587ce4953c0c5f46b6c2c74c0e6b8d54\n0801ab2940b59f073fc875cc3bf8dd81fa62b659 d9ea97689ad88642ef934142f788644c6c1be065\n40e3382d59ea84c7b6a09b315553c34649006875 9ff9cb53c696ef9fe1619561932de76e0e2547f7\n6ff26752b70b243a484b966b0283010a101844af 79aa22dbf081c22a01c75b1eabfbd93b91a25a93\n5a2d6e36d2595be456646584140a38f0eb1d4ad9 ebff9de57da7da77a7624736b7e078abcaf534d1\na79b4362cfaf4d78d7dfa2dc23ade0c94ee47866 cab8690ce0a3294942dcb148e115748ffe2f25cc\n92c4f63aa3d9162bd2ed5abad6b85a7a96c9af63 ade3201515fb41ea8563b4fc838478331501d901\n7a1b61061c74b554468db3fd20cc8da269a57fbe a7aa6dd0d29737e35ff048fa98cecbfd92909aee\n7ae9685f3098152cc2979ca904493d7ce395e66f 7aab0c1ab06334d160103a41fabb41d6a9ea3411\n3d7895e6a683e4e7d5e4167216660ec7c422d326 b37f7d01964f9dbce1b064103ada5419e9acfd3f\nd9802b12c1748d0216d26bb2a15f3453ad15d508 7401516141a746a2c088022f58c02171f3b94d76\nec97100130373b9bc1b7f34f55559ee51ee8ca7c fff7b220cab4f7bbcf41f6878e6a6215fcfc5436\n66ae4ffb0306c4c8b359265498a996b0b14658ce ead6a2a1e1d0a67fa59c787aee72326e579b0486\na710daf57a3c3b156a6457c19b45c41f572b786b e33f7a75e9fe96c0eb81d0d7e4685a2a9da3f31f\nd5037a64171356edecaaf6adc4221b1c716838c1 e0e91a60c8218fac926b71a593ba2a233157b094\ne9908cb6407d9d67ce507569ad26e6d61860c277 57665d7b4cc37b108e6c3ed25398ddf83add9c86\n1f07532a21579050b5b1080bd4110512058ee4a3 94b7317b3ac3e1d4afeabf1679d3fd2403856e60\n605d6af22636f3cc13c3fd4c6efb0cee7372ea4a d9311eb93e7ee66adcc397af8aec2fb4a16ca804\n956652df472743e2f292d8b0b501a16faaba04f5 64c32eeb488de1e8c0391c0fe39fefe92e06f7d6\n963e643892d5bc44441dd9552f20434ab769d532 68cf718f83bf3334a06d7b91b7fa1bb4fc732164\n9ebb7db84e16a9737decfa067a75f7deb9ff90d5 d9359a0508c1b74c25c6497d288fa04a80ea9176\n7507e55163a016c238c06152a03be82fb4597d50 106d803d16147ce13de31ccd287c93ccd9eb9b17\n97a2ab1f87ff7ab1f210a3ec8b3a128c2511c0f5 abe81261509361b88e161cad638760d61c0a5fa6\n11ae637a4f2fb4fec7cc21d068c64ea5d6937386 f20aba2da2c69281e43abc76745be97e4875ad02\n057bf55b956b293f20307509ac6deaf5fcacc5ef d921d7f6aeb192d5c8e0a13f7f357d8bf3ad2db1\nb561efe89b76b03d9972004b877f102d5c62d7e1 3d18da67544fcac13a7a5336ec4f288875896407\n5b99af41df2a057e6eed4328627f385fc75eeb2e d023bbf830c909f6b43c7ae60b5d9a974c8dfa7f\n7de8a140b10357107ea6214610dec8d097271efa a900138e65d6f68d801567bd86982020e49fbca3\nea4dc9f2375921dd8fa0089a2c9c68c13c33a5f1 7a25d059ce821b04c4548ddbbaf74cbf9c3ab6fd\n9ea0f183a25e077c91184c602a4379e03618dc05 d577f1ac905e46884ae97580f0d3e15fdc11e0c4\n19fccbfadce5190379f0af0d7c7b8cc23227b67f eae65255821716b47419e5d95a12d5553f37ef3a\nb09d99ee9f11e2c048de0d32375c17364be3458f 14f4e8f689391503ca1222e73d79a1152184779b\necdee0f2c8da20b67c187e9d0a0157903966ee17 7962917d8de69afb51626d2d6b762f0cee974f65\n485ea7baa73782e74456863909fb724db4e765cf 260f6b791135ce4bfe1417bfbcfd555b7fb1b3c5\n8d361fdd6d1124288aa4e6344b0c9d618cf05db6 cf85d9d98fdb88242ac35070cec5f7d7b2180082\nb75eaaffd9d14d47a3daba548b510050fbe14ff2 c73acf0137241f53157c0e339b1ebe269b8e3daf\n54a6356bcd70ab835d960a61e0ba4171f52f4ad3 b0bea4624cd1e32e6a4f5565b32c8cc95613e9ae\ne8dbf99637fda2db29f8d1b77e1d48cb45b69399 46ef0e35fa8d2c3c0109258d05bd4b21c49f5368\nab3d11c6cda24a10b6a767dec85dbc1204b46cb8 664d1bc230b05da9890e19f1d741dce3ca6ffba0\n7bb54316b45a1338fb3574d6a390e338bcee548e c8acb54c6ac42318248ee823bb5e9873b63c3ff8\n8c0dd5dd536d6025847e8a640915f7dc9df58a75 9b292fb7cddb0c458970fae1af80e32bcbc2d623\nf0ec59e1bca504692dac16e4bc60939aec4b6a26 f56a601cf99a83379c792c226a160af7e6da3b03\n098580cc2ffc443d5c64514b69ab6f41bb02b389 ca26b98968ad9b9b339358546bcce6963b7bb3ea\n3214b2695ef042202852e957a493e3d1e66f23bd a79afa97ecd0d5527f933cc35cdbde021278f2b5\n517729ad84baab23ee0befbe70e9acaf07ad0768 2168ad65e358b7a72581a51dbe3e66ddaa28ddc4\n0e474671691f4e150cb97c0aeb9cf8877c3b3d9a cafb18176da7c7a3fb84f7ba3ba1b0741ff54ce0\n051e1cc4432915f51c65ba965aa0ecf39c3244a8 d2426430525b344ca6f3298350a1e517868d08bb\n85f7dcdc81759b3a1c3aee816d0adfb1896094f3 bf8da39d792a6753e334d1bc96c1b1d0c46cad57\n325e41719fa1fb369e46318daa6c20439041a1fe d2393c322fcc2be151615617c816b03bca70961d\n22b5e4a19283e2b6615e2039c7a02a2dd7adfd02 26339d815323062cbbb3c1174b4dfbd481799ec1\n0a1a1635be4ff6244bb5f9dba037732f51ff9aab 77edebdf2d99531c8abac05ca67eeb7b4dce1c06\n018b9dd9a179e6f6c8340e559fa7f167270520a9 e85eac6c910fa9442a8e1cf1eb503bbe498d77a6\nbd4abf106ab8c0ac0776a856b88c444669ac3b6c 77bfd3b2b16fe6a2012c730f34c32705f8e70d3a\nbc2f66647e488d57fe9796648e4db9d7b986333d f3e101e0ed264e5f33e4eb40ae1646dd37e845de\nd472c2bb337e519bd1a2a23440fbd907d1d693bd 550fee2105b44595b4ea025113446be1dcfb1c17\n313c0193dca790f004c963bf4ad0f6029960d425 ad10bf906185e1668a046f05d88c1bfe3798684c\n78b6ab2a925e06dd8592f553c4780205c50ff0ce f290f4f33f8d40a06b4d48ab20b8197edfbc3c61\n4d2b0b46a5e8cfb60bf5522bbfb15dedb62b7b14 f6a69c6028d8b140421b81e0500aff5019d321a8\n90145dbfa6b6b5297e50b5b5c2795170c57e7ae0 b3adfc84a9d1a15c0ee3e1a9949e966d9ad616ba\n57f321c82b98df8ba8cd4dcac1ef0b361e3afe28 bd32363edfc2e0b4108b755e79664febd14f3a31\na2861d674e6fe296b6f3db9af7bae6dee4298dfa 15255b255137e2dd6ea955394d679ad0f1f60fe0\nbfdbcf9ef98272f9e824307672ae7fef8beea0fc bf0c22e79daec834187daa4fa8e54ccc01ec750c\nd49b4025e1581db70c0ccf7a4bd92187e344eec6 454e36e21d18bbdacb084020bb4c1123f93707d3\n6a2d113dfcf545a3f691d2603b6bea2132bde829 bd0aca892e4f2d3bc4ecaa3a8bd5edd059e2b27d\n472df02fcd5b5f3be85aedd6d45ea74d2b0cb25e 58657a376ec73571e0da42733126dd0949a129b3\ne800ce7db72bf600a1f8dc6911a9abf65ae6c102 17e177e58c9210101feea8bf3e933669e2d50f2b\ndbb4658b9f61dcd561805905ebb5b73e2923ae48 ecb721bfba660bddf550d9fa8cf949081a900995\n5a7a1c7f7266022e5c6b1629a85bac5ae6ec85b7 a3a4f7c6f99f49f06ccb86a75f98bc14914078dd\n7761bd57450db931e124a7d42770cb6836349f69 53d2ab27753cf0a0ff856d053d7c6e5ad7eb6329\n50ddd7deed754de5b55e65e515ad9a2f45f44703 6de6db98aad96a7983935b54f8e94a8139eb6f97\nf0187ee29ae3ca7b3c45b9a78538f72b30cb62cb e1c2a48ca25c94fe63a15ddb9d2917b8d572decb\n02d55a7a0693f411f2113d26d49b61553f1e23a3 180d7a70fbc486e3d4ddfebdb503e5d231b4259a\n4d7fba2199aa71174689078aed32d225347acfcc 2a93fbff5cf29e32e8fdb64b229096adb454c216\n87c7ead55f6dc76b7626ea106b74362b8b757ab1 8116c6a1c64d7d9f6519f7b518594557849fff31\nff4913685c85ec48fccebfbf8471618b9ffbfe73 5b959f88c09c34a63e1c659dccd1f011f0d2279e\n1462350c5901506f030de3295b9eb146dc01d1f8 dc688190be0d28f27efe7b7e0ee80b64d6ece992\n32366c91782d7f02023af183c45bf5a6f7312936 2251428fbb1371b741d1a233bfebd30b337ecb95\nb7184cada82f42eb31661f3a97e88ec5ce70c471 99ef5a342bd5944763afa98cb16f4d262235c394\ncbd27a78b897556f335a151367449e5f5531604c d1cdde17b66f7d2e044e88c52b498998d291c361\n125bedb6b63bb60458e1d6c29cb66e5656ccbfd4 64f445f324bc67a0abc89b761331181444ff68f2\nfbca96ca24ecbc099d0b1d54208e4780a7ab36df 9d7b899c56bc0e054580d5ac2a34eb6c66631aa1\nb592b77578fc96e1fc8a02b36b61e99d87f8e50f 6836e65f9f3b12d2c0be0f413f8aee80b91862ee\n8eba850efa4a9c5694ca305ba3c97c3613d8b6c1 ab800c83c66d77fdb0356dc4f4c5cff94d0b9fc9\n4d237165bb5b62f872a83f61a19b736b7cc8b3bf 73d6a1e89d96501ca673b91353b28e3412c20e68\n49900e25c014e6bb5d78fc0aca447579d8d6fca0 8b778d1810d697d2781ad43b391c5dd5148936b8\neb1b91cd970cbd3f1309da2ba3c23dda40ffa055 34ea3c27f82b6b49f90ae2bc969c21c5342f3c95\n3b53809dfc2f5e52fd4b28c645985d44f464d1e1 e28cbbcc5e30fe2e5339979006f6cedc49e13634\n722b2c89bb7857bc57aa0f0530f0ac58491536bc 2a4d89c35196f9b9c882a77954af199d8130578b\n1ebd27ce5b87f6dbcba99a2ddb28e31eb4193fc2 17223cf9fb464a3635c1b940e008a4156cc41bff\ncc7639112e74bba905705f577aaa3113532f0610 edd3cd1e3fc255d7b362d2b898428cebf8e03bd4\n1de75343a077008bad9d335dbfe04842122bffce 0064517a9e4e8b4ceb72c448db68c7b887298d13\nc303f038f9c6d03d604c0aa08a6a079e239bb4aa 924e58467c34980dc30701bf6cced518ecf0eacf\nff549f37ee7818e75f60d00f9aa1515f4ba5b56f 7632938898e9c4efd967b505041ae895343c65c5\n442fb04ba4fb24ba1ac67fd1f1a0516fb6395771 0150b8b1b63072f77295fde59f9a86fb3498d627\n81d7a3efd4b329b4e2a05b43b8c0b2e29a158bc7 7f9507c11926a47dbb51328fa1e1289886ae2fa1\n9992ccf2de04fa8e578a4e7392ccc38294c3f0c2 c996645e682873244c65a5550f9e2f865f589916\n6b08365d4b64c2c1c4ccffdc90321f9cd056372d 094d9b0f741453cdf3487502020a165f26023600\ncb6eb0f981729023f1e6fd0a4218945de1ba5b5b 0f05d642b351728c2c454661df6e957eb88218d3\n1af00dc583ef3c08c782daf6226d33aec25a006d cac892f694cc4c28a12c89eae9a7e679d48376b8\n8151fe48f6a3221316bbde80680c4e18cd2bd425 6d22f5d2be428bfb29dbd44b86a16d8a23330d4b\nbe8566783f825f98b6f90902a0b7d6ec4f8e7578 cae9f45a82254aaa873f5fe2c1d2c45d6cfc3425\n8d73b778ae7ead7a5100ef3175bf2277b425d772 0553875cfe0e06afc4b3be733dd2f8c87f760498\n305952d3eb0d4aacd089a2e8a2a04c3551dafc0e 0b3828e5fd51f6c353129bef0bf3a9900f169b5d\naaec97de3ceac3fc4fbf0f47405685e91b7c381f ff384611da719c3217e36758be79af86b6da5b85\n34c2898a7576868846deae7b6c229ada72a13d5f 5c5accd3f33d9b9b417c7518dbdd1b0c4113c8fa\nc997e161878206c6c926887da12a77b376865739 7fb9c945f4cb87cd2c26646f4367695c55ecbad9\nb25cdbcff257b5c7edabfc6dadc1a5cbdef3e482 d6977723bf389cbc038b7f7becbf4dfe59169cbb\n41b0c1469957cfcf8595b0101a6920240cbc510c 61cc79e01494350fdec9fe1b01a03ce7d2728746\n12bc2f944a48b4f7c6d1d620a9731f661fdde537 eee8a6917871dda5c6414aac86f1ca3544726259\nb0b059b250860ab04a9c5de85b79b6a0462f1627 0f50546207b0f1fab0938a2aaff88a2eb12a90e5\na63eeffddae13a65d3e75e891b5559317e66280a 8650eba3cc20333ddce6e03e52d74928609d8a70\n087587ae9f582c409597311dcd5d1f7d9d0e6f76 79d02171a730203d46e51adf4857aa64085cb733\ne476af01b99614c1dccb515d65649a41be322412 bd285ae8fd0d1ad7e148ef4bacdc51fa12ef2cc6\n5fce0e913cfa2edf027ba7ab16c4e0d4b085cde7 2d516d19c13112d2ea7fc8cdb0b4a5b680b13829\n0244d745fde7a37dd68d35f933f1fecf388868fe d074bffb925e656f4ba0d9481b234ed7505859c2\ne3c6173efff6a6c41a69aa461a1b0bc708fc1fc5 29378e2084a6a5063c3ea33d5232184ed2059813\n1b96d7762dde5d1587d7660e09c3dccd62ceb1d2 5badb637bf897481a7543be535abcd001a60e803\nc38859cde157774bcb4cedcceb563a4a7eaa6fcb eea8240eae630aa15a3e352fd72be9492e43a3b5\n486b0f2a176f7edffe444fa80b46332768f36698 31de83ae1133026c755ba16e40824079a07cfd94\n58d0ba21250c37ce2115587c4f307d6888fa38b6 8764b62bf5877fb127ef76b4618b3b6231a215dc\ne371e855538539f9f075ae2ce6ce988adc1847ed af334f4dae8bcf98bb6083dfcb2e68a80f01f9fa\n8c5ae29d4f80d0c1c414774e835d9f614108472f 5daa3c589ff71b5838dafa55e8df6cc62e047c8e\n5705eafdfafa95b7d241c3ca4815bbb85ef964f6 bb4541f98da56f91a1338792cdffce5d77229a23\n030da0bc531fa49f360fd5669d612a6001492cdf 05b83e88b845f621a2cbde98b8d285719a61194b\ne428e33c91274d5d119092e43549df705d69c65d c23e0a94b2be90bd0d63e470b5c1630668a3136c\n73e228e7d9ef472d3004f03fa2073de9abe75f66 f8dd21493d881745ff3859c1903c53992eb92ea9\n8bd4ccbda9120f51686194eba15e40a76c0df945 ab948839437f97dec17eb6675234390945ff62a2\n4bda8cbc767beeb0e5b16830db2304303dcd83ed 6afd8606533f54b846941598aa96dc5d0cae84a9\n01d604992f5431caa8169d4d7c4b49d3d66b8501 aab688965724a3d90f5bf5b78967f9412d29daf8\ne6224f74f0929c48389270688883065429ba9466 0e0556d5c16a6f9b6764af5c2951a938529f9298\nf6ad2af87335f1058223bccc49f095a9107b17fa 6520854b7716264489fe253ddfb8aefdaaa6b8f0\n5a0a1fd539b8fcf88de943f07463d75445657d07 d98b102d302c23eec3989e33ab0747bdb096c5e9\nd194ba7aeeded67565d1f57217aa344c3e0936d9 899f76735d1656dff7b356176e06999cc9f70056\n8d770c384ae6b5d900e675264e2e4e9399457c8c 9775552fabcb76eaba41b30f1cc03cdc459aad86\neeaf65887f28247a69677c791b99faac70b3112a 46b9ac0260c910a4653422111e780ffa14b103f7\nca7c1cf01e8729d7b8fb091fdcd05d503343c94d c06b000829eaac6c1037a5a393db848d266d9d2f\na8acea5cebd817399082831532427b36bd49114d 7a14d72c1c543a5c2542c607bc51aa372581cbd1\n35a0d9c7fd5fc74bf97ff8321e091678f9a3e922 0db8d2f53ad596cfa4b32b08f72977b93b0fce95\n54c02c73f57f9462ab542a93748a13ed9147b768 3be009d76c58cf3a12c016d1d673346cf474482f\nf568db8cc59b1ec39b22e0f88208799e9feb4e17 72b2750c0ec903f338789785ede327ba157fc651\nf166542dccf8442841b21311a67864773988bfe0 9ab6ed59fa07f580372fc4490e28ba5c08ed1ca3\nda7cc0170348c327e4a639441e617d91e14b2b93 a51b17d30487fdd7a3228a205cc94609ebe36928\n099148dab01f1450645307524c4b616106dbcaea a4e34778c13de2a33b6ff870bbaab1ee99c23a2a\ndf49b9446a4c596a2b449a2acca3860e5a9285c6 64c71f2f4fa95028188c2796baa53342948ce573\n51901c8de2d7f61e6f315996d0efaadd77958498 b742ea5eabf4fded67f2c0c99c6f86f1b3e294aa\nd55a7059b30b7fc6d8b3202d7c3a126d097f2c86 1e77a55a50a23035dc02464d8d40572e54f2be82\n3a2da15ed19f2929a3c472717354f5efe654216c 0615d45ee9f359da4a0e1cfae0352276e8cacf13\n34b2e69d0794e17140768bf97bf22569b59551a4 1f54333db97c175ce7556d1d06fae7791dd441d2\n0957eb07ce17a274ac1d3e8d31cd3aa6744bd198 f97c6c247b7e4e6099d8e45455de7440d42e4f58\nd8c5d03688c0627b4c1d43ec4eb843c7f373fdba e1a780e7927e724e29e296d165fff7640adbf81e\na795a3bc90c863d79220bea41d5d6c1ae22fa706 d599b77e8be49ab5b250980fe88348f9b88130a7\n11b45270a2fb75e2ab0887f940f5ba025ad432d8 64cca91ce6daf0ac8c6f8d7a780b78bc16bec470\nf8a07f45d1dc504bfafe0b80139be7ebf854e842 fe41644755163433b4d3c2175eb489f169b55563\n005fda872562d87ad78f4395b402a8408301b0a6 c270907581e30ca8254002526a51d5be22f89f84\neb869031aa715fdbb58d27783a99a9b361c06629 7cd9f97092f7b398197093661a6907ba011b51f8\nee0222803bb9a774114dd82060dd8b0820bc1fa1 2d346c61eb8fefc6c1294597672870c05f1acf24\n59e9977017c04cf2e6cc6755a476700ffb6e6740 95ba59a5590c5e79709d86ed12dedcb1681b721f\n00c60abce09e662219cf857023e81fa79a414547 8c301f1ce313661c6db8c1631b2e4b5ee3c25f51\n46f93b019d68b2a43d54e82b83dd05ee3648fe86 eea444943109685f8d624dc52d770e2ed8d14d8f\n79b75fc1ec130a0063410f7421d217b254d4c529 604f7b9c29a07bfa1ada1920a65d4eff278289a3\ne3b7c87370d53c5f0fd97decf1b401d8f81d8d53 af7adde658b1d1690b7372f6eb02c0fba9c0cb8d\n0c9611302ab9414083f1cc0eb20c5569bb6ea747 25750788a8d232fee45c44eb76ab8364d70fba0d\n1b7a695acbdbeb3f5ab162fe3c4b126f5323d23f ba5785791d557b704b3d413ccc5a69f6ed10ecf0\n481333e3abdbbb0af74a8eee58acadad70f6aace 721f1d7819d1e312a51847f03f972284cb5d8ee9\ncf002c28cc2daa5ddcaa920c24276b6ad4b7a626 a3980efbede352cd377484616afa66a0ea772d3a\n07339361595ea841ef12868cb083118280910656 38ac49717af9c02ab2961930cfd056e76c491760\ncf4743d0efb99951c947bde758c9dff9e97ff97b 3b5c47e4d27827fc93a9b9176f9d6bc185f4ac23\n0fc40b84999cdd6f1267cf590c433fe474d3c03e 183ee5ea1edb011e571440d78b78f707b0b850d3\n075a99b7149de0f1489e781625fef4a8daa99a18 243bc0352968ad67f11467133cb8ba1ad9c8d6c5\n91478be7ee8f6e5d8152a90158b1d94c3b09a58a 47d7f4bd13016ace7bdc17c241febd2661277c8a\n9eaefe81d19f9ae6df8e2d73cfc72243988fe6a2 4408892a6a4b9e25774447caf321e94bf03c5c32\naae471238830e681d4513083ff0e018c71112c65 4d9234c996fcddaaea76fc857e58715550284ed3\n749859d6314ca9c6b1d2cb1fc3483e32a02fd511 ac3e0f2f57a2a538e91e9fbd2d18764936133441\n19508b77ad84c18013e17db773635fbdc870c27f 1734b5d11fa0cd13e8a7e7651af74b8465378fd0\neec53b62f0c45db04045c5f81e475a1133ab476e c0602ece78d4b79a9f87b327b01ccfa46c9b37a8\n5af4ce9cca71e8be9dd8ae76db84d8ee6667c990 32078774be9edf091fe1cb49a972ff69b57f72af\ne0e29de29b89c76e39b8040e12c227c39e25ade3 bf59aa54e486df7093ffc9c151866d657b63665b\nda56b3fa837b240f6378baed47590591a395c50d e5dc74066e679e2f1b6554945289c6ad03e89d92\nc8d6be7469a1ce898f48ee05e01b75041656e675 de5d91ea4e9711be8d5db5d77ebbc2f0c10bd640\ncdbd87a0f0ac815dad236173af7c66c9167a5dc0 adb73eb93e47c5bcd77e84653e5af8300394cc6f\nd03e0512569029351d4fb651e6ccbb2eec0d201f 0268dfb17c7345b50b42aaad7e32f7e819982fec\nfb7a0d9e1ec38c8de393a2594ff2b16eea1263f8 e9549a0a4b03816df344dc66ca5f71220dbde1a4\n07879e84784a2c5a26ab1bc2dc95c159d80d1f88 1fc79a42ab8501d77a29586bba37adb7473b653a\n8bde387df308e2ade3924cdeb90b9f698ba4159f f485adc74c64d7de3d90c81cfc8665956367e7d1\nc054ecce5c715141c37c066541c2670cb7a600d3 7be7a9b78192f7f0ab5a7e4028a269b1e8e96819\n474aad768b23fc6c3c6a6d4925069edc4f57f4ab 7191b882c70f3eae17bd7ff6ad07eae6481bc423\nfcfd368cd37ef8cef35bd01b8c0e334d733477ee d4c9dc6e72a5351564d8ff7456482ff8a2e9004c\n266f5619048fb3bbe23f22973fe19e9a3e78da49 70eee968d2c5df78a8e349f194877fe278159b2a\nae71be590354b46ff89c08c9e5f817d3550bcb60 af57edbe3882fb9fff9315c31f0517bf6d3e71d0\n46b6c291dec27d0d88bdd46e38e863874d104d6a 7dd69c382d26dcfa2f3d70e07b502847e7749606\n0a7fe20eb660b5a50e9678b330fb77628cc7b0aa 6398d34be72bf9a1856d41ffe02bb5fe9688bd28\n8ae570a42c58f326a7f5651efdf09a80d44d99db 45ac4097af166fce4bd834190f3d3872ea62984a\nf9b5bb2a5c1a83e0478f1a154909628a0eac531a cba974f9c5afab56200fdabf871a773cb95065e8\nf3182feea0b1418cfdd620bfe0a1150326bf12b6 da286c8b32734a7c8c4072023f4da75b491dba5f\n2db76e99a1c994ec693fca4f134b6cda0435ef7a 6016ca553dbcc76d8744fc2059b78ad64e555984\nd6ce0312d604fc6fae890a55c371aac0e7b43916 0cb5ea3b7872357fe9548970a5155981376aef9d\n6bf0b76a3049c87a22ac6307bfa1a42707eed26c 2fdf8a23d3da762a2c935b04670e820b6ccf5edf\n1a3aa254a3c6a9722c6f9a060ac249b63f8f34e6 2822d1c414f36a2d86f02530e6c22463d2c85b3f\ndf194b2ab76e7ecb953e0efa01a5609237a259a4 082623a7e35d525ef4499df3ce749868f4a47ae7\nba57b484bbb877c02c47ff0cda2889176b23c01f 32b076e795d644ab473f0d8e1dfa53c772ad90c3\n431e3914e8c796a3ff3b0d4e4f33bf026569779e 45414ea701a41d2148194e89456d16fc6fa507da\n21891ecc2c8cc45190e05a52f21270c4e456d010 565bb47b31ebab1068017699c3376caff3879462\n9fa3475e7575cab4190e9081de2d330845ac22f8 e839cf4198f77bda8a0895644bf161e19210db4d\n7f60c1b1530d3bf4b3cc416d8ff13fd85829b1cc b18a79fdfde70657d84782449c42721a990422e3\ndf359beb59d8c5a4cd575b10bc9c03e262f03996 12b2e5101310d45f8ba8866d9a63a257377940a8\n620f8899ab59e0aec27e92a2c2b954cbec3422bf c79df99a7228a66bc264ecd34ab58bd2e774c1fe\n4ae627429b20ec2c64039e0e599c45989f738470 0e5833f940b4e68c413f80b540cad9345e8b5f20\nc7f9947490ddde8aef869d7f59e2d2114cee6330 8f9a66beb4dbe29c41abcd02b0ebf1605a2817d1\n7189f84b767d18f7c201c3564e005b354d117c58 5f4bf83504cc73284a57a91f25ef1fc3738f8c97\n349e4aa76dfd62029250a0ed62f2b05785d8e4e5 ffcc0b2fd07bb1f0428ab1b995da97c3f6a14b6d\n603177cde96c7220366753a4d33c5029689daf6a bc7404eda2ae3eb3deb75c3b425ac02091ebbe76\n7afee464aef37679f3dd493582feec8bcd4d22ed 9549f059a1ea24caca73ee64ea779aee35d8cf91\nfec08c98fba6b7c6e414f0d0791aa54cf76c9e72 2377161fe6e7f43f3ad45e230bc03568b1e38adc\n95effbb9b76b54ed2e9f598fe3750f0c334cb809 be1d026d69a6c0a3d85d10b033383e6ebeaf1dd1\naeadf396e35d91e66f7ae9515fe714c6d7e7f32f d31649d4778c0ad869d8a4216d83658b9f924c78\nff07015f928610a334856c00f4988ca252e17e9e 66d4ca7c5f4bbb0d14688117ead7b297164e6a2b\n7993a304a96462955154863f23d6b130e78a23ac 64c25c1eed995f18e09463009530e822ac00d3b4\n700fc9ef85d65c316c07b974d3734fceca77b1b2 70ae57e2f83ec5d07524df02c6da9e65fb3a560d\n639dc8b7927704a2411edce2fb25720766473b13 dce7218ffa50d4e8e5ca5fa63f02ea499cff94dc\nd52d1cf4b3d5beb9b66516e6d8cd9dec4d6a8c1b bc47b9e23eded9c46cb062a5ee948ef71710eed7\n82714f1ee1041b98574cdf1e584fdd813439b202 9068616e4a524ee31b3414f2af21f680f2486d52\ndd6982e4f87b7ece43394a9edae957775068a5e5 91182b8648867a3f80df8f55e1488e17208cef3a\n57067a56a3afe7328b2efee8bc78c93ec0a783dc 96cc08b0dfee7c6c3645eef3121c4204609d7abb\nd3abbef1b3b454693df58569a08a18fedd494f8e 48eb4224caf386fa9936afd22d3ea8d9b955c1f5\n0f820c3723fc1ea7644e64ff6c421e75903201c6 e3a2f53a6d4aba4806f45d89a167e3ca79357fc7\n2b24fa326e1a25f1b2b92a580c91078f0a5d3d5c 3bc4b79eb347f873376747f9825161068ce7d1f3\n5017e7ab17055021f819f94bae69014f8c219387 fb09d7f2727180a9c2d181e469461430649d834c\na13309166e1abbc51a6f3aef64762577eb8a117c c52309a3ffe7fe652a37db50c540384c393d9099\n7244c54877168d86dac3ab5823d8682ad05d199f 20d24f7a515a1a207997d92487460f225fb29460\nda162cde65db5ec4198e418292c3f8636bc950d3 667345f2e1a71603155cd6a8a54032e32cd674da\n6052f9373801342bc21a418a9587a0ee876201d5 b1e26aef5907f0f5247e33db9c9ea61d1d95d9b1\ne148bc2aa61606551c1b385ec83ec22b4e7d2eb0 2de2f27d347f8ab03652abc92e1e533875533f69\n0e6dabc24142b5cfd3437590e8ba972fd306caa2 b22cb69a12204a85c43f95cc4d95a4537c1e5e8b\n32dd727cfca5d884c55936f9a2a110feb4bc0064 29ce76c7a400866aa3d00dd6878aa0151ef08443\nd6790466e26d6e61c01bf6727751864921f808ba 359fa2814866a0205dec33cd716882d9946a9eec\nf7888c8bcf69258d6aa5b3cd69cecb3809b71261 0903c366054530423135bd3bb8c928288a909500\ne17368b8d0a261b4ffd6e12a2f133ef404b18b12 3166dce73ce63891949958bbfcdee00f54bc9724\n4ecaecba3726bde061d92cdf30196f16b5d158e9 4a942cfe42d37c0fb050dec15d45b0cca51699f3\n8aedece25cfc64908d70165e9ec39a319170cf13 8567ce9a894b798beba2fae65a99055d166204b2\n150767710fbfa8134ec5d2b032ec17121098acd2 7a3c5f87bd246474abc9a5c8ca4d13aa4ff55aa0\nfd4b6bfe08034647eb063ba5fb7f1030266d8603 2e5995d214162fd9ed3f01ea2c17cfba56f067dc\na12d121e0bc524878efc748927a6b4863a1a519f dbb94bfee78b0279fda8d39ad6ef389600ee93e8\n92c213522248a0d79771ed25270d2a3c640b6ec9 59c0001716c1306fb0b32efaf82104310dfc4800\nfb9510ab5317833859969acb322d8a6663fca424 dd56e3d686fd47cc64b2cc2bd77b95cff66d0fde\n95b8e0a7375ee435f328015427820e069df19f63 f7826ae659148c100f459b6f6d1dcaa2a03c2d8b\nc28efbd389e2220632b6ef984f003205f1b0c6f4 ab05cfd157b7c411ad00d8242a1322eb9670e8fe\n55d7968c0603137ae5393821fb544aa06b361543 deb8d713b038faa1f5bcccf7f846686d1ed0052c\nad5d2519eb34972d36a415b2ff5f5a0f48f00494 be3fbdb1bf68ae4b28a9b0047f801e9f960b16f8\n35c4597792d76201b5c5f9fc0b907e733146919b 0da7a3b1938768b184c3581370480b5042356971\n43e40be9ea3968755a2a01c68748480e19061535 ca5a35c9a248fa67c74291cd61b36953cccafcfd\nea85b7cc8250ddb13e80d6fad59b5f76a59e52ac 5244c6e180cc18eed7480253add6b0cf9258675f\nba706de0c83bdfd3f04f15a25a58708f7ca6b1cc 48d1e34d1874aa59bb0fd535b2c559680d43f8f4\n549e5d49d4e7f60efde2ee712ea35a961057819b 3589154faeed35bf639129d36357f387637c15a5\n48be79a50f49b3327a197fbb9b9559c7ea1e452f add022816f44a825c336c1de87775d350eb604f9\n6ae77e9b1d2117c1a9e68c11718c0de35d261392 297af9545c03e258b44e4f5cb44db9db97ea5108\n8e96d7bc329fff48515a3133a0bfb935e0dae123 bee395209fcb8009490b1f463762024973a03d14\n6b08c0d622c66f3ed082686c580ab34e3b5a30c1 f020115488a3b6549dc07d2bda9042c74f687755\n4d23f88735c909191102535285e153078749aa17 2dc57938708d31ae2c6f686a4d4b3f007cb5ab49\n13652d46281613677c465770bc7d8dd369927f6b b07dd56ec6a867a283970a94fdaf0fa36bcba7f7\n050601be92fe02b6dd1a04f19e68cb673f6f90b3 3bd6a38350c5a4af449317ed92104e818a2c0a97\n5e6b2296ff5b3bd48b774736bb7101210b5cf692 a59572e531204ee1e4193d65444cf5d5c174d519\n16e51f61a2db8e232b19b3589eb5a8831fe8011b 5dd53dc29b3829f1449e83cdc650b88ad4d0d023\n7a00ad9b782e149d17331895742259d6f5173edd e114fddd4be136d2743315778b683947759feaf8\na3bc64ef36ac730dc7b0072c626b49d7820a1532 812a27436360763c2860fac8078e0caf89091d46\n8df3f2774fbfc4ba6e5b0172ad79865f58a02d88 9a596378bb09818e2b62fa43a906c9d6b9cdc820\n1a8ba598f26f88239b32375edf141b1c5a2482f8 f5caab9a614f79f2ae1008a39a92e4e87749d6d4\n4e825fb4498d37a0286ca9d2c7d585df0a5ae033 a0fb614c93221cf26c4660f17acff376cc0a4c48\nf6a0fd8b61d7a714e69df45a262a177750585546 3dc20ffeddb94251b930f1ff985666c250eead85\n79a0545285dc33efc93dfc9023b4b328afb0be89 71a50978b07ddc37964b9e2ffe6427328103be6e\nfda4e9c5383e6e98d3f3b61599f9ea169429860a 8f01eab73173eea74c111809a4d5bdbe9f428f44\n16c74392c3bf7281b77ca5d1229c24b2d3e5a3f8 e2c068f5e6628b2e945c79c629b656fa11b2da97\n82d931f6a1aba743d36a72a7f9ebb4ff8c9d7b73 c2afaaa17703d462e1d059cd19b67376a0ae7a72\n16cf863ef5cc59d2fd1380534b10dc9c9ce6f7bc 2d1ad0bcc35e8fbd87a032e644d07a610ea64702\n99e8f6d9f4725739d348adefc2d60d3dacc1ad04 103dbdf814ea48a57a449774b9a7740ee13a9886\ncf57299eb66906e475ad5fadf12d6ab16b44d2a2 46de750bf8cead9d72fc07d6ae092723fa740ce7\n3631bf9476e0fe535a01aaeff681c6b9cc0b0421 47dc656c7586bc2574d585e271a21bcdb5c3f2cd\ne9c755a1888a2a1d4a2de47ffb01808ee4d4dd6c 5770ccc39a6bccff8edbd223f07df5edc1edf05c\nfa9a1847bb00e2c71e4c8a1608744a32df6cf959 72bcd97b25489730da5a28a8841583875657386a\n1d587d105b4dac981fb73b01355d46d79df6b9ff 6e32b53e6cd4dfed784809851d5e6afb9bce94d8\nea706956ce1c8b705ff83637b581a5d39aa604b5 4347da0a1b73bfb33eb64d38f55550890fa37d9a\ne9cc11980e8f96830214b401f7f4af9524609175 393658383717fcefa49c7d03ff07092e2c7e5e2b\nbe62393e6a88d5f408b2b1ba33b13d5a42eba88c 3b02e96795a3e49cccff44169a9f102d2d4aae2f\n349928b4eff7a86b670474e9fb920eac294534bf f37ce591bf5c8b73fd471d2403e1f846aa93ad45\n3f16a9a00144e0bf43da02189227f3111c7e6933 2c9808b128f6be9924b6708ab19dfb7459131ced\nb2534ccf077826d349d5882cf9124c111f8dcc31 fb32bda5a81f1c6bab96d7516c58c1df1bb80928\nc0fa4ae29de2ae86806a12660f0a679ff54cc15d d62c8673f7f7b421a2c83373eddb6681fbe30111\n9da888100f2f0fe731f8a1d0a38e45ccc4d9a4e2 2536505cfd76d56657dd658fad4ed71d38d83da1\nd066c91275c9bc4b7ecf17eb72401b7416e3bcd6 a161cc03383538d9eb2ceef9335537f9aa5be77f\n3220e8a461fb98b1ee61044be58cc7f1846e5618 55d9905f8dd5989dd8f5b3df71281dde3e341354\n9b3f4cf67b297f131b5b5b4212e77e19f1b3580a a38d3898cb8987cfc02371ca2f89c7c2c2988451\nd362dcf9640cf6e3b9950b43bf4aa6baa1a6484f be2de953186a098d104aa4cf0b0ff6ff7145e409\n464a6887fd3ad68b4a389cf07f3827e11294da9a f1b3618b113e740175e417c528940e625f65cf33\n1a83d8ae93867f9b636e8a1da5e50bdc26ce804a a588e0b9688b1bd618207b770e74a0b622ad166b\n6b4cd4775ab6f3a000233f150138a33c5501a095 fa18c74c5b7067654b4e15bcef1fd6dd409c2d16\n4b34cd09cbcce6bb9a56f9054460d142b0a25e5c a8fdd995273485391702a21c168f442c54e0f387\n1341ccc1ee08020b098f64911fb4af77ca640ec4 de91a98e30dfbdd2ba9f6a75ef57c982c8fd5396\nae515139452740a78970b09a4f5577f6d312d6f8 1178f1d3fa858dbcaa365a6ce6f3b22215e9360a\n331bd3bb4e38bbc9dc4966cd76c9ea720afd5b8e 5e73b6666f860938034fe02c2a5403d08928bad6\n41179a0d5897ababdd2ffb68be92d33f10d1933f 45318a14832036835185db2b6ea8017a7461906a\nf7483fa7764a42bb7e3270d7d364bfc1f0080e98 5fd6141a5d5625c8208b30c21be5d3a14aae8725\nfa2eada514013751709bac780e94ff7be2d1b88d c592147bf87c0e4d1a5519cb22ae2afb0c631834\n571db116e42adf8d18c48a2253eddbf2216203aa 2989026cedbf6b92038096a6994b10052c8d452b\nf2e2811f15f5bfdf7820d8ae4f0a63ff8ed79c9e a2d5559e0466c05dadbb625693d4a09ffa6b33e5\nc98156fc289efb457fb030c08c99fb87bbdc5db0 74c83959a938c7686e970a92c6775fadfd25e92e\n6b4fd0b374c06333cc5282e18f293599e52f5ca7 491e5abe350df22174b10f8a6e05b094d7ac6215\na00574073ae72cd6b98cc6018da5fb81fd1e6e1e 0c13a931bf62383f886a4b6ab00d8c1fcef51c05\nefea18bd9e36df1e6acd42d4e1512325c29f4210 9149f3b8b2fb2e76a3aa6c0c92dd0149d44d6488\n48987a12a51221ff8018d94f063aa169360ea79c 1ea1b5d94f2b5d75ca2b33e38e76ffb562523037\nc3fcb102c82120ae3404c41c717a3917570d2ad4 b84701cead11e67a1e620a6e7e4babe6ad84abd8\nc9f2cb297c060813fa62e790244852254bb7e62e 15a7e33ef7c0ddadb7ed35b2cffc51c95be69476\n153b13499f7e1fb8627e5619df5dc53a24743372 4176b0aebe0468f48262cc62f5309f8b0f51112e\n09d8571adf431028d75d7e81d993ad3a24aade69 a64e0e8a31105f00b939d044245d01526b8dda5f\n488ed04772dfaae9943f4539ca8cc8f8ffc5e36d a68acf4abc55042f5580425367d04dbab8b60b85\nd06af1c409b49271a0e15ae99c116aad35d05954 b21a0aedc90d6f8e1438009efd58ce66867fedb4\n26ab635ad8f2a5100a309310621fcafb25e143f6 3f8e2bd44e1fb49280e4ffd3718a4d6ac6ac3146\n179a130c6af66c5a0f19c37b68e1ae819cf9d78e 307aa24c67b30094fcf1db96c59a10e302da8486\na8d8cd4112a7e7ac09e3a43cb94ff1e7d5933227 aad68ce894a86690200361922ecb73f07764e287\n004db2c56ca8b175d2d673bdeb71c0742c44626f 8e22bad33b9e63542c14e46f10a8d8c7435ee042\nb429b44a5dbad27dbc96b40194f6213e6cdb8234 b66389c2feccdb5729bec5a76658a78489dd4c84\na54bd5c3220b7f3d2e19644430eedc561b4be8bd 6aff6229c37f68e98395b8bfabb2075e76e69782\nd61128c3237c436dbe364825816d14e76c06d32b f523035c1a9aa19d3edf15c52871c1af57d7d8cc\n6e96e31018b0bf5b54f1dd79f9a0fcdb78a161fe c15ea487f74e32779197ab2f9ababa87ce0d5926\na579c54453e6befd1bd93a185974f1d808c9f363 8f382e7d3fc70f0e81f4c3f088e798512eb969a9\n789f0769961ebac01d5d87343aa6361c86ef2626 2cd8e507ef7c0d53f903de6c316ea871ee173e9f\n6fc65e4fe68ee6d9ae0cfa3370a0cfbc295c7e7c 48ae6ae4068a74dab0439f9a74957ce7d0d15e90\nb44ecf01de0cde5ef006cc5bfe73dfe1736c0b25 78548c1aa81b4514d745a6e8e876f433af9ba257\naffe59ede5ced6dbf7da9291cc061044b02e00a4 8e97908475cf10e3235ea16a06be3fff33bdc743\n590419e815cb7d5707e0884331418b651ecbe5fc 7e4d6dc1c1814b36c928bcc8de985480bb1e9384\nf351dd6b1e91e90250f32428d2dc829763f8fd00 1580481b6896dd62e05a2b32d1ed575377511fa1\n8bf01f3210df657dba6f1ba56ad2406e215df3aa 96b6aedbdd5f499104c83bbfa740a18b344a23c7\nd6aef213b26272371764f26821141204aa948d01 ad9e1ca427c7a4092b0a8e93574f5b7024b895b4\nf84f71f2f192101bca939446ee4cf782f63bc433 4bd8f02705234c52521dc6b2f3d25764b2eb17e7\n8a183abebf66f18448a4fd8632625d3be988cbf2 1c57640a729cc2d75ea85b3c112d646b472e29b2\n83b017daaf3d7bca5d6b4afa2ed9d5c326992d86 eee4ffd4b9ab2a8b0a04c1b6e1d22d69b11b469c\n3c641b27437a51546185b8a9fd997ddcbaa799d1 100a25749a753f94c7b6bba1620a40157a48fbb2\n19ff5fafccf2228b2c93acccec443e3df16c08c3 a8d0ead8fa161d9945666115d8a302a04ff465ca\n4499af72c35aef253d2d64db071c45bf05e4f133 437648360461f32aadf952a5b0da2fbe04fe0451\na174401d864b6860a6e13147f87373571b735b76 ca154a53ac6ef0fa7a4c0e06e1f7af36b15352fa\n1af58e457752a6c7f5cbf0a54dad0f082057a398 36b77ff107f2c4897a632fecc9667d96c5a7cf3a\n972d3bef526e6f7d74c490ac008397e92fc737e0 47edaf7b157d5d010d18ee764ce3251fc755aef6\n0692cdeae90b7eedc28a64e3e922a19c83984b59 103b5df2262a8aaa87c18e669d877cd9ae6b19cc\nfc521b68a85e5783c7f5d9e47b128ddbdc3b49c7 ec3e0562148015cb1010fd61de7f9447cee3ee00\nbeed5187c0ad265363b6176f6b825945380656d3 03aa19967126db5d1cb035b3d5ed5426d8ece2b0\n1d1b34f9d56a50b886d419184ffa1b1c95a5b827 b7763aa7ec3559ef9000633cfce6aeb8d76b7684\nde7e5ff030c07b57545bf6284473014cbfbae09b 5bd98ec60d57d40a0ae464523ddb3ce1a7c52393\n28c87e3af00eb0730417cdac1b17183206506a95 ff8049bf0aed8cb419e5b7f51484853517858400\n561a9ab51ad1bbf54ea1accc6b27c4eeb17b393d 0eea2ecb895b0630d3cd5f2942a4cb9e37f47360\nb59f3b8f67cf6f4dcdd82f5c7bde8610178b6e97 0e793f8d9347a91f644de59373c2a52677497c1f\nddded4a8c85252d529af1aae65ce5eb773957580 045c74a3a0e4dad244d9cd12962ed80de7d374e8\n73f67bd0b2e990a525dbc04598ab07680faf7a86 cbb9cb52f88bff5e9850c538931f7d3fca602ba6\n8f4e98c643c86e46e9569ffe0d56a6f84fd32bac 140e5caae95aff43e594217d5c5aed7f55198e9e\n4e9273db277d5d6322a24c6c236d148c31ceb3e4 26805b2e90503746a6d0e8a9479ec42c7c58cd23\n70f7c31de183836ee36346e35ba3566d6871d18f ff2078a9c738a92b30cebd86f4c44005d3bac226\n9c00b58221751125cff134e8fb8a5b0fefcf018c b2f9c3aac6a6c7f690a863024e0ef4f4060f16ca\n4c841719f44fb3c98963a3d6a63950e8531eff77 3e2f34cf031278ddb6c82e5d4bfdfed5f55ce7d8\n5d7a1a2e02d70dec98d1418d32f214bea66b2f1a fa3e74b3bb74fab38f440014617598b2948786cd\nbceb9127b9bf8b41b0b94df0d33213508e12c8de ed6d3125ec50d2afa10731ca7add283a0324d3c1\n9a41c15ce68766cfb9eba51321fbf9e1d2428a52 1a60c2643480b2970cb9d7682d91f6ab7c58f177\n0d1e87c923b97b627e23bb664832c664e2f4a7a5 a3df3c195f3678d3a093d8642b4e540075178978\n23948c22503f0afe90337a6ff0db3fa639170982 efc1e804feaae65e4ec6fcde464e14d50b1543c3\n4a2d351b95941a8cd2efe94eecfb688a3bc5058a 377820f2d84f7d95877dc3d5f5ff1a67dd757da6\n237f5429dd94c31ec8c426a1da22877cd9996ba2 4fbeeaf6d5021f74296d6c20b153bd323329a906\n8e00ba8fdc253a907009c7b8b02ee9c9ea5cfde9 d4ff143442a18d85fe726dc8a7111e6f66291998\n4d392ed0233e2289b6661c28d68f228a18aaa953 1ea9e05958d1e2b45d8d32108d2d2b08b039bbdf\n78c0acb47af187a08f33b02eab0df80cf3af963f 4a45bd03fff4dadbec28f9b053acfc900898b467\n776ccc7427da9c0e3f54f58756758feb43c35739 1bec96d8753cf82b0d844a4c114a1e84eaf7cf78\n4fbfd9f63ef17060409a752a082d30a156a651e8 fa1e2ead34dd1837d75b74c08fb7feba1d9a99f9\nf3216f7d6b4c71650b634267de2e6009159104a4 c447514d493a983be99164682dd42058c0af38b2\n79f30afd5f51533d9fbb4d8ffd343fa8593b0074 d28423e46dcfc7fb7d3dbdf0e11845165b7c742f\nc5bc75c18d42f673f8194a7d9695110a4d9a769f d6ff42e919ec30378f72812983392c311fdfff7a\n54c788d7ee4b932c99ad2b183d7adad524a81779 09dc20278e6bd2f4073cb29dd22e268778bc1325\neaa74f601e50a933a10c05c4a87f5f010c2cc577 eaa38b9eb311596dfe9bfb25af4322dbc754777b\n87fc188f77a62735998e2273f1ce569a4cfcf765 9835331034e91cbdcf9060cd50a60ef7a93ca381\neea8b2814106f65278aa4d19bb78448bdca48ba6 fa170e04f543177418bfa2c7ce2283590040dcea\n410260ce37b6a68f7aac03b6af618594b902d61a 0d94cb0255135457d1081514d02d14f0c617e58d\n6d523c87642282332a010cc5670e42090e2894de 29574413b55ae2faf96aca9379058519d49a21ac\ndb71cab80baf849916c0859151f497b1d4dfcba7 1257dd8dcbca565b170fbea82f5211faaae5dbeb\n085dee7d53b120b7fbefca8006056c021d0e44b7 91fb646337b42142b3d45b7ff57b66f3ea29d1fe\n960a752076c4e6b78367d1ff2cc90a7de4d2665a 1efdac974a033700c733a53e457c77ba5ecb83ff\n2eefc4625227b1e9a7a188857f1eea79c4cf6063 362eacd141fd0ec912bf7177126d26b5514ab33e\nf8ea621bc824ceec56e1be057100b5805ae6e6f4 c51241bb68da1f0cad3927d9a2072e3bd3df42d9\nfdf5e9783078eabde02f8af52634c1a41c254fd9 e75e8619b88e14a250f0a1091125e35fbc911df0\n4996790a0f037d4483ba04d6806dd6e924632e1f 551120e2e3701d3e654cc736979bf900f5b6f424\n944cb19f14193e8781c89518013352650d17ab6d 05eb1e5700868cce9c8e1a1259c2f49901fe3596\nd4b4f112680d6430126b804c2928e509f6efce26 7f8c6fd27343ac1747ef6693dd4c1f8caf372213\n73eacb02c54eebeade624ae4f04032f65c839b34 ae906516af2050b81b430ee9f296edac64550f6f\n31dc1be6035cf2546cbb34554907ed00d8e58da4 f4a5e56c605e8b7369f465fbcce330c44791e20b\ncf8ba3a76498cdc42aa8feffc72a4a1eba7eb62d d648bf6ce115249762dfc6e311382f90bd5180fb\nc108470322bbdadcc57fa382e77d70e9b228b4d2 86ed00aeb07fba29ac077005168aa33e7abf65da\n26ab2f30a8280dd7bedf6e12510f5f57bd8344d3 19a8ea29791e7df06bde3f470391471fb6b044db\n64c0150ba6ec8770d2ed5297759b5ece3a87dbd4 daad54175dcbcb9a3fa39d4b73c60038846c6966\n4fe962252fe712e39b35a0477a96b5b3c3e1ee6a aedac66de3e7a9093578a002eb39d8430d6478f3\n876584a9c311fa50c8632b1f64bdd456ab62f69e b40c5d3d77ddc21f17ed55974e02d3cdbb846f62\n971375d1e2118df69c4f396930b778636179560e 4cc764f2c0e912773f00e570bd8af876bf46419c\n01ed2732d60f388886ac255dc0bd14ab8885ddf3 c109e51064ddc0c943ada8eefc2c3197c5c1cdbf\n5d26acd3f39fe05162b9cbd80c1926a09e65b0f0 35f197f0e0c7467344380dbb78ef13d8efb3866c\nf75dd28c8672a0e1f4540bf8a98dccc196e26a16 03dd269cbdf7fe7be8d7c314851749d03c5255db\nb182ecf2fc84734bd4554f64dd7976d1b5c28665 295e3c12914d95a8c77b0ec23a64857f77d6d7f9\na55409e8f9567c77d0d1535144feaf5851c387f5 12ba61f700ce6e7d3d2a0429833e6a07108200c6\n705094fcba28a451516725afa682397f391d27fc 96bab0996d0f47b304d16b961570e423e138435b\nd111debeedd7898a74a5fc051d0e3afe1bcf46e1 c0509b35c2725a634add66e21a7d43916885ae8e\n78d3a3295c0f80b7838a67fb890e4dfaccdbedf9 e7338ab7d0a211d57605c51c393957154893c0d1\n9d13a192c5e803791219c279d04ee807932441d7 0c7d19e84c5af538d1f7a70e8c16378ac8b65606\n53aa5760185e322d51db5f61d548ed1457ed98d7 87f0130deba529e7dbf3376d515793a24ae5935a\n22d6be94b03754dfeb0a870d769194585643fba5 64d94bdf6e95ebb2a30a7b5b0e9d36bf859dc831\n428781520a46c5fdea21919710b6dd3770eef746 362217f277493fbeb6acb08ea7df39326dfd82bd\n5e1e927d3335cb14145873fb971ff09974bd7132 17db1c3afcd5188d99c5fad49dbba08f0873a811\n4029ad30b72803563156cc1b09026ac97c927f14 67df35038a5a1a372a1b67a8ddc70f8208177543\nee2c661d008e194bfa1130b7b2eedce081468d48 cfb7e8a492f8afc1afc786540e7b87da3f267013\n778ad6fb300a06009336401a0c92e8c20ea0559c c7be074cff3470d9a5cedbe0dc0f19867c9d0380\n59d2fba593fa9b043535fa5b2f15410d35d9f2e1 f0ae952f9d2f2a3710931696a08b59c6b3bcce9c\ne4db03206768bc8bed56f3ffcea242be237c75d1 57c022d0d5a99b8948b99566f553c6da7fa59bd3\na276494fadbd4dabc3aeeaa4ee1c374fa68cdfff 4578ab72e42822e4a571aa0e3ca50542c61196b7\nca47506dd35ed737b3ad201d906e354ea7dacd57 a040916c1c0316c6965e5126bca99e6d3896bfd5\n00bfd27905cf29a803f6188d39c021b58b606997 64c0c063968724c106d56e9c5c9b002128cec479\n5140a43f8d567b435978e42a5a233c41b7ce33e7 996cf6a8ea9613102fee53db70d6def5dcee3c5f\n8af3bf5e495c81a862c12c7d5e9444f9b1dbde53 537e0aecc465c2530ec9753ec179c1ac682b120a\nbe3d4550bde3e977375c12fd97095dccb4e8cc46 a3b6c9216f2629bdc47d6a3fdf72812373864571\nc02a33c308ddecc7070d90c548ef4000266b4fcc 176deb8195d6538be4c07ff19e29c197a80a1f0d\n1c684e7916570ad2dbcd0b3037d8c49117aaa5d1 ef5794dbd82a96ee8db40492791dafb81c801b6d\na49f0bc85deb5eefa5d83ac63d4b3f7b543fc7ad ee84b4e3b2c675833d1d142447ccabf2cb428ca1\ne48f801011c2bc3d6e879ce9f5d6ec77129f2759 146e29ebab76c350b97372d7f66ad55afb1db20f\nf3923b440470dfd599eee8c7068b2f37e344eacb a497676d0e66f47c9a23b62b5cd44f7c9f2db53c\n72d425fd850ded1f060fe0b9f4dd2eced93b60ee 8cf056dd9dd8a7dcb611068350076b127e7372e2\n2460262f7f393da8be2e238385bea0cb8dfd24f5 61bdaa960f7c017871a7a8be60991bada12d6b9e\n859b36cfa8792d12a06d81416a1d81a37d88618e 639a823afa9511608d3f0e04dc291699f862e910\n3ef64f05971c54d27533e4a541595e5aad45bc81 7e5686f703f7dfe899ba6dea161c6bddb9017c2b\n6dbf9aa4aa63673021c230ae134d809a26fec68c 10a166b55880f7c16ddd8721009997bd3313e9dc\n8637f2702eee3be1b1563955dfdd52918448f0cb 400e35ab9da4978a1baeb25460ff24c3da018cfd\na7be701abfb5a5fa3005836ccd9ae69bf4b9ec61 f39a80f1f241a152567421277d0bfacf6187fbea\n804e5d0a872e54d4b3921409ec40a0b86d9587bd 119d9210c24cc8b1d61b22664de78ef6f2f00186\n446e1d8e3e118ac1fbcfb35f644788b1c8ff28a1 ea0326ddb4aa1399bad871914a1d317559051f20\naf02c8618b1adc3db883c198e15a5afe5d25c89b 7317f77487733286780f8ad49e17a975368184f8\n2e49ef5255cdc4e3e0a4ac70f56bc2597f0c106b a81770f3fd63a5aa41a585b9d0d42246e706bd86\n9a7baa71b814f4883a485d7373f843296949ceed 01a367fbdada125f1e761622e7c97b780f8e91ba\n6cfd8e609ba77f4fab6466cc9112b702c12b92c1 13f04a8f0173312f3ff2c492f84ad94617cce208\n59d5a6ff050c25c819d513d051740d3330bbcca7 631133f3c54b078d50f376361abaf5221e4babfe\n2c3abf3e0c4760a03292a60dee41869797fd8fac 089d3f3ec633e0746249f5196c530b1d115ca482\n6737f029d77a82f76f46b084677ccc349763eb1c 3d5e5f982157422ba588b3542b9550d9d29eb109\n235ae45f477ac9289cd999218917f19a93953789 2bed33866c59a591176c4b021a4a3c20fe0d2030\nb7d826fe690d9007ec7c28d26591c59e2c206f0f f49acfb35c23d0f59c5dad65697a48b7c955e9de\n23d7741540948020b177a2f986477961d29d7626 677992871d863436d91572eba43bc989114b44ea\n76e191082fa5973076860680732f1ea64bfe0586 4675afa8198bff970feada5161e5ea24641bccba\n56785cdb69c36325bd85f7f49ae78e47a47c1ce3 7ca6ca6cc0a669cff35b21a7874de00982e91b78\n9380bee689d65731e2613f6b87e2b5f00e62b9c8 7886b94198fd5554427e27dabbcc53d930a4396e\n132767e00e3b53425968e26e72fb9f3b06cb9b47 908aac70c894772b6e142df0787d0349f859316c\n808bc48c7effc3ecf1172f717fb61f355bffcb98 8735c6cf4efb28d8934f333adf38446e22ee7e59\neb9d214b04b108ba77b2bb4710abac4df84340fc 9a8e83b58e38bad25aee47ac71f4050d13e6cfdb\n8b55c0ff9bd45457384fcd556854296111aa6a89 7d72b20316298467de35943dc0487b2b717f87bc\n2627f02e049eddd0fd4a0460eb16caf3213a23b3 81fc02d5c847b112c243ecfe8e45bf6dd3d34519\n2087af399896f19d29f968836d712fe90bd28383 8288bb5b8498f45e43ae65ba515cc01353d1655d\n08eaf8c0338cdb22de9debb45e07ab60d4662121 4397c78769180aa011b865a8cd9a73c9aab30f48\n3d318832267ec4cfbad6c99229463d8d32359830 3aebc7769fc4e724ec4215f09bd3922b36c00ab7\n4291a187ef9c2696485c3381cc48c83d3ad51b0d 6619d97eabe75c8ae71652747422290380d3b1a8\nba7b85bb05692c8e27d8e7ef80bafc598fb533d7 207e001aaac87e950a62614809ccae3468c31a8d\na82ef1ca897dcc71be0033c6b09e620b47bfd290 ed7d6b122c8fc5852305a8134f041077365b7cb0\nb460bb425878bbf5386d88c20a60e003818e9bc8 78337a0e8dfd772c64cce60703e6dc50fc07e850\n669d62bab8ea386b0ad83abab6b9d10bf59bc51f 4d8deffdac68909f0b63abff25888a4d3feca852\n1f1852e7488d00872f82f34a2ea171c468c32903 2a8915b5c477fa4d7c712536be0b27b3771368fa\nc5d14f723a91a41185f49b6c9cf52b8c29470b98 f1e9ecef877c9da409c50469694b63c88212bbca\n481f41ed4b94f12b37b3c9325f1c945cfec24373 30a9db4097a74ec974158369ed02acf5ce124a3d\nc51fe3588bedfd0d468fb49431e33ef609d05b4f 303c9f26b09af1fdcb041403a1dab159e156e41c\n47c740517b942424dd6bad46964968af8b6b5550 dda71b5ae1226d05305182c97f642d277ff7d4e9\n83251289671ee6b8dba9190ca029ee50d1be0b26 7f9af7fb46f50bcb44d89891c5f199ad2bb9efdb\ndc0967254830261dd04efbc659b4b14aeae250e1 fcc1cf06ab233523e305bf9135721678f148626b\nca3f664264a026080336c0d60cb2e350bf0fa08a 348366385d29c79efa25da87768ccf331839d5d2\n6e6c1af4e076c3f2837a8975479b25c665ff8d84 587abfa53769bf005cd07a18b4b04312396337f8\n3ed6288e2f8094faf513a1254638ab9298c2014b dc1d93534fd7c6f3ea75df69b080d25b36eea84a\na652f3174a4c07d54341cd021145efc92440e199 580fc98f1ea0b6012b34d7e503785ca7bf9db8ce\n78ae7f4a3803c28c376d2c4fa70930dbd5b50cae 7a4e9dc41638f0fc3d7e07b12cec7790e8b054cc\nd3c7fbb51bec3554f954a06a8600d1641c388a56 4982181c8513ef510ace81f51cdf101128ad3e70\nb5e997638fa267482906252d95898bdb44a922c9 fdfa1dd9746b51924a1ff8e4aa763764d9b22771\n83d2033028ada0127d026e7dfd9a46b4790e19f8 c3a5f644189f22cbfeaa529c7354463817b2f6c7\n87a7ec9c2eb9b4d4f3d136acb994637b50c7e4a7 14ea0331743d07e80c2e5be26d258b4e652ebbf4\n3ce46c882d057756c98ebed4cd25ad941ce2ddea b1397dc834ff7b72b3f0a0203d5fa282fa89dc3a\nad941d741838236fec442a6644bc1fdaa94546a6 02e5b831161be4a6a6ed348639ba514a3c483fbc\nb4a34b2c0bc444584b5a12914e95d10efe14fd04 831aefe87fb33e5bcca8e1d30b02aad69846dad3\nbb9d0acd9c6640cea2f42e00875b15cb7fd6d612 10dc31fcfa34b41b71abb0cc3ed266f122ce6d98\n485e29b79230f4b7f900a9bb45520b4a010f7682 21a5c1f06b68488eb97526a10125752292b4cfc8\nce33d44c2a59d0a5ed3065cfbe31e47b240ded11 643e2a75cc97eeb11ca85239284516c2c1839cc3\n39964ffe21cbbe90216bbe99600bb035164303bd fe5c3d6fb63b7ef48ab725a2332b28e1e62246a7\nc6cbb77732c2f53dc0ae5ef418dc6245553e7340 595067806ac9d14db8f408db2bc0f78665bb0657\n2e8c43f46fe6e99424bf32e33c3a6d00e863d0ec c9266faaefbe259c128d6762f64320101443d3d8\n8f24d4ec88056e7c7ec07020488b679ad62b0cfb 3874c4ba383c269f31054234bf8da10e8ea1c5a2\n9d591fc6ad7c83868a12810a8d69b76816f5264e 7ea871b1be3d5b51cbf4c497a48d44a63c751e7e\n704e03d94faa8733bfa96b6ef1de2b796db06532 9fb88c5bbcf78b5edd26dabf93fd82459dd926d8\na68bb98fc2d545c4223e55aef1485b8dd571b054 304b16fc3ecd7a5e45573ace10e22008e79e9016\nb3a03eca78c3b4f5b6be6b41856771c108b85e31 84dec7c33a0d840c53e967389fd4dbf0f1dc395a\nd69500fe4b725a6c0642b8879bd511e4156f6fe3 37c18c0ffdd282010dfd85f79fdd47713b90c698\n5b2a70e4f8c1b32b086c93ffede4c93d9e1b3f08 34402017133c0b19eaf2594888e19012fba241c9\nd43bc071c5561ff810274c8866289760633a6ce7 698b988b9eb93d5c8b4a8ca3be83b47dd42009f8\n370099cb4c7be58d665195c5e202919200a032c9 23488f6ee9af1cc986ddbd53e70e21369905a238\n7d7e9b7a360aa17bc62f08bf4eb19bfde9f2564c 810519f1b2519d51243ae02974c2f826d0b51aab\nd2610ce264e2447589f80ef1ab7cf2b5d689cfea 0f0883dd16f8f712ea6d45045a14facabf3aea43\n7c65b85e45e56880060f3d75d0adfbd3c886da7b 27ff77acf5c5dd8e2a78c1358cc5ee224202ab45\n8cd318add2f04cf85c30f8149619e5cd157141f0 ec4b24f7f9694badc8ab1cd1c75b99c0245a272c\n86ee9a86834a38036eb74419f434e480506408b0 0780d4dbca36ed608a886d3eda5bafd10a86c843\n66c0ff43eefb51dc1981f25c1ad550e0e8c54f93 74918acc09c80b2cc234b3ef90c9a41dcb68d7a2\n07a455786fd872d1e25a90ec3f78799aa9b2ea61 78d29da6b75a7ce7ded03c2f92ccb9e36804986e\n46880fb6aaef1c15f8bbe4c76bbbeace4349030b dadae800c1e4a990e225a3328f1e098df2b7183f\nb8b9d421cb3715e057d296be2e2b30d343cc527c d93a207295ef668e196771306c834bf53ea57120\n185d48dbcdd5971558bb8bd4e0eeab84c6436b28 ad93a9eaa75ddec7ca70b918ac51aa76e19e8f1f\n8066106c5bb0e8f5c071ba771991bda19425ded7 2d0bf3b2ab41fbc2333932968c5ab8d5c770e1b0\n429903fbe4ead823c2ad6fda0ac8efcd8613e496 1fbe4e12ea0e724f4a46ef436c240bea5ea37480\ne44f34773b01462a82c8f2a80854fcc311e7301d f91be9279eff5c06ce8c412eb1111deda2c43f42\n4ddedb13d9cec8f9d38dace5892287a3909bea76 cba3fa07892c0196c7b29348c9bf04f33e7416a5\n30776179b51aeb38498bc29cb7da36a653953d67 65d7233fcf443d39024e8da412f7408e2663745a\ndb0a62303b3b396856f027be3a35cb99cd892df2 d3a718e8ba57820f3281afe725ab944b011d793b\n71b1015c0a18768245f378c632ac4c3b2ac7734a 2a4f8145580a1fa0bac790291cb01ecb2d465af6\n96fdba7c09822bc6c4f61c5cfd9f2fd3971c67b8 f7e796899260929ae918fab51cd0fb9d65444c38\n582591751d3f662c28e215c95f40659b3034d46d 8a37e17ada1861458eb15ff55a0be3433d7b2918\n82578a9ce584d73a48f0a6e8f09e1a82103e72b7 9f750482921e67ce73814aaa880b82fca19d8f26\na9c4b8fccaf5b5f6a37e9c3dc1fba41494728ef8 285bf97ee55220223fc42a3b42a1aef6001c1b2b\n544d79e5b03da4d1ab57803d1c5277aac0f8c7a0 ca3a5630191e6b83a51a6225396aab0e92ecf209\n052152082967147c97c52152192819dd6e5d1a39 7d0ae383ee14ac1fb307c8b539b6a85c115b1896\nba28f3ee5a567b2d9ace51138dfcc69101aff78d 17c95ac5b406df9b4945e6622de232185ef5b980\ncdf0a003baab218599687fbafd4f19d3d24024de f6ec61ca38e60d394a32fae271cf22314c73f58f\n5aa217c33ff2ca76829dc7372ea5a251e8b46e02 75c89a07c1465813e6c77af424de9cb18278cbb1\n831b3cff2c6cabd34e85a8b7375a4d293ebe6589 80a1928a0121869af936dfc8e31bc51a8c0c6050\nce082098a19ad36d3f40eb7dbbdd48c45bfd83fc 9b7ee426231b48dd5a92c25228b2e51b16ba2047\n13c0c7f092d1ef48e53a163d4a3031b0b1bff65c a00d3881489bfec67867e57c62d687870fbde9cf\nc743dfc7775b4bc15217728e490309a6a3effa1d 092135cfd20a72d2f8cbba98d9d1d2dbbdb426d5\n0b207759e5bc4bf5806c904dda08683803408fdf cb9fb31b668445c755d21a60cd81c67e499c00d1\n5d8bb819f760a8e2c54493e358b1bd97b761c1d2 e85ca5ad50149fcb2d3313c358efbd06336b5809\n2e032a83cb260e109590699e09a1d9570ad74704 b8fbc9a3929338f965b327f481cc1d357d725003\n22f95b1ecd6f58fead044d49ef30d531b323c6ba 5b60ec12fa27545bde471b6df04f24770f4912c4\n307ad51fe7bc1a26a455ab9a3d85782dd1594c7e 5c9c677fcf4ad31e3f780fedb2c57f7707713437\nbd3240fcaf929287cac701e1721c5471666382af aecc57ebe53de0067c60ad5b3f1629018a0d517f\n32963aa4984fc25db00012a62ba0710b8c152d1d 3e1ff935db01b01a11697e0db80a38f0fb93b877\n3346692bee762637f8ad8f9016204576dbb688b9 f8d34466c2ddb5967d607742a35a918fff9f6c23\nd08cb8dcec4efbca4219bd90a7a7b103090c0251 63f090d0d0bc4f5a8ef2a0aba30eb26d395f4187\nea06b1fdd2aa669f0e24a4272a7ea9b9f25c6750 6c33307f5e6f72b061af6944b57a0ad5d90becaf\n2e9450a350d33fe1b0048bba28e300952e658da2 adb51cdc88620b495644409ee460574ebc19bf89\n4dccc04d0b1870ec7bcf8db69078aa0da997e2f1 48574afcc2f98e1db66fe9b60ec639d31fac1da8\nf1bc2b7a9da6e1dd12869a23fffcb72664ba3bef 3ee740361e13b2360137699dcc17e131a9627b21\n9b7f0d63ee5c4e87aa672deebdca33eae1f73f67 712f73dfcf1964aca5b9a6847324483a6a9bbf42\nef6714f7a7ef5321b06d86ebd99534a979569177 3405dc8cb9c6f9dd2172ed4789256fa0e89d1d79\n676a39775e2eccdb6c4d613dc3b802e3eac71c1d 086bdd6514db8dc9c9c02d594bba836bb0930585\nf220dbedde9f821de61af51e78d8e87b9ca4e5c6 088570d3d94ffbd87ca7c90e4113e6f4aa1d7498\n4c2e86dfcfa280387b36487f0c63a7de942f20eb dc871095f74867c51f5cf34a700ca57008ea0d87\n1c6e89c9c86040d1c18f555a4c8571857b1e5a77 62f67cb358ad3a149888f3279f83e1dd0ad97115\n39235583618a981b86b9b072ae8fc7b365e9d9db 5ef4db8fad4622046f6a3d79cd605acb8f604bf9\n37bf4b8efb57cf8d1e62ef65ad81893460039e51 6c541f96e3d11b62cf7c8e6a4ea3dc16952e6251\n94b06db6af26024a221e35efed0f10a29f69a30b 9ef0043dfef36c47a58d8f994d0b53f59b39022b\naa2ed04d07a82df1b80244c78db2e193aebfc1a9 6b21810717056fed7ee7353ae7a61c0ec3ffe4fb\ned867bf53e89e6d332b73c6709ff24a40a39982b edb529af6174c0f9336b0c46d10fdcaeaa739b33\nd632e3b81c7da606be3b4207d39c5622cbd1075b 2b3c5fbf1f6f216d7fb3933cb4b01f857a685668\n037a28bb8024c38069535eba445f8a5daffbe05f f44860e7103d60aebe3417320f4e86cc4d71e524\n3c5cc83ce60902af0263e99260a06de09571b2fd 7ceedfc5a5b36933d4bf20a94de7f27f05052597\n478111e6b991c5d49b57f725a063581ff4ff2bc6 db4fea1dd5e66f9e49e3092403f15f62baff72f6\n520461ef3e63851996d456cd33211a34c4c7e7fe 2aca528fb22a64f642b774b85cf9b4baeb3c3841\ne1dbc2c62e2ae98792cb77e22512cf60865a4d70 5fa56bb0560a587d91a57aa8c3b6be12f36918a0\n042bf1f887ba9c763ba8a1f33c16959d2d9abd07 6e72e63f9d61808fc1ad287417fbe9990281d8d7\ne5b3239b1e32a905fee768dd503d2706f1c3877b 8653068dba836283d3e1fd11d1ab83a2ac6ebf84\n8e32bf1159534820e25fd52abc6fa6c64a18c5a1 873ee23a122827b52e14d5859279b6a884e99c85\n269c4c291b3baf6dc8c169822a54fd9619d3777a f7c6630a5482c572ae62811e3a969bdff08963bc\nfa21e9c220cf7863d2543bce3786f8fee7033e9e a80e44fa16e1301933fb6ba1d457165428cb4aa8\n01b570f0b34c135381dcfb43c93a4c30dc51008a aecd58a552d378caf3601807d4b5945fad5c9512\n9d530f05a4114e65fa8f5b32a6d3c1f94947cc08 3817dc24078df01a62fcfa43397d5fa2635959ca\n2b6d232a72ee9deb4858bddf76b9bc9d543d1d37 4747ce354177c92bfe080b8ee0b257ee015b7180\nfc1e0b4a947feaea89660d8a41571172d9971ad2 451d3a61096dc1a7e52017c8b272806959bf3ced\neb1bbd90029c616732113848e97cbaf7c0d78dda a3eff92dbfc966613d076df5c81cb5983d609754\n270f5ed451ade4ea483febfe39e4211f0f1d3c60 4eaf45cd2df3c4ff3c0616d21fedf5332227c1c3\nde53e8fde827ef2c4b9bec0635f45d7c35aef596 2cec80e8b9b24360322ab7fae029ab0a59aab91b\neadd3efd14e86303909d5bae67a761901e00ecdd 208168614b0ca68382b94fe3e82bd0d5bfeaa96a\nbf844b995e7b65c3dcc730c1570c243d735f93fa 2d610b306e34dd56916cb5ea291962e4a2501aa3\n214ae4d0aebceced849d2512644a0c8fbab9e680 70045ef1741695cc6cc81c81013435cb4fb4413e\n360d00c3f4a492dd560bd400c7984400aa88598f c3b18acdc0db65816c44430349a4424ab8a0bfc9\n0630f97499f078ac1653cd3a90724313206f5537 a5fa5723198e51011805515e5e107eb5b72c97b1\n7ceae2a89b86422449feee0374fb4b0a44fde0c9 6eccc4a0a7b6108e6c0dc9285a77703eeacdf4f6\n3d7183e241a7d75a7f4d91dbe9bd69fd557e9c46 27c5cba3e915c6ea672a9f4484ba5b942fffc998\na504c8717ebf429605a40371d2ace1ad80adcd16 fa474af266bd75ec9559510b5aea4ae0c2c686eb\n32c083d63cf70c153eb96eb28170a06baa086029 5c68abbe58980315affac63725f2f64fe2397692\na29ef234f093912422def77f1a2ad94091297ed8 494c91be432479c210917d42cac1c165fbfb470a\ncf6bb7b22f15b1c89dc84410f5f61d300d32c2ca c8a1644e63b360f28ee979b1289c930c92babe17\n3518a3eaaad3725b2870d42408e735fd767610ae be2104938b19e7fc7bc85e840fe569c2334a64d7\n276a19eb3eda92da01bfa496decfa3f021dbf9d2 9ebec3e7471b901603e9f1bcb8f10099e48101d2\n4b44a347fd0d07d739226128fef345e6a995d1de 82298dc7d36ac80296609b2f559577c58a95c628\n01272cc432d798d47cb6e53de7c5cf3032943859 e0d0a070815d182390e204d5c39373e4eb8db0d4\nf47ae52722222a373fa11bf058bd85885023e60f 08bba81e96616a3bb2b8798a19e8dfd0d47868e8\n065f7addad6b222e2bb6201e640f6f8f82b2d565 e8b2e688e4304e5c68757a7806bdf29c36756b6f\n788c38ca2dbcba333cbc1e48bd407faa56d4d125 4a36482be53d17b9b172c279e928d54b11c9ee88\nf5b620e379c80d771f58c2e071eb1429a2c1747d 936efa7693826dc12f9563ec5e5afb37c4bffbf1\n900771f3b5787c32997b094d441398130f3fb3e4 ac65f66265182c3cc01e9af3c215150d6c25c529\n5e1889ca70ea51830b0ece9d3f04bea509e330cc 0a7a027ccc63961bd0704b1bb2512e44c44b9a4b\nafe10bee87a16d6101f0e394feea7048f887e1c3 8276880d1bb6d1a287f5b606251e20ac5fdfa477\n7c1b415e56e280f2de2b51db88a80e8e06acd23f 445b618195f5ef7ff41eb5157f8b7537cbf9bee4\n3cb8b108f92c21b940b763b4efb0f36557d3483d 6404fb3d21066ab1915da976e77c859d847332c0\n064b64d545f44bbb90d1e59db145a0ceddb4ffac 001dc833623f7bbe5ce1009847784401debd9e02\n9b9f393dc790b7f8ee8a035e03ef0c8ef87576e8 df3e1453623d02ea78941cc87dcc3ec8ba02d3f6\n46d332b606d0e0e0f5d83d7c00f0635cc0db851b d2faeeb3ed4a59862bc3aeb9e9b29a58ad13a80c\nff1949791bb5ab94ed32a643fb10457050143dc8 4c5548919b3b300daaf85b4a9965fc49fc6b6b0d\ne77c14585df63f20e4ed21a9a31626c61104da0c 36c23c8dfffa6d49d11afca545c91aa09fcd2169\n5edcb902fdb8b888e445bfa05f5bcced6e5eb9fd 1aebef255471d336b8b151ed407046023708043a\na825bde168c7d8fe25ec43218645d51c23c542f3 f686a5651bcf291ab9d8f2aaed1d5866fb96d513\n63ccd316eb348023bdceb328de5e6af94899c085 d2381782389f6ab16e68c6248e8f2d23b7649b0a\n685318b8531ebb8bedaa14b96a87f59ed3cd4d79 dbb44ac30bf413aef2602dcfe7286abd20d56525\nc999d6b30ee6301dd494fffe167ed8df11486b8a facf93fbc1ae8b74fe2237c0ceecb19661e2b312\n7eb1eeb5f32f1a7a3003dcb3b368c0ee4e26a87d bc7cbb8b01466fb4439ba7754c8349dcbcc99e90\nbbc48537361c0c1d755e2e6163d3b306bb3fc95a b5e4aa91fbf58fe7c8ab7d3299fcea1ebcdf5106\nfb5ca80083679c5994f496d5d0cfd936caf2a557 319431c574129b3f587be3c9d4b7e2fbd7b29c76\n6525b2503a6ae6da94e6e58a9274b2ebd1a4e917 3f22c1a5d2f347b6aa55e5472d8e25e4e0b1ffb3\na65d138c200123e705e012bd0e575a8cc395ef36 fcaa69b0baa9d7ac3b994772762517722c4de754\n99c3bf81a88ded9292022481dc0999e3b6d9b968 47509890b0bb467921e8dc0e4f57342dfec012c2\n081e37fd87fef5e3662c54f89272882bf967b9c1 6f1a8119a59c3fd17ca161d8770fd54ae4af7a3a\n3f732615693cb4baba833ff146407f224fcc8ffd dc3f1adb90f283c7d20fcc12c7001920833bca9a\ne7ce04f05ce3504e8e7a3e9b278c0519428b3a9d 6253a62b51dde7a60d3acad6cbc628a79a33c935\nc5d2689af0bda8435009c1f6106684d81d1d93f0 4ab46f13fb2fd9993c0c6e8e9e796811fabfa275\nddca747a4cfbdb57383a78f7d1a23695e686a7bb cdc470b3df66d221ca838b9a45f27bbc2893b945\n8eec9a1ded577657f30898addb54ec7bb81b5c1f d84b4fc23cf71963f09d88da3d2206b29e859526\n8cc28f615face415473f005a4af573cfaf2fbec9 9af5409a4dd0c1c4879e8bead5b9ed476f77c7a6\n70231ab2e365a9987e220746ee2ab197e7bfe901 3103ea13544f23e46eb1ce2491b81a1efef3d16f\n2e11c3af0d9f13e574a517e36746a88851db0b6a 8e5774fe9b1fea4193b4f3bed525978809a41993\n04963a2c6cc6d728d2ed4873096cc4c18136ca33 68ec8744b02e8720779c29de922e502f3eb30383\n2895743f034e09eda60107b13d696ab108ab8451 5c84b798cc53838d8cb232f8126dc5a32979e2d9\nf007b7aef44fb6a74252847bee5509c687b53e06 618e72c1020349bdfeb81c3c88cf09df8f574326\n086b220086ac887b8a28e7eb14366620b30f70d0 7b7d94ec86889dcd0ad066263d0e24568ad0be3b\n2b8b8ef8f2e87f0f08dc354bb0111203990eb824 6a0e439efc2d01b9a689970cb24062eae15caf57\n1bd92934c463ea3f6139fe182a950cd448eca738 a797dd788a3e1f39d97ea7dfa1fc6554997f1010\ne5024c975fe0213b7b235b72dfcb81839f28fcf3 740db84d7db3c63937d2e00e04de1872110452da\n09b1bf8636fb1f46e5fe61895c291051f305cf3e 872c7597c00ae0d9c41f24dbb75ade4adae75dc1\n69320c4cecfea53436a9736005d351a5253b97cf 6804f2336d9bf261d80767227d57feafe1341b2f\ncd2144818dd4fd9bbb5a2cd66fe3902584318c26 4fec8f29ff769a5e8a30a059b2860783d83e244a\n38f448d02e59910b07d33d84416a18f80a724be1 13a184613109208a6f871e461f7022adfac28f25\n480a3976a1934f460cce3d372a3db1648d0a5950 1fd13fe6662a781b728980801773b4a056c6e31f\n2e4157ea6ad7e680f195f73649af01353db9736b 070296cde54ab06c049a40ac08976293367b6ceb\n198ce70d1f4e9c9112e0f98008eae089d65e553a 83fc8f41402150fdd1ebf469c09f6730eaf46778\n0e54c0c1b4c29c085d6714e626cea1091fe84e3a 1620c2304c102fa3e98bcdd7e3bf1567d1dd1798\n3dbaab1ec84df16cf414f0ab6ba53a641e42a835 080b6fc4d50f4186aa9f51a05527bcac9ec6ee99\n9e447fb38ed1f3a52baa45f5de368ce0a2df0537 e2d1f46d1043a8994737e493c0a10e509256ed2d\n2a959e88ba4afe74e98772848d63ea10b5249023 657ef127eb0e6e13f0d28722a284cd65963e07a8\n7740017cf3003698c4e51cada76a82baae1de740 429e552a6d8f8a82661837cfe889940b8307c822\n405b1fe1c13e73b55c77e2fe7199293ad1878507 b79b9a3da0e7cb7340352a35f7e11239fc000b0a\n232142a200e1364f898010ff403e6f89349e51e4 6b0c8a7da3dfa263aff2af48fb3a7f67525ac6ec\n52b8b129345fdc067d358110cf553ecdda339d11 c60680e63b27bfc8a6d382841232196bd22e31e2\n9f8eedf02dee50a6fd5639317cb47ca6055518b1 e078a1ca75feb1522f0f545d640631d7091d61aa\n49b931f2f603919bd72603f352760267d1ca2b49 66436126334893377d06a8dc6fa174fd0c9703f8\n3909191d5a667020dba26502388844966143c836 c06c4b60c1c5172bfa9146ad9169a1e5e3fc1d84\ne72c02e56f3db78f2c70ab783ae19bb88bc2cd8b 517f79c85b0ae48f1abee44bf8388b1e2d3d01b9\n061c88dd87c7512c31d8cd0cb06de3c91ee339e3 954d3140248b5fcd47df589c76e16375bc521e4d\n2574115b70e8d355f953610c3dfd30520af78a37 ecd5f5250ab00fbdab2a60fe949f455f1101fcb6\n43fd055cdf29ba0b6590062ddf0129b56c1cd0d5 eee14c79062ef7ca896fcce74d7954cd4e70ba6e\n80b60b29fc29e1bbb565f25b901beb14dc63e5b1 de28ec7ff12ee1bcd135e33fff8e629286cdb452\n722fd50f23871dc42bbc1ac8b801c16bdd7f42e6 dcd54b6a3e9c17ad3c8183663fddaa7247c7e894\na27a33609845d6bef87ea12e869bb2450311dcb8 221f78950dbc5dacb5ac8a337fa971a3a5473b63\n33e3c9dec1324c07863dcd18bf9b345d893eefba 995ea1aa1a684a48c7b6b8c920575011a5cbb88d\ne0ab8a7e121f47c5ce13985b2761fa0c1f130a25 6e6956406bd2f6a51993f21451a4c9e2b05e50c2\n59f6be0e8d5378a4362099de69758c8de3d1a621 1936e837aabb4269cc103543b7c76239a01cb4c4\n69e3a1c4808ca5b48734a07267309dedcaead1a6 87f421d0ac8cc81cf219a3212f621b3af7022815\ncd6cacdfc4027d3d320f7291742ffb9fa1edc5b7 fe4d8bc710ca839f65cb0f1b3ed3f37eaabec7c7\na4bf18a293df961decb5eac2312d33d4d7ff62d2 e54d2a3daff6a649abadf73045596b6bb188319a\nb5de26e55a143e1ab283e937613b6d5e126e718e b19b53cf4d32a31d222e7f7897675704bba2a1fb\n9a4ec54ab44ac4c4e1431790e8630d9d91b5b979 8faa8d54067545c2763e2b2ab3ae12edc3531b91\n65b1c404a57b75d7da2e5059512170f2ab5d8915 d693c85e8fac942391516513fcc01905adda9810\n0d5154a9eea3e2922a6179d848c0cc302448e786 b493035617c339bbedaeee6e3a4ceaf0ffa41fb8\n1233a322a0055e81bcce445e933476a0323d0bce fb95603af101257a5871812dbffefdcb9047b3fb\n692d870301409dd11103e0f814513c861cf0eb9e 6df41eb8ac99b81a0cd64e1e17568135b8dcde33\n234a848d630fc7440319f147466e8fcda9f82343 8601b8510052bd0e7e315d580e3d9add9515072a\n43ce15f55428cf9631183768f8c0cd03dd18c6d7 fc31f868d0a6af6d2caab5da81c8a07dad9d7c2c\nd4acd00662e9e867f84698b0ae934188330fb3b1 6861ad152e0206f2da37f9b4458cd2a06d2cd73b\n102fb4a0bab274f5f6e9c9214d7547555b0f5b86 670f5b1f9594f5d8d3215289750e339ec543816b\naa882d9b7ddcd7e0f35e9df56dfe337e84438ca1 126c8afc3d4988f61d5a14c231e203a98f0c672a\nfc4fa38a7511fafb5f2d6997cc644c05056f779d fe93b9ea2d48ec7060502ec569e12a2bcc312f1b\n7deb5534ba2a01908bf7add5b639be792b06765d 237649fa730611ee0e1b53b24f397a9997d84068\nfeeffe1909f59288807eaa3ac47e2b1432d69008 1bb29cecfb97955003d8c2f98aa64f7f4c0e37a1\n9adc9c518f2fb031f451053f6e8a3c4fc6a27388 5f2b5f23127bf9951565c52f5a1b2e17cdc751e7\n4cc7bcc626b7d0ae54f5978d5f606c5abbc7865b c3b9df2ff24b261c5ce104bc765f4042d59c71ab\n5d5911449282dcaa04587003a694a76bd24b6ca2 685047b40954a0ae8eeffda375b9f750c49c2555\nd2a3fd9401c45e802896aa70a096ce65b3d0310b 66adb3fe7d2a36f93d4fda4c6af12e3548703d57\ncd7087044a6cfe5d977b9ba0a4246f0cba554135 cc51d70cc4e21591ee4a1bd212703ad46e88da8a\n39ffb48e4ca4af80b759d8310e45272a32702cd9 650acdd28b440b8e12228e355862a278640d8ec1\n0725b69567da00ba5783af938823368d815a171f 25e86a5c02991e69f20bd532c2d41e0cedb1a75c\neb951cb2f5b74db49bde336a5cd72370927af2db a7d7e32d746484466a7c3528a835c04b97bb3c12\n895570f3097fbc50172451f39b2e3225e06248bb 4bbd147145613fa26c517eccc82bf3ca841c9a63\ncfa914fd184576ad0e5d23df9f38a4fd7ba48929 129e075983d3510b0210d6ad35dee6907c49fdd5\n5ecee4eb5bbe191d37818ed3816ad56359bf4d3c d03bb07bf6e58edb5b3a653cdd11a46e90aa2746\n5cb0fa956ff61d095837a2f2e9f68fe23f1fb33f b493d6aa5ea288505cddb8b4d52026b94b2ad070\n65b39b7919f67678ad7da3ba1e2e97ff1115ab9c 2ab7a1e9cd5e4c3481396a7d894087ade3dd1b87\n7a3951f127524c97b9a7668b2e6bd17c3389bc9b b5d02a38b73ad71b20ac96c2f7a15cc83cd88347\n6e62ba508ddda5ccf7d2040b7e802f1da31737ad 7614eb87c43e23da2bb67a1acc6cb48798e6eac9\n0b2283d4ec83152a2d6ee5189d738081ab6768bf 12230e6f5f1aeaa7e16b677e0e02ecffd7b852b3\nf45a9ad6f8f7099fccbbabc26e4f934b9cc7afa0 7c7a80818da7230a0859eafbbcd1c78fd4e779aa\nafd3f567cbee29acda50f30b17104a086d034137 ada0582d6c9e1ab5353b2cc5c1d79f8886772021\nf0e7aa8370d81e9d452087ded7affaf3e9433271 6f57084efc00a05c33d61ed06c61ecd0531ae109\na55a61fc77dfc84a0679087b1226fc3b870e28d7 a79cd1d6f0d7d3c44911d3bf723fb723d7e4a20a\nc3fc02d73f9128b70ebc612c363241d010666bb6 ef0343b262d2ab35b9d98d818eda1835ada42a37\naa426e9f2f0b481ee7fc51592769917897604725 fbb6e936586d581798c0036ad29f65c8476dfcf3\n19bc519fd5f4e3d6575e0b01199e9d549d547fa6 3f9f482498cbd4f641d11b543f0d76fccc053b2b\ndb43c238d23ce8040a931acff0b362b651f51e3c b6954198fc742193f78afd3a1b9cceed0b3d09d9\n703e204a3102ffb33dcfc43c7b510d51262db4ed c2cd34e26ef8706e4f7f5fd678642222c968d1dc\n058294de5b23e180ca51212ee43010e85b61335a 0add26995bef7fcc3c409cafa16ff5a90922f93c\nf5a776d24631347a98db7662a4fc605eba2cb1b5 61404990c513444d975f12b95be6df6400230ebe\nedc4862a1bc039528d619982397ef79857edce32 5ef5e2a38c3a9f54ebbb6db9b448cecd88aa8e85\n7bacca062fe16bc5555177f90098238d31a1ff36 b0ac45c2f23d7551382acceefded33586440ec0d\n238d6c73405e74704e70ab16025137703c2c990d 59a0cacaf3d9bfe9d94a084e22195e31b1b86a67\n50604d601eb2487cfa9750c7b9a38723f27c7e8e 2cbfe136fc6ffd8b9264392d519596ddbb4716c6\n5ee686acc600123cc0a3acb9f432671b69c09ca7 57b50b9f651f86227de042af1d3a3b7e420801bb\n297990714aef9e8e44bbc8ad4eb9f92adf4864a8 b4bea5fb50e373b59efd4f43ef7d8e672ef4f900\n0ed2f55f092142938bb1b8d3a68052b50bbed2fe 688d61b14eae3c25d0aa93d6e4b33ab4db05516b\n1e9b6211e39c555db2c3955091697f06de7854e7 f07ab64b8d231748b4ce70f27e778eb1bdf1c11d\n80e43468a9c893ef141ce83f95c9110b7a989d16 82baf78b7d0fdb1c58606d22acdaf8db7524fd27\n568ff82597e7d440b9b9038407b0b102fb3fcc94 5c2c8ac3d9e876d3d8de301664c6f052db19daf8\n9d9ca0d6869ee77c7e2736bfbca6c9df189e394a 1f73595d697fdc9b71ca7003710c86359df58653\n1ad5da398b8827634fdc7c48215337258fd8a45e b945eee34f419ca528a40e71f0c1f53bb366ceb9\n824862881ea30665778e5c1719142391336e4ae9 ff81ea72bf6a8d74c512fe7ad326f333fb9de36c\nf92ce67a3f6fecd50c1224dff0e60234c1b27503 9e5e9c6c4cef3e16d29d11b2dfe251400dabfe7b\nc158f53354f95aec31b9b6851c80f3136462e406 8f09afac6731e3845960980a3042ebca939ba103\n20876026957e2a112af4bd37e3479c67b727806c 95ffc107e8bec7a0246827290649eef1c1a9b75a\n88a7d3b612b3aa37ccb36d75a29b6fa8d4b3c3db 791cc0c3c3456a7a451ad25dfd59643db6f61f97\nd33ac3bdf37e5cb5d1be8e477654ec4f68e5f119 ea15ed42544f47b77dd67212e892f9ad627cd156\na7e47cc5e3b6a263feac4a6f3581cfb030998a41 f8bb5d089648c555d8cee93f87625ef9d00cf042\n7db127c09e41cc3b883ec2e93b210c35535f60b7 206b7ff0b00d394f0bcac4baf33b6fa83cade057\n1d8bb87174766970bd18201177e794d95f27da84 8072f2a66b230bba364a90d3bd00d6a4bcd3519b\n957ccd9153f3fd72a78e933cea67976137caf961 28262895885f8112d8516f04c5a2da0548a69cf0\n9819b8d95544eec088aac54d58160f572529380e 2032ae2f69e1c3b131f2d61a6dba8ffa606e9db0\n440b9d7f528464dc64d972190be3f3f577d0013a 390262684f14f2aadf7bd69bbd0ee4d37db70a04\nc9e66ccd46520c6a6f33c55150afd237325ea3fd b1f2cda962c680969dfde2ad63653277bb5db9f4\n795482341494665ea04c46fb9edbc2d5f6f03005 9415c7e964bab512e230ba382522ce0f17f00544\nc73c5311d233bda53ca817eef0c9649546cf9532 e6c0ac11d15e90fa9fae4032b82c8a6d89dff90c\nb2c5e72b1f7ef11585069b98bca3fe3934ea1c97 3dd96ceb0af168f456bccc3b63180ee97f8d929e\n57464906a0070686ddc8f8ca71b303877003f9c0 66af0f73dfb12fe8d98fd5e4d5ed9402398e6dc9\ne435fd527926f76590b94cffddade797b4dcc581 06567b3a285fcbd6c49eb4e9285c6d39fbba7c13\nc9e56c860ab422bac01be049ee0bf47049d14025 d9f83cece504c1095029dae99070b56e1ce2207b\n77a2d68749a33a1013f769aa20e30c894f464348 d9b632e896b829fe11bdf201933fa82b51984cbd\n35a80fe378325aa0034b446a60a1af2f82d0982d 3d3bc42f4852e7967845f63c70e02834e59808fd\n1fb9ab603398de01aa0aa438ef807afa45ca2d87 ce670416472ccca3d32bf1ce0de0830a6a9e66b6\n975292d224a866f03a9f4acf90d85b8509b55ac3 c193272a234fed2cd0d5507421c4df8ca978f9f6\n84f50a87f273327fddaeda87d66e31670a18cfb6 dc9291921255279c3285b602e6ea12aae19d0776\nb36f5d8954c62655517df561c2828b4309df7bd0 1c234751cfaf436429ba43a466069271d16faa61\n1c903c6bf2d8d42792b1799e26a9bd3dcba876ee 5f239326b0053e89b2ca2cc8374fc0b385d71537\n4b301a7c5477b2113109b4d42b2d9a7ff393aab7 a8eeaaf9d26f1dbcfdf55370e723ead51eb8c473\naadfc791e087eb16ef7f9e26992ac8aadcd655e3 dffcebb866afe56ba2b1698326168a70322bf295\n3b9a7845177c6d063031564f138ed015dd57efa6 4310297db60f152a98b96977df7f708b964bc9d4\nf440f0700580fdbf662cb11ed8b3df7c49abc157 36889aaf43268758deb59921e09b6cf2c5737271\n906394573b4b6b6d041f3fb44e0120a835682c3f e857c43314ce6e819537e733869a6013d648d9ba\n9aac551cf669fd1bb099ce6594689f492162c17b 3adc216243b7c24586d4650042d8beaf6404d85f\nc6037added310e4dc4f950fdce0ceb05f81ab5a1 f8247fd0e44f18cf4f331dca5ae39b0f83d0fbe7\n3fb645767490a1da6a96969b1601c1837b0f964a 4761a51dbeee399e1adcad6b515b70c82fd0bf90\ndb44d99e687e63a41bccccd31377eb9e11b57169 ce5c82185ca081a02bb2fab14bd5ea6886fa9eea\n6e08cacd26a676690fce81675a493333e2c44b7a 53d9f8475030628e902ca2146adca699d9806cc7\n801dd3fa445c8e5e30586a5d7215f1aaa3b652cc d3813ed56dc0d6090be02f7924a0ea5f4c0b197c\ne05c0e8489424988f7f659a76e25456af486289d 509e722cbfb690d22f94aeff248ef834492fa9f3\n6a0814d5f651c549f6f7b9ce250f1674e84d2a13 45a2b5dfd22aac675b627018e28912df72245631\n12618088258c1787653cfb8a5bc0a161de4e5470 44b7d802e7e538f1a30417db80f0fe09d412e6bd\na895f142afbdcb42fb137d7e61c33d9d3eae0c3e f1fab09d5f9e430a3db07feef1ba0e8c5af149c7\na929e21fdb34f855a5e4c36b5a2ba52ff998d6a4 802a0ea9d0bb55d7115f9bcbb63e985d7abac397\n9b3b23e0716a00dc4b37b1d37354b7c285726a3f 34564731a7260917748c2b0409ea52e255beb82a\n6143523d7316631a0182ce82f36dc684ce71fe98 93a412fb30f879f7fa4259b7c1a181547b998fb1\n73f87a4546d5c01cbb3406d07aebceeffcb69b44 2dcbe08a524572b3e1df68182f8fe93008ef9db6\nd3de614a37bb99afc2fd811f29da5a1b2eeca74c 4cac9f98ef7d27f3bd8679ce36b7afaf98befc2d\ncb003da1c299d762a671287fc9336289ad240260 701cc9a72560322685f03556ee093977d6258463\nafa92279fea6db66db9627b73a21a78bbf6e7593 2bb74ebf79829988934e2674c185ffed6c3d785a\nf5cb9b94ba7ec7be5be7978bc3604c6ef9eac5ba 7508e668ef75a5d52cb92c1288eacea9cba0204c\n039dc6d22be87905563bf84a2a3ea78258345952 271badd053ec039294d314a2a288b895c5da36fd\nf7ac4aa0b936a7fa77c18ca733cc1d47af26b6c2 64cfac777813d0e508f18c6903511673209bed70\ndb74786acdf0a702469bad572f1767742603b826 b06df461f85f4f3e6abfea59eac162fc49cab089\nb72d7a1af06087e75aca1f6ae4051851ed0f466c dceb98ec381b4d9638682f51bdf34facc48993ba\ncb91fc4e32259f20df1dbf356febc5c4e3ce2f5a 5d7538d3c81b0799c029ce511b5caf14d42bf189\ncaef3c13a65304fac0d6b195a4fc74d837b5354a fd18588663ec5d65c9d9ac4a4686b6fd941e4ff4\n00119893d3be0580ef67c71d6068d9082d497b7e 0bfc45ddff1c39d504324f6adc83852dc1df93c0\naf8aa9782d4f58ccf23b60c1d99fe475b682fd12 dd4d31656c95163f6e328d13c0cfe1ff579efaa7\n2538e84b6bd5738f4b1de12126e205a811e6901e 6941a2d98c7fdd5efd60d56a889524ddc3eb2398\nf80db3203be29853b2314705eb60b59b1c8af22b 27ebce1360388421b28c45fa4c754bce88e504c4\ne8b515984fc7f836672b2617b61e396361abfecc 2053fd751960568c21af8310d849f9935c615cd0\nc5207dc9d23954f60aa2b2c57ef3fd9706d64088 b95324cda8e2ae0e247e0b182c5247182471cc2f\n9694c5c4f199baf1dbf983a28c2575a1cb23dc19 58d46850bc41dd44957395fbb2ad1dcd5323e716\n29ece46f24ec2467dcd18b90202852bbf78020e4 217da77be67542c4b3143e0bb7c060199b5ad45b\n1fe89415f1af011510e92fdcf32d8518d5c0e73e 453e4a1094cdaac8ecc7aebc0226d0d4e18e7b75\nbc29db741aca6c795f567340292fedc9d0530e37 839b8fc0c813987c2d2a3535cff495231a6c481b\n5f491c53f5e279758b4c42b39054eeb66e44ed81 b8c25eacfefb1ed668a42a834acb462089e15488\n2b09de4b02aae0d6e792b2e12338ae65c60e1702 eae9829b3fbe1e9187de755531d5effde4042e3c\nb41f60295948b9b7850fe75bae48b6f97acfb061 4f9dd8a48d4268a5a5e6f3dc730a7f7939cb4f58\ndcf6b6c2b8fdb6bb8f0ea494565a7d44a11262cd e08717f684ff2ec03d5e5464f254f56edd4a35e1\n69541ee017655b6679e5fee05d79f8170d787601 a587d71c7f9fa9dbf3cccf8e50bb0b821f1a8e3c\n6933527455e016ca5cef00cf7cd71e51712ef090 d12a1c04fc1decb1c55a81dd1b1a912b8dada8cb\n0fb766fca31a638c6508b829761b49132dc07460 0a2e10716ee33110985dd79dcc1a43198e95b503\ncd613286d095f159ef2e28ec1bebe44d4d5c677c e5f5536b1928d04c98f26cd6ea49c4c44cd86d08\n42c9ebaf30b7878004c433f1871c7c3f9df170b6 ecd038a31d1612022632986f04540cc3aca46571\n9fd2f876f499a86ee02d8143ea298338e29b31dd fe199d22dbe7bd7586a21b2dde21abd388f19cc3\n224d250a5022171018e1f8afa6ff3c9a4bf3f23f fd2df83fd0da2fa2aca82d2484cc0b1369f0bff4\n9a54aabe55de54c004cb767659993da5bf1c7e79 dfb5efc0c0119146e8f839d8433c46c90b44eb2f\ndb70559619a6165fdde8ff5698892e836cef96a1 0c409dae9f416741a0684a51e800f266c0e10b01\nbbd2fbe324c8976a8d75f040572adf2cf7fcb063 a67612c175518a68273af35860c4b3cc2380c6ea\n02fd3d288fcd64c815518af050f212f2ec47ae2f 628fc52d52a0ba6155eb40f22c46326d6f0a3abe\n0aff48c090d432bf43a6309a651e7fb953d7bad1 600e8cd8430949571b254ecfad13a9052974c67f\nb3795a158c0f89375e36d13b6e9ec9467ce1ef3d a474c44ecb5067212a8503b8656dd3300c8a610c\nd15fcac8149fd8c73b47ebb35c4b4054ad434406 b7351fbc78b1ab4b310b5bf50a153aa52567dd20\n85849a9cee1b527a084ccb5399c8d69afa6a7242 134997be5672f498914b04ecda8231515d088cdc\nd415195563f00aa733171aedd10d61aa91d84356 b3f13036e846ff2edef027072343c6334d866303\ne9c353426a8cf4689e693e1329461d47faeaa0a6 8a2d8206216c1d399b8a72bf5265fc8bfd88cf9b\n7802d6b1593270edfc3115ea081db76e3275f0ba f4e625cf2b8a78575fc0e2f6e387d0704173c9c3\nc1dc4d2b01d4249b0df0f431239ec6d04263617e 80128de76f986813cd4cf133a3dcd93c90fa64d6\n3392e7beec0f79be186b52afa481f8a974e3a198 e277dea35c1defd193f0d8d562a0fe54423a8f50\ndb17275070a9bc746edc6157f95494966f3a9628 3daf4504e12a7bba712806765b451a5f92adf483\ndb3917be941aea7e5308c7f656a9ec70bcae01f3 42528828f4fd3407500607e1afdb5d1875d1b769\n4290ae9a4e9e5e6c506edee8a5eb2bf7f6e24baf 1790a85d278dcee40005410d1711eb2cdb8821e2\n8b9bb50211515c3fd6b1da5aad7e5b02b065ee93 648f20aa6b360b76cc0e4845cae96e166dac3d06\n1c7810c61d2c7e8ff0b94c4ab6a0125a770e97c6 3ea04ecc0be568e6f35b30a5a86445cf50715f1a\n042e8e636bb710eca67d7bd949bbe67e84f25e26 0117a07ea4679958e1c5f895d19682d25121da9f\nf52907d1f8622bd153f712e565abb5b61115717f 4bc3e9741dbe9fbae4bdef93ba15455534e7ed8e\n10d770cca59feb5e22d9dd7f6234d18e6824f638 c68701ad66444aaefa463cf3fdbc0c416550eedd\nab4e7f7482ee29dc005b710985dde41f8ac42f0d 15e7c1c0977adc8694cd94daaa1eaf1de78ad119\nafe2ed874819c01a8c5b6294d04a857eb3ba5eda f10bbbc697d6b99b2cc7813541117486c0419474\n825cb5a0287c6396d2622ac67987bb843c77f058 ed38200e3936a4343e243ffc566c264f23ccd0f8\n0795f8615ac4c4cc32c1d236dd3c69d9201baa25 2770ba2dadc32340dac2be8f74c23a1c3518af73\nc84a16310af64e675927b9b8e73a2a35e69e7806 ef6c017ed40429f85739e275f19d7b615a716bac\nb33dc170c37c08dd7c2233ba39cf311936d3a79d f8bcf24fbf592daad592852c219a984dfcaa28a2\n823f0c32593c6df4a673bd3ed7274ac3f4a768d4 af7b59e25296bf145b346159424f92bb2b7555e4\n66a7d60e4424f177da512b05268a3a64df85cc84 092be2e7adc5bfc59ca93519987f85e312c32d1c\neb0effbd3c724ed12bd7efc2e1c339fd4f518f25 5aa3bd4e04815d72d1743294bd01a4ab317ab14a\n71753f9beef7d4f0e59fecf5749f67dcb1bde110 4d6c2e6e83b0733637d897c16ab3d263cd5d22ba\n2b7c7c8d97167280b7f28ec59e09b6138fbbbc43 5905ded51d36c279637a8ebb1a2a79a923b50bb0\na122835e444cac86c37b9564f78e665edd59ddc0 a71c09c64038c2416271e4bc599532129696f5dd\n9f65aa60b2713066d3ce79b9a588f32976e558d4 b851adf69183aa0ae96d3f9634472c545c2c8434\nc0b5aa935a6d751f498e1516b681f69a54bb713a 63a25ea1b01d0cb10260798e08375f10279965a9\n911fe65d181970228541c0602a02212c96155e93 aaabc4082631979259b7506ed12235dc007cf61d\n2ba1b0d064b37f2f0b0e830244e82d2d25bb909e c5417c2d945120dfa3864d57f8cfeb5cd9626eef\n441873d5f68deb7f603995d3367a8226e4921d8b b972673cb9362985617772de44be6fa2a63c77cf\ne3a55fa0882659f3f8dce06cf40b901bbe7b4e82 8c49739dd59b8e417a30a87c77ac558e2b8e9b43\n3ead271cbe13aa5f3101467ddb16f69e20f8cd05 7d58faa17df0deea0e248c6c7100a1090e5b2df7\n31b73f748cac7c698bf0a86b546524975f95bcc2 f0b817b224ec6cf14ee1cf5424e2d989b0c6f52e\n4396da7cf1d3337eef889c5186572434547f5a42 766d420e1f50824a200b357edaf296be8fb52695\n1738abaff7b27a9d2e8bdece474d9bed9dad74e9 ffda14e93714be0134351df2bb1021324f56363a\na69c972cee03eba88103a00197fb907faa5db260 cd7abf86d4bd1bb9522255310994849240f0efa7\n3d13a430a7b0c5ce9aa4f3667f572e201b520150 407ad3ca460b49c051f13bf9bbb91318c10aaa74\n2e5aba0d4e6cd7a8e39e50f9c69d97563b01295f b7a6126dd03b30873f998f46b2684da05a024a27\n86b3273c86c1242865ca1e393aa909719d98774f 0e2ca5d76e02d8270bc92cc671cb180a85244d9c\nb62dbd8c237a31b19119c0016cb798111393a80a b2771bbc78e94397dc35de5689dde68ea655fb3c\n19a043dec7962a5f8f70d457c25444a51ddbe6b4 4e4a200c0ef41f4d4e84c089d9742e50d7cdf3a1\n1211ead8abcb835ec09ceef65abf7d0cbfe84a2e 16cda3dd1b431e86535cb340c7b874261c8f0d3a\nb28db3c1d8dbd4aa496c0e76b847576f6bb98f57 ef3fdcb461b808de71ca8b4bb3ee4e5a5e86365b\n3ec06f19607167cfe8c7f9bb16ab4a49b04404a7 814fc52529f0700320e4a233826eae29faee552d\na69e3415cd16cdfcb248c92d8a0d25957a598c83 81645c8f183d8a6f77b9cf1a0f6608a9c7623ddb\n621402596c605f4114864052080af238a01b910a 1383ba2ba0bd8c5c61c5732b89b9e16d77ce205a\n7849cd156aba79df6901717ddd639860dcb3ea63 cf252dfdded012c09b9b2d52aaee9d7340b25733\n110a76df4d08567744afe51e9e9ccd6a817eb434 bee1ff64e0a648af3f9c002343192889e2a9bf40\nf7c2124efb511cdab898cbe9e120bddd1a0846cc 331c5b2b1ed9ae5986290b1f0459456fd895cd18\n37984c7f7911f11f73eb76c3046a75e39969e4b4 908d45cca8ac5cf3da13da8aac25d5af684c02c1\nead7693d7956357a17ae199d01da134f3cbb6950 b998ce71c6c33909594a6786ddfc0a04f2891f5c\n8235d020d5ff7e84b82eb9388cefcc3e940db8f7 d68f92116d65c6550c7cadbbe4afa5f14be17767\nb07829ae5657a9187582683ebe51b01f7c0bf87c 7d476604f4ea4b2987cda3d2100f93b0d4b96d7d\n51529724029094e5e262f2346dc20c81c81cb688 d63d70990509e6f7832e74977ed5c1b68e4204fd\na84008b7ad694925f007c5eea06c9ee36386d68f ec0bebb5f411c45a689df2244ec71ad9ddc87d23\n77e9f82ef70e3da3b1f8a6dc69fcda80641c3252 c12f4c4273936f338b91265239a0d930687b99f4\n304d8b8e19c3108583813550a1cff3c8a0b273da 151d2334e56c9424eaec90144a06e8548c0add32\n048f6e6550dc83825fe3f177e46dd81ab44d604f dbc672874984e4abf0044f408465b44eaec22bcf\nd34b72b628ee8aed73ec880b8f05da2cb663dd2c f790a2efb1f9ad6b7a7f1667ec70bc5e64c173a0\nf82387bafc3cd252cba22313c328c6a4cf0c74a8 f33d1503b8fb0b114ab593317d1e5a7e6461afd9\ndaeefd1e6c1ad161b08af09132fcf43a988da22f bce7839b51fb2d0d4e230a05aee753e6892e19d6\ncf5d10dcdc2948a1c7df5676e302c51014be3bdf 6de2c719693ff8f9844ab2ec8db66ec96b96f756\n7d4e218c36689336211699eb9d5ab9c2d0a17671 3ce9671a6b5c54b08f0874a645b81620530d1741\n387dee11db795bd44efaedeb3e00690d41d2a462 359c0aa7d3634819b90bed8a240be060c928bc34\n20066c5e28a6064a4d0f2ee75d5e60803db9e242 3070fdfd040403545a32c4f515de7c5c33f830aa\n5c6348d16842005479fd0515b602f7c594861e28 b62c5176df1e760ff8fc29a448e7d9e532586905\nefee5d971b6d060d9d096cdaa3a4fc90d47fe918 99d68c0a4a12c29866f085c867dae117a3449364\n7f0fdd1e3356d8e8a26ecb2853eed70d47a23e50 70e1db43acf0c7ceeb0a264db74a0b643ef34e9a\n5bf432568490aa927a3514a2483df9cc64067afc 707aeec9ab9b62fe5c5b1cbfddbd48e6822047bb\ndf02bce8877cf2f161f93a569b50cda81d162a1c 1e09df6032327eed9d990821ede07d0e1b412ca6\n27361895b0bd5459329802764756beac5bde0516 a628a309235c902b8f986294f0bf238939aafab9\n03f7652a06a7c9175aacb8b9a0c59b96da21b821 ef8c2d79b552ea4c8ac47d7b9458821ddea6462c\na7cf0aa3abf20c9e6e3ece705ad99ed1b68c61ea 4ea6a1dfba03765ecc62e4cbaac53c689a51ce01\n216a7af8260a2c675257e73df14bd9d0c1d7168e db72b8c37159d744b1d1a11133e0774754dbe3e7\n9c8bcaad7eeb542cef91c6ab70da5565e789870c 07fc8b3ca4857cc74275f7aeb3d1a8831c6f97cf\n5d1de58a62a2d4e505da309468ecbbd8035ea65c ae3baeaf9ea7ddb3a02c6fb162eeeb7e637d36bc\n32dc2d8695116fd11080abccfa7d38bc3dacaece ad9ea190990c4b2f1740c23eedaaaba74d935d4d\n4abf2525ff7f2b1615544f0f9e0ba1db3824aeb0 070dde116bd9f2520b72b2bc0bff62ac8eb944f0\ne9fa1982cbd735838ccddb5bdb56a64d67855a9e 7f1a7d6ddb970e318fd7a7b166bd89bddb5bb9ef\n487690042a5c303cefd39f04ac6bce192996ad62 bfa14edba17a513de62dda26b8dddbcd1228a5d7\n3a2aca75844c16bbd44fb991c49b51d30fa59443 c11d09c0362376e2f977f3e67b431079d2d9b0ca\n8403a2323e187da9890e3959c79b8916f5cc5e4a ea8ea8226384048278cc3e151a617b6276c76111\n34ea0cfffaf0f19b42bcb22b56b54a4c93cc9be8 39f1a7592a8d4e5c6677ee4ec73964a9517f5fb4\n9aea89b590b938ba904237f5bb1e09e7a6baf261 a1747ffd435175ac35c8bcaee67d8bfab6a02f63\na3d1b9f1f445145c7f6d9394fe0f9abc7fedbcfd 1d9ae6d58152edd88ac06a5fd30984ce7246630c\n266a6d065dd3a8eea8b296502fe639311649fe28 9bc13253a70ea68a7f23a588036a8392ffa6de59\n78a27e2084efc1ab6c8b59de4d98687920be84c0 684e947ef19f4548a1b22f8e4cea80d7f38449b8\n04906b7154d453eee3da32ab9ff3b81847537614 57facfbc7a464f3557d9226105d93803485f64dd\nf99e3a66844fa541549a433dc56adcda220443ca f2f5f758b6298b3af62d08349235bd66764b2cfa\n032fd7cb96952b936beb1ec0a87c86764a951040 20a280ea24d22b169f485fddd7e0e8fabc346c11\nfa41688427604f8411a9461f06adc9dd339e45b6 c452a9bd7c76ae58de63a00dd24151d254bf66d0\n8d2a83c6a7a4718cfd35176e142dab089bc5f3ec 7037c1c0e27b01ecc1ac2fcbba06169eafece493\n5280eb87aad7f9e92c175d4282ad9c0bb36864c5 546f07149d3e26885982eb4047a475b73079fad7\n77cc1b71b4719a13612891e35bf1f4430c5d010f 20195eeb89693f488dae060c9c2498fec05163cd\n45df8fe46dd94f10df42969acd01eae5992540b0 3031a07890b2b14cf6219c1da92dfa98d15f0745\necd8f528e0bc91885c4cb23331e5ce6195cba6ce 8fd9ed29ab051c2ea5deeb7b5aba38201e0086a9\n854a1c883a6654b394245c9873c1180e427d789c 217777e9827cf7d138f1ce824ed3b6dcdde47550\ne4e5167a0f0ce3929cd14d6336ea0fb61785fa6e 9c1490a0bbc923d4c0960860962b775cce2bcb1e\n69634b579fc14d7cf306eece19e09e259ce4cda0 5678d3e426a09f3893a04d1162a168003bdaadf1\n07bc8986d2adcf123a8153d02bd95e01d37e9780 2fcbb2a50b8a1cde5f1ecdd780a2e51fda424277\n046b9f2244eb50d04127e61457032ee47e9c98bf 2344cb5d4ae3aecef533e45700ae867ccd02e6ad\n2ce87b94a362efd08a110c5e938c3503ddda5e7c 36604e580d4524bcfdba2e0f82f3b6d95487add6\na0628336247ff5295523772809966c98e8e99386 a0ae7e8818f12d3412e33d32b9f2534b01e2a3c2\nfc01e25dca059634b0d612a0aa5c3dbeb371d8fe 957ad39a0405c9ecb6088a99496e3291bbf3630e\ndcec451c1d3c859185a63c9be4cf64d2b610d863 3d16b84734fa6786925ed7d2a7d7140db2455eaf\ncaed114ec3f0edbae97e2a310862eac38f489671 3916d54bb3353c03cc5c92d3881e1ced7a046125\ne9ea8604cb3b715ddfacec2c80c5185b76c2fa74 3f01bdfe420c9bb7709010df100d6cae16d9979f\n8b4e65886e0a27f084a116c747e2937068f5ae7b 2848b456b56188bf18ae666141903c9bae71ca8a\ncb038348b0356352d95cb538ba5ea5501e312238 c1bcb74737f08b9769d4b3c20cf0612324a07833\nfa90b454ba05469a1b6e9777377b0c12ea7f4974 975f09964753af000c1e49eedec458e81d44e42a\n020b992d113b627659849865cb436d93fd273a16 f865cd88ca58cd69312f1c41bced3b9bd04edd31\n5be926e335a2698ac1a62684ec3b87a29999e97b 7999828ce927a3e119b17152464a1883c5e40963\n2d0641fcbefd495bb73b68c32d2f1d417d3746be 7acc50ab698acdaf08650785327d3915bbef67f0\n9a54af73c2f5c7d1ba9f9af2639733f697d79cf8 5af6ae462fcd6a6e0b85857071c580cc794945cc\n19a100546069aae2ca608134a0131bb0b3526194 ca754610e1002370cbb2449c4b72f44269f8d7f7\ne60d63c6e2821273c84e9d3734c991d612871403 f617b44d9041cf36dcd1f2a9690ea3b631a9a7ca\n12fdc437949b51a5c9e319b8a1302e68b73aee10 ffa767827547edf941b064c3e4a69537b85e6654\n796be42d59448a894527dba1dba1ce89aa4c0cce c842994e1128c38371f28eb537e5c2fb84dc20ac\nd6a1b48719fe49e64105cae96da976d8029f7458 36084f3183fec33b58dfcab070a2f5eb99745b42\n73c8ffad0a02551aa2f028053b77bd49001afe86 355417e88af9986020323ab8edb9db1c707b28b7\n884299be653b7faa7f89f1f300c9892e5c0a1a9c 8914c32207a7ae45899ac49f5d0da9090814b30d\n5fc95c5f82178b00e0b515d0ea063bb242674ed6 0a7c93f29bd6e80d33a173b2604c5e1f6d87db06\n36e4eea31c8fd443d998c2a3476992c9763690b4 c41b95a6729a1c4e41a7fba4ffd0514cf4cd2dcb\n8d4c2a79aa6da235b300b51e0a92a71a543f884e ab0e50613e4402c86158a10940491caf400c8bd2\n4d783bc878ad866f1305d16b8dc1941f3833fac2 933cf02c243135a9d8a8d35c06c10f4537948b4a\n6bb3cfd5ccf95d5a1235c0bb164a742f254c7125 d780381e9aeb88c1d5a450bdc865eb1c51597be7\n805adc74e9f5142e8aefa23c9e602b71fe601bee 51bb20f0b4a405bee6b7a3170926904ac2dc57e4\n356ebe351551a5b059b51018a3bc8768500f3745 efd3cdd652fd0c6781099dd48887641dfc772cfb\na7e37aeb30ec208da41374e86f263ffac827955a 6806da64b015d337cebb071a98b41d89d1a24dfa\ne634ee398751c2d770fdf1235f6de044bfa32bc8 bc3c274f2cc426dbd4f62991ba8d97a0401c118e\n2f75873135dc8eb6d13db4bf1f6271417ebf0cfc 4c2ce4b8cf957f63bd237220a4b74875c3b23cb0\n967619ada5757862b342517a3ba525a6a590892d 6d6738dad4963194b4b99f465c84c51741a03fae\na911d6ce54c7a430d059259f60e796923a4c4a2d b5c8c187d72663c84ae4824539535e72dd2492ad\naf79ad96f92b2c5c13c108b63e62a3d8491f7290 c3a7d652560be3dd2382313da805fcac79654178\n05dec7d1c1e6f321136930d2f8ad4bdc011d32ca b9e2a114d80039b11bd03d327bb0466d11054a14\ndbb48b0063a68d90d37abea829e7d95a5c6c8423 54a585579f5d3637f6626dacaa8192601617f002\n0d4fa6b4f32ba5daeb44fd750495b6ae87108628 f9df96041b07b19daec44b3f8f3dea92f8f746bf\nb326ba5797033010e4652d878ab7f0d5459a1351 260cd501fba9ea7c376e40de78f93a4050699d17\n1055f5cc392c56d3c429cd1eed5d028b57c4c4ca 7019dd06f0113c85378e896320504e004c42ef32\n5cbe35a8f360bd452bd9514989893c1965ee0146 96adabc8d686c8b2969d38fdb563dd91c6aa5b8d\nd4b90a8457c8bee95b052b69c88bf7c8e0024f8b 4fb04a6aaf261ef65ddd0481ebb2f3d30926d86d\ned1ecbc2f56277917e75d2ee07b74e6d92e95e5f 18f3a867271f62b1bf8c2e24429212af340ffb53\nd47c8defc35323f672cba240f38f974a4ed70218 10ff7f497a20f799538145d59c312ff75adb79d6\n0b8e162ad9d632377d60834c3c892b41e000d438 d51d1fdc78566b6794c08a44ff3c0c14f2809fee\n0b9f28c30427ea2e813c36eb47c96a23faed842a 9d7d0e234e83c460a475cd8661039eb6047c7064\n7c996bd202bf6dddeb7c5c3d408da248555cd98c dec5ec0f3854675f52d3825885b3ffffb1c74887\n08deeddee5c7d574ac2d7d423194e99f2650558b 348748186d6c642be300ae35a405527568db8c5a\n6880fcc17589042bb4b14136ce4ad79bda3d9a68 2f09351ac9c5d5a92a0b5ff5f18bf2cb8a0f72bf\n42ced01c8e640283bed9697577fd549a159133a7 dc20c50d5f1c067554ae908280a4d4c963698e17\n99a99c63886e1624ce7b45ff6258369ba4192944 1f8dc3e2fe06e50975e57403cf0a1a81e04a5a26\na8ce8e717c5817758ac8137ffd8cbc26497e4941 9da0b63810c204925c5fccbb2d385c17e259b02c\nd70777fb6f3e1a6f2d08458c78781654067287a3 a798b2164a3c6f059971495c9436151cdbbb1aa4\n2ad762a3825e8d8997d6e96a73269ed5e5ea5052 08498eae63b6673c0b750105f3b0440d21e37f91\nbb013dd4b51006cdb842b49450791ad8ebd753a9 4df7bbe8f50d34222303298f5d66ae1a804a402e\n49cec579bda270f255045aedd6f3a90a61dc99ea d302b0b80f7f5ea2a18b62dc3658029917d32765\n7d0898734fbd8c46d51d61d21cc9de4bac1fd783 1c7f75f2a2b0255a91bc3a331f3c2908e87fa57b\nd9640877e07af3a438301d6d61a5534217708b46 101b47c7c8377e515416c4c6064b7cf40540fd02\ne6c64afbf8578c45c7a7069aae1857a294f8b16e 903b7ee397c97a9c1f3ad014401beb1fb3705f6b\nd201a599696efc84d4d9b0bfb01a6d6a8e3147bd 16c4e683b6f20ad5b99f6b8f7fb7389fd6ea6371\n5b56b843931d6a2ede67340c16fdec9ef1691470 16eecd3f7e0ebae5d4865b8ef0dd70991cdb5864\n5f0e491b2f77013ed182025a6e71d402dc4dd924 748c17a84b82c050a3fbe2bad51a5a35e9698755\nd4573aa313c060904207999ec1812f764ecc5422 e8a8d6f7dfb4ddecdb1d246b51464f937d1b1651\n2807ac5b4159c42feaa4f21dba263e36295d673e dc908731b72e738da109989c1fda86a815de5783\n5cd8550f0be936d09c2b9d8f917082bd1389c35f e8e2297edb7c2752bcb7ebf5fcc30d659c369e91\na4c034039fc2d3c09be2b98541633c6625554f26 e5ede16e32ff117c9ad54f9787eb29bace0fa794\nde91006329d9ce9f84d948ebae69788f9200b107 3e288f0f3090dcc8c2d3868aae9f689192ff96b9\nef562ed240ac7607ddfd6fd4988b9acb6cb00b5c 3b50873321a5803799e7d2f400b1bfcdf095113b\nce6eaa5d5856f72394e97740c5d288a95934f85f c24b26cb04f93d1bff01187aa31ff74cf693c2f9\n9f3479314a705713b5ce2f944fc1cd41678aff57 8125c150b49658da47cf2e031486d503603a9fd7\ncd3002847171799b2b8425e08f96aa09104d7a15 1fb4afb007d13e77ec270f1ff9d9a28c7a91f34f\nc7ee6933afb34c463e90620dd9d79693592c3f70 d7b1f90a7bb7fbc6972f7371874bebdca3d76e11\n4360615d8a18c01ee172dc694f922cdb9553a94e fe6461630a023b607d8077d028f6e0dc48ee8b10\n9a6d7b6ac3856d7369512a8cc12c753be576de0b bf22bf6cc21297741e7c99076673c9b732bdb8f8\ncd5b56d1833fb4b16c4f0a5da029c5ceac21f191 df5220b2b967effe790cd17462d307fc52175597\n7bf5494a3250d49f4904e271a7f12e5a653a7773 96c500ac79b6c185fcbf9fd41d2fb553ba3000f4\n48c6de69234fd110a5ccef3db794951c2788bd66 94ec5f77e5d88ec9233b8640ea6e8c80a3683cd0\na6bc44781c3d3776f308bede44936e44fa144768 6b36cf0de17dc1a14ce4feb52d8949d441b8353a\n91d69aec34bc67d99c06df9d5e170bf4ef904910 710b996e8d8141e889c7dec8157d0cc5dff2df4d\nae7c882d2d067d2e9aadcc3d5e09d95a64dddfd6 84cfd19f2929b684a36aaf6b751e5ff1d3c555a1\nbc821d15e752cb038750dbfbb8ab9e31167db53c 66777193efdb745b0b89827c1a08225c778b4f48\ncaa36d7df27f38abceef4324aa5b81a3d0d322ba 624011a146dc1a29ebb74570dbfae9276e854768\nf57ac84b49cc355fb8d3fbf83dba9fe9db3ae711 55d0bc3f076bedd97ffd99fc63e03dbc50f073cf\n8f8c751f7d41b2ce7947ac8a5243bf0f21e9c230 d4b848aa023d352a42b3b5cc8f4421fcfefeec09\n8adfc0473f4480ee6b4a92d9e80adddfc8da7d2f 853f24f354f5063a17b04962ba1bce437f1623b4\n6d2e1f872126cdee102d10fb5afe3f9394355355 ef6f4a0194bbb10e1018435bea66b87887646823\ned5297dbac7f5be61e47cc4f200ee2dfc7e6b847 10616c1aae9fb2c304796d93b7a2a2c4b6264c84\n393b64c040d9b665bdfc0303c5b45e3c625b5ba4 7ce256c132b270038b6ebe341259b36b6a5e23c5\nd373f12c421c98123da7fd89ec77985d63103b03 c91551fd0955dd0a6289934558f3b708a1c51e4a\n661958ff0ccffe8bb3d7bcade0e530c195879b35 8a911374e664d276aaade896380bfd5db598c2ae\na9116dd63468fc930116d7b41f0036f3c2eaca06 c02aa38562203ab0ba3d8723c39d8fb32fa62ef1\n4d476ead94d68da654d878c2649a414fc60ae5ab a01f0cd915335d855a21553c8f2e44fed040dd6a\nffb87aedf256a1b555d3c0faf8b5a6cdc342be9e 92c78b945ed2a813e1a928317f54634aafc5c419\n0c4004af330b274d3030351755708f0d4602cacb 910e7df7a2db103c16b58d1fc80eb0863882956c\nae7405df6f91a74d44df4671631ffded4a6f3453 239aa4386c9efde1ebd979753098b60f45a5bce6\n0d57e59e1a4e512b83cd35853d59f07b28f41123 7b5eeca052f2c82c63c746d744007917094d391c\n912a31fa4ec411ade39b16256aaf986c64193b99 de0aa7cf0bc52eabe1c53ce582ac066b1d8d1584\n44e3a5bc88c0d42e55d4c2eb523bb733240fee19 03d4c6401c80c5acf078ff825afdea31075f8051\n9569d05fc089daeec6ee6c2cacd02fffb4285703 e4680908571ccffd0446a9b8dd2718a26a311709\n9d3fb9ad9410f8d7939cd0290c2baec755804ad6 e4ebcb2dcb270bea225bf4fc8f47c0410f774a99\n3c328951a787800d7d15a8c61c58cdad645d829a e265ddd633a692cea47c0fcf35b844b4f323c682\n551ff3fd1cfc4b6fe3a28f784754a278455b29f0 5957aa8081636c2522020c81d297d8c5b7634147\n3d1a46b9320c9e68fd50f053bf3c15cf57b3bdfc b17b6f70fb4c5ab5ce4ccb30929a95033e3cd984\nbd4867d50acf7b5179b002e2050993c6f63f16d2 4a09fef727ae6bc0de6193ca7a7c3e2154f5847f\ne4d4cac63ea62585542392f05c5575d84f237717 0e80fead0e5fc28beb570a7aca8eab97bfe13440\n775d0c5490da28d1dcee9e4a5a5e4b0aeadc68e6 755549f0edbdae9e93ae3844792dc9b3fbe74074\nac01a2e2e9bbce29ceb4f08aa976ca2cff62e0dc 9e3bf2ac2ec08ee7078187862b1e03bf2ae8a0e9\n6c214d19cf1282b9f0a3603ec1e9bcac8123fd17 2d4d3af0494a8b752745190f231a0abe9a2b4d21\n051c9ccc8353f6602b86f6684fe220e0fb3aec97 12d07dad82bba34ca9e28ffdf2910a3dec9b777e\n0d2fe3eada0ccc577d4795a44350802250275f52 bd36bdf90184f67acf8fdeb28efb295cae331fb7\n72dc18266ca00c6f936c9fb317dce8228ca6b9bd 53ed521ebae012c8377002b4d04553e74d98ecd5\n152c9cab2e31f91a60051bdcd7fcb7e58da2d9fb 6301ef8cb5e9abd96cd08f27e8976c1c3a770dc0\nfa0713a018399b3b57e2ff219a4cbf2beb95fad5 8322ef19cb3952728692325d2435b33c7e98be3d\ne99a1ad637ec13755759eb1d09f878cb9c741baa 861db01146f0f8491d7369266b0e77e8b0eeabb7\n194c27f89ad47f322fb69bd7a9f23592397fd633 df56ce455979d52fd5dcc10fdb62452f5b6039ca\n278a46d2c56f01aabf2530a3fddf9e2022716c23 b4347c5c0f650759ff5c03ce64a9dd893aa7c19d\nf42d8f2d226d4dd80158300f99f281d735c4da3a a9c59d940dc02b61e844cc65fae2a5eb1150db01\n6d5d3163fc9d074f4c3e3086b57a173389878e8d 2fef94794e3b7414a418a8a1f2f5d0316da44e08\ne190429566ad5d31f5b750ef359ca611c6b7f975 4dfeb8a801908f9cb261b8b03190ffb2c060ad4e\n818827f5ec110862d5f5812788cb3c4cf345e3a5 a2af2e727ab7a66cdad6f38c4197b02cbfda09f5\nf8fefd9db1055efb93fbacc409c23913e588d752 e25844be18877c5c49205284a462c6ac6d7ad62c\na72f5c106d7a7a21b818898220f5916acf87d5ec 6e568eea5801990c13448c0148cf9cb3b927a8cd\n4ec8ed82365e893cdff694d2139706968680f3ca d48f8191f49b9b25f9e887991f0b2b49c417c9b7\nd3f33addcee9a3c3ce0b960632d2b764f133a9ce b958400e16dec0f9ffc98dc5df1b4287c3481d01\n4fd399d1b47173032a9752a764f17bbf280ea468 020be33e4bd2f174dcfe26d365404dc86817e9f8\n6687159536ed7f97f8474e12156091def195972c dfcc5f18b927c29b91bf80dde9029e1d092ed6fe\nf4c9ae2ba1c7f0a694a09a3032a186cd3c2229b0 d5051d67a2ff0f43f64218c87f61eb603e10eca2\n1da8b2b1654be9d5b7b5dce4c83e158fe2bd0b73 a0b1196475e55457cf0a7120d9ba2396abc89c9b\na0e2e45c3f4f724d943c72a5cf992f4ed7136acc 9b7e631b3d8b1aa9048405bbebf388f9054aed33\na47fd5061e71cd973c2767b2537e7b12bb1fbf6f 08ba96cc497437c9c5ae8caf5ec2523b1b1fdb58\nbf46ff2c8127c03e00aba2466f3e4c9e62b53d11 9c8b7f74d1ee9c1d94a3de86febcb27511c36354\n5b67615e76bb26b35e38a03c8ede2897cc81d1a8 b3335c8339a02c86828bd25dd35b4168c44b4cae\n522f68c080d91abce42a5d5bca464975e1238575 23443fcd0ee9d33edd2c839df19b40e7370d2993\n3be8bd050056ff79af418feed29ec69dbc256e34 add07114fc1ac9f30459540854e688c470ea3380\nd5688b264e95174f08ce7865c28fc63998960c40 7b63e1b6deb6792b590132ea0967d777de84cfcf\nd787d4802f25e63155823ed9190f90065200b1dc 3950e17823d5f4981239c5875cf23e234ba97495\n2e9eca2a5a1c4d4688a16489dc49a352aeb77737 03ddcbac513e4b7d721dbc65747ab1746c972b4c\ne05f8c25297200551dbf2872393936cea539cd31 18ed60c42f07545f991561ba91195818550bd695\nbdf4a81fb8cda22e8ee9491c8c004a4977c05084 7f8129c89941a94de9da0d11583a8cc7784d2d8c\n492d2995a26187b1a3be4f81ca45c2050b9b9e27 d5aeb941f33de45d8c159e561f39d1491e90f848\n3faea73600a1d276c1ec4f53a158e42f04571ae1 ad9bdfdd36a81683f5db8e7065c1776944f30de8\n9a6c02de139a73109982a0cae1c42b4f34771635 40ffddc484ed5dc8de3f57bc922e98eee8b35d8c\n3916820922cacc5f9f7070bf08c4271b48822b0e cd3d0a06ca25c33a217fa767525ed224b17cae9c\na6ed06fea1a7112c547cdd279804e42c72e2611b 170e902ca30de6b7c8643ed55d897b128d7570bf\n1f068166b9198d0ed52bab27ec69371ac6986651 e477fdda3c9b4e40b22ea55c92344558ec33ee7b\n1a5b3edf03cf7a064bb06ac26af637eb7d583292 1a0fab1d4adb4da1cccb52f5551eb905cec06b86\n41b637b2027a341c598237aecbfdd3c560f6fb34 66e3b5d63673ac15fbc9c5bf880619034cff4747\n4fcf2b3d37addedd2342ed4612f3bb26450fceca 4fdea32fa218453c5710324b2ee1b00a1588f6f8\n3815ddad7157ada78b174b33cb9f2b9abaa7a358 1667155464b69a7c5bd2f248c0f38644cb3bc626\n13d6fb0ce588b1bc93abf48d8891e0783260cff8 177920a25e29a77f6cdba9eba29663e4d3433c9f\n1603d213c063d562c5d3bf34ee291c3bf2eb9d0b 992da1bbe402a452bc4b9906e64a9fe1bd64a047\n08f935d8870b6cc3358b1e7bc619a0d9460d70fb 540c66860026d2c1343df6af05e2340379c47f5a\n95914272e95b0fb5e2a485d76976a385e6b6ebd6 b6342e378e43e09ee6f9d37b17e32618273d319e\nc3c0265e960bda060f831dea133fe8fb60c42658 83e3fd6f99d34e9fd008d4c9c5347a3e324168d8\ncc0f26a3004eb719d25f84cbe02b8b00e4a14980 19ba94a809b1cd7623ae63a1381d038dabcd4d71\n8915557d3e8d7cb798a49c1e16389cdcf5ce6642 d33529851e94f82bf0630aa0442bfb2bc802e308\ndeb1995dfa566c2b0d83041cb03f32c877ab50d4 131dccf86318c63fb940f0383896f9f71f01c87f\n51d8eaf4b97681da5cf89505f3b484aec4f60c25 67feb4daf85c228840e52269e1427d27387aeb1f\n0c426fe8808d314faf8cc480c3e806736cbaf808 cd4a96b8cac13cab6ebbb8d35ccb3dddada02f73\ne534b7d9ce1cc811ecf6200a2192eb955c537c55 3153d70839f9dfb951bd40864997993186c302ab\nfaa34e4637e088f6364494e4bed62b74931771a5 71bf277b1f0a5310b84319640fbf15e3895de87a\nec205e5dc86a7013b733fc9320a792977d3c961b eeaa0733c56a4dd600dac781c28f4d53cca42e4d\n0456748eb7a62d70dabd21c3075280f419957d6c 7c9549cc48921876eac97b9de339fe1d668621a3\nc024971fe84aa111241ce85d673e5ab353a447a5 0e07f7dd8ad43cc4c8caa8bdd138e0e90f377038\nd569c1256a02ad8e2b5134e0f57030a5a9e64d26 11f5e2e9aaa61f76eaaaebcb0dfbb3e34b8b0fa2\n2aba53b6d63336e0db44e1a673111b66ccaf97e4 3052788fa404dfbd9401606eba1cb2caacc1eae6\n0bbe55153a856b6cd21aee8251b716b8a7853df3 b261ac0fcf32616797131548063fe829dba3304c\nb12bd832e106b8e1a105df89305b1f7d0ec8bbb2 fdf5a3a7eedafd7d5b1379ac3b120ecaf095dcab\nef08f9815d4eb15fa7ca070ca679c392b70ffaa1 20940d2bc5c41d7e26b2c9c7168eb3b4df9a31e7\n67dd00ad94d981e29e84b3af11fb6291da752cf0 576b6b49f731c5765cccfe564d602620fd8875b6\n09a9b6d867e2bfdde08ef25a1d4cb5232f33f84c 5c77dc8adcfd51e7c05290f75eb30cf42dac66c4\n0879e3d02ed639faa122afb56d7f46d04ae567a4 fb287465699f32fb245d76e7b8c6ceca0966d79a\nf5471a57263e0870b97cd8a4ff5e8b5bfb71b73b 6ba9f9de090f995b17640494ead8044e5300d01a\nfda3f5c2db26033647805501a7611c487fc2b864 b63372d8e5a6504a02ec7efe026afec5f1d3a71e\nbf212788f764bf39370e349cb4849d2ee9e277bf 8f205304cbf4ca2ae0b0c94ec1f643281c3e5d69\n2d2882618b24c855fcf4ec19138da95a6c78e155 bde74df95046f90f66c68262f26312640e64d528\ne572c504b40b22b02c1a6b663c706588fad7f3ba 82d21e36cfea7861358b18c7617ae7e68dea8a35\n1dfc0f2b1cfb72b0f6c7296fd4690190581d6549 879816d0a27eaf5ec3030e54d03ac7218a9f7335\n54ce4a70c553444baeca36f4a5bb9721c2180733 58431883fcb795ecc8e561212de8f7b37389785b\n867a2f2d619c544f0b2816bc990d55103be16ba1 53f4e159026d84857f485d5b3e009725332b42ca\nbf6334ce88230ae8d626eb60b2b52d35a928e698 af0bcb8aba7f64c5c21d153fab61218c0f3e2f92\ndc6986f61dbff02374465f7da23a5da7b4f554e1 eff2be58610f4e6ee808f55ca71cd3d07a1cd886\nd4f3e5c52cdaf8d9ad8442620868a51563d84512 9a6af57c5f3ef6ca276569f57a81d5c5499c27b3\na394f041f1283e036ccbfb58bbef917aaf1ad6c3 2b09250dec86c5dec4580a2b54bde3ca3e0627e7\n5bd8e8efda1c7940dc5d9cd48a164d6561b5c57e 43e7744bcda7eba733f5b4b0fb7f3ce9f4c1534e\n72e25a97b8e9fbe8a555342e6d285ac527afce2a fb162ab3fb43ed7372fa23cb5b810d767551dee2\nb5abc2a4f6b86c6b2f07c28c2a53812550f03330 554e8e7afc30b026fa703ffde49f1e241beb4318\n840b69e51cfe648dc609ff90f028d236a3256315 3722e73474aef2e1f4412884d61770363c4b22a1\n7cb75ae380c37abc03ba780e22da088ee99ac89e bf0e1e4757ca44f555d94cac92dc4f5c9fca942f\nf0ff23a446542fd56bdf385995b19d8151f96e61 452ff55a93e3c963f24265abad7ceec63de2fa8f\n2288ceb88804748e1452a14000ac7ea2082faa5c 12a13dd9b4654b55479b1b82fdad0982b135b949\n847863e960d4a5fb11c107ed7b86043332173742 f191996e0734022b9d6b94200e703bba3bab839d\n8290aa5e10f4e327add54efb261fe44e0818cb01 6b1a3286ae743ca2cc6594155d73fc5415f2ece0\nd6c15edd735717584508acf68768fca139654bdd ef836440c0a294626870b259b660e630c2d59d5f\n705e63dc9fcaef6adc9cb2cccbee60fc98c45d17 99e89f679ea2d449b196601b0d48f8d0ab082212\nd107b78a7257ed335fb2f88ecd0bf25cd6458175 c9e0100dea12d6e93e837d07653b152a1fc6a64e\ne72f62a1ab364da758436056217289eef5d8c0f8 522976901a565b642766afe19a0a71c698035607\ne1e8e57bfe7fd0e3ff0fed61aadb89bdfd0c5f4d 6d7989566e01a45ee5e24a1544ee19728ce0f619\n5bd8963fd022b591302649e5cd9541f453197248 77ee56ad8ea4c3a65311e84a6a0053a2ceb0c083\n93af184c87f678d08acf03cc19446d8ae802ff0f 82175239f2fb0779c25b4326cd9fe365e63eef5a\ne4c0cae6c6c61c9474b3a0a3a8bb7546d91413ab 518ff30b1701ffc2ae754c451d39cd0920d807e8\n73eab071dbd8c45ff8a7cd888ac1b2199072b7f9 bdfd501d596bc1ed453ae18e3093f6a32a758d9f\n6248dca86fd4bcc09f07b7b79304fea794ec3fc2 9539170e274f030a3eb34ad43fff8cae1ff1abd2\ne2bc6089d6d5313f6937f3f472bb9b50a5cf9224 e4637f615f999fa1432eb862828d9d280eed4f96\nee0f810b2ae8cca9160f455fec7b2e3144586652 4c03080153fe467c46ed752891968aaec987994c\n4047e895ecbfa8f1d70cf87b98434be6ce45e515 dd6d3c49dcc5f3fd88ccb493437ccb8eebd43981\nc64e7b3edcb99a2fb1f632b32694641cfa2e42f7 45a2e4207677423e7dd85b1008ec0195d1e695dc\nef0c91ac8e0d5c08a2a9d247b09dd9397a398947 d7033bb259c42c639301c17bcb27bbbe2766c66a\ne3f3acef5d3aeffadcfb0e5875f23e8b685f1e26 fe738eab3b2ebdd662f83c149c2f42885c15fe81\n1f50ac866664429369202f72ca16db8723a5788b 7e9e02d9c6667f63e1c6bd0676590a335e150d5b\n4b32831f11887190332f64de6226fa8e6efdeb0f 8545686df38feac715d199f10c696f1a3abf1555\nd04022726463eb9edc6578c63790bbc2767aeb38 425592ef4c1cbe4a0760c6eb2be833f429259e0a\n7e773a2535a6a635ce83e3f84aad55369082d57d 17ebe6e41a00cacc60efa3d9f76a504a146806e0\n50c2da5fe92082fb7858f0da8809cc3e309e3bd6 e4b92633ee38c4adfb114d97370544b1e67e22a1\na8912f14ce9a79abe411eedc76a83db63618a185 24f16cb38c85de6eac1a7a7760f3abc001242cdc\n17f8e9505ba6c95dd96d26ae313389c532102904 fd875dca0e1667b167862befe1072da5c256b3da\n580c748173302456d5830bead2fa71ed199e126c 4cb399d69823209e376506c1c0464b616896f3e0\n56c90bd7c9e35be6b404da9703c59b5f60f1d79b b28539d45b58245ddeba4cac9082e998be7b101b\n4af596daccac63fc764776477ae020cf1201cff6 33738e6abb646e4a451f96f920d3dc4571af8bf8\nccc2b13de1fd579dec1cfbb314560759f8e154b8 343cdbbf45385ff865f95fe87367afddb6a7e8c4\n55e83d432ce05a11f1b7947d6fe220f7d54b3492 812b452561deaccba2c906af0c4014114c0bb476\nf9659e38391f3c069ddfa1e18fb1011f068ce378 482f3ce2a29aebb705226c5c7fc88a7dab32d863\na03808a909d160f398932721b6f489d70630502e fe9c70dfe0c57ceeb8be349c9413e8a65e25ec9a\n4b057abe7ed3d5167a1cdc571d86925d46762c73 db7d19d3869d033ab984ead30495fef0756deb7e\nd7c4693438aca0c32a2afe9b384c2c4e5e48451e 5434cfaa25211b9c1913d9ffd6836b01a5f30633\n3005d5ed95d19476768a1e864bb342265ea1975d 56f5f50bbc05ae68c65628b57527d99659970fc4\nfb76bfc6815878bcafd6c0ece4aee5fb1d799a7a cf2be4036bdf0c47c573e05d033c26749275f064\n3bde37d082e40beaa0f78a2857f518af0d734db9 22283194d7d18824c66c0120c792cd3b3ee93b60\n86be38b1e2ee2f6a6928bafe0d3ebde8ea662ab3 b06f1b09e89cd7b37404082dba2cf744a6cc4ac0\nad4187a3da9c9062d701eb9d137e134b15bb7009 d5c69e2d951d25e15e323974807594410d579680\n0cb83641eca11195c44b2f86f707301edf1a9c0c 3e99b15ad4c3844269b735c209d81aca074daaac\n5b73fa1f69549b2e64c9733c9ea389c1b51766a1 655c5cecab1dd7f209b32ce6019c9f8a284559e7\ne8219d939cbfd6065e8abfa15b8e815aaa2bdebe 085edaf186413130305c150e9ef83473f2cae124\na576e4d4f7ac7cf759e32b41b2ba004906e2150d fc2ffcfb209722b9b345e800d0f7f97257eaa9f6\n9730b8733900f7c9773a4b5538a9b4ba1fb7d4dd 6ffed3220199b89b497999b1655f771e95b416f9\n158bf4a9effa7b02bcb7a8f1796a37aec763f8f7 f1b4db15b777e2bbb6a629685e913e6fb342a9e0\n8c5511712925b50f104e20813ab0b446e2d19630 69e7a4a8f18e8c986ae684d4a40770c4cfceaebe\nf9c90847f1b9a48a1e8291556ba84ecb02aa8336 218389e7913be5c3d9fd3b5afa1b0ea3e6b14344\n9756843dddd9dc6c165af50cf3d71748c33e0dd7 0aea5ea58779005436aef4bdc526866431c4ea6d\nfcf0e83b0024f1e43d534ccb50098bb1a87356dc 62722f2c8ebd2592423c9ecaefd2bd7dd05046ff\n7b1741c47e6012b758ecb4037b64f3f3de74bb23 df00588beb08a9bb2266ce8cd10537cc85f8a52e\n2ee7cb8d0ae1567c8751080328ff04aba449a89f a2832ed03df66466d8fb860e71f19723731e45b2\n4fe55056e9a1650be9d2d6459aaaed1cd507a3b0 b17dd91c7378b0557543a44aaaaa42e87fdc7bd6\n682239eaec0eddec74a7bcb71d62e58df83ffe68 7c04d7dac165b492d261c28ed748abe9890979de\nc1ea9bdf78925d2ff0e46d2972128b92ba04dd97 ec90cb7163d606cb134005dea2d5d4f5de1e1a20\n0612f3052ff0da1db958c153bb16e37ddd236f7f a6ee8bdd8a7ec138209c0624d4d4eb3f2ac66bca\n2bee9492352433eb9c60483d7f1b44e1e5557b72 af56ce12f144bdc557744b0d4569d5d16a59953a\n1236451c4875a83f63072c795c26b456c5129a99 782b7b4adea918ac1e0a3fed1afaeb1f2f8ab55d\n00951d07c4e72c7b2851485e489f27a5a7592032 d84ab653b96da28187fc8c8794d08b6a2775f770\ne1378667fd64b56f06125052351fcf6da27abb51 da271b93cea0ab305c29af40186cee7925b36aff\nf67a21e371e38ffda40a7ac73d6f5b815d599e06 12b37155336df2dcc35fba850d99701881558b2d\ncb799caf1931bdc6a04e2226b0196f4952221d88 af464bbe4c1084c2eb2cbf7cdc593e95ba3ca8de\n0a3d6f86e4f74fdb99755705f35675a17ff3544f 87d12a90b359d03ed646ff976704ac4063b2ca91\n5e17843ecb0f730d8f468efa4e3610ad8519900c af0dfa5801403a15f0f6f4b7848aab2c8533b505\n7a6990889094a885a0e8b3223d9296ed31ce8ab9 0127bbf543787d11332f6b33b2bc8e56babe76ed\n0ede396036de8007ad2ddaefa7bfd580452448c4 ad3ee42ea21b0fe6f3f75074f46edd012198e717\ne0633b2d89e050b854bf703d9c433a751038db6c e1b46715dc32a2072c12f6d46cb9b13b845961d0\n6cc2023b13fc58965d9dd9b8365f25d119a4b640 9adc98b9a02062625b2dddb147aff74ca7e6c486\n07bbf8677d5af8177c821f144aa5ca85b01e3fd1 24ac9b933482bf11fa9e8a53ff5e724666f36d92\n9fbdae7a173e48a6dfa942b59f5ad7832fb72f6c 02556c5a081693cb7543287cb544c7f57c5fe52f\nebd0048910df261aa799661c7b8f0f3395a58e26 38a70949c96b0dd7eb23345edf3f140b00ab9879\n1cedde28c3888ef05196b383e84f7bbb9182a151 177150a41ccd3b22f91c04e6f7d612f0df53586f\n63b4a89d6aeeedbd455fe3b124e6c35c9073d7b8 2e184516eeb4df2c1f12ba0289789a507cce256d\n212e6fc9182f08fdc1c32d3ce12971a93503df38 fc88d289b3c479726bcae245c6c06e1f6a429381\nc86420b3cbbb1e35a1cc47656e48a6762344825c e248e7f47919aafb43a279cee1bd3e5b1d9d9fc9\n49ce3c71fd88651298e5ff87f8ab7d02328e0472 7adad1c3c5277f2bf68f285daf9da1f67a411867\n6fd5c13ccd0ad33542a0713037653c1f3cef641d 4132d559deefe77b6ff388d4df2c8fd1b0f8613f\n68177a4efee533710b027ca5041a99db5ccabc25 f57331d4a1dbe04225e8bab3228dc7b62acf837a\nb2928759a2485ca34b8ae3a02f7f7b5363f49bad 4f84a5ccda7aefaeb6663039d80de762dbdee460\n22ed6fc79b442b1f43971e8c5af7669afaeb3d32 8f96a5ac0090b8d65bf9e76632c1771691ca3ed2\n8c1df8864468ec76c1df7e95c11694dd41a4ee41 3a67a3c26b4fd1519100ffc4f45ca41463c92642\n8656f6643d8f001e6e5d049c2b3f4eef78f977fc f531194762c7fe0a66c1411c92f7cf6cffb79659\n6af52a4151af2b5a99981c33972d7d87307ba775 ec9e7b10bf33a3cbd1571d8bbf84924761f1f7f1\nc65185158e09b81166559c0fb05386b52aa80746 49716c82aa956ff10756e67a2ca07ec6b2641af8\nfc0eb74353f3797b5446b885b0ed0bb955df9a8e b212dd1c765aa13b53fdfc471af3e7a922814676\ne3fe79fe9470a058b7b1e420997e6bb0bec5df5d 315c5bc9380c5aa58281668b0d022987ef59084e\n50bdc11c8eae7b23f1bbb028b18fd3c02c1166ba 748cde5de2046391008d6276d14a991961bfb0f8\nb5b3b31138b53bda6c4afce2612e8aef74f10011 675e6b765a6bf477ef6775bab17802020d1d74bc\nfe62eaeb38eb68eba2b7b73ed445a952dcd99f3c 873a00c9d8d2c3bfc54f0a1934c14b333879a11a\ne23722c98dcbcbc44d646bb402c8158b81d60ea9 ec48e129d445980b1811a15ff9952e0619478018\n30e39c0fd5db78316e32afd4690d099c3c98ec7c 63db9ca2b6220953a9c405d57af67207c5409917\n002ad64906531b3d2d3e5fd59da9270b18acc672 93a638541fcaa0d5db79a2aad18e314c454dff98\ne3cd4b7b9bcadf208ffd5a0995582319a4199b70 80927f275124fa0fdc4ac9abfa61ce45c916f587\nf9e74c1273eb30d142b73636340fabe5f7c06c4a 6869d1f0953a501ec032763b2ead291d25c1065f\nf539aaf3d91d1049b6c1cce3a5a73b3bf9d74c32 6e3c3b49b1b250002cb545440f735d4d74cb22b8\ne822ee65d9033786476cc6378b27fefa1510fb15 65f52aa83b3f1df5b12666cd65c34d79ff9918e2\na4e8dbe67f6f52bfb0c48c816aebe29d23fa63ca 695028ac3bc8f3b593b0a25c875ef5bc05473965\na20caee81d7683664b62865f41fec050e1b7030a 37f5df6f403777a876a09a5d5394489e7eca910a\n3c51308a0ce81b34aef4457df8ba615b30518193 8b65bf9b0e6cb8726bd24124b003e84cd56c30db\nad55c9bcf3235a692fc9e1e09d45a524d490e1bc d377b9363ef27596d56f5b79ef13c1349e933e25\n3842e6f258d440fd93151624dd28290034b08c80 2b1cdf4684887e7ab43d0218123954a83d07b25d\naf2a68137ccc7e3630931be07334da4c36f783c6 85ecd77c021177d3e90b2dfc0faabe0a7800fc9a\na2d37e79d203d60be86aab4b8da0cae859861a8a 5e5ff3cd61e86c63296948bf2cb4d90648bc0504\nc7e0178a75b90b9166ffaff4bd0ab2f551cdd257 36e925632e38030eb004e77d9b19e9af37e8e1b1\n2a717049690e4a93fddca4e0350d6daedc45fe6d 1264ecd509c585436369548568358c56309d8292\n8d4ca9902e85076c576b6b692097c519d030e9fd c04e65956e749b73a9cc07f0842e52d03b7602ab\n6299141a25931163961462663385a66dec45963e 4be2313079093ae0cf8f23870a5f36f1a568095d\nb57029e87a61bb1a17098384aee173e60319c17b ad44f14dbb4270929e40f622aad17388fa56398b\n9d3ef9643d17ef75501bdfa5d1cd664b4975cd73 cbad073ee7547a83d4847298c51b1bdfd2ee7d85\na73980d0ecd09b5ddacc4cf45a6a1720bec606d8 72fd59bb71d2c8084d77cb6d0e13180227602fce\n8f857751782025cf46422186af66a15f4ffc87ab 748718cee08e506d8b1dbec624c281f3328ae61e\n6a840cebf61a309290f088cd80681b26c48c90c1 77f0359cc6728540f7e700eb2c33083aca969cf0\nf58fe7b428b8fd423a0a0dddd0721c0e52807329 b1431f2d950cc39d503407a1eff63947ed98400c\nc17ad789b772726ef6c99206c1d9edecb4c3a4b6 ea426cf722193c079f8422a2a6213a0642c6bb3a\n84b989b0d0168ff49f13f17e11b8283c01b66b07 be6d7f7fec4f0df4f03621917aad235d77fec784\nafcdf8acc64514680d9cbff271b372c69c5e2c14 abff2ad70ccef32b99e779cf0a3e7fb8db2511ff\ndb43da773f312d282cafcc7b25d32f79a98d7a9b e8c67960249e1c1e264644abc7b8134c34b2415c\nfc9c396f19ea8dd92c355987ab1c847c54a96456 e467d75f6b9d3e761295346e97aecc29fa792010\ne504410a3524caf60a72800c1ab52b747919d203 24f8a23512efdcb17159b0f92c25e711ced20c78\n799f57d4e87b98eaf653714992c4d9dbb4fa2fb9 2c729b49648e3101464634cbb0250e54a451aff5\n71b29b55056475a661a61f1ddcc1acc716f7844c 1c5786ffb73df389ee04f6b2f60403dee7d0c83a\nf89dd182d537503218ce09ed5f740adecbf3b6ca 94087370dfbd1fbbe77e10faebef5a2c96465243\na653a292f4be10eefd48da41ab906d363c520033 bd3787d23cd12532f137583081a9c7ba7714b28a\n599c8d098681f7abdaab5bd011c24eb39fd89fe3 f15bd323fa0ec4904815f3b435221ecbdc602ae5\n58a361d79bedc438ac8a2d3af8513c4807b06de7 627bc26e8546f7e6b2c670635df58f7df776d67d\n4c9bdc9ba217b8f6945809ff2b4ad90c0fe040b7 ec867628b077412acccbd16e04dc097cf4afd690\n422085841ff0e6be30e9431b7b309553eafd0d13 99512b2bc6edbbad6735b0324549f79d0b4a895e\nb9a96f15a558e7b7cabe01d09a58102ce21c2497 006d8ef9388b33750e5e864543606926e179c90b\n2732720475ebbe4a0243109857b1334a3f2c3cc4 a97b54364282f9c658268941a9cbe5a250d22fb8\n6fe110f88494482795df26f1b92c232caad4e017 c688bdf0d2fa2ceded45cf1584654afa028bc940\n8ee3498c89458bb424d47e11f38a72d67c64b264 df3a2393e913937efabb12ed560e2941a5b9fbcd\n3cb76426a10331fbda7083ce73babb9d62480707 7f54510967f37f6c35242f9c00664150c82cc8c1\nfd077a79f91577613af2f6157e18760e6437185c 44c023e0daab42eba273552475e8cd18fec3fbf4\nfdbda223a7bd7db1d5f176b9edeb89d472923f4a 017537139c91e67fafbc2b04b4ade5664f6832b0\nda03a7a87d3280b5cc8e42ba56c311780c242c82 b157a31881910a6db764c3816cd7ec0333d224c4\n5f5f577d4ca411874565a9e13ed0283940ab37e1 cf884565342f73e791d8f50bbd1c6374de1502c9\n8bbbc228fa78457cb4dfc94146c610f1c7615a3e c50a43bdf3368d54d36c30c0b6a69bf5c9fad7b9\n39eb83c081908e2599769d6ecbe000a640172e1b 12e8fdcc931b564b9aa306b5caea1f1c0cfb3153\n64dcac02a409fca1193c2bb74f06df85952e9e51 35cd688b3fd3ebb4509e6b4ce2777cf3060b066e\n2ed17b148ce4d2b79862b52a0119a63c9a94a3ce 3269c98e635e7af83fe35deab89ab63973737a2d\n97586c2cf2f1c3c88c26befb22ef6d8ceae32aea 040d223e136b2ae77e9fc05a5124347cefd83d69\n99ad73d40cb45a8bd625bc603e57c12cb37e4690 2e20d80977cb32343e866b9ea4091f3c2b50ac27\n964e91da519b08627a276f81b3ffd1d693db329c 0900c1f06a9fa41438f0a12afeba74743afa3d88\nae3c80b5353c548aebdfc211ca06b7cb02135033 ef886976f67f5e94833aca3785360f7a9b17cba6\n55d7ada7d2b6473e1ce88258f9034cbcac3f32a1 8be256f846e74a2a0ee21314eb3d8cb16638e496\n5d303f67c508d9348e667c38ca1c77abd030cf05 94e999b5ec1ce817d89c75962802f64e7b105370\ne5c2fd89250cab1eb88def9563a31d798085d348 e68e49db8bfdce08adee137514debd21f25214ef\n4ebe0a159de42e4605408624b7ec670f5f0f69cd 6593a4b6a5d467f137e38d318c63a472e8d06b8a\naf44d3bf9f3e3b109b652b9fc6440185cac63525 db082bf34173ec98cb350936edfa81d304bb731d\n9bd645c781d33c63b5c07f73cb5d62e481d2a57f e70c2d68e0b04c57e379e481368b80907233c980\n3e1fac331f2a6870a60139e7c734a794d6195056 72c5bc1be4b2b657a28eca541ae9f2f8484df27f\nc86c2659c2d12cf8b5ce58d2c4228d0d2c544d79 256389802a33729daa333f2271b263ef05e6303d\ne47f218a05336f4223b9d6d0d098cc770e537d69 e7504e22df39db09e052dc7bd296b943f1155b88\nd1095b1b804306db91f8ef45a0f2f297bc772940 1afd248a13084dc993109e499e42ad5d6be3d141\n157be68dd55c1733f8e94a4ee58628a2779a7462 05131130fc0786767d0410d3202f18908910d547\n1f2a97a72505f61694d8c96659594b7c31b270b9 3155eba31e365b7736af0c19ed50444670818a04\n3e32b06c5b4716af9446f5ec3fa5827bd4b7da08 084e9c5e5822b6136f2b87d62e5cc554942e9f3d\n3ce73a1444cbd40ad6ce6c5d264eda24966f399e 50c9f2f239c337817a10e8699a13829b181738f1\ne74d3427ec814dcd81ec8864f8f6d2121154dec6 a06270aedfcde9c19328beb6b221178973b568e0\n940eb54b305314425ba93793831efca2e4544ca8 04a4c17f6e0a46d314b3a34bed225a142149e18e\n7c9e8ad66434100c728e34e38b48ee8fd4beacff bb59e13209494df6ef0c8f986e99d2d9069295ee\nbff695b32e2250062157b39b4c5a62e819a31fc4 436192ee814aef0ae55d0cb714afa0632bbb24ab\ne9b95b86aad1535ab2b9cd09b7cd4d3dc7115bf1 d564643d20f851a0ea901eff7025384c0f5e2b6d\n68b3738a16810e7171e5b6f7273755ed1fe741bc 7c87eccff70b20b2184eb1b123cb5f1878acc4f6\n58f887c4e81584e1cf6f4d11f0ccc5d8c98b754c 24e0bfab9430a254c80bb295dc33aa2dd907e533\n86a77b675db09bbcd18805a06d1146ae58af7f5d cc9125bdfd8b79be8554a13d02bb1dd423d142b4\n734f889e994f762345d170ecbb020d332cad51d2 4a6421c41230e61a3844fbf481cda7aba1ee09b8\nb4482d061455cdd6ff3b91fe5afa02d3779a3c46 a8286fc4e675d97d3e91e5ffbe1dc373933d1a0b\nf61c52e187a0a5b4ef6549868f974c2e3ad6cfb1 16828c7dae50b5b9b36f9876ee0a5c3e3dc2f549\n85c8c680798b2ca1d8b7b430937c66257ace8f5e 15d0dd7fcf717ce8155a625b79b7506e03d96d65\ne7c36a81cb1c0a904cdf4d3730a02873f4a740db fc06b4620d24b4d6af9741ef6fb26fdcb2e52a0a\n347bcefba822b6b8bd4e081f9c8b96109d86a5ed c8e2e53938c08796c0635154d5364a839640fd71\nd70fee9da40f2bcbce4e3191f0c59b686fa43334 fb8a61259a98f170ffa1342b7c2ef0e073d40ce4\ne971a0f3bacbf836d5b2417de07871fe6a2e5df7 5431fd6a11ccb106e194795cc84d642363991850\nf3a08408802b85ec4854c0ef809535d2ce21c16c 29a2d63c5b94c51cdc3b6bb4e267f6a078f68c34\n826b0fd17579a8ecc29c1ab432fe4c727e4379ca 5d548d241f47be48af233d2c6e6413ece727d2ef\nf4c94b5715086ee8ce6a67d649a5f5998fd614f4 ef9aaa3602d87196d66ce7512b2ae0fbec795300\nf51e2d35b178dcf90a64900203ff7ed83fdaf455 f7814303a0610cb6431827a62462496d7c90a655\ne3178122a6939235e3b4244db2527a1fd09a1119 f2a5b07b34087a5a3ea1126dbf096b5fdf3ebd68\ncebb75cb31a5a2d7cf338b99f606a074e8308be6 fe92c855e09a58c1dbf906cf7fc8e92c075d10b6\n59c779ce64b4dbd8d61299fce8525c2c2cf86b0c 71312a62ac27e6ad820ee2063ec6f213eb522378\n13c8bb05c9819fa80ea2def11fe7d60a3a3c2e7b 667dd52d6434cb0a87683eba6881c166b5e20f9d\n5a888c66b7156848985a5e761c6f6364ca0d928a 65078592975a5b128f679de79e88b5974d89799b\n4d612b2345cc76d8151bd69a31aeb42c4fbd2f58 98d91189910d2367ae10cbfc5a4f910a98908d84\nae4c37c5fdf10f25178f2abfdb76dcfc40ba1c09 881ae42ce79336ff1c4ae2e35d52a73d97223a5c\n097bb8b0bbafed362596cc3c9491cba242867d1a 1c3f9708c0c4278dfb5aeb1f3c0583fca220c673\n7fc764d9678c384c0a88c3a8b5e34d6e584645dd 8b4ed0f7a3e57373aebd71f2bba10c27cd568f7e\n27e91edc27ba1eda70ac2b68ddeddc06dbdce35a f39b2ce9e7ce8302b9d0fa0bc566b039d0e88713\nd28ae16727f8d4bfb3c87b52cff039fc81e65add 1666fff5698fb949481f1e5fa737f5bb77d1f98d\nee6c0763410b6ce436f9c0fa267b532b0916f330 6767fedcdf41bf994d1e6f1c8ba94951a9fe3632\n10cebf07bb5950caf57511734d7ad079e4039f7f d6b6282abfb6d83739a060f4c0962c64aaf9f66f\na9ba8796e31b9f17ac95c4e94ca1ddf59c72ef36 c868a4a261be2fe85231d506a02c66488b886913\nae0cf0fb3a229c1625665859939804ef63aaffc6 639b3b744c7696575557d340b5ddfb13c1ea9e35\n584a5c24f4c5714b56350af518f2a6af49522c5e 0fc9b775025da5fbf1aca681d35fc3897f0e6dc9\nbd4cc5781012d7a9092cc18de5907f40b9a1967c 49daf4df03b91b94129ba014f3a22e7889895898\n12a22bcb56edad2937ed84810af909e793b87fb3 a733a4430ac8feeb3d0847a35dd2e4060d7809c3\n0e9fdd1666e119e19d74590f85e517963bfdf482 64bd504fd47fd5139336e47cec750c85e17e7974\nb86e4740e75b563380cc7da7450c3f8b9d4e748f 47513ba47288862734090079ab337039a50c4d62\n5945d36e54fcac512c8e5aeada5a5e866fd66590 eb906d4d4f0ee9891adac3434f05858dd3a63554\n667f7d201352bf2680422ec99e98d6a41693b8d9 bbe7a1f8d04c1faad25ccb70d37227c7871796f5\na25f87f41363e196e815f8d0166fddc0c77b27e8 b1a5df1aa7458c48646aa2139567187aef070cc2\n09321b5de93945299662791f99003e345d06674d 4624ec68a03feacdcf57c336cc54d4cd8f0bc16b\n2bff8f0e17566807b7c9848f5bc505110cc6a0ef 3db2ecb6e7e668d35a0b347bd10178e9af42d3d5\na0773cb4bd091539551528f5e944976318dd81b8 fa0c891699b67eed61d6308b57251d35a1cc843b\n597b4c9464108afaf020bb8989d454645277ac71 d7592948f4f773d11090823e4fb79c3cd9cdf4e0\n0c1279e76daab8595a004b5ac18824cf17895fb5 0055aa7ac6095a2a02217f4156092be80671c481\n751c5981eb367385a500cd5d3a3398cf81d3e5ad 5044e98bfdb76fa48030a1f7cea12eb7b7f2e914\n385450c82f0aa31fae8d6a8ea98544c6e50c1222 b9d87588afb026421af82ad700b870e08b5ae1ff\n4cd8cbd3028968b509ed6098b0552a2b408a95b1 8374a9cf7263e1f273a8d11addf514488c25d35a\n6e72ddf7b09766387d83690bae6de1ef159145fb 34bdf5d6077f5cc91ab86eb76fc26616825d598b\n1de90a8923bc17fd41df44d6fda9e4ce4341f825 425903b6f8449d73ab5d6a96a0decae8af3032e2\n08f4a7ea1f5c2ff373d0a3cb51968a9c347f968d 790cf6ee333a38a796639a29568b39eb8331ab7f\na7229ed7d55ef7903fc26e137d51e6619ee4340e 961f28ba03f6156901504a678793acfff83fe494\n05ed0b609911af3959f660c84379038ea251d455 7e10a88dd4c27d24be57a683502372591fa3c6e9\ndbad7044864f87e7c5f7dff7479e0e48f5fdd4b4 f51ac3ba290e448faeeceacae63a8c52f5c2f381\n3937a2038d862418024a92345cbc4aa677c3a340 74d072b453e5e797047105a958bc2dead365568e\n7b1275de55eb77a9018d1fc91ea403f045ff4189 ce321c25aa39a0a9121c0556574d34324955a634\ndc82116b5b32b55efe1bbd2808136d5106ea4276 a507bb0c4c0c017dd17372294d1303b546d1d58d\n6e79560f83b2adc446cda8db0b783f7127eaa720 947cc72d6003cf95bc3c09d9f2f3579351156b51\naf235ffac2a873f14ac4f7d3da2754e36c14a2df 57c141d981bc745c19abe3404f782c9da06762d6\n698727a634dea21e9c8e28f74f005f85c52d2c03 fecd0038f45e689b6163ab8e9538855b99620208\n666d1aed0d098ef37358b2e46875374c0f48977c 72434c4184a03f1312ed392db973fad5b3e789c3\n88561e41c54a4baa2ba123deaa548f428a89ae0b 292539a0d6c0effff5258e2d4e0a19b9fb049b93\n0e5ebffc81a9e591c686f9a16f88ee8637998c0b 4b49e5b0f7e7bcddc755be53a78d046b3448116a\n7a26381f790c00c84c1b04a3b91d7f161884700f e2cde1499f509dc2c745f649652800c8e09bd56e\n933efd439d15fb2d0467f02e8a279d60effe7428 9cf1b19f1f4b41ad259db37811648f053b4ae47f\n98e7b5d9ab254749d0e2eed8c2de24c3096dbc08 7b1f2c76ec94c9da1f05617ff66a21612f679cbb\n1143c5f06136bdeefca39255541eea5a48f2d70b b60d66038ecdad096cf30b8d9202ac5f720ea55f\n264ec10f5d8ff9c17504737f871e36df299ffe84 8044b09778885f3e5f4a0444a208c1583e6c13bf\n09fb54f9e5d7593698dd416572dbd006547987e0 fd52877fb0fefda80b786d80480138209e21077f\n85b8645f23d8b8d2dd31afe8fafc004086d969ad 1247742a2b0f9c7f84e7c97d23735802bd08c862\ne6bd7844d4a60abbe20f194339a52a6057d53eb4 12ce52874d49763423cbc5fab0a8f2ccc8b7b2e7\n881a6a448fa3ed9366b262d3727ff802209bfd3c 5e36fc16a595049ff16f8444130a01c294dbbcad\nd363ed2a8caad05c71252621f7874bf4ceb98afa 23f0613241e879d24bac530bcc0a017e5fb00d8e\n49f1dd98655cc2012db316266fce1b3870bc3e2b a27dfc20d3aef2f5dd6195f5f6ddf347f1c4bf9d\nadb59dd630a0ae20a59842b0ff032196ed659b52 d44951ad918293d7bab3cfb659823a1d23647f05\ne782f176cb57f6f394203dde0ba2abe9f9563b3f 9b93d8658e5f56616192b7f3faa7220a1c4694ea\n4fbeb516622fc43a91bf0395ac5437010be32c56 015983ddaaf5fb5e460d95f526e5b0d456ac6809\n3bc53fc5da68d1e237325e13bb015eefd72198f0 cf82dee5a3006f6c082600b9d0659940c57cd903\nfb4f4fea96c611f8112e10a5cf897ca175ab1fb6 fe352956dbbdaa0bedaedcff0dbaaae985df1a9f\n0e732300b628076b15bc70a5ff82edc5d11e13e7 254853f9487c74fecad71fd5da3b95408c191594\nbb6e91e3fff8c5f26fc3c05e2e64523a057ed996 d7f1577d5703c032ed713f28931ca0c0463b072a\n2ec87c0711b50cb41deac6156ada8b1534fc2fbf 78d3375513d646aa31d6a2f1f4ccc0e8f6ea2b40\n4bb9f7225bd7d01fb7ffc2804a610c28d5851f52 68f127676202245b508f7cbf95b0579f8d5663de\n725f8cc356713ac21d16d0d9c56cd9935f916f1f 8779266300a9f327539adb6074a0348ef007841d\n1681cf9850b8e8e1d504db18c3e1ecff3eb43fc9 3d3a04df85f5e9fb225167a03727ba65bfa6719d\n42d3c091994ec64897afef0807c0dc3fe2db732f 8bb0eea26e300c9975c50e2ef218cb47ae4443a8\n955beee0a059b70a3cdaec122c9d407caf76d97b 3e2d4672b8750e8e6b5880d2c0c6319cf7a4f4be\n542456d30c0b8b52e9bb09f76a823e4b5d23547d 771ee83973d0f906f779f8772eed8686dfdfdc73\n1a7e489a115e4ede4a70bb9881bc5c940e190b65 d2b9d7f6f402ae31d818c8252debe41e39bf932f\n924fab61fc918be56bbbc6485ec3b43013018696 62d0d449336593b83932e336a2059098f85a08ad\n76ab0875b2d8777769278e290491261d96f58e1b 3205dc2636b6d8bba848a380fd73b643eaf40f1b\nd7c4073b9beace4405da4a060ba38abb55adb63b e96d5238f91ea1f34aa251389ded1aa7ba29ce28\n985b6c5ce504b3d2882535c178dfc5b29bbadf77 4dd33dc767d063e399bcab50e54cbcf9b63d1a54\nabb1293010bf94facc7e8f4eb8299714c65052be 1e107d8e302d8aeeaca0fb8f072bb5423ec37977\nc37158a6e86e1ed0818570b188b1b9ba0c21109f 20c8e4695a3f586eea902675458ad80111b22799\n157770e23fb403bed5a939a0f8055fffc6e8a22b cb3a2042c2d7e8d638a8e518ba47266496e11eaa\n3a042e0b72f6804ce954fea9055eb1785d0d61a3 d2730f44b277b6d9ed90ff01fb9b5b71f55ba0b1\n13bc661ad8641c6a8412f38213330507271b1b1d 0f35f44df44193a28dae11dcb7f8238ae00d6c77\n65ef6896d6262fa7e6f5bfa435d29424beee47c0 064d51bb7cde93679b7d17e1361d19983d68317e\n125bb516d867f356eb44970728a2267d76070c81 7684bf86aec0f84e2892863a947e9a0e56567012\nc6454cd5e000c55e3a2da3b6c485d566038311d7 0abb65f9d0db5318602856e6b85f3b44844550ff\n0d2e70fb8a5033f07ff0348975e82fa965f4fc9c b0612b781aa53daa96c3f524b100becc273cd304\n4459c0ce76c12a7d695be174f5040e09a2ee1082 bdf992a66d6e8f13522fcfca63dc4161037f5b36\n02af27bffe8fb2fba609bc75fb6542b5e6b2c561 ef99e581c6b2299ebc11736bf61bda035f168c4e\n0e064743f066a3811399ae9efcaf4c27bfddf7d7 f43384dbed8c512d4e3c7286424c42a82664771c\n965850d4311c8c3389e61c0481881fa57df518de b4ed02874cad131b198b83a43862af1600a6212b\n9a6398e0615272d725a3ea43cb1e0f77438f7aba 74d2a78dbdc039b5ce64705ecc27309021ea5d88\n8ed8cf5dd946c555ca7dc7759557e0d0d3c75aa8 abd5154becb3fd1ab8a83468c57dde563280b3e6\nc9c2f9df9f41eb2d2165760fd0d297335a00cd3d a702bdc0192e2cc08f5f4c31c234b139987948d7\nd1ef82a16908b7b2fcedb9b5b51d0aea073f58b7 6a5d68e8a23798aea976fffde53057e99d141426\n59fe7af05ca3ede489af5d093b98c67e92aa2a25 4d25edced9e649606597d4e68b959f3547bacd91\n61a474536d06367b81fd62ae6b532a9b87891416 63e2c8fa14574dc87389a7350b45942759b5f88b\n23c6f4f6005b8b5b051904611d880ac3f8417aa1 6e849f4bc21a4c3237d9b32fc79633cd33310dd7\n2e4c8192283a8198d72e805caa29e46dd005082d 0fdc32f552607a5cc1cad0e984b8f3e1a8012d43\n9e2c0d1758099b9dc86dceec6a004e03ddb9d352 6af2b442f375ea279b2bb5bebf2e9ac2f1288d8c\nddfd47d9b1b9276e2dc8da705311fbb33c4e7976 6caa3e89793abfa36f64847bfde400c4407a86b0\n3f7bdfc1905e576a743f45b1739accbb467ab592 b50a76d1f0cf6c9053d54391ba7a45514404a155\n92cfe974026a1a060598fe1b5d0c50f98d5737fd 80ebd323dbc0680b7a3f763cb986e5d7d3b40975\n0b132327b9ca12a4d14ef0be95bec0cb459d1c49 3d7d07d1e32b10b1304c4a2101f1a9f673b0762f\n3e15f48262c49f44e9cb6ef84838135fccc212d5 358f19b4222f903ffcd515836a9970df69fa33bf\nb768814b4a7c8dc90e0cf2b4fffac09ead728e9b 9f30e899a5e74dd307b72676a2c3d265504418e7\n54f574946419754a23c5481192b4db81ca26203a 0d2915a6a743672f55f93e89e5ed5ae8a25f75fc\n443bee3451bf0a3ecb9cd3f363475c209c1c83af f24aaf0a0475d21ee9b17e700595749b7d0618c4\nd77467bd24518c05bd73cb90abbbff99a2c5ec39 1eb87b5b22e68d993de10e7c75c09db0b69c0dfb\n19ffa7226e9e393cb4594f643729bd1abcd894d8 b880502dee7efeb8257fc765fc7b4f90c975a19a\n9da7820ee87655bc3fc10fddab51155a1c412ada 7843191c0c6ab6423b8a77f3449c2be0b95fc37d\n0eeefabc4b3d80a8b30af35fe6cf26d0681b9162 05248df0edc063ee2140e5072497d60d6ecb833d\nbc3ad5c2c5976fffe1d10894fb812263f6fdc2a7 77ee941121bdf31d94f5c0039dd656102b71fa81\n7e798f94d9d4e2055a2d35e71ab2555988cb08c8 8f126a639cff4e3a1999c192c0493cd73a0e4a61\na6d8d62cd4d6b28f6b705fb820c1ab5d7cb1e6f4 342948684fc20acb58aeff778c6991d929c2e8c6\na7d38fa29f836f99438ae29f2a8c19b1ae6ad802 aae61996d41212dba3176612d4e0ee8e5f9d7f50\n335b2c468df9624768d08a235de264a22ed0272a 67fd0fae4730a2e9064d4918b436e246a412188a\nd60beff3f1a7a83681b734dc36dd4b1f11065b51 9338e4178c3b2a7dbd67c191e09cc9a011175b6f\n9e7a9d2ce33e9a5bde53af090669165113fbeea8 ee0d9438f4903ca9f81e91fe3d3bbe9ed542d17f\n4e539f1cfb8066ffc2d2ac8b722fa5dd6b144481 b2bbeea0e56b6025cbd6f1bf8b9fb293209bca2b\necf9eba634f75ba48507ed0323896b4478d89c5d f4f4b26fcc1953ae739fa579db72bac2780e59c2\nbd214f067bbf7232ac53b1f4d716875fa52ace59 832a2773ca95a4ae637e1e0430899894872aa2e7\n03c1d03f0324f7302058d63c3095c43a92d03c97 9f542a53319f4c4ae25770d279a4746ab7611f89\n08cc5f4537692db66e5467e710a404cc049e5da6 9b7521e2a4dce3669d706dcf47714bd6e5ba8183\nd6def29f9ec0e23ecfadf2a3e08fb8f94ea4a6eb fabb1b3a7d594c55dcdc3de8f474b1532481cbe6\n7d33eb321a72a38ef745f98d0a0116bf8f063b00 8eb5056516b12cddb6f0cea698dde444ca626953\ne21a4242dafdf29faad55d18b79720dad9825b01 dfad4c127ec6e64dd4d3ae995e0bdf693970b184\n3b0fda80032b0a2d4e9d3096a3d5cff07a67790e 3a478f7e96d90bf148e9f01fc6035533fb1fb19c\ne08c0db25752dd36f906c2407d34a2437d63d8af a7eb387739692ee5bf8cef5305d08253c6bebaff\n4c462de025ab05445f11af906fb6eeb55709a27f 21943fa011733ae06d100649ea02326e7f1b99cc\nc43b79b1c7b52042b09765919301e28ae1c616f8 b6c8d933faaa435e1278e6a7015464f9b8aa2cf0\nbf486e6ebdabee0df6d9344173ef68f5e94b583b cb5084b008a9a1e8ee36b906492dc797359e3a1e\ncc8c568c1180f46c3d0979e3d69d58ae2c41167e 53760404a68d42c4ea5bacfe0b38bb67eeb0706b\n789e8cf714c4101c2151bb8078697f36cbd5bc29 c943ec6b7b7dbb25e5cdbb8da2be7ea47602df09\nc90a416dbab4fbd92fcf0f6827feb5dfcc39e65b 7dc95948e9bf31b41ec0f581e6daed92e5a43d4f\n01523a35e5b59b43243cd3166817f8e2c6de368d 2c3b2cbc8243db91713c6ea6efa7ae135fae87f6\n737a9bee13ddb32364fb00e700aec68deda4f835 1cea9acf4ce68fb9f3a1ee3415b77fb6e9ea8e83\n297a103a552e1b21088f294bf00b39de031b840b 69f3f495626197619ad8113f843834d3efd678da\n70acf977b8b19d43d9caaced1a822865ebf15b2f ef9456e805fc803448fd4291e0d4f65b80fe8cd9\n0842a9e31768e68a8727421f49c9764eac02d1b6 843f2d8de75bf6b67d7ddd2c0ece3568a5cda6cb\n0bdc281ae7ade1b6aa967c54a9490fe2af5286e6 f2c73824affac2347e7a40299ada71fc0b0b793c\n0f3819db8fe59a5877fc3b5e340f21f9ab857363 370f4a9c0dc900edd8427384180a1a6ce2b52bf8\n859d38016e1a6fb75d8e972dd05f501eed38fc84 d3bfb7949ea84b3f59f9ea32564b29ad04bae05a\n66aa04f986bb4052b9e513626772ddb44b944b82 08a91a30c873f0ee31c557b7fa618729e26a8e01\n3769aa871ecc6031a6d975acfbeb97c76ff0bb0e 9673b31c214eb246134a512b7fda821f98575b6d\n2a22eb7029238f0e0bae26e5380123ab187d830e c8459fe637977d53fe614b0f44035ee8c48c91f3\n337949b508e8028a1bd695a9ab7f5fbaa953d95c 1f4ac97fcfe1a175f455cd995b55cd457caf9cd4\nb2b88b22d3d8c686bfdc77f168b63ec21e5dc46d 71357fa293e0effe0aba102f3d79035e880e3636\n1b871b9e04c0be08f3ccd2dbe6d1537c06375bcc a1d2ffe1fb07930e26e769becaa09c60149a04e7\n427831ee411d0b3ea7966322e45a2c574a15c28f c853deaeb6a9d0fb0374c28ebc952893c2066fbb\ne0d530fa9a4a6f388b0ceeb1a860e7339164fd9f 408c0e8969db02c0d315a5cc43c1b0bf5a6eaf24\n46ad7bfcd27e038ad74d39e302f02db033d6f8a5 8488331a4823c1744a41e554ada9bbebb0d31c0d\n8d182bac21553453c338de1c0dbb47ca2aee0c1a 4ea264c2beb30379822570b13a9bbdb78cce4d5c\n31f2ad092fac188cf06438ae093259348c691d94 9366bf55acc09232062b80e9d7336850cd3dbb46\ndbd84caf2eb42b072fa7e439a2ef7485b261f82d 67330bf92c70cad95af72d06579421696a2ff7cc\n7c3c61b2dfdebd0846aad4b2e6a119070a53910f c190bdde3c41d312520d50057530c68b300bc440\n814a8c400dc83c96ef747768b44dc57666d9964a 7da5b70eff1385d51df49906f3aeb57022981a8c\n499bd7eec7c80273828854bebf6df52e4ff16b8c 9ad9f6e59b8791e5ab13c0894d5570968b7d70b8\nde2356d7150f919cb745a4ee6d7ce24c47e8eb8a f40d1057be40c5c206219434f5c326af261db558\n7b7cf5cbd5d6c47e6405f793e99fb988d7390ab3 614e079643e26c5e2f0d7cddf7d54679907caa6a\neb96676988e4897737bf3ee69dcce5871113c160 9b750fb9961629ac5409f9e4538ca85282f1647f\nf8e1e261683188555e27b8811cd232f7a75548f4 5e7745737ffa580f970a406a20ede979a7b8d835\n5ccfb9c03aaba4ec19d44c4e6e7ebd84954940b0 5d49278eee868ed68d1939f0289f70ec01b26d1c\n6bb920c3a20f18c0627dbdaf67b7f6ae75dfc988 938248547af39abbc2b6b2b1526b852e8aef363d\n5e88e6767245604272e9cb79117887dba922a7ec 57b016ca6fd8e74838c9e5a7b1fc42285de9302a\nc0e616221ba6640774baea9360390fc341414980 4a0952e0d176d0b0da72690091342291a1af79e0\nf8ea66a536e44b2f5fde529fc2b0db5bb7d7d272 3f3a46151ba0ceaeb135cf3d4456d929f7fc5ac2\nb38896c086ac0c17c3549aab2302283914bd98ff bdfbc74fcbfa019124aee553c64e2b850b5ca986\nb752587a4714c0c0bca0a478cd9e0cedf90a7617 4e6560a9ee33deb240bccb2a833f8fa8f7c2d79b\na15717a76d5bf337c89b4fb28ff5f6f39eb74d9b 6da474324d3d4bda74ef5363eb580b84ed596429\nf807181699c381dfe73341187f3b6151d15f523f 0139979ebea4a98f5fb49b802e24931f90c68958\n70b96e68092bedf000e719739e33e4f2aa8298b2 0c4c8e1e2e97498a0afccc50fd59d0ac91d431e4\nd60a4114164430e46a40bfd452c66368baccdf60 56936e0137b3a158fc9204a24dfcce994bcb09bf\ndde224ecdcb16e52638e0f3675375aefe182f938 c4988b5892bbac116300bd97714fb3229439e440\nbb02d6d94ec4716fad2be1d56fa0f8619b676a5e be8a910e1cedba3acf9af65549441011d3f95120\ndad1721634729d3b5686aff2b7aacdacb9b51137 1cbeac166b8ece9cb26a51a5f12ea51a41198e33\n0b0f52e75f04c0bff7bbeb16d86b870ff8b11e1e bffb27b0433d6978cd2b3b39b2cf0dca5b000bab\ncaac158c4fe43c825fb1b5aafc3ead328cf87fa8 ae9dc429b016a57d507dc9f7c1cc469364684312\na21506aae32521d1863cf7bb53fbe358ea763f2b e26b81290c338da0b4f4780c9c63ec2d08adae84\n44e26db9f06fd1e9d2cf2364e3a5f725159289c9 bc2d4ac0431080f4f9ea90f4d1ad7f1008023438\n2b1ccab771d36ef44ee501ee33aee4c6125c496d f6d8f38c7b723402ad0f96d2636ff5ad907b5836\n544e7e93833162780b3cd309e71ffde9acb7ca9f 9b928d5d30be3ea4763b50dbd221d2ffe43d85de\n38d58306dbc3acfefb770d9914edccff77ec9d92 8bf2fe15f5f4e755239ef330b8b30259ac6a2967\n9b4e62018665265c5dc7d0e7395ecd28597a1c42 432e367a701bd149081190f3f0ca1b9130d2e915\ndbc33b885c423a0991a0e24367a97939dd29a2b7 86ab1b4b92491c9761d89b14233c9cd6681c20db\n7bdb1e024f36f137d9c7f58f683368e104f9e888 6671685c7f260a297bd6cb2c9edd146efd481f2b\n671ecd01edf2e5fd5aa21d2aaef9a4eda446b4e2 f0b11e34e8149c79f966b860b5dae2141de56349\n597b7667de63bc33b77c237957c2322395c2c2e7 ede241c6e443eb37fc09f240afdd42eb8597a44c\n224ad01821b930ed8e1934da0babb24721fd7349 0e49eff32319f0c84f75235de124e89bbf3973c7\n3fc170b7958e60b32fa03ce9d09dd1fbe3108b55 a33b06fda0bda3bf251b987ebab96ef8a7d07183\nf797d6a3ab440949ddd7f33bb064a51f0679c693 c8499d0694eb565bf73a010224d3b22b821a3f46\nc651f57be3d1a85a900a3294c79dd2e3bc55a0d0 0acdcaaa78a4b1f01278254b6a2548e05ae51311\n2866e4ddf70775ba643ba21f883027fe648bba4c 66d8af8704c82ca95ca54e9f0c6c7db84a8d5980\n3477319e1925f60991870ae1577555c8a81b9f10 9a5e5010ca12128784cf9b78e77b8e0adad25ee4\n5a6184ba3113e8a97347d6e51bff585e385f4f77 fed8b9d6329b04419d5b5131b0dbd7527f4d847f\n9c92793787f07d1b5cbc5b038ee1e4be9178f510 bb938488a22e33c64d738e12acb46c06bb372e32\n40e3f34e21011a2f61f79fa7d5f2ce53f07b9305 869cd1cf190d649638b4f8ba26c8adf90609d45b\nef0d2099d7edc5932dce41e4fa44f29471f755f0 13fec7b3e9165da023a706d3682653756a303134\n9ddf8cfa46a9cb63496d5fee3eea654ec8b5e1c0 7e8333af81a95a3ab23f33c7845ae575f5cc4cff\n332a57e8a23e572aba545712f38da34fc38be19b 33f86adc0b67d48386d8d241d9ea786c5c0e1948\nb7559b6e6902b68f57bbc126b7eccd5e5dd1c3b5 0151b294e89cd483d250848ba58b69303c2963b8\n72d9fbaf71fbb2cb7236d8648399115c56210315 e9c587bf1a106a3482f139317358b60c9f69152b\nd879b77123f21430dace0e24f192be40470a7ca0 5add2485645fce9fe96aafbeccf3dc9d62537a38\n50dcbc21ae325ac06df05d7c06605b417d00c723 2c5c886c48e0df01cbfc5483ee6b05e24dd55619\n9521ef4c2a95da80f974ebab33b9a3648e6fd1c5 11e0315e80c9c920e7c8bbc1f59676677148f95e\n17a1b7c6cac6ba720cf2346b40b93d07a68cba51 e9211fc0c990bf913cb700ddf1c6f93e845472a3\ne4b0b8dc7246c696d0acb8c3655a25d62215c5cd a5eda76a77370a83df9b57c2a605a37c1ed14a71\nf16ceb2f962eef89f5b9f9edd399a3fb0813977f 7818ce7a366b27b5f21c3d0a7e1f5eab02952a93\nc71eaa6cfd8740e55b102ef82d835f6157cff46e cdd4c124cb24be6acade555ec1ee4340d456575f\n304ee637b99586e925dc35e639f6989ee3dad7b7 5283d075c8c4efb724a6b5dc72aed312cd1041f6\n8a132faa715085b60f3578e15793f6f3595d0f54 4e463526e9b0ba064ed1b5a59b2e031b6d32623d\n424dd5f2146ea80ab917a4a5ee963ee6a49cb4bd 1c04d1e60f6b96485a62b38fb006c28266e11098\nce4e4a84d0e762ed43931e6fb561cfc1066ca32d 3dfd32aea004b45a2d80695e8e0e276ead534cf4\n8ef19c9405b1137ee5664ca8da97585ca3877171 50d2a22247b7a73780a05fd39bbef505c0fc7e54\nb9ef060d32e654c0a970738ebace766789746b65 3d0d27a37ea58dd1f0c4a9d9ced13d893cc75ef3\n4df1b9a1d5b68c2ba8e6cbdacfa37345f7a7d8ef dabd557d79efbec9719e373e51a23fa110bb2e11\n11332e07258bcce2b36a6248922c761da8de6400 ac8e8c3a3e7150fb22b824d1acabcc40369ef3d0\nd0e950f44dce39788f15a54616a5b02df89728b7 2043d53c409faa3f81cfb9199098be7c73e4aaf9\n15c5daa0680f716c84fd498182bf216da5cf81fb f133bef110791c8e7546c4b669f2cd610e28ac5c\n56bf7fc444c2ada3ab78d577b754bcedcf983506 181f8418df6bda9fb12fd330859b8dfc847c0628\n4cb5ebf36a7fe8ce8f74b78ecb1dfaf9b4eec62b e6d30fec0b2ec3eb172f85c69f1e32636b069ff8\n6c3501958b212a29789bf40be54764f972e2d4b4 da2997586d95bb4e3c90ea3c313816a894a73e4f\n75eedfa5a12f1146dbe94cb5d712445433e1924e ad02438d8e9931e913f41f7d19a6f595c6302146\n0d1d21dbd768763d59fde829fc60fef09bf951a3 0e0f1979b14a9289f72762e72442393129db19d3\n47ed9a145ec928a0c00762c90462f8aa4b0da57e fc66fbe980f3f9a8468bd7595a0712acd1c70b0a\n3a9e40799c8038ae887b8105e6f2c9345716698e 0db35c34794af765c6343b1efd3149306708ee6b\n89d44ac4673304b1fcb8d09be2190a76d92fc253 ead4e931f08da490dbfe92af273aba7956104bc2\nf84747c76f15039eb96d08884dd75b881030ee55 13cd727341b0146321fb28eeee256cda8c7694c9\n3e773105cc1f7917f3f92c7cacca206e685bf9e2 9599e444bb2fd164b92cd52c9cd59f8b7370d155\n3ff713d0e12d5b15bd42010178335945b46d7a7e c3e5053eb39873456d3b57f02263c439468902c4\ndac8702e03b92906baf277d256b49dee1fe7c891 d200f582a8de5820f14f7a5b7c0bb86b6e961555\n761fc6a7671502dd20ee85765caa746cbb11ef50 ae3defde5afa780e9722752a2ce99463873e966b\nca3390a9a714be024b18d577c4478bdde843a22c 4a5b2f64d1e4ab7049cf0d2f9b6f0d51aab1b8f3\nc22e113546f8e890b6362bc0725e7e31dc8a4ec4 8d31302dfc0d5f68a365b28c96113db3c6d9021a\n344a0c038857864c3d469a6afd288a7d82ab691b c233eee37317f99246e15933af1dd1ab4d42f868\n23faeca3432c7231de550bd388178c065b8516dc 7b0064246dbe0cd1480bca88657da5e1b8df1384\n418b8016e31d462ebae0e5db8774510a2294b1c2 870f5ebc836ece2d6a9ded20037755cbf9d32157\n0089c1815cd6fea184a5ba2a58f546ce2302e180 d224b55499798916731266a27120ee1cb1ba3490\n7cb33de419c69b4e21efeb6e202489a760bb2ca3 f96b83a47abcf8cec17ac3d40cc0dec1f9a0d8ea\n806f884c223a73abad5b61f95b233991f94cdea8 178cdc21d2002814325425c1650ffd3eb1e51868\nb2cd9bbc6bd0b7a3e45d4c33425a9469bddb10db 5cfbc152c4941c5160773a3f3b6434403e6e9d61\n8bf36812d9b7eda4cde7b6c1dfb22e21fcdb9f9c bff3a5e2eb137d474759c54a096f1eb3951ceb48\n4e9b6ff18457fdd49f75ef6088cebb7f6d15d4c6 780ed06e2c99cb5419ab9f9a6997e28367f420b8\n49948e5e0de238e91ba74163169e37eeabb6628c abe7e675a6bdf0a2a2d3d6c5ce9114519cff8eb0\nfd6ec607655530a7647d0fe07e69de3a8bbcb483 15c6ee70d0d130c8bcb7a44e7d2c5b2f08052b1d\ndd6a952b090b276b9cd49abb1d7dc3785a0fd501 b9417634e3e74cbdf3b1ca87cd89ea7c6b8608e6\n330c1ddf6e68dcf9c5eddd56b7cc8defe7a2eb37 307a8647e282658e8477e2d38fddc53dec342c90\n81470170b562e8d71a954c12628f3c1486b0ee79 a4697904fed77d27b5802db6688ba0169d3fd6bb\n791a1f08797ef126ead63a265fc5d1f8e595a29d e387653f84394583746fee76d33ef7a8f16eabff\n055cb6c31ebdfd3d39b1c714ad9d3357609c6fbd 470bca701862abb8dd58fce703223d055bc698ff\nd56d7349d640f478b5321190c32e7ca139e43224 80c8f56a3139a69ab1ebba57cefabbaa2e0e4da2\n3512941eca1bd7efd42d14d455634619ee677cd7 490d7c259a6eef52a5984fdd378476451213c5f0\nf1355b3797c5dbe77dbad4d0399dddb85c4aee01 d403a396aa7f39642c80e2a94255a605f549e678\nece6d804047456ded787b5bfd7ec62196863aaa2 10f00a0b63fdf949a0e9ffc898aaec842843f3b0\n06d13446711bdda6e827634630178606e9b15074 762c6585d26f0bde0fff5cc68003acf233cf3493\n77f98c18551a8d1c98ce48275c8fc2b22c47534c eae2ccd9b8afb0d0a5a91039cd723672e563d9f4\n41ae2846d95e9715924c7a61e8dfd88f6cd9be71 46c9bf909fe0e6df323f76e6cc66cc419054263b\n7a100366439453d424ecf6d06ac2282e5eba81ba f9068b6476d39941efb9912ccc89a5072c8ef61c\n5d1e074b308a986a03db3ea33ca743d42888212d e4c68ae62756d0cd17ea5d7eb6fa901292c2e095\nfe8e97bebab93938820d8e6559f56d9bac45c7ed 6aeec0407afaa6b345984e1375aaeea4784cef64\nff96bdab929ac6337b736a1ce27ace1c84d71c25 fbc8356af50e539993f6745a5ce86d37cfe6ba37\n3bf1d569655edcb3605025a0d872862ce17fad9c d394475886ecec115d50ace2d8d3bc0afbd3e6ac\n72368d8d28023e04a3ee8f2f6e234faa45aefaeb 3eba2f51e74e727f536f31b6469536c4c824b96d\n0bdb23c50938a1f1a7dcfbe5de8eacedcfdbc45c bd76e69155b523e06f554772f9baac8b6e840788\n85554fe2606887d2fe932a6adb13262c0c81ae1f b98a91f601329e202558894cd201ff290df6e5ff\n2751c06f1a41b6d27bf08c535b37028b022faf5c de98c808f1abf087bbeeefcaf1d006275dad3193\nd6d6ea612fe7a98f6723ecd0386f9dee48d89707 5959faa8da3b975c6e81425ff82aaeed85cba717\n6ad0f5dca812107d6ef0fa20455a2ab888ce26dd 2c9f5fbc83eae57c9a79f2ebf3ef22380dd48806\n7112aed8f05726fec1766bd996aa63867025fbea 2adb7cfcc709f9c8364131a962a40cfef1ce7adb\n459261f798f296146ee4d257c6216a14779e5e2b bfecc91fd4497b5dfd33b504f6570388d3b10899\n1088a6f116532c1482a5c26fef1cea39a045c03d 920655608e480929b19c54b88a900e305f96cfaf\n5184889cc8bac21f23ef3e949aaa13ce6c16a377 393caa2dd0e8ffc451dd31a7f80d6d99f618dde5\n7343759869fa01589e2df01a56502120bbb0f71e 0c42570c89929e48def6ed8a6fe6c52f594d92b6\n9fdb0804fc7d85d40f5aa30e4d2026582668e039 5e69ee58e8193cd244a059277ce62009e40d6568\nb6f9847c29fe240b1be44446fcdc46ba773021bd bf6d53af35238d83efa13c6c79a1586107b3cca9\n90514f1c7e77b1bc8552a5e337d75232ebfcbab0 03a2f1205ffef74932ccfb0b126c72ab66ac193e\nd9b2943bb1cd5c6f4ffa3ca22162408e1976c710 c300f942cc72de9e3bad8fc5f10d92e41e6c433c\nc3250eeebf734d9ce85744e844aa8425c56cfda6 6b855abd6942266939dc956dc64dc063aa253faa\nb114ff14e923689eb49fe7f474a32523b6289eb1 b543ea711250c1bc7a5988788e2b8e7f8f2b2b04\nee1aca22fc0d24cc8f7059378d8b524c986e73a1 6de828c85d05212eb27fd453eb8e788f6ddcfc61\n9eb20e884f3be3df2c02ec4c931cf27d37157530 ee201a8294e358e696cbe05147bdf30d86009b2c\n86d9803022d269ce37f52823b4aba11b7e03a9d7 5a0b726eb8da787511cd7da64cf131961f3ee823\ncedc9110751366afd2e7e3763be996480445bd9c f8857a732daef125dd12a9fd8983a7a3f28ef420\n34060e225d918b7d1cac59c962213fe1f58ce72c 34957770525e56e3a2d39c3b3d37a5ec1645e284\n9ffba25e2faec6189018489e3b93f6ab775c4a2a a9b3aa441f129de358b9a7e331f4c417b98130db\n46ef63f65878dff7decd45669f6116b01cb043d1 81b076a9b98e3a2a69ac47a434bd8ede8218b84a\nc142c6575e5c0991b0612b3ca7aa12821644b939 bb320869171d9b6bd3981e64f329165560b6868f\na40df522f3dbea106fd96a0e21f3707dfc5fc238 4378bc6eec2cb3e519c58d36cbdd0b1c40a8457b\ne1097e99bd1609ef73554e0b370f758f7cb5df22 ae26c31342977cfd0748107ba97cede5d7873d4e\nab185ecbddda29c7feb22dc2709e6bf6afa9865b 7f87a28124e3888349b713f1c7bcf36801650429\nf1c1767e1f3f158d49005525a8cf250f7b6862d4 8a7c918dbbe08fe4ca7928f0e350c54828dcd3c9\nac6aace8c2a396147ac3a65dcd9f8f52fb82146a b1ad0c2c310ba083e01a1f8499917e0495765574\n64d621e09f3112e81a94461122b5e9ff3a3fcf2a 76dd9995256ca944ca7f62e64e8b4f34d5a0702c\n184cc8fbb1f2cffab053db7f928e9b4e03c84b9d debe5330d48d2b5a48e21b8507d6ef56344abf0e\n5b39b70baec4c9d4d70002c8a8c2d233a1b3ea40 21439425718231b46604058ffc0ee52e0531af01\n456ca589cb43f3c2fdf04a6d6822ce67fa0edcba dd2e6ca1d87c1ef540cb4b8466b63db64c78d8ac\n274b3f3671f89a500720be62699f034a8b93896e 2d442eb93bb527f0d4a9342c3f81a5c44e544474\n6fcaf213460dbfd57a5e4c1e7751426435495172 5bb7b604a5dcee25ae42c14c15393bbe8d9a1e76\n01c79277afa717469d47120e32021dd937530e6f 21c30e87cf067973b640ea6e2b65136c13e6d875\ne0c7b351bb1e322bbd63cd6c0717bfe063f061a9 42b191729f53d40beff6617428c946151a6d3efb\nf3d7c8ece42ff89af7e4b1afe344a4bab79a9a8c b29b0fc15ddf124cc7b065dc99aa78c1422c6b5f\n5d2f2e90a6b78f14006e4b2d6f54229e134d118d 9767b2314955dd9900074fc6492f72d94ccd5e59\nd9b8aa49716e9d61734819cfa3d026a64de39f01 d2bbd7bfc774d37d2577b61868248b6fd3d64673\n64bfad3785aa39f00264a7c3f9369c67cba84906 3ea86cbaf0a3099aaaddf482e18aec4ff9ce7df7\nc171301c907f0260ea47f1151d2b6e18856a27ec 9aa212cfde965f1a03f73109ab75943ecf26ce1a\n6c1964f9a1eec6e3d9111d417d510e7c0b719699 870bb98be847f8e5e5042c7f047715788161e054\n5671b2f0e5e4dce60723e253ac50248c79054e6f d05c5bf0070d3d8d42244e9e0b5452a66ac55f01\nceb9c85ad896b66ab807465b8021dcf8ddebf79d 6bea9b63985a820f3a852a81026715596a15047d\n2a804c80755adf71b629a348ec555c0f8aefcf65 1717941c97205dd58f8d75b4bf9731cdb8f33b52\n247056a07335a69ce1c366590937b487f897fc1b 6eea579963b5c23feb9ee354841832226293309b\n8667094547d2ec51dcbe59febdba2fb2224b82bf 7aa117f70661237432cf5009de6a3ea48ec4a5ab\nf33b2d53ce2a08bf672c59c98ce156e67873ded8 3565913ac0972b5a7fdd0da37c5ab08889ae93c1\n6b1365266b20ef612d9e3b7828661f4131f8d973 47b947cd94cabf864c47e9b7cd8aae17dc6d4af1\n784f71caaa413a518b1c650017b0c9df2f55e106 ab79b2741cc2822f713b7ac876f53ebcdcfc11aa\n07b3474c3407779b970bfd1f1975b2507b6911fb 6a9060ad235f96c96a95981b2324c8ed5b958878\na06af48407fd0ffcc451978a5f983863b5e340b1 91647529d4f17d647053573bc9defe04ce2f88b0\n40e8af215be2992eaf9599a63163e21bef5fa346 8631503cf3cf24298d7ac10da9a55c85fbbbb78c\n47b22f534ece28e6a7e72f0101752e19d64611cc 3514ca3249c88429d20e207b8b809b8580cff637\n73dda637a6a7b862542dce077b74be66c8e78b65 4a00107ca34c3f792e490470ecc289e6801f62c1\n0a50b0947d8898ce2f0a3cbc1bdda7d6557b175b 52a1aa2759e85bb6aae0af0c782a3bcde5dbdea1\n1d630510ce8a8a5bde6c335b9069fbc12006a55b 833605488369a7325211a58168edc397c85371de\n843ac85825644f82ff822cc4ba2dd283f6484923 ed46add863eb1695dca9eb0f5cb5761c14ac9a6c\n6a7e75953fdaec4e67d9b0b18ffe559fc89edc28 f6a573736e7f3837436747c3a4b40fdf50ceda1f\nacea4f8ddc62d6878f4a3f4580635b18df82f4c9 e94ff2fd18988d28e0ae5b32fbde1b1c13e0f333\n38544e63ef8da972e1db7207ca9dcb9eb2359822 07875ff2d765bb8d0922589e968c2bde6e85a281\n79d8446b9baf4b6ef4869afa214a1429d4acc107 ba92a2060b87251b150cd9269a23d54bd0b49077\n446746282e0d104cc2cb806aa384fd20d5f9014c af8d995a5e9928ffa0ad8115584b738aa57b7f90\nd487af4c8a8528ec3eddae87ce1dacb92596f361 806c91e23461c8237d41e5c29d7dbc74f74f2d86\n7e9d86233942c22fbc47bc828ed32114190e9ee4 8662293c3490a48646e399d00f9592db608b5e2c\n9e2ac6c4750fb42eb5b7d2453d21d8a22661c060 1c3df81566f833b4dc5e92f66d3fc4e06e521057\n36fb246281475823aaa2e2028ffb3b778599f66a 060a4d6f85eec976407e72dfc8ceac2d71d710d0\nf908bc125fee96b81a94be0fa7049a7c724e48b4 31975750bc8e062cd70d2fb1d20413697c3fa8f0\n45f0d709a6680b716778f3502a3a90113a498977 61f47d4a6d621387872ee3909b01a850080eb462\n77664870dde2ef9fadaf2bc302c0fd61740aba9c 7ee43769c21caa34202e296ed58ed54d64222038\nde7ca122bd3a93da81e578c92373c1317e24f498 a5d1acfbcabd3efe434e722619e3e5035ec12a06\ne9206ce3e1953727da843e1fcb622bbb68c46cc4 37cb4d9dc6e36c48bab11794c81f85141b188e8c\n9d72f5b8217f9eee7f02f9b0ca0c5bd90f3a9421 4ec97de8dcc674aa5d8cd7b71dbcc7aab4df70a2\n26e7a921f0cccc3cebff095fbf0313fcc7c12efd 91613e28b2461e3da892f484adf1e0cc78f013a8\nd9cf9ad43068c48fe107622a38ed84c9fa7ebb83 10da8abc4953d5dfc65a3162ce1b5b875148d5ba\ne78f09e96f459484e5026d610f860a2f6414b4ee c5bdaeab7064971ff46e1c5016350cc6fb31e1f1\nb462c09dbbb9e3fa0f08a7d947bbc7ed2ed7c854 8a7f9afccedc7835aa13088795d1487b508cfd9c\nf69913db9511f9c7d976d63145f31ebb4da916f8 3de50035496e41eb17d4e6047127c439657d75a5\nf7c191052f1525b80022e850e83145a700dca49b eadf2218ae6149dd3f75f5c126d229b4cb1c0c6f\ne618933607d0164150a8ec882ae9e9b938e7c311 77fb8676eee527c410b3faf798cffe862476b565\n1869fe8388d0d46678d35f0189406b84a613391d 27d025f4aad048a687fb3318ab52e18ac7f72512\n6c60a6c0b1fc2d6e7ec8892af590a0f3aaae97ea 25ae2b6dab01a1740b574d01696d6138b41088bc\nbf4623ed4efcd295ffaa856354a77d35599e5f96 d5413225273fa13e7b916c585cf370fcba963e8f\neca6e18f2b0826d80696f66c1d6827ce82e3b8fa 8e89d1133a07a0080a064a66fe431410dd887d8b\n53f5924cbf717edf8f51e5a06822cb3a0e18fa5e 707dfbbaf76fb9b41cf2b346e377b3c809ed820e\n093aa5fe3b0707534891b2f4f22fddbf6a625889 3a78d63631154393e1335d8866bbd5fa2edaed7d\n7ad11283308b00d29c248c24fef592aaccc34220 d318727e5a707e706b8144f6bbf5f1a0c3d72399\n4f012a19c6ab715d550c6a1588b1b9adc0813ed3 10994cd7437543553c2854bb79129cecacbbbf46\ne4436513e3994367c1a2305c4cb91c5f06f93f50 6467149885dbc184a7709602da6cd36163253654\nf0c344e285dc48e9cde5734ba70a4be91632b87b 16080e9f7ad01ab32f07ba09a8553e6f618fd085\n76005009c83ad1990d9ec705a297a585a0a99315 674993d12966cf29f21054c6088ec43a72982942\n3fadc390d961a340952d69da8e2a271e230b35ca 581c3d7bf94b633b8c1b1283931ad090e0f1a47d\nd9f702d7c8418899f2e9b817db76b5692c01f699 0105c0ea6fb754b8d74e534b55a51aa1ddae0fea\n704ded6aec68044f149a73ef987601a2d68778ea 9dfd53fa89384c2aac79422945ca3ef75c0949b0\nbc1cd17fba793821f4ee3554c2c94b00b0933907 c0199ee9776ad38ef88c86ff75555beba15c2db5\n7e94cc5a7987e9d93e56faec43f1adf431370d65 d76d485275baf2989db89043a66e7416c9a2fa8b\n659c5ba48c154835fcd5121742ffc28b01e4630e d48b4396fee34f5cc4ac07690398601988504181\n716c4263eb01a29ad3debbe84d287c4b7e5026e4 b8f663c942f5d8b92be07cacc538b0c65b4fc32f\ne17bda716d3c2372decbec4e3fee3d76b02b695a 4a3f28b4c12a32cfffcab13c7447d44da0fb1159\nac805c733dfe1dc3a5f3cf9856bac3a445a8bbcd 701d87af5300cda82dbc510ea3e728a54e8b1226\n5110e87ed46043e458debbf966b0eae82de86bb3 953f47b751de852767bcd83ce04d510f3508e371\n0df081027f15a4119136fb95cca51cd3d5ae0d1c 357cdf1d7418e438e904809dbd9d7c200891cd7a\n0de2c1ecf528ffa041b327a5fd2691267c8cec24 4b7c68cb72347b9cf192e52e57aaa40ac461c06a\neb4a86f595f40f01bc87ceed19fa9065a74ea09d e30fcb90e0d77a5325d5120195d554e9de51cdbe\na89a72aa1959384301df568f6b2f25abc41ef7f3 0d9c0e1807abc902ba22edcbdb9b8d72d844d110\n10166c7436d4638d393c71ff7f8e08574cb4bec9 73acf2343cd5abb9da0c40689a1646c63addac82\n54422776acafbefb9cb886d0f304a6c2abd83b9c 76c81732e90048fd31975e2de4513db76f364185\nfc5571bc5b5f9b48ceb9da0c8f63d3ec56fb339b 73ab0880b4679f9ef76b947db7088f6c7018c6ba\ne199bf2fe6fbcb9307b2be4462c8596b1589cda4 61185609e9d71dec9f85813a7fe4600ee93a8d0e\n60f256ee01eb0b388027bb07c87412a6204fac9d 441a5c61d5d54d7cd4ea5fa9f846ff66216f07aa\n6a517cfeed5c043ef6704ecc01f42213b8b28986 91d999be8394bb174c7bae79db796195e0b1f20f\n287b111c7b60a320cfe18cfb12ff0ba82acb1d70 96fb0665476a9d80144464202c61d4db71b1e4fc\n979d77882cb2787de9d691910da27fe4b0d98bf9 2fefa1ba534177fe7ed9a6326537fbcef7319c1c\ncc3aa79c6c8910c42f7de009fa31053315c9a77e 2cab6a93ff68164354eee69c3bed47be0c6ea436\n257c3bacfd5ff1d20c7cca285a98e3ef1f1218ef 5e89eeddcf96d631e474f88f5ce2f6b8f3e9dbdf\n978c5a1a96c8d57f1eb8a38583a3e32673df2239 2f7f3fb57b466395fe6eeaddfcb0c74375b6daa8\n1c5152853af4b794930ea35f237040c8c00ab8d1 10018889fedf19e510d43760a8546d32331e6ff3\n15ab862bbc2dddfc62619dcf49421a1d06f677ec 2570e843e9313e510d60b797b34e872f8da7f4a4\n385f121bb8e9a2bd76196a8874602db8bc7375c2 60f55fab9857e425caad380cbcd9a6e0a4663c49\nc48b91a62a181b35da7f0214de4da10c20755ba7 6f1cf74b543255be22ca69b5bd93dfef9dc19fa7\nf8a29cbf3ce9484c1a48ca0d3450c1ac00097c7f 5f9a510b4b56c853366c03134db84b3ff0097984\na2e0f1c7faaea6e87d0442220573a50c7cd37da9 26bbff10fe54234e801ec98dcc8b31988cc05e3b\nfca83369dc05f446d6dd3ec4f5bdca4c89b6585a e316bfbd23bc99618930008ed14b68d00372d032\n0d185163c19330e384f3f6dd63b4d78f27086b01 887679d3fd45e37e9aea259cf6de5c6d41c7ec76\n39e98a1ac51cb95d070f8e0d363fc0e723a99448 cdbcd2f70c0376dc564ffb5fa960bf363d05f4ee\n52a6601d119b29ec4369434c0cc1383d2970f6a5 5b6e9846106827d2f16a7134c363c20657563e5d\n9a66d96d1c4baa646de875cef8120bcded1aeedc 2ea1173c859e482f9deb3c095d195c437ad71929\n767b945aa9c3b73dfcaa55b565c58287a1abd2be deadb5bd85c5ae8319d6d929baeb360b203616bd\n731673c9e74928d3d282850f944c800b4456083a 7616545cdafec838d5da3ad2922abdcb2c196716\n4a3b32eced4fafe58400a8e70376673fd8d13d9d bceaeaeaf26afa88611e0a9f912ba6a289fd9408\n2f4bb9f8630346ab52f4f3e972e6a4ac807b2bea 14d590d4bb6e647947daaccc54b099d3a9a28370\nee940f48a598fa5b8967e7ed6e89b654f17dc2fa f71a5262590252617f19e275bde49edbe9542d59\nbcea6a7e63d7963b602a34c18eef84f1c6897c86 3849ad3275f7209cdda8971b71cec33b14813b70\n61112ff359ae072e40b28f9856a18cd0c4cc7bcf 6b2acbb11619e891b72b5e6b3146fbced85b16e6\n9bf61c8656a5d5a5cae5c6ea4b56d8a8fc61f06a e63efcded809c23d29c68cc32854cdac7672e4ab\ne85340fee6730f89a480bdaef7fc94b815ad35f0 ab520f7322f746fde28c2aa56b80a8e5c3b555c0\nbcd4baf11faa1298dd29bb8523375636f0604360 0d4a81200977f84a5ac898c13db9863058999e99\na1fa214856abfffdfb3b3effd08519f4133babf9 073b35f4a8783c9c8fc0af3a5f034b1b9423f7a1\n37d2de5277edd61e583445dcb6167dca27945ca8 839116a7cf184824518c1e2b85b0cc777817ea7d\n876e1806cdb1b9aaa5a3846879b0b16522414f0e 4a28b97e6ad31333ecbde2b028ead468b1d4e4d8\n3e248f774707fbbc91fcc05032425d03618bc6ad 985d7d0921f374fad0884fb128bbe740f69f5fba\n8f511cece4982919ce8aafa7085da01c614af61e bb26749c6e652b8b9fe0f3c6df8d8094c1bad9bc\n04cb15b9779baf0dff059cb9cb17e2d3a424d910 8153c2fd675c00d62da1209e0be9371d667c09b2\n250fdc2acc54919af5f8740edd28b0cd56ce4aed 4b5a6c2cf016444ed89ea462e780616533786a78\n8ef6d8938add6b62362f9661d3224affa8603bed 64967be6ebfe6018ae7fd349c967133a09ff4a0d\n47a519feca5ee79500ff0a5dbe9bd1de0be39bbf 83846269b6f830f6de2d32a4b65050334c8cb14f\n6c6ba7d377a52b742f6e914d7d9a36bf47b951a3 942a1303016b8ff4d8c977ad06927ae756dc3500\nef1b70d342e2849d5534cc69aac646af552b090d ea76dd99423443f9ed1f6153db5263747b7a7a30\n714a11b7f293b6626556ae81f86f7840343f5da9 bc3e4021b3523a758d3b23bbb4083dc92c0fa4a2\n78551168676780e6bb7254a6440e7e91ba79db53 3b03957630eda7f9828feec9d22d8c92269556d3\necd836d6698c2bb149bc86ee24668442968b7a89 5c6c6df57aee936b261f959ee1f9322722f4da58\na66781ac41a5753f64fb353e16c1e946c12328fe ec2321b6b6d2d27f087252e3fc56658f2072cd50\nc74524e69caa0ec8c66b7e79a735441d304f25cb 5c56abbe9734feac359fce0c88dfb3c241f6d74d\n15a9f85f93b5b5f73212e2e58b28e9de43a74b5a dfd3cb6e50d16c8cea628747c816a7a8ef06d03d\n6994746554fff1c5dd251ccbc2ebdd45f8659d72 c215b6313aca590193cd2854122e37f1f2f1f934\n2ac3c8213b42545de65e8bea3320e123373f60d0 531ef0b44c9e692da4d660ff325f6d52a0b8e018\n1d6716dde89fd3e15145859e46e3ffdb0529f21e 3430160e9521a4ebc529722a2ad36b4f74b29677\nd30e316f48884e91b1c1c4aec2ebf627e523c777 422ae707994926349f58c02d8e925a81d7532a7d\n2054cfa5a04a76587f349133d77f67d0749882e6 a27b6e9e2118ef0890b528e180dbde7c0e360a78\nf9a76d7352c650f9e328dacc678d426af2fb478d 2643a74386d02c3f4075d2fbc4ed7b5cfd124acd\nd1ff90275c5b92e776812d343a990aea7fa794d8 f27298e794cf534704e990ab3c3f36f4b007a540\nd806f7e4fa0c200931c46f1c840dc0a716ee4d33 aa6d9cfb45f966eba980f5b09f2e2684a94b7f8e\nb0c29fe35c28e9481260e52418bf287372cdf261 89654b1ba84d2702ba4a6871e86f20642494ddf7\n7bf2c06626345416d6a957976005fc82b87607f4 49b066f8f30d4e38859aa62782aa1b9bce39c93c\n8816720cdd2f754b194288f6b9780a60ca40475d 64e43be50af3e9e46e4629874f1fd7f255413339\n6b93f334322d9687b49b4c0e108b5845fb8143d3 63bfe22599791b13accf30a6c66b2122d840bca8\nf35b7a8467302d79a01250d115145fd8418f3acb bada7dc42d45320c41064ef88d5f6408d07a818d\n679905a90017230e0eb32d12fdce667c837477ef 9c20cd997def813d79b68cb970a4d0f146408535\n9180568d5590312ae11a728c3ab9c3d4b224716e 1374b5f631377c76c407e502792dbdf7680cb70a\n5003e14737ad5dc58358cf6288d8a05ec3746a37 a0d88d21a8e09fcb4edc25ecec82cbcc5e32a80d\nbd0645727c27cd970ee007e713f37ec0784aaa05 2731b84a9c849b5066feffed42f4c61021d01b20\n47a5f90b3290c2bf09a493e8eca5bc7bb83aec8a 68d1bae4d4933bcc58512f63d068281cd55df1b4\n99b8d61ed38502cdf17454c788f4205ad5855bba f9f6205b1c0f0d3701c652d0938c291e223abb39\ne17ad0f83efaefce63097b4497d0722c8c0a3dbd e15d53e967a59cbb3d7fc5617ff63b06b0baaba3\na1866323be2cc1bcadbdd87188f0d9d11ec0316b 5716354c16b882d5fd09fe72b37755998088a3cd\nbd731aa6d020aef18e83a86986eb444b8a06e4e5 8cfb88f28f00fb6299cd9582742b12cbe6f19a6a\n6433d384029a3bfece2984696da5efc4f0256df6 7e499493b18770b98557dfa98f24d955aebc28f7\nedb2fe51a955d9a08e61267f14fd021435b8cf06 a6a8189df84eae200e277578a1614749da935202\na97f53df21560b77b8efd5b776df833dbeabe9c5 e67d3eb97715896b7e810f59e180d0674a087887\n42e1dc1eaf8932a4a8d3cc9ad1d6069799c904dd c03cd54f8a041a6e3edfa081b745109be51e568f\na3f3d70302fcc6de9a9d911b3ef481a51cd86039 03c96cc533c6d83d04226a97abd76624eabbdcbb\n50b991e40771fcd9152e0b0ed4d9931efc6ebca4 eaa479c428ed790f05c75cccba24f70efb022ebd\ndad640bdc9c49b9b5b8567bdd4e7ac365cb2bf67 ae9dcbad6aeccb17408c174daa6b4347db1e2b78\n88afed0ed6b6c74c21d65034081eaec34496bc83 0e0cd851317f863c1f902c9799aa6284773d6092\n8ab9801c1040af0f929d54e110a6f17b3ffd6f46 127cbfedb9975d4834008ff35637b97060129571\n8bcae64e09f89465d5421763e7999c592773511f dce859971ab3526ad60be5317652d63aafebf471\ne07f5f2dbecc832e6453f1e65e1d76950f498afc 4b7dd086a2727ab53200bc2bc3ba3b6e0f6c40a7\ne51fc8a4e180fae51b3d2dbf8d6027e024b942f8 02c831fa6ee858619ac7d24c1fe56db4dedbba2a\nd7baf16cb5abb07deee5be363a1f913cfc8133d2 1298a9d77602c5b7fb439ba647edd68ef3ff5c5a\n06932ec112a5f09944c679d1d5f2409a55095546 9a44c69391b4ed5e1c0b27446264eeb7274466fe\n13763d000eaf74adc339ba9909da40dad26f3fb9 62fc99e687d3ff2423aefe18684400869df62289\n8b282ea1459ca23d0a8c7df60a17014c8e033a41 6c88401b2eae70ef7d06cc1f5b957bd283dca8f9\n53d3ec22af9c631ca790be12e6117b7851ee9ae3 d47daed6af77013f0161bd0365209c446f752cdb\n25afcab802513b96fa39bf5cbb1293680de45ba6 8568061d312aa65370801585202b949fc002560f\nc120dc39f48b4f11835611e703025f5bb3cdefb0 b0bec241726ba3869ab2e19796f13d153f60ad90\n3ec7e05c63b97fbcade09e2cb5f46c883b457887 86bbadc0ff9809c54d948863d2cf9f035e9f71c5\n557691029fa740e1b193a6d5515b49187fbbc55e 4db17cc4897b0441745f601cdc415a73d0fe9cd4\ncede916efa06037fb069649c683dc378add5f816 db13c1c7cb09815a5743843b9c14aef94d2622fa\nf8ee9c712b3ebff0b2c1284ca10bb7a296ee2340 fed324715978282da0c96f84e968556a9c1b5209\n278105419e81259ed9fe06ffdf54eded52c949fe f36e36df98f3f3838e9ef4e70d5418363f4bfa17\na7e715c47e73f378f71fd099e1a3119387ba5a44 5cc41abea47413e337fc4ef2ec0f5820fe12712f\ne73ac11f9da4e1c508df0f46fa4c67eebab4cf48 fc0966c8ebe487831053fb6be94e3c985c1e65eb\nb21de764833e54f1ce6744107f3e071f3feef472 57ae9b2fc9d68eba3df27b92beffdc65d6a966d1\ne4b92e80e16d5777a07933dae2437146e2729a3e 96e59ef2b4115a02cccd29414b640116b9c9193d\ncd7b14d9cefcb5e13e5bd2e0ab73ea3f473ba5c5 8c33d36c42806211f22f1f7d5d5afd5721ce4e58\nee11b4bb8f4de463a3450b1c58ab9795f070c19f 23598ec42bd103130b664c1e06a556f24c561933\nb8c610fdabdfb440f0db690f248509f1bc50112e 51cf313f4bd00f0f7509adba0122de4ff2d3de39\n6bf856a03fae8ca57149a492d4030d9eccacea61 f7894f2382c0aa7ecd25b5ddfc696cca164e6b62\n598b741796e602f030001673c289b8d7edc07c39 3d4a0024cfd2ef551f9494eccfee010b5445823b\n9204a54c56eaea779e76d1dd16e53ac97cf117f9 80b55e871088829c95c1b08a9590d33b6185321c\n2b8ecf7e60b1c3a0205d1e358e6e46f4de1835d7 021a476b4476d03f0ea78ff921e038a19351da22\naeb18600e5cce6a43e5f80b840cf86f9a7def4a1 e209b83cf1ea822343c81fee7e4a1aca2f1dbb37\naab73b3a643db631f598a9cf5d0e83179f0787a5 cc8e7f4c2650e76a3af25a7ac770b5ea1c2ed1d7\nb52c766debde9fc1d90c288cd8bfb2fb9979d2a0 8417efd66599727a92af11304ee7d203c2781dfa\nad51832870ff7e80759ed41d9af8456603519ecc 3807ee74116da63345131aa6409f8cc3f233ff8c\n834392ed981fb35eeaa0c8c27e3587d64ca096a3 c649adbb78e7044fb61cb7a0454f47df71a16047\n8eb7504eb25ac34db69337606b7df7f298a510e0 82668f50196ca9d370936252e04c9c1d60e6db05\n0649e0eee538e1f69de2de768d3d04cd58a7d53c 176003445fa61092b51aa235c93352535371b038\n7a1f11f2cd312bf44df6e90f4d48ad972f673180 ce76d45d3254f307043766ed41a8d21c0f9cf0e0\n322d15fcf42f9548f8548515b2cdb15b78f7a7f0 4c04597529edc5a933acc72bf047abff5118cced\n786deea2c66514d810475b6c9c2088e51b499cfa f222fef0e0321bc4a08c702cf5b6f05736bfd2e9\n4da3d3e45f8b50fe21cce9c957088fa990867067 31950163c7fc0a37de3aa6cc70f27c326f0071dd\n4e6d0d3c7eb65fd71bb5897d0a125f01c2631b89 cedb21608c7a4cf867ed2166ea8ecf3c445f233d\nf74685cc89e49361a4482c2bf55aed785326d2de c61c8ae60e2a87de596e890aa1dba94962844070\n4b04e7f688fc73874234687fd213b162447bdc82 7f2e1b4546cafcdc59e901a0b41676b68f28d2dd\n500a0450a4a3022605326a634a18f0ded03a9d33 26c886eeffbebc6eef1ed8f68f2d37dc08b1d244\n2156ba897e266318195148d312330e56c73d56a3 a0413da3de4f9212bb5c361632354aef731fc6bf\ndf8e0e7cbb5296ff61e998bd9df7155a725c37dc 57e2f2e552621ba71104a8efb3cf79969899aa72\n5358f01cde5999724bf61fada604ee0b439df37b cb02abbcd860e044648d59bf1e736f8bd183adaa\n7f0d812913de3e3e634ec3c237d3d70913e79fcd b44504ea2f3ce566bdfc51b6cc0ab972b581986d\n157570b0860f908880e624e5d40367938b511dad 8992aad16cbb75ec6f9f8a8c1889ba614dd180fd\n80b3aca244889fc4f45fe51a391ab52b2b036f1c 163b96b93f5682c0245e4809493774a30d413c2b\n35e33f76d1e4d9b22d687a50712c135eb3fd8861 71f94536d93771247c1a14d0308fd28d2e99c5d8\nb5d8683bee9cd708e0535e07c791f4670596f949 4cf0d104bae7a00d192ba36c5452b547b1050a08\nbada3711f8ad7b72cafc1af0846c1ccba2e92b25 0042c3267c121bfb69f7a70373c5b309ac557cb4\n8803d5b0c27a965582e17b649b5be0230deb3216 c57700671373cc9185d7461b107792f6b1e43188\n5daf5f30d4ab5407873dbf9e660aa752db021d41 62838761c6596ce066c4cf1c971507222695786c\n3aabd8f057877770da2be617e253789974b1b82c 8c6f6450a4015b4354658a77ff6051ef47d00373\nff169d3c6caca16a8dee4ffdac2a6c8a3681f1a3 d9b41e49777768c51a4a5b2dd68409da101869e3\n7b80531f181d9b780477e7429d3d167d94bd43c1 83578ddd266f3f439fa185015ecc8a48466d7a07\n9b17af86d9075d05e326a7bc20b2d27a7519dc14 cda06f554357a7eada0dd02bc95fc1ee82985b83\n80f52c308d4133070a3d01663772272bbca0f162 9d7aa86b4a4e592285978c0051e563a955fb1893\ne4a07590e0dfa416974d0c31ac874900e4629b56 013ed8427b61a499bd31ee836d44b0691fa78bf1\nd2dba84d9ae8d8ab051e8340a50ada6797e96d1d b64501b283a22fd75aa6d3e5e5e838d52d983e2c\n64cb0d739bfb5ba98ad4777726c005cc3becadf7 f9f07d48420a8f0d211a3eaaedeb7888021f0229\ne021dfd4c12fc17955cd1d89798bcc5c22b50b7a 5641c8e1d0eab6b66c11cdf02788dd70d194a7d0\naac9c885a4404562e1de7ec672f18b3d3e5c7d5a c54bb2869578b27057bd9eb68788ef3e32e01df3\n648572f45609ddce188815e4f4a71659744978f0 e01b5b46d526c72d3ef5795e205dafd304152ce9\n632a0824e7146dc79c48e74f089039ccf5c38950 daa6b987f4545ab2fc5843b64d57e029c26a1f95\n9d663d12b576cfd2ee05d6b3df41bf42306c8bb6 9a7546a5960d9d10d227e340961aefc6eaa12f5b\ndcf39e802b5eee5a9dc18df2619069e648e67110 71f8bceedae5b33acd07bb63da029a1f21e38488\nf1d5f386be5036eb5896f0d719aa7835e81e1c73 ee48e3826dd6a49a314094528a5ee2d9879896cf\n971d0ed4ea2037235f17a39ad8e8d22471ea562c aecd437301af240120818f6ac6dd06b941db161a\n01848bf981d490154f77ae88a69a34dec6b4390d 712511d40acbddd60cf8c4752cff700122cf25e3\n0e235c4cebd5ffd5ca0995e1362fc7c50196d396 5e24c864c6d738eaf055f8af3e1f4587c70793d8\n34e33233bc1c351220f9361d3d5b45e6b2158144 15050fdcdd32b39f8444d1acbeb0e9081deb8f82\n42b81b736ed28231ef345ea0b350cf38c2257d60 cf4612172882819526e32341ecae2c5926cb4f97\na695c5c416564289bf51cbf192a12340a109cfde 4c1241afc74bed04c22fc20fce20dcd91791d7aa\nb69d9747081152e5794bc950f5291dc7dc48d9dd 52136faebcbdbde6463cde312f5bbc8436112808\n1b3808c0b5933132ca885cb7ffdd2507f32bf54a 2badf700e3db8c7c79727dd07e987aed503f3ec3\nd97cf8bea6da0aaa2beb5f0bbe80dc199bb75cf7 a4596656dededb729bfdd76055f025c7be3de7e3\n84ce4ebfa99555bdbbcb98e6200bed3af72a4296 ce62b36ff65ecde65000d1339f2633645cad33e4\n9da64ce69974eea901b9d3f323a55c8786b1a0c7 e77896fd8e6af9e40b051365fdd166aa1f8ca491\n08359a86dcc7e0ece24aa59d9a4b2901aaa7c4cf 8d832e0c87d0a3c0b8a33d3afc5e9001557a0e4a\naa82ee66f3cae938a656ec0987424971ca4f5250 e6436d5b3a7734592a218ead3d6003538524107f\na3172fa6f08bdde8efb5a120258a7d5a91876e19 680fce2d6c3c2b7d0adf8196e5b142523dd8968c\n6212ca2a824a3b6ba048efdd87cfaf644b4a982a e0adfa09da4192b518399a22ebf296c2d4ca75c3\n2bc53fc6cbeb9fdab423bec9df98952d4238a58c 1b8d2d0d31a39f47d094a4b78365dd35aaaae944\n040bc200d4b67464d89f0fd9d1e5ec6b485cd372 dfbb5d27c857d67f57ea399d426c378dcbaf2496\nd777b6168a7e8771d7226f515a2cb26d9dbe90bf b24a1621290c5b1dc4873536196f32ec37c778ba\n48f2debd02518376f7b8537fde55a8d57184f43f 8f10d5a56ae9f442cab9da8935e184e823451bf9\n85676ce5ccbf77a320b25e99b8379c46a531c802 3c4a131ed6744e472a4b635fb16560a75ca7f9d1\n7fdb04f9ed372c96ae12c464539436114c0cbc26 f76215227070acd0a34c41f22a0d1c4803e48110\nc497378e5c27a97c417a65ca9320635f0a33ed00 7ec3c57bf4986c54abe4e6827bd361369d5c4df1\nf1c96e692cde77e7f101df169965dbd2d91a9162 cda8fb8ba40e0d7f29e78098ad154b589d77d520\n01488984b7cf2aefb9238205155b6cdd8bfaa110 acb807dc68f64e03adfd10b7b3f2653b24024662\n50d0cfb00c574f09fe1ebc82d467754b8509c23f d5b35a1cc28d5ac9606809cd651c82e12878f231\nba3b0bf827d712edb8b1a5f728603083b9fcf557 db3cacc0fab40b29ae2a9153ae587c247a6e3f29\nbaa674c93afdd1a6552a497119f4dd91562237bf 96f0170643b90747af10851caae65dc81d937d1d\n61702232e264354b1382e02c0fbf8322635e1232 5d7e0be1a03d089ad70e081eef1d80aa4cd0865a\nea30b29c87e1c9bd513fbdd1426c637e043c2736 7eb9abbfe3022cdecaf4733aa3f0bbc2eddbea93\nc19d687acc229ecc352230506fd89ebd5c90827f 3dd81c858beed278814a486d20d62492e541180f\n188ab0fa2b85da242fbccb948b4797fd3e9ad68f 63c6aa27e4159409ae3e759c3fb4aeb3dd50b351\ne573d7cc57da220e0fc345121cada1a9148c9433 8f5a513653ad6f3b9e0ddaf7fd19a71ca8c6659e\n45e98f7792b38c75feda7a2d47bbe1cdf6d7705a 7fcb73eacddd020f1deff8d1c208a837f7db9846\ne33d88e95acf48dc4a36da0fe5a884dba51ed15b 0abfa32803f4d909b714a008f8da08da442e946b\n707aeea7ca442df6fffb32d4aafc6dfb6a07fce6 cda211a0e4f1b5cb46dec8cc1f6a5c7736cad682\n12fdd6fcb3a479459cbfc618db9346cfb873ce05 59dedbd536c3fa8c3a594aa94b6af9301feb309a\n1a6d9ccc5adc5447243e15e124d1a549ef440174 2e31c6220d14fb6a303069b0007b39097e71d18f\nd64ab53257b0e7622f20848f2971dce7b4896682 2404e19b81b700f1968a6b1d3c7f9fe21b74922d\n841799d99a75b15d85f61dfd4a8fa4ea8e638d39 d9b6659f98c074b97e9b157f36357d19332e1a8d\n1ac478845626f4d871d8e41185dd00d461486a56 1d886b6ec6cb42036a1dbfd329651adf0abda339\n1b646f7826fca297538d7fca033d8722d8648765 e014662a15c5900d327ce8a9a95c26e0a94a0835\nf87d6b3d363658c261b17770ca7d3016eb13d88a 5f1f434aaa9ce2a8c0f3bc4e5edf70fffe8eab7c\n318d82c108fb1631efcbe1c2d6ca1b47921ea23e 8565db20df74ed05747a33b64f0b2ab0432046f7\nb61321e0da6457a3a8221a4e240f20b5e2160642 eacf3eb2a84b52498e47f09ba16d0788b0d35982\ndddfda341af826bf43a8a652832940a0a2e64b51 e0321fce922741ed87731567d750120494af6f9e\n153dcf65547a0503e6b9e9703909c61c34aa5ea5 cbd1d4f5bcddfcb337414fca6bb98ffa5c9881bd\nf52339b3de5f717cd70f8c78c3624616dac590b5 8b0a2b670b3d4db401145d8fdf85d9c6571d2817\n0ce9e2a2faf7399015456b48f2d271d3d7c30bdc 40b02b6c011d8a7a3b43eeaa09919de7d24b8d18\nf39ee15931f4a0ddec5ad113d0da0b91b2e13e0b 7fecb500a1852b96a834f391ddf3bc3e19e10ecf\nb1b731c118d42d7ea4db01ca8b9aaf8dd4a9e7b6 3c414a4eb31a66b8f5409e119c5b3fd0983960c3\n51cd59b55d9727db400fcdfd4c0e52c8cbc5eaa7 af98d112ab3a00e14c6acf333c8c4dba355ef124\n319ad93df3e5a2d20c44854ce67580200975b27b 067b5fcf3b4dae5350ef1414b6b3e37f677fec10\n31b82e6d1f51481eb3f04eaa2fa2bec949ed647b 1b0115a7ce1a7d975523bc8195f927730faf718d\n34affc2a7112436b269cdd0e1a15fd9ea99473ea 82176a59fd85fb1c05a236945942aa85ddc23165\n4dd90a128444132e8944e0946f1f0e54882b5e87 e5766eed9574efa095b4345f2678d400027fbc04\n9d4a6ac011f96995c417e230cc3d8a874f2cf0af 03ffbdf124ced6588b37acf7a9558c220af73dfc\nda78d79d2fd6739445569d924cf1513478e78ca8 4ad2fe7c914731f35185abbe1f52bdcbf31768b4\nfdd0cae20225121a9a93ddd1ba6c49b8143b5b3b b1606aedec10bd8538a1a21fb3f6e98d17c39011\nbb34a8090a316ffdd3a7439a22d8b942da8d21cd b4a928cefa11a67ca87b5e78f90f7eed0d42a86a\ndc19b64734022e8fd30a2008bfc36500b51979cd 661e240e29e41eccdfad2bab708fdf25982e2a5b\n96bdc50fdae0edb93c367f597d5e77eebbdc24ae db1b3ae3cf9b712b5b9cb3420fdc79553a873974\nb5c575b0c8ceb0b0f19994ae75aa3bf2ea9b720c 7dfdefd545157aa13107e7cbec47863d1465ce7b\n1e1a2884cda034fa7b22a6f2aac1b046f4bce144 110b0ec2c400c4101fa75ea487ba187988692e44\n806567f9ed46a661eb329205947edaca4d2ad8d4 9d8059cc3b20a49b7e998e7cbb0f6ef81a7eca81\ndcdb66798be276692bb49a0567cccb72d5886c64 357381d6ecf081d328f46af0664325b06e81614a\nae459672825402550e6d87552f7d615dc5195d1d 5a07b29e778069327fda06bc71d02d0a35e75ea6\n94f03a078b44f99352e91dbf7b9dab57df4a944f 9a1138ee830a3de78c417abb5c3b8c11f62dcaa9\nc7545af475b4e3a8a9e0c891709bec9a019bfb13 0421127ac23ba2abc453b4f8dcf82af9fee45597\n9187e6ef5ee861ddabdf894044246a98565f444d 7df93a5913f7278ab8bf9aa34ab90f05767dfe17\ncd1f5862794e5636cce2c09fe932a8029f4d00ed ff329c28688fcea1dd4ee63cdd4282ed45ece705\nab534aab51b7a78abae6831a81fe24f21b37f6e9 42b6be8ccc00988ea284ae62267aa3a34ef0444c\n42593ce04af7e93ff652d69bbec81c9a407259d9 0f37044d66a3a197a36fa73e9c1b5418ee372e09\n4c7fb5d7f3c2b217d6f6ab6089f6e3111a33699f fc8e08d70a90c0125e2308c73e181c6a71ca6dc4\n83758bd23f75ccde1dad3155a8fdebbeca7a9c53 7ebfb3beb8157f3dd3b7bb36f8a687ed08d89656\nff6bdb371b75234091df704614444ba29b9d6041 0929d6d51f3baf3f29549717a432ae5ff1ea5deb\n746ba1d2fbaf81668fd3df7a6617c30c4eacad14 a725b544a41df900448aa8554657aa6b4bb9664a\n2a1425c05989f27efd0dac36d4ddfe2a052ff56c 97066f13dd6ffbf248cd8fdb30ab1ad7bbd499f5\nc1d2c44744f64fa81f1a8d551458bc35ed6a4162 c0424c88f1bab079bd20083c134f841858963a81\n3bcf9453db8805f2ab4e994ffc4d244ccfe36ac1 a2abf85615f0ac19c436b103b93dfd95aa2e1244\n1f7756b7ae672d2a18f8449435c60a0dfc85fb17 96d025180cc14e592848e5e937412bd168d56362\neb5af05bfb0878293c516b58898de6e7f387f20c cd07c575eded8ca7e27f8bd06f7aa8ca5d54837e\n741b3784220b2edfa0863e207694b63b99caa9cc d425524a95b0246e955e70dff29688c776e9421a\n5a7d217be9fab6caaff5103118357abb15840a86 4d9b264ea873cf594d3703e07dd5003768daadad\n70d374b507f66e344553e2f33da5c40c4f5f0a7d 4e5945a3de5057254f56ed20319843b3ea99dd5e\nbf88aa60010e429083b9822a2ec43b37ddd233b4 20419052ff192c9b17d3314eb3c784d089469f7b\n3634dcaa7acb7c157b0e8d446148cb2d9133afad 6c531bbb7396afa70eafe1262d52e24094abac55\n367d140ea76b9421a4f305f23192301f3ad6f436 f2121cbf7420ed57e893c2cad1a24e46857c5bf6\nd5df58b4843123571c9e58a51ae5166a5e164516 3a82341a079a38180a1f5029cb95a0ebac51bf9d\n26743c951154989a58a548b51215c0ca990d8aa2 7648e8f9d406a8bb6f275b48f5274750c2207f7c\n5937dea328270084237885d57d6582173272700e d9cfd1bbe9910c9cc234ec8c6110e9d3875b4147\n34ee9bf74f04063d8ccceb888fdb87179b5a5c9e 25cdeb46739a0d3fe7ac4be6b8a33db98ea1bea4\n180d64c55dbb65ef6f6caf177ab51401ac6fe416 b921e04ac81a532fca3b743f0a4acbabb75038e1\n097e203abae4c79e00dd6cad527ff66a798bc15a 19360ca8627fe7661cf5f09a5dc56d2eff3134fa\nbbc6c712cb03cf712aaca68445b589d2b3041bb8 84288248a6ad6d09367db44cff80309889db35b1\n8bbf3783244a6604485c5b0843a78c566356e3e4 c90719d0251f96a78c6b311b43d8fa2d53316e7c\ne2af4b0ef5f3e93fe2a5eca312198d84e41619bd 4e7d65328bfa5eedeb08d032a7e271f18201e417\nc4ac7a627018b6fc5438a96e88addd16b27afce2 12f68af8f5d8c767500df643b8f7a0d0ed023b23\n396e0d5bddef13f353129fab4bfef456ce7eb28f 282ac7c89fe26b3e2632a7857f37d4e216bbb25f\n2448acea08b06136467b53a70af0b291a2c55257 5e9e9e66fae7944799db0eb4a8f351b5ff0da973\n10b0bbf09af8852eeb3cbf8f8e26d0cef4f2ee25 6cd80377063e520e47b0c74d52b1914bff0c6f35\n4020a1ddbfd94cae7c99b80cda0185756b424457 7c62eb8b0e9bce2e9d082c25088f2dc7e5358a53\na75951879499c9d2779b126ee07975775406228a c9c758ed83f8904dbf6cc8f3d5322072ea29df71\nd98fd22f5b728ada747b69d5e714869f5576dafc 015d1cfd962bf39b22c464a7b99af41feabaa4a8\nc12a3976345d7bdc018f14ea8817a2b9f51aa72b e5c8ec44d5ef8e7678da6c2a786919ea703d611f\n0f5ef0fb90fc43f5101d4f70bb8e9fc1869a7703 46dafa36e5325ad7b0b778ea515bcdbdf9fc8991\ncabf69b4f2dcde2bcecf9563abc9e02eae7dcbf2 e555bfc947ba2ee67ab89583da61f4633ed08366\n643bbb966e511656dd488a4713e4df7df8bba88f d56e6a44da23c5d6cae8375f92efe4c7a9cee13b\n8de9c8be393a68bb8856257e22fddceaff37a1bc de76f2bb71810a7110af3df899f0af52171c0d58\nd1e028533778bf606317cae89bba8cfa9855bed2 955c3b2e3d4dfaa472d87f7f5f8546bdec6c5421\n2ad1e402632b0e816126b0ab753377fad5418bea 32e1771c29d9dd167f17e78068f7b9d5bf16a101\nd47648b309539458d91a272129454eef87bfbafe 2a4695f244f30db0cad739dcca04c0a7039f6f74\n9406d179ea7d9fa5024dab0ad9f8cbb5b5e5edc0 2e3f638f63e305cce37d9965270a9e140f0a7589\nf8fdf9b33421189cea048619c93a719403f3bc53 9a78f3b161778fb6bceb7f34d2c81284b0a3b285\ned92aab028b3dfcd99459541d43b4b3f65595bb1 3aeed5a6f12f43786cad73be6c52b4200a408e5d\n2c44a2a569c6e8b59692b4d5f6184be6afca0b4a ad5a03e5f6d5a90b28e7b06b2c3ce058f7f1c55f\n47d66be3f2af45920415b6aa8987f271f64dde6a a5226c06cc47cbd44e802207603bf113ef6dadd7\n19c4c2a96bf7becf4cd67364f90b693815074fe9 b78ed66ff5805222d8157a60a979d6e0e05e40b4\ndfdb6a54209b8b92c9e8a401c320e08692d6ac9d 53df6ec103d7db109dd280c9049cab71d35bb829\n7891447943be1d0dc90ebd2574ffa69ac10584ce 415c79c397e2ebb2040c6ff73ebd32ccfcee93b3\n1b16b52f2f6d3288703dc15b30a1dcff40d9c785 297e4e00fbbf522f5e8dbcbe44acb200e9c9243e\n72e6693ee1a04c2c26b1ca90042fddbe2094f4c8 9c440b046ca3aceedc5f09c3e66ad0255e3854a8\n3f453b4d4a0cab90cee21017bbb1f590b45fd15e 8ec3732ef5b7d1a6e2fa0821f3a3a636bd8a4b22\n6839986cb076845fc3b3f2db3cbce6f199383779 1e7ad5444a4ae4272f4b330ea412bb6d5eceef28\n0b2fe5b620686ab405b3b0f79e4049a0ec45535d 1d7ce695482d0afd0510dff2afd5c058edb83fd5\n377785f5aa4359fc7fb1b618d7e775e61f78507c 941bc122f2ea4caa43ce913b5b242e34571ed7d5\neaee5c79189d49370eccd18e49c6e353584b9998 1012700ceb8b4ad6bd4bca1d37c8e5076ce9d754\nac4234a77ca946cb00db88b6d90606a27381ebda edcf062228c325bbf8c3ad69c8bdcf8a80fe0a57\nb4925c8f5b5f65a9074a8c6ff4965c4f3ea645d3 f2b8ba2067a188ffab1cde8f6a4e4ca4cddfd41f\n7f9dbb1a7e2ca796690c07e4e96bb8678fc640db 26ddf6f0da630b35a1418010f59e7f3f7023ec66\ndce56da98a835260345dcf80debe4ba7aa057a27 a501a8448ede269fb0698b3d8d0894b1d897d55e\nd2ee0be786a9f39ee840dcd096a7839a89adbf1a b9e14b61172b7026a7ed864054038a9b1ef19c5e\n36f758d1494e2fc88eb34c3682f0283dc354b241 d2876dd439f78cf03627f866a67c4f7b811fcc30\n96c9bfccf949674385bb1407638845f299c5c1b7 e0101d7645b8d4a688e74489b911fc2c15864995\n04abc7d76f90a797e1d34497d72aa04d86338334 da6fd9a386b7faceb033cba8c74103d60bfd6430\n9c39ce524970eb14276d03d4cd214ec5dd166c20 5d12e243f9809b04af8d0d41c484bd08cc5b7915\n8e8bb3655e50dd84d8c7aa1ef3e45ddd097f072a 8c79933b99cb3fce22a70c5763121ac891cedd2f\na014abd3ebb0d85864caeff7c59801f20a2e3a70 b3ecc4dfb5d458fbdad6aa022d5d476875b01785\n3ac482cbfff7b8d331b2e1838bd03651f21ba3cc 9316797b26d8984b45736706aa5b209c6a917d46\n5b16734a7b1a5a8a8cf199f8708b2df9bc797397 76ed93d95241212d3daf53073428fcd5202ae1a9\n82ac52ac0b49c13234d9c3d4e162e31c6a714409 362d164ac4e6163a26d265c03a851b517975570f\nf4b844c4a6b8c197f95f9452b1b4ba14dfa850c7 8753da187f94a3adaed023e77668655dde98f4cd\naba13ebc8dbd3125ffe5fe69332a8f11f387b5d8 82af5b930c556a26ce733601405cd4439d1ddda3\n7144c1f171e39cbb08ce585af8a1c29ce1796d31 03c177e2d10a35199489eeb81ae6bb93b4281283\n81250d0c6c6aa0f8b9db941fd235988a1cec8a48 7bad3c4f7d1544187d6efe80ea18204c45b62202\n5fbaf50d6caa10095810449eaca3b10df6bed247 1b0a296944e20bf74d35400b47ff0a58e358107f\n9646a56e6617b21171dba30a8d917833ca2f9a98 afe106b6e0f36eba0f4254aea7642ca88b73954b\n2685c58df75279a7c53ef8145a1bbb6d1687e939 6739a018a7b5e1798c42278c949fcb3ed6e6fccd\n9cf02a6973d1d5bb42cea1cc11b43a1cbb738ecf 0e1fe39d7067e52eb90827287a3c13cb80148d82\n7f7fc4aafd9b37a46bebc3d166d5b3349fdeec41 f03bccdb2bb16ccc1422496e1d1684f2cc918288\n328c34f3839f562ad58cb3a40ca6126796905020 7d0e0cc9be1ffb28456700e944f5249d28f2b361\nafa3891a8a005126a4a3f6b78f84f4dc615491d2 25c4d4f277ff3a68be1db6076417634ab1fa1130\n31d7042f0f250ab7343564889e17cacc9c82bfea 93102aa2b0849d0b4c88ee73097659761c94052e\n53b35534827162cbac3361d6e80d85b2cde6da24 06c03c1b8b1a6eb5630fde09d298c3573a24560e\nc940c2bc318b37e6d64e9e2e9921f14587d34244 af61ad4ac3b33fbab03d6a687ff4672d1941f318\n771665dc0b66703aa221f8cd07827dae6f89793d 72bc164e8763c77785d0a69e7b40fc0bf481c879\n12183789694ae49af61e1d7218a02bd199f21789 05bf30656293fddbd7cea6bcd2e67229b9581e70\ne75c68960c201af7f8f2e973999eea5efb09588b c350c03b077c0ab4223783beae689f4d85bdb58e\n3749f3769bfb6ef02f1298abf7b423601c4600cc 59fa301b198c36d657a6e87c44bbb12faf671f17\n82f56618def046a5f2e06c62237605b5a4fc8659 cb5b12cfa315a7ca11e082d89896c624565626a3\nace39ec64fef68e86516f363a49a167b6ffcbeb6 ecd20fa8882faf232ee81ec8ec39b126e678180d\n6308d54488817b07fbad0bd40c80e41b20266fb5 6041f0c185bf8bbf55ebf724d9f726ee7e5c1f6a\nbbc06d8ad5faafb61220e511e1e129b68d822a8d 81cac03a59d872b204a65a9367b1302b2340f7f1\n3b6d441d67477b5bb291ebc1290b24cb11e0e955 40be30d57662a078f1c782558525e61c28d22f41\n0789ba51b60af427a5de627ec7ea041d477afd26 f23430b43da1c5b9295b93410821f36165af204c\n4116cd4b1136c7d51a18ffe1bbf9270a616b6071 3c1163ff13159a904448a0b695e63a145b0bed57\n58eff32c6ed2adee7af84d9fddbb37c2b32af59c 57493d14bcafaf5fe519081357fe21197beef4fd\nffa3616ef516595b94c2981b8139d13e474378c6 1050221e32f83990638dff286832e674f7c1fe36\n795b8c9ff5df13cedc225c0d791fdc720dde22f1 ec2c51069f14dc6f5858af3933226896276e62e7\ncc99b86bbc266d28bf91d5c8d8088ced7e180dc9 9250ad71e96cf64ad4bfde8556e9c3b63042cc9a\n9a9dfe914d42815865ee97252c9dfdb0183498b3 08767c3ae1c7c8b0fc23343e6ab40215c5c15fb0\n1f960e84edba4b970048bcc8254a0acef914d316 7500e2010f7257c041fd976efa4d96d82471a37c\n459766ae7cde0763e3b21558932fdaa7fd585212 9486fd5fef6bb985a67d75e08e2efd6174732964\n1ac9518509f8e41d9e509e2818a40391938d6e1e c743e5d82871c9594d51d98fd3eae369fab7a0c4\n63d8ff42c66d63ddfc6ab9a29076c34539a1b6cd ab3f5a16d74259d5e2f4e16a6a92fb4cafef58cf\n3440ddeb75802f7b3577a75632504aad63c53550 0f540b8e85d27fbe9864f753293ec236fffc8497\n46c493449e0683ba542d55defedc7e4803c7d938 0d1413f08aac34174af78c8f0046794743fc00db\ncadacfa735dc7f82f38ff558cc418a9b8b2466a5 81d1101ed38405d6443d38b170931e2936065b07\n2bd1bb7a883e0128e1a90b849fd38828925e261f bf8dc4c39bd6c35b8f53042aa3abdf29514ccc1c\na1efff9d521084cb5e369e442fa8a8ab5864b102 de51d4601c9965ac296f5dacb5937153f37483d2\n6d7d4f61c518a0d84192a46d58216947f12e180f 80d837c1b2de39d4462e528c17f0769b76b8ddf0\na153da85cae792d4c21488fdaec4d4c92f0aba63 59bd38930798581b38a88291f74fd3d028da56a6\n54e4e2466854323875f67626b538bc7edce79c7d 96952a0bd4ec15aa598b5f16d2a486e55a3035ad\n1d57755d0a8272f172663e2be79be276e8e3608c bac2ac09c64d495622eda3b8366a630cd26d675a\n5384e0ccd898782fa94444507a4da802ed45b185 1658e033095ebf12a1a05030624a6d78229d2d1e\n10aded48a64c4435c8448082936df9c02375541c b954fd5ced883e194f8b10f6f93ec4018e288ccb\nafe057714f8bed31dd74163841fee21d01bbc44f acb326bd48f7e1f2d3c8665ba94b198ef657d1b2\n02e257e3a2030d3f702760a0a44c0d7bdd3c40bb 5a33c5e813d87ff8bbd8d50559222f88b28bfcad\n0d295d93d845343aba6628484561b4ccbd848bd3 89848fb776519c3f6f74caf52aeb91e308d7d7a1\n3ae026fd42a6392e39c2d4a52494e866b3015a52 65fe0486d9f7223d78269b0d9a6e5dcd6c1ff7da\n3bc20b485a84994b6d37f9950a971c8454146796 ecc5d6a39637143fd37676de335cde0822d7881a\n0b2d7d1cfbf778a8be7b7f9496c51a54cf486f27 72706795acc923dfacb8d033b8aaea48dfce303c\naa1c600c0b7547340b8eb57ce7213468ff63eabb 6505f3832c7fe729d80677942c53a691fb5b4d76\n8f95272a7fc1a5772862cead260f8a990aca90df 76c05b5454bd1242980c0619baa480a69a51b6b7\n14d482cc49627078e913dc04e966980129231af9 d2e49b5d8278e432ce734b64f1121165f4f0284e\n5c5d3eb8dc2ec13c134f2991fc8b1c1d9588f55f 61b277d2a03156410767de391ccf8e707d6e96e7\n20ee0f981924b764bde259cf7adfabeaa27b2a94 8adf39fcab6a92808c6420186b30089340f75c19\n5697617cee09f1962b85c4fabf1ab9ccc32f0398 703571c4d19d65c124c3a9ad5c0039a72d57a5e0\n36ef0f21e37e1bc837809e04baccddd367424aca 410a61d98d7b310160f0e2b6a4fa35d4ded976bb\n36ceb3dc8065254ef5ebc63cff1eaf1eb73c55d1 4a74900fb2b84942dcbab0c90fadd50396c21577\n2d157bd061b578555e434bdf2173b84d70a3f849 62ef3b2dd70b63b31e273ce866b4b0a3ac184ce7\n4c989129afdd82cd589f0500b18ff945116dcfd6 49c602ca83fe0622d98944b2c26809f098c59d78\n74c80fd996d4c05f1d629a7d8412105ff8f61eb8 434aba6bd8302e4c77724143c08b7661f7a92eb0\n189e3c65bd246e4a4f93affd6b3c0d0e0165b1a2 0db25ceee7920fdf4538c1e3ff415781846a8985\n89b075a7baf3ff5a1a48fd4aa06678c272694ab4 6becde820701cbe9482f10430a8486cf8cb683a8\nef603c4c537d22f4c94a76b4f88819ec1c3a307d 17197ffa8938ea2c3f2e5f9e7b8f99d8f626a771\n76336eb2972f9fc1e5758be5911d3600f8de84c7 c7fc7298ccc712b53c92695fc9ff9e14e729e472\n0b2fe381a83852f83f7af3c6641d813aeca64087 95677421a7a2d4fd191e5021549edd7a6b4662b4\na1bf2195479ce7269d7183a6ab0899812ec4ed7b 2129b129eca3e9cd726a71fdde3654da6bcf6403\nc03c81514efc38df61937b2f1498ad4eff0ace30 b9c3d1dad9deb7474d8a786da326fabd70f5c64e\n038936880a9aea1cbfcffaf18d144d566dccfe9b 4cae44b4de0bd2bd1e337e03a29882110d1f5cfa\nbaeb317a03359bd0d0687e9c378065b18dc6e390 72f350c5d12b10941bcb903c6415e9bc9aa05139\n83900e627b0e8766181e68ecefcf7875f5895332 18a8068291a9560d02d14f5048c588daccd7ee58\nc5119f5d2236a7f3745cd55a1fc35b6d9dbcd9d9 54856e56c72e129a8b22297b762e7f3674c13d93\nade6158d1ea8e785478d9cce74e6e5e50ec4117e 6869e3c1421866ece297b0405099a83bcd24528b\n2fdd9843c36940f5123fd89734857b0c13e530c8 4430c1c65139e74a05754ad7c777f80ea9ea0855\nd4b58b37188b0fcd523fa34e741ed29d7d7b5b2c 4c6fbba7033983721bc1d27b2450f4e3372afc01\nf3a9c6a9d1d1cae7305b768476483f667f5db909 32969ba48efea0308c3ba68f1d61b89bc95f8769\n17df3f970791c49c702b4c7dd5c87ee0143d3942 311cbab7da5671d77ed1e8659491f507f3704fcf\nee55821142b5448b9a0051e5390db8807cb7de96 31dbb072361f303feca303c3642d43549aff261e\n46b49e46ec996700be322edccb4918423e26e9e4 c69829830855356049a65b3e6fa0588918c553d3\n51414c0a93402d7db75dbf331f8f688a3ed46631 6f37bbfde8866913e46ce48055107e8bdfd899a2\ncaa96b5ed827183b20941ee955c7fcf5c6c6d59f dce2b298feea0752cdaebd330066a9522946095f\nab1aa5905e349ac872fffdf887cf8aec7f347f43 a264b0dac6e814585c12f4a3bc01b2f8b5aea530\n713a522d498cdf080c91d9791fbea828c120f949 fa8565f71e655610519a16f018b95064d8cee012\nbf5eb7b65b591e24920ab5d00ee8aa1e9a1f808e b523a49208e6d36e4241fd482b742bcd0a505477\n1a70fb3ccbc7311920bd9873373de7c1adbb874e 1714f94f963a3cf589741b3fa1d39dc599148bf6\n406673b0e2f0f8837e292d7e0c1a7d232e2a4789 e8767a3143268686c7f9fa14873cedacba350817\n3ee06bd5076e4abd8353c728632650d10cf09a6f 374b6081367577324e6bcdc6582d3fb008bf03e0\na3f90bd899b1060a53010f60b3ff148f3cd281b4 b5f1310eb213d6d855d753407ec212eb76350ed1\n3ebf3ad3bef66ba51144a7f450b67cd1466ecac8 e298508244dfb02b392082b6ef9a029e52dabd0d\nf3c771ff8280dd871e16e90d7dd061a2ce00a0ac 017c32f2bd0247261b7fa23a836e57b5ef61a671\n6383f326a2a696f470ae97ef6dba02f7a6a03868 fe98841e8301f12a496ac033db9bd303e322bee6\n8c92572f791d765deedebac07f5bcb0734399ca3 eab589733227819cece70aed7742f1c54572539f\n2f86a61bab170bd7f29741ef827f5ec12f8579c1 0aa261d1ef3fba8658c5d68ec094ffee51a8c453\n272e2b24bd1aacc4dee4275be6f2f4e992fc83cf c507b8872290796d55b0d0dfc8a136a07bc3512d\ncfffb5e158c7736336247e2b0aa0655584b658f3 afad11a8d8231f1b476b20b5027056b089e90fc8\n73cc503d5e9dca5c0e3da03a1bcb376a4c6fe01d 433a27b70684a70e9e35fe466124a175aa75fcd8\n1898e6babd50d400fb70f2f85d5309bf5f4c1824 db226475fa08feed34ef363f287a7d133f027d1b\nec2042458aa6594910be42029513ede9f211758c 73957c3ad754979ea84f84094934c2f1015591c8\nf1f64f0437918268c1818ae5baa040f3d6a971ae b02ed920433b509c0db797f07ab21c9b6a16ed74\n5f5eb2f27003332d678ce477ed8e1654c197fa7c 681869c6c7f9b8182e8e90c842337fd419251c32\nbdb84218cf820397dbf3369fe379fe73ec2cb360 3f38e9265dab0e612f770500071eab8c32f50159\nb4fba36abee46bf2553795a7c1589dae34b4291d a856d30919ae63192762cd34d9f8287d28897909\neb6a4e270cf213f65b23a6cfdaa52ff5a8c4763f 353e508d3c89ff8215afd1f33ce9f0458fadd4db\n3384f21d0b7b7c9ccc1c22fd07cbe558da799db7 bfde523dcff1c10dd416efa48dc9494e1d22e399\n97e6495d77fd906eb41eb3393b1fab426f360210 d0268a404641fb9e3f791fe68ec123085a88c525\n2fa7fc828084910238aa1e80cc1f91059624c061 be8673993f103c8bc24b91887574e4b4a64db986\n73554dcd8c7c44a2534a575167afd51ab56400b4 a4635c41a72036c2545f41f8d537c0130096867d\n2a380e949c6dab18ca98847b9a53bb313e95f5ad 07bf49128d312eae642f3f57ca457b580a5c0a15\n48cde6d4f891904c948ec03c12bffd3a2b272e6a 17a8cf60e7202e707a8b20c73b73a58384997be9\n525239c61a895f25beaec45581f1c878843e0855 1ecece67e995e47cc67acc092dba0a930396b47e\n143eeab33c1efabf6305d0331ad04629d14ba2b7 39651940e92a39945b2ec4dffccfe10a82c32aec\ne865d9546da0c14b4dee795732c136346de749a5 dc1a653c32b5f2a91440e73d536bf37a03395c59\n1b12b6b47de38513d7d1270ae73ae2336a0833c8 5120b8e088b157c247d18b1cbfa6811be961dd91\n9c25af76d9421762cfeae2d1346110b208e92e30 3ea9782896ec80599f4f82209456cc678d670e9e\n9326a1f65cc94eaebfc61b68450d896bd5d45412 a2850fa617b3d56286260ff5cbc5febb7ff6ca02\n31813e6568ac70668161c61e145632732a0f18c1 b54802ecdcbc7a625a9beff2f8cc87a0a1fc5234\n994626ccea051ee6e6a1a0078b4472e39066a6b1 0239a2afe3e61935619a4ec98dcb53030e3a6a2a\n210a84cabd037e0147c4358a966cff72178468d2 3984479cc362b004c785a95eb6034c44c992611c\n7fc5679df04e69a832dfa3fee21f1e63f0137e8e fbe2bd807411e68618cd3a5507d25db238a0020c\ndb20882d5be467a8f541617bd7288c4a5526c629 006049d36823bf59ad9d8da8789cde8d33957c50\n4b052e8429d50f843d4064d845f54212330dbbed fba187b331dc6f4ba1520afc4e33a2cd4a7db6f7\n29455a65acd8ca4a3f13565448210bd7bd499fdb af66bdcd6246b63adf16f11abd39bdef839f8ff8\ncb3c65e41848f5df2a4264b2ac09705f51f4fcbd abdef26c5baa12c696aa0c9c9e2152e553e0b7a1\n4c75a05ccebdbee824d589eadbeff4078e7ee67a b0a2341c5f2807c335e09f3875467572996b0754\n26a701f9525e8e288ad7f53fa3681529c0e75b90 8ef6e0aa7051ea2acd2656d8fbf08fe131e27f8c\n880d7aebfc177b85286bbcf05e2251c48b1370ea 05acb525a40a41f049d0d6180fe77f6b13729b45\n9ab042b142483fcbd587205e6a98931b8de5b519 85f5eaa1f397e1207a91161af6f23372a5807d2e\n6d681dfff0874b9dec4af51591a8c95c99bb8c53 a63c439e16b550b4113bdbfbd2d3ed11bde8a053\n5220ff02ac70d3c6ea461e4702ee5d997c244cc9 cbd07dce534cc3f04ebda831b482e673cc1e6923\n5583106617e855fe25172528688b820be736eb35 5abc0412e724ae5be18991abc5fb588271e0fcfd\na4bdffd01fceb9e0c28c7fcf48797899e944d136 2dc6c136d7e60dddfa59aa6198b651b22c06f03b\n5dc191bd309e0323bf2944a1761150c01e091a0d 73bd145b5133198073187dea880dd23eedd91107\nd4145f53e08f787956499be37c07ed031cb6d79d 3d8b404ca2c574127a4b10fa41c12ede10721933\nefc6e0fd2cca12dabd4431080503c62974bab586 ba3c761e8425e0f4b6486159934a3d45ceb5ed1a\n8739bee30daa2923445270ea9bc1b949ed0d2273 8ecceed9daa83b4eda08c2498b2144a4621f6ede\nbaf343e401358fae8100f8ec004ea4f26529d606 00a327071b3ac5632d27deaccfd32b2d8f5cffbd\n312f144bbfaf31f23bd1c215dd3945cdccc807ad eb8aa205703f42be41ae5470ba7954f726259731\n848d8998ff3ba5f814e79ef32d82a6991308dedc eb22368574e46500e02b86ec7687b509a14a41a7\n1e84dfbb7635cd13ccd9363c7ab213814b24e975 8955acd44d765354583fe215dff4d28dcbfe14a4\nf4677e4bacf945c7044521ccf5f08a813aa86d94 16e0d5b77592aa1ccaf6396403ec33a3969b3394\n857214ed49213afe096b156208c724f9b61b3d79 b7a88403cd06f19313270f960d63ee317880ddf3\n77581505baf8094c1519dc19b00ba0aa68c7047a 663b49ea4b97859662bcb7f606e9050c053008e5\nf7331645d92f050485b11fcf3723d7a6386e5e5f 12f59273f2e2e772899561332aabf05566177556\nc944ba2412fe45c6ac8594da0329be73adceaa25 97d77c14f629bd03801bf3beaa69ec1a77e54d85\neec26e771f513234bc637f076507910d2ea17559 f0b7645672cf7099af35ec4708b378efcad0c06a\nc50b8ee4abcb858c1a3737714e501e8217b17cee 67d30a9e534e39c6341f3fdfd790e79a6c26b0f5\n1a962446af17b76d2fac1790b4ea3b29455da329 8013e591c9e2cbdc9cec2cfd20b927cc44efc52d\nc980636f8a1fe2f784d9cf4cb993547774f1c85b ebe177a1d8212a4c6992ebc0975095ef5e368366\n00160fac824c0e2a1b6672f52644758029fead3e 1b846f92475aaf16abc31f02676ba03a41c2cf2e\n4a45aa326af60b700509c9bbc079e1b4a6f6a5eb 0b35892c84189f9357b3df4263c8b53f24e20876\n8e44495ff3e38f28a4d34a3460a3ad253ab28cf0 ec5546d28a33f2c21b57d1ef375a674f34bb342c\n23ac0e276ad98292a80ff37f977bb2b123ffed0e d1a0b690d0e079f8f26db81e8a3fa53e7c9d6ed5\nd0d148ed292186db6d7ba55846a3665c389bca5e 8b428e6488c9024a0383c3e5bf0ce5c39da1ee5e\n4e3142ddd9629d034227544b0e26069734fac716 670fe3265ae6c950fd746e74a321b409a1c42524\n679c1445ccc3b3280e6c9d60075041d2f73ccdf0 566d01fe8c99ab5828fd1edfb1960e6a8e83ec4d\n59d40a4508828769a86e76f4ab5fd651b92d2e5a dc1e0aab7ab918aec4a8bda0b80daf9b2f1eff75\n2a32158f1b19df1ef9e26ea1338b56708ee5e4c3 ea049bff5f0c0f06824a6ddd74df05629baf4972\n12f1d3ec5ef72de1efb992367fbdfde17f8a9638 01a34a727c63fa0397d768497f4ec3348c642a78\n7be10dabc1fe55eea613c971992fe58eed5d09da dccc9c4d38459f8d5f0f5c4a05ef34a6ac6b2503\n9f6fb92915d800ecd6eadc372cb5410cfe7a5419 c7d37c0a88ecd971b3bc62ace82b4903750a4cb0\n0eed252d1751db31d8084cb2026018cb388151aa fc399279412dd3498a0b177786bd320acd324527\n9cc894054bc690c6fbee5c90d4828c0fc1382b8d 452d969470efb76ff2495b43356d52619bdf5fe3\ne61c72045abf3b1f9db371f9800cbfdfbb1feed4 5e735a14fa450dcce6462aadea3bc5ffcc5d1b93\n73820e7e4644ab8cd8b820b7cae1e79743f7d9d5 903bfb1f9b5b4964dca374a6149a7e82db10c8cf\ne6ed8583caa74b6bd84599706a9772f462d8d610 454a2707ef16dd53c1b23c6d170cad806848e7a2\n1a1c2c3f88995dea6fb1b0ffc4e1f46b25f3d70a a363c741199d10f507719798eed572d7a4eda079\ndb11b153c37e9c96a6dd6839027719771fc0575d 317994702deca36a183620840d7a5b6216c2e4c0\ncb7eff1f0c250e458232c9c987488fea55fc0509 58d3c998f4f69374239d9ab75594cf3eeeeb810f\n21755e6d47272dcf8d9385c0cfc177ca255b83c2 3df5d6c9e37f2b8b4197526274e180197366ac95\nb78063fa4fb7286165707297266472816a047102 87ededcc0fc4af4b51359113cc504b71c1ac8f12\n6abcd905424eb418cba3ec6c74ac5185ef40bd39 b11b49a506414129a071e4e79634548b9efd05dc\nbed1c7a27d0e7934aca57702ff564761ef932bf8 c73f31d2fc4f86e23b92ca29951e2acbe86398da\n9d2fd45c20bc8cf36fba64bedf3a7938b5878fb8 97be917fbdb237375aaf98fcc4e82839ecf6429f\nb69212fab117730f0edfa0294e350239442822b4 f396fb27e104b75743d995df3272b5155b876e7d\na8ceb1789ac5c8e304190343b80a58dd924689ad 88bbfabd3ad585f2aa7ba7a0947a9b3136d7e065\nb1739274e92395b5d22b8c036cb8a89e483b69ae 1ad76282b1a1d27595705838943eac9308568eb9\na4c812ff7814e6688f9d00b3c7848fac7d9df36a 43be4edbcfbdf4d15c30a22626021d80e3912792\nbd0f5ed83dcf7e8735f31be01020325ed9e84a85 3cb2cb63b64848c1d1f1175f725249238a640026\n2e5422fe7200df6b31d27407e4f75c821f158466 11120730766546b55a07cffbfdc85d3af230b345\n0d1e2383592d2038aee5736acf1acffe291cca04 8a1c3b840a437ce685a543f90cdd0fadb16734f7\n59d43b7b5eeaa33cfa672e8c2b31c5b797aee7c7 98852d12caee895888581ccdeb5e316c91e628d5\n781bbfc27a84603f6708b3ebf505fc3f188b4532 3bd1cb33c071cde6f8d962ed34e12fe1cdc03bb1\nf85cd92f95403408b9a97fd1d6ad6dab18c500be 11e93cf87041854a62d1fa5399e8487f1b0d0cc8\n67521f4ad4d2e3c09ba00bbe99348532616cd12c f49097ef6b399497db13947f160ae01af4642883\n302065d73f70162ccdb3aff7460bef2419532b82 ce0f2d57cb8a3761a5ff376f7ee4338950395933\n50bff70a31873a304f7703a21677a14e6ef36fc9 131229eef9006d3366f9a40b21339861410852c8\n0d03d6aa33f21088136b97243184e74cff479e2f 128d6f6a7defc867f1575b63cdcfbe0ecb94bef9\nfdd3a3b176ecca235fa44ab4fa1a6e751391c46b ee07761987477bf191cfed5ad1fba962ba621df4\n243a96ae8b0d083c5f5254baa8d088f81aa4c4e1 7e7b2271caf8c69f1c5ae66611b9f3120010bfbf\n969d6cda479c258e7c3ac83b1d988a0e889e9e50 f491a2d37db82ec63781758e5a0b4e03cd09ee20\n10ffc5e6f4c85a9e48f29357ca214d0055ff25ef 6ad569214d73585bd62b17923dea3bd656e6936f\na5356fa9686c7a12ac71f666f0e0c20fc9fddcc8 d3dcdce0c41b25341731eb7c6e8e31c3e8834eed\n03bb19ff112c01d017850b882d78cc29d7384994 b3cbabd9c2cf8c1a5327524797e3e6188af58534\nb42d862e3a3280e2a705e9f5ca0712e162580a9e 41f74dbad23ac822c6ca1efe2f4d7f83b49bf8e5\n35ef8631142c49bb183f5b5435665d5c6447e967 20a6d287f891f83016a61d9a0d3f04c127fe5ac2\nb82422dc154cd90dbb189e91eea0dd6da89c5342 60da9ef6b4ab3c8fecbc92ea0e31973ca80f3b42\n2b6ed2ba6ba18484026cb2054ba06ccae425325f a4cbfe1e73d5a07ef7b331cd6d4b325a71c09b51\n9d9de2be0a5b13032e83368af693b1025d626dbc 4bb11f82c83c2113a338694d6f053d1b47b67091\n4458a850ec3b85fef079da4e717bc6ecc5c7262f 58b661039f09a628cb1300bce861038a3b12cb6e\n32c2c29962f3dfcdd21db21ab9236b06bbb1a17a a0cf6349c3a143b195ddaaa3ac4bb532f3696afe\n89338ad0d2f797192d47efdc85f629afecc389d4 fb15f01e85f0cbabe4e3d339cb0e41e667da859c\nf3df808b63eca5562e87b58830818d2f45f21b3b 4cd0becc32d637f18c04d56bd57bd819584c0fcf\na191e87be3405da907065cf04f785b364859e6b4 a1905ff264097b3e5b1c6fb835249619995df467\ndba53047e0097d2fe3fb2a96f1c8082f537e7fee 61b4b03d6aa4b615f8c25867ee010adbc0443e15\n32d2248f71f625483fe0fcf5dfde933813685844 1ac3d61d8289c54b044d2c26a581352125442fb2\n4937c4f600d9980c4fa832c67e47ea99fe0cf725 daed8c15e8ec6c2e6fce5529fbd943efd8b2df22\n323a2720df1b99a5bbe17aea95ada16ecf341484 05ea4691e5389e9732b751d7c625474c87d87a7d\nf4431a1be8494f378ed11114a9a057a26a9c5e3f 1a4ddd90f864e54ca646ed6846e747d10b4694fb\nf80d8a394a7cd8446baed95c87cda7f9dd9bacd4 4ff162a1c3b426b616780124ade6f5e35d225464\nc81e01f9e98db12a9aa91a89fcee1562ca71fbdd f3698482ef0657e188d640a4dad6bc8575fbc21e\n0d061f5f41ce7fb1d645df104c23100d58b89cb0 e5df78e564b1f47415c381bc3141163039e70f90\n42fe94a649e5a9873e7da141f14071c17a1094b2 650c0c4b38cff8763b7aa1925b1589e265007655\n05b99b441dfafa404fbbe19dccfadcaaeb50d57a 7ef3f08323db267798ee3605d513db3db9ccdfc0\n515442e3aeb1fcceacb5c258ac8a3f1e5da9fde1 f47822f0c0b189e580ad6168ef47a8d9af1a900e\n80bebba85b9f25b4a658c5d5dd1b10b0264ae31c 06ee57094bd619ea3b0bde583bde6c7d6bbc400a\n6012f350b3b010ccb2b4a88b098cbc3f6b33dd9d b5285398b1f1dc3392f1abea3e018390d8b9186b\nc071257b8528537e7b12397d8f42fa27919a3051 e8280c00e9263a80ca35e623e28366b137e15337\n591c6a8ff890b07106b1d359421cb61b555c52ae bf632118b3b5f624e18e254fa38fee642901d4d3\na09474d4e82187aebcfe1a8ac9bffcbee9dfaeba cb5acc2af3da522eee9a88d53effb52f2751cc25\n94f5affa17d0882ea59fa050b165590f26223219 f19f0f84ecb841e28212cd6c0ae1fbace90dc0bc\ndfe2621f1011acf95ff270e78b4c6864041973b7 773d8de89a4e9125f9e097a9067d33fe24cea632\nb15dc2ea95f731b7e68d741fc0e96a5b3f328034 e506aa297c1b510abd20f10afd09739c8c20a39a\nd2f9f6bef52c5fece58085d137e762f59b818ff1 6d2f5a77378a97c02ef18f245081fabc77524415\na67724877764d1fe9aa372e4361b8f3d2f9ba307 8e3680b82b4d36bdf477a59440e3ca7b173a3aef\nc4493e9653a08931cafc0eb5864c71d00b545222 0477d96d053fbe4a2d95ff452b59a5644bf6c428\n2432d38ecb70b4ef5eb5e3357634b773ae0a086b ee0716e374b3b97153e94e96ee909a46e0f70419\n3d87a144bcd2204c2f3db9806e8a04b84abf2ec9 5898b208e0af188873ba46ba26e29c99e393f144\n669ef817e8ae525c2312bc379a81d8312e46ae57 fdee459dff6df7579e574097d4f56dfbdf333708\n3726392971840578b3f1bc7b9630127c405f474e 2dab24f0c4544aaaedad14f588b9922ed7777f03\n423da396b951b6aceff799d01804e453ed542582 823b5e93f5e4b70a5986374b58d21d16d4282d31\n7ce74e116a0089734e02b56bc86b80f4b9b9dab6 bb0c489237cbe5d1074b44dc9c01c6ffd81112df\ne1f8ecc06814df2d10eb9d626d6ef15727611fc9 44aa43f24502e5b5fd48ceb529ba3f15548882b1\n12c3136bc23e0d411c8ba07eac964a2c44759d87 d4a97e67f6718d4b958bcc9e2f9c9948befc87f6\n402a62509ad03fa72928ceab6061e2188899c3c2 76d5054a83a9138f667db16af5eb91b5170d5a63\ne4905287247b3585f5eeddc0faa2d748a223f860 d07346636be51495b9e070fa8731477ce3c1c44c\ne1fc20ed3e0ff5cf5de3360d8e89f7879114b68b dd9675aade995b00750a2c4e3aa966c60ad89a98\n8de77a00ce1d8b10ba31cf3d02297c7c3450523c 3f1fa75df98f84e6f4d62f71967e4deaab2470b0\n6b361713e4da2dc2b699cbe84ac5aa52f7068218 6c5db2d7ec19ae619782f46dae93cfbecfe2350c\n85ca4cca39ca939e426aa55460627640031cf583 b9182089485c254e94e24fd35546a89ed99da7e4\n1806ae97ccb6273670f92ba42583f505656b4ba6 52ddddbfbc832beaa0915a3399d9cb20185f8d7a\na436d2704607432ee6996419af61f197ee6b7f40 ede10cf7fe426b6dcc9779d0e5d45009c864fadd\n0ae2851e95090187ceee76e843523aa8ec648040 221ca91cda68749877fe1b36cd5122d37803dc83\n3e66b3217dfa54a517e39e14b6c228bc4bf9f55c 6d725f802f05e8cd1acd92ab68cd465edf3f34f5\n3ae51d3898c9bdca7d0f7ff152149376b73ee4a9 87c4aad879190851e6a61222292e783979947af6\n94dc521d2c672e80fc79143e973ab9888bebdd57 83064db1c596ce3a7e3a96e074cc9022995954b0\nbb276f7b5c7cd1ea018f1835ae56060046b21ee6 7ca9de7e39803b3c3f0a4e68c5674a8f85bee516\n73dd16cb26c678c302a1ebc93b80cd89e4ddd9af b82cd6755dc17f86c2ecfe8cc7a7bd8c37d9cd5f\nf670fd449a47384b34258698690de427e4b8cba8 7a63b30eea00fc423f4a04619ebc62d8fdef2ca1\n2db17d775cd61c6e4d9e0b3fa9e9dcebe43827cc eec63b8990c3771078ce428848e7a8f71cc2cd9a\n0af466a3b2457e2432f05037f0ed54f5e1386cf5 915429f7cd3f2b0ee54c5feb4de389641aa39192\n7714829213dd54b3c84387dce01b2746162c6328 a1351ebafc8159170a9fc0aac689b7f9cd812640\n36ed57c8bf6c68b682a4e19eb0ff50975955814c 57da7c1e8dfa8787bd3a75ab23f763e950e220fd\n30e9687fabcc65b051ea7a41c225c68b4710e08b 064bf02125a19829bb6bbb5ab937f0b815c843a0\n6105f56888935ef97e301e77d61a240e066829df 9a4014ffb919883f997b6d6d15096c2fca8a42a9\n9c7d4a0f56abdded923c14faceca02fd8a83f1a4 e937a1e10898aa1dd5bf7a49790e8e029d640164\ndfff0600716b647df21125ac0468bf382aa865db 45f5d8cf129b435f5df954feed67636ee4a1f1ca\n26038eb62d92c5fb87e8cd70bb19ef298a353423 087d1722997c58846b9dbc3fde70b673ee933f2f\nada52b98d2fdcf2102ad10728c10ef7617ed94d3 1c88eaf3f3e95f59c876f3fd23c01a2986dace4d\n2eaa4d02247365d8c6223a6e2a9c1b203f57b5ab e7dde7d220f81961c9e6b630f789181d934c07a6\naba60c0dd5e8f00f8bac403cfc72dad3c0b66b50 36e8e8b6f57f1dbb400fb551d0e99e8e84c7a4ec\n0a53aa0a8655db4669923b48e6c44977d64797c0 aded742fbcd05c044380b65d7150bb56d69f799b\n09c936e10c927b196a10ff09ab09b85bf0566689 981e14d8648dc9b2432210a65da2c84b1fc40103\nca24589693d3f1b09dd16151f04184c532b42810 efad1de0ecdffc9deb9d1ace2a03b8ea2a908618\n36ba4b2061e194373c943994ce6f458356863a84 8f5a97bf97165e67231dd1b9bfa13af76eeafadb\nf110f7df4a31e122bec7636bc277629d8fdeb6ca ed3ffe56ecbca72895e9e5a276eb9599af7750f2\na7e6188f205c2641380df202d16b10150218c8e6 2113b849cea2d130d953c8dc9d71fcb4edb8d258\n386c73c6b2559e240c6817d119bd10af25d43e6d 6547f5fedb0130662156357ee069133d8559eb66\n12a2705320d5d039951e3d416f42c8aa66a1668d 21ac7af5c3975868c08b228505bcf0af853dfcd8\nc1e03e104ef1dc7d2d0a36d3a693a03dfd07f659 b2070595883b4c4bc643aafa14c6dbee0fb89b08\ne0628337eb5dbb7a33e6587c406a99ccb6fee894 4d346e30a707a56f30aea2fb76d7c45253ee40e4\nfd233dc79da706b6f2e5b9f1cdbeb255daefc24f 240871dbf0c5dd159612a226697965ffff44c9e0\n6ceec7a08062174a05dd6c5f2346f7035e15e14b 59a53454264125dae24658023215eadea3bbe39c\n6f57d0f9e8c61be14cda2abbbb6fd3afe29e76a7 d7b0f17b16af01533a052080e1e4335cc97108c0\n3802418325f7f5353fc5a2650af10cb7eefbcb91 ef860f0853383906a96e4ca2fe9158611c402008\n39038643155a1c3897f5cbac0d4dd1dc66a203c6 aa27b6e8e56a6644be403b15c087cc1f5ec46c25\na778269c5cda782a68729ce046a10aabe2d9a33f 3a117f28a5b12873a3465943cb3e4f3287e96aa9\n3f9ec34ae5e29f5a2cfdec124228bad96786af8e bfc6e5dc53cb7808659cf5ced589a06d362bc36a\nc19a40f3a231985b63790e993d9faebad73c79e8 423547f2b4c468b46c3d75acdd5a57fa0b383370\ne8b6919a83d71a223ca76d749dc3d7a7520a1f84 e5a7f3ff138959b7c0fca811ed4beb7dacf2c01a\n698de68d56a2e707a75263b90a45268120e4a7dd 73b2dddc7c12911be88125e2319b7dd4cb71797c\n1d02d68c873f75a913e4fe684c9a5091f01ed6f7 909a429172227d2635adcab12b2a36e1b811746f\n2ee0429aa20de648c41730f2710c2376461f2198 7fed0ddbde9c0adeaf4e78cb9508dc36f0ac02e8\n77456813b3c21cd6951084ccba945b697d44d52e cdd86ed4330f83426f5b6137c45b836b293db0ca\nbc3b720153bfe7947f9a243aab237ef834757133 1a3a615171492dc67b5f815db7bdfb310fa8228a\n1dc33a4a5208592c03e340a6c65b40767e6c9211 ae767fac71ca2ab3dddfa7f849216100a638df0f\n2989239d201a736ca30d107b8b51a7a7973ea792 c2cf3246bfe5bc4d21b52d1fab82a10bbca1daf0\nc7e9c23a86eb5886d1aeb0608a3099e7e8f2065a 0a2ca82c578d49637f1808aba5ae91f31acb636c\ne49842a11c35b715330762007df86945be1ac81d 61866c946e7677b026063b3c60b6cb7c06549b7a\n618cda27655dc8da1bc633eab885757c5a720995 4dc044293f34fd0e18e58c1b36893b009b35462c\na3e35152be673b1391ef9423fe511d5cf2c60761 33836feffbc0ce3928665647aca855129feaede3\na493a84ac45f6e98499c494f0dd0cbb2d5a4e044 0b70779fc3f852876ddf58b51f5013311c268b5c\n67122cb596b64b27f931faaf3ba57bb4d39e559d 7a38242401f811b523303435a012930f6ae5c4e4\n76916a6d96a42e9c03bef0acf91d7c6e95263786 4662ca4dad580fdadc47327599ddcb9c906afc72\ne2e985bd058dd1ec757226940d9d9d162a7c6dc4 2a014536a4142d7f379a245438afcec71320e865\na758f94a1044c665fb86eab66df7fb2c678c3ec7 d08c79d6d2bd7e43fc778ec9667033a358441c0d\n0695dce4a49e4916f3c86a5440a1d54b2e44b58c 6f93954a83963cfa9e0ab1c137a9703c86369af8\n23d7135186b2ff5975b7aae426b43078242877a1 ed957ca5269be7f5c66f924d74f9b1c07384b8ba\n7e8c185c3f47f85c2674b82d892e1821ef925e58 204bf23e90531a830e1bf82f5fe3a94faa24f35b\n1e2f7d0cf78bbb00c8db6c22ca25382aebbb5e3f 10107bc8984500c51b5a8e8f551182a605f319b9\n9dfd44c7c358cde0d95c83511d93bc7de428073e 0b3a0e3857adbcf377ceb580c0103580ccb8d481\ne74c94dc90a462d55cdc9c04b605dbdceb773f7c 5476260cc1922ad11b1bd67204a93f879503b889\n29ce2bb2e6b9ef0d99a712518f79840cbd299d12 c1c362923b4ee8ce83c220dfd1c3bec36efcc17d\nbf178fdf7d3e988f41a4ed2e4a441c957644ef33 ee415b72c98512c2929be7076380b14d3865e4e1\ndb2828023d515e4849a914d93d323393a10de00f e01b826064a840dca2944b7212c578f892426700\n6477311d8a52dd3c09ea0d945eb97dcb4f45fe38 22ae03d68f0c917bacdd5340a1df95815e6bfefc\n9ec8209a767c4de28557b6244232b0aa24a18352 6e9094f8773a700494cc2fe123f9473c6dc4ffc3\ne040526f165174eec7c625469c347aab24ea2714 1dd2456caf99c3adc0224df06c2b197a42815f37\na95bb61fdb2fef74bdb75a68de716f6492d4e654 24176526ed4f1ecacd9653a35fc3bdbe998ad190\n04f51e756c352a7016bf8ce23396e5af07ce7e9f 733d56c2f059b7035353ec851a6061824489a5f7\nefa2ce56654a2dc69783f6378d0fe5392657be5a 90923fa9dbd6d06194cbb0b489fb02a858e15691\n33b5516e176f342c39589d5b8352f3d9c0a85b3f 67ca4bbb8d280d7bd2b7d149191e4f4af9623ca0\nd69095f24b73e7476d9626fd667e9584e0bcf596 b356f1140e03cab2a4fce1c2780c7bca9bcb5b3d\n1b1c21cb8a2f46607f0bbd841ae86e2b0737da0f 7e6f52c923f298a033af1bd227308fe742b6bc96\n5ce614a30f07fef72689069d68dcad58bcc2a89d 19fa32a703bb3cbfd0264c5504215210da83490f\ndeb7f0162ba07cae7fdfecbdf8822f3300267ff4 e0c5f0fe01c2e265b29b07d3329fdd35917f20d6\n23f6067d4e95e3b5835b84a05aed0fcb91465dc4 ca0bf8ac640ca03200d12e5e8d82fc92b27cfc59\ne8063be94bf41c63fdb90e2a33f7dbfdb3b7acb8 3b29cd4693f3e77f1c2fea7f5160002a149bfd1d\n18c7b6f0acf35b152ee7103d9cc4624d1c5a2c08 d863f4cc3af1756c3acfacdb2379fe24a1533525\ne23b41fe41207ef9772548e0a5773a7c40d253fe fdb59f7813a0cd865d6b637bfd739d0f90613d84\n3e94094a42d2cd102dca27eb7dc982ddb813455a 192f65119199bedfa562d42c0efe3a75f638c48f\n236bf109fcc0e9a660d372521c4f421cf812f5a2 2dec2906960f1ccf36e110a4c177e5929b079202\nbff41e8f36fac0baa001d3f29f87395142d5af84 9428b4bf3afa398eba3a1d61c713a7cdb2203c45\n71e9d0328352aba43475bfc4787c2696763e04d0 2280cb83ca5cd7dbd0497201c0d794c4e8e92490\n8bed287ec0f3d2ff4a9bc1a9d27126d103a99407 6f1c27f223dcf00660d201a8a1d016cf29702226\ncfbed9ea29ed9d476b367c9e77188c21c1b49ead c2c18fe5bd764926d1ebb789f0bb777a853a1d01\n4045e3408a528a65e5ae0a7085fee71db535286f 5b5b8653192812283cae1b6a93e0fb56cc42fa32\nb8c3d3b79ad863f7b806a9c2a72664d603394f78 1ece2f322dd73b354aeec5db1d54757761f3a757\n840670542c6570d742c4b7d19261fa856ae8e03c f48fd383723a7825cb1b014699604623d84dc705\na91ee9d133f7414bcfa21be697f9a289cc840c69 72c76212b261e7332c908c4bb387a5dc6dce84bf\nd78c4b88f90289b788e7d6d431e31cd08bfcaba3 5348a1ddbb574b1e34bdb1c5d2df60189820d4c1\nd001ce225a8a32f5105f0c663e2071008c5dea94 d22cebde9bdd5ebf0c4ae42f3b2dae46cfe4ef3a\n1a361b1fb689e50f317d73d7e32be64a993fca3f 0c32119369f37ad30f6af11ea3964dccc29d9b33\n0676f20fd9f3ccb6670fe135bcb217c56ace87ef 21c368a4213dcccb005bf1603a0c5e4e84eb1d6e\n225262c905c017c32eb3c5cee0deeeba5a9ce307 3460e0468b858dfd4de323b66f13da5793d712cd\nacbb9fa9c79d9d76f8ed1abadf217629e4f32eee 529a7853aa5d654ede1fca231e1d961239fd1ef7\nef2de46183ad388829c14cbdd095a350a879835d eafc38fad73009ae81dfc3f72973f5a6a1293983\n775762f59c0b64a9457b49e9ed6d37fe83c7443a f4bd33dfa6ae1a0a54e1b6b83ad0feed2782f7f7\n26aeb2cf29d416d6bfb11d374e51fe3e9b03011d eca52a43afd355e56bfec8c72ab8a7530bfad904\nc03e3f7c3dfc733e0e14bea08a917d2c3c3c45a9 7f86b30bea0af279cffdb05a5e2929b5c69f8e1b\n05e638a66c00c6617187a350da0eb2862335158b b426b5ef721488b255c55d8288cb57910084f88f\nce61248a549d21ecf1915f24ce3e3c7d3156751b 0b2f11750eba7b164cd89b638756181091a24f61\n5d13fde03fbadbf84dfb7bf754797cfffe23f797 3ccd16b4a4fd4c8d0f3a0df6ac5e24d766b601f3\nedec25dd337cc36d8548346a0ca0ffda3defc367 33f354f08357f27a04f76c6a9310562ec59ff483\n95aa9cb38b0ce1b79b66f6341c2ac59fa506c980 790eacfa055aa224d0ff87a7dee7b4874ef51389\n417e2fd88508024d6a1d4ed1bba9de4ecb52c980 b2d47202890a4be63a253bb90e9bd1585f273831\n4153a72083b7873486578e3672718f623f01cc1c 1eecf9a7e54382dc9a2eb909286f4e1c775371c4\n2ca90a3abdf6443756022c178157dc3bd43ea6b4 b39cd48bda1056da600759b66c263b26de19cadf\n78035e2d78019f85f390af72ebc27d073a7109d6 f548e5ff51ed82895c31eec1b4a657b2b74f57ff\nf179995efe8b838cbe6264731d0d805caaef23e4 575248bfd9349b4e09f04372ab64385263f590b8\n406baefc8af9714c10bdd97e27e58e75bd1f42f6 3d77cafe7ae6bddc27cdf88649953b6c37ac6ea3\nda07fca2e1d392593fbe2b4a8a67442ad32f2caf df52ff53966bfd496e1ab66299e54a5f2929ceae\ne607c5910b7e0546209d222b13d9ea53fedcc073 949185434f4d8d179478784db44c13cb48466d12\n339693649866811d08a6b8b18207723a54f9fa66 2c1a33b7ddff8e8b4f7f11689ec8c4005f02c09c\n413714f74816524b2efef780af6e2ec1f9666e90 abf5bde2dec65c324a9af95b89509823a907cff3\n85e147f85d9ed59712ce607ba0b119758c77e568 0dbbe009cae2ee0e1ec41d4941f04594fbd87205\n0dade611207a6e63ab16b666ec279377531e2e48 f9ec7a7a55967e90ee998a49d62be2ed0e0ac00c\n299ad6c65dc745bc6d3075bf35b5a53ac6b091ab c446f0916c547410a249313ccd2cd2023ca55aa8\n9a722aa41fa98b883a9892a365cf778c4af72234 9714f05d53d3b916e26d6c1aaeb3573e4d2e0f50\n1a774e0b617cac09cd549867e39767b95d9701f3 3aac20bdf02e6982925baac6c19f316ad47fdf98\n221998c7f825135cf3a46b833fedfecf57575bd7 907616f9e034af8a901ee5351f15ac3c5d1b1a34\n4314c3a871c9c86c40ab92786585fbd3b049887c 96ee72d2a683053ef3fd245aaf7c2cbfdee98eea\n89f9ac67b7d186461b59413727a78c196caf9599 c20592b1543a83d9c901229f0ee1c61252eafb69\ndfd2b92776bd94af74683bfc88c0dee7c61111f1 4601a7de9bfe6c522e02f6f4490c1f20240dc17e\n2c2b9e6a7fe19e1d2064bef582b7b4be46c17381 eacfed91fd1ff94a783c183f11eee7e65fa3b573\nc5e839c74f7ff4a40030d1d0314011b118153d8b 498cd14aa94bb58004f1b2991ee471558d44cfff\n81cdf5016671c31d7a1552718643bd00a14c4393 5c907551da1c6a39f03e4c2021a20a60d98bc23f\n08f22dda3336e29e9ce88a9585afd15dca4f4048 70cce7281c46dd4445fa2ceb9d73366855a6bc74\n8f5582948c0b2e30ec752338bc27e07b227d117b 6d6849e9cddd358a43a956ec61b4f659110e7c56\ncdc3fe84c41fc7a1bf909650d4c01f6eee846929 9d3cd7130b04afc6c2080120d858be8f15e25a6c\nfcfba62242b8cfe1f6aa6ab9fb40d8f2ba4af086 63891413e7e69e527ae319c7e6429d852d4c6f33\nbf0052a41d5c004b2d7d70233a38a21d92b8a281 f5e0eb01fe17aab80f89bdbb37683129b947b7ae\n655849ad42beb7bb17243da39305ae55a1d7442b 8611ba86529bab2d40e5945306f597161a3c6469\ne53cbc3a28d96b268f636a3f957be3069cb90174 9e294b3c128c7cac8213c0328341ed9a39e8e4de\nbf17d33911de536c385961f5c2e7dd3737c20289 7a0a94e50d3fb439604b3f7538fee50a236b17a2\n268fdb30af7e16376ec10929d717cfeda6d983f0 7b0a47456c308f21f7d80fd8a3896062de209b5d\nda8c610e52702db66c0b57d4dca3865963d1da92 3f52b7dbdf012b404f721a1b00ad612f73fea1bc\n8e41f160cdd1de6e9b4dab2a99662374855b94d7 315da8ab8612326df066a913c1f0b184d4db7872\n8c0bd2b7bb5b3ee36ba0683132d22ab1791ffd78 dc36d6f98f7c30a6ee6f1b7abad4e1f956eb97ac\n32501f30524b215efa230572c52004ce3c4b1352 b8a94459e89a25a4e5188ffac5ce3641b688fe69\n322c22a88c198427eaea289f5c5416a461e39a83 1177dbbf78d6428ff8bb6851ca1d2325dadd081d\n5c21eb2db72f918c6b0c00a377963dedb82839cb d566092ac06248a2a4c1a333cb4c7b562cf07aeb\n44abde3819965190b9f0a7bed391f309435cc48b 1cf5979eb05cc4667dde96d6aead8c4d7eb885cf\n2f0cc021469f3d7c38a2e9f43a411a5cdad37272 75a192185d8db38f8f8fb643d172f1813576c5ae\n4cda151d5b5257554c92c3b9f2a7dd521d5f6466 806ca3f48af59527080f1a2072e36e996b7df4f1\n2f68ba9114933331a6f0cbd7c2a3845068fa4f82 1d5a93e335ba04f3a398a5ec659966f51d0a7864\ne3c937862fb358625d25197036ca32c2fc669e5d d10e386d26ee756cb20a112b6b93be33cbfddbb2\n09e17a0f20d14abc25226d0f05bd854e39be3c69 d1b3569d3ee73a5d61462c12d609a28a73231685\na2cc64719d7243d35fdeb98539b2f15422b19888 de14cac16e98fadab1977efe884d9d32c95656d4\n8f981d78d280c945fe494d7d2f349d260dc470db da3b945fbb6a30727c7013b44df9b4a76bb650b3\n0fba5b4512d1d510ee61b2864c633019907db59f 25004d6235cd70c6feb5ce39c7a8be8a2939dda3\nc5532f72b1a23054a155751efac762a681b1d374 9d22a734c1d6aad60e70db0935d3aa27af8eabd2\na69f658ac184a269ab73f33023891642bd969ba4 d13d9a4d5fd5c34305f59b4069cbde6a9fe839a6\n2753d3c86e0b5541e6712551b9d0ec4344e44c97 521d8b004cbd07fe67610b37f35d35a826f0d178\n3f0dd20d0247b5360482feb6b008806ddc7c8a4b 520d4d8a89d53fb03314b1b1c54bdce00d864920\n30b7cabf4e831f46549d4ba9d95bcff2909b33a0 66699880f62a20e7d7baaf6eb90dc1c9f158fe64\na09d1c9f09ca0600d1742a9a20f9d80de2ee4252 a17921febfee737d522c5e0ab15829bb4a741ef2\n6804f1feeb17b34ffba657364c5e0087cba6278f 3c8f0ca4c597fc53435094e2dcd889982415c3bc\n14e5168ae949e4c8ce7c2594443b5c805544cfce c403878fd2a1a3c71a3e8b00939ba83c3e033768\n731b261ed37735b87eafac7b454ed1bbe17c58b8 be5cfec79484a305360067e4ab46aa74345414ea\na42dd48fad1ee21ce50f17600776fd7678d56065 26ce88c25aad93c1b9aa7209fde1d285141bf9c3\n3123b283b1de7170a3c0bead62e0d0ce68b91d63 b2e6b78db65a91558dae4ce09de651ac976d7eff\nfd5655c5ad251bb723771d0053e6daa475806423 7833d3af15a2fa06809778edaf4f822f880ba1a7\n5b2f6f243a8435c421e67bfd2eb38db99bf1ba8a 1fb9c22e1117b524595222c9e05a9ccfdaa149e9\n8dcff49ffac2f21567fca0b1d8bffc2eeab8f8c3 290113305661c6e7f7d537eadb431f552bbf99e6\nd0db430c40db2cb1c5fd113c76119ae8b62b1080 68a27d1fc7484b51b7f09f83e70abf967fafb9f9\naef8c6992601be7e96cfe21bb04fb3e6fd134a9b 6668f64d0203f7afc72780ec729218f01202da2e\n5982693d7d32b687d099de50be83010472ae43fd 0c72531da8a92e500b7e537c86637eeb2827016e\n3a2442a5ca20d2b0a59d9cd51513c414c0c34063 5a03ae73336a9fa409f411a93c219b5288a05260\n0a3e3359f929ff28eaecc687463517ae7cdb9e37 b23597eaa6c61b8511e1250171a6c42b0d325cce\n5d0c57dcbaca0198d82047c4f70085209257d6c8 6291ec27140ac27857faf26c72c3e5e77b23ce0a\ndfc19025a2d569f2959427a8fca1fa017355b417 ac182fd914401911fb1027bcf651f4b09f03768e\n63973b64d06c6f08a04b48b7c8248504c4728866 a120d501cb62da339bb5365f3ef1a124b211b413\n522def25590c480cb6b38529e7a991ba3204309b 8398cd8f8fe5e4dfca32ed22f8deb68e9733834c\nf551db590b838d692b1936bf391a09279f08eed1 27659a7ae3e8f73146ece6808960d63bdfc11b64\nccd253ba50144c99ad8530389f7b127eda44aa98 0829f421b373fc5c6473afc8d9255a936c1e7661\ncead5055d7e00ec878062aeab747a6b0ee68b430 adb7d6177e9a49fa4eabd7dcc65f99007067b1b9\n37f9420718fc585bf1de3ce347b2dfae3d8e3d3a 2ae1b420b32f1c08128a3cdcd4aa45aab51a3b02\n3b8251c00dc98c4cb69ed5ebd3fc80c7716357c7 0ae5064c3b7973f4c89a37a2cdcc0317a477fb61\nd17e942fc6e11e6e5b8a03cfab7904901614088d b709043670e5718afb0ec226e16fa4ccf63c8a26\n65db122f4e6b77f3cbd5677bef5553e12188b6c1 70c1341f3c00405efbf0c1a5cf46563abed722c3\nbf9fa8ab375bb849a167a996fbccb5e57e24f370 fd47a70287e0dc37b5b5c588066bcf4057f7b44d\n6881fa6f86e12a072478606ab24bd72a180dee6f 1765516142a2577f62598e6951f925f089e579c9\na2a4849cdecc0ec7a82f25b3f405257d2ce7d4dd 87c78b9dfd6f53536c51ed5e1d41b0dae08e340b\nce3e460eee86b4e6a463968abb8e6b2c280dac73 2782da0cb90a1109647eb2c6e2ed2fd216d79014\n3cfc7db1e6c17defffd0ae0ed1907e9ccfb7dd48 e5dd7c11581ea21fdefed05ab3f4c7c6ee69e468\ncba16ab90695d3d0817668bf8b0740c2fb47a4c7 d38f7866a8b2dcc77163f829f648e4e69fd696f3\n7e18fb96477e293d1063eeeff1e49d82b6ee54f5 79fa50417395785d85f3722eba5f3941b8261a76\nd4c84425c8eaeec370f7b2c2aebd227d7a172d2e 2e9a99a16d1f4cbb619fa2cfd4f43c4141368597\na1c23de641e3712fba968876ed08a0af25ce6a16 4867a1e0d40d6543a73b632a20e86edee4a46346\n61459fcb8cfd5bf7e5a3684f8aa073818c6b2af1 311003ac80fbf3a450ef0e302ecab270ac66fb83\naf98df26785d03e8575c1daa6c912064aab8ee99 6430a2513f5a96a974efb398d7568a88d5663332\nf9ec2118e5bc8f655a7ea96b93f4ce2d9ffedfc3 cd18caa638a4ec8c08ea1a754ad360661ddf4cf6\nbdf1b089bfa7934e936c641b992c89dca75703ee 4cb2df1b048c66716c7df07d12812cac87b07ad8\n257faceb5a336070156f902aed4c76984a45a505 2ff72f7d8f6bedce2d365a58402fc44b4f4bc04a\n23502348f8113d0a8c24c5e97da3c954ce9e94cd de530410f3d07e9e8994ef2cea292148480da55f\n367a670796dd10d19f0b81dda006c362446635e6 eee4fe7cf2d669f5790815beffc1d28fff7372bf\n5e4901d6dba595a162b43e38b990ad7335220633 2034c9d28dda7ecb98723a8b592d3f045014aade\n31bd24c624d09acb99a465a2bae371e2bb6f5b29 18d8fb8fabf1e1e997b267f62e1ea08a7e42dc99\n8f760f9637bbf59d292858190b4c541e9d23afbc fa7c58527e705f5feeec6ba1a20a1d818a1b274c\n94e4fc81a872a6140a96e9c717e2088da3021f8f 1aec7c67cf4ea5849fdc85bc3d325b500f36d6eb\n71e177a01cdccee487e41d04c950ec61bcadb92a 8ad02bf963e5c8342ad2d512e16149fab7e6d990\n96a8c1b9498088a36eb6d1dff152d3c72b19ea9e 58b6448b45b2007501c4a003749adf31767d8a50\n508e4e3daa3077645deaf0e283638b287b7648b2 f3c2afb9710f7413e950620d7d4faededd7e7eae\n0779d58d982b126b3bd5e252375125a1c97e868b de77d47b07cc2ecdb138e7f02cd8a3c1f7ffb0c6\n7ba6f1fd257a076a5f7aa6dd9fcf8dbf1698cacc 94b6d4d27998adb4cb1fcdaee1b297312666e8d4\n6ae90839f62a78e24f2cd49dbfc580b95bf4a6d4 7eaa52130ae975b7fa2ab80ac0d18d83d46d26a8\n5eda5b471f004c67c1996f6a11327d448a3d10aa c1693b9a4b108bde76e715dd1f5569990b6cd2b3\nd62bc1c92cf735d516b2e20bfd84c0604da6124b 853422f5d9335f82030c04224e0829e0ce8b62ce\nf3c6895769f6ea7940cca853c952f0428db13125 dc597e90364105cf128f79d44e3294cf2b560e03\n168ab5d5d13c5989909e01532ca3839948c9ef4c 99421ebe569772b3f185bbfe86854f40c2ff647b\ne00f9c2426039c69eb4aa911f38ab5cec8714aaf c957c196fd088702fd345c2e20e70b641ee97da1\n0005fc9124e3f46033075f234f2b0c246c1030af 4b293345f480bb59a6d2e58f6e98c3340ea20558\n9f51245b59fe2ec57baae4a0e2c30cb25943f4d4 05e5182ea6cecc60cc6bd767c78f8e4b7fedd131\n48d15b541a18d2b67b11bcdd70ea5b3e59e65a31 e25c1f2fa99e6cee2dc004bb9cdcc91a5c32462b\n149b830969a9f5023ac0a5d0c54f1ab148edf8d2 70246c40a5d67a3e0d81b77fbc572495a64f077a\nacc5bc00c7c982c93adecdefda4ea330c44fab89 f12ae8373417aab6884aa96269f7f8338ad86296\n816c5fe6b0da555e3b541929be74806d75fb9251 19d9dcda89cb04a2e39b7d64196190aee1803b19\n14d67a004aef313445e58e798c61de64844b43fc 5f3116a68f893775f8993a123307c1445201e3c8\nc1a34397b938f107e544482e72a0d0a7d205770d 2640636935833ea546006188dd73e4abaa2d8742\n3df213b65de058993bfcdd69baef3a9167a0d6d3 323b41f0959d29fe36867a20eeb3603de987c609\n2ee7586d5fd7d353e7f41b2049a0ddc455b0ac6c db847a529eb9bcb90412546adcbe8f220063914b\n2c81fbb57933fcc9a24655863c0d292122ec1bb5 d09bf0ba367a02ba5d8a00b17b863339d65d4799\n759a39a317a760bd25a4f7eb3f44c8a19ab010bb c27b480afe3b31e876cfa8c7aa755aa8b6331d17\nff162f7c7c1033187ce6731378a0965358806adc 2b6b694ccefeeb5d99da5fd0e8b710df24979c05\n52c108b57ccd1114696890baf8ed6ca4fc87d411 7e4778d2b9d82abeac499f0649b1e3e23d3dc6be\n3b3d15d5c676661ca70b11ecf24c1bc77227a028 bb99c6e989a8b485517e351da5b44886e5301e0d\n301ae02a5409903b2093676f7d379819ec4e73c8 9d75d8c11900b2fdaf3e83c4a1781b4ab7fe4bf8\n09c597fa645a3fed031b2bb2d14733e4916e0c06 5f25c4a78f3df367202ef078a17effb387d1d32a\nf7e963eb0cf70b53fbb109e0ea3c73a19f01b6d9 b8850c896ce262e1835e04bd2d18f81b9f959eb4\n58a89e185bea6c8672752085eaf90c13fade5dcc 5c8a2e839806d9e3502df7f6a636a758de4e1224\n54e04d83fc24743a8770f32536befac7809248e7 0a0a444a11f91053237d8b3c98dc9e95d1ba379f\n5f707bcf9cc1d27762a18535ee5997da939f9e23 45b811ad4b00ee532dfcd06ddf01ca45369318ed\nd1e35c68b6d1a99fd19a982c154bac3f4dc2f779 acc00a9ee07c0ab4cd132a6e003e552da1f130e5\n3c6edcd92da053ce0fc63cea685091cc8507188b 8d7670cf6c4da4948a141ce8deea64f55d48e9e4\n755593576385c2b8d26b4531b91eeeeb212cb3b0 ebca423697c69e698cbdf0e61f6eb91c7c1ac042\n1fc2d72a644d7bcde3e854e4a8383df83afcb3a4 7fa17584e5b7ea3effca72fea55a6b6111a9f501\n6492256674cade933be80dfd1622109fc6bfeeee 694b0ad87474a25b93c18abeca5cef0870f311d8\n8d7d3fd379ea484e903da7d5c9f852556e1f8d6f 3a8cafa7893e02b21a81c9e49f76226bdd28d173\nf4683a7158615323fd5b75515b50cb86241a3f4b b022952d7a6abffbe31e8739a43337b22e20f196\n06c444dd18422a91e0ec16f65ef964d9b955b87a 7bd31766f9ed2e64e7eea457472e067f8e9d2a9b\n771831312b17e0e8c35b1352d721052159ab38a5 a883f99a86fa2e8094328bdfb238b3efe38650f6\ne1f5f407bbbd0c472936c9def321b042d2960c1b eeb041dcf9ac41a1e780388fc3e4fe973d1d7f8d\n1216613732aa040064db25e5415f1f048079c9c2 e2cbc06ce07441f06b651ade4cd662d4ded198c7\n34552c0956f27bf364a55e25152845365d8fc727 7b08e73eeb9a3d830103efabf9c7612e68cff92c\na043272837f798efb2f072669266fa4e982ba330 86c7fbde7000e2ed14414406c044ecd76a2b8c95\n8238fd51cb898beef3aa0685d277746bdad6af1e 09b132a2590f4de254769aa22bdbc015779397f2\n9f10e1dd4ecf79cc1328fc9294bcafda3fe7449b 91e63a10b64614bb1ce21dad1282740a19cae0ea\n4468ea49d008bb9153d83cb1fb300dcaff7a1782 46a66276e1568627b4a05e2e29e591d71b65475e\nb268ebc2d84ced7a731aad84ff34e7893d78ef94 636a5e30e561f82625d6680aa239c8c9cd5092cb\n4ac843da0d2559c5512b0d14a8a3731aed1677c5 75f2a28a6a2c27df9aa5c1d28c9a8fb0ad383c13\n2b0c8951eff95696815cfb390cb0934ceb3aa02b 3bfc55fb821ea2a72e703d3f5f5c16f6bb00b2ed\n19673432e7ebc96fc5c1c9983a2e1a76a2424408 e6920ded8c0562df305688ef3b8b6a0644b8a264\n3d105499937d04c1818101ae3e793eabddcad429 a85f3824df50308d3b163aef7f26b274a5d7348d\n720a0691e138658bd659ebdd472c634233014751 6e31de1fede6d972572292208635417f51a722eb\n279b30c1dde8243f80baa857822ca5bd0185c77d 0f36af842d6fd0932d68374f595553c8630c6c1e\ne5c75d08be6b785ce68ed2edc2d54be845a7f8bb 663a672863efef2cf45f3b663b42961304eeef73\nd54d99952f20f9e0970346949d07324977898d0b a805ba277d0bed26c1731be655e4ac13de59d901\n3f7504c1c08fc1e91f820787b874f5d6364906a3 5bab9d729fee897ce2c06265885dd331a501e502\nb41873e3cb9fe27407c0c5d37d24132d11ba82ba 42fd8678f2e37cfb3b50f079a96854d4e9c9f931\n7863c453f22bc06ed02384c8f98847331d4d0faa 45d91e5a864daa9de1116ab108777205b0bca767\n5ac382b2e915ec23a319b29e29a611107393c009 d56b33f321ae6fa92b146e31ab7628643f451ec8\n783bc779a95785fef2c877bd2c9ffb36078e7693 83fc0eaea5f827688c5c2cfe21059819128119c0\n05474d9909e54d64cffc7e62b6eb64f549656acb 6c6461344fd62cbf99ac8fadd8f3964b277cdc19\n6f7dd7ce4bb39d1563b05c7e1acf7bf214bdb37d 1d447226f3d8b2e400b14ee4d254b162e285f417\nff20c4efbc88114113fb71f9ac2fa06b510192aa 85f858267668f4a22c7b6efa915fff8480da4c26\n7cec5c313d727d9f6ffc9c500a8fba6057552ca2 6699aafa6f871d7e61f5501254a846842ffad1ac\n09585c9af3eacad8bd422f0c80e3be00a5f256c8 df276641e792e212f20623ffaf4ff146c0297bf0\n01f8279f5d1e3e9af85c3f5bc2c2920e57e5bacf 4b37bd9b0f23354955fc16e81f03bf4d5fc6fab9\naf6cf532db43fee101e19263f12753a2e2221ea4 94a7e90c69f89d5c4d5e601707349db9a826e7d9\nf4d41f6693053100cef552d708198fbf4e358a8b 54afb65a8be38cde15867bcd6b336a34c8552f63\nd5ad4138f2c427603b13619bb6de06a35ad75665 85028580792cb81a7941a0712a9de03a084cde84\nb6f4ab11a11fa838d8d88664f063e0e0202a4449 73d3024439fcec30218bfd2c31ae56a89a6272db\n82d4be3b1cc0eee5a20329fb1cb0819414024879 b5d778bf3d988021596d861abf5f2215701bef00\ne1a93044731421403ed0d75f1cd9f1f6a1283181 4099e840dd279886e8cff2d2ecb7769606f78412\n49642b90b82e523480b4bb2e6081296ef347e289 6a879266ac7899b12fd0afca762428c67afd9200\n4dcfe2df960c7efb2f06ac799d00541b63d50dc4 13e4780ceaf8b44eb89dd04e645895b55197d875\n858be55984183314d50337ff530c81694e2ee75f 00be81aa28843fd267d2e87b2c4c89e026bab444\ndc151fac5df97ba5cd0d12a405eb955ab2dda1ba 76bae9ebfef7bad34c3c50b38cfabac29a4c4684\nb4c88593bf53051e99716b48ebd3605f8a1d611e e1b6b48f44dcee2e54a11efece11a679d9511ad4\n9b894d3edf78470d8a53a6e1e07c929bc7b9bb22 6ce2e1fb527aeaadb92acdfae2328ce632fd891b\n04eb6d108987a9d37c88b5dbaeee9daba2e0511e 4b1c46f83cc83fcc471095906cae0331249e9ff4\n28e328d2da25c9b1d768230f47ad5d6c4dcda04e 372cb4e78e0778a429d49b549d7ce0a4e5d297b7\n1ff9594288ee29f5fd5b7b60937273be32033302 89bcb7f73461e046ed5ca97bbf1253edbe8faf60\n8b03d1f7b2178aef0dfd5a9c14bc490f99b48766 7515ab625f4fc8a250e392b57ba5b60ce97a38ea\n5ea879fb149400f2428f8b32df38698dcfc593df f46be059ec7db1489621b95267da2c24de3fce72\n853ed16ba6da7fdeb2b9270ee0cd35e9f77e788a 79999c132aaaf5d61dc3b41e6605ed7a54c2effd\nf96f234db593008b14cda6d7711542b29e84fda6 7395a934ed27c5cd526d20f9ca32cb155e44c7f5\n14fc578a8d5a5552e1cddd0ca2a388253a842f13 609b45cd24278b2dbb4f4b147d8571b4f510c40e\nd3e94e483008f6589997bdb4bac018af6848ba32 2bf22ba185ee36f86f799f98cbb1694365733ff6\nbf335b445286d5bfe41dd92dd52bee0be5d4e90a b8f123a14fd96c37b4312715b399bcab1b7a1b5a\n3617d4233625e53daa5b74914eae2c65b8732de9 d96281de60ecaed5052c81f0dfea3fa7f4c737e5\nf1bfd289a834cbd90f362841c798741c7efd3b91 4db12459a3d0dc58bec472550e418a050cc8674d\nbd4f60f96e26d4191c085bc4d52bc934c15f36fe b22bd0614ec93c1190c491482373cabeee90ac89\n94fa07d13f04afc204ceb1671cb693c9116726f5 3226129e4cdaba46b245394fa1758805000e49db\n4a813ac825168123f0b7b1e378517dabb0372132 77ef3c363ab850a70c53724d8e785fd1dc2b57d1\nc78b925b56fbafd3fe50f5639ff24809ea83090b c57ee8352002990034983f6f480fe816c73ba651\n67f1b3840835e12e8200bb5fd5adbe5e4dfddc25 a4798ecf66cb41fa70c0c2b6e537b7d6f2f046bb\nbbed83f58191c33704c7b03ff556ad9401a97acd 3ee2cfd5817f31eea2991e8b1329cf68712e085a\nec576ff4ad7368f5bb89b935186d2383f431392e c4337a5adae02e06003f922c8337ca171e12e5ba\nd4c81a618f9651a3e12efb438bfec4164adbb72c cb3d70fde7a426927b4e3ac297ea2efb8b6d3118\n60d194bdedee15c8bf690e0772b960fd5a1e3514 31b9671eee9afab559ba37a82737cd558c116b54\nae497253fb357c302b7e9b961c469d38b1ab7cc9 e6c93cfccd585fd2c3c3f7f6f59fca9aa85ddbfb\nb1b2425b2be25f87cf5613e2c35c358936ed7c62 954b1387be870b5aeac203ae9663cb4f2f911e72\nf7967630f43dcd6cf9e8b5d9c71168ade28bbc62 f70e5041c6d302d74f8bec26deac6c815b03c5fb\n6ed7eccd947fc2b009921cf20d61bc1a72f2cf89 4608b1d7340e9329777aba3c5e7846a3b45e88ea\n53269e586b6599978d50f9859c2923126a401fab c88465bcbcb60624ca5bede486b63b073a52202b\n4d7aa896a4c63a111a43d871ab977bd8fb3689e0 91491fa6c87919179a77ca071366cc8514515204\n9102b9f1c252b995b39514efdfb1c49a1697d375 13e33968bb7818766108fa2b0fae9878ba1306ae\n5f442bfb3865c6e79c759455378862e82d7f526b 8ca39c4a31916471ea227ede882167a1b39862d4\nd5e33fb3f6337bba1ff0c1567b758e1f6ef4e5e5 c88b2b21ee02d5a56aa9a5b14094d81403790715\n3a6cf1cfde49fa8594e1856ac377e63848c1d97d 1684d0c9aeaa78e800b71b44d58effa978c245f5\n18ae169319fcc4d24399d3f33b27ce25d8fc0dab ffb0dc5fe700f5e8f20fabd38fef09d6054aa584\nc7bd7f45bc9f34102228b6532ded2ba64a8d64ce e33ccdd26ac03593f84f46791dd050f5f3d803b0\n31435379ec1ae328d09654404c51ac3894cc6280 cf8bfbb59e6e7e0a98ae5d741a875b743fb0779d\nb1f72562de8cc113ddc0a9ccb1a4f72e31fe2888 3ed3da5c83ba033455c311b2e535697f8998beda\n91069c3e215483eadc9b50cc068ffff51eda075d 56f3dcfe18d4ce6e78935f0f1543846c8683aa36\n8dbbb71a941fe8404255f60182ec0adcced2d15a 383a7fd366c9f4cf5c7a32e814c7ab1bcb15f8f1\n2f269b55971e5cdf740891ff26a03e06df58a74f 65d58f2ac6931c2cbcc05b53924eea538096112f\n659b73d239259e1a67bc35d3a3d8e9268ed2a510 d6da07b2c0eaf46dc7247645b514390896239fd1\nd9b3d8a56d6c7d97b29c981d570c9659ba2bc79a 01317c8fbf61c465dc8f4e0ed1429b56a141145d\nb0d77f3b0c0add3cbbb44052e8a62cd252ad163f 0e6fb5ba7d8947e57224f44c144623918c40ca89\n97d8e0e201043ca042ed02c5f5c8ee27b580091f 33995530749df9c21e4060b86ec8096c14594b01\nc8c0a6c8666ae63ef26b9f2520bf05702bf56aa7 dfd7a9a3db26fbc9dfe1fde9c96ba3feeaaf60cc\nc748982410be10922e79ff94fec7eab3afc01dc0 fffef646a45f39f9c0d80c5be48126fef9a06180\nbe6715c275403f171ab94629f79847ac447324d5 b89b070ee3eec1c4658584110d6b1a71970fe769\n584eedc50f82ad2eae2dad225a5a918aadf2f9a0 5e2bdddf5776c8e556b0e4bbe06f281745f1f0a4\ne1c2ad7d9a0a57f7ac02e4a8cd6b0141b941cade 82e22027a85bcb1182cd6c36b42af389cf994fae\nfaa44489169454fca43d833e5a0801e0689e86b1 b7bcdcbf723c4dd9b0fff554faf8e5ed49a0aeac\n8e9b689aca9614bab220173df4d5a4016354f3d8 1a951906972f5d35fdeb57c979661c7488b47ca6\n7bfcea060e0ce47793fb4cd92f8d46305a205044 9dc96202f6ab8622d91a6b5dd00f71c6def1f043\nf81b70ccc7f6f6289fe5082fff837171538535ed 315384c4d1ef8ecbcb3a9bd52761e3fe50743a45\n5fcee296cac90f3956c9fef8cf35347a6e91d0d3 51076f438baea56e1c1c8c3a9108bc4f175e8415\n6e449bdfc8946ad15ad0ff582bbea00c07858026 ed708054067fc703b4a3b988b2ff2d126f2a8218\nfdeda10ab062523f26f5d46475ff3679545cf7e2 82f833b049c31ff6eab1cb5215a557c107589f52\n409040e782476f4ea23a6f6acb3f2071f7d508c6 fa86ca00aedcbf3cc477d4bfb3f9e099a4f99278\n4364070e45c10de467867056d426b1cf392e17de 46feb0ea120274e95592f64f6b36646669e0f738\ncd03d44cf61ccb55dfd6f9a1377a99f80559bfca 12c163be4f023a2283e143b6b2d637365731c259\n45557ebf2f5291c08ddca96ea5ac343fe371acb6 bae91afca2ba94ffff597eda267727f81b71d43a\n7a293ae24d93a1b26be365100240c0c2af3f6104 29166f919bc38790a89e736d1275a0a6346feaf9\nc053ff2cff1020e849045c26493fa772faec677f 8dc5a7dabaa2c21e496c0e89daf67307e65bfc8b\n3f9e7c81e4fe08e08b02cd2c076f8563137ebd3b 9b46d96b8034415759bc76d9b753cb965dfc0db1\ndbb9e9df9570074de23349c3aad85299a85780e6 b71c885bcc032cc8830c5aa56021e0edec9f6a83\nf79d2f30e17a0d6b7ddb7694d0a1b1fb6378cb65 e0d1a06aa08e0bf11bd3c998e0ef69547a5fab03\n286b26aa82479a79efbd3dd4932d6e69cc2b621b 5a59a820143c23d83cba09298db6af3bf8661abc\nbb08afd71f7424d1f54a8eaa74e1fb0853340342 6f0d0d24fff9b1c6c0b641444c59996e99f87e47\n92a029bc0702710db6fa721b2cf7c68b5e4f2817 b19649bf4dcedb0a0e16243eaec378799a6f1528\n2d1b9f7c49bbf518dc940a7586276bf987752f82 266788aee7a00d8b4809153afccdc626ffacf46c\n21cc339bd2555be15deb156f0b9ef18ce7a86ef0 8536eb1b29cb4956c39edc4b4d296c4875756fbb\n06ff444c461c1893cc6e834f15a27c47b18163a8 5521a354fd0e77e9ac315dee3b241ca0e0211c15\n3035155809367591e6292259081dcba10c8b1221 3d3005dc08d7d37cef61caad3c25f3b3d751ddf0\n1e929da4a95ab07145323615bbb306861f42e43e ebda78ba4a8f67734534cc1045afe8e1db9dd716\nccd1ecb717acabf645e32bf9c552a2195df203c2 dd7984ab352eaaf12b33114dc49f6d8c96711c51\ncd558bf70996b5980862e78f701e105e4423a827 74cbe91d11cebf0c524a90ebdc06a87cb581c2ea\n0de9959c24a8bfbfd1ace3b476bb45809f492fbe a376bfe9ad40ef6992f8ffd304dd9c5beee7011e\n3f7084e55f2475d623d79d979234fc5af119cd7d c587980add0d77e2f71facdf4bcbbbdc356b5218\n3520c5652924b5f695549d72e3648667b3f7df9e 666ef04625f4619bc450958c4ebe9ede79362f99\nd99141b2f4792d867370a27692d939050c5d7e30 ed63d415aa2d7e214edbd602c8e67f7aa42328ff\n1fddc50d4c747d63fe4102439f7d137e566df996 a7e0c908a1426119b47f317de08864a3e63ad16d\n962e49e0797bfe9cb2755752e97f2bf6f63a9db3 37e1d3d4dfc819935f8bf64ab0225c1fd111d300\n4bfaa942b2ebd2f3e68147285d2df3b8765d6ce8 a9cc622da641925bd2e1b3805f7a27780579ae0d\n1d471789241cc7f4cf20ec99e0a94d19d2341d01 ff2812cc8cf8c4ca6dc3e1a79b989c8cc2b781a6\nb5b0d374c6a4d8119029619a9fac8ee041d3d05f 08303152684817cb1b19bbf5411363a3ecaa0baa\ncacc4727af9b1a911fb28a3af79f26eba35038e5 e7eeb05c14fc0a343604fa6c975825d32a63d90f\n16ab11cffb11a599fb542dd5911fab9e80efda27 0dddd4abcfeeac7aa6d3f0a23623f7dd597a2586\n52409e5dee1ce79de31a99285979858b6d611580 a9a878d6af83f60c9d76a433e2f787614ab9392d\n0078fc80c1c7a9fa1600bfd72f8c8c0172e2d3a3 924c4924135f637076eeb81709d8358a69458c03\n468229fc01a7c4f8440ab25629e8a9844de1836f d7b3a2a43242d2c4148e1afe540edcc354072f5b\nae48426b44c7770b1022d8a2b32c1ab46654d6bc 408f97d5b13be1a6968a252c9d9f4d327dd75eeb\nf0cc2e020dbb115d78bd092182736b951ec9f7d3 ba976a8a3ab6e60f2b5c84c6e7f4dfcd5d668dae\n2a4c17ead6dab1e7da7f4a150414e391812b4bf5 f2f560dbf37e898463ec82192cbdfff808789d22\n2bf5060e4ca5f546549dc84f057f12feed068a41 650a4ed44ebce636570673678ef0b1e708c7cb50\n4c997bb0ea50a94936f8e6e33e1b9a1a51ee8eae 63fc7533a36b235ae0bf5e6ce6a1d3f4715e2b2e\nf1d802405062c34c47a080e80746a687a721fd25 d09f7a00eedb17ff1697fa2b67fcf867646acc97\n8c0d4578892372e8144dbb4575d8f1c804ce00a2 db55c807341aeea1a7fed8064340b6de814eb284\n72a8967e01dcb5f9a336c8e272bee52f808e6d54 2771071abb156d22dcbeedab9b5fab5d424fa8bf\n1f2fbb0c7316de87f7e761db2f8b350c74c9f8b3 f25bf232615ac59818591dc11ac9c4febc99be92\n8c2a69bd4967bf920ebce2b437e313209620089d a14a4bff2c97a9c96c92f4c32a1a4b93cb3db0f7\ndf3a7a8db9eced8ece61c0ed274351d50cc8be04 eb624c79786360eef3563f9399ca796b11db3f49\n11e2fcae22ff6e474873930b205026302948c8de b4011c0b2e65995ea1486ea513ed4b5ac0aad2f1\n7c19c40313751e7908cb20a4cbf2065f1e7bdcfe 7e3679405ba0a387c3522bc8e4b4421a62e1bf26\nc02a3a150a59ffdb0a6ab665daf91a4d5003aaff 6314365f22098a8af43140e1e94504bbd6dd8de7\na9363efe7d1c724fae7f4bb9e5d3425ca372cf5a 2acbc7de39c0aaa96ce21db6d54771f1b4e15b44\nc8f28932ff910df6931865d8f39bf46b4c806232 6b94f4d8cc95e95584f5653b047b1eff6653a70d\n8d334badd2a6dcb629d32cb28718c7f313d864cc 6d14ff74976e096aeca125b1ab0620eacb63dcf0\na4bf6346b1fd6204cb9aa32fedc8da72cb31c084 a65e91d1e19c6b897547fac5f94cde35ad810830\ncfcdc3ddaf344256854145768aa25d7c67d90537 eee8fa3b07357991ecc7488e5189e32364ed6d37\n2c547bf7f6c1ceb946aecddbdf8816400552d5b2 64447f244c7ac51717ae3780ac8d68765d89141a\n844832615902e7f152a07806f1ac8ee76413b1b0 195bbdd869af18eacdac79f074fd528dfa26a0d4\n56f4e51964f909a6e369b31d8501e2cde536e9e8 4f2d44a491085a203465155cc50e8b2d5edad47c\n8cadabb682a997c292053e53744dc84421b2441b 799b1243d021c446cd392442a4729fb37f8200cd\na4347b311caecbb252665ff073aa2e5a94fc29d4 3745768a9be797f01f21723e823cd4ceff8b25fb\ndd721c9d292e08794e43eaf884dbb64f8a91ad6e 904b2d93f9775fbc3e2709bb0f2aa1467fcc276b\n4cca80700930bad4884ec9d3b305003f050ad9a4 3e6ad393de02bba99941e181136162a75d698fc8\nc307a307268d6af323d57d51da96000a6f453666 8a435de389eb794bbb01718bd672820374bc88be\ne9472934db7b9333152a9f0f10d23f6389b9ec55 a0dd588d3aed260c4d32e737d43e366d14fb909b\n79442dd7c79e593dc8287b85189597b87648a7ec 2cdc5abd5ff15b7ab7ea49d5164bab6a1a578f1e\nb11ed8401b39e3b9f063289e35e3ce74f17a3dbd 7de096097df3362cf5e0019687ebbc3b675aac85\n5b4daff9094cd0b65cfa088b211047e424f8ecff 2f992b81ad626a669dd75372ceaae8062a0dfbbd\n60172ddc119af74c1874eb94fcfe8cede49b1a21 2a4b5ae46d5706d76cd8ce0b5c2f26b637012e9b\n03b3fcb2ed1c1e8336e62002cb326d63b598dc1e 3cd2a84472e57c49efc48c3ccbc0048e2f31edef\nc79074c3bf38ca35923543f57d4f86f92579588e fe8fccca56d30a508ce824a06d2e87b4e5c2d923\nd518dcd7193698de4ad583d7b2aeb085c03a015a a2782a95100483b42bdb191ab8c4cbf36582062d\n8de0701766dfd6981d0c8ee40ce5cf1d66aacae9 4be13f9e34d7fa990642fae7c939b91d30d8a218\nf7493212777c50d2690f85e87f68b372f86d8914 3c32cd246ec375fb874fe612a2e7c10cf8269d6f\n82d96a350bda42639d3033fcee5056099e7bfbc0 a99848914983f5ec561c7eab7adc48ce49633cd1\n7870eef476042bff9cec5616f7231112fe7efb60 92f4ecaf188baca11fcfe68d8032926cb66d04bd\n23bd6c53b75b05c7e43e8f3dce920f94f2408c13 c4fa05cedc95c4025919f3896e19cf94302e3204\n808be2bbdf31d49e730c5b2f102af5e8da28180d 846d29d066791054f1ade52a18b7ecbc5ffcec68\nbf576f0b328ca58f852622e8f49f284dbd4e7042 d760a244700334ecf227ec8e944df44bbb4a26a0\n5ef1127450aae10d7748a710b0084c91e6748809 8466b16a80f5f4e00385103815d2726ef690cdc9\n25fbc1c8be6ca8d1fc0c9c7a82958dd8184c4ed9 f301972b8798eccf32eea2a4886856ea5e47ac9c\n564ce06c07e371efd68f0a735dad122e1b5b610b 150f1d95d8e66200a4020cec0c98a1352e2eefb0\n680ef5b0ff865c82fddb046e98f4151e087b81f2 b7d9c620843998c75fafeb812baeb5c30c43c6b2\ndaebf5cafc16d98260f3d9429696f1014364b3dd 4090a1e59bb53a8cd23328e8ce7e8a8848532672\nd47b776737f1f8aac4b763b8e9f3442c6ee9b5cc b89e3eb6285d2df1ede0da4d058e466be418babb\ned4959c77e4cecfb4566bd81cfe8d33374b6266d 43f30a9378ccfcde97c86b8857d26f6502e14231\n67aac78a522e82f9b6e21c9e6479800f2fee9d78 d92ffb94c99b92f47715dc28afe308f3afc370ca\n5fc3c8ed1096f8ce440517879cdb82276f5173e3 ecf046633c0919fb8749a1301e83f69e5ddba4fb\nfc88696d55a7e6d6cd080eabadf91e9cdfaa95ca 2b8c033dee03558ffd5be6806c0bbfc21f6bab9e\nfc517523f52ccecaac9c420b2c59934350914cb5 547965871154b75c05192e6af76c073bf861ed71\n09b0a7b5559aa5a3541cb837c7e0578ddb968844 c7d3ef402ae8dbf539b1c077b4a6665ef40de88f\n1537a8a58ba6dae86db3776bd03c52c05b5c9c58 f4f8bd3c62e7082868015349c04457966a5ef99d\n0aa49d53febf9d16d76584220f729bc14f720ce4 76c2554d5d9fe2ff273dba6e95cd5902480321b6\n4f556f8248acfc868f7da7a4ec00179044396c86 909bdbc0902efdb98b52e1c95664bef048200647\naf436923f049374fd21d205b2e071e22ca758f8f 121688df9813157ca2aa69efe1add9144a31b0f9\n4574fd1afb442a608858e1c31fbc814847f9847e caf2a1455d228a235693176635f57fe17afa935f\na1fac9135eddca97969cec3a3e4e458f1cabf6d9 d08944f19eab7c051409ab50a3353fd7e7a2afac\nfe140be2a9514893f9b60e2428a8018e3ea4c1f4 943db7a133b7474f441d137f2a58594c4df10f68\n9d8ebb0dc3d4f436a23d3d5f17e22b2429f1b78b 426865dd4b14ae65860c9e5936753da2fe25c378\n9fc1d04b01f2e8f26cf49a3dc66dd155800d9b1c a372048c8d1e548c3520c4a8011b6c4b2c1b283e\nee411bf600db62b9443f0579e34ad72e10e934ad 855b94564336e42336b914cf68db8c5c10c1d815\n844e5b09b175a20280bd32b41e01e440f04a3192 af446586f66b35f313a4d41123305fc609c761ad\n388c8b463cdd92ef8e90c50c6f594b9a4562aae0 a8a23dcbc41ec5ebf90ce80f9e833648060f4b99\nafbb4dfb8ad712077eaf914cb6fe9d695dc41151 e063cc78cf1a68ce7edc66b19babc45a83ae35a3\nd5beb456d4b7ba4c7fc59889d0c99fc9ba16d498 27aa8d60883721cbd94bf86276c208b01115c7e1\n90d3240d3f9cb6cf9f2c24aad1821b6154df7337 1c90e8e1a82bfae9b5d848054ad743c086c48982\nf9abb490b736cdd021ffdb79e76bb0d9ca252090 4709d60d159ab0364d47b0b4cbfed474f8829d18\na7db3a021d0a284b451516a65a9f43f3db9178a1 b6fdb5d78dfdd63861672307c6a3886672985824\nfce73d1d176f4d0f1a7e480be32732e7ed1e2168 da88e20a4559913fbfc8fb19a194d052e65acdc8\n8262649e96e435c4430dcf872d3e9bca09f5a24c 0c7fbf51e389c7282a790bd02f3a15d38a311041\n7c7b3570df7fcadba1c59b804043ca06e9270dd6 c4581549aab2a25cbd7c6ea361c6a38b0c10ec81\nb3531d455c46db6b1bd0c348db154c0e9ce35eda ee22a3319e144db51188ff200da4f5a43369025b\n9f2d7cd125680a50c9502a849e277e2c56ea4a5e 0d6f22624938a4c3c9ea23b7bb00bb58341fddb1\n4a2967549adcac5167f24d89da01ad5ca1612174 3c4d1bf216a57833d4a326ff5093526f88b0672f\n634fa14bc16278b281e3ffcc74c7ab5b2563e220 7e253efba0821a222913a2d0b180197fa424c1d4\neabd9c36460c52a000e0eb76751cb2cce036c582 6853a29a541198f529ac2e8cc6d0e7e68ee0fcf7\n04c483fe78d0b4c18b2c0067477fad4de831e7df 9132e898280b4b2c38b9dd57d3984ddc19a50e8e\n9ee6427a669303a64e1484f6b8e85dc7c3e0b8ab 3d555d21af8b6ec6c1c846e6bc7e259463b7cb1c\nf945c375d8788b93e03d03ca7bec1c1baffcb137 a10a132f6eb315177b7d10dee4faeb0ebdda494d\nf8cdf15585fe8817e2f262769246cd6587ea7bc7 ec26c44f9262d701deb64b72149b337955f76e56\n320c5d7838e106f5c8ce15666708f1c6963c1e33 04591eb474626f977cc02693f9878726b4573e34\n6a83347dee296d796fdbf5e92a08fc6350bd830b c772855b9b9e32f13a6935ece694ac3c1a5a9cf4\na515927d24ca1f17949281c957cf0fa6542900e4 d5835c4ad0172e7144cf8a41a90c4c57eb3bfd0d\nc396e465975065855aa0f95929fec45a00613a35 f0084f4afdfbd070f47e70207961f48d8afc8cd3\n4636b7a2ae924c38284b79c04c58d43a4ef52a1c 298f6cf3bfe26eecc30fbe9d04080853f0beea57\n96cbcc4ab279a9d7addaec5ec0cbe038dae5e8df b448e029966796eb88960139a05ac6739aff5f73\nf6322f33e6815eb488e17e750f1e6964bc306f86 4a005e04b37d5cba8c1f848db3fcd5fcc897ce52\n3b59487e1076e846307f15fc84d02f661da91292 376a90d2b119c081184e4c95cd696ac235b162ef\nc669d08a6ba953ced048638aba5870fbe6c4add2 0adb77f31f738d07d25ae4484caf147c91ed1dbe\n8d1911a0dc609fe81bb0f08fda19f7bb5ae53db4 81afeeb3604e5f97eadaf710b020a616e44350d2\nf005c5b2211c69eea0a532e292097ae6c35acfc2 b31c54f0938ded43157fd90610c9ec7c46e3aacd\nf5799a6cf5f9be89f12770d32dda724147cea658 13396999cc7f477c9411e969b49dae924810f450\nb6a887dfed561da65790dac9da6f7377ce47930f 63011a5e8825b0cd378a2a27472234b6d339eb47\n6e3ebe93b27490a9bf23bc1ef30fc276d186b25e 72eda3b19757bd5e928fa48c5ad0a960765d60f7\n9cf975d152e75f8e4908d949b829480b08710493 100b76588d6a78fc5fb57ffe542253ce32df3275\nd699aaed1a42b108ad817a8f647ce5413623960f b6268de866c3e21f476d92c1e8a1a31a7211d613\n285e200409d277f803e84bb13e79d1710d8b6f86 7989e3c68f04bf66a07b4cf0bf8d4a9f296e3abf\n97f665cce0982a09ae25a7698d850905d2d01a61 c797c6ab4a03caf87fb3713b32df078ffa2a5634\n4e5fa027d49b6ed9501b72de6c591f022b74173d 329cc4ff2bb6ac518341045dbc6b6d47818a7dc6\ndec531b6aa915a9f718d30cf0acb631fa652939a 27c6dcc8e5716ae888d8945d8327fa4df27a10e3\n528775e0fed370c07f261068de011a4d625c79c1 a0501ea306164d3c9921e72cc090200168590293\n2e9864d25e22633587347c6ae147de2c3ab50026 29ccf958f0edb5fa1264a5083e8c7153aa18c1a6\nca62177b3ea230d101af75e53db68f3fcda1442e 06eccdfc760aa11db5338c65a5d75fb21de5ff7d\nf3851af80a4f00432b985f45afefadf395fa26c3 66f24f32643235fdca48646d19dd1ec9fb01fc59\nfd764df13a0989a3e7b5cc83dec55ac3168937d0 62e25a2ba1db7655f707cd8dcebdc0222ec1d6ad\nfe039299a0473384a054ffad89e197d1ffe05c6c 50f47fe523a1efaa37ba28ec020e2e5c1943b134\n1726c020b0934f222447aaf76bbc199ec59ad0b9 b55d8b089c719a1ef172cc4575029d9243d066d4\n191a80086c8ffb7eb74a4643e94fb3dc1921b27a e7b487c43c0fbe563e513e653b2fdc7725928fe5\nae28f949902d1fc38b9cf58b4f368def18cb4ec4 e3ed538e65e18b687ffb4ceecb3f93a86e6c37c7\na6061a389fc3428482e40d5bddbf4b09c00fe41d ae4457104c33d10e905d8e1b89cc3ce31980cc85\n6d7d417bbabdda27c76bb1500109b63220b93351 68727a0b47f97053b68a7f656806c42f0a967b91\nac7f2ae7f8b7fb779195820ffcb08080e850fa10 75c57e26502a44e02dad236c054ba83c6fb5a99a\nb4af691c522132170de8a9ba8f8669816a537b3b a42d2081dee248f8e7888da811481815938e2b9e\n822a142faaabff2aa3c79f3cc5c84c681d2c976d 2fb6561c7b7d7dc622d9961cb7be16407fc91b35\n14f1692c26d88f444b0056dbd7f417227f6e0828 0107a653500108bda2df7fb55c73862fdfb4e03d\n5cf27274ed7bb1d4899dec07ba29715082232189 0cf7cb9e967e6201233d73792ca157e9e54014f4\nd8390614e998546b1d0aa3832557a959f7fe80ac 73327d4106921b6cc95423afd5b66a03d5b06b38\nbf1b70276af262dbcaa015878c5a2de5cda9c2f3 7406583d9d63f48fac00812d3f81ce542d694ca3\nbec2908ddd14a26b7f19071eeb0619c58194e461 422282102952bc4cdc74e481db9c8b47bcdb4753\nb107e6b6aed0ceb05fb51118d5e3b53018a75d6f cfe6a2427be945dc2d0b3614dda247e03761f096\n511bc555839db95ec5b4b04467b2b07279657d2c a48c45433c3db91679cebcec803287967409dc78\nc24118ec80c4ec8531e3b43f39fe842f4573edbc 295c1efb05c4ffab2c0c4dc761be09632afb8d71\n0ee9a42eb71a81cca33a243dbc013eba77a32507 d50d569f9aa4222c5bb5e58835927d45d945689e\n180653c1e5c8227057eea2a851e65c112f06e8ce b1ec230aef5231eb43247ed53a4f1be3ff39f879\n6d2e4d37e631d71beb8cb342e0a398d3e3d5ca3a 5e365a70df68bb88c28d03237fd46aa8621f6365\nfc8a97abd66a296dd6fc1824f640b9147ee43654 2f0b9a100f929b71df862a364298537d2696e212\n05ebd74d82ea5702edbeb0a8e41316c76074ff91 0bc6c6559dff8488a7d6752882ef98c880338c4f\n24510c98c5ccae29ebe4419f8f4262788242d0a9 6bf5b49de3805c233a284d204d944cc61cf695f3\nffc819c595329ff6b25ee1dd173aa2f13e8bcb40 521937dd79e2cab37b0e32ce1572d7abfe7e41fd\n0ba8d0300616412aadaaa3be4c397491fa7f76ad ff010ee8bd9c790aded0ea690d17264d1f3042e5\n9f12afaa582505d0051f9e334abe4c4247f28fb8 fb38a5d1b26cc0becbe8385ef75f6c2eed99542a\n1fae6ee923ad497c3c8d4f7bbb1abfc31b01f308 d11cc5c48c5589e16f4fb08243e1faffd4ff2d9f\n8fef4c92bc13160654b2221717bd77a7a9409856 2eff1944a99930c99ad2ae4afbd5674a2224bb63\n039ab89193dffd4d2c2d534d7e15fe0b5cacc2f9 c621121ce8d113100a33090a54547d38122309c3\nf3520a01b3b10415877bcec3c58a1df2c4fa0105 94ee7700fda33135e71c9fc19ef6aec6af5030fa\n323eba8f9573a1cfcab9bad3fdada398785b2c99 7a2c1129f1e8fc651b106b3d2cd2374c457b0714\n7838d8197633d1ace4992c09915b4aa459ed74c8 2d32cbd934d29079701ce2aca451e45dcbe32480\nf7b6c800032a8929cb416aa7a18fff2e5f1988a4 18cb96f1ecbb7eae3196101e297f39006d9ab385\n75caac6e8a8368094ef521c2b32b82b1bc4415e7 e9082ea48be356568a7f1af1e63a2a04cab9a6d0\n235be54beeca32013d96a38252da94a0f2b5e86c 166d4f932e820f0ca4617cbbc9c44733f98f47cf\ncad98811911419cdf673569bfef32f4458e70017 5274cfb166fb04148f93b0fd84ab3685d93e6a34\n3afec82881aaf2e082a4e2814dd22d5f3e907ab8 5b13102c450c6d6aa683692be3fbf50f8ec9045c\nc9102d028d22d61d16e7449bfa61cb5f0b60ee7d 02522ff29cd11837a121484124b62348d65b60ce\n915fb156afbcf2f8bcfa0810209d03a4c31d988d 3ea51e933fb58f1bd6df29ff40eef21368165e84\n13d601ecfcc19d721b7a4387f5942ce684ec3f68 c00f14e669b7e29ba88d1928ba4f4b02a756ed79\nd0ecf0b18716ca0b8a7cd93bdf587201ff331d6a 7eab2e43c23ac172c48db1e0d729e869295ceed0\nb568acf2dcd1a8252ec753c8380cd23e6babf127 054a219b2a810fa31b8dae8d67bd86736b37d299\n89fdc036b71c49479b20ee02bfabdd3648678cda 68607b479fff5abb9765bcacd7d5787c9298a817\n4cbd927d4c3a64a1a80653f2911535cdb41c8f6a df60e7662040c0894d25cde0d3922b50df659a97\n875ddf949ecd668955018d891088b5bf862f8bf8 2197cb2869071949595a018d24bd691de1c69d6a\nf23146ce5afa35a0b762876098c15cdf9eac132a 31bf4b6d071702a0c64d0aaa86d0832d4d95a44b\n2799c2b3e77ccb1e28d315cd55b2818e7f4747ee 0185a17644c1c5b178f9a09862bd83694f51e731\n7cfa9ae993788aaa45c204e72208426026dafd0a 830bc5374b44ab7e6c74cd8a75f1d213ce77f421\n18c32a96369d6b4f60514dddc7ea24968f78927c 30fd456ad0a454b64af82c66b6a9ebca2e3a8b5f\n1e2ba5bb83fbd28713b9e26bf4e9310f81dc967b 5b2fa20a76335dcf77de063d8bac4a1f181b1828\n91b885d95eedbafdec7b018ee764f9ba262cdba0 18b1a36e38b20c4635f835a2c47edaa0fd73f22b\n95ed1e1b0cd6e922c2bc440b49d58b1053aa7c0a acad1a8a16870b5668219bddd20f7eda99273d86\n9a489fd8a03638e9361382b4efcbe961d934ab8f eadd609446589f4bcab3b1cf68b017a6f7d9db64\nf81448b1646938fe15c15cf66471ea381992cc02 8b2b15dbc81dfa6e11eaf19c808ac5b5ed3d7516\n6bda6a6f0a537391394efa333eb70582d9d87c35 0dfd18d13f2a997cec9c0c21c9d46186d50262b6\n1c266e078530df0cdf07d1d402d30046657b5b2f 93b8510c4694ac1b17008dfa2d2455fec53b8cf8\n4eb0c3ff89a8043f2b14ffcdd610f0d68151a319 9a668a52c71368cf86529e84ec48713b49842351\ne2f5c663d218b557d61e234e598467ca49bc496e c663debf433adff3018647adcf0097129296a5bb\n059c9ec7e57634b83100d472de6ca0c491bb50e6 fd4de0d8df4a176b509b6f22225fb2edc4dbb44c\n13660579f500db8b985f5f12668874d309486880 983f6f84fc5cf3b508320cb6a292294bcc1ab34f\n9e5d127fb54bde7ea450e1b631fd61eaef99ba68 8a450582ca0830903cc66efec3069207562fe2f6\ned8d4837937c80ed9fd735caba25e8ce2de8c8cc 3ef89cef2968640f5fc6b3ee04ac798f531d3674\n2fe1f3d0da9dcb41369f3260fe52ce6c08b9d6f2 b1f0d5a0fca5536010d73c507d3ee9f7091afee3\n196f8913da9f9fbeb2705a6bf5b4f4c3b7d34c93 2043522dda5e0e0b9cbc9a0a5b9111b63edc7d64\nee3c2c7be3190f209078522ba8295c59a1b00adf 4116ab9ca1d68b975f93c2c75649c27590421a2d\n1bd9b00954e22d6ed7f0bc05579a9a128294c805 05f4a5a82168a4ebcb683507b7dfae0304a0d751\n8695b1e1b656dd4cb01f6772059e1d2edacc0162 b10085e5164718e3236037ecaa8801e870959328\n4fd67cf0e6c0c7172fdb873eb53fe4e4fcd6611e e05fae4fc6e20f4f196b2cb94626e881c73b30be\n13268bd78bf11fbe482fda11caeb3030a4ee0523 4672549e5784c088f846acfb0a2697a896f8ae11\n079e54da7c64f19f78f8a57248c714d015519e5b 397f1a196ba05f90a89c6645246bd81c0500b193\n996e802d80c72edb291fcf2e0e7fa0ffc23f0e5a 6ade94b71a16780d2abb03ae8fbd3e661e98fe7c\n8016384dddb02e9110c75a23fb8cd0b2528375ca 28be9e012fda21b0984b2ffaa85efdc282e1a078\n2ba54d9fb84a39995f0574582f0c94d3e1020972 038e2902353a8f1d2df46f47dd539784251f7b62\n4938a3258650d6acefd17a749ee404af12d08e7e ba9932138d089d06780860cb3db040d0c3109490\n4f05b4d4bdb7fe924577a335495faf5b5e36e566 bef175d7f636e1e9f3c2049fe6a78586d364a3a0\nc675c92f2574ff79f915dc781106c8297577be2a 756cbfe2d45840c9f700b08eafcf52fa97c4622a\ne1d9cdcb56c9f1f1478c3420dc1bd5ea9e850a08 b9e4b3f76b1c54580bec82be5ce71a53d3ec7f54\n3ee7872392a989f00673b875fc75b4e6c8780d14 e5e0e8dc199f27a22774640808cea9e82fef2bcc\n8d1c55337943ed8932122ce3ca0e9c5ab50ad679 32f0877efa309b98af4051aeee4950937eecb5ce\n4ad25030254a7be4d5a1b920afbbe6d873d018d4 46e65d445a5a3066e00e65cff69d81af51fe84e6\nfe13deb856bbd27eda458fcb1212b34694c6084e 270ffb75b1d847e97b81b9e0dcbc1a843f55b588\ne4e85eb19fafc9c850df6e8a55dc39225c0f0c78 227b320fef4c5e4ca87669df5ae030cfe7be8cb8\n4029e68a6288e600016734ef9e94e4f1f00f2403 5d9f646344348556f25a4475418330636cacb9ec\n9373d5ca22803071287cec714cf49afd9581e9a6 9543b6a10c0387645c8b979355cad18bfe0dcc9f\n8e68f7dba42620c29a4c023fed81535dbdec0abb 7dbd5b4e37e35844c2f62583368a9b47d9ec016f\nd01fb127a00871c0a3d0e451fb20ce9a773830f9 ecad133840c6c439bd85748d38dd28ca49ec85a5\n3653caec392d3239085c181c05e2c8dddd17e74c 693745aee990bc3c3218bf7dcfc59d0e97dc22ea\n94402815f0671aee9a5ab9386dfb99ef7244aa00 59e372f9d0eea4defea62cf72a69e529ecd27751\nf7f5acdd702bb363a54c07c1cb144c857fc0c6f8 c83cae4c189dd78b9243baba86cd9df6f796b3fb\n06e4c72a27460701d4f686cf5f0afc07c87c9c82 84c1030807e5695660d9720f251d8003eb01f5af\nc5e9d99dee1c91e1268e2177fa4bc728b071d2fa 1fca15d59af3f9c0bcace1323ded4ab905a9ef34\nb04aa484f3b3311509b17f96dc81c90383b92ddf 9533173aaf95ab64082c6b938b05f0d1511cc5ab\n5db83bdb59185ea87325aa942f3ea66621cf6242 157e418c110c5d3d0aaa5780074e9869bb0b1d6d\n175bd2b89bf2464f012aaed01990a47442112eaa 3d3910c47679f04febb69c31f5fafe5f2c929f62\n62ee67305db75bdcc195b373a7d214589b6ce9ef 6beb0b22cd61b3f6e56f2f83dbe838e6061b54a1\n0076b1215c4375f72bab029084d4c4961914452e a0a3e6aafe7366ffc56a90035dc3af455c615a1f\n6d7091fd45f36a539e2739e1d609699d6b12d455 b317fdea0f7a6c6b83cf12519958be4957b0a7e7\n6fb90d83f70e11b6a13919ba5583080ae7c4ed57 d4197a77c9c079909f40dc24f2a8fc07dae50501\ncb708dea492ea2e09b55c21646e82c650b3a6bea d3463fce5a75efce2a39ee679b3b3e3e9097b11a\n307474b27f0bd60095fcb63deef993cafcd252e3 b4dc83814db6b53d381958c59bfa0132f6def1fa\na87596d592a8ccd163e4a3ddc435639109de4ad6 0fd9cd69800ac1bb20d1eb9f2e2ce85d3374a9e1\na766894164e82c1709af4d28d95ccf41894d060d f49a43dd89497bc0133b00d6812f38f1c5b34f7b\n865f8bfe468133b3aaefa7bd3aa8fe070b1049a7 e4f14498186d07735f6718d9f6046ef89d8b4fc0\n9cf45cb8a728c4f11ad77db468285dff35781e0d 2b1571167f1fbb6b8d3f1aa293875bd4c612502a\nb8b810b1ac8fdae72563022ca84a1d5f9a76f6c6 9682504a1e631aa5eba08d05ba450224ddf9c951\ne60d9c8e605ceb4ea18b450e6a04d37ada622aa0 fa0a201b2bc30644a6a9c7d1c0d2736623e14e2c\n5edbe836e06cd23d15da09a0024f9e84b8642519 2dde3ba5e04be13f639629c975716d9887161cb1\n92fadf97980b785b768f3f9837f8aaf0c1aa139e 288029ee0283eaa1602020de5d7c5aba9af61148\n3aec36e8fab437d09fddef5d7e35576bcbbe18f2 71e52e738842cd3041e080c8cab25182daf215e4\n6ce12432cf99eb0d0e0a50e850ea1be6bb4d6472 439d7823eb1712022f6fdf82fb6188f4c7410915\n9104b8aa36e0901c1e3271bc7df8c32398a4cb5a 004e31bafe48918f261951aa41343e25143d6318\ne5a4a8d8d09bc3d4c757bff87044c9bdcec64b61 a2b716d1faf315bc74758ac807823604876c1de0\n1c2a69063a5cba1df70d8fc46f3fa158467a2e0c 111d32a6f9e3a303d585da2d1cd564579da3384f\n2fd51b0d204eb41a7ac1f70f60dc042eba9b14d3 4faef3625cd462b0fecbfd59fb89c586cf33719d\nb3cc6440d9c0725c74ae60ec923845e5489a270e b2c566f0d53297324cc66abfbafc057b25648c34\nc06f29dcd1ee4cab99fadad420442f118948e225 5cb0419db2e6ee7b84e67f43692f62b65e9eab0a\n37dcea108deed94c7b52b9d86e90a20c0045db9c e82dabc9fe35e627afa56781b6a75640140097bb\n8a4a8bc03daad094c8e11fee21954a7587bade1a 2111eaed512960b2edd0e7e018a63475a9a18e8a\n798efd03c80ed986e679e69d42ff8c83fb541b79 a81549d0fd0137d5c6a2bf8dfca2765b54e03377\naf31a495ffe9f510bc8f0827a369f51b7e57c372 2ea16f9150f95dc1d906dde574c56bc1e8b9ad35\n79d576958e1c04deee983c7380662d5ba799ba8c 0eece01483717ac41606d7ce154d094c651639ca\nccbfb200e42b163b4b39c341c6f9988e6fc9b6c3 ae63a43549fc9c10a51ab7748139f66f535f4e23\n2cbbbc018efe19ba22d6ea3f34420e4109ab4a85 3c7916d7deb1bf9410bb7a58e850468ee8aaa664\n17baf17137d2cecefec6041b6320aee04bb95069 69ba96ae29646db5bb73667f4f6a8ed7d3f650cb\nbcc194193d935dc3bd97bacf96a9555f05113b11 1299565634e63bcbd33695f4abd7ddb3c7c10a71\n638970d9acef5a3935fccae457f326c640bd0d9b fd447492a37012f89fcb04be1e7b83690fc77211\n76901edf5123804ef07317dd1f938cad2535fcef 8c290656a5dfa516dcb583596ecbda7175d7f254\nb7ff60aa3f9145bc4fa5e33df052a6522d194c34 beac2fc6a43b21f8adac83e932e663514a77736c\n27a0d1444a45ade2cbb6151b96c9a61e689f86ed 4d14759703ebf020d4a511d4cc25beb970497033\n0f4d8e6137968a523c952b29bc538936167b33bb 80839e59c13dad327121ce1120b97c7ede85a776\n0f527629e7d7dd8aefeafbfc7158ed09e3f9d87f 6e595b830edf8196b51e1c38b57505c8bd517389\n8b7d9a907e50079eafdfa49af2517ef9629c1673 9ef742e3be015929cfc8415fd6ea9357159a166b\nfb718623b088ef11b664f3da203dee45e617fa52 c9ba4ed65fdb19d1298feb32763ba7bfb4cf4f2f\n1385a0bb628f906551adbf0d9b508aad4f00bd60 bae58bc842d52f071a9d9f6f6c73ae127483d2f6\nd712e4b9e408c9cb7daa4e47543d005807e7a9dd e1963bc4c29056709281fa320cefb6b0c54439d3\nea688c9989d155c061804edea2e2f2d76728d036 eba91cec5f50001df1feb76885af2fa3ce5e68f7\n5a15b555bda5c81882fde865bdfc06f3a22b834a ad803e13217086aeb09e485f1deee2b37c3048e4\n50bc861183d030de7a99c7e49ecc99a539684091 4f1f9264866f83fc50c7e3c5adc8db20b430d15d\n1c81aa9e44489774fc7590f617867a95985750ee 63f6a1498ecbffa7a870dbace2fcc86743108626\n32de78a41268691d557dae1748a3bbab9d9c73e0 80382e7629343b9678b05ebe7e9ac0adc1b2c304\n84bcbd3138cc1df1a181ec8bebb1b695c3e60956 5636c958c2e4d2f8cd7172ed67d7bdc97ba73c19\nb5456337110948f5435f3150552f2253762360a9 059d33182bb9ce4701c656df7ff842535fb222e1\n2079bf1a21c2e0016fa3b12dd03b30293f280b8f b6a32a6c6ccfcc469cca789988fc3d8a023a9122\n72695685dadd872594b10c8379aa2bbb5e36eef6 bf9050b4acfce61190c2259e96cfe8096145e10e\n1cd215b06a3f4810bae186e9304196958d839abe 6e3968c8dda3d01096f8cf46360977ddbf7f7805\nf32d35345aabad4a2b5e83c5b28ea455d7eb7ec9 52b24c705ae5ca10e2232e3f76094d6fde2c120e\n5259af247bf767750d23afcf04178f9a1d925dc1 0799fadd9ba9cc89e7f925d85aa071875c50fd92\nf5508bfeb4bb3a8f84abc7ebbc715c118f3d2441 654778479e652190c308d80dbe08bed4cdad1b70\n137f75e0fca4ad5c89a3e684924573e1719ec3c0 630b66cd9e2a5df47807dd18c9b1733f495a8489\n03a1141566ead60fd1ea403349d680437caf08a0 8516d40a9f34321afd94ae1b9ee7a6abc4fa533f\nc78009e3084c77085e243e7919c5eba015d4b612 ff20fb2ca62522eb92425c7579a49b29b7ff4bec\n996ce7c11c6e552f23fb5cefc87263fb29ed2ea4 aa3bd123cad7819bff357c8d19dfd1aa4facdf02\n70647294df150d850af1f43f4ca5907d62e809de 104298ca8d07e81677b6624e2763c194a66389bf\n6082fd671569021f1db5f76093bdad4cf23564c5 e625926a75b3f22c2ca7dba3ace9db20d06aa381\ne0d50510344df1a43c383238d3136785d98b91fa ba01fee0bed7b2eac4b1569d44aa52bdbe3ccbe2\n0b091432af5bcea2648da86e5242bbf398f707dd f0d7e14cf3c3d9fdf2603c9fbce2cd0841de8475\naf340b5bdd51c20d39d907720e6276325b5d3e7b cb73b674c2793abf9f20be753ae0ac9de16271c8\n405cfa956d179347044e57f34c7085a59baa22d8 48ec0d4ac54e8bad818732e07475153a215e7227\nbe8df72335c83e02e88491f6a9e7c9ea0ba1cc99 a3c66b9bc5433eb987e7b9b6f6a80e05922380ef\n793b647e0ac078517c03c1840549e40f2ef612cf 7c7b040cdeb07275f29ecbe3fa2f38d8f4c99711\n8223406b424818ab7a928cb8a019a08266a028ed d7016d808f9e4ba7ba21862e750e004d1eea4314\n3f1d58b249568a97dd1e28ec0d869420278ed1b3 91498e65eda8b20262b2a3de7ef647ef138de426\ncf8cf2746cc99769fb36cdf54a317447bf420d7d 3afa6a92db225390bd055c71d82dc6f3b1db1ae5\ncfef33db2db863a5775893da84d116f9a1bf5fb2 f2b76540d947cdc3d6e1f2285229f6d5338737df\n5c6360b12804eeb9166c4681ad0f26d539b8e6c8 34ceacbd8f240d5ca54ad3cd0f1d948fc3c5d263\n6d2d066fb5708cfbdc1070c2ce5c37d98816ad65 6d6bed206b5571cf3846ce2255b6dbe262c83d7f\ne5cb354624d414106e02cf47330b809eefe786c6 93714e719828b14ce742b7077780901a9eb61fd7\n8663b7cb3ccd8d1979b88d1efcc970650336d87e 2764feacf55381c461c4fdb168019da3588e9a4c\nd7b925e545257c0f62ce229599b6179597faa41d c247d65837959cf52ac294aca6f5058125ec91e2\n784edd7ede714999f43a666a4ac0424e7c36a237 370e3631d6c0d6cee90cfbd3aac8e07b5c90a20b\n16fad9d234098a83e7352567567a90b9a26cfba1 115a797243c6577d6227c87da84ed0ef9170f990\nbd8b8b14b25ae32d1a189770aa3cd44327bcdd42 284608583549e3b4a81dcafaa98c2ebac3ba3a06\n7e460081bb44a143d582bd2b23151c2ee5100271 d78a2d4823b04d0d37ab94e72cab529916f92d72\nfd3e7c44b78b5d1ebfd2882135b403df7f656083 2c30f6a3ab21975a8083ab520a332efcdf5990b2\n8d9a0085699a331378b438f52f73e0b2ec30e575 5bfebcb67e18d0c553479bf32482a1fe5c41f99f\n36cf12c64b2a13d27d2a064fc380454b299affeb 056c110c8c4079c420312d36f6fcd174ad521eb2\n6f32702c9ad7d2df400e210e55e6dbba72cb5317 7a5cdfe2ae9211f8153e66c2ee438f88843d184c\n4d1a4f18f8bd0724cb97466f0ece666ffd2e90dd 7f794916ac16349d591a1529c4ce8ba350e9fb4d\nbcc9dbe0de46517ea924466d365dda066a214e16 0b6f580d00a29538022bb383aaf5d6ea5c10797c\n08be80a83efaa7762f35e307885da786904c198a 9737deadb696cbc51c3437987bc1216ea5c193d6\ne0bd3228389cb36ef05ec301ff9e61889908fca7 2f99f82bfe46fdefea2f5a7353d8e934780b25c4\n9c8191da8048f059e8f9c405a9c04890874aad9f 9d42582349216e6ff8565669037efd9da5044fbb\n3cf85321c7ae0b70dcee851854f80319052ec692 5cad37764e989d774b6efef4a118cdff7f4398c6\n547491b9bf8f7b976c2072884707ef2de454e621 7ba67d35caf3134283bee67aa10d80fd367ffaa0\n21b3e0b906314c991f795fb99dd297b96d4f8aec e0561d7099434a7fd27c7d4106aab824f05b5556\n56cc4358849b8228f21df38cf6a70ffefa4f9354 c446e6e767c74d3ccb5b102b6f801d2c97ee5115\n4f69d6eca12d202fe6386330131261a9835f069f 86fd04cb2aeb3bb3c778567248d4fe6e59b1991e\n81c9409d7147308345e07e036d69dfce8e5a8bca ccfc440102285811f980a9e6cb20f70b6b6ba0f3\ne8a62719c5b4985fa3835762b9cf864bc0593043 95515d08ba5626913ec8db5a00bae9271788861a\nb4f7dce3fae755ff84c62339642f1dbd26fe4a18 131bd776b0dc8912a625ba65b450ab585adde176\n0dab5d140f9f386c9258467c69ca61d08a2ef2dd a88f254f96864f8dcb6d239b7320c6f6b5904e79\n8a26226408d3fbc4f572dd8b52326a0c639d4bb3 446c97c2ea3309d5adc868c9d2f01d62580e7d8c\n0e8c4b6907a5b35c020846ae0c2f526b3569d2ef a4325c10b5d466db7ad46686ae712660b2a2ffd7\n5cb2e2f3fea5f00883fa78d8bf1d0a8d88a51548 9fbb4ce8eef765d1a13811bca77352bea7d13420\ne38ee7a7f06ab63747f9fb83fbd65772b31cec17 a40f0ea8204be22581b49a9ab484e5612aaeaf67\n29d4ab35b6c8e8d224a4c8baf0929cee65996896 83dc4c4cf2fec7915500bf31121a3bc43b3fdb9a\n514bc0c7c4b54ff2934c494ab928feffd9342481 0367a5d84ab39381cb0bd71ee694e6a7435acd19\nfe377881bd10624307bd4ba3b434eb0f71f85b0b 91ba8356d905692b8d97d47739d5b16e14301c64\n4b69c9bbba077dd0c38de53447e81508a39d8a19 e4565b98fab203713f5a5f3fae064ddcc8671cb3\n89520cceb5b1bf32a7b6faa2077988409f98a54f d7bebbd02a10f1bfbfe2658de638b9be803272ac\na64710aebfb820e36952919b1d1abc110b629e28 e5e6c1a49d000c7032d707830c3a39a2231550c7\n8a128329b69b09ad1f5302d39718b398b40c08cf da58a917d4a0df74eed690b9f30274c885743633\n5afa02892991189868293502cbf956b9b04e95c1 918bb2bcfc11a568c1db18fa87287ca74ea9ff2a\n46b39cab4feca2f5aa4929fe7a08f955a6abb697 436d54abf587087fffcc98b1e341f5265b2a86ae\n052b793615da499d3aff52318ea583b827725a81 f4ef8ad34ff29c99955ded7c32d31c917ea7bf2f\nc3d3b29bfe1e40ff60a4763205816df7ec9e1945 dd042e80fc7f9802d5de03c25bbef574ec5b7227\n50fc93de23b4ba46c43e99799ffd8a99636faed2 5e2a38989c4d79e68f0a221313e0f50813bf07c2\n5243a7a5e4fb18d62a7d29768d5f01e29fa28a2d 61c513f365a6cabbc5b4c92c22005a0e75cef093\n05845f921238134f898157c4d64c6494ee442d9e 62020ea21bd7d6e09fce0106972c1b1c9d3d7584\naf3ce903da46012e703585aaf8ff9b6fadd63f20 d19eb4b119e6d39a26a519112f008cb58ac7e7d9\nbaa76fe03f2192c739313dd6cb3734d33501fda6 1045d023c785b03bb6769737c3c6045af3a65cfc\ne29b5860727357ebee4904f885496bb7cc249834 3bc53b9fccfdd62aa558fb6f7009eb4a11a20cf8\n3e4f388813823b0748802dc4d1a8a6d6beffa9f5 fb59c00d284c74e16919d83c105a1b4b338e4bb0\n728fe89aa43486d40525e8b18dd5a5050f42d888 6b84d300324bd746f2eb7271801e006b6d0d8efd\n52c033cca1e4a50207f96d38a42510d8881f7764 a0adfbbdfa382ebb5adb38b057ae7a3a8b513564\nca30e272929a0f06d6a94f14b755a8e9857c360d 47f77c31d6141f37bff8c8450aefb9b509293d52\n84b3f82820cea4dd558ba4610a157ed37e8cffce 68c771ac3c5413a665572194adbc750322158235\n7ed2a2f0865acf88de7064e3d1a12445ab27f67b ce7b1b5850fe946d1c6f5a9537cbcd9e87b9ac0a\n89f5ff97a697d47b0ed062717eb0e2d214000115 499a77ad9f207f5f50ec8e91fa143c60bb05fa58\n37b1fa880c9e518fc88d54187e10abf7d2e3dd74 6b64afa3dc030b7123613ea918625fdcacd49e65\n1de851ab7b2e6e51adcfe9959f7332c04eb7d555 0004ba2160ce5cfa37e7bb631da32d4a2bfd580e\neac705b049d4ad94b88423e3c4d34babf49a8b49 9e6832ee9ad9526cac84286d2e6f3c4c73e55a60\n865f16613aa3efd3d046df18ddb7e2f0eec1cb34 d8ca01d583d6406b276a630b18aa3444d3153da9\n0aa01c22478bd1b3bc960636041be56d0909a4bb bbdcba674d1fd216a9aedbc1dbe008afec2e7775\n4f7ff1aaa622755e880ba2ae1cdc9b41ba6af8f0 9e4d7e46c164d508f95ebf90f6436a8611c82606\n987389b7e5968de2855fb17634e779029246afee f77849bb0fac82060e50b0fb4c9ccc2baa5d97f7\ndbed30b01de2c09fd31190448b4f2b7c2f5a1543 e7ecefbb39b3393b4f873aa13073cbcce0be8b7e\nfc2d4648f72ca3864f73c0375c812449133ab7be f05e254709de406ca3d60a8b125c6cf3cd2c0ce1\na68738e128385a15656f8193b33f505c8de29f9a ec81ffb0f763aef823e2aaf37a60663f087f65fb\nca651a3e1d4eefd8be50dc5df9b78ff23176d827 3da203650ad37223fd33476a071b92cc9ffba83c\n3ba6fad6f1d5dcd489b846c073095ed6e36dc72f e07fcb6092c5599fb3faea3c8b0487f3a691a580\n2ab94c9a40dd1193a537b010778ff30d9c4e380b 9e351926ad8ba8a131cffa407a0f04312ac46948\nc60460681390edae20dc1d40233a0809e1567bc1 7ea3dc2f3a3f49d8710ce494ab9790fc03898158\nd13a49745067c7bf9bbfaf15d5b6a959625a6cec a7460b88e92f2700505212a684c48ee47300b07e\nd6d7a4e93e0f17e5812cab8099d67188c4000dc1 984adc06eb3876ddfd655e6da10f164903fe14d2\na7f71eb6190561dbd77280216f0dd8d2d2e67048 51259c0ebd49f2c992d83e6c7cf94c5c6c9638cd\n71c3ec722e0b8a2fb474adebf34523ed7a1eef20 435e8ba5f78b0be5531b44ee5eb7842b0ae2d7d4\n3d7f30225f090f86b98ebce1587d30b29a147c03 f50e8f58313fa243178f7a8699c42b6e79d0a821\n239c400f0e80bca0e955ec46bf91febe0dadbe10 fde683b2e535a667a275341cf9f4819a31c78029\ne2be0207837093c3ecf67c71c4c6e6f9fd0a64d8 6cad5847fffcd39d2c1e1feb8a09f09b93ae75d9\n794b4338db73be40451307a93b5251483cc5f480 687ac8bfb7720a794e6c9615d6dc16232d38546c\nd16faa00ed0c585d4c0da6cb5ea9b63eac2dd62d 395519d16b5bbccd47e8d54c62745ab0fdd6b0a2\n804f227137bc3babe4173d745beea1f77346ac8c c6d617e75a6327c9ee96405074fc04992e578e52\n84dd1fe7855d846eaba670cd07ae55a02838360d 8351692ae4a33b6253081dd76ebb5326df93e96a\n62d1215add6d4b6cacf81adeb81b8321213a84c7 6a323c9f489f14e6dbab874035beaff11e8672b5\nd5195f4b37d3f3169daa9e8eee44693c3b64854b 44c80b612ba5d22e853657fca5aede4a295bca10\n9c9ad15b860e0ac1ed935ebae69111010fb6d803 d8b9c38d332594af17bf38976378d00176876c40\n6c1d53e7e9b24f5846530c62bcb31e02daed1b1b ebdacafc376a753f6c9d120d294e280c1eaf468a\nbf3c3f0151621496931c8cd51bffaebc533a474a 55da34d95715125d9126c7f5604c2e381ac326aa\n3e0b8f22fe636cf550afda90e203a6e54f333766 2b2b3738856a179eadade66cecac023bd4b2511e\ne96fd5490655fe96c043a3de5a4df610067457d0 990ac81ce9c0c968270e69c68338f271a74e39ea\nab95d1b52bcc12da92fab9f50b7e7eb971c5930e 1e6e8d26e7185125cc5434b1c092de40a1550185\n23904a431861297c3808252e9f59624b065c1374 ea6ac2a55c2a18ce2b5523e11aaec1e17e6f2c0b\n9eaf55ba660f3c4267c17bc95aa73f713a3f390f 40ae99d97ba11ee22dd1b9bd0d2d9b82373c0292\n79391800b61f5a3eca7a9970c7a91c8d68694906 ed4cf5ac25e23ddb5ff58a97fe520bec13f32360\n7c22cf9066b39c3e4db714cebd310eea4e4377c9 df2428fd55e3b1024565b1a1c21bf5d9c360bfb9\n2f27cdc03790ee1c8d5758524ef1536f0c1d9a19 f427d4a7996688f2c526222149affb8b734f6e9c\n6df6202a1d5481ab8482951639c18d4c34af98b5 226e3059b3739fe918087c794e878991dadd76ee\n3f3602ab07d72cc8116e229be0bd3adbdbabdfed 6a779648380c1194aa6054e2c38525e31f96920d\n0a73c197027cf6e71333d51063b826f38b70cfb1 f5e2efafdf97b40e8a73a8a12d19e424610b4d08\n8a63d405cfa379d67b212f6bcc4e5ac00da133f3 add1221829c19dd2a607df91abd2d1bbf501e124\n82842b55bb2eff9989a51d7f4ebe9dfc37e03bc0 785f01206c91abbceadfdd9d9f71f0a41cd0debe\n76667948bb48531539f58ac94b211c9087c9e347 b9a88c718fbf954bfd2035061b084f188815198c\n0ab1e74c2474f8cbf167c93ee08fdc8875cc364c a3d4f9462e73a6d86ea022b92157e16872dbe0b1\n905ef22d5e6f329380531b014ac8e4117291d028 c8f81ea28685a39546e0bf4840c6819bf96c7750\n31385d53df1163ad0f83b9e2bd0e7911133018b8 aab6e914fda47e4620bee92a87d6d8cf203d6099\n1e7833179933d3d1f210d175a7a98188a16cf34a 302239c802a51c170001c16b8d3ed23ad8d6cbaf\n703b96db3fa1d54d0c1b203e8f83355d2df64201 dacc69ab8da4fe9aceaf9683d541c7b19302ce95\nb88de8d18e2597907293eb897122238a9e4bf50e 14979fa9f8e2a0a2feb18f601b2c1d342f39818a\n1d45d9715850114bf51e11f17d1573bff0892776 067361963b75548eb0c1579b95c04f03132aae13\nfbe55ebe014a7d47dad36f0a6228d1b82edb9a46 bd79f6a2262527940640241bff95c356a7a4fce5\n65c230c8773f617636b82aff4b71a43c6e792859 f92a57030d62d45c8ae06b174dcc9594c921ba1f\n55493e0834a4a5e1b1ffa1bd8722dabbc38139f7 ee9774d13bf99d1022431861acb6f01df33e0e8b\nf1d523e2d046993f44a550b5a24d5ab8436d5c98 c90e4a5e80147083601eba51e0faab6c75fb81ee\n3de8d3c01ffbd1222aa46e1a8de49ae3c525bc91 31964e53c9401be90d5bdaeccbf21e071e42ef5f\n73557f24e6b8173eb57ec8e4c1a67ee37ef349f6 51a74ba8a8c618d94b8f99c26d40bdd6c7ef170e\n48ccbe67d0cfe0253fe11ce8c95cc8e219ba4cba 2c5fb40d5c20d978d00dc433065c10d248377dd9\nbe4ddab76be5bbedaf04ba4d6e8af35d956a6e52 5a78432eb785e97b7cd8991b9ca2753d7341a25d\n8a06baf153e498b1aaf258a417f81ac7d990e7d4 60c113aa3961189f9280225e3ae18b3a44f86557\n54bc8b959dadab01a68697708bde6d11846078b7 154df04291fbaa3cbf751c01865cb9c1cd820ac8\n901e4f1a83f0a50ad3374c5a960e547e5a394353 3c1b1567bf3db6b016c3aa24a86b5041dd76ac3d\n7fd8d71cd5da983b8d0edeb352cbcc62509e924c 9c11335c6746dbbf32601e45884e812406c0e99d\n864c71bb803f52bfea4f51aaa2cb52b02ba5ba7b b9934197c52c9a1aa7f86635adefc4a4a47aec24\nf84a8aac54f9fea249e457a5f2931f4479f964fb 3db5ed40e8a8b40d476b9ebef5f443ab7c4c6fce\nd7f4401c7979f99e2762ad3ec53f7c61f97d66f1 ebd9ed10535fe0b5db218a45ecd0da81908e4687\n287c98396515e582197c594c28653d2e3bec7810 900bccd8115c29743052cc1b89becdb142c2ebd8\nf9f54d09543ffdb2440116667577879a353b9bb1 5b05f3a678e43a11399bb9b4b6ec1e30723a1899\n97db7767389817c2889705e7fad6b737b9d92245 75527946af1bb8ecbe679b32dcbb2d5d501bf954\ndb592cbbce7a3ebea064bbfc1c0ea86c6def90db 85d6116f3ad649d6e638b417dd43720f136a5691\n0ec4bfaf2b3db88818c8b3e2a065a696acce3faf a754aa885058e51766b3d81f820d4be7bd2b6a22\n9fd436346757a57d1f7d9c9f0661f840f463c962 9dd18bad9980ea2304d3831ac58fd4e022fdeaa9\nde603a7195fc32ca29abab72e3a783d2f604ed55 090137b142de609cb184dc0acc12805090d93007\nae70116fa302ddec8a9187d2b2c3cec46337648e 950b30f89f8b4b114039092a9a35833909d56029\n78196550d4af65498a5421742db4ebd9ec1f6db7 8a60ad6cfe2089533219a8f3aa5c73391e61f4dc\n12a5dcf157ffbb8e84c61b8d2fb845dc3c2f9437 faaf9a5eafe6a7ce586b3354bdbd79507df795ed\n3af15e5a96a5ca35eafdb434a17d658073465947 edb3ff8899e8e811e4da6ad33b1350dfacbd47f8\nf5fa961c70f6f06061e9596c1ad14c5fe399b6fa afde55a0b81ba1aed099007a40eb25e890630d57\n0de732aab9c09343a68f91879c33309867fac8a8 3a2304e0b57a9cb63e0d8deac76f9b33444c1ed8\nd0ccc97092fd761bdd9ee8ebf24c3b1fd9037c81 8dbc9f09c90f728812c2b7d5e91a38c168272821\n21f5b43f9a211e79640e70f0fcb4e06e5fb788f8 a5daa59dbb226ada43f6bb69d8202ab9b2a22b23\nec43f12c52d3cfc4bfd1f83c038b93a908248783 233c090623660969a22ba4cf1b647e89e86027c7\n70749487fc549b3eab7d1230eac79f4bbef3cf25 cdd2ef4a119882d828b8ac4c36567b6b5dbae181\n1ebb2d98ed571fc54fac06b286108433b1c9b65d 242a1dac84a176b6c9dbc3b71f001ffb49fdef3a\n0840eaf703f53d17ee8ec5164a3d6806f56d921b e192c508a5d3ff921612bd77674e46522b84496a\n144c24de1eb9d21b38fe45e4f10ad4caa10e317f 7e97e8e9cd2bb753b3626e11303817a6c67c886b\n6b627247ebf3dcab0508988588a773067bc1d265 f679e7e50206866e5bd9e1b01a94c305c1d7c591\n6ebcab381776df4372743c8c9a14efaf40c867a1 108263f588fc473add784f2ae227fbe07fb0a7b0\n005011e72b4562b39e632fedb016fb6386913c28 d8f181e86cd335d6a3687def0b102b60c728a7b7\nd2aa27d2804bf751bb8405ba8ff925fa4b41cc8a 3eca0c56892d793c1f2c92677e7a9b830976eacf\n2ef801227cc05245c19a5d948f746afc1a2864ae 735bc96e5d24ed2e10c3e3b0e6146fe058f0253b\n506188507f8e7cf20bd8d4602da805be3e331b8f b14dc81d2d27b6c880beb5b2eb7e274b7a75244a\nea0e0dbaab58b76b83b50cc9e5b3968dd8e8e48b 51b77619ac67e6f529e8db85fb3c7a3269ea9331\n1fb4e765bc66dee515b4a5264411f3acdba08486 db1a1f9cadf52a641f50cafd627fcfd3774d2bbe\n98a79c484ebd6b5ef98792fa66f1909222596150 dc1428d71e5dc970b7634474ad541b9ed7e6e08e\na93c6b2f3fd6001b663e7ee5efc22c7338be430c 5a048c222e330c85fbb71f4a2f9cf0d8590a6a0d\n1e35ba3a9d1c7d8d71b464ced3a3cebdd1f9b538 4a4cb8ddb3f44adb403d640ade8a5d421700969d\n8eaae63f1cb90fa35dba31ce5edf9893b1a383d8 681270e8b8a87e9e31f2555a36ac9b3c78f6cac5\n873f37db9fb3af7ddaa2b929d08cab239fed2328 37dfcaa715c87d9b36d889ab55beed89d016e5d1\nee636160c577244bd31a33ffca7cdfbd32567f7f e5d69264c9a0962f6bba54136abaf80516520f69\n41929783e26b10720c3c63fedf21358931d007fb cff69c4507cae2c2da1b4bf081a8e9f20101c722\n21445e424b0459c8e3aa25239e2c499cfbdc8402 d0e08f65376308f94b37b127b94dc485bcd1e255\n4f9970c5b9ce04dd99bcee68767fc98da5c08435 1fde240326c44de4cf6528baf7e63a7c30a08a37\n248112e3ed157fcb65ab861da3b66a49abc90e69 f5816910e0109600260e20d996dd79070cf0b7f4\nb609151e2c61d9d770b3dbb9e5e7e2b951a1b01f 99d47c4ec39f2462cffd28a124102e0e81f3563d\n6d8fed36cc88b16085b91c5b0533885d37734d61 a8360547774ccb5470c9d28ac71b0737520322fa\n7fe034287cf41998debd34280bef0c343faeb464 59214e23854b09446810f1a854f4296e0aece1cd\n05ad3dd5d8698e640d84b8b4cc56f13291a262d5 d46df84fa4e7cb4cf7e89c4f8cc8593e938a7d73\n93fe116640320a85172f8b8a48081e5e8a05fc1d 48c398c273ad14742a25a6a77ad9e4da9ec5406e\nfdd1af54b96986fd8f6c69c14f434b588d7c0413 e1734cb4d77cd131132ee1bf8b39073b17a1fb3b\nf9dc61760a6b4a4a9d1b9543930fca52ead5a6db 906db4134c7681e4824e8e87e6b4cdd1cfd51805\n2e339c32fc6bec3313682781a00d35acb39bd110 03cef42662889d3a438d2f9b527ccdfc13b6dc09\n7459ad61575438792477a2981cac2ace4d9747e2 a18135f0650f1938039b80b7def86e72e8750f1a\n1b9b7acdb2bf9031fcbad878c521daec836518aa 1f1f2ebd0295547e69e33aa608286d0392f8e601\nd7d84ac51ab1007fd1c30c12e02bba2f300709c1 807041431a4a62320ac1df7563cc1cb3986a95e0\n38d6f6d455b8cdb710e338a669d7059e44429c1d b26b49d9dc414144a11a8b9cda9fdb74c2c0af2e\n59a1848e6fd8a6a5d85d6b7ea3673d02ef3e248b 046cfe885844e5d5a17fcba0e7c3fcde921aa2c1\n1a0acdfca3af4cb010da117845f297a2f68b6b09 5ec31fec98d3afd8f7cddd3034f9da78c6ac8cd2\n48bcc6f82386361cb970ef82710ff3d68c719ed5 272f627f54223cb3add73b26d2e67fb9ed622bf1\n95fcaca79448007961b6206126a939d7232d4249 0cea9413742acd1be0ebf347730745c7e9523c0f\nab4fe5d84c7e0fc46c4191a18cac8b7f3346b700 fc126dd12e5d6ac4b248222986cb1ee87ad35cdd\n88efaf5e737f1102eedf638b8e8275b4b110014a 11c0ed0bb553b7290cc8cd865e88f97a8a2488d2\nbb6e3f8672afcc1532cc0b44eb837c5373018f34 32d7df8c928627d51dc20dea1529dbb191f74955\ndc4cf6751c9930e8bb84e09e8a53d2348a018391 0f7c66501560c234afa10b683b23526dc03a961d\n23de594cc9c0520c19252415e5e88283c1b880b1 1b242d9b38384ccc6ab674d7a267797bad6fab23\n6280d85b64b0b9cdb9f463d8b383cf56ef208c56 369f6aa4d96c78f37c34f971ae5b798c8a62d542\ndbb5a6eba23cc97a38020fa9901b49f06bb4819b 097762b402417fdf928af36507cda9045ef2dea0\n107b2ce130852d8cba40917c6c58f95a12ccbe00 4e63c27c38de191adc6460cc91aae7f6848311b9\n1c481ea16ab8a26e348478ef92e5f17c8bfdc891 5e0596996a1aae068f86b45756fcdd788076fad2\nac21f1ad83d22d11685e0134aa1cfc0bcf8750df 3022b69363a6aad55e8687de08b1d5a9d6527612\n3b71ca7f82f5b3298600c38a4189e96569393642 58d81c10d124222b2a2ea6f805277148d9dcb6be\nb8ed3cfb23133b938c1f885ea72b2352fd107a74 7d685a12efca7632e7de077958de61d609a56e07\n0b427b83cf200a2c0db60171a9ee8fb16c5ce45d b810e18b7204177909203becd13786be874357b4\n2e06d3cc3ec1410cea3f36e7d9ffcc821d02bdcf fc33a71ba1e0c0482477a1de79445fed01f6ffdc\n82434264037208c0fae42e9244e2c9d93996dd2f a96fcfad24e1aa01576093ad7eadb590c0468a9e\n49d812236a67505ee607dba9cb149be85f227ebf 72e6e6db5a5b2e53a811f172fa3eff7d2d149622\nb38be4e3a28fdabe73220f6efee4f70b2b9869f6 d4573831d094a1027a05b41a2ccff6b4ad0e790d\n1aea8a3f50b7ba68672c4428aa21998436469038 03ca02bf3c23af76cf0b348125bbd64c4d4d3796\n82b6e52f93d5fc7d484927e2465a4705ddbc124e ae14042829366d31258c9086f34208903522c80b\n0ef0111921b556aef4275bde5e2305db24c80076 bfc63b2b519a693dd56fe9e75d1b50fa05d0dc2f\na35382d2ea1e2a337b0187cc2c885721c0818abe 005e133a16822af54b74a6a39db2998b0094c072\n791b1c5e35f257b997eeebe07988b4db2b58a3bd e8f1edde210b2c360c74ae979d1fb8669ea9a116\n24acc095f0d2ead5e56b9e9935a8c98996d8fbb7 190fcca49afd0d62ad87f839ce3bf3583e93ebe8\na0d69742822908323af2f38b6676c35777eff81a c44c194f64355029c6dec9eeb6c8abc70294d6ae\ne26293c95e0fdc6486a77b78d1b3b6cd9f8a32a0 c7cebd9210d02fbfbcdba92b033ae22300566fb4\n02661ca671f7c2d1e91c6bdb3f5d2c93b746386f 42ed5654bdb89f5648befc6d59082398005a83e9\nec62b013f5c3d3ea7a89f6d57710603c21173865 594598ccd691e8da5748014f1efacd70ad7827a0\n06602e2ae3da8293738e5464b86a72e24c55242b 797a64ef4ef986490b0cc2c38dce76a71956e5a1\ne15d07fb397a363bc95a4cb8a169b66f9d94dfd4 056d7c6354f352762e9556328284f5f72e135c9a\n8c3e96f1774c4687ee1a390f79d6ab1f8a638e86 d501b9c3635148b1eb61a47c863d38aec4277ead\n8871a899e8dd56c068952cd43555d6b2118fcdb8 7b06d338617a19187c22f85f7f1ee7fdc5766349\n3e97cd22388dcda2784f5143b4b4af32e3d56ca4 5f844c9ced0110d904bb204899019bd56e6eb4ab\nc8b77aafbf40f14aef6fa03fcf58fb45d0e72cdf 669632d8898549065f89bd040d6b6f30eecd00cd\n6967f8b3c0a06f4f42695091d411675f936fc253 125ceb0ce0d4df609f392466af217dbe25b34b00\n59f942187bf47704324e33df48f3ca54755c9bac 79c16d1221ec300495c9f42bfaa0711da9a450c3\n947d192b2cb32113eb262a466c1a7a841c417801 5c895b48d8e683c5ea9149e364ac2b46dd9defab\nef166092def84289b67ece681ecbde23b389f3c7 7f38f7b62d8bf3fe900e15be342fc4cd440f210b\nbc69d94733ea15f9134d1959c14d5ff8bfc8a352 da3708815c6255b97cbe60cd5e6358539f9e5aee\n0f06b6b0d250e4044035c035c923e154b9ddf788 61865d0eb234bb4bd9fa038f6f3fede28bcd3d44\nba6844f7e3dddca3ac571a27b52f8a2d4195cb5e 730901eac686fe13385e87f89c08f2afae680564\nb40e9c9b82d3f5388dbb44e862afdf3cd96bf85a 8f3d51fe9aa8c04913d2d244028c7d168e721a17\ncdc53f66423ae767b7dcf147203e15cd44600280 8c26ce1cfcaed1bce6998aaae376a1c0dc586743\nf393b7038c9a576ef7373eca6a5eb3b7bf180ccd 1b05582fed108e882869da9ee531822121eb046d\n328899f99e628dac8cbe864ed9a5fed4b4177d56 fb256a2d04e6490fb3e8ff2d24a6a32efb6c527c\n962969da7dd8dc63944d91f13d4c4fb6c07f8821 35d28f61d2bea3830237c1f1a0e13b6b3e9ea4ac\n7b46cfa2f7f40caa39f0ebdab5797cb6eed6c965 e2a86de89b23d88c039ee01e8d627579c5546956\n5bef9fbce12cddf5c23af0743c7bc66224142f1b b50233293d3b312b2492365e745c276f63222d9f\n199c175fca1e9df6788a1a43c990bc5563fbf5b9 249ccf0eafd37cf2fbc611cc3d2e3aea07ddda11\n51b8e05b5055b3e278d3ed9862ef05a71edbe682 34fd36fcd97a4c718483a57a503c40caf8554ff2\nc67bad5d627899625c04af586cb8bbb276dcce9b c6a40fa938d5206a2bbcb7aca413b247b3c5047b\n4b0e918ebc546d1ef707dc3d7eebc328f143add5 09c80c0c912c341463a74c1391da72a84fa5fae6\nca2e03ac238b2a8fdcc46e409714d8a58b06d2e3 0b70c4c4c7e2c4f1b63a70db7212d8bff685cffa\nce063a2636aa66b98edb80f4e989d8f16373a10c c250eb73f6ad54cd815323dba2b82f740e203bef\n71b54b6098dbe044a92b82648b7af6ef68064fb1 4f717a3d441e8294594b92e219b0ccc15c485670\n5a7110343567dfd352fa651dfade5910f227df15 9871ca5d86f524190e659f9e36d183948a92acf9\n7fabdbc01c5d702cec1e6fa65b010cc5d50c5314 17c6c17921c1b636eca183375f37101a096aa080\n00ca8fddedd73042c07903456e218380a07e3769 bb10c43e7f9bc4d4982f4317332e5a33e88c3a13\n3de304b7011ef4f57ca6d3d866270ab5482a33e8 4709bff2eb40582096740117b82a00b1c108caa3\n6b7d5155c1ab01e240c6b620fd223993d1aa707e 12eecdb51ff81612fc43e704ffffba9e7e6d261c\n41bf6ebf3d9a93194029d31fc21b2afd62846e66 689758154e867f490dc6f84250e308ec517f8338\n3b89e6f33084a5ecc867426532b6b65727a20cfd 7f9129f272e0a661be2357479e116f2b544ee7d2\n1f9639f7c9cfe897172d33fda9b86672364c4f03 c644f4c2fd5146db4d41f99a18b2214624fef241\n75f275cc973f566fab2bd10ed86a1b0322195cb9 bdc76d259585b31f3034b90c25cc6786b8b05c5a\n99e464c0b28afb502d67b69c7f5cc58665cc788e a29a8285ef0b2371bb26642fd47762c50ccf3893\nf4ac1c8b958ecced0466c9cd460a12b79708c8b7 4b8e93a0b3191c85528da8c9eaf579c771e995f9\nde60b708488ab3fd75394fffc8090ae2726fdf07 fffecdd3a9a9dc0602589638d6dc0f20355d3863\na29a65702b7dbfd5df6b322720d42bf0d8822ce5 57894e898e47bccc4e61f50434612835989c5a65\nf9c197abab118f4432327bfc7eb29a8676adb819 96c6085f445c8ecb266e06f58249b858de66d078\n1acd3cc1c679856a33839cf2dcb219fa5062dfa6 b3de2e22a5e7f1d1f96cfcfe3a71905af7a56676\n717c289a54a675be7a57dc405c6494b4cad7735a a72b69e54bb3f3a0cc5cd0ec07b8373b6f6d0971\n888fa716aa3f2456ec98cd22b58bf3e5e2299fb3 96a9c86819815dcc945d34ee221b91991d91c1b6\n2e42e775841bcc9ab6b72fabc17e8a077272bc85 13e6dc2fbd05538a2ccfe340b87edcbfc60b5dc1\n03348a52f05851e6b1d3978bb44050fd109c1274 f99d830299f655f6528ba2f89e7d98b34dd77ba2\n45277bbd4778a783bd59c4f1b9683cec51614435 92056f9f836e1f5608c67ae3098f8d1c6cf6ce50\ne36cb8c603382215f26dfb5990d3f7d7891eed3c fbce4e2d6101b986ce4b6338b8a6e04d51a829fd\nbff4d56a8d9e1bc2fd1b05f619738f924281cc32 5b45c1d15fd0649ca1149e8f5595816307ed3b59\n4837a4006f8f4af3362d8f6c553a98ac5ddcffba 980e95f51309fab1ab65d67a47005025d9c7756c\nbb050ff0c378b8091dbc9171701223cdc30636ac 37f5e3a72c0cb494434fbb3d6fd8a7d70cb91e4a\nbf51620a6f1fe226bdce04dda493f45b476a0f43 960c335a2a48d5407023d98a99bebe5be3a8f5bf\n0eb49be4dd042eca949ec26ecd72e81b8186d1b4 95a13249126a720827a88e17347aa7829d893383\nf25e9d39d94a1d4a479dfa3dd48a0e130dff0e03 7ba1e6fe0618672b2680def64379ed89b4f37cb8\n62581b7e24bb3402e044d35788f6b8daed51b7e5 141cccb5024b86503c561b56b6f62139e31f1107\n9e54caa39d887b4c0b7daa9536746cfae8511b27 b1e3717b56b3ee080793617226c36c923fb626e8\nf62323b06c6b53f2f30abcd7602a7cbf8b4f6c78 41dd8f4886e90fea2e4c4772b1013ff496a8af40\n6845c576034225e302432d293af81140e5460d13 4b7147c4d7120c83118c6a1758e94b639bd2897e\n6cc2f90cde330218ea4f0375a48d0bb42857d66e a3841940aa39aa4a4c64da3b82acb9288ec66db2\n7734b6c37b9febf7d045c734d995f61721618a1a 9ab0bc840c915c54cdb15ff53c73a4a96b3641da\n7013514e1d8ca94825afa48f291c1b6ad68557fa bfce4a17cf1d93a977110730de8fe81266a67a67\n6433b4d4233ab91597c0e80b3e2ef7b25957371b 21be45f6ebf6fe85e440497c5f1f231d8b0b395d\nc38f6f52598864a7c5dadd46c8d8603accbb1068 2f9cde50ec878cd364faafaf3ec89b1b1e7c909b\n888d5017ce1c7c064bb08adec0cd9501b0525a45 029f2bf8ba765cffc3786596912c761bf62ed422\nb7767b1b74dda46f8853629929de9aeee813b8e8 8f53893bf8c25b9d506043da061add23ff397882\n58b84bd030245f40f2ac02fe5fe1c4183861f777 677c8995bf369449b586ab1af8f5ee889574d9a8\nc617ca019772562b88d7c685d8fd552ed560bdbe 0b66c3a019b2f460ce12c49c1d208ff39861c1a5\nffb58ac6da7c5c69d08164787fb07e295da693a3 696cdca18129a9575c551a94dfee2579bef4ec74\nc908e23b33276f9301f31d4e3646433dd6c894d3 529f0aa93e570d9140e50f16fec58b269ab082e3\n4bd90ee3c5bb7b5e79aec246beaf54b1734e1c06 4cbba12bfcb37df133bee04a1d5dc8edcfef9f09\n3e43f60b01f235cda2ffa2c06db8978ff72e67bd 64db8911616c0ef1a0aedcd1cdc653b547369a3a\n4d86bf2bc87210c97db74f2823e07fb37c800a6b 83dbd5edafde4acf85ce4e8d3507c1de4bd77824\n27aa970618f1309ebe3db1f9ae1b849d36cd87c3 c826781b0b6b02512ad46c97f5d9d24be0ca9547\n584a04482c7c07b9fd6b64519e3bd5afa191a9eb 6ec401654a9793d5183b7e29bbf166bec64de54d\n87ac62e0a5517c1191323fa0bbda2e14253760c1 9a2bae7234207ed40e2defcf18eac588b4450d37\n700080dc4f743c0c647c988005b4d91e48eb8fd5 1f9b4ec53e566570b8f4acf84a825b1b213d3d45\n8489773502bc4184b6838203aa2d25adcd78671c 210b19e60609fdc67bb3f4410ce7ee78e60983cd\n04f9be52140ac33b834781564db0e9a4273e7b39 8ad87b2cf2047c060de1327d35e61b34b217ec46\n4995154312cc72c48274651dbc4481b498a1fec5 f321701962f93fd346785a273922d3c15ba490c9\n212a5fd47852dd1d1b2f74c5e09a24c12e654e71 1e14d60d1309c924009818a61241742b82d07cec\nd258e9a83b2274b74dbb13dd6f411f323359d012 5bdef9a4a05b20ebf705234446b3d25ca7b7f0ff\n5152ace179f3f3d723eacf841f0a8c4530e52b7b ab73738aa357bd08abb7f76116214864de6bc905\n5a27d1466719d3caff242355ae955882190a7a52 bc92dbbbd92861a416fdcf434ca704120bba6fe7\n30a48e62b427be62dccee4879e8c501e8fa709b5 28712c3a041878a340bc0d4f7b034797bd3bc954\n3205de1f750deb193fdc037bf13443e2297471da eb4866d45b53c2ac0911d290c01b2cd1c608af90\n42961abb8ae830e1b3ae3aba21ee45ece354a0cb 1c59d0df427a154b3f5295d9dfdd1f56d6355a48\ne89ea0f0ceac1850fa4882fb418f49832b7155dc 3410d6ae6b4ace3277dba41934b55bd485432e03\n28a26e12fc6197c6495b21dba03bd9ad9aa859bf 1284cf33645c9224461cea797813d6f191a1f3d1\nd8c745cee5770ea0071cd4cb657a506ade0dbc45 d2d0daf8e280cf98c80fed0ec754f3f770533870\nf28b449e8df087b3458f6b2904938521e3384cfe 5af010551a2e52f28bf9e1bb396b97cb9a685b23\n2bd13c862df1f898047260b3585df24d4c93a58f 278ff30d8bc442a616cb10eb00aaf08e108cb5f1\n40a53b0f91d378e56a0844cd0acd4afe0168679a ffe1825a84d7f654d10f568ef5967ad484cbfbda\n36d9d47af758396cc2fbf97c59e9c19f499f99f3 5773cb6305b056a8bba600d895d3771c3c6e73bc\n3b4ae884a1274c1bd7398ef36407fa8b3f89c73d 417e82855b8e76304f35f9a84d6fd600057e5d12\ndf26375314b8c7bb787266eccdfded23503938d1 fe8423f0fedfe567928961ea6e024a0662f37251\nca35bd89dcf0ec2a99a4860ffe566c39f911dad7 9d2f083b3d7d4a0f3dfa8a7f2442c3cf46327b03\n26e47b7e8267e9c679feeb416935a1bb4fa60f2a b41f5e4e93758d2a511e2d7ed071260104f6b333\n9fa11a88c1f92bea38b58ae439c6cb12cb17ff72 d7545be0bf24be037b5fb9d58bb7e7263c83f383\nab6ae19c066ee808e972aad51190557a9b0fa9a1 37fabce71ec98d3afb7d65aca11e4bf696454f68\n93266307ff1db833ea75c8f37bd0c9db0341fc4c e0920e33832460d3cf500d515ca310637bcf27f3\n5b76f4055edf0f8571d865bc85e7c906699c2f2b 8a25caf233ec7b0f19c76895fa3dd981d5b52dee\n415bc3e2c16af380772ca379ec5d97e22e19d71c 881e6235696f67899e8c19de41527bb47d64ddab\ndf8afc7af1bf809e74673cec42ab0e6a86d5a391 62529bd660c3eb88c1d63d217d82d45000c8f7ae\n8ad2abdddbd8b0458f185256c279abf7dbd6f826 b7ee8d077488d48e58e33dce78055b3f372a4130\n9a953867f184f96314a401cf90c1ef182f6060b5 4830b5044523e9645913644cb56b422ecc97fa0a\nc2bdae4527088eb99735486f51525378929cca95 b6dd35e56fcbc625bd7d8d5988edfeae288ff090\nad9f8158ac0c899482cf178a4ef008f038b6541b b5185ec16a12850161d066c96c5716d5aa4943c5\n5f8357ebf7a85b7f5999b8f3672e7684a5709bfb 1ed8a0171d65965aa5df4d5352f1bdd54a076919\n1cd8c298af0d209ad797f1da5447046edf8d7b2b 087a21e9d7cf63ab66ca549056d92bb052c1271b\na29c122713a03e4cf08d64d309fc204b33e94404 ff0b7f641cbcdb926e9696f3737b5ca28f184128\nf44c6814863f8aba3eb05ee999271f3ca27ccb7d 57dc66ed6bfdb9b46bbd7e1f3ec54ad16e0575bc\nc685ae38b6d81699bad1a946b57bb93e18806775 e2134bc3d06622329eec7ae453fa94b2b1f4d678\n4b0899831300c252e259205316ff07f2392c8e0f 5f8cdb5745f7399a9a2087c38b1b9a3f7da4b8f1\nbda64ec94de540c9c0e2172bed60990ab510f1f6 a642df540a8acb57ec8a8229360f6156b5e3a3ec\n74794eee64503be73259162ed6a8b17c32c1aa5a cea923843f19cfc89552f61f5341fc9d4b98afd0\n96946f1bd550b58e41537c7c2cd672efc43d94d1 e35d2daa71e2a81ead0bddfcbf45fb78335a6b72\nef3a86884d0329588724411ef999fc051e06ef28 6fc963798994de170692b2aa211138f864baa75f\n6b73eb1fa92e6f0706a465eb797014c6238ea310 a9adda16c844df1084d645b6e9a74774f57ebcbe\n69fd9337d9c0167185aea40beba01962c2c9b05d 602a9b63b2f44c6b2c66b2e4c111daddcf262842\n94c8c4a9566ec02aa463c3bbb7a6519f6ccec8fd f4719c2376a1b58fb53de6b393a4b2726293b947\n207dcff76fae5a03482a2f2e9f92260272a0f722 8bd4d2e1f04d0a1cbd74cda495b94121363b7731\n5025832d62f3ce34edbd60053913dbbb9fbe10da 4cbd47c9c671b60825b5a6737097ee1c57c34844\naae25dbcdfdc8e35e6071ceb6a34e8f5cacb1be6 97daa2761e1d90fa346d53eb1f433b249145f927\nb4740ee8fc18e44c565948ef62ec09a5e2bd17be 3b8605152d657a67618d1494eda8622c75930ee5\n6a04e73394aa41aea4f25bc4d0b7fd5c8fa6b4cd b0d086e8256973c1cbe6095e60609926f974f9b1\n14f7823369f948dbf983e6a435544f475614f19f 0050a3c87cfb5289d05c59d27ec8668d545a12b1\n1478811188a94b7bec223fc3e125ed94bc95b72f 556cf840484938e5bb5a173a26c8955479108dcb\n0d36463e47636748596e62ba2642126fc834e8cd 9e9db3a92ffc23adb7ad0d065d4f8a5836b38a2f\nb3a645ad702705be193265cc8551014d0a18e856 e82f0e101bfc2759103502c5ae19ed63e0c9ae63\n8d21314426b0b2fb8e2453364c033d07080197ca ba7029e759792ebfd166a5f72015c214092c4f76\ne07356effcc47ccd8272c6fc0c65e98f0c642825 e43159f8c44c09ef63c7339c2dbea02113f9d9aa\na441cbc0e8b04d42634ba81555a6587a1f8fabf4 67aab8e1b8be3abcba8570de9dc1185f2c62899f\n5d1489aaf5136177da12211c60e3ac0a496fa5ce af9de150f152458c611f79d5968146e40ce48992\ned7783da5d6327ea5229050681d81a9fddb396ab 40aa04448c9caa77a1e954e1dee756d0029ae4f5\nd9f45d937b47527e4133db1fc9a6cc04272581ed d81f92966e7cbcd1fb8e8e18d46ad748b35ba14b\ndc33fb46124327fab024ee6addb4dab13a740f7e 1c33a42242b4493758a8470fa1530f351622e565\n01bf280c0c0e67c4f42c420b3b0a4c9581f31679 addd27b6e8d379022f12ecdaa7a8dbdb4c3ce1c6\n11ef5ab488d8e1b63e5ff2db321c3d4f500e3a8a 031df081e840d177b4ceae578131fda6cd7e86bf\nd5ace0a27031d98fa5eefdddd0475766d61afee2 095755de96b781da10b6183dc7676dcbee122513\n30f74110a5db2eb8a183934e9497593ce2104773 9e1146229c906d2c59c302eda98a0994ba8e5c16\n254b4fbe8a71ef6a3c29e2362d1d6c7f8c31d721 612647f5976c653309869402de4587e77e5e3272\n5bf8aa7a68b22f799a065e2363f41a2e6c5a5e84 5e99ce098111391c00c5004549e5aa565a024cd3\n3e5ca1be20fcce3ee6970fa698b5dfb975bfdd3e 446bd2e48c005c7af93ccbef5d6a07514f67beb8\n5d6baa617a7ae771899e450b77ddde430942ce3e 232d3438e2e99a9e17018c9b2c5560652e6a7ff6\ndbc39720b8930b92f26a60cd4b7e1c464fbbff17 8a5d44a03e156cd68f02dffbd14c1606bdd22927\naceb5098c789cb30b548198c032ad2771e543be1 7a46646cee4bfaca0552f05303c0d3b3fa3973a8\n97d5319a8e4afc9528aadb17fd1377be6807a6f1 6e08565d128c307e768a64cc6cb3d34f411a981b\nf1f99502351fb7ca8b64caa0b40c21e4266ad1d7 a8cbb457c95df8d217680903b5dfb9e1469f19c3\n32bc01b000eb62a42300bbe8bfaf384356286274 6c4a45fe992fb426dbb0f3579a489428b001ba59\nac06369f153e1d55f5524f4032609177ebcf0faa c82b90c9a98c5ab9011c3a88c2f9538460fcdd7c\n2fec115bcd2910f29dac6a70b1b91847372d3295 925ea265da38a06bdf9f30f5e53ea4c7120f4628\neca19e2e3ee28d7f482e52dbce1a0f19040f44d7 33dc4dadfabdb2c5042f35bbb26f0d7aee04cd0d\n4f0d9f3e683a46276798b54d7bdbff7bfb3a3baf 4a4f4a734b3c705715ccddcaf6b785ed32ac28af\n5c69266e3ff44e2b4ae9f10c0bf3132d5bd077b9 66b8b56c9f2383d55c92d77690058ee184a3d94b\n9b7d0c919af6e4d00516545da7115a4940a09d53 25bb53db544345f455319b03f9219991f20454fb\naf47225792105bbfa26e6d16394d75253e722566 efe4d8a293b559e322d0a76b3f7b64297de9b388\n7c97d4df89112e334133105dd28861c5c4230674 c908569d8396213c231f770f9dc9d955ec923739\nf0025c5ab1a41453c00ba5b2f489dd8456111343 66da32dc2c207021f93a1d69db25f75496e30a8e\na1b187c133b50401465115181609a5ace24b3218 06b516f171ebc3df2fa82f4102ca7bc0289e5b17\nf630315600dab28a82cc20b4de36575e67bc14bd 5a86c60411db8f9229801fc7704b846c42e9eec5\nedd1755112d596d17895ec926e24be8b724ad0fb 136fdfefcd29cde2e973dcb0e284ab80f9e98e67\ne31b341bfa6ae86410a23488e2f881a855f7e812 a648831eea548954181abd3916741df58c6f9e6f\n35afc4a96ec45c83dcd9a0d0bd3f95fe792a5188 4fd9a561ff5153bb2d1a91eed7d9582f64a15698\n9afb0b3a5b6930fccb4b1ed45569b2d77a6fb736 b83cd87b435f1e8af6b30e6e3a7ae6ff54025e54\n21676093a9c8d73a47c8416b5a56eee42e7f96e8 73f769ccedb658fbbbf352ee16344c1731f22a53\n0cf5cf16402ed3470563794c65231f8aabccb596 19ae267bc24d4c91e40d967d0ed7dbeded51b211\nbfeb9aaa2ed60d26f1c89193226bb790b177f99c be3aaba66cf17a59da90742668e3d05179d5468b\n2fe08e288a319170aecf923fa014aaf4b76b2447 d736a576c29b4452b094ec71f65766a771dc7cf3\n055d14bec92e84d863827f912cfc38b30957ed51 54f85be547553b55ff7f45b3ef35bdaf66313a89\n4ef72d1f7d13ec370d90e364ab78a3d2dfe614ba 404d45a24ccb9d7991272fc129e23e53e5ea568c\n3e2e6ed4265f6cc3226ce80eb56433346ebc8d4b f297b7da23c24d0f446c0b8883e4aa324594cfd6\n4a9d0d7040807362ab9dd2ccdc5e1f5878a0fed8 1bd2dc00c56aca6eea04aac94ed047254e99981e\ndefbdc06df7270618a37f14cae50f8628922c28c ac4433f95cc2e797e6c82c2fb1ad8d3bf0577459\n5e342e6c4e3ad6037bd087760e91667f4109841d 1f0620a95a34518bdafab1768718ccae4dfd3774\n34eb79a3f2e74d1f4ea2c99e9d6e4aaa3dcc99fa 1e8c9c21d35d575d6cada1d862817807ce6f817b\n3c6851a213ffffa3cf44ab15ce44a465b0d22792 63e90558b22f6cba372803fb473024893144fd84\n4fbc248c6ff396d674a3591a500eb8e2dab0e19d 6937ae1cccaf2cd5db9361d8d05e4f97194d7ddf\n434c7e46f8fcd25e9d8d6ced07b537de1fc7e3ef 66a2436144d15df620ae89c07e1d93e1c5cd635d\n54f4845332d927359d923d6b83c609447d2247fb 8f51d6c31a10f7668d9f4843649060390ceb6837\n741d7cff2f250db3d574659a97051a3ec891f5f8 90087d1360eceec5b0c636c5dc1d19d65c026b6d\nbb7be195e31a926a1aab9509a8df9e0874e06535 e1854bf09d43dfce7918e6bcd06f058b7ed59f96\neb4c674b22557a8151e5ad1dd1a47c9725a68ad8 6dff03f9b73f1fcc1adca718e5d0834d14203423\n6eab1d0e16b7d03d5e7aaa2b24a696fec6af8c5e 2bb37cec51c982c065ede28001963be62f49402c\n65aaac42e318a257e58a6602fdb0e75306851b74 237b8a52ba91d742896519c28e8efa13cb62e55f\n446ff67726bf598a3fe7534756b1485696925ae5 583cf84875853026dd5cb32f962b70f63ea8ec55\nef15951fe13b02f396237e415405bfee2fc2c400 2156e96d5734656d7285e9bc0d0e32e6451bcdd4\n5e38c28b693bbee5f702830ac74a20a9af651d36 e131060ff09b4f130f2f856253eaf83055975e6b\n35b4f4d74807e0db70d83996d66545ef86f23ac6 28036a9153514622d8b06cfed4fa812536ccafdd\nb4f0fa2225b7a743b5ccbd32830fc972d0358240 ce0dfb291c40b294c859ff8859dbf5d60b59c915\na2d23b1105704d159bb1abd2ce3f1e13b43bdd54 2bfc867a8ae08b92303767a0b6449a56436e6a99\nce318b817f06e904a2afc1418acede61c7153c42 16c5bb8591ffdc6b6c483ca8fbf92521a2d335e3\n9f52f1ed4ed68f439950ec411108579ded5b1666 e2f3332fde02a28454a156e8c1d8be511bbd9e03\n22b396b7d60252272d7faa8c48d37072ad5b014f cdd853d55a9065b1476127edb740565f88d8b9ba\n0c5cbb1d33816a2bd5a3322e1a9b300642930444 0dc9b1763b9fd1ad1786a261fea5d3288defb62b\na432963bd4aed26e9153f5bf8de7be07ccf1ccf6 1f149290be9d808e0badee741e7028328b72c870\nc48296e6971a73fd046bbf6c51a64a5a88aa5feb fce7f4798bde427b80d909bcbc0ddc9be52cb150\n10ec53d2b85bce01a0751850d2743bac62cd316a 66adcb0290ca7cd0f9431fdf875f6ffd3e627a75\n5563601b13cf0128a24f12c8798115ba282a63a2 46e62954f406de16589066b241eb69cae3f158d7\nd5f4c7c222a16a2bddcd492403c4e972cf4b389d 33ef442ecbdf1c510405a5432063616df3338cd7\nca4bc084f3be9cf0a64475a2e7e5b7d68b7c4651 080babede72ac358e35e6633506b2627523595e6\n21b4f9e75e82f99fa4240a4a9b23db82c6fe96ec 229e7cd5637d50c3fb5a00696407e0daab76693d\n5a1005b9f7361eff2c14fd376818e948ee18c328 e26a6c7168dc780b346c2caafc87f810e3ea82f8\nb0710957606ec3e526ca5f464c7eb31595ba6f32 b9297756ceb652908a1d9835e6b2e154bda44c8e\nf336ecc299e8086f30135c5da3f8f6d62d93473e ce8db78f49142c1796dd759fe42455489f19527d\ned3a059164dde8e7a217240981c8bfd61676fbac afce68d51d887e4fc8ec789eeb884e2e7af50329\n995f19c05fd85a98f7b6724d051a7f6570431b5a ce218e402d44cade2010e9a78ed996a69be8977b\n9b5dd1dcfb797e27948c5065e7f69f141d712c04 183221b08ea2f0e77e5518b45eae11ff70d4ca00\nc826c6efe6a4a1a30a3a9c757c4117caac2fd9d6 287e2c08bc06326b6b497fde0c71160ab822b0c8\n89ed5b853bcb6e31d5e044031cc1e4b5b4f5e875 95597121a62ef29052b623b1aa9cc20ead91d92b\ne06beccc8ba818863997dae4d35cced5764e3d0f a18f871056fe29cc46b93e30a9ebd251c81dad59\n092b378a696c539bd60e2dc920f7183853e10c93 5fa5ca05c7a721a231ec21022e74dca28e5c2be0\n2a746468dbc9672b4d679a259bb21074307dac58 2358587e4eca6964f60d27172dcb9902313780b4\n7853dda9f3f57c019d034616e28eb8441a44c743 ad1afc99af20c6a49528a20da9e391a0260b79d1\n73018d1019cc44a13fc8e0b0cdf39a9164d55523 d3b57ec8010e9b47ac55391a66dcc82eb66132db\n2c3be573e80050f4ef1c063b46a812c2e5f97bf6 ca0f3a6273daaaa573b55344e282041097dcd15d\n3306629dfadcb885f6dccda4b04c7897289c1254 1050f7c2b61b85255e1f5aab959af6693c8cd79e\nb440df171a23f400b8b5f9210773b0825ed4bcab b65072518b4ca22f47c74379872304fdcf5e901e\n36829e8130cc4fb7cc201df12b7c0cf91c81b804 cb884c58e4231c7329569cdc2daf066c803dd3a9\nfe3bc63b388bf2dd40398cef9ee7e534758e28b4 33e6c053ff70c2efb724dd789306a9369a6d539d\n9b49e9472cdaaa0ac1275abeb7b9f5e94d6b1e92 d21de16b53e30e21cb3184e741b1e51e7ee3c50b\n902697c3bbc81106dfff540cde84a08bff321c40 caaf672b273f8492f2b7ae5ea68b21ae321c10fb\n77df257c05f70937eba5edc10d6b77c2603c4af5 ac5a83e66d213634b6fafb05fb15efccda735970\n6c89cd1e557256d6afa68cdf5d16135716bde411 966779e749da1bc6250b2084c268a78a314c169b\ncbf016cb080038e16d0984a361e6807b0f8f8fcd 7b7f629096b1ec1cd95fe51414f3fff57aa0f377\n369935c232e4d361593c97bd4fa2e43d0d18cf2c a0b8733d83eb9d3b19382ff09c6e461e4070a080\n8a36ac97fc788d7e9bffd32fd60b7ae4c1c16eb8 b9b02dfb4bd807233325b1d6017abc2883bc3a4b\na3ba388f7c94774112fcb8de277b82ad291e3c18 d2a6e9108bb9e32802149f3839ef13b7fa21da9e\n3471d730c7abd7680e092bd65e1095ea7401a0eb 5916cf2034e61b5fd753bb70d2aeb55c7f4e544d\na2087782a23e5f77169740409c6dd6489b235005 efd6e604454fd344109f72d6d92041ade130beb3\nf22f83ff85ce09ba30a8ebfffa8891125c407dc1 e90fdbd3b9e72c20e2b7a556007ec445a13eccdd\n44728a307d7daf685774cce6ed3d108af8f0fe59 e30a79e367798fffef4db75b0b73cbaddc492ea8\nf4d39d972aaaa928de24bb8df9d3ddf5a4c16749 52958f03da6044a71b0919b44b083b33800be60d\n496dd8365d5439691bcb15e79029eab37985e3a1 1d385e6fd847e6b263ff6c8af83eb8e3b944a4a1\ndc01a484122d826ded8f92882c024b6a6feac0d4 ca71c81f2ff401cd3efd36ba46c6da7d0f9e7438\n20b688fb9781e0e0693a5203d50a0c32d0493d2b c2c715dd8a9d0a851f4bc7aa23a9720287ed5484\n930b7f6597bf3d3864b252363031bf1c8e4537b7 a5616c3c66adfb57e0587242219d21e4bc3d940b\n7390d76855abcfc264a70304e9487c52466e5142 7c60e428911a59708becedd60db7b0011926dea0\nc3daba2cd73b503724429a223bad65a66e66f2fa 887bab3d6fc2e7d617ec31db6ab2e63785991b0d\n9e9173260808c300f5f01eb82369290d64956729 1023940ff1574769a8e3e33a9bc51cd8fe7814ad\n8f292805e7320c2a31ac2069cee34976974da527 488636fb42393e2216b2b253a442168f15daaa1b\nab2355e3cba63b6424ac45b6087365d12c03c80d 7866bcfc68e6c3f30133f78780564f935f9489f1\n6991d4c129b0e0c6fea17d5f9ee8c313d6fa707a 8ce774a3ac7831ff0ca371ab29268377a6f8eaa3\n55f4b91ae930065793bc4a38397efcde63686fb5 d2b7cdccd7c35f55cf86301baa63b52d150519ee\na31847046af7610710c58e6e1dfca63f9019f4d7 c53b04c461a32922c5d9b0501dfb2d2d8b2d0384\n35ff5f8b01d59f7675e3eb34c8f3ea8eacc444e3 621c02b8e1bcb80e472f7309804477e855ef237a\n9b5f057885bb2eb1219b2baa064cf10de60a389e adcd997f473deb23dfffe55e83217885d6f68326\n02cafaf9256b5ff653b6240bf87fbed58ce5be7f 74c3eb8a15acfb73356212f55faa956bfa2fc9ae\n8918aee4b33d680dcf121b314150e9dc577fac91 b098025a5a4fe3e6a03a23da54e67528385d5f53\n852e07b8c9d60638689fa101290719d42beab1f7 6271d19b41ec8a2a36fc3eeb417b5d806cb4f5b8\n10bdd83fb996dc66c05cf6b8d9296c9797c5dbc4 b91a7ddbc437d9d04402e421d7daa1ea789b943b\n35ab08183a07aba2d7881fa45f2a695c8080d508 5cbbc4bce93ba5da18784205fd163c9a6381383d\nd09a5b6b7e8a06b7c0ff847588e9792e0a41cfc9 2cb1446afeaf672a473badb05d30558a08dfa8d3\n2a005be547535637a1bb210f3bda14ffa5f5f623 7c49685881ebf54c9327913273de557ae1a01500\nd80cdd2809bec5f27a4521850a03b178be9bd01e f7b970711eae0e958f310f10d642ce8f1abf8df0\ne3750fcb6b10b589d03654bddad4bd1fe9ae086b 0c5be91fd30e1910b79de6295672f4c4a21487f6\ndf083306cc3aa67069a5abd872321e73491f6a93 107429bd63b02536e60d0e6ad34a402ce976819a\n7f1f82d5ec2aa6f66c610e61f1744e17f54cb497 97834bfd47aea0b8e9b753745c26922777d9d388\n71bb25cbcdb60e5b49cf0d95258e55174d68141d ca3aa2a1c81dad1a88556e59437db99ff94f2285\n02e9756b7ebf2f76e138cd81c4cc32e673041ce8 ccf8cd282a39f1eb5f95fc9d98ed783ad5724cd5\n0e49bd4dc1492d3928cbd9fe394962a516909d65 525137fdec7701099d976b849269303e0bbcb904\n68488f24318287507003252a200a6df205302209 42274153463bb08282167ca2d5f8675fcd272a2d\nb66869b88496dfcb5a29b5fe5c4e00ad95e682e6 d318d10245dc0dfee8b0eec7fab1f086e09fc224\n8f288e28b6b5531c5f7a89c1039d57cc62b52d56 67f49b39e91e1138db6ebeab13f9b083e1f4563d\na0585d76015e395c64ddbf5c4723e785e7d36730 f849e05ef74baef4a593a6b030baa8f1244c8203\ne2fe609aa3a1027d9e238cd1c7db883d49eb2a15 eb0f07169283b4466ca3af1173671e92bb2baeac\n1050ed1b02fc791fde49f1df5d90c83286301a60 b4a7dd6cb3a1e5e4a6c8b2ce62f7eaa50842f09e\n1d84aa0ce38a9c824575c3bb4f487da49a5e782b be24b8248cf6f06c6a523bf19295b1662a871cf1\n1b6188fc03f5a4ad5eebdb17695aaa16239f072a e4b3e7006168188a7d8d8076773f7958bdab34c5\n2e0ce388f9a5ffd7bebed016a539f9e55e67a8fd 342a1dfc41c4e3cc44a6a8d35ed03e2130f58a4b\n92a6e693cb807526a0e4f11341ecb8a0aed862e1 589eeea95e0465bc6feb0695c190a13558524159\n539bff511d35eefac7876cfc19939ec0951aafb9 8f799445fa1644734b10947558cba1d82cf0c240\na0555db628d74b8d79ac44ad5708e3873ff01ecd f6dfdad845c9dfd89408b4269879e7f95e9a3c46\n51487e5d13be2e6a6ede28ee009f87bf29f0a6fe a1f874fbcb263730c9fe3840a794f40036d559a0\naf1ea33aadbb6830af0c9dfc6556af9cec4fefa2 d0e862a52cb105caf71813bb1773ce003cf33c14\n1d7e73266c9f17deaacef6406a2c7b08584dc151 b19f8a16891b6fb17b890b99a5846804d588f79e\n647c22f40a07daa3daf9e302ed3fe106dc82694a 237a772df649c8be142f8e823a4e2647b2e2ea18\ne646fbe804a11c0de23e01abdf66db7e264643a0 eb888c03aaaee2ba07615f6cf7fc27f160fa3d42\n4397c27bf4e14915b8e9e86e82bf273624145d97 4b30caf6861e55d12df6f25fe7dae804d656c6dc\n098cbb082912745e71f50cc5aab179f532faf496 de921c3298a1beeb0df17fc725d6782d8e3af74f\n44f15c61e84c0a2efbb4655ccd0301c8baf675a8 4e0f7e87c3de8dc45d646ec131fc44e8c8709836\nfdba9b78ea9b160072367b3541e5938ebdce2482 0abcea68414549212cc49cee4e2c4132394fb96b\n60808a5cbb21aa43c3d8429ce4f6857a57db74e3 93bf912eab32dfb97641c43c11a89de120e4793c\n4846c98faef813e3fb51d2e63bc50bd4ddc571e6 0cc3dbd4c63b7660e2c4da7a5a6bf7911e67d4c0\n234e1eb86998051f103e32ac2eb2edd6157cfe55 88e0656559d350b3d7254fe54b8c91eaa9fc6c8c\n790edeac426468f0e3e545239333ff3c37ac8c8d 4fb053f5763f55df02b71ce8cc7b82c2ef4f11a4\n8554c2638f07ba1ba3cc2ee44090e0d8ec815c4f f553934e903cafc0482d11683824f124dac30a18\n7ebd9e1557a8f1f27ae3b178a4a0d57b97eb4bf0 8e03c91300b20f4d02889571b4a73752f5892a43\nfc299abca6bc393d084fb0a1ad696bd163838cfb 745ed923c056d975b364806a1a537803797c9df2\n90ef9a4e2c94d6bc84cdb6fbd142a4bfa16a41e4 9c66699565665ed88aaf5d83ec1066ce5745cd38\n8338053586a71f40cf794025503600509aaeda08 6af1135330b4e9d9273333f005392f13bcc34b1e\n3f1bbb30870e91def024d7da4b633e7cd23d0c1a cc99c5e8468907d27f7ee917ca40146090831f5a\n3e951685aea5281ab02f469c627cc8afb6b2b2eb 8a51955047f414066ff19fb0e3a3ebff97c2aaf9\n5d8c11e76ea416ea7b5a408c4468d7ef7ef1b24a 86318b0ff63acd21115743b2eeb92d5e343a7e8f\n564e77fe365fd48bb0ae08420b7223b1d2924609 78df4dbef891722c7bd338fceab13796956d9fe8\n428455a9ec88e9dade3eec60a07622a40de71d20 3728a4b689d4d7ab956ce98828b25515f74e32ce\nf1016bdccd2dbd38a9d8694afcd9d2012e81925e 3384c0b8a2d274805706f382d7adb6306bc2156d\n5f94a62a5717047f2fea5cb1a40714d98bd15e5b d5045b791c61c7eda28af706e8007a60f422bc9a\n6e8220a55842ad7200a3badedb08a05cb3364aac 71d9acee652e9e37ffe6b7a6010f4f026052eba4\nf548fb96c660a698c73e82e8df3a06bea2b904a2 6f1edcf82b05d8979aa30e6287414c57a4f41d59\ne60d57ea02a7057ce083862f84a8bc51f744a9a6 b45e7a1da095b9ae695f2b6a2e1460d8b20631da\nd49cd4ee67c58774c31ba9eaaddb76e869bdbf6d f23fe9a705a9c1f2b915917bbd067e44f1a10dbf\n652009c7b51e4caa48e44f0b7c4af7c857997e8e 2a6cb7165a0f3c626011360639854670a7aaa46d\n70004c315389b5b19373a1fb34126dfbce216fc7 6a984885e72b00368aa3bbb4378b0f8218526aba\n9c4548bb5c656b220a5f7c3fd2b565a309905967 0ca61e842cd5af11b5514b7f0b440f4b1f3223c5\n336cf2fe6d5f1ae5c9dfb8478719766a6a7e4677 5415e114426e2399f722f2695a7624c135604fa8\n10e6184fed184fcb21569e4ba1edb6fda7e333fd f9886d986f059c2f5c2c3e995224cadd2d795642\nbac75c2579fcd37b3accf08a3dcc069e565f47d0 2b90de48a113bb6365fa535f0b13094899c3d56b\ne7b7d5adf10eb8e955bded660878c8d999600a4c 98e05fb02d10756bf244e712c80657d0e89844e4\nb46fa2f546268b028fb9c7fac9e4faf3709302dd 0065f2705a494986a96edcee4dc5c7556ca8f18a\n0691f116ebd6561b1aa58cf67fd38b0b49207815 53ce69ea2a66bbaabd2a68c53886c6725217a13b\nb1748fc47fe227c3ada668599bded137548493d2 a62302e549983bb11da50352851a5db22d1404fb\na676c58b0c1c7360be155aa82c63b67c79f6f033 c1e9c5f6e0546d878e0685ff7a4265ad7a070c95\nd92932a8509b883edcefaf76e7ec403a03d06352 4d2859cfbf98bb127bcb3b57763fe06c784f0bbc\n8791b56e730abaf4f7ed328a4611accfb8aa2172 e124bee9f51d578710a31b6be9f919d1eb1d7c53\n74598ed94bdbffa96b13fdb1ab630df36cac9190 576e358569ecb1c51e4ddf64efac1878b852ca04\ne2f70cdf263ddd3f0b3611e48b046eb448220625 6a12041ce37419d96681cd5a9e0136ee9d700a37\ne0bd5bb7a40dd9184fc8fe5195012282e81ce924 093bc3ef178ca87d5dbf57c8c8240a8e530cadd8\n0bbb8094b4af47700aa94a3566a94f1adc032567 4469ce581809c36d1b51b32a85280d639915c140\n2dbbb89287e8c21a1a95ad6fa87568b7283e0d31 98bbf166d6202ac63b309c3d19231c3fffacfd4f\n087f629a93d377638e8242d045db8aafc2c9d35a a8ec8d5d0d9651f6c00a7b125d405e04914d2f2a\n979f5b372e0fecf412145cb0077db25a9b305b96 dd0df6c8a425e50366b46b7b6ee3a4dad0457f85\n28f6cf80ec5aa0fa26a40e86f9134070388523ab b7eed0335ae0abeabf26cd80c54d9f3a8d63184f\n1bcf13e811344c1681764f63d6bd0db672c18afd 0005a2f8ca0e7447b0bd4db566005e9e1e9506c3\nec0dfba71718a3a0d9672277529bb4b89af4eec3 48882c475f47babe4e571bf2beafadf2dbbab21a\nf8434efaf4b89fea972d7ea4dfbceb63e5a15f03 499f2ac4140a69db72decc0ba937d84e4e31f2fe\n9d93e16bbe5030e845643722cc4dcd911f0d203d f8680fa12b95c0aa48640b8297b7bb17ecade3a0\n4b36d24781d9ad6feaec55ff5744de9a082bc6c6 9b0883afd35ee6010c971ebaaec94a1152c65e5f\n0bf570b0bbb1534b342dbc9934c04be69c484317 db740162361e533f9303901d74925d6398b00b95\n721f8dbd590eee8c1f516baf72b56b3670655774 67b8e6bf107e705f569b06958d5caadde952bd74\n0f897d14eaea2df9148388b650dd412e461d3500 3180070650da72541877e092815e179af26e2d3e\n89ab5fbff92bb1a9510911703aeef60fb080f06a c54e7f763b2375078c6c1d9c66f8e54d90b5c74c\n6b7510f563e88f5927d7c1f077195fc87d034b3e 7d03c820d1c1463d8de06052bbe3de5921ea07cf\n8a64e7c937fd2ddc87dae2c72e756a518931fc68 4fabbfd3f92d7ecf24f4803393b51268817dbdb5\n9cc5f8b28cc2db0e4e94ee846b9cabd2c7c9ccb4 b63e2c24dc07dea9ce04d65f4fe77ad2fa5ccf4d\nea9435572413bcb32fdab751af2a77ec6f238fd6 79dea8d24c78db7bcdba853d5633c417c215632c\nf343ff0f32a2907ebeb20b3e76ae6f7af58e27f6 135cb212debbc18996542d01d4947975490afaf3\naef6caf0fef5314ee778ff241b8212f4ee00c622 f435e7bfd476ddb4df64b279fea14a721a53b55c\n83136094969aba1304d4f9eba05b1c4d2e7fac60 93587a89a4c0a797c6411b5bff6077c59dd42017\n3139ed876f28928eccf5021ce009da43ab35a4a1 f6b519d026b5f6f2fa8ea676715d2573dd88fae9\n8ba270d3dd0d7fb860a95114bf2a9b6441540097 099445d1fb5a1fe4c982896e8e487d5060d7ecc1\n122c80d11c069f4b781012a358180dd8bb84f18f 35c5025ada0f9cff617f79766d9a10a70b09ef1f\n88ee056a95244d1fc205eec2ff8571151948d791 8f721190753aa0dde85d77b94794e817d33d0d49\n2621435bb2b0fd08e4026e27c4ce101b0df83c08 99b4932c7064034acce74e2581534a63cf9761ed\n4526b223a02cde8c1212104ae9c51f0924f6e401 33ef5f9d1770736374968397f80cd54a14cb875a\ne09727fcafa572526c9f1745efdf95ff9085cb2b 98f4eec72059c67d6babda6e55a132172d72c1aa\n73ff7ee7a1bcaf4cc2b02a0bd8deb225f9d067c5 655d94bfe498de7f59ba622692deb6b02e45972a\n151969981375ee3c549425a95d96385982d11d0f f5c89725e66ce83e1d94e4d71d0d6adc7dbc756e\ndd2bde638b17d16f7cb6e5f8172e75fc8ce97c86 addb37c86309e4b27d55a0b7660bc25d3d8fb6b9\n6bb5d503609fcec33f8c7439cc71bff3b9c2cdef 62580067191799fa992863011a8ac04c703dba2c\n09bec8681fc78b38921cf83d7936fd1a1405f1a8 1b4dc35f5d672227a29bf39a78d73341ba3c5744\neb58b303970a4f7327001644d11739118c1d5256 5b3eb80f7f2c22c209ac144cd96b9a0bd247f8c1\n19a4720c2b62f0287763978ccf24c6b457eab720 4907b09147c6b35a1e0154e2a113cec1bf0084e0\nc4ce37a834e7f03dece23db243ba8e4e2fddbe3a d068410ef113393ad9ebcff044264221965cb2a8\n370fc7d6c0b84a1ddbb7819acc509ece67d602ee fa3d604cacda1d25e225c043e4d1710717d7e19b\n51c8332936c06708b5feda679f5a09fd81c50eb8 6aea5bf3b0bfed073e0558513ec9d95c9cd6bd28\n0f65adbb0a1b21f44b74c771604e4dd74832faf1 6afb171341d0d1c9ac82e8305910ece824c79731\nd48778a7a739e22f9594fce5b8703ea29656d218 d87c97439930b8d393271f6325b9d8ee054058a2\n3c1a6c305663ae64bef1b95e999f61609cfff1e9 cc60cc4174d58c5bee50fc3e926bf21449a981b6\n1b5e3e88be54303fc51143b410da68abe6f90d48 ea08e016128f2d45a141cc3634a4a11fc57beb66\nc0b8fc949d3aabb909fdeed8378746c496618c6f 79be1810dba503b44f6ce6af873f1d2c408634a6\n5d342f84998a07c291e9dbb9793bd70c49c91649 3be29afadee03b4daa1ee93e7200c522899e57a7\n89e411673efe785040980a038f2bf793e150b3e7 596289480c8ffcbecd2c14374de67b30ff4c7f90\nb39bc5f09f221a110312f3b5f018f604e5f19492 62bda9ce9c38695a826bfd07990e574ce89c019b\n41adaf61ac16ab29d2565b7f9aecab724b1cd554 eb3fa5b28ee8f51237a566a90380d74e4bafa94f\n1e98c118ee48a1a3606f65c57ccc17695cad9bd2 37a415dae412f4278364c6e08a6ba873e363696e\n8f3d268a8df0a4fca197d317c734e5e37ec9d098 7563869812410bd529ebfa91628e5de30a9b528d\n895e7b350793efcace6920546c7287778bc84c18 93f6115a329ba0b1ec0f313d6cb05e2fd158d9ba\n21460d78fe00943f53be6e97e4d1d5d56a9defeb 6510e6501dab3c0ed58c4ecba9543c8f2936ad34\n300ee2c60c64f589bba4ecafcaa91e5ab51cd0bf ef9bdea3d3fba90d307e4ecafd5c9b6d5d0ff69c\nc157e2bd3e05cd89b7d99ccaadca49f8ff5dcf15 60bd20889f5ea7271a40f37fc5a104f5290eeef5\n0891bc7faeaef804c1c88d976efd995095f1b2a3 b44e146fede238e94e9901d269666134ea1429b5\n0cfdf98afe4c6d130a810247eaec7842bf3d6a36 3915f6daf441726a8403b88a8f411a8bb7feb590\n58b9a5a13a0af321305945a45246b9398a56d71e 3cb1b065a16a60eb1f73c127ef9aca6700951f9c\n555ce1db59ac88a3165b3c6fa51dc406f955c0d5 f563ec74b90a08f2bf9e48825745ad9a7be00151\n4524c30b4a49495e9e83cbcc88ae66349f74acfe 0029c7577645b8c5b975e6e8ad68026b12c94e43\n6b137ba5ad0c945aa843bf490222689fb9f0376e 728d19f0bf0fe7b3a656bb7b3c7e371a07f8f5eb\n352446615aafd217dadd90d7df0c971149dc4207 9a12dce2ac44159ec9b306838538e41c412be8e3\n367c1988538f66d659d5169c38d690ddae5dd5cc 5c27b977d9810018b6728cc7c1022a8473a6bd94\n3e51b3962384a4dc07ac71b110c26d0ee71bce55 9fa1c6eb2895f1af21241829bca6ece83fe4ae50\n93a975ad43e057e2a8f9d073691f65762dedba3a 0a31e170bab9f0375eea4dd9307188379d836e9f\n1da14dcb1aa8c67051efd862182937fe527b3aac 51289996de686c30db0583494ea9b3a391177f86\n9522357f1db159f1991850ce5b0134ca54f27133 0cc1efa73f639344cc72f78475b77a701e878f8e\n1421f8921a7eb7a005cdeb6c32a21eff3ba8683d 4d8daa5bf0dd97d2b7b835b0408aab07bd7d0062\n2458c0f07ac48128e2d6fb2830c7563a89498e9d ee9dbbc7b909e69e18a236308738a1ab834a2361\n383cbe3470718cf5f99e79ef995997ca4178f194 4acdd217f3ce22d54f851b172903c25a9db92065\n160cc034cfce62f9051246ccfa74ea848f70957b c4f4ba46d0ebeba4f41e350f0529e1b464c95a97\nbdf4766d9c9c96525def7310b65225723c9cf6ac 6af9e15ce4e3268f6e3a83857af5e2c5c21f6e67\n7972e6302eedc19c83bc76e7bc93954f4ee8fdfd be945554c8bce04cf725d7d2fb2b5a220332a2f3\n28ce2acd82fe3348c7999705901d71a5c08b7fae dbbcc02b9c30f9dd899eb03b4e046b22798b162d\n0bc4291a667a260c372c65292e7603f4f027a1a4 90faaebaf131ede371a190ca3202a71eb08bdc55\n71abe40e6033210241089e723744d0eb127d3111 545949165aa586a5313d7f68eb4cfca5f47d4e71\nf496d6fec396b0b97ddcbfd6fc11631ce820f9a3 e3b800792fdc1f727ba5a4502f27d5718fb52abb\n23c000661b0a3f4a87739615b087f1aeb57ec175 decd7eded5b2ed5d5c6618199677a6dae67e88c9\n6d2add9b8edc74b5553db25c25779d51b0c5f4d4 d1f8ddda9b6bda4860b8e737a4b6278317992311\n4349aba65bee2becbfa1b9da915fb216da74b432 ac1aa1eb28b6e5696097e93f8f615fae22e8f0f5\n116d80d5e7001b1d04aac221a0460d7f6a9489ac eda9c770d4683fc0556d85bdcd66880dd8dc5fee\n4b7c5e2fed866642e8bbfa6b647a9be31dbdf7f7 1a8997a1d348a93bbc3e94371f755ae86825161d\n1ecd085354aaedf8ddeb17ffcfd70f9c1b881588 713cb0e13b719b1b617a1020e1b5b5fd8a00f298\n7f80708907cb114e29d8d458ff822a0ff2f93f75 f0b6247e48b90a8185c98a90cdc968e8e6c5d85e\nfd4aa6ad11bc8ce886bf5e499ee7451d06d81568 f33ae130d90c31996a5e2712b312849d5787a9d2\n07dcbe620a0116a4129854d4a453adc7bd929f78 50b7da7c43f3f8d2c8035de6659962228ad24c6a\n872479dff94a1abec5e316a4bef14c86f9d464da b66e4148eb608a23956590027acfa8e50ad1de8d\na06343e5d6dccd62acb6097aae40ae078c224842 a0b6902d3e171c8addb788546f74073074c5fb2f\n00eb0f05f88f5cb9ed03f29f7ec2a611bd1e22ea cf440ee08f2c82ed4695c681fc342a6afc14e06b\n667b5684d47be1e5531976efbcad32dc4e3d58d4 4261f36d1f9742c721116ba0d3716b03c792a4c9\n27e71462bc601c29087e4acc7817fb4571d58b10 d63b143f9051d5d4f8a07cb033c37245ac50a668\n4624d9cd8c04d5f0dbd68dd1ef7b6acce9343f48 0bf7becd9ff167c5a8786f3fac84c463dc4173d4\n37c583ef2938d5c9bf8b505f1896f453e2f36750 f1733ecefa7c85a6b16d32d8bf9048aaf41703e5\n3267a0f26cb6e665aea8778440c4497cedbaa013 8970ff7f80869b9492658803324d7bc75f703430\nfbe3d120daaae1bdbba7f48b0d3ec261f525f780 7f84c945bdff0fcce6c7990a68b08a36314999d7\ncc3c2db35f4d946c79c85aecd3ec2dae51e8c5e6 17a21157f1aa0c27fd1683c4a35b7219dd24d8b8\nb47ccd39ef14e564304e36966dfe63f8df5262fd a0d51f8c254be331a91dfb8ea8f3139e0fb9f1ac\n0543841392e082c0112eb75b54162b88635a9831 ef89494486b85fde1d9c431e1a7fe2a01918b3d3\n2b92cfaed48cd884e53311b8092435a1e8b6d50c e61eebc28e2587c850246f4921f211ae6c2f1973\n29690cc4551cc7639fd31e43b00a4b08dce603ab 403d6e96994bd75174922168641cc2ffdd326ef3\n95496e6b96387b1d1565d13e3db8b1054115d3ba f05fcc037df49ca169d438965d54f34f60eb1131\n9c158d1d18403d9f4fb416f89fb140c50236d842 423409f237be177f4361fb3f46fbb9ed87fdcacc\n140c787651cfc457621a5ee0eeb3c2aa3aebb7b1 0d5ed8acbf1f3bbcd45c6130a0d0cceb0a588643\n6620196ac041d1dece557ad1e543a9affb9d17d1 b31baf78ee0900dd1158eebe39ade7c338609cda\n4d025265b1f94670913f2edba09f25ea8a5fa2c6 90370380e4af0141d151919dd90577bf7ce31cb5\n2a54fbf0d117500fec7318fcc665e85c61a0625f 2c62fdfac616735b0e46338c51ef736b8273e29a\n45b829e699ee55bbebede85b0e7ec41a3385d9a5 5c091a4749b6c73ba3d93b036c1f2ee115c98c88\n767703cc5a58d98a0341355eb0193dde1c3ba9d1 154a92f3012587e7663100be149947c74e61c372\n7e37e124273d269e24a98bfe7b817300d2f88291 974f6aae2098d383107a458145cf3a2eb5d16fab\n7751496602f6b2e69579bfbb8fdf37ed324594cf b9e9e51bee755efe0e1f1d4ad66e1d0b9f3ed59c\n1f064f02d2091ec309459698f0c574143ea4b1ee 0f2806fadd563fe6dcc89b0e7f469d67bd7caec3\n9d7d786cf8d52dc9478b47ab03919b79182cb04a 3066f3995e68a2fa809ba6fb89b4e9994113fd41\nf1729564a54527cffc70f9e8105da0c2218085cf 3d5594317ee39aedc4c9fc1a5356d3159f192c87\neb44e9111605ce2d2a44ab4f03f7180316aa9402 2f38f52bcd882c2f5367c817f57fd9b3120fb980\n1146f85307b9a10ab79f9e872c657291dc72a8cf d6342b1f47b4dc69da7c784d14f197dd04b8a14f\n90bbf48677a6cda357469a51bcadf270c2e77498 ed82d662751d2a31cec4ccfec4d7c6bdd4e081ca\n69dbc4a4a6877b71f2ab464144aeb6754bd60164 02ab03f6c4e1844ff4f1a9d1f8d6d34c4f8dfd6c\n649ee4d92acac806792810a3329bcb2cd8852a19 191620b6cee4cd42c2a0d2b8a3a6b32cf27c7c37\n82038aefdfce23f773e7c23bb79518cd08267cff 333640cabad2b4df352dea75524df2854f785d56\n8ddcd81be3914e117e631661165079978b93c3f1 c27501e892a1f26258b3d91973fbf16d10c0de70\n3771d56db4aeed41cf242759c06e8110efda59cd c2f49ffadcc2cc0a40e98ebad0f28518a3b16ad2\n2e711e2f9968cc11b0a279b0d7fb19d4ee62d838 336c73aff1be954a21b1c1b5026edba00ac12187\n7907f586b31463c85026b89af5195718a0be38bd e216acbe1a2265d3ad97b12e6b76a1fa213c677e\n8bfeedb55aa99a41c54b6d3acc3e140048855e58 b88960aa366f108cf93c30028c5f2c0f8346f866\n5375075ec49eaf93d164f59ef81bbff8d4b87a92 fb562021af85867dd9dc40022346902b4328b31a\n5d54790f69ec09fb7b4d55484f44128d91634eca 3289e94ad9e6326ea63351c26d0cd90ff9c423ff\n75d571584e2ac5923825f0e950827df19ff097ff cfb50f1f0da2972df4a8ee9446a56e3e1175d70d\n259198e9beb7f24180d4f3d5faae87b8f481f930 e8baaa9a53ffb9aa489d44439bc487b7d84fe583\n0d36b4a619b3b9912162805c5f3b2e424746e21d 9f6bece32830a8b0d08894f44f49defdf4299d17\nfc8b4f69c317dd421a331a4bddbd3dc4db33e573 4fae8a3be667ff1a0bea1eb422b12dc834124416\n341c9646f8fe2bd45a50ec932ba7d91d3bd0e430 564dfeaffc0d80a7acdd11a89ac56f247f791af5\n6a43be330cca772020c549d577cc8edd717a664f 2875dd084d49434a80efe2495617076855712dd0\n34b600001ab0941fd8965e0d10f5afe52e933a75 5603873b7b81d14727a0655dd8faae83439588ca\nf5026a61a322602005630931e65ae97a1b0dc60a 09c22a2ef4058a23483fbebc2ff772719677a74d\ncd2a8d958549670e5f14e224e89bc182b3ad4e48 b5c0decd277135ec66eed19aec2772460e6e6446\nf6bc544c4282c686638f1124a9eb507e91db17ab c6d889c5cea6d1cc5c695dea453f3f5aab025cca\n5bd1f518799b1eff50ec09b292c042692f3d326c ffb7db4e43eeb3d3d2cd5e5888724f59ae23ac1e\n9a3ac240d8ce255ce2d3ec5513af40277a957a6b 821260d8607dbf019d7d0432bec8ba69326978c1\nba16b1618aef39907cba661640b5a5ebfbdf3e18 0db9a69fe2e14d81c586a9c004ea64695dae6360\n27aeb6b7d76b6ae0e6cd395a4015e8909783d554 729ca088e99e3648cd9d837aca30df4930c56b94\ne134cea04d198e34b35ca74c108b696ca0d032d0 64b82a7bccfab5d1340650ceb37c99f2434dd4e3\n8d9b1666254dbec6aacd2761c0ddd08ae31f5748 bec082b8069612b41e6f6cf6a8e514686120b8bb\n00e7ff9b60f58dfa70d932b0a172a24067911113 c1038fc4e0958140e4d749dc396f1057e0189fd6\nb0fcbb40c43119b3ce23c8b38702bdd02c463cf7 4d25c8cf15fa830ddeb9135b44a565be13bd5d73\n9c9048ab8aa2b1d118bda157031294f5564435ff c6425c55175ea3186100f0a35ed42e3ac0e7e46c\n6ec093a702bced237fa705a43cc632433441c403 7c0350c0bd1b2bb3d8e613d38e98fbb3377eb2be\n0f584f7335ecb6b05cff1700d6b69088ec5f0125 605feaf43a15ffc249532244547e536d73b27d4b\naaf27c6191427249c52a58f4f8530e8a20fac551 c42e9252785965ea228e82fdcec821697e896822\n92d19b93eda8dee7c0cbd0a7a4e8b06b891fc4a1 95a1b38a32186a9467a607ae180e55112986eaf3\ndb2a31457bb644e199113bced254ddcfa9cbc526 f23a85c9a39c3b4869fbf33f86718da831870e76\na0c232c80e4b3a2b7dc40a118801507bad060b17 be354e14a640821af88c86ba03fb7fcb106ae292\n8d1053fdcb165952f01b576cce0db1c4195639bf 11603bf350188786ae097b1b0c2b2ba70462061d\ncbd8ed8c53dc42bd180e92879970351b7c6bff22 82f3dc83ac02ec8e006c59eb5ab3448e2995d5c5\nf1be18addc3e9a8bd5a7a7ccd6d8400a0676447c f0929d3270cf10c29ea0b07303f86b7f2e75a292\nb0de34831b86d625aa04d7a02ff74c2fbe38d225 00b6a7e55cac602f70178f5e8c6b091c332fffd1\na47bcbf6fa1e6acb0f2c486ad8bd100a51a6201f 2d8166ff23649fd4eac1338274b3ed73b01cc123\n18b43c83afcb67bb0faa6e36e4a2a36700092435 dd97df4713a394419309430b2c1c64c8d5e12004\n1f6a8439804d93a3b6aa46bd53b330126169b27c 0b25fa24a5c8a3a91e3229a29683c7a489a82279\nf22cfdd8d9d63242f0ee5d095b9aacdea603c587 9d218c27a02f92a34359ab3b246459f223d53ddd\n23aea423572a5dd63a25a6ac088581df083a375c 2fede08379851541f48f44cd873458cc3a37947e\nc2da7f9130bb773822556585f0a30a77c14b005b 3c787ad8ee3eb00bf949195d9d6876918c1ede5b\n631da63c94a3d9ec543322d71486b9b87400c89f a2aa74933820bfbbd3fdae71c425def07d6d8449\ndfd59b4d8692c09405685d841ff394d4fd9aba59 4517ab6af377be779c3196f8f00da20ff943a148\n3e3088fcb6f92a7a926a9f2fd3a482ea2cbcdad1 5fe734afd8e7aa751b546b289804ff6560827da8\n6edec89eafc91a696ea2e8fbae26536665729744 36dfd53121759cbe77cedf0282e384b6a6042adf\n4d516ee89b5771fe502395be57e641b9a9a17fca 28781768818bd41e6d8829dc0e11a03d71d94c35\nf53450174c2d98e5a52f6e3cecb4e480f1f2f361 20ea0c74f8661afb8e8a3c9d6c5555d220d8cbe2\nf0f4511a756730a7a5000aeb4ff9108dfee93275 44ea60610d80c2335ff7d481bf42558b28827c33\n5f47e3215246dffaee114e15fd0c0dbcc8ae1334 1d7f6a611bafac2fdc123470f5f1bb2c1e9b57f2\n6601b02c337b93516855d15f7d1c4b47021f89a4 194ce5e1f2b76a13401919aec436ae020261d7b3\n4fa1d8f7ef0714045cdf7ffc6adf7e047b87c4a2 a6221c96d1389504cf6895751de8d6b9181dd09f\nf7ec7b86afb44d8cf86ea09162a1a1cc890dea5e a74229fe6a77702e8cc4c2becd73cc3e65530aa9\n2604cf9880ab7956d4240ac85b373cf80623e0e5 7427b0202c2bcaf773ad02a11b4d9f82f0e80b01\n58630b72127832962c46a6f2106feb726888cded 1364835ff332cb2952e61c630de186560c56f772\n05156dc40fc169c8e94aaf733fbdb418326e127c f77212ad5b674bd47e4672ee1762f54f6cce6cde\n00f25347419443c8aba221a282a1d64ac1c1d23d 6aa97dd75c0e5e3173d40c08369c68d3fbffb551\n99bdec8c440fef47b343868280902976fe495f8b c681592806028975c53a50e2d6f6ae6a9f1f2113\n0dd2aaed0ac99b4a8ff539d337949e93b5cebf1e 8375cd68de960d93786aba74e984d44e0a50a2a9\n294357e2f7fcb1bc91b35cc23ce1ca09d610bb76 9e29eb0ba4ed14f7ff3d81d619df6425d8fa8a8e\nf98a74afb506dc79bfd2c3edbec5c7d93ce42000 acc11f5aa39f2f2a7e1868063f0b63b0a107f514\n8f1f239f60f2964779d1d9afeee337628ad4217c 128700945922333c72d50d21b9b07511c98c68a1\nff262dc1451e441225e1dd9c0908ff68a6b8ea14 abcc6e04c56c1f519e1067c93a873f81127990b8\n85f0efc1e4ba5463dcc0422ba144f095bb51fc18 820d71d4b48167b38370079ae9a7942d31fb37d4\n55b22df20275d1760d4aa1fda0d0bb0e805e7e21 680c7ff7ec27ea57e466f8041270f2675fdc178d\n59196ae30fe75f1503acb41ef6e5823bcca719a0 6858b2c2b0948435566390ffcc606d4ef08babf9\n62b85a846bb0497efd1083f132f2fc4fd09f49c5 9cd87f2eee2109115627d2360c1ce0f4c36da13e\ne0908bf296e51e04ea2d55e93a358422ad2b265d 7d984be1fd45bcf7a0923beb109e04dbadf2dac0\n1a702eb09e7ecaf0efae4589c1dc5420bfecf133 59da6bde7dd1e94c72400b35fa8c0bb296eb61e7\n48fe1a5c59d7962f69094d835db0037dd36c7e53 cc5e586d66e404ba03dba41729549480280b5f4c\n7ece69a0079694eed6bb2cb16773b5fc03346f6a 62d7de75ce1d4ea25a7ffdffc84c0d5a5422dc79\nc5c133f65655654b86c2a0761c7dec04852a0ba4 f0f144861c49f605c7048bacc150b96f57ef9722\naf1244f54b5ecd95098bfb7352c6ef5148f68fd4 1d9cf234c57b9d2d0aec0ef5c82924276b9d5042\nd297dcfa5097aab1253880f398bfd7484937bcbe b3fd9e7a380630e9b6b18c84065e3722caafc04b\nc833dc0594a8c0dbe25912edf4608d077a83bdf4 933d0efeb55ba815b446002193b7b944832255e9\n97ea6e2e3715129b39f71ad68c71d5016358abaa f982967c5aad101ad44f14d6884f07b955ac767d\n9dde800cb9b605bc4f6b6de441b3ad98faff9a56 7533c3be8c7083206498cd17c4cf011ef1a48bff\n39e392be1e2e28021e8a7012125547e690b42d43 46438bf6b63712acde993508ab5ea0cf0d9e6c9d\n7654d3aad476d33cee627a038e98764af61d15e5 612547ea1f91d5caed5f1305ed5519c8791ebff2\n49aa9ff2f28a1b8071d4c35eadd1b53a541c680a 330ae05991cb729275d49cb7965ea6d186c374cb\nec5a4ab25d53fa840b88d65186bb1f84557f145d ca8a721e704882d43736b1c18c2378e577034a84\n3cefd959e122f1fd55e43012c8d9229f0d68247b d7e308140e9cbf3f26fa758c1b321b66016d8764\nbbb776b7f229c94d4e4d1b82a3b496cfb213edb3 80bb7f1094fa31cea3e9340c5cd03bbc842f448c\nfed3ae41e13496bb00bf5f1c8d7910d4beb877fd f5ae1e0ad945ac739bebd07a651732820a8ae0a6\n41ec42f68c694b9c2794f5d6391c2517378253aa cb7bf9f6fb10989dba45878fe4c754a0984c964a\n863bd8f31018bae990c5ce60f7e06d59902d6c2c 120236a33bc1ddae0ac53d80a835c09ee57c61ba\neb6d5a55f9c51f3f24526057ecfdc5eff48377d7 a76a2e8cca75f67e8c45336f13f3d7ff78e2ba0e\ned2496ea3e04dfd10c9828a4f8f8f4e8cdc70e15 72ee045c711ab2821ea8f6bc7ce948b7d6a6ab42\n1b459b89804858b0c86465f6fef3f59d7ddb6f3e bde5292a0b19a49306fa19fc66661ea56ed6359e\n6648cdbf9a1eddac8919d78c1ff147d20d147e39 a864b85ae2806bff6f20f6aba71cbe52d7486c6e\n4bcd8975ef9d04a5ef09c6f8f2090df8c77ac78a f58655cec309f1920350c1ebd3e425110fc32555\n3dd03732795c955388f172794f068973ee8854a0 99f2cf97b62d8a855493acc10426cd0b6de9bbb9\nf52923a26944bad8a2d4de5b68fbd9c6e1752415 6584200f6325c0d496a65e9c3385b2346a202e23\nb3f95e00e89528568689cf4647e9dc16808935a1 4b00c737a00a9b0103a4b4df530c7de8b4682c9c\n33be3c596f1fcdeb99d954a3612c56be10355794 9bfaa96174f238980b431e2fc00ffe0e16cf1173\n8e2012116faf2f2e340212b6d98f568f6ef2c6cf 6d18bb81efc2c17fb2d80b62cd380706baa657c4\n9a9f531233e53ed506aeb3348f73def524b2c7ce 8875326473b476f3b257472da0216a64effa7067\n54e1d618eb074614f6f7f3d0010e591502862304 9e261ced2faf70614c3e6c67d8251dca194ad2b7\nf27c9db23fcaf91e728e04d986882ff1e16e2801 00ad04ba838d0084862414fc2f5a3225909cecfc\n7e970a43fe8af540835f4911fdc3910168a3fb72 eb48ea033f95ab4d5a77ef349fbb011877146767\n2afa35c5ef1c5cc1e8fb56133c1dd4ad645109c0 59ce9219ab135fc8c96aaf0f44ab039463d450a1\n"
  },
  {
    "path": "doc/howto/allauth-and-oidc.rst",
    "content": "==============================================================\nAuthenticating with OIDC/OAuth2 by using a local settings file\n==============================================================\n\n.. info::\n   If the config described in the reference documentation :doc:`External web\n   authentication (OAuth2, OIDC) <../reference/social-account>`_ is\n   insufficient for your needs, you can *instead* use a local settings file.\n   Don't use both, and make an issue about your issue so that we can improve\n   the proper config file.\n\nIt is possible to use a local settings-file to unlock every option available in\n`django-allauth <https://docs.allauth.org/en/latest/>`_'s arsenal but we will\nonly show how to support bundled and OIDC providers here. Have a look at\n:doc:`../hacking/extending-nav-locally` for where to put the local settings\nfile.\n\nThe file MUST start with:\n\n.. code-block:: python\n   :caption: ${configdir}/python/local_settings.py\n\n   LOCAL_SETTINGS = True\n   from nav.django.settings import *\n\nA complete list of relevant allauth settings are at `django-allauth's third\nparty account configuration\n<https://docs.allauth.org/en/latest/socialaccount/configuration.html>`_\ndocumentation.\n\nThe most important setting is ``SOCIALACCOUNT_PROVIDERS``. It is is generally of the form:\n\n.. code-block:: python\n\n   SOCIALACCOUNT_PROVIDERS = {\n       'provider-specific-id': {\n           \"APPS\": [\n                {\n                     \"client_id\": \"123\",  # ask provider for this\n                     \"secret\": \"hjkkj\",  # ask provider for this\n                     \"key\": \"ghffgh\",  # ask provider for this, often optional\n                     \"settings\": {\n                        # depends\n                     },\n                },\n           ],\n           # SCOPE is optional\n           'SCOPE': [\n                'provider',\n                'specific',\n                'strings'\n           ],\n       }\n   }\n\n.. warning::\n   Groups and roles fetched via OIDC/OAuth2 is currently not supported in\n   NAV, as there is as of yet no standardized way to do so.\n\n.. note::\n   NAV does not currently support sign up on first login, aka auto signup.\n   Create a local user first, then let that logged in user activate a login\n   provider via \"HOME /ACCOUNT / ACCOUNT CONNECTIONS\".\n\nUsing a provider bundled with django-allauth\n============================================\n\nIn addition to setting ``SOCIALACCOUNT_PROVIDERS`` you'll need to add an app,\nper provider. An app might depend on a database table that is not installed in\nNAV so you need to check and if necessary add the tables yourself. As of\ndjango-allauth version 65.15, the only provider that adds additional tables is\n``openid``, app ``allauth.socialaccount.providers.openid``.\n\nFind a complete list of provider settings that come bundled with\nallauth at `django-allauth's provider list\n<https://docs.allauth.org/en/latest/socialaccount/providers/index.html>`_\n\nExample: Logging in with the bundled GitHub provider\n----------------------------------------------------\n\nAnyone can get an account at GitHub so we're using that as the most basic example.\n\nSee `Authorizing OAuth apps\n<https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps>`_\nfor details.\n\nThe app for this does not need any additional tables so the below configuration\nis all you need.\n\n.. code-block:: python\n\n   INSTALLED_APPS += tuple([\"allauth.socialaccount.providers.github\"])\n\n   SOCIALACCOUNT_PROVIDERS = {\n       \"github\": {\n           \"APP\": {\n               \"client_id\": \"your.service.id\",\n               \"secret\": \"your.service.secret\",\n           },\n       }\n   }\n\nYou need to create an OAuth app at `GitHub: New OAuth Application\n<https://github.com/settings/applications/new>`_.\n\nThe client id and regenerating the secret will be available on `GitHub:\nAuthorized Oauth Apps <https://github.com/settings/applications>`_ and `GitHub:\nDeveloper applications <https://github.com/settings/developers>`_ after\ncreation.\n\nYou need to add the redirect url, it will look something like\n``https://YOURDOMAIN/accounts/github/login/callback/``.\n\nGitHub does *not* support having multiple redirect urls on file simultaneously.\n\nExample: Logging in with the bundled Feide OIDC (aka. dataporten) provider\n--------------------------------------------------------------------------\n\nYour organization needs to be paying for `Feide <https://www.feide.no/>`_.\n\nThe app for this does not need any additional tables so the below configuration\nis all you need.\n\n.. code-block:: python\n\n   INSTALLED_APPS += tuple([\"allauth.socialaccount.providers.dataporten\"])\n\n   SOCIALACCOUNT_PROVIDERS = {\n       \"dataporten\": {\n           \"APP\": {\n               \"client_id\": \"your.service.id\",\n               \"secret\": \"your.service.secret\",\n           },\n       }\n   }\n\nYou get the client id and secret from `Feide Kundeportal\n<https://kunde.feide.no>`_, and you need to add the redirect url there. The\nredirect url will look something like\n``https://YOURDOMAIN/accounts/dataporten/login/callback/``.\n\n.. tip::\n   If you attempt to log in without the url set you will get an error-page that\n   shows exactly what url you need to use.\n\nDataporten supports having multiple redirect urls on file simultaneously.\n\nUsing generic OIDC\n==================\n\nThis may take *a lot more* configuration so check if there is a bundled\nprovider first.\n\nOverview of settings:\n\n.. code-block:: python\n\n   SOCIALACCOUNT_PROVIDERS = {\n       \"openid_connect\": {\n           # Optional PKCE defaults to False, but may be required by your provider\n           # Can be set globally, or per app (settings).\n           # \"OAUTH_PKCE_ENABLED\": True,\n           \"APPS\": [\n               {\n                   \"provider_id\": \"some_urlsafe_unique_string\",\n                   \"name\": \"Some Login System\",  # Shown in the frontend\n                   \"client_id\": \"your.service.id\",  # Get from your Feide admin\n                   \"secret\": \"your.service.secret\",  # Get from your Feide admin\n                   \"settings\": {\n                       # Optional PKCE defaults False, but may be required by\n                       # your provider\n                       # \"oauth_pkce_enabled\": False,\n                       \"server_url\": \"https://my.server.example.com\",\n                       # When enabled, an additional call to the userinfo\n                       # endpoint takes place. The data returned is stored in\n                       # `SocialAccount.extra_data`. When disabled, the (decoded) ID\n                       # token payload is used instead.\n                       # \"fetch_userinfo\": True,\n                       # Optional token endpoint authentication method.\n                       # May be one of \"client_secret_basic\", \"client_secret_post\"\n                       # If omitted, a method from the the server's\n                       # token auth methods list is used\n                       # \"token_auth_method\": \"client_secret_basic\",\n                       # \"scope\": [],\n                       # The field to be used as the account ID. Might depend on scope\n                       \"uid_field\": \"sub\",\n                   },\n               },\n           ]\n       }\n   }\n\nNote that the ``provider_id`` will be used verbatim in the redirect url and\nthat it must not conflict with any other ``provider_id`` or ``provider`` in\nuse.\n\nSee `django-allauth: OpenID Connect\n<https://docs.allauth.org/en/latest/socialaccount/providers/openid_connect.html>`_\nfor more details.\n\n.. note::\n   Providers that come both bundled and have an OIDC endpoint are not\n   equivalent, the former might have provider specific code.\n\n\nExample: Logging in with Feide OIDC (dataporten) without using a provider app\n-----------------------------------------------------------------------------\n\nUsing Feide OIDC (aka. dataporten) as an example\n\n.. code-block:: python\n\n   INSTALLED_APPS += (\"allauth.socialaccount.providers.openid_connect\",)\n\n   SOCIALACCOUNT_PROVIDERS = {\n       \"openid_connect\": {\n           \"APPS\": [\n               {\n                   \"provider_id\": \"dataporten-oidc\",\n                   \"name\": \"Feide OIDC\",  # Shown in the frontend\n                   \"client_id\": \"your.service.id\",  # Get from your Feide admin\n                   \"secret\": \"your.service.secret\",  # Get from your Feide admin\n                   \"settings\": {\n                       # \"oauth_pkce_enabled\": True,\n                       \"server_url\": \"https://auth.dataporten.no/\",\n                       \"uid_field\": \"https://n.feide.no/claims/eduPersonPrincipalName\",\n                       \"scope\":[\n                           \"userid-feide\",\n                       ],\n                   },\n               },\n           ]\n       }\n   }\n\nJust like when using a provider app you get the client id and secret from\n`Feide Kundeportal <https://kunde.feide.no>`_, and you need to add the redirect\nurl there. The redirect url will look something like\n``https://YOURDOMAIN/accounts/oidc/dataporten-oidc/login/callback/``.\n\n.. tip::\n   If you attempt to log in without the url set you will get an error-page that\n   shows exactly what url you need to use.\n\n.. note::\n   If you choose \"Client type\": \"Public\" you must set ``oauth_pkce_enabled`` to\n   True.\n\nDataporten supports having multiple redirect urls on file simultaneously.\n"
  },
  {
    "path": "doc/howto/api_parameters.rst",
    "content": "==================\nNAV API Parameters\n==================\n\nHere you will find documentation about each endpoint in NAVs API.\n\n\nSearches\n========\n\nOn some endpoints you can do searches. This is done by using the search\nparameter::\n\n  api/netbox?search=some-sw\n\nThe list of fields used in the search are defined for each endpoint. Searches\nare case-insensitive and do partial matches.\n\n\nFilters\n=======\n\nAlmost all endpoints supports filtering. This is done by specifying a value for\nthe field you want to filter on::\n\n  api/netbox?room=a-room\n  api/netbox?category=GSW\n\n\nDetailed endpoint specifications\n================================\n\n\napi/alert/\n----------\n\nProvides access to NAVs alert status. This is the same as viewing NAV status\n\n:Search: None\n\n:Filters: event_type, not_event_type, organization, not_organization,\n           category, not_category, alert_type, not_alert_type,\n           device_group, not_device_group\n\n:Additional parameters:\n  - ``acknowledged=on`` -  also list acknowledged alerts\n  - ``on_maintenance=on`` - also list alerts regarding subjects on maintenance\n  - ``stateless=on`` - also list stateless alerts (from the last 24 hours)\n  - ``stateless_threshold=<hours>`` - adjust stateless interval\n\n\n\napi/arp/[<id>]\n--------------\n\nProvides access to NAVs ARP data\n\n:Search: None\n\n:Filters: ip, mac, netbox, prefix\n\n:Additional parameters:\n  - active=on - list only entries that are active now (end_time = infinity)\n\n\napi/cam/[<id>]\n--------------\n\nProvides access to NAVs CAM data\n\n:Search: None\n\n:Filters: mac, netbox, ifindex, port\n\n:Additional parameters:\n  - active=on - list only entries that are active now (end_time = infinity)\n\n\napi/interface/[<id>]\n--------------------\n\nProvides access to NAVs interface data\n\n:Search: ifalias, ifdescr, ifname\n\n:Filters: ifname, ifindex, ifoperstatus, netbox, trunk, ifadminstatus, iftype,\n          baseport\n\napi/maintenance/\n----------------\nCreate a maintenance task with the given components.\n\nSupports GET, POST and DELETE requests:\n\nGET: Returns maintenance tasks.\n\n:Search: description\n\n:Filters: id, description, author, state (scheduled, active, passed, canceled),\n          current, past, future, endless\n\nPOST: Returns the created maintenance task or an error. Requires a dict of the form::\n\n  {\n    \"start_time\": \"2025-09-29T11:11:11\",\n    \"end_time\": \"2025-09-29T13:11:11\",\n    \"description\": \"Changing out old equipment in serverroom\",\n    \"author\": \"exampleuser\",\n    \"components\": {\n      \"location\": [\"mylocation\", \"secondlocation\"],\n      \"room\": [\"myroom\", \"secondroom\"],\n      \"netbox\": [1, 2],\n      \"service\": [1, 2],\n      \"netboxgroup\": [\"AD\", \"BACKUP\"]\n    }\n  }\n\nRemove the ``end_time`` entry if the maintenance task does not have a determined end\ntime yet.\n\nThe required fields are ``start_time``, ``description``, ``author`` and ``components``\nwith at least one component of the type ``location``, ``room``, ``netbox``, ``service``\nor ``netboxgroup``.\n\nDELETE: Delete maintenance task with given id.\n\napi/netbox/[<id>]\n-----------------\n\nProvides access to NAVs netbox data\n\n:Search: sysname\n\n:Filters: ip, sysname, room, room_alias, room_location_alias, organization, category\n\n\napi/netboxentity/[<id>]\n---------------\n\nProvides access to NAV's collected physical entities information\n(I.e. physical contents of IP Devices, in most cases collected from `ENTITY-MIB::entPhysicalTable`)\n\n:Search: None\n\n:Filters: netbox, physical_class\n\n\napi/room/[<id>]\n---------------\n\nProvides access to NAVs room data\n\n:Search: description, aliases\n\n:Filters: id, location, description, alias\n\n\n\napi/prefix/[<id>]\n-----------------\n\nProvides access to NAVs prefix data\n\n:Search: None\n\n:Filters: vlan, net_address, vlan__vlan, contains_address\n\n    .. NOTE:: The vlan__vlan is used to filter on vlan number as the vlan field\n              references the primary key only.\n              e.g. :code:`prefix?vlan__vlan=<vlan-number>`\n\n\napi/prefix/routed\n-----------------\n\nList all prefixes that are routed\n\n:Search: None\n\n:Filters: None\n\n:Additional parameters:\n  - ``family=<4|6>`` - List only prefixes within the specified family\n\n\napi/prefix/usage/[<prefix>]\n---------------------------\n\nList usage statistics for prefixes. This fetches the number of active\nIP-addresses for each prefix and compares it to the number of possible addresses\non each prefix. If no time interval is specified, fetches the current status\n\n:Search: None\n\n:Filters: None\n\n:Additional parameters:\n  - ``start_time=<iso8601>`` - set start time\n  - ``end_time=<iso8601>`` - set end time\n\n\napi/unrecognized-neighbors/[<id>]\n---------------------------------\n\nProvide access to NAVs unrecognized neighbor data.\n\n:Search: remote_name\n\n:Filters: netbox, source\n\n\napi/vendor/\n-----------\nReturns the vendor(s) for a given MAC address or list of MAC addresses.\nThis is done by comparing the MAC addresses with a registry of known OUIs.\n\nSupports GET and POST requests:\n\nGET: Returns the vendor for the given MAC address. Requires the MAC address\n      as a query parameter ``mac=<str>``.\nPOST: Returns the vendors for given MAC addresses. Requires the MAC addresses\n       as a JSON array.\n\nIn either case the MAC addresses must be in a valid format.\nResponds with a JSON dict mapping the MAC addresses to the corresponding vendors.\nThe MAC addresses will have the format `aa:bb:cc:dd:ee:ff`. If the vendor for a\ngiven MAC address is not found, it will be omitted from the response.\nIf no mac address was supplied, an empty dict will be returned.\n"
  },
  {
    "path": "doc/howto/commandline-utilities.rst",
    "content": "======================================\nCommand line utilities provided in NAV\n======================================\n\n.. highlight:: sh\n\nIn addition to various daemon and cron job programs, NAV provides some useful\ncommand line utilities to control NAV or work with NAV data.\n\n\n--------------\n:command:`nav`\n--------------\n\n:command:`nav` is the most central program to control NAV's background\nprocesses and cron jobs, regardless of whether you are running under SysV init\nsystem, systemd or other process control systems.\n\nIf NAV doesn't appear to be doing anything, the first order of business is\nchecking the state of its background processes with the command\n:code:`nav status`\n\n\nUsage\n~~~~~\n.. program-output:: nav --help\n\n\n\n--------------------------\n:command:`navcheckservice`\n--------------------------\n\nThis utility can be used to test :program:`servicemon` checker plugins against\narbitrary hosts (i.e. not necessarily registered in NAV).\n\nUsage\n~~~~~\n.. program-output:: navcheckservice --help\n\nAvailable handler plugins\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThese handler plugins are currently available from :program:`servicemon`:\n\n.. program-output:: python3 -c 'from nav.statemon import checkermap; checkermap.parsedir(); print(\"\\n\".join(sorted(checkermap.checkers.keys())))'\n\n\n----------------\n:command:`navdf`\n----------------\n\nThis command is useful to generate lists of devices registered in NAV. Used\nwithout arguments, it will print out the sysname of every NAV-registered\ndevice.\n\nIt is mostly a programmers interface to filtering the device list: It takes an\nargument that must be valid Python code and a valid Django QuerySet filtering\nfunction, and therefore requires a bit of knowledge about how the NAV database\nis modeled in the Django ORM.\n\nPlease refer to the `Django QuerySet documentation\n<https://docs.djangoproject.com/en/4.2/ref/models/querysets/>`_ for more\ninformation about how to build filters.\n\n\nUsage\n~~~~~\n.. program-output:: navdf --help\n\nRecipes\n~~~~~~~\n\nList only GSW and GW category devices::\n\n  navdf \"filter(category__id__in=(('GW', 'GSW')))\"\n\nList only Juniper devices::\n\n  navdf \"filter(type__vendor__id='juniper')\"\n\nList only Cisco switches::\n\n  navdf \"filter(type__vendor__id='cisco', category_id__in=(('SW', 'EDGE')))\"\n\nList only switches in the room *101*::\n\n  navdf \"filter(room__id='101', category_id__in=(('SW', 'EDGE')))\"\n\n\n------------------\n:command:`navdump`\n------------------\n\nThis command can dump SeedDB data into CSV text files, which can later be\nre-imported in another NAV instance's SeedDB bulk import feature.\n\nTypical usage patterns are described in the :doc:`data migration howto\n<migrate-data>`.\n\nUsage\n~~~~~\n.. program-output:: navdump --help\n\n\n--------------------\n:command:`naventity`\n--------------------\n\nThis SNMP-specific utility can query the contents of a NAV-registered device's\n``ENTITY-MIB::entPhysicalTable`` and output the entity hierarchy to the\nterminal. This is a useful way of discovering what a device is actually\nreporting about its physical contents to NAV, or if it even supports this\nstandard mechanism.\n\nThe ``ENTITY-MIB`` is defined by the `IETF RFC 6933\n<https://datatracker.ietf.org/doc/rfc6933/>`_, and is the primary way NAV\nlearns about the pysical innards of a network device.\n\n\nUsage\n~~~~~\n.. program-output:: naventity --help\n\n-----------------------\n:command:`navoidverify`\n-----------------------\n\nThis command is useful for simple SNMP MIB conformance testing of\nNAV-registered devices *in bulk*.\n\nIt takes an SNMP OID as its only argument, and a list of NAV-registered device\nname in its standard input: It then runs SNMP ``GET-NEXT`` commands for the\ngiven OID against all the listed devices (using the SNMP credentials stored in\nNAV), testing to see whether the device response is from within a subtree of\nthe requested OID. Any device that responds with a value from the subtree will\nhave its name printed back to the standard output.\n\nUsage\n~~~~~\n.. program-output:: navoidverify --help\n\nRecipes\n~~~~~~~\n\nLet's say you are interested in figuring which of your devices support the\n``CISCO-VLAN-MEMBERSHIP-MIB::vmMembershipSummaryTable`` object. First, you need\nthe full OID of this object, and then you can test it against all your devices\nthus (by also utiliziing the :command:`navdf` command mentioned above):\n\n.. code-block:: console\n\n  $ snmptranslate -On CISCO-VLAN-MEMBERSHIP-MIB::vmMembershipSummaryTable\n  .1.3.6.1.4.1.9.9.68.1.2.1\n  $ navdf | navoidverify .1.3.6.1.4.1.9.9.68.1.2.1\n  example-cisco-sw1.example.org\n  example-cisco-sw2.example.org\n  ...\n\n\n\n--------------------\n:command:`navpgdump`\n--------------------\n\nThis command can aid in dumping all or parts of the NAV PostgreSQL database\ninto a text format (raw SQL commands) suitable for restoring on a different\nPostgreSQL server or NAV instance.\n\nIf a full dump/restore cycle is needed, you may be better off using the command\nline tools provided by your PostgreSQL distribution itself, but if you want to\napply NAV-specific filtering to the data, this command is useful.\n\nIn particular, this command is used by NAV developers to do partial dumps of\nproduction data and load these into a development installation for\ntesting/debugging and development of new features.\n\nTypical usage patterns are described in the :doc:`data migration howto\n<migrate-data>`.\n\nUsage\n~~~~~\n.. program-output:: navpgdump --help\n\n------------------\n:command:`navsnmp`\n------------------\n\nThis little utility is useful when you want to use NET-SNMP command line\nutilities to talk to your NAV-registered network devices.\n\nSupply a NAV-registered device's name as its argument, and it will output the\ndevice's SNMP credentials (as stored in NAV, if any) as valid NET-SNMP command\nline options. In this way, you don't need to remember which SNMP version,\ncommunity or IP address a device has - you only need to remember the first part\nof its name.\n\nUsage\n~~~~~\n.. program-output:: navsnmp --help\n\n\nRecipes\n~~~~~~~\n\nTo walk the ``ENTITY-MIB::entPhysicalTable`` table of\n``example-sw.example.org``::\n\n  snmpwalk $(navsnmp example-sw) ENTITY-MIB::entPhysicalTable\n\n\n--------------------\n:command:`navsyncdb`\n--------------------\n\nThis is the central command line utility to create the NAV database schema in\nPostgreSQL and keep the schema in sync when upgrading to newer NAV versions.\n\nRun with the correct privileges, it can both create the database user and the\ndatabase before initializing the schema, or even drop an exsting NAV database\ncompletely if you want to start from scratch.\n\nIts usage is described in most of the available installation guides. When\ninstalling NAV from Debian packages, you rarely need to interact with this\ncommand, though.\n\nUsage\n~~~~~\n.. program-output:: navsyncdb --help\n\n-----------------------\n:command:`navsynctypes`\n-----------------------\n\nIf you manage multiple NAV instances, this useful utility can assist you in\nmaking sure your device type registry is kept in sync between instances. It may\nbe tedious to use SeedDB to manually assign proper names and descriptions for\nall the device types auto-created by ipdevpoll during the course of its run,\nbut if you manage multiple NAV instances, you don't want to have to repeat\nthese manual steps.\n\nWhen run on NAV instance **A**, his command line utility outputs to its\nstandard output a set of SQL commands that can be run on NAV instance **B**'s\nPostgreSQL server to ensure that NAV instance **B** has at least all the same\ndevice types as instance **A**, with the same descriptions etc.\n\n\nUsage\n~~~~~\n.. program-output:: navsynctypes --help\n\n.. _navuser-usage:\n------------------\n:command:`navuser`\n------------------\n\nThis commands interacts with the NAV web interface's user registry, enabling\nyou to use the command line to add new user accounts, set account passwords,\nlock/unlock accounts or give admin privileges to select accounts.\n\nUsage\n~~~~~\n.. program-output:: navuser --help\n"
  },
  {
    "path": "doc/howto/debugging-topology.rst",
    "content": "##########################################\n Troubleshooting topology problems in NAV\n##########################################\n\nAfter completing this how-to, you should be able to track down the causes of\nphysical topology detection problems in NAV, either solving them or collecting\nthe necessary information to report a problem to the developers.\n\n.. WARNING:: This how-to isn't an exhaustive guide, but covers some of the\n             most commonly experienced issues.\n\n********\nOverview\n********\n\nNAV provides several layers of topology information:\n\n* The physical topology of your network (often referred to as layer 2 topology\n  in NAV, since the topology information comes from what is visible from an\n  OSI layer 2 standpoint - see Ethernet, or *IEEE 802.1D*).\n\n* The VLAN topology of your network. These are the virtual sub-topologies of\n  your physical network topology, as implemented through *IEEE 802.1Q*.\n\n* Your IP (or layer 3) topology. This is simply derived from the IP addresses\n  and subnet prefixes configured on the interfaces of your routers and\n  switches.\n\n*****************\nPhysical topology\n*****************\n\nTwo connected devices aren't seen as connected by NAV\n=====================================================\n\nThe most common issue reported to the NAV developers is that two devices that\nshould be connected in the *Netmap* are not.\n\n.. NOTE:: Do not blame Netmap. Not without investigating further.\n\nIn such a case, you must first ascertain whether the problem is in Netmap\nitself, or in the NAV database. It is only a problem with Netmap if what it\ndraws is not consistent with NAV data.\n\n1. Search for one of the two devices in the NAVbar and click on it to open its\n   information page.\n2. Click on the :guilabel:`Ports` tab to see the port listing for this device.\n3. In the two rightmost columns of this report, the detected neighbor and it's\n   connected port (if detected) is listed.\n4. You can click the :guilabel:`To Device` column twice to sort the ports beginning\n   with the ones that NAV has detected a neighboring device on.\n\nYou should see something that looks like this:\n\n.. image:: swport-connected-to.png\n\nAs you can see, this device is connected to `palin-sw`, `idle-gsw`,\n`gilliam-sw`, `cleese-sw` and `chapman-sw`. If there are devices you expect to be\nlisted as neighbors here that are not, your problem is **not** with *Netmap*.\n\nLooking for the missing link\n----------------------------\n\nFirst, make sure the missing device is actually being monitored by your NAV\ninstallation. Did you remember to add it using `SeedDB`? If not, add it, and\ngive the topology detector up to an hour to analyze the new information (or\nyou can run it manually, but more on that later). If your device is monitored\nby NAV, please continue reading.\n\nBefore asking questions, you should now dig up at least some debugging\ninformation to provide with your questions. You must get the list of neighbor\ncandidates that NAV considered for the involved ports.\n\nLet's say that you know for a fact that ``parrot-sw``'s port *26* is connected\nto ``cleese-sw``'s port *Gi2/1*. Do the following:\n\n1. Browse ``parrot-sw`` in ipdevinfo, click on the :guilabel:`Ports` tab, then\n   click on port :guilabel:`26` to see the details of it.\n2. Under the :guilabel:`Connection` table, in the row titled :guilabel:`To IP\n   device` there should be a small, clickable icon to browse the *Neighbor\n   candidates* report for port 26. Click on it:\n\n   .. image:: link-to-neighbor-candidates.png\n\n   You might then see something like this:\n\n   .. image:: neighbor-candidates.png\n\n3. Do the same for the *Gi2/1* interface on ``cleese-sw``.\n4. Attach the results of the two report listings when posting a question to a\n   developer.\n\n\nHow NAV builds physical topology information\n============================================\n\nThe collection stage\n--------------------\n\nNAV uses several sources of information to detect your physical topology, all\ncollected from SNMP queries against your monitored devices:\n\n1. The ARP and ND caches of your routers.\n2. The forwarding tables of your switches (CAM tables).\n3. LLDP (Link Layer Discovery Protocol, *IEEE 802.1AB*)\n4. CDP (Cisco Discovery Protocol)\n\nThe first of these is collected by the `ipdevpoll` `ip2mac` job in half-hour\nintervals, whereas the last three are all collected by the `ipdevpoll` `topo`\njob in 15-minute intervals.\n\nThese pieces of information are used to build lists of direct (or next-hop)\nneighbor candidates for each of the ports in your monitored network.\n\nWhereas protocols like CDP and LLDP, if supported and enabled, can usually\nprovide a pretty precise indication of what a port's next-hop neighbor is, NAV\ncan usually also detect topology without them.\n\n.. NOTE:: Also, proprietary protocols, such as CDP, can also be imprecise in\n          heterogeneous networking environments, as CDP packets will be\n          invisible to any man-in-the-middle switch that doesn't support the\n          protocol.\n\nNAV knows the management IP address of all your monitored devices, and uses\nARP/ND data as a means of discovering the Ethernet MAC addresses associated\nwith these (Ethernet addresses of individual ports are also collected on\nSNMP-enabled devices). Coupled with forwarding tables from your switches, NAV\ncan generate a list of next-hop neighbor candidates for each switch port.\n\nWhen these collection jobs have run, each uplink/downlink port in your network\nshould have a list of possible next-hop neighbors and which protocol provided\neach of them.\n\nThe analysis stage\n------------------\n\nThe `navtopology` program runs as a cron job once every hour, analyzing the\nneighbor candidate lists collected by `ipdevpoll`. It prefers LLDP information\nover CDP and CAM information, but will otherwise use a very generic algorithm\nfor discerning which of the candidates are true next-hop neighbors.\n\nIn a case where you have made changes to which devices are monitored by NAV,\nyou can run the command manually, once `ipdevpoll` has finished it's `topo`\njob for any new devices. The command :code:`navtopology --l2` will run a\nphysical topology analysis, and should be pretty quick.\n"
  },
  {
    "path": "doc/howto/email.rst",
    "content": "-------------------\nRobustifying e-mail\n-------------------\n\nMost e-mail sent is spam, and making sure e-mail reaches its intended\nrecipients keeps getting harder.\n\nSingle server installations\n---------------------------\n\nWhen running only a single NAV-instance, sending ``cron`` e-mail and alerts and perhaps receiving on ``mailin@HOSTNAME``, the instance needs to be treated like any other e-mail sending server. Set up SPF and preferrably also DKIM.\n\nMulti server installations\n--------------------------\n\nIf there are multiple instances of NAV working in tandem we recommend sending the e-mail out via a smarthost and standardising on a single domain, for instance ``nav.YOURDOMAIN`` and setting up SPF/DKIM for that domain.\n\nFor ``cron``, change the localpart (the bit before the ``@``) to contain enough of the hostname so that you can see what instance sent the e-mail, for instance:\n``root=nav-3rdstreet@nav.example.com``. This is best done by running an e-mail server on the instance to do the rweriting, before sending the e-mail on to the\nsmarthost.\n\nFor alerts, this should not be necessary as long as the template mentions which host sent the alert. Just send from a single e-mail address.\n\nFor ``mailin``, if you have an e-mail server listening on ``nav.YOURDOMAIN`` you can set up an e-mail router with aliases back to the ``mailin``-address on the actual instance if the address you register with the senders are unique per instance (e.g. in an ``aliases``-file)::\n\n   mailin=nav-3rdstreet:    mailin@nav-3rdstreet.nav.example.com\n\nIf you do not switch to a single domain for all the instances you will have to set up SPF/DKIM per hostname.\n"
  },
  {
    "path": "doc/howto/generic-install-from-source.rst",
    "content": "=================================\n Installing NAV from source code\n=================================\n\nThis is a generic guide to installing NAV from source code on a \\*NIX flavored\noperating system. The specifics of how to install NAV's dependencies, such as\n:xref:`PostgreSQL` or :xref:`Graphite` will be entirely up to you and your choice of OS.\nNote that building NAV from source will also require Node.js and npm to be installed\nin order to manage frontend assets.\n\n\nDependencies\n============\n\nThis section specifies what software packages are needed to build and run NAV.\nBe aware that many of these packages have dependencies of their own.\n\nBuild requirements\n------------------\n\nTo build NAV, you need at least the following:\n\n * Python >= 3.9.0\n * Sphinx >= 1.0 (for building this documentation)\n\nAdditionally to build frontend assets (like CSS and JS), you will need:\n\n * Node.js >= 14.0\n * npm >= 6.0\n\nRuntime requirements\n--------------------\n\nTo run NAV, these software packages are required:\n\n * Apache2 + mod_wsgi (or, really, any web server that supports the WSGI interface)\n * PostgreSQL >= 13 (With the ``hstore`` extension available)\n * :xref:`Graphite`\n * Python >= 3.9.0\n * nbtscan = 1.5.1\n * dhcping (only needed if using DHCP service monitor)\n\nPostgreSQL and Graphite are services that do not necessarily need to run on\nthe same server as NAV.\n\nWhile the required Python modules can be installed from your OS package\nmanager, most distributions do not provide all of them, or cannot provide them\nin the required versions.  We recommend creating a Python virtual environment\n(virtualenv), which will ensure NAV's Python requirements do not interfere with\nyour system Python libraries. Use pip_ to install all Python requirements\nfrom the Python Package Index (PyPI_), using the method described below. The\npackages can also be installed from PyPI_ in a separate step, using the pip_\ntool and the provided requirements and constraints files::\n\n  pip install -r requirements.txt -c constraints.txt\n\n*However*, some of the required modules are C extensions that will require the\npresence of some C libraries to be correctly built (unless PyPI provides binary\nwheels for your platform). These include the ``psycopg2`` driver and the\n``python-ldap`` and ``Pillow`` modules.\n\nThe current Python requirements are as follows:\n\n.. literalinclude:: ../../requirements/django42.txt\n   :language: text\n\n.. literalinclude:: ../../requirements/base.txt\n   :language: text\n\n.. _pip: https://pip.pypa.io/en/stable/\n.. _PyPi: https://pypi.org/\n\nRecommended add-ons\n-------------------\n\nIf you want to connect a mobile phone to your NAV server and enable SMS alerts\nin alert profiles, you will need to install :program:`Gammu` and the Python\n:mod:`gammu` module.  The SMS daemon can use plugins to dispatch text\nmessages through other means, but using Gammu as an SMS dispatcher is the\ndefault.\n\n\nInstalling NAV\n==============\n\nFirst you need to build the static assets. To do this, you will need to have\nNode.js and npm installed. Once you have these installed, you can run\nthe following command to build the CSS assets::\n\n  npm install\n  npm run build:sass\n\nThis will build the CSS assets and place them in the :file:`python/nav/web/static/css`\ndirectory.\n\nWe recommend installing NAV into a Python virtual environment, to avoid\ninterfering with your system-wide Python libraries.  Pick a suitable path for\nthe virtual environment (e.g. :file:`/opt/nav`), create it and activate it in\nyour shell before installing NAV::\n\n  python3 -m venv /opt/nav\n  source /opt/nav/bin/activate\n\nTo build and install NAV and all its Python dependencies in the activated\nvirtual environment, run::\n\n  pip install -r requirements.txt -c constraints.txt .\n\nIf you want to make sure you can run all NAV programs without first explicitly\nactivating the virtual environment in a shell, you can add the virtual\nenvironment's :file:`bin` directory to your system's :envvar:`PATH` variable,\ne.g.::\n\n  export PATH=$PATH:/opt/nav/bin\n\n\n.. _initializing-the-configuration-files:\n\nInitializing the configuration\n------------------------------\n\nNAV will look for its configuration files in various locations on your file\nsystem. These locations can be listed by running::\n\n  nav config path\n\n.. tip::\n\n   You can override the default configuration search path by setting the\n   :envvar:`NAV_CONFIG_DIR` environment variable to point to a directory\n   containing your NAV configuration files. When set, this directory will be\n   searched with highest priority, before any of the default locations.\n\nTo install a set of pristine NAV configuration files into one of these locations,\ne.g. in :file:`/etc/nav`, run::\n\n  nav config install /etc/nav\n\nTo verify that NAV can find its main configuration file, run::\n\n  nav config where\n\n\nInitializing the database\n-------------------------\n\nBefore NAV can run, the database schema must be installed in your PostgreSQL\nserver.  NAV can create a database user and a database schema for you.\n\nChoose a password for your NAV database user and set this in the ``userpw_nav``\nin the :file:`db.conf` config file. As the ``postgres`` superuser, run the following\ncommand::\n\n  navsyncdb -c\n\nThis will attempt to create a new database user, a new database and initialize\nit with NAV's schema.\n\n\nConfiguring the web interface\n-----------------------------\n\nNAV's web interface is implemented using the Django framework, and can be\nserved in any web server environment supported by Django (chiefly, any\nenvironment that supports *WSGI*). This guide is primarily concerned with\nApache 2.\n\nAn example configuration file for Apache2 is provided the configuration\ndirectory, :file:`apache/apache.conf.example`. This configuration uses\n``mod_wsgi`` to serve the NAV web application, and can be modified to suit your\ninstallation paths. Once complete, it can be included in your virtualhost\nconfig, which needn't contain much more than this:\n\n.. code-block:: apacheconf\n\n  ServerName nav.example.org\n  ServerAdmin webmaster@example.org\n\n  Include /path/to/your/nav/apache.conf\n\n.. important:: You should always protect your NAV web site using SSL!\n\nInstalling static resources\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou want your web server to be able to serve all of NAV's static resources. You\ncan install all of them by issuing the following command:\n\n.. code-block:: console\n\n  # django-admin collectstatic --settings=nav.django.settings\n  You have requested to collect static files at the destination\n  location as specified in your settings:\n\n      /usr/share/nav/www/static\n\n  This will overwrite existing files!\n  Are you sure you want to do this?\n\n  Type 'yes' to continue, or 'no' to cancel:\n\nIn this example, type :code:`yes`, hit :kbd:`Enter`, and ensure your web server's\ndocument root points to :file:`/usr/share/nav/www`, because that is where the\n:file:`static` directory is located. If that doesn't suit you, you will at\nleast need an Alias to point the ``/static`` URL to the :file:`static`\ndirectory.\n\nUsers and privileges\n--------------------\n\nApart from the ``pping`` and ``snmptrapd`` daemons, no NAV processes should\never be run as ``root``. You should create a non-privileged system user and\ngroup, and ensure the ``NAV_USER`` option in :file:`nav.conf` is set\naccordingly. Also make sure this user has permissions to write to the directories\nconfigured in ``PID_DIR``, ``LOG_DIR`` and ``UPLOAD_DIR``.\n\n.. note:: The ``pping`` and ``snmptrapd`` daemons must be started as ``root``\n          to be able to create privileged communication sockets. Both daemons\n          will drop privileges and run as the configured non-privileged user as\n          soon as the sockets have been acquired.\n\nBuilding the documentation\n--------------------------\n\nIf you wish, this HTML documentation can be built separately using this step::\n\n  sphinx-build\n\nThe resulting files will typically be placed in :file:`build/sphinx/html/`.\n\nIf you want to serve this documentation on your NAV web server, you should copy\nthe :file:`html` directory to a suitable location and make sure that location is served\nas ``/doc`` on the web server.  If using the example Apache configuration\n(:file:`apache.conf.example`), there is a define named ``documentation_path``,\nwhich can be set to point to this file system location.\n"
  },
  {
    "path": "doc/howto/index.rst",
    "content": "======\nHowtos\n======\n\n.. toctree::\n   :maxdepth: 1\n\n   commandline-utilities\n   generic-install-from-source\n   manual-install-on-debian\n   installing-graphite-on-debian\n   integrating-graphite-with-nav\n   migrate-rrd-to-graphite\n   debugging-topology\n   email\n   migrate-data\n   allauth-and-oidc\n   mod_auth_openidc_feide\n   mod_auth_mellon_feide\n   setting-up-logging\n   using_the_api\n   api_parameters\n   securing-nav-in-production\n   migrate-dhcpstats\n"
  },
  {
    "path": "doc/howto/installing-graphite-on-debian.rst",
    "content": "==============================================\nInstalling Graphite for use with NAV on Debian\n==============================================\n\nThis is a short how-to guide for installing and configuring a simple Graphite\ninstallation, dedicated to NAV, on a **Debian 10 (Buster)** or a **Debian 11\n(Bullseye)** server.\n\n.. warning:: **Do not start NAV** until you have properly configured your\n             carbon-cache's storage schemas with NAV's provided storage schema\n             config, or you *will* have issues with :doc:`blank areas in your\n             graphs </faq/graph_gaps>`, which you will need to resolve\n             manually after-the-fact.\n\nA more `generic and up-to-date installation guide for Graphite\n<https://graphite.readthedocs.io/en/latest/install.html>`_ can be found in the\nGraphite project's own documentation.\n\nGetting Graphite\n================\n\nA full Graphite setup consists of the *Carbon* backend server, which receives\nmetrics over TCP or UDP, and a *Graphite web frontend*, which enables browsing\nand retrievial/rendering of the stored metrics. NAV will collect metrics and\nsend to the former, while utilizing the latter to retrieve metrics and render\ngraphs.\n\nAssuming you will be running Graphite on the same Debian server as you are\nrunning NAV, all you need to do to install Graphite on **Debian 10 or 11** is::\n\n  apt-get install python3-psycopg2 graphite-carbon graphite-web\n\n.. note:: Unfortunately, the ``graphite-web`` package has been removed from the\n   official **Debian 11** distro. It is not clear why this happened, but it\n   seems it will return in the next Debian stable release.\n\n   We therefore provide a backported ``graphite-web`` package in NAV's official\n   Debian APT repositories. If you don't already have this repository\n   configured as a source in your Debian server, instructions to do so can be\n   found at https://nav.uninett.no/install-instructions/#debian\n\nConfiguring Carbon\n==================\n\nCarbon, the metric-receiving backend of Graphite, must be configured before it\ncan be used with NAV. We will only be covering the simple case of using a\nsingle *carbon-cache* process. Most of this information is adapted from the\n:ref:`integrating-graphite-with-nav` section of the generic installation\ndocumentation.\n\nEdit :file:`/etc/carbon/carbon.conf` to ensure these options are set in the\n``[cache]`` section:\n\n.. code-block:: ini\n\n   MAX_CREATES_PER_MINUTE = inf\n   ENABLE_UDP_LISTENER = True\n\nThe first line ensures that Carbon will not delay creating Whisper backend\nfiles for the metrics NAV sends it. The default setting is a maximum of 50\ncreates per minute (the setting exists to limit I/O strain on huge setups),\nwhich means that when bootstrapping a NAV installation, hours to days can pass\nbefore all its metrics are being actually stored in Graphite.\n\nThe second line ensures that Carbon accepts metrics on a UDP socket, which is\nrequired by NAV.\n\nCarbon also needs to know the resolution at which to store your time-series\ndata, for how long to store it, and how to roll up data from high resolution\ndata archives to lower resolution archives. These are the storage schemas and\naggregation methods. NAV provides its own config examples for this; on a\nGraphite backend *dedicated to NAV*, you can simply symlink these config files\nfrom NAV::\n\n  cd /etc/carbon/\n  mv storage-schemas.conf storage-schemas.conf.bak\n  mv storage-aggregation.conf storage-aggregation.conf.bak\n  ln -s /etc/nav/graphite/*.conf /etc/carbon/\n\nFinally, restart the ``carbon-cache`` daemon::\n\n  systemctl restart carbon-cache\n\nConfiguring the Graphite web interface\n======================================\n\nTo enable the web interface, you need to do two things:\n\n- Configure and create the database it will use for storing graph definitions.\n- Configure Apache to serve the web interface.\n\nCreating the graphite database\n------------------------------\n\nGraphite will by default use a SQLite database, but this is not recommended in\na production setting, as it will cause issues with multiple simultaneous\nusers. You already have a PostgreSQL installation because of NAV, so we\nrecommend using this.\n\nMake a ``graphite`` PostgreSQL user and give it a password (make note of the\npassword), then create a database owned by that user::\n\n  sudo -u postgres createuser --pwprompt --no-createrole --no-superuser --no-createdb --login graphite\n  sudo -u postgres createdb --owner=graphite graphite\n\nThe Graphite web app's configuration file is located in\n:file:`/etc/graphite/local_settings.py`. There are mainly three settings you\nwill need to adjust: ``SECRET_KEY``, ``TIME_ZONE`` and ``DATABASES``. The\n``SECRET_KEY`` is used for cryptographic purposes when working with cookies and\nsession data (just as the ``SECRET_KEY`` setting from :file:`nav.conf`). It\nshould be a random string of characters; we can suggest using the\n``makepasswd`` command to generate such a string:\n\n.. code-block:: console\n\n  $ makepasswd --chars 51\n  iLNScMiUpNy5hditWAp9e2dyHGTFoX44UKsbhj91f9xL4fdJSDY\n\nThen edit :file:`/etc/graphite/local_settings.py` (do not, under any\ncircumstances, re-use the actual example value of ``SECRET_KEY`` here!) and\nmake to set these three settings:\n\n.. code-block:: python\n\n   SECRET_KEY = 'iLNScMiUpNy5hditWAp9e2dyHGTFoX44UKsbhj91f9xL4fdJSDY'\n   TIME_ZONE = 'Europe/Oslo' # This should correspond to your actual timezone, also as in nav.conf\n   DATABASES = {\n       'default': {\n           'NAME': 'graphite',\n           'ENGINE': 'django.db.backends.postgresql_psycopg2',\n           'USER': 'graphite',\n           'PASSWORD': 'the password you made note of above',\n           'HOST': 'localhost',\n           'PORT': '5432'\n       }\n   }\n\n\nNow make ``graphite-web`` initialize its database schema::\n\n  sudo -u _graphite graphite-manage migrate auth --noinput\n  sudo -u _graphite graphite-manage migrate --run-syncdb --noinput\n\nConfigure Apache to serve the Graphite web app\n----------------------------------------------\n\nIn principle, you can use any web server that supports the WSGI interface. You\nshould already have Apache with ``mod_wsgi`` installed, to serve NAV, so you\ncould use that. Alternatively, you can run Graphite (and even NAV, for that\nmatter), in a separate WSGI application server like uWSGI, and have Apache\nproxy requests to the application server.\n\nThe two following examples will define an Apache virtual host that will serve\nthe Graphite web app on port **8000**. Adding SSL encryption is left as an\nexcercise for the reader (but should be unnecessary if you wisely choose to set\nup the server to listen only to the localhost interface).\n\n.. warning:: All graphite statistics will become browseable for anyone who can\n             access your server on port 8000. You will probably want to\n             restrict access to this port, either by using iptables or ACLs in\n             your routers. Or, if you do not care about browsing the web app\n             yourself, change the ``Listen`` statement into ``Listen\n             127.0.0.1:8000``, so that only the NAV installation on\n             ``localhost`` will be able to access it.\n\n\nOption 1: Apache-based configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nGraphite-web will need its own virtualhost, so let's add a new site config for\nApache (this example is inspired by the one supplied by the ``graphite-web``\npackage in :file:`/usr/share/graphite-web/apache2-graphite.conf`):\n\n.. code-block:: apacheconf\n   :caption: /etc/apache2/sites-available/graphite-web.conf\n\n   Listen 8000\n   <VirtualHost *:8000>\n\n           WSGIDaemonProcess _graphite processes=1 threads=1 display-name='%{GROUP}' inactivity-timeout=120 user=_graphite group=_graphite\n           WSGIProcessGroup _graphite\n           WSGIImportScript /usr/share/graphite-web/graphite.wsgi process-group=_graphite application-group=%{GLOBAL}\n           WSGIScriptAlias / /usr/share/graphite-web/graphite.wsgi\n\n           Alias /content/ /usr/share/graphite-web/static/\n           <Location \"/content/\">\n                   SetHandler None\n           </Location>\n\n           ErrorLog ${APACHE_LOG_DIR}/graphite-web_error.log\n           LogLevel warn\n           CustomLog ${APACHE_LOG_DIR}/graphite-web_access.log combined\n\n   </VirtualHost>\n\n\nOption 2: uWSGI-based configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nGraphite-web will still need its own virtualhost, but in this example, we will\nwe will run the app using a uWSGI container, and define an Apache virtual host\nto proxy requests to this container.\n\nFirst, install uWSGI and the necessary Apache modules to set up a uWSGI request\nproxy::\n\n  apt-get install uwsgi uwsgi-plugin-python3 libapache2-mod-proxy-uwsgi libapache2-mod-uwsgi\n\nThen proceed to add a new uWSGI application definition:\n\n.. code-block:: ini\n   :caption: /etc/uwsgi/apps-enabled/graphite.ini\n\n   [uwsgi]\n   uid = _graphite\n   gid = _graphite\n   buffer-size = 32768\n   chdir = /usr/share/graphite-web\n   env = DJANGO_SETTINGS_MODULE=graphite.settings\n   env = GRAPHITE_SETTINGS_MODULE=local_settings\n   max-requests = 100\n   module = graphite.wsgi:application\n   plugins = python3\n   processes = 5\n   socket = 127.0.0.1:7999\n   touch-reload = /usr/lib/python3/dist-packages/graphite/wsgi.py\n\nTo start an application container that will listen for requests on\n``localhost:7999``, just run::\n\n  systemctl restart uwsgi\n\nNow you're ready to add an Apache site definition for this app:\n\n.. code-block:: apacheconf\n   :caption: /etc/apache2/sites-available/graphite-web.conf\n\n   Listen 8000\n   <VirtualHost *:8000>\n\t   Alias /static/ /usr/share/graphite-web/static/\n\t   <Location \"/static/\">\n\t\t   SetHandler None\n\t\t   Require all granted\n\t   </Location>\n\t   <Location \"/\">\n\t\t   Options FollowSymlinks Indexes\n\t\t   Require all granted\n\t   </Location>\n\n\t   ErrorLog ${APACHE_LOG_DIR}/graphite-web_error.log\n\t   LogLevel warn\n\t   CustomLog ${APACHE_LOG_DIR}/graphite-web_access.log combined\n\n\t   ProxyRequests Off\n\t   ProxyPreserveHost Off\n\n\t   # Let Apache serve static files\n\t   ProxyPass /static/ !\n\t   ProxyPassReverse /static/ !\n\t   # Give the rest to our uWSGI instance\n\t   ProxyPass / uwsgi://127.0.0.1:7999/\n\t   ProxyPassReverse / uwsgi://127.0.0.1:7999/\n\n\t   ProxyTimeout 300\n   </VirtualHost>\n\nThen make sure to enable the required Apache modules to use this site config::\n\n  a2enmod uwsgi proxy proxy_uwsgi\n\n\nFinally, in both configuration options\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nEnable the new site on port 8000::\n\n  a2ensite graphite-web\n  systemctl restart apache2\n\n\nCongratulations, you should now be ready to start NAV!\n"
  },
  {
    "path": "doc/howto/integrating-graphite-with-nav.rst",
    "content": ".. _integrating-graphite-with-nav:\n\nIntegrating Graphite with NAV\n-----------------------------\n\n.. highlight:: ini\n\nNAV uses :xref:`Graphite` to store and retrieve/graph time-series data. Installing\nGraphite itself is out of scope for this guide, but assuming you already have *a\ncomplete installation of Graphite*, you need to change some configuration\noptions in both Graphite and NAV to ensure your time-series data is stored and\nretrieved properly:\n\n1. NAV needs to know the details of *where to send data*.\n2. NAV needs to know the details of *how to retrieve time-series data* from\n   :program:`graphite-web` (Graphite's front-end web service for retrieving stored\n   data)\n3. :program:`carbon-cache` (Graphite's backend component for receiving and\n   storing time series data) needs to know **how** it should store data\n   received from NAV.\n\nConfiguring NAV\n~~~~~~~~~~~~~~~\n\nNAV must be configured with the IP address and port of your Graphite\ninstallation's Carbon backend, and the URL to the Graphite-web frontend used\nfor graphing. These settings can be configured in the :file:`graphite.conf`\nconfiguration file.\n\n.. note:: NAV requires the Carbon backend's UDP listener to be enabled, as it\n          will only transmit metrics over UDP.\n\nFor a simple, local Graphite installation, you may not need to touch this\nconfiguration file at all, but at its simplest it looks like this::\n\n  [carbon]\n  host = 127.0.0.1\n  port = 2003\n\n  [graphiteweb]\n  base = http://localhost:8000/\n\n.. _integrating_graphite_with_nav_configuring_graphite:\n\nConfiguring Graphite\n~~~~~~~~~~~~~~~~~~~~\n\nYou will need to make some configuration changes to :program:`carbon-cache`\nbefore letting NAV send data to Graphite:\n\n1. First and foremost, you will need to enable the UDP listener in the\n   configuration file :file:`carbon.conf`.\n\n   For performance reasons, Carbon will also limit the number of new Whisper\n   files that can be created per minute. This number is fairly low by default,\n   and when starting NAV for the first time, it may send a ton of new metrics\n   very fast. If the limit is set to 50, it will take a long time before all\n   the metrics are created. You might want to increase the\n   ``MAX_CREATES_PER_MINUTE`` option, or *temporarily* set it to ``inf``.\n\n2. You should add the suggested *storage-schema* configurations for the\n   various ``nav`` prefixes listed in :file:`etc/graphite/storage-schemas.conf`:\n\n   .. literalinclude:: ../../python/nav/etc/graphite/storage-schemas.conf\n\n   The highest precision retention archives are the most important ones here,\n   as their data point interval must correspond with the collection intervals\n   of various NAV processes. Other than that, the retention periods and the\n   precision of any other archive can be freely experimented with.\n\n   Remember, these schemas apply to new Whisper files as they are created. You\n   should not start NAV until the schemas have been configured, otherwise the\n   Whisper files will be created with the global Graphite defaults, and your\n   data may be munged or inaccurate, and your graphs will be spotty.\n\n3. You should add the suggested *storage-aggregation* configurations listed in\n   the file :file:`etc/graphite/storage-aggregation.conf`:\n\n   .. literalinclude:: ../../python/nav/etc/graphite/storage-aggregation.conf\n\n   These will ensure that time-series data sent to Graphite by NAV will be\n   aggregated properly when Graphite rolls them into lower-precision archives.\n\nEnsure :program:`carbon-cache` is restarted to make these changes take effect,\nbefore adding devices to monitor in your NAV installation.\n\n.. _PostgreSQL: https://www.postgresql.org/\n"
  },
  {
    "path": "doc/howto/manual-install-on-debian.rst",
    "content": "===============================\n Install from source on Debian\n===============================\n\n.. highlight:: sh\n\nThis details what the Debian package does for you automatically.\nAdapt this if you can't use an official ``.deb`` or need to install on\nsomething that isn't Debian-based.\n\n.. note:: This howto is based on Debian 9 (Stretch).\n\n1. OS dependencies\n==================\n\nFirst get the following OS packages::\n\n  apt-get install -y python-pip python-wheel git postgresql apache2 libapache2-mod-wsgi libsnmp30\n\n\n2. Get the source\n=================\n\nGet the source::\n\n  git clone https://github.com/Uninett/nav.git\n  cd nav\n\nYou might want to choose your version now, otherwise you'll be installing the\nbleeding edge `master` branch. All release versions have git tags, so you can\neasily find and checkout the latest stable version (although these instructions\nare not valid for versions of NAV prior to 4.9). Use ``git tag`` to list the\navailable tags, and ``git checkout x.y.z`` to checkout version ``x.y.z``.\n\n\n3. NAV/Python dependencies\n==========================\n\nTo install NAV's Python requirements::\n\n  apt-get install -y libpq-dev libjpeg-dev libz-dev libldap2-dev libsasl2-dev\n  pip install -r requirements.txt -c constraints.txt\n\n4. Install NAV itself\n=====================\n\n::\n\n  pip install .\n  nav config install /etc/nav\n\n.. tip::\n\n   You can override the default configuration search path by setting the\n   :envvar:`NAV_CONFIG_DIR` environment variable to point to a directory\n   containing your NAV configuration files. When set, this directory will be\n   searched with highest priority, before any of the default locations.\n\nThe configuration files are now found in :file:`/etc/nav/`. Verify that NAV can\nactually find :file:`nav.conf`::\n\n  nav config where\n\n5. Build the docs\n=================\n\nIf you like, you can build the complete HTML documentation thus::\n\n    sphinx-build\n\n\n6. Initialize the database\n==========================\n\nIn :file:`/etc/nav/db.conf` there should be an option called\n``userpw_nav``. Choose a password and append it here, then run::\n\n    sudo -u postgres navsyncdb -c\n\nYou should now have a database ``nav`` with a user ``nav``.\n\n\n7. Create users and groups\n==========================\n\nCreate a ``navcron`` user and a corresponding group for NAV to run as::\n\n  sudo addgroup --system nav\n  sudo adduser --system --home /usr/share/nav \\\n               --shell /bin/sh --ingroup nav navcron\n\nYou should also make sure `navcron` has permission to write log files, pid\nfiles and various other state information. You can configure the log and pid\nfile directories in :file:`nav.conf`. Then make sure these directories exist\nand are writable for the ``navcron`` user::\n\n  sudo chown -R navcron:nav /path/to/log/directory\n  sudo chown -R navcron:nav /path/to/pid/directory\n\n\nSending SMS messages using a locally attached GSM device\n--------------------------------------------------------\n\nIf you want to use NAV's SMS functionality in conjunction with Gammu, you\nshould make sure the ``navcron`` user is allowed to write to the serial device\nyou've connected your GSM device to. Often, this device has a group ownership\nset to the ``dialout`` group, so the easieast route is to add the ``navcron`` user\nto the ``dialout`` group::\n\n  sudo addgroup navcron dialout\n\n\n8. Ensure that a writeable uploads directory exists\n===================================================\n\nThe NAV web ui allows you to upload and attach images to room and location\nobjects. These images will be stored in the file system, so NAV needs a\nwriteable directory to store them in (and from where the web server can serve\nthem).\n\nWe suggest::\n\n  mkdir -p /usr/share/nav/var/uploads\n  chown navcron:nav /usr/share/nav/var/uploads\n\nThen, ensure you set this option in :file:`nav.conf`::\n\n  UPLOAD_DIR=/usr/share/nav/var/uploads\n\n\n9. Install the static resources\n===============================\n\nRun::\n\n    django-admin collectstatic --settings=nav.django.settings\n\nIt'll respond with something like:\n\n.. code-block:: console\n\n    You have requested to collect static files at the destination\n    location as specified in your settings:\n\n        /usr/share/nav/www/static\n\n    This will overwrite existing files!\n    Are you sure you want to do this?\n\n    Type 'yes' to continue, or 'no' to cancel:\n\nTake note of the path (:file:`/usr/share/nav/www`, without the ``static``\nsubdir), as you'll need it in the next step and type :code:`yes` and hit\n:kbd:`Enter`.\n\nThis will copy static files (css, javascript, images, fonts and similar) into\nthat path.\n\n\n10. Configure Apache\n====================\n\nCopy the file :file:`/etc/nav/apache/apache.conf.example` to\n:file:`/etc/nav/apache/apache.conf` and edit the defines inside the copy.\n\n* ``documentroot`` should be the path from step 9.\n* ``documentation_path`` is where Sphinx put the docs, in\n  ``$SOURCE_CODE_DIRECTORY/build/sphinx/html/``.\n* ``nav_uploads_path`` is the upload path you created in step 8.\n* ``nav_python_base`` should be :file:`/usr/local/lib/python3.9/dist-packages` (or wherever the ``nav`` Python module was installed)\n\nWe suggest creating a new Apache site config:\nInside a ``VirtualHost``-directive, add:\n\n.. code-block:: apacheconf\n   :caption: /etc/apache2/sites-available/nav.conf\n\n   <VirtualHost *:80>\n       ServerName nav.example.org\n       ServerAdmin webmaster@example.org\n\n       Include /etc/nav/apache/apache.conf\n   </VirtualHost>\n\nYou should, of course, replace ``nav.example.org`` with a DNS name that your\nserver can actually be reached under.\n\nThen, disable the default Apache site, enable the ``nav`` site, and enable\n``mod_wsgi``, before restarting Apache::\n\n  a2dissite 000-default\n  a2ensite nav\n  a2enmod wsgi\n  systemctl reload apache2\n\nYou should now be able to browse the NAV web interface.\n\n.. important:: You should always protect your NAV web site using SSL!\n\n\n\n11. Installing and configuring Graphite\n=======================================\n\nNAV uses :xref:`Graphite` to store and retrieve time-series data. If you do not\nalready have a Graphite installation you wish to integrate with NAV, here is a\n:doc:`separate guide on how to install and use Graphite with NAV on your Debian\nsystem </howto/installing-graphite-on-debian>`.\n\n\nStart using NAV\n===============\n\nYou should now be ready to move on the the :doc:`/intro/getting-started` guide.\n"
  },
  {
    "path": "doc/howto/migrate-data.rst",
    "content": "#####################################################\n Migrating data from one NAV installation to another\n#####################################################\n\nThis how-to explores two methods of migrating data from one NAV installation\nto another, depending on your specific needs.\n\n.. note:: This guide does not cover in detail data stored outside of NAV's\n          PostgreSQL database, such as time-series data in Graphite, log\n          files, or configuration files.\n\n***************************\nWhat data should I migrate?\n***************************\n\nIf you want to migrate your entire NAV installation from one server to\nanother, you should consider these points:\n\n* Uploaded resources, such as room images, are stored in the file system, in\n  the :file:`uploads/` directory under NAV's ``localstatedir`` (on Debian,\n  this is typically :file:`/var/lib/nav/uploads/`). This directory structure\n  can easily be copied to the target host, using your preferred combination of\n  :program:`rsync`/:program:`scp`/:program:`tar`.\n\n* Do you run NAV's PostgreSQL server on the same host as NAV itself? If so,\n  you should perform a full dump of the PostgreSQL cluster using\n  :program:`pg_dumpall` and load this onto the target host.\n\n  If you are an advanced PostgreSQL, you could utilize database replication or\n  other strategies to minimize downtime.\n\n* Do you run your Carbon (Graphite) back-end on the same host as NAV? If so,\n  you should copy all your Whisper files (where Graphite stores its time\n  series data) to the target host, using your preferred combination of\n  :program:`rsync`/:program:`scp`/:program:`tar`.\n\n* Don't forget your configuration files! Not only NAV's configuration files,\n  but also PostgreSQL and Graphite, if you are migrating those as well.\n\n\nIf you want to migrate only parts of the data, you should read on.\n\n*******************\nMigrating seed data\n*******************\n\nIf you wish to discard your NAV history and establish a new NAV server to\nmonitor the same set of devices as your old NAV server, migrating your NAV's\nseed data should be enough.\n\nSeed data are the data you can enter through the Seed DB tool, consisting\nmostly of data NAV needs to start monitoring your network. These do not\ncontain collected inventory data (except for possibly prefixes and VLANs),\nevent logs, user accounts or other items.\n\nMigrating this data is a two-step process:\n\n1. Dump the seed data to a set of text files.\n2. Bulk import the text files in the receiving installation's SeedDB\n   interface.\n\nFor dumping seed data to text files, NAV provides the :program:`navdump`\nprogram. To dump all seed data to the current working directory:\n\n.. code-block:: console\n\n  $ navdump  -a\n  Dumping vendor.txt\n  Dumping room.txt\n  Dumping service.txt\n  Not smart to use : as separator for services, using ;\n  Dumping netbox.txt\n  Dumping prefix.txt\n  Not smart to use : as separator for prefixes, using ;\n  Dumping location.txt\n  Dumping usage.txt\n  Dumping org.txt\n  Dumping type.txt\n  Dumping netboxgroup.txt\n\nEach of the dumped files represent data that can be bulk imported in one of\nthe SeedDB tabs. They usually need to be imported in a specific order, as some\nof the data will be inter-dependent. A usable order of import is:\n\n* vendor.txt\n* location.txt\n* room.txt\n* org.txt\n* netboxgroup.txt\n* type.txt\n* netbox.txt\n* service.txt\n* usage.txt\n* prefix.txt\n\nFor more information about :ref:`bulk importing in SeedDB\n<seeddb-bulk-import-intro>`, see :doc:`../intro/getting-started`.\n\n**************************************\nMigrating all or parts of the database\n**************************************\n\nIntro\n-----\n\nNAV stores most of its data (except time-series data like traffic statistics)\nin the PostgreSQL relational database. The contents of this database can be\ndumped to a SQL text file, which can be used to create a new, identical NAV\ndatabase on the receiving end.\n\n.. tip:: If you just want to backup your entire database, you are likely\n         better off using PostgreSQLs own :program:`pg_dumpall` program. This\n         will dump all databases in a PostgreSQL data cluster, including the\n         users and table access privileges.\n\nNAV features the :program:`navpgdump` program, which can facilitate dumping of\nthe NAV database while filtering unnecessary or unwanted data. This makes it\nideal for moving parts of your production data to a test installation if you\nwant to beta test the next NAV release.\n\nDumping\n-------\n\nTo just dump the entire contents of the NAV database, you can invoke the\n:program:`navpgdump` program. The contents are dumped directly to\n:file:`stdout`, so you should redirect to a file::\n\n  navpgdump > nav-data.sql\n\nIn a long-running NAV installation, most of the data will be be machinetracker\nlogs, i.e. timestamped ARP and CAM records from your routers and switches. If\nthe logs are unneeded on the destination installation, you may wish to keep\nonly the currently active records. This will *greatly* reduce the size of your\ndata dump. You can use the `-a` and `-c` options (or their long-form\ncounterparts) to only dump open ARP and CAM records, respectively::\n\n  navpgdump --only-open-arp --only-open-cam > nav-data.sql\n\nUsing the `-e` option, you can exclude the entire contents of selected tables.\nThis may require knowledge of NAV's data model before you proceed. If you know\nyour way around SQL, you can even enact more advanced content filters using\nthe `-f` or `--filter` option.\n\n.. tip:: See the output of :code:`navpgdump --help` for a complete overview of\n         the supported options.\n\nRestoring\n---------\n\nThe :program:`navsyncdb` program, used for creating and updating the NAV\ndatabase schema, can also be used to restore a dump created by the\n:program:`navpgdump` program.\n\nTo create a new NAV database, using the data stored in :file:`nav-data.sql`::\n\n  navsyncdb --create --restore nav-data.sql\n\nJust as creating a new NAV database from scratch, this requires\n:file:`db.conf` to be configured properly. You can optionally drop a\npre-existing NAV database using the ``--drop-database`` option to\n:program:`navsyncdb`, but **do not use this option on a production system\nunless you are willing to lose all your data**.\n\n\nFull migration to a test server\n-------------------------------\n\nIf you, for example, have installed a beta version of NAV on a virtual\nmachine/testing server, and wish to copy most of your production data (but not\nyour years of machine tracker logs) to it, you can do the full migration in\none single command line on the test server like this::\n\n  ssh production-nav navpgdump --only-open-arp --only-open-cam | \\\n    navsyncdb --drop-database --create --restore -\n\nThis command is repeatable; when run, it will destroy the running test\ndatabase and restore the current production data into a new test database.\n\n.. tip:: When using :program:`navsyncdb` to create/restore the database,\n         always remember to stop all NAV processes and the Apache web server,\n         which may currently be accessing the database. Failure to do so may\n         cause :program:`navsyncdb` to stall forver while waiting for the\n         other processes to release their locks on the database.\n\n.. _migrating_prod_db_to_dev:\n\nMigrating a production database to a development environment\n------------------------------------------------------------\n\nAs with the test server example above, for some development tasks, it is useful\nto initialize the development database with a database snapshot from a\nproduction server. The :file:`tools/` directory contains shell scripts to\nstreamline this operation somewhat in a development environment (but they\nbasically wrap the same commands as mentioned in the previous section):\n\n:file:`tools/dump-remote-db.sh`\n    Runs the :program:`navpgdump` program over an *SSH connection* to a remote\n    host and dumps the output to ``stdout``, automatically filtering out old\n    machine tracker log records and alert profiles (so the development server\n    won't attempt to send notifications to real users).  Requires the\n    :program:`navpgdump` program to be available on the remote system's\n    :envvar:`PATH`. If you need to customize the filters used while dumping, you\n    can make your own version of this script.\n\n:file:`tools/restore-db.sh`\n    Stops NAV processes, drops the current NAV database and re-initializes it\n    with an SQL dump read from ``stdin``.  This program assumes the\n    :program:`psql` program is available and that the necessary configuration\n    for it to connect to an actual PostgreSQL database are present (such as the\n    environment variables :envvar:`PGHOST`, :envvar:`PGPORT`,\n    :envvar:`PGDATABASE`, :envvar:`PGUSER`, etc.). In the devcontainer\n    environment this should already be set up for you.\n\n:file:`tools/reset-db-from-remote.sh`\n    Combines the two previous programs into a single operation, for\n    convenience.\n\nUsage examples\n~~~~~~~~~~~~~~\n\n.. code-block:: sh\n   :caption: Initialize database from remote server ``prefect.example.org``, as user ``ford``\n\n   tools/reset-db-from-remote.sh ford@prefect.example.org\n\n\n.. code-block:: sh\n   :caption: Save a remote database dump to a file and re-use it later\n\n   tools/dump-remote-db.sh ford@prefect.example.org > mydump.sql\n   cat mydump.sql | tools/restore-db.sh\n"
  },
  {
    "path": "doc/howto/migrate-dhcpstats.rst",
    "content": "=================================================================\nMigrating DHCP stats collected with NAV 5.14.x through NAV 5.16.x\n=================================================================\n\nWe've provided a Bash script below that migrates DHCP stats collected with NAV\n5.14.x through NAV 5.16.x to the locations expected and used by NAV 5.17.0 and\nabove. Run the script on the same machine as the machine running your\nGraphite/Carbon backend and hence from where your Whisper timeseries data files\nare reachable.\n\nBefore running the script, you should at the very minimum read its comments and\nalso replace the path in the highlighted line with the path to the root of where\nyour Whisper files are stored. (This could for example be\n``/var/lib/graphite/whisper``. To be assured that this is the correct path and\nthat this script will have any effect, you could then verify that\n``/var/lib/graphite/whisper/nav/dhcp`` also exists.) As always when making\nautomated changes to a file tree, you should take a backup of the file tree\nbefore proceeding.\n\n.. code-block:: bash\n  :emphasize-lines: 12\n\n  #!/bin/bash\n\n  shopt -s nullglob\n\n  # Renames the paths under nav.dhcp from the way paths are named in NAV\n  # 5.14.x through NAV 5.16.x to the way paths are named in NAV 5.17.0 and\n  # above\n\n  # $WHISPER_ROOT should point to the root of the whisper database's file tree.\n  # The user running this script must have write-access to this file tree.\n  # You should take a backup of this file tree before running this script.\n  WHISPER_ROOT=\"/path/to/whisper/data/root\"\n\n  if ! [[ -d \"$WHISPER_ROOT/nav/dhcp\" ]]; then\n      echo \"Error: Could not find directory $WHISPER_ROOT/nav/dhcp\" >&2\n      echo \"No paths to rename.\" >&2\n      exit 2\n  fi\n\n  pushd \"$WHISPER_ROOT\" 1>/dev/null 2>/dev/null || exit 1\n  for path in nav/dhcp/*/pool/*/*/*/*/*; do\n      if ! [[ -f \"$path\" ]]; then\n          continue\n      fi\n      if [[ -h \"$path\" ]]; then\n          continue\n      fi\n      IFS='/' read -ra parts <<< \"$path\"\n      ip_version=\"${parts[2]}\"\n      server_name=\"${parts[4]}\"\n      group_name=\"${parts[5]}\"\n      first_ip=\"${parts[6]}\"\n      last_ip=\"${parts[7]}\"\n      metric_name=\"${parts[8]}\"\n      if [[ \"$group_name\" = \"pool-${first_ip}-${last_ip}\" ]]; then\n          new_path=\"nav/dhcp/servers/${server_name}/range/special_groups/standalone/${ip_version}/${first_ip}/${last_ip}/${metric_name}\"\n          new_dir=\"nav/dhcp/servers/${server_name}/range/special_groups/standalone/${ip_version}/${first_ip}/${last_ip}/\"\n      else\n          new_path=\"nav/dhcp/servers/${server_name}/range/custom_groups/${group_name}/${ip_version}/${first_ip}/${last_ip}/${metric_name}\"\n          new_dir=\"nav/dhcp/servers/${server_name}/range/custom_groups/${group_name}/${ip_version}/${first_ip}/${last_ip}/\"\n      fi\n      mkdir -p \"$new_dir\"\n      if [[ -f \"$new_path\" ]]; then\n          if whisper-fill \"$path\" \"$new_path\"; then\n              # unlink \"$path\"  # Uncomment to unlink old path\n              true\n          fi\n      else\n          if ln --verbose \"$path\" \"$new_path\"; then\n              # unlink \"$path\"  # Uncomment to unlink old path\n              true\n          fi\n      fi\n  done\n  # find \"nav/dhcp\" -depth -empty -type d -delete  # Uncomment to remove any resulting empty directories\n  popd 1>/dev/null 2>/dev/null || exit 1\n"
  },
  {
    "path": "doc/howto/migrate-rrd-to-graphite.rst",
    "content": "######################################################\n Migrating RRD data to Graphite (from NAV 3 to NAV 4)\n######################################################\n\nWhen upgrading from NAV 3 to NAV 4, you may want to keep historic traffic\ngraphs and other time-series data collected into RRD files by NAV 3 and\nCricket.\n\nNAV 4.0 through 4.5 comes with a utility for converting NAV 3 RRD files into Whisper_ files\n(Whisper_ is the data format used by Graphite). This how-to documents usage of\nthe utility and limitations of the conversion process.\n\n\n.. warning:: You cannot upgrade directly from NAV 3 to 4.6 and keep your RRD\n             data. You will either have make a decision to lose your old RRD\n             data, or perform an intermediary upgrade via an NAV 4 version.\n\n\n*****\nTL;DR\n*****\n\nOn the NAV server, run this program::\n\n  migrate_to_whisper.py <PATH>\n\nwhere `PATH` is the directory where your whisper file hierarchy will be\nplaced.\n\n* If your Graphite Carbon backend runs on the same server as NAV, this\n  can point directly to its whisper storage directory (most commonly\n  :file:`/opt/graphite/storage/whisper/`).\n* If not, specify a temporary directory and move the files to your Carbon server.\n\n\n**********\nConversion\n**********\n\nAssumptions before we start:\n\n* You have stopped NAV 3 and installed NAV 4.\n* You have installed and configured Graphite according to\n  :ref:`integrating-graphite-with-nav`.\n* :mod:`py-rrdtool` must still be installed on the NAV server, as well as\n  :mod:`whisper`.\n* You have **NOT** started NAV 4.\n\nOn the NAV server, run this program::\n\n  migrate_to_whisper.py <PATH>\n\nwhere `PATH` is the directory where your whisper file hierarchy will be\nplaced.\n\n* If your Graphite Carbon backend runs on the same server as NAV, this\n  can point directly to its whisper storage directory (most commonly\n  :file:`/opt/graphite/storage/whisper/`).\n* If not, specify a temporary directory and move the files to your Carbon\n  server afterwards.\n\nWhen conversion is complete and the Whisper files are on the target server,\nensure they are readable/writable by the user that runs the Carbon daemon\n(e.g. :code:`chmod -R graphite:graphite /opt/graphite/storage/whisper/nav`).\n\nRuntime considerations\n~~~~~~~~~~~~~~~~~~~~~~\n\nConversion may take a long time to complete, depending on the amount of data\nyou have to convert. We have only one data point so far:\n\nOn a reasonably modern computer (Intel i7 Quad core with 8GB RAM, an SSD and a\n64-bit OS), converting *2512* RRD files to Whisper took approximately 19\nminutes. This is from a small NAV installation with only 39 monitored IP\ndevices and 108 monitored subnet prefixes on 63 VLANs.\n\n\nConverting while NAV 4 is running\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you start NAV 4 before proceeding with the RRD conversion, NAV will begin\nto send metrics to Graphite; the Whisper files the conversion tool wants to\nproduce will therefore already exist in Carbon's storage directory.\n\nAny Whisper files that already exist will not be overwritten by the conversion\ntool, but they will be *updated* with old data from the RRD file (aka.\n\"backfilling\"). You may think this will help you avoid downtime data gaps in\nyour resulting graphs, **but** because of the precision mismatches detailed in\nthe :ref:`rrd-migration-data-archives-mismatch` section, you may get multiple\ngaps in older data instead.\n\n.. note:: If you cannot live with this downtime, you can opt to start NAV 4\n          and have the conversion tool place Whisper files in a temporary\n          directory. When the conversion process is over, you can overwrite\n          the Whisper files in Carbon's storage directory with those produced\n          by NAV. You will, of course, still have the downtime gap in your\n          graphs, but NAV will at least monitor and dispatch alerts as usual\n          during the conversion.\n\n\nMigrating between different platforms\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe RRD file format is platform/architecture dependent, whereas Whisper files\nare not. If you are attempting to migrate your RRD data to a new NAV server,\nthe two servers' architectures must match. If they don't, you must run the\nconversion step on the original server (a typical scenario is migrating from a\n32-bit platform to a 64-bit platform).\n\nYour only other option in the face of an architecture mismatch is to dump the\nRRD files to XML files on the original server, and then load those back into\nRRD files on the new server.\n\nIf you choose the latter option, things can get complicated quick. Here's a\nsuggestion that has been employed by the authors of NAV (and requires the\n`rrdtool` command line program to be present on both servers):\n\n1. Put the following shell script on your original NAV server, as\n   :file:`/root/migrate-rrd.sh`, and make sure it is executable:\n\n   .. code-block:: bash\n\n      #!/usr/bin/env bash\n\n      list_nav_rrdfiles() {\n\tsudo -u postgres psql nav -P format=unaligned -q -t -c \"SELECT path || '/' || filename FROM rrd_file\"\n      }\n\n      list_nav_rrdfiles | while read RRD\n      do\n\t  TARGET=\".$RRD\"\n\t  TARGETDIR=`dirname \"$TARGET\"`\n\t  echo \"mkdir -p \\\"$TARGETDIR\\\"\"\n\t  echo \"rm -f \\\"$TARGET\\\"\"\n\t  echo \"cat << EOF | rrdtool restore - \\\"$TARGET\\\"\"\n\t  rrdtool dump $RRD\n\t  echo \"EOF\"\n      done\n\n2. On the new NAV-server, run the following:\n\n   .. code-block:: bash\n\n      cd /\n      ssh root@oldnavserver /root/migrate-rrd.sh | bash\n\n   This will make the old NAV server produce a stream of shell commands to\n   load RRD files from XML and put these in the same paths as the originals.\n   Piping these commands to a `bash` shell will execute them on the new\n   server.\n\n   .. warning:: Yes, we know this is an ugly hack; make sure you make a backup\n                of everything, **don't run this as root** if you can help it,\n                and don't blame us if anything goes wrong.\n\n\n***********\nLimitations\n***********\n\n.. _rrd-migration-data-archives-mismatch:\n\nData archives\n~~~~~~~~~~~~~\n\nWhat _rrdtool refers to as a Round Robin Archive (RRA) corresponds to what\nWhisper_ calls a \"retention archive\". Each archive stores data points at a\nspecific time resolution, for a specific period of time.\n\nConventional wisdom says \"recent data is more interesting than old data\",\nmeaning one wants high resolution on recent data, but low resolution on old\ndata is OK. The convention is to have multiple archives covering increasing\nperiods of time with decreasing resolution.\n\nNAV ships with a Graphite/Carbon config file with recommended storage schemas\nfor NAV data. The precisions and lengths of the defined retention archives\nwill in some instances deviate from those used in NAV 3's RRD files; some data\nwill be stored at higher precision in NAV 4 compared to NAV 3.\n\nFor practical resons, the conversion tool will mirror the RRAs in RRD files as\nretention archives in the Whisper files it creates, regardless of this\nconfiguration. However, the highest precision archives are important, so if\nthe recommended precision in NAV 4 is higher than what the old RRD file\nprovides, the tool will create a higher precision archive and interpolate data\nfrom RRD into this.\n\nAny new metrics collected by NAV will be subject to the storage schemas\nconfigured in Carbon.\n\nWhisper comes with `command line tools`_ for altering/adding retention\narchives in existing Whisper files, if you wish to make changes\nafter-the-fact. A common wish is to retain data for longer periods than the\ndefault - these tools would enable that.\n\n\nAggregation methods\n~~~~~~~~~~~~~~~~~~~\n\nWhat _rrdtool refers to as \"consolidation functions\" corresponds to what\nWhisper_ calls \"aggregation methods\".\n\nIn an RRD file, consolidation functions are an attribute of each RRA, meaning\nyou can have multiple, overlapping archives which consolidate data points in\ndifferent ways. In Whisper, the aggregation method is an attribute of the\nWhisper file itself.\n\nNAV 3 may have RRD files with overlapping archives to include `maximum` and\n`average` consolidation of the same data points. The default of the NAV 4\nGraphite setup is to use the `average` aggregation for Whisper files. The\nconversion tool will therefore only extract the average values from the RRD\nfiles.\n\n\nNetwork interface counter discontinuities\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNAV 3's RRD files use DERIVE-based data sources for interface counters (octet,\npacket and error counters, etc.), meaning the values stored in the RRD files\nare the actual traffic data rates. Whisper does not support DERIVE-type\ncalculations at insert time, so NAV 4 will instead store the raw counter\nvalues in Graphite, and convert to rates when presenting graphs/data.\n\nThe rates stored in RRD files will therefore be converted to absolute counter\nvalues when inserted into the corresponding Whisper files. Unless there is a\ngap between the converted data and the new data collected by NAV 4, this may\nresult in huge spikes in your graphs at the point in time you converted.\n\n\nEnvironmental sensor precision changes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSome environmental sensor values are reported at a specific decimal precision.\n\nNAV versions prior to 4.0 would configure Cricket to store raw values into the\nRRD files (meaning a Celsius temperature value of 314 with a precision of 1\nwould be stored as 314, not as 31.4, which is the actual temperature value).\n\nNAV 4.0 will scale the values according to their precision before storing in\nGraphite. The conversion tool will, however, not scale old values from RRD\nfiles. Any sensor metric graphs with a decimal precision point will have a\nvisible scale-related jump at the point in time you converted.\n\n\n.. _Whisper: https://graphite.readthedocs.org/en/latest/whisper.html\n.. _`command line tools`: https://github.com/graphite-project/whisper\n.. _rrdtool: http://oss.oetiker.ch/rrdtool/\n"
  },
  {
    "path": "doc/howto/mod_auth_mellon_feide.rst",
    "content": "================================================================================================================\nAuthenticating with the apache plugin `mod_auth_mellon <https://github.com/latchset/mod_auth_mellon>`_ and Feide\n================================================================================================================\n\nHighly recommended: turn on debug logging while setting things up!\n\nIn ``/etc/nav/logging.conf`` in the section ``[levels]``, set ``nav.web.auth``\nto ``DEBUG``. The relevant log to keep an eye on will depend on how apache2 is\nrunning NAV, if it's using ``uwsgi`` the file is probably\n``/var/log/uwsgi/nav/nav.log``.\n\nEnabling the plugin on Debian\n=============================\n\nFirst check if the plugin is already installed and enabled::\n\n    $ sudo apache2ctl -M | grep mellon\n      auth_mellon_module (shared)\n\nIf it is, go straight to :ref:`configuration <mellon_feide_howto_configuration>`.\n\nIf not:\n\nInstall the plugin::\n\n            $ sudo apt install libapache2-mod-auth-mellon\n\nThis should create the following files::\n\n    /etc/apache2/mods-available/auth_mellon.conf\n    /etc/apache2/mods-available/auth_mellon.load\n    /etc/apache2/mods-enabled/auth_mellon.conf\n    /etc/apache2/mods-enabled/auth_mellon.load\n\nEnable with::\n\n    $ sudo a2enmod auth_mellon\n\nDisable with::\n\n    $ sudo a2dismod auth_mellon\n\n.. _mellon_feide_howto_configuration:\nFiles needed\n============\n\nMake a directory ``/etc/apache2/mellon`` on the NAV host. This will contain the\nkeys, certificates and metadata.\n\nYou need to download the idp metadata.\n\n* `Test metadata <https://idp-test.feide.no/simplesaml/saml2/idp/metadata.php>`_\n* `Production metadata <https://idp.feide.no/simplesaml/saml2/idp/metadata.php>`_\n\nSave the file as ``/etc/apache2/mellon/idp-metadata.xml``.\n\nThe easiest way to create the sp metadata is with the command\n``mellon_create_metadata``. Stand in ``/etc/apache2/mellon`` and run::\n\n    mellon_create_metadata https://DOMAINNAME https://DOMAINNAME/mellon\n\nThis will output a summary and create three files: ``https_DOMAINNAME.cert``,\n``https_DOMAINNAME.key`` and ``https_DOMAINNAME.xml``. You can edit the\nxml-file if needed.\n\nFeide Kundeportal configuration\n===============================\n\nYou will need to ask somebody with the correct access-rights at `Feide\nkundeportal <https://kunde.feide.no>`_ for your organization to create\na service and a SAML 2.0 configuration for that service. Configurations are\nlocked to a specific NAV domain name and user group and cannot be shared. If\nthe domainname is updated the Feide and Apache2-configurations will need to be\nupdated as well.\n\nThe Feide admin will need:\n\n* A name for the service, we recommend: \"NAV: domainname\" or \"NAV: your organization\".\n* An url to redirect to after login, this is the domainname followed by\n  a relative url that is *not served by NAV*. We use ``/mellon`` in this howto.\n* A copy of ``https_DOMAINNAME.xml``, to use in the SP metadata field.\n\nAlso, the ``userid-feide`` scope needs to be turned on at\n*User information > Personal information*.\n\nApache2 Configuration\n=====================\n\nApache virtual host configuration::\n\n    <Location />\n        .\n        .\n\n        AuthType mellon\n        Require valid-user\n\n        MellonEnable \"auth\"\n        MellonSecureCookie On\n        MellonUser \"eduPersonPrincipalName\"\n        MellonMergeEnvVars On\n        #MellonSessionIdleTimeout 28800  # auto logout after 8 hours\n        MellonSPMetadataFile /etc/apache2/mellon/https_DOMAINNAME.xml\n        MellonSPPrivateKeyFile /etc/apache2/mellon/https_DOMAINNAME.key\n        MellonSPCertFile /etc/apache2/mellon/https_DOMAINNAME.cert\n        MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml\n    </Location>\n\n    <Location /mellon>\n        SetHandler none\n        AuthType mellon\n        Require valid-user\n\n    </Location>\n\n    <Location /index/logout>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /about>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /refresh_session>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /api>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /doc>\n        AuthType None\n        Require all granted\n    </Location>\n\nNote the location block ``<Location />``. The \"Require\"-line replaces any other\n\"requires\" already there. This locks down the entire site. We haven't found\na way with this plugin to do it any other way.\n\nThe second location block (``<Location /mellon>``) just needs to be a relative\nurl that is not in use by anything else, this is used by the plugin as its\nendpoint.\n\nThe third location block (``<Location /index/logout>``) is the url that must be\nvisited before the plugin redirects to the IDP for logout.\n\nThe remaining location blocks are either public urls (``/doc``, ``/about``),\nparts of NAV that has its own authentication system (``/api``), or must not be\nunder the control of the plugin for the web frontend to correctly function\n(``/refresh_session``). If you have added extra pages or apps to the nav-server\nthat will not use the NAV auth system you need to mark their urls similarly.\n\nNote that ``MellonSessionIdleTimeout`` has been commented out. Not all versions\nof mod-auth-mellon support this configuration flag.\n\nRestricting access by affiliation\n---------------------------------\n\nA Feide-user has one or more affiliations like \"student\", \"employee\" or \"staff\".\nIf it is necessary to restrict access by affiliation it is necessary to amend\nthe apache config file. Just below ``MellonMergeEnvVars`` add::\n\n    MellonRequire \"eduPersonAffiliation\" \"staff\" \"other_affiliation\"\n\nProvided debug-logging has been turned on you can see exactly which\naffiliations are available. Look for a line containing\n\"MELLON_eduPersonAffiliation\".\n\nThere must be one or more quoted strings after \"eduPersonAffiliation\".\n\nNAV configuration\n=================\n\n``webfront.conf``::\n\n    [remote-user]\n    enabled = yes\n    varname = REMOTE_USER\n    post-logout-redirect-url = /mellon/logout?returnTo=/\n\n\"mellon\" in the ``post-logout-redirect-url`` points to the same place as the\n``<Location /mellon>``-block in the apache configuration. This is hardcoded in\nthe SP metadata as well.\n\nGotchas\n=======\n\nWhen this is in use, local users like \"admin\" will no longer be available.\nTherefore, either:\n\n* *before* enabling the plugin create a user that will use OIDC to login then\n  set that user as admin\n* *after* enabling the plugin set a user as admin via the CLI user script,\n  ``navuser``\n"
  },
  {
    "path": "doc/howto/mod_auth_openidc_feide.rst",
    "content": "===================================================================================================================\nAuthenticating with the apache plugin `mod_auth_openidc <https://github.com/zmartzone/mod_auth_openidc>`_ and Feide\n===================================================================================================================\n\nEnabling the plugin on Debian\n=============================\n\nFirst check if the plugin is already installed and enabled::\n\n    $ sudo apache2ctl -M | grep openid\n      auth_openidc_module (shared)\n\nIf it is, go straight to :ref:`configuration <openidc_feide_howto_configuration>`.\n\nIf not:\n\nInstall the plugin::\n\n    $ sudo apt install libapache2-mod-auth-openidc\n\nThis should create the following files::\n\n    /etc/apache2/mods-available/auth_openidc.conf\n    /etc/apache2/mods-available/auth_openidc.load\n    /etc/apache2/mods-enabled/auth_openidc.conf\n    /etc/apache2/mods-enabled/auth_openidc.load\n\nEnable with::\n\n    $ sudo a2enmod auth_openidc\n\nDisable with::\n\n    $ sudo a2dismod auth_openidc\n\n\n.. _openidc_feide_howto_configuration:\nFeide Kundeportal configuration\n===============================\n\nYou will need to ask somebody with the correct access-rights at `Feide\nkundeportal <https://kunde.feide.no>`_ for your organization to create an\nOpenID Connect-configuration. Configurations are locked to a specific NAV\ndomain name and user group and cannot be shared. If the domainname is updated\nthe Feide and Apache2-configurations will need to be updated as well.\n\nThe Feide admin will need:\n\n* A name for configuration, we recommend: \"NAV: domainname\" or \"NAV: your organization\".\n* An url to redirect to after login, this is the domainname followed by\n  a relative url that is *not served by NAV*. We use ``/oidc`` in this howto.\n\nAlso, the ``userid-feide`` scope needs to be turned on at\n*User information > Personal information*.\n\nApache2 Configuration\n=====================\n\nApache virtual host configuration::\n\n    <Location />\n        .\n        .\n\n        AuthType openid-connect\n        Require valid-user\n    </Location>\n\n    <Location /oidc>\n        SetHandler none\n        AuthType openid-connect\n        Require valid-user\n    </Location>\n\n    <Location /index/logout>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /about>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /refresh_session>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /api>\n        AuthType None\n        Require all granted\n    </Location>\n\n    <Location /doc>\n        AuthType None\n        Require all granted\n    </Location>\n\n    OIDCProviderMetadataURL https://auth.dataporten.no/.well-known/openid-configuration\n    OIDCClientID SOME-UUID\n    OIDCClientSecret SOME-OTHER-UUID\n    OIDCRedirectURI https://DOMAINNAME/oidc/\n    OIDCCryptoPassphrase LONGRANDOMSTRING\n    OIDCRemoteUserClaim https://n.feide.no/claims/eduPersonPrincipalName\n    OIDCScope \"openid userid-feide\"\n\nNote the location block ``<Location />``. The \"Require\"-line replaces any other\n\"requires\" already there. This locks down the entire site. We haven't found\na way with this plugin to do it any other way.\n\nThe second location block (``<Location /oidc>``) just needs to be a relative\nurl that is not in use by anything else, this is used by the plugin as its\nendpoint.\n\nThe third location block (``<Location /index/logout>``) is the url the plugin\nredirects to after logout.\n\nThe remaining location blocks are either public urls (``/doc``, ``/about``),\nparts of NAV that has its own authentication system (``/api``), or must not be\nunder the control of the plugin for the web frontend to correctly function\n(``/refresh_session``). If you have added extra pages or apps to the nav-server\nthat will not use the NAV auth system you need to mark their urls similarly.\n\n```OIDCClientID`` needs to be set to the fixed generated *client id*, while\n``OIDCClientSecret`` needs to be set to the changeable ``client secret``. Both\nare to be found in `Feide Kundeportal <https://kunde.feide.no>`_.\n\n``OIDCRedirectURI`` is the domain name of the NAV instance as a URI, suffixed\nwith the plugin's magic endpoint url, in this case ``/oidc/``. This url needs\nto be registered at the Feide dashboard as a redirect URI under\n*Redirect URI after login*.\n\n``OIDCCryptoPassphrase`` is used as a seed and should be kept secret.\n\n``OIDCOAuthRemoteUserClaim`` is what information will be used as the username.\nThe exact claim may change.\n\n``OIDCScope`` must at minimum contain ``\"openid userid-feide\"``, remember the\nquotes.\n\nNAV configuration\n=================\n\n``webfront.conf``::\n\n    [remote-user]\n    enabled = yes\n    varname = REMOTE_USER\n    logout-url = /oidc/?logout=\n    workaround = feide-oidc\n    autocreate = off\n\n\"oidc\" in the ``logout-url`` points to the same place as the\n``<Location /oidc>``-block in the apache configuration and the redirect URI in\nthe Feide dashboard.\n\nBy toggling autocreate to \"on\", users are automatically created on first login\nvia OIDC. This is probably not what you want, which is why the default is\n\"off\". With it \"off\" it is necessary to pre-create the users in order to allow\nlogin.\n\nGotchas\n=======\n\nWhen this is in use, local users like \"admin\" will no longer be available. Therefore, either:\n\n* *before* enabling the plugin create a user that will use OIDC to login then\n  set that user as admin\n* *after* enabling the plugin set a user as admin via the CLI user script, ``navuser``\n"
  },
  {
    "path": "doc/howto/securing-nav-in-production.rst",
    "content": "==========================\nSecuring NAV in production\n==========================\n\nOverview\n========\n\nThe default configuration of NAV is set up to work well during development, but\nneeds to be tightened when running in production.\n\nNAV consists of pages controlled by NAV itself, and pages served directly by\nthe web server. Security features for NAV's own pages are controlled via the\n``[security]``-section in the file :file:`webfront/webfront.conf`, while\nsecurity for the other pages are controlled directly by the web server.\n\n\nSSL/TLS\n=======\n\nThis needs to be turned on in the webserver itself. While there is no reason to\nserve any of NAV without SSL/TLS turned off, it is especially important for the\npages controlled by NAV.\n\nWhen the server serves NAV with SSL/TLS, ensure that the ``needs_tls``-flag in\nthe ``[security]``-section is set to ``yes``. This explicitly turns on secure\ncookies, which is dependent on SSL being in use.\n"
  },
  {
    "path": "doc/howto/setting-up-logging.rst",
    "content": "===============================\nControlling log output from NAV\n===============================\n\nOverview\n========\n\nAll NAV subsystems will produce logs about what's going on at any given time.\nBy default, all NAV daemons will send all log records to the file system.  Log\nfiles from individual subsystems are created in the directory configured by the\n``LOG_DIR`` configuration option in :file:`nav.conf`.\n\nThe notable exception to this rule is NAV's web subsystem, which is defined as\na WSGI application.  The WSGI application usually runs inside a web server or a\nseparate WSGI application container, and will by default print all log lines to\nits standard error file descriptor.  It is entirely up to the web/application\nserver to decide where this output is directed (in a typical Apache setup with\n``mod_wsgi``, the logs are sent to Apache's defined error log file for the\nspecific ``VirtualHost``).\n\nControlling log levels\n======================\n\nNAV employs `Python's standard logging facility\n<https://docs.python.org/3/library/logging.html>`_, and utilizes a hierarchy of\nlog handlers for different parts of the codebase.  Most NAV log handlers will\nbe named after the Python module that uses it, meaning that the log handler\nhierarchy will usually correspond to the Python module hierarchy rooted at\n``nav``.\n\nAll emitted log records will have one of 5 different log levels: **DEBUG**,\n**INFO**, **WARNING**, **ERROR** or **CRITICAL**.  NAV's default logging configuration\nwill only emit log records of level **INFO** or higher.\n\nFor most NAV usage, leaving the level at **INFO** is fine.  If, however, you need\nto debug a problem or at least get more details out of a specific NAV\nsubsystem, the log levels of the log handler hierarchy can be controlled\nthrough the configuration file :file:`logging.conf`, whose defaults look like this:\n\n   .. literalinclude:: ../../python/nav/etc/logging.conf\n\nAs you can see, this sets the log level of NAV's top-level logger ``nav`` to\n*INFO*.  Since the loggers operate in a hierarchy, this level now also applies\nto loggers like ``nav.ipdevpoll`` or ``nav.eventengine.queue`` (unless they\nhave been configured with their own explicit log levels).\n\nIf you wish to enable **DEBUG** level logging, it's usually *not recommended*\nto set ``nav = DEBUG`` in the ``[levels]`` section: This will cause all parts\nof NAV to log in extreme detail, in all log files.  Rather, if you wish to\nspecifically have debug logging from :program:`ipdevpoll`, you can set\n``nav.ipdevpoll = DEBUG``.  This may be OK if you don't know which part of\n:program:`ipdevpoll` you are interested in debugging, but it is still going to\nbe extremely verbose.  If you only wish to get debug details on which plugins\nare selected and run for single jobs, you might want to only set\n``nav.ipdevpoll.jobs.jobhandler = DEBUG``.\n\n.. note:: Changes to :file:`logging.conf` will not take immediate effect.\n          Running NAV processes must either be restarted or sent a ``SIGHUP``\n          signal for the configuration file to be re-read.  For the WSGI web\n          application, this usually means reloading or restarting the web or\n          application server.\n\n\nControlling which files logs are sent to\n========================================\n\nThe :file:`logging.conf` configuration file also contains a ``[files]``\nsection, which can be used to set up individual log handlers in NAV's hierarchy\nto log to specific files (in addition to wherever the logs are already ending\nup).  As the example in the default configuration file implies, this can\ne.g. be used to get parts of the web application to log to bespoke files, not\njust to the web servers log output.\n\nEnabling the example ``nav.web.portadmin = portadmin.log`` will duplicate all\nlog output from the PortAdmin web tool into the :file:`portadmin.log` file, in\nthe directory configured by the :file:`nav.conf` ``LOG_DIR`` option.\n\n\nUsing different logging config for individual programs\n======================================================\n\nWhile all NAV programs will look for :file:`logging.conf` in NAV's default\nconfiguration file directories, you can run individual NAV programs with an\nexplicit logging configuration file that is separate from the standard one.\n\nA typical usage scenario might be that you want to run a single\n:program:`ipdevpoll` job with more debug logging, without having the logging\nconfiguration changes affect the :program:`ipdevpolld` daemon running all your\njobs in the background.  This can be achieved by setting the\n:envvar:`NAV_LOGGING_CONF` environment variable to point to a different logging\nconfig file before running :program:`ipdevpolld` from the command line.\n\n.. code-block:: console\n\n  $ cat > /tmp/logging.conf <<EOF\n  [levels]\n  nav = INFO\n  nav.ipdevpoll.plugins.system = DEBUG\n  EOF\n  $ export NAV_LOGGING_CONF=/tmp/logging.conf\n  $ ipdevpolld -J inventory -n example-sw\n  2023-08-11 13:41:32,124 [INFO nav.ipdevpoll] --- Starting ipdevpolld inventory ---\n  2023-08-11 13:41:35,130 [INFO plugins] Imported 31 plugin classes, 31 classes in plugin registry\n  2023-08-11 13:41:35,130 [INFO nav.ipdevpoll] Running single 'inventory' job for example-sw.example.org\n  2023-08-11 13:41:35,888 [WARNING nav.mibs.hpicf_powersupply_mib.hpicfpowersupplymib] [inventory example-sw.example.org] Number of power supplies in ENTITY-MIB (1) and POWERSUPPLY-MIB (0) do not match\n  2023-08-11 13:41:35,892 [WARNING nav.mibs.hpicf_fan_mib.hpicffanmib] [inventory example-sw.example.org] Number of fans in ENTITY-MIB (2) and FAN-MIB (0) do not match\n  2023-08-11 13:41:35,894 [DEBUG plugins.system.system] [inventory example-sw.example.org] sysDescr: 'ProCurve J4900B Switch 2626, revision H.08.98, ROM H.08.02 (/sw/code/build/fish(ts_08_5))'\n  2023-08-11 13:41:35,894 [DEBUG plugins.system.system] [inventory example-sw.example.org] Parsed version: H.08.98\n  2023-08-11 13:41:35,894 [DEBUG plugins.system.system] [inventory example-sw.example.org] found a pre-existing chassis: Chassis/ENTITY-MIB (CN650SE0GJ)\n  $\n\nRotating logs\n=============\n\nNAV does not provide its own log rotation.  If you wish to rotate NAV's log\nfiles using an external tool like :program:`logrotate`, you must remember to\nconfigure it to send a ``SIGUP`` signal to each NAV daemon as its log file is\nbeing rotated, or the daemon will continue to write logs to a rotated/deleted\nfile.\n\nIf installing NAV from the Debian packages provided by Sikt, log rotation\nthrough :program:`logrotate` is already provided for you (but you can change\nthe rotation rules as you see fit).\n\n\nAdvanced logging configuration\n==============================\n\nWhile a few simple use-cases for logging configuration are supported by\n:file:`logging.conf`, much more advanced things can be achieved using the\nalternative logging configuration file :file:`logging.yml`.  Doing this on your\nown, however, usually requires that you know your way around Python and have\nextensive knowledge of how the standard Python logging framework works.\n\n:file:`logging.yml` is read and parsed as a Python dictionary, using\n:func:`logging.config.dictConfig()`, right after :file:`logging.conf` is read\nand parsed.  This means that :file:`logging.yml` must adhere to the\nconfiguration dictionary schema laid out in the Python docs.\n\nBe aware that by adding configuration to :file:`logging.yml`, you are altering\nNAV's default logging configuration at a very low level, and you may also be\naltering NAV's default behavior of storing logs in files. A :file:`logging.yml`\nthat replicates a default NAV setup may look something like this:\n\n.. code-block:: yaml\n\n   version: 1\n   loggers:\n     nav:\n       level: INFO\n     root:\n       handlers: [console]\n\n   formatters:\n     default:\n       format: '%(asctime)s [%(levelname)s] [%(name)s] %(message)s'\n\n   handlers:\n     console:\n       class: logging.StreamHandler\n       formatter: default\n\nThis replicates a setup that logs only **INFO**-level messages and above from\nNAV to ``stderr``, using NAV's default log message format.  Individual NAV\ndaemons will redirect their ``stderr`` streams to their respective log files as\nthey fork off background processes, so there is no need to redefine these.\n\nLeaving out the :class:`logging.StreamHandler` will still cause the log files\nto be created, but they will be empty (save for any outpout to ``stderr`` that\ndid not come from the :mod:`logging` library).\n\n.. tip:: As with :file:`logging.conf`, processes can be directed to read a\n         bespoke :file:`logging.yml` file, but by setting the\n         :envvar:`NAV_LOGGING_YML` environment variable instead.\n\nExample: Directing logs to Falcon LogScale (Humio)\n--------------------------------------------------\n\nThe following example shows how you can make all NAV programs ship their log\nmessages to a Falcon LogScale (previously known as Humio) ingestor using\nsomething like the `humiologging <https://pypi.org/project/humiologging/>`_\nlibrary.  Instead of shipping the file-based logs to LogScale and having them\nparsed there, each log record can be shipped with structured attributes/tags.\n\nTo achieve something like this, you need to first install the\n:mod:`humiologging` library into your NAV installation's Python environment\n(e.g. :code:`pip install humiologging`), and then create a :file:`logging.yml`\nsimilar to this:\n\n\n.. code-block:: yaml\n\n   version: 1\n   loggers:\n     nav:\n       level: DEBUG\n     root:\n       handlers: [humio, console]\n\n   formatters:\n     default:\n       format: '%(asctime)s [%(levelname)s] [%(name)s] %(message)s'\n\n   handlers:\n     humio:\n       class: humiologging.handlers.HumioJSONHandler\n       level: DEBUG\n       humio_host: https://your-humio-ingest-addr-here\n       ingest_token: SECRET_TOKEN_THINGY\n     console:\n       class: logging.StreamHandler\n       formatter: default\n\n\nThis configuration attaches a :class:`HumioJSONHandler` to the ``root`` logger\nand sets the global NAV log level to **DEBUG**.  Unfortunately, as this\nconfiguration manipulates the ``root`` logger, it removes the handler(s) that\nNAV has by default installed on it, so if you want NAV to also keep logging to\nfiles in addition to Humio, you need to replicate parts of NAV's default setup,\nas mentioned in the previous section.  Add an extra handler named ``console``\nthat logs to a stream (``stderr`` by default), and specify a format for it.\n\n"
  },
  {
    "path": "doc/howto/using_the_api.rst",
    "content": "===========\nThe NAV API\n===========\n\nAbout\n=====\n\nThe NAV API gives access to NAV's data without needing to connect to the\ndatabase. You need a token and some way of sending an https request and you're\ngood to go.\n\n\nTokens\n======\n\nAuthentication and authorization is done by tokens. A token gives you access to\nzero or more endpoints and read or read and write permissions. *Not all endpoints\nsupport write operations*.\n\n\nHow to get a token\n------------------\n\nTokens are administrated from the ``User and API Administration`` page in NAV.\n\n.. _classic-token:\nHow to use the token\n--------------------\n\nThe token needs to be included in all your requests. To test that your token is\nworking, use curl::\n\n  curl -H 'Authorization: Token <token>' https://<host>/api/netboxes/\n\nAs you see, we use the ``Authorization`` header field to include the token. When\ndoing your requests, make sure to add the header field to all requests.\n\n**NB: These requests should never, ever be done unencrypted.** Do not use this\non NAV installations that do not have SSL enabled, you are potentially giving\neveryone access to the data.\n\n.. _jwt-token:\nJSON Web Tokens\n------------------\nJSON Web Tokens (JWTs) must be :ref:`configured <jwt-configuration>` before they can be used.\n\nOnce configured, you can use tokens issued by your configured issuers in almost the same way\nas :ref:`classic tokens <classic-token>`::\n\n  curl -H 'Authorization: Bearer <token>' https://<host>/api/netboxes/\n\nNote how JWTs require the prefix ``Bearer`` and not ``Token``.\n\nJWTs must include valid ``exp``, ``nbf``, ``iss`` and ``aud`` claims in order to be valid.\n``iss`` and ``aud`` must match the :doc:`configuration <../reference/jwt>`, while ``exp`` must\nbe in the future and ``nbf`` must be in the past.\n\nThe ``endpoints`` and ``write`` claims are optional claims that are used to determine what\nresources the token has access to.\nThe ``endpoints`` claim should contain a list of endpoints that the token has access to.\nIf ``endpoints`` is an empty list or omitted, the token will not have access to any endpoints.\nThe ``write`` claim should be a boolean indicating whether the token has write access to the endpoints.\nIf ``write`` is ``false`` or omitted, the token will only have read access to the endpoints listed in ``endpoints``.\n\n\nLocally issued JSON Web Tokens\n------------------------------\nLocal JSON Web Tokens (JWTs) must be :ref:`configured <local-jwt-configuration>` before they can be used.\n\nNAV supports generating JWT tokens for local use, as opposed to tokens generated externally.\nYou can generate refresh tokens via the frontend which can be used to obtain access tokens\nthat can be used as described :ref:`above <jwt-token>`.\n\nIn order to create access tokens you must use the refresh token endpoint, which is available at ``/api/jwt/refresh/``.\nThe endpoint takes a JSON object with a single key, ``refresh_token``, which should contain the\ntoken you wish to use::\n\n  curl -X POST -H \"Content-type: application/json\" http://localhost:80/api/jwt/refresh/ -d '{\"refresh_token\": \"<refresh_token>\"}'\n\nThe response will contain an access token and a new refresh token::\n\n  {\"refresh_token\": \"<new_refresh_token>\", \"access_token\": \"<new_access_token>\"}\n\nRefresh tokens can only be used once, so the next time you need a new access token,\nyou should use the new refresh token provided in the response.\n\n\nBrowsing the API\n================\n\nThe NAV API currently only outputs JSON formatted data. Other output formats may\nbe included in the future.\n\nThe API is semi-browsable with a browser. As it uses the token to authenticate\nand authorize, you need to find a way to include that in your browser\nrequests. If you use Chrome this can be used with the extension\n``ModHeader``. As the output is JSON and not HTML, we also recommend the\nextension ``JSON Formatter`` or similar.\n\n\nAvailable endpoints\n-------------------\n\nThe available endpoints is listed if you go to the root of the api -\n``/api/``. These endpoints are:\n\n- \"alert\": \"http://<host>/api/alert/\"\n- \"arp\": \"http://<host>/api/arp/\"\n- \"cam\": \"http://<host>/api/cam/\"\n- \"room\": \"http://<host>/api/room/\"\n- \"netbox\": \"http://<host>/api/netbox/\"\n- \"interface\": \"http://<host>/api/interface/\"\n- \"prefix\": \"http://<host>/api/prefix/\"\n- \"prefix_usage\": \"http://<host>/api/prefix/usage\"\n- \"prefix_routed\": \"http://<host>/api/prefix/routed\"\n\nThese endpoints will give list output limited by page size and any optional\nsearch or filter parameters (more about that below).\n\nThe :doc:`endpoint parameters <api_parameters>` are separately documented.\n\n\nPaging\n------\n\nThe API supports paging of results. The current default maximum number of\nresults from a query is 100. If the query returns more than that, it will\nprovide a link to the next page of results.\n\nYou can specify the number of results on a page by setting the ``page_size``\nparameter in your request.\n\n\nSearching and filtering\n-----------------------\n\nThe API supports searching and filtering of data. A search is different from\na filter in that a filter is more specific.\n\nSearching\n^^^^^^^^^\n\nSearching is done by using the parameter ``search``::\n\n  /api/netbox/?search=something\n\nThe fields used in the search are determined by the NAV developers. An effort to\ndetermine sane search fields has been done, but if you notice strange search\nresults please notify us so we can correct it.\n\nFiltering\n^^^^^^^^^\n\nA filter is more specific than a search in that you explicitly define what field\nyou are using and exactly the value it should have::\n\n  /api/netbox/?category=GSW\n\nAt the moment there is no way of specifying wildcards in the filter.\n\n\nUsing POST, PUT, PATCH and DELETE\n---------------------------------\n\nTo use these request methods you need a write-enabled token. Go to ``User and API\nAdministration`` to set token attributes.\n\nCRUD-methods are enabled for a limited number of endpoints. These endpoints can\nbe found by querying the endpoint with the ``OPTIONS`` header and see if POST is\nin the ``Allow`` header. You will also see what fields are required.\n\nPOST\n^^^^\n\nUsed to create new entries. Operates on the list of entries::\n\n  curl -i -H 'Content-Type: application/json' -H 'Authorization: Token <token>' -XPOST 'http://localhost/api/1/netbox/' -d '{\n        \"ip\": \"158.38.xxx.xxx\",\n        \"roomid\": \"teknobyen\",\n        \"organizationid\": \"uninett\",\n        \"categoryid\": \"SW\",\n        \"snmp_version\": 2}'\n\n\nPUT\n^^^\n\nUsed on single entries to create or update. PUT needs all required fields for\neach request::\n\n  curl -i -H 'Content-Type: application/json' -H 'Authorization: Token <token>' -XPUT 'http://localhost/api/1/room/<id>/' -d '{\"id\": \"<id>\", \"location\": \"trondheim\"}'\n\nPATCH\n^^^^^\n\nUsed to update single entries::\n\n  curl -i -H 'Content-Type: application/json' -H 'Authorization: Token <token>' -XPATCH 'http://localhost/api/1/netbox/<id>/' -d '{\"roomid\": \"teknobyen\"}'\n\nDELETE\n^^^^^^\n\nUsed to delete single entries::\n\n  curl -i -H 'Authorization: Token <token>' -XDELETE 'http://localhost/api/1/netbox/<id>/'\n\n\n\nA specific scenario\n-------------------\n\nWe want to know the interface a computer is connected to right now. We have the\nip-address of the computer.\n\nFirst find the correct arp object::\n\n  /api/arp/?ip=10.1.1.1&active=true\n\n  {\n    \"count\": 1,\n    \"next\": null,\n    \"previous\": null,\n    \"results\": [\n      {\n        \"id\": 996604,\n        \"netbox\": 35,\n        \"prefix\": null,\n        \"sysname\": \"sysname.no\",\n        \"ip\": \"10.1.1.1\",\n        \"mac\": \"00:00:00:00:00:00\",\n        \"start_time\": \"2014-04-24T15:00:43.712\",\n        \"end_time\": \"9999-12-31T23:59:59.999\"\n      }\n    ]\n  }\n\nThe active parameter specifies that we only want results that are active\nnow. The result from this query gives us the mac address of the computer. We\nneed that to find the interface it is connected to::\n\n  /api/cam/?mac=00:00:00:00:00:00&active=true\n\n  {\n    \"count\": 1,\n    \"next\": null,\n    \"previous\": null,\n    \"results\": [\n      {\n        \"id\": 875800,\n        \"netbox\": 11,\n        \"sysname\": \"generic_switch.no\",\n        \"ifindex\": 229,\n        \"module\": \"\",\n        \"port\": \"A00\",\n        \"start_time\": \"2014-05-13T13:09:40.296\",\n        \"end_time\": \"9999-12-31T23:59:59.999\",\n        \"miss_count\": 0,\n        \"mac\": \"00:00:00:00:00:00\"\n      }\n    ]\n  }\n\nThis gives us access to the IP Device (netbox) id and the ifindex of the interface. We\nuse that to find the correct interface::\n\n  /api/interface/?netbox=11&ifindex=229\n\n  {\n    \"count\": 1,\n    \"next\": null,\n    \"previous\": null,\n    \"results\": [\n      {\n        \"id\": 329955,\n        \"netbox\": 11,\n        \"module\": 5996,\n        \"ifindex\": 229,\n        \"ifname\": \"A00\",\n        \"ifdescr\": \"A00\",\n        \"iftype\": 6,\n        \"speed\": 1000,\n        \"ifphysaddress\": \"01:23:45:67:89:01\",\n        \"ifadminstatus\": 1,\n        \"ifoperstatus\": 2,\n        \"iflastchange\": null,\n        \"ifconnectorpresent\": true,\n        \"ifpromiscuousmode\": false,\n        \"ifalias\": \"Some description\",\n        \"baseport\": 55,\n        \"media\": null,\n        \"vlan\": 20,\n        \"trunk\": false,\n        \"duplex\": \"f\",\n        \"to_netbox\": 85,\n        \"to_interface\": null,\n        \"gone_since\": null\n      }\n    ]\n  }\n\nWe now have the correct interface that the computer is connected to right\nnow.\n"
  },
  {
    "path": "doc/index.rst",
    "content": ".. NAV documentation master file, created by\n   sphinx-quickstart on Tue Feb  8 10:54:59 2011.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n.. _index:\n\n=================\nNAV documentation\n=================\n\nGetting help\n============\n\n* Check out our :doc:`/faq/faq`.\n\n* Search for information on our `wiki pages`_.\n\n* Post a question on `the nav-users mailing list`_ or search the\n  `nav-users mailing list archives`_.\n\n* Ask a question in our `GitHub discussion forum`_.\n\n* Report a bug in our `bug tracker`_.\n\n.. _wiki pages: https://nav.uninett.no/wiki/\n.. _nav-users mailing list archives: https://lister.sikt.no/hyperkitty/list/nav-users@lister.sikt.no/\n.. _the nav-users mailing list: https://lister.sikt.no/postorius/lists/nav-users.lister.sikt.no/\n.. _bug tracker: https://github.com/Uninett/nav\n.. _GitHub discussion forum: https://github.com/Uninett/nav/discussions/categories/q-a\n\nFirst steps\n===========\n\nSee also :doc:`the release notes <release-notes>` for this version (|version|).\n\n* **From scratch:**\n  :doc:`Overview <overview>` |\n  :doc:`Installation <intro/install>` |\n  :doc:`Getting started <intro/getting-started>` |\n  :doc:`Getting organized <intro/getting-organized>`\n\n* **Howto guides:**\n  :doc:`howto/manual-install-on-debian` |\n  :doc:`howto/installing-graphite-on-debian` |\n  :doc:`howto/commandline-utilities` |\n  :doc:`Troubleshooting topology problems <howto/debugging-topology>` |\n  :doc:`faq/graph_gaps` |\n  :doc:`Controlling log output <howto/setting-up-logging>` |\n  :doc:`Migrating data between NAV installations <howto/migrate-data>` |\n  :doc:`Using the REST API <howto/using_the_api>` |\n  :doc:`howto/migrate-rrd-to-graphite` |\n  :doc:`Robustifying e-mail <howto/email>`\n\n\n* **For developers:**\n  :doc:`Making a new release <hacking/release-procedure>` |\n  :doc:`Hacking index <hacking/index>`\n\n\nDigging deeper\n==============\n\nCheck out the :doc:`reference material index <reference/index>`.\n"
  },
  {
    "path": "doc/intro/getting-organized.rst",
    "content": "===================\n Getting organized\n===================\n\nNAV offers several ways to organize your seed data and collected information.\n\n\nOrganizing your seed data\n=========================\n\nNAV's data model allows you to organize your IP device information in several ways:\n\n* *Define physical or conceptual locations of your operation*. These usually map\n  to geographical domains, such as locations for each campus in a multi-campus\n  university.\n\n* *Define your rooms, such as server rooms and wiring closets*, where your\n  equipment is actually wired up, and organize these into each of your\n  locations. Geographical point coordinates can be attached to each room, for\n  display on a map.\n\n* *Define an organizational hierarchy*. This can be used to set which\n  organizational unit is responsible for the operation of each IP device you\n  monitor, and to map your subnets and VLANs to organizational units.\n\n* *Define arbitrary groups of devices*. Some examples: Grouping all your print\n  servers, your web servers, or just grouping your most critical routers.\n  These groups can later be used for filtering alerts.\n\nAll these definitions are entered into NAV through the *SeedDB* tool, where\nyou added your devices in the :doc:`getting started guide <getting-started>`.\nIf you already have much of this information in electronic format, it too can\nbe bulk imported into NAV using the text formats described in each SeedDB tab.\n\nAs seen in that guide, NAV ships with an example location, room and\norganizational unit. These are fine for just trying things out, but to truly\ntake advantage of NAV's capabilities and gain control of your network\ninventory, you should take spend some time *getting organized*.\n\n\nOrganizing your collected data\n==============================\n\nOnce your routers and switches are being monitored, NAV will collect\ninformation about your subnets and VLAN assignments, how these relate to each\nother, and store them in its database.\n\n\nVLANs and subnets\n-----------------\n\nNAV supports two different conventions for router port descriptions; if\nadopted, these allow NAV to categorize each VLAN into a *usage category* and\nan owner (an organizational unit from the previously defined hierarchy).\n\n`Read the guidelines in our wiki to learn how to do this\n<https://nav.uninett.no/wiki/subnetsandvlans>`_. Usage categories are also defined\nusing the SeedDB tool.\n\n\nNetwork prefixes and scopes\n---------------------------\n\nEach network prefix configured in your device's interfaces will be collected\nand stored by NAV. To the best of its ability, NAV will correlate which VLAN\ncorresponds to each prefix. Sometimes, VLANs will have multiple prefixes, in\nthe case of secondary network addresses or when both IPv4 and IPv6 are\ndeployed in a subnet.\n\nNAV features a subnet matrix tool which charts your subnet allocations and\ntheir utilization percentages. To take advantage of this, you must manually\nadd one ore more *scope prefixes* through the SeedDB *Prefix* tab. Each scope\nprefix will usually correspond to an IP address block you have been assigned\nby your regional internet registry (in some cases, you may want to subdivide\nthose further, for your own organizational purposes).\n\nYou can also add *reserved prefixes* using SeedDB. These are typically\nprefixes within your scope that aren't routed by your equipment, but possibly\nreserved for third parties or some future use. The subnet matrix tool will\nhighlight these address ranges accordingly.\n\n\n\nVendors and device types\n------------------------\n\nNAV will automatically discover and assign *device types* to SNMP-enabled\ndevices that are being monitored. Each device type corresponds to a unique\n*sysObjectID*. An SNMP-enabled device will usually report a vendor-specific\nand unique *sysObjectID*, which may map to some specific device model, type\nand/or software.\n\nEach device type in NAV is mapped to a *vendor ID*, a moniker such as\n``cisco`` or ``juniper``. You can edit your device types and vendors through\nthe SeedDB tool.\n\nWhen NAV sees a previously unknown *sysObjectID* it will automatically\nregister a new device type and attach it to the ``unknown`` vendor id. You may\nwish to later edit these auto-created device types using the SeedDB *Type*\ntab to set the correct vendor id and a more proper type name and description.\n\nVendor OUIs and MAC addresses\n-----------------------------\n\nNAV's Machine Tracker search tool allows searching logs of ARP and CAM data\ncollected from your routers and switches.  It provides an optional OUI vendor\nlookup for MAC address results.  The OUI mapping database is populated by the\n:program:`navoui` cronjob on a daily basis.  If you're on day 1 with your NAV\ninstall and do not want to wait for the cronjob to run for the first time, you\ncan run the :program:`navoui` command manually to populate the OUI table\nimmediately.\n\nCabling and patching\n--------------------\n\nIf desireable, you can also document your cabling plans and your patch panels\nusing SeedDB. This would enable NAV to tell you to which office each switch\nport is patched through to (unless you are already diligent and add this\ninformation to the switch port description when patching).\n"
  },
  {
    "path": "doc/intro/getting-started.rst",
    "content": "==========================\n Getting started with NAV\n==========================\n\nThis tutorial will show you how to start monitoring devices with your brand\nnew NAV installation.\n\nThe tutorial will refer to the web interface as |URL| - replace\nthis with whatever hostname you have configured for your NAV server.\n\n\nMinimal configuration\n=====================\n\nIf installing from source, you should have installed a copy of the default set\nof NAV configuration files to a global directory, typically :file:`/etc/nav/`,\n:ref:`as documented in the installation guide\n<initializing-the-configuration-files>`. The pre-packaged installation options\nshould already have done this for you.\n\nMost of the configuration files are documented with comments, so if you want to\nget advanced you can check each config file to see if there are any defaults\nyou'd like to change.\n\nWe recommend you **at least** change the following options in :file:`nav.conf`\nbefore running NAV:\n\n`ADMIN_MAIL`\n  Should be set to the NAV administrator's e-mail address.  Any cron\n  mail or other administrative e-mails from NAV will be sent to this\n  address.\n\n`SECRET_KEY`\n  A string of random characters that should be unique to each NAV\n  installation. This is used by the Django framework for cryptographic signing\n  in various situations. Here are three suggestions for generating a suitable\n  string of random characters, depending on what tools you have available:\n\n    1. :code:`gpg -a --gen-random 1 51`\n    2. :code:`makepasswd --chars 51`\n    3. :code:`pwgen -s 51 1`\n\n  Please see the\n  `Django secret key documentation <https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-SECRET_KEY>`_\n  if you want to know more about this.\n\n`TIME_ZONE`\n  NAV's default time zone setting is ``Europe/Oslo``. You should set this to\n  the appropriate timezone of your location, as NAV will use this for\n  generating and displaying all timestamps. Beware that this *should* match the\n  configured timezones of your PostgreSQL and Graphite-web installations as\n  well.\n\n`DOMAIN_SUFFIX`\n  The DNS domain name your devices are in.  Many parts of the web\n  interface will chop off this suffix to display abbreviated device\n  names.\n\n\nIf you installed from source, and did not use a pre-packaged version of NAV,\nyou will also want to change the directory paths used by NAV to store various\nstate files, log files and files uploaded through the web interface:\n``PID_DIR``, ``LOG_DIR`` and ``UPLOAD_DIR``.\n\n\n.. warning:: **Before adding stuff to monitor into your NAV**, you need to\n             ensure you have :ref:`properly integrated your Graphite\n             installation with your NAV installation\n             <integrating-graphite-with-nav>`, or you *will* have issues with\n             :doc:`blank areas in your graphs </faq/graph_gaps>`, which you\n             will need to resolve manually after-the-fact.\n\n\n\nStarting NAV\n============\n\nNAV has two parts; one web frontend, and a backend consisting of\nmultiple processes.  While Apache serves the frontend, the backend\nprocesses can be controlled using the :program:`nav` command.\n\nThe backend processes consist of some daemon processes, and some cron jobs.\nRunning :code:`nav start` will start all the daemon processes in the\nbackground, and install all the cron jobs in the ``navcron`` user's crontab.\n\nDepending on your OS of choice, you should configure it to run :code:`nav\nstart` on boot.\n\n\nLogging in to the web interface\n===============================\n\nWhen browsing the web interface at |URL| you will see the front page of NAV.\nThis is openly accessible to anonymous users by default.\n\nTo log in for the first time, click the :guilabel:`Login` link on the upper right of\nthe page, and enter the username \"admin\" and the default password \"admin\".  Then\nclick :guilabel:`My stuff` and :guilabel:`My account` in the navigation bar on top and\nchange the adminstrator's password to something more sensible.\n\n\nSeeding your database\n=====================\n\nNAV will *not* autodiscover the routers and switches of your network. The\nassumption is that you already have this information in some inventory\nsystem.\n\nThe *Seed Database* tool enables to you add and edit a multitude of \"seed\" information\nin the NAV database, which tells NAV what and how to monitor. The essential bit\nhere is the :term:`IP Device`, which represents your switches, routers and\nother networked devices.\n\nThe *Seed Database* tool is listed on NAV's *Toolbox* page, reachable from the\nnavigation bar on top.\n\nAdding your first management profile\n------------------------------------\n\nTo manage IP devices using SNMP, you first need to add at least one *SNMP\nmanagement profile*, to define your SNMP communication parameters. This is done\nin the :guilabel:`Management Profile` tab of *SeedDB*. Let's say most of your\ndevices can be managed using SNMP v2c and a default community string of\n``public``:\n\n1. Click the :guilabel:`Management Profile` tab and then the sub-tab\n   :guilabel:`Add new management profile`.\n2. Choose and fill out a unique name for your profile, e.g. ``Default SNMP v2c\n   read-only profile``, and optionally add a description of it.\n3. Select ``SNMP`` from the :guilabel:`Protocol` dropdown menu. An\n   :guilabel:`SNMP Configuration` form will appear to the right.\n4. Ensure ``v2c`` is selected from the :guilabel:`Version` dropdown, and put\n   ``public`` in the :guilabel:`Community` field.\n5. Click the :guilabel:`Save management profile` button to save your new\n   profile.\n\n.. image:: seeddb-add-profile.png\n\n\nNAPALM profiles\n~~~~~~~~~~~~~~~\n\nNAPALM_ management profiles can also be created. At the moment, these are only\nused by :doc:`PortAdmin </reference/portadmin>` to configure switch ports on\nJuniper switches.\n\nPlease see the :doc:`management profiles reference documentation\n</reference/management-profiles>` for more details.\n\n.. _`NAPALM`: https://napalm.readthedocs.io/en/latest/\n\n\nAdding your first device to NAV\n-------------------------------\n\nNow that you have added your first management profile, you can add your first\ndevice that uses this profile. Begin, for example, by adding one of your\nswitches:\n\n1. Click the :guilabel:`IP device` tab and then the sub-tab :guilabel:`Add new\n   IP device`\n2. Fill out your switch's IP address in the :guilabel:`IP` field, and, for now,\n   select :guilabel:`myroom` and :guilabel:`myorg` in the room and organization\n   drop-downs.\n3. Select :guilabel:`SW` in the category dropdown.  Don't worry, we'll explain\n   the categories later.\n4. Click the :guilabel:`Profiles` field. The name of your newly created SNMP\n   profile should appear: Select it. The buttow below the profile selector\n   reads :guilabel:`Check connectivity`. Click this to have NAV verify that it\n   can communicate with this device using the selected profile.\n\n.. image:: seeddb-add-ipdevice.png\n\nDuring the connectivity check, NAV will also try to detect the device's type (from its\n``sysObjectID`` value).  NAV does not require that the connectivity test is\nsuccessful, or even that the test is run, to add the device. But if the test\nfails, this means that NAV can not communicate with the device. If that happens,\nyou should verify that the IP address and the management profile details are correct.\n\nIf you want, you can add some free form text about the function of the device in\nthe function field, put the device into one or more relevant groups, and even\nassign custom attributes to it. These attributes will be used when NAV presents\ninformation about the device.\n\nClick on :guilabel:`Save IP device` to finalize your entry of this device into\nNAV's database.\n\n.. note:: You can, in fact, add multiple management profiles to your devices,\n          but at the moment, this is only useful to distinguish between\n          profiles that will grant read-only SNMP access and profiles that will\n          grant read-write access.\n\n\nVerifying that collection is working\n------------------------------------\n\nWithin two minutes, NAV's :doc:`SNMP collection engine </reference/ipdevpoll>` should launch a job to poll\nyour newly added device for information. The navigation bar on top features a\nsearch field; search for your newly entered device's IP address or DNS name to\nshow its :guilabel:`IP Device Info` page. The resulting page should look something like\nthis:\n\n.. image:: ipdevinfo-switch-display.png\n   :scale: 50%\n\nThe :guilabel:`IP Device Info` page will try to display every bit of pertinent\ninformation about a monitored device.  For now, the key information here is\nthe :guilabel:`Last updated` field of the top-left detail panel.  Keep reloading the\npage until its value changes from ``N/A`` into a meaningful timestamp.\n\n.. NOTE:: If no new information appears on this page within three minutes\n          after adding your switch to NAV, you may need to start\n          troubleshooting NAV's log files.\n\n.. _selecting-a-device-category:\n\nSelecting a device category\n---------------------------\n\nWhen adding an IP device to NAV, you must select one of the predefined device\ncategories:\n\n`GW`\n  Your basic layer 3 router\n\n`GSW`\n  An L3 switch (a routing switch)\n\n`SW`\n  A regular switch\n\n`EDGE`\n  An edge switch. Use this category only if you do not want NAV to collect\n  traffic statistics from its switch ports.\n\n`SRV`\n  A server.\n\n`WLAN`\n  A wireless access point or controller of some sort.\n\n`ENV`\n  An environmental probe, possibly measuring temperatures, humiditiy, etc. If\n  NAV has support for the probe, its measurements will be displayed in the\n  room view for the room the device was registered in.\n\n`POWER`\n  Power distribution and measurement equipment, UPS units and so forth.\n\n`OTHER`\n  Any other type of device not fitting neatly into the other categories.\n\nAll categories will *require* a read-only SNMP profile to be assigned to the device, except for\n``SRV`` and ``OTHER``, where it is optional.\n\n.. _seeddb-bulk-import-intro:\n\nImporting multiple devices in bulk\n----------------------------------\n\nWhile you can go ahead and add one device at a time like this, it will quickly\nget tedious if you have more than a handful of devices to monitor. This is\nwhere the :guilabel:`Bulk import` function comes into the picture:\n\n.. image:: seeddb-bulkimport-ipdevice.png\n\nAssuming you have a readily available list of IP addresses to monitor, e.g. from your inventory system, you can\ncreate a comma (or colon) separated text file with the required details and\nupload or paste it into the :guilabel:`bulk import` form.\n\nThe format is pretty straightforward: The initial fields are required, while\nthe fields listed in square brackets are optional. Optional fields can be\nomitted or left blank. A line beginning with a ``#`` sign will be regarded as a\ncomment and ignored. Thus, for adding some switch using the default SNMP\nmanagement profile you added earlier, and a function description of\n``Packet switching``, this line would do it::\n\n  myroom:10.0.1.42:myorg:SW:Default SNMP v2c read-only profile::Packet switching\n\nClick :guilabel:`Preview import` to have NAV validate your input. Each line\nwill be displayed with a colored status dot.  A green dot indicates the line was\nfound OK and will be imported once you submit.  A yellow or red dot indicates\nan error with the line; such a line will be ignored when you submit the\npreview form, unless you go back and fix it before submitting the form again.\n\n.. |URL| replace:: http://example.org/\n\n\nFurther reading\n===============\n\nNow you know how to monitor things. It's time to\n:doc:`get organized <getting-organized>`!\n"
  },
  {
    "path": "doc/intro/install.rst",
    "content": "================\n Installing NAV\n================\n\n.. highlight:: sh\n\nThere are two main options for installing NAV: Either from source code, or from\na pre-packaged version. Some of these options will require manually installing\nand/or configuring 3rd party software that NAV depends on, mainly :xref:`PostgreSQL`\nand :xref:`Graphite`. Building NAV from source code will also require Node.js\nand npm to be installed.\n\n\nInstalling a pre-packaged version of NAV\n========================================\n\nThere are mainly two official types of \"pre-packaged\" NAV versions you can use:\n\n1. A virtual appliance.\n2. A Debian package.\n\nInstalling NAV as a virtual appliance\n-------------------------------------\n\nWe provide a virtual appliance in the Open Virtualization Format. `Open\nVirtualization Format`_ (OVF) is an open standard for packaging and distributing\nvirtual appliances or, more generally, software to be run in virtual\nmachines.\n\nOur virtual appliance is based on Debian GNU/Linux and our published Debian\nPackage, mentioned below. This appliance can be imported into virtualization\nsoftware like e.g. Virtualbox or VMWare.\n\nThe appliance is useful for quickly evaluating the NAV software, without the\nhassle of installing and maintaining a full OS for the purpose.  The appliance\nis, however, *not necessarily* suited for production use without modifications\n(such as increasing the storage space and other resources made available to\nthe VM) or proper sysadmin practices.\n\n`There is a separate guide for installing the virtual appliance on the official\nNAV web site <https://nav.uninett.no/install-instructions/#ovf>`_ .\n\n.. _`Open Virtualization Format`: https://en.wikipedia.org/wiki/Open_Virtualization_Format\n\nInstalling NAV from a Debian Package\n------------------------------------\n\nIf you are familiar with the `Debian GNU/Linux operating system\n<https://www.debian.org>`_, you can install NAV from a Debian Package. Debian\nis our primary choice of server operating system, so we always make sure to\nprovide an official Debianized NAV package.\n\nUsing the Debian package will save you from the hassle of installing and\nupgrading either NAV or its dependencies from source code. You can even\nconfigure your Debian to automatically keep up-to-date with the latest security\npatches from the Debian team.\n\nThis is normally our recommended option for regular NAV users.\n\n`Instructions for installing the Debian package are available on the official\nNAV web site <https://nav.uninett.no/install-instructions/#debian>`_.\n\nAfter installing the Debian package, you will need to :ref:`integrate Graphite\nwith NAV <integrating-graphite-with-nav>`, before starting to use NAV to\nmonitor your devices.\n\n\nInstalling NAV using Docker Compose\n-----------------------------------\n\nThere is also a third, still experimental, way of installing a pre-packaged\nNAV: `Docker Compose`_. Like with the Virtual Appliance, this offers a quick\nway to get started with NAV, without the up-front hassle of installing and\nconfiguring a full operating system for the purpose.\n\nUsing Docker Compose, NAV's components and dependencies will run in individual\nready-to-use containers. You can run NAV directly from your workstation for\nevaluation, on a server with other containers, or more easily scale out to\nmultiple servers, if need be.\n\nThe containerized version of NAV is available from a separate GitHub\nrepository: https://github.com/Uninett/nav-container/\n\n.. _`Docker Compose`: https://docs.docker.com/compose/\n\n\nInstalling NAV from source code\n===============================\n\nIf you're the hacker type, or just want to run NAV on your own preferred choice\nof \\*NIX flavored operating system, you'll want to build and install NAV from\nsource code.\n\nFor you, we provide two guides:\n\n1. :doc:`A generic guide to installation from source\n   </howto/generic-install-from-source>`.\n2. :doc:`A step-by-step, detailed guide on installing NAV from source on a\n   Debian GNU/Linux operating system </howto/manual-install-on-debian>`.\n"
  },
  {
    "path": "doc/msg_and_maint_db.dia",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<dia:diagram xmlns:dia=\"http://www.lysator.liu.se/~alla/dia/\">\n  <dia:diagramdata>\n    <dia:attribute name=\"background\">\n      <dia:color val=\"#ffffff\"/>\n    </dia:attribute>\n    <dia:attribute name=\"pagebreak\">\n      <dia:color val=\"#000099\"/>\n    </dia:attribute>\n    <dia:attribute name=\"paper\">\n      <dia:composite type=\"paper\">\n        <dia:attribute name=\"name\">\n          <dia:string>#Letter#</dia:string>\n        </dia:attribute>\n        <dia:attribute name=\"tmargin\">\n          <dia:real val=\"2.5399999618530273\"/>\n        </dia:attribute>\n        <dia:attribute name=\"bmargin\">\n          <dia:real val=\"2.5399999618530273\"/>\n        </dia:attribute>\n        <dia:attribute name=\"lmargin\">\n          <dia:real val=\"2.5399999618530273\"/>\n        </dia:attribute>\n        <dia:attribute name=\"rmargin\">\n          <dia:real val=\"2.5399999618530273\"/>\n        </dia:attribute>\n        <dia:attribute name=\"is_portrait\">\n          <dia:boolean val=\"true\"/>\n        </dia:attribute>\n        <dia:attribute name=\"scaling\">\n          <dia:real val=\"0.5\"/>\n        </dia:attribute>\n        <dia:attribute name=\"fitto\">\n          <dia:boolean val=\"false\"/>\n        </dia:attribute>\n      </dia:composite>\n    </dia:attribute>\n    <dia:attribute name=\"grid\">\n      <dia:composite type=\"grid\">\n        <dia:attribute name=\"width_x\">\n          <dia:real val=\"1\"/>\n        </dia:attribute>\n        <dia:attribute name=\"width_y\">\n          <dia:real val=\"1\"/>\n        </dia:attribute>\n        <dia:attribute name=\"visible_x\">\n          <dia:int val=\"1\"/>\n        </dia:attribute>\n        <dia:attribute name=\"visible_y\">\n          <dia:int val=\"1\"/>\n        </dia:attribute>\n        <dia:composite type=\"color\"/>\n      </dia:composite>\n    </dia:attribute>\n    <dia:attribute name=\"color\">\n      <dia:color val=\"#d8e5e5\"/>\n    </dia:attribute>\n    <dia:attribute name=\"guides\">\n      <dia:composite type=\"guides\">\n        <dia:attribute name=\"hguides\"/>\n        <dia:attribute name=\"vguides\"/>\n      </dia:composite>\n    </dia:attribute>\n  </dia:diagramdata>\n  <dia:layer name=\"Background\" visible=\"true\">\n    <dia:object type=\"Standard - Box\" version=\"0\" id=\"O0\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"5.65,6.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"5.6,6.25;29.5,19.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"5.65,6.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"23.799999999999997\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"12.900000000000002\"/>\n      </dia:attribute>\n      <dia:attribute name=\"border_color\">\n        <dia:color val=\"#bfbfbf\"/>\n      </dia:attribute>\n      <dia:attribute name=\"inner_color\">\n        <dia:color val=\"#90ee90\"/>\n      </dia:attribute>\n      <dia:attribute name=\"show_background\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"corner_radius\">\n        <dia:real val=\"0.5\"/>\n      </dia:attribute>\n    </dia:object>\n    <dia:object type=\"Standard - Box\" version=\"0\" id=\"O1\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"5.5,26.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"5.45,26.2;29.45,43.05\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"5.5,26.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"23.899999999999995\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"16.750000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"border_color\">\n        <dia:color val=\"#bfbfbf\"/>\n      </dia:attribute>\n      <dia:attribute name=\"inner_color\">\n        <dia:color val=\"#add8e6\"/>\n      </dia:attribute>\n      <dia:attribute name=\"show_background\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"corner_radius\">\n        <dia:real val=\"0.5\"/>\n      </dia:attribute>\n    </dia:object>\n    <dia:object type=\"UML - Class\" version=\"0\" id=\"O2\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"9.55,9.2\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"9.5,9.15;27.25,18.05\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"9.55,9.2\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"17.649999999999999\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"8.7999999999999989\"/>\n      </dia:attribute>\n      <dia:attribute name=\"name\">\n        <dia:string>#message#</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"stereotype\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"comment\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"abstract\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_attributes\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_attributes\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_comments\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_operations\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_after_char\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_line_length\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_tagging\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"line_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"fill_color\">\n        <dia:color val=\"#ffffff\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font\">\n        <dia:font family=\"monospace\" style=\"0\" name=\"Courier\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font\">\n        <dia:font family=\"monospace\" style=\"88\" name=\"Courier-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font\">\n        <dia:font family=\"monospace\" style=\"8\" name=\"Courier-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font\">\n        <dia:font family=\"sans\" style=\"80\" name=\"Helvetica-Bold\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font\">\n        <dia:font family=\"sans\" style=\"88\" name=\"Helvetica-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font\">\n        <dia:font family=\"sans\" style=\"8\" name=\"Helvetica-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"attributes\">\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#messageid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#message_messageid_seq#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#title#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#description#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#text#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#tech_description#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#text#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#publish_start#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#timestamp#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#now()#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#publish_end#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#timestamp#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#author#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>#should be foreign key#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#last_changed#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#timestamp#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#replaces_message#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#null / message.messageid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"operations\"/>\n      <dia:attribute name=\"template\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"templates\"/>\n    </dia:object>\n    <dia:object type=\"UML - Class\" version=\"0\" id=\"O3\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"8.25,28.4\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"8.2,28.35;27,34.85\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"8.25,28.4\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"18.699999999999999\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"6.4000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"name\">\n        <dia:string>#maint_task#</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"stereotype\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"comment\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"abstract\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_attributes\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_attributes\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_comments\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_operations\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_after_char\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_line_length\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_tagging\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"line_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"fill_color\">\n        <dia:color val=\"#ffffff\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font\">\n        <dia:font family=\"monospace\" style=\"0\" name=\"Courier\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font\">\n        <dia:font family=\"monospace\" style=\"88\" name=\"Courier-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font\">\n        <dia:font family=\"monospace\" style=\"8\" name=\"Courier-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font\">\n        <dia:font family=\"sans\" style=\"80\" name=\"Helvetica-Bold\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font\">\n        <dia:font family=\"sans\" style=\"88\" name=\"Helvetica-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font\">\n        <dia:font family=\"sans\" style=\"8\" name=\"Helvetica-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"attributes\">\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#maint_taskid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#maint_task_maint_taskid_seq#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#maint_start#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#timestamp#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#now()#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#maint_end#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#timestamp#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#description#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#text#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#author#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>#should be foreign key#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#state#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#(scheduled, active, passed, canceled)#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"operations\"/>\n      <dia:attribute name=\"template\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"templates\"/>\n    </dia:object>\n    <dia:object type=\"UML - Class\" version=\"0\" id=\"O4\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"7.7,21.4\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"7.65,21.35;23.65,24.65\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"7.7,21.4\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"15.9\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"3.2000000000000002\"/>\n      </dia:attribute>\n      <dia:attribute name=\"name\">\n        <dia:string>#message_to_maint_task#</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"stereotype\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"comment\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"abstract\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_attributes\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_attributes\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_comments\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_operations\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_after_char\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_line_length\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_tagging\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"line_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"fill_color\">\n        <dia:color val=\"#ffffff\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font\">\n        <dia:font family=\"monospace\" style=\"0\" name=\"Courier\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font\">\n        <dia:font family=\"monospace\" style=\"88\" name=\"Courier-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font\">\n        <dia:font family=\"monospace\" style=\"8\" name=\"Courier-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font\">\n        <dia:font family=\"sans\" style=\"80\" name=\"Helvetica-Bold\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font\">\n        <dia:font family=\"sans\" style=\"88\" name=\"Helvetica-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font\">\n        <dia:font family=\"sans\" style=\"8\" name=\"Helvetica-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"attributes\">\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#messageid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#message.messageid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#maint_taskid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#maint_task.maint_taskid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"operations\"/>\n      <dia:attribute name=\"template\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"templates\"/>\n    </dia:object>\n    <dia:object type=\"UML - Class\" version=\"0\" id=\"O5\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"8.8,36.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"8.75,36.2;24.4,40.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_corner\">\n        <dia:point val=\"8.8,36.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_width\">\n        <dia:real val=\"15.550000000000001\"/>\n      </dia:attribute>\n      <dia:attribute name=\"elem_height\">\n        <dia:real val=\"4\"/>\n      </dia:attribute>\n      <dia:attribute name=\"name\">\n        <dia:string>#maint_component#</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"stereotype\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"comment\">\n        <dia:string>##</dia:string>\n      </dia:attribute>\n      <dia:attribute name=\"abstract\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_attributes\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"suppress_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_attributes\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_operations\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"visible_comments\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_operations\">\n        <dia:boolean val=\"true\"/>\n      </dia:attribute>\n      <dia:attribute name=\"wrap_after_char\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_line_length\">\n        <dia:int val=\"40\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_tagging\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"line_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"fill_color\">\n        <dia:color val=\"#ffffff\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text_color\">\n        <dia:color val=\"#000000\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font\">\n        <dia:font family=\"monospace\" style=\"0\" name=\"Courier\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font\">\n        <dia:font family=\"monospace\" style=\"88\" name=\"Courier-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font\">\n        <dia:font family=\"monospace\" style=\"8\" name=\"Courier-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font\">\n        <dia:font family=\"sans\" style=\"80\" name=\"Helvetica-Bold\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font\">\n        <dia:font family=\"sans\" style=\"88\" name=\"Helvetica-BoldOblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font\">\n        <dia:font family=\"sans\" style=\"8\" name=\"Helvetica-Oblique\"/>\n      </dia:attribute>\n      <dia:attribute name=\"normal_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"polymorphic_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_font_height\">\n        <dia:real val=\"0.80000000000000004\"/>\n      </dia:attribute>\n      <dia:attribute name=\"classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"abstract_classname_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"comment_font_height\">\n        <dia:real val=\"1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"attributes\">\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#maint_taskid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#int#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#maint_task.mainttaskid#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#key#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n        <dia:composite type=\"umlattribute\">\n          <dia:attribute name=\"name\">\n            <dia:string>#value#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"type\">\n            <dia:string>#char#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"value\">\n            <dia:string>#not null#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"comment\">\n            <dia:string>##</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"visibility\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n          <dia:attribute name=\"abstract\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n          <dia:attribute name=\"class_scope\">\n            <dia:boolean val=\"false\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"operations\"/>\n      <dia:attribute name=\"template\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:attribute name=\"templates\"/>\n    </dia:object>\n    <dia:object type=\"Standard - ZigZagLine\" version=\"1\" id=\"O6\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"23.55,23.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"8.15,11.05;25.2,23.35\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_points\">\n        <dia:point val=\"23.55,23.3\"/>\n        <dia:point val=\"25.15,23.3\"/>\n        <dia:point val=\"25.15,19.8\"/>\n        <dia:point val=\"8.2,19.8\"/>\n        <dia:point val=\"8.2,11.1\"/>\n        <dia:point val=\"9.55,11.1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_orient\">\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n      </dia:attribute>\n      <dia:attribute name=\"autorouting\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:connections>\n        <dia:connection handle=\"0\" to=\"O4\" connection=\"9\"/>\n        <dia:connection handle=\"1\" to=\"O2\" connection=\"8\"/>\n      </dia:connections>\n    </dia:object>\n    <dia:object type=\"Standard - ZigZagLine\" version=\"1\" id=\"O7\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"24.3,38.15\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"7.2,30.25;25.4,38.2\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_points\">\n        <dia:point val=\"24.3,38.15\"/>\n        <dia:point val=\"25.35,38.15\"/>\n        <dia:point val=\"25.35,35.55\"/>\n        <dia:point val=\"7.25,35.55\"/>\n        <dia:point val=\"7.25,30.3\"/>\n        <dia:point val=\"8.25,30.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_orient\">\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n      </dia:attribute>\n      <dia:attribute name=\"autorouting\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:connections>\n        <dia:connection handle=\"0\" to=\"O5\" connection=\"9\"/>\n        <dia:connection handle=\"1\" to=\"O3\" connection=\"8\"/>\n      </dia:connections>\n    </dia:object>\n    <dia:object type=\"Standard - ZigZagLine\" version=\"1\" id=\"O8\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"27.15,11.1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"27.1,11.05;28.5,17.55\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_points\">\n        <dia:point val=\"27.15,11.1\"/>\n        <dia:point val=\"28.45,11.1\"/>\n        <dia:point val=\"28.45,17.5\"/>\n        <dia:point val=\"27.15,17.5\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_orient\">\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n      </dia:attribute>\n      <dia:attribute name=\"autorouting\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:connections>\n        <dia:connection handle=\"0\" to=\"O2\" connection=\"9\"/>\n        <dia:connection handle=\"1\" to=\"O2\" connection=\"25\"/>\n      </dia:connections>\n    </dia:object>\n    <dia:object type=\"Standard - Text\" version=\"1\" id=\"O9\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"14.05,42.25\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"14.05,41.2;21.05,43\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text\">\n        <dia:composite type=\"text\">\n          <dia:attribute name=\"string\">\n            <dia:string>#Maintenance#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"font\">\n            <dia:font family=\"sans\" style=\"0\" name=\"Helvetica\"/>\n          </dia:attribute>\n          <dia:attribute name=\"height\">\n            <dia:real val=\"1.5\"/>\n          </dia:attribute>\n          <dia:attribute name=\"pos\">\n            <dia:point val=\"14.05,42.25\"/>\n          </dia:attribute>\n          <dia:attribute name=\"color\">\n            <dia:color val=\"#000000\"/>\n          </dia:attribute>\n          <dia:attribute name=\"alignment\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"valign\">\n        <dia:enum val=\"3\"/>\n      </dia:attribute>\n    </dia:object>\n    <dia:object type=\"Standard - Text\" version=\"1\" id=\"O10\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"13.85,8.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"13.85,7.25;19.1,9.05\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text\">\n        <dia:composite type=\"text\">\n          <dia:attribute name=\"string\">\n            <dia:string>#Messages#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"font\">\n            <dia:font family=\"sans\" style=\"0\" name=\"Helvetica\"/>\n          </dia:attribute>\n          <dia:attribute name=\"height\">\n            <dia:real val=\"1.5\"/>\n          </dia:attribute>\n          <dia:attribute name=\"pos\">\n            <dia:point val=\"13.85,8.3\"/>\n          </dia:attribute>\n          <dia:attribute name=\"color\">\n            <dia:color val=\"#000000\"/>\n          </dia:attribute>\n          <dia:attribute name=\"alignment\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"valign\">\n        <dia:enum val=\"3\"/>\n      </dia:attribute>\n    </dia:object>\n    <dia:object type=\"Standard - ZigZagLine\" version=\"1\" id=\"O11\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"23.55,24.1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"7.2,24.05;25.2,30.35\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_points\">\n        <dia:point val=\"23.55,24.1\"/>\n        <dia:point val=\"25.15,24.1\"/>\n        <dia:point val=\"25.15,27.2\"/>\n        <dia:point val=\"7.25,27.2\"/>\n        <dia:point val=\"7.25,30.3\"/>\n        <dia:point val=\"8.25,30.3\"/>\n      </dia:attribute>\n      <dia:attribute name=\"orth_orient\">\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n        <dia:enum val=\"1\"/>\n        <dia:enum val=\"0\"/>\n      </dia:attribute>\n      <dia:attribute name=\"autorouting\">\n        <dia:boolean val=\"false\"/>\n      </dia:attribute>\n      <dia:connections>\n        <dia:connection handle=\"0\" to=\"O4\" connection=\"11\"/>\n        <dia:connection handle=\"1\" to=\"O3\" connection=\"8\"/>\n      </dia:connections>\n    </dia:object>\n    <dia:object type=\"Standard - Text\" version=\"1\" id=\"O12\">\n      <dia:attribute name=\"obj_pos\">\n        <dia:point val=\"5.75,2.1\"/>\n      </dia:attribute>\n      <dia:attribute name=\"obj_bb\">\n        <dia:rectangle val=\"5.75,1.05;28.55,5.85\"/>\n      </dia:attribute>\n      <dia:attribute name=\"text\">\n        <dia:composite type=\"text\">\n          <dia:attribute name=\"string\">\n            <dia:string>#NAV 3.2 Message and Maintenance\nDatabase: Vidar Faltinsen, 2006-07-??\nDiagram: Stein Magnus Jodal, 2006-07-18#</dia:string>\n          </dia:attribute>\n          <dia:attribute name=\"font\">\n            <dia:font family=\"sans\" style=\"0\" name=\"Helvetica\"/>\n          </dia:attribute>\n          <dia:attribute name=\"height\">\n            <dia:real val=\"1.5\"/>\n          </dia:attribute>\n          <dia:attribute name=\"pos\">\n            <dia:point val=\"5.75,2.1\"/>\n          </dia:attribute>\n          <dia:attribute name=\"color\">\n            <dia:color val=\"#000000\"/>\n          </dia:attribute>\n          <dia:attribute name=\"alignment\">\n            <dia:enum val=\"0\"/>\n          </dia:attribute>\n        </dia:composite>\n      </dia:attribute>\n      <dia:attribute name=\"valign\">\n        <dia:enum val=\"3\"/>\n      </dia:attribute>\n    </dia:object>\n  </dia:layer>\n</dia:diagram>\n"
  },
  {
    "path": "doc/overview.rst",
    "content": "==========\n Overview\n==========\n\nWhat it is\n==========\n\nNetwork Administration Visualized is an advanced software suite to monitor\nlarge computer networks. It automatically discovers network topology, monitors\nnetwork load and outages, and can send alerts on network events by e-mail and\nSMS, allowing for flexible configuration of alert profiles.\n\nWhat NAV does\n=============\n\nNAV gives you:\n\n* An overview of your deployed network infrastructure inventory, topology and\n  address space allocation/utilization.\n* Alerts via e-mail, Slack and/or SMS when stuff stops working.\n* Traffic, CPU load and environmental sensor statistics.\n* The ability to find the access port of any client machine in your network.\n* The ability to block or quarantine access ports of network abusers.\n* The ability to perform simple access port configuration tasks via web, and\n  also to delegate this access to other administrators within your\n  organizational hierarchy.\n\nAlthough NAV specializes in network infrastructure monitoring, it also\nprovides simple service monitoring for those who have less complex service\nmonitoring needs.\n\n\nA brief history of NAV\n======================\n\nThe first version of Network Administration Visualized was written by the IT\ndepartment of the Norwegian University of Science and Technology in 1999 to\ncover their network monitoring needs, after HP OpenView had failed to meet\ntheir requirements.  At the time, NTNU's campus network had some 20,000 users.\n\nUninett, the Norwegian National Research and Education Network became\ninterested in NTNU's work on NAV in 2001 and began sponsoring 50% of its\ndevelopment costs in exchange for licensing the software to all universities\nand university colleges in Norway.\n\nIn 2004, both parties agreed to release NAV to the world under the GPL\nlicense, effectively freeing the software.\n\nIn 2006, Uninett assumed the main responsibility of maintaining and developing\nthe software further, and is continually doing so on behalf of its customers,\nthe Norwegian universities and university colleges, and research network\npartners.\n\nOn January 1st 2022, Uninett, NSD and Unit (all entities owned by the Norwegian\ngovernment) were merged into the new governmental agency *Sikt - Norwegian\nAgency for Shared Services in Education and Research*.\n"
  },
  {
    "path": "doc/reference/alerttypes.rst",
    "content": "Event- and alert type hierarchy\n===============================\n\nNAV events and alerts are organized into a type hierarchy. While NAV's backend\nmonitoring processes usually generate events, the :program:`Event Engine` is\nresponsible for deciding what to do with those events. In most cases, events\nare translated into a corresponding alert by the :program:`Event Engine`.\n\nMost alerts are *stateful*, i.e. they can be viewed as an incident that has a\nstart time and an end time. If the end time is set to an infinite value, the\nalert is considered unresolved (also known as *open*).\n\nSome alert types indicate the beginning of a new alert state, while some alert\ntypes indicate the closure of an existing alert state. E.g. for ``boxState``\nalerts, a ``boxDown`` alert indicates that a new stateful incident has occured:\nA device is no longer responsive. On the other hand, a ``boxUp`` alert will\ncause an existing ``boxState``-type alert to be resolved.\n\n\nAll legal event- and alert-types are registered in the NAV database (and can\nthus be extended, even by the user, if need be). The following are the event-\nand alert types that come pre-defined with NAV:\n\n\n\n*boxState* events\n-----------------\nTells us whether a network-unit is down or up.\n\n.. list-table:: Alerts associated with boxState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``boxDownWarning``\n     - Warning sent before declaring the box down.\n   * - ``boxShadowWarning``\n     - Warning sent before declaring the box in shadow.\n   * - ``boxDown``\n     - Box declared down.\n   * - ``boxUp``\n     - Box declared up.\n   * - ``boxShadow``\n     - Box declared down, but is in shadow.\n   * - ``boxSunny``\n     - Box declared up from a previous shadow state.\n\n\n\n\n*serviceState* events\n---------------------\nTells us whether a service on a server is up or down.\n\n.. list-table:: Alerts associated with serviceState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``httpDown``\n     - http service not responding.\n   * - ``httpUp``\n     - http service responding.\n\n\n\n\n*moduleState* events\n--------------------\nTells us whether a module in a device is working or not.\n\n.. list-table:: Alerts associated with moduleState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``moduleDownWarning``\n     - Warning sent before declaring the module down.\n   * - ``moduleDown``\n     - Module declared down.\n   * - ``moduleUp``\n     - Module declared up.\n\n\n\n\n*thresholdState* events\n-----------------------\nTells us whether the load has passed a certain threshold.\n\n.. list-table:: Alerts associated with thresholdState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``exceededThreshold``\n     - Threshold exceeded.\n   * - ``belowThreshold``\n     - Value below threshold.\n\n\n\n\n*linkState* events\n------------------\nTells us whether a link is up or down.\n\n.. list-table:: Alerts associated with linkState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``linkUp``\n     - Link active\n   * - ``linkDown``\n     - Link inactive\n\n\n\n\n*boxRestart* events\n-------------------\nTells us that a network-unit has done a restart\n\n.. list-table:: Alerts associated with boxRestart events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``coldStart``\n     - The IP device has coldstarted\n   * - ``warmStart``\n     - The IP device has warmstarted\n\n\n\n\n*info* events\n-------------\nBasic information\n\n.. list-table:: Alerts associated with info events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``dnsMismatch``\n     - Mismatch between sysname and dnsname.\n   * - ``serialChanged``\n     - Serial number for the device has changed.\n   * - ``macWarning``\n     - Mac appeared on port\n\n\n\n\n*notification* events\n---------------------\nNotification event, typically between NAV systems\n\n.. list-table:: Alerts associated with notification events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n\n\n\n\n*deviceActive* events\n---------------------\nLifetime event for a device\n\n.. list-table:: Alerts associated with deviceActive events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n\n\n\n\n*deviceState* events\n--------------------\nRegisters the state of a device\n\n.. list-table:: Alerts associated with deviceState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``deviceInIPOperation``\n     - The device is now in operation with an active IP address\n   * - ``deviceInStack``\n     - The device is now in operation as a chassis module\n   * - ``deviceRMA``\n     - RMA event for device.\n   * - ``deviceNewModule``\n     - The device has been found as a module.\n   * - ``deviceNewChassis``\n     - The device has been found as a chassis.\n   * - ``deviceNewPsu``\n     - The device has been found as a power supply.\n   * - ``deviceNewFan``\n     - The device has been found as a fan.\n   * - ``deviceDeletedFan``\n     - The device has been removed as a fan.\n   * - ``deviceDeletedPsu``\n     - The device has been removed as a power supply.\n   * - ``deviceDeletedChassis``\n     - The device has been removed as a chassis.\n   * - ``deviceDeletedModule``\n     - The device has been removed as a module.\n\n\n\n\n*deviceNotice* events\n---------------------\nRegisters a notice on a device\n\n.. list-table:: Alerts associated with deviceNotice events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``deviceError``\n     - Error situation on device.\n   * - ``deviceSwUpgrade``\n     - Software upgrade on device.\n   * - ``deviceHwUpgrade``\n     - Hardware upgrade on device.\n   * - ``deviceFwUpgrade``\n     - Firmware upgrade on device.\n\n\n\n\n*maintenanceState* events\n-------------------------\nTells us if something is set on maintenance\n\n.. list-table:: Alerts associated with maintenanceState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``onMaintenance``\n     - Box put on maintenance.\n   * - ``offMaintenance``\n     - Box taken off maintenance.\n\n\n\n\n*apState* events\n----------------\nTells us whether an access point has disassociated or associated from the controller\n\n.. list-table:: Alerts associated with apState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``apUp``\n     - AP associated with controller\n   * - ``apDown``\n     - AP disassociated from controller\n\n\n\n\n*snmpAgentState* events\n-----------------------\nTells us whether the SNMP agent on a device is down or up.\n\n.. list-table:: Alerts associated with snmpAgentState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``snmpAgentDown``\n     - SNMP agent is down or unreachable due to misconfiguration.\n   * - ``snmpAgentUp``\n     - SNMP agent is up.\n\n\n\n\n*chassisState* events\n---------------------\nThe state of this chassis has changed\n\n.. list-table:: Alerts associated with chassisState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``chassisDown``\n     - This chassis is no longer visible in the stack\n   * - ``chassisUp``\n     - This chassis is visible in the stack again\n\n\n\n\n*aggregateLinkState* events\n---------------------------\nThe state of this aggregated link changed\n\n.. list-table:: Alerts associated with aggregateLinkState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``linkDegraded``\n     - This aggregate link has been degraded\n   * - ``linkRestored``\n     - This aggregate link has been restored\n\n\n\n\n*psuState* events\n-----------------\nReports state changes in power supply units\n\n.. list-table:: Alerts associated with psuState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``psuNotOK``\n     - A PSU has entered a non-OK state\n   * - ``psuOK``\n     - A PSU has returned to an OK state\n\n\n\n\n*fanState* events\n-----------------\nReports state changes in fan units\n\n.. list-table:: Alerts associated with fanState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``fanNotOK``\n     - A fan unit has entered a non-OK state\n   * - ``fanOK``\n     - A fan unit has returned to an OK state\n\n\n\n\n*bgpState* events\n-----------------\nThe state of this BGP peering session changed\n\n.. list-table:: Alerts associated with bgpState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``bgpDown``\n     - This BGP peering session is down\n   * - ``bgpEstablished``\n     - This BGP peering session has been established\n   * - ``bgpAdmDown``\n     - This BGP peering session is administratively down\n\n\n\n\n*juniperYellowAlarmState* events\n--------------------------------\nTells us if a Juniper device has any open yellow alarms.\n\n.. list-table:: Alerts associated with juniperYellowAlarmState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``juniperYellowAlarmOn``\n     - The Juniper device has some yellow alarms.\n   * - ``juniperYellowAlarmOff``\n     - The Juniper device has no yellow alarms.\n\n\n\n\n*juniperRedAlarmState* events\n-----------------------------\nTells us if a Juniper device has any open red alarms.\n\n.. list-table:: Alerts associated with juniperRedAlarmState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``juniperRedAlarmOn``\n     - The Juniper device has some red alarms.\n   * - ``juniperRedAlarmOff``\n     - The Juniper device has no red alarms.\n\n\n\n\n*weathergoose_temperature* events\n---------------------------------\n\n\n.. list-table:: Alerts associated with weathergoose_temperature events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``cmClimateTempCTRAP``\n     - Climate Temperature Sensor Trap\n   * - ``cmClimateTempCCLEAR``\n     - Climate Temperature Sensor Clear Trap\n   * - ``cmClimateTempCNOTIFY``\n     - Climate Temperature Sensor Trap\n   * - ``cmTempSensorTempCNOTIFY``\n     - Remote Temp Sensor - Temperature Trap\n   * - ``cmTempSensorTempCCLEAR``\n     - Remote Temp Sensor - Temperature Clear Trap\n   * - ``gstClimateTempCNOTIFY``\n     - Climate Temperature Sensor Trap\n   * - ``gstTempSensorTempCNOTIFY``\n     - Remote Temp Sensor - Temperature Trap\n   * - ``gstClimateTempCCLEAR``\n     - Climate Temperature Sensor Clear Trap\n   * - ``gstTempSensorTempCCLEAR``\n     - Remote Temp Sensor - Temperature Clear Trap\n\n\n\n\n*weathergoose_humidity* events\n------------------------------\n\n\n.. list-table:: Alerts associated with weathergoose_humidity events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``cmClimateHumidityTRAP``\n     - Climate Humidity Sensor Trap\n   * - ``cmClimateHumidityCLEAR``\n     - Climate Humidity Sensor Clear Trap\n   * - ``cmClimateHumidityNOTIFY``\n     - Climate Humidity Sensor Trap\n   * - ``gstClimateHumidityNOTIFY``\n     - Climate Humidity Sensor Trap\n   * - ``gstClimateHumidityCLEAR``\n     - Climate Humidity Sensor Clear Trap\n\n\n\n\n*weathergoose_airflow* events\n-----------------------------\n\n\n.. list-table:: Alerts associated with weathergoose_airflow events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``cmClimateAirflowTRAP``\n     - Climate Air Flow Sensor Trap\n   * - ``cmClimateAirflowCLEAR``\n     - Climate Air Flow Sensor Clear Trap\n   * - ``cmClimateAirflowNOTIFY``\n     - Climate Air Flow Sensor Trap\n   * - ``gstClimateAirflowNOTIFY``\n     - Climate Air Flow Sensor Trap\n   * - ``gstClimateAirflowCLEAR``\n     - Climate Air Flow Sensor Clear Trap\n\n\n\n\n*weathergoose_light* events\n---------------------------\n\n\n.. list-table:: Alerts associated with weathergoose_light events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``cmClimateLightTRAP``\n     - Climate Light Sensor Trap\n   * - ``cmClimateLightCLEAR``\n     - Climate Light Sensor Clear Trap\n   * - ``cmClimateLightNOTIFY``\n     - Climate Light Sensor Trap\n   * - ``gstClimateLightNOTIFY``\n     - Climate Light Sensor Trap\n   * - ``gstClimateLightCLEAR``\n     - Climate Light Sensor Clear Trap\n\n\n\n\n*weathergoose_sound* events\n---------------------------\n\n\n.. list-table:: Alerts associated with weathergoose_sound events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``cmClimateSoundTRAP``\n     - Climate Sound Sensor Trap\n   * - ``cmClimateSoundCLEAR``\n     - Climate Sound Sensor Clear Trap\n   * - ``cmClimateSoundNOTIFY``\n     - Climate Sound Sensor Trap\n   * - ``gstClimateSoundNOTIFY``\n     - Climate Sound Sensor Trap\n   * - ``gstClimateSoundCLEAR``\n     - Climate Sound Sensor Clear Trap\n\n\n\n\n*upsPowerState* events\n----------------------\nUPS running on battery or utility power\n\n.. list-table:: Alerts associated with upsPowerState events\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Alert type name\n     - Description\n   * - ``upsOnBatteryPower``\n     - Ups running on battery power\n   * - ``upsOnUtilityPower``\n     - Ups running on utility power\n"
  },
  {
    "path": "doc/reference/arnold.rst",
    "content": "======\nArnold\n======\n\nIntroduction\n============\n\nArnold is a port-blocker and vlan changer, and was originally made to be able to\neasier remove mischievers from the campus-internet.\n\nThis document will give you information about how Arnold works and how to use\nand configure it. A FAQ-section will be added as questions are received.\n\nWhat does Arnold do?\n====================\n\nArnold is a system that blocks or changes vlan on (we use the label *detains*)\nswitch-ports by using SNMP-set commands. Arnold uses an IP- or MAC-address to\nlocate the switch-port the address is operating from using the NAV-database, and\nthen attempts to detain it.\n\n.. note:: You **must** assign a *write-enabled* SNMP profile to your devices,\n          otherwise Arnold will not be able to detain or enable ports on\n          them. You can select profiles for devices individually in the *Seed\n          Database* tool.\n\nUsing Arnold\n============\n\nArnold consists of a couple of scripts, configuration files and a\nweb-interface. For basic use you will use the web-interface to disable and\nenable ports. Automatic use of Arnold requires some setup and use of cron to\nexecute jobs periodically.\n\nThe web-interface\n-----------------\n\nThe web-interface is accessible from the Toolbox. When using Arnold you have\nseveral views available. They are as follows:\n\n- **History** lists the detentions for the last x days. This will list both\n  active detentions and detentions no longer in effect.\n- **Detained ports** lists all active detentions.\n- **Detention reasons** lists all existing reasons for a detention. A reason is\n  directly connected to a detention, and makes it easy to group detentions by\n  reasons.\n- **Quarantine vlans** lists all existing quarantine vlans. Instead of shutting\n  down the port, you can switch the access vlan to that of a quarantine\n  vlan. This vlan could be configured for instance to rate limit traffic or be\n  restricted in some other way.\n- **Detention profiles** lists all detention profiles. A detention profile is\n  used when executing automatic detentions.\n\nIn addition you have two actions you can use - *Search* and *Manual detention*.\n\n- **Search** lets you search for detentions given some search parameters.\n- **Manual detention** lets you manually detain a port given an IP- or\n  MAC-address.\n\nPredefined detentions\n---------------------\nThe only way to use a predefined detention is by using the ``start_arnold``\nshell script. After creating a predefined detention you usually want to create a\ncron-job for running the script with some input parameters. See section about\n`start_arnold`_.\n\n\nUsing the scripts\n=================\n\nArnold consists of three scripts, which all are located in the ``nav/bin``\ndirectory.\n\n- **autoenable** enables ports based on the autoenable variable available for\n  both manual and predefined detentions.\n- **start_arnold** is used in combination with predefined detentions to\n  invoke a series of detentions.\n- **t1000** verifies that the MAC-addresses that should be offline are not\n  active on other ports. If a detained MAC-address is online on another port, it\n  will try to detain it there aswell.\n\nMore details about the different scripts can be seen below.\n\nautoenable\n----------\n\n*autoenable* fetches all detained ports with an autoenable-value and enables\neach of those detentions if the time is due. It can be run manually or as a\nperiodic cron job.\n\nThe simplest way of running automatic enabling periodically is to create a file\ncontaining cron configuration that calls the *autoenable* program as often as\nyou would like::\n\n  0 * * * * some_prefix/nav/bin/autoenable  # Run every hour on the hour\n\nSave this snippet in a file called ``autoenable`` in NAV's ``etc/cron.d/``\ndirectory. That way, you can add it to the navcron user's crontab by calling\n``nav start autoenable``.\n\nstart_arnold\n------------\n\nWhen a predefined detention is created you can use *start_arnold* to invoke a\nseries of detentions based on the input to the script.\n\nIf the file or list of addresses exist locally then you can pipe it in using for\ninstance ``cat``::\n\n  # cat scanresult.txt | nav/bin/start_arnold -i\n\nor you can do it from a remote server using ssh commands::\n\n  # cat scanresult.txt | ssh scanner@navinstall.network.com:nav/bin/start_arnold -i\n\nTo avoid having to type passwords you want to create public keys, like described\nfor instance `here <http://www.linuxproblem.org/art_9.html>`_.\n\nFile format\n~~~~~~~~~~~\n\nEach line in this file is assumed to consist of an IP- or MAC-address and\noptionally a comment (separated by a space). For each valid address a detention\nwill be made. Lines starting with *#* will be skipped.\n\nt1000\n-----\n\nThis script needs to be set up to run in the same way as `autoenable`_.\n\n*t1000* fetches all detained ports and checks if the MAC-address which was\nbehind the detained port is active on another port. If it is, it enforces the\ndetention on that port aswell. Depending on options given at detention-time it\nwill either remove the detention on the old port or just leave it.\n\n.. warning:: This does not detain the new port immediately after a detained\n   computer has moved to it, because it takes some time before NAV discovers the\n   new location of the MAC-address. This combined with the interval ``t1000``\n   runs in could give the user quite some time with access before being detained\n   again. This on-and-off behavior of internet access has been known to cause\n   confusion and annoyance among the users - use this script knowing that.\n\nConfiguring Arnold\n==================\n\nConfig files\n------------\n\nThe following configuration files are used by Arnold.\n\narnold.conf\n~~~~~~~~~~~\n\n``nav/etc/arnold/arnold.conf`` is divided into three sections.\n\n- **arnold** is the section that contains information about what database to use\n  and on what networking equipment Arnold should be able to detain ports. You\n  also define email-addresses here.\n- **loglevel** is deprecated. See the section about `Logging`_.\n- **arnoldweb** has just one config option, which sets the default detention\n  method when loading the web interface.\n\nnonblock.conf\n~~~~~~~~~~~~~\n\n``nav/etc/arnold/nonblock.conf`` is not really a config-file but an exception\nlist. Some addresses should, for various reasons, not be detained. They can be\nadded to this file. The format is defined in the file, and supports single\naddresses, lists and subnets.\n\nOn reading this file you will maybe notice options for defining netbox types\nthat are to be ignored. This is a deprecated option that existed because Arnold\nhad trouble communicating with some types of equipment. These kind of problems\nare now handled automatically.\n\nMailtemplates\n~~~~~~~~~~~~~\n\n``nav/etc/arnold/mailtemplates/*``\n\nWhen creating a predefined detention there is an option for “Path to mailfile”.\n\nArnold is able to send mail to those listed as responsible for the address it\ntries to detain. The mail-address is the contact address defined for an\norganisation derived for this IP- or MAC-address. You have to create the mail\ntemplate yourself. The default template directory contains a README-file that\nhas more information about how to create a template.\n\nLogging\n=======\n\nThe arnold scripts logs to individual files stored in\n``nav/var/log/arnold/``. The webinterface logs to STDERR, which Apache most\nprobably puts in it's error.log. The loglevel used for each script must be set\nin ``logging.conf``.\n\nThe loggers (with default loglevels) are::\n\n  start_arnold = INFO\n  t1000 = INFO\n  autoenable = INFO\n\n\nFAQ\n===\n\nMissing interfaces\n------------------\n\nWhen an interface that is a part of a detention is removed from NAV, commonly\nby removing the switch, Arnold will display a message regarding this. The\nlast known interface and switch will be displayed.\n\nTo close this detention just enable it manually. **This will not send any\ncommands to any network equipment**, only close the detention as seen from\nthe web interface.\n"
  },
  {
    "path": "doc/reference/authentication.rst",
    "content": "Authentication\n==============\n\nBy default, users and passwords are created and stored locally on the NAV\ninstance. It is possible to add in a second factor when authenticating (2FA/MFA).\n\nNAV also supports authenticating users via an external\nservice. The external methods NAV currently supports is authenticating with\nLDAP, and authenticating against the header REMOTE_USER, set by the web server.\n\n.. toctree::\n   :maxdepth: 1\n\n   mfa\n   ldap\n   social-account\n   remote_user\n"
  },
  {
    "path": "doc/reference/backend-processes.rst",
    "content": "==========================\n Backend processes in NAV\n==========================\n\nNAV has a number of back-end processes. This page attempts to give an overview\nof them.\n\n\nThe nav command\n===============\n\nThe :program:`nav` program is used to start, stop and query the running state\nof NAV's backend processes.\n\n:code:`nav list` lists all back-end processes. :code:`nav status` reports their\ncurrent running state. With reference to the list, jump directly to the\nrelevant section in this document:\n\n- `activeip`_\n- `alertengine`_\n- `dbclean`_\n- `emailreports`_\n- `eventengine`_\n- `ipdevpoll`_\n- `logengine`_\n- `mactrace`_\n- `maintengine`_\n- `navoui`_\n- `navstats`_\n- `netbiostracker`_\n- `pping`_\n- `servicemon`_\n- `smsd`_\n- `snmptrapd`_\n- `thresholdMon`_\n- `topology`_\n\nactiveip\n--------\n\nThis process runs every 30 minutes, summarizing the number of active IP\naddresses per prefix, based on data from the NAV database. The numbers are\nstored as Graphite metrics, thus enabling the subnet utilization trend graphs,\navailable pr. prefix or VLAN in the web UI.\n\n\n:Dependencies:\n  A working Carbon instance\n:Run mode:\n  cron\n:Configuration:\n  None\n:Logs:\n  :file:`collect_active_ip.log`\n\n\nalertengine\n-----------\n\nThe Alert Engine monitors the alert queue and dispatches alerts according to\nthe individual users' active alert profiles.\n\nAlert message templates must be defined for alerts to be understandable by the\nrecipients.\n\n:Dependencies:\n  `eventengine`_ must be running and post alerts to the alert queue. NAV users\n  must have set up their profiles.\n:Run mode:\n  daemon\n:Configuration:\n  - :file:`alertengine.conf`\n  - alert templates are defined in the config directory :file:`alertmsg/`\n:Logs:\n  :file:`alertengine.log`\n\nemailreports\n------------\n\nSends daily/weekly/monthly business report e-mail, according to subscriptions.\n\nFor each configured subscription in the :program:`Business Reports` web tool,\nthis cron job generates and dispatches the actual report e-mails.\n\n:Dependencies:\n  Subscriptions must be added using the :program:`Business Reports` web UI\n  tool.\n:Run mode:\n  cron\n:Configuration:\n  All configuration is done using the web interface.\n:Logs:\n  None\n\neventengine\n-----------\n\nThe Event Engine monitors the event queue, translating new events to alerts,\nwhich are then posted to the alert queue for processing by `alertengine`_.\n\nThe Event Engine has mechanisms for correlating and delaying events. For\nexample, when `pping`_ sends a down event for an IP device, it has a grace\nperiod of about 4 minutes to send a corresponding up event, before the Event\nEngine actually posts the alert that declares the IP device as down.\n\nAlso, the Event Engine examines the network topology to correlate events from\n`pping`_. If an IP device appears to be unreachable because NAV's path to it\npasses through another device currently known to be down, a ``boxShadow``\nalert will be posted instead of a ``boxDown`` alert.\n\n:Reference:\n  :doc:`Event Engine reference guide <eventengine>`\n:Dependencies:\n  The various monitors need to post events on the *event queue*, targeted at\n  ``eventEngine``, in order for the Event Engine to have anything to do.\n:Run mode:\n  daemon\n:Configuration:\n  :file:`eventengine.conf`\n:Logs:\n  :file:`eventengine.log`\n\n\ndbclean\n-------\n\nRegularly cleans out old data from the NAV database, using the\n:program:`navclean` program. The standard cleanup routine removes old web user\ninterface sessions, and deletes IP devices that have been scheduled for\ndeletion through either SeedDB or the API.  Additionally, it closes open ARP\nrecords that have been collected from routers that have been unreachable for\nmore than 30 minutes (adjustable by modifying the `dbclean` cron fragment).\n\n:Dependencies:\n  None\n:Run mode:\n  cron\n:Configuration:\n  None.\n:Logs:\n  None\n\nipdevpoll\n---------\n\nCollects inventory and status information from IP devices, using SNMP. More\ninformation can be found by reading the :doc:`ipdevpoll` documentation.\n\n:Dependencies:\n  Seed data must be added using the Seed Database tool.\n:Run mode:\n  daemon\n:Configuration:\n  :file:`ipdevpoll.conf`\n:Logs:\n  :file:`ipdevpoll.log`\n\n\nlogengine\n---------\n\nMonitors a log file for Cisco syslog messages, structuring them and storing\nthem in the NAV database. These messages are made searchable through the\nSyslog Analyzer web UI.\n\n:Dependencies:\n  Something, typically a syslog daemon, must put logs in a file for parsing.\n:Run mode:\n  cron\n:Configuration:\n  :file:`logger.conf`\n:Logs:\n  Outputs only to STDERR. Error messages will be sent by the cron daemon to\n  the email address specified in the ``ADMIN_MAIL`` option of\n  :file:`nav.conf`.\n\n\nmactrace\n--------\n\nRegularly search NAV's CAM log for \"watched\" MAC addresses, reporting new\nmatching entries. Use the *MAC Watch* web tool to put MAC addresses under\nsurveillance.\n\nThis process has a misleading name, for historical reasons. Previously, there\nexisted a process called *mactrace* that collected NAV's CAM logs from\nswitches. Today, this collection takes place in an `ipdevpoll`_ job, but\nfor deployment reasons, the file needed to have the same name.\n\n:Dependencies:\n  For this process to be useful, MAC addresses need to be added by using the\n  *MAC Watch* tool in the web interface.\n:Run mode:\n  cron\n:Configuration:\n  None, other than the list of watched addresses entered through the web\n  interface.\n:Logs:\n  :file:`macwatch.log`\n\n\nmaintengine\n-----------\n\nRegularly checks the maintenance schedule, enforcing it by dispatching the\nappropriate maintenance events for individual devices and services on NAV's\n*event queue*.\n\n:Dependencies:\n  NAV users must add maintenance tasks to the maintenance schedule for\n  this process to do anything useful.\n:Run mode:\n  cron\n:Configuration:\n  Maintenance tasks are configured in the web interface.\n:Logs:\n  :file:`maintengine.log`\n\n\nnavoui\n------\n\nPeriodically updates the database with Organizationally Unique Identifiers (OUIs)\nand their corresponding vendors. This enables NAV to display the vendor name\nof a device based on its MAC address, helping to identify whether a device is,\nfor example, from Juniper or Cisco.\n\n:Dependencies:\n  None\n:Run mode:\n  cron\n:Configuration:\n  None\n:Logs:\n  Logs to STDERR.\n\n\nnavstats\n--------\n\nRegularly produces Graphite metrics from the configured SQL statements in\n:file:`navstats.conf`. By default, SQL reports are configured to log metrics of\nthe number of difference IP Device types, the number of switch ports, and the\nnumber of switch ports that have an active link. More can be configured by the\nuser in the config file.\n\n:Dependencies:\n  None\n:Run mode:\n  cron\n:Configuration:\n  :file:`navstats.conf`\n:Logs:\n  :file:`maintengine.log`\n\n\nnetbiostracker\n--------------\n\nRegularly fetches NetBIOS names from active hosts in your network.\n\n*netbiostracker* scans IPv4 networks, using the ``nbtscan`` program. Results\nare searchable through the Machine Tracker tool.\n\n:Dependencies:\n  The program ``nbtscan`` must be installed\n:Run mode:\n  cron\n:Configuration:\n  :file:`netbiostracker.conf`\n:Logs:\n  :file:`netbiostracker.log`\n\npping\n-----\n\nPings all IP devices for status monitoring.\n\n*pping* monitors all IP devices in the database. It works effectively in\nparallel, being able to ping a large number of devices. Has configurable\nrobustness criteria for defining when a box actually is down. Results are\nposted on the event queue.\n\n.. important:: A host is declared unresponsive by pping after four consecutive\n               packet losses. This means that it takes between 80 and 99\n               seconds from a host stops responding until pping posts a\n               ``boxState`` event on the *event queue*\n\n               `eventengine`_ will have a grace period of one minute, before a\n               ``boxDownWarning`` is posted on the *alert queue*, and another\n               three minutes before an actual ``boxDown`` state is declared.\n\n               **In summary, expect 5-6 minutes to pass before a host is declared down.**\n\n:Dependencies:\n  None\n:Run mode:\n  daemon\n:Configuration:\n  :file:`pping.conf`\n:Logs:\n  :file:`pping.log` (configurable)\n\n\nservicemon\n----------\n\nMonitors configured services.\n\n*servicemon* monitors services on IP devices. It uses plugins to be able to\nmonitor a number of different services - almost 20 services are currently\nsupported. Writing custom plugins is also possible - see\n:doc:`../hacking/writing-a-servicemon-plugin`.\n\nEach plugin is by default run every minute with a default timeout of five\nseconds. After the plugin has reported the service down three times, servicemon\ndeclares it down.\n\n:Dependencies:\n  The service monitor itself has no dependencies, however custom service\n  monitors may introduce local dependencies.\n:Run mode:\n  daemon\n:Configuration:\n  :file:`servicemon.conf`\n:Logs:\n  :file:`servicemon.log` (configurable)\n\n\nsmsd\n----\n\nMonitors the SMS message queue, dispatching new messages as they appear.\n\nIf there are multiple simultaneous message to the same phone number, smsd\nstrives to fit as many of them as it can into a single SMS.\n\nsmsd supports multiple SMS dispatch methods, implemented as plugins. Multiple\ndispatcher plugins can be ordered to facilitate fallback methods when the\nprimary dispatch methods fail. The recommended dispatcher is based on\n`Gammu`_, and requires a mobile phone or other GSM unit attached directly to\nthe NAV server (typically using its RS232 or USB interfaces).\n\n:Dependencies:\n  A running `alertengine`_ to post SMS alerts in the SMS queue.\n:Run mode:\n  daemon\n:Configuration:\n  :file:`smsd.conf`\n:Logs:\n  :file:`smsd.log`\n\n\n.. _Gammu: http://wammu.eu/gammu/\n\nsnmptrapd\n---------\n\nReceives and processes SNMP traps and notifications.\n\n*snmptrapd* listens to port 162 for incoming traps. When the snmptrapd receives\na trap, it puts all the information in a trap object and sends the object to\nevery *trap handler* stated in the ``traphandlers`` option of :file:`snmptrapd.conf`. It\nis then up to the *trap handler* to decide if it wants to process the trap or just\ndiscard it.\n\n:Run mode:\n  daemon\n:Configuration:\n   :file:`snmptrapd.conf`\n:Logs:\n  - :file:`snmptrapd.log`: logs regular log output from the daemon\n  - :file:`snmptraps.log`: logs details of all received traps\n\n\nthresholdmon\n------------\n\nMonitors your Graphite metrics for exceeded thresholds.\n\nFor each configured threshold rule, *thresholdmon* monitors the associated\nGraphite metrics. Any metric that exceeds the threshold configured by the rule\nwill cause *thresholdmon* to post a threshold start event to the *event\nqueue*.\n\nA threshold end event is posted when the metric returns to a value below the\nset threshold - or, if you want hysteresis (which you probably do), the\nthreshold rule can also specify an explicit lower threshold value for clearing\nthe threshold alert.\n\n:Dependencies:\n  Threshold rules must be added using the web interface.\n:Run mode:\n  cron\n:Configuration:\n  All configuration is done using the web interface.\n:Logs:\n  :file:`thresholdmon.log`\n\n\ntopology\n--------\n\nDetects the topology of your network.\n\nThe topology process builds NAV's model of the physical network topology, as well\nas the VLAN sub-topologies.\n\nPhysical topology\n+++++++++++++++++\n\nThe topology discovery system builds NAV's view of the network topology based on\ncues from information collected previously via SNMP.\n\nThe information cues come from routers' IPv4 ARP caches and IPv6 Neighbor\nDiscovery caches, interface physical (MAC) addresses, switch forwarding tables\nand CDP (Cisco Discovery Protocol). These cues are mostly collected by the\n`ipdevpoll_` ``topo`` job, which maintains a list of neighbor candidates for\neach port in the network.\n\nThe physical topology detection algorithm is responsible for reducing the list\nof neighbor candidates of each port to just one single device.\n\nIn practice, the use of LLDP (and CDP) makes this process very reliable for\nthe devices supporting it, and this makes it easier to correctly determine the\nremaining topology even in the case of missing information.\n\n(However, CDP can be slightly unreliable in a heterogeneous network, as CDP\npackets may pass unaltered through switches that don't support CDP. Two Cisco\nswitches on each end of an HP switch may see each other as directly connected,\nwhile the HP switch between them remains invisible).\n\nVLAN topology\n+++++++++++++\n\nAfter the physical topology model of the network has been built, the logical\ntopology of the VLANs still remains. Since modern switches support 802.1Q\ntrunking, which can transport several independent VLANs over a single physical\nlink, the logical topology can be non-trivial, and indeed, in practice it usually\nis.\n\nThe VLAN discovery system uses a simple top-down, depth-first graph traversal\nalgorithm to discover which VLANs are actually running on the different trunks\nand in which direction. Direction is here defined relative to the router port,\nwhich is the top of the tree, currently owning the lowest gateway IP or the\nvirtual IP in the case of HSRP/VRRP. Re-use of VLAN numbers in physically\ndisjoint parts of the network is supported.\n\nThe VLAN topology detector does not currently support mapping unrouted VLANs.\n\n:Dependencies:\n  Needs complete and sane information in the database\n:Run mode:\n  cron\n:Configuration:\n  None\n:Logging:\n  :file:`navtopology.log`\n\n\nOther processes\n===============\n\narnold\n------\n\nThe different processes that define Arnold can be read more about in the\n:doc:`Arnold reference documentation <arnold>`.\n"
  },
  {
    "path": "doc/reference/cabling_and_patch.rst",
    "content": "=================\nCabling and Patch\n=================\n\nThe cabling and patch registry in NAV enables you to document your horizontal\ncabling system, to ultimately map which network outlets each switch port is\nphysically patched through to. This may be useful, for instance, to know which\nVLAN a switch port should be configured to use.\n\n.. note:: Another way of doing this is to configure your switch port\n          descriptions to contain the label of the ethernet jacks the ports\n          are patched through to. This enables you to search for these strings\n          in the main NAV search bar.\n\n\n\nConcepts\n========\n\n*Cabling* is used to register the ethernet cables that run from your wall\noutlets to the patch panels in your wiring closets (NAV *Rooms*). The ethernet\njacks on each end of such a cable should be labelled identically. *Patch* is\nused to register which switch port each cable is physically connected to.\n\n.. image:: cabling_and_patch.png\n\n\nCabling\n=======\n\nWhen adding cabling records, you must first choose the NAV *Room* from where\nthe cable runs. Then you enter the ethernet jack label. It helps to have\ndescriptive labels on your ethernet jacks.\n\nIf you want to, you can add information about where the outlet is located,\nsuch as a building name and office number.\n\n\nPatch\n=====\n\nPatch records describe how a switch port is connected an existing cabling\nrecord. First, you must select a switch you want to add the patch record for.\nBased on this, NAV filters out the cabling records that are terminated in the\nsame room as the switch. When adding a patch to a switch port, it will list\nall unpatched cables in that room as patch candidates.\n\n\nPort Details\n============\n\nIf a patch is registered on a switch port, the patch and cabling information\nwill be displayed in that port's *Port details* page, in the *Connection*\ntable.\n"
  },
  {
    "path": "doc/reference/dhcpstats.rst",
    "content": "==========\nDHCP Stats\n==========\n\n\nIntroduction\n============\n\n\nWhat DHCP servers are supported?\n--------------------------------\n\nNAV can request, collect, and display stats from DHCP servers if they expose an\nAPI for fetching stats. Alternatively, if a DHCP server does not expose an API\nfor fetching stats, a standalone script running on the DHCP server itself can\nsend stats directly to NAV's Graphite/Carbon timeseries database backend,\nalleviating the need for NAV to request and collect stats at the cost of extra\nmaintenance for the administrator.\n\nNAV currently supports collecting stats from one DHCP server implementations:\n\n:ref:`kea_dhcpv4_servers`\n   Configure at minimum a Kea DHCPv4 HTTP/HTTPS control socket, and assign each\n   pool in the Kea DHCPv4 configuration unique pool IDs, and NAV can start\n   collecting IPv4 stats from each Kea DHCPv4 pool over the control socket.\n\n\nWhat DHCP terminology does NAV use?\n-----------------------------------\nDHCP server implementations seem to use certain DHCP terms in slightly different\nways. To avoid confusion, here's all the DHCP terms that NAV uses.\n\nSubnet\n  A subnet.\nPool\n  An arbitrary set of IP addresses that a DHCP server can use when allocating IP\n  addresseses to a certain class of clients on that subnet.\nRange\n  The set of all IP addresses that are greater than or equal to some IP address\n  and smaller than or equal to some other IP address that a DHCP server can use\n  when allocating IP addresseses to a certain class of clients on that subnet.\nServer name\n  Name of a DHCP server instance, e.g. *kea-dhcp4-oslo*. Due to restrictions in\n  the Graphite/Carbon timeseries database, the name should only consist of\n  English letters, digits, hyphens, and underscores.\nGroup name\n  Name of a group of either subnets, pools, or ranges configured on a server\n  instance that NAV should display together. Due to restrictions in the\n  Graphite/Carbon timeseries database, the name should only consist of English\n  letters, digits, hyphens, and underscores.\n\n.. note::\n\n   When stats are collected, NAV will translate any terms used by external DHCP\n   servers to the corresponding term used in NAV.\n\n   For example, any mention of \"pool\" in data from a Kea DHCPv4 server will be\n   presented in the NAV web UI as \"range\". Any mention of \"range\" in in data\n   from a ISC DHCP server would have been presented in the NAV web UI as\n   \"range\". Any mention of \"pool\" in data from a MikroTik RouterOS v7 DHCP\n   server would have been presented in the NAV web UI as \"pool\", etc.\n\n.. note::\n\n   The term *group name* is not really a term used by any DHCP server, but many\n   DHCP servers do have a mechanism for grouping together similar subnets,\n   pools, and/or ranges under a common name.\n   By default, each range/pool/subnet is assigned to its own unique group.\n\n\nWhat DHCP stats are collected?\n------------------------------\nTotal addresses (IPv4)\n   The total amount of IP addresses controlled by the DHCP server on a per\n   range/pool/subnet basis.\nAssigned addresses (IPv4)\n   The amount of IP addresses that are in use (assigned to clients or used by\n   misbehaving clients) on a per range/pool/subnet basis.\nUnassigned addresses (IPv4)\n   The amount of IP addresses that are not in use (the difference between total\n   and assigned addresses) on a per range/pool/subnet basis.\nDeclined addresses (IPv4)\n   The amount of IP addresses that are used by misbehaving clients (and thus not\n   available for assignment) on a per range/pool/subnet basis. (This stat is\n   currently not used in NAV.)\n\nNAV collects these stats on a per range basis if possible. If that is not\npossible, it collects on a per pool basis if possible. If that is not possible\neither, it collects stats on a per subnet basis if possible.\n\n\nWhere can I see collected DHCP stats in NAV?\n--------------------------------------------\n\nDHCP stats are displayed in two types of pages in the NAV web UI you're probably\nalready familiar with:\n\n* **VLAN pages**. The stats collected for a group of ranges/pools/subnets are\n  displayed on a specific VLAN's page if at least one IP address contained in\n  the group also is contained in that VLAN.\n\n* **Prefix pages**. The stats collected for a group of ranges/pools/subnets are\n  displayed on a specific Prefix's page if at least one IP address contained in\n  the group also is contained in that Prefix.\n\nBelow is an example depicting how stats collected for two groups of ranges,\n\"Guest\" and \"Admin\" on the DHCP server \"kea-trd\", are displayed on the page for\nthe prefix ``172.16.0.0/24``. (Note how \"Guest\" and \"Admin\" are two separate\nprivate networks occupying the same private address space on the DHCP server;\nbut since the range ``127.16.0.1-127.16.0.255`` is collected under the group\nname \"Guest\", and the rest of the ranges are collected under the group name\n\"Admin\", the stats from the different private networks are separated correctly\nand won't interfere with each other. This separation would also have worked if\nthe stats came from separate servers, even if they had the same group name. So\nyou should only worry about stats from different private networks interfering\nwith each other if all stats come from the same server *and* has the same group\nname.)\n\n.. image:: ./dhcpstats-example.png\n\n\nConfiguration\n=============\n\nUsually, for each DHCP server you want to collect stats from, both NAV\n*and* the DHCP server needs to be configured.\n\nThe first subsection below describes how to configure NAV the first time you\nstart collecting DHCP stats. The following subsections describe how both NAV and\na specific DHCP server implementation's server needs to be configured for NAV to\nstart collecting stats from that server.\n\n\n\n.. _dhcpstats_nav_configuration:\n\nNAV\n---\n\nIf you :doc:`installed NAV </intro/install>` for the first time at version 5.17\nor later you should be good to go. Otherwise, you may need to follow or double\ncheck the steps described in this section.\n\nUpdating the Storage Schema\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nBefore DHCP stats are collected and subsequently sent to NAV's Graphite/Carbon\ntimeseries database for the first time, the database's storage schema must be\nupdated to :ref:`avoid graphing problems<graph_gaps_storage_schema>`.\n\n1. If it's not already there, add the following section to the\n   Graphite/Carbon *storage-schema* configuration file:\n\n   .. code-block:: ini\n     :caption: storage-schemas.conf\n\n     [nav-dhcp]\n     pattern = ^(nav|nav-contrib)\\.dhcp\\.\n     retentions = 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n   The retention periods in the *retentions* option can be adjusted to your\n   liking, but the shortest retention period should match the period of the\n   :program:`navdhcpstats` cronjob, which NAV configures to be five minutes\n   (300s) by default (but see also the next subsection).\n\n2. Make sure :program:`carbon-cache` is restarted.\n   (See :ref:`integrating_graphite_with_nav_configuring_graphite`\n   if you're lost.)\n\n\nUpdating the Crontab Entry\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nNext, a cronjob for the program :program:`navdhcpstats` that runs with a period\nthat matches the *retentions* configured above must be installed.\n\n1. If you set the shortest retention period above to be 300s, this matches the\n   period of the default :program:`navdhcpstats` cronjob that ships with NAV. In\n   this case, you can try installing the cronjob by running ``nav start\n   navdhcpstats``, and if this succeeds, you're done.\n\n2. Otherwise, if you set the shortest retention period above to instead be, say,\n   2 minutes (120s), you should save the following snippet in a file called\n   :file:`navdhcpstats` in NAV's :file:`etc/cron.d/` directory:\n\n   .. code-block:: console\n     :caption: etc/cron.d/navdhcpstats\n\n     */2 * * * * navdhcpstats\n\n   Of course, if it's not 2 minutes either, you should change the cron timespec\n   ``*/2 * * * *`` to match whatever you've set.\n\n\n3. Install the cronjob by running ``nav start navdhcpstats``.\n\n.. _kea_dhcpv4_servers:\n\nKea DHCPv4 Servers (IPv4)\n----------------------------\n\n.. note::\n\n    NAV works with Kea versions 2.4.0 and above. The most recent version known\n    to work with NAV is Kea version 3.0.0.\n\n.. note::\n\n   NAV does not require that any hook libraries have been installed into the Kea\n   DHCPv4 server (see *Hook Libraries* in `kea.readthedocs.io\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/hooks.html#hook-libraries>`_).\n   Kea offers a hook that adds extra API commands which become necessary to use\n   if one wants reliable stats when using a setup where multiple Kea servers share\n   the same underlying lease database (see *Statistics Commands for\n   Supplemental Lease Statistics* in `kea.readthedocs.io\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/hooks.html#libdhcp-stat-cmds-so-statistics-commands-for-supplemental-lease-statistics>`_);\n   if you run such a setup, keep in mind that NAV does not make use of this hook,\n   so stats may in this case be unreliable. [#f1]_\n\n.. note::\n   A pool in Kea is a range in NAV. NAV collects IPv4 stats from Kea DHCPv4\n   servers on a per-Kea-pool-basis (or, from NAVs perspective: a\n   per-range-basis).\n\nWe'll\nwalk through the steps needed to configure the Kea DHCPv4 server and NAV in\norder to start collecting stats. Repeat the steps for each Kea DHCPv4 server\nyou'd like to collect stats from.\n\nConfiguring a Kea DHCPv4 Server\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. note::\n\n    Kea versions 2.x.x are configured in a slightly different manner than Kea\n    versions 3.x.x. The configuration steps below are described with Kea\n    versions 3.x.x in mind; the steps needed for Kea versions 2.x.x should be\n    straightforward to infer. Nonetheless, we've included working examples for\n    both :ref:`Kea versions 3.x.x <kea_3_x_x_configuration_example>` and\n    :ref:`Kea versions 2.x.x <kea_2_x_x_configuration_example>` further below.\n\n1. A control socket that serves the Kea API of the Kea DHCPv4 server needs to be\n   set up with a ``socket-type`` of ``http`` or ``https`` and a\n   ``socket-address`` plus ``socket-port`` combination reachable either directly\n   or through a reverse proxy by NAV (see *Control Socket* in\n   `kea.readthedocs.io\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/dhcp4-srv.html#http-https-control-socket>`_).\n   NAV needs access to the three Kea API commands `config-get\n   <https://kea.readthedocs.io/en/kea-3.0.1/api.html#config-get>`_,\n   `config-hash-get\n   <https://kea.readthedocs.io/en/kea-3.0.1/api.html#config-hash-get>`_ and\n   `statistic-get-all\n   <https://kea.readthedocs.io/en/kea-3.0.1/api.html#statistic-get-all>`_. For\n   security purposes, consider disabling access to any other API command or at\n   least disabling write access over the control socket (as of Kea version\n   3.0.0, these security settings only seem to be available\n   through the `RBAC premium hook\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/hooks.html#libdhcp-rbac-so-role-based-access-control>`_).\n   Also consider enabling client SSL certificate authentication (see either your\n   reverse proxy's TLS documentation or *TLS/HTTPS Configuration* in `kea.readthedocs.io\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/security.html#tls-https-configuration>`_).\n   As stated above, `config-get\n   <https://kea.readthedocs.io/en/kea-3.0.1/api.html#config-get>`_ must be\n   available for NAV to use; therefore you should consider whether there's information in\n   the Kea configuration (such as user passwords) that are too sensitive to be\n   served.\n\n   .. note::\n\n      The `config-get\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#config-get>`_ API\n      command is needed to collect stats from each Kea pool since pool IDs are\n      not known beforehand by NAV (and as of the latest Kea version, version\n      3.0.0, no fit for purpose API command exist to obtain pool IDs). The\n      `network4-list\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#network4-list>`_ and\n      `subnet4-list\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#subnet4-list>`_ API\n      commands (open-sourced in Kea starting with version 3.0.0) could\n      alternatively have been used to instead collect stats from each Kea subnet\n      if access to the `config-get\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#config-get>`_ API\n      command is disabled by an administrator. Neither defaulting to nor falling\n      back to using `network4-list\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#network4-list>`_ and\n      `subnet4-list\n      <https://kea.readthedocs.io/en/kea-3.0.1/api.html#subnet4-list>`_ is\n      however currently supported by NAV.\n\n2. Each pool in the Kea DHCPv4 configuration **must** be manually assigned a\n   unique pool ID (see the note on pool IDs under *Statistics in the DHCPv4\n   Server* in `kea.readthedocs.io\n   <https://kea.readthedocs.io/en/kea-3.0.1/arm/dhcp4-srv.html#statistics-in-the-dhcpv4-server>`_).\n\n3. Each pool in the Kea DHCPv4 configuration\n   **may** be manually assigned a user-context containing the key ``group``\n   whose value is the pool's group name consisting of english letters,\n   digits, underscores and/or hyphens.\n\n.. _kea_3_x_x_configuration_example:\n\nKea Version 3.x.x Example\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA minimal Kea version 3.x.x DHCPv4 configuration may thus look like this (notice the keys\n``pool-id`` and ``user-context`` for each pool):\n\n.. code-block:: json\n   :caption: /etc/kea/kea-dhcp4.conf\n\n    {\n      \"Dhcp4\": {\n        \"subnet4\": [\n          {\n            \"subnet\": \"172.31.255.0/24\",\n            \"pools\": [\n              {\n                \"pool\": \"172.31.255.0/26\",\n                \"pool-id\": 1,\n                \"user-context\": {\n                  \"group\": \"second-floor\"\n                }\n              },\n              {\n                \"pool\": \"172.31.255.64/26\",\n                \"pool-id\": 2,\n                \"user-context\": {\n                  \"group\": \"second-floor\"\n                }\n              },\n              {\n                \"pool\": \"172.31.255.128 - 172.31.255.150\",\n                \"pool-id\": 3,\n                \"user-context\": {\n                  \"group\": \"first-floor\"\n                }\n              }\n            ],\n            \"id\": 1\n          }\n        ],\n        \"control-sockets\": [\n          {\n            \"socket-type\": \"https\",\n            \"socket-address\": \"10.20.30.40\",\n            \"socket-port\": 5060,\n            \"trust-anchor\": \"/path/to/the/ca-cert.pem\",\n            \"cert-file\": \"/path/to/the/agent-cert.pem\",\n            \"key-file\": \"/path/to/the/agent-key.pem\",\n            \"cert-required\": true\n          }\n        ]\n      }\n    }\n\n\n.. _kea_2_x_x_configuration_example:\n\nKea Version 2.x.x Example\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nControl sockets in Kea versions 2.x.x are configured in a slightly different\nway, because the handling of HTTP/HTTPS requests is delegated to a separate\nprogram (the *Kea Control Agent*) which is configured separately.\n\nThus, a minimal Kea DHCPv4 configuration may look like this instead:\n\n.. code-block:: json\n   :caption: /etc/kea/kea-dhcp4.conf\n\n\n    {\n      \"Dhcp4\": {\n        \"subnet4\": [\n          {\n            \"subnet\": \"172.31.255.0/24\",\n            \"pools\": [\n              {\n                \"pool\": \"172.31.255.0/31\",\n                \"pool-id\": 1,\n                \"user-context\": {\n                  \"group\": \"second-floor\"\n                }\n              },\n              {\n                \"pool\": \"172.31.255.64/31\",\n                \"pool-id\": 2,\n                \"user-context\": {\n                  \"group\": \"second-floor\"\n                }\n              },\n              {\n                \"pool\": \"172.31.255.128 - 172.31.255.150\",\n                \"pool-id\": 3,\n                \"user-context\": {\n                  \"group\": \"first-floor\"\n                }\n              }\n            ],\n            \"id\": 1\n          }\n        ],\n        \"control-socket\": {\n          \"socket-type\": \"unix\",\n          \"socket-name\": \"/run/kea/control-socket-4\"\n        }\n      }\n    }\n\n\n...followed by a minimal Kea Control Agent configuration that may look like this:\n\n.. code-block:: json\n   :caption: /etc/kea/kea-ctrl-agent.conf\n\n    {\n      \"Control-agent\": {\n        \"http-host\": \"10.20.30.40\",\n        \"http-port\": 5060,\n        \"trust-anchor\": \"/path/to/the/ca-cert.pem\",\n        \"cert-file\": \"/path/to/the/agent-cert.pem\",\n        \"key-file\": \"/path/to/the/agent-key.pem\",\n        \"cert-required\": true,\n        \"control-sockets\": {\n          \"dhcp4\": {\n            \"socket-type\": \"unix\",\n            \"socket-name\": \"/run/kea/control-socket-4\"\n          }\n        }\n      }\n    }\n\n\nConfiguring NAV to Recognize a Kea DHCPv4 Server\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nMake sure you've done the initial :ref:`(DHCP stats) NAV configuration steps\n<dhcpstats_nav_configuration>` first.\n\n1. Decide upon a unique server name consisting of english letters, digits,\n   underscores and/or hyphens to give the Kea DHCP server; we'll use the\n   arbitrary name ``kea-oslo-office`` in this example.\n\n2. Find the URL of the control socket that serves the Kea API of the Kea DHCPv4\n   server (we'll assume the URL is ``https://example.org:5060/`` which,\n   following the Kea configuration examples above, should resolve to\n   ``https://10.20.30.40:5060/``).\n\nThen, add a new section to the NAV *dhcpstats.conf* file, like so:\n\n.. code-block:: ini\n   :caption: /etc/nav/dhcpstats.conf\n\n   [server_kea-oslo-office]\n   type=kea-dhcp4\n   url=https://example.org:5060/\n\nThe above is a minimal working configuration for NAV to start collecting IPv4\nstats from the Kea API at ``https://example.org:5060/``. Notice a few things:\n\n* The section name starts with ``server_`` to inform NAV that the section\n  configures a server. The part after ``server_`` is ``kea-oslo-office``, which\n  becomes the name of the configured server in NAV.\n* The ``type=kea-dhcp4`` option informs NAV that this section configures a Kea\n  DHCPv4 server. This option must be included in all sections that configure Kea\n  DHCPv4 servers.\n* The ``url=...`` value must be a URL with HTTP or HTTPS as scheme.\n\nSome additional options can be given depending on your specific setup. Here's a fully\nconfigured Kea DHCPv4 server section:\n\n.. code-block:: ini\n   :caption: /etc/nav/dhcpstats.conf\n\n   [server_kea-oslo-office]\n   type=kea-dhcp4\n   url=https://example.org:5060/\n   timeout=5.0\n   http_basic_username=nav\n   http_basic_password=cfcc3475c4de4f0484a4a475ec0a6edd\n   client_cert_path=/etc/client-cert.pem\n   client_cert_key_path=/etc/client-cert-key.pem\n   user_context_groupname_key=group-name\n\n* Set the ``timeout`` option to specify how many seconds NAV should wait for an\n  HTTP response from the Kea API before timing out (NAV defaults to\n  5.0s).\n\n* Set the ``http_basic_username`` and ``http_basic_password`` options to specify\n  that NAV should authenticate to the API using HTTP Basic Authentication\n  with the given username and password.\n\n* Set the ``client_cert_path`` and ``client_cert_key_path`` options to specify\n  that NAV should authenticate to the API using client-side SSL certificates.\n  ``client_cert_path`` specifies the path to a file containing the client's\n  certificate. ``client_cert_key_path`` specifies the path to a file containing\n  the client's private key. You can optionally omit ``client_cert_key_path`` and\n  only specify ``client_cert_path``; in this case, it is assumed that\n  ``client_cert_path`` specifies the path to a file containing both the client's\n  certificate and its private key.\n\n* Set the ``user_context_groupname_key`` to specify what key inside the\n  ``user-context`` objects of the Kea DHCPv4 configuration NAV should use to look\n  up the group name for each Kea pool (NAV defaults to the key ``group`` when\n  looking up the group name of a Kea pool).\n\n\n.. note::\n\n   There's currently no option to manually specify root certificates that NAV\n   should trust when verifying the identity of HTTPS servers; NAV uses Mozilla's\n   list of root certificates as provided by the ``certify`` Python package.\n\n-----\n\n.. [#f1] The two main reasons that NAV doesn't make use of this hook is that it\n         is not loaded into Kea by default, and that the stats that it provides\n         are more coarse-grained (stats are per subnet) than those provided\n         through standard API commands used by NAV (where stats are per Kea\n         pool).\n"
  },
  {
    "path": "doc/reference/event-templates.rst",
    "content": "===============\nEvent Templates\n===============\n\nEvent Templates are introduced to be able to display more detailed information\nabout a specific event. This template is included in the status details and on\nthe event details page.\n\n\nCreating a template\n===================\n\nTo create a template for an event you need to know what the **event type** and\noptionally the **alert type** is.  For detail on this, please refer to\n:doc:`event and alert type reference documentation <alerttypes>`.\n\nFile structure\n--------------\n\nTo start using custom event templates create a directory called *templates* in\nNAV's etc-directory, and inside that directory you create the *alertmsg*\ndirectory. And finally inside this directory you can add event templates using\nthe following structure::\n\n  base.html\n  <event-type>\n  ..base.html\n  ..<alert-type>.html\n  <event-type>\n  ..base.html\n  ..<alert-type>.html\n\n\nFor a boxDown template it would look like this::\n\n  templates\n  ..alertmsg\n    ..boxState\n      ..boxDown.html\n\n\nCommon template for all events\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo create a template common for all events, create the *base.html* and add html\nthere.\n\nCommon template for an event-type\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo create a template common for for instance boxState-events, create the\ndirectory *boxState* and the file *base.html* inside the directory and add html\nthere.\n\nSingle template for an alert-type\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo create a template for all boxDown-events, you create the directory *boxState*\nbecause that is the event-type of *boxDown* and then you create the file\n*boxDown.html* and add html there.\n\n\nTemplate editing\n----------------\n\nThe templates are\nDjango-templates. https://docs.djangoproject.com/en/4.2/ref/templates/ . The\nbase-templates are optional but useful if you have common information for all\ntemplates. To learn about template inheritance, see\nhttps://docs.djangoproject.com/en/4.2/ref/templates/language/#template-inheritance .\n\n\nTemplate context\n----------------\n\nThe template has all the variables from the API as well as the alert-object\navailable. See /api/1/alert and the class `AlertHistory` in the file\n`python/nav/models/event.py` for more details.\n\n\nnav.models.event.AlertHistory\n-----------------------------\n\n.. autoclass:: nav.models.event.AlertHistory\n   :members:\n   :undoc-members:\n"
  },
  {
    "path": "doc/reference/eventengine.rst",
    "content": "============\nEvent Engine\n============\n\nIntroduction\n============\n\nThe :program:`Event Engine` is the backend process used by NAV to process the\n*event queue*. Whenever a NAV subsystem posts an event to the queue, the\n:program:`Event Engine` will pick it up and decide what do to with it.\n\nTypically, the :program:`Event Engine` will generate an alert from the event,\nor it may ignore the event entirely, depending on the circumstances. In some\ncases, it will delay the alert for a grace period, while waiting for another\ncorresponding event to resolve the pending problem.\n\n\nPlugins\n=======\n\nMost of the work of the :program:`Event Engine` is done by event handler\nplugins from the :py:mod:`nav.eventengine.plugins` namespace. Each event picked\nfrom the queue will be offered to each of the plugins, until one of them\ndecides to handle the event. If no plugins wanted to handle the event, the\n:program:`Event Engine` will perform a very simple default routine to translate\nthe event directly into an alert (possibly using alert hints given in the event\nitself).\n\n\nConfiguration\n=============\n\nThe operation of the :program:`Event Engine` can be customized using\nconfiguration options in :file:`eventengine.conf`. Most of the configuration\nconcerns itself with configuring the grace periods (timeouts) for various types\nof alerts. The default configuration looks somewhat like this:\n\n.. literalinclude:: ../../python/nav/etc/eventengine.conf\n   :language: ini\n\n.. _severity_levels:\n\nAlert severity\n--------------\n\nAll NAV alerts (as generated by :program:`Event Engine`) are assigned a\n**severity** value, in the interval *1 through 5*. These values can be used as\npart of your users' Alert Profile filters, and should be interpreted roughly\nlike this:\n\n- **5** = *Information*\n- **4** = *Low*\n- **3** = *Moderate*\n- **2** = *High*\n- **1** = *Critical*\n\nSeverity values are normally chosen by the NAV program that generates the event\nthat an alert is based on. However, NAV cannot distinguish what severity level\nany given alert constitutes for *your* NOC. Therefore, the :program:`Event\nEngine` lets you configure your own severity rules, using YAML_ syntax, in the\nconfiguration file :file:`severity.yml`. Any rules present in this file will be\nprocessed to set or modify the existing severity of any matching alert that is\ngenerated.\n\nConfiguring ``severity.yml``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nHere is an example severity configuration:\n\n.. code-block:: yaml\n   :caption: severity.yml\n\n   ---\n   default-severity: 3\n   rules:\n       - alert_type: boxDown\n         severity: 2\n         rules:\n             - netbox.category.id: GSW\n               severity: 1\n             - netbox.category.id: GW\n               severity: 1\n\n       - alert_type: boxDownWarning\n         severity: 5\n\n       - netbox.organization.id: foobar\n         severity: '+2'\n\nThis configuration starts off by assigning a *default severity* level of **3**\nto every alert that :program:`Event Engine` generates, regardless of what the\noriginal severity value of the event was.\n\nThen follows a list of rules that will be processed *in the order they appear*\nin the file. Each rule consists of:\n\n- One or more alert attribute match expressions.\n- One severity value modification expression to be applied to an alert that\n  matches the attribute expressions.\n- Optionally, a sub-list of more rules to further apply to any alert that\n  matched the expressions of this rule.\n\nThe first example rule will match any alert whose ``alert_type`` value equals\n``boxDown`` (NAV's alert type for a lasting \"box is unreachable\" incident). Any\nsuch alert will be assigned a severity level of **2**.  Furthermore, the rule\nlists two additional sub-rules to ensure that if the ``boxDown`` alert was\nissued for any netbox (IP Device) whose category is a router (a category id of\neither ``GSW`` or ``GW``), the severity is set to the most critical level of\n**1**.\n\nThe second top-level example rule will match any alert whose type is\n``boxDownWarning``, and set its severity to the least critical level of\n**5**. This is the stateless early warning the :program:`Event Engine` issues a\nfew minutes before declaring a stateful ``boxDown``. It is safe to consider\nthis type of alert as only *informational*.\n\nThe final top-level example rule will match any alert whose associated netbox\n(IP Device) is owned by the organizational id ``foobar``. This rule uses a\n*severity modifier expression* of ``+2``, which will add ``2`` to the current\nalert's existing severity value.\n\nIn summary, if a ``boxDown`` alert is dispatched for a router in your network,\nthis rule set will ensure its severity is set to **1**. However, if the router\nbelongs to your less important ``foobar`` department, two severity levels will\nbe deducted, and the alert comes out with a severity of **3**.\n\n\nModifier expressions\n~~~~~~~~~~~~~~~~~~~~\n\nThere are two types of supported severity modifier expressions for use in rules:\n\n1. Absolute values: An absolute integer will *replace* a matching alert's\n   current severity level.\n2. Relative values: Prefixing an integer with ``+`` (or ``-``) will *increase*\n   (or decrease) the existing severity value by the given amount.\n\n:program:`Event Engine` will silently ensure that no assigned or calculated\nseverity value will ever exceed the valid range of 1-5.\n\n.. important:: Please note that relative values **must be enclosed in quotes**,\n               to avoid confusion with absolute values. YAML interprets ``+2``\n               as the absolute value of 2, while ``'+2'`` is a relative\n               value.\n\n               A good practice would be to always quote your values, as that\n               will work as intended in all cases.\n\nAvailable ``event_type`` and ``alert_type`` values\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTwo of the available alert attributes that can be matched against in severity\nrules are ``event_type`` and ``alert_type``. However, ``event_type`` is a\nPython object: To match against an event type id/name, you must match against\nthe object's ``id`` attribute, i.e. ``event_type.id``, as the example\nconfiguration file shows.  See the :doc:`event- and alert-type reference\ndocumentation <alerttypes>` for a detailed list of available type names to\nmatch.\n\nOther matchable attributes\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMost alerts generated by the :program:`Event Engine` are associated with a\nspecific IP device registered in NAV (known as ``netbox`` internally). Severity\nrules can be used to match against attributes of IP devices, or even\nsub-attributes thereof.  As with the examples above, the ID (or name) of the\norganizational unit that is responsible for an IP device can be read from\n``netbox.organization.id``. The ID of the wiring closet this device is located\nin (as organized by you, the admin, in SeedDB), can be had from\n``netbox.room.id``.\n\nSee the reference documentation for the :py:class:`Netbox\n<nav.models.manage.Netbox>` model to see all the available attributes of an IP\ndevice.\n\n\n\nExporting alerts from NAV into other systems\n============================================\n\nThe :program:`Event Engine` can be made to export a stream of alerts. By\nsetting the ``script`` option in the ``[export]`` section of\n:file:`eventengine.conf` to the path of an executable program or script, the\n:program:`Event Engine` will start that program and feed a continuous stream of\nJSON blobs. describing the alerts it generates, to that programs ``STDIN``.\n\nAlert JSON format\n-----------------\n\nThe :program:`Event Engine` will export each alert as a discrete JSON\nstructure. The receiving script will therefore need to be able to parse the\nbeginning and end of each such object as it arrives. Each object will be\nseparated by a newline, but no guarantees are made that the JSON blobs\nthemselves will not also contain newlines.\n\n.. tip::\n\n   Here is a `Stack Overflow comment describing how Python's existing JSON library\n   can be used to decode arbitrarily big strings of \"stacked\" JSON\n   <https://stackoverflow.com/questions/27907633/multiple-json-objects-in-one-file-extract-by-python/50384432#50384432>`_,\n   such as is the case with the the alert export stream.\n\n\nAn exported alert may look like this as JSON:\n\n.. code-block:: json\n\n   {\n      \"id\" : 212310,\n      \"history\" : 196179,\n      \"time\" : \"2019-11-05T10:03:10.235877\",\n      \"message\" : \"box down example-sw.example.org 10.0.1.42\",\n      \"source\" : \"pping\",\n      \"state\" : \"s\",\n      \"on_maintenance\" : false,\n      \"netbox\" : 138,\n      \"device_groups\" : null,\n      \"device\" : null,\n      \"subid\" : \"\",\n      \"subject_type\" : \"Netbox\",\n      \"subject\" : \"example-sw.example.org\",\n      \"subject_url\" : \"/ipdevinfo/example-sw.example.org/\",\n      \"alert_details_url\" : \"/api/alert/196179/\",\n      \"netbox_history_url\" : \"/devicehistory/history/%3Fnetbox=138\",\n      \"event_history_url\" : \"/devicehistory/history/?eventtype=e_boxState\",\n      \"event_type\" : {\n         \"description\" : \"Tells us whether a network-unit is down or up.\",\n         \"id\" : \"boxState\"\n      },\n      \"alert_type\" : {\n         \"description\" : \"Box declared down.\",\n         \"name\" : \"boxDown\"\n      },\n      \"severity\" : 3,\n      \"value\" : 100\n   }\n\nAttributes explained\n~~~~~~~~~~~~~~~~~~~~\n\nThese are the attributes present in the JSON blob describing an alert:\n\n``id``\n  The internal integer ID of this alert in NAV. This number is volatile, as the\n  alert object disappears from NAV as soon as the :program:`Alert Engine` has\n  completed its processing of the alert.\n\n``history``\n  The internal integer ID of NAV's corresponding alert history entry. I.e., if\n  this alert created a new problem state in NAV, this will be a new ID. If this\n  alert resolves or otherwise concerns an existing state in NAV, this will\n  refer to the pre-existing history ID.\n\n  E.g. if a ``boxDown`` alert is issued for an IP device, and later, a\n  ``boxUp`` alert is issued for the same IP device, both of these alerts will\n  refer to the same alert history entry.\n\n``time``\n  This is the timestamp of the alert, in ISO8601 format. Usually, this\n  corresponds to the timestamp of the originating event. E.g., for ``boxState``\n  type alerts, this corresponds to the exact timestamp the :program:`pping`\n  program reported it could no longer receive ICMP echo replies from a device.\n\n``message``\n  This is a short, human-readable description of what the alert is all about.\n\n``source``\n  This is a reference to the NAV subsystem that postged the original event that\n  caused this alert.\n\n``state``\n  This is NAV's internal moniker for the state represented by this alert:\n\n  ``x``\n    This is a stateless alert (e.g. a generic warning or point-in-time event)\n  ``s``\n    This alert starts a new state in the alert history table.\n  ``e``\n    This alert ends (resolves) an existing state in the alert history table.\n\n``on_maintenance``\n  A boolean that tells you whether the subject of this alert is currently on\n  active maintenance, according to NAV's schedule. This would typically be\n  used to withhold notifications about alerts that occur during a known\n  maintenance period for a device.\n\n``netbox``\n  A database primary key to the IP device this alert is associated with.\n\n``device_groups``\n  A list of NAV device groups that the associated IP device is a member of.\n\n``device``\n  A database primary key to the physical device this alert is associated with.\n\n``subid``\n  If this alert's subject is a sub-component of the IP device referenced in the\n  ``netbox`` attribute, this will be some internal sub-ID of this\n  component. This reference ID can be interpreted differently, depending on the\n  alert type, which is what NAV does when the ``subject`` attribute described\n  below is composed.\n\n``subject``\n  An object that describes the alert's actual subject (or object, if you will,\n  since NAV's terminology is grammatically challenged).\n\n``subject_type``\n  NAV's internal model name of the subject's data type. This would typically be\n  things like ``Netbox``, ``Interface``, ``Module``, ``GatewayPeerSession``\n  etc.\n\n  A ``subject_type`` value combined with the ``subid`` value can be used as a\n  unique identifier of a NAV component by a 3rd party tool.\n\n``subject_url``\n  A relative canonical URI to a NAV web page (meant for human consumption)\n  describing the alert's subject.\n\n``alert_details_url``\n  A relative canonical URI to NAV's REST API, where the details of the alert\n  state entry can be retrieved.\n\n``netbox_history_url``\n  A relative canonical URI to a NAV web page (meant for human consumption)\n  detailing the recent alert history of this alert's associated IP device.\n\n``event_history_url``\n  A relative canonical URI to a NAV web page (meant for human consumption)\n  detailing the recent history of alerts of the same event type (e.g. all the\n  recent alerts of the ``boxState`` category, if this is a ``boxDown`` alert).\n\n``event_type``\n  A sub-structure describing the event category of this alert:\n\n  ``id``\n    The event category id of this alert.\n  ``description``\n    A description of said event category.\n\n``alert_type``\n  A sub-structure describing the alert type of this alert.\n\n  ``id``\n    The event type id of this alert.\n  ``description``\n    A description of said alert type.\n\n``severity``\n  The severity of this alert. This is usually an integer in the interval **1**\n  through **5**, where **1** is the most critical level.\n\n``value``\n  The alert value. This is usually an integer in the range *0-100*, but at the\n  moment, this carries no specific meaning in NAV.\n\n\n\n.. _YAML: https://en.wikipedia.org/wiki/YAML\n"
  },
  {
    "path": "doc/reference/geomap.rst",
    "content": "========\n Geomap\n========\n\nThe Geomap tool is a web app that renders your network topology on a\ngeographical map, provided that you have seeded your room data with\ngeographical coordinates.\n\nGeomap is powered by OpenLayers_, and the underlying map data is\nprovided by OpenStreetMap_.\n\n-----------------------\nTechnical documentation\n-----------------------\n\nThe server-side part is written in Python and the client-side in\nJavaScript.  These are described separately below.\n\nThe server-side code is in the :py:mod:`nav.web.geomap` module,\nwhile the client-side code is in the directory ``media/js/geomap``.\n\n\nURLs and parameters\n===================\n\n\nURLs\n----\n\nThere are two types of resources in Geomap:\n\n1. The web page showing the map ( ``/geomap/[variant]/`` )\n2. Geographical network data in GeoJSON or KML format\n   ( ``/geomap/[variant]/data?[parameters]`` )\n\nWhere ``[variant]`` represents a variant name defined in the configuration\nfile.  The URL ``/geomap`` redirects to ``/geomap/[v]/``, where ``[v]`` is the\nfirst variant the user has access to.\n\n\nQuery string parameters\n-----------------------\n\nThe map web page accepts the following parameters in the query string\n(these are used by the JavaScript code only; the server side code\nignores them):\n\n``bbox``\n  Bounding box of area to display.  The format of this field follows the\n  definition of the \"box\" parameter in the `OpenSearch Geo extension`_\n  (a dump of the original wiki site can also be found on `Github`_).\n\n``lat`` and ``lon``\n  Position for center of map\n\n``zoom``\n  Zoom level for map (0-18)\n\n``layers``\n  Description of which layers to show.  For each layer in the map, one of the\n  characters 'B' (base layer, displayed), '0' (base layer, not displayed), 'T'\n  (non-base layer, displayed), 'F' (non-base layer, not displayed).\n\n``time``\n  Selected time interval for load data.  Interval size (index, 1-5), dash,\n  start time (``YYYYMMDDhhmm`).  The interval sizes are: 1: month; 2: week; 3:\n  day; 4: hour; 5: 10 minutes.  (See ``media/js/geomap/TimeInterval.js``)\n\nThe arguments (``lat``, ``lon``, ``zoom``, ``layers``, ``time``) are intended\nto be used together.  They specify (more or less) the complete state of the\nuser interface, and are used by the «Link to this configuration» link, which\nsets up these arguments to reflect the current state.\n\nThe ``bbox`` argument is not intended to be used together with the other\narguments (the arguments ``lat``, ``lon`` and ``zoom``, if present, override\nthe ``bbox`` argument).  The ``bbox`` argument is meant as a way for other\napplications to be able to create links to Geomap for showing a certain area.\n\n\nThe data resource accepts the following parameters in the query\nstring:\n\n``format``\n  Data format for result, either ``geojson`` or ``kml``.\n\n``bbox``\n  Bounding box of map area.\n\n``viewport{Width,Height}``\n  Size (in pixels) of map as shown in user agent.\n\n``limit``\n  How close (in pixels) two nodes may be before they are collapsed to one.\n\n``time{Start,End}``\n  Time interval for load data, in the form expected by rrdfetch_ for its\n  ``--start`` and ``--end`` options.\n\n\nServer\n======\n\n\nOverview\n--------\n\nAlmost all the server-side code is involved with generating the data\nresource.  The web page showing the map requires almost no server-side\nprocessing.\n\nData flows in pipeline style through the modules :py:mod:`db`,\n:py:mod:`graph`, :py:mod:`features`, :py:mod:`output_formats`; each of which\nhas as its main purpose the transformation of data from one form to another.\nExcept for the data representations which constitute the interfaces from one\npart of the pipeline to the next, these modules are mutually independent.  The\ndata flow is controlled by the function :py:func:`views.get_formatted_data`.\n\nThe :py:mod:`conf` module reads and parses Geomap's configuration file.  The\n:py:mod:`utils` module provides general utility functions/classes which are\nused freely in the other modules.\n\n\nData pipeline\n-------------\n\nThe :py:mod:`db` module collects data from the database and `RRD` files based\non the query string arguments.  The result is two dictionaries, representing\nnetboxes and connections, respectively.  Each netbox is represented as a\ndictionary; each connection as two dictionaries (one for each end).\n\nThe :py:func:`graph.build_graph` function creates a graph structure from the\ndictionaries the :py:mod:`db` module creates, while :py:func:`graph.simplify`\nremoves uninteresting things from such a graph.  The simplification consists\nof:\n\n1. removing objects which are outside the viewing area; and\n\n2. reducing the level of detail by collapsing sets of objects which are close\n   to each other to single objects.\n\nThe resulting simplified graph contains pointers to all the original\ndata in the form of a tree in each node (since nodes are collapsed in\ntwo stages, see below) and a list in each edge.\n\nFor nodes, the collapsing is done in two steps: First, all the\nnetboxes in a single room are combined to one node.  Next, rooms that\nare sufficiently close to each other are combined to \"places\".  After\nthe nodes are collapsed thus, any edges with the same two places as\ntheir endpoints are combined to one edge.\n\nThe :py:mod:`features` module converts a graph to a set of \"features\",\ni.e. nodes and lines with geographical coordinates.  Each feature has an\nassociated style (`color` and `width`/`radius`) and a specification of a popup\nbox for the feature.\n\nThe :py:mod:`output_formats` module converts a list of features to a string in\n`GeoJSON` or `KML` format (for `KML` output, some information is lost).\n\n\nTricks to avoid reading RRD files: Cache, pseudo-laziness\n---------------------------------------------------------\n\nLoad data is read from `RRD` files.  Each netbox/connection has its own file\n(each connection actually has two), so we may end up reading very many files.\nTo avoid much file reading, we do two things:\n\n1. Use a data structure inspired by lazy evaluation to avoid reading files\n   which are not needed.\n2. Cache values read from RRD files.\n\nFor `1`, we use the :py:class:`utils.lazy_dict` class.  An instance of\nthis class acts like a dictionary, but may contain values which are\nnot computed before they are looked up.  This way, the code may be\nwritten almost as if all the files were read in the beginning (one\nmust be a little careful to avoid unintentionally causing all values\nto be evaluated), while only those files which turn out to be needed\nare actually read.\n\nFor `2`, we use Django's caching framework.  See the section labeled\n\"Cache\" in ``db.py``.\n\n\nClient-side\n===========\n\n\nOverview\n--------\n\nThe client-side part of Geomap is written in JavaScript and uses the\nOpenLayers library for all the difficult stuff.\n\n.. image:: client-file-dependencies.svg\n   :width: 100%\n\nThis diagram shows dependency relations between the JavaScript files and\nlibraries.  Rectangles represent JavaScript files, ellipses external\nlibraries.  When a file depends on another both directly and indirectly, the\ndirect relation is not drawn, to avoid cluttering the diagram with too many\narrows.  The complete diagram would be something close to the transitive\nclosure of the one drawn.\n\nThe file ``util.js`` is not shown in the diagram (all files implicitly depend\non it).  This file contains general utility functions which are used in other\nfiles as if they were part of the standard library.\n\nMost of the files provide somewhat more general functionality than what is\nstrictly needed in Geomap, and are intended to be mostly independent of each\nother.  The file ``geomap.js`` instantiates all needed things from the other\nfiles and connects them together.\n\nThe entry point for the client-side code is the function ``init``, defined in\n``geomap.js``.  This function is called when the page is loaded, through the\n``ONLOAD`` attribute on the ``BODY`` element.\n\n\nFilename conventions\n--------------------\n\nAny file whose name starts with an uppercase character defines a data type\n(`class`) of the same name (and defines few or no other names at the\ntop-level).  For some of the files which depend on OpenLayers_, the data type\ndefined is an extension of an OpenLayers class.  For other files, the data\ntype definition consists of a constructor function and a prototype object.\n\nAny other file simply contains a collection of functions, and\nintroduces no new named data types.\n\n\nExternal libraries\n------------------\n\nOpenLayers_\n~~~~~~~~~~~\n\nThe OpenLayers_ library is included directly from the http://openlayers.org\nsite.  The URL we use always points to the newest version.\n\n.. NOTE:: This may cause the NAV side of things to break if the OpenLayers API\n   changes in a non-compatible way. On the other hand, keeping it at a fixed\n   version has proved to be problematic because we include code from\n   OpenStreetMap, and this code apparently depends on the newest version of\n   OpenLayers (shortly after OpenLayers 2.8 was released, using the\n   OpenStreetMap code with OpenLayers 2.7 did not work).\n\nThere are two sets of online code documentation pages for OpenLayers:\nAPI documentation and documentation of everything.  The first contains\nonly the functions which are explicitly marked with \"API\" in the code.\nOne should generally stick to the API documentation, since other\nfunctions are probably regarded as internal and likely to change.\nHowever, there seems to be some \"API\" labels lacking here and there,\nso sometimes it is useful to compare with the full documentation (or\nthe source code).\n\n================================= ==========================================================\nAPI documentation for OpenLayers  https://openlayers.org/en/latest/apidoc/\nFull documentation for OpenLayers https://openlayers.org/en/latest/doc/\n================================= ==========================================================\n\n\nOpenStreetMap_\n~~~~~~~~~~~~~~\n\nWe include a JavaScript file from OpenStreetMap_ which provides OpenLayers\nclasses for showing OpenStreetMap data.\n\nThe reference to the file was found here:\nhttp://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example\n\n\nProj4js_\n~~~~~~~~\n\nWe include the Proj4js_ library for coordinate transformations.  We do\nnot use this library directly, only through OpenLayers.  (OpenLayers\nchecks to see if Proj4js is available and uses it if it is).\n\nThe library is necessary to perform the conversions to/from UTM in\n``coordinates.js``, which again is used by ``PositionControl.js``, which shows\nthe coordinates for a point the user clicked on the map.\n\n\nHTML/JavaScript interaction\n---------------------------\n\nThe following conventions are used for relating JavaScript and HTML:\n\nApart from the ``ONLOAD`` attribute on ``BODY``, the HTML code (as it appears\nwhen sent to the client) contains no references to JavaScript.  Whenever some\nreference from HTML elements to JavaScript is needed (for example a function\ncall in an ``ONCLICK`` attribute), it is the JavaScript's responsibility to\nset this up by modifying the DOM.\n\nMuch of the JavaScript code does, however, expect certain elements to\nbe present in the HTML code.  The elements are generally adressed by\nid.  To avoid very tight connections between the JavaScript and HTML,\na JavaScript object which need to access an HTML element generally\ntakes the id of the element as argument instead of having it hardcoded.\nJavaScript object which access several related HTML elements usually\ntake a string used as common prefix for all ids as argument, and have\nthe remaining parts hardcoded.  This strategy is used in\n``TimeNavigator``, ``Calendar`` and ``PositionControl``.\n\n\n\n\nProblems/Future work\n====================\n\n\nPerformance\n-----------\n\nOn the test system and test data used, generating the\n``/geomap/[variant]/data`` resource takes some time.  In the best cases,\nit takes one or a few seconds; in the worst, up to a minute.\n\nThe major cause (by far) of the long processing time is reading of RRD\nfiles.  As discussed in the `Server`_ section above, we cache values\nfrom RRD files.  This is the reason why the time varies a lot (the\nworst cases of time usage occur only with empty cache).\n\nWhen moving or zooming the map, the new position will normally include\nmuch of the same data as the previous, so most of the needed RRD data\nwill be in the cache, giving a \"best case\" processing time.  When\nchanging time interval or when first opening the map, on the other\nhand, the data is usually not in cache, giving a \"worst case\"\nprocessing time.\n\nTo improve the \"best case\" time, it is necessary to improve either the\ndatabase queries or the Python code, or both.  The *very* limited\nprofiling which has been performed suggests that both the database\nqueries and the subsequent processing of the results are responsible\nfor their fair share of the total processing time.  No \"optimization\"\nhas been done on the Python code (although the programmer has tried to\navoid extremely inefficient solutions), so there is probably some\npotential for performance improvement here.  The database queries are\nlarge and hairy beasts (and will probably bite you if you appear\nthreatening); whether (and if so, how) they can be made more efficient\nis hard to say.\n\nTo improve the \"worst case\", the load data must simply be made\navailable in a different form than RRD files so that it can be read\nfaster.\n\n\nIntegration with Netmap\n-----------------------\n\nSome ideas for integration between Geomap and Netmap:\n\nLink from Geomap to Netmap\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIt should be relatively easy to add a ``bbox`` argument (with the same\nformat as Geomap's ``bbox`` argument, see above) to Netmap and make it\nshow only things that are inside the specified area.  This could\neither be implemented in the Netmap client, in which case the server\nwould have to include geographical coordinates in the GraphML document\nit produces; or on the server, in which case the client would have to\nforward the bbox argument to the server.\n\nIf Netmap had such an argument, one could add a link in Geomap for\nshowing the currently displayed area in Netmap.  The way to do this\nwould be to listen on the map's ``moveend`` event to update the link\neach time the map is moved, and call ``getExtent()`` on the map to get the\nbounds to use in the link.\n(See https://openlayers.org/en/latest/apidoc/)\n\n\nLink from Netmap to Geomap.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf Netmap could somehow produce a geographical bounding box for the\npart of the topology the user has zoomed in on, it could create a link\nto the same area in Geomap.  This may however in many cases not give\nvery interesting results, since netboxes that are very far apart\ngeographically may be close to each other in Netmap.\n\nA different strategy could be to create a link to Geomap for each\nnetbox shown in Netmap (similar to the «View in IP Device Info» link).\nThis link could go to a Geomap page with the map centered on the\nselected box and the zoom level chosen by some reasonable heuristic.\nFor example, the zoom level could be chosen such that all direct\nneighbors of the netbox in Netmap's graph are visible.\n\nIf Netmap's GraphML data document is extended to include geographical\ncoordinates, both of these strategies can be implemented in the Netmap\nclient by computing a bounding box and using it as the ``bbox`` argument\nto Geomap (see descriptions of query string parameters above).\n\n\nDefault configuration\n---------------------\n\nThe popup boxes in the \"normal\" variant currently contain simple\nlistings of all properties.  This is convenient as an example of which\nproperties are available and how to get at them, but probably far from\nideal for actual use.  Better defaults should be provided based on\nwhat users actually want to see.\n\n\nVarious small issues\n--------------------\n\n* Geomap is tested almost exclusively in Firefox 3 on Ubuntu (it looks like it\n  is working in Opera 9 on Ubuntu too).  Since there is a lot of JavaScript\n  code here, there is great potential for differences between browsers.  It\n  would probably be a good idea to do some testing in more browsers.\n\n* If (when) the server, for some reason, fails in generating the data\n  resource, the network information simply disappears from the map,\n  with no error message given to the user.  This is probably not\n  ideal, although users may not be very interested in hearing that a\n  \"GargleException occured on line 42 of obscurities.py\" either.  For\n  development, the Web Developer Tools in either Firefox or Chrome are\n  very convenient -- its console lists all the URLs requested by the\n  script, so it is easy to follow the last one in order to see what the\n  server said.\n\n* When loading the Geomap page, then waiting for a long time without\n  doing anything, the `next` and `last` buttons in the time selection\n  remain disabled, even though the next time interval should be\n  selectable (to be able to select a newer time interval, one must\n  first change the time selection, for example by going one step back\n  or up).  This could be fixed by using JavaScript's ``setTimeout``\n  function to update the user interface regularly.\n\n* If some users are interested in always seeing the newest data, it\n  could be useful to have a `most recent data` selection as an\n  alternative to selecting a specific time interval.  When this\n  selection is activated, the data could be updated regularly even\n  when the map is not moved (use ``setTimeout``).  Implementing this is a\n  small matter of JavaScript programming.\n\n* When zooming far out, the network data has a tendency to disappear\n  completely.  This is probably caused by the fact that longitudes\n  wrap around, so when the width of the map area is close to a\n  multiple of the width of the whole world map, the difference between\n  the longitude at the left and right edge is approximately zero.\n  This confuses the code which filters out things that are outside the\n  viewing area.  It should not be very difficult to come up with a\n  hack to fix this.\n\n* The :py:func:`utils.fix` function has a known error (conveniently, none of\n  the actual calls to the function cause this error to occur) marked with a\n  `TODO` comment.  It should probably be fixed.  (No, the function is, despite\n  the name, able to fix itself.  Not in that sense, at least).\n\n\n\n.. _OpenLayers: http://openlayers.org/\n.. _OpenStreetMap: http://openstreetmap.org/\n.. _OpenSearch Geo extension: https://web.archive.org/web/20180427065533/http://www.opensearch.org/Specifications/OpenSearch/Extensions/Geo/1.0/Draft_2#The_.22box.22_parameter\n.. _Github: https://github.com/dewitt/opensearch/blob/master/mediawiki/Specifications/OpenSearch/Extensions/Geo/1.0/Draft%202.wiki\n.. _rrdfetch: http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html\n.. _Proj4js: http://proj4js.org/\n.. _Core JavaScript Reference: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\n"
  },
  {
    "path": "doc/reference/index.rst",
    "content": "====================\n Reference material\n====================\n\nThis section contains reference material for end-users.\n\n.. note:: Any documentation aimed specifically at developers should be in\n          the :doc:`/hacking/index` section.\n\n.. toctree::\n   :maxdepth: 1\n\n   management-profiles\n   arnold\n   cabling_and_patch\n   eventengine\n   event-templates\n   alerttypes\n   geomap\n   ipam\n   ipdevpoll\n   authentication\n   mailin\n   models-event\n   models-manage\n   navstats\n   portadmin\n   radius\n   radius-install\n   smsd\n   snmptrapd\n   backend-processes\n   jwt\n   dhcpstats\n"
  },
  {
    "path": "doc/reference/ipam.rst",
    "content": "============================\nIPAM - IP Address Management\n============================\n\nIntroduction\n============\n\nIPAM is a tool to make network planning and management more pleasant. It does so\nby constructing a visual representation of how the address space is used, and\nalso allows for easy filtering and discovery of prefixes.\n\nWhat can IPAM do?\n=================\n\nCurrently you are able to\n\n* filter prefixes according to criteria like the net type, VLAN number and what\n  organization owns the prefix\n* order prefixes by VLAN, prefix, usage (active clients as percentage of the\n  total number of addressable hosts) and how much of the prefix is allocated\n* view the different prefixes found within a registered prefix (scope) and what\n  areas of the address space are (or are not) in use\n* request and reserve prefixes of a certain size within a scope, given that the\n  address space is unused (:ref:`reserving_prefixes`).\n\nExploring your network\n======================\n\n.. image:: ipam-main-ui.png\n\n1. The search form. Here you can construct a query to only show the prefixes you\n   want to see.\n\n2. A node within the IPAM, in this case the prefix \"10.0.0.0/8\"\n\nThe prefix user interface\n-------------------------\n\n.. image:: ipam-ui.png\n\n1. General information about the prefix, like the net ident and its associated\n   VLAN number.\n2. Statistics about this prefix. Note that usage is related to the current\n   number of active hosts, whereas allocation is based on the percentage of the\n   total address space used by \"sub-prefixes\" within this prefix.\n3. Overview of the address space (the \"subnet map\"). This shows you how the\n   address space of the prefix is used, and can be used to easily discover\n   available ranges. You can select nodes by clicking on them.\n4. Sliding rule to easily view only parts of the prefix. This is useful for\n   viewing very large prefixes with small allocations, and complements the zoom\n   functionality built into the IPAM.\n\nZooming\n-------\n\n.. image:: ipam-zoomed.png\n           \nYou can zoom into the subnet map by clicking on the slider and selecting the\narea you want to focus on (the dark grey area in the slider above). You can also\nzoom by double-clicking or by using your scroll wheel.\n\n.. _reserving_prefixes:\n\nHow to reserve prefixes\n=======================\n\n.. image:: ipam-reserving.png\n\n* Find a suitable, available (white) range that you would like to reserve\n  within. Select the range by clicking on it.\n* Enter the desired minimum size of the reservation (number of hosts). You can\n  now select the appropriate range from a dropdown-menu.\n* After selecting the desired range, click \"Create reservation\" to open a a\n  pre-filled form in SeedDB, where the actual registration is done.\n\nWorkflows\n---------\n\nI want to see all the networks within VLAN 20\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nEnter \"20\" into the VLAN field in the form to the left. Click \"Search\". Voila,\nyou're done.\n"
  },
  {
    "path": "doc/reference/ipdevpoll.rst",
    "content": "=========\nipdevpoll\n=========\n\nipdevpoll is the main SNMP collection engine of NAV. Its work is divided into\njobs, which runs a series of collection plugins for each IP device at set\nintervals. These jobs are fully user-configurable.\n\nUsage\n=====\n\n.. program-output:: ipdevpolld --help\n\nManually running a job for a given netbox\n-----------------------------------------\n\nUnscheduled runs of jobs can be run against any NAV-monitored device from the\ncommand line. To run the ``inventory`` job for the switch\n``some-sw.example.org``, type::\n\n  ipdevpolld -J inventory -n some-sw\n\nThe ``-n`` argument can be given as a prefix of a device's sysname, or as an\nIP address (the device still needs to be registered in NAV).\n\n\nConfiguring ipdevpoll\n=====================\n\nipdevpoll is configured in :file:`ipdevpoll.conf`. This is an \"ini\"-style\nconfiguration file with multiple sections.\n\nSection [ipdevpoll]\n-------------------\n\n``logfile``\n  Where to put log messages.  If this starts with ``/`` or ``.`` it will be\n  interpreted literally.  Otherwise, the file will be created in the NAV log\n  directory.\n\n``max_concurrent_jobs``\n  The maximum number of concurrent jobs within a single ipdevpoll process. It\n  may be necessary to adjust this if you keep running out of available file\n  descriptors\n\nSection [snmp]\n--------------\n\nThis section is used to change the SNMP polling parameters from their\ndefaults.\n\n``timeout``\n  The initial timeout value for a request, given as a number of seconds. All\n  requests will be retried up to three times, with an exponential increase in\n  the timeout value. The default is *1.5* seconds.\n\n``max-repetitions``\n  How many values to ask for in each SNMP `GETBULK` request, 10 being the\n  default.\n\n\nSection [plugins]\n-----------------\n\nUsed to list all the plugins to load into an ipdevpoll process, and assign\nthem short aliases.  Plugins are loaded from the built-in\n:py:mod:`nav.ipdevpoll.plugins` package unless a fully qualified class name is\nsupplied as a value.  To load your homebrew plugin class :py:class:`Foo` from\nthe :py:mod:`homebrew.foo` module, add::\n\n  foo = homebrew.foo.Foo\n\nTo load the built-in :py:mod:`snmpcheck` plugin from the\n:py:mod:`nav.ipdevpoll.plugins` package, all that is needed is::\n\n  snmpcheck=\n\nSection [prefix]\n----------------\n\n``ignored``\n  A list of IPv4 and/or IPv6 prefixes that should never be inserted into the\n  database, even if they are collected from a device's interfaces.\n\n\nSection [netbox_filters]\n------------------------\n\n``groups_included``\n  Allows you to specify the devices that WILL be handled by this instance of\n  ipdevpoll using a space separated list of group ids.\n\n``groups_excluded``\n  Allows you to specify the devices that WON'T be handled by this instance of\n  ipdevpoll using a space separated list of group ids.\n\nSection [linkstate]\n-------------------\n\n``filter``\n  Selects a filter for generating ``linkState`` alerts when link state changes\n  are detected on interfaces. The default value is ``topology``, indicating\n  that alerts should only be generated for interfaces that have been detected\n  as an uplink or downlink.\n\n  The value ``any`` will generate alerts for all link state changes, but\n  **this is not recommended** for performance reasons.\n\n\nJob sections\n------------\n\nAny section whose name starts with the ``job_`` prefix defines a new job\nconfiguration. The following settings can be configured for jobs:\n\n``interval``\n  How often the job should be scheduled for each device. Values can be given a\n  unit suffix of ``s``, ``m`` or ``h`` to indicate seconds, minutes or hours.\n\n``plugins``\n  A sequence of plugins to run in this job. Given as a space-separated list of\n  names as configured in the global ``[plugins]`` section.\n\n``intensity``\n  An internal per-process limit on how many concurrent jobs of this type can\n  run at any given time.\n\n\n.. _ipdevpoll-multiprocess:\n\nMultiprocess mode\n=================\n\nipdevpoll runs all polling tasks asynchronously in a single thread. Threads\nare reserved for synchronous communication with the PostgreSQL database\nbackend. Even on a multi-core server, this means all of ipdevpoll's work is\nlimited to a single core. Once ipdevpoll's workload grows beyond what a single\ncore can handle, ipdevpoll can optionally run in a *multiprocess mode*, using\nthe ``--multiprocess`` option.\n\nIn multiprocess mode, ipdevpoll spawns a number of worker processes, while the\nmaster process becomes a simple job scheduler, distributing the actual jobs to\nthe individual workers.\n\n.. warning::\n\n   ipdevpoll's default number of workers processes and threads aren't\n   necessarily sane for multiprocess usage. Unless a number of workers is\n   supplied to the ``--multiprocess`` option, it will spawn a number of\n   workers corresponding to the number of cores it detects on your system. The\n   default number of database threads in ipdevpoll's threadpool is **10** per process,\n   which means each worker process will create **10 individual connections to\n   PostgreSQL**.\n\n   These numbers multiply fast, and can end up easily saturating PostgreSQL's\n   default pool of 100 available connections, causing other NAV processes to\n   be unable to connect to the database. When enabling multiprocess mode, you\n   should really tune down the threadpool size by adding the\n   ``--threadpoolsize`` option.\n\n\nAnother good thing about the multiprocess mode is that you can limit the\nnumber of jobs any worker process will run before it is killed and respawned.\nThis may provide additional protection against unintended resource leaks. See\nthe ``--max-jobs-per-worker`` option.\n\nYou can make sure ipdevpoll always runs in multiprocess mode by altering the\n``command`` option in the ``ipdevpoll`` entry of the configuration file\n:file:`daemons.yml`.\n"
  },
  {
    "path": "doc/reference/jwt.rst",
    "content": ".. _jwt-configuration:\n\nConfiguring JWT authentication\n-----------------------------\n\nThe NAV API supports authentication with JSON Web Tokens (JWT). JWT issuers that your NAV instance should\naccept tokens from can be configured in :file:`webfront/jwt.conf`. The public key for the issuer is required,\nand can be configured either directly as a PEM file or via a JWKS endpoint.\n\nA configuration for two issuers may look like this::\n\n  [https://jwt-issuer1.no] # Name of issuer matching `iss` claim of issued tokens\n  aud=https://mynav.no # Expected value of the `aud` claim in issued tokens\n  keytype=JWKS # JWKS endpoint is used as source for public key\n  key=https://jwt-issuer1.no/jwks # URL to JWKS endpoint\n\n  [https://jwt-issuer2.no]\n  aud=https://mynav.no\n  keytype=PEM # PEM file is used as source for public key\n  key=/some/path/public_key.pem # Path to PEM file\n\nOther issuers may be defined by adding additional sections of the same format.\nIt is important to note that the section names must match the ``iss`` claim of the tokens generated\nby this issuer. This is how NAV maps an incoming token to the correct configuration.\n\nLikewise ``aud`` must match the ``aud`` claim of the tokens. This is a security measure to make sure a NAV instance\nonly accepts tokens meant for it. Otherwise the NAV instance would accept all JWT tokens generated by an issuer.\nIn other words, anyone using the same token issuer could generate tokens and gain access to your NAV instance.\n\n.. _local-jwt-configuration:\nConfiguring local JWT token generation\n--------------------------------------\nLocal JWT token generation is configured in the ``nav`` section of :file:`webfront/jwt.conf`.\n\nYou must configure three things: a private key, a public key, and the issuer name.\nThe keys must be a private/public RSA keypair in PEM format.\nThe issuer name is used for the ``iss`` and ``aud`` claims of generated tokens.\nThe issuer name can be whatever you want, but a natural choice is the domain name of your NAV instance (e.g. ``nav.example.com``).\nOptionally, you can also configure the lifetime of access tokens and refresh tokens.\nThese can be configured using the units s=seconds, m=minutes, h=hours or d=days.\nDefault values are 1 hour for access tokens and 24 hours for refresh tokens.\nAn example configuration is shown below::\n\n  [nav]\n  # Absolute path to private key in PEM format\n  private_key=/path/to/jwtRS256.key\n  # Absolute path to public key in PEM format.\n  public_key=/path/to/jwtRS256.key.pub\n  # Used for the 'iss' and 'aud' claims of generated tokens.\n  name=nav.example.com\n  #access_token_lifetime=1h\n  #refresh_token_lifetime=24h\n\n\nThe keypair can be generated like so::\n\n  openssl genrsa -out jwtRS256.key 4096\n  openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub\n\nThis keypair should ideally only be used for JWT token generation in one NAV instance.\nIf you are using the same keypair for multiple instances, you should use different issuer names for each instance.\nThat is important because the NAV token validation uses the public key and the ``aud`` claim to decide if the token is valid,\nso if someone else can generate tokens using the same keypair and the same ``aud`` claim they can also gain access to your NAV instance.\n"
  },
  {
    "path": "doc/reference/ldap.rst",
    "content": "=======================================\nConfiguring NAV for LDAP authentication\n=======================================\n\nNAV can authenticate web users externally via an LDAP server.  This\narticle describes how this feature works, and how to configure it.\n\nConfigurable options\n====================\n\nConfiguration for LDAP authentication is stored in the config file\n:file:`webfront/webfront.conf`, in the ``[ldap]`` section.  You should restart\nApache to make sure any config changes take effect.\n\nAvailable options:\n\n**enabled**\n  Set to `yes` to enable LDAP authentication.\n\n**server**\n  IP address or hostname of your LDAP server.\n\n**port**\n  The port your LDAP server listens to. The default is 389 for unencrypted and\n  TLS encrypted sessions. SSL encrypted LDAP is usually on port 636.\n\n**encryption**\n  `tls`, `ssl` or `none`\n\n**uid_attr**\n  The name of the attribute that uniquely identifies each user object (RDN in\n  LDAP-speak). The value of this attribute will be the login name in NAV. The\n  default setting is `uid`.\n\n**name_attr**\n  The name of the attribute that contains a user's full real name.  The\n  default setting is `cn`.\n\n**basedn**\n  The root DN of your user objects.\n\n**require_group**\n  The DN of a group object, in which membership is required for a user to be\n  allowed to log in to NAV.  Its objectClass should be one of `groupOfNames`,\n  `groupOfUniqueNames` or `posixGroup`.\n\n**group_search**\n  .. versionadded:: 4.4\n\n  Can be used to customize the search filter used when verifying group\n  memberships using the `require_group` option (specifically for group schemas\n  that register user distinguished names as member values).\n\n  The default value, ``(member=%%s)`` is fine for most purposes. Microsoft AD\n  will support a recursive group search operator, so that nested group\n  memberships are allowed. Use a value of\n  ``(member:1.2.840.113556.1.4.1941:=%%s)`` to enable this AD extension\n\n**require_entitlement**\n  .. versionadded:: 4.9.6\n\n  A string defining the name of an entitlement that the user object must have\n  in order for the user to be allowed to log in to NAV.\n\n**admin_entitlement**\n  .. versionadded:: 4.9.7\n\n  If a user object has this entitlement, the user will be granted membership\n  in the NAV Administrators group. If the user object does not have this\n  entitlement, the user will be stripped of their Administrator privileges. If\n  unset, nothing happens.\n\n**entitlement_attribute**\n  .. versionadded:: 4.9.6\n\n  Can be used to customize the user object attribute used to verify entitlements.\n  The default value is ``eduPersonEntitlement``.\n\n**lookupmethod**\n  .. versionadded:: 3.7\n\n  Selects which method to use for finding users in the LDAP directory. Valid\n  settings are `direct` and `search`. `direct` will cause the user's DN to be\n  constructed as ``<uid_attr>=<login name>,<basedn>``. Specifying `search`\n  will bind to the LDAP directory as `<manager>`, if specified, and search for\n  ``<uid_attr>=<login name>``. If a bind `suffix` is specified for AD-style\n  binds, using a manager account can be avoided.\n\n**suffix**\n  .. versionadded:: 4.4\n\n  When set to a doman suffix, such as ``@ad.example.com``, the username to\n  bind as will be constructed from the login name and this suffix. This type\n  of direct bind is supported by Microsoft AD, and can be used to avoid having\n  to configure a manager user to search the catalog.\n\n**manager**\n  .. versionadded:: 3.7\n\n  The DN of a user to bind as when searching for users in the directory. Can\n  be omitted if authentication is not required for searches, or the\n  `lookupmethod` is `direct`.\n\n**managerpassword**\n  .. versionadded:: 3.7\n\n  Password needed to bind as the `manager` user.\n\n**encoding**\n  .. versionadded:: 3.15\n\n  Specifies the character encoding to expect from the LDAP catalog. The\n  default value is UTF-8.\n\n**debug**\n  Set to `yes` to have the OpenLDAP library output debug information to\n  stderr.  This will usually end up in the Apache error logs.\n\n\nExample config\n--------------\n\nA typical setup for an OpenLDAP server looks like this:\n\n.. code-block:: ini\n\n  [ldap]\n  enabled = yes\n  server = ldap.example.com\n  port=389\n  basedn= ou=people,dc=example,dc=com\n  require_group= cn=noc-operators,cn=groups,dc=example,dc=com\n\nA typical setup for Microsoft Active Directory would look more like this:\n\n.. code-block:: ini\n\n  [ldap]\n  enabled = yes\n  server = ad.example.com\n  port = 636\n  encryption = ssl\n\n  uid_attr = sAMAccountName\n  basedn = ou=people,dc=example,dc=com\n  lookupmethod = search\n  manager = cn=John Doe,ou=people,dc=example,dc=com\n  managerpassword = secret\n\nOr, without a manager account, like this:\n\n.. code-block:: ini\n\n  [ldap]\n  enabled = yes\n  server = ad.example.com\n  port = 636\n  encryption = ssl\n\n  uid_attr = sAMAccountName\n  basedn = ou=people,dc=example,dc=com\n  suffix = @ad.example.com\n  lookupmethod = search\n\n\nCertificates\n------------\n\nIf you are using TLS or SSL encryption with your LDAP server, you may need to\nconfigure your OpenLDAP installation with the proper certificates.  On most\nsystems, you should see the man page :manpage:`ldap.conf(5)` for details.  On\nDebian, this config file is located in :file:`/etc/ldap/`.\n\nIf you are using a self-signed certificate, you should put that certificate\n(in *pem* format) somewhere accessible on your NAV server, and add the\n`TLS_CACERT` option to :file:`ldap.conf`::\n\n  TLS_CACERT     /path/to/my/certificate.pem\n\n\nHow it works\n============\n\nWhen LDAP authentication is enabled, NAV will, if necessary, attempt\nto do authenticated binds against the LDAP tree when users log in.\n\n**When the user is created locally by the admin**\n\n* NAV performs a regular password authentication against the local NAVdb. LDAP\n  is not used.\n\n**When the user does not exist in the local NAVdb**\n\n* NAV attempts to authenticate the user with LDAP, according to its config.\n* If successful, it creates a local account in NAVdb for this user. The user's\n  full name is retrieved from LDAP, and a salted hashed copy of the password\n  is stored in the database.D\n* If unsuccessful, the login attempt is rejected.\n* If the LDAP server did not answer, the login attempt is rejected, and an\n  LDAP error is displayed.\n\n**When the user exists in the local NAVdb, and has previously been retrieved from the LDAP server**\n\n* NAV attempts to authenticate the user with LDAP, according to its config.\n* If successful, it updates the local account in NAVdb with the user's\n  full name and a hashed copy of the supplied password.\n* If unsuccessful, the login attempt is rejected.\n* If the LDAP server did not answer, NAV falls back to local\n  authentication against the hashed password copy in NAVdb.\n\nUsers should always be able to login to NAV to diagnose network problems, even\nif the LDAP server happens to be unreachable (this could be the very problem\nyou want to inspect).  The above documented authentication procedure makes\nsure that any user known to NAV will be able to log in as long as NAV is up.\nLDAP-based users that have never logged in to NAV before will not be able to\ndo so as long as the LDAP server is unreachable.\n\nAuthenticating existing NAV accounts with LDAP\n==============================================\n\nUsers that have been created locally in NAV will not be authenticated with the\nLDAP server when LDAP authentication is enabled at a later time.  The only way\nto do this is to tinker with the SQL database.\n\nRun :code:`psql nav nav`, use the password from :file:`db.conf`.  List the\nexisting accounts::\n\n  nav=# select * from account;\n    id  |  login  |       name        | password | ext_sync\n  ------+---------+-------------------+----------+----------\n      0 | default | Default User      |          |\n      1 | admin   | NAV Administrator | password |\n   1000 | foo     | Foo Bar           | password |\n   1001 | arthur  | A. Dent           | password |\n   1002 | zaphod  | Z. Beeblebrox     | password | ldap\n  (5 rows)\n\nThe `ext_sync` column defines what external mechanism is used to authenticate\na user.  As you can see, only the user *zaphod* will be authenticated using\nLDAP here.  To allow the user *arthur* to be authenticated using LDAP\n(assuming the LDAP server knows of a user with that login name), issue the\nfollowing SQL statement:\n\n.. code-block:: sql\n\n  UPDATE account SET ext_sync='ldap' WHERE login='arthur';\n"
  },
  {
    "path": "doc/reference/mailin.rst",
    "content": "========\n MailIn\n========\n\nMailIn provides a simple engine for transforming e-mail alerts from 3rd party\nsoftware into NAV events.  These events can then be processed by NAV's event-\nand alert systems.\n\nSee also `the original blueprint specification for MailIn\n<https://nav.uninett.no/wiki/devel:blueprints:mailin>`_.\n\n\nConfiguring MailIn\n------------------\n\nThese examples all assume your NAV installation prefix is the default\n``/usr/local/nav``.\n\nRedirecting mail to the MailIn program\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe mail transfer agent on your NAV server must be configured to accept SMTP\nconnections from outside the server, or no messages will come through.\n\nPick an e-mail address on your NAV server to send 3rd party alerts to, for\nexample `mailin@nav.example.org`.  Mail received at this address should be\npiped through the ``mailin`` program.  This can usually be accomplished by\nadding an e-mail alias to :file:`/etc/aliases`, like this::\n\n  cat >> /etc/aliases <<EOF\n  mailin: \"| /usr/local/nav/bin/mailin\"\n  EOF\n  newaliases\n\nAlso, for ``mailin.py`` to work properly, it needs write access to its log\nfile. Your mail delivery agent will likely run the program under a user ID\nthat has no write access to the file. Consult your MDA documentation; a\ntypical choice for Postfix on a Debian system is to run external commands as\nthe user ``nobody``. Make sure to change ownership of the log file::\n\n  chown nobody /usr/local/nav/var/log/mailin.log\n\n\nSelecting plugins\n~~~~~~~~~~~~~~~~~\n\nAdd the plugins you want to use to the ``plugins`` variable in\nyour :file:`mailin.conf` file. For example::\n\n  plugins =\n    nav.mailin.plugins.whatsup\n    nav.mailin.plugins.kake\n\nThe plugins will be tried in the order they are listed in the config file, so\nif the ``whatsup`` plugin accepts the message here, ``kake`` will never be\ncalled.\n\nAlert message templates\n~~~~~~~~~~~~~~~~~~~~~~~\n\nEach plugin will define its own set of event and alert types for its\ndomain. The example plugins come with their own alert message templates in the\n:file:`/usr/local/nav/etc/alertmsg/` directory, but if you write your own\nplugins with your own event and alert types, you will need to write your own\nalert message templates in this directory as well.\n\nHere's an example for the ``whatsup`` plugin, which defines the ``whatsup``\nevent type. Each event it generates contains the ``subject`` and ``body``\nvariables, which can be referenced in the alert message templates:\n\n1. For email alerts there's :file:`alertmsg/whatsup/default-email.txt`::\n\n    Subject: {{ subject }}\n\n    {{ body }}\n\n   For email alerts, the first line of the template should always start with\n   ``Subject:``, which causes the rest of that line to be used as the subject\n   header of the sent email.\n\n2. For SMS alerts there's :file:`alertmsg/whatsup/default-sms.txt`::\n\n    {{ subject }}\n\n   The subject variable is usually short and appropriate for a quick SMS\n   alert.\n"
  },
  {
    "path": "doc/reference/management-profiles.rst",
    "content": "===================\nManagement profiles\n===================\n\nIntroduction\n============\n\nManagement profiles are how to configure NAV with the necessary credentials and\noptions to manage networked devices. You may require multiple management\nprofiles to manage all your devices.  They are created and edited in the\n\"management profile\" tab in the SeedDB tool, available from the Toolbox.\n\nThe simplest scenario is the one where all your network devices support SNMP,\nusing the same community, and you only need to fetch data, not send\nconfiguration changes, from NAV. In this case, you need only a single\nmanagement profile, to define the SNMP community used on your devices, and then\nyou will assign this profile to all your devices in the SeedDB tool.\n\nAn IP device can be assigned multiple profiles as well. A common scenario for\nthis is a device you wish to make configuration changes on, either through\n:doc:`PortAdmin </reference/portadmin>` or :doc:`Arnold\n</reference/arnold>`. Typically, you will create one management profile with\nthe read-only SNMP community, which NAV will use for all operations where it\nonly needs read access to the devices. You will need to create a second\nmanagement profile containing an SNMP community that will give PortAdmin write\naccess to the switch, and the ``Write`` checkbox will need to be checked on\nthis profile.\n\nSupported profile types\n=======================\n\nTraditionally, NAV only supported SNMP, but as of NAV 5.1, this changed.\n\nSNMP\n----\n\nNAV currently supports SNMP versions **1** and **2c**, which can be selected\nfrom the :guilabel:`Version` dropdown in the management profile form.\n\n.. image:: /intro/seeddb-add-profile.png\n\nChecking the :guilabel:`Write` checkbox will tell NAV that the community\nconfigured in this profile will provide NAV with write access to the devices it\nis assigned to.\n\nOtherwise, the procedure for creating an SNMP profile is documented in the\n:doc:`Getting started guide </intro/getting-started>`.\n\nSNMPv3\n------\n\nSNMPv3 profiles are configured separately from SNMP v1/v2c profiles, as they\nrequire different authentication settings. Instead of a simple community string,\nSNMPv3 uses security names, authentication protocols, and privacy protocols.\n\n.. _snmpv3-cisco-context-access:\n\nSNMPv3 and Cisco switches\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWhen using SNMPv3 with Cisco switches, additional switch configuration may be\nrequired to allow NAV to collect complete data.\n\nCisco switches maintain separate BRIDGE-MIB instances for each active VLAN. NAV\nneeds to query these instances to collect MAC address tables for machine\ntracking and to detect network topology. With SNMP v1/v2c, this is done using\nCisco's *community string indexing* (e.g., ``public@20`` for VLAN 20). With\nSNMPv3, this is done using SNMP *contexts* (e.g., ``vlan-20``).\n\nBy default, SNMPv3 users may not have access to these VLAN contexts. You must\nconfigure the switch to grant access. For example::\n\n  snmp-server group mygroup v3 auth context vlan- match prefix\n\nThis grants the SNMPv3 group ``mygroup`` access to all contexts starting with\n``vlan-``, which covers all VLAN-specific BRIDGE-MIB instances.\n\n.. warning::\n\n   Without this configuration, NAV will be unable to collect per-VLAN switching\n   data from Cisco switches using SNMPv3. This results in:\n\n   * Incomplete or missing MAC address tracking (Machine Tracker)\n   * Potentially incomplete network topology detection\n\n   If you notice missing data after switching from SNMPv2c to SNMPv3, check your\n   switch's SNMPv3 context access configuration.\n\nNAPALM\n------\n\nNAV can use the NAPALM_ library to manage some devices, using NETCONF_ or other\nunderlying protocols. As of NAV 5.1, these profiles are only used to configure\n*Juniper* switches in :doc:`PortAdmin </reference/portadmin>`, as Juniper does\nnot support SNMP write operations for modifying device configuration.\n\nAdding a NAPALM profile looks like this:\n\n.. image:: napalm-profile-example.png\n\nThese fields can be configured:\n\nDriver\n  The NAPALM \"driver\" to use for communication. This is usually vendor\n  specific. Currently, only the JunOS driver can be selected, since Juniper is\n  the only platform NAV needs NAPALM on.\n\nUsername\n  Which username to access the switch with. The JunOS driver uses SSH, so this\n  would be an SSH user that can run netconf commands on the switch.\n\nPassword\n  The SSH password for this user.\n\nPrivate key\n  An SSH private key that will give SSH access as the configured user. If\n  filled out, the password is assumed to be the passphrase to unlock the key\n  itself. Leave ``password`` empty if the key doesn't have one.\n\nUse keys\n  If checked, the JunOS driver will use the SSH keys available in the file\n  system of the NAV web server for authentication. This usually means that the\n  keys must be present in the home directory of the user running the NAV Django\n  application, in :file:`~/.ssh/`.\n\nAlternate port\n  If access to the switch is not on the default port (22, in the case of the\n  JunOS driver), put the alternate port here.\n\n\n.. _`NAPALM`: https://napalm.readthedocs.io/en/latest/\n.. _`NETCONF`: https://en.wikipedia.org/wiki/NETCONF\n\n.. _http-rest-api-management-profile:\nHTTP APIs\n--------------\nAs of NAV 5.12, HTTP API profiles are used to configure access to\nservices of the following devices.\n\n`Palo Alto PAN-OS firewalls`_\n  A HTTP API profile is needed for NAV to access the firewall's ARP information.\n\n.. warning:: The Palo Alto ARP implementation in NAV does not currently verify TLS\n             certificates when accessing a Palo Alto API.  This will be changed\n             at a later date, but if it worries you, you should not configure\n             any netboxes to use the Palo Alto Arp service yet.\n\n.. image:: http-rest-api-profile-example.png\n\nIf you have a Palo Alto PAN-OS firewall running on a netbox managed by NAV,\nwith a secret API key of ``762e87e0ec051a1c5211a08dd48e7a93720eee63``,\nyou can configure NAV to fetch ARP information from this firewall by\ncreating a new management profile with\n\n* Protocol set to ``HTTP API``,\n\n* API key set to ``762e87e0ec051a1c5211a08dd48e7a93720eee63``,\n\n* Service set to ``Palo Alto ARP``,\n\nand then add this management profile to the netbox.\n\n.. _`Palo Alto PAN-OS firewalls`: https://docs.paloaltonetworks.com/pan-os/11-0/pan-os-panorama-api/pan-os-xml-api-request-types/configuration-api/get-active-configuration/use-xpath-to-get-arp-information\n"
  },
  {
    "path": "doc/reference/mfa.rst",
    "content": "===========================\nMulti-factor authentication\n===========================\n\nMulti-factor authentication (aka. 2-factor authentication or \"2FA\") needs to be\nenabled site-wide before it is available. If disabled, the ``My account``-page\nwill have a tab mentioning that it is disabled. After enabling, that tab will\nchange to allow the logged in user to set up 2FA for themselves.\n\nThe configuration is stored in the ``[multi-factor-authentication]`` section of\n:file:`webfront/authentication.toml`.\n\nThe default settings are::\n\n    [multi-factor-authentication]\n    enabled = false\n    support-recovery-codes = true\n\nChanging ``enabled`` to ``true`` will turn on TOTP support, including 10\nrecovery keys per account. Turn off recovery keys support by toggling\n``support-recovery-codes`` to ``false``.\n\nThere is no way to force the activation of second factor support on first\nlogin, or activate a second factor on behalf of someone else via sudo, as the\nbeneficiary's own password is needed.\n\nLocally controlled 2FA is incompatible with using REMOTE_USER to log in, pick one.\n"
  },
  {
    "path": "doc/reference/models-event.rst",
    "content": "Central data models of NAV's event/alert subsystems\n===================================================\n\nEventQueue\n----------\n.. autoclass:: nav.models.event.EventQueue\n   :members:\n   :undoc-members:\n\nEventQueueVar\n-------------\n.. autoclass:: nav.models.event.EventQueueVar\n   :members:\n   :undoc-members:\n\nAlertQueue\n----------\n.. autoclass:: nav.models.event.AlertQueue\n   :members:\n   :undoc-members:\n\nAlertQueueVariable\n------------------\n.. autoclass:: nav.models.event.AlertQueueVariable\n   :members:\n   :undoc-members:\n\nAlertHistory\n------------\n.. autoclass:: nav.models.event.AlertHistory\n   :members:\n   :undoc-members:\n\nAlertHistoryVariable\n--------------------\n.. autoclass:: nav.models.event.AlertHistoryVariable\n   :members:\n   :undoc-members:\n\nAlertHistoryMessage\n--------------------\n.. autoclass:: nav.models.event.AlertHistoryMessage\n   :members:\n   :undoc-members:\n\nEventMixIn\n----------\n.. autoclass:: nav.models.event.EventMixIn\n   :members:\n   :undoc-members:\n\nEventType\n---------\n.. autoclass:: nav.models.event.EventType\n   :members:\n   :undoc-members:\n\nAlertType\n---------\n.. autoclass:: nav.models.event.AlertType\n   :members:\n   :undoc-members:\n\n"
  },
  {
    "path": "doc/reference/models-manage.rst",
    "content": "Central data models of NAV's management subsystems\n==================================================\n\nNetbox\n------\n.. autoclass:: nav.models.manage.Netbox\n   :members:\n   :undoc-members:\n\nNetboxType\n----------\n.. autoclass:: nav.models.manage.NetboxType\n   :members:\n   :undoc-members:\n\nCategory\n--------\n.. autoclass:: nav.models.manage.Category\n   :members:\n   :undoc-members:\n\nInterface\n---------\n.. autoclass:: nav.models.manage.Interface\n   :members:\n   :undoc-members:\n\nRoom\n----\n.. autoclass:: nav.models.manage.Room\n   :members:\n   :undoc-members:\n\nLocation\n--------\n.. autoclass:: nav.models.manage.Location\n   :members:\n   :undoc-members:\n\nOrganization\n------------\n.. autoclass:: nav.models.manage.Organization\n   :members:\n   :undoc-members:\n"
  },
  {
    "path": "doc/reference/navstats.rst",
    "content": "========\nnavstats\n========\n\n*navstats* makes it possible to retrieve any data from the database and send it\nto Graphite so that it can be used in graphs and reports in NAV and other tools\nwith access to the Graphite web-api.\n\nIntroduction\n============\n\n*navstats* was originally to be called *Management statistics* and was meant to\ncover the need for having relevant statistics regarding your network to show to\nyour boss or management. However, finding a common ground for what the\nmanagement wanted to see turned out to be impossible, and the fleeting and not\nvery well formulated demands meant that nothing concrete was going to be made\never.\n\nThis lead to a fundamental shift in the proposal. What was implemented was a way\nto enable NAV administrators to write SQL-statements that produced the\nstatistics they wanted and periodically send it to Carbon. Thus the NAV\nadministrator himself decides what data is important, and the Graphite web-api\nenables him to extract data as he wishes - either as a graph directly in NAV or\nto other external tools.\n\nThe original request and final proposal is available on `Launchpad\n<https://bugs.launchpad.net/nav/+bug/1321249>`_ and\n`GitHub <https://github.com/Uninett/nav/issues/1187>`_.\n\nUsage\n=====\n\nThere are three steps for starting out with *navstats*:\n\n#. *navstats* requires that you either know the structure of the NAV database\n   very well or is able to formulate your requirement to someone that does, for\n   instance using one of the `support-channels\n   <https://nav.uninett.no/#footer>`_. The reason for this is that you need an\n   SQL statement that produces the number(s) you are looking for.\n\n#. You need to know what a `metric path\n   <http://graphite.readthedocs.io/en/latest/feeding-carbon.html#getting-your-data-into-graphite>`_ is in\n   Graphite, and how it is relevant for storing data. Basically, you need to\n   choose the naming scheme for *your* data. All NAV-data starts with **nav.**,\n   so your data should probably have another prefix.\n\n#. Read the *navstats.conf*-file and fill in what you gathered in step 1\n   and 2. Make sure the *navstats*-process is not running before editing the\n   config-file by running the command ``nav stop navstats``\n\nExample\n=======\n\nWe use the example from the config-file that continuously counts the different\ntypes of equipment in the database.\n\nSQL\n---\n\n::\n   \n   SELECT vendorid, typename, count(*)\n   FROM netbox JOIN type USING(typeid)\n   GROUP BY typename, vendorid;\n\nThe query will produce lines like this::\n  \n  vendorid |        typename         | count \n  ----------+-------------------------+-------\n  brocade  | 4/24_san_switch         |     1\n  hp       | hp2610_24               |     2\n  hp       | hp2610_24_pwr           |     1\n\nNamespace\n---------\n\nWe choose to put all data in the namespace **nav.stats**.\n\nResulting config\n----------------\n\n::\n\n   [netbox_types]\n   path=nav.stats.devices.{}.{}\n   query=select vendorid, typename, count(*)\n       from netbox join type using(typeid)\n       group by typename, vendorid;\n\nThus the path for the values above will be::\n\n  nav.stats.devices.brocade.4/24_san_switch\n  nav.stats.devices.hp.hp2610_24\n  nav.stats.devices.hp.hp2610_24_pwr\n\n(The script will do some modifications to the path to make sure Graphite can\nhandle them.)\n\nResult\n------\n\nThe script (the one that is started as a cron-job when you write ``nav start\nnavstats``) will make sure to run the SQL and send the output to Graphite.\n\nThe result will be browsable in Graphite like shown below. You can use\nGraphite's powerful `web-api\n<http://graphite-api.readthedocs.io/en/latest/api.html>`_ to access the data in\nthe format you wish.\n\n.. image:: ./navstats-graphite-tree.png\n"
  },
  {
    "path": "doc/reference/portadmin.rst",
    "content": "=========\nPortAdmin\n=========\n\n\nIntroduction\n============\n\nPortAdmin is a tool for simple switch port configuration via NAV's web user\ninterface. It is useful both to do simple switch port adjustments without using\nthe switch CLI, but also for delegating simple switch port management to NAV\nusers that do not have full CLI access to a switch.\n\nConfiguring a switch from PortAdmin requires the switch to be configured with\neither an SNMP [#f1]_ write-enabled management profile in SeedDB, or an\nappropriate NAPALM profile for devices that do not support SNMP write\noperations.\n\n\n\nWhat can PortAdmin do?\n======================\n\nCurrently, PortAdmin supports these operations:\n\n* Changing a port's description\n* Changing a port's access VLAN\n* Toggling a port between trunk and access mode\n  * Configure tagged and untagged/native VLANs on ports in trunk mode\n* Configure a Voice VLAN on a port (:ref:`more_about_voice_vlan`)\n* When a switch port is detected to have 802.1X authentication enabled,\n  optionally display a custom hyperlink instead of the VLAN configuration\n  dropdown (:ref:`portadmin_dot1x`).\n\n\nWhat the interface tells you\n============================\n\n.. image:: portadmin-portlist.png\n\n1. Port is the interface name given by the vendor. This is not possible to\n   change\n2. These indicators tells you the status of the interface:\n\n  * *Enabled* indicates if the interface is enabled (green) or disabled (red)\n  * *Linked* indicates if the interface has link (green) or not (red)\n\n3. Port Description is the ifAlias. This is editable by the user. This is what\n   you set by the *name* command on HP and *description* command on Cisco\n   devices.\n4. Vlan is the current active access VLAN on the interface. You can change\n   this by using the dropdown menu. To set this interface to trunking mode,\n   select the trunk option from the drop-down.\n5. This interface is a trunk. To enter trunk edit mode, click the link.\n\n\nHow to use the interface\n========================\n\nWhenever you alter the values on an interface, the color of the row will\nchange. The save button will turn blue to indicate that you can use it to save\nthe changes.\n\n.. image:: portadmin-change.png\n\nWhen saving the changes a popup box will tell you what PortAdmin is doing and if\neverything went well. As this process is best left uninterrupted, the button for\nclosing this popup will not display until everything is done.\n\n\nWorkflows\n---------\n\nI want to change the port description\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nStart writing in the text field. The row and save button should change\ncolor. Click save to save the changes.\n\nI want to change the VLAN\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nChoose VLAN from the VLAN dropdown and click \"Save\". PortAdmin will disable the\ninterface for a few seconds and then enable it again. This is done to indicate\nto any client connected to the interface that it should try to get a new\nIP-address.\n\nI want to edit a trunk\n~~~~~~~~~~~~~~~~~~~~~~\n\nClick the \"Trunk\" link. It will take you to the edit trunk interface. Make\nyour changes and click \"Save changes\".\n\nI want to set an interface to trunking mode\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nClick the VLAN dropdown and choose the \"Trunk\" option. The edit trunk\ninterface should appear. Set the native VLAN and the tagged VLANs. Click\n\"Save changes\".\n\nI want to set an interface to access mode\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nClick the trunk link to edit the trunk. Remove all trunk VLANs. Set the\nnative VLAN to what you want the access VLAN to be. Click \"Save changes\".\n\nI want to save all changes without clicking all the save buttons\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nClick one of the \"Save all\" buttons.\n\nI want to activate the voice VLAN on an interface\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf no column for activating voice VLANs appear,\nno voice VLANs are configured in PortAdmins config file. This must be done\nby a NAV administrator.\n\n.. image:: portadmin-voicevlan.png\n\nTo activate the voice VLAN, click the checkbox and click \"Save\".\n\nI cannot edit an interface\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTwo things can lead to an interface not being editable (no fields or dropdowns appear):\n\n* The NAV admin has turned on VLAN authorization. This means you can only\n  edit interfaces that have a VLAN that you are organizationally connected to.\n* Something called a *read-write community* has not been set on the device. The\n  *read-write community* is similar to a password, and is needed for PortAdmin\n  to be able to give commands to the device. To fix this, a NAV admin must\n  edit the device in SeedDB and assign a write-enabled SNMP management profile\n  to it there. Also, the device itself must be configured to accept SNMP write\n  requests.\n\nSome parts of the interface is disabled/greyed out\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSee above.\n\n\nThe Config File\n===============\n\nPortAdmin's operational aspects can be modified through the configuration file\n:file:`portadmin.conf`. All available configuration options are documented in\nthe example config file. Some of the options that can be set in this file are:\n\n**voice_vlans**\n    Voice VLANs are the VLANs you use for IP telephone traffic. If\n    you define several VLANs here, make sure only one of them is\n    available on the netbox. Otherwise there is no way of knowing\n    which one you want. If this option is set, the interface will\n    display a checkbox to enable and disable voice VLAN on the\n    interface. :ref:`more_about_voice_vlan`\n\n**cisco_voice_vlan**\n    Cisco has its own terminology and configuration regarding voice VLANs. NAV\n    also supports this. To make NAV use Cisco Voice VLANs, set this option to\n    ``true``. The default is ``false``.\n\n**cisco_voice_cdp**\n    If using Cisco Voice VLANs, set this option to ``true`` to explicitly\n    enable CDP on a port when its voice vlan is configured (and consequently,\n    disable CDP when voice vlan is de-configured). The default is ``false``.\n\n**trunk_edit**\n    When set to ``false``, editing the configuration of trunk ports is\n    disabled. The default value is ``true``.\n\n**link_edit**\n    When set to ``false``, editing the configuration of any port that has been\n    found to be an uplink or downlink is disabled. This could be useful to\n    prevent accidental misconfigurations that can cause a switch to become\n    non-reachable. The default value is ``true``.\n\n**vlan_auth**\n    If you want to limit what users can do in PortAdmin you activate\n    this option. What this does is limit the choice of VLANs to the\n    ones connected to the users organization.\n\n**vlan and netident**\n    Some network admins want to use a separate VLAN to indicate that\n    this interface does not route traffic. Use these options to define\n    that VLAN.  The VLAN will be available for configuration for all\n    users.\n\n**format**\n    Experimental feature. Makes you enforce a specific input format on\n    the port description.\n\n.. _portadmin_dot1x:\n\nThe ``[dot1x]`` section\n-----------------------\n\nPortAdmin cannot (yet) enable or change 801.2X configuration options for switch\nports, but for several vendors, it is able to *detect* whether a port is\noperating in 802.1X mode already.\n\nThe ``[dot1x]`` section of the configuration file will enable you to customize\nhyperlinks to external systems for each 802.1X-enabled port.\n\nA typical usage may be that you have a 3rd party web based system that allows\nfor you to control 802.1x options, and you want PortAdmin to display a \"Dot1x\"\nbutton that hyperlinks to that system for each 802.1x-enabled switch port.\n\nThe options in this section are:\n\n**enabled**\n    When set to ``true``, enables 802.1x detection and hyper link\n    customization. Default value is ``false``.\n\n**port_url_template**\n    A URL template string, used to build a hyperlink to a potential 3rd party\n    system. Into this template is fed a ``Netbox`` (IP Device) object and an\n    ``Interface`` object that describes the device and network interface\n    represented by a line in the port list.\n\n    An example template could be::\n\n        https://netadmin.example.org/dot1x?switch={netbox.sysname}&ifindex={interface.ifindex}\n\n    This builds a URL to an external system at ``netadmin.example.org``, using\n    the values of the ``sysname`` attribute of the netbox/IP device and the\n    SNMP ``ifindex`` value of the interface.\n\n    For more details on which attributes are available, see the reference docs\n    for :py:class:`nav.models.manage.Netbox` and\n    :py:class:`nav.models.manage.Interface`.\n\n\n.. _more_about_voice_vlan:\n\nMore about voice VLANs\n======================\n\n.. warning::\n   The term *voice VLAN* has two meanings in PortAdmin.\n\nOriginally, what we meant by \"*voice VLAN*\" was a VLAN you, as a network admin, had\ndefined as *the VLAN we use for voice traffic*. It was not related to the Cisco\nor HP voice commands.\n\nHowever, since then, PortAdmin has been extended to also support Cisco Voice\nVLANs. This is not the default behavior, but can be enabled in the config file. To\nenable this, you have to define voice VLANs in the ``voice_vlans`` directive, and tell\nPortAdmin to use Cisco commands by enabling the ``cisco_voice_vlan`` directive.\n\n\n.. rubric:: Footnotes\n\n.. [#f1] Simple Network Management Protocol\n"
  },
  {
    "path": "doc/reference/radius-install.rst",
    "content": "===================================\nSetting up FreeRADIUS to log to NAV\n===================================\n\nThe module has been tested to run on the following:\n\n* NAV 3.4\n* FreeBSD 6.2\n* FreeRADIUS 1.1.7\n* PostgreSQL 8.2.5\n* Firefox 2/3\n\n\nInstalling the accounting module\n--------------------------------\n\nStep 1: Configuring FreeRADIUS\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n<path to freeradius>/etc/raddb/postgresql.conf\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe following needs to be set:\n\n=============== ================================================================\n``server``      Hostname to your server running the PostgreSQL DB\n``login``       The name of the user you granted INSERT and UPDATE\n                privilege to on the radius accounting table.\n``password``    Password.\n``radius_db``   This will be ``nav`` for a typical NAV install\n``acct_table1`` Must be set to ``radiusacct``\n``acct_table2`` Same as above. FreeRADIUS lets you log Start and Stop\n                packets to different tables, but we don't make use of this.\n=============== ================================================================\n\nThe accounting queries in this file also needs to be replaced, since we have\nmessed around a bit with the default setup of the table. Replace them with\nthese::\n\n        accounting_onoff_query = \"UPDATE ${acct_table1} \\\n                SET AcctStopTime = (now() - '%{Acct-Delay-Time:-0}'::interval), \\\n                AcctSessionTime = (EXTRACT(EPOCH FROM(now()::timestamp with time zone - AcctStartTime::timestamp with time zone - '%{Acct-Delay-Time:-0}'::interval)))::BIGINT, \\\n                AcctTerminateCause='%{Acct-Terminate-Cause}', AcctStopDelay = '%{Acct-Delay-Time:-0}' \\\n                WHERE AcctSessionTime IS NULL AND AcctStopTime IS NULL AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStartTime <= now()\"\n\n\n        accounting_update_query = \"UPDATE ${acct_table1} \\\n                SET FramedIPAddress = NULLIF('%{Framed-IP-Address}', '')::inet, \\\n                AcctSessionTime = (EXTRACT(EPOCH FROM(now()::timestamp with time zone - AcctStartTime::timestamp with time zone - '%{Acct-Delay-Time:-0}'::interval)))::BIGINT, \\\n                AcctInputOctets = (('%{Acct-Input-Gigawords:-0}'::bigint << 32) + '%{Acct-Input-Octets:-0}'::bigint), \\\n                AcctOutputOctets = (('%{Acct-Output-Gigawords:-0}'::bigint << 32) + '%{Acct-Output-Octets:-0}'::bigint) \\\n                WHERE AcctUniqueId = '%{Acct-Unique-Session-Id}' AND UserName = '%{SQL-User-Name}' \\\n                AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStopTime IS NULL\"\n\n        accounting_update_query_alt = \"INSERT into ${acct_table1} \\\n                (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortType, CiscoNASPort, AcctStartTime, \\\n                AcctSessionTime, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, \\\n                FramedProtocol, FramedIPAddress) \\\n                values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', \\\n                '%{NAS-Port-Type}', NULLIF('%{Cisco-NAS-Port}', ''), (now() -  '%{Acct-Delay-Time:-0}'::interval - '%{Acct-Session-Time:-0}'::interval), \\\n                NULLIF('%{Acct-Session-Time}','')::bigint, \\\n                (('%{Acct-Input-Gigawords:-0}'::bigint << 32) + '%{Acct-Input-Octets:-0}'::bigint), \\\n                (('%{Acct-Output-Gigawords:-0}'::bigint << 32) + '%{Acct-Output-Octets:-0}'::bigint), '%{Called-Station-Id}', \\\n                '%{Calling-Station-Id}', '%{Framed-Protocol}', \\\n                NULLIF('%{Framed-IP-Address}', '')::inet)\"\n\n        accounting_start_query = \"INSERT into ${acct_table1} \\\n                (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortType, CiscoNASPort, AcctStartTime, \\\n                CalledStationId, CallingStationId, FramedProtocol, FramedIPAddress, AcctStartDelay) \\\n                values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', \\\n                '%{NAS-Port-Type}', NULLIF('%{Cisco-NAS-Port}', ''), (now() - '%{Acct-Delay-Time:-0}'::interval), \\\n                '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Framed-Protocol}', \\\n                NULLIF('%{Framed-IP-Address}', '')::inet, '%{Acct-Delay-Time:-0}') \"\n\n        accounting_start_query_alt  = \"UPDATE ${acct_table1} \\\n                SET AcctStartTime = (now() - '%{Acct-Delay-Time:-0}'::interval) \\\n                WHERE AcctUniqueId = '%{Acct-Unique-Session-Id}' AND UserName = '%{SQL-User-Name}' \\\n                AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStopTime IS NULL\"\n\n        accounting_stop_query = \"UPDATE ${acct_table2} \\\n                SET AcctStopTime = (now() - '%{Acct-Delay-Time:-0}'::interval), \\\n                AcctSessionTime = NULLIF('%{Acct-Session-Time}', '')::bigint, \\\n                AcctInputOctets = (('%{Acct-Input-Gigawords:-0}'::bigint << 32) + '%{Acct-Input-Octets:-0}'::bigint), \\\n                AcctOutputOctets = (('%{Acct-Output-Gigawords:-0}'::bigint << 32) + '%{Acct-Output-Octets:-0}'::bigint), \\\n                AcctTerminateCause = '%{Acct-Terminate-Cause}', AcctStopDelay = '%{Acct-Delay-Time:-0}', \\\n                FramedIPAddress = NULLIF('%{Framed-IP-Address}', '')::inet \\\n                WHERE AcctUniqueId = '%{Acct-Unique-Session-Id}' AND UserName = '%{SQL-User-Name}' \\\n                AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStopTime IS NULL\"\n\n        accounting_stop_query_alt = \"INSERT into ${acct_table2} \\\n                (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortType, CiscoNASPort, AcctStartTime, AcctStopTime, \\\n                AcctSessionTime, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, \\\n                AcctTerminateCause, FramedProtocol, FramedIPAddress, AcctStopDelay) \\\n                values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', \\\n                '%{NAS-Port-Type}', NULLIF('%{Cisco-NAS-Port}', ''), (now() -  '%{Acct-Delay-Time:-0}'::interval - '%{Acct-Session-Time:-0}'::interval), \\\n                (now() - '%{Acct-Delay-Time:-0}'::interval), NULLIF('%{Acct-Session-Time}', '')::bigint, \\\n                (('%{Acct-Input-Gigawords:-0}'::bigint << 32) + '%{Acct-Input-Octets:-0}'::bigint), \\\n                (('%{Acct-Output-Gigawords:-0}'::bigint << 32) + '%{Acct-Output-Octets:-0}'::bigint), '%{Called-Station-Id}', \\\n                '%{Calling-Station-Id}', '%{Acct-Terminate-Cause}', '%{Framed-Protocol}', \\\n                NULLIF('%{Framed-IP-Address}', '')::inet, '%{Acct-Delay-Time:-0}')\"\n\n\n.. NOTE:: Remember to set the ``$INCLUDE  ${confdir}/postgresql.conf`` statement\n          in ``radiusd.conf``, it defaults to ``sql.conf`` which is the MySQL module.\n\n\n\n<path to freeradius>/etc/raddb/radiusd.conf\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe noticed how some sessions' ``Acct-Unique-Session-Id`` field changed\nmid-session without any apparent reason. We found that some NAS-es had an\n``Acct-Session-Id`` field containing, among other data, the session's starting\ntime. This starting time, for some strange strange reason that we're unaware\nof, sometimes change, mid-session, by a second or two, causing\n``Acct-Unique-Session-Id`` to also change, since it is a hash of\n``Acct-Session-Id``, among others. This small routine (or whatever the correct\nnaming is) strips the date and time out of ``Acct-Session-Id``.\n\nIt needs to be defined in the main section, ie. among the other\n``attr_rewrite`` examples, and called in the ``preacct{}`` section, before\n``acct_unique`` (which generates the unique session id). The regexp isn't very\nprecise, but it does the job::\n\n  attr_rewrite modify_acctsessionid {\n          attribute = Acct-Session-Id\n          searchin = packet\n          searchfor = \"[0-3][0-9]\\/[0-3][0-9]\\/[0-9]{2}\\ [0-2][0-9]\\:[0-5][0-9]\\:[0-5][0-9]\"\n          replacewith = \"\"\n          append = no\n  }\n\nAlso add a line saying ``sql`` to the ``accounting{}`` section. We have put it\nlast, but we have also seen people recommending it being put between ``unix``\nand ``radutmp``, although the reason was unclear. We've experienced no known\nproblems by putting it last.\n\n\nStep 2: Configuring your switches\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTo get accounting data from your 802.1X Cisco switches, they must be\nconfigured using the following::\n\n  aaa accounting dot1x default start-stop group radius\n  radius-server vsa send accounting\n\n\nStep 3: Configuring the accounting module\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nEdit ``radius_config.py``, change the values according to your setup. You\nshould probably only have to change ``REAUTH_TIMEOUT`` to reflect the\nreauthentication interval on your FreeRADIUS server. The time is given as a\nnumber of seconds. This value is used in the search results to indicate\nwhether a session is likely to still be active, or if it has timed out and not\nsent an explicit *Stop*.\n\n\nStep 4: Finishing up\n^^^^^^^^^^^^^^^^^^^^\n\nRestart FreeRADIUS, and you should be good to go.\n\n\nInstalling the error log module\n-------------------------------\n\nStep 1: Configuring the database\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nEdit ``pg_hba.conf`` on the database server to allow connections from the\nFreeRADIUS server.\n\nStep 2: Installing and starting the parsing script on the radius server\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nEdit the variables at the top of\n``</path/to/radius_module/src>/radiusparser.py`` to reflect the hostname of\nthe NAV database server, the username and password you want for connecting to\nthe database, and the path to the FreeRADIUS log file, ``radius.log``.\n\nCopy the script to a location of your choice on the server where the\n``radius.log`` is accessible as part of the file system. Create a cron job\nthat executes this script as often as you would like to make sure that the\nscript is actually running. For example::\n\n  0 * * * *  /path/to/radiusparser\n\nThis will run the script every hour, but if it detects that it is already\nrunning, it quits and leaves the running script alone.\n\nOf course, you may also simply execute the script yourself by running it at the\ncommand line.\n\n\nStep 3: Configuring the error log module\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nEdit ``radius_config.py``, change the values according to your setup. Not much\nshould need to be changed here, except perhaps the ``ACCT_TABLE`` variable, if\nyou have chosen a different name than the default.\n\n\nSetting up deletion of old entries\n----------------------------------\n\nYou probably don't want the entries in the error log table or the\naccounting log table accumulating forever.  To arrange for periodic\ndeletion of old records, create a cron snippet in NAV's ``etc/cron.d/``\ndirectory called ``radiusclean`` and add the following lines to it::\n\n  50 5 * * 6 /path/to/navclean --radiusacct -E \"3 months\" -f\n  45 5 * * 6 /path/to/navclean --radiuslog  -E \"1 month\" -f\n\nTo insert the cron snippet into `navcron`'s crontab, run::\n\n  sudo nav start radiusclean\n\nThis will run the ``navclean`` program once a week, deleting all radius\naccounting entries older than three months and all radius error log entries\nolder than one month.  Feel free to change the intervals to something you\nthink is suitable for your organization.\n\n\nConfiguring NAV\n---------------\n\nAlternate configuration for differentiated db-users\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nNote that this step is entirely optional.\n\nEverything should already be configured during the installation, but it might\nbe desirable to have separate users for SELECT queries and queries that\nupdates the table (INSERT, DELETE, UPDATE). This is up to you to decide.\nThis will require that you create two new users in your db and do some\nmodifications of these files:\n\n* ``db.conf``\n* ``postgresql.conf``\n* ``radius.py``\n* ``radius_config.py``\n\nMake two new entries in ``db.conf``::\n\n  script_radius_front = <db user with SELECT privilege>\n  script_radius_back = <db user with INSERT, UPDATE, DELETE privileges>\n\n``postgresql.conf`` is the same file that is mentioned in `Step 1: Configuring\nFreeRADIUS`_. Change ``login`` here to whatever you called your user with\nwrite-privileges. See ``radius.py`` and ``radius_config.py`` for what to\nchange there.\n\n"
  },
  {
    "path": "doc/reference/radius.rst",
    "content": "========\n Radius\n========\n\n:Authors: Roger Kristiansen <roger.kristiansen@gmail.com>,\n          Kai Bjørnenak <kai.bjornenak@cc.uit.no>\n:Created: Aug. 4, 2005\n:Last changed: May 23, 2008\n\nThe Radius tool makes FreeRADIUS accounting logs browseable and searchable.\nIt consists of a backend to log accounting data directly from FreeRADIUS into\nNAV's PostgreSQL database, and a frontend to browse/search the data on the\nweb.\n\nFiles\n=====\n\n.. WARNING:: This following file listing seems to bit somewhat out of date.\n\n========================= =======================================================\ndoc/README.txt            What you are probably reading right now :]\ndoc/INSTALL.txt           How to install the radius accounting subsystem\n\nbin/navclean              Modified version of navclean.py, that also handles\n                          the radius accounting table. Should probably me made\n                          to also handle the log table, or dropped all together.\nbin/radiusparser          radius.log parser that inserts data into the database.\n\nsql/accounting_table.sql  Script for creating the accounting table\nsql/log_table.sql         Script for creating the log table\nsql/users.sql             Script for creating the users needed for the modules\n                          to work.\n\nAcctChartsTemplate.tmpl   Cheetah Template for the accounting upload/download\n                          charts.\nAcctChartsTemplate.py     Module compiled from AcctChartsTemplate.tmpl\nAcctSearchTemplate.tmpl   Template for the accounting search page.\nAcctSearchTemplate.py     Module compiled from AcctChartsTemplate.tmpl\nAcctDetailTemplate.tmpl   Template for the accounting session details page.\nAcctDetailTemplate.py     Module compiled from AcctDetailTemplate.tmpl\nLogTemplate.tmpl          Template for the error log search page.\nLogTemplate.py            Module compiled from LogTemplate.tmpl\nLogDetailTemplate.tmpl    Template for the error log details page.\nLogDetailTemplate.py      Module compiled from LogDetailTemplate.tmpl\nradius.py                 The handler, and a few classes for performing SQL\n                          queries, and some Exception classes\nradiuslib.py              A few helper functions used throughout the templates\nradius_config.py          Configuration variables\nradius.tool               Entry for NAV's menu system\n.htaccess                 Apache .htaccess file, setting up handler etc.\n========================= =======================================================\n\n\nAbout\n=====\n\nThis module was made by someone not too familiar with Python, and who had never\ntouched either NAV or Cheetah before the project started. If you see something\nthat seems awkward, don't hesitate to suggest a better way to do it.\n\nIt should be pretty obvious that we have ripped extensively from NAV's\nMachineTracker subsystem, and at the time writing this, even the graphics in the\ntables are from MachineTracker.\n\nThere have yet to be confirmed reports on this stuff working (or even being\ntried) on any other setup than what it was developed on, which is:\n\n* NAV v3.3.3\n* PostgreSQL 7.4.8\n* Python 2.4\n\nPlease tell us about successful installs on other setups.\n\n\nInstallation\n============\n\nSee :doc:`separate installation instructions <radius-install>` for\nconfiguring your FreeRADIUS server to log accounting data to NAV.\n\n\nUsage\n=====\n\nThe visual part of the Radius accounting subsystem consists of 3 main sections;\na search page, a page for displaying details about a specific session, a\npage top users in terms of traffic and a search page for the error log.\n\n\nSearch page\n-----------\n\nHopefully it will be pretty self explanatory. You choose your search criteria\nand click the search button. The sessions that get matched are all sessions\nthat \"touch\" your specified time interval in any way. At the bottom of the\npage, you will get a summary for your search, giving you the total amount of\nuploaded/downloaded data for all sessions matching your search criterias. This\nfeature is currently made a bit useless from the duplicate sessions in the\ndatabase (see `Known Issues`_).\n\nIn the search results, you will sometimes see sessions whose `Session Stop`\nfield contains text in stead of the actual stop time. Here is an explanation\nof what they mean:\n\n\"Still Active\"\n  This doesn't guarantee 100% that this session is still active, but it does\n  mean that the session has not yet timed out and that the radius server is\n  waiting for reauthentication/confirmation for this session.\n\n\"Timed Out\"\n  This means that the session was abandoned without any\n  explicit stop message reaching the radius server, and that the server\n  no longer considers this session active.\n\nFor this feature to work correctly, the variable ``REAUTH_TIMEOUT`` in\n``radius_config.py`` must be set correctly\n\nThere are links from `Username`, `Realm`, `Assigned IP` and `NAS IP`\nto new searches. I.e. clicking on a username will show all sessions for this\nuser, using the already specified time interval. A click on a session id will\nbring up all available details for that session.\n\nTake care when searching for large time intervals, so you don't trash your\nDB server.\n\n\nDetails page\n------------\n\nDisplays all the details about a session, as specified in the list called\n``LOG_DETAILSFIELDS`` in ``radius_config.py``.\n\n\nCharts page\n-----------\n\nDisplays top upload, top download, and top overall bandwidth hog for as many\ndays back as the user specifies. The default is a week (7 days).\n\nThis chart will lie a little, since it sums up all sessions that ended within\nthe specified number of days. The reason for doing this is that we only get any\nnumbers on how much data the user has sent/received when the session ends. Thus\nthere is really no way to know for sure, just from the radius accounting log,\nwhen during the session the data was transferred.\n\nOf course, we could always limit the search to sessions that only started\ninside our search interval, but then a lot of long sessions might slip under\nthe radar.\n\n\n\n\nMaking Changes\n==============\n\nIf you want to make changes in the html, you will have to edit the corresponding\n``.tmpl`` file, and make a python module of it with ``cheetah c <templatename>``.\n\n\n\n\nKnown Issues\n============\n\nAccounting module: Duplicate entries for some sessions\n------------------------------------------------------\n\nSometimes, when a Start message is immediately followed by an Alive message for\nthe same session, FreeRADIUS inserts the session into the database twice, the\nonly difference between them seem to be a few hundreds of a second on the Start\ntime. This seems to be caused by the following scenario:\n\n1) FreeRADIUS receives a Start packet and inserts a new entry/session in the db\n2) FreeRADIUS receives an Alive packet for the same session *immediately* after\n   the Start packet, and queries the database to see if the `unique-session-id`\n   already exists.\n3) The query doesn't return anything, since postgresql hasn't had time to\n   complete the `INSERT`-query for the Start packet, and\n   ``accounting_update_query_alt`` is thus run, inserting a new row.\n\nHow to get around this? I'm not quite sure. Maybe someone with more experience\nwith (Postgre)SQL could look at some kind of table locking, if this wouldn't\nslow down the server too much. Another solution suggested by one of\nFreeRADIUS' developers was using ``rlm_sql_log`` in FreeRADIUS to output a\nfile with SQL queries, and post-processing them. I haven't had the time to\nplay around with any of this.\n\n\n\nFreeRADIUS encoding\n-------------------\n\nThis module does not handle FreeRADIUS' way of encoding characters with\n`UTF-8` gracefully. Norwegian characters `ÆØÅ` and cyrilic characters get\nreplaced by their octal representation on the form ``\\xxx\\xxx``. To give an\nexample the octal representation ``\\303\\246`` is the norwegian character\n`æ`. I suspect this bug also affects characters with accents and other special\ncharacters.\n\n\n\n\nTODO\n====\n\n* Create useful links to other parts of NAV or new searches. Feedback on\n  how people use the information on this page would be useful for knowing what\n  to link to.\n\n"
  },
  {
    "path": "doc/reference/remote_user.rst",
    "content": "=========================================\nExternal web authentication (REMOTE_USER)\n=========================================\n\nThe NAV web UI can be made to honor the ``REMOTE_USER`` HTTP header as a means\nof external authentication, by setting the appropriate options of the\n``[remote-user]`` section of :file:`webfront.conf`.\n\nThe feature is enabled by setting ``enabled=yes`` in this section (A missing\nsection or value, or the value ``off`` is interpreted as the support being\noff). When enabled, NAV will check for the HTTP header in ``varname`` (set to\n``REMOTE_USER`` by default), on every page load. If there is a string there, NAV\nwill attempt to use it as a username to log in with. An account will be created\nif one does not already exist for that username.\n\n``REMOTE_USER`` (or another header) can be set by the web server hosting NAV,\nand is a simple way of supporting federated logins via eg. Kerberors or SAML,\nprovided the web server has the necessary support/modules/plugins.\n\nSince the password is controlled from a system externally to NAV, the user does\nnot have access to change the password from inside NAV. If an account is set to\ninvalid in NAV, the user will not be logged in, even if the header is set.\n\nCreating users on first login\n-----------------------------\n\nEarlier versions of this functionality created users on first login. That is no\nlonger the case. To enable the previous behaviour, set ``autocreate = on`` in\nthe ``[remote-user]`` section in the config-file.\n\nWith the default, which is ``off``, it is necessary to pre-create users for\nthem to be able to log in. This can be done from the command line with\n``navuser``, or via the web interface.\n\nWorkarounds for \"strange\" `REMOTE_USER` values\n----------------------------------------------\n\nIf the value set in the header is not sufficiently username-like, it can be\nconverted via a workaround as set in the ``workaround`` header. The only\nworkaround supported so far is for Feide via OpenId Connect, and you turn this\non by adding ``workaround = feide-oidc`` in the config section.\n\nSetting specific URLs for external login/logout mechanism\n---------------------------------------------------------\n\nIf you want NAV to use the remote idP's URLs for logging in and/or out, you can\nset the ``login-url`` and the ``logout-url`` options in the ``[remote-user]``\nsection. If the external mechanism supports redirecting the client back to the\noriginating site upon login/logout completion, the originating NAV URL can be\ninserted using the placeholder string ``{}``.  Example::\n\n    [remote-user]\n    enabled = yes\n    login-url = https://sso.example.org/login?nexthop={}\n    logout-url = https://sso.example.org/logout?nexthop={}\n\n``logout-url`` will set the link that the logout-button points to, the default\nis \"/index/logout\".\n\nSome remote user systems need to be visited *after* NAV has logged out the\nuser locally. The flag for that is ``post-logout-redirect-url``.\n\n``REMOTE_USER`` and local multi-factor/two-factor authentication\n----------------------------------------------------------------\n\n``REMOTE_USER`` cannot be supported at the same time as locally controlled\ntwo-factor authentication. Pick one.\n\n\nRelevant How Tos:\n-----------------\n\n* :doc:`../howto/mod_auth_openidc_feide`\n"
  },
  {
    "path": "doc/reference/smsd.rst",
    "content": "======\n smsd\n======\n\nThe SMS daemon takes care of sending alerts queued for SMS dispatch.\n\nThe daemon will regularly check the `smsq` database table via a generalized\nqueue module.  Any new messages are dispatched via one or more dispatchers\nwith a generic interface. Support for multiple dispatchers are handled by a\ndispatcher handler layer.\n\nUsage\n=====\n\nFor more help on usage, run ``smsd --help`` and see the ``smsd.conf`` config\nfile.\n\n\nMessage queues\n==============\n\nMessage queues are generic producers of SMS messages in `smsd`.  At the\nmoment, only the :py:class:`nav.smsd.navdbqueue.NAVDBQueue` implementation is\navailable, which will produce SMS messages from the ``smsq`` table in the NAV\ndatabase.\n\nOther message queue implementations can be written using the same interface as\nimplemented by :py:class:`nav.smsd.navdbqueue.NAVDBQueue`.\n\nDispatchers\n===========\n\nsmsd delegates the actual dispatch of messages to dispatcher plugins.  Plugins\ncan be configured in prioritized order in ``smsd.conf``.\n\nAvailable dispatchers\n---------------------\n\nGammuDispatcher\n~~~~~~~~~~~~~~~\n\n:description:\n\n\tThe Gammu dispatcher uses `Gammu` to send SMS messages via a cell phone\n\tconnected to the server with a serial cable, USB cable, IR or\n\tBluetooth. See http://www.gammu.org/ for more information.\n\n:depends:\n\n\tDepends on the ``gammu`` Python binding.  As a prerequisite, the\n\t`navcron` user must have write privileges to the device where the\n\tGammu-configured mobile phone is connected.\n\n:pros:\n\n\tWorks as long as the mobile carrier is up and running, independent of\n\tyour own network.\n\n:cons:\n\n\tYou will need a dedicated mobile phone or other GSM device.\n\nHttpGetDispatcher\n~~~~~~~~~~~~~~~~~\n\n:description:\n\n\tOriginally contributed by USIT, University of Oslo for use with their\n\tHTTP-to-SMS gateway. Generalized to be useful for similar gateways\n\twithout UiO's exact URL syntax. Supports both HTTP and HTTPS.\n\n:depends:\n\n\tDepends on ``urllib`` and ``urllib2``, which both are parts of core\n\tPython.\n\n:pros:\n\n\tDoes not need a dedicated mobile phone.\n\n:cons:\n\n\tDepends on a working network connection between you and your\n\tHTTP-to-SMS gateway. Does not support POST or HTTP Basic Auth.\n\nBoostDispatcher\n~~~~~~~~~~~~~~~\n\n:description:\n\n\tThis dispatcher sends SMS via Boost Communications' WebService (`SOAP`).\n\tSee http://www.boostcom.no/ for more information.\n\n\t.. NOTE:: The dispatcher is provided as a proof-of-concept only; it\n\t          seems it no longer conforms to Boost's newest APIs.\n\n:depends:\n\n\tDepends on ``SOAPpy`` (``python-soappy`` in Debian).\n\tRequires a username and password to send SMS using the SOAP interface.\n\tContact http://www.boostcom.no/ to setup a contract for their External\n\tSender product.\n\n:pros:\n\n\tDoes not need a dedicated mobile phone.\n\n:cons:\n\n\tDepends on a working network connection between you and Boost\n\tCommuncations.\n\nUninettMailDispatcher\n~~~~~~~~~~~~~~~~~~~~~\n\n:description:\n\n\tThis dispatcher sends SMS via Sikt's (previously Uninett) `email-to-SMS` gateway.\n\tSikt's gateway only works internally, but this plugin can serve as\n\ta proof-of-concept for someone implementing a similar service.  The\n\te-mail adress is configurable in ``smsd.conf``.\n\n:depends:\n\n\tOnly depends on ``smtplib``, which is a part of core Python (of\n\tcourse, a working SMTP server is required also).\n\n:pros:\n\n\tIf you have an email-to-SMS gateway that accepts e-mails where the\n\tsubjects is a phone number and the body is an SMS text message, there\n\tis no extra setup cost to get the daemon sending SMS messages.\n\n:cons:\n\n\tUnless you have a similar email-to-SMS gatway, this only works for\n\tSikt.\n\nExtending\n=========\n\nWrite your own dispatcher by extending the\n:py:class:`nav.smsd.dispatcher.Dispatcher` class.  You can also implement your\nown message queue by implementing the same interface as the\n:py:class:`nav.smsd.navdbqueue.NAVDBQueue` class.\n\nnav.smsd.dispatcher\n-------------------\n.. automodule:: nav.smsd.dispatcher\n   :members:\n   :undoc-members:\n\nnav.smsd.navdbqueue\n-------------------\n.. automodule:: nav.smsd.navdbqueue\n   :members:\n   :undoc-members:\n"
  },
  {
    "path": "doc/reference/snmptrapd.rst",
    "content": "===========\n snmptrapd\n===========\n\nWhat is the SNMP trap daemon?\n=============================\n\n:program:`snmptrapd` (a.k.a. :program:`navtrapd` to avoid name conflicts with\nNet-SNMP's similarly named trap daemon) is a NAV backend service program,\ndesigned to receive SNMP trap messages sent to the NAV server. It hands trap\nmessages off to trap handler plugins, which will process them, and typically\ntranslate them into NAV events as they see fit.  Anyone with some knowledge of\nPython and SNMP should be able to write a new trap handler plugin.\n\nsnmptrapd uses the :mod:`pynetsnmp-2` library (via NAV's own :py:mod:`nav.Snmp`\nadapter module), but is loosely based on this example from the PySNMP library:\nhttp://pysnmp.sourceforge.net/examples/2.x/snmptrapd.html\n\n\nUsage\n=====\n\nsnmptrapd can be started and stopped using the regular `nav start` and\n`nav stop` commands.  The :program:`snmptrapd` program can also be run in\nthe foreground on the command line, logging all its activites to the\nstandard output instead of the log file.\n\nsnmptrapd must be started as root, as it will bind to the default SNMP trap\nport (UDP port 162). It will drop privileges to the ``navcron`` user as soon as\nthe port is bound.\n\n::\n\n    usage: navtrapd [-h] [-d] [-c COMMUNITY] [address [address ...]]\n\n    NAV SNMP Trap daemon\n\n    positional arguments:\n      address\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -d, --daemon          Run as daemon\n      -c COMMUNITY, --community COMMUNITY\n\t\t\t    Which SNMP community incoming traps must use. The\n\t\t\t    default is 'public'\n\n    One or more address specifications can be given to tell the trap daemon which\n    interface/port combinations it should listen to. The default is 0.0.0.0:162,\n    and, if the system appears to support IPv6, also [::]:162, which means the\n    daemon will accept traps on any IPv4/IPv6 interface, UDP port 162.\n\n\nLogging\n=======\n\nsnmptrapd, when daemonized, logs to :file:`snmptrapd.log`.\n\nWhen developing new handler modules, or otherwise debugging trap reception in\nNAV, it may be desirable to log full dumps of the trap packet contents. This\ncan be done by setting the loglevel ``nav.snmptrapd.traplog = DEBUG`` in NAV's\nlogging configuration (:file:`logging.conf`).\n\n.. note:: ``nav.snmptrapd.traplog`` will log the full contents of any received\n          trap, whether any handler modules decided to act on the trap or not.\n\nConfiguration\n=============\n\nThe configuration file `snmptrapd.conf` is divided into sections.\nThere is one general section for the daemon itself, and sections\nspecific to each trap handler plugin.\n\n\nTrap handlers\n=============\n\nWhen snmptrapd receives a trap, it is stored in generic trap object\n(:class:`nav.snmptrapd.trap.SNMPTrap`).\n\nand offered to each of the trap handlers (that are configured in\n`snmptrapd.conf`) in turn.  Each trap handler can inspect the offered trap and\ndecide to either process it or discard it.\n\nA trap handler plugin is a Python module that must provide a function\ncalled ``handleTrap()``.\n\n.. function:: handleTrap(trap, config)\n\n   Takes a trap object and a ConfigParser reference.  Processes or\n   discards the trap and returns a status value.\n\nThere is template module for a handler plugins, called\n`handlertemplate.py`.  It contains some comments and shows the basics\nyou need to write your own trap handler.\n\n.. NOTE::\n   For a trap handler to take effect, snmptrapd must first be restarted.\n\n\nnav.snmptrapd.trap.SNMPTrap\n---------------------------\n\n.. warning:: This class interface is subject to change in the future, as the\n             member naming is not according to our :pep:`8`-based naming\n             standard (``camelCase`` vs. ``under_score``)\n\n\n.. autoclass:: nav.snmptrapd.trap.SNMPTrap\n   :members:\n   :show-inheritance:\n"
  },
  {
    "path": "doc/reference/social-account.rst",
    "content": "==========================================\nExternal web authentication (OAuth2, OIDC)\n==========================================\n\nIt is possible to log in to the NAV web UI with an external identity provider\nlike OAuth2 or OIDC with depending on the HTTP header ``REMOTE_USER``.\n\nNAV uses the 3rd party django app ``django-allauth`` for this.\n\nThe configuration is stored in the file :file:`webfront/authentication.toml`.\n\n.. note::\n   See the howto :doc:`Authenticating with OIDC/OAuth2 by using a local\n   settings file <../howto/allauth-and-oidc>` for the full power of allauth,\n   but please do only one of the two: either ``webfront/authentication.toml``\n   or a local settings file.\n\nSupport for SAML is planned.\n\nUsing a provider bundled with django-allauth\n============================================\n\nHave a look at the list of providers at `django-allauth's provider list\n<https://docs.allauth.org/en/latest/socialaccount/providers/index.html>`_.\n\nYou will need the name of the module (for instance\n``allauth.socialaccount.providers.github`` for GitHub), the provider id\n(``github`` for GitHub, this is always a valid python module name) and at\nminimum a ``client_id`` and a ``secret``.\n\nNote that the bundled \"openid\" provider needs extra tables, NAV does not ship\nwith them by default.\n\nExample: Logging in with the bundled GitHub provider\n----------------------------------------------------\n\nAnyone can get an account at GitHub so we're using that as the most basic\nexample.\n\nSee `Authorizing OAuth apps\n<https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps,>`_\nfor details.\n\nThe app for this does not need any additional tables so the below configuration\nis all you need.\n\n.. code-block:: toml\n\n   [social.providers.github\n   module-path = \"allauth.socialaccount.providers.github\"\n   client_id = \"your.service.id\"\n   secret = \"your.service.secret\"\n\nYou need to create an OAuth app at `GitHub: New OAuth Application\n<https://github.com/settings/applications/new>`_.\n\nThe client id and regenerating the secret will be available on `GitHub:\nAuthorized Oauth Apps <https://github.com/settings/applications>`_ and `GitHub:\nDeveloper applications <https://github.com/settings/developers>`_ after\ncreation.\n\nYou need to add the redirect url, it will look something like\n``https://YOURDOMAIN/accounts/github/login/callback/``.\n\nGitHub does *not* support having multiple redirect urls on file simultaneously.\n\nExample: Logging in with the bundled Feide OIDC (aka. dataporten) provider\n--------------------------------------------------------------------------\n\nYour organization needs to be paying for `Feide <https://www.feide.no/>`_.\n\nThe app for this does not need any additional tables so the below configuration\nis all you need.\n\n.. code-block:: toml\n\n   [social.providers.dataporten]\n   module-path = \"allauth.socialaccount.providers.dataporten\"\n   client_id = \"your.service.id\"\n   secret =  \"your.service.secret\"\n\nYou get the client id and secret from `Feide Kundeportal\n<https://kunde.feide.no>`_, and you need to add the redirect url there. The\nredirect url will look something like\n``https://YOURDOMAIN/accounts/dataporten/login/callback/``.\n\n.. tip::\n   If you attempt to log in without the url set you will get an error-page that\n   shows exactly what url you need to use.\n\nDataporten supports having multiple redirect urls on file simultaneously.\n\nUsing generic OIDC\n==================\n\nThis may take *a lot more* configuration so check if there is a bundled\nprovider first.\n\nOverview of settings:\n\n.. code-block:: toml\n\n   [oidc]\n   # module-path = \"your.oidc.provider.module\"  # default\n   #\n   # Optional PKCE defaults to False, but may be required by your provider\n   # Can be set globally, or per app (settings).\n   # \"OAUTH_PKCE_ENABLED\": False,\n   # oauth_pkce_enabled = false\n\n   [oidc.idps.some-unique-id]  # this id must be urlsafe\n   name = \"Some Login System\",  # Shown in the frontend\n   client_id = \"your.service.id\", # Get from idp\n   secret = \"your.service.secret\", # Get from idp\n   server_url = \"https://my.server.example.com\"\n\n   # [oidc.idps.some-unique-id.settings]  # optional settings\n   # Optional PKCE defaults False, but may be required by\n   # your provider\n   # oauth_pkce_enabled = false\n   #\n   # When enabled, an additional call to the userinfo\n   # endpoint takes place. The data returned is stored in\n   # `SocialAccount.extra_data`. When disabled, the (decoded) ID\n   # token payload is used instead.\n   # fetch_userinfo = true\n   #\n   # Optional token endpoint authentication method.\n   # May be one of \"client_secret_basic\", \"client_secret_post\"\n   # If omitted, a method from the the server's\n   # token auth methods list is used\n   # token_auth_method = client_secret_basic\n   #\n   # scope = [],\n   #\n   # The field to be used as the account ID. Might depend on scope\n   # uid_field = \"sub\"\n\nYou need to come up with a unique provider id. Note that it will be used\nverbatim in the redirect url and that it must not conflict with any other\n``provider_id`` or ``provider`` in use.\n\nSee `django-allauth: OpenID Connect\n<https://docs.allauth.org/en/latest/socialaccount/providers/openid_connect.html>`_\nfor more details.\n\nYou can override the module used for OIDC by setting module-path explicitly:\n\n.. code-block:: toml\n\n   [oidc]\n   module-path = \"your.oidc.provider.module\"\n\nThe ``server_url`` is just the first part of an url that ends with\n``.well-known/openid-configuration`` used for OpenID Connect discovery.\n\n.. note::\n   Providers that come both bundled and have an OIDC endpoint are not\n   equivalent, the former might have provider specific code.\n\n\nExample: Logging in with Feide OIDC (dataporten) without using a provider app\n-----------------------------------------------------------------------------\n\nUsing Feide OIDC (aka. dataporten) as an example\n\n.. code-block:: toml\n\n   [oidc.idps.dataporten-oidc]\n   name = \"Feide OIDC\",  # Shown in the frontend\n   client_id = \"your.service.id\",  # Get from your Feide admin\n   secret = \"your.service.secret\",  # Get from your Feide admin\n   server_url = \"https://auth.dataporten.no/\"\n\n   # optional settings but needed for Feide OIDC\n   [oidc.idps.dataporten-oidc.settings]\n   uid_field = \"https://n.feide.no/claims/eduPersonPrincipalName\"\n   scope = [\"userid-feide\"]\n\nJust like when using a provider app you get the client id and secret from\n`Feide Kundeportal <https://kunde.feide.no>`_, and you need to add the redirect\nurl there. The redirect url will look something like\n``https://YOURDOMAIN/accounts/oidc/dataporten-oidc/login/callback/``.\n\n.. tip::\n   If you attempt to log in without the url set you will get an error-page that\n   shows exactly what url you need to use.\n\n.. note::\n   If you choose \"Client type\": \"Public\" you must set ``oauth_pkce_enabled`` to\n   True.\n\nDataporten supports having multiple redirect urls on file simultaneously.\n"
  },
  {
    "path": "doc/release-notes.rst",
    "content": ".. include:: ../NOTES.rst\n"
  },
  {
    "path": "doc/requirements.txt",
    "content": "-r ../requirements/django42.txt\n-r ../requirements/base.txt\n-c ../constraints.txt\nsphinx_rtd_theme>=2.0.0\n"
  },
  {
    "path": "doc/svn2hg/README",
    "content": "NAV migrated from Subversion to Mercurial as its SCM system on 1 April\n2008.  \n\nThis directory contains the file localtags, which maps Mercurial\nchangeset IDs to SVN revision numbers using Mercurial tags.  If you\never have the need to look up an old reference to an SVN revision, you\ncan install the localtags file in the .hg/ directory of your\nrepository.\n\nUsage example\n-------------\nYou want to know whatever happened to SVN revision 4242:\n\n  $ hg log -r svn.4242\n  changeset:   3726:00d0929f54bd\n  tag:         svn.4242\n  user:        Stein Magnus Jodal <stein.magnus.jodal@uninett.no>\n  date:        Wed Oct 03 12:22:04 2007 +0000\n  summary:     Fix bug in FrontpageTemplate which fails with Cheetah<1.0. Put this one in 3.3.1.\n\n\nCaveats\n-------\n\nThe original SVN repository was split into several Mercurial\nrepositories, one for each development branch.  Many of the\nchangesets from the localtags file will therefore not exist in the\nparticular repository you are working with.  Many hg commands,\nincluding log, will complain profusely about the missing nodes as it\nparses the localtags file.  These complaints can be safely ignored,\nalthough they will annoyingly clutter your output somewhat.\n"
  },
  {
    "path": "doc/svn2hg/localtags",
    "content": "627a3b890d1b076d1c480c3b0a574c37b1445956 svn.1243\ne3ae479f288005c80b337fffabdc8b82919e3785 svn.1\n08c95fbfb7ff79a31adc793ad1aed334e7b5174e svn.2316\n709231604a9564e83f49504526fbe7864b733f3f svn.4\nf1c1e5592ea8ce7469ff818ffdf516d92ee07717 svn.5\n728d4a38a22fbde9238f9d26e2c07a8333490cf2 svn.6\nfab8d6dd115f04cadd8e95b3a4a1adce839e2537 svn.7\n256762bb0714c437794a060847f5828d96245bd5 svn.8\n1fc6250f58b7562e56980bdcc6e6d8526218b934 svn.9\n80256a7717c8960cedbe8040abce949ecb2c3080 svn.10\n5c94fe13ba60a4c31f8d1446437d01b37aae84a6 svn.11\nc9fd789d4b1d65c188096f7cd8080fe2f86f64c0 svn.12\na95c04393d7833cb4b52ce9a381b42d5f5492d18 svn.13\nf4642c210445fcb9df6c2ee19b505c4c1acd0011 svn.14\n22ba50852cbc721961b419903c0d31e6cb2a5647 svn.15\n5a08ecc31a8c1e1d7d5072495698a9bc90a8715a svn.16\n2c0e85abfca4c248333d9e8cee7eafe6a8510b59 svn.17\n5726dc58f50749c53b17134d16bf4474cce577f0 svn.18\n9c782d0be64971076d6a2b46cb4555e1ee0d26a9 svn.19\ncad01912761e79ac1e0f044696fe200568c4d4e2 svn.20\nf8b30ec5484d82e8df5570332776adc4472d288d svn.21\n1859795cada1caeb39b85fb451b8eba99df810eb svn.22\nc2f8285aff3f990ea00c57b9427dc52d77a4f241 svn.23\n29c955231d7e7c99195322f25d0835eb7eddb452 svn.24\n973ff707d8f0aad63d98fe9eafd661614952262b svn.25\n2457c478cbb216397ae735f6fc21a6cc6cfa5731 svn.26\n28cf3f80e1869e6e12db23e57797c440e4ae308d svn.27\nb8dd8fbafecf8e2956acd27518411d7f296cdecb svn.28\n4ab1f34d7b1db2c5874df9d93cc20ea042eb368b svn.29\n099e8ba2c30e572208828b12b04c3c817c5ba750 svn.30\nf797e71e99defc08c6e584c78146f66a9b7e340e svn.31\n6291f917ff348b7b9590867cbe3c46610de9812f svn.32\ne386112490835acdbb7a4e2f8c472a68d9d5cb45 svn.33\nef596451fe90efe7467c9498d1c736f0f9f16056 svn.34\n127c01384df5b28d48a80d456d2b47ae5024b73d svn.35\n03413f2f7a1178686c58bbce0249511cf6c69775 svn.36\nf231a95ef55524e6e98ef0199d4ebd972bb59bc1 svn.37\n9bb67176e57a36900104c1d0d5d2f2faf87f32e3 svn.38\nb17e31ff296ba49509482fe017e45a88f8be0c34 svn.39\nacf697a8886cc75f3bbaa8b3a63cde29b4d2943f svn.40\ne158bf4eada037755f1317ef7a12d69f04440ac1 svn.41\ndd8d4d1921f9826af5364ea6a6f19f3fbd1829b9 svn.42\nd9cea461f7ea26eccce3734585933d179c6e819e svn.43\nd900425da479e7ae7a8229e1b4bc167c9e3f9e6f svn.44\n439059a87b0ffff05f4e22e1e77608fe9ef2513d svn.45\n38f797d40a4b858ad6eb713a14bb45ddbb17cc92 svn.46\n6ad19a61bc4a027f3a0812fec4c9a8977a06c646 svn.47\na875ecd49430a7cc78c3c249623e9f0c5acfc20e svn.48\na67ba93b7511c978c6ee9fec0b9f40f7cdaa8eb0 svn.49\nf972bb9d09431ecb407d2862e787f55ef9ab0d92 svn.50\n566b35038e044de2ba81586381d1649fca41d966 svn.51\n9079831b018978b5f8145f5102f352c878559383 svn.52\n164201a863eaa4d0a57c72443bfdfe3268c5f9e6 svn.53\nb5c9eeaa5f93a1f3551425eed5aebd836c3f988b svn.54\n7eab7870770d9eca98f45d6789fb94757953fc4e svn.55\n792bb1c4b7347d78f51f1e5219000f7a165ec687 svn.56\nc9377303e62b97812729bee66da1e89b20f6e62f svn.57\nf4c8b830a7c667a949d4a67af4329997516ec586 svn.58\n17ed13e74e7a98e070108b2a52366f015c23a057 svn.59\n701da09738c7741bd4f7d1ec8b92f90aeff99d12 svn.60\nf3fc138fcc2641007c589a45ebb8d88fcb6c62cc svn.61\n194823f941fa06431e927a9b7ed10bc23470b483 svn.62\n4e4277095db9a43a4683a855cc602646ef9ec260 svn.63\n879a7e09bcfdb97df29f721dd5c8ca1daecb4977 svn.64\n98a69776839bd3e1b1168f12471d022a81c82b7f svn.65\n1535e2a40ad5b197e0a4f2ef34258e173634f303 svn.66\n7b6f7680844c279256a26b21e97c33c103b41876 svn.67\ndb0579c5cd031d596d3d10cb3af9f1fa1b9d99fa svn.68\n01c0540a90e135c0ea21b64f62fcffc859e45857 svn.69\n9cee290f5fc5462e05a3f67fde0be0b9f7e94be9 svn.70\nf3c207477e49e95178fb5c49538cbac7b4921390 svn.71\n9dcdb8681928b0a598f80551bf7dcac9de9707e1 svn.72\n624c1fb11d87d18536567f1495123c699b245cad svn.73\nd21ed7cdf14ab07eabaf0a37a7402627e6c7c0a7 svn.74\n4e37acc1425919fd4cd6f31a6b3c9d629fb76b45 svn.75\n477682721e6a962b520dd373cc55df8aca7a864f svn.76\n7181eeebe8b9f4f9b485fa88493ef1642e4de79c svn.77\nf132f3d6a3beebdc4996dd7d8fc51d87fc098fc7 svn.78\n8ca58dfe1d752fc489622d84a17fd88e3da8ad69 svn.79\n4c6e44f7ee9b7ece41b1dc3da8fb5d102867730f svn.80\n04a6a6f55b1ad54faac16cce3cff17608319838f svn.81\ndd0e8e42a45069122e8c8dc8278cd07cb17b0ab7 svn.82\ne88b850c66f42064e4022870af6891b2c0d88f3c svn.83\n86610c3503ed9a8b165ba3c89874e3af517415a3 svn.84\nbdf9c737be9170d0a28aea77a9dd69c4b9aa3fca svn.85\n3e30de8b130c4c90d04fe671d69a060ffdd2e4bd svn.86\n6a158980de911099fe30bca858adbd818e5c834c svn.87\n6a5446d65a78314635784d2977fd0fa79b227098 svn.88\nccec40351d18ef4f5128c88048f8161d21b1244b svn.89\nd47543a97db8928d381b7c62b59f973191c39233 svn.90\n10f69cf85a7ff0097bce93c8d06a17c32230637c svn.91\n206fdc84e1246ddaf3d6d3c4fe67cccc5bbad9b9 svn.92\nf9eb82700b809cee3c3af9d0f02ddc387f883bdd svn.93\n0bb19de637d54bc78a8d737c4f359986f246178b svn.94\nb7e5da15d7f7f69a4054eb56f06fb87513aba06a svn.95\n27bc45c8b212b8482ebd646837156f71e50723fc svn.96\n2054dd48574349dfe584e9209fdbb64e506d1652 svn.97\nabb7a5538abc702f4a4c4ef19a87dd5cf47b0a7a svn.98\n59bf2dfbaaef72450dd753911add333773486be4 svn.99\n58121aadf339533bbbe52b11aaff648b90748319 svn.100\nf92b196ed5e460c8071f0f70e6151ad34b2a4bd8 svn.101\n9671b19432a3072317ac4d09d41746e786f99179 svn.102\na3eadf8a936da63c7921f33e792c60cea758d72a svn.103\n4724bd9ab8e3e9417a350c5638b99aacead1f399 svn.104\ndf8a8749dc6dcd0a43090d127c6983ed755cb423 svn.105\n49e940f711b2d936d1f4350ddf9acbec2c0349f0 svn.106\nf71a9e42d100542b61fa2f58c7c5fb894b64328e svn.107\n39fd5c1f329004997b907bb6567ef1878fb58f69 svn.108\n22eb9baa74318c8f4842ec83109e0e0c72dfedf4 svn.109\nb7b1ab0d6d3cfadcf43b800f419f0f7d26625fcb svn.110\n1f802653fcbd891858b13089463fe4b15df5955d svn.111\n2b6f910a35796fcbcace7a07e7897c1d12597e3a svn.112\n94e28ab0f99cbb7f36f0612aa0942f17269184f2 svn.113\nb68b67b7c5f2a0def1b45d4b64ae6c4b67c02b73 svn.114\nb622b141a7e7aba57969462b2863436ed6fe7ea8 svn.115\n9bc802e712b2ea0b5e8e48fbbea7bb8a0f91158b svn.116\n9a7abc977146ac5703f464a6509257ccb2b26a0b svn.117\n536a6f3b5767ed9f3456435c016ad3e2c2a2d5c4 svn.118\n23026197248d52d696bcaa4653b0850c6230804c svn.119\n031cc76853797bccfedb748a026e55bbe5e9b40d svn.120\n14c56cbdd3d51802f50f9fc25005f1251d6a951b svn.121\n066cf1c5854cd69764c3217beb76e51d0866bd36 svn.122\nf19649c3314ddebb47cc68cd7b18e66666a8a18f svn.123\na557a5229ad138419bbe545db5dccbb21f5cea1c svn.124\n0ae6263d88c8fff4ecfb4c01be49c0eb68329d9b svn.125\n9c927ba4ff4835e681ffefb86c18b915150c4702 svn.126\n34dc7f27cee285054e3fd8846d8d3380251e869e svn.127\na9227b2569f27ea7dd3182e4e75f16d145b62783 svn.128\naf8caf432e5d881a3caf4bb7b7c2470fe46cf030 svn.129\na1834a5f6a5f1f670a8f8c725fb0f896467f0422 svn.130\n68da82aea2731bdf91fb5bbd5c13662702d3cd3f svn.131\n24297004f3e770d72a958165a1554c2697bfed22 svn.132\n469b2d64b3085fa751faf6f067d7bd158db58ab0 svn.133\n4cea3c896b1958b52da33bef74d3e033b45e8bac svn.134\nb7b4b22f01046e908b6c22ce614b2499cb1b9cb8 svn.135\na7a6e0dcf6993b22e6e60ee91903aac617c36736 svn.136\nfeb23530265162a510ac5bdbf03acbe17682cb43 svn.137\n69523ee1fd8850982579ee5ee798200678ca0519 svn.138\n33a986501c17e2d69ac3791c9a94c18db0964547 svn.139\nb6dd919daf4d9aa2a9084b05d09de483614b663b svn.140\ncc69d7d6c69271897cc7d08c0ff63d72174fc372 svn.141\na286159ed1890a254b1c8c671f72a0c65d4bbb51 svn.142\na3a026b14a1897d73d84581a72375574523b09fd svn.143\n3d1e0909b8a8e3142a2e6509cb2797ca6b43815e svn.144\n51b6ba250483cf5e6eea3219a232809652a29957 svn.145\n45dd9a9b7ea5ab2f2d55301add1352065b153697 svn.146\na6e3f43d734ab4660693342a905b94d722fdc86a svn.147\n83940fc0d0a5c5840472eed521e6bae641ffcaa2 svn.148\n68383114adaedb8a65ec11f7316c7bde51c5e8df svn.149\ncb8bb82689f8426df6c88d6647b46d6bfa7c427c svn.150\ndf5ddfd38dd923fb89235f349197a61b08155a76 svn.151\n49259bf96ffdd957cfcfa22282c716095942b549 svn.152\n4d6d5fb2702d2e51a88b0a5af6579a89a66c45bb svn.153\nb4282c11c236410bda0521441a405ec7244d4d8d svn.154\n67ce45f3b5bb540b425325357cd161bb1803a93e svn.155\ne21d73a4277196ad5546015d25ea12447815ef6e svn.156\ne1ce5cd0b31a0909efe25709772f96c362d8be36 svn.157\na0fb61d1daae6362c91c13465f65f660e164a49e svn.158\n0f199aa1172b1422eaac2ff68afdb259816689bb svn.159\na98dd690a37c2320d7bd96717f8661919342e468 svn.160\nf982f015a5f4685e783449302d581cd3183a1bb1 svn.161\n993d49fe554e64b78ffeb52fdf6fa5a41af208d8 svn.162\n53bf330ac35a5cf57bae0a8addc3f5505b73aa2d svn.163\nee1e89d328e4c74154b2adf07262864b882b82e4 svn.164\nff4ac46743945308848b57263f6b23e72dd57914 svn.165\n9d4b04e99f391e3d7b3ba8bfe597caab466a1728 svn.166\n14c30ee68469887176aec360b13f969cf668c073 svn.167\n29e1f539844d1f543d89e16a9299602845fe5301 svn.168\nc69ac927a36a487c8de785296a53b0a553695c29 svn.169\n07ab0f862a0a3e36ee9a539b2bae2e2af1a653eb svn.170\n7f41ce0be8e6f1bd5850232ad4b4d8c984aa4887 svn.171\n1c72da1735658fe971ab1ff79f89016e93d44f57 svn.172\neb9017cda93b4c33704be8be1db747634a48494a svn.173\neb065efc654e201ad60d99c73e4719a8cafdd6fe svn.174\n27d6291c0dccc5c73862c3183875c58c34779cb0 svn.175\n652cdad3f7edcf389655455621a8d2e225470203 svn.176\n754c61ceb083b695374cd240361a55e48ecf3de5 svn.177\na2847dea7d00ab71f092efcb034c7d8fcd368412 svn.178\n7574fd9eee9a9292567e814ca69717d7f66133ad svn.179\n31bea5304229b7fce09dc9cca9b3dfadcc86bfb7 svn.180\n20b8c7406586acf7eed4fece8d4d42b62d684197 svn.181\ne7228639432e1dcc7940fde123c5cc988e900bfc svn.182\nf4c931ef45db8aadffbfa06518bbfb66e2f52dbd svn.183\n7ae4a3ed1babdc70b1bfd9d444b463ca0165dd9b svn.184\n0e8c232d98ca31e96e406376b2317dd7481ac0f9 svn.185\n353d8b23ac641ff4982ebe0499a3c0b3f0c1b156 svn.186\n9bda0f58545aa13b63224cb3cf51317db42fa34a svn.187\n0292cdc29781f7935561209471917f523daca852 svn.188\nd8055d72e18e147303c486b378d9a275997ea8ee svn.189\n3a2632dc91390d2bf154b4c18090558eb39cc9a8 svn.190\na64dc858f7176f8052392bbaa8f9ba5d3445f7f9 svn.191\nb8dbb81d691c30cd0fccdcdec8509df822dd757a svn.192\n05bb311fa371aa4436055d24213706a6e4c6a734 svn.193\na3ab598b202b1a202b98b980475fc5155883dd89 svn.194\n9d81ab0468c84cc95546d8a17e2299a7310101a1 svn.195\na9d5cd4346483fef107fc86586ea5508239a27e9 svn.196\na905b51e46023a1c806aa8526724ec2cfd12ce71 svn.197\nd78f8646eeb2fe31afaa37e9e01ed6f78348d5d1 svn.198\n596c971a27dbd52c5e217b7863c6f2b7a3500c50 svn.199\n10541365dd85b870c54ce3a53986ce76da80d44a svn.200\n5894d539b79e75d731417d5d8617b14a21a7e99c svn.201\n44f962b9d8b23c9dfb6076654efb8914f0af275a svn.202\n44232c7f7f69033f83a8f27aed736b735f99b4f4 svn.203\n1cf1d25d937ca45b3572fa98d220a050ae120867 svn.204\n927b3219bc261ec98bcea0fe031a63a522e24480 svn.205\n50d5467876847fc82affd1add8e4e0795d4d3b62 svn.206\n038fc19f2a2e24c96cc130e04704d1a7ca7c59d9 svn.207\na13d5f710d28b4f99c64cdd6fb30104ba108f410 svn.208\ncb88af275f77dc053c0d94e756ad954be00f44f5 svn.209\n0a65084a6fdee75a4a333eb11184a3d37b65ac3c svn.210\ncfb0aff7ff72d962528d6e230efa9b99c1db11e1 svn.211\n37cabc1ce5e2eec0f4e39f7bfc46cd5573a44eb3 svn.212\n2428b10e00d8a8218cc28507ecf6079d8021b3c0 svn.213\nae149e21682539057ff76d71341ed99154f15e4b svn.214\n7b638e6128324d82ae13ee5dd4e14f21dc22d889 svn.215\n9c365a4090b4a9e3a38b52c92a5f6d691664b348 svn.216\nfeca136455d0ba1f246f9d888045c2697a11a85f svn.217\n733919142a8b3d06867f17186d821e0e9cfdb3b8 svn.218\ndc42dbb0f2de0f5b7233a674ad266965e270de27 svn.219\nb6d6e0fb207b37d41786f0bf70f2b7fb1d200671 svn.220\nca9d18b223268d613a7616dcc22aa0209f780833 svn.221\nd4b5d3196048ac3711c9c07fe403b93929566e14 svn.222\n0f784fc302862709fa5adb69a80c40ad2b30ab76 svn.223\n4d2f89b62e1025e831a7a133b4859de9fa5c5653 svn.224\n28b17af5a7d6f8bdb859d88ca23924f1cb29b93d svn.225\n72fb6167ba7a5ec6d3989937b4f0cffc963a5078 svn.226\nd359194137722b064f8038a9f075f1d51da977ea svn.227\n425c9cf4a40aade957f5a8402dc40369374e7428 svn.228\n1621f1fb78f8d6815cc4b6ede6e31e053751312d svn.229\ncb5409fe894c00b3c6d0cf3e590da680e2501871 svn.230\n0bf98e773be339088a1513871f4f9b0c7ff55f32 svn.231\na5954226ce2df00241a2928a4cd17dcd1c2bfb8d svn.232\n33f6050723a196b8aab01bdc5b62e5d857d28bc1 svn.233\nbd7350ab648ba11ce990c7ca4d822a335c4e022d svn.234\n80768bd512c26f2c5df8f2acb5aafad912190786 svn.235\n4fb0e901b583ede14e25d0c874d11b7aed769882 svn.236\n5cdf2739afad3a9e5b2fe96b18e8aaf0b84677d6 svn.237\nc78f20c08bb4a51a661de479344b49d5c781e852 svn.238\n46dc587b09f91e002c28d68ce8aad18529ba3f97 svn.239\n54bf099d8fff3cedfe5b704b8cf2e9f8f0392c84 svn.240\n7282ada31ee35d6fe7226e9b614ec526a9ec2a37 svn.241\n8fd4051bae84d8ef5bb3069133b675c40ec42d27 svn.242\n6db3258f3fb3242e8fc3dd3b92d9bf16863b997a svn.243\nf97dd72de49366f0326d1cd4860450b26591e600 svn.244\n9a7e84438eabf2b1d7ef899bf979c71bd17aa65d svn.245\n1ee9f8a96ac9097a70584ed6ccac3175f4bbcc9e svn.246\n25c07c102fc6e1019fc14c6319fe62037cc30afa svn.247\nc2eab0d350c0a75d76cd97de5430d9740e35ee84 svn.248\nf41c33b3cf1fa866d7a89829f00a03861258e87b svn.249\nf0e3bd0663054ccb0a112bc003f51ab9bea9323c svn.250\n350a95abb9c3f1859457a772d5af5fa47cc9be7e svn.251\nd6b150f22f7773f622cfac2d0bb5baa29c17783c svn.252\n6f186b8d5ff00724d3728b1d28c988cdcdd1ea71 svn.253\n7237e5b79bac61610a53098a750208cbadb8360e svn.254\nc163ba977dfdda2491c0c69c8642fd2a03e0d7ae svn.255\n4f3f4524def29f8484b731aa729a59c75215d8a4 svn.256\n8389b4174f45cdf859c72652556767c5adbf6d6c svn.257\neb36c7610877b9c03623038593ca0c84d3393135 svn.258\nd945e6cdb16ca2a211a401a14d1c1f2ef50d8a37 svn.259\n65fba99df1f69f61a1cbfc1ea3752a650fd8e5f3 svn.260\n88df416028ad960eb0a1fe905b08eebefa4da6f3 svn.261\n7802a34859fac404729a42bf860e6b36840cf095 svn.262\n90027dff6ab39e4bac4d849f4ed8891e08822f50 svn.263\n269cbb845f7381e0b2bfdfcfe85ed24a7a4a4b6f svn.264\n3f45ce96660d3d46d014a8da0f58d2803fe280ac svn.265\n55d77c4d804916214665230335084f5a0a599419 svn.266\n7dafdc623252d201128b7c3ee5ec783406aa7517 svn.267\neb64f792b9a181795f6b80265f854c39a19de5ab svn.268\n1ad44f68dd5db1f2c125ee52410b22668d9a2589 svn.269\n6705dc69467681706d08f6438c5617ad47b39c3a svn.270\n92ce637dbd95c4271b4fb06574b9aac1df5fe653 svn.271\n3ea257d6554cf9110ffaf5ebd0990e090da81e46 svn.272\nd7a03887c74d17fec9d7712a4248dc7cf6d483a9 svn.273\n280c3e79bde0f6990056aa80d84fe333f3d73b00 svn.274\n9161c46afe4194c99029ddd08e282490d74d237a svn.275\n8ea515ec9e2ca8340773f8d21a33614b7af44f8e svn.276\n2368e9fdacf1102d6bafc3042c1cbc7e66e6170c svn.277\n9ef555ff74459650f1a9ad9c5ebc96aa524cc335 svn.278\nb5d8f7e13b6f903b7d3eb368d0757e373a55d3f6 svn.279\n6e63aa7c35738e36cd51584960a30b77af240f00 svn.280\ne9ceaa4a119d0397015413990e4ad0d41e6b9a24 svn.281\nce2174bf6acaa9864f97ce83f6993b234cb48bc8 svn.282\n3c4c7a33dc6aeaaa05478746f6ce92708dad374e svn.283\n884f2a8e08def38ea242ac26753473cca6f00b74 svn.284\n3210428fdec8889fe516f62f6c1283ce61fe3836 svn.285\n281c3209f319e1b5a5cece211d976e9d105223ad svn.286\nbc540dd2e8b5ac4d9f7e4956d592b3987258b3ae svn.287\nb6a417d2432db42079bc5c7c744d5d8346b3da06 svn.288\ncce52600fb697f8e9a45f99aec08027cc2e46601 svn.289\n4185222643e011c420363e1320ebfbabfb2da18e svn.290\nbbfe2793da5e279734db62f027dafa4b964a5d1f svn.291\ndb9098723887ba920d3df24d7bc9adb00308be03 svn.292\nc09bf49bf1af4e6c10704f2b6f246fe066e99cb6 svn.293\n76b5524515f0c79aca6de94e254c41498bb8134e svn.294\nc686bad7d3fcdbbaf3728bf17ee72c8033ce2c85 svn.295\n5e675c032897573cd6a945076fec86ba485f3682 svn.296\n59d18ddc2b0b106b3e680cf85cc03d29bac4cf73 svn.297\nd5b3c52ccf5afdaac2f8eae21bc8ddb0ae7b81a2 svn.298\nddfaaec26f9a64b14d462b3c4ea828cfbd4640fe svn.299\n03e00b81ed31474b74e1ea4b18f65dfb501debfb svn.300\n2a570175f6a9f38be6b0e9b7a011477eac00db7c svn.301\n5c96c52193740ae9598f8675f2ec1211547e6a4a svn.302\n6472f1d4513ae11a2791901560cbf6136ef0820f svn.303\n61a4b859454025bd104b718168d5dc33800b47ef svn.304\n65b4a62b40e66f1f2d63efd00336b2fc797ed168 svn.305\na8d943f6ea284da1735783518ceeb42304653a1e svn.306\n80135df131fa882d81bac963c8299341bcdc5adc svn.307\n3552b3dd808d3c41b946e28af20ef95fc24a3a9d svn.308\n1f9c2b52804464532c3075c2aeab8fb1f9d6e17c svn.309\na835ba0d3384fa1483a456863ae8c8e5818a4cd2 svn.310\na235e6884abd9b9135db2e3ec43b308493927f10 svn.311\na2ae42a20b52e8303517cabe2c8a2b9162859457 svn.312\n1c6bff222d8860b2cb42aabad15813e111f7af94 svn.313\nf9265aaff42a52bd87e56e7e8db0b164b979627c svn.314\n17172480c825784a17a1a3643002cfec11a8854a svn.315\nbb86090be9fb9cd65673cef54aa2a976e88400af svn.316\n6be19390e8c354e8a482dd8c633458ac9d8033af svn.317\nf7dfe6be4530c2b40eb0f449e3d810f6f285946f svn.318\n44e28875b5dfcb087ab8408de34e01b374bc59d2 svn.319\n9be1884be327140020ed49003bec369f6a977acb svn.320\nc61663636970a81e0fb4338f296379d0bc50e5bd svn.321\naaa12a94be33ae1ad9d71ccc62f36861f351aeed svn.322\n2f192fdc0e80c83158507cf8b9c509837a0549bd svn.323\nb685db52705e0a3d0222afe4d301dd625c521b55 svn.324\nba7c5580a61c988a35450cdda669bf59507e5c49 svn.325\n29e88a1107a5f06ddd617c795b10a212073b4f55 svn.326\na852425327a685cf8a95849e15e7ac38ab865fe5 svn.327\nb501a83df240af22b3eb3e4f7f3d0cec1c1141eb svn.328\n7ee2e52f9987e87939f3fd2fe0bf9441f3f36c4b svn.329\n9eeed2336a128cce003e3169357144ad5ac31649 svn.330\na9bddcd62bda6cb7e0b5e4aea14bc6db72a28f4a svn.331\n084308e26b1c602f54f9059e91109d5b76acb504 svn.332\n3f442415bf37cfc6381db866469d81b8b21d82e8 svn.333\n4d277518f42519aa4ba49416559192a722064c28 svn.334\naf8d6f15988d1597aa2f7ffef344fb65f0ce7ebe svn.335\na52a73382a5a9ab251fab3d9bbcc1ec69cfcc86f svn.336\nd448aaf16d8044384c000ac81b157ef175893a7e svn.337\ncba70d2325c5bd65fbfb1ebbbc0e2428e1627dbb svn.338\n6f3c12e5a7c7643fed2733febd7e67814401a8bd svn.339\na15faec93e119e1d9dc996769e02761c61bff2a9 svn.340\nd187bc3f44ef2f2149b21c8dd52818b898266ed4 svn.341\n98f1027cc540b8f50591e9deef8dbd4d51182015 svn.342\n988e5d470b351934c617ebadc9be24eade1dfcf7 svn.343\n018dfe6a63729a37bd999a340e63124d96e77989 svn.344\na31bc2875b8411d166bdffe7f8c82cfd9375b0f7 svn.345\ndc5e1ad4c082a28721986b87be80dd43f4dc4cc6 svn.346\n3ad04438055ea25bb316c88ef580542ac40f12cb svn.347\n8643d1b8d92c4191e90c9a142659e4e29fe73523 svn.348\ne927d1d0df783130c1cbaef2fe36c528d2ec4827 svn.349\n3024a4fa29f4caeae7be958d0fe852805e792e6c svn.350\nc5ba784779317c8d38ba3a0923aad66174f95846 svn.351\n5032c41001f8005a0da1b84a782e98b4dc0b7656 svn.352\n9ae0174da2099ababcb07224c35bd2b48c952ce5 svn.353\n412411fb9fc6170a7149367d4d1b4fa3f41d4b11 svn.354\n4ee5cd84673eb6bcc21aa6360d69f592a851f238 svn.355\na90027704c44d752e75e70654ea9a0611f9ecb93 svn.356\nb88c03e108f487d30199844c75de5765b16fc0e5 svn.357\n9983711a73e6a39721c29085ecd01722c0496809 svn.358\n3794fc233843241eeb932d2fe4abf0dae9db4585 svn.359\n0716d1f3ca500b57bcdb1ea9685c50b57cf7b65c svn.360\n73197ebdd3b8844ecdb4fe017e4f80e173ea34ed svn.361\n6b95e077761717b2221f5986ce74ceede322129f svn.362\nb2e06e0cda41b5133162d01256ad782497411344 svn.363\n2c1dcd79954e9fef7e04b11927b7bf09a287e459 svn.364\n5268463b7895964fada25d893c12db8db1f60658 svn.365\n3f38a259f8dc8884516c6de6a05763f37cb4e303 svn.366\nf3ec1ff1e6c2a1f53a923b1bb180fa7ae75c27d6 svn.367\naa749f4fe88defe848a7554f17423cabb2bac032 svn.368\n9b8972d8079d34a4e1c5602f14fb7e177a5a700c svn.369\n617923131568d359f9debb7973232879450fbdf2 svn.370\nc36c9ed901aa7cb3cbf4ecb03a301c6836ce35cd svn.371\nba720b4a52ab813e6d3c5e446a8811e8936959f5 svn.372\n8d3abd21c4dede407ed0b537f41793d3605102a5 svn.373\n36b5d4f1ab1033dcfa798df0ca08fb1a629d6f51 svn.374\n10956f1385cab308e9395b590e33242f1fdee35a svn.375\n5b62bcadafd9dad7a6d49d39840b88aa90d82e66 svn.376\n1a911982b68b0aa58b4271a329367b7cd22441cc svn.377\nca7f65f2a095b2cc6dc74a0db722dc19ec183277 svn.378\n0f826202364aa77c9d2e0a83a3d60e4bed94a3de svn.379\n8f93c410d5e6299067ae5f9351dc236eb67530d7 svn.380\nbf6731a0124de91e6b3b4aa087cc313faccf8755 svn.381\n86edbabe410d7549713155dae53037589dd933d2 svn.382\n2795bc938185f863892f4c74c77d1a260078d896 svn.383\n80fc1f2b8fd0b0669ed730ccc04279ee9f1d1da3 svn.384\ndfa807d19d6f9f448639d6e3a24d757354ba59b8 svn.385\nc2c1edd14a7cace00b8ec51238d79e0bcd29dedd svn.386\nd6513148f5f47b9f0efeadd11a02cd8fc6d21c80 svn.387\nabf59ad51e4394f46c9bcf8503277686c1c848fc svn.388\na6e563b1a38197b35ea987a2134d4bfb5d087188 svn.389\n1bb8ad607a24eca99756b6629c3f5c4f5eb0a1eb svn.390\ndd935c6bf8f72a49d799e58088b3a3cae89c1092 svn.391\n6d7d6afebad48d8446c5808cf365ea5e576c4182 svn.392\n5c66aac21734c08a8200faa5077e074175bc1792 svn.393\na16343fe88da79a80d3d8cef86718cab3df58b54 svn.394\nc60097dfeb9b5aaa25869cfe51e77df552fc0ecf svn.395\ne3658a3ba3bb13ce8d70ebde5d117cfc1100035a svn.396\nbb255ff1512dba8ceba076b292d5308e836d486f svn.397\nbb30692718a76babdea5ea4a1eb9312fc09161e7 svn.398\ne8b7685124671e6d137449be0951d15fdada844c svn.399\nb689411acbc6528deae71f6f056d44e4a44182fb svn.400\n16ce789f72c38f74d579d6912e48828891ba81e0 svn.401\n3c8dfa1db772872936ee940ecba3cfdcb3c92aeb svn.402\ne94ce35724c7adc05dd1b3d8eba07781960b077e svn.403\n2f397e1be5f430fb8006148a3ae3a8e3007edd0b svn.404\n3f49d4490b68416bef9a4930d1b688229ee773f2 svn.405\n557dc69fc35744bcabe6df03ec4cd506ae2c9985 svn.406\n167259db611ca9cd79d7e3437c7723b51ddbe2ea svn.407\n7d1902c69dc0ffdd634128fe899cda5b03a63d67 svn.408\na8c2947d399009d1132b5008e25dcee21ddbd0f8 svn.409\nf0decc4db55199c31c638eea6963318b4fea15f3 svn.410\n4ef83bbe634bb27a5dcaed54e053ed270fe4a734 svn.411\nd39b7da3bad6f25fb5afc928e2670f01ec40df23 svn.412\nf1fa677b24192bc788b7f31652d4df13c6d30612 svn.413\n7c206a940139caa809e76afe0543069d1a9411c4 svn.414\n26036d6a84fcfb12604bc46dd44771299a019eba svn.415\n675f78ecfd9116381f392bbe1815d8debd9a8e8e svn.416\n199c31ecd672670857406353beec1995132e0a03 svn.417\nd32a477fc19d0d04c5424002a0d3feb1674b0d04 svn.418\n4543ebe328cc674a482551ac4ff66314f63472a1 svn.419\ncc553914f54c707978df0a5e7f80e955045e7d8f svn.420\n7c63a444913cc1ff05b67a423c9a1cfeaae25ede svn.421\n6d84f21df61c9f5477ded59e66048e2f7890932c svn.422\n2c600d89a45d2bbba62b44efc9b9d6c5e2783896 svn.423\n3f12466c1cea3a11d73a5d5d2bfefeddac017c25 svn.424\n201c263ed1bc075750e70586b5bdf23a8fb4af37 svn.425\nb408f347e4671ace424746dc99d7bb4520743be2 svn.426\ne98ded9a386665ea17664562cc9c40d5f0ba8374 svn.427\nd9ed2a12832a6b38c2cf171e93993b151cba27f8 svn.428\n97fb72dba45fd05a41d99ac75da7141ec098c5ec svn.429\n64376b31c3aeba94f6209afc15383af3d1ec8a96 svn.430\n81ca3a8bb952a384c106afe0af0a0f067fcd20ed svn.431\n27077f0c2bc687505c98129c066f79461215b8ea svn.432\nbf1ef769b8aace163a0ffc5ecd39efca4d69aca3 svn.433\n856fd40a773b2b967c8ba68a8bd3b2f463782100 svn.434\n1943c2f147ad4cd846077835897264b998269725 svn.435\n9af72c496d642175fb33912b5f9fa0962d458671 svn.436\n4189931b2d9c7f0bb12f1ffec1fa00255d8e7ad8 svn.437\n3274ffa0516049a11d32470d2b47f4f95816109c svn.438\n87bf3aaf89d763ce3088034145a05553c5c89f7b svn.439\n4ea7d17a39ea2515ef5b2d5ac2e5a1f1a3bbe7b4 svn.440\nf1958653a17812f0b1286b1a981673be6e2ebf36 svn.441\n23a812d078634a3f3af8320e0a64d7af1c36cf00 svn.442\ndf8682c837b92ba1305711b3900e6a66e1a84b7b svn.443\n2dacf83b9a1ef82f90d1eccad85f6bd0c87da588 svn.444\n18eb62e2b1a2fcf5e5da35e8c991f693d1c61f1a svn.445\nfe95f7983f1e8c91855492b398228474d04fb127 svn.446\n893c5d506f8a05f62d14759cf98f0d5038c7f11a svn.447\n118ac12615e165506ca375c1b344fa90cef8f0a1 svn.448\n69d0840027fbeb15da41d1d5b4bea5c376782487 svn.449\ne230499f3d2353a3978b776d1006155b6700e578 svn.450\n94d9c7c7f68f3a4c56081ebc5fa9488295653082 svn.451\n0931bb06437d7d208ed59726649c7c122393d496 svn.452\nb27a0dc103f94b232cb92cd1650b4c0415bc7179 svn.453\n90fef3ac294a5310643c648c537b2aa59896674e svn.454\nc0da7abd39e9534f7803727266e7035f13143473 svn.455\n16f92a9835ef34e7591e99ccf4da0736e7d37615 svn.456\n8af8a6a46e1d26fe929b1a2d339e1ec97fdd0d2e svn.457\n5c329524ec9a732354e1873cabc2ae123b5bbc63 svn.458\nf80fb1c3fe23fe495f4b5cc6e13a58708cb97370 svn.459\nbbb448317a8a57a09cff276bd8c2b653106a9684 svn.460\n8f5c97ea819dc75f49fb8f7a71f2359cbbe5c3e5 svn.461\n8ad4013f7e7ba2316dbaa37382dd3b59917770a8 svn.462\ne4e6c9603e87c589ceb6bfb76780e6087cc902e1 svn.463\n56a239e7c7588a59769d1e9623a73134f82c583a svn.464\n6d5effcfcb27189408b02d843772005039fda0cf svn.465\n0e349ce1fb677904fab87061ae2c9e6f33d5e5bd svn.466\ndf73dd0c74cb68b6240eb315c537539c82029256 svn.467\n6d0b1f85f5b555de22fa5f866e205d9f2a79013e svn.468\nf1fd6b0b6e70b7587e523e6bc31df376fe5fef31 svn.469\nb0e73178ef052b0e2256c7973168d453bcc4cd3d svn.470\n746846a16a2ab0427699a53dec040d0591186dfa svn.471\n9caa0565ce0cec75c6cec683df1d2a748efab2dd svn.472\nfc60c68670979ed290e9acfef1fe81882efdd366 svn.473\n2f4a216c351dbaa94949b186d3eaae91a8041170 svn.474\nebd8be774840903d1b8fdd444899f1ef2a028a49 svn.475\n54536b17d47d6a336ba5d46f5fb41bd9f182a014 svn.476\nfdcbaeaf863861dbe345b3118c7faf540dab36eb svn.477\n9bda132591158af575006335cab9053dc42b6348 svn.478\n71d758535ee1fdb1085b313eaa00da23a0639988 svn.479\n8a68f466f460ec4f11c4b55f4ab4251ff6af9014 svn.480\n404225667decbe95ef133691c76dd652dac3190f svn.481\n9859bd0a542761706834f4d63d825fc5c1ad2062 svn.482\ne67e7173723cca9918803c2fbf70f85303ce511e svn.483\n225d530fc9c88aef743f68b2ba0688280e35c19a svn.484\n968cf3f61999aebdbc814326dbdb42d7b257cb21 svn.485\n7c7c9cbdc5d2366a28ba664a8ecc6067489171ab svn.486\nba6005b5a0e02a4ecf033e351507ac47fa27c009 svn.487\na567c1a7ef885a2285e2730099bf6390e1990476 svn.488\nae4657bf502aa8eda559303a454334d4a5b73665 svn.489\neba58ef5cf1e0156a1c6b681c97ad72926ded6d0 svn.490\n2739247b94139f97c8bda9cfbdb0034de194f073 svn.491\na479f6dc13861075be49e8ca0b7b4c0de8345263 svn.492\nd0f3ed4b610e86fc1d0c6cc3db37375dd8d38949 svn.493\n9afcf56656b61b88623938b01717534eb8a09bc3 svn.494\nd3f8d052ccca7d796d99d8427c9c48a4581142c2 svn.495\n7400bd5c7a6ba6f1b03edb557f3285480fd78e00 svn.496\n1f36d97551d7558d9c579b5a96866fd2da82828c svn.497\n61a1d83fa4ce995701cbbc8c2c057ec21fb76b19 svn.498\n0e7370a2068ec495a750b7f26f3cc46ce66acc30 svn.499\n5c68298804437d21459d06ca5444335e3cd13be4 svn.500\nf50a3a79070d81c61900529326fd855857ef3daf svn.501\n265c907d5d5630139e92c7ed9854b72deb9840ea svn.502\nd285ed88a49a2c3d93d0807d142a7f89d211cedb svn.503\n1fd6ee91308f0c63cf592da835bc0f2857f4f0c8 svn.504\n14b26684bf886ba0bc11ed9b9cb72f72e15dbae1 svn.505\n10cec264c0403ef82c14aa459b1bac7f635eaafe svn.506\neaca6281283cbae29713caab517f1593409c407b svn.507\n84910413906d0c8e60e8217e567c948de5e9348e svn.518\ne16c2ff44830cc76bad12e57a96941186bacea09 svn.521\n05ea11c828da939f12bf9911b23c47d7dbdfaaf9 svn.522\n8e0536556528fc198ea779a88f6895b2c8381d44 svn.523\n494557e73e6c0fbfc53d55deedca489630e6d260 svn.524\nfafd21418d354cb61f99f2fb4d7f443b6eba6326 svn.525\n27a6a35bd6c7a9705e240dbd338f6d3bfacaf38f svn.526\n25388c4b8cc3e7d7a413487fb7a3daa9ef5bb06a svn.527\nd75b244ab6fa920e99b57334f8a572d725c75512 svn.528\n46542428075a2ad1d9631824a2969dee7e274b7e svn.529\n81214f33ee16e395b44a7013ffb7ebdbbc35aad2 svn.530\n4e0fa4da6a5e3d228f0212886b33f4ebb6b0bd8f svn.531\n69d5ef8228f4de53b1703d6e0653558619935252 svn.533\n77975d6028149520a67ee16a9ba3efbf897ad184 svn.535\neb749be5455d28ddf19949e13fe33155dfc4dff1 svn.536\ne673e64b46ed6ce0e8e79429f2012617218edd1d svn.537\n78de7724f20b97b07cd7cab7506a274e7c9032c6 svn.538\n1aed372103711d2d5f06298473270e03c10da188 svn.539\n5d40bcd550d337f5b5b64fc2903a28ab192ab0a3 svn.540\n6e3cd2dd60c250c89be6e0fdf8ecf08ba6f511cc svn.541\n2202ab5bd535389a236766e378b902aa08cf3958 svn.542\n6aa34a1d31c95c0bb3758753c0b55dddff627a0b svn.543\n00400d5853edbb45369adcbcd02641b68832104c svn.544\nd13e736aea5782afd606edb4e00fd17bb25f73ad svn.545\nd6e885937583f00328c5bb3cc5c8dab24cfca3f7 svn.546\n8ad522928b2c3cbb958458149a34cb6e71f3da28 svn.547\n10194d08a3355e0aef3b435abdbd7aa69c23fd88 svn.548\n1c3dbe7af2baaf398c3aa8bd86f83503f441c6c3 svn.549\ncbc4867c6b16371f424d486fd29c8583a3ac6571 svn.550\n5e4fe2922f65eb8fbe8b2015abcaba7f94b16338 svn.552\n99ad8dd782af707c10d4b444cf51b122ed6566b8 svn.553\n718985a7f2ef4711f1712cb384c59779f69935b5 svn.554\nba2a425ecf54a34b03e737055877a187ba61d7f8 svn.555\ne878e1b6401a79861382dc39622e7832d6ad3e77 svn.556\n1e70a0f97575d0556678d087f2476c81b74647c8 svn.557\n0f33791490d5a29b7600d1614b3636ad42dfc9d9 svn.558\n9abb7b86cb12aade4d543a68228cac795db16ea0 svn.559\n9804cd41633c09a75cfd02a7dab8b09afbfbd25c svn.560\nf524f6973ad26e3ed11b3fd8ae67575935df3590 svn.561\n682057bf7b1ad40a0dd0e057ad8c8dad9027fc15 svn.562\n74c1fadcea645c6088d0afcbf591cca9a81d738d svn.563\nbd0d8ae8880b8a185a35b85c554d5239b52039a2 svn.564\n84637e38b634c16c1acfabc66824b5d56442d101 svn.565\n571162f53c12def0767a88962dde8aa6cb39acfa svn.566\n396aa3e97e25b7f1af139cb943f6f3b60550adaa svn.567\nb1fa1f1c16faf3f5a87a955c4de04d9a788a901f svn.568\n61c8e28ad8d04f649c3671f22a5e08d1b5e2c022 svn.569\n50b9eb129946f1efeb48d319cb22890b278eea59 svn.570\ne1d8e95f074c95c882d226d5f5551cb700c3d529 svn.571\nadada0d7498bbfcd44f976bf22733335c44429ed svn.572\nd0cdf3520c462e4af777ed706bbc38ad6518bf93 svn.573\na88e515c47a3b2be5a9f9af4d66639a2873d7610 svn.574\n1246f0fb7f5cf6efaf89bc24bbf2a0e38bf09511 svn.576\n7c693806ff4e4ff4f02adad571819a6a6c289a75 svn.577\n5982d160b166b337a9d6aa870839b37bd5dd14ba svn.578\n6049498d33468e657ca0993f16e5069bd183dd59 svn.579\n5c5001d6d567f3b42069b9fc19a9afff06f306c9 svn.580\nf5c82be86dd0fab01cc837e9c8cf5c68b731a5af svn.581\na2a28a40abc9903f27be51a95d109b4eaf0ed36d svn.582\n3e10c9996147c7daa8fa778fd8a150823319c8e1 svn.583\nc19e8b4c88fe92f543013a52ccc62aea067a42b8 svn.584\ndf8223d57c3ffe47b251b105f017c0f2affb59ab svn.585\n8a817f953ae9c47430de8a9364a434d0ebf49bf2 svn.586\n3c2d1254336b2995b89f4ab2d05d80e8c9005cfc svn.587\na28b0a8f79f37cb8e84431e443345bd04603ff43 svn.588\nf5a0a0ae24e868be1d2b976296d8c06b319773ee svn.589\n0a6d3f01e151869a9d4ea9222746d5cdb86d31ad svn.590\ne1a20e7768fe51f5d816020ac7880489650c1f10 svn.591\nfd13b371366c71f29edc5d701b9b7236705da6ba svn.592\na4eb63e3a6266f16689c699d68a9a681124678a8 svn.593\n08d78e1b0f09835d7de50950ca18c4429efa1f55 svn.594\n8a85c481ecef3c76c442dc2c9e1021715f2cb79c svn.595\n34f2182ca9aa5214177de0a50ab8cec536ead947 svn.597\n6eaa676930e2ccd8aab23e9c534685eff8f675ec svn.598\n973d70dd58f34ba698ec54371b3ae68ad2c60bed svn.599\n42f883a18033b263f2d0c11afeebe782b9d49710 svn.600\n8f0dfbf34e3bbe2d57ea739804edee6e38d68361 svn.601\nfec40d006dd587605e8c9c078b10ecca5ef0fcee svn.602\n002b53a30629a4aa96884cbf9cc204058c860441 svn.603\nff4123cd704c0a928d239c26eac4a8f4b5c793e8 svn.604\n7d014d09f7f5b4d3387559732db16303c9dd4869 svn.605\nd2e1b92b71b36995dbd70c4235178996dea18be0 svn.606\n4c40902463bcb94cdfe2f44bffa237e686270954 svn.607\n12f298bea553adc4d2c72ed59abb99532563665d svn.608\nd281b161340662b4411f40e7faa9dba03c884b84 svn.609\n146e5a82cff3aae464f0a8790587fa19487c7032 svn.610\nc3b899402a4452764df0e9a8c078f54fda21bbfa svn.611\ne13eb2264ce4f577c5ee982c9c880e91565aa5c2 svn.612\n80c075499e39e41b0a210c2fb3e3c9cba970d019 svn.613\n76202d75d6c1ffb6bc5da5eba4d4b009d193b906 svn.614\na7be2a031e12ecc29dd213b7dbd9f96613f3e237 svn.615\n1e7b8cc88ea971ee83473b0e77b917695ad582b9 svn.616\nbb5032b4be64c9eb5470c141b979cdf127e33472 svn.617\n72d10c4c50cf532474a4d39b9214f99c6246a59c svn.618\n1e1e6957fe5e01fbe23d4a1f10951cba8d604757 svn.619\nde4b6336d627f765bc98a234e1ab4d83e71872de svn.620\n2259cad7d947b396c99d6e4922a7832c86d9c6c4 svn.621\n021dc3d5432a690744b6c112ed81827108c28840 svn.622\n99c48104e6eb874300ce2e61e076738cce9fe196 svn.623\n9e07fc9a0af7411df6631034d14186656d4614ff svn.624\n3b170710d035b747cdc19ef9362151841aa04425 svn.625\naef3cb517066d1c8a07a61fed9ff6907095b86eb svn.626\ne1510668097234ac1a1a9bb293b2f2b68880391b svn.627\ndd56ddbb89610eaed66d87cc883d09978950e93a svn.628\n1ec4bc63bcdfaefe6137fcc513008dfdaded1b9d svn.629\n1f8349e35910a4cbd0ae5831037d21b221e8f9a6 svn.630\nbd72ea7a99f2ebfea1ade18d78fc5277c6d1c3a3 svn.631\nbea576cf7e751b709d3eb59770920ba8f72e1fca svn.632\n1eebc799667641e3dba4408d0603a726457367f6 svn.633\n86aa5a571b8d2f2a608f435f822b15d8d64656ce svn.634\n74b604fd6e09ee1468080e07506efb77c601b3b8 svn.635\n1bd39e35e1c2962db7cc11b31204016c31bdf3f8 svn.636\n1edabfb257479c85ed6b75d8fdca7a4f38af08a0 svn.637\nd49a92efd5194f6c39be5bc8f0c28f0aa2f1026b svn.638\n3a0e1c7774c4164139a861ca67ec712d5e4bb810 svn.639\ncd21b17d1f234421980899fdbcefa0a92fdfcafb svn.640\n9b35045b7077048749de24dde096cb625757f32d svn.641\nd64b00a7d744ed78817687b7f3f343ecf2801b4d svn.642\n1c9d4c90abfea9ff1fea6d799b5adac0b31dbe98 svn.643\n322c1c91dec5b7b2f813f678ca124a8032fa8d8d svn.644\n7f31684cbfc514a711e72d34f56c4f8c429773ce svn.645\neaab57bee7384a2cb013733bc0602acedf97f9d7 svn.646\n94d041c434f7fb0f5d75c570111d0de1d4f6831b svn.647\n5f8c7d07aa52f0b4fbe1c21bb8f20a7c99bc551b svn.648\n4d7284926a06f201898a69eb1b556eaf4e7b28be svn.649\n031bb077de6a6cc1eb6bb4102e04a31d1900e0a3 svn.650\n2b17b29809a724fe1ae789c3ce061005f74d289c svn.652\ne763e652b925f4f226bd12e38149d072e1cb1cb4 svn.653\nc407dce0048036c1d8a12dd5ec29567f59e4f925 svn.654\n31ba7e10d680bc3edf8787a605f72ddb3b3bf664 svn.655\nb97b8464e7aef9ce1a4cdc855763307615b2c051 svn.656\nb5915329b4bd41c4f6327c596f540a87bc848f5b svn.657\n753875cd280ad644a224c2571f86c1e9c5063be8 svn.658\n7824b9706e884466bdc438c997e3f1b75c069cd6 svn.659\n5cbd036122d0e48c13ae75bdc120a78c2c9132a0 svn.660\nbdd1a6b0194e89fee42c5ec4642d0030de942d74 svn.661\n60a66ca7654efc5b13de35711b0f32c0251baa5b svn.662\ne04a3a50b3c5a95e4ca1a3fbc72e2cdc98d8fac9 svn.663\n14198198e1fbf3d4fcd5c3e593ac8ede2b47d1f1 svn.664\nca031bf0def8b8a1711dc2e7adefe7f256374d06 svn.665\na949c8d280dfc0cb3edfa9f081feef2584305c35 svn.666\n74f218a3f90e08eab943e04cab9dc4a0f4c84bf6 svn.667\n856839cec4c85e21cefa748dca8dfcb3b6128807 svn.669\n927f1aeeff195c38bda8b3e4e74d4485b43c15dc svn.670\n799ff31b1f41e7d7a6c768855e02a6d7c0f80da5 svn.671\n852ed0498accbb755913e300e7262ae05f8a0f7d svn.672\n68a02618a21321ba2637dd1ecca95e5a34447362 svn.673\na43b94af3512c116c305b074a237fe8bb0436eda svn.674\n8a3692da9f4aca24b35cdce0260dace03845e016 svn.675\nc47dd70d1348e6251affffd07dcf8b4ce45e71ba svn.676\n5b968d096a66afc32a5286df53ce7e0b87ed646f svn.678\n70224e18496d9d34b23335a27f14c6d08eea1aab svn.679\n90269d22120998579d6db3309928021c37432917 svn.680\n0bf1bca434fa18f8f4641460b3d7abca983f0c75 svn.681\n0306ecb0af6bfe958843811efa5fdedad0b76c8a svn.682\n7140c9b4b9ffc04cd8f9563cb04ddcfe4605bf9f svn.683\nc1c58693e8a2015db9dddf38cfc1e3fa048ec47a svn.684\nddf836fd3e953418f42cac2ccfbfe5dede3b8c48 svn.685\n029e61228f4026e838c4493cf4369a512463ee84 svn.686\na942b9a95bcf6d4949165a764b2558739977bee9 svn.687\n1c20e7dd1dc1e05965258797aa95e7c522835a2e svn.688\n16efef5022f735dc4f396e2b6e6a3bfd71fa5cfd svn.689\n50ef0b4f81efdb6d52c05e75a1b8fee12e0c2b91 svn.690\n363b6b8d6a62af2474d586a0a9ff86f0bceaacad svn.691\n149d93f399e8fe7bcf145a501fa03cd8d31fa46a svn.692\n7b0f164153d8ff07331b33497726593a426005c6 svn.693\n1274861781beca8e9b02ae5b00703f58321786b4 svn.694\n4e69b92a89d4b6b3e696157bf6ebc638baa58cb4 svn.695\n727462f735f201b925287650a18560f128649b3b svn.696\nb2b0d85300ed7c13f127503ee6ea658e6272d3ce svn.697\n25ad661e25615df9e3f9a3773af989c0914d8b46 svn.698\n7d1169d3c94cf5729b2899d9f27847adab2cf314 svn.699\n60e51aa31b9c14618f39a404d23e3c0e9ed6e12b svn.700\n677138907610c6c41e14a16fa44a239b74508ecd svn.701\n06866a63e6bb9f7aa563d5b05e855703e0d11046 svn.702\nc5bc6f300da709c8efe78697272beb0a98767c3f svn.703\na4a66148aa584536c0db0b9c13bf93fe16bb9bfa svn.704\nc25696be20b53a9ee2f7618bc6aa6cf4a55a680c svn.705\nc96e594a2f2c6d67d8a3741c8d47edbc69ad900b svn.706\nfdc198eb05f916856d6ccc871193fe57cbdefd61 svn.707\n4a9cd03d0c06c6a2d9fcdf8a8ae78191e6a5bf1c svn.714\nc13b2f46a0bb236a2cd713606d7c652ec928dc79 svn.715\n25995be28b6187fb1a4d005e42c31bd8eea2c184 svn.716\n837b7422e57f03ddfceb7969fa806d3f6fb28cdd svn.718\n128b9bf58845ace3a1a17798798f006bf04a425d svn.720\n3c9dfcf7683087336eae14f003af3279eb8c860d svn.722\n1a2556c3d742565cde51fbd2d3d12287cc52adfb svn.723\ncb12198372b3f9d9470e69ab20587fcb750c8595 svn.724\nff8b25e57977557fccd9227ecf9708690efe56e2 svn.725\n5970a5cecbc0aa1ae75b66da3d7bb961724a112b svn.726\n766f787fa17c5c5d0c326e510d6a76ff5fe82508 svn.727\nb584d379edec807367ca49451016701b32b94f5c svn.728\n4604dabcff1bfa2fd9f02a5e13127fa7ba03251f svn.729\n6b79c00693c0ab73a156c0d9bcd9d60f7a2260e2 svn.730\n413288e74d47a5abff1b1260905d99813c982694 svn.731\n6023ff6d662fc34474c08cfbb03f2952aeb5fe2a svn.732\n8336ff99c7cdde21dd4cc2a4ee00a6b22c4dd5bd svn.734\n729561007c8fc917cbb08ba2c2259c4f4ed150f8 svn.735\na97a194ba030e78b77b5b8e4bcb5751f8ebac58d svn.736\ne86394f7f86d74e2092b0bbe1e22ac74c21af975 svn.737\ndf2368f0adff5f45bc1a2896ecacdb49d5a7fa61 svn.738\n5c6ae38b24ebab6029ceae33eb317a4a10982964 svn.739\nfafacafc35e33a3d0ee8b0991895fe59ee5f19d1 svn.740\ncc76b4b2f009274fd36b10dd373d00f8dc24edcd svn.741\n82f77e46ea79ddb890e57dfc0b72447435a0cde4 svn.742\nca2563f0948d975f5b1905100b5d853e5d44b2ba svn.743\n7a352042fc1a10a097cb7a2406e6337213e2bb1f svn.744\nacf00df9da1b699463721e95a6ce449c9420d266 svn.745\nab60b663d4b838a17d73b46a2d8f3f58aedbec17 svn.746\n3e1b7d99750c6732f3b0b3349487679e206b6a12 svn.747\n1cdb0db6dfffc8de2f08858615a8c9db84c429f5 svn.748\n114ed0496822d6713844990c1fa0030b4ceaa734 svn.749\n4785346ee07bf0cf0a28cec54ca6d56b069b8e1b svn.750\n3fb9fd9dfacaa96e611471d0465180e86c93d587 svn.755\n8911de20cb36135b8173f194342629b0e20fc99a svn.760\n3e9c30effffd030454888dbeb37ffed18fa410e2 svn.761\nb7874d767b599c0998642505d54d718f8e629529 svn.762\n24ac76d6c09dace1cf845140fba7d58edf6686e4 svn.763\nee89fb0b5f8ad57a3dab42278fdc2d83ace655f9 svn.764\nae624085a28f171e3e754ff87d0f8b7ccc83fd57 svn.765\n2b9ab5130c20b62a94ee458fb63ea230574c715b svn.766\nf22cfee3a4d1d75b19a5f6318c6130d066283ead svn.769\nae974afccc9f8dcc4fb586c2376a07e56b9f36ac svn.772\n8fdf2bee5c8583cdcd0a80decfe64c4d5c25d16f svn.773\n0c8f9283908435833e277e881df01dcbe89ed153 svn.775\n8fc69beb0beb4678d88184bb91d786778b1edd3c svn.776\nbfcc012f7b3ba78947614ec4a61263e9926ef589 svn.777\n4246997f8d29863a5de82fef30c99988f4f05147 svn.789\n3c6bc7bc590367f1a19f165305e07c6581a8d0ca svn.790\naad388c0323f5640a62807d600e3a3ade90b6583 svn.792\n2c0fb47e7fef6c0edf901b1ae63d728fbe334c25 svn.793\n1dbc641cfccfc16ebbfca87b0d65f6509a054106 svn.794\ndc95fc618f30e91543d39b2c3670bc1219b4b9d3 svn.797\ne68b5072160683006031a36342bb6a85f290752b svn.799\nd3157c4e1b0134335edde0f240b096c458029c5d svn.800\n61b64d2b09213def87ddcf679804345284a5090a svn.801\n144c8aabc7bc079225f6668ee3c2898d962c21bc svn.802\nd3e0de1af8aecc354eb4b25190fafd63082fe3ae svn.803\n2a86280cbabfdd241b3136c1fd8cf3e8d53bd329 svn.804\n0793c6c8ba31198e0e8838fc376e43c8b6dd2a51 svn.805\n4c3c5df432e90998453d6ce7aac239d866ced765 svn.806\n6a7fd0c30ed9a150a388f7a4c8737bc3145eac0b svn.807\nc734f7c92ff583e53385182aeb1ce5b8fecb0b7a svn.808\n9bf4cf34235a63981bd526954aafc683960c5dce svn.809\n94c320bfaf6b0e1baeb1ec80ad42d7106a399125 svn.810\n3507d2fb19a0e8c12f5b2ed25c48a141c9a3cff4 svn.811\n73bfbbb61182bdfdfaea2e971c0429063dd9d53c svn.817\n54f55e497831c504844697e83012fe7dc9166fa9 svn.818\n735b075c48bc383a0dedad13c316e74e179c69bc svn.819\n3274caed50b905985ba5998975648bcc0b2e8e29 svn.828\n6ad642933202bfda5c16c781c7fcd40d9a7eb6ab svn.831\n62a97969557c9729dbfc093a710f68bbe063b353 svn.835\na0aae1550b64cd17d9e3e383a166e1f84c3b6c8f svn.836\n1871ecbbae220e558fc7543ba7b8e2d3753b169c svn.837\ndf101fb68db27e3919b1f22ef2a5bb24aaf6073d svn.838\n76409591dc809680fa2f2c774a1ee06490a4325e svn.839\n1dbce0fdfaec2327650acbf0f8988e526c81d3c6 svn.840\nfacc821d6b94020d3ff60433e1d299169f8bef0a svn.843\n56a6850dd99b3665057719770d9f5df3bcae6c96 svn.849\nbf80662a6bb99130f6f188d64035d1f1993a2f5d svn.851\nba8bbff50a6bb146a4350efb1a0fa69bb5e28f1a svn.852\nffe38e9387759b9f9a01168d34d551766a29062e svn.854\n6d9b064c1ad13a99ce0f306279447171735e6f39 svn.855\n9b37f710c5a0d3dcf5240064228439901a74b0b4 svn.861\n92dd41c60ac6c69ab5d8476c0c8ac1ad194634a3 svn.862\n6affb0772ae8f43483332f0c69dc8a8dd270ac81 svn.866\n3dfafd2ad9fb0136d1bd027edd08ffccb9633685 svn.871\n77fde429659965247140311c484bec3b0593be36 svn.872\n205dfcd415f14721fab7fb4785483f0bca686c6e svn.873\n1124f1617f3014db980ef26237eff10369de3b3a svn.874\nec9f19e2471be906be7ab593b0d03498f9afd10f svn.875\n3db686694019620af84739a4c5fc5e110252a307 svn.876\n039103520804b7fdd652cd6ba73566bd8dd079ea svn.877\n783c965b506aba09de1fd5a1cc55d6cc448524b6 svn.878\n82c64d5ae490b0cbd524ecb084cc72e37c2fa1da svn.890\nf5ad946f9dba4022d46b8aea2ab3b0f49876d76f svn.903\n3d8774e0466bb4905b0e6027e4ede14a95b80f8a svn.914\n2c67c24090321742d50b902cb0ccce9564c57e60 svn.915\n69f93acda55eb7178d7bd4947893524cb146b345 svn.916\n6bc95028035262315330c97b58f37ab113afb61e svn.917\n8f0f6dc261b1bd0a166916668dc0d62969a032d6 svn.929\ndd9cb3869a0488e296c054eca2d782cdd8779d31 svn.930\n52e8ca0e6bbe733536f7af2442838ff0327f70e4 svn.931\n8e553c16215863497c133869a7beb6ad7b550c5d svn.932\n8abc25bb64debfb1bffa0c87778bc1391bbf12f3 svn.933\n8848be896409ea1043b0c9d061440992ca70147b svn.934\n777944e4324f0ec4638ae8c3ea760d7751e7ca8b svn.935\nc02d47dc3fc89eceee4494d26698f2a7cffb4a84 svn.936\n2292ae6f3ae8df91128c63f8c0cb2585b9655c80 svn.937\n9a5caef7c806e3bacc0615686646d0ddb3722bab svn.938\n1290681a25b147226d70aacaaebec1a2b57aba66 svn.939\na4c05ab556fd9f986987d6e5ecffe51d9696d89e svn.940\n24b220f2eaaaf1caf20aa53cd6eca42070149551 svn.955\n2f09bd4ab02eeed0769336a478948b7502ecc60c svn.956\n33548c7d70dc811e4e87409bc1a8c7654621805f svn.957\n7ebf23860ad3d5eceae4424c8898ddd975502bdf svn.958\n35eca1d107861af9444a14a6d7c61b66b3045e24 svn.959\n61eef2c625395d2627d7478993ea871e52508355 svn.960\n8dce12e3def50ccc60d6a45d6d6fd6288389e79d svn.961\n8d3ff718975e89fad8b3691af267d47eb53bbf22 svn.962\n46845a73cb68de9e1d67ef8d4ec5c91a83508335 svn.963\nb9b71af4b05b27bf8cbe48c1de7099cf91284557 svn.964\n6600a0b443b61cd01981767ae663050df57de2b7 svn.965\nd6866ad984f0cb8db296ce4e84bb5b469923e50f svn.966\n4c1e67f77690abae2f549749385acfee179b54d1 svn.967\n21ee11fd993258dc8a56517d90b434f4b30a7158 svn.968\n9950b9ba65b6296f1b7dfb01386edee75959ef2e svn.969\n4ab83917f06f9b68f8c9492b8949a4e3e4afe3dd svn.970\n2f03b2b77ab76b2823acfdec92b5333fbb9f36b2 svn.971\n3bd99623745d6ff3cfa6ddaa441a36eab087cfe7 svn.972\n4dc7218a9629a5fa83950cef288b29e67bba7350 svn.973\n1394cd52e02c151efcae7b4766ec7cd4a89933cc svn.974\n916c768ee31d2fe32b74f3a81574c24263573b31 svn.975\na5ceb959f3e847fbad913b789917b7b6000fa7f5 svn.976\n9a2bf132d6b041a0722a067b61123cc402c65c10 svn.977\n03d2695df50c0997a098aed8640195e0dcb071df svn.978\n40c2e57006036fba846a959b954f4a8afbc1c7ac svn.979\n17502cdd1b9756ecf40365261128725d0e4ef12e svn.980\n57c07c53b979ac1bbd8f7e2796811831b1d80eef svn.982\nc79b22b25ac82bc9ed61ee1fca0a148f6b0c04b9 svn.983\n02dfa6dd49306e2b73d454460a1339f9315bd685 svn.984\n37aaa313e17e52d2b6d9806ab5bef1efea901cad svn.985\ncbc34ca15b3b4fb4697ec560762071f26a331645 svn.986\n2f554ee6ae0e290fa5fc3e2ba7603dbfd2075e37 svn.987\na3495b3783f132e2048ca9947fc1f577b1ca5790 svn.988\n0c61204b28e1e6836eddbd6849fcfa8a0fed06c1 svn.989\n9e3961dea7f50a4bbd1884c735f4fb02f14b7fae svn.990\n1453b54880f92147628fad494fe33feac8a3c68f svn.991\n54c5b94ffe6a9ab55bbdad646be3938efdf1be2d svn.992\n8b842c32e42c82e217e10ad40686c7164c2a1012 svn.993\n5d967e01298d006d88b67b251f2ff7d74a6f287a svn.994\nb3dae1a722625726386a1572102743052997e98c svn.995\n9096c77e13fe87d7366a75114e1d282294aaf19f svn.996\n8cebe1498ef52866c109469cb6b8ad6a737f33cc svn.997\n8d126dd081d198e4ce8adbd37b15ced8d886024c svn.998\n6df88bb0e07a81d99a6804d61deec5a4cdef9883 svn.999\n462a81bdcbfda3884e1d4c777a1e081fe4d38205 svn.1000\nae980242c44a1bec0cb1aa5d7cc9587c22ad4c5a svn.1001\n83beb85b801eb9cbbf215c4464c0d82dda688da6 svn.1004\nb84dc022bb4ea1f1ddaf7cec69eaed4f8e60c86d svn.1005\n5ce74d7a494f4a689b24b17cec8eecb823989331 svn.1006\naba6dabaeb5047e47329a236373d5e32abcf8648 svn.1007\n77280efff82f64baa42f295905b7a8ec04cb8c27 svn.1008\nce5a40aae9be11c2c98ad6c8670ce42b701e3dc7 svn.1009\nd1483b5bec517d011afb7297772ec77cdc7c4292 svn.1010\ncdfe4487f4af5e7891d9e595fef0e12570db64cd svn.1011\n477cd2c4ccdcdd301d472483c93deb97b7395a7e svn.1012\n7e9912da4d76eee7839765f2ad2442ab24cf77a1 svn.1013\n3fb37cd13a810403aed6eacf3326d67d1d1a0b22 svn.1014\n6f125da5a97492419cdc7fe17eb364667fd580b1 svn.1015\nd1bb11f095bca369882150474db05f6557e32e0a svn.1017\nf823a75f7e0bb6390f8fbe6f3626dbcf94555ca2 svn.1018\ndaa97ee466fe45b0d73ba8fe505b833cb3ea39dc svn.1019\n27e9db0b857b49ef9a456459954a9269dba1dbff svn.1020\n774031172c9f1b4d7fa07262fa5973a5d763b0c5 svn.1021\nf9238493dad09e18afca2e16f2a00c676277e518 svn.1022\n920c9ca32806690ef2750be17d3cc9c2cc1a6866 svn.1023\nf59bb000f4eaab65379ce15c5bba8b750bfe2a84 svn.1024\n9b09f58f61eda0d76d3f99b7fbef91179acf953b svn.1025\ne1522f3884500333152c61f90d400da729581e3f svn.1026\n1ee2af26fa1f9d4f48e2a2947fc80cb1c6b54069 svn.1027\n90755707c98665cd65e75618f8a37df079d5bd30 svn.1028\nc176da0a647c819a5409bed6911a5cf858039152 svn.1029\nfe8cca2496230c8b04079fb64aa5f469d192c5f6 svn.1030\nce5f1733cf3da50fffea24522be6b044108391af svn.1031\n9e98bdc5a4c1a36683813abec67864be5fd0c3d5 svn.1032\n2404d4e8e50b9ed5828b1a9c7c2d6489f7248770 svn.1033\nf0303c98ae4794714e44718b98f1f01311f0cbdc svn.1034\n6cb043874a364ecc9cdb4010edc5ffdf0e487131 svn.1035\n06ce3d635fe8e5e294e550ab12baa2ae863e3952 svn.1036\n773e27ec924de86d56829c0128a6db201dd7a462 svn.1037\nfef462d5c4b3de53fa9854b23735a34f5df6b546 svn.1038\n25c8fac6804c62f8fea65fe6f36749f3fe145b4e svn.1039\n28fd8ee2e8f67938e5adbc674bebcff75d38fa64 svn.1040\nef00bdf846d9dbe49a2349460aa26bc2f48395d6 svn.1041\nb84d9c53f2100402c1f4fea4cbb95bb096db2858 svn.1042\n686ed71a5de52e69025d748eb57ae384a1e97a4a svn.1043\nc4c739cd641f51f18a170f25a1c824b2cf1d68b1 svn.1044\nb0f62e852e5f1e4f0b7394e73078408f63503cb2 svn.1045\n4280a4fda8391e55bfc4b0679909c3522c6a82f0 svn.1046\n7cccd418b10d43694972fcfaf44ff4ebb664de45 svn.1047\n431d45675d9e87989bb82ff230b6a3ce375779a9 svn.1048\n07219f0a740c755f531771b03c2cc68f39f28e29 svn.1049\n3b5c29c52f0d8ee48b2fe0b447380edd16bf970c svn.1050\n023ede42e8d78167a81727fdb9b548f2dbc613a2 svn.1051\nb53b687e8d1b5ba65873f6b40ec9b94532096669 svn.1052\n5da11181a3bd5b2377a28ba1ed980397dc6f7610 svn.1053\nf48797cf46e1dda92093e47b23ea673770ea3394 svn.1054\na83d67886261b80390835b5d07e91f55a0a3aa93 svn.1055\n81f1d19141de33d38972338c419812e02310a68f svn.1056\nbd0acabdce740446922d9f329eed60747d537ce3 svn.1057\n5fed1e7092111d01794fbb118b86c601da808a28 svn.1058\n07885f7be63d756d9f7dc10c3e78d7b7343d3945 svn.1059\n08d4828420ed94b8d271233f395f175022efd4ed svn.1060\n5faf3e7c85a80c7be744c419dad56e8abe23fadd svn.1061\ne8a5384c5fbd8ed19c8a51336bde6e62f338b209 svn.1062\n98fffbdf4d1c0b0eb595c34dd258e36dc386982c svn.1063\nc748a9aa89dca2c55fa71b16e251d9fad5cdb623 svn.1064\n4474b3dcd7228803e2464c366fdbccf5897d2778 svn.1065\n624ea19dc91c77e5b39508c214dd5a323801cb4f svn.1066\n8097f8289e5d84f362baf09b276a9f55cd92adee svn.1067\n5aec96aa9f03a10856556b13483052d4869bec80 svn.1068\nc96d6f89750df53a406a4954ad812d98bf8abf99 svn.1069\nb94df6c91634dc2f93badf01b01c302bc8f9af2d svn.1070\n092fd45e46bfb59f5ab0e36b5655559c3b91e9ca svn.1071\neccd3b05a196df3501d2801a80ddbe18c3e18984 svn.1072\n9aec913700b433f10a3f1661ce7aca359e4d3f1f svn.1073\n075baae3673392ffb99b85b19d5c6946ef91dd43 svn.1074\nb29e3dac4e4166ec9496caa8f34762e213688df2 svn.1075\n6cf112b485a5e84bef8f7d2aedf6750ca64a0ae5 svn.1076\na25fb16b1111e62cec7787bc219097629ac849f4 svn.1077\n74e51069af5635fc1745c8472502752eb151dbce svn.1078\n583f5e9b4b1e57d742d94bd139bd66753b24621f svn.1079\na0f069d5d8d3f0779d4b8e078f385f759a5ea9e4 svn.1080\nc1fff44541f09581a9b57e061e038d39df223ed9 svn.1081\n02012362af28185211b8d63fe2848a3d1f7d00c4 svn.1082\n0482739acc9c9f4b7789effcaf944b8014f52afb svn.1083\n8bf990f0512de5805cf8a298a022d0d04776c5ea svn.1084\naa8d4a58de83a3117481a9e6b2aa77bb907ce2ec svn.1085\nd0085f6d66a91bf4a2ab07fc5be98155201e787d svn.1086\n8bbf152750333eb20bffe777b0742ee431b1d5aa svn.1087\nbba0ffc44f28ed0fe53bcaf8b9627bdbd8579604 svn.1088\n591dc56227958031b9dc5cd2ca3aacce450afeb6 svn.1089\n5cc2fc2ea440bbc0bd53b05d66a17ec58223350c svn.1090\nd1d845a53d014d05ca26ca18a380852c1202628f svn.1091\nad17794216d236891845a67289d24359af81e2e4 svn.1092\nb1d3794d8f00a583dd4a6f399b6a3beac465d7ae svn.1093\nef00a1def8312986645a1dfd94bf865fe9210cf9 svn.1094\n1126d71c5b93ca0ce2bb7159eb2958e51b133d02 svn.1095\n5319a4bd69c72d6fc6855aa4e3a12938499edf1e svn.1096\nc7bf1d043dc12c9c73e46c5c548c98382e370a8a svn.1097\n62972d9b326d129aa956d6f228572586063bc6be svn.1098\n3cbbf611288a56f10ac3eb7621f865c8d1eb3aec svn.1099\n45f024aa3dfcabe53af566a33beffa30767c5747 svn.1100\n30f1bcddafbd0fe2eb44838340edad008abeeed3 svn.1101\nc7b11efe31647d566ab5d88afc39a271b9d89d25 svn.1102\nae4ec2bdca6fdfa79ddabaed0a5f64220c9982ce svn.1103\n1d284377d0493a6f7d243c0aa6e4b1af0b5aa22a svn.1104\nc7218fcd25035f028a4e29d51afb6918c8be8a9a svn.1105\na47908792a50d390ad30a9bffa8444f18bd88679 svn.1106\ne0d8233422d098418272eb2af776c801befc6722 svn.1107\n89aee415294193e688430a51e76bbd249707ce45 svn.1108\n5ceaf3e5105965b52261d5b0e0e77621cb998e59 svn.1109\n40bc6fcf59e6f34de9b7d2395880817064126676 svn.1110\n9b01e5c3d1f441bf2927c76e19da883e04308e1e svn.1111\n67f074beae556b0fc42531e27333c8c38e8d8ae1 svn.1112\n6d9ef0dca81dce02ad781d7b34b522ead407a883 svn.1113\nbef93b57ee19e91a0a5782fdf8f089e3b8be0ae8 svn.1114\nc62ce45151bfb9d9f92eb6e803b2ec53a63ea7a4 svn.1115\n51f403e8508ea24554bc5c3f6743cc26731506c0 svn.1116\ndb6f845d0be5d8f0dd57b77708a4e3724fff32f5 svn.1117\n32e07382249da67923aa71eae6f8b3d80130f74f svn.1118\n8302a1267d46b4c209d5c1b8dd70a744421210d5 svn.1119\n03e4903f1685410c9948fc18ee6ae2b7e5151eb1 svn.1120\ndefa6b499436821277a9ed7725be7f2cb4720d1f svn.1121\n6c41b3055b243e797ec437471f9279d8f59978d4 svn.1122\nf2865c102c74d95df01daeb70f1894e144f94211 svn.1123\n760131f65bd0220a5003a2ac55bd5859c69b503b svn.1124\n1a43efc0cb52ea1352288ba6117cb9e10b2b4d2d svn.1125\n0d48887772594609d1274a3aa828e576bc454ab7 svn.1126\n84afabb7142c6a452de4688aa19949de6881a6a9 svn.1127\nec5516d81c21c459b767964816c65a05e4ea5d60 svn.1128\na6ef46d337f6d7ce11e5acfa3aa7e1a6a56be9c5 svn.1129\nc381a0a44495d5966692366be8f23fe715d74972 svn.1130\nfb620497fc84a03440558427b5451acc1f1676f7 svn.1131\n0c4fbade1c51e1c5100d3da1c22df02444875774 svn.1132\nc3014403a3f6e1b4bc29ab364446fa0f672af504 svn.1133\n9d62de3c301f9a0b6c4e84d7567322db11ebecfa svn.1134\n27f39a35661bbfbded561bf578894b2599f350e9 svn.1135\n8a2b5a97aeab423c57055478d14cf0e5c471e6e5 svn.1136\n0b6b25d634cc3d2089eaf0261755479ac27f94ff svn.1137\n95eafc6c68ae2ee36d608c78258e58bdd2881a82 svn.1138\n73269e2e0551500b31ac55c01b05e5de2d7be029 svn.1139\n9663e58acbe57c4679615e3d3ee9ea608fee0ba3 svn.1140\n1ad77d43a2a93af74878ee1cd8de7f3d850555b5 svn.1141\n78379190a5930b3f3a57221f18337f9065009ed5 svn.1142\ncbfab1f20782d311b5aa129c31786f9176329e18 svn.1143\n44a1b60f2a3aa8a0b60c15b71a46cb1a5baeaf84 svn.1144\nb5c3fc483b7cca3ff3752263d7e74513bfdc8e3f svn.1145\n3334596bff5a2dd3a246201af86e7f751362fd7f svn.1146\naf1d47ebd211773ca9b2c9abde7986e11170f592 svn.1147\nc3e47bdac3e2484f4f5d436413559b5a8f8d0329 svn.1148\n68e098f97d7d14fbda97dbb4fb7b98f0618ff3f2 svn.1149\nee07ca27339bcf81c239d67eab16a410ff3e011b svn.1150\nab0aa6076213c9aedf05dfba099b4ec670d9c3bc svn.1151\nc5a190e85a567251b3e8915b517213de5990cb2e svn.1152\nc96d4dc2b2e65047a1323fe5c64c435325fd3d19 svn.1153\nfe1db038070dc6bd357e8967fe41b74fed211c5b svn.1154\n0b413ee408c1ef7cb8810916ee351ac735d72b38 svn.1155\n1a16ffbecd4849e24daefc98866370bf0a8c368e svn.1156\n31f777b459faaa80bd6d9c3c09728752c3b27f1a svn.1157\n8e65c212e583e4a3b4f1338234563113fcf8112c svn.1158\n36d3b1858641fe980ae04ce0e0b732552ac9c6ce svn.1159\n4f433d6fa3c6500e60381137603543c5f4f9979f svn.1160\n4d04e716152fc872d49093ff6e5530a81c81cb8a svn.1161\nb833cd5209372ce1ef620c9e8bc5739b09a7d5d6 svn.1162\nd11cf9011f92c6598fa2190c3f066e17c3a8e58e svn.1163\na7d366e0af5d5eb27cf0854f6378b44d28c59efd svn.1164\nd869fddef605999f1cad2e9988713ee18e0e5dc3 svn.1165\n5b00d62636683b2802bd1e27d823311ee1af7877 svn.1166\n8219ba435c4622c8c6cdfe402b32f999bad2d53a svn.1167\nd38c5ce0c5acd7ab009e8ac1ea573cc19fdb081c svn.1168\n704ce717b737b11f3fb8cd622375b84fc48f4dc0 svn.1169\n6bc2ec7b5db94764c292b626195943be95bc7738 svn.1170\n887b1866ac063c9edf0cf4ad88e8111ef8e23cec svn.1171\n35a958fe60fb582332526f465f545eae27a49047 svn.1172\n32cbf9300002ada94e9e910a0c098789d924986d svn.1173\n2006eef726e67fc0542de1f800d83c89c56329f7 svn.1174\na8dcd4570aded55c7f68f0577e5f56359b227bd3 svn.1175\ndd61c4acec224c28e7a4d257b90ebfafd74f4bdd svn.1176\n8b2c53be58f05b14cfff992575db36c1d2c834d0 svn.1177\n8ae524e988c2b48a0efa6af3c9a6e54d06891f98 svn.1178\nf8d4694a511fea53362b2383c10f833813eec03c svn.1179\n7f5dc6341a09fcc85a32e18cdd5a028e81e2f4bb svn.1180\n612f2c4b9b68fb4294082b3ca5b199cbf6a4db4a svn.1181\na195a7c70f63d5fef5b7d2240599d62c9bf2b56a svn.1182\n930fdb09bcb8ef68dc0f3c8eabeac5ee371b63df svn.1183\n8a5ffaf999de848472e3cd34f2853c13cb263741 svn.1184\ne1213ceaab48f4988c1449856e711ef048e33760 svn.1185\nca7f2a0a827a2c3bad4dced3bd680041e766d4eb svn.1186\n9e4a2a6a7aab1541aa6aa0d2a3979ac9285de3a6 svn.1187\n1899aeddecc3c61d2303cc571b1d0c09d7f84dfd svn.1188\n224df41ce165da6c11b1443d367a8a5a7980de3f svn.1189\nce9281d95457999a1ab65f220191be32edecf9c4 svn.1190\n68d953a3eff9d3aa45ab44a7118fdbf36686cbda svn.1191\n8d6e93a96368e91ee151b748247edfa01471c6c5 svn.1192\na1ac04065f9f541148bff02246dc19f5fe7ea65d svn.1193\n3fd2df08e7301ca8a72f9545dfdf9af4b0e69c33 svn.1194\nccc088b525d77286709cf6b249e0b281ee847e5b svn.1195\n01ae3f979a3577c2989f560cfa8bf8c9d57bf44f svn.1196\n2a213cb9cb5101b56f801f58be20ac56902ee058 svn.1197\nde95180755f9ec6a8f4b6b23cc017bab7cc04cd4 svn.1198\n9b9bc655ea36a8f0b8966117cb30391c88ab865f svn.1199\nbb4d55dee2985684e539de798ae45903010ccd16 svn.1200\ne4041c6e05b24a9d269eb14797b8e27a9fed0070 svn.1201\n406ffb75c1938fa6d5bd598017db98632395a5a5 svn.1202\n95ba0da820d290b6e31f7b8b0d1e9570b872ac20 svn.1203\nbb5a78ee524a2ea0d5d6ae686046ececea783485 svn.1204\n50dc983d1961d016c46556297cd4d455250a9b2c svn.1205\n4e90b8a2debb4e88453a18abf5d5f0adb502b5f4 svn.1206\n4e0dec04b8baeb3c22f4149ca3f208d9ca77b8cb svn.1207\n2d4d8cf0d39d551630eee980e25c8b1075c08ecf svn.1208\n298d3a1ba21993bffcd818039bfbcd9ccd9f01b8 svn.1209\nbbff8fee0b4adffcd9039b1ee1acb5a523bce1d8 svn.1210\n047eca9aae879fc7097c955584c55e0b8940f974 svn.1211\nc60e120bb3eb883ff144ee76e1516c63ababca00 svn.1212\n696beff137b721e00093d36040f392e930edc064 svn.1213\n05c4f7486f88e921eb2fa0637068a181b3115703 svn.1214\ndbbb5b98b9de9dc56affee163c2ae43a4020be61 svn.1215\nfa67975eb5c4a4b9e4501cc0b01d4356e01f794c svn.1216\n45588fa2d6fefa606b5fb8a0801f8ac9028b8ff3 svn.1217\nbb2c33e4a5ffeba99e9975b03c941e88954a5241 svn.1218\n08398b347e34194a75bb508a69a1c900e245c14a svn.1219\n6b0a5c32ca6b6daaea6df64ad5ced4664e2d9dc9 svn.1220\ne8ccc92a1baefe02d3f00ec69f9c735956d0f52f svn.1221\n96f48766f77ad4b6ec18a40bf97ca6eac9dfe898 svn.1222\n9b1c1f02d17f21ac7a53c1bf7ba841603bde0da8 svn.1223\n7f680281d01a22eb521f32d15eefa0fcfea3ab94 svn.1224\na57ff19a72687e3f1d6dd252efe836eade0b3722 svn.1225\n2e8f31a521241bd17e1094215fa57ee2740716f2 svn.1226\nf58feadfcc75ade32a161b783cfb2266e0a59135 svn.1227\n6553416e95e22dc13d4968158765420f9b5da93c svn.1228\n9ab6c07fd70a9ee5be1f9764e6d1ae0cfa84a7b9 svn.1229\ne093e38a7fa3cde293bd2a3ec0fff025bd02db0c svn.1230\n3dcd663f18516b634bc145faa1e9941178b2632e svn.1231\nfbe4fe82cf4b8a7bae77eb36f96a5bd4695c6784 svn.1232\nd9025f90da41e475e323c0bc4fa045e58a20a0e3 svn.1233\n65f37c1f0398d556f3635c45ec88a390d70aea18 svn.1234\n8fc9d02f9a587b40d0b2ddb1d7859cbd0eb31c6f svn.1235\nd9c4bd7c6b746d36079e841d86a04259b377decb svn.1236\n5b71f366f9f7fb9633efc11dd728f258c9ceb8b2 svn.1237\n1ad0548091fa8ed58077514bb6338087c6665e89 svn.1238\ncebcd6edd53632a54ea74fd881fa463bb9e52bde svn.1239\nd87a3ff293b87583f050ce92e90fa6fa47e347c6 svn.1241\ne0fa0adbb0cb4429128245fe927b91720775b55c svn.1244\nfd90fa39d52a2747d4898ffcdc2138492fd8bbfe svn.1245\n5022202546b1aa1787d9258abecd2ed3149afd6f svn.1246\n5bc228840ff39a759570f62a0b97938ce3548fb5 svn.1247\n3f39dc17ba681d6bf08b938fc503ee0a52ce926f svn.1248\nbd02479da4a0741b0de283300dfc2b12ba2fcfd9 svn.1249\n748fa679d5b8be9dae41d7bb447cc2d32fbe17e0 svn.1250\n27259c5ce8be158507e8ba011307873825402f0c svn.1251\n4bba348854a8cf69a2b12c8868ffb56e9717acb7 svn.1252\nc337c4734d83008c660c8f2f366f86d364775519 svn.1253\n07d858e233b85061059e1a0bc7ebeb84896df3c9 svn.1254\n261756068883c67549e3b81d96da604dd323c67c svn.1255\na35f428997a335ce5a615257d6c64c5a620ea279 svn.1256\nd74957bda72f3a728088d96bb9f2bad0b0b47a1b svn.1257\n65449505565b2c2a0bdd0ff0dad071afa9f465aa svn.1258\n8b023cc5a2d48af3cf96d75f826d683b442b5456 svn.1259\n33d7db6d6ff58f7172600e9f54586f1f9177af1f svn.1260\n9493cf79c983a8975a40e57796f6ac4ce9aa5c43 svn.1261\nfd3abd056994c8e5aa73f18cef52e89a86b881ac svn.1262\n1adf7e6b421e9b2a8ed42e65eb9bd54e8d0d142f svn.1263\ne9eb446d1f3fd50fbc6f98f14c378f007687c7ef svn.1264\n42ca66eac622f945649dec13b02652775ba3a041 svn.1265\n2055e6e2532428e2872eebecf14d70d580b547ae svn.1266\n1304b49dba2e0871a1f4742a49b87ac71387ff30 svn.1267\n9c9351f3515b58ea1621e55a0a4804b29c5207fa svn.1268\nd73347a02f12a47dab810bdba98b42605732d30a svn.1269\n922c3a85b2b463f5e42f91187742851193143689 svn.1270\nbbf12dc76e18bd038df3e9d9d8a57463a02307c5 svn.1271\nc48db7f28d94ff0884edf83f11a0092402f5330a svn.1272\nf1febf8e9028348fe3b46c91b56b0c9c36479998 svn.1273\n3b49ceaa0b22f4b22842b6bd4d48ecb53e0440a3 svn.1274\n2eb6748bf1e1f9d07db988fc346d06692f485ed0 svn.1275\n459e15bd53b2767ef20b22075cf6d9c8076b0f19 svn.1276\n36e5c1482adb4f5c247df6ab58f1778e0f61b526 svn.1277\n3fdd458cfa2904af668c928eb1b20a75457a32c5 svn.1278\n4a71460a4d8d431345b1c8cce2276c047c7c4340 svn.1279\n18ba207f37e98d166b4029661773e8bba201ef8c svn.1280\n7c404bc4de65372f68dd641525c955810d60bda3 svn.1281\nd04dd209c4fe22879ca4808baaf0a67da0555369 svn.1282\n83f94b4686cb403315fcb126f0fe71b6cb6e7ad0 svn.1283\n5df477126211a2db907313c09ddba37b103134a4 svn.1284\nfde9722e4086fa086f7b15659dc0717d73c054da svn.1285\nad2dc7a36895ef57ae03483031cf8cc2d5ff36f4 svn.1286\ne3733156c788aa1d1aa978e02a17ef1e9ea8e379 svn.1287\n2134ebc51d80533e55ae428a7c435ae64d94063f svn.1288\n6ee7f2af56dd80ad8738a2e846667d2bbbe10da9 svn.1289\n4461e19600c3c17228b9e7ea4d71e0b9ffb29cca svn.1290\n3c03d242dcbb0bdb6bc8dc114ffb032b829d0229 svn.1291\n55ab5f16f0ae76e7298dcfdf369e09f5e7154abb svn.1292\nb17678b93dce337bc0c505e7383f40bb3f1af914 svn.1293\n2c730f49815261c5ead3553652587118dfbd8b8a svn.1294\n904d31c654cd262f2e7cf6b983ff814a3c49f364 svn.1295\n95a55ba8007e988426b609a047ccd990116040bd svn.1296\n1b89b851c4aa3f3a7f90bc454f1718b3d240b6ba svn.1297\n35e72021c70d7b44c41eac5a9e9ee5ff4ac44b9c svn.1298\nc0708141aec2237b05d10c1a4ec05e90a10f50ac svn.1299\n914c99061ddedba67422de11b291e41193b2908b svn.1300\ne390a868bde61a0c6ca5aef2b2125c1cfb24bf4e svn.1301\n64a81b24a2c9a9bb9aa42c5e58ea28e53183dd4f svn.1302\nb027f9722b098b7331d9c0a790833dd3e6f98650 svn.1303\n2e6f9968b197f3592b89652f439c19703e23fb46 svn.1304\n583cb5c4884fbce3a75a90484d374d58543b7cfd svn.1305\n5084d297050e43ca7f63dbfcea6b07d887e021c9 svn.1306\na8109444da2004328888fd84f7f24146a57b2866 svn.1307\n46c1022dfb6233e281a4c8290eed77191f58a1e3 svn.1308\n8419c77cc12df3439b5e958195b0573cba34aed8 svn.1309\n43cc2d2a6edb190dc7dccf920a313cb837110732 svn.1310\n9df62e8f37aa3914838dd3978d24471d34f08de0 svn.1311\n7e2451b732b203054af846f21d6987b934e39eb0 svn.1312\nf54d931c305c165516d1858851132db1e65f8721 svn.1313\nbea2f6069176c97ad3c367cf23f79ed0a6356b33 svn.1314\n806b16b24df8eb0e0cb993021ce6b4f5a7cfb42a svn.1315\n3e58ac22abf6df193f2100180fb625fd280cffb8 svn.1316\ndac179a4deb10b7c564195a2dafea9e6cbfd00d1 svn.1317\ndc8038cfa77a7cded18dd640ae162aa5403996ee svn.1318\na86bb92b8294f23a0b3dd371729dc4c53dd8f73c svn.1319\nc5005f2900b87f42c0934181e5072f87ccf5a2b0 svn.1320\nba2b07616c7e224adefa8251942a9fefb3a8514f svn.1321\n8bdced420027c0019ed51fedf79a76a7030e2d90 svn.1322\n4eebb67d4795dfa728699a69b27dc841ec75062f svn.1323\nce3f70577a8c2ca5429b951e8dd9450fae25107e svn.1324\n503414f4685f0a1973989a5474da9e8869649bc7 svn.1325\n487ab99c1735d28b1e0cd481220a9a863128041f svn.1326\neda6d98825ff15eef6d30a4dbbaff84f61e6ac36 svn.1327\n263bad0fcff608601a03bf32e2e1c623b7f92d12 svn.1328\n62eb8d9bfe0924524a23c58f8cac1d6baeeef062 svn.1329\nceb1cf9f73733fd82a70951970ccc6d90c51aa52 svn.1330\n05af4afa4dae5dc23123b74fba0efc66b84dacee svn.1331\nbca7dc7dc97390d0a12e968e5dc9eade4acc8460 svn.1332\n0aa799161c2a2dbe71121dc332a7b08600d5e4c1 svn.1333\n90d9567d407c914d0671a27d018015b10ca85809 svn.1334\ndf75cf41d6aa512201a4d96b549c047526fc9204 svn.1335\nccf6882c471a4510f921dc3d82015189b8ba7571 svn.1336\na835abc7afdf5d24ed84828c865810a06fe158db svn.1337\n132786ab7ac199344db06b7c84092b9c1659ac87 svn.1338\n6b3f15895b23e7a4ea91421e0dd9c6b60808633a svn.1339\n06c033c109ee1064591292692d184f1a694ba634 svn.1340\nc366834e29e9613f866e7ff9f10d71684a4624d9 svn.1341\nd914ba117c6af8aaac5d3ab22268ed55fefe6122 svn.1342\nea5e0035fe18df64b2e95fa109208014ed42cf3f svn.1343\n2cd02d341cf7de398747ca1be45fe25cbef1889d svn.1344\n7da82f984ff713b4f9a6b34373c8b406239f19ad svn.1345\n9cf3acd825bc46145dcd20c9e8a5a43ba4661c00 svn.1346\nb0dc6fe81bae66a9895deda379ba5190d2eeb354 svn.1347\n068ba6104506fc5211968f155b523fd8a9ef760b svn.1348\n3bdbe69d55b3b0760708c419384bc320ded0158b svn.1349\n9698ae53448a6560ae66233691a39850727b7d0c svn.1350\nc7e46248d331180a37e19831ddd6f81dc3a522f9 svn.1351\n0b5eddcb2c0c16c342bb87dec14574033ed0f610 svn.1352\ndabf00f752c120b8f18a5f626fd291f5e352a686 svn.1353\nd836a471185eb6a7a618ea0b911899e79774cb08 svn.1354\ndf89b3d9ca8dc39d1c3a6829fb04a9a7c1449b39 svn.1355\n7ad714170e67a19e7caf6722dd4667d30ded6305 svn.1356\nef7046ae1271240cf0db54f3d810c95cf851bcfe svn.1357\nf3605a404d03223d6a78be2e386fc003eb960c9d svn.1358\nf3605a404d03223d6a78be2e386fc003eb960c9d svn.1359\nf3605a404d03223d6a78be2e386fc003eb960c9d svn.1360\nacc63852899ff2c1402292c567d90372e6439900 svn.1361\n280911492651ae31a56884ec048c1d8b82c8145d svn.1362\n39170cf479e4679a001fa2b3f6831b005109c8fe svn.1363\nfc78eade80ed470b52a8d202ddbc5f42c1216245 svn.1364\ncf52cc44a38eac4fe749c193d970c7dcbb408702 svn.1365\n054916d1ffb9e6aade11e20f77c2012a396adebb svn.1366\n0ad0a1018ab8d495b1ddf9308174ea9a2c6ae082 svn.1367\n2fa1bd72fde73b7468eb668df713e34d37ef0458 svn.1368\n9993af06baaab533bb520bb6d9cacb40478bd00c svn.1369\n7ace30aace64489738bba78ace4525e5b5aa4faf svn.1370\n00b836e0dcab8deb77f651ac4a2af4806c2aaa32 svn.1371\n1179eb5315a25f885d7220a516cacdc2795555a6 svn.1372\ne4719c1d483f4aafc6b5c77d0bada3a79f34395b svn.1373\nde5a85e0d4032fa1470dbde157bd0e398c127190 svn.1374\nd618d834861ce10652cb8426b9afd048eacece5f svn.1375\n1db15db91429b53aea04f08a5ce89f8be0c30cab svn.1376\ne415f0b151477d85e5cade509854d91149026afc svn.1377\n8125e52dd472fdb8b7ad6097e3f2e3fcfceb0dd3 svn.1378\n5e069ae16d22ea92b9396a6931164d2edd63b88c svn.1379\n6765877d3c1944cbd29c22ede89ccd18de34988b svn.1380\nf17b07e76d9e257aef68cc841f1e3020c46ef57c svn.1381\n01d0deba3a0f4b0a43ea0530efea6d0ee3412313 svn.1382\nb32486797c5a1d0f5491af228cdb52b37f3e4f62 svn.1383\n05612c3ae7ace59bc4264066f7eb14ee6b0db7e9 svn.1384\n77360b1dfa9c9e372432f404e425dbe53dba593b svn.1385\n08db3de100976a6db7ecf0b4da0f27ccd30beefc svn.1386\n2a346121edd114c12403c2851d27868d67ad86aa svn.1387\n598ef7e8802fa6241271b1e8ef70392153dd6065 svn.1388\nd6083809681d5b54b7249bd3ee38e176e2cb0729 svn.1389\n6eecdc63fe52f6d06a06ab5158748ef037c4282f svn.1390\n57a0bf140c4d6e6bddcf5a8f34e9003bf3706921 svn.1391\n7d593ee0aa7f579f3e971071579a60111cfe1b11 svn.1392\ne9670dc505339eb361e875501a8b0c8a895412eb svn.1393\nbfe79a878c24f354db08179eb15a4a385d1d3c02 svn.1394\n189dcd1b7d4f3e7c0ddfc927bf3ea9dc50775ea5 svn.1395\nfee4d30e5fc028e26fff46fdfa9a81d09edee565 svn.1396\nfba79930f99443299c450f640ace73920162973e svn.1397\ndb3a95a67470089581617333d9933cde5603aeb5 svn.1398\nf472f9482f6a4dfbb4c77a3163c8d637b477ad24 svn.1399\n90dd58d8ee98914547369295786bd2791b4e1cfb svn.1400\n05ed9e30858aea4ab426df9e4a21a111cce9ce2c svn.1401\n21a0fcf134dd8aa26bb72a507b8d1bbeb4fe7bf4 svn.1402\nc1539d512de5d5906b4a40f84308c87ab352976b svn.1403\n3eeaf8d52e121b299aa25d5df1d91b834440154e svn.1404\nc27a1e63241d606586700e190b1e06db0855d1df svn.1405\n143471ba8f4f70fc2a06399a8401ffc1aac72cee svn.1406\nbb2789fcc682b59c8ffaa391c5d74c4a175309ae svn.1407\n9d19037af9b99c3419eb51981dfc5ed4fbf843a4 svn.1408\n05b571ead689a126839ac8720ed4bb014a65ee16 svn.1409\nbbf99c838ba24a42aad05da3b77a3917d078d7a6 svn.1410\nab0c70c730b8078d476269c97d1c55a0a43250c7 svn.1411\n2d0ae7de57e565c18ef72ce60d132bb4355cac6c svn.1412\n7f8fdd664b05223c419afcb54e85f6e2626a2203 svn.1413\ne90d2f56a94459d480fccfb2f10433045a41e5db svn.1414\n028ad406113548ee7fd16e20a39a2b730ab280fc svn.1415\n7f1dd607ed24252b34e7c08b1d5adfb8bce830e3 svn.1416\n7f1dd607ed24252b34e7c08b1d5adfb8bce830e3 svn.1417\n489ce4f93eb9e282abe1b41ccca1ebbdf19071b6 svn.1418\n943ef21cc665ae5295102d2cde321a9e091670aa svn.1419\nacf5ff4371d057f279e8971536cfc6d7725dac11 svn.1420\n7e0e88055d714b0fe5a61e43827b7d5885932378 svn.1421\n147c9564fc4da2da1b39dcd911e56d84ccc5bfc2 svn.1422\nde03ea171dc7ae5f2bfd16ff6a94d42c31f11c4e svn.1423\ncb48a4b1f53971b95ff129aae9e7cd70341383b6 svn.1424\n27ede33c33ac5d919aee819be717a065c1f3c534 svn.1425\nc248624ab17c340eb388f957842642399461343e svn.1426\n74a783bbf4bb7720c40097f9a83d8b166ec006f7 svn.1427\nf87ae6706086fa6ef0f8c82fad29df79ae0c06fb svn.1428\n52bb812dc70bc13fdab1033ffc7b2438522f6740 svn.1429\n159ac1bd990c088d9e4a406e86d450d944f2c1ed svn.1430\n5d68decea56cd01b4e39ae45fbc470d368f7793b svn.1431\n8e0f27ad3a125ee977b78e648bdd6bcb75f6998d svn.1432\na6e8095cab099aff92ce767ab0909ac1f6406857 svn.1433\nec14505f5ef1136291363727fab13bdd13cc624f svn.1434\n28581f149084ad73dd424d78b65fda0b4165353c svn.1435\nef0769a66090dd188c9b7863e4714c4bb003df6e svn.1436\ne7f8cf6f1ec7fa1632b31a9a0c613880f8b60dc9 svn.1437\n53d761675307f9a7cdb34e250456eaeea9ecc7e1 svn.1438\nba796abd162a8f0dc7dd271c0ea0daf89cd4fb15 svn.1439\ndb6035e79fe74a44d3b938f99a106cce963b011a svn.1440\n6e0227316be46707e2973772248384bcd3151f0f svn.1441\n437202e6d657ee064e65f26202cb18a55fd78bdc svn.1442\n4e7b3bfed355c6428a431ffc99ff545f0c6252ca svn.1443\n0d51a29958e1eaeed56f5b2a4fe1a2bd5cd52363 svn.1444\nea20e9908355e6a85a5ecd33f29801ee147d4456 svn.1445\nc47861b1e7f39099a00e0e3e72c7c28c33ca096f svn.1446\n3b8b22493d88276b702b64ffe4865330ac193502 svn.1447\n7180e39c0800fc9a3735ec1f8c0ddf2814f721aa svn.1448\n516227fd6743d1825b3378c8b36975938d47a217 svn.1449\nff43ff19b750f603209aa153721bf06dd037f550 svn.1450\n5b301e532c10dee5cb606274dd9ac22b3ad5f3be svn.1451\nb2e1e21eb94e0005a0fb65b05b8e0322deac48a5 svn.1452\n333f0326ed6583c933f9318ac79c78999957544d svn.1453\n1c0f7b9bb085092a12c0312f9c049cf8e02d9a52 svn.1454\ndfa19985d339613b7364afb6e0e3420b5c4f5471 svn.1455\n185de12a4ec75f750a8a53c2ee7bd4dcc8e5d961 svn.1456\nae11ce1926b04ff6c05b0e8f40855415f673f331 svn.1457\nc30fb80ce687189ce605df7b2003d8deed45d801 svn.1458\n862f51f996b96159bf7dd7f1a6ee9e58203c37c1 svn.1459\n3365f0097bd326ec528ac594ccc25ba9eb33dc0e svn.1460\n2add581852239ca54ea853708a4a6505cb8f749e svn.1461\n12724e72d38ecaca26481f5355a61000f9a42b0b svn.1462\n7d5d1ca04f1c402564f51df1fc542e327511a5e5 svn.1463\n89cfb20c190791d24125d4b7071872c7421c568e svn.1464\n1665f0b0a35815a4446054befc94c45c505da970 svn.1465\nd29c1c8f4e935cc8828a6ef7a2352815abb3c44c svn.1466\n51cfa707f22728a88d101c2fd3e189daa7a53bc8 svn.1467\n59dc51af663c3b8a8eb8d96dbd8f22172d995911 svn.1468\n75ff86a1a12518b9282325497cc9edfe71ac0e59 svn.1469\n980d6ff5712f4faebcae3d6146cd379869a7523a svn.1470\n6fe6cbf43bb7dda3aa3769bdb99cd97ec0c4003d svn.1471\n3b697495319c530ee25b14f2bf1b4ef0c009ceb0 svn.1472\n12dd198006a12a1d9fbf49a0b5708f645efde60c svn.1473\naeeb2ff31a9a5f5664c731637dd753f96b1b2daa svn.1474\n5c54a8536fb704f0db51327c195a03c7aa131c6c svn.1475\nc1579545252e392bc34cfc9a392d9522b019bb75 svn.1478\n2a33f265c63f6934017e36f48f9105c54313444a svn.1479\nf01b9731c24f1681b33c4e3755b20a5a5aa8f49a svn.1480\na0e6daa8f9db1a4cfdecbf468ab2aa545e7b8de8 svn.1481\na755a2fd78f41c75b3896bdc5066945ba3d4c52d svn.1482\n663012cf3a54b1c3d6ad3a93df7eec30a7dcf38f svn.1483\n66aad575c803e9332b70f58f6b1ab2b7eee1d59f svn.1484\n1c132223ef065f72115fe310d79267acaf25f1b4 svn.1485\n94cbbf7fa91696a98a30e762d19a8fb149ec092b svn.1486\nb5a3d1960c1804d00911a527f8a69f908e05f209 svn.1487\n4df6dc354109d07182b40bf55cd238b6ceecc4d2 svn.1488\na1e3c3f8af9a485c61a9d360a0306eb03c7a8d3f svn.1489\n141bd6c0c2565fa944818e5525e7b856529e1540 svn.1490\n3c37a475000c1fbb6d11e14231134257ff1eb760 svn.1491\ne25cabef22e3fc84179d3e1e92a0ccd5bd40c93b svn.1492\na25ec146819fb997c336fd9e18d6147a8cd0d693 svn.1493\ncb03b1767b3b75b5f5ce32aa40e65d6a55874c35 svn.1494\n38aa89850e6a6f626eef7021e95661f27875118b svn.1495\n38aa89850e6a6f626eef7021e95661f27875118b svn.1496\n084a6e4d0e816502fb1306e66f66aeefac0e0479 svn.1497\ndeca71c941fbfbb33ce991f5836eb0de04417382 svn.1498\na678477d915b076cb1dc90b626fb596215074151 svn.1499\nf6dc6e0f6577578cea4348053be0e41f57985570 svn.1500\na0098dac9cf616a98bebb57dc1490709d8363b64 svn.1501\ne0d6f26cd59a772b0146f9e70d548f5c2b5367b2 svn.1502\n3b02aaeb1ce691afb2076c5fdb9524703aa5678f svn.1503\na257212dc7068e5515bd4c0d71d16ab7be0ee005 svn.1504\n99045e544c31fc3a6492cf82eb3c8b01be8fa841 svn.1505\na654b49b490bed224ce3f99e98ef8221db548d10 svn.1506\n659c0ee1e0c7a6d60425d1d5076607865847e340 svn.1507\n3b4f96bc643c69e112aea4d5d8f7c4c4ef5a1ae2 svn.1508\n2713af2f39a8bb913490674eeba74b630e380029 svn.1509\nfb79fd5aba087084d7bfe519e68571c34df3d4af svn.1510\ncebcdf956827198874294daf9b2c5dc60c49bcfd svn.1511\nbbb6403db411dacc6218aa398f9ecb345d51fbef svn.1512\n581c3f7a1f64bb340f03d7ffb24194af0c6d4f4c svn.1513\ned564e260a2c6ddc06b8509a2c592f8531d6b5c7 svn.1514\n4b56bc9f38145dc11e99c3fd2ed1fb8dfb9560a4 svn.1515\n37f78913a2e53a60f819ad2faaf47c6efdc5d5bc svn.1516\nd71eab7b89c1d978a069e8ce335241ac88b8e2a3 svn.1517\nc5af714420ab25c68430dd546610d05d4f4875b9 svn.1518\n32cccdee8b9141083a52f9d5309f84ef268b39f8 svn.1519\nb5343ea82466698c58a4f6a63e19ab8768748281 svn.1520\na38e139dc5404540366d250371ead88fe27d1536 svn.1521\nd2ccc9bd293a62d192059be4ed9f8bcc5f362263 svn.1522\n095327a542dba013693a1cfd620be0887bc947fe svn.1523\n55ee9e27942c2f011ec27c7bb4652526eff7a8e4 svn.1524\nd75c19fcbb1409cb10fad546fa86e719dc196014 svn.1525\n9d31770219098424bcdbba3e39f5c0fcf43fa682 svn.1526\na7efba3197342dbc375bafa8c77cd84c6edd2cf4 svn.1527\n40a7d4035da5f6b26c075e655cdd63eb6533ae40 svn.1528\n79ef5edb30c344d4fe4bdd0d0b07c17993a096c3 svn.1529\n78117268c1b03fc1a150d8824c03da533cc869b5 svn.1530\nf86d1b52a625927411c30834826b400a317b7e9c svn.1531\n5e9e68f6fee6a37e9036e3960b3a66099d37343a svn.1532\n842eac909ebd46c3659906fdc7f8ee94ba20b512 svn.1533\n56d0c933ab486bbfb49525e1622b0a31e8ecb138 svn.1534\n7085f32fdc31384aabf7db79f469ea5f7790355f svn.1535\ncffaaf086baa7f2c268140c33a2a9c90755bb69a svn.1536\nf41eeb0f59ee472cc4790915c1484bb3819e3b7a svn.1537\n6580dbadb7b3cded08f09e09df4b40e3a07f30e6 svn.1538\n0f08669a376c40c260f910ea50335a6f253f0bd8 svn.1539\n3824807560ea0b864e55d01be3e71f5f04b21c94 svn.1540\n81ddc2243c628285b78e5ab5ce21e57c7e5cbda3 svn.1541\n01f50b8cd76bebcd95ec225244d85d5d33c7757c svn.1542\nf5279ec6907273bef4b72b5d862276a9bebd0009 svn.1543\n72b27f3d49d22a43c34d10d828be07e085008193 svn.1544\n157a8995611f9b71e992c8f0025a1b4c088d3882 svn.1545\n7ea0e8de32d25602d73e827743fd6c6f557b9e81 svn.1546\na5bd9278f505d35549da8c1db075b795040d3cd3 svn.1547\n8b97854192540c5576e751117a7efdd343ef9b83 svn.1548\n7635c20161d17047554a6d804b9ba2c4afedb9f8 svn.1549\n05bc16f202405d5fbdd3f5e4e5e054ae57fdb7f4 svn.1550\nd03c7bb882ce4adf3c067b3ce219d24879d71038 svn.1551\nd2d85d6743fc648bd2c15e35a50afb3e58edae5a svn.1552\n35fb587d63509fc71ae5f8dc323902ff4eae4b9a svn.1553\nb53b054f3025dafeb3c0858e8d07875cfb7a196f svn.1554\n8572531df964ea1d5e8b9fab9cb86e292bba4c4d svn.1555\n7b147e456c9f3860d193978f3b6057620cb6cdc9 svn.1556\nd9796d4c47944d4af1028405a467da940320125f svn.1557\n1505f73f22137b13663195a1e4caccaa4cdd20b8 svn.1558\nb676e165b51d14f45d5f42aba085c7cb2ac8bca9 svn.1559\n63a5adb65da839401141d73d138496fe0a683821 svn.1560\n69ce4097c0b430155fcde9a504479c27c05dc3b1 svn.1561\nf2a890487645447a3c91f8c4c444538930aa5614 svn.1562\nf14259cf64f51e6b57c6712fabe20aed496662e5 svn.1563\n82c93227c4a729567eeeb3edf40358ee164ae6e3 svn.1564\n96af1c0329511468910b87ff0acc6e035455096d svn.1565\n9874ad7d3b55ad97cd0e258daae7c2b3d99fd42d svn.1566\n92628ecca5de29ba7b37278270c61d658be0b662 svn.1567\nb2fc7aa349d4b3d468d998a7bcd755a6ac7092aa svn.1568\na1eb00844a2a42bd498cd0f9aa044d608d842468 svn.1569\nd969603a3ec077769239e996258c9ca56c852360 svn.1570\n28ab45c2a840863117046d9ad30d206ebba3127f svn.1571\nc95c9f1ae65973699dbb0f1c4823dd3db9be1fcd svn.1572\nce9242ca9d81f815ec253f7b812637a39134edaa svn.1573\ne3a130b01c532580635ead44e41dd264aeed23b9 svn.1574\ne0140c742eacbbc7a4582570ead209e658513b9b svn.1575\n1823e17b84ac63c2e5ad6446e5f09a42a429cca4 svn.1576\nf88a9101c63cda1bd9eba01702049fbb44865b34 svn.1577\n457a2b74430609b69c79c58df20a670615ee8073 svn.1578\n7b7680081b5c333c78495384496ee0786fccb43d svn.1579\nf1832d8cccef330b6638907e6a5c3d880d659501 svn.1580\n64f5ede9c0ec6ff00d7991cdbb9ecfc9d23f6d9c svn.1581\nbb622a0b22df22ce5e7aa7c3a4d21fb432dcf3d7 svn.1582\n4811799ccc6a99ccce617aa7144f9418fd9a5e5c svn.1583\nb7d95c2270e2b74749312e897a8835477b95487c svn.1584\n7781d6c091ae10d0c27bd6e579ef9e57a5a53f1f svn.1585\nf3f20652f213bc278d7080cd269683fb0918d37e svn.1586\nd07a07a9ec8f298616b07f31d8dbc755218d8a93 svn.1587\n35e1279ec9104b11a4ef5203a3ab02bb8aa9284d svn.1588\n40ddffdb0dcf3747e058de4080ea5dac5a95a839 svn.1589\n815ef80c67eb4ae7883281d473c8c2304c4d1482 svn.1590\n55e323bcd4e2d635ec85215815bd033846d1b59f svn.1591\n49dff49ce13287ae44e6d0cefd52774779221a03 svn.1592\nfdcba44dd2f80c7a088f5393b0d0a2a742629bc0 svn.1593\n9a3c3cda99a43eee2bdc9fd67ad1f43fc9eddaf3 svn.1594\ne9668cbdc1a642beda9df515e7bdd6bc72833f77 svn.1595\n568037f883010b9433d6065c4559f6364192eb40 svn.1596\n714655e58c1d41723dd7316db86b80a5637e520f svn.1597\nacc3867981b7ef3b5b67cfdcc3e925a37cd1d3c5 svn.1598\n4d56a550d8f7333d857ed3c8f4cfa2dbaa3082c9 svn.1599\n68d2f0d20adff7dd8a8714a099ee1bf44787fbf0 svn.1600\n0cb99aa6ceb2d2f501e1f704c0c0daa64191fe3d svn.1601\n2dd2c828e2720af3cbbdd101cf9aa2ee284ae6d1 svn.1602\ned67db76eb163de6cca0e903fdd97a52fa01f94f svn.1603\nbf2bac23bfc13f5f3b2d6695515ae9ffddb01a67 svn.1604\n9472f104f25e1ca57e39723ea36baeb1b9ae8b55 svn.1605\nf8cf7b2e6922743a4f20951bd820842912fc19e0 svn.1606\nd6d52e82e5525af6541f2bcbd9f6a6a9112a2928 svn.1607\nd75df246c395c3be50905b4e3b4ca4031ae622c5 svn.1608\n4e0fae79e5f7dc1a38e23a1c5a83693febfdce5d svn.1609\ndff4213b076d02d29e72d5dfd90cd01dd5893281 svn.1610\nc452acd2ecb9c8ff01d1c34feccff5f0f6dffc91 svn.1611\n4b4cc50685a2b630d8dfebcc4bff4877f08cbccc svn.1612\n40dde6e9f15e860f7d7427340e0d579da019ceb5 svn.1613\n58725018fe648b782b0da17c0ea556c6fd29aef8 svn.1614\nf05db1ceedd358938ce7555eb7c8e7036f8939d8 svn.1615\n98294f8f48e96213a155e9ef64a259edcbda417e svn.1616\ne742518d220d2d82dbf9e569ac83f87c06bccc4f svn.1617\na12253bddd69e8ed304598262677fc6165317c89 svn.1618\ndc22d2ddd4561cdd22f7f0afad1cb9bbdf171d69 svn.1619\n077a7df7a258f33ef16b9ec6282b3122ff2df9ae svn.1620\n33f3bb58e65089d458494fb000f08edf20e7bd04 svn.1621\nb9ee5466f18c8b11f666c43fc907149094771289 svn.1622\na6caef3551ec0900855322af3169d38557e2bb1d svn.1623\n255a7e60cc25c3d319134a496905fda32b1d25dc svn.1624\n833c48d4693f14ef68672acf2118e240cb5cefec svn.1625\n3080340d42d6a42004ca4b87c4b5f320786ba0ff svn.1626\nd064dc98ac1be4c7aa78f6fee1d75ee9b33b9e36 svn.1627\na77160c0459330a4621cb051b6da79c529d904d4 svn.1628\n4c3c544fd9ebcdd9dd3762a59157def46c6d51f3 svn.1629\n62aed950d738a4b63de4f3fc387ed3a8869ee025 svn.1630\n812a9bc5f44215f5965b7ea0f0557480e8a1a1dd svn.1631\na22bf03c316ee25cef9fd9820bba5497c419b512 svn.1632\n75a34e3544b88411df1ad71ae177b623095775e0 svn.1633\n7f8caad3647d5dc63684405a9ed4b81b7b4fad89 svn.1634\n1efdef4c494eeeb7ea46b626b1f7261450d05c9e svn.1635\n1efdef4c494eeeb7ea46b626b1f7261450d05c9e svn.1636\nbbc440344b6e1cdb84c5848a65273d7047a232cc svn.1637\nafd9c1281fc99016b91259890f85bbf53daa9339 svn.1638\na3e529a02e5d32c71ef5845e57235c3a4913c61a svn.1639\ncaf0c699b4219e595f4f5ddee94a5b6c7110dcd6 svn.1640\n984994fa288a624f9e354298b0ff2ffec255b4fd svn.1641\n2b8d89192ac7b4f2edb21b5fc95d05a6f07fa161 svn.1642\n07b4f0b5053e1e6277a650992600103360d7a6f3 svn.1643\n2e39ace482d970723ad2509494c6d5745af78c3a svn.1644\n1434661572377ae5721ab1aa5786efbc26ebc954 svn.1645\n2ad186a40a8d5623ebccc1a1a74ce992f862cf04 svn.1646\nd44cc520ee649863c52e3f175d7d86dc2f92e726 svn.1647\n9b72bad2060116c35b51f6419101cae6a3d9981c svn.1648\n92643be3878daa0d60270820216331be09f42e87 svn.1649\n7ab95df960fe411dea3d6e5442ab90429f99ece4 svn.1650\n72b1148efda4ce43c6027958d88770e3c5f9bc24 svn.1651\n8aae29c276c65c286810724efc35dd2363c9531a svn.1652\n1746d675eca79308b5dae294a15acf83705157f0 svn.1653\n86e6cb16d799c8635ff65d117117edb1961ce34f svn.1654\n39d9092824493ef076961e31c3fc4f0797d73845 svn.1655\nc4778122e59e56fbb7bcdba97fe4256f78d55f99 svn.1656\nd29d4e968801a582eeb16bbf64131dab230b45c6 svn.1657\n18abfa0b774cd7c26eba9a1698be6ce8c74e6633 svn.1658\n5efb8af64f73ca1d18a7f5db122db540cb60c19f svn.1659\n6185ff7731337fb0038f1a3ebcbd9188bb3cd604 svn.1660\n852fb995a664a74259049e2ee4814172df430fb7 svn.1661\n036dbf9a743f8821b67fe7a5efc462f9d2f5eb56 svn.1662\n5404563b289806941cbd43e67a21bc8a15e04131 svn.1663\nf71e7d10f35f94da425ae26eafc991e1af8b9bf0 svn.1664\n36a04d17d9f59bc4339a50803d0c01da685f3110 svn.1665\nfcf891729c22e1f2014942b61da8476a1e551345 svn.1666\n6043dfa70697c52972ba19b34951ba86e6d8599e svn.1667\n75c9c57a2a79cbd4004f0f3196dd3355da991c31 svn.1668\ne17592981761f842753a5fbf4bfee091e70e5daf svn.1669\ne0164df841ffb6252996cf9d39c36ed7af158084 svn.1670\n0a2f8c5d898aa44a31d0ae50ad1e849a556a5636 svn.1671\n86df8481a7bc86d02617082bf3abdf1407de091c svn.1672\n01bfe865e2d16ba4987156eed3d9ea72e9bc86de svn.1673\n7edc43715f566bab6b4c8385c9e9fc4a547e3a6f svn.1674\n894f6952638b7e4ead5cedaf037ddc6f73a35b8e svn.1675\nd6d70896b415bd325dbb4ce417ac98797d29c79b svn.1676\n3080fea48781b6048efe09020e4edf7a1ece79e5 svn.1677\n255574f155b635cb3b9cdab7272e7762f2c697f3 svn.1678\nb01dbaadc2b9d9c58e8be763cb9eb8d3daa520de svn.1679\n39918db9bcc5c8fdd8d9370f22a0263e9a307862 svn.1680\nd34cddc0beb692904495bd72653efc5d7ea0fca8 svn.1681\n64e764bb08e25adf2950b1c29f5565c71a53f973 svn.1682\ne0075c7f889a7bcb7f441597336a2bffc90365e7 svn.1683\n3ad13191a6b760a9be8ebe5160a393372e941807 svn.1684\n9f9ebf45aefa84e27fdbdb29773a32fbf3495381 svn.1685\nba113aaefab0d5abf686abf8b82978b3f012495a svn.1686\nafbb04b90320157ad7a87e033e99c3ab4feb2eac svn.1687\nbcd96b5b641522e6636981f3f1d0c25ba9a39026 svn.1688\nbfdbd46e63f93d204ce8dca1a4b32b573b8af3bd svn.1689\ndc1851835035b94e1e58925b68d033add920f79a svn.1690\n75ff4da1f7eaf05912244dbdfe2e62414e622227 svn.1691\n15c62b4e3d87f346349a79ca8c253b9a8d0a2994 svn.1692\n9be50116011216377e64929ebe3943b92b2f9d42 svn.1693\n54ea27049cfe47474629b04782268f1a237e1016 svn.1694\n3851267fedcc1c3ac1532a8b3ed2d3208d7fba43 svn.1695\n19056ed6165d9a8e35e887897e214df7559be7e5 svn.1696\n50f8cc34bdc266d29d27f857aca622cd0107fe34 svn.1697\na2d07f8527c2d728057f0f1d5dde747b2085ea4e svn.1698\n63b834da1ecc73f76c4241face3c5935a2e9acdb svn.1699\n2fda82df89a6d8f7f8438c1876fa646f3a7f1e33 svn.1700\n9629e7f122d96e7b398ae28b853db1307f1c419e svn.1701\n03cfdf58c3fecb16818c6b625251dd269a7e6137 svn.1702\n55f5c7784a4229b64f58bb768cab5ad1aa226cb5 svn.1703\ndf1b785493de891c6ecb03d9605490fe7f1841f5 svn.1704\n7612a476357ea6d2d3670f701b9e056263fd8adf svn.1705\n50ccfc52246febcf5a7ae5b22eb9a3f7d4171b45 svn.1706\n7cbd02e1a177f7beb748eb7d8917cdbc97a968d4 svn.1707\n4a7b5ab10f945b646f3482f3da48598823840010 svn.1708\n8016c4ec85d443cf00f9de249ccb5ea9853933ee svn.1709\nfbeb5459805d76308750a385e0087af8d8b277ed svn.1710\n1f1d784b8e6f772390a950118121040ef61b30a4 svn.1711\ned9c615c60a5d36dcefed3d4f7f885e8f6ac620a svn.1712\n3873fadacc680806665b3fe2683039fbec0d4f42 svn.1713\n3ee59e6603b557a7f83c4be838615bf1f17933c7 svn.1714\n52564786ea46256ea171944b20c1b54141484232 svn.1715\n09c56f634e830e9d08007cda9e8359d60c4c1c3e svn.1716\nc71f79fff67bb265c85885fab9edfda9d402d076 svn.1717\n03ad33b74e36cb20b4c5fb47f87ffb33008daead svn.1718\n7f6f4633989dfe34534901431bf6c4512f5ac3d3 svn.1719\nbc21cca4027be308e5275ffa70035e9e62e18238 svn.1720\n6649f94e9bd0efeda3cebfedb58eb026368e7fc4 svn.1721\n31d7c0fbda56cdc775db72a5d02bea56c9d78c95 svn.1722\n3a80e4d86f6f89b47885ea203cef1ffd89429ca7 svn.1723\nb178f3d6711987063b111c8c252bc468abd807f3 svn.1724\n29e345da7172e500949bd58e46f3246f0b44aec2 svn.1725\nbef0329d8a67eff5721fc0e67f4d4fdf71c0fb19 svn.1726\nacc03fa2418c9e9d4f6f645ba959f474e8c7e310 svn.1727\nd7c0a5143e0812ca38823e7a324c9f65ef8a3b68 svn.1728\n71d5cd88eec6495a50bc79ce2660ee2b69bba324 svn.1729\ne04eaba634a654294757ddbebefa05e811f2a081 svn.1730\nda452cd1b49503c35515f7572e37bb0024944e5b svn.1731\n513ca5a224680edbd1947d6d7879961a074ca8ee svn.1732\n2de36d3b89fca4f8b30601fa99e90973598a90f0 svn.1733\n2bf1920c29113cc1d476008c411bc52047b26a9b svn.1734\na25c0bad61112fe9d2cf85731e8bec3424591f56 svn.1735\n35bb5d1fc9e465d507aa2db3cfd6f9d49772ca31 svn.1736\nd4e905749193992d2930165e2fb5c92c4f631a7f svn.1737\n78bb232b8ac521f067eb04acaff7ed35da679116 svn.1738\n427304f0301372580d0c4e88dd1646b98c4d27e4 svn.1739\n29fa8a560d82aed614459dbbaa5192b41b7c6f87 svn.1740\naa2a278f10466bfa4a4ec1d7bec0f47c9f420ef4 svn.1741\ne9fd623d7e60b53a63a050dd53114e9ff7563768 svn.1742\ncfdacae8947297a848f85f3e5ee34b1cb99b6870 svn.1743\nd9754d4620fb1c5d08adb625d54891d7268e374e svn.1744\ndca30c3fe9ddd213100362c9dccefedd1ebd23d1 svn.1745\n1f7f320ed42da58efc70c540337e317cce22aea1 svn.1746\n06dd0d72d23e3c7b009b041e55244db301c258e5 svn.1747\n383cdbb00bb74a69db9c4a6cbdb8e39b91ae1be7 svn.1748\ncbee384bbe6c35fffa224c81aac725631de22986 svn.1749\nd1a0f3526c835bf3d602a66e99094dc534788c17 svn.1750\na1d12be13af07b9816a0080373f56f9ceeb0d05f svn.1751\na78dc0dd79abcdef054a4d845399cfa65a0b28b8 svn.1752\n2a1e1609a364b1ce53d7c5c6b3c71fc44d6c253d svn.1753\na573d5ba53dbfed2eb89e91d3725a08cdb674c5d svn.1754\nc869c401063e345c56e2f9f522bb1cfd42874ffb svn.1755\n68e2b105705dc1e3dc6863f7c8a3886d56b03313 svn.1756\n5dbeba31b2593f3f55646b5d93ed425ae4dfbc7a svn.1757\n6d579c1f1c1088af5cee45aea39f0397ae9b11bb svn.1758\n2cbdcd78597bf45640efd7781a80e62330557c09 svn.1759\neb345317736f530ee0fc5e8061a0539ba9832b66 svn.1760\n3e7bd972b7fe66f8df84b96d4c7eee5e66cf1999 svn.1761\n385038e8c8a6ba85f70ab715ac3b529149069c6c svn.1762\n10bffed38aa9f6f9c0e813854bb652fffe380ab7 svn.1763\nc375f395af7851448233aa345780083a3fbc12d5 svn.1764\n04ad119a5dbb9e1dde2593bd6f97e117fb7da872 svn.1765\n93870b7c695a4edc86c5cb6ca02a4c4b514c9c09 svn.1766\n7693287f60e0bbe0096c70393dd27b5d09dfe41b svn.1767\nb258d9ea89e3354e813c38c3d88db4ba7db19b91 svn.1768\n069023e4f59cac7481d3163eaf636dcc256b8f1e svn.1769\n33d42014a07f462861453d3c5fa74bad6f1a0393 svn.1770\ndcbd3e18b2011d4dea98c31060d022dc04775753 svn.1771\n379a5f5add5125e6c6db863e3b8a1b5b6f34f766 svn.1772\n0c2509d45cd9afeb310dcbe663eaf2ae9d61f18d svn.1773\na4481b31c00c38de0662536338c7216e732637f1 svn.1774\n0701432e35420b24943f3292b3fff9e77fe20b90 svn.1775\n2430d349eb21013c49d9e82154bc94ff5155fee6 svn.1776\n2dcda06075bb2a91f2f9d0e5a50d3ba11fd3c17a svn.1777\nb973eb3b18afe2cf1a912d07365ccdb2fb30a4fd svn.1778\n87badb3265ac82e6ed5244100a33fef90f1e4414 svn.1779\nfd115429925b29d300f13f3214442fc0f0f46aad svn.1780\n61f632cf31eddb7a4d0f59f6e8896c83da23cea5 svn.1781\n8150674a7c9dd142948a5e7a75fb592f65f46423 svn.1782\n2c888e5140ece003d4d34151908267038e97552e svn.1783\n1d6ed369ac08de8baa001ae014a7a6690c62fe36 svn.1784\n09f38804c909863b027b8fc655c632d3dc30a65a svn.1785\n34624ab3bd28a48e792ed528024699dbc4867101 svn.1786\nbb3395ef7c8f136b6ea39a912303db9bce66fdb3 svn.1787\nf540eab5277d7d38ba099634e211a8c6a1195a36 svn.1788\n1edc51f25d6c2e81ffb5855226fb6c551a4c804f svn.1789\n2f809b5b8eb9958b3c4aa9bc51e0d16295403055 svn.1790\na4702e927ea83c233b974bfec69ea71b7e29c1ff svn.1791\n8bd237f63d05a9a7684d7029ac713b2fb6df7c57 svn.1792\nbd38c51bd81acb97551b947a28c06538b7aa3572 svn.1793\ne6603675768e674b5ed80e90c06aff215d7d5e96 svn.1794\n3b9e4cf77cd4781bbddc674d2bfaa0bd4c36bc0c svn.1795\nc065d7dd8b5478c2cdd2cb984e6b469b5baab6b5 svn.1796\n2d39a0a14c3bb9adf01c59e66c2ef9a626993449 svn.1797\n2ce96b8de405d1661163608469b6b7e5ba55f224 svn.1798\n3e175aa9d597baad59ce3a38be76bb00b6d11b33 svn.1799\n809982de995dcc228b4a57e5ef5e58f8dc6b39ba svn.1800\n86a0014c411d6f2c360234482841c9576aa73cf8 svn.1801\nd7361d0fcc23bf210974f8b410615674494da1df svn.1802\n1379c8885f4a3b267881a33c614bbe09bd72f846 svn.1803\n5d130809aec611ce4fbbf349ded2b9ee3f7ac0f2 svn.1804\ne90c44b860fba35315863e1b564fb83f71f34c2c svn.1805\ncb539b8a3dda087ca36fce23686ce6d0f19cf4fe svn.1806\n123b9361e36a1caeb888427c6d86608b4aa66588 svn.1807\nb89cf22c7241dad645e01a1c96d8c5dfb49a302f svn.1808\na1d678ae3ff7624c48e2b825fe4a7b2c5201143b svn.1809\nc0df83f771b7edc7371dedc924fa91261953eccd svn.1810\n96e04873c2be7b473b3f528ad739db63446bb4d0 svn.1811\n8b80e2ac9e2301d4b953b49cc577ec4884a4eb31 svn.1812\n2c5fe24a067e9d0d810640615dd40db53c21b40a svn.1813\n2bebdd7d34da58b6ee0a74373b4cd510971d2201 svn.1815\n075d402ac0b9eb4803b409ecc5a59888d9aff218 svn.1816\n8164312aae23236383951ffebae7e9fe84eef214 svn.1817\n37997e853dedbea9eed01c93544a364525e69452 svn.1818\n6c43b1da9ed72410f9f4c89e3ccda8c89c2cde6f svn.1819\nd47889155fc4720185be693048c0e98847a41a8e svn.1820\n87248cee88356141bfc7b390eed6277ee80dca59 svn.1822\n179d36ea7d2b9ef931e8822fe102b6b6002b4a96 svn.1823\n87b5888990b620745ae21976d7c4432e5265250a svn.1824\n6aebc1091a5f6cc90cfc53e278998f652d85ddde svn.1825\naeee84f4cf8a45fda66fd5d72aa03fd715728617 svn.1826\na5d6bff0e9bfab581a9d7e21c30bdaa510d5bdea svn.1827\nf31f705a2833bf5657c48e3bec0627a697c1eb26 svn.1828\ne74f96f75eee4a5fa338b0b6b88159bd30acbb2c svn.1829\n3b73c499cc18fc757f6d186721ce0ba58f744c6a svn.1830\n27f3aed6bfe8c69a77378a83256974ab2b57d75b svn.1831\n854c59d660175fc6017d4924f48e3b8d2cbb3d55 svn.1832\n0500dd86115a2fb4b429f040501a5553e1a3e639 svn.1833\n176d175a6a2e8fdabfdf56684913c5059546d030 svn.1834\n9823bdb9d142eee7d1b561f9d63de24861a815e8 svn.1835\n701acbc4de728f9f818cb733fb4e08fcb3de2239 svn.1836\n9e6f2a6bafbfdacf18a7ee934254923b383cefc8 svn.1837\nfd16d44df88b7be040c2125b27b48dd19b3cdf40 svn.1838\n1c833bf5a0d153c7aafb3d1192d957fa14f9f525 svn.1839\nde83496adb4511dc0288cde2c6cd5ce2f991450e svn.1840\nf7c3f60b0c916ec138a91f472d9e5676c6c887ef svn.1841\na96cd3ec1f2fa002ca4bffde5abf1df8d80d9ea5 svn.1842\ncadea391620e51c6b93242f89cb24331b85bac05 svn.1843\n5908a77ef3131c7f6ec73e1dbb8e1dfdaa9a8a50 svn.1844\nea96d2ec173f160785c9096b8ee6e70424c8d32d svn.1845\nabd47ec872b9ef81c8cff067ebd0994699c1db42 svn.1846\nfacb3398b1ce39d5cd83258aa2e4b10b41161fe4 svn.1847\n7b2edf5a068f6d58898d7c3117b8dfe62bc2e07d svn.1848\na5d52bd7f3644d0b488b7277ad8a611ebb70937f svn.1849\n2df6c761109b78598b1d8345e35ca0e22bb734d6 svn.1850\ne3172714d5da3642675b02c62bb09da2c6ea8390 svn.1851\n6453fd8db0f807521aa65cdb686d692e742426e7 svn.1852\n3f7d091b0f7da5c081bdf145380468ec98b602b4 svn.1853\n26e16025696c5f78bdc0970d1d099c0caa09f9a9 svn.1854\n72803119ab85c4a1e6b7e7e8c6c6120a0e3fc51f svn.1855\nf1d04c6639e8e82956f073cafdd6db3d2497a2d2 svn.1856\nb8978fce03d9277c1371883348990d269c175435 svn.1857\nb47b94b4f56371decb844b2cd00a276bdb588504 svn.1858\nf2a4fe5a21049871a52f679243b4d39b35a7a65a svn.1861\n8162cc3bd8946394e96fdbb115e156ff5f624378 svn.1862\n46888c3a332501d5241af0d119a68c939521944d svn.1863\n3f423e1ed168c6ea559d0d8cd1447d1175d5e4d6 svn.1864\nfafd5c5af15363931285747729a452f16d0bc3b7 svn.1865\n9119c92e90d7dc291e0eac3733ed6cdcfd57d200 svn.1867\nbb69f1bb9dc69afc636c84d3165fb2f3baed837c svn.1868\nb57136c2cac90a7041376c615033b8d95c76b22e svn.1869\n0b64bdcba955209a35b843b8ecfbda37a891a869 svn.1870\n1d84cdcc89498d224164302abd0dcc68f470e137 svn.1871\n1d84cdcc89498d224164302abd0dcc68f470e137 svn.1873\n1d84cdcc89498d224164302abd0dcc68f470e137 svn.1874\n1d84cdcc89498d224164302abd0dcc68f470e137 svn.1875\n0cdfaeed87b975af341f37bc78cac6a0f9878d04 svn.1876\n40d215e8f3a57b4dbd52ad60db0c43f5682c1e05 svn.1877\nbb526c6d9a8d62f6d5bf70930f0ac83a4391a7c5 svn.1878\na239405b4b4e05c3043acb1571c38e1ebf17611d svn.1879\ncc61b92ad6074308928b51bcb90b1c0cf7fdbe91 svn.1880\nd43637c30fec23a7f9cc68705cc93ea8dbfb7bee svn.1881\n26225b6cebe2581b90edbded98155b348eb44312 svn.1882\n612e972dddeb60c002022386421d25e90b6a6ead svn.1883\nb1d2b02d0bac2f87325e3e3c03cd1f07832ba79a svn.1884\nd4d9880cfccdb8e405f5617c7b3e1c0d46c5f0b4 svn.1885\n33dd8a5e08956daad35c1154806e9b95ca3a4622 svn.1886\nfbf1fa87c4920f054dec31511e7900de9b937b7b svn.1887\ne6afcd6f01c0689b8d5161aa989daecb1304f254 svn.1888\n1f57aaff2c386cc607c0417e5301b535707d08f4 svn.1889\na4ab4fa724a97b137343af17eca1277a7cd19feb svn.1890\n63d350cfde9ae1c1548c2a45e4171c870b5af281 svn.1891\nc36cf0f6307f79b99a35f30d06ea44ccd9904485 svn.1892\nfc64f394d7612863b6c2e723828e9865cb1d7f43 svn.1893\n814e7949dd73ffd842617e20dfd521df95fbedf1 svn.1894\n73502e0bc88f2665e756b32fa4d7c5ba76d95e51 svn.1895\nc74811b0660f536d4ee67fcc4c90a5d691309ebd svn.1896\n2d674dd2e8858efd1ab20abc8616356d32ffd448 svn.1897\nb891607f405420dd0ff601b50c4d8ebe8436a480 svn.1898\n20b5ec0cf2792d3ebd1484f7a8ccd32697ec1082 svn.1899\n8c3ed92d47a4418b2ee16fd9d214f9937495e909 svn.1900\nec2e7b0aabe90ae6ad3f73dd0ba76a273cb4073b svn.1901\nb4eafb5986be118d74bc8dd68f6a4df4298f43cd svn.1902\n21becb46d0459f03715da3a94584431d27c71a49 svn.1903\n6d6934479fd18063dc62a9aa2ef9ba73764d59f8 svn.1904\n54a976b26b35368fbe376c00f5118e123104a1f3 svn.1905\n20ae58be2d9e58381d2c3e510603e2d87771d869 svn.1906\ncbf5fb7c324576e25bdbcf049f2d55e117009042 svn.1907\n4b3c354b67872d92593cb2a7b52be06921c2e1a6 svn.1908\n82ef51c1d6f1153074715b76dffe2acfca491ee8 svn.1909\nd00c4689916628d18a6829a23c05c8abb924d93f svn.1910\nc5f845840dc64811051bfadbfb9fc5c3af98658d svn.1911\n81ab2b265d97d199773d282eaf2012002ad95f5d svn.1912\n9c26726189039c6b65e6b9642d7f9e33ff23deee svn.1913\n84fc2376ad222c6f6dd637290fff4f55070044f6 svn.1914\nf7b472cc63860f003200181cb438f58e09811796 svn.1915\n1d67cf3ab0df669b3965b57f7c1782811db225f8 svn.1916\nb359358fa36c93bb7d7298a47ee24569acc94b0c svn.1917\n3853602696edf97c5b3da7525b884170a5bd625b svn.1918\n71d05dbc242458d0e8419378b2a671e46c780506 svn.1919\nfe74c7c5ab0c1c3d050c502220cb3d65fd674f64 svn.1920\nf90bde042d0928248ae4e50d9528639f64719781 svn.1921\naffbdf667121cd71346b480ea2d627394f2022a2 svn.1922\n22faba94d2b25f81d121f00098418bf09382f967 svn.1923\n0afb213969a4afa3389df772aa6e31c953aa54bc svn.1924\n8e2e78b4880c9d6d0dbfd81d9a13437f86e21c98 svn.1925\nb777c92b1faf43805c8ea978733973860b1c2e90 svn.1926\n47cdcc52cc94c066631eb20435bfdb28e09f2dd2 svn.1927\na338b2c53b6f55fdf416fe09c95f78f69f1dd89f svn.1928\ndb4c0199811c420665cb4a44e2d4eb57c619badd svn.1929\nd80500bfae2220ac51de91149a0da79904b3c5a1 svn.1930\naf8b1d27dcd9c20da04d3a2ae5d00269369fa358 svn.1931\ne17bc6ff1fbd9503405274a797dae8845caab30e svn.1932\n85585466567fcdc81fdade25e84e3275e5f53a89 svn.1933\n9054e0a3dbc46c8901c552a696b9a866bf0daf5e svn.1934\n86d7d2282cd0f7bcb34baba72823755324807e63 svn.1935\naa841907552d4c1f7ed90f00524a37cc525d2e76 svn.1936\n77c9957d8f4baed41b2af79df695424e86f622f9 svn.1937\n1958bac349fa89370ba1d2eac45713e80ec2ef73 svn.1938\n5f27db5c583efec765a96d4092dc3b443e5498b5 svn.1939\n5ee28b6a650af2b3d70d8d19652a09bd255ccf69 svn.1940\nb826ead48e14746a261c8033bb63913c22706750 svn.1941\n699b557b4d57a3d3263b71f5db45227d48dca0e7 svn.1942\n45ef99eb78a5f3ff8a7409ebea9ba9a6f2dac9bb svn.1943\nf6aa71083004535f2a7aa724f3c952c33ab84050 svn.1944\n79ed37a4abebfd1297b24b776644560c601ad635 svn.1945\n4a4d4d8e0075da3ea41bcfd0c3db459630c3c61b svn.1946\ne158d0d2a6c1e1e0915cf5a8c2f109e84c85078d svn.1947\ne42aef28a70578eedcd113beedad1aa5deb82f73 svn.1948\n98a6abdf261dfbf38520c0b871ce1e274d039cb1 svn.1949\nf191c073892be3c185f4f6c0abfa482bf71aa611 svn.1950\n7f1d4db8500759134cf5a667828d7be59129a934 svn.1951\n9116dc484e4bab17ba80d0d1d2c05feb911959e5 svn.1952\n62015b05c3027bd3ff57bc56a36e7f9e11fa37a3 svn.1953\n4e0d34dc0cc2a79fbfeb5df9645ba5a1c5d461d1 svn.1954\nd3ed9c229f88466b25c2b9516ccf7764f5d47480 svn.1955\n39e8ff22296c7b2e9c8fbee624b5ed09e836c494 svn.1956\n1ccf520007b4e76bca2ad77e9983c39d4f4ac1c0 svn.1957\n27bf11e4bb5ff2c23e3abac848b055b25b66af0b svn.1958\necd037d93af2be651357d69faf7542e00290ebdc svn.1959\nd7a43937571737d5c3ebe4cec6b13b470fb04767 svn.1960\n244294b5a4d48d7ecd387a9679a7f01c808ada81 svn.1961\nd22e07ed86a9f9d02591446c2ce6408bd95ca50f svn.1962\n0dc53e2c9b47de179c0d99490792e8e40504b843 svn.1963\n44783e449dee154c35cef617b0867c4c6f4b4c1d svn.1964\nce7203537e69bbafec90c7ffe5bf46636224314a svn.1965\nc2d29be1afe40467166827ed6b4769d3d6e833c3 svn.1966\n7bf79db2e1a2643a16a890388f79658cb77dd28d svn.1967\nee06da923b5f97c11d405e5c445824ca74bb5063 svn.1968\n41f7e0b7f943705df49e4677798b531b095f3bb2 svn.1969\n0935122aca41eb592152f56bf4ce18dbadf6b23e svn.1970\n461191c5e355fe434935c3203496ad3cb1c33f52 svn.1971\nb344a21d324c34a1ae3370cd64d167def1306fd5 svn.1972\n2fd40717f75705377c52412e4e6f2304251a61f2 svn.1973\nfe4e9098fc53d78325f35634f1f47c8750ad3131 svn.1974\n5171135b2a65d8b01d087e811642d433f6b6a82c svn.1975\n271c5b1590566477a9565498b074aa89c967d887 svn.1976\n987cef948a46b3272135f68464d429c1375cecc7 svn.1977\nbab9a0aea65c1d043a9f898caff5c2144242abd2 svn.1978\nbf74a01c83aeddc70204069eef11e093e63a66ea svn.1979\naa5caa592ec54e2ff18e62b8c7c8329179cfb96f svn.1980\n29758faa6d9cbe5c9c72931764a86c366f7f2ea4 svn.1981\n0775bd95fb00ba7f60c82340856aebd0cc86af97 svn.1982\na7e1bcda2862c133ff25aa7dec56cecdd831637f svn.1983\nd2e0b1b589cd04b0d516a068d20c8f604fb40988 svn.1984\n741ced0e3f23e6d59d89a97760d61a9a0e26ce3c svn.1985\n3eb9a8eaa4b9dc7a8f21110856f931fdc0d3816d svn.1986\n0f53029e409d3029d423a7793b42c12e3c73d84b svn.1987\nb085b33a5e72a2a697322787516fd7ec538a9f45 svn.1988\na9c3902faf64446d66e598b65a28d08069f9e76f svn.1989\n6e710c56ffcb4657c161ead14c386124c4039f7f svn.1990\n10e057958b208bd033a5fd171b2508b97be9f366 svn.1992\neabe09f797e6ac2d7702423b13b5dac55c143a70 svn.1993\n74698156c457c5b12167a8ae81b201a0974fc2d3 svn.1994\nbb37ef7f58c15c91bcfe88b4b2987c2cc7010113 svn.1995\n73e0d5d47470cc5b4800d2a81868448ba411ecb4 svn.1996\ne9a841236c31a1ae4a017fe07a32f5e05a0edb28 svn.1997\nf9ba29e0fdd83cff6b9c4762ca05be927f28e775 svn.1998\nfc2da3187883229acb11ea1fdf7039863d5985f5 svn.1999\n3c215de80a9f4094e4fb605bd97d2c5fbcd82655 svn.2000\na65bfbfe05238e09ede48aa540ecc80b90ded2c1 svn.2001\n2cf18bb1476eb89f63ca9c30e0bcbc02681f8844 svn.2002\n0013b20902980d51b7b7838e06048dc60dca49f0 svn.2003\n5d227e0c57f614bb077d85aa3369982a5f1a33ab svn.2004\na3b5dec785b7dbac72bd51530fb923949826ac3d svn.2005\n9d85ff1bcb0a16ef51653c73db701f48d4d931e3 svn.2006\n81ed5d1b732aee2e9b99ade763cf88548aee239f svn.2007\n367795f4d38279c7a15f21ee959b6aaf9d852168 svn.2008\n93f0c0e66430c7c6d0fd6e00eb942dfc9d38d7b4 svn.2009\nb060d82ccd897d248040b2b82f0fb4fff5a935ef svn.2010\nd684dba8976852a4779d3559204aeaf74e0e3711 svn.2012\nae84ca0d9ef9f3d6fa8a06f4af75dddcde50d60e svn.2015\n4bea656ba94c2ac40595c78c9106305065de4a2b svn.2016\n86ad84456a3231ba349a45d24c0d84dc1fa6b89b svn.2017\na3f73328003a2cae03a407222b4179013559e639 svn.2018\nfdd7adc6cefc3bdf8dc4fec43ee80a9536549f65 svn.2019\n7a507b422d086037f3e592aec247a28682eb0b77 svn.2020\n8c79b5416dc970867881354a87826c32c7925bb3 svn.2021\ne671a4cfdb35aaeae3d810e3b27c9e7679f679da svn.2022\n25277de51ed84216c9ca0280396951ac700c1908 svn.2023\ncea8fb4f4553a1abea43a868b9eb9881f75d07e5 svn.2024\nb6ec1131dbbdb17ffeeb7a12c9db1c24df44d0e7 svn.2025\nda6cae1d7c1ac464e9da2c1d9b921315e9420d78 svn.2026\n025571839eae5258d1da4821bef8241073df526b svn.2027\n7f531e4ae33aa89e8b172cf9efa8e7bffd78e6fb svn.2028\na1abf8d6cc1faa1636f9d3399cf0087061ef88a2 svn.2029\nd5a840a81e62415e9773020e5e77cb06e0581a34 svn.2030\n3d302c0331a1a3a236bbfd639854da76620a0c9c svn.2031\n18789b726d80630d3563219b3e611508153eb9f8 svn.2032\n4d37fada09e28ad31eb641dc1124ede43a232736 svn.2033\nd05bf95f1d55e38410cf7b2315c1637c3dca1e89 svn.2034\n0417a9087d9a57c8853ffd7c4312d8fa2cf214fa svn.2035\n924f3b9f89319c3ea96cdc1a7e12c612550b6ba5 svn.2036\na76bcd236396c81548a45a4c1d07c1886547d327 svn.2037\nd5b5227b4a3e411e27708320fe36840cd512f1db svn.2038\n952cb7f3c52141695ef1e067597b1d998ae3bcd8 svn.2042\nc06f0eaae78c5d1865ece2601bcac4cc5e345416 svn.2043\n068d245f6921fbf9621013c75316d66d8ef7e17e svn.2044\n8fb999d3f5bcbab6bbf8db652645b41904dd5d84 svn.2045\n66de7bc77e6ce32538ad53fc6b29b4a42917d1b4 svn.2046\n49831abdb97c1e3a2549780316b8d1f15f4bfc7e svn.2047\n8098b56d8664ec67cce682a3d772e18178cc3ae8 svn.2049\na756d67d3395087a6153053370c72615920fe30c svn.2050\n238f7c4469c22bee4ea1a7bb067d1409d49d212b svn.2051\n4a0ca17091a4ac86af6653e5b2b335d9605e4d22 svn.2052\nf4c06ccf39983873b60d46e3e6e2d518c0e3d7a0 svn.2053\nd5db1c938da3f6a3ccdf82657d7804f429537686 svn.2054\n8c811d64fc441dd5620b8f598b61a3eab47e24fe svn.2055\n5968956bb442dfd2d74338a79e3c5a3ae22a41ad svn.2056\n33ff8dd7ecebbd56ac5788a9524209935c720f3f svn.2058\n944d4b6147bf9f9370612ae0db484bba1f05f4f8 svn.2059\n041a9ecd544886c62b921ad6c5e49151dbc03a41 svn.2060\n81f40227c3664db09d211108c4f299422ccb155c svn.2061\n3c619ba69072411c7d7bb4f85928ba65e9f193c9 svn.2062\nf8cd05a4727aa1edf4dc143ac4bbc7177bc73512 svn.2063\n0f4c13232fe625fdf98e047b984de63535175783 svn.2064\n62becd49b89dc55488f550b9b972fea99cf499c8 svn.2065\n4bea9f34e2d1150fee22f5ace1085c58ce2a6402 svn.2066\nc89b84ca93a367239d3b811feffb0dab136b26bf svn.2067\n89c14ac310a51319df5fb5f9a8fc63be83da5e05 svn.2068\n53171e03013e411db44e555bbc16daa4f2eb1ff5 svn.2069\n1229c36f49b12c29224af3e0756a3aab899a41a5 svn.2070\n16d243f756c3800665af01779600cfc32a398234 svn.2071\nadf4d38535bc1804dd55243c2a3283a61635525e svn.2072\nbdcea67c819f4563dbaf80d86dab3dd5cff428d5 svn.2073\nbccce50d304c401319db8d9fee64e0ade6d2dcb3 svn.2074\n7716c0932951b795fa431785a535022b078301b7 svn.2075\n661806007bc009a27a1a556f1819949db893d5fa svn.2076\na37ffd13a2b5009f26ef080a2538fb7b9eb405be svn.2077\n5afa910c6f21a75459bd3987d2b819aea088243d svn.2078\n069f8bdf48d27d877e138c4d517ceb54026ff6fd svn.2079\n9fbee37a30d59e12176d7451ca5aa14683282f68 svn.2080\n9400082af4a0d667291c707f5601c3d0498d223d svn.2082\n3de4e0a5b9dba254e08ec5688a41c9d625541b01 svn.2083\n6194d5617f2acab57034eea80e0cdb13856c6ad2 svn.2084\n3b8de32da4530f602eb9874086243860a69a0bf9 svn.2085\n122c36ff94bab8af83eca74321486f2ee585e903 svn.2086\nc76d77e8d2eca92040e18657231aba7609f36a99 svn.2087\n546a063417858880751216ea862aa0a5f0151504 svn.2088\nf7858ab1718b0e846ba05a9649d6c253f73014a0 svn.2090\na56613483e08307ecc4db52510fd4fb584e438b6 svn.2091\nc40625a2dc5d5e4361b335952ce95e5d76540595 svn.2095\n7c952728eaad816c53655a561808ed62d1ea9f8c svn.2096\nd9c88a10849e43671ebd3d8a4405dbdb38895fa0 svn.2097\n225eebff5a4c9e4e3623048bcbcd887d3c0c651b svn.2098\n672021bba919b0b0ae0b52d5dac3d49f108b82b8 svn.2100\ncb1deddd038c35335ddfa5edce8fef213e1bdd52 svn.2101\nf2f43e71cf09d5c9b148e043b43e080595412841 svn.2102\nf60253de590bb8a7b5bf17fe8f11b2ddb11899bf svn.2103\n3419413a42e9287d0dfeb2b46546ed77c6c4d497 svn.2104\n3bebb942839bd8d15518e54b830c4d9b19827ae3 svn.2105\n6dc143f5ca62c897b0208ea53e2d3a0d7ceecb5c svn.2106\n3e1004fe3ab49176c1f03e0f3fb8f50f3133b809 svn.2107\n852e301f19e9ee025a19e806a114e7f46cea91d2 svn.2108\ne1a6b30a49a2de92e79c99c3817f2bfe3dd948e0 svn.2109\n3b44c18b9338b8415aed0059ddddadbe89219aa7 svn.2110\n0bee7015571e3558527589d0dd06412bebc14d86 svn.2111\n0ef96aeee0b875af9c8cb31539f1f3a5955670bb svn.2112\n0110f434741bbf8e275c765dd40504b5d330bdb4 svn.2113\n7a4420e26aed45f2bd12b54f921bd2b7119718ba svn.2114\n8d337bffc47e9637ee9f3e1036834321715d0a53 svn.2116\n0a25853c6e256b72e56c7f03e6ecd9820b321201 svn.2117\n1a3ae5142d9a1f0febeb8db5a94d68b241b732fd svn.2118\n67a7b5eb32ff48548d0435a892080ae04db75b7c svn.2119\n699af18daca6f5fba908602c44d050674e83658b svn.2120\n7a0300a167a1c37d4d8d7ec330a4dfcfe948666a svn.2121\nffb2e676cc13ea4c3d4ca986fe355e63394761c5 svn.2122\n252257b960c19e7dceb9c7dca4f4653a4bd8d2a0 svn.2123\n546132dde95a378ee481fc5c4f1d14e2d6d3f694 svn.2124\n2d21315ede8924986be58f17226a08c6bd6c5947 svn.2125\neb6e35f2067211f7582922908ef81104028fbe98 svn.2127\n561fa3b8c05256cd5f1dfbfe3d7cbabf350beb87 svn.2128\n561fa3b8c05256cd5f1dfbfe3d7cbabf350beb87 svn.2129\nd2eab0792232bb9e246fb8d37848c5bca53eac35 svn.2130\nc311a573ec35d76eca2de3945f52e2bdd35f7926 svn.2131\na49834082ff5087a48344e84f7d8293290f61a94 svn.2132\n31571188b5a7996fda601f31d38d640d288a3e40 svn.2133\n13c7bfc1be1fb7a3a3344ccc462c3b846e1f9236 svn.2134\n7bc5ded91f9119e37106dd2e80834b1cff5f6dc7 svn.2135\n750919b1a8634ce61008bfb6bef5492a0e472843 svn.2136\n156105546e98da7f9d0a349dd85370347037d836 svn.2137\n5c9ef0fe5eb1d66539c504f70cfe2db0129816ad svn.2139\n8c6e882098ccbcb9873449d0d368e59807a3254d svn.2140\n8b56ed21d641febe56c2c5161dacc040201303c1 svn.2141\n1891d58e24ccb453f235cd322a801fc1a5a6927c svn.2142\ndc5d4a4561c3c7b4782e2d123f15e8e6419f3e16 svn.2143\n11029d06e3de5aa841d77b072f1445d54ee802bb svn.2144\na4d86e276b0885a4c450c9925eaf9dbadaa8d260 svn.2145\n08b209d1ae7956d75ebf93767b681b0110539529 svn.2146\ne37388126c2ac6efbcf56753019d13649d548913 svn.2147\nf6f3f9aec6ce679a831bae665f7ac8d3b3c9de0e svn.2148\n5dcdbe69118178fb4696575287cf1c25d60ec741 svn.2149\n77b4aea2cd7f663f7cdfbb9a0fb19a294ccea9b0 svn.2150\nad844b51152801088e7125905a010a49ff99f68b svn.2151\nf7f5c399b94e52918436832075fc0aec449f9ada svn.2152\ne3ae3775e1a64bc1767a9a31f158e008a53ed88d svn.2153\n1717173d7b3d5f3afdd0ddc26006c717d0ecad22 svn.2154\nd6d17efc8a63bf6c6657975a62927b7c4d6bbaf5 svn.2155\n88ced1429e7f753dd492b96a6cd828cac036f43a svn.2156\n5cfbf55e1fce6ccde496fa27337edae7de45921b svn.2157\n39afbc3566aff289fa67d28c22df8858360afdeb svn.2158\n4e1cd228733c4cfb98c77e2d38644d969ee50820 svn.2161\n63e79b33259644f9ee8a7b0f5cb2e641f41e8805 svn.2162\nf1145bb0b53962c8e30bef16b3f1b4cd6a455740 svn.2163\n131017f5cfb12a54fbb693fad260267bf5c70d7a svn.2164\n3e72eba07bf0e36e25a1fa57d21849a8fd97137d svn.2165\nca3b79ad952643b8ad99b86144e115c17fbdceda svn.2166\na8bc9a057973d76abf590ddabe59e0c837a82127 svn.2167\nf5c8a11b3313c539b39f41d90e718f6ae3b87dc7 svn.2168\n3809a2210dc3be9ab1e59c9a13685c75ddff8a6f svn.2169\nb99241772845d7dfdc4d4cc5d31036cee7f79b4a svn.2171\n8395096a5edfe80d2b18893796dca09cfd3243bd svn.2172\n8a2258a6f631fd3040cd3eaf75752958047a3c01 svn.2173\n30ba5d77a8c40caf6c8481119c51e58a25df6518 svn.2174\nb93c6534335efa0c953d051f810cbf7eb4538832 svn.2175\n2ff4aed93ee2ef654c80ea31b36d198fbcab8b20 svn.2176\n90a781f52d8c328637719ff7248b9e4fe770fe16 svn.2177\nca46c7f4e8e6702de75656a9e2661d25c5552ca6 svn.2178\ndb250d87c2a48a954afbde20c957a4fc422f097c svn.2179\n88a50bea150269b58f7ecfbf39a8fff7068c493b svn.2180\n0cff33bf15bd1650dcb5b6cf280ded8c74dc4530 svn.2181\n56cc287c9825533cecd759a5b27feeb1473b9e83 svn.2182\n3c9a9c7f77321e319575e0a760390432bb51a180 svn.2183\nd9098edea0e2f281838807d3de290952b564ea47 svn.2184\n2045bd7b05b8f4bc6e33167efeb99db5ad6a308a svn.2185\nf862ba47427825d5446b95d44df7013a235d8625 svn.2186\nd047ed9a0b0062610849f8df75376a4327ef3264 svn.2187\n3ae09e0e1e5171c27bea8d8e1f869822939bdfdc svn.2188\n2bfacb6b83680e208e22872689bc00679a5e8af2 svn.2189\n08a8de67a285e645033e13bb0ad81e065f31d098 svn.2190\nfe6b75149b00f88cc98c7e6cc9b9fd882ed65314 svn.2191\nf2a191438e25a9c4f348e7e22e03d85f282a2fbb svn.2192\n61e93f428d775496635f08059b440e02e87a4247 svn.2193\nfe563068adc3cd4da9fbed4a82419a222efa6760 svn.2194\ndd3a41890c65712c94c4d8e7437560db97e7d4f7 svn.2195\naf17424004986ea007bef97c1ac3cd21665be71f svn.2196\na1a5660699df49b9e5009f40cc33f80ea1b0ab68 svn.2197\n9fd4001cc2500aefc729812c3c34d3e5be794556 svn.2198\nbfc8884d78cf3a696903709c03ff3869105d9421 svn.2199\n97eb3b2c3fd4bc09fa4f7b43b18d1dfed53e8ad7 svn.2200\n740e59629d46ad85ec3eb66d2d95fdd3ea0834a5 svn.2201\n83e1dc84043a6abc24de781fa5f9402e804870d8 svn.2202\n5f4b3a7b46030e2f5fb0ece637980372436eb0d5 svn.2203\n373089a363871bcb81846c3952ed1629e3abbd03 svn.2204\nf4eb65670027f415a386bd864f42ecea1a7506d8 svn.2205\n149601070ed5db51f67c186c16da1aa452b9483f svn.2206\n97aebc6837749d77b4691be3350852c84de69988 svn.2207\n58d47f9d927323b72ce8950b69183ce5cc8f56b8 svn.2208\n5085cf5c2e509de909d0dd72628a952fe062e762 svn.2209\nfd529cba7efbed27ff30f5d15ac7af9c9351ccea svn.2210\na6ae221faf21830626f68bdd6c2d860661fda679 svn.2211\nd21e0a217c729f8784f85a15c985cd4d9bbfb3d4 svn.2212\n60c0ab379694b4bf502dfc5addf2d7ddb00e7110 svn.2213\nab48868700b359884048f4b3cbf877de55e36ce4 svn.2214\n74d049469a05b208cc0dccdf08f9b70dd3d7eadd svn.2216\n07a2a795c50289837bb34603e8f290f5ecf40bef svn.2217\nb32fa9d26038f04bdd8a41caf6cf2aa510ad24be svn.2218\n5812094d99c238d342e98d34a22335b016513461 svn.2219\n5f483f764544f549747deb2241337aba0441bc09 svn.2220\nbaed0e6f6412dbed158778b95dffa18c7d5bd957 svn.2223\ndd367d1adb1391c1a127dc7cb7fd360158a2718d svn.2225\n31c5cf0057526673f4c6e1e0061f4cafde0cd725 svn.2227\n357f7de30a7d56225d9f439d326d7531ba9256f3 svn.2228\n9c03d039624b47079614801acf6a6cd5ae35d304 svn.2229\n98c90349d84a0d0970d54df5509ff20358883c02 svn.2232\nb1d4bc8a9f278cf5554734325554f09960e36bc5 svn.2233\nc5a8388b13810fffc2e5b43f48a70ad8df7ac687 svn.2234\n08b5f92f148f6c37390ddca166ae94363da4c9cd svn.2235\n54f4df52101b1bddcfd6b134f7f34072ec681b7d svn.2236\n9fc59d2254d1a1fb4eeb774249af17fbd5a9deb9 svn.2238\nf9fdcc7c2eec8edc161aa9883c4101d4f6fbed6c svn.2239\ne7e67235a9e27c4a2fd397811cbd8917fb8f0b24 svn.2240\n6479278301183dd2f010b6a3d61acdf6f0c76730 svn.2241\nd588d96a663a5dae14bb2a9825063977ce075aa1 svn.2242\n06c96f5d2dd7619259d5a73d573dbacc58fc1756 svn.2243\nc2eb8c16c577164133915e27027ebcaa2148bfaf svn.2248\n7cc2ed36a90a2a84b405b58df04861035d448d1c svn.2249\nbc711d3be6ffb8e37046ec2fe9bc1dcfbd1e8d0e svn.2250\nb1623199bc6bec0f511a39523ba13254d93a18e9 svn.2251\ne0adee40bc7e8c312010bb00d3f6162a1afd5587 svn.2252\nbaf4223f226ee7ef16b5f6aec9750c3aa82e3c75 svn.2256\nbc9e9420209e7509a2aa4f490d256a3e2ab34bae svn.2257\nec5f7b0d9d7be9ee50a022380114177119824801 svn.2258\nc00cc9e9f1d4b3c7dcf131d76cf9d4f868d51c62 svn.2259\nb7b11926a4dfc6ffab2919a818f536ced21ba4c7 svn.2261\n4578e160cc76a9feb3c0f1f57ceab84737f66043 svn.2263\nafd3bc80d3f0eb79df03191282bbe85398e18abf svn.2264\nb69e0f3ec41f5ae4fc27c753e18173873412bc4d svn.2266\n5be80788c4be83cfdc1d66003651a07a4c7439bc svn.2268\n6c9197f6d6ecb1187b60d598ff854943aacfe2b1 svn.2269\n92981a73a88d3a41ef495bcc4b5e34e46f01caaa svn.2270\n1b0046ea85245ed656970d485a52d5401a0e1631 svn.2271\n55429f5eba88a352985f97dc4abb39e5c2038cb7 svn.2272\na71d08d40d116dbafbf90fb25cd9b9bb95af58c9 svn.2273\n913033b03848711c668cca69aa937521139397e6 svn.2274\na5e00f4891c9031c3eaba5e6e6f1e34c40ccb2f6 svn.2275\nf64b3bbf2e34e37946548885fd2af908ae6b4007 svn.2276\necf45396e26337e75c597fdf2196549db723c724 svn.2277\n1d8b73a1e752bc63725fb3f58fac57847f14af98 svn.2278\nd429a2ac28dda8a7a91ad86933e3d14d673a1f9d svn.2279\nce8913e313db5e1359fe23881e7f871a9837c22a svn.2280\nf4f01fab59c84e90f801eb1593d61902c5748d98 svn.2281\n6f6bcd7268c079cc7b96f9c0f8062db68d4f1e98 svn.2282\n78926afe22785d7d9029f087f6da6e782b048883 svn.2283\n9c17d4aefc785389df7e19b8026152c40e8da870 svn.2284\nc63ee48d1b61bfbf1150fe100e3f444addb9ca9b svn.2285\nf36910e80db0d0aadfdce3ce970d1a9229f6c14f svn.2286\naecb1dc857a930f1cc23a2de9974e4a0548eafea svn.2287\n02d185281cf36576d095df4755be2fb6fe804eab svn.2288\nf57e16e14f84239d76e33bf90706263417fb0f8e svn.2289\na9a7070d3caa11d6ce928fb69d6434c8ea907d1a svn.2293\n0d4a0a64a4baab5f80c27dd8a75262b188180dee svn.2294\n489ef04871b42c3cea9f202f39ff7ade00297410 svn.2295\ne9442ea5d26ee8397d573e4d04100b09863dbc72 svn.2296\n4374909dac6b97aa6ea5003300aaf71205a350ba svn.2297\nda149ade93796bafab04ae9352bdb7246d4e5bdb svn.2299\n27398b062b538e6539c44425bb9b2776198896d1 svn.2300\nc0af7d300d7272c815b7d563aaaa062e13aa8325 svn.2301\ncbb6b7c37c05f5ae1af1e18418f6a36e89520e04 svn.2302\n6ba9a81e4ca6f3b2b2bfa577923ff71042ef73fd svn.2303\n574fe7a94d44b2a48998dca9b334ce631b119625 svn.2304\nfcfb5ae9c339c2341d55eefbac9c0b02df5c89ec svn.2305\n051142399c7155f4953b6e1a5a44314e882d5918 svn.2306\n856f70072b2f11401bf9659690b15ba005158e51 svn.2308\n21549712e2f40fe864475a0f7610e84f712e58e5 svn.2309\n81fe87f2ccfe9022872cc3eb2d358f74dd235593 svn.2310\nb75451db554f3e98b78d7be7eafde07f95f8460b svn.2311\n25542d5c29968ce3a608c63d5e4a22b31bf20fff svn.2312\n937aed38b256cd7ecd62df15e874307f80fcbbfc svn.2313\ndec0c57ae28ec1cdd30c25b551b290f4a6e91a75 svn.2314\n146a169ccd925ab32b0c2ce87aa10cf4b5e4da19 svn.2315\na5f30bf318dd377fb69cb938c682da2cba234e47 svn.2317\n091f2fde3abd0627e4a145bec139c2008f4078a7 svn.2318\nf34a67d83b90e6bf2eff5411e5b087aa655d997a svn.2319\n2829b9e1c6a3b10cb123e0f97c292b5be6f92a5e svn.2320\nde9c0f644f7e7aae580d8cbbe3dc86f2d5f666e0 svn.2321\n2b17235ccdff276595cf99bb855453c780007c06 svn.2322\n605df59512bddfb4d1b40d7affcb5b4963f5408a svn.2323\n9a1710fa2ca7a1019f5b6e13998edc1297058871 svn.2324\n10d3da5aabfd5e39c088768b1c06e6489d9ecf63 svn.2325\n4b6fe91d798a54dc27bc6c40df529fa0d23ee468 svn.2326\ne4063bc0efa174c364cc06eb436f40b8d3e146c5 svn.2327\n39c0e2a58140a0295697d0fc6e5e7a447689cb0a svn.2328\nc744867f5ea47b98ed55629da1bc02c183719092 svn.2329\naa17aa3a2625a9c72b50bb12f51fe54aac1da290 svn.2330\n885a151c410e3a0a7bfb98e52d2e8b8cce60d9f2 svn.2331\nf5cb4d2fcfe6099487c80e35074b69b590f83813 svn.2332\n87b01e564d87c9c409ccded89f59d02c179ff39f svn.2333\n35a7376b2a6d3427e978ee6f6f7a9d488a6f836d svn.2335\na449d93beb4cc7b537141a106e809aadc51957ba svn.2336\nae170d57b057f77fac26bc6a12d4091c9afb7239 svn.2337\n668727aab52f80259ce1bb0c1600c8ec11102748 svn.2338\nd0ae1da9d629a13a78b3cfb0d2ae205170b8c494 svn.2339\n245880577407bd99750ed479cfc36e6b5bed9bde svn.2340\nc0cb17ce6608d0423a5d154b8503c90c94b140ba svn.2341\nc39462393e1a56b002cf8a84f4a4953882507503 svn.2342\n3207afec0be90454fd39db9d840bfc791160dff9 svn.2343\nc3a63400ca52a1948eb24aaa16b9060d97b58596 svn.2344\n77d21617b2517ca1bbd4ca50ef1518530a31c7ab svn.2345\ncaa09fdfe640c5cf32e247687cfbf8e3bb40ba4d svn.2346\nec1ed14841d4ba27883ac2ed29bb5ad00545467c svn.2347\n262f6cc306e33beac382e745741664c6c9d962aa svn.2348\ne13c7b260177e890590d817e3186a16138c80043 svn.2349\n70ca6e9252dc721ae3f9b03b7524020d07370ef5 svn.2350\neff332a37482ce17e9838c71d3058a7937405793 svn.2358\n82c1f2fe9bb77a8c5b491337bdc5d54e18ed6783 svn.2360\n6632e12e6db5674362509fc9a2e3ff3dcb87044e svn.2361\n38cc68cee9741fdcc0338a63c1bc457b1826f219 svn.2362\n6d349c0eff205e9b202d458a04bbbf5e3f257e73 svn.2363\n583fab531d7333c297d70ac23c34994f87e5e3fd svn.2364\n4f043459ff80a52a5c9cf605392c0e91eb49700e svn.2365\n38c3556ac3eddab72b95b678c3e2e32e23051736 svn.2366\n6a9bdc8deca16aed7283f3605622c2fc702977d4 svn.2367\nec01caf59e670efddd4423a7fb672dba1bb73bd2 svn.2368\n1872905065ebc085e52e28606e4cd155a139cc34 svn.2370\n09e6bc9ffe33854cb38cd2ae6e210df91326ea8f svn.2372\n73406b91ca9b499770b20980877c64c400d16ab4 svn.2374\nc060007affab05cee427e6ba25150c317138a519 svn.2375\na56887a1cba4191f95c9bad40feb0e1927324239 svn.2378\n59db4eb30005686ab595a9907c05d838790f236e svn.2379\nad94da7b2fb5bcc914e5806d7799c5a15d87fd07 svn.2380\n39527d7910602ceb542503e65c69c3154fb564cd svn.2381\ne842265800b8ceff90874b350f168fe33fd514ee svn.2382\n458ffd0ef94409fe2d34a144c6150b36ce32043c svn.2383\n21772020f53ac7330c736fbdeecda3e5880e120f svn.2384\nf1f3399290465a9670dff9214dd489f66af93e19 svn.2385\n64f4e4fabc9f3f49218aa4c08e3cdef882488bf2 svn.2386\n447cf0c8a54381d609b8ab2d940df3724114c6e0 svn.2387\n7555f1d67df6ba8c11b2d5c2d772e0b112c26a87 svn.2388\n795b129fecec57696e71fa175b08fcfd0a237723 svn.2389\n5db535c6859fc7916c05d957e4adca6c795389b3 svn.2390\nefbeae71c7da451c92c3c9597858b40031b95c11 svn.2391\n549298651c5e64ee60f619573428c61808095a0e svn.2392\n5c5b254d723173a0e0bab758f632c4c24b4160be svn.2393\ne2365a21bf7bfc6895f94746be6ff7bd83df85cc svn.2394\n0135bb1d95c7912a4376a9a12252902243058255 svn.2395\n1565cf7bf9c21a883e1a9cab39557f70abd29748 svn.2396\nf95707d6dda12c23e9a2243ae0c5bd6db352a02d svn.2397\na1d958c50055cefb4c12b1ce52bc45ed9f76c705 svn.2398\n6bbc7fa7d711d92a133553dc88d0cebefcab1d3f svn.2399\nc8e06562df102904b13cd3ea0e4e7c809afc55b5 svn.2400\n32d96420e9494a45927f373a37087fb6d0eccc18 svn.2401\nc73c892fd6deee2e1f3c143d1c9c5dcc77975e4b svn.2402\n1e9c766c0e16a2da9c5e6ba43301fd1694803319 svn.2403\n0ac7839a80e749f47acbebe6f3e1ac27c623d959 svn.2404\n3e33f29cb4bd9f4d52582f8d7eccbf1981ab46ea svn.2405\nc5e322dac059e4d478b97931f8d6439b2aa48101 svn.2406\n6a91c63bb642e26ce81323549b7a8f36cab00e75 svn.2407\n0bbce282037c25fc32c7910797d94316b91e2459 svn.2408\necbc4fc61647a0578ee47def4ee432e5436b00f7 svn.2409\n986185bf4c5e69638618b7f35b34157a1a6cf65c svn.2410\n4d0c33fe9fde0d8dd8b7e9cf09538ed9310cc0aa svn.2411\n30e5f15bc199b8e526d09750f443d2d5a9863696 svn.2412\ne097ada3d455ac63ca3ac82782b75ce9286825e8 svn.2413\na2c13ce4a4c61705ccea89e98a546317cf3d11fa svn.2414\n42f405de53985cb7282393dfa0c5f558800450ea svn.2415\n5f3d078bfb1e8ae9534782ad0c088b1793efa8d0 svn.2416\n63fe39a5cdf4c182707004a38a0cf77145666ca8 svn.2417\n846a18ebcb8fd1bf7e1be526743482d282c7f4c9 svn.2418\nb147e8fc761f3bef62d75679be43e02d9010a681 svn.2419\n4fcb1c2c1f891080afab44996115fd051b72b0a9 svn.2420\n1341f5440ed0e69e4e2b0cd9fad621ed1417d1d4 svn.2421\nb6608513434510428c38f5844e34cd571af65fce svn.2422\n4584a9f8db16bb73368724a211addbbfc3be601e svn.2423\n8f2ed1124036697bf87830590e52dcfa66abf147 svn.2424\nfcf7673471ad96abd67ec43e7414c9644e24139c svn.2425\n718c1cc83f34693a959082926a240cdad3e0a257 svn.2426\n625321ee14a93ef43c1ac526d5100341a54bfe33 svn.2427\nb619c7cb019e7a032c09a62360cc5673c3ecc27e svn.2428\n009509c36e4cbd140792e543c869d97387cbbc51 svn.2429\ne353fcd76e9b0909934ff847a60c74332da06ea1 svn.2430\n9ec54c4cc5e0883ff2aa5732a21140894b8ba5e9 svn.2431\n2db35497a3ca5d39d890a005752ca1b0802d3b0e svn.2432\n54ac81d8e966fb5b3427c8d4381be3d37af4de98 svn.2433\n0595054d9290a8abbece0a3cc64ce95d96737530 svn.2434\n93e7aee65c10ed1bc0067edbdb5770784878bbc4 svn.2435\n2e5c332a537adc9762ce68cca9e19b1d1fa53566 svn.2436\nafe65935e5fefe2a5ff5473d1c4f0e966d544cb6 svn.2437\n574ee8b3d4ce61dd41fdb2b8f1980056cdad3e63 svn.2438\n816b5183a0598fbfc958466b7c2d89261a9ce42c svn.2439\n596503cfcf3dd914e3bd93ba951ef2a22048c3cd svn.2440\ne864aee80729790426c5c1938c0410c4bfb58163 svn.2443\ndfaed4e926374777d35c3c897aea7ea1eb9c04d6 svn.2444\n8cca37056ed6af38f1b0c255f76f1b1bff56706a svn.2445\n6be80f408c911753a097e8a987fa40eb3ae7e727 svn.2446\n7250a0ed471d646125cea36e22226e31f4056f80 svn.2447\n42572f0b7f2eca54e0dd2593b2b70c41169132e4 svn.2448\nb1ca12bfbd38d0c90fda8f995c87dde52d252e8f svn.2449\n8661d02ec6e67d5093422dbb278b128e5232974f svn.2450\nd680591fa718ffcf9ccd5ae8aa80ab22bef76634 svn.2451\n86a2afd347adb5ed93985750d9b3f3fa3602456e svn.2452\n143e19c273cd5fcd63d6201283d5fb6cec054c96 svn.2453\n20f75ef57e3bf70864e8355261d20eba50d643dd svn.2454\na097124410a316fb576207347b28a61e827c45c3 svn.2455\n087b89b29349b8a2dddf960b3b7b8a084b6fbf85 svn.2456\nfbf06f05b96f922f698e7255cf4a796f4c94f341 svn.2457\n270634a08477ad1138b9f55d0aaa6b017324c6cb svn.2458\nd6e0373a089de2838f9e79f38eb7e2e74d037d19 svn.2459\na0a300f3a632c98df98c6bd51f4adace965119ea svn.2460\n05f89336f98f8d39d75e0f48d2930d6f16c07c9d svn.2461\nb4920637e817c998476e4c081b13e7f097cb9b8f svn.2462\nca706b7be4812b6f87fd585c7d428e461cf57a37 svn.2463\n34fd921c1031778afeeb95a96f967b46ad5a3c67 svn.2464\n7799e2f5bc587108977e4d0f41de61bf413ebbf5 svn.2465\n99a5933f34ca74f2a9b81bd7121f08f2bf246e7c svn.2466\n02921c3d3f74a20f758bfec1ae3b0266dc9cf30d svn.2468\nbcf5c79c7dfad21b4e95e70a3550b788b89608f5 svn.2470\n11e7cc083d6616724a57f230d731a8046d7cd8dc svn.2473\n0f5f4190b097af4af19470ecbe6a9446f7ba1998 svn.2474\nba9a578ccc408a6a1efc9c28483102c531500de9 svn.2475\nd73145ac9507044354af6669aa8b52927d40b6c1 svn.2476\ndafd18493943470e578cfb1477bf9d70ba1d4600 svn.2477\n95ba697f718695b6a808b3e7574a35e6efe7248d svn.2478\n1e829aa0a11644897fef8b69332110f3d2692546 svn.2479\n60628e35af7fc7be9aba97341d91f76ed38d4274 svn.2480\n787b20c25aaeb7883f933001c6c44cc3153d8696 svn.2481\n53a32940bdcab01a86cba94c38fb71da2849e363 svn.2482\n2a6499c46f2ded47f1027ed12b8bf65c56394e13 svn.2483\n138cf99a133b5f41c065e51aa5d77341453d026a svn.2484\n6da04af41faeaa4913752dc07a095848100a5b71 svn.2485\nec47cb93e9912f93c927f7e84ba336e34a5fbc5f svn.2486\n74ad09ff7a9b20d2b90595ebc89d4a3e84b93cb1 svn.2487\n8073478cdfed4cbb685afc2f4e5668db7ffd8008 svn.2488\n9b9e5ec72347898003325a3a72a926ea36499ee8 svn.2489\n1ed26be9c3d0d6413a39c18a21edeeba2d528b6f svn.2490\nb5a4a80075a9d62824c6b18f312b4cbafb6c07fb svn.2491\nd44d4bb9f4cd273665c30d140be44bb177772fa7 svn.2492\nbaf8ee0706df6b92422d7429990851b3f95641a3 svn.2493\n254fc9a8df556d714d2fd977a2de247328ae4a7d svn.2494\n7b4f6ff915fc686b49a6652437dc37307e66f4c9 svn.2496\n7fd09cd71a53f0e2d40ce164aa72954ec8597627 svn.2497\ne15116c73310baad788708e9181509c687ddd9d1 svn.2498\n75e8b2f24e04332e62e1fe5deaa87034c66f4c20 svn.2500\n623595b913eb5f5bd6bfd9a8e75692ab96481836 svn.2501\n37c93c74d1f51201cf7b3f97fdddf5932a380fd4 svn.2502\n03efed1aed0945b0fb3578b9c19907bd41f1dbc1 svn.2503\nf3fcd52d75e665d991716f7a529ab8f54c5bd186 svn.2505\n52fa4d9486ed56e89d62e6f6fb5c7d662e7070a0 svn.2507\na9f91858cc62b4ce3f6f893c4936521149a0b168 svn.2508\nf0bbba5b3e517d3d97c25b66da1bbbc24eb660f6 svn.2510\nc646cf60f8164a204222dde5f648532eed5e98a1 svn.2512\nf4b77529a4efadf227b12457e8ca35015ff672a9 svn.2513\ne2e19922e31871ffe8631fa32232ca696b9a99f5 svn.2515\n52f21458e19962883b27deff0646518d7b84c0ee svn.2516\neb9b00b357435b61c2afbb8fdd32e811509827b2 svn.2517\n4a6662eb793d34b661273d2c5fcbdea5365d75f1 svn.2518\nc389ccce302fc483e10b2bc00b19b4d1cec838f1 svn.2519\n9ad973e5e61b7c9322cbeed2c7b89f6dabe778f4 svn.2520\n84e885dc0260a9edc07710f2664fdafd68808f28 svn.2522\n235693e5c71ad4a95d9bbcc34bb350c85decee0e svn.2523\n2ec0ac908c710f78955316a2c0620d9f51076a16 svn.2524\nd5f0bcc4c190aad62f90dcca38748b1106ad6dfa svn.2526\nd279e1408768e7e3443ab9d2bf438406ac8c66df svn.2527\n3e356f679eb9f0c113dc48b3c42ebbdf71cd01eb svn.2529\nf057e0b42e38ff0562da8fd045878ee0db27ebda svn.2530\n83614ce69da3f85b2fac42865b659ce8bc29d543 svn.2533\nfdf1cb5035db91cff7d778150ffbcb3b06d79bad svn.2539\nbd0954583f77abe79cf9c242a368d7093c65c444 svn.2541\n5847fcc2406bf77bad3bd47279728fad78fb8560 svn.2542\n47e9392ab4d9e383f2ed1851cad8636d1c5a1803 svn.2543\n54b5023c232123b2e39966cad627227cddced4a0 svn.2544\n05b98c178fc69ae94243b17b5c68194c1e064cc9 svn.2545\n58096012981598c18c47d0968dcfce11e97888f5 svn.2546\n086768a566feac1bc374a94003967dca1dee7705 svn.2547\n3516376b1caf6ee89026ffde0dd075f24fe8ea19 svn.2548\nab82a0130a1d251c80f277b3a2f9b62097995120 svn.2549\n9ee05d28f0ce68088c4811e5887dd09c3fca13da svn.2550\nd5b8334bcff0bc13aee139f97d670d71b45e2887 svn.2551\n2bc74f4dd57ac83336f6ef5fba44c53a3eb71e4b svn.2552\n4f66053cd4ca2f87a6cefe4ea179a2dd2929dee4 svn.2553\nf57db45ae13880a7231bc3f0f531fe98ce39796b svn.2554\nce9249db7a37703dae615726672fc455190d0813 svn.2555\n7cd80650304ea4009d5836c741611c16dc22b049 svn.2556\n572790da8d1861f757ce7372d6d0b4609d9e1182 svn.2557\nae475d5a07fa9def4a82fcdc4aaca1872548880c svn.2558\nf2e25c512224255e4b60dfb19563d2aceeb31f0b svn.2559\n9de8aa04ce9dfed6abb837d942e5f0c1c3045723 svn.2560\na46e44f31f75d1fd7218a7573af5a0894982861a svn.2562\nda8edd908a29cd9699e4c0f67ff5fdaeef7f82dd svn.2565\n8da238472a360d6fd746b0f1bec2a8c13ee5be8a svn.2567\n048b51455acb8fe6f05788010bdf8113bf1931e0 svn.2571\n2e411f291e5a6e7574cd7ab80363e3c8d8f39dc8 svn.2572\nbc5a8d5b8da7ad9d7e451cd5a9ee946f23649800 svn.2573\n33d7d44ba38f50fd066c391d80c489bf529a12ba svn.2574\n93fd9a07d4d27f1daf2075d3a20e87e8b2fa4b39 svn.2575\n5dc90d0db26257c151125c83cc95598ba9395a71 svn.2576\nc4bbefd3e4e94228d1dd79d1054b5f9e371cec6a svn.2577\n8cdc8a821af1de0de242b7ed77d8f52907f7037d svn.2578\nb75d96aa4ac6bfcb2052fea9b2c029e1a7d62f2b svn.2579\nb84048c33fa4f226b668df37a47d2060e9b3a7c4 svn.2580\n2bea1f62bd8142ba40f938c180eaaa67e4c26825 svn.2581\n9b27d67783be8239ce489aca93ec051b2a0fb163 svn.2582\n3da7e62190996cab93b88d72ae226dec917730ed svn.2583\n486bb2313bf90a8889d2f72c4939d58100bd025b svn.2584\n1c43bd625457700ce5246124b76b83cf578ce5cf svn.2585\n0a6c45c1a0b18cc51b4cbc2a20cb3b3724a52946 svn.2586\n992f79ccec40556c88c2c36f769121724168d641 svn.2587\n07c0a06727f6cba4b9b580df72bc76652c48775e svn.2588\nfe873e53edd2348da3eeecc254858dc9b134387b svn.2589\n75676b1867fe11d3eb61559971363531a262ebb3 svn.2590\n9471ab9ffedc299878b2cd879d96d6edb0e0d8ac svn.2591\ndc3b82a4b14b65185130244f3f8263ee30540169 svn.2592\n473479ddd9f87c68beab56036a600e857805dfb0 svn.2593\nb42b4b25393567906a95a33dcc2f11bc0b01209f svn.2594\n48805146dde49e6af42f55824bb5ed27470e11d3 svn.2595\n4d0eee3f7d771bee138eb00a1065704033f104c7 svn.2596\n865886bd7e46ba786edd77dccf7a28d58814f90a svn.2597\n3a2e680accec476471db0e65ee031a3c0b38477e svn.2598\n53aae9632f04c03ae0b632ab2d8f91d7828f0100 svn.2599\nf3f437997350e650e1cb0518b9b0d0f55a543701 svn.2600\nabf01c11f3502df209445030d535b2e063343592 svn.2601\n1ebb47e0feddc306643f914250b1421cb92b00ce svn.2602\n28c63c9807ce38b3c5a1d2a39c15975e5c7f0865 svn.2603\n64e28761a507f8906f41738642c4887dd3e15e0f svn.2604\nd12dc26a1a9443f9c35a09cb4690fbbe561a426f svn.2605\n1506d15e7d66f801b6796c85aad54327417baeaa svn.2606\nb04772c8c768320ab3e5aa14034bbb7daa2fcf06 svn.2607\ne06ac3fe85bb6a5bbde5ca6747d5ffccb7c729af svn.2608\n86ef0762e32eabd66130428f7c80718b83aef3f6 svn.2609\n29d5867b2b64ecfd1b377b63d90b32d0f728e3eb svn.2610\n99fed1d54c181192a3a5d73af6ba0fcf7d57864a svn.2611\ne949077639fdbf6ac24398002aa039d99ca430ec svn.2612\nac473933f396ae5c12980223437c9ab9add243e3 svn.2613\nf195a630dedbed0ff4a83f46f3603bef86ced657 svn.2614\n5b1092daed8747c50bb4c874c52b10ff003b0dfc svn.2615\nc34ceb57129b823f408dcd063f57d4ca309b456b svn.2616\n129da35bae82e9e90a5c7a9e949a6f9682e1cd36 svn.2617\nfe5ab876ac57c8b2befa172d566fd54c6d4d6e07 svn.2618\n3dddb787eb2fcf70fcbd26b958b9fe66526b642a svn.2619\n2a85f3a5607cc51497547988ca5c838303dc0300 svn.2620\ndc14ab46b58db704a71466b8b0bd545708619543 svn.2621\nd803c2dfe4c01c15e118903cf6af9b4f7f376a3c svn.2622\nc6e9246aed2156f7077d5162d224e37f43217444 svn.2623\n4dc285df3f5eaf786789d3cb24416f531f889c5c svn.2624\nff2219de6f2a06524566ffc16bb8b4f0db4714f9 svn.2625\n27a2115511978b2c835f0f4c2f44fb273100da28 svn.2626\ne50dabedbdd73cf07b10122f17a425679c36e25b svn.2627\n72f0e2620fa0f38b4b970b6c5667ba3c646f5db2 svn.2628\n1caaf25883b122a92f37eaf680fbb51a71c2fe40 svn.2629\n6ebbfcb31b62479ae04299b66c3cf5e396c32ae9 svn.2630\n156e95827106b351c3765f2b1464c65e59984bf2 svn.2631\nb998cc4a6619356007a0b84fef599bef7dfc1170 svn.2632\n389f4beee54fbf08867fbd0542681293996c2970 svn.2633\nde2816fc4199c09d249ad7c08190ff0de79b7499 svn.2634\na4e2c1bb3ebcb9bbd13999576bc05f7068e4e782 svn.2635\n740026796fc67a67408b3b72f47fbbac7284cc0e svn.2636\n84335741fe466e1b95d4943e71d57c650c81c445 svn.2637\n65f741781e316520e6d93b003dc51f9b58d6c598 svn.2638\n205471ef27960202f19fb6ded5ae7db3d837ee6a svn.2639\n2ad983ce9d76c6c7793b08a86be19c7040dee0ff svn.2640\n910dc5b15587670ff04c9bf9a79f597b0e1445df svn.2641\n275c2c61b24ee9f788e5ad8370f1d1ee88cac147 svn.2642\nbbfd7bae22c3c5dc4b8f02d585b31b23fde4258c svn.2643\n2d9ef353bfabf0b0f430f743f3d66c55b17882dc svn.2644\n0ba49a0853920d3cc885e5094b26a9acbea6f458 svn.2645\n9cc74dc912d2da37d2647484b9dad14ccbea7a64 svn.2646\n3bad08a17f621174cca7d7c1e2d95f2a6b1b7944 svn.2647\na5fc9826cfb776abdc7468bc11100741b86c8b3f svn.2648\nc40a74886e37fc36dd1a57e9d005b07305b8e38d svn.2649\n50f0877b2053def24ce4a0f8d09f51e5ab4dde55 svn.2650\ncd5ef2f1f8ce7245ac3205aa1a1bf6195769aa87 svn.2651\ndd313de79ae55400f4e5084af26de57aa21a2d7d svn.2652\n9e9f98517ba90498176e3e94bbe8fa80730a9dd1 svn.2653\n07c6ab676273d31291e28a244072f4c7dd44b2aa svn.2654\na0df8c0456023f5053baa1ed35e09db8a4ade70b svn.2655\n89b3aca9dfa2bac9b20d5c93e0eee3c748f1f8fa svn.2656\n57ee536dc30a60ef4a8766c95dadd993df15731c svn.2657\ndf623a58873a5f6b9bf194749afb4470e3477eb9 svn.2658\n5d8bce5ebc29b39ae28a8f1f2181f2d5ecaf1b35 svn.2659\n724697e991bfc1bb640882ec6b23d0718e64bddf svn.2660\n9003cc00bd68f8d2a12e11fce0a98cd9df728ce9 svn.2662\n8846084caa73c1b5af488cba80bf8c57bb35de2f svn.2663\n69d174fb2681306a65fc0a2bf9cd3cff051fa5ff svn.2664\nf36022f51162f28dcab3447d0c35dc9c359a2f47 svn.2665\n779f336cb7c724d3d94e1db88aae2049327aa44d svn.2666\n66ed316638b1ac5d542dc7ed00e5d345e5feb19b svn.2667\ne7f94df73cfa49dc9eb7c1c8803f4466729a5a05 svn.2668\nf05de9d401fc883c132cdbed028776041f17c9b1 svn.2669\n162a2239225b4fe733611acd4e1a78ce9c04a204 svn.2670\n95a38bd3c2dc44919914e4f68afe1bff2df769e8 svn.2671\n2ba42b05e6530917f6de0edd974492e245fec376 svn.2672\ne1add481b60e4001803f30981a7e50bb1d3fb200 svn.2673\n1e892ffc7d9a17725ac369682132e5fc0ea86243 svn.2674\n2632b7da21b0132d05c58a657f15e0f1b7b350fc svn.2675\n54d8d7e964372c1e76f6748bcf5849ff1df5390d svn.2677\ncf0bb4ad5322b0398e5c62ca9c736da7423b6767 svn.2679\na40b6ca2572a36bc728860f57ae30d00485cd8a0 svn.2681\nbd918d1b979bc528eaebacb0057a21b1135c91eb svn.2683\n734ed7b5dff6ae488adfab1944773cc1ccf58cc4 svn.2684\n0233a12f89de4824214e11ab475b40b1a671d8be svn.2685\n9acee0b05d818ff223608ed54605a872768c3e4b svn.2686\n6ab89f5d4ba2619e34ae21bfdfa74b48f0899724 svn.2687\n687455ba2c3f1cab38e4eb6e3e3913d17e599031 svn.2689\n26a10c4bad2dead13774f7d0e6794389c9431928 svn.2690\n3c5824392b6e03b74ac031aabc9292b523e6b7c5 svn.2691\n8b8a3e81216721efd14ffd3bc7564d77a41beac4 svn.2692\nd3289a2640f2b179c9b48b5941a41aaa94331d4b svn.2693\nbb74d968702be10d3aae6a72a7fcf8bfaece8330 svn.2694\n07285b1d7d70c1f9f0003e4324a855ba2e61b876 svn.2695\n9f0bb716144037b9288c91db4714cff5a7e087ad svn.2696\n41c4903d47d0f6014763e6d08c018a1559b280b3 svn.2697\n547dfff6e1df49b409b18f75af59339dd16a5b48 svn.2698\na4139324747d7d91a71b32bcb4fb5102c650ff90 svn.2699\n2132a94f9faea3bcf106689d9283928d13639a6a svn.2700\n71247bb851de797a6cee97d44ee2a62159a5ca55 svn.2701\n0da67aec08cc4bd95ca19837fcdcd590ab8e3037 svn.2702\n67e1f01137034d01a56f52a9790d7ca0a3268da0 svn.2703\n09d807cc05a7702f1ed138238f57113598febe9b svn.2704\n18fc59cb85d932002e88c510d5d62a7b5bbe163c svn.2705\naa202d993677fe7fae8095e28498f273cb8a5ef3 svn.2709\n3ba2616a82a7876d72fe8457ed050826a710fcc9 svn.2710\n4d84694e70ecbe51f545711d6929c8a3f50604fa svn.2711\n207e5538d1e24f58fa9383c155630128f11b4776 svn.2712\n848f0192128d1f169e3305c21cd5936872c1b505 svn.2713\n53969d9cdb9426a8218c1204697b4e479b4718bf svn.2714\n642990c9200a8fb0ebb6e205010edbda14ce774a svn.2715\n204514a9dc8cc16517f8a373db60fd3726bb6796 svn.2716\n67afedbc0dd745b5cdbad580ddca58834792e039 svn.2717\n2f5bda39ab04f608971493728788da8a94335a65 svn.2718\n1f7cab7a5be9545660c351825639a190b1927b55 svn.2719\nb8426f5383e1c04d7ae1a4d87c53a7cf0bdff27f svn.2720\n03e7e14d9137309068b4ef742e99688a62032f80 svn.2721\n794ba9f9fde6569f4dd4e72bef0b5c99497a298c svn.2722\n1b848b0d73ef06c0ab5b754ebf037a01312c8948 svn.2723\n58461f3b727bee92c1da707bc4886047cba9f91b svn.2724\nb22b36515616c6251aa85102cc52368d00a63658 svn.2725\n1d12de5b9d5783fa5caf5937dbd342b6c8a54f4d svn.2726\nf861044b71ffb11951a5eda4e990682729949326 svn.2727\nc3313786588368b67793f7774e84dde2603384bb svn.2728\n053985944e16cc93204c488e9d3cbc1f12b02f0b svn.2729\n0decafedcd7aa623dcc52403e8956f6384f952c3 svn.2730\nc9f5b589c682e11877567bc08068717fca7da888 svn.2731\n9bfa2690dc3676c7176d65e9a1e8a0768a1650a7 svn.2732\n211b97fab0260527c47551032aa34a29bb243968 svn.2733\nef4afe6939e8d548682422ed603993948a7d706f svn.2734\ncd6a4990f5c428bc2183f32602d67b9c1dd9fb3c svn.2735\ncd6a4990f5c428bc2183f32602d67b9c1dd9fb3c svn.2736\n5eed5ee74d41ad8bc4aa257f434d8482859dc81c svn.2737\n132b25762413ae4ec9cd6578b267d6a09221598f svn.2738\nd464a8d2144e0f73820251c1f189e1bf8eebbedf svn.2739\nd0af5a8a0d6138bff7b7b14484c8ebea677b23a7 svn.2740\n546ebeaaf095fceb21588b37750a8136556f0d21 svn.2741\ne3282a703f88aa98617661f761de45dff813d290 svn.2742\nd7b04cfc06690036f4bd7d6e2b4e7ad17f7e1a84 svn.2743\n92a6125820ac585719b526aaedfd899cb26f9272 svn.2744\n4a4301e598f6eb2373bf39bb58b245c3911b4a61 svn.2745\n94bfa9a0c12fb6e775319d9fcf7fe2a6ea740b72 svn.2746\ncb2c301ed70d4fff7888c45e9d86e8cbf708b6c6 svn.2747\n0c1c74795dd18197b62bb9aa5fed13a09089fe67 svn.2748\ne43c37706049eaca4c8f7a3ed14efb480a0979f3 svn.2749\n88ad5b5e976036b123e89f1108cd153ff7dae473 svn.2750\n7c95cf44d2be2d2f9dca46467d0d50b97d5c440f svn.2751\n06319c44fc8b3d0c7ea774261f541feaff39687e svn.2756\nbd3efb8183800ec0f5d39a708a6ebb42a9451ab0 svn.2757\na144d38cbcb2075a86f4e0aeafccf10101cec2ec svn.2759\na4ba5c9621f62fbf68d4172a223caa5d87999591 svn.2760\na4cc0ad3c3c85ba020d6c1d105bf775a6b8249e6 svn.2761\n286f1dcc0a60cd7fee7dc4acfe23d3919c6adbd5 svn.2762\n67ee72f05fe46c2e2f8ac134327c52a25bd70a2e svn.2763\n25951e0768196eae66332e19d668e2f48315d16f svn.2764\nfc10db1c2531726dd6f1e93e649c4ebb2f668199 svn.2765\n6329f7fb7d59799eb65ad3313f833f09bc39d2d0 svn.2766\nc7469d4c3655e239b7fb936f867523fbdf82be91 svn.2767\n04961bc024dcb7e1274ff2d336dfdb6e85f5e78c svn.2768\ndd718f24c465658fb6c8e8cc33589575dbc62ae5 svn.2769\n8eb5d4198fd46ca72830c8ccf258ed05604d70d1 svn.2770\n7152f3fea7e560a2404bf17c9011c1f5feb88f9e svn.2771\nd995022baf5a39d559662a16873fc782080e5f11 svn.2772\n50d3970aaf40c8d5207dca688bca2e3a203bb270 svn.2773\ne94849d0c2af2fcdafeddb7011508c303ab437b5 svn.2774\n8be6382c54e0bfb207e336557eeb97e3b1fcabfc svn.2775\n39e5424d2faea57335c61949e38b9b4f23484afe svn.2776\n933ee7c7b3779a87ae965500c859068050e66d1b svn.2777\nc07e1999c79700b4b509a4eb33a18571ff999cea svn.2779\nfcafbfd42ca2ec4c9ef22bb3b8a0d619c859ac52 svn.2780\n8333d48ef4331c144e8298c66cd6227ccb86516f svn.2781\n8bd51c89338977640eefc1c4e96e8deb7136258d svn.2784\n9c640bc76acefd647887ebc846ea9926ec7a9d53 svn.2788\nc3eff4147d90e586f4592a3eb08ccca5752b1e10 svn.2789\ne46c47c0f3379277f3b94e176744e1f1e2ef64fe svn.2790\nf403c7978b51f67e35947efc0e52f8106e83b753 svn.2791\n79eefb286e117598965df77d062b86b87f0dea75 svn.2792\n98356f24be39c0c08a62a3919b5b8e89b43c9980 svn.2793\n0efaa06237552b69547a4afa89689568a291705d svn.2794\n71846d540758386da8ee3d5b25e8f22a9f9f5e67 svn.2795\n960e42e5501b79d6c27be3ecff01b735f60bb3f7 svn.2796\n5e63ab202ebee7b44266badda001a19e5a6a14d5 svn.2797\n11f44fcf7e988f481afb62e6c87c3a9c776d1ea2 svn.2798\n344abfa5d4a6bb4594188b0622481eea6eeac2cc svn.2799\nd93a7d30ee341a6290ee96ec0ea151f7e46c0c70 svn.2800\nef5e53bce540858835c63e48b92a55fce8626205 svn.2801\ncecdb23abdfd949c9fb96d6ffac78cd479a1cd47 svn.2802\n1eb1392902d25bfd4670fc0f001c54c7fc7eed64 svn.2803\n7111a5719e1d3b37434cc270694519102c6c7812 svn.2804\na35fcce2bed5ba6747e4e4e26ec182a555429c0a svn.2805\n7dcb8158b5fa7ccf17cd2998fdd18f64488cd526 svn.2806\n64393d60df19e9f6fccfe4904eb0cb9c7ce8438a svn.2807\n1101105bfd677e2edfe0242d0417f85cf51f2e60 svn.2808\ne28837530ff595a6919c2c6fea1d1fc781f386e3 svn.2809\n059a43bbfe189f400e10861003e493c34740c4c5 svn.2810\ne6c88f2a7e2df04558b553e06c59aebbd8923d9b svn.2811\na50f44ae6f149131e06ded323d991e48190a611d svn.2812\n018c0aabd9735f7de23d8ae8ba04228c8aa1d4ff svn.2813\n4155e1f22547e91bac6ec548e3fa0f0b4ac88752 svn.2814\nab807b1444eabd73cba04e0e7e1023b95bac05f3 svn.2815\n6272d97a22c51d6c71e070b823d731a036fe5ec1 svn.2816\n3780753c3f00d3c2d5d2ee39ba3c2e8ecdf2f9a8 svn.2817\n3beb71a70bfe5f1acda0e62f281ec13018b5ea16 svn.2818\n890e8fdad1078c639b6c432ab991cab1d5efa2c3 svn.2819\n1194737976787a8251b0d40a75b6b0796ea5b9d8 svn.2820\n9449d1ec5fc2ea53964d6220324d77a483392fbb svn.2821\n78a536adf74baa98df3420ae8d338e0ffe652f56 svn.2822\n3880ca48a2bf035946d773872a5338e88ba2f096 svn.2823\nabddbe5c86b5791a69b57b20fd4b481cba8a2097 svn.2824\n5b0bf582d1c58092e702dcc0666e7d1b00122f79 svn.2825\n30bf43208c0dc0b7747e8c51fe40f4e328d3bef7 svn.2826\n617029c4c64261eba9896d140ee7688954dbd2ec svn.2827\ne3c0a5419a421f74c154a9219388abd1da9bc9f2 svn.2828\nb93c30ba5a74b7a9a74a0a7374bc7f2efabdc9df svn.2829\ne3064e43a14b16b0de101c6e90937fefe938c181 svn.2830\n3ca9aeebbc45ddf110979a7ecdbaada0960b0ac7 svn.2831\n35ea84e2ef167c226bb347adc6b8d7c9d25f776b svn.2832\n61f6f244b7212eebd9ad36cd41a4680941956df8 svn.2833\nd357434f3240d7d9e86f7f18fb131d0c7e2e223b svn.2834\n47df694ac19ca08af50725b22751dc94b85abb34 svn.2835\n94690c40e2c4d9482b114c702f8fcffc94c8fec1 svn.2836\n3facbcb19d4b4bd95a767e34f1ed6e291d9616bd svn.2837\n9766b877ac7e79772f2950840078bfb9502c0aa3 svn.2838\n2059b3174f9c75d4b2645a78c64a0a191cd14c90 svn.2839\n2059b3174f9c75d4b2645a78c64a0a191cd14c90 svn.2840\n23a25f7bcd0f99b67165421eed7222a1c4df3090 svn.2841\n26eb0aac5b48d0fa889b4340a22dc9369624d2e1 svn.2842\n17339d192615194767063261f1f961832ac10539 svn.2843\ncdb0e38462002a36f9c1f32ee3274e75217e3605 svn.2844\nd2446225011bf2e6c00a946ca89ca6bfb8748c09 svn.2845\nc2d800867ad02e82b3b8621e868b637bfa54e891 svn.2846\n599537fccb13bd6564c8f94c6343c6e591730859 svn.2847\na1e8a1d0bd61d579f958b752896c8d1af057c542 svn.2848\n440d40286b78190c4ca7dffd7a0bb7d4a7f3b33c svn.2849\n067b1c59e6b2272c4f763c94a75562ea529388af svn.2850\ne62a662489bbe2a9124540e675ca1dc1a56e7bd8 svn.2851\n8ee53ab859aa39018d5b6ca5035edbd8201c66b6 svn.2852\n454e06511e37efbf4456039b9c4eca5f40cef670 svn.2853\neddeae988a9359527d79506b512110b22746fa8b svn.2854\nac71e80af47a7ad64689aeb477022efed3f7b54b svn.2855\n7df1fc4d6615857504f6d796a9302bc3390c770e svn.2856\nd6423d4c28c50a54a480e140b56d04ad3eaeacee svn.2857\nb4e7c806c2afe2d1ff0f569061f213f683ef2486 svn.2858\n717510fae8aa0a1411471b3f183ced7a315a3006 svn.2859\n5df77bfcfa1d205ce7ffdfafbd9b4064f40d07d5 svn.2860\nba1ae2bd49a6c283e759f593532e39896c24f1f4 svn.2861\n86a8bd591e387ff1df3ec1d9d364db94d35969be svn.2862\n923f56aee17b66ff3069fff0d447770377275614 svn.2863\n096de7a2a8acaf12f9855f5568524f64c6017e42 svn.2864\n3006aed97c9a33ed40c960caebe0963545eaa2c4 svn.2865\n2df93dfb43fbcbf94c95672a14a9b3a8e315b785 svn.2866\n047a41ae121dd6474ed2b14f75cd5fc9eeac18e9 svn.2867\nfd06f911d356469e566f16029ccdd090d3b249d2 svn.2868\n180c39dadbca383b234b520ddbf9cfe410890c36 svn.2869\n60fd2804ca003139a735696f05a8763be9469db6 svn.2870\n0a2526053904405acb5c6fb95dfad8a8d48310bc svn.2871\na335dd60bd2b6025d2423762da656ccd964c32cf svn.2872\n34a57179c673ff42fd7af4cc1113e384aed08529 svn.2873\n864c900019e559ffc456952a64a2aad0858b4955 svn.2874\nc40ff94690d08ebc97db60ee65fa8dfdbcaad86c svn.2875\naf4532dde1e5bf57d6065671fd8c9a2c8324ea2f svn.2876\nac26d7edb768d2b0c457a524ac3ff4908544bc8f svn.2877\nf209ee73d2c9e6273c69f84e9530315d25d373cd svn.2878\na2793252048660bc5501dfc70062bb39de0b2c77 svn.2879\n500ebf8b86505eb04c4876a39a9cc08b831d0c0b svn.2880\nda425527a030e4cd7bce5b4aac6bee5e2f529a15 svn.2881\nf5b70da0578c94c5b3beb9fcc06a07cbcaa81f66 svn.2882\n029b4cebb735e2bb865d1d55993eb87123dac11c svn.2883\nef10e210bc6fc14d724154c473f9d65a34a48d66 svn.2884\nedf611889d53f2451f40fd6669252685a5cb6217 svn.2885\n85db773c5bec471c2040641a3a39c2c76fcadb0f svn.2886\nd967465209a6f3c7b60238b5b6c247262538de1b svn.2887\n0c8ec1a87c0ae674b9b13d74d420edaadd4f31cf svn.2888\neebc01ecb58a18e347f064907e660e77d455d6a9 svn.2889\ne66fb74e07129b27abbec6be0e89c5f5cd5745a3 svn.2890\n35489e1efe9cef55e520f2ad22ed9c90767142fa svn.2891\n72681fd14077193a6f1951fff19414a6d503755f svn.2892\n68012f7fac241cf9062e8ada02a1e7ef9152ac3b svn.2893\nd0b216c523d181aff40af757452b427e96b1eeea svn.2894\n2fc174a2900277f960fe9342b5f114da28147a66 svn.2895\ncdce7a014e4ee33f12621415df8748c2b947bd79 svn.2896\nb7e72abc47b3ed8a75dbfe038140b443d0169666 svn.2897\n83389b31d0eedfef70a42f002f9cbf3231658635 svn.2898\n2f3a9ffb3503babcc9d6f67293ba41547cb1c3ab svn.2899\nd60e58be97291a3352b0c226e49ea4907482024d svn.2900\n6032d7b50de80a8967ac84f4c12e5bb95bcd784e svn.2901\ned0ec056c29600443dc79d406e89862d529bf333 svn.2902\n0b1d73df1433c2bc2a6761d8d4734f582b23b3ef svn.2906\n33ffd4fd5f470de9ebea1c4352b78aeef0e0a317 svn.2907\ne20b16e99e602d3e7d79876e433af8c2f5cbeb6c svn.2908\n08ca007d2886fc1374aece32a3be7a1ced5d2e0b svn.2909\ncf86074fd4b8c1b9dd61ec39f576cf995dc0c95b svn.2910\nf1f2eab8f8c1b31f50510426c1404f2fdfe5fbab svn.2911\n7b541f2ef694027ec5540072aa13375c95a643a6 svn.2912\nec275e92a67239240c9532dd09b2080ed660ed04 svn.2913\nf9b180d3f037c6405438ebbab8705a4f5b14940f svn.2914\ndfa2e643a5990f28ecdd1c0ba313d5c0a8792330 svn.2915\n17a5dfbbe41b2c4e9655ec6b068b1e956fead536 svn.2916\nc4d2baed5de3ec7f35f1beae9b4406b2c117d817 svn.2917\n2d887f980457ad1e0fbc08a88fed32d326dc29a4 svn.2918\nea8378fea2d91901cb2622417beafde0918b3206 svn.2919\n11ffefd2977c1a44bc7f77d09b5f61873fd8eedd svn.2920\n66f6745d1f24d734909cb97ea94ca989fb7a2892 svn.2921\ne23a76b54fde9ae980d6b5822f5263066b81756c svn.2922\nc1ed7edc6f4059ab43b29a1a237c94b7db01a80d svn.2923\n0af0d44a742420776c1088068c00edc7b3408438 svn.2924\nea1ce5b5ba5ffa72579f2ecac93634b243b210b0 svn.2925\n57440fbbf3ee3be81570202e8306bf9d531529ee svn.2926\n344688faf096c56fac6afbefdffcdca2c88c1eed svn.2927\n4493fc0d34c98a3845ab919338626811ddb862a9 svn.2928\nef27b0f367a234f85f944d37049b59d4f8c2113f svn.2929\n939c175e53cefbdb66b4481166ed6fbd75e85eb5 svn.2930\nfcc26f184b6bd477b4f1c5770873d829f19535c9 svn.2931\na58dde2b0d76b2868c9df3441cad0a0303a2891e svn.2932\n0064e786e5e06efefe2efd60d82fc99ed33ca919 svn.2933\n3648769d0849966b77a65ec2518413779c37e668 svn.2934\nb1a36ccb9f55874ed8c77231d62ca21e488c9fa0 svn.2935\n76f28aa3c3d4492f6b6ff0e5d83faff366220339 svn.2936\n739c84795bd82bd5d642b5237e8a63ecb0328e04 svn.2937\nf9cc39f8e3d842772fa528e5926279e621c5b24f svn.2938\nc2794bf8572cd8d50552f0c1fb8504382a1cdc6c svn.2939\n4684187bb5e49ecadaa8154d24a7683b5d10fbaf svn.2940\n4ee9a159996c2ffe59b488718eb53ef7cef2bfd9 svn.2941\n93537eb4dae0a611ca957889c40c1db3da620193 svn.2942\n401970e29ed5e5f1351ef015316d95f912a294aa svn.2943\n7dd56fb57043caa4221d9fc8ac6928e02f735fd0 svn.2944\n362a384e9bea43910ae8438a6d90d584bfa89e2b svn.2945\n45d86029c1fa8e78401b54ba001837e915cb9cef svn.2946\nd78b37751a68d7bf4708f8a837a84c730897adb8 svn.2947\n518352e028291bbd1582fa6262979586e98852d6 svn.2948\ndb2ac4cfd63df4ca6d8af2ac7952cd5b314aaa5f svn.2949\nf8b5f7993c75b1644fa17e3e2b37e13f6d37fcb7 svn.2950\nba00735a5da686cf264d8bcb486294b9ecee5bf0 svn.2951\nbed670a8eb2f5024c8cdbc3e46b53cbba8bc36df svn.2952\n7eedc3494843dfba07f71ab569cfdc7e400b9785 svn.2953\n34df3242a2fb92b4fcf4ec7cc8cd77689a89b3b9 svn.2954\n401c85f1b33e1bfd9d2c640caa304127babd7473 svn.2955\n2e68f9aace18ce9631409cb4ad14ac679e8c99c4 svn.2956\n051f1f78419a77d65fdcb6608e1fe6729f1930f5 svn.2957\n5c59db89d8b4e91bddf5e473702ebbfd0ee6eb65 svn.2958\nc5cd9233840253a45295855a8a80a8278571dcbd svn.2959\n60c7149907232351c3e88277a3a728c3ed604358 svn.2960\nd3e9ec6243960a02dbd1226a125d24e75ee5c6fe svn.2961\n7bd4b27fb8dd80bdb2cfc4bc92947a2439cc8af2 svn.2962\nc521b354d39f024a6009b96c05d0eb4a135c4705 svn.2963\n8e6fad2ff83bd3b7c23a0ee6873e9a3e5ca428a1 svn.2964\nb8e60f78ccc50ed086f61df7026a70a96eec6675 svn.2965\nc87229c1bdba339169ef3a1ac8c0a9dab3cebbfc svn.2966\nfec146f2e6cd9705393216d26eb4cb8b16645bb6 svn.2967\n6c43bbc6bf6185f1487a76eef6cb199da71d732a svn.2968\n716417dd13f3a8de32308670f0f46ffb3b1bde57 svn.2969\n30a9a430642143a9e6d1eb7afedcb4fe8dece63b svn.2970\n74c9c2447c59ab12c8bdb9bd6838031266374ce5 svn.2971\n79394015c4181d3bfd5581ed6c99c3b4fb180ed4 svn.2972\n69acbc4575cad30d7d02684e553a115a11601a4d svn.2973\nb80854f166abf27e8676ac32cefe1be43bd867ea svn.2974\n12384ae48437e9f3c56cc6bc8f35a8eddcc0d204 svn.2975\n30d955dba8b3bf4bae1653cdc0bac93108aefead svn.2976\ncc0b114be5eb1ff36fda214ee9fe1e45264cc256 svn.2977\n4542acde1d75445bf1054b85ac4200f209be3791 svn.2978\n929376d031c70e738ad0ba265bb3d4b39078f776 svn.2979\nefe015ebcd73587baa55eb26b4567543af45d889 svn.2980\n055e3bf61ae408d825986567c45d824deed5301f svn.2981\nfe72c5cf46bcdfb21f6622237fef8af0097bf8f6 svn.2982\n021d20d800a7004cc916edc840beb0ea17626958 svn.2983\n496130f6dddb74de05902df6b694b6a6ea1be67e svn.2984\ndcfd4c7454b4a23f741d325d3e4d5367a162948f svn.2985\n7e996d3229fc8afc96abad2f4e57a4a5630c6e7f svn.2986\n0c5f57eb970a58dd0cf034e1855bfdbb129f6023 svn.2987\n0b923d505ea395aeb71861dac6ae72d7dd290b49 svn.2988\n336665b901ba2e6bf86a444b98b15b577406239c svn.2989\n4ac00e6e1039c08bac1464f2134bcd0471a1545a svn.2990\n73dc1d292fedf2a3eefa5f917a86cfcab6861076 svn.2991\n2619f045c6e13d8a5f5904132e2bbbb0c2e7e8b2 svn.2992\nedcf3450a8d016160aa9ab7f6375d5831c03b511 svn.2993\nce2e25fbb7f8b5344f2eb75ed687807b46ceda1c svn.2994\n82df109eead44fc6023d6016b1e45eeea65d0e65 svn.2995\nd264503cc3d80fdc72e4abf9a442ddfa1dd460e8 svn.2996\nd61885260ec701496f4bd4d7dd7ce2b3c771cda9 svn.2997\na48f3e7bcab02f94448277f600788a1cd078dabd svn.2998\n6f6eb8af470ca1fe7c941e0a93d65ebf0535ee28 svn.2999\ne672ad4a18c8d073d271684b2a0056b1ad2bb3d9 svn.3000\n8cbd49c3305c726a29bcf68738e1c7056004988c svn.3001\nbfcec586b54cfcedd5be08cefc8632d8faff2754 svn.3002\n5d524a18347ea188e521a1973f9b4db7d07a5b5c svn.3003\n92fad00a4a566c884f016ce1b2c463ad5f7311ba svn.3004\n9e133a8ec5536f177197ee5c10efb203fca376b4 svn.3005\n9331777d30f4d1184adc2d46b0b0f84b733261d4 svn.3006\nae3d03929bffa439600081fc0e23deeefd85dd0c svn.3007\nbd9c82cf0480e3d3650d40998b721064d87892bb svn.3008\n6e4cf75259d1f7486a785e8eccf4a6535e5a0a8b svn.3009\nb73b04785972e041e48d6d9e515edda6ca098630 svn.3010\n5996cfebca69c45d17a8b861a6ae3b662741b69d svn.3011\ndd67dda43058be3fd1ebd9f7dbb2c8d69a34b6de svn.3012\ncf425bf5989ff89c6acfc08552c704bd0f3e2c47 svn.3013\n698f431f883c497235a4d2d4cd7c99fec89f7e70 svn.3014\n089e1cfcb46b885d76b7efc74bed8f47ff940211 svn.3015\n8b78c33392e63329f0df0dc7f9139c373f65959a svn.3016\na2c1a700088f062063f26a01caa87f6d8ad88de2 svn.3017\n3f19d174c7a173877d6030ac08c17d3e880bebfc svn.3018\n8d0a272ca5804d26485f6cb43c22572f1c03b4e0 svn.3019\n30b5a0d570073cead7c1b156b14351584e6feb6d svn.3020\n754f0ba8680198fdf26b411fee87710f86bdee0f svn.3021\nb84adc2b70e6bf0db9e41edf8a7575541cef40a1 svn.3022\n846bb758f7dc251aacb6f4e648f3a8c6e9db7dd1 svn.3023\nd21cb2f4447d68aaf0e9a25d12416cbcf16d744b svn.3024\n00392d3dc1364c7ecc33cd6f047caea71a72c3f7 svn.3025\n0c471c85fb4abb5d07e7c2fd7db06c0f32333b8e svn.3026\n14959e4dc8e23c20029b473785f4faf270788962 svn.3027\nda4aca5ef6d99ba4e5f5415fb154dbb03dcf4d4c svn.3028\n1f7567aa651d57827692f63e178def1c54c670df svn.3029\n7bfdbfbc3dcdf2576cb10c0a7b803488e2707c32 svn.3030\n52826463172492f28261a56e59573539b23a6707 svn.3031\n07b377b28039343f466e110837d11e969e05bdfe svn.3032\nc82c3fa57f1b378a354fbddce366c185aa5612ba svn.3033\naf7d4d4f734bd163fa5c52440b95e66b4e86f626 svn.3034\n87295d4f74d0e692237c28267c81c66456aa73e9 svn.3035\n08c1a82cc6b6551d9ba7cc5b26fd5e44f32ebe49 svn.3036\nffe992a10f7100278c801e5effb1b2d118c1d4d2 svn.3037\n9b9ecfdf705f917e084d4908b7ffd3a9f5f0cc45 svn.3038\nfc24567c524821f744b7c524cedadcb564278652 svn.3039\n7d97cdff296a9dc59a774877de59bb6d1c22f8eb svn.3040\nf36f419c220d7ddc92468c7feb7746ba5c5f89b4 svn.3041\nadad7401f2b871b409ec43253e380ee443082baf svn.3042\n310f666ab2698a2bc3fe4881be2af9623606ad66 svn.3043\nadd07e783858f16e052feee73f810e060051b3c3 svn.3044\n70ee5b55748693509cb67dad4dcdde707eddff05 svn.3045\n22d90d470668544d99b2efb665b9ab6ef7100447 svn.3046\n8eecf046274747ff053e8fad5d1e1f5ec9c4c216 svn.3047\ndded93cc36392a5553a0846bf5f85189264d3c09 svn.3048\n701c402e04ee12b97cdc141b25a67a5ef361a12e svn.3049\n6d63311f18ccf5258464824f596cab1a84af7050 svn.3050\nbe563abb4bcf0cb41065218bf7b3e9b1d2b88221 svn.3051\n4f66fabdd988fa763f45e7d35d0a659570bedf9e svn.3052\n1b5a3fca919ac330c2234a87e65ae4b72b142b65 svn.3053\necd8be9d3589508b61fa819468dcfaeba267c402 svn.3054\n9c247956ae35df75f390539097dc67554996fbd8 svn.3055\n5244f0ae6bef216b3befef73c43f51e2ca8c6ebe svn.3056\n894c269a227ad8b1c208f7a2330df257e9099fb3 svn.3057\n338100f9a942035fa44438ada2c06d8c654c088b svn.3058\n267ca7bc63e56343c1acea001b7e25d3e63ca3bb svn.3059\nea1b4af9f7fcfeade0ae89022d44b81f69a475bd svn.3063\n07b01dd26935991a59e78093914657105348508d svn.3065\n3dfb6be50dd3c9619389d2a99ea3b1c6edfb661a svn.3066\nf094aa695da4e753018a9764ed59ecc3234e13eb svn.3067\n02ddc3688f88624e32e44799493a1c61a610d398 svn.3068\n33462b17d78bf5d0921bca142ae7ba5a256fd053 svn.3070\n6c44e4a5d35f528647241309c7e30bb810226fe8 svn.3071\n0b8278e909775a2c632d6e43f0b2b236612bd25e svn.3072\nac7b174d602dcf6650b31511dd9cc97a5aceb5d0 svn.3073\ncafea3ae842c9bb737f955c325f633fe1a5c21a8 svn.3074\n64de5b4693a253cfca7fe29e07ae194fbaf9847c svn.3075\n946d56d19d83e999669e7704551d05ef4a7614d2 svn.3076\n7d279dcda145471426c0ac8c16cf50f4d7587e10 svn.3077\n6104c404216e7c5332836598d60ca5abd022ed74 svn.3078\ncb7c2760547ace3e5d9a7c88c4b6bf0a0b175562 svn.3079\n9d036f7d3dcfce47cf8fd20f2150b4cba903af24 svn.3080\n2df08d3bd242227be4770f0f07f2990a8109f984 svn.3081\n16d3c6b35f2d0c10250526e23d1bbf513958687a svn.3087\n289a8114a022f5adbc3750bdb0b2e88a67f949a8 svn.3089\n48f809cffe41e30008a1a0e9b0069d325e19ee86 svn.3090\n7eb5d866b7c462894f4c62d48dae223a98df02f8 svn.3091\nb400073b41575694b7e5f03dc3306605101ac349 svn.3092\n89a6b427f9c5b0bbafe7c1613191c00ee116750c svn.3093\n762557125dd61b1a93c764aa2a0afe3f45f302a6 svn.3094\n1d85901cf5a756ea9b92644e44bb703da3b48e2d svn.3095\nbd0b99f22d9f0eea755bbf1e8d2fde72daca116a svn.3096\n2bc81582990ddc9b5bbd6bf0fabadcc33ba79683 svn.3097\na85ec2349010584e5c8ebed5d09b4e390c50b2dc svn.3098\nd5718312588b9abc50c44cd5f0f382cd1d0edad7 svn.3099\ndedbb9e61082f09da50c494099d19663c1287d37 svn.3100\nbdc647334ff7ce00dcb2712d4c0212a5d97bfa2d svn.3101\n637b33b6d1d2b05ab51989299b20e16aef1478ca svn.3102\nf146f54a1304e554b8964f284c12e6ba9e60501c svn.3103\n4da14c57c00ac06319b6aa09f0c88e77ec30ee85 svn.3104\n68c341ef4b28d048e8ebda446e3fefec5f75c671 svn.3105\n1dcc559784e8393738d69240d9b805c4cb00fc01 svn.3106\n5ea5304ad3fe8f5c096864f623cc60a0c2e25f82 svn.3107\n4b1ddef157d8af834961b1c08f3286c77d1fb165 svn.3111\n861ce3839f819410d0e5e4dd6294653441b4300c svn.3112\nd59f6ab6c7582053b1223369c74e3346e1e3c02d svn.3113\n58a700f7e332b4e03d4b1c0837b96032b327a3e5 svn.3114\n222cd051d31aa4b846be2cb3abcb52d5a9b69192 svn.3115\n1e0c452f7cad452892bee08fdcf94dc9e77210c8 svn.3116\n3b466ab6a194c8416e96ee157187710819ae7b8b svn.3117\n82ed3ec9a8f78cbb7d42ee4acc87d03ea5a9961d svn.3118\n5fbc8849018395a0b0f3e2fbd640de814445b3d0 svn.3119\n74e7d92721ca13f3e48ef6e4c6dcfad195601bd0 svn.3120\nbc974273e86f2c645a4c948214a46523e0c10063 svn.3121\n5c7f75a66e1fc613a58c91a8459cf86736f351ea svn.3122\na2fd164c3474bad56f4bcae57213427f5b0065fc svn.3123\nca69713acd0a97dea286c16b8c0df7f26cb6ece0 svn.3124\ne00cc3ae52d312f305d65aeac90047dd70bd089a svn.3125\nee1acd45ad79bac2e7a07131fa43d2b8e97a0cfa svn.3126\n5e7db4771c3080f6dfdbf2d8bd38cd4a5f04eaab svn.3127\n943449d08eb9a482b1fa80ac4ebbc9a9519f839a svn.3129\nf9fd04dffa260060ac305f9b867bd4855800827b svn.3130\n59420ae7b9eacab9986ab1fbbdab596246c4af82 svn.3131\n07052ac5f5fd03bf95306a8370d6b0bc8e3e8c70 svn.3132\nb79a7eae9097398f6df3172f2ac368b73e254be7 svn.3133\nd25b8863103c80a0c6866f8c8dd39fa3a4fd600b svn.3135\n7f47ec4a7b62285c1a5915c83b7c9b50a461740a svn.3139\n51a9843a62e0ac33b181db34b90b8b232ecc6931 svn.3140\n02a7fe93b95dd6c73cf565387b3a58722df32129 svn.3141\n7411d9441cedb1e6f4facb608cf65f4b197856e0 svn.3142\nad09484eaf860593106dff23f106f07915387ed6 svn.3150\nad00ccac6f3455ee1a2f553d3669ac141d3f9005 svn.3151\nb4f1fbf4debf763c5c48486285a11acf0cfcf454 svn.3153\n765974e63653698bd72bbc17e384deed4217c317 svn.3154\n37fd84d096c1968b5f35f882cba9c72d2c4ceb59 svn.3155\n3667f76e2d526d34533d59341080055ec104bfd4 svn.3156\n80b8fc40dbaeaff4c51d69eb8999cc25e6520849 svn.3157\ne9bfcfdbeb5efacfff140c1da67a9f0f1ddfff41 svn.3158\nea90f9d56701e8df0d1b47d82787a6a2d534bd9a svn.3159\n73a432de98b156091a020c8b01e4fcb033efb583 svn.3160\n47120857b066466ba0eb9cd13afd27a546c14c06 svn.3161\n02922cf66691a93d0369e04829033bfb9c1416c0 svn.3162\n1d0b21b40fff6331de0ba5e00cdf5a21606e69e8 svn.3163\n4b2c74a0957c5d45be802129e45ed023a717e728 svn.3167\n04b363a2c1fc8bfcd8ce8bc0f3f71858d0b2eaff svn.3168\ne2d8e4760a9af9f2413980580991e4ae0e0996d1 svn.3169\n0c9badd40e68bacb6399a5a757968a110069908c svn.3170\n2fd3a6f43ccdc7019827fde4c565e7504c2e6276 svn.3171\n195e8ac9f98109a902e906e0d265a84d0566829e svn.3172\n00efd9663a399357f113b0cce175b8b7828ae35b svn.3173\n1eec2a139d35d9bdaabacd2e836612cfa8180b5c svn.3174\n8d514559fc7ed502d969788365c5a35a029937f5 svn.3175\nf0c99b0aa2ef51e2afced7d00707f72ee273d19c svn.3176\nb1d127cd4c0f692c925dde8c297b2f7cf93a2769 svn.3177\na1ce4c531679291bfbae3be75ca719525df415be svn.3178\nc6f269c647809b9ad040b15874f0cc359c465c93 svn.3179\n38c68641f1e435d8f0340f090aaf7aa11fc33857 svn.3180\nd3648c5eca67db20002a146d2433d5dc79c7fcba svn.3181\ne212cad9e09612496a73e3014395e169211fcc4d svn.3182\n242010859be1f3f552c4665d75cf0ee46e1d6807 svn.3183\n8f898bcaffc922ed217d7cf190b65f452f3599d7 svn.3184\n7630328046406398152a347612be9a3bf2ca8d6d svn.3185\n73514f3212506aa9f2ffa1d3ff93403e61d110a1 svn.3186\n7c10aa7d0f58470755c78eb6fd4fcca50007d54f svn.3187\nf84586bc57ccf345f870a73df1dd8b4ad93821e3 svn.3188\nf2231524702810692b8f14ed85df983df0f4f144 svn.3189\necc52ee2e9798411433eb84fa06e5954a93b7c8c svn.3190\n34b01a55c4cc456513f4ba0ba1abba7dfb966445 svn.3191\n6e1fd5a5fc2b63d60d6e7d47fb1715f3d7359583 svn.3192\nca801daaeeff08124bb8ad844f89a7f04fca10b9 svn.3193\nf0ce9a9b6d3bcea9f8e8f8c19d8ca4ffc4eff80e svn.3194\ncda17512b25be7d10b3d3dbde93f981c795f620c svn.3195\ne7f4ae66cb26bca7365fb7b53e040f8ed7ecc143 svn.3196\n3916e70db8ad80db96d8fc64ebdf6a7e9eb11d95 svn.3197\nbdbbb33077ab546e1b6941b6185ff39a72948ddf svn.3198\nb639264e4a64ac143c6c686b8af22986ec8613d3 svn.3199\n0a05fe312254b4384ce69b7218df46e6a835a18c svn.3200\n01bbabcb38704b975ef119100bddd9b35e05609f svn.3201\n9b37b23cd3a9cbd296b9ec2c56ccaccae113f303 svn.3202\nc0d561b75a3928c26016fbb4e4ccdf79bc7ce215 svn.3203\nf9b6e0fecbbedaccb69e1cab47503a485f3e81e7 svn.3204\n706f79ea5f7c76bd29f0036c7ff8f9d2050af81f svn.3205\n6746ea25ca00f8ec373ef6ccfc63e4cd60d982b0 svn.3206\n99887a5a23f5a65bbce37d944651da360d5a1312 svn.3207\ncb85917ee403a53f6e96905cb9605349b2e178c7 svn.3209\na83f7207007c2b05ac3f236776d5fed923d42d91 svn.3210\n410c20ab8846d61e43f30eb3a4386991755bef68 svn.3211\ncf0cbc795230e115662644cd1cddd7b915ff8bb4 svn.3212\n39425f50dd2af574480bf01869b42158d2ae3e98 svn.3213\n472a7740cacbf9bf52fa7f550370ab5aa53dc8dc svn.3214\nfa73824123b260e5493a42dd109a56a22c78f4a7 svn.3215\nf53f5ecb90c69714a07c501d382e151d033eceee svn.3217\n94f906bb36dee8d0db14ba0018cee5984545f2b5 svn.3218\nd1bc845aaed688cf24a32ea725d5168df9e72f14 svn.3219\n4dab775f0ed134b780e9b232f4edd554337daa24 svn.3220\n0d21014f142856d7a6e045fe692d415db5298744 svn.3221\ne4ddcd896388b8fc3f5eb9893add30a93279c67c svn.3222\n34fb9bc1f2cd2015874d4a94416683c4a95949f3 svn.3223\nc1e01d8267f0dab4a457ceb89622a77e00fba258 svn.3224\n2e660e6cabc60d3ab9352c22c023764e3e69f2ce svn.3225\nd0691532df71be9744c4a0f5751d392208a980ff svn.3226\n431e964fe6308beb66425486eb2ddac74b94e40a svn.3227\nb8a9bfa28d2cfc808f9395a86cea3ecba64c8aca svn.3228\n32e6bbfb36fde12fb5645bad7b756ff536c8a027 svn.3229\n9e78bec8346b1aeab6c8d412115353b92f7597b2 svn.3230\n8ff1362eb597f758ddee82c6b3a0b11c422b0062 svn.3231\n9ce0a41c2bd6fc1e3c8934d3c76ac44b4aaad1e8 svn.3232\n769ac6a9552bc21e07d784d0c55ce230216849c0 svn.3235\nb8a0e6557609a80ae7e20f10b31056b94a0a1d9f svn.3236\n287726422bc71c15b9652ee3c9e2e92da8c7b096 svn.3237\neafa0860240134367597e998401943011f868410 svn.3238\ncf0685d62b597eff1a816d576e4fd434a7a01048 svn.3239\n0ab13fa40eeeb1bd3f5628adec4bd26c496e65e0 svn.3240\n387b9e6b4919355f50b5119644200ac8d99db1bb svn.3241\n74a061920aa0a477821d2dc6be47ea578a32b235 svn.3242\nc3db78d569cc11ad5db847dd09ddacee68055e91 svn.3243\n6feeebdd90e688560b6dc713d9a03142165e6194 svn.3244\n26e9b8d7711ca71f57447946df26765f1d34bd2a svn.3245\n6b1d6f0d0e95ad90d4ef6d35a0375262fbdac63c svn.3246\n70e4e98b6e3885d7808b0df12b6cf6d66f611b59 svn.3247\n6ecc4b4d2ea124058c91113394307461839a68f9 svn.3248\n959c7cb2d005f094859ee4896a139a8b0e68d64f svn.3249\nc50203daed1eff4c2f941850ddacea802d5562d8 svn.3250\n6acfff5ca165658bcc016fc3ed8a928cda6b265e svn.3251\n448e1b674678e93a38dfed3fb46f620efd3aa812 svn.3252\nfe7d61d62795b95663c62708ef39b69b816dffdf svn.3253\n8da380f8571d77593b922221dfdaaa7d1d7bcf0d svn.3254\n7ff79071a0267def271a1a3b3833abb638e15f18 svn.3255\ne16093be8b36a08ee4ec9865b839d902df5dfe9e svn.3256\nf5649a40cc40c0ba019ebfbf2f44bc2dbeac0699 svn.3257\n6aab91b9ebfeafa64e6b00ff1c8cb55af6b1894f svn.3258\na0712a73429c0b27878bbce77210f145d375c72f svn.3259\n9e131f2864b3529bd4e74bf11bbdf18e10d335d6 svn.3260\n3721b907610f1195c17535e9908ed2a4359001ed svn.3261\n8cb0ae9098209ee0c9724f68e0299545c3601eec svn.3262\n40021b6ed541eab8605d09d6e9dbaa898ae481d7 svn.3263\naf0bc73dd9b329590eb4ac0942090d133d4762c3 svn.3264\ne6c1cf60419a41f4427e7f82f02713b8c15dda7a svn.3265\n835cec13c6fcbc96b1375f766343495d61c90f02 svn.3266\nb8741dcb156c68dfcf331a6fee37af8fa5138e2b svn.3267\n85c768132dd1a1105d2b8ef6a35d36f91849aee5 svn.3268\n0516f6a35a40603263b97ae882dd21ab19bebdde svn.3271\n8f5fb598af3e8d89df1ba1b6beb87610f96cd4c9 svn.3273\nb7d94b523f3fbb0f48fdbbec6e0fdb3472481df3 svn.3274\na33a43b407dacd6ccc0b5cb0f36153d7c7007046 svn.3275\na7ed2b735ce96c8231475ed04a71c8ee8e1b7f80 svn.3276\nc7832e3688cb0bc91538ca68a77b33da1cb1ea23 svn.3277\neb4e7bdcfea999427fea0529dbef474d1561180d svn.3278\n09b33f6b49d093c62b709dee5deff0655afefd81 svn.3279\n00622c7c0ef37bb61d03c3396548714ed127a2c4 svn.3280\nbce2bde2287d864298d49cd9ec170b046674e20e svn.3281\n27cb715b61b886fa25525377e32d5cc5ce575b21 svn.3282\n948a659f41c35bac0e553d8473144ab9ac965f41 svn.3283\na71eecc0d3bc57ccf68ac508230df1d999df199b svn.3284\n3a37810aed587a829419017f2de968ed38edc197 svn.3286\n5ab1a6794e65b2d352f9217e7c838b7dbdc16d1d svn.3287\n7e285a2bddb7aa83ec132e7eedd3e06702b54f5b svn.3288\ndfce774d16e0b613270c805e782d2ff156717ad8 svn.3289\n48e00f90a8963dc7b3c674258d8b25fa6fb62147 svn.3290\n021f212cb8adab72e0aa2616c0619a531e2ee9d7 svn.3291\n0de2e77375c9d6a679fb76729074a71797967e46 svn.3292\n12034613f421f57937bb22c6201ab34eb3ea06c2 svn.3293\nfac0356ab7ed6a5ff4b75fe6f1dbb15b76b1ca6e svn.3294\nc0bd16e2ee3c1a5e60fc4f430cc10975cf2c87bc svn.3295\nbec6ef0048db76d7168dd8b6141c8f6aa3a6343a svn.3296\n297bea77d76bbd12adfa5ea54617fed8d0db9a8e svn.3297\ndc34e0b91ac817752f5b0a5155e45be535a533a0 svn.3298\nab1b1d57b715b753d15cddb429bb9b0b0786198f svn.3301\nb9e83c5137a69e783023ccef9023bb9ebbd58272 svn.3302\n67e8e18e8746514215145851c38bb5e33949d2be svn.3303\n71638d2728eb2892f730a0644fb6589372001a40 svn.3304\n7360f0ea9f3f9fb9ebf4623fcf538f6182cd1546 svn.3305\ndcf63b86520b91a6cd2ec0b7d2bd8e4a390181f4 svn.3306\n116543a66fae1b1162502c2858e521af47cd524a svn.3312\nc3f0af59b3d5edca0014263a1085ac5c86fb722b svn.3313\nc57062e44259f5e8e710f97311c6592f3e2567b4 svn.3314\nd90dd95ba77d1db71f37677d42bc169f9671097f svn.3315\n2ec1984db60800461802a4288a742cc97daf7fc2 svn.3322\n9161af0c8465bed548e181a63419f2a72f2cb8b5 svn.3323\n6936183666086b1f38620a0522ed5330459a3dfb svn.3324\n15fb37d91836663fc19f032cb3fea5098685e230 svn.3325\ncc295df12a20117acd2ebfd9d99692d0c8c16b55 svn.3327\n102289229f1c4314a0883c0e18d99a1832fff54e svn.3328\nf8f052993cac4dccb8b1a12a50e9586e8f3ac9a0 svn.3329\n4aa998899d30ab7a7f202d87c75a528cd1757f4b svn.3330\n6b446f5b6db785002eaf21cba01cf3aae60f2aa6 svn.3331\nb7386ca2e3fbb1faf3f3b8b8606118f3ddbb0ef6 svn.3332\naf97370287c98672ce7a37179b9909889bfbee17 svn.3336\nd5aa6f7a2b29631e41d98c2686530ac5109bc9c6 svn.3337\n899d95e4e22f677987ed1058b1102253c3bf10fa svn.3338\n899d95e4e22f677987ed1058b1102253c3bf10fa svn.3339\nd4daa0ff70019394d046c45ed5bc92fd1c5d7172 svn.3344\nf453f8ef4ea1fbaff7b7c537e8821535c6f57402 svn.3340\n4d1aa995808cc8ded038dfcb3348281ae2865678 svn.3346\nf453f8ef4ea1fbaff7b7c537e8821535c6f57402 svn.3341\ndcbca26c88d9348b65a81a1fd7c7ab167c762765 svn.3347\n55fed3e7d615852bf301e0906529ed48147864e3 svn.3348\nf453f8ef4ea1fbaff7b7c537e8821535c6f57402 svn.3352\nd5bad31954a9125a8446d798d558906e61c71f78 svn.3400\n76ef92d649c53d526c7b880b2f602fc9f8f2c587 svn.3349\nc1ffcd66abe173578ee353f177d06e1de8dbe414 svn.3350\n199a0c197ab770101957e3db66e29ef66a39b027 svn.3405\n3a8378efa5689c3f02cb030787fa4728132bb817 svn.3406\n4385505b9c454f2065d29d241d31807d967fbb74 svn.3351\n600f9839b2c7ebcd7ab7a646d8b9713ad03f2f59 svn.3407\n8dff4d1f34edb8ffba586b5d122af6489c378a17 svn.3353\ndf5ad1f7789d77908966809856d5965de63267db svn.3410\n522d10e77703f20936db9c06a34503459a75353b svn.3354\nf956e08bdbc2a78b2b7099ed72a3a448bccb2aa2 svn.3355\n6c14a726c869080980149ae378936bef0bba80aa svn.3356\n80f38701fc45f288f1fc02777ae8c65fafcfc69b svn.3357\n5fd9d94b54a869ad1e8135579d173995a6f9c602 svn.3358\nf19b853f702ba3e2ab5e415f7a357aadddb87c05 svn.3359\n5562976ef096a52db8e8c0af77b58c74c6ee10c3 svn.3360\n0b9af7e529e72d6c0e250260e14882b61426b47e svn.3361\n5b387ef40fb0a27adb18ed053ca2d46a2e739fe5 svn.3362\n2401d958571795105711959b2a79ae2467f0796c svn.3363\n885ee5f7b4ee3adba2ca5f34661b2ff9aae8890e svn.3364\nff18b5ba78f3808b72696956fab0e0363ec9618c svn.3365\nf49065b2741d347b607611b41e47a6218527d02d svn.3366\nfde373f11386308498dcee4977127d62a5a289a1 svn.3367\n79f7ff470be51e97508056f6c7221ed8faf879f3 svn.3368\n62ee1f17b78cd36b312c24918e8595c25f92a8bb svn.3369\n9f91a705d8ed377faed89d0abf6210da1a299542 svn.3370\n3f384ce7c312079d72a2df5ab072e399b31bf7b5 svn.3371\nf829205d7aef063734a23aa7e7295afc69a41551 svn.3372\nb209da3ec43bcce23b430a8a36e9bb81a4420045 svn.3373\n8efd33b0be95d0478ad18fcc120878ae641a15c4 svn.3374\n86eb4bda5dc3231ec15a16139c590b2ea6b35d37 svn.3375\nf7c2e3a7f15e9bf6cb90533791a5e0b840d785c7 svn.3376\nffabe871d58541efeb50fd08b16fcf3cebe96012 svn.3377\n6231c41ebca78346157e3f67f99c02220d3dd3c1 svn.3378\nd45c71b7a44d88fd7409821d983c8dfe5d230e81 svn.3379\ne127f0ce6281ec88cb80aae5ef85f1b1e59422ea svn.3380\n4fe072ad1c5b0f25ef1029bedb6f667c71b85422 svn.3381\n25436039157d5b05ebc8c959e3aeffa931db4ce8 svn.3382\na195b50a7bbd0a8586d91f2cb86391ff03cc27b7 svn.3383\n0920cb7e8fa411fc8686e9051afefc211f905dfe svn.3384\ne09e3b5fc9eefc6a13e6a019236f4fc9df9e6c2c svn.3385\nfa0dadf453bf3ff65e218b9a33fb3d27dc627abb svn.3386\n0b61a6654ba3fd1e2d0028de784a19e3db5d700c svn.3387\necebf99293aefc4a71e7a4226ca3802afbb06ef1 svn.3388\n6ab47c595b937b8472eb5b4f8ac0e3cbe608b640 svn.3389\n97528f84f122c9384f7352c9ce82d2c53b005991 svn.3390\n3762f8805442bb7a2d613f5d81a17fd21fdddead svn.3391\n7eba5d1137174c8f3bbe2f745fe63e1e18e7f96c svn.3392\n7c351a996b2a9e73b609d2682f6b574cbad8ea7d svn.3393\n63ad362b4d142f1e2e332c28b140fcad7913e261 svn.3394\n1a85e4de3afda5d5f3f20d96fe79710ee467a8fc svn.3395\n5cbf00eb1f873b6bcf4a23681432241b08b5dcb9 svn.3396\n7f9201dc0f00f7c0a74c0185e66b5c9dd1fc871f svn.3397\nab75039bc6ab635e06a9b65fdf43b9a0d3e6b092 svn.3398\n86f009800ad4a5d471d3d38806d192ffe7b34407 svn.3399\n787175f5ba384093e0f40d8bb4e3d55d824da8e3 svn.3401\n80905128a543169c868633e8c7b5ae767cc42960 svn.3402\nc1978cc4c97ef7935bbd424ad6b90a17eb8fb633 svn.3403\n064ab95cc896542e1a876b05c01c52ebb9fc8c20 svn.3404\naf9e0fdeb2ea1af7aed383f3e6fa7bf968340b93 svn.3411\n34cf574059b0b8c5e33d93683fa132d39ada1b3b svn.3412\n80ca923dc32cd42d834a339bcb2b782e9135531c svn.3413\n82c43612480c0b57b716faf0b05794afc7632160 svn.3414\naa304a581efb8862789e29aac357c5fc5241bef8 svn.3415\n8e88a9491c967938420a15697949640d29b77b29 svn.3416\n52aaa0e133e75dd13ec733c55e794ae05b677cf9 svn.3417\nd1f5858f126191ab9777d3a0ac7b281f7bb804fd svn.3418\n41a022c61df44fceec442d47ae956ddfe58b745c svn.3419\nec9ad5e899798eaa57ea46c59dde752bd37ecaa7 svn.3420\nf5e4f05d814443b130d61916b35ba0b0bca3f479 svn.3421\n6d730a7219e40d4d66ce69d5a4f1517a8be05bf1 svn.3422\ndc1fe30dbe583ed055181249f4fccb60e82964e9 svn.3423\n4ba337a68611138dbde9f124695b012f576972f3 svn.3424\n219c39d905b7ce4aeeb20d0180c6bf804bd5bf70 svn.3425\n4aeedb22edf80ea687a8887209521ef568d94232 svn.3426\n682993023ea3de7ffe9aee9f8c469ad31867160f svn.3427\na73ce744a6cee704d8f0c596627360ece7e671eb svn.3428\n45b44e7a060148ac7edc2e67285a79e31af3c00d svn.3429\n16ffed6257fd67487d0c230781c71f30e7d6afbd svn.3430\n242a140c2ddae9851af0818dcf52d2b725593991 svn.3431\n348fe2e6ec48e5658ef5eb8172e36229521ad72a svn.3432\n737b04dcde22bab7859bae212a8b73a76e65e1cb svn.3433\n348fe2e6ec48e5658ef5eb8172e36229521ad72a svn.3434\nea64716f1e2a1c14c854f71cb09ee4243178c2e4 svn.3483\nd0229320d4799a3fbc074b8f3c01c6879e0419d5 svn.3435\n4da45ad676ea6ff1937824227a0b81a7fb2286da svn.3485\nd0229320d4799a3fbc074b8f3c01c6879e0419d5 svn.3436\ne10fc256a32cfefd03c2a9433861906187cd80f6 svn.3486\n7319a1fcad00bfac27340f855097d0ba92a89b84 svn.3437\n0053ca01589d776284ae14901bbc90c45f58b6db svn.3489\nb002f46b1dbd4de8c41b4d85c9afe8cb92d01aca svn.3438\nee7252e8e04f7129b3b924467065a9af5103d874 svn.3490\n048ae6b82d982d2b006f8a698d945ab08473d1d7 svn.3439\nea7002777cfb810203774492319360e3447eb87f svn.3491\n67290aa41e964a03dd6b90f88100c7d203561491 svn.3440\naa2828ab1cc41ba83f1f517157230d55d8e8530a svn.3642\n3826a026410a317825da785e1297658519f5aadc svn.3441\nf799d8f63367e11cb7d4f3787bed2002b719b251 svn.3644\n3e45b53605fdda36474a1ccc9ee50afe06293905 svn.3442\n2ca8f67b0df7afb7b7aff271b21f2fd73fabc281 svn.3443\n63ff8a0128e9257fea28365c21ae4ff494778218 svn.3698\nf4ce238f5d96f19d242bb0f673a67a37d70b1e64 svn.3444\n328cf220a4aa9b6cbe61258e4f1fe58fb7c2b6fe svn.3699\nd8ebcc92642a59a2c98ae966e62e170f81e4ac6f svn.3445\n1b501bec65e4e26f8cd38faf3edf64552533bdf7 svn.3700\nee94ab08da6533410b37eff63b392549ead5b789 svn.3446\ndc275e1aa1eca618b233deb27913a3ad5d692b95 svn.3701\nd8a5ab112cb20730669665ffbe10bc23e796b8a0 svn.3447\ndcabd19c7732ced10282332dbd60a00a5f6efa53 svn.3716\nc0ed9714132ac85c402e2e5962f7f859ba68cc0e svn.3448\nb2dbeafd9ff05efbe60259690a8e9980a7c34057 svn.3717\n45b6af200341479e23556946f791c45babf62eec svn.3449\n6c5105881f0172952f390a40061e8c5c68453d0e svn.3719\n37b4757be6bef61e679f1496fb088d128c9562a9 svn.3450\n6fae689e2a44c3baf07355f81716fe252ab28746 svn.3720\nd153a3bc4a0843a344160f18cff33d9a69071d27 svn.3451\nbcdcef820588b761eb765f288de50c0599cd3432 svn.3721\n7c0fc2d6a0d4d543e2493c4758cecdc8c028542c svn.3452\ne6d2012232fbdc894c5461ef03025a3416cb6e9a svn.3453\nfa6647e8dec8b625930c5539b0af720339dd6233 svn.3454\n7737cc8bccf6e3f4a7fed5d1d707c5f2ee867b66 svn.3455\n0d16502f2dcce50fec0eccff4d8951c2c11e30d6 svn.3456\n0f628de27af113828ca948236c68d59a59e46a93 svn.3457\n462d314c6ccd0efbf82b7932c3a5e3dcd13ce197 svn.3458\n495735df2254e5cb203f59be639d3336b09b7f1c svn.3459\n8142d9294e0cb60295d4632412cfa4dbcb5372ce svn.3460\nd2a8691f3bb1848c38e6bec49f01bbfbf805abc4 svn.3461\n56ecc79238ca026cab324de3d9b96cba0a8216d3 svn.3462\ne91c9b96182820a1281889bb619f6206d6304a2d svn.3463\ned759c90e6a4082e10bcdf32159d1d1d0444f589 svn.3464\n830b1a08b12a566f9e24707735f9adec27759932 svn.3465\n711650d6c30eb77b90d5098e4d7fd97b8f3e316d svn.3466\n24d95ba6b7711f74fc02391a5476705b7130142d svn.3467\n60b6d73ead5e4bd4dd0519a47f9497ed1f7736f1 svn.3468\nea4bc27c90b24c4cad9e2f729be7c0449b2021f4 svn.3469\n6d2fbb6d04110d2a79a923af1923874d6ed74f83 svn.3470\n7e131029e11214bde521403389e6554f9fb30e0b svn.3471\nda115c3617a9892c714b1bfea0a38b52ed05fef2 svn.3472\n620fb2860bb8a902e879ac461d09324b18bdd911 svn.3473\na9f97e40b0a39b52c850609b740fb2d516697f72 svn.3474\n15a42c1bdb3bc9990661bf622a8403d921cd3274 svn.3475\n1d28eea89c7bab348ddcce07d23b13c74747c6eb svn.3476\n47fdd86f474e16cbafeb6d0b80cabeb20970d573 svn.3477\n2aeae93513c1fc83edad9f68cbd4c591978c7703 svn.3478\n4107762856bfb191fa974b10ea5cf0ce39fadc25 svn.3479\na9174ea6ccab5a38dafc5f238679b9057df93651 svn.3480\na84282e90a518fe38599cadcdc5a2eb2d81bd304 svn.3481\n22b9b1b81b5221bdee5daf71b727f22297fcdf99 svn.3482\n720dfa5eea53212e0f3054f426294cce6a6d2e85 svn.3484\n2544dac3a90a1d5ee43e9826f62b20e348e37f71 svn.3487\nc1610533d66eedb959ab51151a3f745b86cdac34 svn.3488\ncc9fec9f4a5f3e2bbc3e457eb3b0d59fd2ba1898 svn.3493\n3ec9d00a9cc77894fb9a8d17b32a4f85b8779fc1 svn.3494\ne269a8a4df7bdf2ba12daca91cb0dc655cb7ebd0 svn.3495\ne2d2a43114e6073ff3a1b0ec4c5fe2e2608893ac svn.3496\nf765ed0f867ce5cb84efb7a316caecfb01b62dee svn.3497\nec12967340714984b4f0a3ceb14162f01d7da7cf svn.3498\nff456bb6a0f7489c08070de0288c87df358ef5db svn.3499\n34e14a83dea6b7ef50031cc433319255c0842f26 svn.3500\na36da79933bbb35ed6e63f3ce61eafe0b0cbacee svn.3501\n26753331a6cc59438375ed06b7b0c47161339afe svn.3502\n0612555f5c0a1859f28afb4b081c29338aa41343 svn.3503\n94eea4c839889888e27cc92770e8a10452b9447c svn.3504\nbd9c831200203bea59814c1a11f9660d9593ea30 svn.3505\n88a1e5bf98043fd413ea0c8d8426b849f8235ea8 svn.3506\n722539f5a600cc724323eb7e6e49eda5b13edc5e svn.3507\n5212361a6cc768c2e994f0ec7fa17a52217c9f54 svn.3508\na4a22b85ecbff8c81cadff10c0c04bb4830788ed svn.3509\n07ea8d0a63847f3ee06a76c4cd01401cd0c70b3d svn.3510\n2a80203fe841e620c374340aa267de8b50e08210 svn.3511\nbb503b97f20c3aba1126bb7a4badaa9a8175db64 svn.3512\n653bf6bcbeabe7c6685207203ac63542911e83b6 svn.3513\n87d7a3b9ca55c3fc150df1084632009852090734 svn.3514\na16f27f92ff4f2e38e3b92f3267047b5a18c0634 svn.3515\n5c28735694f34b436cd96af6adafc04c773bbac4 svn.3516\neec8a68acde9448799a2f7ae530e29d518c3f211 svn.3517\nd21e66c7a887a933f357e2706bf94b4f93f9094d svn.3518\nb7e26057860eabf1950f5a9d2e405a570c7e353e svn.3519\nec52df08c3690ad9d2473938827f9a52cd55efe0 svn.3520\nc9fca0f6a3e5f1b210b1afded91ed2c13ed3dea0 svn.3521\n63b6177fe397682c91f9118286c56355f9cdd1b6 svn.3522\nf78989bf8ebb38d06111277b8acef56b309cf56f svn.3523\ne34190fec006d9a810fdf76eb3b36b5cb558fa3a svn.3524\n8a54ac07270cd308a528b0baac6bd35e9cb5fd0b svn.3525\n55186ee27a0255d2813293b6a047db08e3fd2440 svn.3526\ndfb605eac1cccb6d172666537a8ddf5838f5c7f4 svn.3527\n8538490d19ac2dd1578664d7adc0387f1cf69686 svn.3528\ncf08c4736c6bd7fb00d716cfb250705e397354c3 svn.3529\n83a42fd3187118ba4e9497b1adb072a43b6d8eeb svn.3530\nc4b85a1eecb2e7b8ca20a3e77a46a84634080256 svn.3531\n88b644485e4b2e044c9558597ee3003f734cc8b1 svn.3532\n07f3d81581b373987cc0b9dd4bba350dee1335e1 svn.3533\n827ad5e11505a899c3dae9c0de9e1595a3cd775d svn.3534\n0c80dace3264942a3f35bf9a51f8680a0abc311a svn.3535\n2bc7e69d90e371ef4b893fdb8d5d5ec5dfa5e1cd svn.3536\ndd05fa9a90eb3979db8e36d2668d5691709aeb86 svn.3537\n3cc68166fa1bebffeb8da77f5ae030c9514bfd91 svn.3538\nc4128f67cb9fc17cc6c145cb7015b568bfdb58c7 svn.3539\nf2bbd72bde1e35fee1be8e5b474888b85f85afc7 svn.3540\n26409afe41913669643ea13461cc2dfcfea0fe14 svn.3541\na5c94163bcb9333181bdfae231145bd0eae39375 svn.3542\na5d1a875587347ab4dcfc3023695e0341a92223e svn.3543\n16a8688a6dea4c81f281489d4498598057ac03f3 svn.3544\nfb49c6252ae2e5751ae61c2f2670966a3522475b svn.3545\nbf11977ab2e484a8a5b224be8b33352e6c5c6799 svn.3546\nc5bcc14506e7338d27d374c867e1d54812f4f76d svn.3547\nd93059b53d7d720cc3e1561ed4105696b9dbfad5 svn.3548\na0a81248e4d6b8e320072071189995380b65d371 svn.3549\n2fd5c934a132902d8c82314fb855738b7e43c3f5 svn.3550\n60e9a1e35e089ad6d39bf18a0c758ec65c17b437 svn.3551\nf83fe38fa6dcb9b87c387f7e5516d2e6122db231 svn.3552\n38aaacecdb7da09d4195ef1558e5b5afc51782b5 svn.3553\n4b91eac02a7a2d50aab8935dff94cddf6d5a6c32 svn.3554\nea80ad0b87201df60f605eb3b938880ab969cc2f svn.3555\n94882f571ae1b5eea62f989650c625d7d531fe56 svn.3556\n1daad73b5dfd3df31228f12e6c61caaf5b3ad7de svn.3557\n5f3429c43b5d9696136037dd76fc870d6ea7e421 svn.3558\nb4e876144542f04e1b384260ea8640dc5da3a4a4 svn.3559\n9188cfb1871077d079ea477ec21461fa0a81df4d svn.3560\nc5a7869f299667efe8f122d587b87e1cf9900b97 svn.3561\nf006251b5722e3a3f5ab8075eb93257c67bbc89e svn.3562\nea72df78a3bd55867bc2ec4d210ff2faa18872db svn.3563\n634ea6c4642f2f277cddf5c1191878e6e07455a0 svn.3564\naa9a2125d3117f4b1644c7e0eee178e0a2127ef5 svn.3565\nf871a628f4a72c08b137d08333768bf4434917d8 svn.3566\n5784ca3a36faa0f76c3e71ac25c6d7845a817df8 svn.3567\na5933111ef712104e759ccbe678af7f3c8b169e1 svn.3568\n79abb89b14deb8b7c1ae6eb7c57602f9c2b6b913 svn.3569\n01184279a640e6b2a0c6262557639674dd8035f1 svn.3570\n01184279a640e6b2a0c6262557639674dd8035f1 svn.3571\n5156dd7bc6fcdf92defb6d56b7b7f423c11da5f1 svn.3572\naf7cc6a6a2d9132f99538c1a342aa695926f08b2 svn.3573\na0c5281a7e4c81fee7d3b9c802e81ffea2a9b4c7 svn.3574\n50a9b9a30398f6b2816bf4844048bef9dd750c53 svn.3575\n773c8ef571d07ae9a053f6e03fe0c37513c0bd06 svn.3576\nb72ec874eb47b8f8e6c8429c798bf55371e26eaa svn.3577\na3ac9d91ae70b7d812c6c218d2b63d7052c907b4 svn.3578\na25787a28b4cf9878fee2989c99cce67bb183b55 svn.3579\nfd8b2b6ddc6d72079d9137cb8899e15a6ffa4a5f svn.3580\n66501d370267487f425c0cf42001398107ce5299 svn.3581\n8a60051d67288d08990185bfe2bc6e4d81286cb9 svn.3582\n58f3a7ddd94aa1263c1f605122f0e2cfbad2b67b svn.3583\n895cc7e511e68e5b68f578f393a322819a4eea97 svn.3584\n81617dd1974b41f975d56c6d693d14c67daa7e05 svn.3585\n658b2915b9341d958e2b4e719f0bab3b76166378 svn.3586\ne5c0737f65a263c6837f46f8012ec0cc8b8aebd8 svn.3587\ndcad71fbda1b2e027a20b0013d356c5b7da09599 svn.3588\n6b4b1c8c3267f081b07a1a7503827a992ea1fc43 svn.3589\n407e31d44ad7b91ab84af7f7535e405f7d5a9125 svn.3590\n6ef3f12d522c21ffb001ece15dd363b05c489d15 svn.3591\nbe06b70b88450f28f29e0fcb1a25d19f3df1a38e svn.3592\n747181b7ce5561bcfe353f73f405ded26c417e0b svn.3593\nac209595587624ed7129a4c5f430505f42628319 svn.3594\n9e2643d3dcff52b377e001edee5f605cbbb35d62 svn.3595\n1aff50459c56b7bdd05e3f63730a7fd3f0c1dcf6 svn.3596\n4246417fb974bf2bf121891364924132c972a299 svn.3597\n5a38b3decf20bb543b5dfba225ef5ee2d49562a3 svn.3598\n0b934256476b4c2c02932b89ea2cb34c3dd2035a svn.3599\n2e6bd6b90c38a4942e4465cb16a0e935fe6cfc79 svn.3600\na7e72cb934aefab321f4c197e25e8b2513ac3ff3 svn.3601\n86ee36de1bdc5106bdd71df05ffc3bb5d97c6f47 svn.3602\n0b5c1f4fdff31f6e2b94f1757047b2e0303eb190 svn.3603\n09cb3a239ae325a9ac741264b6556b5b34f26734 svn.3604\n953a71afd187c7f39da21989c212c65e0e940932 svn.3605\n1e435829a0972a07c4933969fa13dbbd987c46a0 svn.3606\n6b2847a77b8eb3a3e5da0535c9abaabe9aa8afd1 svn.3607\n92f915ca49f8441152a422fe666ba9a30a5ea004 svn.3608\n46351d897ce02f0a9d39e8d4b1f16221d798c23d svn.3609\n7a60599ffe94b12c60c63c8141e8acefbf1cce4d svn.3610\n2069433ac84b68b12150686dd218aa45bc09024a svn.3611\n11d0bc0f313295e8a81c70df49bba39ee7bb64d5 svn.3612\n3c04505d7744418effe1399091642ef9eb3d9470 svn.3613\n5c615ba291393a5293b7bf4e3e793ed89c2716d0 svn.3614\n6c16925b75abf5d70413df8b5091dd2a8425e0bc svn.3615\n1cc938b22fdce7a82221988603a66a53ed2051e6 svn.3616\nf23316e3e4edf69357fe3e23099ee1cd7ea476bf svn.3617\n7850c7ef8a9e0ecb4f0b0c12f686ccfb747103da svn.3618\n7945620427faac450dd49b6ed88137397852d8b8 svn.3619\ndd0bbd963c51efae1c6527448efb68ac73dc5036 svn.3620\n21876f23d6e2382bacfe6e75500cd04992907d21 svn.3621\na028abac9896434b6aadf6c5dbeacf336eeebebd svn.3622\ndcee7a1b90d17a1fc4de98c0f0926dd91a0c17d6 svn.3623\nabc22b71bc2433ea0481d0d8311598abeffd6698 svn.3624\n4e405ad964198b6a6ef5c7d8ef397b9e34d1c935 svn.3625\nf14e07d2e7386914aa687ce03dbf82f44d4e1076 svn.3626\n56c42e6cec821c3ba4a57c4e8626600ec1d69076 svn.3627\n1c7832963e3cc3797e0bad27b2bfb9b73a32fb86 svn.3628\n1621cc673910b65265dcda100921ad6f7223c10c svn.3629\nb1442e1ff51def995a47dd5330ea4e7604fd5cf8 svn.3630\nb1442e1ff51def995a47dd5330ea4e7604fd5cf8 svn.3631\naedfe98bf6a23879d83abb9613a6e511ee046d4e svn.3633\n27e9a53f108bc6c7bb28ca8f2e0fafa7884643a2 svn.3634\nde2fe64af5d7f877e98248063da660b29feee21a svn.3632\ned42e102db488ddb1c4199adaace130e5b996eb5 svn.3635\n1ce067fe49e2df2815b0a3175a25510417f40903 svn.3636\nb83822e9a4bd10c05dbc3da4ad84337ff060bbfb svn.3637\n7abdfa3dcc422ac8a75bf592c5179c5f925c96bf svn.3647\nea9cc000befc60fcf55bd5b9b2f589403c06bcc3 svn.3638\nc17e340fe8dafa5f87ba5db0503654f1359b2ce1 svn.3648\n108128175ee1e7db31aac95f7139dfe0977a09fb svn.3639\n26a20eaf74f804720116f699331170ec092ea0c6 svn.3649\n829bd4123945a5e294fb30ad17c57dd182ac2afd svn.3640\n65d5f86002fd422ed8111e10a730c3cbc9cba7a9 svn.3650\n0fd419e12eeecf23a3592dc4282028f562476023 svn.3651\n50195f48623ee90dd6b2b1bd351fce59a9da9bf9 svn.3641\nfbdde06133bb7bc8eae6bf2acdc86fd61e075569 svn.3652\n36b34c555982fa454bd2edaedd95644937a8c1d5 svn.3643\n76e5fc2ec881cf9e72456180bea95bb31f8d06e2 svn.3654\n8786f18477d4dae91251e2d244633d622ee2fa6e svn.3645\n27c872cad856c09e6aaa2f090215fc2f47fcaed6 svn.3646\n7ff9448439fa958b1a150a07b79cc937a33c94d8 svn.3653\nacd7e6099985987544d7de76fc4f6745e3b27f85 svn.3655\n42582220bc80abb4f16b84798a1483ac3f517e1c svn.3656\n497307b4fd20873a7f1c11398770979ef55359d3 svn.3657\ncad38542490e55ad50820540919b71682fdd74ea svn.3658\n73e1b7cae0d43b9bfd37370cc796d278d1a211c0 svn.3659\n1a7064c0a57389545135a46b94329c52b7a3ef61 svn.3660\n9e090ceada9b7cbae7f9475ad5d7c742f004d7f9 svn.3661\n64d792945e1912b6894bdddf27e10aecb4bdb35f svn.3662\ne3deb1d6462cde3c17f21a74424e96d5cf94c9f3 svn.3663\n4cf29240f6001fb0f974d1e1cb7791ab82e8cac6 svn.3664\nd20b8d28631d82c54a52235baf17cf128d041053 svn.3665\n8293a3eb7ac118cd8c30158401b5c1784ba13663 svn.3666\n030af992518b1486980e23575486166d1decc588 svn.3667\n69a9c444d23cdbf15aaac9f5b5d6914de21fc4e8 svn.3668\n2fb3dc2dc6035a2ef15e5a94773551d17211ac94 svn.3669\n41b608de729f869fb96789865b29bed833a9bd7e svn.3670\nf95bd6f1087b8539b5f06ecc16617d67ba7c8029 svn.3671\n33e3257ecedf245e94d89e882c7607c956137b42 svn.3672\n8dfeaf5d1e2ee911634f00ed6bccf3fd818fd7ae svn.3673\n3bc77524fcc4e79b5f106a83341b46471f212e79 svn.3674\n2f84e8ce6f046d946804f2d898e9681af2ba94e6 svn.3675\ne2b7a4a9d1834da285e19d0b0e18e333bad88351 svn.3676\n0c84eebe36dbb44ab74ec5c8d18aa72399b1c155 svn.3677\n1a980744f46405bd0c6bb78fc33c8d6d3ed05d53 svn.3678\n201b09188fbece2b13585c4d4514e6ae36b2dccb svn.3679\ne995fc44286c3c42b15c2c3a2fa717e0304ef3f2 svn.3680\n6e943d1a49be7e815dd295059ef1540380ca8026 svn.3681\na0bf28ae9e71f65acabbefd49249edad359a4d7c svn.3682\n3ef118a0052cdcd59341e9eb212b90de0968a8cc svn.3683\n8146c58c2b641323bfefa0cf2a04e96a444cc36c svn.3684\nb6d46e580169a1e07c8a9ae9de2bcd20808416e2 svn.3685\n8e1c0ecf8fc831a9bf9c5eeb9ae70566a23affee svn.3686\nd2350570c5a408242ce3a024ede82aeb8ff1494e svn.3687\ne3598c9e72839add5c90c2af9e7c2c0197177280 svn.3688\n0ac6ff443d12978073fe1a7fba3539aa1ec6eec1 svn.3689\n7f82c5a1b49561eba294df2cc09bb25a89d1828c svn.3690\ne3e16a859c45912c89bcc5a2fa1d8997b265face svn.3691\n3f1e25da028c6b076a7e6663a035c259f1300c15 svn.3692\n992c34861f0dab0cff4fecdaae5e4fab489c1bdd svn.3693\n2e592b6bc42fadba373986dfe0fe29e57e0a98c7 svn.3694\n980bbe8a34bc9bc5e04050615332ee5effa1e63a svn.3695\n19cebfa83c1b7c4ca13763adc3c7425e61a221e3 svn.3696\n6fbea19c724faeef85d65138604d188a4248d0cc svn.3697\n3c312f722bfbae4abbee9260308275a3c54b27cc svn.3702\n79930ac5cb05e6633c3b33421de2900b87a92ef2 svn.3703\n3bdb0896e2a392e5fee17b4014020678ff626c7f svn.3704\ne40ea4e02eada17f553159a8f71a82e56874e943 svn.3705\n3431813e7c635b5c68daa078f30e952d6ba555cc svn.3706\nf0026de987e450eb44f4f84505d1074fdaa7f203 svn.3707\n199ce5829c4627edc59d61679c672e4a304347f4 svn.3708\n0a7829e3c22b6d98a7b5481ca4c50a099e287fd1 svn.3709\ndb080861ceaccb9d378cae0966894000ba4469d3 svn.3710\nf5c05d0f14487daf75f677aa0640f6e42ab4c47f svn.3711\ndd9aa2409eb9d97e6044cad8595578061b1010e0 svn.3712\ne39557df5ad8b3f59bd4cad7304619df730ce1b7 svn.3713\na02153cde03f6e480974c144b474570e4f267150 svn.3714\n0fdb05a445a37fbc2db7047d90dad91ad867256a svn.3715\n3bc28674f8374cd268ee859d07bd067c06c55395 svn.3718\n52ccbe637ab7fc6a6a2e845c7a84af5427d98b3d svn.3723\nf49f5f8020bf3a7a66716a9b5ab7864a8ba0f443 svn.3724\nf1ac64fd254994f7c616960c0327709a5f6ddab9 svn.3725\n6d37cf347cab4829c1c164224f8ff48ef81044cd svn.3726\n0ab66e113c3684b539be5bc9fb394b3116719143 svn.3727\n81780404ef2c311d37c8a04046a364f1cdecd182 svn.3728\ne7433f2b50301d8034496553f1b404ed0cd9d7cf svn.3729\n78e1b17a2d7ad6cd6cc3fde5e8370143c9212b2c svn.3730\na2591d4dca3673c7e31b87b69987c5279f4cf8ec svn.3731\nae0227223b45995cd4bd0795b76ea4e14352c397 svn.3732\n6bdf21f80bd6510573c2c71c9b34b5e361d3fc81 svn.3733\na0edd4bba40c25485a6ed44cd948607034a75b62 svn.3734\nc4cb90b4ee51890dfd758ddeb0b276fbd7a0c6e1 svn.3735\n9b85f08c78385bbc14e21ea721cedbfd23ae8558 svn.3736\n30532821f9b6474505c26be17217068a6617f659 svn.3737\n736db303f5ba8e6bffb656763ec0d9eabb1ad879 svn.3738\ne7d92a75b9386c276be41d9c58b29c3340549a9b svn.3739\nf4f6083d097de31f260aaa996102f05423953957 svn.3740\nb8e6ca7cee6da7b16543a1d6dac7b20ec661882b svn.3741\necf5ae9d3dfe8ee65573b555e548b62602031ade svn.3742\n4147ff675ae2a948af6d63be8e47c7f1ad89f482 svn.3743\ncbeb2bcbd46df9e2637d84835f5c88c4eefeb984 svn.3744\n127bfb93e0070aca0145ec08a096901fd9903000 svn.3745\n305be31f727f46c0bf1290ecc36d2af3dec368e7 svn.3746\n2e638b96de9e7a2fb6ec7e5f0e6cf284ed110ca6 svn.3747\nd401e48a013555ac0ea6198025b1d47d1170bf0c svn.3748\ne552803bdf776513d0c3ed1b4803b57814149278 svn.3749\n0adf3d7326bd870d27fb306a75f98b323891636b svn.3750\naa982b8623abda54b3b6aa80fd333586c1ab6a6e svn.3751\nb828500412bb60d7e04efa56fcaf34b8c7e6cb11 svn.3752\n92064e99ea9846906905d321289fe2f8d3649f79 svn.3753\na644d6862d95ec4695f4e35585d46cedcc96b3b9 svn.3754\n4f129944f74fa2be75f78e3c8f9cb338f14f8c3f svn.3755\nbc0e8e65bd86a17c1b087c43168d149b3f537a8d svn.3756\n1e5530339e4552fab84a76393095cd7f42c1a558 svn.3757\n596b8b6d1eb2d40feca13c437fc4cdebf75a79dd svn.3758\na443f95b52b2ea17a93e37b1309a21df9ca73c41 svn.3759\n30526de9d87513f987fb315403d77a9d75d5f7bf svn.3760\n6284751be3a14ae4f2c9cae17f7fabfd0bf0aeff svn.3761\n8eff98478dc397f130bcd4b831616c833b3c7e84 svn.3762\n9c4a1a878e8dc3949d84eafb58520d0dc6aed66f svn.3763\n79ff1a4df20c0718827a7c4e1be3f481271fec13 svn.3764\nee6050d7c2a05a9ec687612ca30a696a64d067ca svn.3765\na5705c7b96f31fb9d27ea327314c32ba431f7ae3 svn.3766\nfddef95a663d409e1e0968b2f938af4b2afb0de9 svn.3767\n4c46d968916c45e7cda119bc4acfabfc1e36a397 svn.3768\n3716b360057dce2a824e26b64f35b8788387869c svn.3769\n6f7fd539c2dcaaba32a37a6025956227f8785c5b svn.3770\nbd471f27510290645528175ebc0e098a01c98eef svn.3771\n9bb44311a16f2f33ce5bea6cf590c37fbe0804f6 svn.3772\nf5d2b664c4622babf99c22d21266cd5ee93e8205 svn.3773\n7f8713b4218acd6cd2ce7759612e825a71e14d64 svn.3774\nf1d3d8f43668ebb8fb6a3de889b6a47dc4318df1 svn.3775\nb37242722e0f4a250dbb67a1de5c33fcb498983b svn.3776\n20140487c17c3d7cc24e013b05a93c59b21485ab svn.3777\n1d4515fdb7e5abf43625d466d7f31e5d67433fc4 svn.3778\n49a85e7d72b2250bec0f314a35c1ac021c3ec2f7 svn.3779\n4278877deda59a30b3c731d78d69a3cb7f283dd3 svn.3780\n5753477a61a7a30479360d1f10c6f5dbd5a3c561 svn.3781\nf8a5f158356c9bb4c49d77613fc87881af6bfaed svn.3782\n10ef0d2663596f7fb9a1e647c80dbe07390fc202 svn.3783\nd5b01a84ed3ce717b0d5b9fb9d9a88aee25c7ac8 svn.3784\nfd79e40ba452257445354206a4357126538bc140 svn.3785\n7f8f26c70c7010181a42aa3cea5d3bba9ce5b9ce svn.3786\nbe037f629c7ae64ffd8aa60161e551e1c2160c3f svn.3787\nbe037f629c7ae64ffd8aa60161e551e1c2160c3f svn.3788\n4f2ee9155dfc7d7d1dd55dcd966d494d48d5f67d svn.3789\n9cde3c99091a3b508b142def861980cb06b28a99 svn.3790\n5fee91499bf1bf56c153c6d77a1e272b71191dc2 svn.3791\ncf4ad86f24083b08f406f75ae408e0f311bf5c6e svn.3792\n0de319595d732f1185710ef6860927bc633b1bd2 svn.3793\n0b07d1dd0403ca89f53da1a2a80c1ab614548c71 svn.3798\n02f67c17e46d65d741f6b4b3e695b47de8882c56 svn.3799\n8da4d9c1c6670f7ce35fc7c42c3267dc75f63a5d svn.3800\n2e38403612030add975539ec2432b82fea9ed25c svn.3801\n19100e23ec3f9a3a9077ca90fa39e957711d49cf svn.3802\n26eafe074f6be07141b2c1bbbc3a57819bcc22fa svn.3803\nd11867f83d518c77525a8673cf09cb1ee49d6eb9 svn.3804\n2ba6ae431cd479c1774d7ab3cac76e8bccb4b489 svn.3805\ne32d84565361b65d15820793fff5c319773959d9 svn.3806\n28058f2731950fe3f301cfaa0722d9865d726aa5 svn.3807\n3949f5d91989bfdb98f379f0ef2567deb53c8915 svn.3808\n161ffcad832f434475232981d39edc0c30abc76a svn.3809\n5fd10a1a3a82d46be6876d2ccab709e456ba727d svn.3810\n844456ed271cadc237a20036a95a1c6207e494e9 svn.3811\nc08db3c033bdf8f8db3efb7c0b0422a477a18149 svn.3812\n6226d41c99108ca03faccd2d3c7467250dc25508 svn.3813\n187974cb34a50a9d497132c48e2bba935cebf3e5 svn.3814\n9c0be481fea65252489e8692e357dbff9cfd639c svn.3815\nb4d226a0b0a9d3800cb0fa2d6bc623ccdcabf0a8 svn.3816\nb8a5594baa2744b9a9142e2933e62abc049d85e6 svn.3817\nf611ce7e21450ce5e63be760dcad0353516092b2 svn.3818\n46bd8f33896d3b95c6a899958de3a35cb26c1b1b svn.3819\n2764cb47af9a0758e4d879e5f0b4d5df7f95210e svn.3820\n679331849b0b7a6291f3bafec14a00986987617b svn.3821\naf28565d312c8d845cd69c3b243c4cb8d05a5c08 svn.3822\n6521c705b6ab25924171afd3a01abf742f6e2cc2 svn.3823\n95bec224571915bec384cc2bc7c3d9c1963f221c svn.3824\n6f9dc545512154c48c4229369471d77c57fac41d svn.3825\nb05f4503113529452d87d848e2065ab2e3f0a427 svn.3826\n83d7515e62444d547370401db0970a98304ace8a svn.3827\nf591954a3d96751c9b507be0dc0962d22a994f8e svn.3828\n1333954c31a40d73887ef5dd48329d283ae3e1dd svn.3829\nfa3f1ed793d02d86e74c4c4a644018660787b723 svn.3830\nefb89f58bd005af38cfd2913a9174ffbead12ca3 svn.3831\n5b8ef2447e240ce4d957bc4367462c02e8e7a129 svn.3832\nc8ff0443ec860eeb6669883e690be0830061abd7 svn.3833\n6c580aea6dd6fd8966795f4e59a8f0139a48ce78 svn.3834\n7bf21aa6b648788e0b7cf5fc42a11a80c7ad2be7 svn.3835\n595c34a965ca2209c8b06a1136aede44ff40cfca svn.3836\n25ce99432fdf20071e110518d157223185eb1b92 svn.3837\n3d4ce7cb6a310543229de96c827e18b5ea11b813 svn.3838\n50cfa8b881fff11189cb4652600bcf61003aba84 svn.3839\n12d87fa995d81579ae7821455c9896c1e43cf331 svn.3840\nc9e0668bdb8327a3ba31eb3a56163027205b6627 svn.3841\n43e8873c2b074efbb58d34103433ef07e08de673 svn.3842\n9093bfd93b15ccef5b42c1120c2e11ec7f48fbff svn.3843\n2eeb427c96e6f58c84411a20ca150eba45c8d8a3 svn.3844\n2ba72255e87dc8b415dfc8600ee8773da146271f svn.3845\nd8157b8889b86e5d362fe3373c529b17f10f6235 svn.3846\n1312da2ea8ef1dc0bee98d00c2812f462b45cca4 svn.3847\n06e26e68498b752fd145f6e1d2f6aced632399f8 svn.3848\n76f8eb685887f18b5ca239b78006ee3e6f82da29 svn.3849\n4313e9114a249e3cd29a4260f0c4b38c772b6859 svn.3850\n017d61855f038e12696fa6614d43841a93698430 svn.3851\n482269be18afb5c4f9041c0a33e6c22daa71590a svn.3852\n3c17bb0172334e0a2870cd3aefd59a5fa36da966 svn.3853\n8d9581531e7d3413d0b1506655cd294ce8cc944d svn.3854\n9f92645e00643c17585a13e6a9b37d7c13e645c0 svn.3855\n478b430e015ad49220b886487d1dd4d7277230a5 svn.3856\n651c24b0d87e524714fed854d6400e107588c1cc svn.3857\n0982056dbef352797a2c5aa95327c612a1dd2dd7 svn.3858\n321daba68c9f600a85f73799d730565d8d52a865 svn.3859\n4f2e2c8dabd899a95c24e9dae1ecef2a938eafab svn.3860\n4f2e2c8dabd899a95c24e9dae1ecef2a938eafab svn.3861\n55f53ccebb3bc3034bf0911474eacf6356157761 svn.3862\n1dbf164d82342b3226ca4ba6602d8f72bd45d6c9 svn.3866\n6b30dd8dd6c67a6d36e0b29b5e74706e4c57ba2e svn.3863\n949d1dc451265899396cfe5be4b0c4756a13ba47 svn.3867\n56d99630343d0f5f3cb6c9b4bd73e5a72320ef9c svn.3864\n759efec840463bc41754eb8e52abc2985802b5ca svn.3865\nfd79c70911c19370fcccfbcac2499cd9a7581920 svn.3870\n364419ae8aa94237a5904a3a7b9206e4c209b8e8 svn.3868\n0a3f0edaf0917b54ed82a105768dbdbedc64620b svn.3871\nc0ad8099ba75e146f758a888d438d69f3bf18567 svn.3869\n7026dac8c882095bb78cee06f6718244a6dcf84f svn.3872\n67ccf892726ee05940f33ad3074df0f6d0e5f553 svn.3873\nb0ec5ee9bd04974abf1bef0cab5a222cd734e948 svn.3874\n746add37e8f5f79b1f59d0c298c77354ddd74aa5 svn.3875\n96837fb5f0a8f9c25473961591d76335cfe76b30 svn.3877\nfc720ba7fbcadb998aa61a611cb5a7b9b068959d svn.3882\n3b1c9e0e76b924f986f1fc94f140ae0e5d98b56b svn.3876\n255ec63cdef411860dd8c8ce07372b0674204f62 svn.3883\n73d685089b53f4182caac7aadba34ddfc5d4e5ab svn.3878\n02e0cb4d82506f0b0bd16fa68ccd6da37c1933cd svn.3879\n56db94178675ca0c184b505385385dc6253a7409 svn.3884\n97d23a9a996d4359d9111a042a8c5d195f353f27 svn.3880\nead63302bb69f50e877ac9dd18517736297eaf17 svn.3885\nf60986a2b4b6275be088369994ad33b630ca3b2d svn.3894\n701f7effd94c151e028101ad059af5010569fba0 svn.3886\n05af34c947896b250c0f5c382e9b5d9f0fad07b4 svn.3895\n2e3a3ca103b6a1c5c4832566247a94bf25bc3955 svn.3887\n75c2a1c1c37eb8f9626ad90002db825a868c5897 svn.3897\n26b792f205d2e097de13f56876914b5752b99157 svn.3888\n963b4084845943e7e6cbc1122d7c99f1ebb9e317 svn.3963\n1124a5e630ac53eea9ea0f840fe8d58ca3b256d8 svn.3889\nede872cfbba5008a1ac15e767eedf685bb01ab2e svn.3964\n8e640e526a139138a29e10eff641b6cc0f0982b0 svn.3890\n0277e5f7aa30a780f4ff7360b073eb14eccd5ac8 svn.3968\n0218a2ad8f0e1cab1790dab1832274e32e4f3b6a svn.3891\n7a5538539d7f5cdc49179116c9612294d955bc5d svn.3892\nee5683be4a89184832c5a3421869fc84c4fcb9a1 svn.3976\n24c054d44932390555061499e0c79d0c514ccb52 svn.3893\n3e90e8c6102d0ce9035b986af2e2c715748ec722 svn.3977\nd039895fb90ca67602829259f64d02fe22c44010 svn.3896\n05a892f8b564c881ecdf6b98e99ab2feaacf1f44 svn.3978\nb5b6bd29294579d471e33c283daf30a84935ab5f svn.3899\n23f4916d4b54af053a07a5ff0fd3f09f9bb96eab svn.3980\n815c21888fe9d103199c8e8c2c1812dffbfdbbc7 svn.3900\na2c84b768951564b8cb9c4e6f96eda05ae0a1cd3 svn.3901\nb106f56672b7138f580e79c28974c47dc935a64e svn.3902\nbd838e4141a4efdc45abd602f81feeecab43f863 svn.3903\n4630d65187bdf945be4939b61a17a9a73cab1a9d svn.3904\nd2c3a7c63af24856ace67bfaf8c8b395393ac527 svn.3905\n2aaae75850bc13cc6ca429f1c3431c207280fa99 svn.3906\nc8795d849b9911a3640abe6ae2bf083cea9fa4ce svn.3907\nefbf62e1d0fe49670ef784b71d0312d14d8f88d4 svn.3908\n962cd08b3d264bdccfafb3034110dfb377f9c8c0 svn.3909\n04f3844b34833719514fdc6ef4aa161264012e16 svn.3910\n1b8da49bb5277fe8039963af4b64156dacc09132 svn.3911\nac14bcbd998ad29509d31b8c2d030569e4b8f331 svn.3912\n48af8d7ed2cacbf0366a084a82640c2f0a4c563a svn.3913\n554a248c67c87ed442eec61c9cb8bf85bf4bf874 svn.3914\nbad902b8a46096d2f736a0f45f374ad827d14258 svn.3915\n34554e66dd0cfbe5c17cd68091b180f1be8258bc svn.3916\n19c169b62ac6b4e4fb5f7175a7621ab82a153a6b svn.3917\n637eb918d5821911d523985b846c580020cf523c svn.3918\n13777f60fb68ac5119268a1691b55cc4927b6a90 svn.3919\n7f55c822a83ea742ed5576e9c8bcc423f03d19ea svn.3920\ne646cb1ed895df3dcc83ff5f537c071aaf72cb1e svn.3921\nacabec6398c320a31a2be869b4519b054733beef svn.3922\nc736b9b6c65d2cfca02a185b6baff1ed20b59beb svn.3923\nf27eee86488104af7819d48174c164468d48b18a svn.3924\nef264126f310e33387cc7d18f7a02e0a147d72de svn.3925\n3da85f59be451d70fe389cc72ca71f8c00e16add svn.3926\n9092ae45ce6eb0f541e73c84e001be3bae5dbc8d svn.3927\na116fba88324f36212d9f53dae7f0f9c855f0f73 svn.3928\n7cf41b9465d6a081c22839f2250f3043809669c7 svn.3929\n8091063d9db06c0b1b81f1a94ab28727d9f76271 svn.3930\n27612a5258a4b049ea98e2f3505c7c959f553fb4 svn.3931\n78f03a19b8376ee3c8c70cd3d111cc4d35e3d5cc svn.3932\nb8c51cc6bbeb45c72e36bdc31a7d171ddaf669e8 svn.3933\n654f99a1409088b912e3ddfd15071042483931c2 svn.3934\n18a4fe8932235a326a8daccae3a3331dce648e8d svn.3935\n94df8cfa9faf5597adaffc15aa33141ba3335dff svn.3936\n9e793e9c4b49c48eb34b47055231f96172cc2dab svn.3937\ne55d96c7b8d0c8b592ed907edac2f794400d2d5e svn.3938\n0b3e2e9152e813ecaed16f2d35558e6a202169ef svn.3939\n5f01d86f974137b1a9938b3c1dda802670bc5990 svn.3940\n533d4bb00fae1433b7bd293de435957fa1f16114 svn.3941\n5575942fc50d142865dca3738124d8449a0278b0 svn.3942\nd15f1faca747e6af45dffee85342f98b85b455cd svn.3943\n97477ff2a26732bd0e3af7180f558db8ec89cb89 svn.3944\n0c240073d78ae0988a71106312bf9fe75fe4b167 svn.3945\n8c7dc2e0b7d18bc919b138bfcc095e1d871a692b svn.3946\n634751c85ea4df363f7429203e40026d98b0236a svn.3947\n1d52e1347a59881c14d5880146a22d78ba6abea4 svn.3948\n70e0061119b4cb936533016eff8025eca236d4ce svn.3950\nad341e7870d6dd6216d104ad7932cd73fd47e955 svn.3951\n93c4653ecd5e5894e13a830d2037428b6f4a8ab6 svn.3952\n73b30eff8b63450508dfdd4bd9e990accf4c2ba9 svn.3953\n7b2792927540cf3d37acb1bc1a0080d16b7245f0 svn.3954\n6fcfc52e61323e9a08722cdc4edaf75cddbee973 svn.3955\ne9fb3222c662f11f056c73fdcafd9c02f91296cf svn.3956\n0b06c68355a902c7a3d7218d206f23241747ff6f svn.3957\n35696dfdfcac924202bb8b442a758928a5b724fc svn.3958\n10af2a651bb36803ab01e528e684e1ba37ce431f svn.3959\nf7569d827523a18d04cc4746e251d7505df38b25 svn.3960\n5c1114d539e7a53cc3ac82a5a2f41a5223ac6b0a svn.3961\nf1bb56a67b4c7c004fc6a2b23af2bc54c4a0d0e0 svn.3962\nfafc20ac0c2e588d856bdbc35ec9aa588313464c svn.3965\nea56460b4fc08e0e2a1265dc7b7af554a751c014 svn.3966\nfccacd71bfc61d8079f05775bff4f0db52409044 svn.3967\nbbe22e63b034c3be7fd3ee454fdaec1637c7a90f svn.3969\ne3ad2d2f98b77d21d896e81fe320502144755a3f svn.3970\ncb1a273e3ea3c35d4ce89867a0ac7c9736937829 svn.3971\n066509282a125b98f827bd49c1828e0080d45dca svn.3972\nbe949b24f9a5c8c5ef3d46e6ab8d6a1e5f692c10 svn.3973\n6daf8ea56beb37183f925e5aad079b9f61d88548 svn.3974\necfc066ce2ce243a27968f44106ef7fb441c743e svn.3975\n61e0e0b02e41fbeb08b4efe5a92f86a8d9187e6e svn.3979\nf5b3589c61045a6e93b6f3e9cfc7cd0ced99f067 svn.3982\n2fa1f6937e04ff3c44701350b09c917d2b1849a8 svn.3983\nb8c9efe1ae28cb9a96f4ff6c65d314447a33e285 svn.3984\n1b09aa5ee731b828f246731cf1cf80b2a4d81c5d svn.3985\n6969423b6350f285b1ba95ad2ce3e8c28210d990 svn.3986\nec6cf719addfcabddb4f5fbb47de9b18e251c95c svn.3987\n1b9628c145ddbdd3a4093829d06c4267b83cc903 svn.3988\nf8b4fed955f5c546dce7803264c9bd6b63df94d0 svn.3989\n979622b7c6a7bc11440153dc8396fe432d370253 svn.3990\nb6ba7d3f6a338bcf92c39d02f073c66635098313 svn.3994\n979622b7c6a7bc11440153dc8396fe432d370253 svn.3991\n02a04793da1aa69c3bddf2dd4b9f6fefce98bc02 svn.3995\nc93da94fcf0a3e695900e944a85f9f67b5bb3c0f svn.3992\n38deae5a48c419594d08ad643400ca1895710f93 svn.3997\n337295f52243c83a8294650a10be6e9327da55f1 svn.3993\ne2b6de58d7cf23625ebd313801104d2b9aaa705a svn.3996\n01e1f5a6350f695e6f759c2258c9807964d45767 svn.4051\ndceff9a317dfb59c2d79d0620db35abbbafa056b svn.3998\na436351f25f188e38134d545003ddc597d29a81a svn.4041\nb4c8c8723072a154a8e05d730aee15268acf67f9 svn.4052\nf3aecb3f66b4f726f2b20cb621f5b2aada4a8e77 svn.4054\n58d554bd880445865d5142b6355c98ffeed8e468 svn.3999\nf134f64251d50830639f6876a9149595ea3fc7af svn.4053\na454609368b0a23e3cc5cd491a14615023fabd35 svn.4000\nf4f877c9822128a5d902078a7777292272a6ec4d svn.4079\nd5f5e4fcbd584fc22bf6bdba89c7366c1249aa07 svn.4109\n44a210cb69b2f23f360c05c61075ab64f472761c svn.4001\n30eea4a9104e2b316f49cf4a133e2c51025b6f8a svn.4110\n5cfc965e2982f56017fe826ee18b8e6d553c82e5 svn.4002\n4d51d681076c87fa3c35cfd28c6f66e4fcc4810d svn.4003\nf43265bb4caf680887d1c6903b3a74f4998d4ba2 svn.4130\n6febad8286fbd4bcd1fc56f7ba0c6ba50ef0106c svn.4004\n0f753464963af31a4fa4465391772ca6fb2defa5 svn.4134\ndfe41157f4d9431fa0d28973336873fc024926c8 svn.4138\n8a5de305591be26913a54bf40e17d35b4e8bbbea svn.4005\n597c3adead8c82be351927a3f046af77f4d3842d svn.4139\nba9adba49e94a55b0fc1386788a8be4d64d4dccf svn.4006\n1126c68c54779bb4df9a7910cd722f0277e5c05e svn.4162\ne1201372de864cd222c30fd0acceea3623de3265 svn.4007\ndcfb32a3cad67e0cca40b79ecc969b3b79705c01 svn.4163\n2ef53526319427813639ebe34a4f875905075703 svn.4008\n55828c33f47f3335826bb8212a9b01b9c8490e04 svn.4164\n6050eedfcd19a6c2e107834572caf26bc0b7d792 svn.4009\n0d90317e579b2a59165e22df62201b9e43520ba7 svn.4276\nd90bbf60d48757980ced116c0cc81ebc6a190435 svn.4010\n0d90317e579b2a59165e22df62201b9e43520ba7 svn.4277\n7b6f740e3fbab26655d676d2305f0c2b58071a9c svn.4011\n4573681fbed536616a722c37b568eb70426e0142 svn.4278\na245e2a8ad0e47643bce90bf0fbe465ba06e7452 svn.4012\nd71c430fbeae39951352d3c9dd42ed5d4957b48f svn.4281\n48073b5f4142d3407e726a74234390d85505a0c9 svn.4013\n82d8137b65828542b5de86d0f5e453663aac9801 svn.4282\n4c685c853a24e0925991879798a65856e8dee4e9 svn.4014\nf77faac830e7509cf36e92d5f22ae3f781256dfd svn.4283\nc8f57168cc413c2961e2cdb242afae2577a2f052 svn.4015\n4ad00106083adbb72e29c650ac0b819742ce9cf5 svn.4284\nf185c19918857e8e0ef48c4cee4bdaf2756ada7f svn.4016\nb58747f596f90382303ab0ada81eca48f4ce9cdb svn.4296\nb1938d3de817e5109baf8cecba1d9f9affc5e940 svn.4017\nb71bfc9a0201b383d6f252abec0b8248e6117e10 svn.4297\n35fdf0d9db825abefaa1166015fee3e92fb8f204 svn.4018\nbf04b6677ca4b39b68390949cd146a5010f6b52a svn.4314\n5c9011de5ea875476db50c7da95e7e98770df6f6 svn.4019\nbb749dd5716a27415d7c32f26710302e160308bc svn.4020\n8b53c2b1bf369caed44d19c52cf6029e6b4c7534 svn.4338\n90ddef0150cadf4d0ecd699eb0d76954741acc27 svn.4021\n150a8864396de7178bc44d1c944ee99ee0e63abf svn.4339\nb0e35735b54f44b90ee345f1802653cbe9c1da4a svn.4022\n3121fb35713f81117da621180a4d740fa3a557ad svn.4023\n31344a40da8d5970386d0ef1085fb9ff0ce2628f svn.4024\n6a5cb3ad7c538b29d5a82c52b162389d3aba20d0 svn.4025\n33c1448902bafdb24fb7aad0927050dea31b28ec svn.4026\n63899cf06fdd4c4bd3c1683b532a6cef2fe1841e svn.4027\n63899cf06fdd4c4bd3c1683b532a6cef2fe1841e svn.4028\ne71317eb4e0d6a7a560f2c80475de9a286556ac2 svn.4029\n0f5fe9a1d4aa2f8511a0569a35ebdce9bf1e6d5f svn.4030\nddd9026c3f0d605ffd53291ceece9ff5bbf8f1f5 svn.4031\nff627c0775b5b7efa4a941e8c04f937ec9cb7181 svn.4032\nf0ad238f25121dbf16ac0cf8c27b807d17e01f12 svn.4033\n56aff8f16af580167c5124a9969ecb476ac2a214 svn.4034\n710772d846395d87b4bddd3ee381c3bf1b163f67 svn.4035\n710772d846395d87b4bddd3ee381c3bf1b163f67 svn.4036\n66a7adba58097d25c7852ca8ba11ae7e0d78bb70 svn.4038\n740e51c4eaa762238442a8b6bffe05d23e36f774 svn.4037\nc639f406fcb9d07b387925a87c1c997493251efc svn.4039\n2fdd432161d46f28e330be086e9e9a177513886d svn.4040\n346c3e6c0a14303dc589d2101a55464492d66678 svn.4043\n164a9b5a9e989fad3f21f7eec2bae94944419547 svn.4056\n6d4bc8e1f5769b161086976f082aa83b056ff4db svn.4042\n015e5a682f66690b00ab919f7ec315d427db866a svn.4057\n7bd5a5c5bd51fd96bc28775864bbac7dc9f42590 svn.4044\nca42ce3f8d415a307303e37726893284d316f1b9 svn.4058\n8289a7a33ddd3c9deb9ee6a54f73f14dc56594cc svn.4045\n13e454e2151bdc22ce3b28a8962261ba3839f5ee svn.4061\nf6868c5eeee14dc47f5353a2872bf122d5beafcd svn.4046\n2c3bc496d0631a564a46ba71f6b37bff26b1f6e7 svn.4062\n8370567ba98adb9064714b209ccabedb85cf6750 svn.4047\n6589db70f7a0888c47ff91df0d3da0d05f7d5f6a svn.4065\n6b1462d93b12056542ffaaf48e70db71324858fe svn.4048\n588bb90ea8f7ed2bbb24dea2a1156b2d5d3ae962 svn.4066\n21b58d11db071204c9aad4e4e370f861e3cb4f12 svn.4049\n2ca1fa09920dbda2f3603e36579cb3cb7f1a0f16 svn.4067\n5e5ca20a30bcec71ae61243ac28be1785925119f svn.4050\n77257399ce5afca06ef851e9581500e81fb8d225 svn.4068\n7203d2f690c7dff3f9c7ba55dd3fb2d79f5e8be6 svn.4055\nec97da52f643343efac61b1b177f3d935d1fd47b svn.4077\na1f3809b126278f08a82b128fbc943b647816ae5 svn.4059\nba200e65f3d9e857956d763ca482456efb2275bf svn.4078\nc746fb76ee5ca3d19c3c40372379dda3f90b2a30 svn.4060\ndf5272b0e0bf601a2a341ae669c1a8d6850b8e22 svn.4063\n0e360039bb9231ca888fde4b64d091321633d687 svn.4084\n01929f2ca6bea35f6ffadf5d78de3b4ef05f087a svn.4064\n9bfdb339dd4d99906dd3b8f1d9d8d7c9312abec8 svn.4085\nd7c01a9868f534328c70d748091771f1571dbee4 svn.4069\nbd9a53354e0948b7858812c57f2811de0b8c775c svn.4086\nb56009474970ced7a29eb36b9547f203e9c758fc svn.4070\n5a8d9c17009964a355b6f848b769200b4b2cd530 svn.4088\n5b3ac66014ebd2b47e393e10d372e2d874b78f03 svn.4071\nb3cb2bf695e9b088ba865e95ce5c01c701f3c5e5 svn.4089\n813cd7709a071908b07b3f153620846fb8614a0a svn.4072\nf9a5de9ed00bef513e0da3c8f1712cf5c59ab1a7 svn.4093\nf6a8641ec29fe413372b2ba5c375e7486140b66a svn.4073\need3febd6728b511b1611e2b8ecf0c3d56e550b3 svn.4094\n9b23755cef52a9f599471d2c08ddceaa6697eadc svn.4074\n2bacd0e3a8dd94caa4807ab93842ad80ecc548f7 svn.4101\nf68071447c6f516f9ad4ccf92e5b3c6aea53f902 svn.4075\nc30d418a0684116fb57910e3485fc176d9fae0cf svn.4102\n1d14e0ba06a4386527188b52a40b6458609be638 svn.4076\n9a06bb230663d95a02d59a7d240d0b9756111ade svn.4103\nd8b34f5d67a96ef82dc1ef45cc0743bd0a5a981d svn.4114\nce672d1392b95bdec07cf2323a0fa8df509a248d svn.4080\n8a01855c5fc53c38b63c00c1621aeecefa5d2260 svn.4115\n0738d235d22801938b0a656d57004b4fde361cb3 svn.4081\n68161b779b3866c0e7f0efddf9084c942d951cec svn.4116\n729c290043e4bcce02ad838ef1278bbbacb6d25f svn.4082\nf88fdf1c5029182b1d64ff9bb29038eb40f0ba82 svn.4117\n1ea81d2d23ff2a6c77b5019b4b877693a2e73309 svn.4083\n25fd63b62c68272cb9bb1c45410af64de7cf0542 svn.4118\n83af78419ecfab8125a7ed09d1981219b90e8c48 svn.4087\n92019a57f4fdc16a21f2313d9e2cfb4713daf894 svn.4119\n8683966658624bd1025518d197ce8ab0ca1086c9 svn.4090\nbd3f9e8c7e41399282f980be8214a5c2efcc4d19 svn.4120\nbac2763187365287512c25ccff6cb85eafe7cfff svn.4091\n426bed520ec8eb486b6ae3ed2243321cec24a940 svn.4121\ne82f5f3baa8fd8c13f733e9501b06271bd9b15ad svn.4092\n3fb663ead14a13176d465655778e53e2c57a8d74 svn.4122\nf792e62e662f0ccef37e906375ef7c69cca85c18 svn.4095\n6614d15fd92174dcc5747d71d1451475390e135c svn.4096\nf7c7ad5341fbc52b2a88175cdca1c96786579e2b svn.4124\nc5078ca0d8d427ca3a11aa71a654f2f6bd8f313d svn.4097\n7336e968706d869ae312a42b6d7d75c9ba3bab1a svn.4125\n45abf041fde83195ccd28b76eeb69f09046dd8d2 svn.4098\n2b3da1841781e902706f028b6d09e6da6df8f2ac svn.4126\n6c7696c522f9886d4699cb667a1a99946061aff6 svn.4099\n2e977ca82b4553519c29f686e53df45b76c47ba7 svn.4131\n6b0a294a2759ffc4be2abf0fb8589286b384e5dc svn.4100\ne3cfd4e75410bf32d0dae78076a7f9fa31f19de9 svn.4132\nbd4a592ab16169ee08dad040f38b3f68867be99f svn.4104\n45eba41be049b637e086d7751d7b624b1210a966 svn.4133\ne2a1a22d16129a7ff78940e090f1b10505e792a7 svn.4105\nb9ea6ccebdfab6e80e91bab576a4bb60dc7fa625 svn.4135\n9c4aa3632729b512c2a039f935745aaea9e45e75 svn.4136\n7ce191cd77a3ac53a563747c40a64e14b126f8a1 svn.4106\n4b2965a569c8fcb89f4d86d5eef2c29c4f1ad695 svn.4137\ne629b880cb237d894a7e59579b2748c0a6010b53 svn.4107\nd05cdf45fdf70f5475c1d4414f08e4043cb254ad svn.4141\nc74e3d203dd89e2ef612c96f01641a31503d0cf0 svn.4108\n82546c065405d662cf0c8e385420c900724e3ec5 svn.4111\n4c1819ca3f4f3be0a4a0b0f4277b14e905a6c609 svn.4142\n041f4929807b7ad479651d360c6f6c47045b11c2 svn.4112\n988d3de9ec832c1150d698011a1cd10657da3d0b svn.4166\n2c9c561423c26d09ede47d9d8eb4414bdf6c05f8 svn.4113\n4ba4a3aa8490c1b2213b17e4ab2dd6fc55b97c9c svn.4217\nc10934acf0e839c9f9a8669756e77e48bb7d60b8 svn.4123\n7e8f356eb407c822cd493b432389a3a33958d241 svn.4127\n6f4d733ab4d3f983f2293561ec359edaab458345 svn.4128\n221eea750d8d355be0a99a68cd112dd603714906 svn.4129\ne16b6dd7c122713bedc185b29faf7155827b452a svn.4140\n3906ae9188e5a774ac9708a92ca30c340aaab37d svn.4143\n51935d3f6576cc12f712e26839559fad57b1a224 svn.4144\n1a5d7e664d4da514a606218e886c2704d8ec120b svn.4145\n131e9e1989d5bd7be7c04ef03c2baffd4c1fbf43 svn.4146\na58b3784a1ef586213a6d5c787fbb0379b5607ba svn.4147\n41afaae8920157e7bbf1e9e392c4f4e16847c47e svn.4148\nbdfa570fcb62797e2da9b1126b48705a7c4f1e74 svn.4149\nd638dedc842f1ddd15c62dc1d6d16d4d9d468084 svn.4150\ncbbe49f27778483bc42e29bfe6359ba8edcf6cb0 svn.4151\n6a9756596ea8e9878a06ccec834748e24b777bee svn.4152\n6e838a0cbe4e0bb2fdd8e74ba21fb63c8168aec5 svn.4153\n9d76a9e3fb13d1cc675020e6c38e5afd7d00e7b6 svn.4154\n4ea08867c61fe3083236391faff62e43c5ad6513 svn.4155\n4e20087af355a594387711bd523504fc923fb63a svn.4156\n5ac639e3edf7ab64a60332f697c23c0f92541725 svn.4157\n76132b7f686bd4a036a7a3088c80ff44bebcce48 svn.4158\ne4d6e5c54e631bc049c116f49987bbca8820fb2f svn.4159\n6cab9dbeb81ff68751dc09103b4d1b9f43ed8ea1 svn.4160\nb798aeb7c9dc673b3fc000a6d34091e1eb5a9248 svn.4161\n0290651ef7f308acb9032eecb7c34bd775f13a1f svn.4165\n610153dde2997a339e10cb4efebdb4ae9bfcb694 svn.4167\n12af807b158eef3f5ea3b00e0724c265be02a3f9 svn.4168\n43a2239fc516906c7dca827b04fc5c897d686f91 svn.4169\n0b84c3f5a1d8edb9256d68b1bd75f336a0078ce7 svn.4170\n48f0f4816e88a5023992f1d05690e325fcdd96c1 svn.4171\n4f1fb8e424d3bd8755be788caf2ff10d038228ed svn.4172\n56ca5d19588dfada5884a85e1585e6cc17bff53e svn.4173\nff7bfa6ef3feae01ab2f82cb487297faf6c1838c svn.4174\n6e4804f0d05afb98d732aa349b852addc0e09e2e svn.4175\n1a85aabf7693b5ac5cfabe5b1ea30b58f5dbcf8d svn.4176\n7691327811f8ae9f52dadc2df364a03943f55586 svn.4177\n8125cc45924aee4f26cd23ddef12ef52c00abbf0 svn.4178\n1b670702677c9629436f2af9c01080201159f01a svn.4179\na59e6aef4060ebfdf5b0b6b69bf682c956575515 svn.4180\n4d7e7e6f2d645bb095aaceb96324bd6299cb867b svn.4181\n0a874ba6bf4319bd4e6f48ed06618aa711d2a22d svn.4182\n48358c4ef4aae906ff8ebe6e18720d006c5b2141 svn.4183\nb8da2be454b7bf4046050d1516dda67b723d16d6 svn.4184\ncb9cd7dd760af1ad17f867583f6a8ff439369991 svn.4185\ndcf6092d7e5cc47855c95088fdee35dff1e13aef svn.4186\ne52707c8c55ddd9b43a1d3b72a6d7399b68037c2 svn.4187\n23954d09b43a0d30c7e46e94d0bdb74b0519a025 svn.4188\n1bbd00d2d20290537d563852fd9cee2d912fb10e svn.4189\n6822638388b123e6ba29f0e8592f8f98127d4138 svn.4190\n191cb3d51f066b84026a3fd9ccd6484244ae12d5 svn.4191\n886901ee45d8ade08bdf885c7850d79750b5974e svn.4192\n899d80b48443c693f9b4d5f302c4a08a88e899ee svn.4193\n1206717249ce9ef5ab2bf92c89b52e71a9df5be9 svn.4194\n8adbdc914c7c28d36d978fd1e5a72b52af86624d svn.4195\nbbc763417e249563080a0ea791ef48346fb57df1 svn.4196\ne9df5cc521fc1bcdb679eed91e75e784e6531037 svn.4197\n31565f0326473db2a517e7dead931df63a9f7a74 svn.4198\naa680f3db4d4967f4503404961bd860b8ed971e3 svn.4199\ndfa5b0af99c30498cad2220eec68fe20b19ed368 svn.4200\n4921d56ce65659999ac9dd7af52fc34548ef2bca svn.4201\n4921d56ce65659999ac9dd7af52fc34548ef2bca svn.4203\nf11587958e0af2bc1fccee189667767e9d06a5a1 svn.4204\n120d110647824cd22045bac4d341ed0925401cd2 svn.4202\nf440423c86b8ab2b9643956b04740febf3e38da9 svn.4210\n3351c19bef17035e464cb5ef7b1fbf388a360cad svn.4205\ndd0210904183eafbc78519743df5c1828ff55036 svn.4207\n91e273a261a59a892e59191916f25f43eab560c7 svn.4206\nab409bbf1beb6afddb5214d1d9879d0b55ad6a30 svn.4208\nd973dee8eaa89c644a69acf071a6d7f913cd400e svn.4214\n4dc7f47985509ad4e2137152bfe901ced24653a3 svn.4209\ndee1b47ef1d36fec45bb29565d2edd46a8525b95 svn.4215\n0dfa1637eff3459e49f850fefdac78e6b97f3fab svn.4241\n5f130341d55f225c04c700e9adf19f4087c1966a svn.4211\n513621de24468f8adb15231650902e0c8e9dfe82 svn.4216\nc2e9dffde5d42ca4740e6c2c8288949c81e60abe svn.4254\n6fc35bd72a18b72a02dba68a4bb28621f647e3f9 svn.4218\n9b26f0d36b98c765a1f24ef22f01f65be203e911 svn.4212\nffb1ad3f963bdb9c99bfce2609982937f17a8d88 svn.4255\nee9d3629d318eec593b2213974916f3d20c5b4a9 svn.4219\n0d7edea32cc5b059d2e0936fb80dfcaac831e73c svn.4220\n93e2c5142b9ef7796e74e6109a248c120b34bdca svn.4256\n5e79038b3243d2c70dd6e6de799554024aa017b7 svn.4221\n44dfe0789f55ad7af2463204581c3bce8d27eef3 svn.4269\n335bd7cb453378f0429bd51c3793bba7f9bbc1f6 svn.4222\n9d93854c4ff1cdb241ecb950030ea4120b77f6df svn.4232\n85aacc9946f544ffbfe68223261639b5b96967e1 svn.4275\n0ed4a50b434c1765fd38efc12f701d867e2c0971 svn.4223\n4101d024f56b220863c851d461365c1d1e044964 svn.4224\n93f5135741f2181e399eae89fdbb91131d161860 svn.4236\nd7fce0ce9108a12ae611d2842641bc6a1c1dea89 svn.4279\n6d641ba7afaa781c00a53fb8cbc96b43192c7577 svn.4225\nbad8013eec6b81a87bebf0093b70b48dcaa5cbfa svn.4237\na3006bcb85c5ae5f898c2c43e204c2ffe015b1fd svn.4280\n716c5a66e3eb5fb95fa682863cf381fc81ca6e52 svn.4226\n81789be60b0ade01c283cefd297c65db0bf862dd svn.4239\n357a3ddaefc42451ffc49a609cef3f9f0fb9ee68 svn.4295\n5f6b8744d7ad8832fda46958b4d0b930c7ccadb1 svn.4298\n58ee3f8d5b335a0e091543cb953323af12615274 svn.4227\nb0802e55e708ab7d5fd49dba8b9a22ac8bab7688 svn.4270\nf22a4905ab9c64d5853af0e6de18e00c49050c70 svn.4299\n648b9c0ece6f2d884d7a08abedd327ba47cc2956 svn.4228\n122cb99a59fdb7bac8fcaf1e1795e16fc9a3f7ea svn.4272\n888ab1ab0f65f1b9cffd62e759f4e3bc337817a7 svn.4300\nad6aade322e2cc324371fe71d4bbfc34b9ae04a8 svn.4229\n7f6b7df06638a566c9979dea0aeac4a02154f38b svn.4273\nbd55ca2a2bbd3b8eee8aa2a279a1d237cc6465c7 svn.4230\n745930f2123120f105985fcbc886e45ffcf7c130 svn.4290\nf7cd8d567adf38c3cb955b03663c29551a9838eb svn.4327\nebd4677771ce637a4dbc9964c33f6ff43b3cd6be svn.4291\n4eb55bb66de05ec63adf9bd782a6f820d39edf70 svn.4231\n07d036b427a318dce4f90c7fa9666d1f9fd44387 svn.4330\n26b9057b50d31bdeb43a7fb1c93432dd375950bb svn.4292\ncc05e51bcc4a5077d45ac5f3027688dde309668a svn.4233\n648bbb37aa35f86eb7af61ebf9d7d7f0a72311fa svn.4331\n25a694384b046d7b7190304e1279884301ecf41e svn.4293\n261a525412e88e878feb764e449319c6bc5b78f9 svn.4234\nffc06cf9c8569ad35cf75e957f522e7e2c405ce9 svn.4334\neb8032f87814c301fbd74b6fbbb07f9d04dec19b svn.4386\n5d7494b4be8a38abfc2d60b48c86670bce459f10 svn.4235\nc2ccd50371ae41f94b8aa8476d83e1d43bf0a710 svn.4340\ncb20040435923007ab475793b68f293236efc79c svn.4387\n01cef15cc011e6fa274713459f7f24a796980f94 svn.4238\n56df60870f35a59072452c9d42be3467b1bb15f4 svn.4356\n8ab04849129595ec2d88d2ecd2181284403b6672 svn.4388\neb34bf3a6bfd33eab96e1a37d9d3afd49c193f1c svn.4357\n00d0929f54bdf028d13fb676321db5509ec61358 svn.4242\n7d55676716978afede3fafb2743fd4b236c184cc svn.4389\n3b1a3c3f50b23a80cb98d9bde07d30475e990fd8 svn.4364\naa07e2a9c2a59daca863b72d7ff8ed9284721541 svn.4243\n25d13295dd10fd7caade018eb2f832c676afe75a svn.4365\nef54697165eae9dfa772f2f9766bed6809503306 svn.4244\ne2292eafa4d3bf36c19ebaa9481786ea64aec956 svn.4370\nadddaa28891a8cdf95b22d3819918cb41e1c6923 svn.4245\nfd92584039493233dee3d4f9be79e26fa417d445 svn.4372\ne8ab666de753eba9dda08b70c1e0efe3fac9573e svn.4246\nde2d6121f5bc3fcaa59fbfb6e80aad9ff2f0281a svn.4373\n8406dd243199207324d2aa93066f4d8a7522d7d3 svn.4247\ncc29bec70b68828f30da957a86ce58e55e538680 svn.4391\n180dffe59685f6864926d78f78271c558ae56c73 svn.4248\n59d34a0d5bd28d3d9e8bd2d761eb99ade088a2ac svn.4394\n37ac1af4b459b62c85ee4f46f989f14236bd6702 svn.4249\n60ae897b0bcb11d29e822d1d125062e5f3358638 svn.4395\nfdc3996a7cd216f16f8949b355d955b957e34b89 svn.4250\ne825cbde8033b9e32460a9bf394befac6f491e33 svn.4251\nb867623af98a70c5c6768d27417d4ce1ec0cf8b6 svn.4396\n1e2957b5650ae1bd7492520040ffc64791b3da11 svn.4252\nc7086833ec78fdd8c4e2b22e69ce6d23d833d7ac svn.4253\ndd6cf02e7d07c9e1986b729c2d41241f16df5a67 svn.4257\nb83502c979380ce10f037a67a7c4e4e48035b42f svn.4258\nbb7c908bdeeaf06bc8ac2fdeb812540598940e4f svn.4259\n513d89232d4cca5a37fe64af021510e19a8e404e svn.4260\n72bfd4d557c69f91dd628a6334f996b14e865005 svn.4261\n2df7c73628b650d967d28add162261b0546d0914 svn.4262\n65e6659a1616f2898f0d82ab974ebe251fb10342 svn.4263\ne252f9e84be7c5e66e2778461bc660b092bbc0d5 svn.4264\n1903682ae103a8c24e207c88bea1d8e434219556 svn.4265\n4e01952fe37e51f167f3a7ef4b7ad1a5c08fec39 svn.4266\nafaf0b00745d4081ace0dfa6ba743be4ca32da51 svn.4267\n776f3865f9c2cff47efde795c25dec33ebb80e97 svn.4268\ne34890e3e033c628d0603eabe585c6e83a4bf597 svn.4271\nf1eedea6b5d4f4fcb5cf3c678838d944a3124599 svn.4285\nebbd5035ddc2e43d9f6bacf8995dbc6c8c3b4c65 svn.4286\n8b5d2dea8b60cdcd406d9e52b9033a8520804d89 svn.4287\nb3607c75f5e5fb5bfd919056166f956a2ff52e26 svn.4288\n69f5cd2f9434bd6d33c296e89132bb1b867661c7 svn.4289\ned8b9f9a5a01a9cb386d34e6246844c673fffc14 svn.4301\ne2bee83793efae85933eea60c9aab9279c87a52d svn.4302\n8429e7142717443a4fa56e8ac3cbfc8302f1e225 svn.4303\nb571855f6e4bfdcc7a555cc6dd58571aa3ef9e46 svn.4304\n0cd41cd24f7aa6056a0b453a2871ec46e2d79396 svn.4305\nc5d688734e064e703fb7ab61d9e8db29ccd31168 svn.4306\n409af56222680016903a2e8d4a667ca04f27d324 svn.4307\n872004c419f8f3658bf8705ee4873a13d6a59a20 svn.4308\n27da93a98e50bcac73ef586fdfd19a9cd289c33d svn.4309\n86926a9ec4180e555daf5fedcac755e317457f38 svn.4310\n7e3b8bb79e0bcd4c829e8e2b6c5f425b172cd583 svn.4311\nbd4143c8a049a953deb7705c2d794c11a75006b6 svn.4312\nc0c9572ff4722b27923c4677d5068e54ed666d7f svn.4313\nacba79bd33bdbafd3d4837b90b31a3f2188012a0 svn.4315\nfc2946ae1b6f930db26d3e47d5eb83fada42c53b svn.4316\n97f9fceb25775939ad39c6fc72cd7c64fe506aae svn.4317\nd153c3954082cbc932efd45e2850b5781b360c17 svn.4318\n0581916836f135088116a36609ec5fef55a84825 svn.4319\ne8e5f5d084036beeb7632c5e7504c656380e4ffe svn.4320\n116c1035c9381a09ac50cad42be1133d3c8a855f svn.4321\n3dc329b1d76f2e51d008fa388d57c0d01119e003 svn.4322\n203b66e224208e374b91abd0f1049d9d2c6482f0 svn.4323\nc32a25faf06d86dff66dbdf0b5ce74e731098c4a svn.4324\na01451018b7cc344d04021a1c17d4cc173999554 svn.4325\n1aec80418a7ebec29d274625c2723bf5393fcdf5 svn.4326\n70ca6c81ecf6da39257fc409bccef38f7280e186 svn.4328\n20afcf9f749a8b3b85154be86656872401e186cb svn.4329\n414750fc3f992b991d0cf1a7484de82adf461130 svn.4332\n73adae301f52b1d976c5d30007a962230854fe63 svn.4333\n7b845130a92897f424df58ae5963a82da009d318 svn.4335\n80426849b039728a559069b821cdb46d50157fdf svn.4336\n688c13f836aefce915ba1d6dcb08ad3bc518d72f svn.4337\n47799025248d0c63830537bf1907388b47646441 svn.4341\ncb95ae7235ab48412c4be887ef0569b7b223fbf7 svn.4342\n95212ebb179887b6f228a2afd4b35b8998984e3e svn.4343\ne9e9b747f62470eb5ccd668d82cb8e3a52d80214 svn.4344\n66226230d2d7ec1f80fa278edf3df48e31bf63fd svn.4345\n76669b74f151e4bf34907f9e2d2ded9d34b103bb svn.4346\n95caf5bd738efb158ae80fb34e70dea0b112dbf5 svn.4347\n8d76a381f40e42b6849d9133f81ad8b1aa53a89d svn.4348\n3dd04eef237a755922d2c1f2728db8fcaef06918 svn.4349\ndc37d934811308622d5289ed2c087925b11864e5 svn.4350\n20d33a9d4cfebec1be1369c3b811a08e5450220f svn.4351\n48836dee86a7b160ce7276972eb4eceec70bcb6e svn.4352\nb096488a60a8f0d63c3847c2567b47cdf7675c6f svn.4353\nfd5b8c845a4b18919a606838d9bf6dc47fd3496e svn.4354\n97a14a5b121fb22d7960a847869563918c07c40a svn.4355\nc427fcbc40843e3940774ceb79dbf313f958a6eb svn.4358\nf4e6fc9b70e67b91756aa5d5f3a9030f7955b6bf svn.4359\nc8eced8d3e24f2fd6e8d716c92825f43a0f0e1a8 svn.4360\n298023b74a1649eef436d0b771b62b809e69f200 svn.4361\nf10b4baa0274d66888870ff5e07befddefeb2501 svn.4362\n85a98164000d9db5ebcbfba75ecbaa860a84ee47 svn.4363\n2e6cd186af6079630ce95d4f8223b6656c64eb1f svn.4366\n09ca49517260ddf6444116661b2a7772aaf2819a svn.4367\n4c8babb010b5c41371bc28bfac883d886b6c4e14 svn.4368\n7520ffd6203c5e184929cefccfcdc087b46bbdc5 svn.4369\nb69c536ba7fc08ab7cb00189f57c596b9a9afb27 svn.4371\ncb5476eb128b57d9ba7dd0af7c00e2147c74b413 svn.4374\nfbcd287fc18d1b97cb060253869836c798ff4bff svn.4375\n67e379404875fa34a3f042cb461b47d8a38a8503 svn.4376\n579f5f759b021d848ebe36af8137343e109407e6 svn.4377\n174566fb210af7a2bbe09a80ceaaa92ec0fa9b27 svn.4378\nb65ec30b69725ef4e0091c044e1528c3394e8e0b svn.4379\n6e42d21b9d399b5137cf0c49c090431092d264d9 svn.4380\n9f9083fd954f616d75ee2322fd80a9939feed086 svn.4381\n7b7779a82b0aa7cc794f802996d3413e41b91996 svn.4382\nb873019ddd9bb7176355fe56ca5e32d1b9a066b6 svn.4383\n3ee0923cba3834074106985f1eb0897ebaf0481c svn.4384\nc3e61849d8d56c8d2d62bb1bcccc82d2332c70a8 svn.4385\nda640fc8e7688ad1122332b1c0517a65a302c145 svn.4392\nfb63e68dbe8faa385f80a4681dcb0ace887d3a25 svn.4393\n79e1841d67b8913743e1a81d4eed21a6e9b88d59 svn.4393\n"
  },
  {
    "path": "doc/templates/layout.html",
    "content": "{% extends \"!layout.html\" %}\n{% block mobile_nav %}\n  {%- set _logo_url = logo_url|default(pathto('_static/' + (logo or \"\"), 1)) %}\n  {%- set _root_doc = root_doc|default(master_doc) %}\n  <a href=\"{{ pathto(_root_doc) }}\"{% if not theme_logo_only %} class=\"icon icon-home\"{% endif %}>\n    {% if not theme_logo_only %}{{ project }}{% endif %}\n    {%- if logo or logo_url %}\n      <img src=\"{{ _logo_url }}\" class=\"logo\" alt=\"{{ _('Logo') }}\"/>\n    {%- endif %}\n  </a>\n{% endblock %}"
  },
  {
    "path": "docker-compose.snmp.yml",
    "content": "# This compose file shows an example of how you can add SNMP proxying\n# or test services to the Docker Compose development environment.\n\n# To set up a full dev environment with proxying, either copy the examples\n# from this file to docker-compose.override.yml, or tell docker compose to also\n# use this file:\n#\n# docker compose -f docker-compose.yml -f docker-compose.snmp.yml up\n#\n\n# YAML template for an SNMP forwarding/proxying service. This should work on\n# Linux (not necessarily MacOS) by mounting your SSH agent communication socket\n# inside a container, so that ssh can be used non-interactively inside that\n# container to reach a hop-host using your credentials:\nx-forwarder:\n  &forwarder\n  build:\n    context: tools/forward\n    args:\n      - USER=<YOUR-USERNAME-HERE>\n      - UID=<YOUR-UID-HERE>\n  user: <YOUR-USERNAME-HERE>\n  volumes:\n    - ${SSH_AUTH_SOCK}:/auth_sock\n    - /etc/ssh/ssh_known_hosts:/etc/ssh/ssh_known_hosts\n    - ${HOME}/.ssh/known_hosts:${HOME}/.ssh/known_hosts\n  environment:\n    - SSH_AUTH_SOCK=/auth_sock\n  # The following section is needed only if you've configured the service\n  # network explicitly in docker-compose.\n  # networks:\n  #   - nav_net\n\nservices:\n  # This creates a service in the internal network of the compose environment,\n  # using the hostname `mydevice.mydomain`. Assuming 192.168.0.1 is not\n  # reachable for SNMP traffic from your host, only from `my-hop-host`, this\n  # service proxies SNMP requests to 192.168.0.1 by using an SSH tunnel through\n  # `my-hop-host` (tunneling through port 10000). You can add multiple of these\n  # in your environment if you wish to talk to multiple SNMP agents that\n  # arent't reachable directly from your host (but you should use different\n  # tunnel ports for each of them).\n  mydevice.mydomain:\n    << : *forwarder\n    command: 192.168.0.1 user@my-hop-host 10000\n\n  # This creates an SNMPv3 test server, see tools/snmpdv3 for details\n  snmpdv3:\n    build: tools/snmpdv3\n    ports:\n      - 161:161/udp\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "# This sets up a live NAV development environment in Docker containers.  This\n# is NOT SUITABLE for production use of NAV.  For more production-oriented\n# containerization, have a look at the separate project\n# https://github.com/Uninett/nav-container\n#\nservices:\n  nav:\n    build:\n      context: .\n      args:\n        UID: $UID\n        GID: $GID\n    environment:\n      - NONAVSTART=0  # Set to 1 to disable startup of NAV backend processes when container starts\n      - PGHOST=postgres\n      - PGDATABASE=nav\n      - PGUSER=postgres\n    volumes:\n      - .:/source\n      - nav_config:/etc/nav\n      - nav_cache:/tmp/nav_cache\n    depends_on:\n      - postgres\n    restart: on-failure:5\n\n# Uncomment if you want to start a jupyter notebook server to play with the NAV codebase\n#  jupyter:\n#    build:\n#      context: .\n#      args:\n#        CUSTOM_PIP: jupyter\n#    working_dir: /source\n#    command: su -c \"jupyter-notebook --ip=0.0.0.0\" nav\n#    ports:\n#       - \"8888:8888\"\n#    environment:\n#      - NONAVSTART=0  # Set to 1 to disable startup of NAV backend processes when container starts\n#      - PGHOST=postgres\n#      - PGDATABASE=nav\n#      - PGUSER=postgres\n#      - PYTHONPATH=/source/python\n#    volumes:\n#      - .:/source\n#      - nav_config:/etc/nav\n#    depends_on:\n#      - postgres\n\n# Uncomment if you want a second container for group restricted backend services\n#  slave:\n#    build: .\n#    environment:\n#      - NONAVSTART=1 # Set to 1 to disable startup of NAV backend processes when container starts\n#      - PGHOST=postgres\n#      - PGDATABASE=nav\n#      - PGUSER=postgres\n#    volumes:\n#      - .:/source\n#      - slave_nav_config:/etc/nav\n#    depends_on:\n#      - postgres\n\n  web:\n    build:\n      context: .\n      args:\n        UID: $UID\n        GID: $GID\n    command: [\"/source/tools/docker/web.sh\"]\n    ports:\n      - \"80:8080\"\n    volumes_from:\n      - nav\n    depends_on:\n      - nav\n    restart: on-failure:5\n\n  postgres:\n    image: \"postgres:13\"\n    environment:\n      - POSTGRES_HOST_AUTH_METHOD=trust\n    restart: on-failure:5\n\n  graphite:\n    build: ./tools/docker/graphite\n    ports:\n      - \"8000:8000\"\n    volumes:\n      - ./python/nav/etc/graphite/storage-schemas.conf:/etc/carbon/storage-schemas.conf\n      - ./python/nav/etc/graphite/storage-aggregation.conf:/etc/carbon/storage-aggregation.conf\n    restart: on-failure:5\n\n  # Add a service to continuously rebuild the Sphinx documentation if the doc\n  # directory is modified:\n  docbuild:\n    build:\n      context: .\n      args:\n        UID: $UID\n        GID: $GID\n    volumes_from:\n      - nav\n    command: /source/tools/docker/doc-watch.sh\n    restart: on-failure:5\n  config:\n    build:\n      context: .\n      args:\n        UID: $UID\n        GID: $GID\n    volumes_from:\n      - nav\n    # keep the container running\n    # tty: true and init: true was not sufficient\n    entrypoint: [\"tail\", \"-f\", \"/dev/null\"]\n\nvolumes:\n  nav_config:\n    driver: local\n  nav_cache:\n    driver: local\n\n# Uncomment if you want a second container for group restricted backend services\n#  slave_nav_config:\n#    driver: local\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"NAV frontend\",\n  \"description\": \"Network Administration Visualized frontend\",\n  \"version\": \"5\",\n  \"private\": true,\n  \"devDependencies\": {\n    \"css-loader\": \"^6.10.0\",\n    \"glob\": \"^10.3.10\",\n    \"mini-css-extract-plugin\": \"^2.8.0\",\n    \"sass\": \"^1.71.1\",\n    \"sass-loader\": \"^14.1.1\",\n    \"webpack\": \"^5.90.3\",\n    \"webpack-cli\": \"^5.1.4\",\n    \"webpack-remove-empty-scripts\": \"^1.0.4\"\n  },\n  \"dependencies\": {\n    \"backbone\": \"1.0.0\",\n    \"backbone.marionette\": \"4.1.3\",\n    \"backbone.radio\": \"2.0.0\",\n    \"d3\": \"7.8.3\",\n    \"datatables.net\": \"2.2.2\",\n    \"flatpickr\": \"4.6.13\",\n    \"htmx.org\": \"2.0.4\",\n    \"jquery\": \"4.0.0\",\n    \"moment\": \"2.18.1\",\n    \"select2\": \"4.1.0-rc.0\",\n    \"spin.js\": \"2.3.2\",\n    \"tablesort\": \"5.7.0\",\n    \"underscore\": \"1.7.0\",\n    \"vue\": \"2.2.0\"\n  },\n  \"scripts\": {\n    \"watch:sass\": \"webpack --config webpack.config.js --config-name sass --mode development --watch\",\n    \"build:sass\": \"webpack --config webpack.config.js --config-name sass --mode production\"\n  }\n}\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"setuptools>=80.3.1\", \"wheel\", \"setuptools_scm[toml]>=8.3.1\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"nav\"\ndescription = \"Network Administration Visualized - A comprehensive, free Network Management System\"\nauthors = [{name=\"Sikt - Norwegian agency for shared services in education and research\", email=\"nav-support@uninett.no\"}]\nreadme = \"README.rst\"\nrequires-python = \">=3.9\"\nlicense = \"GPL-3.0-only\"\nkeywords = [\"nms\", \"snmp\"]\nclassifiers = [\n    \"Development Status :: 6 - Mature\",\n    \"Topic :: System :: Networking :: Monitoring\",\n]\ndynamic = [\"version\"]\ndependencies = [\n    \"asciitree==0.3.3\",\n    \"psycopg2==2.9.10\",\n    \"IPy==1.01\",\n    \"pyaml\",\n    \"twisted>=24.7\",\n    \"networkx==2.6.3\",\n    \"Pillow>3.3.2\",\n    \"qrcode>7.4\",\n    \"pyrad==2.1\",\n    \"sphinx==7.4.7\",\n    \"sphinxcontrib-programoutput==0.17\",\n    \"sphinxcontrib-django\",\n    \"Markdown==3.8.1\",\n\n    \"feedparser==6.0.11\",\n    \"dnspython<3.0.0,>=2.1.0\",\n\n    \"Django>=4.2,<4.3\",\n    \"django-filter>=2\",\n    \"djangorestframework>=3.14\",\n    \"django-htmx\",\n    \"django-allauth[mfa,socialaccount]\",\n    \"pytz\",\n\n    \"iso8601\",\n\n    \"pynetsnmp-2>=0.1.10\",\n\n    \"napalm>=5.1.0,<5.2.0\",\n\n    \"drf-jwt-multi-auth\",\n\n    \"requests\",\n\n    \"pyjwt>=2.6.0\",\n\n    \"distro\",\n\n    'tomli; python_version<\"3.11\"',\n\n    # The following modules are really sub-requirements of Twisted, not of\n    # NAV directly.  They may be optional from Twisted's point of view,\n    # but they are required for parts of the Twisted library that NAV uses:\n    #\n    # PyOpenSSL is required for TLS verification during PaloAlto API GET operations\n    \"PyOpenSSL==23.3.0\",\n    # service-identity is required to make TLS communication libraries shut up about potential MITM attacks\n    \"service-identity==21.1.0\",\n]\n\n[project.optional-dependencies]\nldap = [\"python-ldap==3.4.5\"]  # optional for LDAP authentication, requires libldap (OpenLDAP) to build\n\n[dependency-groups]\ndev = [\n    \"isort\",\n    \"ruff\",\n    \"towncrier\",\n    \"pre-commit\",\n    \"tox\",\n    \"tox-uv\",\n]\ntest = [\n    \"coverage>=7.0.0\",\n    \"mock==2.0.0\",\n    \"pytest>=8.3.3\",\n    \"pytest-metadata==3.1.1\",\n    \"pytest-cov>=6.0.0\",\n    \"pytest-html>=4.0.0\",\n    \"pytest-playwright>=0.6.2\",\n    \"pytest-timeout==2.3.1\",\n    \"pytest-twisted==1.14.3\",\n    \"pytidylib==0.3.2\",\n    \"snmpsim>=1.0,!=1.1.6,!=1.2.2\",\n    \"toml\",\n    \"whisper>=0.9.9\",\n]\ndocs = [\"sphinx_rtd_theme>=2.0.0\"]\n\n[project.urls]\nHomepage = \"https://nav.uninett.no/\"\n\n[project.scripts]\nalertengine = \"nav.bin.alertengine:main\"\nautoenable = \"nav.bin.autoenable:main\"\ncollect_active_ip = \"nav.bin.collect_active_ip:main\"\nemailreports = \"nav.bin.emailreports:main\"\neventengine = \"nav.bin.eventengine:main\"\nipdevpolld = \"nav.bin.ipdevpolld:main\"\nlogengine = \"nav.bin.logengine:main\"\nmacwatch = \"nav.bin.macwatch:main\"\nmailin = \"nav.bin.mailin:main\"\nmaintengine = \"nav.bin.maintengine:main\"\nnav = \"nav.bin.navmain:main\"\nnavcheckservice = \"nav.bin.navcheckservice:main\"\nnavclean = \"nav.bin.navclean:main\"\nnav_cisco_auth_sessions = \"nav.bin.cisco_auth_sessions:main\"\nnavdf = \"nav.bin.navdf:main\"\nnavdump = \"nav.bin.navdump:main\"\nnaventity = \"nav.bin.naventity:main\"\nnavoidverify = \"nav.bin.navoidverify:main\"\nnavpgdump = \"nav.pgdump:main\"\nnavrefresh = \"nav.bin.navrefresh:main\"\nnavsnmp = \"nav.bin.navsnmp:main\"\nnavstats = \"nav.bin.navstats:main\"\nnavsyncdb = \"nav.pgsync:main\"\nnavsynctypes = \"nav.bin.navsynctypes:main\"\nnavtopology = \"nav.bin.navtopology:main\"\nnavuser = \"nav.bin.navuser:main\"\nnetbiostracker = \"nav.bin.netbiostracker:main\"\npping = \"nav.bin.pping:main\"\nradiusparser = \"nav.bin.radiusparser:main\"\nservicemon = \"nav.bin.servicemon:main\"\nsmsd = \"nav.bin.smsd:main\"\nnavtrapd = \"nav.bin.snmptrapd:main\"\nsortedstats_cacher = \"nav.bin.sortedstats_cacher:main\"\nstart_arnold = \"nav.bin.start_arnold:main\"\nt1000 = \"nav.bin.t1000:main\"\nthresholdmon = \"nav.bin.thresholdmon:main\"\nnavoui = \"nav.bin.update_ouis:main\"\nnavdhcpstats = \"nav.bin.dhcpstats:main\"\n\n[tool.setuptools]\ninclude-package-data = true\nzip-safe = false\nplatforms = [\"any\"]\n\n[tool.setuptools.package-data]\n\"nav.web\" = [\"static/**\"]\n\n[tool.setuptools.exclude-package-data]\n\"nav.web\" = [\"static/js/test/**\"]\n\n[tool.setuptools_scm]\n\n[tool.setuptools.packages.find]\nwhere = [\"python\"]\n\n[tool.ruff]\ntarget-version = \"py39\"\nline-length = 88\ninclude = [\n    \"python/nav/**/*.py\",\n    \"tests/**/*.py\",\n    \"tools/**/*.py\"\n]\nexclude = [\n    \"python/nav/enterprise/ids.py\",                     # Autogenerated list of constants\n    \"python/nav/smidumps/*.py\",                         # Autogenerated MIB dumps\n    \"python/nav/etc/geomap/config.py\",                  # Not actually a Python file\n    \"python/nav/snmptrapd/handlers/handlertemplate.py\"  # Not in production, just a template\n]\n\n[tool.ruff.lint]\nselect = [\"BLE001\", \"E4\", \"E501\", \"E7\", \"E9\", \"F\"]\nignore = [\"E402\", \"E722\", \"E731\", \"F403\"]\n\n[tool.ruff.lint.pycodestyle]\nignore-overlong-task-comments = true\n\n[tool.ruff.format]\nquote-style = \"preserve\"\n\n[tool.towncrier]\ndirectory = \"changelog.d\"\nfilename = \"CHANGELOG.md\"\nstart_string = \"<!-- towncrier release notes start -->\\n\"\nunderlines = [\"\", \"\", \"\"]\ntitle_format = \"## [{version}] - {project_date}\"\nissue_format = \"[#{issue}](https://github.com/Uninett/nav/issues/{issue})\"\nwrap = true\n\n[[tool.towncrier.type]]\ndirectory = \"security\"\nname = \"Security\"\nshowcontent = true\n\n[[tool.towncrier.type]]\ndirectory = \"removed\"\nname = \"Removed\"\nshowcontent = true\n\n[[tool.towncrier.type]]\ndirectory = \"deprecated\"\nname = \"Deprecated\"\nshowcontent = true\n\n[[tool.towncrier.type]]\ndirectory = \"added\"\nname = \"Added\"\nshowcontent = true\n\n[[tool.towncrier.type]]\ndirectory = \"changed\"\nname = \"Changed\"\nshowcontent = true\n\n[[tool.towncrier.type]]\ndirectory = \"fixed\"\nname = \"Fixed\"\nshowcontent = true\n"
  },
  {
    "path": "python/nav/Snmp/__init__.py",
    "content": "#\n# Copyright (C) 2010, 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A high level interface for synchronouse SNMP operations in NAV.\n\nThis interface only supports pynetsnmp, but is designed to allow\nmultiple implementations\n\n\"\"\"\n\nimport os\nimport sys\n\nBACKEND = None\n\ntry:\n    # our highest preference is pynetsnmp, since it can support IPv6\n    import pynetsnmp  # noqa: F401 - needed to set BACKEND\nexcept ImportError:\n    pass\nelse:\n    BACKEND = 'pynetsnmp'\n\nif BACKEND == 'pynetsnmp':\n    if sys.platform == \"darwin\" and not os.getenv(\"DYLD_LIBRARY_PATH\"):\n        # horrible workaround for MacOS problems, described at length at\n        # https://hynek.me/articles/macos-dyld-env/\n        os.environ[\"DYLD_LIBRARY_PATH\"] = os.getenv(\n            \"LD_LIBRARY_PATH\", \"/usr/local/opt/openssl/lib\"\n        )\n    from .pynetsnmp import *\nelse:\n    raise ImportError(\"No supported SNMP backend was found\")\n\n\ndef safestring(string, encodings_to_try=('utf-8', 'latin-1')):\n    \"\"\"Tries to safely decode strings retrieved using SNMP.\n\n    SNMP does not really define encodings, and will not normally allow\n    non-ASCII strings to be written  (though binary data is fine). Sometimes,\n    administrators have been able to enter descriptions containing non-ASCII\n    characters using CLI's or web interfaces. The encoding of these are\n    undefined and unknown. To ensure they can be safely stored in the\n    database (which only accepts UTF-8), we make various attempts at decoding\n    strings to unicode objects before the database becomes involved.\n\n    \"\"\"\n    if string is None:\n        return\n\n    if isinstance(string, str):\n        return string\n    if isinstance(string, bytes):\n        string = string.strip(b'\\x00')\n        for encoding in encodings_to_try:\n            try:\n                return string.decode(encoding)\n            except UnicodeDecodeError:\n                pass\n\n    return repr(string)  # fallback\n"
  },
  {
    "path": "python/nav/Snmp/defines.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Defines types and enumerations for SNMP communication parameters\"\"\"\n\nfrom enum import Enum\n\n\nclass SecurityLevel(Enum):\n    \"\"\"SNMPv3 security levels\"\"\"\n\n    NO_AUTH_NO_PRIV = \"noAuthNoPriv\"\n    AUTH_NO_PRIV = \"authNoPriv\"\n    AUTH_PRIV = \"authPriv\"\n\n\nclass AuthenticationProtocol(Enum):\n    \"\"\"SNMPv3 authentication protocols supported by NET-SNMP\"\"\"\n\n    MD5 = \"MD5\"\n    SHA = \"SHA\"\n    SHA512 = \"SHA-512\"\n    SHA384 = \"SHA-384\"\n    SHA256 = \"SHA-256\"\n    SHA224 = \"SHA-224\"\n\n\nclass PrivacyProtocol(Enum):\n    \"\"\"SNMPv3 privacy protocols supported by NET-SNMP\"\"\"\n\n    DES = \"DES\"\n    AES = \"AES\"\n"
  },
  {
    "path": "python/nav/Snmp/errors.py",
    "content": "from nav.errors import GeneralException\n\n\nclass SnmpError(GeneralException):\n    \"\"\"SNMP Error\"\"\"\n\n\nclass TimeOutException(SnmpError):\n    \"\"\"Timed out waiting for SNMP response\"\"\"\n\n\nclass NameResolverException(SnmpError):\n    \"\"\"NameResolverException\"\"\"\n\n\nclass NetworkError(SnmpError):\n    \"\"\"NetworkError\"\"\"\n\n\nclass AgentError(SnmpError):\n    \"\"\"SNMP agent responded with error\"\"\"\n\n\nclass EndOfMibViewError(AgentError):\n    \"\"\"SNMP request was outside the agent's MIB view\"\"\"\n\n\nclass UnsupportedSnmpVersionError(SnmpError):\n    \"\"\"Unsupported SNMP protocol version\"\"\"\n\n\nclass NoSuchObjectError(SnmpError):\n    \"\"\"SNMP agent did not know of this object\"\"\"\n\n\nclass SNMPv3ConfigurationError(SnmpError):\n    \"\"\"Error in SNMPv3 configuration parameters\"\"\"\n"
  },
  {
    "path": "python/nav/Snmp/profile.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Helper functions to build SNMP sessions from NAV ManagementProfile instances\"\"\"\n\nfrom functools import partial\nfrom typing import Callable\n\nfrom nav.models.manage import ManagementProfile\nfrom nav.Snmp import Snmp\n\n\ndef get_snmp_session_for_profile(profile: ManagementProfile) -> Callable:\n    \"\"\"Returns a nav.Snmp.Snmp constructor partially pre-configured with SNMP options\n    from an SNMP management profile.\n\n    Example usage:\n    >>> netbox = Netbox.objects.get(id=1)\n    >>> snmp = get_snmp_session_for_profile(\n    ...   netbox.get_preferred_snmp_management_profile())\n    >>> session = snmp(netbox.ip)\n    >>> session.get()\n    b'Linux 16e2ac5c6456 6.1.60 #1-NixOS SMP PREEMPT_DYNAMIC Wed Oct 25 10:03:17 UTC 2023 x86_64'\n    >>>\n    \"\"\"  # noqa: E501\n    if not profile.is_snmp:\n        raise ValueError(\"Cannot create SNMP session from non-SNMP management profile\")\n\n    if profile.snmp_version < 3:\n        kwargs = {\n            \"version\": profile.configuration.get(\"version\"),\n            \"community\": profile.configuration.get(\"community\"),\n        }\n    else:\n        kwargs = {\n            opt: profile.configuration.get(opt) or None\n            for opt in (\n                \"sec_level\",\n                \"auth_protocol\",\n                \"sec_name\",\n                \"auth_password\",\n                \"priv_protocol\",\n                \"priv_password\",\n            )\n        }\n        kwargs[\"version\"] = 3\n\n    return partial(Snmp, **kwargs)\n"
  },
  {
    "path": "python/nav/Snmp/pynetsnmp.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"High level synchronouse NAV API for NetSNMP\"\"\"\n\nfrom collections import namedtuple\nfrom ctypes import (\n    c_int,\n    sizeof,\n    byref,\n    cast,\n    POINTER,\n    c_char,\n    c_char_p,\n    c_uint,\n    c_ulong,\n    c_uint64,\n)\nfrom typing import Optional, Union\n\nfrom IPy import IP\nfrom pynetsnmp import netsnmp\nfrom pynetsnmp.netsnmp import (\n    Session,\n    SNMP_MSG_GETNEXT,\n    mkoid,\n    lib,\n    netsnmp_pdu_p,\n    getResult,\n    netsnmp_pdu,\n    SNMP_MSG_GETBULK,\n    SNMP_MSG_SET,\n    SNMP_MSG_GET,\n)\n\nfrom nav.oids import OID\nfrom .defines import SecurityLevel, AuthenticationProtocol, PrivacyProtocol\nfrom .errors import (\n    EndOfMibViewError,\n    NoSuchObjectError,\n    SnmpError,\n    TimeOutException,\n    UnsupportedSnmpVersionError,\n    SNMPv3ConfigurationError,\n)\n\nPDUVarbind = namedtuple(\"PDUVarbind\", ['oid', 'type', 'value'])\n\nSNMPERR_MAP = dict(\n    (value, name)\n    for name, value in vars(netsnmp).items()\n    if name.startswith('SNMPERR_')\n)\n\n__all__ = ['Snmp', 'OID', 'SNMPERR_MAP', 'snmp_api_errstring', 'PDUVarbind']\n\nTYPEMAP = {\n    'i': netsnmp.ASN_INTEGER,\n    'u': netsnmp.ASN_UNSIGNED,\n    't': netsnmp.ASN_TIMETICKS,\n    'a': netsnmp.ASN_IPADDRESS,\n    'o': netsnmp.ASN_OBJECT_ID,\n    's': netsnmp.ASN_OCTET_STR,\n    'U': netsnmp.ASN_COUNTER64,\n    'x': netsnmp.ASN_OCTET_STR,\n}\n\n\nclass Snmp(object):\n    \"\"\"Provides simple, synchronouse snmpget, snmpwalk and snmpjog(tm)\n    operations using pynetsnmp (NetSNMP).\n\n    \"\"\"\n\n    def __init__(\n        self,\n        host: str,\n        community: str = \"public\",\n        version: Union[str, int] = \"1\",\n        port: Union[str, int] = 161,\n        retries: int = 3,\n        timeout: int = 1,\n        # SNMPv3-only options\n        sec_level: Optional[SecurityLevel] = None,\n        auth_protocol: Optional[AuthenticationProtocol] = None,\n        sec_name: Optional[str] = None,\n        auth_password: Optional[str] = None,\n        priv_protocol: Optional[PrivacyProtocol] = None,\n        priv_password: Optional[str] = None,\n    ):\n        \"\"\"Makes a new Snmp-object.\n\n        :param host: hostname or IP address\n        :param community: community (password), defaults to \"public\"\n        :param port: udp port number, defaults to \"161\"\n        :param sec_level: SNMPv3 security level\n        :param auth_protocol: SNMPv3 authentication protocol\n        :param sec_name: SNMPv3 securityName\n        :param auth_password: SNMPv3 authentication password\n        :param priv_protocol: SNMPv3 privacy protocol\n        :param priv_password: SNMPv3 privacy password\n\n        \"\"\"\n        self.handle = None\n        self.host = host\n        self.community = str(community)\n        self.version = str(version)\n        if self.version == '2':\n            self.version = '2c'\n        if self.version not in ('1', '2c', '3'):\n            raise UnsupportedSnmpVersionError(self.version)\n        self.port = int(port)\n        self.retries = retries\n        self.timeout = timeout\n\n        self.sec_level = SecurityLevel(sec_level) if sec_level else None\n        self.auth_protocol = (\n            AuthenticationProtocol(auth_protocol) if auth_protocol else None\n        )\n        self.sec_name = sec_name\n        self.auth_password = auth_password\n        self.priv_protocol = PrivacyProtocol(priv_protocol) if priv_protocol else None\n        self.priv_password = priv_password\n        if self.version == \"3\":\n            self._verify_snmpv3_params()\n\n        self.handle = _MySnmpSession(self._build_cmdline())\n        self.handle.open()\n\n    def _verify_snmpv3_params(self):\n        if not self.sec_level:\n            raise SNMPv3ConfigurationError(\"sec_level is required to be set\")\n        if not self.sec_name:\n            raise SNMPv3ConfigurationError(\n                \"sec_name is required regardless of security level\"\n            )\n        if self.sec_level in (SecurityLevel.AUTH_NO_PRIV, SecurityLevel.AUTH_PRIV):\n            if not self.auth_protocol:\n                raise SNMPv3ConfigurationError(\n                    f\"{self.sec_level.value} requires auth_protocol to be set\"\n                )\n            if not self.auth_password:\n                raise SNMPv3ConfigurationError(\n                    f\"{self.sec_level.value} requires auth_password to be set\"\n                )\n        if self.sec_level == SecurityLevel.AUTH_PRIV:\n            if not self.priv_protocol:\n                raise SNMPv3ConfigurationError(\n                    f\"{self.sec_level.value} requires priv_protocol to be set\"\n                )\n            if not self.priv_password:\n                raise SNMPv3ConfigurationError(\n                    f\"{self.sec_level.value} requires priv_password to be set\"\n                )\n\n    def _build_cmdline(self):\n        try:\n            address = IP(self.host)\n        except ValueError:\n            host = self.host\n        else:\n            host = 'udp6:[%s]' % self.host if address.version() == 6 else self.host\n\n        params = [f\"-v{self.version}\"]\n\n        if self.version in (\"1\", \"2c\"):\n            params.extend([\"-c\", self.community])\n        elif self.version == \"3\":\n            params.extend([\"-l\", self.sec_level.value, \"-u\", self.sec_name])\n            if self.auth_protocol:\n                params.extend([\"-a\", self.auth_protocol.value])\n            if self.auth_password:\n                params.extend([\"-A\", self.auth_password])\n            if self.priv_protocol:\n                params.extend([\"-x\", self.priv_protocol.value])\n            if self.priv_password:\n                params.extend([\"-X\", self.priv_password])\n\n        params.extend(\n            [\"-r\", str(self.retries), \"-t\", str(self.timeout), f\"{host}:{self.port}\"]\n        )\n        return tuple(params)\n\n    def __del__(self):\n        if self.handle:\n            self.handle.close()\n\n    def get(self, query=\"1.3.6.1.2.1.1.1.0\"):\n        \"\"\"Performs an SNMP GET query.\n\n        :param query: OID to query for.\n        :returns: The response value\n\n        \"\"\"\n        oid = OID(query)\n        response = self.handle.sget([oid])\n        if response:\n            value = response.get(oid, None)\n            if isinstance(value, tuple):\n                return OID(value)\n            return value\n        else:\n            return None\n\n    @staticmethod\n    def translate_type(type):\n        \"\"\"Translate type to fit backend library\"\"\"\n        if type in TYPEMAP:\n            value_type = TYPEMAP[type]\n            # TODO: verify that the type is defined for the selected SNMP ver\n        else:\n            raise ValueError(\"type must be one of %r, not %r\" % (TYPEMAP.keys(), type))\n        return value_type\n\n    def set(self, query, type, value):\n        \"\"\"Performs an SNMP SET operations.\n\n        :param query: OID to set\n        :param type: type of value to set. This may be\n        i: INTEGER\n        u: unsigned INTEGER\n        t: TIMETICKS\n        a: IPADDRESS\n        o: OBJID\n        s: OCTETSTRING\n        U: COUNTER64 (version 2 and above)\n        x: OCTETSTRING\n        :param value: the value to set. Must ofcourse match type: i = 2,\n         s = 'string'\n        \"\"\"\n        self.handle.sset([PDUVarbind(OID(query), self.translate_type(type), value)])\n\n    def multi_set(self, varbinds):\n        \"\"\"Performs SNMP set with multiple operations\n\n        :type varbinds: list[PDUVarbind]\n        \"\"\"\n        self.handle.sset(\n            [\n                PDUVarbind(OID(v.oid), self.translate_type(v.type), v.value)\n                for v in varbinds\n            ]\n        )\n\n    def walk(self, query=\"1.3.6.1.2.1.1.1.0\"):\n        \"\"\"Performs an SNMP walk operation.\n\n        :param query: root OID for walk\n        :returns: A list of (response_oid, value) pairs.\n\n        \"\"\"\n        result = []\n        root_oid = OID(query)\n        current_oid = root_oid\n\n        while 1:\n            try:\n                response = self.handle.sgetnext(current_oid)\n            except (EndOfMibViewError, NoSuchObjectError):\n                break\n            if response is None:\n                break\n            response_oid, value = list(response.items())[0]\n            if value is None:\n                break\n\n            current_oid = OID(response_oid)\n            if not root_oid.is_a_prefix_of(current_oid) or current_oid == root_oid:\n                break\n\n            if isinstance(value, tuple):\n                value = str(OID(value))[1:]\n            result.append((str(current_oid)[1:], value))\n\n        return result\n\n    def jog(self, query=\"1.3.6.1.2.1.1.1.0\"):\n        \"\"\"Performs an SNMP walk operation, stripping the query prefix from\n        the response.\n\n        :param query: root OID for walk\n        :returns: A list of (response_oid, value) pairs,\n                  where the query prefix has been stripped from the\n                  response_oids.\n\n        \"\"\"\n        prefix = OID(query)\n        walked = self.walk(query)\n        result = [\n            (str(OID(oid).strip_prefix(prefix))[1:], value) for oid, value in walked\n        ]\n        return result\n\n    NON_REPEATERS = 0\n    MAX_REPETITIONS = 15\n\n    def bulkwalk(self, query=\"1.3.6.1.2.1.1.1.0\", strip_prefix=False):\n        \"\"\"Performs an SNMP walk on the host, using GETBULK requests.\n\n        Will raise an UnsupportedSnmpVersionError if the current\n        version does not support GetBulk operations (mainly, version 1).\n\n        :param query: root OID for walk\n        :param strip_prefix: A boolean. Set to True to strip the query prefix\n                             from the OIDs in the response. Default is False.\n        :returns: A list of (response_oid, value) pairs,\n                  where the query prefix has been stripped from the\n                  response_oids.\n\n        \"\"\"\n        if str(self.version) not in (\"2c\", \"3\"):\n            raise UnsupportedSnmpVersionError(\n                \"Cannot use BULKGET in SNMP version \" + self.version\n            )\n        result = []\n        root_oid = OID(query)\n        current_oid = root_oid\n\n        while 1:\n            try:\n                response = self.handle.sgetbulk(\n                    self.NON_REPEATERS, self.MAX_REPETITIONS, [current_oid]\n                )\n            except EndOfMibViewError:\n                break\n            if response is None:\n                break\n            for response_oid, value in response:\n                if value is None:\n                    return result\n\n                current_oid = OID(response_oid)\n                if not root_oid.is_a_prefix_of(current_oid) or current_oid == root_oid:\n                    return result\n\n                if isinstance(value, tuple):\n                    value = str(OID(value))[1:]\n                result.append((str(current_oid)[1:], value))\n\n        return result\n\n\nclass _MySnmpSession(Session):\n    \"\"\"An extension of netsnmp.Session to provide multiple synchronous\n    operations.\n\n    \"\"\"\n\n    def sget(self, oids):\n        req = self._create_request(SNMP_MSG_GET)\n        for oid in oids:\n            oid = mkoid(oid)\n            lib.snmp_add_null_var(req, oid, len(oid))\n        response = netsnmp_pdu_p()\n        if lib.snmp_synch_response(self.sess, req, byref(response)) == 0:\n            _raise_on_protocol_error(response)\n            result = dict(getResult(response.contents, self._log))\n            lib.snmp_free_pdu(response)\n            return result\n        else:\n            _raise_on_error(self.sess.contents.s_snmp_errno)\n\n    def sgetnext(self, root):\n        req = self._create_request(SNMP_MSG_GETNEXT)\n        oid = mkoid(root)\n        lib.snmp_add_null_var(req, oid, len(oid))\n\n        response = netsnmp_pdu_p()\n        if lib.snmp_synch_response(self.sess, req, byref(response)) == 0:\n            _raise_on_protocol_error(response)\n            result = dict(getResult(response.contents, self._log))\n            lib.snmp_free_pdu(response)\n            return result\n        else:\n            _raise_on_error(self.sess.contents.s_snmp_errno)\n\n    def sgetbulk(self, nonrepeaters, maxrepetitions, oids):\n        req = self._create_request(SNMP_MSG_GETBULK)\n        req = cast(req, POINTER(netsnmp_pdu))\n        req.contents.errstat = nonrepeaters\n        req.contents.errindex = maxrepetitions\n        for oid in oids:\n            oid = mkoid(oid)\n            lib.snmp_add_null_var(req, oid, len(oid))\n\n        response = netsnmp_pdu_p()\n        if lib.snmp_synch_response(self.sess, req, byref(response)) == 0:\n            _raise_on_protocol_error(response)\n            result = getResult(response.contents, self._log)\n            lib.snmp_free_pdu(response)\n            return result\n        else:\n            _raise_on_error(self.sess.contents.s_snmp_errno)\n\n    def sset(self, varbinds):\n        \"\"\":type varbinds: list[PDUVarbinds]\"\"\"\n        req = self._create_request(SNMP_MSG_SET)\n        for varbind in varbinds:\n            oid = mkoid(varbind.oid)\n            converter = CONVERTER_MAP[varbind.type]\n            data, size = converter(varbind.value)\n            lib.snmp_pdu_add_variable(req, oid, len(oid), varbind.type, data, size)\n\n        response = netsnmp_pdu_p()\n        if lib.snmp_synch_response(self.sess, req, byref(response)) == 0:\n            _raise_on_protocol_error(response)\n            result = dict(getResult(response.contents, self._log))\n            lib.snmp_free_pdu(response)\n            return result\n        else:\n            _raise_on_error(self.sess.contents.s_snmp_errno)\n\n\n#\n# Functions for converting Python values to C data types suitable for ASN\n# and BER encoding in the NET-SNMP library.\n#\n\n\nCONVERTER_MAP = {}\n\n\ndef converts(asn_type):\n    \"\"\"Decorator to register a function as a converter of a Python value to a\n    specific ASN data type.\n\n    \"\"\"\n\n    def _register(func):\n        CONVERTER_MAP[asn_type] = func\n        return func\n\n    return _register\n\n\n@converts(netsnmp.ASN_INTEGER)\ndef asn_integer(value):\n    value = c_int(value)\n    return byref(value), sizeof(value)\n\n\n@converts(netsnmp.ASN_UNSIGNED)\ndef asn_unsigned(value):\n    value = c_uint(value)\n    return byref(value), sizeof(value)\n\n\n@converts(netsnmp.ASN_TIMETICKS)\ndef asn_timeticks(value):\n    value = c_ulong(value)\n    return byref(value), sizeof(value)\n\n\n@converts(netsnmp.ASN_IPADDRESS)\ndef asn_ipaddress(value):\n    ipaddr = IP(value)\n    value = c_ulong(ipaddr.int())\n    return byref(value), sizeof(value)\n\n\n@converts(netsnmp.ASN_OBJECT_ID)\ndef asn_object_id(value):\n    value = mkoid(OID(value))\n    return byref(value), sizeof(value)\n\n\n@converts(netsnmp.ASN_OCTET_STR)\ndef asn_octet_str(value):\n    if not isinstance(value, bytes):\n        raise TypeError(\"Byte string expected\")\n    string = c_char_p(value)\n    return string, len(value)\n\n\n@converts(netsnmp.ASN_COUNTER64)\ndef asn_counter64(value):\n    value = c_uint64(value)\n    return byref(value), sizeof(value)\n\n\n# Some global ctypes initializations needed for the snmp_api_errstring function\n_charptr = POINTER(c_char)\nnetsnmp.lib.snmp_api_errstring.restype = _charptr\nnetsnmp.lib.snmp_errstring.restype = _charptr\n\n\ndef snmp_api_errstring(err_code):\n    \"\"\"Converts an SNMP API error code to an error string\"\"\"\n    buf = netsnmp.lib.snmp_api_errstring(err_code)\n    return cast(buf, c_char_p).value.decode('utf-8')\n\n\ndef snmp_errstring(err_status):\n    \"\"\"Converts an SNMP protocol error status to an error string\"\"\"\n    buf = netsnmp.lib.snmp_errstring(err_status)\n    return cast(buf, c_char_p).value.decode('utf-8')\n\n\ndef _raise_on_error(err_code):\n    \"\"\"Raises an appropriate NAV exception for a non-null SNMP err_code value.\n\n    Does nothing if err_code is 0.\n\n    \"\"\"\n    if err_code == 0:\n        return\n    elif err_code == netsnmp.SNMPERR_TIMEOUT:\n        raise TimeOutException(snmp_api_errstring(err_code))\n    else:\n        raise SnmpError(\n            \"%s: %s\" % (SNMPERR_MAP.get(err_code, ''), snmp_api_errstring(err_code))\n        )\n\n\ndef _raise_on_protocol_error(response):\n    \"\"\"Raises an appropriate NAV exception for a non-zero SNMP protocol error\n    status value.\n\n    \"\"\"\n    response = response.contents\n    if response.errstat > 0:\n        errstring = snmp_errstring(response.errstat)\n        if response.errstat == netsnmp.SNMP_ERR_NOSUCHNAME:\n            raise NoSuchObjectError(errstring)\n        if response.errstat > 0:\n            raise SnmpError(errstring)\n\n    # check for SNMP varbind exception values\n    var = response.variables\n    while var:\n        var = var.contents\n        oid = OID([var.name[i] for i in range(var.name_length)])\n        vtype = ord(var.type)\n        if vtype in (netsnmp.SNMP_NOSUCHINSTANCE, netsnmp.SNMP_NOSUCHOBJECT):\n            raise NoSuchObjectError(oid)\n        elif vtype == netsnmp.SNMP_ENDOFMIBVIEW:\n            raise EndOfMibViewError(oid)\n        var = var.next_variable\n"
  },
  {
    "path": "python/nav/__init__.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nProvides a common root package for the NAV python library.\n\"\"\"\n\nimport time\nimport warnings\n\n# Ignore stupid warnings about psycopg2-binary package, they're of no concern to us\nwarnings.filterwarnings(\"ignore\", category=UserWarning, module='psycopg2')\n\n\nclass ObjectCache(dict):\n    \"\"\"An dictionary for caching objects.\n\n    Mostly used for database connection pooling in NAV.\n\n    \"\"\"\n\n    def __setitem__(self, key, item):\n        if key in self:\n            raise CacheError(\"An object keyed %r is already stored in the cache\" % key)\n\n        super(ObjectCache, self).__setitem__(key, item)\n        item.cache = self\n\n    def __delitem__(self, key):\n        self[key].cache = None\n        super(ObjectCache, self).__delitem__(key)\n\n    def cache(self, item):\n        \"\"\"Caches the item, which should be a CacheableObject instance\"\"\"\n        self[item.key] = item\n\n    def invalidate(self):\n        \"\"\"Removes all invalid objects from the cache, and returns the\n        number of objects removed.\n\n        \"\"\"\n        count = 0\n        for key in list(self.keys()):\n            if self[key].is_invalid():\n                del self[key]\n                count += 1\n        return count\n\n    def refresh(self):\n        \"\"\"Refreshes all invalid objects in the cache, and returns the\n        number of objects refreshed.\n\n        \"\"\"\n        count = 0\n        for key in self.keys():\n            if self[key].is_invalid() and self[key].refresh():\n                count += 1\n        return count\n\n\nclass CacheableObject(object):\n    \"\"\"\n    A simple class to wrap objects for 'caching'.  It contains the\n    object reference and the time the object was loaded.\n    \"\"\"\n\n    def __init__(self, object_=None):\n        self.object = object_\n        self._cache = None\n        self.cache_time = None\n        self.key = str(object_)\n\n    def __setattr__(self, name, item):\n        if name == 'cache':\n            if self._cache is not None and item is not None:\n                raise CacheError(\"%s is already cached\" % repr(self))\n            elif item is not None:\n                self._cache = item\n                self.cache_time = time.time()\n            else:\n                self._cache = None\n                self.cache_time = None\n        else:\n            super(CacheableObject, self).__setattr__(name, item)\n\n    def __getattr__(self, name):\n        if name == 'cache':\n            return self._cache\n        else:\n            raise AttributeError(name)\n\n    def is_cached(self):\n        \"\"\"Returns True if this object is stored in an ObjectCache dictionary\"\"\"\n        return self._cache is not None\n\n    def is_invalid(self):\n        \"\"\"Returns True if this object is too old (or invalid in some\n        other way) to remain in the cache.\"\"\"\n        return False\n\n    def refresh(self):\n        \"\"\"Refresh the object, if possible\"\"\"\n        return False\n\n    def invalidate(self):\n        \"\"\"Delete this object from the cache it is registered in.\"\"\"\n        if self.cache is not None and self.is_invalid():\n            del self.cache[self.key]\n            return True\n        else:\n            return False\n\n    def age(self):\n        \"\"\"\n        Return the cache age of this object.\n        \"\"\"\n        if self.cache_time is None:\n            return 0\n        else:\n            return time.time() - self.cache_time\n\n    def __repr__(self):\n        if self._cache is None:\n            return \"<%s uncached>\" % repr(self.object)\n        else:\n            return \"<%s cached at %s>\" % (\n                repr(self.object),\n                time.asctime(time.localtime(self.cache_time)),\n            )\n\n    def __str__(self):\n        return str(self.object)\n\n\nclass CacheError(Exception):\n    \"\"\"Generic error during an ObjectCache operation\"\"\"\n\n    pass\n"
  },
  {
    "path": "python/nav/activeipcollector/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/activeipcollector/collector.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Counts active ip-addresses in a prefix and stores the data in rrd-files\"\"\"\n\nimport logging\nimport time\n\nfrom django.db import connection\n\n_logger = logging.getLogger(__name__)\n\n\ndef collect(days=None):\n    \"\"\"Collect data from database\n\n    Use either a quick query for updates only, or a slow one for walking\n    through historic data.\n    \"\"\"\n\n    starttime = time.time()\n    intervals = get_intervals(days) if days else 0\n\n    if intervals:\n        _logger.debug('Collecting %s intervals', intervals)\n        query = get_interval_query(intervals)\n    else:\n        query = get_static_query()\n\n    _logger.debug(query)\n\n    cursor = connection.cursor()\n    cursor.execute(query)\n\n    _logger.debug('Query executed in %.2f seconds', time.time() - starttime)\n\n    return cursor.fetchall()\n\n\ndef get_interval_query(intervals):\n    \"\"\"Return query for collecting data for a time interval\"\"\"\n\n    query = (\n        \"\"\"\n    SELECT\n        netaddr,\n        timeentry,\n        COUNT(DISTINCT ip) AS ipcount,\n        COUNT(DISTINCT mac) AS maccount\n    FROM vlan\n    JOIN prefix USING (vlanid)\n    CROSS JOIN (\n        SELECT\n            now() - generate_series(0,%s) * INTERVAL '30 minutes' AS timeentry)\n        AS series\n    LEFT JOIN arp ON (\n        ip << netaddr AND\n        (timeentry >= start_time AND timeentry <= end_time))\n    WHERE vlan.nettype NOT IN ('loopback') AND ip IS NOT NULL\n    GROUP BY netaddr, timeentry\n    ORDER BY timeentry\n    \"\"\"\n        % intervals\n    )\n\n    return query\n\n\ndef get_static_query():\n    \"\"\"Return for query for doing a static collection\"\"\"\n    query = \"\"\"\n    SELECT\n        netaddr,\n        now() AS timeentry,\n        COUNT(DISTINCT ip) AS ipcount,\n        COUNT(DISTINCT mac) AS maccount\n    FROM vlan\n    JOIN prefix USING (vlanid)\n    LEFT JOIN arp ON (ip << netaddr AND arp.end_time >= 'infinity')\n    WHERE vlan.nettype NOT IN ('loopback')\n    GROUP BY netaddr, timeentry\n    ORDER BY timeentry\n    \"\"\"\n\n    return query\n\n\ndef get_intervals(days):\n    \"\"\"Return number of intervals in given days\"\"\"\n    intervals_in_day = 2 * 24\n    return days * intervals_in_day\n"
  },
  {
    "path": "python/nav/activeipcollector/manager.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Manage collection and storing of active ip-addresses statistics\"\"\"\n\nimport datetime\nimport logging\nimport time\nfrom typing import Optional\n\nfrom IPy import IP\n\nimport nav.activeipcollector.collector as collector\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_path_for_prefix\n\n_logger = logging.getLogger(__name__)\nDATABASE_CATEGORY = 'activeip'\n\n\ndef run(days=None):\n    \"\"\"Fetch and store active ip\"\"\"\n    return store(collector.collect(days))\n\n\ndef store(data):\n    \"\"\"Sends data to carbon for storage in Graphite.\n\n    :param data: a cursor.fetchall object containing all database rows we\n    are to store\n\n    \"\"\"\n\n    for db_tuple in data:\n        store_tuple(db_tuple)\n\n    _logger.info('Sent %s updates', len(data))\n\n\ndef store_tuple(db_tuple):\n    \"\"\"Sends data to whisper with correct metric path\n\n    :param db_tuple: a row from a rrd_fetchall object\n\n    \"\"\"\n    prefix, when, ip_count, mac_count = db_tuple\n    ip_range = find_range(prefix)\n\n    when = get_timestamp(when)\n\n    metrics = [\n        (metric_path_for_prefix(prefix, 'ip_count'), (when, ip_count)),\n        (metric_path_for_prefix(prefix, 'mac_count'), (when, mac_count)),\n        (metric_path_for_prefix(prefix, 'ip_range'), (when, ip_range)),\n    ]\n    _logger.debug(metrics)\n    send_metrics(metrics)\n\n\ndef find_range(prefix):\n    \"\"\"\n    Find the max number of ip-addresses that are available for hosts\n    on this prefix\n    \"\"\"\n    try:\n        ip = IP(prefix)\n        if ip.version() == 4 and ip.len() > 2:\n            return ip.len() - 2\n        return 0\n    except ValueError:\n        return 0\n\n\ndef get_timestamp(timestamp: Optional[datetime.datetime] = None) -> int:\n    \"\"\"Find timestamp closest to 30 minutes intervals\"\"\"\n\n    return timestamp.timestamp() if timestamp else int(time.time())\n"
  },
  {
    "path": "python/nav/alertengine/__init__.py",
    "content": "\"\"\"alertengine\n\nThe alert profile parser and alert dispatching daemon.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/alertengine/base.py",
    "content": "#! /usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alertengine base functionality\"\"\"\n\nimport gc\nimport logging\nfrom datetime import datetime, timedelta\nfrom functools import lru_cache\n\nfrom django.db import transaction, reset_queries\n\nfrom nav.models.profiles import (\n    Account,\n    AccountAlertQueue,\n    AlertSender,\n    AlertSubscription,\n    AlertAddress,\n    FilterGroup,\n    AlertPreference,\n    TimePeriod,\n)\nfrom nav.models.event import AlertQueue\n\n\n_logger = logging.getLogger(__name__)\n\n# Queued notification dispatch decisions\nDISPATCHED_NOW = object()\nDISPATCHED_DAILY = object()\nDISPATCHED_WEEKLY = object()\nDISPATCH_FAILED = object()\nDISPATCH_IGNORED = object()\n\nWEEKEND_DAYS = (6, 7)\n\n\ndef check_alerts(debug=False):\n    \"\"\"Handles all new and user queued alerts\"\"\"\n\n    # We use transaction autocommit so that the changes we make only propogate\n    # if the entire loop finishes.\n\n    # Alot of this functionality could have been backed into the models for the\n    # corresponding objects, however it seems better to keep all of this logic\n    # in one place. Despite this some the simpler logic has been offloaded to\n    # the models themselves.\n\n    _logger = logging.getLogger('nav.alertengine.check_alerts')\n\n    # Try to avoid spamming people when running tests\n    if debug:\n        AlertAddress.DEBUG_MODE = True\n\n    now = datetime.now()\n\n    # Get all alerts that aren't in alert queue due to subscription\n    new_alerts = AlertQueue.objects.filter(queued_alerts__isnull=True)\n    num_new_alerts = len(new_alerts)\n\n    initial_alerts = AlertQueue.objects.values_list('id', flat=True)\n\n    _logger.debug('Starting alertengine run, checking %d new alerts', num_new_alerts)\n\n    if num_new_alerts:\n        handle_new_alerts(new_alerts)\n\n    # Get all queued alerts.\n    queued_alerts = AccountAlertQueue.objects.all()\n\n    _logger.debug('Checking %d queued alerts', len(queued_alerts))\n\n    if queued_alerts:\n        (\n            sent_daily,\n            sent_weekly,\n            num_sent_alerts,\n            num_failed_sends,\n            num_resolved_alerts_ignored,\n        ) = handle_queued_alerts(queued_alerts, now)\n    else:\n        (\n            sent_daily,\n            sent_weekly,\n            num_sent_alerts,\n            num_failed_sends,\n            num_resolved_alerts_ignored,\n        ) = ([], [], 0, 0, 0)\n\n    # Update the when the user last recieved daily or weekly alerts.\n    if sent_daily:\n        AlertPreference.objects.filter(account__in=sent_daily).update(last_sent_day=now)\n    if sent_weekly:\n        AlertPreference.objects.filter(account__in=sent_weekly).update(\n            last_sent_week=now\n        )\n\n    # Get id's of alerts that have been queued for users.\n    alerts_in_account_queues = AccountAlertQueue.objects.values_list(\n        'alert_id', flat=True\n    )\n\n    # Delete handeled alerts that are not in an AccountAlertQueue\n    if num_new_alerts:\n        if not debug:\n            to_delete = AlertQueue.objects.filter(\n                id__in=[a.id for a in new_alerts]\n            ).exclude(id__in=alerts_in_account_queues)\n            _logger.debug(\n                'Deleted following alerts from alert queue: %s',\n                [a.id for a in to_delete],\n            )\n            to_delete.delete()\n        else:\n            _logger.debug(\n                'In testing mode: would have deleted following alerts '\n                'from alert queue: %s',\n                [a.id for a in new_alerts],\n            )\n\n    num_deleted = (\n        len(initial_alerts) - AlertQueue.objects.filter(id__in=initial_alerts).count()\n    )\n\n    _logger.info(\n        '%d new alert(s), sent %d alert(s), %d queued alert(s), '\n        '%d alert(s) deleted, %d failed send(s), %d ignored',\n        num_new_alerts,\n        num_sent_alerts,\n        len(alerts_in_account_queues),\n        num_deleted,\n        num_failed_sends,\n        num_resolved_alerts_ignored,\n    )\n\n    if num_failed_sends:\n        _logger.warning('Send %d alerts failed.', num_failed_sends)\n\n    del initial_alerts\n    del new_alerts\n    del queued_alerts\n\n    reset_queries()\n    gc.collect()\n\n\n@transaction.atomic()\ndef handle_new_alerts(new_alerts):\n    \"\"\"Handles new alerts on the queue\"\"\"\n    _logger = logging.getLogger('nav.alertengine.handle_new_alerts')\n    accounts = []\n\n    def subscription_sort_key(subscription):\n        \"\"\"Return a key to sort alertsubscriptions in a prioritized order.\"\"\"\n        sort_order = [\n            AlertSubscription.NOW,\n            AlertSubscription.NEXT,\n            AlertSubscription.DAILY,\n            AlertSubscription.WEEKLY,\n        ]\n        try:\n            return sort_order.index(subscription.type)\n        except ValueError:\n            return subscription.type\n\n    # Build datastructure that contains accounts and corresponding\n    # filter_group_contents so that we don't redo db queries to much\n    for account in Account.objects.filter(\n        alert_preference__active_profile__isnull=False\n    ):\n        profile = account.get_active_profile()\n        time_period = profile.get_active_timeperiod() if profile else None\n\n        if not time_period:\n            continue\n\n        current_alertsubscriptions = sorted(\n            time_period.alert_subscriptions.all(), key=subscription_sort_key\n        )\n\n        tmp = []\n        for alertsubscription in current_alertsubscriptions:\n            tmp.append(\n                (\n                    alertsubscription,\n                    alertsubscription.filter_group.filter_group_contents.all(),\n                )\n            )\n\n        if tmp:\n            permissions = []\n            for filtergroup in FilterGroup.objects.filter(\n                group_permissions__accounts__in=[account]\n            ):\n                permissions.append(filtergroup.filter_group_contents.all())\n\n            accounts.append((account, tmp, permissions))\n            del permissions\n\n        del tmp\n        del current_alertsubscriptions\n        del account\n\n    # Remember which alerts are sent where to avoid duplicates\n    dupemap = set()\n\n    # Check all acounts against all their active subscriptions\n    for account, alertsubscriptions, permissions in accounts:\n        _logger.debug(\"Checking new alerts for account '%s'\", account)\n\n        for alert in new_alerts:\n            _check_match_and_permission(\n                account,\n                alert,\n                alertsubscriptions,\n                dupemap,\n                _logger,\n                check_alert_against_filtergroupcontents,\n                permissions,\n            )\n            del alert\n        del account\n        del permissions\n\n    del new_alerts\n    gc.collect()\n\n\ndef _check_match_and_permission(\n    account,\n    alert,\n    alertsubscriptions,\n    dupemap,\n    _logger,\n    memoized_check_alert,\n    permissions,\n):\n    for alertsubscription, filtergroupcontents in alertsubscriptions:\n        # Check if alert matches, and if user has permission\n        if memoized_check_alert(alert, filtergroupcontents, 'match check'):\n            queued = _check_permissions(\n                account,\n                alert,\n                alertsubscription,\n                dupemap,\n                _logger,\n                memoized_check_alert,\n                permissions,\n            )\n\n            if not queued:\n                _logger.warning(\n                    'alert %d not queued to %s due to lacking permissions'\n                    % (alert.id, account)\n                )\n        else:\n            _logger.debug(\n                'alert %d: did not match the alertsubscription %d of user %s',\n                alert.id,\n                alertsubscription.id,\n                account,\n            )\n\n        del alertsubscription\n        del filtergroupcontents\n\n\ndef _check_permissions(\n    account,\n    alert,\n    alertsubscription,\n    dupemap,\n    _logger,\n    memoized_check_alert,\n    permissions,\n):\n    for permission in permissions:\n        if memoized_check_alert(alert, permission, 'permission check'):\n            _logger.debug(\"Matched permission subscription %d\" % alertsubscription.id)\n\n            # Queue all alerts, avoiding duplicates. The individual users'\n            # queues will be processed later.\n            if (alert.id, alertsubscription.alert_address_id) not in dupemap:\n                AccountAlertQueue.objects.get_or_create(\n                    account=account, alert=alert, subscription=alertsubscription\n                )\n                dupemap.add((alert.id, alertsubscription.alert_address_id))\n                _logger.info(\n                    'alert %d queued for %s due to subscription %d',\n                    alert.id,\n                    account,\n                    alertsubscription.id,\n                )\n            else:\n                _logger.debug(\n                    'alert %d was already queued for %s (address %s)',\n                    alert.id,\n                    account,\n                    alertsubscription.alert_address_id,\n                )\n\n            return True\n    return False\n\n\ndef handle_queued_alerts(queued_alerts, now=None):\n    \"\"\"Processes and dispatches notifications that are queued for individual users.\n    Every AccountAlertQueue object represents a specific AlertQueue item that has been\n    scheduled for dispatch to a particular user. Typical scheduling choices may be:\n\n      * Immediately.\n      * Wait until the next timeperiod in the user's profile becomes active.\n      * Wait until the daily dispatch time set in the profile.\n      * Wait until the weekly dispatch time set in the profile.\n\n    If a user's profile says so, a delayed notification may also be ignored and removed\n    from the queue if the represented alert has been resolved since it was added to the\n    queue.\n\n    :param queued_alerts: A sequence of all AccountAlertQueue items to consider.\n    :type queued_alerts: List[AccountAlertQueue]\n    :param now: Set only when testing, to force what value should be considered the\n                current time.\n    :type now: datetime\n\n    :return: A tuple of stats on how the queued alerts were processed:\n             (accounts_sent_daily, accounts_sent_weekly, num_sent_alerts,\n              num_failed_sends, num_resolved_alerts_ignored)\n    \"\"\"\n    _logger = logging.getLogger('nav.alertengine.handle_queued_alerts')\n\n    if not now:\n        now = datetime.now()\n\n    # We want to keep track of which users have received their weekly or daily\n    # notifications during this queue run, so that their profile states can be updated\n    accounts_sent_weekly = set()\n    accounts_sent_daily = set()\n\n    num_sent_alerts = 0\n    num_resolved_alerts_ignored = 0\n    num_failed_sends = 0\n\n    for queued_alert in queued_alerts:  # type: AccountAlertQueue\n        result = process_single_queued_notification(queued_alert, now=now)\n\n        # The result value is processed purely for statistics and record keeping\n        if result == DISPATCH_FAILED:\n            num_failed_sends += 1\n        elif result == DISPATCH_IGNORED:\n            num_resolved_alerts_ignored += 1\n        elif result in (DISPATCHED_NOW, DISPATCHED_WEEKLY, DISPATCHED_DAILY):\n            num_sent_alerts += 1\n\n        if result == DISPATCHED_DAILY:\n            accounts_sent_daily.add(queued_alert.account)\n        elif result == DISPATCHED_WEEKLY:\n            accounts_sent_weekly.add(queued_alert.account)\n\n        del queued_alert\n\n    del queued_alerts\n\n    return (\n        accounts_sent_daily,\n        accounts_sent_weekly,\n        num_sent_alerts,\n        num_failed_sends,\n        num_resolved_alerts_ignored,\n    )\n\n\ndef process_single_queued_notification(queued_alert, now):\n    \"\"\"Processes and, if deemed necessary, dispatches a queued notification.\n\n    :type queued_alert: AccountAlertQueue\n    :type now: datetime\n    \"\"\"\n    _logger = logging.getLogger(\"nav.alertengine.process_single_queued_notification\")\n\n    send, daily, weekly = False, False, False\n    try:\n        subscription = queued_alert.subscription\n    except AlertSubscription.DoesNotExist:\n        _logger.error(\n            'account queued alert %d does not have subscription, '\n            'probably a legacy table row',\n            queued_alert.id,\n        )\n        return\n\n    _logger.debug(\n        'Stored alert %d: Checking %s %s subscription %d',\n        queued_alert.alert_id,\n        queued_alert.account,\n        subscription.get_type_display(),\n        subscription.id,\n    )\n\n    try:\n        subscription.time_period.profile.alert_preference\n    except AlertPreference.DoesNotExist:\n        subscription = None\n\n    if subscription is None:\n        _logger.info(\n            'Sending alert %d right away as the users profile has been disabled',\n            queued_alert.alert_id,\n        )\n        send = True\n\n    elif subscription.type == AlertSubscription.NOW:\n        send = True\n\n    elif subscription.type == AlertSubscription.DAILY:\n        if _verify_daily_dispatch(queued_alert, now, _logger):\n            send = True\n            daily = True\n\n    elif subscription.type == AlertSubscription.WEEKLY:\n        if _verify_weekly_dispatch(queued_alert, now, _logger):\n            send = True\n            weekly = True\n\n    elif subscription.type == AlertSubscription.NEXT:\n        if _verify_next_dispatch(queued_alert, now, _logger):\n            send = True\n\n    else:\n        _logger.error(\n            'Account %s has an invalid subscription type in subscription %d',\n            subscription.account,\n            subscription.id,\n        )\n\n    if send:\n        if alert_should_be_ignored(queued_alert, subscription, now):\n            _logger.info(\n                'Ignoring resolved alert %d due to user preference',\n                queued_alert.alert_id,\n            )\n            queued_alert.delete()\n            return DISPATCH_IGNORED\n\n        if queued_alert.send():\n            if weekly:\n                return DISPATCHED_WEEKLY\n            elif daily:\n                return DISPATCHED_DAILY\n            else:\n                return DISPATCHED_NOW\n        else:\n            return DISPATCH_FAILED\n\n\ndef _verify_daily_dispatch(queued_alert, now, _logger=_logger):\n    subscription = queued_alert.subscription\n    daily_time = subscription.time_period.profile.daily_dispatch_time\n    last_sent = (\n        subscription.time_period.profile.alert_preference.last_sent_day or datetime.min\n    )\n    # If the last sent date is less than the current date, and we are\n    # past the daily time and the alert was added to the queue before\n    # this time\n    last_sent_test = last_sent.date() < now.date()\n    daily_time_test = daily_time < now.time()\n    insertion_time_test = queued_alert.insertion_time < datetime.combine(\n        now.date(), daily_time\n    )\n    _logger.debug(\n        'Tests: last sent %s, daily time %s, insertion time %s',\n        last_sent_test,\n        daily_time_test,\n        insertion_time_test,\n    )\n    return last_sent_test and daily_time_test and insertion_time_test\n\n\ndef _verify_weekly_dispatch(queued_alert, now, _logger=_logger):\n    subscription = queued_alert.subscription\n    weekly_time = subscription.time_period.profile.weekly_dispatch_time\n    weekly_day = subscription.time_period.profile.weekly_dispatch_day\n    last_sent = (\n        subscription.time_period.profile.alert_preference.last_sent_week or datetime.min\n    )\n\n    # Check that we are at the correct weekday, and that the last sent\n    # time is less than today, and that alert was inserted before the\n    # weekly time.\n\n    weekday_test = weekly_day == now.weekday()\n    last_sent_test = last_sent.date() < now.date()\n    weekly_time_test = weekly_time < now.time()\n    insertion_time_test = queued_alert.insertion_time < datetime.combine(\n        now.date(), weekly_time\n    )\n\n    _logger.debug(\n        'Tests: weekday %s, last sent %s, weekly time %s, insertion time %s',\n        weekday_test,\n        last_sent_test,\n        weekly_time_test,\n        insertion_time_test,\n    )\n\n    return weekday_test and last_sent_test and weekly_time_test and insertion_time_test\n\n\ndef _verify_next_dispatch(queued_alert, now, _logger=_logger):\n    subscription = queued_alert.subscription\n    active_profile = subscription.alert_address.account.get_active_profile()\n\n    if not active_profile:\n        # No active profile do nothing (FIXME ask if this is how we want things)\n        return False\n    else:\n        current_time_period = active_profile.get_active_timeperiod()\n\n        insertion_time = queued_alert.insertion_time\n        queued_alert_time_period = subscription.time_period\n\n        timeperiod_count = _get_number_of_timeperiods_today(active_profile, now)\n        if timeperiod_count == 1:  # we have a looping time period\n            start_time = _calculate_timeperiod_start(queued_alert_time_period, now)\n            was_inserted_before = insertion_time < start_time\n            _logger.debug(\n                \"Tests: Only one time period, inserted in previous iteration: %s\",\n                was_inserted_before,\n            )\n        else:\n            was_inserted_before = queued_alert_time_period.id != current_time_period.id\n            _logger.debug(\n                \"Tests: Inserted in different time period: %s\", was_inserted_before\n            )\n\n        return was_inserted_before\n\n\ndef _get_number_of_timeperiods_today(alertprofile, now):\n    \"\"\"\n    :type alertprofile: nav.models.profiles.AlertProfile\n    :type now: datetime\n    \"\"\"\n    if now.isoweekday() in WEEKEND_DAYS:\n        valid_during = [TimePeriod.ALL_WEEK, TimePeriod.WEEKENDS]\n    else:\n        valid_during = [TimePeriod.ALL_WEEK, TimePeriod.WEEKDAYS]\n    return alertprofile.time_periods.filter(valid_during__in=valid_during).count()\n\n\ndef _calculate_timeperiod_start(timeperiod, now=None):\n    \"\"\"Given a timeperiod that is looping, i.e. it is the only timeperiod in a\n    profile, this calculates the full datetime when the current time period started.\n\n    :type timeperiod: TimePeriod\n    :type now: datetime\n    \"\"\"\n    if not now:\n        now = datetime.now()\n\n    if now.time() < timeperiod.start:\n        date = now.date() - timedelta(days=1)  # yesterday\n    else:\n        date = now.date()  # today\n\n    return datetime.combine(date, timeperiod.start)\n\n\ndef alert_should_be_ignored(queued_alert, subscription, now):\n    \"\"\"Returns True if the subscription specifies that the queued_alert should\n    be ignored.\n\n    \"\"\"\n    return (\n        queued_alert.alert.history is not None\n        and queued_alert.alert.history.end_time is not None\n        and queued_alert.alert.history.end_time < now\n        and subscription is not None\n        and subscription.ignore_resolved_alerts\n        and subscription.type != AlertSubscription.NOW\n    )\n\n\n@lru_cache\ndef check_alert_against_filtergroupcontents(alert, filtergroupcontents, atype):\n    \"\"\"Checks a given alert against an array of filtergroupcontents\"\"\"\n\n    _logger = logging.getLogger(\n        'nav.alertengine.check_alert_against_filtergroupcontents'\n    )\n\n    if not filtergroupcontents:\n        _logger.debug(\"Emtpy filtergroup\")\n        return False\n\n    # Allways assume that the match will fail\n    matches = False\n\n    for content in filtergroupcontents:\n        original_macthes = matches\n\n        # If we have not matched the message see if we can match it\n        if not matches and content.include:\n            matches = content.filter.verify(alert) == content.positive\n\n            if matches:\n                _logger.debug(\n                    'alert %d: got included by filter %d in %s',\n                    alert.id,\n                    content.filter.id,\n                    atype,\n                )\n\n        # If the alert has been matched try excluding it\n        elif matches and not content.include:\n            matches = content.filter.verify(alert) != content.positive\n\n            # Log that we excluded the alert\n            if not matches:\n                _logger.debug(\n                    'alert %d got: excluded by filter %d in %s',\n                    alert.id,\n                    content.filter.id,\n                    atype,\n                )\n\n        if original_macthes == matches:\n            _logger.debug(\n                'alert %d: unaffected by filter %d in %s',\n                alert.id,\n                content.filter.id,\n                atype,\n            )\n\n    return matches\n\n\ndef clear_blacklisted_status_of_alert_senders():\n    blacklisted_alert_senders = AlertSender.objects.exclude(\n        blacklisted_reason__isnull=True\n    )\n    for sender in blacklisted_alert_senders:\n        sender.blacklisted_reason = None\n    AlertSender.objects.bulk_update(\n        objs=blacklisted_alert_senders, fields=[\"blacklisted_reason\"]\n    )\n"
  },
  {
    "path": "python/nav/alertengine/dispatchers/__init__.py",
    "content": "#\n# Copyright (C) 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"The dispatchers package contains all the methods that alertengine can use to\nsend out alerts. Adding new messaging channels is a simple matter of writting\na new subclass of ``dispatcher'' overriding send with the following:\n\n    def send(self, address, alert, language='en'):\n\naddress - the alertaddress object that is \"sending\" the alert\n  alert - the alertqueue object that we want to send out an notification about\n\nThe address to send to is `address.address`. To get the message we want to send\nsimply call `alert.messages.get(language=language, type='your_message_type')`\n\nFor your dispatchers logging please use\n`logging.getlogger('nav.alertengine.dispatchers.your_dispatcher')` and try to\nuse sensible log messages, look at the modules that ship with NAV for\nexamples.\n\n\"\"\"\n\nimport logging\nfrom django.core.validators import validate_email\nfrom django.forms import ValidationError\n\nfrom nav.models.event import AlertQueueMessage\n\n_logger = logging.getLogger('nav.alertengine.dispatchers')\n\n\nclass Dispatcher(object):\n    \"\"\"Base class for dispatchers\"\"\"\n\n    def __init__(self, config=None):\n        self.config = config if config is not None else {}\n\n    def send(self, address, alert, language='en'):\n        \"\"\"Sends an alert to a specific address for a specific language\n\n        :type address: nav.models.profiles.AlertAddress\n        :type alert: nav.models.event.AlertQueue\n        :param language: A two-letter ISO language code string\n        \"\"\"\n        raise NotImplementedError\n\n    def get_message(self, alert, language, message_type):\n        \"\"\"Gets the message to be sent\"\"\"\n        try:\n            return alert.messages.get(language=language, type=message_type).message\n        except AlertQueueMessage.DoesNotExist:\n            return self.get_fallback_message(alert, language, message_type)\n\n    def get_fallback_message(self, alert, language, message_type):\n        \"\"\"Gets a fallback message if the original alert is missing\"\"\"\n        # Try using longest message in english\n        messages = list(alert.messages.filter(language='en'))\n        messages.sort(key=lambda m: len(m.message))\n\n        if messages:\n            return messages[-1].message\n        else:\n            # Fallback to any message\n            messages = list(alert.messages.all())\n            messages.sort(key=lambda m: len(m.message))\n\n            if messages:\n                return messages[-1].message\n\n        return \"%s: No '%s' message for %d\" % (alert.netbox, message_type, alert.id)\n\n    @staticmethod\n    def is_valid_address(address):\n        \"\"\"Validates address against the address syntax for this dispatcher\"\"\"\n        raise NotImplementedError\n\n\nclass DispatcherException(Exception):\n    \"\"\"Raised when alert could not be sent temporarily and sending should be\n    retried\"\"\"\n\n    pass\n\n\nclass FatalDispatcherException(DispatcherException):\n    \"\"\"Raised when alert could not be sent and further attempts at sending\n    should be ditched\"\"\"\n\n    pass\n\n\nclass InvalidAlertAddressError(Exception):\n    \"\"\"Raised when an alert address is invalid, which is determined by the\n    is_valid_address method of each dispatcher\"\"\"\n\n    pass\n\n\ndef is_valid_email(address):\n    \"\"\"Validates a string as an e-mail address\"\"\"\n    try:\n        validate_email(address)\n    except ValidationError:\n        return False\n    return True\n"
  },
  {
    "path": "python/nav/alertengine/dispatchers/email_dispatcher.py",
    "content": "#! /usr/bin/env python\n#\n# Copyright (C) 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"E-Mail dispatcher implementation\"\"\"\n\nimport logging\nfrom smtplib import SMTPException, SMTPRecipientsRefused\n\nfrom django.core.mail import EmailMessage\n\nfrom nav.alertengine.dispatchers import (\n    Dispatcher,\n    DispatcherException,\n    FatalDispatcherException,\n    is_valid_email,\n)\n\n_logger = logging.getLogger('nav.alertengine.dispatchers.email')\n\n\nclass Email(Dispatcher):\n    \"\"\"E-Mail dispatcher\"\"\"\n\n    def send(self, address, alert, language='en'):\n        message = self.get_message(alert, language, 'email')\n\n        # Extract the subject\n        subject = message.splitlines(1)[0].lstrip('Subject:').strip()\n        # Remove the subject line\n        message = '\\n'.join(message.splitlines()[1:])\n\n        headers = {\n            'X-NAV-Alert-ID': alert.id,\n            'X-NAV-Alert-Subsystem': alert.source,\n            'X-NAV-Alert-Netbox': alert.netbox,\n            'X-NAV-Alert-Device': alert.device,\n            'X-NAV-Alert-SubID': alert.subid,\n            'X-NAV-Event-Type': alert.event_type_id,\n            'X-NAV-Alert-State': alert.get_state_display(),\n            'X-NAV-Alert-History-ID': alert.history_id,\n        }\n\n        try:\n            if not address.DEBUG_MODE:\n                email = EmailMessage(\n                    subject=subject, body=message, to=[address.address], headers=headers\n                )\n                email.send(fail_silently=False)\n            else:\n                _logger.debug(\n                    'alert %d: In testing mode, would have sent email to %s',\n                    alert.id,\n                    address.address,\n                )\n\n        except SMTPException as err:\n            msg = 'Could not send email: %s\" ' % err\n            if isinstance(err, SMTPRecipientsRefused) or (\n                hasattr(err, \"smtp_code\") and str(err.smtp_code).startswith('5')\n            ):\n                raise FatalDispatcherException(msg)\n\n            # Reraise as DispatcherException so that we can catch it further up\n            raise DispatcherException(msg)\n\n    @staticmethod\n    def is_valid_address(address):\n        return is_valid_email(address)\n"
  },
  {
    "path": "python/nav/alertengine/dispatchers/slack_dispatcher.py",
    "content": "#\n# Copyright (C) 2015-2020 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A sender for slack messages\"\"\"\n\nimport json\nimport time\n\nfrom django.core.validators import URLValidator\nfrom django.core.exceptions import ValidationError\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\nfrom nav.alertengine.dispatchers import Dispatcher, DispatcherException\n\nHTTP_TOO_MANY_REQUESTS = 429\nFAILURE_BACKOFF = 25  # seconds\n\n\nclass Slack(Dispatcher):\n    \"\"\"Dispatch messages to Slack\"\"\"\n\n    _failures = {}\n\n    def __init__(self, *args, **kwargs):\n        super(Slack, self).__init__(*args, **kwargs)\n\n        self.config = kwargs.get('config')\n        self.username = self.config.get('username')\n        self.channel = self.config.get('channel')\n        self.emoji = self.config.get('emoji')\n        self.verify = self.config.get('verify', True)\n\n    def send(self, address, alert, language='en'):\n        \"\"\"Send a message to Slack\"\"\"\n        if self._is_still_backing_off_for(address.address):\n            raise DispatcherException(\n                \"Refusing to send Slack alert until backoff period has expired\"\n            )\n\n        params = {\n            'text': alert.messages.get(language=language, type='sms').message,\n            'username': self.username,\n            'channel': self.channel,\n            'icon_emoji': self.emoji,\n        }\n        payload = json.dumps(params)\n        if isinstance(payload, str):\n            payload = payload.encode(\"utf-8\")\n        request = Request(\n            address.address, payload, {'Content-Type': 'application/json'}\n        )\n\n        try:\n            urlopen(request)\n        except HTTPError as error:\n            if error.code == HTTP_TOO_MANY_REQUESTS:\n                self._register_failure_for(address.address)\n                raise DispatcherException(\n                    \"Slack complained there were too many requests; need to back off\"\n                )\n            else:\n                raise\n\n    def _register_failure_for(self, address):\n        \"\"\"Register address as an endpoint failing with TOO MANY REQUESTS errors\"\"\"\n        self._failures[address] = time.time()\n\n    def _is_still_backing_off_for(self, address):\n        \"\"\"Returns True if FAILURE_BACKOFF seconds still haven't passed since the\n        endpoint at address last returned a TOO MANY REQUESTS error.\n        \"\"\"\n        time_passed = time.time() - self._failures.get(address, 0)\n        return time_passed < FAILURE_BACKOFF\n\n    @staticmethod\n    def is_valid_address(address):\n        validator = URLValidator()\n        try:\n            validator(address)\n        except ValidationError:\n            return False\n        return True\n"
  },
  {
    "path": "python/nav/alertengine/dispatchers/sms_dispatcher.py",
    "content": "#! /usr/bin/env python\n#\n# Copyright (C) 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SMS queue alert dispatcher implementation\"\"\"\n\nimport logging\n\nfrom django.db import DatabaseError, IntegrityError\n\nfrom nav.models.profiles import SMSQueue\nfrom nav.models.event import AlertQueueMessage\nfrom nav.alertengine.dispatchers import Dispatcher, DispatcherException\n\n_logger = logging.getLogger('nav.alertengine.dispatchers.sms')\n\n\nclass Sms(Dispatcher):\n    \"\"\"Simple dispatcher that adds alerts to SMSQueue for smsd to handle\"\"\"\n\n    def send(self, address, alert, language='en'):\n        if address.account.has_perm('alert_by', 'sms'):\n            message = self.get_message(alert, language, 'sms')\n\n            if not address.DEBUG_MODE:\n                try:\n                    SMSQueue.objects.create(\n                        account=address.account,\n                        message=message,\n                        severity=alert.severity,\n                        phone=address.address,\n                    )\n                except (DatabaseError, IntegrityError) as err:\n                    raise DispatcherException(\"Couldn't add sms to queue: %s\" % err)\n            else:\n                _logger.debug(\n                    'alert %d: In testing mode, would have added '\n                    'message to sms queue for user %s at %s',\n                    alert.id,\n                    address.account,\n                    address.address,\n                )\n        else:\n            _logger.warning(\n                'alert %d: %s does not have SMS privileges', alert.id, address.account\n            )\n\n    def get_fallback_message(self, alert, language, message_type):\n        try:\n            return alert.messages.get(language='en', type=message_type).message\n        except AlertQueueMessage.DoesNotExist:\n            pass\n\n        try:\n            message = alert.messages.get(language='en', type='email').message\n            return message.split('\\n')[0]\n        except AlertQueueMessage.DoesNotExist:\n            pass\n\n        return '%s: No sms message for %d' % (alert.netbox, alert.id)\n\n    @staticmethod\n    def is_valid_address(address):\n        return address.removeprefix(\"+\").isdigit()\n"
  },
  {
    "path": "python/nav/arnold.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nProvides helpfunctions for Arnold web and script\n\"\"\"\n\nimport re\nimport os\nimport configparser\n\nimport logging\nimport socket\nfrom datetime import datetime, timedelta\nfrom collections import namedtuple\nfrom smtplib import SMTPException\nfrom typing import Callable\n\nfrom IPy import IP\nfrom django.db import connection\nfrom django.core.mail import EmailMessage\n\nimport nav.Snmp\nfrom nav.Snmp.errors import AgentError\nimport nav.bitvector\nimport nav.buildconf\nfrom nav.Snmp.profile import get_snmp_session_for_profile\nfrom nav.config import find_config_file\nfrom nav.errors import GeneralException\nfrom nav.models.arnold import Identity, Event\nfrom nav.models.manage import Interface, Prefix\nfrom nav.netbiostracker.tracker import scan, parse_get_workstations\nfrom nav.portadmin.management import ManagementFactory\nfrom nav.portadmin.snmp.base import NoReadWriteManagementProfileError\nfrom nav.util import is_valid_ip\n\nCONFIGFILE = os.path.join(\"arnold\", \"arnold.conf\")\nNONBLOCKFILE = os.path.join(\"arnold\", \"nonblock.conf\")\n_logger = logging.getLogger(__name__)\n\nCandidate = namedtuple(\"Candidate\", \"camid ip mac interface endtime\")\n\n\nclass Memo(object):\n    \"\"\"Simple config file memoization\"\"\"\n\n    def __init__(self, func):\n        self.func = func\n        self.cache = {}\n\n    def __call__(self, filename):\n        if filename in self.cache:\n            if self.is_changed(filename):\n                return self.store(filename)\n            else:\n                return self.cache[filename][0]\n        else:\n            return self.store(filename)\n\n    def is_changed(self, filename):\n        \"\"\"Check if file is changed since last cache\"\"\"\n        mtime = os.path.getmtime(filename)\n        if mtime != self.cache[filename][1]:\n            return True\n        return False\n\n    def store(self, filename):\n        \"\"\"Run function, store result and modification time in cache\"\"\"\n        value = self.func(filename)\n        mtime = os.path.getmtime(filename)\n        self.cache[filename] = (value, mtime)\n        return value\n\n\nclass ChangePortStatusError(GeneralException):\n    \"\"\"An error occured when changing portadminstatus\"\"\"\n\n    pass\n\n\nclass ChangePortVlanError(GeneralException):\n    \"\"\"An error occured when changing portvlan\"\"\"\n\n    pass\n\n\nclass NoDatabaseInformationError(GeneralException):\n    \"\"\"No information available for id\"\"\"\n\n    pass\n\n\nclass PortNotFoundError(GeneralException):\n    \"\"\"Could not find port in database\"\"\"\n\n    pass\n\n\nclass UnknownTypeError(GeneralException):\n    \"\"\"Unknown type (not ip or mac)\"\"\"\n\n    pass\n\n\nclass DbError(GeneralException):\n    \"\"\"Error when querying database\"\"\"\n\n    pass\n\n\nclass NotSupportedError(GeneralException):\n    \"\"\"This vendor does not support snmp set of vlan\"\"\"\n\n    pass\n\n\nclass NoSuchProgramError(GeneralException):\n    \"\"\"No such program\"\"\"\n\n    pass\n\n\nclass DetainmentNotAllowedError(GeneralException):\n    \"\"\"Detainment not allowed\"\"\"\n\n    pass\n\n\nclass WrongCatidError(DetainmentNotAllowedError):\n    \"\"\"Arnold is not permitted to block ports on equipment of this category\"\"\"\n\n    pass\n\n\nclass AlreadyBlockedError(DetainmentNotAllowedError):\n    \"\"\"This port is already blocked or quarantined.\"\"\"\n\n    pass\n\n\nclass InExceptionListError(DetainmentNotAllowedError):\n    \"\"\"This ip-address is in the exceptionlist and cannot be blocked.\"\"\"\n\n    pass\n\n\nclass FileError(GeneralException):\n    \"\"\"Fileerror\"\"\"\n\n    pass\n\n\nclass BlockonTrunkError(DetainmentNotAllowedError):\n    \"\"\"No action on trunked interface allowed\"\"\"\n\n    pass\n\n\ndef find_id_information(ip_or_mac, limit, trunk_ok=False):\n    \"\"\"Look in arp and cam tables to find camtuple with ip_or_mac\n\n    Returns $limit number of Candidates\n\n    If ip_or_mac is ip, then we can find info in arp. If it is a mac-address\n    we cannot find ip-address and it is set to a default value. In both\n    cases we are able to find the interface where the ip_or_mac is located.\n\n    \"\"\"\n    cursor = connection.cursor()\n    category = find_input_type(ip_or_mac)\n\n    # Get data from database based on id\n    if category not in ['IP', 'MAC']:\n        raise UnknownTypeError(ip_or_mac)\n\n    query = \"\"\n    if category == 'IP':\n        # Find cam and arp-data which relates to the time where this ip was\n        # last active.\n        query = \"\"\"\n        SELECT *, cam.start_time AS starttime, cam.end_time AS endtime\n        FROM cam\n        JOIN (SELECT ip, mac, start_time AS ipstarttime,\n        end_time AS ipendtime\n              FROM arp\n              WHERE ip=%s\n              ORDER BY end_time DESC\n              LIMIT 2) arpaggr USING (mac)\n        LEFT JOIN interface ON (cam.ifindex=interface.ifindex\n                            AND cam.netboxid=interface.netboxid)\n        WHERE (cam.start_time, cam.end_time)\n        OVERLAPS (arpaggr.ipstarttime, arpaggr.ipendtime)\n        ORDER BY endtime DESC\n        LIMIT %s\n        \"\"\"\n\n    elif category == 'MAC':\n        # Fetch last camtuple regarding this macaddress\n        query = \"\"\"\n        SELECT *, cam.start_time AS starttime, cam.end_time AS endtime\n        FROM cam\n        LEFT JOIN interface ON (cam.ifindex=interface.ifindex\n                            AND cam.netboxid=interface.netboxid)\n        WHERE mac = %s\n        ORDER BY endtime DESC\n        LIMIT %s\n        \"\"\"\n\n    cursor.execute(query, [ip_or_mac, limit])\n    result = dictfetchall(cursor)\n    candidates = create_candidates(result, trunk_ok)\n    if candidates:\n        return candidates\n    else:\n        raise NoDatabaseInformationError(ip_or_mac)\n\n\ndef find_input_type(ip_or_mac):\n    \"\"\"Try to determine whether input is a valid ip-address,\n    mac-address or an swportid. Return type and reformatted input as a\n    tuple\"\"\"\n    # Support mac-adresses on xx:xx... format\n    ip_or_mac = str(ip_or_mac)\n    mac = ip_or_mac.replace(':', '')\n\n    input_type = \"UNKNOWN\"\n    if is_valid_ip(ip_or_mac, strict=True):\n        input_type = \"IP\"\n    elif re.match(\"^[A-Fa-f0-9]{12}$\", mac):\n        input_type = \"MAC\"\n    elif re.match(r\"^\\d+$\", ip_or_mac):\n        input_type = \"SWPORTID\"\n\n    return input_type\n\n\ndef dictfetchall(cursor):\n    \"Returns all rows from a cursor as a dict\"\n    desc = cursor.description\n    return [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]\n\n\ndef create_candidates(caminfos, trunk_ok=False):\n    \"\"\"Create candidates\"\"\"\n    candidates = []\n    for caminfo in caminfos:\n        if 'ip' not in caminfo:\n            caminfo['ip'] = '0.0.0.0'\n        try:\n            interface = Interface.objects.get(pk=caminfo['interfaceid'])\n            raise_if_detainment_not_allowed(interface, trunk_ok=trunk_ok)\n        except (Interface.DoesNotExist, DetainmentNotAllowedError):\n            continue\n        else:\n            candidates.append(\n                Candidate(\n                    caminfo['camid'],\n                    caminfo['ip'],\n                    caminfo['mac'],\n                    interface,\n                    caminfo['endtime'],\n                )\n            )\n    return candidates\n\n\ndef find_computer_info(ip_or_mac, trunk_ok=False):\n    \"\"\"Return the latest entry from the cam table for ip_or_mac\"\"\"\n    return find_id_information(ip_or_mac, 5, trunk_ok)[0]\n\n\ndef disable(candidate, justification, username, comment=\"\", autoenablestep=0):\n    \"\"\"Disable a target by blocking the port\"\"\"\n    _logger.info(\n        'Disabling %s - %s on interface %s',\n        candidate.ip,\n        candidate.mac,\n        candidate.interface,\n    )\n\n    if not candidate.interface.netbox.get_preferred_snmp_management_profile(\n        require_write=True\n    ):\n        raise NoReadWriteManagementProfileError(\n            \"%s has no read-write management profile\" % candidate.interface.netbox\n        )\n    identity = check_identity(candidate)\n    change_port_status('disable', identity)\n    identity.status = 'disabled'\n    update_identity(identity, justification, autoenablestep)\n    create_event(identity, comment, username)\n\n    _logger.info(\"Successfully %s %s (%s)\", identity.status, identity.ip, identity.mac)\n\n\ndef quarantine(candidate, qvlan, justification, username, comment=\"\", autoenablestep=0):\n    \"\"\"Quarantine a target bu changing vlan on port\"\"\"\n    _logger.info(\n        'Quarantining %s - %s on interface %s',\n        candidate.ip,\n        candidate.mac,\n        candidate.interface,\n    )\n\n    if not candidate.interface.netbox.get_preferred_snmp_management_profile(\n        require_write=True\n    ):\n        raise NoReadWriteManagementProfileError(\n            \"%s has no read-write management profile\" % candidate.interface.netbox\n        )\n    identity = check_identity(candidate)\n    identity.fromvlan = change_port_vlan(identity, qvlan.vlan)\n    identity.tovlan = qvlan\n    identity.status = 'quarantined'\n    update_identity(identity, justification, autoenablestep)\n    create_event(identity, comment, username)\n\n    _logger.info(\"Successfully %s %s (%s)\", identity.status, identity.ip, identity.mac)\n\n\ndef check_target(target, trunk_ok=False):\n    \"\"\"Check if target can be blocked or not\"\"\"\n    _logger.debug('Checking target %s', target)\n    if find_input_type(target) == 'IP':\n        check_non_block(target)\n    find_computer_info(target, trunk_ok)\n\n\ndef check_identity(candidate):\n    \"\"\"Create or return existing identity object based on target\"\"\"\n    try:\n        identity = Identity.objects.get(\n            interface=candidate.interface, mac=candidate.mac\n        )\n        if identity.status != 'enabled':\n            raise AlreadyBlockedError\n        identity.ip = candidate.ip\n    except Identity.DoesNotExist:\n        identity = Identity()\n        identity.interface = candidate.interface\n        identity.ip = candidate.ip\n        identity.mac = candidate.mac\n\n    # Check if we should not detain this interface for some reason\n    raise_if_detainment_not_allowed(identity.interface)\n\n    return identity\n\n\ndef update_identity(identity, justification, autoenablestep):\n    \"\"\"Update an identity with common info\"\"\"\n    identity.justification = justification\n    identity.organization = identity.interface.netbox.organization\n    identity.dns = get_host_name(identity.ip)\n    identity.netbios = get_netbios(identity.ip)\n    identity.textual_interface = str(identity.interface)\n    if autoenablestep:\n        identity.autoenable = datetime.now() + timedelta(days=autoenablestep)\n        identity.autoenablestep = autoenablestep\n\n    identity.save()\n\n\ndef create_event(identity, comment, username):\n    \"\"\"Create event for the action specified in identity\"\"\"\n    event = Event(\n        identity=identity,\n        comment=comment,\n        action=identity.status,\n        justification=identity.justification,\n        autoenablestep=identity.autoenablestep,\n        executor=username,\n    )\n    event.save()\n\n\ndef raise_if_detainment_not_allowed(interface, trunk_ok=False):\n    \"\"\"Raises an exception if this interface should not be detained\"\"\"\n    netbox = interface.netbox\n    config = get_config(find_config_file(CONFIGFILE))\n    allowtypes = [x.strip() for x in str(config.get('arnold', 'allowtypes')).split(',')]\n\n    if netbox.category.id not in allowtypes:\n        _logger.info(\"Not allowed to detain on %s\", netbox.category.id)\n        raise WrongCatidError(netbox.category)\n\n    if not trunk_ok and interface.trunk:\n        _logger.info(\"Cannot detain on a trunk\")\n        raise BlockonTrunkError\n\n\ndef open_port(identity, username, eventcomment=\"\"):\n    \"\"\"\n    Takes as input the identityid of the block and username. Opens the\n    port (either enable or change vlan) and updates the database.\n\n    If port is not found in the database we assume that the\n    switch/module has been replaced. As this normally means that the\n    port is enabled, we enable the port in the arnold-database.\n\n    \"\"\"\n\n    try:\n        identity.interface\n    except Interface.DoesNotExist:\n        _logger.info(\"Interface did not exist, enabling in database only\")\n    else:\n        _logger.info(\n            \"Trying to lift detention for %s on %s\", identity.mac, identity.interface\n        )\n        if identity.status == 'disabled':\n            change_port_status('enable', identity)\n        elif identity.status == 'quarantined':\n            change_port_vlan(identity, identity.fromvlan)\n\n    identity.status = 'enabled'\n    identity.last_changed = datetime.now()\n    identity.fromvlan = None\n    identity.tovlan = None\n    identity.autoenable = None\n    identity.save()\n\n    event = Event(\n        identity=identity, comment=eventcomment, action='enabled', executor=username\n    )\n    event.save()\n\n    _logger.info(\"openPort: Port successfully opened\")\n\n\ndef change_port_status(\n    action,\n    identity,\n    agent_getter: Callable = get_snmp_session_for_profile,\n):\n    \"\"\"Use SNMP to change status on an interface.\n\n    We use ifadminstatus to enable and disable ports\n    ifAdminStatus has the following values:\n    1 - up\n    2 - down\n    3 - testing (no operational packets can be passed)\n\n    \"\"\"\n    oid = '.1.3.6.1.2.1.2.2.1.7'\n    ifindex = identity.interface.ifindex\n    query = oid + '.' + str(ifindex)\n\n    # Create snmp-object\n    netbox = identity.interface.netbox\n    profile = netbox.get_preferred_snmp_management_profile(require_write=True)\n\n    if not profile:\n        raise NoReadWriteManagementProfileError(\n            \"%s has no read-write management profile\" % netbox\n        )\n\n    agent = agent_getter(profile)(host=netbox.ip)\n\n    # Disable or enable based on input\n    try:\n        if action == 'disable':\n            agent.set(query, 'i', 2)\n            _logger.info(\n                'Setting ifadminstatus down on interface %s', identity.interface\n            )\n        elif action == 'enable':\n            agent.set(query, 'i', 1)\n            _logger.info('Setting ifadminstatus up on interface %s', identity.interface)\n    except AgentError as why:\n        _logger.error(\"Error when executing snmpquery: %s\", why)\n        raise ChangePortStatusError(why)\n\n\ndef change_port_vlan(identity, vlan):\n    \"\"\"\n    Change switchport access vlan. Returns vlan on port before change.\n\n    Reasons for not successful change may be:\n    - Wrong community, use rw-community\n    - rw-community not set on netbox\n    - port is a trunk\n\n    \"\"\"\n    interface = identity.interface\n    netbox = interface.netbox\n\n    agent = ManagementFactory().get_instance(netbox)\n    try:\n        fromvlan = agent.get_interface_native_vlan(interface)\n    except Exception as error:  # noqa: BLE001\n        raise ChangePortVlanError(error)\n    else:\n        _logger.info('Setting vlan %s on interface %s', vlan, interface)\n        try:\n            agent.set_vlan(interface, vlan)\n            agent.cycle_interfaces([interface])\n        except Exception as error:  # noqa: BLE001\n            raise ChangePortVlanError(error)\n        else:\n            return fromvlan\n\n\ndef sendmail(from_email, toaddr, subject, msg):\n    \"\"\"Sends mail using Djangos internal mail system\"\"\"\n\n    try:\n        email = EmailMessage(subject, msg, from_email=from_email, to=[toaddr])\n        email.send()\n    except (SMTPException, socket.error) as error:\n        _logger.error('Failed to send mail to %s: %s', toaddr, error)\n\n\ndef get_host_name(ip):\n    \"\"\"Get hostname based on ip-address. Return 'N/A' if not found.\"\"\"\n    hostname = \"N/A\"\n\n    try:\n        hostname = socket.gethostbyaddr(ip)[0]\n    except socket.herror:\n        pass\n\n    return hostname\n\n\ndef get_netbios(ip):\n    \"\"\"Get netbiosname of computer with ip\"\"\"\n\n    netbios_dump = scan([ip], verbose=True)\n    if not netbios_dump:\n        return \"\"\n\n    parsed_results = parse_get_workstations(netbios_dump)\n    return parsed_results.get(ip, \"\")\n\n\ndef check_non_block(ip):\n    \"\"\"Checks if the ip is in the nonblocklist.\"\"\"\n    nonblockdict = parse_nonblock_file(find_config_file(NONBLOCKFILE))\n\n    # We have the result of the nonblock.cfg-file in the dict\n    # nonblockdict. This dict contains 3 things:\n    # 1 - Specific ip-addresses\n    # 2 - Ip-ranges (129.241.xxx.xxx/xx)\n    # 3 - Ip lists (129.241.xxx.xxx-xxx)\n\n    # Specific ip-addresses\n    if ip in nonblockdict['ip']:\n        _logger.info('Computer in nonblock list, skipping')\n        raise InExceptionListError\n\n    # Ip-ranges\n    for ip_range in nonblockdict['range']:\n        if ip in IP(ip_range):\n            raise InExceptionListError\n\n\ndef compute_octet_string(hexstring, port, action='enable'):\n    \"\"\"\n    hexstring: the returnvalue of the snmpquery\n    port: the number of the port to add\n    \"\"\"\n\n    bit = nav.bitvector.BitVector(hexstring)\n\n    # Add port to string\n    port -= 1\n    if action == 'enable':\n        bit[port] = 1\n    else:\n        bit[port] = 0\n\n    return bit.to_bytes()\n\n\n@Memo\ndef parse_nonblock_file(filename):\n    \"\"\"Parse nonblocklist and make it ready for use.\"\"\"\n\n    nonblockdict = {'ip': {}, 'range': {}}\n\n    # Open nonblocklist, parse it.\n    try:\n        handle = open(filename)\n    except IOError as why:\n        raise FileError(why)\n\n    for line in handle.readlines():\n        line = line.strip()\n\n        # Skip comments\n        if line.startswith('#'):\n            continue\n\n        if re.search(r'^\\d+\\.\\d+\\.\\d+\\.\\d+$', line):\n            # Single ip-address\n            nonblockdict['ip'][line] = 1\n        elif re.search(r'^\\d+\\.\\d+\\.\\d+\\.\\d+\\/\\d+$', line):\n            # Range\n            nonblockdict['range'][line] = 1\n\n    handle.close()\n\n    return nonblockdict\n\n\n@Memo\ndef get_config(configfile):\n    \"\"\"Get config from file\"\"\"\n    config = configparser.ConfigParser()\n    config.read(configfile)\n    return config\n\n\ndef is_inside_vlans(ip, vlans):\n    \"\"\"Check if ip is inside the vlans\n\n    vlans: a string with comma-separated vlans.\n\n    \"\"\"\n    vlans = [x.strip() for x in vlans.split(',')]\n\n    # For each vlan, check if it is inside the prefix of the vlan.\n    for vlan in vlans:\n        if vlan.isdigit() and is_valid_ip(ip):\n            if Prefix.objects.filter(vlan__vlan=vlan).extra(\n                where=['%s << netaddr'], params=[ip]\n            ):\n                return True\n    return False\n"
  },
  {
    "path": "python/nav/asyncdns.py",
    "content": "#\n# Copyright (C) 2008-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Asynchronous DNS resolver for lookups on both IPv4 and IPv6.\n\nThe API is designed for use in synchronous programs and uses Twisted in\nperverted ways to accomplish the behind-the-curtain asynchronous work.\n\nWe would rather have used adns, but the available versions have poor IPv6\nsupport.\n\n\"\"\"\n\nimport socket\nfrom itertools import cycle\nfrom collections import defaultdict\n\nfrom IPy import IP\nfrom twisted.names import dns\nfrom twisted.names import client\nfrom twisted.internet import defer, task\n\nfrom twisted.internet import reactor\n\nfrom twisted.names.error import DNSUnknownError\nfrom twisted.names.error import DomainError, AuthoritativeDomainError\nfrom twisted.names.error import DNSQueryTimeoutError, DNSFormatError\nfrom twisted.names.error import DNSServerError, DNSNameError\nfrom twisted.names.error import DNSNotImplementedError, DNSQueryRefusedError\n\n__all__ = [\n    \"reverse_lookup\",\n    \"forward_lookup\",\n    \"Resolver\",\n    \"ForwardResolver\",\n    \"ReverseResolver\",\n    \"DNSUnknownError\",\n    \"DomainError\",\n    \"AuthoritativeDomainError\",\n    \"DNSQueryTimeoutError\",\n    \"DNSFormatError\",\n    \"DNSServerError\",\n    \"DNSNameError\",\n    \"DNSNotImplementedError\",\n    \"DNSQueryRefusedError\",\n]\n\n\nBATCH_SIZE = 100\n\n\ndef reverse_lookup(addresses):\n    \"\"\"Runs parallel reverse DNS lookups for addresses.\n\n    :returns: A dict of {address: [name, ...]} items\n\n    \"\"\"\n    resolver = ReverseResolver()\n    return resolver.resolve(addresses)\n\n\ndef forward_lookup(names):\n    \"\"\"Runs parallel forward DNS lookups for names.\n\n    :returns: A dict of {name: [address, ...]} items\n\n    \"\"\"\n    resolver = ForwardResolver()\n    return resolver.resolve(names)\n\n\nclass Resolver(object):\n    \"\"\"Abstract base class for resolvers\"\"\"\n\n    def __init__(self):\n        self._resolvers = cycle(\n            [client.Resolver(\"/etc/resolv.conf\") for _i in range(3)]\n        )\n        self.results = defaultdict(list)\n        self._finished = False\n        self._errors = []\n\n    def resolve(self, names):\n        \"\"\"Resolves DNS names in parallel\"\"\"\n        self.results = defaultdict(list)\n        self._finished = False\n        self._errors = []\n\n        def lookup_names():\n            for name in names:\n                for deferred in self.lookup(name):\n                    deferred.addCallback(self._extract_records, name)\n                    deferred.addErrback(self._errback, name)\n                    deferred.addCallback(self._save_result)\n                    yield deferred\n\n        # Limits the number of parallel requests to BATCH_SIZE\n        coop = task.Cooperator()\n        work = lookup_names()\n        deferred_list = defer.DeferredList(\n            [\n                coop.coiterate(work).addErrback(self._save_error)\n                for _ in range(BATCH_SIZE)\n            ]\n        )\n        deferred_list.addCallback(self._finish)\n\n        while not self._finished:\n            reactor.iterate()\n        # Although the results are in at this point, we may need an extra\n        # iteration to ensure the resolver library closes its UDP sockets\n        reactor.iterate()\n\n        # raise first error if any occurred\n        for error in self._errors:\n            raise error\n\n        return dict(self.results)\n\n    def lookup(self, name):\n        \"\"\"Initiates possibly multiple asynchronous DNS lookups for a name\"\"\"\n        raise NotImplementedError\n\n    @staticmethod\n    def _extract_records(result, name):\n        raise NotImplementedError\n\n    def _save_result(self, result):\n        name, response = result\n        if isinstance(response, Exception):\n            self.results[name] = response\n        else:\n            self.results[name].extend(response)\n\n    @staticmethod\n    def _errback(failure, host):\n        \"\"\"Errback\"\"\"\n        return host, failure.value\n\n    def _save_error(self, failure):\n        \"\"\"Errback for coiterator. Saves error so it can be raised later\"\"\"\n        self._errors.append(failure.value)\n\n    def _finish(self, _):\n        self._finished = True\n\n\nclass ForwardResolver(Resolver):\n    \"\"\"A forward resolver implementation for A and AAAA record lookups.\n\n    NOTE: It will not lookup and follow CNAME records.\n\n    \"\"\"\n\n    def lookup(self, name):\n        \"\"\"Returns a deferred object with all records related to hostname\"\"\"\n\n        if isinstance(name, str):\n            name = name.encode(\"idna\")\n\n        resolver = next(self._resolvers)\n        return [resolver.lookupAddress(name), resolver.lookupIPV6Address(name)]\n\n    @staticmethod\n    def _extract_records(result, name):\n        \"\"\"Callback for A and AAAA records\"\"\"\n        address_list = []\n\n        for record_list in result:\n            for record in record_list:\n                if str(record.name).lower() == name.lower():\n                    if record.type == dns.A:\n                        address_list.append(\n                            socket.inet_ntop(socket.AF_INET, record.payload.address)\n                        )\n                    elif record.type == dns.AAAA:\n                        address_list.append(\n                            socket.inet_ntop(socket.AF_INET6, record.payload.address)\n                        )\n        return name, address_list\n\n\nclass ReverseResolver(Resolver):\n    \"\"\"Reverse resolver implementation for PTR record lookups\"\"\"\n\n    def lookup(self, address):\n        \"\"\"Returns a deferred object which tries to get the hostname from ip\"\"\"\n        resolver = next(self._resolvers)\n        ip = IP(address)\n        return [resolver.lookupPointer(ip.reverseName())]\n\n    @staticmethod\n    def _extract_records(result, ip):\n        \"\"\"Callback for PTR records\"\"\"\n        name_list = []\n\n        for record_list in result:\n            for record in record_list:\n                if record.type == dns.PTR:\n                    name_list.append(str(record.payload.name))\n\n        return ip, name_list\n"
  },
  {
    "path": "python/nav/auditlog/__init__.py",
    "content": "# coding: utf-8\n#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\ndef find_modelname(obj):\n    return obj._meta.db_table\n"
  },
  {
    "path": "python/nav/auditlog/api.py",
    "content": "# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\nfrom django.db.models import Q\n\nfrom django_filters.rest_framework import DjangoFilterBackend\n\nfrom rest_framework import filters, serializers, viewsets\nfrom rest_framework.response import Response\n\nfrom nav.models.fields import LegacyGenericForeignKey\nfrom nav.web.api.v1.views import NAVAPIMixin\n\nfrom nav.models.manage import Interface\n\nfrom .models import LogEntry\n\nENTITY_FIELDS = (\n    ('actor_model', 'actor_pk'),\n    ('object_model', 'object_pk'),\n    ('target_model', 'target_pk'),\n)\n\n\nclass LGFKRelatedField(serializers.RelatedField):\n    \"\"\"\n    Custom field for any LegacyGenericForeignKey\n    \"\"\"\n\n    def to_representation(self, value):\n        return str(value)\n\n\ndef _collect_entity_references(entries):\n    \"\"\"Collect all (model_name, pk) pairs from a page of log entries,\n    grouped by model name for batch fetching.\"\"\"\n    lookups = {}\n    for entry in entries:\n        for model_field, pk_field in ENTITY_FIELDS:\n            model_name = getattr(entry, model_field)\n            pk = getattr(entry, pk_field)\n            if model_name and pk:\n                lookups.setdefault(model_name, set()).add(pk)\n    return lookups\n\n\ndef _batch_resolve_objects(entries):\n    \"\"\"Batch-resolve referenced objects for a page of log entries.\n\n    Returns a dict of (model_name, pk) -> {'name': str, 'url': str|None}\n    with one query per distinct model type instead of one per entity.\n    \"\"\"\n    references = _collect_entity_references(entries)\n    resolved = {}\n    for model_name, pks in references.items():\n        rel_model = LegacyGenericForeignKey.get_model_class(model_name)\n        if not rel_model:\n            continue\n        try:\n            for obj in rel_model.objects.filter(id__in=pks):\n                url = getattr(obj, 'get_absolute_url', lambda: None)()\n                resolved[(model_name, str(obj.pk))] = {\n                    'name': str(obj),\n                    'url': url,\n                }\n        except (TypeError, ValueError):\n            pass\n\n    return resolved\n\n\ndef _resolve_entity(log_entry, model_field, pk_field, sortkey_field, object_cache):\n    \"\"\"Resolve a LGFK entity to {name, url}.\n\n    Prefers the live object name from the object_cache (built by\n    _batch_resolve_objects), falling back to the stored sortkey for deleted\n    objects, and finally to a raw \"model (pk)\" label.\n    \"\"\"\n    model_name = getattr(log_entry, model_field)\n    pk = getattr(log_entry, pk_field)\n\n    if not model_name or not pk:\n        return None\n\n    sortkey = getattr(log_entry, sortkey_field)\n    cached = object_cache.get((model_name, pk))\n\n    if cached:\n        name = cached['name']\n    elif sortkey:\n        name = sortkey\n    else:\n        name = '{} ({})'.format(model_name, pk)\n    url = cached['url'] if cached else None\n\n    return {'name': name, 'url': url}\n\n\nclass LogEntrySerializer(serializers.ModelSerializer):\n    \"\"\"V1 serializer - returns plain strings for backward compatibility\"\"\"\n\n    actor = LGFKRelatedField(read_only=True)\n    object = LGFKRelatedField(read_only=True)\n    target = LGFKRelatedField(read_only=True)\n\n    class Meta:\n        model = LogEntry\n        fields = [\n            'timestamp',\n            'subsystem',\n            'actor',\n            'verb',\n            'object',\n            'target',\n            'summary',\n            'before',\n            'after',\n        ]\n        read_only_fields = ['timestamp']\n\n\nclass LogEntrySerializerV2(serializers.ModelSerializer):\n    \"\"\"V2 serializer - returns objects with {name, url} for entity linking\"\"\"\n\n    actor = serializers.SerializerMethodField()\n    object = serializers.SerializerMethodField()\n    target = serializers.SerializerMethodField()\n\n    class Meta:\n        model = LogEntry\n        fields = [\n            'timestamp',\n            'subsystem',\n            'actor',\n            'verb',\n            'object',\n            'target',\n            'summary',\n            'before',\n            'after',\n        ]\n        read_only_fields = ['timestamp']\n\n    @property\n    def _object_cache(self):\n        return self.context.get('object_cache', {})\n\n    def get_actor(self, obj):\n        return _resolve_entity(\n            obj, 'actor_model', 'actor_pk', 'actor_sortkey', self._object_cache\n        )\n\n    def get_object(self, obj):\n        return _resolve_entity(\n            obj, 'object_model', 'object_pk', 'object_sortkey', self._object_cache\n        )\n\n    def get_target(self, obj):\n        return _resolve_entity(\n            obj, 'target_model', 'target_pk', 'target_sortkey', self._object_cache\n        )\n\n\nclass MultipleFilter(filters.BaseFilterBackend):\n    \"\"\"Allows filtering on multiples\n\n    object_pks: comma-separated list of pks to filter on\n    object_model: supports multiple object_models\n    \"\"\"\n\n    def filter_queryset(self, request, queryset, view):\n        if 'object_pks' in request.query_params:\n            ids = request.query_params.get('object_pks').split(',')\n            queryset = queryset.filter(object_pk__in=ids)\n        if 'object_model' in request.query_params:\n            queryset = queryset.filter(\n                object_model__in=request.query_params.getlist('object_model')\n            )\n        return queryset\n\n\nclass NetboxFilter(filters.BaseFilterBackend):\n    \"\"\"Filters all log entries for a netbox\n\n    This includes all entries where the object_model is 'netbox' and all\n    entries where the object_model is 'interface' and the netbox of the\n    interface is this netbox\n    \"\"\"\n\n    def filter_queryset(self, request, queryset, view):\n        if 'netboxid' in request.query_params:\n            netboxid = request.query_params.get('netboxid')\n            interface_pks = [\n                str(pk)\n                for pk in Interface.objects.filter(netbox__pk=netboxid).values_list(\n                    'pk', flat=True\n                )\n            ]\n\n            is_netbox = Q(object_model='netbox', object_pk=netboxid)\n            is_netbox_interface = Q(\n                object_model='interface', object_pk__in=interface_pks\n            )\n            queryset = queryset.filter(is_netbox | is_netbox_interface)\n\n        return queryset\n\n\nclass NAVDefaultsMixin(object):\n    \"\"\"Applies default NAV API authentication, permissions, and rendering.\"\"\"\n\n    authentication_classes = NAVAPIMixin.authentication_classes\n    permission_classes = NAVAPIMixin.permission_classes\n    renderer_classes = NAVAPIMixin.renderer_classes\n    filter_backends = NAVAPIMixin.filter_backends\n\n\nclass LogEntryViewSet(NAVDefaultsMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"V1 API endpoint - returns plain strings for backward compatibility.\n\n    Logentries are created behind the scenes by the subsystems themselves.\"\"\"\n\n    filter_backends = (\n        filters.SearchFilter,\n        DjangoFilterBackend,\n        filters.OrderingFilter,\n        MultipleFilter,\n        NetboxFilter,\n    )\n    queryset = LogEntry.objects.all()\n    serializer_class = LogEntrySerializer\n    filterset_fields = ('subsystem', 'object_pk', 'verb')\n    search_fields = ('summary', 'actor_sortkey', 'object_sortkey', 'target_sortkey')\n    ordering = ('timestamp',)\n    ordering_fields = (\n        'timestamp',\n        'actor_sortkey',\n        'verb',\n        'object_sortkey',\n        'target_sortkey',\n    )\n\n\nclass LogEntryViewSetV2(NAVDefaultsMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"V2 API endpoint - returns objects with {name, url} for entity linking.\n\n    Logentries are created behind the scenes by the subsystems themselves.\"\"\"\n\n    filter_backends = (\n        filters.SearchFilter,\n        DjangoFilterBackend,\n        filters.OrderingFilter,\n        MultipleFilter,\n        NetboxFilter,\n    )\n    queryset = LogEntry.objects.all()\n    serializer_class = LogEntrySerializerV2\n    filterset_fields = ('subsystem', 'object_pk', 'verb')\n    search_fields = ('summary', 'actor_sortkey', 'object_sortkey', 'target_sortkey')\n    ordering = ('timestamp',)\n    ordering_fields = (\n        'timestamp',\n        'actor_sortkey',\n        'verb',\n        'object_sortkey',\n        'target_sortkey',\n    )\n\n    def list(self, request, *args, **kwargs):\n        queryset = self.filter_queryset(self.get_queryset())\n        page = self.paginate_queryset(queryset)\n        entries = page if page is not None else list(queryset)\n        object_cache = _batch_resolve_objects(entries)\n        context = {**self.get_serializer_context(), 'object_cache': object_cache}\n        serializer = self.get_serializer(entries, many=True, context=context)\n        if page is not None:\n            return self.get_paginated_response(serializer.data)\n        return Response(serializer.data)\n\n    def retrieve(self, request, *args, **kwargs):\n        instance = self.get_object()\n        object_cache = _batch_resolve_objects([instance])\n        context = {**self.get_serializer_context(), 'object_cache': object_cache}\n        serializer = self.get_serializer(instance, context=context)\n        return Response(serializer.data)\n"
  },
  {
    "path": "python/nav/auditlog/apps.py",
    "content": "# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\nfrom django.apps import AppConfig\n\n\nclass AuditlogConfig(AppConfig):\n    name = 'nav.auditlog'\n    verbose_name = 'NAV Auditlog'\n"
  },
  {
    "path": "python/nav/auditlog/models.py",
    "content": "# coding: utf-8\n\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\nimport logging\nfrom django.utils.encoding import force_str\n\nfrom django.db import models\nfrom django.utils.timezone import now as utcnow\n\nfrom nav.models.fields import VarcharField, LegacyGenericForeignKey\n\nfrom . import find_modelname\n\n_logger = logging.getLogger(__name__)\n\n\nclass LogEntry(models.Model):\n    \"\"\"\n    Logs mostly user actions in NAV\n\n    Example logentry:\n    LogEntry.add_log_entry(\n        account,           # actor\n        u'set-ifalias',    # verb\n        u'{actor}: {object} - ifalias set to \"%s\"' % ifalias,  # template\n        subsystem=u'portadmin',                                # optional\n        object=interface,                                      # optional\n    )\n    \"\"\"\n\n    actor_model = VarcharField()\n    actor_pk = VarcharField()\n    actor = LegacyGenericForeignKey('actor_model', 'actor_pk')\n\n    object_model = VarcharField(null=True)\n    object_pk = VarcharField(null=True)\n    object = LegacyGenericForeignKey('object_model', 'object_pk')\n\n    target_model = VarcharField(null=True)\n    target_pk = VarcharField(null=True)\n    target = LegacyGenericForeignKey('target_model', 'target_pk')\n\n    actor_sortkey = VarcharField(null=True)\n    object_sortkey = VarcharField(null=True)\n    target_sortkey = VarcharField(null=True)\n\n    timestamp = models.DateTimeField()\n\n    verb = models.SlugField()\n\n    summary = models.TextField()\n\n    subsystem = VarcharField(blank=True, null=True)\n\n    before = models.TextField(blank=True, null=True)\n    after = models.TextField(blank=True, null=True)\n\n    @classmethod\n    def add_log_entry(\n        cls,\n        actor,\n        verb,\n        template,\n        subsystem=None,\n        object=None,\n        target=None,\n        before=None,\n        after=None,\n    ):\n        \"\"\"LogEntry factory\"\"\"\n        self = cls()\n        names = {'actor': actor, 'object': object, 'target': target}\n        for k, v in names.items():\n            names[k] = getattr(v, 'audit_logname', str(v)) if v is not None else ''\n        try:\n            self.summary = template.format(**names)\n        except KeyError as error:\n            self.summary = 'Error creating summary - see error log'\n            _logger.error('KeyError when creating summary: %s', error)\n        self.verb = verb\n        self.actor_model = find_modelname(actor)\n        self.object_model = find_modelname(object) if object else None\n        self.target_model = find_modelname(target) if target else None\n        self.actor_pk = actor.pk\n        self.object_pk = object.pk if object else None\n        self.target_pk = target.pk if target else None\n        self.actor_sortkey = names['actor']\n        self.object_sortkey = names['object'] if object else None\n        self.target_sortkey = names['target'] if target else None\n        self.timestamp = utcnow()\n        self.subsystem = subsystem if subsystem else None\n        self.before = force_str(before)\n        self.after = force_str(after)\n        self.save()\n        return self\n\n    @staticmethod\n    def add_create_entry(actor, obj):\n        \"\"\"Add log entry for created objects\n\n        :type actor: nav.models.profiles.Account\n        \"\"\"\n        model = obj.__class__.__name__.lower()\n        LogEntry.add_log_entry(\n            actor,\n            'create-{}'.format(model),\n            '{actor} created {object}',\n            after=obj,\n            object=obj,\n        )\n\n    @staticmethod\n    def add_delete_entry(actor, obj, template=None):\n        \"\"\"Add log entry for deleted objects\"\"\"\n        model = obj.__class__.__name__.lower()\n        template = template or '{actor} deleted {object}'\n        LogEntry.add_log_entry(\n            actor, 'delete-{}'.format(model), template, before=obj, object=obj\n        )\n\n    @staticmethod\n    def add_edit_entry(actor, old, new, attribute, include_values=True):\n        \"\"\"Add log entry for edited objects\n\n        :type attribute: str\n        \"\"\"\n\n        def dict_to_string(d):\n            \"\"\"\n            {\"a\": \"b\", \"c\": \"d\"} => \"a=b, c=d\"\n            \"\"\"\n            return \", \".join(\"{}={}\".format(x, y) for x, y in d.items())\n\n        model = new.__class__.__name__.lower()\n        prefix = '{actor} edited {object}'\n        old_value = getattr(old, attribute)\n        new_value = getattr(new, attribute)\n        if include_values:\n            # Dicts fucks up the template, try to intervene\n            if isinstance(old_value, dict):\n                old_value = dict_to_string(old_value)\n            if isinstance(new_value, dict):\n                new_value = dict_to_string(new_value)\n            summary = \"{} changed from '{}' to '{}'\".format(\n                attribute, old_value, new_value\n            )\n        else:\n            summary = \"{} changed\".format(attribute)\n\n        LogEntry.add_log_entry(\n            actor,\n            'edit-{}-{}'.format(model, attribute),\n            '{}: {}'.format(prefix, summary),\n            before=old,\n            after=new,\n            object=new,\n        )\n\n    @staticmethod\n    def compare_objects(actor, old, new, attribute_list, censored_attributes=None):\n        \"\"\"Checks for differences in two objects given an attribute-list\n\n        :type actor: nav.models.profiles.Account\n        :type old: models.Model\n        :type new: models.Model\n        :type attribute_list: list[str]\n\n        Adds a log entry for each attribute where the two objects differ.\n        \"\"\"\n        if censored_attributes is None:\n            censored_attributes = []\n\n        for attribute in attribute_list:\n            old_value = getattr(old, attribute)\n            new_value = getattr(new, attribute)\n            if old_value != new_value:\n                include_values = attribute not in censored_attributes\n                LogEntry.add_edit_entry(\n                    actor, old, new, attribute, include_values=include_values\n                )\n\n    def __str__(self):\n        return self.summary\n"
  },
  {
    "path": "python/nav/auditlog/urls.py",
    "content": "# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\nfrom django.urls import path\n\nfrom .views import AuditlogOverview, AuditlogNetboxDetail\n\n\nurlpatterns = [\n    path('', AuditlogOverview.as_view(), name='auditlog-home'),\n    path(\n        'netbox/<int:netboxid>',\n        AuditlogNetboxDetail.as_view(),\n        name='auditlog-netbox-detail',\n    ),\n]\n"
  },
  {
    "path": "python/nav/auditlog/utils.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.utils.encoding import force_str\nfrom django.db.models import Q\n\nfrom . import find_modelname\nfrom .models import LogEntry\n\nLATEST_N_AUDITLOG_ENTRIES = 15\n\n\ndef get_auditlog_entries(\n    modelname=None,\n    queryset=None,\n    pks=None,\n    limit=LATEST_N_AUDITLOG_ENTRIES,\n    subsystem=None,\n):\n    \"\"\"Get up to <limit> entries involving <modelname>\n\n    Limit results to <pks>, <queryset> and/or <subsystem>\n    \"\"\"\n    assert modelname or queryset, (\n        \"At least one of <modelname> or <queryset> must be given\"\n    )\n    if pks is None:\n        pks = []\n    if queryset is not None and queryset.exists():\n        qs_pks = set(force_str(o.pk) for o in queryset)\n        if qs_pks:\n            if pks:\n                pks = qs_pks.intersection(pks)\n            else:\n                pks = qs_pks\n        if modelname is None:\n            modelname = find_modelname(queryset[0])\n    object_query = Q(object_model=modelname)\n    target_query = Q(target_model=modelname)\n    actor_query = Q(actor_model=modelname)\n    filter_query = object_query | target_query | actor_query\n    qs = LogEntry.objects.filter(filter_query)\n    if pks:\n        object_query = Q(object_pk__in=pks)\n        target_query = Q(target_pk__in=pks)\n        actor_query = Q(actor_pk__in=pks)\n        filter_query = object_query | target_query | actor_query\n        qs = qs.filter(filter_query)\n    if subsystem:\n        qs = qs.filter(subsystem=subsystem)\n    entries = qs.distinct().order_by('-timestamp')[:limit]\n    return entries\n"
  },
  {
    "path": "python/nav/auditlog/views.py",
    "content": "# coding: utf-8\n\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\nimport json\n\nfrom django.shortcuts import get_object_or_404\nfrom django.views.generic import TemplateView\n\nfrom nav.models.manage import Netbox\nfrom nav.web.utils import create_title, get_navpath_root\n\nfrom .models import LogEntry\n\n\nclass AuditlogOverview(TemplateView):\n    model = LogEntry\n    template_name = 'auditlog/overview.html'\n\n    def get_context_data(self, **kwargs):\n        verbs = list(\n            LogEntry.objects.order_by().values_list('verb', flat=True).distinct()\n        )\n        verbs.sort()\n        navpath = (get_navpath_root(), ('Audit Log',))\n        context = {\n            'auditlog_verbs': verbs,\n            'navpath': navpath,\n            'title': create_title(navpath),\n        }\n        context.update(**kwargs)\n        return super(AuditlogOverview, self).get_context_data(**context)\n\n\nclass AuditlogNetboxDetail(AuditlogOverview):\n    \"\"\"Displays all log entries for a netbox\"\"\"\n\n    def get_context_data(self, **kwargs):\n        context = super(AuditlogNetboxDetail, self).get_context_data(**kwargs)\n        context.update(\n            {\n                'auditlog_api_parameters': self.get_api_parameters(),\n                'netbox': get_object_or_404(Netbox, pk=self.kwargs.get('netboxid')),\n            }\n        )\n        return context\n\n    def get_api_parameters(self):\n        \"\"\"Creates api parameters\"\"\"\n        api_parameters = {}\n        netboxid = self.kwargs.get('netboxid')\n        if netboxid:\n            api_parameters = {'netboxid': netboxid}\n        return json.dumps(api_parameters)\n"
  },
  {
    "path": "python/nav/bin/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/bin/alertengine.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: --test -*-\n#\n# Copyright (C) 2007, 2008, 2011, 2013, 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThe NAV Alert Engine daemon (alertengine)\n\nThis background process polls the alert queue for new alerts from the\neventengine and sends put alerts to users based on user defined profiles.\n\"\"\"\n\n\n# FIXME missing detailed usage\n\nimport argparse\nimport logging\nimport logging.handlers\nimport os\nimport os.path\nimport signal\nimport socket\nimport sys\nimport time\nfrom psycopg2 import InterfaceError\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nimport nav.buildconf\nimport nav.config\nimport nav.daemon\nimport nav.logs\nimport nav.buildconf\nimport nav.db\n\n\n# These have to be imported after the envrionment is setup\nfrom django.db import DatabaseError, connection\nfrom nav.alertengine.base import check_alerts, clear_blacklisted_status_of_alert_senders\nfrom nav.config import NAV_CONFIG\n\n#\n#  PATHS\n#\nconfigfile = 'alertengine.conf'\nlogfile = os.path.join(NAV_CONFIG['LOG_DIR'], 'alertengine.log')\npidfile = 'alertengine.pid'\n\n_logger = logging.getLogger('nav.alertengine')\n\n#\n# MAIN FUNCTION\n#\n\n\ndef main():\n    args = parse_args()\n\n    # Set config defaults\n    defaults = {\n        'username': nav.config.NAV_CONFIG['NAV_USER'],\n        'delay': '30',\n        'mailwarnlevel': 'ERROR',\n        'mailserver': 'localhost',\n        'mailaddr': nav.config.NAV_CONFIG['ADMIN_MAIL'],\n        'fromaddr': nav.config.NAV_CONFIG['DEFAULT_FROM_EMAIL'],\n    }\n\n    # Read config file\n    config = nav.config.getconfig(configfile, defaults)\n\n    # Set variables based on config\n    username = config['main']['username']\n    delay = int(config['main']['delay'])\n    mailwarnlevel = config['main']['mailwarnlevel']\n    if mailwarnlevel.isdigit():\n        mailwarnlevel = int(mailwarnlevel)\n    else:\n        mailwarnlevel = getattr(logging, mailwarnlevel)\n    mailserver = config['main']['mailserver']\n    mailaddr = config['main']['mailaddr']\n    fromaddr = config['main']['fromaddr']\n\n    # Switch user to $NAV_USER (navcron) (only works if we're root)\n    if os.geteuid() == 0 and not args.test:\n        try:\n            nav.daemon.switchuser(username)\n        except nav.daemon.DaemonError as err:\n            print(err, file=sys.stderr)\n            print(\n                \"Run as root or %s. Try `%s --help' for more information.\"\n                % (username, sys.argv[0]),\n                file=sys.stderr,\n            )\n            sys.exit(1)\n\n    # Initialize logger\n    nav.logs.init_stderr_logging()\n\n    # Init SMTP logging of grave errors\n    if not loginitsmtp(mailwarnlevel, mailaddr, fromaddr, mailserver):\n        sys.exit(1)\n\n    # Check if already running\n    try:\n        nav.daemon.justme(pidfile)\n    except nav.daemon.DaemonError as error:\n        _logger.error(error)\n        sys.exit(1)\n\n    # Daemonize\n    if not args.test and not args.foreground:\n        try:\n            nav.daemon.daemonize(pidfile, stderr=open(logfile, \"a\"))\n        except nav.daemon.DaemonError as error:\n            _logger.error(error)\n            sys.exit(1)\n\n        # Reopen log files on SIGHUP\n        signal.signal(signal.SIGHUP, signalhandler)\n    else:\n        nav.daemon.writepidfile(pidfile)\n\n    # Log reception of SIGTERM/SIGINT before quitting\n    signal.signal(signal.SIGTERM, signalhandler)\n    signal.signal(signal.SIGINT, signalhandler)\n\n    clear_blacklisted_status_of_alert_senders()\n\n    # Loop forever\n    _logger.info('Starting alertengine loop.')\n    while True:\n        try:\n            check_alerts(debug=args.test)\n            # nav.db connections are currently not in autocommit mode, and\n            # since the current auth code uses legacy db connections we need to\n            # be sure that we end all and any transactions so that we don't\n            # idle.\n            nav.db.commit_all_connections()\n\n        except DatabaseError as err:\n            _logger.error(\n                'Database error, closing the DB connection just in case:\\n%s', err\n            )\n            _logger.debug('', exc_info=True)\n            if connection.queries:\n                _logger.debug(connection.queries[-1]['sql'])\n            try:\n                connection.close()\n            except InterfaceError:\n                connection.connection = None\n\n        except Exception as err:  # noqa: BLE001\n            _logger.critical('Unhandled error: %s', err, exc_info=True)\n            sys.exit(1)\n\n        # Devel only\n        if args.test:\n            break\n        else:\n            # Sleep a bit before the next run\n            _logger.debug('Sleeping for %d seconds.', delay)\n            time.sleep(delay)\n\n    # Exit nicely\n    sys.exit(0)\n\n\n#\n# HELPER FUNCTIONS\n#\n\n\ndef parse_args():\n    \"\"\"Parses command line arguments using argparse\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"The NAV Alert Engine daemon\",\n        epilog=\"This background process polls the alert queue for new alerts \"\n        \"from the event engine and sends notifications to users based \"\n        \"on user defined profiles.\",\n    )\n    parser.add_argument(\n        \"-t\",\n        \"--test\",\n        action=\"store_true\",\n        help=\"process the alert queue once and exit\",\n    )\n    parser.add_argument(\n        \"-f\", \"--foreground\", action=\"store_true\", help=\"run in the foreground\"\n    )\n\n    return parser.parse_args()\n\n\ndef signalhandler(signum, _):\n    \"\"\"Signal handler to close and reopen log file(s) on HUP and exit on TERM\"\"\"\n\n    if signum == signal.SIGHUP:\n        _logger.info('SIGHUP received; reopening log files.')\n        nav.logs.reopen_log_files()\n        nav.daemon.redirect_std_fds(stderr=open(logfile, \"a\"))\n        nav.logs.reset_log_levels()\n        nav.logs.set_log_config()\n        _logger.info('Log files reopened.')\n    elif signum == signal.SIGTERM:\n        _logger.warning('SIGTERM received: Shutting down')\n        sys.exit(0)\n    elif signum == signal.SIGINT:\n        _logger.warning('SIGINT received: Shutting down')\n        sys.exit(0)\n\n\ndef loginitsmtp(loglevel, mailaddr, fromaddr, mailserver):\n    \"\"\"Initalize the logging handler for SMTP.\"\"\"\n\n    try:\n        hostname = socket.gethostname()\n        mailhandler = logging.handlers.SMTPHandler(\n            mailserver, fromaddr, mailaddr, 'NAV alertengine warning from ' + hostname\n        )\n        mailformat = (\n            '[%(asctime)s] [%(levelname)s] [pid=%(process)d %(name)s] %(message)s'\n        )\n        mailformatter = logging.Formatter(mailformat)\n        mailhandler.setFormatter(mailformatter)\n        mailhandler.setLevel(loglevel)\n        _logger = logging.getLogger()\n        _logger.addHandler(mailhandler)\n        return True\n    except Exception as error:  # noqa: BLE001\n        print(\n            \"Failed creating SMTP loghandler. Daemon mode disabled. (%s)\" % error,\n            file=sys.stderr,\n        )\n        return False\n\n\ndef usage():\n    \"\"\"Print a usage screen to stderr.\"\"\"\n    print(__doc__, file=sys.stderr)\n\n\ndef setdelay(sec):\n    \"\"\"Set delay (in seconds) between queue checks.\"\"\"\n    global delay\n    if sec.isdigit():\n        sec = int(sec)\n        delay = sec\n        _logger.info(\"Setting delay to %d seconds.\", sec)\n        return True\n    else:\n        _logger.warning(\"Given delay not a digit. Using default.\")\n        return False\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/autoenable.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nAutoenable removes detention for computers that are done with detention.\n\nUsage:\nsudo -u $NAV_USER autoenable\n\nautoenable is meant to be run as a cronjob. It checks the configured\narnold-database for any detained ports and opens them if they have a\nautoenable-time set and that time has passed.\n\n\"\"\"\n\nimport getpass\nimport logging\nimport sys\nfrom datetime import datetime\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.logs import init_generic_logging\nfrom nav.arnold import open_port, GeneralException\nfrom nav.models.arnold import Identity\n\n\n_logger = logging.getLogger('nav.autoenable')\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    init_generic_logging(\n        logfile=\"arnold/autoenable.log\", stderr=False, read_config=True\n    )\n    _logger.info(\"Starting autoenable\")\n\n    candidates = Identity.objects.filter(\n        autoenable__lte=datetime.now(), status__in=['disabled', 'quarantined']\n    )\n\n    if len(candidates) <= 0:\n        _logger.info(\"No ports ready for opening.\")\n        sys.exit(0)\n\n    # For each port that is blocked, try to enable the port.\n    for candidate in candidates:\n        try:\n            open_port(\n                candidate,\n                getpass.getuser(),\n                eventcomment=\"Opened automatically by autoenable\",\n            )\n            interface = candidate.interface\n            netbox = interface.netbox\n            _logger.info(\n                \"Opening %s %s:%s for %s\",\n                netbox.sysname,\n                interface.module,\n                interface.baseport,\n                candidate.mac,\n            )\n        except GeneralException as why:\n            _logger.error(why)\n            continue\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/cisco_auth_sessions.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details. You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA command line program to query Cisco authentication sessions.\n\nThis research tool queries CISCO-AUTH-FRAMEWORK-MIB to investigate 802.1X\nand MAC Authentication Bypass (MAB) sessions on Cisco switches, displaying\nVLAN assignments per interface.\n\nRelated to Issue #3607.\n\"\"\"\n\nimport sys\nimport argparse\nimport logging\nfrom collections import defaultdict\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.util import is_valid_ip\nfrom nav.ipdevpoll.snmp.common import SnmpError, SNMPParameters\nfrom nav.ipdevpoll.snmp import AgentProxy, snmpprotocol\nfrom nav.models.manage import Netbox\nfrom nav.mibs.cisco_auth_framework_mib import CiscoAuthFrameworkMib\nfrom nav.mibs.if_mib import IfMib\nfrom nav.logs import init_generic_logging\n\nfrom twisted.internet import reactor, defer\n\nTIMEOUT = SNMPParameters.DEFAULT_TIMEOUT\n_exit_code = 0\n_logger = logging.getLogger('cisco_auth_sessions')\n\n\ndef main():\n    options = parse_args()\n\n    # Set up logging - simple formatter for CLI output\n    formatter = logging.Formatter('%(levelname)s: %(message)s')\n    init_generic_logging(\n        stderr=True,\n        formatter=formatter,\n        rootlogger='cisco_auth_sessions',\n    )\n\n    # Set log level based on verbose flag\n    if options.verbose:\n        _logger.setLevel(logging.DEBUG)\n    else:\n        _logger.setLevel(logging.ERROR)\n\n    reactor.callWhenRunning(reactor_main, options.device, options.port, options.timeout)\n    reactor.run()\n    sys.exit(_exit_code)\n\n\ndef reactor_main(netbox, port, timeout):\n    \"\"\"The main function to start in the event reactor\"\"\"\n    print_header(netbox, port)\n    df = defer.ensureDeferred(query_and_display(netbox, port, timeout))\n    df.addErrback(failure_handler)\n    df.addBoth(endit)\n    return df\n\n\nasync def query_and_display(netbox, port, timeout):\n    \"\"\"Query SNMP and display authentication session results\"\"\"\n    agent = _create_agentproxy(netbox, port, timeout)\n    if not agent:\n        _logger.error(\"Could not create SNMP agent\")\n        return\n\n    # Create MIB retriever instances\n    caf_mib = CiscoAuthFrameworkMib(agent)\n    if_mib = IfMib(agent)\n\n    _logger.debug(\"Querying CISCO-AUTH-FRAMEWORK-MIB cafSessionTable...\")\n\n    # Query authentication sessions\n    sessions = await caf_mib.get_auth_session_vlans()\n\n    _logger.debug(\"Found %d session entries\", len(sessions))\n    _logger.debug(\"Querying IF-MIB for interface info...\")\n\n    # Query interface information\n    ifnames = await if_mib.get_ifnames()  # Returns {ifindex: (ifName, ifDescr)}\n    ifaliases = await if_mib.get_ifaliases()  # Returns {ifindex: ifAlias}\n\n    # Process and display results\n    display_results(sessions, ifnames, ifaliases)\n\n\ndef process_auth_sessions(sessions):\n    \"\"\"Group authentication sessions by ifIndex\n\n    Args:\n        sessions: Dict mapping table index to session data\n\n    Returns:\n        dict: {ifIndex: {'vlans': set(), 'session_count': int}}\n    \"\"\"\n    by_port = defaultdict(lambda: {'vlans': set(), 'session_count': 0})\n\n    for index, data in sessions.items():\n        # The index is a tuple where the first element is ifIndex\n        # and the rest is the sessionId (which may be multi-part)\n        if isinstance(index, tuple) and len(index) >= 1:\n            ifindex = index[0]\n        else:\n            # Fallback if index is not a tuple\n            continue\n\n        vlan = data.get('cafSessionAuthVlan')\n        if vlan and vlan > 0:  # Skip VLAN 0 (no VLAN assigned)\n            by_port[ifindex]['vlans'].add(vlan)\n        by_port[ifindex]['session_count'] += 1\n\n    return by_port\n\n\ndef display_results(sessions, ifnames, ifaliases):\n    \"\"\"Process and display authentication session results\"\"\"\n    sessions_by_port = process_auth_sessions(sessions)\n\n    if not sessions_by_port:\n        print(\"\\nNo active authentication sessions found on this device\")\n        return\n\n    total = sum(s['session_count'] for s in sessions_by_port.values())\n    _logger.debug(\"%d sessions across %d interfaces\\n\", total, len(sessions_by_port))\n\n    # Prepare table data\n    rows = []\n    for ifindex in sorted(sessions_by_port.keys()):\n        data = sessions_by_port[ifindex]\n\n        # Get interface name (ifnames returns tuple of (ifName, ifDescr))\n        ifname_tuple = ifnames.get(ifindex, ('N/A', ''))\n        ifname = ifname_tuple[0] if isinstance(ifname_tuple, tuple) else ifname_tuple\n\n        # Get interface alias\n        ifalias = ifaliases.get(ifindex, '')\n\n        # Format VLANs as sorted list\n        vlans = sorted(data['vlans']) if data['vlans'] else []\n        vlan_str = ','.join(str(v) for v in vlans) if vlans else '-'\n\n        rows.append(\n            {\n                'ifindex': ifindex,\n                'ifname': ifname,\n                'ifalias': ifalias,\n                'vlans': vlan_str,\n                'sessions': data['session_count'],\n            }\n        )\n\n    # Calculate maximum column widths\n    col_ifindex = max(len('ifIndex'), max(len(str(r['ifindex'])) for r in rows))\n    col_ifname = max(len('ifName'), max(len(r['ifname']) for r in rows))\n    col_ifalias = max(len('ifAlias'), max(len(r['ifalias']) for r in rows))\n    col_vlans = max(len('VLANs'), max(len(r['vlans']) for r in rows))\n    col_sessions = max(len('Sessions'), max(len(str(r['sessions'])) for r in rows))\n\n    header = (\n        f\"{'ifIndex':<{col_ifindex}}  \"\n        f\"{'ifName':<{col_ifname}}  \"\n        f\"{'ifAlias':<{col_ifalias}}  \"\n        f\"{'VLANs':<{col_vlans}}  \"\n        f\"{'Sessions':<{col_sessions}}\"\n    )\n    print(header)\n    print('-' * len(header))\n\n    for row in rows:\n        print(\n            f\"{row['ifindex']:<{col_ifindex}}  \"\n            f\"{row['ifname']:<{col_ifname}}  \"\n            f\"{row['ifalias']:<{col_ifalias}}  \"\n            f\"{row['vlans']:<{col_vlans}}  \"\n            f\"{row['sessions']:<{col_sessions}}\"\n        )\n\n    total_sessions = sum(s['session_count'] for s in sessions_by_port.values())\n    print(\n        f\"\\nSummary: {len(sessions_by_port)} interfaces with active \"\n        f\"authentication sessions, {total_sessions} total sessions\"\n    )\n\n\ndef print_header(netbox, port):\n    \"\"\"Print device header\"\"\"\n    header = f\"Device: {netbox.sysname} ({netbox.ip}:{port})\"\n    print(header)\n    print(\"-\" * len(header))\n    print()\n\n\ndef failure_handler(failure):\n    \"\"\"Sets a non-zero exit code on failures\"\"\"\n    global _exit_code\n    _exit_code = 1\n    return failure\n\n\ndef endit(result):\n    \"\"\"Stops the reactor\"\"\"\n    from twisted.python.failure import Failure\n\n    if isinstance(result, Failure):\n        result.printTraceback(sys.stderr)\n    reactor.stop()\n    return result\n\n\ndef parse_args():\n    \"\"\"Parses the command line arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Queries Cisco authentication sessions (802.1X/MAB) \"\n        \"and displays VLAN assignments per interface\",\n        usage=\"%(prog)s device\",\n    )\n    parser.add_argument(\n        'device',\n        type=device,\n        help=\"The NAV-monitored IP device to query. Must be either \"\n        \"a sysname prefix or an IP address.\",\n    )\n    parser.add_argument(\n        \"--port\",\n        \"-p\",\n        type=int,\n        help=\"change the portnumber, [default: 161]\",\n        metavar=\"PORT\",\n        default=161,\n    )\n    parser.add_argument(\n        \"--timeout\",\n        \"-t\",\n        type=float,\n        help=f\"set a non-standard timeout in seconds, [default: {TIMEOUT}]\",\n        default=TIMEOUT,\n    )\n    parser.add_argument(\n        \"--verbose\",\n        \"-v\",\n        action=\"store_true\",\n        help=\"enable verbose debug output\",\n    )\n    return parser.parse_args()\n\n\ndef device(devicestring):\n    \"\"\"Converts a device specification string into a Netbox object\"\"\"\n    netbox = None\n    ip = is_valid_ip(devicestring)\n    if ip:\n        try:\n            netbox = Netbox.objects.get(ip=ip)\n        except Netbox.DoesNotExist:\n            pass\n\n    if not netbox:\n        netbox = Netbox.objects.filter(sysname__startswith=devicestring)\n        if len(netbox) > 1:\n            msg = \"%s matches multiple IP devices: %s\" % (\n                devicestring,\n                \", \".join(str(box) for box in netbox),\n            )\n            raise argparse.ArgumentTypeError(msg)\n        elif len(netbox) == 0:\n            msg = \"No match found for %s\" % devicestring\n            raise argparse.ArgumentTypeError(msg)\n        else:\n            netbox = netbox[0]\n\n    if not netbox.get_preferred_snmp_management_profile():\n        msg = \"No SNMP management profile set for %s\" % netbox\n        raise argparse.ArgumentTypeError(msg)\n\n    return netbox\n\n\ndef _create_agentproxy(netbox, port, timeout=TIMEOUT):\n    \"\"\"Create SNMP AgentProxy for the given netbox\"\"\"\n    params = SNMPParameters.factory(netbox, timeout=timeout)\n    if not params:\n        return\n\n    snmp_port = snmpprotocol.port()\n    agent = AgentProxy(\n        netbox.ip, port, protocol=snmp_port.protocol, snmp_parameters=params\n    )\n    try:\n        agent.open()\n    except SnmpError:\n        agent.close()\n        raise\n    else:\n        return agent\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/collect_active_ip.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A wrapper for prefix_ip_collector\"\"\"\n\nimport argparse\nimport logging\nimport time\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nimport nav.daemon\nfrom nav.activeipcollector import manager\nfrom nav.logs import init_generic_logging\n\nPIDFILE = 'collect_active_ip.pid'\nLOGFILE = 'collect_active_ip.log'\n_logger = logging.getLogger('nav.ipcollector')\n\n\ndef main(args=None):\n    \"\"\"Controller\"\"\"\n    if args is None:\n        args = get_parser().parse_args()\n    days = args.days or None\n    exit_if_already_running()\n    init_generic_logging(logfile=LOGFILE, stderr=False)\n    run(days)\n\n\ndef exit_if_already_running():\n    \"\"\"Exits the process if another process is running or write pid if not\"\"\"\n    try:\n        nav.daemon.justme(PIDFILE)\n        nav.daemon.writepidfile(PIDFILE)\n    except nav.daemon.DaemonError as error:\n        print(error)\n        sys.exit(1)\n\n\ndef run(days):\n    \"\"\"Run this collection\"\"\"\n    _logger.info('Starting active ip collector')\n    starttime = time.time()\n    manager.run(days)\n    _logger.info('Done in %.2f seconds', time.time() - starttime)\n\n\ndef get_parser():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"-d\",\n        \"--days\",\n        default=None,\n        type=int,\n        help=\"days back in time to start collecting from\",\n    )\n\n    return parser\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/dhcpstats.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nCollects statistics from DHCP servers and sends them to the Graphite/Carbon\nbackend.\n\"\"\"\n\nimport argparse\nimport logging\nfrom functools import partial\nimport sys\n\nfrom nav.config import getconfig\nfrom nav.dhcpstats import kea_dhcp\nfrom nav.dhcpstats.common import GraphiteMetric\nfrom nav.dhcpstats.errors import CommunicationError\nfrom nav.errors import ConfigurationError\nfrom nav.logs import init_generic_logging\nfrom nav.metrics import carbon\nimport nav.daemon\n\n_logger = logging.getLogger(\"nav.dhcpstats\")\nLOGFILE = \"dhcpstats.log\"\nCONFIGFILE = \"dhcpstats.conf\"\nPIDFILE = \"dhcpstats.pid\"\n\nCLIENTS = {\n    \"kea-dhcp4\": partial(kea_dhcp.Client, dhcp_version=4),\n}\n\n\ndef main():\n    \"\"\"Start collecting statistics.\"\"\"\n    parse_args()\n    init_generic_logging(\n        logfile=LOGFILE,\n        stderr=True,\n        stderr_level=logging.ERROR,\n        read_config=True,\n    )\n    exit_if_already_running()\n    try:\n        config = getconfig(CONFIGFILE)\n    except OSError as error:\n        _logger.warning(error)\n        config = {}\n    collect_stats(config)\n\n\ndef parse_args():\n    \"\"\"\n    Builds an ArgumentParser and returns parsed program arguments.\n    (For now, this is called solely to support the --help option.)\n    \"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Collects statistics from DHCP servers and sends them to the \"\n        \"Graphite/Carbon backend\",\n        epilog=\"Statistics are collected from each DHCP server configured in \"\n        \"'CONFDIR/dhcpstats.conf', and then sent to the Graphite/Carbon backend \"\n        \"configured in 'CONFDIR/graphite.conf'.\",\n    )\n    return parser.parse_args()\n\n\ndef collect_stats(config):\n    \"\"\"\n    Collects current stats from each configured server.\n\n    :param config: dhcpstats.conf INI-parsed into a dict specifying\n    servers to collect metrics from.\n    \"\"\"\n\n    _logger.info(\"--> Starting stats collection <--\")\n\n    all_stats: list[GraphiteMetric] = []\n\n    for client in get_clients(config):\n        _logger.info(\n            \"Collecting stats using %s...\",\n            client,\n        )\n\n        try:\n            fetched_stats = client.fetch_stats()\n        except ConfigurationError as err:\n            _logger.warning(\n                \"%s is badly configured: %s, skipping server...\",\n                client,\n                err,\n            )\n        except CommunicationError as err:\n            _logger.warning(\n                \"Error while collecting stats using %s: %s, skipping server...\",\n                client,\n                err,\n            )\n        else:\n            all_stats.extend(fetched_stats)\n            _logger.info(\n                \"Successfully collected stats using %s\",\n                client,\n            )\n\n    carbon.send_metrics(all_stats)\n\n    _logger.info(\"--> Stats collection done <--\")\n\n\ndef get_clients(config):\n    \"\"\"\n    Yields one client per correctly configured server in config. A section\n    of the config correctly configures a server if:\n\n    * Its name starts with 'endpoint_' or 'server_'.\n    * It has the mandatory option 'type'.\n    * The value of the 'type' option is mapped to a client initializer\n      by the global CLIENTS dictionary, and the client doesn't raise a\n      ConfigurationError when it is initialized with the rest of the\n      options of the section as keyword arguments.\n\n    :param config: dhcpstats.conf INI-parsed into a dict specifying\n    servers to collect metrics from.\n    \"\"\"\n    for section, options in config.items():\n        if section.startswith(\"endpoint_\"):\n            server_name = section.removeprefix(\"endpoint_\")\n        elif section.startswith(\"server_\"):\n            server_name = section.removeprefix(\"server_\")\n        else:\n            continue\n        server_type = options.get(\"type\")\n        kwargs = {opt: val for opt, val in options.items() if opt != \"type\"}\n        try:\n            cls = CLIENTS[server_type]\n        except KeyError:\n            _logger.warning(\n                \"Invalid server type '%s' defined in config section [%s], skipping \"\n                \"server...\",\n                server_type,\n                section,\n            )\n            continue\n\n        try:\n            client = cls(server_name, **kwargs)\n        except (ConfigurationError, TypeError) as err:\n            _logger.warning(\n                \"Section [%s] of %s is badly configured: %s, skipping server...\",\n                section,\n                CONFIGFILE,\n                err,\n            )\n        else:\n            yield client\n\n\ndef exit_if_already_running():\n    try:\n        nav.daemon.justme(PIDFILE)\n        nav.daemon.writepidfile(PIDFILE)\n    except nav.daemon.AlreadyRunningError:\n        _logger.error(\n            \"Attempted to start a new dhcp stats collection process while another is \"\n            \"running. This is likely due to stats collection taking longer than the \"\n            \"cron interval\"\n        )\n        sys.exit(1)\n    except nav.daemon.DaemonError as error:\n        _logger.error(\"%s\", error)\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "python/nav/bin/emailreports.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: month -*-\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Sends email status reports\"\"\"\n\nimport argparse\nimport logging\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.web.business.reportengine import send_reports\nfrom nav.models.profiles import ReportSubscription\nfrom nav.logs import init_generic_logging\n\nLOGFILE = 'emailreports.log'\n_logger = logging.getLogger('emailreports')\n\n\ndef main(args=None):\n    \"\"\"Send all reports\"\"\"\n    if args is None:\n        args = get_parser().parse_args()\n    init_generic_logging(logfile=LOGFILE, stderr=False)\n    send_reports(args.period)\n\n\ndef get_parser():\n    \"\"\"Define the parser\"\"\"\n    parser = argparse.ArgumentParser()\n    period_choices = [p[0] for p in ReportSubscription.PERIODS]\n    parser.add_argument(\n        'period', help='The period for this report', choices=period_choices\n    )\n    return parser\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/eventengine.py",
    "content": "#!/usr/bin/env python\n# encoding: utf-8\n# -*- testargs: -h -*-\n\"\"\"\nThe NAV eventengine deamon\n\"\"\"\n\n# Assuming a production environment, we don't want to raise exceptions\n# while logging\nimport logging\n\nlogging.raiseExceptions = False\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.eventengine.daemon import main\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/ipdevpolld.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: --list-plugins -*-\n\"\"\"\nThe ipdevpoll deamon\nStart the ipdevpoll daemon\n\"\"\"\n\n# Assuming a production environment, we don't want to raise exceptions\n# while logging\nimport logging\nimport platform\n\nlogging.raiseExceptions = False\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\n\ndef main():\n    if platform.system() == \"Linux\":\n        from nav.ipdevpoll.epollreactor2 import install\n\n        install()\n\n    from nav.ipdevpoll.daemon import main\n\n    main()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/logengine.py",
    "content": "#!/usr/bin/env python\nimport logging\n\nlogging.raiseExceptions = False\nfrom nav.logengine import main\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/macwatch.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# Copyright (C) 2011, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Searches NAV's cam logs and reports the closest location of surveilled MAC\naddresses, if found.\n\"\"\"\n\nfrom datetime import datetime\n\nimport time\nimport logging\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\n# import NAV libraries\nimport nav.logs\n\nfrom nav.models.manage import Cam\nfrom nav.event import Event\nfrom nav.web.macwatch.models import MacWatch\nfrom nav.web.macwatch.models import MacWatchMatch\n\n\nLOGFILE = \"macwatch.log\"\n_logger = logging.getLogger('nav.macwatch')\n\n# Occurences of the mac-address nearest to the edges has highest\n# priority\nLOCATION_PRIORITY = {'GSW': 1, 'GW': 1, 'SW': 2, 'EDGE': 3}\n\n\ndef prioritize_location(cam_objects):\n    \"\"\"Try to find an entry for a cam-object that is closest\n    to the edge of a network.\"\"\"\n    # The search may return more than one hits. This happens as mactrace\n    # not always manages to calculate the correct topology. In that case\n    # choose the result which is \"lowest\" in the topology. We do this based\n    # on catid, where GSW|GW is top followed by SW and then EDGE.\n\n    # Mac _may_ be active on two ports at the same time (due to duplicate\n    # mac addresses, error in db and so on). This is such a small problem\n    # that we ignore it for the time.\n    prioritized_cams = {0: []}\n    for value in LOCATION_PRIORITY.values():\n        if value not in prioritized_cams:\n            prioritized_cams[value] = []\n    for curr_cam in cam_objects:\n        category = curr_cam.netbox.category_id\n        prioritized_cams[LOCATION_PRIORITY[category]].append(curr_cam)\n    rank = 0\n    for value in LOCATION_PRIORITY.values():\n        if prioritized_cams[value] and value > rank:\n            rank = value\n    _logger.debug('Returning %s', prioritized_cams.get(rank))\n    return prioritized_cams.get(rank)\n\n\ndef post_event(mac_watch, cam):\n    \"\"\"Post an event on the event-queue, obviously...\"\"\"\n    source = \"macwatch\"\n    target = \"eventEngine\"\n    eventtypeid = \"info\"\n    value = 100\n    severity = 5\n    event = Event(\n        source=source,\n        target=target,\n        netboxid=cam.netbox.id,\n        eventtypeid=eventtypeid,\n        value=value,\n        severity=severity,\n    )\n    event['sysname'] = cam.sysname\n    if cam.module:\n        event['module'] = cam.module\n    event['port'] = cam.port\n    event['mac'] = cam.mac\n    event['macwatch-mac'] = mac_watch.mac\n    event['alerttype'] = 'macWarning'\n    try:\n        event.post()\n    except Exception:  # noqa: BLE001\n        _logger.exception(\"Unhandled exception while posting event\")\n        return False\n    return True\n\n\ndef find_the_latest(macwatch_matches):\n    \"\"\"Find the match that have posted an event latest\"\"\"\n    latest_time = datetime.min\n    match_to_keep = None\n    for macwatch_match in macwatch_matches:\n        if macwatch_match.posted and macwatch_match.posted > latest_time:\n            latest_time = macwatch_match.posted\n            match_to_keep = macwatch_match\n    return match_to_keep\n\n\ndef delete_unwanted_matches(macwatch_matches):\n    \"\"\"Delete unwanted matches, but keep the match\n    that have posted an event latest in time.\"\"\"\n    match_to_keep = find_the_latest(macwatch_matches)\n    for macwatch_match in macwatch_matches:\n        if match_to_keep and match_to_keep.id == macwatch_match.id:\n            continue\n        else:\n            _logger.info(\n                'Deleting match %s; macwatch = %s',\n                macwatch_match.id,\n                macwatch_match.macwatch.id,\n            )\n            macwatch_match.delete()\n\n\ndef main():\n    \"\"\"Start the show.  You haven't seen nothing yet...\"\"\"\n    # Create logger, start logging\n    nav.logs.init_generic_logging(logfile=LOGFILE, stderr=False, read_config=True)\n    start_time = time.time()\n    _logger.info(\"--> Starting macwatch <--\")\n\n    # For each active macwatch entry, check if mac is active and post event.\n    for mac_watch in MacWatch.objects.all():\n        _logger.info(\"Checking for activity on %s\", mac_watch.mac)\n\n        if mac_watch.prefix_length:\n            mac = mac_watch.get_mac_prefix()\n            _logger.debug(\n                'Mac-addresses; prefix = %s and upper mac = %s', mac[0], mac[-1]\n            )\n            cam_objects = Cam.objects.filter(\n                mac__gte=mac[0],\n                mac__lte=mac[-1],\n                end_time=datetime.max,\n                netbox__isnull=False,\n            )\n        else:\n            cam_objects = Cam.objects.filter(\n                mac=mac_watch.mac, end_time=datetime.max, netbox__isnull=False\n            )\n        if len(cam_objects) < 1:\n            _logger.info(\"%s is not active\", mac_watch.mac)\n            continue\n\n        cam_by_mac = {}\n        for cam_obj in cam_objects:\n            if cam_obj.mac not in cam_by_mac:\n                cam_by_mac[cam_obj.mac] = []\n            cam_by_mac[cam_obj.mac].append(cam_obj)\n\n        for cams in cam_by_mac.values():\n            _logger.debug('Cam-objects length %s; cam-objects = %s', len(cams), cams)\n            prioritized_cams = prioritize_location(cams)\n            for cam in prioritized_cams:\n                macwatch_matches = MacWatchMatch.objects.filter(\n                    macwatch=mac_watch, cam=cam\n                )\n\n                # Check if the mac-address has moved since last time,\n                # continue with next mac if not.\n                if len(macwatch_matches) == 1:\n                    _logger.info(\n                        \"Mac-address is active, but have not moved since last check\"\n                    )\n                    continue\n\n                if len(macwatch_matches) > 1:\n                    # Something strange has happened, delete all but\n                    # the match that has posted an event latest in time.\n                    _logger.info(\n                        '%s matches found for macwatch = %s',\n                        len(macwatch_matches),\n                        mac_watch.id,\n                    )\n                    delete_unwanted_matches(macwatch_matches)\n                    continue\n\n                # Mac has moved (or appeared). Post event on eventq\n                _logger.info(\n                    \"%s has appeared on %s (%s:%s)\",\n                    cam.mac,\n                    cam.sysname,\n                    cam.module,\n                    cam.port,\n                )\n                if post_event(mac_watch, cam):\n                    _logger.info(\"Event posted for macwatch = %s\", mac_watch.id)\n                    new_macwatch_match = MacWatchMatch(\n                        macwatch=mac_watch, cam=cam, posted=datetime.now()\n                    )\n                    new_macwatch_match.save()\n                else:\n                    _logger.warning(\"Failed to post event, no alert will be given.\")\n\n    _logger.info(\n        \"--> Done checking for macs in %.3f seconds <--\", time.time() - start_time\n    )\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/mailin.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\nimport re\nimport sys\nimport email\nimport configparser\n\nimport argparse\n\nfrom nav.bootstrap import bootstrap_django\nfrom nav.config import find_config_file\n\nbootstrap_django(__file__)\n\nimport nav\nimport nav.mailin\nfrom nav import logs\n\nimport logging\n\nlogging.raiseExceptions = False\n_logger = logging.getLogger('nav.mailin')\nconf = None\n\nCONFIG_FILE = 'mailin.conf'\nLOG_FILE = 'mailin.log'\n\n\ndef main():\n    global conf\n\n    args = parse_args()\n\n    # Todo: fail if config file is not found\n    conf = configparser.ConfigParser()\n    conf.read(find_config_file(CONFIG_FILE))\n\n    # Must do this after config, so logfile can be configurable\n    if args.test:\n        init_logging('-')\n    else:\n        init_logging(LOG_FILE)\n\n    add_mailin_subsystem()\n\n    plugins = conf.get('main', 'plugins').split()\n    plugins = load_plugins(plugins)\n\n    if args.init:\n        _logger.info('Initialization done. Exiting.')\n        return\n\n    read_and_process_input(plugins, test=args.test)\n    _logger.info('Done')\n\n\ndef parse_args():\n    \"\"\"Parse program arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Parse RFC822 formatted mail messages from 3rd party \"\n        \"software and convert them to NAV events, using plugins\"\n    )\n    parser.add_argument(\n        '-i',\n        '--init',\n        action='store_true',\n        help='only load plugins and create event/alert types',\n    )\n    parser.add_argument(\n        '-t',\n        '--test',\n        action='store_true',\n        help='write events to stdout instead of posting them.',\n    )\n    return parser.parse_args()\n\n\ndef read_and_process_input(plugins, test=False):\n    \"\"\"Parses stdin as e-mail and passes it to each plugin in order\"\"\"\n    msg = email.message_from_file(sys.stdin)\n    _logger.info('---')\n    _logger.info('Got message: From=%r Subject=%r', msg['From'], msg['Subject'])\n\n    for plugin in plugins:\n        if plugin.accept(msg):\n            _logger.info('%s accepted the message', plugin.name)\n\n            if authorize_match(plugin, msg):\n                if plugin.authorize(msg):\n                    events = plugin.process(msg)\n                    if isinstance(events, nav.event.Event):\n                        # Only one event, put it in a list\n                        events = [events]\n\n                    if test:\n                        print('Would have posted these events:')\n                        for event in events:\n                            print(event)\n                    else:\n                        for event in events:\n                            event.post()\n                            _logger.info('Posted %r', event)\n                else:\n                    _logger.error('Message not authorized')\n\n            break  # Only one message gets to play\n\n\ndef add_mailin_subsystem():\n    \"\"\"Ensure that the 'mailin' subsystem exists in the db\"\"\"\n\n    conn = nav.db.getConnection('default', 'manage')\n    cursor = conn.cursor()\n\n    cursor.execute(\"select * from subsystem where name='mailin'\")\n    if cursor.rowcount == 0:\n        cursor.execute(\"INSERT INTO subsystem (name, descr) VALUES ('mailin', '')\")\n    conn.commit()\n\n\ndef load_plugins(paths):\n    plugins = []\n\n    for path in paths:\n        _logger.info('Loading plugin %s ...', path)\n        parent = path.split('.')[:-1]\n\n        try:\n            mod = __import__(path, globals(), locals(), [parent])\n        except ImportError:\n            _logger.error('Plugin not found: %s', path)\n        except Exception:  # noqa: BLE001\n            _logger.exception('Failed to load plugin %s', path)\n            continue\n\n        plugin = mod.Plugin(path, conf, _logger)\n        plugins.append(plugin)\n\n    return plugins\n\n\ndef authorize_match(plugin, msg):\n    \"\"\"Test message headers against a pattern in the configuration file\"\"\"\n\n    # Try to get 'authorization' option from plugin section or main section\n    if conf.has_option(plugin.name, 'authorization'):\n        raw = conf.get(plugin.name, 'authorization')\n    elif conf.has_option('main', 'authorization'):\n        raw = conf.get('main', 'authorization')\n    else:\n        # No authorization pattern, so just let it through\n        return True\n\n    # Return True if the pattern matches at least one header line\n    pattern = re.compile(raw)\n    for key in msg.keys():\n        value = msg[key]\n        line = key + ': ' + value\n        if pattern.search(line):\n            return True\n\n    # Should this logged as error or warning?\n    _logger.error(\"Message doesn't match auth pattern %r\", raw)\n    return False\n\n\ndef init_logging(filename):\n    if filename == '-':\n        logs.init_stderr_logging()\n    else:\n        if conf.has_option('main', 'logfile'):\n            filename = conf.get('main', 'logfile')\n        logs.init_generic_logging(logfile=filename, stderr=False)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/maintengine.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2006, 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nThis program dispatches maintenance events according to the maintenance\nschedule in NAVdb.\n\"\"\"\n\nimport time\nimport logging\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.logs import init_generic_logging\nfrom nav.maintengine import check_devices_on_maintenance\n\nLOG_FILE = 'maintengine.log'\nLOG_FORMAT = \"[%(asctime)s] [%(levelname)s] [pid=%(process)d %(name)s] %(message)s\"\n\n\ndef main():\n    \"\"\"Good old main...\"\"\"\n    before = time.time()\n    fmt = logging.Formatter(LOG_FORMAT)\n    init_generic_logging(\n        logfile=LOG_FILE, stderr=False, formatter=fmt, read_config=True\n    )\n    _logger = logging.getLogger('')\n\n    _logger.debug('-' * 60)  # Visual separation line\n    try:\n        check_devices_on_maintenance()\n    except Exception:  # noqa: BLE001\n        _logger.exception(\"An unhandled exception occurred:\")\n    _logger.debug('Finished in %.3fs' % (time.time() - before))\n    _logger.debug('-' * 60)  # Visual separation line\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navcheckservice.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: 127.0.0.1 localhost dummy -*-\n#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nUtility to run one NAV servicemon checker plugin against an arbitrary\nhost. Useful for testing or debugging individual servicemon plugins.\n\n\"\"\"\n\nimport argparse\nimport sys\n\nimport IPy\nimport logging\n\nfrom nav.logs import init_stderr_logging\nfrom nav.statemon import checkermap\n\n\n_logger = logging.getLogger('nav.checkservice')\n\n\ndef main():\n    init_stderr_logging()\n    cargs = parse_args()\n    _logger.debug(\n        \"Ip: %s sysname: %s handler: %r\", cargs.ip, cargs.sysname, cargs.handler\n    )\n    checker = checkermap.get(cargs.handler)\n    if not checker:\n        _logger.fatal(\"Could not create checker instance\")\n        sys.exit(1)\n    args = read_checker_args(checker)\n    _logger.debug(\"Input args: %r\", args)\n\n    service = {\n        'id': 0,\n        'netboxid': 0,\n        'deviceid': 0,\n        'ip': str(cargs.ip),\n        'sysname': cargs.sysname,\n        'args': args,\n        'version': \"\",\n    }\n\n    print(\"Checking\")\n    my_checker = checker(service)\n    print('  Return value:', my_checker.execute())\n    print('       Version:', repr(my_checker.version))\n    print(\"Finished\")\n\n\ndef parse_args():\n    checkermap.parsedir()\n\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\n        'ip', metavar='IP', type=IPy.IP, help='IP address of host to check'\n    )\n    parser.add_argument(\n        'sysname',\n        metavar='SYSNAME',\n        help='Name to associate with this device. Does not '\n        'need to a be real name in any sense.',\n    )\n    parser.add_argument(\n        'handler',\n        metavar='HANDLER',\n        choices=checkermap.checkers.keys(),\n        help='Handler name of the checker plugin to use. Available handler plugins are '\n        + ', '.join(checkermap.checkers.keys())\n        + '.',\n    )\n    return parser.parse_args()\n\n\ndef read_checker_args(checker):\n    args = {}\n    if checker.ARGS:\n        print(\n            \"{} requires these arguments: {}\".format(\n                checker.__name__, \", \".join(arg[0] for arg in checker.ARGS)\n            )\n        )\n    if checker.OPTARGS:\n        print(\n            \"{} takes these optional arguments: {}\".format(\n                checker.__name__, \", \".join(arg[0] for arg in checker.OPTARGS)\n            )\n        )\n    if not (checker.ARGS or checker.OPTARGS):\n        print(\"{} takes no extra arguments\".format(checker.__name__))\n        return args\n\n    print(\"Input checker arguments (key=val), empty line to continue:\")\n    while True:\n        try:\n            line = input()\n        except EOFError:\n            line = \"\"\n        if not line:\n            break\n        try:\n            key, val = line.split('=', 1)\n            args[key] = val\n        except ValueError:\n            print(\"Must be on form 'key=val'\")\n    return args\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navclean.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: --arp -*-\n# -*- testargs: --close-arp -*-\n#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Cleans old data from the NAV database\"\"\"\n\nimport argparse\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nimport psycopg2\nfrom django.db.transaction import atomic\nfrom django.contrib.sessions.models import Session\nfrom django.utils import timezone\n\nimport nav.db\n\n\ndef main():\n    \"\"\"Main execution function.\"\"\"\n    parser = make_argparser()\n    args = parser.parse_args()\n\n    if args.interval:\n        expiry = \"NOW() - interval %s\" % nav.db.escape(args.interval)\n    elif args.datetime:\n        expiry = args.datetime\n\n    connection = nav.db.getConnection('default', 'manage')\n    cleaners = get_selected_cleaners(args, connection)\n\n    cleaned = False\n    for cleaner in cleaners:\n        try:\n            count = cleaner.clean(expiry, dry_run=not args.force)\n            if not args.quiet:\n                print(\n                    \"Expired {expiry_type} records: {count}\".format(\n                        expiry_type=cleaner.expiry_type,\n                        count=count if count is not None else \"N/A\",\n                    )\n                )\n            cleaned = True\n\n        except psycopg2.Error as error:\n            print(\"The PostgreSQL backend produced an error\", file=sys.stderr)\n            print(error, file=sys.stderr)\n            connection.rollback()\n            sys.exit(1)\n\n    if not args.force:\n        connection.rollback()\n        cleaned = False\n    else:\n        connection.commit()\n\n    if not args.quiet:\n        if cleaned:\n            print(\"Expired records were updated/deleted.\")\n        else:\n            print(\"Nothing changed.\")\n\n    connection.close()\n\n\n#\n# helper functions\n#\n\n\ndef make_argparser():\n    \"\"\"Makes this program's ArgumentParser\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Cleans old data from the NAV database\",\n        epilog=\"Cleaning old data means either deleting old records, or updating \"\n        \"expired records.  Use options to select which types of data to clean. \"\n        \"The -e and -E options set an expiry date that applies to all \"\n        \"selected data types.  Every run is a dry-run by default, unless the \"\n        \"-f option is given, in order to avoid accidental data deletion.\",\n    )\n    arg = parser.add_argument\n\n    arg(\"-q\", \"--quiet\", action=\"store_true\", help=\"Be quiet\")\n    arg(\"-f\", \"--force\", action=\"store_true\", help=\"Force actual database updates\")\n    arg(\n        \"-e\",\n        \"--datetime\",\n        type=postgresql_datetime,\n        help=\"Set an explicit expiry date on ISO format\",\n    )\n    arg(\n        \"-E\",\n        \"--interval\",\n        type=postgresql_interval,\n        default=\"6 months\",\n        help=\"Set an expiry interval using PostgreSQL interval syntax, e.g. \"\n        \"'30 days', '4 weeks', '6 months', '30 minutes'\",\n    )\n\n    arg(\"--arp\", action=\"store_true\", help=\"Delete old records from ARP table\")\n    arg(\n        \"--close-arp\",\n        action=\"store_true\",\n        help=\"Close expired ARP records. Expired records are those where the netbox \"\n        \"has been down for longer than the set expiry limit\",\n    )\n    arg(\"--cam\", action=\"store_true\", help=\"Delete old records from CAM table\")\n    arg(\n        \"--radiusacct\",\n        action=\"store_true\",\n        help=\"Delete old records from Radius accounting table\",\n    )\n    arg(\n        \"--radiuslog\",\n        action=\"store_true\",\n        help=\"Delete old records from Radius error log table\",\n    )\n    arg(\n        \"--netbox\",\n        action=\"store_true\",\n        help=\"Delete netboxes that have been marked for deletion by Seed Database\",\n    )\n    arg(\"--websessions\", action=\"store_true\", help=\"Delete expired web sessions\")\n\n    return parser\n\n\ndef validate_sql(sql, args):\n    \"\"\"Validates than an SQL statement can run without errors\"\"\"\n    connection = nav.db.getConnection('default', 'manage')\n    cursor = connection.cursor()\n    try:\n        cursor.execute(sql, args)\n    except psycopg2.DataError as error:\n        raise ValueError(error)\n    finally:\n        connection.rollback()\n    return True\n\n\ndef postgresql_datetime(value):\n    \"\"\"Validates a user-input value as a PostgreSQL timestamp string\"\"\"\n    if validate_sql('SELECT TIMESTAMP %s', (value,)):\n        return value\n\n\ndef postgresql_interval(value):\n    \"\"\"Validates a user-input value as a PostgreSQL interval string\"\"\"\n    if validate_sql(\"SELECT INTERVAL %s\", (value,)):\n        return value\n\n\ndef get_selected_cleaners(\n    args: argparse.Namespace, connection\n) -> list[\"RecordCleaner\"]:\n    \"\"\"Returns a list of RecordCleaner instances for each of the tables\n    selected in the supplied ArgumentParser.\n    \"\"\"\n    return [\n        cleaner(connection)\n        for cleaner in RecordCleaner.__subclasses__()\n        if getattr(args, cleaner.expiry_type, False)\n    ]\n\n\n#\n# Cleaner implementations\n#\n\n\nclass RecordCleaner:\n    \"\"\"Base class for record cleaning\"\"\"\n\n    expiry_type = None\n    selector = \"\"\n\n    def __init__(self, connection):\n        self.connection = connection\n\n    def filter(self, expiry):\n        \"\"\"Returns a selector statement formatted with the supplied expiry\"\"\"\n        return self.selector.format(expiry=expiry)\n\n    def sql(self, expiry):\n        \"\"\"Returns the full DELETE statement based on the expiry date.  Override this\n        method if a different kind of update statement is needed.\n        \"\"\"\n        where = self.filter(expiry)\n        return 'DELETE FROM {table} {filter}'.format(\n            table=self.expiry_type, filter=where\n        )\n\n    def clean(self, expiry: str, dry_run: bool = False):\n        \"\"\"Cleans the records selected by the expiry spec\"\"\"\n        cursor = self.connection.cursor()\n        sql = self.sql(expiry)\n        cursor.execute(sql)\n        return cursor.rowcount\n\n\nclass ArpDeleter(RecordCleaner):\n    expiry_type = \"arp\"\n    selector = \"WHERE end_time < {expiry}\"\n\n\nclass ArpCloser(RecordCleaner):\n    \"\"\"Closes ARP records that have \"expired\", i.e. they're open, but the netbox they\n    were collected from has been down for too long.\n    \"\"\"\n\n    expiry_type = \"close_arp\"\n\n    def sql(self, expiry):\n        \"\"\"Returns the full UPDATE statement based on the expiry date\"\"\"\n        return f\"\"\"\n            WITH unreachable_devices AS (\n                SELECT\n                    netboxid,\n                    start_time AS downsince\n                FROM\n                    alerthist\n                WHERE\n                    eventtypeid = 'boxState'\n                    AND end_time >= 'infinity'\n            )\n            UPDATE\n                arp\n            SET\n                end_time = NOW()\n            WHERE\n                netboxid IN (\n                    SELECT\n                        netboxid\n                    FROM\n                        unreachable_devices\n                    WHERE\n                        downsince < {expiry})\n                AND end_time >= 'infinity'\n        \"\"\"\n\n\nclass CamDeleter(RecordCleaner):\n    expiry_type = \"cam\"\n    selector = \"WHERE end_time < {expiry}\"\n\n\nclass RadiusAcctDeleter(RecordCleaner):\n    expiry_type = \"radiusacct\"\n    selector = \"\"\"\n        WHERE (acctstoptime < {expiry})\n        OR ((acctstarttime + (acctsessiontime * interval '1 sec')) < {expiry})\n        OR (acctstarttime < {expiry}\n            AND (acctstarttime + (acctsessiontime * interval '1 sec')) IS NULL)\n        \"\"\"\n\n\nclass RadiusLogDeleter(RecordCleaner):\n    expiry_type = \"radiuslog\"\n    selector = \"WHERE time < {expiry}\"\n\n\nclass NetboxDeleter(RecordCleaner):\n    expiry_type = \"netbox\"\n    selector = \"WHERE pg_try_advisory_lock(netboxid) and deleted_at IS NOT NULL\"\n\n\nclass SessionDeleter(RecordCleaner):\n    \"\"\"Special case deleter for Django Sessions\"\"\"\n\n    expiry_type = \"websessions\"\n\n    @atomic\n    def clean(self, expiry, dry_run=False):\n        \"\"\"Deletes all expired django sessions if not a dry_run.\n\n        Expiry spec is ignored, as sessions have a different expiry mechanism.\n        \"\"\"\n        expired = Session.objects.filter(expire_date__lt=timezone.now())\n        count = expired.count()\n        if dry_run:\n            return count\n        expired.delete()\n        return count\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navdf.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2014, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA command line interface to list and filter IP devices monitored by NAV\n\"\"\"\n\nimport argparse\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.models.manage import Netbox\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    args = parse_args()\n    if args.filter:\n        qs = eval('Netbox.objects.' + args.filter)\n    else:\n        qs = Netbox.objects.all()\n\n    for netbox in qs.order_by('sysname').values_list('sysname', flat=1):\n        print(netbox)\n\n\ndef parse_args():\n    \"\"\"Builds an ArgumentParser and returns parsed program arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Lists and filters IP devices monitored by NAV\",\n        usage=\"%(prog)s [filter]\",\n    )\n    parser.add_argument(\n        'filter',\n        nargs='?',\n        help=\"The filter expression must be a method call \"\n        \"applicable to the Django-based Netbox model's \"\n        \"manager class. Example: \"\n        \"\\\"filter(category__id='GSW')\\\"\",\n    )\n    return parser.parse_args()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navdump.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2010-2011, 2013-2015, 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dumps core information from NAV to textfiles importable by SeedDB\"\"\"\n\nimport sys\nimport argparse\nimport json\n\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.models import manage\nimport nav.models.service\n\n\n_stdout = sys.stdout\nSEPARATOR = \":\"\n\n\ndef main():\n    args = parse_args()\n\n    if args.separator:\n        global SEPARATOR\n        SEPARATOR = args.separator\n\n    if args.all:\n        keys = [\n            key\n            for key, func in vars(Handlers).items()\n            if type(func) is staticmethod and not key.startswith('_')\n        ]\n        for key in keys:\n            filename = key + \".txt\"\n            sys.stdout = _stdout\n            print(\"Dumping \" + filename)\n            try:\n                # We're lazy and are using print all the way\n                sys.stdout = open(filename, \"w\")\n            except IOError as error:\n                fail(2, \"Could not open file %s: %s\" % (args.output, error))\n            handler = getattr(Handlers, key)\n            handler()\n        sys.exit(0)\n\n    if args.output:\n        try:\n            # We're lazy and are using print all the way\n            sys.stdout = open(args.output, \"w\")\n        except IOError as error:\n            fail(2, \"Could not open file %s: %s\" % (args.output, error))\n\n    handler = getattr(Handlers(), args.table)\n\n    # And run the handler\n    handler()\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"Dumps NAV database seed data to importable files\"\n    )\n    arg = parser.add_argument\n    arg(\n        \"-s\",\n        \"--separator\",\n        help=\"use SEP to separate fields in output, [default :]\",\n        metavar=\"SEP\",\n        default=\":\",\n    )\n    tables = sorted(\n        table\n        for table, func in vars(Handlers).items()\n        if type(func) is staticmethod and not table.startswith('_')\n    )\n    arg(\n        \"-t\",\n        \"--table\",\n        help=\"dump data from TABLE\",\n        default=\"\",\n        choices=tables,\n        metavar=\"TABLE\",\n    )\n    arg(\"-o\", \"--output\", help=\"dump data to FILE instead of stdout\", metavar=\"FILE\")\n    arg(\n        \"-a\",\n        \"--all\",\n        dest=\"all\",\n        action=\"store_true\",\n        help=\"dump all tables to files named TABLE.txt\",\n    )\n\n    args = parser.parse_args()\n    if not (args.table or args.all):\n        parser.error(\n            \"Please specify which tables to dump, using either --table or --all\"\n        )\n    return args\n\n\ndef warn(msg):\n    sys.stderr.write(msg + \"\\n\")\n\n\ndef fail(resultcode, msg):\n    warn(msg)\n    sys.exit(resultcode)\n\n\ndef header(definition):\n    \"\"\"Output the header definition, possibly with replaced separators\"\"\"\n    definition = definition.replace(\":\", SEPARATOR) + '\\n'\n    sys.stdout.write(definition)\n\n\ndef lineout(line):\n    \"\"\"Output line, remove any : in strings\"\"\"\n    newline = ('\"%s\"' % column if SEPARATOR in column else column for column in line)\n    line = SEPARATOR.join(newline) + '\\n'\n    sys.stdout.write(line)\n\n\nclass Handlers(object):\n    \"\"\"Contains methods for printing database info suitable for bulk import\"\"\"\n\n    @staticmethod\n    def netbox():\n        \"\"\"Outputs a line for each netbox in the database\"\"\"\n        header(\n            \"#roomid:ip:orgid:catid:[management_profiles:master:function:\"\n            \"key1=value1|key2=value2:\"\n            \"devicegroup1:devicegroup2..]\"\n        )\n        for box in manage.Netbox.objects.all():\n            profiles = '|'.join(box.profiles.values_list('name', flat=True))\n            data = '|'.join(\"%s=%s\" % (k, v) for k, v in box.data.items())\n            line = [\n                box.room_id,\n                box.ip,\n                box.organization_id,\n                box.category_id,\n                profiles,\n                box.master.sysname if box.master else \"\",\n                box.get_function() or \"\",\n                data,\n            ]\n            categories = sorted(box.groups.values_list('id', flat=True))\n            line.extend(categories)\n            lineout(line)\n\n    @staticmethod\n    def management_profile():\n        \"\"\"Outputs a line for each management profile in the database\"\"\"\n        header(\"#name:protocol:option=value|option=value...\")\n        for profile in manage.ManagementProfile.objects.all():\n            line = [\n                profile.name,\n                profile.get_protocol_display(),\n                json.dumps(profile.configuration).replace('\"', '\"\"'),\n            ]\n            lineout(line)\n\n    @staticmethod\n    def org():\n        header(\"#orgid[:parent:description:attribute=value[:attribute=value]]\")\n        for org in manage.Organization.objects.all():\n            if org.parent:\n                parent = org.parent.id\n            else:\n                parent = \"\"\n            line = [org.id, parent, org.description or \"\"]\n            line.extend(['%s=%s' % x for x in org.data.items()])\n            lineout(line)\n\n    @staticmethod\n    def netboxgroup():\n        header(\"#netboxgroupid:description\")\n        for netboxgroup in manage.NetboxGroup.objects.all():\n            line = [netboxgroup.id, netboxgroup.description]\n            lineout(line)\n\n    @staticmethod\n    def device_group():\n        \"\"\"Netbox group is a deprecated term, support the new term\"\"\"\n        Handlers.netboxgroup()\n\n    @staticmethod\n    def usage():\n        header(\"#usageid:descr\")\n        for usage in manage.Usage.objects.all():\n            line = [usage.id, usage.description]\n            lineout(line)\n\n    @staticmethod\n    def location():\n        header(\"#locationid[:parent:descr:aliases]\")\n        for location in manage.Location.objects.all():\n            line = [\n                location.id,\n                location.parent_id or '',\n                location.description or '',\n                '|'.join(location.aliases),\n            ]\n            lineout(line)\n\n    @staticmethod\n    def room():\n        header(\"# roomid:locationid[:descr:aliases:position:attr=value:...]\")\n        for room in manage.Room.objects.all():\n            line = [\n                room.id,\n                room.location_id,\n                room.description or \"\",\n                \"|\".join(room.aliases),\n            ]\n            if room.position:\n                line.append(\"(%s, %s)\" % room.position)\n            elif room.data:\n                line.append('')\n            line.extend(['%s=%s' % x for x in room.data.items()])\n            lineout(line)\n\n    @staticmethod\n    def type():\n        header(\"#vendorid:typename:sysoid[:description:cdp:tftp]\")\n        for netbox_type in manage.NetboxType.objects.all():\n            line = [\n                netbox_type.vendor.id,\n                netbox_type.name,\n                netbox_type.sysobjectid,\n                netbox_type.description,\n            ]\n            lineout(line)\n\n    @staticmethod\n    def vendor():\n        header(\"#vendorid\")\n        for vendor in manage.Vendor.objects.all():\n            line = [vendor.id]\n            lineout(line)\n\n    @staticmethod\n    def prefix():\n        global SEPARATOR\n        old_sep = SEPARATOR\n        if SEPARATOR == \":\":\n            # IPv6 prefixes are full of colons\n            warn(\"Not smart to use : as separator for prefixes, using ;\")\n            SEPARATOR = \";\"\n        header(\"#prefix/mask;nettype[;orgid;netident;usage;description;vlan]\")\n        for prefix in manage.Prefix.objects.all():\n            vlan = prefix.vlan\n            line = [\n                prefix.net_address,\n                vlan and vlan.net_type and vlan.net_type.id or \"\",\n            ]\n            if vlan:\n                line.append(vlan.organization and vlan.organization.id or \"\")\n                line.append(vlan.net_ident or \"\")\n                line.append(vlan.usage and vlan.usage.id or \"\")\n                line.append(vlan.description or \"\")\n                line.append(vlan.vlan and str(vlan.vlan) or \"\")\n            lineout(line)\n        SEPARATOR = old_sep\n\n    @staticmethod\n    def service():\n        global SEPARATOR\n        old_sep = SEPARATOR\n        if SEPARATOR == \":\":\n            # (since it is used in URLs for HTTP checker and we don't\n            # have a defined way to escape it)\n            warn(\"Not smart to use : as separator for services, using ;\")\n            SEPARATOR = \";\"\n        header(\"#ip/sysname:handler[:arg=value[:arg=value]]\")\n        all_services = nav.models.service.Service.objects.all()\n        for service in all_services.prefetch_related('properties'):\n            line = [service.netbox.sysname, service.handler]\n            properties = [\n                \"%s=%s\" % (p.property, p.value) for p in service.properties.all()\n            ]\n            line.extend(properties)\n            lineout(line)\n        SEPARATOR = old_sep\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "python/nav/bin/naventity.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2014, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA command line program to output an entity hierarchy graph from a device's\nENTITY-MIB::entPhysicalTable.\n\"\"\"\n\nimport sys\nimport argparse\n\nimport asciitree\nimport networkx\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.util import is_valid_ip\nfrom nav.ipdevpoll.snmp.common import SnmpError, SNMPParameters\nfrom nav.ipdevpoll.snmp import AgentProxy, snmpprotocol\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.models.manage import Netbox\n\nfrom twisted.internet import reactor, defer\n\n_exit_code = 0\nTIMEOUT = SNMPParameters.DEFAULT_TIMEOUT\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    options = parse_args()\n\n    if options.device:\n        reactor.callWhenRunning(\n            reactor_main, options.device, options.port, options.timeout\n        )\n        reactor.run()\n        sys.exit(_exit_code)\n\n\ndef reactor_main(box, portnumber, timeout=TIMEOUT):\n    \"\"\"The main function to start in the event reactor\"\"\"\n    header = \"{sysname} ({ip}:{port})\".format(port=portnumber, **vars(box))\n    print(header)\n    print(\"-\" * len(header))\n    df = defer.ensureDeferred(collect_entities(box, portnumber, timeout))\n    df.addCallback(make_graph, box)\n    df.addCallback(print_graph)\n    df.addErrback(failure_handler)\n    df.addBoth(endit)\n    return df\n\n\nasync def collect_entities(netbox, portnumber, timeout=TIMEOUT):\n    \"\"\"Collects the entPhysicalTable\"\"\"\n    agent = _create_agentproxy(netbox, portnumber, timeout)\n    if not agent:\n        return None\n\n    mib = EntityMib(agent)\n    result = await mib.get_entity_physical_table()\n    return result\n\n\ndef make_graph(entities, netbox):\n    \"\"\"Makes a NetworkX DiGraph from the entPhysicalTable result\"\"\"\n    graph = networkx.DiGraph(name=\"%s entPhysicalTable\" % netbox)\n    for index, entity in entities.items():\n        container = entity.get('entPhysicalContainedIn', None)\n        if container and container in entities:\n            graph.add_edge(index, container)\n        only_string_data = {k: v for k, v in entity.items() if isinstance(k, str)}\n        graph.add_node(index, **only_string_data)\n    return graph\n\n\ndef print_graph(graph):\n    \"\"\"Prints an ASCII representation of a NetworkX DiGraph tree to stdout\"\"\"\n    traversal = GraphTraversal(graph)\n    for root in traversal.get_roots():\n        output = asciitree.LeftAligned(traverse=traversal)(root)\n        print(output)\n    return graph\n\n\ndef failure_handler(failure):\n    \"\"\"Sets a non-zero exit code on failures\"\"\"\n    global _exit_code\n    _exit_code = 1\n    return failure\n\n\ndef endit(result):\n    \"\"\"Stops the reactor\"\"\"\n    from twisted.python.failure import Failure\n\n    if isinstance(result, Failure):\n        result.printTraceback(sys.stderr)\n    reactor.stop()\n    return result\n\n\ndef parse_args():\n    \"\"\"Parses the command line arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Outputs entity hierarchy graph from a device's \"\n        \"ENTITY-MIB::entPhysicalTable response\",\n        usage=\"%(prog)s device\",\n    )\n    parser.add_argument(\n        'device',\n        type=device,\n        help=\"The NAV-monitored IP device to query. Must be either \"\n        \"a sysname prefix or an IP address.\",\n    )\n    parser.add_argument(\n        \"--port\",\n        \"-p\",\n        type=int,\n        help=\"change the portnumber, [default: 161]\",\n        metavar=\"PORT\",\n        default=161,\n    )\n    parser.add_argument(\n        \"--timeout\",\n        \"-t\",\n        type=float,\n        help=f\"set a non-standard timeout in seconds, [default: {TIMEOUT}]\",\n        default=TIMEOUT,\n    )\n    return parser.parse_args()\n\n\ndef device(devicestring):\n    \"\"\"Converts a device specification string into a Netbox object\"\"\"\n    netbox = None\n    ip = is_valid_ip(devicestring)\n    if ip:\n        try:\n            netbox = Netbox.objects.get(ip=ip)\n        except Netbox.DoesNotExist:\n            pass\n\n    if not netbox:\n        netbox = Netbox.objects.filter(sysname__startswith=devicestring)\n        if len(netbox) > 1:\n            msg = \"%s matches multiple IP devices: %s\" % (\n                devicestring,\n                \", \".join(box for box in netbox),\n            )\n            raise argparse.ArgumentTypeError(msg)\n        elif len(netbox) == 0:\n            msg = \"No match found for %s\" % devicestring\n            raise argparse.ArgumentTypeError(msg)\n        else:\n            netbox = netbox[0]\n\n    if not netbox.get_preferred_snmp_management_profile():\n        msg = \"No SNMP management profile set for %s\" % netbox\n        raise argparse.ArgumentTypeError(msg)\n\n    return netbox\n\n\ndef _create_agentproxy(netbox, portnumber, timeout=TIMEOUT):\n    params = SNMPParameters.factory(netbox, timeout=timeout)\n    if not params:\n        return\n\n    port = snmpprotocol.port()\n    agent = AgentProxy(\n        netbox.ip, portnumber, protocol=port.protocol, snmp_parameters=params\n    )\n    try:\n        agent.open()\n    except SnmpError:\n        agent.close()\n        raise\n    else:\n        return agent\n\n\nclass GraphTraversal(asciitree.Traversal):\n    def __init__(self, graph):\n        super(GraphTraversal, self).__init__()\n        self.graph = graph\n\n    def get_children(self, node):\n        return [u for u, v in self.graph.in_edges(node)]\n\n    def get_text(self, node):\n        ent = self.graph.nodes[node]\n        labels = [\n            ent.get('entPhysicalName'),\n            \"[{}]\".format(ent.get('entPhysicalClass')),\n        ]\n        serial = ent.get('entPhysicalSerialNum', None)\n        if serial:\n            labels.append('({})'.format(serial))\n\n        software = ent.get('entPhysicalSoftwareRev', None)\n        if software:\n            labels.append('(sw={})'.format(software))\n\n        return \" \".join(labels)\n\n    def get_roots(self):\n        return [n for n, d in self.graph.out_degree() if d == 0]\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navmain.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: list -*-\n#\n# Copyright (C) 2006, 2011, 2016, 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Command line program to control NAV processes\"\"\"\n\nimport sys\nimport os\nimport os.path\nimport argparse\nimport textwrap\n\nfrom nav import colors\n\ntry:\n    from nav.startstop import ServiceRegistry, CommandFailedError, CrontabError\nexcept ImportError:\n    print(\n        \"Fatal error: Could not find the nav.startstop module.\\nIs your \"\n        \"PYTHONPATH environment correctly set up?\",\n        file=sys.stderr,\n    )\n    sys.exit(1)\n\ntry:\n    SERVICES = ServiceRegistry()\nexcept (OSError, CrontabError) as _error:\n    print(\n        \"A problem occurred, which prevented this command from running.\\n\"\n        + str(_error),\n        file=sys.stderr,\n    )\n    sys.exit(1)\n\n\ndef main(args=None):\n    \"\"\"Main execution point\"\"\"\n    if args is None:\n        parser = make_argparser()\n        args = parser.parse_args()\n    try:\n        args.func(args)\n    except AttributeError:\n        parser.print_help(sys.stderr)\n        sys.exit(0)\n\n\ndef make_argparser():\n    \"\"\"Builds and returns an ArgumentParser instance for this program\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"This command is your interface to start, stop and query \"\n        \"NAV services.\",\n        epilog=\"The selected command will be applied to all known services, \"\n        \"unless you specify a list of services after the command.\",\n    )\n    parser.add_argument(\n        \"--nonroot\",\n        action=\"store_true\",\n        help=\"don't complain about not having root privileges\",\n    )\n    parser.add_argument(\n        \"--verbose\",\n        \"-V\",\n        action=\"store_true\",\n        help=\"let output from subcommands pass through\",\n    )\n\n    self = sys.modules[__name__]\n    commands = sorted(\n        (name.replace('c_', ''), func)\n        for name, func in vars(self).items()\n        if name.startswith('c_') and callable(func)\n    )\n    all_services = sorted(SERVICES.keys())\n    subparsers = parser.add_subparsers()\n    for command, func in commands:\n        subp = subparsers.add_parser(command, help=func.__doc__)\n        subp.add_argument(\"service\", nargs=\"*\", default=all_services)\n        subp.set_defaults(func=func)\n\n    _add_bespoke_subparsers(subparsers)\n\n    return parser\n\n\ndef _add_bespoke_subparsers(subparsers):\n    config = subparsers.add_parser(\n        \"config\", help=\"query or manipulate NAV configuration\"\n    )\n    config_sub = config.add_subparsers()\n    where = config_sub.add_parser(\n        \"where\",\n        help=\"find and report the location of the main NAV configuration file\",\n    )\n    where.set_defaults(func=command_config_where)\n\n    path = config_sub.add_parser(\n        \"path\",\n        help=\"prints a list of filesystem locations \"\n        \"where NAV will search for configuration \"\n        \"files\",\n    )\n    path.set_defaults(func=command_config_path)\n\n    install = config_sub.add_parser(\n        \"install\",\n        help=\"installs a copy of the default NAV \"\n        \"configuration file tree in a target \"\n        \"directory\",\n    )\n    install.add_argument(\n        'target_directory', help=\"the directory in which to install the config files\"\n    )\n    install.add_argument(\n        '--overwrite',\n        action=\"store_true\",\n        help=\"overwrite existing config files in target directory\",\n    )\n    install.add_argument(\n        '--verbose',\n        '-v',\n        action=\"store_true\",\n        help=\"print the full path of all copied files\",\n    )\n    install.set_defaults(func=command_config_install)\n\n\ndef verify_root():\n    \"\"\"Verifies that a user has root privileges, if they are needed\"\"\"\n    if os.geteuid() != 0:\n        print(\"You should be root to run this command.\", file=sys.stderr)\n        sys.exit(10)\n\n\ndef service_iterator(query_list, func):\n    \"\"\"Iterate through a list of service names, look up each service instance\n    and call func using this instance as its argument.\n    \"\"\"\n    unknowns = []\n    for name in query_list:\n        if name in SERVICES:\n            func(SERVICES[name])\n        else:\n            unknowns.append(name)\n    if len(unknowns):\n        sys.stderr.write(\"Unknown services: %s\\n\" % \" \".join(unknowns))\n\n\ndef action_iterator(query_list, action, ok_string, fail_string, verbose=False):\n    \"\"\"Iterates through a list of service names, performing an action on each\n    of them.\n    \"\"\"\n    failed = []\n    unknowns = []\n    errors = []\n\n    any_ok = False\n    for name in query_list:\n        if name in SERVICES:\n            method = getattr(SERVICES[name], action)\n            try:\n                if method(silent=not verbose):\n                    if not any_ok:\n                        any_ok = True\n                        print(ok_string + \":\", end=' ')\n                    colors.print_color(name + ' ', colors.COLOR_GREEN, newline=False)\n                    sys.stdout.flush()\n                else:\n                    failed.append(name)\n            except CommandFailedError as error:\n                errors.append((name, error))\n        else:\n            unknowns.append(name)\n    if any_ok:\n        print()\n\n    if len(failed):\n        print(\"%s:\" % fail_string, end=' ')\n        colors.print_color(\" \".join(failed), colors.COLOR_RED)\n    if len(unknowns):\n        print(\"Unknown: %s\" % \" \".join(unknowns))\n    if len(errors):\n        print(\"Errors:\", end=' ')\n        print(\" \".join([\"%s (%s)\" % error for error in errors]))\n\n\n#\n# This group of commands work with services\n#\n\n\ndef c_info(args):\n    \"\"\"lists each service and their associated description\"\"\"\n    matched_services = []\n    max_length = 0\n    terminal_width = colors.get_terminal_width() or 79\n\n    def _service_printer(service):\n        name = (\"{:<%s} \" % max_length).format(service.name)\n        colors.print_color(name, colors.COLOR_GREEN, newline=False)\n\n        kind = service.__class__.__name__\n        if kind.endswith(\"Service\"):\n            kind = kind.removesuffix(\"Service\").lower()\n        kind = \"({})\".format(kind)\n        kind = \"{:>8}\".format(kind)\n        colors.print_color(kind, colors.COLOR_YELLOW, newline=False)\n\n        indent = \" \" * (max_length + 11)\n        info = textwrap.wrap(\n            service.info or \"N/A\",\n            width=terminal_width,\n            initial_indent=indent,\n            subsequent_indent=indent,\n        )\n        info = \"\\n\".join(info)\n        print(\": \" + info.strip())\n\n    def _append_to_service_list(service):\n        matched_services.append(service)\n\n    service_iterator(args.service, _append_to_service_list)\n    max_length = max(len(s.name) for s in matched_services) if matched_services else 0\n    for svc in matched_services:\n        _service_printer(svc)\n\n\ndef c_list(args):\n    \"\"\"lists all the available service names\"\"\"\n    service_iterator(args.service, lambda service: print(service.name))\n\n\ndef c_start(args):\n    \"\"\"starts services\"\"\"\n    if not args.nonroot:\n        verify_root()\n    from nav import config\n\n    try:\n        config.verify_nav_config(config.NAV_CONFIG)\n    except config.ConfigurationError as error:\n        sys.exit(\"There is a problem with nav.conf:\\n{}\".format(error))\n\n    action_iterator(args.service, \"start\", \"Starting\", \"Failed\", verbose=args.verbose)\n\n\ndef c_stop(args):\n    \"\"\"stops services\"\"\"\n    if not args.nonroot:\n        verify_root()\n    action_iterator(args.service, \"stop\", \"Stopping\", \"Failed\", verbose=args.verbose)\n\n\ndef c_restart(args):\n    \"\"\"restarts services\"\"\"\n    if not args.nonroot:\n        verify_root()\n    c_stop(args)\n    c_start(args)\n\n\ndef c_status(args):\n    \"\"\"reports the status of services\"\"\"\n    if not args.nonroot:\n        verify_root()\n    action_iterator(args.service, \"is_up\", \"Up\", \"Down\", verbose=args.verbose)\n\n\n#\n# This group of commands do not work with services, and may or may not take\n# arguments from the command line.\n#\n\n\ndef c_version(_args):\n    \"\"\"reports the currently installed NAV version\"\"\"\n    from nav import buildconf\n\n    print(\"NAV %s\" % buildconf.VERSION)\n\n\ndef command_config_where(_args):\n    \"\"\"reports the location of NAV's main configuration file\"\"\"\n    from nav.config import find_config_file, get_config_locations\n\n    path = find_config_file('nav.conf')\n    if path:\n        print(path)\n    else:\n        sys.exit(\n            \"Could not find nav.conf in any of these locations:\\n{}\".format(\n                '\\n'.join(str(loc) for loc in get_config_locations())\n            )\n        )\n\n\ndef command_config_path(_args):\n    \"\"\"Prints the list of file system locations NAV will search for config\"\"\"\n    from nav.config import get_config_locations\n\n    for path in get_config_locations():\n        print(path)\n\n\ndef command_config_install(args):\n    \"\"\"Installs a copy of the example config files in a target directory\"\"\"\n    from nav.config import install_example_config_files\n\n    callback = print if args.verbose else None\n\n    try:\n        install_example_config_files(\n            args.target_directory, overwrite=args.overwrite, callback=callback\n        )\n    except (OSError, IOError) as error:\n        sys.exit(error)\n\n\n##############\n# begin here #\n##############\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navoidverify.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: .1.3.6.1.2.1.1.2 -*-\n#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA command line program to verify support for SNMP subtrees in sets of\nNAV-monitored devices.\n\"\"\"\n\nimport platform\nimport sys\nfrom itertools import cycle\nfrom argparse import ArgumentParser\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nif platform.system() == \"Linux\":\n    from nav.ipdevpoll.epollreactor2 import install\n\n    install()\n\nfrom nav.ipdevpoll.snmp.common import SNMPParameters, SnmpError\nfrom nav.models.manage import Netbox, ManagementProfile\nfrom nav.ipdevpoll.snmp import snmpprotocol, AgentProxy\nfrom nav.oids import OID\n\nfrom twisted.internet import reactor, defer, task\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    options = parse_args()\n\n    sysnames = [n.strip() for n in sys.stdin.readlines()]\n    if sysnames:\n        boxes = Netbox.objects.filter(sysname__in=sysnames)\n    else:\n        boxes = Netbox.objects.filter(\n            profiles__protocol=ManagementProfile.PROTOCOL_SNMP\n        )\n\n    if boxes:\n        reactor.callWhenRunning(reactor_main, list(boxes), options.baseoid)\n        reactor.run()\n\n\ndef reactor_main(boxes, baseoid):\n    \"\"\"The main function to start in the event reactor\"\"\"\n    df = parallel(boxes, 50, verify, baseoid)\n    return df.addCallback(endit)\n\n\nasync def verify(netbox, oid):\n    \"\"\"Verifies a GETNEXT response from below the oid subtree\"\"\"\n    agent = _create_agentproxy(netbox)\n    if not agent:\n        return False\n\n    result = await agent.walk(str(oid))\n    agent.close()\n\n    if hasattr(result, 'items'):\n        result = result.items()\n    for key, _value in result:\n        if oid.is_a_prefix_of(key):\n            print(netbox.sysname)\n            return True\n    return False\n\n\ndef endit(_result):\n    \"\"\"Stops the reactor\"\"\"\n    reactor.stop()\n\n\ndef parse_args():\n    \"\"\"Parses the command line arguments\"\"\"\n    parser = ArgumentParser(\n        description=\"Verifies SNMP sub-tree support on a set of NAV-monitored devices\",\n        usage=\"%(prog)s baseoid < sysnames.txt\",\n        epilog=(\n            \"Given the root of an SNMP MIB module, a bunch of devices can \"\n            \"be queried in parallel whether they have any objects below \"\n            \"the given BASEOID - effectively verifying MIB support in \"\n            \"these devices.\"\n        ),\n    )\n    parser.add_argument(\n        'baseoid',\n        type=OID,\n        help=\"The base OID for which a GETNEXT operation will be performed\",\n    )\n    return parser.parse_args()\n\n\ndef parallel(iterable, count, func, *args, **kwargs):\n    \"\"\"Limits the number of parallel requests to count\"\"\"\n    coop = task.Cooperator()\n    work = (defer.ensureDeferred(func(elem, *args, **kwargs)) for elem in iterable)\n    return defer.DeferredList(\n        [coop.coiterate(work) for _ in range(count)], consumeErrors=True\n    )\n\n\n_ports = cycle([snmpprotocol.port() for _ in range(50)])\n\n\ndef _create_agentproxy(netbox):\n    params = SNMPParameters.factory(netbox)\n    if not params:\n        return\n\n    port = next(_ports)\n    agent = AgentProxy(netbox.ip, 161, protocol=port.protocol, snmp_parameters=params)\n    try:\n        agent.open()\n    except SnmpError:\n        agent.close()\n        raise\n    else:\n        return agent\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navrefresh.py",
    "content": "#!/usr/bin/env python3\n# -*- testargs: -h -*-\n#\n# Copyright 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A command line interface to send refresh commands to a running ipdevpoll daemon\"\"\"\n\nimport argparse\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom django.db import transaction\nfrom nav.models.manage import Netbox\nfrom nav.event2 import EventFactory\n\nRefreshEvent = EventFactory(\"devBrowse\", \"ipdevpoll\", event_type=\"notification\")\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    args = parse_args()\n    if not args.netbox:\n        sys.exit(f\"Sysname pattern {args.netbox.pattern!r} matched nothing\")\n\n    send_refresh_events(args.netbox, args.job)\n\n\n@transaction.atomic\ndef send_refresh_events(netboxes: list[Netbox], job: str):\n    \"\"\"Sends refresh events for all selected netboxes for the selected job\"\"\"\n    for netbox in netboxes:\n        print(f\"Sending refresh event for {netbox.sysname} job {job}\")\n        event = RefreshEvent.notify(netbox=netbox, subid=job)\n        event.save()\n\n\ndef parse_args():\n    \"\"\"Builds an ArgumentParser and returns parsed program arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Sends job refresh commands to a running ipdevpoll daemon\",\n    )\n    parser.add_argument(\n        \"netbox\",\n        type=SysnamePattern,\n        help=\"sysname (or sysname prefix) of devices that should be refreshed. Be \"\n        \"aware that multiple devices can match.\",\n    )\n    parser.add_argument(\"job\", type=non_empty_string, help=\"ipdevpoll job to refresh.\")\n    return parser.parse_args()\n\n\nclass SysnamePattern(list):\n    \"\"\"Looks up netboxes based on sysname patterns from arguments\"\"\"\n\n    def __init__(self, pattern: str):\n        super().__init__()\n        self.pattern = pattern.strip() if pattern else \"\"\n        if not self.pattern:\n            raise ValueError(\"sysname pattern cannot be empty\")\n        self.extend(Netbox.objects.filter(sysname__startswith=self.pattern))\n\n\ndef non_empty_string(value: str):\n    \"\"\"Validates a string to be non-empty\"\"\"\n    if not value.strip():\n        raise argparse.ArgumentTypeError(\"cannot be empty\")\n    return value.strip()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navsnmp.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Outputs NAV's SNMP configuration for input devices as NET-SNMP compatible command\nline arguments.\n\n\"\"\"\n\nimport argparse\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.models.manage import Netbox\nfrom IPy import IP\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    args = parse_args()\n    if args.sysname:\n        boxes = get_matching_boxes([args.sysname])\n    else:\n        boxes = get_matching_boxes(sys.stdin.readlines())\n\n    for netbox in boxes:\n        snmp_printer(netbox)\n\n\ndef parse_args():\n    \"\"\"Builds an ArgumentParser and returns parsed program arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=__doc__.replace(\"\\n\", \" \").strip(),\n        epilog=\"Example usage:\\nsnmpwalk $(%(prog)s example-sw.example.org) \"\n        \"SNMPv2-MIB::system \",\n    )\n    parser.add_argument(\n        \"sysname\",\n        nargs='?',\n        help=\"sysname of device whose configuration should be \"\n        \"output. If omitted, a list of names is taken \"\n        \"from stdin instead.\",\n    )\n    return parser.parse_args()\n\n\ndef get_matching_boxes(patterns):\n    result = []\n    for pattern in patterns:\n        sysname = pattern.strip()\n        boxes = Netbox.objects.filter(sysname__startswith=sysname)\n        if boxes:\n            result.extend(boxes)\n        else:\n            print(\"no match for %s\" % pattern, file=sys.stderr)\n    return result\n\n\ndef snmp_printer(netbox):\n    profile = netbox.get_preferred_snmp_management_profile()\n    try:\n        version = profile.snmp_version\n        if version == 2:\n            version = \"2c\"\n    except (AttributeError, ValueError):\n        version = None\n\n    if not profile or not version:\n        print(\"%s has no valid SNMP configuration in NAV\" % netbox, file=sys.stderr)\n        return\n\n    ipaddr = IP(netbox.ip)\n    if ipaddr.version() == 6:\n        ipaddr = \"ipv6:[%s]\" % ipaddr\n\n    print(\"# {}\".format(netbox.sysname), file=sys.stderr)\n\n    args = [f\"-v{version}\"]\n    if version != 3:\n        args.append(f\"-c {profile.snmp_community}\")\n    else:\n        conf = profile.configuration\n        args.extend([\"-l\", conf[\"sec_level\"], \"-u\", conf[\"sec_name\"]])\n        if conf.get(\"auth_protocol\"):\n            args.extend([\"-a\", conf.get(\"auth_protocol\")])\n        if conf.get(\"auth_password\"):\n            args.extend([\"-A\", conf.get(\"auth_password\")])\n        if conf.get(\"priv_protocol\"):\n            args.extend([\"-x\", conf.get(\"priv_protocol\")])\n        if conf.get(\"priv_password\"):\n            args.extend([\"-X\", conf.get(\"priv_password\")])\n\n    args.append(ipaddr)\n\n    print(\" \".join(str(i) for i in args))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navstats.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Sends NAV statistics to the Carbon collector\"\"\"\n\nimport logging\nimport time\nfrom functools import partial\nimport configparser\n\nfrom django.db import connection, DatabaseError\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.config import NAVConfigParser\nfrom nav.logs import init_generic_logging\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.names import escape_metric_name\n\n_logger = logging.getLogger('nav.navstats')\nLOGFILE = 'navstats.log'\n\n\nclass NAVStatsConfig(NAVConfigParser):\n    \"\"\"Configparser for NAVStats\"\"\"\n\n    DEFAULT_CONFIG_FILES = ('navstats.conf',)\n\n\ndef main():\n    init_generic_logging(logfile=LOGFILE, stderr=False)\n    config = NAVStatsConfig()\n    collect_stats(config)\n\n\ndef collect_stats(config):\n    \"\"\"Collect stats with given config\n\n    :type config: NAVStatsConfig\n    \"\"\"\n    _logger.info('--> Starting stats collection <--')\n\n    for section in config.sections():\n        _logger.info(\"Collecting statistic %s\", section)\n        try:\n            get = partial(config.get, section)\n            collect(get('path'), get('query'), int(get('valueindex')))\n        except (DatabaseError, configparser.Error, ValueError) as error:\n            _logger.error('Error collecting stats for %s: %s', section, error)\n\n    _logger.info('--> Stats collection done <--')\n\n\ndef collect(metric_path_fmt, query, valueindex):\n    \"\"\"Collect and store a statistic based on the result of the query\n\n    :param metric_path_fmt: The metric path format to use. Note that the\n    number of columns in the result of the query must match the format.\n    :param query: SQL query to run to get values\n    :param valueindex: The index of the result in the row\n    \"\"\"\n\n    assert metric_path_fmt and query\n\n    timestamp = int(time.time())\n\n    with connection.cursor() as cursor:\n        cursor.execute(query)\n        metrics = [\n            create_metric(result, metric_path_fmt, timestamp, valueindex)\n            for result in cursor.fetchall()\n        ]\n    send_metrics(metrics)\n\n\ndef create_metric(result, metric_path_fmt, timestamp, valueindex=-1):\n    \"\"\"Create a metric ready for sending to carbon\n\n    :param result: the database row\n    :param metric_path_fmt: a string format to turn into a metric path\n    :param timestamp: timestamp used in metric\n    :param valueindex: The index of the result in the row\n    :return: a metric tuple suitable for sending to carbon\n    \"\"\"\n    args = [escape_metric_name(str(x)) for x in result]\n    metric_path = metric_path_fmt.format(*args)\n    value = result[valueindex]\n    _logger.debug('%s - %s:%s', metric_path, timestamp, value)\n    return metric_path, (timestamp, value)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navsynctypes.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2006, 2010, 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This script produces PostgreSQL INSERT (or actually, \"UPSERT\") statements suitable\nto synchronize the IP Device type registry of one NAV installation based on the\ninformation contained in another.\n\"\"\"\n\nimport argparse\n\nimport nav.db\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(\"synctypes\")\nfrom nav.models.manage import NetboxType\n\n\nVENDOR_INSERT_SQL_TEMPLATE = \"\"\"\nINSERT INTO vendor\n(SELECT {vendorid} AS vendorid\n WHERE NOT EXISTS (\n  SELECT vendorid FROM vendor WHERE vendorid ILIKE {vendorid}\n )\n);\n\"\"\"\n\nTYPE_UPSERT_SQL_TEMPLATE = \"\"\"\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr)\nVALUES (\n  (SELECT vendorid FROM vendor WHERE vendorid ILIKE {vendorid}),\n  {typename},\n  {sysobjectid},\n  {descr}\n) ON CONFLICT (sysobjectid) DO UPDATE\n  SET\n    vendorid=(SELECT vendorid FROM vendor WHERE vendorid ILIKE {vendorid}),\n    typename={typename},\n    descr={descr};\n\n\"\"\"\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    parse_args()\n    types = NetboxType.objects.all().select_related(\"vendor\")\n    used_vendors = {t.vendor.id for t in types}\n    if types:\n        print(\"-- This SQL script needs at least PostgreSQL 9.5 to work --\")\n        print(\"BEGIN;\\n\")\n        print(\"-- Vendor definitions --\\n\")\n        for vendor in used_vendors:\n            print_vendor(vendor)\n\n        print(\"-- Netbox type definitions --\\n\")\n        for typ in types:\n            print_type(typ)\n\n        print(\"\\nCOMMIT;\")\n\n\ndef print_vendor(vendor: str):\n    \"\"\"Prints an SQL statement to ensure a vendor entry is synced.\n\n    Vendor ID's are case sensitive, so the statement will try work case\n    insensitively to avoid inserting 'duplicate' records due to casing changes.\n    \"\"\"\n    sql = VENDOR_INSERT_SQL_TEMPLATE.format(vendorid=escape(vendor))\n    print(sql)\n\n\ndef print_type(typ: NetboxType):\n    \"\"\"Prints an SQL statement to ensure a type entry is synced\"\"\"\n    sql = TYPE_UPSERT_SQL_TEMPLATE.format(\n        vendorid=escape(typ.vendor.id),\n        typename=escape(typ.name),\n        sysobjectid=escape(typ.sysobjectid),\n        descr=escape(typ.description),\n    )\n    print(sql)\n\n\ndef escape(v):\n    \"\"\"Escape a value before entering it in to the db\"\"\"\n    return nav.db.escape(str(v)) if v is not None else \"NULL\"\n\n\ndef parse_args():\n    \"\"\"Parses command line arguments using argparse\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"NAV type registry synchronizer\",\n        epilog=\"This program dumps this NAV installation's IP device type registry to \"\n        \"STDOUT as a PostgreSQL compatible script. The resulting script can be used to \"\n        \"synchronize the type registry of another NAV installation. The script will \"\n        \"add missing types and update existing type names and descriptions.\",\n    )\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "python/nav/bin/navtopology.py",
    "content": "#!/usr/bin/env python\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.topology.detector import main\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/navuser.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: list -*-\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA command line interface to list and modify NAV web user accounts\n\"\"\"\n\nimport sys\nimport argparse\nfrom getpass import getpass\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.models.profiles import Account, AccountGroup\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    args = parse_args()\n\n    args.func(args)\n\n\ndef listusers(args):\n    accounts = Account.objects.order_by('login')\n    if args.verbose:\n        longest1 = max(len(acc.login) for acc in accounts)\n        longest2 = max(len(acc.name) for acc in accounts)\n        msg = \"{login:%ss}  {name:%ss}  {attrs}\" % (longest1, longest2)\n    else:\n        msg = \"{login}\"\n\n    for account in accounts:\n        attrs = []\n        if account.ext_sync:\n            attrs.append(account.ext_sync)\n        if account.locked:\n            attrs.append('locked')\n        attrs = '[%s]' % ','.join(attrs) if attrs else ''\n        print(msg.format(login=account.login, name=account.name, attrs=attrs).strip())\n\n\ndef adduser(args):\n    try:\n        Account.objects.get(login=args.login)\n        print(\"User %s already exists\" % args.login, file=sys.stderr)\n        sys.exit(1)\n    except Account.DoesNotExist:\n        pass\n\n    account = Account(login=args.login, name=args.name)\n    account.save()\n\n    if args.admin:\n        admin = AccountGroup.objects.get(id=AccountGroup.ADMIN_GROUP)\n        admin.accounts.add(account)\n        msg = \"Admin user %s created\"\n    else:\n        msg = \"User %s created\"\n\n    print(msg % args.login, file=sys.stderr)\n\n\ndef removeuser(args):\n    args.login.delete()\n    print(\"User %s has been removed\" % args.login.login, file=sys.stderr)\n\n\ndef adminify(args):\n    action = args.action\n    try:\n        account = Account.objects.get(login=args.login)\n    except Account.DoesNotExist:\n        print(\"User %s does not exist\" % args.login, file=sys.stderr)\n        sys.exit(1)\n\n    if action == 'add':\n        admin = AccountGroup.objects.get(id=AccountGroup.ADMIN_GROUP)\n        admin.accounts.add(account)\n        msg = \"User %s was made an admin\" % args.login\n    elif action == 'remove':\n        admin = AccountGroup.objects.get(id=AccountGroup.ADMIN_GROUP)\n        admin.accounts.remove(account)\n        msg = \"User %s is no longer an admin\" % args.login\n    else:\n        msg = \"Unknown argument %s\" % action\n    print(msg, file=sys.stderr)\n\n\ndef passwd(args):\n    account = args.login\n    if sys.stdin.isatty():\n        if account.password and not args.noverify:\n            password = getpass('(current) NAV password: ', stream=sys.stderr)\n            if not account.check_password(password):\n                print(\"Authentication error\", file=sys.stderr)\n                sys.exit(1)\n\n        password = getpass('Enter new NAV password: ', stream=sys.stderr)\n        password2 = getpass('Retype new NAV password: ', stream=sys.stderr)\n        if password2 != password:\n            print(\"Sorry, passwords do not match\", file=sys.stderr)\n            sys.exit(2)\n    else:\n        password = sys.stdin.readline().strip('\\n')\n\n    if len(password) >= Account.MIN_PASSWD_LENGTH:\n        account.set_password(password)\n        account.save()\n        print(\"New password saved\", file=sys.stderr)\n    else:\n        print(\n            \"Password must be at least {} characters\".format(Account.MIN_PASSWD_LENGTH),\n            file=sys.stderr,\n        )\n        sys.exit(3)\n\n\ndef verify(args):\n    account = args.login\n    if sys.stdin.isatty():\n        try:\n            password = getpass('Password: ', stream=sys.stderr)\n        except KeyboardInterrupt:\n            sys.exit(\"Interrupted\")\n    else:\n        password = sys.stdin.readline().strip('\\n')\n\n    if not account.check_password(password):\n        sys.exit(\"Password could not be verified\")\n\n\ndef lock(args):\n    args.login.locked = True\n    if args.login.locked:\n        args.login.save()\n        print(\"User %s locked\" % args.login.login, file=sys.stderr)\n    else:\n        print(\"Cannot lock %s\" % args.login.login, file=sys.stderr)\n        sys.exit(1)\n\n\ndef unlock(args):\n    args.login.locked = False\n    if args.login.locked:\n        print(\"Cannot unlock %s\" % args.login.login, file=sys.stderr)\n        sys.exit(1)\n    else:\n        args.login.save()\n        print(\"User %s unlocked\" % args.login.login, file=sys.stderr)\n\n\n##########################\n#                        #\n# Other helper functions #\n#                        #\n##########################\n\n\ndef usergetter(login):\n    try:\n        return Account.objects.get(login=login)\n    except Account.DoesNotExist:\n        raise argparse.ArgumentTypeError(\"No such user account: %s\" % login)\n\n\ndef parse_args():\n    \"\"\"Builds an ArgumentParser and returns parsed program arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Lists and manipulates NAV web user accounts\"\n    )\n    subparsers = parser.add_subparsers(help='sub-command help', dest=\"command\")\n    subparsers.required = True\n\n    listparser = subparsers.add_parser('list', help='Lists user accounts')\n    listparser.add_argument(\n        '--verbose', '-v', action='store_true', help=\"Be verbose about it\"\n    )\n    listparser.set_defaults(func=listusers)\n\n    passwdparser = subparsers.add_parser(\n        'passwd', help='Sets the password of a user account'\n    )\n    passwdparser.add_argument(\n        'login', type=usergetter, help=\"The login name of the user\"\n    )\n    passwdparser.add_argument(\n        '--noverify', '-n', action='store_true', help=\"Do not verify existing password\"\n    )\n    passwdparser.set_defaults(func=passwd)\n\n    verifyparser = subparsers.add_parser(\n        'verify', help='Verifies the password of a user account'\n    )\n    verifyparser.add_argument(\n        'login', type=usergetter, help=\"The login name of the user\"\n    )\n    verifyparser.set_defaults(func=verify)\n\n    addparser = subparsers.add_parser('add', help='Adds a new user account')\n    addparser.add_argument('login', help=\"The login name of the user\")\n    addparser.add_argument('--name', '-n', default='', help=\"The full name of the user\")\n    addparser.add_argument(\n        '--admin', action='store_true', help=\"Give the user full admin access\"\n    )\n    addparser.set_defaults(func=adduser)\n\n    removeparser = subparsers.add_parser('remove', help='Removes a user')\n    removeparser.set_defaults(func=removeuser)\n    removeparser.add_argument(\n        'login', type=usergetter, help=\"The login name of the user\"\n    )\n\n    adminifyparser = subparsers.add_parser(\n        'admin', help='Sets whether an existing user belongs to the admin group'\n    )\n    adminifyparser.add_argument('login', help=\"The login name of the user\")\n    adminifyparser.set_defaults(func=adminify)\n    adminifygroupparser = adminifyparser.add_mutually_exclusive_group(required=True)\n    adminifygroupparser.add_argument(\n        '-a',\n        '--add',\n        dest='action',\n        help='Add the user to the admin group',\n        action='store_const',\n        const='add',\n    )\n    adminifygroupparser.add_argument(\n        '-r',\n        '--remove',\n        dest='action',\n        help='Remove the user from the admin group',\n        action='store_const',\n        const='remove',\n    )\n\n    lockparser = subparsers.add_parser('lock', help='Locks a user')\n    lockparser.set_defaults(func=lock)\n    lockparser.add_argument('login', type=usergetter, help=\"The login name of the user\")\n\n    unlockparser = subparsers.add_parser('unlock', help='Unlocks a user')\n    unlockparser.set_defaults(func=unlock)\n    unlockparser.add_argument(\n        'login', type=usergetter, help=\"The login name of the user\"\n    )\n\n    return parser.parse_args()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/netbiostracker.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Starter script for the netbios tracker\"\"\"\n\nimport logging\nimport time\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.netbiostracker import tracker\nfrom nav.netbiostracker.config import NetbiosTrackerConfig\nfrom nav.logs import init_generic_logging\n\n\n_logger = logging.getLogger('nav.netbiostracker')\nLOGFILE = 'netbiostracker.log'\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    init_generic_logging(logfile=LOGFILE, stderr=False)\n    config = NetbiosTrackerConfig()\n\n    start = time.time()\n    _logger.info('=== Starting netbiostracker ===')\n\n    addresses = tracker.get_addresses_to_scan(config.get_exceptions())\n    scanresult = tracker.scan(addresses, config.get_encoding())\n    parsed_results = tracker.parse(scanresult, config.get_encoding())\n    tracker.update_database(parsed_results)\n\n    _logger.info(\n        'Scanned %d addresses, got %d results in %.2f seconds',\n        len(addresses),\n        len(parsed_results),\n        time.time() - start,\n    )\n    _logger.info('Netbiostracker done')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/pping.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2020 Universitetet i Oslo\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nPings multiple hosts in parallel\n\"\"\"\n\nimport os\nimport sys\nimport signal\nimport argparse\nimport logging\n\nimport nav.daemon\nfrom nav.config import NAV_CONFIG\nfrom nav.daemon import safesleep as sleep\nfrom nav.logs import init_generic_logging\nfrom nav.statemon import statistics\nfrom nav.statemon import megaping\nfrom nav.statemon import db\nfrom nav.statemon import config\nfrom nav.statemon import circbuf\nfrom nav.statemon.event import Event\nfrom nav.statemon.netbox import Netbox\n\n\n_logger = logging.getLogger('nav.pping')\n\n\ndef main():\n    args = make_argparser().parse_args()\n\n    if os.getuid() != 0:\n        print(\"Must be started as root\")\n        sys.exit(1)\n\n    socket = megaping.make_sockets()  # make raw sockets while we have root\n    nav.daemon.switchuser(NAV_CONFIG['NAV_USER'])\n    start(args.foreground, socket)\n\n\ndef make_argparser():\n    parser = argparse.ArgumentParser(description=\"Parallel pinger daemon (part of NAV)\")\n    parser.add_argument(\n        \"-f\", \"--foreground\", action=\"store_true\", help=\"run in foreground\"\n    )\n    return parser\n\n\nclass Pinger(object):\n    def __init__(self, socket=None, foreground=False):\n        if not foreground:\n            signal.signal(signal.SIGHUP, self.signalhandler)\n        signal.signal(signal.SIGTERM, self.signalhandler)\n        signal.signal(signal.SIGINT, self.signalhandler)\n\n        self.config = config.pingconf()\n        init_generic_logging(stderr=True, read_config=True)\n        self._isrunning = 1\n        self._looptime = int(self.config.get(\"checkinterval\", 60))\n        _logger.info(\"Setting checkinterval=%i\", self._looptime)\n        self.db = db.db()\n        self.pinger = megaping.MegaPing(socket)\n        self._nrping = int(self.config.get(\"nrping\", 3))\n        # To keep status...\n        self.netboxmap = {}  # hash netboxid -> netbox\n        self.down = []  # list of netboxids down\n        self.replies = {}  # hash netboxid -> circbuf\n        self.ip_to_netboxid = {}\n\n    def update_host_list(self):\n        \"\"\"\n        Fetches all netboxes from the NAVdb, and updates\n        internal data structures.\n        \"\"\"\n        _logger.debug(\"Getting hosts from database...\")\n        netbox_included_groups = self.config.get(\"groups_included\", \"\").split()\n        netbox_excluded_groups = self.config.get(\"groups_excluded\", \"\").split()\n        hosts = self.db.hosts_to_ping(netbox_included_groups, netbox_excluded_groups)\n        netboxmap = {}\n        self.ip_to_netboxid = {}\n        for host in hosts:\n            netboxid, sysname, ip, up = host\n            netbox = Netbox(netboxid, sysname, ip, up)\n            if netbox.netboxid not in self.netboxmap:\n                # new netbox. Be sure to get it's state\n                if netbox.up != 'y':\n                    _logger.debug(\n                        \"Got new netbox, %s, currently marked down in navDB\",\n                        netbox.ip,\n                    )\n                    self.down.append(netbox.netboxid)\n            if netbox.netboxid not in self.replies:\n                self.replies[netbox.netboxid] = circbuf.CircBuf(self._nrping)\n                if netbox.up != 'y':\n                    self.replies[netbox.netboxid].reset_all_to(-1)\n            netboxmap[netbox.netboxid] = netbox\n            self.ip_to_netboxid[netbox.ip] = netbox.netboxid\n        # Update netboxmap\n        self.netboxmap = netboxmap\n        _logger.debug(\"We now got %i hosts in our list to ping\", len(self.netboxmap))\n        # then update our pinger object\n        self.pinger.set_hosts(self.ip_to_netboxid.keys())\n\n    def generate_events(self):\n        \"\"\"\n        Report state changes to event engine.\n        \"\"\"\n        _logger.debug(\"Checks which hosts didn't answer\")\n        answers = self.pinger.results()\n        for ip, rtt in answers:\n            # rtt = round trip time (-1 => host didn't reply)\n            netboxid = self.ip_to_netboxid.get(ip)\n            self.replies[netboxid].push(rtt)\n            netbox = self.netboxmap[netboxid]\n            if rtt != -1:\n                statistics.update(netbox.sysname, 'N', 'UP', rtt)\n            else:\n                # ugly...\n                statistics.update(netbox.sysname, 'N', 'DOWN', 5)\n\n        down_now = []\n        # Find out which netboxes to consider down\n        for netboxid, replies in self.replies.items():\n            if replies[: self._nrping] == [-1] * self._nrping:\n                down_now.append(netboxid)\n\n        _logger.debug(\"No answer from %i hosts\", len(down_now))\n        # Detect state changes since last run\n        report_down = set(down_now) - set(self.down)\n        report_up = set(self.down) - set(down_now)\n        self.down = down_now\n\n        # Reporting netboxes as down\n        _logger.debug(\"Starts reporting %i hosts as down\", len(report_down))\n        for netboxid in report_down:\n            netbox = self.netboxmap[netboxid]\n            new_event = Event(\n                None,\n                netbox.netboxid,\n                None,  # deviceid\n                Event.boxState,\n                \"pping\",\n                Event.DOWN,\n            )\n            self.db.new_event(new_event)\n            _logger.info(\"%s marked as down.\", netbox)\n        # Reporting netboxes as up\n        _logger.debug(\"Starts reporting %i hosts as up\", len(report_up))\n        for netboxid in report_up:\n            try:\n                netbox = self.netboxmap[netboxid]\n            except:\n                _logger.info(\"Netbox %s is no longer with us...\", netboxid)\n                continue\n            new_event = Event(\n                None,\n                netbox.netboxid,\n                None,  # deviceid\n                Event.boxState,\n                \"pping\",\n                Event.UP,\n            )\n            self.db.new_event(new_event)\n            _logger.info(\"%s marked as up.\", netbox)\n\n    def main(self):\n        \"\"\"\n        Loops until SIGTERM is caught.\n        \"\"\"\n        self.db.start()\n        while self._isrunning:\n            _logger.debug(\"Starts pinging....\")\n            self.update_host_list()\n            elapsedtime = self.pinger.ping()\n            self.generate_events()\n            _logger.info(\n                \"%i hosts checked in %03.3f secs. %i hosts currently marked as down.\",\n                len(self.netboxmap),\n                elapsedtime,\n                len(self.down),\n            )\n            wait = self._looptime - elapsedtime\n            if wait > 0:\n                _logger.debug(\"Sleeping %03.3f secs\", wait)\n            else:\n                wait = abs(self._looptime + wait)\n                _logger.warning(\n                    \"Check lasted longer than looptime. \"\n                    \"Delaying next check for %03.3f secs\",\n                    wait,\n                )\n            sleep(wait)\n\n    def signalhandler(self, signum, _frame):\n        if signum == signal.SIGTERM:\n            _logger.critical(\"Caught SIGTERM. Exiting.\")\n            sys.exit(0)\n        elif signum == signal.SIGINT:\n            _logger.critical(\"Caught SIGINT. Exiting.\")\n            sys.exit(0)\n        elif signum == signal.SIGHUP:\n            # reopen the logfile\n            conf = config.pingconf()\n            _logger.info(\"Caught SIGHUP. Reopening logfile...\")\n            logfile = open(conf.logfile, 'a')\n            nav.daemon.redirect_std_fds(stdout=logfile, stderr=logfile)\n\n            _logger.info(\"Reopened logfile: %s\", conf.logfile)\n        else:\n            _logger.critical(\"Caught %s. Resuming operation.\", signum)\n\n\ndef start(foreground, socket):\n    \"\"\"\n    Starts a new process, letting the service run as a daemon if `foreground`\n    is false.\n    \"\"\"\n    conf = config.pingconf()\n    pidfilename = \"pping.pid\"\n\n    if not foreground:\n        # Already running?\n        try:\n            nav.daemon.justme(pidfilename)\n        except nav.daemon.AlreadyRunningError as error:\n            sys.exit(\"pping is already running (pid: %s)\" % error.pid)\n        except nav.daemon.DaemonError as error:\n            sys.exit(error)\n\n        logfile = open(conf.logfile, \"a\")\n        nav.daemon.daemonize(pidfilename, stdout=logfile, stderr=logfile)\n    else:\n        nav.daemon.writepidfile(pidfilename)\n\n    my_pinger = Pinger(socket=socket, foreground=foreground)\n    my_pinger.main()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/radiusparser.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- notest -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n#\n\"\"\"Radius error log parser.\n\nThis program was written to run on a radius server, not on the NAV\nserver.  It has been written to not require any NAV libraries.\n\nIt will require psycopg, a PostgreSQL driver for Python.\n\"\"\"\n\nimport psycopg2\nimport sys\nimport os\n\nimport re\nfrom time import mktime, strptime\nimport datetime\n\n# Configuration settings.\n# Update these for your setup.\ndbhost = \"\"  # Hostname where the nav-database runs\ndbport = 5432  # Port the PostgreSQL database listens to\ndbname = \"nav\"  # Name of the NAV database\ndbuser = \"nav\"  # Username for the nav-database, usually 'nav'\ndbpasswd = \"\"  # Password for nav-user\ndb_radiuslog_table = \"radiuslog\"\n\nradius_logfile = \"\"  # Location of the freeradius-logfile to parse\nmy_logfile = \"./radiusparser.log\"  # Location of this program's debug log file\n\n\ndef main(args=None):\n    # If script is already running, abort\n    if pid_running():\n        sys.exit(1)\n    else:\n        print(\"Running instance of script not found. Starting...\")\n\n    if args is None:\n        args = sys.argv[1:]\n\n    try:\n        db_params = (dbhost, dbport, dbname, dbuser, dbpasswd)\n        connection = psycopg2.connect(\n            \"host=%s port=%s dbname=%s user=%s password=%s\" % db_params\n        )\n    except psycopg2.OperationalError as e:\n        print(\n            \"An error occured while connecting to the database:\\n\\n'%s'\" % (str(e)[:-1])\n        )\n        sys.exit(1)\n\n    connection.set_isolation_level(0)\n    database = connection.cursor()\n\n    # Start \"tail -f\" on radius_logfile\n    t = Tail(radius_logfile, only_new=True)\n    t.nextline()\n\n    # DEBUG-related\n    type = 0\n    message = 0\n    status = 0\n    user = 0\n    client = 0\n    port = 0\n\n    try:\n        # Open DEBUG Logfile.\n        f = open(my_logfile, 'w+')\n        f.write(\"\\n\\n\\n\\n****************** Script restarted *****************\\n\")\n\n        for line in t:\n            # Check if the line is parseable\n            try:\n                row = Row(parse_line(line))\n            except AttributeError:\n                print(\"AttributeError: \" + line)\n\n            # We want to look for octals in the messages\n            p = re.compile(r'(\\\\\\d\\d\\d)')\n\n            # Then parse the octals, this is a workaround since\n            # Freeradius encodes non-ascii characters with UTF8\n            # in octals and we need to let python evaluate them\n            # before they are chucked into the DB\n            if p.search(row.message):\n                row.message = parse_octals(row.message)\n                row.client = parse_octals(row.client)\n                row.user = parse_octals(row.user)\n\n            # Logging to find out what the maximum length of the db fields\n            # need to be\n\n            if len(row.type) > type:\n                type = len(row.type)\n                f.write(\"type:    %s\\n\" % str(type))\n\n            if len(row.message) > message:\n                message = len(row.message)\n                f.write(\"message: %s\\n\" % str(message))\n\n            if len(row.status) > status:\n                status = len(row.status)\n                f.write(\"status:  %s\\n\" % str(status))\n\n            if len(row.user) > user:\n                user = len(row.user)\n                f.write(\"user:    %s\\n\" % str(user))\n\n            if len(row.client) > client:\n                client = len(row.client)\n                f.write(\"client:  %s\\n\" % str(client))\n\n            if len(row.port) > port:\n                port = len(row.port)\n                f.write(\"port:    %s\\n\" % str(port))\n\n            f.flush()\n\n            # Don't insert successful logins in the database\n            if row.message != \"rlm_eap_mschapv2: Issuing Challenge\":\n                if row.status != \"Login OK\":\n                    sqlQuery = (\n                        \"INSERT INTO %s (time, type, message, status, username, \"\n                        \"client, port) VALUES (timestamp '%%s', %%s, %%s, %%s, %%s, \"\n                        \"%%s, %%s)\" % (db_radiuslog_table)\n                    )\n                    sqlParameters = (\n                        row.time,\n                        row.type,\n                        row.message,\n                        row.status,\n                        row.user,\n                        row.client,\n                        row.port,\n                    )\n                    try:\n                        database.execute(sqlQuery, sqlParameters)\n                    except psycopg2.ProgrammingError as e:\n                        # Write error to log\n                        f.write(\"Query failed:\\n\")\n                        f.write(str(e) + \"\\n\\n\\n\")\n                        f.flush()\n\n    except KeyboardInterrupt:\n        print(\"Interrupted by user...\")\n\n    database.close()\n    sys.exit()\n\n\n# Parses octals from the freeradius-server\ndef parse_octals(line):\n    def suboct(match):\n        return eval(\"'\" + match.group(1) + \"'\")\n        # Consider: eval(func,{\"__builtins__\":None},{})\n        # Maybe Not necessary here\n\n    ret = re.sub(r'(\\\\\\d\\d\\d)', suboct, line)\n\n    return ret\n\n\ndef pid_running(pidfile=\"/tmp/radiusparser_po.pid\"):\n    \"\"\"\n    Check if another instance of the script is running.\n    \"\"\"\n\n    try:\n        # Read pid from pidfile\n        pf = open(pidfile, 'r')\n        pid = int(pf.read().strip())\n        pf.close()\n    except (IOError, ValueError):\n        # If reading the pidfile failed\n        pid = None\n\n    try:\n        # Check if PID exists. If os.kill() throws exeption, it doesn't.\n        # If everything is OK, we let the previous instance run, and exit this\n        # one.\n        os.kill(pid, 0)\n        return True\n\n    except (OSError, TypeError):\n        # Create/update PID-file\n        pf = open(pidfile, 'w')\n        pf.write(str(os.getpid()))\n\n        return False\n\n\n##############################################################################\n# The Tail Class is written by Jon More, and is Copyright (C) 2005 by The\n# Trustees of the University of Pennsylvania\n##############################################################################\n__license__ = 'Python Software Foundation License'  # Grabbed from code.activestate.com\n\n\nfrom os import stat\nfrom os.path import abspath\nfrom stat import ST_SIZE\nfrom time import sleep, time\n\n\nclass Tail(object):\n    \"\"\"The Tail monitor object.\"\"\"\n\n    def __init__(\n        self, path, only_new=False, min_sleep=1, sleep_interval=1, max_sleep=60\n    ):\n        \"\"\"Initialize a tail monitor.\n        path: filename to open\n        only_new: By default, the tail monitor will start reading from\n          the beginning of the file when first opened. Set only_new to\n          True to have it skip to the end when it first opens, so that\n          you only get the new additions that arrive after you start\n          monitoring.\n        min_sleep: Shortest interval in seconds to sleep when waiting\n          for more input to arrive. Defaults to 1.0 second.\n        sleep_interval: The tail monitor will dynamically recompute an\n          appropriate sleep interval based on a sliding window of data\n          arrival rate. You can set sleep_interval here to seed it\n          initially if the default of 1.0 second doesn't work for you\n          and you don't want to wait for it to converge.\n        max_sleep: Maximum interval in seconds to sleep when waiting\n          for more input to arrive. Also, if this many seconds have\n          elapsed without getting any new data, the tail monitor will\n          check to see if the log got truncated (rotated) and will\n          quietly reopen itself if this was the case. Defaults to 60.0\n          seconds.\n        \"\"\"\n\n        # remember path to file in case I need to reopen\n        self.path = abspath(path)\n        self.f = open(self.path, \"r\")\n        self.min_sleep = min_sleep * 1.0\n        self.sleep_interval = sleep_interval * 1.0\n        self.max_sleep = max_sleep * 1.0\n        if only_new:\n            # seek to current end of file\n            file_len = stat(path)[ST_SIZE]\n            self.f.seek(file_len)\n        self.pos = self.f.tell()  # where am I in the file?\n        self.last_read = time()  # when did I last get some data?\n        self.queue = []  # queue of lines that are ready\n        self.window = []  # sliding window for dynamically\n        # adjusting the sleep_interval\n\n    def _recompute_rate(self, n, start, stop):\n        \"\"\"Internal function for recomputing the sleep interval. I get\n        called with a number of lines that appeared between the start and\n        stop times; this will get added to a sliding window, and I will\n        recompute the average interarrival rate over the last window.\n        \"\"\"\n        self.window.append((n, start, stop))\n        purge_idx = -1  # index of the highest old record\n        tot_n = 0  # total arrivals in the window\n        tot_start = stop  # earliest time in the window\n        tot_stop = start  # latest time in the window\n        for i, record in enumerate(self.window):\n            (i_n, i_start, i_stop) = record\n            if i_stop < start - self.max_sleep:\n                # window size is based on self.max_sleep; this record has\n                # fallen out of the window\n                purge_idx = i\n            else:\n                tot_n += i_n\n                if i_start < tot_start:\n                    tot_start = i_start\n                if i_stop > tot_stop:\n                    tot_stop = i_stop\n        if purge_idx >= 0:\n            # clean the old records out of the window (slide the window)\n            self.window = self.window[purge_idx + 1 :]\n        if tot_n > 0:\n            # recompute; stay within bounds\n            self.sleep_interval = (tot_stop - tot_start) / tot_n\n            if self.sleep_interval > self.max_sleep:\n                self.sleep_interval = self.max_sleep\n            if self.sleep_interval < self.min_sleep:\n                self.sleep_interval = self.min_sleep\n\n    def _fill_cache(self):\n        \"\"\"Internal method for grabbing as much data out of the file as is\n        available and caching it for future calls to nextline(). Returns\n        the number of lines just read.\n        \"\"\"\n        old_len = len(self.queue)\n        line = self.f.readline()\n        while line != \"\":\n            self.queue.append(line)\n            line = self.f.readline()\n        # how many did we just get?\n        num_read = len(self.queue) - old_len\n        if num_read > 0:\n            self.pos = self.f.tell()\n            now = time()\n            self._recompute_rate(num_read, self.last_read, now)\n            self.last_read = now\n        return num_read\n\n    def _dequeue(self):\n        \"\"\"Internal method; returns the first available line out of the\n        cache, if any.\"\"\"\n        if len(self.queue) > 0:\n            line = self.queue[0]\n            self.queue = self.queue[1:]\n            return line\n        else:\n            return None\n\n    def _reset(self):\n        \"\"\"Internal method; reopen the internal file handle (probably\n        because the log file got rotated/truncated).\"\"\"\n        self.f.close()\n        self.f = open(self.path, \"r\")\n        self.pos = self.f.tell()\n        self.last_read = time()\n\n    def nextline(self):\n        \"\"\"Return the next line from the file. Blocks if there are no lines\n        immediately available.\"\"\"\n\n        # see if we have any lines cached from the last file read\n        line = self._dequeue()\n        if line:\n            return line\n\n        # ok, we are out of cache; let's get some lines from the file\n        if self._fill_cache() > 0:\n            # got some\n            return self._dequeue()\n\n        # hmm, still no input available\n        while True:\n            sleep(self.sleep_interval)\n            if self._fill_cache() > 0:\n                return self._dequeue()\n            now = time()\n            if now - self.last_read > self.max_sleep:\n                # maybe the log got rotated out from under us?\n                if stat(self.path)[ST_SIZE] < self.pos:\n                    # file got truncated and/or re-created\n                    self._reset()\n                    if self._fill_cache() > 0:\n                        return self._dequeue()\n\n    def close(self):\n        \"\"\"Close the tail monitor, discarding any remaining input.\"\"\"\n        self.f.close()\n        self.f = None\n        self.queue = []\n        self.window = []\n\n    def __iter__(self):\n        \"\"\"Iterator interface, so you can do:\n\n        for line in filetail.Tail('log.txt'):\n            # do stuff\n            pass\n        \"\"\"\n        return self\n\n    def next(self):\n        \"\"\"Kick the iterator interface. Used under the covers to support:\n\n        for line in filetail.Tail('log.txt'):\n            # do stuff\n            pass\n        \"\"\"\n        return self.nextline()\n\n\n###############################################################################\n\nauth_pattern = re.compile(\n    r'^(?P<time>.*) : (?P<type>Auth): (?P<message>(?P<status>.*?): \\[(?P<user>.*?)\\] '\n    r'\\(from client (?P<client>[^ ]+) port (?P<port>[^ ]+)( cli (?P<cli>[^ ]+)|)\\))\\s*$'\n)\nother_pattern = re.compile(r'^(?P<time>.*) : (?P<type>[^:]+): (?P<message>.*?)\\s*$')\nignore_rlmsql = re.compile('Error: rlm_sql')\n\nunknown = []\n\n\ndef parse_line(line):\n    \"\"\"\n    Parse a line in the radius error log\n    \"\"\"\n\n    # Try to parse this as an authentication line\n    # (the common case by far)\n    m = auth_pattern.search(line)\n    if m:\n        return m\n    else:\n        # We want to ignore some freeradius sql-errors as well\n        m = ignore_rlmsql.search(line)\n        if m:\n            # unknown.append(line)\n            return None\n        # I guess it's some other type of line,\n        # try to parse that.\n        m = other_pattern.search(line)\n        if m:\n            # Do nothing for now, but this should also\n            # go in the database somewhere.\n            return m\n        else:\n            # No, this is something else entirely,\n            # let's just skip it for now.\n            # unknown.append(line)\n            return None\n\n\nclass Row:\n    def __init__(self, m):\n        self.m = m\n        self.time = datetime.datetime.fromtimestamp(mktime(strptime(m.group('time'))))\n\n    def __getattr__(self, attr):\n        try:\n            return self.m.group(attr)\n        except IndexError:\n            return ''\n\n    def __repr__(self):\n        return repr(self.m.groupdict())\n\n    def __str__(self):\n        return str(self.m.groupdict())\n\n\ndef iter_lines(file):\n    for line in file:\n        m = parse_line(line)\n        if m:\n            yield Row(m)\n\n\n###########\n# Start   #\n###########\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/servicemon.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThis program controls the service monitoring in NAV.\n\"\"\"\n\nimport os\nimport sys\nimport time\nimport random\nimport signal\nimport argparse\nimport logging\n\nfrom nav import buildconf\nimport nav.daemon\nfrom nav.daemon import safesleep as sleep\nfrom nav.logs import init_generic_logging\nfrom nav.statemon import RunQueue, config, db\n\n\n_logger = logging.getLogger('nav.servicemon')\n\n\nclass Controller:\n    def __init__(self, foreground=False):\n        if not foreground:\n            signal.signal(signal.SIGHUP, self.signalhandler)\n        signal.signal(signal.SIGTERM, self.signalhandler)\n        signal.signal(signal.SIGINT, self.signalhandler)\n\n        self.conf = config.serviceconf()\n        init_generic_logging(stderr=True, read_config=True)\n        self._isrunning = 1\n        self._checkers = []\n        self._looptime = int(self.conf.get(\"checkinterval\", 60))\n        _logger.debug(\"Setting checkinterval=%i\", self._looptime)\n        self.db = db.db()\n        _logger.debug(\"Reading database config\")\n        _logger.debug(\"Setting up runqueue\")\n        self._runqueue = RunQueue.RunQueue(controller=self)\n        self.dirty = 1\n\n    def get_checkers(self):\n        \"\"\"\n        Fetches new checkers from the NAV database and appends them to\n        the runqueue.\n        \"\"\"\n        newcheckers = self.db.get_checkers(self.dirty)\n        self.dirty = 0\n        # make sure we don't delete all checkers if we get an empty\n        # list from the database (maybe we have lost connection to\n        # the db)\n        if newcheckers:\n            s = []\n            for i in newcheckers:\n                if i in self._checkers:\n                    oldchecker = self._checkers[self._checkers.index(i)]\n                    s.append(oldchecker)\n                else:\n                    s.append(i)\n\n            self._checkers = s\n        elif self.db.status and self._checkers:\n            _logger.info(\"No checkers left in database, flushing list.\")\n            self._checkers = []\n\n        # Randomize order of checker plugins\n        random.shuffle(self._checkers)\n\n    def main(self):\n        \"\"\"\n        Loops until SIGTERM is caught. The looptime is defined\n        by self._looptime\n        \"\"\"\n        self.db.start()\n        while self._isrunning:\n            start = time.time()\n            self.get_checkers()\n\n            wait = self._looptime - (time.time() - start)\n            if wait <= 0:\n                _logger.warning(\n                    \"System clock has drifted backwards, resetting loop delay\"\n                )\n                wait = self._looptime\n            if self._checkers:\n                pause = wait / (len(self._checkers) * 2)\n            else:\n                pause = 0\n            for checker in self._checkers:\n                self._runqueue.enq(checker)\n                sleep(pause)\n\n            wait = self._looptime - (time.time() - start)\n            _logger.debug(\"Waiting %i seconds.\", wait)\n            if wait <= 0:\n                _logger.critical(\n                    \"Only superman can do this. Humans cannot wait for %i seconds.\",\n                    wait,\n                )\n                wait %= self._looptime\n                sleep(wait)\n            else:\n                sleep(wait)\n\n    def signalhandler(self, signum, _):\n        if signum == signal.SIGTERM:\n            _logger.info(\"Caught SIGTERM. Exiting.\")\n            self._runqueue.terminate()\n            sys.exit(0)\n        elif signum == signal.SIGINT:\n            _logger.info(\"Caught SIGINT. Exiting.\")\n            self._runqueue.terminate()\n            sys.exit(0)\n        elif signum == signal.SIGHUP:\n            # reopen the logfile\n            _logger.info(\"Caught SIGHUP. Reopening logfile...\")\n            logfile = open(self.conf.logfile, 'a')\n            nav.daemon.redirect_std_fds(stdout=logfile, stderr=logfile)\n\n            _logger.info(\"Reopened logfile: %s\", self.conf.logfile)\n        else:\n            _logger.info(\"Caught %s. Resuming operation.\", signum)\n\n\ndef main(args=None):\n    \"\"\"Daemon main entry point\"\"\"\n    os.umask(0o0002)\n    if args is None:\n        args = parse_args()\n    foreground = args.foreground\n    conf = config.serviceconf()\n    pidfilename = conf.get(\"pidfile\", \"servicemon.pid\")\n\n    # Already running?\n    try:\n        nav.daemon.justme(pidfilename)\n    except nav.daemon.AlreadyRunningError as error:\n        sys.exit(\"servicemon is already running (pid: %s)\" % error.pid)\n    except nav.daemon.DaemonError as error:\n        sys.exit(error)\n\n    if not foreground:\n        logfile = open(conf.logfile, 'a')\n        nav.daemon.daemonize(pidfilename, stdout=logfile, stderr=logfile)\n\n    my_controller = Controller(foreground=foreground)\n    my_controller.main()\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"Service monitor for NAV (Network Administration Visualized)\"\n    )\n    parser.add_argument(\n        '--version', action='version', version='NAV ' + buildconf.VERSION\n    )\n    parser.add_argument(\n        '-f', '--foreground', action=\"store_true\", help=\"run in foreground\"\n    )\n    return parser.parse_args()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/smsd.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# -*- testargs: -c -*-\n#\n# Copyright (C) 2006-2008, 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"The NAV SMS daemon\"\"\"\n\nimport argparse\nimport logging\nimport logging.handlers\nimport os\nimport os.path\nimport signal\nimport socket\nimport sys\nimport time\n\nfrom django.utils.encoding import smart_str\n\nimport nav.config\nimport nav.daemon\nimport nav.logs\nimport nav.smsd.navdbqueue\nfrom nav.smsd.dispatcher import DispatcherError, PermanentDispatcherError\nfrom nav.config import getconfig, NAV_CONFIG\nfrom nav.bootstrap import bootstrap_django\n\n# Dispatchers are imported later according to config\n\n\n#\n#  PATHS\n#\nconfigfile = 'smsd.conf'\nlogfile = os.path.join(NAV_CONFIG['LOG_DIR'], 'smsd.log')\npidfile = os.path.join(NAV_CONFIG['PID_DIR'], 'smsd.pid')\n\n#\n# Logging\n#\n_logger = logging.getLogger('nav.smsd')\n\n#\n# Globals\n#\nconfig = delay = failed = defaults = None\n\n#\n#  MAIN FUNCTION\n#\n\n\ndef main():\n    bootstrap_django()\n    args = parse_args()\n\n    # Set config defaults\n    global defaults\n    defaults = {\n        'username': NAV_CONFIG['NAV_USER'],\n        'delay': '30',\n        'delayfactor': '1.5',\n        'maxdelay': '3600',\n        'retrylimit': '5',\n        'retrylimitaction': 'ignore',\n        'exit_on_permanent_error': 'yes',\n        'autocancel': '0',\n        'mailwarnlevel': 'ERROR',\n        'mailserver': 'localhost',\n        'mailaddr': NAV_CONFIG['ADMIN_MAIL'],\n        'fromaddr': NAV_CONFIG['DEFAULT_FROM_EMAIL'],\n    }\n\n    # Read config file\n    global config\n    config = getconfig(configfile, defaults)\n\n    # Set variables\n    global delay, failed\n    failed = 0\n    delay = int(config['main']['delay'])\n    maxdelay = int(config['main']['maxdelay'])\n    delayfactor = float(config['main']['delayfactor'])\n    retrylimit = int(config['main']['retrylimit'])\n    retrylimitaction = config['main']['retrylimitaction'].strip()\n    retryvars = {\n        'maxdelay': maxdelay,\n        'delayfactor': delayfactor,\n        'retrylimit': retrylimit,\n        'retrylimitaction': retrylimitaction,\n    }\n\n    username = config['main']['username']\n    autocancel = config['main']['autocancel']\n    mailwarnlevel = logging.getLevelName(config['main']['mailwarnlevel'])\n    mailserver = config['main']['mailserver']\n    mailaddr = config['main']['mailaddr']\n    fromaddr = config['main']['fromaddr']\n\n    # Drop privileges if running as root\n    if os.geteuid() == 0:\n        try:\n            nav.daemon.switchuser(username)\n        except nav.daemon.DaemonError as error:\n            print(error, file=sys.stderr)\n            sys.exit(\n                \"Run as root or %s. Try `%s --help' for more information.\"\n                % (username, sys.argv[0])\n            )\n\n    # Initialize logging\n    nav.logs.init_stderr_logging()\n    if not loginitsmtp(mailwarnlevel, mailaddr, fromaddr, mailserver):\n        sys.exit('Failed to init SMTP logging.')\n\n    # First log message\n    _logger.info('Starting smsd.')\n\n    # Set custom loop delay\n    if args.delay:\n        setdelay(args.delay)\n\n    # Ignore unsent messages\n    if args.cancel:\n        queue = nav.smsd.navdbqueue.NAVDBQueue()\n        ignored_count = queue.cancel()\n        _logger.info(\"All %d unsent messages ignored.\", ignored_count)\n        sys.exit(0)\n\n    if args.delayfactor:\n        retryvars['delayfactor'] = args.delayfactor\n    if args.maxdelay:\n        retryvars['maxdelay'] = args.maxdelay\n    if args.limit:\n        retryvars['retrylimit'] = args.limit\n    if args.action:\n        retryvars['retrylimitaction'] = args.action\n\n    # Let the dispatcherhandler take care of our dispatchers\n    try:\n        dh = nav.smsd.dispatcher.DispatcherHandler(config)\n    except PermanentDispatcherError as error:\n        _logger.critical(\"Dispatcher configuration failed. Exiting. (%s)\", error)\n        sys.exit(1)\n\n    # Send test message (in other words: test the dispatcher)\n    if args.test or args.TEST:\n        text = args.message or \"This is a test message from NAV smsd.\"\n\n        if args.test:\n            msg = [(0, text, 0)]\n            try:\n                (sms, sent, ignored, smsid) = dh.sendsms(args.test, msg)\n            except DispatcherError as error:\n                _logger.critical(\"Sending failed. Exiting. (%s)\", error)\n                sys.exit(1)\n\n            _logger.info(\"SMS sent. Dispatcher returned reference %d.\", smsid)\n\n        elif args.TEST and args.uid:\n            queue = nav.smsd.navdbqueue.NAVDBQueue()\n            rowsinserted = queue.inserttestmsgs(args.uid, args.TEST, text)\n            if rowsinserted:\n                _logger.info(\"SMS put in queue. %d row(s) inserted.\", rowsinserted)\n            else:\n                _logger.info(\"SMS not put in queue.\")\n\n        sys.exit(0)\n\n    # Check if already running\n    try:\n        nav.daemon.justme(pidfile)\n    except nav.daemon.DaemonError as error:\n        _logger.error(error)\n        sys.exit(1)\n\n    # Daemonize\n    if not args.foreground:\n        try:\n            nav.daemon.daemonize(pidfile, stderr=open(logfile, \"a\"))\n        except nav.daemon.DaemonError as error:\n            _logger.error(error)\n            sys.exit(1)\n\n        _logger.info('smsd now running in daemon mode')\n        # Reopen log files on SIGHUP\n        _logger.debug('Adding signal handler for reopening log files on SIGHUP.')\n        signal.signal(signal.SIGHUP, signalhandler)\n    else:\n        nav.daemon.writepidfile(pidfile)\n\n    # Exit on SIGTERM/SIGINT\n    signal.signal(signal.SIGTERM, signalhandler)\n    signal.signal(signal.SIGINT, signalhandler)\n\n    # Initialize queue\n    # NOTE: If we're initalizing a queue with a DB connection before\n    # daemonizing we've experienced that the daemon dies silently upon trying\n    # to use the DB connection after becoming a daemon\n    queue = nav.smsd.navdbqueue.NAVDBQueue()\n\n    # Automatically cancel unsent messages older than a given interval\n    if autocancel != '0':\n        ignored_count = queue.cancel(autocancel)\n        _logger.info(\n            \"%d unsent messages older than '%s' autocanceled.\",\n            ignored_count,\n            autocancel,\n        )\n\n    # Loop forever\n    while True:\n        _logger.debug(\"Starting loop.\")\n\n        # Queue: Get users with unsent messages\n        users = queue.getusers('N')\n\n        _logger.info(\"Found %d user(s) with unsent messages.\", len(users))\n\n        # Loop over cell numbers\n        for user in users:\n            # Queue: Get unsent messages for a user ordered by severity desc\n            msgs = queue.getusermsgs(user, 'N')\n            _logger.info(\"Found %d unsent message(s) for %s.\", len(msgs), user)\n\n            # Dispatcher: Format and send SMS\n            try:\n                (sms, sent, ignored, smsid) = dh.sendsms(user, msgs)\n            except PermanentDispatcherError as error:\n                _logger.critical(\"Sending failed permanently. Exiting. (%s)\", error)\n                sys.exit(1)\n            except DispatcherError as error:\n                try:\n                    # Dispatching failed. Backing off.\n                    backoff(delay, error, retryvars)\n\n                    break  # End this run\n                except:\n                    _logger.exception(\"\")\n                    raise\n            except Exception as error:  # noqa: BLE001\n                _logger.exception(\"Unknown exception: %s\", error)\n\n            _logger.info(\"SMS sent to %s.\", user)\n\n            if failed:\n                resetdelay()\n                failed = 0\n                _logger.debug(\"Resetting delay and number of failed runs.\")\n\n            for msgid in sent:\n                queue.setsentstatus(msgid, 'Y', smsid)\n            for msgid in ignored:\n                queue.setsentstatus(msgid, 'I', smsid)\n            _logger.info(\n                \"%d messages were sent and %d ignored.\", len(sent), len(ignored)\n            )\n\n        # Sleep a bit before the next run\n        _logger.debug(\"Sleeping for %d seconds.\", delay)\n        time.sleep(delay)\n\n        # Devel only\n        # break\n\n\n#\n# HELPER FUNCTIONS\n#\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"The NAV SMS daemon\",\n        epilog=\"smsd dispatches SMS messages from the database to users' \"\n        \"phones with the help of plugins, such as one using Gammu and \"\n        \"a locally connected GSM unit, or possibly web based SMS \"\n        \"services.\",\n    )\n    arg = parser.add_argument\n    arg(\n        \"-c\",\n        \"--cancel\",\n        action=\"store_true\",\n        help=\"cancel (mark as ignored) all unsent messages\",\n    )\n    arg(\"-d\", \"--delay\", type=int, help=\"set delay (in seconds) between queue checks\")\n    arg(\n        \"-D\",\n        \"--delayfactor\",\n        type=int,\n        help=\"set the factor DELAY will be multiplied with for each attempt\",\n    )\n    arg(\"-m\", \"--maxdelay\", type=int, help=\"maximum delay (in seconds)\")\n    arg(\"-l\", \"--limit\", type=int, help=\"set the limit of retries\")\n    arg(\n        \"-a\",\n        \"--action\",\n        type=int,\n        choices=[0, 1],\n        help=\"the action to perform when reaching limit (0 or 1). 0 means \"\n        \"messages in queue are marked as ignored and error details are \"\n        \"logged and mailed to admin, while daemon resumes running and \"\n        \"checking the message queue. 1 means error details are logged and \"\n        \"mailed to admin, while the daemon shuts down.\",\n    )\n    arg(\"-t\", \"--test\", metavar=\"PHONENO\", help=\"send a test message to PHONENO\")\n    arg(\n        \"-T\",\n        \"--TEST\",\n        metavar=\"PHONENO\",\n        help=\"puts a test message to PHONENO into the SMS queue. use the --uid \"\n        \"option to specify which NAV user account id to associate with \"\n        \"the queued message\",\n    )\n    arg(\n        \"--message\",\n        metavar=\"MESSAGE\",\n        help=\"Used in combination with -t or -T to specify the message content\",\n    )\n    arg(\"-u\", \"--uid\", type=int, help=\"NAV user/account id to queue message to\")\n    arg(\"-f\", \"--foreground\", action=\"store_true\", help=\"run process in the foreground\")\n\n    args = parser.parse_args()\n    if args.test and args.TEST:\n        parser.error(\"-t and -T are mutually exclusive, please pick one\")\n    if args.TEST and args.uid is None:\n        parser.error(\"Please provide an account id using the --uid option\")\n    if args.message and not (args.test or args.TEST):\n        parser.error(\"--message can only be used in combination with either -t or -T\")\n    return args\n\n\ndef setdelay(seconds):\n    \"\"\"Set delay (in seconds) between queue checks.\"\"\"\n\n    global delay, _logger\n\n    delay = seconds\n    _logger.info(\"Setting delay to %d seconds.\", delay)\n\n\ndef resetdelay():\n    global config, defaults\n    try:\n        setdelay(int(config['main']['delay']))\n    except:\n        setdelay(int(defaults['delay']))\n\n\ndef increasedelay(seconds, delayfactor, maxdelay):\n    if seconds * delayfactor < maxdelay:\n        setdelay(seconds * delayfactor)\n    elif seconds == maxdelay:\n        pass\n    elif seconds * delayfactor >= maxdelay:\n        setdelay(maxdelay)\n\n\ndef backoff(seconds, error, retryvars):\n    \"\"\"Delay next loop if dispatching SMS fails.\"\"\"\n\n    # Function is invoked with the assumption that there are unsent messages\n    # in queue.\n    global failed\n\n    maxdelay, delayfactor, retrylimit, retrylimitaction = (\n        retryvars['maxdelay'],\n        retryvars['delayfactor'],\n        retryvars['retrylimit'],\n        retryvars['retrylimitaction'],\n    )\n\n    failed += 1\n    _logger.debug(\"Dispatcher failed %d time(s).\", failed)\n    increasedelay(seconds, delayfactor, maxdelay)\n\n    queue = nav.smsd.navdbqueue.NAVDBQueue()\n    msgs = queue.getmsgs('N')\n\n    # If limit is set and reached, perform an action\n    if retrylimit != 0 and failed >= retrylimit:\n        backoffaction(error, retrylimitaction)\n\n    # If limit is disabled, report error and continue\n    elif retrylimit == 0 and delay >= maxdelay:\n        if len(msgs):\n            _logger.critical(\n                \"Dispatching SMS fails. %d unsent message(s), the oldest from %s. (%s)\",\n                len(msgs),\n                msgs[0]['time'],\n                error,\n            )\n        else:\n            _logger.critical(\"Dispatching SMS fails. (%s)\", error)\n\n\ndef backoffaction(error, retrylimitaction):\n    \"\"\"Perform an action if the retry limit has been reached.\"\"\"\n\n    global failed\n    queue = nav.smsd.navdbqueue.NAVDBQueue()\n    msgs = queue.getmsgs('N')\n\n    if retrylimitaction == \"ignore\":\n        # Queued messages are marked as ignored, logs a critical error with\n        # message details, then resumes run.\n        numbmsg = queue.cancel()\n        error_message = (\n            \"Dispatch retry limit has been reached. Dispatching SMS has failed %s \"\n            \"times. Ignoring %s message(s).\"\n        ) % (failed, numbmsg)\n\n        for index, msg in enumerate(msgs):\n            error_message += '\\n%s: \"%s\" --> %s' % (\n                index + 1,\n                smart_str(msg['msg']),\n                smart_str(msg['name']),\n            )\n\n        error_message += \"\\nError message: %s\" % error\n        _logger.critical(error_message)\n        failed = 0\n        resetdelay()\n\n    elif retrylimitaction == \"shutdown\":\n        # Logs the number of unsent messages and time of the oldest in queue\n        # before shutting down daemon.\n        _logger.critical(\n            \"Dispatch retry limit has been reached. Dispatching SMS has failed %d \"\n            \"times. %d unsent message(s), the oldest from %s. \"\n            \"\\nError message: %s \"\n            \"\\nShutting down daemon.\\n\",\n            failed,\n            len(msgs),\n            msgs[0][\"time\"],\n            error,\n        )\n        sys.exit(0)\n\n    else:\n        _logger.warning(\n            \"No retry limit action is set or the configured option is not valid.\"\n        )\n\n\ndef signalhandler(signum, _):\n    \"\"\"\n    Signal handler to close and reopen log file(s) on HUP\n    and exit on KILL.\n    \"\"\"\n\n    if signum == signal.SIGHUP:\n        _logger.info(\"SIGHUP received; reopening log files.\")\n        nav.logs.reopen_log_files()\n        nav.daemon.redirect_std_fds(stderr=open(logfile, \"a\"))\n        nav.logs.reset_log_levels()\n        nav.logs.set_log_config()\n        _logger.info('Log files reopened.')\n    elif signum == signal.SIGTERM:\n        _logger.warning('SIGTERM received: Shutting down.')\n        sys.exit(0)\n    elif signum == signal.SIGINT:\n        _logger.warning('SIGINT received: Shutting down.')\n        sys.exit(0)\n\n\ndef loginitsmtp(loglevel, mailaddr, fromaddr, mailserver):\n    \"\"\"Initalize the logging handler for SMTP.\"\"\"\n\n    try:\n        hostname = socket.gethostname()\n        mailhandler = logging.handlers.SMTPHandler(\n            mailserver, fromaddr, mailaddr, 'NAV smsd warning from ' + hostname\n        )\n        mailformat = (\n            '[%(asctime)s] [%(levelname)s] [pid=%(process)d %(name)s] %(message)s'\n        )\n        mailformatter = logging.Formatter(mailformat)\n        mailhandler.setFormatter(mailformatter)\n        mailhandler.setLevel(loglevel)\n        _logger = logging.getLogger()\n        _logger.addHandler(mailhandler)\n        return True\n    except Exception as error:  # noqa: BLE001\n        print(\n            \"Failed creating SMTP loghandler. Daemon mode disabled. (%s)\" % error,\n            file=sys.stderr,\n        )\n        return False\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/snmptrapd.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2010, 2013, 2017, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV daemon to receive and act upon SNMP traps.\"\"\"\n\nimport logging\nimport os\nimport re\nimport socket\nimport sys\nimport argparse\nimport signal\nfrom functools import reduce\n\n# Import NAV libraries\nfrom nav import daemon\nfrom nav.config import NAV_CONFIG, NAVConfigParser\nimport nav.buildconf\nfrom nav.snmptrapd.plugin import load_handler_modules, ModuleLoadError\nfrom nav.util import is_valid_ip, address_to_string\nfrom nav.db import getConnection\nfrom nav.bootstrap import bootstrap_django\nimport nav.logs\n\nfrom nav.snmptrapd import agent\n\n# Paths\nlogfile_path = os.path.join(NAV_CONFIG['LOG_DIR'], 'snmptrapd.log')\npidfile = 'snmptrapd.pid'\nlogging.raiseExceptions = False  # don't raise exceptions for logging issues\n_logger = logging.getLogger('nav.snmptrapd')\n_traplogger = logging.getLogger('nav.snmptrapd.traplog')\nhandlermodules = None\nconfig = None\n\nDEFAULT_PORT = 162\nDEFAULT_ADDRESSES = (('0.0.0.0', DEFAULT_PORT),)\nADDRESS_PATTERNS = (re.compile(r\"(?P<addr>[0-9.]+) (:(?P<port>[0-9]+))?$\", re.VERBOSE),)\nif socket.has_ipv6 and agent.BACKEND == 'pynetsnmp':\n    DEFAULT_ADDRESSES += (('::', DEFAULT_PORT),)\n    ADDRESS_PATTERNS += (\n        re.compile(r\"(?P<addr>[0-9a-fA-F:]+)$\"),\n        re.compile(r\"\\[(?P<addr>[^\\]]+)\\] (:(?P<port>[0-9]+))?$\", re.VERBOSE),\n    )\n\n\ndef main():\n    bootstrap_django('snmptrapd')\n\n    # Verify that subsystem exists, if not insert it into database\n    verify_subsystem()\n\n    # Initialize and read startupconfig\n    global config\n    config = SnmptrapdConfig()\n\n    # Create parser and define options\n    opts = parse_args()\n\n    # When binding to a port < 1024 we need to be root\n    minport = min(port for addr, port in opts.address)\n    if minport < 1024:\n        if os.geteuid() != 0:\n            sys.exit(\"Must be root to bind to ports < 1024, exiting\")\n\n    # Check if already running\n    try:\n        daemon.justme(pidfile)\n    except daemon.DaemonError as why:\n        sys.exit(why)\n\n    # Create SNMP agent object\n    server = agent.TrapListener(*opts.address)\n    server.open()\n\n    # We have bound to a port and can safely drop privileges\n    runninguser = NAV_CONFIG['NAV_USER']\n    try:\n        if os.geteuid() == 0:\n            daemon.switchuser(runninguser)\n    except daemon.DaemonError as why:\n        server.close()\n        sys.exit(why)\n\n    global handlermodules\n\n    nav.logs.init_stderr_logging()\n\n    _logger.debug(\"using %r as SNMP backend\", agent.BACKEND)\n\n    # Load handlermodules\n    try:\n        _logger.debug('Trying to load handlermodules')\n        handlermodules = load_handler_modules(\n            config.get('snmptrapd', 'handlermodules').split(',')\n        )\n    except ModuleLoadError as why:\n        _logger.error(\"Could not load handlermodules %s\" % why)\n        sys.exit(1)\n\n    addresses_text = \", \".join(address_to_string(*addr) for addr in opts.address)\n    if not opts.foreground:\n        # Daemonize and listen for traps\n        try:\n            _logger.debug(\"Going into daemon mode...\")\n            logfile = open(logfile_path, 'a')\n            daemon.daemonize(pidfile, stderr=logfile, stdout=logfile)\n        except daemon.DaemonError as why:\n            _logger.error(\"Could not daemonize: %s\", why)\n            server.close()\n            sys.exit(1)\n\n        # Daemonized\n        _logger.info('snmptrapd is now running in daemon mode')\n\n        # Reopen lost db connection\n        # This is a workaround for a double free bug in psycopg 2.0.7\n        # which is why we don't need to keep the return value\n        getConnection('default')\n\n        # Reopen log files on SIGHUP\n        _logger.debug('Adding signal handler for reopening log files on SIGHUP.')\n        signal.signal(signal.SIGHUP, signal_handler)\n        # Exit on SIGTERM\n        signal.signal(signal.SIGTERM, signal_handler)\n\n        _logger.info(\"Snmptrapd started, listening on %s\", addresses_text)\n        try:\n            server.listen(opts.community, trap_handler)\n        except SystemExit:\n            raise\n        except Exception:  # noqa: BLE001\n            _logger.critical(\"Fatal exception ocurred\", exc_info=True)\n\n    else:\n        daemon.writepidfile(pidfile)\n        # Start listening and exit cleanly if interrupted.\n        try:\n            _logger.info(\"Listening on %s\", addresses_text)\n            server.listen(opts.community, trap_handler)\n        except KeyboardInterrupt:\n            _logger.error(\"Received keyboard interrupt, exiting.\")\n            server.close()\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"NAV SNMP Trap daemon\",\n        epilog=\"One or more address specifications can be given to tell the \"\n        \"trap daemon which interface/port combinations it should \"\n        \"listen to. The default is 0.0.0.0:162, and, if the system \"\n        \"appears to support IPv6, also [::]:162, which means the daemon \"\n        \"will accept traps on any IPv4/IPv6 interface, UDP port 162.\",\n    )\n    parser.add_argument(\n        \"-f\", \"--foreground\", action=\"store_true\", help=\"Run in foreground\"\n    )\n    parser.add_argument(\n        \"-c\",\n        \"--community\",\n        default=\"public\",\n        help=\"Which SNMP community incoming traps must use. The default is 'public'\",\n    )\n    parser.add_argument(\"address\", nargs=\"*\", type=Address, default=DEFAULT_ADDRESSES)\n\n    return parser.parse_args()\n\n\ndef Address(address):\n    address = address.strip()\n    match = (pattern.match(address) for pattern in ADDRESS_PATTERNS)\n    match = reduce(lambda x, y: x or y, match)\n    if match:\n        match = match.groupdict()\n        addr = match['addr']\n        port = int(match.get('port', None) or DEFAULT_PORT)\n        if is_valid_ip(addr):\n            return addr, port\n\n    raise ValueError(\"%s is not a valid address\" % address)\n\n\ndef trap_handler(trap):\n    \"\"\"Handles a trap.\n\n    :type trap: SNMPTrap\n\n    \"\"\"\n    _traplogger.debug(\"%s\", trap)\n    connection = getConnection('default')\n    handled_by = []\n\n    for mod in handlermodules:\n        _logger.debug(\"Offering trap (%s) to %s\", id(trap), mod)\n        try:\n            accepted = mod.handleTrap(trap, config=config)\n            if accepted:\n                handled_by.append(mod.__name__)\n            _logger.debug(\n                \"Module %s %s trap (%s)\",\n                mod.__name__,\n                'accepted' if accepted else 'ignored',\n                id(trap),\n            )\n        except Exception as why:  # noqa: BLE001\n            _logger.exception(\n                \"Unhandled exception when handling trap (%s) with %s: %s\",\n                id(trap),\n                mod.__name__,\n                why,\n            )\n        # Assuming that the handler used the same connection as this\n        # function, we rollback any uncommitted changes.  This is to\n        # avoid idling in transactions.\n        connection.rollback()\n\n    _log_trap_handle_result(handled_by, trap)\n\n\ndef _log_trap_handle_result(handled_by, trap):\n    agent_string = (\n        trap.netbox.sysname + ' ({})'.format(trap.agent) if trap.netbox else trap.agent\n    )\n    if handled_by:\n        _logger.info(\n            \"v%s trap received from %s, handled by %s\",\n            trap.version,\n            agent_string,\n            handled_by,\n        )\n    else:\n        _logger.info(\n            \"v%s trap received from %s, no handlers wanted it: %s\",\n            trap.version,\n            agent_string,\n            trap.snmpTrapOID,\n        )\n\n\ndef verify_subsystem():\n    \"\"\"Verify that subsystem exists, if not insert it into database\"\"\"\n    db = getConnection('default')\n    c = db.cursor()\n\n    sql = \"\"\"INSERT INTO subsystem (SELECT 'snmptrapd', '' WHERE\n    NOT EXISTS (SELECT * FROM subsystem WHERE name = 'snmptrapd'))\"\"\"\n    c.execute(sql)\n    db.commit()\n\n\ndef signal_handler(signum, _):\n    \"\"\"Signal handler to close and reopen log file(s) on HUP and exit on TERM\"\"\"\n    if signum == signal.SIGHUP:\n        _logger.info(\"SIGHUP received; reopening log files.\")\n        nav.logs.reopen_log_files()\n        logfile = open(logfile_path, 'a')\n        daemon.redirect_std_fds(stdout=logfile, stderr=logfile)\n        nav.logs.reset_log_levels()\n        nav.logs.set_log_config()\n        _logger.info('Log files reopened.')\n    elif signum == signal.SIGTERM:\n        _logger.warning('SIGTERM received: Shutting down.')\n        sys.exit(0)\n\n\nclass SnmptrapdConfig(NAVConfigParser):\n    \"\"\"Configparser for snmptrapd\"\"\"\n\n    DEFAULT_CONFIG_FILES = ['snmptrapd.conf']\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/sortedstats_cacher.py",
    "content": "#!/usr/bin/env python3\n# -*- testargs: hour -*-\n\nimport argparse\nimport logging\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.logs import init_generic_logging\nfrom nav.web.sortedstats import TIMEFRAMES\nfrom nav.web.sortedstats.views import collect_result\nfrom nav.web.sortedstats.config import SortedStatsConfig\nfrom nav.daemon import justme, writepidfile, DaemonError\n\nLOGFILE = \"sortedstats_cacher.log\"\n_logger = logging.getLogger('nav.sortedstats_cacher')\n\n\ndef main():\n    init_generic_logging(logfile=LOGFILE, stderr=False, read_config=True)\n    timeframe = get_parser().parse_args().timeframe\n    pidfile = f\"sortedstats_cacher_{timeframe}.pid\"\n    exit_if_running(pidfile)\n    writepidfile(pidfile)\n    config = SortedStatsConfig()\n    run(timeframe, config)\n\n\ndef run(timeframe, config):\n    _logger.info(\"Running for timeframe %s\", timeframe)\n    reports = config.get_reports(timeframe)\n    for report_name, report in reports.items():\n        _logger.info(f\"Collecting results for report {report_name}\")\n        try:\n            collect_result(report['view'], report['timeframe'], report['rows'])\n        except (PermissionError, ValueError, KeyError) as error:\n            _logger.error(f\"Error collecting results for report {report_name}: {error}\")\n\n\ndef get_parser():\n    parser = argparse.ArgumentParser()\n    timeframe_choices = TIMEFRAMES.keys()\n    parser.add_argument(\n        'timeframe',\n        help='The timeframe to collect stats for',\n        choices=timeframe_choices,\n    )\n    return parser\n\n\ndef exit_if_running(pidfile):\n    try:\n        justme(pidfile)\n    except DaemonError as error:\n        print(error)\n        exit(1)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/start_arnold.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: --list -*-\n#\n# Copyright 2017 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nUse this to run automatic detentions based on detention profiles\n\nUsage: start_arnold [options] id\nPipe in ip-addresses to block or use the -f option to specify file\n\nOptions:\n  -h, --help   show this help message and exit\n  -i BLOCKID   id of blocktype to use\n  -f FILENAME  filename with id's to detain\n  --list       list predefined detentions\n\nAlways uses the last interface the ip was seen on whether the ip is active\nthere or not.\n\n\"\"\"\n\nimport getpass\nimport logging\nimport re\nimport sys\nfrom operator import methodcaller\nimport argparse\nfrom os.path import join\n\nfrom nav.bootstrap import bootstrap_django\nfrom nav.config import find_config_file\n\nbootstrap_django(__file__)\n\nfrom nav.logs import init_generic_logging\nimport nav.arnold\nfrom nav.arnold import (\n    find_computer_info,\n    is_inside_vlans,\n    quarantine,\n    disable,\n    GeneralException,\n)\nfrom nav.models.arnold import DetentionProfile, Identity\nfrom nav.models.manage import Prefix\n\nLOG_FILE = \"arnold/start_arnold.log\"\n_logger = logging.getLogger('nav.start_arnold')\n\n\ndef main(args=None):\n    \"\"\"Main controller\"\"\"\n\n    if args is None:\n        args = parse_command_options()\n\n    init_generic_logging(logfile=LOG_FILE, stderr=False, read_config=True)\n\n    if args.listblocktypes:\n        print_detention_profiles()\n        return\n\n    _logger.info('Starting automatic detentions based on %s', args.profile.name)\n    addresses = get_addresses_to_detain(args)\n\n    detentions = []  # List of successfully blocked ip-addresses\n    for address, comment in addresses:\n        try:\n            detentions.append(detain(address, args.profile, comment))\n        except GeneralException as error:\n            _logger.error(error)\n            continue\n\n    if args.profile.mailfile and detentions:\n        report_detentions(args.profile, detentions)\n\n\ndef print_detention_profiles():\n    \"\"\"Print all existing detention profiles\"\"\"\n    output_format = \"%-5s %-5s %s\"\n    print(output_format % (\"ID\", \"Act\", \"Title\"))\n    for profile in DetentionProfile.objects.all():\n        print(output_format % (profile.id, profile.active, profile.name))\n\n\ndef get_addresses_to_detain(options):\n    \"\"\"Get and parse addresses to detain either from file or from stdin\"\"\"\n    if options.filename:\n        try:\n            handle = open(options.filename, 'r')\n        except IOError as error:\n            _logger.error(error)\n            return\n        return parse_input(handle.readlines())\n    else:\n        return parse_input(sys.stdin.readlines())\n\n\ndef parse_input(lines):\n    \"\"\"Use the first word in the line as an address to detain\n\n    The rest of the line is used as comment\n\n    \"\"\"\n    addresses = []\n\n    for line in lines:\n        if re.match('#', line):\n            continue\n\n        # \"chomp\"\n        if line and line[-1] == '\\n':\n            line = line[:-1]\n\n        # Grab first part of line, use that as an address to block. Grab the\n        # rest and use it as comment.\n        match = re.match(r\"([^ ]+)(\\s+.+)?\", line)\n        if match:\n            address, comment = match.groups()\n            if comment:\n                comment.strip()\n            else:\n                comment = \"\"\n            addresses.append((address, comment))\n\n    return addresses\n\n\ndef detain(address, profile, comment=''):\n    \"\"\"Detain address with the given profile\"\"\"\n    _logger.debug(\"Trying to detain %s\", address)\n\n    username = getpass.getuser()\n    candidate = find_computer_info(address)\n\n    if profile.active_on_vlans and not is_inside_vlans(\n        candidate.ip, profile.active_on_vlans\n    ):\n        _logger.error(\n            \"%s is not inside defined vlanrange for this predefined detention\",\n            address,\n        )\n        return\n\n    duration = find_duration(candidate, profile)\n\n    if profile.detention_type == 'disable':\n        disable(candidate, profile.justification, username, comment, duration)\n    else:\n        quarantine(\n            candidate,\n            profile.quarantine_vlan,\n            profile.justification,\n            username,\n            comment,\n            duration,\n        )\n\n    return address\n\n\ndef find_duration(candidate, profile):\n    \"\"\"Find duration for this candidate based on profile\n\n    If this candidate has been detained before on this interface and the\n    profile has defined exponential detainment, increase the detainment for\n    this candidate.\n\n    :param nav.arnold.Candidate candidate: The candidate to find duration for\n    :param DetentionProfile profile: The profile used for detention\n    \"\"\"\n    autoenablestep = profile.duration\n\n    if profile.incremental == 'y':\n        try:\n            identity = Identity.objects.get(\n                mac=candidate.mac, interface=candidate.interface\n            )\n        except Identity.DoesNotExist:\n            pass\n        else:\n            event = identity.events.filter(\n                justification=profile.justification, autoenablestep__isnull=False\n            ).order_by('-event_time')\n\n            if event:\n                autoenablestep = event[0].autoenablestep * 2\n\n    _logger.debug(\"Setting duration to %s days\", autoenablestep)\n    return autoenablestep\n\n\ndef report_detentions(profile, detentions):\n    \"\"\"For all ip's that are detained, group by contactinfo and send mail\"\"\"\n    _logger.debug(\"Trying to report detentions\")\n\n    emails = find_contact_addresses(detentions)\n\n    try:\n        mailfile = find_config_file(join(\"arnold\", \"mailtemplates\", profile.mailfile))\n        message_template = open(mailfile).read()\n    except IOError as error:\n        _logger.error(error)\n        return\n\n    for email, iplist in emails.items():\n        _logger.info(\"Sending mail to %s\", email)\n\n        fromaddr = 'noreply'\n        toaddr = email\n        reason = profile.name\n        subject = \"Computers detained because of %s\" % profile.justification\n\n        msg = message_template\n        msg = re.sub(r'\\$reason', reason, msg)\n        msg = re.sub(r'\\$list', \"\\n\".join([\" \".join(x) for x in iplist]), msg)\n\n        try:\n            nav.arnold.sendmail(fromaddr, toaddr, subject, msg)\n        except Exception as error:  # noqa: BLE001\n            _logger.error(error)\n            continue\n\n\ndef find_contact_addresses(detentions):\n    \"\"\"Find contact addresses for each ip in detentions list\"\"\"\n    emails = {}\n    for ip in detentions:\n        organization = get_organization(ip)\n        if not organization:\n            _logger.info(\"No organization found for %s\", ip)\n            continue\n\n        if not organization.contact:\n            _logger.info(\"No contact info for %s\", organization)\n            continue\n\n        dns = nav.arnold.get_host_name(ip)\n        netbios = nav.arnold.get_netbios(ip)\n        splitaddresses = [x.strip() for x in organization.contact.split(',')]\n\n        for email in splitaddresses:\n            if email in emails:\n                emails[email].append([ip, dns, netbios])\n            else:\n                emails[email] = [[ip, dns, netbios]]\n\n    return emails\n\n\ndef get_organization(ip):\n    \"\"\"Find the organization this ip belongs to\"\"\"\n    prefixes = Prefix.objects.filter(vlan__net_type='lan').extra(\n        where=['%s << netaddr'], params=[ip]\n    )\n    if prefixes:\n        prefix = min(prefixes, key=methodcaller('get_prefix_length'))\n        return prefix.vlan.organization\n    else:\n        return None\n\n\ndef parse_command_options():\n    \"\"\"Parse options from commandline\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Accepts a list of IP addresses to block\",\n        epilog=\"Address list can either be piped in to stdin, or use the -f \"\n        \"option to specify a file containing a list of addresses\",\n    )\n    group = parser.add_mutually_exclusive_group(required=True)\n    group.add_argument(\n        \"-i\",\n        \"--blockid\",\n        dest=\"profile\",\n        type=valid_profile,\n        help=\"id of blocktype to use\",\n    )\n    parser.add_argument(\"-f\", \"--filename\", help=\"filename with IPs to detain\")\n    group.add_argument(\n        \"--list\",\n        action=\"store_true\",\n        dest=\"listblocktypes\",\n        help=\"list predefined detentions/blocktypes\",\n    )\n\n    return parser.parse_args()\n\n\ndef valid_profile(detention_profile_id):\n    \"\"\"Verifies that a detention profile id is valid\"\"\"\n    try:\n        profile = DetentionProfile.objects.get(pk=detention_profile_id)\n    except DetentionProfile.DoesNotExist:\n        raise argparse.ArgumentTypeError(\n            \"No such profile id: %s\" % detention_profile_id\n        )\n\n    if profile.active == 'n':\n        raise argparse.ArgumentTypeError(\n            \"Detention profile is inactive: %s\" % profile.name\n        )\n\n    return profile\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/t1000.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nt1000 finds blocked computers that have moved and blocks them again.\n\nUsage:\nsudo -u $NAV_USER t1000\n\nt1000 is meant to be run as a cronjob. It checks the database for any\ndetained ports. If it finds any, it checks if the mac-address is active on\nsome other port and detains that port.\n\n\"\"\"\n\nimport sys\nimport logging\nimport getpass\nfrom datetime import datetime, timedelta\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.logs import init_generic_logging\nfrom nav.arnold import (\n    find_computer_info,\n    disable,\n    quarantine,\n    is_inside_vlans,\n    NoDatabaseInformationError,\n    GeneralException,\n    open_port,\n    raise_if_detainment_not_allowed,\n    DetainmentNotAllowedError,\n)\nfrom nav.models.arnold import Identity, DetentionProfile\n\nLOG_FILE = \"arnold/t1000.log\"\n_logger = logging.getLogger('nav.t1000')\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    init_generic_logging(logfile=LOG_FILE, stderr=False, read_config=True)\n    _logger.info(\"Starting t1000\")\n\n    # Fetch all mac-addresses that we have detained, check if they are\n    # active somewhere else. As NAV collects arp and cam data periodically,\n    # we need to give one hour slack to ensure data is correct.\n\n    identities = Identity.objects.filter(\n        last_changed__lte=datetime.now() - timedelta(hours=1),\n        status__in=['disabled', 'quarantined'],\n    )\n\n    if len(identities) <= 0:\n        _logger.info(\"No detained ports in database where lastchanged > 1 hour.\")\n        sys.exit(0)\n\n    for identity in identities:\n        _logger.info(\"%s is %s, checking for activity\", identity.mac, identity.status)\n        try:\n            candidate = find_computer_info(identity.mac)\n        except NoDatabaseInformationError as error:\n            _logger.info(error)\n            continue\n\n        # If this mac-address is active behind another port, block it.\n        if candidate.endtime > datetime.now():\n            if candidate.interface == identity.interface:\n                _logger.info('Active on detained interface, will not pursue')\n            else:\n                pursue(identity, candidate)\n        else:\n            _logger.info(\"%s is not active.\", candidate.mac)\n\n\ndef pursue(identity, candidate):\n    \"\"\"Try to detain this identity if applicable\n\n    If profile says to not keep closed, we lift the detention for this\n    identity after detaining the new interface. This also means that when\n    detaining manually we keep all interfaces closed as this was the behavior\n    in the old code.\n\n    \"\"\"\n    _logger.info(\"%s is active on interface %s\", candidate.mac, candidate.interface)\n\n    # Check if this reason is a part of any detention profile. If it is we\n    # need to fetch the vlans from that profile and see if the new ip is on\n    # one of those vlans or have to be skipped.\n\n    profile = is_detained_by_profile(identity)\n    if profile and not should_pursue(identity, profile):\n        return\n\n    try:\n        raise_if_detainment_not_allowed(candidate.interface)\n    except DetainmentNotAllowedError as error:\n        _logger.error(error)\n        return\n\n    identity.autoenablestep = find_autoenable_step(identity)\n    detain(identity, candidate)\n\n    if profile and profile.keep_closed == 'n':\n        try:\n            open_port(identity, getpass.getuser(), 'Blocked on another interface')\n        except GeneralException as error:\n            _logger.error(error)\n\n\ndef is_detained_by_profile(identity):\n    \"\"\"Check that this identity is detained with a detention profile\"\"\"\n    try:\n        return DetentionProfile.objects.get(justification=identity.justification)\n    except DetentionProfile.DoesNotExist:\n        return None\n\n\ndef find_autoenable_step(identity):\n    \"\"\"Find and set autoenablestep\"\"\"\n    event = identity.events.filter(\n        autoenablestep__isnull=False, justification=identity.justification\n    ).order_by('-event_time')[0]\n\n    if event:\n        return event.autoenablestep\n    else:\n        return 0\n\n\ndef should_pursue(identity, profile):\n    \"\"\"Verify that this identity is inside the defined vlans for the profile\"\"\"\n    _logger.debug('%s is %s by a profile', identity.mac, identity.status)\n    if profile.active_on_vlans:\n        if not is_inside_vlans(identity.ip, profile.active_on_vlans):\n            _logger.info(\"Ip not in activeonvlans\")\n            return False\n        else:\n            _logger.debug(\"Ip in activeonvlans\")\n    else:\n        _logger.debug(\"Profile has no activeonvlans set\")\n\n    return True\n\n\ndef detain(identity, candidate):\n    \"\"\"Detain based on identity info\"\"\"\n    username = getpass.getuser()\n    comment = \"Detained automatically when switching ports\"\n\n    try:\n        if identity.status == 'disabled':\n            _logger.debug(\"Trying to disable %s\", identity.mac)\n            disable(\n                candidate,\n                identity.justification,\n                username,\n                comment,\n                identity.autoenablestep,\n            )\n\n        elif identity.status == 'quarantined':\n            _logger.debug(\n                \"Trying to quarantine %s with vlan %s\", identity.mac, identity.tovlan\n            )\n            quarantine(\n                candidate,\n                identity.tovlan,\n                identity.justification,\n                username,\n                comment,\n                identity.autoenablestep,\n            )\n    except GeneralException as error:\n        _logger.error(error)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/thresholdmon.py",
    "content": "#!/usr/bin/env python\n# encoding: utf-8\n\n\"\"\"\nThe NAV treshold monitor.\n\"\"\"\n\n# Assuming a production environment, we don't want to raise exceptions\n# while logging\nimport logging\n\nlogging.raiseExceptions = False\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.thresholdmon import main\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bin/update_ouis.py",
    "content": "#!/usr/bin/env python\n# -*- testargs: -h -*-\n#\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport argparse\nimport sys\nimport logging\n\nfrom typing import Iterable, Generator, Tuple\n\nimport requests\nfrom requests.exceptions import RequestException\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nimport django.db\n\nfrom nav.macaddress import MacPrefix\nfrom nav.logs import init_stderr_logging\n\n_logger = logging.getLogger(__name__)\n\nFILE_URL = \"https://standards-oui.ieee.org/oui/oui.txt\"\nUSER_AGENT = \"Mozilla/5.0 (X11; Linux i686; rv:135.0) Gecko/20100101 Firefox/135.0\"\n\nMAX_ERRORS = 100\n\n\ndef main():\n    init_stderr_logging()\n    argparse.ArgumentParser(\n        description=\"Updates the database with OUIs and their related organizations\"\n    ).parse_args()\n    run()\n\n\ndef run():\n    _logger.debug(f\"Downloading OUIs from {FILE_URL}\")\n    try:\n        data = _download_oui_file(FILE_URL)\n    except RequestException as error:\n        _logger.error(\"Error while downloading OUIs: %s\", error)\n        sys.exit(1)\n    ouis = _parse_ouis(data)\n    _update_database(ouis)\n    _logger.debug(\"Completed updating OUI records\")\n\n\ndef _download_oui_file(url: str) -> str:\n    headers = {\n        'User-Agent': USER_AGENT,\n    }\n    response = requests.get(url, headers=headers)\n    response.raise_for_status()\n    return response.text\n\n\ndef _parse_ouis(oui_data: str) -> Generator[Tuple[str, str], None, None]:\n    \"\"\"Returns lists of tuples containing OUI and vendor name for\n    each vendor\n    \"\"\"\n    error_count = 0\n    for line in oui_data.split('\\n'):\n        if \"(hex)\" not in line:\n            continue\n        try:\n            yield _parse_line(line)\n        except ValueError:\n            error_count += 1\n            if error_count >= MAX_ERRORS:\n                _logger.error(\"Reached max amount of errors (%d), exiting\", MAX_ERRORS)\n                sys.exit(1)\n\n\ndef _parse_line(line: str) -> Tuple[str, str]:\n    prefix, _, vendor = line.strip().split(None, 2)\n    oui = str(MacPrefix(prefix)[0])\n    return oui, vendor\n\n\n@django.db.transaction.atomic\ndef _update_database(ouis: Iterable[Tuple[str, str]]):\n    # Begin by dumping everything into a PostgreSQL temporary table\n    _logger.debug(\"Updating database\")\n    cursor = django.db.connection.cursor()\n    cursor.execute(\n        \"\"\"\n        CREATE TEMPORARY TABLE new_oui (\n            oui macaddr PRIMARY KEY,\n            vendor varchar,\n            CHECK (oui = trunc(oui)))\n        \"\"\"\n    )\n    cursor.executemany(\n        \"\"\"\n        INSERT INTO new_oui (oui, vendor)\n            VALUES (%s, %s)\n        ON CONFLICT (oui)\n            DO NOTHING\n        \"\"\",\n        ouis,\n    )\n    # Then make the necessary updates to the live OUI table, letting PostgreSQL do the\n    # heavy lifting of resolving conflicts and changes\n    cursor.execute(\n        \"\"\"\n        INSERT INTO oui (oui, vendor)\n        SELECT\n            oui,\n            vendor\n        FROM\n            new_oui\n        ON CONFLICT (oui)\n            DO UPDATE SET\n                vendor = EXCLUDED.vendor\n            WHERE\n                oui.vendor IS DISTINCT FROM EXCLUDED.vendor\n        \"\"\"\n    )\n    cursor.execute(\"DELETE FROM oui WHERE oui NOT IN (SELECT oui FROM new_oui)\")\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/bitvector.py",
    "content": "#\n# Copyright (C) 2007, 2009 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Bit vector manipulation.\"\"\"\n\nimport array\nimport re\n\n\nclass BitVector(object):\n    \"\"\"\n    Represent an octet string as a vector of bits, allowing for easy\n    manipulation of the bits.\n\n    Written specifically for manipulating octet strings retrieved by\n    SNMP, where the most significant bit represents port 1 on a\n    device.  Everything in this class is 0 based though, so index 0 is\n    the most significant bit here.\n    \"\"\"\n\n    def __init__(self, octetstring):\n        self.vector = array.array(\"B\", octetstring)\n\n    def to_bytes(self):\n        return self.vector.tobytes()\n\n    def __len__(self):\n        return len(self.vector) * 8\n\n    def __repr__(self):\n        return \"%s(%s)\" % (self.__class__.__name__, repr(self.to_bytes()))\n\n    def __setitem__(self, posn, val):\n        \"\"\"\n        Set the bit in position posn to val.  NOTE: The most\n        significant bit is regarded as bit 0 in this context.\n        \"\"\"\n        val = val and 1 or 0\n        block = posn // 8\n        shift = posn & 7\n        block_value = self.vector[block]\n        if (block_value << shift) & 128 and 1 or 0 != val:\n            if val:\n                self.vector[block] = block_value | (128 >> shift)\n            else:\n                self.vector[block] = block_value ^ (128 >> shift)\n\n    def __getitem__(self, posn):\n        \"\"\"\n        Get the value of the bit in position posn.  NOTE: The most\n        significant bit is regarded as bit 0 in this context.\n        \"\"\"\n        if isinstance(posn, slice):\n            result = []\n            for i in range(*posn.indices(len(self))):\n                result.append(self[i])\n            return result\n        else:\n            block = posn // 8\n            shift = posn & 7\n            return (self.vector[block] << shift) & 128 and 1 or 0\n\n    _hexdigits = re.compile(r\"[^0-9A-Fa-f]\")\n\n    @classmethod\n    def from_hex(cls, hexstring):\n        \"\"\"Create a BitVector instance from a hexstring.\"\"\"\n        hexstring = cls._hexdigits.sub(\"\", hexstring)\n        if len(hexstring) % 2 != 0:\n            raise ValueError(\"hexstring must contain an even number of digits\")\n        hex_octets = [hexstring[i : i + 2] for i in range(0, len(hexstring), 2)]\n        octetstring = b''.join([bytes((int(octet, 16),)) for octet in hex_octets])\n        return cls(octetstring)\n\n    def to_binary(self):\n        \"\"\"\n        Returns a string consisting of 1s and 0s, representing the\n        bits in the vector.\n        \"\"\"\n        bits = []\n        for octet in self.vector:\n            bits = bits + [str((octet >> y) & 1) for y in range(8 - 1, -1, -1)]\n        return \"\".join(bits)\n\n    def to_hex(self):\n        \"\"\"Return a hexadecimal string representation of this vector.\"\"\"\n        digits = [\"%02x\" % octet for octet in self.vector]\n        return ''.join(digits)\n\n    def reverse(self):\n        \"\"\"Reverse the bit pattern.\"\"\"\n        # This is hopelessly ineffective, but it does the job\n        reversed_bits = self[-1::-1]\n        for index, bit in enumerate(reversed_bits):\n            self[index] = bit\n\n    def get_set_bits(self):\n        \"\"\"Return a list of bit numbers that have been set.\"\"\"\n        # This is hopelessly ineffective, but it does the job\n        bits = [i for i in range(len(self)) if self[i]]\n        return bits\n"
  },
  {
    "path": "python/nav/bootstrap.py",
    "content": "# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\nfrom os.path import dirname, realpath\nimport os\nimport sys\n\nimport django\nfrom django.apps import apps\n\n\n__all__ = ['bootstrap_django']\n\nRUN = False\n\n\ndef bootstrap_django(caller=None):\n    \"\"\"\n    Set up django (especially important: the database connection)\n\n    This is necessary when having standalone Python scripts that use the\n    database via the Django model definitions. NAV is older than Django, the\n    Django native way is to use management-commands. The Django \"manage.py\"\n    script essentially does this before it runs a command.\n    \"\"\"\n    global RUN\n\n    if 'DJANGO_SETTINGS_MODULE' not in os.environ:\n        os.environ['DJANGO_SETTINGS_MODULE'] = 'nav.django.settings'\n\n    mydir = dirname(dirname(realpath(__file__)))\n    sys.path.append(mydir)\n\n    if not RUN and not apps.ready:\n        django.setup()\n        RUN = True\n        return\n"
  },
  {
    "path": "python/nav/buildconf.py",
    "content": "\"\"\"NAV build configuration variables.\"\"\"\n\nfrom importlib import metadata\nimport os\nimport sysconfig\n\n\ndatadir = os.path.join(sysconfig.get_config_var('datarootdir'), 'nav')\nlocalstatedir = os.path.join(datadir, 'var')\nwebrootdir = os.path.join(datadir, \"www\")\ndjangotmpldir = os.path.join(datadir, \"templates\")\ndocdir = os.path.join(datadir, \"doc\")\n\n\ntry:\n    VERSION = metadata.version(\"nav\")\nexcept metadata.PackageNotFoundError:\n    # If we're not installed, try to get the current version from Git tags\n    import setuptools_scm\n\n    VERSION = setuptools_scm.get_version()\n"
  },
  {
    "path": "python/nav/bulkimport.py",
    "content": "#\n# Copyright (C) 2010, 2011, 2013-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Import seed data in bulk.\"\"\"\n\nimport json\n\nfrom django.core.exceptions import ValidationError\n\nfrom nav.django.forms import validate_aliases\nfrom nav.models.fields import PointField\nfrom nav.models.manage import Netbox, Room, Organization\nfrom nav.models.manage import Category, NetboxInfo, NetboxGroup\nfrom nav.models.manage import NetboxCategory, Interface\nfrom nav.models.manage import Location, Usage, NetboxType, Vendor\nfrom nav.models.manage import Prefix, Vlan, NetType\nfrom nav.models.manage import ManagementProfile, NetboxProfile\nfrom nav.models.cabling import Cabling, Patch\nfrom nav.models.service import Service, ServiceProperty\nfrom nav.util import is_valid_ip\nfrom nav.web.servicecheckers import get_description\n\nfrom nav.bulkparse import BulkParseError\n\n\ndef _get_aliases(aliases: str) -> list[str]:\n    if not aliases:\n        return []\n    return aliases.split('|')\n\n\ndef _validate_aliases(aliases: str) -> None:\n    try:\n        validate_aliases(aliases)\n    except ValidationError as e:\n        raise BulkImportError(e)\n\n\nclass BulkImporter:\n    \"\"\"Abstract bulk import iterator\"\"\"\n\n    def __init__(self, parser):\n        self.parser = parser\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        \"\"\"Parses and returns next line\"\"\"\n        try:\n            row = next(self.parser)\n            row = self._decode_as_utf8(row)\n            objects = self._create_objects_from_row(row)\n        except BulkParseError as error:\n            objects = error\n        return self.parser.line_num, objects\n\n    @staticmethod\n    def _decode_as_utf8(row):\n        \"\"\"Decodes all unicode values in row as utf-8 strings\"\"\"\n        for key, value in row.items():\n            if isinstance(value, bytes):\n                row[key] = value.decode('utf-8')\n        return row\n\n    def _create_objects_from_row(self, row):\n        \"\"\"Hook to create Django ORM objects from a row.\n\n        Must be overridden in descendant classes.\n\n        \"\"\"\n        raise NotImplementedError\n\n\nclass NetboxImporter(BulkImporter):\n    \"\"\"Creates objects from the netbox bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Netbox, ip=row['ip'])\n        raise_if_exists(Netbox, sysname=row['ip'])\n\n        netbox = self._get_netbox_from_row(row)\n        objects = [netbox]\n\n        netbox.data = self._parse_data(row['data'])\n\n        netboxinfo = self._get_netboxinfo_from_function(netbox, row['function'])\n        if netboxinfo:\n            objects.append(netboxinfo)\n\n        netboxgroups = self._get_groups_from_group(netbox, row.get('netboxgroup', []))\n        if netboxgroups:\n            objects.extend(netboxgroups)\n\n        profiles = self._get_management_profiles(\n            netbox, row.get('management_profiles', '')\n        )\n        if profiles:\n            objects.extend(profiles)\n\n        return objects\n\n    @staticmethod\n    def _get_netbox_from_row(row):\n        netbox = Netbox(ip=row['ip'])\n        netbox.room = get_object_or_fail(Room, id=row['roomid'])\n        netbox.organization = get_object_or_fail(Organization, id=row['orgid'])\n        netbox.category = get_object_or_fail(Category, id=row['catid'])\n        netbox.sysname = netbox.ip\n\n        master = row.get('master')\n        if master:\n            if is_valid_ip(master, strict=True):\n                netbox.master = get_object_or_fail(Netbox, ip=master)\n            else:\n                netbox.master = get_object_or_fail(Netbox, sysname__startswith=master)\n\n        return netbox\n\n    @staticmethod\n    def _get_management_profiles(netbox, profile_names):\n        if not profile_names:\n            return\n\n        profiles = profile_names.split('|')\n        profiles = [\n            get_object_or_fail(ManagementProfile, name=name)\n            for name in profiles\n            if name.strip()\n        ]\n        return [NetboxProfile(netbox=netbox, profile=profile) for profile in profiles]\n\n    @staticmethod\n    def _get_netboxinfo_from_function(netbox, function):\n        if function:\n            return NetboxInfo(\n                netbox=netbox, key=None, variable='function', value=function\n            )\n\n    @staticmethod\n    def _get_groups_from_group(netbox, netboxgroup):\n        if not netboxgroup:\n            return\n\n        netboxgroups = []\n        for netboxgroupid in [s for s in netboxgroup if s]:\n            netboxgroup = get_object_or_fail(NetboxGroup, id=netboxgroupid)\n            netboxgroups.append(NetboxCategory(netbox=netbox, category=netboxgroup))\n        return netboxgroups\n\n    @staticmethod\n    def _parse_data(datastring):\n        if datastring:\n            items = (item.split('=', 1) for item in datastring.split('|'))\n        else:\n            items = []\n        return dict(items) if items else dict()\n\n\nclass ServiceImporter(BulkImporter):\n    \"\"\"Creates objects from the service bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        objects = []\n        netbox = get_object_or_fail(Netbox, sysname=row['host'])\n        service = Service(netbox=netbox, handler=row['service'])\n        objects.append(service)\n\n        handler_descr = self._get_handler_descr(row['service'])\n        service_args = dict([arg.split('=', 1) for arg in row.get('arg', [])])\n        self._validate_handler_args(handler_descr, service_args)\n        service_properties = self._get_service_properties(service, service_args)\n\n        if service_properties:\n            objects.extend(service_properties)\n\n        return objects\n\n    @staticmethod\n    def _get_handler_descr(handler):\n        descr = get_description(handler)\n        if not descr:\n            raise BulkImportError(\"Service handler %s does not exist\" % handler)\n        return descr\n\n    @staticmethod\n    def _get_service_properties(service, args):\n        service_properties = []\n        for prop, val in args.items():\n            serviceprop = ServiceProperty(service=service, property=prop, value=val)\n            service_properties.append(serviceprop)\n        return service_properties\n\n    @staticmethod\n    def _validate_handler_args(handler_descr, service_args):\n        arg_keys = handler_descr.get('args', [])\n        optarg_keys = handler_descr.get('optargs', [])\n\n        for key in arg_keys:\n            if key not in service_args:\n                raise BulkImportError(\"Missing required property: %s\" % key)\n\n        for key in service_args:\n            if key not in arg_keys and key not in optarg_keys:\n                raise BulkImportError(\"Key %s is not valid for handler\" % key)\n\n\nclass LocationImporter(BulkImporter):\n    \"\"\"Creates objects from the location bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Location, id=row['locationid'])\n        if row['parent']:\n            parent = get_object_or_fail(Location, id=row['parent'])\n        else:\n            parent = None\n        aliases = _get_aliases(row.get('aliases', ''))\n        _validate_aliases(aliases)\n        location = Location(\n            id=row['locationid'],\n            parent=parent,\n            description=row['descr'],\n            aliases=aliases,\n        )\n        return [location]\n\n\nclass RoomImporter(BulkImporter):\n    \"\"\"Creates objects from the room bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Room, id=row['roomid'])\n        location = get_object_or_fail(Location, id=row['locationid'])\n        attributes = dict([attr.split('=', 1) for attr in row.get('attr', [])])\n        aliases = _get_aliases(row.get('aliases', ''))\n        _validate_aliases(aliases)\n        room = Room(\n            id=row['roomid'],\n            location=location,\n            description=row['descr'],\n            aliases=aliases,\n            data=attributes,\n        )\n        try:\n            room.position = PointField().to_python(row['position'])\n        except (ValidationError, ValueError):\n            raise InvalidValue(row['position'])\n        return [room]\n\n\nclass ManagementProfileImporter(BulkImporter):\n    \"\"\"Creates objects from the management profile bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(ManagementProfile, name=row['name'])\n        result = ManagementProfile(name=row['name'])\n\n        proto_lookup = {\n            name: value for value, name in ManagementProfile.PROTOCOL_CHOICES\n        }\n\n        result.protocol = proto_lookup.get(row['protocol'])\n        result.configuration = json.loads(row['configuration'])\n        return [result]\n\n\nclass OrgImporter(BulkImporter):\n    \"\"\"Creates objects from the organization bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Organization, id=row['orgid'])\n        if row['parent']:\n            parent = get_object_or_fail(Organization, id=row['parent'])\n        else:\n            parent = None\n        attributes = dict([attr.split('=', 1) for attr in row.get('attr', [])])\n        org = Organization(\n            id=row['orgid'],\n            parent=parent,\n            description=row['description'],\n            data=attributes,\n        )\n        return [org]\n\n\nclass PrefixImporter(BulkImporter):\n    \"\"\"Creates objects from the prefix bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Prefix, net_address=row['netaddr'])\n        net_type = get_object_or_fail(NetType, id=row['nettype'])\n\n        org = None\n        if row['orgid']:\n            org = get_object_or_fail(Organization, id=row['orgid'])\n\n        usage = None\n        if row['usage']:\n            usage = get_object_or_fail(Usage, id=row['usage'])\n\n        vlan_number = None\n        if row['vlan']:\n            vlan_number = int(row['vlan'])\n\n        vlan, _ = Vlan.objects.get_or_create(\n            vlan=vlan_number,\n            net_type=net_type,\n            organization=org,\n            net_ident=row['netident'],\n            usage=usage,\n            description=row['description'],\n        )\n        prefix = Prefix(net_address=row['netaddr'], vlan=vlan)\n        return [vlan, prefix]\n\n\nclass UsageImporter(BulkImporter):\n    \"\"\"Creates objects from the usage bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Usage, id=row['usageid'])\n        usage = Usage(id=row['usageid'], description=row['descr'])\n        return [usage]\n\n\nclass NetboxTypeImporter(BulkImporter):\n    \"\"\"Creates objects from the type bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        vendor = get_object_or_fail(Vendor, id=row['vendorid'])\n        raise_if_exists(NetboxType, sysobjectid=row['sysobjectid'])\n        raise_if_exists(NetboxType, vendor=vendor, name=row['typename'])\n\n        netbox_type = NetboxType(\n            vendor=vendor,\n            name=row['typename'],\n            sysobjectid=row['sysobjectid'],\n            description=row['description'],\n        )\n        return [netbox_type]\n\n\nclass VendorImporter(BulkImporter):\n    \"\"\"Creates objects from the vendor bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(Vendor, id=row['vendorid'])\n        vendor = Vendor(id=row['vendorid'])\n        return [vendor]\n\n\nclass NetboxGroupImporter(BulkImporter):\n    \"\"\"Creates objects from the netboxgroup bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        raise_if_exists(NetboxGroup, id=row['netboxgroupid'])\n        netboxgroup = NetboxGroup(\n            id=row['netboxgroupid'], description=row['description']\n        )\n        return [netboxgroup]\n\n\nclass CablingImporter(BulkImporter):\n    \"\"\"Creates objects from the cabling bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        room = get_object_or_fail(Room, id=row['roomid'])\n        raise_if_exists(Cabling, room=room, jack=row['jack'])\n        cabling = Cabling(\n            room=room,\n            jack=row['jack'],\n            building=row['building'],\n            target_room=row['targetroom'],\n            category=row['category'],\n            description=row['descr'],\n        )\n        return [cabling]\n\n\nclass PatchImporter(BulkImporter):\n    \"\"\"Creates objects from the patch bulk format\"\"\"\n\n    def _create_objects_from_row(self, row):\n        netbox = get_object_or_fail(Netbox, sysname=row['sysname'])\n        interface = get_object_or_fail(Interface, netbox=netbox, ifname=row['port'])\n        room = get_object_or_fail(Room, id=row['roomid'])\n        cabling = get_object_or_fail(Cabling, room=room, jack=row['jack'])\n\n        if not row['split']:\n            row['split'] = 'no'\n        patch = Patch(interface=interface, cabling=cabling, split=row['split'])\n        return [patch]\n\n\ndef get_object_or_fail(cls, **kwargs):\n    \"\"\"Gets the object as specified by the kwargs search arguments, and raises\n    bulk errors if not found.\n\n    cls -- Django ORM model to search for.\n    kwargs -- search parameters for a cls.objects.get() call.\n\n    \"\"\"\n    try:\n        return cls.objects.get(**kwargs)\n    except cls.DoesNotExist:\n        raise DoesNotExist(\"%s does not exist: %r\" % (cls.__name__, kwargs))\n    except cls.MultipleObjectsReturned:\n        raise MultipleObjectsReturned(\n            \"%s returned multiple: %r\" % (cls.__name__, kwargs)\n        )\n\n\ndef raise_if_exists(cls, **kwargs):\n    \"\"\"Raises AlreadyExists if an ORM object exists.\n\n    cls -- Django ORM model to search for.\n    kwargs -- search parameters for a cls.objects.get() call.\n\n    \"\"\"\n    result = cls.objects.filter(**kwargs)\n    if result.count() > 0:\n        raise AlreadyExists(\"%s already exists: %r\" % (cls.__name__, kwargs))\n\n\nclass BulkImportError(BulkParseError):\n    \"Import failed.\"\n\n    pass\n\n\nclass DoesNotExist(BulkImportError):\n    \"Object does not exist\"\n\n    pass\n\n\nclass MultipleObjectsReturned(BulkImportError):\n    \"Multiple objects returned\"\n\n    pass\n\n\nclass AlreadyExists(BulkImportError):\n    \"Object already exist in database\"\n\n    pass\n\n\nclass InvalidValue(BulkImportError):\n    \"\"\"Invalid value\"\"\"\n\n    pass\n\n\ndef reset_object_foreignkeys(obj):\n    \"\"\"Re-sets foreign key objects on obj.\n\n    This makes sure that the ID's of foreignkey objects are updated on obj\n    before obj.save() is attempted.\n\n    \"\"\"\n    for field in get_foreign_key_fields(obj):\n        value = getattr(obj, field.name)\n        if value:\n            setattr(obj, field.name, value)\n\n\ndef get_foreign_key_fields(obj):\n    \"\"\"Gets foreign key fields from this object\"\"\"\n    return [field for field in obj._meta.get_fields() if field.many_to_one]\n"
  },
  {
    "path": "python/nav/bulkparse.py",
    "content": "#\n# Copyright (C) 2010-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Bulk import format parsers.\"\"\"\n\nimport csv\nimport re\nimport io\nimport json\n\nfrom IPy import IP\n\nfrom nav.django.validators import is_valid_point_string\nfrom nav.errors import GeneralException\nfrom nav.models.manage import (\n    Location,\n    Room,\n    Organization,\n    Vendor,\n    Usage,\n    ManagementProfile,\n)\n\n\nclass BulkParser:\n    \"\"\"Abstract base class for bulk parsers\"\"\"\n\n    format = ()\n    required = 0\n    restkey = None\n    restkey_format = None\n\n    def __init__(self, data, delimiter=None):\n        if hasattr(data, 'seek'):\n            self.data = data\n        else:\n            if isinstance(data, bytes):\n                self.data = io.StringIO(data.decode('utf-8'))\n            else:\n                self.data = io.StringIO(data)\n\n        if delimiter is None:\n            try:\n                self.dialect = csv.Sniffer().sniff(\n                    self.data.read(200), delimiters=';:,'\n                )\n            except csv.Error:\n                self.dialect = None\n                self.delimiter = ':'\n            else:\n                self.delimiter = self.dialect.delimiter\n            finally:\n                self.data.seek(0)\n\n        self.reader = csv.DictReader(\n            CommentStripper(self.data),\n            fieldnames=self.format,\n            delimiter=self.delimiter,\n            restkey=self.restkey,\n            doublequote=True,\n            quoting=csv.QUOTE_ALL,\n        )\n        self.line_num = 0\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        \"\"\"Generate next parsed row\"\"\"\n        row = next(self.reader)\n        # although the DictReader doesn't return blank lines, we want\n        # to count them so we can pinpoint errors exactly within the\n        # source file.\n        self.line_num = self.reader.reader.line_num\n\n        self._strip_cell_whitespace(row)\n        self.validate_row(row)\n        return row\n\n    @staticmethod\n    def _strip_cell_whitespace(row):\n        \"\"\"Strip leading/trailing whitespace from all cell values.\n\n        Stray whitespace (especially tabs) in CSV fields can cause\n        database errors, e.g. PostgreSQL's inet type rejects IPs with\n        trailing whitespace.\n        \"\"\"\n        for key, value in row.items():\n            if isinstance(value, str):\n                row[key] = value.strip()\n            elif isinstance(value, list):\n                row[key] = [v.strip() if isinstance(v, str) else v for v in value]\n\n    def validate_row(self, row):\n        \"\"\"Validate an entire row\"\"\"\n        for fieldnum in range(self.required):\n            fieldname = self.format[fieldnum]\n            if fieldname not in row or not row[fieldname]:\n                raise RequiredFieldMissing(self.line_num, fieldname)\n\n        for fieldname, value in row.items():\n            if not self.is_valid_fieldvalue(fieldname, value):\n                raise InvalidFieldValue(self.line_num, fieldname, value)\n\n    def is_valid_fieldvalue(self, fieldname, value):\n        \"\"\"Verify the validity of a specific value\"\"\"\n        validatorname = \"_validate_%s\" % fieldname\n        if hasattr(self, validatorname) and callable(getattr(self, validatorname)):\n            return getattr(self, validatorname)(value)\n        else:\n            return True\n\n    @classmethod\n    def get_header(cls):\n        \"\"\"Returns a comment header describing the bulk format.\n\n        The comment header is built automatically using information provided\n        the descendant BulkParser class.\n\n        \"\"\"\n        separator = ':'\n        required = separator.join(cls.format[: cls.required])\n        optional = separator.join(cls.format[cls.required :])\n        restkey_format = cls.restkey_format if cls.restkey_format else cls.restkey\n        rest = \"%s%s...\" % (restkey_format, separator)\n\n        header = \"#\" + required\n        if cls.required < len(cls.format) or cls.restkey:\n            header += '['\n            header += optional and separator + optional or ''\n            header += cls.restkey and separator + rest or ''\n            header += ']'\n\n        return header\n\n\nclass CommentStripper:\n    \"\"\"Iterator that strips comments from the input iterator\"\"\"\n\n    COMMENT_PATTERN = re.compile(r'\\W*#[^\\n\\r]*')\n\n    def __init__(self, source_iterator):\n        self.source_iterator = source_iterator\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        \"\"\"Returns next line\"\"\"\n        line = next(self.source_iterator)\n        return self.COMMENT_PATTERN.sub('', line)\n\n\ndef validate_attribute_list(value):\n    \"\"\"Validates simple attribute lists.\n\n    Any 'restkey' column that has the required 'variable=value' format can be\n    validated by this function. Variable names and variable values themselves\n    are not validated in any way, just that there is a minimum of one equals\n    sign in there.\n    \"\"\"\n    if not isinstance(value, list):\n        return False\n    for arg in value:\n        items = arg.split('=', 1)\n        if len(items) < 2:\n            return False\n    return True\n\n\nclass NetboxBulkParser(BulkParser):\n    \"\"\"Parses the netbox bulk format\"\"\"\n\n    format = (\n        'roomid',\n        'ip',\n        'orgid',\n        'catid',\n        'management_profiles',\n        'master',\n        'function',\n        'data',\n    )\n    required = 4\n    restkey = 'netboxgroup'\n\n    @staticmethod\n    def _validate_ip(value):\n        try:\n            IP(value)\n        except ValueError:\n            return False\n        else:\n            return True\n\n    @staticmethod\n    def _validate_data(datastring):\n        try:\n            if datastring:\n                items = (item.split('=', 1) for item in datastring.split('|'))\n                if items:\n                    dict(items)\n        except ValueError:\n            return False\n        else:\n            return True\n\n\nclass ManagementProfileBulkParser(BulkParser):\n    \"\"\"Parses the netbox management profile bulk format.\n\n    The configuration attribute is a JSON attribute, but this cannot be fully\n    represented by the CSV-based bulk import/export format, so this will only\n    support simple \"flat dictionaries\", such as is used in some of the other\n    bulk formats.\n\n    \"\"\"\n\n    format = ('name', 'protocol', 'configuration')\n    required = 3\n\n    @staticmethod\n    def _validate_configuration(configuration):\n        try:\n            if configuration:\n                json.loads(configuration)\n        except ValueError:\n            return False\n        else:\n            return True\n\n    @staticmethod\n    def _validate_protocol(protocol):\n        allowable = set(name for value, name in ManagementProfile.PROTOCOL_CHOICES)\n        return protocol in allowable\n\n\nclass UsageBulkParser(BulkParser):\n    \"\"\"Parses the usage bulk format\"\"\"\n\n    format = ('usageid', 'descr')\n    required = 2\n    restkey = None\n    usageid_maxlength = getattr(Usage, '_meta').get_field('id').max_length\n\n    @classmethod\n    def _validate_usageid(cls, value):\n        return len(value) <= cls.usageid_maxlength\n\n\nclass LocationBulkParser(BulkParser):\n    \"\"\"Parses the location bulk format\"\"\"\n\n    format = ('locationid', 'parent', 'descr', 'aliases')\n    required = 1\n    locationid_maxlength = getattr(Location, '_meta').get_field('id').max_length\n\n    @classmethod\n    def _validate_locationid(cls, value):\n        return len(value) <= cls.locationid_maxlength\n\n\nclass OrgBulkParser(BulkParser):\n    \"\"\"Parses the organization bulk format\"\"\"\n\n    format = ('orgid', 'parent', 'description')\n    restkey = 'attr'\n    required = 1\n    _validate_attr = staticmethod(validate_attribute_list)\n    orgid_maxlength = getattr(Organization, '_meta').get_field('id').max_length\n\n    @classmethod\n    def _validate_orgid(cls, value):\n        return len(value) <= cls.orgid_maxlength\n\n\nclass PrefixBulkParser(BulkParser):\n    \"\"\"Parses the prefix bulk format\"\"\"\n\n    format = ('netaddr', 'nettype', 'orgid', 'netident', 'usage', 'description', 'vlan')\n    required = 2\n\n    @staticmethod\n    def _validate_netaddr(value):\n        try:\n            IP(value)\n        except ValueError:\n            return False\n        else:\n            return True\n\n    @staticmethod\n    def _validate_vlan(vlan):\n        try:\n            if vlan is not None:\n                int(vlan)\n        except ValueError:\n            return False\n        else:\n            return True\n\n\nclass RoomBulkParser(BulkParser):\n    \"\"\"Parses the room bulk format\"\"\"\n\n    format = ('roomid', 'locationid', 'descr', 'aliases', 'position')\n    restkey = 'attr'\n    required = 2\n    _validate_attr = staticmethod(validate_attribute_list)\n    roomid_maxlength = getattr(Room, '_meta').get_field('id').max_length\n\n    @classmethod\n    def _validate_roomid(cls, value):\n        return len(value) <= cls.roomid_maxlength\n\n    @classmethod\n    def _validate_position(cls, value):\n        return is_valid_point_string(value) if value is not None else True\n\n\nclass ServiceBulkParser(BulkParser):\n    \"\"\"Parses the service bulk format\"\"\"\n\n    format = ('host', 'service')\n    restkey = 'arg'\n    required = 2\n    _validate_arg = staticmethod(validate_attribute_list)\n\n\nclass NetboxGroupBulkParser(BulkParser):\n    \"\"\"Parses the netboxgroup bulk format\"\"\"\n\n    format = ('netboxgroupid', 'description')\n    required = 2\n\n\nclass NetboxTypeBulkParser(BulkParser):\n    \"\"\"Parses the type bulk format\"\"\"\n\n    format = ('vendorid', 'typename', 'sysobjectid', 'description')\n    required = 3\n\n\nclass VendorBulkParser(BulkParser):\n    \"\"\"Parses the vendor bulk format\"\"\"\n\n    format = ('vendorid',)\n    required = 1\n    vendorid_maxlength = getattr(Vendor, '_meta').get_field('id').max_length\n\n    @classmethod\n    def _validate_vendorid(cls, value):\n        return len(value) <= cls.vendorid_maxlength\n\n\nclass CablingBulkParser(BulkParser):\n    \"\"\"Parses the cabling bulk format\"\"\"\n\n    format = ('roomid', 'jack', 'building', 'targetroom', 'category', 'descr')\n    required = 5\n\n\nclass PatchBulkParser(BulkParser):\n    \"\"\"Parses the patch bulk format\"\"\"\n\n    format = ('sysname', 'port', 'roomid', 'jack', 'split')\n    required = 4\n\n\n#\n# exceptions\n#\nclass BulkParseError(GeneralException):\n    \"\"\"Bulk import parse error\"\"\"\n\n    def __repr__(self):\n        return \"<%s: %s>\" % (self.__class__.__name__, self)\n\n\nclass RequiredFieldMissing(BulkParseError):\n    \"\"\"A required field is missing\"\"\"\n\n    def __init__(self, line_num, missing_field):\n        super(RequiredFieldMissing, self).__init__()\n        self.line_num = line_num\n        self.missing_field = missing_field\n\n    def __str__(self):\n        return \"%s: '%s' on line %d\" % (\n            self.__doc__,\n            self.missing_field,\n            self.line_num,\n        )\n\n\nclass InvalidFieldValue(BulkParseError):\n    \"\"\"A field value is invalid\"\"\"\n\n    def __init__(self, line_num, field, value):\n        super(InvalidFieldValue, self).__init__()\n        self.line_num = line_num\n        self.field = field\n        self.value = value\n\n    def __str__(self):\n        return \"%s: '%s' is invalid value for field '%s' on line %d\" % (\n            self.__doc__,\n            self.value,\n            self.field,\n            self.line_num,\n        )\n"
  },
  {
    "path": "python/nav/colors.py",
    "content": "#\n# Copyright (C) 2013, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Simple tools for terminal color support\"\"\"\n\nimport os\nimport sys\nfrom functools import wraps\nimport curses\nfrom curses import (\n    COLOR_BLACK,\n    COLOR_BLUE,\n    COLOR_CYAN,\n    COLOR_GREEN,\n    COLOR_MAGENTA,\n    COLOR_RED,\n    COLOR_WHITE,\n    COLOR_YELLOW,\n)\n\n__all__ = [\n    'COLOR_BLACK',\n    'COLOR_BLUE',\n    'COLOR_CYAN',\n    'COLOR_GREEN',\n    'COLOR_MAGENTA',\n    'COLOR_RED',\n    'COLOR_WHITE',\n    'COLOR_YELLOW',\n    'colorize',\n    'set_foreground',\n    'reset_foreground',\n    'print_color',\n]\n\ntry:\n    curses.setupterm()\n    _set_color = curses.tigetstr('setaf') or ''\n    _reset_color = curses.tigetstr('sgr0') or ''\nexcept curses.error:\n    # silently ignore errors and turn off colors\n    _set_color = ''\n    _reset_color = ''\n    _is_term = False\nelse:\n    _is_term = sys.stdout.isatty()\nfinally:\n    if not _set_color:\n        _is_term = False\n\n_term = sys.stdout.buffer\n\n\ndef colorize(color):\n    \"\"\"Decorator that changes the foreground color of any terminal output from\n    a function, provided that the current terminal supports it.\n\n    Example::\n\n    @colorize(COLOR_YELLOW):\n    def hello_world():\n        print(\"Hello world!\")\n\n    \"\"\"\n\n    def _colorize(func):\n        @wraps(func)\n        def _wrapper(*args, **kwargs):\n            try:\n                set_foreground(color)\n                return func(*args, **kwargs)\n            finally:\n                reset_foreground()\n\n        return _wrapper if _is_term else func\n\n    return _colorize\n\n\ndef print_color(string, color, newline=True):\n    \"\"\"Prints a string to stdout using a specific color\"\"\"\n    set_foreground(color)\n    sys.stdout.write(string + ('\\n' if newline else ''))\n    reset_foreground()\n\n\ndef set_foreground(color):\n    \"\"\"Sets the current foreground color of the terminal\"\"\"\n    if _is_term:\n        _term.write(curses.tparm(_set_color, color))\n        _term.flush()\n\n\ndef reset_foreground():\n    \"\"\"Resets the foreground color of the terminal\"\"\"\n    if _is_term:\n        _term.write(_reset_color)\n        _term.flush()\n\n\ndef get_terminal_width():\n    \"\"\"\n    Attempts to return the current terminal width, independent of the\n    current curses screen.\n    \"\"\"\n    try:\n        _height, width = (\n            os.popen('stty size 2>/dev/null', 'r').read().strip().split(' ')\n        )\n        return int(width)\n    except Exception:  # noqa: BLE001\n        pass\n"
  },
  {
    "path": "python/nav/config/__init__.py",
    "content": "#\n# Copyright (C) 2008, 2009, 2013, 2017, 2018 Uninett AS\n# Copyright (C) 2022, 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility functions for NAV configuration file discovery and parsing.\"\"\"\n\nimport errno\nimport grp\nimport io\nimport logging\n\nimport os\nimport sys\nimport pwd\nimport stat\nimport configparser\nfrom pathlib import Path\nfrom typing import Iterator\n\nfrom nav.errors import GeneralException\nfrom nav.util import resource_files, resource_bytes\nfrom nav import buildconf\n\n_logger = logging.getLogger(__name__)\n\n# Potential locations to find configuration files\nCONFIG_LOCATIONS = [\n    os.path.expanduser('~/.local/etc/nav'),\n    os.path.expanduser('~/.local/etc'),\n    os.path.expanduser('~/.config/nav'),\n    '/etc/nav',\n    os.path.join(buildconf.datadir, 'conf'),\n]\n# If running inside a virtualenv, add that virtualenv to the search path as well:\n_base_prefix = (\n    # Detect the base prefix in a manner compatible with both old and new virtualenv\n    getattr(sys, \"base_prefix\", None) or getattr(sys, \"real_prefix\", None) or sys.prefix\n)\n_venv = sys.prefix if sys.prefix != _base_prefix else None\nif _venv:\n    CONFIG_LOCATIONS = [\n        os.path.join(_venv, 'etc'),\n        os.path.join(_venv, 'etc/nav'),\n        os.path.join(_venv, buildconf.datadir, 'conf'),\n    ] + CONFIG_LOCATIONS\n\n\ndef get_config_locations() -> Iterator[Path]:\n    \"\"\"Generator that yields config file search locations in priority order.\n\n    Dynamically evaluates the NAV_CONFIG_DIR environment variable first,\n    allowing it to be changed at runtime for testing purposes.\n    \"\"\"\n    if \"NAV_CONFIG_DIR\" in os.environ:\n        yield Path(os.environ[\"NAV_CONFIG_DIR\"])\n\n    for location in CONFIG_LOCATIONS:\n        yield Path(location)\n\n\ndef list_config_files_from_dir(dirname, suffix=\"conf\"):\n    return [\n        os.path.join(dirname, f)\n        for f in sorted(os.listdir(dirname))\n        if os.path.isfile(os.path.join(dirname, f))\n        and f.endswith(f\".{suffix}\")\n        and not f.startswith(\".\")\n    ]\n\n\ndef find_config_dir(suffix=\"conf\"):\n    nav_conf = find_config_file(f'nav.{suffix}')\n    if nav_conf:\n        return os.path.dirname(nav_conf)\n\n\ndef read_flat_config(config_file, delimiter='='):\n    \"\"\"Reads a key=value type config file into a dictionary.\n\n    :param config_file: the configuration file to read; either a file name\n                        or an open file object. If the filename is not an\n                        absolute path, NAV's configuration directory is used\n                        as the base path.\n    :param delimiter: the character used to assign values in the config file.\n    :returns: dictionary of the key/value pairs that were read.\n    \"\"\"\n\n    if isinstance(config_file, str):\n        config_file = open_configfile(config_file)\n\n    with config_file:\n        configuration = {}\n        for line in config_file.readlines():\n            line = line.strip()\n            # Unless the line is a comment, we parse it\n            if line and line[0] != '#':\n                # Split the key/value pair (max 1 split)\n                try:\n                    (key, value) = line.split(delimiter, 1)\n                    value = value.split('#', 1)[0]  # Remove end-of-line comments\n                    configuration[key.strip()] = value.strip()\n                except ValueError:\n                    sys.stderr.write(\"Config file %s has errors.\\n\" % config_file.name)\n\n        return configuration\n\n\ndef getconfig(configfile, defaults=None):\n    \"\"\"Reads an INI-style configuration file into a two-level dictionary.\n\n    :param configfile: the configuration file to read, either a name or an\n                       open file object.\n    :param defaults: A dict that is passed on to the underlying ConfigParser.\n    :returns: Returns a dict, with sections names as keys and a dict for each\n              section as values.\n\n    \"\"\"\n    if isinstance(configfile, str):\n        configfile = open_configfile(configfile)\n\n    with configfile:\n        config = configparser.RawConfigParser(defaults)\n        config.read_file(configfile)\n\n        sections = config.sections()\n        configdict = {}\n\n        for section in sections:\n            configsection = config.items(section)\n            configdict[section] = dict(configsection)\n\n        return configdict\n\n\nclass NAVConfigParser(configparser.ConfigParser):\n    \"\"\"A ConfigParser for NAV config files with some NAV-related\n    simplifications.\n\n    A NAV subsystem utilizing an INI-type config file can subclass this\n    class and define only the DEFAULT_CONFIG and the DEFAULT_CONFIG_FILES\n    class variables to be mostly self-contained.\n\n    Any file listed in the class variable DEFAULT_CONFIG_FILES will be\n    attempted read from any of NAV's accepted configuration directories and\n    from the current working directory upon instantation of the parser\n    subclass.\n\n    \"\"\"\n\n    DEFAULT_CONFIG = \"\"\n    DEFAULT_CONFIG_FILES = ()\n\n    def __init__(self, default_config=None, default_config_files=None):\n        if default_config is not None:\n            self.DEFAULT_CONFIG = default_config\n        if default_config_files is not None:\n            self.DEFAULT_CONFIG_FILES = default_config_files\n\n        configparser.ConfigParser.__init__(self)\n        # TODO: perform sanity check on config settings\n        faked_default_file = io.StringIO(self.DEFAULT_CONFIG)\n        self.read_file(faked_default_file)\n        self.read_all()\n\n    def read_all(self):\n        \"\"\"Reads all config files in DEFAULT_CONFIG_FILES\"\"\"\n        filenames = [\n            f\n            for f in (find_config_file(name) for name in self.DEFAULT_CONFIG_FILES)\n            if f\n        ]\n        filenames.extend(os.path.join('.', name) for name in self.DEFAULT_CONFIG_FILES)\n        files_read = self.read(filenames)\n\n        if files_read:\n            _logger.debug(\"Read config files %r\", files_read)\n        else:\n            _logger.debug(\"Found none of %r\", filenames)\n        return files_read\n\n\nclass NavConfigParserDefaultSection(object):\n    \"\"\"A ConfigParser for NAV config files with some NAV-related\n    simplifications and use a default section.\n\n    See NavConfigParser for more details.\n    \"\"\"\n\n    DEFAULT_CONFIG_FILES = ()\n    DEFAULT_CONFIG = \"\"\n\n    def __init__(self, section):\n        self.parser = NAVConfigParser(self.DEFAULT_CONFIG, self.DEFAULT_CONFIG_FILES)\n        self.section = section\n\n    def get(self, *args):\n        return self.parser.get(self.section, *args)\n\n    def getboolean(self, *args):\n        return self.parser.getboolean(self.section, *args)\n\n\ndef find_config_file(filename):\n    \"\"\"Searches for filename in any of the known config file locations\n\n    :returns: The first instance of filename found in the CONFIG_LOCATIONS\n              list, or None if the configfile was not found.\n    \"\"\"\n    if filename.startswith(os.sep):\n        return filename  # IDGAF, you gave me a fully qualified path\n    candidates = (directory / filename for directory in get_config_locations())\n    for candidate in candidates:\n        try:\n            if candidate.exists():\n                return str(candidate)\n        except PermissionError:\n            pass\n\n\ndef open_configfile(filename):\n    \"\"\"Opens and returns a file handle for a given config file.\n\n    The config file will be found using find_config_file()\n    \"\"\"\n    name = find_config_file(filename)\n    if name:\n        return io.open(name, encoding='utf-8')\n    else:\n        raise OSError(errno.ENOENT, os.strerror(errno.ENOENT), filename)\n\n\ndef install_example_config_files(target_directory, overwrite=False, callback=None):\n    \"\"\"Installs a copy of NAV's example configuration files in\n    target_directory\n\n    :param target_directory: A valid filesystem path to which we have write\n                             access.\n    :param overwrite: Existing files are overwritten if this is true.\n    :param callback: A function that is called with the full path name of each\n                     successfully written file.\n    \"\"\"\n    for resource in _config_resource_walk():\n        path = _install_single_config_resource_(resource, target_directory, overwrite)\n        if callback and path:\n            callback(path)\n\n\ndef _config_resource_walk(source=''):\n    \"\"\"Returns a generator that walks the entire tree of example config files\n    from available nav package resources. All paths returned will be relative to\n    the etc top directory.\n    \"\"\"\n    source = Path(source)\n    current_path = Path('etc') / source\n    for path in resource_files('nav').joinpath(current_path).iterdir():\n        name = path.name\n        full_name = current_path / name\n        relative_name = str(source / name)\n        if resource_files('nav').joinpath(full_name).is_dir():\n            for path in _config_resource_walk(source=relative_name):\n                yield str(path)\n        else:\n            yield relative_name\n\n\ndef _install_single_config_resource_(source, target, overwrite=False):\n    \"\"\"Installs a single config file resource from the nav packages, rooted at\n    the directory named in target.\n    \"\"\"\n    resource_path = os.path.join('etc', source)\n    dirname = os.path.dirname(source)\n    target_directory = os.path.join(target, dirname)\n    target_file = os.path.join(target, source)\n    if not os.path.exists(target_directory):\n        os.makedirs(target_directory, mode=0o755)\n\n    if not overwrite and os.path.exists(target_file):\n        return False\n\n    content = resource_bytes('nav', resource_path)\n    with open(target_file, 'wb') as handle:\n        handle.write(content)\n        return target_file\n\n\ndef verify_nav_config(config):\n    \"\"\"Verifies the validity of the most critical options of nav.conf\n\n    :param config: A NAV config dictionary, typically the result of\n                   read_flat_config('nav.conf')\n    :returns: None, but will raise a ConfigurationError if verification failed.\n\n    \"\"\"\n    if not config:\n        return\n\n    # First, verify presence of absolutely required options\n    for option in ('NAV_USER', 'LOG_DIR', 'PID_DIR'):\n        if option not in config:\n            raise ConfigurationError(\n                'Configuration option {} is missing!'.format(option)\n            )\n\n    # Verify that user exists\n    username = config['NAV_USER']\n    try:\n        pwd.getpwnam(username)\n    except KeyError:\n        raise ConfigurationError('No such user: {}'.format(username))\n\n    # Verify that directories exist and are writable\n    for option, moniker in (('LOG_DIR', 'log'), ('PID_DIR', 'pid file')):\n        dir_name = config[option]\n        if not os.path.isdir(dir_name):\n            raise ConfigurationError(\n                'The {} directory {} does not exist or is not a directory'.format(\n                    moniker, dir_name\n                )\n            )\n        if not _is_directory_writable_by_user(dir_name, username):\n            raise ConfigurationError(\n                'The {} directory {} is not writeable for the {} user'.format(\n                    moniker, dir_name, username\n                )\n            )\n\n\ndef _is_directory_writable_by_user(directory, username):\n    dir_stat = os.stat(directory)\n\n    user = pwd.getpwnam(username)\n    uid, gid = user.pw_uid, user.pw_gid\n    dir_mode = dir_stat[stat.ST_MODE]\n    dir_uid = dir_stat[stat.ST_UID]\n    dir_gid = dir_stat[stat.ST_GID]\n    dir_group = grp.getgrgid(dir_gid)\n\n    writeable_owner = uid == dir_uid and stat.S_IRWXU & dir_mode == stat.S_IRWXU\n    is_in_group = gid == dir_gid or username in dir_group.gr_mem\n    writeable_group = is_in_group and stat.S_IRWXG & dir_mode == stat.S_IRWXG\n    writeable_world = stat.S_IRWXO & dir_mode == stat.S_IRWXO\n\n    return writeable_owner or writeable_group or writeable_world\n\n\nclass ConfigurationError(GeneralException):\n    \"\"\"Configuration error\"\"\"\n\n    pass\n\n\ntry:\n    NAV_CONFIG = read_flat_config('nav.conf')\nexcept OSError:\n    NAV_CONFIG = {}\n"
  },
  {
    "path": "python/nav/config/toml.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility functions for NAV TOML configuration file discovery and parsing.\"\"\"\n\ntry:\n    import tomllib\nexcept ImportError:\n    # Before Python 3.11\n    import tomli as tomllib\n\nimport logging\nfrom collections import UserDict\nfrom collections.abc import Mapping\nfrom copy import deepcopy\nfrom typing import Optional\n\nfrom . import find_config_file\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass TOMLConfigParser(UserDict):\n    \"\"\"Parse a toml file or section of a toml file into a dict\n\n    The protocol is inspired by but does not blindly mimic NAVConfigParser.\n    Writing config files are as of yet not supported.\n\n    TOML as of 1.1 does not support null values so if null is needed define it\n    in the DEFAULT_CONFIG.\n    \"\"\"\n\n    SECTION: str = \"\"  # optional, for parsers specialized for a single section\n    DEFAULT_CONFIG: dict = {}\n    DEFAULT_CONFIG_FILE: str = \"\"\n\n    def __init__(\n        self, default_config: Optional[dict] = None, default_config_file: str = \"\"\n    ):\n        super().__init__()\n        if default_config is not None:\n            self.DEFAULT_CONFIG = default_config\n        # NOTE: a single filename!\n        if default_config_file:\n            self.DEFAULT_CONFIG_FILE = default_config_file\n\n        ok = self._read(self.DEFAULT_CONFIG_FILE)\n        if not ok:\n            self.data = self.DEFAULT_CONFIG\n\n    def __getitem__(self, key):\n        data = self.data\n        if self.SECTION:\n            data = self.data.get(self.SECTION, {})\n        if key in data:\n            return data[key]\n        raise KeyError(key)\n\n    def read_file(self, fp):\n        config = tomllib.load(fp)\n        self._merge_with_default(config)\n        return self.data\n\n    def read_string(self, s: str, /, *, parse_float=float):\n        config = tomllib.loads(s, parse_float)\n        self._merge_with_default(config)\n        return self.data\n\n    def _merge_with_default(self, configdict):\n        self.data = merge_dict_with_defaults(configdict, self.DEFAULT_CONFIG)\n\n    def _read(self, filename):\n        fqfn = find_config_file(filename)\n        if not fqfn:\n            _logger.warning('Config file \"%s\" not found!', filename)\n            return None\n        try:\n            with open(fqfn, \"rb\") as F:\n                self.read_file(F)\n        except OSError:\n            return None\n        return filename\n\n\ndef merge_dict_with_defaults(data, defaults):\n    \"\"\"Merge the mappings data and defaults, the values in data always wins\"\"\"\n    if not (isinstance(data, Mapping) and isinstance(defaults, Mapping)):\n        return data\n    outdict = deepcopy(data)\n    for key, value in defaults.items():\n        if key not in outdict:\n            outdict[key] = value\n            continue\n        if outdict[key] == value:\n            continue\n        if not isinstance(value, Mapping):\n            continue\n        outdict[key] = merge_dict_with_defaults(outdict[key], value)\n    return outdict\n"
  },
  {
    "path": "python/nav/daemon.py",
    "content": "# Copyright (C) 2006-2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Help functions for daemonizing a process.\n\nThe normal usage sequence for the functions is:\n    1. switchuser(username)\n        Switch user the process is running as\n    2. justme(pidfile)\n        Check that the daemon is not already running\n    3. daemonize(pidfile)\n        Go into the background\n        NOTE: Sets atexit function to daemonexit()\n    4. daemonexit(pidfile)\n        Clean up and delete the pidfile\n\nAll exceptions raised subclasses DaemonError.\n\n\"\"\"\n\nimport atexit\nimport grp\nimport logging\nimport signal\nimport os\nimport errno\nimport pwd\nimport sys\nimport time\nimport nav.logs\nfrom nav.config import NAV_CONFIG\n\nnav.logs.set_log_config()\n_logger = logging.getLogger('nav.daemon')\n\n\n# Exception classes\n\n\nclass DaemonError(Exception):\n    \"\"\"Base class for all exceptions raised by nav.daemon.\"\"\"\n\n    pass\n\n\nclass UserNotFoundError(DaemonError):\n    \"\"\"Raised if requested user is not found and we have to run as root.\"\"\"\n\n    def __init__(self, username):\n        super(UserNotFoundError, self).__init__()\n        self.username = username\n\n    def __str__(self):\n        return \"User (%s) not found, can't switch process user.\" % (self.username)\n\n\nclass SwitchUserError(DaemonError):\n    \"\"\"Raised if user switch failes, e.g. we don't have enough permissions.\"\"\"\n\n    def __init__(self, olduid, oldgid, newuid, newgid):\n        super(SwitchUserError, self).__init__()\n        self.olduid = olduid\n        self.oldgid = oldgid\n        self.newuid = newuid\n        self.newgid = newgid\n\n    def __str__(self):\n        return \"Failed to switch uid/gid from %d/%d to %d/%d.\" % (\n            self.olduid,\n            self.oldgid,\n            self.newuid,\n            self.newgid,\n        )\n\n\nclass AlreadyRunningError(DaemonError):\n    \"\"\"Raised if the daemon is alrady running.\"\"\"\n\n    def __init__(self, pid):\n        super(AlreadyRunningError, self).__init__()\n        self.pid = pid\n\n    def __str__(self):\n        return \"Daemon is already running with pid %d.\" % self.pid\n\n\nclass PidFileReadError(DaemonError):\n    \"\"\"Raised if we can't read a numeric pid from the pidfile.\"\"\"\n\n    def __init__(self, pidfile):\n        super(PidFileReadError, self).__init__()\n        self.pidfile = pidfile\n\n    def __str__(self):\n        return \"Can't read pid from pidfile (%s).\" % self.pidfile\n\n\nclass PidFileWriteError(DaemonError):\n    \"\"\"Raised if we can't write the pid to the pidfile.\"\"\"\n\n    def __init__(self, pidfile, error):\n        super(PidFileWriteError, self).__init__()\n        self.pidfile = pidfile\n        self.error = error\n\n    def __str__(self):\n        return \"Can't write pid to or remove pidfile (%s). (%s)\" % (\n            self.pidfile,\n            self.error,\n        )\n\n\nclass ForkError(DaemonError):\n    \"\"\"Raised if a fork fails.\"\"\"\n\n    def __init__(self, forkno, error):\n        super(ForkError, self).__init__()\n        self.forkno = forkno\n        self.error = error\n\n    def __str__(self):\n        return \"Failed fork #%d. (%s)\" % (self.forkno, self.error)\n\n\n# Daemon functions\n\n\ndef switchuser(username):\n    \"\"\"\n    Switch user the process is running as.\n\n    This method will only work if is are running as root.\n\n    Arguments:\n        ``username'' is the username of the user we want to run as.\n\n    Returns/raises:\n        If switch is a success, returns True.\n        If user is unknown and we're still running as root, raises\n        UserNotFoundError.\n        If failing to switch, raises SwitchUserError.\n\n    \"\"\"\n\n    # Get UID/GID we're running as\n    olduid = os.getuid()\n    oldgid = os.getgid()\n\n    try:\n        # Try to get information about the given username\n        _name, _passwd, uid, gid, _gecos, _dir, _shell = pwd.getpwnam(username)\n    except KeyError:\n        raise UserNotFoundError(username)\n    else:\n        if olduid != uid:\n            try:\n                # Set primary group\n                os.setgid(gid)\n\n                # Set non-primary groups\n                gids = []\n                for _name, _passwd, gid, members in grp.getgrall():\n                    if username in members:\n                        gids.append(gid)\n                if gids:\n                    os.setgroups(gids)\n\n                # Set user id\n                os.setuid(uid)\n            except OSError:\n                # Failed changing uid/gid\n                _logger.debug(\n                    \"Failed changing uid/gid from %d/%d to %d/%d.\",\n                    olduid,\n                    oldgid,\n                    uid,\n                    gid,\n                )\n                raise SwitchUserError(olduid, oldgid, uid, gid)\n            else:\n                # Switch successful\n                _logger.debug(\n                    \"uid/gid changed from %d/%d to %d/%d.\", olduid, oldgid, uid, gid\n                )\n                return True\n        else:\n            # Already running as the given user\n            _logger.debug(\"Running as uid/gid %d/%d.\", olduid, oldgid)\n            return True\n\n\ndef justme(pidfile):\n    \"\"\"\n    Check if already running.\n\n    Arguments:\n        ``pidfile'' is the path to the process' pidfile.\n\n    Returns/raises:\n        If daemon is not running, returns True.\n        If daemon is already running, raises AlreadyRunningError.\n        If pidfile is unreadable, raises PidFileReadError.\n        If pidfile is empty, but unremovable, raises PidFileWriteError.\n\n    \"\"\"\n    pidfile = pidfile_path(pidfile)\n\n    # If pidfile exists (is readable)\n    if os.access(pidfile, os.R_OK):\n        with open(pidfile, 'r') as pid_fd:\n            pid = pid_fd.readline().strip()\n\n        # Check if pidfile is empty (obscure, but we should handle it)\n        if pid == '':\n            # Remove pidfile and assume we're alone\n            try:\n                os.remove(pidfile)\n            except OSError as error:\n                _logger.debug(\"Unable to remove empty pidfile: %s\", error)\n                raise PidFileWriteError(pidfile, error)\n            return True\n\n        # Check if pid is readable\n        if pid.isdigit():\n            pid = int(pid)\n        else:\n            _logger.debug(\"Can't read pid from pid file %s.\", pidfile)\n            raise PidFileReadError(pidfile)\n\n        try:\n            # Sending signal 0 to check if process is alive\n            os.kill(pid, 0)\n        except OSError:\n            # Normally this means \"No such process\", and thus we're alone\n            return True\n        else:\n            # We assume the process lives and bails out\n            _logger.debug(\"%s already running with pid %d.\", sys.argv[0], pid)\n            raise AlreadyRunningError(pid)\n    else:\n        # No pidfile, assume we're alone\n        return True\n\n\ndef writepidfile(pidfile):\n    \"\"\"\n    Creates or overwrites pidfile with the current process id.\n    \"\"\"\n    # Write pidfile\n    pidfile = pidfile_path(pidfile)\n    pid = os.getpid()\n    try:\n        pid_fd = open(pidfile, 'w+')\n    except IOError as error:\n        _logger.debug(\n            'Cannot open pidfile %s for writing. Exiting. (%s)', pidfile, error\n        )\n        raise PidFileWriteError(pidfile, error)\n\n    pid_fd.write(\"%d\\n\" % pid)\n    pid_fd.close()\n\n\ndef pidfile_path(pidfile):\n    \"\"\"Returns a fully qualified path for the given pidfile\"\"\"\n    if pidfile.startswith(os.sep):\n        return pidfile\n    else:\n        return os.path.join(NAV_CONFIG['PID_DIR'], pidfile)\n\n\ndef redirect_std_fds(stdin=None, stdout=None, stderr=None):\n    \"\"\"Close and redirect the standard file descriptors.\n\n    If called without arguments, this function will first close, then\n    redirect the low-level file descriptors of stdout, stderr and\n    stdin to /dev/null.  If you wish to redirect one or more of these\n    standard channels to an existing file, pass already open file\n    objects as arguments.\n\n    Arguments:\n        ``stdin``  file object to redirect stdin to\n        ``stdout`` file object to redirect stdout to\n        ``stderr`` file object to redirect stderr to\n    \"\"\"\n    if stdin is None:\n        stdin = open(os.path.devnull, 'r')\n    if stdout is None:\n        stdout = open(os.path.devnull, 'w')\n    if stderr is None:\n        stderr = open(os.path.devnull, 'w')\n\n    # Make sure to flush and close before redirecting\n    sys.stdout.flush()\n    sys.stderr.flush()\n    os.close(sys.stdin.fileno())\n    os.close(sys.stdout.fileno())\n    os.close(sys.stderr.fileno())\n\n    # Duplicate the file descriptors\n    os.dup2(stdin.fileno(), sys.stdin.fileno())\n    os.dup2(stdout.fileno(), sys.stdout.fileno())\n    os.dup2(stderr.fileno(), sys.stderr.fileno())\n\n\ndef daemonize(pidfile, stdin=None, stdout=None, stderr=None):\n    \"\"\"\n    Move the process to the background as a daemon and write the pid of the\n    daemon to the pidfile.\n\n    Inspired by\n    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012\n\n    Arguments:\n        ``pidfile'' is the path to the process' pidfile.\n        ``stdin``  file object to redirect stdin to (default: /dev/null)\n        ``stdout`` file object to redirect stdout to (default: /dev/null)\n        ``stderr`` file object to redirect stderr to (default: /dev/null)\n\n    Returns/raises:\n        If success, returns True.\n        If fork fails, raises ForkError.\n        If writing of pidfile fails, raises PidFileWriteError.\n\n    \"\"\"\n    pidfile = pidfile_path(pidfile)\n    # Do first fork\n    # (allow shell to return, and permit us to call setsid())\n    try:\n        pid = os.fork()\n        if pid > 0:\n            # We're the first parent. Exit!\n            _logger.debug(\"First parent exiting. Second has pid %d.\", pid)\n            sys.exit(0)\n    except OSError as error:\n        _logger.debug(\"Fork #1 failed. (%s)\", error)\n        raise ForkError(1, error)\n\n    # Decouple from parent environment\n    os.chdir('/')  # In case the dir we started in are removed\n    os.umask(0)\n    os.setsid()\n\n    # Do second fork\n    # (prevent us from accidentally reacquiring a controlling terminal)\n    try:\n        pid = os.fork()\n        if pid > 0:\n            # We're the second parent. Exit!\n            _logger.debug(\"Second parent exiting. Daemon has pid %d.\", pid)\n            sys.exit(0)\n    except OSError as error:\n        _logger.exception(\"Fork #2 failed. (%s)\", error)\n        raise ForkError(2, error)\n\n    # Now only the child is left :-)\n    pid = os.getpid()\n    _logger.debug(\"Daemon started with pid %d.\", pid)\n\n    writepidfile(pidfile)\n\n    # Set cleanup function to be run at exit so pidfile always is removed\n    atexit.register(daemonexit, pidfile)\n\n    # Close and redirect standard file descriptors\n    redirect_std_fds(stdin, stdout, stderr)\n\n    return True\n\n\ndef daemonexit(pidfile):\n    \"\"\"\n    Clean up after daemon process. This functions is only runned by the\n    atexit handler.\n\n    Arguments:\n        ``pidfile'' is the path to the process' pidfile.\n\n    Returns/raises:\n        If success, returns True.\n        If removal of pidfile fails, raises PidFileWriteError.\n\n    \"\"\"\n    pidfile = pidfile_path(pidfile)\n    _logger.debug(\"Daemon is exiting. Cleaning up...\")\n\n    try:\n        os.remove(pidfile)\n    except OSError as error:\n        _logger.debug(\"Can't remove pidfile (%s). (%s)\", pidfile, error)\n        if error.errno != errno.ENOENT:\n            raise PidFileWriteError(pidfile, error)\n    else:\n        _logger.debug(\"pidfile (%s) removed.\", pidfile)\n    return True\n\n\ndef safesleep(delay):\n    \"\"\"Hackish workaround to protect against Linux kernel bug in time.sleep().\n\n    The bug will sometimes cause a call to time.sleep(1) to raise an\n    exception.  If a daemon doesn't handle this exception, it will\n    likely die.  Replacing calls to time.sleep(), where the argument\n    could possibly become the value 1, with this function in daemon\n    programs makes sure this exception is ignored if caught.\n\n    See http://www.tummy.com/journals/entries/jafo_20070110_154659\n    and https://bugs.launchpad.net/nav/+bug/352316\n    and https://github.com/Uninett/nav/issues/462\n\n    \"\"\"\n    try:\n        time.sleep(delay)\n    except IOError as error:\n        if error.errno == 514:\n            _logger.exception(\n                \"Ignoring possible Linux kernel bug in \"\n                \"time.sleep(): IOError=514. See LP#352316\"\n            )\n        else:\n            raise\n\n\ndef signame(signum):\n    \"\"\"Looks up signal name from signal number\"\"\"\n    lookup = dict(\n        (num, name) for name, num in vars(signal).items() if name.startswith('SIG')\n    )\n    return lookup.get(signum, signum)\n"
  },
  {
    "path": "python/nav/db/__init__.py",
    "content": "#\n# Copyright (C) 2006-2009 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nProvides common database functionality for NAV.\n\"\"\"\n\nimport atexit\nfrom functools import wraps\nimport logging\nimport os\nimport sys\nimport time\n\nimport psycopg2\nimport psycopg2.extensions\n\nimport nav\nfrom nav import config\n\n_logger = logging.getLogger('nav.db')\n_connection_cache = nav.ObjectCache()\ndriver = psycopg2\n\n\nclass ConnectionObject(nav.CacheableObject):\n    \"\"\"\n    Specialization of nav.CacheableObject to implement psycopg\n    connection caching.\n    \"\"\"\n\n    def __init__(self, object_, key):\n        super(ConnectionObject, self).__init__(object_)\n        self.key = key\n        self.last_validated = time.time()\n\n    def is_invalid(self):\n        \"\"\"Attempt to check whether the database connection has become\n        invalid, which would typically be caused by the connection\n        having been terminated without our knowledge or consent.\n        \"\"\"\n        try:\n            try:\n                if self.ping():\n                    self.last_validated = time.time()\n                    return False\n            except (psycopg2.ProgrammingError, psycopg2.OperationalError):\n                _logger.debug(\n                    'Invalid connection object (%r), age=%s', self.key, self.age()\n                )\n                self.object.close()\n                return True\n        except psycopg2.InterfaceError:\n            _logger.debug('Connection may already be closed (%r)', self.key)\n            return True\n\n    def ping(self):\n        \"\"\"'ping' the database connection.\n\n        Executes a simple query, like SELECT 1.  If no exceptions are\n        raised, the database connection should still be up.\n        \"\"\"\n        cursor = self.object.cursor()\n        cursor.execute('SELECT 1')\n        # If we got this far withouth exceptions, we did OK\n        return 1\n\n\ndef escape(string):\n    \"\"\"Escape a string for use in SQL statements.\n\n    ..warning:: You should be using parameterized queries if you can!\n\n    \"\"\"\n    quoted = psycopg2.extensions.QuotedString(string)\n    result = quoted.getquoted()\n    return result if isinstance(result, str) else result.decode(\"utf-8\")\n\n\ndef get_connection_parameters(script_name='default', database='nav'):\n    \"\"\"Return a tuple of database connection parameters.\n\n    The parameters are read from db.conf, using script_name as a\n    lookup key to find the database user to log in as.\n\n    :returns: A tuple containing the following elements:\n              (dbhost, dbport, dbname, user, password)\n\n    \"\"\"\n    # Get the config setup for the requested connection\n    conf = config.read_flat_config('db.conf')\n    dbhost = conf['dbhost']\n    dbport = conf['dbport']\n\n    db_option = 'db_%s' % database\n    if db_option not in conf:\n        _logger.debug(\n            \"connection parameter for database %s doesn't exist, \"\n            \"reverting to default 'db_nav'\",\n            database,\n        )\n        db_option = 'db_nav'\n    dbname = conf[db_option]\n\n    user_option = 'script_%s' % script_name\n    if user_option not in conf:\n        _logger.debug(\n            \"connection parameter for script %s doesn't exist, reverting to default\",\n            script_name,\n        )\n        user_option = 'script_default'\n    user = conf[user_option]\n\n    password = conf['userpw_%s' % user]\n    return dbhost, dbport, dbname, user, password\n\n\ndef get_connection_string(db_params=None, script_name='default'):\n    \"\"\"Returns a psycopg connection string.\n\n    :param db_params: A tuple of db connection parameters.  If omitted,\n                      get_connection_parameters is called to get this data,\n                      with script_name as its argument.\n\n    :param script_name: Script name to use for looking up connection\n                        info, if dbparams is supplied.\n\n    :returns: A suitable dsn string to use when calling psycopg2.connect()\n\n    \"\"\"\n    if not db_params:\n        db_params = get_connection_parameters(script_name)\n    dbhost, dbport, dbname, dbuser, dbpasswd = db_params\n    appname = os.path.basename(sys.argv[0]) or script_name\n    conn_string = (\n        \"host={dbhost} port={dbport} dbname={dbname} user={dbuser}\"\n        \" password={dbpasswd}\"\n        \" application_name='{appname} (NAV legacy)'\"\n    )\n    return conn_string.format(**locals())\n\n\ndef getConnection(scriptName, database='nav'):\n    \"\"\"\n    Returns an open database connection, as configured in db.conf for\n    the given scriptName.  Connections are cached, so that future\n    calls using the same parameters will receive an already open\n    connection.\n    \"\"\"\n    (dbhost, port, dbname, user, password) = get_connection_parameters(\n        scriptName, database\n    )\n    cache_key = (dbname, user)\n\n    # First, invalidate any dead connections.  Return a connection\n    # object from the cache if one exists, open a new one if not.\n    _connection_cache.invalidate()\n    try:\n        connection = _connection_cache[cache_key].object\n    except KeyError:\n        connection = psycopg2.connect(\n            get_connection_string((dbhost, port, dbname, user, password))\n        )\n        _logger.debug(\n            \"Opened a new database connection, scriptName=%s, dbname=%s, user=%s\",\n            scriptName,\n            dbname,\n            user,\n        )\n        # Se transaction isolation level READ COMMITTED\n        connection.set_isolation_level(1)\n        connection.set_client_encoding('utf8')\n        conn_object = ConnectionObject(connection, cache_key)\n        _connection_cache.cache(conn_object)\n\n    return connection\n\n\ndef closeConnections():\n    \"\"\"Close all cached database connections\"\"\"\n    for connection in _connection_cache.values():\n        try:\n            connection.object.close()\n        except psycopg2.InterfaceError:\n            pass\n\n\ndef commit_all_connections():\n    \"\"\"Attempts to commit the current transactions on all cached connections\"\"\"\n    conns = (v.object for v in _connection_cache.values())\n    for conn in conns:\n        conn.commit()\n\n\ndef retry_on_db_loss(count=3, delay=2, fallback=None, also_handled=None):\n    \"\"\"Decorates functions to retry them a set number of times in the face of\n    exceptions that appear to be database connection related. If the function\n    still fails with database errors after the set number of retries,\n    a fallback function is called, or the caught exception is re-raised.\n\n    :param count: Maximum number of times to retry the function\n    :param delay: The number of seconds to sleep between each retry\n    :param fallback: A function to run when all retry attempts fail. If\n                     set to None, the caught exception will be re-raised.\n    :param also_handled: A list of exception classes to catch in addition to\n                         the relevant ones from the psycopg2 library.\n\n    \"\"\"\n    if fallback:\n        assert callable(fallback)\n    handled = (psycopg2.OperationalError, psycopg2.InterfaceError)\n    if also_handled:\n        handled = handled + tuple(also_handled)\n\n    def _retry_decorator(func):\n        def _retrier(*args, **kwargs):\n            remaining = count\n            while remaining:\n                try:\n                    return func(*args, **kwargs)\n                except handled:\n                    remaining -= 1\n                    _logger.error(\n                        \"cannot establish db connection. retries remaining: %d\",\n                        remaining,\n                    )\n                    if remaining:\n                        time.sleep(delay)\n                        continue\n                    elif fallback:\n                        fallback()\n                    else:\n                        raise\n\n        return wraps(func)(_retrier)\n\n    return _retry_decorator\n\n\n###### Initialization ######\n\n\n# Psycopg doesn't seem to close connections when they are garbage\n# collected. Here we try to clean up our act on system exit, to\n# avoid the numerous \"unexpected EOF on client connection\" that NAV\n# seems to generate in the PostgreSQL logs.\natexit.register(closeConnections)\n\n\nclass ConnectionParameters(object):\n    \"\"\"Database Connection parameters\"\"\"\n\n    def __init__(self, dbhost, dbport, dbname, user, password):\n        self.dbhost = dbhost\n        self.dbport = dbport\n        self.dbname = dbname\n        self.user = user\n        self.password = password\n\n    @classmethod\n    def from_config(cls):\n        \"\"\"Initializes and returns parameters from NAV's config\"\"\"\n        return cls(*get_connection_parameters())\n\n    @classmethod\n    def from_environment(cls):\n        \"\"\"Initializes and returns parameters from environment vars\"\"\"\n        params = [\n            os.environ.get(v, None)\n            for v in ('PGHOST', 'PGPORT', 'PGDATABASE', 'PGUSER', 'PGPASSWORD')\n        ]\n        return cls(*params)\n\n    @classmethod\n    def for_postgres_user(cls):\n        \"\"\"Returns parameters suitable for logging in the postgres user using\n        PostgreSQL command line clients.\n        \"\"\"\n        config = cls.from_config()\n        environ = cls.from_environment()\n\n        if not environ.dbhost and config.dbhost != 'localhost':\n            environ.dbhost = config.dbhost\n        if not environ.dbport and config.dbport:\n            environ.dbport = config.dbport\n\n        return environ\n\n    def export(self, environ):\n        \"\"\"Exports parameters to environ.\n\n        Supply os.environ to export to subprocesses.\n\n        \"\"\"\n        added_environ = dict(\n            zip(\n                ('PGHOST', 'PGPORT', 'PGDATABASE', 'PGUSER', 'PGPASSWORD'),\n                self.as_tuple(),\n            )\n        )\n        for var, val in added_environ.items():\n            if val:\n                environ[var] = val\n\n    def as_tuple(self):\n        \"\"\"Returns parameters as a tuple\"\"\"\n        return (self.dbhost, self.dbport, self.dbname, self.user, self.password)\n\n    def __str__(self):\n        return get_connection_string(self.as_tuple())\n"
  },
  {
    "path": "python/nav/debug.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This module provides some useful debugging tools for NAV developers\"\"\"\n\nimport logging\nimport pprint\nfrom traceback import print_stack\nfrom io import StringIO\n\n\ndef calltracer(function, logfunction=print):\n    \"\"\"Decorator to trace function calls.\n\n    Decorate any function/method with calltracer to log tracebacks\n    of each call to the function.\n\n    :param logfunction: A function that accepts a string argument. The\n                        default function will just print to stdout.\n\n    \"\"\"\n\n    def _tracer(*args, **kwargs):\n        logfunction(\n            'TRACE: Call to %s, args=%s, kwargs=%s'\n            % (repr(function), repr(args), repr(kwargs))\n        )\n        trace = StringIO()\n        print_stack(file=trace)\n        trace.seek(0)\n        for line in trace.readlines():\n            logfunction('STACK: ' + line.rstrip())\n        return function(*args, **kwargs)\n\n    if not logfunction:\n        return function\n    else:\n        return _tracer\n\n\ndef log_stacktrace(logger, stacktrace):\n    \"\"\"Debug logs a stacktrace, including the global and local variables from\n    each stack frame.\n\n    :param logger: A logging.Logger instance.\n    :param stacktrace: An output from the inspect.trace() function.\n\n    \"\"\"\n    if not logger.isEnabledFor(logging.DEBUG):\n        # don't waste time here if DEBUG logging isn't activated\n        return\n\n    dump = []\n    for frame, filename, line_no, func, source, _ in stacktrace:\n        dump.append(\"  File %r, line %s, in %s\" % (filename, line_no, func))\n        for line in source:\n            dump.append(\"  %s\" % line.rstrip())\n\n        dump.append(\"(Globals)\")\n        globs = (\n            (var, val) for var, val in frame.f_globals.items() if var != '__builtins__'\n        )\n        dump.extend(_dumpvars(globs))\n\n        dump.append(\"(Locals)\")\n        dump.extend(_dumpvars(frame.f_locals.items()))\n        dump.append(\"\")\n\n    logger.debug(\"Stack frame dump:\\n%s\", '\\n'.join(dump))\n    logger.debug(\"--- end of stack trace ---\")\n\n\ndef _dumpvars(varitems):\n    for var, val in varitems:\n        try:\n            yield \"  %r: %s\" % (var, pprint.pformat(val, indent=2))\n        except Exception as err:  # noqa: BLE001\n            yield \"  %r: <<exception during formatting: %s>>\" % (var, err)\n\n\ndef log_last_django_query(logger):\n    \"\"\"Debug logs the latest SQL query made by Django.\n\n    Will only work if the DEBUG=True in the Django settings.\n\n    :param logger: The logging.Logger object to use for logging.\n    \"\"\"\n    from nav.models import manage as _manage  # noqa: F401 - import needed for debugging\n    from django.db import connection\n\n    if connection.queries:\n        logger.debug(\"Last Django SQL query was: %s\", connection.queries[-1]['sql'])\n"
  },
  {
    "path": "python/nav/dhcpstats/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/dhcpstats/common.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nCommon classes and functions used by DHCP API clients and various other parts of\nNAV that wants to make use of DHCP stats.\n\"\"\"\n\nimport logging\nfrom collections import defaultdict\nfrom dataclasses import dataclass\nfrom typing import Any, Iterable, Literal, Optional, Union\n\nimport IPy\n\nfrom nav.metrics.graphs import (\n    aliased_series,\n    json_graph_url,\n    nonempty_series,\n    summed_series,\n)\nfrom nav.metrics.names import get_expanded_nodes, safe_name\nfrom nav.metrics.templates import metric_path_for_dhcp\n\n\n_logger = logging.getLogger(__name__)\n\n# Type expected by functions in NAV that send stats to a Graphite/Carbon backend. Values\n# of this type are interpreted as (path, (timestamp, value)).\nGraphiteMetric = tuple[str, tuple[float, int]]\n\n\ndef fetch_graph_urls_for_prefixes(prefixes: list[IPy.IP]) -> list[str]:\n    \"\"\"\n    Takes a list of IP prefixes, queries Graphite for DHCP stat paths, and\n    returns a list of Graphite graph URLs; one URL for each group of DHCP stat\n    paths in Graphite where at least one path in the group represents a range of\n    IP addresses that intersect with one or more of the given prefixes.\n\n    Each returned Graphite URL points to JSON graph data and can be supplied\n    directly to NAV's JavaScript RickshawGraph function.\n    \"\"\"\n    if not prefixes:\n        return []\n\n    all_paths = fetch_paths_from_graphite()\n    grouped_paths = group_paths(all_paths)\n    filtered_grouped_paths = drop_groups_not_in_prefixes(grouped_paths, prefixes)\n\n    graph_urls: list[str] = []\n    for paths_of_same_group in sorted(filtered_grouped_paths):\n        paths_of_same_group = sorted(paths_of_same_group)\n        graph_lines = []\n        for path in paths_of_same_group:\n            assigned_addresses = nonempty_series(\n                aliased_series(\n                    path.to_graphite_path(\"assigned\"),\n                    name=(\n                        f\"Assigned addresses in {path.allocation_type} \"\n                        f\"{range_str(path.first_ip, path.last_ip)}\"\n                    ),\n                    renderer=\"area\",\n                ),\n            )\n            graph_lines.append(assigned_addresses)\n\n        # Just select an arbitrary path instance in the group\n        if len(paths_of_same_group) == 0:\n            _logger.error(\"group_paths() returned an empty group\")\n            continue\n        path = paths_of_same_group[0]\n\n        unassigned_addresses = aliased_series(\n            summed_series(path.to_graphite_path(\"unassigned\", wildcard_for_group=True)),\n            name=\"Total unassigned addresses\",\n            renderer=\"area\",\n            color=\"#d9d9d9\",\n        )\n        graph_lines.append(unassigned_addresses)\n        total_addresses = aliased_series(\n            summed_series(path.to_graphite_path(\"total\", wildcard_for_group=True)),\n            name=\"Total addresses\",\n            color=\"#707070\",\n        )\n        graph_lines.append(total_addresses)\n\n        type_human = path.allocation_type + (\"\" if path.is_standalone() else \"s\")\n        title = (\n            f\"{path.group_name} {type_human} on DHCPv{path.ip_version} server \"\n            f\"'{path.server_name}'\"\n        )\n        graph_urls.append(json_graph_url(*graph_lines, title=title))\n    return graph_urls\n\n\ndef fetch_paths_from_graphite():\n    \"\"\"\n    Fetches and returns all unique DHCP stat paths in Graphite when their\n    trailing metric_name path segment has been removed.\n    \"\"\"\n    wildcard = metric_path_for_dhcp(\n        ip_version=safe_name(\"{4,6}\"),\n        server_name=safe_name(\"*\"),\n        allocation_type=safe_name(\"{range,pool,subnet}\"),\n        group_name_source=safe_name(\"{custom_groups,special_groups}\"),\n        group_name=safe_name(\"*\"),\n        first_ip=safe_name(\"*\"),\n        last_ip=safe_name(\"*\"),\n        metric_name=\"assigned\",\n    )\n    graphite_paths = get_expanded_nodes(wildcard)\n\n    native_paths: list[DhcpPath] = []\n    for graphite_path in graphite_paths:\n        try:\n            native_path = DhcpPath.from_graphite_path(graphite_path)\n        except ValueError as err:\n            _logger.warning(\n                \"Could not decode the timeseries path '%s' fetched from Graphite: %s. \"\n                \"NAV will ignore this path, whereas Graphite will not; this incorrect \"\n                \"Graphite state is a likely cause of graphing-related bugs.\",\n                graphite_path,\n                err,\n            )\n            pass\n        else:\n            native_paths.append(native_path)\n    return native_paths\n\n\ndef group_paths(paths: list[\"DhcpPath\"]):\n    \"\"\"\n    Takes a list of DhcpPath instances and partitions it into multiple lists,\n    such that two DhcpPath instances belong to the same list if and only if they\n    have the same group data.\n    \"\"\"\n    grouped_paths: dict[Any, list[DhcpPath]] = defaultdict(list)\n    for path in paths:\n        group_path = path.to_graphite_path(\"assigned\", wildcard_for_group=True)\n        grouped_paths[group_path].append(path)\n    return list(grouped_paths.values())\n\n\ndef drop_groups_not_in_prefixes(\n    grouped_paths: list[list[\"DhcpPath\"]], prefixes: list[IPy.IP]\n):\n    \"\"\"\n    Takes a list of grouped DhcpPath instances, and returns only the groups that\n    have at least one DhcpPath instance that intersect with one or more of the\n    given prefixes.\n    \"\"\"\n    grouped_paths_to_keep: list[list[DhcpPath]] = []\n    for paths_of_same_group in grouped_paths:\n        if any(path.intersects(prefixes) for path in paths_of_same_group):\n            grouped_paths_to_keep.append(paths_of_same_group)\n    return grouped_paths_to_keep\n\n\ndef range_str(first_ip: IPy.IP, last_ip: IPy.IP):\n    \"\"\"\n    Returns a human-readable string that represents the range of IP addresses\n    between first_ip and last_ip (inclusive). If the addresses comprise a CIDR\n    block, CIDR notation is used. Otherwise, an ad-hoc notation is used.\n\n    >>> range_str(IPy.IP(\"192.0.0.32\"), IPy.IP(\"192.0.0.63\"))\n    \"192.0.0.32/27\"\n    >>> range_str(IPy.IP(\"192.0.0.31\"), IPy.IP(\"192.0.0.63\"))\n    \"192.0.0.31-192.0.0.63\"\n    >>> range_str(IPy.IP(\"192.0.0.32\"), IPy.IP(\"192.0.0.64\"))\n    \"192.0.0.32-192.0.0.64\"\n    \"\"\"\n    fallback = f\"{first_ip}-{last_ip}\"\n    if first_ip.version() == last_ip.version() == 4:\n        totalbits = 32\n    elif first_ip.version() == last_ip.version() == 6:\n        totalbits = 128\n    else:\n        return fallback\n    hostbits = (last_ip.int() - first_ip.int()).bit_length()\n    try:\n        net = IPy.IP(f\"{first_ip}/{totalbits - hostbits}\")\n    except ValueError:\n        return fallback\n    if net[0] == first_ip and net[-1] == last_ip:\n        return str(net)\n    else:\n        return fallback\n\n\n@dataclass(frozen=True, order=True)\nclass DhcpPath:\n    \"\"\"\n    Represents a path to a DHCP stat in Graphite sans the stat's metric_name.\n    The absence of metric_name means that all of the following DHCP stat paths\n    in Graphite:\n\n      nav.dhcp.servers.kea-osl.range.custom_groups.staff.4.1_0_1_1.1_0_1_255.assigned\n      nav.dhcp.servers.kea-osl.range.custom_groups.staff.4.1_0_1_1.1_0_1_255.total\n      nav.dhcp.servers.kea-osl.range.custom_groups.staff.4.1_0_1_1.1_0_1_255.declined\n\n    are represented by:\n\n      DhcpPath(\n          ip_version=4,\n          server_name\"kea-osl\",\n          allocation_type=\"range\",\n          group_name_source=\"custom_groups\",\n          group_name=\"staff\",\n          first_ip=IP(\"1.0.1.1\"),\n          last_ip=IP(\"1.0.1.255\"),\n      )\n\n    Instantiate me via :meth from_external_info: if path data is sourced from an\n     external source such as a DHCP server.\n    Instantiate me via :meth from_graphite_path: if path data is sourced from\n     NAV's Graphite database.\n    Use me to do the following translations, with validity checks:\n     external info (from DHCP server) --> DhcpPath <--> Graphite path\n    \"\"\"\n\n    # Fields are ordered according to how we want instances to be sorted,\n    # *not* how fields occur in the respective paths in Graphite\n    server_name: str\n    group_name_source: Literal[\"special_groups\", \"custom_groups\"]\n    group_name: str\n    allocation_type: Literal[\"range\", \"pool\", \"subnet\"]\n    ip_version: int\n    first_ip: IPy.IP\n    last_ip: IPy.IP\n\n    @classmethod\n    def from_graphite_path(cls, graphite_path: str):\n        \"\"\"\n        Instantiate me from a path to a DHCP stat (either sans metric_name or\n        not) from Graphite.\n\n        >>> d = {\"server_name\": \"foo\", \"allocation_type\": \"pool\",\n        ...   \"group_name\": None, \"first_ip\": \"::1\", \"last_ip\": \"::2\"}\n        >>> my_path = DhcpPath.from_external_info(**d)\n        >>> graphite_path = my_path.to_graphite_path(\"bar\")\n        >>> graphite_path\n        'nav.dhcp.servers.foo.pool.special_groups.standalone.6.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_2.bar'\n        >>> DhcpPath.from_graphite_path(graphite_path) == my_path\n        True\n        \"\"\"\n        parts = graphite_path.split(\".\")\n        if not len(parts) >= 10:\n            raise ValueError(\n                f\"Expected graphite_path {graphite_path!r} to have at least 10 \"\n                f\"dot-separated segments\"\n            )\n        server_name = parts[3]\n        allocation_type = parts[4]\n        group_name_source = parts[5]\n        group_name = parts[6]\n        ip_version = parts[7]\n        first_ip = parts[8]\n        last_ip = parts[9]\n\n        allowed_group_sources = (\"special_groups\", \"custom_groups\")\n        if group_name_source not in allowed_group_sources:\n            raise ValueError(\n                f\"group_source_name {group_name_source!r} is not in \"\n                f\"{allowed_group_sources!r}\"\n            )\n\n        allowed_allocation_types = (\"range\", \"pool\", \"subnet\")\n        if allocation_type not in allowed_allocation_types:\n            raise ValueError(\n                f\"allocation_type {allocation_type!r} is not in \"\n                f\"{allowed_allocation_types!r}\"\n            )\n\n        first_ip = cls._unescape_graphite_address(first_ip)\n        last_ip = cls._unescape_graphite_address(last_ip)\n        cls._check_ip_pair(first_ip, last_ip)\n\n        if (\n            str(first_ip.version()) != ip_version\n            or str(last_ip.version()) != ip_version\n        ):\n            raise ValueError(\n                f\"first_ip {first_ip!r} or last_ip {last_ip!r} not of same version as \"\n                f\"expected ip_version {ip_version!r}\"\n            )\n\n        return cls(\n            ip_version=first_ip.version(),\n            server_name=server_name,\n            allocation_type=allocation_type,\n            group_name_source=group_name_source,\n            group_name=group_name,\n            first_ip=first_ip,\n            last_ip=last_ip,\n        )\n\n    @classmethod\n    def from_external_info(\n        cls,\n        server_name: str,\n        allocation_type: Literal[\"range\", \"pool\", \"subnet\"],\n        group_name: Optional[str],\n        first_ip: Union[str, IPy.IP],\n        last_ip: Union[str, IPy.IP],\n    ):\n        \"\"\"\n        Instantiate me with path data sourced from an external source such as a\n        DHCP server.\n\n        if group_name is missing, group_name_source is set to \"special_groups\"\n         and group_name is set to \"standalone\" such that the returned instance\n         will be treated as belonging to a group of size one.\n        otherwise, group_name_source is set to \"custom_groups\".\n\n        if first_ip cannot be parsed to an IP address, raises a ValueError\n        if last_ip cannot be parsed to an IP address, raises a ValueError\n        if first_ip and last_ip does not have the same IP version, raises a ValueError\n        if first_ip > last_ip, raises a ValueError\n        otherwise, returns a DhcpPath instance.\n        \"\"\"\n        if group_name is None:\n            group_name_source = \"special_groups\"\n            group_name = \"standalone\"\n        else:\n            group_name_source = \"custom_groups\"\n\n        first_ip = IPy.IP(first_ip)\n        last_ip = IPy.IP(last_ip)\n        cls._check_ip_pair(first_ip, last_ip)\n\n        return cls(\n            ip_version=first_ip.version(),\n            server_name=server_name,\n            allocation_type=allocation_type,\n            group_name_source=group_name_source,\n            group_name=group_name,\n            first_ip=first_ip,\n            last_ip=last_ip,\n        )\n\n    def to_graphite_path(self, metric_name, wildcard_for_group=False):\n        \"\"\"\n        Return me as a path recognized by Graphite.\n        \"\"\"\n        if wildcard_for_group and not self.is_standalone():\n            first_ip = safe_name(\"*\")\n            last_ip = safe_name(\"*\")\n        else:\n            first_ip = self.first_ip.strNormal()\n            last_ip = self.last_ip.strNormal()\n\n        return metric_path_for_dhcp(\n            ip_version=self.ip_version,\n            server_name=self.server_name,\n            allocation_type=self.allocation_type,\n            group_name_source=self.group_name_source,\n            group_name=self.group_name,\n            first_ip=first_ip,\n            last_ip=last_ip,\n            metric_name=metric_name,\n        )\n\n    def intersects(self, prefixes: Iterable[IPy.IP]):\n        \"\"\"\n        Check if the range of IP addresses between self.first_ip and self.last_ip\n        intersect with any of the given prefixes.\n        \"\"\"\n        return any(\n            self.first_ip in prefix\n            or self.last_ip in prefix\n            or self.first_ip < prefix < self.last_ip\n            for prefix in prefixes\n        )\n\n    @staticmethod\n    def _unescape_graphite_address(escaped_address: str) -> IPy.IP:\n        parts = escaped_address.split(\"_\")\n        if len(parts) == 4:\n            return IPy.IP(\".\".join(parts))\n        elif len(parts) == 8:\n            return IPy.IP(\":\".join(parts))\n        else:\n            raise ValueError(\n                f\"{escaped_address!r} does not look like an escaped IP address\"\n            )\n\n    @staticmethod\n    def _check_ip_pair(first_ip: IPy.IP, last_ip: IPy.IP):\n        if len(first_ip) != 1:\n            raise ValueError(f\"first_ip {first_ip!r} must be an IP address\")\n\n        if len(last_ip) != 1:\n            raise ValueError(f\"last_ip {last_ip!r} must be an IP address\")\n\n        if first_ip.version() != last_ip.version():\n            raise ValueError(\n                f\"first_ip {first_ip!r} is not of same version as last_ip {last_ip!r}\"\n            )\n\n        if first_ip > last_ip:\n            raise ValueError(f\"first_ip {first_ip!r} greater than last_ip {last_ip!r}\")\n\n    def is_standalone(self):\n        return (\n            self.group_name_source == \"special_groups\"\n            and self.group_name == \"standalone\"\n        )\n"
  },
  {
    "path": "python/nav/dhcpstats/errors.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Exceptions and errors related to dhcpstats.\"\"\"\n\nfrom nav.errors import GeneralException\n\n\nclass CommunicationError(GeneralException):\n    \"\"\"Communication error\"\"\"\n\n\nclass KeaUnexpected(CommunicationError):\n    \"\"\"An unexpected error occurred when communicating with Kea\"\"\"\n\n\nclass KeaError(CommunicationError):\n    \"\"\"Kea API failed during command processing\"\"\"\n\n\nclass KeaUnsupported(CommunicationError):\n    \"\"\"Command not supported by Kea API\"\"\"\n\n\nclass KeaEmpty(CommunicationError):\n    \"\"\"Requested resource not found by Kea API\"\"\"\n\n\nclass KeaConflict(CommunicationError):\n    \"\"\"\n    Kea API failed to apply requested changes due to conflicts with\n    its internal state\n    \"\"\"\n"
  },
  {
    "path": "python/nav/dhcpstats/kea_dhcp.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nFetch DHCP stats from Kea DHCP servers, using the Kea API\n\"\"\"\n\nfrom dataclasses import dataclass\nfrom enum import IntEnum\nfrom functools import partial\nfrom itertools import chain\nimport json\nimport logging\nimport time\nfrom typing import Callable, Optional, Iterator\n\nfrom IPy import IP\nfrom requests import RequestException, JSONDecodeError, Session\nfrom requests.adapters import HTTPAdapter, Retry\n\nfrom nav.dhcpstats.common import DhcpPath, GraphiteMetric\nfrom nav.dhcpstats.errors import (\n    CommunicationError,\n    KeaEmpty,\n    KeaError,\n    KeaConflict,\n    KeaUnexpected,\n    KeaUnsupported,\n)\nfrom nav.errors import ConfigurationError\n\n_logger = logging.getLogger(__name__)\n\n\n@dataclass(order=True, frozen=True)\nclass Pool:\n    \"\"\"\n    A pool configured in a Kea DHCP server.\n\n    Note that what is called a pool in Kea is more specifically called a range\n    in NAV because it is guaranteed to contain all IP addresses between a first\n    and a last IP address (inclusive) whereas a pool in NAV might contain gaps.\n    \"\"\"\n\n    subnet_id: int\n    pool_id: int\n\n    group_name: Optional[str]\n    first_ip: IP\n    last_ip: IP\n\n    def __str__(self):\n        if self.group_name is None:\n            group_subsentence = \"\"\n        else:\n            group_subsentence = f\" and in group '{self.group_name}'\"\n        return (\n            f\"Kea pool {self.pool_id} from {self.first_ip} to {self.last_ip} \"\n            f\"in Kea subnet {self.subnet_id}{group_subsentence}\"\n        )\n\n\nclass Client:\n    \"\"\"\n    Fetches DHCP stats for each pool configured in a Kea DHCP server by using\n    its Kea API. See 'Client.fetch_stats()'.\n\n    Note: This client does not assume that any hooks have been installed into\n          the Kea DHCP server. Kea offers a 'lease-stats' hook that comes with\n          extra API commands which become necessary to use if one want reliable\n          stats when using a setup where multiple Kea DHCP servers share the\n          same underlying lease database since the standard API commands issue a\n          server's cache, not the underlying database. This client does not use\n          the hook. Anyhow, the hook doesn't support fetching statistics on a\n          per-pool basis, only per-subnet basis, which is too coarse for us.\n          See https://kea.readthedocs.io/en/kea-2.6.3/arm/hooks.html#libdhcp-stat-cmds-so-statistics-commands-for-supplemental-lease-statistics.\n    \"\"\"\n\n    def __init__(\n        self,\n        server_name: str,\n        url: str,\n        dhcp_version: int = 4,\n        http_basic_username: Optional[str] = None,\n        http_basic_password: Optional[str] = None,\n        client_cert_path: Optional[str] = None,\n        client_cert_key_path: Optional[str] = None,\n        user_context_groupname_key: str = \"group\",\n        timeout: float = 5.0,\n    ):\n        if not (\n            url.lower().startswith(\"https://\") or url.lower().startswith(\"http://\")\n        ):\n            raise ConfigurationError(\"url must have an HTTPS or HTTP scheme\")\n\n        self._server_name: str = server_name\n        self._url: str = url\n        self._dhcp_version: int = dhcp_version\n        self._http_basic_username: Optional[str] = http_basic_username\n        self._http_basic_password: Optional[str] = http_basic_password\n        self._client_cert_path: Optional[str] = client_cert_path\n        self._client_key_path: Optional[str] = client_cert_key_path\n        self._user_context_groupname_key: str = user_context_groupname_key\n        self._timeout: float = timeout\n\n        self._kea_config: Optional[dict] = None\n        self._session: Optional[Session] = None\n        self._start_time: float = time.time()\n\n        if dhcp_version == 4:\n            # self._api_extractors is a map from the name of stats in NAV to\n            # functions that extract that stat from a dict previously returned\n            # by the Kea API containing all stats\n            self._api_extractors: tuple[\n                tuple[str, Callable[[dict, Pool], int]], ...\n            ] = (\n                (\"total\", partial(_extract_pool_stat, name=\"total-addresses\")),\n                (\"assigned\", partial(_extract_pool_stat, name=\"assigned-addresses\")),\n                (\"declined\", partial(_extract_pool_stat, name=\"declined-addresses\")),\n                (\n                    \"unassigned\",\n                    lambda stats, pool: (\n                        _extract_pool_stat(stats, pool, name=\"total-addresses\")\n                        - _extract_pool_stat(stats, pool, name=\"assigned-addresses\")\n                    ),\n                ),\n            )\n        else:\n            raise ConfigurationError(f\"DHCPv{dhcp_version} is not supported\")\n\n    def __str__(self):\n        return (\n            f\"API client for Kea DHCPv{self._dhcp_version} server \"\n            f\"'{self._server_name}' at {self._url}\"\n        )\n\n    def fetch_stats(self) -> list[GraphiteMetric]:\n        \"\"\"\n        Fetches and returns a list containing the most recent stats of interest\n        for each pool configured in the Kea DHCP server. The stats of interest\n        are:\n\n        * The total amount of addresses in that Kea pool.\n          (Named \"total\" addresses in NAV.)\n\n        * The amount of currently assigned (aka. leased) addresses in that Kea pool.\n          (Named \"assigned\" addresses in NAV.)\n\n        * The amount of declined addresses in that Kea pool. That is, addresses in\n          that Kea pool that are erroneously used by unknown entities and therefore\n          not available for assignment. The set of declined addresses is a\n          subset of the set of assigned addresses.\n          (Named \"declined\" addresses in NAV.)\n\n        * The amount of currently unassigned addresses in that Kea pool.\n          (Named \"unassigned\" addresses in NAV.)\n\n        If the Kea API responds with an empty response to one or more of the\n        stats of interest for a Kea pool, these stats will be missing in the\n        returned list, but a list is still succesfully returned. Other errors\n        during this call will cause a subclass of\n        nav.dhcpstats.errors.CommunicationError or nav.errors.ConfigurationError\n        to be raised.\n        \"\"\"\n\n        self._session = self._create_session()\n        self._start_time = time.time()\n\n        kea_config = self._fetch_kea_config()\n        raw_stats = self._fetch_raw_stats()\n\n        subnets = self._subnets_of_kea_config(kea_config)\n        pools = list(\n            chain.from_iterable(self._pools_of_subnet(subnet) for subnet in subnets)\n        )\n        stats = list(\n            chain.from_iterable(self._stats_of_pool(raw_stats, pool) for pool in pools)\n        )\n\n        self._log_consistency_with_upstream_pools(pools)\n        self._log_runtime(\n            start_time=self._start_time,\n            end_time=time.time(),\n            n_stats=len(stats),\n            n_pools=len(pools),\n        )\n\n        self._session.close()\n        self._session = None\n        return stats\n\n    def _fetch_raw_stats(self) -> dict:\n        \"\"\"\n        Returns all statistics recorded by the Kea DHCP server.\n        (API command: 'statistic-get-all')\n        \"\"\"\n        response = self._send_query(\"statistic-get-all\")\n        return response.get(\"arguments\", {})\n\n    def _fetch_kea_config(self) -> dict:\n        \"\"\"\n        Returns the current configuration of the Kea DHCP server.\n        (API command: 'config-get'.)\n        \"\"\"\n        if (\n            self._kea_config is None\n            or (kea_config_hash := self._kea_config.get(\"hash\", None)) is None\n            or kea_config_hash != self._fetch_kea_config_hash()\n        ):\n            response = self._send_query(\"config-get\")\n            self._kea_config = response.get(\"arguments\", {}).get(\n                f\"Dhcp{self._dhcp_version}\", None\n            )\n            if not isinstance(self._kea_config, dict):\n                raise KeaUnexpected(\"Unrecognizable response to a 'config-get' request\")\n        return self._kea_config\n\n    def _fetch_kea_config_hash(self) -> Optional[str]:\n        \"\"\"\n        Returns the hash of the current configuration of the Kea DHCP server.\n        (API command: 'config-hash-get'.)\n        \"\"\"\n        try:\n            return (\n                self._send_query(\"config-hash-get\")\n                .get(\"arguments\", {})\n                .get(\"hash\", None)\n            )\n        except CommunicationError as err:\n            _logger.debug(str(err))\n            return None\n\n    def _send_query(self, command: str, **kwargs) -> dict:\n        \"\"\"\n        Returns the response from the Kea API to the given command instructed\n        towards the underlying Kea DHCP server. Keyword arguments to this\n        function will be passed along as arguments to the command.\n\n        Communication errors (HTTP errors, JSON errors, access control errors,\n        unrecognized json response formats) cause a CommunicationError to be\n        raised. If possible, it is reraised from a more descriptive error such\n        as an HTTPError.\n\n        Valid Kea API responses that indicate a failure on the server-end cause\n        a descriptive Kea-specific subclass of CommunicationError to be raised.\n\n        A ConfigurationError is raised if this client is configured in such a\n        way that it can't be consistent with its own configuration while still\n        properly communicating with the Kea API (for example when the use of\n        client certificates, which require TLS, is enabled but HTTPS is\n        disabled).\n        \"\"\"\n        session = self._session or self._create_session()\n\n        _logger.debug(\"Sending command '%s' to Kea API at %s\", command, self._url)\n\n        post_data = json.dumps(\n            {\n                \"command\": command,\n                \"arguments\": kwargs,\n                \"service\": [f\"dhcp{self._dhcp_version}\"],\n            }\n        )\n\n        try:\n            responses = session.post(\n                self._url,\n                data=post_data,\n                timeout=self._timeout,\n                headers={\"Content-Type\": \"application/json\"},\n            )\n            _logger.debug(\n                \"HTTP response status to command '%s' from %s was 'HTTP %s: %s'\",\n                command,\n                self._url,\n                responses.status_code,\n                responses.reason,\n            )\n            responses.raise_for_status()\n            responses = responses.json()\n        except JSONDecodeError as err:\n            raise KeaUnexpected(\n                f\"{self._url} does not look like a Kea API; \"\n                f\"response to command {command} was not valid JSON\",\n            ) from err\n        except RequestException as err:\n            raise CommunicationError from err\n\n        # Any valid response from Kea is a JSON list with one entry corresponding to the\n        # response from the dhcp server \"service\" we queried\n        if not (\n            isinstance(responses, list)\n            and len(responses) == 1\n            and isinstance((response := responses[0]), dict)\n            and \"result\" in response\n            and isinstance((status := response[\"result\"]), int)\n        ):\n            if (\n                isinstance(responses, dict)\n                and \"result\" in responses\n                and \"text\" in responses\n                and isinstance((status := responses[\"result\"]), int)\n                and isinstance((message := responses[\"text\"]), str)\n            ):\n                # If the response is a JSON object it's a specific error message\n                # See https://kea.readthedocs.io/en/kea-2.6.0/arm/ctrl-channel.html#control-agent-command-response-format\n                raise KeaUnexpected(f\"{status}: {message}\")\n            else:\n                # Otherwise, something odd is happening\n                raise KeaUnexpected(\n                    f\"{self._url} does not look like a Kea API; \"\n                    \"response JSON structured in an unknown way\",\n                )\n\n        _logger.debug(\n            \"API response status to command '%s' from %s was 'Kea %s: %s'\",\n            command,\n            self._url,\n            status,\n            response.get(\"text\", _KeaStatus.describe(status)),\n        )\n\n        _raise_for_kea_status(status)\n\n        return response\n\n    def _create_session(self) -> Session:\n        \"\"\"\n        Creates and returns an HTTP session with authentication based on\n        credentials passed during object initialization.\n        \"\"\"\n        _logger.debug(\n            \"Creating new HTTP/HTTPS session for use with Kea API at %s\", self._url\n        )\n\n        session = Session()\n\n        retries = Retry(\n            total=3,\n            backoff_factor=0.1,\n            status_forcelist=[500, 502, 503, 504],\n            allowed_methods={\"POST\"},\n        )\n\n        session.mount(\"https://\", HTTPAdapter(max_retries=retries))\n        session.mount(\"http://\", HTTPAdapter(max_retries=retries))\n\n        https = self._url.lower().startswith(\"https://\")\n\n        if https:\n            _logger.debug(\"Using HTTPS\")\n        else:\n            _logger.warning(\n                \"Using HTTP to request potentially sensitive data such as API passwords\"\n            )\n\n        if (\n            self._http_basic_username is not None\n            and self._http_basic_password is not None\n        ):\n            _logger.debug(\"Using HTTP Basic Authentication\")\n            if not https:\n                _logger.warning(\"Using HTTP Basic Authentication without HTTPS\")\n            session.auth = (self._http_basic_username, self._http_basic_password)\n        else:\n            _logger.debug(\"Not using HTTP Basic Authentication\")\n\n        if self._client_cert_path is not None:\n            _logger.debug(\"Using client certificate authentication\")\n            if not https:\n                raise ConfigurationError(\n                    \"Authentication using client certificates is only available for \"\n                    \"urls with HTTPS scheme\"\n                )\n            _logger.debug(\"Certificate path: '%s'\", self._client_cert_path)\n            if self._client_key_path is not None:\n                _logger.debug(\"Certificate key path: '%s'\", self._client_key_path)\n                session.cert = (self._client_cert_path, self._client_key_path)\n            else:\n                session.cert = self._client_cert_path\n        else:\n            _logger.debug(\"Not using client certificate authentication\")\n\n        return session\n\n    def _subnets_of_kea_config(self, config: dict) -> Iterator[dict]:\n        \"\"\"\n        Returns one subnet-dict per subnet configured under \"subnet\" or under\n        \"shared-networks\" of a Kea DHCP configuration.\n        \"\"\"\n        subnetkey = f\"subnet{self._dhcp_version}\"\n\n        standalone_subnets = config.get(subnetkey, [])\n        shared_network_subnets = chain.from_iterable(\n            shared_network_config.get(subnetkey, [])\n            for shared_network_config in config.get(\"shared-networks\", [])\n        )\n\n        yield from chain(standalone_subnets, shared_network_subnets)\n\n    def _pools_of_subnet(self, subnet: dict) -> Iterator[Pool]:\n        \"\"\"\n        Returns one Pool instance per pool configured under \"pools\" of a subnet\n        of a Kea DHCP configuration.\n        \"\"\"\n        try:\n            subnet_id = int(subnet[\"id\"])\n        except (KeyError, TypeError, ValueError):\n            _logger.error(\n                \"Misconfigured subnet from %s, skipping subnet...\",\n                self._url,\n            )\n            return\n\n        used_pool_ids = set()\n        for pool in subnet.get(\"pools\", []):\n            try:\n                pool_id = int(pool[\"pool-id\"])\n                first_ip, last_ip = self._bounds_of_pool_range(pool[\"pool\"])\n                group_name = self._group_name_of_pool(pool)\n            except (AttributeError, KeyError, TypeError, ValueError):\n                _logger.error(\n                    'Could not parse Kea pool in subnet %d from %s, skipping Kea '\n                    'pool... (make sure every Kea pool has \"pool-id\" and \"pool\" '\n                    'configured in the Kea DHCP configuration)',\n                    subnet_id,\n                    self._url,\n                )\n                continue\n\n            if pool_id not in used_pool_ids:\n                yield Pool(\n                    subnet_id=subnet_id,\n                    pool_id=pool_id,\n                    group_name=group_name,\n                    first_ip=first_ip,\n                    last_ip=last_ip,\n                )\n                used_pool_ids.add(pool_id)\n            else:\n                _logger.warning(\n                    \"Subnet %d from %s has multiple pools with the pool_id %d; \"\n                    \"due to this, the pool from %s to %s with pool_id %d will be \"\n                    \"ignored by NAV\",\n                    subnet_id,\n                    self._url,\n                    pool_id,\n                    first_ip,\n                    last_ip,\n                    pool_id,\n                )\n\n    def _stats_of_pool(self, raw_stats: dict, pool: Pool) -> Iterator[GraphiteMetric]:\n        \"\"\"\n        Returns as graphite metric tuples the most recent stats of interest in\n        raw_stats, for the given Kea pool.\n\n        raw_stats is a dictionary representing the result of the Kea API command\n        'statistic-get-all'.\n        \"\"\"\n        try:\n            path_prefix = DhcpPath.from_external_info(\n                server_name=self._server_name,\n                allocation_type=\"range\",\n                group_name=pool.group_name,\n                first_ip=pool.first_ip,\n                last_ip=pool.last_ip,\n            )\n        except ValueError as err:\n            _logger.error(\n                \"Error when creating graphite path for %s: %s\",\n                pool,\n                err,\n            )\n            return\n\n        for nav_stat_name, extractor in self._api_extractors:\n            try:\n                value = extractor(raw_stats, pool)\n            except ValueError as err:\n                _logger.warning(\n                    \"%s could not infer any value for the stat named '%s' for %s (%s). \"\n                    \"Skipping this stat for this pool (which will cause gaps in any \"\n                    \"related graph for this pool)\",\n                    self,\n                    nav_stat_name,\n                    pool,\n                    err,\n                )\n            else:\n                path = path_prefix.to_graphite_path(nav_stat_name)\n                yield (path, (self._start_time, value))\n\n    def _bounds_of_pool_range(self, pool_range: str) -> tuple[IP, IP]:\n        \"\"\"\n        Returns a pair where the first element is the first IP and the second\n        element is the last IP of a string used in the Kea DHCP configuration\n        file for representing a range of IP addresses. Example:\n\n        >>> client = Client(\"foo\", \"https://example.org\")\n        >>> client._bounds_of_pool_range(\"10.0.0.0 - 10.0.0.10\")\n        (IP('10.0.0.0'), IP('10.0.0.10'))\n        >>> client._bounds_of_pool_range(\"10.0.0.0/24\")\n        (IP('10.0.0.0'), IP('10.0.0.255'))\n        \"\"\"\n        if \"-\" in pool_range:\n            # x.x.x.x - x.x.x.x\n            range_start, _, range_end = pool_range.partition(\"-\")\n            range_start = IP(range_start.strip())\n            range_end = IP(range_end.strip())\n        else:\n            # x.x.x.x/m\n            ip = IP(pool_range.strip())\n            range_start = ip[0]\n            range_end = ip[-1]\n        return range_start, range_end\n\n    def _group_name_of_pool(self, pool: dict) -> Optional[str]:\n        \"\"\"\n        Looks for a group name in a pool of a Kea DHCP configuration. Returns\n        group name if found, else returns None.\n        \"\"\"\n        group_name_key = self._user_context_groupname_key\n        group_name = pool.get(\"user-context\", {}).get(group_name_key, None)\n        if not isinstance(group_name, str):\n            _logger.debug(\n                '%s did not find a group name when looking up \"%s\" in \"user-context\" '\n                'for a Kea pool',\n                self,\n                group_name_key,\n            )\n            return None\n        return group_name\n\n    def _log_consistency_with_upstream_pools(self, local_pools: list):\n        \"\"\"\n        The part of the Kea API that deal with pools identify each Kea pool by\n        ID. This function logs a warning if the mapping between pool ID and pool\n        object differs between the pools known to the client (local_pools) and\n        the pools known to the Kea API right now.\n        \"\"\"\n        upstream_config = self._fetch_kea_config()\n        upstream_subnets = self._subnets_of_kea_config(upstream_config)\n        upstream_pools = list(\n            chain.from_iterable(\n                self._pools_of_subnet(subnet) for subnet in upstream_subnets\n            )\n        )\n\n        if sorted(local_pools) != sorted(upstream_pools):\n            _logger.warning(\n                \"The Kea DHCPv4 server's pool configuration was modified while stats \"\n                \"were being fetched. This may cause stats collected during this run to \"\n                \"be associated with the wrong Kea pool (and subsequently wrong range \"\n                \"in NAV).\"\n            )\n\n    def _log_runtime(\n        self, start_time: float, end_time: float, n_stats: int, n_pools: int\n    ):\n        \"\"\"\n        Logs a debug message about the time spent during a 'self.fetch_stats()'\n        run and the amount of Kea pools and stats seen.\n        \"\"\"\n        _logger.debug(\n            \"Fetched %d stats from %d Kea pool(s) in %.2f seconds from %s\",\n            n_stats,\n            n_pools,\n            end_time - start_time,\n            self._url,\n        )\n\n\ndef _extract_pool_stat(raw_stats: dict, pool: Pool, name: str) -> int:\n    \"\"\"\n    Returns the value of the most recent stat in raw_stats with the given name\n    for the given pool.\n\n    raw_stats is a dictionary representing the result of the Kea API command\n    'statistic-get-all'.\n    \"\"\"\n    statistic = f\"subnet[{pool.subnet_id}].pool[{pool.pool_id}].{name}\"\n    samples = raw_stats.get(statistic, [])\n    if len(samples) == 0:\n        raise ValueError(\n            f\"No values found when looking up '{statistic}' in API response\"\n        )\n    # The reference API client assumes samples[0] is the most recent sample\n    # See https://gitlab.isc.org/isc-projects/stork/-/blob/4193375c01e3ec0b3d862166e2329d76e686d16d/backend/server/apps/kea/rps.go#L223-227\n    value, _timestring = samples[0]\n    return value\n\n\nclass _KeaStatus(IntEnum):\n    \"\"\"Status of a response sent from a Kea API\"\"\"\n\n    SUCCESS = 0\n    ERROR = 1\n    UNSUPPORTED = 2\n    EMPTY = 3\n    CONFLICT = 4\n\n    @classmethod\n    def describe(cls, status: int) -> str:\n        try:\n            return cls(status).name\n        except ValueError:\n            return \"(status has no description)\"\n\n\ndef _raise_for_kea_status(status: int):\n    \"\"\"\n    Raises a suitable Kea-specific subclass of CommunicationError if status is\n    not _KeaStatus.SUCCESS.\n    \"\"\"\n    if status == _KeaStatus.SUCCESS:\n        return\n    elif status == _KeaStatus.UNSUPPORTED:\n        raise KeaUnsupported\n    elif status == _KeaStatus.EMPTY:\n        raise KeaEmpty\n    elif status == _KeaStatus.ERROR:\n        raise KeaError\n    elif status == _KeaStatus.CONFLICT:\n        raise KeaConflict\n    else:\n        raise KeaUnexpected(\"Unknown response status\")\n"
  },
  {
    "path": "python/nav/django/__init__.py",
    "content": "\"\"\"Django customization for NAV.\"\"\"\n"
  },
  {
    "path": "python/nav/django/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass NavDjangoConfig(AppConfig):\n    name = 'nav.django'\n    verbose_name = 'NAV Django'\n"
  },
  {
    "path": "python/nav/django/context_processors.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2009 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Context processors for NAV.\"\"\"\n\nimport os\nfrom operator import attrgetter\n\nfrom django.conf import settings\nfrom django.urls import reverse\n\nfrom nav.config import find_config_file\nfrom nav.web.auth import get_login_url, get_logout_url\nfrom nav.web.auth.sudo import get_sudoer\nfrom nav.web.auth.utils import get_account\nfrom nav.web.auth.utils import get_number_of_accounts_with_password_issues\nfrom nav.web.message import Messages\nfrom nav.web.webfront.utils import tool_list, quick_read, split_tools\nfrom nav.models.profiles import NavbarLink\nfrom nav.buildconf import VERSION\nfrom nav.metrics import CONFIG\n\nCONTACT_INFORMATION_PATH = find_config_file(\n    os.path.join(\"webfront\", \"contact-information.txt\")\n)\n\n\ndef debug(_request):\n    \"\"\"Returns context variables helpful for debugging.\n\n    Same as django.templates.context_processors.debug, just without the check\n    against INTERNAL_IPS.\"\"\"\n    context_extras = {}\n    if settings.DEBUG:\n        context_extras['debug'] = True\n        from django.db import connection\n\n        context_extras['sql_queries'] = connection.queries\n    return context_extras\n\n\ndef account_processor(request):\n    \"\"\"Provides account information to RequestContext.\n\n    Returns these variables:\n     - account: This is the nav.models.profiles.Account object representing the\n       current user.\n     - is_admin: Does this user belong to the NAV administrator group\n     - messages: A list of message dictionaries which is meant for the user to\n       see.\n    \"\"\"\n    account = get_account(request)\n    admin = account.is_staff\n\n    if hasattr(request, 'session'):\n        messages = Messages(request)\n        messages = messages.get_and_delete()\n        sudo = get_sudoer(request)\n    else:\n        messages = None\n        sudo = None\n\n    my_links = NavbarLink.objects.filter(account=account)\n\n    tools = sorted(tool_list(account), key=attrgetter('name'))\n\n    password_issues = dict()\n    if account.has_password_issues():\n        password_issues[\"message\"] = (\n            \"Your account has an insecure or old password. It should be reset.\"\n        )\n        password_issues[\"link\"] = reverse(\"webfront-preferences\")\n        password_issues[\"link_message\"] = \"Change your password here.\"\n    else:\n        if admin:\n            number_accounts_with_password_issues = (\n                get_number_of_accounts_with_password_issues()\n            )\n            if number_accounts_with_password_issues > 0:\n                password_issues[\"message\"] = (\n                    f\"There are {number_accounts_with_password_issues} accounts that \"\n                    \"have insecure or old passwords.\"\n                )\n                password_issues[\"link\"] = reverse(\"useradmin\")\n                password_issues[\"link_message\"] = \"See which users are affected here.\"\n\n    current_user_data = {\n        'account': account,\n        'is_admin': admin,\n        'sudoer': sudo,\n        'messages': messages,\n        'my_links': my_links,\n        'tools': tools,\n        'split_tools': split_tools(tools),\n        'password_issues': password_issues,\n    }\n    return {\n        'current_user_data': current_user_data,\n    }\n\n\ndef nav_version(_request):\n    return {\n        'nav_version': VERSION,\n    }\n\n\ndef footer_info(_request):\n    return {'contact_information': quick_read(CONTACT_INFORMATION_PATH)}\n\n\ndef toolbox(request):\n    return {'available_tools': tool_list(get_account(request))}\n\n\ndef graphite_base(_request):\n    \"\"\"Provide graphite dashboard url in context\"\"\"\n    return {'graphite_base': CONFIG.get('graphiteweb', 'base')}\n\n\ndef auth(request):\n    \"\"\"Add the correct login url and logout url to context\"\"\"\n    login_url = get_login_url(request)\n    logout_url = get_logout_url(request)\n    return {\n        'login_url': login_url,\n        'logout_url': logout_url,\n    }\n"
  },
  {
    "path": "python/nav/django/decorators.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Custom django related decorators\"\"\"\n\nfrom functools import wraps\nfrom django.http import HttpResponse\n\nfrom nav.web.auth.utils import get_account\n\n\ndef require_admin(func):\n    \"\"\"Decorator for requiring admin on a request\"\"\"\n\n    @wraps(func)\n    def _wrapper(request, *args, **kwargs):\n        account = get_account(request)\n        if account.is_admin():\n            return func(request, *args, **kwargs)\n        else:\n            return HttpResponse(status=403)\n\n    return _wrapper\n"
  },
  {
    "path": "python/nav/django/defaults.py",
    "content": "PUBLIC_URLS = [\n    '/api/',  # No auth/different auth system\n    '/doc/',  # No auth/different auth system\n    '/about/',\n    '/index/login/',\n    '/index/audit-logging-modal/',\n    '/refresh_session',\n    '/accounts/login/',\n    '/accounts/2fa/authenticate/',\n]\nNAV_LOGIN_URL = '/index/login/'\nALLAUTH_LOGIN_URL = '/accounts/login/'\n\nLOGIN_URL = ALLAUTH_LOGIN_URL\n"
  },
  {
    "path": "python/nav/django/filter.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Custom exception reporter filter that masks password fields unconditionally.\n\nDjango's default SafeExceptionReporterFilter only masks POST parameters when\nthe view has been decorated with @sensitive_post_parameters. If a crash occurs\nin middleware before the view runs, the decorator never executes and cleartext\npasswords end up in error emails.\n\nThis filter adds a defence-in-depth layer: any POST key whose name contains\n\"password\" (case-insensitive) is always replaced with '********************',\nregardless of whether the request has a sensitive_post_parameters attribute.\n\"\"\"\n\nimport re\n\nfrom django.views.debug import SafeExceptionReporterFilter\n\n_PASSWORD_RE = re.compile(r\"password\", re.IGNORECASE)\n\n\nclass NAVExceptionReporterFilter(SafeExceptionReporterFilter):\n    \"\"\"Masks password-like POST parameters unconditionally.\"\"\"\n\n    def get_post_parameters(self, request):\n        post_data = super().get_post_parameters(request)\n        if isinstance(post_data, dict):\n            post_data = {\n                key: self.cleansed_substitute if _PASSWORD_RE.search(key) else value\n                for key, value in post_data.items()\n            }\n        return post_data\n"
  },
  {
    "path": "python/nav/django/formats/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/django/formats/en/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/django/formats/en/formats.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV's preferred date/time formats — ISO-style for consistent display.\n\nThese override Django's built-in en locale formats, preserving NAV's\nhistorical formatting now that USE_L10N is always enabled (Django 5.0+).\n\nMachine-consumed dates (data-sort attributes, API output) use hardcoded\nISO 8601 formats and are not affected by these settings.\n\"\"\"\n\nDATE_FORMAT = 'Y-m-d'\nTIME_FORMAT = 'H:i:s'\nDATETIME_FORMAT = 'Y-m-d H:i:s'\nSHORT_DATE_FORMAT = 'Y-m-d'\nSHORT_DATETIME_FORMAT = 'Y-m-d H:i'\nYEAR_MONTH_FORMAT = 'Y-m'\nMONTH_DAY_FORMAT = 'm-d'\n"
  },
  {
    "path": "python/nav/django/forms.py",
    "content": "#\n# Copyright (C) 2011, 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django form field types for NAV\"\"\"\n\nimport json\n\nfrom django import forms\nfrom django.core.exceptions import ValidationError\nfrom django.forms import Field, Textarea\n\nfrom nav.util import is_valid_cidr\nfrom nav.django import validators, widgets\n\nMAX_ALIAS_LENGTH = 64\n\n\nclass CIDRField(forms.CharField):\n    \"\"\"CIDR address text field with validation\"\"\"\n\n    def clean(self, value):\n        if value and not is_valid_cidr(value):\n            raise forms.ValidationError(\"Value must be a valid CIDR address\")\n        else:\n            return super(CIDRField, self).clean(value)\n\n\nclass PointField(forms.CharField):\n    widget = widgets.PointInput\n\n    def clean(self, value):\n        if not value or validators.is_valid_point_string(value):\n            return super(PointField, self).clean(value)\n        raise forms.ValidationError(\"Invalid format. Point field format is '(x,y)'.\")\n\n\nclass JSONWidget(Textarea):\n    def _render_value(self, value):\n        \"\"\"Convert the value to JSON\n\n        Falsey values are converted to an empty string. Bytestrings are\n        considered to be encoded as utf-8 and converted to text.\"\"\"\n        if value and not isinstance(value, str):\n            value = json.dumps(\n                value, sort_keys=True, indent=4, cls=validators.JSONBytesEncoder\n            )\n        else:\n            value = ''\n        return value\n\n    def render(self, name, value, attrs=None, renderer=None):\n        \"\"\"Convert the value to JSON and render in textarea\"\"\"\n        value = self._render_value(value)\n        return super(JSONWidget, self).render(name, value, attrs, renderer)\n\n\nclass HStoreField(Field):\n    def __init__(self, **params):\n        params['widget'] = params.get('widget', JSONWidget)\n        super(HStoreField, self).__init__(**params)\n\n    def to_python(self, value):\n        return validators.validate_hstore(value)\n\n\ndef validate_aliases(aliases: list[str]) -> list[str]:\n    \"\"\"\n    Validates a given list of aliases and raises a ValidationError if any of the\n    aliases contain the pipe character or are too long\n\n    Returns a deduplicated and stripped version of the given list\n    \"\"\"\n    if not aliases:\n        return []\n    cleaned = []\n    for item in aliases:\n        if not isinstance(item, str):\n            raise ValidationError(\"All aliases must be strings.\")\n        stripped = item.strip()\n        if \"|\" in stripped:\n            raise ValidationError(\"Aliases cannot contain the pipe character ('|')\")\n        if len(stripped) > MAX_ALIAS_LENGTH:\n            raise ValidationError(\n                f\"Alias must be {MAX_ALIAS_LENGTH} characters or fewer.\"\n            )\n        if stripped and stripped not in cleaned:\n            cleaned.append(stripped)\n    return cleaned\n\n\nclass AliasListWidget(forms.Widget):\n    \"\"\"Widget that renders a dynamic list of alias text inputs\"\"\"\n\n    template_name = 'seeddb/widgets/alias_list.html'\n\n    def get_context(self, name, value, attrs):\n        context = super().get_context(name, value, attrs)\n        if isinstance(value, str):\n            value = _parse_json_list(value)\n        context['aliases'] = value or []\n        return context\n\n    def value_from_datadict(self, data, files, name):\n        return _parse_json_list(data.get(f'{name}_json', '[]'))\n\n\nclass AliasListField(forms.Field):\n    \"\"\"Form field for editing a list of alias strings\"\"\"\n\n    widget = AliasListWidget\n\n    def __init__(self, *args, verbose_name='entry', **kwargs):\n        kwargs.setdefault(\n            'help_text',\n            \"Alternative names that can be used to find\"\n            f\" this {verbose_name} in searches.\",\n        )\n        super().__init__(*args, **kwargs)\n\n    def prepare_value(self, value):\n        if isinstance(value, str):\n            return _parse_json_list(value)\n        return value or []\n\n    def clean(self, value):\n        return validate_aliases(value)\n\n\ndef _parse_json_list(value):\n    \"\"\"Parse a JSON string as a list, returning [] on failure.\"\"\"\n    try:\n        result = json.loads(value)\n    except (json.JSONDecodeError, TypeError):\n        return []\n    if not isinstance(result, list):\n        return []\n    return result\n"
  },
  {
    "path": "python/nav/django/legacy.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Various functionality to bridge legacy NAV code with Django\"\"\"\n\nfrom django.utils.deprecation import MiddlewareMixin\n\nfrom nav import db\n\n\nclass LegacyCleanupMiddleware(MiddlewareMixin):\n    \"\"\"Django middleware to clean up NAV legacy database connections at the\n    end of each request cycle.\n\n    \"\"\"\n\n    def process_response(self, _request, response):\n        \"\"\"Rolls back any uncommitted legacy database connections,\n        to avoid idling indefinitely in transactions.\n\n        \"\"\"\n        connections = (v.object for v in db._connection_cache.values())\n        for conn in connections:\n            conn.rollback()\n\n        return response\n"
  },
  {
    "path": "python/nav/django/manage.py",
    "content": "#!/usr/bin/env python\nimport os\nimport sys\n\nsys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), \"../..\"))\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nif __name__ == \"__main__\":\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "python/nav/django/settings.py",
    "content": "#\n# Copyright (C) 2007-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Django configuration wrapper around the NAV configuration files\"\"\"\n\nimport logging\nimport os\nimport sys\nimport copy\nimport warnings\n\n# Backport Django 5.1's login_not_required decorator for Django < 5.1.\n# django-allauth uses this decorator to mark views that should be publicly\n# accessible (login, OAuth callback, password reset, etc.). On Django < 5.1\n# allauth falls back to a no-op, which means NAV's AuthorizationMiddleware\n# treats all allauth views as requiring authorization. This patch must run\n# before allauth's modules are imported (during app initialization).\nfrom django.contrib.auth import decorators as _auth_decorators\n\nif not hasattr(_auth_decorators, 'login_not_required'):\n\n    def _login_not_required(view_func):\n        view_func.login_required = False\n        return view_func\n\n    _auth_decorators.login_not_required = _login_not_required\n\nfrom django.utils.log import DEFAULT_LOGGING\n\nfrom nav.config import NAV_CONFIG, getconfig, find_config_dir\nfrom nav.db import get_connection_parameters\nimport nav.buildconf\nfrom nav.jwtconf import JWTConf, LocalJWTConfig\nfrom nav.web.security import WebSecurityConfigParser\nfrom nav.web.auth.allauth import MFAConfigParser, SocialConfigParser, OIDCConfigParser\nfrom nav.django.utils import get_os_version\n\n\n# Changes to `True` by default in Django 5.0\nUSE_TZ = False\n\nALLOWED_HOSTS = ['*']\n\n_config_dir = find_config_dir()\ntry:\n    _webfront_config = getconfig('webfront/webfront.conf')\nexcept (IOError, OSError):\n    _webfront_config = {}\n\nDEBUG = NAV_CONFIG.get('DJANGO_DEBUG', 'False').upper() in ('TRUE', 'YES', 'ON')\n\n# Copy Django's default logging config, but modify it to enable HTML e-mail\n# part for improved debugging:\nLOGGING = copy.deepcopy(DEFAULT_LOGGING)\n_handlers = LOGGING.get('handlers', {})\n_mail_admin_handler = _handlers.get('mail_admins', {})\n_mail_admin_handler['include_html'] = True\n\n\nclass Suppress503(logging.Filter):\n    \"\"\"Prevents 503 responses from generating admin error emails.\n\n    NAV returns 503 for expected operational errors such as unreachable managed\n    devices.  These are already logged by NAV's own loggers; the Django admin\n    emails would be redundant noise.\n    \"\"\"\n\n    def filter(self, record):\n        return getattr(record, 'status_code', None) != 503\n\n\n_filters = LOGGING.setdefault('filters', {})\n_filters['suppress_503'] = {'()': Suppress503}\n_mail_admin_filters = _mail_admin_handler.setdefault('filters', [])\n_mail_admin_filters.append('suppress_503')\n\n# Admins\nADMINS = (('NAV Administrator', NAV_CONFIG.get('ADMIN_MAIL', 'root@localhost')),)\nMANAGERS = ADMINS\nDEFAULT_EXCEPTION_REPORTER_FILTER = 'nav.django.filter.NAVExceptionReporterFilter'\n\n# Database / ORM configuration\ntry:\n    _appname = os.path.basename(sys.argv[0])\n    _host, _port, _name, _user, _password = get_connection_parameters('django')\n    DATABASES = {\n        'default': {\n            'NAME': _name,\n            'ENGINE': 'django.db.backends.postgresql_psycopg2',\n            'HOST': _host,\n            'PORT': _port,\n            'USER': _user,\n            'PASSWORD': _password,\n            'CONN_MAX_AGE': 300,  # 5 minutes\n            'OPTIONS': {\n                'application_name': _appname or 'NAV',\n            },\n        }\n    }\nexcept (IOError, OSError) as e:\n    warnings.warn(f\"Could not get connection parameters from db.conf: {e}\")\n\n# URLs configuration\nROOT_URLCONF = 'nav.django.urls'\n\n# Static files\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(nav.buildconf.webrootdir, 'static')\nSTATICFILES_FINDERS = (\n    'django.contrib.staticfiles.finders.FileSystemFinder',\n    'django.contrib.staticfiles.finders.AppDirectoriesFinder',\n)\n# This is a custom NAV setting for upload directory location:\nUPLOAD_DIR = NAV_CONFIG.get(\n    'UPLOAD_DIR', os.path.join(nav.buildconf.localstatedir, 'uploads')\n)\n\nSTATICFILES_DIRS = [\n    ('uploads', UPLOAD_DIR),\n]\n# Mount the NAV docs if running under the Django development server\n_base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..'))\n_doc_dir = os.path.join(_base_dir, 'build/sphinx/html')\nif os.path.isdir(_doc_dir):\n    STATICFILES_DIRS.append(('doc', _doc_dir))\n\n\n# Templates\n_global_template_dir = [os.path.join(_config_dir, 'templates')] if _config_dir else []\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': _global_template_dir + [nav.buildconf.djangotmpldir],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.request',\n                'django.contrib.messages.context_processors.messages',\n                'nav.django.context_processors.debug',\n                'nav.django.context_processors.account_processor',\n                'nav.django.context_processors.nav_version',\n                'nav.django.context_processors.graphite_base',\n                'nav.django.context_processors.footer_info',\n                'nav.django.context_processors.auth',\n                'django.template.context_processors.static',\n            ],\n            'debug': DEBUG,\n            \"builtins\": [\"nav.django.templatetags.query\"],\n        },\n    }\n]\n\n# Middleware\nMIDDLEWARE = (\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n    'django.middleware.common.CommonMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django_htmx.middleware.HtmxMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'nav.web.auth.middleware.NAVRemoteUserMiddleware',\n    'allauth.account.middleware.AccountMiddleware',\n    'nav.web.auth.middleware.NAVAuthenticationMiddleware',\n    'nav.web.auth.middleware.AuthorizationMiddleware',\n    'nav.django.legacy.LegacyCleanupMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n)\n\nAUTHENTICATION_BACKENDS = [\n    \"nav.web.auth.backends.NAVRemoteUserBackend\",\n    \"nav.web.auth.ldap_auth_backend.LdapBackend\",\n    \"django.contrib.auth.backends.ModelBackend\",\n    \"allauth.account.auth_backends.AuthenticationBackend\",\n]\nLOGIN_REDIRECT_URL = '/'\nLOGIN_URL = '/accounts/login/'\n\nSESSION_SERIALIZER = 'nav.web.session_serializer.PickleSerializer'\nSESSION_ENGINE = 'django.contrib.sessions.backends.db'\nSESSION_COOKIE_AGE = int(_webfront_config.get('sessions', {}).get('timeout', 3600))\nSESSION_COOKIE_NAME = 'nav_sessionid'\nSESSION_SAVE_EVERY_REQUEST = False\n\n# Message storage for the messages framework\nMESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'\n\n# Email sending\nDEFAULT_FROM_EMAIL = NAV_CONFIG.get('DEFAULT_FROM_EMAIL', 'nav@localhost')\nSERVER_EMAIL = DEFAULT_FROM_EMAIL\n\nEMAIL_HOST = NAV_CONFIG.get('EMAIL_HOST', 'localhost')\nEMAIL_PORT = int(NAV_CONFIG.get('EMAIL_PORT', 25))\n\nEMAIL_HOST_USER = NAV_CONFIG.get('EMAIL_HOST_USER', '')\nEMAIL_HOST_PASSWORD = NAV_CONFIG.get('EMAIL_HOST_PASSWORD', '')\nEMAIL_USE_TLS = NAV_CONFIG.get('EMAIL_USE_TLS', 'False') == 'True'\n\n# Localization\n# Django's default LANGUAGE_CODE is 'en-us', which maps to the 'en' locale.\n# NAV's custom format module (nav.django.formats.en) relies on this to provide\n# ISO-style date/time defaults.  If you change LANGUAGE_CODE, add a matching\n# format module or accept that locale's built-in date formats.\nLANGUAGE_CODE = 'en-us'\nFORMAT_MODULE_PATH = 'nav.django.formats'\nDATE_FORMAT = 'Y-m-d'\nTIME_FORMAT = 'H:i:s'\nSHORT_TIME_FORMAT = 'H:i'  # Use template filter to access this\nDATETIME_FORMAT = '%s %s' % (DATE_FORMAT, TIME_FORMAT)\nSHORT_DATETIME_FORMAT = '%s %s' % (DATE_FORMAT, SHORT_TIME_FORMAT)\n\nTIME_ZONE = NAV_CONFIG.get('TIME_ZONE', 'Europe/Oslo')\nDOMAIN_SUFFIX = NAV_CONFIG.get('DOMAIN_SUFFIX', None)\n\n# Cache backend. Used for report subsystem in NAV 3.5 and sorted statistics.\n# FIXME: Make this configurable in nav.conf (or possibly webfront.conf)\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',\n        'LOCATION': '/tmp/nav_cache',\n        'TIMEOUT': '60',\n    },\n    'sortedstats': {\n        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',\n        'LOCATION': '/tmp/nav_cache',\n        'TIMEOUT': '900',\n    },\n}\n\nSECRET_KEY = NAV_CONFIG.get('SECRET_KEY', 'Very bad default value!')\n\n# Because registering hstore extension in a database may lead to problems\n# with type conversion, force registering of hstore on each new connection\n# See https://github.com/djangonauts/django-hstore/pull/35\nDJANGO_HSTORE_GLOBAL_REGISTER = False\n\nNAVLETS = (\n    'nav.web.navlets.machinetracker.MachineTrackerNavlet',\n    'nav.web.navlets.error.ErrorWidget',\n    'nav.web.navlets.vlangraph.VlanGraphNavlet',\n    'nav.web.navlets.portadmin.PortadminNavlet',\n    'nav.web.navlets.linklist.LinkListNavlet',\n    'nav.web.navlets.messages.MessagesNavlet',\n    'nav.web.navlets.welcome.WelcomeNavlet',\n    'nav.web.navlets.room_map.RoomMapNavlet',\n    'nav.web.navlets.feedreader.FeedReaderNavlet',\n    'nav.web.navlets.navblog.NavBlogNavlet',\n    'nav.web.navlets.gettingstarted.GettingStartedWidget',\n    'nav.web.navlets.graph.GraphWidget',\n    'nav.web.navlets.watchdog.WatchDogWidget',\n    'nav.web.navlets.status2.Status2Widget',\n    'nav.web.navlets.report.ReportWidget',\n    'nav.web.navlets.sensor.SensorWidget',\n    'nav.web.navlets.alert.AlertWidget',\n    'nav.web.navlets.ups.UpsWidget',\n    'nav.web.navlets.pdu.PduWidget',\n    'nav.web.navlets.roomstatus.RoomStatus',\n    'nav.web.navlets.locationstatus.LocationStatus',\n    'nav.web.navlets.env_rack.EnvironmentRackWidget',\n)\n\n\nINSTALLED_APPS = (\n    'nav.models',\n    'nav.web',\n    'nav.django',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.staticfiles',\n    'django.contrib.sessions',\n    'django.contrib.humanize',\n    'django_filters',\n    'django_htmx',\n    'rest_framework',\n    'nav.auditlog',\n    'nav.web.macwatch',\n    'nav.web.geomap',\n    'nav.portadmin.napalm',\n    'nav.web.portadmin',\n    'django.contrib.postgres',\n    'allauth',\n    'allauth.account',\n    'allauth.mfa',\n    'allauth.socialaccount',\n    # noqa: Needs to be a setting\n    #'allauth.socialaccount.providers.dataporten',\n)\n\nDEFAULT_AUTO_FIELD = 'django.db.models.AutoField'\nAUTH_USER_MODEL = 'nav_models.Account'\n\n\nREST_FRAMEWORK = {\n    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),\n    'DEFAULT_PAGINATION_CLASS': 'nav.web.api.v1.NavPageNumberPagination',\n    'UNAUTHENTICATED_USER': 'nav.web.auth.utils.default_account',\n}\n\n# Classes that implement a search engine for the web navbar\nSEARCHPROVIDERS = [\n    'nav.web.info.searchproviders.RoomSearchProvider',\n    'nav.web.info.searchproviders.LocationSearchProvider',\n    'nav.web.info.searchproviders.NetboxSearchProvider',\n    'nav.web.info.searchproviders.InterfaceSearchProvider',\n    'nav.web.info.searchproviders.VlanSearchProvider',\n    'nav.web.info.searchproviders.PrefixSearchProvider',\n    'nav.web.info.searchproviders.DevicegroupSearchProvider',\n    'nav.web.info.searchproviders.UnrecognizedNeighborSearchProvider',\n]\n\n# Web security options supported by Django\n# * https://docs.djangoproject.com/en/3.2/ref/middleware/#module-django.middleware.security\n# * https://docs.djangoproject.com/en/3.2/topics/http/sessions/\n# * https://docs.djangoproject.com/en/3.2/ref/clickjacking/\n#\n# Configured in etc/webfront/webfront.conf:\n#  [security]\n#  needs_tls = yes\n#  frames_allow = self\n\nSECURE_BROWSER_XSS_FILTER = True  # Does no harm\n\n_websecurity_config = WebSecurityConfigParser()\n_needs_tls = bool(_websecurity_config.getboolean('needs_tls'))\nSESSION_COOKIE_SECURE = _needs_tls\nCSRF_COOKIE_SECURE = _needs_tls\nX_FRAME_OPTIONS = _websecurity_config.get_x_frame_options()\n\n# Hack for hackers to use features like debug_toolbar etc.\n# https://code.djangoproject.com/wiki/SplitSettings (Rob Golding's method)\nif _config_dir:\n    sys.path.append(os.path.join(_config_dir, \"python\"))\ntry:\n    LOCAL_SETTINGS\nexcept NameError:\n    try:\n        from local_settings import *\n    except ImportError:\n        pass\n\n_jwtconf = JWTConf()\n_issuers_setting = _jwtconf.get_issuers_setting()\n\n# If _issuer_setting is an empty dict, it means neither external nor local tokens\n# are configured (or theres an error), so we dont need to read the local config.\nif not _issuers_setting:\n    _local_config = LocalJWTConfig()\nelse:\n    _local_config = _jwtconf.get_local_config()\n\n# JWT settings are made available here so that they are read once on startup\n# instead of being read on-demand.\n# This is to combat inconsistencies that can occur if the config changes during runtime.\nJWT_PRIVATE_KEY = _local_config.private_key\nJWT_PUBLIC_KEY = _local_config.public_key\nJWT_NAME = _local_config.name\nJWT_ACCESS_TOKEN_LIFETIME = _local_config.access_token_lifetime\nJWT_REFRESH_TOKEN_LIFETIME = _local_config.refresh_token_lifetime\n# If the local config is empty, we assume that local JWT tokens are\n# not configured or the config is invalid.\nLOCAL_JWT_IS_CONFIGURED = _local_config != LocalJWTConfig()\n\nOIDC_AUTH = {\n    'JWT_ISSUERS': _issuers_setting,\n    'JWT_AUTH_HEADER_PREFIX': 'Bearer',\n}\n\n# Add NAV and OS-versions so they are added to exception views\nNAV_VERSION = nav.buildconf.VERSION\nOS_VERSION = get_os_version()\n\n# Allauth settings\n\nACCOUNT_ADAPTER = \"nav.web.auth.allauth.adapter.NAVAccountAdapter\"\nACCOUNT_USER_MODEL_USERNAME_FIELD = 'login'\nACCOUNT_ALLOW_SIGNUPS = False\nACCOUNT_MAX_EMAIL_ADDRESSES = 1\n\nMFA_ADAPTER = \"nav.web.auth.allauth.adapter.NAVMFAAdapter\"\nMFA_TOTP_ISSUER = 'NAV'\nMFA_TOTP_TOLERANCE = 1\n\n_allauth_mfa_config = MFAConfigParser()\nMFA_SUPPORTED_TYPES = _allauth_mfa_config.get_MFA_SUPPORTED_TYPES_setting()\nMFA_PASSKEY_LOGIN_ENABLED = _allauth_mfa_config.get_MFA_PASSKEY_LOGIN_ENABLED_setting()\nMFA_PASSKEY_SIGNUP_ENABLED = (\n    _allauth_mfa_config.get_MFA_PASSKEY_SIGNUP_ENABLED_setting()\n)\nMFA_WEBAUTHN_ALLOW_INSECURE_ORIGIN = (\n    _allauth_mfa_config.get_MFA_WEBAUTHN_ALLOW_INSECURE_ORIGIN_setting()\n)\n\n# SOCIALACCOUNT_AUTO_SIGNUP = True\n# SOCIALACCOUNT_ADAPTER = 'nav.web.auth.allauth.adapter.NAVSocialAccountAdapter'\n\nSOCIALACCOUNT_PROVIDERS = {}\n\n_allauth_social_config = SocialConfigParser()\n_social_providers = _allauth_social_config.generate_SOCIALACCOUNT_PROVIDERS()\nif _social_providers:\n    SOCIALACCOUNT_PROVIDERS.update(_social_providers)\n    INSTALLED_APPS += tuple(_allauth_social_config.get_provider_import_paths())\n\n_allauth_oidc_parser = OIDCConfigParser()\n_oidc_providers = _allauth_oidc_parser.generate_SOCIALACCOUNT_PROVIDERS()\nif _oidc_providers:\n    SOCIALACCOUNT_PROVIDERS.update(_oidc_providers)\n    INSTALLED_APPS += tuple(_allauth_oidc_parser.get_provider_import_paths())\n"
  },
  {
    "path": "python/nav/django/templatetags/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/django/templatetags/breadcrumbs.py",
    "content": "from functools import cache\n\nfrom django import template\nfrom django.urls import reverse\n\nregister = template.Library()\n\n\n@cache\ndef _get_breadcrumb_config():\n    \"\"\"Build breadcrumb configuration on first use.\n\n    Deferred to avoid calling reverse() at module import time, which forces\n    all URL configs and their views to be loaded eagerly.\n    \"\"\"\n    base_crumb = ('Home', reverse('webfront-index'))\n    base_account_crumb = ('Account', reverse('webfront-preferences'))\n\n    breadcrumb_map = {\n        reverse('webfront-preferences'): [base_account_crumb],\n        reverse('account_change_password'): [\n            base_account_crumb,\n            ('Change Password', ''),\n        ],\n        reverse('account_reauthenticate'): [\n            base_account_crumb,\n            ('Re-authenticate', ''),\n        ],\n        reverse('socialaccount_connections'): [\n            base_account_crumb,\n            ('Account Connections', ''),\n        ],\n    }\n\n    two_factor_auth_crumb = [\n        base_account_crumb,\n        ('Two-Factor Authentication', ''),\n    ]\n\n    mfa_prefix = reverse('mfa_index')\n\n    return base_crumb, breadcrumb_map, two_factor_auth_crumb, mfa_prefix\n\n\n@register.filter\ndef to_breadcrumbs(path):\n    \"\"\"\n    Generate breadcrumb navigation from a given URL path.\n\n    :param path: The URL path (e.g., \"/section/subsection/page/\").\n    :type path: str\n    :return: A list of tuples where each tuple contains the name and URL\n        of each breadcrumb.\n    :rtype: list\n    \"\"\"\n    base_crumb, breadcrumb_map, two_factor_auth_crumb, mfa_prefix = (\n        _get_breadcrumb_config()\n    )\n\n    path = clean_path(path)\n    if path in breadcrumb_map:\n        return [base_crumb] + breadcrumb_map[path]\n\n    if path.startswith(mfa_prefix):\n        return [base_crumb] + two_factor_auth_crumb\n\n    return [base_crumb]\n\n\ndef clean_path(path):\n    \"\"\"Cleans the path by removing query parameters.\"\"\"\n    path = path.split('?', 1)[0]\n    return path\n"
  },
  {
    "path": "python/nav/django/templatetags/date_and_time.py",
    "content": "\"\"\"Template filters and tags for helping with dates and datetimes\"\"\"\n\nfrom datetime import timedelta\nfrom django import template\nfrom django.template.defaultfilters import date, time\nfrom nav.django.settings import DATETIME_FORMAT, SHORT_TIME_FORMAT\n\nregister = template.Library()\n\n\n@register.filter\ndef default_datetime(value):\n    \"\"\"Returns the date as represented by the default datetime format\"\"\"\n    try:\n        v = date(value, DATETIME_FORMAT)\n    except Exception:  # noqa: BLE001\n        return value\n\n    return v\n\n\n@register.filter\ndef short_time_format(value):\n    \"\"\"Returns the value formatted as a short time format\n\n    The SHORT_TIME_FORMAT is a custom format not available in the template\n    \"\"\"\n    try:\n        return time(value, SHORT_TIME_FORMAT)\n    except Exception:  # noqa: BLE001\n        return value\n\n\n@register.filter\ndef remove_microseconds(delta):\n    \"\"\"Removes microseconds from timedelta\"\"\"\n    try:\n        return delta - timedelta(microseconds=delta.microseconds)\n    except Exception:  # noqa: BLE001\n        return delta\n"
  },
  {
    "path": "python/nav/django/templatetags/forms.py",
    "content": "\"\"\"Template filters for forms\"\"\"\n\nfrom django import forms, template\n\nregister = template.Library()\n\n\n# Copied from\n# https://github.com/django-crispy-forms/django-crispy-forms/blob/1.8.1/crispy_forms/templatetags/crispy_forms_field.py\n@register.filter\ndef is_checkbox(field):\n    return isinstance(field.field.widget, forms.CheckboxInput)\n\n\n@register.inclusion_tag('foundation-5/field.html')\ndef show_field(field):\n    \"\"\"Renders a form field using a predefined template.\n\n    Usage::\n\n        {% load forms %}\n        {% show_field form.my_field %}\n\n\n    :param field: The form field to be rendered.\n    :type field: django.forms.BoundField\n    :return: A dictionary that will be used as a template context for the field\n    template.\n    :rtype: dict\n    \"\"\"\n    return {'field': field}\n"
  },
  {
    "path": "python/nav/django/templatetags/info.py",
    "content": "#\n# Copyright (C) 2012-2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Template tags used in info subsystem\"\"\"\n\nimport re\nfrom datetime import datetime, timedelta\nimport time\n\nfrom django import template\nfrom django.utils.html import escape\nfrom django.utils.safestring import mark_safe\nfrom django.utils.timesince import timesince\n\nregister = template.Library()\n\n\n@register.filter\ndef time_since(timestamp):\n    \"\"\"Convert a timestamp to human readable time since\"\"\"\n\n    mapping = {'minute': 'min', 'hour': 'hr', 'week': 'wk', 'month': 'mo', 'year': 'yr'}\n\n    if timestamp is None:\n        return \"Never\"\n\n    if _is_more_or_less_now(timestamp):\n        return \"Now\"\n    else:\n        text = timesince(timestamp)\n        for key, replacement in mapping.items():\n            text = text.replace(key, replacement)\n\n        return text\n\n\n@register.filter\ndef days_since(timestamp):\n    \"\"\"Convert a timestamp to human readable time using days\"\"\"\n    if timestamp is None:\n        return \"Never\"\n\n    if _is_more_or_less_now(timestamp):\n        return \"Now\"\n    elif timestamp.date() == datetime.now().date():\n        return \"Today\"\n    elif timestamp.date() == datetime.now().date() - timedelta(days=1):\n        return \"Yesterday\"\n    else:\n        return \"%s days\" % (datetime.now().date() - timestamp.date()).days\n\n\ndef _is_more_or_less_now(timestamp):\n    interval = datetime.now() - timestamp\n    less_than_a_minute = interval.total_seconds() < 60\n    return timestamp == datetime.max or less_than_a_minute\n\n\n@register.filter\ndef is_max_timestamp(timestamp):\n    \"\"\"Check if timestamp is max\"\"\"\n    if timestamp == datetime.max:\n        return True\n    else:\n        return False\n\n\n@register.filter\ndef run(function, arg):\n    \"\"\"Run a function with given argument\"\"\"\n    return function(arg)\n\n\n@register.filter\ndef get_attr(value, arg):\n    \"\"\"Lookup attribute on object\n\n    value: an object instance - i.e. interface\n    arg: i.e. id\n\n    Supports chaining (arg = netbox.sysname)\n    If nothing is found, return empty string\n    \"\"\"\n    if arg.count('.'):\n        return find_attr(value, arg.split('.'))\n    else:\n        return getattr(value, arg, \"\")\n\n\ndef find_attr(obj, attrlist):\n    \"\"\"Recursive search for attributes in attrlist\"\"\"\n    try:\n        attr = getattr(obj, attrlist[0])\n    except AttributeError:\n        return \"\"\n\n    if len(attrlist) > 1:\n        return find_attr(attr, attrlist[1:])\n    else:\n        return attr\n\n\n@register.filter\ndef lookup(value, key):\n    \"\"\"Lookup key in a dictionary\"\"\"\n    return value.get(key, value)\n\n\n@register.filter\ndef interval(value):\n    \"\"\"Create a human readable interval\n\n    Arguments:\n    value -- a number of seconds\n\n    \"\"\"\n    return time.strftime('%H:%M:%S', time.gmtime(value))\n\n\n@register.filter\ndef add_interval(value, seconds):\n    \"\"\"Create a new timestamp based on value and interval\n\n    Arguments:\n    value -- a datetime object\n    interval -- interval in seconds\n\n    \"\"\"\n\n    try:\n        return value + timedelta(seconds=seconds)\n    except TypeError:\n        return value\n\n\n@register.filter\ndef get_graph_url(obj, time_frame):\n    return obj.get_graph_url(time_frame=time_frame)\n\n\n@register.filter\ndef get_netbox_availability(netbox, time_frame):\n    \"\"\"Get availability for a given netbox and time frame\n    :type netbox: nav.models.manage.Netbox\n    :type time_frame: basestring\n    \"\"\"\n    availability = netbox.get_availability()\n    try:\n        return \"%.2f%%\" % availability[\"availability\"][time_frame]\n    except (KeyError, TypeError):\n        return \"N/A\"\n\n\n@register.filter\ndef get_value(something, key):\n    \"\"\"Gets value from something using key\"\"\"\n    try:\n        return something.get(key)\n    except AttributeError:\n        pass\n\n\n@register.filter\ndef sortdict(dictionary, reverse=False):\n    \"\"\"Returns a list of sorted dictionary items\"\"\"\n    return sorted(dictionary.items(), reverse=bool(reverse))\n\n\n@register.filter\ndef is_list(value):\n    \"\"\"Returns True if the value is a list\"\"\"\n    return isinstance(value, list)\n\n\n@register.filter\ndef highlight(text, query):\n    \"\"\"Wraps case-insensitive occurrences of query in <mark> tags\"\"\"\n    if not query:\n        return text\n    escaped_text = escape(text)\n    escaped_query = escape(query)\n    pattern = re.compile(re.escape(escaped_query), re.IGNORECASE)\n    return mark_safe(pattern.sub(lambda m: f\"<mark>{m.group()}</mark>\", escaped_text))\n\n\n@register.filter\ndef dunderless(mapping):\n    \"\"\"\n    Returns a mapping with all elements of the input mapping except for ones whose key\n    starts with dunder\n    \"\"\"\n    mapping = {k: v for k, v in mapping.items() if not k.startswith('__')}\n    return mapping\n"
  },
  {
    "path": "python/nav/django/templatetags/maintenance.py",
    "content": "#\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Template tags for the maintenance tool\"\"\"\n\nfrom django import template\n\nfrom nav.web.maintenance.utils import MissingComponent\n\nregister = template.Library()\n\n\n@register.filter\ndef model_verbose_name(model):\n    \"\"\"Returns the capitalized verbose name of a model\"\"\"\n    if not model:\n        return\n    name = model._meta.verbose_name\n    # Keep original capitalization, if any, otherwise apply our own\n    # e.g. don't turn \"IP Device\" into \"Ip device\", but do turn \"room\" into \"Room\"\n    return name if name[0].isupper() else name.capitalize()\n\n\n@register.filter\ndef component_name(component):\n    \"\"\"Returns an identifying name of a model object used as a maintenance component\"\"\"\n    if not component:\n        return \"\"\n    if hasattr(component, \"sysname\"):\n        return component.sysname\n    if hasattr(component, \"handler\"):\n        return component.handler\n    if isinstance(component, MissingComponent):\n        return str(component)\n    return component.pk\n\n\n@register.filter\ndef component_description(component):\n    \"\"\"Returns a description of a component useful as a link title tooltip.  Returns\n    an empty string if there is no further description than the component's name.\n    \"\"\"\n    if isinstance(component, MissingComponent):\n        return str(component)\n    if hasattr(component, \"ip\"):\n        return str(component.ip)\n    return getattr(component, \"description\", \"\")\n\n\n@register.filter\ndef component_db_table(component):\n    \"\"\"Returns the database table name of a model object used as a maintenance\n    component.\n    \"\"\"\n    if not component:\n        return \"\"\n    return component._meta.db_table\n"
  },
  {
    "path": "python/nav/django/templatetags/popover.py",
    "content": "\"\"\"Template tags for popover components\"\"\"\n\nfrom typing import Literal, Optional, get_args\n\nfrom django import template\nfrom django.utils.html import conditional_escape, format_html, mark_safe\n\nregister = template.Library()\n\n# Valid values for enum-like parameters\nTriggerElement = Literal['button', 'a', 'span']\nSide = Literal['top', 'bottom', 'left', 'right']\nAlign = Literal['start', 'end']\nSize = Literal['tiny', 'small', 'medium', 'large']\n\nVALID_TRIGGER_ELEMENTS: tuple[TriggerElement, ...] = get_args(TriggerElement)\nVALID_SIDES: tuple[Side, ...] = get_args(Side)\nVALID_ALIGNS: tuple[Align, ...] = get_args(Align)\nVALID_SIZES: tuple[Size, ...] = get_args(Size)\n\n\n@register.inclusion_tag('components/popover/_confirm_popover.html', takes_context=True)\ndef confirm_popover(\n    context: template.Context,\n    popover_id: str,\n    action_url: str,\n    title: str = \"Are you sure?\",\n    confirm_text: str = \"Yes\",\n    cancel_text: str = \"No\",\n    trigger_text: Optional[str] = None,\n    trigger_icon: str = \"fa-times-circle\",\n    trigger_classes: str = \"secondary\",\n    size: Size = \"tiny\",\n    side: Side = \"bottom\",\n    align: Align = \"start\",\n) -> dict:\n    \"\"\"Renders a confirmation popover with a form action.\n\n    Usage::\n\n        {% load popover %}\n        {% confirm_popover popover_id=\"delete-item\" action_url=delete_url %}\n\n    :param context: Django template context\n    :param popover_id: Unique identifier for the popover (required)\n    :param action_url: URL for the form action (required)\n    :param title: Confirmation question text\n    :param confirm_text: Text for the confirm button\n    :param cancel_text: Text for the cancel button\n    :param trigger_text: If set, uses a button with this text instead of an icon\n    :param trigger_icon: FontAwesome icon class (without 'fa' prefix)\n    :param trigger_classes: CSS classes for the trigger button (default: secondary)\n    :param size: Popover content size (tiny, small, medium, large)\n    :param side: Position relative to trigger (top, bottom, left, right)\n    :param align: Alignment (start, end)\n    \"\"\"\n    return {\n        'id': popover_id,\n        'action_url': action_url,\n        'title': title,\n        'confirm_text': confirm_text,\n        'cancel_text': cancel_text,\n        'trigger_text': trigger_text,\n        'trigger_icon': trigger_icon,\n        'trigger_classes': trigger_classes,\n        'size': size,\n        'side': side,\n        'align': align,\n        'request': context.get('request'),\n    }\n\n\n@register.inclusion_tag('components/popover/_close_button.html')\ndef popover_close_button(text: str = \"Cancel\", classes: str = \"secondary\") -> dict:\n    \"\"\"Renders a close button for use inside popovers.\n\n    Usage::\n\n        {% load popover %}\n        {% popover_close_button \"Cancel\" classes=\"secondary\" %}\n\n    :param text: Button text\n    :param classes: Additional CSS classes for the button\n    \"\"\"\n    return {\n        'text': text,\n        'classes': classes,\n    }\n\n\nclass PopoverNode(template.Node):\n    \"\"\"Node for the {% popover %}...{% endpopover %} block tag.\"\"\"\n\n    def __init__(\n        self,\n        nodelist,\n        id_var,\n        trigger_text_var,\n        trigger_element,\n        trigger_classes,\n        title_var,\n        size,\n        side,\n        align,\n        with_arrow,\n    ):\n        self.nodelist = nodelist\n        self.id_var = id_var\n        self.trigger_text_var = trigger_text_var\n        self.trigger_element = trigger_element\n        self.trigger_classes = trigger_classes\n        self.title_var = title_var\n        self.size = size\n        self.side = side\n        self.align = align\n        self.with_arrow = with_arrow\n\n    def render(self, context):\n        id_value = self.id_var.resolve(context)\n        trigger_text = self.trigger_text_var.resolve(context)\n        title = self.title_var.resolve(context) if self.title_var else None\n        trigger_classes = (\n            self.trigger_classes.resolve(context) if self.trigger_classes else \"\"\n        )\n\n        # Content is trusted template output, not user input\n        content = self.nodelist.render(context)\n\n        arrow_class = \"with-arrow\" if self.with_arrow else \"\"\n        side_attr = (\n            format_html('data-side=\"{}\"', self.side) if self.side != \"bottom\" else \"\"\n        )\n        align_attr = (\n            format_html('data-align=\"{}\"', self.align) if self.align != \"start\" else \"\"\n        )\n\n        trigger_html = _build_trigger_html(\n            self.trigger_element,\n            id_value,\n            trigger_text,\n            trigger_classes,\n        )\n\n        title_html = format_html(\"<h5>{}</h5>\", title) if title else \"\"\n        # side_attr and align_attr are already safe from format_html,\n        # so mark the join as safe\n        attrs = mark_safe(\" \".join(filter(None, [side_attr, align_attr])))\n\n        return format_html(\n            '<div id=\"{}\" class=\"popover {}\" {}>\\n'\n            '  {}\\n'\n            '  <div class=\"popover-content {}\">\\n'\n            '    {}\\n'\n            '    {}\\n'\n            '  </div>\\n'\n            '</div>',\n            id_value,\n            arrow_class,\n            attrs,\n            trigger_html,\n            self.size,\n            title_html,\n            content,\n        )\n\n\ndef _build_trigger_html(element, id_value, text, classes):\n    \"\"\"Build the HTML for the popover trigger element.\"\"\"\n    attrs = format_html(\n        'data-popover-target=\"#{}\" aria-haspopup=\"true\" aria-expanded=\"false\"',\n        id_value,\n    )\n    text = conditional_escape(text)\n\n    tag = {\"button\": \"button\", \"a\": \"a\"}.get(element, \"span\")\n    if classes:\n        return format_html('<{} class=\"{}\" {}>{}</{}>', tag, classes, attrs, text, tag)\n    return format_html('<{} {}>{}</{}>', tag, attrs, text, tag)\n\n\ndef _parse_popover_kwargs(bits, tag_name):\n    \"\"\"Parse keyword arguments from template tag tokens.\n\n    :param bits: Token contents split by whitespace\n    :param tag_name: Name of the tag (for error messages)\n    :returns: Dictionary of keyword arguments\n    :raises TemplateSyntaxError: If non-keyword arguments found or required args missing\n    \"\"\"\n    kwargs = {}\n    for bit in bits[1:]:\n        if '=' in bit:\n            key, value = bit.split('=', 1)\n            kwargs[key] = value\n        else:\n            raise template.TemplateSyntaxError(\n                f\"'{tag_name}' tag requires keyword arguments\"\n            )\n\n    if 'popover_id' not in kwargs:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' tag requires 'popover_id' argument\"\n        )\n    if 'trigger_text' not in kwargs:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' tag requires 'trigger_text' argument\"\n        )\n\n    return kwargs\n\n\ndef _validate_popover_params(trigger_element, size, side, align, tag_name):\n    \"\"\"Validate enum-like parameters for the popover tag.\n\n    :raises TemplateSyntaxError: If any parameter has an invalid value\n    \"\"\"\n    if trigger_element not in VALID_TRIGGER_ELEMENTS:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' trigger_element must be one of {VALID_TRIGGER_ELEMENTS}, \"\n            f\"got '{trigger_element}'\"\n        )\n\n    if size not in VALID_SIZES:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' size must be one of {VALID_SIZES}, got '{size}'\"\n        )\n\n    if side not in VALID_SIDES:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' side must be one of {VALID_SIDES}, got '{side}'\"\n        )\n\n    if align not in VALID_ALIGNS:\n        raise template.TemplateSyntaxError(\n            f\"'{tag_name}' align must be one of {VALID_ALIGNS}, got '{align}'\"\n        )\n\n\n@register.tag('popover')\ndef do_popover(parser, token):\n    \"\"\"Block tag for generic popovers with custom content.\n\n    Usage::\n\n        {% load popover %}\n        {% popover popover_id=\"info\" trigger_text=\"About\" title=\"About\" %}\n          <p>Custom content here...</p>\n        {% endpopover %}\n\n    :param popover_id: Unique identifier for the popover (required)\n    :param trigger_text: Text/content for the trigger element (required)\n    :param trigger_element: Element type: button (default), a, span\n    :param trigger_classes: Additional CSS classes for the trigger\n    :param title: Optional header text\n    :param size: Content size (tiny, small, medium, large)\n    :param side: Position (top, bottom, left, right)\n    :param align: Alignment (start, end)\n    :param with_arrow: Show pointing arrow (default: True)\n    \"\"\"\n    bits = token.split_contents()\n    tag_name = bits[0]\n\n    kwargs = _parse_popover_kwargs(bits, tag_name)\n\n    nodelist = parser.parse(('endpopover',))\n    parser.delete_first_token()\n\n    # Process arguments\n    id_var = parser.compile_filter(kwargs['popover_id'])\n    trigger_text_var = parser.compile_filter(kwargs['trigger_text'])\n    trigger_element = _strip_quotes(kwargs.get('trigger_element', '\"button\"'))\n    trigger_classes = (\n        parser.compile_filter(kwargs['trigger_classes'])\n        if 'trigger_classes' in kwargs\n        else None\n    )\n    title_var = parser.compile_filter(kwargs['title']) if 'title' in kwargs else None\n    size = _strip_quotes(kwargs.get('size', '\"small\"'))\n    side = _strip_quotes(kwargs.get('side', '\"bottom\"'))\n    align = _strip_quotes(kwargs.get('align', '\"start\"'))\n    with_arrow = _parse_bool(kwargs.get('with_arrow', 'True'))\n\n    _validate_popover_params(trigger_element, size, side, align, tag_name)\n\n    return PopoverNode(\n        nodelist,\n        id_var,\n        trigger_text_var,\n        trigger_element,\n        trigger_classes,\n        title_var,\n        size,\n        side,\n        align,\n        with_arrow,\n    )\n\n\ndef _strip_quotes(value):\n    \"\"\"Remove surrounding quotes from a string value.\"\"\"\n    if value and len(value) >= 2:\n        if (value[0] == '\"' and value[-1] == '\"') or (\n            value[0] == \"'\" and value[-1] == \"'\"\n        ):\n            return value[1:-1]\n    return value\n\n\ndef _parse_bool(value):\n    \"\"\"Parse a string value as boolean.\"\"\"\n    value = _strip_quotes(value).lower()\n    if value in ('true', '1', 'yes'):\n        return True\n    if value in ('false', '0', 'no', ''):\n        return False\n    raise ValueError(f\"Cannot parse '{value}' as boolean\")\n"
  },
  {
    "path": "python/nav/django/templatetags/port_info.py",
    "content": "from django import template\nfrom nav.models.manage import SwPortVlan\n\nregister = template.Library()\n\nDIRECTIONS = dict((v, k) for k, v in SwPortVlan.DIRECTION_CHOICES)\n\n\n@register.filter\ndef get_direction_class(direction):\n    if DIRECTIONS[direction] == SwPortVlan.DIRECTION_DOWN:\n        return 'fa-arrow-circle-o-down'\n    elif DIRECTIONS[direction] == SwPortVlan.DIRECTION_UP:\n        return 'fa-arrow-circle-o-up'\n    elif DIRECTIONS[direction] == SwPortVlan.DIRECTION_UNDEFINED:\n        return 'fa-question'\n    elif DIRECTIONS[direction] == SwPortVlan.DIRECTION_BLOCKED:\n        return 'fa-ban'\n"
  },
  {
    "path": "python/nav/django/templatetags/portadmin.py",
    "content": "from django import template\n\nregister = template.Library()\n\n\n@register.filter\ndef drawLight(value):\n    if value == 1:\n        return \"green.png\"\n    else:\n        return \"red.png\"\n"
  },
  {
    "path": "python/nav/django/templatetags/query.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Template tags related to manipulation of URLs with query parameters\"\"\"\n\nfrom django import template\n\nfrom nav.django.utils import reverse_with_query\n\nregister = template.Library()\n\n\n@register.simple_tag\ndef query(viewname, **kwargs):\n    \"\"\"Gets a URL to a named view and adorns it with query arguments\"\"\"\n    return reverse_with_query(viewname, **kwargs)\n"
  },
  {
    "path": "python/nav/django/templatetags/radius.py",
    "content": "from datetime import timedelta\n\nfrom django import template\n\n\nregister = template.Library()\n\n\n@register.filter\ndef time_from_seconds(value):\n    if value:\n        return str(timedelta(seconds=value))\n    else:\n        return ''\n\n\ntime_from_seconds.is_safe = True\n"
  },
  {
    "path": "python/nav/django/templatetags/report.py",
    "content": "\"\"\"Template tags used in report subsystem\"\"\"\n\nfrom django import template\nfrom django.template.defaultfilters import stringfilter\nfrom django.urls import reverse\nfrom urllib.parse import urlencode\n\n\nregister = template.Library()\n\n\n@register.filter(is_safe=True)\ndef get_item(value, arg):\n    return value.get(arg)\n\n\n@register.filter\n@stringfilter\ndef escapeslash(value):\n    return value.replace(\"/\", \"%2F\")\n\n\n@register.simple_tag\ndef report(name, **kwargs):\n    \"\"\"Returns a URL to a named report with the given kwargs as a search filter\"\"\"\n    base = reverse(\"report-by-name\", kwargs={\"report_name\": name})\n    report_args = {k: v for k, v in kwargs.items() if v is not None}\n    if report_args:\n        return \"{}?{}\".format(base, urlencode(report_args))\n    return base\n"
  },
  {
    "path": "python/nav/django/templatetags/silent_include.py",
    "content": "# coding=utf-8\n#\n# Code from https://djangosnippets.org/snippets/2058/\n# All credits go to user 'brutasse', who is most likely Bruno Renié\n#\n\"\"\"Template tag for silent include of template\"\"\"\n\nfrom django import template\nfrom django.template import RequestContext\n\nregister = template.Library()\n\n\nclass IncludeNode(template.Node):\n    def __init__(self, template_name):\n        self.template_name = template_name\n\n    def render(self, context):\n        try:\n            # Loading the template and rendering it\n            if isinstance(context, RequestContext):\n                context = context.flatten()\n            included_template = template.loader.get_template(self.template_name).render(\n                context\n            )\n        except template.TemplateDoesNotExist:\n            included_template = ''\n        return included_template\n\n\n@register.tag\ndef try_to_include(_, token):\n    \"\"\"Usage: {% try_to_include \"head.html\" %}\n\n    This will fail silently if the template doesn't exist. If it does, it will\n    be rendered with the current context.\"\"\"\n    try:\n        _, template_name = token.split_contents()\n    except ValueError:\n        raise template.TemplateSyntaxError(\n            \"%r tag requires a single argument\" % token.contents.split()[0]\n        )\n\n    return IncludeNode(template_name[1:-1])\n"
  },
  {
    "path": "python/nav/django/templatetags/string_manipulation.py",
    "content": "\"\"\"Template filters for string manipulation\"\"\"\n\nimport re\n\nfrom django import template\n\nregister = template.Library()\n\n\n@register.filter\ndef shorten_ifname(ifname):  # pragma: nocover\n    \"\"\"Shorten ifname and indicate shortening with ellipsis\"\"\"\n    matchobject = re.match(r'([a-zA-Z]{2})\\D+(.*/\\d+)$', ifname)\n    if matchobject:\n        return \"...\".join(matchobject.groups())\n    return ifname\n\n\n@register.filter\ndef deep_urlize(value):\n    \"\"\"Convert anything that looks like an url to an href tag\"\"\"\n    if value:\n        return re.sub(r'(https?://[^\" ]+)', r'<a href=\"\\1\">\\1</a>', value)\n    return value\n\n\n@register.filter\ndef starts_with(value, arg):\n    \"\"\"Check if a string starts with the given argument\"\"\"\n    return str(value).startswith(str(arg))\n"
  },
  {
    "path": "python/nav/django/templatetags/thresholds.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Template tags for discovering threshold rules related to metric names\"\"\"\n\nfrom django import template\nfrom nav.models.thresholds import ThresholdRule\n\n\nregister = template.Library()\n\n\n@register.filter\ndef find_rules(metrics):\n    \"\"\"\n    Finds threshold rules that match the metrics mentioned in the metrics\n    list.\n\n    :param metrics: A list of modifiable dict() objects that each must at\n                    least contain the key 'id', which should refer to a metric\n                    id.\n    :type metrics: list(dict(), ...)\n    :return: The modified metrics list, with each dict() object having a\n             thresholds key added.\n\n    \"\"\"\n    rules = [(r.get_pattern(), r) for r in ThresholdRule.objects.all()]\n    for metric in metrics:\n        thresholds = metric.setdefault('thresholds', [])\n        for pat, rule in rules:\n            if pat.match(metric['id']):\n                thresholds.append(rule)\n    return metrics\n\n\n@register.filter\ndef find_thresholds(metric):\n    \"\"\"Finds the threshold set for this metric\"\"\"\n    rules = [(r.get_pattern(), r) for r in ThresholdRule.objects.all()]\n    thresholds = [rule for pat, rule in rules if pat.match(metric)]\n    return \",\".join([t.alert for t in thresholds])\n"
  },
  {
    "path": "python/nav/django/templatetags/tools.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tags and filters for manipulation tools\"\"\"\n\nfrom django import template\n\nregister = template.Library()\n\n\n@register.filter\ndef get_tool(tool_list, tool_name):\n    \"\"\"Return the tool with the given name\"\"\"\n    for tool in tool_list:\n        if tool.name == tool_name:\n            return tool\n"
  },
  {
    "path": "python/nav/django/templatetags/watchdog.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Template tags and filters for watchdog templates\"\"\"\n\nfrom django import template\nfrom nav.watchdog.tests import STATUS_UNKNOWN, STATUS_NOT_OK, STATUS_OK\n\nregister = template.Library()\n\n\n@register.filter\ndef map_to_class(status):\n    \"\"\"Map a status to a css class\"\"\"\n    mapping = {STATUS_NOT_OK: 'alert', STATUS_OK: 'success', STATUS_UNKNOWN: ''}\n\n    return mapping.get(status, '')\n\n\n@register.filter\ndef map_to_faclass(status):\n    \"\"\"Return Font Awesome class based on status\"\"\"\n    mapping = {STATUS_NOT_OK: 'fa-exclamation', STATUS_OK: 'fa-check'}\n\n    return mapping.get(status, '')\n"
  },
  {
    "path": "python/nav/django/urls.py",
    "content": "#\n# Copyright (C) 2007-2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Main Django URL configuration\"\"\"\n\nimport sys\nimport os\nimport logging\nfrom django.urls import path, include\nfrom django.contrib.staticfiles.urls import staticfiles_urlpatterns\n\nfrom nav.config import find_config_dir\nfrom nav.web import refresh_session\nfrom nav.web.webfront.urls import urlpatterns\nfrom nav.web.styleguide import styleguide_index\nfrom nav.django.views import force_500\n\n_logger = logging.getLogger(__name__)\n\nurlpatterns += [\n    path('status/', include('nav.web.status2.urls')),\n    path('ajax/', include('nav.web.ajax.urls')),\n    path('business/', include('nav.web.business.urls')),\n    path('alertprofiles/', include('nav.web.alertprofiles.urls')),\n    path('api/', include(('nav.web.api.urls', 'api'))),\n    # path('api/', include(('nav.web.api.urls', 'api'), namespace='api')),\n    path('arnold/', include('nav.web.arnold.urls')),\n    path('devicehistory/', include('nav.web.devicehistory.urls')),\n    path('geomap/', include('nav.web.geomap.urls')),\n    path('search/', include('nav.web.info.urls')),\n    path('ipdevinfo/', include('nav.web.ipdevinfo.urls')),\n    path('l2trace/', include('nav.web.l2trace.urls')),\n    path('machinetracker/', include('nav.web.machinetracker.urls')),\n    path('macwatch/', include('nav.web.macwatch.urls')),\n    path('maintenance/', include('nav.web.maintenance.urls')),\n    path('messages/', include('nav.web.messages.urls')),\n    path('neighbors/', include('nav.web.neighbors.urls')),\n    path('netmap/', include('nav.web.netmap.urls')),\n    path('networkexplorer/', include('nav.web.networkexplorer.urls')),\n    path('portadmin/', include('nav.web.portadmin.urls')),\n    path('radius/', include('nav.web.radius.urls')),\n    path('report/', include('nav.web.report.urls')),\n    path('seeddb/', include('nav.web.seeddb.urls')),\n    path('stats/', include('nav.web.sortedstats.urls')),\n    path('syslogger/', include('nav.web.syslogger.urls')),\n    path('ipam/', include('nav.web.ipam.urls')),\n    path('threshold/', include('nav.web.threshold.urls')),\n    path('graphite/', include('nav.web.graphite.urls')),\n    path('navlets/', include('nav.web.navlets.urls')),\n    path('watchdog/', include('nav.web.watchdog.urls')),\n    path('useradmin/', include('nav.web.useradmin.urls')),\n    path('styleguide/', styleguide_index),\n    path('refresh_session/', refresh_session, name='refresh-session'),\n    path('auditlog/', include('nav.auditlog.urls')),\n    path('interfaces/', include('nav.web.interface_browser.urls')),\n    # Must be before allauth.urls to override the default connections view\n    path(\n        'accounts/3rdparty/',\n        include('nav.web.auth.allauth.urls'),\n    ),\n    path('accounts/', include('allauth.urls')),\n    path('500/', force_500),\n]\n\n# Load local url-config\n_local_python_dir = os.path.join(find_config_dir() or '.', 'python')\n_local_url_filepath = os.path.join(_local_python_dir, 'local_urls.py')\n\nif os.path.isfile(_local_url_filepath):\n    if _local_python_dir not in sys.path:\n        sys.path.append(_local_python_dir)\n    try:\n        import local_urls\n\n        urlpatterns += local_urls.urlpatterns\n    except (ImportError, TypeError):\n        _logger.exception(\"failed to import urlpatterns from local_urls.py\")\n        pass\n\nhandler500 = 'nav.django.views.custom_500'\n\n# Make django serve static files (a webserver like apache overrides this)\nurlpatterns += staticfiles_urlpatterns()\n"
  },
  {
    "path": "python/nav/django/utils.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2011, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Utility methods for django used in NAV\"\"\"\n\nimport distro\nimport platform\n\nfrom django.core.exceptions import FieldDoesNotExist\nfrom django.http import HttpRequest\nfrom django.urls import reverse\nfrom django.utils.http import urlencode\n\n\ndef reverse_with_query(viewname, **kwargs):\n    \"\"\"Wrapper for django.urls.reverse, but will adapt query arguments from kwargs\"\"\"\n    baseurl = reverse(viewname)\n    getargs = urlencode(kwargs)\n    return \"{}?{}\".format(baseurl, getargs)\n\n\ndef get_verbose_name(model, lookup):\n    \"\"\"Verbose name introspection of ORM models.\n    Parameters:\n      - model: the django model\n      - lookup: name of the field to find verbose name of.\n\n    Foreign key lookups is supported, ie. \"othermodel__otherfield\"\n    \"\"\"\n    if '__' not in lookup:\n        return model._meta.get_field(lookup).verbose_name\n\n    foreign_key, lookup = lookup.split('__', 1)\n    try:\n        foreign_model = model._meta.get_field(foreign_key).remote_field.model\n        return get_verbose_name(foreign_model, lookup)\n    except FieldDoesNotExist:\n        pass\n\n    related = get_all_related_objects(model)\n    related += get_all_related_many_to_many_objects(model)\n    for obj in related:\n        if obj.get_accessor_name() == foreign_key:\n            return get_verbose_name(obj.model, lookup)\n\n    raise FieldDoesNotExist\n\n\ndef pformat_request(request: HttpRequest, function, *attributes) -> None:\n    \"\"\"View ``request`` via `function``, one line per attribute\n\n    Use the ``attributes`` parameter to limit what attributes are inspected.\n\n    Also dumps the contents of the dicts ``request.environ``and\n    ``request.META``, one line per value, sorted per key.\n\n    The ``function`` must have an input signature compatible with\n    ``logging.Logger.debug()``.\n\n    Meant for debugging via logs.\n\n    Example usage::\n\n        pformat_request(request, logging.getLogger(__name__).debug)\n    \"\"\"\n    DICT_ATTRIBUTES = ('META', 'environ')\n\n    existing_attributes = vars(request).keys()\n    if attributes:\n        attributes = set(existing_attributes).intersection(attributes)\n    else:\n        attributes = existing_attributes\n    for attribute in sorted(attributes):\n        value = getattr(request, attribute)\n        if attribute in DICT_ATTRIBUTES:\n            for key in sorted(value.keys()):\n                function('request.%s: %s: %s', attribute, key, value[key])\n        else:\n            function('request.%s: %s', attribute, value)\n\n\n#\n# Django version differentiated helper functions:\n#\ndef get_model_and_name(rel):\n    \"\"\"Gets model and name based on django version\n\n    rel in 1.8 is either ManyToOneRel or OneToOneRel\n    \"\"\"\n    return rel.related_model, rel.name\n\n\ndef get_all_related_objects(model):\n    \"\"\"Gets all related objects based on django version\"\"\"\n    return [\n        f\n        for f in model._meta.get_fields()\n        if (f.one_to_many or f.one_to_one) and f.auto_created and not f.concrete\n    ]\n\n\ndef get_all_related_many_to_many_objects(model):\n    \"\"\"Gets all related many-to-many objects based on django version\"\"\"\n    return [\n        f\n        for f in model._meta.get_fields(include_hidden=True)\n        if f.many_to_many and f.auto_created\n    ]\n\n\ndef get_os_version():\n    if platform.system() == \"Linux\":\n        return f\"Linux {distro.name(pretty=True)}\"\n    elif platform.system() == \"Darwin\":\n        return f\"macOS {platform.mac_ver()[0]}\"\n    else:\n        return f\"{platform.system()} {platform.release()} ({platform.version()})\"\n"
  },
  {
    "path": "python/nav/django/validators.py",
    "content": "#\n# Copyright (C) 2011, 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\nimport json\nfrom decimal import Decimal, InvalidOperation\n\nfrom django.utils.translation import gettext\nfrom django.core.exceptions import ValidationError\n\n\ndef is_valid_point_string(point_string):\n    if len(point_string.split(',')) == 2:\n        point_string = point_string.removeprefix(\"(\").removesuffix(\")\")\n        x_point, y_point = point_string.split(',')\n        try:\n            Decimal(x_point.strip())\n            Decimal(y_point.strip())\n        except InvalidOperation:\n            pass\n        else:\n            return True\n    return False\n\n\nclass JSONBytesEncoder(json.JSONEncoder):\n    def default(self, obj):\n        if isinstance(obj, bytes):\n            return obj.decode('utf-8')\n        return super(JSONBytesEncoder, self).default(self, obj)\n\n\ndef validate_hstore(value):\n    \"\"\"HSTORE validation.\"\"\"\n    # if empty\n    if value is None or value == '' or value == 'null':\n        value = '{}'\n\n    # ensure valid JSON\n    try:\n        # work on unicode strings only\n        if isinstance(value, bytes):\n            value = value.decode('utf-8')\n\n        # convert strings to dictionaries\n        if isinstance(value, str):\n            dictionary = json.loads(value)\n\n        # if not a string we'll check at the next control if it's a dict\n        else:\n            dictionary = value\n    except ValueError as e:\n        raise ValidationError(gettext('Invalid JSON: {0}').format(e))\n\n    # ensure is a dictionary\n    if not isinstance(dictionary, dict):\n        raise ValidationError(gettext('No lists or values allowed, only dictionaries'))\n\n    value = json.dumps(dictionary, cls=JSONBytesEncoder)\n    dictionary = json.loads(value)\n\n    return dictionary\n"
  },
  {
    "path": "python/nav/django/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport traceback\n\nfrom django.template import loader\nfrom django.http import HttpResponseServerError\n\n\ndef custom_500(request):\n    \"\"\"View that renders the HTTP 500 template and passes the exception\"\"\"\n\n    template = loader.get_template('500.html')\n\n    return HttpResponseServerError(\n        template.render(\n            context={\n                'traceback': traceback.format_exc(),\n            },\n            request=request,\n        )\n    )\n\n\ndef force_500(request):\n    \"\"\"View that throws an exception just to test/showcase the currently active 500\n    error handler\n    \"\"\"\n    raise Exception(\"This error was thrown on purpose, please ignore\")\n"
  },
  {
    "path": "python/nav/django/widgets.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django form widgets for NAV\"\"\"\n\nfrom django import forms\n\n\nclass PointInput(forms.TextInput):\n    def render(self, name, value, *args, **kwargs):\n        if value and isinstance(value, tuple):\n            value = \"(%s,%s)\" % value\n        return super(PointInput, self).render(name, value, *args, **kwargs)\n"
  },
  {
    "path": "python/nav/enterprise/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/enterprise/ids.py",
    "content": "# IANA assigned enterprise numbers\n# As published at http://www.iana.org/assignments/enterprise-numbers\n# Generated by iana-enterprise.py on 2015-12-18 13:42:26.546064\n#\nVENDOR_ID_RESERVED = 0\nVENDOR_ID_NXNETWORKS = 1\nVENDOR_ID_IBM = 2\nVENDOR_ID_CARNEGIE_MELLON = 3\nVENDOR_ID_UNIX = 4\nVENDOR_ID_ACC = 5\nVENDOR_ID_TWG = 6\nVENDOR_ID_CAYMAN = 7\nVENDOR_ID_PSI = 8\nVENDOR_ID_CISCOSYSTEMS = 9\nVENDOR_ID_NSC = 10\nVENDOR_ID_HEWLETT_PACKARD = 11\nVENDOR_ID_EPILOGUE = 12\nVENDOR_ID_U_OF_TENNESSEE = 13\nVENDOR_ID_BBN_TECHNOLOGIES = 14\nVENDOR_ID_XYLOGICS_INC = 15\nVENDOR_ID_TIMEPLEX = 16\nVENDOR_ID_CANSTAR = 17\nVENDOR_ID_WELLFLEET = 18\nVENDOR_ID_TRW = 19\nVENDOR_ID_MIT = 20\nVENDOR_ID_EON = 21\nVENDOR_ID_FIBRONICS = 22\nVENDOR_ID_NOVELL = 23\nVENDOR_ID_SPIDER_SYSTEMS = 24\nVENDOR_ID_NSFNET = 25\nVENDOR_ID_HUGHES_LAN_SYSTEMS = 26\nVENDOR_ID_INTERGRAPH = 27\nVENDOR_ID_INTERLAN = 28\nVENDOR_ID_VITALINK_COMMUNICATIONS = 29\nVENDOR_ID_ULANA = 30\nVENDOR_ID_NSWC = 31\nVENDOR_ID_SANTA_CRUZ_OPERATION = 32\nVENDOR_ID_MRV_COMMUNICATIONS_IN_REACH_PRODUCT_DIVISION = 33\nVENDOR_ID_CRAY = 34\nVENDOR_ID_NORTEL_NETWORKS = 35\nVENDOR_ID_DEC = 36\nVENDOR_ID_TOUCH = 37\nVENDOR_ID_NETWORK_RESEARCH_CORP = 38\nVENDOR_ID_BAYLOR_COLLEGE_OF_MEDICINE = 39\nVENDOR_ID_NMFECC_LLNL = 40\nVENDOR_ID_SRI = 41\nVENDOR_ID_SUN_MICROSYSTEMS = 42\nVENDOR_ID_3COM = 43\nVENDOR_ID_CMC = 44\nVENDOR_ID_SYNOPTICS = 45\nVENDOR_ID_CHEYENNE_SOFTWARE = 46\nVENDOR_ID_PRIME_COMPUTER = 47\nVENDOR_ID_MCNC_NORTH_CAROLINA = 48\nVENDOR_ID_CHIPPCOM = 49\nVENDOR_ID_OPTICAL_DATA_SYSTEMS = 50\nVENDOR_ID_GATED = 51\nVENDOR_ID_ENTERASYS_NETWORKS_INC = 52\nVENDOR_ID_APOLLO_COMPUTERS = 53\nVENDOR_ID_DESKTALK_SYSTEMS_INC = 54\nVENDOR_ID_SSDS = 55\nVENDOR_ID_CASTLE_ROCK_COMPUTING = 56\nVENDOR_ID_MIPS_COMPUTER_SYSTEMS = 57\nVENDOR_ID_TGV_INC = 58\nVENDOR_ID_SILICON_GRAPHICS_INC = 59\nVENDOR_ID_UNIVERSITY_OF_BRITISH_COLUMBIA = 60\nVENDOR_ID_MERIT = 61\nVENDOR_ID_NETEDGE = 62\nVENDOR_ID_APPLE_COMPUTER_INC = 63\nVENDOR_ID_GANDALF = 64\nVENDOR_ID_DARTMOUTH_COLLEGE = 65\nVENDOR_ID_DAVID_SYSTEMS = 66\nVENDOR_ID_REUTER = 67\nVENDOR_ID_CORNELL = 68\nVENDOR_ID_MICHAEL_SABO = 69\nVENDOR_ID_LOCUS_COMPUTING_CORP = 70\nVENDOR_ID_NASA = 71\nVENDOR_ID_RETIX = 72\nVENDOR_ID_BOEING = 73\nVENDOR_ID_ATT = 74\nVENDOR_ID_UNGERMANN_BASS = 75\nVENDOR_ID_DIGITAL_ANALYSIS_CORPORATION = 76\nVENDOR_ID_LAN_MANAGER = 77\nVENDOR_ID_LOGMATRIX_INC_FORMERLY_OPENSERVICE_INC = 78\nVENDOR_ID_FUJITSU_SERVICES = 79\nVENDOR_ID_AUSPEX_SYSTEMS_INC = 80\nVENDOR_ID_LANNET_COMPANY = 81\nVENDOR_ID_NETWORK_COMPUTING_DEVICES = 82\nVENDOR_ID_RAYCOM_SYSTEMS = 83\nVENDOR_ID_PIRELLI_FOCOM_LTD = 84\nVENDOR_ID_DATABILITY_SOFTWARE_SYSTEMS = 85\nVENDOR_ID_NETWORK_APPLICATION_TECHNOLOGY = 86\nVENDOR_ID_INSTITUTE_OF_TELEMATICS_KARLSRUHE_INSTITUTE_OF_TECHNOLOGY_KIT = 87\nVENDOR_ID_NEW_YORK_UNIVERSITY = 88\nVENDOR_ID_RND = 89\nVENDOR_ID_INTERCON_SYSTEMS_CORPORATION = 90\nVENDOR_ID_CORAL_NETWORK_CORPORATION = 91\nVENDOR_ID_WEBSTER_COMPUTER_CORPORATION = 92\nVENDOR_ID_FRONTIER_TECHNOLOGIES_CORPORATION = 93\nVENDOR_ID_NOKIA = 94\nVENDOR_ID_ALLEN_BRADELY_COMPANY = 95\nVENDOR_ID_CERN = 96\nVENDOR_ID_SIGMA_NETWORK_SYSTEMS_INC = 97\nVENDOR_ID_EMERGING_TECHNOLOGIES_INC = 98\nVENDOR_ID_SNMP_RESEARCH = 99\nVENDOR_ID_OHIO_STATE_UNIVERSITY = 100\nVENDOR_ID_ULTRA_NETWORK_TECHNOLOGIES_JULIE = 101\nVENDOR_ID_MICROCOM = 102\nVENDOR_ID_LOCKHEED_MARTIN = 103\nVENDOR_ID_MICRO_TECHNOLOGY = 104\nVENDOR_ID_PROCESS_SOFTWARE_CORPORATION = 105\nVENDOR_ID_EMC_DATA_GENERAL_DIVISION = 106\nVENDOR_ID_BULL_COMPANY = 107\nVENDOR_ID_EMULEX_CORPORATION = 108\nVENDOR_ID_WARWICK_UNIVERSITY_COMPUTING_SERVICES = 109\nVENDOR_ID_NETSCOUT_SYSTEMS_INC_FORMERLY_NETWORK_GENERAL_CORPORATION = 110\nVENDOR_ID_ORACLE = 111\nVENDOR_ID_CONTROL_DATA_CORPORATION = 112\nVENDOR_ID_HUGHES_AIRCRAFT_COMPANY = 113\nVENDOR_ID_SYNERNETICS_INC = 114\nVENDOR_ID_MITRE = 115\nVENDOR_ID_HITACHI_LTD = 116\nVENDOR_ID_TELEBIT = 117\nVENDOR_ID_SALOMON_TECHNOLOGY_SERVICES = 118\nVENDOR_ID_NEC_CORPORATION = 119\nVENDOR_ID_FIBERMUX = 120\nVENDOR_ID_FTP_SOFTWARE_INC = 121\nVENDOR_ID_SONY = 122\nVENDOR_ID_NEWBRIDGE_NETWORKS_CORPORATION = 123\nVENDOR_ID_RACAL_DATACOM = 124\nVENDOR_ID_CR_SYSTEMS = 125\nVENDOR_ID_DSET_CORPORATION = 126\nVENDOR_ID_COMPUTONE = 127\nVENDOR_ID_TEKTRONIX_INC = 128\nVENDOR_ID_INTERACTIVE_SYSTEMS_CORPORATION = 129\nVENDOR_ID_BANYAN_SYSTEMS_INC = 130\nVENDOR_ID_SINTROM_DATANET_LIMITED = 131\nVENDOR_ID_BELL_CANADA = 132\nVENDOR_ID_OLICOM_ENTERPRISE_PRODUCTS_INC = 133\nVENDOR_ID_RICE_UNIVERSITY = 134\nVENDOR_ID_ONSTREAM_NETWORKS = 135\nVENDOR_ID_CONCURRENT_COMPUTER_CORPORATION = 136\nVENDOR_ID_BASSER = 137\nVENDOR_ID_LUXCOM = 138\nVENDOR_ID_ARTEL = 139\nVENDOR_ID_INDEPENDENCE_TECHNOLOGIES_INCITI = 140\nVENDOR_ID_NETSCOUT_SYSTEMS_INC_FORMERLY_FRONTIER_SOFTWARE_DEVELOPMENT = 141\nVENDOR_ID_DIGITAL_COMPUTER_LIMITED = 142\nVENDOR_ID_EYRING_INC = 143\nVENDOR_ID_CASE_COMMUNICATIONS = 144\nVENDOR_ID_PENRIL_DATACOMM_INC = 145\nVENDOR_ID_AMERICAN_AIRLINES_INC = 146\nVENDOR_ID_SEQUENT_COMPUTER_SYSTEMS = 147\nVENDOR_ID_BELLCORE = 148\nVENDOR_ID_CONCORD_COMMUNICATIONS = 149\nVENDOR_ID_UNIVERSITY_OF_WASHINGTON = 150\nVENDOR_ID_DEVELCON = 151\nVENDOR_ID_SOLARIX_SYSTEMS = 152\nVENDOR_ID_UNIFI_COMMUNICATIONS_CORP = 153\nVENDOR_ID_ROADNET = 154\nVENDOR_ID_NETWORK_SYSTEMS_CORP = 155\nVENDOR_ID_ENE_EUROPEAN_NETWORK_ENGINEERING = 156\nVENDOR_ID_DANSK_DATA_ELEKTRONIK_A_S = 157\nVENDOR_ID_MORNINGSTAR_INC = 158\nVENDOR_ID_DUPONT_EOP = 159\nVENDOR_ID_LEGATO_SYSTEMS_INC = 160\nVENDOR_ID_MOTOROLA = 161\nVENDOR_ID_EUROPEAN_SPACE_AGENCY_ESA = 162\nVENDOR_ID_AETHIS_SA_NV = 163\nVENDOR_ID_RAD_DATA_COMMUNICATIONS_LTD = 164\nVENDOR_ID_OFFICENET_INC = 165\nVENDOR_ID_SHIVA_CORPORATION = 166\nVENDOR_ID_FUJIKURA_AMERICA = 167\nVENDOR_ID_XLNT_DESIGNS_INC_XDI = 168\nVENDOR_ID_TANDEM_COMPUTERS = 169\nVENDOR_ID_BICC = 170\nVENDOR_ID_D_LINK_SYSTEMS_INC = 171\nVENDOR_ID_AMP_INC = 172\nVENDOR_ID_NETLINK = 173\nVENDOR_ID_C_ITOH_ELECTRONICS = 174\nVENDOR_ID_SUMITOMO_ELECTRIC_INDUSTRIES_SEI = 175\nVENDOR_ID_DHL_SYSTEMS_INC = 176\nVENDOR_ID_NETWORK_EQUIPMENT_TECHNOLOGIES = 177\nVENDOR_ID_APTEC_COMPUTER_SYSTEMS = 178\nVENDOR_ID_SCHNEIDER_KOCH_CO_DATENSYSTEME_GMBH = 179\nVENDOR_ID_HILL_AIR_FORCE_BASE = 180\nVENDOR_ID_KENTROX = 181\nVENDOR_ID_JAPAN_RADIO_CO = 182\nVENDOR_ID_VERSITRON = 183\nVENDOR_ID_TELECOMMUNICATION_SYSTEMS = 184\nVENDOR_ID_INTERPHASE = 185\nVENDOR_ID_TOSHIBA_CORPORATION = 186\nVENDOR_ID_CLEARPOINT_RESEARCH_CORP = 187\nVENDOR_ID_ASCOM = 188\nVENDOR_ID_FUJITSU_AMERICA = 189\nVENDOR_ID_NOVAQUEST_INFOSYSTEMS = 190\nVENDOR_ID_NCR = 191\nVENDOR_ID_DR_MATERNA_GMBH = 192\nVENDOR_ID_ERICSSON_AB = 193\nVENDOR_ID_METAPHOR_COMPUTER_SYSTEMS = 194\nVENDOR_ID_PATRIOT_PARTNERS = 195\nVENDOR_ID_THE_SOFTWARE_GROUP_LIMITED_TSG = 196\nVENDOR_ID_KALPANA_INC = 197\nVENDOR_ID_UNIVERSITY_OF_WATERLOO = 198\nVENDOR_ID_CCL_ITRI = 199\nVENDOR_ID_COEUR_POSTEL = 200\nVENDOR_ID_MITSUBISH_CABLE_INDUSTRIES_LTD = 201\nVENDOR_ID_SMC = 202\nVENDOR_ID_CRESCENDO_COMMUNICATION_INC = 203\nVENDOR_ID_GOODALL_SOFTWARE_ENGINEERING = 204\nVENDOR_ID_INTECOM = 205\nVENDOR_ID_VICTORIA_UNIVERSITY_OF_WELLINGTON = 206\nVENDOR_ID_ALLIED_TELESIS_INC = 207\nVENDOR_ID_CRAY_COMMUNICATIONS_A_S = 208\nVENDOR_ID_PROTOOLS = 209\nVENDOR_ID_NIPPON_TELEGRAPH_AND_TELEPHONE_CORPORATION = 210\nVENDOR_ID_FUJITSU_LIMITED = 211\nVENDOR_ID_NETWORK_PERIPHERALS_INC = 212\nVENDOR_ID_NETRONIX_INC = 213\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_MADISON = 214\nVENDOR_ID_NETWORTH_INC = 215\nVENDOR_ID_TANDBERG_DATA_A_S = 216\nVENDOR_ID_TECHNICALLY_ELITE_CONCEPTS_INC = 217\nVENDOR_ID_LABTAM_AUSTRALIA_PTY_LTD = 218\nVENDOR_ID_REPUBLIC_TELCOM_SYSTEMS_INC = 219\nVENDOR_ID_ADI_SYSTEMS_INC = 220\nVENDOR_ID_MICROWAVE_BYPASS_SYSTEMS_INC = 221\nVENDOR_ID_PYRAMID_TECHNOLOGY_CORP = 222\nVENDOR_ID_UNISYS_CORP = 223\nVENDOR_ID_LANOPTICS_LTD_ISRAEL = 224\nVENDOR_ID_NKK_CORPORATION = 225\nVENDOR_ID_CODIMA_TECHNOLOGIES_LTD = 226\nVENDOR_ID_ACALS = 227\nVENDOR_ID_ASTEC_INC = 228\nVENDOR_ID_DELMARVA_POWER = 229\nVENDOR_ID_TELEMATICS_INTERNATIONAL_INC = 230\nVENDOR_ID_FUJITSU_TECHNOLOGY_SOLUTIONS_GMBH_FORMERLY_FUJITSU_SIEMENS_COMPUTERS = 231\nVENDOR_ID_COMPAQ = 232\nVENDOR_ID_NETMANAGE_INC = 233\nVENDOR_ID_NC_STATE_UNIVERSITY = 234\nVENDOR_ID_EMPIRICAL_TOOLS_AND_TECHNOLOGIES = 235\nVENDOR_ID_SAMSUNG_ELECTRONICS_CO_LTD = 236\nVENDOR_ID_TAKAOKA_ELECTRIC_MFG_CO_LTD = 237\nVENDOR_ID_NXNETWORKS_2 = 238\nVENDOR_ID_WINDATA = 239\nVENDOR_ID_RC_INTERNATIONAL_A_S = 240\nVENDOR_ID_NETEXP_RESEARCH = 241\nVENDOR_ID_INTERNODE_SYSTEMS_PTY_LTD = 242\nVENDOR_ID_NETCS_INFORMATIONSTECHNIK_GMBH = 243\nVENDOR_ID_LANTRONIX = 244\nVENDOR_ID_AVATAR_CONSULTANTS = 245\nVENDOR_ID_FURUKAWA_ELECTORIC_CO_LTD = 246\nVENDOR_ID_ND_SATCOM_GESELLSCHAFT_FR_SATELLITENKOMMUNIKATIONSSYSTEMEMBH = 247\nVENDOR_ID_RICHARD_HIRSCHMANN_GMBH_CO = 248\nVENDOR_ID_G2R_INC = 249\nVENDOR_ID_UNIVERSITY_OF_MICHIGAN = 250\nVENDOR_ID_NETCOMM_LTD = 251\nVENDOR_ID_SABLE_TECHNOLOGY_CORPORATION = 252\nVENDOR_ID_XEROX = 253\nVENDOR_ID_CONWARE_COMPUTER_CONSULTING_GMBH = 254\nVENDOR_ID_COMPATIBLE_SYSTEMS_CORP = 255\nVENDOR_ID_SCITEC_COMMUNICATIONS_SYSTEMS_LTD = 256\nVENDOR_ID_TRANSARC_CORPORATION = 257\nVENDOR_ID_MATSUSHITA_ELECTRIC_INDUSTRIAL_CO_LTD = 258\nVENDOR_ID_ACCTON_TECHNOLOGY = 259\nVENDOR_ID_STAR_TEK_INC = 260\nVENDOR_ID_ADC_CODENOLL_TECHNOLOGY_CORPORATION = 261\nVENDOR_ID_FORMATION_INC = 262\nVENDOR_ID_SEIKO_INSTRUMENTS_INC = 263\nVENDOR_ID_RCE_RESEAUX_DE_COMMUNICATION_DENTREPRISE_SA = 264\nVENDOR_ID_XENOCOM_INC = 265\nVENDOR_ID_NEXANS_DEUTSCHLAND_INDUSTRIES = 266\nVENDOR_ID_SYSTECH_COMPUTER_CORPORATION = 267\nVENDOR_ID_VISUAL = 268\nVENDOR_ID_CSC_AIRLINE_SOLUTIONS_DENMARK_A_S = 269\nVENDOR_ID_ZENITH_ELECTRONICS_CORPORATION = 270\nVENDOR_ID_TELECOM_FINLAND = 271\nVENDOR_ID_BINTEC_COMMUNICATIONS_GMBH = 272\nVENDOR_ID_EUNET_GERMANY = 273\nVENDOR_ID_PICTURETEL_CORPORATION = 274\nVENDOR_ID_MICHIGAN_STATE_UNIVERSITY = 275\nVENDOR_ID_GTE_GOVERNMENT_SYSTEMS_NETWORK_MANAGEMENT_ORGANIZATION = 276\nVENDOR_ID_CASCADE_COMMUNICATIONS_CORP = 277\nVENDOR_ID_HITACHI_CABLE_LTD = 278\nVENDOR_ID_OLIVETTI = 279\nVENDOR_ID_VITACOM_CORPORATION = 280\nVENDOR_ID_INMOS = 281\nVENDOR_ID_AIC_SYSTEMS_LABORATORIES_LTD = 282\nVENDOR_ID_CAMEO_COMMUNICATIONS_INC = 283\nVENDOR_ID_DIAB_DATA_AB = 284\nVENDOR_ID_OLICOM_A_S = 285\nVENDOR_ID_DIGITAL_KIENZLE_COMPUTERSYSTEMS = 286\nVENDOR_ID_CSELTCENTRO_STUDI_E_LABORATORI_TELECOMUNICAZIONI = 287\nVENDOR_ID_ELECTRONIC_DATA_SYSTEMS = 288\nVENDOR_ID_BROCADE_COMMUNICATIONS_SYSTEMS_INC_FORMERLY_MCDATA_CORPORATION = 289\nVENDOR_ID_HARRIS_CORPORATION = 290\nVENDOR_ID_TECHNOLOGY_DYNAMICS_INC = 291\nVENDOR_ID_DATAHOUSE_INFORMATION_SYSTEMS_LTD = 292\nVENDOR_ID_TELTREND_NZ_LIMITED = 293\nVENDOR_ID_TEXAS_INSTRUMENTS = 294\nVENDOR_ID_PLAINTREE_SYSTEMS_INC = 295\nVENDOR_ID_HEDEMANN_SOFTWARE_DEVELOPMENT = 296\nVENDOR_ID_FUJI_XEROX_CO_LTD = 297\nVENDOR_ID_ASANTE_TECHNOLOGY = 298\nVENDOR_ID_STANFORD_UNIVERSITY = 299\nVENDOR_ID_DIGITAL_LINK = 300\nVENDOR_ID_RAYLAN_CORPORATION = 301\nVENDOR_ID_COMMSCRAFT = 302\nVENDOR_ID_HUGHES_COMMUNICATIONS_INC = 303\nVENDOR_ID_FARALLON_COMPUTING_INC = 304\nVENDOR_ID_GE_INFORMATION_SERVICES = 305\nVENDOR_ID_GAMBIT_COMPUTER_COMMUNICATIONS = 306\nVENDOR_ID_LIVINGSTON_ENTERPRISES_INC = 307\nVENDOR_ID_STAR_TECHNOLOGIES = 308\nVENDOR_ID_MICRONICS_COMPUTERS_INC = 309\nVENDOR_ID_BASIS_INC = 310\nVENDOR_ID_MICROSOFT = 311\nVENDOR_ID_US_WEST_ADVANCE_TECHNOLOGIES = 312\nVENDOR_ID_UNIVERSITY_COLLEGE_LONDON = 313\nVENDOR_ID_EASTMAN_KODAK_COMPANY = 314\nVENDOR_ID_NETWORK_RESOURCES_CORPORATION = 315\nVENDOR_ID_ATLAS_TELECOM = 316\nVENDOR_ID_BRIDGEWAY = 317\nVENDOR_ID_AMERICAN_POWER_CONVERSION_CORP = 318\nVENDOR_ID_DOE_ATMOSPHERIC_RADIATION_MEASUREMENT_PROJECT = 319\nVENDOR_ID_VERSTEEG_CODEWORKS = 320\nVENDOR_ID_VERILINK_CORP = 321\nVENDOR_ID_SYBUS_CORPORTATION = 322\nVENDOR_ID_TEKELEC = 323\nVENDOR_ID_NASA_AMES_RESEARCH_CENTER = 324\nVENDOR_ID_SIMON_FRASER_UNIVERSITY = 325\nVENDOR_ID_FORE_SYSTEMS_INC = 326\nVENDOR_ID_CENTRUM_COMMUNICATIONS_INC = 327\nVENDOR_ID_NEXT_COMPUTER_INC = 328\nVENDOR_ID_NETCORE_INC = 329\nVENDOR_ID_NORTHWEST_DIGITAL_SYSTEMS = 330\nVENDOR_ID_ANDREW_CORPORATION = 331\nVENDOR_ID_DIGI_INTERNATIONAL = 332\nVENDOR_ID_COMPUTER_NETWORK_TECHNOLOGY = 333\nVENDOR_ID_LOTUS_DEVELOPMENT_CORP = 334\nVENDOR_ID_MICOM_COMMUNICATION_CORPORATION = 335\nVENDOR_ID_ASCII_CORPORATION = 336\nVENDOR_ID_PUREDATA_RESEARCH = 337\nVENDOR_ID_NTT_DATA = 338\nVENDOR_ID_SIEMENS_INDUSTRY_INC = 339\nVENDOR_ID_KENDALL_SQUARE_RESEARCH_KSR = 340\nVENDOR_ID_ORNL = 341\nVENDOR_ID_NETWORK_INNOVATIONS_INC = 342\nVENDOR_ID_INTEL_CORPORATION = 343\nVENDOR_ID_COMPUWARE_CORPORATION = 344\nVENDOR_ID_EPSON_RESEARCH_CENTER = 345\nVENDOR_ID_FIBERNET = 346\nVENDOR_ID_DOT_HILL_SYSTEMS = 347\nVENDOR_ID_AMERICAN_EXPRESS_COMPANY = 348\nVENDOR_ID_COMPU_SHACK = 349\nVENDOR_ID_PARALLAN_COMPUTER_INC = 350\nVENDOR_ID_STRATACOM = 351\nVENDOR_ID_OPEN_NETWORKS_ENGINEERING_INC = 352\nVENDOR_ID_ATM_FORUM = 353\nVENDOR_ID_SSD_MANAGEMENT_INC = 354\nVENDOR_ID_AUTOMATED_NETWORK_MANAGEMENT_INC = 355\nVENDOR_ID_MAGNALINK_COMMUNICATIONS_CORPORATION = 356\nVENDOR_ID_KASTEN_CHASE_APPLIED_RESEARCH = 357\nVENDOR_ID_SKYLINE_TECHNOLOGY_INC = 358\nVENDOR_ID_NU_MEGA_TECHNOLOGIES_INC = 359\nVENDOR_ID_MORGAN_STANLEY_CO_INTERNATIONAL_PLC = 360\nVENDOR_ID_INTEGRATED_BUSINESS_NETWORK = 361\nVENDOR_ID_L_N_TECHNOLOGIES_LTD = 362\nVENDOR_ID_CINCINNATI_BELL_INFORMATION_SYSTEMS_INC = 363\nVENDOR_ID_RAMA_TECHNOLOGIES = 364\nVENDOR_ID_MICROGNOSIS = 365\nVENDOR_ID_DATAPOINT_CORPORATION = 366\nVENDOR_ID_RICOH_CO_LTD = 367\nVENDOR_ID_AXIS_COMMUNICATIONS_AB = 368\nVENDOR_ID_PACER_SOFTWARE = 369\nVENDOR_ID_3COM_AXON = 370\nVENDOR_ID_ALEBRA_TECHNOLOGIES_INC = 371\nVENDOR_ID_GSI = 372\nVENDOR_ID_TATUNG_CO_LTD = 373\nVENDOR_ID_DIS_RESEARCH_LTD = 374\nVENDOR_ID_QUOTRON_SYSTEMS_INC = 375\nVENDOR_ID_DASSAULT_ELECTRONIQUE = 376\nVENDOR_ID_COROLLARY_INC = 377\nVENDOR_ID_SEEL_LTD = 378\nVENDOR_ID_LEXCEL = 379\nVENDOR_ID_PIER64 = 380\nVENDOR_ID_OST = 381\nVENDOR_ID_MEGADATA_PTY_LTD = 382\nVENDOR_ID_LLNL_LIVERMORE_COMPUTER_CENTER = 383\nVENDOR_ID_DYNATECH_COMMUNICATIONS = 384\nVENDOR_ID_SYMPLEX_COMMUNICATIONS_CORP = 385\nVENDOR_ID_TRIBE_COMPUTER_WORKS = 386\nVENDOR_ID_TALIGENT_INC = 387\nVENDOR_ID_SYMBOL_TECHNOLOGIES_INC = 388\nVENDOR_ID_LANCERT = 389\nVENDOR_ID_ALANTEC = 390\nVENDOR_ID_RIDGEBACK_SOLUTIONS = 391\nVENDOR_ID_METRIX_INC = 392\nVENDOR_ID_SYMANTEC_CORPORATION = 393\nVENDOR_ID_NRL_COMMUNICATION_SYSTEMS_BRANCH = 394\nVENDOR_ID_IDE_CORPORATION = 395\nVENDOR_ID_PANASONIC_ELECTRIC_WORKS_CO_LTD = 396\nVENDOR_ID_MEGAPAC = 397\nVENDOR_ID_TYCO_ELECTRONICS = 398\nVENDOR_ID_HITACHI_COMPUTER_PRODUCTS_AMERICA_INC = 399\nVENDOR_ID_METEO_FRANCE = 400\nVENDOR_ID_PRC_INC = 401\nVENDOR_ID_WAL_MART_STORES_INC = 402\nVENDOR_ID_NISSIN_ELECTRIC_COMPANY_LTD = 403\nVENDOR_ID_DISTRIBUTED_SUPPORT_INFORMATION_STANDARD = 404\nVENDOR_ID_SMDS_INTEREST_GROUP_SIG = 405\nVENDOR_ID_SOLCOM_SYSTEMS_LTD = 406\nVENDOR_ID_BELL_ATLANTIC = 407\nVENDOR_ID_ADVANCED_MULTIUSER_TECHNOLOGIES_CORPORATION = 408\nVENDOR_ID_MITSUBISHI_ELECTRIC_CORPORATION = 409\nVENDOR_ID_COL_SYSTEMS_INC = 410\nVENDOR_ID_UNIVERSITY_OF_AUCKLAND = 411\nVENDOR_ID_DISTRIBUTED_MANAGEMENT_TASK_FORCE_DMTF = 412\nVENDOR_ID_KLEVER_COMPUTERS_INCTOM_SU = 413\nVENDOR_ID_AMDAHL_CORPORATION = 414\nVENDOR_ID_JTEC_PTY_LTD = 415\nVENDOR_ID_MATRA_COMMUNCATION = 416\nVENDOR_ID_HAL_COMPUTER_SYSTEMS = 417\nVENDOR_ID_LAWRENCE_BERKELEY_LABORATORY = 418\nVENDOR_ID_DALE_COMPUTER_CORPORATION = 419\nVENDOR_ID_UNIVERSITY_OF_TUEBINGEN = 420\nVENDOR_ID_BYTEX_CORPORATION = 421\nVENDOR_ID_COGWHEEL_INC = 422\nVENDOR_ID_LANWAN_TECHNOLOGIES = 423\nVENDOR_ID_THOMAS_CONRAD_CORPORATION = 424\nVENDOR_ID_TXPORT = 425\nVENDOR_ID_COMPEX_INC = 426\nVENDOR_ID_EVERGREEN_SYSTEMS_INC = 427\nVENDOR_ID_HNV_INC = 428\nVENDOR_ID_UTSTARCOM_INCORPORATED = 429\nVENDOR_ID_CANADA_POST_CORPORATION = 430\nVENDOR_ID_OPEN_SYSTEMS_SOLUTIONS_INC = 431\nVENDOR_ID_TORONTO_STOCK_EXCHANGE = 432\nVENDOR_ID_MAMAKOSTRANSSYS_CONSULTING = 433\nVENDOR_ID_EICON = 434\nVENDOR_ID_JUPITER_SYSTEMS = 435\nVENDOR_ID_SSTI = 436\nVENDOR_ID_GRAND_JUNCTION_NETWORKS = 437\nVENDOR_ID_PEGASUS_SOLUTIONS_INC = 438\nVENDOR_ID_EDWARD_D_JONES_AND_COMPANY = 439\nVENDOR_ID_AMNET_INC = 440\nVENDOR_ID_CHASE_RESEARCH = 441\nVENDOR_ID_BMC_SOFTWARE = 442\nVENDOR_ID_GATEWAY_COMMUNICATIONS_INC = 443\nVENDOR_ID_PEREGRINE_SYSTEMS = 444\nVENDOR_ID_DAEWOO_TELECOM = 445\nVENDOR_ID_NORWEGIAN_TELECOM_RESEARCH = 446\nVENDOR_ID_WILTEL = 447\nVENDOR_ID_ERICSSON_CAMTEC = 448\nVENDOR_ID_CODEX = 449\nVENDOR_ID_BASIS = 450\nVENDOR_ID_AGE_LOGIC = 451\nVENDOR_ID_INDE_ELECTRONICS = 452\nVENDOR_ID_ISODE_LIMITED = 453\nVENDOR_ID_JI_CASE = 454\nVENDOR_ID_TRILLIUM = 455\nVENDOR_ID_BACCHUS_INC = 456\nVENDOR_ID_MCC = 457\nVENDOR_ID_STRATUS_COMPUTER = 458\nVENDOR_ID_QUOTRON = 459\nVENDOR_ID_BEAME_WHITESIDE = 460\nVENDOR_ID_CELLULAR_TECHNICAL_SERVICES = 461\nVENDOR_ID_SHORE_MICROSYSTEMS_INC = 462\nVENDOR_ID_TELECOMMUNICATIONS_TECHNIQUES_CORP = 463\nVENDOR_ID_DNPAP_TECHNICAL_UNIVERSITY_DELFT = 464\nVENDOR_ID_PLEXCOM_INC = 465\nVENDOR_ID_TYLINK = 466\nVENDOR_ID_BROOKHAVEN_LABORATORY = 467\nVENDOR_ID_COMPUTER_COMMUNICATION_SYSTEMS = 468\nVENDOR_ID_NORAND_CORPORATION = 469\nVENDOR_ID_MUX_LAP = 470\nVENDOR_ID_PREMISYS_COMMUNICATIONS_INC = 471\nVENDOR_ID_BELL_SOUTH_TELECOMMUNICATIONS = 472\nVENDOR_ID_J_STAINSBURY_PLC = 473\nVENDOR_ID_MANAGE_OPERATIONS = 474\nVENDOR_ID_WANDEL_AND_GOLTERMANN_TECHNOLOGIES = 475\nVENDOR_ID_EMERSON_COMPUTER_POWER = 476\nVENDOR_ID_NETWORK_SOFTWARE_ASSOCIATES = 477\nVENDOR_ID_PROCTER_AND_GAMBLE = 478\nVENDOR_ID_MERIDIAN_TECHNOLOGY_CORPORATION = 479\nVENDOR_ID_QMS_INC = 480\nVENDOR_ID_NETWORK_EXPRESSTOM_JAREMA = 481\nVENDOR_ID_LANCITY_CORPORATION = 482\nVENDOR_ID_DAYNA_COMMUNICATIONS_INC = 483\nVENDOR_ID_KN_X_LTD = 484\nVENDOR_ID_SYNC_RESEARCH_INC = 485\nVENDOR_ID_PREMNET = 486\nVENDOR_ID_SIAC = 487\nVENDOR_ID_NEW_YORK_STOCK_EXCHANGE = 488\nVENDOR_ID_AMERICAN_STOCK_EXCHANGE = 489\nVENDOR_ID_FCR_SOFTWARE_INC = 490\nVENDOR_ID_NATIONAL_MEDICAL_CARE_INC = 491\nVENDOR_ID_DCS_DIALOG_COMMUNICATION_SYSTEMS_AKTIENGESELLSCHAFT_BERLIN = 492\nVENDOR_ID_NORTELE = 493\nVENDOR_ID_MADGE_NETWORKS_INC = 494\nVENDOR_ID_MEMOTEC_COMMUNICATIONS = 495\nVENDOR_ID_ON = 496\nVENDOR_ID_LEAP_TECHNOLOGY_INC = 497\nVENDOR_ID_GENERAL_DATACOMM_INC = 498\nVENDOR_ID_ACE_COMMUNICATIONS_LTD = 499\nVENDOR_ID_ADP = 500\nVENDOR_ID_PROGRAMA_SPRITEL = 501\nVENDOR_ID_ADACOM = 502\nVENDOR_ID_METRODATA_LTD = 503\nVENDOR_ID_ELLEMTEL_TELECOMMUNICATION_SYSTEMS_LABORATORIES = 504\nVENDOR_ID_ARIZONA_PUBLIC_SERVICE = 505\nVENDOR_ID_NETWIZ_LTD = 506\nVENDOR_ID_SCIENCE_AND_ENGINEERING_RESEARCH_COUNCIL_SERC = 507\nVENDOR_ID_508_CREDIT_SUISSE_FIRST_BOSTON_WATCHER = 508\nVENDOR_ID_HADAX_ELECTRONICS_INC = 509\nVENDOR_ID_VTKK = 510\nVENDOR_ID_NORTH_HILLS_ISRAEL_LTD = 511\nVENDOR_ID_TECSIEL = 512\nVENDOR_ID_BAYERISCHE_MOTOREN_WERKE_BMW_AG = 513\nVENDOR_ID_CNET_TECHNOLOGIES = 514\nVENDOR_ID_MCI = 515\nVENDOR_ID_HUMAN_ENGINEERING_AG_HEAG = 516\nVENDOR_ID_FILENET_CORPORATION = 517\nVENDOR_ID_KONGSBERG_GRUPPEN_ASA_FORMERLY_NFT_ERICSSON = 518\nVENDOR_ID_DUN_BRADSTREET = 519\nVENDOR_ID_INTERCOMPUTER_COMMUNICATIONS = 520\nVENDOR_ID_DEFENSE_INTELLIGENCE_AGENCY = 521\nVENDOR_ID_TELESYSTEMS_SLW_INC = 522\nVENDOR_ID_APT_COMMUNICATIONS = 523\nVENDOR_ID_DELTA_AIRLINES = 524\nVENDOR_ID_CALIFORNIA_MICROWAVE = 525\nVENDOR_ID_AVID_TECHNOLOGY_INC = 526\nVENDOR_ID_INTEGRO_ADVANCED_COMPUTER_SYSTEMS = 527\nVENDOR_ID_RPTI = 528\nVENDOR_ID_ASCEND_COMMUNICATIONS_INC = 529\nVENDOR_ID_EDEN_COMPUTER_SYSTEMS_INC = 530\nVENDOR_ID_KAWASAKI_STEEL_CORP = 531\nVENDOR_ID_SYSTEMS_MANAGEMENT_INFRASTURE_BARCLAYS_BANK_PLC = 532\nVENDOR_ID_BUG_INC = 533\nVENDOR_ID_EATON_CORPORATION = 534\nVENDOR_ID_SUPERCONDUCTING_SUPERCOLLIDER_LAB = 535\nVENDOR_ID_TRITICOM = 536\nVENDOR_ID_UNIVERSAL_INSTRUMENTS_CORP = 537\nVENDOR_ID_INFORMATION_RESOURCES_INC = 538\nVENDOR_ID_KENTROX_2 = 539\nVENDOR_ID_CRYPTO_AG = 540\nVENDOR_ID_INFINITE_NETWORKS_LTD = 541\nVENDOR_ID_TANGRAM_ENTERPRISE_SOLUTIONS_INC = 542\nVENDOR_ID_ALEBRA_TECHNOLOGIES_INC_2 = 543\nVENDOR_ID_EQUINOX_SYSTEMS_INC = 544\nVENDOR_ID_HAYES_MICROCOMPUTER_PRODUCTS = 545\nVENDOR_ID_EMPIRE_TECHNOLOGIES_INC = 546\nVENDOR_ID_GLAXOCHEM_LTD = 547\nVENDOR_ID_SOFTWARE_PROFESSIONALS_INC = 548\nVENDOR_ID_AGENT_TECHNOLOGY_INC = 549\nVENDOR_ID_DORNIER_GMBH = 550\nVENDOR_ID_TELXON_CORPORATION = 551\nVENDOR_ID_ENTERGY_CORPORATION = 552\nVENDOR_ID_GARRETTCOM_INC_FORMERLY_GARRETT_COMMUNICATIONS = 553\nVENDOR_ID_AGILE_NETWORKS_INC = 554\nVENDOR_ID_LARSCOM = 555\nVENDOR_ID_STOCK_EQUIPMENT = 556\nVENDOR_ID_ITT_CORPORATION = 557\nVENDOR_ID_UNIVERSAL_DATA_SYSTEMS_INC = 558\nVENDOR_ID_SONIX_COMMUNICATIONS_LTD = 559\nVENDOR_ID_PAUL_FREEMAN_ASSOCIATES_INC = 560\nVENDOR_ID_JOHN_S_BARNES_CORP = 561\nVENDOR_ID_NORTHERN_TELECOM_LTD = 562\nVENDOR_ID_CAP_DEBRIS = 563\nVENDOR_ID_TELCO_SYSTEMS_NAC = 564\nVENDOR_ID_TOSCO_REFINING_CO = 565\nVENDOR_ID_RUSSELL_INFO_SYS = 566\nVENDOR_ID_UNIVERSITY_OF_SALFORD = 567\nVENDOR_ID_NETQUEST_CORP = 568\nVENDOR_ID_ARMON_NETWORKING_LTD = 569\nVENDOR_ID_IA_CORPORATION = 570\nVENDOR_ID_AU_SYSTEM_COMMUNICATON_AB = 571\nVENDOR_ID_GOLDSTAR_INFORMATION_COMMUNICATIONS_LTD = 572\nVENDOR_ID_SECTRA_AB = 573\nVENDOR_ID_ONEAC_CORPORATION = 574\nVENDOR_ID_TREE_TECHNOLOGIES = 575\nVENDOR_ID_GENERAL_DYNAMICS_C4_SYSTEMS = 576\nVENDOR_ID_GENEVA_SOFTWARE_INC = 577\nVENDOR_ID_INTERLINK_COMPUTER_SCIENCES_INC = 578\nVENDOR_ID_BRIDGE_INFORMATION_SYSTEMS_INC = 579\nVENDOR_ID_LEEDS_AND_NORTHRUP_AUSTRALIA_LNA_NIGEL_COOK = 580\nVENDOR_ID_CSG_SYSTEMS_INTERNATIONAL_FORMERLY_INTEC_TELECOM_SYSTEMS = 581\nVENDOR_ID_NEWPORT_SYSTEMS_SOLUTIONS_INC = 582\nVENDOR_ID_AZEL_CORPORATION = 583\nVENDOR_ID_ROBOTIKER = 584\nVENDOR_ID_PEERLOGIC_INC = 585\nVENDOR_ID_DIGITAL_TRANSMITTION_SYSTEMS = 586\nVENDOR_ID_FAR_POINT_COMMUNICATIONS = 587\nVENDOR_ID_XIRCOM = 588\nVENDOR_ID_MEAD_DATA_CENTRAL = 589\nVENDOR_ID_ROYAL_BANK_OF_CANADA = 590\nVENDOR_ID_ADVANTIS_INC = 591\nVENDOR_ID_CHEMICAL_BANKING_CORP = 592\nVENDOR_ID_EAGLE_TECHNOLOGY = 593\nVENDOR_ID_BT = 594\nVENDOR_ID_RADIX_BV = 595\nVENDOR_ID_TAINET_COMMUNICATION_SYSTEM_CORP = 596\nVENDOR_ID_COMTEK_SERVICES_INC = 597\nVENDOR_ID_FAIR_ISAAC_CORPORATION = 598\nVENDOR_ID_AST_RESEARCH_INC = 599\nVENDOR_ID_SOFTSTAR_SRL_ING_ENRICO_BADELLA = 600\nVENDOR_ID_BANCOMM = 601\nVENDOR_ID_TRUSTED_INFORMATION_SYSTEMS_INC = 602\nVENDOR_ID_HARRIS_JEFFRIES_INC = 603\nVENDOR_ID_AXEL_TECHNOLOGY_CORP = 604\nVENDOR_ID_NETTEST_INC = 605\nVENDOR_ID_CAP_DEBIS = 606\nVENDOR_ID_LACHMAN_TECHNOLOGY_INC = 607\nVENDOR_ID_GALCOM_NETWORKING_LTD = 608\nVENDOR_ID_BAZIS = 609\nVENDOR_ID_SYNAPTEL = 610\nVENDOR_ID_INVESTMENT_MANAGEMENT_SERVICES_INC = 611\nVENDOR_ID_TAIWAN_TELECOMMUNICATION_LAB = 612\nVENDOR_ID_ANAGRAM_CORPORATION = 613\nVENDOR_ID_UNIVEL = 614\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_SAN_DIEGO = 615\nVENDOR_ID_COMPUSERVE = 616\nVENDOR_ID_TELSTRA_OTC_AUSTRALIA = 617\nVENDOR_ID_WESTINGHOUSE_ELECTRIC_CORP = 618\nVENDOR_ID_DGA_LTD = 619\nVENDOR_ID_ELEGANT_COMMUNICATIONS_INC = 620\nVENDOR_ID_EXPERDATA = 621\nVENDOR_ID_UNISOURCE_BUSINESS_NETWORKS_SWEDEN_AB = 622\nVENDOR_ID_MOLEX_INC = 623\nVENDOR_ID_QUAY_FINANCIAL_SOFTWARE = 624\nVENDOR_ID_VMX_INC = 625\nVENDOR_ID_HYPERCOM_INC = 626\nVENDOR_ID_UNIVERSITY_OF_GUELPH = 627\nVENDOR_ID_DIALOGIKA = 628\nVENDOR_ID_NBASE_SWITCH_COMMUNICATION = 629\nVENDOR_ID_ANCHOR_DATACOMM_BV = 630\nVENDOR_ID_PACDATA = 631\nVENDOR_ID_UNIVERSITY_OF_COLORADO = 632\nVENDOR_ID_TRICOM_COMMUNICATIONS_LIMITED = 633\nVENDOR_ID_SANTIX_SOFTWARE_GMBH = 634\nVENDOR_ID_ENCORE_NETWORKS_INC = 635\nVENDOR_ID_GEORGIA_INSTITUTE_OF_TECHNOLOGY = 636\nVENDOR_ID_ALCATEL_LUCENT_FORMERLY_ALCATEL_DATA_NETWORK = 637\nVENDOR_ID_GTECH = 638\nVENDOR_ID_UNOCAL_CORPORATION = 639\nVENDOR_ID_FIRST_PACIFIC_NETWORK = 640\nVENDOR_ID_LEXMARK_INTERNATIONAL = 641\nVENDOR_ID_QNIX_COMPUTER = 642\nVENDOR_ID_JIGSAW_SOFTWARE_CONCEPTS_PTY_LTD = 643\nVENDOR_ID_EASTERN_RESEARCH_INC = 644\nVENDOR_ID_NSGDATACOM_INC = 645\nVENDOR_ID_SEIKO_COMMUNICATION_SYSTEMS_INC = 646\nVENDOR_ID_UNIFIED_MANAGEMENT = 647\nVENDOR_ID_RADLINX_LTD = 648\nVENDOR_ID_MICROPLEX_SYSTEMS_LTD = 649\nVENDOR_ID_TRIO_INFORMATION_SYSTEMS_AB = 650\nVENDOR_ID_PHOENIX_MICROSYSTEMS = 651\nVENDOR_ID_DISTRIBUTED_SYSTEMS_INTERNATIONAL_INC = 652\nVENDOR_ID_EVOLVING_SYSTEMS_INC = 653\nVENDOR_ID_SAT_GMBH = 654\nVENDOR_ID_CELAN_TECHNOLOGY_INC = 655\nVENDOR_ID_LANDMARK_SYSTEMS_CORP = 656\nVENDOR_ID_NETONE_SYSTEMS_CO_LTD = 657\nVENDOR_ID_LORAL_DATA_SYSTEMS = 658\nVENDOR_ID_CELLWARE_BROADBAND_TECHNOLOGY = 659\nVENDOR_ID_MUSYS_CORPORATION = 660\nVENDOR_ID_IMC_NETWORKS_CORP = 661\nVENDOR_ID_OCTEL_COMMUNICATIONS_CORP = 662\nVENDOR_ID_RIT_TECHNOLOGIES_LTD = 663\nVENDOR_ID_ADTRAN = 664\nVENDOR_ID_NETVION_INC = 665\nVENDOR_ID_OKI_ELECTRIC_INDUSTRY_CO_LTD = 666\nVENDOR_ID_SPECIALIX_INTERNATIONAL = 667\nVENDOR_ID_INESC_INSTITUTO_DE_ENGENHARIA_DE_SISTEMAS_E_COMPUTADORES = 668\nVENDOR_ID_GLOBALNET_COMMUNICATIONS = 669\nVENDOR_ID_PRODUCT_LINE_ENGINEER_SVEC_COMPUTER_CORP = 670\nVENDOR_ID_PRINTER_SYSTEMS_CORP = 671\nVENDOR_ID_CONTEC_MICRO_ELECTRONICS_USA = 672\nVENDOR_ID_UNIX_INTEGRATION_SERVICES = 673\nVENDOR_ID_DELL_INC = 674\nVENDOR_ID_WHITTAKER_ELECTRONIC_SYSTEMS = 675\nVENDOR_ID_QPSX_COMMUNICATIONS = 676\nVENDOR_ID_LORAL_WDL = 677\nVENDOR_ID_FEDERAL_EXPRESS_CORP = 678\nVENDOR_ID_E_COMMS_INC = 679\nVENDOR_ID_SOFTWARE_CLEARING_HOUSE = 680\nVENDOR_ID_ANTLOW_COMPUTERS_LTD = 681\nVENDOR_ID_EMCOM_CORP = 682\nVENDOR_ID_EXTENDED_SYSTEMS_INC = 683\nVENDOR_ID_SOLA_ELECTRIC = 684\nVENDOR_ID_ESIX_SYSTEMS_INC = 685\nVENDOR_ID_3M_MMM = 686\nVENDOR_ID_CYLINK_CORP = 687\nVENDOR_ID_ZNYX_ADVANCED_SYSTEMS_DIVISION_INC = 688\nVENDOR_ID_TEXACO_INC = 689\nVENDOR_ID_MCCAW_CELLULAR_COMMUNICATION_CORP = 690\nVENDOR_ID_ASP_COMPUTER_PRODUCT_INC = 691\nVENDOR_ID_HIPERFORMANCE_SYSTEMS = 692\nVENDOR_ID_REGIONALES_RECHENZENTRUM_ERLANGEN = 693\nVENDOR_ID_SAP_AG = 694\nVENDOR_ID_ELECTROSPACE_SYSTEM_INC = 695\nVENDOR_ID_UNASSIGNED = 696\nVENDOR_ID_MULTIPORT_CORPORATION = 697\nVENDOR_ID_COMBINET_INC = 698\nVENDOR_ID_TSCC = 699\nVENDOR_ID_TELEOS_COMMUNICATIONS_INC = 700\nVENDOR_ID_ALTA_RESEARCH = 701\nVENDOR_ID_INDEPENDENCE_BLUE_CROSS = 702\nVENDOR_ID_ADACOM_STATION_INTERCONNECTIVITY_LTD = 703\nVENDOR_ID_MIROR_SYSTEMS = 704\nVENDOR_ID_MERLIN_GERIN = 705\nVENDOR_ID_OWEN_CORNING_FIBERGLAS = 706\nVENDOR_ID_TALKING_NETWORKS_INC = 707\nVENDOR_ID_CUBIX_CORPORATION = 708\nVENDOR_ID_FORMATION_INC_2 = 709\nVENDOR_ID_LANNAIR_LTD = 710\nVENDOR_ID_LIGHTSTREAM_CORP = 711\nVENDOR_ID_LANART_CORP = 712\nVENDOR_ID_UNIVERSITY_OF_STELLENBOSCH = 713\nVENDOR_ID_WYSE_TECHNOLOGY = 714\nVENDOR_ID_DSC_COMMUNICATIONS_CORP = 715\nVENDOR_ID_NETEC = 716\nVENDOR_ID_BRELTENBACH_SOFTWARE_ENGINEERING_GMBH = 717\nVENDOR_ID_VICTOR_COMPANY_OF_JAPANLIMITED = 718\nVENDOR_ID_JAPAN_DIREX_CORPORATION = 719\nVENDOR_ID_NECSY_NETWORK_CONTROL_SYSTEMS_SPA_PIERO_FIOZZO = 720\nVENDOR_ID_ISDN_SYSTEMS_CORP = 721\nVENDOR_ID_ZERO_ONE_TECHNOLOGIES_LTD = 722\nVENDOR_ID_RADIX_TECHNOLOGIES_INC = 723\nVENDOR_ID_NATIONAL_INSTITUTE_OF_STANDARDS_AND_TECHNOLOGY = 724\nVENDOR_ID_DIGITAL_TECHNOLOGY_INC = 725\nVENDOR_ID_CASTELLE_CORP = 726\nVENDOR_ID_MEMOTEC_INC = 727\nVENDOR_ID_SHOWA_ELECTRIC_WIRE_CABLE_CO_LTD = 728\nVENDOR_ID_SPECTRAGRAPHICS = 729\nVENDOR_ID_CONNECTWARE_INC = 730\nVENDOR_ID_WIND_RIVER_SYSTEMS = 731\nVENDOR_ID_RADWAY_INTERNATIONAL_LTD = 732\nVENDOR_ID_SYSTEM_MANAGEMENT_ARTS_INC = 733\nVENDOR_ID_PERSOFT_INC = 734\nVENDOR_ID_XNET_TECHNOLOGY_INC = 735\nVENDOR_ID_UNISON_TYMLABS = 736\nVENDOR_ID_MICRO_MATIC_RESEARCH = 737\nVENDOR_ID_BATM_ADVANCE_TECHNOLOGIES = 738\nVENDOR_ID_UNIVERSITY_OF_COPENHAGEN = 739\nVENDOR_ID_NETWORK_SECURITY_SYSTEMS_INC = 740\nVENDOR_ID_JNA_TELECOMMUNICATIONS = 741\nVENDOR_ID_ENCORE_COMPUTER_CORPORATION = 742\nVENDOR_ID_CENTRAL_INTELLIGENCE_AGENCY = 743\nVENDOR_ID_ISC_GB_LIMITED = 744\nVENDOR_ID_DIGITAL_COMMUNICATION_ASSOCIATES = 745\nVENDOR_ID_CYBERMEDIA_INC = 746\nVENDOR_ID_DISTRIBUTED_SYSTEMS_INTERNATIONAL_INC_2 = 747\nVENDOR_ID_PETER_RADIG_EDP_CONSULTING = 748\nVENDOR_ID_VICORP_INTERACTIVE_SYSTEMS = 749\nVENDOR_ID_INET_INC = 750\nVENDOR_ID_ARGONNE_NATIONAL_LAB = 751\nVENDOR_ID_TEKLOGIX = 752\nVENDOR_ID_NORTH_WESTERN_UNIVERSITY = 753\nVENDOR_ID_ASTARTE_FIBER_NETWORKS = 754\nVENDOR_ID_DIEDERICH_ASSOCIATES_INC = 755\nVENDOR_ID_FLORIDA_POWER_CORPORATION = 756\nVENDOR_ID_INGRES_CORPORATION = 757\nVENDOR_ID_OPEN_NETWORK_ENTERPRISE = 758\nVENDOR_ID_THE_HOME_DEPOT = 759\nVENDOR_ID_PAN_DACOM_TELEKOMMUNIKATIONS = 760\nVENDOR_ID_NETTEK = 761\nVENDOR_ID_KARLNET_CORP = 762\nVENDOR_ID_EFFICIENT_NETWORKS_INC = 763\nVENDOR_ID_FIBERDATA = 764\nVENDOR_ID_LANSER = 765\nVENDOR_ID_ERICSSON_DENMARK_A_S_TELEBIT_DIVISION = 766\nVENDOR_ID_QOSCOM = 767\nVENDOR_ID_NETWORK_COMPUTING_INC = 768\nVENDOR_ID_WALGREENS_COMPANY = 769\nVENDOR_ID_INTERNET_INITIATIVE_JAPAN_INC = 770\nVENDOR_ID_GP_VAN_NIEKERK_ONDERNEMINGS = 771\nVENDOR_ID_QUEENS_UNIVERSITY_BELFAST = 772\nVENDOR_ID_SECURITIES_INDUSTRY_AUTOMATION_CORPORATION = 773\nVENDOR_ID_SYNAPTICS = 774\nVENDOR_ID_DATA_SWITCH_CORPORATION = 775\nVENDOR_ID_TELINDUS_DISTRIBUTION = 776\nVENDOR_ID_MAXM_SYSTEMS_CORPORATION = 777\nVENDOR_ID_FRAUNHOFER_GESELLSCHAFT = 778\nVENDOR_ID_EQS_BUSINESS_SERVICES = 779\nVENDOR_ID_CNET_TECHNOLOGY_INC = 780\nVENDOR_ID_DATENTECHNIK_GMBH = 781\nVENDOR_ID_NETWORK_SOLUTIONS_LLC = 782\nVENDOR_ID_VIAMAN_SOFTWARE = 783\nVENDOR_ID_SCHWEIZERISCHE_BANKGESELLSCHAFT_ZUERICH = 784\nVENDOR_ID_UNIVERSITY_OF_TWENTE_TIOS = 785\nVENDOR_ID_SIMPLESOFT_INC = 786\nVENDOR_ID_STONY_BROOK_INC = 787\nVENDOR_ID_UNIFIED_SYSTEMS_SOLUTIONS_INC = 788\nVENDOR_ID_NETWORK_APPLIANCE_CORPORATION = 789\nVENDOR_ID_ORNET_DATA_COMMUNICATION_TECHNOLOGIES_LTD = 790\nVENDOR_ID_COMPUTER_ASSOCIATES_INTERNATIONAL = 791\nVENDOR_ID_WIRELESS_INCORPORATED = 792\nVENDOR_ID_NYNEX_SCIENCE_TECHNOLOGY = 793\nVENDOR_ID_COMMERCIAL_LINK_SYSTEMS = 794\nVENDOR_ID_ADAPTEC_INC = 795\nVENDOR_ID_SOFTSWITCH = 796\nVENDOR_ID_LINK_TECHNOLOGIES_INC = 797\nVENDOR_ID_IIS = 798\nVENDOR_ID_MOBILE_SOLUTIONS_INC = 799\nVENDOR_ID_XYLAN_CORP = 800\nVENDOR_ID_AIRTECH_SOFTWARE_FORGE_LIMITED = 801\nVENDOR_ID_NATIONAL_SEMICONDUCTOR = 802\nVENDOR_ID_VIDEO_LOTTERY_TECHNOLOGIES = 803\nVENDOR_ID_NATIONAL_SEMICONDUCTOR_CORP = 804\nVENDOR_ID_APPLICATIONS_MANAGEMENT_CORP = 805\nVENDOR_ID_TRAVELERS_INSURANCE_COMPANY = 806\nVENDOR_ID_TAIWAN_INTERNATIONAL_STANDARD_ELECTRONICS_LTD = 807\nVENDOR_ID_US_PATENT_AND_TRADEMARK_OFFICE_RICK = 808\nVENDOR_ID_HYNET_LTD = 809\nVENDOR_ID_AYDIN_CORP = 810\nVENDOR_ID_ADDTRON_TECHNOLOGY_CO_LTD = 811\nVENDOR_ID_FANNIE_MAE = 812\nVENDOR_ID_MULTINET_SERVICES = 813\nVENDOR_ID_GECKO_MBH = 814\nVENDOR_ID_MEMOREX_TELEX = 815\nVENDOR_ID_ADVANCED_COMMUNICATIONS_NETWORKS_ACN_SA = 816\nVENDOR_ID_TELEKURS_AG = 817\nVENDOR_ID_IMV_VICTRON_BV = 818\nVENDOR_ID_CF6_COMPANY = 819\nVENDOR_ID_WALKER_RICHER_AND_QUINN_INC = 820\nVENDOR_ID_SATURN_SYSTEMS = 821\nVENDOR_ID_MITSUI_MARINE_AND_FIRE_INSURANCE_CO_LTD = 822\nVENDOR_ID_LOOP_TELECOMMUNICATION_INTERNATIONAL_INC = 823\nVENDOR_ID_TELENEX_CORPORATION = 824\nVENDOR_ID_BUS_TECH_INC = 825\nVENDOR_ID_ATRIE = 826\nVENDOR_ID_GALLAGHER_ROBERTSON_A_S = 827\nVENDOR_ID_NETWORKS_NORTHWEST_INC = 828\nVENDOR_ID_CONNER_PERIPHERIALS = 829\nVENDOR_ID_ELF_ANTAR_FRANCE = 830\nVENDOR_ID_LLOYD_INTERNETWORKING = 831\nVENDOR_ID_DATATEC_INDUSTRIES_INC = 832\nVENDOR_ID_TAICOM = 833\nVENDOR_ID_BROWNS_OPERATING_SYSTEM_SERVICES_LTD = 834\nVENDOR_ID_MILAN_TECHNOLOGY_CORP = 835\nVENDOR_ID_NETEDGE_SYSTEMS_INC = 836\nVENDOR_ID_NETFRAME_SYSTEMS = 837\nVENDOR_ID_XEDIA_CORPORATION = 838\nVENDOR_ID_PEPSI = 839\nVENDOR_ID_TRICORD_SYSTEMS_INC = 840\nVENDOR_ID_PROXIM_WIRELESS_INC = 841\nVENDOR_ID_APPLICATIONS_PLUS_INC = 842\nVENDOR_ID_PACIFIC_BELL = 843\nVENDOR_ID_SCORPIO_COMMUNICATIONS = 844\nVENDOR_ID_TPS_TELEPROCESSING_SYSTEMS = 845\nVENDOR_ID_TECHNOLOGY_SOLUTIONS_COMPANY = 846\nVENDOR_ID_COMPUTER_SITE_TECHNOLOGIES = 847\nVENDOR_ID_NETPORT_SOFTWARE = 848\nVENDOR_ID_ALON_SYSTEMS = 849\nVENDOR_ID_TRIPP_LITE = 850\nVENDOR_ID_NETCOMM_LIMITED = 851\nVENDOR_ID_PRECISION_SYSTEMS_INCPSI = 852\nVENDOR_ID_OBJECTIVE_SYSTEMS_INTEGRATORS = 853\nVENDOR_ID_SIMPACT_INC = 854\nVENDOR_ID_SYSTEMS_ENHANCEMENT_CORPORATION = 855\nVENDOR_ID_INFORMATION_INTEGRATION_INC = 856\nVENDOR_ID_CETREL_SC = 857\nVENDOR_ID_PLATINUM_TECHNOLOGY_INC = 858\nVENDOR_ID_OLIVETTI_NORTH_AMERICA = 859\nVENDOR_ID_WILMA = 860\nVENDOR_ID_THOMSON_FINANCIAL = 861\nVENDOR_ID_TOTAL_PERIPHERALS_INC = 862\nVENDOR_ID_SUNNETWORKS_CONSULTANT = 863\nVENDOR_ID_ARKHON_TECHNOLOGIES_INC = 864\nVENDOR_ID_COMPUTER_SCIENCES_CORPORATION = 865\nVENDOR_ID_PHILIPS_COMMUNICATION_DENTREPRISE_CLAUDE_LUBIN = 866\nVENDOR_ID_KATRON_TECHNOLOGIES_INC = 867\nVENDOR_ID_TRANSITION_ENGINEERING_INC = 868\nVENDOR_ID_ALTOS_ENGINEERING_APPLICATIONS_INC = 869\nVENDOR_ID_NICECOM_LTD = 870\nVENDOR_ID_FISKARS_DELTEC = 871\nVENDOR_ID_AVM_GMBH = 872\nVENDOR_ID_COMM_VISION = 873\nVENDOR_ID_INSTITUTE_FOR_INFORMATION_INDUSTRY = 874\nVENDOR_ID_LEGENT_CORPORATION = 875\nVENDOR_ID_NETWORK_AUTOMATION = 876\nVENDOR_ID_EVIEW_TECHNOLOGY = 877\nVENDOR_ID_COMAN_DATA_COMMUNICATIONS_LTD = 878\nVENDOR_ID_SKATTEDIREKTORATET = 879\nVENDOR_ID_CLIENT_SERVER_TECHNOLOGIES = 880\nVENDOR_ID_SOCIETE_INTERNATIONALE_DE_TELECOMMUNICATIONS_AERONAUTIQUES = 881\nVENDOR_ID_MAXIMUM_STRATEGY_INC = 882\nVENDOR_ID_INTEGRATED_SYSTEMS_INC = 883\nVENDOR_ID_E_SYSTEMS = 884\nVENDOR_ID_RELTEC_CORPORATION = 885\nVENDOR_ID_SUMMA_FOUR_INC = 886\nVENDOR_ID_J_L_INFORMATION_SYSTEMS = 887\nVENDOR_ID_FOREST_COMPUTER_INC = 888\nVENDOR_ID_PALINDROME_CORP = 889\nVENDOR_ID_ZYXEL_COMMUNICATIONS_CORP = 890\nVENDOR_ID_NETWORK_MANAGERS_UK_LTD = 891\nVENDOR_ID_SENSIBLE_OFFICE_SYSTEMS_INC = 892\nVENDOR_ID_INFORMIX_SOFTWARE = 893\nVENDOR_ID_DYNATEK_COMMUNICATIONS = 894\nVENDOR_ID_VERSALYNX_CORP = 895\nVENDOR_ID_POTOMAC_SCHEDULING_COMMUNICATIONS_COMPANY = 896\nVENDOR_ID_SYBASE_INC = 897\nVENDOR_ID_DIVICOM_INC = 898\nVENDOR_ID_DATUS_ELEKTRONISCHE_INFORMATIONSSYSTEME_GMBH = 899\nVENDOR_ID_MATROX_ELECTRONIC_SYSTEMS_LIMITED = 900\nVENDOR_ID_DIGITAL_PRODUCTS_INC = 901\nVENDOR_ID_SCITEX_CORPLTD = 902\nVENDOR_ID_RAD_VISION = 903\nVENDOR_ID_TRAN_NETWORK_SYSTEMS = 904\nVENDOR_ID_SCORPION_LOGIC = 905\nVENDOR_ID_INOTECH_INCERIC_JACOBS = 906\nVENDOR_ID_CONTROLLED_POWER_CO = 907\nVENDOR_ID_ABB_INC_FORMERLY_ELSAG_BAILEY_INCORPORATED = 908\nVENDOR_ID_JP_MORGAN = 909\nVENDOR_ID_CLEAR_COMMUNICATIONS_CORP = 910\nVENDOR_ID_GENERAL_TECHNOLOGY_INC = 911\nVENDOR_ID_ADAX_INC = 912\nVENDOR_ID_MTEL_TECHNOLOGIES_INC = 913\nVENDOR_ID_UNDERSCORE_INC = 914\nVENDOR_ID_SERCOMM_CORP = 915\nVENDOR_ID_ALLEGIANCE_CORPORATION = 916\nVENDOR_ID_TELLUS_TECHNOLOGY = 917\nVENDOR_ID_CONTINUOUS_ELECTRON_BEAM_ACCELERATOR_FACILITY = 918\nVENDOR_ID_CANOGA_PERKINS = 919\nVENDOR_ID_RIS_TECHNOLOGIES = 920\nVENDOR_ID_INFONEX_CORP = 921\nVENDOR_ID_WORDPERFECT_CORP = 922\nVENDOR_ID_NRAD = 923\nVENDOR_ID_HONG_KONG_TELECOMMUNICATIONS_LTD = 924\nVENDOR_ID_SIGNATURE_SYSTEMS = 925\nVENDOR_ID_ALPHA_TECHNOLOGIES_INC = 926\nVENDOR_ID_PAIRGAIN_TECHNOLOGIES_INC = 927\nVENDOR_ID_SONIC_SYSTEMS = 928\nVENDOR_ID_STEINBRECHER_CORP = 929\nVENDOR_ID_CENTILLION_NETWORKS_INC = 930\nVENDOR_ID_NETWORK_COMMUNICATION_CORP = 931\nVENDOR_ID_SYSNET_AS = 932\nVENDOR_ID_TELECOMMUNICATION_SYSTEMS_LAB = 933\nVENDOR_ID_QMI = 934\nVENDOR_ID_PHOENIXTEC_POWER_CO_LTD = 935\nVENDOR_ID_HIRAKAWA_HEWTECH_CORP = 936\nVENDOR_ID_NO_WIRES_NEEDED_BV = 937\nVENDOR_ID_PRIMARY_ACCESS = 938\nVENDOR_ID_FD_SOFTWARE_AS = 939\nVENDOR_ID_GAMS_EDV_DIENSTLEISTUNGEN = 940\nVENDOR_ID_NEMESYS_RESEARCH_LTD = 941\nVENDOR_ID_PACIFIC_COMMUNICATION_SCIENCES_INC = 942\nVENDOR_ID_LEVEL_ONE_COMMUNICATIONS_INC = 943\nVENDOR_ID_INTELLIMON_SOFTWARE_LLC = 944\nVENDOR_ID_ACCENTURE_FORMERLY_ANDERSEN_CONSULTING = 945\nVENDOR_ID_BAY_TECHNOLOGIES_PTY_LTD = 946\nVENDOR_ID_INTEGRATED_NETWORK_CORP = 947\nVENDOR_ID_CYBERPRO_INTERNATIONAL = 948\nVENDOR_ID_WANG_LABORATORIES_INC = 949\nVENDOR_ID_POLAROID_CORP = 950\nVENDOR_ID_SUNRISE_SIERRA = 951\nVENDOR_ID_SILCON_GROUP = 952\nVENDOR_ID_COASTCOM = 953\nVENDOR_ID_4TH_DIMENSION_SOFTWARE_LTD = 954\nVENDOR_ID_SEIKO_SYSTEMS_INC = 955\nVENDOR_ID_PERFORM = 956\nVENDOR_ID_TV_COM_INTERNATIONAL = 957\nVENDOR_ID_NETWORK_INTEGRATION_INC = 958\nVENDOR_ID_SOLA_ELECTRIC_A_UNIT_OF_GENERAL_SIGNAL = 959\nVENDOR_ID_GRADIENT_TECHNOLOGIES_INC = 960\nVENDOR_ID_TOKYO_ELECTRIC_CO_LTD = 961\nVENDOR_ID_CODONICS_INC = 962\nVENDOR_ID_DELFT_TECHNICAL_UNIVERSITY = 963\nVENDOR_ID_CARRIER_ACCESS_CORP = 964\nVENDOR_ID_EONCORP = 965\nVENDOR_ID_NAVAL_UNDERSEA_WARFARE_CENTER = 966\nVENDOR_ID_AWA_LIMITED = 967\nVENDOR_ID_DISTINCT_CORP = 968\nVENDOR_ID_NATIONAL_TECHNICAL_UNIVERSITY_OF_ATHENS = 969\nVENDOR_ID_BGS_SYSTEMS_INC = 970\nVENDOR_ID_ATT_WIRELESS_MCCAW_WIRELESS_DATA = 971\nVENDOR_ID_BEKAERT = 972\nVENDOR_ID_EPIC_DATA_INC = 973\nVENDOR_ID_PRODIGY_SERVICES_CO = 974\nVENDOR_ID_FIRST_PACIFIC_NETWORKS_FPN = 975\nVENDOR_ID_XYLINK_LTD = 976\nVENDOR_ID_RELIA_TECHNOLOGIES_CORP = 977\nVENDOR_ID_LEGACY_STORAGE_SYSTEMS_INC = 978\nVENDOR_ID_DIGICOM_SPA = 979\nVENDOR_ID_ARK_TELECOM = 980\nVENDOR_ID_NATIONAL_SECURITY_AGENCY_NSA = 981\nVENDOR_ID_SOUTHWESTERN_BELL_CORPORATION_ATT_FORMERLY_SOUTHWESTERN_BELL_CORPORATION = 982\nVENDOR_ID_VIRTUAL_DESIGN_GROUP_INC = 983\nVENDOR_ID_RHONE_POULENC = 984\nVENDOR_ID_SWISS_BANK_CORPORATION = 985\nVENDOR_ID_ATEA_NV = 986\nVENDOR_ID_COMPUTER_COMMUNICATIONS_SPECIALISTS_INC = 987\nVENDOR_ID_OBJECT_QUEST_INC = 988\nVENDOR_ID_DCL_SYSTEM_INTERNATIONAL_LTD = 989\nVENDOR_ID_SOLITON_SYSTEMS_KK = 990\nVENDOR_ID_U_S_SOFTWARE = 991\nVENDOR_ID_SYSTEMS_RESEARCH_AND_APPLICATIONS_CORPORATION = 992\nVENDOR_ID_UNIVERSITY_OF_FLORIDA = 993\nVENDOR_ID_DANTEL_INC = 994\nVENDOR_ID_MULTI_TECH_SYSTEMS_INC = 995\nVENDOR_ID_SOFTLINK_LTD = 996\nVENDOR_ID_PROSUM = 997\nVENDOR_ID_MARCH_SYSTEMS_CONSULTANCY_LTD = 998\nVENDOR_ID_HONG_TECHNOLOGY_INC = 999\nVENDOR_ID_INTERNET_ASSIGNED_NUMBERS_AUTHORITY = 1000\nVENDOR_ID_PECO_ENERGY_CO = 1001\nVENDOR_ID_UNITED_PARCEL_SERVICE = 1002\nVENDOR_ID_STORAGE_DIMENSIONS_INC = 1003\nVENDOR_ID_ITV_TECHNOLOGIES_INC = 1004\nVENDOR_ID_TCPSI = 1005\nVENDOR_ID_PROMPTUS_COMMUNICATIONS_INC = 1006\nVENDOR_ID_NORMAN_DATA_DEFENSE_SYSTEMS = 1007\nVENDOR_ID_PILOT_NETWORK_SERVICES_INC = 1008\nVENDOR_ID_INTEGRATED_SYSTEMS_SOLUTIONS_CORPORATION = 1009\nVENDOR_ID_SISRO = 1010\nVENDOR_ID_NETVANTAGE = 1011\nVENDOR_ID_MARCONI = 1012\nVENDOR_ID_SURECOM = 1013\nVENDOR_ID_ROYAL_HONG_KONG_JOCKEY_CLUB = 1014\nVENDOR_ID_GUPTA = 1015\nVENDOR_ID_TONE_SOFTWARE_CORPORATION = 1016\nVENDOR_ID_OPUS_TELECOM = 1017\nVENDOR_ID_COGSYS_LTD = 1018\nVENDOR_ID_KOMATSU_LTD = 1019\nVENDOR_ID_ROI_SYSTEMS_INC = 1020\nVENDOR_ID_LIGHTNING_INSTRUMENTATION_SA = 1021\nVENDOR_ID_TIMESTEP_CORP = 1022\nVENDOR_ID_INTELSAT = 1023\nVENDOR_ID_NETWORK_RESEARCH_CORPORATION_JAPAN_LTD = 1024\nVENDOR_ID_RELATIONAL_DEVELOPMENT_INC = 1025\nVENDOR_ID_EMERALD_SYSTEMS_CORP = 1026\nVENDOR_ID_MITEL_CORP = 1027\nVENDOR_ID_SOFTWARE_AG = 1028\nVENDOR_ID_MILLENNET_INC = 1029\nVENDOR_ID_NK_EXA_CORP = 1030\nVENDOR_ID_BMC_SOFTWARE_2 = 1031\nVENDOR_ID_STARFIRE_ENTERPRISES_INC = 1032\nVENDOR_ID_HYBRID_NETWORKS_INC = 1033\nVENDOR_ID_QUANTUM_SOFTWARE_GMBH = 1034\nVENDOR_ID_OPENVISION_TECHNOLOGIES_LIMITED = 1035\nVENDOR_ID_HEALTHCARE_COMMUNICATIONS_INCHCI = 1036\nVENDOR_ID_SAIT_SYSTEMS = 1037\nVENDOR_ID_SAGEMCOM_SAS = 1038\nVENDOR_ID_COMPUSCI_INC = 1039\nVENDOR_ID_AIM_TECHNOLOGY = 1040\nVENDOR_ID_CIESIN = 1041\nVENDOR_ID_SYSTEMS_TECHNOLOGIES_INTERNATIONAL = 1042\nVENDOR_ID_ISRAELI_ELECTRIC_COMPANY_IEC_YORAM_HARLEV = 1043\nVENDOR_ID_PHOENIX_WIRELESS_GROUP_INC = 1044\nVENDOR_ID_SWL = 1045\nVENDOR_ID_NCUBE = 1046\nVENDOR_ID_CERNER_CORP = 1047\nVENDOR_ID_ANDERSEN_CONSULTING = 1048\nVENDOR_ID_WINDSTREAM_COMMUNICATIONS = 1049\nVENDOR_ID_ACER = 1050\nVENDOR_ID_CEDROS = 1051\nVENDOR_ID_AIRACCESS = 1052\nVENDOR_ID_EXPERSOFT_CORPORATION = 1053\nVENDOR_ID_ESKOM = 1054\nVENDOR_ID_SBE_INC = 1055\nVENDOR_ID_SS8 = 1056\nVENDOR_ID_AMERICAN_COMPUTER_AND_ELECTRONICS_CORP = 1057\nVENDOR_ID_SYNDESIS_LIMITED = 1058\nVENDOR_ID_ISIS_DISTRIBUTED_SYSTEMS_INC = 1059\nVENDOR_ID_PRIORITY_CALL_MANAGEMENT = 1060\nVENDOR_ID_KOELSCH_ALTMANN_GMBH = 1061\nVENDOR_ID_WIPRO_INFOTECH_LTD = 1062\nVENDOR_ID_CONTROLWARE = 1063\nVENDOR_ID_MOSAIC_SOFTWARE = 1064\nVENDOR_ID_CANON_INFORMATION_SYSTEMS = 1065\nVENDOR_ID_AOL_INC = 1066\nVENDOR_ID_WHITETREE_NETWORK_TECHNOLOGIES_INC = 1067\nVENDOR_ID_NORTHROP_GRUMMAN_XETRON = 1068\nVENDOR_ID_TARGET_CONCEPTS_INC = 1069\nVENDOR_ID_DMH_SOFTWARE = 1070\nVENDOR_ID_INNOSOFT_INTERNATIONAL_INC = 1071\nVENDOR_ID_CONTROLWARE_GMBH = 1072\nVENDOR_ID_TELECOMMUNICATIONS_INDUSTRY_ASSOCIATION_TIA_MIKE = 1073\nVENDOR_ID_BOOLE_BABBAGE = 1074\nVENDOR_ID_SYSTEM_ENGINEERING_SUPPORT_LTD = 1075\nVENDOR_ID_SURFNET = 1076\nVENDOR_ID_OPENCONNECT_SYSTEMS_INC = 1077\nVENDOR_ID_PDTS_PROCESS_DATA_TECHNOLOGY_AND_SYSTEMS = 1078\nVENDOR_ID_CORNET_INC = 1079\nVENDOR_ID_NETSTAR_INC = 1080\nVENDOR_ID_SEMAPHORE_COMMUNICATIONS_CORP = 1081\nVENDOR_ID_CASIO_COMPUTER_CO_LTD = 1082\nVENDOR_ID_CSIR = 1083\nVENDOR_ID_APOGEE_COMMUNICATIONS = 1084\nVENDOR_ID_INFORMATION_MANAGEMENT_COMPANY = 1085\nVENDOR_ID_WORDLINK_INC = 1086\nVENDOR_ID_PEER = 1087\nVENDOR_ID_TELSTRA_CORP = 1088\nVENDOR_ID_NET_X_INC = 1089\nVENDOR_ID_PNC_PLC = 1090\nVENDOR_ID_DANASOFT_INC = 1091\nVENDOR_ID_YOKOGAWA_HEWLETT_PACKARD = 1092\nVENDOR_ID_CITEM = 1093\nVENDOR_ID_LINK_TELECOM_LTD = 1094\nVENDOR_ID_XIRION_BV = 1095\nVENDOR_ID_CENTIGRAM_COMMUNICATIONS_CORP = 1096\nVENDOR_ID_GENSYM_CORP = 1097\nVENDOR_ID_APRICOT_COMPUTERS_LTD = 1098\nVENDOR_ID_CANAL = 1099\nVENDOR_ID_CAMBRIDGE_TECHNOLOGY_PARTNERS = 1100\nVENDOR_ID_MONET_SYSTEMS_INC = 1101\nVENDOR_ID_METRICOM_INC = 1102\nVENDOR_ID_XACT_INC = 1103\nVENDOR_ID_BRAVE_SOFTWARE_INC = 1104\nVENDOR_ID_NETCELL_SYSTEMS_INC = 1105\nVENDOR_ID_UNI_QLENNART_NORLANDERLENNARTNORLANDERUNIQSE = 1106\nVENDOR_ID_DISA_SPACE_SYSTEMS_DEVELOPMENT_DIVISION = 1107\nVENDOR_ID_INTERSOLV = 1108\nVENDOR_ID_VELA_RESEARCH_INC = 1109\nVENDOR_ID_TETHERLESS_ACCESS_INC = 1110\nVENDOR_ID_MAGISTRAT_WIEN_AT = 1111\nVENDOR_ID_FRANKLIN_TELECOM_INC = 1112\nVENDOR_ID_EDA_INSTRUMENTS_INC = 1113\nVENDOR_ID_EFI_ELECTRONICS_CORPORATION = 1114\nVENDOR_ID_GMD = 1115\nVENDOR_ID_VOICETEK_CORP = 1116\nVENDOR_ID_AVANTI_TECHNOLOGY_INC = 1117\nVENDOR_ID_ATLAN_LTD = 1118\nVENDOR_ID_LEHMAN_BROTHERS = 1119\nVENDOR_ID_LAN_HOPPER_SYSTEMS_INC = 1120\nVENDOR_ID_WEB_SYSTEMS = 1121\nVENDOR_ID_PILLER_GMBH = 1122\nVENDOR_ID_ENGENIO_INFORMATION_TECHNOLOGIES_INC = 1123\nVENDOR_ID_NETSPAN_CORP = 1124\nVENDOR_ID_NIELSEN_MEDIA_RESEARCH = 1125\nVENDOR_ID_STERLING_SOFTWARE = 1126\nVENDOR_ID_APPLIED_NETWORK_TECHNOLOGY_INC = 1127\nVENDOR_ID_UNION_PACIFIC_RAILROAD = 1128\nVENDOR_ID_TEC_CORPORATION = 1129\nVENDOR_ID_DATAMETRICS_SYSTEMS_CORPORATION_KARL_S = 1130\nVENDOR_ID_INTERSECTION_DEVELOPMENT_CORPORATION_MICHAEL = 1131\nVENDOR_ID_BACS_LIMITED_GB = 1132\nVENDOR_ID_ENGAGE_COMMUNICATION = 1133\nVENDOR_ID_FASTWARE_SA = 1134\nVENDOR_ID_LONGSHINE_ELECTRONICS_CORP = 1135\nVENDOR_ID_BOW_NETWORKS_INC = 1136\nVENDOR_ID_EMOTION_INC = 1137\nVENDOR_ID_RAUTARUUKKI_STEEL_FACTORY_INFORMATION_SYSTEMS = 1138\nVENDOR_ID_EMC_CORP = 1139\nVENDOR_ID_UNIVERSITY_OF_WEST_ENGLAND = 1140\nVENDOR_ID_COM21 = 1141\nVENDOR_ID_COMPRESSION_TEHNOLOGIES_INC = 1142\nVENDOR_ID_BUSLOGIC_INC = 1143\nVENDOR_ID_FIREFOX_CORPORATION = 1144\nVENDOR_ID_MERCURY_COMMUNICATIONS_LTD = 1145\nVENDOR_ID_COMPUTER_PROTOCOL_MALAYSIA_SDN_BHD = 1146\nVENDOR_ID_INSTITUTE_FOR_INFORMATION_INDUSTRY_2 = 1147\nVENDOR_ID_PACIFIC_ELECTRIC_WIRE_CABLE_CO_LTD = 1148\nVENDOR_ID_MPR_TELTECH_LTD = 1149\nVENDOR_ID_P_COM_INC = 1150\nVENDOR_ID_ANRITSU_CORPORATION = 1151\nVENDOR_ID_SPYRUS = 1152\nVENDOR_ID_NETPOWER_INC = 1153\nVENDOR_ID_DIEHL_ISDN_GMBH = 1154\nVENDOR_ID_CARNET = 1155\nVENDOR_ID_AS_TECH = 1156\nVENDOR_ID_SG2_INNOVATION_ET_PRODUITS = 1157\nVENDOR_ID_CELLACCESS_TECHNOLOGY_INC = 1158\nVENDOR_ID_BUREAU_OF_METEOROLOGY = 1159\nVENDOR_ID_ELTRAX = 1160\nVENDOR_ID_THAMES_WATER_UTILITIES_LIMITED = 1161\nVENDOR_ID_MICROPOLIS_CORP = 1162\nVENDOR_ID_INTEGRATED_SYSTEMS_TECHNOLOGY = 1163\nVENDOR_ID_BRITE_VOICE_SYSTEMS_INC = 1164\nVENDOR_ID_ASSOCIATED_GROCER = 1165\nVENDOR_ID_GENERAL_INSTRUMENT = 1166\nVENDOR_ID_STANFORD_TELECOM = 1167\nVENDOR_ID_ICOM_INFORMATIQUE = 1168\nVENDOR_ID_MPX_DATA_SYSTEMS_INC = 1169\nVENDOR_ID_SYNTELLECT = 1170\nVENDOR_ID_POLYHEDRA_LTD_FORMERLY_PERIHELION_TECHNOLOGY_LTD = 1171\nVENDOR_ID_SHOPPERS_DRUG_MART = 1172\nVENDOR_ID_APOLLO_TRAVEL_SERVICES_JUDITH_WILLIAMS_MURPHY = 1173\nVENDOR_ID_TIME_WARNER_CABLE_INC = 1174\nVENDOR_ID_AMERICAN_TECHNOLOGY_LABS_INC = 1175\nVENDOR_ID_DOW_JONES_COMPANY_INC = 1176\nVENDOR_ID_FRA = 1177\nVENDOR_ID_EQUITABLE_LIFE_ASSURANCE_SOCIETY = 1178\nVENDOR_ID_SMITH_BARNEY_INC = 1179\nVENDOR_ID_COMPACT_DATA_LTD = 1180\nVENDOR_ID_INET_COMMUNICATIONS = 1181\nVENDOR_ID_YAMAHA_CORPORATION = 1182\nVENDOR_ID_ILLINOIS_STATE_UNIVERSITY = 1183\nVENDOR_ID_RADGUARD_LTD = 1184\nVENDOR_ID_CALYPSO_SOFTWARE_SYSTEMS_INC = 1185\nVENDOR_ID_ACT_NETWORKS_INC = 1186\nVENDOR_ID_KINGSTON_COMMUNICATIONS = 1187\nVENDOR_ID_INCITE = 1188\nVENDOR_ID_VVNET_INC = 1189\nVENDOR_ID_ONTARIO_HYDRO = 1190\nVENDOR_ID_CS_TELECOM = 1191\nVENDOR_ID_ICTV = 1192\nVENDOR_ID_CORE_INTERNATIONAL_INC = 1193\nVENDOR_ID_MIBS4YOU = 1194\nVENDOR_ID_ITK = 1195\nVENDOR_ID_NETWORK_INTEGRITY_INC = 1196\nVENDOR_ID_BLUELINE_SOFTWARE_INC = 1197\nVENDOR_ID_MIGRANT_COMPUTING_SERVICESINC = 1198\nVENDOR_ID_LINKLATERS_PAINES = 1199\nVENDOR_ID_EJV_PARTNERS_LP = 1200\nVENDOR_ID_GUARDEONIC_SOLUTIONS_LTD = 1201\nVENDOR_ID_VARCOM_CORPORATION = 1202\nVENDOR_ID_EQUITEL = 1203\nVENDOR_ID_THE_SOUTHERN_COMPANY = 1204\nVENDOR_ID_DATAPRODUCTS_CORPORATION = 1205\nVENDOR_ID_NATIONAL_ELECTRICAL_MANUFACTURERS_ASSOCIATION_NEMA = 1206\nVENDOR_ID_RISCMANAGEMENT_INC = 1207\nVENDOR_ID_GVC_CORPORATION = 1208\nVENDOR_ID_TIMONWARE_INC = 1209\nVENDOR_ID_CAPITAL_RESOURCES_COMPUTER_CORPORATION = 1210\nVENDOR_ID_STORAGE_TECHNOLOGY_CORPORATION = 1211\nVENDOR_ID_TADIRAN_TELECOM_TTL = 1212\nVENDOR_ID_NCP = 1213\nVENDOR_ID_OPERATIONS_CONTROL_SYSTEMS_OCS = 1214\nVENDOR_ID_THE_NASDAQ_STOCK_MARKET_INC = 1215\nVENDOR_ID_TIERNAN_COMMUNICATIONS_INC = 1216\nVENDOR_ID_GOLDMAN_SACHS_COMPANY = 1217\nVENDOR_ID_ADVANCED_TELECOMMUNICATIONS_MODULES_LTD = 1218\nVENDOR_ID_PHOENIX_DATA_COMMUNICATIONS = 1219\nVENDOR_ID_QUALITY_CONSULTING_SERVICES = 1220\nVENDOR_ID_MILAN = 1221\nVENDOR_ID_INSTRUMENTAL_INC = 1222\nVENDOR_ID_YELLOW_TECHNOLOGY_SERVICES_INC = 1223\nVENDOR_ID_MIER_COMMUNICATIONS_INC = 1224\nVENDOR_ID_CABLE_SERVICES_GROUP_INC = 1225\nVENDOR_ID_FORTE_NETWORKS_INC = 1226\nVENDOR_ID_AMERICAN_MANAGEMENT_SYSTEMS_INC = 1227\nVENDOR_ID_CHOICE_HOTELS_INTL = 1228\nVENDOR_ID_SEH_COMPUTERTECHNIK_GM_RAINER_ELLERBRAKE = 1229\nVENDOR_ID_MCAFEE_ASSOCIATES_INC = 1230\nVENDOR_ID_NETWORK_INTELLIGENT_INC = 1231\nVENDOR_ID_LUXCOM_TECHNOLOGIES_INC = 1232\nVENDOR_ID_ITRON_INC = 1233\nVENDOR_ID_LINKAGE_SOFTWARE_INC = 1234\nVENDOR_ID_SPARDAT_AG = 1235\nVENDOR_ID_VERIFONE_INC = 1236\nVENDOR_ID_REVCO_DS_INC = 1237\nVENDOR_ID_HRB_SYSTEMS_INC = 1238\nVENDOR_ID_LITTON_FIBERCOM = 1239\nVENDOR_ID_SILEX_TECHNOLOGY_AMERICA_INC_FORMERLY_XCD_INCORPORATED = 1240\nVENDOR_ID_PROSJEKTLEVERANSER_AS = 1241\nVENDOR_ID_HALCYON_INC = 1242\nVENDOR_ID_SBB = 1243\nVENDOR_ID_LEUTEK = 1244\nVENDOR_ID_ZEITNET_INC = 1245\nVENDOR_ID_VISUAL_NETWORKS_INC = 1246\nVENDOR_ID_CORONET_SYSTEMS = 1247\nVENDOR_ID_SEIKO_EPSON_CORPORATION = 1248\nVENDOR_ID_DNH_TECHNOLOGIES = 1249\nVENDOR_ID_DELUXE_DATA = 1250\nVENDOR_ID_MICHAEL_A_OKULSKI_INC = 1251\nVENDOR_ID_SABER_SOFTWARE_CORPORATION = 1252\nVENDOR_ID_MISSION_SYSTEMS_INC = 1253\nVENDOR_ID_SIEMENS_PLESSEY_ELECTRONICS_SYSTEMS = 1254\nVENDOR_ID_APPLIED_COMMUNICATIONS_INC = 1255\nVENDOR_ID_TRANSACTION_TECHNOLOGY_INC = 1256\nVENDOR_ID_HST_LTD = 1257\nVENDOR_ID_MICHIGAN_TECHNOLOGICAL_UNIVERSITY_ONWUKA = 1258\nVENDOR_ID_NEXT_LEVEL_COMMUNICATIONS = 1259\nVENDOR_ID_INSTINET_CORP = 1260\nVENDOR_ID_ANALOG_DIGITAL_SYSTEMS_LTD = 1261\nVENDOR_ID_ANSALDO_TRASPORTI_SPA = 1262\nVENDOR_ID_ECCI = 1263\nVENDOR_ID_IMATEK_CORPORATION = 1264\nVENDOR_ID_PTT_TELECOM_BV = 1265\nVENDOR_ID_DATA_RACE_INC = 1266\nVENDOR_ID_NETWORK_SAFETY_GROUP_INC = 1267\nVENDOR_ID_APPLICATION_DES_TECHNIQUES_NOUVELLES_EN_ELECTRONIQUE = 1268\nVENDOR_ID_MFS_COMMUNICATIONS_COMPANY = 1269\nVENDOR_ID_INFORMATION_SERVICES_DIVISION = 1270\nVENDOR_ID_CIENA_CORPORATION = 1271\nVENDOR_ID_FUJITSU_NEXION = 1272\nVENDOR_ID_STANDARD_NETWORKS_INC = 1273\nVENDOR_ID_SCIENTIFIC_RESEARCH_CORPORATION = 1274\nVENDOR_ID_MICADO_SOFTWARECONSULT_GMBH = 1275\nVENDOR_ID_CONCERT_MANAGEMENT_SERVICES_INC = 1276\nVENDOR_ID_UNIVERSITY_OF_DELAWARE = 1277\nVENDOR_ID_BIAS_CONSULTANCY_LTD = 1278\nVENDOR_ID_MICROMUSE_INC = 1279\nVENDOR_ID_TRANSLINK_SYSTEMS = 1280\nVENDOR_ID_PI_NET = 1281\nVENDOR_ID_AMBER_WAVE_SYSTEMS = 1282\nVENDOR_ID_SUPERIOR_ELECTRONICS_GROUP_INC = 1283\nVENDOR_ID_NETWORK_TELEMETRICS_INC = 1284\nVENDOR_ID_BSW_DATA = 1285\nVENDOR_ID_ECI_TELECOM_LTD = 1286\nVENDOR_ID_BROADVISION = 1287\nVENDOR_ID_ALFA_INC = 1288\nVENDOR_ID_TELEFONICA_SISTEMAS_SA = 1289\nVENDOR_ID_IMAGE_SCIENCES_INC = 1290\nVENDOR_ID_MITSUBISHI_ELECTRIC_INFORMATION_NETWORK_CORPORATION_MIND = 1291\nVENDOR_ID_CENTRAL_FLOW_MANAGEMENT_UNIT = 1292\nVENDOR_ID_WOODS_HOLE_OCEANOGRAPHIC_INSTITUTION = 1293\nVENDOR_ID_RAPTOR_SYSTEMS_INC = 1294\nVENDOR_ID_TELELINK_TECHNOLOGIES_INC = 1295\nVENDOR_ID_FIRST_VIRTUAL_CORPORATION = 1296\nVENDOR_ID_NETWORK_SERVICES_GROUP = 1297\nVENDOR_ID_SILCOM_MANUFACTURING_TECHNOLOGY_INC = 1298\nVENDOR_ID_NETSOFT_INC = 1299\nVENDOR_ID_FIDELITY_INVESTMENTS = 1300\nVENDOR_ID_TELRAD_TELECOMMUNICATIONS = 1301\nVENDOR_ID_VERITAS_SOFTWARE_CORP = 1302\nVENDOR_ID_LEEMAH_DATACOM_SECURITY_CORPORATION = 1303\nVENDOR_ID_RACEMI_INC = 1304\nVENDOR_ID_USAIR_INC = 1305\nVENDOR_ID_JET_PROPULSION_LABORATORY = 1306\nVENDOR_ID_ABIT_CO = 1307\nVENDOR_ID_DATAPLEX_PTY_LTD = 1308\nVENDOR_ID_CREATIVE_INTERACTION_TECHNOLOGIES_INC = 1309\nVENDOR_ID_AIMNET_SOLUTIONS = 1310\nVENDOR_ID_UNASSIGNED_2 = 1311\nVENDOR_ID_KLOS_TECHNOLOGIES_INC = 1312\nVENDOR_ID_ACOTEC = 1313\nVENDOR_ID_DATACOMM_MANAGEMENT_SCIENCES_INC = 1314\nVENDOR_ID_MG_SOFT_DOO = 1315\nVENDOR_ID_PLESSEY_TELLUMAT_SA = 1316\nVENDOR_ID_PAINEWEBBER_INC = 1317\nVENDOR_ID_DATASYS_LTD = 1318\nVENDOR_ID_QVC_INC = 1319\nVENDOR_ID_IPL_SYSTEMS = 1320\nVENDOR_ID_PACIFIC_MICRO_DATA_INC = 1321\nVENDOR_ID_DESKNET_SYSTEMS_INC = 1322\nVENDOR_ID_TC_TECHNOLOGIES = 1323\nVENDOR_ID_RACOTEK_INC = 1324\nVENDOR_ID_CELSIUSTECH_AB = 1325\nVENDOR_ID_XING_TECHNOLOGY_CORP = 1326\nVENDOR_ID_DZINE_NV = 1327\nVENDOR_ID_ELECTRONIC_MERCHANT_SERVICES_INC = 1328\nVENDOR_ID_LINMOR_INFORMATION_SYSTEMS_MANAGEMENT_INC = 1329\nVENDOR_ID_ABL_CANADA_INC = 1330\nVENDOR_ID_UNIVERSITY_OF_COIMBRA = 1331\nVENDOR_ID_ISKRATEL_LTD_TELECOMMUNICATIONS_SYSTEMS = 1332\nVENDOR_ID_ISA_COLTD = 1333\nVENDOR_ID_CONNECT_INC = 1334\nVENDOR_ID_DIGITAL_VIDEO = 1335\nVENDOR_ID_INTERVOICE_INC = 1336\nVENDOR_ID_LIVEWARE_TECNOLOGIA_A_SERVICO_A_LTDA = 1337\nVENDOR_ID_PRECEPT_SOFTWARE_INC = 1338\nVENDOR_ID_HEROIX_CORPORATION = 1339\nVENDOR_ID_HOLLAND_HOUSE_BV = 1340\nVENDOR_ID_DEDALUS_ENGENHARIA_S_C_LTDA = 1341\nVENDOR_ID_GEC_ALSTHOM_IT = 1342\nVENDOR_ID_DEUTSCHES_ELEKTRONEN_SYNCHROTRON = 1343\nVENDOR_ID_AVOTUS_CORPORATION = 1344\nVENDOR_ID_DACOLL_LTD = 1345\nVENDOR_ID_NETCORP_INC = 1346\nVENDOR_ID_KYOCERA_CORPORATION = 1347\nVENDOR_ID_THE_LONGABERGER_COMPANY = 1348\nVENDOR_ID_ILEX = 1349\nVENDOR_ID_CONSERVATION_THROUGH_INNOVATION_LIMITED = 1350\nVENDOR_ID_SEEBEYOND_TECHNOLOGY_CORPORATION = 1351\nVENDOR_ID_MULTEX_SYSTEMS_INC = 1352\nVENDOR_ID_GAMBIT_COMMUNICATIONS_INC = 1353\nVENDOR_ID_CENTRAL_DATA_CORPORATION = 1354\nVENDOR_ID_COMPUCOM_SYSTEMS_INC = 1355\nVENDOR_ID_GENEREX_SYSTEMS_GMBH = 1356\nVENDOR_ID_PERIPHONICS_CORPORATION = 1357\nVENDOR_ID_FREDDIE_MAC = 1358\nVENDOR_ID_DIGITAL_EQUIPMENT_BV = 1359\nVENDOR_ID_PHONELINK_PLC = 1360\nVENDOR_ID_VOICE_TEL_ENTERPRISES_INC = 1361\nVENDOR_ID_AUDILOG = 1362\nVENDOR_ID_SANREX_CORPORATION = 1363\nVENDOR_ID_CHLORIDE = 1364\nVENDOR_ID_GA_SYSTEMS_LTD = 1365\nVENDOR_ID_MICRODYNE_CORPORATION = 1366\nVENDOR_ID_BOSTON_COLLEGE = 1367\nVENDOR_ID_FRANCE_TELECOM = 1368\nVENDOR_ID_STONESOFT_CORP = 1369\nVENDOR_ID_A_G_EDWARDS_SONS_INC = 1370\nVENDOR_ID_ATTACHMATE_CORP = 1371\nVENDOR_ID_LSI_LOGIC = 1372\nVENDOR_ID_INTERWAVE_COMMUNICATIONS_INC = 1373\nVENDOR_ID_MDL_CONSULT = 1374\nVENDOR_ID_FROBBIT_AB_FORMERLY_FIRMA_PAF = 1375\nVENDOR_ID_NASHOBA_NETWORKS_INC = 1376\nVENDOR_ID_COMEDIA_INFORMATION_AB = 1377\nVENDOR_ID_HARVEY_MUDD_COLLEGE = 1378\nVENDOR_ID_FIRST_NATIONAL_BANK_OF_CHICAGO = 1379\nVENDOR_ID_DEPARTMENT_OF_NATIONAL_DEFENCE_CANADA = 1380\nVENDOR_ID_CBM_TECHNOLOGIES_INC = 1381\nVENDOR_ID_INTERPROC_INC = 1382\nVENDOR_ID_GLENAYRE_RD_INC = 1383\nVENDOR_ID_TELENET_GMBH_KOMMUNIKATIONSSYSTEME = 1384\nVENDOR_ID_SOFTLAB_GMBH = 1385\nVENDOR_ID_STORAGE_COMPUTER_CORPORATION = 1386\nVENDOR_ID_CELLSTACK_SYSTEMS_LTD = 1387\nVENDOR_ID_VIEWGATE_NETWORKS = 1388\nVENDOR_ID_SIMPLE_NETWORK_MAGIC_CORPORATION = 1389\nVENDOR_ID_STALLION_TECHNOLOGIES_PTY_LTD = 1390\nVENDOR_ID_LOAN_SYSTEM = 1391\nVENDOR_ID_DLR_DEUTSCHE_FORSCHUNGSANSTALT_FUER_LUFT_UND_RAUMFAHRT_EV = 1392\nVENDOR_ID_ICRA_INC = 1393\nVENDOR_ID_PROBITA = 1394\nVENDOR_ID_NEXOR_LTD = 1395\nVENDOR_ID_AMERICAN_INTERNATION_FACSIMILE_PRODUCTS = 1396\nVENDOR_ID_TELLABS = 1397\nVENDOR_ID_DATAX = 1398\nVENDOR_ID_INTELLISYS_CORPORATION = 1399\nVENDOR_ID_SANDIA_NATIONAL_LABORATORIES = 1400\nVENDOR_ID_SYNERDYNE_CORP = 1401\nVENDOR_ID_UNICOM_ELECTRIC_INC = 1402\nVENDOR_ID_CENTRAL_DESIGN_SYSTEMS_INC = 1403\nVENDOR_ID_THE_SILK_ROAD_GROUP_LTD = 1404\nVENDOR_ID_POSITIVE_COMPUTING_CONCEPTS = 1405\nVENDOR_ID_FIRST_DATA_RESOURCES = 1406\nVENDOR_ID_INETCO_SYSTEMS_LIMITED = 1407\nVENDOR_ID_NTT_MOBILE_COMMUNICATIONS_NETWORK_INC = 1408\nVENDOR_ID_TARGET_STORES = 1409\nVENDOR_ID_ADVANCED_PERIPHERALS_TECHNOLOGIES_INC = 1410\nVENDOR_ID_JUNIPER_NETWORKS_FUNK_SOFTWARE = 1411\nVENDOR_ID_DUNSGATE_A_DUN_AND_BRADSTREET_COMPANY = 1412\nVENDOR_ID_AFP = 1413\nVENDOR_ID_VERTEXRSI_CONTROLS_AND_STRUCTURES = 1414\nVENDOR_ID_THE_WILLIAMS_COMPANIES_INC = 1415\nVENDOR_ID_ASP_TECHNOLOGIES_INC = 1416\nVENDOR_ID_PHILIPS_COMMUNICATION_SYSTEMS = 1417\nVENDOR_ID_DATAPROBE_INC = 1418\nVENDOR_ID_ASTROCOM_CORP = 1419\nVENDOR_ID_CSTICOMMUNICATION_SYSTEMS_TECHNOLOGY_INC = 1420\nVENDOR_ID_SPRINT = 1421\nVENDOR_ID_SYNTAX = 1422\nVENDOR_ID_LIGHT_INFOCON = 1423\nVENDOR_ID_PERFORMANCE_TECHNOLOGY_INC = 1424\nVENDOR_ID_CXR = 1425\nVENDOR_ID_AMIR_TECHNOLOGY_LABS = 1426\nVENDOR_ID_ISOCOR = 1427\nVENDOR_ID_ARRAY_TECHNOLOGY_CORPORTION = 1428\nVENDOR_ID_SCIENTIFIC_ATLANTA_INC = 1429\nVENDOR_ID_GAMMATECH_INC = 1430\nVENDOR_ID_TELKOM_SA_LIMITED = 1431\nVENDOR_ID_CIREL_SYSTEMES = 1432\nVENDOR_ID_REDFLEX_LIMITED_AUSTRALIA = 1433\nVENDOR_ID_HERMES_ENTERPRISE_MESSAGING_LTD = 1434\nVENDOR_ID_ACACIA_NETWORKS_INC = 1435\nVENDOR_ID_NATIONAL_AUSTRALIA_BANK_LTD = 1436\nVENDOR_ID_SINETEC_TECHNOLOGY_COLTD = 1437\nVENDOR_ID_APPLIED_INNOVATION_INC = 1438\nVENDOR_ID_ARIZONA_STATE_UNIVERSITY = 1439\nVENDOR_ID_XIONICS_DOCUMENT_TECHNOLOGIES_INC = 1440\nVENDOR_ID_SOUTHERN_INFORMATION_SYSTEM_INC = 1441\nVENDOR_ID_NEBULA_CONSULTANTS_INC = 1442\nVENDOR_ID_SITRE_SA = 1443\nVENDOR_ID_PARADIGM_TECHNOLOGY_LTD = 1444\nVENDOR_ID_TELUB_AB = 1445\nVENDOR_ID_VIRGINIA_POLYTECHNIC_INSTITUTE_AND_STATE_UNIVERSITY = 1446\nVENDOR_ID_MARTIS_OY = 1447\nVENDOR_ID_ISKRA_TRANSMISSION = 1448\nVENDOR_ID_QUALCOMM_INCORPORATED = 1449\nVENDOR_ID_AOL_NETSCAPE_COMMUNICATIONS_CORP = 1450\nVENDOR_ID_BELLSOUTH_WIRELESS_INC = 1451\nVENDOR_ID_NUKO_INFORMATION_SYSTEMS_INC = 1452\nVENDOR_ID_IPC_INFORMATION_SYSTEMS_INC = 1453\nVENDOR_ID_ESTUDIOS_Y_PROYECTOS_DE_TELECOMUNICACION_SA = 1454\nVENDOR_ID_WINSTAR_WIRELESS = 1455\nVENDOR_ID_TERAYON_CORP = 1456\nVENDOR_ID_CYBERGUARD_CORPORATIONDAVID_RHEIN = 1457\nVENDOR_ID_AMCC = 1458\nVENDOR_ID_JUPITER_TECHNOLOGY_INC = 1459\nVENDOR_ID_DELPHI_INTERNET_SERVICES = 1460\nVENDOR_ID_KESMAI_CORPORATION = 1461\nVENDOR_ID_COMPACT_DEVICES_INC = 1462\nVENDOR_ID_OPTIQUEST = 1463\nVENDOR_ID_LORAL_DEFENSE_SYSTEMS_EAGAN = 1464\nVENDOR_ID_ONRAMP_TECHNOLOGIES = 1465\nVENDOR_ID_MARK_WAHL = 1466\nVENDOR_ID_LORAN_INTERNATIONAL_TECHNOLOGIES_INC = 1467\nVENDOR_ID_S_S_INTERNATIONAL_PLC = 1468\nVENDOR_ID_ATLANTECH_TECHNOLOGIES_LTD = 1469\nVENDOR_ID_IN_SNEC = 1470\nVENDOR_ID_MELITA_INTERNATIONAL_CORPORATION = 1471\nVENDOR_ID_SHARP_LABORATORIES_OF_AMERICA = 1472\nVENDOR_ID_GROUPE_DECAN = 1473\nVENDOR_ID_SPECTRONICS_MICRO_SYSTEMS_LIMITED = 1474\nVENDOR_ID_VARETIS_COMMUNICATIONS_GMBH = 1475\nVENDOR_ID_ION_NETWORKS_INC = 1476\nVENDOR_ID_TELEGATE_GLOBALACCESS_TECHNOLOGY_LTD = 1477\nVENDOR_ID_MERRILL_LYNCH_CO_INC = 1478\nVENDOR_ID_JCPENNEY_CO_INC = 1479\nVENDOR_ID_THE_TORRINGTON_COMPANY = 1480\nVENDOR_ID_GS_PROACTIVE = 1481\nVENDOR_ID_BARCONET = 1482\nVENDOR_ID_VORTEX_COMPUTERSYSTEME_GMBH = 1483\nVENDOR_ID_DATAFUSION_SYSTEMS_PTY_LTD = 1484\nVENDOR_ID_ALLEN_OVERY = 1485\nVENDOR_ID_ATLANTIC_SYSTEMS_GROUP = 1486\nVENDOR_ID_KONGSBERG_INFORMASJONSKONTROLL_AS = 1487\nVENDOR_ID_ELTECO_AS = 1488\nVENDOR_ID_SCHLUMBERGER_LIMITED = 1489\nVENDOR_ID_CNI_COMMUNICATIONS_NETWORK_INTERNATIONAL_GMBH = 1490\nVENDOR_ID_MC_SYSTEMS_INC = 1491\nVENDOR_ID_OM_SYSTEMS_INTERNATIONAL_OMSI_MATS = 1492\nVENDOR_ID_DAVIC_DIGITAL_AUDIO_VISUAL_COUNCIL_RICHARD = 1493\nVENDOR_ID_ISM_GMBH = 1494\nVENDOR_ID_EF_JOHNSON_CO = 1495\nVENDOR_ID_BARANOF_SOFTWARE_INC = 1496\nVENDOR_ID_UNIVERSITY_OF_TEXAS_HOUSTON = 1497\nVENDOR_ID_UKIAH_SOFTWARE_SOLUTIONS_EDS_HDS = 1498\nVENDOR_ID_STERIA = 1499\nVENDOR_ID_ATI_AUSTRALIA_PTY_LIMITED = 1500\nVENDOR_ID_THE_AEROSPACE_CORPORATION_MICHAEL = 1501\nVENDOR_ID_ORCKIT_COMMUNICATIONS_LTD = 1502\nVENDOR_ID_TERTIO_LIMITED = 1503\nVENDOR_ID_COMSOFT_GMBH = 1504\nVENDOR_ID_POWER_CENTER_SOFTWARE_LLC = 1505\nVENDOR_ID_TECHNOLOGIC_INC = 1506\nVENDOR_ID_VERTEX_DATA_SCIENCE_LIMITED = 1507\nVENDOR_ID_ESIGETEL = 1508\nVENDOR_ID_ILLINOIS_BUSINESS_TRAINING_CENTER_WEIXIONG = 1509\nVENDOR_ID_ARRIS_NETWORKS_INC = 1510\nVENDOR_ID_TEAMQUEST_CORPORATION = 1511\nVENDOR_ID_SENTIENT_NETWORKS = 1512\nVENDOR_ID_SKYRR_HF = 1513\nVENDOR_ID_TECNOLOGIA_Y_GESTION_DE_LA_INNOVACION = 1514\nVENDOR_ID_CONNECTOR_GMBH = 1515\nVENDOR_ID_KASPIA_SYSTEMS_INC = 1516\nVENDOR_ID_SMITHKLINE_BEECHAM = 1517\nVENDOR_ID_NETCENTRIC_CORP = 1518\nVENDOR_ID_ATECOM_GMBH = 1519\nVENDOR_ID_CITIBANK_CANADA = 1520\nVENDOR_ID_MMS_MATRA_MARCONI_SPACE = 1521\nVENDOR_ID_INTERMEDIA_COMMUNICATIONS_INC = 1522\nVENDOR_ID_SCHOOL_OF_COMPUTER_SCIENCE_UNIVERSITY_SCIENCE_OF_MALAYSIA = 1523\nVENDOR_ID_UNIVERSITY_OF_LIMERICK = 1524\nVENDOR_ID_ACTANE = 1525\nVENDOR_ID_COLLABORATIVE_INFORMATION_TECHNOLOGY_RESEARCH_INSTITUTECITRI = 1526\nVENDOR_ID_INTERMEDIUM_A_S = 1527\nVENDOR_ID_ANS_CORE_SYSTEMS_INC = 1528\nVENDOR_ID_UUNET_TECHNOLOGIES_INC = 1529\nVENDOR_ID_TELESCIENCES_INC = 1530\nVENDOR_ID_QSC_AUDIO_PRODUCTS = 1531\nVENDOR_ID_AUSTRALIAN_DEPARTMENT_OF_EMPLOYMENT_EDUCATION_AND_TRAINING = 1532\nVENDOR_ID_NETWORK_MEDIA_COMMUNICATIONS_LTD = 1533\nVENDOR_ID_SODALIA = 1534\nVENDOR_ID_INNOVATIVE_CONCEPTS_INC = 1535\nVENDOR_ID_JAPAN_COMPUTER_INDUSTRY_INC = 1536\nVENDOR_ID_TELOGY_NETWORKS_INC = 1537\nVENDOR_ID_MERCK_COMPANY_INC = 1538\nVENDOR_ID_GEOTEL_COMMUNICATIONS_CORPORATION = 1539\nVENDOR_ID_SUN_ALLIANCE_UK = 1540\nVENDOR_ID_AG_COMMUNICATION_SYSTEMS = 1541\nVENDOR_ID_PIVOTAL_NETWORKING_INC = 1542\nVENDOR_ID_TSI_TELSYS_INC = 1543\nVENDOR_ID_HARMONIC_SYSTEMS_INCORPORATED = 1544\nVENDOR_ID_ASTRONET_CORPORATION = 1545\nVENDOR_ID_FRONTEC = 1546\nVENDOR_ID_NETVISION = 1547\nVENDOR_ID_FLOWPOINT_CORPORATION = 1548\nVENDOR_ID_ALLIED_DATA_TECHNOLOGIES = 1549\nVENDOR_ID_NUERA_COMMUNICATION_INC = 1550\nVENDOR_ID_RADNET_LTD = 1551\nVENDOR_ID_OC_TECHNOLOGIES_BV = 1552\nVENDOR_ID_AIR_FRANCE = 1553\nVENDOR_ID_COMMUNICATIONS_POWER_ENGINEERING_INC = 1554\nVENDOR_ID_CHARTER_SYSTEMS = 1555\nVENDOR_ID_PERFORMANCE_TECHNOLOGIES_INC = 1556\nVENDOR_ID_PARAGON_NETWORKS_INTERNATIONAL = 1557\nVENDOR_ID_SKOG_DATA_AS = 1558\nVENDOR_ID_MITEC_A_S = 1559\nVENDOR_ID_THOMSON_CSF_DEPARTEMENT_RESEAUX_DENTREPRISE = 1560\nVENDOR_ID_IPSILON_NETWORKS_INC = 1561\nVENDOR_ID_KINGSTON_TECHNOLOGY_COMPANY = 1562\nVENDOR_ID_HARMONIC_LIGHTWAVES = 1563\nVENDOR_ID_INTERACTIVE_DIGITAL_SOLUTIONS = 1564\nVENDOR_ID_COACTIVE_AESTHETICS_INC = 1565\nVENDOR_ID_TECH_DATA_CORPORATION = 1566\nVENDOR_ID_Z_COM = 1567\nVENDOR_ID_COTEP = 1568\nVENDOR_ID_RAYTHEON_COMPANY = 1569\nVENDOR_ID_TELESEND_INC = 1570\nVENDOR_ID_NCC = 1571\nVENDOR_ID_FORTE_SOFTWARE_INC = 1572\nVENDOR_ID_MCAFEE_FORMERLY_SECURE_COMPUTING_CORPORATION = 1573\nVENDOR_ID_BEZEQ = 1574\nVENDOR_ID_TU_BRAUNSCHWEIG = 1575\nVENDOR_ID_STAC_INC = 1576\nVENDOR_ID_STARNET_COMMUNICATIONS = 1577\nVENDOR_ID_UNIVERSIDADE_DO_MINHO = 1578\nVENDOR_ID_DEPARTMENT_OF_COMPUTER_SCIENCE_UNIVERSITY_OF_LIVERPOOL = 1579\nVENDOR_ID_TEKRAM_TECHNOLOGY_LTD = 1580\nVENDOR_ID_RATP = 1581\nVENDOR_ID_RAINBOW_DIAMOND_LIMITED = 1582\nVENDOR_ID_MAGELLAN_COMMUNICATIONS_INC = 1583\nVENDOR_ID_BAY_NETWORKS_INCORPORATED = 1584\nVENDOR_ID_QUANTITATIVE_DATA_SYSTEMS_QDS = 1585\nVENDOR_ID_ESYS_LIMITED = 1586\nVENDOR_ID_SWITCHED_NETWORK_TECHNOLOGIES_SNT = 1587\nVENDOR_ID_BROCADE_COMMUNICATIONS_SYSTEMS_INC = 1588\nVENDOR_ID_COMPUTER_RESOURCES_INTERNATIONAL_A_S_CRI = 1589\nVENDOR_ID_LUCHTVERKEERSBEVEILIGING = 1590\nVENDOR_ID_GTIL = 1591\nVENDOR_ID_XACTLABS_CORPORATION = 1592\nVENDOR_ID_QUEST_SOFTWARE_INC_FORMERLY_NETPRO_COMPUTING_INC = 1593\nVENDOR_ID_TELESYNC = 1594\nVENDOR_ID_EWT_BREITBANDNETZE_GMBH = 1595\nVENDOR_ID_INS_GMBH = 1596\nVENDOR_ID_DISTRIBUTED_PROCESSING_TECHNOLOGY = 1597\nVENDOR_ID_TIVOLI_SYSTEMS_INC = 1598\nVENDOR_ID_NETWORK_MANAGEMENT_TECHNOLOGIES = 1599\nVENDOR_ID_SIRTI = 1600\nVENDOR_ID_TASKE_TECHNOLOGY_INC = 1601\nVENDOR_ID_CANON_INC = 1602\nVENDOR_ID_SYSTEMS_AND_SYNCHRONOUS_INC = 1603\nVENDOR_ID_XFER_INTERNATIONAL = 1604\nVENDOR_ID_SCANDPOWER_A_S = 1605\nVENDOR_ID_CONSULTANCY_PROJECTS_GROUP_SRL = 1606\nVENDOR_ID_STS_TECHNOLOGIES_INC = 1607\nVENDOR_ID_MYLEX_CORPORATION = 1608\nVENDOR_ID_CRYPTOCARD_CORPORATION = 1609\nVENDOR_ID_LXE_INC = 1610\nVENDOR_ID_BDM_INTERNATIONAL_INC = 1611\nVENDOR_ID_SPACENET_INC = 1612\nVENDOR_ID_DATANET_GMBH = 1613\nVENDOR_ID_OPCOM_INC = 1614\nVENDOR_ID_MLINK_INTERNET_INC = 1615\nVENDOR_ID_SR_TELECOM_INC = 1616\nVENDOR_ID_NET_PARTNERS_INC = 1617\nVENDOR_ID_PEEK_TRAFFIC_TRANSYT_CORP = 1618\nVENDOR_ID_COMVERSE_INFORMATION_SYSTEMS = 1619\nVENDOR_ID_DATA_COMM_FOR_BUSINESS_INC = 1620\nVENDOR_ID_CYBEC_PTY_LTD = 1621\nVENDOR_ID_MITSUI_KNOWLEDGE_INDUSTRY_COLTD = 1622\nVENDOR_ID_TECH_LABORATORIES_INC = 1623\nVENDOR_ID_BLOCKADE_SYSTEMS_CORP = 1624\nVENDOR_ID_NIXU_OY = 1625\nVENDOR_ID_AUSTRALIAN_SOFTWARE_INNOVATIONS_SERVICES_PTY_LTD = 1626\nVENDOR_ID_OMICRON_TELESYSTEMS_INC = 1627\nVENDOR_ID_DEMON_INTERNET_LTD = 1628\nVENDOR_ID_PB_FARRADYNE_INC = 1629\nVENDOR_ID_TELOS_CORPORATION_SHARON = 1630\nVENDOR_ID_MANAGE_INFORMATION_TECHNOLOGIES = 1631\nVENDOR_ID_HARLOW_BUTLER_BROKING_SERVICES_LTD = 1632\nVENDOR_ID_EUROLOGIC_SYSTEMS_LTD = 1633\nVENDOR_ID_TELCO_RESEARCH_CORPORATION = 1634\nVENDOR_ID_MERCEDES_BENZ_AG = 1635\nVENDOR_ID_HOB_GMBH_CO_KG_HOB_GERMANY = 1636\nVENDOR_ID_NOAA = 1637\nVENDOR_ID_CORNERSTONE_SOFTWARE = 1638\nVENDOR_ID_WINK_COMMUNICATIONS = 1639\nVENDOR_ID_THOMSON_ELECTRONIC_INFORMATION_RESOURCES_TEIR = 1640\nVENDOR_ID_HITT_HOLLAND_INSTITUTE_OF_TRAFFIC_TECHNOLOGY_BV = 1641\nVENDOR_ID_KPMG = 1642\nVENDOR_ID_LORAL_FEDERAL_SYSTEMS = 1643\nVENDOR_ID_SIA_SOCIETA_INTERBANCARIA_PER_LAUTOMAZIONE = 1644\nVENDOR_ID_UNITED_STATES_CELLULAR_CORP = 1645\nVENDOR_ID_AMPER_DATOS_SA = 1646\nVENDOR_ID_CARELCOMP_FOREST_OY = 1647\nVENDOR_ID_OPEN_ENVIRONMENT_AUSTRALIA = 1648\nVENDOR_ID_INTEGRATED_TELECOM_TECHNOLOGY_INC = 1649\nVENDOR_ID_LANGNER_GESELLSCHAFT_FUER_DATENTECHNIK_MBH = 1650\nVENDOR_ID_WAYNE_STATE_UNIVERSITY = 1651\nVENDOR_ID_SICC_SSANGYONG_INFORMATION_COMMUNICATIONS_CORP = 1652\nVENDOR_ID_THOMSON_CSF = 1653\nVENDOR_ID_TELECONNECT_DRESDEN_GMBH = 1654\nVENDOR_ID_PANORAMA_SOFTWARE_INC = 1655\nVENDOR_ID_COMPUNET_SYSTEMHAUS_GMBH = 1656\nVENDOR_ID_JAPAN_TELECOM_COLTD = 1657\nVENDOR_ID_TECHFORCE_CORPORATION = 1658\nVENDOR_ID_GRANITE_SYSTEMS_INC = 1659\nVENDOR_ID_BIT_INCORPORATED = 1660\nVENDOR_ID_COMPANHIA_DE_INFORMATICA_DO_PARANA_CELEPAR = 1661\nVENDOR_ID_ROCKWELL_INTERNATIONAL_CORPORATION = 1662\nVENDOR_ID_ANCOR_COMMUNICATIONS = 1663\nVENDOR_ID_ROYAL_INSTITUTE_OF_TECHNOLOGY_SWEDEN_KTH = 1664\nVENDOR_ID_SUNET_SWEDISH_UNIVERSITY_NETWORK = 1665\nVENDOR_ID_SAGE_INSTRUMENTS_INC = 1666\nVENDOR_ID_CANDLE_CORPORATION = 1667\nVENDOR_ID_CSO_GMBH = 1668\nVENDOR_ID_M3I_SYSTEMS_INC = 1669\nVENDOR_ID_CREDINTRANS = 1670\nVENDOR_ID_ADVA_OPTICAL_NETWORKING_LTD = 1671\nVENDOR_ID_PIERCE_ASSOCIATES = 1672\nVENDOR_ID_RTS_WIRELESS = 1673\nVENDOR_ID_RIC_ELECTRONICS = 1674\nVENDOR_ID_AMOCO_CORPORATION = 1675\nVENDOR_ID_QUALIX_GROUP_INC = 1676\nVENDOR_ID_SAHARA_NETWORKS_INC = 1677\nVENDOR_ID_HYUNDAI_ELECTRONICS_INDUSTRIES_COLTD = 1678\nVENDOR_ID_RICH_INC = 1679\nVENDOR_ID_AMATI_COMMUNICATIONS_CORP = 1680\nVENDOR_ID_PHU_RYSTECH = 1681\nVENDOR_ID_DATA_LABS_INC = 1682\nVENDOR_ID_OCCIDENTAL_PETROLEUM_CORPORATION = 1683\nVENDOR_ID_RIJNHAAVE_INTERNET_SERVICES = 1684\nVENDOR_ID_LYNX_REAL_TIME_SYSTEMS_INC = 1685\nVENDOR_ID_QA_IT_SERVICES_LTD = 1686\nVENDOR_ID_SOFTOUCH_SYSTEMS_INC = 1687\nVENDOR_ID_SONDA_SA = 1688\nVENDOR_ID_MCCORMICK_NUNES_COMPANY = 1689\nVENDOR_ID_UME_E5_UNIVERSITET = 1690\nVENDOR_ID_NETIQ_CORPORATION = 1691\nVENDOR_ID_STARLIGHT_NETWORKS = 1692\nVENDOR_ID_INFORMACION_SELECTIVA_SA_DE_CV_INFOSEL = 1693\nVENDOR_ID_HCL_TECHNOLOGIES_LIMITED = 1694\nVENDOR_ID_MARYVILLE_DATA_SYSTEMS_INC = 1695\nVENDOR_ID_ETHERCOM_CORP = 1696\nVENDOR_ID_MULTICOM_SOFTWARE = 1697\nVENDOR_ID_BEA_SYSTEMS_LTD = 1698\nVENDOR_ID_ADVANCED_TECHNOLOGY_LTD = 1699\nVENDOR_ID_MOBIL_OIL = 1700\nVENDOR_ID_ARENA_CONSULTING_LIMITED = 1701\nVENDOR_ID_NETSYS_INTERNATIONAL_PTY_LTD = 1702\nVENDOR_ID_TITAN_INFORMATION_SYSTEMS_CORP = 1703\nVENDOR_ID_COGENT_DATA_TECHNOLOGIES = 1704\nVENDOR_ID_RELIASOFT_CORPORATION = 1705\nVENDOR_ID_MIDLAND_BUSINESS_SYSTEMS_INC = 1706\nVENDOR_ID_OPTIMAL_NETWORKS = 1707\nVENDOR_ID_GRESHAM_COMPUTING_PLC = 1708\nVENDOR_ID_LEIDOS_INC_FORMERLY_SAIC = 1709\nVENDOR_ID_ACCLAIM_COMMUNICATIONS = 1710\nVENDOR_ID_BISS_LIMITED = 1711\nVENDOR_ID_CARAVELLE_INC = 1712\nVENDOR_ID_DIAMOND_LANE_COMMUNICATIONS_CORPORATION = 1713\nVENDOR_ID_INFORTREND_TECHNOLOGY_INC = 1714\nVENDOR_ID_ARDATIS_NV_FORMERLY_ORDA_B_NV = 1715\nVENDOR_ID_ARIEL_CORPORATION = 1716\nVENDOR_ID_DATALEX_COMMUNICATIONS_LTD = 1717\nVENDOR_ID_SERVER_TECHNOLOGY_INC = 1718\nVENDOR_ID_UNIMAX_SYSTEMS_CORPORATION = 1719\nVENDOR_ID_DETEMOBIL_GMBH = 1720\nVENDOR_ID_INFONOVA_GMBH = 1721\nVENDOR_ID_KUDELSKI_SA = 1722\nVENDOR_ID_PRONET_GMBH = 1723\nVENDOR_ID_WESTELL_INC = 1724\nVENDOR_ID_NUPON_COMPUTING_INC = 1725\nVENDOR_ID_CIANET_IND_E_COM_LTDA_CIANET_NETWORKING = 1726\nVENDOR_ID_AUMTECH_OF_VIRGINIA_AMTEVA = 1727\nVENDOR_ID_CHEONGJO_DATA_COMMUNICATION_INC = 1728\nVENDOR_ID_GENESYS_TELECOMMUNICATIONS_LABORATORIES_INCGENESYS_LABS = 1729\nVENDOR_ID_PROGRESS_SOFTWAREANDREW_NEUMANN = 1730\nVENDOR_ID_ERICSSON_FIBER_ACCESS = 1731\nVENDOR_ID_OPEN_ACCESS_PTY_LTD = 1732\nVENDOR_ID_STERLING_COMMERCE = 1733\nVENDOR_ID_PREDICTIVE_SYSTEMS_INC = 1734\nVENDOR_ID_ARCHITEL_SYSTEMS_CORPORATION = 1735\nVENDOR_ID_QWEST_NMS = 1736\nVENDOR_ID_ECLIPSE_TECHNOLOGIES_INC = 1737\nVENDOR_ID_NAVY = 1738\nVENDOR_ID_BINDI_TECHNOLOGIES_PTY_LTD = 1739\nVENDOR_ID_HALLMARK_CARDS_INC = 1740\nVENDOR_ID_OBJECT_DESIGN_INC = 1741\nVENDOR_ID_UNASSIGNED_3 = 1742\nVENDOR_ID_ZENITH_DATA_SYSTEMS_ZDS = 1743\nVENDOR_ID_GOBI_CORP = 1744\nVENDOR_ID_UNIVERSITAT_DE_BARCELONA = 1745\nVENDOR_ID_INSTITUTE_FOR_SIMULATION_AND_TRAINING_IST = 1746\nVENDOR_ID_US_AGENCY_FOR_INTERNATIONAL_DEVELOPMENT = 1747\nVENDOR_ID_TUT_SYSTEMS_INC = 1748\nVENDOR_ID_ANSWERZ_PTY_LTD_AUSTRALIA = 1749\nVENDOR_ID_HBOLLMANN_MANUFACTURERS_LTD_HBM = 1750\nVENDOR_ID_LUCENT_TECHNOLOGIES = 1751\nVENDOR_ID_PHASE2_NETWORKS_INC = 1752\nVENDOR_ID_UNIFY_CORPORATION = 1753\nVENDOR_ID_GADZOOX_MICROSYSTEMS_INC = 1754\nVENDOR_ID_NETWORK_ONE_INC = 1755\nVENDOR_ID_MULOGIC_BV = 1756\nVENDOR_ID_OPTICAL_MICROWAVE_NETWORKS_INC = 1757\nVENDOR_ID_SITEL_LTD = 1758\nVENDOR_ID_CERG_FINANCE = 1759\nVENDOR_ID_AMERICAN_INTERNET_CORPORATION = 1760\nVENDOR_ID_PLUSKOM_GMBH = 1761\nVENDOR_ID_DEPT_OF_COMMUNICATIONS_GRAZ_UNIVERSITY_OF_TECHNOLOGY = 1762\nVENDOR_ID_EARTHLINK_INC = 1763\nVENDOR_ID_REAL_SOFT_INC = 1764\nVENDOR_ID_APEX_VOICE_COMMUNICATIONS_INC = 1765\nVENDOR_ID_NATIONAL_DATACOMM_CORPORATION = 1766\nVENDOR_ID_TELENOR_CONAX_AS = 1767\nVENDOR_ID_PATTON_ELECTRONICS_COMPANY = 1768\nVENDOR_ID_DIGITAL_FAIRWAY_CORPORATION = 1769\nVENDOR_ID_BROADBAND_TECHNOLOGIES_INC = 1770\nVENDOR_ID_MYRICOM_INC = 1771\nVENDOR_ID_DECISIONONE = 1772\nVENDOR_ID_TANDBERG_TELEVISION = 1773\nVENDOR_ID_AUDITEC_SA = 1774\nVENDOR_ID_PC_MAGIC = 1775\nVENDOR_ID_KONINKLIJKE_PHILIPS_ELECTRONICS_NV = 1776\nVENDOR_ID_ORIGIN = 1777\nVENDOR_ID_CSG_SYSTEMS = 1778\nVENDOR_ID_ALPHAMERIC_TECHNOLOGIES_LTD = 1779\nVENDOR_ID_NCR_AUSTRIA_MICHAEL_OSTENDORF = 1780\nVENDOR_ID_CHUCKK_INC = 1781\nVENDOR_ID_POWERTV_INC = 1782\nVENDOR_ID_WEBMETHODS = 1783\nVENDOR_ID_ENRON_CAPITOL_TRADE_RESOURCES = 1784\nVENDOR_ID_ORBCOMM = 1785\nVENDOR_ID_JW_DIRECT_SHOP = 1786\nVENDOR_ID_BETA = 1787\nVENDOR_ID_HEALTHEON = 1788\nVENDOR_ID_INTEGRALIS_LTD = 1789\nVENDOR_ID_FOLIO_CORPORATION = 1790\nVENDOR_ID_ECTF = 1791\nVENDOR_ID_WEBPLANET = 1792\nVENDOR_ID_NSTOR_CORPORATION = 1793\nVENDOR_ID_DEUTSCHE_BAHN_AG = 1794\nVENDOR_ID_PARADYNE = 1795\nVENDOR_ID_NASTEL_TECHNOLOGIES_INC = 1796\nVENDOR_ID_METAPHASE_TECHNOLOGY_INC = 1797\nVENDOR_ID_ZWEIGART_SAWITZKI = 1798\nVENDOR_ID_PIXEL = 1799\nVENDOR_ID_WAVEACCESS_INC = 1800\nVENDOR_ID_THE_SABRE_GROUP = 1801\nVENDOR_ID_REDLAND_TECHNOLOGY_CORP = 1802\nVENDOR_ID_PBS = 1803\nVENDOR_ID_CONSENSUS_DEVELOPMENT_CORPORATION = 1804\nVENDOR_ID_SAGEM_SA = 1805\nVENDOR_ID_I_CUBE_INC = 1806\nVENDOR_ID_INTRACOM_SA_HELLENIC_TELECOMMUNICATION_AND_ELECTRONICS_INDUSTRY = 1807\nVENDOR_ID_AETNA_INC = 1808\nVENDOR_ID_DOW_JONES_MARKETS_INC = 1809\nVENDOR_ID_CZECH_RAILWAYS_SO_CITJAROSLAV_MILITKY = 1810\nVENDOR_ID_SCAN_MATIC_A_S = 1811\nVENDOR_ID_DECISION_EUROPE_JOEL_CHOTARD = 1812\nVENDOR_ID_VTEL_CORPORATION = 1813\nVENDOR_ID_BLOOMBERG_LP = 1814\nVENDOR_ID_WITNESS_SYSTEMS_INC = 1815\nVENDOR_ID_ROSE_HULMAN_INSTITUTE_OF_TECHNOLOGY = 1816\nVENDOR_ID_AETHER_TECHNOLOGIES = 1817\nVENDOR_ID_INFONET_SOFTWARE_SOLUTIONSDAVID_HAUCK = 1818\nVENDOR_ID_CSTI_COMPAGNIE_DES_SIGNAUX_TECHNOLOGIES_INFORMATIQUESMR_CAMILLE_BREEUS = 1819\nVENDOR_ID_LEROY_MERLINRIGAULT_ALAIN = 1820\nVENDOR_ID_TOTAL_ENTERTAINMENT_NETWORK = 1821\nVENDOR_ID_OPEN_PORT_TECHNOLOGY = 1822\nVENDOR_ID_MIKROELEKTRONIK_ANWENDUNGSZENTRUM_HAMBURG_GMBHZ = 1823\nVENDOR_ID_INTERNATIONAL_MANAGEMENT_CONSULTING_INC = 1824\nVENDOR_ID_FORE_SYSTEMS_INC_2 = 1825\nVENDOR_ID_MTECH_SYSTEMS = 1826\nVENDOR_ID_RXSOFT_LTDTIMOTHY_MADDEN = 1827\nVENDOR_ID_DEPT_COMPUTER_STUDIES_LOUGHBOROUGH_UNIVERSITY = 1828\nVENDOR_ID_BETA80_SPA = 1829\nVENDOR_ID_GALISO_INCORPORATED = 1830\nVENDOR_ID_S2_SYSTEMS_INC = 1831\nVENDOR_ID_OPTIVISION_INC = 1832\nVENDOR_ID_COUNTRYWIDE_HOME_LOANS = 1833\nVENDOR_ID_OA_LABORATORY_CO_LTD = 1834\nVENDOR_ID_SDX_BUSINESS_SYSTEMS_LTD = 1835\nVENDOR_ID_WEST_END_SYSTEMS_CORP = 1836\nVENDOR_ID_DK_DIGITAL_MEDIA = 1837\nVENDOR_ID_WESTEL = 1838\nVENDOR_ID_FUJITSU_TELECOMMUNCATIONS_EUROPE_LIMITED = 1839\nVENDOR_ID_INMARSAT = 1840\nVENDOR_ID_TIMS_TECHNOLOGY_LTD = 1841\nVENDOR_ID_CALLWARE_TECHNOLOGIES = 1842\nVENDOR_ID_NEXTLINK_LLC = 1843\nVENDOR_ID_TURNQUAY_SOLUTIONS_LIMITED = 1844\nVENDOR_ID_ACCUSORT_SYSTEMS_INC = 1845\nVENDOR_ID_DEUTSCHER_BUNDESTAG = 1846\nVENDOR_ID_JOINT_RESEARCH_CENTRE = 1847\nVENDOR_ID_FAXSAV = 1848\nVENDOR_ID_CHEVY_CHASE_APPLICATIONS_DESIGN = 1849\nVENDOR_ID_BANK_BRUSSEL_LAMBERT_BBL = 1850\nVENDOR_ID_OUTBACK_RESOURCE_GROUP_INC = 1851\nVENDOR_ID_SCREEN_SUBTITLING_SYSTEMS_LTD = 1852\nVENDOR_ID_CAMBRIDGE_PARALLEL_PROCESSING_LTD = 1853\nVENDOR_ID_BOSTON_UNIVERSITY = 1854\nVENDOR_ID_NEWS_DIGITAL_SYSTEMS_LTD = 1855\nVENDOR_ID_NUTEK_2000_INC = 1856\nVENDOR_ID_OVERLAND_MOBILE_COMMUNICATION_AB = 1857\nVENDOR_ID_AXON_IT_AB = 1858\nVENDOR_ID_GRADIENT_MEDICAL_SYSTEMS = 1859\nVENDOR_ID_WAVESPAN_CORPORATION = 1860\nVENDOR_ID_NET_RESEARCH_INC = 1861\nVENDOR_ID_BROWNCROFT_COMMUNITY_CHURCH = 1862\nVENDOR_ID_NET2NET_CORPORATION = 1863\nVENDOR_ID_US_INTERNET = 1864\nVENDOR_ID_ABSOLUTE_TIME = 1865\nVENDOR_ID_VPNET = 1866\nVENDOR_ID_NTECH = 1867\nVENDOR_ID_NIPPON_UNISOFT_CORPORATION = 1868\nVENDOR_ID_OPTICAL_TRANSMISSION_LABS_INC = 1869\nVENDOR_ID_CYBERCASH_INC = 1870\nVENDOR_ID_NETSPEED_INC = 1871\nVENDOR_ID_ALTEON_NETWORKS_INC = 1872\nVENDOR_ID_INTERNET_MIDDLEWARE_CORPORATION = 1873\nVENDOR_ID_ISONOVA_GMBH = 1874\nVENDOR_ID_AMIGA_IOPS_PROJECT = 1875\nVENDOR_ID_SOFTBANK_SERVICES_GROUP = 1876\nVENDOR_ID_SOURCECOM_CORPORATION = 1877\nVENDOR_ID_TELIA_PROMOTOR_AB = 1878\nVENDOR_ID_HELIOSS_COMMUNICATIONS_INC = 1879\nVENDOR_ID_OPTICAL_ACCESS_INTERNATIONAL_INC = 1880\nVENDOR_ID_MMC_NETWORKS_INC = 1881\nVENDOR_ID_LANYON_LTD = 1882\nVENDOR_ID_RUBICO = 1883\nVENDOR_ID_QUANTUM_TELECOM_SOLUTIONS_INC = 1884\nVENDOR_ID_ARCHINET = 1885\nVENDOR_ID_I_CUBED_LTD = 1886\nVENDOR_ID_ALBIS_TECHNOLOGIES_LTD_FORMERLY_SIEMENS_SWITZERLAND_LTD = 1887\nVENDOR_ID_GIGALABS_INC = 1888\nVENDOR_ID_MET_MATRA_ERICSSON = 1889\nVENDOR_ID_RED_LION_CONTROLS_JBM_ELECTRONICS = 1890\nVENDOR_ID_OPTIM_SYSTEMS_INC = 1891\nVENDOR_ID_SOFTWARE_BREWERY = 1892\nVENDOR_ID_WAVELINQ = 1893\nVENDOR_ID_SIEMENS_ICN = 1894\nVENDOR_ID_IEX_CORPORATION = 1895\nVENDOR_ID_TRUETIME = 1896\nVENDOR_ID_HT_COMMUNICATIONS_INC = 1897\nVENDOR_ID_AVANTCOMP_OY = 1898\nVENDOR_ID_INFOVISTA = 1899\nVENDOR_ID_OPENWAVE_SYSTEMS_INC = 1900\nVENDOR_ID_SEA_WONDERS = 1901\nVENDOR_ID_HEADSTART_ENTERPRISE = 1902\nVENDOR_ID_B_SMART_INC = 1903\nVENDOR_ID_ISMA_LTD = 1904\nVENDOR_ID_3DV_TECHNOLOGY_INC = 1905\nVENDOR_ID_STARCOM_TECHNOLOGIES_INC = 1906\nVENDOR_ID_LLBEAN = 1907\nVENDOR_ID_NETICS_INC = 1908\nVENDOR_ID_INFRATEC_PLUS_GMBH = 1909\nVENDOR_ID_3EDGES = 1910\nVENDOR_ID_GISE_MBHVOLKMAR_BRISSE_HANS_JURGEN_LAUB = 1911\nVENDOR_ID_LAN_PC_SERVICES = 1912\nVENDOR_ID_REDPOINT_SOFTWARE_CORPORATION = 1913\nVENDOR_ID_ATEMPO_INC = 1914\nVENDOR_ID_I_95_CC = 1915\nVENDOR_ID_EXTREME_NETWORKS = 1916\nVENDOR_ID_VILLAGE_OF_ROCKVILLE_CENTRE = 1917\nVENDOR_ID_SWICHTEC_POWER_SYSTEMS = 1918\nVENDOR_ID_DEUTSCHER_WETTERDIENST = 1919\nVENDOR_ID_BLUEBIRD_SOFTWARE = 1920\nVENDOR_ID_SVAHA_INTERACTIVE_MEDIA_INC = 1921\nVENDOR_ID_SULLY_SOLUTIONS = 1922\nVENDOR_ID_BLUE_LINE = 1923\nVENDOR_ID_CASTLETON_NETWORK_SYSTEMS_CORP_GLEN_TRACEY_TRACEYCASTLETONCOM = 1924\nVENDOR_ID_VISUAL_EDGE_SOFTWARE_LTD = 1925\nVENDOR_ID_NETGUARD_TECHNOLOGIES_INC = 1926\nVENDOR_ID_SOFTSELL_INC = 1927\nVENDOR_ID_MARNE_SOFTWARE = 1928\nVENDOR_ID_CADIA_NETWORKS_INC = 1929\nVENDOR_ID_MILTON = 1930\nVENDOR_ID_DEL_MAR_SOLUTIONS_INC = 1931\nVENDOR_ID_KUMARAN_SYSTEMS = 1932\nVENDOR_ID_EQUIVALENCE = 1933\nVENDOR_ID_HOMEWATCH_INTERNATIONAL_INC = 1934\nVENDOR_ID_JOHN_RIVERS = 1935\nVENDOR_ID_REMARK_SERVICES_INC = 1936\nVENDOR_ID_DELOITTE_TOUCHE_CONSULTING_GROUP = 1937\nVENDOR_ID_FLYING_PENGUIN_PRODUCTIONS = 1938\nVENDOR_ID_THE_MATRIX = 1939\nVENDOR_ID_EASTERN_COMPUTERS_INC = 1940\nVENDOR_ID_PRINCETON_BIOMEDICA_INC = 1941\nVENDOR_ID_SANCOM_TECHNOLOGY_INC = 1942\nVENDOR_ID_NATIONAL_COMPUTING_CENTRE_LTD = 1943\nVENDOR_ID_AVAL_COMMUNICATIONS = 1944\nVENDOR_ID_WORTEC_SEARCHNET_CO = 1945\nVENDOR_ID_DOGWOOD_MEDIA = 1946\nVENDOR_ID_ALLIED_DOMECQ = 1947\nVENDOR_ID_TELESOFT_RUSSIA = 1948\nVENDOR_ID_UTSTARCOM_INC = 1949\nVENDOR_ID_COMUNIT = 1950\nVENDOR_ID_TRAFFIC_SOFWARE_LTD = 1951\nVENDOR_ID_QUALOP_SYSTEMS_CORP = 1952\nVENDOR_ID_VINCA_CORPORATION = 1953\nVENDOR_ID_AMTEC_SPA = 1954\nVENDOR_ID_GRETACODER_DATA_SYSTEMS_AG = 1955\nVENDOR_ID_KMSYSTEMS_INC = 1956\nVENDOR_ID_GEVA = 1957\nVENDOR_ID_RED_CREEK_COMMUNICATIONS_INC = 1958\nVENDOR_ID_BORG_TECHNOLOGY_INC = 1959\nVENDOR_ID_CONCORD_ELECTRONICS = 1960\nVENDOR_ID_RICHARD_RICCI_DDS = 1961\nVENDOR_ID_LINK_INTERNATIONAL_CORP = 1962\nVENDOR_ID_INTERMEC_TECHNOLOGIES_CORP = 1963\nVENDOR_ID_OPTIMUM_DATA_AG = 1964\nVENDOR_ID_DMCNW = 1965\nVENDOR_ID_PERLE_SYSTEMS_LIMITED = 1966\nVENDOR_ID_INKTOMI_CORPORATION = 1967\nVENDOR_ID_TELE_TV_SYSTEMS_LP = 1968\nVENDOR_ID_FRITZ_HABER_INSTITUT = 1969\nVENDOR_ID_MEDIAONENET = 1970\nVENDOR_ID_SEACHANGE_INTERNATIONAL_PETER_H = 1971\nVENDOR_ID_CASTON_CORPORATION = 1972\nVENDOR_ID_LOCAL_NET = 1973\nVENDOR_ID_JAPANNET = 1974\nVENDOR_ID_NABISCOKEN_CHRISTCHRISTKNABISCOCOM = 1975\nVENDOR_ID_MICROLOGICA_GMBH = 1976\nVENDOR_ID_NETWORK_HARMONI_INC = 1977\nVENDOR_ID_SITA_ADS = 1978\nVENDOR_ID_GLOBAL_MAINTECH_CORPORATION = 1979\nVENDOR_ID_TELE2_AB = 1980\nVENDOR_ID_EMC_CLARIION_ADVANCED_STORAGE_SOLUTIONS = 1981\nVENDOR_ID_ITS_CORPORATION = 1982\nVENDOR_ID_CLEVERSOFT_INC = 1983\nVENDOR_ID_THE_PERSEUS_GROUP_INC = 1984\nVENDOR_ID_JOES_WWW_PAGES = 1985\nVENDOR_ID_EVERYTHING_INTERNET_STORE = 1986\nVENDOR_ID_NUMARA_SOFTWARE_INC = 1987\nVENDOR_ID_LYCOMING_COUNTY_PA = 1988\nVENDOR_ID_STATENS_INSTITUTIONS_STYRELSE_SIS = 1989\nVENDOR_ID_INWARE_SOLUTIONS_INC = 1990\nVENDOR_ID_BROCADE_COMMUNICATION_SYSTEMS_INC_FORMERLY_FOUNDRY_NETWORKS_INC = 1991\nVENDOR_ID_DEUTSCHE_BANK = 1992\nVENDOR_ID_XYRATEX = 1993\nVENDOR_ID_BAUSCH_DATACOM_BV = 1994\nVENDOR_ID_ADVANCED_RADIO_TELECOM_ART = 1995\nVENDOR_ID_COPPER_MOUNTAIN_COMMUNICATIONS_INC = 1996\nVENDOR_ID_PLANET_SOFTWARE_INC = 1997\nVENDOR_ID_CARLTAN_COMPUTER_CORPORATION = 1998\nVENDOR_ID_LITTVA_MITCHELL_INC = 1999\nVENDOR_ID_TIBCO_INC = 2000\nVENDOR_ID_OKI_DATA_CORPORATION = 2001\nVENDOR_ID_GOTEL = 2002\nVENDOR_ID_ADOBE_SYSTEMS_INCORPORATED = 2003\nVENDOR_ID_SENTRICITY = 2004\nVENDOR_ID_AEROPORTS_DE_PARIS = 2005\nVENDOR_ID_ECONZ_LTD = 2006\nVENDOR_ID_TELDAT_SA = 2007\nVENDOR_ID_OFFSET_INFO_SERVICE_SRL = 2008\nVENDOR_ID_A_J_BOGGS_COMPANY = 2009\nVENDOR_ID_STALE_ODEGAARD_AS = 2010\nVENDOR_ID_HUAWEI_TECHNOLOGY_COLTD = 2011\nVENDOR_ID_SCHROFF_GMBH = 2012\nVENDOR_ID_REHABILITATION_INSTITUTE_OF_CHICAGO_ANGIE = 2013\nVENDOR_ID_ADC_TELECOMMUNICATIONS_INC = 2014\nVENDOR_ID_SYSTOR_AG = 2015\nVENDOR_ID_GRAIYMAGE_INC = 2016\nVENDOR_ID_SYMICRON_COMPUTER_COMMUNICATIONS_LTD = 2017\nVENDOR_ID_SCANDORAMA_AB = 2018\nVENDOR_ID_I_NET = 2019\nVENDOR_ID_XLAND_LTD = 2020\nVENDOR_ID_UC_DAVIS_ECE_DEPT_TOM = 2021\nVENDOR_ID_CANARY_COMMUNICATIONS_INC = 2022\nVENDOR_ID_NETGAIN = 2023\nVENDOR_ID_WEST_INFORMATION_PUBLISHING_GROUP = 2024\nVENDOR_ID_DEUTSCHE_BUNDESBANK = 2025\nVENDOR_ID_BROADXENT_INC = 2026\nVENDOR_ID_GAUSS_INTERPRISE_AG = 2027\nVENDOR_ID_ALDISCON = 2028\nVENDOR_ID_VIVID_IMAGE = 2029\nVENDOR_ID_AFRIQACCESS_INC = 2030\nVENDOR_ID_RELIANT_NETWORKS_CORPORATION_STEVEN = 2031\nVENDOR_ID_MAVENIR_SYSTEMS_FORMERLY_AIRWIDE_SOLUTIONS = 2032\nVENDOR_ID_MCKINNEY_LIGHTING_SOUND = 2033\nVENDOR_ID_WHOLE_SYSTEMS_DESIGN_INC = 2034\nVENDOR_ID_OREILLY_ASSOCIATES_INC = 2035\nVENDOR_ID_QUANTUM_CORPORATION = 2036\nVENDOR_ID_ERNST_AND_YOUNG_LLP = 2037\nVENDOR_ID_TELEWARE_OY = 2038\nVENDOR_ID_FIDUCIA_INFORMATIONSZENTRALE_AG_IAN = 2039\nVENDOR_ID_KINETICS_INC = 2040\nVENDOR_ID_EMCEE_BROADCAST_PRODUCTS = 2041\nVENDOR_ID_CLARIANT_CORPORATION = 2042\nVENDOR_ID_IEEE_8025 = 2043\nVENDOR_ID_OPEN_DEVELOPMENT_CORPORATION = 2044\nVENDOR_ID_RFG_SYSTEMSRAMON_FERRERIS = 2045\nVENDOR_ID_ASPECT_TELECOMMUNICATIONS = 2046\nVENDOR_ID_LEO_ASSOCIATES = 2047\nVENDOR_ID_SOFTLINX_INC = 2048\nVENDOR_ID_GENERALE_BANK = 2049\nVENDOR_ID_WINDWARD_TECHNOLOGIES_INC = 2050\nVENDOR_ID_NETSOLVE_INC = 2051\nVENDOR_ID_XANTEL = 2052\nVENDOR_ID_ARAGO_INSTITUT_FUER_KOMPLEXES_DATENMANAGEMENT_GMBH = 2053\nVENDOR_ID_KOKUSAI_DENSHIN_DENWA_CO_LTD = 2054\nVENDOR_ID_GILLAM_SATEL = 2055\nVENDOR_ID_MOEBIUS_SYSTEMS = 2056\nVENDOR_ID_FINANCIAL_INTERNET_TECHNOLOGY = 2057\nVENDOR_ID_MARC_SYSTEMS = 2058\nVENDOR_ID_BOVA_GALLERY = 2059\nVENDOR_ID_OSX_TELECOMUNICACOES = 2060\nVENDOR_ID_TELECOM_SOLUTIONS = 2061\nVENDOR_ID_CYBERIQ_SYSTEMS = 2062\nVENDOR_ID_ARDENT_COMMUNICATIONS_CORPORATION = 2063\nVENDOR_ID_AWARE_INC = 2064\nVENDOR_ID_RACAL_RADIO_LIMITED = 2065\nVENDOR_ID_CONTROL_RESOURCES_CORPORATION = 2066\nVENDOR_ID_ADVANCED_FIBRE_COMMUNICATIONS_AFC = 2067\nVENDOR_ID_ELPROMA_ELECTRONICA_BV = 2068\nVENDOR_ID_MTA_SZTAKI = 2069\nVENDOR_ID_CONSENSYS_COMPUTERS_INC = 2070\nVENDOR_ID_JADE_DIGITAL_RESEARCH_CO = 2071\nVENDOR_ID_BYTE_THIS_INTERACTIVE_PTYLTD_MIKE = 2072\nVENDOR_ID_FINANCIAL_NETWORK_TECHNOLOGIES_INC = 2073\nVENDOR_ID_BROKAT_INFORMATIONSSYSTEME_GMBH = 2074\nVENDOR_ID_MEDIAWISE_NETWORKS = 2075\nVENDOR_ID_FUTURE_SOFTWARE = 2076\nVENDOR_ID_COMMIT_INFORMATION_SYSTEMS = 2077\nVENDOR_ID_VIRTUAL_ACCESS_LTD = 2078\nVENDOR_ID_JDS_FITEL_INC = 2079\nVENDOR_ID_IPM_DATACOM = 2080\nVENDOR_ID_STARBURST_COMMUNICATIONS_CORPORATION_KEVIN = 2081\nVENDOR_ID_TOLLGRADE_COMMUNICATIONS_INC = 2082\nVENDOR_ID_ORANGE_SERVICES_US = 2083\nVENDOR_ID_SANKEN_ELECTRIC_CO_LTD = 2084\nVENDOR_ID_ISOLATION_SYSTEMS_LIMITED = 2085\nVENDOR_ID_AVIDIA_SYSTEMS_INC = 2086\nVENDOR_ID_CIDERA_MAINSTREAM_SERVICES = 2087\nVENDOR_ID_RADSTONE_TECHNOLOGY_PLC = 2088\nVENDOR_ID_PHILIPS_BUSINESS_COMMUNICATIONS = 2089\nVENDOR_ID_FMS_SERVICES = 2090\nVENDOR_ID_SUPERNOVA_COMMUNICATIONS = 2091\nVENDOR_ID_MURPHY_MURPHY_REAL_ESTATE = 2092\nVENDOR_ID_MULTI_PLATFORM_INFORMATION_SYSTEMS = 2093\nVENDOR_ID_ALLEGRO_CONSULTANTS_INC = 2094\nVENDOR_ID_AIAB = 2095\nVENDOR_ID_PREVIEW_MULTIMEDIA_SERVICES = 2096\nVENDOR_ID_ACCESS_BEYOND = 2097\nVENDOR_ID_SUNBURST_TECHNOLOGY_INC = 2098\nVENDOR_ID_SOTAS = 2099\nVENDOR_ID_CYBERSOULS_ETERNAL_LIFE_SYSTEMS_INC = 2100\nVENDOR_ID_HANWHA_CORP_TELECOM = 2101\nVENDOR_ID_COMET_TELECOMMUNICATIONS_INC = 2102\nVENDOR_ID_CARY_SYSTEMS_INC = 2103\nVENDOR_ID_PEERLESS_SYSTEMS_CORP_FRANK = 2104\nVENDOR_ID_ADICOM_WIRELESS_INC = 2105\nVENDOR_ID_HIGH_TECHNOLOGY_SOFTWARE_CORP = 2106\nVENDOR_ID_LYNK = 2107\nVENDOR_ID_ROBINS_LIMOUSINE = 2108\nVENDOR_ID_SECANT_NETWORK_TECH = 2109\nVENDOR_ID_ORION_PICTURES_CORPORATION = 2110\nVENDOR_ID_GLOBAL_VILLAGE_COMMUNICATION_INC = 2111\nVENDOR_ID_IOWAVE_INC = 2112\nVENDOR_ID_SIGNALS_AND_SEMAPHORES = 2113\nVENDOR_ID_MAYO_FOUNDATION = 2114\nVENDOR_ID_KRONE_AG = 2115\nVENDOR_ID_COMPUTER_NETWORKING_RESOURCES_INC = 2116\nVENDOR_ID_TELENETWORKS = 2117\nVENDOR_ID_STAFFORDSHIRE_UNIVERSITY = 2118\nVENDOR_ID_BROADBAND_NETWORKS_INC = 2119\nVENDOR_ID_FEDERAL_AVIATION_ADMINISTRATION = 2120\nVENDOR_ID_TECHNICAL_COMMUNICATIONS_CORPORATION = 2121\nVENDOR_ID_REZO = 2122\nVENDOR_ID_GRAFXLAB_INC = 2123\nVENDOR_ID_SAVANT_CORP = 2124\nVENDOR_ID_COMTEC_SYSTEMS_COLTD_DEOK_HYOENG = 2125\nVENDOR_ID_SATCOM_MEDIA = 2126\nVENDOR_ID_UCONX_CORPORATION = 2127\nVENDOR_ID_TPG_NETWORK = 2128\nVENDOR_ID_CNJ_INCORPORATED = 2129\nVENDOR_ID_GREENBRIER_RUSSEL = 2130\nVENDOR_ID_MAINNET = 2131\nVENDOR_ID_COMNET_DATENSYSTEMEHOLGER_ZIMMERMANHZIMMERMANNCNDDE = 2132\nVENDOR_ID_NOVADIGM_INC = 2133\nVENDOR_ID_ALFATECH_INC = 2134\nVENDOR_ID_FINANCIAL_SCIENCES_CORPORATION_GARY = 2135\nVENDOR_ID_ELECTRONICS_FOR_IMAGING_INC = 2136\nVENDOR_ID_CASABYTE = 2137\nVENDOR_ID_ASSURENET_PATHWAYS_INC = 2138\nVENDOR_ID_ALEXANDER_LAN_INC = 2139\nVENDOR_ID_GILL_SIMPSON = 2140\nVENDOR_ID_MCNS_LP = 2141\nVENDOR_ID_FUTURE_SYSTEMS_INC = 2142\nVENDOR_ID_IMGIS = 2143\nVENDOR_ID_SKYWIRE_CORPORATION = 2144\nVENDOR_ID_IRDETO_ACCESS_B_V = 2145\nVENDOR_ID_PEASANTWORKS = 2146\nVENDOR_ID_ONION_PEEL_SOFTWARE = 2147\nVENDOR_ID_PS_PARTNERSHIP = 2148\nVENDOR_ID_IRDG_INC = 2149\nVENDOR_ID_SDS_LTD = 2150\nVENDOR_ID_PROMUS_HOTEL_CORPORATION_OSCAR_PEARCE = 2151\nVENDOR_ID_CAVID_LAWRENCE_CENTER = 2152\nVENDOR_ID_INSIDER_TECHNOLOGIES_LTD_PAUL_HANCOCK = 2153\nVENDOR_ID_BERKELEY_NETWORKS = 2154\nVENDOR_ID_INFONAUTICS_CORPORATION = 2155\nVENDOR_ID_EASY_SOFTWARE = 2156\nVENDOR_ID_CESG = 2157\nVENDOR_ID_SALIX_TECHNOLOGIES_INC = 2158\nVENDOR_ID_ESSENTIAL_COMMUNICATIONS = 2159\nVENDOR_ID_UNIVERSITY_OF_HAWAII = 2160\nVENDOR_ID_FOXTEL_MANAGEMENT_PTY = 2161\nVENDOR_ID_ZOHO_CORPORATION_FORMERLY_ADVENT_NETWORK_MANAGEMENT = 2162\nVENDOR_ID_VAYRIS_SA = 2163\nVENDOR_ID_TELECOM_MULTIMEDIA_SYSTEMS_INC = 2164\nVENDOR_ID_GUARDALL_LTD = 2165\nVENDOR_ID_WKK_SYSTEMS_INC = 2166\nVENDOR_ID_PROMINET_CORPORATION = 2167\nVENDOR_ID_LMC_LAN_MANAGEMENT_CONSULTING_GMBH = 2168\nVENDOR_ID_LEWIS_ENTERPRISE = 2169\nVENDOR_ID_TELES_AG = 2170\nVENDOR_ID_PCSI_PHOENIX_CONTROL_WAYNE_EDWARD = 2171\nVENDOR_ID_FOURTH_WAVE_DESIGNS_INC = 2172\nVENDOR_ID_MEDIAGATE_INC = 2173\nVENDOR_ID_INTERACTIVE_ONLINE_SERVICES_INC = 2174\nVENDOR_ID_MUTEK_TRANSCOM_LTD = 2175\nVENDOR_ID_UNIVERSITY_OF_DORTMUND_IRB = 2176\nVENDOR_ID_NETWORK_DIAGNOSTIC_CLINIC = 2177\nVENDOR_ID_TSI_TELECOM_SYSTEMS_LTD = 2178\nVENDOR_ID_WIRESPEED_COMM_CORP = 2179\nVENDOR_ID_VERSANET_COMMUNICATIONS_INC = 2180\nVENDOR_ID_EUNET_COMMUNICATIONS_SERVICES_BV = 2181\nVENDOR_ID_POW_COMMUNICATIONS = 2182\nVENDOR_ID_AMCOMMUNICATIONS_INC = 2183\nVENDOR_ID_OPEN_ARCHITECTURE_SYSTEMS_INTEGRATION_SOLUTIONS_OASISINC = 2184\nVENDOR_ID_NETPARTNER_SRO = 2185\nVENDOR_ID_VINA_TECHNOLOGIES = 2186\nVENDOR_ID_DEUTSCHES_KLIMARECHENZENTRUM_GMBH = 2189\nVENDOR_ID_ABSYSSCLAUDE_AIME_MOTONGANEMOTONGANEABSYSSFR = 2190\nVENDOR_ID_QUADROPHONICS_INC = 2191\nVENDOR_ID_HYPERCORE_TECHNOLOGY_INC = 2192\nVENDOR_ID_OBTK_INC_DBA_NETWORK_DESIGNS_CORPORATION = 2193\nVENDOR_ID_VOIS_CORPORATION = 2194\nVENDOR_ID_IXO_SA = 2195\nVENDOR_ID_MACRO4_OPEN_SYSTEMS_LTD = 2196\nVENDOR_ID_RSA_SECURITY = 2197\nVENDOR_ID_NEXTWAVE_WIRELESS_INC = 2198\nVENDOR_ID_PISCES_CONSULTANCY = 2199\nVENDOR_ID_TPS_CALL_SCIENCES_INC_TPS_PAUL_L = 2200\nVENDOR_ID_ICONSULT = 2201\nVENDOR_ID_THIRD_POINT_SYSTEMS = 2202\nVENDOR_ID_MAS_TECHNOLOGY_LTD = 2203\nVENDOR_ID_ADVANCED_LOGIC_RESEARCH_INCALR = 2204\nVENDOR_ID_DOCUMENTUM_INC = 2205\nVENDOR_ID_SIEMENS_BUSINESS_COMMUNICATION_SYSTEMS_INC = 2206\nVENDOR_ID_TELMAX_COMMUNICATIONS_CORP = 2207\nVENDOR_ID_ZYPCOM_INC = 2208\nVENDOR_ID_REMOTE_SENSE = 2209\nVENDOR_ID_OOTEK_CORPORATION = 2210\nVENDOR_ID_ESOFT_INC = 2211\nVENDOR_ID_ANYDATA_LIMITED = 2212\nVENDOR_ID_DATA_FELLOWS_LTD = 2213\nVENDOR_ID_PRODUCTIONS_MEDIALOG_INC = 2214\nVENDOR_ID_INOVAMERCI_LDA = 2215\nVENDOR_ID_OKITEC = 2216\nVENDOR_ID_VERTEX_NETWORKS_INC = 2217\nVENDOR_ID_PULSE_COMMUNICATIONS = 2218\nVENDOR_ID_CXA_COMMUNICATIONS_LTD = 2219\nVENDOR_ID_IDD_INFORMATION_SERVICE = 2220\nVENDOR_ID_ATLAS_COMPUTER_EQUIPMENT_INC = 2221\nVENDOR_ID_SYNTEGRA = 2222\nVENDOR_ID_CCC_INFORMATION_SERVICES = 2223\nVENDOR_ID_W_QUINN_ASSOCIATES = 2224\nVENDOR_ID_BROADCOM_EIREANN_RESEARCH_LTD = 2225\nVENDOR_ID_RISK_MANAGEMENT_SERVICES_LLC = 2226\nVENDOR_ID_WATKINS_JOHNSON_COMPANY = 2227\nVENDOR_ID_ERIC_E_WESTBROOK = 2228\nVENDOR_ID_MARTINHO_DAVIS_SYSTEMS_INC = 2229\nVENDOR_ID_XYPOINT_CORPORATION = 2230\nVENDOR_ID_INNOVAT_COMMUNICATIONS_INC = 2231\nVENDOR_ID_CHARLESWOOD_CO = 2232\nVENDOR_ID_ID_SOFTWARE_AS = 2233\nVENDOR_ID_TELIA_AB = 2234\nVENDOR_ID_EXPLORATION_ENTERPRISES_INC = 2235\nVENDOR_ID_DAIMLER_BENZ_AEROSPACE_AG = 2236\nVENDOR_ID_XARA_NETWORKS_LTD = 2237\nVENDOR_ID_THE_FREEBSD_PROJECT = 2238\nVENDOR_ID_WORLD_MERCHANDISE_EXCHANGE_WOMEX_LTD = 2239\nVENDOR_ID_LYSIS = 2240\nVENDOR_ID_CFL_RESEARCH = 2241\nVENDOR_ID_NET_TEL_COMPUTER_SYSTEMS_LIMITED = 2242\nVENDOR_ID_SATTEL_COMMUNICATIONS = 2243\nVENDOR_ID_PROMATORY_COMMUNICATIONS_INC = 2244\nVENDOR_ID_CATALOGIC_SOFTWARE_INC_FORMERLY_SYNCSORT_INC = 2245\nVENDOR_ID_LLOYDSTSB_GROUP_PLC = 2246\nVENDOR_ID_IT_CONSULTANCY_ENGINEERING_MANAGEMENT_GROUP_LTD = 2247\nVENDOR_ID_LITE_ON_COMMUNICATIONS_CORP = 2248\nVENDOR_ID_THE_NEW_MILLENNIUM = 2249\nVENDOR_ID_QUATRACO_YUGOSLAVIA = 2250\nVENDOR_ID_BR_BUSINESS_SYSTEMS = 2251\nVENDOR_ID_WHEELGROUP_CORPORATION_JONATHAN = 2252\nVENDOR_ID_ULTIMATE_TECHNOLOGY_INC = 2253\nVENDOR_ID_DELTA_ELECTRONICS_INC = 2254\nVENDOR_ID_WAFFLE_PRODUCTIONS = 2255\nVENDOR_ID_KOREA_INTERNET = 2256\nVENDOR_ID_SELEX_COMMUNICATIONS_LIMITED_FORMERLY_BAE_SYSTEMS = 2257\nVENDOR_ID_THOMSON_BROADCAST_SYSTEMS = 2258\nVENDOR_ID_WORKFLOW_AUTOMATION_COMPANY_LTD = 2259\nVENDOR_ID_ASSOCIATED_RT_INC = 2260\nVENDOR_ID_DRS_CODEM_SYSTEMS = 2261\nVENDOR_ID_RIGHT_TIME_WATCH_CENTER_FELIX = 2262\nVENDOR_ID_ADVANCED_VISION_TECHNOLOGIES_INC = 2263\nVENDOR_ID_APPLIED_INTELLIGENCE_GROUP_DANA = 2264\nVENDOR_ID_ACORN_COMPUTERS_LTD = 2265\nVENDOR_ID_TEMPEST_CONSULTING_INC = 2266\nVENDOR_ID_DIGITAL_SOUND_CORPORATION = 2267\nVENDOR_ID_FASTLAN_SOLUTIONS_INC = 2268\nVENDOR_ID_ORDINOX_NETWORK_INC = 2269\nVENDOR_ID_TELINC_CORPORATION = 2270\nVENDOR_ID_DRS_CONSULTING_GROUP = 2271\nVENDOR_ID_RAPID_CITY_COMMUNICATION = 2272\nVENDOR_ID_INVISIBLE_FENCE_SALES_COMPANY = 2273\nVENDOR_ID_TROIKA_MANAGEMENT_SERVICES = 2274\nVENDOR_ID_VXTREME_INC = 2275\nVENDOR_ID_CRYPTSOFT_PTY_LTD = 2276\nVENDOR_ID_BROOKTROUT_TECHNOLOGY = 2277\nVENDOR_ID_GRASS_MBH = 2278\nVENDOR_ID_EPICON_INC = 2279\nVENDOR_ID_SAD_TRASPORTO_LOCALE_SPA = 2280\nVENDOR_ID_GIGANET_LTD = 2281\nVENDOR_ID_INCAA_INFORMATICA_ITALIA_SRL = 2282\nVENDOR_ID_VERMONT_FIRMWARE_CORPORATION = 2283\nVENDOR_ID_AUTOMATED_CONCEPTS = 2284\nVENDOR_ID_FLASH_NETWORKS_LTD = 2285\nVENDOR_ID_ORACOM_INC = 2286\nVENDOR_ID_SHELL_SERVICES_COMPANY = 2287\nVENDOR_ID_BLACK_PIGS_OF_DEATH = 2288\nVENDOR_ID_N3ERZ = 2289\nVENDOR_ID_TECHNOLOGY_RENDEZVOUS_INC = 2290\nVENDOR_ID_ZAPNET_INC = 2291\nVENDOR_ID_PREMIER_TECHNOLOGIES = 2292\nVENDOR_ID_TENNYSON_TECHNOLOGIES = 2293\nVENDOR_ID_DOT_HILL_SYSTEMS_2 = 2294\nVENDOR_ID_DH_TECHNOLOGY_INC = 2295\nVENDOR_ID_DAGAZ_TECHNOLOGIES_INC = 2296\nVENDOR_ID_GANYMEDE_SOFTWARE_INC = 2297\nVENDOR_ID_TELE_COMMUNICATIONS_INC = 2298\nVENDOR_ID_FREEGATE_CORPORTATION = 2299\nVENDOR_ID_MAINCONTROL_INC = 2300\nVENDOR_ID_LUMINATE_SOFTWARE_CORP = 2301\nVENDOR_ID_K2NET = 2302\nVENDOR_ID_AURORA_COMMUNCIATIONS_PTY_LTD = 2303\nVENDOR_ID_LANSCAPE_LIMITED = 2304\nVENDOR_ID_GATEWAY_TECHNOLOGIES_INC = 2305\nVENDOR_ID_ZERGO_LIMITED = 2306\nVENDOR_ID_C4U_SOLUTIONS = 2307\nVENDOR_ID_BOLL_ENGINEERING_AG = 2308\nVENDOR_ID_INTERNET_MAIL_CONSORTIUM = 2309\nVENDOR_ID_COLLEGE_OF_MATHEMATICS_AND_SCIENCE_UNIV_OF_CENTRAL_OKLAHOMA = 2310\nVENDOR_ID_INSTITUTE_FOR_APPLIED_SUPERCOMPUTING_CSUSB = 2311\nVENDOR_ID_RED_HAT_SOFTWARE = 2312\nVENDOR_ID_LEGAL_GENERAL_ASSURANCE_SOCIETY_LTD = 2313\nVENDOR_ID_FIRE_NETWORKS_INC = 2314\nVENDOR_ID_ICTI = 2315\nVENDOR_ID_INTERNET_COMMUNICATION_SECURITY = 2316\nVENDOR_ID_TALX_CORPORATION = 2317\nVENDOR_ID_REPEATER_TECHNOLOGIES_INC = 2318\nVENDOR_ID_AUMTECH_INC = 2319\nVENDOR_ID_EUROSINET = 2320\nVENDOR_ID_KE_KOMMUNIKATIONS_ELEKTRONIK = 2321\nVENDOR_ID_STARVISION_MULTIMEDIA_CORP = 2322\nVENDOR_ID_ALCATEL_TELECOM_ASD = 2323\nVENDOR_ID_AVAL_DATA_COPORATION = 2324\nVENDOR_ID_PACIFIC_NORTHWEST_NATIONAL_LABORATORY = 2325\nVENDOR_ID_TORTOISE_SOFTWARE_SYSTEMS = 2326\nVENDOR_ID_VERIO_INC = 2327\nVENDOR_ID_ARRAYCOMM_INC = 2328\nVENDOR_ID_DST_SYSTEMS_INC = 2329\nVENDOR_ID_VISION_SERVICE_PLAN = 2330\nVENDOR_ID_BEST_BUY = 2331\nVENDOR_ID_SHARED_NETWORK_SERVICES_SNS = 2332\nVENDOR_ID_BBC = 2333\nVENDOR_ID_PACKETEER_INC = 2334\nVENDOR_ID_APPLIED_DIGITAL_ACCESS = 2335\nVENDOR_ID_HIS_TECHNOLOGIES = 2336\nVENDOR_ID_DNE_TECHNOLOGIES_INC = 2337\nVENDOR_ID_VERTICAL_NETWORKS_INC = 2338\nVENDOR_ID_CSOFT_LTD = 2339\nVENDOR_ID_NATIONAL_GROCERS = 2340\nVENDOR_ID_RELIANCE_COMPUTER_CORP = 2341\nVENDOR_ID_AK_NORD_EDV_VERTRIEBSGES_MBH = 2342\nVENDOR_ID_FINANCIAL_TECHNOLOGIES_INTERNATIONAL = 2343\nVENDOR_ID_SPACEWORKS_INC = 2344\nVENDOR_ID_TORRENT_NETWORKING_TECHNOLOGIES_CORP = 2345\nVENDOR_ID_CTI = 2346\nVENDOR_ID_DATASTREAM_INTERNATIONAL_ABBAS_FOROUGHI = 2347\nVENDOR_ID_KILLION_INC = 2348\nVENDOR_ID_MISSION_CRITICAL_SOFTWARE_INC = 2349\nVENDOR_ID_DATA_RESEARCH_AND_APPLICATIONS_INC = 2350\nVENDOR_ID_RESONATE_INC = 2351\nVENDOR_ID_ERICSSON_INC_FORMERLY_REDBACK_NETWORKS = 2352\nVENDOR_ID_NEXWARE_CORPORATION = 2353\nVENDOR_ID_ADC_WIRELESS_SYSTEMS = 2354\nVENDOR_ID_ITIS = 2355\nVENDOR_ID_LANCOM_SYSTEMS = 2356\nVENDOR_ID_PSIMED_CORPORATION = 2357\nVENDOR_ID_TRANSFER_DATA_TEST_GMBH = 2358\nVENDOR_ID_TIP_GROUP_SA = 2359\nVENDOR_ID_REDLINK = 2360\nVENDOR_ID_JAPAN_INFORMATION_ENGINEERING_CO_LTD = 2361\nVENDOR_ID_RICHTER_SYSTEMS_DEVELOPMENT_INC = 2362\nVENDOR_ID_EUROCONTROL_MAS_UAC = 2363\nVENDOR_ID_KONICA_CORPORATION = 2364\nVENDOR_ID_VIACOM = 2365\nVENDOR_ID_XIOTECH_CORPORATION = 2366\nVENDOR_ID_IMS_GESELLSCHAFT_FUER_INFORMATIONS_UND_MANAGEMENTSYSTEME_MBH = 2367\nVENDOR_ID_SOFTWORKS = 2368\nVENDOR_ID_MOBILEWARE_CORPORATION = 2369\nVENDOR_ID_MEMCO_SOFTWARE_LTD = 2370\nVENDOR_ID_ADVANCED_TECHCOM_INC = 2371\nVENDOR_ID_BEDFORD_ASSOCIATES_INC = 2372\nVENDOR_ID_CYBERWIZARD_INC = 2373\nVENDOR_ID_SMART_TECHNOLOGIES_INC = 2374\nVENDOR_ID_CONCENTRIC_NETWORK_CORPORATION = 2375\nVENDOR_ID_THE_SNMP_WORKSHOP = 2376\nVENDOR_ID_RELTEC_CORP = 2377\nVENDOR_ID_NERA = 2378\nVENDOR_ID_NATIONS_BANK = 2379\nVENDOR_ID_INTEGRATED_DESIGN_TECHNIQUES_LIMITED = 2380\nVENDOR_ID_OPENLINK_SOFTWARE_INC = 2381\nVENDOR_ID_NETREALITY_INC = 2382\nVENDOR_ID_IMATION_CORP = 2383\nVENDOR_ID_SIBIS_LTD = 2384\nVENDOR_ID_SHARP_CORPORATION = 2385\nVENDOR_ID_DESKTOP_DATA_INC = 2386\nVENDOR_ID_TELECOM_DEVICE_KK = 2387\nVENDOR_ID_CAPTECH_COMMUNICATION_INC = 2388\nVENDOR_ID_PERFORMANCE_TELECOM_CORP = 2389\nVENDOR_ID_COMX = 2390\nVENDOR_ID_KARIM = 2391\nVENDOR_ID_SYSTEMS_INTEGRATION_GROUP = 2392\nVENDOR_ID_WITCOM_INNOVATIVE_RADIO_SYSTEMS = 2393\nVENDOR_ID_SF_SOFTWARE = 2394\nVENDOR_ID_MARBEN_ITALIA_SPA = 2395\nVENDOR_ID_ACTIVCARD_INC = 2396\nVENDOR_ID_COGNOS_INC = 2397\nVENDOR_ID_EAGLE_TRAFFIC_CONTROL_SYSTEMS_WLBUD = 2398\nVENDOR_ID_NETWAVE = 2399\nVENDOR_ID_HEMETNET = 2400\nVENDOR_ID_NBX_CORPORATION = 2401\nVENDOR_ID_AL_BADER_SHIPPING_GEN_CONT_CO_DOMNIC_FAIA = 2402\nVENDOR_ID_HOME_NETWORK = 2403\nVENDOR_ID_PRIMEUR = 2404\nVENDOR_ID_ILTS_INC = 2405\nVENDOR_ID_COMPUTER_GENERATION_INC = 2406\nVENDOR_ID_MOUTON_NOIR_ENTERPRISES_INC = 2407\nVENDOR_ID_BAYSTATE_SOUND_RECORDING = 2408\nVENDOR_ID_METAPATH_CORPORATION = 2409\nVENDOR_ID_TAJEET_GOURMET_FOOD_MANUFACTURING = 2410\nVENDOR_ID_TELCEL = 2411\nVENDOR_ID_INTERTRADER_LTD = 2412\nVENDOR_ID_MAXTRONICS = 2413\nVENDOR_ID_SPIDERPLANT = 2414\nVENDOR_ID_SOFTWARECOM_INC = 2415\nVENDOR_ID_ADHERENT_SYSTEMS_LTD = 2416\nVENDOR_ID_KORFMACHER = 2417\nVENDOR_ID_SVENSKA_EDIT_AB = 2418\nVENDOR_ID_MLM5000 = 2419\nVENDOR_ID_INIT = 2420\nVENDOR_ID_TELTONE_CORPORATION = 2421\nVENDOR_ID_FAIRCROSS_COMPUTERS = 2422\nVENDOR_ID_CARYCOM_HK_LTD = 2423\nVENDOR_ID_DOMINIO_PUBLICO_INTERNET_SL = 2424\nVENDOR_ID_BKR_NETWORK_SYSTEMS = 2425\nVENDOR_ID_MARIPOSA_TECHNOLOGY_INC = 2426\nVENDOR_ID_BROCADE_COMMUNICATIONS_SYSTEMS_INC_FORMERLY_NUVIEW_INC = 2427\nVENDOR_ID_UNINETT = 2428\nVENDOR_ID_ACE = 2429\nVENDOR_ID_OY_COMPTEL_AB = 2430\nVENDOR_ID_MMS_COMMUNICATION_GMBH = 2431\nVENDOR_ID_SORTOVA_CONSULTING_GROUP_INC = 2432\nVENDOR_ID_ENVOY_CORPORATION = 2433\nVENDOR_ID_METRON_TECHNOLOGY_LIMITED = 2434\nVENDOR_ID_BROTHER_INDUSTRIES_LTD = 2435\nVENDOR_ID_NETCOM_SYSTEMS_INC = 2436\nVENDOR_ID_KAPSCH_AG = 2437\nVENDOR_ID_SHOMITI_SYSTEMS = 2438\nVENDOR_ID_COMPUTERM_CORPORATION = 2439\nVENDOR_ID_EFFICIENT_IP = 2440\nVENDOR_ID_CERTISOFT_TECNOLOGIA_LTDA = 2441\nVENDOR_ID_EDI_ENTERPRISES_INC = 2442\nVENDOR_ID_CCII_SYSTEMS_PTY_LTD = 2443\nVENDOR_ID_CONNETIX_INC = 2444\nVENDOR_ID_TUNIX_OPEN_SYSTEM_CONSULTANTS = 2445\nVENDOR_ID_GNP_COMPUTERS = 2446\nVENDOR_ID_INTERCOPE_INTERNATIONAL = 2447\nVENDOR_ID_NXT = 2448\nVENDOR_ID_PAN_DACOM_FORCOM_TELEKOMMUNIKATIONSSYSTEME_GMBH = 2449\nVENDOR_ID_AUCO_INC = 2450\nVENDOR_ID_TECNOTREE_FORMERLY_TECNOMEN = 2451\nVENDOR_ID_HELAX_AB = 2452\nVENDOR_ID_OMTOOL_LTD = 2453\nVENDOR_ID_G_CONNECT = 2454\nVENDOR_ID_DYNAMIC_MUTUAL_FUNDS = 2455\nVENDOR_ID_ANTEC_NETWORK_TECHNOLOGIES = 2456\nVENDOR_ID_PREMIERE_PROMOTIONS = 2457\nVENDOR_ID_LANQUEST = 2458\nVENDOR_ID_GUARDIAN_BANK_P_ZAGREB = 2459\nVENDOR_ID_IHLAS_NET = 2460\nVENDOR_ID_WAVTRACE = 2461\nVENDOR_ID_VIGGEN_CORPORATION = 2462\nVENDOR_ID_SAIF_ALI_CO_LTD = 2463\nVENDOR_ID_CARYNET_INFORMATION_CENTER = 2464\nVENDOR_ID_APPLICATION_TELEMATIQUES_NUMERIQUES_ET_RESEAUX_ATNR = 2465\nVENDOR_ID_CHANNELMATIC_LIMT_INC = 2466\nVENDOR_ID_ARROWPOINT_COMMUNICATIONS_INC = 2467\nVENDOR_ID_INGRASYS = 2468\nVENDOR_ID_NETBUILDING = 2469\nVENDOR_ID_PERSONAL_CONFIDENTIAL_KLAUS = 2470\nVENDOR_ID_COMSYS_INTERNATIONAL_BV = 2471\nVENDOR_ID_ADVANCE_TELECOMMUNICATION_KRISADA_ARJINPATTARA = 2472\nVENDOR_ID_GATEKEY_SOLUTIONS_INC = 2473\nVENDOR_ID_AVICI_SYSTEMS_INC = 2474\nVENDOR_ID_SIERRA_TECHNOLOGY_INCJOHN_FISCHERJFISCHERSTISIERRACOM = 2475\nVENDOR_ID_ENCANTO_NETWORKS_INC = 2476\nVENDOR_ID_MOUNT_OLIVE_COLLEGE = 2477\nVENDOR_ID_FUJITSU_ACCESS_LIMITED = 2478\nVENDOR_ID_EDS_GMBH = 2479\nVENDOR_ID_JYRA_RESEARCH_INC = 2480\nVENDOR_ID_SUMMIT_COMMUNICATIONS = 2481\nVENDOR_ID_MINISTRY_OF_TRANSPORT_PUBLIC_WORKS_AND_WATER_MANAGEMENT = 2482\nVENDOR_ID_WINNET_MCS_INC = 2483\nVENDOR_ID_ICG_COMMUNICATIONS = 2484\nVENDOR_ID_CROSSLINK_INTERNET_SERVICES = 2485\nVENDOR_ID_CYGNUS_COMPUTER_ASSOCIATES_LTD = 2486\nVENDOR_ID_PHOENIX_TECHNOLOGIES_LTD = 2487\nVENDOR_ID_INTERNETCLUB = 2488\nVENDOR_ID_CV_MITRA_ADI_PRANATA_IR_FX_WAHYU_HARTONO = 2489\nVENDOR_ID_VIXEL_CORPORATION = 2490\nVENDOR_ID_ATMOSPHERE_NETWORKS_INC = 2491\nVENDOR_ID_MONTANA_TEL_NET = 2492\nVENDOR_ID_JCP_COMPUTER_SERVICES_LTD = 2493\nVENDOR_ID_INTER_CLEAR_SERVICE_LTD = 2494\nVENDOR_ID_INTERNET_SYSTEMS_CONSORTIUM_INC = 2495\nVENDOR_ID_LIGHTSPEED_INTERNATIONAL_INC = 2496\nVENDOR_ID_GAMMAGRAPHX_INC = 2497\nVENDOR_ID_IMANAGE_INC = 2498\nVENDOR_ID_INTERNET_SECURITY_SYSTEMS = 2499\nVENDOR_ID_VIENNA_SYSTEMS_CORPORATION = 2500\nVENDOR_ID_YAGO_SYSTEMS_INC = 2501\nVENDOR_ID_LUNARWAVE_COMMUNICATIONS = 2502\nVENDOR_ID_BANGKOK_PATTAYA_HOSPITAL = 2503\nVENDOR_ID_ROKE_MANOR_RESEARCH_LIMITED_KEITH = 2504\nVENDOR_ID_NEW_OAK_COMMUNICATIONS_INC = 2505\nVENDOR_ID_BUG_FREE_DEVELOPMENT = 2506\nVENDOR_ID_ARC_TECHNOLOGIES_GROUP_INC = 2507\nVENDOR_ID_INTERNET_DYNAMICS_INC = 2508\nVENDOR_ID_DIGITAL_MICROWAVE_CORP = 2509\nVENDOR_ID_BEAR_MOUNTAIN_SOFTWARE = 2510\nVENDOR_ID_ACCESSLAN_COMMUNICATIONSINC = 2511\nVENDOR_ID_CROSSROADS_SYSTEMS_INC = 2512\nVENDOR_ID_CR2A_DI = 2513\nVENDOR_ID_MANTRA_COMMUNICATIONS_INC = 2514\nVENDOR_ID_DISCOVERNET = 2515\nVENDOR_ID_VOCALTEC_COMMUNICATIONS_LTD = 2516\nVENDOR_ID_RIVERSOFT_LIMITED = 2517\nVENDOR_ID_PHAOS_TECHNOLOGY_CORP = 2518\nVENDOR_ID_POWEREDCOM_INC = 2519\nVENDOR_ID_INTERNET_SYSTEMS_INC = 2520\nVENDOR_ID_COMCONSULT = 2521\nVENDOR_ID_OSICOM_TECHNOLOGIES = 2522\nVENDOR_ID_HITRON_TECHNOLOGY_INC = 2523\nVENDOR_ID_RABENSTEIN_ENTERPRISES = 2524\nVENDOR_ID_AT_SISTEMAS_CA = 2525\nVENDOR_ID_IPASS_INC = 2526\nVENDOR_ID_INTERLINEAR_TECHNOLOGY_INC = 2527\nVENDOR_ID_WORLD_ONE_TELECOM_LTD = 2528\nVENDOR_ID_QUADRITEK_SYSTEMS_INC = 2529\nVENDOR_ID_SYSECA = 2530\nVENDOR_ID_NETSPEAK_CORPORATION = 2531\nVENDOR_ID_OPNET_INC = 2532\nVENDOR_ID_MRM_CONSULTING = 2533\nVENDOR_ID_TNSYS_TRADING_NET_SYSTEM = 2534\nVENDOR_ID_JCMT = 2535\nVENDOR_ID_ENDEAVOUR_HILLS_COMPUTER_SERVICES = 2536\nVENDOR_ID_DIVERSIFIED_TECHNOLOGY_INC = 2537\nVENDOR_ID_LATERAL_MANAGEMENT_LIMITED = 2538\nVENDOR_ID_PROXY_SOFTWARE_SYSTEMS_LTD = 2539\nVENDOR_ID_COMBOX_LTD = 2540\nVENDOR_ID_SPECTRIX_CORPORATION = 2541\nVENDOR_ID_ELECTRONICS_AND_TELECOMMUNICATIONS_RESEARCH_INSTITUTE = 2542\nVENDOR_ID_ARLOTTO_COMNET_INC = 2543\nVENDOR_ID_ADVA_AG_OPTICAL_NETWORKING = 2544\nVENDOR_ID_NEWTEC_GMBH_SYSTEMENTWICKLUNG_UND_BERATUNG_HARALD = 2545\nVENDOR_ID_PVT_AS_PVTNET = 2546\nVENDOR_ID_CATHOLIC_UNIVERSITY_OF_PELOTAS = 2547\nVENDOR_ID_CRYPTONYM_CORPORATION = 2548\nVENDOR_ID_AKER_CONSULTORIA_E_INFORMATICA_RODRIGO_ORMONDE = 2549\nVENDOR_ID_ELVIS_PLUS_CO = 2550\nVENDOR_ID_TELEGYR_SYSTEMS = 2551\nVENDOR_ID_NETEGRITY_INC = 2552\nVENDOR_ID_CARDINAL_NETWORK_NEW_ZEALAND_LTD = 2553\nVENDOR_ID_MICRO_INTEGRATED_INNNOVATIONS_PAUL = 2554\nVENDOR_ID_JAYATEK_SDN_BHD = 2555\nVENDOR_ID_CENTRAL_ELECTRONIC_INDUSTRY = 2556\nVENDOR_ID_TRANSCEND_ACCESS_SYSTEMS_INC = 2557\nVENDOR_ID_OUTREACH_COMMUNICATIONS_CORP = 2558\nVENDOR_ID_BOCATEL = 2559\nVENDOR_ID_ATT_GNMC_AMSTERDAM = 2560\nVENDOR_ID_TEAMPHONECOM_LTD = 2561\nVENDOR_ID_SBB_SOFTWARE_BERATUNG_GMBH = 2562\nVENDOR_ID_COMSTAT_DATACOMM_CORPORATION = 2563\nVENDOR_ID_THE_NETWORK_TECHNOLOGY_GROUP = 2564\nVENDOR_ID_AVERY_DENNISON = 2565\nVENDOR_ID_ROHDE_SCHWARZ_GMBH_COKG = 2566\nVENDOR_ID_DATAMEDIA_SA = 2567\nVENDOR_ID_INTEGRIX_INC = 2568\nVENDOR_ID_TELENOR_NOVIT_AS = 2569\nVENDOR_ID_PREFERED_COMMUNICATIONS = 2570\nVENDOR_ID_MUTAH_UNIVERSITY = 2571\nVENDOR_ID_NETWORK_TELESYSTEMS_INC = 2572\nVENDOR_ID_DECISION_SCIENCE_APPLICATIONSINC_SIMEON_FITCH = 2573\nVENDOR_ID_CONCENTRICITY_LLC = 2574\nVENDOR_ID_ARTIZA_NETWORKS_INC = 2575\nVENDOR_ID_COMPUTERSHARE_SYSTEMS_LIMITED = 2576\nVENDOR_ID_EDR_TECHNOLOGIES = 2577\nVENDOR_ID_ABIRNET = 2578\nVENDOR_ID_TRIKOTA_INC = 2579\nVENDOR_ID_DIEBOLD_COMPANY_OF_CANADA_LIMITED_RAJAN_RAMAN = 2580\nVENDOR_ID_PRECISE_CONNECTIVITY_SOLUTIONS = 2581\nVENDOR_ID_ANS_COMMUNICATIONS = 2582\nVENDOR_ID_HYDRO_QUEBEC_TRANSENERGIE = 2583\nVENDOR_ID_RADIOLAN_INC = 2584\nVENDOR_ID_YOUTH_OPPORTUNITIES_UPHELD_INC = 2585\nVENDOR_ID_TERACOM_AB = 2586\nVENDOR_ID_FREEMONT_AVENUE_SOFTWARE_INC = 2587\nVENDOR_ID_POSITRON_FIBER_SYSTEMS = 2588\nVENDOR_ID_CHUO_ELECTRONICS_CO_LTD = 2589\nVENDOR_ID_MINOLTA_CO_LTD = 2590\nVENDOR_ID_RADYNE_CORPORATION = 2591\nVENDOR_ID_NSI_SOFTWARE = 2592\nVENDOR_ID_EXSTREAM_PC = 2593\nVENDOR_ID_SIMULATION_LABORITORIES_INC = 2594\nVENDOR_ID_WEBTV_NETWORKS_INC = 2595\nVENDOR_ID_CREDIT_MANAGEMENT_SOLUTIONS_INC = 2596\nVENDOR_ID_CHISHOLM_TECHNOLOGIES_INC = 2597\nVENDOR_ID_WONDERNET_INTERNATIONAL_CORP = 2598\nVENDOR_ID_PERCPETICS_CORPORATION = 2599\nVENDOR_ID_DISTRIBUTED_SYSTEMS_LOGIC_INC = 2600\nVENDOR_ID_US_WEST_NTERPRISE_NETWORKING_SERVICES = 2601\nVENDOR_ID_INTRASOFT_CORPORATION = 2602\nVENDOR_ID_ALLOT_COMMUNICATIONS = 2603\nVENDOR_ID_SOPHOS_PLC = 2604\nVENDOR_ID_TAYLORMADE_MATH = 2605\nVENDOR_ID_RITTAL_WERK_RUDOLF_LOH_GMBH_COKG = 2606\nVENDOR_ID_LAN_INTERNATIONAL_INC = 2607\nVENDOR_ID_PRECISE_SOFTWARE_SOLUTIONS = 2608\nVENDOR_ID_NEW_PRIME_INC = 2609\nVENDOR_ID_DATAHAVEN_PROJECT_INC = 2610\nVENDOR_ID_INTERSPEED = 2611\nVENDOR_ID_MPI_TECH_A_S_FORMERLY_I_DATA_INTERNATIONAL_A_S = 2612\nVENDOR_ID_ACCELERATED_NETWORKS_INC = 2613\nVENDOR_ID_FORSCHUNGSZENTRUM_KARLSRUHE_GMBH = 2614\nVENDOR_ID_IXMICRO = 2615\nVENDOR_ID_CAO_DIFFUSION = 2616\nVENDOR_ID_COMPUTER_COMMUNICATIONS_CONSULTING_INC = 2617\nVENDOR_ID_TRACEWELL_SYSTEMS_INC = 2618\nVENDOR_ID_ADVANCED_INTERNET_MANAGEMENT_INC = 2619\nVENDOR_ID_CHECK_POINT_SOFTWARE_TECHNOLOGIES_LTD = 2620\nVENDOR_ID_MARTIN_ZWERNEMANN = 2621\nVENDOR_ID_AMAREX_TECHNOLOGY_INC = 2622\nVENDOR_ID_ASUSTEK_COMPUTER_INC = 2623\nVENDOR_ID_WAVE_WIRELESS_NETWORKING = 2624\nVENDOR_ID_FCI_TELECOMMUNICATIONS_CORPORATION = 2625\nVENDOR_ID_ENTUITY_LIMITED_FORMERLY_PROSUM_LTD = 2626\nVENDOR_ID_TCAM_SYSTEMS_UK_LTD = 2627\nVENDOR_ID_NATURAL_MICROSYSTEMS = 2628\nVENDOR_ID_CITY_OF_WAUWATOSA = 2629\nVENDOR_ID_THE_ESYS_CORPORATION = 2630\nVENDOR_ID_ALTVATER_AIRDATA_SYSTEMS_GMBH_PETER_HAAF = 2631\nVENDOR_ID_PT_WIRYAMAS_SINAR_PALAPA = 2632\nVENDOR_ID_COMPUCENTRE = 2633\nVENDOR_ID_WESTERN_TELEMATIC_INC = 2634\nVENDOR_ID_ADTX = 2635\nVENDOR_ID_JUNIPER_NETWORKS_INC = 2636\nVENDOR_ID_APTIS_COMMUNICATIONS_INC = 2637\nVENDOR_ID_BSTPROMARK = 2638\nVENDOR_ID_EDGEPOINT_NETWORKS_INC = 2639\nVENDOR_ID_AIMETRIX_INCORPORATED = 2640\nVENDOR_ID_ARCTUNN_CONSULTING = 2641\nVENDOR_ID_COMPUTEL_ELECTRONICA_SAJOSE = 2642\nVENDOR_ID_FLOWWISE_NETWORKS_INC = 2643\nVENDOR_ID_SYNAPTYX_CORPORATION = 2644\nVENDOR_ID_FIRST_UNION_NATIONAL_BANK = 2645\nVENDOR_ID_KOMMUNIKATOR_GMBH = 2646\nVENDOR_ID_C2S_COMMUNICATION_SYSTEME_SERVICE = 2647\nVENDOR_ID_SILIGOM = 2648\nVENDOR_ID_RADCOM_LTD = 2649\nVENDOR_ID_GO_AHEAD_SOFTWARE_INC = 2650\nVENDOR_ID_SPACE_CONNECTION_NV = 2651\nVENDOR_ID_MERCK_MEDCO_MANAGED_CARE_LLC = 2652\nVENDOR_ID_CITY_COM_BV = 2653\nVENDOR_ID_RS_BICK_MOBILFUNK_GMBH_ANDREAS = 2654\nVENDOR_ID_KEPLER_SOFTWARE_LTD = 2655\nVENDOR_ID_BANQUE_PARIBAS = 2656\nVENDOR_ID_ZITECH_NET = 2657\nVENDOR_ID_CENTURY_ANALYSIS_INC = 2658\nVENDOR_ID_TALENT_DEVELOPMENT_GMBH_HANS_GEORG = 2659\nVENDOR_ID_COPPERCOM_INC = 2660\nVENDOR_ID_YUTAKA_ELECTRIC_MFG_CO_LTD = 2661\nVENDOR_ID_SBF_BOURSE_DE_PARIS = 2662\nVENDOR_ID_ECONOMATICA = 2663\nVENDOR_ID_GVN_TECHNOLOGIES = 2664\nVENDOR_ID_OLSY_UK = 2665\nVENDOR_ID_ROOM_42_SOFTWARE_LLC = 2666\nVENDOR_ID_CIRILIUM = 2667\nVENDOR_ID_TAVVE_SOFTWARE_CO = 2668\nVENDOR_ID_SOLARI_DI_UDINE = 2669\nVENDOR_ID_NETVENTURE_INC = 2670\nVENDOR_ID_CONNECTED_SYSTEMS_GROUP = 2671\nVENDOR_ID_CORPORATE_SOFTWARE_TECHNOLOGIES_INT_INC = 2672\nVENDOR_ID_FIBEX_SYSTEMS = 2673\nVENDOR_ID_CLAUDE_JARDINE_DESIGN = 2674\nVENDOR_ID_NET_MARKETING_INC = 2675\nVENDOR_ID_IBP_INC = 2676\nVENDOR_ID_RD6_INC = 2677\nVENDOR_ID_MASSMEDIA_COMMUNICATIONS_INC = 2678\nVENDOR_ID_NEXANS_SUISSE_SA = 2679\nVENDOR_ID_PEAK_AUDIO_INC = 2680\nVENDOR_ID_SIA_YIU = 2681\nVENDOR_ID_DPS_INC = 2682\nVENDOR_ID_CALLISTO_SOFTWARE = 2683\nVENDOR_ID_VIAVIDEO_COMMUNICATIONS_INC = 2684\nVENDOR_ID_SEQUEL_TECHNOLOGY_CORPORATION = 2685\nVENDOR_ID_WI_LAN_INC = 2686\nVENDOR_ID_NETWORK_SYSTEM_TECHNOLOGIES_INC = 2687\nVENDOR_ID_CENTER_TECHNOLOGY = 2688\nVENDOR_ID_COBY_ROBERTS = 2689\nVENDOR_ID_NETRONIX_INC_2 = 2690\nVENDOR_ID_NETWORK_COMPUTER_INCORPORATED = 2691\nVENDOR_ID_WEBWEAVING = 2692\nVENDOR_ID_INSTITUT_JOZEF_STEFAN = 2693\nVENDOR_ID_ELDAT_COMMUNICATION_LTD = 2694\nVENDOR_ID_METACOMMUNICATIONS_INC = 2695\nVENDOR_ID_DIGITAL_VIDEO_BROADCASTING_DVB = 2696\nVENDOR_ID_BAYLY_COMMUNICATIONS_INC = 2697\nVENDOR_ID_POZNAN_SUPERCOMPUTING_AND_NETWORKING_CENTER_POZMAN = 2698\nVENDOR_ID_PRINTER_WORKING_GROUP = 2699\nVENDOR_ID_DIRECTV = 2700\nVENDOR_ID_ARGON_NETWORKS_INC = 2701\nVENDOR_ID_WACOS_INC = 2702\nVENDOR_ID_OBJECT_ZONE_AB = 2703\nVENDOR_ID_ICCC_A_S = 2704\nVENDOR_ID_SECUDE_IT_SECURITY_GMBH = 2705\nVENDOR_ID_INSTITUTE_FOR_APPLIED_INFORMATION_PROCESSING_AND_COMMUNICATIONSGRAZ_UNIVERSITY_OF_TECHNOLOGY = 2706\nVENDOR_ID_INTERNATIONAL_NETWORK_SERVICES = 2707\nVENDOR_ID_JNR_SYSTEMS = 2708\nVENDOR_ID_CONGREVE_COMPUTING_LTD = 2709\nVENDOR_ID_NORTHROP_GRUMMAN_SURVEILLANCE_AND_BATTLE_MANAGEMENT_SYSTEMS = 2710\nVENDOR_ID_LITTLEWOODS_STORES_LTD = 2711\nVENDOR_ID_ICE_TEL_TLCA = 2712\nVENDOR_ID_MAUSWERKS_INC = 2713\nVENDOR_ID_DEP_OF_SIGNAL_THEORY_AND_COMMUNICATIONS_UPC = 2714\nVENDOR_ID_ZAPEX_TECHNOLOGIESN_INC = 2715\nVENDOR_ID_GLUECK_KANJA_TECHNOLOGY_AG = 2716\nVENDOR_ID_ALCATEL_TELSPACE = 2717\nVENDOR_ID_INTERCALL = 2718\nVENDOR_ID_TOWNSEND_ANALYTICS_LTD = 2719\nVENDOR_ID_NORCOM_INFORMATIONSTECHNOLOGIE_UND_UNTERNEHMENSBERATUNG_GMBH = 2720\nVENDOR_ID_NEWS_INTERNET_SERVICES = 2721\nVENDOR_ID_GEORGIA_TECH_RESEARCH_INSTITUTE = 2722\nVENDOR_ID_GUERRILLA_MAIL_INC = 2723\nVENDOR_ID_EASYSTREET_ONLINE_SERVICES_INC = 2724\nVENDOR_ID_ART_TECHNOLOGY_GROUP_INC = 2725\nVENDOR_ID_CAPITAL_ONE_FINANCIAL_CORP = 2726\nVENDOR_ID_SFA_INC = 2727\nVENDOR_ID_PACKARD_BELL_NEC_INC = 2728\nVENDOR_ID_EMPIRE_NET = 2729\nVENDOR_ID_OTTOSEN = 2730\nVENDOR_ID_DIALOGDESIGN = 2731\nVENDOR_ID_INNOVATIVE_DATA_TECHNOLOGY = 2732\nVENDOR_ID_GROUP_2000_NEDERLAND_BV = 2733\nVENDOR_ID_DIGITAL_LIGHTWAVE_INC = 2734\nVENDOR_ID_MIBS_R_US = 2735\nVENDOR_ID_ETHERWAN_SYSTEMS_INC = 2736\nVENDOR_ID_CORDLESS_TECHNOLOGY_A_S = 2737\nVENDOR_ID_PUNJAB_COMMUNICATIONS_LTDPUNCOM = 2738\nVENDOR_ID_TANSTAAFL_CONSULTING = 2739\nVENDOR_ID_ARTEVEA = 2740\nVENDOR_ID_CALIRNET_SYSTEMS_INC = 2741\nVENDOR_ID_MANAGECOM = 2742\nVENDOR_ID_RFL_ELECTRONICS_INC = 2743\nVENDOR_ID_SARNOFF_REAL_TIME_CORPORATION = 2744\nVENDOR_ID_LANCAST_INC = 2745\nVENDOR_ID_MARTIN_COMMUNICATIONS = 2746\nVENDOR_ID_DIRIG_SOFTWARE_INC = 2747\nVENDOR_ID_ICL_RETAIL_SYSTEMS_EUROPE = 2748\nVENDOR_ID_APTIA_INC = 2749\nVENDOR_ID_WAVECOM_ELECTRONICS_INC = 2750\nVENDOR_ID_GLOBALCAST_COMMUNICATIONS_INC = 2751\nVENDOR_ID_MCCOMM_INTERNATIONAL_BV = 2752\nVENDOR_ID_ARGO_DATA_RESOURCE_CORPORATION_THOMAS = 2753\nVENDOR_ID_EXCEL_SWITCHING_CORPORATION = 2754\nVENDOR_ID_PALOMAR_COMMUNICATIONS_INC = 2755\nVENDOR_ID_NETSTART_INC = 2756\nVENDOR_ID_SMARTCOMMERCE_SOLUTIONS = 2757\nVENDOR_ID_UNIVERSAL_MICRO_APPLICATIONS_INC = 2758\nVENDOR_ID_SNS_CONSULTANTS = 2759\nVENDOR_ID_ENHANCED_MESSAGING_SYSTEM_INC = 2760\nVENDOR_ID_INFORMATICA_SPA = 2761\nVENDOR_ID_NETGAME_LTD = 2762\nVENDOR_ID_INTELLINET_TECHNOLOGIES_INC = 2763\nVENDOR_ID_ACXIOM_CORPORATION = 2764\nVENDOR_ID_DAFUR_GMBH = 2765\nVENDOR_ID_PLATFORM_COMPUTING_CORPORATION = 2766\nVENDOR_ID_AUTOMOTIVE_PRODUCTS_PLC = 2767\nVENDOR_ID_RANDD_COMPUTER_SERVICES_RAZVAN = 2768\nVENDOR_ID_KNUERR_AG = 2769\nVENDOR_ID_EUROTEL_PRAHA_SRO = 2770\nVENDOR_ID_INLAB_SOFTWARE_GMBH = 2771\nVENDOR_ID_INTERSOLVE_TECHNOLOGIES = 2772\nVENDOR_ID_REDSTONE_COMMUNICATIONS_INC = 2773\nVENDOR_ID_ALGORITHMIC_RESEARCH_LTD = 2774\nVENDOR_ID_AGT_INTERNATIONAL_INC = 2775\nVENDOR_ID_FOURTHTRACK_SYSTEMS = 2776\nVENDOR_ID_FLEXTEL_SPA = 2777\nVENDOR_ID_WARPSPEED_COMPUTERS = 2778\nVENDOR_ID_21C3 = 2779\nVENDOR_ID_NEO_NETWORKS_INC = 2780\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_MADRID_UPM = 2781\nVENDOR_ID_BOM_COMPUTER_SERVICES_LTD = 2782\nVENDOR_ID_CONTROL_SYSTEMS_INTERNATIONAL = 2783\nVENDOR_ID_BBCOM_BROADBAND_COMMUNICATIONS_GMBH_CO_KG = 2784\nVENDOR_ID_TECNOPRO_SA = 2785\nVENDOR_ID_POLITECNICO_DI_TORINO = 2786\nVENDOR_ID_ING_GROUP = 2787\nVENDOR_ID_WYTEC_INCORPORATED_DAVE = 2788\nVENDOR_ID_MAURO_ENTERPRISE = 2789\nVENDOR_ID_ROADRUNNER = 2790\nVENDOR_ID_DETERMINISTIC_NETWORKS_INC = 2791\nVENDOR_ID_SPRINT_PCS = 2792\nVENDOR_ID_INTERACTIVE_INTELLIGENCE = 2793\nVENDOR_ID_JAYCOR = 2794\nVENDOR_ID_EDIFY_CORPORATION = 2795\nVENDOR_ID_FOX_IT_LTD = 2796\nVENDOR_ID_UNIVERSITY_OF_PENNSYLVANIA = 2797\nVENDOR_ID_METAWAVE_COMMUNICATIONS_CORP = 2798\nVENDOR_ID_ENTERPRISE_SOLUTIONS_LTD = 2799\nVENDOR_ID_CBL_GMBH = 2800\nVENDOR_ID_ADP_DEALER_SERVICES = 2801\nVENDOR_ID_EFKON = 2802\nVENDOR_ID_SICAN_GMBH = 2803\nVENDOR_ID_KEYTREND_INC = 2804\nVENDOR_ID_ACC_TELENTERPRISES = 2805\nVENDOR_ID_EBA = 2806\nVENDOR_ID_TELEWARE_CO_LTD = 2807\nVENDOR_ID_EFUSION_INC = 2808\nVENDOR_ID_PARTICIPANTS_TRUST_COMPANY = 2809\nVENDOR_ID_PEOPLESOFT_INC = 2810\nVENDOR_ID_ENTRATA_COMMUNICATION = 2811\nVENDOR_ID_MUSICSCOM = 2812\nVENDOR_ID_FIRST_TELECOM_PLC = 2813\nVENDOR_ID_TELESNAP_GMBH = 2814\nVENDOR_ID_NEWPOINT_TECHNOLOGIES_INC = 2815\nVENDOR_ID_TE = 2816\nVENDOR_ID_DISNEY_REGIONAL_ENTERTAINMENT_INC = 2817\nVENDOR_ID_RAMP_NETWORKS_INC = 2818\nVENDOR_ID_OPEN_SOFTWARE_ASSOCIATES = 2819\nVENDOR_ID_PROCOM_TECHNOLOGY = 2820\nVENDOR_ID_UNIVERSITY_OF_NOTRE_DAME_OFFICE_OF_INFORMATION_TECHNOLOGY = 2821\nVENDOR_ID_ARQUITECTURA_ANIMADA = 2822\nVENDOR_ID_SUMBHA_HOLOGRAMS_PACKAGING_SYSTEMS_LTD = 2823\nVENDOR_ID_THE_A_CONSULTING_TEAM_INC = 2824\nVENDOR_ID_WORLDGATE_COMMUNICATIONS_INC = 2825\nVENDOR_ID_TOA_ELECTRONICS_LTD = 2826\nVENDOR_ID_SYTEX_SYSTEMS_CORP = 2827\nVENDOR_ID_ZELL_DISTRIBUTORS = 2828\nVENDOR_ID_YRLESS_INTERNET_CORPORATION = 2829\nVENDOR_ID_HALO_TECHNOLOGIES = 2830\nVENDOR_ID_BEIJING_UNIV_OF_POSTS_TELECOM_TRAINING_CENTER = 2831\nVENDOR_ID_VIRTUAL_DATA_SYSTEMS_INC = 2832\nVENDOR_ID_NETDOX_INC = 2833\nVENDOR_ID_EXPERT_COMPUTER_SERVICE_JIM_MAC = 2834\nVENDOR_ID_DICTAPHONE = 2835\nVENDOR_ID_UNEX_TECHNOLOGY_CORPORATION = 2836\nVENDOR_ID_GLOBAL_MOBILITY_SYSTEMS_INC = 2837\nVENDOR_ID_TFM_ASSOCIATES = 2838\nVENDOR_ID_TELERAN_TECHNOLOGIES_LP_CARMEN_RANDAZZO = 2839\nVENDOR_ID_DIGITAL_TELECOMMUNICATIONS_INC = 2840\nVENDOR_ID_KB_INTERNET_LTD = 2841\nVENDOR_ID_AGRI_DATALOG = 2842\nVENDOR_ID_BRAID_SYSTEMS_LIMITED = 2843\nVENDOR_ID_NEWSNET_ITN = 2844\nVENDOR_ID_JTCS = 2845\nVENDOR_ID_KEYCORP_PTY_LTD = 2846\nVENDOR_ID_GTE_INTERNETWORKING = 2847\nVENDOR_ID_ROYALBLUE_TECHNOLOGIES_PLC_TREVOR_GOFF = 2848\nVENDOR_ID_UR_CONSULTORES_ARGENTINA = 2849\nVENDOR_ID_TEVYCOM_FAPECO_SA = 2850\nVENDOR_ID_POLARIS_COMMUNICATIONS = 2851\nVENDOR_ID_COMPETITIVE_AUTOMATION_INC = 2852\nVENDOR_ID_IDEXX_LABORATORIES_INC = 2853\nVENDOR_ID_NETWORK_COMPUTING_TECHNOLOGIES_INC = 2854\nVENDOR_ID_AXXCELERA_BROADBAND_WIRELESS = 2855\nVENDOR_ID_CABLEWARE_ELECTRONICS = 2856\nVENDOR_ID_NETWORK_POWER_AND_LIGHT = 2857\nVENDOR_ID_CLARENT_CORPORATION = 2858\nVENDOR_ID_KINGSTON_SCL = 2859\nVENDOR_ID_NETVEST = 2860\nVENDOR_ID_VSN_SYSTEMEN_BV = 2861\nVENDOR_ID_NORTHWEST_CONSULTING_SERVICES_RANDY = 2862\nVENDOR_ID_THOMSON_INC = 2863\nVENDOR_ID_DIGITEL_S_A_INDUSTRIA_ELETRONICA = 2864\nVENDOR_ID_NORTEL_NETWORKS_OPTICAL_METRO = 2865\nVENDOR_ID_TECHNICAL_INSIGHTS = 2866\nVENDOR_ID_NKF_ELECTRONICS = 2867\nVENDOR_ID_GLASSHOUSE_BUSINESS_NETWORKS_BV = 2868\nVENDOR_ID_VSI_ENTERPRISES = 2869\nVENDOR_ID_E_TECH_INC = 2870\nVENDOR_ID_ULTRADNS = 2871\nVENDOR_ID_UNISOURCE_BUSINESS_NETWORKS_NEDERLAND_BV = 2872\nVENDOR_ID_AGENTICS = 2873\nVENDOR_ID_OTC_TELECOM_INC = 2874\nVENDOR_ID_GUIDEV_INTERNATIONAL_INC = 2875\nVENDOR_ID_COTHERN_COMPUTER_SYSTEMS = 2876\nVENDOR_ID_ARBINET_COMMUNICATIONS_INC = 2877\nVENDOR_ID_FAXFORWARD_CANADA_LTD = 2878\nVENDOR_ID_SONUS_NETWORKS_INC = 2879\nVENDOR_ID_IPHIGHWAY_LTD = 2880\nVENDOR_ID_CLARION = 2881\nVENDOR_ID_COMTROL_CORPORATION = 2882\nVENDOR_ID_COHERENT_COMMUNICATIONS_SYSTEMS_INC = 2883\nVENDOR_ID_ADS_NETWORKS = 2884\nVENDOR_ID_CHICAGO_SOFT_LTD = 2885\nVENDOR_ID_NETBALANCE = 2886\nVENDOR_ID_AS_PROEKSPERT = 2887\nVENDOR_ID_ADFM_MULTIMEDIA_INTERNET = 2888\nVENDOR_ID_PRAXIS_INTERNATIONAL_INC = 2889\nVENDOR_ID_SOLECTEK_CORPORATION = 2890\nVENDOR_ID_NANOSPACE_INC = 2891\nVENDOR_ID_KAPS_INC = 2892\nVENDOR_ID_COMPUTER_ASSOCIATES_ITALY = 2893\nVENDOR_ID_MAINSAIL_NETWORKS_INC = 2894\nVENDOR_ID_EDS_SSMC_TOOLS_SUPPORT_AND_DEVELOPMENT = 2895\nVENDOR_ID_BREECE_HILL_TECHNOLOGIES_INC = 2896\nVENDOR_ID_ATT_CAPITAL_CORP_ERNEST = 2897\nVENDOR_ID_HIGHGROUND_SYSTEMS_INC_THOMAS_BAKERMAN = 2898\nVENDOR_ID_OMNIA_COMMUNICATIONS_INC = 2899\nVENDOR_ID_MER_TELEMANAGEMENT_SOLUTIONS = 2900\nVENDOR_ID_REPLICASE_INC = 2901\nVENDOR_ID_MICROLOG_CORPORATION = 2902\nVENDOR_ID_SMARTWAYS_TECHNOLOGY_LIMITED = 2903\nVENDOR_ID_COMPUTER_SERVICES = 2904\nVENDOR_ID_TRUMPET_SOFTWARE_INTERNATIONAL_PTY_LTD = 2905\nVENDOR_ID_RSI_SOLUTIONS_LTD = 2906\nVENDOR_ID_C_COR_ELECTRONICS = 2907\nVENDOR_ID_CASTLE_NETWORKS_INC = 2908\nVENDOR_ID_NEXABIT_NETWORKS_LLC = 2909\nVENDOR_ID_GENERAL_ELECTRIC_COMPANY = 2910\nVENDOR_ID_OBJECTIVE_SOFTWARE_SERVICES_INC = 2911\nVENDOR_ID_AMERISTAR_TECHNOLOGIES_CORP = 2912\nVENDOR_ID_HYCOR_BIOMEDICAL_INC = 2913\nVENDOR_ID_FELLESDATA_AS = 2914\nVENDOR_ID_NETWORK_ENGINES_INC = 2915\nVENDOR_ID_DAIMLER_BENZ_AG = 2916\nVENDOR_ID_DATA_INTERFACE_SYSTEMS_CORP = 2917\nVENDOR_ID_SYMMETRY_COMMUNICATIONS_SYSTEMS_INC = 2918\nVENDOR_ID_RAMBUS_CORP = 2919\nVENDOR_ID_WILL_DO_INFORMATION_SERVICES = 2920\nVENDOR_ID_SWISS_PHARMA_CONTRACT_LTD = 2921\nVENDOR_ID_I_O_CORPORATION = 2922\nVENDOR_ID_FORMULA_CONSULTANTS_INC = 2923\nVENDOR_ID_STAR_TV_SATELLITE_TELEVISION_ASIA_REGION_LTD = 2924\nVENDOR_ID_CYCLADES_CORPORATION = 2925\nVENDOR_ID_SONOMA_SYSTEMS_INC = 2926\nVENDOR_ID_JACKSONVILLE_ELECTRIC_AUTHORITY = 2927\nVENDOR_ID_NET_INSIGHT_AB = 2928\nVENDOR_ID_QUALLABY = 2929\nVENDOR_ID_VALICERT_INC = 2930\nVENDOR_ID_GADC_NETWORKS = 2931\nVENDOR_ID_TERMA_ELEKTRONIK_AS = 2932\nVENDOR_ID_FLOWARE_SYSTEM_SOLUTIONS_LTD = 2933\nVENDOR_ID_CITICORP = 2934\nVENDOR_ID_QUANTUM_CORP_FORMERLY_PATHLIGHT_TECHNOLOGY_INC = 2935\nVENDOR_ID_PROMINENCE_DOT_COM_INC = 2936\nVENDOR_ID_DEUTSCHE_TELEKOM_AG = 2937\nVENDOR_ID_PROGINET_CORPORATION = 2938\nVENDOR_ID_INFOEXPRESS_INC = 2939\nVENDOR_ID_ARGENT_SOFTWARE = 2940\nVENDOR_ID_READYCOM_INC = 2941\nVENDOR_ID_COCOM_A_S = 2942\nVENDOR_ID_OBJTECH_SOFTWARE = 2943\nVENDOR_ID_TOP_LAYER_NETWORKS_INC = 2944\nVENDOR_ID_TDSOFT_COMMUNICATIONS_SOFTWARE_LTD = 2945\nVENDOR_ID_SWITCH = 2946\nVENDOR_ID_BEST_POWER_A_DIVISION_OF_GENERAL_SIGNAL_POWER_SYSTEMS = 2947\nVENDOR_ID_TELESUITE_CORPORATION = 2948\nVENDOR_ID_GLOBAL_QUEST_CONSALTANCE = 2949\nVENDOR_ID_AMPERSAND_INC = 2950\nVENDOR_ID_NENTEC = 2951\nVENDOR_ID_TE_SOFT = 2952\nVENDOR_ID_IMEDIA = 2953\nVENDOR_ID_UNIVERSITAET_BIELEFELD_TECHNISCHE_FAKULTAET = 2954\nVENDOR_ID_PSINET_UK_LTD = 2955\nVENDOR_ID_INFOLIBRIA_INC = 2956\nVENDOR_ID_ERICSSON_COMMUNICATIONS_LTD = 2957\nVENDOR_ID_SECURE_NETWORK_SOLUTIONS_LTDBRENDAN_SIMON = 2958\nVENDOR_ID_WORKSTATION_SOLUTIONS_INC = 2959\nVENDOR_ID_NATIONAL_LANDSCAPE_ASSN_INC = 2960\nVENDOR_ID_DIALOGS_SOFTWARE_GMBH = 2961\nVENDOR_ID_NETWISE_AB = 2962\nVENDOR_ID_SECURITY_DYNAMICS_TECHNOLOGY_INC = 2963\nVENDOR_ID_ZETA_COMMUNICATIONS_LTD = 2964\nVENDOR_ID_SYSCOM_LTD = 2965\nVENDOR_ID_DIGITAL_CHOREOGRAPHICS = 2966\nVENDOR_ID_CABLEDATA_INC = 2967\nVENDOR_ID_ALLEN_TELECOM_SYSTEMS = 2968\nVENDOR_ID_CHARLES_CRAFT = 2969\nVENDOR_ID_SUNSTONE_ENTERPRISES = 2970\nVENDOR_ID_CORECESS_INC = 2971\nVENDOR_ID_NETWORK_ALCHEMY_INC = 2972\nVENDOR_ID_INTEGRAL_ACCESS_INC = 2973\nVENDOR_ID_IP_METRICS_SOFTWARE_INC = 2974\nVENDOR_ID_NOTARIUS_TSIN_INC = 2975\nVENDOR_ID_SPHAIRON_TECHNOLOGIES_GMBH_FORMERLY_PHILIPS_MULTIMEDIA_NETWORK_SYSTEMS_GMBH = 2976\nVENDOR_ID_TEUBNER_AND_ASSOCIATES_INC = 2977\nVENDOR_ID_IMAGECOM_LTD = 2978\nVENDOR_ID_WAVERIDER_COMMUNICATIONS_INC = 2979\nVENDOR_ID_ENT_EMPRESA_NACIONAL_DE_TELECOMUNICACOES_SA = 2980\nVENDOR_ID_DUKE_ENERGY = 2981\nVENDOR_ID_DEUTSCHES_PATENTAMT = 2982\nVENDOR_ID_SEMA_GROUP_GMBH_TS_V = 2983\nVENDOR_ID_KEYCODE_STYLE_LTD = 2984\nVENDOR_ID_BAY_SYSTEMS_CONSULTING_INC = 2985\nVENDOR_ID_QIANGJIN_CORPLTD = 2986\nVENDOR_ID_IPIVOT = 2987\nVENDOR_ID_CONSULTRONICS_DEVELOPMENT_LTD = 2988\nVENDOR_ID_UNIVERSITY_OF_NORTH_LONDON = 2989\nVENDOR_ID_ILLUMINATA_INC = 2990\nVENDOR_ID_ENTERPRISE_IT_INC = 2991\nVENDOR_ID_CYBERTEL_INCJONATHAN_CHU = 2992\nVENDOR_ID_CONVERGENET_TECHNOLOGIES_INC = 2993\nVENDOR_ID_TELIGENT = 2994\nVENDOR_ID_ACUCOMM_INC = 2995\nVENDOR_ID_SPECTRAWORKS_INC = 2996\nVENDOR_ID_REDTITAN = 2997\nVENDOR_ID_ANDERSON_CONSULTING = 2998\nVENDOR_ID_AMERICAN_FAMILY_INSURANCE = 2999\nVENDOR_ID_IDB_SYSTEMS_A_DIVISION_OF_WORLDCOM_INC = 3000\nVENDOR_ID_BAILO = 3001\nVENDOR_ID_ADAXIS_GROUP = 3002\nVENDOR_ID_PACKET_ENGINES_INC = 3003\nVENDOR_ID_SOFTWIRE_CORPORATION = 3004\nVENDOR_ID_TDS_TELECOMS_DATA_SYSTEMS = 3005\nVENDOR_ID_HCI_TECHNOLOGIES = 3006\nVENDOR_ID_TOPCALL_INTERNATIONAL = 3007\nVENDOR_ID_LOGMATRIX_INC_FORMERLY_OPEN_SERVICE = 3008\nVENDOR_ID_SYNCLAYER_INC = 3009\nVENDOR_ID_UNIVERSITY_OF_AIZU = 3010\nVENDOR_ID_VIDEOSERVER_INC = 3011\nVENDOR_ID_SPACE_TELECOMMUNICATIONS_SYSTEMS_PTE_LTD = 3012\nVENDOR_ID_BICOL_INFONET_SYSTEMINC = 3013\nVENDOR_ID_MEDIASOFT_TELECOM = 3014\nVENDOR_ID_NETPRO_COMPUTING_INC = 3015\nVENDOR_ID_OZEMAIL_PTY_LTD = 3016\nVENDOR_ID_ARCXEL_TECHNOLOGIES_INC = 3017\nVENDOR_ID_ENTERNET_CORPORATION = 3018\nVENDOR_ID_JONES_WALDO_HOLBROOK_MCDONOUGH = 3019\nVENDOR_ID_UNIVERSITY_ACCESS = 3020\nVENDOR_ID_SENDIT_AB = 3021\nVENDOR_ID_TELECOM_SCIENCES_CORPORATION_LIMITED = 3022\nVENDOR_ID_QUALITY_QUORM_INC = 3023\nVENDOR_ID_GRAPEVINE_SYSTEMS_INC = 3024\nVENDOR_ID_THE_PANDA_PROJECT_INC = 3025\nVENDOR_ID_MISSION_CONTROL_DEVELOPMENT = 3026\nVENDOR_ID_IONA_TECHNOLOGIES_LTD = 3027\nVENDOR_ID_DIALOGIC_CORPORATION = 3028\nVENDOR_ID_DIGITAL_DATA_SECURITY = 3029\nVENDOR_ID_ISCNI = 3030\nVENDOR_ID_DAO_CONSULTING_LLC = 3031\nVENDOR_ID_BEAUFORT_MEMORIAL_HOSPITAL = 3032\nVENDOR_ID_INFORMATIONSTECHNIK_DR_HANSMEYER = 3033\nVENDOR_ID_URMET_SUD_SPA = 3034\nVENDOR_ID_AVESTA_TECHNOLOGIES_INC = 3035\nVENDOR_ID_HYUNDAI_ELECTRONICS_AMERICA = 3036\nVENDOR_ID_DMV_LTD = 3037\nVENDOR_ID_FAX_INTERNATIONAL_INC = 3038\nVENDOR_ID_MIDAMERICAN_ENERGY_COMPANY_MEC = 3039\nVENDOR_ID_BELLSOUTHNET = 3040\nVENDOR_ID_ASSURED_ACCESS_TECHNOLOGY_INC = 3041\nVENDOR_ID_LOGICON_EAGLE_TECHNOLOGY = 3042\nVENDOR_ID_FREQUENTIS_GMBH = 3043\nVENDOR_ID_ISIS_2000 = 3044\nVENDOR_ID_JAMES_E_GRAY_ATTY = 3045\nVENDOR_ID_JAMAICA_CABLE_TV_INTERNET_SERVICES = 3046\nVENDOR_ID_INFORMATION_TECHNOLOGY_CONSULTANTS_PTY_LTD = 3047\nVENDOR_ID_LINICKGRPCOM = 3048\nVENDOR_ID_YANKEE_KNOW_HOW = 3049\nVENDOR_ID_SEAH_GROUP = 3050\nVENDOR_ID_CINCO_NETWORKS_INC = 3051\nVENDOR_ID_ASENTRIA_CORPORATION = 3052\nVENDOR_ID_GENIE_TELECOMMUNICATION_INC = 3053\nVENDOR_ID_IXIA_COMMUNICATIONS = 3054\nVENDOR_ID_TRANSMETA_CORPORATION = 3055\nVENDOR_ID_SYSTEMSOFT_CORP = 3056\nVENDOR_ID_JASPAL_MIRACLES_LTD = 3057\nVENDOR_ID_T_SYSTEMS = 3058\nVENDOR_ID_SISLER_PROMOTIONS_INC = 3059\nVENDOR_ID_ICE_MAN_REFRIGERATION = 3060\nVENDOR_ID_LISTING_SERVICE_SOLUTIONS_INC = 3061\nVENDOR_ID_JOVIAN_NETWORKS = 3062\nVENDOR_ID_ELEBRA_COM_DADOS = 3063\nVENDOR_ID_SAFETRAN_SYSTEMS = 3064\nVENDOR_ID_VIDEO_NETWORK_COMMUNICATIONS_INC = 3065\nVENDOR_ID_PHASECOM_LTD = 3066\nVENDOR_ID_EUROCONTROL = 3067\nVENDOR_ID_SILVERSTREAM_SOFTWARE_INC = 3068\nVENDOR_ID_COWNET = 3069\nVENDOR_ID_WORLD_ACCESS_INC = 3070\nVENDOR_ID_VIRTUAL_LINE_LLP = 3071\nVENDOR_ID_INTEGRATED_CONCEPTS_LLP = 3072\nVENDOR_ID_EXABYTE_CORPORATION = 3073\nVENDOR_ID_INTERACTIVE_MEDIA_CORPORATION = 3074\nVENDOR_ID_NETCORE_SYSTEMS_INC = 3075\nVENDOR_ID_ALTIGA_NETWORKS_INC = 3076\nVENDOR_ID_NATIONAL_CENTER_FOR_SUPERCOMPUTING_APPLICATIONS = 3077\nVENDOR_ID_EMASS_INC = 3078\nVENDOR_ID_PRIMA_TELEMATIC = 3079\nVENDOR_ID_BACKWEB_TECHNOLOGIES = 3080\nVENDOR_ID_NTP_SOFTWARE = 3081\nVENDOR_ID_PBS_A_S = 3082\nVENDOR_ID_WQUINN_ASSOCIATES_INC = 3083\nVENDOR_ID_QUZA_RACAL_INTEGRALIS = 3084\nVENDOR_ID_COSINE_COMMUNICATIONS = 3085\nVENDOR_ID_PIPELINKS_INC = 3086\nVENDOR_ID_WAILAN_COMMUNICATIONS_INC = 3087\nVENDOR_ID_AXENT_TECHNOLOGIES = 3088\nVENDOR_ID_SPAWAR = 3089\nVENDOR_ID_AIRSYS_ATM_SA = 3090\nVENDOR_ID_WHITER_MORN_SOFTWARE_INC = 3091\nVENDOR_ID_ENTV = 3092\nVENDOR_ID_CYBERTAN_TECHNOLOGY_INC = 3093\nVENDOR_ID_FRILOT_PATRIDGE_KOHNKE_CLEMENTS_LC = 3094\nVENDOR_ID_FIRSTSENSE_SOFTWARE_INC = 3095\nVENDOR_ID_STARVOX_INC = 3096\nVENDOR_ID_WATCHGUARD_TECHNOLOGIES_INC = 3097\nVENDOR_ID_MTI_TECHNOLOGY_CORPORATION = 3098\nVENDOR_ID_LUMBRERA = 3099\nVENDOR_ID_CELOGIC = 3100\nVENDOR_ID_EXPERIAN_INFORMATION_SOLUTIONS_INC = 3101\nVENDOR_ID_KANSAI_ELECTRIC_CO_LTD = 3102\nVENDOR_ID_INNET = 3103\nVENDOR_ID_THALES_COMMUNICATIONS_GMBH = 3104\nVENDOR_ID_VODAFONE_SWEDEN = 3105\nVENDOR_ID_LCI_INTERNATIONAL_INC = 3106\nVENDOR_ID_CITY_OF_LOS_ANGELES = 3107\nVENDOR_ID_G2_NETWORKS = 3108\nVENDOR_ID_TRADEWEB_LLC = 3109\nVENDOR_ID_RAFAEL = 3110\nVENDOR_ID_CRYSTAL_GROUP_INC = 3111\nVENDOR_ID_C_BRIDGE_INTERNET_SOLUTIONS = 3112\nVENDOR_ID_PHASE_FORWARD = 3113\nVENDOR_ID_WONOA = 3114\nVENDOR_ID_DIALOG = 3115\nVENDOR_ID_NICE_CTI_SYSTEMS_UK_LTD = 3116\nVENDOR_ID_ETRADE_GROUP_INC = 3117\nVENDOR_ID_JUNO_ONLINE_SERVICES_INC = 3118\nVENDOR_ID_DNB_ASA = 3119\nVENDOR_ID_CINTEL_TECHNOLOGIES_INC = 3120\nVENDOR_ID_TELE1024_DENMARK = 3121\nVENDOR_ID_INTERLINK_NETWORK_GROUP_INC = 3122\nVENDOR_ID_L_RICHARDS_ENTERPRISES_INC = 3123\nVENDOR_ID_MEDIA_COMMUNICATIONS_EUR_AB = 3124\nVENDOR_ID_ROCX_SOFTWARE_CORP = 3125\nVENDOR_ID_ARDAX_SYSTEMS_INC = 3126\nVENDOR_ID_PLURIS_INC = 3127\nVENDOR_ID_OAZ_COMMUNICATIONS = 3128\nVENDOR_ID_ADVANCED_SWITCHING_COMMUNICATIONS_INC = 3129\nVENDOR_ID_GREATLINK_NETWORKS_INC = 3130\nVENDOR_ID_AYDIN_TELECOM = 3131\nVENDOR_ID_NETKIT_INC = 3132\nVENDOR_ID_IDP = 3133\nVENDOR_ID_TTM_NEDERLAND = 3134\nVENDOR_ID_LABOUCHERE = 3135\nVENDOR_ID_COMTREND_CORPORATION = 3136\nVENDOR_ID_BERBEE_INFORMATION_NETWORKS_CORP = 3137\nVENDOR_ID_WIRELESS_ONLINE_INC = 3138\nVENDOR_ID_LIFFE = 3139\nVENDOR_ID_CELO_COMMUNICATIONS_AB = 3140\nVENDOR_ID_MARK_IV_INDUSTRIES_LTDF_P_ELECTRONICS_DIVISION = 3141\nVENDOR_ID_LEITCH_TECHNOLOGY_INTERNATIONAL_INCORPORATED = 3142\nVENDOR_ID_CHALCROFT_INTERNATIONAL = 3143\nVENDOR_ID_CLARITY_WIRELESS_INC = 3144\nVENDOR_ID_C_C_C_TECHNOLOGY_LTD = 3145\nVENDOR_ID_FREQUENTIS_NETWORK_SYSTEMS_GMBH = 3146\nVENDOR_ID_DAEWOO_ELECTRONICS = 3147\nVENDOR_ID_FRANCE_CARAIBE_MOBILES = 3148\nVENDOR_ID_WINCHESTER_SYSTEMS_INC = 3149\nVENDOR_ID_SWD = 3150\nVENDOR_ID_AUTOMOTIVE_INDUSTRY_ACTION_GROUP_AIAG = 3151\nVENDOR_ID_ORION_TECHNOLOGIES_INC = 3152\nVENDOR_ID_DIRECTORYNET_INC = 3153\nVENDOR_ID_KISAN_TELECOM_CO_LTD = 3154\nVENDOR_ID_CONCORD_ERACOM = 3155\nVENDOR_ID_SECANT = 3156\nVENDOR_ID_NETRACORP_LLC = 3157\nVENDOR_ID_MASPRO_DENKOH_CORP = 3158\nVENDOR_ID_UTIMACO_SAFEWARE_AG = 3159\nVENDOR_ID_FINANCIAL_INFORMATION_SYSTEM_CENTER_FISC = 3160\nVENDOR_ID_XYBX_INC = 3161\nVENDOR_ID_RELATIONAL_DATA_SYSTEMS = 3162\nVENDOR_ID_MT_CLEAR_SOLUTIONS_INC = 3163\nVENDOR_ID_ARBED_SA = 3164\nVENDOR_ID_CAP_GEMINI_TELECOM = 3165\nVENDOR_ID_WESTEK_TECHNOLOGY_LTD_JOHN_TUCKER = 3166\nVENDOR_ID_NICE_SYSTEMS_LTD = 3167\nVENDOR_ID_INC_SA = 3168\nVENDOR_ID_SILIS_SARL = 3169\nVENDOR_ID_INTERWORKING_LABS_INC = 3170\nVENDOR_ID_IKON_SYSTEMS_INC = 3171\nVENDOR_ID_GTE_INTELLIGENT_NETWORK_SERVICES = 3172\nVENDOR_ID_TURNSTONE_SYSTEMS_INC = 3173\nVENDOR_ID_TASMAN_NETWORKS_INC = 3174\nVENDOR_ID_WEBTRENDS_CORPORATION = 3175\nVENDOR_ID_WERNER_TRAINING_AND_CONSULTING_INC = 3176\nVENDOR_ID_IVC_INC = 3177\nVENDOR_ID_BLUE_CROSS_AND_BLUE_SHIELD_OF_FLORIDA = 3178\nVENDOR_ID_LEVEL8_SYSTEMS = 3179\nVENDOR_ID_RESCOM_A_S = 3180\nVENDOR_ID_MICROSENS_GMBH_CO_KG = 3181\nVENDOR_ID_UNIHOLD_TECHNOLOGIES = 3182\nVENDOR_ID_WIRED_FOR_MANAGEMENT = 3183\nVENDOR_ID_RAYMOND_AND_LAE_ENGINEERING_INC = 3184\nVENDOR_ID_PARAPSCO_DESIGNS_LTD = 3185\nVENDOR_ID_TOUCHNET_INFORMATION_SYSTEMS_INC = 3186\nVENDOR_ID_FUZZY_INFORMATIK_GMBH = 3187\nVENDOR_ID_SUNNY_COMM_INC = 3188\nVENDOR_ID_DSD_COMPUTING = 3189\nVENDOR_ID_CAJA_DE_AHORROS_DEL_MEDITERRANEO = 3190\nVENDOR_ID_DYNETCOM_GUERNSEY_LTD = 3191\nVENDOR_ID_TACHYON_INC = 3192\nVENDOR_ID_SILENT_COMMUNICATIONS = 3193\nVENDOR_ID_EFFNET_AB = 3194\nVENDOR_ID_AUDI_AG = 3195\nVENDOR_ID_SIDE_BY_SIDE_GMBH = 3196\nVENDOR_ID_VODACOM_SOUTH_AFRICA = 3197\nVENDOR_ID_VOLAMP_LTDWG_SAICH440_1252_724055 = 3198\nVENDOR_ID_SHASTA_NETWORKS = 3199\nVENDOR_ID_APPLIED_RESOURCES_INC = 3200\nVENDOR_ID_LANCOME = 3201\nVENDOR_ID_SPAR_AEROSPACE_LIMITED = 3202\nVENDOR_ID_GLAXOWELLCOME_INC = 3203\nVENDOR_ID_ATI_SYSTEM_CO_LTD = 3204\nVENDOR_ID_EXODUS_COMMUNICATIONS_INC = 3205\nVENDOR_ID_ASSURED_DIGITAL_INC = 3206\nVENDOR_ID_WEBVENTURE = 3207\nVENDOR_ID_ATHENS_UNIVERSITY_OF_ECONOMICS_AND_BUSINESS = 3208\nVENDOR_ID_DYNARC_AB = 3209\nVENDOR_ID_VOLKSWAGEN_AG = 3210\nVENDOR_ID_ALLGON_AB = 3211\nVENDOR_ID_CRESTRON_ELECTRONICS_INC = 3212\nVENDOR_ID_TRANSICIEL = 3213\nVENDOR_ID_SAN_PEOPLE_PTY_LTD = 3214\nVENDOR_ID_NETWORK_INSTRUMENTS_LLC = 3215\nVENDOR_ID_TEXAS_NETWORKING_INC = 3216\nVENDOR_ID_PINI_COMPUTER_TRADING = 3217\nVENDOR_ID_XLN_T = 3218\nVENDOR_ID_SILICOMP = 3219\nVENDOR_ID_SIGNET_SYSTEMS_PTY_LTD = 3220\nVENDOR_ID_OHKURA_ELECTRIC_CO_LTD = 3221\nVENDOR_ID_NEW_ELITE_TECHNOLOGIES_INC = 3222\nVENDOR_ID_TXCOM = 3223\nVENDOR_ID_NETSCREEN_TECHNOLOGIES_INC = 3224\nVENDOR_ID_SYCAMORE_NETWORKS = 3225\nVENDOR_ID_FRANCE_CONNEXION_INGENIERIE = 3226\nVENDOR_ID_NETLEADER_INC = 3227\nVENDOR_ID_TEKMAR_SISTEMI_SRL = 3228\nVENDOR_ID_DSTC = 3229\nVENDOR_ID_RUNTOP_INC = 3230\nVENDOR_ID_L_3_COMMUNICATIONS = 3231\nVENDOR_ID_EUMETSAT = 3232\nVENDOR_ID_TONGGONG_HIGH_NEW_TECHNOLOGY_DEVELOPMENT_COMPANY = 3233\nVENDOR_ID_TRIFOLIUM_INC = 3234\nVENDOR_ID_ZENON_NSP = 3235\nVENDOR_ID_ERCOM = 3236\nVENDOR_ID_SDC = 3237\nVENDOR_ID_LOS_ANGELES_WEB = 3238\nVENDOR_ID_FLORENCE_ON_LINE_SRL = 3239\nVENDOR_ID_ESCALATE_NETWORKS = 3240\nVENDOR_ID_TRANNEXUS = 3241\nVENDOR_ID_BRIGHAM_YOUNG_UNIVERSITY = 3242\nVENDOR_ID_CONNOVA_SYSTEMS_AB = 3243\nVENDOR_ID_VOXTRON_FLANDERS_NV = 3244\nVENDOR_ID_YOMI_SOFTWARE_LTD = 3245\nVENDOR_ID_MIRAPOINT_INC = 3246\nVENDOR_ID_COLORBUS = 3247\nVENDOR_ID_DPB_SA = 3248\nVENDOR_ID_STARGUIDE_DIGITAL_NETWORKS_INC = 3249\nVENDOR_ID_TELINET_TECHNOLOGIES_LLC_DONALD = 3250\nVENDOR_ID_AUTHENTICA_SECURITY_TECHNOLOGIES_INC = 3251\nVENDOR_ID_HOLOGRAM_SYSTEMS_LTD = 3252\nVENDOR_ID_TRANSYSTEM_INC = 3253\nVENDOR_ID_RRC_EXPORTS = 3254\nVENDOR_ID_LAKESIDE_SOFTWARE_INC = 3255\nVENDOR_ID_CHANNEL_100 = 3256\nVENDOR_ID_MAGMA_INC = 3257\nVENDOR_ID_LANSOURCE_TECHNOLOGIES_INC = 3258\nVENDOR_ID_INCAA_DATACOM_BV = 3259\nVENDOR_ID_GLOBESET_INC = 3260\nVENDOR_ID_MARTIN_PESTANA = 3261\nVENDOR_ID_ACUSON_CORPORATION = 3262\nVENDOR_ID_DRAKE_AUTOMATION_LIMITED = 3263\nVENDOR_ID_KERR_VAYNE_SYSTEMS_LTD = 3264\nVENDOR_ID_KSQUARED_CONSULTING = 3265\nVENDOR_ID_HSBC_GROUP = 3266\nVENDOR_ID_IRONBRIDGE_NETWORKS_INC = 3267\nVENDOR_ID_REAL_TIME_LOGIC_INC = 3268\nVENDOR_ID_TELSERVE = 3269\nVENDOR_ID_UNIQUEST_KOREA = 3270\nVENDOR_ID_STOCKPOWER_INC = 3271\nVENDOR_ID_YONTEM_COMPUTER_ELECTRONICS = 3272\nVENDOR_ID_NWE_GMBH = 3273\nVENDOR_ID_THE_INFORMATION_SYSTEMS_MANAGER_INC = 3274\nVENDOR_ID_KOSMOS_IMAGE_SRL = 3275\nVENDOR_ID_TAIHAN_ELECTRIC_WIRE_CO_LTD = 3276\nVENDOR_ID_TELSPEC = 3277\nVENDOR_ID_C_COM_CORPORATION = 3278\nVENDOR_ID_ADLEX_CORP = 3279\nVENDOR_ID_CCI_EUROPE = 3280\nVENDOR_ID_SMS_ENTERPRISES = 3281\nVENDOR_ID_VICOM_SYSTEMS_INC = 3282\nVENDOR_ID_INTERNATIONAL_SOFTWARE_SOLUTIONS = 3283\nVENDOR_ID_OASIS_CONSORTIUM = 3284\nVENDOR_ID_NOVA_TELECOMMUNICATIONS_INC = 3285\nVENDOR_ID_NERA_SATCOM_AS = 3286\nVENDOR_ID_PROACTIVE_NETWORKS_INC = 3287\nVENDOR_ID_JACOBS_RIMELL_LIMITED = 3288\nVENDOR_ID_CRYPTOMATHIC_A_S = 3289\nVENDOR_ID_APPLISCOPE = 3290\nVENDOR_ID_SIMAC_TECHNIEK_NV = 3291\nVENDOR_ID_EARTHMEN_TECHNOLOGY = 3292\nVENDOR_ID_BIFFSTERS_INTERNATIONAL = 3293\nVENDOR_ID_DIGITRONIC = 3294\nVENDOR_ID_INTERNET_MULTIFEED_CO = 3295\nVENDOR_ID_ARGOSY_RESEARCH_INC = 3296\nVENDOR_ID_NXNETWORKS_3 = 3297\nVENDOR_ID_MQSOFTWARE_INC = 3298\nVENDOR_ID_ALTAIR_DATA_SYSTEM = 3299\nVENDOR_ID_TELSIS_LIMITED = 3300\nVENDOR_ID_IMPACT = 3301\nVENDOR_ID_SMI_COMPUTERSYSTEME_GMBH_NICOLE = 3302\nVENDOR_ID_IDM_LTD = 3303\nVENDOR_ID_WINVISTA_CORP = 3304\nVENDOR_ID_SPLITROCK_SERVICES_INC = 3305\nVENDOR_ID_VAIL_SYSTEMS_INCORPORATED = 3306\nVENDOR_ID_SANENET = 3307\nVENDOR_ID_ENSEMBLE_SOLUTIONS_INC = 3308\nVENDOR_ID_NOMADIX = 3309\nVENDOR_ID_JETT_INTERNATIONAL_INC = 3310\nVENDOR_ID_CROCODIAL_COMMUNICATIONS_ENTWICKLUNGSGESELLSCHAFT_MBH = 3311\nVENDOR_ID_CONSULTING_INFORMATICO_DE_CANTABRIA_SL = 3312\nVENDOR_ID_BROADCAST_SERVICES = 3313\nVENDOR_ID_BERGSTRESSER_ASSOCIATES = 3314\nVENDOR_ID_KINGSTAR_COMPUTER_LTD = 3315\nVENDOR_ID_MICRO_LOGIC_SYSTEMS = 3316\nVENDOR_ID_PORT_COMMUNITY_ROTTERDAM = 3317\nVENDOR_ID_COMPUTER_COMPETENCE_GMBH = 3318\nVENDOR_ID_GNOME_PROJECT = 3319\nVENDOR_ID_SHANGHAI_BAUD_DATA_COMMUNICATION_DEVELOPMENT_CORP = 3320\nVENDOR_ID_TELEDATA_COMMUNICATION_LTD = 3321\nVENDOR_ID_IPSWITCH_INC = 3322\nVENDOR_ID_TADIRAN_MICROWAVE_NETWORKS = 3323\nVENDOR_ID_CALL_TECHNOLOGIES_INC = 3324\nVENDOR_ID_VOCALIS_LTD = 3325\nVENDOR_ID_BERGEN_DATA_CONSULTING = 3326\nVENDOR_ID_CA_TECHNOLOGIES_INC = 3327\nVENDOR_ID_INDUS_RIVER_NETWORKS_INC = 3328\nVENDOR_ID_NEWCOM_TECHNOLOGIES_INC = 3329\nVENDOR_ID_PARTNERGROUP = 3330\nVENDOR_ID_DETEWE_DEUTSCHE_TELEPHONWERKE_AKTIENGESELLSCHAFT_CO = 3331\nVENDOR_ID_RCX_SYSTEM = 3332\nVENDOR_ID_AUBURN_UNIVERSITY = 3333\nVENDOR_ID_CAPMEDIATEL = 3334\nVENDOR_ID_HAHT_SOFTWARE = 3335\nVENDOR_ID_UTBF = 3336\nVENDOR_ID_CHICAGO_POLICE_DEPARTMENT_DATA_SYSTEMS_DIVISION = 3337\nVENDOR_ID_MORA_TECHNOLOGICAL_SERVICES = 3338\nVENDOR_ID_JHC = 3339\nVENDOR_ID_OPENTV_INC = 3340\nVENDOR_ID_SWITCHSOFT_SYSTEMS_INC = 3341\nVENDOR_ID_MACHONE_COMMUNICATIONS_INC = 3342\nVENDOR_ID_PHILIPS_DIGITAL_VIDEO_SYSTEMS_HARRY = 3343\nVENDOR_ID_HELSINKI_TELEVISIO_OY = 3344\nVENDOR_ID_NEMETSCHEK_AG = 3345\nVENDOR_ID_VOCOM = 3346\nVENDOR_ID_HITACHI_KOKUSAI_ELECTRIC_INC = 3347\nVENDOR_ID_RELIABLE_NETWORK_SOLUTIONS = 3348\nVENDOR_ID_VOGO_NETWORKS = 3349\nVENDOR_ID_BEUSEN = 3350\nVENDOR_ID_OVERLAND_DATA_INC = 3351\nVENDOR_ID_GO2_TECHNOLOGIES_INC = 3352\nVENDOR_ID_TRANSMEDIA_COMMUNICATIONS_INC = 3353\nVENDOR_ID_INNOMEDIA_INC = 3354\nVENDOR_ID_ORKIT_FI = 3355\nVENDOR_ID_WEBMASTER_INCORPORATED = 3356\nVENDOR_ID_SOFTWARE_MANAGEMENT_ASSOCIATES_INC = 3357\nVENDOR_ID_RESEARCHER = 3358\nVENDOR_ID_CYGNUS_GLOBAL_CONSULTING = 3359\nVENDOR_ID_COLUMBINE_JDS_SYSTEMS_INC = 3360\nVENDOR_ID_INTRAPLEX = 3361\nVENDOR_ID_SELTA_SPA = 3362\nVENDOR_ID_SOUTHERN_NEW_ENGLAND_TELECOMMUNICATIONS = 3363\nVENDOR_ID_BALTIC_OIL_LTD = 3364\nVENDOR_ID_MAILWIZARD_INCORPORATED = 3365\nVENDOR_ID_DA_VINCI_SYSTEMS_CC = 3366\nVENDOR_ID_NMS_RESEARCH = 3367\nVENDOR_ID_KIMSUNGEUN_CO_LTD = 3368\nVENDOR_ID_GENICOM_CORPORATION = 3369\nVENDOR_ID_TRANGO_SOFTWARE_CORPORATION = 3370\nVENDOR_ID_SUNGEUN_SYSTEMS = 3371\nVENDOR_ID_COVE_SISTEMAS_SL = 3372\nVENDOR_ID_SIAE_MICROELETTRONICA_SPA = 3373\nVENDOR_ID_CYBERTEK_CORP = 3374\nVENDOR_ID_F5_LABS_INC = 3375\nVENDOR_ID_VALENCIA_SYSTEMS = 3376\nVENDOR_ID_HKC_COMMUNICATIONS_INC = 3377\nVENDOR_ID_PLANT_EQUIPMENT_INC = 3378\nVENDOR_ID_HT_INDUSTRIAL_CO = 3379\nVENDOR_ID_FUELLING_PARTNER = 3380\nVENDOR_ID_ATREVE_SOFTWARE_INC = 3381\nVENDOR_ID_VENTURI_WIRELESS = 3382\nVENDOR_ID_SOUTH_EAST_WATER_LIMITED = 3383\nVENDOR_ID_WAMNET = 3384\nVENDOR_ID_UNIVERSITY_OF_LEICESTER = 3385\nVENDOR_ID_21ST_CENTURY_NET = 3386\nVENDOR_ID_INTELLIVOICE_INC = 3387\nVENDOR_ID_INTEGRAL_PARTNERS = 3388\nVENDOR_ID_NOVOTEC_COMPUTERS_GMBH = 3389\nVENDOR_ID_MARATHON_TECHNOLOGIES_CORPORATION = 3390\nVENDOR_ID_SOFTWARE_TECHNOLOGIES_GROUP_INC = 3391\nVENDOR_ID_QUVINTHEUMN_FOUNDATION = 3392\nVENDOR_ID_SANDS_INTERNATIONAL = 3393\nVENDOR_ID_NETRUE_COMMUNICATIONS = 3394\nVENDOR_ID_CERTICOM_CORP = 3395\nVENDOR_ID_DICOS_GMBH_KOMMUNIKATIONSSYSTEME_STEPHAN = 3396\nVENDOR_ID_BORDER_BLUES_PRODUCTIONS = 3397\nVENDOR_ID_FIELDBUS_FOUNDATION = 3398\nVENDOR_ID_OLENCOM_ELECTRONICS_LTD_OLENTUCH = 3399\nVENDOR_ID_ALACRITY_COMMUNICATIONS_INC = 3400\nVENDOR_ID_MCAFEE_INC_FORMERLY_NETWORK_ASSOCIATES_INC = 3401\nVENDOR_ID_MAGICOM_INTEGRATED_SOLUTIONS = 3402\nVENDOR_ID_MARIMBA_INC = 3403\nVENDOR_ID_ADICOM = 3404\nVENDOR_ID_EXPAND_NETWORKS_INC = 3405\nVENDOR_ID_EIS_CORPORATION = 3406\nVENDOR_ID_COMPU_DAWN_INC = 3407\nVENDOR_ID_NYLCARE_HEALTH_PLANS = 3408\nVENDOR_ID_Z_TEL_COMMUNICATIONS_INC = 3409\nVENDOR_ID_LAND_5_CORPORATION = 3410\nVENDOR_ID_J_SLIVKOS_WEB_DESIGN_CONSULTING = 3411\nVENDOR_ID_SANCASTLE_TECHNOLOGIES_INC = 3412\nVENDOR_ID_RADIOTEL = 3413\nVENDOR_ID_VOICESTREAM_WIRELESS_INC = 3414\nVENDOR_ID_MOBILE_TELEPHONE_NETWORKS = 3415\nVENDOR_ID_NETO_CORPORATION = 3416\nVENDOR_ID_CACHEFLOW_INC = 3417\nVENDOR_ID_INTERACTIVE_CHANNEL_TECHNOLOGIES_INC = 3418\nVENDOR_ID_DERA = 3419\nVENDOR_ID_ROSSIYSKIY_KREDIT_BANK = 3420\nVENDOR_ID_PERFORMANCE_REPORTING_SERVICES_LTD = 3421\nVENDOR_ID_NETWORK_AWARE_INC = 3422\nVENDOR_ID_PROJECT_25 = 3423\nVENDOR_ID_EVIDENT_SOFTWARE_INC_FORMERLY_APOGEE_NETWORKS_INC = 3424\nVENDOR_ID_AMSDELL_INC = 3425\nVENDOR_ID_TOKYO_DENSHI_SEKEI_KK = 3426\nVENDOR_ID_MICROJURIS_INC = 3427\nVENDOR_ID_COMPUTER_ASSOCIATES_TCG_SOFTWARE = 3428\nVENDOR_ID_GENNET_TECHNOLOGY_CO_LTD = 3429\nVENDOR_ID_MICROTRONIX_DATACOM_LTD = 3430\nVENDOR_ID_WESTERN_DATACOM_CO_INC = 3431\nVENDOR_ID_TELLIUM_INC = 3432\nVENDOR_ID_GOLDENCOM_TECHNOLOGIES_INC = 3433\nVENDOR_ID_LEIGHTRONIX_INC = 3434\nVENDOR_ID_PORTA_SYSTEMS_LTD = 3435\nVENDOR_ID_BRIVIDA_INC = 3436\nVENDOR_ID_PITCHONPE = 3437\nVENDOR_ID_MISSOURI_FREENET = 3438\nVENDOR_ID_BRAINTREE_COMMUNICATIONS_PTY_LTD = 3439\nVENDOR_ID_BOREALIS_TECHNOLOGY = 3440\nVENDOR_ID_SOUTH_CAROLINA_STATE_PORTS_AUTHORITY_SCSPA = 3441\nVENDOR_ID_ADVANTECH_INC = 3442\nVENDOR_ID_UNITED_HEALTHCARE = 3443\nVENDOR_ID_EGNITE_SOFTWARE_GMBH = 3444\nVENDOR_ID_RADIANT_COMMUNICATIONS_CORP = 3445\nVENDOR_ID_RIDGE_TECHNOLOGIES_DAVE = 3446\nVENDOR_ID_JGI_INC = 3447\nVENDOR_ID_RIVKIN_SCIENCE_TECHNOLOGY_INC = 3448\nVENDOR_ID_FISHER_BERKELEY_CORP = 3449\nVENDOR_ID_ARDENCE_INC = 3450\nVENDOR_ID_VITA_NUOVA_LIMITED = 3451\nVENDOR_ID_MDSI_MOBILE_DATA_SOLUTIONS_INC = 3452\nVENDOR_ID_AAE_SYSTEMS_INC = 3453\nVENDOR_ID_TRUSTWORKS_SYSTEMS_BV = 3454\nVENDOR_ID_INTERNET_FREAKS_LUXEMBOURG_ASBLDEPARTMENT_TECHNIQUE = 3455\nVENDOR_ID_ADTECH_INC = 3456\nVENDOR_ID_ADVANCED_INTELLIGENT_NETWORKS_CORP = 3457\nVENDOR_ID_TRANSACTION_NETWORK_SERVICES_INC = 3458\nVENDOR_ID_COMON_COMMUNICATION_SYSTEMS_GMBH = 3459\nVENDOR_ID_TELECOMMUNICATIONS_SPECIALISTS_PTE_LTD = 3460\nVENDOR_ID_INFERENTIA_SPA = 3461\nVENDOR_ID_MAKONIN_CONSULTING_CORP = 3462\nVENDOR_ID_TOUCAN_TECHNOLOGY_LTD = 3463\nVENDOR_ID_GIMLET_MANAGEMENT_CONSULTANTS_LTD = 3464\nVENDOR_ID_SANYO_DENKI_CO_LTD = 3465\nVENDOR_ID_OPTICAL_NETWORKS_INC = 3466\nVENDOR_ID_NORCOM_NETWORKS_CORPORATION = 3467\nVENDOR_ID_GTE_INTERACTIVE = 3468\nVENDOR_ID_SCHUMANN_UNTERNEHMENSBERATUNG_AG = 3469\nVENDOR_ID_ATM_RD_CENTER_OF_BUPT = 3470\nVENDOR_ID_BEAR_STEARNS_COMPANY_INC = 3471\nVENDOR_ID_TELAMON_INC = 3472\nVENDOR_ID_MICROGATE_CORPORATION = 3473\nVENDOR_ID_FUJITU_ICL_ESPANA_SA = 3474\nVENDOR_ID_NETWORK_CONCEPTS = 3475\nVENDOR_ID_AREPA_INC = 3476\nVENDOR_ID_DORADO_SOFTWARE = 3477\nVENDOR_ID_SPECTRA_LOGIC = 3478\nVENDOR_ID_VIEWTOUCH_INC = 3479\nVENDOR_ID_VIEWS_NET_INC = 3480\nVENDOR_ID_HIMEL_TECHNOLOGY = 3481\nVENDOR_ID_TON_LICHTTECHNIK = 3482\nVENDOR_ID_MARINER_NETWORKS = 3483\nVENDOR_ID_ALASKA_TEXTILES_INC = 3484\nVENDOR_ID_ALASKA_CLEANERS_INC = 3485\nVENDOR_ID_WELLSPRINGS_HOLDINGS_LLC = 3486\nVENDOR_ID_ALLURE_OF_ALASKA = 3487\nVENDOR_ID_SEVENX = 3488\nVENDOR_ID_DENALI_SITES_INC = 3489\nVENDOR_ID_UNITED_SYSTEMS_BASE = 3490\nVENDOR_ID_CDCONSULTANTS_INC = 3491\nVENDOR_ID_COMDISCO_INC = 3492\nVENDOR_ID_BROADBAND_ACCESS_SYSTEMS_INC = 3493\nVENDOR_ID_CONVERGENT_NETWORKS_INC = 3494\nVENDOR_ID_NATIONAL_LABORATORY_FOR_APPLIED_NETWORK_RESEARCH = 3495\nVENDOR_ID_WEB_RESUMES = 3496\nVENDOR_ID_VIRTUAL_VENDOR_INC = 3497\nVENDOR_ID_BUSINESSBUILDER_TECHNOLOGIES_INC = 3498\nVENDOR_ID_CYBER_SERVER_PARK_INC = 3499\nVENDOR_ID_COMSAT_LABORATORIES = 3500\nVENDOR_ID_VODAFONE_VALUE_ADDED_SERVICES_LTD = 3501\nVENDOR_ID_J_A_SERVICES = 3502\nVENDOR_ID_BLUE_LANCE_INC = 3503\nVENDOR_ID_SANDVIK_COROMANT = 3504\nVENDOR_ID_VIRTUAL_VIRGIN_ISLANDS_INC = 3505\nVENDOR_ID_PAGETEK = 3506\nVENDOR_ID_E_NET_INC = 3507\nVENDOR_ID_NEST = 3508\nVENDOR_ID_CAPITAL_HOLDINGS_LTD = 3509\nVENDOR_ID_TWO_WAY_LAUNDRY = 3510\nVENDOR_ID_SKYSTREAM_INC = 3511\nVENDOR_ID_PORTAL_SOFTWARE_INC = 3512\nVENDOR_ID_VSTREAM_INCORPORATED = 3514\nVENDOR_ID_JOANNEUM_RESEARCH_GESMBH = 3515\nVENDOR_ID_CYBERNETICA = 3516\nVENDOR_ID_TIETO_TECHNOLOGY_A_S_DENMARK = 3517\nVENDOR_ID_PRESSLER_INC = 3518\nVENDOR_ID_AMPLIFYNET_INC = 3519\nVENDOR_ID_TPS_LA_TELEVISION_PAR_SATELLITE_DENIS = 3520\nVENDOR_ID_ATLAS_TECHNOLOGIES_INC = 3521\nVENDOR_ID_BIODATA_GMBH = 3522\nVENDOR_ID_NETCO_GMBH = 3523\nVENDOR_ID_CONTINIUM = 3524\nVENDOR_ID_SILVERBACK_TECHNOLOGIES = 3525\nVENDOR_ID_ITC_GMBH = 3526\nVENDOR_ID_INTRASOFT_INC = 3527\nVENDOR_ID_ESP_LLC = 3528\nVENDOR_ID_AVT_CORPORATION = 3529\nVENDOR_ID_RESEARCH_IN_MOTION_LTD = 3530\nVENDOR_ID_ORANGE_DK = 3531\nVENDOR_ID_MEISEI_SYSTEM_SERVICE_COMPANY = 3532\nVENDOR_ID_ACIES_SISTEMAS_S_C_LTDA = 3533\nVENDOR_ID_CTAM_PTY_LTD = 3534\nVENDOR_ID_HUTCHISON_AVENUE_SOFTWARE_CORP = 3535\nVENDOR_ID_GLOBUS = 3536\nVENDOR_ID_AIRFIBER_INC = 3537\nVENDOR_ID_EUROPE_CONNECTION_LTD = 3538\nVENDOR_ID_UNASSIGNED_4 = 3539\nVENDOR_ID_CONELLY_INTERNATIONAL_INC = 3540\nVENDOR_ID_BINDVIEW_DEVELOPMENT_CORP = 3541\nVENDOR_ID_GALEA_NETWORK_SECURITY = 3542\nVENDOR_ID_ABILIS_GMBH = 3543\nVENDOR_ID_BAYCORP_ID_SERVICES_LTD = 3544\nVENDOR_ID_MADDOX_BROADCAST_LTD = 3545\nVENDOR_ID_ACUTE_COMMUNICATIONS_CORPORATION = 3546\nVENDOR_ID_TOLLBRIDGE_TECHNOLOGIES = 3547\nVENDOR_ID_ORESIS_COMMUNICATIONS = 3548\nVENDOR_ID_MLI_ENTERPRISES = 3549\nVENDOR_ID_ALLSTOR_SOFTWARE_LIMITED = 3550\nVENDOR_ID_SPRING_TIDE_NETWORKS_INC = 3551\nVENDOR_ID_EES_TECHNOLOGY_LTD = 3552\nVENDOR_ID_CSP_AG = 3553\nVENDOR_ID_SAS_INSTITUE_INC = 3554\nVENDOR_ID_NETLOCK_LTD = 3555\nVENDOR_ID_GENO_RZ_GMBH = 3556\nVENDOR_ID_MS3NET = 3557\nVENDOR_ID_BGS_SYSTEMPLANUNG_AG = 3558\nVENDOR_ID_THE_DIGITAL_SCHOOLHOUSE = 3559\nVENDOR_ID_SPHERE_LOGIC_CORPORATION = 3560\nVENDOR_ID_THE_BROADBAND_FORUM_FORMERLY_ADSL_FORUM = 3561\nVENDOR_ID_SELWAY_MOORE_LIMITED = 3562\nVENDOR_ID_NATIONAL_NETWORK_DATA_SERVICES = 3563\nVENDOR_ID_CIPHERNET = 3564\nVENDOR_ID_GROLIER_INTERACTIVE_EUROPE_ON_LINE_GROUPE = 3565\nVENDOR_ID_MIDNIGHT_TECHNOLOGIES = 3566\nVENDOR_ID_SCOTT_SUPPLY_SERVICE_INC = 3567\nVENDOR_ID_SERVICE_CO_LLC = 3568\nVENDOR_ID_ELECTRONIC_PAYMENT_SERVICES_INC = 3569\nVENDOR_ID_TAIT_LIMITED = 3570\nVENDOR_ID_GIFT_TREK_MALAYSIA_SDN_BHD = 3571\nVENDOR_ID_HANA_SYSTEMS_INC = 3572\nVENDOR_ID_SOUTH_AFRICAN_NETWORKING_PEOPLE_PTY_LTD = 3573\nVENDOR_ID_ORSYP_SA = 3574\nVENDOR_ID_RKB_ONSITE_COMPUTER_SERVICE = 3575\nVENDOR_ID_MCI_2 = 3576\nVENDOR_ID_HIMACHAL_FUTURISTIC_COMMUNICATIONS_LIMITED = 3577\nVENDOR_ID_PIXSTREAM_INCORPORATED = 3578\nVENDOR_ID_HURLEY = 3579\nVENDOR_ID_BELL_EMERGIS = 3580\nVENDOR_ID_SEAGATE_TECHNOLOGY = 3581\nVENDOR_ID_LSI_LOGIC_2 = 3582\nVENDOR_ID_JETCELL_INC = 3583\nVENDOR_ID_PACIFIC_FIBEROPTICS_INC = 3584\nVENDOR_ID_OMNISEC_AG = 3585\nVENDOR_ID_DIEBOLD_INCORPORATED = 3586\nVENDOR_ID_TIW_SYSTEMS_INC = 3587\nVENDOR_ID_NOVOGROUP_OYJ = 3588\nVENDOR_ID_SOGOT = 3589\nVENDOR_ID_IA_INFORMATION_SYSTEMS_AG = 3590\nVENDOR_ID_THE_CAMERON_CYBERNETICS_CORP = 3591\nVENDOR_ID_DRAEGER_MEDIZINTECHNIK_GMBH = 3592\nVENDOR_ID_ALCATEL_SISTEMAS_DE_INFORMACION = 3593\nVENDOR_ID_LJL_ENTERPRISES_INC = 3594\nVENDOR_ID_BC_TEL_ADVANCED_COMMUNICATIONS = 3595\nVENDOR_ID_CMLTECHNOLOGIES_INC = 3596\nVENDOR_ID_WILDTHINGS = 3597\nVENDOR_ID_DIXIE_CAKE = 3598\nVENDOR_ID_TYPE_GRAPHICS_PTY_LIMITED = 3599\nVENDOR_ID_TELTRONICS_INC = 3600\nVENDOR_ID_CR_MCGUFFIN_CONSULTING_SERVICES = 3601\nVENDOR_ID_INTERNATIONAL_DATACASTING_CORPORATION = 3602\nVENDOR_ID_WESTPAC_BANKING_CORPORATION = 3603\nVENDOR_ID_XYPI_MEDIANET_PVT_LTD = 3604\nVENDOR_ID_NESSER_NESSER_CONSULTING = 3605\nVENDOR_ID_INCOGNITO_SOFTWARE_SYSTEMS_INC = 3606\nVENDOR_ID_CERENT_CORPORATION = 3607\nVENDOR_ID_THE_TILLERMAN_GROUP = 3608\nVENDOR_ID_CEQUS_INC = 3609\nVENDOR_ID_RYAN_NET_WORKS = 3610\nVENDOR_ID_FOO_CHICKEN_LTD = 3611\nVENDOR_ID_MARCEL_ENTERPRISES = 3612\nVENDOR_ID_RUBICON_TECHNOLOGIES_INC = 3613\nVENDOR_ID_ALTOR_PLC = 3614\nVENDOR_ID_SOFTWELL_PERFORMANCE_AB = 3615\nVENDOR_ID_UNITED_RESOURCE_ECONOMIC_TRADING_CENTER_C = 3616\nVENDOR_ID_SURFCONTROL_PLC = 3617\nVENDOR_ID_FLYING_CROCODILE_INC = 3618\nVENDOR_ID_PROXYMED_INC = 3619\nVENDOR_ID_TRANSACT_SYSTEMS_INC = 3620\nVENDOR_ID_NUANCE_COMMUNICATIONS = 3621\nVENDOR_ID_GEFM = 3622\nVENDOR_ID_SYSTEMINTEGRERING_AB = 3623\nVENDOR_ID_ENATOR_COMMUNICATIONS_AB = 3624\nVENDOR_ID_IHIGHWAYNET_INC = 3625\nVENDOR_ID_DIPL_ING_FH_MARKUS_DRECHSLER = 3626\nVENDOR_ID_CRIPTOLAB = 3627\nVENDOR_ID_TIETOKESKO_LTD = 3628\nVENDOR_ID_ATOS_ORIGIN = 3629\nVENDOR_ID_DELTAKABEL_TELECOM_CV = 3630\nVENDOR_ID_BRIDGEWATER_SYSTEMS_CORP = 3631\nVENDOR_ID_MAXCOMM_TECHNOLOGIES_INC = 3632\nVENDOR_ID_ID2_TECHNOLOGIES_AB = 3633\nVENDOR_ID_ALLIED_RISER_COMMUNICATIONS_INC = 3634\nVENDOR_ID_WAVESAT_TELECOM_INC = 3635\nVENDOR_ID_DPA_DEUTSCHE_PRESSE_AGENTUR_GMBH = 3636\nVENDOR_ID_POWER_DATA_TECHNOLOGY_INC = 3637\nVENDOR_ID_INTELLIREACH_CORPORATION = 3638\nVENDOR_ID_WM_DATA = 3639\nVENDOR_ID_DATAPATH_INC = 3640\nVENDOR_ID_NETAPHOR_SOFTWARE_INC = 3641\nVENDOR_ID_CRYPTOCONSULT = 3642\nVENDOR_ID_DIRTSA = 3643\nVENDOR_ID_CARDEN_ENTERPRISE_LTD = 3644\nVENDOR_ID_SONZ_LTD = 3645\nVENDOR_ID_ASKEY_COMPUTER_CORP = 3646\nVENDOR_ID_RAIDTEC_INC = 3647\nVENDOR_ID_HARCOURT_BRACE_COMPANY = 3648\nVENDOR_ID_ROLLINS_TECHNOLOGY_INC = 3649\nVENDOR_ID_NETOPS_CORP = 3650\nVENDOR_ID_KNOW_IT_AB = 3651\nVENDOR_ID_PAN_DACOM_DIREKT_GMBH_FORMERLY_PAN_DACOM_NETWORKING_AG = 3652\nVENDOR_ID_CIRQUE_NETWORKS_INC = 3653\nVENDOR_ID_NAVINET = 3654\nVENDOR_ID_GERMANISCHER_LLOYD_AG = 3655\nVENDOR_ID_FORCE_COMPUTERS_GMBH = 3656\nVENDOR_ID_ERICSSON_WIRELESS_LAN_SYSTEMS = 3657\nVENDOR_ID_DALIAN_FTZ_TIANYANG_INTL_TRADE_CO_LTD = 3658\nVENDOR_ID_ETHERCITY_DESIGNS_AND_HOSTING_SOLUTIONS = 3659\nVENDOR_ID_G3M_CORPORATION = 3660\nVENDOR_ID_SECURE_DATA_ACCESS_INC = 3661\nVENDOR_ID_QWESCOM_INCORPORATED = 3662\nVENDOR_ID_MEGAXESS = 3663\nVENDOR_ID_POLYGON = 3664\nVENDOR_ID_NETOIDS_INC = 3665\nVENDOR_ID_ACRITER_SOFTWARE_BV = 3666\nVENDOR_ID_INTELENET_COMMUNICATIONS = 3667\nVENDOR_ID_CONTROL_MODULE_INCCMI = 3668\nVENDOR_ID_AVEO_INC = 3669\nVENDOR_ID_MD_PREI = 3670\nVENDOR_ID_PICAZO_COMMUNICATION_INC = 3671\nVENDOR_ID_SCOTTSDALE_SECURITIES_INC = 3672\nVENDOR_ID_WEBMANAGE_TECHNOLOGIES_INC = 3673\nVENDOR_ID_INFOCLUBINDIA = 3674\nVENDOR_ID_CONNOR_PLUMBING_HEATING = 3675\nVENDOR_ID_SENTRYL_SOFTWARE_INC = 3676\nVENDOR_ID_ENGETRON_ENGENHARIA_ELETRONICA_IND_E_COM_LTDA = 3677\nVENDOR_ID_ICARO = 3678\nVENDOR_ID_UNITY_HEALTH = 3679\nVENDOR_ID_PARITY_SOFTWARE_DEV_CORP = 3680\nVENDOR_ID_DAVID_D_HARTMAN_CPA = 3681\nVENDOR_ID_COMGATES_COMMUNICATIONS_LTD = 3682\nVENDOR_ID_HONEYWELL_OY_VARKAUS = 3683\nVENDOR_ID_INTERWORLD_CORP = 3684\nVENDOR_ID_SENTO_PTY_LTD = 3685\nVENDOR_ID_WICKS_BY_JULIE = 3686\nVENDOR_ID_HSD_HARDWARE_SOFTWARE_DEVELOPMENT_GMBH = 3687\nVENDOR_ID_SAGEM_ORGA_GMBH = 3688\nVENDOR_ID_NEW_TECHNOLOGY_DEVELOPMENT_INC = 3689\nVENDOR_ID_TIAA_CREF = 3690\nVENDOR_ID_TEAM2IT_COPYLEFT_SRL = 3691\nVENDOR_ID_INTUIT = 3692\nVENDOR_ID_HAKUSAN_CORPORATION = 3693\nVENDOR_ID_THYSSEN_INFORMATIK_GMBH = 3694\nVENDOR_ID_CHROMATIS_NETWORKS_INC = 3695\nVENDOR_ID_MICROPRODIGY = 3696\nVENDOR_ID_QUANTUM_CORPORATION_2 = 3697\nVENDOR_ID_SARAIDE = 3698\nVENDOR_ID_NETWORK_TECHNOLOGIES_INC = 3699\nVENDOR_ID_STELLAR_ONE_CORPORATION = 3700\nVENDOR_ID_TURBONET_COMMUNICATIONS = 3701\nVENDOR_ID_PRINTRAK_INTERNATIONAL_INC = 3702\nVENDOR_ID_CYBERFAX_INC = 3703\nVENDOR_ID_AMD = 3704\nVENDOR_ID_ICET_SPA = 3705\nVENDOR_ID_ADITEL_TELEKOMMUNIKATION_NETWORK_GMBH = 3706\nVENDOR_ID_ADIT_HOLDING_GMBH = 3707\nVENDOR_ID_ADLER_DATA_SOFTWARE_GMBH = 3708\nVENDOR_ID_TERACOM_TELEMATICA_LTDA = 3709\nVENDOR_ID_LANMETRIX_PTY_LTD = 3710\nVENDOR_ID_SINETICA = 3711\nVENDOR_ID_GIGANET_INCORPORATED = 3712\nVENDOR_ID_VOXENT_SYSTEMS_LTD = 3713\nVENDOR_ID_BELLSOUTH_WIRELESS_DATA_LP = 3714\nVENDOR_ID_TELESTE_CORPORATION = 3715\nVENDOR_ID_BRAND_COMMUNICATIONS_LIMITED = 3716\nVENDOR_ID_GENUA_MBH = 3717\nVENDOR_ID_PHILIPS_BROADBAND_NETWORKS = 3718\nVENDOR_ID_EXMICRO = 3719\nVENDOR_ID_VISIQN = 3720\nVENDOR_ID_OTONET_SARL = 3721\nVENDOR_ID_VULKAN_COM_LTD = 3722\nVENDOR_ID_ANKEY = 3723\nVENDOR_ID_INTERACTIVE_COMMUNICATIONS_SYSTEMS = 3724\nVENDOR_ID_ACE_LTD = 3725\nVENDOR_ID_ENCOMMERCE_INCORPORATED = 3726\nVENDOR_ID_WESTERN_MULTIPLEX = 3727\nVENDOR_ID_REALM_INFORMATION_TECHNOLIGIES_INC = 3728\nVENDOR_ID_LUCENT_TECHNOLOGIES_2 = 3729\nVENDOR_ID_WESTPORT_TECHNOLOGIES = 3730\nVENDOR_ID_THE_SABRE_GROUP_2 = 3731\nVENDOR_ID_CALAMP_WIRELESS_NETWORKS_INC_FORMERLY_DATARADIO_INC = 3732\nVENDOR_ID_DATAKOM_AUSTRIA_DI_ERICH = 3733\nVENDOR_ID_SECURITY_7_LTD = 3734\nVENDOR_ID_TELESAFE_AS = 3735\nVENDOR_ID_GOODFIELD_CORP = 3736\nVENDOR_ID_PLEIADES_COMMUNICATIONS_INC = 3737\nVENDOR_ID_STREAMSOFT_INC = 3738\nVENDOR_ID_THE_EIGHTEENTH_SOFTWARE_COLTD = 3739\nVENDOR_ID_AQUILA_TECHNOLOGIES_GROUP_INC = 3740\nVENDOR_ID_FOLIAGE_SOFTWARE_SYSTEMS = 3741\nVENDOR_ID_VIATECHNOLOGIESINC = 3742\nVENDOR_ID_PD_SYSTEMS_INTERNATIONAL_LTD = 3743\nVENDOR_ID_DATEV_EG = 3744\nVENDOR_ID_CLUSTRA_AS = 3745\nVENDOR_ID_SWISSCOM_AG = 3746\nVENDOR_ID_AS_YEGEN = 3747\nVENDOR_ID_BANK_OF_AMERICA = 3748\nVENDOR_ID_TELEHUB_COMMUNICATION_CORP = 3749\nVENDOR_ID_ISCAPE_SOFTWARE = 3750\nVENDOR_ID_DRAGON_INDUSTRIES = 3751\nVENDOR_ID_THALES_NORWAY_AS = 3752\nVENDOR_ID_AITEK_SRL = 3753\nVENDOR_ID_CRAG_TECHNOLOGIES = 3754\nVENDOR_ID_ATOP_TECHNOLOGIES_INC = 3755\nVENDOR_ID_JULIEN_DANIEL = 3756\nVENDOR_ID_PT_USAHA_MEDIANTARA_INTRANET = 3757\nVENDOR_ID_CORE_NETWORKS_INC = 3758\nVENDOR_ID_OMEGA_MICRO_SYSTEMS = 3759\nVENDOR_ID_CONTENT_TECHNOLOGIES_LTD = 3760\nVENDOR_ID_HAGER_ELECTRONICS_GMBH = 3761\nVENDOR_ID_KWANGWOON_UNIVERSITY = 3762\nVENDOR_ID_VERAMARK = 3763\nVENDOR_ID_QUANTUM_CORPORATION_FORMERLY_ADVANCED_DIGITAL_INFORMATION_CORPORATION = 3764\nVENDOR_ID_STRATEGICLINK_CONSULTING = 3765\nVENDOR_ID_HANNIBAL_TEKNOLOGIES = 3766\nVENDOR_ID_PAN_INTERNATIONAL_INDUSTRIAL_CORP = 3767\nVENDOR_ID_DEPARTMENT_OF_VETERANS_AFFAIRS = 3768\nVENDOR_ID_BANYAN_NETWORKS_PVT_LTD = 3769\nVENDOR_ID_MCK_COMMUNICATIONS = 3770\nVENDOR_ID_KO6YD = 3771\nVENDOR_ID_POS_RESOURCES_INC = 3772\nVENDOR_ID_SIARA_SYSTEMS = 3773\nVENDOR_ID_WAVELINK = 3774\nVENDOR_ID_AGFA_CORPORATION = 3775\nVENDOR_ID_MILLENIUM_SOLUTIONS = 3776\nVENDOR_ID_HYDRAWEB_TECHNOLOGIES = 3777\nVENDOR_ID_CP_ELETRONICA_INDUSTRIAL_S_A = 3778\nVENDOR_ID_KINGMAX_TECHNOLOGY_INC = 3779\nVENDOR_ID_LEVEL_3_COMMUNICATIONS_INC = 3780\nVENDOR_ID_WXN_INC = 3781\nVENDOR_ID_UNIVERSITY_OF_NORTH_TEXAS = 3782\nVENDOR_ID_EMR_CORPORATION = 3783\nVENDOR_ID_SPEAKERBUS_LTD = 3784\nVENDOR_ID_CIRRUS_LOGIC = 3785\nVENDOR_ID_HIGHLAND_TECHNOLOGY_GROUP_INC = 3786\nVENDOR_ID_RUSSEL_LANE_ASSOCIATES_INC = 3787\nVENDOR_ID_TALKTYME_TECHNOLOGIES_INC = 3788\nVENDOR_ID_WIRE_TERMINATOR_WT = 3789\nVENDOR_ID_HAMAMATSU_PHOTONICS_KK_KAZUHIKO = 3790\nVENDOR_ID_TELECOMP_INC = 3791\nVENDOR_ID_LOGEC_SYSTEMS = 3792\nVENDOR_ID_LANIER_WORLDWIDE_INC = 3793\nVENDOR_ID_MIDAS_COMMUNICATION_TECHNOLOGIES_PRIVATE_LIMITED = 3794\nVENDOR_ID_ENACT_INC = 3795\nVENDOR_ID_IMT_INFORMATION_MANAGEMENT_TECHNOLOGY_AG = 3796\nVENDOR_ID_BENQ_CORPORATION = 3797\nVENDOR_ID_JINNY_PAGING = 3798\nVENDOR_ID_LIVE_NETWORKING_INC = 3799\nVENDOR_ID_UNISOURCE_ITALIA_SPA = 3800\nVENDOR_ID_AGRANAT_SYSTEMS_INC = 3801\nVENDOR_ID_SOFTAMED = 3802\nVENDOR_ID_PRAXON = 3803\nVENDOR_ID_STANDARD_CHARTERED_BANK_TREASURY = 3804\nVENDOR_ID_LONGHAI_YONGCHUAN_FOODS_CO_LTD = 3805\nVENDOR_ID_SHIRON_SATELLITE_COMMUNICATIONS1996_LTD = 3806\nVENDOR_ID_WUHAN_RESEARCH_INSTITUTE_OF_POSTS_AND_TELECOMMUNICATIONS = 3807\nVENDOR_ID_CYBER_POWER_SYSTEM_INC = 3808\nVENDOR_ID_CYRAS_SYSTEMS_INC = 3809\nVENDOR_ID_NETLINE = 3810\nVENDOR_ID_SPECTRASOFT_INC = 3811\nVENDOR_ID_ANDA_NETWORKS_INC = 3812\nVENDOR_ID_ELLACOYA_NETWORKS_INC = 3813\nVENDOR_ID_CALLNET_COMMUNICATIONS_INC = 3814\nVENDOR_ID_CONTROL_SOLUTIONS_INC = 3815\nVENDOR_ID_NOMINET_UK = 3816\nVENDOR_ID_MONFOX_INC = 3817\nVENDOR_ID_METRATECH_CORP = 3818\nVENDOR_ID_OPTISYSTEMS_SOLUTIONS_LTD = 3819\nVENDOR_ID_ZIGA_CORPORATION = 3820\nVENDOR_ID_INDIAN_VALLEY_ENTERPRISESES_INC = 3821\nVENDOR_ID_EDIMAX_TECHNOLOGY_CO_LTD = 3822\nVENDOR_ID_TOUCHBASE_COMMUNICATIONS = 3823\nVENDOR_ID_ATTUNE_NETWORKS = 3824\nVENDOR_ID_ADVANCED_NETWORK_SERVICES_INC = 3825\nVENDOR_ID_NEXTPOINT_NETWORKS_INC = 3826\nVENDOR_ID_MOSCOW_CENTRAL_DEPOSITORY = 3827\nVENDOR_ID_STG_INC = 3828\nVENDOR_ID_IMAGING_TECHNOLOGIES_CORPORATION = 3829\nVENDOR_ID_ACISION = 3830\nVENDOR_ID_OBLIX_INC = 3831\nVENDOR_ID_TAYLORED_SOLUTIONS = 3832\nVENDOR_ID_SCHNEIDER_ELECTRIC = 3833\nVENDOR_ID_NOVARTIS_PHARMA_AG = 3834\nVENDOR_ID_ALPS_ELECTRIC = 3835\nVENDOR_ID_TERESE_BROWN_REAL_ESTATE = 3836\nVENDOR_ID_HBOC_IMAGING_SOLUTIONS_GROUP = 3837\nVENDOR_ID_GASPER_CORPORATION = 3838\nVENDOR_ID_NEOWAVE_INC = 3839\nVENDOR_ID_GLOBE_INSTITUTE_OF_TECHNOLOGY = 3840\nVENDOR_ID_FLYCAST_COMMUNICATIONS_CORP = 3841\nVENDOR_ID_LKIS = 3842\nVENDOR_ID_PYDERION_CONTACT_TECHNOLOGIES_INC = 3843\nVENDOR_ID_GRAHAM_TECHNOLOGY_PLC = 3844\nVENDOR_ID_CITRIX_SYSTEMS_INC = 3845\nVENDOR_ID_QMASTER_SOFTWARE_SOLUTIONS_INC = 3846\nVENDOR_ID_ENSEMBLE_COMMUNICATIONS_INCORPORATED = 3847\nVENDOR_ID_NORTHCHURCH_COMMUNICATIONS_INC = 3848\nVENDOR_ID_OBJECT_INTEGRATION_INC = 3849\nVENDOR_ID_XNET_COMMUNICATIONS_GMBH = 3850\nVENDOR_ID_OPTIKA_INC = 3851\nVENDOR_ID_SOFT_INTER_TECHNOLOGIES = 3852\nVENDOR_ID_VIAGATE_TECHNOLOGIES = 3853\nVENDOR_ID_KCP_INC = 3854\nVENDOR_ID_ELASTIC_NETWORKS = 3855\nVENDOR_ID_SIEBEL_SYSTEMS = 3856\nVENDOR_ID_SAGE_RESEARCH_FACILITY = 3857\nVENDOR_ID_CAPRICON_ENGINEERS = 3858\nVENDOR_ID_VXL_INSTRUMENTS_LTD = 3859\nVENDOR_ID_FIRST_INTERNATIONAL_COMPUTER_INC = 3860\nVENDOR_ID_FUJITSU_NETWORK_COMMUNICATIONS_INC = 3861\nVENDOR_ID_ROYAL_BANK_OF_SCOTLAND = 3862\nVENDOR_ID_CANADIAN_MARCONI_COMPANY = 3863\nVENDOR_ID_INTALK_INC = 3864\nVENDOR_ID_THORNE_WEST = 3865\nVENDOR_ID_GLOBAL_NET_CENTER = 3866\nVENDOR_ID_PRESENCE_TECHNOLOGY_GMBHCOKGMICHAEL = 3867\nVENDOR_ID_CONVERGYS_INFORMATION_MANAGEMENT_GROUP = 3868\nVENDOR_ID_INTELLILOGIC_NETWORKS_INC = 3869\nVENDOR_ID_INTERNET_BUSINESS_EMPORIUM = 3870\nVENDOR_ID_DITECH_CORPORATION = 3871\nVENDOR_ID_MIRANDA_TECHNOLOGIES_INC = 3872\nVENDOR_ID_QLOGIC = 3873\nVENDOR_ID_INFOVALUE_COMPUTING_INC = 3874\nVENDOR_ID_METRO_COMPUTING_CONSULTANTS_INC = 3875\nVENDOR_ID_ARINC_INCORPORATED = 3876\nVENDOR_ID_FIRST_AMERICAN_NATIONAL_BANK = 3877\nVENDOR_ID_REAL_SOFTWARE_COMPANY = 3878\nVENDOR_ID_TAIWAN_TELECOMMUNICATION_INDUSTRY_CO_LTD = 3879\nVENDOR_ID_WIRELESS_INFORMATION_TRANSFER_SYSTEMS = 3880\nVENDOR_ID_TELEFONAKTIEBOLAGET_LM_ERICSSON = 3881\nVENDOR_ID_PACOM_SYSTEMS_PTY_LTD = 3882\nVENDOR_ID_NEXT_PLC = 3883\nVENDOR_ID_PHOBOS_CORPORATION = 3884\nVENDOR_ID_LIFELINE_SYSTEMS_INC = 3885\nVENDOR_ID_MIMAX_INFORMATION = 3886\nVENDOR_ID_ELDER_ENTERPRISES = 3887\nVENDOR_ID_IAPETUS_SOFTWARE = 3888\nVENDOR_ID_CE_INFOSYS_GMBH = 3889\nVENDOR_ID_ACROSS_WIRELESS_AB = 3890\nVENDOR_ID_CHICAGO_BOARD_OF_TRADE = 3891\nVENDOR_ID_ATEB = 3892\nVENDOR_ID_PARKS_COMUNICACOES_DIGITAIS = 3893\nVENDOR_ID_PITNEY_BOWES = 3894\nVENDOR_ID_ADVENT_COMMUNICATIONS_LTD = 3895\nVENDOR_ID_AUTOMATED_INTEGRATED_SOLUTIONS_INC = 3896\nVENDOR_ID_EDISON_TECHNOLOGY_SOLUTIONS = 3897\nVENDOR_ID_MITSUBISHI_TELECOMMUNICATIONS_NETWORK_DIVISION = 3898\nVENDOR_ID_SOUTH_CHINA_MORNING_POST_PUBLISHERS_LTD = 3899\nVENDOR_ID_RASTER_SOLUTIONS_PTY_LTD = 3900\nVENDOR_ID_MANAGED_MESSAGING_LLC = 3901\nVENDOR_ID_ZHONGXING_TELECOM_COLTD_ABBR_ZTE = 3902\nVENDOR_ID_TORNADO_DEVELOPMENT_INC = 3903\nVENDOR_ID_XLINK_INTERNET_SERVICE_GMBH = 3904\nVENDOR_ID_TELENORDIA_INTERNET = 3905\nVENDOR_ID_DATA_COMMUNICATION_TECHNOLOGY_RESEARCH_INSTITUTE = 3906\nVENDOR_ID_CALIFORNIA_INDEPENDENT_SYSTEM_OPERATOR = 3907\nVENDOR_ID_GSP = 3908\nVENDOR_ID_NODES_INC = 3909\nVENDOR_ID_RAILTRACK_PLC = 3910\nVENDOR_ID_GLASNER_CONSULTING = 3911\nVENDOR_ID_GWCOM_INC = 3912\nVENDOR_ID_ARRAY_TELECOM_CORP = 3913\nVENDOR_ID_TCOSOFT_INC = 3914\nVENDOR_ID_TEKNIS_ELECTRONICS = 3915\nVENDOR_ID_NEO_CORE_INC = 3916\nVENDOR_ID_V_BITS_INC = 3917\nVENDOR_ID_WATSON_WYATT_WORLDWIDE = 3918\nVENDOR_ID_MONTEREY_NETWORKS_INC = 3919\nVENDOR_ID_CSNET_CONSULTING_INC = 3920\nVENDOR_ID_APLION_NETWORKS_INC = 3921\nVENDOR_ID_OPERATIONAL_RESEARCH_CONSULTANTS = 3922\nVENDOR_ID_INTRAK_INC = 3923\nVENDOR_ID_POLICY_MANAGEMENT_SYSTEMS_CORP = 3924\nVENDOR_ID_ENCOMPASS_ENTERPRISE_MANAGEMENT_CONSULTANTS = 3925\nVENDOR_ID_NEWSOUTH_COMMUNICATIONS_CORP = 3926\nVENDOR_ID_WARPSPEED_COMMUNICATIONS = 3927\nVENDOR_ID_SANDWICH_WIRELESS_COMMUNICATIONS_INC = 3928\nVENDOR_ID_NEITH_CREATIVE_BEAUTY = 3929\nVENDOR_ID_NTT_ELECTRONICS_CORPORATION = 3930\nVENDOR_ID_EASYACCESS = 3931\nVENDOR_ID_LARA_TECHNOLOGY_INC = 3932\nVENDOR_ID_NEXO = 3933\nVENDOR_ID_NET_WISE_COMMUNICATIONS_LTD = 3934\nVENDOR_ID_CENTRO_CANTONALE_DINFORMATICA = 3935\nVENDOR_ID_SINTECA = 3936\nVENDOR_ID_EMS_TECHNOLOGIES_CANADA_LTD = 3937\nVENDOR_ID_DECCAN_TECHNOLOGIES_INCVIJAY_BURGULA_VIK_JANG = 3938\nVENDOR_ID_INTERNET_DEVICES_INC = 3939\nVENDOR_ID_NINETYDE = 3940\nVENDOR_ID_SANTAK_ELECTRONICS_CO_LTD = 3941\nVENDOR_ID_AQUA_PROJECT_GROUP = 3942\nVENDOR_ID_DEVANET = 3943\nVENDOR_ID_DATA_SOLUTIONS_GROUP = 3944\nVENDOR_ID_SYLANTRO_SYSTEMS = 3945\nVENDOR_ID_CONKLIN_CORPORATION = 3946\nVENDOR_ID_INVERSE_NETWORK_TECHNOLOGY = 3947\nVENDOR_ID_MICROLEGEND_TELECOM_SYSTEMS_INC = 3948\nVENDOR_ID_INTRINSIX_CORPORATION = 3949\nVENDOR_ID_TIERTWO_SYSTEMS = 3950\nVENDOR_ID_VISIONIK_A_S = 3951\nVENDOR_ID_CALY_CORPORATION = 3952\nVENDOR_ID_ALBERT_ACKERMANN_GMBH_CO_KG = 3953\nVENDOR_ID_MITRA_IMAGING_INC = 3954\nVENDOR_ID_LINKSYS = 3955\nVENDOR_ID_ENVOX = 3956\nVENDOR_ID_GLOBALARCHITECT = 3957\nVENDOR_ID_SOLUTION_ASSOCIATES = 3958\nVENDOR_ID_INTERCALL_COMMUNICATIONS_CONSULTING = 3959\nVENDOR_ID_GOVERNMENT_TECHNOLOGY_SOLUTIONS = 3960\nVENDOR_ID_CORONA_NETWORKS = 3961\nVENDOR_ID_MGL_GROUPE_AUBAY = 3962\nVENDOR_ID_RC_WRIGHT_ASSOCIATES = 3963\nVENDOR_ID_DANET_GMBH = 3964\nVENDOR_ID_SPACEBRIDGE_NETWORKS_CORPORATION = 3965\nVENDOR_ID_ALLIANZ_ELEMENTAR_VERSICHERUNGS_AKTIENGESELLSCHAFTEN = 3966\nVENDOR_ID_BOSCH_SICHERHEITSSYSTEME_ENGINEERING_GMBH = 3967\nVENDOR_ID_WEBLINE_COMMUNICATIONS_CORP = 3968\nVENDOR_ID_REALNETWORKS_INC = 3969\nVENDOR_ID_FRAGRAGE_NETWORK = 3970\nVENDOR_ID_IMECOM = 3971\nVENDOR_ID_APSION = 3972\nVENDOR_ID_AELITA_SOFTWARE_GROUP = 3973\nVENDOR_ID_CUSTOM_INTERNETWORKING_INC = 3974\nVENDOR_ID_BOSTON_COMMUNICATIONS_GROUP_INC = 3975\nVENDOR_ID_LINKDATA_SOLUTIONS_PTY_LIMITED = 3976\nVENDOR_ID_BROADBAND_NETWORKS_INC_2 = 3977\nVENDOR_ID_INGENIEURBUERO_FUER_TELEKOMMUNIKATIONS_UNDSOFTWARE_SYSTEMLOESUNGEN = 3978\nVENDOR_ID_ASGA_MICROELETRONICA_SA = 3979\nVENDOR_ID_HOME_ACCOUNT_NETWORK_INC = 3980\nVENDOR_ID_TROIKA_NETWORKS_INC = 3981\nVENDOR_ID_FAXNET_CORPORATION = 3982\nVENDOR_ID_VIDEO_NETWORKS_INC = 3983\nVENDOR_ID_EBSCO_PUBLISHING = 3984\nVENDOR_ID_AVERY_COMPUTER_SYSTEMS = 3985\nVENDOR_ID_HIGHWAYMASTER = 3986\nVENDOR_ID_CONCEPT_WEBCD_SERVICES_PVT_LTD = 3987\nVENDOR_ID_FINECOM_CO_LTD = 3988\nVENDOR_ID_DIGICOMM_CORPORATION = 3989\nVENDOR_ID_INNOVATIVE_TECHNOLOGY_SOFTWARE_SYSTEMS_LTD = 3990\nVENDOR_ID_RETICOM = 3991\nVENDOR_ID_OHMEGA_ELECTRONIC_PRODUCTS_LTD = 3992\nVENDOR_ID_PERFECT_ORDER = 3993\nVENDOR_ID_VIRTUAL_RESOURCES_COMMUNICATIONS_INC = 3994\nVENDOR_ID_VASCO_DATA_SECURITY_INTERNATIONAL_INC = 3995\nVENDOR_ID_OPEN_SYSTEMS_AG = 3996\nVENDOR_ID_IMPROWARE_AG = 3997\nVENDOR_ID_CHERUS = 3998\nVENDOR_ID_DYDX = 3999\nVENDOR_ID_HI_NET_RESEARCH_GROUP = 4000\nVENDOR_ID_KADAK_PRODUCTS_LTD = 4001\nVENDOR_ID_BANCO_DEL_BUEN_AYRE = 4002\nVENDOR_ID_GEORGE_MASON_UNIVERSITY = 4003\nVENDOR_ID_ALOHA_NETWORKS_INC = 4004\nVENDOR_ID_TUNDO_CORPORATION = 4005\nVENDOR_ID_TUNDO_COMMUNICATION_AND_TELEPHONY_LTD = 4006\nVENDOR_ID_CABLE_WIRELESS_COMMUNICATIONS_PLC = 4007\nVENDOR_ID_ARDEBIL_PTY_LTD = 4008\nVENDOR_ID_TELEPHONICS_CORPORATION = 4009\nVENDOR_ID_DORSAI_TECHNOLOGY = 4010\nVENDOR_ID_CNUT_ARCHETYPE_LTD = 4011\nVENDOR_ID_SELECTICA_INC = 4012\nVENDOR_ID_KPMG_LLP_ICE_TELECOM_SVO = 4013\nVENDOR_ID_STARBURST_SOFTWARE = 4014\nVENDOR_ID_COMPUTER_CONFIGURATIONS_HOLDINGS = 4015\nVENDOR_ID_IPERIA_INCORPORATED = 4016\nVENDOR_ID_LOGISISTEM_SRL = 4017\nVENDOR_ID_SECURITY_FIRST_TECHNOLOGIES_INC = 4018\nVENDOR_ID_APIS_SOFTWARE_GMBH = 4019\nVENDOR_ID_COOP_SWITZERLAND = 4020\nVENDOR_ID_ENSIM_CORPORATION = 4021\nVENDOR_ID_AEC_LTD = 4022\nVENDOR_ID_IMRAN = 4023\nVENDOR_ID_AVANTEL_SA = 4024\nVENDOR_ID_LEXITECH_INC = 4025\nVENDOR_ID_INTERNET_ACCESS_AG = 4026\nVENDOR_ID_GTE_LABORATORIES_INCORPORATED = 4027\nVENDOR_ID_DECISION_NETWORKS = 4028\nVENDOR_ID_NSI_COMMUNICATIONS_SYSTEMS_INC = 4029\nVENDOR_ID_MITSUBISHI_ELECTRIC_AUTOMATION_INC_UPS_DIVISION = 4030\nVENDOR_ID_ORILLION_USA_INC = 4031\nVENDOR_ID_DATAKINETICS_LTD = 4032\nVENDOR_ID_SIGNAL_CORE = 4033\nVENDOR_ID_INTRANET_INC = 4034\nVENDOR_ID_IGNITUS_COMMUNICATIONS = 4035\nVENDOR_ID_ENATOR_TELUB_AB = 4036\nVENDOR_ID_PRESBYTERIAN_CHURCH_USA = 4037\nVENDOR_ID_SOFTOV_ADVANCED_SYSTEMS_LTD = 4038\nVENDOR_ID_MAYAN_NETWORKS_CORPORATION = 4039\nVENDOR_ID_MICROSIGNALS_GROUP = 4040\nVENDOR_ID_NOMURA_INTERNATIONAL_PLC = 4041\nVENDOR_ID_DIGICOMMERCE_LTD = 4042\nVENDOR_ID_QNX_SOFTWARE_SYSTEMS_LTD = 4043\nVENDOR_ID_ELOQUENCE_LIMITED = 4044\nVENDOR_ID_THOMSON_CSF_COMMUNICATIONS = 4045\nVENDOR_ID_SCORT = 4046\nVENDOR_ID_HUNAN_COMPUTER_CO_LTD = 4047\nVENDOR_ID_KINKOS_INC = 4048\nVENDOR_ID_OPUS_COMUNICACAO_DE_DADOS = 4049\nVENDOR_ID_INFUNTAINMENT_LIMITED = 4050\nVENDOR_ID_SOWSEAR_SOLUTION_DESIGN_GROUP = 4051\nVENDOR_ID_VANGUARD_SECURITY_TECHNOLOGIES_LTD_RAVIV_KARNIELI = 4052\nVENDOR_ID_SWITCHCORE = 4053\nVENDOR_ID_ABATIS_SYSTEMS_CORPORATION = 4054\nVENDOR_ID_NIMBUS_SOFTWARE_AS = 4055\nVENDOR_ID_STREAMCORE = 4056\nVENDOR_ID_CONTROLNET_INC = 4057\nVENDOR_ID_GENERALI_IT_SOLUTIONS_GMBH = 4058\nVENDOR_ID_BROADLOGIC = 4059\nVENDOR_ID_JFAXCOM = 4060\nVENDOR_ID_TECHNOLOGY_CONTROL_SERVICES = 4061\nVENDOR_ID_ASTRAL_POINT_COMMUNICATIONS_INC = 4062\nVENDOR_ID_ASC_TECHNOLOGIES_AG_FORMERLY_ASC_TELECOM_AG = 4063\nVENDOR_ID_ELMA_OY_ELECTRONIC_TRADING = 4064\nVENDOR_ID_INFRASERV_GMBH_CO_GENDORF_KG = 4065\nVENDOR_ID_CARIOLI_CONSULTING_INC = 4066\nVENDOR_ID_FIVEMERE_LTD = 4067\nVENDOR_ID_PATHWAY_INC = 4068\nVENDOR_ID_ELLISON_SOFTWARE_CONSULTING_INC = 4069\nVENDOR_ID_US_WEST_INTERNET_SERVICES = 4070\nVENDOR_ID_PRAIM_SPA = 4071\nVENDOR_ID_QEYTON_SYSTEMS_AB = 4072\nVENDOR_ID_TELEDIFFUSION_DE_FRANCE = 4073\nVENDOR_ID_KRUTULIS_ENTERPRISES = 4074\nVENDOR_ID_SEDONA_NETWORKS = 4075\nVENDOR_ID_NOVERA_SOFTWARE_INC = 4076\nVENDOR_ID_THE_LIMITED_INC = 4077\nVENDOR_ID_SYMON_COMMUNICATIONS = 4078\nVENDOR_ID_24_7_MEDIA_INC = 4079\nVENDOR_ID_ARCHANGELS_REALTY_INC = 4080\nVENDOR_ID_ZELEA = 4081\nVENDOR_ID_TIMKO_ENTERPRISES = 4082\nVENDOR_ID_TELECOM_NEW_ZEALAND = 4083\nVENDOR_ID_TRILOGY_DEVELOPMENT_GROUP = 4084\nVENDOR_ID_DIB_GES_FUER_STANDORTBETREIBERDIENSTE_MBH = 4085\nVENDOR_ID_ERICSSON_RESEARCH_MONTREAL_LMC = 4086\nVENDOR_ID_USWEB_CKS = 4087\nVENDOR_ID_AKU_AWEKKU_CO = 4088\nVENDOR_ID_SALUTEL = 4089\nVENDOR_ID_CONSORTE_TELE_AS = 4090\nVENDOR_ID_INFITEL_ITALIA_SRL = 4091\nVENDOR_ID_COMPUTEL_STANDBY_BV = 4092\nVENDOR_ID_MERLOT_COMMUNICATIONS_INC = 4093\nVENDOR_ID_QUALITY_TANK_CONSTRUCTION_CO_INC = 4094\nVENDOR_ID_AXENT_TECHNOLOGIES_2 = 4095\nVENDOR_ID_THALES_E_SECURITY = 4096\nVENDOR_ID_ELAN_TEXT_TO_SPEECH = 4097\nVENDOR_ID_SIGNAAL_COMMUNICATIONS = 4098\nVENDOR_ID_TRISTRATA_INC = 4099\nVENDOR_ID_WAVETEK_WANDEL_GOLTERMANN = 4100\nVENDOR_ID_JOHN_HANCOCK_FINANCIAL_SERVICES = 4101\nVENDOR_ID_SHYM_TECHNOLOGY_INC = 4102\nVENDOR_ID_CNN = 4103\nVENDOR_ID_REDWOOD_TECHNOLOGY_BV = 4104\nVENDOR_ID_STARGUS_INC = 4105\nVENDOR_ID_ASTROPHYSIKALISCHES_INSTITUT_POTSDAM = 4106\nVENDOR_ID_BEIJING_TELECOM_ADMINISTRATION_CHINA = 4107\nVENDOR_ID_SERENDIP = 4108\nVENDOR_ID_DURANGO_SECURITY_GROUP = 4109\nVENDOR_ID_SOFTSTART_SERVICES_INC = 4110\nVENDOR_ID_WESTELL_UK_LTD = 4111\nVENDOR_ID_TUNITAS_GROUP = 4112\nVENDOR_ID_TENOR_NETWORKS_INC = 4113\nVENDOR_ID_T10NET = 4114\nVENDOR_ID_ARRIS_INTERACTIVE_LLC = 4115\nVENDOR_ID_INFOINTERACTIVE_INC = 4116\nVENDOR_ID_ENTERTAINMENT_SYSTEMS_TECHNOLOGY = 4117\nVENDOR_ID_TESLA_LIPTOVSKY_HRADOK_AS = 4118\nVENDOR_ID_REMOTE_MANAGEMENT_SYSTEMS_PTY_LTD = 4119\nVENDOR_ID_SONIK_TECHNOLOGIES_CORP = 4120\nVENDOR_ID_DIGITAL_CHICAGONET = 4121\nVENDOR_ID_THE_UNIVERSITY_OF_TEXAS_HEALTH_SCIENCE_CENTER_AT_HOUSTON = 4122\nVENDOR_ID_HITACHI_AMERICA_LTD = 4123\nVENDOR_ID_UNIFY_CONSULTING_GROUP_INC = 4124\nVENDOR_ID_SIEMENS_AG_ICP_KORNELIUS = 4125\nVENDOR_ID_LOGMATRIX_INC_FORMERLY_OPEN_SERVICE_2 = 4126\nVENDOR_ID_MERCURY_COMPUTER_SYSTEMS_INC = 4127\nVENDOR_ID_ARM_LTD = 4128\nVENDOR_ID_MNACCARICONSULTING = 4129\nVENDOR_ID_MICROWAVE_DATA_SYSTEMS = 4130\nVENDOR_ID_TRIDIUM = 4131\nVENDOR_ID_CONNECTICUT_HOSPITAL_ASSOCIATION = 4132\nVENDOR_ID_PHILIPJEDDYCPAS = 4133\nVENDOR_ID_PHILIP_J_EDDY_PARTNERS_PTY_LTD = 4134\nVENDOR_ID_NICETEC_GMBH = 4135\nVENDOR_ID_UQAM_UNIVERSIT_DU_QUBEC_MONTRAL = 4136\nVENDOR_ID_GAURI_INFO_COMMINC = 4137\nVENDOR_ID_SYCHRON_LTD = 4138\nVENDOR_ID_WAPIT_LTD = 4139\nVENDOR_ID_COMPUTER_TELEPHONY_SYSTEMS_AB = 4140\nVENDOR_ID_IMR_WORLDWIDE_PTY_LTD = 4141\nVENDOR_ID_FDS_NETWORKS_LIMITED = 4142\nVENDOR_ID_MI_DATA_SERVICES_ALEXANDER = 4143\nVENDOR_ID_PRICEWATERHOUSECOOPERS_FP5 = 4144\nVENDOR_ID_CRISTIE_DATA_PRODUCTS_LIMITED = 4145\nVENDOR_ID_GLOBALSIGN_NV_SA = 4146\nVENDOR_ID_ZUERCHER_KANTONALBANK = 4147\nVENDOR_ID_DEWITT_ROSS_STEVENS_SC = 4148\nVENDOR_ID_ACCRUE_SOFTWARE_INC = 4149\nVENDOR_ID_NORTHWESTERN_MUTUAL_LIFE_INSURANCE_COMPANY = 4150\nVENDOR_ID_IMPATH_NETWORKS_INC = 4151\nVENDOR_ID_TWO_WAY_TV = 4152\nVENDOR_ID_SIMPLE_NETWORKS = 4153\nVENDOR_ID_VERSA_TECHNOLOGY_INC = 4154\nVENDOR_ID_CEMOC_LTD = 4155\nVENDOR_ID_NEW_ACCESS_COMMUNICATIONS_INC = 4156\nVENDOR_ID_BCE_EMERGIS = 4157\nVENDOR_ID_MILMAN_CONSULTING = 4158\nVENDOR_ID_ELECTRONIC_THEATRE_CONTROLS_INC = 4159\nVENDOR_ID_VIVE_SYNERGIES_INC = 4160\nVENDOR_ID_QTERA_CORPORATION = 4161\nVENDOR_ID_INPUT_OUTPUT_INC = 4162\nVENDOR_ID_QUARRY_TECHNOLOGIES = 4163\nVENDOR_ID_SE_ELECTRONICS = 4165\nVENDOR_ID_THE_MERCY_FOUNDATION = 4166\nVENDOR_ID_MARKUS_LAUER_IT_CONSULTING = 4167\nVENDOR_ID_SYSTEMS_MANAGEMENT_SPECIALISTS = 4168\nVENDOR_ID_SYZYGY_SOLUTIONS = 4169\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_MILWAUKEE = 4170\nVENDOR_ID_BOSUNG_DATA_COMMUNICATION_CO = 4171\nVENDOR_ID_NARAE_INFORMATION_COMMUNICATION_ENTERPRISE = 4172\nVENDOR_ID_VIERLING_COMMUNICATION_SAS = 4173\nVENDOR_ID_CRITICAL_DEVICES_INC = 4174\nVENDOR_ID_TESSLERS_NIFTY_TOOLS = 4175\nVENDOR_ID_NEWTON_SOLUTIONS = 4176\nVENDOR_ID_REDDING_ENTERPRISES = 4177\nVENDOR_ID_ASPECT_SOFTWARE = 4178\nVENDOR_ID_COMMERCIAL_TECHNOLOGIES_CORP = 4179\nVENDOR_ID_TALKSTARCOM_INC = 4180\nVENDOR_ID_GENERIC_TELECOM_LTD = 4181\nVENDOR_ID_LENINGRAD_NUCLEAR_POWER_PLANT = 4182\nVENDOR_ID_HAMMER_TECHNOLOGIES = 4183\nVENDOR_ID_SMS_SHARED_MEDICAL_SYSTEMS_INC = 4184\nVENDOR_ID_BOOSTWORKS = 4185\nVENDOR_ID_AKA_CONSULTING_INC = 4186\nVENDOR_ID_STORAGE_AREA_NETWORKS_LTD = 4187\nVENDOR_ID_REALIZE_COMMUNICATIONS = 4188\nVENDOR_ID_EGIS_KK = 4189\nVENDOR_ID_ETRADE_SECURITIES = 4190\nVENDOR_ID_SIGOS_SYSTEMINTEGRATION_GMBH = 4191\nVENDOR_ID_TENNESSEE_VALLEY_AUTHORITY = 4192\nVENDOR_ID_VUT_BRNO_FACULTY_OF_EE_AND_CS = 4193\nVENDOR_ID_LEONIA_PLC = 4194\nVENDOR_ID_TELESOFT_INC = 4195\nVENDOR_ID_SIEMENS_AG_AUTOMATION_DRIVES = 4196\nVENDOR_ID_CAP_GEMINI_DENMARK_A_S = 4197\nVENDOR_ID_VPN_CONSORTIUM = 4198\nVENDOR_ID_CELLNET_TECHNOLOGY_INC = 4199\nVENDOR_ID_FAST_SEARCH_TRANSFER = 4200\nVENDOR_ID_TONNA_ELECTRONIQUE = 4201\nVENDOR_ID_SAMWOO_TELECOMMUNICATIONS_CO_LTD = 4202\nVENDOR_ID_THE_OPENLDAP_FOUNDATION = 4203\nVENDOR_ID_ADTEC_CO_LTD = 4204\nVENDOR_ID_DURAK_UNLIMITED = 4205\nVENDOR_ID_MITA_INDUSTRIAL_CO_LTD = 4206\nVENDOR_ID_DAYDREAM_PROMOTIONS = 4207\nVENDOR_ID_TANTIVY_COMMUNICATIONS_INC = 4208\nVENDOR_ID_CDVS_INC = 4209\nVENDOR_ID_ASSUMPTION_UNIVERSITY = 4210\nVENDOR_ID_CORILLIAN = 4211\nVENDOR_ID_SPM_SYSTEMENTWICKLUNG_UND_PROJEKTMANAGEMENT_GMBH = 4212\nVENDOR_ID_INFRAX_INC = 4213\nVENDOR_ID_SUNQUEST_INFORMATION_SYSTEMS_INC = 4214\nVENDOR_ID_SILKROAD_INC = 4215\nVENDOR_ID_TRITON_NETWORK_SYSTEMS = 4216\nVENDOR_ID_OPALIS = 4217\nVENDOR_ID_GECKO_SOFTWARE_LIMITED = 4218\nVENDOR_ID_REGIOCONNECT_GMBH = 4219\nVENDOR_ID_ARCANVS = 4220\nVENDOR_ID_SOUNDSCAIPE = 4221\nVENDOR_ID_ONDISPLAY_INCORPORATED = 4222\nVENDOR_ID_MILGO_SOLUTIONS_INC = 4223\nVENDOR_ID_JOHN_H_HARLAND_COMPANY = 4224\nVENDOR_ID_PEACH_NETWORKS = 4225\nVENDOR_ID_COMPOSIT_COMMUNICATIONS = 4226\nVENDOR_ID_SIXTRA_CHILE_SA = 4227\nVENDOR_ID_DASCOM_INC = 4228\nVENDOR_ID_WESTFAIR_FOODS_LTD = 4229\nVENDOR_ID_PIROUETTE_INC = 4230\nVENDOR_ID_OB_TELEMATICS = 4231\nVENDOR_ID_CTX_OPTO_ELECTRONICS_CORP = 4232\nVENDOR_ID_DALIAN_DAXIAN_NETWORK_SYSTEM_COLTD = 4233\nVENDOR_ID_PRAGMA_LTDA = 4234\nVENDOR_ID_CULTURESHOCK_MULTIMEDIA = 4235\nVENDOR_ID_SPECTEL_LTD = 4236\nVENDOR_ID_BUSBY_SOFTWARE = 4237\nVENDOR_ID_MEDIA_STATION_INC = 4238\nVENDOR_ID_KOMMUNEDATA_A_S = 4239\nVENDOR_ID_VODAFONE_INFORMATION_SYSTEMS_GMBH = 4240\nVENDOR_ID_PEAKSTONE_CORPORATION = 4241\nVENDOR_ID_THE_CLOROX_COMPANY = 4242\nVENDOR_ID_NPO_INFOSERVICE = 4243\nVENDOR_ID_CINNABAR_NETWORKS_INC = 4244\nVENDOR_ID_POSTEN_SDS_AS = 4245\nVENDOR_ID_COMVERSE_NETWORK_SYSTEMS_CNS = 4246\nVENDOR_ID_THE_UNIVERSITY_OF_EDINBURGH = 4247\nVENDOR_ID_INTERCONEXION_ELECTRICA_SA = 4248\nVENDOR_ID_NATEKS_LTD = 4249\nVENDOR_ID_HIT_INDUSTRIES_SALES_LTD = 4250\nVENDOR_ID_SYSTEM_DESIGN_REPAIR = 4251\nVENDOR_ID_HIGH_SPEED_ACCESS = 4252\nVENDOR_ID_LUXN_INC = 4253\nVENDOR_ID_ARVATO_SYSTEMS_GMBH = 4254\nVENDOR_ID_PERFECTO_TECHNOLOGIES = 4255\nVENDOR_ID_KIPLING_INFORMATION_TECHNOLOGY_AB = 4256\nVENDOR_ID_CYBERSTATION_INC = 4257\nVENDOR_ID_OPEN4RENT = 4258\nVENDOR_ID_FDP = 4259\nVENDOR_ID_3RD_MILLENNIUM_CONSULTING = 4260\nVENDOR_ID_GLOBOL_SOLUTIONS = 4261\nVENDOR_ID_JEANCLAUDE_METAL_CRAFT = 4262\nVENDOR_ID_DR_ANDREAS_MULLER_BERATUNG_UND_ENTWICKLUNG = 4263\nVENDOR_ID_WORLD_RAMP_INC = 4264\nVENDOR_ID_TACHION_NETWORK_TECHNOLOGIES_INC = 4265\nVENDOR_ID_FERNUNIVERSITAET_HAGEN = 4266\nVENDOR_ID_TRANSCEND_INC = 4267\nVENDOR_ID_BANCTEC_COMPUTER_AND_NETWORK_SERVICES = 4268\nVENDOR_ID_WORLDPORT_COMMUNICATIONS_INC = 4269\nVENDOR_ID_EDV_BERATUNG_BLECHSCHMIDT = 4270\nVENDOR_ID_NEVEX_SOFTWARE_TECHNOLOGIES_INC = 4271\nVENDOR_ID_EXACT_SOLUTIONS_INC = 4272\nVENDOR_ID_LEROY_AUTOMATIQUE_INDUSTRIELLE = 4273\nVENDOR_ID_PANGOLIN_UK_LTD = 4274\nVENDOR_ID_DUKE_UNIVERSITY = 4275\nVENDOR_ID_PCS_INNOVATIONS_INC = 4276\nVENDOR_ID_TELOCITY_COMMUNICATIONS_INC = 4277\nVENDOR_ID_YAHOO = 4278\nVENDOR_ID_SIROCCO_SYSTEMS = 4279\nVENDOR_ID_ARTEM_GMBHMICHAEL_MARSANU_CATRINEL_CATRINESCU = 4280\nVENDOR_ID_ASSUMPTION = 4281\nVENDOR_ID_KENCAST_INC = 4282\nVENDOR_ID_DUAL_ZENTRUMN_GMBH = 4283\nVENDOR_ID_NORWEB_INTERNETT_TJENESTER = 4284\nVENDOR_ID_RUSLAN_COMMUNICATIONSDMITRY_SHIBAYEV_ALEXANDR_GORBACHEV = 4285\nVENDOR_ID_E_SECURITY_INC = 4286\nVENDOR_ID_PHILIPS_CONSUMER_ELECTRONICS = 4287\nVENDOR_ID_FORGE_RESEARCH_PTY_LTD = 4288\nVENDOR_ID_VBRICK_SYSTEMS_INC = 4289\nVENDOR_ID_LOGIC_INNOVATIONS_INC = 4290\nVENDOR_ID_CHORDIANT_SOFTWARE_INC = 4291\nVENDOR_ID_ENTERA_INC = 4292\nVENDOR_ID_BENSONS = 4293\nVENDOR_ID_SALBU_PTY_LTD = 4294\nVENDOR_ID_KALKI_COMMUNICATION_TECHNOLOGIES_PVT_LTD = 4295\nVENDOR_ID_CENFOR_SL = 4296\nVENDOR_ID_FINISAR_CORPORATION = 4297\nVENDOR_ID_ETC_EXCELLENCE_IN_TECHNOLOGY_CONSULTING = 4298\nVENDOR_ID_OPEN_SOLUTION_PROVIDERS = 4299\nVENDOR_ID_INMON_CORP = 4300\nVENDOR_ID_UNISERVE_CONSULTING_LIMITED = 4301\nVENDOR_ID_CYBEX_COMPUTER_PRODUCTS_CORPORATION = 4302\nVENDOR_ID_CAMART = 4303\nVENDOR_ID_CSIRO_DIV_OF_ANIMAL_HEALTH = 4304\nVENDOR_ID_UNIVERSITY_OF_MARYLAND = 4305\nVENDOR_ID_JMDEL_SYSTEMS = 4306\nVENDOR_ID_OFFICE_CONNECT_INC = 4307\nVENDOR_ID_CONSEJO_SUPERIOR_DE_CAMARAS = 4308\nVENDOR_ID_IP_TECHNOLOGIES = 4309\nVENDOR_ID_UNIQUE_COMPUTER_SERVICES_INC = 4310\nVENDOR_ID_EQUINIX = 4311\nVENDOR_ID_VITA_SYSTEMS_INC = 4312\nVENDOR_ID_ALLAYER_TECHNOLOGIES = 4313\nVENDOR_ID_XILINX_INC = 4314\nVENDOR_ID_XACCT_TECHNOLOGIES_LTD = 4315\nVENDOR_ID_BRANDEIS_UNIVERSITY = 4316\nVENDOR_ID_JAVELIN_TECHNOLOGY_CORP = 4317\nVENDOR_ID_EDIXIA = 4318\nVENDOR_ID_ENNOVATE_NETWORKS_INC = 4319\nVENDOR_ID_FRESHWATER_SOFTWARE_INC = 4320\nVENDOR_ID_RIVERBED_TECHNOLOGIES = 4321\nVENDOR_ID_MURATA_MACHINERY_LTD = 4322\nVENDOR_ID_QUANTUM_BRIDGE = 4323\nVENDOR_ID_SAEJIN_TM_CO_LTD = 4324\nVENDOR_ID_APERTO_NETWORKS = 4325\nVENDOR_ID_CROWN_INTERNATIONAL = 4326\nVENDOR_ID_TRADING_WORLDCOM = 4327\nVENDOR_ID_MI_SYSTEMS_KK = 4328\nVENDOR_ID_SIEMENS_AG = 4329\nVENDOR_ID_PMC_SIERRA_INC = 4330\nVENDOR_ID_AVENTAIL_CORPORATION = 4331\nVENDOR_ID_INSTITUTE_OF_SYSTEMS_INFORMATION_TECHNOLOGIES_KYUSHU = 4332\nVENDOR_ID_INSIGHT_TECHNOLOGY_INC = 4333\nVENDOR_ID_AMPERSAND_CHANTILLY_COMMUNICATIONS = 4334\nVENDOR_ID_TECHWORLD_INCORPORATED = 4335\nVENDOR_ID_EXPERTECH_PTY_LTD = 4336\nVENDOR_ID_RADISYS_CORP = 4337\nVENDOR_ID_CASE_CORPORATION = 4338\nVENDOR_ID_RHODE_ISLAND_ECONOMIC_DEVELOPMENT_CORPORATION = 4339\nVENDOR_ID_BACTERIOPHAGE_LAMBDA = 4340\nVENDOR_ID_SPIDER_INTERNET_SERVICES = 4341\nVENDOR_ID_USHEALTH_REAL_ESTATE = 4342\nVENDOR_ID_BOUNDLESS_TECHNOLOGIES = 4343\nVENDOR_ID_POST_INDUSTRIAL_TRAINING_INSTITUTE = 4344\nVENDOR_ID_THOMAS_BETTS = 4345\nVENDOR_ID_PHOENIX_CONTACT_GMBH_CO = 4346\nVENDOR_ID_MESSAGEWISE_INC = 4347\nVENDOR_ID_DOMINO_COMPUTERS_NIGERIA_LTD = 4348\nVENDOR_ID_LXCO_TECHNOLOGIES_AG = 4349\nVENDOR_ID_MAXPERT_AG = 4350\nVENDOR_ID_NETWORK_SYSTEMS_GROUP = 4351\nVENDOR_ID_URGLE = 4352\nVENDOR_ID_BUILDERS_NETWORK_LTD = 4353\nVENDOR_ID_NETDRAGON_LTD = 4354\nVENDOR_ID_RAPIDSTREAM_INC = 4355\nVENDOR_ID_INFORM_GMBH_CO_KG = 4356\nVENDOR_ID_COTENG = 4357\nVENDOR_ID_ZIATECH_CORPORATION = 4358\nVENDOR_ID_TELGEN_CORPORATION = 4359\nVENDOR_ID_TUMBLEWEED_COMMUNICATIONS = 4360\nVENDOR_ID_AMGEN_INC = 4361\nVENDOR_ID_NYLORAC_SOFTWARE_INC = 4362\nVENDOR_ID_UNIVERSITY_OF_BRISTOL_JULIUS = 4363\nVENDOR_ID_BV_SOLUTIONS_GROUP = 4364\nVENDOR_ID_MYOWNGIG = 4365\nVENDOR_ID_LOCUS_CORP = 4366\nVENDOR_ID_ELECTRONIC_LABORATORY_SERVICES_CC = 4367\nVENDOR_ID_HAND_GMBH = 4368\nVENDOR_ID_BROCADE_COMMUNICATIONS_SYSTEMS_INC_FORMERLY_MCDATAINC = 4369\nVENDOR_ID_TOKYO_DISNEYSEA = 4370\nVENDOR_ID_DIGITAL_UNITED_INC = 4371\nVENDOR_ID_SOFTLINK_SRO = 4372\nVENDOR_ID_RIVERE_CORPORATION = 4373\nVENDOR_ID_MOTIVE_COMMUNICATIONS_INC = 4374\nVENDOR_ID_DT_RESEARCH_INC = 4375\nVENDOR_ID_NETTECH_SYSTEMS_INC = 4376\nVENDOR_ID_X_POINT_COMMUNICATIONS = 4377\nVENDOR_ID_ALIEN_INTERNET_SERVICES = 4379\nVENDOR_ID_ELIPSE_SOFTWARE = 4380\nVENDOR_ID_ASTRACON_INC = 4381\nVENDOR_ID_ALADDIN_KNOWLEDGE_SYSTEMS_LTD = 4382\nVENDOR_ID_GLASSEYCOM = 4383\nVENDOR_ID_MERIDIANUS = 4384\nVENDOR_ID_STIMEORG_WG = 4385\nVENDOR_ID_TDC_A_S = 4386\nVENDOR_ID_UBIQUE_LTD = 4387\nVENDOR_ID_ALCATEL_ALTECH_TELECOMS = 4388\nVENDOR_ID_SYS_DIS = 4389\nVENDOR_ID_KEMPER_INSURANCE = 4390\nVENDOR_ID_TEXAS_AM_UNIVERSITY = 4391\nVENDOR_ID_NORTHBROOK_SERVICES_INC = 4392\nVENDOR_ID_PENTACOM_LTD = 4393\nVENDOR_ID_SOFTFX = 4394\nVENDOR_ID_UNIFIED_TECHNOLOGIES_SVERIGE_HB = 4395\nVENDOR_ID_THE_OPEN_GROUP = 4396\nVENDOR_ID_OPT_TECHNOLOGIES_LIMITED = 4397\nVENDOR_ID_BL_ASSOCIATES_INC = 4398\nVENDOR_ID_JOHNSON_CONTROLS_INC = 4399\nVENDOR_ID_CYPRESS_CORPORATION = 4400\nVENDOR_ID_MOONVINE = 4401\nVENDOR_ID_NETPREDICT_INC = 4402\nVENDOR_ID_VISUAL_BRAIN_LTD_SARL = 4403\nVENDOR_ID_TEKELEC_2 = 4404\nVENDOR_ID_ANSID_INC = 4405\nVENDOR_ID_TOYO_INFORMATION_SYSTEMS_CO_LTD = 4406\nVENDOR_ID_DRACOM_LTD = 4407\nVENDOR_ID_EDSL = 4408\nVENDOR_ID_CAMPUS_PIPELINE_INC = 4409\nVENDOR_ID_EARTH_STAR_GROUP = 4410\nVENDOR_ID_SWINBURNECOM = 4411\nVENDOR_ID_WROX_PRESS = 4412\nVENDOR_ID_BROADCOM_CORPORATION = 4413\nVENDOR_ID_SCANDINAVIAN_SOFTLINE_TECHNOLOGY_OY = 4414\nVENDOR_ID_FLORIDA_DEPARTMENT_OF_LAW_ENFORCEMENT = 4415\nVENDOR_ID_STARFIRE_EXPERTS_LTD = 4416\nVENDOR_ID_ALIDIAN_NETWORKS_INC = 4417\nVENDOR_ID_MEGASYS_COMPUTER_TECHNOLOGIES = 4418\nVENDOR_ID_SONY_ONLINE_ENTERTAINMENT = 4419\nVENDOR_ID_WESTICA_LIMITED = 4420\nVENDOR_ID_SANTERA_SYSTEMS_INC = 4421\nVENDOR_ID_GTE_IT = 4422\nVENDOR_ID_GARNET_SYSTEMS_CO_LTD = 4423\nVENDOR_ID_RAPID_LOGIC = 4424\nVENDOR_ID_META_GYMNASTICS_INC = 4425\nVENDOR_ID_FUJITSU_AUSTRALIA_SOFTWARE_TECHNOLOGY_PTY_LTD = 4426\nVENDOR_ID_PIRONET_INTRANET_AG = 4427\nVENDOR_ID_SUPERCOMPUTING_SYSTEMS_AG = 4428\nVENDOR_ID_MEGACHIPS_CORPORATION = 4429\nVENDOR_ID_SILICON_AUTOMATION_SYSTEMS_INDIA_LTD = 4430\nVENDOR_ID_NETIA = 4431\nVENDOR_ID_APANI_NETWORKS = 4432\nVENDOR_ID_STRATEGIC_FINANCIAL_PLANNING = 4433\nVENDOR_ID_BLUESTONE_SOFTWARE_INC = 4434\nVENDOR_ID_SUEDTIROLER_INFORMATIK_AG = 4435\nVENDOR_ID_MISSION_CRITICAL = 4436\nVENDOR_ID_CANADIAN_IMPERIAL_BANK_OF_COMMERCE = 4437\nVENDOR_ID_GOTEBORG_ENERGI_AB = 4438\nVENDOR_ID_ENZANE_ENTERPRISE = 4439\nVENDOR_ID_PURDUE_UNIVERSITY = 4440\nVENDOR_ID_GE_CAPITAL_FLEET_SERVICES = 4441\nVENDOR_ID_KARA = 4442\nVENDOR_ID_NED_BODDIE_ASSOC = 4443\nVENDOR_ID_SAINCO = 4444\nVENDOR_ID_INTER_SARL = 4445\nVENDOR_ID_PRAIRIE_DEVELOPMENT_INC = 4446\nVENDOR_ID_ROCHESTER_INSTITUTE_OF_TECHNOLOGY = 4447\nVENDOR_ID_E_LOCK_TECHNOLOGIES_INC = 4448\nVENDOR_ID_SSH_COMMUNICATIONS_SECURITY_INC = 4449\nVENDOR_ID_IC_CONSULT = 4450\nVENDOR_ID_MORION = 4451\nVENDOR_ID_TELENOR_4TEL = 4452\nVENDOR_ID_INFONET_SERVICES_CORP = 4453\nVENDOR_ID_GOTTFRIED_WEB_AND_COMPUTER_CONSULTING = 4454\nVENDOR_ID_I_BUS_CORPORATION = 4455\nVENDOR_ID_QUALIMETRICS = 4456\nVENDOR_ID_ALPHA_OMEGA_STOREHOUSE_LLC = 4457\nVENDOR_ID_RADWIN_LTD = 4458\nVENDOR_ID_INDUSTREE_BV = 4459\nVENDOR_ID_FIRSTWORLD_COMMUNICATIONS = 4460\nVENDOR_ID_OPENNETWORK_TECHNOLOGIES = 4461\nVENDOR_ID_SVM_MICROWAVES_SRO = 4462\nVENDOR_ID_TAONET = 4463\nVENDOR_ID_MPB_COMMUNICATIONS_INC = 4464\nVENDOR_ID_VIEWCASTCOM = 4465\nVENDOR_ID_HARMONIC_VIDEO_NETWORK_FORMERLY_TADIRAN_SCOPUS = 4466\nVENDOR_ID_FIBROLAN = 4467\nVENDOR_ID_TELKOOR_QPS = 4468\nVENDOR_ID_DIVERSINET_CORP = 4469\nVENDOR_ID_TELEDREAM_INC = 4470\nVENDOR_ID_NETWORK_SECURITY_WIZARDS = 4471\nVENDOR_ID_MONTAGE_IT_SERVICES_INC = 4472\nVENDOR_ID_OPTO_22 = 4473\nVENDOR_ID_PAXCOMM = 4474\nVENDOR_ID_RAINBOW_SOFTWARE_SOLUTIONS_INC = 4475\nVENDOR_ID_LIGHTREALM = 4476\nVENDOR_ID_INFOCOM_SYSTEMS_SERVICES = 4477\nVENDOR_ID_ALACRITECH = 4478\nVENDOR_ID_SPECTRAPOINT_WIRELESS_LLC = 4479\nVENDOR_ID_FASTFORWARD_NETWORKS_INC = 4480\nVENDOR_ID_CIA_EUROPE = 4481\nVENDOR_ID_RWE_AG = 4482\nVENDOR_ID_IBI_CO_LTD = 4483\nVENDOR_ID_PACIFIC_SOFTWORKS_INC = 4484\nVENDOR_ID_DATAPORT_COMMUNICATIONS = 4485\nVENDOR_ID_VERIO_WEB_HOSTING = 4486\nVENDOR_ID_JOHNSON_JOHNSON_NCS = 4487\nVENDOR_ID_MEDIAHOUSE_SOFTWARE_INC = 4488\nVENDOR_ID_SIERRA_NETWORKS_INC = 4489\nVENDOR_ID_POLYGON_CONSULTANTS_IN_INFORMATICS_LTD = 4490\nVENDOR_ID_CABLE_TELEVISION_LABORATORIES_INC = 4491\nVENDOR_ID_SOLUTIONSOFT_SYSTEMS_INC = 4492\nVENDOR_ID_UNIREL_SISTEMI_SRL_MAURO = 4493\nVENDOR_ID_NOVARTIS_AG = 4494\nVENDOR_ID_TAIMA_CORP = 4495\nVENDOR_ID_SIEMENS_CANADA_LTD = 4496\nVENDOR_ID_AVAIL_NETWORKS_INC = 4497\nVENDOR_ID_NETQOS_INC = 4498\nVENDOR_ID_SAFEFUNDSCOM = 4499\nVENDOR_ID_JORDAN_TECH = 4500\nVENDOR_ID_EFORNET_CORPORATION = 4501\nVENDOR_ID_PLAYBEINGORG = 4502\nVENDOR_ID_CORPORATE_INFORMATION_TECHNOLOGIES = 4503\nVENDOR_ID_SEAMLESS_KLUDGE_INTERNETWORKING_LABS_LTD = 4504\nVENDOR_ID_CALTEX_AUSTRALIA_PETROLEUM_PTY_LTD = 4505\nVENDOR_ID_CHANNELS_MEASUREMENT_SERVICES = 4506\nVENDOR_ID_THE_MIAMI_HERALD = 4507\nVENDOR_ID_GEEKS_LIKE_US = 4508\nVENDOR_ID_NAKAYO_TELECOMMUNICATIONS_INC = 4509\nVENDOR_ID_DRACOM = 4510\nVENDOR_ID_CONCORD_ERACOM_COMPUTER_SECURITY_GMBH = 4511\nVENDOR_ID_SOFREAVIA = 4512\nVENDOR_ID_TERAWAVE_COMMUNICATIONS_INC = 4513\nVENDOR_ID_BANK_AMERICA = 4514\nVENDOR_ID_PACKETLIGHT_NETWORKS_LTD = 4515\nVENDOR_ID_SIAS = 4516\nVENDOR_ID_HELIUS_INC = 4517\nVENDOR_ID_KMZ_CONSULTING_GROUP_INC = 4518\nVENDOR_ID_VERO_ELECTRONICS_LTD = 4519\nVENDOR_ID_JOOHONG_INFORMATION_AND_COMMUNICATIONS = 4520\nVENDOR_ID_GLOBAL_ADSI_SOLTUIONS_INC = 4521\nVENDOR_ID_ONTARIO_POWER_GENERATION = 4522\nVENDOR_ID_EXALINK_LTD = 4523\nVENDOR_ID_STORAGESOFT_INC = 4524\nVENDOR_ID_MICRON_TECHNOLOGY_INC = 4525\nVENDOR_ID_NETGEAR = 4526\nVENDOR_ID_ZEITGEIST_Y2K01_LTD = 4527\nVENDOR_ID_8X8_INCORPORATED = 4528\nVENDOR_ID_INTERNET_SERVICE_DEPT_WORLDTELECOM_PLC = 4529\nVENDOR_ID_TUNBRIDGE_WELLS_EQUITABLE_FRIENDLY_SOCIETY_LTD = 4530\nVENDOR_ID_ON_TECHNOLOGY_CORPORATION_ROBERT_SMOKEY_MONTGOMERY = 4531\nVENDOR_ID_GVCTW_CORPORATION = 4532\nVENDOR_ID_ATCOMM_CORPORATION = 4533\nVENDOR_ID_ONEBOXCOM = 4534\nVENDOR_ID_JAVELINX_CORPORATION = 4535\nVENDOR_ID_DIGITECH = 4536\nVENDOR_ID_PLANEX_COMMUNICATIONS_INC = 4537\nVENDOR_ID_EASYBUY = 4538\nVENDOR_ID_REMARQ_COMMUNITIES_INC = 4539\nVENDOR_ID_INTELECT_NETWORK_TECHNOLOGIES_INC = 4540\nVENDOR_ID_OUTREACH_TECHNOLOGIES_INC = 4541\nVENDOR_ID_ALERTING_SPECIFICATIONS_FORUM = 4542\nVENDOR_ID_DIGITELLUM_INC = 4543\nVENDOR_ID_GJENSIDIGE_FORSIKRING = 4544\nVENDOR_ID_ATLANTIS_SOFTWARE_INC = 4545\nVENDOR_ID_AST_ENGINEERING_SERVICES_INC = 4546\nVENDOR_ID_ATTO_TECHNOLOGY_INC = 4547\nVENDOR_ID_QUICKSTART_CONSULTING_INC = 4548\nVENDOR_ID_WEBGEAR_INC = 4549\nVENDOR_ID_THE_JAPAN_ELECTRICAL_MANUFACTURERS_ASSOCIATION = 4550\nVENDOR_ID_EMPIRIX_INC = 4551\nVENDOR_ID_WAYPORT_INC = 4552\nVENDOR_ID_NEXTCOM_KK = 4553\nVENDOR_ID_TRISOL_TECHNOLOGIES = 4554\nVENDOR_ID_SOCOMEC_SICON_UPS = 4555\nVENDOR_ID_SCALI = 4556\nVENDOR_ID_QWEST = 4557\nVENDOR_ID_EUROMOVE_SRO = 4558\nVENDOR_ID_NVISION = 4559\nVENDOR_ID_SHEBANG_NETWORKING = 4560\nVENDOR_ID_OPENDOF_PROJECT_INC_FORMERLY_PANASONIC_ELECTRIC_WORKS_LABORATORY_OF_AMERICA_INC_SLC_LAB = 4561\nVENDOR_ID_CENTERMARK_ENGINEERING_LC = 4562\nVENDOR_ID_SYLLOGI_INC = 4563\nVENDOR_ID_DIVERSE_NETWORKS_INC = 4564\nVENDOR_ID_CEDELBANK = 4566\nVENDOR_ID_CEDEL_GLOBAL_SERVICES = 4567\nVENDOR_ID_CEDEL_INTERNATIONAL = 4568\nVENDOR_ID_ENSIGMA_LTD = 4569\nVENDOR_ID_NETENTERPRISE_INC = 4570\nVENDOR_ID_JMCS_INC = 4571\nVENDOR_ID_DAEDALUS_CORPORATION = 4572\nVENDOR_ID_SECURESOFT_INC = 4573\nVENDOR_ID_COMPU_ALVARADO = 4574\nVENDOR_ID_MANI_NETWORK_CO_LTD = 4575\nVENDOR_ID_CORPORACION_ZIGOR_SA = 4576\nVENDOR_ID_INTERNET_RESEARCH = 4577\nVENDOR_ID_SSE_TELECOM = 4578\nVENDOR_ID_VEST_INTERNETT = 4579\nVENDOR_ID_DIVERSIFIED_BUSINESS_GROUP = 4580\nVENDOR_ID_SEEBURGER_GMBH = 4581\nVENDOR_ID_WORLD_TELECOM_PLC = 4582\nVENDOR_ID_NETSTAR = 4583\nVENDOR_ID_HEADHUNTERS_LONDON_LIMITED = 4584\nVENDOR_ID_EEL_VALLEY_INTERNET = 4585\nVENDOR_ID_ENTERPRISE_CONSULTING_GROUP = 4586\nVENDOR_ID_DIAMOND_MULTIMEDIA_SYSTEMS_INC = 4587\nVENDOR_ID_CRITICAL_PATH_INC = 4588\nVENDOR_ID_DATAP_DIVISION_OF_TCENET_INC = 4589\nVENDOR_ID_ZOOM_TELEPHONICS_INC = 4590\nVENDOR_ID_SPACECOM_SYSTEMS_INC = 4591\nVENDOR_ID_FRONTIER_COMMUNICATIONS = 4592\nVENDOR_ID_SAET_IS_SPA = 4593\nVENDOR_ID_SARITEL_SPA = 4594\nVENDOR_ID_IS_PRODUCTION = 4595\nVENDOR_ID_VIDEOFRAME_SYSTEMS = 4596\nVENDOR_ID_FIBERVIEW_TECHNOLOGIES_INC = 4597\nVENDOR_ID_JCAMPUS = 4598\nVENDOR_ID_MIMSOFT = 4599\nVENDOR_ID_CYBERTIME_INFORMATIK_GMBH = 4601\nVENDOR_ID_BEA_SYSTEMS = 4602\nVENDOR_ID_TERS_LTD = 4603\nVENDOR_ID_BECA_CARTER_HOLLINGS_FERNER_LTD_MIKE_BEAMISH = 4604\nVENDOR_ID_TORONTO_SCHOOL_OF_BUSINESS = 4605\nVENDOR_ID_INFORMATION_SECURITY_AGENCY_LTD = 4606\nVENDOR_ID_SOFTWARE_SHELF_TECHNOLOGIES = 4607\nVENDOR_ID_HARCO_TECHNOLOGY_LTD = 4608\nVENDOR_ID_SEAMLESS_TECHNOLOGIES_INC = 4609\nVENDOR_ID_STRATEGIC_TECHNOLOGIES = 4610\nVENDOR_ID_DIGITAL_WIRELESS_CORPORATION = 4611\nVENDOR_ID_BAKER_STREET_TECHNOLOGIES_INC = 4612\nVENDOR_ID_SPHERE_COMMUNICATIONS_INC = 4613\nVENDOR_ID_LUMINOUS_NETWORKS_INC = 4614\nVENDOR_ID_I_O_DATA_DEVICE_INC = 4615\nVENDOR_ID_COMPUTERJOBSCOM = 4616\nVENDOR_ID_MARCOMPUTER = 4617\nVENDOR_ID_ARMILLAIRE_TECHNOLOGIES = 4618\nVENDOR_ID_EREMINDERCOM = 4619\nVENDOR_ID_PROGRESSIVE_SYSTEMS_INC = 4620\nVENDOR_ID_NSTOP_TECHNOLOGIES_INC = 4621\nVENDOR_ID_LEGIAN_CONSULTANCY_NETWORK_SERVICES = 4622\nVENDOR_ID_LIFIX_SYSTEMS_OY = 4623\nVENDOR_ID_TRAINING_FOR_TOMORROW = 4624\nVENDOR_ID_MAZONE_SYSTEMS = 4625\nVENDOR_ID_WESTLB = 4626\nVENDOR_ID_SAET_IS_SRL = 4627\nVENDOR_ID_XTRA_ON_LINE = 4628\nVENDOR_ID_VERAZ_NETWORKS_INC_FORMERLY_IPVERSE = 4629\nVENDOR_ID_FILETEK_INC = 4630\nVENDOR_ID_HOMELOANDOTCOM = 4631\nVENDOR_ID_FREEMARKETS = 4632\nVENDOR_ID_CQOS_INC = 4633\nVENDOR_ID_VCON_TELECOMMUNICATIONS_LTD = 4634\nVENDOR_ID_THE_VE_GROUP = 4635\nVENDOR_ID_INTRUST_SOFTWARE = 4636\nVENDOR_ID_RGE_INC = 4637\nVENDOR_ID_SGI_SOLUCIONES_GLOBALES_INTERNET = 4638\nVENDOR_ID_TETRAGONE_SA = 4639\nVENDOR_ID_ECKERD_COLLEGE = 4640\nVENDOR_ID_TELLABS_INC_ADP = 4641\nVENDOR_ID_BEL_STUDIO_H_SAGER = 4642\nVENDOR_ID_NWORKS = 4643\nVENDOR_ID_WINCOM_TECHNOLOGY_INC = 4644\nVENDOR_ID_DATA_DUCTUS_AB = 4645\nVENDOR_ID_NETCONVERGENCE_INC = 4646\nVENDOR_ID_INTERNET_CHESS_CLUB = 4647\nVENDOR_ID_THE_GRATEFUL_NET = 4648\nVENDOR_ID_CPLANE_INC = 4649\nVENDOR_ID_MARC_AUGUST_INTERNATIONAL = 4650\nVENDOR_ID_AZTEC_RADIOMEDIA = 4651\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_ILMENAU = 4652\nVENDOR_ID_PRECISE_SOFTWARE_TECHNOLOGIES_INC = 4653\nVENDOR_ID_OCLC_ONLINE_COMPUTER_LIBRARY_CENTER_INC = 4654\nVENDOR_ID_TELECHECK_INTERNATIONAL_INC = 4655\nVENDOR_ID_BANCO_DE_GALICIA_Y_BUENOS_AIRES = 4656\nVENDOR_ID_GOODALL_SECURE_SERVICES = 4657\nVENDOR_ID_ENTERTAINMENT_INTERNATIONAL_INC = 4658\nVENDOR_ID_TECO_IMAGE_SYSTEMS_CO_LTD = 4659\nVENDOR_ID_RCMS_LTD = 4660\nVENDOR_ID_SPAZIO_RD = 4661\nVENDOR_ID_FRANK_MATTHIESS = 4662\nVENDOR_ID_DECOR_METALL_GMBH_CO_KG = 4663\nVENDOR_ID_ARK_RESEARCH_CORPORATION = 4664\nVENDOR_ID_PERFORMANCE_DESIGN_LIMITED = 4665\nVENDOR_ID_ITCHIGO_COMMUNICATIONS_GMBH = 4666\nVENDOR_ID_TELPERION_NETWORK_SYSTEMS = 4667\nVENDOR_ID_TURNING_POINT_TECHNOLOGIES = 4668\nVENDOR_ID_MURO_ENTERPRISES_INC = 4669\nVENDOR_ID_NATIONAL_COMPUTATIONAL_SCIENCE_ALLIANCE = 4670\nVENDOR_ID_ADVANCED_TELECOM_SYSTEMS_INC = 4671\nVENDOR_ID_US_HEALTHCARE_PKI = 4672\nVENDOR_ID_WAVE_RESEARCH_NV = 4673\nVENDOR_ID_CRUNCH_TECHNOLOGIES_BV = 4674\nVENDOR_ID_WK_AUDIOSYSTEMS_BV = 4675\nVENDOR_ID_HEALTHAXISCOM_INC = 4676\nVENDOR_ID_CONCERT_TECHNOLOGIES = 4677\nVENDOR_ID_INFORMATION_DEVELOPERS_UNLIMITED = 4678\nVENDOR_ID_OPICOM = 4679\nVENDOR_ID_TELECOMMUNICATIONS_SYSTEMS_GROUP_UCL = 4680\nVENDOR_ID_DVG_HANNOVER_DATENVERARBEITUNGSGESELLSCHAFT_MBH = 4681\nVENDOR_ID_LINUX_HA_PROJECT = 4682\nVENDOR_ID_TRADING_TECHNOLOGIES_INTERNATIONAL_INC = 4683\nVENDOR_ID_AMBIT_MICROSYSTEMS_CORPORATION = 4684\nVENDOR_ID_TONTRU_INFORMATION_INDUSTRY_GROUP_CO_LTD = 4685\nVENDOR_ID_VEGASTREAM = 4686\nVENDOR_ID_DIGITRO_TECNOLOGIA_LTDA = 4687\nVENDOR_ID_LUIMES_COMPUTER_CONSULTING = 4688\nVENDOR_ID_URBISNET_LTD = 4689\nVENDOR_ID_MBC_EUROPE_BV = 4690\nVENDOR_ID_VAW_ALUMINUM_TECHNOLOGIE_GMBH = 4691\nVENDOR_ID_DIGITAL_TECHNICS_LP = 4692\nVENDOR_ID_MAXTOR_CORP = 4693\nVENDOR_ID_WILLAMETTE_UNIVERSITY = 4694\nVENDOR_ID_EXTRICITY_SOFTWARE = 4695\nVENDOR_ID_WEBB_STUDIOS = 4696\nVENDOR_ID_ATLANTEL = 4697\nVENDOR_ID_CONNECTIVITY_SOFTWARE_SYSTEMS = 4698\nVENDOR_ID_BURNING_DOOR = 4699\nVENDOR_ID_INTERNETPIRATECOM = 4700\nVENDOR_ID_SYSKOPLAN_GMBH = 4701\nVENDOR_ID_SPEECHWORKS_INTERNATIONAL_INC = 4702\nVENDOR_ID_SANFORD_C_BERNSTEIN_CO_INC = 4703\nVENDOR_ID_VISUAL_MEDIA_TECHNOLOGIES_INC = 4704\nVENDOR_ID_GABRIEL_COMMUNICATIONS = 4705\nVENDOR_ID_ZERO7COM = 4706\nVENDOR_ID_ALDEA_INTERNET_SA_DE_CV_JAVIER = 4707\nVENDOR_ID_IMEDIUM_INC = 4708\nVENDOR_ID_OXYDIAN_SA = 4709\nVENDOR_ID_SAFELAYER_SA = 4710\nVENDOR_ID_MAILCOM = 4711\nVENDOR_ID_ENTROPIC_LTD = 4712\nVENDOR_ID_WHERENET_INC = 4713\nVENDOR_ID_CENTERPOINT_BROADBAND_TECHNOLOGIES = 4714\nVENDOR_ID_ADVICE_NETBUSINESS_LTDA = 4715\nVENDOR_ID_ARBORTEXT = 4716\nVENDOR_ID_MEDIA_MANAGEMENT_CONSULTING = 4717\nVENDOR_ID_MDL_INFORMATION_SYSTEMS = 4718\nVENDOR_ID_MONTAGNALEADER_SCARL = 4719\nVENDOR_ID_LUNATECH_RESEARCH = 4720\nVENDOR_ID_COSITEL_INC = 4721\nVENDOR_ID_JACKSONVILLE_UNIVERSITY = 4722\nVENDOR_ID_MOCKINGBIRD_NETWORKS = 4723\nVENDOR_ID_TECHNOSOFT = 4724\nVENDOR_ID_BESTNET_INTERNET_INC = 4725\nVENDOR_ID_CAPITAL_COMPUTER_SERVICES_INC = 4726\nVENDOR_ID_LANGTANG_JV_COMPANY = 4727\nVENDOR_ID_NSI_TECHNOLOGY = 4728\nVENDOR_ID_CRANNOG_SOFTWARE = 4729\nVENDOR_ID_EPITA = 4730\nVENDOR_ID_SOCKETWARE_INC = 4731\nVENDOR_ID_CVF = 4732\nVENDOR_ID_MIDDLESEX_UNIVERSITY = 4733\nVENDOR_ID_ZARAK_SYSTEMS_CORPORATION = 4734\nVENDOR_ID_SOMA_NETWORKS_INC = 4735\nVENDOR_ID_APPLIANT_INC = 4736\nVENDOR_ID_CROSSWALKCOM_INC = 4737\nVENDOR_ID_SHANGHAI_E_WAY_COMPUTER_NETWORK_TECHNOLOGY_LTD = 4738\nVENDOR_ID_OLDE_DISCOUNT_CORPORATION = 4739\nVENDOR_ID_VOTEHERE = 4740\nVENDOR_ID_AMBER_NETWORKS_INC = 4741\nVENDOR_ID_OPERATIONAL_TECHNOLOGIES_SERVICES_INC = 4742\nVENDOR_ID_NEXTNET = 4743\nVENDOR_ID_INTERNALNETWORK = 4744\nVENDOR_ID_DIGISAFE_PTE_LTD = 4745\nVENDOR_ID_PT_INOVACAO = 4746\nVENDOR_ID_SERVICE_TECHNIQUE_DE_LA_NAVIGATION_AERIENNE = 4747\nVENDOR_ID_DOBIT_NV = 4748\nVENDOR_ID_E_PLAZA = 4749\nVENDOR_ID_LYKON_CONSULTING = 4750\nVENDOR_ID_SARL_K1 = 4751\nVENDOR_ID_CRESCENT_NETWORKS = 4752\nVENDOR_ID_MONTAVISTA_SOFTWARE_INC = 4753\nVENDOR_ID_SYMAS_CORP = 4754\nVENDOR_ID_DIRECTORY_WORKS = 4755\nVENDOR_ID_CTC_UNION_TECHNOLOGIES_CO_LTD = 4756\nVENDOR_ID_IBS = 4757\nVENDOR_ID_ANIX_GROUP_LTD = 4758\nVENDOR_ID_PECO_II_INC = 4759\nVENDOR_ID_VIDITEC_INC = 4760\nVENDOR_ID_NUDESIGN_TECHNOLOGIES_INC = 4761\nVENDOR_ID_GRIC_COMMUNICATION_INC = 4762\nVENDOR_ID_TEDDYBEAR_COMPUTER_SERVICES = 4763\nVENDOR_ID_GLOBAL_CROSSING = 4764\nVENDOR_ID_TOMORROW_FACTORY = 4765\nVENDOR_ID_HOCHSCHULE_HEILBRONN = 4766\nVENDOR_ID_TRAFFICMASTER_PLC = 4767\nVENDOR_ID_EON_SE_FORMERLY_EON_AG = 4768\nVENDOR_ID_IBM_CORPORATION = 4769\nVENDOR_ID_OLE_COMMUNICATIONS_INC = 4770\nVENDOR_ID_NARUS_INC = 4771\nVENDOR_ID_CYBERSOURCE_CORPORATION = 4772\nVENDOR_ID_REALNAMES_CORPORATION = 4773\nVENDOR_ID_NETPLIANCENET = 4774\nVENDOR_ID_NETWORK_ICE = 4775\nVENDOR_ID_KNIGHT_FISK_LTD = 4776\nVENDOR_ID_CUPERUS_CONSULTANTS = 4777\nVENDOR_ID_BISCOM_INC = 4778\nVENDOR_ID_BAY_TECHNICAL_ASSOCIATES = 4779\nVENDOR_ID_VADEM = 4780\nVENDOR_ID_EPIPHANY_INC = 4781\nVENDOR_ID_3CUBE_INC = 4782\nVENDOR_ID_CROSSTOR_SOFTWARE = 4783\nVENDOR_ID_MARCH_NETWORKS = 4784\nVENDOR_ID_APPIAN_COMMUNICATIONS_INC = 4785\nVENDOR_ID_SIERRA_PARTNERSSTEPHEN_ELLS = 4786\nVENDOR_ID_SHANGHAI_HOLDFAST_ONLINE_INFORMATION = 4787\nVENDOR_ID_D_TRUST_GMBH = 4788\nVENDOR_ID_TELICA_INC = 4789\nVENDOR_ID_SECURELOGIX_CORPORATION = 4790\nVENDOR_ID_DRESDNER_BANK_AG = 4791\nVENDOR_ID_WAVEFRONT = 4792\nVENDOR_ID_LEVI_RAY_SHOUP_INC = 4793\nVENDOR_ID_ECOIN_INC = 4794\nVENDOR_ID_UNIFIED_PRODUCTIONS_INC = 4795\nVENDOR_ID_JOE_CHAPA = 4796\nVENDOR_ID_CITY_GROUP_INC = 4797\nVENDOR_ID_VIGIL_TECHNOLOGIES_LTD = 4798\nVENDOR_ID_LEASELOGIX_INC = 4799\nVENDOR_ID_JENSLEY_PTY_LTD = 4800\nVENDOR_ID_COMPASS_CORPORATE_SYSTEMS_INC = 4801\nVENDOR_ID_SYSTEMATIC_SOFTWARE_ENGINEERING_A_S = 4802\nVENDOR_ID_POWWOW = 4803\nVENDOR_ID_CASTELLO_CITIES_INTERNET_NETWORK = 4804\nVENDOR_ID_INOVA_CORPORATION = 4805\nVENDOR_ID_ROSSLEA_ASSOCIATES_LLC = 4806\nVENDOR_ID_CONTROL_Z_CORPORATION = 4807\nVENDOR_ID_NET_STAR_TECHNOLOGY_CORPORATION = 4808\nVENDOR_ID_BSW_TELECOMS = 4809\nVENDOR_ID_BLOEMENVEILING_HOLLAND = 4810\nVENDOR_ID_NETWORK_FLIGHT_RECORDER_INC = 4811\nVENDOR_ID_SHANGHAI_RADIO_COMMUNICATION_EQUIPMENT_MANUFACTURE_COMPANYSRCEM = 4812\nVENDOR_ID_GLENEVIN = 4813\nVENDOR_ID_ALEX_TEMEX_MULTIMEDIA_SA = 4814\nVENDOR_ID_HB_FULLER_COMPANY = 4815\nVENDOR_ID_PACIFIC_GAS_ELECTRIC_COMPANY = 4816\nVENDOR_ID_INNOVATIVE_TECHNOLOGIES_CONSULTING_INC = 4817\nVENDOR_ID_SINCLAIR_INTERNETWORKING_SERVICES = 4818\nVENDOR_ID_RMS_TECHNOLOGY_INTEGRATION_INC = 4819\nVENDOR_ID_QUICKNET_TECHNOLOGIES_INC = 4820\nVENDOR_ID_SN2AI = 4821\nVENDOR_ID_FIAL_COMPUTER_INC = 4822\nVENDOR_ID_SHANGHAI_HUALONG_INFORMATION_TECHNOLOGY_DEVELOPMENT_CENTER = 4823\nVENDOR_ID_DSL_COMMUNICATIONS = 4824\nVENDOR_ID_GOLDEN_SCREENS_INTERACTIVE_TECHNOLOGIES_INC = 4825\nVENDOR_ID_THE_EUROPEAN_CLEARING_HOUSE = 4826\nVENDOR_ID_INTEROUTE_TELECOMMUNICATIONS_INC = 4827\nVENDOR_ID_INTELIDATA_TECHNOLOGIES_CORP = 4828\nVENDOR_ID_A_TO_Z_PEST_CONTROL = 4829\nVENDOR_ID_GLOABL_MEDIA_CORP = 4830\nVENDOR_ID_BANCHILE = 4831\nVENDOR_ID_NETWORK_PHENOMENA_LLC = 4832\nVENDOR_ID_SDNI_INC = 4833\nVENDOR_ID_FACTUM_ELECTRONICS_AB = 4834\nVENDOR_ID_OPNET_TECHNOLOGIES_CO_LTD = 4835\nVENDOR_ID_LHS_TELEKOM_GMBH_CO_KG = 4836\nVENDOR_ID_TRRRIPPLERRRDESIGNS = 4837\nVENDOR_ID_NEW_IMAGE_COMPANY = 4838\nVENDOR_ID_2WIRE_INC = 4839\nVENDOR_ID_BEDET_INFORMATION_TECHNOLOGIES = 4840\nVENDOR_ID_IFACECOM = 4841\nVENDOR_ID_SECUREAGENT = 4842\nVENDOR_ID_AMAZONCOM_INC = 4843\nVENDOR_ID_NEOPOINT_INC = 4844\nVENDOR_ID_MIRALINK_CORP = 4845\nVENDOR_ID_LUCENT_INS = 4846\nVENDOR_ID_VIKRAM_KULKARNI = 4847\nVENDOR_ID_INTERPHIZ_LTD = 4848\nVENDOR_ID_DIPL_PHYS_PEER_STRITZINGER_PEER = 4849\nVENDOR_ID_EDDIE_GEORGE_LIMITED = 4850\nVENDOR_ID_KRONE_TELECELL_GMBH = 4851\nVENDOR_ID_CMA_SMALL_SYSTEMS_AB = 4852\nVENDOR_ID_SYNDEO_CORPORATION = 4853\nVENDOR_ID_MK1_DESIGN = 4854\nVENDOR_ID_ADDPAC_TECHNOLOGY_CO_LTD = 4855\nVENDOR_ID_VERALUZ_INTERNATIONAL_CORPORATION = 4856\nVENDOR_ID_CISCOS_ETC = 4857\nVENDOR_ID_FORTECH = 4858\nVENDOR_ID_GEMS = 4859\nVENDOR_ID_BOOCOM_GROUP_LTD = 4860\nVENDOR_ID_POWERCOM_TECHNOLOGIES_INC_KATTA_VEERAIAH = 4861\nVENDOR_ID_REDWOOD_MARKETING = 4862\nVENDOR_ID_PARION = 4863\nVENDOR_ID_JOH_DATA_A_S = 4864\nVENDOR_ID_ERG_GROUP = 4865\nVENDOR_ID_MOSELEY_ASSOCIATE_INC = 4866\nVENDOR_ID_VIET_MARKETING = 4867\nVENDOR_ID_NEXTRA_SCHWEIZ_AG = 4868\nVENDOR_ID_SIT_EUROPE = 4869\nVENDOR_ID_FRITZ_EGGER_GMBH_CO = 4870\nVENDOR_ID_DISCOVERYCOM = 4871\nVENDOR_ID_BOUYGUES_TELECOM = 4872\nVENDOR_ID_SEAY_SYSTEMS_INC = 4873\nVENDOR_ID_JUNIPER_NETWORKS_UNISPHERE = 4874\nVENDOR_ID_DOUBLECLICK_INC = 4875\nVENDOR_ID_EYESTREET_SOFTWARE = 4876\nVENDOR_ID_SALON_PRESS = 4877\nVENDOR_ID_VILLAGE_NETWORKS_INC = 4878\nVENDOR_ID_SECUREMETHODS_INC = 4879\nVENDOR_ID_STANDARD_POORS_COMPUSTAT = 4880\nVENDOR_ID_START_NETWORK_TECHNOLOGY_CO_LTD = 4881\nVENDOR_ID_ROOT_INC = 4882\nVENDOR_ID_SAATCH_SAATCHI = 4883\nVENDOR_ID_PROTEK_LTD = 4884\nVENDOR_ID_PHOTON_TECHNOLOGY_CO_LTD = 4885\nVENDOR_ID_WESTWAVE_COMMUNICATIONS = 4886\nVENDOR_ID_IQ_WIRELESS_GMBH = 4887\nVENDOR_ID_MULTIDATA_GMBH = 4888\nVENDOR_ID_INFLOW = 4889\nVENDOR_ID_SKINNERS_COMPUTER_CENTER = 4890\nVENDOR_ID_NETWORK_ADDRESS_SOLUTIONS = 4891\nVENDOR_ID_THE_CHINESE_UNIVERSITY_OF_HONG_KONG = 4892\nVENDOR_ID_ATSHAW_TECHNOLOGIES = 4893\nVENDOR_ID_KLEINWORT_BENSON_LTD = 4894\nVENDOR_ID_WOODWIND_COMMUNICATIONS_SYSTEMS_INC = 4895\nVENDOR_ID_TELESOFT_INTERNATIONAL_INC = 4896\nVENDOR_ID_DOBUSINESSONLINE_SERVICES = 4897\nVENDOR_ID_TIME_INC = 4898\nVENDOR_ID_WALKER_SYSTEMS_CORPORATION = 4899\nVENDOR_ID_CONEXANT_SYSTEMS = 4900\nVENDOR_ID_USAA = 4901\nVENDOR_ID_BEIJING_HUAGUANG_ELECTRONICS_CO_LTD = 4902\nVENDOR_ID_GCC_TECHNOLOGIES_INC = 4903\nVENDOR_ID_SDF = 4904\nVENDOR_ID_WEBDIALOGS_INC = 4905\nVENDOR_ID_EDGIX_CORPORATION = 4906\nVENDOR_ID_APPWORX_CORPORATION = 4907\nVENDOR_ID_ATS_ADVANCED_TECHNOLOGY_SOLUTIONS_SA = 4908\nVENDOR_ID_EXPERTS_EXCHANGE = 4909\nVENDOR_ID_UBIZEN = 4910\nVENDOR_ID_PCORDERCOM_INC = 4911\nVENDOR_ID_ONE_WORLD_INFORMATION_SYSTEM = 4912\nVENDOR_ID_HOLE_IN_THENET = 4914\nVENDOR_ID_SIPHER_INTERNET_TECHNOLOGY_LTD44_1494_765335 = 4915\nVENDOR_ID_BLACKSOUND_SA = 4916\nVENDOR_ID_SOCIEDAD_ESTATAL_DE_LOTERIAS_Y_APUESTAS_DE_ESTADO = 4917\nVENDOR_ID_TAURUSENT_TECHNOLOGIES = 4918\nVENDOR_ID_LUMINATE_SOFTWARE_CORPORATION = 4919\nVENDOR_ID_BOSTON_GLOBE = 4920\nVENDOR_ID_NETWORK_SOLUTIONS = 4921\nVENDOR_ID_TELCORDIA_TECHNOLOGIES_INC = 4922\nVENDOR_ID_AUDIOCODES = 4923\nVENDOR_ID_SAN_VALLEY_SYSTEMS_INC = 4924\nVENDOR_ID_ZUMA_NETWORKS = 4925\nVENDOR_ID_TOUCHTUNES_DIGITAL_JUKEBOX = 4926\nVENDOR_ID_TIME4YOU_GMBH = 4927\nVENDOR_ID_XROSSTECH_INC = 4928\nVENDOR_ID_LAN_CRYPTO = 4929\nVENDOR_ID_CONCORD_TECHNOLOGIES = 4930\nVENDOR_ID_STANDARD_POORS_CORP = 4931\nVENDOR_ID_FOGLIGHT_SOFTWARE = 4932\nVENDOR_ID_SHUNRA_SOFTWARE_LTD = 4933\nVENDOR_ID_WEBDIALOGS_INC_2 = 4934\nVENDOR_ID_MEDIATRIX_TELECOM_INC = 4935\nVENDOR_ID_FIRST_AMERICAN_FINANCIAL_CORPORATION_JOHN = 4936\nVENDOR_ID_STORMBREAKER_NETWORK_SERVICES = 4937\nVENDOR_ID_DAEYOUNG_ELECTRONIC_INDCO_LTD = 4938\nVENDOR_ID_PROCTER_GAMBLE = 4939\nVENDOR_ID_CONVERGENT_COMMUNICATIONS_SERVICES_INC = 4940\nVENDOR_ID_ECHELON_CORPORATION = 4941\nVENDOR_ID_LIBERTY_PRESS_LETTER_SERVICE_JOSEPH_DE_SILVIS = 4942\nVENDOR_ID_NOVELL_GMBH = 4943\nVENDOR_ID_FUTURE_NETWORKS_INC = 4944\nVENDOR_ID_LOGICON_INC = 4945\nVENDOR_ID_PSYCHEDELIC_ILLUMINATIONS_MAGAZINE = 4946\nVENDOR_ID_GRASS_VALLEY_USA_LLC = 4947\nVENDOR_ID_MIGROS = 4948\nVENDOR_ID_FORTRESS_TECHNOLOGIES = 4949\nVENDOR_ID_LUXOR_SOFTWARE_INC = 4950\nVENDOR_ID_STATE_FARM_INSURANCE = 4951\nVENDOR_ID_THINKING_OBJECTS_GMBH = 4952\nVENDOR_ID_TECNET_TELEINFORMATICA_LTDA = 4953\nVENDOR_ID_WROX_PRESS_ITD = 4954\nVENDOR_ID_ASGARD_TECHNOLOGIES_INC = 4955\nVENDOR_ID_GRAPHICS_FIVE = 4956\nVENDOR_ID_CNET_COMPUTER_SYSTEME_NETZWERK_GMBH = 4957\nVENDOR_ID_TERRALINK_TECHNOLOGIES_LLC = 4958\nVENDOR_ID_U_FORCE_INC = 4959\nVENDOR_ID_CHROMISYS = 4960\nVENDOR_ID_ARDENT_TECHNOLOGIES = 4961\nVENDOR_ID_ARTEL_VIDEO_SYSTEMS_INC = 4962\nVENDOR_ID_MANAGE = 4963\nVENDOR_ID_WB_LOVE_ENTERPRISES_INC = 4964\nVENDOR_ID_GREENWICH_MEAN_TIME = 4965\nVENDOR_ID_AACOM = 4966\nVENDOR_ID_STARWOOD_HOTELS_RESORTS = 4967\nVENDOR_ID_UNIVERSTIY_OF_NORTH_TEXAS_UNOFFICIAL = 4968\nVENDOR_ID_PARK_AIR_SYSTEMS_LTD = 4969\nVENDOR_ID_NATIONAL_GRID_FOR_LEARNING = 4970\nVENDOR_ID_ANGLERS_CLUB = 4971\nVENDOR_ID_LOS_ALAMOS_NATIONAL_LABORATORYGIRI = 4972\nVENDOR_ID_SETNET_CORPORATION = 4973\nVENDOR_ID_EATM = 4974\nVENDOR_ID_INTERVU_INC = 4975\nVENDOR_ID_AGENT = 4976\nVENDOR_ID_TIESSE_SPA = 4977\nVENDOR_ID_DIREKCIJA_RS_ZA_POSLOVNO_INFORMACIJSKO_SREDISCE = 4978\nVENDOR_ID_LICER_SOLUTIONS = 4979\nVENDOR_ID_OXYMIUM = 4980\nVENDOR_ID_RIVERDELTA_NETWORKS = 4981\nVENDOR_ID_PERSISTENCE_SOFTWARE_INC = 4982\nVENDOR_ID_INNOMEDIALOGIC_INC = 4983\nVENDOR_ID_PINNACLE_SYSTEMS = 4984\nVENDOR_ID_VIGILANT_NETWORKS = 4985\nVENDOR_ID_KB_TEL = 4986\nVENDOR_ID_SIMPLER_NETWORKS_INC = 4987\nVENDOR_ID_RONNINGEN_CONSULTING = 4988\nVENDOR_ID_CONNECT_AUSTRIA_GMBH = 4989\nVENDOR_ID_TTI_TELECOM = 4990\nVENDOR_ID_STONEBRIDGE_TECHNOLOGIES_INCSE = 4991\nVENDOR_ID_THYSSEN_KRUPP_INFORMATION_SYSTEMS_GMBHHAYNES = 4992\nVENDOR_ID_CTU_PRAGUE = 4993\nVENDOR_ID_CUT_THROAT_TRAVEL_OUTLET = 4994\nVENDOR_ID_UNIVERSTIY_OF_CALIFORNIA_BERKELEY = 4995\nVENDOR_ID_FOREST_NETWORKS_LLC = 4996\nVENDOR_ID_INETDCOM_CONSULTING = 4997\nVENDOR_ID_CADANT_INC = 4998\nVENDOR_ID_PERSONAL_BUSINESS = 5000\nVENDOR_ID_LOGICMEDIA = 5001\nVENDOR_ID_RC_NETWORKS = 5002\nVENDOR_ID_AUDIOCODES_LTD = 5003\nVENDOR_ID_PREDICTIVE_NETWORKS = 5004\nVENDOR_ID_NCVISION = 5005\nVENDOR_ID_VISHWNET_INDIA = 5006\nVENDOR_ID_EFFECTIVE_COMPUTER_SOLUTIONS_INC = 5007\nVENDOR_ID_DRUGSTORECOM = 5008\nVENDOR_ID_SCHIANO = 5009\nVENDOR_ID_SPLASH_TECHNOLOGY_INC = 5010\nVENDOR_ID_SCALDIS = 5011\nVENDOR_ID_LOTTOMATICA_SPA = 5012\nVENDOR_ID_MAVERICK_INTERNET_TECHNOLOGY = 5013\nVENDOR_ID_VIACAST = 5014\nVENDOR_ID_VERBIND_INC = 5015\nVENDOR_ID_OREGON_STATE_UNIVERSITY = 5016\nVENDOR_ID_UNIVERSITY_OF_AKRON = 5017\nVENDOR_ID_AMERITRADE_TECHNOLOGY_GROUP = 5018\nVENDOR_ID_EBUSINESS_INTERACTIVE = 5019\nVENDOR_ID_SEKWANG_ENG_CO = 5020\nVENDOR_ID_TELEVISION_INTERNACIONAL_SA_DE_CV = 5021\nVENDOR_ID_EQUIPE_COMMUNICATIONS_CORPORATION = 5022\nVENDOR_ID_BIT_BY_BIT_SOLUTIONS_INC = 5023\nVENDOR_ID_3DOMES_INC = 5024\nVENDOR_ID_OPUS_2_REVENUE_TECHNOLOGIES = 5025\nVENDOR_ID_ASPIRO_AB = 5026\nVENDOR_ID_OREBRO_KOMMUN = 5027\nVENDOR_ID_LIGHTBRIDGE = 5028\nVENDOR_ID_COMMA_SOFT_AG = 5029\nVENDOR_ID_UNIVERSITY_OF_ULM = 5030\nVENDOR_ID_RECOVERY = 5031\nVENDOR_ID_NORSCAN_INSTRUMENTS_LTD = 5032\nVENDOR_ID_ECHARGE_CORPORATION = 5033\nVENDOR_ID_LOGICALSOLUTIONSNET = 5034\nVENDOR_ID_INTER_NATIONAL_RESEARCH_INSTITUTE = 5035\nVENDOR_ID_INPUT_SOFTWARE = 5036\nVENDOR_ID_BRI_LINK_TECHNOLOGIES_INC = 5037\nVENDOR_ID_TS_SOFTWARE_ASSOCIATES_INC = 5038\nVENDOR_ID_XSTREAMIS_PLC = 5039\nVENDOR_ID_WIESEMANN_THEIS_GMBH = 5040\nVENDOR_ID_MENICX_INTERNATIONAL_CO_LTD = 5041\nVENDOR_ID_BROADWING_INC = 5042\nVENDOR_ID_MICRO_FOCUS_INTERNATIONAL_LTD = 5043\nVENDOR_ID_VELOCITY_SOFTWARE_SYSTEMS_LTD = 5044\nVENDOR_ID_BITHOP_SYSTEMS_INC = 5045\nVENDOR_ID_CS_SI = 5046\nVENDOR_ID_KIMLEY_HORN_AND_ASSOCIATES = 5047\nVENDOR_ID_KUDALE_INC = 5048\nVENDOR_ID_EQUIFAX_INC = 5049\nVENDOR_ID_NORDMARK_NORLAN_CONSULT = 5050\nVENDOR_ID_BRIX_NETWORKS = 5051\nVENDOR_ID_INTERMINE_PTY_LTD = 5052\nVENDOR_ID_AGILENT_TECHNOLOGIES = 5053\nVENDOR_ID_WILL = 5054\nVENDOR_ID_EOLRING = 5055\nVENDOR_ID_FRANK_LIMA = 5056\nVENDOR_ID_GIFFORD_HESKETH = 5057\nVENDOR_ID_AVISTAR_SYSTEMS = 5058\nVENDOR_ID_CARMONA_ENGINEERING_SERVICES = 5059\nVENDOR_ID_SINGAPORE_PRESS_HOLDINGS_LTD = 5060\nVENDOR_ID_SWISSKEY_LTD = 5061\nVENDOR_ID_DFN_DIRECTORY_SERVICES = 5062\nVENDOR_ID_TELESTA = 5063\nVENDOR_ID_DEUTSCHE_POST_AG = 5064\nVENDOR_ID_PRIVATEEXPRESSCOM = 5065\nVENDOR_ID_NETVISION_INC = 5066\nVENDOR_ID_OPEN_SOCIETY_FUND_BH = 5067\nVENDOR_ID_JEWSIH_COMMUNITY_OF_BOSNIA_AND_HERZEGOVINA = 5068\nVENDOR_ID_CALL_CONNECT = 5069\nVENDOR_ID_GANNA_CONSTRUCTION_INC = 5070\nVENDOR_ID_HIQ_NETWORKS = 5071\nVENDOR_ID_DITECH_COMMUNICATIONS_CORPORATION = 5072\nVENDOR_ID_KNOWHERE_INC = 5073\nVENDOR_ID_MIVA_CORPORATION = 5074\nVENDOR_ID_CNL_CENTRALNET_GMBH = 5075\nVENDOR_ID_LONGVIEW_INTERNATIONAL_INC = 5076\nVENDOR_ID_CLICKNET_SOFTWARE = 5077\nVENDOR_ID_MEDIA_VISION_COMPUTER_TECHNOLOGIES = 5078\nVENDOR_ID_CROSSKEYS_SYSTEMS_CORPORATION = 5079\nVENDOR_ID_POWER_SYSTEMS = 5080\nVENDOR_ID_EMPOWERMENT_GROUP_INC = 5081\nVENDOR_ID_MORE_MAGIC_SOFTWARE_MMS_OY = 5082\nVENDOR_ID_DAKTRONICS = 5083\nVENDOR_ID_SIERRACOM = 5084\nVENDOR_ID_SMARTMOVE = 5085\nVENDOR_ID_ICS_ADVENT = 5086\nVENDOR_ID_GREAT_DRAGON_TELECOMGROUP = 5087\nVENDOR_ID_DIGITAL_BURRO_INC = 5088\nVENDOR_ID_CLAVISTER_AB = 5089\nVENDOR_ID_CARUMBA = 5090\nVENDOR_ID_NORSKE_TROLL_AS = 5091\nVENDOR_ID_INFORMATIONSTECHNOLOGIE_AUSTRIA_GES_MBH = 5092\nVENDOR_ID_SDF_ENTERPRISE = 5093\nVENDOR_ID_THE_UNIVERSITY_OF_TULSA = 5094\nVENDOR_ID_CREDIT_SUISSE_GROUP = 5095\nVENDOR_ID_COMPUTER_SCIENCE_AND_ENGINEERING_CUHK = 5096\nVENDOR_ID_ROCK_MARKETING = 5097\nVENDOR_ID_OPUSWAVE_NETWORKS_INC = 5098\nVENDOR_ID_TRICAST_MULTIMEDIA = 5100\nVENDOR_ID_NOVALABS = 5101\nVENDOR_ID_INTEGRO_ACS = 5102\nVENDOR_ID_FOXCOM_LTD = 5103\nVENDOR_ID_SARANGNET = 5104\nVENDOR_ID_DATANG_TELECOM_TECHNOLOGY_CO_LTD = 5105\nVENDOR_ID_ELEPHANT_PROJECT = 5106\nVENDOR_ID_PINKL_CONSULTING_SERVICES = 5107\nVENDOR_ID_MODIUS_INC = 5108\nVENDOR_ID_CHINA_GREAT_DRAGON_TELECOMMUNICATIONGROUP_CO_LTD = 5109\nVENDOR_ID_HEALTH_BUSINESS_SYSTEMS_INC = 5110\nVENDOR_ID_MEDEA_CORPORATION = 5111\nVENDOR_ID_CORVIA_NETWORKS_INC = 5112\nVENDOR_ID_GRIDWARE = 5113\nVENDOR_ID_FUTURE_FIBRE_TECHNOLOGIES = 5114\nVENDOR_ID_POWERCOM_TECHNOLOGY_CO_LTD = 5115\nVENDOR_ID_IBM_NUMA_Q_DIVISION = 5116\nVENDOR_ID_KAELIN_COLCLASURE = 5117\nVENDOR_ID_DANTELINC = 5118\nVENDOR_ID_SYCOR_AG = 5119\nVENDOR_ID_EMF_HOME_INSPECTION_INC = 5120\nVENDOR_ID_LEAGUE_SCORING = 5121\nVENDOR_ID_EVEREST_ECOMMERCE_INC = 5122\nVENDOR_ID_LUCENT_TECH_TAIWAN_TELCO = 5123\nVENDOR_ID_PHONETIC_SYSTEMS_LTD = 5124\nVENDOR_ID_CELESTICA_POWER = 5125\nVENDOR_ID_SYMTREX_INC = 5126\nVENDOR_ID_WESTERN_DIGITAL_CORPORATION = 5127\nVENDOR_ID_SAITAMA_UNIVERSITY_FAR_LABORATORY = 5128\nVENDOR_ID_MACQUARIE_UNIVERSITY = 5129\nVENDOR_ID_OMRON_CANADA_INC = 5130\nVENDOR_ID_LOTZDE = 5131\nVENDOR_ID_MAMMUT_NET = 5132\nVENDOR_ID_HALFDOME_SYSTEMS_INC = 5133\nVENDOR_ID_IP_UNITY = 5134\nVENDOR_ID_CYBERSAFE_CORPORATION = 5135\nVENDOR_ID_GRUNER_JAHR_AG_CO_KG_FORMERLY_ELECTRONIC_MEDIA_SERVICE = 5136\nVENDOR_ID_DFC_INC = 5137\nVENDOR_ID_EASYNET_GROUP_PLC = 5138\nVENDOR_ID_ARESCOM_INC = 5139\nVENDOR_ID_COMPUDISK_SYSTEMS_LTD = 5140\nVENDOR_ID_HART_EDWARDS_CORPORATION_INC = 5141\nVENDOR_ID_IVANS = 5142\nVENDOR_ID_CEREVA_NETWORKS_INC = 5143\nVENDOR_ID_ICT_ELECTRONICS_SA = 5145\nVENDOR_ID_ECLIPSYS_CORPORATION = 5146\nVENDOR_ID_MICEX = 5147\nVENDOR_ID_CTC_COMPUTER_TECHNIK_CZAKAY_GMBH = 5148\nVENDOR_ID_MANAGED_OBJECT_SOLUTIONS_INC = 5149\nVENDOR_ID_OPSWARE = 5150\nVENDOR_ID_NETGAIN_LLC = 5151\nVENDOR_ID_CABLE_AML_INC = 5152\nVENDOR_ID_THE_UNIVERSITY_OF_AKRON = 5153\nVENDOR_ID_INCYTE_GENOMICS = 5154\nVENDOR_ID_CS_S_GH_COMPUTER_SYSTEM_TECH_CO_LTD = 5155\nVENDOR_ID_NEWPRODUCTSHOWROOMCOM = 5156\nVENDOR_ID_THE_UNIVERSITY_OF_QUEENSLAND = 5157\nVENDOR_ID_COMPUTECH_SERVICES = 5158\nVENDOR_ID_ULTRA_DOO = 5159\nVENDOR_ID_DAIN_TELECOM_CO_LTD = 5160\nVENDOR_ID_MOREHEAD_STATE_UNIVERSITY = 5161\nVENDOR_ID_SOCIETE_EUROPEENNE_DES_SATELLITES = 5162\nVENDOR_ID_DIGITAL_MARKETPLACE_INC = 5163\nVENDOR_ID_CYGNET_TECHNOLOGIES_INC = 5164\nVENDOR_ID_SASSAFRAS_SOFTWARE_INC = 5165\nVENDOR_ID_MERCOM_SYSTEMS_INC = 5166\nVENDOR_ID_ORCHESTREAM_LTD = 5167\nVENDOR_ID_LEVITTE_PROGRAMMING = 5168\nVENDOR_ID_NET_CONSULTING_SRL = 5169\nVENDOR_ID_AEGIS_DATA_SYSTEMS_INC = 5170\nVENDOR_ID_WHIZBANG_LABS = 5171\nVENDOR_ID_PROTOCOM_DEVELOPMENT_SYSTEMS = 5172\nVENDOR_ID_TAQUA_SYSTEMS_INC = 5173\nVENDOR_ID_PRIVATEEXPRESS_COM = 5174\nVENDOR_ID_LINDSAY_ELECTRONICS = 5175\nVENDOR_ID_2WIN_INFORMATION_SYSTEMS_INC = 5176\nVENDOR_ID_PRIVATE_EXPRESS_TECHNOLOGIES_PTE_LTD = 5177\nVENDOR_ID_TELEPHONY_EXPERTS_INC = 5178\nVENDOR_ID_ARIMA_COMPUTER_CORP = 5179\nVENDOR_ID_THE_DOCSPACE_COMPANY_INC = 5180\nVENDOR_ID_FIRAT_UNIVERSITES = 5181\nVENDOR_ID_I_THETA_CORP = 5182\nVENDOR_ID_CN_TOURISTIC_AG = 5184\nVENDOR_ID_SUNGMI_TELECOM_ELECTRONICS_CO_LTD = 5185\nVENDOR_ID_BYTWARE_INC = 5187\nVENDOR_ID_BITHOP_SYSTEMS_INC_2 = 5188\nVENDOR_ID_TELEFONICA_ID = 5189\nVENDOR_ID_ORGANIC = 5190\nVENDOR_ID_DEKRA_AG = 5191\nVENDOR_ID_GOTHAM_NETWORKS = 5192\nVENDOR_ID_CHEMICAL_ABSTRACTS_SERVICE = 5193\nVENDOR_ID_OKANAGAN_SPRING_BREWERY = 5194\nVENDOR_ID_ADREM_SOFTWARE = 5195\nVENDOR_ID_E_TECH_INC_2 = 5196\nVENDOR_ID_STARTUP_COM = 5197\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_ROMA_TOR_VERGATA = 5198\nVENDOR_ID_ODETICS_ITS = 5199\nVENDOR_ID_ENFLEX_CORP = 5200\nVENDOR_ID_AALTO_UNIVERSITY_FORMERLY_HELSINKI_UNIVERSITY_OF_TECHNOLOGY = 5202\nVENDOR_ID_THE_NAQVI_GROUP = 5203\nVENDOR_ID_CLICKNET_SOFTWARE_CORPORATION = 5204\nVENDOR_ID_RUBY_TECH_CORP = 5205\nVENDOR_ID_VOLTAIRE = 5206\nVENDOR_ID_USA_NET_CORPORATIONS = 5207\nVENDOR_ID_UPMACS_COMMUNICATIONS_INC = 5208\nVENDOR_ID_PROFOUND_RATIONAL_ORGANIZATIONPRO_INTERNATIOAL = 5209\nVENDOR_ID_LINKLINE_FREEGATES = 5210\nVENDOR_ID_NCVISION_LTD = 5211\nVENDOR_ID_PLACEWARE_INC = 5212\nVENDOR_ID_GREYLINK_INC = 5213\nVENDOR_ID_ATHENS_CHAMBER = 5214\nVENDOR_ID_UNITED_CONNECTIONS = 5215\nVENDOR_ID_SENIOR_INFORMATICA_LTDA = 5216\nVENDOR_ID_SOFHA_GMBH = 5217\nVENDOR_ID_NETWORKS_EXPERTS_INC = 5218\nVENDOR_ID_BEVOCAL_INC = 5219\nVENDOR_ID_WORLD_TELECOM_LABS = 5220\nVENDOR_ID_WIRELESS_SYSTEMS_INTERNATIONAL = 5221\nVENDOR_ID_DANTEL_INC_2 = 5222\nVENDOR_ID_KOREA_ELECTRONICS_TECHNOLOGY_INSTITUTE = 5223\nVENDOR_ID_HITACHI_DATA_SYSTEMS_EUROPE_LTD = 5224\nVENDOR_ID_UNIVERSIDAD_DE_CANTABRIA_ATC = 5225\nVENDOR_ID_HARMONIX_LIMITED = 5226\nVENDOR_ID_MELCO_INC = 5227\nVENDOR_ID_LITTLEFEET_INC = 5228\nVENDOR_ID_BIG_FISH_COMMUNICATIONS = 5229\nVENDOR_ID_COMROESGROUP = 5230\nVENDOR_ID_OSWEGO_STATE_UNIVERSITY = 5231\nVENDOR_ID_COUNTERPANE_INTERNET_SECURITY = 5232\nVENDOR_ID_MERCURY_INTERACTIVE_CORP = 5233\nVENDOR_ID_SHENZHEN_SED_INFO_TECH_CORP = 5234\nVENDOR_ID_PERSISTENT_SYSTEMS_PRIVATE_LIMITED = 5235\nVENDOR_ID_GREAT_DRAGON_TELECOMGROUP_2 = 5236\nVENDOR_ID_TRUSTIS_LIMITED = 5237\nVENDOR_ID_SOCIETA_GENERALE_DI_INFORMATICA_SOGEI_SPA = 5238\nVENDOR_ID_FESTE = 5239\nVENDOR_ID_RAND = 5240\nVENDOR_ID_TECHMATH_AG = 5241\nVENDOR_ID_ENVILOGG_AB = 5242\nVENDOR_ID_ICIS_SCHOOL_OF_EEENAYANG_TECHNOLOGICAL_UNIVERSITY = 5243\nVENDOR_ID_CASEYS_BAJA_TOURS = 5244\nVENDOR_ID_QUARTERSTONE_COMMUNICATIONS_INCQCI = 5245\nVENDOR_ID_SS8_NETWORKS_INC = 5246\nVENDOR_ID_ZINNIA_DESIGN = 5247\nVENDOR_ID_MICHAEL_BREHM = 5248\nVENDOR_ID_WARNER_LAMBERT = 5249\nVENDOR_ID_CENTER7 = 5250\nVENDOR_ID_DONALD_E_BYNUM = 5251\nVENDOR_ID_CIS_TECHNOLOGY = 5252\nVENDOR_ID_ALDEBARAN = 5253\nVENDOR_ID_DATANG_TELECOM_TECHNOLOGY_CO_LTD_2 = 5254\nVENDOR_ID_EUROPKI = 5255\nVENDOR_ID_FREEONLINE_COM_AU_PTY_LTD = 5256\nVENDOR_ID_AXUS_MICROSYSTEMS_INC = 5257\nVENDOR_ID_ZETA_TECHNOLOGIES_CO_LTD = 5258\nVENDOR_ID_MATRA_SYSTEMES_INFORMATION = 5259\nVENDOR_ID_DIGITAL_ENGINEERING = 5260\nVENDOR_ID_LUTHER_DANIEL = 5261\nVENDOR_ID_QWIKWIRE_NET = 5262\nVENDOR_ID_CAIS_INTERNET = 5263\nVENDOR_ID_VARIAN_MEDICAL_SYSTEMS = 5264\nVENDOR_ID_TELEDANMARK_ERHVERV_CTIUDVIKLING = 5265\nVENDOR_ID_JOHANNES_GUTENBERG_UNIVERSITAET_MAINZ = 5266\nVENDOR_ID_HONG_KONG_UNIVERSITY_OF_SCIENCE_AND_TECHNOLOGY = 5267\nVENDOR_ID_IKEA_IT_CENTER_AB = 5268\nVENDOR_ID_THE_FANTASTIC_CORPORATION = 5269\nVENDOR_ID_DA6D_TECHNOLOGIES = 5270\nVENDOR_ID_COMVERSE_NETWORK_SYSTEMS = 5271\nVENDOR_ID_W_TRADE_TECHNOLOGIES = 5272\nVENDOR_ID_UNISTRA_TECHNOLOGIES = 5273\nVENDOR_ID_UNIF_X = 5274\nVENDOR_ID_MALIBU_NETWORKS = 5275\nVENDOR_ID_HEARMECOM = 5276\nVENDOR_ID_SARANGNET_2 = 5277\nVENDOR_ID_SWISSCOM_AG_2 = 5278\nVENDOR_ID_2SUPPORT_DIRECTORY_SOLUTIONS = 5279\nVENDOR_ID_CITI = 5280\nVENDOR_ID_GRAEFFET_COMMUNICATIONS = 5281\nVENDOR_ID_CONNECTED_SYSTEMS = 5282\nVENDOR_ID_CHECKFREE_CORPORATION = 5283\nVENDOR_ID_FILANET_CORPORATION = 5284\nVENDOR_ID_NETWORK_EXPERTS_INC = 5285\nVENDOR_ID_CALENCE_INC = 5286\nVENDOR_ID_PERSISTENT_SYSTEMS_PRIVATE_LIMITED_2 = 5287\nVENDOR_ID_A_PLUS_NETWORKS_INC = 5288\nVENDOR_ID_VIDYAWEB_COM_INC = 5289\nVENDOR_ID_GUIDE = 5290\nVENDOR_ID_BLOEMENVEILING_AALSMEER = 5291\nVENDOR_ID_PIRUS_NETWORKS = 5292\nVENDOR_ID_HYOSUNG_CORPORATION = 5293\nVENDOR_ID_INFINITY_TRADE_INC = 5294\nVENDOR_ID_DIGITALTHINK_INC = 5295\nVENDOR_ID_IPCELL_TECHNOLOGIES_INC = 5296\nVENDOR_ID_BAXWORKS_INC = 5297\nVENDOR_ID_XPUTERCOM = 5298\nVENDOR_ID_AUDEMAT = 5299\nVENDOR_ID_JETSTREAM_COMMUNICATIONS = 5300\nVENDOR_ID_PENTASAFE_INC = 5301\nVENDOR_ID_ADVANCED_HEALTH_TECHNOLOGIES = 5302\nVENDOR_ID_IPMOBILE_INC = 5303\nVENDOR_ID_AIRSLIDE_SYSTEMS_INC = 5304\nVENDOR_ID_IIT_KANPUR = 5305\nVENDOR_ID_XESYSTEMS_INC = 5306\nVENDOR_ID_CIPRICO_INC = 5307\nVENDOR_ID_SIEMENSSAPORTUGAL = 5308\nVENDOR_ID_EDELWEB_SA = 5309\nVENDOR_ID_DEPOSITORY_TRUST_CLEARING_CORPORATION = 5310\nVENDOR_ID_FF_INC = 5311\nVENDOR_ID_DIGICERT_SDN = 5312\nVENDOR_ID_REVLIS_INC = 5313\nVENDOR_ID_BAUNWALL_A_S = 5314\nVENDOR_ID_CCITBEIJING_CREATIVE_CENTURY_INFORMATION_TECHNOLOGYCO_LTD = 5315\nVENDOR_ID_GUIDE_UNUSUAL = 5316\nVENDOR_ID_ADAPTIVE_COMPUTER_DEVELOPMENT_CORP = 5317\nVENDOR_ID_ROBERT_BOSCH_GMBH = 5318\nVENDOR_ID_EARTHWATCH_INC = 5319\nVENDOR_ID_SURETY_TECHNOLOGIES_INC = 5320\nVENDOR_ID_BURRITOORG = 5321\nVENDOR_ID_PADL_SOFTWARE_PTY_LTD = 5322\nVENDOR_ID_TELRAD = 5323\nVENDOR_ID_DELTA_NETWORKS_INC = 5324\nVENDOR_ID_CMGI = 5325\nVENDOR_ID_LIGHTCHIP_INC = 5326\nVENDOR_ID_KIM_COMPUTING = 5327\nVENDOR_ID_NORTH_COMMUNICATIONS_INC = 5328\nVENDOR_ID_SHORELINE_TELEWORKS = 5329\nVENDOR_ID_SPACELINK_SYSTEMS = 5330\nVENDOR_ID_OI_ELECTRIC_CO_LTD = 5331\nVENDOR_ID_INFORMATION_FREEWAY = 5332\nVENDOR_ID_CELERA_GENOMICS = 5333\nVENDOR_ID_START = 5334\nVENDOR_ID_MULTIFUNCTION_PRODUCTS_ASSOCIATION = 5335\nVENDOR_ID_BLUEKITECOM = 5336\nVENDOR_ID_CIPRICO_INC_2 = 5337\nVENDOR_ID_ELDEC_CORPORATION = 5338\nVENDOR_ID_VISIOWAVE = 5339\nVENDOR_ID_CITI_SA_DE_CV = 5340\nVENDOR_ID_PC_NETWORK_DESIGN = 5341\nVENDOR_ID_SENSORMATIC = 5342\nVENDOR_ID_LONE_WOLF_COMPUTINGGEORGE = 5343\nVENDOR_ID_ORIGINATIVE_SOLUTIONS_LTD = 5344\nVENDOR_ID_SUNGMI_TELECOM_ELECTRONICS_CO_LTD_2 = 5345\nVENDOR_ID_SSM_HEALTH_CARE = 5346\nVENDOR_ID_GE_HARRIS_AVIATION_INFORMATION_SOLUTIONS_LLC = 5347\nVENDOR_ID_TIMESPACE_RADIO_AB = 5348\nVENDOR_ID_INALP_NETWORKS_INC = 5349\nVENDOR_ID_INFOTRON_SYSTEM_CORP = 5350\nVENDOR_ID_ATM_SA = 5351\nVENDOR_ID_MAELSTROM = 5352\nVENDOR_ID_EVS_BROADCAST_EQUIPMENT = 5353\nVENDOR_ID_SIMPLEMENT_LTD = 5354\nVENDOR_ID_ELAND_TECHNOLOGIES = 5355\nVENDOR_ID_OBJECT_ORIENTED_PTY_LTD = 5356\nVENDOR_ID_EVANS_COMPUTER_CONSULTING = 5357\nVENDOR_ID_ENHANCED_GLOBAL_CONVERGENCE_SERVICES_EGCS = 5358\nVENDOR_ID_INNOVENTRY = 5359\nVENDOR_ID_HAEDONG = 5360\nVENDOR_ID_WESTBRIDGE_DESIGN_LTD = 5361\nVENDOR_ID_QASYS_CORP = 5362\nVENDOR_ID_R_SMITH_ENGINEERING_CO = 5363\nVENDOR_ID_CERTALL_FINLAND_OY = 5364\nVENDOR_ID_NEARTEK_INC = 5365\nVENDOR_ID_CHARLOTTES_WEB_NETWORKS_LTD = 5366\nVENDOR_ID_TELENA_SPA = 5367\nVENDOR_ID_COREEXPRESS = 5368\nVENDOR_ID_APD_COMMUNICATIONS_LIMITED = 5369\nVENDOR_ID_BANCO_ZARAGOZANO_SA = 5370\nVENDOR_ID_NETSUBJECT_CANADA_INC = 5371\nVENDOR_ID_MYCFO_INC = 5372\nVENDOR_ID_OPEN_TELECOMMUNICATIONS_LIMITED = 5373\nVENDOR_ID_DIRIGO_INCORPORATED = 5374\nVENDOR_ID_BAE_SYSTEMS_TACTICAL_COMMS_FILTON = 5375\nVENDOR_ID_OLEANE = 5376\nVENDOR_ID_TRINEXUS = 5377\nVENDOR_ID_PRAIRIEFYRE_SOFTWARE_INC = 5378\nVENDOR_ID_COLONIAL_STATE_BANK = 5379\nVENDOR_ID_CDOT = 5380\nVENDOR_ID_SUPERNOVA = 5381\nVENDOR_ID_IRIS_TECHNOLOGIES_INC = 5382\nVENDOR_ID_IFLEET_INC = 5383\nVENDOR_ID_TSURUKI_PROMOTIONS = 5384\nVENDOR_ID_CITY_NET_CZ_SRO = 5385\nVENDOR_ID_M_S_TECHNOLOGY_CONSULTANTS = 5386\nVENDOR_ID_HYPERFEED = 5387\nVENDOR_ID_NETWORK_ALCHEMY_LTD = 5388\nVENDOR_ID_INTER_TEL = 5389\nVENDOR_ID_OPNET_TECHNOLOGIES_CO_LTD_2 = 5390\nVENDOR_ID_TYCO_SUBMARINE_SYSTEMS_LTD = 5391\nVENDOR_ID_ONLINE_CREATIONS_INC = 5392\nVENDOR_ID_RENAULT = 5393\nVENDOR_ID_GATEWAY_INC = 5394\nVENDOR_ID_LAUREL_NETWORKS_INC = 5395\nVENDOR_ID_BIGCHALKCOM = 5396\nVENDOR_ID_STANDARD_AND_POORS_FUND_SERVICES = 5397\nVENDOR_ID_ELEPHANTX = 5398\nVENDOR_ID_EXTREMIS = 5399\nVENDOR_ID_EVERCOM_SYSTEMS_INTERNATIONAL_INC = 5400\nVENDOR_ID_MASTER_SOFT = 5401\nVENDOR_ID_IDF = 5402\nVENDOR_ID_VIRCOM = 5403\nVENDOR_ID_ECONVERGENCE_PTY_LTD = 5404\nVENDOR_ID_START_PRINTER_EQUIPMENT_CO_LTD = 5405\nVENDOR_ID_NICK_CONTE_INC = 5406\nVENDOR_ID_NETSUPPORT_GMBH = 5407\nVENDOR_ID_INTELLITEL_COMMUNICATIONS = 5408\nVENDOR_ID_EAST_WEST_CONSULTING_KK = 5409\nVENDOR_ID_LES_HOWARD = 5410\nVENDOR_ID_SIGNALSOFT_CORPORATION = 5411\nVENDOR_ID_ZANTAZCOM_INC = 5412\nVENDOR_ID_PEOPLEWEB_COMMUNICATIONSINC = 5413\nVENDOR_ID_JOHN_ASSOCIATE = 5414\nVENDOR_ID_FUJITSU_ASIA_PTE_LTD = 5415\nVENDOR_ID_NESRAL = 5416\nVENDOR_ID_ABSA_GROUP_LTD = 5417\nVENDOR_ID_FORTIS_INC = 5418\nVENDOR_ID_CAMBRIDGE_BROADBAND_LTD = 5419\nVENDOR_ID_SPIDER_TECHNOLOGIES = 5420\nVENDOR_ID_MARIETTA_DODGE_INC = 5421\nVENDOR_ID_RHC_ENTERPRISES_INC = 5422\nVENDOR_ID_MCLEODUSA = 5423\nVENDOR_ID_COLUMBIA_DIVERSIFIED_SERVICES = 5424\nVENDOR_ID_NETSPACE_ONLINE_SYSTEMS = 5425\nVENDOR_ID_GADLINE_LTD = 5426\nVENDOR_ID_STROEDERCOM = 5427\nVENDOR_ID_ENDFORCE_INC = 5428\nVENDOR_ID_PROPACK_DATA_SOFT_UND_HARDWARE_ENTWICKLUNGS_GMBH = 5429\nVENDOR_ID_MASTERGUARD_GMBH = 5430\nVENDOR_ID_LM_DIGITAL = 5431\nVENDOR_ID_SIGHTPATH = 5432\nVENDOR_ID_NETONOMY = 5433\nVENDOR_ID_ADVANCED_HI_TECH_CORPORATION = 5434\nVENDOR_ID_OVISLINK_CORP = 5435\nVENDOR_ID_OPEN = 5436\nVENDOR_ID_PENSAR_CORPORATION = 5437\nVENDOR_ID_UTRECHT_SCHOOL_OF_ARTS = 5438\nVENDOR_ID_PARALLEL_LTD = 5439\nVENDOR_ID_PRIMEON_LTD = 5440\nVENDOR_ID_THE_TIMKEN_COMPANY = 5441\nVENDOR_ID_NEW_ZEALAND_POST_LIMITED = 5442\nVENDOR_ID_NEKEMACOM = 5443\nVENDOR_ID_JOE_MININERI = 5444\nVENDOR_ID_METROSTAT_TECHNOLOGIES_INC = 5445\nVENDOR_ID_SKYGATE_TECHNOLOGY_LTD = 5446\nVENDOR_ID_AEOLON_RESEARCH = 5447\nVENDOR_ID_KYKINK_COMMUNICATIONS_CORP = 5448\nVENDOR_ID_ONENETPLUSCOM = 5449\nVENDOR_ID_I_LINK_INC = 5450\nVENDOR_ID_SEGAINTERSETTLE_AG = 5451\nVENDOR_ID_BUSINESS_LAYERS = 5452\nVENDOR_ID_INTELIS_INC = 5453\nVENDOR_ID_TRANGO_SYSTEMS_INC = 5454\nVENDOR_ID_ARTEMIS_MANAGEMENT_SYSTEMS = 5455\nVENDOR_ID_FOCUS_ONLINE_GMBH = 5456\nVENDOR_ID_CASTLENET_TECHNOLOGY_INC = 5457\nVENDOR_ID_GUPTA_2 = 5458\nVENDOR_ID_SANTOOLS_INC = 5459\nVENDOR_ID_BROADLINK_COMMUNICATIONS_INC = 5460\nVENDOR_ID_KSI_INC = 5461\nVENDOR_ID_RESUMECOM = 5462\nVENDOR_ID_EDUARDO_FERMIN = 5463\nVENDOR_ID_MANUKAU_INSTITUTE_OF_TECHNOLOGY = 5464\nVENDOR_ID_EBUSINESS_TECHNOLOGIES = 5465\nVENDOR_ID_INTERNATIONAL_BIOMETRIC_SOCIETY_IBS = 5466\nVENDOR_ID_TELEFONICA_INVESTIGACION_Y_DESARROLLO = 5467\nVENDOR_ID_ACTELIS_NETWORKS = 5468\nVENDOR_ID_CODEBASE = 5469\nVENDOR_ID_TRANSPARITY_LIMITED = 5470\nVENDOR_ID_SWITZERLAND = 5471\nVENDOR_ID_TIMEPROOF = 5472\nVENDOR_ID_ALGACOM = 5473\nVENDOR_ID_ERICSSON_AHEAD_COMMUNICATIONS_SYSTEMS_GMBH = 5474\nVENDOR_ID_THYSYS_ENGINEERING = 5475\nVENDOR_ID_APEX_INC = 5476\nVENDOR_ID_NETATTACH_INC = 5477\nVENDOR_ID_CRITICAL_PATH_BERLIN_LEM = 5478\nVENDOR_ID_PINNACLE_DATA_SYSTEMS_INC_PDSI = 5479\nVENDOR_ID_T_SQWARE_INCORPORATED = 5480\nVENDOR_ID_AGENCIA_DE_CERTIFICION_ELECTRONICA = 5481\nVENDOR_ID_MURAKAMI_ELECTRO_COMMUNICATION_LABORATORIES_INC = 5482\nVENDOR_ID_NETENSITY_INC = 5483\nVENDOR_ID_UNIVERSITY_OF_THE_AEGEAN = 5484\nVENDOR_ID_THE_OPEN_GROUP_LTD = 5485\nVENDOR_ID_CHINA_MERCHANTS_BANK = 5486\nVENDOR_ID_MULTITRADE_SPA = 5487\nVENDOR_ID_TEMBLAST = 5488\nVENDOR_ID_ALS_INTERNATIONAL_LTD = 5489\nVENDOR_ID_COMMNAV_INC = 5490\nVENDOR_ID_UPS_MANUFACTURING = 5491\nVENDOR_ID_TELEPHIA = 5492\nVENDOR_ID_PALM_COMPUTING = 5493\nVENDOR_ID_MARATHON_INNOVATIONS_INC = 5494\nVENDOR_ID_CONVERGENCE_EQUIPMENT_COMPANY = 5495\nVENDOR_ID_GEMPLUS = 5496\nVENDOR_ID_TRONDENT_DEVELOPMENT_CORP = 5497\nVENDOR_ID_KARDINIA_SOFTWARE = 5498\nVENDOR_ID_YHKIM_CO_LTD = 5499\nVENDOR_ID_GEMEENTELIJK_HAVENBEDRIJF_ROTTERDAM = 5500\nVENDOR_ID_NTT_PC_COMMUNICATIONS_INC = 5501\nVENDOR_ID_CANON_APTEX_INC = 5502\nVENDOR_ID_ORINDA_TECHNOLOGY_GROUP = 5503\nVENDOR_ID_ZHONE_TECHNOLOGIES_INC = 5504\nVENDOR_ID_METROSTAT_TECHNOLOGIES_INC_2 = 5505\nVENDOR_ID_DIGITAL_X_INC = 5506\nVENDOR_ID_TIGHT_INFORMATICS = 5507\nVENDOR_ID_SWOD_ORG = 5508\nVENDOR_ID_BE_CONSTRUCTION_CO_DENNIS = 5509\nVENDOR_ID_PRISMTECH = 5510\nVENDOR_ID_SYSCALL_NETWORK_SOLUTIONS_GBR = 5511\nVENDOR_ID_GMD_FIRST = 5512\nVENDOR_ID_IXL = 5513\nVENDOR_ID_TIMELINE_TECHNOLOGY_INC = 5514\nVENDOR_ID_DIRECTORY_TOOLS_AND_APPLICATION_SERVICES_INC = 5515\nVENDOR_ID_SECUREWORKS_INC = 5516\nVENDOR_ID_RAPID5_NETWORKS = 5517\nVENDOR_ID_TDS_TELECOM = 5518\nVENDOR_ID_LSITEC = 5519\nVENDOR_ID_ALFRED_WEGENER_INSTITUTE_FOR_POLAR_AND_MARINE_RESEARCH = 5520\nVENDOR_ID_ST_JOHN_HEALTH_SYSTEM = 5521\nVENDOR_ID_CYBERNET_CORPORATION = 5522\nVENDOR_ID_GRCP = 5523\nVENDOR_ID_EMORY_UNIVERSITY = 5524\nVENDOR_ID_SSF = 5525\nVENDOR_ID_ADERO_INC = 5526\nVENDOR_ID_CONTEXT_SYSTEMS_GROUP = 5527\nVENDOR_ID_NETBOTZ = 5528\nVENDOR_ID_NEOFORMACOM = 5529\nVENDOR_ID_CESCOM_INC = 5530\nVENDOR_ID_MIEN_INFORMATION_SOLUTIONS = 5531\nVENDOR_ID_Q_TELECELL_GMBH = 5532\nVENDOR_ID_WIDEAWAKE_LTD = 5533\nVENDOR_ID_VOGON_AB = 5534\nVENDOR_ID_3RD_GENERATION_PARTNERSHIP_PROJECT_2_3GPP2 = 5535\nVENDOR_ID_QUINTUS_CORPORATION = 5536\nVENDOR_ID_COMDIAL_CORPORATION = 5537\nVENDOR_ID_MICRON_TECH_INFORMATION_CO_KR = 5538\nVENDOR_ID_CYBERTEK_HOLDINGS = 5539\nVENDOR_ID_RWTH_AACHEN_UNIVERSITY = 5540\nVENDOR_ID_PARAGEA_COMMUNICATIONS_INC = 5541\nVENDOR_ID_EON_COMMUNICATIONS_CORPORATION = 5542\nVENDOR_ID_INIEMP_HOLDINGS_CORPORATION_SL = 5543\nVENDOR_ID_THOMSON_CSF_SYSTEMS_CANADA = 5544\nVENDOR_ID_TANTAU_SOFTWARE_INC = 5545\nVENDOR_ID_MAILVISION_INC = 5546\nVENDOR_ID_BSQUARE_CORPORATION = 5547\nVENDOR_ID_COBALT_NETWORKS = 5548\nVENDOR_ID_TIMESTEN_PERFORMANCE_SOFTWARE = 5549\nVENDOR_ID_MONGGO_INC = 5550\nVENDOR_ID_OSCILLOQUARTZ_SA = 5551\nVENDOR_ID_AIR_ATLANTA_ICELANDIC = 5552\nVENDOR_ID_MACROMEDIA_EBUSINESS_SOLUTIONS = 5553\nVENDOR_ID_SPOTCAST_COMMUNICATIONS = 5554\nVENDOR_ID_AUTHENTIC8_PTY_LTD = 5555\nVENDOR_ID_SERVICE_FACTORY = 5556\nVENDOR_ID_ONEMAINCOM = 5557\nVENDOR_ID_S_LINK_CORPORATION = 5558\nVENDOR_ID_VITRIA_TECHNOLOGY_INC = 5559\nVENDOR_ID_THE_COLOR_REGISTRY = 5560\nVENDOR_ID_2ND_WAVE_INC = 5561\nVENDOR_ID_REDKNEE_INC = 5562\nVENDOR_ID_OLA_INTERNET = 5563\nVENDOR_ID_OMEGA_ENTERPRISE = 5564\nVENDOR_ID_SYSWAVE_CO_LTD = 5565\nVENDOR_ID_VISIONGLOBAL_NETWORK_CORPORATION = 5566\nVENDOR_ID_RIVERSTONE_NETWORKS = 5567\nVENDOR_ID_SOUTHVIEW_TECHNOLOGIES_INC = 5568\nVENDOR_ID_SOLUZIONI_TECNOLOGICHE_BANCARIE_SRL = 5569\nVENDOR_ID_SONY_PICTURES_ENTERTAINMENT = 5570\nVENDOR_ID_GETTHERECOM = 5571\nVENDOR_ID_HOTEK_TECHNOLOGYCO_LTD = 5572\nVENDOR_ID_TONG = 5573\nVENDOR_ID_BANKENGINE_INC = 5574\nVENDOR_ID_CERTENGINE_INC = 5575\nVENDOR_ID_TILL_PHOTONICS_GMBHANSELM_KRUIS = 5576\nVENDOR_ID_PERSIMMON_DEVELOPMENT = 5577\nVENDOR_ID_NEW_MEXICO_STATE_UNIVERSITY = 5578\nVENDOR_ID_MERCATA_INC = 5579\nVENDOR_ID_EXEJONE = 5580\nVENDOR_ID_COMMUNICATIONS_NETWORKS_OF_AFRICA_GH_LTD_NETAFRICA = 5581\nVENDOR_ID_ITRUST_SOLUTIONS_AG = 5582\nVENDOR_ID_MD_INFORMATION_SYSTEMS = 5583\nVENDOR_ID_GENERAL_BANDWIDTH = 5584\nVENDOR_ID_VERY_CLEVER_SOFTWARE_LTD = 5585\nVENDOR_ID_IPWIRELESS_INC = 5586\nVENDOR_ID_FLUGHAFEN_MUENCHEN_GMBH = 5587\nVENDOR_ID_THOMCAST_COMMUNICATION_INCCOMWAVE_DIVISION_COMWAVE = 5588\nVENDOR_ID_SYNOPSYS_INC = 5589\nVENDOR_ID_MARIMBA_INC_2 = 5590\nVENDOR_ID_SCTE = 5591\nVENDOR_ID_WILSON_SANDERS_INC = 5592\nVENDOR_ID_MAGNUM_TECHNOLOGIES_INC = 5593\nVENDOR_ID_KOANKEISO_CO_LTD = 5594\nVENDOR_ID_INGRIAN_SYSTEMS_INC = 5595\nVENDOR_ID_TANDBERG_ASA = 5596\nVENDOR_ID_MEINBERG_FUNKUHREN = 5597\nVENDOR_ID_SUBMARINE_WARFARE_SYSTEMS_CENTRE = 5598\nVENDOR_ID_COMP_SCI_ENG_DE_MONTFORT_UNIVERSITY = 5599\nVENDOR_ID_CLEARSTREAM_SERVICES = 5600\nVENDOR_ID_CLEARSTREAM_BANKING = 5601\nVENDOR_ID_T_R_SYSTEMS_INC = 5602\nVENDOR_ID_CAPITAL_ONE_FINANCIAL_SERVICES = 5603\nVENDOR_ID_DIGIT_SAFE = 5604\nVENDOR_ID_WILLIAM_DATA_SYSTEMS_LTD = 5605\nVENDOR_ID_CERPLUS_SAPIERRE = 5606\nVENDOR_ID_ERWANN_ABALEA = 5607\nVENDOR_ID_RED_PLANET_TECHNOLOGIES = 5608\nVENDOR_ID_SMARTLEAF_INC = 5609\nVENDOR_ID_EXBIT_TECHNOLOGYA_S = 5610\nVENDOR_ID_VMUNIXORG = 5611\nVENDOR_ID_KOREA_DATA_COMMUNICATIONS = 5612\nVENDOR_ID_TDRESSLERNET_FORMERLY_SQLCOMPETENCE = 5613\nVENDOR_ID_SONYBPE = 5614\nVENDOR_ID_INHERIT_S_AB = 5615\nVENDOR_ID_TEKOPS = 5616\nVENDOR_ID_TRIO_COMMUNICATIONS_2000_PTY_LTD = 5617\nVENDOR_ID_WARENET_INC = 5618\nVENDOR_ID_AMARANTH_NETWORKS_INC = 5619\nVENDOR_ID_CFX_COMMUNICATIONS = 5620\nVENDOR_ID_HERIOT_WATT_UNIVERSITY = 5621\nVENDOR_ID_DREGIS_GMBH = 5622\nVENDOR_ID_KPMG_2 = 5623\nVENDOR_ID_ENTERASYS_NETWORKS = 5624\nVENDOR_ID_A_GELL_CXA = 5625\nVENDOR_ID_INTERNET_BARTER_INCAKA_BARTERTRUSTCOM = 5626\nVENDOR_ID_HITACHI_PROCESS_COMPUTER_ENGINEERING_INC = 5627\nVENDOR_ID_XO_SOFT_LTD = 5628\nVENDOR_ID_CONTINUUS_SOFTWARE_CORPORATION = 5629\nVENDOR_ID_EXIO_COMMUNICATIONS_INC = 5630\nVENDOR_ID_ALLIANCE_SYSTEMS_INC = 5631\nVENDOR_ID_TELEPASSPORT_HELLAS_SA = 5632\nVENDOR_ID_BASF_COMPUTER_SERVICES_GMBH = 5633\nVENDOR_ID_UNIVERSITEIT_VAN_AMSTERDAM = 5634\nVENDOR_ID_DALE_W_LIU = 5635\nVENDOR_ID_DIGNOS_EDV_GMBH = 5636\nVENDOR_ID_IDN_TECHNOLOGY_INC = 5637\nVENDOR_ID_PK_ELECTRONICS = 5638\nVENDOR_ID_DEPT_OF_BIOLOGY_WESTERN_KY_UNIVERSITY = 5639\nVENDOR_ID_LAMA_LAW_FIRM = 5640\nVENDOR_ID_ANTHEM_INC = 5641\nVENDOR_ID_MICROCAST_INC = 5642\nVENDOR_ID_UNIVERSITY_OF_ARIZONA = 5643\nVENDOR_ID_PASSEDGE = 5644\nVENDOR_ID_BOWSTREET_SOFTWARE = 5645\nVENDOR_ID_ONYX_NETWORKS = 5646\nVENDOR_ID_EMPERATIVE_INC = 5647\nVENDOR_ID_L_3_COMMUNICATIONS_PRIMEWAVE_COMMUNICATIONS = 5648\nVENDOR_ID_WEBSWAP_INC = 5649\nVENDOR_ID_MERCK_CO_INC = 5650\nVENDOR_ID_MAIPU_ELECTRIC_INDUSTRIAL_CO_LTD = 5651\nVENDOR_ID_KRAIG_SIGMAN = 5652\nVENDOR_ID_CSP = 5653\nVENDOR_ID_ANDO_ELECTRIC_CORPORATION = 5654\nVENDOR_ID_P_CUBE_LTD = 5655\nVENDOR_ID_MONMOUTH_UNIVERSITY = 5656\nVENDOR_ID_UNIVERSIDAD_DE_LA_CORUNA = 5657\nVENDOR_ID_ISL_INSTITUTE_OF_SHIPPING_ECONOMICS_AND_LOGISTICS = 5658\nVENDOR_ID_COPROSYS_INC = 5659\nVENDOR_ID_XIAN_DATANG_TELEPHONE_CORP = 5660\nVENDOR_ID_T_MOBILE = 5661\nVENDOR_ID_NORDIC_GLOBAL_INC = 5662\nVENDOR_ID_TECNOLOGICA_INFORMATICA = 5663\nVENDOR_ID_MONASTERY_OF_THE_GLORIOUS_ASCENSION_INC = 5664\nVENDOR_ID_VERTICAL_ONE_INC = 5665\nVENDOR_ID_SERVEVCAST = 5666\nVENDOR_ID_TELDATA_COMPUTER_INDUSTRIES_INC = 5667\nVENDOR_ID_MYCROFT_INC = 5668\nVENDOR_ID_DIGITAL_ISLAND = 5669\nVENDOR_ID_REDWOOD_TECHNOLOGIES_LTD = 5670\nVENDOR_ID_HORUS_IT_GMBH = 5671\nVENDOR_ID_CIENA_CORPORATION_FORMERLY_ONI_SYSTEMS_CORP = 5672\nVENDOR_ID_ECONVERGENT_INC = 5673\nVENDOR_ID_TEXCEL_TECHNOLOGY_PLC = 5674\nVENDOR_ID_GENOSYS_TECHNOLOGY_MANAGEMENT_INC = 5675\nVENDOR_ID_DATAFLOW_ALASKA_INC = 5676\nVENDOR_ID_CLUNIX_INC = 5677\nVENDOR_ID_STALKER_SOFTWARE_INC = 5678\nVENDOR_ID_EWE_EVES_GOURDS_THINGS = 5679\nVENDOR_ID_WINDSOR_GROUP = 5680\nVENDOR_ID_FRUITTM = 5681\nVENDOR_ID_SYNERGON_LTD = 5682\nVENDOR_ID_METRO_OPTIX_INC = 5684\nVENDOR_ID_DATALINK_SNMP_SOLUTION = 5685\nVENDOR_ID_A_H_COMPUTER_COMPANY = 5686\nVENDOR_ID_ICON_LABORATORIES_INC = 5687\nVENDOR_ID_STRATASOURCE_INC = 5688\nVENDOR_ID_NET_SYS_CO_LTD = 5689\nVENDOR_ID_AGRI_COM_HOLDINGS = 5690\nVENDOR_ID_SILVERPLATTER_INFORMATION = 5691\nVENDOR_ID_KILFOIL_INFORMATION_TECHNOLOGIES_INC = 5692\nVENDOR_ID_ACCORDION_NETWORKS = 5693\nVENDOR_ID_INTEGRATED_DIGITAL_SOLUTIONS_LIMITED = 5694\nVENDOR_ID_BBQCOM = 5695\nVENDOR_ID_WALTER_GRAPHTEK_GMBH = 5696\nVENDOR_ID_HANSENETTELEFONGESELLSCHAFT_MBH = 5697\nVENDOR_ID_DIGITRANS = 5698\nVENDOR_ID_CORNERSTONE_SOLUTIONS_CORPORATION = 5699\nVENDOR_ID_UNIVERSITY_OF_THE_WEST_INDIES = 5700\nVENDOR_ID_MAPLE_NETWORKS_INC = 5701\nVENDOR_ID_TOUCH_TECHNOLOGY_INTERNATIONAL = 5702\nVENDOR_ID_NVIDIA_CORPORATION = 5703\nVENDOR_ID_CITGO_PETROLEUM_CORPORATION = 5704\nVENDOR_ID_DTA = 5705\nVENDOR_ID_LGS_GROUP_INC = 5706\nVENDOR_ID_FIBERSPACE_UNLIMITED_LLC = 5707\nVENDOR_ID_CTS_NETWORK_SERVICES = 5708\nVENDOR_ID_EDS_CFSM = 5709\nVENDOR_ID_WELLKNIT = 5710\nVENDOR_ID_ECCS_INC = 5711\nVENDOR_ID_SYSTEM_INTEGRATORS_INCORPORATED = 5712\nVENDOR_ID_NIKSUN_INC = 5713\nVENDOR_ID_INSH_ALLAH = 5714\nVENDOR_ID_ENIGMA_ENTERPRISES = 5715\nVENDOR_ID_WEBSPECTRUM_SOFTWARE_PVT_LTD = 5716\nVENDOR_ID_UUCOM = 5717\nVENDOR_ID_CELLIT_INC = 5718\nVENDOR_ID_PNC_FINANCIAL_SERVICES_GROUP = 5719\nVENDOR_ID_IMIMIC_NETWORKING_INC = 5720\nVENDOR_ID_INTELLOPS = 5721\nVENDOR_ID_OPNET_TECHNOLOGIES_INC_FORMERLY_ALTAWORKS_CORPORATION = 5722\nVENDOR_ID_SAMAC_SOFTWARE_GMBH = 5723\nVENDOR_ID_CICERO_COMMUNICATIONS_INC = 5724\nVENDOR_ID_XEL_COMMUNICATIONS = 5725\nVENDOR_ID_LYONDELL_CHEMICAL_COMPANY = 5726\nVENDOR_ID_SMART_CARD_APPLICATIONS_PTY_LIMITED = 5727\nVENDOR_ID_K_RING_TECHNOLOGIES = 5728\nVENDOR_ID_SQLI = 5729\nVENDOR_ID_SIMPSON_PROFESSIONAL_SERVICES = 5730\nVENDOR_ID_DJM_ENTERPRISES = 5731\nVENDOR_ID_ONE_INC_PLANO = 5732\nVENDOR_ID_DEPT3ISCASINSTITUTE_OF_SOFTWARE_THE_CHINESE_ACADEMYOF_SCIENCES = 5733\nVENDOR_ID_FABRICA_NACIONAL_DE_MONEDA_Y_TIMBRE_REAL_CASA_DE_LA_MONEDA = 5734\nVENDOR_ID_EBSNET_INC = 5735\nVENDOR_ID_POWER_CONVERSION_PRODUCTS_LLC = 5736\nVENDOR_ID_E_COMMERCE_ENTERPRISES_LLC = 5737\nVENDOR_ID_VOVIDA_NETWORKS = 5738\nVENDOR_ID_XPEED_INC = 5739\nVENDOR_ID_BIRIONIC_PVT_LTD = 5740\nVENDOR_ID_A2ZCOM = 5741\nVENDOR_ID_SSC_HENGELO = 5742\nVENDOR_ID_GT_GROUP_TELECOM_SERVICES_CORP = 5743\nVENDOR_ID_TARSEC_INC = 5744\nVENDOR_ID_ERICSSON_NIKOLA_TESLA_DD = 5745\nVENDOR_ID_LANEX_SP_Z_OO = 5746\nVENDOR_ID_BLUETAIL_AB = 5747\nVENDOR_ID_APPLIED_EXPERT_SYSTEMS = 5748\nVENDOR_ID_TGS_NOPEC_GEOPHYSICAL_COMPANY = 5749\nVENDOR_ID_GENERAL_MILLS = 5750\nVENDOR_ID_ILLUMINATION_ENTERPRISES_INC = 5751\nVENDOR_ID_HYPERSOFT_INC = 5752\nVENDOR_ID_UNIVERSITY_OF_MARIBOR = 5753\nVENDOR_ID_CLEARSTREAM_INTERNATIONAL = 5754\nVENDOR_ID_ITS_UK_LTD = 5755\nVENDOR_ID_SUPERTEL_JSC = 5756\nVENDOR_ID_TRILITHIC = 5757\nVENDOR_ID_STINS_COMAN = 5758\nVENDOR_ID_BRIDGESCOM = 5759\nVENDOR_ID_BELL_ATLANTIC_MOBILE = 5760\nVENDOR_ID_HANNETWARE_INC = 5761\nVENDOR_ID_INTERLAND = 5762\nVENDOR_ID_DB_POWER_ELECTRONICS_P_LTD = 5763\nVENDOR_ID_JAZZEY_GMBH = 5764\nVENDOR_ID_AXESS_PRO_NETWORKS_GMBH = 5765\nVENDOR_ID_IBM_GLOBAL_SERVICES = 5766\nVENDOR_ID_QUARK_INC = 5767\nVENDOR_ID_POLISH_JAPANESE_INSTITUTE_OF_INFORMATION_TECHNOLOGY = 5768\nVENDOR_ID_HEALTHMAGIC_INC = 5769\nVENDOR_ID_MEDEPASSCOM_INC = 5770\nVENDOR_ID_CISCO_SYSTEMS_INC = 5771\nVENDOR_ID_C_IT = 5772\nVENDOR_ID_EQUIINET_LTD = 5773\nVENDOR_ID_BEIJING_TELECABLE_NETWORK_SYSTEM_LTD = 5774\nVENDOR_ID_ADVANCED_TECHNOLOGY_SOLUTIONS_INTERNATIONAL = 5775\nVENDOR_ID_EXPRESS_SCRIPTS_INC = 5776\nVENDOR_ID_UNIVERSIDAD_AUTONOMA_DE_MADRID = 5778\nVENDOR_ID_DATA_GUYS_INC = 5779\nVENDOR_ID_PDA_VERTICALS_CORP = 5780\nVENDOR_ID_JORDAN_NETWORK_ENGINEERING = 5781\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_SYSTEM = 5782\nVENDOR_ID_BROADPAC_COMMUNICATIONS = 5783\nVENDOR_ID_COGITA_LTD = 5784\nVENDOR_ID_INTERSHOP_COMMUNICATIONS_AG = 5785\nVENDOR_ID_MC_COY_MARINE_CONSULTANTS = 5786\nVENDOR_ID_ADVENTIST_HEALTH = 5787\nVENDOR_ID_SOFTDEV_CORP = 5788\nVENDOR_ID_MOBILEQCOM_INC = 5789\nVENDOR_ID_SHAWN_STARR = 5790\nVENDOR_ID_COMPU_MENTOR_INC = 5791\nVENDOR_ID_DEAN_GAKIS = 5792\nVENDOR_ID_THE_EDGE_CONSULTANTS = 5793\nVENDOR_ID_OBR_CTM = 5794\nVENDOR_ID_BPT_TELBANK_SA = 5795\nVENDOR_ID_STC_INFORMATIK = 5796\nVENDOR_ID_WESTERN_POWER_DISTRIBUTION = 5797\nVENDOR_ID_VIACCESS_SA = 5798\nVENDOR_ID_NYHERJI = 5799\nVENDOR_ID_CRUISE_CONTROLS_PVT_LTD_FRESNEL = 5800\nVENDOR_ID_SECOND_OPINION_SOFTWARE = 5801\nVENDOR_ID_ELECTROLINE_EQUIPMENT_INC = 5802\nVENDOR_ID_2AB_INC = 5803\nVENDOR_ID_LANTERN_COMMUNICATIONS = 5804\nVENDOR_ID_TELEVIDEO_INC = 5805\nVENDOR_ID_SK_TELECOM = 5806\nVENDOR_ID_FLORA_VAN_KESTEREN_TUINADVIEZEN = 5807\nVENDOR_ID_INRANGE_TECHNOLOGIES_CORPORATION = 5808\nVENDOR_ID_NIEDEN_NSM = 5809\nVENDOR_ID_GLOBAL_CROSSING_2 = 5810\nVENDOR_ID_THE_GOLDPARROT_CORPORATION = 5811\nVENDOR_ID_CORIOLIS_NETWORKS = 5812\nVENDOR_ID_THE_OPENNMS_GROUP_INC = 5813\nVENDOR_ID_GENERAL_COMMUNICATIONS_INC = 5814\nVENDOR_ID_OPTIMA_TELECOM_INC = 5815\nVENDOR_ID_LOCKSTEP_SYSTEMS = 5816\nVENDOR_ID_HIGH_PRECISION_RECORD_COMPANY_LIMITED = 5817\nVENDOR_ID_CHERRY_CYBER_NET = 5818\nVENDOR_ID_XNET_LTDA = 5819\nVENDOR_ID_FLYFORMS = 5820\nVENDOR_ID_ORANGESOFT_INC = 5821\nVENDOR_ID_REYNOLDS_AND_REYNOLDS_PTY_LTD = 5822\nVENDOR_ID_NROSE = 5823\nVENDOR_ID_NIKKAI_ELECTRONIC_INC = 5824\nVENDOR_ID_NATIVE_NETWORKS = 5825\nVENDOR_ID_MIND_CTI_LTD = 5826\nVENDOR_ID_HERMES_SOFTLAB = 5827\nVENDOR_ID_SPACENET_COMMUNICATION_AB = 5828\nVENDOR_ID_AMCC_SWITCHING_CORP = 5829\nVENDOR_ID_XCELLENET = 5830\nVENDOR_ID_CLEONDRIS_GMBH = 5831\nVENDOR_ID_HORGANNET = 5832\nVENDOR_ID_TAILYN_COMMUNICATION_COMPANY = 5833\nVENDOR_ID_IDENTIKEY_LTD = 5834\nVENDOR_ID_NEWTEC_CY = 5835\nVENDOR_ID_TOYO_COMMUNICATION_EQUIPMENT_CO_LTD = 5836\nVENDOR_ID_NEDCOR_LIMITED = 5837\nVENDOR_ID_CABLETIME_LTD = 5838\nVENDOR_ID_BIOPLASMA_ANDALUZA_SL = 5839\nVENDOR_ID_ARAVOX_TECHNOLOGIES_INC = 5840\nVENDOR_ID_NETFISH_TECHNOLOGIES = 5841\nVENDOR_ID_CISCO_SYSTEMS = 5842\nVENDOR_ID_FIBERLOGIC_COMMUNICATIONS = 5843\nVENDOR_ID_LG_SPACE_ENGINEERING_CORP = 5844\nVENDOR_ID_CYBERUS_ONLINE_INC = 5845\nVENDOR_ID_NETCENTREX = 5846\nVENDOR_ID_KNOWLEDGE_DESIGN = 5847\nVENDOR_ID_RISSA_SOLUTIONS_CORP = 5848\nVENDOR_ID_SIGNAL_COM = 5849\nVENDOR_ID_HS_LEADER_SRL = 5850\nVENDOR_ID_EWINDOWSHOPCOM = 5851\nVENDOR_ID_OSCAR_JACOBSSON = 5852\nVENDOR_ID_BELL_TECHNOLOGY = 5853\nVENDOR_ID_BELL_NETWORK_SOLUTIONS = 5854\nVENDOR_ID_JOHN_DEERE_DBA_DEERE_COMPANY = 5855\nVENDOR_ID_VIANET_TECHNOLOGIES_INC = 5856\nVENDOR_ID_VIRTUALWORKOUT = 5857\nVENDOR_ID_CYCLONE_COMMERCE_INC = 5858\nVENDOR_ID_EFA_SOFTWARE_SERVICES_LTD = 5859\nVENDOR_ID_TELENET_INC = 5860\nVENDOR_ID_MITSUBISHI_HEAVY_INDUSTRIES_LTD = 5861\nVENDOR_ID_CEYCO_INTERNET_APPLICATIONS = 5862\nVENDOR_ID_DALASKA_CO = 5863\nVENDOR_ID_REITC_LLC = 5864\nVENDOR_ID_PARALLEL_NETWORKS = 5865\nVENDOR_ID_LONDON_SCHOOL_OF_ECONOMICS_COMPUTER_SECURITY_RESEARCH_CENTRE = 5866\nVENDOR_ID_SAN_JOAQUIN_DELTA_COMMUNITY_COLLEGE_DISTRICT = 5867\nVENDOR_ID_CRONOS_RESEARCH_CENTRE_SDN_BHD = 5868\nVENDOR_ID_DEUTSCHE_POST_EBUSINESS = 5869\nVENDOR_ID_BIOFONE_INC = 5870\nVENDOR_ID_HYPERXS = 5871\nVENDOR_ID_TDC_SYSTEMS = 5872\nVENDOR_ID_SOFTWARE_DYNAMICS_INC = 5873\nVENDOR_ID_TELLABS_MNG = 5874\nVENDOR_ID_CHINA_ADVANCED_INFO_OPTICAL_NETWORK_CAINONET = 5875\nVENDOR_ID_A2B_SRO = 5876\nVENDOR_ID_RUHR_UNIVERSITAET_BOCHUM = 5877\nVENDOR_ID_NICE_GMBH = 5878\nVENDOR_ID_UNASSIGNED_5 = 5879\nVENDOR_ID_OPTEWAY = 5880\nVENDOR_ID_ARZ_ALLGEMEINESS_RECHENZENTRUM_GMBH = 5881\nVENDOR_ID_INOPOLY_INC = 5882\nVENDOR_ID_ZAFFIRE_INC = 5883\nVENDOR_ID_UNIVERSITY_OF_UTAH = 5884\nVENDOR_ID_MCGOUGH_ENTERPRISES_LLC = 5885\nVENDOR_ID_NUSPEED_INTERNET_SYSTEMS = 5886\nVENDOR_ID_FALCONNECT_INC = 5887\nVENDOR_ID_AGILITI_INC = 5888\nVENDOR_ID_UNIVERSIDAD_IBEROAMERICANA_GC = 5889\nVENDOR_ID_LANTOP_SYSTEMS_LTD = 5890\nVENDOR_ID_AUTOTOTE_SYSTEMS_INC = 5891\nVENDOR_ID_LEGACY_COMPUTER_SERVICES_LIMITED = 5892\nVENDOR_ID_PINPOINT_CORPORATION = 5893\nVENDOR_ID_DREAMCHAL_INC = 5894\nVENDOR_ID_AT_FUT_AS = 5895\nVENDOR_ID_CSSEEVENS_ST_HILAIRE = 5896\nVENDOR_ID_BP_AMOCO_PLC = 5897\nVENDOR_ID_RITLABS_SRL = 5898\nVENDOR_ID_MICROM_ELECTRONICS = 5899\nVENDOR_ID_SCHRADER_BRIDGEPORT_INTERNATIONAL = 5900\nVENDOR_ID_NOMINUM_INC = 5901\nVENDOR_ID_MAHARAJAH_INFOSYS = 5902\nVENDOR_ID_PACE_MICRO_TECHNOLOGY_PLC = 5903\nVENDOR_ID_WALGREENS = 5904\nVENDOR_ID_STORAGENETWORKS = 5905\nVENDOR_ID_TRAVSYS_BV = 5906\nVENDOR_ID_LOKASOFT = 5907\nVENDOR_ID_OTELNET_INC = 5908\nVENDOR_ID_SKYBITZ_INC = 5909\nVENDOR_ID_AVAILANT = 5910\nVENDOR_ID_CBROOK = 5911\nVENDOR_ID_YUASA_CORPORATION = 5912\nVENDOR_ID_OLIVER_FEHR = 5913\nVENDOR_ID_BALSA_SOFTWARE = 5914\nVENDOR_ID_TRILOGIC_SYSTEMS = 5915\nVENDOR_ID_I_NEBULACOM = 5916\nVENDOR_ID_GIGALINK = 5917\nVENDOR_ID_BBL = 5918\nVENDOR_ID_DEPARTAMENTO_DE_INFORMATICA_DA_FAC_CIENCIAS_DA_UNIV_LISBOA = 5919\nVENDOR_ID_ZURICH_FINANCIAL_SERVICES_GROUP = 5920\nVENDOR_ID_SEMA_GROUP_AB = 5921\nVENDOR_ID_REAL_TIME_MONITORS_INC = 5922\nVENDOR_ID_INTERNET2 = 5923\nVENDOR_ID_XEVO_CORP = 5924\nVENDOR_ID_INTERACTIVE_PEOPLE_UNPLUGGED_AB = 5925\nVENDOR_ID_INTERLINK = 5926\nVENDOR_ID_NEXCOMM_SYSTEMS_INC = 5927\nVENDOR_ID_ZYDACRON_INC = 5928\nVENDOR_ID_AMERCOM = 5929\nVENDOR_ID_IMAGICTV_INC = 5930\nVENDOR_ID_PRESIDEO_INC = 5931\nVENDOR_ID_OPENSYSTEMSCOM_INC = 5932\nVENDOR_ID_SOFTWARE_SERVICES = 5933\nVENDOR_ID_UNIVERSITY_OF_LOUISIANA_AT_LAFAYETTE = 5934\nVENDOR_ID_ACADEMIA_SINICA_COMPUTING_CENTRE = 5935\nVENDOR_ID_AHHAAA_AB = 5936\nVENDOR_ID_HYPOVEREINSBANK = 5937\nVENDOR_ID_MACFARLANE_TELESYSTEMS_LTD = 5938\nVENDOR_ID_HALCOM_INFORMATIKA_DOO = 5939\nVENDOR_ID_RED_LION_CONTROLS_JBM_ELECTRONICS_CO_INC = 5940\nVENDOR_ID_COSMOCOM_INC = 5941\nVENDOR_ID_THOUGHTSHARE_COMMUNICATIONS = 5942\nVENDOR_ID_MATCHCRAFT_INC = 5943\nVENDOR_ID_NROSE_2 = 5944\nVENDOR_ID_ATBUSINESS_COMMUNICATIONS_OYJ = 5945\nVENDOR_ID_MULTITEL_INC = 5946\nVENDOR_ID_WEBFORCE_LLC = 5947\nVENDOR_ID_3NO_SYSTEMS = 5948\nVENDOR_ID_IBM_AIX_TOOLS_TEAM = 5949\nVENDOR_ID_IMAGINEERING_INC = 5950\nVENDOR_ID_NETSCALER = 5951\nVENDOR_ID_BREAKAWAY_SOLUTIONS_INC = 5952\nVENDOR_ID_ELETEL_INC = 5953\nVENDOR_ID_AARON_TELECOMMUNICATION_TECHNOLOGY = 5954\nVENDOR_ID_ASCONA = 5955\nVENDOR_ID_TRAVELPORT_FORMERLY_WORLDSPAN = 5956\nVENDOR_ID_ESSEMATICA_SRL = 5957\nVENDOR_ID_KCELL = 5958\nVENDOR_ID_EASTERN_COMMUNICATIONS_CO_LTD = 5959\nVENDOR_ID_CEFRIEL = 5960\nVENDOR_ID_POWEC_AS = 5961\nVENDOR_ID_DAVID_CLUNIE = 5962\nVENDOR_ID_RADIOSCAPE_LTD = 5963\nVENDOR_ID_FENESTRAE_BV = 5964\nVENDOR_ID_CENOSIS = 5965\nVENDOR_ID_HUMMINGBIRD_LTD = 5966\nVENDOR_ID_JANE_ELLEN_SHATZ_PH_D = 5967\nVENDOR_ID_VAMS = 5968\nVENDOR_ID_LIGHTSPEED_SYSTEMS = 5969\nVENDOR_ID_CSIRO = 5970\nVENDOR_ID_LEAD_TECHNOLOGIES_INC = 5971\nVENDOR_ID_AIRNET_COMMUNICATIONS_CORPORATION = 5972\nVENDOR_ID_RAINBOW_TECHNOLOGIES_INC = 5973\nVENDOR_ID_TELECOM_TECHNOLOGIES_INC = 5974\nVENDOR_ID_TELCHEMY = 5975\nVENDOR_ID_RED_HILL_NETWORKS = 5976\nVENDOR_ID_UNIVERSITY_OF_TEXAS_AT_DALLAS_UTD = 5977\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_NORTHRIDGE = 5978\nVENDOR_ID_CSCARE_INC = 5979\nVENDOR_ID_CSSOFTWARE_INC = 5980\nVENDOR_ID_MEDIA_TRANSFER_AG = 5981\nVENDOR_ID_INFOR = 5982\nVENDOR_ID_DESCARTES_SYSTEMS_GROUP_INC = 5983\nVENDOR_ID_CEDERE_CORPORATION = 5984\nVENDOR_ID_BIOCOR_LLC = 5985\nVENDOR_ID_VPACKET_COMMUNICATIONS_INC = 5986\nVENDOR_ID_PACIFIC_BROADBAND_COMMUNICATIONS = 5987\nVENDOR_ID_ESUTEL = 5988\nVENDOR_ID_GOCOM = 5989\nVENDOR_ID_INFORMZASCHITA = 5990\nVENDOR_ID_NTOWN_COMMUNICATIONS_INC = 5991\nVENDOR_ID_EPOWER_SOLUTIONS_INC = 5992\nVENDOR_ID_TERABEAM_NETWORKS = 5993\nVENDOR_ID_ARCOM_CONTROL_SYSTEMS = 5994\nVENDOR_ID_EVERYPATH_INC = 5995\nVENDOR_ID_COMMUNICATION_WEAVER_CO_LTD = 5996\nVENDOR_ID_TEAMTRONIC_PSCRL = 5997\nVENDOR_ID_CITI_DIC_IT_CO_LTD = 5998\nVENDOR_ID_SCITEL_INDUSTRIEBERATUNGS_GMBH = 5999\nVENDOR_ID_CES_COMPUTER_SOLUTIONS_INC = 6000\nVENDOR_ID_MEMORIAL_SLOAN_KETTERING_CANCER_CENTER = 6001\nVENDOR_ID_IMPRESSE_CORPORATION = 6002\nVENDOR_ID_JASMINE_NETWORKS_INC = 6003\nVENDOR_ID_SYSMATE_CO_LTD = 6004\nVENDOR_ID_CITY_OF_SYDNEY = 6005\nVENDOR_ID_THE_SCHLEUTKER_SITES = 6006\nVENDOR_ID_REDUX_COMMUNICATIONS_LTD = 6007\nVENDOR_ID_LYNXUS_INC = 6008\nVENDOR_ID_GCS_GLOBAL_COMMUNICATION_SERVICES_GMBH = 6009\nVENDOR_ID_SERVICECO = 6010\nVENDOR_ID_CINTA_CORPORATION = 6011\nVENDOR_ID_PINGPONGCOM = 6012\nVENDOR_ID_TIETURI = 6013\nVENDOR_ID_NATIONAL_LIBRARY_OF_MEDICINE = 6014\nVENDOR_ID_CHICAGO_BOARD_OPTIONS_EXCHANGE = 6015\nVENDOR_ID_TECHNAUTS = 6016\nVENDOR_ID_G2X_SOFTWARE = 6017\nVENDOR_ID_EXCEL_MEDICAL_ELECTRONICS_INC = 6018\nVENDOR_ID_SIMPLIFIED_TELESYS_INC = 6019\nVENDOR_ID_LUTRIS_TECHNOLOGIES = 6020\nVENDOR_ID_ARCADIAN_WIRELESS = 6021\nVENDOR_ID_DFKI_GMBH = 6022\nVENDOR_ID_STEELE_RAYMOND_SOLICITORS = 6023\nVENDOR_ID_SCANNEX_ELECTRONICS_LTD = 6024\nVENDOR_ID_ADVANCED_NETWORK_SOLUTIONS_SPA = 6025\nVENDOR_ID_US_ARMY_STRICOM = 6026\nVENDOR_ID_FORCE10_NETWORKS_INC = 6027\nVENDOR_ID_ODSI_COALITION = 6028\nVENDOR_ID_EXACTISCOM = 6029\nVENDOR_ID_FLUKE_ELECTRONICS = 6030\nVENDOR_ID_COMPUTER_PROBLEM_SOLVING = 6031\nVENDOR_ID_STAINLESS_STEEL_NETWORKS = 6032\nVENDOR_ID_E_TALK_CORPORATION = 6033\nVENDOR_ID_BROADJUMP = 6034\nVENDOR_ID_SENSIS_CORPORATION = 6035\nVENDOR_ID_BOSE_CORPORATION = 6036\nVENDOR_ID_EDGE_NETWORKS_CORP = 6037\nVENDOR_ID_NETWHISTLECOM = 6038\nVENDOR_ID_RESSCOM_COMPUTERS_AND_COMMUNICATIONS = 6039\nVENDOR_ID_UNIVERSITY_OF_KALMAR = 6040\nVENDOR_ID_KOKUA_COMMUNICATIONS = 6041\nVENDOR_ID_SOUTHEASTERN_ALUMINUM_PRODUCTS_INC = 6042\nVENDOR_ID_ASTROTERRA_CORPORATION = 6043\nVENDOR_ID_POYNTZ_INC = 6044\nVENDOR_ID_SYNAPTIQUE_INFORMATION_TECHNOLOGIE = 6045\nVENDOR_ID_NEAR2_COMMUNICATIONS_INC = 6046\nVENDOR_ID_FLORIDA_TEACHING_PROFESSION_NEA = 6047\nVENDOR_ID_EXYST = 6048\nVENDOR_ID_HITACHI_INFORMATION_SYSTEMS_LTD = 6049\nVENDOR_ID_GAMATRONIC_ELECTRONIC_INDUSTRIES_LTD = 6050\nVENDOR_ID_AMERITRADE = 6051\nVENDOR_ID_NOVASONICS = 6052\nVENDOR_ID_EREDYNE_CORPORATION = 6053\nVENDOR_ID_ACCESS360 = 6054\nVENDOR_ID_LEES_COMMUNICATION = 6055\nVENDOR_ID_RENSSELAER_POLYTECHNIC_INSTITUTE = 6056\nVENDOR_ID_APPNET = 6057\nVENDOR_ID_HAVAS_INTERACTIVE = 6058\nVENDOR_ID_ADNOVUM_INFORMATIK_AG = 6059\nVENDOR_ID_ISP_SYSTEMS_PTY_LTD = 6060\nVENDOR_ID_NETUITIVE_INC = 6061\nVENDOR_ID_TEKELEC_TEMEX = 6062\nVENDOR_ID_AXENT_TECHNOLOGIES_INCUTAH = 6063\nVENDOR_ID_JK_MICROSYSTEMS = 6064\nVENDOR_ID_ZUNIVERSITYCOM = 6065\nVENDOR_ID_OCCAM_NETWORKS_INC = 6066\nVENDOR_ID_ADAPCOM_INC = 6067\nVENDOR_ID_KC_MARCHING = 6068\nVENDOR_ID_BLOCWARE_INC = 6069\nVENDOR_ID_AVIV_INFOCOM_CO = 6070\nVENDOR_ID_SIGMA_INFORMATIQUE = 6071\nVENDOR_ID_PLAN_SOFTWARE_GMBH = 6072\nVENDOR_ID_BUSINESS_GLOBAL_SYSTEMS = 6073\nVENDOR_ID_CENOSIS_INC = 6074\nVENDOR_ID_SIEMENS_AG_2 = 6075\nVENDOR_ID_TRELLISOFT_INC = 6076\nVENDOR_ID_CALL_NET_TECHNOLOGY_SERVICES_INC = 6077\nVENDOR_ID_CYBERINTELLIGENT_TECHNOLOGIES = 6078\nVENDOR_ID_APPOCONNECTCOM = 6079\nVENDOR_ID_BRIDGEWAVE_COMMUNICATIONS = 6080\nVENDOR_ID_NEXSI = 6081\nVENDOR_ID_ARES = 6082\nVENDOR_ID_AATR = 6083\nVENDOR_ID_PRISMEDIA_NETWORKS_INC = 6084\nVENDOR_ID_HYPERGENE_AB = 6085\nVENDOR_ID_NEW_YORK_LIFE_INSURANCE_CO = 6086\nVENDOR_ID_MENTAT_INC = 6087\nVENDOR_ID_OPNIX_INC = 6088\nVENDOR_ID_LASTMILE = 6089\nVENDOR_ID_DESPATCHBOX = 6090\nVENDOR_ID_EPKI = 6091\nVENDOR_ID_AGILLION_CORPORATION = 6092\nVENDOR_ID_TESSAG_AG = 6093\nVENDOR_ID_WAPCOM = 6094\nVENDOR_ID_KHALED_FAHMI = 6095\nVENDOR_ID_NETSECURE_SOFTWARE = 6096\nVENDOR_ID_STATE_OF_MICHIGAN = 6097\nVENDOR_ID_AVANTGO = 6098\nVENDOR_ID_INTELLIDEN_INCORPORATED = 6099\nVENDOR_ID_COVALENT_TECHNOLOGIES_INC = 6100\nVENDOR_ID_TREND_MICRO_INC = 6101\nVENDOR_ID_INTEGRATED_RESEARCH_LTD = 6102\nVENDOR_ID_AL_RASHEED = 6103\nVENDOR_ID_COSMOBRIDGE_CO_LTD = 6104\nVENDOR_ID_CENTER_VLADE_ZA_INFORMATIKO = 6105\nVENDOR_ID_MAHARAJA_INFOSYS_LIMITED = 6106\nVENDOR_ID_IDN_TELECOM_INC = 6107\nVENDOR_ID_INSURANCE_AUTO_AUCTIONS = 6108\nVENDOR_ID_ADIC = 6109\nVENDOR_ID_ATRICA = 6110\nVENDOR_ID_WORLDSPORT_NETWORKS_LTD = 6111\nVENDOR_ID_XINETRON_CO_LTD = 6112\nVENDOR_ID_DATEK_TELECOM_SA = 6113\nVENDOR_ID_PROSYST_SOFTWARE_AG = 6114\nVENDOR_ID_OPEN_INTERACTIVE_LIMITED = 6115\nVENDOR_ID_MEDTEGRITY_INC = 6116\nVENDOR_ID_FIBER_NETWORK_ENGINEERING = 6117\nVENDOR_ID_QUINTILES = 6118\nVENDOR_ID_IPWORKS_INC = 6119\nVENDOR_ID_NXTV = 6120\nVENDOR_ID_EXCITEHOME_E_BUSINESS_SERVICES = 6121\nVENDOR_ID_MOVER_SPA = 6122\nVENDOR_ID_NATIONAL_INSTITUTE_OF_TELECOMMUNICATIONS = 6123\nVENDOR_ID_SANE_SOLUTIONS_LLC = 6124\nVENDOR_ID_ACERFI_MICRONICSFRANCOIS_REGIS_K = 6125\nVENDOR_ID_EPICREALM = 6126\nVENDOR_ID_LAPLINKCOM = 6127\nVENDOR_ID_WIRELESS_PLANET = 6128\nVENDOR_ID_BROMAX_COMMUNICATION_INC = 6129\nVENDOR_ID_CVI = 6130\nVENDOR_ID_STARMEDIA_MOBILE = 6131\nVENDOR_ID_LVL7_SYSTEMS_INC = 6132\nVENDOR_ID_DEAD_FISH_TECHNOLOGIES = 6133\nVENDOR_ID_TRIONIQ = 6134\nVENDOR_ID_CHUBU_TELECOMMUNICATIONS_CO_INC = 6135\nVENDOR_ID_IDEALHOSTCOM = 6136\nVENDOR_ID_UNIVERSITY_OF_CANTERBURY = 6137\nVENDOR_ID_TRASYS = 6138\nVENDOR_ID_HEALTHCARE_SPECIALISTS_INC = 6139\nVENDOR_ID_ENIKIA_INCORPORATED = 6140\nVENDOR_ID_WORLD_WIDE_PACKETS = 6141\nVENDOR_ID_TF1 = 6142\nVENDOR_ID_EVENTLOGIC = 6143\nVENDOR_ID_SUNTECH_SP_ZOO = 6144\nVENDOR_ID_CENDIO_SYSTEMS_AB = 6145\nVENDOR_ID_WHIRLPOOL_CORPORATION = 6146\nVENDOR_ID_ALLIEGIANCE_TELECOM = 6147\nVENDOR_ID_CIDERA_INC = 6148\nVENDOR_ID_LONDON_SCHOOL_OF_ECONOMICS = 6149\nVENDOR_ID_OPEN_NETWORKS_ENGINEERING_LTD = 6150\nVENDOR_ID_COPYPRINT_SL = 6151\nVENDOR_ID_SENDMAIL_INC = 6152\nVENDOR_ID_JOLT_LTD = 6153\nVENDOR_ID_SONERIS_ENGINEERING = 6154\nVENDOR_ID_FIREBIT_LTD = 6155\nVENDOR_ID_TTC_TESLA_TELEKOMUNIKACE_LTD = 6156\nVENDOR_ID_ICCRI_BANCA_FEDERALE_EUROPEA_SPA = 6157\nVENDOR_ID_NAGUS = 6158\nVENDOR_ID_UNIVERSITY_OF_IOWA = 6159\nVENDOR_ID_AFFINITY_TECHNOLOGY_GROUP = 6160\nVENDOR_ID_ONFIBER_COMMUNICATIONS_INC = 6161\nVENDOR_ID_SOLID_DATA_SYSTEMS = 6162\nVENDOR_ID_INARA_NETWORKS_INC = 6163\nVENDOR_ID_KINVA_NETWORK_SYSTEM_LTD = 6164\nVENDOR_ID_PORTWELL_INC = 6165\nVENDOR_ID_INTERACTIVE_ENTERPRISE = 6166\nVENDOR_ID_SPHINX = 6167\nVENDOR_ID_BANCO_DO_BRASIL_S_A = 6168\nVENDOR_ID_SERENDIPITY_SIMPLEX = 6169\nVENDOR_ID_PARTMINER_INC = 6170\nVENDOR_ID_KIDATA_AG = 6171\nVENDOR_ID_WORLDWIDE_ENTREPRENEURIC_ENTERPRISES_INC = 6172\nVENDOR_ID_FISHER_PAYKEL_INDUSTRIES_LIMITED = 6173\nVENDOR_ID_FUSIONX = 6174\nVENDOR_ID_PINES_OF_WOODEDGE = 6175\nVENDOR_ID_VIPCOM = 6176\nVENDOR_ID_BLITZ_INFORMATION_TECHNOLOGIES_BERHAD = 6177\nVENDOR_ID_NTT_ADVANCED_TECHNOLOGY_CORPORATION = 6178\nVENDOR_ID_RM_EDIZIONI_SRL = 6179\nVENDOR_ID_CANDOCOM = 6180\nVENDOR_ID_CREATIVE_LOGIC_CORPORATION = 6181\nVENDOR_ID_ENCORE_ELECTRONICS_INC = 6182\nVENDOR_ID_SHAREMEDIA = 6183\nVENDOR_ID_MITSUI_CO_LTD = 6184\nVENDOR_ID_GHENT_UNIVERSITY = 6185\nVENDOR_ID_SPACE_CYBERLINK_INC = 6186\nVENDOR_ID_DARTMOUTH_HITCHCOCK_MEDICAL_CENTER = 6187\nVENDOR_ID_UNIVERSITY_OF_MASSACHUSETTS_LOWELL = 6188\nVENDOR_ID_ATOS_INFORMATION_TECHNOLOGY_GMBH_TRUSTCENTER = 6189\nVENDOR_ID_NETWORK365_LTD = 6190\nVENDOR_ID_PLASMON_INC = 6191\nVENDOR_ID_ENVIRONMENTAL_MONITORING_SOLUTIONS = 6192\nVENDOR_ID_CPL_SYSTEMS_LTD = 6193\nVENDOR_ID_NETCALIBRATE_INC = 6194\nVENDOR_ID_ADVANCED_COMMUNICATION_RESEARCH = 6195\nVENDOR_ID_ATLANTEC_ENTERPRISE_SOLUTIONS_GMBH = 6196\nVENDOR_ID_ARCORDIA_JP_MORGAN_CHASE = 6197\nVENDOR_ID_EASTERN_NAZARENE_COLLEGE = 6198\nVENDOR_ID_NYHERJI_HF = 6199\nVENDOR_ID_DNPG = 6200\nVENDOR_ID_ASENTI_INC = 6201\nVENDOR_ID_NIMBLE_INC = 6202\nVENDOR_ID_TOPSPIN_NETWORKS = 6203\nVENDOR_ID_SIBS_SOCIEDADE_INTERBANCARIA_DE_SERVICOS_SA = 6204\nVENDOR_ID_LKC_TECHNOLOGY = 6205\nVENDOR_ID_ECRITICAL_INC = 6206\nVENDOR_ID_THE_POLISHED_GROUP_SA = 6207\nVENDOR_ID_ENTERPRISE_INTERNET_SERVICES_LIMITED = 6208\nVENDOR_ID_THE_OPEN_UNIVERSITY = 6209\nVENDOR_ID_MAYAH_COMMUNICATIONS_GMBH = 6210\nVENDOR_ID_MUREX = 6211\nVENDOR_ID_XM_SATELLITE_RADIO_INC = 6212\nVENDOR_ID_REDLINE_NETWORKS_INC = 6213\nVENDOR_ID_SUREFIRE_COMMERCE_INC = 6214\nVENDOR_ID_STREAMING21_INC = 6215\nVENDOR_ID_CI_TECHNOLOGIES = 6216\nVENDOR_ID_NGKINDSOFTLTD = 6217\nVENDOR_ID_SCAN_COIN = 6218\nVENDOR_ID_ISKRA_SYSEN_DD = 6219\nVENDOR_ID_CYBER_INTERNET_SERVICES = 6220\nVENDOR_ID_BAE_SYSTEMS_CNIR = 6221\nVENDOR_ID_STSN_INC = 6222\nVENDOR_ID_CDS_TECHNOLOGIES = 6223\nVENDOR_ID_ROXYCOM = 6224\nVENDOR_ID_BROADCAST_TOWERS = 6225\nVENDOR_ID_BARIELDS_INTERNET_PROVIDER_SERVICE = 6226\nVENDOR_ID_RESOLVE_ENGINEERING_PTY_LTD = 6227\nVENDOR_ID_ENGINEERING_CENTER_FOR_INFORMATION_SECURITYCHINESE_ACADAMY_OF_SCIENCES = 6228\nVENDOR_ID_TANGO_04_COMPUTING_GROUP = 6229\nVENDOR_ID_SITE_SKUNKWORKS = 6230\nVENDOR_ID_FIDUCIARY_AUTOMATION = 6231\nVENDOR_ID_CORINEX_GLOBAL_CORP = 6232\nVENDOR_ID_UUNET_EMEA = 6233\nVENDOR_ID_PAUL_ABRAHAMS_SCD = 6234\nVENDOR_ID_NAWILSONCOM = 6235\nVENDOR_ID_CRAYFISH_COLTD = 6236\nVENDOR_ID_NETAGE_SOLUTIONS_GMBH_NETZWERKLSUNGEN = 6237\nVENDOR_ID_QUEEN_MARY_UNIVERSITY_OF_LONDON = 6238\nVENDOR_ID_TECHNOTREND_AG = 6239\nVENDOR_ID_BRYTTAN_LTD = 6240\nVENDOR_ID_CALVIN_COLLEGE = 6241\nVENDOR_ID_POSSM_TECHNOLOGIES = 6242\nVENDOR_ID_WEBER_ENTERPRISE = 6243\nVENDOR_ID_PDR_SAGN_PUBLISHING = 6244\nVENDOR_ID_CIRCLEX_LIMITED = 6245\nVENDOR_ID_MYTHOLOGICAL_SOLUTIONS = 6246\nVENDOR_ID_COMTECH_EFDATA_CORPORATION = 6247\nVENDOR_ID_ATECS_DEMATIC = 6248\nVENDOR_ID_HCL_TECHNOLOGIES_LTD = 6249\nVENDOR_ID_PEPSICO_BUSINESS_SOLUTIONS_GROUP_PBSG = 6250\nVENDOR_ID_ATOGA_SYSTEMS_INC = 6251\nVENDOR_ID_SRVLOCORG = 6252\nVENDOR_ID_IPSEAL_INC = 6253\nVENDOR_ID_TIMEVISION_INC = 6254\nVENDOR_ID_COMMERCE_ONC_INC = 6255\nVENDOR_ID_SOUTHWEST_COMMUNICATIONS_INSTITUTE = 6256\nVENDOR_ID_DISAPPEARING_INC = 6257\nVENDOR_ID_IWATSU_ELECTRIC_CO_LTD = 6258\nVENDOR_ID_SOHONET_LIMITED = 6259\nVENDOR_ID_MAKU_INFORMATIONSTECHNIK_GMBH = 6261\nVENDOR_ID_IMC_COMMUNICATIONS = 6262\nVENDOR_ID_AVSTAR_SYSTEMS_LLC = 6263\nVENDOR_ID_OPENNETWORK_TECHNOLOGIES_2 = 6264\nVENDOR_ID_GOCEKCOM = 6265\nVENDOR_ID_EVEREST_ECOMMERCE_INC_2 = 6266\nVENDOR_ID_MUSHTAQ_SONS = 6267\nVENDOR_ID_EVISTEL = 6268\nVENDOR_ID_DIGIMATION = 6269\nVENDOR_ID_IASIAWORKS = 6270\nVENDOR_ID_NSC_2 = 6271\nVENDOR_ID_KPNQWEST_FINLAND = 6272\nVENDOR_ID_WEIR_CONSULTING_LTD = 6273\nVENDOR_ID_DRAEL_COMPUTER_CORPORATION = 6274\nVENDOR_ID_HOB_GMBH_CO_KG_HOB_GERMANY_2 = 6275\nVENDOR_ID_MAHINDRA_BRITISH_TELECOM_LIMITED = 6276\nVENDOR_ID_FEDERACIN_DE_ORGANIZACIONES_PRIVADAS_DE_DESARROLLO_FOPRIDEH = 6277\nVENDOR_ID_INVISIONCOM_INC = 6278\nVENDOR_ID_VISIBLE_MARKETS_INC = 6279\nVENDOR_ID_COREON_INC = 6280\nVENDOR_ID_JINGLE_CATS_MUSIC = 6281\nVENDOR_ID_SDC_COMMUNICATIONS_LTD = 6282\nVENDOR_ID_CITY_NET_TECHNOLOGY_INC = 6283\nVENDOR_ID_WIRELESS_NETWORKS_INC = 6284\nVENDOR_ID_CROSSPORT_SYSTEMS = 6285\nVENDOR_ID_ONE_TECH_TELECOM_COLTD = 6286\nVENDOR_ID_NEXTENSO = 6287\nVENDOR_ID_EUSKALTEL_SA = 6288\nVENDOR_ID_ADAPCOM_INC_2 = 6289\nVENDOR_ID_LIGHTSAND_COMMUNICATIONS_INC = 6290\nVENDOR_ID_BATES_COLLEGE = 6291\nVENDOR_ID_LEADERSHIP_TECHNOLOGIES_INC = 6292\nVENDOR_ID_KASENNA_INC = 6293\nVENDOR_ID_ACTIVE_TELCO = 6294\nVENDOR_ID_WILHOYT_INDUSTRIES = 6295\nVENDOR_ID_DASAN_COLTD = 6296\nVENDOR_ID_ENELIT = 6297\nVENDOR_ID_MP3COM = 6298\nVENDOR_ID_SUNY_CORTLAND = 6299\nVENDOR_ID_KARL_MILLER = 6300\nVENDOR_ID_PACKET_DYNAMICS_LTD = 6301\nVENDOR_ID_EMERSON_ENERGY_SYSTEMS = 6302\nVENDOR_ID_CITYSPACE_LTD = 6303\nVENDOR_ID_FOGCITY = 6304\nVENDOR_ID_FLEXTRONICS_INTERNATIONAL = 6305\nVENDOR_ID_DARTWARE_LLC = 6306\nVENDOR_ID_IPANEMA_TECHNOLOGIES = 6307\nVENDOR_ID_CHOLUL = 6308\nVENDOR_ID_DAN_NIELSEN_CONSULTING = 6309\nVENDOR_ID_KAANBAAN_TECHNOLOGIES = 6310\nVENDOR_ID_GOMEZ_ADVISORS_INC = 6311\nVENDOR_ID_PELICAN_SECURITY_INC = 6312\nVENDOR_ID_INNOVACOM_INC = 6313\nVENDOR_ID_VILLAMONTAGE_SYSTEMS = 6314\nVENDOR_ID_COMISSO_PARA_COORDENAO_DO_PROJETO_SIVAM = 6315\nVENDOR_ID_BILL_FENNER = 6316\nVENDOR_ID_NETFOX = 6317\nVENDOR_ID_LESSWIRE_AG = 6318\nVENDOR_ID_CALDERA_SYSTEMS_INC = 6319\nVENDOR_ID_SIMONSTLCOM = 6320\nVENDOR_ID_CALIX_NETWORKS = 6321\nVENDOR_ID_ENTONE_TECHNOLOGIES_LTD = 6322\nVENDOR_ID_NEWCROSS_TECHNOLOGIES_INC = 6323\nVENDOR_ID_COOLALERTS_INC = 6324\nVENDOR_ID_HARMONIX_CORPORATION = 6325\nVENDOR_ID_LONGBOARD_INC = 6326\nVENDOR_ID_DREWS_TC = 6327\nVENDOR_ID_WIZWISE_TECHNOLOGY = 6328\nVENDOR_ID_INTERNET_BUSINESS_FACTORY = 6329\nVENDOR_ID_MICRODOT_COMPUTING_SERVICES = 6330\nVENDOR_ID_OPTIMATION_NEW_ZEALAND_LIMITED = 6331\nVENDOR_ID_FOUR_SEASONS_PRODUCE_INC = 6332\nVENDOR_ID_ACCORD_NETWORKS_LTD = 6333\nVENDOR_ID_BETRUSTED = 6334\nVENDOR_ID_ADROIT_CONTROLS = 6335\nVENDOR_ID_DIGITAL_FOUNTAIN = 6336\nVENDOR_ID_CRYTALIZ_INC = 6337\nVENDOR_ID_SPORTSHUDDLECOM = 6338\nVENDOR_ID_DIGITAL_CHINA_SHANGHAI_NETWORKS_LTD = 6339\nVENDOR_ID_OTTO_KIND = 6340\nVENDOR_ID_HARVARD_UNIVERSITY = 6341\nVENDOR_ID_HYPERCHIP_INC = 6342\nVENDOR_ID_YMCA_ENGLAND = 6343\nVENDOR_ID_HUNTER_TECHNOLOGY_INC = 6344\nVENDOR_ID_COMPUPRINT_SPA = 6345\nVENDOR_ID_DIMAT_SA = 6346\nVENDOR_ID_SIERRA_MONITOR_CORPORATION = 6347\nVENDOR_ID_LIQUID_DIGITAL_INFORMATION_SYSTEMS = 6348\nVENDOR_ID_TREEBLOSSOM_TECHNOLOGIES = 6349\nVENDOR_ID_BLUE_CROSS_BLUE_SHIELD_OF_MICHIGAN = 6350\nVENDOR_ID_SHAWN_SYSTEMS_INC = 6351\nVENDOR_ID_CIENA_CORPORATION_FORMERLY_CATENA_NETWORKS = 6352\nVENDOR_ID_AVISTO_SA = 6353\nVENDOR_ID_TELWAYS_COMMUNICATION_COLTD = 6354\nVENDOR_ID_SIPHER_INTERNET_TACHNOLOGY = 6355\nVENDOR_ID_INNOVATIVE_SOFTWARE_AG = 6356\nVENDOR_ID_B2_SYSTEMS_INC = 6357\nVENDOR_ID_UNIMARK_INC = 6358\nVENDOR_ID_CYVEILLANCE_INC = 6359\nVENDOR_ID_LIVEVAULT_CORPORATION = 6360\nVENDOR_ID_SIEMENS_BUILDING_TECHNOLOGIES_LTD = 6361\nVENDOR_ID_BAUMANN_TECHNOLOGIE = 6362\nVENDOR_ID_CYBERSOLUTIONS_GMBH = 6363\nVENDOR_ID_ANDRA_INFORMATIQUE = 6364\nVENDOR_ID_NOVAMEDIA_SISTEMAS_SL = 6365\nVENDOR_ID_KOREA_LINK = 6366\nVENDOR_ID_LINKABIT_A_TITAN_SYSTEMS_COMPANY = 6367\nVENDOR_ID_SCHMID_TELECOM_AG = 6368\nVENDOR_ID_LEXI_COMP_INC = 6369\nVENDOR_ID_FIRST_USA_BANK = 6370\nVENDOR_ID_MINERVA_NETWORKS_INC = 6371\nVENDOR_ID_KRESA_RANCH = 6372\nVENDOR_ID_4DL_INC = 6373\nVENDOR_ID_CECI = 6374\nVENDOR_ID_CHINA_ENGINEERING_CONSULTANTSINC = 6375\nVENDOR_ID_PDVSA = 6376\nVENDOR_ID_OPENPAGES_INC = 6377\nVENDOR_ID_LANIT = 6378\nVENDOR_ID_SERVGATE_TECHNOLOGIES_CANADA_INC = 6379\nVENDOR_ID_ISDNET = 6380\nVENDOR_ID_BURSTCOM = 6381\nVENDOR_ID_SAGA_SOFTWARE_INCORPORATED = 6382\nVENDOR_ID_OC = 6383\nVENDOR_ID_VS_MULTIMEDIA_SA = 6384\nVENDOR_ID_PFIZER = 6385\nVENDOR_ID_SATURN_TECHNOLOGIES = 6386\nVENDOR_ID_BIG_BAND_NETWORKS_LTD = 6387\nVENDOR_ID_TELERELAY = 6388\nVENDOR_ID_COM_DEV_INTERNATIONAL = 6389\nVENDOR_ID_DBCORP_INFORMATION_SYSTEMS_INC = 6390\nVENDOR_ID_XTREMESOFT_INC = 6391\nVENDOR_ID_CHIARO_NETWORKS_LTD = 6392\nVENDOR_ID_HALIPLEX_PTY_LTD = 6393\nVENDOR_ID_SKELTON_CONSULTING_GMBH = 6394\nVENDOR_ID_PROSALDO_SOFTWARE_BV = 6395\nVENDOR_ID_ABSOLUTE_WEBSITE_SOLUTIONS = 6396\nVENDOR_ID_NAYNA_NETWORKS_INC = 6397\nVENDOR_ID_LINDNER_PELC_CONSULT_GMBH = 6398\nVENDOR_ID_EDRICH_INTEGRATION = 6399\nVENDOR_ID_MILLENUX_GMBH = 6400\nVENDOR_ID_JTI_OF_GEORGIA = 6401\nVENDOR_ID_OPTEL_GES_FR_LASERTECHNIK_UND_ELEKTRONIK_MBH = 6402\nVENDOR_ID_UNIVERSIDAD_BLAS_PASCAL = 6403\nVENDOR_ID_ECRESO_FORMERLY_ECRESO_RFTS_BROADCAST = 6404\nVENDOR_ID_ACTIV_AUSTRALIA = 6405\nVENDOR_ID_NEOMAR = 6406\nVENDOR_ID_BIT_SERVICES_GMBH = 6407\nVENDOR_ID_MIKOM_GMBH = 6408\nVENDOR_ID_MONDIAL_ASSISTANCE_LIMITED = 6409\nVENDOR_ID_ZONEWORX_INC = 6410\nVENDOR_ID_OVERLAND_STORAGE_INC_FORMERLY_QUANTUM_CORP_SNAP_DIVISION = 6411\nVENDOR_ID_HIDDENMIND_TECHNOLOGY = 6412\nVENDOR_ID_IS_ASSOCIATES_INC = 6413\nVENDOR_ID_EMBRY_RIDDLE_UNIVERSITY = 6414\nVENDOR_ID_CASPIAN_NETWORKS_INC = 6415\nVENDOR_ID_SOLUTIONZ_PTY_LTD_AUSTRALIA = 6416\nVENDOR_ID_VICTORIAN_AUTOMOBILE_CHAMBER_OF_COMMERCE = 6417\nVENDOR_ID_THE_TEMPLAR_CORPORATION = 6418\nVENDOR_ID_PRO_BEL_LTD = 6419\nVENDOR_ID_IN_MX = 6420\nVENDOR_ID_H_M_CUSTOMS_EXCISE = 6421\nVENDOR_ID_BT_2 = 6422\nVENDOR_ID_OBJECTSPACE_INC = 6423\nVENDOR_ID_VIAWEST_INTERNET_SERVICES = 6424\nVENDOR_ID_BRANCH_SYSTEMS = 6425\nVENDOR_ID_E_APPLIANCE_CORPORATION = 6426\nVENDOR_ID_LOCUS_DIALOGUE = 6427\nVENDOR_ID_T_ONLINE_INTERNATIONAL_AG = 6428\nVENDOR_ID_ALTO = 6429\nVENDOR_ID_ERICSSON_CONSULTING_GMBH = 6430\nVENDOR_ID_BROADSOFT_INC = 6431\nVENDOR_ID_ORBLYNX_INC = 6432\nVENDOR_ID_EXCELNET_INC = 6433\nVENDOR_ID_WEBMD = 6434\nVENDOR_ID_HOLISTIX_INC = 6435\nVENDOR_ID_WAPME_SYSTEMS_AG = 6436\nVENDOR_ID_KATHREIN_WERKE_KG = 6437\nVENDOR_ID_MKNET_ADVIES = 6438\nVENDOR_ID_NEXTRET_SL = 6439\nVENDOR_ID_TRADECAST_LTD = 6440\nVENDOR_ID_I2_TECHNOLOGIES_INC = 6441\nVENDOR_ID_TWCT_DBA_DAUGHTERS_AND_DAD = 6442\nVENDOR_ID_OUT_OF_OUR_MINDS = 6443\nVENDOR_ID_GEARHEAD_GROUP = 6444\nVENDOR_ID_SPORTSPLANET2000 = 6445\nVENDOR_ID_GATON_TECHNOLOGIES_LTD = 6446\nVENDOR_ID_SYNAXIA_NETWORKS = 6447\nVENDOR_ID_DIGIVISION_TECH = 6448\nVENDOR_ID_COMODO_CA_LTD = 6449\nVENDOR_ID_IDSEC_LIMITED = 6450\nVENDOR_ID_MYSTICAL_CREATIONS = 6451\nVENDOR_ID_ADVANCED_NETWORK_SOLUTIONS_INC = 6452\nVENDOR_ID_CORE_COMMUNICATIONS_CO_LTD = 6453\nVENDOR_ID_POSTEL_SERVICES = 6454\nVENDOR_ID_TECHNOLOGY_THESAURUS_CORP = 6455\nVENDOR_ID_NETDEFENCE_CO_LIMITED = 6456\nVENDOR_ID_EUREKA_SOFT = 6457\nVENDOR_ID_GPR_SISTEMAS_LTDA = 6458\nVENDOR_ID_LINFIELD_COLLEGE = 6459\nVENDOR_ID_UCLICK = 6460\nVENDOR_ID_CENTER_FOR_INTERNET_RESEARCH = 6461\nVENDOR_ID_FREIHEITCOM = 6462\nVENDOR_ID_VOCALDATA_INC = 6463\nVENDOR_ID_STEVENS_INSTITUTE_OF_TECHNOLOGY_OIT = 6464\nVENDOR_ID_CACHEON_INC = 6465\nVENDOR_ID_THE_DEVIL_YOU_SAY = 6466\nVENDOR_ID_LAND_OF_LINKING = 6467\nVENDOR_ID_PATENT_OFF = 6468\nVENDOR_ID_KARMA_KAHN = 6469\nVENDOR_ID_WERE_NO_DUMMIES = 6470\nVENDOR_ID_CON_TEMPORARIES = 6471\nVENDOR_ID_ANTIBALLISTIC = 6472\nVENDOR_ID_HALLS_OF_IVY = 6473\nVENDOR_ID_WIFFENPOOF = 6474\nVENDOR_ID_HOME_IS_THE_HUNTER = 6475\nVENDOR_ID_THE_CRAFT_OF_ELVES = 6476\nVENDOR_ID_I_WAS_MISINFORMED = 6477\nVENDOR_ID_SHOT_TO_SHINGLES = 6478\nVENDOR_ID_RIGHT_HAND_TWIST = 6479\nVENDOR_ID_SOLOMON_TECH_CORP = 6480\nVENDOR_ID_MAGISTRAL_LTD = 6481\nVENDOR_ID_ICSYNERGY = 6482\nVENDOR_ID_CAPTUS_NETWORKS = 6483\nVENDOR_ID_CAMPUS_CRUSADE_FOR_CHRIST_INC = 6484\nVENDOR_ID_SPATIAL_TECHNOLOGIES = 6485\nVENDOR_ID_ALCATEL_LUCENT_ENTERPRISE_FORMERLY_ALCATEL = 6486\nVENDOR_ID_YOUSYNC = 6487\nVENDOR_ID_TALENTSTORM_ENTERPRISES = 6488\nVENDOR_ID_SIEMENS_CERBERUS = 6489\nVENDOR_ID_DETEMOBIL_DEUTSCHE_TELEKOM_MOBILNET_GMBH = 6490\nVENDOR_ID_CYTEK_MEDIA_SYSTEMS_INC = 6491\nVENDOR_ID_PHYVE = 6492\nVENDOR_ID_COMTRUST = 6493\nVENDOR_ID_KRAFT_UND_PARTNER_GMBH = 6494\nVENDOR_ID_SEEDRAGON_SOFTWARE = 6495\nVENDOR_ID_COTTONS_CAR_SUPERSTORE = 6496\nVENDOR_ID_NETEYE_SOLUTIONS = 6497\nVENDOR_ID_MAINTENANCE_ONE = 6498\nVENDOR_ID_EKITCOM_PTY_LTD = 6499\nVENDOR_ID_VA_LINUX_SYSTEMS = 6500\nVENDOR_ID_MACRO_4 = 6501\nVENDOR_ID_REFAT = 6502\nVENDOR_ID_NETGEM = 6503\nVENDOR_ID_NAVINI_NETWORKS = 6504\nVENDOR_ID_TARGUSINFO = 6505\nVENDOR_ID_LIVEWIRE_COMMUNICATIONS_INC = 6506\nVENDOR_ID_OPTIMIGHT_COMMUNICATIONS_INC = 6507\nVENDOR_ID_SHANGHAI_DIGIVISION_TECHNOLOGY_COLTD = 6508\nVENDOR_ID_ANTRIM_STUDIOS_AND_SOFTWARE_CELLAR = 6509\nVENDOR_ID_PIONEER_CORPORATION = 6510\nVENDOR_ID_TELCOM_TECHNOLOGY = 6511\nVENDOR_ID_FAMTEK_PROFESSIONAL_SERVICES_INC = 6512\nVENDOR_ID_WHALE_COMMUNICATIONS = 6513\nVENDOR_ID_INNOVATIVE_SYSTEMS_LLC = 6514\nVENDOR_ID_ZVOLVE_SYSTEMS_INC = 6515\nVENDOR_ID_COMPREHENSIVE_TEST_BAN_TREATY_ORGANIZATION = 6516\nVENDOR_ID_FLOWSERVER = 6517\nVENDOR_ID_SYSTEMS_SOLUTIONS_OF_THE_SOUTHERN_TIER_INC = 6518\nVENDOR_ID_SABRE_INC_SABRE_BTS = 6519\nVENDOR_ID_DOT_HILL_SYSTEMS_3 = 6520\nVENDOR_ID_CHAINLINK_TECHNOLOGIES = 6521\nVENDOR_ID_CV_CRYPTOVISION_GMBH = 6522\nVENDOR_ID_BILBOKO_TRADING = 6523\nVENDOR_ID_GREENBYTES_GMBH = 6524\nVENDOR_ID_JASMINE_NETWORKS_INC_2 = 6525\nVENDOR_ID_WINDWARD_CONSULTING_GROUP = 6526\nVENDOR_ID_ALCATEL_LUCENT_FORMERLY_PANTHERA_NETWORKS_INC = 6527\nVENDOR_ID_SOURCE_ONE = 6528\nVENDOR_ID_BUNDESAMT_FR_SICHERHEIT_IN_DER_INFORMATIONSTECHNIK = 6529\nVENDOR_ID_2N_SPOL_S_RO = 6530\nVENDOR_ID_TEAMWORK_CONSULTING = 6531\nVENDOR_ID_NIOBRARA_RD_CORP = 6532\nVENDOR_ID_FACETIME_COMMUNICATIONS = 6533\nVENDOR_ID_HP = 6534\nVENDOR_ID_TECORE_INC = 6535\nVENDOR_ID_NETFORENSICSCOM = 6536\nVENDOR_ID_BROWN_UNIVERSITY = 6537\nVENDOR_ID_WINFORD_ENGINEERING = 6538\nVENDOR_ID_EDGEON_SYSTEMS_INC = 6539\nVENDOR_ID_ALAMO_PERSONAL_COMPUTERS_INC = 6540\nVENDOR_ID_TRANSINDIGO_INC = 6541\nVENDOR_ID_SLAMDUNK_NETWORKS = 6542\nVENDOR_ID_AMBELL = 6543\nVENDOR_ID_FIVESIGHT_TECHNOLOGIES = 6544\nVENDOR_ID_THINK_IT = 6545\nVENDOR_ID_ITOCHU_TECHNO_SOLUTIONS_CORPORATION = 6546\nVENDOR_ID_NETWORK_MANAGEMENT_SOLUTIONS_INC = 6547\nVENDOR_ID_WAVELENGTH_DIGITAL_LIMITED = 6548\nVENDOR_ID_AXXCELERA_BROADBAND_WIRELESS_2 = 6549\nVENDOR_ID_WEBLICON_TECHNOLOGIES_AG = 6550\nVENDOR_ID_HOTLINE_COMMUNICATIONS_LTD = 6551\nVENDOR_ID_VIRBUS_AG = 6552\nVENDOR_ID_GHAKO_FISHERIES_COMPANY_LIMITED = 6553\nVENDOR_ID_OPTIMA_TECHNOLOGIES_INC = 6554\nVENDOR_ID_DATAFOUNDRYNET_INC = 6555\nVENDOR_ID_SIGMA_NETWORKS = 6556\nVENDOR_ID_DOTROCKET_INC = 6557\nVENDOR_ID_SECURITY_TECHNOLOGIES_INC = 6558\nVENDOR_ID_USHA_COMMUNICATIONS_TECHNOLOGY = 6559\nVENDOR_ID_TELENERGY_H_GMBH = 6560\nVENDOR_ID_PSK_AG = 6561\nVENDOR_ID_NEXLAND_INC = 6562\nVENDOR_ID_TIMEBRIDGE_TECHNOLOGIES = 6563\nVENDOR_ID_GRADIENT_SOLUTIONS = 6564\nVENDOR_ID_JOHNS_HOPKINS_INSTITUTIONS = 6565\nVENDOR_ID_METROPOLITAN_LIFE_INSURANCE_PETER = 6566\nVENDOR_ID_KLIMKE_INDUSTRY_CONSULTING = 6567\nVENDOR_ID_PROMPTU_SYSTEMS_CORPORATION_FORMERLY_AGILETV = 6568\nVENDOR_ID_INVENTEC_CORPORATION = 6569\nVENDOR_ID_ACOMZ_NETWORKS_CORP = 6570\nVENDOR_ID_FUSION_IN_TECH_COLTD = 6571\nVENDOR_ID_NETLINKS_COLTD = 6572\nVENDOR_ID_PERVIGIL_INC = 6573\nVENDOR_ID_SYNOLOGY_INC = 6574\nVENDOR_ID_MARRIOTT_INTERNATIONAL_INC = 6575\nVENDOR_ID_PRIVADA_INC = 6576\nVENDOR_ID_INDURA_CORPORATION = 6577\nVENDOR_ID_REDWAVE_NETWORKS = 6578\nVENDOR_ID_MARU_NETWORKS_INC = 6579\nVENDOR_ID_OSS_SYSTEMS = 6580\nVENDOR_ID_EXRCITO_BRASILEIRO = 6581\nVENDOR_ID_SIGMA_SERVICES_SNGAL = 6582\nVENDOR_ID_BARONE_BUDGE_AND_DOMINICK = 6583\nVENDOR_ID_BUNDESRECHENZENTRUM_GMBH = 6584\nVENDOR_ID_W_PHONE_INC = 6585\nVENDOR_ID_GEOWORKSADAM = 6586\nVENDOR_ID_AIRVANA_INC = 6587\nVENDOR_ID_TIETOENATOR = 6588\nVENDOR_ID_IFA_ME_REGEL_UND_ELEKTROTECHNIK_GMBH_CO = 6589\nVENDOR_ID_KEIPHER_SOLUTIONS = 6590\nVENDOR_ID_HAANSOFT_INC = 6591\nVENDOR_ID_DARIN_VISION_CO = 6592\nVENDOR_ID_NEOCONSULTING_LLC = 6593\nVENDOR_ID_SHIJIN_CO = 6594\nVENDOR_ID_SA_MARTCOM = 6595\nVENDOR_ID_JULIE_JULIE = 6596\nVENDOR_ID_MESSAGEHERO_INC = 6597\nVENDOR_ID_CYBERTRON_NETWORK_SOLUTIONS = 6598\nVENDOR_ID_SILVER_BOW_COLTD = 6599\nVENDOR_ID_INTERNATIONAL_CHARITIES_DEP_OF_TAIHE_TRAVEL_AGENCYCHINA = 6600\nVENDOR_ID_IP_DYNAMICS_INC = 6601\nVENDOR_ID_SUNRISE_TELECOM_INC = 6602\nVENDOR_ID_VITESSE_SEMICONDUCTORS = 6603\nVENDOR_ID_TOSKY_MANAGEMENT_CONSULTING_COLTD = 6604\nVENDOR_ID_EUROCLEAR_OPERATIONS_CENTRE = 6605\nVENDOR_ID_PLATYPUS_TECHNOLOGY = 6606\nVENDOR_ID_RADIANT_NETWORKS_PLC = 6607\nVENDOR_ID_CIRCULAB = 6608\nVENDOR_ID_WESTERN_NEW_ENGLAND_COLLEGE = 6609\nVENDOR_ID_ADITYA_SYSTEMS = 6610\nVENDOR_ID_SIGMA_SERVICES_SENEGAL = 6611\nVENDOR_ID_JUNIPER_FINANCIAL_CORP = 6612\nVENDOR_ID_MILLIMETRIX_BROADBAND_NETWORKSLTD = 6613\nVENDOR_ID_TELECOM_TECHNOLOGIES_INC_2 = 6614\nVENDOR_ID_CLAIRVOYANT_SOFTWARE = 6615\nVENDOR_ID_LEXICA_LLC = 6616\nVENDOR_ID_MICROSTRATEGY = 6617\nVENDOR_ID_QUINTUM_TECHNOLOGIES_INC = 6618\nVENDOR_ID_GLOBAL_TELEMANN_SYSTEM_INC = 6620\nVENDOR_ID_DEPARTMENT_OF_FOREIGN_AFFAIRS_AND_TRADE_AUSTRALIA = 6621\nVENDOR_ID_SECONDOMILLENNIO = 6622\nVENDOR_ID_SERVIZI2000 = 6623\nVENDOR_ID_SAURO_PROSPERI = 6624\nVENDOR_ID_PVT_AS = 6625\nVENDOR_ID_TEKOTELECOM_SPA = 6626\nVENDOR_ID_TELEMATICA_INTERNATIONAL_BV = 6627\nVENDOR_ID_JUABEN = 6628\nVENDOR_ID_ULTICOM = 6629\nVENDOR_ID_ACCURIS_LTD = 6630\nVENDOR_ID_BOWLING_GREEN_STATE_UNIVERSITY = 6631\nVENDOR_ID_DST_CONTROLS = 6632\nVENDOR_ID_PERSONAL_GENIE_INC = 6633\nVENDOR_ID_UUNET = 6634\nVENDOR_ID_CENUS_TECHNOLOGIES_INC = 6635\nVENDOR_ID_INDIANA_DISTRICT_LCMS = 6636\nVENDOR_ID_RAINBOW_COMPUTER_WAREHOUSE = 6637\nVENDOR_ID_3WARE_INC = 6638\nVENDOR_ID_HHL = 6639\nVENDOR_ID_GMV_NETWORK_LLC = 6640\nVENDOR_ID_NETCO_SYSTEMS_INC = 6641\nVENDOR_ID_SCOMMTECH = 6642\nVENDOR_ID_IPR_SYSTEMS_PTY_LTD = 6643\nVENDOR_ID_OZAUTHORS_PTY_LTD = 6644\nVENDOR_ID_GFORCE_SYSTEMS = 6645\nVENDOR_ID_CHEVRON = 6646\nVENDOR_ID_PLANET = 6647\nVENDOR_ID_INTRAMON_LTD = 6648\nVENDOR_ID_NEWGRID_TECHNOLOGY_INC = 6649\nVENDOR_ID_THE_DISTRIBUTION_SYSTEMS_RESEARCH_INSTITUTE = 6650\nVENDOR_ID_FIREBONE = 6651\nVENDOR_ID_ID_KARTA = 6652\nVENDOR_ID_TYAN_COMPUTER_CORPORATION = 6653\nVENDOR_ID_CHIC_TECHNOLOGY_CORP = 6654\nVENDOR_ID_AGENETICS_INC = 6655\nVENDOR_ID_CAURIS = 6656\nVENDOR_ID_COURION_CORPORATION = 6657\nVENDOR_ID_KOSHYS_COMPUTER_ACADEMY_EDATHUA = 6658\nVENDOR_ID_ALISA = 6659\nVENDOR_ID_KERALADOTCOM = 6660\nVENDOR_ID_SPIKE_BROADBAND_SYSTEMS_INC = 6661\nVENDOR_ID_SESA_AG = 6662\nVENDOR_ID_JANEVA_INTERACTIVE = 6663\nVENDOR_ID_PRECIDIA_TECHNOLOGIES = 6664\nVENDOR_ID_ATREUS_SYSTEMS_CORP = 6665\nVENDOR_ID_INNOVAPHONE_GMBH = 6666\nVENDOR_ID_MEDIUMRAREJULIAN = 6667\nVENDOR_ID_TO_BE_OR_NOT = 6668\nVENDOR_ID_VIDEOTRON_LTEE = 6669\nVENDOR_ID_INTELLIGENT_INSTRUMENTATION = 6670\nVENDOR_ID_VERSONIX = 6671\nVENDOR_ID_PROSCEND_COMMUNICATIONS_INC = 6672\nVENDOR_ID_ALIGN_SYSTEMS_PTY_LTD = 6673\nVENDOR_ID_MERCATOR = 6674\nVENDOR_ID_NEWS_INTERACTIVE = 6675\nVENDOR_ID_SCIENCE_DYNAMICS_CORPORATION = 6676\nVENDOR_ID_ONELINE_AG = 6677\nVENDOR_ID_HYPERKNOWLEDGE_EUROPE = 6678\nVENDOR_ID_SURGIENT_NETWORKS_INC = 6679\nVENDOR_ID_SOUTHPAW = 6680\nVENDOR_ID_ALTEA_COMMUNICATIONS_INC = 6681\nVENDOR_ID_COMMSHOUSE_LTD = 6682\nVENDOR_ID_ALPHATRUST_CORPORATION = 6683\nVENDOR_ID_EORIGINAL_INC = 6684\nVENDOR_ID_INOVA_DIAGNOSTICS_INC = 6685\nVENDOR_ID_VECOMMERCE_NZ_LTD = 6686\nVENDOR_ID_PASIA_INC = 6687\nVENDOR_ID_NATIONAL_CENTER_FOR_SOFTWARE_TECHNOLOGYMINISTRY_OF_INFORMATIONTECHNOLOGYGOVERNMENT_OF_INDIA = 6688\nVENDOR_ID_ZOLERA_SYSTEMS_INC = 6689\nVENDOR_ID_OMNICLUSTER_TECHNOLOGIES_INC = 6690\nVENDOR_ID_UTEL = 6691\nVENDOR_ID_TELENISUS_CORPORATION = 6692\nVENDOR_ID_NETCERTAINTY = 6693\nVENDOR_ID_PGP_SA = 6694\nVENDOR_ID_SAMS_INC = 6695\nVENDOR_ID_NIAGARA_MOHAWK_POWER_CORPORATION = 6696\nVENDOR_ID_DOTCOM = 6697\nVENDOR_ID_MICRONET_SRL = 6698\nVENDOR_ID_VULCAN_NETWORKS = 6699\nVENDOR_ID_FINGO = 6700\nVENDOR_ID_CREATIV_NETWORK_TECHNOLOGIES = 6701\nVENDOR_ID_ENTRUST_CYGNACOM = 6702\nVENDOR_ID_COGNITRONICS_CORPORATION = 6703\nVENDOR_ID_VANCOUVER_LANGUAGE_INSTITUTE_LTD = 6704\nVENDOR_ID_ZYGOX_INC = 6705\nVENDOR_ID_NOAA_PMEL_EPIC = 6706\nVENDOR_ID_ROLF_BUURKE = 6707\nVENDOR_ID_HANDURU_TELECOM = 6708\nVENDOR_ID_SCARLET_TELECOM_BV = 6709\nVENDOR_ID_SOUTH_BIRMINGHAM_COLLEGE = 6710\nVENDOR_ID_CONNECT_ONE = 6711\nVENDOR_ID_VOXTRONIC_TECHNOLOGY = 6712\nVENDOR_ID_EIZO = 6713\nVENDOR_ID_BANCO_SANTANDER_CENTRAL_HISPANO = 6714\nVENDOR_ID_HTT_CONSULTING = 6715\nVENDOR_ID_AMS_SYSTEMS = 6716\nVENDOR_ID_GIANTLOOP_NETWORK_INC = 6717\nVENDOR_ID_EXFO_FIBER_OPTIC_TEST_EQUIPMENT = 6718\nVENDOR_ID_TRANSCOMM_TECHNOLOGY_SYSTEM_INC = 6719\nVENDOR_ID_PT_HARIFF_DTE = 6720\nVENDOR_ID_LODBROKER_PTY_LTD = 6721\nVENDOR_ID_COMMATCH_LTD = 6722\nVENDOR_ID_INTERNET_NAMES_UK = 6723\nVENDOR_ID_CAP_GEMINI_TELECOM_FRANCE_IPNS = 6724\nVENDOR_ID_DATA_INTERCHANGE_PLC = 6725\nVENDOR_ID_CELLPOINT_SYSTEMS = 6726\nVENDOR_ID_WINIT_SA = 6727\nVENDOR_ID_INTERLINK_NETWORKS_INC = 6728\nVENDOR_ID_DOLBY_LABORATORIES_INC = 6729\nVENDOR_ID_NEXTEL_PARTNERS_INC = 6730\nVENDOR_ID_WIT_SOUNDVIEW = 6731\nVENDOR_ID_INTERCIM_INC = 6732\nVENDOR_ID_CMD_TECHNOLOGY = 6733\nVENDOR_ID_WEGO_INC = 6734\nVENDOR_ID_TENEBROUS = 6735\nVENDOR_ID_JINNY_SOFTWARE_LTD = 6736\nVENDOR_ID_NEW_ERA_OF_NETWORKS_INC = 6737\nVENDOR_ID_RIVERSMAN = 6738\nVENDOR_ID_SPRING_YELLOW = 6739\nVENDOR_ID_CAL_POLY_STATE_UNIVERSITY = 6740\nVENDOR_ID_NULLI_SECUNDUS_INC = 6741\nVENDOR_ID_PRICELINECOM_INCORPORATED = 6742\nVENDOR_ID_SOPHICOMM = 6743\nVENDOR_ID_DANTRON = 6744\nVENDOR_ID_LASAT_NETWORKS_A_S = 6745\nVENDOR_ID_AFTEK_INFOSYS_LTD = 6746\nVENDOR_ID_TERABURST_NETWORKS = 6747\nVENDOR_ID_UP4GRAB_INC = 6748\nVENDOR_ID_BOSUNG_HI_NET_CO_LTD = 6749\nVENDOR_ID_GASCOM = 6750\nVENDOR_ID_DOLPHIN_INTERCONNECT_SOLUTIONS_AS = 6751\nVENDOR_ID_AXTRONICS_INC = 6752\nVENDOR_ID_SYSCONTROL_AG = 6753\nVENDOR_ID_EZGOV = 6754\nVENDOR_ID_RUSH_PRESBYTERIAN_ST_LUKES_MEDICAL_CENTER = 6755\nVENDOR_ID_UNIXGUYORG = 6756\nVENDOR_ID_GRID = 6757\nVENDOR_ID_SIMPLYSAY_INC = 6758\nVENDOR_ID_ALLCHARGE = 6759\nVENDOR_ID_VIRGINIA_TECH = 6760\nVENDOR_ID_AXONN_WIRELESS_SOLUTIONS = 6761\nVENDOR_ID_CAMBRIDGE_POSITIONING_SYSTEMS_LIMIT = 6762\nVENDOR_ID_METAKERNEL_NETWORK_LABORATORIES = 6763\nVENDOR_ID_IMAGINE_SOLUTIONS = 6764\nVENDOR_ID_ML_HIGHTOWER_INC = 6765\nVENDOR_ID_CPNI = 6766\nVENDOR_ID_RLX_TECHNOLOGIES_INC = 6767\nVENDOR_ID_PIXELMETRIX_CORPORATION_PTE = 6768\nVENDOR_ID_DYNAMIC_IMAGING_CORPORATION = 6769\nVENDOR_ID_OPENCON_COMMUNICATION_SYSTEMS = 6770\nVENDOR_ID_CYBERPATH_INC = 6771\nVENDOR_ID_EBSURE_INC = 6772\nVENDOR_ID_ENGINEERING_INTERNATIONAL_CORPORATION = 6773\nVENDOR_ID_UNIVERSITY_OF_VIRGINIA = 6774\nVENDOR_ID_CABLEVISION = 6775\nVENDOR_ID_BMYPC = 6776\nVENDOR_ID_TRIGEM_INFOCOMM = 6777\nVENDOR_ID_ABOCOM_SYSTEMS_INC = 6778\nVENDOR_ID_CHL_NETHERLANDS_BV = 6779\nVENDOR_ID_LINUX_COMMUNICATIONS_AS = 6780\nVENDOR_ID_VAST = 6781\nVENDOR_ID_CIENA_FORMERLY_AKARA_INC = 6782\nVENDOR_ID_TIDEPOINT = 6783\nVENDOR_ID_JP_SYSTEMS = 6784\nVENDOR_ID_DELTA_ELECTRONICS_INC_2 = 6785\nVENDOR_ID_DREAMWORKS_SKG = 6786\nVENDOR_ID_NETCONNECT = 6787\nVENDOR_ID_WHITEBIRD = 6788\nVENDOR_ID_OCTOGON_SOFTWARE_DEVELOPMENT_GMBH = 6789\nVENDOR_ID_FINJAN_SOFTWARE = 6790\nVENDOR_ID_EXE_TECHNOLOGIES_INC = 6791\nVENDOR_ID_ACTIVE_SOFTWARE = 6792\nVENDOR_ID_UTIASI = 6793\nVENDOR_ID_ADHESIVE_SOFTWARE_INCORPORATED = 6794\nVENDOR_ID_POCONO_PET_SITTERS = 6795\nVENDOR_ID_TEKVISION_COMMUNICATIONS = 6796\nVENDOR_ID_CONFIGURESOFT_INC = 6797\nVENDOR_ID_MARVELL_HISPANIA_SL_FORMERLY_DESIGN_OF_SYSTEMS_ON_SILICON = 6798\nVENDOR_ID_GLUECODE_INC = 6799\nVENDOR_ID_EXPRESS_RAIL_LINK_SDN_BHD = 6800\nVENDOR_ID_GAMMA_TECHNOLOGIES = 6801\nVENDOR_ID_M_DESIGN_COMMUNICATIONS = 6802\nVENDOR_ID_BCI_BASIC_COMMERCE_AND_INDUSTRIES_INC = 6803\nVENDOR_ID_WEINSCHEL_CORP = 6804\nVENDOR_ID_PSA_WORLD_NET_INC = 6805\nVENDOR_ID_THE_PENNSYLVANIA_STATE_UNIVERSITY = 6806\nVENDOR_ID_EOTVOS_LORAND_UNIVERSITY = 6807\nVENDOR_ID_BUYERS_LABORATORY_INC = 6808\nVENDOR_ID_ONTIKA_COMPUTERSYSTEMS = 6809\nVENDOR_ID_MUXCOM_INC = 6810\nVENDOR_ID_NAMEFLOW = 6811\nVENDOR_ID_YODA_COMMUNICATIONS_INC = 6812\nVENDOR_ID_OLYMPIA_COLLEGE = 6813\nVENDOR_ID_ITCHYFEET_NETWORKS = 6814\nVENDOR_ID_CYBERSPACIA_PTY_LTD = 6815\nVENDOR_ID_B4 = 6816\nVENDOR_ID_METANATE_LTD = 6817\nVENDOR_ID_TRIPWIRE_INC = 6818\nVENDOR_ID_MUSICFANS_INC = 6819\nVENDOR_ID_MENTA_SOFTWARE = 6820\nVENDOR_ID_TELECOM_LILLE1_FORMERLY_ENIC = 6821\nVENDOR_ID_UNIVERSITY_OF_CAMBRIDGE_CARD_OFFICE = 6822\nVENDOR_ID_DISTRIBUTED_OBJECT_TECHNOLOGIES_INC = 6823\nVENDOR_ID_LIST_NIEMANN = 6824\nVENDOR_ID_ICUE_SYSTEMS_INC = 6825\nVENDOR_ID_DARK_MATTER_NETWORK_TECHNOLOGIES_INC = 6826\nVENDOR_ID_EVERTZ_MICROSYSTEMS_LTD = 6827\nVENDOR_ID_CAVINESS_SOFTWARE = 6828\nVENDOR_ID_RAMIX_INC = 6829\nVENDOR_ID_ONEHOTTMIN_INC = 6830\nVENDOR_ID_DSS_DIGITAL_SECURITY_SERVICE_GMBH = 6831\nVENDOR_ID_VCHEQCOM_PTE_LTD = 6832\nVENDOR_ID_SCARPTOR_NETWORK_ABTHOMAS_BERGHEMMER_OR_MARTIN_MOREYTHOMASBERGHEMMERSCARPTORSE = 6833\nVENDOR_ID_SBUCK_NETWORKS = 6834\nVENDOR_ID_CHELLO_BROADBAND_AUSTRIA = 6835\nVENDOR_ID_FELLESKJPET_AGRI_BA = 6836\nVENDOR_ID_SOLCOM = 6837\nVENDOR_ID_IGC = 6838\nVENDOR_ID_ACCELIGHT_NETWORKS = 6839\nVENDOR_ID_DEUTSCHES_ELEKTRONEN_SYNCHROTRON_2 = 6840\nVENDOR_ID_VYX = 6841\nVENDOR_ID_TELECT_INC = 6842\nVENDOR_ID_GLOBAL_SOLUTION = 6843\nVENDOR_ID_SAT_CONSULTING_APS = 6844\nVENDOR_ID_MICRO_ENERGETICS_CORP = 6845\nVENDOR_ID_PAULOSOFT = 6846\nVENDOR_ID_TELEIAS_INC = 6847\nVENDOR_ID_CROSSBEAM_SYSTEMS_INC = 6848\nVENDOR_ID_REDDO_NETWORKS_AB = 6849\nVENDOR_ID_MCCT_INC = 6850\nVENDOR_ID_XOR_INC = 6851\nVENDOR_ID_UNIVERSITY_OF_COLORADO_AT_BOULDER = 6852\nVENDOR_ID_TELEVISION_SYSTEMS_LTD = 6853\nVENDOR_ID_RGIE_DES_TRANSPORTS_DE_MARSEILLE = 6854\nVENDOR_ID_WNF_CONSULTING_INC = 6855\nVENDOR_ID_LIQUIDLIGHT = 6856\nVENDOR_ID_DIGITALCONVERGENCE = 6857\nVENDOR_ID_FANTASMA_NETWORKS = 6858\nVENDOR_ID_ACTZERO_INC = 6859\nVENDOR_ID_ = 6860\nVENDOR_ID_DRUMA_INC = 6861\nVENDOR_ID_WAPINSPAINCOM = 6862\nVENDOR_ID_ZYTRAX_COMMUNICATIONS_INC = 6863\nVENDOR_ID_HARMANIA_MULTIMEDIA_INC = 6864\nVENDOR_ID_ELRON_TELESOFT = 6865\nVENDOR_ID_LYONNAISE_COMMUNICATION = 6866\nVENDOR_ID_IPOPTICAL_INC = 6867\nVENDOR_ID_GEORGETOWN_UNIVERSITY = 6868\nVENDOR_ID_STEVE_BURTON = 6869\nVENDOR_ID_CORE_SOFTWARE_TECHNOLOGY = 6870\nVENDOR_ID_CERT_COORDINATION_CENTER = 6871\nVENDOR_ID_HELP_SYSTEMS_INC = 6872\nVENDOR_ID_BHOLDCOMPANY = 6873\nVENDOR_ID_WOODWIND_COMMUNICATIONS_SYSTEMS_INC_2 = 6874\nVENDOR_ID_NEWEARTH_SWEDENBORGIAN_BBS = 6875\nVENDOR_ID_VMWARE_INC = 6876\nVENDOR_ID_EVERGREEN_INTERNET = 6877\nVENDOR_ID_BLACK_BOX_CORP = 6878\nVENDOR_ID_DIGIMINECOM = 6879\nVENDOR_ID_KAL = 6881\nVENDOR_ID_MICRO_ELECTRONICS_INC = 6882\nVENDOR_ID_LINUX_NETWORX_INC = 6883\nVENDOR_ID_BOCO = 6884\nVENDOR_ID_INTELLIGENT_TELECOMMUNICATIONS_INC = 6885\nVENDOR_ID_KPN = 6886\nVENDOR_ID_IT_CONFERENCE = 6887\nVENDOR_ID_MILLENIUM_INSTALLER = 6888\nVENDOR_ID_AVAYA_COMMUNICATION = 6889\nVENDOR_ID_SHELL_SERVICES_INTERNATIONAL = 6890\nVENDOR_ID_ACEPTACOM = 6891\nVENDOR_ID_CNATION = 6892\nVENDOR_ID_TURBOLINUX_INC = 6893\nVENDOR_ID_DATADIRECT_NETWORKS = 6894\nVENDOR_ID_EREO_INC = 6895\nVENDOR_ID_MAHI_NETWORKS = 6896\nVENDOR_ID_JDV = 6897\nVENDOR_ID_VERANCE_CORPORATION = 6898\nVENDOR_ID_NANYANG_TECHNOLOGICAL_UNIVERSITY = 6899\nVENDOR_ID_BALTIC_INSTITUTE_OF_ECONOMICS_AND_FINANCE = 6900\nVENDOR_ID_AETACOM = 6901\nVENDOR_ID_PLISCH_GMBH_CO_KG = 6902\nVENDOR_ID_VISOFT_PTY_LTD = 6903\nVENDOR_ID_IBM_INFRASTRUCTURE_SUPPORT_GROUP = 6904\nVENDOR_ID_BROCADE_COMMUNICATION_SYSTEMS_INC_FORMERLY_RHAPSODY_NETWORKS_INC = 6905\nVENDOR_ID_ASIANA_COMMUNICATIONS = 6906\nVENDOR_ID_BROAD_TELECOM_SA_BTESA = 6907\nVENDOR_ID_MOVAZ_NETWORKS = 6908\nVENDOR_ID_NETWORK_SECURITY_TECHNOLOGIES_INC = 6909\nVENDOR_ID_INQUENT_TECHNOLOGIES = 6910\nVENDOR_ID_AUCS_COMMUNICATIONS_SERVICES = 6911\nVENDOR_ID_MORGAN_STANLEY_DEAN_WITTER_ONLINE = 6912\nVENDOR_ID_BONA_TECHNOLOGY = 6913\nVENDOR_ID_TIMING_SOLUTIONS_CORPORATION = 6914\nVENDOR_ID_COMPUTABLE_FUNCTIONS_LIMITED = 6915\nVENDOR_ID_NORBERT_KLASEN = 6916\nVENDOR_ID_ALTERNATIVE_ADVICE = 6917\nVENDOR_ID_BELLE_SYSTEMS_A_S = 6918\nVENDOR_ID_CUBENET_SRL = 6919\nVENDOR_ID_THINK_DO_SOFTWARE_INC = 6920\nVENDOR_ID_MORRISON_INDUSTRIES = 6921\nVENDOR_ID_AMINO_COMMUNICATIONS_LTD = 6922\nVENDOR_ID_SHUTTERFLY = 6923\nVENDOR_ID_CAPITAL_INTERNET_LLC = 6924\nVENDOR_ID_IT_COMMUNICATIONS_KENNEDY_SPACE_CENTER_KSC = 6925\nVENDOR_ID_OPTICAL_ACCESS_INC = 6926\nVENDOR_ID_MAILCOM_2 = 6927\nVENDOR_ID_MOBILITY_NEXT_GENERATION = 6928\nVENDOR_ID_THE_ROOT_GROUP = 6929\nVENDOR_ID_LYCEE_LEONARD_DE_VINCI = 6930\nVENDOR_ID_INTERESSENGEMEINSCHAFT_SOFTWARE_ENGINEERING = 6931\nVENDOR_ID_INTERNET_CONTENT_REGISTER = 6932\nVENDOR_ID_REPUTY = 6933\nVENDOR_ID_CORPORATION_ONE_OF_AMERICA_INC = 6934\nVENDOR_ID_ARACHNE = 6935\nVENDOR_ID_VICORSOFT_CORPORATION = 6936\nVENDOR_ID_NETRELIANCE_INC = 6937\nVENDOR_ID_ENIGMA_INC = 6938\nVENDOR_ID_HEMPORG = 6939\nVENDOR_ID_TUFTS_UNIVERSITY = 6940\nVENDOR_ID_PROFLASH_CROSS_MEDIA_AG = 6941\nVENDOR_ID_JAMES_COOK_UNIVERSITY = 6942\nVENDOR_ID_R_ALPHA_LTD = 6943\nVENDOR_ID_REDSYS_FORMERLY_SERMEPA = 6944\nVENDOR_ID_LAKE_COMMUNICATIONS = 6945\nVENDOR_ID_FOUCHE_ENTERPRISES_LLC = 6946\nVENDOR_ID_CENTRAL_BANK_OF_RUSSIA_ARKHANGELSK = 6947\nVENDOR_ID_TUMSAN_OY = 6948\nVENDOR_ID_NEXTRA_BW_CSP_GMBH = 6949\nVENDOR_ID_AZTEC = 6950\nVENDOR_ID_FREELER_BV = 6951\nVENDOR_ID_IBIOMATICS_LLC = 6952\nVENDOR_ID_AIR2NET_AB = 6953\nVENDOR_ID_SEMA_GROUP = 6954\nVENDOR_ID_COMSOL_KOMMUNIKATIONSSYSTEME_GMBH = 6955\nVENDOR_ID_ETOPWARE_LABS = 6956\nVENDOR_ID_RAPI10NET = 6957\nVENDOR_ID_KENT_STATE_UNIVERSITY = 6958\nVENDOR_ID_BLUESTREAK = 6959\nVENDOR_ID_FELIX_DANZIGER_INTERNATIONAL_KUNSTHANDEL = 6960\nVENDOR_ID_TELERING_TELEKOM_SERVICE_GMBH = 6961\nVENDOR_ID_THE_UNIVERSITY_OF_SYDNEY = 6962\nVENDOR_ID_ANDREWS_IT_ENGINEERING_LTD = 6963\nVENDOR_ID_SOFT_TELEWARE_INC = 6964\nVENDOR_ID_RSBX = 6965\nVENDOR_ID_THE_BRIGHT_OCEANS_CORPORATION = 6966\nVENDOR_ID_DIGISMART = 6967\nVENDOR_ID_SYSTEK_AS = 6968\nVENDOR_ID_COPERNICUS_GLOBAL_BILLING_SERVICES = 6969\nVENDOR_ID_VCON_LTD = 6970\nVENDOR_ID_FERIMEX_IT_SPOL_S_RO = 6971\nVENDOR_ID_CANBOX = 6972\nVENDOR_ID_SAVATECH_INC = 6973\nVENDOR_ID_EARTHLINK_INC_2 = 6974\nVENDOR_ID_WATERCOVE_NETWORKS_INC = 6975\nVENDOR_ID_HOWSTUFFWORKSCOM_INC = 6976\nVENDOR_ID_RESILIENCE_CORPORATION = 6977\nVENDOR_ID_JBRUCENET = 6978\nVENDOR_ID_KERENIX = 6979\nVENDOR_ID_MRC_PROJECT = 6980\nVENDOR_ID_INTERQ_INC = 6981\nVENDOR_ID_ERBA_HOLDING = 6982\nVENDOR_ID_SOFAWARE_TECHNOLOGIES = 6983\nVENDOR_ID_FOVEA_INC = 6984\nVENDOR_ID_JUMPY_CAT_SYSTEMS_INC_FORMERLY_PRISM_SOFTWARE_INC = 6985\nVENDOR_ID_KIODEX_INC = 6986\nVENDOR_ID_WRONLINE_GBR = 6987\nVENDOR_ID_UNIVERSITY_OF_NORTHERN_BRITISH_COLUMBIA = 6988\nVENDOR_ID_EXTEL_COMMUNICATIONS_PTY_LTD = 6989\nVENDOR_ID_REDFERN_BROADBAND_NETWORKS = 6990\nVENDOR_ID_N_SPACE_PTY_LTD = 6991\nVENDOR_ID_KNOWNOW_INC = 6992\nVENDOR_ID_VIRTUALNET = 6993\nVENDOR_ID_THE_MIDGARD_PROJECT_OPEN_SOURCE = 6994\nVENDOR_ID_C_BASE_EV = 6995\nVENDOR_ID_WHATEVERNET_COMPUTING = 6996\nVENDOR_ID_YALE_UNIVERSITY = 6997\nVENDOR_ID_CHANNELOGICS_INCORPORATED = 6998\nVENDOR_ID_UNIVERSITY_OF_INDIANAPOLIS = 6999\nVENDOR_ID_NET_VOLUTION_SRL = 7000\nVENDOR_ID_BIG_NET_INC = 7001\nVENDOR_ID_SEBASTIAN_CRESPO = 7002\nVENDOR_ID_CISCO_MASBU = 7003\nVENDOR_ID_METODO_SRL = 7004\nVENDOR_ID_KAGOOR_NETWORKS = 7005\nVENDOR_ID_EYEOCOM = 7006\nVENDOR_ID_GUANGZHOU_THINKER_COMMUNICATIONS_TECHNOLOGY_CO_LTD = 7007\nVENDOR_ID_DISCORDIAN_ALLIANCE_FOR_TEACHING = 7008\nVENDOR_ID_CHEMTEX_ENGINEERING_OF_INDIA_LTD = 7009\nVENDOR_ID_ORANJE_CONSULTING_INC = 7010\nVENDOR_ID_PRISM_MICROSYSTEMS_INC = 7011\nVENDOR_ID_EDISONTEL_SPA = 7012\nVENDOR_ID_BYTESPHERE_LLC = 7013\nVENDOR_ID_ADEXA_INC = 7014\nVENDOR_ID_VIGNETTE_CORPORATION = 7015\nVENDOR_ID_SENECA_NETWORKS = 7016\nVENDOR_ID_ADARI_TELECOMP_INC = 7017\nVENDOR_ID_PT_MULTIMEDIA = 7018\nVENDOR_ID_POLARIS_NETWORKS_INC = 7019\nVENDOR_ID_SAECOS_CORPORATION = 7020\nVENDOR_ID_SYSNET_SNC = 7021\nVENDOR_ID_MRZ_AG = 7022\nVENDOR_ID_THE_DIRECT_CONNECTION_LTD = 7023\nVENDOR_ID_VHB_TECHNOLOGIES_INC = 7024\nVENDOR_ID_DOUBLE_D_INVESTMENTS = 7025\nVENDOR_ID_SONERA_SMARTTRUST = 7026\nVENDOR_ID_ONIX_MICROSYSTEMS_INC = 7027\nVENDOR_ID_ALLOPTIC_INC = 7028\nVENDOR_ID_CUBIWEB_LLC = 7029\nVENDOR_ID_ETHERNET_SOLUCOES_INFORMATICAS_LDA = 7030\nVENDOR_ID_MCAFEE_INC_FORMERLY_SECURIFY_INC = 7031\nVENDOR_ID_CHARTERED_SEMICONDUCTOR_MANUFACTURING = 7032\nVENDOR_ID_MATAS_SOFTWARE_GROUP = 7033\nVENDOR_ID_INYOURWAKE = 7034\nVENDOR_ID_VTT_ELECTRONICS = 7035\nVENDOR_ID_MBDYN = 7036\nVENDOR_ID_UBRIS = 7037\nVENDOR_ID_TRON_NETWORK_SOLUTIONS = 7038\nVENDOR_ID_BISON_GMBH = 7039\nVENDOR_ID_DATALINX_INC = 7040\nVENDOR_ID_INTEGRA = 7041\nVENDOR_ID_PERMANENT_VACATIONS = 7042\nVENDOR_ID_APT_COMPUTER_SYSTEMS_LIMITED = 7043\nVENDOR_ID_PRIMAL = 7044\nVENDOR_ID_TBA_COMMUNICATIONS = 7045\nVENDOR_ID_TOMS_NET = 7046\nVENDOR_ID_FLUX_PRODUCTIONS = 7047\nVENDOR_ID_PICO_COMMUNICATIONS_INC = 7048\nVENDOR_ID_DATANET_DEVELOPMENT_GROUP_INC = 7049\nVENDOR_ID_KAZAN_STATE_UNIVERSITY = 7050\nVENDOR_ID_EPICOM_SA = 7051\nVENDOR_ID_IKOM_INGENIEURBRO = 7052\nVENDOR_ID_VIDEON_CABLESYSTEMS_ALBERTA_INC = 7053\nVENDOR_ID_MAZU_NETWORKS_INC = 7054\nVENDOR_ID_COX_INTERNET_SERVICES = 7055\nVENDOR_ID_SENTERPRISE_INC = 7056\nVENDOR_ID_SUSE_LINUX_AG = 7057\nVENDOR_ID_BB4_TECHNOLOGIES_INC = 7058\nVENDOR_ID_COMPLETE_BUSINESS_SOLUTIONS_GLOBAL_HEALTH = 7059\nVENDOR_ID_NAIKEL_SOFTWARE = 7060\nVENDOR_ID_AUTOMATED_LOGIC_CORPORATION = 7061\nVENDOR_ID_OASIS_TELECOMMUNICATIONS_INC = 7062\nVENDOR_ID_AUSTRALIAN_DEFENCE_FORCE_ACADEMY = 7063\nVENDOR_ID_UTSTARCOM_CHINA_CO_LTD_SHENZHEN_BRANCH = 7064\nVENDOR_ID_SHIMIN_DENSHI_JOUHOU_MOU = 7065\nVENDOR_ID_DR_SRINIVAS = 7066\nVENDOR_ID_TELCO_TECH_GMBH = 7067\nVENDOR_ID_CRYPTOPRO = 7068\nVENDOR_ID_SFI_OPEN_SOURCE_SERVICES = 7069\nVENDOR_ID_NARAD_NETWORKS = 7070\nVENDOR_ID_TELE_INFO_SYSTEM = 7071\nVENDOR_ID_EHRHART_JEWELERS = 7072\nVENDOR_ID_R00TKITCOM = 7073\nVENDOR_ID_THEMAGICPROGRAMMER = 7074\nVENDOR_ID_LOTHAR_MARONN = 7075\nVENDOR_ID_AUSTRALIAN_ONLINE_SOLUTIONS = 7076\nVENDOR_ID_DESARROLLOS_DIGITALES = 7077\nVENDOR_ID_TRUE_NORTH_COMMUNICATIONS = 7078\nVENDOR_ID_MEGISTO_SYSTEMS_INC = 7079\nVENDOR_ID_XELINET = 7080\nVENDOR_ID_MAASLANDSE_UNIX_LINUX_LABORATORIUM_MULL = 7081\nVENDOR_ID_DAIDEN_CO_LTD = 7082\nVENDOR_ID_APPLIED_GENERICS_LTD = 7083\nVENDOR_ID_FRIENDS_PROVIDENT = 7084\nVENDOR_ID_CYBERCOMM_BV = 7085\nVENDOR_ID_GTONG_SHENZHEN_LTD = 7086\nVENDOR_ID_SELIS_NETWORKS_INC = 7087\nVENDOR_ID_NETWORK_SYSTEMS = 7088\nVENDOR_ID_CENTRUM_ARBEIDSVERHOUDINGEN = 7089\nVENDOR_ID_EL_BIT_SALVAJE = 7090\nVENDOR_ID_CREN = 7091\nVENDOR_ID_SCIENCEXCHANGE = 7092\nVENDOR_ID_ERICSSON_GEOBILITY = 7093\nVENDOR_ID_WACHOVIA_TRUST = 7094\nVENDOR_ID_PERT = 7095\nVENDOR_ID_JSEIC = 7096\nVENDOR_ID_LEATHERXCHANGE_SA = 7097\nVENDOR_ID_EDISON_MISSION_ENERGY = 7098\nVENDOR_ID_RIPECO_LTD = 7099\nVENDOR_ID_KILLIK_CO = 7100\nVENDOR_ID_CO3I = 7101\nVENDOR_ID_IDEALX = 7102\nVENDOR_ID_SALTFIRE_INC = 7103\nVENDOR_ID_SUPERVERTICAL_SISTEMAS = 7104\nVENDOR_ID_CANTV = 7105\nVENDOR_ID_TELEPORT_CORP = 7106\nVENDOR_ID_GEOCAST_NETWORK_SYSTEMS = 7107\nVENDOR_ID_URSCHELER_SOFTWARE = 7108\nVENDOR_ID_CITY_UNIVERSITY_OF_HONGKONG = 7109\nVENDOR_ID_KAASHYAP_RADIANT_SYSTEM_LTD = 7110\nVENDOR_ID_SUNAMERICAN_COMMUNICATION_TECHNOLOGY_INC = 7111\nVENDOR_ID_US_DEPARTMENT_OF_COMMERCE = 7112\nVENDOR_ID_YOTTAYOTTA = 7113\nVENDOR_ID_UNIVERSIDAD_DE_NAVARRA = 7114\nVENDOR_ID_BOOK2EATCOM_LIMITED = 7115\nVENDOR_ID_TECHTRADE_INTERNATIONAL_MANAGEMENT_AB = 7116\nVENDOR_ID_INVERTIX_INC = 7117\nVENDOR_ID_NETCONTINUUM_INC = 7118\nVENDOR_ID_OPNET_TECHNOLOGIES_INC_FORMERLY_NETWORK_PHYSICS_INC = 7119\nVENDOR_ID_SENTRY_TELECOM_SYSTEMS_INC = 7120\nVENDOR_ID_COMUNICACIONES_NETGLOBALIS = 7121\nVENDOR_ID_LUSARSNET = 7122\nVENDOR_ID_NSOF_PARALLEL_SOFTWARE_LTD = 7123\nVENDOR_ID_STAND_BY = 7124\nVENDOR_ID_DIGITAL_CREATIONS = 7125\nVENDOR_ID_POSITRON_PUBLIC_SAFETY_SYSTEMS_INC = 7126\nVENDOR_ID_NADEEM_HASAN = 7127\nVENDOR_ID_WORCESTER_POLYTECHNIC_INSTITUTE = 7128\nVENDOR_ID_LANCASTER_UNIVERSITY = 7129\nVENDOR_ID_KIDDIEPOTCOM = 7130\nVENDOR_ID_ORIENT_TELECOM = 7131\nVENDOR_ID_ELANSAT_TECHNOLOGIES_INC = 7132\nVENDOR_ID_CORENIX_SYSTEM_INC = 7133\nVENDOR_ID_PROSOLVE = 7134\nVENDOR_ID_COMIT_RSEAU_DES_UNIVERSITS = 7135\nVENDOR_ID_SYSNET = 7136\nVENDOR_ID_TUNISIE_TELECOM = 7137\nVENDOR_ID_ALLAIRE_CORPORATION = 7138\nVENDOR_ID_ECHOSTAR_DATA_NETWORKS = 7139\nVENDOR_ID_INPG_INSTITUT_NATIONAL_POLYTECHNIQUE_DE_GRENOBLE = 7140\nVENDOR_ID_FREESOFT = 7141\nVENDOR_ID_PINGTEL_CORP = 7142\nVENDOR_ID_ENTRUST_TECHNOLOGIES_INC = 7143\nVENDOR_ID_FACETIME_COMMUNICATIONS_INC = 7144\nVENDOR_ID_EVECOM = 7145\nVENDOR_ID_ZEUS_TECHNOLOGY_LTD = 7146\nVENDOR_ID_IMPERIAL_TECHNOLOGY_INC = 7147\nVENDOR_ID_UNITREE_SOFTWARE = 7148\nVENDOR_ID_ARCOT_SYSTEMS_INC = 7149\nVENDOR_ID_INITECH_COLTD = 7150\nVENDOR_ID_R_PDESHPANDE = 7151\nVENDOR_ID_CAPE_TECHNOLOGIES_LTD = 7152\nVENDOR_ID_FOERTSCH_EDV_BERATUNG = 7153\nVENDOR_ID_INTELLIGENT_PLATFORM_MANAGEMENT_INTERFACE_FORUM = 7154\nVENDOR_ID_NEOHAVENNET = 7155\nVENDOR_ID_PRINCETON_NETWORKS = 7156\nVENDOR_ID_SC_DART_IMPEX_SRL = 7157\nVENDOR_ID_1_GLOBAL_CITYCOM_INC = 7158\nVENDOR_ID_ALLIANZ_AG = 7159\nVENDOR_ID_GRANADA_LEARNING = 7160\nVENDOR_ID_NETWORK_SOLUTIONS_INC = 7161\nVENDOR_ID_DELANCEY_MANAGEMENT_AND_CONSULTING = 7162\nVENDOR_ID_FIORANO_SOFTWARE_INC = 7163\nVENDOR_ID_SCHIZO_INFORMATION_NETWORK = 7164\nVENDOR_ID_SAMBA_TEAM = 7165\nVENDOR_ID_PETERS_SECURITIES_CO_LP = 7166\nVENDOR_ID_WINTERTEK_LLC = 7167\nVENDOR_ID_EUROSOFT_SAS = 7168\nVENDOR_ID_ENGAGE_INC = 7169\nVENDOR_ID_CENTELL_TELECOMMUNICATION_COMPANY = 7170\nVENDOR_ID_EUROPESAVE_SA = 7171\nVENDOR_ID_SPARKNET_SA = 7172\nVENDOR_ID_JIANGSU_UNIVERSITY_OF_SCIENCE_AND_TECHNOLOGY = 7173\nVENDOR_ID_TONIC_SOFTWARE_INC = 7174\nVENDOR_ID_TSP_LABTELECOMMUNICATION_AND_SIGNAL_PROCESSING_LAB_PETER = 7175\nVENDOR_ID_ORANGEFOODCOM = 7176\nVENDOR_ID_IPITEK = 7177\nVENDOR_ID_SANJOSEDEOCOACOMDO = 7178\nVENDOR_ID_ARIO_DATA_NETWORKS = 7179\nVENDOR_ID_TALARIAN_CORPORATION = 7180\nVENDOR_ID_TRENDIUM_INC = 7181\nVENDOR_ID_YPASSNET = 7182\nVENDOR_ID_SPRINGFIELD_PUBLIC_SCHOOLS = 7183\nVENDOR_ID_LATITUDE_COMMUNICATIONS = 7185\nVENDOR_ID_BAYPACKETS_INC = 7186\nVENDOR_ID_NETSYSTEMS_INC = 7187\nVENDOR_ID_CURTIN_UNIVERSITY_OF_TECHNOLOGY = 7188\nVENDOR_ID_EMS_GLOBAL = 7189\nVENDOR_ID_LEGATO_SYSTEMS_INDIA = 7190\nVENDOR_ID_GEBRUEDER_WEISS_GMBH = 7191\nVENDOR_ID_ID_PRO_AKTIENGESELLSCHAFT = 7192\nVENDOR_ID_BOURSE_CONNECT = 7193\nVENDOR_ID_STEVENS_GAGNON_SERVICES_INFO_TECHNIQUES = 7194\nVENDOR_ID_IQUILIBRIUM_INC = 7195\nVENDOR_ID_IMAGINE_SOFTWARE = 7196\nVENDOR_ID_INTERTECH = 7197\nVENDOR_ID_CELIGHT = 7198\nVENDOR_ID_2BRIDGE_SOFTWARE = 7199\nVENDOR_ID_FOREBRICK_INTERNATIONAL = 7200\nVENDOR_ID_DRUKER_CONSULTING = 7201\nVENDOR_ID_SEASTEM = 7202\nVENDOR_ID_TECHNOLOGY_BUILDERS_INC = 7203\nVENDOR_ID_PERFORMANCEIT_INC = 7204\nVENDOR_ID_CORETECH_CONSULTING_GROUP_INC = 7205\nVENDOR_ID_REAL_MEDIA_INC = 7206\nVENDOR_ID_DENON_DENTAL = 7207\nVENDOR_ID_AFCON_SOFTWARE_AND_ELECTRONICS_LTD = 7208\nVENDOR_ID_SOCIETE_BRYARDE_DE_TRAVAUX_PUBLICS = 7209\nVENDOR_ID_WORKSPOT_INC = 7210\nVENDOR_ID_RAIFFEISEN_SCHWEIZ = 7211\nVENDOR_ID_RAIFFEISEN_SCHWEIZ_2 = 7212\nVENDOR_ID_DATRIA_SYSTEMS = 7213\nVENDOR_ID_VIRGINIA_MERYLAND_REGIONAL_COLLEGE_OF_VETERINARY_MEDICINE = 7214\nVENDOR_ID_ABN_AMRO = 7215\nVENDOR_ID_INSTITUT_NATIONAL_DE_LA_RECHERCHE_AGRONOMIQUE = 7216\nVENDOR_ID_THE_UNIVERSITY_OF_MEMPHIS = 7217\nVENDOR_ID_HBESOFTWARE_INC = 7218\nVENDOR_ID_FIREDROP_INC = 7219\nVENDOR_ID_SHANGHAI_OPTICAL_NETWORKING_TECHNOLOGY_CO_LTD = 7220\nVENDOR_ID_HANDLINK_TECHNOLOGIES_INC = 7221\nVENDOR_ID_TISCOVER = 7222\nVENDOR_ID_OFEHRNET = 7223\nVENDOR_ID_NETARCHITECTS_SA = 7224\nVENDOR_ID_SPACECHECKER_NV = 7225\nVENDOR_ID_MICRO_F_X = 7226\nVENDOR_ID_CENTRE_INFORMATIQUE_NATIONAL_DE_LENSEIGNEMENT_SUPERIEUR = 7227\nVENDOR_ID_THE_WEB_FOUNDRY_LIMITED = 7228\nVENDOR_ID_VOGELER_ENTERPRISE_ARCHITECTURES = 7229\nVENDOR_ID_EASTERN_MICHIGAN_UNIVERSITY = 7230\nVENDOR_ID_MIDSTREAM_TECHNOLOGIES = 7231\nVENDOR_ID_VR1_ENTERTAINMENT = 7232\nVENDOR_ID_SIERRACITIESCOM = 7233\nVENDOR_ID_KORE = 7234\nVENDOR_ID_ERADLINK = 7235\nVENDOR_ID_SIMM_COMM = 7236\nVENDOR_ID_AARONSEN_GROUP_LTD = 7237\nVENDOR_ID_OM_TECHNOLOGY = 7238\nVENDOR_ID_LEGRAND = 7239\nVENDOR_ID_PRINCETON_NETWORKS_INC = 7240\nVENDOR_ID_INTERNET = 7241\nVENDOR_ID_QWICNET_INC = 7242\nVENDOR_ID_ZIVO_WELLINGTON = 7243\nVENDOR_ID_QUANTA_COMPUTER_INC = 7244\nVENDOR_ID_NORTHERN_DISTRICTS_IN_LINE_HOCKEY_CLUB = 7245\nVENDOR_ID_PROJECT_X_CONSULTING_LTD = 7246\nVENDOR_ID_NEXSAN_TECHNOLOGIES_LTD = 7247\nVENDOR_ID_HYPERTRUST = 7248\nVENDOR_ID_MANAGE_IT = 7249\nVENDOR_ID_VIEWGRAPHICS = 7250\nVENDOR_ID_SPC_SOLUTIONS_SRO = 7251\nVENDOR_ID_INSTITUT_MONDOR_DE_MDECINE_MOLCULAIRE = 7252\nVENDOR_ID_STREAMCACHE = 7253\nVENDOR_ID_INTRONIX_CORPORATION = 7254\nVENDOR_ID_POINTONE_TELECOMMUNICATIONS_INC = 7255\nVENDOR_ID_GEYSER_NETWORKS_INC = 7256\nVENDOR_ID_MAR_NET_LTD = 7257\nVENDOR_ID_CENTRE_NATIONAL_DE_DOCUMENTATION_PEDAGOGIQUE = 7258\nVENDOR_ID_OULLIM_INFORMATION_TECHNOLOGY_INC = 7259\nVENDOR_ID_OPTHOS_INC = 7260\nVENDOR_ID_INFOSPACE = 7261\nVENDOR_ID_DRAGONWAVE = 7262\nVENDOR_ID_LITT_PRODUCTIONS_LTD = 7263\nVENDOR_ID_INTERACTIVE_PORTAL_INC = 7265\nVENDOR_ID_SOFTFRONT = 7266\nVENDOR_ID_BROADLINK_TECHNOLOGIES_INC = 7267\nVENDOR_ID_AXIAVOICE_SOFTWARE = 7268\nVENDOR_ID_UNIVERSITY_OF_KLAGENFURT = 7269\nVENDOR_ID_SUPANET_LIMITED = 7270\nVENDOR_ID_TUXWARP = 7271\nVENDOR_ID_REDSIREN_TECHNOLOGIES_INC = 7272\nVENDOR_ID_WHEN_PIGS_FLY_CLUB = 7273\nVENDOR_ID_CITY_OF_WILLCOX = 7274\nVENDOR_ID_AMSTERDAMSE_HOGESCHOOL_VOOR_DE_KUNSTEN = 7275\nVENDOR_ID_PARABON_COMPUTATION_INC = 7276\nVENDOR_ID_POLYSERVEINC = 7277\nVENDOR_ID_DIGITAL_ARCHWAY = 7278\nVENDOR_ID_ZEMBU_LABS = 7279\nVENDOR_ID_VODAFONE_NETWORK_PTY_LTD_AUSTRALIA = 7280\nVENDOR_ID_SOCIX_BUSINESS_INTERNET_SOFTWARE_CO_LTD = 7281\nVENDOR_ID_SUPERCHANNEL_APS = 7282\nVENDOR_ID_DEFENCE_SCIENCE_TECHNOLOGY_AGENCY = 7283\nVENDOR_ID_ASITA_TECHNOLOGIES = 7284\nVENDOR_ID_HUTCHISON_PORTS_UK_LIMITED = 7285\nVENDOR_ID_BETANET = 7286\nVENDOR_ID_PREMIER_PROGRAMMING_LTD = 7287\nVENDOR_ID_ACTIVESKY_INC = 7288\nVENDOR_ID_VISUAL_ANALYSIS_AG = 7289\nVENDOR_ID_SAMJUNG_DATA_SERVICE_LTDCO = 7290\nVENDOR_ID_LECOINTE_LUDOVIC = 7291\nVENDOR_ID_KRONE_MULTIMEDIA_GESMBH_CO_KG = 7292\nVENDOR_ID_POWERCOM_CO_LTD = 7293\nVENDOR_ID_SOCIT_GNRALE_DE_TLINFORMATIQUE = 7294\nVENDOR_ID_PLAN_B_SOLUTIONS_GMBH = 7295\nVENDOR_ID_EFORCE_INC_NEW_YORK = 7296\nVENDOR_ID_ADVENTIST_CARE_CENTERS = 7297\nVENDOR_ID_YUMA_EDUCATIONAL_CONSORTIUM = 7298\nVENDOR_ID_VALENCE_SEMICONDUCTOR_INC = 7299\nVENDOR_ID_BANGLADESH_CONSULTANTS_LTD = 7300\nVENDOR_ID_KINZEBACH = 7301\nVENDOR_ID_MEDSYS = 7302\nVENDOR_ID_BYG_INFORMATIQUE = 7303\nVENDOR_ID_WWW_DEPARTMENTSTORE = 7304\nVENDOR_ID_ESURVEY = 7305\nVENDOR_ID_BOKU_INC = 7306\nVENDOR_ID_PONYEXPRESSNET = 7307\nVENDOR_ID_ZAANTEK_LLC = 7308\nVENDOR_ID_ARGUS_TECHNOLOGIES = 7309\nVENDOR_ID_ENSTOR = 7310\nVENDOR_ID_T_SYSTEMS_ENTERPRISE_SERVICES_GMBH = 7311\nVENDOR_ID_BARCO_CONTROL_ROOMS = 7312\nVENDOR_ID_1STWAVE = 7313\nVENDOR_ID_CODEWEAVERS_INC = 7314\nVENDOR_ID_CAB_SOFTWARE = 7315\nVENDOR_ID_BRIDGE_SOLUTIONS_AG = 7316\nVENDOR_ID_MOBILE_REACH_TECHNOLOGIES_INC = 7317\nVENDOR_ID_SINIA_CORPORATION = 7318\nVENDOR_ID_UNIVERSITE_DE_TOULON_ET_DU_VAR = 7319\nVENDOR_ID_IVRON_SYSTEMS_LTD = 7320\nVENDOR_ID_CONNEXT = 7321\nVENDOR_ID_TIBURON_NETWORKS_INC = 7322\nVENDOR_ID_VOICECOM = 7323\nVENDOR_ID_CHAMBRE_SYNDICALE_DES_BANQUES_POPULAIRES = 7324\nVENDOR_ID_REDEYE_TELECOMMUNICATIONS = 7325\nVENDOR_ID_MCI_3 = 7326\nVENDOR_ID_WAVESMITH_NETWORKS = 7327\nVENDOR_ID_MATRIXONE_INC = 7328\nVENDOR_ID_VIRTUAL_LEARN_INC = 7329\nVENDOR_ID_BUNDESANSTALT_FUER_WASSERBAU = 7330\nVENDOR_ID_DDS_PROJECTS_BV = 7331\nVENDOR_ID_DIVITECH_A_S = 7332\nVENDOR_ID_E_COTTAGE_INDUSTRIES = 7333\nVENDOR_ID_THE_SAN_JOAQUIN_VALLEY_SCIENCE_COLLECTIVE = 7334\nVENDOR_ID_EXPERTS_MD = 7335\nVENDOR_ID_6WIND = 7336\nVENDOR_ID_LIPRO_AG = 7337\nVENDOR_ID_PARAMHAMSA_TECH = 7338\nVENDOR_ID_GENERALSEARCHCOM = 7339\nVENDOR_ID_NORTHWESTERN_UNIVERSITY = 7340\nVENDOR_ID_UNIVERSITY_OF_ALABAMA_AT_BIRMINGHAM = 7341\nVENDOR_ID_OMNITRON_SYSTEMS_TECHNOLOGY = 7342\nVENDOR_ID_BROADCONNEX_NETWORKS_INC = 7343\nVENDOR_ID_JEDAI_BROADBAND_NETWORKS = 7344\nVENDOR_ID_LEARNSOFT_CORPORATION = 7345\nVENDOR_ID_UNI_C = 7346\nVENDOR_ID_POINT_REYES_NETWORKS_INC = 7347\nVENDOR_ID_TORREN_SOFTWARE_COMPANY = 7348\nVENDOR_ID_HANGZHOU_TORREN_SOFTWARE_COMPANY = 7349\nVENDOR_ID_BELKAMNEFT = 7350\nVENDOR_ID_TELEDANMARK_DEVELOPMENT = 7351\nVENDOR_ID_GILAT_SATELLITE_NETWORKS = 7352\nVENDOR_ID_DATEL_DEFENCE_LIMITED = 7353\nVENDOR_ID_VESPER_SA = 7354\nVENDOR_ID_HASS_ASSCOIATES = 7355\nVENDOR_ID_GATEWAY_TO_THE_WEB = 7356\nVENDOR_ID_SCRONERCOM = 7357\nVENDOR_ID_POV_CORP = 7358\nVENDOR_ID_STEELEYE_TECHNOLOGY = 7359\nVENDOR_ID_TELECOM_PERSONAL = 7360\nVENDOR_ID_CERTIFICADO_DIGITAL_SA = 7361\nVENDOR_ID_DEPARTMENT_LAND_AIR_AND_WATER_RESOURCESUNIVERSITY_OF_CALIFORNIADAVIS = 7362\nVENDOR_ID_PROMINENCE_NETWORKS_INC = 7363\nVENDOR_ID_IMS_HEALTH = 7364\nVENDOR_ID_EASILY_LTD = 7365\nVENDOR_ID_MARKETTOUCH = 7366\nVENDOR_ID_DRAYTEK_CORPORATION = 7367\nVENDOR_ID_FALCONSTOR_INC = 7368\nVENDOR_ID_SUNCOM_COMMUNICATIONS = 7369\nVENDOR_ID_CBEYOND_COMMUNICATIONS = 7370\nVENDOR_ID_INSERM = 7371\nVENDOR_ID_CRATOS_NETWORKS_INC = 7372\nVENDOR_ID_NARAD_NETWORKS_INC = 7373\nVENDOR_ID_CD_MICRO_SOLUTIONS = 7374\nVENDOR_ID_ISOFT_PLC = 7375\nVENDOR_ID_MAGENTA_SITES = 7376\nVENDOR_ID_UBIQUITY_SOFTWARE_CORPORATION = 7377\nVENDOR_ID_FIRESUMMIT = 7378\nVENDOR_ID_SOLITON_TECHNOLOGIES_CO = 7379\nVENDOR_ID_SHORE_CORPORATION = 7380\nVENDOR_ID_OWL_ONLINE_GMBH_CO_KG = 7381\nVENDOR_ID_JUSTIT_SDN_BHD = 7382\nVENDOR_ID_LIBERTECH = 7383\nVENDOR_ID_CRYPTOTECH = 7384\nVENDOR_ID_CELOX_NETWORKS_INC = 7385\nVENDOR_ID_CAKE_FARM = 7386\nVENDOR_ID_CANON_INFORMATION_SYSTEMS_RESEARCH_AUSTRALIA = 7387\nVENDOR_ID_LUNE_NETWORKS = 7388\nVENDOR_ID_VDSL_SYSTEMS_OY = 7389\nVENDOR_ID_GRISOFT = 7390\nVENDOR_ID_INSTITUT_NATIONAL_DES_TELECOMMUNICATIONS_INT = 7391\nVENDOR_ID_TELISPARK = 7392\nVENDOR_ID_OASYS_TELECOM_INC = 7393\nVENDOR_ID_COSMOCOM_INC_2 = 7394\nVENDOR_ID_BEELINE_NETWORKS_INC = 7395\nVENDOR_ID_OLYMPO_CONTROLS_LTD = 7396\nVENDOR_ID_ONEPAGE_INC = 7397\nVENDOR_ID_CORPORATION_124 = 7398\nVENDOR_ID_DATA_SYSTEMS_WEST = 7399\nVENDOR_ID_EHI_INSM = 7400\nVENDOR_ID_EKOTACENTRAL = 7401\nVENDOR_ID_VIGOR_SOFT_PRIVATE_LIMITED = 7402\nVENDOR_ID_BIOMED_TRANSLATIONS_LTD = 7403\nVENDOR_ID_DJ_WILLIAMS_EDITORIAL_LTDDAVID = 7404\nVENDOR_ID_IPS_DOO = 7405\nVENDOR_ID_EFS_ETABLISSSEMENT_FRANCAIS_DU_SANG = 7406\nVENDOR_ID_OBSERVATOIRE_DE_BESANCON = 7407\nVENDOR_ID_KUNSKAPSTV_I_SVERIGE_AB = 7408\nVENDOR_ID_JAN_NIEHUSMANN = 7409\nVENDOR_ID_TELEKURS_FINANCIAL = 7410\nVENDOR_ID_FINIX = 7411\nVENDOR_ID_ANGSTROM_MICROSYSTEMS = 7412\nVENDOR_ID_COMPUTER_SERVICE_DEPOT = 7413\nVENDOR_ID_MUFFETT_CO = 7414\nVENDOR_ID_BERLIN_BRANDENBURGISCHE_AKADEMIE_DER_WISSENSCHAFTEN = 7415\nVENDOR_ID_SOFTWARE_ADVANCED_TECHNOLOGY_LAB = 7416\nVENDOR_ID_CORNELL_UNIVERSITY = 7417\nVENDOR_ID_PROCKET_NETWORKS = 7418\nVENDOR_ID_DAI_HOC_SU_PHAM_KY_THUAT = 7419\nVENDOR_ID_TAYLOR_COMPANY = 7420\nVENDOR_ID_MILCOM_SYSTEMS_CORPORATION = 7421\nVENDOR_ID_CURRENEX = 7422\nVENDOR_ID_MEDPLUS_INC = 7423\nVENDOR_ID_INFOSEC_TECHNOLOGIES_CO_LTD = 7424\nVENDOR_ID_COMPANY_OF_THE_FAR_COUNTRIES_LTD = 7425\nVENDOR_ID_NEST_INFORMATION_TECHNOLOGIES = 7426\nVENDOR_ID_YOKOGAWA_ELECTRIC_CORPORATION = 7427\nVENDOR_ID_POWERDSINE = 7428\nVENDOR_ID_BROADWEB_CORPORATION = 7429\nVENDOR_ID_MEDIASCAPE_COMMUNICATIONS_AG = 7430\nVENDOR_ID_ALTIVA_SOLUTIONS = 7431\nVENDOR_ID_EXCENTIS = 7432\nVENDOR_ID_SITTI_SPA = 7433\nVENDOR_ID_PLANETASIA_LTD = 7434\nVENDOR_ID_TK_COMPANY = 7435\nVENDOR_ID_OXIR_INTERNET_SOLUTIONS = 7436\nVENDOR_ID_SIEMENS_ICN_ITALY = 7437\nVENDOR_ID_SAFE_INC = 7438\nVENDOR_ID_APPSTREAM_INC = 7439\nVENDOR_ID_OMNITECH_COMPUTER_CORP = 7440\nVENDOR_ID_CIPHERTRUST_INC = 7441\nVENDOR_ID_IDAHO_NATIONAL_ENGINEERING_AND_ENVIRONMENTAL_LABORATORY = 7442\nVENDOR_ID_EVEREX_COMMUNICATION = 7443\nVENDOR_ID_IMAGINE_NETWORKS = 7444\nVENDOR_ID_JAVELINA_SOFTWARE = 7445\nVENDOR_ID_INSTITUTE_OF_LEADERSHIP_AND_MANAGEMENT = 7446\nVENDOR_ID_SIGNAL_TECHNOLOGY_INC = 7447\nVENDOR_ID_ADVANCED_TRAINING_CONSULTING_SERVICES_INC = 7448\nVENDOR_ID_WHAM_COMPUTER = 7449\nVENDOR_ID_FRAMFAB = 7450\nVENDOR_ID_NSYS_TECHNOLOGIES_CO_LTD = 7451\nVENDOR_ID_GUANGZHOU_GAOKE_COMMUNICATION_EQUIPMENT_CO_LTD = 7452\nVENDOR_ID_TURTLEFOOT_INTERNATIONAL = 7453\nVENDOR_ID_OKSYSTEM_LTD = 7454\nVENDOR_ID_DEV_CONSULTING_GMBH = 7455\nVENDOR_ID_VIRTUAL_NET = 7456\nVENDOR_ID_ZAO_EMAX = 7457\nVENDOR_ID_CLEMENS_BENDEN = 7458\nVENDOR_ID_MEMIQ = 7459\nVENDOR_ID_XS4ALL_INTERNET_BV = 7460\nVENDOR_ID_PAGE_ONE_AG = 7461\nVENDOR_ID_NORDNORSK_HELSENETT = 7462\nVENDOR_ID_WHITECELLINC = 7463\nVENDOR_ID_ECMWF_EUROPEAN_CENTRE_FOR_MEDIUM_RANGE_WEATHER_FORECAST = 7464\nVENDOR_ID_WISI = 7465\nVENDOR_ID_CLI_GMBH = 7466\nVENDOR_ID_TTI_SYSTEMS = 7467\nVENDOR_ID_MIXBAAL = 7468\nVENDOR_ID_VOICEGENIE_TECHNOLOGIES = 7469\nVENDOR_ID_PRINCETON_FINANCIAL_SYSTEMS = 7470\nVENDOR_ID_DISCREET_COMMUNICATIONS_GROUP = 7471\nVENDOR_ID_MSHOWCOM = 7472\nVENDOR_ID_EASYPLANET_CORP = 7473\nVENDOR_ID_INABLED_ONLINE = 7474\nVENDOR_ID_SHANGHAI_BELL_COMPANY_LTD = 7475\nVENDOR_ID_DEPARTAMENTO_GENERAL_DE_IRRIGACION = 7476\nVENDOR_ID_UNK_SA_ARGENTINA = 7477\nVENDOR_ID_NETCRAFT_SDN_BHD = 7478\nVENDOR_ID_TRIAD_DEVELOPMENT_GROUP_NA_LLC = 7479\nVENDOR_ID_MYSPENDCOM = 7480\nVENDOR_ID_TALON = 7481\nVENDOR_ID_WIDAX_CORPORATION = 7482\nVENDOR_ID_ALCATEL_LUCENT_FORMERLY_TROPIC_NETWORKS = 7483\nVENDOR_ID_TELEIAS_INC_2 = 7484\nVENDOR_ID_SPS_INC = 7485\nVENDOR_ID_EMBASSY_SYSTEMS_LTDA = 7486\nVENDOR_ID_MEISOLUTIONSCOM_INC = 7487\nVENDOR_ID_INFINITEC_NETWORKS = 7488\nVENDOR_ID_E_HEALTHSIGN = 7489\nVENDOR_ID_TOTALWISDOM_INC = 7490\nVENDOR_ID_GNUMONKSORG = 7491\nVENDOR_ID_KOMMUNIKATIONSNETZ_FRANKEN_EV = 7492\nVENDOR_ID_LDAP_ABOOK = 7493\nVENDOR_ID_ROVOR_TECHNOLOGIES = 7494\nVENDOR_ID_ADVANCED_WEB_SOLUTIONS_INC = 7495\nVENDOR_ID_JB_HOLDING_BV = 7496\nVENDOR_ID_MAGNOLIA_BROADBAND = 7497\nVENDOR_ID_GORSKINET = 7498\nVENDOR_ID_PACIFIC_CENTURY_CYBERWORKS_HONGKONG_TELECOM = 7499\nVENDOR_ID_IICS = 7500\nVENDOR_ID_BKTEL_COMMUNICATIONS_GMBH_SYSTEMS = 7501\nVENDOR_ID_AFRICAN_MEDICAL_IMAGING = 7502\nVENDOR_ID_HENKELS_AND_MCCOY = 7503\nVENDOR_ID_AERSOFT_LTD = 7504\nVENDOR_ID_CALISTA_LTD = 7505\nVENDOR_ID_SCORELINE_TECHNOLOGIES = 7506\nVENDOR_ID_WAYNEWARE = 7507\nVENDOR_ID_FUJI_ELECTRIC_COLTD = 7508\nVENDOR_ID_STORABILITY_INC = 7509\nVENDOR_ID_LUXXON_CORPORATION = 7510\nVENDOR_ID_WDT = 7511\nVENDOR_ID_NETENS_CORPORATION = 7512\nVENDOR_ID_ELIMPEX_MEDIZINTECHNIK_GESMBH = 7513\nVENDOR_ID_ST_HELENS_AND_KNOWSLEY_HOSPITALS_NHS_TRUST = 7514\nVENDOR_ID_P_LANCIER = 7515\nVENDOR_ID_ANDY_STUBBS = 7516\nVENDOR_ID_ACXSYS_CORPORATION = 7517\nVENDOR_ID_CHICAGO_MERCANTILE_EXCHANGE = 7518\nVENDOR_ID_RATEINTEGRATION_INC = 7519\nVENDOR_ID_HARRIS_CORPORATION_FORMERLY_M_A_COM_PRIVATE_RADIO_SYSTEMS_INC = 7520\nVENDOR_ID_LOGICALIS_AUSTRALIA_PTY_LTD_FORMERLY_NETSTAR_NETWORKS = 7521\nVENDOR_ID_BRAINS_CORP = 7522\nVENDOR_ID_ACCESSNET = 7523\nVENDOR_ID_RAPIDSOLUTION_SOFTWARE_GMBH = 7524\nVENDOR_ID_ECAL_CORPORATION = 7525\nVENDOR_ID_SNOM_TECHNOLOGY_AG = 7526\nVENDOR_ID_QUEST_SOFTWARE = 7527\nVENDOR_ID_METABOX_INC = 7528\nVENDOR_ID_NETARX_INC = 7529\nVENDOR_ID_OPTXCON_INC = 7530\nVENDOR_ID_RAPIDWAN = 7531\nVENDOR_ID_MUNAT_INC = 7532\nVENDOR_ID_HONDA_ELECTRON_COLTD = 7533\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_GENOVA = 7534\nVENDOR_ID_CAPCLEAR_LIMITED = 7535\nVENDOR_ID_HH_ZENTRUM_F_RECHNERKOMMUNIKATION_GMBH = 7536\nVENDOR_ID_E2_COMMUNICATIONS = 7537\nVENDOR_ID_VERIPRISE_WIRELESS_COMPANY = 7538\nVENDOR_ID_QUACKCOM = 7539\nVENDOR_ID_ISPSOFT = 7540\nVENDOR_ID_IBUILDINGCOM = 7541\nVENDOR_ID_MOUNT_ALLISON_UNIVERSITY = 7542\nVENDOR_ID_VISIONSHOP = 7543\nVENDOR_ID_WIRELINK_CO_LTD = 7544\nVENDOR_ID_QOSBA_SYSTEMS_CO_LTD = 7545\nVENDOR_ID_AXXESSIT_ASA = 7546\nVENDOR_ID_CSIC_REDIRIS = 7547\nVENDOR_ID_NETCENTRIC_SYSTEMS_LTD = 7548\nVENDOR_ID_DATACENTERDIRECTCOM_INC = 7549\nVENDOR_ID_DELTA_DATA_SOFTWARE = 7550\nVENDOR_ID_ENATEL = 7551\nVENDOR_ID_INFRA_VALLEY = 7552\nVENDOR_ID_TAMPERE_UNIVERSITY_OF_TECHNOLOGY = 7553\nVENDOR_ID_ZLOOPER_MEDIA_PERKASA = 7554\nVENDOR_ID_INSTITUTION_SAINT_JOSEPH = 7555\nVENDOR_ID_MOVILOGIC_SA = 7556\nVENDOR_ID_ECHOMINE = 7557\nVENDOR_ID_NATIONAL_AIR_TRAFFIC_SERVICES_LTD = 7558\nVENDOR_ID_EGENERA_INC = 7559\nVENDOR_ID_TREND_NETWORK_SERVICES = 7560\nVENDOR_ID_ASKOO_SA = 7561\nVENDOR_ID_ICPSR_INTER_UNIVERSITY_CONSORTIUM_FOR_POLITICAL_SOCIAL_RESEARCH = 7562\nVENDOR_ID_ONESPOT_INC = 7563\nVENDOR_ID_CLICKARRRAY_NETWORKS_INC = 7564\nVENDOR_ID_USGS_SOUTH_FLORIDA_INFORMATION_ACCESS_PROJECT = 7565\nVENDOR_ID_CODESTREAM_TECHNOLOGIES_CORPORATION = 7566\nVENDOR_ID_PORTERA_SYSTEMS = 7567\nVENDOR_ID_IRCAM = 7568\nVENDOR_ID_CONVEDIA_CORPORATION = 7569\nVENDOR_ID_BRIENCE_INC = 7570\nVENDOR_ID_SAF_TEHNIKA = 7571\nVENDOR_ID_QUEST_SOFTWARE_2 = 7572\nVENDOR_ID_NBC_INTERNET = 7573\nVENDOR_ID_TORQUE_SYSTEMS_INC = 7574\nVENDOR_ID_MAHARASHTRA_INSTITUTE_OF_TECHNOLOGY_PUNE = 7575\nVENDOR_ID_GEA_IT_SERVICES_GMBH = 7576\nVENDOR_ID_UNIVERSITY_OF_STRATHCLYDE = 7577\nVENDOR_ID_ENERGIS_DEUTSCHLAND = 7578\nVENDOR_ID_UNIVERSITY_OF_FREIBURG = 7579\nVENDOR_ID_ANIX_GROUP_LIMITED = 7580\nVENDOR_ID_ADVENT_NETWORKS_INC = 7581\nVENDOR_ID_E_Z_DATA_INC = 7582\nVENDOR_ID_THE_ELEVEN = 7583\nVENDOR_ID_INTERTRUST_TECHNOLOGIES_CORPORATION = 7584\nVENDOR_ID_GENIUS_SOFTWARE_LTDA = 7585\nVENDOR_ID_PARAMETRIC_TECHNOLOGY_CORPORATION = 7586\nVENDOR_ID_WORLD_DIGITEL_CORPORATION = 7587\nVENDOR_ID_WIS_COMMUNICATION_CO_LTD = 7588\nVENDOR_ID_MEMLINKEYAL = 7589\nVENDOR_ID_BODACHINA = 7590\nVENDOR_ID_DIVISA_INFORMTICA_Y_TELECOMUNICACIONES_SA = 7591\nVENDOR_ID_SWEDISH_INSTITUTE_OF_SPACE_PHYSICS = 7592\nVENDOR_ID_UNIVERSITY_OF_CAMBRIDGE_CLINICAL_AND_BIOMEDICAL_COMPUTING_UNIT = 7593\nVENDOR_ID_CITADEL_INVESTMENT_GROUP = 7594\nVENDOR_ID_RATIO_ENTWICKLUNGEN_GMBH = 7595\nVENDOR_ID_TRELLIS_PHOTONICS = 7596\nVENDOR_ID_NOVA_LJUBLJANSKA_BANKA = 7597\nVENDOR_ID_KTSI = 7598\nVENDOR_ID_REBELCOM_INC = 7599\nVENDOR_ID_EAZEL = 7600\nVENDOR_ID_TRINITY_COLLEGE = 7601\nVENDOR_ID_COVERSDE = 7602\nVENDOR_ID_KINGFISHER_ICT_SERVICES = 7603\nVENDOR_ID_MSE_IT = 7604\nVENDOR_ID_E_POINT_SA = 7605\nVENDOR_ID_THE_UNIVERSITY_OF_ALABAMA_IN_HUNTSVILLE = 7606\nVENDOR_ID_APPGATE_INC = 7607\nVENDOR_ID_CELION_NETWORKS_INC = 7608\nVENDOR_ID_SPINSTATE = 7609\nVENDOR_ID_SOMETHING_4_LTD = 7610\nVENDOR_ID_FEDERAL_RESERVE_SYSTEM = 7611\nVENDOR_ID_DIGI_DATA_CORP = 7612\nVENDOR_ID_PANTHER_SOFTWARE_INC = 7613\nVENDOR_ID_ISOVIA = 7614\nVENDOR_ID_UNIVERSITAT_DE_GIRONA = 7615\nVENDOR_ID_STMICROELECTRONICS = 7616\nVENDOR_ID_STENDAHLSNET_AB = 7617\nVENDOR_ID_ADOMO_INC = 7618\nVENDOR_ID_AMON_TECHNOLOGIES = 7619\nVENDOR_ID_FRANCE_TEASER = 7620\nVENDOR_ID_DISH_NETWORK_LLC_FORMERLY_ECHOSTAR_CORPORATION = 7621\nVENDOR_ID_MESA_SYSTEMS_INTERNATIONAL = 7622\nVENDOR_ID_DXO_TELECOM_CO_LTD = 7623\nVENDOR_ID_AKAL_SYSTEMS = 7624\nVENDOR_ID_COMCON_GMBH = 7625\nVENDOR_ID_UNIVERSITY_OF_OSNABRUECK = 7626\nVENDOR_ID_TELEBROAD_NETWORKS = 7627\nVENDOR_ID_REED_MATTHEWS_INC = 7628\nVENDOR_ID_4UNET = 7629\nVENDOR_ID_TIOGA_TECHNOLOGIES = 7630\nVENDOR_ID_INTERFACE_CONCEPT = 7631\nVENDOR_ID_GNS = 7632\nVENDOR_ID_CITY_UNIVERSITY = 7633\nVENDOR_ID_BUNGEE_COMMUNICATIONS = 7634\nVENDOR_ID_THOMSON_MULTIMEDIA_RD_FRANCE = 7635\nVENDOR_ID_LAPONIA_VEICULOS = 7636\nVENDOR_ID_JPM_CONSULTING = 7637\nVENDOR_ID_CARRIER1 = 7638\nVENDOR_ID_NETVERK_SA = 7639\nVENDOR_ID_QUANTUM_CORP = 7640\nVENDOR_ID_ASTRONOMICAL_SOCIETY_OF_EDINBURGH = 7641\nVENDOR_ID_SPIDERTECH_SOFTWARE_PVT_LTD = 7642\nVENDOR_ID_NATIONAL_CHUNG_CHENG_UNIVERSITY = 7643\nVENDOR_ID_EK_GROEINKAUF_EG = 7644\nVENDOR_ID_NETXL = 7645\nVENDOR_ID_EXEMUS_LTD = 7646\nVENDOR_ID_OREGAN_NETWORKS_LTD = 7647\nVENDOR_ID_NATIONWIDE_MUTUAL_INSURANCE_COMPANY = 7648\nVENDOR_ID_EVERFILE_INC = 7649\nVENDOR_ID_LEIBNIZ_RECHENZENTRUM = 7650\nVENDOR_ID_UNISECURITY = 7651\nVENDOR_ID_DATACORE_SOFTWARE_CORPORATION = 7652\nVENDOR_ID_DASHBIT_INCORPORATED = 7653\nVENDOR_ID_SNONET = 7654\nVENDOR_ID_SEAN_KELLY_INDEPENDENT_CONSULTANT = 7655\nVENDOR_ID_BERTRANDT_AG = 7656\nVENDOR_ID_DISAT_SISTEMAS_TELECOMUNICACIN = 7657\nVENDOR_ID_WEBONOMICS_GMBH = 7658\nVENDOR_ID_UESTC = 7659\nVENDOR_ID_OKIOK_DATA = 7660\nVENDOR_ID_HUMANSCAN_GMBH = 7661\nVENDOR_ID_SOGETEK = 7662\nVENDOR_ID_TARAL_NETWORKS_INC = 7663\nVENDOR_ID_MEZZONET_EASY_TECHNOLOGIE_SL = 7664\nVENDOR_ID_INTRIA_HP_CORP = 7665\nVENDOR_ID_PROVENCO_GROUP_LTD = 7666\nVENDOR_ID_BANQUE_NATIONALE_DU_CANADA = 7667\nVENDOR_ID_PRAETER_TECHNOLOGIES_INC = 7668\nVENDOR_ID_NETWORK_PHOTONICS_INC = 7669\nVENDOR_ID_VIATOR_INCORPORATED = 7670\nVENDOR_ID_INVERTIX_CORPORATION = 7671\nVENDOR_ID_FUJITSU_NNC_LTD_PBN = 7672\nVENDOR_ID_FUSION_COMMUNICATIONS_CORP = 7673\nVENDOR_ID_NORTHERN_PRINCIPLE_LIMITED = 7674\nVENDOR_ID_SPAR_HANDELS_AG = 7675\nVENDOR_ID_STRAWBERRY_SOFTWARE_LIMITED = 7676\nVENDOR_ID_LYNX_PHOTONIC_NETWORKS_INC = 7677\nVENDOR_ID_XYRIUS = 7678\nVENDOR_ID_WINAGCOM = 7679\nVENDOR_ID_CORRIGENT_SYSTEMS_INC = 7680\nVENDOR_ID_TRAKONIC = 7681\nVENDOR_ID_NCIPHER_PLC = 7682\nVENDOR_ID_AIR_LIQUIDE_ELECTRONICS = 7683\nVENDOR_ID_NEXTONE_COMMUNICATIONS = 7684\nVENDOR_ID_KPMG_CONSULTING_LLC = 7685\nVENDOR_ID_PCHES_ET_OCANS_CANADA_GARDE_CTIRE = 7686\nVENDOR_ID_UFSC_LABSEC = 7687\nVENDOR_ID_SOCIAL_CHANGE_ONLINE = 7688\nVENDOR_ID_RASIMUSI = 7689\nVENDOR_ID_THRUPOINT_INC = 7690\nVENDOR_ID_WARP_SOLUTIONS_INC = 7691\nVENDOR_ID_THE_STODDARD_GROUP_INC = 7692\nVENDOR_ID_INTERNATIONAL_LIFE_SCIENCES_INSTITUTE_ILSI = 7693\nVENDOR_ID_SUMMIT_TECHNOLOGIES = 7694\nVENDOR_ID_MEDIA_CLOUD_INC = 7695\nVENDOR_ID_BACH_SYSTEMS_INC = 7696\nVENDOR_ID_ATHABASCA_UNIVERSITY = 7697\nVENDOR_ID_CONTEXT_MEDIA_INC = 7698\nVENDOR_ID_SYNCWAVE_NETWORKS_INC = 7699\nVENDOR_ID_ENDEAVORS_TECHNOLOGY_INC = 7700\nVENDOR_ID_GEMSTONE_SYSTEMS_INC = 7701\nVENDOR_ID_KEICHOLTD = 7702\nVENDOR_ID_ECRIO_INC = 7703\nVENDOR_ID_DER_POLIZEIPRAESIDENT_IN_BERLIN = 7704\nVENDOR_ID_CENTRE_FOR_WIRELESS_COMMUNICATIONS = 7705\nVENDOR_ID_JONCOLCOM = 7706\nVENDOR_ID_PROACTIVE_TECHNOLOGY_LTD = 7707\nVENDOR_ID_WYDEBAND = 7708\nVENDOR_ID_ARISTOTLE_UNIVERSITY_OF_THESSALONIKI = 7709\nVENDOR_ID_AGRILIS_PTY_LTD = 7710\nVENDOR_ID_GNKC = 7711\nVENDOR_ID_SECARTIS_AG = 7712\nVENDOR_ID_TOMORROW_TECHNOLOGIES_MARCUS = 7713\nVENDOR_ID_EVIDIAN = 7714\nVENDOR_ID_EYE_COMMUNICATIONS_AG = 7715\nVENDOR_ID_ART_SPA = 7716\nVENDOR_ID_FLYING_J_INC = 7717\nVENDOR_ID_INA = 7718\nVENDOR_ID_AVILINKS = 7719\nVENDOR_ID_WI_SIMONSON_INC = 7720\nVENDOR_ID_CAATOOSEE_SCHWEIZ_AG = 7721\nVENDOR_ID_NET_LINX_PS_SII = 7722\nVENDOR_ID_BENHAMNET = 7723\nVENDOR_ID_UNASSIGNED_6 = 7724\nVENDOR_ID_HARK_TOWER_SYSTEMS = 7725\nVENDOR_ID_POINTGAIN_CORPORATION = 7726\nVENDOR_ID_CIN_NIC = 7727\nVENDOR_ID_3R_INC = 7728\nVENDOR_ID_TELSON = 7729\nVENDOR_ID_VOXPATH_NETWORKS = 7730\nVENDOR_ID_HOMESTORECOM = 7731\nVENDOR_ID_PHILIPLO = 7732\nVENDOR_ID_PULSAR_TECHNOLOGIES_INC = 7733\nVENDOR_ID_PROQUENT_SYSTEMS_CORPORATION = 7734\nVENDOR_ID_AIRBIQUITY_INC = 7735\nVENDOR_ID_JARNA = 7736\nVENDOR_ID_INTERNET_PHOTONICS_INC = 7737\nVENDOR_ID_ENCENDRA_COMMUNICATIONS = 7738\nVENDOR_ID_DIGENCP = 7739\nVENDOR_ID_NETMONGER_COMMUNICATIONS_CHRISTOPHER = 7740\nVENDOR_ID_SNMP_TECHNOLOGIES = 7741\nVENDOR_ID_APTIRA_PTY_LTD_FORMERLY_ANTITHESYS_PTY_LTD = 7742\nVENDOR_ID_SALOMON_SMITH_BARNEY_AUTRALIA = 7743\nVENDOR_ID_SPE_SYSTEMHAUS_GMBH = 7744\nVENDOR_ID_AETHRA = 7745\nVENDOR_ID_WATERSHED_CONSULTANTS_LTD = 7746\nVENDOR_ID_FEDERATION = 7747\nVENDOR_ID_GLOBECOM_INTERACTIVE = 7748\nVENDOR_ID_HICOM_GMBH = 7749\nVENDOR_ID_HELICON_NETWORKS = 7750\nVENDOR_ID_MDIVERSITY_INC = 7751\nVENDOR_ID_BRAVARA_COMMUNICATIONS_INC = 7752\nVENDOR_ID_ZELPOS = 7753\nVENDOR_ID_INFOSQUARE_CORP = 7754\nVENDOR_ID_DISNEY_TECHNOLOGY_SOLUTIONS_AND_SERVICES = 7755\nVENDOR_ID_NETARENA_COMMUNICATIONS = 7756\nVENDOR_ID_TONBU_INC = 7757\nVENDOR_ID_E_BUSINESSNETWORKCOM = 7758\nVENDOR_ID_EENADUCOM = 7759\nVENDOR_ID_ANYSCAPECOM = 7760\nVENDOR_ID_POINTGOCOM = 7761\nVENDOR_ID_EBIZXMLCOM = 7762\nVENDOR_ID_POINTGAINNET = 7763\nVENDOR_ID_EBUSINESSXCHANGECOM = 7764\nVENDOR_ID_SYSDYNAMICSCOM = 7765\nVENDOR_ID_BUSINESSACROSSCOM = 7766\nVENDOR_ID_EBUSINESSOPENWORLDCOM = 7767\nVENDOR_ID_E_BUSINESSOPENWORLDCOM = 7768\nVENDOR_ID_E_BUSINESSOPENWORLDNET = 7769\nVENDOR_ID_EBUSINESSOPENWORLDNET = 7770\nVENDOR_ID_EBUSINESSACROSSCOM = 7771\nVENDOR_ID_EBIZDYNAMICSCOM = 7772\nVENDOR_ID_E_BUSINESSDYNAMICSCOM = 7773\nVENDOR_ID_EBUSINESSXCOM = 7774\nVENDOR_ID_E_DYNAMICSCOM = 7775\nVENDOR_ID_E_DYNAMICSNET = 7776\nVENDOR_ID_E_DYNAMICSORG = 7777\nVENDOR_ID_EXCESS_TRADE_ZONE_INC = 7778\nVENDOR_ID_INFOBLOX_INC = 7779\nVENDOR_ID_MIRAMETRIC = 7780\nVENDOR_ID_CONSERVATOIRE_NATIONAL_DES_ARTS_ET_METIERS = 7781\nVENDOR_ID_GREEK_SCHOOL_NETWORK = 7782\nVENDOR_ID_RIELLO_SPA = 7783\nVENDOR_ID_LATTIS_ENTERPRISE_MANAGEMENT_LTD = 7784\nVENDOR_ID_RIVNE_COMMUNICATION_TECHNOLOGIES_LTD = 7785\nVENDOR_ID_IBCNET_LTD = 7786\nVENDOR_ID_FRONTSITE_AG = 7787\nVENDOR_ID_LIEBREGTS = 7788\nVENDOR_ID_LPM_ONLINE = 7789\nVENDOR_ID_LISIT_LOMBARDIA_INTEGRATA_SERVIZI_INFOTELEMATICI_PER_ILTERRITORIO = 7790\nVENDOR_ID_CONSEIL_GENERAL_DE_LA_LOIRE = 7791\nVENDOR_ID_INCSHOPKOREA = 7792\nVENDOR_ID_HMS = 7793\nVENDOR_ID_INFINITY_TEL_DATA_INC = 7794\nVENDOR_ID_CUSTOM_SOFTWARE_SOLUTIONS = 7795\nVENDOR_ID_BOWDENGS_TECHNOLOIGES_LLC = 7796\nVENDOR_ID_ACULEUS_INC = 7797\nVENDOR_ID_TOKO_ELECTRIC_CO_LTD = 7798\nVENDOR_ID_THE_PACIFICROOT = 7799\nVENDOR_ID_PREMIER_NETWORK_CO_LTD = 7800\nVENDOR_ID_RADIONET_OY = 7801\nVENDOR_ID_110_LIMITED = 7802\nVENDOR_ID_TERRA_NETWORKS_BRASIL_S_A = 7803\nVENDOR_ID_ELCAN_CORP = 7804\nVENDOR_ID_NETNATION_COMMUNICATIONS_INC = 7805\nVENDOR_ID_TECHSAR = 7806\nVENDOR_ID_STONEWARE_INC = 7807\nVENDOR_ID_REARDEN_STEEL_TECHNOLOGIES_INC = 7808\nVENDOR_ID_PHIL_PEARL_FORMERLY_FINCH_COMPUTER_SERVICES = 7809\nVENDOR_ID_SEEK_SYSTEMS = 7810\nVENDOR_ID_40_STREET_RECORDS = 7811\nVENDOR_ID_PFADI_LIMMATTAL = 7812\nVENDOR_ID_COGETEC_HSI = 7813\nVENDOR_ID_INFINITY_TEL_DATA_INC_2 = 7814\nVENDOR_ID_GILMORE_HOUSE_ASSOCIATES_LTD = 7815\nVENDOR_ID_WISSENSCHAFTLADEN_DORTMUND_EV = 7816\nVENDOR_ID_CHIPHEAD_CONSULTING_INC = 7817\nVENDOR_ID_ROHIT_COMMUNICATIONS_PTE_LTD = 7818\nVENDOR_ID_OPENSOURCE_CONSULT = 7819\nVENDOR_ID_CONFIGATE_INC = 7820\nVENDOR_ID_UNIVERSITY_OF_SILESIA = 7821\nVENDOR_ID_ATHENA_SECURITY = 7822\nVENDOR_ID_CLICKACTION = 7823\nVENDOR_ID_LG_ELECTRONICS_INC = 7824\nVENDOR_ID_COGNIZANT_TECHNOLOGY_SOLUTIONS = 7825\nVENDOR_ID_KPNQWEST_AUSTRIA_GMBH = 7826\nVENDOR_ID_SOFADEX_PURATOS = 7827\nVENDOR_ID_COMMSBLOKECOM = 7828\nVENDOR_ID_AXON_DIGITAL_DESIGN_BV = 7829\nVENDOR_ID_SERVICE_INFO_TECHNO_INC = 7830\nVENDOR_ID_DATAFLEX_DESIGN_COMMUNICATIONS_LIMITED = 7831\nVENDOR_ID_ICSA_LABS = 7832\nVENDOR_ID_DAVEBNET = 7833\nVENDOR_ID_WISSENSCHAFTSLADEN_DORTMUND_EV = 7834\nVENDOR_ID_HOPE_TRANPORTATION = 7835\nVENDOR_ID_NUARK_CO_LTD = 7836\nVENDOR_ID_SUMTEL_COMMUNICATIONS_INC = 7837\nVENDOR_ID_UTOMI_AG = 7838\nVENDOR_ID_TELIA_UK_LIMITED = 7839\nVENDOR_ID_ZELAX = 7840\nVENDOR_ID_SKYNET_LTD = 7841\nVENDOR_ID_UNIVERSIT_PARIS_12_VAL_DE_MARNE = 7842\nVENDOR_ID_CALLERA_LTD = 7843\nVENDOR_ID_KGB_ENTERTAINMENT = 7844\nVENDOR_ID_CIPHER = 7845\nVENDOR_ID_ETRALI = 7846\nVENDOR_ID_THE_EVANGELICAL_LUTHERAN_GOOD_SAMARITAN_SOCIETY = 7847\nVENDOR_ID_SCHSISCHE_STAATSKANZLEI = 7848\nVENDOR_ID_COMMECEONE_AUCTION_SERVICES = 7849\nVENDOR_ID_PENFORD_CORPORATION = 7850\nVENDOR_ID_SOFTWARE_MUNITIONS = 7851\nVENDOR_ID_CYBERELVES = 7852\nVENDOR_ID_TEKNOIDS = 7853\nVENDOR_ID_NAZIT = 7854\nVENDOR_ID_ISI_CNR = 7855\nVENDOR_ID_REALTRONIC = 7856\nVENDOR_ID_XENOSITE = 7857\nVENDOR_ID_OUTCOME_TECHNOLOGY_ASSOCIATES_INC = 7858\nVENDOR_ID_NETMOUNT = 7859\nVENDOR_ID_DATATONE_LTD = 7860\nVENDOR_ID_U4EA_TECHNOLOGIES_LTD = 7861\nVENDOR_ID_HERRNS_PC = 7862\nVENDOR_ID_FREEW3_INC = 7863\nVENDOR_ID_MEGADOT_PTY_LTD = 7864\nVENDOR_ID_LITNET_NOC = 7865\nVENDOR_ID_CORINTHIAN_ENGINEERING_PTY_LTD = 7866\nVENDOR_ID_MAILVISION = 7867\nVENDOR_ID_UNIVERSITE_DE_SHERBROOKE = 7868\nVENDOR_ID_BYZANTIUM_SOLUTIONS_LTD = 7869\nVENDOR_ID_POLSKA_PLATFORMA_INTERNETOWA = 7870\nVENDOR_ID_NICSYS_GBR = 7871\nVENDOR_ID_ARRISTA_TECHNOLOGIES = 7872\nVENDOR_ID_INFO_ONSCREEN_SOFTWARE_SYSTEMS_PTY_LTD = 7873\nVENDOR_ID_HIGHLAND_INJECTION_MOLDING_INC = 7874\nVENDOR_ID_SHIBAURA_INSTITUTE_OF_TECHNOLOGY_SCIENCE_INFORMATION_CENTER = 7875\nVENDOR_ID_STATENS_VEGVESEN = 7876\nVENDOR_ID_BASEFARM_AS = 7877\nVENDOR_ID_THE_UNIVERSITY_OF_THE_SOUTH_PACIFIC = 7878\nVENDOR_ID_T_TELESEC = 7879\nVENDOR_ID_PECO_II_INC_2 = 7880\nVENDOR_ID_COGNITAS_TECHNOLOGIES_INC = 7881\nVENDOR_ID_CITY_OF_PRESCOTT_IT_DEPARTMENT = 7882\nVENDOR_ID_AMIRKCOM = 7883\nVENDOR_ID_FRANCIS_W_PARKER_SCHOOL = 7884\nVENDOR_ID_AREK_DREYER = 7885\nVENDOR_ID_K_APPLICATION = 7886\nVENDOR_ID_NCUBE_CORP = 7887\nVENDOR_ID_IAMBA_TECHNOLOGIES_LTD = 7888\nVENDOR_ID_LINGNAN_UNIVERSITY = 7889\nVENDOR_ID_ARROW_ELECTRONICS_INC = 7890\nVENDOR_ID_CONFEDERATION_OF_NORWEGIAN_BUSINESS_AND_INDUSTRY = 7891\nVENDOR_ID_LANNERTDE = 7892\nVENDOR_ID_YACOM_INTERNET_FACTORY_SA = 7893\nVENDOR_ID_VANCONET_SRO = 7894\nVENDOR_ID_AMETHON_SOLUTIONS = 7895\nVENDOR_ID_RIETUMU_BANKA = 7896\nVENDOR_ID_KNOWLEDGE_BASE_BV = 7897\nVENDOR_ID_OPENET_TELECOM_LTD = 7898\nVENDOR_ID_CAP_GEMINI_PORTUGAL = 7899\nVENDOR_ID_NEUBERGER_HUGHES_GMBH = 7900\nVENDOR_ID_CAPIRO = 7901\nVENDOR_ID_ALBERTA_WELLNET = 7902\nVENDOR_ID_ECOPROG_LTD = 7903\nVENDOR_ID_GREENWICH_CAPITAL_MARKETS = 7904\nVENDOR_ID_NATIONAL_TRAINING_INSTITUTE_INC = 7905\nVENDOR_ID_BRAINWORKERS_SRL = 7906\nVENDOR_ID_ALLIANCE_RACE_CAR_BUILDERS = 7907\nVENDOR_ID_TELSOFT_SOLUTIONS_INC = 7908\nVENDOR_ID_AMERICAN_COMMUNICATION_TECHNOLOGIES_INTERNATIONAL_INC = 7909\nVENDOR_ID_CSTS_INC = 7910\nVENDOR_ID_DREAMINTEK_COLTD = 7911\nVENDOR_ID_STAFFWARE_PLC = 7912\nVENDOR_ID_SPACE_HELLAS_SA = 7913\nVENDOR_ID_QMAIL_LDAP_PROJECT = 7914\nVENDOR_ID_CETEVO_AB = 7915\nVENDOR_ID_PAGE = 7916\nVENDOR_ID_AREA_DE_CIENCIAS_DE_LA_COMPUTACIN_E_INTELIGENCIA_ARTIFICIAL = 7917\nVENDOR_ID_ELECTROSONIC_LTD = 7918\nVENDOR_ID_SPYN_INC = 7919\nVENDOR_ID_NATIONAL_EDUCATION_ASSOCIATION_OF_THE_UNITED_STATES = 7920\nVENDOR_ID_AETHYRNET_SOLUITIONS = 7921\nVENDOR_ID_SPIRO_KOMMUNIKATION = 7922\nVENDOR_ID_ORGANET_GMBH = 7923\nVENDOR_ID_BUNDESAMT_FUER_SICHERHEIT_IN_DER_INFORMATIONSTECHNIK = 7924\nVENDOR_ID_SPECS_GMBH_SURFACE_ANALYSIS_AND_COMPUTER_TECHNOLOGY = 7925\nVENDOR_ID_UNIVERSITY_OF_ANTWERP = 7926\nVENDOR_ID_SPLENDID_INTERNET_GMBH = 7927\nVENDOR_ID_WYSDOM_INC = 7928\nVENDOR_ID_HBOS_PLC = 7929\nVENDOR_ID_TELECOM_ARGENTINA = 7930\nVENDOR_ID_SMCC = 7931\nVENDOR_ID_AMERINET_INCORPORATED = 7932\nVENDOR_ID_PROMISE_TECHNOLOGY_INC = 7933\nVENDOR_ID_SHANGHAI_JIAOTONG_UNIVERSITY = 7934\nVENDOR_ID_IVT = 7935\nVENDOR_ID_YANGJAE_MICRO = 7936\nVENDOR_ID_INPACT_TECHNOLOGIES = 7937\nVENDOR_ID_IEE = 7938\nVENDOR_ID_LISCON_GMBH = 7939\nVENDOR_ID_CELERITAS = 7940\nVENDOR_ID_TECNICA_6000_SL = 7941\nVENDOR_ID_XTEMPUS = 7942\nVENDOR_ID_HOME_WIRELESS_NETWORKS_INC = 7943\nVENDOR_ID_PENNYLAN = 7944\nVENDOR_ID_UMB_BANK_NA = 7945\nVENDOR_ID_FLASHPOINT_TECHNOLOGY_INC = 7946\nVENDOR_ID_MSP_TECHNOLGIES = 7947\nVENDOR_ID_DASIR_ENTERPRISES = 7948\nVENDOR_ID_BROADCLOUD_COMMUNICATIONS_INC = 7949\nVENDOR_ID_OVERTURE_NETWORKS = 7950\nVENDOR_ID_CNCTC = 7951\nVENDOR_ID_TOO_CORPORATION = 7952\nVENDOR_ID_MAJITEK = 7953\nVENDOR_ID_SIEMENS_BUSINESS_SERVICES_AS = 7954\nVENDOR_ID_ALFASKOP_AB = 7955\nVENDOR_ID_INITIO_IT_LSNINGER_AS = 7956\nVENDOR_ID_LARES_TECHNOLOGY = 7957\nVENDOR_ID_EFFICIENT_CHANNEL_CODING_INC = 7958\nVENDOR_ID_GABRIEL_ROMAN = 7959\nVENDOR_ID_FREEREIN = 7960\nVENDOR_ID_HARRY_L_STYRON_ATTORNEY_AT_LAW = 7961\nVENDOR_ID_NOT_ANOTHER_CORPORATION_INC = 7962\nVENDOR_ID_TEBIE = 7963\nVENDOR_ID_MASTER_COMUNICACAO_E_MARKETING_LTDA_CASS = 7964\nVENDOR_ID_INGENIEURBUERO_TARTSCH = 7965\nVENDOR_ID_SPY_INTERNETWORKING = 7966\nVENDOR_ID_TEKBABBLE = 7967\nVENDOR_ID_SPEARHEAD_TECHNOLOGIES_LTD = 7968\nVENDOR_ID_BECOMM = 7969\nVENDOR_ID_ATHELON_CORPORATION = 7970\nVENDOR_ID_TLVEGUTEN_LARS_BAHNER = 7971\nVENDOR_ID_XINGTANG_COMMUNICATION_TECHNOLOGY_COLTD = 7972\nVENDOR_ID_TELEFONICA_DE_ESPAA = 7973\nVENDOR_ID_TURBOMECA = 7974\nVENDOR_ID_ARK_E_MANAGEMENT_LTD = 7975\nVENDOR_ID_BROTSMAN_DREGER_INC = 7976\nVENDOR_ID_VIDSOFT_GMBH = 7977\nVENDOR_ID_FRANCE_TELECOM_HOSTING = 7978\nVENDOR_ID_STORIGEN_SYSTEMS = 7979\nVENDOR_ID_SISTEMAS_Y_APLICACIONES_DE_TELECOMUNICACIONES_SAJOSE_LUIS = 7980\nVENDOR_ID_INTERBIND = 7981\nVENDOR_ID_THE_SIMON_SHAPIRO_FOUNDATION = 7982\nVENDOR_ID_HPEB_HEALTH_TECHNOLOGY_PLANNING_EVALUATION_BOARD = 7983\nVENDOR_ID_TICKET_MASTER_CITYSEARCH_CORP = 7984\nVENDOR_ID_UNIVERSITY_OF_CATANIA = 7985\nVENDOR_ID_IPACCESS = 7986\nVENDOR_ID_UNIVERSITE_DE_PAU_ET_DES_PAYS_DE_LADOUR = 7987\nVENDOR_ID_UNIVERSIT_NANCY_2 = 7988\nVENDOR_ID_IMAG = 7989\nVENDOR_ID_EOI_TECHNOLOGIES_INC = 7990\nVENDOR_ID_ELAWCOM_INC = 7991\nVENDOR_ID_PRFD = 7992\nVENDOR_ID_FACTORIT_SPA = 7993\nVENDOR_ID_CONTINUOUS_COMPUTING_CORP = 7994\nVENDOR_ID_SNELL_WILCOX_LTD = 7995\nVENDOR_ID_ELECTRIC_POWER_RESEARCH_INSTITUTEEPRI = 7996\nVENDOR_ID_BALL_CORPORATION = 7997\nVENDOR_ID_MAILFRIDAY = 7998\nVENDOR_ID_TP_INTERNET = 7999\nVENDOR_ID_IPACE_INC = 8000\nVENDOR_ID_QITEK = 8001\nVENDOR_ID_METAMERGE_AS = 8002\nVENDOR_ID_SWISSCOM_IP_PLUS = 8003\nVENDOR_ID_MID_GMBH = 8004\nVENDOR_ID_PHYSICS_DEPARTMENT_QUEEN_MARY_UNIVERSITY_OF_LONDON = 8005\nVENDOR_ID_EINSTEINET_GMBH = 8006\nVENDOR_ID_THRELLIS_GMBH = 8007\nVENDOR_ID_PACTOLUS_COMMUNICATION_SOFTWARE_INC = 8008\nVENDOR_ID_ISECURITAS = 8009\nVENDOR_ID_EXANET = 8010\nVENDOR_ID_MCKEE_FOODS_CORPORATION = 8011\nVENDOR_ID_HYPERDRIVE_SISTEMAS_LTDA = 8012\nVENDOR_ID_NEXTLEVELCOM_INTERNET_PRODUCTIONS_INC = 8013\nVENDOR_ID_STONEFLY_NETWORKS_INC = 8014\nVENDOR_ID_AIROCON = 8015\nVENDOR_ID_RAVENSBOURNE_COLLEGE_OF_DESIGN_COMMUNICATION = 8016\nVENDOR_ID_PRIMUS_CANADA = 8017\nVENDOR_ID_HOGESCHOOL_VAN_ARNHEM_EN_NIJMEGEN = 8018\nVENDOR_ID_THE_STELLAR_ICE_COMPANY = 8019\nVENDOR_ID_ECOLE_NORMALE_SUPRIEURE_DE_LYON = 8020\nVENDOR_ID_G_A_ENTERPRISES = 8021\nVENDOR_ID_SENETS_BROADBAND_INC = 8022\nVENDOR_ID_INFOCRUISER_INC = 8023\nVENDOR_ID_QUOVADIS_LIMITED = 8024\nVENDOR_ID_FRIENDLYWORKS = 8025\nVENDOR_ID_ROCKBROOK_SYSTEMS_GROUP = 8026\nVENDOR_ID_BINHOSTCOM_INC = 8027\nVENDOR_ID_CAST = 8028\nVENDOR_ID_DCTC = 8029\nVENDOR_ID_PRAKASH_COTTON_MILLS_LTD = 8030\nVENDOR_ID_UNIVERSITY_LIBRARY_OF_KASSEL_GERMANY = 8031\nVENDOR_ID_AGENDA_DOO = 8032\nVENDOR_ID_ALMENDE = 8033\nVENDOR_ID_ROHILL_TECHNOLOGIES_BV = 8034\nVENDOR_ID_RY_ENTERPRISES = 8035\nVENDOR_ID_USANET = 8036\nVENDOR_ID_COLOMAR_GROUP_INC = 8037\nVENDOR_ID_HOMEBASE_WORK_SOLUTIONS = 8038\nVENDOR_ID_SILLY_ANTS = 8039\nVENDOR_ID_THUNDER_SYSTEMS_INC = 8040\nVENDOR_ID_HOSTWAY_CORPORATION = 8041\nVENDOR_ID_ECELL_TECHNOLOGIES_INC = 8042\nVENDOR_ID_PROACTIVEMONITORING_INC = 8043\nVENDOR_ID_MJ_DUCHENE_ASSOCIATES = 8044\nVENDOR_ID_GLEN_LEWIS = 8045\nVENDOR_ID_UTAH_JAVA_USER_GROUP = 8046\nVENDOR_ID_OSEDU = 8047\nVENDOR_ID_AVATAR_INTERNET_SERVICES = 8048\nVENDOR_ID_NETACCESS_INC = 8049\nVENDOR_ID_RISS_TELECOM = 8050\nVENDOR_ID_MICHAEL_MCCAFFERTY = 8051\nVENDOR_ID_TESSERNET_SYSTEMS_INC = 8052\nVENDOR_ID_ISLINGTON_AVE = 8053\nVENDOR_ID_THE_SCAN_SHOP_PTY_LTD = 8054\nVENDOR_ID_OPTILINK_TECHNOLOGIES_COMPANY_LIMITED = 8055\nVENDOR_ID_SHENYANG_NEU_ALPINE_SOFTWARE_COLTD = 8056\nVENDOR_ID_CESNET = 8057\nVENDOR_ID_MESSAGEVINE = 8058\nVENDOR_ID_NET_TO_NET_TECHNOLOGIES = 8059\nVENDOR_ID_ARMSTRONG_ATLANTIC_STATE_UNIVERSITY = 8060\nVENDOR_ID_MULTIPOINT_COMMUNICATIONS_LTD = 8061\nVENDOR_ID_COLORMAX_INTERACTIVE = 8062\nVENDOR_ID_MINNET_COMMUNICATION_LTD = 8063\nVENDOR_ID_GLOBAL_TECHNOLOGY_SOLUTIONS = 8064\nVENDOR_ID_UNI_TER_UNDERWRITING_MANAGEMENT_CORPORATION = 8065\nVENDOR_ID_WATCHMARK_CORPORATION = 8066\nVENDOR_ID_MCI_4 = 8067\nVENDOR_ID_BUFFALO_ROCK_COMPANY = 8068\nVENDOR_ID_ROZZ_ENTERPRISES = 8069\nVENDOR_ID_ZEROHYPE_TECHNOLOGIES_INC = 8070\nVENDOR_ID_SANDSTORM_ENTERPRISES_INC = 8071\nVENDOR_ID_NET_SNMP = 8072\nVENDOR_ID_LUMOS_TECHNOLOGIES_INC = 8073\nVENDOR_ID_BOX_SOLUTIONS_CORPORATION = 8074\nVENDOR_ID_LATERAL_CONCEPTS_AND_DESIGNS = 8075\nVENDOR_ID_SIEMENS_PSE_AUSTRIA = 8076\nVENDOR_ID_CHAMBERSIGN_FRANCE = 8077\nVENDOR_ID_INU_CONSULTANCY = 8078\nVENDOR_ID_ENSOPORTCOM = 8079\nVENDOR_ID_FASTWEB_SPA = 8080\nVENDOR_ID_MAGNUM_SOLUTIONS_LTD = 8081\nVENDOR_ID_SEPATON_INC = 8082\nVENDOR_ID_PACKET_DESIGN = 8083\nVENDOR_ID_TANGALIEUORG = 8084\nVENDOR_ID_IRONSTREAM_INC = 8085\nVENDOR_ID_NUASIS_CORPORATION = 8086\nVENDOR_ID_TIERNEXT = 8087\nVENDOR_ID_DCSI = 8088\nVENDOR_ID_COVAD_COMMUNICATIONS = 8089\nVENDOR_ID_ENTERPRISE_COMPUTING_SERVICES = 8090\nVENDOR_ID_IP_SOFT_INC = 8091\nVENDOR_ID_ELGO_MARIBOR_DOO = 8092\nVENDOR_ID_ALIROO_LTD = 8093\nVENDOR_ID_DREAMARTS_CORP = 8094\nVENDOR_ID_INELCOM_INGENIERA_ELECTRNICA_COMERCIAL_SA = 8095\nVENDOR_ID_THE_VOICE_TECHNOLOGY_FORUM = 8096\nVENDOR_ID_SERVICOM_2000_S_L = 8097\nVENDOR_ID_MORAT_GAMES_LTD = 8098\nVENDOR_ID_ALEX_WILSON_COLDSTREAM_LTD = 8099\nVENDOR_ID_SOFTRICITY_INC = 8100\nVENDOR_ID_ZAMBEEL_INC = 8101\nVENDOR_ID_MARK_MORGAN_ENTERPRISES = 8102\nVENDOR_ID_WINSTECHNET_COLTD = 8103\nVENDOR_ID_SUN_MICROSYSTEMS_PROFESSIONAL_SERVICES = 8104\nVENDOR_ID_APPILOG = 8105\nVENDOR_ID_LUXMATE_CONTROLS_GMBH = 8106\nVENDOR_ID_KABIRA = 8107\nVENDOR_ID_VHI = 8108\nVENDOR_ID_PRICE_EXPRESS = 8109\nVENDOR_ID_MESSAGE_CENTRAL_PLC = 8110\nVENDOR_ID_PACIFIC_TRADE_TECHNOLOGY = 8111\nVENDOR_ID_GREEN_SHIELD_CANADA = 8112\nVENDOR_ID_BELLANET_INTERNATIONAL_SECRETARIAT = 8113\nVENDOR_ID_NAVAL_OPERATIONAL_LOGISITICS_SUPPORT_CENTER = 8114\nVENDOR_ID_BIRCH_TELECOM = 8115\nVENDOR_ID_DANWARE_DATA_A_S = 8116\nVENDOR_ID_NAFEM_NORTH_AMERICAN_ASSOCIATION_OF_FOOD_EQUIPMENT_MANUFACTURERS = 8117\nVENDOR_ID_CAPITOL_SYSTEMS_CORPORATION = 8118\nVENDOR_ID_MISSION_VALLEY_REGIONAL_OCCUPATIONAL_PROGRAM_DAVID = 8119\nVENDOR_ID_TRANSVIRTUAL_TECHNOLOGIES_INC = 8120\nVENDOR_ID_RIDGEWAY_SYSTEMS_SOFTWARE_LTD = 8121\nVENDOR_ID_KB_IMPULS_SERVICE_GMBH = 8122\nVENDOR_ID_KOMPETENZNETZ_MALIGNE_LYMPHOME = 8123\nVENDOR_ID_CARREFOUR = 8124\nVENDOR_ID_INTERNET_SERVICES = 8125\nVENDOR_ID_MY_DOCS_ONLINE_INC = 8126\nVENDOR_ID_EFFINITY_LABS = 8127\nVENDOR_ID_BOCO_2 = 8128\nVENDOR_ID_JADEBIRD_HUAGUANG_LTD_CO = 8129\nVENDOR_ID_HEIMANN_BIOMETRIC_SYSTEMS_GMBH = 8130\nVENDOR_ID_GLORY_TELECOM_COLTD = 8131\nVENDOR_ID_NASIK_WELDING_PRODUCTS_PVTLTD = 8132\nVENDOR_ID_FSSC_LONDON = 8133\nVENDOR_ID_INSITEL = 8134\nVENDOR_ID_ANDONG_NATIONAL_UNIVERSITY = 8135\nVENDOR_ID_CENTRUL_DE_PREGATIRE_IN_INFORMATICA = 8136\nVENDOR_ID_PALISADE_SYSTEMS = 8137\nVENDOR_ID_DE_ROECK_SOFTWARE_ENGINEERING_BVBA = 8138\nVENDOR_ID_AAXION_SOFTWARE_CORPORATION = 8139\nVENDOR_ID_C2_TECHNOLOGIES_INC = 8140\nVENDOR_ID_KASHPUREFF_BOLING_LABORATORIES_INC = 8141\nVENDOR_ID_HCA_THE_HEALTHCARE_COMPANY = 8142\nVENDOR_ID_ICTV_2 = 8143\nVENDOR_ID_FIBERXON_CHINA_CORP_LTD = 8144\nVENDOR_ID_UNIVERSITY_OF_SALZBURG = 8145\nVENDOR_ID_SNAKEGULLY = 8146\nVENDOR_ID_MERCURY_TELECOMMUNICATIONS = 8147\nVENDOR_ID_NIRAGONGO_TECHNOLOGIES_LTD = 8148\nVENDOR_ID_GENERALITAT_VALENCIANA = 8149\nVENDOR_ID_SECARON_AG = 8150\nVENDOR_ID_WORLDWEBNET = 8151\nVENDOR_ID_VISTO_CORPORATION = 8152\nVENDOR_ID_JGUILD_INTERNATION_LTD = 8153\nVENDOR_ID_RISER_MANAGEMENT_SYSTEMS = 8154\nVENDOR_ID_TRANSCEPT_INC = 8155\nVENDOR_ID_AGENCYWORKS = 8156\nVENDOR_ID_SYNCOM_NETWORK_INC = 8157\nVENDOR_ID_MSP_LUB = 8158\nVENDOR_ID_SHIN_SATELLITE_PUBLIC_COMPANY_LIMITED_PHO = 8159\nVENDOR_ID_DIGITAL_PLATFORM_SUPPORT_SERVICES = 8160\nVENDOR_ID_STAR_HOME_GMBH = 8161\nVENDOR_ID_DEXIA = 8162\nVENDOR_ID_DOUBLE_D_ELECTRONICS_LTD = 8163\nVENDOR_ID_STARENT_NETWORKS = 8164\nVENDOR_ID_BOUTEMYCOM = 8165\nVENDOR_ID_VIAG_INTERKOM = 8166\nVENDOR_ID_TRANSVERSAL = 8167\nVENDOR_ID_NECTARCOM = 8168\nVENDOR_ID_CARROLL_LUTHERAN_VILLAGE = 8169\nVENDOR_ID_MONITOR_GROUP = 8170\nVENDOR_ID_ONI_SOLUTIONS = 8171\nVENDOR_ID_JOHNS_HOPKINS_UNIVERSITY_MSEL_LCS = 8172\nVENDOR_ID_INDRA_SISTEMAS = 8173\nVENDOR_ID_NETBURNER = 8174\nVENDOR_ID_CARRIER9_NETWORKS = 8175\nVENDOR_ID_ASTRODESIGNINC = 8176\nVENDOR_ID_HCL_COMMUNICATIONS = 8177\nVENDOR_ID_JUST_INNOVATIVE_SOFTWARE_GMBH = 8178\nVENDOR_ID_COMMUNICATIONS_LABORATORIES_TELEKOMMUNIKATIONS_DIENSTLEISTUNGS_GESMBH = 8179\nVENDOR_ID_SPIREA = 8180\nVENDOR_ID_COMMARCO_GMBH_FORMERLY_SCHOLZ_FRIENDS_DRESDEN_GMBH = 8181\nVENDOR_ID_THE_BOSTON_BIT_CO = 8182\nVENDOR_ID_NETSOURCE_AMERICA_INC = 8183\nVENDOR_ID_INSPIRA_SL = 8184\nVENDOR_ID_ONLINE_CREATION_INC = 8185\nVENDOR_ID_CALIFORNIA_INSTITUTE_OF_TECHNOLOGY = 8186\nVENDOR_ID_SHARINGA_NETWORKS_INC = 8187\nVENDOR_ID_AXA_TECHNOLOGY_SERVICES_SWITZERLAND_AG_FORMERLY_WINTERTHUR_VERSICHERUNGEN = 8188\nVENDOR_ID_GERICHHAUSEN_ADOMEIT_TERSTAPPEN_GMBH = 8189\nVENDOR_ID_3M_DEUTSCHLAND_GMBH_FORMERLY_QUANTE = 8190\nVENDOR_ID_GLUTAMAT = 8191\nVENDOR_ID_SYMBIONT_NETWORKS_INC = 8192\nVENDOR_ID_TELEMETRY_TECHNOLOGIES = 8193\nVENDOR_ID_TARGETNETCOM_INC = 8194\nVENDOR_ID_EFFINITY_NET_LC = 8195\nVENDOR_ID_TELDAR_CORPORATION = 8196\nVENDOR_ID_LEARNINGSOFT_CORP = 8197\nVENDOR_ID_EBUILT_INC = 8198\nVENDOR_ID_INSTITUTO_TECNOLGICO_AUTNOMO_DE_MXICO = 8199\nVENDOR_ID_UNNATI_COMPUTERS = 8200\nVENDOR_ID_XCELARON_PTY_LTD = 8201\nVENDOR_ID_TORO_ASSICURAZIONI_SPA = 8202\nVENDOR_ID_LPG_INNOVATIONS = 8203\nVENDOR_ID_CYMTEC_SYSTEMS_INC = 8204\nVENDOR_ID_UNASSIGNED_7 = 8205\nVENDOR_ID_CENTRO_REGIONAL_DE_INVESTIGACIONES_BASICAS_Y_APLICADAS_DE_BAHIA_BLANCA = 8206\nVENDOR_ID_INTEGRATUS_INC = 8207\nVENDOR_ID_BEST_WESTERN_INTERNATIONAL = 8208\nVENDOR_ID_INFORMIO = 8209\nVENDOR_ID_CENTEGY = 8210\nVENDOR_ID_SHENZHEN_TCL_COMMUNICATION_TECHNOLOGY_COLTD = 8211\nVENDOR_ID_HARBOUR_NETWORKS_CO = 8212\nVENDOR_ID_FACULTY_OF_MEDICINE_UNIVERSITY_OF_SYDNEY = 8213\nVENDOR_ID_ATOMICA = 8214\nVENDOR_ID_AUTHENTIFIED = 8215\nVENDOR_ID_CYZEN_TECHCOLTD = 8216\nVENDOR_ID_SLAONLINECOM_LTD = 8217\nVENDOR_ID_EC_ERDOELCHEMIE_GMBH = 8218\nVENDOR_ID_ECOMDA = 8219\nVENDOR_ID_TCL_HOLDINGS_CO_LTD = 8220\nVENDOR_ID_BAE_SYSTEMS_INTEGRATED_DEFENSE_SOLUTIONS = 8221\nVENDOR_ID_MATTHEW_WHITE = 8222\nVENDOR_ID_ATLAS_COMMERCE = 8223\nVENDOR_ID_LEASEDMINDS = 8224\nVENDOR_ID_OPEN_CONNECT_AG = 8225\nVENDOR_ID_GIGANEWSCOM_INC = 8226\nVENDOR_ID_CYBEROBJECT_CORP = 8227\nVENDOR_ID_JALAN_NETWORK_SERVICES_INC = 8228\nVENDOR_ID_PHIL_SYSTEMS = 8229\nVENDOR_ID_RING_ROSA_PRODUCTS_BV = 8230\nVENDOR_ID_LINEO = 8231\nVENDOR_ID_FACHHOCHSCHULE_GIESSEN_FRIEDBERG = 8232\nVENDOR_ID_IBASIS_INC = 8233\nVENDOR_ID_ECET_INTERNATIONAL = 8234\nVENDOR_ID_CENIT_AG_SYSTEMHAUS = 8235\nVENDOR_ID_WHITE_HORSE_INTERACTIVE = 8236\nVENDOR_ID_NCC_GMBH = 8237\nVENDOR_ID_LUTHERAN_BROTHERHOOD = 8238\nVENDOR_ID_PERIBIT_NETWORKS = 8239\nVENDOR_ID_PATH_1 = 8240\nVENDOR_ID_SECURANT_TECHNOLOGIES = 8241\nVENDOR_ID_SECURITY_PORTAL_INC = 8242\nVENDOR_ID_IPASS_INC_2 = 8243\nVENDOR_ID_BROCADE_COMMUNICATIONS_SYSTEMS_INC_FORMERLY_MCDATA_CORP = 8244\nVENDOR_ID_VSOVT_LTD = 8245\nVENDOR_ID_CISTRON_INTERNET_SERVICES = 8246\nVENDOR_ID_UNIVERSITY_OF_ROSTOCK = 8247\nVENDOR_ID_TURIN_NETWORKS_INC = 8248\nVENDOR_ID_VEREIN_FR_COMPUTERGENEALOGIE_EV = 8249\nVENDOR_ID_SHIRENET_LLC = 8250\nVENDOR_ID_IIGA_COLTD = 8251\nVENDOR_ID_DIGITAL_STRATEGIES_INC = 8252\nVENDOR_ID_AWOLARTCOM = 8253\nVENDOR_ID_ALEPH_NULL_INC = 8254\nVENDOR_ID_TEJAS_NETWORKS = 8255\nVENDOR_ID_SOLUTION_THE_COMPUTER_PEOPLE_EK = 8256\nVENDOR_ID_SOUTHERN_URAL_STATE_UNIVERSITY = 8257\nVENDOR_ID_KUK_SYSTEMPROGRAMMIERUNG = 8258\nVENDOR_ID_BANCO_DE_SABADELL_SA = 8259\nVENDOR_ID_INTREXA_CORP = 8260\nVENDOR_ID_MEDIACAST = 8261\nVENDOR_ID_WAVION = 8262\nVENDOR_ID_JAMBY_BV = 8263\nVENDOR_ID_RECREATIVOS_FRANCO_SA = 8264\nVENDOR_ID_ENTRADA_NETWORKS_INC = 8265\nVENDOR_ID_INTELNET_SA = 8266\nVENDOR_ID_ARULA_SYSTEMS = 8267\nVENDOR_ID_MARK_TIPPETTS = 8268\nVENDOR_ID_CJSC_MALVA = 8269\nVENDOR_ID_MJL_TECHNOLOGY = 8270\nVENDOR_ID_FACHHOCHSCHULE_VORARLBERG = 8271\nVENDOR_ID_NAMEPLANET_LTD = 8272\nVENDOR_ID_STANDARD_COMMUNICATIONS = 8273\nVENDOR_ID_INTERADNET = 8274\nVENDOR_ID_INSA_TOULOUSE = 8275\nVENDOR_ID_MPATHIX = 8276\nVENDOR_ID_PSC_ITSOLUTIONSNET = 8277\nVENDOR_ID_ST_ELISABETH_GMBH = 8278\nVENDOR_ID_F3PU5NET = 8279\nVENDOR_ID_FIVER_LIGHTCOM_CO_LTD = 8280\nVENDOR_ID_MOVELIFE = 8281\nVENDOR_ID_BAE_SYSTEMS_DEFENCE_PTY_LTD_FORMERLY_TENIX_DEFENCE_SYSTEMS_SYSTEMS_ADELAIDE = 8282\nVENDOR_ID_TSMT_MAGIC_TOUCH_LTD = 8283\nVENDOR_ID_ACTL = 8284\nVENDOR_ID_FLEXLIGHT = 8285\nVENDOR_ID_INCIRCO = 8286\nVENDOR_ID_KLINIKUM_DER_JOHANNES_GUTENBERG_UNIVERSITT_MAINZ = 8287\nVENDOR_ID_JUNG_VON_MATT_WERBEAGENTUR_GMBH = 8288\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_NAPOLI_FEDERICO_II = 8289\nVENDOR_ID_CERTUS_TECHNOLOGY_INC = 8290\nVENDOR_ID_DIGISTAMP_INC = 8291\nVENDOR_ID_MT_HOLYOKE_COLLEGE = 8292\nVENDOR_ID_BANG_NETWORKS_INC = 8293\nVENDOR_ID_INFOMAN = 8294\nVENDOR_ID_BWA = 8295\nVENDOR_ID_DIALOGOS3_SRL = 8296\nVENDOR_ID_IRISONLINECOM_BV = 8297\nVENDOR_ID_V_H_NICTOGLOBE = 8298\nVENDOR_ID_SECUNET_SECURITY_NETWORKS_AG = 8299\nVENDOR_ID_STATE_OF_WISCONSIN_SECURITY_AND_DIRECTORY_SERVICES = 8300\nVENDOR_ID_TECHNISCHE_UNIVERSITAET_DARMSTADT = 8301\nVENDOR_ID_EDENET_COMMUNICATIONS_INC = 8302\nVENDOR_ID_GELCO_INFORMATION_NETWORK = 8303\nVENDOR_ID_ATOMIC_BLUE_BEAR = 8304\nVENDOR_ID_OARNET = 8305\nVENDOR_ID_GO_LOCAL_CONSULTING_INC = 8306\nVENDOR_ID_TECNETDEV = 8307\nVENDOR_ID_GTRAN_INC = 8308\nVENDOR_ID_VIRTELA_COMMUNICATIONS = 8309\nVENDOR_ID_TRAK_SYSTEMS = 8310\nVENDOR_ID_POLICE_INFORMATION_TECHNOLOGY_ORGANIZATION = 8311\nVENDOR_ID_OSKOLNET_JSC = 8312\nVENDOR_ID_JARDIX_AG = 8313\nVENDOR_ID_AVL_EMISSION_TEST_SYSTEMS_GMBH_FORMERLY_PEUS_SYSTEMS_GMBH = 8314\nVENDOR_ID_MINACOM_LABS_INC = 8315\nVENDOR_ID_STAFFWELL = 8316\nVENDOR_ID_FIBERCYCLE_NETWORKS = 8317\nVENDOR_ID_TWISTED_PAIR_SOLUTIONS_INC = 8318\nVENDOR_ID_BLUE_WAVE_SYSTEMS = 8319\nVENDOR_ID_VONOVA_CORPORATION = 8320\nVENDOR_ID_ENTIDAD_ACREDITADORA_LEY_19799_GOBIERNO_DE_CHILE = 8321\nVENDOR_ID_EDUCATION_NETWORKS_OF_AMERICA = 8322\nVENDOR_ID_GEMTEQ_SOFTWARE = 8323\nVENDOR_ID_THE_UNIVERSITY_OF_WESTERN_AUSTRALIA = 8324\nVENDOR_ID_WANADOO_SPAIN = 8325\nVENDOR_ID_UNREAL_TECHNOLOGY_SPOL_S_RO = 8326\nVENDOR_ID_IUFM_REIMS = 8327\nVENDOR_ID_GYD_IBERICA = 8328\nVENDOR_ID_IPROMOGROUP_LTD = 8329\nVENDOR_ID_OMNEXUS_NV_AMSTERDAM_WDENSWIL_BRANCH = 8330\nVENDOR_ID_MATTI_VALTUUSTOON = 8331\nVENDOR_ID_UNIVERSIT_DEVRY_VAL_DESSONNE = 8332\nVENDOR_ID_GROWCOLTD = 8333\nVENDOR_ID_DYNAMICSOFT_INC = 8334\nVENDOR_ID_UNIVERSIT_DES_SCIENCES_SOCIALES_DE_TOULOUSE = 8335\nVENDOR_ID_SUPERIOR_CONSULTANT_HOLDINGS_CORPORATION = 8336\nVENDOR_ID_HYBRICON_CORP = 8337\nVENDOR_ID_PHONETICS_INC = 8338\nVENDOR_ID_YOUNG_LARAMORE = 8339\nVENDOR_ID_IMAGE_COMPUTING_INCORPORATED = 8340\nVENDOR_ID_UTILITY_DATA_SYSTEMS_INC = 8341\nVENDOR_ID_NTRU_CRYPTOSYSTEMS = 8342\nVENDOR_ID_NEXTRA_CZECH_REPUBLIC_SRO = 8343\nVENDOR_ID_APPARATE_NETWORKS = 8344\nVENDOR_ID_HEALTH_NET_INC = 8345\nVENDOR_ID_UNIVERSIT_DE_LIMOGES_SCI_LAINE_JEAN = 8346\nVENDOR_ID_TECHNOCAGE_INC = 8347\nVENDOR_ID_DATA_AVENUE_INC = 8348\nVENDOR_ID_CONNECTSCAPE_INC = 8349\nVENDOR_ID_T_SYSTEMS_HUNGARY_KFT = 8350\nVENDOR_ID_I_LAND_INTERNET_SERVICES = 8351\nVENDOR_ID_PRONYM_SARL = 8352\nVENDOR_ID_EXCELSIOR_SYSTEMS_LIMITED = 8353\nVENDOR_ID_GIB = 8354\nVENDOR_ID_SARFATAS_NET = 8355\nVENDOR_ID_VISUAL_REVOLUTIONS = 8356\nVENDOR_ID_MANGOSOFT_CORPORATION = 8357\nVENDOR_ID_TELOS_TECHNOLOGY_INC = 8358\nVENDOR_ID_IP_BLUE = 8359\nVENDOR_ID_MIRANT_CORPORATION = 8360\nVENDOR_ID_PORTAIL_DES_IUFM = 8361\nVENDOR_ID_MSAFE = 8362\nVENDOR_ID_STORE_O_MATIC_INC = 8363\nVENDOR_ID_LICHEN_HOSTING = 8364\nVENDOR_ID_ADVANCED_INFORMATION_MANAGEMENT_SOLUTIONS_PTY_LTD = 8365\nVENDOR_ID_FIBERLINK_COMMUNICATIONS_CORP = 8366\nVENDOR_ID_NATIONNETCOM = 8367\nVENDOR_ID_SERVERWERKS_INC = 8368\nVENDOR_ID_NTIKOREA = 8369\nVENDOR_ID_NEXTSET = 8370\nVENDOR_ID_AGENDA = 8371\nVENDOR_ID_UNIVERSITY_OF_SUSSEX = 8372\nVENDOR_ID_SEAL_SYSTEMS_AG_CO_KG = 8373\nVENDOR_ID_DVZ_DATENVERARBEITUNGSZENTRUM_MECKLENBURG_VORPOMMERN = 8374\nVENDOR_ID_OUTERCURVE_TECHNOLOGIES = 8375\nVENDOR_ID_UNIVERSIT_DE_BOURGOGNE = 8376\nVENDOR_ID_REEFEDGE_INC = 8377\nVENDOR_ID_TEXAS_MEMORY_SYSTEMS = 8378\nVENDOR_ID_BROADRIVER_COMMUNICATIONS = 8379\nVENDOR_ID_MENTUM_GROUP = 8380\nVENDOR_ID_CERTAINTY_SOLUTIONS_INC = 8381\nVENDOR_ID_CC_ENGINEERING_INC = 8382\nVENDOR_ID_SIGMASOFT_INC = 8383\nVENDOR_ID_EBAY_INC = 8384\nVENDOR_ID_ENSAM_CER_DE_METZ = 8385\nVENDOR_ID_LION_BIOSCIENCE_AG = 8386\nVENDOR_ID_GLOBE_INTERNET_SRO = 8387\nVENDOR_ID_TECHNIKER_KRANKENKASSE = 8388\nVENDOR_ID_ERGON_INFORMATIK = 8389\nVENDOR_ID_METTLER_TOLEDO = 8390\nVENDOR_ID_BICMAN_NETOLOGIES = 8391\nVENDOR_ID_XMISSION = 8392\nVENDOR_ID_GIMAS_MBH = 8393\nVENDOR_ID_PRIVADOR_AS = 8394\nVENDOR_ID_TULANE_UNIVERSITY = 8395\nVENDOR_ID_VIRTUAL_EARTH_GESELLSCHAFT_FR_WISSENS_RE_PR_SENTATION_MBH = 8396\nVENDOR_ID_VECERINA = 8397\nVENDOR_ID_UNIVERSITY_OF_WEST_FLORIDA = 8398\nVENDOR_ID_IVEA_TECHNOLOGIES = 8399\nVENDOR_ID_EVERCOM_SYSTEMS_INC = 8400\nVENDOR_ID_FOXTRAVEL = 8401\nVENDOR_ID_EPLUS_INC = 8402\nVENDOR_ID_ARA_NETWORK_TECHNOLOGIES_CO_LTD = 8403\nVENDOR_ID_AKAMBA_CORPORATION = 8404\nVENDOR_ID_TOHONO_CONSULTING = 8405\nVENDOR_ID_MORNINGSTAR_SYSTEMS_INC = 8406\nVENDOR_ID_MYBAUCOM = 8407\nVENDOR_ID_INTERCOMPONENTWARE_AG = 8408\nVENDOR_ID_ZTEVISION = 8409\nVENDOR_ID_LANDIS_GYR_COMMUNICATIONS_SAS = 8410\nVENDOR_ID_E_QUAL = 8411\nVENDOR_ID_SATYAM_COMPUTER_SERVICES_LTD = 8412\nVENDOR_ID_GLOBALNAPS = 8413\nVENDOR_ID_CEDACRI_SPA = 8414\nVENDOR_ID_CYBERELAN_LLC = 8415\nVENDOR_ID_SHAW_CABLESYSTEMS_GP = 8416\nVENDOR_ID_STORAGEAPPS_INC = 8417\nVENDOR_ID_LISTLESS_ENNUI = 8418\nVENDOR_ID_ROCKWELL_COLLINS = 8419\nVENDOR_ID_DIGI_SIGN_CERTIFICATION_SERVICES_LIMITED = 8420\nVENDOR_ID_VODTEL_COMMUNICATIONS_INC = 8421\nVENDOR_ID_LIBRITAS_INC = 8422\nVENDOR_ID_TWISD_AG = 8423\nVENDOR_ID_ICUBE_SRL = 8424\nVENDOR_ID_AP_ENGINES_INC = 8425\nVENDOR_ID_WATLOW = 8426\nVENDOR_ID_WORLDGATE_NETWORKS_PRIVATE_LIMITED = 8427\nVENDOR_ID_TURTLE_ENTERTAINMENT_GMBH = 8428\nVENDOR_ID_2NETFX_MEDIA_NOW_INCDBA_2NETFX = 8429\nVENDOR_ID_TRANSWITCH_CORPORATION = 8430\nVENDOR_ID_BROADCASTING_INTEREST_ENTERPRISE_INCCHRISTOPHER = 8431\nVENDOR_ID_TERAGLOBAL_COMMUNICATIONS = 8432\nVENDOR_ID_3E_TECHNOLOGIES_INTERNATIONAL_INC = 8433\nVENDOR_ID_FOX_CHASE_CANCER_CENTER = 8434\nVENDOR_ID_HYPEREDGE_INC = 8435\nVENDOR_ID_REQUISITE_TECHNOLOGY = 8436\nVENDOR_ID_BOLDER_INTERNET_GROUP_INC = 8437\nVENDOR_ID_REFLEX_COMMUNICATIONS_INC = 8438\nVENDOR_ID_CADRE_DESIGN = 8439\nVENDOR_ID_TSUDA_COLLEGE = 8440\nVENDOR_ID_SHANGHAI_WAIGAOQIAO_FREE_TRADE_ZONE_NETWORK_DEVELOPMENT_COLTD = 8441\nVENDOR_ID_SENDTEK_CORPORATION = 8442\nVENDOR_ID_TELISMA = 8443\nVENDOR_ID_IIE_INSTITUT_DINFORMATIQUE_DENTREPRISE = 8444\nVENDOR_ID_BILSTONE_LTD = 8445\nVENDOR_ID_BARCLAYCARD = 8446\nVENDOR_ID_RIVERGLADE_CONSULTANTS_LTD = 8447\nVENDOR_ID_AVANTIS_GMBH = 8448\nVENDOR_ID_EPUREDATA_INC = 8449\nVENDOR_ID_CETACEAN_NETWORKS = 8450\nVENDOR_ID_PETRI_LAITINEN = 8451\nVENDOR_ID_GUERNSEYNET_LTD = 8452\nVENDOR_ID_NPWNET = 8453\nVENDOR_ID_DONALD_E_REYNOLDS = 8454\nVENDOR_ID_OLD_DONKEY_ENTERPRISES = 8455\nVENDOR_ID_OPTIBASE = 8456\nVENDOR_ID_DEEPEND_PRAGUE = 8457\nVENDOR_ID_ZOOM_NETWORKS_INC = 8458\nVENDOR_ID_SHANDONG_WEIFANG_BEIDA_JADEBIRD_INC = 8459\nVENDOR_ID_UNIVERSITY_OF_ILLINOIS_AT_CHICAGO = 8460\nVENDOR_ID_UFO_SOLUTIONS_LIMITED = 8461\nVENDOR_ID_SONICNET_INC = 8462\nVENDOR_ID_PEM_ELECTRONICS = 8463\nVENDOR_ID_UNIVERSITY_OF_WOLLONGONG_IEEE_STUDENT_BRANCH = 8464\nVENDOR_ID_LODESOFT_CORP = 8465\nVENDOR_ID_RAWK_SYSTEMS_INC = 8466\nVENDOR_ID_LA_PAGE_TRAD = 8467\nVENDOR_ID_AMERICAN_MEDICAL_ASSOCIATION = 8468\nVENDOR_ID_DOMESTIC_WANS = 8469\nVENDOR_ID_LEARNING_MACHINES_INC = 8470\nVENDOR_ID_UNIVERSIDAD_DEL_BIO_BIO = 8471\nVENDOR_ID_LYNK_A_DIVISION_OF_BOS_LTD = 8472\nVENDOR_ID_UNIVERSITY_OF_MASSACHUSETTS_AMHERST = 8473\nVENDOR_ID_SALTEC_POWERLINK = 8474\nVENDOR_ID_VEILEX = 8475\nVENDOR_ID_KYUDEN_INFOCOM_COMPANY_INC = 8476\nVENDOR_ID_CYBERTRON_SOFTWARE_GMBH = 8477\nVENDOR_ID_TONGTECH_CO_LTD = 8478\nVENDOR_ID_NOWCOM = 8479\nVENDOR_ID_FAIRLEIGH_DICKINSON_UNIVERSITY = 8480\nVENDOR_ID_HIGHKU = 8481\nVENDOR_ID_COLORADO_STATE_UNIVERSITY = 8482\nVENDOR_ID_TRENZA_CORP = 8483\nVENDOR_ID_ALLEGHENY_ENERGY = 8484\nVENDOR_ID_VIRTUAL_SOFTWARE_SL = 8485\nVENDOR_ID_CITY_NET_TECH_INC = 8486\nVENDOR_ID_MIGHTYVIEW_INC = 8487\nVENDOR_ID_UNIVERSITY_OF_ALABAMA = 8488\nVENDOR_ID_PICO_TECHNOLOGY_LTD = 8489\nVENDOR_ID_DIRECT_COMMERCE = 8490\nVENDOR_ID_DRZYZGULAORG = 8491\nVENDOR_ID_ISCANET_INTERNET_SERVICES = 8492\nVENDOR_ID_WEB_OFFICE_CHINA = 8493\nVENDOR_ID_MOSAIC_SOFTWARE_AG = 8494\nVENDOR_ID_MILESYS = 8495\nVENDOR_ID_FACILITAIR_BEDRIJF_HOGESCHOOL_VAN_UTRECHT = 8496\nVENDOR_ID_DELUXE_VIDEO_SERVICES_LTD = 8497\nVENDOR_ID_AKUMIITTI_LTD = 8498\nVENDOR_ID_EDUSERV = 8499\nVENDOR_ID_DR_NAGLER_CIE_CONSULT_GMBH = 8500\nVENDOR_ID_ANTEL_OPERATIONS = 8501\nVENDOR_ID_INTERNET_PARK_INC = 8502\nVENDOR_ID_UNICESS_NETWORKS = 8503\nVENDOR_ID_SPARZO_ENTERPRISES = 8504\nVENDOR_ID_SKYTEC_AG = 8505\nVENDOR_ID_XIMIAN_INC = 8506\nVENDOR_ID_CYBERTRAILS_LLC = 8507\nVENDOR_ID_FINAL_PIECE = 8508\nVENDOR_ID_VINAWARA_COLTD = 8509\nVENDOR_ID_YUNBJ_COLTD = 8510\nVENDOR_ID_THOUGHTWORKS_INC = 8511\nVENDOR_ID_CAPGEMINI_TELECOM_MEDIA_NETWORKS_SWEDEN_AB = 8512\nVENDOR_ID_KATELCO = 8513\nVENDOR_ID_SONOCOMP_GMBH = 8514\nVENDOR_ID_DEONET_CO_LTD = 8515\nVENDOR_ID_PROXION_ORG = 8516\nVENDOR_ID_APL_SOFTWARE = 8517\nVENDOR_ID_JGIOVATTO = 8518\nVENDOR_ID_TREVALON_INC = 8519\nVENDOR_ID_WINTERLINK_INC = 8520\nVENDOR_ID_BYTEMOBILE_INC = 8521\nVENDOR_ID_MACHINEBUILT_SOFTWARE_INC = 8522\nVENDOR_ID_PETRASOFT_INC = 8523\nVENDOR_ID_CYBERCAFE = 8524\nVENDOR_ID_PAULAS_HOME_CREATIONS = 8525\nVENDOR_ID_CONSIGLIO_NAZIONALE_DEL_NOTARIATO = 8526\nVENDOR_ID_HARVARD_MIT_DATA_CENTER = 8527\nVENDOR_ID_HEYANITA_INC = 8528\nVENDOR_ID_SALIRA_OPTICAL_NETWORK_SYSTEMS_INC = 8529\nVENDOR_ID_MOMSDESK_COMMERCE_CORPORATION = 8530\nVENDOR_ID_SYNCWORKS = 8531\nVENDOR_ID_NANYA_TECHNOLOGY_CORP = 8532\nVENDOR_ID_SNAPSHIELD = 8533\nVENDOR_ID_HIHAT_ENTERPRISE_SOLUTIONS = 8534\nVENDOR_ID_NEKHEM_TECHNOLOGIES = 8535\nVENDOR_ID_DATACHORUS = 8536\nVENDOR_ID_TURBO_NETWORKS_CO_LTD = 8537\nVENDOR_ID_SAXONIA_SYSTEMS_AG = 8538\nVENDOR_ID_INSTITUTE_NORILSKPROJECT = 8539\nVENDOR_ID_LCPC = 8540\nVENDOR_ID_INTERACTIVE_MEDIA_SRL = 8541\nVENDOR_ID_SANDIAL_SYSTEMS_INC = 8542\nVENDOR_ID_GLOBAL_TELELINK_SERVICES_INC = 8543\nVENDOR_ID_SMALLBUDDHAORG = 8544\nVENDOR_ID_HTL_STEYR = 8545\nVENDOR_ID_COLEEBRIS = 8546\nVENDOR_ID_MISSISSIPPI_STATE_UNIVERSITY = 8547\nVENDOR_ID_SOUTH_SUBURBAN_COLLEGE = 8548\nVENDOR_ID_CYLANT_TECHNOLOGY = 8549\nVENDOR_ID_HATTERAS_NETWORKS = 8550\nVENDOR_ID_YOTTA_NETWORKS_INC = 8551\nVENDOR_ID_TECHTRACKERCOM = 8552\nVENDOR_ID_SUBTHEORY = 8553\nVENDOR_ID_DEPARTEMENT_ELEKTROTECHNIK_ETH_ZUERICH = 8554\nVENDOR_ID_DIGITALWAVE_INC = 8555\nVENDOR_ID_BANK_MENATEP_SPB_SAMARA = 8556\nVENDOR_ID_GLOBALOOP_LTD = 8557\nVENDOR_ID_GIMNAZIJA_BEZIGRAD_LJUBLJANA = 8558\nVENDOR_ID_COCONUT = 8559\nVENDOR_ID_CLEVERLANCE_SRO = 8560\nVENDOR_ID_HOTSIP = 8561\nVENDOR_ID_PLATINET_COMMUNICATIONS = 8562\nVENDOR_ID_SSE = 8563\nVENDOR_ID_CTI2 = 8564\nVENDOR_ID_MEDICAL_RESEARCH_LABORATORIES = 8565\nVENDOR_ID_LASSE_HILLERE_PETERSEN = 8566\nVENDOR_ID_ACTIVE_POWER_INC = 8567\nVENDOR_ID_VIRTUALTEK_CORPORATION = 8568\nVENDOR_ID_IXON = 8569\nVENDOR_ID_ENONIC = 8570\nVENDOR_ID_CONNECTSUITE = 8571\nVENDOR_ID_TDS_INFORMATIONSTECHNOLOGIE_AG = 8572\nVENDOR_ID_S4I = 8573\nVENDOR_ID_SEAS_LLC = 8574\nVENDOR_ID_MANAGEIT_COMPANY = 8575\nVENDOR_ID_FLOWSTONE_INC = 8576\nVENDOR_ID_AXIOWAVE_NETWORKS = 8577\nVENDOR_ID_PEOPLECOM_INC = 8578\nVENDOR_ID_OPERADORA_PROTEL_SA_DE_CV = 8579\nVENDOR_ID_TELLME_NETWORKS_INC = 8580\nVENDOR_ID_OY_COMSEL_SYSTEM_AB_KRISTIAN = 8581\nVENDOR_ID_NETGENE_TECH_INC = 8582\nVENDOR_ID_KABELFOON_BV = 8583\nVENDOR_ID_SORBONNE = 8584\nVENDOR_ID_MEDAV_DIGITALE_SIGNALVERARBEITUNG_GMBH = 8585\nVENDOR_ID_MODCOMP_GMBH = 8586\nVENDOR_ID_WIREDMINDS_INFORMATIONSSYSTEME_GMBH = 8587\nVENDOR_ID_MUNICH_RE_INSURANCE_AG = 8588\nVENDOR_ID_FRAMESOFT_AG_SOFTWARE_APPLICATIONS = 8589\nVENDOR_ID_OKENA_INC = 8590\nVENDOR_ID_MANSOFT = 8591\nVENDOR_ID_CGI = 8592\nVENDOR_ID_WEBTONE_TECHNOLOGIES = 8593\nVENDOR_ID_TELIA_ETELIA_A_S = 8594\nVENDOR_ID_HITRON_TECHNOLOGY_INC_2 = 8595\nVENDOR_ID_NEUSOFT_COLTD = 8596\nVENDOR_ID_ACCESS_SOLUTIONS_INTERNATIONAL_CORPORATION = 8597\nVENDOR_ID_DIGITAL_DIAGNOSTIC_IMAGING = 8598\nVENDOR_ID_VELANKANI_INFORMATION_SYSTEMS_LTD = 8599\nVENDOR_ID_LINUX_GENERATION_BV = 8600\nVENDOR_ID_BELLSOUTH_CUSTOMER_TECHNOLOGIES = 8601\nVENDOR_ID_QARANA_SOLUTIONS = 8602\nVENDOR_ID_FLARION_TECHNOLOGIES = 8603\nVENDOR_ID_LEAPFROG_TECHNOLOGIES_LLC = 8604\nVENDOR_ID_WIRELESS_KNOWLEDGE = 8605\nVENDOR_ID_VANCOUVER_SCHOOL_DISTRICT_37 = 8606\nVENDOR_ID_PORTLAND_INTERNETWORKS = 8607\nVENDOR_ID_CINI_SYSTEMS = 8608\nVENDOR_ID_NEWSRADAR_DEUTSCHLAND = 8609\nVENDOR_ID_SNMP_EVERYWHERE = 8610\nVENDOR_ID_VSOFT = 8611\nVENDOR_ID_TOE_TECHNOLOGY_COMPANY_LIMITED = 8612\nVENDOR_ID_HEALTHNETWORK_SYSTEMS = 8613\nVENDOR_ID_ROXEN_INTERNET_SOFTWARE = 8614\nVENDOR_ID_BIOWARE_CORP = 8615\nVENDOR_ID_WITT_FAMILY = 8616\nVENDOR_ID_ATYF = 8617\nVENDOR_ID_IPROPERTYCOM = 8618\nVENDOR_ID_DAVID_HOPWOOD_NETWORK_SECURITY = 8619\nVENDOR_ID_AKO = 8620\nVENDOR_ID_EXCIDO_PTY_LTD = 8621\nVENDOR_ID_SATYAM_INFOWAY_LIMITED = 8622\nVENDOR_ID_RADIOMOBIL_AS = 8623\nVENDOR_ID_DENIS_NEUHART_COMPUTING = 8624\nVENDOR_ID_THE_LIFETIME_HEALTHCARE_COMPANIES = 8625\nVENDOR_ID_CLUB_INTERNET = 8626\nVENDOR_ID_AILIS = 8627\nVENDOR_ID_ARKOON_NETWORK_SECURITY = 8628\nVENDOR_ID_FIRECLICK = 8629\nVENDOR_ID_MPI_TECH = 8630\nVENDOR_ID_MESHNETWORKS_INC = 8631\nVENDOR_ID_WINPHORIA_NETWORKS = 8632\nVENDOR_ID_ATMOS_ENERGY_CORPORATION = 8633\nVENDOR_ID_THE_ZANERAY_GROUP_INC = 8634\nVENDOR_ID_ROB_SEMENOFF_ENTERPRISES = 8635\nVENDOR_ID_PLANET_PRATT = 8636\nVENDOR_ID_AMPHUS_INC = 8637\nVENDOR_ID_ROUTESCIENCE_TECHNOLOGIES_INC = 8638\nVENDOR_ID_POLYTRUST_AB = 8639\nVENDOR_ID_SANTAM_LIMITED = 8640\nVENDOR_ID_7441COM = 8641\nVENDOR_ID_ENDERUNIX = 8642\nVENDOR_ID_THE_MATH_FORUM = 8643\nVENDOR_ID_ANOTO = 8644\nVENDOR_ID_INFINISWITCH_CORPORATION = 8645\nVENDOR_ID_SCOTTISH_QUALIFICATIONS_AUTHORITY = 8646\nVENDOR_ID_WINBOXCOM = 8647\nVENDOR_ID_RENAISSANCE_TECHNOLOGIES_CORP = 8648\nVENDOR_ID_PINNACLE_TECHNOLOGY_INC = 8649\nVENDOR_ID_APRIVA_INC = 8650\nVENDOR_ID_HEART_INSTITUTE_INCOR_UNIVERSITY_OF_SO_PAULO_MEDICAL_SCHOOL = 8651\nVENDOR_ID_UPPSALA_UNIVERSITY = 8652\nVENDOR_ID_UNASSIGNED_8 = 8653\nVENDOR_ID_INTRINSEC = 8654\nVENDOR_ID_APCENTRIC_LIMITED = 8655\nVENDOR_ID_DCM_ONLINE_LIMITED = 8656\nVENDOR_ID_HOCHSCHULRECHENZENTRUM_FACHHOCHSCHULE_FUER_WIRTSCHAFT_UND_TECHNIKFHTW_BERLIN = 8657\nVENDOR_ID_EMPRESA_NACIONAL_DE_CERTIFICACION_ELECTRONICA = 8658\nVENDOR_ID_ASIA_E_PUBLICATIONS_LTD = 8659\nVENDOR_ID_TELAID = 8660\nVENDOR_ID_UNIVERSITY_OF_UTAH_COLLEGE_OF_ENGINEERING_CADE_LAB = 8661\nVENDOR_ID_UNIVERSITY_OF_LOUISVILLE = 8662\nVENDOR_ID_BERMUDA_TRIANGLE_SERVICES_LTD = 8663\nVENDOR_ID_AKEENA_INC = 8664\nVENDOR_ID_BRUCE_TECHNICAL_SERVICES = 8665\nVENDOR_ID_FIRSTPEER = 8666\nVENDOR_ID_TEXTMEORG_LTD = 8667\nVENDOR_ID_ELI_LILLY_AND_COMPANY = 8668\nVENDOR_ID_TERACOM_TELECOMUNICAES_LTDA = 8669\nVENDOR_ID_POLYESTER_MEDIA = 8670\nVENDOR_ID_ETI = 8671\nVENDOR_ID_FARMERS_INSURANCE = 8672\nVENDOR_ID_BORDERWARE_TECHNOLOGIES_INC = 8673\nVENDOR_ID_JAVA_SECURE = 8674\nVENDOR_ID_AUTODESK_INC = 8675\nVENDOR_ID_TRANSPARENT = 8676\nVENDOR_ID_ISDN_NET_INC = 8677\nVENDOR_ID_INTRUSIONCOM = 8678\nVENDOR_ID_ATLAS_COPCO_AIRPOWER = 8679\nVENDOR_ID_OPEN_ROADS_CONSULTING_INC = 8680\nVENDOR_ID_FREE_SPEECH_MEDIA_LLC = 8681\nVENDOR_ID_ULTRASECURECOM = 8682\nVENDOR_ID_INTEGRITY_SYSTEMS_LTD = 8683\nVENDOR_ID_FRDNET = 8684\nVENDOR_ID_HABEEBEE = 8685\nVENDOR_ID_PERSONAL_EVALUATION = 8686\nVENDOR_ID_MILESTONE_R_D_LABS = 8687\nVENDOR_ID_SHEPHERD_EXPRESS = 8688\nVENDOR_ID_MILLER_SIMON_MCGINN_AND_CLARK = 8689\nVENDOR_ID_XENERCOM_INC = 8690\nVENDOR_ID_MOXA_TECHNOLOGIES_CO_LTD = 8691\nVENDOR_ID_NETWORK_PROGRAMS = 8692\nVENDOR_ID_A_XELL_WIRELESS_AB_FORMERLY_AVITEC_AB = 8693\nVENDOR_ID_UNIVERSITY_OF_WOLVERHAMPTON = 8694\nVENDOR_ID_MISSION_DATA = 8695\nVENDOR_ID_MYCUSTOMS = 8696\nVENDOR_ID_RIZIT_GESMBH = 8697\nVENDOR_ID_VIASAT_INC = 8698\nVENDOR_ID_IWAY_SOFTWARE = 8699\nVENDOR_ID_WORLD_SAVINGS = 8700\nVENDOR_ID_INTELLIGENT_INFORMATION_SYSTEMS = 8701\nVENDOR_ID_NONCYCLIC_NETWORKS = 8702\nVENDOR_ID_VOYUS_CANADA_INC = 8703\nVENDOR_ID_SAKHALINSVYAZ_JSC = 8704\nVENDOR_ID_ISRAEL_LOCAL_AUTHORITIES_DATA_PROCESSING_CENTER_LTD = 8705\nVENDOR_ID_UNASSIGNED_9 = 8706\nVENDOR_ID_SPIDERNET_SERVICES_LTD = 8707\nVENDOR_ID_LUMENTIS_AB = 8708\nVENDOR_ID_LANDESAMT_FR_BESOLDUNG_UND_VERSORGUNG_NRW = 8709\nVENDOR_ID_ENVOY_NETWORKS = 8710\nVENDOR_ID_THALES_BROADCAST_MULTIMEDIA = 8711\nVENDOR_ID_LANCOPE_INC = 8712\nVENDOR_ID_ABAKO_MEDIA_OY = 8713\nVENDOR_ID_INOC_INC = 8714\nVENDOR_ID_HEALTH_SCIENCES_CENTRE = 8715\nVENDOR_ID_TRIVENI_DIGITAL_INC = 8716\nVENDOR_ID_DAVID_MISTRETTA = 8717\nVENDOR_ID_GWENT_CONSULTANCY = 8718\nVENDOR_ID_RAVIANT_NETWORKS_INC = 8719\nVENDOR_ID_ZACK_SYSTEMS_INC = 8720\nVENDOR_ID_INGRAM_TECHNOLOGY_LIMITED = 8721\nVENDOR_ID_ETOOLBELTNET = 8722\nVENDOR_ID_INTEGRATED_DATA_PTY_LTD = 8723\nVENDOR_ID_HUMAN_TECHNOLOGY = 8724\nVENDOR_ID_CANBERRA_INSTITUTE_OF_TECHNOLOGY = 8725\nVENDOR_ID_INCISIVE_DESIGNS = 8726\nVENDOR_ID_TORRY_HARRIS_BUSINESS_SOLUTIONS_THIRUNAVUKARASU = 8727\nVENDOR_ID_COMPUTER_NETWORK_INFORMATION_CENTER_CHINESE_ACADEMY_OF_SCIENCES = 8728\nVENDOR_ID_LETEK_COMMUNICATIONS_INC = 8729\nVENDOR_ID_SERCK_CONTROLS_LTD = 8730\nVENDOR_ID_PANTOR_ENGINEERING_AB = 8731\nVENDOR_ID_TOKYO_INSTITUTE_OF_TECHNOLOGY = 8732\nVENDOR_ID_AMBIENT_COMPUTING_INC = 8733\nVENDOR_ID_MATTHIAS_WIMMER = 8734\nVENDOR_ID_QUARK_INC_2 = 8735\nVENDOR_ID_METAVECTOR_TECHNOLOGIES = 8736\nVENDOR_ID_SECURENET_GMBH_INTRANET_INTERNET_SOLUTIONS = 8737\nVENDOR_ID_PIRELLI_INFORMATICA_SPA = 8738\nVENDOR_ID_KAPTECH = 8739\nVENDOR_ID_KOM_NETWORKS = 8740\nVENDOR_ID_SONICWALL_INC = 8741\nVENDOR_ID_ALPHION = 8742\nVENDOR_ID_RADIOFRAME_NETWORKS = 8743\nVENDOR_ID_COLUBRIS_NETWORKS_INC = 8744\nVENDOR_ID_INFORMTICA_PARA_TODOS_SA_DE_CV = 8745\nVENDOR_ID_QUEENSLAND_UNIVERSITY_OF_TECHNOLOGY = 8746\nVENDOR_ID_LIBELLE_AG = 8747\nVENDOR_ID_LOQUENDO_SPA = 8748\nVENDOR_ID_TELCOM_ITALIA_LAB = 8749\nVENDOR_ID_BUCKNELL_UNIVERSITY = 8750\nVENDOR_ID_GEODESIC_SYSTEMS = 8751\nVENDOR_ID_KERNEL = 8752\nVENDOR_ID_DATAFLOW_ALASKA_INC_2 = 8753\nVENDOR_ID_XOUL = 8754\nVENDOR_ID_HEBREW_UNIVERSITY_COMPUTATION_CENTER = 8755\nVENDOR_ID_CELLTICK = 8756\nVENDOR_ID_FEATHER_MOBILE_SYSTEMS = 8757\nVENDOR_ID_WALNUT_CONCEPTS = 8758\nVENDOR_ID_LG_INNOTEK_CO_LTD = 8759\nVENDOR_ID_NEITECH = 8760\nVENDOR_ID_ZAVOD_ZA_VARNOSTNE_TEHNOLOGIJE_INFORMACIJSKE_DRUZBE_IN_ELEKTRONSKO = 8761\nVENDOR_ID_SI_CA = 8762\nVENDOR_ID_EIQNETWORKS = 8763\nVENDOR_ID_KB_ELECTRONICS_LTD = 8764\nVENDOR_ID_TELESOFT_TECHNOLOGIES_LTD = 8765\nVENDOR_ID_ELSAG_SPA = 8766\nVENDOR_ID_BAYOURCOM = 8767\nVENDOR_ID_NEVION_FORMERLY_NETWORK_ELECTRONICS = 8768\nVENDOR_ID_TERAOPTIC_NETWORKS_INC = 8769\nVENDOR_ID_THE_EMERGINGGROUP_GROUP = 8770\nVENDOR_ID_ARCANVS_INC = 8771\nVENDOR_ID_E_MANUFACTURING_NETWORKS_INC = 8772\nVENDOR_ID_CHINA_TEXTILE_NETWORK_COLTD = 8773\nVENDOR_ID_UNIVERSAL_SCIENTIFIC_INDUSTRIAL_CO_LTD = 8774\nVENDOR_ID_BEST_BUSINESS_EXECUTION_SOLUTIONS_TECHNOLOGY_DAVE = 8775\nVENDOR_ID_ZMAN_TIKSHUV = 8776\nVENDOR_ID_AQUTE = 8777\nVENDOR_ID_SYAC = 8778\nVENDOR_ID_TELESPAZIO = 8779\nVENDOR_ID_IP_CONNECT_GMBH = 8780\nVENDOR_ID_CHAMBERSIGN = 8781\nVENDOR_ID_KEUTEL = 8782\nVENDOR_ID_AKELLAORG = 8783\nVENDOR_ID_BROADQUAY_CONSULTANCY_LTD = 8784\nVENDOR_ID_GUAY_INTERNET = 8785\nVENDOR_ID_SECUREOPS_INC = 8786\nVENDOR_ID_IVRNET_INC = 8787\nVENDOR_ID_CYBERGATE_INTERNET_SERVICES = 8788\nVENDOR_ID_PRENET_CORPORATION = 8789\nVENDOR_ID_PRISA_NETWORKS = 8790\nVENDOR_ID_IVV_GMBH = 8791\nVENDOR_ID_AXES_INDIA_LTD = 8792\nVENDOR_ID_REALIZE_IT_GMBH = 8793\nVENDOR_ID_EYAK_INC = 8794\nVENDOR_ID_INTELIGUARD = 8795\nVENDOR_ID_GESTION_DEL_CONOCIMIENTO_SA_MIQUEL = 8796\nVENDOR_ID_MANNESMANN_ARCOR_AG_CO = 8797\nVENDOR_ID_IT_MANAGEMENT_SOLUTION_GMBH = 8798\nVENDOR_ID_CYPHEROPTICS = 8799\nVENDOR_ID_YH_CONSULTING = 8800\nVENDOR_ID_SENAREIDER = 8801\nVENDOR_ID_YEHTI_INC = 8802\nVENDOR_ID_THURIDION = 8803\nVENDOR_ID_KIRANA_NETWORKS = 8804\nVENDOR_ID_KESSLER_HURON_COMPUTER_SYSTEMS = 8805\nVENDOR_ID_GLUON_NETWORKS = 8806\nVENDOR_ID_FINESTRA_SOFTWARE = 8807\nVENDOR_ID_XIAN_XINLI_NETWORK_SYSTEM_TECHNOLOGY_COLTD = 8808\nVENDOR_ID_TOMORROW_SOFTWARE = 8809\nVENDOR_ID_ARTIGAS_COMPUTER = 8810\nVENDOR_ID_PROMPT2U = 8811\nVENDOR_ID_ITBS_ONLINE = 8812\nVENDOR_ID_SKYLINE_COMMUNICATIONS = 8813\nVENDOR_ID_FUNCOM_NV = 8814\nVENDOR_ID_COLLECTIVELY_SHARPER = 8815\nVENDOR_ID_GETYOURCAR_AG = 8816\nVENDOR_ID_WEBSEMANTIX = 8817\nVENDOR_ID_SANDCHERRY_NETWORKS_INC = 8818\nVENDOR_ID_RAYTION = 8819\nVENDOR_ID_SYSTIME_SOLUTIONS_AG = 8820\nVENDOR_ID_PHI_KAPPA_THETA_FRATERNITY_GAMMA_TAU_CHAPTER = 8821\nVENDOR_ID_LINUXCARE_INC = 8822\nVENDOR_ID_INET_SPA = 8823\nVENDOR_ID_WIZZY = 8824\nVENDOR_ID_DNX_COMMUNICATIONS = 8825\nVENDOR_ID_COMNET_SOFTWARE_SPECIALISTSINC = 8826\nVENDOR_ID_NU_KOTE_INTERNATIONAL = 8827\nVENDOR_ID_GENERAL_DYNAMICS_ADVANCED_INFORMATION_SYSTEMS = 8828\nVENDOR_ID_AXELL_WIRELESS_LIMITED_FORMERLY_AERIAL_FACILITIES_LIMITED = 8829\nVENDOR_ID_XYPHIUS_SOLUTIONS_INC = 8830\nVENDOR_ID_AGORA_SYSTEMS_LTD = 8831\nVENDOR_ID_ECOMINDS_LTD = 8832\nVENDOR_ID_ISPMAN = 8833\nVENDOR_ID_COGNET_CORP = 8834\nVENDOR_ID_WIZARD_PRODUCTIONS = 8835\nVENDOR_ID_AUUG_INCORPORATED = 8836\nVENDOR_ID_ASCENVISION = 8837\nVENDOR_ID_ACS_INTERNET_INC = 8838\nVENDOR_ID_MICROTEST = 8839\nVENDOR_ID_MBRIDGE_SYSTEMS_INC = 8840\nVENDOR_ID_INTERCOM_INTERNATIONAL_COMMUNICATIONS_LTD = 8841\nVENDOR_ID_CLOCKWORK_WEB = 8842\nVENDOR_ID_INACCESS_NETWORKS_SA = 8843\nVENDOR_ID_DIVEO_BROADBAND_NETWORKS = 8844\nVENDOR_ID_ENABLENCE_USA_FTTX_NETWORKS_INC_FORMERLY_WAVE7OPTICS = 8845\nVENDOR_ID_CARAMAIL = 8846\nVENDOR_ID_PIVOTECH_SYSTEMS_INC = 8847\nVENDOR_ID_ROOTROUTE_RESEARCH = 8848\nVENDOR_ID_LPMDORG = 8849\nVENDOR_ID_CYRADIS_TECHNOLOGY_GROUP_INC = 8850\nVENDOR_ID_ULTRA_ENTERPRISES = 8851\nVENDOR_ID_AARNET_PTY_LTD = 8852\nVENDOR_ID_A_TRUST = 8853\nVENDOR_ID_INTENS_IT = 8854\nVENDOR_ID_INTELSIS_SISTEMAS_INTELIGENTES_SA_CESAR = 8855\nVENDOR_ID_IDECNET_SA = 8856\nVENDOR_ID_NAUTICUS_NETWORKS_INC = 8857\nVENDOR_ID_DESTEFCOM_SOFTWARE = 8858\nVENDOR_ID_PRIVATE_BUSINESS_INC = 8859\nVENDOR_ID_HOLCIM_GROUP_SUPPORT_LTD = 8860\nVENDOR_ID_SECORVO_SECURITY_CONSULTING_GMBH = 8861\nVENDOR_ID_APPWIRED_INC = 8862\nVENDOR_ID_ETIERS_INTERNATIONAL_INC = 8863\nVENDOR_ID_DYSTOPIUMCOM = 8864\nVENDOR_ID_FAST_SEARCH_AND_TRANSFER = 8865\nVENDOR_ID_GEOTEC_INTERNET = 8866\nVENDOR_ID_STOREAGE_NETWORKING_TECHNOLOGIES = 8867\nVENDOR_ID_VELOS_INC = 8868\nVENDOR_ID_COSCEND_CORPORATION = 8869\nVENDOR_ID_KINSKNOWLEGE_AND_INFORMATION_NET_FOR_SHARING_LAB = 8870\nVENDOR_ID_PORTHOLE_INTERACTIVE_TECHNOLOGIES = 8871\nVENDOR_ID_SAINTJO = 8872\nVENDOR_ID_JAL_INFORMATION_TECHNOLOGY_COLTD = 8873\nVENDOR_ID_UTT_TECHNOLOGIES = 8874\nVENDOR_ID_COLUMBITECH_AB = 8875\nVENDOR_ID_WILLEKECOM = 8876\nVENDOR_ID_SUNTAIL = 8877\nVENDOR_ID_FIRMENICH_SA = 8878\nVENDOR_ID_ZETAC_LIMITED = 8879\nVENDOR_ID_IDENTEC_SOLUTIONS_AG = 8880\nVENDOR_ID_TRUST_ITALIA_SPA = 8881\nVENDOR_ID_EMPOWER_INTERACTIVE_GROUP_LIMITED = 8882\nVENDOR_ID_MOONLIGHT_SYSTEMS = 8883\nVENDOR_ID_VERSANT_CORPORATION = 8884\nVENDOR_ID_INTERNET_SECURITY_ONE_LTD = 8885\nVENDOR_ID_BEIJING_RAISECOM_SCIENTIFIC_TECHNOLOGY_DEVELOPMENT_CO_LTD = 8886\nVENDOR_ID_VASOFT_PTY_LTD = 8887\nVENDOR_ID_WEBGSM = 8888\nVENDOR_ID_VIRTUAL_SOLUTION_AG = 8889\nVENDOR_ID_BROADCAST_TECHNOLOGY_LIMITED = 8890\nVENDOR_ID_SFORCEORG = 8891\nVENDOR_ID_CHAMAN_PRODUCTIONS = 8892\nVENDOR_ID_MOBILITEC = 8893\nVENDOR_ID_RIVERMEN_AB = 8894\nVENDOR_ID_INFORMATION_SYSTEMS_CONSULTING_INSYC = 8895\nVENDOR_ID_SISTEMATICA = 8896\nVENDOR_ID_ALLTEL_INFORMATION_SERVICES = 8897\nVENDOR_ID_WEAVERS_NETWORK_CONSULTING = 8898\nVENDOR_ID_THE_MCGRAW_HILL_COMPANIES = 8899\nVENDOR_ID_INTELLITACTICS = 8900\nVENDOR_ID_MONKEYBAGEL_HARDWARE_SOLUTIONS = 8901\nVENDOR_ID_GEOTEC_INTERNET_2 = 8902\nVENDOR_ID_NETNEARU_CORPORATETAM = 8903\nVENDOR_ID_COOPER_INDUSTRIES = 8904\nVENDOR_ID_HUNTCORP_ENTERPRISES = 8905\nVENDOR_ID_SOLNET_PTY_LTD = 8906\nVENDOR_ID_GE_COMPUNET_COMPUTER_AG_CO_OHG = 8907\nVENDOR_ID_BELGACOM_NV_OF_PUBLIC_LAW = 8908\nVENDOR_ID_DICA_TECHNOLOGIES_AG = 8909\nVENDOR_ID_MEITNER_SOLUES_INTERNET_E_SISTEMAS_DE_INFORMAO_LDA = 8910\nVENDOR_ID_APPELSIINI_FINLAND_OY = 8911\nVENDOR_ID_ALICES_REGISTRY_INC = 8912\nVENDOR_ID_FEDERAL_LINUX_SYSTEMS = 8913\nVENDOR_ID_GALDERMA_LABORATORIES_LP = 8914\nVENDOR_ID_RALF_BENSMANN = 8915\nVENDOR_ID_INFOGATE_ONLINE = 8916\nVENDOR_ID_STRELITZIA_BE = 8917\nVENDOR_ID_J_PHONE_EAST_COLTD = 8918\nVENDOR_ID_HUYSMANS_EN_KUYPERS_AUTOMATISERINGSBURO = 8919\nVENDOR_ID_BAMBOO_MEDIACASTING = 8920\nVENDOR_ID_NICE_WORK_TEXTILE_CORPLTD = 8921\nVENDOR_ID_RESI_INFORMATICA_SRL = 8922\nVENDOR_ID_KEYWARE = 8923\nVENDOR_ID_INFORAD_COM_SERV_LTDA = 8924\nVENDOR_ID_TRANSORA = 8925\nVENDOR_ID_VIP_SWITCH_INC = 8926\nVENDOR_ID_PACELINE_SYSTEMS_CORPORATION = 8927\nVENDOR_ID_ASTA_NETWORKS = 8928\nVENDOR_ID_DOMINION_ELECTRONICS_PTY_LTD = 8929\nVENDOR_ID_PELAGO_NETWORKS = 8930\nVENDOR_ID_CORDELL_INC = 8931\nVENDOR_ID_WATERWARE_INTERNET_SERVICES_INC = 8932\nVENDOR_ID_WOKUP = 8933\nVENDOR_ID_B_PROCESS = 8934\nVENDOR_ID_WISDOM_ASSEN_BV = 8935\nVENDOR_ID_WEBTOGRID = 8936\nVENDOR_ID_THIRDSPACE_LIVING_LTD = 8937\nVENDOR_ID_CYBERELL_OY = 8938\nVENDOR_ID_FRONTEC_NETSOLUTION_AB = 8939\nVENDOR_ID_SAVVIS_COMMUNICATIONS = 8940\nVENDOR_ID_JC_ENTERPRISES = 8941\nVENDOR_ID_AMX_CORP = 8942\nVENDOR_ID_ANALOG_DESIGN_AUTOAMTION_INC = 8943\nVENDOR_ID_OBFUSCATED_NETWORKING = 8944\nVENDOR_ID_IN_Q_TEL_INC = 8945\nVENDOR_ID_THINAIRAPPS = 8946\nVENDOR_ID_VIACORE_INC = 8947\nVENDOR_ID_A_S_PROMOTIONS_LTD = 8948\nVENDOR_ID_OUTERSPACE_CONSULTANTS = 8949\nVENDOR_ID_WEBBASIS_INC = 8950\nVENDOR_ID_PLATYS_COMMUNICATIONS = 8951\nVENDOR_ID_JSC_BELSVYAZ = 8952\nVENDOR_ID_MIGHTYSUN_LLC = 8953\nVENDOR_ID_VTEX_TYPESETTING_SERVICES = 8954\nVENDOR_ID_GORGY_TIMING = 8955\nVENDOR_ID_ZICOM_ELECTRONIC_SECURITY_SYSTEMS_LTD = 8956\nVENDOR_ID_RAILINFRABEHEER_BV = 8957\nVENDOR_ID_JAMES_A_MAHLEN_ASSOCIATES = 8958\nVENDOR_ID_IER_INCORPORATED = 8959\nVENDOR_ID_COREE_NETWORKS_INC = 8960\nVENDOR_ID_PARADIGM_SECURE_COMMUNICATIONS = 8961\nVENDOR_ID_INTRUVERT_NETWORKS_INC = 8962\nVENDOR_ID_ADVANCED_WEB_COMMUNICATION_DIVISION_OF_XECOM_INCORPORATED = 8963\nVENDOR_ID_BEZIRKSREGIERUNG_DUESSELDORF = 8964\nVENDOR_ID_DFF_INTERNET_MEDIEN = 8965\nVENDOR_ID_PUROPTIX = 8966\nVENDOR_ID_NASA_JSC = 8967\nVENDOR_ID_JUHA_SAARINEN_IT_WRITER = 8968\nVENDOR_ID_RIO_TINTO = 8969\nVENDOR_ID_ARGOGROUP_INTERACTIVE_LTD = 8970\nVENDOR_ID_SPEED_TO_MARKET_ENGINES = 8971\nVENDOR_ID_IP_POWERHOUSE_LTD = 8972\nVENDOR_ID_GRUPO_EUROCIBER_SA = 8973\nVENDOR_ID_UNIVERSITAET_MARBURG = 8974\nVENDOR_ID_SOLUZIONE_SCRIPT_GMBH = 8975\nVENDOR_ID_AIRIA_INC = 8976\nVENDOR_ID_SYNAMICS_INC = 8977\nVENDOR_ID_SEARS_ROEBUCK_INC = 8978\nVENDOR_ID_THE_REAL_ASSET_COMPANY_LIMITED = 8979\nVENDOR_ID_COLLECTIVE_TECHNOLOGIES = 8980\nVENDOR_ID_JOEUNSECURITY = 8981\nVENDOR_ID_IPERTRADE_SRL = 8982\nVENDOR_ID_BIVIO_NETWORKS = 8983\nVENDOR_ID_C_J_SPAANS = 8984\nVENDOR_ID_THE_SYNAPTIC_GROUP_INC = 8985\nVENDOR_ID_ARCOTECT_LIMITED = 8986\nVENDOR_ID_STATE_INFOCOMMUNICATION_FOUNDATION_OF_ESTONIA = 8987\nVENDOR_ID_PINGWORKS = 8988\nVENDOR_ID_NAINO_CORPORATION = 8989\nVENDOR_ID_REDPILL_LINPRO_AS_FORMERLY_LINPRO_AS = 8990\nVENDOR_ID_MARPOSS_SPA = 8991\nVENDOR_ID_UNISOFT_CONSULTANTS = 8992\nVENDOR_ID_ASERA_INC = 8993\nVENDOR_ID_AVANTAS_NETWORKS = 8994\nVENDOR_ID_LO_WANGORG = 8995\nVENDOR_ID_TRANSACTPLUS_INC = 8996\nVENDOR_ID_PROARP_INC = 8997\nVENDOR_ID_COTTAY = 8998\nVENDOR_ID_TVS_ETECHNOLOGY_LIMITED = 8999\nVENDOR_ID_PERSONAL_PATH_SYSTEMS_INC = 9000\nVENDOR_ID_GOLTIER_MEDIA_GROUP_SITEPAK = 9001\nVENDOR_ID_LXPROCOM = 9002\nVENDOR_ID_SLIMJONES = 9003\nVENDOR_ID_SUSE_LINUX_VENEZUELA_CA = 9004\nVENDOR_ID_VIDEO_NETWORKS_LIMITED = 9005\nVENDOR_ID_APACHE_CONSULTING_LTD = 9006\nVENDOR_ID_FINEGROUND_NETWORKS = 9007\nVENDOR_ID_DIGITAL_ROUTE = 9008\nVENDOR_ID_AGNI_SYSTEMS_LIMITED = 9009\nVENDOR_ID_LIEBENZELL_MISSION = 9010\nVENDOR_ID_LAMINAR_SOFTWARE_INC = 9011\nVENDOR_ID_MAILVISION_LTD = 9012\nVENDOR_ID_SPIRITSOFT_INC = 9013\nVENDOR_ID_BELENOS_INC = 9014\nVENDOR_ID_WORLD_STREAMING_NETWORK_INC = 9015\nVENDOR_ID_FREEREIN_CORPORATION = 9016\nVENDOR_ID_COGENT_SYSTEMS_INC = 9017\nVENDOR_ID_CQR_DATA_LTD = 9018\nVENDOR_ID_CAP_GEMINI_TELECOM_MEDIA_NETWORKS_DEUTSCHLAND_GMBH = 9019\nVENDOR_ID_COMPUTER_ADAPTIVE_TECHNOLOGIES_INC = 9020\nVENDOR_ID_WIDEOPENWEST_LLC = 9021\nVENDOR_ID_TRUESAN_NETWORKS = 9022\nVENDOR_ID_NETSANITY_INC = 9023\nVENDOR_ID_TELIA_INTERNET_INC = 9024\nVENDOR_ID_NETCOLOGNE = 9025\nVENDOR_ID_ADISOFT_SYSTEMS_GMBH_CO_KG = 9026\nVENDOR_ID_SOFTNERD = 9027\nVENDOR_ID_LENDX = 9028\nVENDOR_ID_BSD_USERS_GROUP_ITALIA = 9029\nVENDOR_ID_IVMG_INCORPORATED = 9030\nVENDOR_ID_NEXTER_INFORMATION_TECHNOLOGY = 9031\nVENDOR_ID_IVSTEL = 9032\nVENDOR_ID_ELION_ENTERPRISES_LTD = 9033\nVENDOR_ID_JABBERCOM = 9034\nVENDOR_ID_CARLISLE_FOODSERVICE_PRODUCTS = 9035\nVENDOR_ID_JIM_DUTTON = 9036\nVENDOR_ID_EVERYDAY_OFFICE_INC = 9037\nVENDOR_ID_WELL_DIAGNOSTICS = 9038\nVENDOR_ID_CHENGDU_IDEAL_TELECOM_TECHNOLOGYINC = 9039\nVENDOR_ID_CHENGDU_IDEAL_INFORMATION_INDUSTRY_COLTD = 9040\nVENDOR_ID_CAMBRIDGE_UNIVERSITY_ENGINEERING_DEPARTMENT = 9041\nVENDOR_ID_TEINOS = 9042\nVENDOR_ID_EXECULINK = 9043\nVENDOR_ID_NEC_ELUMINANT_TECHNOLOGIES_INC = 9044\nVENDOR_ID_ENETSECURE_INC = 9045\nVENDOR_ID_AMECISCO = 9046\nVENDOR_ID_BLUE_CROSS_BLUE_SHIELD_OF_FLORIDA = 9047\nVENDOR_ID_OPEN_SYSTEM_CONSULTANTS = 9048\nVENDOR_ID_INTEGRITY_ONLINE = 9049\nVENDOR_ID_TELENOR_LINK_AS = 9050\nVENDOR_ID_FACULDADE_DE_CINCIAS_E_TECNOLOGIA_DA_UNIVERSIDADE_NOVA_DE_LISBOA = 9051\nVENDOR_ID_SUNBAY_SOFTWARE_AG = 9052\nVENDOR_ID_TOVARIS_IP_LC = 9053\nVENDOR_ID_TOKHEIM = 9054\nVENDOR_ID_9RIVERSCOM = 9055\nVENDOR_ID_TELSTRAT_INTL = 9056\nVENDOR_ID_MILLENNIUM_COMMUNICATION_NETWORK = 9057\nVENDOR_ID_JAMCRACKER = 9058\nVENDOR_ID_VECTRAD_NETWORKS_CORPORATION = 9059\nVENDOR_ID_RULESPACE_INC = 9060\nVENDOR_ID_DEUTSCHER_GO_BUND = 9061\nVENDOR_ID_SRS_MICROSYSTEMS = 9062\nVENDOR_ID_IHIVE_TECHNOLOGY_PTE_LTD = 9063\nVENDOR_ID_ATM_COMPUTERSYSTEME_GMBH = 9064\nVENDOR_ID_NETTASKING_TECHNOLOGY_SINGAPORE_PTE_LTD = 9065\nVENDOR_ID_GLOBAL_SECURITY_TECHNOLOGIES_INC = 9066\nVENDOR_ID_CAMBIA_NETWORKS = 9067\nVENDOR_ID_DELPHI_ASSOCIATES_LTD = 9068\nVENDOR_ID_PHILLIPS_TECHNICAL_SERVICES = 9069\nVENDOR_ID_SYMMETRICOM = 9070\nVENDOR_ID_SPIRIAN_TECHNOLOGIES_INC = 9071\nVENDOR_ID_ACKLEYNET = 9072\nVENDOR_ID_SUNNYVALE_COMMUNITY_PLAYERS = 9073\nVENDOR_ID_JOHN_M_SUTHERLAND_INCINSURANCE = 9074\nVENDOR_ID_NOVEX_SOLUTIONS = 9075\nVENDOR_ID_TOKYO_METALLIC_COMMUYNICATIONS_CORP = 9076\nVENDOR_ID_DEKART = 9077\nVENDOR_ID_BE_CONNECTED_LTD = 9078\nVENDOR_ID_THE_SANJYOT_BHARATHAN_DESIGN_ASSOCIATION = 9079\nVENDOR_ID_BABEL_COM_AUSTRALIA = 9080\nVENDOR_ID_EACHNET = 9081\nVENDOR_ID_EXTREMAIL = 9082\nVENDOR_ID_ETEAMCONSULTINGCOM = 9083\nVENDOR_ID_KEYNOTE_SYSTEMS_INC = 9084\nVENDOR_ID_OPTICAL_SWITCH_CORPORATION = 9085\nVENDOR_ID_US_ROBOTICS = 9086\nVENDOR_ID_BRIGHTMAIL_INC = 9087\nVENDOR_ID_OSO_GRANDE_TECHNOLOGIES_INC = 9088\nVENDOR_ID_NEW_MEXICO_TECHNET_INC = 9089\nVENDOR_ID_DATAGROVE = 9090\nVENDOR_ID_MICRO_STAR_INTL_CO_LTD = 9091\nVENDOR_ID_VEENSTRA_GRAPHIC_SOLUTIONS = 9092\nVENDOR_ID_INNOVATE_IT_LOGISTICS_BV = 9093\nVENDOR_ID_AMBER_ARCHER_CONSULTING_CO_INC = 9094\nVENDOR_ID_NIPPON_MITSUBISHI_OIL_CORPORATION = 9095\nVENDOR_ID_ZENTRUM_FR_PRODUKT_ENTWICKLUNG_ETH_ZRICH = 9096\nVENDOR_ID_CDFTEL = 9097\nVENDOR_ID_DW_SYSTEMS = 9098\nVENDOR_ID_CENTRAL_SYSTEMS_INTERNATIONAL_INC = 9099\nVENDOR_ID_MSTEL = 9100\nVENDOR_ID_OPTUM_COMPUTING_SOLUTIONS_INC = 9101\nVENDOR_ID_TELECASH_KOMMUNIKATIONS_SERVICE_GMBH = 9102\nVENDOR_ID_YU_SHEI_REAL_ESTATE_CO = 9103\nVENDOR_ID_CHU_SHEN_CO_LTD = 9104\nVENDOR_ID_MIST = 9105\nVENDOR_ID_ELIOS_INFORMATIQUE = 9106\nVENDOR_ID_FERGUSON_ENTERPRISES_INC = 9107\nVENDOR_ID_RANDOM_WALK_COMPUTING_INC = 9108\nVENDOR_ID_INFOGEAR = 9109\nVENDOR_ID_NET_ASIA_ANGELES_CITY = 9110\nVENDOR_ID_NEWWAY_TECH_INC = 9111\nVENDOR_ID_PALAMEDES_GMBH = 9112\nVENDOR_ID_WIRAL_LTD = 9113\nVENDOR_ID_YLINE_WEB_ACCESS_SERVICES = 9114\nVENDOR_ID_ARCHON_TECHNOLOGIES_INC = 9115\nVENDOR_ID_UBICOM_INC = 9116\nVENDOR_ID_LEWIZ_COMMUNICATIONS_INC = 9117\nVENDOR_ID_1CI_GMBH = 9118\nVENDOR_ID_ADVANCED_ROTORCRAFT_TECHNOLOGY_INC = 9119\nVENDOR_ID_NARADA_NETWORKS_INC = 9120\nVENDOR_ID_EDUQUIP_LIMITED = 9121\nVENDOR_ID_UPCTV_INTERACTIVE = 9122\nVENDOR_ID_UNIVERSIT_PIERRE_MENDS_FRANCE = 9123\nVENDOR_ID_INTELLITACTICS_INC = 9124\nVENDOR_ID_INSPIRATION_TECHNOLOGY_PTY_LTD = 9125\nVENDOR_ID_AETIAN_NETWORKS = 9126\nVENDOR_ID_ADVANCED_PERIPHERALS_TECH_INC = 9127\nVENDOR_ID_CENTRE_DE_TRADUCTION_DES_ORGANES_DE_LUNION_EUROPENNE = 9128\nVENDOR_ID_LINKVEST_SA = 9129\nVENDOR_ID_HEMISPHERE_TECHNOLOGIES = 9130\nVENDOR_ID_ROLAND_FELNHOFER = 9131\nVENDOR_ID_HUTCHISON_OPTEL_TELECOM_TECHNOLOGY_COLTD = 9132\nVENDOR_ID_MICRORAAB_ELECTRONICS = 9133\nVENDOR_ID_TELENET_NV = 9134\nVENDOR_ID_HEYDE_AG = 9135\nVENDOR_ID_ISDN_COMMUNICATIONS_LTD = 9136\nVENDOR_ID_ANATEL_COMMUNICATIONS = 9137\nVENDOR_ID_ANTEFACTO = 9138\nVENDOR_ID_PETROLEUM_BUSINESS_INSTITUTE = 9139\nVENDOR_ID_MEDIA_GENERAL_INC = 9140\nVENDOR_ID_RIPTECH = 9141\nVENDOR_ID_INFOPAQ_INTERNATIONAL_A_S = 9142\nVENDOR_ID_EDMUNDSCOM = 9143\nVENDOR_ID_TRADER_ELECTRONIC_MEDIA = 9144\nVENDOR_ID_ACCESSPT_INC = 9145\nVENDOR_ID_REPORTER_TIMES_INC = 9146\nVENDOR_ID_TEALEAF_TECHNOLOGY_INC = 9147\nVENDOR_ID_ACME_PACKET = 9148\nVENDOR_ID_LOCUS_CORPORATION = 9149\nVENDOR_ID_METROMEDIA_FIBER_NETWORK = 9150\nVENDOR_ID_WIRAL_LTD_2 = 9151\nVENDOR_ID_DIT_COMPANY_LIMITED = 9152\nVENDOR_ID_SODIELEC_TELECOM = 9153\nVENDOR_ID_FIGMENT_TECHNOLOGIES_INC = 9154\nVENDOR_ID_BLUENETWORKX = 9155\nVENDOR_ID_EGURKHA_PVT_LTD = 9156\nVENDOR_ID_CORECOMM = 9157\nVENDOR_ID_THE_INTERNET_GROUP = 9158\nVENDOR_ID_SHAD0WSNET = 9159\nVENDOR_ID_DGT_SP_Z_OO = 9160\nVENDOR_ID_UNIVERSIDAD_DEL_PAIS_VASCO = 9161\nVENDOR_ID_PDAGOGISCHE_HOCHSCHULE_FREIBURG = 9162\nVENDOR_ID_GNU_RADIUS_PROJECT = 9163\nVENDOR_ID_XWARE_AB = 9164\nVENDOR_ID_CABINET_REMOUIT = 9165\nVENDOR_ID_UNIVERSIDAD_GALILEO = 9166\nVENDOR_ID_ANXEBUSINESS_CORP = 9167\nVENDOR_ID_TRANSACCESS = 9168\nVENDOR_ID_NOVIS_TELECOM_SA = 9169\nVENDOR_ID_EXAECON_INC = 9170\nVENDOR_ID_NETTONE = 9171\nVENDOR_ID_HVC_TECHNOLOGIES = 9172\nVENDOR_ID_KOHLS = 9173\nVENDOR_ID_A2V_ICT = 9174\nVENDOR_ID_STREAM_THEORY_INC = 9175\nVENDOR_ID_OPEN_IT = 9176\nVENDOR_ID_THINKFREECOM_INC = 9177\nVENDOR_ID_DAESUNG_CORP = 9178\nVENDOR_ID_INTESABCI_SISTEMI_E_SERVIZI = 9179\nVENDOR_ID_MARANTI_NETWORKS_INC = 9180\nVENDOR_ID_AIR_TECHNOLOGY_SYSTEMS = 9181\nVENDOR_ID_FILEFISH_INC = 9182\nVENDOR_ID_SAMBA_TNG = 9183\nVENDOR_ID_ALTERBOX = 9184\nVENDOR_ID_MS_INTEGRATION_SERVICES_INC = 9185\nVENDOR_ID_LOGIPOLIS_PTE_LTD = 9186\nVENDOR_ID_EASTMAN_CHEMICAL_COMPANY = 9187\nVENDOR_ID_FORCE_COMPUTERS = 9188\nVENDOR_ID_PROMEDICO_GMBH = 9189\nVENDOR_ID_KATANOO_TECHNOLOGIES = 9190\nVENDOR_ID_BURGIESOFT = 9191\nVENDOR_ID_PIRKAN_TIETOKONE_OY = 9192\nVENDOR_ID_CIRPACK = 9193\nVENDOR_ID_AUSTLII = 9194\nVENDOR_ID_AUTOCONTCONTROL_SYSTEMS_SPOL_S_R_O = 9195\nVENDOR_ID_ALGOTRONICS = 9196\nVENDOR_ID_LYNDON_STATE_COLLEGE = 9197\nVENDOR_ID_TELETRON_LTD = 9198\nVENDOR_ID_DAUM_DATENTECHNIK = 9199\nVENDOR_ID_OBERMEIER_SOFTWARE = 9200\nVENDOR_ID_FASTURN_INC = 9201\nVENDOR_ID_ENSURELINK = 9202\nVENDOR_ID_SEGURIDATA_PRIVADA_SA_DE_CV = 9203\nVENDOR_ID_AURORA_NETWORKS_INC = 9204\nVENDOR_ID_MOJ_NET_DOO = 9205\nVENDOR_ID_DIGITALSPARK = 9206\nVENDOR_ID_SEGNET_TECHNOLOGY_INC = 9207\nVENDOR_ID_HAMILCAR_DEVELOPMENT = 9208\nVENDOR_ID_PEACE_TECHNOLOGY_INC = 9209\nVENDOR_ID_MERLIN_IT_SERVICES_LTD = 9210\nVENDOR_ID_RABOBANK_ICT = 9211\nVENDOR_ID_WAVIUM_AB = 9212\nVENDOR_ID_NETSEAL_TECHNOLOGIES = 9213\nVENDOR_ID_KEMURI_SYSTEMS = 9214\nVENDOR_ID_ERIDAN_INFORMATIQUE = 9215\nVENDOR_ID_UNIVERSIDADE_DE_VORA_DEPARTAMENTO_DE_INFORMTICA = 9216\nVENDOR_ID_BIOBASE_BIOLOGICAL_DATABASES_BIOLOGISCHE_DATENBANKEN_GMBH = 9217\nVENDOR_ID_SKYSOFT_PORTUGAL = 9218\nVENDOR_ID_JULIAOCOM = 9219\nVENDOR_ID_OPENJCC = 9220\nVENDOR_ID_SHAW_COMMUNICATIONS = 9221\nVENDOR_ID_PHILLIPS_PETROLEUM_COMPANY = 9222\nVENDOR_ID_ROSKILDE_UNIVERSITY = 9223\nVENDOR_ID_LAWRENCE_UNIVERSITY = 9224\nVENDOR_ID_FJA = 9225\nVENDOR_ID_MICROTEST_2 = 9226\nVENDOR_ID_ENTRISPHERE_INC = 9227\nVENDOR_ID_GLOBETECH = 9228\nVENDOR_ID_TOTILITIES = 9229\nVENDOR_ID_B4MAD_RESEARCH_LAB_ORGANIZATION = 9230\nVENDOR_ID_ADIR_TECHNOLOGIES = 9231\nVENDOR_ID_NORWEGIAN_MAPPING_AUTHORITY = 9232\nVENDOR_ID_IER_SA = 9233\nVENDOR_ID_SNOWSHORE_NETWORKS_INC = 9234\nVENDOR_ID_FCB_DIRECT_MONTREAL = 9235\nVENDOR_ID_FUNDTECH_CORPORATION = 9236\nVENDOR_ID_NEWISYS = 9237\nVENDOR_ID_IMAGINE_BROADBAND_LIMITED = 9238\nVENDOR_ID_JONESKNOWLEDGECOM = 9239\nVENDOR_ID_INTERNATIONAL_MRI_ACCREDITATION_RESOURCES_LLC = 9240\nVENDOR_ID_UNI_X_SOFTWARE_AG = 9241\nVENDOR_ID_INSTITUTO_DE_MATEMTICA_E_ESTATSTICA_DA_UNIVERSIDADE_DE_SO_PAULO = 9242\nVENDOR_ID_AIRPROD = 9243\nVENDOR_ID_PURECARBON_INC = 9244\nVENDOR_ID_NEUROMICS_INC = 9245\nVENDOR_ID_AUTOMATED_HANDLING_SYSTEMS_INC = 9246\nVENDOR_ID_FEDERAL_MOGUL_CORPORATION = 9247\nVENDOR_ID_PAKTRONIX_SYSTEMS_LLC = 9248\nVENDOR_ID_MUSAMBI_CORPORATION = 9249\nVENDOR_ID_STRIX_SYSTEMS = 9250\nVENDOR_ID_TR_ASSOCIATES = 9251\nVENDOR_ID_HTEL_DIEU_DE_SAINT_JRME = 9252\nVENDOR_ID_BUILDSCAPE_LLC = 9253\nVENDOR_ID_PAJUNAS_INTERACTIVE_INC = 9254\nVENDOR_ID_VICINITY_CORPORATION = 9255\nVENDOR_ID_LIGHTPOINTE_COMMUNICATIONS = 9256\nVENDOR_ID_VOLERA = 9257\nVENDOR_ID_XMLSTRATEGIESNET = 9258\nVENDOR_ID_SYSPOL_CO_LTD = 9259\nVENDOR_ID_ADTEC_CORPORATION = 9260\nVENDOR_ID_DELPHI_AUTOMOTIVE_SYSTEMS_INVESTMENT_CHINA_HOLDING_COLTD = 9261\nVENDOR_ID_EASTNET_CO_LTD = 9262\nVENDOR_ID_CYBERNETICS_TECHNOLOGY_CO_LTD = 9263\nVENDOR_ID_CAERDROIA = 9264\nVENDOR_ID_TDISIE = 9265\nVENDOR_ID_PARSOFT_SYSTEMS_PVT_LTD = 9266\nVENDOR_ID_IN_SYSTEMEGMBH = 9267\nVENDOR_ID_RUHRVERBAND = 9268\nVENDOR_ID_MEDIABROADCAST_GMBH = 9269\nVENDOR_ID_CALLSYS_LTD = 9270\nVENDOR_ID_SIEMENS_NGNI = 9271\nVENDOR_ID_ELEKTROBIT_LTD = 9272\nVENDOR_ID_NEURO_TELECOM = 9273\nVENDOR_ID_ACCESSSEVEN_COMMUNICATIONS_GMBH = 9274\nVENDOR_ID_GENESYS = 9275\nVENDOR_ID_SEMA_SPAIN_NEG = 9276\nVENDOR_ID_LOGICO_SMART_CARD_SOLUTIONS_AG = 9277\nVENDOR_ID_ECONIACOM = 9278\nVENDOR_ID_ARQANA_TECHNOLOGIES_INC = 9279\nVENDOR_ID_ACCESSLINE_COMMUNICATIONS_CORPORATION = 9280\nVENDOR_ID_STANDARD_INSURANCE_COMPANY = 9281\nVENDOR_ID_NOCPULSE = 9282\nVENDOR_ID_COSTA_RICA_INSTITUTE_OF_TECHNOLOGY = 9283\nVENDOR_ID_WESTERN_ILLINOIS_UNIVERSITY = 9284\nVENDOR_ID_INTERNETCDS = 9285\nVENDOR_ID_MAXIMUM_THROUGHPUT_INC = 9286\nVENDOR_ID_ZEUS_COMMUNICATIONS = 9287\nVENDOR_ID_HOSTPRO = 9288\nVENDOR_ID_UNIREZ_INC = 9289\nVENDOR_ID_FIRINNORG = 9290\nVENDOR_ID_RAINFINITY = 9291\nVENDOR_ID_WEBLEY_SYSTEM = 9292\nVENDOR_ID_STATURN_COMPUTER = 9293\nVENDOR_ID_W4Y_DO_BRASIL_LTDA = 9294\nVENDOR_ID_WORKERS_COMPENSATION_FUND = 9295\nVENDOR_ID_XLIGHT_PHOTONICS_LTD = 9296\nVENDOR_ID_AYECA_INC = 9297\nVENDOR_ID_UNIVERSITY_OF_COMPIGNE = 9298\nVENDOR_ID_HELLAS_ON_LINE = 9299\nVENDOR_ID_HYPOSTASIS = 9300\nVENDOR_ID_SPIDER_SOFTWARE = 9301\nVENDOR_ID_ESI_SRL = 9302\nVENDOR_ID_PACKETFRONT_NETWORK_PRODUCTS_AB = 9303\nVENDOR_ID_CONNECTION_TECHNOLOGY_SYSTEMS = 9304\nVENDOR_ID_WESTERN_MICHIGAN_UNIVERSITY = 9305\nVENDOR_ID_OCTAVE_COMMUNICATIONS = 9306\nVENDOR_ID_RCL_ENTERPRISES = 9307\nVENDOR_ID_OASIS_TECHNOLOGY_LTD = 9308\nVENDOR_ID_URZAD_MIASTA_PABIANIC = 9309\nVENDOR_ID_ABITAB_SA = 9310\nVENDOR_ID_DI_TRUTE = 9311\nVENDOR_ID_TRUTH_CONSULTING_TECHNOLOGY = 9312\nVENDOR_ID_DAKOMA = 9313\nVENDOR_ID_CURTIS_FAMILY = 9314\nVENDOR_ID_CARTEL_SECURITE = 9315\nVENDOR_ID_NETVOYAGER = 9316\nVENDOR_ID_TECH2WORK_INC = 9317\nVENDOR_ID_DEBEKA_VERSICHERUNG = 9318\nVENDOR_ID_NETAKTIV = 9319\nVENDOR_ID_NANNING_TELECOM = 9320\nVENDOR_ID_SCREENPEAKS_LTD = 9321\nVENDOR_ID_NETTECH_SA = 9322\nVENDOR_ID_PC_AWAY = 9323\nVENDOR_ID_DIVISION_FO_CANCER_STUDIES_BIRMINGHAM_UK = 9324\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_RIVERSIDE = 9325\nVENDOR_ID_LEWIS_AND_CLARK_COLLEGE = 9326\nVENDOR_ID_HYGEIA_CORPORATION = 9327\nVENDOR_ID_NATIONAL_INSTITUTES_OF_HEALTH_NIH = 9328\nVENDOR_ID_CRUSOE_COMMUNICATIONS_INC = 9329\nVENDOR_ID_SELESTA_SPA = 9330\nVENDOR_ID_MAXWARE_INTERNATIONAL_AS = 9331\nVENDOR_ID_APPLIED_SNMP = 9332\nVENDOR_ID_LINCOM_WIRELESS = 9333\nVENDOR_ID_IPDRORG = 9334\nVENDOR_ID_POWERSOFT = 9335\nVENDOR_ID_PUBLIX_SUPER_MARKETS_INC = 9336\nVENDOR_ID_MINTER_CORP = 9337\nVENDOR_ID_PETERSEN_VENTURES_LLC = 9338\nVENDOR_ID_LEFT_COAST_SYSTEMS_CORP = 9339\nVENDOR_ID_NETWORK_INFINITY = 9340\nVENDOR_ID_CYBERFUSE_TECHNOLOGIES_LLC = 9341\nVENDOR_ID_PENGUIN_COMPUTING = 9342\nVENDOR_ID_COMCEL_SA = 9343\nVENDOR_ID_POWERWAVE_TECHNOLOGIES_INC = 9344\nVENDOR_ID_INFINETIVITY_INC = 9345\nVENDOR_ID_IGEEK_INC = 9346\nVENDOR_ID_AVAZ_NETWORKS = 9347\nVENDOR_ID_GOLDEN_TELECOM_UKRAINE = 9348\nVENDOR_ID_WIZLAN_LTD = 9349\nVENDOR_ID_NETMAGIC_SOLUTIONS_PVT_LTD = 9350\nVENDOR_ID_FORTHNET_SA = 9351\nVENDOR_ID_CONUNDRUM_COMMUNICATIONS = 9352\nVENDOR_ID_UNIVERSITE_DE_METZ = 9353\nVENDOR_ID_GREY_INTERACTIVE_FRANCE = 9354\nVENDOR_ID_KRIVOROZHSKIY_HLEBOKOMBINAT_N1 = 9355\nVENDOR_ID_NPASSAGE_INC = 9356\nVENDOR_ID_IT_BERATUNG_SCHAFFERT = 9357\nVENDOR_ID_WICOM_COMMUNICATIONS_LTD = 9358\nVENDOR_ID_SYMEKO_DATASYSTEMS_BV = 9359\nVENDOR_ID_GREEN_LIGHT_INC = 9360\nVENDOR_ID_OC_SOFTWARE_LABORATORIES_NAMUR = 9361\nVENDOR_ID_ENSEIRB = 9362\nVENDOR_ID_SPELIO = 9363\nVENDOR_ID_INTERPARK_INCORPORATED = 9364\nVENDOR_ID_MINDSURF_NETWORKS_INC = 9365\nVENDOR_ID_CIFRA = 9366\nVENDOR_ID_FASTSIGNS_INTERNATIONAL_INC = 9367\nVENDOR_ID_STORAGE_XSTREAMS = 9368\nVENDOR_ID_MICAH_J_SCHEHL = 9369\nVENDOR_ID_SPACE_TELESCOPE_SCIENCE_INSTITUTE = 9370\nVENDOR_ID_OKOLONA_CHRISTIAN_CHURCH = 9371\nVENDOR_ID_IKADEGA_INC = 9372\nVENDOR_ID_CLEAR_INK = 9373\nVENDOR_ID_HERMAIONORG = 9374\nVENDOR_ID_BASLER_KANTONALBANK = 9375\nVENDOR_ID_CVS_PHARMACYRUSSELL = 9376\nVENDOR_ID_VOYAGER_COMPUTER_CORPORATION = 9377\nVENDOR_ID_ILEX_SYSTEMS = 9378\nVENDOR_ID_EUMITCOM_TECHNOLOGY_INC = 9379\nVENDOR_ID_OCTOGON_GESELLSCHAFT_FR_COMPUTER_DIENSTLEISTUNGEN_MBH = 9380\nVENDOR_ID_WALTER_BIERING_GMBH_MEDIAHAUS_UND_GRAFISCHER_BETRIEB = 9381\nVENDOR_ID_WORAHNET = 9382\nVENDOR_ID_ANGELES_DESIGN_SYSTEMS = 9383\nVENDOR_ID_D2K_INC = 9384\nVENDOR_ID_JASON_WOOD = 9385\nVENDOR_ID_CLAYTON_COLLEGE_STATE_UNIVERSITY = 9386\nVENDOR_ID_COMPANIA_MEA = 9387\nVENDOR_ID_ASIAINFO = 9388\nVENDOR_ID_MAGICAL_FRUIT = 9389\nVENDOR_ID_WT_SERVICES_INC = 9390\nVENDOR_ID_AUDIENTIA = 9391\nVENDOR_ID_CANNON_HILL_ANGLICAN_COLLEGE = 9392\nVENDOR_ID_INTECS_INFORMATION_LTD = 9393\nVENDOR_ID_VISANA_SERVICES_AG = 9394\nVENDOR_ID_UEC_TECHNOLOGIES = 9395\nVENDOR_ID_WALT_DISNEY_INTERNATIONAL = 9396\nVENDOR_ID_VARTECH_SOLUTIONS_INC = 9397\nVENDOR_ID_TOKYO_METALLIC_COMMUNICATIONS_CORP = 9398\nVENDOR_ID_CONSUL_RISK_MANAGEMENTDIRK_WISSE_KOOS_LODEWIJKX = 9399\nVENDOR_ID_FACHHOCHSCHULE_KONSTANZ = 9400\nVENDOR_ID_AML_WIRELESS_SYSTEMS = 9401\nVENDOR_ID_DCRYPT_LTD = 9402\nVENDOR_ID_ALLINSTANT = 9403\nVENDOR_ID_DEWPOINT_INC = 9404\nVENDOR_ID_KINGLAND_SYSTEMS_CORPORATION = 9405\nVENDOR_ID_SYNCHROLOGIC = 9406\nVENDOR_ID_BROADATA_COMMUNICATIONS_INC = 9407\nVENDOR_ID_CHESTER_ENTERPRISES = 9408\nVENDOR_ID_CLICKSERVICES = 9409\nVENDOR_ID_AXE_ONLINE_PTY_LIMITED = 9410\nVENDOR_ID_HITWISE_PTY_LTD = 9411\nVENDOR_ID_CONTELA = 9412\nVENDOR_ID_OPERAX_AB = 9413\nVENDOR_ID_DIGITAL_GLOBE_INC = 9414\nVENDOR_ID_ARCHIMED = 9415\nVENDOR_ID_UNASSIGNED_10 = 9416\nVENDOR_ID_EGG = 9417\nVENDOR_ID_IVISTAR_AG = 9418\nVENDOR_ID_SIEMENS_SINIA = 9419\nVENDOR_ID_BALTIMORE_TECHNOLOGIES = 9420\nVENDOR_ID_VODAFONE_D2 = 9421\nVENDOR_ID_ATANION_GMBH = 9422\nVENDOR_ID_MSA_INFOR_SISTEMAS_E_AUTOMACAO = 9423\nVENDOR_ID_AC_AUTOMACAO_E_CONTROLE = 9424\nVENDOR_ID_ROTTERDAM_SCHOOL_OF_MANAGEMENT = 9425\nVENDOR_ID_ADIGIDA_SOLUTIONS = 9426\nVENDOR_ID_CATEGORIC_SOFTWARE = 9427\nVENDOR_ID_ORGENIC_SOFTWARE = 9428\nVENDOR_ID_MARIINSKY_THEATRE = 9429\nVENDOR_ID_PROGRESS_TELECOM = 9430\nVENDOR_ID_PUSH_INC = 9431\nVENDOR_ID_VINGAGE_CORPORATION = 9432\nVENDOR_ID_VATICOR_INC = 9433\nVENDOR_ID_TELERGY_NETWORK_SERVICES = 9434\nVENDOR_ID_BOLETIN_OFICIAL_DEL_ESTADO = 9435\nVENDOR_ID_CRYSBERG_A_S = 9436\nVENDOR_ID_LANCER_INSURANCE_COMPANY = 9437\nVENDOR_ID_YELLOWSHIRT_INC = 9438\nVENDOR_ID_GREEN_POINT_PTY_LTD = 9439\nVENDOR_ID_EKO_SYSTEM_INC = 9440\nVENDOR_ID_WALL_STREET_SYSTEMS_INC = 9441\nVENDOR_ID_ATHEROS_COMMUNICATIONS_INC = 9442\nVENDOR_ID_VIRAGE_INC = 9443\nVENDOR_ID_FIREMON = 9444\nVENDOR_ID_TJB = 9445\nVENDOR_ID_INDIANA_UNIVERSITY = 9446\nVENDOR_ID_RED_FERN_SOFTWARE = 9447\nVENDOR_ID_ZYFER = 9448\nVENDOR_ID_FLORIDA_STATE_UNIVERSITY = 9449\nVENDOR_ID_ZYOPTICS_INC = 9450\nVENDOR_ID_DIGEO = 9451\nVENDOR_ID_NETLABS_SRL = 9452\nVENDOR_ID_BARNARDOS_NEW_ZEALAND = 9453\nVENDOR_ID_FUTURE_GATE_SOFTWARE_GMBH = 9454\nVENDOR_ID_INTELLICLAIM_INC = 9455\nVENDOR_ID_ALLEGRO_NETWORKS = 9456\nVENDOR_ID_BROADBAND_STORAGE_INC = 9457\nVENDOR_ID_TCSI_INC = 9458\nVENDOR_ID_NILESOFT_LTD = 9459\nVENDOR_ID_SALTA_MONTE_SOLUTIONS_INC = 9460\nVENDOR_ID_Y2FUNCOM = 9461\nVENDOR_ID_MMLAB_KTU = 9462\nVENDOR_ID_GEYER_UND_WEINIG_GMBH = 9463\nVENDOR_ID_SIEL_SPA = 9464\nVENDOR_ID_OLDENBURGISCHE_LANDESBANK_AG = 9465\nVENDOR_ID_CILEA = 9466\nVENDOR_ID_IBANX_BV = 9467\nVENDOR_ID_UNIVERSITE_DE_LA_MEDITERRANEE_AIX_MARSEILLE_2 = 9468\nVENDOR_ID_STARLAB_NV_SA = 9469\nVENDOR_ID_ALFACON_TEAM_SPA = 9470\nVENDOR_ID_PORTWISE_AB = 9471\nVENDOR_ID_JEJEORG = 9472\nVENDOR_ID_SAFESTONE_TECHNOLOGIES_PLC = 9473\nVENDOR_ID_SIRT = 9474\nVENDOR_ID_365_CORPORATION = 9475\nVENDOR_ID_ESRF = 9476\nVENDOR_ID_MARKET_CENTRAL_INC = 9477\nVENDOR_ID_MYLUCKYWORLD = 9478\nVENDOR_ID_WEBCOLLAGE = 9479\nVENDOR_ID_NOTUS_KEY_LIMITED = 9480\nVENDOR_ID_BACKER_SOFTWARE_RESEARCH = 9481\nVENDOR_ID_ENS_LYON = 9482\nVENDOR_ID_PSI_AG = 9483\nVENDOR_ID_ISION_FRANCE = 9484\nVENDOR_ID_FUTUROCOM = 9485\nVENDOR_ID_POWWOW_GERMANY_GMBH = 9486\nVENDOR_ID_SAARDATA_GMBH = 9487\nVENDOR_ID_CIRCUIT_CITY_STORES = 9488\nVENDOR_ID_SAXA_INC_FORMERLY_TAIKO_ELECTRIC_WORKS_LTD = 9489\nVENDOR_ID_SCORECON_INTERNATIONAL = 9490\nVENDOR_ID_VECTAN = 9491\nVENDOR_ID_THE_COBALT_GROUP = 9492\nVENDOR_ID_IOPEN_TECHNOLOGIES_LTD = 9493\nVENDOR_ID_IFILM = 9494\nVENDOR_ID_ETEE2KNET = 9495\nVENDOR_ID_ATT_ENHANCED_NETWORK_SERVICES = 9496\nVENDOR_ID_IDINI_CORPORATION = 9497\nVENDOR_ID_TELEKOMMUNIKATION_MITTLERES_RUHRGEBIET_GMBH = 9498\nVENDOR_ID_EXACUBE_SYSTEM_INC = 9499\nVENDOR_ID_BYTE_ALLIANCE = 9500\nVENDOR_ID_SVA_INTRUSIONCOM_CO_LTD = 9501\nVENDOR_ID_ROSS_TECHNOLOGY_GROUP_INC = 9502\nVENDOR_ID_TELEMOVIL_EL_SALVADOR = 9503\nVENDOR_ID_TOPSNET_GMBH_CO_ONLINE_PUBLISHING_SERVICES_KG = 9504\nVENDOR_ID_BONE_LABS_GMBH = 9505\nVENDOR_ID_REAL_SOLUTIONS_LTD = 9506\nVENDOR_ID_WHARTON_ELECTRONICS = 9507\nVENDOR_ID_MOBILESPEAR_INC = 9508\nVENDOR_ID_ENKASH_PAYMENT_NETWORK = 9509\nVENDOR_ID_KONSYS = 9510\nVENDOR_ID_VULKAN_TECHNIC_GMBH = 9511\nVENDOR_ID_ONLINE_CONSULTING_LTD = 9512\nVENDOR_ID_EXACOMM_SYSTEMS = 9513\nVENDOR_ID_KONICA_BUSINESS_TECHNOLOGIES_INC = 9514\nVENDOR_ID_SUGAR_CREEK_PACKING_CO = 9515\nVENDOR_ID_DIGITAL_WORLD_SERVICES = 9516\nVENDOR_ID_SANRISE_INC = 9517\nVENDOR_ID_PRATT_WHITNEY = 9518\nVENDOR_ID_SOWARD_NETWORK_SOLUTIONS = 9519\nVENDOR_ID_PHASE2_SOFTWARE_CORP = 9520\nVENDOR_ID_PED_COMPUTERS = 9521\nVENDOR_ID_PERSONETA = 9522\nVENDOR_ID_ST_E15 = 9523\nVENDOR_ID_ANDIAMO_SYSTEMS_INC = 9524\nVENDOR_ID_BBC_MONITORING = 9525\nVENDOR_ID_SHAWMUT_DESIGN_CONSTRUCTION = 9526\nVENDOR_ID_INKRAS_NETWORKS_CORPORATION = 9527\nVENDOR_ID_IYAGO = 9528\nVENDOR_ID_GLOBAL_RELAY_INC = 9529\nVENDOR_ID_CQUR_COM = 9530\nVENDOR_ID_INTEGRA_TELECOM = 9531\nVENDOR_ID_GROUP_1_SOFTWARE = 9532\nVENDOR_ID_TRUEDISK = 9533\nVENDOR_ID_HANDREW = 9534\nVENDOR_ID_ZURITA_SOLUTIONS = 9535\nVENDOR_ID_MASSEY_UNIVERSITY = 9536\nVENDOR_ID_NAVOX_CORPORATION = 9537\nVENDOR_ID_STORAGEWAY_INC = 9538\nVENDOR_ID_STSN = 9539\nVENDOR_ID_ALTENTIA = 9540\nVENDOR_ID_LOKAAL_NETWERK_GRAVENSTRAAT = 9541\nVENDOR_ID_COLLEGE_OF_ENGINEERING_AND_COMPUTER_SCIENCE = 9542\nVENDOR_ID_SCHWOO_INC = 9543\nVENDOR_ID_ELECTRICAL_AND_COMPUTER_ENGINEERING_DEPT_UBC = 9544\nVENDOR_ID_STATE_STREET_CORP = 9545\nVENDOR_ID_DOMINET_SYSTEMS = 9546\nVENDOR_ID_FOO_CORPORATION = 9547\nVENDOR_ID_DATACHRON_INC = 9548\nVENDOR_ID_SOUTHERN_NETWORK_SERVICES_INC = 9549\nVENDOR_ID_VOX2VOX_COMMUNICATIONS_INC = 9550\nVENDOR_ID_KOMPU_ART_STUDIU_KOMPUTEROWE = 9551\nVENDOR_ID_FINANCIAL_IQ_PTY_LTD = 9552\nVENDOR_ID_AUTOMATON_LTD = 9553\nVENDOR_ID_CLEAR_RIVER_TECHNOLOGIES_LLC = 9554\nVENDOR_ID_ASIAINFO_TECHNOLOGIESCHINA_INC = 9555\nVENDOR_ID_GREAT_WALL_BROADBANK_NETWORK_SERVICE_COLT = 9556\nVENDOR_ID_SYNSO_INC = 9557\nVENDOR_ID_KENT_RIDGE_DIGITAL_LABS = 9558\nVENDOR_ID_NATIONAL_SECURITY_RESEARCH_INSTITUTE = 9559\nVENDOR_ID_SECUICOM_CORPORATION = 9560\nVENDOR_ID_NETIA_TELEKOM_SA = 9561\nVENDOR_ID_MAGNUM_IMPERIUM_LIMITED = 9562\nVENDOR_ID_SUFFOLK_COLLEGE = 9563\nVENDOR_ID_MEDIAWAYS_GMBH_INTERNET_SERVICES = 9564\nVENDOR_ID_XEROX_MOBILE_SOLUTIONS = 9565\nVENDOR_ID_HBO_CE = 9566\nVENDOR_ID_SKILLDEAL_AG = 9567\nVENDOR_ID_DATAGRID = 9568\nVENDOR_ID_MGF_LOGISTIQUE = 9569\nVENDOR_ID_UNIVERSITY_OF_LEOBEN_AUSTRIA = 9570\nVENDOR_ID_ERSKINE_SYSTEMS_LTD = 9571\nVENDOR_ID_ALIENTHINGCOM = 9572\nVENDOR_ID_MB_NET = 9573\nVENDOR_ID_NCIC_CLINICAL_TRIALS = 9574\nVENDOR_ID_GRUPO_DE_PROGRAMAO_NA_WEBWPG = 9575\nVENDOR_ID_CRDIT_MUTUEL_DE_BRETAGNE = 9576\nVENDOR_ID_XTELLIGENT_IT_CONSULTING_GMBH = 9577\nVENDOR_ID_MISSION_CRITICAL_LINUX_INC = 9578\nVENDOR_ID_FOLLOWAP = 9579\nVENDOR_ID_NEW_HEMISPHERE_COMPUTER_SERVICES = 9580\nVENDOR_ID_QUAD_ONE_TECHNOLOGIES_PVT_LTD = 9581\nVENDOR_ID_CCS_COMMUNICATIONS_PTY_LTD = 9582\nVENDOR_ID_BBC_TECHNOLOGY_SUPPLY_LTD = 9583\nVENDOR_ID_LUCENT_TECHNOLOGIES_NADP = 9584\nVENDOR_ID_NATIONAL_ENHANCE_TECHNOLOGY_CORP = 9585\nVENDOR_ID_DEBIAN = 9586\nVENDOR_ID_GLOBAL_TRUST_AUTHORITY = 9587\nVENDOR_ID_IT_INSOURCING = 9588\nVENDOR_ID_CURRENEX_INC = 9589\nVENDOR_ID_THE_MATHWORKS_INC = 9590\nVENDOR_ID_THINKING_CAT_ENTERPRISES = 9591\nVENDOR_ID_LUKE_CRAWFORD_ENTERPRISES = 9592\nVENDOR_ID_SYSNET_INFORMTICA_LTDA = 9593\nVENDOR_ID_TAPE_PRODUCTS_COMPANY = 9594\nVENDOR_ID_ZEPHION_NETWORKS = 9595\nVENDOR_ID_PIMPCODE = 9596\nVENDOR_ID_BLUE_SILICON = 9597\nVENDOR_ID_MBNA_AMERICA = 9598\nVENDOR_ID_LDAPGURUCOM_LLC = 9599\nVENDOR_ID_WILLIAMS_TECHNOLOGY_CONSULTING_SERVICES = 9600\nVENDOR_ID_KEEWAYTINOOK_OKIMAKANAK = 9601\nVENDOR_ID_ZOFTECH_INC = 9602\nVENDOR_ID_AF_ENTERPRISES = 9603\nVENDOR_ID_AFUU = 9604\nVENDOR_ID_XYTERRA_COMPUTING_INC = 9605\nVENDOR_ID_LINVISION_BV = 9606\nVENDOR_ID_MSTC = 9607\nVENDOR_ID_NTELSOH = 9608\nVENDOR_ID_IMPASTER_CO_LTD = 9609\nVENDOR_ID_MILOSCHNET = 9610\nVENDOR_ID_INFOSIM = 9611\nVENDOR_ID_KOBE_STEEL_LTD = 9612\nVENDOR_ID_NLSDE = 9613\nVENDOR_ID_GOCRUISEDIRECTCOM = 9614\nVENDOR_ID_DANFOSS_A_S = 9615\nVENDOR_ID_KREATEL_COMMUNICATIONS_AB = 9616\nVENDOR_ID_GSX_GROUPWARE_SOLUTIONS = 9617\nVENDOR_ID_UTRECHTSE_WERKBEDRIJVEN = 9618\nVENDOR_ID_NEXTRA_AUSTRIA = 9619\nVENDOR_ID_NATIONAL_LAND_SURVEY_OF_FINLAND = 9620\nVENDOR_ID_MOLO_AFRIKA_SPEECH_TECHNOLOGIES = 9621\nVENDOR_ID_QUESCOM = 9622\nVENDOR_ID_COPENHAGEN_AIRPORTS = 9623\nVENDOR_ID_RADIANZ = 9624\nVENDOR_ID_UTESCH = 9625\nVENDOR_ID_ALESSANDRO_TRIGLIA = 9626\nVENDOR_ID_S_J_SHIPINSKI_SERVICES = 9627\nVENDOR_ID_GROUPE_CASINO = 9628\nVENDOR_ID_MASTERMIND_TECHNOLOGIES = 9629\nVENDOR_ID_E_MOVEUM = 9630\nVENDOR_ID_ESNIFF_INC = 9631\nVENDOR_ID_INDIVIDUAL = 9632\nVENDOR_ID_SED_SYSTEMS = 9633\nVENDOR_ID_API_NETWORKS_INC = 9634\nVENDOR_ID_TROPICO_SISTEMAS_E_TELECOMUNICAE7F5ES_SA = 9635\nVENDOR_ID_NETFORMAT_GMBH = 9636\nVENDOR_ID_ALLIANCE_LEICESTER_PLC = 9637\nVENDOR_ID_ALPHAGRAPHICS_INC = 9638\nVENDOR_ID_APPIUM_AB = 9639\nVENDOR_ID_ASTROLINK_INTERNATIONAL_LLC = 9640\nVENDOR_ID_AZUSA_PACIFIC_UNIVERSITY = 9641\nVENDOR_ID_BIBOP_RESEARCH_INT_SPA_GIANUGO = 9642\nVENDOR_ID_CEULP_ULBRA = 9643\nVENDOR_ID_CORNWALL_INTERNET_LIMITED = 9644\nVENDOR_ID_COURTADENET = 9645\nVENDOR_ID_CYBECTEC = 9646\nVENDOR_ID_EWIP = 9647\nVENDOR_ID_GEEKBONE_CO_LTD = 9648\nVENDOR_ID_HOCHSCHULE_BREMEN = 9649\nVENDOR_ID_INFOCLAN = 9650\nVENDOR_ID_KELE = 9651\nVENDOR_ID_LNS_SA = 9652\nVENDOR_ID_MOSOTECH_LIMITED = 9653\nVENDOR_ID_NIC_FRANCE = 9654\nVENDOR_ID_OPTIDEV_AB = 9655\nVENDOR_ID_ROUTIT_BV = 9656\nVENDOR_ID_S_SCAPE_COMMUNICATIONS_INC = 9657\nVENDOR_ID_SOLERS = 9658\nVENDOR_ID_SYNAPSYS_LTD = 9659\nVENDOR_ID_TELECEL_COMUNICAES_PESSOAIS_SA = 9660\nVENDOR_ID_TELETRON_INC = 9661\nVENDOR_ID_TUEV_AT_TRUST_CENTER_GMBH = 9662\nVENDOR_ID_UNIVERSITE_LUMIERE_LYON2 = 9663\nVENDOR_ID_WIDGITAL = 9664\nVENDOR_ID_ZYGATE_COMMUNICATIONS_INC = 9665\nVENDOR_ID_ALCATEL_OPTRONICS = 9666\nVENDOR_ID_AUSTAR_UNITED = 9667\nVENDOR_ID_TALENT_NETWORK_SECURITY_TECHNOLOGY_CO_LTD = 9668\nVENDOR_ID_UNIVERSITY_OF_LONDON = 9669\nVENDOR_ID_BROADI = 9670\nVENDOR_ID_TIME_WARNER = 9671\nVENDOR_ID_APROPOS_TECHNOLOGY_INC = 9672\nVENDOR_ID_DENISON_UNIVERSITY = 9673\nVENDOR_ID_FINGERHUT = 9674\nVENDOR_ID_GRUPO_FINANCIERO_UNO = 9675\nVENDOR_ID_HOTTISDE = 9676\nVENDOR_ID_HYDRIADS = 9677\nVENDOR_ID_KU_LEUVEN = 9678\nVENDOR_ID_MBALANCE = 9679\nVENDOR_ID_SELECTMETRICS_INC = 9680\nVENDOR_ID_MORTGAGE_SYSTEMS_INTERNATIONAL = 9681\nVENDOR_ID_NOVADECK = 9682\nVENDOR_ID_PLATTSBURGH_STATE_UNIVERSITY = 9683\nVENDOR_ID_POWERISENET = 9684\nVENDOR_ID_RANCH_NETWORKS_INC = 9685\nVENDOR_ID_RUBY_NETWORKS_INC = 9686\nVENDOR_ID_SAPROPERTYCOM = 9687\nVENDOR_ID_TAHOE_NETWORKS_INC = 9688\nVENDOR_ID_TBD_NETWORKS = 9689\nVENDOR_ID_TERRALAB = 9690\nVENDOR_ID_CHILDRENS_HOSPITAL_COLORADO_FORMERLY_THE_CHILDRENS_HOSPITAL_OF_DENVER = 9691\nVENDOR_ID_TOOL_OBJECT = 9692\nVENDOR_ID_UND_SCHOOL_OF_MEDICINE_AND_HEALTH_SCIENCES = 9693\nVENDOR_ID_ARBOR_NETWORKS = 9694\nVENDOR_ID_ENCOTONE_LTD = 9695\nVENDOR_ID_UFFIZIO_INDIA_SOFTWARE_CONSULTANTS_PVT_LTD = 9696\nVENDOR_ID_ACCELANCE = 9697\nVENDOR_ID_AIA_AUSTRALIA = 9698\nVENDOR_ID_AXIS_CONSULTING = 9699\nVENDOR_ID_BOEHRINGER_INGELHEIM_GMBH = 9700\nVENDOR_ID_COMMERCE_NTI = 9701\nVENDOR_ID_COMTECH_BELGIUM = 9702\nVENDOR_ID_DATAFOUNDATION_INCVALERII = 9703\nVENDOR_ID_DIVERSIFIED_RESOURCEFUL_SOLUTIONS_INC = 9704\nVENDOR_ID_ECOS_GMBH = 9705\nVENDOR_ID_HACKERSLAB = 9706\nVENDOR_ID_INSTITUT_NATIONAL_POLYTECHNIQUE_DE_LORRAINE = 9707\nVENDOR_ID_JACK_MORTON_WORLDWIDE = 9708\nVENDOR_ID_MICRO_CONNECT_PTY_LTD = 9709\nVENDOR_ID_MONZOON_NETWORKS_AG = 9710\nVENDOR_ID_NOVEDIA = 9711\nVENDOR_ID_OBZEN_INC = 9712\nVENDOR_ID_OPERA_SOFTWARE_AS = 9713\nVENDOR_ID_RUHRSOFT = 9714\nVENDOR_ID_SIGMA_AB = 9715\nVENDOR_ID_STATE_OF_NORTH_DAKOTA = 9716\nVENDOR_ID_TELECA_AB = 9717\nVENDOR_ID_TRANSACT_COMMUNICATIONS = 9718\nVENDOR_ID_TRONICPLANET_ONLINE_DATENDIENST_GMBH = 9719\nVENDOR_ID_TRYX = 9720\nVENDOR_ID_VWR_INTERNATIONAL = 9721\nVENDOR_ID_WORKHORSE_COMPUTING = 9722\nVENDOR_ID_CORADIANT = 9723\nVENDOR_ID_DATACAST_INC = 9724\nVENDOR_ID_INFOSERVICE = 9725\nVENDOR_ID_NITROBA = 9726\nVENDOR_ID_TRYLLIAN = 9727\nVENDOR_ID_WWF_WORT_TON_GMBH_E_MEDIA = 9728\nVENDOR_ID_EVERELITE_CO_LTD = 9729\nVENDOR_ID_SOLUTUS_PTY_LIMITED = 9730\nVENDOR_ID_5DOWN = 9731\nVENDOR_ID_ADRENALINE_INGENIERIE_MULTIMEDIA = 9732\nVENDOR_ID_ARAL_SYSTEMS_GMBH = 9733\nVENDOR_ID_ASTRUM_SOFTWARE_CORPORATION = 9734\nVENDOR_ID_COREDUMP_KY = 9735\nVENDOR_ID_DUBLIN_CITY_UNIVERSITY = 9736\nVENDOR_ID_FOURTHEYE = 9737\nVENDOR_ID_GEDOPLAN_GMBH = 9738\nVENDOR_ID_HOBNOBBERSNET = 9739\nVENDOR_ID_IBEAM_BROADCASTING_CORPORATION = 9740\nVENDOR_ID_KEIREN = 9741\nVENDOR_ID_DESCOM_CONSULTING_SL = 9742\nVENDOR_ID_NCHICA = 9743\nVENDOR_ID_PEOPLECALLCOM = 9744\nVENDOR_ID_RADIX_CONTROLS_INC = 9745\nVENDOR_ID_RFNET_TECHNOLOGIES_PTE_LTD = 9746\nVENDOR_ID_ROAMINGTEST_LTD = 9747\nVENDOR_ID_ROW_SOFTWARE_AND_WEB_DESIGN = 9748\nVENDOR_ID_SPECTRALINK_CORPORATION = 9749\nVENDOR_ID_THE_PILLARS = 9750\nVENDOR_ID_TREVILON_CORP = 9751\nVENDOR_ID_UNIVERSITY_OF_MISSOURI = 9752\nVENDOR_ID_VERNIER_NETWORKS_INC = 9753\nVENDOR_ID_VERTIS_DSG_CHICAGO = 9754\nVENDOR_ID_WEBASTO_INFORMATIONSSYSTEME_GMBH = 9755\nVENDOR_ID_WOERD_ERDMENGER_WOLTER_GBR = 9756\nVENDOR_ID_ARAL_AKTIENGESELLSCHAFT_CO_KG = 9757\nVENDOR_ID_METADIGM_LTD = 9758\nVENDOR_ID_APLICACIONES_Y_CONSULTORIA_SA_DE_CV = 9759\nVENDOR_ID_CELLCAST = 9760\nVENDOR_ID_CORPORATE_EXPRESS = 9761\nVENDOR_ID_DATACOM_SYSTEMS_INC = 9762\nVENDOR_ID_EONITE_INC = 9763\nVENDOR_ID_FORSCHUNGSZENTRUM_ROSSENDORF_EV = 9764\nVENDOR_ID_ILRYUNG_TELESYS = 9765\nVENDOR_ID_JOSEPH_S_DOVGAN_DDS_MS = 9766\nVENDOR_ID_LECTRON_CO_LTD = 9767\nVENDOR_ID_LYNCHBURG_COLLEGE = 9768\nVENDOR_ID_NUANCE_COMMUNICATIONS_2 = 9769\nVENDOR_ID_OPENOFFICEORG = 9770\nVENDOR_ID_PAION_CO_LTD = 9771\nVENDOR_ID_PENTASECURITY = 9772\nVENDOR_ID_SPUNHEAD_INDUSTRIES = 9773\nVENDOR_ID_STREETS_ONLINE_LTD = 9774\nVENDOR_ID_TNT_SOFTWARE_INC = 9775\nVENDOR_ID_WIRELESS_NETWORK_SERVICES = 9776\nVENDOR_ID_ARELNET_LTD = 9777\nVENDOR_ID_AXONLINK = 9778\nVENDOR_ID_EMPIRE_STATE_COLLEGE = 9779\nVENDOR_ID_ENTREPRISE_DES_POSTES_ET_TELECOMMUNICATIONS = 9780\nVENDOR_ID_JERNTORGET_SVERIGE_AB = 9781\nVENDOR_ID_JM_FAMILY_ENTERPRISES_INC = 9782\nVENDOR_ID_VAYUSPHERE_INC = 9783\nVENDOR_ID_ICOSERVE_INFORMATION_TECHNOLOGIES = 9784\nVENDOR_ID_PRAXIS_TECHNICAL_GROUP_INC = 9785\nVENDOR_ID_AIS_ANGEWANDTEINFORMATIONS_SYSTEME_GMBH = 9786\nVENDOR_ID_ACTIVESTATE_CORP = 9787\nVENDOR_ID_ADVISOR_TECHNOLOGIES_LIMITED = 9788\nVENDOR_ID_ASTARO_AG = 9789\nVENDOR_ID_AUSTRALIA_ON_LINE = 9790\nVENDOR_ID_CENTRE_DE_TELECOMUNICACIONS_I_TECNOLOGIES_DE_LA_INFORMACIO = 9791\nVENDOR_ID_CLAYHILL_KG = 9792\nVENDOR_ID_CLOUDSHIELD_TECHNOLOGIES_INC = 9793\nVENDOR_ID_CYTBEN = 9794\nVENDOR_ID_EBS_DEALING_RESOURCES_INC = 9795\nVENDOR_ID_ENX_ASSOCIATION_FORMERLY_EUROPEAN_NETWORK_EXCHANGE = 9796\nVENDOR_ID_EVER_SP_Z_OO = 9797\nVENDOR_ID_GRIFF_IT_LTD = 9798\nVENDOR_ID_HOLOS_SOFTWARE_INC = 9799\nVENDOR_ID_INIT_8 = 9800\nVENDOR_ID_ISIS_FRONTIER_COMMUNICATIONS = 9801\nVENDOR_ID_IUFM_DE_ROUEN = 9802\nVENDOR_ID_L_3_COMMUNICATION_SYSTEMS_EAST = 9803\nVENDOR_ID_LEFTHAND_NETWORKS = 9804\nVENDOR_ID_NEVEDA_CITY_SCHOOL_DISTRICT = 9805\nVENDOR_ID_PRIDE_INDUSTRIES = 9806\nVENDOR_ID_PRISM_HOLDING_LIMITED = 9807\nVENDOR_ID_ROCKLEA_SPINNING_MILLS_PTY_LTD = 9808\nVENDOR_ID_ROOT_INT = 9809\nVENDOR_ID_SAGENT = 9810\nVENDOR_ID_SECURE_APPLIANCE_SYSTEMS = 9811\nVENDOR_ID_SOLNET = 9812\nVENDOR_ID_TAB_QUEENSLAND_LIMITED = 9813\nVENDOR_ID_TELIA_IT_SERVICE_AB = 9814\nVENDOR_ID_VSPACE_INC = 9815\nVENDOR_ID_WANWALL = 9816\nVENDOR_ID_WAVENET_INTERNATIONAL_PVT_LTD = 9817\nVENDOR_ID_XWAVE_GMBH = 9818\nVENDOR_ID_YLEZ_TECHNOLOGIES_PTE_LTD = 9819\nVENDOR_ID_ZOX_IT = 9820\nVENDOR_ID_ZOZNAM_SRO = 9821\nVENDOR_ID_ACCELLA_TECHNOLOGIES_CO_LTD = 9822\nVENDOR_ID_DIAGEO = 9823\nVENDOR_ID_GENTEK = 9824\nVENDOR_ID_GEOSPIZA_INC = 9825\nVENDOR_ID_IMAGICODE_STUDIOS = 9826\nVENDOR_ID_NEOCLES = 9827\nVENDOR_ID_PGAMAPD = 9828\nVENDOR_ID_SAIT_LTD = 9829\nVENDOR_ID_THUNDERBIRD_THE_AMERICAN_GRADUATE_SCHOOL_OF_INTERNATIONAL_MANAGEMENT = 9830\nVENDOR_ID_VIVRE_INC = 9831\nVENDOR_ID_SOLOBIRD = 9832\nVENDOR_ID_LEGEND_HOLDINGS_LTD = 9833\nVENDOR_ID_AGENCJA_USLUG_INFORMATYCZNYCHARTCOMP = 9834\nVENDOR_ID_ALIEN_NETWORK = 9835\nVENDOR_ID_AOK_BAYERN = 9836\nVENDOR_ID_BALL_STATE_UNIVERSITY = 9837\nVENDOR_ID_BROADVIEW_NETWORKS_INC = 9838\nVENDOR_ID_CAREL = 9839\nVENDOR_ID_CARREREGROUP = 9840\nVENDOR_ID_CHRISTIAN_DUSEK_EDV_DIENSTLEISTUNGEN = 9841\nVENDOR_ID_ET_NETWORKS = 9842\nVENDOR_ID_KAI_INDUSTRIES = 9843\nVENDOR_ID_KANSAS_STATE_UNIVERSITY = 9844\nVENDOR_ID_LANBIRD_TECHNOLOGY_CO_LTD = 9845\nVENDOR_ID_LIP_LABORATRIO_DE_INSTRUMENTAO_E_FSICA_EXPERIMENTAL_DE_PARTCULAS = 9846\nVENDOR_ID_LISTENCOM = 9847\nVENDOR_ID_LOU_JOHNSON = 9848\nVENDOR_ID_M_WEB_INDONESIA = 9849\nVENDOR_ID_NEXTGIG = 9850\nVENDOR_ID_NTT_SOFT = 9851\nVENDOR_ID_ODIGO_INC = 9852\nVENDOR_ID_PAYMENT_TECHNOLOGIES = 9853\nVENDOR_ID_RED_BOX_RECORDERS_LIMITED = 9854\nVENDOR_ID_SHAWSOFT_GMBH = 9855\nVENDOR_ID_UCLA_COMMUNICATIONS_TECHNOLOGY_SERVICES = 9856\nVENDOR_ID_UNICOM_AN_E_SECURITY_COMPANY = 9857\nVENDOR_ID_UNIVERSITY_OF_MARYLAND_BALTIMORE_COUNTY = 9858\nVENDOR_ID_UNIVERSITY_OF_MEDICINE_AND_DENTISTRY_OF_NEW_JERSEY = 9859\nVENDOR_ID_VIZIONAL_TECHNOLOGIES_INC = 9860\nVENDOR_ID_WEBDESIGN_INTERNET_SERVICE_GMBH = 9861\nVENDOR_ID_CLAREDI_CORPORATION = 9862\nVENDOR_ID_DATAROJAHN_A_S = 9863\nVENDOR_ID_J_WALTER_THOMPOSON_COMPANY = 9864\nVENDOR_ID_KARMANOS_CANCER_INSTITUTE = 9865\nVENDOR_ID_OUTOKUMPU_OYJ = 9866\nVENDOR_ID_THIRD_RAIL_AMERICAS = 9867\nVENDOR_ID_MILLINET_CO_LTD = 9868\nVENDOR_ID_NETWORK_LABORATORY_OF_NANKAI_UNIVERSITY = 9869\nVENDOR_ID_GRAVITON_INC = 9870\nVENDOR_ID_FINDLATER_WINE_MERCHANTS = 9871\nVENDOR_ID_GEZ = 9872\nVENDOR_ID_VITERRA_AG = 9873\nVENDOR_ID_BO_AKADEMI_UNIVERSITY = 9874\nVENDOR_ID_AVAILABLE_SUPPLY_INC = 9875\nVENDOR_ID_B2I_TOULOUSE = 9876\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_EAST_BAY = 9877\nVENDOR_ID_CAREGROUP_HEALTHCARE_SYSTEM = 9878\nVENDOR_ID_COX_COMMUNICATIONS_LAS_VEGAS = 9879\nVENDOR_ID_DATA_JUNCTION_CORPORATION = 9880\nVENDOR_ID_EITA_TECHNOLOGIES_INC = 9881\nVENDOR_ID_FLASH_TECHNOLOGY = 9882\nVENDOR_ID_FREE_TRADE_ONLINE = 9883\nVENDOR_ID_FROST_EDV = 9884\nVENDOR_ID_GREEN_PACKET_INC = 9885\nVENDOR_ID_INCENDIARY_NETWORKS = 9886\nVENDOR_ID_KRISTINA_INTERNET_BUSINESS_SOLUTIONS = 9887\nVENDOR_ID_LINUX_TERMINAL_SERVER_PROJECT_LTSP = 9888\nVENDOR_ID_WINPRESA_BUILDING_AUTOMATION_TECHNOLOGIES_GMBH = 9889\nVENDOR_ID_MEDIA_GENERAL_INC_2 = 9890\nVENDOR_ID_MENSATEC = 9891\nVENDOR_ID_OREGON_GRADUATE_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY = 9892\nVENDOR_ID_PARANORMAL_SWEDEN = 9893\nVENDOR_ID_POLESTAR_CORP = 9894\nVENDOR_ID_PROJECT49_AG = 9895\nVENDOR_ID_RR_ASSOCIS = 9896\nVENDOR_ID_SERANOA_NETWORKS = 9897\nVENDOR_ID_SHINDENGEN_ELECTRIC_MFG_CO_LTD = 9898\nVENDOR_ID_STINNES_AG = 9899\nVENDOR_ID_TELEKOM_APPLIED_BUSINESS_SDN_BHD = 9900\nVENDOR_ID_THE_COLLEGE_OF_WILLIAM_AND_MARY = 9901\nVENDOR_ID_THE_UNIVERSITY_OF_CHICAGO = 9902\nVENDOR_ID_TI_SQUARE_TECHNOLOGY = 9903\nVENDOR_ID_UNIVERSITY_OF_NEBRASKA = 9904\nVENDOR_ID_VOLUBILL = 9905\nVENDOR_ID_XTERA_COMMUNICATIONS_INC = 9906\nVENDOR_ID_AKKAYA_CONSULTING_GMBH = 9907\nVENDOR_ID_HITRUSTCOM_HK_INCORPORATED_LIMITED = 9908\nVENDOR_ID_PACIFIC_TECHNOLOGY_SERVICES = 9909\nVENDOR_ID_ABSOLUTE_SOFTWARE_CORP = 9910\nVENDOR_ID_BANTU_INC = 9911\nVENDOR_ID_BARAGA_TELEPHONE_COMPANY = 9912\nVENDOR_ID_CEREBRA_INTERGRATED_TECHNOLOGIES_LTD = 9913\nVENDOR_ID_CHARTER_COMMUNICATIONS = 9914\nVENDOR_ID_COMMTOUCH_SOFTWARE_LTD = 9915\nVENDOR_ID_DATEK_ONLINE_HOLDINGS_CORP = 9916\nVENDOR_ID_DELOS_PAYMENT_SYSTEMS = 9917\nVENDOR_ID_NATIONAL_OCEANIC_AND_ATMOSPHERIC_ADMINISTRATION_NOAA = 9918\nVENDOR_ID_EARTH9COM_PTE_LTD = 9919\nVENDOR_ID_ENETCO_GMBH = 9920\nVENDOR_ID_ERGO_VERSICHERUNGSGRUPPE_AG = 9921\nVENDOR_ID_ESIGN_AUSTRALIA_LIMITED = 9922\nVENDOR_ID_EUROPEAN_SOUTHERN_OBSERVATORY = 9923\nVENDOR_ID_EXCITE_UK_LTD = 9924\nVENDOR_ID_FINEST_WEBS = 9925\nVENDOR_ID_GENIE_NETWORK_RESOURCE_MANAGEMENT = 9926\nVENDOR_ID_ICEHOUSE_NET_SERVICES = 9927\nVENDOR_ID_INETRIFY = 9928\nVENDOR_ID_INTEGRAL_CONCEPTS_INC = 9929\nVENDOR_ID_INTERNEXUS_PLC = 9930\nVENDOR_ID_INTI = 9931\nVENDOR_ID_IPFILTER = 9932\nVENDOR_ID_JAARS_INC = 9933\nVENDOR_ID_JANUS_RESEARCH_GROUP = 9934\nVENDOR_ID_LOUISIANA_TECH_UNIVERSITY = 9935\nVENDOR_ID_MASSCONFUSIONCOM = 9936\nVENDOR_ID_MAXXAN_SYSTEMS_INC = 9937\nVENDOR_ID_MERCURY_CORPORATION = 9938\nVENDOR_ID_MERNET_SECURITY = 9939\nVENDOR_ID_NINE_TILES_NETWORKS_LTD = 9940\nVENDOR_ID_OBJECTIVE_REALITY_COMPUTER_LLC = 9941\nVENDOR_ID_OPTIMATION_SOFTWARE_ENGINEERING = 9942\nVENDOR_ID_PROMETHEON_INC = 9943\nVENDOR_ID_SIAS_LTD = 9944\nVENDOR_ID_SIEMENS_BUSINESS_SERVICES_AB = 9945\nVENDOR_ID_SOFTSOL_INDIA_LIMITEDN = 9946\nVENDOR_ID_SWALES_AEROSPACE_INC = 9947\nVENDOR_ID_TELEKURIER_GESMBH_CO_KG = 9948\nVENDOR_ID_UBIQUITOUS_CORP = 9949\nVENDOR_ID_VISIONARY_COMMUNICATIONS_INC = 9950\nVENDOR_ID_WIRELESS_M2M_LLC = 9951\nVENDOR_ID_WUHANTIT = 9952\nVENDOR_ID_BERTELSMANN_GAMECHANNEL = 9953\nVENDOR_ID_CRAIGBUCHEKCOM = 9954\nVENDOR_ID_CRISP_HUGHES_EVANS_LLP = 9955\nVENDOR_ID_NDS_SURGICAL_IMAGING_FORMERLY_PLANAR_SYSTEMS_INC = 9956\nVENDOR_ID_DYNAMIC_EQUILIBRIUM_PTY_LTD = 9957\nVENDOR_ID_FORMULA_400 = 9958\nVENDOR_ID_NODS = 9959\nVENDOR_ID_NUISYSCOM = 9960\nVENDOR_ID_FUNDSXPRESS_FINANCIAL_NETWORK = 9961\nVENDOR_ID_VIRCIO_LLP = 9962\nVENDOR_ID_ADVANCED_COMPUTER_TECHNOLOGIES_ACT_INC = 9963\nVENDOR_ID_50KM_INC = 9964\nVENDOR_ID_AMMINISTRAZIONE_PROVINCIALE_DI_GROSSETO = 9965\nVENDOR_ID_BEIJING_HUAHUAN_ELECTRONICS_LTD = 9966\nVENDOR_ID_BLUESOCKET_INC = 9967\nVENDOR_ID_BRITISH_ANTARCTIC_SURVEY = 9968\nVENDOR_ID_CONDAT_AG = 9969\nVENDOR_ID_CUSTODIX_NV = 9970\nVENDOR_ID_CYBERTEL_INC = 9971\nVENDOR_ID_EMULIVE_IMAGING_CORPORATION_INC = 9972\nVENDOR_ID_FLEXSYS_UK_LTD = 9973\nVENDOR_ID_INTERNET_TRANSACTION_SERVICES_INCITRANS = 9974\nVENDOR_ID_JW_JENSEN_INC = 9975\nVENDOR_ID_FLEXSYS_INC = 9976\nVENDOR_ID_JOBPILOT_AG = 9977\nVENDOR_ID_LINUXKOREA_INC = 9978\nVENDOR_ID_MABUSEDE = 9979\nVENDOR_ID_M_WEB_SOUTH_AFRICA = 9980\nVENDOR_ID_NETTRADE_GMBH = 9981\nVENDOR_ID_NETENGINE = 9982\nVENDOR_ID_NETSTECH_INC = 9983\nVENDOR_ID_OSMOSISLATINA = 9984\nVENDOR_ID_RIC = 9985\nVENDOR_ID_SENCORE = 9986\nVENDOR_ID_SIGNET = 9987\nVENDOR_ID_SMART_TECHNOLOGY_ENABLERS_INC = 9988\nVENDOR_ID_STOCHASTIX = 9989\nVENDOR_ID_STONEBRANCH_INCORPORATED = 9990\nVENDOR_ID_SYNCHRONE = 9991\nVENDOR_ID_TERION = 9992\nVENDOR_ID_TERUMO_MEDICAL_CORPORATION = 9993\nVENDOR_ID_THE_LINUX_BOX_CORPORATION = 9994\nVENDOR_ID_THINKENGINE_NETWORKS_INC = 9995\nVENDOR_ID_VILLANOVA_UNIVERSITY = 9996\nVENDOR_ID_VIRTUAL_E_LEARNING_GROUP_VEG = 9997\nVENDOR_ID_WYND_COMMUNICATIONS = 9998\nVENDOR_ID_ZERNA_KOEPPER_PARTNER = 9999\nVENDOR_ID_MAPINFO_CORPORATION = 10000\nVENDOR_ID_BLIO_CORPORATION = 10001\nVENDOR_ID_FROGFOOT_NETWORKS = 10002\nVENDOR_ID_IP_ONE_INC = 10003\nVENDOR_ID_JOHNCHILDRESSCOM = 10004\nVENDOR_ID_PURE_NETWORX_GMBH = 10005\nVENDOR_ID_SANTON = 10006\nVENDOR_ID_RF_INNOVATIONS_PTY_LTD = 10007\nVENDOR_ID_GROUPE_ESIEE_PARIS = 10008\nVENDOR_ID_KRYSTALBOX_TECHNOLOGIES_INC = 10009\nVENDOR_ID_NETWORK_STORAGE_SOLUTIONS_INC = 10010\nVENDOR_ID_ADVANCED_SIMULATION_TECHNOLOGY_INC = 10011\nVENDOR_ID_ALTERNIUM_SA = 10012\nVENDOR_ID_CALEDO_GMBH = 10013\nVENDOR_ID_CERIAS = 10014\nVENDOR_ID_CERTIFICATION_CENTRE_LTD = 10015\nVENDOR_ID_COMPUTER_COMMUNICATIONS_INNOVATIONS = 10016\nVENDOR_ID_CREWAVE_CO_LTD = 10017\nVENDOR_ID_DOUBLE_PRECISION_INC = 10018\nVENDOR_ID_FEN_SYSTEMS_LTD = 10019\nVENDOR_ID_GLOBE = 10020\nVENDOR_ID_GOOD_TECHNOLOGY_INC = 10021\nVENDOR_ID_ICONNECT = 10022\nVENDOR_ID_IMA_LTD = 10023\nVENDOR_ID_INTEGRATED_TECHNOLOGY_EXPRESS_INC = 10024\nVENDOR_ID_INTERLAND_INC = 10025\nVENDOR_ID_INTERLOCIINC = 10026\nVENDOR_ID_INTERNET_DATA_SYSTEMS_SA = 10027\nVENDOR_ID_LEVEL_42_NETWORKS = 10028\nVENDOR_ID_MEN_MICE = 10029\nVENDOR_ID_MUDIAGA_OBADA = 10030\nVENDOR_ID_NIIEFA_CTC_CYCLONE = 10031\nVENDOR_ID_ONEMEDIA_INC = 10032\nVENDOR_ID_OPENSOS_S_B = 10033\nVENDOR_ID_OSIX_AB = 10034\nVENDOR_ID_SAY_TECHNOLOGIES_INC = 10035\nVENDOR_ID_TIMES_N_SYSTEMS = 10036\nVENDOR_ID_ULTIMATE_PEOPLE_COMPANY_LTD = 10037\nVENDOR_ID_UNIVERSITY_OF_TEXAS_HEALTH_SCIENCE_CENTER_AT_SAN_ANTONIO = 10038\nVENDOR_ID_VIDEOTEK_INC = 10039\nVENDOR_ID_YONSEI_UNIVERSITY = 10040\nVENDOR_ID_ZONE_PL_SC = 10041\nVENDOR_ID_COMMA_FLEX = 10042\nVENDOR_ID_ETIME_CAPITAL_INC = 10043\nVENDOR_ID_FRB_PAR = 10044\nVENDOR_ID_NETFORMFIVE_INFORMATIONSTECHNOLOGIE_GMBH = 10045\nVENDOR_ID_PROTEK_SC = 10046\nVENDOR_ID_SERVOCOMP_LTD = 10047\nVENDOR_ID_VXL_ETECH_P_LIMITED = 10048\nVENDOR_ID_WEBRELAY_INC = 10049\nVENDOR_ID_DANA_CORPORATION = 10050\nVENDOR_ID_EFTIA_OSS_SOLUTIONS_INC = 10051\nVENDOR_ID_ELECTRONIC_COMMERCE_LINK_INC = 10052\nVENDOR_ID_KEYS = 10053\nVENDOR_ID_NETVALUE_SA = 10054\nVENDOR_ID_ROARING_PENGUIN_SOFTWARE_INC = 10055\nVENDOR_ID_APPDANCER_NETWORKS = 10056\nVENDOR_ID_EMTE_SISTEMAS = 10057\nVENDOR_ID_HAURI_INC = 10058\nVENDOR_ID_SANRAD = 10059\nVENDOR_ID_SELTA_TELEMATICA = 10060\nVENDOR_ID_PACIFIC_INFO_TECH_CORP = 10061\nVENDOR_ID_COMSQUARED_SYSTEMS_INC = 10062\nVENDOR_ID_AARON_GROSKY_ASSOCIATES_INC = 10063\nVENDOR_ID_ASH = 10064\nVENDOR_ID_IRONOAK_SOFTWARE = 10065\nVENDOR_ID_DIGITAL_MULTIMEDIA_TECHNOLOGIES = 10066\nVENDOR_ID_DVTEL_INC = 10067\nVENDOR_ID_E_OFFICESERVICES_LTD = 10068\nVENDOR_ID_EPSILON_AB = 10069\nVENDOR_ID_FLASHWAVE_LTD = 10070\nVENDOR_ID_GINKO_AG = 10071\nVENDOR_ID_GW_TECHNOLOGIES_CO_LTD = 10072\nVENDOR_ID_HANSENET_TELEKOMMUNIKATION_GMBH = 10073\nVENDOR_ID_IKIMBO = 10074\nVENDOR_ID_INFODYNE_CORPORATION = 10075\nVENDOR_ID_INSTITUTIONS_OF_THE_EUROPEAN_UNION = 10076\nVENDOR_ID_MBYN_INC = 10077\nVENDOR_ID_MEDIENPROJEKTVEREIN_STEIERMARK = 10078\nVENDOR_ID_METROSOURCE_INC = 10079\nVENDOR_ID_MICROCELL_I5_INC = 10080\nVENDOR_ID_NRJCORPORATION = 10081\nVENDOR_ID_OCULUS_TECHNOLOGIES_CORPORATION = 10082\nVENDOR_ID_PANDA_VISTA = 10083\nVENDOR_ID_PRIORITY_TELECOM_NV_ROGER = 10084\nVENDOR_ID_PROVE_IT = 10085\nVENDOR_ID_SEGUE_SOFTWARE_INC = 10086\nVENDOR_ID_SILENTONE_LIMITED = 10087\nVENDOR_ID_TECHNO_VALLEY_CO = 10088\nVENDOR_ID_TEK_TOOLS_INC = 10089\nVENDOR_ID_THE_CLUENET_PROJECT = 10090\nVENDOR_ID_TRANSFAR = 10091\nVENDOR_ID_UNASSIGNED_11 = 10092\nVENDOR_ID_UNAMITE_GMBH = 10093\nVENDOR_ID_UNIVERSITY_OF_NOVI_SAD = 10094\nVENDOR_ID_WICKANDER_ASSOCIATES = 10095\nVENDOR_ID_BAXTER_HEALTHCARE_CORPORATION = 10096\nVENDOR_ID_ECI_IP_INC = 10097\nVENDOR_ID_GONICUS_GMBH = 10098\nVENDOR_ID_HUMANIT = 10099\nVENDOR_ID_ONDEVICE_CORPORATION = 10100\nVENDOR_ID_MIRAI_ESPANA_SL = 10101\nVENDOR_ID_ALT_N_TECHNOLOGIES = 10102\nVENDOR_ID_LEWIS_CURTIS_CONSULTING = 10103\nVENDOR_ID_EBOA = 10104\nVENDOR_ID_LAWSON_SOFTWARE = 10105\nVENDOR_ID_ALBAL_INGENIEROS_SA = 10106\nVENDOR_ID_1STCOM_TECHNOLOGIES_CORP = 10107\nVENDOR_ID_7_GLOBAL_LTD = 10108\nVENDOR_ID_ACTIVE_TELECOM = 10109\nVENDOR_ID_AGILE_STORAGE_INC = 10110\nVENDOR_ID_GET_CONNECTED = 10111\nVENDOR_ID_APLCOMP_OY = 10112\nVENDOR_ID_APPLIANCEWARE_INC = 10113\nVENDOR_ID_ARTESIA_TECHNOLOGIES = 10114\nVENDOR_ID_ARTFUL = 10115\nVENDOR_ID_AUGA_APS = 10116\nVENDOR_ID_AXERRA_NETWORKS_INC = 10117\nVENDOR_ID_BENEFITSXML_INC = 10118\nVENDOR_ID_BIGBANGWIDTH = 10119\nVENDOR_ID_BRTECH = 10120\nVENDOR_ID_CLEAR_COMMUNICATIONS_LTD = 10121\nVENDOR_ID_CREATIA_CORPORATION = 10122\nVENDOR_ID_CRIMCO_CONSULTING = 10123\nVENDOR_ID_CUST_UNIVERSIT_BLAISE_PASCAL_CLERMONT_II = 10124\nVENDOR_ID_CYBERPIXIE_INC = 10125\nVENDOR_ID_DAASI_INTERNATIONAL_GMBH = 10126\nVENDOR_ID_DESANA_SYSTEMS_INCORPORATED = 10127\nVENDOR_ID_DISA = 10128\nVENDOR_ID_DISCOVERNET_INC = 10129\nVENDOR_ID_ECOLE_CENTRALE_DE_LYON = 10130\nVENDOR_ID_EINK = 10131\nVENDOR_ID_EM_SOLUTIONS_PTY_LTD = 10132\nVENDOR_ID_FEDEX = 10133\nVENDOR_ID_FERRARALUG = 10134\nVENDOR_ID_FRONT_PORCH_INC = 10135\nVENDOR_ID_GODOT_COMMUNICATION_TECHNOLOGIES_GMBH = 10136\nVENDOR_ID_GTMP_FOUNDATION = 10137\nVENDOR_ID_I2PI = 10138\nVENDOR_ID_I3SP = 10139\nVENDOR_ID_INCO_SYSTEMS_INC = 10140\nVENDOR_ID_INFINISYS_PTY_LTD = 10141\nVENDOR_ID_INTERDIMENSIONS = 10142\nVENDOR_ID_INTROUT_CONSULTING = 10143\nVENDOR_ID_IORMYX = 10144\nVENDOR_ID_JUST_IN_TIME_CONSULTING = 10145\nVENDOR_ID_KERN_AUTOMATISERINGSDIENSTEN_BV = 10146\nVENDOR_ID_LANCASTER_LEBANON_INTERMEDIATE_UNIT_13 = 10147\nVENDOR_ID_LIGHTEL_SYSTEMS_CORPORATION = 10148\nVENDOR_ID_LINEONE = 10149\nVENDOR_ID_LOGIC_ONE_INCORPORATED = 10150\nVENDOR_ID_MULTIMEDIA_UNIVERSITY = 10151\nVENDOR_ID_MUSPELLSHEIM = 10152\nVENDOR_ID_NET2PHONE = 10153\nVENDOR_ID_NETPLAY_INC = 10154\nVENDOR_ID_NORTHERN_PARKLIFE_INC = 10155\nVENDOR_ID_NOVOFORUM = 10156\nVENDOR_ID_ONNET_TECHNOLOGIES_CO = 10157\nVENDOR_ID_PANAMSAT = 10158\nVENDOR_ID_PANASAS_INC = 10159\nVENDOR_ID_PENN_STATE_OUTREACH_INFORMATION_SYSTEMS = 10160\nVENDOR_ID_PICTUREIQ = 10161\nVENDOR_ID_POLANDCOM_SA = 10162\nVENDOR_ID_REMEDY_CORPORATION = 10163\nVENDOR_ID_ROADS_AND_TRAFFIC_AUTHORITY_RTA = 10164\nVENDOR_ID_ROBERT_WILLIAMS_CONSULTING = 10165\nVENDOR_ID_SECURE_SOFTWARE_SERVICES_LTD = 10166\nVENDOR_ID_SIEMENS_COMMUNICATIONS_LIMITED = 10167\nVENDOR_ID_SPACE_BIOMEDICAL_CENTER = 10168\nVENDOR_ID_SUAYAN_DESIGN = 10169\nVENDOR_ID_TELEMIG_CELULAR_SA = 10170\nVENDOR_ID_TELSEY = 10171\nVENDOR_ID_TERRITORY_BUSINESS_SOLUTIONS_PTY_LTD = 10172\nVENDOR_ID_TEXIL = 10173\nVENDOR_ID_THE_CHUBB_GROUP_OF_INSURANCE_COMPANIES = 10174\nVENDOR_ID_TRAFFION_TECHNOLOGIES = 10175\nVENDOR_ID_UNIVENTION = 10176\nVENDOR_ID_UNIVERSITY_OF_NORTHERN_IOWA = 10177\nVENDOR_ID_WESTERN_KENTUCKY_UNIVERSITY = 10178\nVENDOR_ID_WIRELESS_SOLUTIONS = 10179\nVENDOR_ID_AM_UTILS_ORGANIZATION = 10180\nVENDOR_ID_CARDINAL_HEALTH_INC = 10181\nVENDOR_ID_FUTURELAB_AG = 10182\nVENDOR_ID_MASTER_QUALITY_SNC = 10183\nVENDOR_ID_QCOM_TV_INC = 10184\nVENDOR_ID_SMP = 10185\nVENDOR_ID_WEINBRENNER_MEDIA_CONSULT = 10186\nVENDOR_ID_TELEVIEW = 10187\nVENDOR_ID_PIOLINK_INC = 10188\nVENDOR_ID_CONGRUENCY_INC = 10189\nVENDOR_ID_AEGMIS_GMBH = 10190\nVENDOR_ID_DIVERGENET_INC = 10191\nVENDOR_ID_EON_ENERGIE_AG = 10192\nVENDOR_ID_ERKLE = 10193\nVENDOR_ID_ISENERGY = 10194\nVENDOR_ID_SH_SOFT = 10195\nVENDOR_ID_WWWTHINKINGMACHINESCOM = 10196\nVENDOR_ID_VOVTEL_NETWORKS_INC = 10197\nVENDOR_ID_CARROLL_NET_INC = 10198\nVENDOR_ID_PROJECTHOME_LIMITED = 10199\nVENDOR_ID_I_MAIL_BOX_PROJECT = 10200\nVENDOR_ID_EFTEL = 10201\nVENDOR_ID_GFT_SOLUTIONS = 10202\nVENDOR_ID_WINTER_AG = 10203\nVENDOR_ID_SHANGHAI_SCOP_PHOTONICS_TECHNOLOGY_CO_LTD = 10204\nVENDOR_ID_APAMA = 10205\nVENDOR_ID_EPIKUS_SOFTWARE = 10206\nVENDOR_ID_HILGRAEVE_INC = 10207\nVENDOR_ID_VALNET_SADO_SA = 10208\nVENDOR_ID_ANDES_NETWORKS_INC = 10209\nVENDOR_ID_AXS_ONE = 10210\nVENDOR_ID_BENAU_A_S = 10211\nVENDOR_ID_CUTLER_COMPANY = 10212\nVENDOR_ID_MERITON_NETWORKS = 10213\nVENDOR_ID_ENIGMA_SOI_SP_Z_OO = 10214\nVENDOR_ID_FORWARD_TECHNICAL_COLTD = 10215\nVENDOR_ID_FRANTIC_FILMS = 10216\nVENDOR_ID_HOTDIARY_INC = 10217\nVENDOR_ID_HSUFARM = 10218\nVENDOR_ID_IDEAL_TECHNOLOGY_CORPORATION = 10219\nVENDOR_ID_IFW_DRESDEN = 10220\nVENDOR_ID_IMPACT_TECHNOLOGIES = 10221\nVENDOR_ID_INFINICON_SYSTEMS = 10222\nVENDOR_ID_LEO_A_DALY_COMPANY = 10223\nVENDOR_ID_LUFTHANSA_SYSTEMS_INFRATEC_GMBH = 10224\nVENDOR_ID_MARRAKECH_LTD = 10225\nVENDOR_ID_MYDN = 10226\nVENDOR_ID_NEESUS_DATACOM = 10227\nVENDOR_ID_NET_PUBLICATION_CONSULTANCE_GMBH = 10228\nVENDOR_ID_NETGATE_SC = 10229\nVENDOR_ID_ORIOLE_CORPORATION = 10230\nVENDOR_ID_PROFICIENT_NETWORKS_INC = 10231\nVENDOR_ID_SIGNIANT_CORPORATION = 10232\nVENDOR_ID_SILICON_GOBLIN_TECHNOLOGIES = 10233\nVENDOR_ID_SNORTORG = 10234\nVENDOR_ID_STARTRACK_COMMUNICATIONS_AUSTRALIAPTY_LTD = 10235\nVENDOR_ID_STUDIO_KOMPUTEROWE_AWA = 10236\nVENDOR_ID_SULLINS_INC = 10237\nVENDOR_ID_TECHNISCHE_UNIVERSITAET_BERLIN_TU_BERLIN = 10238\nVENDOR_ID_TESS_SA = 10239\nVENDOR_ID_TRANSNATIONAL_COMPUTER_TECHNOLOGY = 10240\nVENDOR_ID_TRPG_ASSOCIATION = 10241\nVENDOR_ID_UNIVERSITY_OF_BRIGHTON = 10242\nVENDOR_ID_UPLOGIXCOM = 10243\nVENDOR_ID_VALIDATA = 10244\nVENDOR_ID_VALIOSYS_SA = 10245\nVENDOR_ID_VIRTUAL_EDUCATION_SPACE = 10246\nVENDOR_ID_COLLEGEUNITSCOM_INC = 10247\nVENDOR_ID_ECENTRAL_INC = 10248\nVENDOR_ID_CINTEL_INTELLIGENT_TELECOM_SYSTEM_COLTD = 10249\nVENDOR_ID_NEGATIVETWENTY = 10250\nVENDOR_ID_WARLOCK = 10251\nVENDOR_ID_DIAGNOSTIC_LABORATORY_SERVICES_INC = 10252\nVENDOR_ID_NAPSTER_INC = 10253\nVENDOR_ID_TEXUNA_TECHNOLOGIES_MOSCOW = 10254\nVENDOR_ID_INFOQUENZ_IT_DIENSTLEISTUNGEN_GMBH = 10255\nVENDOR_ID_SCIOBYTE_GMBH = 10256\nVENDOR_ID_HADITHI_INC = 10257\nVENDOR_ID_ARACNET_INTERNET_SERVICES = 10258\nVENDOR_ID_AVTEC_SYSTEMS_INC = 10259\nVENDOR_ID_BEAMREACH_NETWORKS = 10260\nVENDOR_ID_CEDAR_POINT_COMMUNICATIONS = 10261\nVENDOR_ID_CNC_SYSTEMS_INC = 10262\nVENDOR_ID_CUSTOM_LINUX_SOLUTIONS = 10263\nVENDOR_ID_DATA_INFORMATION_TECHNOLOGY_LTD = 10264\nVENDOR_ID_DELTATHREE_INC = 10265\nVENDOR_ID_DIZ_RHEINLAND_PFALZ = 10266\nVENDOR_ID_ELECTRO_OPTIC_SYSTEMS = 10267\nVENDOR_ID_ENTERPRISE_COMMERCE = 10268\nVENDOR_ID_EPROPOSE = 10269\nVENDOR_ID_ES_NETZE = 10270\nVENDOR_ID_FORGENT = 10271\nVENDOR_ID_FUTURE_INSTRUMENT_AB = 10272\nVENDOR_ID_GIANT_STEP_PRODUCTIONS_LLC = 10273\nVENDOR_ID_HEXAFLUX_SMS = 10274\nVENDOR_ID_MASTER_A_DISTANCIA = 10275\nVENDOR_ID_MSI_NETWORK_SERVICES_LTD = 10276\nVENDOR_ID_MULTNOMAH_EDUCATION_SERVICE_DISTRICT = 10277\nVENDOR_ID_NETACQUIRE_CORPORATION = 10278\nVENDOR_ID_OBJECT_VALLEY_ASIA_PACIFIC_LIMITED = 10279\nVENDOR_ID_QUIXOTECH_SYSTEMS = 10280\nVENDOR_ID_SELECT_TECHNOLOGY = 10281\nVENDOR_ID_SPEEDKOM_GMBH = 10282\nVENDOR_ID_TABCORP = 10283\nVENDOR_ID_THOMAS_JEFFERSON_UNIVERSITY = 10284\nVENDOR_ID_TRENITALIA_SPA = 10285\nVENDOR_ID_TRINTECH_INC = 10286\nVENDOR_ID_UNIVERSITY_AT_ALBANY = 10287\nVENDOR_ID_VOX_MOBILI = 10288\nVENDOR_ID_YUKYUNG_TELECOM_CO_LTD = 10289\nVENDOR_ID_INTERNET_BUSINESS_CONSTELLATION_SA = 10290\nVENDOR_ID_J_M_FDEMONCOUK = 10291\nVENDOR_ID_LAISSEZ_FAIRE_CITY = 10292\nVENDOR_ID_LINKAGE_SYSTEM_INTEGERATION_COLTD = 10293\nVENDOR_ID_DATA_SERVICE_SRL = 10294\nVENDOR_ID_ISOLUTION = 10295\nVENDOR_ID_ITI_LTD = 10296\nVENDOR_ID_ADVANTECH_CO_LTD = 10297\nVENDOR_ID_ARBEITSGEMEINSCHAFT_FUER_TOTAL_ABGEHOBENE_TECHNOLOGIE = 10298\nVENDOR_ID_AVANTIA_INC = 10299\nVENDOR_ID_AVANTRON_TECHNOLOGIES_INC = 10300\nVENDOR_ID_BLUESOCKET_LTD = 10301\nVENDOR_ID_GALAXY_SYSTEMS_INCORPORATED = 10302\nVENDOR_ID_IST_ISDN_SUPPORT_TECHNIK_GMBH = 10303\nVENDOR_ID_LGT_FINANCIAL_SERVICES = 10304\nVENDOR_ID_MAGNIFIX_SDN_BHD = 10305\nVENDOR_ID_MSO_TECHNOLOGIES = 10306\nVENDOR_ID_OPTICAL_SOLUTIONS_INC = 10307\nVENDOR_ID_OSGI = 10308\nVENDOR_ID_SOHO_SKYWAY = 10309\nVENDOR_ID_TANG_IT_CONSULTING_GMBH = 10310\nVENDOR_ID_KERIO_TECHNOLOGIES = 10311\nVENDOR_ID_TRANSLOGIC_SYSTEMS_INC = 10312\nVENDOR_ID_AUTINFORM_GMBH = 10313\nVENDOR_ID_PROVENIR = 10314\nVENDOR_ID_PRIMA_EV = 10315\nVENDOR_ID_RAFAEL_LTD = 10316\nVENDOR_ID_NANUM_TECHNOLOGY = 10317\nVENDOR_ID_SASKTEL_INTERNATIONAL_LTD = 10318\nVENDOR_ID_SEMANTICS_AG = 10319\nVENDOR_ID_AMHERST_COLLEGE = 10320\nVENDOR_ID_AUNET = 10321\nVENDOR_ID_CENTRE_FOR_ADVANCED_TECHNOLOGY = 10322\nVENDOR_ID_CONVERGENCE_NETWORK_RESEARCH_LTD = 10323\nVENDOR_ID_CRABUSLDAP = 10324\nVENDOR_ID_EARTHCONNECT_CORPORATION = 10325\nVENDOR_ID_ECOLE_NATIONALE_SUPERIEURE_DES_MINES_DE_PARIS = 10326\nVENDOR_ID_FIBERCITY_NETWORKS = 10327\nVENDOR_ID_GLOBEFLOW_SA = 10328\nVENDOR_ID_INTEGRA_MICRO_SYSTEMS_P_LTD = 10329\nVENDOR_ID_KAVADO_INC = 10330\nVENDOR_ID_LIGHTNING_DATA_NETWORKS = 10331\nVENDOR_ID_MAXHOSTING_GBR = 10332\nVENDOR_ID_METANET = 10333\nVENDOR_ID_MISCHIEF_NETWORKING = 10334\nVENDOR_ID_RLM_SYSTEMS_PTY_LTD = 10335\nVENDOR_ID_SUMMIT_TECH_COMMUNICATIONS = 10336\nVENDOR_ID_VALIS_LTD = 10337\nVENDOR_ID_LOCALE_SYSTEMS = 10338\nVENDOR_ID_STARREMOTE_WIRELESS_INC = 10339\nVENDOR_ID_INDIANA_STATE_UNIVERSITY = 10340\nVENDOR_ID_KLINIK_LOEWENSTEIN_GGMBH = 10341\nVENDOR_ID_MIAMI_UNIVERSITY = 10342\nVENDOR_ID_NETEXCELL = 10343\nVENDOR_ID_NETREGISTRY_PTY_LTD = 10344\nVENDOR_ID_NEWPORT_NETWORKS_LIMITD = 10345\nVENDOR_ID_OMEGABAND_INC = 10346\nVENDOR_ID_PLUSTREAM_INC = 10347\nVENDOR_ID_SOFTPRO_GMBH_CO_KG = 10348\nVENDOR_ID_SYSGEM_AG = 10349\nVENDOR_ID_SYSTEM_SOFTWARE_SOLUTIONS = 10350\nVENDOR_ID_OBLIVION = 10351\nVENDOR_ID_RETEVISIN_MVIL_SA = 10352\nVENDOR_ID_INNOCOM = 10353\nVENDOR_ID_BREWSTER_ACADEMY = 10354\nVENDOR_ID_ITACTION = 10355\nVENDOR_ID_TARGET_REVOCABLE_E_MAIL_CORPORATION = 10356\nVENDOR_ID_ROY_S_RAPOPORT = 10357\nVENDOR_ID_ACCELIO_CORPORATION = 10358\nVENDOR_ID_ADTEL_SOFTWARE = 10359\nVENDOR_ID_AGESMUD_TECHNOLOGY_CO_LTD = 10360\nVENDOR_ID_BHARAT_HEAVY_ELECTRICALS_LIMITED = 10361\nVENDOR_ID_BLUWARE_INC = 10362\nVENDOR_ID_CATBIRD_NETWORKS = 10363\nVENDOR_ID_CENTRAL_MANCHESTER_CITY_LEARNING_CENTER = 10364\nVENDOR_ID_DAVOX_CORP = 10365\nVENDOR_ID_DIALPAD_COMMUNICATIONS = 10366\nVENDOR_ID_DONNIE21 = 10367\nVENDOR_ID_FUJITSU_TECHNOLOGY_SOLUTIONS_GMBH_FORMERLY_FUJITSU_SIEMENS_COMPUTERS_2 = 10368\nVENDOR_ID_FUJITSU_PRIME_SOFTWARE_TECHNOLOGIES_LTD = 10369\nVENDOR_ID_IMPULSESOFT = 10370\nVENDOR_ID_INABYTE_INC = 10371\nVENDOR_ID_INTELLIGENT_APPLIANCE_LAB = 10372\nVENDOR_ID_LE_RESEAU = 10373\nVENDOR_ID_LIFELINE_SYSTEMS_INC_2 = 10374\nVENDOR_ID_MAKINA_CORPUS = 10375\nVENDOR_ID_NETFRONT = 10376\nVENDOR_ID_ONMOBILE_SYSTEM_INC = 10377\nVENDOR_ID_PACKETVIDEO = 10378\nVENDOR_ID_PRINCETON_SOLUTIONS_GROUP = 10379\nVENDOR_ID_TELESYS_SOFTWARE_INC = 10380\nVENDOR_ID_TRENDPOINT_SYSTEMS = 10381\nVENDOR_ID_UCNET = 10382\nVENDOR_ID_UNIVERSITE_DE_LIEGE = 10383\nVENDOR_ID_VIRGINIA_COMMONWEALTH_UNIVERSITY = 10384\nVENDOR_ID_WESTRONIC_SYSTEMS_INC = 10385\nVENDOR_ID_YOUNGWOO_TELECOM_CO_LTD = 10386\nVENDOR_ID_DONGAH_ELECOMM = 10387\nVENDOR_ID_SUPPORTCOMM_TELEINFORMATICA_SA = 10388\nVENDOR_ID_INTABO = 10389\nVENDOR_ID_DELTA_DANISH_ELECTRONICS_LIGHT_ACOUSTICS = 10390\nVENDOR_ID_BHARAT_SANCHAR_NIGAM_LIMITED = 10391\nVENDOR_ID_ABEONA_NETWORKS = 10392\nVENDOR_ID_APEH = 10393\nVENDOR_ID_BANAMEX_SA = 10394\nVENDOR_ID_BELO_CORPORATION = 10395\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_OFFICE_OF_THE_CHANCELLOR = 10396\nVENDOR_ID_CK_SOFTWARE_GMBH_FORMERLY_CKSOFT_CHRISTIAN_KRATZER_SOFTWARE_ENTWICKLUNG_UND_VERTRIEB = 10397\nVENDOR_ID_COVASOFT_INC = 10398\nVENDOR_ID_DATAKEY = 10399\nVENDOR_ID_ELECTRIC_LIGHTWAVE_INC = 10400\nVENDOR_ID_IDEO_CONCEPTS_CO_LTD = 10401\nVENDOR_ID_INTERDEV = 10402\nVENDOR_ID_ISTITUTO_NAZIONALE_DI_FISICA_NUCLEARE = 10403\nVENDOR_ID_LIVINGLOGIC_AG = 10404\nVENDOR_ID_MENTAL_HEALTH_COOPERATIVE_INC = 10405\nVENDOR_ID_NEURAL_AUDIO_INC = 10406\nVENDOR_ID_NORTH_COAST_SOFTWARE = 10407\nVENDOR_ID_PERCULA_CONSULTING_GMBH = 10408\nVENDOR_ID_TELLURIAN_PTY_LTD = 10409\nVENDOR_ID_THE_FALCONS_NEST = 10410\nVENDOR_ID_UNIVERSITY_OF_NORTH_CAROLINA_AT_CHAPEL_HILL = 10411\nVENDOR_ID_ATELO_INC = 10412\nVENDOR_ID_SYSTEM_INNOVATIONS_INC = 10413\nVENDOR_ID_BRAUEREI_C_A_VELTINS_GMBH_CO = 10414\nVENDOR_ID_3GPP = 10415\nVENDOR_ID_ABC_VIRTUAL_COMMUNICATIONS = 10416\nVENDOR_ID_AMERION_LLC = 10417\nVENDOR_ID_AVOCENT_CORPORATION = 10418\nVENDOR_ID_BACTOL_TECHNICAL_LIMITED = 10419\nVENDOR_ID_BAYERISCHES_LANDESKRIMINALAMT_ABT_IUK = 10420\nVENDOR_ID_C_CURE_CVBA = 10421\nVENDOR_ID_CHINA_PTIC_INFORMATION_INDUSTRY_CORPORATION = 10422\nVENDOR_ID_CITYXPRESS_CORP = 10423\nVENDOR_ID_CRICKET_COMMUNICATIONS = 10424\nVENDOR_ID_ELECTRICITY_GENERATING_AUTHORITY_OF_THAILAND = 10425\nVENDOR_ID_ELEX_NV = 10426\nVENDOR_ID_EMBRACE_NETWORKS = 10427\nVENDOR_ID_FURUKAWA_INDUSTRIAL_SA_CURITIBA = 10428\nVENDOR_ID_GELWARGNET = 10429\nVENDOR_ID_GLOBALREMOTECOM_AG = 10430\nVENDOR_ID_INGENIEURBUERO_KITTELBERGER_GMBH = 10431\nVENDOR_ID_MOTT_COMMUNITY_COLLEGE = 10432\nVENDOR_ID_MUTEK_SOLUTION_INC = 10433\nVENDOR_ID_NIKHEF = 10434\nVENDOR_ID_OMNITEL = 10435\nVENDOR_ID_OXFORD_UNIVERSITY = 10436\nVENDOR_ID_PEPPERCON_AG = 10437\nVENDOR_ID_PORTIMA_SC = 10438\nVENDOR_ID_POWER_MEASUREMENT_LTD = 10439\nVENDOR_ID_ROSE_IT_SOLUTIONS = 10440\nVENDOR_ID_SILAS_TECHNOLOGIES_INC = 10441\nVENDOR_ID_SPIDER_NETWORKS = 10442\nVENDOR_ID_THREE_PILLARS = 10443\nVENDOR_ID_TICHENNET = 10444\nVENDOR_ID_TRILLIUM_PHOTONICS = 10445\nVENDOR_ID_TRINITY_EXPERT_SYSTEMS_PLC = 10446\nVENDOR_ID_UNIVERSITY_OF_MISSISSIPPI = 10447\nVENDOR_ID_UNIVERSITY_OF_PUGET_SOUND = 10448\nVENDOR_ID_XCEEDIUM_INC = 10449\nVENDOR_ID_ALTAMAR_NETWORKS = 10450\nVENDOR_ID_BOSTON_MARKET_CORPORATION = 10451\nVENDOR_ID_EGTON_MEDICAL_INFORMATION_SYSTEMS_LTD = 10452\nVENDOR_ID_IL_JIN_TELECOM_ELECCO_LTD = 10453\nVENDOR_ID_OPTICAL_CROSSING_INC = 10454\nVENDOR_ID_PARADIGM = 10455\nVENDOR_ID_PLANET_TECHNOLOGY_CORP = 10456\nVENDOR_ID_DB_INFORMATIK_DIENSTE_GMBH = 10457\nVENDOR_ID_2000_X_TECHNOLOGIES_INC = 10458\nVENDOR_ID_HEXIN_SOFTWARE = 10459\nVENDOR_ID_HISOLUTIONS_AG = 10460\nVENDOR_ID_TIXO_CONSULTING = 10461\nVENDOR_ID_ATEK_LTD = 10462\nVENDOR_ID_DEVK_VERSICHERUNGEN = 10463\nVENDOR_ID_ELATA_PLC = 10464\nVENDOR_ID_FLYPAPER = 10465\nVENDOR_ID_HOLIM_TECHNOLOGY = 10466\nVENDOR_ID_INGENIEURBRO_JRG_GEISTMANN = 10467\nVENDOR_ID_IRTNOGORG = 10468\nVENDOR_ID_LIDCAM_TECHNOLOGY_PTY_LTD = 10469\nVENDOR_ID_MEDIA_BROKERS_INTERNATIONAL = 10470\nVENDOR_ID_OPENFORTRESS = 10471\nVENDOR_ID_RECOURSE_TECHNOLOGIES_INC = 10472\nVENDOR_ID_SEB_AB = 10473\nVENDOR_ID_SERVLETSNET_CORPORATION = 10474\nVENDOR_ID_SLOVAK_UNIVERSITY_OF_AGRICULTURE = 10475\nVENDOR_ID_SUMMIT_MEDIA_PARTNERS_LLC = 10476\nVENDOR_ID_TELEPHONYWORK_INC = 10477\nVENDOR_ID_TRANSEONIC_SYSTEMS_INC = 10478\nVENDOR_ID_WEB_SERVICES_INC = 10479\nVENDOR_ID_WILY_TECHNOLOGY = 10480\nVENDOR_ID_ALJISR_INFORMATION_SERVICES = 10481\nVENDOR_ID_NORTEL = 10482\nVENDOR_ID_WINALYSIS_SOFTWARE = 10483\nVENDOR_ID_TF1_SA = 10484\nVENDOR_ID_ABOUT_WEB_SERVICES = 10485\nVENDOR_ID_ASPELLE_LTD = 10486\nVENDOR_ID_BUSINESS_INFORMATION_PUBLICATIONS = 10487\nVENDOR_ID_CHELSIO_COMMUNICATIONS = 10488\nVENDOR_ID_DESIGN_COMBUS_LTD = 10489\nVENDOR_ID_GNF = 10490\nVENDOR_ID_HAMPSHIRE_COLLEGE = 10491\nVENDOR_ID_HST_HIGH_SOFT_TECH_GMBH = 10492\nVENDOR_ID_INNOVANCE_NETWORKS_INC = 10493\nVENDOR_ID_INPHOMATCH_INC = 10494\nVENDOR_ID_INTERLINK_INC = 10495\nVENDOR_ID_LINK_SIMULATION_TRAINING = 10496\nVENDOR_ID_MALYS_OF_CALIFORNIA = 10497\nVENDOR_ID_MICHAELJCRAWFORDCOM = 10498\nVENDOR_ID_MINISTERIUM_DES_INNERN_SACHSEN_ANHALT = 10499\nVENDOR_ID_MUSIC_CHOICE = 10500\nVENDOR_ID_NETMAN_COMPANY = 10501\nVENDOR_ID_NORTH_DAKOTA_UNIVERSITY_SYSTEM = 10502\nVENDOR_ID_POWER_INNOVATIONS_INTERNATIONAL = 10503\nVENDOR_ID_PRINTRONIX_INC = 10504\nVENDOR_ID_QUORUS_MEDICAL_SYSTEMS = 10505\nVENDOR_ID_RADIOSHACK_CORPORATION = 10506\nVENDOR_ID_RECIPROCA = 10507\nVENDOR_ID_RES_MOD_MAN = 10508\nVENDOR_ID_RIGHTVISION = 10509\nVENDOR_ID_SCREAMINGMEDIA = 10510\nVENDOR_ID_SIMPLEDEVICES_INC = 10511\nVENDOR_ID_SPECTRUM_IMAGE = 10512\nVENDOR_ID_STELTOR = 10513\nVENDOR_ID_STRONGAUTH_INC = 10514\nVENDOR_ID_TERRY_NAZON_INC = 10515\nVENDOR_ID_T_NOVA_GMBH_DEUTSCHE_TELEKOM = 10516\nVENDOR_ID_TORONTO_POLICE_SERVICE = 10517\nVENDOR_ID_TRUNKNET = 10518\nVENDOR_ID_TSINGHUA_UNISPLENDOUR_CO_LTD = 10519\nVENDOR_ID_TYCO_ELECTRONICS_POWER_SYSTEMS = 10520\nVENDOR_ID_VOICEPLANET_INC = 10521\nVENDOR_ID_VOIGT_HAEFFNER_GMBH = 10522\nVENDOR_ID_WANADOO_DATA = 10523\nVENDOR_ID_WIDEVINE_TECHNOLOGIES = 10524\nVENDOR_ID_EVANGELISCH_LUTHERISCHE_KIRCHE_BAYERN = 10525\nVENDOR_ID_FACULTAD_DE_INGENIERIA = 10526\nVENDOR_ID_METROBILITY_OPTICAL_SYSTEMS_INC = 10527\nVENDOR_ID_SOLID_INFORMATION_TECHNOLOGY_CORP = 10528\nVENDOR_ID_GEMTEK_SYSTEMS_HOLDING_BV = 10529\nVENDOR_ID_NORDICEDGE = 10530\nVENDOR_ID_CTCOM = 10531\nVENDOR_ID_RIFETECH_INC = 10532\nVENDOR_ID_SEITENBAU_ONLINE_AGENTUR_GBMH = 10533\nVENDOR_ID_SECOM_CO_LTD = 10534\nVENDOR_ID_LONDON_INTERNET_EXCHANGE = 10535\nVENDOR_ID_SIMONS_ROCK_COLLEGE_OF_BARD = 10536\nVENDOR_ID_AB_TRAV_OCH_GALOPP = 10537\nVENDOR_ID_ABSTRAKT_DESIGN = 10538\nVENDOR_ID_ALWAYSON_LTD = 10539\nVENDOR_ID_AXL_SOFTWARE = 10540\nVENDOR_ID_CAYMASA_EL_SENDERO_SA = 10541\nVENDOR_ID_CHONGQING_GRC_TELECOM_CO_LTD = 10542\nVENDOR_ID_DEJARNETTE_RESEARCH_SYSTEMS_INC = 10543\nVENDOR_ID_FACTUAL_DATA = 10544\nVENDOR_ID_GENTICS_NETSOLUTIONS = 10545\nVENDOR_ID_INTURIO_PROPERTY_RIGHTS_HOLDINGS_LIMITED = 10546\nVENDOR_ID_MATRIX_APPLIED_COMPUTING_LTD = 10547\nVENDOR_ID_NETZWERT_AG = 10548\nVENDOR_ID_NEWVATION = 10549\nVENDOR_ID_N_TV_GMBH_CO_KG = 10550\nVENDOR_ID_PARERGY = 10551\nVENDOR_ID_PASSLOGIX_INC = 10552\nVENDOR_ID_Q_NETWORKS = 10553\nVENDOR_ID_QWEST_WIRELESS_LLC = 10554\nVENDOR_ID_RAMCAR_GROUP_OF_COMPANIES = 10555\nVENDOR_ID_RECOMP_GMBH_NETZWERKE_SYSTEMBERATUNG = 10556\nVENDOR_ID_SHERWOOD_INTERNATIONAL_LIMITED = 10557\nVENDOR_ID_SILOGIX = 10558\nVENDOR_ID_SOFTECK = 10559\nVENDOR_ID_SOUTH_FLORIDA_WATER_MANAGEMENT_DISTRICT = 10560\nVENDOR_ID_STAR_VALLEY_SOLUTIONS_INC = 10561\nVENDOR_ID_WERKLEITZ_GESELLSCHAFT_EV = 10562\nVENDOR_ID_PORTLAND_PUBLIC_SCHOOLS = 10563\nVENDOR_ID_TIA_SCANDINAVIA = 10564\nVENDOR_ID_UNIVERSITE_DE_SAVOIE = 10565\nVENDOR_ID_UNIVERSITI_PENDIDIKAN_SULTAN_IDRIS = 10566\nVENDOR_ID_EYOUNET_CORP = 10567\nVENDOR_ID_CHINA_SUNBO_CORP = 10568\nVENDOR_ID_COKER_NET = 10569\nVENDOR_ID_MANLY_MAN_CLUB = 10570\nVENDOR_ID_MERCK_KGAA = 10571\nVENDOR_ID_100WORLDCOM_AG = 10572\nVENDOR_ID_AITECH_SPACE_SYSTEMS_INC = 10573\nVENDOR_ID_CARBON_BASED_PTY_LTD = 10574\nVENDOR_ID_CUMULUS_IT_AS = 10575\nVENDOR_ID_CYGSOFT_LIMITED = 10576\nVENDOR_ID_EILAT_ON_LINE_LTD = 10577\nVENDOR_ID_ELECTRIC_INSURANCE_COMPANY = 10578\nVENDOR_ID_ESWOOSH = 10579\nVENDOR_ID_HANDSPRING_INC = 10580\nVENDOR_ID_ICOMERA = 10581\nVENDOR_ID_LINEAR_SYSTEMS_LTD = 10582\nVENDOR_ID_NETIZEN_SA = 10583\nVENDOR_ID_HOPCOUNT_LIMITED = 10584\nVENDOR_ID_PARIS_ALESIA = 10585\nVENDOR_ID_PENNWELL_CORP = 10586\nVENDOR_ID_PHARMAPARTNERS_BV = 10587\nVENDOR_ID_PIXELBOXX_GMBH = 10588\nVENDOR_ID_ROCKETRADERCOM = 10589\nVENDOR_ID_SAGE_INFORMATION_CONSULTANTS_INC = 10590\nVENDOR_ID_SALIX_TRAINING_LIMITED = 10591\nVENDOR_ID_SOLUTIONINC = 10592\nVENDOR_ID_SYBCOM_GMBH = 10593\nVENDOR_ID_TRANSYNERGY = 10594\nVENDOR_ID_TYRELL_SOFTWARE_CORPORATION = 10595\nVENDOR_ID_VIGNON_INFORMATIQUE_FRANCE = 10596\nVENDOR_ID_ALLIANCE_CAPITAL = 10597\nVENDOR_ID_APPLIED_SYSTEM_DESIGN = 10598\nVENDOR_ID_DEPARTMENT_OF_FAMILIES = 10599\nVENDOR_ID_INNOVATIVE_COMPUTING_LABORATORY = 10600\nVENDOR_ID_JATAAYU_SOFTWARE_PVT_LTD = 10601\nVENDOR_ID_JIERA = 10602\nVENDOR_ID_KAFRE = 10603\nVENDOR_ID_ZARLINK_SEMICONDUCTOR = 10604\nVENDOR_ID_INFODESK_S_A = 10605\nVENDOR_ID_INTRACOM_AUSTRALIA_PTY_LTD = 10606\nVENDOR_ID_ACG_SOLUTIONS_LLC = 10607\nVENDOR_ID_ALPHA_LAB = 10608\nVENDOR_ID_APPLIED_SCIENCE_FICTION = 10609\nVENDOR_ID_AUBERGISTE_INC = 10610\nVENDOR_ID_BLU_SPA = 10611\nVENDOR_ID_CENTRALNY_OSRODEK_INFORMATYKI_GORNICTWA_SA = 10612\nVENDOR_ID_ENVIVIO = 10613\nVENDOR_ID_EQUITY_TECHNOLOGY_GROUP_INC = 10614\nVENDOR_ID_GARTONWORKS_INC = 10615\nVENDOR_ID_GEDINFO_SCRL = 10616\nVENDOR_ID_INFO_CONSULTING_GMBH = 10617\nVENDOR_ID_INFOSTREAM_ASP = 10618\nVENDOR_ID_INNUWORKS = 10619\nVENDOR_ID_ISOFTEL_LTD = 10620\nVENDOR_ID_BVBA_MED_KAB_DR_SEBRECHTS_E = 10621\nVENDOR_ID_KARMA_DESIGNS = 10622\nVENDOR_ID_KNOWLEDGECUBE = 10623\nVENDOR_ID_RICHARD_LUCASSEN_ELECTRONICS = 10624\nVENDOR_ID_MAINCUBE_INC = 10625\nVENDOR_ID_MULVEY_FAMILY = 10626\nVENDOR_ID_N_SOFT = 10627\nVENDOR_ID_PROJECT_49_AG = 10628\nVENDOR_ID_QUESTUS_GROUP_INC = 10629\nVENDOR_ID_SCINTEC_AG = 10630\nVENDOR_ID_SERIQA_NETWORKS = 10631\nVENDOR_ID_TELECOMET_INTERNATIONAL = 10632\nVENDOR_ID_TICOM_INC = 10633\nVENDOR_ID_TRIO_NETWORKS = 10634\nVENDOR_ID_TUCOWS_INC = 10635\nVENDOR_ID_UNIVERSITY_OF_APPLIED_SCIENCES_COLOGNE = 10636\nVENDOR_ID_VANDERBILT_UNIVERSITY_MEDICAL_CENTER = 10637\nVENDOR_ID_VENATION = 10638\nVENDOR_ID_UNASSIGNED_12 = 10639\nVENDOR_ID_WEST_INTERACTIVE_CORPORATION = 10640\nVENDOR_ID_WHITE_EAGLE_INFORMATICS = 10641\nVENDOR_ID_ZEBRA_TECHNOLOGIES_CORPORATION = 10642\nVENDOR_ID_NC_SOFT = 10643\nVENDOR_ID_INTERACTIVE_SOFTWARE_DESIGN = 10644\nVENDOR_ID_PANDANUS_LTD = 10645\nVENDOR_ID_ADI_COMPUTER_SOLUTIONS = 10646\nVENDOR_ID_ADVANCED_SCIENCE_TECHNOLOGY_INSTITUTE = 10647\nVENDOR_ID_BLAZENET_LTD = 10648\nVENDOR_ID_DST_INNOVIS = 10649\nVENDOR_ID_EASTER_EGGS = 10650\nVENDOR_ID_ENAC = 10651\nVENDOR_ID_EZITRUST_LIMITED = 10652\nVENDOR_ID_FOTRE_ASSOCIATES = 10653\nVENDOR_ID_FUTURE_SPACE_SA = 10654\nVENDOR_ID_GLOBAL_OFFICE_SOFTWARE_PTY_LTD = 10655\nVENDOR_ID_HARDY_AND_ASSOCIATES = 10656\nVENDOR_ID_INFOCYCLONE_LTD = 10657\nVENDOR_ID_IP_SERVICES = 10658\nVENDOR_ID_ISR_GLOBAL_TELECOM_INC = 10659\nVENDOR_ID_KEYTREND_TECHNOLOGY_S_PTE_LTD = 10660\nVENDOR_ID_MAINBRAIN = 10661\nVENDOR_ID_MID_HUDSON_COMMUNICATIONS = 10662\nVENDOR_ID_MQS = 10663\nVENDOR_ID_NETROPOLIS = 10664\nVENDOR_ID_OCYRUS = 10665\nVENDOR_ID_ORGANIZATION_OF_RESIDENCE_STUDENTS = 10666\nVENDOR_ID_PROXIMA_TECHNOLOGY_PTY_LTD = 10667\nVENDOR_ID_RIODATA_GMBH = 10668\nVENDOR_ID_SAN_MIGUEL_INDUSTRIAL_SA = 10669\nVENDOR_ID_SOLUTIONS_ETC_GMBH = 10670\nVENDOR_ID_STUDIO_ALPHA = 10671\nVENDOR_ID_SWARTHMORE_COLLEGE = 10672\nVENDOR_ID_TELEM_GMBH = 10673\nVENDOR_ID_TOP_KESKUS = 10674\nVENDOR_ID_UNESCO = 10675\nVENDOR_ID_UNIDATA_COMMUNICATION_SYSTEMS_INC = 10676\nVENDOR_ID_UNIVERSITY_OF_DEBRECEN = 10677\nVENDOR_ID_WORLDWIDEWATSON = 10678\nVENDOR_ID_ZZYZX_TECHNOLOGIES_INC = 10679\nVENDOR_ID_CAPCOM_AG = 10680\nVENDOR_ID_KASYS_INCORPORATED = 10681\nVENDOR_ID_UDCAST = 10682\nVENDOR_ID_HEAMAN_SYSTEM_COLTD = 10683\nVENDOR_ID_TERABOLIC = 10684\nVENDOR_ID_OBJECT_TOOLS_LIMITED = 10685\nVENDOR_ID_THRUPORT_TECHNOLOGIES = 10686\nVENDOR_ID_TOWNSEND_COMMUNICATIONS_INC = 10687\nVENDOR_ID_UNASSIGNED_13 = 10688\nVENDOR_ID_AHAZA_SYSTEMS = 10689\nVENDOR_ID_CELLTREX_LTD = 10690\nVENDOR_ID_CHATAIGNER = 10691\nVENDOR_ID_FREENETDE_AG = 10692\nVENDOR_ID_ITOPIA_INC = 10693\nVENDOR_ID_MEASURABLE_SOLUTIONS_INC = 10694\nVENDOR_ID_NIXC_INC = 10695\nVENDOR_ID_NUXEO = 10696\nVENDOR_ID_OPTIO_SOFTWARE_INC = 10697\nVENDOR_ID_SANITTSBETRIEB_MERAN = 10698\nVENDOR_ID_SPELLCASTER_TELECOMMUNICATIONS_INC = 10699\nVENDOR_ID_BULLDOG_TECHNOLOGIES = 10700\nVENDOR_ID_TELEFONICA_DATACORP_SA = 10701\nVENDOR_ID_SOLVARE = 10702\nVENDOR_ID_ATNET = 10703\nVENDOR_ID_BARRACUDA_NETWORKS_AG_FORMERLY_PHION_INFORMATION_TECHNOLOGIES = 10704\nVENDOR_ID_VOGT_ELECTRONIC_AG = 10705\nVENDOR_ID_ACCELERATED_ENCRYPTION_PROCESSING_LTD = 10706\nVENDOR_ID_ADHERSIS = 10707\nVENDOR_ID_ADVANCED_SYSTEM_ARCHITECTURES_LTD = 10708\nVENDOR_ID_ATUX = 10709\nVENDOR_ID_AVANADE_INC = 10710\nVENDOR_ID_BAWI = 10711\nVENDOR_ID_BELKAMNEFT_2 = 10712\nVENDOR_ID_CHEVIN_LTD = 10713\nVENDOR_ID_DIMENSION_DATA = 10714\nVENDOR_ID_FORWARDPATH = 10715\nVENDOR_ID_FREEDOMLAND_ITN_SPA = 10716\nVENDOR_ID_GENIE_TELECOM = 10717\nVENDOR_ID_HARRIS_WILDER_PTY_LTD = 10718\nVENDOR_ID_ATOS_ORIGIN_NEDERLAND_BV_AONL = 10719\nVENDOR_ID_LIMSI = 10720\nVENDOR_ID_BRITESTREAM_NETWORKS_INC = 10721\nVENDOR_ID_MARQUE_DOR = 10722\nVENDOR_ID_MERCURY_PS = 10723\nVENDOR_ID_MORPHEUS_NET = 10724\nVENDOR_ID_PACIFIC_INTERNET_LTD = 10725\nVENDOR_ID_QUANTIVA_INC = 10726\nVENDOR_ID_RED_CIENTIFICA_PERUANA = 10727\nVENDOR_ID_REDLINE_COMMUNICATIONS_INC = 10728\nVENDOR_ID_RED_M_COMMUNICATIONS_LTD = 10729\nVENDOR_ID_SEE_TELECOM = 10730\nVENDOR_ID_SILICON_ENERGY = 10731\nVENDOR_ID_SYMBIDIA_LIMITED = 10732\nVENDOR_ID_THE_MERCURY_FILE_SYSTEM = 10733\nVENDOR_ID_TIPPINGPOINT_TECHNOLOGIES = 10734\nVENDOR_ID_UNICORN_HOLDING_AS = 10735\nVENDOR_ID_UNIVERSITY_OF_DENVER = 10736\nVENDOR_ID_WEB_SIMULATION = 10737\nVENDOR_ID_COMUNIQ_INC = 10738\nVENDOR_ID_DELPHIC_MEDICAL_SYSTEMS = 10739\nVENDOR_ID_NEODEV = 10740\nVENDOR_ID_VERTICAL_INVERSION_SYSTEMS_INC = 10741\nVENDOR_ID_NOZEMA_NV = 10742\nVENDOR_ID_RIKSFRSKRINGSVERKET_RFV = 10743\nVENDOR_ID_KVARNBCKEN_KONSULT_AB = 10744\nVENDOR_ID_CSO_LANIFEX_GMBH = 10745\nVENDOR_ID_RECHENZENTRUM_DER_BUNDESFINANZVERWALTUNG_FRANKFURT_AM_MAIN = 10746\nVENDOR_ID_ROWAN_UNIVERSITY = 10747\nVENDOR_ID_SOFTWARE_FACTORY_GMBH = 10748\nVENDOR_ID_DEV_SECURE_PTY_LTD = 10749\nVENDOR_ID_3G_SCENE_PLC = 10750\nVENDOR_ID_3PLEX = 10751\nVENDOR_ID_ARTIMAN_OY = 10752\nVENDOR_ID_BILLING_FOR_ENTERPRISES = 10753\nVENDOR_ID_CAS_TECNOLOGIA_S_A = 10754\nVENDOR_ID_CHIPDATA_INC = 10755\nVENDOR_ID_CHONGHO_INFORMATION_COMMUNICATIONS_CO_LTD = 10756\nVENDOR_ID_DIOGENES_INC = 10757\nVENDOR_ID_ELYZIUM_LIMITED = 10758\nVENDOR_ID_ENERGOS_ASA = 10759\nVENDOR_ID_GRAVITY_HILL_TECHNOLOGIES_INC = 10760\nVENDOR_ID_GREENHECK_FAN = 10761\nVENDOR_ID_HORIZON_WEB_GRAPHICS = 10762\nVENDOR_ID_HANSUNG_TELIANN_INC = 10763\nVENDOR_ID_INFOTREK = 10764\nVENDOR_ID_INZEN_CO_LTD = 10765\nVENDOR_ID_ISG_SYSTEMS_AB = 10766\nVENDOR_ID_JAMES_MADISON_UNIVERSITY = 10767\nVENDOR_ID_LENVOL_LIMITED = 10768\nVENDOR_ID_ITDZ_BERLIN = 10769\nVENDOR_ID_MAKE_INGCOMAR = 10770\nVENDOR_ID_MORRISON_ACADEMY = 10771\nVENDOR_ID_NOVALIS_MEDIA = 10772\nVENDOR_ID_PACIFIC_NORTHWEST_NETWORKS_INC = 10773\nVENDOR_ID_PERFORATIONS_LTD = 10774\nVENDOR_ID_PERI_FORMWORK_SYSTEMS_INC = 10775\nVENDOR_ID_REACTIVE_NETWORK_SOLUTIONS_INC = 10776\nVENDOR_ID_REVICON_SRL = 10777\nVENDOR_ID_RTCL_LAB_UNIVERSITY_OF_MICHIGAN = 10778\nVENDOR_ID_SPARKASSENVERSICHERUNG_WIESBADEN = 10779\nVENDOR_ID_SWAN_SRO = 10780\nVENDOR_ID_SCHNEIDER_ELECTRIC_BUILDINGS_AB_FORMERLY_TAC_AB = 10781\nVENDOR_ID_TAZZ_NETWORKS = 10782\nVENDOR_ID_THE_CHURCH_OF_JESUS_CHRIST_OF_LATTER_DAY_SAINTS = 10783\nVENDOR_ID_TIME_FREQUENCY_SOLUTIONS_LTD = 10784\nVENDOR_ID_TRANSTECH_NETWORKS = 10785\nVENDOR_ID_UNSW_PHYSICS_APT = 10786\nVENDOR_ID_VERITY_INC = 10787\nVENDOR_ID_VOLT_INFORMATION_SCIENCES = 10788\nVENDOR_ID_WEBAGENTS_GMBH = 10789\nVENDOR_ID_WEBSILICON = 10790\nVENDOR_ID_WESTONE = 10791\nVENDOR_ID_XELINE_CO_LTD = 10792\nVENDOR_ID_YOURASP_PTY_LTD = 10793\nVENDOR_ID_ZTR_CONTROL_SYSTEM = 10794\nVENDOR_ID_BIZZ_TECHNOLOGIES_SAS = 10795\nVENDOR_ID_CRF_CONSULTING_LTD = 10796\nVENDOR_ID_COMMERCIAL_DATA_SYSTEMS = 10797\nVENDOR_ID_COMMTEL = 10798\nVENDOR_ID_JUNGO_SOFTWARE_TECHNOLOGIES_LTD = 10799\nVENDOR_ID_KINOR = 10800\nVENDOR_ID_RAPID_7_INC = 10801\nVENDOR_ID_RBG = 10802\nVENDOR_ID_STAUDINGER_WELS = 10803\nVENDOR_ID_UNION_BANK_OF_CALIFORNIA = 10804\nVENDOR_ID_WEDGETAIL_COMMUNICATIONS = 10805\nVENDOR_ID_XEBEO_COMMUNICATIONS_INC = 10806\nVENDOR_ID_CENTRALE_FINANCIEN_INSTELLINGEN = 10807\nVENDOR_ID_CHINA_GREATWALL_COMPUTER_SHENZHEN_CO_LTD = 10808\nVENDOR_ID_DISHA_TECHNOLOGIES = 10809\nVENDOR_ID_NOBELMANN = 10810\nVENDOR_ID_XIAMEN_GOOD_FIRST_OPTICS_ELECTRICITY_INTEGRATION_COLTD = 10811\nVENDOR_ID_INFOTECS = 10812\nVENDOR_ID_CENTRE_NATIONAL_DE_LA_RECHERCHE_SCIENTIFIQUE = 10813\nVENDOR_ID_UNIFIED_TECHNOLOGIES_INC = 10814\nVENDOR_ID_CYBERTRADER_INC = 10815\nVENDOR_ID_DATANG_RADIO_COMMUNICATION_BRANCH = 10816\nVENDOR_ID_HERAEUS_HOLDING_GMBH = 10817\nVENDOR_ID_WINDH_AB = 10818\nVENDOR_ID_IIX_NAP_MAHATEL_PT = 10819\nVENDOR_ID_LM_SISTEMAS = 10820\nVENDOR_ID_ABSOLIGHT = 10821\nVENDOR_ID_ADTEC = 10822\nVENDOR_ID_ADVANCED_RESEARCH_TECHNOLOGY_LTD = 10823\nVENDOR_ID_AGAVA_SOFTWARE_LTD = 10824\nVENDOR_ID_ALECTTA = 10825\nVENDOR_ID_ALICE_SALOMON_FACHHOCHSCHULE_FR_SOZIALARBEIT_UND_SOZIALPDAGOGIK_BERLIN = 10826\nVENDOR_ID_ALVE_TECHNOLOGY_CORPORATION = 10827\nVENDOR_ID_AMERICAN_DATA_TECHNOLOGY_INC = 10828\nVENDOR_ID_ANDOVER_CONTROLS_CORPORATION = 10829\nVENDOR_ID_APCON_INC = 10830\nVENDOR_ID_AT_OLIVERCOM = 10831\nVENDOR_ID_B2C2_INC = 10832\nVENDOR_ID_BINARYCORE_NETWORKS = 10833\nVENDOR_ID_CARGOBAY = 10834\nVENDOR_ID_CARTOONVIOLENCENET = 10835\nVENDOR_ID_COMMAND_E_TECHNOLOGY_CO_LTD = 10836\nVENDOR_ID_COMPHEALTH = 10837\nVENDOR_ID_CONTEC_CV = 10838\nVENDOR_ID_DISTRIBUTEL = 10839\nVENDOR_ID_DRAGON_COMPUTER_CONSULTANTS_INC = 10840\nVENDOR_ID_EJASENT_INC = 10841\nVENDOR_ID_ENBW_SYSTEME_INFRASTRUKTUR_SUPPORT_GMBH = 10842\nVENDOR_ID_FERRET = 10843\nVENDOR_ID_FIDELIA_INC = 10844\nVENDOR_ID_GRANDMAS_INC = 10845\nVENDOR_ID_IMPACT_TECHNOLOGIES_INC = 10846\nVENDOR_ID_INSYSTEK_INC = 10847\nVENDOR_ID_IPFONIX_INC = 10848\nVENDOR_ID_ITHIRIEL_SOFTWARE = 10849\nVENDOR_ID_KEFTA_INC = 10850\nVENDOR_ID_KNOWLEDGE_INTELLIGENCE_AG = 10851\nVENDOR_ID_KUULALAAKERI_OY = 10852\nVENDOR_ID_LTC_SP_Z_OO = 10853\nVENDOR_ID_LVIV_NATIONAL_POLYTECHNICAL_UNIVERSITY = 10854\nVENDOR_ID_MASCON_COMMUNICATION_TECHNOLOGIES = 10855\nVENDOR_ID_MENLO_PARK_TECHNOLOGIES = 10856\nVENDOR_ID_MINDFRAME_SOFTWARE_SERVICES_PVT_LTD = 10857\nVENDOR_ID_MYCON_NETWORKS = 10858\nVENDOR_ID_MYINTERNET_LTD = 10859\nVENDOR_ID_NAUMANN_EDV = 10860\nVENDOR_ID_NIELS_BOHR_INSTITUTE = 10861\nVENDOR_ID_NOAH_INDUSTRIES_INC = 10862\nVENDOR_ID_ODYSSEY_TECHNOLOGIES_LIMITED = 10863\nVENDOR_ID_PACIFIC_UNIVERSITY = 10864\nVENDOR_ID_PETE_WILSON_CONSULTING_SOFTWARE_ENGINEER = 10865\nVENDOR_ID_PHILIP_M_LEMBO = 10866\nVENDOR_ID_PLAYDEAD_NETWORKS = 10867\nVENDOR_ID_PREMITECH_A_S = 10868\nVENDOR_ID_DATALOGIC_MOBILE_INC = 10869\nVENDOR_ID_SAFEWWW_RD_LTD = 10870\nVENDOR_ID_SHANGHAI_TERABAND_PHTONICS_CO_LTD = 10871\nVENDOR_ID_SKYFLOW_INC = 10872\nVENDOR_ID_SOROS_FOUNDATION_KAZAKHSTAN = 10873\nVENDOR_ID_SPECTRUM_ASTRO_INC = 10874\nVENDOR_ID_SSH_COMMUNICATIONS_SECURITY_CORP = 10875\nVENDOR_ID_SUPER_MICRO_COMPUTER_INC = 10876\nVENDOR_ID_SYSTEM_SERVICES_SP_Z_O_O = 10877\nVENDOR_ID_TECHLINK_DESENVOLVIMENTOS_TECNOLOGICOS_LTDA = 10878\nVENDOR_ID_TENEBRAS_LLC = 10879\nVENDOR_ID_TOGABI_TECHNOLOGIES_INC = 10880\nVENDOR_ID_UFFIZIO_SOFTWARE_CONSULTANTS_PVT_LTD = 10881\nVENDOR_ID_UNIVERSIT_PARIS_5 = 10882\nVENDOR_ID_UNASSIGNED_14 = 10883\nVENDOR_ID_VINZANT_INC = 10884\nVENDOR_ID_VIRTUAL_MONET_TECHNOLOGIES = 10885\nVENDOR_ID_WESTLAND_HELICOPTERS_LTD = 10886\nVENDOR_ID_WIZCOM_LTD = 10887\nVENDOR_ID_XELUS_INC = 10888\nVENDOR_ID_AL_DIGITAL_LTD = 10889\nVENDOR_ID_COMMWORKS = 10890\nVENDOR_ID_DAVES_NETWORK_SERVICES = 10891\nVENDOR_ID_DOCTORSNETUK = 10892\nVENDOR_ID_IOMEDEX_CORPORATION = 10893\nVENDOR_ID_NOVRA_TECHNOLOGIES_INC = 10894\nVENDOR_ID_RAONET_SYSTEMS_INC = 10895\nVENDOR_ID_THE_CAREER_AND_EDUCATION_NETWORK_INC = 10896\nVENDOR_ID_RECOMBINANTWEB = 10897\nVENDOR_ID_OOZOOD = 10898\nVENDOR_ID_CONSORS_DISCOUNT_BROKER_AG = 10899\nVENDOR_ID_SERCO = 10900\nVENDOR_ID_SPINNAKER_NETWORKS_INC = 10901\nVENDOR_ID_3IC_INC = 10902\nVENDOR_ID_ACTIVATE = 10903\nVENDOR_ID_ALPINE_MAYREDER_BAUGMBH = 10904\nVENDOR_ID_ARSENAL_DIGITAL_SOLUTIONS = 10905\nVENDOR_ID_A_SK_COMPUTERS = 10906\nVENDOR_ID_ATEB_LIMITED = 10907\nVENDOR_ID_BIGSUR_COMMUNICATIONS = 10908\nVENDOR_ID_BROADTEL_COMMUNICATIONS = 10909\nVENDOR_ID_CHATEAU_SYSTEMS_INC = 10910\nVENDOR_ID_APPELLO_AS = 10911\nVENDOR_ID_CINCOM_SYSTEMS_INC = 10912\nVENDOR_ID_CLIENT_SOFTWARE_INTERNATIONAL = 10913\nVENDOR_ID_COLT_TELECOMMUNICATIONS = 10914\nVENDOR_ID_CONAGRA_FOODS_INC = 10915\nVENDOR_ID_CYNETA_NETWORKS = 10916\nVENDOR_ID_DATAMAX_COPORATION = 10917\nVENDOR_ID_DATAMISSION = 10918\nVENDOR_ID_DBAP_GMBH = 10919\nVENDOR_ID_DIR_SOLUTIONS_BV = 10920\nVENDOR_ID_DRUMGRANGE_LIMITED = 10921\nVENDOR_ID_ELSIS = 10922\nVENDOR_ID_ERICSSON_AB_PACKET_CORE_NETWORKS = 10923\nVENDOR_ID_ESTOS_GMBH = 10924\nVENDOR_ID_FIRMSEEK = 10925\nVENDOR_ID_FOOD_BROKERS_LIMITED = 10926\nVENDOR_ID_FULLSIX = 10927\nVENDOR_ID_FYBUBBLANCOM_CONSULTING = 10928\nVENDOR_ID_GCD_PRINTLAYOUT = 10929\nVENDOR_ID_GEORG_AUGUST_UNIVERISTY_GOETTINGEN_INTERNET_AG = 10930\nVENDOR_ID_GIGA_STREAM_UMTS_TECHNOLOGIES_GMBH = 10931\nVENDOR_ID_GUNADARMA_UNIVERSITY = 10932\nVENDOR_ID_HA_TECHNICAL_SOLUTIONS = 10933\nVENDOR_ID_HAMSCH = 10934\nVENDOR_ID_HORIZON_DIGITAL_ENTERPRISE_INC = 10935\nVENDOR_ID_IJICHI_RESEARCH = 10936\nVENDOR_ID_INFALSYS = 10937\nVENDOR_ID_INTERNATIONAL_MESSAGING_ASSOCIATES_CORPORATION = 10938\nVENDOR_ID_INTERNET_NEWS = 10939\nVENDOR_ID_JD_THOMLINSON_LTD = 10940\nVENDOR_ID_KANDALAYA = 10941\nVENDOR_ID_LIFELINE_NETWORKS_BV = 10942\nVENDOR_ID_LINAGORA = 10943\nVENDOR_ID_MAIKIS_EDV_DIENSTLEISTUNGEN = 10944\nVENDOR_ID_MIDWAY_GAMES_WEST_INC = 10945\nVENDOR_ID_MOUSELINK_LTD = 10946\nVENDOR_ID_MULTI_DRUCK_GMBH = 10947\nVENDOR_ID_MYNANET = 10948\nVENDOR_ID_NETFLIXCOM = 10949\nVENDOR_ID_NETRAKE_CORPORATION = 10950\nVENDOR_ID_NETUSE_AG = 10951\nVENDOR_ID_NETZERO_INC = 10952\nVENDOR_ID_NIGHTLIFESE = 10953\nVENDOR_ID_NIKOLICICOM = 10954\nVENDOR_ID_WESCAN_LIMITED = 10955\nVENDOR_ID_NOVIFORUM_LTD = 10956\nVENDOR_ID_NOZE = 10957\nVENDOR_ID_OLICORP_TECHNOLOGIES = 10958\nVENDOR_ID_POLITECHNIKA_WARSZAWSKA = 10959\nVENDOR_ID_QUALICONTROL = 10960\nVENDOR_ID_RICCIARDI_TECHNOLOGIES_INC = 10961\nVENDOR_ID_RUTGERS_THE_STATE_UNIVERSITY_OF_NEW_JERSEY = 10962\nVENDOR_ID_SENA_SYSTEMS = 10963\nVENDOR_ID_SMT_DATA_A_S = 10964\nVENDOR_ID_SOLIDSTREAMING_INC = 10965\nVENDOR_ID_SOLLIE_CODEWORKS = 10966\nVENDOR_ID_SURFTOOL_SYSTEMS = 10967\nVENDOR_ID_SYSTEMATIC_SOFTWARE_ENGINEERING_A_S_2 = 10968\nVENDOR_ID_THALES_COMMUNICATIONS = 10969\nVENDOR_ID_THRESHOLD_NETWORKS = 10970\nVENDOR_ID_VPN_DYNAMICS_INC = 10971\nVENDOR_ID_WIT_SOFTWARE = 10972\nVENDOR_ID_XMS = 10973\nVENDOR_ID_YOUNGSTOWN_STATE_UNIVERSITY = 10974\nVENDOR_ID_ZION_SOFTWARE_LLC = 10975\nVENDOR_ID_ZOOMTOWNCOM = 10976\nVENDOR_ID_GRID_IRELAND = 10977\nVENDOR_ID_KUMAMOTO_INDUSTRIAL_RESEARCH_INSTITUTE = 10978\nVENDOR_ID_CAPITEL_GROUP = 10979\nVENDOR_ID_IQSTOR_NETWORKS = 10980\nVENDOR_ID_ROUTERD_NETWORKS_LIMITED = 10981\nVENDOR_ID_UBS_WARBURG = 10982\nVENDOR_ID_BTG_INC = 10983\nVENDOR_ID_BVBA_WOODSTONE = 10984\nVENDOR_ID_JIVE_SOFTWARE = 10985\nVENDOR_ID_BEIJING_POLYTECHNIC_UNIVERSITY = 10986\nVENDOR_ID_EIRCELL_2000 = 10987\nVENDOR_ID_SOLOMIO_CORPORATION = 10988\nVENDOR_ID_ALIBRE_INCORPORATED = 10989\nVENDOR_ID_ASTRUM_CONSULTING = 10990\nVENDOR_ID_AXIS_INTEGRATED = 10991\nVENDOR_ID_BABEL_PROFESSIONAL_SERVICES_SRL = 10992\nVENDOR_ID_BABELTECH_A_S = 10993\nVENDOR_ID_BISS_GMBH = 10994\nVENDOR_ID_BLUE_MUG = 10995\nVENDOR_ID_CCSS_EUROPE_LTD = 10996\nVENDOR_ID_CONNECTION_SOFTWARE = 10997\nVENDOR_ID_CONVERSANT_SYSTEMS_LLC = 10998\nVENDOR_ID_COS_AG_AUSTRIA = 10999\nVENDOR_ID_CREATIVE_NETWORKING_SOLUTIONS = 11000\nVENDOR_ID_DREYER_CONSULTING = 11001\nVENDOR_ID_DU_MAURIER_LTD = 11002\nVENDOR_ID_EDELTACOM = 11003\nVENDOR_ID_EARTHTRAX_INC = 11004\nVENDOR_ID_E_CERTIFY = 11005\nVENDOR_ID_FLASHNET_COMPUTERS_LTD = 11006\nVENDOR_ID_FMV_SWEDISH_DEFENCE_MATERIEL_ADMINISTRATION = 11007\nVENDOR_ID_FUJIWARA_SOFT_OFFICE_CO_LTD = 11008\nVENDOR_ID_HADMUT_DANISCH = 11009\nVENDOR_ID_HARRISON_FAMILY_ORGANIZATION = 11010\nVENDOR_ID_HIWAAY_INFORMATION_SERVICES = 11011\nVENDOR_ID_IMAGINEASIA_INC = 11012\nVENDOR_ID_LEC_INFORMATION_SYSTEMS = 11013\nVENDOR_ID_LIBERTY_UNIVERSITY = 11014\nVENDOR_ID_LOKOMO_SYSTEMS_AB = 11015\nVENDOR_ID_MANAGESTARCOM_INC = 11016\nVENDOR_ID_MARA_SYSTEMS_AB = 11017\nVENDOR_ID_MASSILLON_CABLE_COMMUNICATIONS = 11018\nVENDOR_ID_MENTA = 11019\nVENDOR_ID_MVP_SYSTEMS_INC = 11020\nVENDOR_ID_N2_BROADBAND_INC = 11021\nVENDOR_ID_OMNISCI_SOFTWARE_INC = 11022\nVENDOR_ID_OXFORD_UNIVERSITY_COMPUTING_SERVICES = 11023\nVENDOR_ID_PS_DATACOM_CORPORATION = 11024\nVENDOR_ID_PAGOO = 11025\nVENDOR_ID_PERFECTWAY_CORPORATION = 11026\nVENDOR_ID_PHYSICS_DEPARTMENT_UNIVERSITY_OF_KASSEL = 11027\nVENDOR_ID_RELIABLE_NETWORKS_INC = 11028\nVENDOR_ID_REZIPROZITAET_CONSULTING = 11029\nVENDOR_ID_ROUTEFREE_INC = 11030\nVENDOR_ID_SATEC_SA = 11031\nVENDOR_ID_SEMANDEX_NETWORKS_INC = 11032\nVENDOR_ID_SENTITO_NETWORKS = 11033\nVENDOR_ID_SENTOR_MONITORING_SYSTEMS_PTY_LTD = 11034\nVENDOR_ID_SHEER_GENIUS_SOFTWARE = 11035\nVENDOR_ID_SOFTAX = 11036\nVENDOR_ID_STRATYC_LLC = 11037\nVENDOR_ID_TECO_SOFT_ESPAA_SA = 11038\nVENDOR_ID_TIVO_INC = 11039\nVENDOR_ID_TOOL_BANKING_SOLUTIONS = 11040\nVENDOR_ID_UFSM = 11041\nVENDOR_ID_VIACLIX_INC = 11042\nVENDOR_ID_VIDA_SOFTWARE_SL = 11043\nVENDOR_ID_VODAFONE_EGYPT = 11044\nVENDOR_ID_WINDBORNE_PRODUCTIONS_INC = 11045\nVENDOR_ID_ZERO_COMPUTING_SRL = 11046\nVENDOR_ID_AK_INDUSTRIEINFORMATIK_GMBH = 11047\nVENDOR_ID_BILLITON_INTERNETSERVICES = 11048\nVENDOR_ID_CP_CORPORATE_PLANNING_AG = 11049\nVENDOR_ID_IDX_SYSTEMS_CORPORATIONS = 11050\nVENDOR_ID_POINT_SYSTEMS = 11051\nVENDOR_ID_ACHMEA_HOLDING_NV = 11052\nVENDOR_ID_DIRECT_INTERNET_INC = 11053\nVENDOR_ID_ROMAN_SEIDL = 11054\nVENDOR_ID_INNOACE_CO_LTD = 11055\nVENDOR_ID_ALLMYCRAPCOM = 11056\nVENDOR_ID_EYEFINITY_INC = 11057\nVENDOR_ID_HITACHI_INFORMATION_COMMUNICATION_ENGINEERING_LTD = 11058\nVENDOR_ID_IMPRESS_SOFTWARE_AG = 11059\nVENDOR_ID_INTERVOICE_BRITE = 11060\nVENDOR_ID_LONGITUDE_INC = 11061\nVENDOR_ID_NURNBERG_SCIENTIFIC = 11062\nVENDOR_ID_PINGMAGIC_LIMITED = 11063\nVENDOR_ID_RHB_SECURITIES = 11064\nVENDOR_ID_TELCOWARE = 11065\nVENDOR_ID_TENIAD_TECHNOLOGIES = 11066\nVENDOR_ID_UNIVERSITY_OF_BELGRADE = 11067\nVENDOR_ID_WEBSCREEN_TECHNOLOGY_LTD = 11068\nVENDOR_ID_YANDEX = 11069\nVENDOR_ID_UREACH_TECHNOLOGIES_INC = 11070\nVENDOR_ID_MOTUS_TECHNOLOGIES = 11071\nVENDOR_ID_IOTEC_AB = 11072\nVENDOR_ID_7TH_ANGEL = 11073\nVENDOR_ID_ALTER = 11074\nVENDOR_ID_ANTARIX_E_APPLICATIONS_LIMITED = 11075\nVENDOR_ID_BANESTO_SA = 11076\nVENDOR_ID_CNET_DOO = 11077\nVENDOR_ID_CENTRALWORKS_LLC = 11078\nVENDOR_ID_EIT_LTD = 11079\nVENDOR_ID_AIRWIDE_SOLUTIONS_FORMERLY_FIRST_HOP = 11080\nVENDOR_ID_HYDROGEN_LINE_INC = 11081\nVENDOR_ID_ILLINOIS_CENTRAL_COLLEGE = 11082\nVENDOR_ID_INTERSIX_TECHNOLOGIES_SA = 11083\nVENDOR_ID_ITDEVICES_INC = 11084\nVENDOR_ID_MANOJAM = 11085\nVENDOR_ID_MINDTREE_CONSULTING_PVT_LTD = 11086\nVENDOR_ID_NETFOREST_INC = 11087\nVENDOR_ID_NETUS_TECHNOLOGIES_CO_LTD = 11088\nVENDOR_ID_PREFERRED_SYSTEMS = 11089\nVENDOR_ID_PROPERO_LIMITED = 11090\nVENDOR_ID_RAZE_TECHNOLOGIES = 11091\nVENDOR_ID_ST_BONIFACE_GENERAL_HOSPITAL = 11092\nVENDOR_ID_TELAMON_SYSTEMS = 11093\nVENDOR_ID_XPEDITE_SYSTEMS_INC = 11094\nVENDOR_ID_LOEA_COMMUNICATIONS = 11095\nVENDOR_ID_BLUEARC_PART_OF_HITACHI_DATA_SYSTEMS = 11096\nVENDOR_ID_HEXAL_AG = 11097\nVENDOR_ID_COMTELCO_NORTH_AMERICA_INC = 11098\nVENDOR_ID_DICKERSON_ENGINERING = 11099\nVENDOR_ID_LINUX_NETWORX = 11100\nVENDOR_ID_NRI_SECURETECHNOLOGIES_LTD = 11101\nVENDOR_ID_OSA_TECHNOLOGIES_INC = 11102\nVENDOR_ID_OPUS_INTERNATIONAL_CONSULTANTS_LTD = 11103\nVENDOR_ID_PASSBACK_IT_CONSULTANCY = 11104\nVENDOR_ID_PIVOT_CONSULTING_LTD = 11105\nVENDOR_ID_SCENE7_INC = 11106\nVENDOR_ID_UCENTRIC_SYSTEMS = 11107\nVENDOR_ID_WAVEMARKET_INC = 11108\nVENDOR_ID_XDV_VEREIN_FR_EXPERIMENTELLE_DATENVERARBEITUNG = 11109\nVENDOR_ID_ARKIVIO = 11110\nVENDOR_ID_BELL_ONTARIO_SERVICE_ASSURANCE = 11111\nVENDOR_ID_STEPHEN_GOULD_PAPER_CO = 11112\nVENDOR_ID_BJC_HEALTHCARE = 11113\nVENDOR_ID_CITRUS_COMMUNICATIONS_GMBH = 11114\nVENDOR_ID_GEORGE_FOX_UNIVERSITY = 11115\nVENDOR_ID_MARCO_HENTSCHEL = 11116\nVENDOR_ID_VERENIGING_OPEN_DOMEINZENON = 11117\nVENDOR_ID_ALPHA1_COMMUNICATIONS = 11118\nVENDOR_ID_123INDIACOM = 11119\nVENDOR_ID_ADVANCED_SOFTWARE_RESOURCES_INC = 11120\nVENDOR_ID_C3_LTD = 11121\nVENDOR_ID_CENCOSUD_SA = 11122\nVENDOR_ID_COLRUYT = 11123\nVENDOR_ID_CONTENTURE_LTD = 11124\nVENDOR_ID_DOMANI_SOFTWARE_SERVICES = 11125\nVENDOR_ID_ESCP_EAP = 11126\nVENDOR_ID_FST_SRL = 11127\nVENDOR_ID_GADBOIS_CONSULTING = 11128\nVENDOR_ID_GOOGLE_INC = 11129\nVENDOR_ID_HLSMANN_SERVICES_EK = 11130\nVENDOR_ID_INSIDERS_INFORMATION_MANAGEMENT_GMBH = 11131\nVENDOR_ID_INTEGRAL_SOLUTIONS_CORPORATION = 11132\nVENDOR_ID_JEMMAC_SOFTWARE_LIMITED = 11133\nVENDOR_ID_LENTRONICS = 11134\nVENDOR_ID_MARIAN_EICHHLOZ = 11135\nVENDOR_ID_MEITETSU_SYSTEM_DEV_COLTD = 11136\nVENDOR_ID_METAPARADIGM_PTE_LTD = 11137\nVENDOR_ID_MFORMATION_TECHNOLOGIES_INC = 11138\nVENDOR_ID_NEOWIZ_CORPORATION = 11139\nVENDOR_ID_NETWORK_CENTER_SHANGHAI_JIAOTONG_UNIVERSITY = 11140\nVENDOR_ID_OMNEON_VIDEO_NETWORKS = 11141\nVENDOR_ID_O_ONLINE = 11142\nVENDOR_ID_PCSNC = 11143\nVENDOR_ID_RADPHARM = 11144\nVENDOR_ID_SIEMENS_FINANCIAL_SERVICES_GMBH = 11145\nVENDOR_ID_SIEMENS_INFORMATIONS_SYSTEMS_LIMITED = 11146\nVENDOR_ID_SVTO_HEWLETT_PACKARD = 11147\nVENDOR_ID_SWAN_SYSTEMS = 11148\nVENDOR_ID_TI_DOO = 11149\nVENDOR_ID_ROAMWARE_INC_FORMERLY_UNWIREDSOFT = 11150\nVENDOR_ID_URSCHEL_LABORATORIES_INCORPORATED = 11151\nVENDOR_ID_VOCALCOM = 11152\nVENDOR_ID_WEBWEAR = 11153\nVENDOR_ID_WIREX_COMMUNICATIONS_INC = 11154\nVENDOR_ID_WVS_GROEP = 11155\nVENDOR_ID_CDMEDIC = 11156\nVENDOR_ID_MULTITECH_SOLUTIONS_INC = 11157\nVENDOR_ID_PANSERVICE = 11158\nVENDOR_ID_PC_DIALOGS_INC = 11159\nVENDOR_ID_TDK_CORPORATION = 11160\nVENDOR_ID_WISTRON_CORPORATION = 11161\nVENDOR_ID_ADVANCED_CAMPUS_SERVICES = 11162\nVENDOR_ID_HAL_COMPUTER_SYSTEMS_LTD = 11163\nVENDOR_ID_PBH_PLANUNGSBUERO_HAMMER = 11164\nVENDOR_ID_ACER_MOBILE_NETWORKS_INC = 11165\nVENDOR_ID_ALLEWA_GMBH = 11166\nVENDOR_ID_AZURTEC_INC = 11167\nVENDOR_ID_BANCA_DEL_GOTTARDO = 11168\nVENDOR_ID_BEACON_BIOSCIENCE_INC = 11169\nVENDOR_ID_COMMSOLOGY = 11170\nVENDOR_ID_CROL = 11171\nVENDOR_ID_DIE_INFORMATIK_WERKSTATT_GMBH = 11172\nVENDOR_ID_DIRECTORY_SOLUTIONS = 11173\nVENDOR_ID_DX_ANTENNA_CO_LTD = 11174\nVENDOR_ID_EPIC_GROUP_PLC = 11175\nVENDOR_ID_OBJECTIVE_PATHOLOGY_SERVICES_LIMITED_FORMERLY_EXTELLIGENCE = 11176\nVENDOR_ID_GRAPEVINE_INTERACTIVE_PTY_LTD = 11177\nVENDOR_ID_GUARDIAN_CONTROLS_INTERNATIONAL = 11178\nVENDOR_ID_HEREUARE_COMMUNICATIONS_INC = 11179\nVENDOR_ID_INVISIBLE_HAND_NETWORKS = 11180\nVENDOR_ID_JAN_SCHMIDT_DV_BERATUNG = 11181\nVENDOR_ID_KRETZ_INDUSTRIES = 11182\nVENDOR_ID_MITAC_INTERNATIONAL_CORP = 11183\nVENDOR_ID_NARAY_INFORMATION_COMMUNICATION_ENTERPRISE = 11184\nVENDOR_ID_POSSIO_AB = 11185\nVENDOR_ID_RATTAN_INFORMATION = 11186\nVENDOR_ID_SNV_NETHERLANDS_DEVELOPMENT_ORGANISATION = 11187\nVENDOR_ID_UNIVERSITAT_ROVIRA_I_VIRGILI = 11188\nVENDOR_ID_UNIVERSITY_OF_APPLIED_SCIENCES_SCHMALKALDEN = 11189\nVENDOR_ID_VIOX_SERVICES_INC = 11190\nVENDOR_ID_XIAM = 11191\nVENDOR_ID_XIPHORG_FOUNDATION = 11192\nVENDOR_ID_SALICA_LTD = 11193\nVENDOR_ID_WIRELESS_MAINGATE = 11194\nVENDOR_ID_VECTOR_SP_Z_OO = 11195\nVENDOR_ID_MARCANT_INTERNET_SERVICES_GMBH = 11196\nVENDOR_ID_A_L_JAZEERA_SATELLITE_CHANNEL = 11197\nVENDOR_ID_ATRID_SYSTEMES = 11198\nVENDOR_ID_AUSPICE_INC = 11199\nVENDOR_ID_BELLSOUTH = 11200\nVENDOR_ID_BENEFIT_SYSTEMS_INC = 11201\nVENDOR_ID_BLUE_SKY_STUDIOS = 11202\nVENDOR_ID_CYBERMATION_INC = 11203\nVENDOR_ID_ENTERCEPT_SECURITY_TECHNOLOGIES = 11204\nVENDOR_ID_ENVIRONMENTAL_SYSTEMS_RESEARCH_INSTITUTE_ESRI = 11205\nVENDOR_ID_EPLS_ENTERPRISE_COMPUTING_PTE_LTD = 11206\nVENDOR_ID_FALK_ESOLUTIONS_AG = 11207\nVENDOR_ID_GLOBAL_MEDIA_SYSTEMS = 11208\nVENDOR_ID_GOLD_WIRE_TECHNOLOGY = 11209\nVENDOR_ID_IAIN_STEVENSON = 11210\nVENDOR_ID_MOBITV_INC_FORMERLY_IDETIC_INCORPORATED = 11211\nVENDOR_ID_IDM = 11212\nVENDOR_ID_INFORMATION_SERVICES_EXTENDED_INC = 11213\nVENDOR_ID_MERIDIS_CORPORATION = 11214\nVENDOR_ID_NAVITAIRE_INC = 11215\nVENDOR_ID_NEOWARE_SYSTEMS = 11216\nVENDOR_ID_OCEANET_TECHNOLOGY = 11217\nVENDOR_ID_OCULAN_CORP = 11218\nVENDOR_ID_OPVISTA = 11219\nVENDOR_ID_PIRELLI_CAVI_E_SISTEMI_SPA = 11220\nVENDOR_ID_PROCON_GMBH = 11221\nVENDOR_ID_ROCHESTER_GENERAL_HOSPITAL = 11222\nVENDOR_ID_RWT_TELEFONY_POLSKIE_SA = 11223\nVENDOR_ID_SAEBEX_PTY_LTD = 11224\nVENDOR_ID_SCMB = 11225\nVENDOR_ID_SKANDINAVISKA_MAGASIN1_AB = 11226\nVENDOR_ID_STARTCORP = 11227\nVENDOR_ID_SYSTEMBASE_COLTD = 11228\nVENDOR_ID_SYSTEMWARE = 11229\nVENDOR_ID_VOICE_ACCESS_TECHNOLOGIES = 11230\nVENDOR_ID_WINCOM_SYSTEMS_INC = 11231\nVENDOR_ID_APOCALYPSE_COMPUTING_SERVICES = 11232\nVENDOR_ID_HARALD_GLIEBE = 11233\nVENDOR_ID_HOTCIRCLES = 11234\nVENDOR_ID_WHICHMALLCOM = 11235\nVENDOR_ID_MOSAKIN_INTERNATIONAL_CORPORATION = 11236\nVENDOR_ID_ITEK_SPF = 11237\nVENDOR_ID_APS_SYSTEME = 11238\nVENDOR_ID_BENNETT_COLEMAN_CO_LTD = 11239\nVENDOR_ID_CAIXA_DESTALVIS_I_PENSIONS_DE_BARCELONA = 11240\nVENDOR_ID_CARMEL_SECONDARY_SCHOOL = 11241\nVENDOR_ID_CUSTOM_ELECTRONICS = 11242\nVENDOR_ID_DCWG = 11243\nVENDOR_ID_NET_CONTROL = 11244\nVENDOR_ID_E2OPEN = 11245\nVENDOR_ID_GHZ_INC = 11246\nVENDOR_ID_GLAXOSMITHKLINE = 11247\nVENDOR_ID_GREENWICH_TECHNOLOGY_PARTNERS_INC = 11248\nVENDOR_ID_I_DNSNET_INTERNATIONAL_INC = 11249\nVENDOR_ID_INDIANA_PURDUE_UNIVERSITY_FT_WAYNE = 11250\nVENDOR_ID_INTRADO_INC = 11251\nVENDOR_ID_ITOUCH_LABS = 11252\nVENDOR_ID_JP_STEPHENSON_CO = 11253\nVENDOR_ID_JYDSK_CONSULTING = 11254\nVENDOR_ID_LOCATIONET_SYSTEMS_LTD = 11255\nVENDOR_ID_NETASQ = 11256\nVENDOR_ID_NET_ES = 11257\nVENDOR_ID_NOGUI_AB = 11258\nVENDOR_ID_SEPULVEDA_SYSTEMS = 11259\nVENDOR_ID_SINGLE_SOURCE_OY = 11260\nVENDOR_ID_TSCHAECHE_SERVICES = 11261\nVENDOR_ID_WIRE_CARD_AG = 11262\nVENDOR_ID_WRNETWORKS = 11263\nVENDOR_ID_MOBILEARTS_AB = 11264\nVENDOR_ID_SET_SOFTWARE_INC = 11265\nVENDOR_ID_JIANGSU_FUJITSU_TELECOMMUNICATIONS_TECHNOLOGY_COLTD = 11266\nVENDOR_ID_DISSC_PRESIDENCIA_DEL_GOBIERNO = 11267\nVENDOR_ID_AASTRA = 11268\nVENDOR_ID_ACULAB_PLC = 11269\nVENDOR_ID_ADELPHIA_BUSINESS_SOLUTIONS = 11270\nVENDOR_ID_ARIA_TECHNOLOGY_PTE_LTD = 11271\nVENDOR_ID_BIRDSTEP_TECHNOLOGY = 11272\nVENDOR_ID_BJB_SOFTWARE_INC = 11273\nVENDOR_ID_CENTRIC_TELECOM_LTD = 11274\nVENDOR_ID_CHANGINGWORLDS = 11275\nVENDOR_ID_COMMIL_LTD = 11276\nVENDOR_ID_CONVERGENCE_INTEGRATED_MEDIA_GMBH = 11277\nVENDOR_ID_CS_ENGINEERING_BV = 11278\nVENDOR_ID_DATALAB_TECHNOLOGIA_SA = 11279\nVENDOR_ID_DIGIMOB_LTD = 11280\nVENDOR_ID_DIGITAL_BUS = 11281\nVENDOR_ID_DKSIN = 11282\nVENDOR_ID_DOBSONICS_LABORATORIES = 11283\nVENDOR_ID_ESW_EXTEL_SYSTEMS_WEDEL = 11284\nVENDOR_ID_FLIPDOGCOM = 11285\nVENDOR_ID_H1 = 11286\nVENDOR_ID_HIGH_AVAILABILITYCOM = 11287\nVENDOR_ID_ICREATE_SOFTWARE_INC = 11288\nVENDOR_ID_IMAGINE_LAN_INC = 11289\nVENDOR_ID_INFORMATION_SERVICES_PLC = 11290\nVENDOR_ID_IONA_TECHNOLOGIES = 11291\nVENDOR_ID_LA_FACTORA_DE_COMUNICACIONES_APLICADASSL = 11292\nVENDOR_ID_LOCANET = 11293\nVENDOR_ID_MOBINOR_AS = 11294\nVENDOR_ID_CYBERCITY = 11295\nVENDOR_ID_NEON_SOFTWARE_INC = 11296\nVENDOR_ID_NETNET_INC = 11297\nVENDOR_ID_NLWEBCOM = 11298\nVENDOR_ID_ON_TIME_SYSTEMS = 11299\nVENDOR_ID_PASSAGEWAYS_TRAVEL = 11300\nVENDOR_ID_PEARSON_EDUCATION = 11301\nVENDOR_ID_PERIMETER_TECHNOLOGY = 11302\nVENDOR_ID_PHOTONIXNET_CORPORATION = 11303\nVENDOR_ID_PRINTERON_CORPORATION = 11304\nVENDOR_ID_RESEARCH_INSTITUTE_FOR_PARTICLE_AND_NUCLEAR_PHYSICS_DEPARTMENT_OF_BIOPHYSICS = 11305\nVENDOR_ID_ROBARTS_RESEARCH_INSTITUTE = 11306\nVENDOR_ID_SOLARWINDSNET = 11307\nVENDOR_ID_SWAPCOM = 11308\nVENDOR_ID_TALLGRASS_COMMUNICATIONS_INC = 11309\nVENDOR_ID_TECHNIQUE_CONSULTANTS_PTY_LTD = 11310\nVENDOR_ID_TUBITAK_UEKAE = 11311\nVENDOR_ID_UNIVERSIT_DI_SALERNO_DIA = 11312\nVENDOR_ID_UNIVERSITY_OF_CALGARY = 11313\nVENDOR_ID_UNIVERSITY_OF_KANSAS = 11314\nVENDOR_ID_USACONNECT = 11315\nVENDOR_ID_WARE_SOLUTIONS = 11316\nVENDOR_ID_WIELAND_ELECTRIC_GMBH = 11317\nVENDOR_ID_XEROX_RESEARCH = 11318\nVENDOR_ID_ALCATEL_ALCATEL_BELL_SPACE = 11319\nVENDOR_ID_COMMUNAL_CC_GMBH = 11320\nVENDOR_ID_ECI_IP_INC_2 = 11321\nVENDOR_ID_INTEGRATED_SUPPORT_SYSTEMS_INC = 11322\nVENDOR_ID_MANPOWER_INC = 11323\nVENDOR_ID_NETSOLSDE = 11324\nVENDOR_ID_OPENDESIGN_INC = 11325\nVENDOR_ID_BLUE_SCOOTER_INC = 11326\nVENDOR_ID_XIAN_JIAOTONG_UNIVERSITY_JUMP_NETWORK_TECHNOLOGY_COLTD = 11327\nVENDOR_ID_RANA = 11328\nVENDOR_ID_LLNL_NIF = 11329\nVENDOR_ID_INPRONETWORK_CORPORATION = 11330\nVENDOR_ID_BETASOFT_WOJCIECH_KRUK = 11331\nVENDOR_ID_BROADSTORM_TELECOMMUNICATIONS_INC = 11332\nVENDOR_ID_MEDIA_DATA_SYSTEMS_PTE_LTD = 11333\nVENDOR_ID_OLES_POLYMEDIA_AG = 11334\nVENDOR_ID_QURIS_INC = 11335\nVENDOR_ID_R_SQUARED_TECHNOLOGIES = 11336\nVENDOR_ID_SOFTWARE_WORKHOUSE_OF_HITE_LEE = 11337\nVENDOR_ID_SUCCESS_INFORMATION_SYSTEM_CO_LTD = 11338\nVENDOR_ID_DANAM_COMMUNICATIONS_INC = 11339\nVENDOR_ID_DREGIS_DRESDNER_GLOBAL_IT_SERVICES_GESELLSCHAFT_MBH = 11340\nVENDOR_ID_NOWALLS = 11341\nVENDOR_ID_FINNET_NETWORKS_LTD = 11342\nVENDOR_ID_TERRA_SOL_3 = 11343\nVENDOR_ID_THE_FREERADIUS_SERVER_PROJECT = 11344\nVENDOR_ID_MICROSTAGE_INGENIEURBUERO_RAPHAEL_DIERKES = 11345\nVENDOR_ID_PROVINZIAL_VERSICHERUNG = 11346\nVENDOR_ID_ACADEM_CONSULTING_SERVICES = 11347\nVENDOR_ID_AIRBUS = 11348\nVENDOR_ID_AT_RETE_AG = 11349\nVENDOR_ID_BONDCARCOM = 11350\nVENDOR_ID_BOUWENS = 11351\nVENDOR_ID_COGNIGEN_CORPORATION = 11352\nVENDOR_ID_DAS_BUERO_AM_DRAHT_GMBH = 11353\nVENDOR_ID_DATA_DESIGN_SYSTEMS_INCORPORATED = 11354\nVENDOR_ID_DATAVAULT = 11355\nVENDOR_ID_DTV_TECHNICAL_KNOWLEDGE_CENTER_OF_DENMARK = 11356\nVENDOR_ID_EDEAL_SCHROEDER_MAIHOEFER_GBR = 11357\nVENDOR_ID_ELCOMMTECH_CORP = 11358\nVENDOR_ID_EML_LTD = 11359\nVENDOR_ID_EXCENON = 11360\nVENDOR_ID_FASTER_CZ = 11361\nVENDOR_ID_FCS_PARTNERS = 11362\nVENDOR_ID_FEDERATION_OF_NORWEGIAN_AGRICULTURAL_COOPERATIVES = 11363\nVENDOR_ID_GAEASOFT_CORP = 11364\nVENDOR_ID_ORANGE_SLOVAKIA = 11365\nVENDOR_ID_GOANNA_GRAPHICS = 11366\nVENDOR_ID_HELIX_GMBH = 11367\nVENDOR_ID_IAVISTA_INC = 11368\nVENDOR_ID_LENOVOEMC_LTD_FORMERLY_IOMEGA = 11369\nVENDOR_ID_ITT_CO_LTD = 11370\nVENDOR_ID_JUNG_MYUNG_TELECOM_CO_LTD = 11371\nVENDOR_ID_MERET_OPTICAL_COMMUNICATIONS = 11372\nVENDOR_ID_NETVISION_SP_Z_OO = 11373\nVENDOR_ID_OKO_BANK_GROUP = 11374\nVENDOR_ID_PACIFIC_GEOSCIENCE_CENTER = 11375\nVENDOR_ID_PEDESTAL_SOFTWARE = 11376\nVENDOR_ID_PRODUCT_TECHNOLOGY_PARTNERS_LTD = 11377\nVENDOR_ID_QUARTZ_ELECTRONICS_LTD = 11378\nVENDOR_ID_RADIANT_RT = 11379\nVENDOR_ID_RETEK_INC = 11380\nVENDOR_ID_ROGERS_COMMUNICATIONS_INC = 11381\nVENDOR_ID_RR_ENTERPRISES = 11382\nVENDOR_ID_SAUDINET = 11383\nVENDOR_ID_SEVENLAYER_SERVICES = 11384\nVENDOR_ID_SPANLINK_COMMUNICATIONS = 11385\nVENDOR_ID_STUDER = 11386\nVENDOR_ID_T4_CONSULTING_GROUP = 11387\nVENDOR_ID_TARANTOLA_LABS = 11388\nVENDOR_ID_TECFA_TECHNOLOGIE_DE_FORMATION_ET_APPRENTISSAGE = 11389\nVENDOR_ID_TEXAS_DEPARTMENT_OF_HOUSING_AND_COMMUNITY_AFFAIRS = 11390\nVENDOR_ID_THE_TEXAS_GIGAPOP = 11391\nVENDOR_ID_TOOLS4EVER_BV = 11392\nVENDOR_ID_TYMLABS_MANAGEMENT_INC = 11393\nVENDOR_ID_UD_TECHNOLOGY = 11394\nVENDOR_ID_VANCOUVER_PUBLIC_LIBRARY = 11395\nVENDOR_ID_WEBEX_CHINA = 11396\nVENDOR_ID_XPEDIO_AB = 11397\nVENDOR_ID_PYX_ENGINEERING_AG = 11398\nVENDOR_ID_WASHINGTON_STATE_UNIVERSITY_VANCOUVER = 11399\nVENDOR_ID_DEPT_OF_INFORMATION_AND_COMMUNICATIONS_TECHNOLOGY_HK_INSTITUTE_OFVOCATIONAL_EDUCATION_TSING_YI = 11400\nVENDOR_ID_CONCATEL_SL = 11401\nVENDOR_ID_MRO_SOFTWARE_INC = 11402\nVENDOR_ID_CORENTE_INC = 11403\nVENDOR_ID_SEANET_CORPORATION = 11404\nVENDOR_ID_SHANGHAIONLINE_INC = 11405\nVENDOR_ID_SANDY_GROUP = 11406\nVENDOR_ID_OBSCENESKILLSCOM = 11407\nVENDOR_ID_FIBERHOME_TELECOMMUNICATION_TECHNOLOGIES_COLTD = 11408\nVENDOR_ID_ADEQUATE_SYSTEMS_GMBH = 11409\nVENDOR_ID_ADVANCED_COMMUNICATION_DEVICES_CORP = 11410\nVENDOR_ID_AOL_AUSTRALIA = 11411\nVENDOR_ID_BKTEL_COMMUNICATIONS_GMBH = 11412\nVENDOR_ID_CAPE_CLEAR_SOFTWARE_LTD = 11413\nVENDOR_ID_CARNATION_TECHNOLOGY_LTD = 11414\nVENDOR_ID_CLCSOFT = 11415\nVENDOR_ID_COALSERE_INC = 11416\nVENDOR_ID_CYNOPS_GMBH = 11417\nVENDOR_ID_DFN_CERT_SERVICES_GMBH = 11418\nVENDOR_ID_FOTEL_CORP = 11419\nVENDOR_ID_GHS_DATA_MANAGEMENT = 11420\nVENDOR_ID_INDUSTRIAL_NETWORKING_SOLUTION = 11421\nVENDOR_ID_LARMOUTH_TPDS_LTD = 11422\nVENDOR_ID_LUCID_VISION_INC = 11423\nVENDOR_ID_MITSUBISHI_GAS_CHEMICAL_COMPANY_INC = 11424\nVENDOR_ID_MOBILEWEBSURF = 11425\nVENDOR_ID_NETFUSIONS_SRL = 11426\nVENDOR_ID_PARTICLE_PHYSICS_GROUP = 11427\nVENDOR_ID_REDES_DE_COMPUTADORAS = 11428\nVENDOR_ID_SCHUMACHER = 11429\nVENDOR_ID_SIMTEK_CORPORATION = 11430\nVENDOR_ID_SOUTHERN_POLYTECHNIC_STATE_UNIVERSITY = 11431\nVENDOR_ID_TOWER_GROUP_NETWORK = 11432\nVENDOR_ID_UNIVERSITY_OF_WEST_BOHEMIA = 11433\nVENDOR_ID_UTAH_SCIENTIFIC_INC = 11434\nVENDOR_ID_WEBEX_COMMUNICATIONS_INC = 11435\nVENDOR_ID_XML_GLOBAL_TECHNOLOGIES_INC = 11436\nVENDOR_ID_XYMBOL = 11437\nVENDOR_ID_CANADIAN_CENTER_FOR_REMOTE_SENSING_GEOACCESS_DIVISION = 11438\nVENDOR_ID_CCLRC = 11439\nVENDOR_ID_SAPROS = 11440\nVENDOR_ID_GOSHEN_COLLEGE = 11441\nVENDOR_ID_INSERTADS_INC = 11442\nVENDOR_ID_MORDER_DEVICES = 11443\nVENDOR_ID_FREDERICK_ENGINEERING = 11444\nVENDOR_ID_ANOREG_BR = 11445\nVENDOR_ID_ADDUCE_NETWORKS = 11446\nVENDOR_ID_XILOGIC_LLC = 11447\nVENDOR_ID_ITOLOGY_CO_LTD = 11448\nVENDOR_ID_TETHERNET_INC = 11449\nVENDOR_ID_XITECDE = 11450\nVENDOR_ID_SINBON_ELECTRONIC_CO_LTD = 11451\nVENDOR_ID_ALLEGIENT_SYSTEMS = 11452\nVENDOR_ID_ALTADIS = 11453\nVENDOR_ID_AVENCIS_SA = 11454\nVENDOR_ID_AVIATION_MANAGEMENT_TECHNOLOGIES_GMBH = 11455\nVENDOR_ID_CALVAEDI_SA = 11456\nVENDOR_ID_CIMCOR_INC = 11457\nVENDOR_ID_COMPUTING_SERVICES_DEPARTMENT_UNIVERSITY_OF_LIVERPOOL = 11458\nVENDOR_ID_DATA_TRACK_TECHNOLOGY_PLC = 11459\nVENDOR_ID_DATAFRONT = 11460\nVENDOR_ID_DELOITTE_TOUCHE = 11461\nVENDOR_ID_DRONEDAP = 11462\nVENDOR_ID_EC_FOUNDER = 11463\nVENDOR_ID_ELECTRONIC_ARTS = 11464\nVENDOR_ID_ENVOY_TECHNOLOGIES = 11465\nVENDOR_ID_E_POLLINATION_ENTERPRISE_INC = 11466\nVENDOR_ID_INTERMEDIASP = 11467\nVENDOR_ID_JACKSON_COUNTY_SCHOOL_DISTRICT_6 = 11468\nVENDOR_ID_KOKONG = 11469\nVENDOR_ID_LX_NETWORKING = 11470\nVENDOR_ID_MINEIT_SOFTWARE_LTD = 11471\nVENDOR_ID_MOETI_CORP = 11472\nVENDOR_ID_NORDIC_MESSAGING_TECHNOLOGIES_AB = 11473\nVENDOR_ID_NTT_DATA_COPORATION = 11474\nVENDOR_ID_PRO_ACTIVE = 11475\nVENDOR_ID_QUEST_CONTROLS_INC = 11476\nVENDOR_ID_RASVIA_SYSTEMS_INCORPORATION = 11477\nVENDOR_ID_SCORPION_CONTROLS_INC = 11478\nVENDOR_ID_SELSO = 11479\nVENDOR_ID_SUNNYIND_CORP = 11480\nVENDOR_ID_TEIMA_AUDIOTEX = 11481\nVENDOR_ID_UNIVERSAL_TRAFFIC_MANAGEMENT_SOCIETY_OF_JAPANUTMS = 11482\nVENDOR_ID_UNIVERSITY_OF_ILLINOIS_AT_URBANA_CHAMPAIGN = 11483\nVENDOR_ID_VIASTORE_SYSTEMS_GMBH = 11484\nVENDOR_ID_VIDA_NETWORK_TECHNOLOGIES_INC = 11485\nVENDOR_ID_VIZZAVI_NL = 11486\nVENDOR_ID_VOXSURF_LTD = 11487\nVENDOR_ID_AB_COMPUTERS = 11488\nVENDOR_ID_ALACRITUS = 11489\nVENDOR_ID_BETWEENMARKETS_INC = 11490\nVENDOR_ID_UNIVERSITY_OF_JYVASKYLA = 11491\nVENDOR_ID_MICRO_RESEARCH_LABORATORY_INC = 11492\nVENDOR_ID_OBOURG_ORIGNY_INFORMATIQUE = 11493\nVENDOR_ID_NEBULON_PTY_LTD = 11494\nVENDOR_ID_CUBICCH = 11495\nVENDOR_ID_FOOCZ = 11496\nVENDOR_ID_GAMERZNET_ENTERPRISES = 11497\nVENDOR_ID_HCCNET_BV = 11498\nVENDOR_ID_HOLLMANN_CONSULTING_SERVICES = 11499\nVENDOR_ID_INFRANT_TECHNOLOGY_INC = 11500\nVENDOR_ID_INGMARNET = 11501\nVENDOR_ID_ITU_T_ASN1_PROJECT = 11502\nVENDOR_ID_METRAWARE = 11503\nVENDOR_ID_NDSL_INC = 11504\nVENDOR_ID_NETWORK_1_SECURITY_SOLUTIONS_INC = 11505\nVENDOR_ID_PROBUSINESS = 11507\nVENDOR_ID_SCHOOL_OF_BANKING_AND_MANAGEMENT_IN_CRACOW = 11508\nVENDOR_ID_SCHWEIZER_ELECTRONIC_AG = 11509\nVENDOR_ID_SERVICE_INTELLIGENCE = 11510\nVENDOR_ID_SOUTHERN_ILLINOIS_UNIVERSITY_SCHOOL_OF_MEDICINE = 11511\nVENDOR_ID_ST_JOSEPHS_COLLEGE = 11512\nVENDOR_ID_STRELE_INFORMATIK = 11513\nVENDOR_ID_CHRIS_ABERNETHY = 11514\nVENDOR_ID_SUB1_SA = 11515\nVENDOR_ID_THE_ACADEMY_OF_SCIENCES_OF_THE_CZECH_REPUBLIC = 11516\nVENDOR_ID_TRIVADIS_AG = 11517\nVENDOR_ID_T_SOFT_LTD = 11518\nVENDOR_ID_VET = 11519\nVENDOR_ID_VISILINX_INC = 11520\nVENDOR_ID_BROADCAST_MUSIC_INCORPORATED = 11521\nVENDOR_ID_LINXTEK = 11522\nVENDOR_ID_FUJITSU_LABORATORIES_OF_AMERICA_INC = 11523\nVENDOR_ID_CH5_FINLAND_OY = 11524\nVENDOR_ID_BRAIN_ON_AG = 11525\nVENDOR_ID_GIRO_LTD = 11526\nVENDOR_ID_BROMAX_COMMUNICATIONS_INC = 11527\nVENDOR_ID_DVBERN_AG = 11528\nVENDOR_ID_KOGA_ELECTRONICS_CO = 11529\nVENDOR_ID_3G_NETWORKS = 11530\nVENDOR_ID_AHA_SYSTEMS = 11531\nVENDOR_ID_BOND_UNIVERSITY = 11532\nVENDOR_ID_CHIBA_INDUSTRIES = 11533\nVENDOR_ID_COAXMEDIA = 11534\nVENDOR_ID_COGITIS = 11535\nVENDOR_ID_CYBER_ARK = 11536\nVENDOR_ID_DIRECCIN_GENERAL_DE_LA_POLICA = 11537\nVENDOR_ID_ELATA_LTD = 11538\nVENDOR_ID_ESSENT_KABELCOM = 11539\nVENDOR_ID_ETIT = 11540\nVENDOR_ID_FUGU_ANGST_PRODUCTIONS = 11541\nVENDOR_ID_GUANGZHOU_GAOKE_COMMUNICATION_EQUIPMENT_CO_LTD_2 = 11542\nVENDOR_ID_INTERNET_NORTHWEST = 11543\nVENDOR_ID_KUNSTHOCHSCHULE_FUER_MEDIEN = 11544\nVENDOR_ID_KURTEV_INTERGALACTIC = 11545\nVENDOR_ID_METRAWARE_2 = 11546\nVENDOR_ID_MPOWER_COMMUNICATIONS_CORPORATION = 11547\nVENDOR_ID_NABLA2_SRL = 11548\nVENDOR_ID_NETOUS_TECHNOLOGIES_LTD = 11549\nVENDOR_ID_NETPIA_SYSTEMS_COLTD = 11550\nVENDOR_ID_ORCA_ORCINUS_INC = 11551\nVENDOR_ID_PAGE87 = 11552\nVENDOR_ID_PLANET_TECHNOLOGIES_NV = 11553\nVENDOR_ID_POMCOR = 11554\nVENDOR_ID_RIDER_UNIVERSITY = 11555\nVENDOR_ID_ROBERT_BURRELL_DONKIN = 11556\nVENDOR_ID_SCI = 11557\nVENDOR_ID_SOFICE = 11558\nVENDOR_ID_SOFTGAME_INTERNATIONAL_PTY_LTD = 11559\nVENDOR_ID_TANTIA_TECHNOLOGIES_INC = 11560\nVENDOR_ID_TOPCON_POSITIONING_SYSTEMS_INC = 11561\nVENDOR_ID_VE2UG = 11562\nVENDOR_ID_AHNLAB_INC = 11563\nVENDOR_ID_CITEITWRITE = 11564\nVENDOR_ID_INSTITUTO_NACIONAL_DE_ESTATSTICA_PORTUGAL = 11565\nVENDOR_ID_PROLOGUE_SOFTWARE = 11566\nVENDOR_ID_DELTALOYD_DEUTSCHLAND = 11567\nVENDOR_ID_BMBWK = 11568\nVENDOR_ID_HANDYDE_VERTRIEBS_GMBH = 11569\nVENDOR_ID_MAGES_TOUCH = 11570\nVENDOR_ID_NTI_STUDIOS = 11571\nVENDOR_ID_RASVIA_SYSTEMS_INC = 11572\nVENDOR_ID_ROCKUSAT = 11573\nVENDOR_ID_SEVEN_WINDS = 11574\nVENDOR_ID_SOLUTION_DESIGN_LABORATORY = 11575\nVENDOR_ID_SUNNYCAL_INC = 11576\nVENDOR_ID_GLOBAL_SYSTEM_SERVICES = 11577\nVENDOR_ID_AIRZIP_INC = 11578\nVENDOR_ID_AMADEUS_DATA_PROCESSING_GMBH = 11579\nVENDOR_ID_AMDOCS = 11580\nVENDOR_ID_BYLINUXNET = 11581\nVENDOR_ID_CI_TECHNOLOGIES_2 = 11582\nVENDOR_ID_CAYENTA_INC = 11583\nVENDOR_ID_CLASS_AG = 11584\nVENDOR_ID_COLORADOBIZNET = 11585\nVENDOR_ID_DLR_EV = 11586\nVENDOR_ID_EPICTET_AG = 11587\nVENDOR_ID_ERA_AS = 11588\nVENDOR_ID_EXSIOR_DATA_INFORMATION_TECH_INC = 11589\nVENDOR_ID_FORTECH_LTD = 11590\nVENDOR_ID_FREE_SOFTWARE_FOUNDATION = 11591\nVENDOR_ID_HANGZHOUSUNYARD_INFORMATION_ENGINEERING_COLTD = 11592\nVENDOR_ID_IMISE = 11593\nVENDOR_ID_LDCOM_NETWORKS = 11594\nVENDOR_ID_LIGHTMAZE_AG = 11595\nVENDOR_ID_MEDIAKABEL = 11596\nVENDOR_ID_MFB_MULTA_SPOL_S_RO = 11597\nVENDOR_ID_MGIC_MORTGAGE_GUARANTY_INSURANCE_CORP = 11598\nVENDOR_ID_MILLE21 = 11599\nVENDOR_ID_NEOGRATION_INC = 11600\nVENDOR_ID_NETAXS_INTERNET_SERVICES = 11601\nVENDOR_ID_NEW_YORK_STATE_OFFICE_OF_THE_STATE_COMPTROLLER = 11602\nVENDOR_ID_NEXXIENT_COMMUNICATIONS = 11603\nVENDOR_ID_NORDUGRID = 11604\nVENDOR_ID_OPTICAL_WIRELESS_LINK_INC = 11605\nVENDOR_ID_PACIFIC_BROADBANK_NETWORKS = 11606\nVENDOR_ID_PLUMTREE_SOFTWARE = 11607\nVENDOR_ID_PRACOM_PTY_LTD = 11608\nVENDOR_ID_PUSANWEB_LTD = 11609\nVENDOR_ID_SANDVINE_INCORPORATED = 11610\nVENDOR_ID_SECRETARIA_DA_FAZENDA_DO_ESTADO_DE_SP = 11611\nVENDOR_ID_STT_SRL = 11612\nVENDOR_ID_VORTEX_LTD = 11613\nVENDOR_ID_VRWG = 11614\nVENDOR_ID_WEBARONET_TECHNOLOGY = 11615\nVENDOR_ID_WEBPERFORM_GROUP_LTD = 11616\nVENDOR_ID_CABLEVISION_SYSTEMS_HOLDINGS = 11617\nVENDOR_ID_SOLTECH_CO_LTD = 11618\nVENDOR_ID_PTC_SOLUTIONS_LTD = 11619\nVENDOR_ID_PACE_ANTI_PIRACY = 11620\nVENDOR_ID_AGROTECNICA_ARPA_SCRL = 11621\nVENDOR_ID_3PARDATA = 11622\nVENDOR_ID_AEGIS_SOFTWARE = 11623\nVENDOR_ID_BIT_LAB_PTY_LTD = 11624\nVENDOR_ID_BLACK_BEAR_SOFTWARE_LLC = 11625\nVENDOR_ID_COMBOL_GMBH = 11626\nVENDOR_ID_DAVID_PITTS = 11627\nVENDOR_ID_EDIPORT_TELECOMMUNICATION_LTD = 11628\nVENDOR_ID_EDUCATIONAL_SERVICE_UNIT_2 = 11629\nVENDOR_ID_EIRCOMNET = 11630\nVENDOR_ID_ENABLINGTRUST_LLC = 11631\nVENDOR_ID_E_SEC_TECNOLOGIA_EM_SEGURANCA_DE_DADOS_LTDA = 11632\nVENDOR_ID_EUROPOP_AG = 11633\nVENDOR_ID_EXEMPLA = 11634\nVENDOR_ID_FIORANO_SOFTWARE_INC_2 = 11635\nVENDOR_ID_FOCAL_POINT_SOFTWARE_INC = 11636\nVENDOR_ID_GENERATIO_GMBH = 11637\nVENDOR_ID_GRAPES_NETWORK_SERVICES = 11638\nVENDOR_ID_INTERSYS_URUGUAY_LTDA = 11639\nVENDOR_ID_MIRITEK_INC = 11640\nVENDOR_ID_NETOVA = 11641\nVENDOR_ID_NEXTRA_ENSURE_UK = 11642\nVENDOR_ID_ONE_STOP_CONSULTING_INC = 11643\nVENDOR_ID_ORBISM_CONSULTING = 11644\nVENDOR_ID_PENTALOG_INET = 11645\nVENDOR_ID_PENTAMEDIA_CO_LTD = 11646\nVENDOR_ID_PLANETASIA_LTD_2 = 11647\nVENDOR_ID_REMOTESITE_TECHNOLOGIES_INC = 11648\nVENDOR_ID_ROSS_STORES_INC = 11649\nVENDOR_ID_SCHNEDERMANN_SOFTWARE_CONSULTING_GMBH = 11650\nVENDOR_ID_SIDESPACE = 11651\nVENDOR_ID_SONOMA_STATE_UNIVERSITY = 11652\nVENDOR_ID_STACK_COMPUTER_SOLUTIONS = 11653\nVENDOR_ID_STROTT_NETWORK_SOLUTIONS = 11654\nVENDOR_ID_SYO_SRL = 11655\nVENDOR_ID_SYNAPSE_SYSTEMS_AB = 11656\nVENDOR_ID_TAIWAN_TELECOMMUNICATION_NETWORK_SERVICES_CO_LTD = 11657\nVENDOR_ID_UNIVERSITE_BLAISE_PASCAL = 11658\nVENDOR_ID_VIRTUAL_SECURITY_RESEARCH = 11659\nVENDOR_ID_VMS_LIMITED = 11660\nVENDOR_ID_WAHOO_INTERNATIONAL_ENTERPRISE_CO_LTD = 11661\nVENDOR_ID_MARCEL_RUFF = 11662\nVENDOR_ID_X_ALTAR_TOULOUSE = 11663\nVENDOR_ID_BASE2 = 11664\nVENDOR_ID_DACOM = 11665\nVENDOR_ID_INSTITUTE_OF_COMMUNICATIONS_ENGINEERING_UNIVERSITY_OF_HANOVER = 11666\nVENDOR_ID_NEW_YORK_STATE_EDUCATION_DEPARTMENT = 11667\nVENDOR_ID_WRLUCAS = 11668\nVENDOR_ID_MILHOUSE_TECHNOLOGIES_USA = 11669\nVENDOR_ID_CHINA_SANJIANG_SPACE_GROUP = 11770\nVENDOR_ID_81_BROAD_STREET = 11771\nVENDOR_ID_ADROCK_SOFTWARE = 11772\nVENDOR_ID_AGMODEL_NARC_JAPAN = 11773\nVENDOR_ID_ASYK_SA = 11774\nVENDOR_ID_ATCHIK = 11775\nVENDOR_ID_AVIBIT_DATA_PROCESSING_GMBH = 11776\nVENDOR_ID_AYMAN_LLC = 11777\nVENDOR_ID_BLUEBRIDGE_TECHNOLOGIES_AG = 11778\nVENDOR_ID_CASEDEV_ACTIVE_OY = 11779\nVENDOR_ID_CBIM = 11780\nVENDOR_ID_CELTRO = 11781\nVENDOR_ID_CHARLES_INDUSTRIES_LTD = 11782\nVENDOR_ID_CANON_SOFTWARE_INFORMATION_SYSTEMS_INC = 11783\nVENDOR_ID_CREDANT_TECHNOLOGIES = 11784\nVENDOR_ID_CRITICAL_INTEGRATION_LTD = 11785\nVENDOR_ID_DAISY_SOFTWARE = 11786\nVENDOR_ID_DATAGATE_DOO = 11787\nVENDOR_ID_FLUXXCOM_E_COMMERCE_GMBH = 11788\nVENDOR_ID_FORESCOUT_TECHNOLOGIES_INC = 11789\nVENDOR_ID_GATEWAY_COMMUNITY_COLLEGE = 11790\nVENDOR_ID_GIESECKE_AND_DEVRIENT = 11791\nVENDOR_ID_GRANT_COUNTY_PUD = 11792\nVENDOR_ID_IBM_SLOVAKIA_TEST = 11793\nVENDOR_ID_INCENTIVE_TECHNOLOGIES_INC = 11794\nVENDOR_ID_INFOGLOBE = 11795\nVENDOR_ID_INNOVIDATA_GMBH = 11796\nVENDOR_ID_KABOOM_ENTERPRISES = 11797\nVENDOR_ID_LATERAL_SANDS_PTY_LTD = 11798\nVENDOR_ID_LATIS_NETWORKS_INC = 11799\nVENDOR_ID_LOGOSOFT = 11800\nVENDOR_ID_MPSV = 11801\nVENDOR_ID_NORTHWEST_AIRLINES_INC = 11802\nVENDOR_ID_OHLONE_COMMUNITY_COLLEGE = 11803\nVENDOR_ID_PCS = 11804\nVENDOR_ID_PLEXUS = 11805\nVENDOR_ID_ANTONVENETA_ABN_AMRO_BANK = 11806\nVENDOR_ID_SAMUELBALLECOM = 11807\nVENDOR_ID_SIFRY_CONSULTING = 11808\nVENDOR_ID_SKOBELTSYN_INSTITUTE_OF_NUCLESR_PHYSICS_MOSCOW_STATE_UNIVERSITY = 11809\nVENDOR_ID_SOLESYS_SA = 11810\nVENDOR_ID_SPACES_INC = 11811\nVENDOR_ID_TDC_INTERNET_A_S = 11812\nVENDOR_ID_TMT_LTD = 11813\nVENDOR_ID_UNIVERSITY_OF_NANTES = 11814\nVENDOR_ID_YELLOW_ONLINE_INC = 11815\nVENDOR_ID_YUANTONG_TECHNOLOGY = 11816\nVENDOR_ID_ZENTRUM_INFORMATIKDIENSTE_UNIVERSITAET_ZUERICH = 11817\nVENDOR_ID_Z_STAR_MICROELECTRONICS_CORPORATION = 11818\nVENDOR_ID_ZX_FACTORY = 11819\nVENDOR_ID_FONTERRA_CO_OPERATIVE_GROUP = 11820\nVENDOR_ID_JET_INFOSYSTEMS = 11821\nVENDOR_ID_SPSU_SELINUX_LDAP_TEAM = 11822\nVENDOR_ID_WSMICROSYSTEMS_INC = 11823\nVENDOR_ID_COMPUTER_TECHNOLOGIES_INTERNATIONAL_LTD = 11824\nVENDOR_ID_DAJI_WORKSHOP = 11825\nVENDOR_ID_SISTEMAS_TECNICOS_DE_ENSEANZA_CONSULTORES = 11826\nVENDOR_ID_ACUMEN_ADVANCED_TECHNOLOGIES_INC = 11827\nVENDOR_ID_COAST_MOUNTAINS_SCHOOL_DISTRICT = 11828\nVENDOR_ID_CORVIL_NETWORKS = 11829\nVENDOR_ID_FARTY_CRAFTS_PTY_LTD = 11830\nVENDOR_ID_INTERACTIVE_TRANSACTION_SERVICES_INC = 11831\nVENDOR_ID_JOERG_PREUSS = 11832\nVENDOR_ID_NCIRCLE_NETWORK_SECURITY = 11833\nVENDOR_ID_PLIVA_DD = 11834\nVENDOR_ID_STREAMSERVE_INC = 11835\nVENDOR_ID_SWISS_NATIONAL_BANK = 11836\nVENDOR_ID_TELENOR_MOBILE_COMMUNICATIONS = 11837\nVENDOR_ID_VISTAAR = 11838\nVENDOR_ID_WEBWAYONE_LTD = 11839\nVENDOR_ID_YR_CONSEIL = 11840\nVENDOR_ID_AALTONEN_VUORELA = 11841\nVENDOR_ID_ANCHORA = 11842\nVENDOR_ID_ARGUS_SYSTEMS_GROUP_INC = 11843\nVENDOR_ID_BEIJING_SUPER_CHANNEL_NETWORK_LIMITED = 11844\nVENDOR_ID_BLUEAIR_NETWORKS = 11845\nVENDOR_ID_CITAP = 11846\nVENDOR_ID_HIMNEBAUGH_CONSULTING_INC = 11847\nVENDOR_ID_INLINE_CORPORATION = 11848\nVENDOR_ID_JANUS_TECHNOLOGIES = 11849\nVENDOR_ID_NATIVE_NAMES_CORPORATION = 11850\nVENDOR_ID_NETECONOMIST = 11851\nVENDOR_ID_NEW_PRODUCTIVITY_INITIATIVE_INC = 11852\nVENDOR_ID_PUBLIC_SERVICE_COMPANY_OF_NEW_MEXICO = 11853\nVENDOR_ID_HEALTHVISION_FORMERLY_QUOVADX_INC = 11854\nVENDOR_ID_RETIREMENT_BY_DESIGN = 11855\nVENDOR_ID_TNT_LOGISTICS_NORTH_AMERICA = 11856\nVENDOR_ID_TRANSMODE_SYSTEMS_AB = 11857\nVENDOR_ID_UANGEL = 11858\nVENDOR_ID_WORLDCHAIN_INC = 11859\nVENDOR_ID_WOSSNAMEORGUK = 11860\nVENDOR_ID_CODENET = 11861\nVENDOR_ID_COLUMBIA_UNIVERSITY_IN_THE_CITY_OF_NEW_YORK = 11862\nVENDOR_ID_TP_LINK_TECHNOLOGY_COLTD = 11863\nVENDOR_ID_BKE_AND_WALTERFANG_ELECTRONIC_SYSTEMS_LTD = 11864\nVENDOR_ID_EXPLO_IT_RESEARCH = 11865\nVENDOR_ID_GDTTI = 11866\nVENDOR_ID_LOOP_TREINAMENTO_EM_INFORM = 11867\nVENDOR_ID_PLACENET = 11868\nVENDOR_ID_ROMAN_ZIELINSKI_METOD_OCH_SYSTEMUTVECKLING = 11869\nVENDOR_ID_SANDHILLS_COMMUNITY_COLLEGE = 11870\nVENDOR_ID_SPACENET_AG = 11871\nVENDOR_ID_SYSTEMY_MIKROPROCESOROWE = 11872\nVENDOR_ID_YOLKE_CORPORATION = 11873\nVENDOR_ID_SCOPUS_TECNOLOGIA_S_A = 11874\nVENDOR_ID_BIOMET_MERCK_BV = 11875\nVENDOR_ID_SITESEERS_INC = 11876\nVENDOR_ID_3UP_SYSTEMS = 11877\nVENDOR_ID_ACHILLES_GUARD_INC_DBA_CRITICAL_WATCH = 11878\nVENDOR_ID_CASTEL_ET_FROMAGET = 11879\nVENDOR_ID_CUSTOM_BUSINESS_LINK_INC = 11880\nVENDOR_ID_FIBERSPANS_CORPORATION = 11881\nVENDOR_ID_GESCHKE_INTERNET_CONSULTING = 11882\nVENDOR_ID_IGNITE_COMMUNICATIONS = 11883\nVENDOR_ID_INDEED_VISUAL_CONCEPTS_GMBH = 11884\nVENDOR_ID_MMC_TECHNOLOGY = 11885\nVENDOR_ID_NEXTCARD_INC = 11886\nVENDOR_ID_PSS_SYSTEMS_INC = 11887\nVENDOR_ID_TEAMLOG_EXTERNAL = 11888\nVENDOR_ID_THE_ANSWER_GROUP_LLC = 11889\nVENDOR_ID_THE_NOG_NETWORK = 11890\nVENDOR_ID_UNIFIED_COMMUNICATIONS_PTE_LTD = 11891\nVENDOR_ID_VODAFONE_GLOBAL_PLATFORM_INTERNET_SERVICES = 11892\nVENDOR_ID_THE_PEP_BOYS_MANNY_MOE_JACK = 11893\nVENDOR_ID_INTEGRITY_SOLUTIONS_INC = 11894\nVENDOR_ID_GLOBALNET = 11895\nVENDOR_ID_3G_LAB = 11896\nVENDOR_ID_ACANTHO = 11897\nVENDOR_ID_AGERE_SYSTEMS_INC = 11898\nVENDOR_ID_BITFONE_CORPORATION = 11899\nVENDOR_ID_BLUESOFT = 11900\nVENDOR_ID_BONNDATA_GMBH = 11901\nVENDOR_ID_CARTEL_COMMUNICATION_SYSTEMS_INC = 11902\nVENDOR_ID_CASE_WESTERN_RESERVE_UNIVERSITY = 11903\nVENDOR_ID_CIRQUEDIGITAL_LLC = 11904\nVENDOR_ID_ICOM_INC = 11905\nVENDOR_ID_IF_DRAUDIMAS = 11906\nVENDOR_ID_IMAGINARYREALITIES = 11907\nVENDOR_ID_INSTITUTO_CUBANO_DE_RADIO_Y_TELEVISION = 11908\nVENDOR_ID_LOG_ON_AMERICA_INC = 11909\nVENDOR_ID_MICHAEL_ROETTIG_CONSULTING = 11910\nVENDOR_ID_UNASSIGNED_15 = 11911\nVENDOR_ID_NETMOTION_WIRELESS_INC = 11912\nVENDOR_ID_NETSYSCOM = 11913\nVENDOR_ID_NATIONAL_INFORMATION_INFRASTRUCTURE_DEVELOPMENT_INSTITUTE = 11914\nVENDOR_ID_OLDRING_ASSOCIATES_INC = 11915\nVENDOR_ID_PABLIX = 11916\nVENDOR_ID_PAR3_COMMUNICATIONS = 11917\nVENDOR_ID_PRAJA_INC = 11918\nVENDOR_ID_QCOM_INC = 11919\nVENDOR_ID_QUANTUMBEAM_LTD = 11920\nVENDOR_ID_RUPRECHT_PARTNER_OEG = 11921\nVENDOR_ID_SD_INC = 11922\nVENDOR_ID_SPECTRUM_CONTROL_INC = 11923\nVENDOR_ID_TECHSYSTEM_TECHNOLOGIES = 11924\nVENDOR_ID_THE_IQ_GROUP_INC = 11925\nVENDOR_ID_THE_UNITED_WORLD_COLLEGES_INTERNATIONAL = 11926\nVENDOR_ID_TYTRAST_SYSTEMS_INC = 11927\nVENDOR_ID_INDIEVISIBLE = 11928\nVENDOR_ID_VERIDICOM = 11929\nVENDOR_ID_VSEOBECN_VEROV_BANKA_AS = 11930\nVENDOR_ID_STATEN_ISLAND_UNIVERSITY_HOSPITAL = 11931\nVENDOR_ID_THE_WOLF_GROUP = 11932\nVENDOR_ID_UNIVERSITY_OF_ALBERTA = 11933\nVENDOR_ID_STADTSPARKASSE_KLN = 11934\nVENDOR_ID_JOSUYA_TECHNOLOGY_CORPORATION = 11935\nVENDOR_ID_AMADEUS_NMC_HOLDING_INC = 11936\nVENDOR_ID_ARCSIGHT_INC = 11937\nVENDOR_ID_COMINET = 11938\nVENDOR_ID_ELECTRONIC_DIRECT_INC = 11939\nVENDOR_ID_MEDICAL_CODING_AND_COMPLIANCE_SOLUTIONS_LLC = 11940\nVENDOR_ID_MSSU = 11941\nVENDOR_ID_MUHEN_SOFTWARE = 11942\nVENDOR_ID_NET_PARTNETS_SP_Z_OO = 11943\nVENDOR_ID_PAULMICHL_NETWORKS = 11944\nVENDOR_ID_Q_STATIONNET = 11945\nVENDOR_ID_QUANTA_NETWORK_SYSTEMS_INC = 11946\nVENDOR_ID_STOWARZYSZENIE_FREEZE_NET_ASK = 11947\nVENDOR_ID_SYRACUSE_UNIVERSITY = 11948\nVENDOR_ID_UKRSOTSBANK = 11949\nVENDOR_ID_VIVOCOM_INC = 11950\nVENDOR_ID_VTECHNOLOGIES_SRL = 11951\nVENDOR_ID_ZETA_BROADBAND_INC = 11952\nVENDOR_ID_ZUMTOBEL_AG = 11953\nVENDOR_ID_ELEGANT_SOLUTIONS_CONSULTING_INC = 11954\nVENDOR_ID_BEIJING_NETPOWER_TECHNOLOGIES_INC = 11955\nVENDOR_ID_MOBIGEN_CO_LTD = 11956\nVENDOR_ID_ITC = 11957\nVENDOR_ID_PREMONITIA_INC = 11958\nVENDOR_ID_COYOTE_ROCK = 11959\nVENDOR_ID_DOWNLODE_MEDIA = 11960\nVENDOR_ID_LARC_USP = 11961\nVENDOR_ID_NEVALA = 11962\nVENDOR_ID_PROPEL = 11963\nVENDOR_ID_TECHNICAL_CHAMBER_OF_GREECE = 11964\nVENDOR_ID_THOMAS_MONITOR_SYSTEMS = 11965\nVENDOR_ID_ALSTOM_POWER_SWEDEN_AB = 11966\nVENDOR_ID_MLP_AG = 11967\nVENDOR_ID_SYMLABS = 11968\nVENDOR_ID_SYSTECH_RETAIL_SYSTEMS_INC = 11969\nVENDOR_ID_WATCH4NET_SOLUTIONS = 11970\nVENDOR_ID_PETER_SERVICE_LTD = 11971\nVENDOR_ID_TAIS_INC = 11972\nVENDOR_ID_NORTH_CENTRAL_COLLGE = 11973\nVENDOR_ID_UFFIZIO_INTERNET_SERVICES_GMBH = 11974\nVENDOR_ID_ALPHA_SYSTEMS = 11975\nVENDOR_ID_ATT_LABS_INTELLIGENT_NETWORK_ANALYSIS = 11976\nVENDOR_ID_BACKWOODS_COMMUNICATIONS_LLC = 11977\nVENDOR_ID_BOXCAR_MEDIA = 11978\nVENDOR_ID_BRAINSTORM_BUSINESS_RESOURCES_INC = 11979\nVENDOR_ID_BRAVENET_WEB_SERVICES_INC = 11980\nVENDOR_ID_CAC_LTD = 11981\nVENDOR_ID_CHIZNET = 11982\nVENDOR_ID_COLLECTIVEBID_SYSTEMS_INC = 11983\nVENDOR_ID_CONTENT_MANAGEMENT_AG = 11984\nVENDOR_ID_CONYSIS_SA = 11985\nVENDOR_ID_CREEKPATH_SYSTEMS = 11986\nVENDOR_ID_DAKOS_DATA_COMMUNICATION_CO_LTD = 11987\nVENDOR_ID_DICARTA_INC = 11988\nVENDOR_ID_DME_CORPORATION = 11989\nVENDOR_ID_GADGETEERORG = 11990\nVENDOR_ID_GREENPEACE = 11991\nVENDOR_ID_HELIXENSE_PTE_LTD = 11992\nVENDOR_ID_HILBERT_COMPUTING_INC = 11993\nVENDOR_ID_HUBERT_KRAUSE = 11994\nVENDOR_ID_HYBRID_SOLUTIONS_INC = 11995\nVENDOR_ID_IBSN = 11996\nVENDOR_ID_IKNOWTHEANSWERCOM = 11997\nVENDOR_ID_JSC_DESARROLLOS_Y_APLICACIONES = 11998\nVENDOR_ID_KFKI_SYSTEMS = 11999\nVENDOR_ID_KI_CONSULTING_SOLUTIONS_AB = 12000\nVENDOR_ID_LAKEFIELD_TELECOM_INC = 12001\nVENDOR_ID_LEMUR_NETWORKS_INC = 12002\nVENDOR_ID_LUNA8_LTD = 12003\nVENDOR_ID_MCK_ADVANCE_TECHNOLOGIES = 12004\nVENDOR_ID_MEDIAGS_LTD = 12005\nVENDOR_ID_NCH_SPA_NETWORK_COMPUTER_HOUSE = 12006\nVENDOR_ID_NAMS = 12007\nVENDOR_ID_PACHER = 12008\nVENDOR_ID_REGENSTRIEF_INSTITUTE_FOR_HEALTH_CARE = 12009\nVENDOR_ID_SCHNACKELCHEN = 12010\nVENDOR_ID_SEAGULL = 12011\nVENDOR_ID_SEOUL_NATIONAL_UNIVERSITY_OF_TECHNOLOGY = 12012\nVENDOR_ID_SOFTWORKS_GROUP_INC = 12013\nVENDOR_ID_STUDIO_OF_ARTS_AND_SCIENCES = 12014\nVENDOR_ID_TGA_TECHNOLOGIES_INC = 12015\nVENDOR_ID_UNIVERSITE_DE_CERGY_PONTOISE = 12016\nVENDOR_ID_VERATNET = 12017\nVENDOR_ID_VIVANET_INC = 12018\nVENDOR_ID_WATERFORDORG = 12019\nVENDOR_ID_WEBWARE_TECHNOLOGIES_PVT_LTD = 12020\nVENDOR_ID_WESLEY_WORLDWIDE_SOLUTIONS_INC = 12021\nVENDOR_ID_BRECIS_COMMUNICATIONS = 12022\nVENDOR_ID_UNASSIGNED_16 = 12023\nVENDOR_ID_MIRAESYS_CO_LTD = 12024\nVENDOR_ID_C_EISA = 12025\nVENDOR_ID_PROACTIVE_JAVA_CONSULTANCY_LLP = 12026\nVENDOR_ID_ACCELANET = 12027\nVENDOR_ID_AIRWAVE_WIRELESS_INC = 12028\nVENDOR_ID_ALTAWAVE_INC = 12029\nVENDOR_ID_ANAM_WIRELESS_INTERNET_SOLUTIONS = 12030\nVENDOR_ID_BITSTREAM_LOGIC_INC = 12031\nVENDOR_ID_BOOZ_ALLEN_HAMILTON = 12032\nVENDOR_ID_CHECKMATE_MANAGEMENT = 12033\nVENDOR_ID_CZECH_CERTIFICATION_AUTHORITY_SRO = 12034\nVENDOR_ID_EBJ_CONSULTING = 12035\nVENDOR_ID_COLE_NORMALE_SUPRIEURE_PARIS = 12036\nVENDOR_ID_EURONET_WORLDWIDE_INC = 12037\nVENDOR_ID_EVERYHOSTCOM = 12038\nVENDOR_ID_EXALEAD_SA = 12039\nVENDOR_ID_GULL_HOUSE = 12040\nVENDOR_ID_HTL_BRAUNAU = 12041\nVENDOR_ID_INFOSYS_CORPORATION = 12042\nVENDOR_ID_JASMAP_INC = 12043\nVENDOR_ID_LAKESOFT_CONSULTING_ISP = 12044\nVENDOR_ID_MEDFUSION_INC = 12045\nVENDOR_ID_METRO_INFORMATION_CONCEPTS_AS = 12046\nVENDOR_ID_MEYLAN_CONSULTING = 12047\nVENDOR_ID_MILLENNIUM_MICROWAVE_CORPORATION = 12048\nVENDOR_ID_NETPLANETEARTH = 12049\nVENDOR_ID_OHMAN_IT_CONSULT = 12050\nVENDOR_ID_ONIX_ELECTRONIC_SYSTEMS_LLC = 12051\nVENDOR_ID_RCN_TELECOM = 12052\nVENDOR_ID_SKJAERLUND_SOFTWARE = 12053\nVENDOR_ID_SPECIAL_APPLIED_INTELLIGENCE_CORPORATION = 12054\nVENDOR_ID_SUDAC = 12055\nVENDOR_ID_TADIRAN_COMMUNICATIONS = 12056\nVENDOR_ID_TE_DATA = 12057\nVENDOR_ID_THE_YAK_CORPORATION = 12058\nVENDOR_ID_DIGITAL_APPLIANCE_CORP = 12059\nVENDOR_ID_TRUEPOSITION_INC = 12060\nVENDOR_ID_UNIVERSITY_OF_WESTERN_ONTARIO = 12061\nVENDOR_ID_USER_INTERFACE_TECHNOLOGIES_LTD = 12062\nVENDOR_ID_VERICELL_INC = 12063\nVENDOR_ID_ZURICH_SCUDDER_INVESTMENTS_INC = 12064\nVENDOR_ID_APATON = 12065\nVENDOR_ID_DAEDALUS_NETWORKS = 12066\nVENDOR_ID_PAJO_NETWORKS = 12067\nVENDOR_ID_WROCAW_CENTRE_OF_NETWORKING_AND_SUPERCOMPUTING = 12068\nVENDOR_ID_CORPEX_INTERNET_GMBH = 12069\nVENDOR_ID_WARCO = 12070\nVENDOR_ID_HOME_JAPAN_CO_LTD = 12071\nVENDOR_ID_ACROWAVE_SYSTEMS_CO_LTD = 12072\nVENDOR_ID_AER_NOVO = 12073\nVENDOR_ID_ALISON_ASSOCIATES = 12074\nVENDOR_ID_BECKHAUS_CONSULTING = 12075\nVENDOR_ID_BONWARE = 12076\nVENDOR_ID_BROADMIND_RESEARCH_CORPORATION = 12077\nVENDOR_ID_CIRCLE24_TECHNOLOGIES = 12078\nVENDOR_ID_DOTMAUDOT = 12079\nVENDOR_ID_E_PEOPLESERVE = 12080\nVENDOR_ID_ESTIC_PARTNERS_BV = 12081\nVENDOR_ID_EUROPEAN_COMPUTER_TELECOMS_AG = 12082\nVENDOR_ID_GETRONICS_SOLUTIONS_ITALIA_SPA = 12083\nVENDOR_ID_HIGHDEAL = 12084\nVENDOR_ID_KR_CONSULTING = 12085\nVENDOR_ID_MKAPIUM = 12086\nVENDOR_ID_NETDIRECTORYORG = 12087\nVENDOR_ID_NEWDREAMNET_CO_LTD = 12088\nVENDOR_ID_O3SIS_INFOMATION_TECHNOLOGY_AG = 12089\nVENDOR_ID_PROPHET_SYSTEMS = 12090\nVENDOR_ID_REAL_FS_INC = 12091\nVENDOR_ID_ROTECH_HEALTHCARE_INC = 12092\nVENDOR_ID_SEVEROCESKA_ENERGETIKA_AS = 12093\nVENDOR_ID_SUPLEC_CAMPUS_DE_METZ = 12094\nVENDOR_ID_TELENOR_SATELLITE_BROADCASTING = 12095\nVENDOR_ID_TELIC_COMMUNICATIONS_INC = 12096\nVENDOR_ID_UZA_UNIVERSITAIR_ZIEKENHUIS_ANTWERPEN = 12097\nVENDOR_ID_VOODOO_X_SOLUTIONS = 12098\nVENDOR_ID_WOOLLEN_SERVICES = 12099\nVENDOR_ID_XECURENEXUS = 12100\nVENDOR_ID_YCOM_SA = 12101\nVENDOR_ID_AIRPORT_AUTHORITY_HONG_KONG = 12102\nVENDOR_ID_4TIER_SOFTWARE = 12103\nVENDOR_ID_ASIS_LTD = 12104\nVENDOR_ID_BISC = 12105\nVENDOR_ID_BIPOP_CARIRE_SPA = 12106\nVENDOR_ID_CAW_NETWORKS = 12107\nVENDOR_ID_CONCORDANT = 12108\nVENDOR_ID_IT_SERVICE_OMIKRON_GMBH = 12109\nVENDOR_ID_LIFEWAY_CHRISTIAN_RESOURCES = 12110\nVENDOR_ID_MARK_SCHNUR_CONSULTING = 12111\nVENDOR_ID_NORSYS = 12112\nVENDOR_ID_ZOX_INC = 12113\nVENDOR_ID_NORIS_NETWORK_AG = 12114\nVENDOR_ID_PHILIPS_MP4NET = 12115\nVENDOR_ID_ADVANCED_REALITY = 12116\nVENDOR_ID_ATMEL_NANTES = 12117\nVENDOR_ID_CENTRATA_INC = 12118\nVENDOR_ID_CITY_OF_MESQUITE_TEXAS = 12119\nVENDOR_ID_DEFENSE_SUPPLY_CENTER_RICHMOND_DSCR = 12120\nVENDOR_ID_FASTNET_COMMUNICATIONS = 12121\nVENDOR_ID_HENNY_PENNY_CORP = 12122\nVENDOR_ID_IPROCESS_SOLUTIONS = 12123\nVENDOR_ID_ISILON_STSTEMS = 12124\nVENDOR_ID_MEDIAVIRTUEL = 12125\nVENDOR_ID_MIRAFOR_ASSOCIATES_OY = 12126\nVENDOR_ID_RAMBOLD = 12127\nVENDOR_ID_RODOGU_CONSULTING = 12128\nVENDOR_ID_SAFEWEB_LTDA = 12129\nVENDOR_ID_SCIQUEST_INC = 12130\nVENDOR_ID_SIEGFRIED_HOLDING_AG = 12131\nVENDOR_ID_SIMUTRONICS_CORPORATION = 12132\nVENDOR_ID_TALKING_BLOCKS_INC = 12133\nVENDOR_ID_TRADETRANS_INC = 12134\nVENDOR_ID_UNIQUE_BROADBANK_SYSTEMS = 12135\nVENDOR_ID_UNIVERSIDAD_NACIONAL_DE_SAN_LUIS = 12136\nVENDOR_ID_UNIVERSITE_DE_PARIS_SORBONNE_PARIS_IV = 12137\nVENDOR_ID_LABORATRIO_DE_SISTEMAS_DISTRIBUDOS_CEFET_PR = 12138\nVENDOR_ID_IOWA_OUTDOORS = 12139\nVENDOR_ID_ALCOMA_LTD = 12140\nVENDOR_ID_ALOES = 12141\nVENDOR_ID_BOB_CORBETT_NETWORKS = 12142\nVENDOR_ID_CHRONO_LOGIC = 12143\nVENDOR_ID_CONSUMER_CONTACT = 12144\nVENDOR_ID_CORE_INTEGRATED_TECNOLOGIES_LTD = 12145\nVENDOR_ID_DIALOGSFT_SERVICE = 12146\nVENDOR_ID_DIE_WELTREGIERUNG = 12147\nVENDOR_ID_ELTEK_ENERGY_AS = 12148\nVENDOR_ID_ENALUR_SA = 12149\nVENDOR_ID_FINMATICA_SPA = 12150\nVENDOR_ID_FYRPLUS_AB = 12151\nVENDOR_ID_GURU_LABS_LC = 12152\nVENDOR_ID_HPCINTERACTIVE = 12153\nVENDOR_ID_IKEA_IT_AB = 12154\nVENDOR_ID_INNOVAY_INC = 12155\nVENDOR_ID_JOINT_STOCK_COMPANYSTC_CONTACT = 12156\nVENDOR_ID_KC_MICRO_SPECIALISTS_INC = 12157\nVENDOR_ID_MIKROS_KOSMOS = 12158\nVENDOR_ID_M_TEC_NV = 12159\nVENDOR_ID_NETCOMMPLETE_PTY_LYD = 12160\nVENDOR_ID_NEW_WORLD_TELEPHONE_LTD = 12161\nVENDOR_ID_ORSUS_SOLUTIONS = 12162\nVENDOR_ID_QUEBEBERCOM = 12163\nVENDOR_ID_RINGLING_SCHOOL_OF_ART_AND_DESIGN = 12164\nVENDOR_ID_SANTIN_E_ASSOCIATI_SRL = 12165\nVENDOR_ID_SCANPLUS_GMBH = 12166\nVENDOR_ID_SEQUITUR_SYSTEMS = 12167\nVENDOR_ID_SERVER2000_INTERNET_TECHNOLOGY_GMBH = 12168\nVENDOR_ID_SHENZHEN_MODERN_COMPUTER_MANUFACTER_COLTD = 12169\nVENDOR_ID_SZCOM_BROADBAND_NETWORK_TECHNOLOGY_COLTD = 12170\nVENDOR_ID_TONY_BIBBS = 12171\nVENDOR_ID_TRANSPARENT_SYSTEMS = 12172\nVENDOR_ID_UNICC = 12173\nVENDOR_ID_CONSOLIDATED_FREIGHTWAYS = 12174\nVENDOR_ID_FRONTIER_INTERNET_INC = 12175\nVENDOR_ID_CANON_IT_SOLUTIONS_INC_FORMERLY_SUMITOMO_METAL_SYSTEM_SOLUTIONS_COLTD = 12176\nVENDOR_ID_HENKEL_KGAA = 12177\nVENDOR_ID_3VANET = 12178\nVENDOR_ID_ALACRIS_INC = 12179\nVENDOR_ID_ALI_TECHNOLOGIES_INC = 12180\nVENDOR_ID_ALLEGHENY_ENERGY_GLOBAL_MARKETS = 12181\nVENDOR_ID_ASTRIUM_UK = 12182\nVENDOR_ID_BALDWIN_HACKETT_MEEKS_INC = 12183\nVENDOR_ID_BAMSCO = 12184\nVENDOR_ID_BEN_NEDERLAND_BV = 12185\nVENDOR_ID_COMPAGNON_AG = 12186\nVENDOR_ID_DIRECT_SOLUTIONS = 12187\nVENDOR_ID_GBASE_COMMUNICATIONS = 12188\nVENDOR_ID_HOLOPLEX_TECHNOLOGIES_INC = 12189\nVENDOR_ID_IN_MEDIAS_RES = 12190\nVENDOR_ID_INS_SURE_SERVICES_LIMITED = 12191\nVENDOR_ID_IRON_HILL_TECHNOLOGY = 12192\nVENDOR_ID_LEAPSTONE_SYSTEMS_INC = 12193\nVENDOR_ID_MSS_COMMUNICATIONS_DESIGN_GMBH = 12194\nVENDOR_ID_NOICOM_SPA = 12195\nVENDOR_ID_ONE4NET_GMBH = 12196\nVENDOR_ID_PROVISIONSOFT = 12197\nVENDOR_ID_RINET = 12198\nVENDOR_ID_SAGE_SRL = 12199\nVENDOR_ID_SENECA_GROEP_BV = 12200\nVENDOR_ID_UNIVERSITY_HEALTH_NETWORK = 12201\nVENDOR_ID_UP3I = 12202\nVENDOR_ID_VTT_INFORMATION_TECHNOLOGY = 12203\nVENDOR_ID_DEVONIT = 12204\nVENDOR_ID_ALLIANZ_IRELAND_PLC = 12205\nVENDOR_ID_QINETIQ_LTD = 12206\nVENDOR_ID_ACME_SOLUTIONS = 12207\nVENDOR_ID_ACTINA_AG = 12208\nVENDOR_ID_ASTOR_PROMOCJA_POLAND = 12209\nVENDOR_ID_BAUER_VERLAGSGRUPPE = 12210\nVENDOR_ID_BIOGEM = 12211\nVENDOR_ID_BLUEHAVEN_SERVICES_LTD = 12212\nVENDOR_ID_CAMIS_INC = 12213\nVENDOR_ID_COVENANT_RETIREMENT_COMMUNITIES = 12214\nVENDOR_ID_CUETS = 12215\nVENDOR_ID_DGT_LAB = 12216\nVENDOR_ID_ECOLE_POLYTECHNIQUE_DE_MONTREAL = 12217\nVENDOR_ID_GLCKERT_MACHELETT_PARTNER = 12218\nVENDOR_ID_HAMILTON_AND_SULLIVAN_LTD = 12219\nVENDOR_ID_INSTITUTE_OF_ENVIRONMENT_AND_DEVELOPMENT = 12220\nVENDOR_ID_ITWM = 12221\nVENDOR_ID_KAWATETSU_SYSTEMS_INC = 12222\nVENDOR_ID_KINETICS_FLUID_SYSTEMS = 12223\nVENDOR_ID_KNIGHTNET = 12224\nVENDOR_ID_KOREA_EMBEDDED_LINUX_LABORATORY = 12225\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_FESTKOERPERFORSCHUNG = 12226\nVENDOR_ID_NAUMEN = 12227\nVENDOR_ID_NIEDERMAYER_SYSTEMS = 12228\nVENDOR_ID_NIRVANA_RESEARCH = 12229\nVENDOR_ID_ODAHODADE = 12230\nVENDOR_ID_OPENADVICE_IT_SERVICES_GMBH = 12231\nVENDOR_ID_ORDER_N_LTD = 12232\nVENDOR_ID_OZ_COMMUNICATIONS_INC = 12233\nVENDOR_ID_PROGUYDK = 12234\nVENDOR_ID_ROANOKE_COLLEGE = 12235\nVENDOR_ID_SENA_TECHNOLOGIES_INC = 12236\nVENDOR_ID_SILOGIX_2 = 12237\nVENDOR_ID_SPUMONI = 12238\nVENDOR_ID_SYMSOFT_AB = 12239\nVENDOR_ID_SYSTEM_SOLUTIONS = 12240\nVENDOR_ID_SZKOLA_GLOWNA_HANDLOWA = 12241\nVENDOR_ID_TEAMNET_GMBH = 12242\nVENDOR_ID_VISLINK_PLC = 12243\nVENDOR_ID_CELESTICA_CORPORATION = 12244\nVENDOR_ID_ELVIN = 12245\nVENDOR_ID_SCOTTISH_QUALIFICATIONS_AUTHORITY_2 = 12246\nVENDOR_ID_IDP_2 = 12247\nVENDOR_ID_AVAILIX_SA = 12248\nVENDOR_ID_ESCOLA_UNIVERSITARIA_POLITCNICA_DE_MANRESA = 12249\nVENDOR_ID_ALOSYS_SPA = 12250\nVENDOR_ID_AVALON_NET_LTD = 12251\nVENDOR_ID_BAKU_CONSTRUCTION_OFFICE = 12252\nVENDOR_ID_CN_SOLUTIONS_LLC = 12253\nVENDOR_ID_COMPUBAHN_INC = 12254\nVENDOR_ID_CONNECTICUT_TELEPHONE = 12255\nVENDOR_ID_COVERE = 12256\nVENDOR_ID_ESCOSOFT_TECHNOLOGIES = 12257\nVENDOR_ID_EUROPEAN_TECHNOLOGY_CONSULTANTS = 12258\nVENDOR_ID_FORUM_DES_IMAGES = 12259\nVENDOR_ID_GLOBAL_TELECOM_INC = 12260\nVENDOR_ID_GLOBALCENTER = 12261\nVENDOR_ID_GNOSYS_SARL = 12262\nVENDOR_ID_HDFCBANK = 12263\nVENDOR_ID_IMAGINE_IT = 12264\nVENDOR_ID_INDRAWEB = 12265\nVENDOR_ID_IRCD = 12266\nVENDOR_ID_JOHNS_HOPKINS_APPLIED_PHYSICS_LABORATORY = 12267\nVENDOR_ID_LIBERTY_COMMUNICATION_SERVICES_INC = 12268\nVENDOR_ID_MAYBAUM = 12269\nVENDOR_ID_NOVAR = 12270\nVENDOR_ID_PRUTHVI_SOFT = 12271\nVENDOR_ID_SACRED_BYTES = 12272\nVENDOR_ID_STATE_OF_MINNESOTA = 12273\nVENDOR_ID_UNIVERSITE_JOSEPH_FOURIER_GRENOBLE_1 = 12274\nVENDOR_ID_UNIVERSITY_OF_SOUTHAMPTON = 12275\nVENDOR_ID_F5_NETWORKS_INC = 12276\nVENDOR_ID_VARYSYS_TECHNOLOGIES_GMBH_CO_KG = 12277\nVENDOR_ID_VTX_TECHNOLOGIE = 12278\nVENDOR_ID_WARP_LINK_GMBH = 12279\nVENDOR_ID_WESTERN_INSTITUTE_OF_TECHNOLOGY_AT_TARANAKI = 12280\nVENDOR_ID_YUMEMI_INC = 12281\nVENDOR_ID_CREW_COLTD = 12282\nVENDOR_ID_PLANET_INTERNET_COMMERCE_GMBH = 12283\nVENDOR_ID_IMAX_NETWORKS_SHENZHEN_LTD = 12284\nVENDOR_ID_ACCLAMATION_SYSTEMS_INC = 12285\nVENDOR_ID_ISSAQUA = 12286\nVENDOR_ID_GLOBECOMM_SYSTEMS_INC = 12287\nVENDOR_ID_ANDERN_RESEARCH_LABS = 12288\nVENDOR_ID_BEEWEEB_SRL = 12289\nVENDOR_ID_CELESTICA_INTERNATIONAL_INC = 12290\nVENDOR_ID_CELLULAR_SPECIALTIES_INC = 12291\nVENDOR_ID_CINDERCAT = 12292\nVENDOR_ID_DIGITAL_INSIGHT = 12293\nVENDOR_ID_EMBLAZE_SYSTEMS = 12294\nVENDOR_ID_ERCIST = 12295\nVENDOR_ID_IDDEX_CORP = 12296\nVENDOR_ID_INDEPENDENT_STORAGE_CORPORATION = 12297\nVENDOR_ID_KINGE_CO_LIMITED = 12298\nVENDOR_ID_KTG_INC = 12299\nVENDOR_ID_MENNONITENET = 12300\nVENDOR_ID_MOUNTAIN_VISIONS_P_L = 12301\nVENDOR_ID_NETIKOS_SPA = 12302\nVENDOR_ID_NEW_BRIDGES = 12303\nVENDOR_ID_NEXT_ADVISORS = 12304\nVENDOR_ID_PETRASYNC_INC = 12305\nVENDOR_ID_PREWORKX_PTY_LTD = 12306\nVENDOR_ID_RED_WAGON_SOLUTIONS_INCORPORATED = 12307\nVENDOR_ID_SECLAB = 12308\nVENDOR_ID_SELF_INDULGENCEORG = 12309\nVENDOR_ID_SIMPLE_ACCESS_INC = 12310\nVENDOR_ID_STRATEGIC_SERVICE_ALLIANCE = 12311\nVENDOR_ID_TAIKA_TECHNOLOGIES_LTD = 12312\nVENDOR_ID_TATTERSALLS = 12313\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_CAMPINA_GRANDE = 12314\nVENDOR_ID_WORLDWITHOUTWIRECOM = 12315\nVENDOR_ID_CHUO_ELECTROPLATERS_COOPERATIVE_ASSCOSIATION = 12316\nVENDOR_ID_GL_TRADE = 12317\nVENDOR_ID_LOOMIS_CHAFFEE_SCHOOL = 12318\nVENDOR_ID_HEIWAKOGYO = 12319\nVENDOR_ID_ASPEN_SYSTEMS_INC = 12320\nVENDOR_ID_BURE_EQUITY = 12321\nVENDOR_ID_DELTA_INFORMATION_COMMUNICATION = 12322\nVENDOR_ID_DEPARTMENT_OF_COMPUTER_SCIENCE_INDIANA_UNIVERSITY = 12323\nVENDOR_ID_DEUTSCHE_LEBENS_RETTUNGS_GESELLSCHAFT_EV = 12324\nVENDOR_ID_FRAUNHOFER_FOKUS = 12325\nVENDOR_ID_HERMES_PRECISA_AUSTRALIA = 12326\nVENDOR_ID_KJSANDERS_PROFESSIONAL_CONSULTING_ENGINEERS = 12327\nVENDOR_ID_LAWSIT_PTY_LTD = 12328\nVENDOR_ID_PANASONIC_OWL = 12329\nVENDOR_ID_PLAN42_GMBH = 12330\nVENDOR_ID_PRESTO_PTY_LTD = 12331\nVENDOR_ID_PRIMUS_TELECOMMUNICATIONS_GROUP_INC = 12332\nVENDOR_ID_TE_TM_TIIMI = 12333\nVENDOR_ID_UNIVERSAL_COMMUNICATION_PLATFORM_GMBH = 12334\nVENDOR_ID_UNIVERSITY_OF_YORK = 12335\nVENDOR_ID_BUYWAYS = 12336\nVENDOR_ID_BROAD_BAND_NETWORK_CENTER_OF_TSINGHUA_UNIVERSITY = 12337\nVENDOR_ID_NETCORE_NETWORK_TECHNOLOGY = 12338\nVENDOR_ID_EMPOWERED_NETWORKS = 12339\nVENDOR_ID_NET_FACILITIES_GROUP = 12340\nVENDOR_ID_NOVOMODO_INC = 12341\nVENDOR_ID_PIVIA_INC = 12342\nVENDOR_ID_SK_ACCESS_DEVICES = 12343\nVENDOR_ID_TEROS = 12344\nVENDOR_ID_VWB_GROUP = 12345\nVENDOR_ID_HAGERO = 12346\nVENDOR_ID_AMALGAMATED_SYSTEMS_LLC = 12347\nVENDOR_ID_AMERICAN_RADIO_RELAY_LEAGUE = 12348\nVENDOR_ID_AT_CONSULTANCY = 12349\nVENDOR_ID_ATMEL_HELLAS_SAN = 12350\nVENDOR_ID_BARKING_COW = 12351\nVENDOR_ID_CENTRAL_DATA_SERVICES = 12352\nVENDOR_ID_CLARIDEN_BANK = 12353\nVENDOR_ID_COLBOURN_ASSOCIATES_LTD = 12354\nVENDOR_ID_CTI_PET_SYSTEMS_INC = 12355\nVENDOR_ID_FORTINET_INC = 12356\nVENDOR_ID_GENERIC_MEDIA_INC = 12357\nVENDOR_ID_IMAGEMEDICAL = 12358\nVENDOR_ID_INDIGO_TANGO_LTD = 12359\nVENDOR_ID_INSTITUTO_ESPAOL_DE_INFORMTICA_Y_DERECHO = 12360\nVENDOR_ID_KGEXCOM_CO_LTD = 12361\nVENDOR_ID_LOMBARD_ODIER_CIE = 12362\nVENDOR_ID_NET_LABS_SYSTEMHAUS_GMBH = 12363\nVENDOR_ID_NEWBREAK_LLC = 12364\nVENDOR_ID_NTT_COMWARE_CORPORATION = 12365\nVENDOR_ID_PHARMACIA_CORPORATION = 12366\nVENDOR_ID_QUICK_CORP = 12367\nVENDOR_ID_RAESEMANN_ENTERPRISES_INC = 12368\nVENDOR_ID_RHRS_STAHL_UND_METALLBAU_GMBH_COKG = 12369\nVENDOR_ID_SARD_COMMUNICATIONS_LTD = 12370\nVENDOR_ID_SCRUTINY_INC = 12371\nVENDOR_ID_TERACLOUD_CORPORATION = 12372\nVENDOR_ID_TETRAPOD_COMMUNICATIONS_INC = 12373\nVENDOR_ID_TEXAS_STATE_CREDIT_COMPANY = 12374\nVENDOR_ID_UNIVERSAL_ACCESS_INC = 12375\nVENDOR_ID_UNIVERSITY_OF_TECHNOLOGY_DRESDEN_DEPARTMENT_OF_COMPUTER_SCIENCE = 12376\nVENDOR_ID_VIVENDI_TELECOM_HUNGARY = 12377\nVENDOR_ID_WELLTHOT_INC = 12378\nVENDOR_ID_WINGRA_TECHNOLOGIES = 12379\nVENDOR_ID_WIWO_SUPPORT = 12380\nVENDOR_ID_WORLDCOM_ASIA_PACIFIC = 12381\nVENDOR_ID_UNIHUB_GLOBAL_NETWORK = 12382\nVENDOR_ID_CHRYSALIS_ITS = 12383\nVENDOR_ID_COMMISSARIAT_A_LENERGIE_ATOMIQUE = 12384\nVENDOR_ID_COMMON_VOICES = 12385\nVENDOR_ID_INTEQ_CORPORATION = 12386\nVENDOR_ID_IPDIRECTIONS = 12387\nVENDOR_ID_JUSTTHENET_LLC = 12388\nVENDOR_ID_MACSDESIGN_STUDIO = 12389\nVENDOR_ID_MICROCELL_TELECOMMUNICATIONS_INC = 12390\nVENDOR_ID_UNIVERSITEIT_UTRECHT = 12391\nVENDOR_ID_WELCAT_INC = 12392\nVENDOR_ID_ACTIVE_HOTELS = 12393\nVENDOR_ID_ALVARION_LTD = 12394\nVENDOR_ID_CENTRO_DE_INFORMATICA_DA_UNIVERSIDADE_DE_COIMBRA = 12395\nVENDOR_ID_CINTECH_SOLUTIONS = 12396\nVENDOR_ID_GESELLSCHAFT_FUER_RAUMBILDSYSTEME_MBH = 12397\nVENDOR_ID_E_O_OSPEDALI_GALLIERA = 12398\nVENDOR_ID_FIX_EXPRESS_CORP = 12399\nVENDOR_ID_GATEA_LTD = 12400\nVENDOR_ID_GERMINUS_SOLUTIONS = 12401\nVENDOR_ID_IDLSPM = 12402\nVENDOR_ID_IMEDIA_SEMICONDUCTOR_CORP = 12403\nVENDOR_ID_INDIANGUIDECOM = 12404\nVENDOR_ID_MATRICS_INC = 12405\nVENDOR_ID_MEDINET_IDG_SA = 12406\nVENDOR_ID_NICESHIPPING_TECHNOLOGY_CORPORATION = 12407\nVENDOR_ID_NOORDELIJKE_HOGESCHOOL_LEEUWARDEN = 12408\nVENDOR_ID_OBJECTIVITY_INC = 12409\nVENDOR_ID_OPS = 12410\nVENDOR_ID_PLASMEDIA = 12411\nVENDOR_ID_PORTBRIDGE_INTERNET = 12412\nVENDOR_ID_RADIO_FREQUENCY_SYSTEMS = 12413\nVENDOR_ID_SCRYPTO_SYSTEMS = 12414\nVENDOR_ID_SINNERSCHRADER_AG = 12415\nVENDOR_ID_SUMMIT_PLACE_ALES = 12416\nVENDOR_ID_TATA_INFOTECH_LIMITED = 12417\nVENDOR_ID_THALES = 12418\nVENDOR_ID_YAMAHA_CORPORATION_2 = 12419\nVENDOR_ID_YOKOGAWA_BLUE_STAR_INDIA_LTD = 12420\nVENDOR_ID_JWAY_GROUP_INC = 12421\nVENDOR_ID_THE_CO_OPERATORS = 12422\nVENDOR_ID_CONCORD_TELEPHONE_COMPANY = 12423\nVENDOR_ID_CONGREGATION_OF_THE_SACRED_HEARTS = 12424\nVENDOR_ID_CONLINGUAL = 12425\nVENDOR_ID_E_CONTROL_SYSTEMS = 12426\nVENDOR_ID_EQUINOX_ENGINEERING_LTD = 12427\nVENDOR_ID_GENIE_INFORMATION_CO = 12428\nVENDOR_ID_INTERACT_INCSOFTWARE_SYSTEMS = 12429\nVENDOR_ID_I_SILVER = 12430\nVENDOR_ID_IXUS_TECHNOLOGIEDIENSTLEISTUNGEN_GMBH = 12431\nVENDOR_ID_JIPPI_GROUP_OYJ = 12432\nVENDOR_ID_JOHN_SHEAHAN_CO = 12433\nVENDOR_ID_KNOX_COLLEGE = 12434\nVENDOR_ID_M2_SYSTEMS_CORPORATION = 12435\nVENDOR_ID_NAVOSHA_INC = 12436\nVENDOR_ID_NEXT_LEVEL_DESIGN_INC = 12437\nVENDOR_ID_PARADIGMONE_PTY_LTD = 12438\nVENDOR_ID_RITZLMAYR_CONSULTING = 12439\nVENDOR_ID_SECURENET_LTD = 12440\nVENDOR_ID_SELECTED_HOSTING = 12441\nVENDOR_ID_TECHGEMINI_INC = 12442\nVENDOR_ID_WWWTRAFFICSHAPERCOM = 12443\nVENDOR_ID_MANGOLUTION_INC = 12444\nVENDOR_ID_TERADYNE = 12445\nVENDOR_ID_UNPHU = 12446\nVENDOR_ID_YC_CONSULTANT = 12447\nVENDOR_ID_7TH_VISION_BILLING_COMPANY = 12448\nVENDOR_ID_AUDIOFON_CHAT_PLAY_GMBH = 12449\nVENDOR_ID_AUSTRALIAN_DEPARTMENT_OF_EMPLOYMENT_AND_WORKPLACE_RELATIONS = 12450\nVENDOR_ID_COMMUNICATION_CONCEPT_GMBH = 12451\nVENDOR_ID_INTRACONNECT_GMBH = 12452\nVENDOR_ID_ALASKA_POWER_TELEPHONE = 12453\nVENDOR_ID_ARIA_SOLUTIONS_INC = 12454\nVENDOR_ID_CACO = 12455\nVENDOR_ID_CERTISUR_SA = 12456\nVENDOR_ID_CHUNGHWA_TELECOM_LABORATORIES = 12457\nVENDOR_ID_GRANIT_SOLUTIONS_LLC = 12458\nVENDOR_ID_GLOBAL_NAME_REGISTRY_LIMITED = 12459\nVENDOR_ID_ISG_CONSULTORIA_E_INFORMATICA = 12460\nVENDOR_ID_JAMM = 12461\nVENDOR_ID_LINUXFABRIK_GMBH = 12462\nVENDOR_ID_MENDOSUS = 12463\nVENDOR_ID_MICRODOWELL_SPA = 12464\nVENDOR_ID_MYKITCHENTABLENET = 12465\nVENDOR_ID_NETFECTIVE_TECHNOLOGY = 12466\nVENDOR_ID_ONESECURE_INC = 12467\nVENDOR_ID_PIXION_INC = 12468\nVENDOR_ID_QAC_QUALITY_ASSURANCE_CONSULT_LTDA = 12469\nVENDOR_ID_RECHBERGER = 12470\nVENDOR_ID_ROCKET_SOFTWARE_INC = 12471\nVENDOR_ID_SCAPEVISION_AG = 12472\nVENDOR_ID_UNILANG = 12473\nVENDOR_ID_WAC = 12474\nVENDOR_ID_WEBMOTION_INC = 12475\nVENDOR_ID_CARMODY_CONSULTING_INC = 12476\nVENDOR_ID_CHRISTIAN_MICHELSEN_RESEARCH_AS = 12477\nVENDOR_ID_MARYLAND_DEPARTMENT_OF_TRANSPORTATION = 12478\nVENDOR_ID_OPENDNS_CORP = 12479\nVENDOR_ID_ALLIED_WORLDWIDE = 12480\nVENDOR_ID_ALTRICK = 12481\nVENDOR_ID_DEPARTMENTO_TCNICO = 12482\nVENDOR_ID_EBEL = 12483\nVENDOR_ID_BINARY_SOLUTIONS = 12484\nVENDOR_ID_WUMAG_GMBH_WERK_EBERSBACH = 12485\nVENDOR_ID_ACCESS_GRID = 12486\nVENDOR_ID_ADAM_COMMUNICATION_SYSTEMS_INTERNATIONAL = 12487\nVENDOR_ID_ANKOR_SYSTEMS = 12488\nVENDOR_ID_ARIZONA_MAIL_ORDER_CO_INC = 12489\nVENDOR_ID_BECKSTEIN_SYSTEMS = 12490\nVENDOR_ID_BONDDESK = 12491\nVENDOR_ID_CAMERON_NET = 12492\nVENDOR_ID_ELIST_EXPRESS_LLC = 12493\nVENDOR_ID_ENIGMATEC_GMBH = 12494\nVENDOR_ID_ESKATA_SYSTEMS_INC = 12495\nVENDOR_ID_GOSBC = 12496\nVENDOR_ID_HOLBORN_COLLEG = 12497\nVENDOR_ID_INFOFIEND = 12498\nVENDOR_ID_IPB = 12499\nVENDOR_ID_ISRO_SATELLITE_CENTRE = 12500\nVENDOR_ID_KEYSOFTENTERLLECT = 12501\nVENDOR_ID_METZEMIX = 12502\nVENDOR_ID_MYUGLYFACE_COMPUTING = 12503\nVENDOR_ID_ONLIGHT = 12504\nVENDOR_ID_PHOTONIC_BRIDGES_INC = 12505\nVENDOR_ID_PINPOINT_NETWORKS_INC = 12506\nVENDOR_ID_PROFIS_SA = 12507\nVENDOR_ID_SCARDINE_LOPES_LTDA = 12508\nVENDOR_ID_SECUREONE = 12509\nVENDOR_ID_SLACKWORKS = 12510\nVENDOR_ID_TELESUDESTE_CELULAR = 12511\nVENDOR_ID_UNIVERSITY_OF_UTAH_COLLEGE_OF_MINES_EARTH_SCIENCES = 12512\nVENDOR_ID_XITEMEDIA_IS_VOF = 12513\nVENDOR_ID_ABBOTT_LABORATORIES = 12514\nVENDOR_ID_ORGA_KARTENSYSTEME_GMBH = 12515\nVENDOR_ID_ARL_HOMECOMMUNICATIONS_SDN_BHD = 12516\nVENDOR_ID_MAN_NUTZFAHRZEUGE_AG = 12517\nVENDOR_ID_UNIVERSITY_OF_MAINZ = 12518\nVENDOR_ID_ACTIVA3 = 12519\nVENDOR_ID_ASYRES = 12520\nVENDOR_ID_AVACUE_LTD = 12521\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_SAN_BERNARDINO = 12522\nVENDOR_ID_CREDIT_UNION_CENTRAL_OF_MANITOBA = 12523\nVENDOR_ID_DIB = 12524\nVENDOR_ID_ECHOSTAR_SOLUTIONS = 12525\nVENDOR_ID_GROUPE_EYROLLES = 12526\nVENDOR_ID_HOPF_ELEKTRONIK_GMBH = 12527\nVENDOR_ID_PURESIGHT_LTD = 12528\nVENDOR_ID_IDG_COMMUNICATIONS_LTD = 12529\nVENDOR_ID_INFORMATIKDIENSTE_ETH_ZUERICH = 12530\nVENDOR_ID_JAMES_K_FEGAN_CONSULTING = 12531\nVENDOR_ID_NEOTERIS_INC = 12532\nVENDOR_ID_NOX_COLTD = 12533\nVENDOR_ID_NZPHONE_S_A = 12534\nVENDOR_ID_SCHMIDT_CO_HK_LTD = 12535\nVENDOR_ID_SIMSAM_CONSULTING_LIMITED = 12536\nVENDOR_ID_SPIDER_EYE_STUDIOS = 12537\nVENDOR_ID_TELKOM = 12538\nVENDOR_ID_THE_PALANTIR_CORPORATION = 12539\nVENDOR_ID_T_SYSTEMS_INTERNATIONAL = 12540\nVENDOR_ID_UNIVERSIDAD_DE_CARABOBO = 12541\nVENDOR_ID_UNIZETO_SP_Z_OO = 12542\nVENDOR_ID_VIRGIL_BV = 12543\nVENDOR_ID_AEGON_NEDERLAND_NV = 12544\nVENDOR_ID_IS_INDUSTRIAL_SERVICES_AG = 12545\nVENDOR_ID_VERYSMARTPEOPLE_INC = 12546\nVENDOR_ID_PRINCIPLE_INC = 12547\nVENDOR_ID_HSH_NORDBANK_AG = 12548\nVENDOR_ID_AIR_NAVIGATION_SERVICES_ANS_OF_THE_CZECH_REPUBLIC = 12549\nVENDOR_ID_ASSOCIATION_FOR_MULTIDISCIPLINE_EDUCATION_IN_THE_HEALTH_SCIENCES = 12550\nVENDOR_ID_CET = 12551\nVENDOR_ID_CORPORATION_OF_BALCULTHA = 12552\nVENDOR_ID_DISPUUT_METEOOR = 12553\nVENDOR_ID_ECCLESIASNET = 12554\nVENDOR_ID_EDURO_TECHNOLOGIES_INC = 12555\nVENDOR_ID_EMSOL_LLC = 12556\nVENDOR_ID_GURUMEDITATIONSORG = 12557\nVENDOR_ID_ICOSERVE_INFORMATION_TECHNOLOGIES_GMBH = 12558\nVENDOR_ID_INRIA = 12559\nVENDOR_ID_INTEREPOCH_TECHNOLOGY_INC = 12560\nVENDOR_ID_KHONRAAD_SYSTEMS_ENGINEERING_BV = 12561\nVENDOR_ID_MARCOM_DEPARTMENT_SHANGHAI_MITAC_RESEARCH_CO_LTD = 12562\nVENDOR_ID_MEGATEL_GMBH = 12563\nVENDOR_ID_NATVERKET = 12564\nVENDOR_ID_NAVAHO_NETWORKS_INC = 12565\nVENDOR_ID_NIKOIL_INVESTMENT_BANKING_GROUP_JOINT_STOCK_BANK = 12566\nVENDOR_ID_ONE5_CORPORATION = 12567\nVENDOR_ID_RANGER_COMPUTERS = 12568\nVENDOR_ID_RIGEL_CORPORATION = 12569\nVENDOR_ID_SICE_SRL = 12570\nVENDOR_ID_SYMNETICS_HOLDINGS = 12571\nVENDOR_ID_TCD_ENTERPRISE_INC = 12572\nVENDOR_ID_TELONOR_BUSINESS_SOLUTIONS = 12573\nVENDOR_ID_TMH_THE_MARILYN_HOUSE_SRL = 12574\nVENDOR_ID_UIC = 12575\nVENDOR_ID_UNIDIRECT = 12576\nVENDOR_ID_UNIQUE_INTERACTIVE = 12577\nVENDOR_ID_VIOLA_SYSTEMS = 12578\nVENDOR_ID_ZIGZAG_INTERNET_SERVICE_PROVIDER = 12579\nVENDOR_ID_ZIRION_NETWORKS_INC = 12580\nVENDOR_ID_NARUHODO_SOLUTIONS = 12581\nVENDOR_ID_PRIMERICA_FINANCIAL_SERVICES = 12582\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_IRVINE_INFORMATION_AND_COMPUTER_SCIENCE_DEPARTMENT = 12583\nVENDOR_ID_BUTLER = 12584\nVENDOR_ID_ALSTOM_HOLDINGS = 12585\nVENDOR_ID_MANONO_SOFTWARE_INC_FORMERLY_APIATECH_INFORMATION_TECHNOLOGIES_INC = 12586\nVENDOR_ID_430AM = 12587\nVENDOR_ID_BLUEICE_RESEARCH_AB = 12588\nVENDOR_ID_CELESTIAL_SOFTWARE_LLC = 12589\nVENDOR_ID_CHANGI_INTERNATIONAL_AIRPORT_SERVICES_PTE_LTD = 12590\nVENDOR_ID_CORUS_GROUP_PLC = 12591\nVENDOR_ID_DYCEC = 12592\nVENDOR_ID_EKL_SOLUTIONS_LLC = 12593\nVENDOR_ID_ELMA_INGENIERIE_INFORMATIQUE = 12594\nVENDOR_ID_EMS_ENTERPRISE_MESSAGING_SOLUTIONS_GMBH = 12595\nVENDOR_ID_JOUVE_SA = 12596\nVENDOR_ID_LIGHTWAVE_COMMUNICATIONS = 12597\nVENDOR_ID_NET_VISTA = 12598\nVENDOR_ID_ORDYN_ELECTRONIC_SYSTEMS_PRIVATE_LIMITED = 12599\nVENDOR_ID_PERAMON_TECHNOLOGY_LTD = 12600\nVENDOR_ID_REED_COLLEGE = 12601\nVENDOR_ID_ROONETWORKS_INC = 12602\nVENDOR_ID_SHADOWSUPPORT_INC = 12603\nVENDOR_ID_SPATIAL_WIRELESS = 12604\nVENDOR_ID_SHOM = 12605\nVENDOR_ID_MBB_GELMA_GMBH = 12606\nVENDOR_ID_ADVANCE_FIBER_OPTICS_INC = 12607\nVENDOR_ID_AHAPALA = 12608\nVENDOR_ID_ASCELLA_TECHNOLOGIES = 12609\nVENDOR_ID_ASPEN_BUSINESS_LOGIC_COMPUTING = 12610\nVENDOR_ID_ATLANTIQUE_SOFTWARE = 12611\nVENDOR_ID_BARCO_BCI = 12612\nVENDOR_ID_BROADJUMP_2 = 12613\nVENDOR_ID_CIRBA_INC = 12614\nVENDOR_ID_CRAIG_F_DONLAN = 12615\nVENDOR_ID_DATACORP = 12616\nVENDOR_ID_ESPEDAIR_SYSTEMS = 12617\nVENDOR_ID_EZHI_TECHNOLOGIES_INC = 12618\nVENDOR_ID_UFRGS = 12619\nVENDOR_ID_FUTURE_SYSTEM_CONSULTING_CORP = 12620\nVENDOR_ID_GE_MEDICAL_SYSTEM_INFORMATION_TECHNOLOGIES_SW_GMBH_COKG = 12621\nVENDOR_ID_DEVICESCAPE_SOFTWARE_INC = 12622\nVENDOR_ID_IRCI_SA = 12623\nVENDOR_ID_KENNESAW_STATE_UNIVERSITY = 12624\nVENDOR_ID_LABBOOK_INC = 12625\nVENDOR_ID_MINISTRY_OF_EDUCATION_SINGAPORE = 12626\nVENDOR_ID_MORGAN_STANLEY_SVSA = 12627\nVENDOR_ID_MOVIELINK = 12628\nVENDOR_ID_MSE = 12629\nVENDOR_ID_M_SOLUTIONS_LTD = 12630\nVENDOR_ID_NETS_AG = 12631\nVENDOR_ID_OBJEKT_MANAGEMENT = 12632\nVENDOR_ID_OCEANBAY_INTERNET_SERVICES = 12633\nVENDOR_ID_PICMG = 12634\nVENDOR_ID_REDSONIC_INC = 12635\nVENDOR_ID_SCRIPPS_COLLEGE = 12636\nVENDOR_ID_SHAZAM_ENTERTAINMENTS_LTD = 12637\nVENDOR_ID_SIENNAX = 12638\nVENDOR_ID_SUPERCABLE = 12639\nVENDOR_ID_THE_HOUSTON_HARRIS_COUNTY_IMMUNIZATION_REGISTRY = 12640\nVENDOR_ID_TRIBUNAL_REGIONAL_DO_TRABALHO_DA_10_REGIO = 12641\nVENDOR_ID_UNIVERSITY_OF_SOUTHERN_MISSISSIPPI = 12642\nVENDOR_ID_UTI_SYSTEMS_SA = 12643\nVENDOR_ID_VISAA = 12644\nVENDOR_ID_VODAFONE_INFORMATION_TECHNOLOGY_AND_TECHNOLOGY_MANAGEMENT = 12645\nVENDOR_ID_WIDEBAND_CORPORATION = 12646\nVENDOR_ID_LULEA_UNIVERSITY_OF_TECHNOLOGY = 12647\nVENDOR_ID_SYSTEK_INFORMATION_TECHNOLOGY_LTD = 12648\nVENDOR_ID_UTFORS_AB = 12649\nVENDOR_ID_ADMINISTRATIVE_MANAGEMENT_GROUP_INC = 12650\nVENDOR_ID_ALASKA_DEPARTMENT_OF_LABOR = 12651\nVENDOR_ID_AMINOR = 12652\nVENDOR_ID_ARMITEL = 12653\nVENDOR_ID_ATH_SYSTEM = 12654\nVENDOR_ID_AUTHENTIDATE_INTERNATIONAL_AG = 12655\nVENDOR_ID_AVEST_PLC = 12656\nVENDOR_ID_BIRM_CONSULTING = 12657\nVENDOR_ID_BLUE_STAR_SUSTAINABLE_TECHNOLOGIES_INC = 12658\nVENDOR_ID_BRAZIER_WELCH = 12659\nVENDOR_ID_CACHEWARE_INC = 12660\nVENDOR_ID_CAROLINE_CHISHOLM_CATHOLIC_COLLEGE = 12661\nVENDOR_ID_CHM_INC = 12662\nVENDOR_ID_DOCFI = 12663\nVENDOR_ID_DOTCALL = 12664\nVENDOR_ID_ENFOTEC_INC = 12665\nVENDOR_ID_ETAGON = 12666\nVENDOR_ID_ETERE = 12667\nVENDOR_ID_GARUDA_NETWORKS = 12668\nVENDOR_ID_HANENKAMPCOM = 12669\nVENDOR_ID_INDIGO_DEVELOPMENT_CORP = 12670\nVENDOR_ID_INSTITUT_FUER_SYSTEM_MANAGEMENT = 12671\nVENDOR_ID_ISMOBILE_AB = 12672\nVENDOR_ID_ITELCO_COMMUNICATIONS_INC = 12673\nVENDOR_ID_KAON_INTERACTIVE_INC = 12674\nVENDOR_ID_LINUX_UNLIMITED_LLC = 12675\nVENDOR_ID_LOGICAL = 12676\nVENDOR_ID_MACKEEG_INC = 12677\nVENDOR_ID_NANKAI_UNIVERSITY_CHUANGYUAN_INFORMATION_TECHNOLOGIES_CO_LTD = 12678\nVENDOR_ID_NEXTFUTURE = 12679\nVENDOR_ID_OBJECTIVE_DYNAMICS_LTD = 12680\nVENDOR_ID_PARKER_ABEX_NWL = 12681\nVENDOR_ID_PC_INFO_SOLUTIONS = 12682\nVENDOR_ID_PRECACHE_INC = 12683\nVENDOR_ID_QUANTUM_SOLUTIONS = 12684\nVENDOR_ID_SCS_ENGINEERS = 12685\nVENDOR_ID_SDS_GMBH = 12686\nVENDOR_ID_SILICONLOGIC_LTD = 12687\nVENDOR_ID_SOHUCOM_INC = 12688\nVENDOR_ID_SUPERONLINE_INTERNATIONAL_ONLINE_INFORMATION_AND_COMMUNICATION_SERVICES_INC = 12689\nVENDOR_ID_TECHNOLOGY_LEADERS_LLC = 12690\nVENDOR_ID_TERILOGY_CO_LTD = 12691\nVENDOR_ID_THINK4YOU_IT_SERVICES_GMBH = 12692\nVENDOR_ID_TIKOM_TIROL_KOMMUNIKATION = 12693\nVENDOR_ID_UNIVERSIT_DE_MARNE_LA_VALLE = 12694\nVENDOR_ID_VS_VISION_SYSTEMS = 12695\nVENDOR_ID_XAVIER_COLLEGE = 12696\nVENDOR_ID_YOUNGHOMECOM_INC = 12697\nVENDOR_ID_AFRANET_CO_LTD = 12698\nVENDOR_ID_MOY_CORPORATION = 12699\nVENDOR_ID_UNC_HEALTH_CARE = 12700\nVENDOR_ID_TUXNOLOGY = 12701\nVENDOR_ID_724_SOLUTIONS_INC = 12702\nVENDOR_ID_ACELET = 12703\nVENDOR_ID_ALLTEL_CORPORATION = 12704\nVENDOR_ID_BAX_GLOBAL = 12705\nVENDOR_ID_BYTERAGE_INC = 12706\nVENDOR_ID_CONNECT_SYSTEMS_INC = 12707\nVENDOR_ID_CYBERLANCET_CORPORATION = 12708\nVENDOR_ID_DAVIES_INC = 12709\nVENDOR_ID_DEDICATED_HOSTING_SERVICES = 12710\nVENDOR_ID_EXPERIAN_LIMITED = 12711\nVENDOR_ID_FOUR_CORNERS_TELECOMMUNICATIONS_CORP = 12712\nVENDOR_ID_HIGHSPEED_SURFING = 12713\nVENDOR_ID_IKOSAEDER = 12714\nVENDOR_ID_INDIAN_INSTITUTE_OF_TECHNOLOGY_BOMBAY = 12715\nVENDOR_ID_INFOLOGIGRUPPEN_NORR_AB = 12716\nVENDOR_ID_INTERSAN_INC = 12717\nVENDOR_ID_RHEINISCHE_FRIEDRICH_WILHELMS_UNIVERSITAET_BONN = 12718\nVENDOR_ID_OPEN_SOFTWARE_SERVICES_LLC = 12719\nVENDOR_ID_RELIANT_RESOURCES = 12720\nVENDOR_ID_RENDITION_NETWORKS_INCORPORATED = 12721\nVENDOR_ID_RITE_AID_CORPORATION = 12722\nVENDOR_ID_SEISINT_INC = 12723\nVENDOR_ID_SENSINOVA_AB = 12724\nVENDOR_ID_SANTA_CLARA_COUNTY = 12725\nVENDOR_ID_SUDOESTE_SERVIOS_DE_TELEMTICA_LTDA = 12726\nVENDOR_ID_SUPERVISE_NETWORK = 12727\nVENDOR_ID_SYSWILL = 12728\nVENDOR_ID_TARGIT_GMBH = 12729\nVENDOR_ID_TECSYS_DEVELOPMENT_LP = 12730\nVENDOR_ID_UTI_SYSTEMS_SA_2 = 12731\nVENDOR_ID_VOIP_GROUP_INC = 12732\nVENDOR_ID_WILDPACKETS_INC = 12733\nVENDOR_ID_NORTHROP_GRUMMAN_INFORMATION_SYSTEMS = 12734\nVENDOR_ID_VFSPIH = 12735\nVENDOR_ID_ELO_MAHOUT_CO = 12736\nVENDOR_ID_ALGENIB_SOFTWARE_INC = 12737\nVENDOR_ID_BMW_OF_NORTH_AMERICA = 12738\nVENDOR_ID_DGSTAR_CO_LTD = 12739\nVENDOR_ID_EQUALLOGIC = 12740\nVENDOR_ID_ERGOINTEGRATION_AS = 12741\nVENDOR_ID_HOMECONCEPT = 12742\nVENDOR_ID_INTEGRATED_SERVICE_LAB = 12743\nVENDOR_ID_NAKISA_INC = 12744\nVENDOR_ID_NORDISK_SPRKTEKNOLOGI_AS = 12745\nVENDOR_ID_SPINOZA_TECHNOLOGY_INC = 12746\nVENDOR_ID_TEAMSOFT_INC = 12747\nVENDOR_ID_TELENOR_ASA = 12748\nVENDOR_ID_UTA_TELEKOM_AG = 12749\nVENDOR_ID_XIAN_HUAHAI_MEDICAL_INFO_TECH_COLTD = 12750\nVENDOR_ID_E_CHICEROS = 12751\nVENDOR_ID_ACTA_TECHNOLOGY_INC = 12752\nVENDOR_ID_BIOMEDICAL_INFORMATICS_LABORATORY = 12753\nVENDOR_ID_BTURTLE = 12754\nVENDOR_ID_CUP_2000_SPA = 12755\nVENDOR_ID_DELTA_NETWORKS_INC_2 = 12756\nVENDOR_ID_ECUBENETCOM = 12757\nVENDOR_ID_EXPET_TECHNOLOGIES_INC = 12758\nVENDOR_ID_GARBAN_INTERCAPITAL = 12759\nVENDOR_ID_H00ORG = 12760\nVENDOR_ID_HIPBONE_INC = 12761\nVENDOR_ID_IMPACCT_TECHNOLOGY_CORP = 12762\nVENDOR_ID_ISK_SYSTEMS_LTD = 12763\nVENDOR_ID_MEDIAOCEAN = 12764\nVENDOR_ID_MINTERA_CORP = 12765\nVENDOR_ID_MOBIXELL_NETWORKS_INC = 12766\nVENDOR_ID_NATIONAL_COMPUTER_HELPDESK = 12767\nVENDOR_ID_NAVISITE_INC = 12768\nVENDOR_ID_NETVIGATORCOM = 12769\nVENDOR_ID_NYTTAB_AB_SURFNET = 12770\nVENDOR_ID_PALFRADER = 12771\nVENDOR_ID_PZU_ZYCIE_SA = 12772\nVENDOR_ID_RESOURCE_CENTER = 12773\nVENDOR_ID_SENGENT_INC = 12774\nVENDOR_ID_SHIRON_SATELLITE_COMMUNICATIONS_LTD = 12775\nVENDOR_ID_THE_BOX_IT = 12776\nVENDOR_ID_TNG_THE_NET_GENERATION_GMBH = 12777\nVENDOR_ID_TRANTECH_INC = 12778\nVENDOR_ID_UNIVERSITY_OF_VERMONT = 12779\nVENDOR_ID_VOLKTEK_CORPORATION = 12780\nVENDOR_ID_PROGENY_LINUX_SYSTEMS = 12781\nVENDOR_ID_ROSTOBERNDOERFER_CONSULTING_GBR = 12782\nVENDOR_ID_UNIVERSITY_OF_MAINE_SYSTEM = 12783\nVENDOR_ID_TEAMWARE_GROUP_AB = 12784\nVENDOR_ID_AMACIS_LTD = 12785\nVENDOR_ID_AUTOMATOS_INC = 12786\nVENDOR_ID_AXXESSANYWHERE = 12787\nVENDOR_ID_BLADELOGIC_INC = 12788\nVENDOR_ID_CENTRE_FOR_INTEGRATED_COMPUTER_SYSTEMS_RESEARCH = 12789\nVENDOR_ID_CESKY_TELECOM_AS_IMAGINET_OZ = 12790\nVENDOR_ID_DATA_CONTROL_SYSTEMS_LTD = 12791\nVENDOR_ID_EMBARCADERO_TECHNOLOGIES_INC = 12792\nVENDOR_ID_EUREM_GMBH = 12793\nVENDOR_ID_FRANK = 12794\nVENDOR_ID_HCC_HOBBYNET = 12795\nVENDOR_ID_I_O_SOFTWARE = 12796\nVENDOR_ID_INTERACTIVE_PAYER_NETWORK = 12797\nVENDOR_ID_INTERNET_KAYTTAJAT_IKUISESTI_IKI_RY = 12798\nVENDOR_ID_IPV6_RESEARCH_AND_DEVELOPMENT = 12799\nVENDOR_ID_IQDOQ = 12800\nVENDOR_ID_LINUXMAGIC = 12801\nVENDOR_ID_MATHCOM_SOLUTIONS_INC = 12802\nVENDOR_ID_MULTITASK_CONSULTORIA_LTDA = 12803\nVENDOR_ID_NATIONAL_LIBRARY_OF_AUSTRALIA = 12804\nVENDOR_ID_NOTNET_WEBHOSTING = 12805\nVENDOR_ID_PETER_STAMFEST = 12806\nVENDOR_ID_RABBIT_SEMICONDUCTOR = 12807\nVENDOR_ID_S2IO_TECHNOLOGIES_CORP = 12808\nVENDOR_ID_SAN_DIEGO_UNIFIED_SCHOOL_DISTRICT = 12809\nVENDOR_ID_SARATOV_STATE_UNIVERSITY = 12810\nVENDOR_ID_SATSERVICE_GMBH = 12811\nVENDOR_ID_TRUSTWAVE_HOLDINGS_INC = 12812\nVENDOR_ID_SPEEDWISE_TECHNOLOGIES = 12813\nVENDOR_ID_STAATLICHE_STUDIENAKADEMIE_LEIPZIG = 12814\nVENDOR_ID_TERRASPRING_INC = 12815\nVENDOR_ID_UNIVERSITT_TRIER = 12816\nVENDOR_ID_Z_WORLD_INCORPORATED = 12817\nVENDOR_ID_THE_KEY_CENTRE_FOR_HUMAN_FACTORS_AND_APPLIED_COGNITIVE_PSYCHOLOGY = 12818\nVENDOR_ID_BANQUE_GENERALE_DU_LUXEMBOURG = 12819\nVENDOR_ID_ELECTRUM_INFORMATION_TECHNOLOGY_COLTD = 12820\nVENDOR_ID_E_PIE_ENTERTAINMENT_TECHNOLOGY_CORPORATIONBEIJING = 12821\nVENDOR_ID_ICU = 12822\nVENDOR_ID_AMIT_INC = 12823\nVENDOR_ID_ANDTEK_GMBH = 12824\nVENDOR_ID_ATC_INFORMATION_SERVICES = 12825\nVENDOR_ID_AXL_PERFORMANCE_SOLUTIONS_LTD = 12826\nVENDOR_ID_BARCO_INC = 12827\nVENDOR_ID_BLUE_HERON_BIOTECHNOLOGY_INC = 12828\nVENDOR_ID_BRADY_MOTOR_SPORTS = 12829\nVENDOR_ID_CENTRAL_FLORIDA_MAIN = 12830\nVENDOR_ID_CODEMARK = 12831\nVENDOR_ID_COUNCIL_OF_EUROPE = 12832\nVENDOR_ID_COVANSYS = 12833\nVENDOR_ID_CPE = 12834\nVENDOR_ID_DIGITRUST_CERTIFICADORA_NOTARIAL_SA = 12835\nVENDOR_ID_E_ADVIES = 12836\nVENDOR_ID_POLYTECHLILLE = 12837\nVENDOR_ID_EXIS_SRL = 12838\nVENDOR_ID_GERMAN_GUTIERREZ = 12839\nVENDOR_ID_GRIFFIN_PLAZA_PARTNERS_LLC = 12840\nVENDOR_ID_INTERACTIVE_TKO_INC = 12841\nVENDOR_ID_MEDISO_LTD = 12842\nVENDOR_ID_MIPTELECOM = 12843\nVENDOR_ID_NORTHERN_MICHIGAN_UNIVERSITY = 12844\nVENDOR_ID_OAK_LAWN_SCHOOL_DISTRICT_229 = 12845\nVENDOR_ID_OBJECTCODE = 12846\nVENDOR_ID_ORINCON_CORPORATION = 12847\nVENDOR_ID_SADDLEBACK_COLLEGE = 12848\nVENDOR_ID_SKYRIX_SOFTWARE_AG = 12849\nVENDOR_ID_SMART_TECH_CONSULTING = 12850\nVENDOR_ID_SYNCOPE_COMMUNICATION_SYSTEMS_GMBH = 12851\nVENDOR_ID_SYSPAK = 12852\nVENDOR_ID_TECHNICAL_TOYS_LIMITED = 12853\nVENDOR_ID_TELLION = 12854\nVENDOR_ID_VASTWEB_TECHNOLOGY_LTD = 12855\nVENDOR_ID_VERGE_NETWORKS = 12856\nVENDOR_ID_WILLIAMS_COLLEGE = 12857\nVENDOR_ID_ENETREX_INC = 12858\nVENDOR_ID_HIGHWAYRU = 12859\nVENDOR_ID_ZARYBA_LTD = 12860\nVENDOR_ID_BAYERISCHE_BEAMTEN_VERSICHERUNGEN = 12861\nVENDOR_ID_NEEF_LAPPCOM_GMBH = 12862\nVENDOR_ID_AIRLINK_TECHNOLOGY_INC = 12863\nVENDOR_ID_INCOGEN_INC = 12864\nVENDOR_ID_AMIN_GROUP = 12865\nVENDOR_ID_CARDENGINE_INC = 12866\nVENDOR_ID_CEDAR_POINT_COMMUNICATIONS_2 = 12867\nVENDOR_ID_CET_TECHNOLOGIES_PTE_LTD = 12868\nVENDOR_ID_CODENT_NETWORKS = 12869\nVENDOR_ID_DANLAB_ELECTRONICS_A_S = 12870\nVENDOR_ID_DIE_NETZWERKER_GMBH = 12871\nVENDOR_ID_DTE_ENERGY = 12872\nVENDOR_ID_ECC_SA = 12873\nVENDOR_ID_EFM_NETWORKS_INC = 12874\nVENDOR_ID_EXPERSHARE = 12875\nVENDOR_ID_FOKKER_SPACE = 12876\nVENDOR_ID_FORTIS = 12877\nVENDOR_ID_GRIFFIN_NETWORK_CONSULTING = 12878\nVENDOR_ID_IDNT_INTEGRATED_DIGITAL_NETWORK_TECHNOLOGIES = 12879\nVENDOR_ID_KIWI_INTERAKTIVE_MEDIEN_GMBH = 12880\nVENDOR_ID_KNOWGEEKS = 12881\nVENDOR_ID_LGC_WIRELESS = 12882\nVENDOR_ID_MARTINSSON_INFORMATIONSSYSTEM = 12883\nVENDOR_ID_MOODY_BIBLE_INSTITUTE = 12884\nVENDOR_ID_MYARTIC_COMMUNITIES = 12885\nVENDOR_ID_NATIONAL_TECHNICAL_SYSTEMS = 12886\nVENDOR_ID_NETPLEX_AB = 12887\nVENDOR_ID_PROKOM_BILGISAYAR_VE_DANISMANLIK_HIZMETLERI_SAN_VE_TIC_LTDSTI = 12888\nVENDOR_ID_PTC = 12889\nVENDOR_ID_SHORTY = 12890\nVENDOR_ID_SYNDICAT_INTERHOSPITALIER_LIMOUSIN = 12891\nVENDOR_ID_UNIVERSITY_OF_PATRAS = 12892\nVENDOR_ID_VISIOWAVE_SA = 12893\nVENDOR_ID_WMODE_INC = 12894\nVENDOR_ID_XSETUP = 12895\nVENDOR_ID_XTRIA_HEALTHCARE = 12896\nVENDOR_ID_ZILOG_INC = 12897\nVENDOR_ID_SINTER_CONSULTING = 12898\nVENDOR_ID_VISOGENT_TECHNOLOGIES = 12899\nVENDOR_ID_ITEC = 12900\nVENDOR_ID_INSTITUTE_OF_SOFTWARECHINESE_ACADEMY_OF_SCIENCES = 12901\nVENDOR_ID_ADVANCED_NETWORK_TECHNOLOGY_LABORATORIES_PTE_LTD = 12902\nVENDOR_ID_BAYSHORE_NETWORKS_INC = 12903\nVENDOR_ID_EVAULT_INC = 12904\nVENDOR_ID_INDIAN_INSTITUTE_OF_TECHNOLOGY_GUWAHATI = 12905\nVENDOR_ID_JAPC = 12906\nVENDOR_ID_KANSAI_BROADBAND_PLANNING_CORP = 12907\nVENDOR_ID_LITECH_SYSTEMS_DESIGN = 12908\nVENDOR_ID_MACHINE_VISION_PRODUCTS_INC = 12909\nVENDOR_ID_NEXT_ELEMENT = 12910\nVENDOR_ID_OCE_NV = 12911\nVENDOR_ID_PEERPRO = 12912\nVENDOR_ID_PROCERA_NETWORKS_INC = 12913\nVENDOR_ID_PRODUCTION_ROBOTS_ENGINEERING_LTD = 12914\nVENDOR_ID_RADIO_FREE_EUROPE_RADIO_LIBERTY_INC = 12915\nVENDOR_ID_ROCKLAND_COMMUNITY_COLLEGE = 12916\nVENDOR_ID_SABER_E_LAZER_SA = 12917\nVENDOR_ID_TDI_TRANSISTOR_DEVICES_INC = 12918\nVENDOR_ID_XAVI_TECHNOLOGIES_CORPORATION = 12919\nVENDOR_ID_XTEAM_SOFTWARE_CO_LTD = 12920\nVENDOR_ID_YEAMAN_ASSOCIATES = 12921\nVENDOR_ID_YOUR_VOICE_SPA = 12922\nVENDOR_ID_KIGYO_ZANMAI_CORP = 12923\nVENDOR_ID_KLON_JAWOR_ASSOCIATION = 12924\nVENDOR_ID_3PAR_DATA = 12925\nVENDOR_ID_ANHEUSER_BUSCH = 12926\nVENDOR_ID_AXIOM_CAMBRIDGE_LTD = 12927\nVENDOR_ID_CLARUS_SYSTEMS = 12928\nVENDOR_ID_CLIFF_BERG = 12929\nVENDOR_ID_CVS_TRAVELHOST_INTERNATIONAL_PTY_LTD = 12930\nVENDOR_ID_DREEFS_GMBH_SCHALTGERTE_SYSTEME = 12931\nVENDOR_ID_FESD_GMBH = 12932\nVENDOR_ID_GLOBAL_ORCHESTRA = 12933\nVENDOR_ID_HUNKELER_AG = 12934\nVENDOR_ID_I3_MICRO_TECHNOLOGY_AB = 12935\nVENDOR_ID_INCERT_SOFTWARE_CORPORATION = 12936\nVENDOR_ID_INFRADIG_SYSTEMS = 12937\nVENDOR_ID_INNOVATIVE_TECHNOLOGY_SOLUTIONS_INC = 12938\nVENDOR_ID_MODUS_SCOTLAND_LTD = 12939\nVENDOR_ID_PEDESTAL_NETWORKS = 12940\nVENDOR_ID_PRESS_DATA = 12941\nVENDOR_ID_SANSHA_ELECTRIC_MFGCOLTD = 12942\nVENDOR_ID_SENGENA = 12943\nVENDOR_ID_SOCKEYE_NETWORKS_INC = 12944\nVENDOR_ID_SOFTPROJECT_GMBH = 12945\nVENDOR_ID_STATE_SERVICES_COMMISSION = 12946\nVENDOR_ID_SYNTHESYS_SECURE_TECHNOLOGIES_INC = 12947\nVENDOR_ID_SYRED_DATA_SYSTEMS = 12948\nVENDOR_ID_T_ONLINE_FRANCE = 12949\nVENDOR_ID_VENNGO_INC = 12950\nVENDOR_ID_VERIZONWIRELESS = 12951\nVENDOR_ID_WARPFACTOR_INC = 12952\nVENDOR_ID_XANDROS_CORPORATION = 12953\nVENDOR_ID_WM_DATA_SDC_A_S = 12954\nVENDOR_ID_METARETE_SRL = 12955\nVENDOR_ID_AARHUS_UNIVERSITET = 12956\nVENDOR_ID_BLUE_MARS_GMBH = 12957\nVENDOR_ID_QUESTERRA = 12958\nVENDOR_ID_AM_PROFESSIONAL_SERVICES = 12959\nVENDOR_ID_ANDELINA_CORPORATION = 12960\nVENDOR_ID_ANDREW_HEWETT_CONSULTING = 12961\nVENDOR_ID_DECRU_INC = 12962\nVENDOR_ID_DIMONSOFT = 12963\nVENDOR_ID_FTLIGHTNET = 12964\nVENDOR_ID_NEW_MEDIA_DATA_MARKETING_INC = 12965\nVENDOR_ID_NEXT_GENERATION_SYSTEMS_INC = 12966\nVENDOR_ID_PETROBRAS_PETROLEO_BRASILEIRO_SA = 12967\nVENDOR_ID_MENNO_PIETERS_FORMERLY_STELVIO = 12968\nVENDOR_ID_THE_ROCKEFELLER_UNIVERSITY = 12969\nVENDOR_ID_URBAN_DEVELOPMENT_CO = 12970\nVENDOR_ID_BIGDOMCOM = 12971\nVENDOR_ID_CALLION_ELECTRONICS_CO_LTD = 12972\nVENDOR_ID_WUHAN_PUBLIC_INFORMATION_COLTD = 12973\nVENDOR_ID_BARRIGONCOM = 12974\nVENDOR_ID_BRAINAID = 12975\nVENDOR_ID_COWLAN = 12976\nVENDOR_ID_LEVEL_II_INC = 12977\nVENDOR_ID_MICHAEL_FROMME_EDV_BERATUNG = 12978\nVENDOR_ID_OPTIMACY_CORPORATION = 12979\nVENDOR_ID_PERSON_CO_LTD = 12980\nVENDOR_ID_ROTTERDAM_CS = 12981\nVENDOR_ID_SYNERGY_INTERNATIONAL_LTD = 12982\nVENDOR_ID_TBS_INTERNET = 12983\nVENDOR_ID_TERRAPLAY_SYSTEMS_AB = 12984\nVENDOR_ID_UNIVERSITY_OF_ST_ANDREWS = 12985\nVENDOR_ID_VERLAGSGRUPPE_STRAUBINGER_TAGBLATT_LANDSHUTER_ZEITUNG = 12986\nVENDOR_ID_VINEYARDNET_INC = 12987\nVENDOR_ID_VISTORM_LIMITED = 12988\nVENDOR_ID_XIP = 12989\nVENDOR_ID_STAR_COMMUNICATION_NETWORK_TECHNOLOGY_CO_LTD = 12990\nVENDOR_ID_CALIFORNIA_COLLEGE_OF_ARTS_CRAFTS = 12991\nVENDOR_ID_TA_SYSTEME_GMBH = 12992\nVENDOR_ID_WEITLANDT_COMMUNICATION = 12993\nVENDOR_ID_ABISOFT_LTD = 12994\nVENDOR_ID_ACCET_NETWORK_INC = 12995\nVENDOR_ID_ADCONSYS_AG = 12996\nVENDOR_ID_ADVANCED_BIOMETRICS_INC = 12997\nVENDOR_ID_AGILE_SOFTWARE = 12998\nVENDOR_ID_ALTIRIS = 12999\nVENDOR_ID_ANGLIA_POLYTECHNIC_UNIVERSITY = 13000\nVENDOR_ID_ANUVIO_TECHNOLOGIES = 13001\nVENDOR_ID_AUGSBURG_COLLEGE = 13002\nVENDOR_ID_BANCA_IMI = 13003\nVENDOR_ID_BEAMNET = 13004\nVENDOR_ID_BITRAGE_INC = 13005\nVENDOR_ID_CAE_TECHNIK_SCHMITT = 13006\nVENDOR_ID_CALIFORNIA_REGIONAL_INTRANET_INC = 13007\nVENDOR_ID_CANPRINT_COMMUNICATIONS_PTY_LTD = 13008\nVENDOR_ID_COMA = 13009\nVENDOR_ID_COMPUTER_BUSINESS_SCIENCES_LTD = 13010\nVENDOR_ID_CONSEJO_GENERAL_DEL_NOTARIADO = 13011\nVENDOR_ID_CRAMER_SYSTEMS_LIMITED = 13012\nVENDOR_ID_DENISOWSKI_CONSULTING = 13013\nVENDOR_ID_DREAMCODE_SOFTWARE_INC = 13014\nVENDOR_ID_EASTERN_ELECTRONICS_CO_LTD = 13015\nVENDOR_ID_EMAGICCOM = 13016\nVENDOR_ID_E_SOLUTIONIST_INC = 13017\nVENDOR_ID_ETH_ZURICH_DEPARTMENT_OF_COMPUTER_SCIENCE = 13018\nVENDOR_ID_ETSI = 13019\nVENDOR_ID_FLORIDA_INTERNATIONAL_UNIVERSITY = 13020\nVENDOR_ID_HALIFAX_CETELEM_CREDIT_LTD = 13021\nVENDOR_ID_HANDHELDSORG = 13022\nVENDOR_ID_HUB2B = 13023\nVENDOR_ID_IMAGISTICS_INTERNATIONAL_INC = 13024\nVENDOR_ID_INFERNO_LABS = 13025\nVENDOR_ID_IT_INTERGROUP_APS = 13026\nVENDOR_ID_IXOS_SOFTWARE_AG = 13027\nVENDOR_ID_KUOKOA_NETWORKS_INC = 13028\nVENDOR_ID_MANAGED_SERVICE_PARTNERS_INTERNATIONAL = 13029\nVENDOR_ID_MONITOR724_SERVICES_LIMITED = 13030\nVENDOR_ID_NEIXINC_FORMERLY_DIGITAL_TECHNOLOGIES_CORPORATION = 13031\nVENDOR_ID_REACH_TECHNOLOGIES = 13032\nVENDOR_ID_SHOCKUNIT_PRODUCTIONS = 13033\nVENDOR_ID_SOFTNET_SYSTEMS_INC = 13034\nVENDOR_ID_SONANGOL = 13035\nVENDOR_ID_STRADIENT_INC = 13036\nVENDOR_ID_SUBNETWORX_CORPORATION = 13037\nVENDOR_ID_TELE_GREENLAND_INC = 13038\nVENDOR_ID_TENNESSEE_TECHNOLOGICAL_UNIVERSITY = 13039\nVENDOR_ID_THE_HORDE_PROJECT = 13040\nVENDOR_ID_THINK_DYNAMICS = 13041\nVENDOR_ID_TRUST_COMPANY_OF_AMERICA = 13042\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_RIVER_FALLS = 13043\nVENDOR_ID_UNTERNEHMENSBERATUNG_RAHN = 13044\nVENDOR_ID_UPTIME_DEVICES_INC = 13045\nVENDOR_ID_VISIONSHARE_INC = 13046\nVENDOR_ID_WELLIVER_ENTERPRISES = 13047\nVENDOR_ID_XORBA_INC = 13048\nVENDOR_ID_YACC_LABS_LTD = 13049\nVENDOR_ID_YDILO_ADVANCED_VOICE_SOLUTIONS_SA = 13050\nVENDOR_ID_METASOLV_SOFTWARE_INC = 13051\nVENDOR_ID_TELEFONBAU_ARTHUR_SCHWABE_GMBH_CO_KG = 13052\nVENDOR_ID_TIS_SYSTEM_SERVICE_INC = 13053\nVENDOR_ID_RAM_CORP = 13054\nVENDOR_ID_SHANGHAI_JINGLUN_TECHNOLOGIES_COLTD = 13055\nVENDOR_ID_TAI_PING_LIFE_INSURANCE_CO_LTD = 13056\nVENDOR_ID_HAYS_DSIA_FRANCE = 13057\nVENDOR_ID_NATIONAL_HOCKEY_LEAGUE = 13058\nVENDOR_ID_AHOLD_SUPERMERCADOS = 13059\nVENDOR_ID_AIRPATH_WIRELESS_INC = 13060\nVENDOR_ID_ALPHAC_SRL = 13061\nVENDOR_ID_ASCOM_2 = 13062\nVENDOR_ID_CAMBIAN = 13063\nVENDOR_ID_CLAYMOUNTAIN_SOLUTIONS_OY = 13064\nVENDOR_ID_COLOMSAT_SA = 13065\nVENDOR_ID_CONNAUGHT_AIR_SERVICES = 13066\nVENDOR_ID_CSH = 13067\nVENDOR_ID_CZAJSOFT = 13068\nVENDOR_ID_DIVEO_DO_BRASIL_TELECOM_LTDA = 13069\nVENDOR_ID_DRUTT_CORPORATION = 13070\nVENDOR_ID_ESDS = 13071\nVENDOR_ID_GALLERY_IP_TELEPHONY_LTD = 13072\nVENDOR_ID_GATE5_AG = 13073\nVENDOR_ID_LABYRINTH_CONNECTIONS = 13074\nVENDOR_ID_MY_LINUX_ISP = 13075\nVENDOR_ID_MYCOMPANY = 13076\nVENDOR_ID_NETWOLVES_TECHNOLOGIES_CORPORATION = 13077\nVENDOR_ID_NSSOFT_INC = 13078\nVENDOR_ID_PERSAY_LTD = 13079\nVENDOR_ID_PERSONA_INC = 13080\nVENDOR_ID_PRETAX_SYSTEMS_OY_LTD = 13081\nVENDOR_ID_SHANGHAI_SUNRISE_ELECTRONIC_TECHNOLOGY_CO_LTD = 13082\nVENDOR_ID_SIGNAL_TECHNOLOGY_CORPORATION = 13083\nVENDOR_ID_SONAE_DISTRIBUIO_BRASIL_SA = 13084\nVENDOR_ID_STREAMSEC = 13085\nVENDOR_ID_YAMAGATA_PREFECTURAL_GOVERNMENT = 13086\nVENDOR_ID_VAELIT_GROUP = 13087\nVENDOR_ID_ADQUIRA_ESPAA = 13088\nVENDOR_ID_ARISTOTLE_UNIVERSITY_OF_THESSALONIKI_DEPARTMENT_OF_PHYSICS = 13089\nVENDOR_ID_ARTIFACT_ENTERTAINMENT = 13090\nVENDOR_ID_BETHEL_COLLEGE_AND_SEMINARY = 13091\nVENDOR_ID_CELLCLOUD_TECHNOLOGIES_PVT_LTD = 13092\nVENDOR_ID_COLLEGE_OF_EDUCATION = 13093\nVENDOR_ID_CONTEGO_SOLUTIONS_LLC = 13094\nVENDOR_ID_DALHOUSIE_UNIVERSITY = 13095\nVENDOR_ID_DAN_OF_STEEL = 13096\nVENDOR_ID_DASCOM_TECHNOLOGY_COLTD = 13097\nVENDOR_ID_DPA_AFX_WIRTSCHAFTSNACHRICHTEN_GMBH = 13098\nVENDOR_ID_DRYBRIDGE_CONSULTING = 13099\nVENDOR_ID_FUN_COMMUNICATIONS_GMBH = 13100\nVENDOR_ID_GETEDES = 13101\nVENDOR_ID_HAUNI_MASCHINENBAU_AG = 13102\nVENDOR_ID_ILEVO_AB = 13103\nVENDOR_ID_INFRASERVICES_CORPORATION = 13104\nVENDOR_ID_INGENIUM_TECHNOLOGY_SRL = 13105\nVENDOR_ID_JLF_NETWORK = 13106\nVENDOR_ID_JMATICA_SRL = 13107\nVENDOR_ID_LINUXLAB = 13108\nVENDOR_ID_LIONTECH_CO_LTD = 13109\nVENDOR_ID_MANAGEABLE_INC = 13110\nVENDOR_ID_MCGUNET_CONSULTING = 13111\nVENDOR_ID_MDS_PROTEOMICS_INC = 13112\nVENDOR_ID_MINDTRIBE = 13113\nVENDOR_ID_NEXTRA_INVESTMENT_MANAGEMENT_SGR_SPA = 13114\nVENDOR_ID_OPEN_CONNECTIONS = 13115\nVENDOR_ID_P_J_SYSTEMS_SUPPORT_STATION = 13116\nVENDOR_ID_PLATHOME_COLTD = 13117\nVENDOR_ID_POINTDX_INC = 13118\nVENDOR_ID_RAMEX_ARS_MEDICA_INC = 13119\nVENDOR_ID_RASILIENT_SYSTEMS_INC = 13120\nVENDOR_ID_SIGNATRON_TECHNOLOGY_CORPORATION = 13121\nVENDOR_ID_SOFTWARE_RESEARCH_ASSOCIATES_INC = 13122\nVENDOR_ID_STARBAK_COMMUNICATIONS_INC = 13123\nVENDOR_ID_TERRA_MARKETING = 13124\nVENDOR_ID_TEYTEL_SA = 13125\nVENDOR_ID_THEMOUNTAIN = 13126\nVENDOR_ID_THOMAS_JEFFERSON_UNIVERSITY_HOSPITAL = 13127\nVENDOR_ID_UNIVERSE_SOFTWARE = 13128\nVENDOR_ID_UPMC = 13129\nVENDOR_ID_VIDEO_PRODUCTS_GROUP = 13130\nVENDOR_ID_DE_PASSIEVRUCHTEN = 13131\nVENDOR_ID_SOFTING_EUROPE_SA = 13132\nVENDOR_ID_MICHELIN = 13133\nVENDOR_ID_FOUNDER_BROADBAND_NETWORK_TECHNOLOGY_COLTD = 13134\nVENDOR_ID_SJTEK = 13135\nVENDOR_ID_ALEXSDE_PRIVATE_NETWORK = 13136\nVENDOR_ID_BIOCARE_SARL = 13137\nVENDOR_ID_BOILED_FROG_TRADING_CO_OPERATIVE = 13138\nVENDOR_ID_CARIBNAV_HOLDINGS_LLC = 13139\nVENDOR_ID_CLUSTER_FILE_SYSTEMS_INC = 13140\nVENDOR_ID_FDK_COLTD = 13141\nVENDOR_ID_I_M_CONSULTANCY_PTY_LTD = 13142\nVENDOR_ID_ISI_SPA = 13143\nVENDOR_ID_JAKOB_HATTELAND_COMPUTER_AS = 13144\nVENDOR_ID_KLIK_SYSTEMS_INC = 13145\nVENDOR_ID_KLOMP = 13146\nVENDOR_ID_LEADFLY_TECHNOLOGIES_CO_LTD = 13147\nVENDOR_ID_LEANLOGISTICS = 13148\nVENDOR_ID_LEE_PRINTING_INC = 13149\nVENDOR_ID_MM_CONSULTING_INTL = 13150\nVENDOR_ID_MB_CONSULTANTS = 13151\nVENDOR_ID_OCTALIS_SA = 13152\nVENDOR_ID_RFSAW = 13153\nVENDOR_ID_RPOST_INC = 13154\nVENDOR_ID_SHIMANEK = 13155\nVENDOR_ID_SWITCHPOINT_NETWORKS_INC = 13156\nVENDOR_ID_TSINGHUA_UNISPLENDOUR_BITWAY_NETWORKING_TECHNOLOGY_COLTD = 13157\nVENDOR_ID_UNIVERSITAET_MUENSTER = 13158\nVENDOR_ID_ZF_FRIEDRICHSHAFEN_AG = 13159\nVENDOR_ID_CERCACOM_SRL = 13160\nVENDOR_ID_QUATTRO_SOFTWARE_LIMITED = 13161\nVENDOR_ID_SOFTWARE_QUALITY_ENGINEERING = 13162\nVENDOR_ID_MINISTRY_OF_JUSTICE_FINLAND = 13163\nVENDOR_ID_CYBERSUPERSTORE_INC = 13164\nVENDOR_ID_9105_1938_QUBEC_INC = 13165\nVENDOR_ID_ACAMAR_SYSTEMS = 13166\nVENDOR_ID_OEKONET_MUELLER_BRANDT = 13167\nVENDOR_ID_ARIES_E_PUBLISHING = 13168\nVENDOR_ID_UNIPOWER_LLC_IPS_FORMERLY_CD_TECHNOLOGIES_INC = 13169\nVENDOR_ID_CARESYS_GMBH = 13170\nVENDOR_ID_CILYS = 13171\nVENDOR_ID_DARK_SIDE_OF_THE_MOON_SOFTWARE = 13172\nVENDOR_ID_DILAX_INTELCOM_GMBH = 13173\nVENDOR_ID_EGLIN_AIR_FORCE_BASE = 13174\nVENDOR_ID_EUROFER = 13175\nVENDOR_ID_EUROPEAN_BANK_FOR_RECONSTRUCTION_AND_DEVELOPMENT = 13176\nVENDOR_ID_FIRMAPROFESIONAL_SA = 13177\nVENDOR_ID_FREMONT_COMPUTER_CORPORATION = 13178\nVENDOR_ID_INTERNET_INFORMATION_GROUP = 13179\nVENDOR_ID_JR_SOFTWARE = 13180\nVENDOR_ID_JUNOT_SYSTEMS_INC = 13181\nVENDOR_ID_KAPSCH_TRAFFICCOM_AG = 13182\nVENDOR_ID_KEVAB_THEBASESTATIONCOMPANY = 13183\nVENDOR_ID_LANSCAPE_NETZWERKDIENSTE_GMBH = 13184\nVENDOR_ID_LAQTIB_INC = 13185\nVENDOR_ID_LIGHT_COMPUTING_SERVICES_LTD = 13186\nVENDOR_ID_MDLINK_GMBH = 13187\nVENDOR_ID_MIAMI_UNIVERSITY_LIBRARIES = 13188\nVENDOR_ID_MITAKE = 13189\nVENDOR_ID_NORTHROP_GRUMMAN_INRI_DIVISIONNTCSS_SUPPORT_SYSTEM = 13190\nVENDOR_ID_ONEACCESS = 13191\nVENDOR_ID_PCLINX_SNC = 13192\nVENDOR_ID_PORTELCO_ASIA_LIMITED = 13193\nVENDOR_ID_PORTSITE_GMBH = 13194\nVENDOR_ID_PRODITEC = 13195\nVENDOR_ID_SBS_GMBH_CO_OHG_CWS_41 = 13196\nVENDOR_ID_SECURITY_CROSSING = 13197\nVENDOR_ID_SIGNTRUST = 13198\nVENDOR_ID_SIMIND_INC = 13199\nVENDOR_ID_BPK_PENABUR = 13200\nVENDOR_ID_TJH_INTERNET_SP = 13201\nVENDOR_ID_UNITED_STATES_ADVANCED_NETWORK_INC = 13202\nVENDOR_ID_UNIVERSITY_OF_PRETORIA = 13203\nVENDOR_ID_VIA_NETWORKS_DEUTSCHLAND_GMBH = 13204\nVENDOR_ID_WEBSWIMMER_LLC = 13205\nVENDOR_ID_BSM_CONSULTING = 13206\nVENDOR_ID_NTNU = 13207\nVENDOR_ID_ARGSOFT = 13208\nVENDOR_ID_APTILO_NETWORKS_AB = 13209\nVENDOR_ID_ARMSTRONG_GROUP_OF_COMPANIES = 13210\nVENDOR_ID_AT4NET_INTERNET_Y_COMUNICACION = 13211\nVENDOR_ID_BTRADE_INC = 13212\nVENDOR_ID_CENTRE_TECNOLOGIC_DE_MANRESA = 13213\nVENDOR_ID_COMUNITEL_GLOBAL_SA = 13214\nVENDOR_ID_COUGAAR = 13215\nVENDOR_ID_DIGITAL_AGE_DESIGN = 13216\nVENDOR_ID_FH_FURTWANGEN = 13217\nVENDOR_ID_FLOWRING_TECHNOLOGY = 13218\nVENDOR_ID_GLIWICKIE_STOWARZYSZENIE_INTERNAUTW = 13219\nVENDOR_ID_INTERCONNECTED_GENERATION = 13220\nVENDOR_ID_KUBOTA_SYSTEMS_INC = 13221\nVENDOR_ID_MILLICOM_PERU = 13222\nVENDOR_ID_MWAIN_CORP = 13223\nVENDOR_ID_NET_INTEGRATION_TECHNOLOGIES = 13224\nVENDOR_ID_NETWORK_SERVICES_GROUP_LLC = 13225\nVENDOR_ID_NETWORK_TECHNOLOGY_SOLUTIONS = 13226\nVENDOR_ID_OFFICESCAPE = 13227\nVENDOR_ID_REDLINE_TELECOMMUNICATIONS_SA_PTY_LTD = 13228\nVENDOR_ID_SAMAD_PTY_LTD = 13229\nVENDOR_ID_SAN_DIEGO_SUPERCOMPUTER_CENTER = 13230\nVENDOR_ID_SCHLUMBERGERSEMA_JAPAN = 13231\nVENDOR_ID_SPOTTEDOWLRECIPESCOM = 13232\nVENDOR_ID_VIMIA_GMBH = 13233\nVENDOR_ID_TELPRO_LTD = 13234\nVENDOR_ID_TERALINK_COMMUNICATIONS = 13235\nVENDOR_ID_THE_BRICK_WAREHOUSE_CORPORATION = 13236\nVENDOR_ID_US_PROCESS_INC = 13237\nVENDOR_ID_VIENNA_UNIVERSITY_OF_ECONOMICS_AND_BUSINESS_ADMINISTRATION = 13238\nVENDOR_ID_VODATEL = 13239\nVENDOR_ID_VOIP_PTY_LTD = 13240\nVENDOR_ID_WIELAND_GMEINER = 13241\nVENDOR_ID_INFOCRYPT = 13242\nVENDOR_ID_CHIP_PC = 13243\nVENDOR_ID_DUNIYA_TECHNOLOGIES_INC = 13244\nVENDOR_ID_HST = 13245\nVENDOR_ID_ALLIENTE_INC = 13246\nVENDOR_ID_CITY_OF_NAANTALI = 13247\nVENDOR_ID_GENERAL_ELECTRIC_POWER_MANAGEMENT = 13248\nVENDOR_ID_ICEM_TECHNOLOGIES_GMBH = 13249\nVENDOR_ID_INECO = 13250\nVENDOR_ID_INGENIX = 13251\nVENDOR_ID_KODANSHA_LTD = 13252\nVENDOR_ID_KY_ON = 13253\nVENDOR_ID_LONDON_STOCK_EXCHANGE = 13254\nVENDOR_ID_NET_MOBILE_AG = 13255\nVENDOR_ID_RABID_BADGERS = 13256\nVENDOR_ID_REGISTRADORES_DE_LA_PROPIEDAD_Y_MERCANTIL_DE_ESPAA = 13257\nVENDOR_ID_SECRETARIA_DE_EDUCACIN_DEL_DISTRITO_BOGOTA_DC_COLOMBIA = 13258\nVENDOR_ID_SOLUTION_X_SOFTWARE_GMBH = 13259\nVENDOR_ID_STUDY_AREA_TRAINING_CENTER = 13260\nVENDOR_ID_T_SYSTEMS_ITS_GMBH_DMS_PP = 13261\nVENDOR_ID_ZBW_ZENTRUM_FUER_BERUFLICHE_WEITERBILDUNG = 13262\nVENDOR_ID_PROFESSIONAL_SYSTEMS_INTEGRATION = 13263\nVENDOR_ID_ATMEL_GERMANY_GMBH = 13264\nVENDOR_ID_ATOFINA = 13265\nVENDOR_ID_C2_CREATION = 13266\nVENDOR_ID_CITY_OF_YORK_COUNCIL = 13267\nVENDOR_ID_CLARK_HILL_PLC = 13268\nVENDOR_ID_COMPLETE_NETWORK_SOLUTIONS_INC = 13269\nVENDOR_ID_COMPUTING_CENTER_OF_NORTHEASTERN_UNIV = 13270\nVENDOR_ID_CURRENT_TECHNOLOGIES = 13271\nVENDOR_ID_DANILOMASSA = 13272\nVENDOR_ID_DESIGN_IT_SOLUTIONS_LTD = 13273\nVENDOR_ID_DIGITAL_MEDIA_LAB_CORPORATION = 13274\nVENDOR_ID_GOLDEN_SQUARE_POST_PRODUCTION = 13275\nVENDOR_ID_GSTA = 13276\nVENDOR_ID_IEEE_80211 = 13277\nVENDOR_ID_INABLING_TECHNOLOGIES = 13278\nVENDOR_ID_INTERGATE_BROWSER_SYSTEMS_INC = 13279\nVENDOR_ID_INTERNET_EXPRESS_INC = 13280\nVENDOR_ID_IPSYN = 13281\nVENDOR_ID_KAPAREL_CORPORATION = 13282\nVENDOR_ID_LAITILAN_PUHELINOSUUSKUNTA = 13283\nVENDOR_ID_LONDON_STOCK_EXCHANGE_2 = 13284\nVENDOR_ID_LYCOS_FRANCE = 13285\nVENDOR_ID_MDM_IC = 13286\nVENDOR_ID_MEMBRAIN_TECHNOLOGIES = 13287\nVENDOR_ID_MISMHIT = 13288\nVENDOR_ID_NEOSCALE_SYSTEMS = 13289\nVENDOR_ID_NEXTSOURCE_INC = 13290\nVENDOR_ID_OGANGI_CORPORATION = 13291\nVENDOR_ID_FEEL3_UG_HAFTUNGSBESCHRAENKT_FORMERLY_ONESHELL_INTERNET_SERVICES_GMBH = 13292\nVENDOR_ID_OTTO_INTERNATIONAL_HONG_KONG_LTD = 13293\nVENDOR_ID_PH03N1XNET_DEVELOPMENT = 13294\nVENDOR_ID_PORTUGALMAIL = 13295\nVENDOR_ID_SOFTINTEGRO = 13296\nVENDOR_ID_SOLITON_ASSOCIATES_LIMITED = 13297\nVENDOR_ID_SYNER_SA = 13298\nVENDOR_ID_SYNTLOGO_GMBH = 13299\nVENDOR_ID_SYRN_SOFTWARE_AB = 13300\nVENDOR_ID_TEKSOUTH_CORPORATION = 13301\nVENDOR_ID_THE_ADVANTAGE_MEDIA_GROUP = 13302\nVENDOR_ID_THE_GILLETTE_COMPANY = 13303\nVENDOR_ID_T_SYSTEMS_SOLUTIONS_FOR_RESEARCH_GMBH = 13304\nVENDOR_ID_BFH_BERNE_UNIVERSITY_OF_APPLIED_SCIENCES_FORMERLY_BERNE_UNIVERSITY_OF_APPLIED_SCIENCES = 13305\nVENDOR_ID_UNIVERSITY_OF_MONTANA = 13306\nVENDOR_ID_VRAM_RT = 13307\nVENDOR_ID_VROSMAJORI_GIMNZIUM = 13308\nVENDOR_ID_VISANTI_A_S = 13309\nVENDOR_ID_WWWOLF = 13310\nVENDOR_ID_JOYS_ONLINE_INC = 13311\nVENDOR_ID_FACTOR_TS_LTD = 13312\nVENDOR_ID_ANALOG_DEVICES_INC = 13313\nVENDOR_ID_BLANK = 13314\nVENDOR_ID_BLUECAT_NETWORKS = 13315\nVENDOR_ID_BYTEWORKS = 13316\nVENDOR_ID_CELITE_SYSTEMS_INC = 13317\nVENDOR_ID_CLARITY_AG = 13318\nVENDOR_ID_DIPARTIMENTO_DI_BIOCHIMICA_E_BIOTECNOLOGIE_MEDICHE = 13319\nVENDOR_ID_GRIFFIN_DEVELOPMENT = 13320\nVENDOR_ID_INCARD_SPA = 13321\nVENDOR_ID_PEEL_TEACHING_ASSISTANTS_ASSOCIATION = 13322\nVENDOR_ID_SOFTLOGIC_SOLUTIONS = 13323\nVENDOR_ID_WEB_ADDR_LLC = 13324\nVENDOR_ID_ASSOCIATED_PRESS = 13325\nVENDOR_ID_BERMAI = 13326\nVENDOR_ID_HTDS = 13327\nVENDOR_ID_APOAPSIS_LTD = 13328\nVENDOR_ID_AREA51 = 13329\nVENDOR_ID_CEYONIQ_INCORPORATED = 13330\nVENDOR_ID_CICAIA_UNIVERSITA_DI_MODENA_E_REGGIO_EMILIA = 13331\nVENDOR_ID_CREDIT_UNION_CENTRAL_ALBERTA_LIMITED = 13332\nVENDOR_ID_CLEARSKY_TECHNOLOGIES_INC_FORMERLY_DATA_ON_AIR = 13333\nVENDOR_ID_HEWETT_INC = 13334\nVENDOR_ID_INTERNET_INFORMATION_SERVICES = 13335\nVENDOR_ID_IRONHIDE_CORP = 13336\nVENDOR_ID_KOCHAN_UND_PARTNER = 13337\nVENDOR_ID_KROCUS_COMMUNICATIONS_OY = 13338\nVENDOR_ID_LANGE_SOFTWARE_GMBH = 13339\nVENDOR_ID_LEE_BRADSHAW = 13340\nVENDOR_ID_LIVE_SYSTEMS_INTEGRATION = 13341\nVENDOR_ID_UNASSIGNED_17 = 13342\nVENDOR_ID_NETWORKING_LABORATORY_OF_DMIS_BUTE = 13343\nVENDOR_ID_NINGBO_SUCCESS_INFORMATION_INDUSTRY_COLTD = 13344\nVENDOR_ID_PACIFICORP = 13345\nVENDOR_ID_PACE_FRANCE_FORMERLY_PHILIPS_CE_STB = 13346\nVENDOR_ID_QBRANCH = 13347\nVENDOR_ID_RANDALL_KUNKEE = 13348\nVENDOR_ID_RMP_ASSOCIATES = 13349\nVENDOR_ID_SDN_ONLINE_INC = 13350\nVENDOR_ID_SHANGHAI_MINING_COMPUTER_SOFTWARE_CO_LTD = 13351\nVENDOR_ID_SNS_SOLUTIONS = 13352\nVENDOR_ID_SONOFON = 13353\nVENDOR_ID_SPACETIME_CO_LTD = 13354\nVENDOR_ID_STODGEORG = 13355\nVENDOR_ID_SUMMIT_IMAGING_INC = 13356\nVENDOR_ID_SUNGARD_BI_TECH = 13357\nVENDOR_ID_TIM_O_CALLAGHAN = 13358\nVENDOR_ID_TM_RYDER_INSURANCE_AGENCY_INC = 13359\nVENDOR_ID_TRINITY_CONVERGENCE = 13360\nVENDOR_ID_UNIVERSIT_FRANOIS_RABELAIS = 13361\nVENDOR_ID_UNIVERSITY_OF_APPLIED_SCIENCES_STRALSUND = 13362\nVENDOR_ID_UNIVERSITY_OF_SOUTHERN_CALIFORNIA = 13363\nVENDOR_ID_VIABRIDGE = 13364\nVENDOR_ID_VIEWBRIDGE_TECHNOLOGIES_INC = 13365\nVENDOR_ID_WH_INTERACTIVE_LTD = 13366\nVENDOR_ID_WHALE_QUEENS_ORG = 13367\nVENDOR_ID_ZAND_ELEKTRONIC = 13368\nVENDOR_ID_ZETA_ASSOCIATES_INCORPORATED = 13369\nVENDOR_ID_7_COMPUTER_NETWORKS_LTD = 13370\nVENDOR_ID_QUALITYWARE_INFORMTICA_LTDA = 13371\nVENDOR_ID_UGC = 13372\nVENDOR_ID_APT_MINDS_LLC = 13373\nVENDOR_ID_AXITUS = 13374\nVENDOR_ID_BRAINZSQUARE_INC = 13375\nVENDOR_ID_CARAMBOLE = 13376\nVENDOR_ID_CONCEPTIS_TECHNOLOGIES_INC = 13377\nVENDOR_ID_CONCRETIO_INDIA_PRIVATE_LIMITED = 13378\nVENDOR_ID_CRYSEC_GMBH = 13379\nVENDOR_ID_DOTSTAR_TECHNOLOGY = 13380\nVENDOR_ID_DRP_DATA = 13381\nVENDOR_ID_INTEC_INTERNATIONAL_GMBH = 13382\nVENDOR_ID_INTELEGO = 13383\nVENDOR_ID_LETINS_CORPORATION = 13384\nVENDOR_ID_MOUNT_SAINT_MARY_COLLEGE = 13385\nVENDOR_ID_NAGAR = 13386\nVENDOR_ID_NEUROSTAR_SOLUTIONS = 13387\nVENDOR_ID_TICOON_TECHNOLOGY_INC = 13388\nVENDOR_ID_WRAITH_COMPUTER_SYSTEMS = 13389\nVENDOR_ID_AV_AUTOMOTIVE_GROUP = 13390\nVENDOR_ID_CALLAWAY_GOLF = 13391\nVENDOR_ID_CAVENA_IMAGE_PRODUCTS_AB = 13392\nVENDOR_ID_CITE_SI = 13393\nVENDOR_ID_COLLIGO_NETWORKS = 13394\nVENDOR_ID_COMMERCEQUEST_INC = 13395\nVENDOR_ID_DANVILLE_ASSOCIATES = 13396\nVENDOR_ID_DEMANDTEC_INC = 13397\nVENDOR_ID_DR_RALF_SCHWEDLER_INTERNET_SICHERHEIT = 13398\nVENDOR_ID_DUNE_SEMICONDUCTOR = 13399\nVENDOR_ID_EMERSON_NETWORK_POWER_COLTD = 13400\nVENDOR_ID_ETE_SOFTWARE = 13401\nVENDOR_ID_EXENT_TECHNOLOGIES_LTD = 13402\nVENDOR_ID_FOTON_2000_KFT = 13403\nVENDOR_ID_FSONA_COMMUNICATIONS = 13404\nVENDOR_ID_INSIDE_PRODUCTS = 13405\nVENDOR_ID_INSTITUTE_OF_MEDICAL_AND_VETERINARY_SCIENCE = 13406\nVENDOR_ID_LINK2IT_CORP = 13407\nVENDOR_ID_MACROBYTE_RESOURCES = 13408\nVENDOR_ID_MEGA_SYSTEM_TECHNOLOGIES_INC = 13409\nVENDOR_ID_NATIONAL_PUBLIC_RADIO = 13410\nVENDOR_ID_MS_NEUMANN_ELEKTRONIK_GMBH = 13411\nVENDOR_ID_OPHIOS_GMBH = 13412\nVENDOR_ID_OLABISICOM = 13413\nVENDOR_ID_PAIRLINK = 13414\nVENDOR_ID_SCHLAGRAHM_GMBH = 13415\nVENDOR_ID_SECURITYMATRIX_INC = 13416\nVENDOR_ID_SILICON_BROADCASTS_INC = 13417\nVENDOR_ID_SKKU_INFORMATION_AND_COMUNICATION_LAB = 13418\nVENDOR_ID_SRS_SAKURA_INTERNET_INC = 13419\nVENDOR_ID_SURGITEC_PTE_LTD = 13420\nVENDOR_ID_TANGO_TELECOM_LIMITED = 13421\nVENDOR_ID_UNISCOPE = 13422\nVENDOR_ID_UNIVERSITE_DE_VALENCIENNESJEAN_LUC_PETIT_JEAN_GUY_AVELIN = 13423\nVENDOR_ID_UPC_NETHERLANDS = 13424\nVENDOR_ID_VIRTUAL_SPACE_RESEARCH = 13425\nVENDOR_ID_WZAB_SOFTWARE = 13426\nVENDOR_ID_ARTESYN_EMBEDDED_TECHNOLOGIES_FORMERLY_EMERSON_NETWORK_POWER = 13427\nVENDOR_ID_JAPAN_STORAGE_BATTERY_CO_LTD = 13428\nVENDOR_ID_QUEEN_ELIZABETH_SCHOOL_OLD_STUDENTS_ASSOCIATION = 13429\nVENDOR_ID_SHANGHAI_ONLINE_BUSSINESS_COLTD = 13430\nVENDOR_ID_A2E_LTD = 13431\nVENDOR_ID_CAMPUSEDGE_APARTMENTS = 13432\nVENDOR_ID_CODEZOMBIECOM = 13433\nVENDOR_ID_DYSER_SRL = 13434\nVENDOR_ID_GENERAL_MAGIC_INC = 13435\nVENDOR_ID_ICONTROLS_INC = 13436\nVENDOR_ID_LIBITS = 13437\nVENDOR_ID_LOGIC_EASTERNI_PVT_LTD = 13438\nVENDOR_ID_MELLE_SERVICE_GMBH = 13439\nVENDOR_ID_NETWORK_TELEPHONE = 13440\nVENDOR_ID_NORFOLK_SOUTHERN_CORP = 13441\nVENDOR_ID_OPENVES = 13442\nVENDOR_ID_OZIS = 13443\nVENDOR_ID_ROBERT_BIRD_AND_PARTNERS = 13444\nVENDOR_ID_SILICON_COCOON_PTYLTD = 13445\nVENDOR_ID_SINGAPORE_CABLE_VISION_LIMITED = 13446\nVENDOR_ID_THE_TRAINING_MANN = 13447\nVENDOR_ID_TRANSAT_TECHNOLOGIES_INC = 13448\nVENDOR_ID_TRUSDATACOM = 13449\nVENDOR_ID_TTS_TECNOLOGIA_E_SISTEMAS_LTDA = 13450\nVENDOR_ID_NETWORK_INFORMATION_CENTER_UNIVOF_BUAA = 13451\nVENDOR_ID_MY_LAN_GUYS = 13452\nVENDOR_ID_LANMIX_TECHNOLOGY_CO = 13453\nVENDOR_ID_HAYS_SUPPLY_CHAIN = 13454\nVENDOR_ID_DEUTSCHE_RENTENVERSICHERUNG_RECHENZENTRUM_LEIPZIG = 13455\nVENDOR_ID_AET_EUROPE_BV = 13456\nVENDOR_ID_ARM_HOLDINGS_PLC = 13457\nVENDOR_ID_ATMEDIA_GMBH = 13458\nVENDOR_ID_CAIS = 13459\nVENDOR_ID_COMELIS = 13460\nVENDOR_ID_EBSUCCESS_SOLUTIONS_INC = 13461\nVENDOR_ID_ESTEI = 13462\nVENDOR_ID_FORT_WAYNE_COMMUNITY_SCHOOLS = 13463\nVENDOR_ID_GREENNET_TECHNOLOGY_COLTD = 13464\nVENDOR_ID_INGATE_SYSTEMS_AB = 13465\nVENDOR_ID_JABBER_INC = 13466\nVENDOR_ID_MEDASYS = 13467\nVENDOR_ID_MONTCLAIR_STATE_UNIVERSITY = 13468\nVENDOR_ID_NETLIBRARY_INC = 13469\nVENDOR_ID_OTTO_SECURITY_SOFTWARE_TECHNOLOGIE_GMBH = 13470\nVENDOR_ID_POWERWAN_INC = 13471\nVENDOR_ID_RTS_REALTIMES_SYSTEMS_DEUTSCHLAND_AG = 13472\nVENDOR_ID_SAFEWEB_INC = 13473\nVENDOR_ID_SIERRA_SYSTEMS_GROUP_INC = 13474\nVENDOR_ID_SNAPTRACK_INC = 13475\nVENDOR_ID_TELEMANT_CORP = 13476\nVENDOR_ID_SHANGHAI_HAORUN_TECHNOLOGIES_LTD = 13477\nVENDOR_ID_CLEAR2TALK_LTD = 13478\nVENDOR_ID_DSTL = 13479\nVENDOR_ID_ANYWARE_TECHNOLOGY_INC = 13480\nVENDOR_ID_APPLOAD_NORDIC_AB = 13481\nVENDOR_ID_ATL_TELECOM = 13482\nVENDOR_ID_AVIRI = 13483\nVENDOR_ID_CHOICE_ONE_COMMUNICATIONS = 13484\nVENDOR_ID_COMINDICO = 13485\nVENDOR_ID_PRINCETON_UNIVERSITY = 13486\nVENDOR_ID_CORVU_CORPORATION = 13487\nVENDOR_ID_DNCP_LLC = 13488\nVENDOR_ID_EASTERN_GOLDFIELDS_SENIOR_HIGH_SCHOOL = 13489\nVENDOR_ID_EPLICATION = 13490\nVENDOR_ID_EUROMACC_LTD = 13491\nVENDOR_ID_FIRST_DATA_MERCHANT_SERVICES = 13492\nVENDOR_ID_GLOBAL_SCIENCE_TECHNOLOGY_INC = 13493\nVENDOR_ID_ILLINOIS_MATHEMATICS_AND_SCIENCE_ACADEMY = 13494\nVENDOR_ID_INAT_GMBH = 13495\nVENDOR_ID_INSTITUTE_OF_INFORMATICS_SLOVAK_ACADEMY_OF_SCIENCES = 13496\nVENDOR_ID_IT3_CONSULTANTS = 13497\nVENDOR_ID_KKE_INC = 13498\nVENDOR_ID_METODA_SPA = 13499\nVENDOR_ID_MPL_AG = 13500\nVENDOR_ID_NEXSTAR_FINANCIAL_CORPORATION = 13501\nVENDOR_ID_ONESQUARED = 13502\nVENDOR_ID_ORCHESTRIA_LIMITED = 13503\nVENDOR_ID_POLKOMTEL_SA = 13504\nVENDOR_ID_PROCOS_AG = 13505\nVENDOR_ID_PSIONIC_SOFTWARE_INC = 13506\nVENDOR_ID_RADCOM_SOFTWARE_ROMANIA = 13507\nVENDOR_ID_SIGDCI = 13508\nVENDOR_ID_SKY_COMPUTERS = 13509\nVENDOR_ID_SOMOMA_COUNTY_WATER_AGENCY = 13510\nVENDOR_ID_SPACEIP = 13511\nVENDOR_ID_TEAMWARRIOR_LTD = 13512\nVENDOR_ID_THE_TECHNOLOGY_PARTNER = 13513\nVENDOR_ID_UNASSIGNED_18 = 13514\nVENDOR_ID_UNITECH_NETWORKS_LTD = 13515\nVENDOR_ID_VILOKE_OY = 13516\nVENDOR_ID_XIAN_JIAOTONG_UNIVERSITY = 13517\nVENDOR_ID_ABN_AMRO_NL_CCC = 13518\nVENDOR_ID_AMSOFT_SYSTEMS_INDIA_INC = 13519\nVENDOR_ID_BIZWEBAPPS = 13520\nVENDOR_ID_SYSNIGHT = 13521\nVENDOR_ID_ACCOUNT_SYNCHRONIZATION_PROJECT = 13522\nVENDOR_ID_AUSTRALIAN_INDUSTRY_GROUP = 13523\nVENDOR_ID_BARHAM_HOUSE_PUBLISHING_INC = 13524\nVENDOR_ID_BLARG_ONLINE_SERVICES_INC = 13525\nVENDOR_ID_CLICKMARKS_INC = 13526\nVENDOR_ID_DIGITASARU = 13527\nVENDOR_ID_DLESE = 13528\nVENDOR_ID_DREAMLAN_NETWORK_CONSULTING_LTD = 13529\nVENDOR_ID_FAHNESTOCK_CO = 13530\nVENDOR_ID_MIER_COMUNICACIONES_SA = 13531\nVENDOR_ID_PENNANT_SYSTEMS = 13532\nVENDOR_ID_PETR_ZAHRADNIK_COMPUTER_LABORATORY = 13533\nVENDOR_ID_PROTEUS_MOBILE_INC = 13534\nVENDOR_ID_IONPIPE_INC = 13535\nVENDOR_ID_SEROME_TECHNOLOGY_INC = 13536\nVENDOR_ID_SHINE_GLOBAL = 13537\nVENDOR_ID_VIDEOBUREAU_INC = 13538\nVENDOR_ID_VOORHOUT_DATA_CONNECTION_BV = 13539\nVENDOR_ID_SHENZHEN_KEYBRIDGE_COMMUNICATIONS_COLTD = 13540\nVENDOR_ID_DBV_WINTERTHUR_VERSICHERUNGEN = 13541\nVENDOR_ID_DATAPAC_SRO = 13542\nVENDOR_ID_100_PERCENT_IT_LTD = 13543\nVENDOR_ID_ACOPIA_NETWORKS_INC = 13544\nVENDOR_ID_ADVERB_SOFTWARE = 13545\nVENDOR_ID_ALTA_A_S = 13546\nVENDOR_ID_AXIOM_SYSTEMS_LIMITED = 13547\nVENDOR_ID_BAKBONE_SOFTWARE_INC = 13548\nVENDOR_ID_BANQUE_DE_FRANCE = 13549\nVENDOR_ID_CELSTREAM_TECHNOLOGIES = 13550\nVENDOR_ID_COFUNDS_LTD = 13551\nVENDOR_ID_CQG_INC = 13552\nVENDOR_ID_CYBER_SPACE_SYSTEMS_INC = 13553\nVENDOR_ID_DTN_SPEEDNET_SERVICES_LLC = 13554\nVENDOR_ID_ENTERPRISE_BUSINESS_SOLUTIONS = 13555\nVENDOR_ID_FILTRONIC_PLC = 13556\nVENDOR_ID_FLOORGRAPHICS_INC = 13557\nVENDOR_ID_GARY_REYNOLDS = 13558\nVENDOR_ID_GLOBAL_TECHNOLOGY_ASSOCIATES_INC = 13559\nVENDOR_ID_GRANT_COUNTY_PUD_2 = 13560\nVENDOR_ID_GRIFFITH_UNIVERSITY = 13561\nVENDOR_ID_INFORMATION_SCIENCES_INSTITUTE_USC = 13562\nVENDOR_ID_INTEGRATED_SOFTWARE_TECHNOLOGIES_INC = 13563\nVENDOR_ID_LOGISTIK_WORLD_GMBH = 13564\nVENDOR_ID_LUCENT_TECHNOLOGIES_INDIA_LTD = 13565\nVENDOR_ID_NEOLYTICA = 13566\nVENDOR_ID_UBIQUBE_SOLUTIONS = 13567\nVENDOR_ID_NEUSTAR_INC = 13568\nVENDOR_ID_OIZ = 13569\nVENDOR_ID_SECURITY_INTEGRATION_INC = 13570\nVENDOR_ID_TESIS_SYSWARE_GMBH = 13571\nVENDOR_ID_TJEDWARDS = 13572\nVENDOR_ID_TRAN_EMPIRE_INDUSTRIES = 13573\nVENDOR_ID_TVG_TECHNOLOGIES_LTD = 13574\nVENDOR_ID_UNIVERSITY_OF_WINDSOR = 13575\nVENDOR_ID_WAGO_KONTAKTTECHNIK_GMBH = 13576\nVENDOR_ID_YOUJIN = 13577\nVENDOR_ID_APOGEE_SOLUTIONS = 13578\nVENDOR_ID_LMN_ASSOCIATES = 13579\nVENDOR_ID_EUROP_ASSISTANCE_FRANCE = 13580\nVENDOR_ID_TAMAGAWA_UNIV = 13581\nVENDOR_ID_NORDIJA_A_S = 13582\nVENDOR_ID_UCBIRL = 13583\nVENDOR_ID_SCHERING_AG = 13584\nVENDOR_ID_MANGALORE_REFINERY_AND_PETROCHEMICALS_LIMITED = 13585\nVENDOR_ID_WOODSIDE_NETWORKS_INC = 13586\nVENDOR_ID_UNIVERSITE_DE_FRANCHE_COMTE = 13587\nVENDOR_ID_ACEGI_TECHNOLOGY_PTY_LIMITED = 13588\nVENDOR_ID_AIR_TRAFFIC_CONTROL_BUSINESS_SYSTEMS_GMBH = 13589\nVENDOR_ID_AMERICREDIT_CORP = 13590\nVENDOR_ID_BE_INTELLIGENT_SYSTEMS = 13591\nVENDOR_ID_BLUNK_MICROSYSTEMS = 13592\nVENDOR_ID_COMMERCEFLOW_INC = 13593\nVENDOR_ID_COMPANY_WATCH_LIMITED = 13594\nVENDOR_ID_EMKA_ELECTRONIC_AG = 13595\nVENDOR_ID_FACHHOCHSCHULE_BINGEN = 13596\nVENDOR_ID_FEIS_UNIVERSITY_OF_HERTFORDSHIRE = 13597\nVENDOR_ID_GENERAL_DYNAMICS_CANADA = 13598\nVENDOR_ID_GOLDEN_TRIANGLE_ONLINE = 13599\nVENDOR_ID_GREENMOKEYNET = 13600\nVENDOR_ID_HWA_CHONG_JUNIOR_COLLEGE = 13601\nVENDOR_ID_IS4_O = 13602\nVENDOR_ID_KPNQWEST_CZECHIA_SRO = 13603\nVENDOR_ID_LIBERATE_TECHNOLOGIES = 13604\nVENDOR_ID_MAVERICK_WORKGROUP = 13605\nVENDOR_ID_NICOMAQUE = 13606\nVENDOR_ID_UNASSIGNED_19 = 13607\nVENDOR_ID_OPENHANDHOME_INC = 13608\nVENDOR_ID_PALLADIUM_CONSULTING_INC = 13609\nVENDOR_ID_Q_SOLUTIONS = 13610\nVENDOR_ID_RBC_DATA = 13611\nVENDOR_ID_SCHLUND_PARTNER_AG = 13612\nVENDOR_ID_STRATAVERIO = 13613\nVENDOR_ID_TARTU_KRGEM_KUNSTIKOOL = 13614\nVENDOR_ID_TH = 13615\nVENDOR_ID_THALES_SYSTEM_INTEGRATION_GMBH = 13616\nVENDOR_ID_THOSE_INTERACTIVE_GUYS = 13617\nVENDOR_ID_TRANSIM_TECHNOLOGY_CORP = 13618\nVENDOR_ID_UNDERCOVERWEAR_COLLECTION = 13619\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_EAU_CLAIRE = 13620\nVENDOR_ID_WIND_TELECOM = 13621\nVENDOR_ID_YAINA = 13622\nVENDOR_ID_POINT_IT_GMBH = 13623\nVENDOR_ID_EASTCOM_BUPT_INFORMATION_TECHNOLOGY_COLTD = 13624\nVENDOR_ID_POHLCITYDE = 13625\nVENDOR_ID_RASTEL = 13626\nVENDOR_ID_NETFOR_INC = 13627\nVENDOR_ID_SERCON_GMBH = 13628\nVENDOR_ID_AGTECH_NETWORK_SERVICE = 13629\nVENDOR_ID_AFX_NEWS_LTD = 13630\nVENDOR_ID_ARAX_COMMUNICATIONS = 13631\nVENDOR_ID_ATOMIX_DESIGN = 13632\nVENDOR_ID_AVA_AFZAR_CO = 13633\nVENDOR_ID_BB_COMPUTERSYSTEME_GBR = 13634\nVENDOR_ID_BSWS = 13635\nVENDOR_ID_CORESTREET_LTD = 13636\nVENDOR_ID_CRESENT_SOFTWARE_PRODUCTS_PVT_LTD = 13637\nVENDOR_ID_EXPERT_SYSTEMS_IVR_ASIA_CO_LTD = 13638\nVENDOR_ID_FIBROTEC = 13639\nVENDOR_ID_JON_WOOD = 13640\nVENDOR_ID_KREMLIN_COMPUTING_LIMITED = 13641\nVENDOR_ID_LITAS_SRO = 13642\nVENDOR_ID_MIMOS_BERHAD = 13643\nVENDOR_ID_NETGATE = 13644\nVENDOR_ID_OKB_MEI = 13645\nVENDOR_ID_ONINIT_LTD = 13646\nVENDOR_ID_OSTSEE_ZEITUNG_GMBH_CO_KG = 13647\nVENDOR_ID_POINTRED_TECHNOLOGIES_INC = 13648\nVENDOR_ID_POLIZEI_RHEINLAND_PFALZ = 13649\nVENDOR_ID_RELATIVITY = 13650\nVENDOR_ID_REXKRAMER = 13651\nVENDOR_ID_SEOUL_MOBILE_TELECOM_INC = 13653\nVENDOR_ID_SHENZHEN_XIFENG_NETWORK_TECHNOLOGIES_COLTD = 13654\nVENDOR_ID_SPACEMONSTER_GAMING_NETWORK = 13655\nVENDOR_ID_SUNNYBELL_TECHNOLOGY = 13656\nVENDOR_ID_TANGO_SA = 13657\nVENDOR_ID_TEDDYS_NETWORK = 13658\nVENDOR_ID_THE_WORLEY_COMPANIES = 13659\nVENDOR_ID_US_ARMY_CECOM = 13660\nVENDOR_ID_UMIST = 13661\nVENDOR_ID_UNIVERSIDAD_DE_PALERMO = 13662\nVENDOR_ID_VRGROUPCOM = 13663\nVENDOR_ID_VSS_KB_AS = 13664\nVENDOR_ID_WEBS_AREUS = 13665\nVENDOR_ID_WOLF_HILL_SRO = 13666\nVENDOR_ID_WOZZLE_INTERNET_SOLUTIONS = 13667\nVENDOR_ID_YES_TECHNOLOGY = 13668\nVENDOR_ID_CUBIC_TRANSPORTATION_SYSTEMS_INC = 13669\nVENDOR_ID_SAN_DIEGO_DATA_PROCESSING_CORPORATION = 13670\nVENDOR_ID_TECHTV = 13671\nVENDOR_ID_GENERAL_DYNAMICS_DECISION_SYSTEMS_SECURE_PRODUCTS = 13672\nVENDOR_ID_INTERNET_CZSTOCHOWA = 13673\nVENDOR_ID_PESA_SWITCHING_SYSTEMS_INC = 13674\nVENDOR_ID_BANDWAVE_INTERNET = 13675\nVENDOR_ID_FRENCH_DATA_NETWORK = 13676\nVENDOR_ID_KB_TEL_TELECOMUNICACIONES_SA_DE_CV = 13677\nVENDOR_ID_ACTER_AG = 13678\nVENDOR_ID_ALTIGEN_COMMUNICATIONS_INC = 13679\nVENDOR_ID_AVIVA_SOLUTIONS_INC = 13680\nVENDOR_ID_CHILDLOCK_SOLUTIONS = 13681\nVENDOR_ID_ECOLE_DES_MINES_DE_NANTES = 13682\nVENDOR_ID_EFTECHNOLOGIES_INC = 13683\nVENDOR_ID_ELPROMA_ELEKTRONIKA = 13684\nVENDOR_ID_FACULTY_OF_MATHEMATICS_AND_COMPUTER_SCIENCE_NICHOLAS_COPERNICUS_UNIVERSITY_OF_TORUN = 13685\nVENDOR_ID_GO_WIN = 13686\nVENDOR_ID_HUMBOLDT_UNIVERSITAET_ZU_BERLIN = 13687\nVENDOR_ID_ICEQUAKE_NETWORKS = 13688\nVENDOR_ID_IN_TOWN_CONSULTING_LLC = 13689\nVENDOR_ID_MADRAS_COMPUTER_VERTRIEBSGESMBH = 13690\nVENDOR_ID_MAISON_DEN_FRANCE = 13691\nVENDOR_ID_MEDIFACE = 13692\nVENDOR_ID_MIRAGE_NETWORKS_INC = 13693\nVENDOR_ID_NERVUS_SYSTEMS_LTD = 13694\nVENDOR_ID_NEUROSPHERE_CONSULTING = 13695\nVENDOR_ID_OHIO_WESLEYAN_UNIVERSITY = 13696\nVENDOR_ID_PAUL_DLUG = 13697\nVENDOR_ID_RUNCIRCLE_LTD = 13698\nVENDOR_ID_SARVEGA_INC = 13699\nVENDOR_ID_SCALE_EIGHT = 13700\nVENDOR_ID_SONIC_SOFTWARE = 13701\nVENDOR_ID_STORE_MEDIA_ENGINEERING = 13702\nVENDOR_ID_SUNDATACOM_PVTLTD = 13703\nVENDOR_ID_TNO = 13704\nVENDOR_ID_UNIVERSITAS_INDONESIA = 13705\nVENDOR_ID_VOLVO_EVENT_MANAGEMENT = 13706\nVENDOR_ID_WASILIANA_SOLUTIONS = 13707\nVENDOR_ID_AIC_NETWORK = 13708\nVENDOR_ID_THE_BANK_OF_NEW_YORK = 13709\nVENDOR_ID_LVM_VERSICHERUNGEN = 13710\nVENDOR_ID_PRIMUS_TELECOMMUNICATIONS_AUSTRALIA_PTY_LTD = 13711\nVENDOR_ID_ARINC_AERONAUTICAL_RADIO_INC_ROY_L_COURTNEY = 13712\nVENDOR_ID_GATEWEAVER = 13713\nVENDOR_ID_REEA = 13714\nVENDOR_ID_ALESCERE = 13715\nVENDOR_ID_CAJA_MADRID = 13716\nVENDOR_ID_CARREKER_CORPORATION = 13717\nVENDOR_ID_CCITRIAD = 13718\nVENDOR_ID_CEGETEL_SI = 13719\nVENDOR_ID_COREMEDIA_AG = 13720\nVENDOR_ID_CORNING_CABLE_SYSTEMS = 13721\nVENDOR_ID_DEOTNET = 13722\nVENDOR_ID_DIVISION_OF_BITL = 13723\nVENDOR_ID_ERASMUS_UNIVERSITY_ROTTERDAM = 13724\nVENDOR_ID_EURONETICS = 13725\nVENDOR_ID_FH_BONN_RHEIN_SIEG = 13726\nVENDOR_ID_FUNDAO_CPQD_CENTRO_DE_PESQUISA_E_DESENVOLVIMENTO_EM_TELECOMUNICAES = 13727\nVENDOR_ID_FUNDACI_APLICACI = 13728\nVENDOR_ID_FUNKTIONAL_SOLUTIONS_GROUP = 13729\nVENDOR_ID_GEOBOT_INC = 13730\nVENDOR_ID_HUTH_ENGINEERING_INC = 13731\nVENDOR_ID_IDIRECT = 13732\nVENDOR_ID_IMSERV_EUROPE_LTD = 13733\nVENDOR_ID_INSTITUT_FUER_THEORIE_DER_ELEKTROTECHNIK_UNIVERSITAET_STUTTGART = 13734\nVENDOR_ID_INTEGRA5_LTD = 13735\nVENDOR_ID_MANUFACTURE_DES_MONTRES_ROLEX_SA = 13736\nVENDOR_ID_MARK_WILCOX_ASSOCIATES = 13737\nVENDOR_ID_MINDMATICS_AG = 13738\nVENDOR_ID_PACESETTER_ELECTRONICS = 13739\nVENDOR_ID_POPWIRE_TECHNOLOGY_AB = 13740\nVENDOR_ID_PROINOS_INC = 13741\nVENDOR_ID_RARITAN_COMPUTER_INC = 13742\nVENDOR_ID_SGTE_IES = 13743\nVENDOR_ID_SKYTEL_INC = 13744\nVENDOR_ID_PLIXER_INTERNATIONAL_INC_FORMERLY_SOMIX_TECHNOLOGIES_INC = 13745\nVENDOR_ID_UNIVERSITY_OF_DETROIT_MERCY = 13746\nVENDOR_ID_VIRTUAL_HEALTH_NETWORKS_INC = 13747\nVENDOR_ID_WIZZBIT = 13748\nVENDOR_ID_MADISON_CONSULTING_INC = 13749\nVENDOR_ID_JUERGEN_WEBER_UNTERNEHMENSBERATUNG = 13750\nVENDOR_ID_AGY_THERAPEUTICS_INCORPORATED = 13751\nVENDOR_ID_AMARNA_SOFTWARE_PRODUCTIONS = 13752\nVENDOR_ID_ASCENT_COMPUTING_GROUP_INC = 13753\nVENDOR_ID_BANCO_ZARAGOZANO = 13754\nVENDOR_ID_CARLETON_COLLEGE = 13755\nVENDOR_ID_C_LOG_INTERNATIONAL = 13756\nVENDOR_ID_COXNET = 13757\nVENDOR_ID_CR_TEAMDE = 13758\nVENDOR_ID_EXAMEN_INC = 13759\nVENDOR_ID_FOURTH_HOUSE_SECURITY_INC = 13760\nVENDOR_ID_GLENCORE_INTERNATIONAL_AG = 13761\nVENDOR_ID_INNOVERY = 13762\nVENDOR_ID_JOHANNES_PASSING_SOFTWAREENTWICKLUNG = 13763\nVENDOR_ID_KHODAYSS_SYSTEMS_LIMITED = 13764\nVENDOR_ID_LIFE_TIME_FITNESS_INC = 13765\nVENDOR_ID_LOEWE_OPTA_GMBH = 13766\nVENDOR_ID_METALOGUE_COMMUNICATIONS = 13767\nVENDOR_ID_MOVARIS = 13768\nVENDOR_ID_MOZILLAORG = 13769\nVENDOR_ID_MTA_SOLUTIONS = 13770\nVENDOR_ID_NAVIC_SYSTEMS_INC_D_B_A_NAVIC_NETWORKS_INC = 13771\nVENDOR_ID_NPULSE_SOFTWARE_INC = 13772\nVENDOR_ID_NTELOS_INC = 13773\nVENDOR_ID_ONETTA_INC = 13774\nVENDOR_ID_POMONA_COLLEGE = 13775\nVENDOR_ID_POTLATCH_CORPORATION = 13776\nVENDOR_ID_RAKUTEN_INC = 13777\nVENDOR_ID_SOCIEDADE_DIGINET_LDAJACQUES = 13778\nVENDOR_ID_SUMIX_CORPORATION = 13779\nVENDOR_ID_UBERNUL_PROJEKT = 13780\nVENDOR_ID_UNIVERSITE_DAUVERGNE = 13781\nVENDOR_ID_UNIVERSITY_OF_DORTMUND_DEPARTMENT_OF_MATHEMATICS = 13782\nVENDOR_ID_VIKING_SOCIETY_OF_SA = 13783\nVENDOR_ID_WHIDBEYNET = 13784\nVENDOR_ID_YH = 13785\nVENDOR_ID_ZP_SYSTEM = 13786\nVENDOR_ID_PAGEMAIL_INC = 13787\nVENDOR_ID_DEV_LABS_LTD = 13788\nVENDOR_ID_INNOVATIONS_GMBH = 13789\nVENDOR_ID_U_KING_COMMUNICATIONS_CORP = 13790\nVENDOR_ID_ASSOCIAO_DOS_ESTUDANTES = 13791\nVENDOR_ID_ACTIVE_TELECOM_2 = 13792\nVENDOR_ID_ACUMEN_SCIENCES_LLC = 13793\nVENDOR_ID_BEIJING_EDUCATIONAL_INFORMATION_NETWORK = 13794\nVENDOR_ID_BLUE_EDGE_BULGARIA = 13795\nVENDOR_ID_CALIARI_RESEARCH_SPA_NICOLA = 13796\nVENDOR_ID_CIRAD = 13797\nVENDOR_ID_GLOBENET = 13798\nVENDOR_ID_INTERNET_78 = 13799\nVENDOR_ID_IS_SERVICES = 13800\nVENDOR_ID_IUFM_DES_PAYS_DE_LA_LOIRE = 13801\nVENDOR_ID_MUNDEE_INTERNET_SERVICES = 13802\nVENDOR_ID_NAVAJO_LAW_ENFORCEMENT_TRAINING_ACADEMY = 13803\nVENDOR_ID_PONTIFICAL_COLLEGE_JOSEPHINUM = 13804\nVENDOR_ID_SOUTHLAND_CHRISTIAN_CHURCH = 13805\nVENDOR_ID_SYSOPEN_PLC = 13806\nVENDOR_ID_TPACK = 13807\nVENDOR_ID_UBERNUL_PROJEKT_2 = 13808\nVENDOR_ID_UNIVERSIT_JEAN_MONNET_SAINT_ETIENNE = 13809\nVENDOR_ID_UNIVERSITY_OF_ALASKA = 13810\nVENDOR_ID_ISRAEL_DISCOUNT_BANK = 13811\nVENDOR_ID_SMARTPRICE_SA = 13812\nVENDOR_ID_EVALESCO_SYSTEMS_APS = 13813\nVENDOR_ID_ALFA_MEDIA_PARTNER_GMBH = 13814\nVENDOR_ID_ANGEL_IGLESIAS_SA = 13815\nVENDOR_ID_APPSENSE_TECHNOLOGIES = 13816\nVENDOR_ID_AUSWRTIGES_AMT = 13817\nVENDOR_ID_BHI = 13818\nVENDOR_ID_BTI_COMMUNICATIONS_CO = 13819\nVENDOR_ID_CESKY_TELECOM_AS = 13820\nVENDOR_ID_CNI_PRAIRIENET = 13821\nVENDOR_ID_COMMAND_SOFTWARE_SYSTEMS_INC = 13822\nVENDOR_ID_COMTARSIA_IT_SERVICES = 13823\nVENDOR_ID_CONSUS_LTD = 13824\nVENDOR_ID_CRISP_HUGHES_EVANS_LLP_2 = 13825\nVENDOR_ID_DEPT_OF_VETERANS_AFFAIRS = 13826\nVENDOR_ID_ENDRUN_TECHNOLOGIES_LLC = 13827\nVENDOR_ID_ETM_INTERNATIONAL_AUSTRIA = 13828\nVENDOR_ID_FLECHA_DE_LIMA_ASSOCIADOS = 13829\nVENDOR_ID_GED_SOFTWARE = 13830\nVENDOR_ID_GEO_MARINE_INC = 13831\nVENDOR_ID_THE_GO_DADDY_GROUP_INC = 13832\nVENDOR_ID_GOBIERNO_DE_CANARIAS = 13833\nVENDOR_ID_IMACH_LTD = 13834\nVENDOR_ID_INET_LOGISTICS_GMBH = 13835\nVENDOR_ID_INFORMATION_AND_LOGISTICS_CONSULTANCY = 13836\nVENDOR_ID_INTROTEC = 13837\nVENDOR_ID_KADEL_DATA_SERVIS_SRO = 13838\nVENDOR_ID_MARKITSERVFX_FORMERLY_LOGICSCOPE_REALISATIONS_LTD = 13839\nVENDOR_ID_MEDIA_DRIVER_LLC = 13840\nVENDOR_ID_METILINX = 13841\nVENDOR_ID_MOSER_BAER_AG = 13842\nVENDOR_ID_NED_DAVIS_RESEARCH_GROUP = 13843\nVENDOR_ID_NORTH_EAST_WORCESTERSHIRE_COLLEGE = 13844\nVENDOR_ID_OHIO_NORTHERN_UNIVERSITY = 13845\nVENDOR_ID_PATIENTKEEPER_INC = 13846\nVENDOR_ID_PEARCO_SERVICES = 13847\nVENDOR_ID_RNIXCOM = 13848\nVENDOR_ID_SEPRO_TELECOM = 13849\nVENDOR_ID_STATIC = 13850\nVENDOR_ID_SWISSCOM_IT_SERVICES_AG = 13851\nVENDOR_ID_TOPOLOGICA = 13852\nVENDOR_ID_TULARIK = 13853\nVENDOR_ID_UNIVERSITAET_MANNHEIM_RECHENZENTRUM = 13854\nVENDOR_ID_UNIVERSITAET_OLDENBURG = 13855\nVENDOR_ID_UNIVERSITY_OF_MICHIGAN_HEALTH_SYSTEM = 13856\nVENDOR_ID_URSYS_PTY_LTD = 13857\nVENDOR_ID_ELTEK_VALERE_INC_FORMERLY_VALERE_POWER_INC = 13858\nVENDOR_ID_VOXPILOT = 13859\nVENDOR_ID_WASKO = 13860\nVENDOR_ID_WOLF_IT_CONCEPTS = 13861\nVENDOR_ID_XTEC_INCORPORATED = 13862\nVENDOR_ID_AIRWOLF_SYSTEMS_INC = 13863\nVENDOR_ID_MAMINOS_INC = 13864\nVENDOR_ID_UNIVERSIT_CHARLES_DE_GAULLE_LILLE_3 = 13865\nVENDOR_ID_ACE_TIMING = 13866\nVENDOR_ID_ADFINIS_SYGROUP_AG = 13867\nVENDOR_ID_BAHRAIN_CREDIT = 13868\nVENDOR_ID_BLUM_CAPITAL_PARTNERS_LP = 13869\nVENDOR_ID_CORPORATE_OXYGEN = 13870\nVENDOR_ID_FALCON_SOFTWARE_NV = 13871\nVENDOR_ID_FEDERAL_UNIVERSITY_OF_SAO_PAULO = 13872\nVENDOR_ID_FMC = 13873\nVENDOR_ID_GOEPPNET = 13874\nVENDOR_ID_INTERACT = 13875\nVENDOR_ID_IONIC_PRODUCTIONS_LLC = 13876\nVENDOR_ID_KANDA_TSUSHIN_KOGYO_CO_LTD = 13877\nVENDOR_ID_KARIBOO_TECHNOLOGIES_SA = 13878\nVENDOR_ID_NATURAL_SOFT_SA = 13879\nVENDOR_ID_ADS_NETWORKS_PVT_LTD = 13880\nVENDOR_ID_NEOBEENET = 13881\nVENDOR_ID_NETILLA_NETWORKS = 13882\nVENDOR_ID_NEW_MORNING_WINDOWS = 13883\nVENDOR_ID_PEPCO_AS = 13884\nVENDOR_ID_POLYCOM_INC = 13885\nVENDOR_ID_PROSODIC_COMMUNICATIONS_INC = 13886\nVENDOR_ID_RED_ROBY_SOFTWARE_INC = 13887\nVENDOR_ID_SOUTH_TEXAS_LIGHTHOUSE_FOR_THE_BLIND = 13888\nVENDOR_ID_SPRIRAL_DESIGNS_INC = 13889\nVENDOR_ID_TELTIER_TECHNOLOGIES_INC = 13890\nVENDOR_ID_THE_ADVANTAGE_GROUP = 13891\nVENDOR_ID_UNIVERSITY_OF_NEW_HAMPSHIRE = 13892\nVENDOR_ID_INTERNATIONAL_TRUCK_AND_ENGINE_CORPORATION = 13893\nVENDOR_ID_LGNSYS = 13894\nVENDOR_ID_LAGRANGE_SCHOOL_DISTRICT_102 = 13895\nVENDOR_ID_ATOS_ORIGIN_CMS_TSP = 13896\nVENDOR_ID_ADVANCED_TECHNOLOGIES_LAB = 13897\nVENDOR_ID_ALEXANDER_HORSCH_UND_THOMAS_BALBACH_IT_SOLUTIONS = 13898\nVENDOR_ID_ANKA_SYSTEMS_INC = 13899\nVENDOR_ID_BLUE_GARGOYLE_CONSULTING_LLC = 13900\nVENDOR_ID_BROADWAVE_INC = 13901\nVENDOR_ID_BUSINESS_INTERNET_TRENDS = 13902\nVENDOR_ID_CAMH_PET_CENTRE = 13903\nVENDOR_ID_CAYMAS_SYSTEMS = 13904\nVENDOR_ID_CEMAGREF = 13905\nVENDOR_ID_CHANTRY_NETWORKS_INC = 13906\nVENDOR_ID_COMPERA = 13907\nVENDOR_ID_CROATIAN_PHYSICAL_SOCIETY_STUDENT_SECTION = 13908\nVENDOR_ID_CTTC_CENTRE_TECNOLGIC_DE_TELECOMUNICACIONS_DE_CATALUNYA = 13909\nVENDOR_ID_DAS_BRO_AM_DRAHT = 13910\nVENDOR_ID_EPSILON_DOO = 13911\nVENDOR_ID_EVEREST_CONNECTIONS = 13912\nVENDOR_ID_EVOTO_TEAM = 13913\nVENDOR_ID_FREAKYSOFT = 13914\nVENDOR_ID_HARRY_RTER_SOFTWARE_SOLUTIONS = 13915\nVENDOR_ID_HEIMAT_DI_ANDREA_ROTA = 13916\nVENDOR_ID_HOSTCENTRIC = 13917\nVENDOR_ID_INKASBANK = 13918\nVENDOR_ID_INSTINCT_INTERNET_SOLUTIONS = 13919\nVENDOR_ID_MAGIC_HOSTING = 13920\nVENDOR_ID_NEBS = 13921\nVENDOR_ID_NOLOGIN = 13922\nVENDOR_ID_PETER_VERHAS = 13923\nVENDOR_ID_POWELLS_BOOKSTORES = 13924\nVENDOR_ID_REAL_TIME_PRODUCTIONS = 13925\nVENDOR_ID_ROAD_TECH_COMPTER_SYSTEMS_LTD = 13926\nVENDOR_ID_SCCNET_SOHO_CONSULTING = 13927\nVENDOR_ID_TC_COMMUNICATIONS = 13928\nVENDOR_ID_TERAGEN_PTY_LTD = 13929\nVENDOR_ID_THE_AQUARIUS_NETWORK = 13930\nVENDOR_ID_UBERLAN_TECHNOLOGIES = 13931\nVENDOR_ID_VOGONNET = 13932\nVENDOR_ID_ALSTOM_TRANSPORT = 13933\nVENDOR_ID_MICCHI = 13934\nVENDOR_ID_100COMM = 13935\nVENDOR_ID_AEGIS_MORTGAGE_CORP = 13936\nVENDOR_ID_ART_GLOBAL_LIMITED = 13937\nVENDOR_ID_ASHTON_RAGGATT_MCDOUGALL = 13938\nVENDOR_ID_AUTOMATX = 13939\nVENDOR_ID_COE_LTD = 13940\nVENDOR_ID_COMMUNICATOR_INC = 13941\nVENDOR_ID_CANDERA_INC = 13942\nVENDOR_ID_DATANET = 13943\nVENDOR_ID_DENALI_SA = 13944\nVENDOR_ID_DEUTSCHE_FORSCHUNGSGEMEINSCHAFT = 13945\nVENDOR_ID_EDUCATIONAL_SYSTEMS_LTD = 13946\nVENDOR_ID_EEMA = 13947\nVENDOR_ID_EXOSTAR_LLC = 13948\nVENDOR_ID_FRANK_EDV_SERVICE_GESELLSCHAFT_MBH = 13949\nVENDOR_ID_GALILEO_INC = 13950\nVENDOR_ID_GENTEK_MARKETING_INC = 13951\nVENDOR_ID_GLOBAL_SUN_TECHNOLOGY = 13952\nVENDOR_ID_HELIOGRAPH_LIMITED = 13953\nVENDOR_ID_IT_GUARDIAN_LTD = 13954\nVENDOR_ID_JPCONSULTING = 13955\nVENDOR_ID_KATCH_NETWORK_INC = 13956\nVENDOR_ID_LIQUIDSITE_INC = 13957\nVENDOR_ID_MN_RAMOS_FERREIRA_ELECTRICIDADE_E_MECNICA_LDA = 13958\nVENDOR_ID_MLA_POWER_SYSTEMS = 13959\nVENDOR_ID_NESTAR = 13960\nVENDOR_ID_NLIP_DUTCH_ISP_ASSOCIATION = 13961\nVENDOR_ID_QOS_LABS = 13962\nVENDOR_ID_RVR_ELETTRONICA_SPA = 13963\nVENDOR_ID_SWCS_CHAN_PAK_SHA_SCHOOL = 13964\nVENDOR_ID_TPGPOST = 13965\nVENDOR_ID_UNIVERSITY_OF_BATH = 13966\nVENDOR_ID_VAPORWARE = 13967\nVENDOR_ID_VERLAG_FUR_NEUE_MEDIEN = 13968\nVENDOR_ID_VOXSIS_INFORMTICA = 13969\nVENDOR_ID_AEROSTRONG_SCIENCE_TECHNOLOGY_CO_LTD = 13970\nVENDOR_ID_CHINABIZONE_INFOMATION_TECHNOLOGY_CO_LTD = 13971\nVENDOR_ID_VARGA_LIMITED = 13972\nVENDOR_ID_INVESTIR_PUBLICATIONS = 13973\nVENDOR_ID_EPIGENOMICS_AG = 13974\nVENDOR_ID_NAVAL_GLOBAL_DIRECTORY_SERVICE = 13975\nVENDOR_ID_INTERAKTIVNA_CONSULTING = 13976\nVENDOR_ID_SHAYNE_ENTERPRISES = 13977\nVENDOR_ID_GUARDEDNET_INC = 13978\nVENDOR_ID_MINTACT_SOFTWARE_INC_FORMERLY_COMPUCS_INC = 13979\nVENDOR_ID_PLATINUM_WEB_PAGES = 13980\nVENDOR_ID_INGCHEM = 13981\nVENDOR_ID_FIBRESPEED_LTD = 13982\nVENDOR_ID_WWR_DEVELOPMENT_INC = 13983\nVENDOR_ID_CYBRICK_INFORMATION_SYSTEMS = 13984\nVENDOR_ID_TAE_KWANG_INDUSTRIAL_CO_LTD = 13985\nVENDOR_ID_LARRY_DRUMMONDCONSULTING_ENGINEER = 13986\nVENDOR_ID_C_PLATH_GMBH = 13987\nVENDOR_ID_TELE_AKADEMIE_DER_FACHHOCHSCHULE_FURTWANGEN = 13988\nVENDOR_ID_MARKUS_HEIDEN_SAP_EC_CONSULTING = 13989\nVENDOR_ID_COLOMA_COMMUNITY_SCHOOLS = 13990\nVENDOR_ID_ACCELLENCE_TECHNOLOGIES_GMBH = 13991\nVENDOR_ID_M_NET_SYS = 13992\nVENDOR_ID_ITWORX = 13993\nVENDOR_ID_STN_ATLAS_ELEKTRONIK_GMBH = 13994\nVENDOR_ID_AMPERION_INCORPORATED = 13995\nVENDOR_ID_KBOX = 13996\nVENDOR_ID_INVISIBLE_INDUSTRIES = 13997\nVENDOR_ID_CONCEPTUAL_MINDWORKS_INC = 13998\nVENDOR_ID_ITSNOTACOM = 13999\nVENDOR_ID_MICHAIL_KAMPRIANIS = 14000\nVENDOR_ID_DRS_TECHNOLOGIES_CANADA_LTD_FORMERLY_DRS_FLIGHT_SAFETY_AND_COMMUNICATIONS = 14001\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_WHITEWATER = 14002\nVENDOR_ID_SAINT_MARYS_COLLEGE = 14003\nVENDOR_ID_GAP_INC = 14004\nVENDOR_ID_KELLY = 14005\nVENDOR_ID_THOMAS_MELZER_SOFTWAREENTWICKLUNG = 14006\nVENDOR_ID_IMPACT_SCIENCE_TECHNOLOGY_INC = 14007\nVENDOR_ID_KT = 14008\nVENDOR_ID_ONSYNERGY_SOLUTIONS = 14009\nVENDOR_ID_CIRRUS_REAL_TIME_PROCESSING = 14010\nVENDOR_ID_CYBER_PROJECT = 14011\nVENDOR_ID_NET_SAFE_CO_LTD = 14012\nVENDOR_ID_TATA_CONSULTANCY_SERVICES = 14013\nVENDOR_ID_TP_EMITEL_SP_Z_OO = 14014\nVENDOR_ID_UNET_LTD = 14015\nVENDOR_ID_HG_FRANCE = 14016\nVENDOR_ID_FACHHOCHSCHULE_TECHNIKUM_WIEN = 14017\nVENDOR_ID_BRYAN_BELLAMY = 14018\nVENDOR_ID_BETRONIC_DESIGN_BV = 14019\nVENDOR_ID_ZENCOD = 14020\nVENDOR_ID_SHAPERS = 14021\nVENDOR_ID_ARACHNE_POLAND = 14022\nVENDOR_ID_KCOM_SERVICE_PROVIDER_NETWORK_FORMERLY_MISTRAL_INTERNET_GROUP = 14023\nVENDOR_ID_FISCUS_GMBH = 14024\nVENDOR_ID_LANDESVERSICHERUNGSANSTALT = 14025\nVENDOR_ID_SLAPDNET = 14026\nVENDOR_ID_RIVERNORTH_SYSTEMS_INC = 14027\nVENDOR_ID_REAL_TIME_ENGINEERING = 14028\nVENDOR_ID_NETZWERK_LEHMANN = 14029\nVENDOR_ID_SMARTOLOGY_VOF = 14030\nVENDOR_ID_STATO_MAGGIORE_DIFESA_COMANDO_C4 = 14031\nVENDOR_ID_SUNY_GENESEO = 14032\nVENDOR_ID_SAMART_INFO_MEDIA_COLTD = 14033\nVENDOR_ID_OU_ARTAXIS = 14034\nVENDOR_ID_CYBERSTAR = 14035\nVENDOR_ID_LINECOM_LTD = 14036\nVENDOR_ID_DASWLAB = 14037\nVENDOR_ID_KARNS_TECHNOLOGY = 14038\nVENDOR_ID_GAGLIANO_CIA = 14039\nVENDOR_ID_BRANDA_TECH = 14040\nVENDOR_ID_RAILWAY_INFORMATION_SYSTEMS_COLTD = 14041\nVENDOR_ID_FREUDENBERG_HAUSHALTSPRODUKTE_KF = 14042\nVENDOR_ID_SOCIEDAD_ANDALUZA_PARA_EL_DESARROLLO_DE_LA_SOCIEDAD_DE_LAINFORMACION_SAU = 14043\nVENDOR_ID_KERNFYSISCH_VERSNELLER_INSTITUUT = 14044\nVENDOR_ID_ISERVE_PTY_LTD = 14045\nVENDOR_ID_STATENS_BOSTADSFINANSIERINGS_AB = 14046\nVENDOR_ID_ISET = 14047\nVENDOR_ID_LYSE_ENERGI = 14048\nVENDOR_ID_PROACTIVETHOUGHT_TECHNOLOGIES_LTDINC = 14049\nVENDOR_ID_DESERT_ACADEMY_AT_SANTE_FE = 14050\nVENDOR_ID_NETMASTER_DIGITAL_SECURITY = 14051\nVENDOR_ID_PROFLUENT_SYSTEMS_AUSTRALIA = 14052\nVENDOR_ID_PROSUM_SOLUTIONS_LLC = 14053\nVENDOR_ID_FIBERCOM = 14054\nVENDOR_ID_IP_MOBILE_NET_INC = 14055\nVENDOR_ID_CEGELEC = 14056\nVENDOR_ID_LONGHILL_HIGH_SCHOOL = 14057\nVENDOR_ID_EXCOGITA_SRL = 14058\nVENDOR_ID_OBEROESTERREICHISCHE_VERSICHERUNG_AG = 14059\nVENDOR_ID_ENS_GMBH = 14060\nVENDOR_ID_CONECTIVA_SA = 14061\nVENDOR_ID_ESCRITORIO_JURIDICO_ALCALA_RHODE_ASOCIADOS = 14062\nVENDOR_ID_SEAFIRE_NETWORKS_INC = 14063\nVENDOR_ID_UC_BERKELEY_RESIDENTIAL_COMPUTING = 14064\nVENDOR_ID_SHANGHAI_FOCI_FIBER_OPTIC_COMMUNICATION_EQUIPMENTS_INC = 14065\nVENDOR_ID_PITAT = 14066\nVENDOR_ID_ALLIED_NETWORKS_GMBH = 14067\nVENDOR_ID_THUERINGER_NETKOM_GMBH_FORMERLY_TEAG_NETKOM_GMBH = 14068\nVENDOR_ID_SYNGENIO_AG = 14069\nVENDOR_ID_C3T = 14070\nVENDOR_ID_BOHR_UND_ROHRTECHNIK_GMBH = 14071\nVENDOR_ID_MISTRAL_SOFTWARE_PRIVATE_LTD = 14072\nVENDOR_ID_SMART_TECHNOLOGY = 14073\nVENDOR_ID_SHORCAN_BROKERS_LTD = 14074\nVENDOR_ID_RATIONAL_SOFTWARE_CORPORATION = 14075\nVENDOR_ID_MARSH_INC = 14076\nVENDOR_ID_ESIAL = 14077\nVENDOR_ID_ANECT_A_S = 14078\nVENDOR_ID_ACTIVE_TOOLS = 14079\nVENDOR_ID_BRIVO_SYSTEMS_INC = 14080\nVENDOR_ID_ARMSTRONG_WORLD_INDUSTRIES = 14081\nVENDOR_ID_UPLINK_COHERENT_SOLUTIONS = 14082\nVENDOR_ID_THOMAS_ENTERPRISES = 14083\nVENDOR_ID_COCHRAN_CONSULTING_INC = 14084\nVENDOR_ID_ADVFNCOM_PLC = 14085\nVENDOR_ID_ESHA_RESEARCH = 14086\nVENDOR_ID_ZULTYS_TECHNOLOGIES = 14087\nVENDOR_ID_NAVIS_LLC = 14088\nVENDOR_ID_CITY_OF_ONTARIO_OREGON = 14089\nVENDOR_ID_POWERVIEW_SYSTEMS = 14090\nVENDOR_ID_HAWKER_COLLEGE = 14091\nVENDOR_ID_UNIVERSITY_OF_RHODE_ISLAND = 14092\nVENDOR_ID_MEDIBASE_TECHNOLOGIES_CO_LTD = 14093\nVENDOR_ID_SNOW_BV = 14094\nVENDOR_ID_TECHDIRECTION = 14095\nVENDOR_ID_FORLINK_SOFTWARE_CORPORATION_INC = 14096\nVENDOR_ID_ITW_INFORMATIONSTECHNIK_GMBH = 14097\nVENDOR_ID_HOTELEQUIP_LTD = 14098\nVENDOR_ID_BUTCHWAX_SOFTWARE = 14099\nVENDOR_ID_WLAN_ALLIANCE_AB = 14100\nVENDOR_ID_DATSENOV_EA = 14101\nVENDOR_ID_DACORE_DATENBANKSYSTEME_AG = 14102\nVENDOR_ID_ICE_SYSTEMS = 14103\nVENDOR_ID_TETRONIK_GMBH_AEN = 14104\nVENDOR_ID_BUSINESS_INTERACTIF = 14105\nVENDOR_ID_SYNDICAT_INTERHOSPITALIER_DE_BRETAGNE = 14106\nVENDOR_ID_WIENSTROM = 14107\nVENDOR_ID_ODENSE_KOMMUNE = 14108\nVENDOR_ID_JAGUAR_CARS_LIMITED = 14109\nVENDOR_ID_ORIMOS = 14110\nVENDOR_ID_OXSPRING_NETWORK_SOLUTIONS_LTD = 14111\nVENDOR_ID_HZW_DESIGN = 14112\nVENDOR_ID_MAGNETEK = 14113\nVENDOR_ID_AEPONA_ENGLAND = 14114\nVENDOR_ID_PLATESPIN = 14115\nVENDOR_ID_TELECORE_INC = 14116\nVENDOR_ID_AOSTAR = 14117\nVENDOR_ID_HANOVER_COLLEGE = 14118\nVENDOR_ID_NETLIFE_AG = 14119\nVENDOR_ID_LETIFERORG = 14120\nVENDOR_ID_STONE_IT = 14121\nVENDOR_ID_WIRELESS_BROADBAND_ALLIANCE_LTD_FORMERLY_WI_FI_ALLIANCE = 14122\nVENDOR_ID_EXPERTCITY_INC = 14123\nVENDOR_ID_UK_CA_JN_JOINT_ASTRONOMY_CENTRE = 14124\nVENDOR_ID_SENAO_INTERNATIONAL_CO_LTD = 14125\nVENDOR_ID_NEW_WORLD_PCS_LIMITED = 14126\nVENDOR_ID_ONECHANNEL = 14127\nVENDOR_ID_PROGRAMMING_ARTS_INC = 14128\nVENDOR_ID_SEVAN_NETWORKS_INC = 14129\nVENDOR_ID_BIFCO = 14130\nVENDOR_ID_IFOUNDRY_SYSTEMS = 14131\nVENDOR_ID_CS_SYSTEMES_DINFORMATION = 14132\nVENDOR_ID_BUERGERNETZ_WEIHENSTEPHAN_EV = 14133\nVENDOR_ID_UNIVERSITY_OF_SZEGED = 14134\nVENDOR_ID_SYSDM = 14135\nVENDOR_ID_PONTON_CONSULTING_GMBH = 14136\nVENDOR_ID_KARIS = 14137\nVENDOR_ID_TGM = 14138\nVENDOR_ID_CITY_OF_NOTTINGHAM_COUNCIL = 14139\nVENDOR_ID_FACHHOCHSCHULE_LIPPE_UND_HOEXTER = 14140\nVENDOR_ID_ERECA = 14141\nVENDOR_ID_ALPWARE = 14142\nVENDOR_ID_FIMOSSCHOBER_HARTL_OEG = 14143\nVENDOR_ID_MALKOM_SJ = 14144\nVENDOR_ID_SOCIETY_FOR_HUMANITY_AND_INTERNATIONAL_TRANCENDENTALISM = 14145\nVENDOR_ID_BLACKBOX_CONSULTING_CORPORATION = 14146\nVENDOR_ID_FERMI_NATIONAL_ACCELERATOR_LABORATORY = 14147\nVENDOR_ID_OFFICINA_DI_IDEE = 14148\nVENDOR_ID_WADDELL_REED_SERVICES = 14149\nVENDOR_ID_TRANSACTION_AUDITING_GROUP = 14150\nVENDOR_ID_SPLENTEC_LTD = 14151\nVENDOR_ID_DYNCORP_SYSTEMS_AND_SOLUTIONS = 14152\nVENDOR_ID_SIGMA_SAA = 14153\nVENDOR_ID_NTKO_NETWORK_CO_LTD = 14154\nVENDOR_ID_TIL_TECHNOLOGIES = 14155\nVENDOR_ID_UNIVERSITY_OF_READING = 14156\nVENDOR_ID_FHLBANK_TOPEKA = 14157\nVENDOR_ID_CONSULTORIA_Y_ESTRATEGIA_ELECTRNICA_PARA_INTERNET_SLTESTANET = 14158\nVENDOR_ID_FLUENT_INC = 14159\nVENDOR_ID_TRIBUNE_INTERACTIVE = 14160\nVENDOR_ID_EPCNET_GMBH = 14161\nVENDOR_ID_IT_SOLUTION_GMBH = 14162\nVENDOR_ID_SAGA_DC_GMBH = 14163\nVENDOR_ID_SANAVIGATOR_INC = 14164\nVENDOR_ID_IREADY = 14165\nVENDOR_ID_SAVISO_CONSULTING_LTD = 14166\nVENDOR_ID_SEATTLE_UNIVERSITY = 14167\nVENDOR_ID_OWL_RIVER_COMPANY = 14168\nVENDOR_ID_INFORMEDIA = 14169\nVENDOR_ID_AUSTRALIAN_RESEARCH_CENTRE_FOR_MEDICAL_ENGINEERING = 14170\nVENDOR_ID_MEMORIAL_UNIVERSITY_OF_NEWFOUNDLAND = 14171\nVENDOR_ID_BOCA_SOFTWARE_INC = 14172\nVENDOR_ID_ETRI = 14173\nVENDOR_ID_SOFTFORUM_CO_LTD = 14174\nVENDOR_ID_HOSPITAL_LA_FE = 14175\nVENDOR_ID_KATHOLIEKE_HOGESCHOOL_LEUVEN = 14176\nVENDOR_ID_IMPLEMENTA_GMBH = 14177\nVENDOR_ID_JNI_CORPORATION = 14178\nVENDOR_ID_AIRESPACE_INC_FORMERLY_BLACK_STORM_NETWORKS = 14179\nVENDOR_ID_DS_CONSULTING = 14180\nVENDOR_ID_CYGNUS_TECHNOLOGIES = 14181\nVENDOR_ID_GLOBALLOCATE = 14182\nVENDOR_ID_AREZZO_TELECOMUNICAZIONI_SRL = 14183\nVENDOR_ID_GETABIGGER_NETWORK = 14184\nVENDOR_ID_CYBER_SERVICE = 14185\nVENDOR_ID_GALLANT_TECHNOLOGIES_INC = 14186\nVENDOR_ID_CHINA_NETCOM_CORPORATION_LTD = 14187\nVENDOR_ID_THOMAS_K_WILLIAMS_LTD = 14188\nVENDOR_ID_PROBUSINESS_AG = 14189\nVENDOR_ID_WESTERN_OUTDOOR_INTERACTIVE = 14190\nVENDOR_ID_MNOFBB = 14191\nVENDOR_ID_GRANITE_TECHNOLOGIES = 14192\nVENDOR_ID_STRABON = 14193\nVENDOR_ID_MINISTRY_OF_SOCIAL_DEVELOPMENT = 14194\nVENDOR_ID_NOW_SOFTWARE = 14195\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_MONTEREY_BAY = 14196\nVENDOR_ID_SISNEMA_INFORMATICA_LTDA = 14197\nVENDOR_ID_PANNAWAY_TECHNOLOGIES_INCORPORATED = 14198\nVENDOR_ID_ACCELRYS_INC = 14199\nVENDOR_ID_HCL_COMNET_LTD = 14200\nVENDOR_ID_DAXWORLD = 14201\nVENDOR_ID_DOTTECH_INTERNATIONAL_INCLTD = 14202\nVENDOR_ID_AQL = 14203\nVENDOR_ID_REKSOFT_LTD = 14204\nVENDOR_ID_MAI_INSURANCE_BROKERS_LTD = 14205\nVENDOR_ID_INFORMATIE_BEHEER_GROEP = 14206\nVENDOR_ID_LEROY_SOMER = 14207\nVENDOR_ID_OPENWIDE = 14208\nVENDOR_ID_ACCELLENT = 14209\nVENDOR_ID_THE_STORYTELLERS_PLACE = 14210\nVENDOR_ID_TIFFANY_AND_COMPANY = 14211\nVENDOR_ID_UNIVERSITAET_MUENCHEN = 14212\nVENDOR_ID_SCITECH_IT_SOLUTIONS_GMBH = 14213\nVENDOR_ID_TYCO_SERVICES = 14214\nVENDOR_ID_INTERACTIVE_VISUALS_INC = 14215\nVENDOR_ID_SENDFAR_TECHNOLOGY_CO_LTD = 14216\nVENDOR_ID_WUESTENROT_DATENSERVICE_GMBH = 14217\nVENDOR_ID_FACULTES_UNIVERSITAIRES_NOTRE_DAME_DE_LA_PAIX = 14218\nVENDOR_ID_HAPAG_LLOYD_CONTAINER_LINIE_AG = 14219\nVENDOR_ID_AKAFLIEG_MUNCHEN_EV = 14220\nVENDOR_ID_PRODIGY_LABS = 14221\nVENDOR_ID_ELECTRIC_RELIABILITY_COUNCIL_OF_TEXAS_INC = 14222\nVENDOR_ID_SOURCEFIRE_INC = 14223\nVENDOR_ID_SOFTWARE_MACHINE = 14224\nVENDOR_ID_SPL_ACT_WIRELESS = 14225\nVENDOR_ID_VIZAFONE = 14226\nVENDOR_ID_TAMPERE_POLYTECHNIC = 14227\nVENDOR_ID_FLANDERS_ELECTRIC = 14228\nVENDOR_ID_UNIVERSITY_OF_ARKANSAS_FAYETTEVILLE = 14229\nVENDOR_ID_ENGINE_GMBH_CO_KG = 14230\nVENDOR_ID_THE_SHMOO_GROUP = 14231\nVENDOR_ID_EXELON_CORPORATION = 14232\nVENDOR_ID_SONAG_COMPANY = 14233\nVENDOR_ID_ISOTOMIC_TECHNOLOGIES = 14234\nVENDOR_ID_SPINCIRCUIT_INC = 14235\nVENDOR_ID_BANCO_DE_LA_REPUBLICA = 14236\nVENDOR_ID_SARAWAK_INFORMATION_SYSTEMS_SDN_BHD = 14237\nVENDOR_ID_DILITHIUM_NETWORKS = 14238\nVENDOR_ID_SPRITEINC = 14239\nVENDOR_ID_TOP_GLOBAL_TECHNOLOGY_LTD = 14240\nVENDOR_ID_MENTORGEN_LLC = 14241\nVENDOR_ID_AOSA_TELEKOM_GMBH_CO = 14242\nVENDOR_ID_RTS_REAL_TIME_COMPUTERSOFTWARE_GESMBH = 14243\nVENDOR_ID_BJERKESET_CONSULTING = 14244\nVENDOR_ID_THE_CAUDIUM_GROUP = 14245\nVENDOR_ID_NATURAL_CONVERGENCE = 14246\nVENDOR_ID_SIGNAFLEX_INC = 14247\nVENDOR_ID_GEMINI_SECURITY_SOLUTIONS_INC = 14248\nVENDOR_ID_VIENNE_INFORMATIQUE = 14249\nVENDOR_ID_CONSEIL_GENERAL_DE_LA_VIENNE = 14250\nVENDOR_ID_STELLAR_CRAFT_INC = 14251\nVENDOR_ID_PRIME_SOLUTIONS_LTD = 14252\nVENDOR_ID_GRIDXPERT = 14253\nVENDOR_ID_ENHANSIV = 14254\nVENDOR_ID_BRVENIKCOM = 14255\nVENDOR_ID_ARLYS_S_A = 14256\nVENDOR_ID_LINK_MARGIN_INC = 14257\nVENDOR_ID_NORTHERN_TRUST_COMPANY = 14258\nVENDOR_ID_GROUPE_ECE_PARIS = 14259\nVENDOR_ID_LINUX_SYSTEMBERATUNG = 14260\nVENDOR_ID_BANK_LEUMI_LEISRAEL_LTD = 14261\nVENDOR_ID_DIPL_ING_FELIX_BEER = 14262\nVENDOR_ID_SVEN_MEINHARDT_EDV_SERVICE = 14263\nVENDOR_ID_OUTPOST_SENTINEL = 14264\nVENDOR_ID_ITOUCH = 14265\nVENDOR_ID_BULLETPROFF_NETWORKS = 14266\nVENDOR_ID_WRJTEC = 14267\nVENDOR_ID_PROJEKT_AVALON = 14268\nVENDOR_ID_BEIJING_VANLINK_COMMUNICATION_CO_PRCHINA_YU = 14269\nVENDOR_ID_TECHNOLOGY_HACKWORKS_INC = 14270\nVENDOR_ID_ILIAD = 14271\nVENDOR_ID_AWO_KREISVERBAND_ESSEN_EV = 14272\nVENDOR_ID_IFEN = 14273\nVENDOR_ID_BDILUKASZ_TYLSKI = 14274\nVENDOR_ID_DEUTSCHE_BUNDESWEHR = 14275\nVENDOR_ID_OSYSTEM_AB = 14276\nVENDOR_ID_TYLERFAMNET = 14277\nVENDOR_ID_DINX_GMBH = 14278\nVENDOR_ID_NETHERE_INTERNET_SERVICES_INC = 14279\nVENDOR_ID_ALL_OPTICAL_NETWORKS_INC = 14280\nVENDOR_ID_RCATNET = 14281\nVENDOR_ID_VERTRIAN = 14282\nVENDOR_ID_WEBRASKA = 14283\nVENDOR_ID_TECHNISCHE_UNIVERSITAT_CHEMNITZ = 14284\nVENDOR_ID_CEGETEL_SI_2 = 14285\nVENDOR_ID_NVISIA = 14286\nVENDOR_ID_AEGISNET = 14287\nVENDOR_ID_LUCTERRA_INFORMATICA_LTDA = 14288\nVENDOR_ID_A3_DESIGN = 14289\nVENDOR_ID_INFOCORP_COMPUTER_SOLUTIONS_INC = 14290\nVENDOR_ID_STEFAN_LEFNAER = 14291\nVENDOR_ID_THE_DOCUMENT_ACADEMY = 14292\nVENDOR_ID_ADITEL_NV = 14293\nVENDOR_ID_COLLAX_GMBH = 14294\nVENDOR_ID_DOP_SYSTEMS_LTD = 14295\nVENDOR_ID_CONFMON_CORP = 14296\nVENDOR_ID_ONETELUK = 14297\nVENDOR_ID_CONTROL_PRODUCTS_INC = 14298\nVENDOR_ID_SITESUITE_AUSTRALASIA = 14299\nVENDOR_ID_CYBER_SWITCHING_INC = 14300\nVENDOR_ID_PRO_MEDICUS_LTD = 14301\nVENDOR_ID_PAPINETORG = 14302\nVENDOR_ID_NEXTGEN_INC = 14303\nVENDOR_ID_SCENPRO_INC = 14304\nVENDOR_ID_KORA_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY_INFORMATION_KISTI = 14305\nVENDOR_ID_FOCI_FIBER_OPTIC_COMMUNICATIONS_INC = 14306\nVENDOR_ID_KAWAMURA_ELECTRIC_INC = 14307\nVENDOR_ID_REP = 14308\nVENDOR_ID_TECHNISCHE_UNIVERSITAET_CLAUSTHAL_RECHENZENTRUM = 14309\nVENDOR_ID_ADJOIN_SOLUTIONS_INC = 14310\nVENDOR_ID_TECHNION_COMMUNICATIONS_CORPORATION = 14311\nVENDOR_ID_SKYPATH_NETWORKS_INC = 14312\nVENDOR_ID_PROCEDA_TECNOLOGIA_E_INFORMATICA_SA = 14313\nVENDOR_ID_IMAGINET = 14314\nVENDOR_ID_UBSERVICES = 14315\nVENDOR_ID_SHANGHAI_HUATENG_SOFTWARE_SYSTEM_CO_LTD = 14316\nVENDOR_ID_RATWATER = 14317\nVENDOR_ID_ALSTOM_TD_PD = 14318\nVENDOR_ID_DDD_DESIGN_GMBH = 14319\nVENDOR_ID_CREDIT_LYONNAIS_DSTI_DSAT_PLANET = 14320\nVENDOR_ID_TECHELP_KY = 14321\nVENDOR_ID_ARNOLD_DESIGN_INFORMATICA_LTDA = 14322\nVENDOR_ID_DENNIS_IT = 14323\nVENDOR_ID_THE_WRITTEN_WORD_INC = 14324\nVENDOR_ID_PUCEBABOON = 14325\nVENDOR_ID_SIRIUS_SATELLITE_RADIO = 14326\nVENDOR_ID_VA_LINUX_SYSTEMS_JAPAN_KK = 14327\nVENDOR_ID_JAG_PRODUCTIONS_INC = 14328\nVENDOR_ID_TIMECERTAIN_LLC = 14329\nVENDOR_ID_SHANGHAI_EWAYTEK_CO_LTD = 14330\nVENDOR_ID_BEIJING_TOPSEC_NETWORK_SECURITY_TECHNOLOGY_CO_LTD = 14331\nVENDOR_ID_DEADSQUID_COMMUNICATIONS = 14332\nVENDOR_ID_PHONOLOGIES_INDIA_PVT_LTD = 14333\nVENDOR_ID_MILTON_KEYNES_COUNCIL = 14334\nVENDOR_ID_ECONNECT = 14335\nVENDOR_ID_THE_CHESAPEAKE_COMPUTER_GROUP_INCORPORATED = 14336\nVENDOR_ID_SUPERINTENDENCIA_DE_SERVICIOS_DE_SALUD = 14337\nVENDOR_ID_IMPSAT_SA_COLOMBIA = 14338\nVENDOR_ID_HIOPTEL = 14339\nVENDOR_ID_LINUXTEK_INC = 14340\nVENDOR_ID_MINISTRY_OF_PACIFIC_ISLAND_AFFAIRS = 14341\nVENDOR_ID_NETWAY_NETWORKS_PTY_LTD = 14342\nVENDOR_ID_OSPREY_NETWORK_TECHNOLOGIES_INC = 14343\nVENDOR_ID_ELECTRONIC_COMMERCE_TECHNOLOGIES = 14344\nVENDOR_ID_ETG = 14345\nVENDOR_ID_ERICH_JAEGER_GMBH = 14346\nVENDOR_ID_REALNET_KFT = 14347\nVENDOR_ID_SWIST_GROUP_TECHNOLOGIES_PTY_LTD = 14348\nVENDOR_ID_DYBAND_CORPORATION = 14349\nVENDOR_ID_STORBIT = 14350\nVENDOR_ID_APPLIED_ENGINEERING_INC = 14351\nVENDOR_ID_PENN_STATE_UNIVERSITY = 14352\nVENDOR_ID_ALESSANDRO_BERTELA = 14353\nVENDOR_ID_MENLO_PARK_PRESBYTERIAN_CHURCH = 14354\nVENDOR_ID_CHAPMAN_UNIVERSITY = 14355\nVENDOR_ID_BANK_OF_BERMUDA = 14356\nVENDOR_ID_WORLDPAC = 14357\nVENDOR_ID_SNAPGEAR_PTY_LTD = 14358\nVENDOR_ID_ABACUS = 14359\nVENDOR_ID_ROUTREK_NETWORKS_INC = 14360\nVENDOR_ID_FORESEARCH = 14361\nVENDOR_ID_TELEKOM_SLOVENIJE_DD = 14362\nVENDOR_ID_BLUE_OAK_WIRELESS_PTY_LTD = 14363\nVENDOR_ID_CLG = 14364\nVENDOR_ID_IGH_ESSEN_GMBH = 14365\nVENDOR_ID_ENERGY_RESEARCH_FOUNDATION = 14366\nVENDOR_ID_IRONIC_DESIGN_INC = 14367\nVENDOR_ID_PUBLICAT_INTERNET = 14368\nVENDOR_ID_TSI = 14369\nVENDOR_ID_GEOTRUST_INC = 14370\nVENDOR_ID_IOTAC = 14371\nVENDOR_ID_UNIVERSIDAD_SIMON_BOLIVAR = 14372\nVENDOR_ID_MYSTROTV = 14373\nVENDOR_ID_INTERNATIONAL_SOFTWARE_SOLUTIONS_2 = 14374\nVENDOR_ID_WIRELESS_SERVICES_CORP = 14375\nVENDOR_ID_APPLIED_SIGNAL_TECHNOLOGY_INC = 14376\nVENDOR_ID_CORE_SECURITY_TECHNOLOGIES = 14377\nVENDOR_ID_LMJNCOM = 14378\nVENDOR_ID_VARIOSECURE_NETWORKS_INC = 14379\nVENDOR_ID_KT_ICOM = 14380\nVENDOR_ID_TELECIS_INC = 14381\nVENDOR_ID_SUPERLONG_IT_LTD = 14382\nVENDOR_ID_OPENEXPERTISE_PTY_LTD = 14383\nVENDOR_ID_ROMSYM_DATA = 14384\nVENDOR_ID_RTE_SOFTWARE = 14385\nVENDOR_ID_SOLNET_SRO = 14386\nVENDOR_ID_ABSOLUTE_SYSTEMS_PTY_LTD = 14387\nVENDOR_ID_TOLL_COLLECT = 14388\nVENDOR_ID_SPIDER_INTERNET_TECHNOLOGIES_INC = 14389\nVENDOR_ID_QRS_HEALTHCARE_SOLUTIONS = 14390\nVENDOR_ID_ACE_SUARES = 14391\nVENDOR_ID_SI_SOLUCOES_DE_INFORMATICA = 14392\nVENDOR_ID_PRODASAL_COMPANHIA_DE_PROCESSAMENTO_DE_DADOS_DE_SALVADOR = 14393\nVENDOR_ID_NEW_MASS_MEDIA_INC = 14394\nVENDOR_ID_UNIVERSITY_OF_OREGON = 14395\nVENDOR_ID_C4NET = 14396\nVENDOR_ID_ICSS = 14397\nVENDOR_ID_BEHAVIORAL_INFORMATICS_INC = 14398\nVENDOR_ID_NEC_INFRONTIA_CORP = 14399\nVENDOR_ID_VENTURETECHS_CORP = 14400\nVENDOR_ID_JOINT_STOCK_COMPANY_VOLGATELECOM_PENZA_REGION = 14401\nVENDOR_ID_UNIVERSITY_OF_GENEVA = 14402\nVENDOR_ID_GYMNASIUM_HERMANN_BOESE_STR = 14403\nVENDOR_ID_SPEDIANT_SYSTEMS_LTD = 14404\nVENDOR_ID_CHARON_SYSTEMS_INC = 14405\nVENDOR_ID_UNITED_LAND_SERVICES_INC = 14406\nVENDOR_ID_XIDUSNET = 14407\nVENDOR_ID_NDOSA_TECHNOLOGIES_INC = 14408\nVENDOR_ID_DCANET = 14409\nVENDOR_ID_TSSX = 14410\nVENDOR_ID_BEIJING_QXCOMM_TECHNOLOGY_CO_LTD = 14411\nVENDOR_ID_EUROPEAN_TRANSACTION_BANK_AG = 14412\nVENDOR_ID_COMFONE_AG = 14413\nVENDOR_ID_REGIO_LTD = 14414\nVENDOR_ID_E_MOBILIZER = 14415\nVENDOR_ID_NTL = 14416\nVENDOR_ID_CONTINENTALE_KRANKENVERSICHERUNG_AG = 14417\nVENDOR_ID_CENTRO_DE_TECNOLOGIA_DA_INFORMAO_LUIZ_DE_QUEIROZ = 14418\nVENDOR_ID_EMIGRATUS_COMMUNICATIONS_INC = 14419\nVENDOR_ID_LTINETWORKSCOM = 14420\nVENDOR_ID_MOCANA_CORPORATION = 14421\nVENDOR_ID_TAZMEN_TECHNOLOGIES = 14422\nVENDOR_ID_RONDOSOFT_INC = 14423\nVENDOR_ID_HUMATIX = 14424\nVENDOR_ID_TELKONET_INC = 14425\nVENDOR_ID_ENTERPRISE_INNOVATIONS_CORPORATION = 14426\nVENDOR_ID_NACT_TELECOMMUNICATIONS_INC = 14427\nVENDOR_ID_WELSTAND = 14428\nVENDOR_ID_MCLUCKIE_AND_ASSOCIATES = 14429\nVENDOR_ID_POLIVEC_INC = 14430\nVENDOR_ID_UNIVERSITAS_KRISTEN_KRIDA_WACANA = 14431\nVENDOR_ID_RESERVED_2 = 14432\nVENDOR_ID_CHINA_FINANCIAL_CERTIFICATION_AUTHORITY = 14433\nVENDOR_ID_NETWORK_SYSTEMS_AND_TECHNOLOGIES = 14434\nVENDOR_ID_VRIJE_UNIVERSITEIT_AMSTERDAM = 14435\nVENDOR_ID_QUICONNECTCOM = 14436\nVENDOR_ID_BALTZORG = 14437\nVENDOR_ID_POLARLAKE = 14438\nVENDOR_ID_HIT_INTERNET_TECHNOLOGIES_SPA = 14439\nVENDOR_ID_LONGSHIP_SCOUT_GROUP = 14440\nVENDOR_ID_MILLER_ZELL = 14441\nVENDOR_ID_XYBASE_MALAYSIA_SDN_BHD = 14442\nVENDOR_ID_JULY_SYSTEMS = 14443\nVENDOR_ID_REDBACK_IT_PTY_LTD = 14444\nVENDOR_ID_ELECS_INDUSTRY_CO_LTD = 14445\nVENDOR_ID_INDEO_GMBH = 14446\nVENDOR_ID_SPEKTRA_GROUP_LTD = 14447\nVENDOR_ID_IATROGENIXCOM = 14448\nVENDOR_ID_HITNET_EV = 14449\nVENDOR_ID_TWICOM = 14450\nVENDOR_ID_INDUSTRIAL_COMPUTING_LTD = 14451\nVENDOR_ID_EVERYONENET = 14452\nVENDOR_ID_ISIS_NETWORKS = 14453\nVENDOR_ID_TEL_AVIV_UNIVERSITY = 14454\nVENDOR_ID_INTERCONTINENTALEXCHANGE = 14455\nVENDOR_ID_LEMURIA_ASESORES_INFORMATICOS_CA = 14456\nVENDOR_ID_LOREX_INDUSTRIES_INC = 14457\nVENDOR_ID_ILIENT = 14458\nVENDOR_ID_HENNESSY_DIGITAL = 14459\nVENDOR_ID_B_DIGITAL = 14460\nVENDOR_ID_KEYWARE_SOLUTIONS_INC = 14461\nVENDOR_ID_PSGUE_CORPORATION = 14462\nVENDOR_ID_TOUR2000_CO_LTD = 14463\nVENDOR_ID_VALUECOMMERCE = 14464\nVENDOR_ID_NOC_GROVE = 14465\nVENDOR_ID_HEINRICH_HEINE_UNIVERSITAET_DUESSELDORF = 14466\nVENDOR_ID_STIME = 14467\nVENDOR_ID_MARCONI_INTEGRATED_SYSTEMS = 14468\nVENDOR_ID_CYCLONE_COMPUTER_CONSULTANTS_LTD = 14469\nVENDOR_ID_PLAHL_KARL_CONSULT = 14470\nVENDOR_ID_WASABI_SYSTEMS = 14471\nVENDOR_ID_VIA_NETWORKS_SERVICES_AG = 14472\nVENDOR_ID_QUEENS_UNIVERSITY = 14473\nVENDOR_ID_NEXTAXIOM_TECHNOLOGY_INC = 14474\nVENDOR_ID_RALPH_DEHART = 14475\nVENDOR_ID_NETWORK_EXECUTIVE_SOFTWARE_INC = 14476\nVENDOR_ID_RELIX = 14477\nVENDOR_ID_UNIVERSITY_OF_MELBOURNE = 14478\nVENDOR_ID_KOREA_NATIONAL_DEFENCE_UNIVERSITY = 14479\nVENDOR_ID_NORISBANK_AG = 14480\nVENDOR_ID_KOBIL_SYSTEMS_GMBH = 14481\nVENDOR_ID_SYSTEM_5 = 14482\nVENDOR_ID_UNIC_INTERNET_CONSULTING = 14483\nVENDOR_ID_DIGITAL_V6_CORP = 14484\nVENDOR_ID_SANMINA_SCI_INC = 14485\nVENDOR_ID_MARLBORO_COLLEGE = 14486\nVENDOR_ID_ERKKILA_CONSULTING = 14487\nVENDOR_ID_DARKMIST = 14488\nVENDOR_ID_MCGREWNET_INC = 14489\nVENDOR_ID_ARIADNE_INTERNET_SERVICES_INC = 14490\nVENDOR_ID_STANDARD_SCHOOL_DISTRICT = 14491\nVENDOR_ID_DIALOGUE_TECHNOLOGY_CORPORATION = 14492\nVENDOR_ID_AURIGO_SOFTWARE_TECHNOLOGIES = 14493\nVENDOR_ID_ASPEDI_GMBH = 14494\nVENDOR_ID_HANS_LIE = 14495\nVENDOR_ID_SWEDISHAMERICAN_HEALTH_SYSTEM_CORPORATION = 14496\nVENDOR_ID_GIST_COMMUNICATIONS_INC = 14497\nVENDOR_ID_STYLE_NETWORKS_INC = 14498\nVENDOR_ID_E_BANK = 14499\nVENDOR_ID_WARSAW_UNIVERSITY = 14500\nVENDOR_ID_BLUE_COAT_SYSTEMS = 14501\nVENDOR_ID_SAM_ASHER_COMPUTING_SERVICES_INC = 14502\nVENDOR_ID_ASYLUM_VISUAL_EFFECTS = 14503\nVENDOR_ID_PACKET_SIGNAL_CORPORATION = 14504\nVENDOR_ID_SPIRAL_DESIGNS_INC = 14505\nVENDOR_ID_MINISTERUL_APARARII_NATIONALE = 14506\nVENDOR_ID_RUSSIAN_AMERICAN_GLASS_COMPANY_RASKO_LTD = 14507\nVENDOR_ID_TEKNOVUS = 14508\nVENDOR_ID_MERCATEO_AG = 14509\nVENDOR_ID_ASTRA_DATENTECHNIK_GMBH = 14510\nVENDOR_ID_LONDON_METROPOLITAN_UNIVERSITY = 14511\nVENDOR_ID_ASPIVIA_PTY_LTD = 14512\nVENDOR_ID_WEBFLEX = 14513\nVENDOR_ID_DAVE_SRL = 14514\nVENDOR_ID_GENOGRID = 14515\nVENDOR_ID_SANOMA_BUDAPEST_PUBLISHING_LTD = 14516\nVENDOR_ID_TACTEL_AB = 14517\nVENDOR_ID_PIHANA_PACIFIC_INC = 14518\nVENDOR_ID_WASHINGTON_UNIVERSITY = 14519\nVENDOR_ID_WOLFRAM_RESEARCH_INC = 14520\nVENDOR_ID_H_K_MOORE_LIMITED = 14521\nVENDOR_ID_GVI_MEDICAL_DEVICES = 14522\nVENDOR_ID_HERMITORG = 14523\nVENDOR_ID_PHAROS_SYSTEMS = 14524\nVENDOR_ID_TRAPEZE_NETWORKS_INC = 14525\nVENDOR_ID_SAFENET_INFORMATICA_LTDA = 14526\nVENDOR_ID_IWIRING = 14527\nVENDOR_ID_NEWLANDS_COLLEGE = 14528\nVENDOR_ID_FHPWIRELESS = 14529\nVENDOR_ID_ROBERT_BAPTISTA = 14530\nVENDOR_ID_BLACKWELL_CONSULTING_SERVICES = 14531\nVENDOR_ID_THE_ASYLUM = 14532\nVENDOR_ID_APOTEKET_AB = 14533\nVENDOR_ID_SCHIFFKO_GMBH = 14534\nVENDOR_ID_EUROPOINT_NETWORKING = 14535\nVENDOR_ID_INCERITUS = 14536\nVENDOR_ID_TMP_CONSULTORIA_DE_INFORMATICA_S_C_LTDA = 14537\nVENDOR_ID_BEIJING_SINCETIMES_COMMUNICATION_CO_LTD = 14538\nVENDOR_ID_REALPROGRAMMERSCOM = 14539\nVENDOR_ID_LESZEK_PISAREK = 14540\nVENDOR_ID_DEANO = 14541\nVENDOR_ID_VERIZON_ESG = 14542\nVENDOR_ID_N30D = 14543\nVENDOR_ID_SHANGHAI_POSTSTELECOMMUNICATIONS_EQUIPMENT_CO_LTD = 14544\nVENDOR_ID_ICT_ACADEMY_OF_SCIENCE_CHINA = 14545\nVENDOR_ID_NTO_IRE_POLUS = 14546\nVENDOR_ID_NEUE_ZURCHER_ZEITUNG = 14547\nVENDOR_ID_AUTOVALLEY = 14548\nVENDOR_ID_AWANIM = 14549\nVENDOR_ID_METAWARE_SPA = 14550\nVENDOR_ID_GSI_MBH = 14551\nVENDOR_ID_RISON_CRAFT = 14552\nVENDOR_ID_DAIMLERCHRYSLER_CORP = 14553\nVENDOR_ID_VU_MIF = 14554\nVENDOR_ID_CMGCC = 14555\nVENDOR_ID_GRAVEN_SOFTWARE = 14556\nVENDOR_ID_INFOWAVE_SOFTWARE_INC = 14557\nVENDOR_ID_SUNGARD_BSR_INC = 14558\nVENDOR_ID_MONDRU_AB = 14559\nVENDOR_ID_TSCNET_INC = 14560\nVENDOR_ID_VOCENT_SOLUTIONS = 14561\nVENDOR_ID_E_PROJECT_SOLUTIONS_PTE_LTD = 14562\nVENDOR_ID_NATIONAL_INFORMATION_AND_COMMUNICATION_TECHNOLOGY_AUSTRALIA = 14563\nVENDOR_ID_ELBERSCOM = 14564\nVENDOR_ID_Z_FORCE_INC = 14565\nVENDOR_ID_BMF = 14566\nVENDOR_ID_COVENTRY_UNIVERSITY_ENTERPRISES_LTD = 14567\nVENDOR_ID_WEISER = 14568\nVENDOR_ID_HEIDELBERGER_DRUCKMASCHINEN_AG = 14569\nVENDOR_ID_MAJENTIS_TECHNOLOGIES_INC = 14570\nVENDOR_ID_ATOMZ_CORPORATION = 14571\nVENDOR_ID_EDIWISE = 14572\nVENDOR_ID_ABEST_RESEARCH_CORP = 14573\nVENDOR_ID_CELLICIUM_SA = 14574\nVENDOR_ID_ATTENTION_SOFTWARE_INC = 14575\nVENDOR_ID_TOTAL_NETWORK = 14576\nVENDOR_ID_FORESTEXPRESS_LLC = 14577\nVENDOR_ID_GEAC_LIBRARY_SOLUTIONS = 14578\nVENDOR_ID_Q_LINUX_SOLUTIONS_INC = 14579\nVENDOR_ID_THE_MANTICORE_GROUP = 14580\nVENDOR_ID_MANASOFT = 14581\nVENDOR_ID_LUZ_ENGENHARIA_FINANCEIRA = 14582\nVENDOR_ID_TRUTEQ_WIRELESS = 14583\nVENDOR_ID_CELESTIX_NETWORKS = 14584\nVENDOR_ID_COMPASS_INTERNET = 14585\nVENDOR_ID_TMAX_SOFT = 14586\nVENDOR_ID_TECHNOLOGICAL_CENTRE_TUSHINO_CB_RF = 14587\nVENDOR_ID_NEOSYMMETRIA = 14588\nVENDOR_ID_SICAP_LTD = 14589\nVENDOR_ID_PASSAVE_INC = 14590\nVENDOR_ID_NCC_NETWORK_CONSULTING_GMBH = 14591\nVENDOR_ID_IORANGE_INTERNET_SOFTWARE_AND_SERVICE_GMBH = 14592\nVENDOR_ID_DYODE = 14593\nVENDOR_ID_RUDOLF_BAHR = 14594\nVENDOR_ID_BILLREILLY = 14595\nVENDOR_ID_MARTIN_WISMANS_GMBH = 14596\nVENDOR_ID_DOLPHINSEARCH_INC = 14597\nVENDOR_ID_USDS = 14598\nVENDOR_ID_CORMAN = 14599\nVENDOR_ID_CRYPTALL_LIMITED = 14600\nVENDOR_ID_BAAZEECOM = 14601\nVENDOR_ID_INTERVAL_MEDIA = 14602\nVENDOR_ID_CYBERPORTDE_GMBH = 14603\nVENDOR_ID_COMMVAULT_SYSTEMS = 14604\nVENDOR_ID_WESLEYAN_UNIVERSITY = 14605\nVENDOR_ID_HEWLETT_WARD_INC = 14606\nVENDOR_ID_FUTURO_TECHNOLOGIES_INC = 14607\nVENDOR_ID_TRANSFINITY_CORP = 14608\nVENDOR_ID_TODITOCOM_SA_DE_CV = 14609\nVENDOR_ID_SOLUTIONS_FIRST = 14610\nVENDOR_ID_WEB_ALM_GMBH = 14611\nVENDOR_ID_LINKPING_UNIVERSITY = 14612\nVENDOR_ID_ECORA = 14613\nVENDOR_ID_AVANTCOM_CORPORATION = 14614\nVENDOR_ID_VIVATO_INC = 14615\nVENDOR_ID_UNIVERSITY_OF_ARKANSAS_AT_LITTLE_ROCK = 14616\nVENDOR_ID_DISEOS_ELECTRONICOS = 14617\nVENDOR_ID_MENNEN_MEDICAL = 14618\nVENDOR_ID_QUADROX_INC = 14619\nVENDOR_ID_SAINT_GOBAIN = 14620\nVENDOR_ID_WENDYS_INTERNATIONAL = 14621\nVENDOR_ID_VTLS_INC = 14622\nVENDOR_ID_RIVERSTYX_INTERNET = 14623\nVENDOR_ID_VERGERUS = 14624\nVENDOR_ID_SERVECOMM = 14625\nVENDOR_ID_REUTERS = 14626\nVENDOR_ID_IDT_CORP = 14627\nVENDOR_ID_RESEL = 14628\nVENDOR_ID_SOURCETECH_AB = 14629\nVENDOR_ID_BINARY_SYSTEMS_INC = 14630\nVENDOR_ID_AMERICAN_INSTITUTE_OF_PHYSICS = 14631\nVENDOR_ID_VIA_INTERNAATHIONAL = 14632\nVENDOR_ID_NUBERRY_LTD = 14633\nVENDOR_ID_ITOOL_SYSTEMS = 14634\nVENDOR_ID_DAVIESCO = 14635\nVENDOR_ID_ONTAIN_CORPORATION = 14636\nVENDOR_ID_SOLECTRON = 14637\nVENDOR_ID_CONCURRENT_REALITY_PTY_LTD = 14638\nVENDOR_ID_HXTP = 14639\nVENDOR_ID_WURLEY_SOLUTIONS = 14640\nVENDOR_ID_RAYMOND_JAMES_FINANCIAL = 14641\nVENDOR_ID_104COM = 14642\nVENDOR_ID_FUTURE_BEACON_INC = 14643\nVENDOR_ID_HIFLYCOM_CORP = 14644\nVENDOR_ID_W_IBEDA_HIGH_TECH_DEVELOP_CO_LTD = 14645\nVENDOR_ID_BUPTNKL = 14646\nVENDOR_ID_ROSSBERRY_CONSULTING = 14647\nVENDOR_ID_SURFNSHOP_E_COMMERCE_INC = 14648\nVENDOR_ID_HOLLEYISMCOM = 14649\nVENDOR_ID_LEAD_UP_SOFTWARE = 14650\nVENDOR_ID_T_SYSTEMS_INTERNATIONAL_GMBH_SL_NWS = 14651\nVENDOR_ID_UNIVERSITY_OF_ST_THOMAS = 14652\nVENDOR_ID_METAWAYS_INFOSYSTEMS_GMBH = 14653\nVENDOR_ID_MUZO_AS = 14654\nVENDOR_ID_GATESPACE = 14655\nVENDOR_ID_4IT_SA = 14656\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_PARMA = 14657\nVENDOR_ID_DIETER_KLUENTER_SYSTEM_BERATUNG = 14658\nVENDOR_ID_VIVIDLINK_DETLEF_INGENDORF = 14659\nVENDOR_ID_FACHHOCHSCHULE_WIESBADEN = 14660\nVENDOR_ID_KAV_EMB = 14661\nVENDOR_ID_BID_OWL_BILDUNG_IM_DIALOG_OSTWESTFALEN_LIPPE = 14662\nVENDOR_ID_IXIF_LIMITED = 14663\nVENDOR_ID_INIT_SYSTEMS = 14664\nVENDOR_ID_COMLAB_TELECOMMUNICATIONS_INC = 14665\nVENDOR_ID_MCLEOD_LAKE_INDIAN_BAND = 14666\nVENDOR_ID_NEXTIRAONE_LLC = 14667\nVENDOR_ID_VIASAT_INC_ACCELERATION_RESEARCH_AND_TECHNOLOGY_FORMERLY_INTELLIGENT_COMPRESSION_TECHNOLOGIES = 14668\nVENDOR_ID_SYSTEMHAUS_X_TEAM = 14669\nVENDOR_ID_MTX_NETWORKS_INC = 14670\nVENDOR_ID_GENFOUR_COMMUNICATIONS_LLC = 14671\nVENDOR_ID_DATAMAXX_APPLIED_TECHNOLOGIES_INC = 14672\nVENDOR_ID_PREFEITURA_MUNICIPAL_DE_ALEGRETE = 14673\nVENDOR_ID_INFOQUALITY_CONSULTORIA_EM_INFORMTICA = 14674\nVENDOR_ID_CENTELL_KINGDOM_TECHNOLOGIES_CORPORATION_SHANGHAI_BRANCH = 14675\nVENDOR_ID_OBSIDIAN_SYSTEMS = 14676\nVENDOR_ID_GEEKHOSTING = 14677\nVENDOR_ID_BFW_INFORMATIONSSYSTEME_GMBH = 14678\nVENDOR_ID_HANSARD_INTERNATIONAL_LTD = 14679\nVENDOR_ID_BRIGHT_GREY = 14680\nVENDOR_ID_TIXORONET_VERTRIEBSGESELLSCHAFT_MBH = 14681\nVENDOR_ID_ASOPOS_DE_VLIET = 14682\nVENDOR_ID_CENTELL_KINGDOM_TECHNOLOGIES_CORPORATION_SHANGHAI = 14683\nVENDOR_ID_SYSTEM_MANAGEMENT_NETWORK = 14684\nVENDOR_ID_DATAPOWER_TECHNOLOGY_INC = 14685\nVENDOR_ID_MEGASOFT_LIMITED = 14686\nVENDOR_ID_HALION_SYSTEMS = 14687\nVENDOR_ID_SYSTEMS_EXPERIENCE = 14688\nVENDOR_ID_URBANCODE_SOFTWARE_DEVELOPMENT_INC = 14689\nVENDOR_ID_GREYMOOSE = 14690\nVENDOR_ID_FINGERLOS = 14691\nVENDOR_ID_INTEGRATORS_AG = 14692\nVENDOR_ID_CISL_SYSTEMS_LTD = 14693\nVENDOR_ID_BMD_WIRELESS_AG = 14694\nVENDOR_ID_HERRMANNSDOERFER_SOFTWARE_ENTWICKLUNG = 14695\nVENDOR_ID_ABSOLUT_OK = 14696\nVENDOR_ID_RRDTOOL = 14697\nVENDOR_ID_CSRI_ELEKTROPRIBOR = 14698\nVENDOR_ID_HAGEN_SOFTWARE_INC = 14699\nVENDOR_ID_FRONTIERTECH = 14700\nVENDOR_ID_PERSIST_TECHNOLOGIES = 14701\nVENDOR_ID_NEUSOFT_DIGITAL_MEDICAL_SYSTEM_CO_LTD = 14702\nVENDOR_ID_MIYAKAWA_ELECTRIC_WORKS_LTD = 14703\nVENDOR_ID_PINGOS_EV = 14704\nVENDOR_ID_PROVINCE_OF_BRITISH_COLUMBIA = 14705\nVENDOR_ID_SFLOWORG = 14706\nVENDOR_ID_TATARA_SYSTEMS_INC = 14707\nVENDOR_ID_GRACELAND_UNIVERSITY = 14708\nVENDOR_ID_REACTIVITY_INC = 14709\nVENDOR_ID_TAUA_BIOMATICA = 14710\nVENDOR_ID_VAKA_TECHNOLOGY_LIMITED = 14711\nVENDOR_ID_SASCHA_GROWE = 14712\nVENDOR_ID_BLACKSBURG_ELECTRONIC_VILLAGE = 14713\nVENDOR_ID_QUESTRA_CORPORATION = 14714\nVENDOR_ID_MANYSTREAMS_INC = 14715\nVENDOR_ID_BRITISH_COLUMBIA_INSTITUTE_OF_TECHNOLOGY = 14716\nVENDOR_ID_SUNHOSTING_COMPANY = 14717\nVENDOR_ID_BKIT_GRUPPEN_AB = 14718\nVENDOR_ID_HARMONY_GOLD_OPERATIONS = 14719\nVENDOR_ID_HD_INFO = 14720\nVENDOR_ID_TECHEM_AG = 14721\nVENDOR_ID_PETER_SHILLAN = 14722\nVENDOR_ID_CANAL_SYSTEMS_GMBH = 14723\nVENDOR_ID_BUSINESS_OBJECTS = 14724\nVENDOR_ID_SAM_SOLUTIONS = 14725\nVENDOR_ID_SERVER_SIDE_SA = 14726\nVENDOR_ID_HENRIK_EDLUND = 14727\nVENDOR_ID_PRONET_SP_J = 14728\nVENDOR_ID_INNERWALL = 14729\nVENDOR_ID_TELECOM_ITALIA_LAB = 14730\nVENDOR_ID_CHRISTIAN_KUELKER = 14731\nVENDOR_ID_NODOTS_DEVELOPMENT_INC = 14732\nVENDOR_ID_YASKAWA_INFORMATION_SYSTEMS_CORPORATION = 14733\nVENDOR_ID_FLOW_COMMUNICATIONS = 14734\nVENDOR_ID_ESOO = 14735\nVENDOR_ID_GHIP_SYSTEMS_GMBH = 14736\nVENDOR_ID_GLOBAL_GRID_FORUM = 14737\nVENDOR_ID_HENDERSON_CO = 14738\nVENDOR_ID_RLEAGUECOM = 14739\nVENDOR_ID_TECHANGLE_INC = 14740\nVENDOR_ID_CATALYST_INTERNATIONAL_INC = 14741\nVENDOR_ID_DIGITAL_MULTITOOLS_INC = 14742\nVENDOR_ID_WACHOVIA_BANK = 14743\nVENDOR_ID_TELENOVA_RESEARCH_AND_DEVELOPMENT_CENTRE = 14744\nVENDOR_ID_PUMPKIN_NETWORKS = 14745\nVENDOR_ID_INTERSTORM_INC = 14746\nVENDOR_ID_VISION_INTERNET_SERVICES = 14747\nVENDOR_ID_COMPUTER_SUPPORT_SYSTEMS_PTY_LTD = 14748\nVENDOR_ID_UNIVERSITY_OF_ROCHESTER = 14749\nVENDOR_ID_AWARE_SERVERS_INC = 14750\nVENDOR_ID_SKYWARE_COMMUNICATIONS_LIMITED = 14751\nVENDOR_ID_PROWARE_TECHNOLOGY_CORP = 14752\nVENDOR_ID_PPYWORLD = 14753\nVENDOR_ID_KOCH_MIKROSYSTEME_AG = 14754\nVENDOR_ID_LYNX_TECHNIK_AG = 14755\nVENDOR_ID_PROGTEC_GMBH = 14756\nVENDOR_ID_GROISS_INFORMATICS_GMBH = 14757\nVENDOR_ID_BPS_CO_LTD = 14758\nVENDOR_ID_ADESIUM_RSEAUX_ET_SERVICES = 14759\nVENDOR_ID_WINCOR_NIXDORF_INTERNATIONAL_GMBH = 14760\nVENDOR_ID_UBISECURE_SOLUTIONS = 14761\nVENDOR_ID_INTARSYS_CONSULTING_GMBH = 14762\nVENDOR_ID_VIDEO_NET_SYSTEMS = 14763\nVENDOR_ID_MISRNET_SAE = 14764\nVENDOR_ID_GRAFIX_PROFESIONAL_SRL = 14765\nVENDOR_ID_AVICONSULT = 14766\nVENDOR_ID_BWXT_PANTEX = 14767\nVENDOR_ID_AGMARINE_INC = 14768\nVENDOR_ID_SYBARI_SOFTWARE_INC = 14769\nVENDOR_ID_TELEPORT_CONSULTING_AND_SYSTEMMANGEMENT = 14770\nVENDOR_ID_COMPUTER_SCIENCES_CORPORATION_2 = 14771\nVENDOR_ID_NEPTUNE_PROJECT = 14772\nVENDOR_ID_ENGITECH_LTD = 14773\nVENDOR_ID_GNU_INTERNET = 14774\nVENDOR_ID_PEAK_INTERNET = 14775\nVENDOR_ID_MYSTIC_CODERS = 14776\nVENDOR_ID_IZENPE_SA = 14777\nVENDOR_ID_GEV_ECOLE_DES_MINES = 14778\nVENDOR_ID_E2_TECHNOLOGY_INC = 14779\nVENDOR_ID_KAEVEE = 14780\nVENDOR_ID_THOUGHTPORT_AUTHORITY_OF_CHICACGO = 14781\nVENDOR_ID_COLE_INNOVATIONS_INC = 14782\nVENDOR_ID_ASOCIACION_PARA_LA_PROMOCION_DEL_ARTE_A_TRAVES_DE_INTERNET = 14783\nVENDOR_ID_ALTATRUST = 14784\nVENDOR_ID_FIVE4321 = 14785\nVENDOR_ID_OPEN_NETWORK_SOLUTIONS_LTD = 14786\nVENDOR_ID_ZYM_LINUX = 14787\nVENDOR_ID_WILLIAM_D_PETITT = 14788\nVENDOR_ID_PRINCIPAL_FINANCIAL_GROUP = 14789\nVENDOR_ID_STATSBIBLIOTEKET = 14790\nVENDOR_ID_NAKUA_TECHNOLOGIES = 14791\nVENDOR_ID_DATA_CONSEIL = 14792\nVENDOR_ID_SYSTEM_ENTWICKLUNG_DIETRICH_SCHULTEN = 14793\nVENDOR_ID_BANCO_HERRERO = 14794\nVENDOR_ID_INTELLOCITY = 14795\nVENDOR_ID_AUCOS_ELEKTRONISCHE_GERAETE_GMBH = 14796\nVENDOR_ID_DYNASTAR_COMMUNICATIONS = 14797\nVENDOR_ID_NETDELIVERY_CORPORATION = 14798\nVENDOR_ID_STARNET_SERVICES = 14799\nVENDOR_ID_LEGRA_SYSTEMS = 14800\nVENDOR_ID_TANGRO_SOFTWARE_COMPONENTS_GMBH = 14801\nVENDOR_ID_INDERNET = 14802\nVENDOR_ID_SCHUBERT_INFORMATIONSSYSTEME = 14803\nVENDOR_ID_INNOTRAC_DIAGNOSTICS_OY = 14804\nVENDOR_ID_AFP7 = 14805\nVENDOR_ID_TADIRAN_ELECTRONIC_SYSTEMS = 14806\nVENDOR_ID_FRIC_NET = 14807\nVENDOR_ID_THE_SAGE_COLLEGES = 14808\nVENDOR_ID_DATASUL_MED_SA = 14809\nVENDOR_ID_ADVANCED_DIGITAL_BROADCAST_LTD = 14810\nVENDOR_ID_XILITH_LLC = 14811\nVENDOR_ID_CEDARS_SINAI_HEALTH_SYSTEMS = 14812\nVENDOR_ID_FUJITSU_TRANSACTION_SOLUTIONS_INC = 14813\nVENDOR_ID_CAROTECHNOLOGY_BV = 14814\nVENDOR_ID_DATASUL_SA = 14815\nVENDOR_ID_THOMAS_POLNIK = 14816\nVENDOR_ID_4RF_COMMUNICATIONS_LTD = 14817\nVENDOR_ID_VOICE_MOBILITY_INC = 14818\nVENDOR_ID_UNIVERSITY_OF_CYPRUS = 14819\nVENDOR_ID_NET_OUTREMER_CALEDONIE = 14820\nVENDOR_ID_STIBO = 14821\nVENDOR_ID_FAJODE = 14822\nVENDOR_ID_ARUBA_NETWORKS_INC = 14823\nVENDOR_ID_CENTAUR_TECHNOLOGY_INC = 14824\nVENDOR_ID_ALDATA_SOLUTIONS_SA = 14825\nVENDOR_ID_ADAGE_NETWORKS = 14826\nVENDOR_ID_SONORYS_TECHNOLOGY_GMBH = 14828\nVENDOR_ID_CENTRA_SOFTWARE = 14829\nVENDOR_ID_UPTIME_SYSTEMLSUNGEN = 14830\nVENDOR_ID_VOETTERAT = 14831\nVENDOR_ID_ESO_CONSORTIUM = 14832\nVENDOR_ID_PORTAL_SOLUTIONS_TECHNOLOGY_INC = 14833\nVENDOR_ID_MEDIALES_GMBH = 14834\nVENDOR_ID_INFOTEC = 14835\nVENDOR_ID_VARTA_MICROBATTERY_GMBH = 14836\nVENDOR_ID_TRENCHANT_CONSULTING_LLC = 14837\nVENDOR_ID_NATIONAL_MANAGEMENT_ORGANIZATION_SA = 14838\nVENDOR_ID_NEWTECH_BT_LTD = 14839\nVENDOR_ID_SMARTWAVE_SA = 14840\nVENDOR_ID_LEA_LABORATOIRE_EUROPEEN_ADSL = 14841\nVENDOR_ID_LANERGY = 14842\nVENDOR_ID_SATNET_SARL = 14843\nVENDOR_ID_UPFRONT_SYSTEMS = 14844\nVENDOR_ID_ENGINEERING_INGEGNERIA_INFORMATICA_SPA = 14845\nVENDOR_ID_PADTEC_OPTICAL_COMPONENTS_AND_SYSTEMS = 14846\nVENDOR_ID_ORDER_OF_PREACHERS = 14847\nVENDOR_ID_BETTER_NETWORKS = 14848\nVENDOR_ID_CORPORATE_COMPUTER_SERVICES_INC = 14849\nVENDOR_ID_ARC_SOLUTIONS_LIMITED = 14850\nVENDOR_ID_STORAGE_NETWORKING_INDUSTRY_ASSOCIATION = 14851\nVENDOR_ID_KINPO_ELECTRONICS_INC = 14852\nVENDOR_ID_CIPHERQUEST_LTD = 14853\nVENDOR_ID_BEIJING_HISENSE_DIGI_TECH_COLTD = 14854\nVENDOR_ID_CERAMISTA_RECOM_SERVIEX = 14855\nVENDOR_ID_TRINITEL_CORPORATION = 14856\nVENDOR_ID_XCAT_COLTD = 14857\nVENDOR_ID_AZUNDRIS_CONSULTING = 14858\nVENDOR_ID_LAWO_AG = 14859\nVENDOR_ID_GWS_MBH = 14860\nVENDOR_ID_BRITANNIA_BUILDING_SOCIETY = 14861\nVENDOR_ID_MINISTERIO_DE_ADMINISTRACIONES_PBLICAS = 14862\nVENDOR_ID_ATMAVA_LTD = 14863\nVENDOR_ID_TNCE = 14864\nVENDOR_ID_INTERPLEX_TELECOM = 14865\nVENDOR_ID_COTTONWOOD_TECHNOLOGY_GROUP_INC = 14866\nVENDOR_ID_HALCYON_SOFTWARE_LIMITED = 14867\nVENDOR_ID_MAV_INFORMATIKA_LTD = 14868\nVENDOR_ID_SAUDI_TELECOM = 14869\nVENDOR_ID_AVAYA = 14870\nVENDOR_ID_INTER_LANDNET = 14871\nVENDOR_ID_AVK_ADHERSIS_INC = 14872\nVENDOR_ID_BROADBAND_SERVICES = 14873\nVENDOR_ID_ROCKSTORM_TECHNOLOGY_AB = 14874\nVENDOR_ID_LEADGLOBE = 14875\nVENDOR_ID_OPEN_TEXT_CORPORATION = 14876\nVENDOR_ID_PLEXUS_TECHNOLOGY_LTD = 14877\nVENDOR_ID_VCRDEV = 14878\nVENDOR_ID_WOKO = 14879\nVENDOR_ID_SYSTEMHAUS_KALKHOFF = 14880\nVENDOR_ID_QUNATECH = 14881\nVENDOR_ID_SMARTBRIDGES = 14882\nVENDOR_ID_ANTEK_NETWORKS_INC = 14883\nVENDOR_ID_EXELMON_TECHNOLOGIES = 14884\nVENDOR_ID_POLYGON_GROUP = 14885\nVENDOR_ID_AIR_CO_LTD = 14886\nVENDOR_ID_NOMURA_RESEARCH_INSTITUTE_LTD = 14887\nVENDOR_ID_DAS_WERK = 14888\nVENDOR_ID_OPENFORUMUS = 14889\nVENDOR_ID_TEAM_KONZEPT_INFORMATIONSTECHNOLOGIEN_GMBH_CO_KG = 14890\nVENDOR_ID_LAWSEAL = 14891\nVENDOR_ID_NETSYNT_SPA = 14892\nVENDOR_ID_NOXA = 14893\nVENDOR_ID_TEATICA = 14894\nVENDOR_ID_PROPEL_SOFTWARE_CORPORATION = 14895\nVENDOR_ID_ATTINGO = 14896\nVENDOR_ID_YORK_CONSULTING = 14897\nVENDOR_ID_ACCESS_COMMUNICATIONS = 14898\nVENDOR_ID_TOWN_OF_SUFFIELD = 14899\nVENDOR_ID_INTEGRATED_CONCEPTS_INTERNATIONAL = 14900\nVENDOR_ID_VODAFONE_LIBERTEL_NV = 14901\nVENDOR_ID_DATAMARK = 14902\nVENDOR_ID_DIGIROSE_TECHNOLOGY_CO_LTD = 14903\nVENDOR_ID_TWTEC = 14904\nVENDOR_ID_DEVAU_LEMPPENAU_GMBH = 14905\nVENDOR_ID_NVISION_INC = 14906\nVENDOR_ID_NOC_CCE_USP = 14907\nVENDOR_ID_UPCAST_INC = 14908\nVENDOR_ID_IGENDA_SOFTWARE = 14909\nVENDOR_ID_IP_SOLUTIONS_INC = 14910\nVENDOR_ID_RFP_DEPOT_LLC = 14911\nVENDOR_ID_SMITHS_AEROSPACE = 14912\nVENDOR_ID_RETRIEVER_COMMUNICATIONS = 14913\nVENDOR_ID_VEXUS_CONSULTING_GROUP = 14914\nVENDOR_ID_ASPIRE_TECHNOLOGIESSHENZHEN_LTD = 14915\nVENDOR_ID_UTAH_INTERACTIVE_INC = 14916\nVENDOR_ID_SIMPLETECH = 14917\nVENDOR_ID_ALGAR_TELECOM_LESTE = 14918\nVENDOR_ID_SINGLESTEP_TECHNOLOGIES = 14919\nVENDOR_ID_MINECO = 14920\nVENDOR_ID_CTW_COMPUTER = 14921\nVENDOR_ID_REALNODE_LTD = 14922\nVENDOR_ID_ABILENE_CHRISTIAN_UNIVERSITY = 14923\nVENDOR_ID_THE_NEWSOF_GROUP_INC = 14924\nVENDOR_ID_WAVECENTRAL_LLC = 14925\nVENDOR_ID_ATRAIACOM = 14926\nVENDOR_ID_DISC_UNIVERSIDAD_CATLICA_DEL_NORTE = 14927\nVENDOR_ID_UNIPULSE = 14928\nVENDOR_ID_ONSCOM_CO_LTD = 14929\nVENDOR_ID_SOLAR_TELECOM_TECHNOLOGY_INC = 14930\nVENDOR_ID_VICTORIA_UNIVERSITY_OF_TECHNOLOGY = 14931\nVENDOR_ID_GUANGZHOU_TOPTEAM_SOFTWARE_TECHNOLOGY_CO_LTD = 14932\nVENDOR_ID_CHUNG_YUAN_CHRISTIAN_UNIVERSITY = 14933\nVENDOR_ID_VODAFONE_IT_TURKEY = 14934\nVENDOR_ID_FS_WALKER_HUGHES_LIMITED = 14935\nVENDOR_ID_EUROTUX_INFORMTICA_SA = 14936\nVENDOR_ID_ITECH = 14937\nVENDOR_ID_EXACOM_INC = 14938\nVENDOR_ID_STYLEEB_LLC = 14939\nVENDOR_ID_BLUECROSS_AND_BLUESHIELD_OF_NORTH_CAROLINA = 14940\nVENDOR_ID_INFLECTION_SYSTEMS = 14941\nVENDOR_ID_AVVIO_NETWORKS = 14942\nVENDOR_ID_INNOVATION_DATA_PROCESSING = 14943\nVENDOR_ID_PRIMAL_TECHNOLOGIES = 14944\nVENDOR_ID_JBX_DESIGNS_INC = 14945\nVENDOR_ID_GOTHENBURG_UNIVERSITY = 14946\nVENDOR_ID_KYRGYZ_RUSSIAN_SLAVIC_UNIVERSITY = 14947\nVENDOR_ID_HUNGARIAN_FOREIGN_TRADE_BANK = 14948\nVENDOR_ID_NORTH_BUILDING_TECHNOLOGIES_LTD = 14949\nVENDOR_ID_SERVICIOS_DIGITALES_DE_CERTIFICACION_SL = 14950\nVENDOR_ID_EFACEC_SISTEMAS_DE_ELECTRNICA_SA = 14951\nVENDOR_ID_EYEHEIGHT_LTD = 14952\nVENDOR_ID_SERIO_LTD = 14953\nVENDOR_ID_CINGULAR_WIRELESS = 14954\nVENDOR_ID_CANAM = 14955\nVENDOR_ID_NETGATE_SL = 14956\nVENDOR_ID_NISSAN_NORTH_AMERICA = 14957\nVENDOR_ID_PSC_TECHNOLOGY_GMBH = 14958\nVENDOR_ID_CBR_YAZLM_DANMANLK_A = 14959\nVENDOR_ID_UNDERNET = 14960\nVENDOR_ID_MILLENNIUM_TECHNOLOGY_LIMITED = 14961\nVENDOR_ID_INGOSSTRAKH_LTD = 14962\nVENDOR_ID_TELEMETRY_COMMUNICATIONS_SYSTEMS_INC = 14963\nVENDOR_ID_COGENIT = 14964\nVENDOR_ID_WIDEINFO_CORPORATION = 14965\nVENDOR_ID_LINOS_PHOTONICS_GMBH_CO_KG = 14966\nVENDOR_ID_HORSFALLORG = 14967\nVENDOR_ID_WYNIWYG = 14968\nVENDOR_ID_COLUMBIA_ULTIMATE = 14969\nVENDOR_ID_CAM_INTERNET = 14970\nVENDOR_ID_DLH_SERVICES = 14971\nVENDOR_ID_JEB = 14972\nVENDOR_ID_DEEMINGNET = 14973\nVENDOR_ID_DATA_TELECOM_O = 14974\nVENDOR_ID_BRY_TECNOLOGIA_SA = 14975\nVENDOR_ID_SOFTMILLENNIUM = 14976\nVENDOR_ID_WUERTH_ELEKTRONIK = 14977\nVENDOR_ID_COMMERZBANK_AG = 14978\nVENDOR_ID_CORE_TEC_COMMUNICATIONS_LLC = 14979\nVENDOR_ID_GUIDANT_CORPORATION = 14980\nVENDOR_ID_COGENT_LOGIC_CORPORATION = 14981\nVENDOR_ID_IKU_SYSTEMHAUS_AG = 14982\nVENDOR_ID_WOAF_TECH_LTD = 14983\nVENDOR_ID_POCO = 14984\nVENDOR_ID_HSI_HU_SERION_HIGH_SCHOOL = 14985\nVENDOR_ID_NEXTREAMING_CORPORATION = 14986\nVENDOR_ID_E3NETWORKSLTD = 14987\nVENDOR_ID_MIKROTIK = 14988\nVENDOR_ID_CINESITE_EUROPE_LTD = 14989\nVENDOR_ID_INM_MAGIC = 14990\nVENDOR_ID_RESA_AIRPORT_DATA_SYSTEMS = 14991\nVENDOR_ID_STAGIRA = 14992\nVENDOR_ID_IGD = 14993\nVENDOR_ID_MITEQ_INC = 14994\nVENDOR_ID_NETINARY = 14995\nVENDOR_ID_STILLE_DESIGN = 14996\nVENDOR_ID_SOHOWARE_INC = 14997\nVENDOR_ID_TRANSPORTATION_SECURITY_ADMINISTRATION = 14998\nVENDOR_ID_CODESIC = 14999\nVENDOR_ID_KONTRON_CANADA_INC = 15000\nVENDOR_ID_SEWARD_DESIGNS_INC = 15001\nVENDOR_ID_INTENTIONAL_SOFTWARE_CORPORATION = 15002\nVENDOR_ID_IPONWEB_LTD = 15003\nVENDOR_ID_RUGGEDCOM_INC = 15004\nVENDOR_ID_FIBA_SOFTWARE_SRL = 15005\nVENDOR_ID_PWPT_WASKO_SP_Z_OO = 15006\nVENDOR_ID_METRO_ETHERNET_FORUM = 15007\nVENDOR_ID_TILARIA_INC = 15008\nVENDOR_ID_GPLICITY = 15009\nVENDOR_ID_LOGITEL_LTD = 15010\nVENDOR_ID_REVIVIO_INCORPORATED = 15011\nVENDOR_ID_BERNARD_MADOFF_INVESTMENT_SECURITIES = 15012\nVENDOR_ID_QUANTEC_LLC = 15013\nVENDOR_ID_8004_LIMITED = 15014\nVENDOR_ID_INTEGRATED_MODULAR_SYSTEMS_INC = 15015\nVENDOR_ID_NETTIPORTTI_OY = 15016\nVENDOR_ID_JOHNS_HOPKINS_SINGAPORE = 15017\nVENDOR_ID_DAYDAY_SOFTWARE_LTD = 15018\nVENDOR_ID_BAZY_I_SYSTEMY_BANKOWE_SP_Z_OO = 15019\nVENDOR_ID_PRODUCTOS_PROFESIONALES_DE_TELECOMUNICACION = 15020\nVENDOR_ID_MOBIDOT = 15021\nVENDOR_ID_GOLDEN_GATE_UNIVERSITY = 15022\nVENDOR_ID_TREMIUM = 15023\nVENDOR_ID_TOUGASNET = 15024\nVENDOR_ID_STUDENTERSAMFUNDET_I_TRONDHJEM = 15025\nVENDOR_ID_CENTRE_HOSPITALIER_DE_ROANNE = 15026\nVENDOR_ID_SECCOMMERCE_TECHNOLOGIES_AG = 15027\nVENDOR_ID_JAMES_COLLINGS = 15028\nVENDOR_ID_JAREVA_TECHNOLOGIES_INC = 15029\nVENDOR_ID_GUANGZHOU_RCOM_COMMUNICATION_CO_LTD = 15030\nVENDOR_ID_UNIVERSITY_OF_MELBOURNE_COMPUTER_SCIENCE_GRID_COMPUTING = 15031\nVENDOR_ID_INQGEN_TECHNOLOGY_CO_LTD = 15032\nVENDOR_ID_REALTIME_EMBEDDED_AB = 15033\nVENDOR_ID_KSOLUTIONS_SPA = 15034\nVENDOR_ID_PARTNER_VOXTREAM = 15035\nVENDOR_ID_LOGICAL_2 = 15036\nVENDOR_ID_SHANDS_HEALTHCARE_AND_TEACHING_CLINICS_INC = 15037\nVENDOR_ID_CHARLES_STARK_DRAPER_LABORATORY_INC = 15038\nVENDOR_ID_ARMEDIA = 15039\nVENDOR_ID_GLOBAL_AEON_PTYLTD = 15040\nVENDOR_ID_POZNAN_UNIVERSITY_OF_TECHNOLOGY = 15041\nVENDOR_ID_VSECURE = 15042\nVENDOR_ID_JENG_YE_TECH_ENTERPRISE_COLTD = 15043\nVENDOR_ID_TRANSATEL = 15044\nVENDOR_ID_MONEYAM_LTD = 15045\nVENDOR_ID_CLICKFOX_LLC = 15046\nVENDOR_ID_JAVA_SOFTWARE_FOUNDRY = 15047\nVENDOR_ID_STARTEK_ENGINEERING_INC = 15048\nVENDOR_ID_SEATTLE_CENTRAL_COMMUNITY_COLLEGE = 15049\nVENDOR_ID_WAYCOM_INTERNATIONAL = 15050\nVENDOR_ID_FINKLE_ENTERPRISES = 15051\nVENDOR_ID_GEMINI_TECHNOLOGIES_INC = 15052\nVENDOR_ID_MERITEK_SYSTEMS_INC = 15053\nVENDOR_ID_PASS_K = 15054\nVENDOR_ID_IKEGAMI_TSUSHINKI_CO_LTD = 15055\nVENDOR_ID_ANTHONYHANORG = 15056\nVENDOR_ID_MORAVIAPRESS_AS = 15057\nVENDOR_ID_CEISEC = 15058\nVENDOR_ID_BAPTISTE_MALGUY = 15059\nVENDOR_ID_ZENTIC = 15060\nVENDOR_ID_SERVUS_AS = 15061\nVENDOR_ID_MILLION_CORPORATION = 15062\nVENDOR_ID_EKO_SYSTEMS_INC = 15063\nVENDOR_ID_MANY_SA = 15064\nVENDOR_ID_MANTAS_INC = 15065\nVENDOR_ID_JAMES_RICHARDSON_ENTERPRISES = 15066\nVENDOR_ID_SMTMS = 15067\nVENDOR_ID_BEIJING_CAPE_COMPUTER_SOFTWARE_ENGINEERING_CORP = 15068\nVENDOR_ID_ELASTO_CENTRO = 15069\nVENDOR_ID_YESCOMM = 15070\nVENDOR_ID_FRONTIER_SOLUTION_CO_LTD = 15071\nVENDOR_ID_HSB_BANK_AB = 15072\nVENDOR_ID_SYNAD_TECHNOLOGIES_LTD = 15073\nVENDOR_ID_THUS_PLC = 15074\nVENDOR_ID_ICOM = 15075\nVENDOR_ID_FRESENIUS_AG = 15076\nVENDOR_ID_THERMEON_CORPORATION = 15077\nVENDOR_ID_SYSNET_TELEMATICA_SRL = 15078\nVENDOR_ID_REMARK_INTERNET_LIMITED = 15079\nVENDOR_ID_XAIDAT = 15080\nVENDOR_ID_SCREWAGE_INC = 15081\nVENDOR_ID_CAREY_INTERNATIONAL_INC = 15082\nVENDOR_ID_RENTPAYMENTCOM = 15083\nVENDOR_ID_MOBILE_RADIUS_USA_INC = 15084\nVENDOR_ID_AFPA_DSIS = 15085\nVENDOR_ID_OMEGA_TRIN_LTD = 15086\nVENDOR_ID_PROJEKT13 = 15087\nVENDOR_ID_ADVIZEX_TECHNOLOGIES_LLC = 15088\nVENDOR_ID_SCIENTIFIC_SYSTEMS_COMPANY_INC = 15089\nVENDOR_ID_TEAMIX_GMBH = 15090\nVENDOR_ID_BOYD_CONSULTING_SERVICES_LLC = 15091\nVENDOR_ID_PERFCAP_CORPOATION = 15092\nVENDOR_ID_NOVARTIS_INTERNATIONAL_AG = 15093\nVENDOR_ID_LINETEC_GMBH = 15094\nVENDOR_ID_TDC_SERVICES_A_S = 15095\nVENDOR_ID_AGNCIA_CATALANA_DE_CERTIFICACI = 15096\nVENDOR_ID_SEVENSPACE = 15097\nVENDOR_ID_SMITHSONIAN_INSTITUTION = 15098\nVENDOR_ID_LOMA_LINDA_UNIVERSITY = 15099\nVENDOR_ID_GRUPO_DE_ARQUITECTURA_Y_CONCURRENCIA_GAC = 15100\nVENDOR_ID_VOLT_DELTA_RESOURCES_INC = 15101\nVENDOR_ID_US_LEC = 15102\nVENDOR_ID_EIVD = 15103\nVENDOR_ID_MODLINK_NETWORKS = 15104\nVENDOR_ID_503_INTEGRATED_SYSTEMS = 15105\nVENDOR_ID_WIFICOM_TECHNOLOGIES_LTD = 15106\nVENDOR_ID_SIRAYA_INC = 15107\nVENDOR_ID_MACAO_POST_ESIGNTRUST_CERTIFICATION_AUTHORITY = 15108\nVENDOR_ID_PSYTECHNICS = 15109\nVENDOR_ID_SAVANTIS_SYSTEMS_INC = 15110\nVENDOR_ID_DENNIS_ERIKSSON = 15111\nVENDOR_ID_WHACK_PRODUCTIONS = 15112\nVENDOR_ID_MAGTEK = 15113\nVENDOR_ID_STABILIZER_AB = 15114\nVENDOR_ID_OBVIUS_LLC = 15115\nVENDOR_ID_LIBERTY_IT_SOLUTIONS = 15116\nVENDOR_ID_PROTECTION_ONE_INC = 15117\nVENDOR_ID_WESTAR_ENERGY = 15118\nVENDOR_ID_FIDELITY_NATIONAL_INFORMATION_SOLUTIONS = 15119\nVENDOR_ID_CRCNET_WIRELESS_NETWORK = 15120\nVENDOR_ID_MENTATA_SYSTEMS = 15121\nVENDOR_ID_INTERFACE_WEB_HOSTING = 15122\nVENDOR_ID_FACHHOCHSCHULE_OLDENBURG_OSTFRIESLAND_WILHELMSHAVEN = 15123\nVENDOR_ID_RODAN_SYSTEMS_SA = 15124\nVENDOR_ID_VECTURA = 15125\nVENDOR_ID_CUNY_CIS = 15127\nVENDOR_ID_VERGATA_EDV_BERATUNG = 15128\nVENDOR_ID_E_CARD_LTD = 15129\nVENDOR_ID_GENS_SOFTWARE_LTD = 15130\nVENDOR_ID_EDGEACCESS = 15131\nVENDOR_ID_SIX_CONTINENTS_HOTELS = 15132\nVENDOR_ID_ILLINOIS_INSTITUTE_OF_TECHNOLOGY = 15133\nVENDOR_ID_CHRISTIAN_BOESCH = 15134\nVENDOR_ID_OMATIS = 15135\nVENDOR_ID_SUKUMAR_PATEL = 15136\nVENDOR_ID_ENOVIA = 15137\nVENDOR_ID_SIM_FREAKS = 15138\nVENDOR_ID_LANDTIME_INC = 15139\nVENDOR_ID_YOYOWEB = 15140\nVENDOR_ID_INFOTROPIC_AB = 15141\nVENDOR_ID_COMUNICANDO_SOCIET_PER_AZIONI = 15142\nVENDOR_ID_SYNERGY_BUSINESS_SOLUTIONS_INC = 15143\nVENDOR_ID_BINARY_WAVE_TECHNOLOGIES_INC = 15144\nVENDOR_ID_IREASONING_NETWORKS = 15145\nVENDOR_ID_M444_SYSTEMS_INC = 15146\nVENDOR_ID_HRVATSKE_AUTOCESTE_DOO_HAC = 15147\nVENDOR_ID_WITTEVEENBOS = 15148\nVENDOR_ID_XANTURYCOM = 15149\nVENDOR_ID_EXOSEC = 15150\nVENDOR_ID_SPYDERWORKS_LTD = 15151\nVENDOR_ID_SCHOLL_ENGINEERING = 15152\nVENDOR_ID_DMSFACTORY_GMBH = 15153\nVENDOR_ID_ACTIVIA_NETWORKS = 15154\nVENDOR_ID_IPSQUARE_INC = 15155\nVENDOR_ID_ACCUSYS = 15156\nVENDOR_ID_DL_S = 15157\nVENDOR_ID_SCA = 15158\nVENDOR_ID_ULTRADYNE = 15159\nVENDOR_ID_INTERACTIVE_NORTHWEST_INC = 15160\nVENDOR_ID_IDEALAB = 15161\nVENDOR_ID_MOVILOK_INTERACTIVIDAD_MOVIL_SL = 15162\nVENDOR_ID_NETKINGCALL_CO_LTD = 15163\nVENDOR_ID_OPEN_POINT_NETWORKS = 15164\nVENDOR_ID_NT_SYSTEMS = 15165\nVENDOR_ID_BRIAN_BUNNELL = 15166\nVENDOR_ID_CHAPCOM = 15167\nVENDOR_ID_VOSSLOH_INFORMATION_TECHNOLOGIES_KARLSFELD_GMBH = 15168\nVENDOR_ID_IIZUKA_SOFTWARE_TECHNOLOGIES = 15169\nVENDOR_ID_CRINIS_NETWORKS = 15170\nVENDOR_ID_LANDMARK_GRAPHICS_CORPORATION = 15171\nVENDOR_ID_SUPCIKNET = 15172\nVENDOR_ID_HAMMERHEAD_SYSTEMS = 15173\nVENDOR_ID_SAFESCRYPT_LIMITED = 15174\nVENDOR_ID_LONNY_SOFTWARE = 15175\nVENDOR_ID_ADVANCED_INFO_SERVICE_PLC = 15176\nVENDOR_ID_ADMTEK_INCORPORATED = 15177\nVENDOR_ID_AXTION_SYSTEMS_CORPORATION = 15178\nVENDOR_ID_SEANCE_SOFTWARE_INC = 15179\nVENDOR_ID_CITY_OF_BLOOMINGTON_IN = 15180\nVENDOR_ID_INEOQUEST_TECHNOLOGIES_INC = 15181\nVENDOR_ID_ADS_TEC_GMBH = 15182\nVENDOR_ID_OBJECTLAB_LLC = 15183\nVENDOR_ID_ITXC = 15184\nVENDOR_ID_PHANTASIA_BROADCAST_LTD = 15185\nVENDOR_ID_SOLUMSTAR = 15186\nVENDOR_ID_NYS_DEPARTMENT_OF_CIVIL_SERVICE = 15187\nVENDOR_ID_GEMFOR_SRO = 15188\nVENDOR_ID_OBJECTLAB_LLC_2 = 15189\nVENDOR_ID_INCNETWORKS_INC = 15190\nVENDOR_ID_VOICE_PRINT_INTERNATIONAL_INC = 15191\nVENDOR_ID_EVERGREEN_ASSURANCE_INC = 15192\nVENDOR_ID_TACIT_NETWORKS = 15193\nVENDOR_ID_ALAN_FLETT = 15194\nVENDOR_ID_PRIVAT = 15195\nVENDOR_ID_LIQWID_NETWORKS = 15196\nVENDOR_ID_HOW_COLTD = 15197\nVENDOR_ID_FNET_CO_LTD = 15198\nVENDOR_ID_INFOLOGIC_NEDERLAND_BV = 15199\nVENDOR_ID_FLEXIBIX_INC = 15200\nVENDOR_ID_UPSYNC_SOFTWARE_INDIA_PRIVATE_LTD = 15201\nVENDOR_ID_OE_CONSULT_SOFTWARE_GMBH = 15202\nVENDOR_ID_TDC_MOBILE_A_S = 15203\nVENDOR_ID_MOBILETHINK_A_S = 15204\nVENDOR_ID_NORDSAN_TECHNOLOGY_CO_LTD = 15205\nVENDOR_ID_VISUALPIX_SA = 15206\nVENDOR_ID_MODUL_1 = 15207\nVENDOR_ID_OMBRE_ET_PIXEL = 15208\nVENDOR_ID_PRECISION_THERAPY_INTERNATIONAL = 15209\nVENDOR_ID_SHINKURO_INC = 15210\nVENDOR_ID_NORTH_COUNTRY_INTERNET_ACCESS = 15211\nVENDOR_ID_ITAU = 15212\nVENDOR_ID_ITAUSA = 15213\nVENDOR_ID_GLOBAL_NETWORK_OPERATIONS_LTD = 15214\nVENDOR_ID_AGILEJAVACOM = 15215\nVENDOR_ID_WHITE_RABBIT = 15216\nVENDOR_ID_ALTAVISTA = 15217\nVENDOR_ID_KSC_COMMERCIAL_INTERNET_COLTD = 15218\nVENDOR_ID_SEVOI_CO_LTD = 15219\nVENDOR_ID_NV_QWENTES_SA = 15220\nVENDOR_ID_LORUS_INC = 15221\nVENDOR_ID_RASTAR_DIGITAL_MARKETING = 15222\nVENDOR_ID_ANDAGO = 15223\nVENDOR_ID_OZTECH = 15224\nVENDOR_ID_NIGHTSTAR_CORPORATION = 15225\nVENDOR_ID_ETRONICS = 15226\nVENDOR_ID_VENUS_INFO_TECH_INC = 15227\nVENDOR_ID_DAMM_CELLULAR_SYSTEMS_A_S = 15228\nVENDOR_ID_T_SYSTEMS_SCHWEIZ_AG = 15229\nVENDOR_ID_SECURIT_BV = 15230\nVENDOR_ID_SCHULZ_ENGINEERING = 15231\nVENDOR_ID_COMBOX_FOTOFINDER_GMBH = 15232\nVENDOR_ID_REGENATIVE_INC = 15233\nVENDOR_ID_SOFTSWITCHING_TECHNOLOGIES = 15234\nVENDOR_ID_XPOINT_TECHNOLOGIES_INC = 15235\nVENDOR_ID_R_K_GLOBAL_BUSINESS_SERVICES_INC = 15236\nVENDOR_ID_INTELLINGER_SOFTWARE_CORPORATION = 15237\nVENDOR_ID_COLLINS_ENTERPRISES_LLC = 15238\nVENDOR_ID_APPLICO_SECURITY_INC = 15239\nVENDOR_ID_AHB_INTERNET_SOLUTIONS = 15240\nVENDOR_ID_NIMEL = 15241\nVENDOR_ID_TOOLCASE_LLC = 15242\nVENDOR_ID_GAV_LV = 15243\nVENDOR_ID_ESSENTIAL_SYSTEMS_INC = 15244\nVENDOR_ID_INFNIS = 15245\nVENDOR_ID_EDV_BERATUNG_NETZWERKTECHNIK_DIPL_ING_MATTHIAS_KAHLE = 15246\nVENDOR_ID_ROCKSOFT_LIMITED = 15247\nVENDOR_ID_QUANTEL_LTD = 15248\nVENDOR_ID_X_CELLENT_TECHNOLOGIES_GMBH = 15249\nVENDOR_ID_MORSE_GROUP_LTD = 15250\nVENDOR_ID_DEUTSCHE_TELEKOM_T_COM = 15251\nVENDOR_ID_SBC_LTD = 15252\nVENDOR_ID_CEYBA = 15253\nVENDOR_ID_KASEYA_SWEDEN_AB_FORMERLY_INTELLIPOOL_AB = 15254\nVENDOR_ID_RELIABLE_CONTROLS_CORPORATION = 15255\nVENDOR_ID_UNITED_NATIONS = 15256\nVENDOR_ID_CITY_COMPUTING_LIMITED = 15257\nVENDOR_ID_EXERS_TECHNOLOGIES_INC = 15258\nVENDOR_ID_SAARLNDISCHER_RUNDFUNK = 15259\nVENDOR_ID_UNIVERSIT_CAHTOLIQUE_DE_LOUEST = 15260\nVENDOR_ID_UNICON_SOFTWARE_GMBH = 15261\nVENDOR_ID_DATA_DISPLAY_LIMITED = 15262\nVENDOR_ID_DLRG_LANDESVERBAND_RHEINLAND_PFALZ = 15263\nVENDOR_ID_ANONYMIZER_INC = 15264\nVENDOR_ID_TELELOGIC_AB = 15265\nVENDOR_ID_OMNIBUS_SYSTEMS_LTD = 15266\nVENDOR_ID_DAMAGE_PREVENTION_SYSTEMS = 15267\nVENDOR_ID_OY_NETITBE_LTD = 15268\nVENDOR_ID_CRANIAC_ENTERTAINMENT = 15269\nVENDOR_ID_PRINTCAFE_SOFTWARE_INC = 15270\nVENDOR_ID_OBERFINANZDIREKTION_KOBLENZ = 15271\nVENDOR_ID_MAATEC = 15272\nVENDOR_ID_THE_PALOMA_GROUP_INC = 15273\nVENDOR_ID_PAUL_SCHERRER_INSTITUT = 15274\nVENDOR_ID_AAE_SYSTEMS = 15275\nVENDOR_ID_BEARASP = 15276\nVENDOR_ID_SOFTTREE_TECHNOLOGIES_INC = 15277\nVENDOR_ID_OBLICORE_INC = 15278\nVENDOR_ID_WFI = 15279\nVENDOR_ID_RELAPIXITY_LLC = 15280\nVENDOR_ID_ZEOMEGA_INFOTECT = 15281\nVENDOR_ID_GCOM = 15282\nVENDOR_ID_MIKROLIITTI_OY = 15283\nVENDOR_ID_POSTA_SLOVENIJE = 15284\nVENDOR_ID_ISOLV_TECHNOLOGIES_CC = 15285\nVENDOR_ID_ADPM = 15286\nVENDOR_ID_FOB_TEAM = 15287\nVENDOR_ID_REGISTERIT_SPA = 15288\nVENDOR_ID_ADVANCED_BROADBAND_COMMUNICATIONS_CENTER_CCABA_UPC = 15289\nVENDOR_ID_ORDWAY_CENTER_FOR_THE_PERFORMING_ARTS = 15290\nVENDOR_ID_MACH_TECHNOLOGY_INC = 15291\nVENDOR_ID_AMERICAN_CITY_BUSINESS_JOURNALS = 15292\nVENDOR_ID_CODERANGER_INC = 15293\nVENDOR_ID_EP_IMAGING_CONCEPTS_INC = 15294\nVENDOR_ID_METRIMA = 15295\nVENDOR_ID_PLUM_FINANCIAL_SERVICE_PTY_LTD = 15296\nVENDOR_ID_SONERA_SOLUTIONS_OY = 15297\nVENDOR_ID_VOLKSWAGEN_BANK_GMBH = 15298\nVENDOR_ID_ELCOTEQ_NETWORK_CORPORATION = 15299\nVENDOR_ID_WIRELESS_INDEPENDENT_PROVIDER_AB = 15300\nVENDOR_ID_KFKI_RMKI_SZHK = 15301\nVENDOR_ID_GALAXESOLUTIONS_INC = 15302\nVENDOR_ID_ACCELERATE_IT_SERVICES = 15303\nVENDOR_ID_TAKEIT = 15304\nVENDOR_ID_MBUF = 15305\nVENDOR_ID_MOUNT_ROYAL_COLLEGE = 15306\nVENDOR_ID_ESPHION_LTD = 15307\nVENDOR_ID_PEACE_SOFTWARE = 15308\nVENDOR_ID_E_DYNASTY_LIMITED = 15309\nVENDOR_ID_EXODUS_COMMUNICAITONS = 15310\nVENDOR_ID_MISTRUST_CERTIFICATION_AUTHORITY = 15311\nVENDOR_ID_JOZEF_STEFAN_INSTITUTE = 15312\nVENDOR_ID_REDLINK_MEDIENDIENSTE_GMBH = 15313\nVENDOR_ID_IT_A_S = 15314\nVENDOR_ID_INTERNET_BUSINESS_NEWS = 15315\nVENDOR_ID_HUB_HILL_SOFTWARE = 15316\nVENDOR_ID_WELLS_FARGO = 15317\nVENDOR_ID_EDU4_FRANCE_SA = 15318\nVENDOR_ID_SKYPILOT_NETWORK_INC = 15319\nVENDOR_ID_CUSTOM7 = 15320\nVENDOR_ID_TRANSCOR_INC = 15321\nVENDOR_ID_ECHOPASS_CORPORATION = 15322\nVENDOR_ID_INP_NET = 15323\nVENDOR_ID_WALTER_E_HELMKE_LIBRARY = 15324\nVENDOR_ID_STVA = 15325\nVENDOR_ID_MOBICUS_OY = 15326\nVENDOR_ID_HALDEN_DATASERVICE_AS = 15327\nVENDOR_ID_SVANBERG_CONSULTING = 15328\nVENDOR_ID_DALIAN_UNIVERSITY_OF_TECHNOLOGY = 15329\nVENDOR_ID_KLEEGROUP = 15330\nVENDOR_ID_INDAGON_OY = 15331\nVENDOR_ID_LOGICA_UK_LTD = 15332\nVENDOR_ID_GLOBAL_COMMUNICATION_TECHNOLOGIESINC = 15333\nVENDOR_ID_MWVCAA = 15334\nVENDOR_ID_ITXC_2 = 15335\nVENDOR_ID_TELEMET_AMERICA_INC = 15336\nVENDOR_ID_PHOTRONICS_INC = 15337\nVENDOR_ID_PALMSOURCE_INC = 15338\nVENDOR_ID_ILSE_MEDIA_GROEP_BV = 15339\nVENDOR_ID_GEORGE_FURNITURE = 15340\nVENDOR_ID_WUHAN_YANGTZE_COMMUNICATIONS_INDUSTRY_GROUP_COLTDCHINA = 15341\nVENDOR_ID_VITALECT_TECHNOLOGIES_INDIA_PVT_LTD = 15342\nVENDOR_ID_FUNDACION_INASMET = 15343\nVENDOR_ID_YOMI_PLC = 15344\nVENDOR_ID_DANSK_RDE_KORS = 15345\nVENDOR_ID_VIKING_SYSTEMS = 15346\nVENDOR_ID_IGH_INGENIEURGESELLSCHAFT_HPFNER_MBH = 15347\nVENDOR_ID_PRECISION_INTEROP_LLC = 15348\nVENDOR_ID_ANDREAS_BARTSCH_IT_SOLUTIONS = 15349\nVENDOR_ID_JATOSOFT_LLC = 15350\nVENDOR_ID_FOREVERLIVINGCOM = 15351\nVENDOR_ID_UNIVERSITY_OF_ARKANSAS_AT_FORT_SMITH = 15352\nVENDOR_ID_INTEGRATED_DIGITAL_SOLUTIONS_INC = 15353\nVENDOR_ID_NUMBER_1_CUSTOMER_LLC = 15354\nVENDOR_ID_INTEGAN = 15355\nVENDOR_ID_BARTNET = 15356\nVENDOR_ID_DIVERSIFIED_SYSTEMS_RESOURCES_LTD = 15357\nVENDOR_ID_CYGNETRON_INC = 15358\nVENDOR_ID_MULTIDAS_TECHNOLOGIES_INC = 15359\nVENDOR_ID_CENTRE_DE_SANTE_MENTALE = 15360\nVENDOR_ID_RPA_RESEARCH_CO_LTD = 15361\nVENDOR_ID_DIGITAL_ON_NET_CO_LTD = 15362\nVENDOR_ID_HOTEL_INTERSKI = 15363\nVENDOR_ID_SIBSNET_TECHNOLOGIES = 15364\nVENDOR_ID_INFOSTEP = 15365\nVENDOR_ID_DUNHUANG_ACADEMY = 15366\nVENDOR_ID_ZLANTEC = 15367\nVENDOR_ID_UNIXAG_SIEGEN = 15368\nVENDOR_ID_CITITECH_AUSTRALIA = 15369\nVENDOR_ID_GIGA_BYTE_TECHNOLOGY_CO_LTD = 15370\nVENDOR_ID_HORRY_TELEPHONE_COOPERATIVE = 15371\nVENDOR_ID_MAX_PLANCK_INSTITUTE_FOR_EVOLUTIONARY_ANTHROPOLOGY = 15372\nVENDOR_ID_NASK = 15373\nVENDOR_ID_ENFO_OY = 15374\nVENDOR_ID_HSB_SYSTEMHAUS_GMBH = 15375\nVENDOR_ID_DE_NAYER = 15376\nVENDOR_ID_CHILIMOON_FOUNDATION = 15377\nVENDOR_ID_CSI_PIEMONTE = 15378\nVENDOR_ID_ALLOCITY = 15379\nVENDOR_ID_ALTERPOINT_INC = 15380\nVENDOR_ID_WILKES_UNIVERSITY = 15381\nVENDOR_ID_BIT_HOSTING = 15382\nVENDOR_ID_BLUEJAVELIN_INC = 15383\nVENDOR_ID_NCARPCOM = 15384\nVENDOR_ID_GENASYS_II_SPAIN = 15385\nVENDOR_ID_IBIS_TECNOLOGIA_E_INFORMACAO = 15386\nVENDOR_ID_INDUSTRI_TELEKOMUNIKASI_INDONESIA_INTI = 15387\nVENDOR_ID_MAGINET_COMPANY_LTD = 15388\nVENDOR_ID_BESTWAY_TELECOM = 15389\nVENDOR_ID_SILU_CO = 15390\nVENDOR_ID_IEI = 15391\nVENDOR_ID_OLVIKO = 15392\nVENDOR_ID_AVESTAPOLARIT_AB = 15393\nVENDOR_ID_PT_SIGMA_CIPTA_CARAKA = 15394\nVENDOR_ID_CROSSML = 15395\nVENDOR_ID_ALFA_ARISS_BV = 15396\nVENDOR_ID_NETINTACT_AB = 15397\nVENDOR_ID_IC3S_AG = 15398\nVENDOR_ID_UNIVERSITE_DE_POITIERS = 15399\nVENDOR_ID_POST_CONSULT_INTERNATIONAL = 15400\nVENDOR_ID_EUNET_EDV_UND_INTERNET_DIENSTLEISTUNGS_AG = 15401\nVENDOR_ID_PROXIMITY_CORP = 15402\nVENDOR_ID_T_SYSTEMS_CDS_GMBH = 15403\nVENDOR_ID_PENTELEDATA_INC = 15404\nVENDOR_ID_COMUNICACIONES_NETPEOPLE_CA = 15405\nVENDOR_ID_AXIOM_INTEGRATION_INC = 15406\nVENDOR_ID_AMBICOM_INC = 15407\nVENDOR_ID_TRUECONTEXT_INC = 15408\nVENDOR_ID_CUSTOMIZED_DATABASE_SYSTEMS = 15409\nVENDOR_ID_SEAWAY_NETWORKS = 15410\nVENDOR_ID_LASIPALATSIN_MEDIAKESKUS_OY = 15411\nVENDOR_ID_COTAGESOFT_INC = 15412\nVENDOR_ID_ODEN_ODEN_WIRELESS_NETWORKS_TECHNOLOGY_SHANGHAI_LTD = 15413\nVENDOR_ID_BILLHUSLERCOM = 15414\nVENDOR_ID_OPENET_INFORMATION_TECHNOLOGY_SHENZHEN_COLTD = 15415\nVENDOR_ID_SAFT_POWER_SYSTEMS = 15416\nVENDOR_ID_IMA_INFORMATICA_DE_MUNICIPIOS_ASSOCIADOS = 15417\nVENDOR_ID_FORUM_SYSTEMS_INC = 15418\nVENDOR_ID_FOREST_SIDING_SUPPLY = 15419\nVENDOR_ID_LIGHTSURF_TECHNOLOGIES = 15420\nVENDOR_ID_CHIEMGAU_GYMNASIUM_TRAUNSTEIN = 15421\nVENDOR_ID_ARTIFINTELLIGENCE_LLC = 15422\nVENDOR_ID_NETSPACE_SOLUES_INFORMTICAS = 15423\nVENDOR_ID_STOREIMAGE_PROGRAMS_INC = 15424\nVENDOR_ID_IMAGESTREAM_INTERNET_SOLUTIONS = 15425\nVENDOR_ID_KOREA_INTERNET_DATA_CENTER = 15426\nVENDOR_ID_HWA_JIN_SEO = 15427\nVENDOR_ID_CYBERTEC_PTY_LTD = 15428\nVENDOR_ID_FUTURE_COMPUTING_SOLUTIONS_INDIA_PVT_LTD = 15429\nVENDOR_ID_JIN_INFORMATION_SYSTEMS = 15430\nVENDOR_ID_XION_IT_SYSTEMS_AG = 15431\nVENDOR_ID_CYBCON_INDUSTRIES = 15432\nVENDOR_ID_LANDESPOLIZEI_MECKLENBURG_VORPOMMERN = 15433\nVENDOR_ID_CHEBUCTO_COMMUNITY_NET = 15434\nVENDOR_ID_WORLDNET21 = 15435\nVENDOR_ID_OSITOOLS = 15436\nVENDOR_ID_SSO = 15437\nVENDOR_ID_RTL_TELEVISION = 15438\nVENDOR_ID_PASS_TECHNOLOGIE = 15439\nVENDOR_ID_ZPH_LITEX = 15440\nVENDOR_ID_KARELL = 15441\nVENDOR_ID_ORCHESTEL_SYSTEMS = 15442\nVENDOR_ID_JP_SYNC = 15443\nVENDOR_ID_SAFFRON_SOLUTIONS_INC = 15444\nVENDOR_ID_SBS = 15445\nVENDOR_ID_CYBERPOWER_SYSTEMS_INC = 15446\nVENDOR_ID_SEM_LTD = 15447\nVENDOR_ID_DAMOVO_CESKA_REPUBLIKA = 15448\nVENDOR_ID_FOURSYS_INC = 15449\nVENDOR_ID_INNOMINATE_SECURITY_TECHNOLOGIES_AG = 15450\nVENDOR_ID_REALITATEA_TV = 15451\nVENDOR_ID_GEOVARIANCES = 15452\nVENDOR_ID_ABZ_NEDERLAND = 15453\nVENDOR_ID_ARBOR_AUDIOCOMMUNICATIONS = 15454\nVENDOR_ID_UNASSIGNED_20 = 15455\nVENDOR_ID_LA_COCINA = 15456\nVENDOR_ID_ACKERNET = 15457\nVENDOR_ID_MARK_MCKENZIE = 15458\nVENDOR_ID_M_SYSTEMS = 15459\nVENDOR_ID_ORCHESTEL_SYSTEMS_2 = 15460\nVENDOR_ID_CORYBANT = 15461\nVENDOR_ID_RUPPRECHT_PATASHNICK_CO_INC = 15462\nVENDOR_ID_HURON_SUPERIOR_CATHOLIC_DISTRICT_SCHOOL_BOARD = 15463\nVENDOR_ID_MUSKOKACOM = 15464\nVENDOR_ID_UNIVERSITY_OF_TORONTO = 15465\nVENDOR_ID_PEACEFULHAVEN = 15466\nVENDOR_ID_DIGIBEL = 15467\nVENDOR_ID_SIEGEORG = 15468\nVENDOR_ID_INTERNET_CONNECTION = 15469\nVENDOR_ID_DIGITAL_SYSTEM_RESOURCES = 15470\nVENDOR_ID_NUCLEO_DE_PESQUISA_EM_REDES_E_SISTEMAS_ABERTOS = 15471\nVENDOR_ID_SOA_SOFTWARE_INC = 15472\nVENDOR_ID_SPRING_WORTH_INC = 15473\nVENDOR_ID_LIGHTHOUSE_SOFTWARE_GROUP = 15474\nVENDOR_ID_ZHONGGUANG_TELECOMMUNICATIONS = 15475\nVENDOR_ID_FAREASTONE_TELECOMMUNICATION_CORP = 15476\nVENDOR_ID_BANK_FOR_FOREIGN_TRADE = 15477\nVENDOR_ID_HFT_WESSEL_AG = 15478\nVENDOR_ID_DUDLEYORG = 15479\nVENDOR_ID_TRILLION_DIGITAL_COMMUNICATIONS = 15480\nVENDOR_ID_CAPITAL_CHANNEL_INFORMATION_CO_LTD = 15481\nVENDOR_ID_TIAN_EN = 15482\nVENDOR_ID_OCA_SA = 15483\nVENDOR_ID_LUX_TECHNOLOGIES = 15484\nVENDOR_ID_UNIVERSITY_OF_OTAGO = 15485\nVENDOR_ID_KEYON = 15486\nVENDOR_ID_DAISY_TECHNOLOGIES_INC = 15487\nVENDOR_ID_PURE_MATRIX_INC = 15488\nVENDOR_ID_HOME_SE_AB = 15489\nVENDOR_ID_PRASANNA_TECHNOLOGIES = 15490\nVENDOR_ID_PROTEGRITY_INC = 15491\nVENDOR_ID_SICHUAN_CHANGHONG_ELECTRIC_GROUP_COLTD = 15492\nVENDOR_ID_GOLL_ENTERPRISES = 15493\nVENDOR_ID_HELIUM_LLC = 15494\nVENDOR_ID_EHOUSE = 15495\nVENDOR_ID_LASCOALA = 15496\nVENDOR_ID_IRONPORT_SYSTEMS_INC = 15497\nVENDOR_ID_TESI_SPA = 15498\nVENDOR_ID_THE_KINGS_UNIVERSITY_COLLEGE = 15499\nVENDOR_ID_EWINGS_TECHNOLOGIES_INC = 15500\nVENDOR_ID_MC_LABORATORY_INC = 15501\nVENDOR_ID_ANIMEZONE = 15502\nVENDOR_ID_UNIVERSITY_OF_BERNE = 15503\nVENDOR_ID_MINISTRE_DE_LQUIPEMENT_DES_TRANSPORTS_DU_LOGEMENT_DU_TOURISME_ET_DE_LA_MER = 15504\nVENDOR_ID_ECHOWORX_CORPORATION = 15505\nVENDOR_ID_AKIRATECH_LIMITED = 15506\nVENDOR_ID_TIERONE_OSS_TECHNOLOGIES_INC = 15507\nVENDOR_ID_PACKETIQ_CORP = 15508\nVENDOR_ID_DIRETOORGBR = 15509\nVENDOR_ID_RHETORICAL_SYSTEMS_LTD = 15510\nVENDOR_ID_GROUPE_ERMEWA_SA = 15511\nVENDOR_ID_COMAX_INC = 15512\nVENDOR_ID_GENDAC = 15513\nVENDOR_ID_FINANCIJSKA_AGENCIJA = 15514\nVENDOR_ID_DGET = 15515\nVENDOR_ID_SOFTWORKS_AUSTRALIA_PTY_LTD = 15516\nVENDOR_ID_ENTRI_LTD = 15517\nVENDOR_ID_VOCALOCITY_INC = 15518\nVENDOR_ID_RESULTS_COMPUTING_CORPORATION = 15519\nVENDOR_ID_ACTISWITCH_INC = 15520\nVENDOR_ID_SIGNALKONTOR_GMBH = 15521\nVENDOR_ID_WHITMAN_COLLEGE = 15522\nVENDOR_ID_EQUINECOM = 15523\nVENDOR_ID_ACCESS_POINT_INC = 15524\nVENDOR_ID_BRAUMS_ICE_CREAM = 15525\nVENDOR_ID_MIXMOBILE = 15526\nVENDOR_ID_ANIENIB = 15527\nVENDOR_ID_NAVIAIR = 15528\nVENDOR_ID_UNIVERSIDAD_DEL_VALLE = 15529\nVENDOR_ID_INTEGRATED_TECHNOLOGY_SC = 15530\nVENDOR_ID_VPNCHINA_TECH_DEVELOPMENT_CORP = 15531\nVENDOR_ID_HOLLOMEY_CONSULTANTS_GMBH = 15532\nVENDOR_ID_MOBILE_TORNADO = 15533\nVENDOR_ID_LINUP_FRONT_GMBH = 15534\nVENDOR_ID_VERENIGING_MILIEUDEFENSIE = 15535\nVENDOR_ID_PTMCOM = 15536\nVENDOR_ID_EMK_DESIGN = 15537\nVENDOR_ID_ASIGRA_INC = 15538\nVENDOR_ID_MEDIA_4_SP_Z_OO = 15539\nVENDOR_ID_AM_CORPORATION = 15540\nVENDOR_ID_RH_MINISTARSTVO_GOSPODARSTVA = 15541\nVENDOR_ID_EMK_DESIGN_2 = 15542\nVENDOR_ID_ILLINOIS_POWER_COMPANY = 15543\nVENDOR_ID_AMERICAN_MENSA_LTD = 15544\nVENDOR_ID_PROBIX = 15545\nVENDOR_ID_ELEVENAM = 15546\nVENDOR_ID_ONARAS_AG = 15547\nVENDOR_ID_PILLAR_DATA_SYSTEMS = 15548\nVENDOR_ID_XCACHE_TECHNOLOGIES_INC = 15549\nVENDOR_ID_LA_SIERRA_UNIVERSITY = 15550\nVENDOR_ID_OBJECT_ENGINEERING_GMBH = 15551\nVENDOR_ID_STATMON_TECHNOLOGIES_CORP = 15552\nVENDOR_ID_SNARLSNMP_DYNAMIC_WEB_APPLICATION_MONITOR_DEVELOPERS_GROUP = 15553\nVENDOR_ID_DEMOCRATIC_NATIONAL_COMMITTEE = 15554\nVENDOR_ID_GOLD_COAST_CITY_COUNCIL = 15555\nVENDOR_ID_CHUQ_YANG = 15556\nVENDOR_ID_INFLECTION_TECHNOLOGIES = 15557\nVENDOR_ID_INSTITUTE_OF_CHEMICAL_PROCESS_FUNDAMENTALS = 15558\nVENDOR_ID_ORIONET = 15559\nVENDOR_ID_YANFA = 15560\nVENDOR_ID_COLEMAN_FAMILY_CAMPS = 15561\nVENDOR_ID_MBRACEORG = 15562\nVENDOR_ID_ADTRON = 15563\nVENDOR_ID_ASELIA_TECHNOLOGIES_INC = 15564\nVENDOR_ID_GREAT_PLAINS_MALLNET = 15565\nVENDOR_ID_EXPERIAN_JAPAN_CO_LTD_FORMERLY_A_CARE_SYSTEMS_INC = 15566\nVENDOR_ID_NEOPLE_LTD = 15567\nVENDOR_ID_CENTER_FOR_DEVELOPMENT_OF_INFORMATION_TECHNOLOGY_CDIT = 15568\nVENDOR_ID_KRASNOYARSK_ICC_SUBDIVISION_OF_MCC_JSC_RUSSIAN_RAILWAYS = 15569\nVENDOR_ID_BAYERISCHE_LANDESBANK = 15570\nVENDOR_ID_SCHULER_ELECTRONICS = 15571\nVENDOR_ID_TCOMDTVRO = 15572\nVENDOR_ID_APERTIO_LTD = 15573\nVENDOR_ID_E_MILIO_INTERNET_SERVICES_SL = 15574\nVENDOR_ID_CHIMES_INC = 15575\nVENDOR_ID_POMPOEN_BV = 15576\nVENDOR_ID_AIRPRISM = 15577\nVENDOR_ID_DEEPROOT_LINUX = 15578\nVENDOR_ID_SAESON_TELECOM_CO_LTD = 15579\nVENDOR_ID_VNIINS = 15580\nVENDOR_ID_TELEMED_COMMUNICATIONS_SERVICES_GMBH = 15581\nVENDOR_ID_XTRADYNE_TECHNOLOGIES_AG = 15582\nVENDOR_ID_EUREG = 15583\nVENDOR_ID_DE_WERKNAAM = 15584\nVENDOR_ID_NORTHERN_LIGHT_TECHNOLOGY = 15585\nVENDOR_ID_RESPONSE_MECHANICS_INC = 15586\nVENDOR_ID_HUMBOLDT_STATE_UNIVERSITY = 15587\nVENDOR_ID_WETWEBMEDIA = 15588\nVENDOR_ID_INTIGATE_INC = 15589\nVENDOR_ID_CATBOY_TECHNOLOGIES = 15590\nVENDOR_ID_ALEX_SHEPARD = 15591\nVENDOR_ID_VIKING_TELECOM = 15592\nVENDOR_ID_KORE_SYSTEMS_GMBH = 15593\nVENDOR_ID_CAUSEWAY_TECHNOLOGIES = 15594\nVENDOR_ID_MEAG_MUNICH_ERGO_ASSETMANAGEMENT_GMBH = 15595\nVENDOR_ID_SONORK_SRL = 15596\nVENDOR_ID_AVAMAR = 15597\nVENDOR_ID_COMPRO_TECHNOLOGIES_INC = 15598\nVENDOR_ID_GROOM_LAKE_LABORATORIES = 15599\nVENDOR_ID_XETA_TECHNOLOGIES = 15600\nVENDOR_ID_VELOCITY_SOFTWARE = 15601\nVENDOR_ID_LOTTASOPHIEDE = 15602\nVENDOR_ID_SUNHILLO_CORPORATION = 15603\nVENDOR_ID_KUOPIO_TELEPHONE_PLC = 15604\nVENDOR_ID_GRAY_LABORATORIES_INC = 15605\nVENDOR_ID_TOPPIONEER_TECHNOLOGIES_LIMITED = 15606\nVENDOR_ID_ENCENTUATE_INC = 15607\nVENDOR_ID_ANDERS_RODEWYK = 15608\nVENDOR_ID_ISKON_INTERNET_DD = 15609\nVENDOR_ID_HERBERT_RETAIL_LTD = 15610\nVENDOR_ID_MIC_ELECTRONICS_LIMITED = 15611\nVENDOR_ID_SOFTWARE_SERVICES_2 = 15612\nVENDOR_ID_GEN_I_LIMITED = 15613\nVENDOR_ID_RICK_BAUMAN_CONSULTING = 15614\nVENDOR_ID_KMA_INC = 15615\nVENDOR_ID_DULLROAR_ENTERPRISES = 15616\nVENDOR_ID_NEWLIMITS = 15617\nVENDOR_ID_ADRENALIZE_INC = 15618\nVENDOR_ID_DELEAN_VISION = 15619\nVENDOR_ID_CEIVA_LOGIC = 15620\nVENDOR_ID_ZP_TECHNOLOGIES = 15621\nVENDOR_ID_APTARE = 15622\nVENDOR_ID_BACHBLUE_PTY_LTD_T_A_AFOYI = 15623\nVENDOR_ID_SKOPEO_LLC = 15624\nVENDOR_ID_EXCEDENT_TECHNOLOGIES = 15625\nVENDOR_ID_CAMPUS_CRUSADE_ASIA_LTD = 15626\nVENDOR_ID_SPEZIFIKUM = 15627\nVENDOR_ID_LAMARC_GMBH = 15628\nVENDOR_ID_IQSOFT_RT = 15629\nVENDOR_ID_INFOGUARD_HB = 15630\nVENDOR_ID_VIVISTA_LIMITED = 15631\nVENDOR_ID_PRIME_FACTORY_GMBH_CO_KG = 15632\nVENDOR_ID_TONISOFT = 15633\nVENDOR_ID_D3NET_INTERNET_TECHNOLOGIEN_GMBH = 15634\nVENDOR_ID_CHINA_PKI = 15635\nVENDOR_ID_ALTHEA_TECHNICAL = 15636\nVENDOR_ID_SPINLOCK_NETWORK_LLC = 15637\nVENDOR_ID_COMMISSAIRENET = 15638\nVENDOR_ID_E_SOLUTIONS_LDA = 15639\nVENDOR_ID_CLEAR_TECHNOLOGY_INC = 15640\nVENDOR_ID_MASOBIT_SRL = 15641\nVENDOR_ID_TRANSPLACE_INC = 15642\nVENDOR_ID_HALLWAY_SOFTWARE_DESIGN_CORP = 15643\nVENDOR_ID_BRENDA_BELL = 15644\nVENDOR_ID_PIXELL_DATEN_DESIGN_GMBH = 15645\nVENDOR_ID_PJUSARAFELAG_ISLANDS = 15646\nVENDOR_ID_THESYSADMIN = 15647\nVENDOR_ID_ATLANTIS_SERVICES = 15648\nVENDOR_ID_VOSGAMES = 15649\nVENDOR_ID_CITRENESYS_CORPORATION = 15650\nVENDOR_ID_SEVENTH_MOON_CO_LTD = 15651\nVENDOR_ID_SHE_INFORMATIONSSYSTEME_AG = 15652\nVENDOR_ID_INTESYS = 15653\nVENDOR_ID_MAX_MOMENTUM = 15654\nVENDOR_ID_SITADELLE = 15655\nVENDOR_ID_COMPUTER_PARK_LTD = 15656\nVENDOR_ID_MACROCALL = 15657\nVENDOR_ID_FILLMORE_LABS = 15658\nVENDOR_ID_ALASKA_AIRLINES = 15659\nVENDOR_ID_TLM_SOFTWARE = 15660\nVENDOR_ID_0X2NET = 15661\nVENDOR_ID_FUMPHCOM = 15662\nVENDOR_ID_ASWAN_CO_LTD = 15663\nVENDOR_ID_ARACTEL_NETWORKS_LTD = 15664\nVENDOR_ID_EASTERN_COMMUNICATION_TECHNOLOGY_DEVELOPMENT_COLTD = 15665\nVENDOR_ID_ORGATECH_ULRICH_TIEMANN_GMBH = 15666\nVENDOR_ID_LECHNER_RAU_HAUSTECHNIK = 15667\nVENDOR_ID_ZHONGFANG_INFORMATION_COLTD = 15668\nVENDOR_ID_LIFECYCLE_SOFTWARE = 15669\nVENDOR_ID_THE_INTERNET_MARKETING_CENTER = 15670\nVENDOR_ID_WARDEGA_CONSULTING = 15671\nVENDOR_ID_JAVNO_PREDUZECE_POSTA_SRBIJE_FORMERLY_JAVNO_PREDUZECE_PTT_SAOBRACAJA_SRBIJA = 15672\nVENDOR_ID_CODEANGELS_SOLUTIONS = 15673\nVENDOR_ID_VALENTE_CC = 15674\nVENDOR_ID_STONEDONUT_LLC = 15675\nVENDOR_ID_BAEDE = 15676\nVENDOR_ID_THOMSON_THOMSON = 15677\nVENDOR_ID_SOFTWARE_PROJECTS_PTY_LTD = 15678\nVENDOR_ID_CAPE_COM_INC = 15679\nVENDOR_ID_DIGIRATI = 15680\nVENDOR_ID_ROSCO_ASSOCIATES_TECHNOLOGY_STAFFING_LTD = 15681\nVENDOR_ID_PKICLUECOM_INC = 15682\nVENDOR_ID_ACROSONIC_CORPORATION = 15683\nVENDOR_ID_MACRO_TECHNOLOGY = 15684\nVENDOR_ID_AGALANET = 15685\nVENDOR_ID_MEI_COMMUNICATION_CO = 15686\nVENDOR_ID_MAGIC_SOFTWARE_ENTERPRISES_LTD = 15687\nVENDOR_ID_PRACTICAL_LABS = 15688\nVENDOR_ID_HEINZ_FAMILY_GERMANY = 15689\nVENDOR_ID_LIISP = 15690\nVENDOR_ID_NETPOWER_SOLUTIONS = 15691\nVENDOR_ID_MINNIGERODE = 15692\nVENDOR_ID_IONIDEA = 15693\nVENDOR_ID_SILICOM = 15694\nVENDOR_ID_A_POMERANTZ_COMPANY = 15695\nVENDOR_ID_BAYER_AG = 15696\nVENDOR_ID_CELLON_INC = 15697\nVENDOR_ID_NLOCI = 15698\nVENDOR_ID_RENESYS_CORPORATION = 15699\nVENDOR_ID_HENRICI_IT_CONSULTING = 15700\nVENDOR_ID_SCHMUT = 15701\nVENDOR_ID_COMPUTER_IMAGE_TECHNOLOGY = 15702\nVENDOR_ID_SOFTWARE_DIVERSIFIED_SERVICES = 15703\nVENDOR_ID_CYAN_WORLDS_INC = 15704\nVENDOR_ID_MULTITALENTS = 15705\nVENDOR_ID_IGLOO_SECURITY_INC = 15706\nVENDOR_ID_SILVENET = 15707\nVENDOR_ID_BEIJING_WESTMAN_AUTOMATION_LTD_CO = 15708\nVENDOR_ID_CBOSS = 15709\nVENDOR_ID_MEGASOFT = 15710\nVENDOR_ID_EURO_DB = 15711\nVENDOR_ID_TARINGOLD_LTD = 15712\nVENDOR_ID_DRINSAMA_GMBH = 15713\nVENDOR_ID_LENEL_SYSTEMS_INTERNATIONAL_INC = 15714\nVENDOR_ID_BLUE_TREE_SYSTEMS = 15715\nVENDOR_ID_GOGO6_FORMERLY_HEXAGO = 15716\nVENDOR_ID_CEGETEL_NET = 15717\nVENDOR_ID_LOYALTY_MANAGEMENT_GROUP_CANADA_INC = 15718\nVENDOR_ID_MASS_COLLEGE_OF_LIBERAL_ARTS = 15719\nVENDOR_ID_BINARYMEDIA = 15720\nVENDOR_ID_7COMM = 15721\nVENDOR_ID_CONCARE = 15722\nVENDOR_ID_HOLOSCENESCOM = 15723\nVENDOR_ID_VISIONBANK_CORP = 15724\nVENDOR_ID_ZYFLEX_TECHNOLOGIES_INC = 15725\nVENDOR_ID_KLUG_GMBH_INTEGRIERTE_SYSTEME = 15726\nVENDOR_ID_HOFENORG = 15727\nVENDOR_ID_SENTRY_INFORMATION_AND_ALERT_SYSTEMS_CORP = 15728\nVENDOR_ID_SYTRUST_GMBH = 15729\nVENDOR_ID_LULU_ENTERPRISES_INC = 15730\nVENDOR_ID_EASYPAX_INC = 15731\nVENDOR_ID_ZIV_APLICACIONES_Y_TECNOLOGA_SA_FORMERLY_USYSCOM = 15732\nVENDOR_ID_WASHINGTON_STATE_UNIVERSITY = 15733\nVENDOR_ID_AION_SYSTEMS = 15734\nVENDOR_ID_SECURE_TECHNOLOGY_HAWAII = 15735\nVENDOR_ID_EMERGEPOINT = 15736\nVENDOR_ID_ZOZOA_INC = 15737\nVENDOR_ID_BUSINESS_NETWORK_COMMUNICATIONS = 15738\nVENDOR_ID_RUZZ_TECHNOLOGY_PTY_LTD = 15739\nVENDOR_ID_DIGITAL_VISION_TECHNOLOGY_LTD = 15740\nVENDOR_ID_SOFTERRA_LLC = 15741\nVENDOR_ID_DISKSITES_LTD = 15742\nVENDOR_ID_VTL_UK_LTD = 15743\nVENDOR_ID_NETRATINGS_INC = 15744\nVENDOR_ID_SCHOREN_NMS_SOLUTIONS = 15745\nVENDOR_ID_ZONER_SOFTWARE_SRO = 15746\nVENDOR_ID_LOCUS_PORTAL_CORPORATION = 15747\nVENDOR_ID_NETGHOST_COMMUNICATIONS = 15748\nVENDOR_ID_INGERSOLL_RAND_CO_INC = 15749\nVENDOR_ID_UNIVERSITY_OF_TROMS = 15750\nVENDOR_ID_TRC_FIORD_JSC = 15751\nVENDOR_ID_SLAMBORG = 15752\nVENDOR_ID_APPSERVER = 15753\nVENDOR_ID_VANCOUVER_COMMUNITY_NETWORK = 15754\nVENDOR_ID_PIVOD_TECHNOLOGIES = 15755\nVENDOR_ID_WISTRON_NEWEB_CORPORATION = 15756\nVENDOR_ID_MITSUBISHI_ELECTRIC_INFORMATION_TECHNOLOGY_CORPORATIONMDIT = 15757\nVENDOR_ID_SUNTEK_BEIJINGYANJIUYUAN = 15758\nVENDOR_ID_GREENER_PASTURES_INNOVATIONS = 15759\nVENDOR_ID_NMSWORKS_SOFTWARE_LIMITED = 15760\nVENDOR_ID_ATS_ELEKTRONIK_GMBH = 15761\nVENDOR_ID_KHETY = 15762\nVENDOR_ID_LAGAN = 15763\nVENDOR_ID_REPSOL_YPF_SA = 15764\nVENDOR_ID_JX_SOLUTIONS_LTD = 15765\nVENDOR_ID_MATRIX_MAILING_LLC = 15766\nVENDOR_ID_TRIBLEN = 15767\nVENDOR_ID_ERICSSON_INC_FORMERLY_BELAIR_NETWORKS = 15768\nVENDOR_ID_ARGECY_COMPUTER_CORPORATION = 15769\nVENDOR_ID_ZEERA_NETWORKS_INC = 15770\nVENDOR_ID_JF_POSSIBILITIES = 15771\nVENDOR_ID_FACHHOCHSCHULE_LANDSHUT = 15772\nVENDOR_ID_E_BS_AS = 15773\nVENDOR_ID_DESIGNET_INC = 15774\nVENDOR_ID_HEIDENHAIN = 15775\nVENDOR_ID_ADVANCED_DATA_INTEGRATION = 15776\nVENDOR_ID_OPENIN = 15777\nVENDOR_ID_DAXNETWORK = 15778\nVENDOR_ID_NOVEL_TONGFANG = 15779\nVENDOR_ID_KILOUTOU = 15780\nVENDOR_ID_TRANSFLOW_INFORMATIONSLOGISTIK_GMBH = 15781\nVENDOR_ID_VIA_MAT_MANAGEMENT_AG = 15782\nVENDOR_ID_HRSMART_INC = 15783\nVENDOR_ID_ELB_CONSULTING = 15784\nVENDOR_ID_MONTRUSCO_BOLTON_INVESTMENTS_INC = 15785\nVENDOR_ID_NETLEDGER_INC = 15786\nVENDOR_ID_DGN_SERVICE_GMBH = 15787\nVENDOR_ID_THE_ELDERS_OF_THE_UNIVERSE = 15788\nVENDOR_ID_INFINEON_TECHNOLOGIES_AG = 15789\nVENDOR_ID_WIDERAY_CORPORATION = 15790\nVENDOR_ID_LA_CANADA_WIRELESS_ASSOCIATION = 15791\nVENDOR_ID_INTERLINK_GROUP_INCORPORATED = 15792\nVENDOR_ID_PITTIG_SOFTWARE_INTERNET_SERVICES = 15793\nVENDOR_ID_DEGEORGE_FAMILY = 15794\nVENDOR_ID_VANDELAY_INTERNET_SERVICES_INC = 15795\nVENDOR_ID_IMAGEONE_CO_LTD = 15796\nVENDOR_ID_INFOSYS_TECHNOLOGIES_LIMITED = 15797\nVENDOR_ID_RATO_INTERNATIONAL_COMMUNICATION_CO = 15798\nVENDOR_ID_CESKY_MOBIL_AS = 15799\nVENDOR_ID_JN_DATA_A_S = 15800\nVENDOR_ID_HUITSING_EMBEDDED_SYSTEMS = 15801\nVENDOR_ID_FARLEP = 15802\nVENDOR_ID_MERCATIS_INFORMATION_SYSTEMS_GMBH = 15803\nVENDOR_ID_DLR_SISTEC = 15804\nVENDOR_ID_SWEETHEART_CUP_COMPANY_INC = 15805\nVENDOR_ID_CONNECTALK_INC = 15806\nVENDOR_ID_DGN_SERVICE_GMBH_2 = 15807\nVENDOR_ID_DGN_SERVICE_GMBH_3 = 15808\nVENDOR_ID_WNET_ISP = 15809\nVENDOR_ID_BANK_SEVERNAYA_KAZNA_OAO = 15810\nVENDOR_ID_DIGITAL_CONTROL_LLC = 15811\nVENDOR_ID_RADICAL_CORPORATION = 15812\nVENDOR_ID_AISPL = 15813\nVENDOR_ID_APPLIED_CONCEPTS = 15814\nVENDOR_ID_NETQA = 15815\nVENDOR_ID_INFRA_911_INC = 15816\nVENDOR_ID_FALCON_SYSTEM_CONSULTING_INC = 15817\nVENDOR_ID_STADT_BRAUNSCHWEIG = 15818\nVENDOR_ID_CRYPTOLOG_INTERNATIONAL = 15819\nVENDOR_ID_CASTOR_INFORMATIQUE = 15820\nVENDOR_ID_FREEBSD_CN_PROJECT = 15821\nVENDOR_ID_I_STNET_GMBH = 15822\nVENDOR_ID_LINUXWITHINCOM = 15823\nVENDOR_ID_INASOFT = 15824\nVENDOR_ID_CLEARMETRIX_INC = 15825\nVENDOR_ID_CRYPTEK_INCORPORATED = 15826\nVENDOR_ID_CROCKER_COMMUNICATIONS_INC = 15827\nVENDOR_ID_H3G_ITALIA_SPA_ENTERPRISE_CA = 15828\nVENDOR_ID_DIGITAL_PRODUCTION_SARL = 15829\nVENDOR_ID_ROBINLEA = 15830\nVENDOR_ID_DENSO_IT_LABORATORY_INC = 15831\nVENDOR_ID_BT_IGNITE_SOLUTIONS = 15832\nVENDOR_ID_SIGEC = 15833\nVENDOR_ID_TIGARD_TUALATIN_SCHOOL_DISTRICT = 15834\nVENDOR_ID_MS_SYSTEMS = 15835\nVENDOR_ID_MARCOR_ASSOCIATES_LTD = 15836\nVENDOR_ID_INVESTMENT_TECHNOLOGY_GROUP = 15837\nVENDOR_ID_AKA = 15838\nVENDOR_ID_THE_EW_SCRIPPS_COMPANY = 15839\nVENDOR_ID_GEIDAX = 15840\nVENDOR_ID_DANIEL_RITTER = 15841\nVENDOR_ID_BLASBERG_COMPUTER_SYSTEME_GMBH = 15842\nVENDOR_ID_MASSENBACH = 15843\nVENDOR_ID_SELEX_COMMUNICATIONS_SPA = 15844\nVENDOR_ID_DIXPER_SYSTEMS = 15845\nVENDOR_ID_IP_FABRICS = 15846\nVENDOR_ID_HARVARD_LAW_SCHOOL = 15847\nVENDOR_ID_SENSORSOFT_CORPORATION = 15848\nVENDOR_ID_EVANS_COMPANIES = 15849\nVENDOR_ID_RESHAPE = 15850\nVENDOR_ID_COMPUTERIZED_MEDICAL_SYSTEMS = 15851\nVENDOR_ID_LEGION_INTERACTIVE = 15852\nVENDOR_ID_COMPUTER_CENTER_HITOTSUBASHI_UNIVERSITY = 15853\nVENDOR_ID_RIPE_NCC = 15854\nVENDOR_ID_LULE_SEGELSLLSKAP = 15855\nVENDOR_ID_OPEN_POWER_NETWORK_RSCHR = 15856\nVENDOR_ID_ADMINISTRACION_DEL_PRINCIPADO_DE_ASTURIAS = 15857\nVENDOR_ID_ALL_IN_GREENCOM_GMBH = 15858\nVENDOR_ID_CITY_OF_TAMPERE = 15859\nVENDOR_ID_PARTEC = 15860\nVENDOR_ID_KINETIK_GMBH = 15861\nVENDOR_ID_BANKSERVICE_PLC = 15862\nVENDOR_ID_INNOVATIVE_NAVIGATION = 15863\nVENDOR_ID_UNICITY_PTY_LTD = 15864\nVENDOR_ID_CAB_PRODUKTTECHNIK_GMBH_CO_KG = 15865\nVENDOR_ID_JOE_RHODES_CONSULTING_LLC = 15866\nVENDOR_ID_IXI_MOBILE_RD_LTD = 15867\nVENDOR_ID_CYBRIS_NETWORK_INFORMATION_SYSTEMS = 15868\nVENDOR_ID_TIJD_BEURSMEDIA = 15869\nVENDOR_ID_EGON_TECHNOLOGIES = 15870\nVENDOR_ID_OMNILUX = 15871\nVENDOR_ID_IT_MERGE_INC = 15872\nVENDOR_ID_GUARDIAN_LIFE_INSURANCE_INC = 15873\nVENDOR_ID_MDS_PROTEOMICS_A_S = 15874\nVENDOR_ID_M_PLIFY_SA = 15875\nVENDOR_ID_MICROPROGRAM_INFORMATION_LD_CO = 15876\nVENDOR_ID_API_TECHNOLOGIES_LLC = 15877\nVENDOR_ID_AZTECH_SYSTEMS_LTD = 15878\nVENDOR_ID_WAVEIP_LTD = 15879\nVENDOR_ID_MONEYLINE_BANKING_SYSTEMS = 15880\nVENDOR_ID_THOMAS_FAHLE = 15881\nVENDOR_ID_SMART_IP = 15882\nVENDOR_ID_GETRONICS_FRANCE = 15883\nVENDOR_ID_NOBLE_TURKEY_SOFTWARE = 15884\nVENDOR_ID_ESAG_ENERGIEVERSORGUNG_SACHSEN_OST_AG = 15885\nVENDOR_ID_MANHATTAN_ASSOCIATES = 15886\nVENDOR_ID_COSINI_NETWORKS_INC = 15887\nVENDOR_ID_TAI_SRL = 15888\nVENDOR_ID_Q_FREE_ASA = 15889\nVENDOR_ID_PRAIRIE_GROVE_TELEPHONE_CO = 15890\nVENDOR_ID_PANDA_RESTAURANT_GROUP_INC = 15891\nVENDOR_ID_OPENMODES_TECHNOLOGY_GROUP_INC = 15892\nVENDOR_ID_EMERSON_CLIMATE_TECHNOLOGIES_RETAIL_SOLUTIONS_INC_FORMERLY_COMPUTER_PROCESS_CONTROLS = 15893\nVENDOR_ID_ASTROSTAGE_INC = 15894\nVENDOR_ID_4LINUX = 15895\nVENDOR_ID_SOUTHERN_FEDERAL_UNIVERSITY_FORMERLY_ROSTOV_STATE_UNIVERSITY_COMPUTER_CENTER = 15896\nVENDOR_ID_GUANGZHOU_GAOU_S_T_DEVELOPMENT_CO_LTD = 15897\nVENDOR_ID_POLIZEI_BRANDENBURG = 15898\nVENDOR_ID_INUBIT = 15899\nVENDOR_ID_OPENWEB = 15900\nVENDOR_ID_VALSIMMON_TECHNOLOGY_GROUP = 15901\nVENDOR_ID_MENNET = 15902\nVENDOR_ID_SEEBEK_INGENIERA_SRL = 15903\nVENDOR_ID_PETER_ECKEL_SYSTEM_AND_NETWORK_MANAGEMENT = 15904\nVENDOR_ID_DEFERO_SYSTEMS_AB = 15905\nVENDOR_ID_WLAN_AG = 15906\nVENDOR_ID_CANYON_NETWORKS = 15907\nVENDOR_ID_BUSINESS_TECHNOLOGY_ASSOCIATES_INC = 15908\nVENDOR_ID_MRX_SOLUTIONS = 15909\nVENDOR_ID_AUTOTRADERCOM = 15910\nVENDOR_ID_HE_CHUAN = 15911\nVENDOR_ID_BLUECOM_AS = 15912\nVENDOR_ID_NETWORKING_SUPPORT_SERVICES = 15913\nVENDOR_ID_NETREO_INCORPORATED = 15914\nVENDOR_ID_HIGH_TOWER_SOFTWARE = 15915\nVENDOR_ID_LANDESK_SOFTWARE = 15916\nVENDOR_ID_EXPEDIENT_COMMUNICATIONS = 15917\nVENDOR_ID_THE_MORROW_GROUP = 15918\nVENDOR_ID_HITACHI_STORAGE_SOFTWARE_INCORPORATED = 15919\nVENDOR_ID_SWITCH_MANAGEMENT = 15920\nVENDOR_ID_MOBILEACCESS = 15921\nVENDOR_ID_YISHANG_INNOVATION_TECHNOLOGY_COLTD = 15922\nVENDOR_ID_ICS_GMBH = 15923\nVENDOR_ID_KUWAIT_LINUX_COMPANY = 15924\nVENDOR_ID_CADENCE_DESIGN_SYSTEMS = 15925\nVENDOR_ID_CARTIER_PARTNERS_FINANCIAL_GROUP_INC = 15926\nVENDOR_ID_POINT_LOMA_NAZARENE_UNIVERSITY = 15927\nVENDOR_ID_SNB = 15928\nVENDOR_ID_CAMBODIA_SAMART_COMMUNICATION = 15929\nVENDOR_ID_LUCASFILM_LTD = 15930\nVENDOR_ID_CENTER_FOR_INTERNATIONAL_REHABILITATION = 15931\nVENDOR_ID_WUERTELE = 15932\nVENDOR_ID_CYANEA_SYSTEMS_CORP = 15933\nVENDOR_ID_MULTIP_KFT = 15934\nVENDOR_ID_CENTERPLEX = 15935\nVENDOR_ID_KOREADOTCOM = 15936\nVENDOR_ID_SVYAZINFORM_OF_REPUBLIC_MORDOVIA_JOINT_STOCK_COMPANY = 15937\nVENDOR_ID_JOINT_STOCK_COMPANY_IMPORT_EXPORT_BANK_IMPEXBANK_MOSCOW = 15938\nVENDOR_ID_CORAL_TELECOM_LTD = 15939\nVENDOR_ID_FACTORIA_DE_INICIATIVAS_INTERNET_FI2_SA = 15940\nVENDOR_ID_GALENA_PARK_ISD = 15941\nVENDOR_ID_CABILDO_DE_GRAN_CANARIA = 15942\nVENDOR_ID_CONEXUS_CREDIT_UNION = 15943\nVENDOR_ID_AGENCE_DE_LA_FRANCOPHONIE = 15944\nVENDOR_ID_ASCERTIA = 15945\nVENDOR_ID_CALYPSO_NETWORKS = 15946\nVENDOR_ID_NEW_JERSEY_INSTITUTE_OF_TECHNOLOGY = 15947\nVENDOR_ID_TREVSPLACECOM = 15948\nVENDOR_ID_FBRICA_DE_IDIAS = 15949\nVENDOR_ID_4AM_MEDIA_INC = 15950\nVENDOR_ID_AXENT_GLOBAL = 15951\nVENDOR_ID_ADVANCED_COMPUTER_RESOURCES = 15952\nVENDOR_ID_AARON_SPANGLER = 15953\nVENDOR_ID_FILESURE_PTE_LTD = 15954\nVENDOR_ID_OMNICOMP_TECHNOLOGY_SERVICES = 15955\nVENDOR_ID_INCORE_TECHNOLOGY_LTD = 15956\nVENDOR_ID_MUONICS_INC = 15957\nVENDOR_ID_TREVSPLACECOM_2 = 15958\nVENDOR_ID_SUES_SOUND_CC = 15959\nVENDOR_ID_EAIRPORTS = 15960\nVENDOR_ID_COCKING_AND_CO_LTD = 15961\nVENDOR_ID_ASML = 15962\nVENDOR_ID_INFORMA_COLOMBIA = 15963\nVENDOR_ID_INSTITUTO_NACIONAL_DE_ASTROFSICA_OPTICA_Y_ELECTRNICA = 15964\nVENDOR_ID_PUBLIC_RESOURCES_MANAGEMENT_GROUP_INC = 15965\nVENDOR_ID_VISA_INTERNATIONAL = 15966\nVENDOR_ID_NCAST_CORPORATION = 15967\nVENDOR_ID_EMICO_VERO = 15968\nVENDOR_ID_VINDIGO_INC = 15969\nVENDOR_ID_ASPEN_NETWORKS_INC = 15970\nVENDOR_ID_ADVANCED_BIOMETRIC_CONTROLS_LLC = 15971\nVENDOR_ID_DISASTER_KLEENUP_INTERNATIONAL_INC = 15972\nVENDOR_ID_JCORPORATE_LTD = 15973\nVENDOR_ID_SKYWAVE_CORPORATION = 15974\nVENDOR_ID_MEIKYO_ELECTRIC_COLTD = 15975\nVENDOR_ID_ADACOM_SA = 15976\nVENDOR_ID_COMPOL_II = 15977\nVENDOR_ID_ITIT = 15978\nVENDOR_ID_TOMSOFT = 15979\nVENDOR_ID_TRACKWELL_SOFTWARE_HF = 15980\nVENDOR_ID_ANILLO_NETWORKS_INC = 15981\nVENDOR_ID_HUBBUB_IT_SERVICES = 15982\nVENDOR_ID_MERU_NETWORKS = 15983\nVENDOR_ID_AUTHENEX_INC = 15984\nVENDOR_ID_THE_UNIVERSITY_OF_LETHBRIDGE = 15985\nVENDOR_ID_BINARA_INC = 15986\nVENDOR_ID_TOPOZ_PTY_LTD = 15987\nVENDOR_ID_CYMES_GMBH = 15988\nVENDOR_ID_TORSTEN_SCHNEIDER = 15989\nVENDOR_ID_MIKROBITTI = 15990\nVENDOR_ID_RASO = 15991\nVENDOR_ID_TRACERDIGITAL_LLC = 15992\nVENDOR_ID_NET_SCALE_TECHNOLOGIES_INC = 15993\nVENDOR_ID_XCOM_COMUNICACAO_SEGURA = 15994\nVENDOR_ID_IT_CONSULTANT_HENNING_FOLLMANN = 15995\nVENDOR_ID_RNP_REDE_NACIONAL_DE_ENSINO_E_PESQUISA = 15996\nVENDOR_ID_WAVE_SYSTEMS_CORP = 15997\nVENDOR_ID_UNIVERSITY_OF_GLAMORGAN = 15998\nVENDOR_ID_CPS_TECHNOLOGY_GROUP = 15999\nVENDOR_ID_SYREA_SRL = 16000\nVENDOR_ID_MINISTRY_OF_FINANCE_CZECH_REPUBLIC = 16001\nVENDOR_ID_GLYPHIX = 16002\nVENDOR_ID_ZSCHIMMER_GMBH = 16003\nVENDOR_ID_INTRUSEC_INC = 16004\nVENDOR_ID_DURHAM_UNIVERSITY = 16005\nVENDOR_ID_CODEFAB_INC = 16006\nVENDOR_ID_NATIVE_INSTRUMENTS = 16007\nVENDOR_ID_CONSOLIDATED_COMMUNICATIONS_INC = 16008\nVENDOR_ID_TELEMAXX_TELEKOMMUNIKATION_GMBH = 16009\nVENDOR_ID_KAPSCH_BUSINESSCOM_AG = 16010\nVENDOR_ID_STATE_OF_UTAH_DAS_ITS = 16011\nVENDOR_ID_MEMSCAP = 16012\nVENDOR_ID_BYTECENTRIC = 16013\nVENDOR_ID_APPLIED_MATERIALS_INC = 16014\nVENDOR_ID_PRIMARY_OBJECTIVE_LLC = 16015\nVENDOR_ID_SIMMEY_LIMITED = 16016\nVENDOR_ID_CEW_CO_LTD = 16017\nVENDOR_ID_PUNKERORG = 16018\nVENDOR_ID_REITEK = 16019\nVENDOR_ID_WASADATA_SYSTEM_AB = 16020\nVENDOR_ID_CASSAVA_ENTERPRISES = 16021\nVENDOR_ID_MINICOM_ADVANCED_SYSTEMS_LTD = 16022\nVENDOR_ID_INETADMIN = 16023\nVENDOR_ID_NETZWERT_AKTIENGESELLSCHAFT = 16024\nVENDOR_ID_CIBLIS_ENGENHARIA_S_C = 16025\nVENDOR_ID_SOFTAPLIC_S_C_LTDA = 16026\nVENDOR_ID_SHAH_USA = 16027\nVENDOR_ID_XAOS_SYSTEMS = 16028\nVENDOR_ID_WESTLEADER_INTERNATIONAL_INC = 16029\nVENDOR_ID_HONGKONG_POST = 16030\nVENDOR_ID_ATMARK_TECHNO_INC = 16031\nVENDOR_ID_URALTRANSBANK = 16032\nVENDOR_ID_TELEMIC_OY = 16033\nVENDOR_ID_OPUS_HADSEL = 16034\nVENDOR_ID_ICOM_MOBILE = 16035\nVENDOR_ID_INFOCENTRE_LTD = 16036\nVENDOR_ID_EMMOTION_GMBH = 16037\nVENDOR_ID_ORAYLIS_GMBH = 16038\nVENDOR_ID_AUTOMATED_SYSTEMS_ENGINEERING_INC = 16039\nVENDOR_ID_DATAPARTYNET = 16040\nVENDOR_ID_HOGESCHOOL_BRABANT = 16041\nVENDOR_ID_JMP_SYSTEMS = 16042\nVENDOR_ID_VIASEC_SRO = 16043\nVENDOR_ID_TODO_GESELLSCHAFT_FUER_INFORMATIONSTECHNIK_MBH = 16044\nVENDOR_ID_OCACO_FINLAND_OY = 16045\nVENDOR_ID_DSD_SA = 16046\nVENDOR_ID_IT_PRACTICE = 16047\nVENDOR_ID_BOFRIIS = 16048\nVENDOR_ID_FLAMENCO_NETWORKS_INC = 16049\nVENDOR_ID_KRUPCZAK_ORG = 16050\nVENDOR_ID_CORETEAM_AB = 16051\nVENDOR_ID_CHRIS_RAUSCHUBER = 16052\nVENDOR_ID_BURGER_KING_CORPORATION = 16053\nVENDOR_ID_RESOURCE_DATA_MANAGEMENT_LTD = 16054\nVENDOR_ID_BLANDSITE = 16055\nVENDOR_ID_OKAZAKI_CITY_OFFICE = 16056\nVENDOR_ID_EVENTGNOSIS_INC = 16057\nVENDOR_ID_GENKEY = 16058\nVENDOR_ID_TSINGHUA_TONGFANG_SOFTWARE_CO_LTD = 16059\nVENDOR_ID_LIGHTHOUSE_INFORMATION_SYSTEMS_INC = 16060\nVENDOR_ID_ADHERSIS_NORTH_AMERICA = 16061\nVENDOR_ID_ZINCNETWORKS = 16062\nVENDOR_ID_DC_TECHNOLOGIES = 16063\nVENDOR_ID_PERSPECTIX_AG = 16064\nVENDOR_ID_SOFTARK_SOLUTIONS = 16065\nVENDOR_ID_NEC_TELENETWORXLTD = 16066\nVENDOR_ID_BARCOINTELLIGENTDISPLAYS = 16067\nVENDOR_ID_REPEATIT_AB = 16068\nVENDOR_ID_MINEFI_SP = 16069\nVENDOR_ID_BUNDESAMT_FR_FINANZEN = 16070\nVENDOR_ID_PICTET_CIE_BANQUIERS = 16071\nVENDOR_ID_LINKEOCOM = 16072\nVENDOR_ID_EDITH_COWAN_UNIVERSITY = 16073\nVENDOR_ID_VBL_KARLSRUHE = 16074\nVENDOR_ID_UNINET_SA = 16075\nVENDOR_ID_DOMINION_DIAGNOSTICS = 16076\nVENDOR_ID_WITBE = 16077\nVENDOR_ID_MOUVEMENT_RPUBLICAIN_ET_CITOYEN = 16078\nVENDOR_ID_BITMASTER = 16079\nVENDOR_ID_SOFTWARE_LOGISTICS_LLC = 16080\nVENDOR_ID_KTALAND = 16081\nVENDOR_ID_BECHTEL_CORPORATION = 16082\nVENDOR_ID_MAINEBASE = 16083\nVENDOR_ID_HOUSE_OF_NOISE = 16084\nVENDOR_ID_TELEXPERTISE_DE_MEXICO_SA_DE_CV = 16085\nVENDOR_ID_MITSUMI_ELECTRIC_COLTD = 16086\nVENDOR_ID_ZAYED_UNIVERSITY = 16087\nVENDOR_ID_GROATS_LABORATORIES = 16088\nVENDOR_ID_EXWAVECOM_COLTD = 16089\nVENDOR_ID_ESTWEB_LTD = 16090\nVENDOR_ID_ECR = 16091\nVENDOR_ID_AIRWALK_COMMUNICATIONS_INC = 16092\nVENDOR_ID_AW_SOFTWARE = 16093\nVENDOR_ID_STACKEN = 16094\nVENDOR_ID_FLUENCY_VOICE_TECHNOLOGY_LTD = 16095\nVENDOR_ID_RCS_TECHNOLOGY = 16096\nVENDOR_ID_VOICE_ROBOTS_GMBH = 16097\nVENDOR_ID_SCA_GRAPHIC_SUNDSVALL_AB = 16098\nVENDOR_ID_PINION_GROUP_LLC = 16099\nVENDOR_ID_IRON_MOUNTAIN = 16100\nVENDOR_ID_CADERO_INC = 16101\nVENDOR_ID_MIHARU_COMMUNICATIONS_INC = 16102\nVENDOR_ID_NILGIRI_NETWORKS = 16103\nVENDOR_ID_KEYCOM_INFORMATION_TECHNOLOGY_COLTD = 16104\nVENDOR_ID_STANDARD_INFORMATION_DATA_CENTRE_OF_MINISTRY_OF_EDUCATION_PRC = 16105\nVENDOR_ID_ICCS = 16106\nVENDOR_ID_ENEA_DATA_AB = 16107\nVENDOR_ID_GARDEROS_SOFTWARE_INNOVATIONS_GMBH = 16108\nVENDOR_ID_PFANNENBERG = 16109\nVENDOR_ID_INFOCENTRE_LTD_2 = 16110\nVENDOR_ID_BEAUMONT_HOSPITAL = 16111\nVENDOR_ID_VALENTINE_KOUTCHERBAEV = 16112\nVENDOR_ID_NETWORK_DWEEBS_CORPORATION = 16113\nVENDOR_ID_QUALSTAR_CORPORATION = 16114\nVENDOR_ID_CYBERSARGE_INC = 16115\nVENDOR_ID_ENFORCER_GROUP_INC = 16116\nVENDOR_ID_REV_D_NETWORKS = 16117\nVENDOR_ID_3GFP = 16118\nVENDOR_ID_CATALOGCOM = 16119\nVENDOR_ID_SIMCON = 16120\nVENDOR_ID_CALIBER_TECHNOLOIGIES_CONSULTANCY = 16121\nVENDOR_ID_NETGUILD = 16122\nVENDOR_ID_UNIVERSITY_OF_FLORENCE = 16123\nVENDOR_ID_X32_PTY_LTD = 16124\nVENDOR_ID_NET_SPACE = 16125\nVENDOR_ID_PARLIAMENT_OF_FINLAND = 16126\nVENDOR_ID_FATHOM_TECHNOLOGY_KFT = 16127\nVENDOR_ID_A_LAWRENCE_RIEDEL = 16128\nVENDOR_ID_LIGHTHOUSE_TRAINING_AND_CONSULTING_SRL = 16129\nVENDOR_ID_NEC_AUSTRALIA_P_L = 16130\nVENDOR_ID_HUMAX_CO_LTD = 16131\nVENDOR_ID_PHAM_KIM_BINH_NGUYEN = 16132\nVENDOR_ID_ARTUR_SABIK = 16133\nVENDOR_ID_CIRTI_DE_NANTES = 16134\nVENDOR_ID_COHERENT_LIGHT = 16135\nVENDOR_ID_FT_INTERACTIVE_DATA = 16136\nVENDOR_ID_DR_HUGGLE_PARTNER_GMBH = 16137\nVENDOR_ID_ETRADE_FINANCIAL_INC = 16138\nVENDOR_ID_COMPELLENT_TECHNOLOGIES = 16139\nVENDOR_ID_MOZAPPSORG = 16140\nVENDOR_ID_A_NET_INTERNET_SERVICES_BV = 16141\nVENDOR_ID_NETWORK_TECHNOLOGY_AND_ENGINEERING_INSTITUTE_OF_XIAN_JIAOTONG_UNIVERSITY = 16142\nVENDOR_ID_GINA_JONATHAN_OBERG = 16143\nVENDOR_ID_KERBEROS = 16144\nVENDOR_ID_DRESEARCH_DIGITAL_MEDIA_SYSTEMS_GMBH = 16145\nVENDOR_ID_UNITED_BULGARIAN_BANK = 16146\nVENDOR_ID_INTY_LTD = 16147\nVENDOR_ID_JAVAREALM_SOFTWARE_DEVELOPMENT_TEAM = 16148\nVENDOR_ID_DEL_MAR_ANALYTICAL = 16149\nVENDOR_ID_WHITE_WOLF_CAMARILLA = 16150\nVENDOR_ID_PIMA_COMMUNITY_COLLEGE = 16151\nVENDOR_ID_THE_CINCINNATI_INSURANCE_COMPANIES = 16152\nVENDOR_ID_SNERT = 16153\nVENDOR_ID_NETWORK_RESOURCE_TECHNOLOGIES_CORP = 16154\nVENDOR_ID_HALCYONFLAME = 16155\nVENDOR_ID_FERAL_NERDS_ENTERPRISES = 16156\nVENDOR_ID_RDI = 16157\nVENDOR_ID_CITR_PTY_LTD = 16158\nVENDOR_ID_UQ_BUSINESS_SCHOOL = 16159\nVENDOR_ID_SPHERE_SYSTEMS = 16160\nVENDOR_ID_CSC_SCIENTIFIC_COMPUTING_LTD = 16161\nVENDOR_ID_RM_SYSTEM_HOLDING_AS = 16162\nVENDOR_ID_ELETTRONIKA_SRL = 16163\nVENDOR_ID_ZYLK = 16164\nVENDOR_ID_CRESCENDO_NETWORKS = 16165\nVENDOR_ID_UNIVERSITY_OF_SHEFFIELD = 16166\nVENDOR_ID_REPSOL_QUIMICA = 16167\nVENDOR_ID_MEDISYNC_MIDWEST_LIMITED = 16168\nVENDOR_ID_TELEREDES = 16169\nVENDOR_ID_TOTALEASY = 16170\nVENDOR_ID_ZUCCHETTICOM_SRL = 16171\nVENDOR_ID_DANGER_INCORPORATED = 16172\nVENDOR_ID_ARIZONA_WESTERN_COLLEGE = 16173\nVENDOR_ID_SENSATRONICS_LLC = 16174\nVENDOR_ID_TRIADE_BERATUNGSGESELLSCHAFT_FR_INFORMATIONSTECHNOLOGIE_MBH = 16175\nVENDOR_ID_ZEPHRA_CORP = 16176\nVENDOR_ID_WESTERMO_TELEINDUSTRI_AB = 16177\nVENDOR_ID_WELLPOINT_HEALTH_NETWORKS = 16178\nVENDOR_ID_WAN_NORWAY = 16179\nVENDOR_ID_BLUE_DATA_NETWORKS_LTD = 16180\nVENDOR_ID_E3SWITCH_LLC = 16181\nVENDOR_ID_WHITESMITHS_AUSTRALIA_PTY_LTD = 16182\nVENDOR_ID_HANARO_TELECOM = 16183\nVENDOR_ID_PT_INDORAMA_SYNTHETICS_TBK = 16184\nVENDOR_ID_NM_SYSTEMS_COLTD = 16185\nVENDOR_ID_PETER_SCHNEIDER_EDV = 16186\nVENDOR_ID_AEDILIS_UAB = 16187\nVENDOR_ID_MATERIALS_SCIENCE_AND_TECHNOLOGY_DEPT_UNIV_OF_CRETE_GREECE = 16188\nVENDOR_ID_ASSURED_COMMUNICATIONS_GROUP_LIMITED = 16189\nVENDOR_ID_COLEGIO_OFICIAL_DE_ARQUITECTOS_DE_MADRID = 16190\nVENDOR_ID_NIGHTFIRE_SOFTWARE_INC = 16191\nVENDOR_ID_BCN_ASSOCIATES_INC = 16192\nVENDOR_ID_EAGLE_MOUNTAIN_INTERNATIONAL_CHURCH_INC = 16193\nVENDOR_ID_RANCHO_MORADO = 16194\nVENDOR_ID_THOMSON_CORP_SWITZERLAND_AG = 16195\nVENDOR_ID_WASHINGTON_MUTUAL = 16196\nVENDOR_ID_SCOOBTEC = 16197\nVENDOR_ID_INVESTMENT_COMPANY_INSTITUTE = 16198\nVENDOR_ID_OPENFORCE_INFORMATION_TECHNOLOGY_GESMBH = 16199\nVENDOR_ID_CASERO_INC = 16200\nVENDOR_ID_TI_TELECOMUNICAZIONI_INFORMATICA = 16201\nVENDOR_ID_OAKLAND_UNIVERSITY = 16202\nVENDOR_ID_SYSDATA_KFT = 16203\nVENDOR_ID_WESTINGHOUSE_ELECTRIC_COMPANY = 16204\nVENDOR_ID_T_SYSTEMS_GCF_MSY = 16205\nVENDOR_ID_MOBILE_TELESYSTEMS_LIMITED_LIBILITY_COMPANY = 16206\nVENDOR_ID_SPLICECOM_LTD = 16207\nVENDOR_ID_UNIVERSIDADE_LUSIADA = 16208\nVENDOR_ID_COLLABORATIVE_NETWORK_TECHNOLOGIES_INC = 16209\nVENDOR_ID_DELTA_PIKTORI_OY = 16210\nVENDOR_ID_CERTIFIED_SECURITY_SOLUTIONS = 16211\nVENDOR_ID_WANG = 16212\nVENDOR_ID_CEN_ISSS_XFS_WORKSHOP = 16213\nVENDOR_ID_PEHKONEN_FAMILY = 16214\nVENDOR_ID_ELBIT_SYSTEMS_LTD = 16215\nVENDOR_ID_TRINITY_CC_CONSULTING_INC = 16216\nVENDOR_ID_KDDI_MEDIA_WILL_CORPORATION = 16217\nVENDOR_ID_TALKLINE_GMBH = 16218\nVENDOR_ID_DB_TELEMATIK_GMBH = 16219\nVENDOR_ID_LANDMAT = 16220\nVENDOR_ID_STRODL = 16221\nVENDOR_ID_DONOBI_INC = 16222\nVENDOR_ID_GLOBAL_MESSAGING_SOLUTIONS_INC = 16223\nVENDOR_ID_HTBLUVA_WIENER_NEUSTADT = 16224\nVENDOR_ID_PAETEC_COMMUNICATIONS = 16225\nVENDOR_ID_PUBLIC_SERVICE_ENTERPRISE_GROUP = 16226\nVENDOR_ID_VITALSTREAM_INC = 16227\nVENDOR_ID_AURIQ_SYSTEMS_INC = 16228\nVENDOR_ID_NU_INFORMATIONSSYSTEME_GMBH = 16229\nVENDOR_ID_ECORNELL = 16230\nVENDOR_ID_INTROSPECT_CONSULTING_INC = 16231\nVENDOR_ID_NETMANJ_PROJECT = 16232\nVENDOR_ID_TUKCEDO_SERVICES = 16233\nVENDOR_ID_DOGICO = 16234\nVENDOR_ID_INSIGNIA_FINANCIAL_GROUP_INC = 16235\nVENDOR_ID_ANDREW_MALDONADO_CONSULTING = 16236\nVENDOR_ID_MANTIS_TECHNOLOGY_LLC = 16237\nVENDOR_ID_THECARTCOMPANYCOM = 16238\nVENDOR_ID_CORBETT_SYSTEMS_DEVELOPMENT_INC = 16239\nVENDOR_ID_SKINOSKE_TECH = 16240\nVENDOR_ID_BUTLERNETWORKS_AS = 16241\nVENDOR_ID_THAMES_VALLEY_UNIVERSITY = 16242\nVENDOR_ID_AVS_CONSULTING = 16243\nVENDOR_ID_ECOLE_DES_MINES_DALS = 16244\nVENDOR_ID_HUMANOR = 16245\nVENDOR_ID_HERTZ_COMUNICACIONES = 16246\nVENDOR_ID_ESERVGLOBAL = 16247\nVENDOR_ID_LITUSAT = 16248\nVENDOR_ID_ITALTEL_SPA = 16249\nVENDOR_ID_NETPRECEPT_LTD = 16250\nVENDOR_ID_BONUSO_INDUSTRIES = 16251\nVENDOR_ID_MTSAHON_SUKU = 16252\nVENDOR_ID_MTSAHON_SUKU_2 = 16253\nVENDOR_ID_HOLMEN_PAPER_AB = 16254\nVENDOR_ID_ACTION_ENGINE_CORP = 16255\nVENDOR_ID_DEVELTECH = 16256\nVENDOR_ID_THE_HONG_KONG_POLYTECHNIC_UNIVERSITY = 16257\nVENDOR_ID_FEELINGK = 16258\nVENDOR_ID_KOWA_COMPANYLTD_RESEARCH_CENTER_FOR_ADVANCED_TECHNOLOGY = 16259\nVENDOR_ID_THE_FREEBSD_CHINA_COMMUNITY = 16260\nVENDOR_ID_KOPINT_DATORG_RT = 16261\nVENDOR_ID_REPSOL_PETROLEO = 16262\nVENDOR_ID_SWISSWEBGROUP_GMBH = 16263\nVENDOR_ID_ITHEON = 16264\nVENDOR_ID_OPEN_METHODS = 16265\nVENDOR_ID_THE_OPTYM_GROUP = 16266\nVENDOR_ID_AMERICAN_NETWORK_COMMUNICATIONS_INC = 16267\nVENDOR_ID_US_LINUX_NETWORKS_LLC = 16268\nVENDOR_ID_IOMART_LTD = 16269\nVENDOR_ID_GRAVITYROCKCOM = 16270\nVENDOR_ID_NEW_SOUTH_WALES_FIRE_BRIGADES = 16271\nVENDOR_ID_LEGEND_BEIJING_LIMITED = 16272\nVENDOR_ID_NEXGE_TECHNOLOGY_P_LTD = 16273\nVENDOR_ID_TELMAT_INDUSTRIE = 16274\nVENDOR_ID_UNIVERSITY_OF_KUOPIO = 16275\nVENDOR_ID_COMMUNICATIONS_REGULATION_COMMISSION = 16276\nVENDOR_ID_MOBILE_INTERNET_LIMITED = 16277\nVENDOR_ID_SLAB_INFORMATIONSSYSTEME = 16278\nVENDOR_ID_ST_FRANCIS_BORGIA_RHS = 16279\nVENDOR_ID_OLTPCORP = 16280\nVENDOR_ID_SYSLOG_GMBH = 16281\nVENDOR_ID_H5_TECHNOLOGIES = 16282\nVENDOR_ID_OM = 16283\nVENDOR_ID_QUADFORE_CORPORATION = 16284\nVENDOR_ID_IBPSEARCH = 16285\nVENDOR_ID_HUNGAROCOM_LTD = 16286\nVENDOR_ID_SWISS_FEDERAL_INSTITUTE_OF_TECHNOLOGY = 16287\nVENDOR_ID_EDV_BERATUNG = 16288\nVENDOR_ID_MEDIVA_INC = 16289\nVENDOR_ID_SIAT = 16290\nVENDOR_ID_MEETING_MAKER_INC = 16291\nVENDOR_ID_SUSURRO = 16292\nVENDOR_ID_BRVL_TECHNOLOGY_LTD = 16293\nVENDOR_ID_APPLIED_INSTRUMENTS_INC = 16294\nVENDOR_ID_ORMOND_COLLEGE = 16295\nVENDOR_ID_VINDICIA = 16296\nVENDOR_ID_SEMNODE = 16297\nVENDOR_ID_HANBANG_SOFT_TECHNOLOGY_COLTD = 16298\nVENDOR_ID_COREGA_KK = 16299\nVENDOR_ID_PENGUIN_INFOTECH_PVT_LTD_FORMERLY_PENGUIN_INDIA_LINUX_SOLUTIONS_PVT_LTD = 16300\nVENDOR_ID_SILESIAN_UNIVERSITY_IN_OPAVA = 16301\nVENDOR_ID_INTRAE = 16302\nVENDOR_ID_SANS_SERIF = 16303\nVENDOR_ID_EADS = 16304\nVENDOR_ID_KIBS_AD_SKOPJE = 16305\nVENDOR_ID_REPSOL_DISTRIBUCION = 16306\nVENDOR_ID_STREAMSCALE = 16307\nVENDOR_ID_RHOEN_KLINIKUM_AG = 16308\nVENDOR_ID_NTT_SOFTWARE_CORPORATION = 16309\nVENDOR_ID_MARKETLINE_RT = 16310\nVENDOR_ID_ALATEC_SA = 16311\nVENDOR_ID_REGISTERCOM = 16312\nVENDOR_ID_VALEMOUNT_NETWORKS_CORP = 16313\nVENDOR_ID_BUREAUTIQUE_SERVICES_DEVELOPPEMENT = 16314\nVENDOR_ID_XSUPPORT = 16315\nVENDOR_ID_HSBC_BANK_NORTH_AMERICA = 16316\nVENDOR_ID_QUEBECOR_WORLD_NORTH_AMERICA = 16317\nVENDOR_ID_EMPURON = 16318\nVENDOR_ID_VIAVIS_MOBILE_SOLUTIONS_INC = 16319\nVENDOR_ID_THE_BRAIN_ROOM_LTD = 16320\nVENDOR_ID_ZOOM_INTERNATIONAL_SRO = 16321\nVENDOR_ID_LEADING_EDGE_TELEMETRY_LLC = 16322\nVENDOR_ID_TRAX_HOLDINGS = 16323\nVENDOR_ID_ITELSYS = 16324\nVENDOR_ID_NESCO_CO_LTD = 16325\nVENDOR_ID_IYABUROCOM = 16326\nVENDOR_ID_MARK_CHESNEY = 16327\nVENDOR_ID_NARI_CORP_NANJING_AUTOMATION_RESEARCH_INSTITUTE = 16328\nVENDOR_ID_ADISYS_OY = 16329\nVENDOR_ID_REUTECH_RADAR_SYSTEM = 16330\nVENDOR_ID_COSMOCODE_GMBH = 16331\nVENDOR_ID_LONGSHINE_TECHNOLOGIE_EUROPE_GMBH = 16332\nVENDOR_ID_BITMINE_AB = 16333\nVENDOR_ID_NORTHROP_GRUMMAN = 16334\nVENDOR_ID_SEOUL_ELECTRIC_POWER_SYSTEM_COLTD = 16335\nVENDOR_ID_ALATEC_SA_2 = 16336\nVENDOR_ID_CANADIAN_NATIONAL_RAILWAY_COMPANY = 16337\nVENDOR_ID_IPONE = 16338\nVENDOR_ID_GLOBEOP_FINANCIAL_SERVICES_LLC = 16339\nVENDOR_ID_WHITE_ROCK_NETWORKS = 16340\nVENDOR_ID_BIOMEDICAL_INFORMATICS_RESEARCH_NETWORK_BIRN = 16341\nVENDOR_ID_MENTA_GROUP = 16342\nVENDOR_ID_UTTC_UNITED_TRI_TECH_CORPORATION = 16343\nVENDOR_ID_PERFIGO = 16344\nVENDOR_ID_THE_ANVIL_ORGANISATION_LTD = 16345\nVENDOR_ID_FARABI_TECHNOLOGY = 16346\nVENDOR_ID_IPCAST = 16347\nVENDOR_ID_SHANGHAI_TRANSFIBER_SCIENCETECHNOLOGY_COLTD = 16348\nVENDOR_ID_COMGEAR = 16349\nVENDOR_ID_TOT_CORPORATION_PUBLIC_COMPANY_LIMITED = 16350\nVENDOR_ID_CAIXA_BANK_S_A = 16351\nVENDOR_ID_NEWMAN_COLLEGE_OF_HE = 16352\nVENDOR_ID_HOWALDTSWERKE_DEUTSCHE_WERFT_AG = 16353\nVENDOR_ID_GRUPPENNEST = 16354\nVENDOR_ID_MIDRAY_GMBH = 16355\nVENDOR_ID_TRANSFER_LIMITED = 16356\nVENDOR_ID_HAIN_CELESTIAL_GROUP = 16357\nVENDOR_ID_UNITED_CARRIER_NETWORKS = 16358\nVENDOR_ID_MILLER_SAMUEL_INC = 16359\nVENDOR_ID_CONTRALORA_GENERAL_DE_LA_REPBLICA = 16360\nVENDOR_ID_PROGRESSIVE_LINUX_CONSULTANTS_LLC = 16361\nVENDOR_ID_WATERS_NETWORK_SYSTEMS = 16362\nVENDOR_ID_SCHOLZ_VOLKMER_INTERMEDIALES_DESIGN_GMBH = 16363\nVENDOR_ID_SMARTDATA = 16364\nVENDOR_ID_DION_GLOBAL_SOLUTIONS_GMBH_FORMERLY_SWISSRISK_FINANCIAL_SYSTEMS_GMBH = 16365\nVENDOR_ID_INFORMA_DEL_PERU_INFORMACION_ECONOMICA_SA = 16366\nVENDOR_ID_SAARSTAHL = 16367\nVENDOR_ID_SYSAPEX_COMMUNICATIONS_INC = 16368\nVENDOR_ID_CLARK_UNIVERSITY = 16369\nVENDOR_ID_DASS_CONSULTING_GROUP_INC = 16370\nVENDOR_ID_TYGRYSEKCOM = 16371\nVENDOR_ID_T_MOBILE_CZECH_REPUBLIC_AS = 16372\nVENDOR_ID_FEDERAL_PUBLIC_SERVICE_TRANSPORT_MOBILITY = 16373\nVENDOR_ID_NV_MULTIKABEL = 16374\nVENDOR_ID_UNIVERSITY_OF_ATHENS = 16375\nVENDOR_ID_ACOSS = 16376\nVENDOR_ID_IMCTECH = 16377\nVENDOR_ID_SARIAN_SYSTEMS_LIMITED = 16378\nVENDOR_ID_RIVER_CITIES_READER = 16379\nVENDOR_ID_NEXVU_TECHNOLOGIES = 16380\nVENDOR_ID_VERIFIBER_LLC = 16381\nVENDOR_ID_INTERBOX_INTERNET = 16382\nVENDOR_ID_HP_GSE_SECURITY = 16383\nVENDOR_ID_CALIFORNIA_STATE_POLYTECHNIC_UNIVERSITY_POMONA = 16384\nVENDOR_ID_HUDLI = 16385\nVENDOR_ID_DAXIONGMAO = 16386\nVENDOR_ID_OEONE_CORPORATION = 16387\nVENDOR_ID_JRG_EICHHORN = 16388\nVENDOR_ID_PEGASUS_EDV_BETREUUNGS_GMBH = 16389\nVENDOR_ID_VINESYS_TECHNOLOGY = 16390\nVENDOR_ID_ROUTEONE = 16391\nVENDOR_ID_CORTLAND_COMMUNICATIONS = 16392\nVENDOR_ID_SEAN_CHAMP_ENTERPRISES = 16393\nVENDOR_ID_PIGEON_POINT_SYSTEMS = 16394\nVENDOR_ID_WILLIAM_R_SOWERBUTTS = 16395\nVENDOR_ID_JUSTINKNASHCOM = 16396\nVENDOR_ID_US_ARMY_ALTESS = 16397\nVENDOR_ID_METALLECT_CORP = 16398\nVENDOR_ID_GREYHAVENS = 16399\nVENDOR_ID_SINGAPORE_TELECOMMUNICATION_LIMITED = 16400\nVENDOR_ID_HEWLETT_PACKARD_SLOVAKIA = 16401\nVENDOR_ID_TELEFORMIX_LLC = 16402\nVENDOR_ID_BROBUS_INTERNATIONAL_INC = 16403\nVENDOR_ID_NEURALWORX = 16404\nVENDOR_ID_CPEGNET = 16405\nVENDOR_ID_ADWIN = 16406\nVENDOR_ID_LANUX_LIMITED = 16407\nVENDOR_ID_LEO_CONSULTING = 16408\nVENDOR_ID_FUTURI_LTD = 16409\nVENDOR_ID_NEC_COMPUTERS_INTERNATIONAL_BV = 16410\nVENDOR_ID_INDICIA_NEDERLAND_BV = 16411\nVENDOR_ID_HOME_HEALTH_CORPORATION_OF_AMERICA = 16412\nVENDOR_ID_RAHBANYCOM = 16413\nVENDOR_ID_ITSANADDICTIONORG = 16414\nVENDOR_ID_BBRADENAHL_HEGGERS = 16415\nVENDOR_ID_REAL_DATA_SC = 16416\nVENDOR_ID_TMC_HEALTHCARE = 16417\nVENDOR_ID_ULYSSIS = 16418\nVENDOR_ID_PINBOARD = 16419\nVENDOR_ID_SRA_INTERNATIONAL = 16420\nVENDOR_ID_CHRISTIAN_ALBRECHTS_UNIVERSITAET = 16421\nVENDOR_ID_MUMPK_LIMITED_PARTNERSHIP = 16422\nVENDOR_ID_ABACUS_RESEARCH_AG = 16423\nVENDOR_ID_ALANTA = 16424\nVENDOR_ID_CITY_UTILITIES_OF_SPRINGFIELD_MO = 16425\nVENDOR_ID_LAWRENCE_TECHNOLOGICAL_UNIVERSITY = 16426\nVENDOR_ID_INTERNET_ACCESS_FACILITIES_BV = 16427\nVENDOR_ID_DIAL_ASSURANCE_INC = 16428\nVENDOR_ID_LINDORFF_HOLDING_AS = 16429\nVENDOR_ID_MUTINY_LIMITED = 16430\nVENDOR_ID_ENGINEERINGMO_SPA_FORMERLY_T_SYSTEMS_ITALIA_SPA = 16431\nVENDOR_ID_PKI_INNOVATIONS_INC = 16432\nVENDOR_ID_MOOREHEAD_COMMUNICATIONS = 16433\nVENDOR_ID_JENZABAR_INC = 16434\nVENDOR_ID_CLEARSWIFT_CORPORATION = 16435\nVENDOR_ID_BOOKHAM_INC = 16436\nVENDOR_ID_BART = 16437\nVENDOR_ID_KANSAS_INFORMATION_CONSORTIUM = 16438\nVENDOR_ID_PNX_PTY_LTD = 16439\nVENDOR_ID_NETINS_INC = 16440\nVENDOR_ID_ENST = 16441\nVENDOR_ID_PROACTIVE_A_S = 16442\nVENDOR_ID_PO_NEDLLOYD_LIMITED = 16443\nVENDOR_ID_UPTI = 16444\nVENDOR_ID_KINETO_WIRELESS = 16445\nVENDOR_ID_ADLINK = 16446\nVENDOR_ID_EPIX_INTERNET_SERVICES = 16447\nVENDOR_ID_NEOGATE_CO_LTD = 16448\nVENDOR_ID_CHARCOAL_GENERATION_LIMITED = 16449\nVENDOR_ID_IT_CONCEPTS_GMBH = 16450\nVENDOR_ID_SMC_PNEUMATICS_NZ_LIMITED = 16451\nVENDOR_ID_INFOCOMP_PTY_LTD = 16452\nVENDOR_ID_BEIJING_MUNICIPAL_LOCAL_TAXATION_BUREAU = 16453\nVENDOR_ID_AXWAY = 16454\nVENDOR_ID_DFS_DEUTSCHE_FLUGSICHERUNG_GMBH = 16455\nVENDOR_ID_GPL_ELETRO_ELETRONICA_S_A = 16456\nVENDOR_ID_OPERA_LOGIC_INC = 16457\nVENDOR_ID_GEMINI_MOBILE_TECHNOLOGIES_INC = 16458\nVENDOR_ID_EPYGI_TECHNOLOGIES_LTD = 16459\nVENDOR_ID_CONVERTRONIC_GMBH = 16460\nVENDOR_ID_EUROFLUXO_SUPORTE_A_NOVAS_TECNOLOGIAS_LDA = 16461\nVENDOR_ID_JAVCO_CONSULTING = 16462\nVENDOR_ID_METAVANTE_CORPORATION = 16463\nVENDOR_ID_PANGOLIN_SOFTWARE_INDUSTRIES_LTD = 16464\nVENDOR_ID_STATE_COLLEGE_AREA_SCHOOL_DISTRICT = 16465\nVENDOR_ID_SONARTECH_ATLAS_PTY_LTD = 16466\nVENDOR_ID_GIGAWORKS = 16467\nVENDOR_ID_DERIVA_GMBH = 16468\nVENDOR_ID_COASTAL_WAVE_INTERNET = 16469\nVENDOR_ID_KEBA_AG = 16470\nVENDOR_ID_SCAN_ASSOCIATES_SDN_BHD = 16471\nVENDOR_ID_QMEDIT = 16472\nVENDOR_ID_TERRANET_LTD = 16473\nVENDOR_ID_MENCIAL = 16474\nVENDOR_ID_HAYS_IMS = 16475\nVENDOR_ID_AWSYS_GMBH = 16476\nVENDOR_ID_SYSLINE_SPA = 16477\nVENDOR_ID_EIWEI_TRAINING_CONSULTING = 16478\nVENDOR_ID_P4_TECNOLOGIA_LTDA = 16479\nVENDOR_ID_MINISTRY_OF_TRANSPORTATION_OF_ONTARIO = 16480\nVENDOR_ID_JOUTFITTERS_LLC = 16481\nVENDOR_ID_OLD_DOMINION_UNIVERSITY = 16482\nVENDOR_ID_PURE_NETWORKS = 16483\nVENDOR_ID_GAVIN_NEWMAN = 16484\nVENDOR_ID_ADVANCED_MULTIFAKE_SYSTEMS = 16485\nVENDOR_ID_DAUPHIN_MULTIMEDIA = 16486\nVENDOR_ID_THALES_NL = 16487\nVENDOR_ID_ELECTRALINK_LTD = 16488\nVENDOR_ID_THE_HANOVER_COMPANY = 16489\nVENDOR_ID_SENTRYWARE = 16490\nVENDOR_ID_INMETRICS_LTDA_EPP = 16491\nVENDOR_ID_SCITOR_CORPORATION = 16492\nVENDOR_ID_AUTOCELL_LABORATORIES_INC = 16493\nVENDOR_ID_MASSMUTUAL = 16494\nVENDOR_ID_IAFRICACOM = 16495\nVENDOR_ID_ACU_RITE_COMPANIES_INC = 16496\nVENDOR_ID_REPSOL_EXPLORACION = 16497\nVENDOR_ID_MEDIUM_SOFT_AS = 16498\nVENDOR_ID_GRABURN_TECHNOLOGY = 16499\nVENDOR_ID_SWAC_GMBH = 16500\nVENDOR_ID_SH_GREENPOINTS = 16501\nVENDOR_ID_LGB_PHOENIX = 16502\nVENDOR_ID_PRAIRIE_FIRE_INTERNET_TECHNOLOGIES = 16503\nVENDOR_ID_SINDHSOFT = 16504\nVENDOR_ID_TEAMSTAFF_INC = 16505\nVENDOR_ID_NEXTORAGE_INC = 16506\nVENDOR_ID_EVANZ_ENTERPRISES = 16507\nVENDOR_ID_PROGEL_SRL = 16508\nVENDOR_ID_ASSOCIATION_DES_MEDECINS_DE_SAINT_HILAIRE = 16509\nVENDOR_ID_THE_PEPSI_BOTTLING_GROUP = 16510\nVENDOR_ID_SENTOR_MANAGED_SECURITY_SERVICES_AB = 16511\nVENDOR_ID_MEDIENZENTRUM_OSNABRUECK = 16512\nVENDOR_ID_MONACO_INTERACTIVE = 16513\nVENDOR_ID_UUNET_SA = 16514\nVENDOR_ID_GRNET_SA = 16515\nVENDOR_ID_ELIPSAN = 16516\nVENDOR_ID_PARTNERS_HEALTHCARE_SYSTEM_INC = 16517\nVENDOR_ID_NEW_PARTICLES_CORPORATION = 16518\nVENDOR_ID_MICRODASYS_INC = 16519\nVENDOR_ID_PG_CS = 16520\nVENDOR_ID_PRONTO_NETWORKS = 16521\nVENDOR_ID_TELEFONICA_PUBLICIDAD_E_INFORMACION_SA = 16522\nVENDOR_ID_ERIC_YEO = 16523\nVENDOR_ID_MORTY_ABZUG = 16524\nVENDOR_ID_UNICORN = 16525\nVENDOR_ID_KYA_GROUP = 16526\nVENDOR_ID_INTERNET_PICTURES_CORPORATION = 16527\nVENDOR_ID_LEADTEK_RESEARCH_INC = 16528\nVENDOR_ID_HCL_INFOSYSTEMS_LIMITED = 16529\nVENDOR_ID_EXALT_TECHNOLOGIES = 16530\nVENDOR_ID_BRICO_DPOT = 16531\nVENDOR_ID_SPARDA_DATENVERARBEITUNG_EG = 16532\nVENDOR_ID_CONSEJO_GENERAL_DE_LA_ABOGACIA_ESPAOLA = 16533\nVENDOR_ID_MYCOM_INTERNATIONAL = 16534\nVENDOR_ID_BITBAND_TECHNOLOGIES_LTD = 16535\nVENDOR_ID_TISCALI_UK = 16536\nVENDOR_ID_WIRELESS_DATA_SERVICES = 16537\nVENDOR_ID_PROGRESSIVE_ELECTRICAL_SERVICES_INC = 16538\nVENDOR_ID_GRABER_ENTERPRISES_INC = 16539\nVENDOR_ID_EDS_PUBBLICA_AMMINISTRAZIONE_SPA = 16540\nVENDOR_ID_WAPITI_REGIONAL_LIBRARY = 16541\nVENDOR_ID_HARLEY_SYSTEMS = 16542\nVENDOR_ID_STANDARD_BANK_OF_SOUTH_AFRICA = 16543\nVENDOR_ID_LEASFINANZ_AG = 16544\nVENDOR_ID_CARDSERVICE_INTERNATIONAL = 16545\nVENDOR_ID_BBHK = 16546\nVENDOR_ID_ALIXEN = 16547\nVENDOR_ID_FACHSCHAFT_ELEKTROTECHNIK_UND_INFORMATIONSTECHNIK = 16548\nVENDOR_ID_GIDDENS_INDUSTRIES_INC = 16549\nVENDOR_ID_MASTERS_OF_BRANDING = 16550\nVENDOR_ID_COMQUEST_TECNOLOGIA = 16551\nVENDOR_ID_CLEAR_COMMUNICATIONS_CORPORATION = 16552\nVENDOR_ID_MEDIAWORLDS = 16553\nVENDOR_ID_MDS_REPROCESSING = 16554\nVENDOR_ID_VASSAR_COLLEGE = 16555\nVENDOR_ID_WWWSCHENKMANCOM = 16556\nVENDOR_ID_IRT_ELECTRONICS_PTY_LTD = 16557\nVENDOR_ID_JIANGSU_YITONG_HIGH_TECH_COLTD = 16558\nVENDOR_ID_ALOC_BONNIER_A_S = 16559\nVENDOR_ID_DR_TPPER_DATENTECHNIK = 16560\nVENDOR_ID_SANDAR_TELECAST_AS = 16561\nVENDOR_ID_DEPAUL_UNIVERSITY = 16562\nVENDOR_ID_INTERSYSTEMS = 16563\nVENDOR_ID_EVERSTREAM_INC = 16564\nVENDOR_ID_PINE_DIGITAL_SECURITY = 16565\nVENDOR_ID_RT_SHIN_AND_ASSOCIATES = 16566\nVENDOR_ID_UNIVERSITY_OF_BELIZE = 16567\nVENDOR_ID_FUKKEN_COLTD = 16568\nVENDOR_ID_REALVISION_INC = 16569\nVENDOR_ID_LINUX_AT_WORKDE = 16570\nVENDOR_ID_HUNGARIAN_TELEKOM_PLC_FORMERLY_WESTEL_MOBILE_TELECOMMUNICATIONS_COMPANY_LTD = 16571\nVENDOR_ID_CENTRO_TECNICO_PER_LA_RETE_UNITARIA_DELLA_PUBBLICA_AMMINISTRAZIONE = 16572\nVENDOR_ID_ICP_EUROPE_PLC = 16573\nVENDOR_ID_ONTARIO_SYSTEMS = 16574\nVENDOR_ID_OOPS_ORG = 16575\nVENDOR_ID_NOVSO = 16576\nVENDOR_ID_VIRTUAL_TARGETS_CENTER = 16577\nVENDOR_ID_GEOS = 16578\nVENDOR_ID_MEURISSE = 16579\nVENDOR_ID_SWIFTEL_COMMUNICATIONS = 16580\nVENDOR_ID_SIIG = 16581\nVENDOR_ID_BOC_ONCOLOGY_CENTER = 16582\nVENDOR_ID_NET6A = 16583\nVENDOR_ID_EVPU_AS = 16584\nVENDOR_ID_ISOLUTION_SC = 16585\nVENDOR_ID_PALLAS_ATHENA_BV = 16586\nVENDOR_ID_GLOBAL_LOCATE_INC = 16587\nVENDOR_ID_SSI_MICRO_LTD = 16588\nVENDOR_ID_CNMP_NETWORKS_INC = 16589\nVENDOR_ID_SCYTL_ONLINE_WORLD_SECURITY_SA = 16590\nVENDOR_ID_AVTEC_INC = 16591\nVENDOR_ID_LABORATORY_AUTOMATION_INC = 16592\nVENDOR_ID_STIXO = 16593\nVENDOR_ID_EMBTEK = 16594\nVENDOR_ID_RE_DESIGN = 16595\nVENDOR_ID_TRENDDISCOVERY_CORPORATION = 16596\nVENDOR_ID_LANDALA_NT_AB = 16597\nVENDOR_ID_TON_UND_STUDIOTECHNIK_GMBH = 16598\nVENDOR_ID_VASSOL_INC = 16599\nVENDOR_ID_MARKETING_RESOURCES_INC = 16600\nVENDOR_ID_INTREX = 16601\nVENDOR_ID_IT_VISION_AG = 16602\nVENDOR_ID_AIRMAGNET_INC = 16603\nVENDOR_ID_THE_OPENSSL_GROUP = 16604\nVENDOR_ID_RADIANCE_BBS = 16605\nVENDOR_ID_DELFI = 16606\nVENDOR_ID_DISTRA_PTY_LTD = 16607\nVENDOR_ID_TOTTORI_SANYO_ELECTRIC_COLTD = 16608\nVENDOR_ID_PHALANYX = 16609\nVENDOR_ID_TELEMEDIA_SOFTWARE_CORP = 16610\nVENDOR_ID_QNET = 16611\nVENDOR_ID_ZENON_GMBH = 16612\nVENDOR_ID_CROSS = 16613\nVENDOR_ID_GENOME_SEQUENCING_CENTER = 16614\nVENDOR_ID_ENTRADA_SOFTWARE_INC = 16615\nVENDOR_ID_DISCIPLEMAKERS_INC = 16616\nVENDOR_ID_MERLIN_AVIATION_SYSTEMS_LTD = 16617\nVENDOR_ID_SAITC = 16618\nVENDOR_ID_BANDSPEED_INC = 16619\nVENDOR_ID_BUGALUX_DENMARK_A_S = 16620\nVENDOR_ID_COMPUTER_CARE_INC = 16621\nVENDOR_ID_INTELLIGENTAGENTS = 16622\nVENDOR_ID_MOBILE_BROADCASTING_CORPORATION = 16623\nVENDOR_ID_PLANETACTIVE_GMBH = 16624\nVENDOR_ID_OCADO_LIMITED = 16625\nVENDOR_ID_NORKOM_TECHNOLOGIES_LTD = 16626\nVENDOR_ID_CHANG_INDUSTRY_INC = 16627\nVENDOR_ID_PDXCOLONET = 16628\nVENDOR_ID_CERTEON_INC = 16629\nVENDOR_ID_INTELLAGENT_GMBH = 16630\nVENDOR_ID_BERMUDA_HOLDING = 16631\nVENDOR_ID_SETON_HALL_UNIVERSITY = 16632\nVENDOR_ID_DANAMIS_ASSOCIATES = 16633\nVENDOR_ID_VOXAGE_TELEINFORMATICA_LTDA = 16634\nVENDOR_ID_S_FRIENDS = 16635\nVENDOR_ID_KTROAD_LTD = 16636\nVENDOR_ID_SANYCOM_TECHNOLOGY_COLTD = 16637\nVENDOR_ID_AVL_LIST_GMBH = 16638\nVENDOR_ID_SOFTSOLUTIONS = 16639\nVENDOR_ID_XNET_2000_GMBH = 16640\nVENDOR_ID_INTERNATIONAL_SOLAR_ENERGY_SOCIETY = 16641\nVENDOR_ID_THE_AMULET_GROUP = 16642\nVENDOR_ID_EXAGO = 16643\nVENDOR_ID_XTENSIVE = 16644\nVENDOR_ID_SAN_JOAQUIN_VALLEY_COLLEGE_INC = 16645\nVENDOR_ID_R_F_SYSTEMS_INC = 16646\nVENDOR_ID_REGAL_CINEMEDIA = 16647\nVENDOR_ID_CENTOS_PRIME = 16648\nVENDOR_ID_SOFTEL_SYSTEMS_PTY_LTD = 16649\nVENDOR_ID_JSC_DALCOMBANK = 16650\nVENDOR_ID_GIFT_OF_THE_GIVERS_FOUNDATION = 16651\nVENDOR_ID_THUNDERGEEK = 16652\nVENDOR_ID_ELTRON = 16653\nVENDOR_ID_ELECTRALINK_LTD_2 = 16654\nVENDOR_ID_LUNAR_GRAVITY_NETWORKS = 16655\nVENDOR_ID_M3PRODUCTION = 16656\nVENDOR_ID_ING_DIRECT = 16657\nVENDOR_ID_ITA_SOFTWARE = 16658\nVENDOR_ID_COMPUTER_SCIENCE_HOUSE = 16659\nVENDOR_ID_DMX_TECHNOLOGIES = 16660\nVENDOR_ID_TACTEAM_GMBH = 16661\nVENDOR_ID_CFS_GLOBAL_SERVICES = 16662\nVENDOR_ID_WESTEC_HOLDING_COMPANY_LTD = 16663\nVENDOR_ID_ACI_EUROPE_LTD = 16664\nVENDOR_ID_ESTONIAN_BUSINESS_SCHOOL_GROUP = 16665\nVENDOR_ID_PEC_PRODUCTS = 16666\nVENDOR_ID_FREAX_SISTEMAS = 16667\nVENDOR_ID_PCI_TECHNOLOGIES_INC = 16668\nVENDOR_ID_FREELAND_HAYNES_LIMITED = 16669\nVENDOR_ID_ACTION_TECHNOLOGIES_INC = 16670\nVENDOR_ID_AMERICAN_PHYSICAL_SOCIETY = 16671\nVENDOR_ID_AIRFLOW_NETWORKS = 16672\nVENDOR_ID_CHRIS_MITCHELL = 16673\nVENDOR_ID_VOYAGE_DATA_INC = 16674\nVENDOR_ID_CHACE_COMMUNITY_SCHOOL = 16675\nVENDOR_ID_SERVIBANCA_GRUPO_BCP = 16676\nVENDOR_ID_CENTRE_OF_MEDICAL_TECHNOLOGY = 16677\nVENDOR_ID_INX_SERVICES = 16678\nVENDOR_ID_STA_TRACK_ENTERPRISE_LIMITED = 16679\nVENDOR_ID_AXIA_SUPERNET_LTD = 16680\nVENDOR_ID_VALID_SOLUTIONS = 16681\nVENDOR_ID_XTRAC_LTD = 16682\nVENDOR_ID_IIT_GMBH = 16683\nVENDOR_ID_EUROPEAN_HUMANITIES_UNIVERSITY = 16684\nVENDOR_ID_OPTINEL_SYSTEMS = 16685\nVENDOR_ID_PROTEGO_NETWORKS_INC = 16686\nVENDOR_ID_CYANTEL = 16687\nVENDOR_ID_INFRASEC_SWEDEN_AB = 16688\nVENDOR_ID_RETALIX = 16689\nVENDOR_ID_SMALL_ELECTRIC_MOTORS_LTD = 16690\nVENDOR_ID_TEKRON_COMMUNICATION_SYSTEMS_INC = 16691\nVENDOR_ID_OPTIMAL_TECHNOLOGIES = 16692\nVENDOR_ID_LONGREACH_TELECOMMUNICATIONS_PTY_LTD = 16693\nVENDOR_ID_PURPLE_SUN = 16694\nVENDOR_ID_CYGNUS_MICROSYSTEMS_PRIVATE_LIMITED = 16695\nVENDOR_ID_DECISIV_INC = 16696\nVENDOR_ID_THE_FREE_SOFTWARE_INITIATIVE_OF_JAPAN = 16697\nVENDOR_ID_SCS_ENTRIPRISE_SYSTEMS = 16698\nVENDOR_ID_GYL = 16699\nVENDOR_ID_SOUTHWEST_AIRLINES_CO = 16700\nVENDOR_ID_CARLSON_HOSPITALITY_WORLDWIDE = 16701\nVENDOR_ID_NAVAL_RESEARCH_LABORATORY = 16702\nVENDOR_ID_UNIVERSITY_OF_WESTMINSTER = 16703\nVENDOR_ID_YAGA_INC = 16704\nVENDOR_ID_LOYOLA_MARYMOUNT_UNIVERSITY = 16705\nVENDOR_ID_NAVINMAIL_SERVICES_INDIA_PVT_LTD = 16706\nVENDOR_ID_EXELIXIS_DEUTSCHLAND_GMBH = 16707\nVENDOR_ID_WUHAN_WEARNES_TECHNOLOGY_COLTDCHINA = 16708\nVENDOR_ID_SAME = 16709\nVENDOR_ID_SCREAMING_GENIUS_META_LABS = 16710\nVENDOR_ID_BASIS0NET = 16711\nVENDOR_ID_ILB = 16712\nVENDOR_ID_FH_ROSENHEIM = 16713\nVENDOR_ID_GOSSAMER_GROUP_LLC = 16714\nVENDOR_ID_TRLABS_REGINA = 16715\nVENDOR_ID_UNISYN_SOFTWARE_LLC = 16716\nVENDOR_ID_UNIVERSITY_OF_VICTORIA = 16717\nVENDOR_ID_GMV_SA = 16718\nVENDOR_ID_SAS_IRIS_TECHNOLOGIES = 16719\nVENDOR_ID_OSS_SERVICE = 16720\nVENDOR_ID_CHRONOS_TECHNOLOGY_LTD = 16721\nVENDOR_ID_METHICS_OY = 16722\nVENDOR_ID_LAWBASE_TECHNOLOGIES = 16723\nVENDOR_ID_FITZGERALD_ASSOCIATES = 16724\nVENDOR_ID_ITECH_INC = 16725\nVENDOR_ID_DOWSLAKE_MICROSYSTEMS_CORPORATION = 16726\nVENDOR_ID_THALES_AVIONICS = 16727\nVENDOR_ID_WOLCOTT_SYSTEMS_GROUP_LLC = 16728\nVENDOR_ID_MIDLING_AND_ASSOCIATES = 16729\nVENDOR_ID_HIGHER_GROUND_NETWORKS_LLC = 16730\nVENDOR_ID_INDUSTRIAL_MEDIUM = 16731\nVENDOR_ID_GUARDENT_INC = 16732\nVENDOR_ID_ACTIVELIFE_LTD = 16733\nVENDOR_ID_ORBITAL_DATA_CORPORATION = 16734\nVENDOR_ID_TECHNOCOM_CORPORATION = 16735\nVENDOR_ID_JAVALI_LTD = 16736\nVENDOR_ID_NEOTOOL_DEVELOPMENT_LLC = 16737\nVENDOR_ID_INTERVIDEO_INC = 16738\nVENDOR_ID_COMPANYNAME = 16739\nVENDOR_ID_3C_LIMITED = 16740\nVENDOR_ID_ALEXANDER_MLLER_INFORMATIK = 16741\nVENDOR_ID_TOPTEAM_SERVICES_GMBH = 16742\nVENDOR_ID_HESSISCHE_ZENTRALE_FUER_DATENVERARBEITUNG = 16743\nVENDOR_ID_BLANKOM = 16744\nVENDOR_ID_ALFA_BANK_OJSC = 16745\nVENDOR_ID_SPRINGTIMESOFT_LTD_FORMERLY_NORBU09ORG = 16746\nVENDOR_ID_INTERCOMMIT_BV = 16747\nVENDOR_ID_STUDENTSKA_UNIE_CVUT = 16748\nVENDOR_ID_EXTENSIBLE_SYSTEMS_LTD = 16749\nVENDOR_ID_GEE_BROADCAST_SYSTEMS_LTD = 16750\nVENDOR_ID_INSA_SA = 16751\nVENDOR_ID_4G_CONSULTING_LTD = 16752\nVENDOR_ID_DBNET_PTY_LTD = 16753\nVENDOR_ID_MERLIN_SPOL_S_RO = 16754\nVENDOR_ID_DANUSYS_LTD = 16755\nVENDOR_ID_JUASUNNET = 16756\nVENDOR_ID_IT_SOFTWARE = 16757\nVENDOR_ID_LAKERIDGE_HEALTH_CORPORATION = 16758\nVENDOR_ID_CENTRAL_MISSOURI_STATE_UNIVERSITY = 16759\nVENDOR_ID_INTERNET_DIRECT_INC = 16760\nVENDOR_ID_NEW_MEXICO_TECH = 16761\nVENDOR_ID_OLSON_TECHNOLOGY_INC = 16762\nVENDOR_ID_EZ_WEB_TECH_INC = 16763\nVENDOR_ID_IDD_WORKS_INC = 16764\nVENDOR_ID_SCHMITZ_IT = 16765\nVENDOR_ID_SV_SYSTEMS = 16766\nVENDOR_ID_WONDERLINE_RT = 16767\nVENDOR_ID_MARINE_INTERFACE_INC = 16768\nVENDOR_ID_SV_SYSTEMS_2 = 16769\nVENDOR_ID_DAVE_DODGE = 16770\nVENDOR_ID_7SEAS_SOLUTIONS_LTD = 16771\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_SANTA_BARBARA = 16772\nVENDOR_ID_SOURWOOD_RESEARCH = 16773\nVENDOR_ID_4U_SRL = 16774\nVENDOR_ID_GIP_MDS = 16775\nVENDOR_ID_MMIT_OF_ECNU = 16776\nVENDOR_ID_OXANCE = 16777\nVENDOR_ID_UNITEAM_INIT = 16778\nVENDOR_ID_MORE_SECURE_BV = 16779\nVENDOR_ID_PATHWAY_COMPUTING_INC = 16780\nVENDOR_ID_WASP_SYSTEMS_INC = 16781\nVENDOR_ID_CLICKCADENCE_LLC = 16782\nVENDOR_ID_ABACUS_TECHNICAL_SERVICES = 16783\nVENDOR_ID_OLSON_TECHNOLOGY_INC_2 = 16784\nVENDOR_ID_MEDIZINISCHE_UNIVERSITT_WIEN = 16785\nVENDOR_ID_EOSYS_SRL = 16786\nVENDOR_ID_T_SYSTEMS_NOVA_INTERNATIONAL_GMBH = 16787\nVENDOR_ID_INFORMATION_TECHNOLOGY_CENTER_KYTP_ARISTOTLE_UNIV_OF_THESSALONIKI_GREECE = 16788\nVENDOR_ID_BERKLEE_COLLEGE_OF_MUSIC = 16789\nVENDOR_ID_MYRIO_CORPORATION = 16790\nVENDOR_ID_BRASCON = 16791\nVENDOR_ID_ZAPATA_ENGINEERING_PA = 16792\nVENDOR_ID_UNIVERSITY_OF_NEW_ENGLAND = 16793\nVENDOR_ID_SAVANT_TECHNOLOGIES_PRIVATE_LTD = 16794\nVENDOR_ID_MRO_TEK_LIMITED = 16795\nVENDOR_ID_INSTITUTE_OF_HIGH_ENERGY_PHYSICS_BEIJINGCHINA = 16796\nVENDOR_ID_INFOTHUIS_NIEUWE_MEDIA_BV = 16797\nVENDOR_ID_DIGITAL_TECHNICAL_LTD_NATIONAL_LIBARAY_OF_CHINA = 16798\nVENDOR_ID_XL_GLOBAL_SERVICES_LTD = 16799\nVENDOR_ID_IDYLIC = 16800\nVENDOR_ID_OPEN_PRICER = 16801\nVENDOR_ID_I2Q_LTD = 16802\nVENDOR_ID_TETRA_PAK_INFORMATION_MANAGEMENT_AB = 16803\nVENDOR_ID_NETCADABRA = 16804\nVENDOR_ID_VALIDUS_MEDICAL_SYSTEMS_INC = 16805\nVENDOR_ID_DOT_NEW_MEDIA_LTD = 16806\nVENDOR_ID_MILLENNIUM_DIGITAL_MEDIA = 16807\nVENDOR_ID_HAMBRECHTORG = 16808\nVENDOR_ID_PAYLESS_SHOESOURCE_INC = 16809\nVENDOR_ID_ALONG_SOFTWARE_DEVELOPER_WORKSHOP = 16810\nVENDOR_ID_BLUETIE_INC = 16811\nVENDOR_ID_UNIXIRON = 16812\nVENDOR_ID_MICRONET_COMMUNICATIONSINC = 16813\nVENDOR_ID_QUINSY_BV = 16814\nVENDOR_ID_GLIDEPATH_BV = 16815\nVENDOR_ID_COMPUTER_PLUS_GMBH = 16816\nVENDOR_ID_DE_LA_RUE_INTERNATIONAL_LTD = 16817\nVENDOR_ID_UNITED_MEDIA_COMPANY_GMBH = 16818\nVENDOR_ID_PRIOCOM_CORP = 16819\nVENDOR_ID_SOC = 16820\nVENDOR_ID_INSTITUTE_FOR_ADVANCED_STUDY = 16821\nVENDOR_ID_SCOTT_L_H_YUAN = 16822\nVENDOR_ID_ABELING_IT_DESIGN = 16823\nVENDOR_ID_OTAGAKI = 16824\nVENDOR_ID_NETWORK_TECHNOLOGY = 16825\nVENDOR_ID_INNOMEDIA_TECHNOLOGIES_PRIVATE_LIMITED = 16826\nVENDOR_ID_SECURE_SYSTEMS_LTD = 16827\nVENDOR_ID_INTELSOFT_LTD = 16828\nVENDOR_ID_DUCKCORP = 16829\nVENDOR_ID_FIDELITY_INFORMATION_SERVICES = 16830\nVENDOR_ID_BENHALLCA = 16831\nVENDOR_ID_AUCHAN = 16832\nVENDOR_ID_LOGICWORKS_INC = 16833\nVENDOR_ID_HOSPITAL_BILLING_COLLECTION_SERVICE_LTD_HBCS = 16834\nVENDOR_ID_DAHLE_CONSULTING = 16835\nVENDOR_ID_M2STUDIO_LTD = 16836\nVENDOR_ID_WASHINGTON_COUNTY = 16837\nVENDOR_ID_OMRON_CORPORATION = 16838\nVENDOR_ID_RODION_SOFTWARE = 16839\nVENDOR_ID_SHANGHAI_E_ROM_COMMUNICATION_TECHNOLOGY_COLTD = 16840\nVENDOR_ID_IFEELNET = 16841\nVENDOR_ID_IN_PHASE_CONSULTING = 16842\nVENDOR_ID_BARCOVISION = 16843\nVENDOR_ID_CREACARE_GMBH = 16844\nVENDOR_ID_ELECTRICIT_DE_FRANCE_GAZ_DE_FRANCE = 16845\nVENDOR_ID_MPEC_WROCLAW_SA = 16846\nVENDOR_ID_SAKURA_NETWORK_JAPAN = 16847\nVENDOR_ID_INDEPENDENT_CONSULTING_SOLUTIONS_LTD = 16848\nVENDOR_ID_BEYONDDATANET_ITS = 16849\nVENDOR_ID_13_COLONIES_SOFTWARE = 16850\nVENDOR_ID_RHEINGOLD_INSTITUT_FR_QUALITATIVE_MARKT_UND_MEDIENANALYSEN_GESELLSCHAFT_BRGERLICHEN_RECHTS = 16851\nVENDOR_ID_TELINFOS = 16852\nVENDOR_ID_BARRACUDA_DIGITALE_AGENTUR_GMBH = 16853\nVENDOR_ID_STI_HEALTHCARE_INC = 16854\nVENDOR_ID_METROMORPH_SOFTWORKS_RUHRI_LIST_GBR = 16855\nVENDOR_ID_BRADFORD_SOFTWARE_INC = 16856\nVENDOR_ID_3_BEAN = 16857\nVENDOR_ID_TALL_MAPLE_SYSTEMS_INC = 16858\nVENDOR_ID_MULTIMEDIA_GAMES_INC = 16859\nVENDOR_ID_THOMAS_ENDO = 16860\nVENDOR_ID_WEFINET_IT_CONSULTING = 16861\nVENDOR_ID_ICONZ_LTD = 16862\nVENDOR_ID_JSRCOM = 16863\nVENDOR_ID_MU_CONSULTING = 16864\nVENDOR_ID_ZIM_TECHNOLOGIES_INTERNATIONAL_INC = 16865\nVENDOR_ID_SOFTWARE_NORTH_INC = 16866\nVENDOR_ID_TIBCO_SOFTWARE_INC_DSPG_FORMERLY_DATASYNAPSE_INC = 16867\nVENDOR_ID_CONSEIL_INTERNET_LOGICIELS_LIBRES_JRME_ALET = 16868\nVENDOR_ID_ROMMON_LTD = 16869\nVENDOR_ID_BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SULSA = 16870\nVENDOR_ID_TCHIBO_FRISCH_RST_KAFFEE_GMBH = 16871\nVENDOR_ID_COLLABORATIVE_COMMERCE_ENGINES = 16872\nVENDOR_ID_FUTURE_GATE_GROUP = 16873\nVENDOR_ID_HITRUST_INCORPORATED = 16874\nVENDOR_ID_COMPUTER_PLUS_GMBH_2 = 16875\nVENDOR_ID_KUNGFOO_CODERS = 16876\nVENDOR_ID_ALL_MEDIA_BANKING_BV = 16877\nVENDOR_ID_OLDHAM_METROPOLITAN_BOROUGH_COUNCIL = 16878\nVENDOR_ID_SCA_TRANSFOREST_AB = 16879\nVENDOR_ID_ZEHOMECOM = 16880\nVENDOR_ID_EMNI_GMBH = 16881\nVENDOR_ID_OPENEAI_SOFTWARE_FOUNDATION = 16882\nVENDOR_ID_GKB_TECHNOLOGY_CO_LTD = 16883\nVENDOR_ID_IPL_INSTITUTO_POLITCNICO_DE_LISBOA = 16884\nVENDOR_ID_NORTEL_NETWORKS_2 = 16885\nVENDOR_ID_REVELSTONE_TECHNOLOGY = 16886\nVENDOR_ID_IPLOCKS_INC = 16887\nVENDOR_ID_NEUTELLIGENTCOM = 16888\nVENDOR_ID_MYITBIZ_INC = 16889\nVENDOR_ID_TECHNISYS = 16890\nVENDOR_ID_META_GMBH = 16891\nVENDOR_ID_SIGNALISATION_VER_MAC_INC = 16892\nVENDOR_ID_ENTERPRISE_RENT_A_CAR = 16893\nVENDOR_ID_COTELLIGENT_INC = 16894\nVENDOR_ID_JP_EVANS_INC = 16895\nVENDOR_ID_SUNGARD_FRONT_OFFICE_SOLUTIONS = 16896\nVENDOR_ID_SDATA_C_SPLITTGERBER_DATENTECHNIK = 16897\nVENDOR_ID_VENTURE_INDUSTRY_INTERNATIONAL_CORP = 16898\nVENDOR_ID_CORVIGO_INC = 16899\nVENDOR_ID_A_METAREAL_MATERIAL = 16900\nVENDOR_ID_WIBHU_TECHNOLOGIES_PVT_LTD = 16901\nVENDOR_ID_APPLETZ_CO_LTD = 16902\nVENDOR_ID_TELECATS_BV = 16903\nVENDOR_ID_AYLESFORD_NEWSPRINT_LIMITED = 16904\nVENDOR_ID_GINGER_ALLIANCE_LTD = 16905\nVENDOR_ID_ENERTRON_LLC = 16906\nVENDOR_ID_TRUMAN_STATE_UNIVERSITY = 16907\nVENDOR_ID_BINARY_APE = 16908\nVENDOR_ID_NEWBERG_PUBLIC_SCHOOLS = 16909\nVENDOR_ID_CHINAUNIONPAY = 16910\nVENDOR_ID_GENERAL_WIRELESS_SCANDINAVIA_AB = 16911\nVENDOR_ID_BUNDESANSTALT_STATISTIK_OESTERREICH = 16912\nVENDOR_ID_OPEN_NETWORK_SOLUTIONS_INC = 16913\nVENDOR_ID_NUITCA = 16914\nVENDOR_ID_THE_HAL_LEWIS_GROUP_INC = 16915\nVENDOR_ID_MA_PLANETE = 16916\nVENDOR_ID_SEECAGO = 16917\nVENDOR_ID_AEIIE_ARISE = 16918\nVENDOR_ID_AUGSBURGER_COMPUTER_FORUM_EV = 16919\nVENDOR_ID_ARTE_GEIE = 16920\nVENDOR_ID_HWACOM_SYSTEMS_INC = 16921\nVENDOR_ID_VILLE_DECHIROLLES = 16922\nVENDOR_ID_RTV_SLOVENIJA_JAVNI_ZAVOD = 16923\nVENDOR_ID_BRITISH_SKY_BROADCASTING_LTD = 16924\nVENDOR_ID_IGA_PEGASE = 16925\nVENDOR_ID_SYSTEMBERATUNG_AXEL_DUNKEL_GMBH = 16926\nVENDOR_ID_MLB_ASSOCIATES = 16927\nVENDOR_ID_MARK_SOUTH_WEST = 16928\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_MERCED = 16929\nVENDOR_ID_CAM_SECURITY_AND_CONNECTIONS_BV = 16930\nVENDOR_ID_SANDWELL_TECHNOLOGIES_INC = 16931\nVENDOR_ID_DICOM_GROUP = 16932\nVENDOR_ID_ALC_COMPUTERTECHNIK_GMBH = 16933\nVENDOR_ID_MARIAN_BRACINIK = 16934\nVENDOR_ID_ESPOO_VANTAA_INSTITUTE_OF_TECHNOLOGY = 16935\nVENDOR_ID_DATABAY_AG = 16936\nVENDOR_ID_E_WRIEDT = 16937\nVENDOR_ID_SENSATIONAL_AG = 16938\nVENDOR_ID_ADDIX_INTERNET_SERVICES_GMBH = 16939\nVENDOR_ID_CRYPTOGRAM_SA = 16940\nVENDOR_ID_OAKLEY_INC = 16941\nVENDOR_ID_TRX = 16942\nVENDOR_ID_OVERTURE_NETWORKS_INC_FORMERLY_CETERUS_NETWORKS = 16943\nVENDOR_ID_SEVEN_BLADES = 16944\nVENDOR_ID_GRUPO_DE_USUARIOS_DE_LINUX_DE_CANARIAS = 16945\nVENDOR_ID_LITCHFIELD_COMMUNICATIONS_INC = 16946\nVENDOR_ID_PROGRAM_LINE = 16947\nVENDOR_ID_RHODITECH = 16948\nVENDOR_ID_MOBIFON_SA = 16949\nVENDOR_ID_AOM_ACTIVE_ONLINE_MARKETING_GMBH = 16950\nVENDOR_ID_COGEMA_LA_HAGUE = 16951\nVENDOR_ID_EISODUS_NETWORKS_PVT_LTD = 16952\nVENDOR_ID_TECCO_SOFTWARE_ENTWICKLUNG_AG = 16953\nVENDOR_ID_SOFTWARE_POETRY_INC = 16954\nVENDOR_ID_MODULUS_SYSTEMS_GMBH_CO_KG = 16955\nVENDOR_ID_INBOXCOP_INC = 16956\nVENDOR_ID_FIONET_INTERNET_SERVICES = 16957\nVENDOR_ID_INSTITUTO_TECNOLGICO_Y_DE_ENERGAS_RENOVABLES_SA = 16958\nVENDOR_ID_CIPHER_SECURITY_SERVICES_INC = 16959\nVENDOR_ID_DARRON_NESBITT = 16960\nVENDOR_ID_VAISALA = 16961\nVENDOR_ID_SEVEN_LEVELS_CONSULTANTS_AB = 16962\nVENDOR_ID_INTUWAVE_LTD = 16963\nVENDOR_ID_NONAP = 16964\nVENDOR_ID_AUNA_TLC = 16965\nVENDOR_ID_KIFF_ANALYTICAL_LLC = 16966\nVENDOR_ID_UNIVERSITY_TEXAS_MEDICAL_BRANCH_GALVESTON = 16967\nVENDOR_ID_MAGNIFIRE = 16968\nVENDOR_ID_EYEBITS_STUDIOS = 16969\nVENDOR_ID_COUBLIS_LTD = 16970\nVENDOR_ID_LEMCHE_NET = 16971\nVENDOR_ID_DSL_TERMINAL_REMOTE_MANAGEMENT_ALLIANCE = 16972\nVENDOR_ID_CITS_GROUP_INC = 16973\nVENDOR_ID_WORLDMINGO = 16974\nVENDOR_ID_HORST_THIELE_MASCHINENBAU_HYDRAULISCHE_GERAETE_GMBH = 16975\nVENDOR_ID_SIDE_RESOURCES_DEVELOPMENT = 16976\nVENDOR_ID_ZWI1ZEK_BANKOW_POLSKICH = 16977\nVENDOR_ID_MEDICAL_INSIGHT_A_S = 16978\nVENDOR_ID_M2_INGENIERIE_ET_CONSEIL_SARL = 16979\nVENDOR_ID_JACOB_SUNDSTROM_INC = 16980\nVENDOR_ID_ITG_INC = 16981\nVENDOR_ID_MASARYK_UNIVERSITY = 16982\nVENDOR_ID_CINECA = 16983\nVENDOR_ID_EXACORE_CONSOLIDATED_SYSTEMS = 16984\nVENDOR_ID_GLOBAL_TECHNOLOGY_COLTD = 16985\nVENDOR_ID_FACTOR_SPE = 16986\nVENDOR_ID_ESKER_SA = 16987\nVENDOR_ID_THE_MANUFACTURERS_LIFE_INSURANCE_COMPANY = 16988\nVENDOR_ID_KISP_INC = 16989\nVENDOR_ID_PRINT_INC = 16990\nVENDOR_ID_STARSOFT = 16991\nVENDOR_ID_THE_HALIFAX_HERALD_LIMITED = 16992\nVENDOR_ID_NORSEC = 16993\nVENDOR_ID_KEY_CIRCLE = 16994\nVENDOR_ID_ELEGO_SOFTWARE_SOLUTIONS_GMBH = 16995\nVENDOR_ID_ABORIGINAL_SPORTS_AND_RECREATION_ASSOCIATION_OF_BC = 16996\nVENDOR_ID_INNOVATIVE_CONSULTANTS_LLC = 16997\nVENDOR_ID_INTOTO_INC = 16998\nVENDOR_ID_CORTINOVIS_SA = 16999\nVENDOR_ID_CENTRE_DE_TELECOMUNICACIONS_I_TI_DE_LA_GENERALITAT_DE_CATALUNYA = 17000\nVENDOR_ID_ACT_TECHNOLOGY_COLTD = 17001\nVENDOR_ID_COPSEY_COMMUNICATIONS_PROJECTS = 17002\nVENDOR_ID_UNIVERSITY_OF_DUNDEE = 17003\nVENDOR_ID_ISRAEL_INTERUNIVERSITY_COMPUTATION_CENTER = 17004\nVENDOR_ID_MANGROVE_SYSTEMS_INC = 17005\nVENDOR_ID_SPHERION = 17006\nVENDOR_ID_COOL_IT = 17007\nVENDOR_ID_CLEVER_AGE_SARL = 17008\nVENDOR_ID_IMOVE = 17009\nVENDOR_ID_HOPECOM_OPTIC_COMMUNICATION_LTD = 17010\nVENDOR_ID_METADATA_SYSTEMS_INC = 17011\nVENDOR_ID_ECAREME_TECHNOLOGIES_INC = 17012\nVENDOR_ID_GUARANTY_TECHNOLOGY_CORP = 17013\nVENDOR_ID_IZUMI_CYBER_NETWORKS_INC = 17014\nVENDOR_ID_MANAGEIT_GMBH_CO_KG = 17015\nVENDOR_ID_INFO_JURE_KNOWLEDGE_LTD = 17016\nVENDOR_ID_CYBERTECH_DE_COLOMBIA_LTD = 17017\nVENDOR_ID_SILIKONECOM = 17018\nVENDOR_ID_HEINRICH_BERNDES_HAUSHALTSTECHNIK_GMBHCO_KG = 17019\nVENDOR_ID_IRSN = 17020\nVENDOR_ID_UNIVERSITY_OF_CENTRAL_FLORIDA = 17021\nVENDOR_ID_AVISTA_LABS_INC = 17022\nVENDOR_ID_APPTERA = 17023\nVENDOR_ID_JACKSON_LOCAL_SCHOOL_DISTRICT = 17024\nVENDOR_ID_RETHER_NETWORKS_INC = 17025\nVENDOR_ID_DOTNSF_INC = 17026\nVENDOR_ID_YAAO = 17027\nVENDOR_ID_MARKETXSCOM_BV = 17028\nVENDOR_ID_BAUMER_IT_SERVICES_FORMERLY_0MODE = 17029\nVENDOR_ID_VELVEO = 17030\nVENDOR_ID_CLUSTER_LABS_GMBH = 17031\nVENDOR_ID_CITY_OF_HELSINKI = 17032\nVENDOR_ID_MEDICAL_UNIVERSITY_OF_SOUTH_CAROLINA = 17033\nVENDOR_ID_NHN_CORP = 17034\nVENDOR_ID_CERBERIAN_INC = 17035\nVENDOR_ID_ALISYS_SOFTWARE_SL = 17036\nVENDOR_ID_BRANNSTROMS_ELEKTRONIK_AB = 17037\nVENDOR_ID_FEDERAL_STATE_UNITARY_ENTERPRISE_PRODUCTION_COMPANY_START = 17038\nVENDOR_ID_VONTU_INC = 17039\nVENDOR_ID_INTEGRITS_CORPORATION = 17040\nVENDOR_ID_TELEDOMANI_INC = 17041\nVENDOR_ID_CONSULTORES_GLOBALES_ONLINE_SL = 17042\nVENDOR_ID_PC_REPAIR_AALESTRUP = 17043\nVENDOR_ID_RED_FIG_LTD = 17044\nVENDOR_ID_NETWORK_TECHNOLOGIES_GROUP = 17045\nVENDOR_ID_ERRORNET = 17046\nVENDOR_ID_EUROFRESHINC = 17047\nVENDOR_ID_ASHLAND_INC = 17048\nVENDOR_ID_EUROSPIDER_INFORMATION_TECHNOLOGY_AG = 17049\nVENDOR_ID_MEDIASONIC = 17050\nVENDOR_ID_LAST_MINUTE_NETWORK_LIMITED = 17051\nVENDOR_ID_A_PLUS_MARKETING = 17052\nVENDOR_ID_WWWSLAVELRU = 17053\nVENDOR_ID_SEVEROCESKA_PLYNARENSKA_AS = 17054\nVENDOR_ID_MOSHJAHAN_LTD = 17055\nVENDOR_ID_FUSION_NETWORK_SERVICES_CORP = 17056\nVENDOR_ID_VICTOR_SIERRA = 17057\nVENDOR_ID_NATIONAL_RADIO_ASTRONOMY_OBSERVATORY = 17058\nVENDOR_ID_COOKINGWISE = 17059\nVENDOR_ID_ZETEINNET = 17060\nVENDOR_ID_SHANGHAI_4U_NETWORK_TECHCOLTD = 17061\nVENDOR_ID_ARIELSERVICES = 17062\nVENDOR_ID_LIGHTSHIP_TELECOM_LLC = 17063\nVENDOR_ID_CSX_TECHNOLOGIES = 17064\nVENDOR_ID_ZIONS_BANCORPORATION = 17065\nVENDOR_ID_COLLABORATECH_INC = 17066\nVENDOR_ID_PADIMAX_LIMITED = 17067\nVENDOR_ID_JCAST_NETWORKS_CORP = 17068\nVENDOR_ID_LEUCOTRON_EQUIPAMENTOS_LTDA = 17069\nVENDOR_ID_HI_DE_HO = 17070\nVENDOR_ID_PRIME_ELECTRONICS_SATELLITICS_INC = 17071\nVENDOR_ID_TRANSGATE = 17072\nVENDOR_ID_UNIVERSITAETSKLINIKUM_FREIBURG = 17073\nVENDOR_ID_SENATSVERWALTUNG_FUER_GESUNDHEIT_SOZIALES_UND_VERBRAUCHERSCHUTZ_BERLIN = 17074\nVENDOR_ID_EDWIN_L_COX_SCHOOL_OF_BUSINESS = 17075\nVENDOR_ID_EXCELLENCE_HIGH_TECH_GEORGIA_LTD = 17076\nVENDOR_ID_GIRIT_PROJECTS_INC = 17077\nVENDOR_ID_INNOVATION_SOFTWARE_GROUP_LLC = 17078\nVENDOR_ID_APPIQ_INC = 17079\nVENDOR_ID_BETRAINED_BAUMGARTNER_KEG = 17080\nVENDOR_ID_MF_VAN_LOON = 17081\nVENDOR_ID_OREGON_UNIVERSITY_SYSTEM = 17082\nVENDOR_ID_COMPART_MEDICAL_SYSTEMS = 17083\nVENDOR_ID_HON_HAI_PRECISION_IND_CO_LTD = 17084\nVENDOR_ID_BEIJING_BU_TELECOM_TECH_COLTD = 17085\nVENDOR_ID_BIK_ASCHPURWIS_BEHRENS_GMBH = 17086\nVENDOR_ID_GRECO_INTERNATIONAL_AG = 17087\nVENDOR_ID_SICHUAN_WISESOFT_LTD = 17088\nVENDOR_ID_UNIVERSITT_PADERBORN_ZENTRUM_IT_DIENSTE = 17089\nVENDOR_ID_PACKETIZER_INC = 17090\nVENDOR_ID_CIPHIRE_LABS = 17091\nVENDOR_ID_MEDIARING_LIMITED = 17092\nVENDOR_ID_ELLEMEDIA_TECHNOLOGIES_LTD = 17093\nVENDOR_ID_BLUESLICE_NETWORKS_INC = 17094\nVENDOR_ID_MICROCHIP_TECHNOLOGY_INC = 17095\nVENDOR_ID_INVESCO_INSTITUTIONAL_FIXED_INCOME_GROUP = 17096\nVENDOR_ID_WELTEK_TECHNOLOGIES_CO_LTD = 17097\nVENDOR_ID_INNOMENTA_GMBH_CO_KG = 17098\nVENDOR_ID_TELLUSTECH_LTD = 17099\nVENDOR_ID_FABASOFT_RD_SOFTWARE_GMBH_CO_KG = 17100\nVENDOR_ID_INTERNETNU = 17101\nVENDOR_ID_BOROROS = 17102\nVENDOR_ID_BIZNET_INFORMATION_SYSTEMS_AND_CONSULTANCY = 17103\nVENDOR_ID_1_800_COMMUNICATIONS_INC = 17104\nVENDOR_ID_INSIGNIA_SOLUTIONS = 17105\nVENDOR_ID_GLOBNIX = 17106\nVENDOR_ID_THE_KONOPKA_CORPORATION = 17107\nVENDOR_ID_VINCI_SYSTEMS_INC = 17108\nVENDOR_ID_CHOTARO_CO = 17109\nVENDOR_ID_INSTITUT_DE_RECHERCHE_POUR_LE_DVELOPPEMENT_IRD = 17110\nVENDOR_ID_JMSE = 17111\nVENDOR_ID_AXSTONE_CO_LTD = 17112\nVENDOR_ID_EVONET_COMPUTER_NETWORK_EVOLUTION_GMBH = 17113\nVENDOR_ID_KEYRUS_SA = 17114\nVENDOR_ID_D_APP_X_CORPORATION = 17115\nVENDOR_ID_GMA_COMMUNICATION_MANUFACTURING_MARKETING_1991_LTD = 17116\nVENDOR_ID_ADVANTAGE_SALES_MARKETING = 17117\nVENDOR_ID_BYRAM_HEALTHCARE_CENTERS_INC = 17118\nVENDOR_ID_OCTETSTRING_INC = 17119\nVENDOR_ID_TEAM_COOL_NETWORKS = 17120\nVENDOR_ID_GERONIMO_GROUP_INC = 17121\nVENDOR_ID_APOGENT_TECHNOLOGIES_INC = 17122\nVENDOR_ID_TAVATA_SOFTWARE_CORPORATION = 17123\nVENDOR_ID_PSYCAT_GROUP = 17124\nVENDOR_ID_EZE_CASTLE_INTEGRATION_INC = 17125\nVENDOR_ID_NOVA_ENGINEERING_INC = 17126\nVENDOR_ID_KILOWATT_NETWORKING_INC = 17127\nVENDOR_ID_MG2ORG = 17128\nVENDOR_ID_ZACLICK_COLTD = 17129\nVENDOR_ID_ANTIQUITY_BOOKS = 17130\nVENDOR_ID_RECTIFIER_TECHNOLOGIES_PACIFIC_PTY_LTD = 17131\nVENDOR_ID_SHANGHAI_DARE_OPTO_ELECTRONIC_COMMUNICATION_COLTD = 17132\nVENDOR_ID_ILWOO_DATA_TECHNOLOGY_COLTD = 17133\nVENDOR_ID_GOOD_HEALTH_NETWORK_INC = 17134\nVENDOR_ID_RAAIJMAKERS = 17135\nVENDOR_ID_PLG_AG = 17136\nVENDOR_ID_GRADSOFT_LTD = 17137\nVENDOR_ID_INHOLLAND_UNIVERSITIES = 17138\nVENDOR_ID_INTERNET_GOLD = 17139\nVENDOR_ID_VERSATEL_NEDERLAND_BV = 17140\nVENDOR_ID_INCENTI_SA = 17141\nVENDOR_ID_STATIC_BYTES = 17142\nVENDOR_ID_GEORG_HEWEGH_OBERSCHULE = 17143\nVENDOR_ID_STATE_UNIVERSITY_OF_NEW_YORK_AT_STONY_BROOK = 17144\nVENDOR_ID_RUSCH_CONSULTANCY_BV = 17145\nVENDOR_ID_UVHC = 17146\nVENDOR_ID_EASTERN_ILLINOIS_UNIVERSITY = 17147\nVENDOR_ID_IBURST_FORUM = 17148\nVENDOR_ID_LODESTAR_TECHNOLOGY_LTD = 17149\nVENDOR_ID_SIMATIKA = 17150\nVENDOR_ID_COGNICA_LTD = 17151\nVENDOR_ID_CREAMEN = 17152\nVENDOR_ID_UNIVERSITY_OF_CONNECTICUT = 17153\nVENDOR_ID_KITTREDGE_ARCHERY_CO_INC = 17154\nVENDOR_ID_VOICEAGE_CORPORATION = 17155\nVENDOR_ID_ZONE_LABS_INC = 17156\nVENDOR_ID_CHENGDU_RUNWANG_TCHNOLOGY_CO_LTD = 17157\nVENDOR_ID_LAURASIA_COMPUTING = 17158\nVENDOR_ID_HENRI_MAIRE_SA = 17159\nVENDOR_ID_LUND_UNIVERSITY_HOSPITAL = 17160\nVENDOR_ID_COVISINT_LLC = 17161\nVENDOR_ID_AIRVERSAL_TECHNOLOGY_INC = 17162\nVENDOR_ID_RIVERBED_TECHNOLOGY_INC = 17163\nVENDOR_ID_CALLCAST_INC = 17164\nVENDOR_ID_ADVANTEST_RD_CENTER_INC = 17165\nVENDOR_ID_LOUISIANA_STATE_UNIVERSITY_AND_AM_COLLEGE = 17166\nVENDOR_ID_DAOTEC_LTD = 17167\nVENDOR_ID_CENTURY_21_MIKE_BOWMAN_INC = 17168\nVENDOR_ID_DIABLOTIN = 17169\nVENDOR_ID_UNIVERSIT_HENRI_POINCAR_NANCY_1 = 17170\nVENDOR_ID_QINDEL = 17171\nVENDOR_ID_MELCO_INTERNATIONAL_DEVELOPMENT_LTD = 17172\nVENDOR_ID_SQUEEKY_CLEAN = 17173\nVENDOR_ID_IRIDIUM_SYSTEMS_HANGZHOU_LIMITED = 17174\nVENDOR_ID_SHANGHAI_LETEL_COMMUNICATIONS_CO_LTD = 17175\nVENDOR_ID_PERM_STATE_PEDAGOGICAL_UNIVERSITY = 17176\nVENDOR_ID_TIS_INC = 17177\nVENDOR_ID_VERA_AUTONOOM_PROVINCIEBEDRIJF = 17178\nVENDOR_ID_DIAZ = 17179\nVENDOR_ID_ALTIBASE = 17180\nVENDOR_ID_DANTEK_COMPUTER_SYSTEMS_INC = 17181\nVENDOR_ID_CCC_DATA_OY = 17182\nVENDOR_ID_YANG_MEI_TECHNOLOGY_CO_LTD = 17183\nVENDOR_ID_PROLAN = 17184\nVENDOR_ID_RICHEMONT_GROUP = 17185\nVENDOR_ID_MEDIA_LINKS_COLTD = 17186\nVENDOR_ID_ONARO_INC = 17187\nVENDOR_ID_GIGACLUE = 17188\nVENDOR_ID_INGRAFTED_SOFTWARE_INC = 17189\nVENDOR_ID_FULCRUM_MICROSYSTEMS_INC = 17190\nVENDOR_ID_UNIVERSIDAD_DE_LA_LAGUNA = 17191\nVENDOR_ID_EMPRISA_NETWORKS = 17192\nVENDOR_ID_DBC_DIGITAL_BROADCAST_CONSULTING_GMBH = 17193\nVENDOR_ID_WHOOPY_ENGINEERING_LTD = 17194\nVENDOR_ID_SECURESOFT_SYSTEMS_INC = 17195\nVENDOR_ID_CACHELOGIC_LTD = 17196\nVENDOR_ID_RELICORE_INC = 17197\nVENDOR_ID_MARTINSKAFTEDK = 17198\nVENDOR_ID_MINISTRY_OF_FISHERIES_NZ = 17199\nVENDOR_ID_OPTUS_INTERNET_ENGINEERING = 17200\nVENDOR_ID_DIGITAL_ITEM = 17201\nVENDOR_ID_NEC_INFORMATEC_SYSTEMSLTD = 17202\nVENDOR_ID_PEKAREK_HANDELSGESMBH = 17203\nVENDOR_ID_IIM_CORPORATION = 17204\nVENDOR_ID_ARPENT_ENTERPRISES = 17205\nVENDOR_ID_OPEN_STOCK_COMPANY_OSKOL_ELECTROMETALLURGICAL_KOMBINAT = 17206\nVENDOR_ID_CLOVERLEAF_COMMUNICATIONS_INC = 17207\nVENDOR_ID_FA_NEA_SJHOLM = 17208\nVENDOR_ID_STRATEGIC_SYSTEMS_CONSULTANTS_LTD = 17209\nVENDOR_ID_GZS_GESELLSCHAFT_FUER_ZAHLUNGSSYSTEME_MBH = 17210\nVENDOR_ID_POTRONICS_SP_Z_OO = 17211\nVENDOR_ID_AWETA_BV = 17212\nVENDOR_ID_DAY_SCOM = 17213\nVENDOR_ID_NETWORK_DESIGNERS_LTD = 17214\nVENDOR_ID_INSTITUTE_OF_LINGUISTIC_STUDIES = 17215\nVENDOR_ID_TRIPLANET_PARTNERS_LLC = 17216\nVENDOR_ID_UNIVERSITY_OF_RICHMOND = 17217\nVENDOR_ID_UNION_INTERNATIONALE_DES_CHEMINS_DE_FER = 17218\nVENDOR_ID_NSTEL_INC = 17219\nVENDOR_ID_EBENX_INC = 17220\nVENDOR_ID_CHBE_UBC = 17221\nVENDOR_ID_SIERHUIS_DIGITALE_DIENSTEN = 17222\nVENDOR_ID_CENA_SALVATORE = 17223\nVENDOR_ID_NEWBURY_NETWORKS = 17224\nVENDOR_ID_ISPI_OF_LINCOLN_INC = 17225\nVENDOR_ID_BC5_TECHNOLOGIES_INC = 17226\nVENDOR_ID_DMP_INITIATIVES = 17227\nVENDOR_ID_KOMMANDO = 17228\nVENDOR_ID_MIRACLE_GROUP_LTD = 17229\nVENDOR_ID_UNIQMINDS_LTD = 17230\nVENDOR_ID_OTTO_UK = 17231\nVENDOR_ID_PANNOCOM_LTD = 17232\nVENDOR_ID_ICODEX_SOFTWARE_AG = 17233\nVENDOR_ID_ET_ENTERPRISE_TECHNOLOGIES_SRL = 17234\nVENDOR_ID_2E_SYSTEMS_GMBH = 17235\nVENDOR_ID_SHOUT_TELECOMS_LIMITED = 17236\nVENDOR_ID_SPESISTEMI_E_PROGETTI_ELETTRONICI_SAS_DI_PPRANDINI_C = 17237\nVENDOR_ID_NSTEL_INC_2 = 17238\nVENDOR_ID_PLAN_B_EMAIL_SERVICES_LLC = 17239\nVENDOR_ID_SPREAD_TELEINFORMTICA_LTDA = 17240\nVENDOR_ID_FEDERAL_TRADE_COMMISSION = 17241\nVENDOR_ID_MISSION_VI = 17242\nVENDOR_ID_WORLD_ACCESS_CANADA_INC = 17243\nVENDOR_ID_BRITEACE_ENTERPRISE_PTE_LTD = 17244\nVENDOR_ID_GENENTECH_INC = 17245\nVENDOR_ID_FREESNMP = 17246\nVENDOR_ID_SBC_INTERNET_SERVICES = 17247\nVENDOR_ID_GEMSTONE_COMMUNICATIONS_INC = 17248\nVENDOR_ID_VAN_COMPANY_LTD = 17249\nVENDOR_ID_YORE_ELEKTRONIK_YAYIMCILIK_AS = 17250\nVENDOR_ID_WERMSPOWKE = 17251\nVENDOR_ID_MS_GLOBAL_CONSULTING_GMBH = 17252\nVENDOR_ID_ARCADA_POLYTECHNIC = 17253\nVENDOR_ID_GOADUS = 17254\nVENDOR_ID_VIDYATEL_LTD = 17255\nVENDOR_ID_CL_NET_SRO = 17256\nVENDOR_ID_INITIAL_SECURITY_LIMITED = 17257\nVENDOR_ID_DRQ_SP_Z_OO = 17258\nVENDOR_ID_MANEX = 17259\nVENDOR_ID_NUMINATEK_CO = 17260\nVENDOR_ID_RJWARE_INC = 17261\nVENDOR_ID_DEVONSHIRE_GROUP_INC = 17262\nVENDOR_ID_ALPES_TEAM = 17263\nVENDOR_ID_MOUNT_CLEMENS_GENERAL_HOSPITAL = 17264\nVENDOR_ID_ESCAPE_OE = 17265\nVENDOR_ID_CALIFORNIA_INTERNET_INC = 17266\nVENDOR_ID_HITACHI_COMPUTER_PRODUCTS_EUROPE_SAS = 17267\nVENDOR_ID_ABB_PROCESS_ANALYTICS = 17268\nVENDOR_ID_HANSA_JSC = 17269\nVENDOR_ID_COMCAST_CORPORATION = 17270\nVENDOR_ID_SUNSHINE_VILLAGE_SKI_SNOWBOARD_RESORT = 17271\nVENDOR_ID_AKASHIC_INC = 17272\nVENDOR_ID_THE_RABBITHOLE_ORG = 17273\nVENDOR_ID_NEVIS_NETWORKS_INC = 17274\nVENDOR_ID_MICROBIT = 17275\nVENDOR_ID_COLEGIO_DE_REGISTRADORES_DE_LA_PROPIEDAD_Y_MERCANTILES_DE_ESPAA = 17276\nVENDOR_ID_TUI_NEDERLAND_NV = 17277\nVENDOR_ID_IZB_SOFT = 17278\nVENDOR_ID_STOWE_HOLDINGS_PTY_LTD = 17279\nVENDOR_ID_FADESA_INMOBILIARIA = 17280\nVENDOR_ID_LUTHER_COLLEGE = 17281\nVENDOR_ID_ABHAI_INC = 17282\nVENDOR_ID_YACME_SRL = 17283\nVENDOR_ID_UNICOM_UNIVERSAL_COMPUTER_COMMUNICATION_SPOL_S_RO = 17284\nVENDOR_ID_DOBS = 17285\nVENDOR_ID_STEUERUNGS_NETZWERKTECHNIK = 17286\nVENDOR_ID_PACIFIC_LIFE = 17287\nVENDOR_ID_VICSUPER = 17288\nVENDOR_ID_LINUXHQ = 17289\nVENDOR_ID_KEY_DIGITAL_SOLUTIONS_LTD = 17290\nVENDOR_ID_MITHRA_BIODINDUSTRY_CO_LTD = 17291\nVENDOR_ID_NXN_SOFTWARE_AG = 17292\nVENDOR_ID_DAVIDRLEE = 17293\nVENDOR_ID_AGILE_TEAMWORK_INC = 17294\nVENDOR_ID_WESTNOBLE = 17295\nVENDOR_ID_FOURTH_CORNER_SYSTEMS = 17296\nVENDOR_ID_SINE_NOMINE_ASSOCIATES = 17297\nVENDOR_ID_BLUEWATER_TECHNOLOGIES_INC = 17298\nVENDOR_ID_VMOKSHA_TECHNOLOGIES_PRIVATE_LIMITED = 17299\nVENDOR_ID_AXXIUS_BV = 17300\nVENDOR_ID_ALLSERVE_AUTOMATISERING_BV = 17301\nVENDOR_ID_ICONOLOGY_LTD = 17302\nVENDOR_ID_PARAMOUNT_PICTURES = 17303\nVENDOR_ID_LAYER_7_TECHNOLOGIES_INC = 17304\nVENDOR_ID_AERAS_NETWORKS = 17305\nVENDOR_ID_ARMENIAN_E_SCIENCE_FOUNDATION_ARMESFO = 17306\nVENDOR_ID_TRIBUNAL_REGIONAL_DO_TRABALHO_DA_15_REGIO = 17307\nVENDOR_ID_DIGIMEDWORX = 17308\nVENDOR_ID_SAUDI_ARABIAN_MONETARY_AGENCY_SAMA = 17309\nVENDOR_ID_VANQUISH_INTERNATIONAL_LTD = 17310\nVENDOR_ID_MYLLYKOSKI_CORP = 17311\nVENDOR_ID_SHIZUOKA_SYSTEM_TECHNOLOGY = 17312\nVENDOR_ID_RATIODATA_GMBH = 17313\nVENDOR_ID_SOLTIM = 17314\nVENDOR_ID_ETHERADDRESSCOM = 17315\nVENDOR_ID_PEORIA_CHRISTIAN_SCHOOL = 17316\nVENDOR_ID_MASSIVEEGO = 17317\nVENDOR_ID_MEDIA5_CORPORATION_FORMERLY_M5T_CENTRE_DEXCELLENCE_EN_TELECOM_INC = 17318\nVENDOR_ID_JC_COMPUTING = 17319\nVENDOR_ID_JM_CROWTHER_LTD = 17320\nVENDOR_ID_CALPINE = 17321\nVENDOR_ID_SOFTLAND = 17322\nVENDOR_ID_DATATEKNISKA_BYRN = 17323\nVENDOR_ID_YDI_WIRELESS_INC = 17324\nVENDOR_ID_BABASTIK = 17325\nVENDOR_ID_AC_CAMERFIRMA_SA = 17326\nVENDOR_ID_CITY_OF_NORTHGLENN = 17327\nVENDOR_ID_IMENTA_SWEDEN_AB = 17328\nVENDOR_ID_SCHOOL_OF_INFORMATION_TECHNOLOGY_UNIVERSITI_UTARA_MALAYSIA = 17329\nVENDOR_ID_ZETTA_SYSTEMS_INC = 17330\nVENDOR_ID_30SAN_INFORMATION_SYSTEM_COLTD = 17331\nVENDOR_ID_PETE_ATTKINS_ENGINEERING_LTD = 17332\nVENDOR_ID_CRITICAL_NETWORKS_INC = 17333\nVENDOR_ID_DN_SOLUTIONS = 17334\nVENDOR_ID_UPM_KYMMENE_CORPORATION = 17335\nVENDOR_ID_BANK_OF_RUSSIA = 17336\nVENDOR_ID_SOLACE_SYSTEMS_INC = 17337\nVENDOR_ID_IBS_TECHNOLOGY_SERVICES = 17338\nVENDOR_ID_SAFA_GALENICA_SA = 17339\nVENDOR_ID_MICROTEST_LTD = 17340\nVENDOR_ID_FONNER_CONSULTING = 17341\nVENDOR_ID_DANSKE_GYMNASIEELEVERS_SAMMENSLUTNING = 17342\nVENDOR_ID_EDULA = 17343\nVENDOR_ID_OFSET = 17344\nVENDOR_ID_FUSIONONE_INC = 17345\nVENDOR_ID_ALIENFORCEIT = 17346\nVENDOR_ID_HILTI_CORPORATION = 17347\nVENDOR_ID_USTC_E_BUSINESS_TECHNOLOGY_COMPANY = 17348\nVENDOR_ID_DELTA_NV = 17349\nVENDOR_ID_ONRELAY_LTD = 17350\nVENDOR_ID_SIMMONS_COLLEGE = 17351\nVENDOR_ID_FRANCISSCOTT_COMMUNICATIONS_LLC = 17352\nVENDOR_ID_VISSIM_AS = 17353\nVENDOR_ID_ZONE_TRADING_PARTNERS = 17354\nVENDOR_ID_CIRRUS_MULTIMEDIA_LIMITED = 17355\nVENDOR_ID_RISKMETRICS_GROUP_INC = 17356\nVENDOR_ID_DERKSIT = 17357\nVENDOR_ID_FULFORD_CONSULTING_LTD = 17358\nVENDOR_ID_NET9 = 17359\nVENDOR_ID_TJ_COMPUTER_SYSTEMS = 17360\nVENDOR_ID_INFOSCIENCE_CORPORATION = 17361\nVENDOR_ID_ASIA_PACIFIC_BIOINFORMATICS_NETWORK_APBIONET = 17362\nVENDOR_ID_SANYO_DDP_BU = 17363\nVENDOR_ID_SITELI = 17364\nVENDOR_ID_SISSA_ISAS_SCUOLA_INTERNAZIONALE_SUPERIORE_DI_STUDI_AVANZATI = 17365\nVENDOR_ID_TORBAY_COUNCIL = 17366\nVENDOR_ID_GREP_AS = 17367\nVENDOR_ID_PIFAUT = 17368\nVENDOR_ID_SUSTAINABLE_DEVELOPMENT_NETWORKING_PROGRAMME = 17369\nVENDOR_ID_ONRELAY_LTD_2 = 17370\nVENDOR_ID_4DOTNET_OHG = 17371\nVENDOR_ID_IFONI_CELLULAR_SERVICES = 17372\nVENDOR_ID_IT_WATCHDOGS_INC = 17373\nVENDOR_ID_CLEARFIELD_KNOWLEDGE_SOLUTIONS_LTD = 17374\nVENDOR_ID_IMAGE_ANALYSISINC = 17375\nVENDOR_ID_INTELCOM_SAN_MARINO_SPA = 17376\nVENDOR_ID_AESYS_SPA = 17377\nVENDOR_ID_INTERLINK_SOFTWARE_SERVICES_LTD = 17378\nVENDOR_ID_UNIVERSITY_OF_APPLIED_SCIENCES_WOLFENBUETTEL = 17379\nVENDOR_ID_SPAZIO_ZEROUNO_SPA = 17380\nVENDOR_ID_THE_KINKAID_SCHOOL = 17381\nVENDOR_ID_VAI_BV = 17382\nVENDOR_ID_EASY_SOFTWARE_2 = 17383\nVENDOR_ID_CONTEMPORARY_CONTROL_SYSTEMS_INC = 17384\nVENDOR_ID_APPRISS_INC = 17385\nVENDOR_ID_ICANSP_INC = 17386\nVENDOR_ID_FRONTIER_FINANCIAL = 17387\nVENDOR_ID_ALLEN_SYSTEMS_GROUP_INC = 17388\nVENDOR_ID_CORE_NAP_LP = 17389\nVENDOR_ID_FAMILY_VIDEO = 17390\nVENDOR_ID_NOSE_APPLIED_INTELLIGENCE_AG = 17391\nVENDOR_ID_ABUCCO_TECHNOLOGIES_INC = 17392\nVENDOR_ID_ALLEN_SYSTEMS_GROUP_INC_2 = 17393\nVENDOR_ID_BRAINBOW_EDV_BERATUNG_GMBH = 17394\nVENDOR_ID_BEIJING_FOUNDER_ELECTRONIC_COLTD = 17395\nVENDOR_ID_SAPURA_ADVANCE_SYSTEMS_SDN_BHD = 17396\nVENDOR_ID_BVE_DES_KANTONS_BERN = 17397\nVENDOR_ID_HBHARD_SPOL_SRO = 17398\nVENDOR_ID_AKIT_LTD = 17399\nVENDOR_ID_TOURISLINE_AG = 17400\nVENDOR_ID_LANDS_END_INC = 17401\nVENDOR_ID_SEVIS_SYSTEMS_INC = 17402\nVENDOR_ID_OKLAHOMA_DEPARTMENT_OF_CAREER_AND_TECHNOLOGY_EDUCATION = 17403\nVENDOR_ID_WEBUNDCO_GMBH_COKG = 17404\nVENDOR_ID_TELECOMMUNICATIONS_INDUSTRY_ASSOCIATION_TR8DOT5 = 17405\nVENDOR_ID_HITS = 17406\nVENDOR_ID_OMEGAWARE_SYSTEMS_LTD = 17407\nVENDOR_ID_HICOM_COMUNICAO_INTEGRADA_LTDA = 17408\nVENDOR_ID_NATIONAL_STANDARDIZATION_COMMITTEE_OF_RADIO_TELEVISION = 17409\nVENDOR_ID_SOPRA_GROUP = 17410\nVENDOR_ID_NEWSKY_SOFTWARE = 17411\nVENDOR_ID_GATECONNECT_TECHNOLOGIES_GMBH = 17412\nVENDOR_ID_MINISTERIO_DEL_INTERIOR_ESPAA = 17413\nVENDOR_ID_VZW_CDS = 17414\nVENDOR_ID_PUCRS = 17415\nVENDOR_ID_ROOT_IT = 17416\nVENDOR_ID_PORTIVA_CORPORATION = 17417\nVENDOR_ID_MAHANAXAR_NETWORKS = 17418\nVENDOR_ID_LINCOLN_INVESTMENT_PLANNING_INC = 17419\nVENDOR_ID_DIGIPOWER_MANUFACTURING_INC = 17420\nVENDOR_ID_HPITAL_DE_LA_VILLE_DESCH_SUR_ALZETTE = 17421\nVENDOR_ID_REAL_ENTERPRISE_SOLUTIONS_DEVELOPMENT_BV = 17422\nVENDOR_ID_MULTIDATA_GESELLSCHAFT_FR_DATENTECHNIK_UND_INFORMATIK_MBH = 17423\nVENDOR_ID_CHART_PILOT_LTD = 17424\nVENDOR_ID_ILINK_KOMMUNIKATIONSSYSTEME_GMBH = 17425\nVENDOR_ID_SEGACOM_INC = 17426\nVENDOR_ID_ABYZ_INFORMTICA_LTDA = 17427\nVENDOR_ID_WEBDESIGN_BK = 17428\nVENDOR_ID_MICHAEL_TELECOM_AG = 17429\nVENDOR_ID_TCL_NETWORK_EQUIPMENT_SHENZEHN_CO_LTD = 17430\nVENDOR_ID_SHENZHEN_SDG_INFORMATION_COLTD_STEC_TELECOM_BRANCH = 17431\nVENDOR_ID_GEORGIA_PERIMETER_COLLEGE = 17432\nVENDOR_ID_PIEAS_EDUCATIONAL_INSTITUTE = 17433\nVENDOR_ID_THERALYS = 17434\nVENDOR_ID_BEAC = 17435\nVENDOR_ID_WORLIGHT_INTERNATIONAL = 17436\nVENDOR_ID_INSURANCE_CORPORATION_OF_BRITISH_COLUMBIA = 17437\nVENDOR_ID_NOVANNET_LLC = 17438\nVENDOR_ID_PANASONIC_AVIONICS_CORPORATION_FORMERLY_MATSUSHITA_AVIONICS_SYSTEMS_CORPORATION = 17439\nVENDOR_ID_OMNIPOD_INC = 17440\nVENDOR_ID_UNHOLYORG = 17441\nVENDOR_ID_ITER8_INC = 17442\nVENDOR_ID_GERD_KOSLOWSKI = 17443\nVENDOR_ID_WREVAKNET = 17444\nVENDOR_ID_FEAS_VOF = 17445\nVENDOR_ID_STEFAN_DREES = 17446\nVENDOR_ID_STATE_MACHINE = 17447\nVENDOR_ID_FABRICE_CO = 17448\nVENDOR_ID_KLS_AIR_EXPRESS_INC = 17449\nVENDOR_ID_WFWORG = 17450\nVENDOR_ID_UNASSIGNED_21 = 17451\nVENDOR_ID_VISY_INDUSTRIES_HOLDINGS_PTY_LTD = 17452\nVENDOR_ID_BILLION_ELECTRIC_CO_LTD = 17453\nVENDOR_ID_INTEGURU_INC = 17454\nVENDOR_ID_K_BEST_TECHNOLOGY_INC = 17455\nVENDOR_ID_JIGSAW_SYSTEMS = 17456\nVENDOR_ID_UTI_WORLDWIDE = 17457\nVENDOR_ID_CONNECT_INTERNET_SOLUTIONS_PTY_LTD = 17458\nVENDOR_ID_MIBTREE_LTD = 17459\nVENDOR_ID_REVELANT_TECHNOLOGIES = 17460\nVENDOR_ID_PRYDE_SYSTEMS_AND_SOFTWARE = 17461\nVENDOR_ID_AKAMAI_TECHNOLOGIES_INC = 17462\nVENDOR_ID_DEMARC_SECURITY_INC = 17463\nVENDOR_ID_O1_COMMUNICATIONS = 17464\nVENDOR_ID_TRUSYSTEMS_INC = 17465\nVENDOR_ID_WOOJU_COMMUNICATIONS_COLTD = 17466\nVENDOR_ID_GAMERS_VALHALLA_PTY_LTD = 17467\nVENDOR_ID_ICONAG_AG = 17468\nVENDOR_ID_BIOWISDOM_LTD = 17469\nVENDOR_ID_STRLFORS_AB = 17470\nVENDOR_ID_ACTONA_TECHNOLOGIES_INC = 17471\nVENDOR_ID_TETRAPLEX_LTD = 17472\nVENDOR_ID_TELLUCE_CORPORATION = 17473\nVENDOR_ID_CRM_INFORMATIK_GMBH = 17474\nVENDOR_ID_GENETEC_INFORMATION_SYSTEMS = 17475\nVENDOR_ID_V_ONE_CORPORATION = 17476\nVENDOR_ID_TRAILBLAZER_SYSTEMS_INC = 17477\nVENDOR_ID_NEXADESIC_INC = 17478\nVENDOR_ID_ONE_UNIFIED = 17479\nVENDOR_ID_CHOICE_COMMUNICATIONS = 17480\nVENDOR_ID_LOGIC_FUSION = 17481\nVENDOR_ID_OGMIOSCA = 17482\nVENDOR_ID_HONG_KONG_SCHOOL_NET_LTD = 17483\nVENDOR_ID_ADYORON_INTELLIGENT_SYSTEMS_LTD = 17484\nVENDOR_ID_HIERWEB = 17485\nVENDOR_ID_EDS_DEUTSCHLAND_GMBH = 17486\nVENDOR_ID_MANCHESTER_AIRPORT = 17487\nVENDOR_ID_GENERAL_TOUCH_TECHNOLOGY_COLTD = 17488\nVENDOR_ID_CURTIS_CONSULTING_LLC = 17489\nVENDOR_ID_DM_TRUCKING = 17490\nVENDOR_ID_BARIX_AG = 17491\nVENDOR_ID_NORTHCONET = 17492\nVENDOR_ID_HALLIBURTON_COMPANY = 17493\nVENDOR_ID_MATTHIAS_RATH_INC = 17494\nVENDOR_ID_GARDEL_SOFTWARE = 17495\nVENDOR_ID_CANADIAN_BROADCASTING_CORPORATION = 17496\nVENDOR_ID_TALLINN_SCHOOL_NO_21 = 17497\nVENDOR_ID_KOMMUNALE_DATENVERARBEITUNG_OLDENBURG = 17498\nVENDOR_ID_PACKETSURGE = 17499\nVENDOR_ID_GEORGIA_GWINNETT_COLLEGE = 17500\nVENDOR_ID_DRAKE_UNIVERSITY = 17501\nVENDOR_ID_NEWFIELD_AUTOMATION = 17502\nVENDOR_ID_TECHFORGE_SOFTWARE = 17503\nVENDOR_ID_SECURITY_WIZARD = 17504\nVENDOR_ID_WAMIN_OPTOCOMM_MFGCORPORATION = 17505\nVENDOR_ID_EULERIAN_TECHNOLOGIES_SARL = 17506\nVENDOR_ID_OMNIDATA = 17507\nVENDOR_ID_SOTRANGE_TRANSPORTES_RODOVIRIOS_LTDA = 17508\nVENDOR_ID_VERSATEL_NETWORKS_INC = 17509\nVENDOR_ID_GOLDENHOPE = 17510\nVENDOR_ID_XTREMEX_CORPORATION = 17511\nVENDOR_ID_FLINDERS_UNIVERSITY = 17512\nVENDOR_ID_RVA = 17513\nVENDOR_ID_FDF_FRIVILLIGT_DRENGE_OG_PIGE_FORBUND = 17514\nVENDOR_ID_BNSF_RAILWAY_INC = 17515\nVENDOR_ID_NIGHTHAWK_RADIOLOGY_SERVICES = 17516\nVENDOR_ID_CLEMENTI_SOFTWARE = 17517\nVENDOR_ID_COMBA_TELECOM_SYSTEMGUANG_ZHOU_LTD = 17518\nVENDOR_ID_INTELITRAC_INC = 17519\nVENDOR_ID_EASTON_TECHNOLOGIES_INC = 17520\nVENDOR_ID_REALEAST_NETWORKS = 17521\nVENDOR_ID_OZITEM = 17522\nVENDOR_ID_FIBERLAN_GMBH = 17523\nVENDOR_ID_FERRARI_ELECTRONI_AG = 17524\nVENDOR_ID_AMSTERDAM_INTERNET_EXCHANGE_BV = 17525\nVENDOR_ID_SYMENTIS_GMBH = 17526\nVENDOR_ID_FORMWARE_GMBH = 17527\nVENDOR_ID_KMS_INTERNET_SOLUTION_PROVIDERS_LTD = 17528\nVENDOR_ID_FELDTECH = 17529\nVENDOR_ID_CHERNIGOV_STATE_TECHNOLOGICAL_UNIVERSITY = 17530\nVENDOR_ID_HENRICO_COUNTY_PUBLIC_SCHOOLS = 17531\nVENDOR_ID_BSI_INFORMATICA_LTDA = 17532\nVENDOR_ID_ASSOCIATION_KAZAR = 17533\nVENDOR_ID_OPTELECOM_INC = 17534\nVENDOR_ID_EGT_INC = 17535\nVENDOR_ID_TELENITY_INC = 17536\nVENDOR_ID_FLORENCE_PUBLIC_SCHOOL_DISTRICT_ONE = 17537\nVENDOR_ID_VILLAGE_GRILLE_FAMILY_DINER = 17538\nVENDOR_ID_MXC_SOFTWARE = 17539\nVENDOR_ID_TB_SOLUTIONS_ADVANCED_TECHNOLOGIES_SL = 17540\nVENDOR_ID_LAMDA_INC = 17541\nVENDOR_ID_TFS_TECHNOLOGY_INC = 17542\nVENDOR_ID_ADUNEO = 17543\nVENDOR_ID_BSP_PARTNERS_GMBH = 17544\nVENDOR_ID_WIREFREE_INNOVISION_PVT_LTD = 17545\nVENDOR_ID_MAGNO_COMUNICACOES_LTDA = 17546\nVENDOR_ID_CENTRE_FOR_GOOD_GOVERNANCE = 17547\nVENDOR_ID_AIR2WEB_INC = 17548\nVENDOR_ID_LOGICLIBRARY_INC = 17549\nVENDOR_ID_TRUE_BLADE_SYSTEMS_INC = 17550\nVENDOR_ID_KMART_CORPORATION = 17551\nVENDOR_ID_NKI_AVL = 17552\nVENDOR_ID_TELEFONICA_DATA_COLOMBIA_SA = 17553\nVENDOR_ID_PODI_THE_DIGITAL_PRINTING_INITIATIVE = 17554\nVENDOR_ID_WEBSTER_UNIVERSITY = 17555\nVENDOR_ID_MAXINA_GMBH = 17556\nVENDOR_ID_TOKYO_WOMANS_CHRISTIAN_UNIVERSITY = 17557\nVENDOR_ID_MOVEO_SYSTEMY_TELEINFORMATYCZNE = 17558\nVENDOR_ID_THE_ART_INSTITUTE_OF_CHICAGO = 17559\nVENDOR_ID_NETFORYOU_COLTD = 17560\nVENDOR_ID_CLINK = 17561\nVENDOR_ID_EXPECT_TECHNOLOGY = 17562\nVENDOR_ID_ENCODE_SA = 17563\nVENDOR_ID_WWWPORTOCERVOCC = 17564\nVENDOR_ID_RURAL_SERVICIOS_INFORMTICOS_S_C = 17565\nVENDOR_ID_EFG_EUROBANK_ERGASIAS_AE = 17566\nVENDOR_ID_CERTIMAIL_SA = 17567\nVENDOR_ID_SLAT_SA = 17568\nVENDOR_ID_SCHRANZHOFER_DIAS = 17569\nVENDOR_ID_IFS_AUDIOVISUALS = 17570\nVENDOR_ID_GLENSOUND_ELECTRONICS_LTD = 17571\nVENDOR_ID_MAINFRAME_OY = 17572\nVENDOR_ID_SECRETARIA_DAS_FINANAS_DO_ESTADO_DA_PARABA = 17573\nVENDOR_ID_OXFORD_MICROSYSTEMS = 17574\nVENDOR_ID_LEBENSHILFE_NIEDEROESTERREICH = 17575\nVENDOR_ID_MAHALINGAM_CO = 17576\nVENDOR_ID_RALF_BISGES_INFORMATIONSTECHNIK = 17577\nVENDOR_ID_BERLITZ_INTERNATIONAL_INC = 17578\nVENDOR_ID_GROOVE_MEDIA = 17579\nVENDOR_ID_TELEFONICA_DATA_COLOMBIA_SA_2 = 17580\nVENDOR_ID_HOFMANN_SOFTWARE_ENGINEERING_INTERNATIONAL = 17581\nVENDOR_ID_LORAN_TECHNOLOGIE = 17582\nVENDOR_ID_INFORMATION_TECHNOLOGIES_AUSTRALIA_PTY_LTD = 17583\nVENDOR_ID_UNITED_NETWORK_COMMUNICATION_CORP = 17584\nVENDOR_ID_COMPUSYS = 17585\nVENDOR_ID_BANDAI_NETWORKS_CO_LTD = 17586\nVENDOR_ID_LASERBIT_COMMUNICATIONS_CORPORATION = 17587\nVENDOR_ID_GLOBAL_ELECTRICITY_CO_LTD = 17588\nVENDOR_ID_AMEC_SPIE_COMMUNICATIONS = 17589\nVENDOR_ID_ORBIS_TERRARUM_NETWORKS = 17590\nVENDOR_ID_THE_DEFENDER_ASSOCIATION = 17591\nVENDOR_ID_JAVACISE_SOFTWARE = 17592\nVENDOR_ID_EATH_COLTD = 17593\nVENDOR_ID_SIMITEL_S_DE_RL_DE_CV = 17594\nVENDOR_ID_SEU = 17595\nVENDOR_ID_DIGIONLINE_GMBH = 17596\nVENDOR_ID_INTRADATA_BV = 17597\nVENDOR_ID_JOUVE_SI = 17598\nVENDOR_ID_NORTHERN_ALBERTA_INSTITUTE_OF_TECHNOLOGY = 17599\nVENDOR_ID_CHUQ = 17600\nVENDOR_ID_GROUP_ONE_TRADING_LP = 17601\nVENDOR_ID_MIDNIGHT_LINUX = 17602\nVENDOR_ID_SURESPEED = 17603\nVENDOR_ID_SCYSOFT_MULTIMEDIA = 17604\nVENDOR_ID_JENS_BRUER = 17605\nVENDOR_ID_HELLOWORLD_INC = 17606\nVENDOR_ID_RETIA_INC = 17607\nVENDOR_ID_GIE_AGORA = 17608\nVENDOR_ID_AZ_MERCURY_LTD = 17609\nVENDOR_ID_SADHU_SOFTWARE_SERVICES_PVT_LTD = 17610\nVENDOR_ID_EXC_SOFTWARE_LLC = 17611\nVENDOR_ID_GROUPE_CAISSE_DEPARGNE = 17612\nVENDOR_ID_S_ACCESS_GMBH = 17613\nVENDOR_ID_QUEENSLAND_PARALLEL_SUPERCOMPUTING_FOUNDATION_QPSF = 17614\nVENDOR_ID_ASHWAY_SOFTWARE = 17615\nVENDOR_ID_EXCLUSIVE_FLOR_SALES_LTD = 17616\nVENDOR_ID_MESSAGEGATE_INC = 17617\nVENDOR_ID_ZINITINET = 17618\nVENDOR_ID_J_ENTERPRISE_BV = 17619\nVENDOR_ID_MOULD_INDUSTRIA_DE_MATRIZES_LTDA = 17620\nVENDOR_ID_LIGHTWAVE_ACCESS_LLC = 17621\nVENDOR_ID_OPENSERVE = 17622\nVENDOR_ID_MILLERSVILLE_UNIVERSITY = 17623\nVENDOR_ID_SCOUTING_NEDERLAND = 17624\nVENDOR_ID_BRIGHTLINE_TECHNOLOGY_INC = 17625\nVENDOR_ID_PHOENIX_BUSINESS_TECHNOLOGIES_GROUP_INC = 17626\nVENDOR_ID_WILL_SYSTEMS = 17627\nVENDOR_ID_MOUNT_HAY_TECHNOLOGY = 17628\nVENDOR_ID_NISHIMU_ELECTRONICS_INDUSTRIES_CO_LTD = 17629\nVENDOR_ID_ANANA_LTD = 17630\nVENDOR_ID_ORAL_DIAGNOSTIC_SYSTEMS = 17631\nVENDOR_ID_TPISACOM = 17632\nVENDOR_ID_PHOENIX_COLOR_CORPORATION = 17633\nVENDOR_ID_AGB_UK_LIMITED = 17634\nVENDOR_ID_DRAGONTAIL_ONLINE_SECURITY = 17635\nVENDOR_ID_NOVAHEAD_INC = 17636\nVENDOR_ID_FUDOORG = 17637\nVENDOR_ID_JAJOK_LTD = 17638\nVENDOR_ID_ABBEYNET_SRL = 17639\nVENDOR_ID_REIFENBERGER = 17640\nVENDOR_ID_WEB_PUBLICATIONS_PTY_LTD = 17641\nVENDOR_ID_PRINTSOFT_CZECH_REPUBLIC = 17642\nVENDOR_ID_SHANGHAI_NEOTUNE_INFORMATION_TECHNOLOGY_COLTD = 17643\nVENDOR_ID_NEXT_GENERATION_BROADBAND_LLC = 17644\nVENDOR_ID_CBCA_INC = 17645\nVENDOR_ID_CONTACT_ENERGY_LTD = 17646\nVENDOR_ID_NTT_MULTIMEDIA_COMMUNICATIONS_LABORATORIES_INC = 17647\nVENDOR_ID_AMAT_SC_SERVICE_CONSULTING = 17648\nVENDOR_ID_PUMA_AG = 17649\nVENDOR_ID_ITSOFT = 17650\nVENDOR_ID_NECRON_X = 17651\nVENDOR_ID_MCKESSON_IS_FRANCE = 17652\nVENDOR_ID_MOOT_HALL_HOLDINGS_LIMITED = 17653\nVENDOR_ID_SHEER_NETWORKS_LTD = 17654\nVENDOR_ID_EPSYS = 17655\nVENDOR_ID_TOHOKU_RICOH_CO_LTD = 17656\nVENDOR_ID_TP_NET_E_K = 17657\nVENDOR_ID_THINKLOGICAL_INC_FORMERLY_LOGICAL_SOLUTIONS_INC = 17658\nVENDOR_ID_THE_LUTHERAN_UNIVERSITY_ASSOCIATION_INC_D_B_A_VALPARAISO_UNIVERSITY = 17659\nVENDOR_ID_ASTA_UNIVERSITAET_POTSDAM = 17660\nVENDOR_ID_LINCOLN_NATIONAL_CORPORATION = 17661\nVENDOR_ID_LUCENT_EBS = 17662\nVENDOR_ID_ICS_INDUSTRIELLE_AUTOMATISIERUNGSSYSTEME_GMBH = 17663\nVENDOR_ID_WATKINS_CONTRACTING = 17664\nVENDOR_ID_IMAKE_SOFTWARE_SERVICES = 17665\nVENDOR_ID_NEW_JERSEY_HGIHER_EDUCATION_STUDENT_ASSISTANCE_AUTHORITY = 17666\nVENDOR_ID_PCT_INTERNATIONAL_INC = 17667\nVENDOR_ID_AMERICAN_MEDICAL_SECURITY = 17668\nVENDOR_ID_VSL_CATENA = 17669\nVENDOR_ID_CELLIANCE_SARL = 17670\nVENDOR_ID_PT_MUGI_REKSO_ABADI_HOLDING = 17671\nVENDOR_ID_MACH_SOFTWARE_INC = 17672\nVENDOR_ID_CERT_ONERA = 17673\nVENDOR_ID_VT100 = 17674\nVENDOR_ID_HILL_MCGLYNN_ASSOCIATES_LTD = 17675\nVENDOR_ID_NEXTEVOLUTION_AG = 17676\nVENDOR_ID_TRADITION_FINANCIAL_SERVICES_LTD = 17677\nVENDOR_ID_OPEN_X_TECNOLOGIA_DA_INFORMACAO_LTDA = 17678\nVENDOR_ID_CHAPTER_EIGHT_LTD = 17679\nVENDOR_ID_DIALUP_USA_INC = 17680\nVENDOR_ID_JOHNS_HOPKINS_BLOOMBERG_SCHOOL_OF_PUBLIC_HEALTH_CENTER_FOR_COMMUNICATION_PROGRAMS = 17681\nVENDOR_ID_BNX_SYSTEMS_CORPORATION = 17682\nVENDOR_ID_DAVIS_POLK_WARDWELL = 17683\nVENDOR_ID_XI_SOFTWARE_LTD = 17684\nVENDOR_ID_DUNES_TECHNOLOGIES_SA = 17685\nVENDOR_ID_BFM_INSURANCE_GROUP = 17686\nVENDOR_ID_TEAMWORK_SOLUTIONS_INC = 17687\nVENDOR_ID_OFARRELL_COMMUNITY_SCHOOL = 17688\nVENDOR_ID_TJM_COMPUTING = 17689\nVENDOR_ID_THE_UNIVERSITY_OF_NEWCASTLE = 17690\nVENDOR_ID_I_NET_DEVICE_COLTD = 17691\nVENDOR_ID_TORKILD_LMO = 17692\nVENDOR_ID_INSITUT_DE_RECHERCHE_EN_COMMUNICATION_ET_CYBERNTIQUE_DE_NANTES_IRCCYN = 17693\nVENDOR_ID_ELEKTA = 17694\nVENDOR_ID_COMBOX_WINET_GMBH_CO_KG = 17695\nVENDOR_ID_GAD_IT_FUER_BANKEN_EG = 17696\nVENDOR_ID_SANDERSON_TOWNEND_GILBERT_LTD = 17697\nVENDOR_ID_JOHN_LEWIS_PLC = 17698\nVENDOR_ID_JAPAN_CONTROL_ENGINEERING_CO_LTD = 17699\nVENDOR_ID_POWERWALLZ_NETWORK_SECURITY_INC = 17700\nVENDOR_ID_BAE_SYSTEMS_CNIR_2 = 17701\nVENDOR_ID_SMARTPANTS_MEDIA_INC = 17702\nVENDOR_ID_RUDJER_BOSKOVIC_INSTITUTE = 17703\nVENDOR_ID_CRITICAL_TELECOM_CORP = 17704\nVENDOR_ID_SOVELTO_OY = 17705\nVENDOR_ID_KIDERY = 17706\nVENDOR_ID_THE_MEME_FACTORY_INC = 17707\nVENDOR_ID_SYSMANGOCOM = 17708\nVENDOR_ID_SHANGHAI_TELECOMMNUNICATIONS_TECHNOLOGICAL_RESEARCH_INSTITUTE = 17709\nVENDOR_ID_MICHAEL_J_VAN_HAM = 17710\nVENDOR_ID_AISAI_COMMUNICATION_TECHNOLOGY_COLTD = 17711\nVENDOR_ID_TB_SOLUTIONS_TECHNOLOGIES_SOFTWARE_SL = 17712\nVENDOR_ID_CAMBIUM_NETWORKS_LIMITED_FORMERLY_PIPINGHOT_NETWORKS_LIMITED = 17713\nVENDOR_ID_ASM_ENTERPRISES = 17714\nVENDOR_ID_MITSUKOSHI_INFOMATION_SERVICE_COLTD = 17715\nVENDOR_ID_GEORGIA_TECH_FOUNDATION = 17716\nVENDOR_ID_ESCRIPTION_INC = 17717\nVENDOR_ID_VANU_INC = 17718\nVENDOR_ID_NOLDATA_LTD = 17719\nVENDOR_ID_PROMPT = 17720\nVENDOR_ID_AGL_RESOURCES_INC = 17721\nVENDOR_ID_STEAG_GMBH = 17722\nVENDOR_ID_SOFTEL_SA_DE_CV = 17723\nVENDOR_ID_SINOCDN_LTD = 17724\nVENDOR_ID_HW_TERMINATION_UNION = 17725\nVENDOR_ID_ADVA_TECHNOLOGIES_LTD = 17726\nVENDOR_ID_WIPLUG = 17727\nVENDOR_ID_ABOVECABLE_INC = 17728\nVENDOR_ID_SPUENTRUP_SOFTWARE = 17729\nVENDOR_ID_REDDOT_SOLUTIONS_AG = 17730\nVENDOR_ID_CQS_TECHNOLOGY_HOLDINGS_PTY_LTD = 17731\nVENDOR_ID_SNA_LABNATIONAL_DONG_HWA_UNIVERSITY_HUALIENTAIWAN = 17732\nVENDOR_ID_DELAWARE_STATE_UNIVERSITY = 17733\nVENDOR_ID_OC_SYSTEMS_INC = 17734\nVENDOR_ID_QUARK_COMMUNICATIONS_INC = 17735\nVENDOR_ID_TRADING_METRICS_INC = 17736\nVENDOR_ID_TABLUS_INC = 17737\nVENDOR_ID_TRACEY_BERNATH = 17738\nVENDOR_ID_EMBEDDED_TECHNOLOGIES_SRO = 17739\nVENDOR_ID_ISECURITY_TECHNOLOGY_LIMITED = 17740\nVENDOR_ID_OPEN_ENTERPRISE_SYSTEMS_LTD = 17741\nVENDOR_ID_ROOTSR = 17742\nVENDOR_ID_M_WEB_BUSINESS_SOLUTIONS = 17743\nVENDOR_ID_DUBEX_A_S = 17744\nVENDOR_ID_HUNTEK_CO_LTD = 17745\nVENDOR_ID_BY_INTERTRADE = 17746\nVENDOR_ID_NEXAGENT_LTD = 17747\nVENDOR_ID_CARD_SYSTEMS_CONSULTING_SRL = 17748\nVENDOR_ID_TGC_LTD = 17749\nVENDOR_ID_ITECHNOLOGY_GMBH = 17750\nVENDOR_ID_RADIO_SYSTEMS_LTD = 17751\nVENDOR_ID_INSTITUTO_ATLNTICO = 17752\nVENDOR_ID_METROHEALTH_MEDICAL_CENTER = 17753\nVENDOR_ID_ALEXANDER_PILGER_CONSULTING = 17754\nVENDOR_ID_LANE_DEPARTMENT_OF_COMPUTER_SCIENCE_AND_ELECTRICAL_ENGINEERING_WEST_VIRGINIA_UNIVERSITY = 17755\nVENDOR_ID_SCIENCE_COMPUTING_AG = 17756\nVENDOR_ID_ORTHOPEDIC_HEALTHCARE_NORTHWEST_PC = 17757\nVENDOR_ID_TREMATON_UK_LTD = 17758\nVENDOR_ID_SYNCTOMI_INC = 17759\nVENDOR_ID_IDENTIFY = 17760\nVENDOR_ID_WIREDPLACE = 17761\nVENDOR_ID_COVERT_SECURITY_SERVICES_LTD = 17762\nVENDOR_ID_TESKE_NETZWERKBERATUNG = 17763\nVENDOR_ID_DITELCO_LLC = 17764\nVENDOR_ID_TESSNA_PRIVATE_LIMITED = 17765\nVENDOR_ID_PGP_CORPORATION = 17766\nVENDOR_ID_SCHRUTH_LLC = 17767\nVENDOR_ID_ECOBYTE_LIMITED = 17768\nVENDOR_ID_WERFT22_AG = 17769\nVENDOR_ID_CIA_METROPOLITANO_DE_SO_PAULO_METR = 17770\nVENDOR_ID_LINGARD_KNOWLEDGE_SOFTWARE_ENGINEERING = 17771\nVENDOR_ID_IRONICO_PTY_LTD = 17772\nVENDOR_ID_NEXCOM_INTERNATIONAL_COLTD = 17773\nVENDOR_ID_SMART_COMPUTER_SYSTEMS_LTD = 17774\nVENDOR_ID_INTOREL = 17775\nVENDOR_ID_SIN_SOLUTION = 17776\nVENDOR_ID_JASERNET = 17777\nVENDOR_ID_NICAT_INTERNET_VERWALTUNGS_UND_BETRIEBSGESELLSCHAFT_M_B_H = 17778\nVENDOR_ID_ECONTEC_GMBH = 17779\nVENDOR_ID_TRUMAN_MEDICAL_CENTERS_INC = 17780\nVENDOR_ID_UNIVERSITY_OF_VALE_DO_ITAJAI_CES_SAO_JOSE = 17781\nVENDOR_ID_MICHAEL_PARKER = 17782\nVENDOR_ID_SETEL_SPA = 17783\nVENDOR_ID_MITSUBISHI_ELECTRIC_BUSINESS_SYSTEMS_COLTD = 17784\nVENDOR_ID_BONNA_SABLA_SA = 17785\nVENDOR_ID_FRANKENDATA_GMBH_COKG = 17786\nVENDOR_ID_TSCHAUFREI = 17787\nVENDOR_ID_EDAG_GMBH_CO_KGAA = 17788\nVENDOR_ID_SITHARUSCOM_INTERNET_SERVICES = 17789\nVENDOR_ID_IPAD_OWNERS_ASSOCIATION = 17790\nVENDOR_ID_TUROKSNET = 17791\nVENDOR_ID_BILLING_CONCEPTS_INC = 17792\nVENDOR_ID_HONG_KONG_BROADBAND_NETWORK_LTD = 17793\nVENDOR_ID_EXARTECH_INTERNATIONAL_CORP = 17794\nVENDOR_ID_ECHO_COMMUNICATIONS = 17795\nVENDOR_ID_EK_TECHNOLOGY_LTD = 17796\nVENDOR_ID_PRIMESCALE_AG = 17797\nVENDOR_ID_BEIJING_LINGTU_SOFTWARE_CO_LTD = 17798\nVENDOR_ID_EUROVAST_LTD = 17799\nVENDOR_ID_TELEPHONE_COMPANY_CHEREDA = 17800\nVENDOR_ID_TARENT_GMBH = 17801\nVENDOR_ID_EGYPTIAN_TELEPHONE_COMPANY = 17802\nVENDOR_ID_ITECHNOLOGY_GMBH_2 = 17803\nVENDOR_ID_TOWERS_PERRIN = 17804\nVENDOR_ID_RADIO_UNICC_EV = 17805\nVENDOR_ID_ISW = 17806\nVENDOR_ID_WELLX_TELECOM_SA = 17807\nVENDOR_ID_ACTCOM_ACTIVE_COMMUNICATION_LTD = 17808\nVENDOR_ID_CIVIL_INFORMATION_SECURITY_ORGANISATION = 17809\nVENDOR_ID_GIE_GETIMA = 17810\nVENDOR_ID_ANIXE_SYSTEMS_GMBH = 17811\nVENDOR_ID_TLS_TECHNOLOGIE_SP_Z_OO = 17812\nVENDOR_ID_IVAST_INC = 17813\nVENDOR_ID_BOOLEAN_SYSTEMS_INC = 17814\nVENDOR_ID_POLLARD_BANKNOTE_LTD = 17815\nVENDOR_ID_FEDERATED_SYSTEMS_GROUP = 17816\nVENDOR_ID_FUJI_RESEARCH_INSTITUTE_CORPORATION = 17817\nVENDOR_ID_SAPPORO_BREWERIES_LTD = 17818\nVENDOR_ID_GIP_RENATER = 17819\nVENDOR_ID_FORESTTEK_NETWORKS_LIMITED = 17820\nVENDOR_ID_TEMPEST_SPOL_S_RO = 17821\nVENDOR_ID_EASYTOUCH_ROBERT_REDL_KG_FORMERLY_EASYTOUCH_ROBERT_DIVOKY_KEG = 17822\nVENDOR_ID_ARNES_ACADEMIC_AND_RESEARCH_NETWORK_OF_SLOVENIA = 17823\nVENDOR_ID_HISENSE_INFORMATION_TECHNOLOGY_LTD = 17824\nVENDOR_ID_BECONNECTIT_GMBH = 17825\nVENDOR_ID_ZERBIT_SL = 17826\nVENDOR_ID_INFOSTAR_TECHNOLOGY = 17827\nVENDOR_ID_METATV_INC = 17828\nVENDOR_ID_IDN_COMMUNICATION_SYSTEM_COLTD = 17829\nVENDOR_ID_SYRUS_SYSTEMS = 17830\nVENDOR_ID_TWINCATS_PRODUCTION_SPRL = 17831\nVENDOR_ID_ALPHYRA_NORDIC_AB = 17832\nVENDOR_ID_ALL_FOR_ONE_SYSTEMHAUS_AG = 17833\nVENDOR_ID_CNS_SYSTEMS_AB = 17834\nVENDOR_ID_MATV_RT = 17835\nVENDOR_ID_NORBERT_ZNKER_KOLLEGEN = 17836\nVENDOR_ID_EXPERIMENTAL_FACTORY_OF_SCIENTIFIC_ENGINEERING = 17837\nVENDOR_ID_JUNCON = 17838\nVENDOR_ID_SECURESEAL_SYSTEMS_LTD = 17839\nVENDOR_ID_KOITO_INDUSTRIES_LIMITED = 17840\nVENDOR_ID_BOMBININET = 17841\nVENDOR_ID_IPSUM_NETWORKS_INC = 17842\nVENDOR_ID_CONCERTO_SOFTWARE = 17843\nVENDOR_ID_ORION_ASSOCIATES = 17844\nVENDOR_ID_GENISERVER_CORPORATION = 17845\nVENDOR_ID_OCAMAR_TECHNOLOGIESINC = 17846\nVENDOR_ID_MERMIT_BUSINESS_APPLICATIONS_OY = 17847\nVENDOR_ID_QAMCOM_TECHNOLOGY_AB = 17848\nVENDOR_ID_NEUROIMAGE_NORD = 17849\nVENDOR_ID_GROUPE_DANONE = 17850\nVENDOR_ID_SPRINGWAVEINC = 17851\nVENDOR_ID_THE_PROFTPD_PROJECT = 17852\nVENDOR_ID_HEILPRAKTIKERSCHULE_LUZERN_LTD = 17853\nVENDOR_ID_TWENTY_FIRST_CENTURY_COMMUNICATIONS_TFCC = 17854\nVENDOR_ID_ZIPREALTY_INC = 17855\nVENDOR_ID_NETNUMBER_INC = 17856\nVENDOR_ID_TISCALI_FRANCE = 17857\nVENDOR_ID_SONIKORG = 17858\nVENDOR_ID_SEPTIER_COMMUNICATIONS_LTD = 17859\nVENDOR_ID_ALEMBIC_INC = 17860\nVENDOR_ID_TWISE_LABO_INC = 17861\nVENDOR_ID_KELLY_MARTIN = 17862\nVENDOR_ID_DOTOPEN_PTY_LTD = 17863\nVENDOR_ID_FUDAN_GRANDHORIZON_INFORMATION_TECHNOLOGY_INC = 17864\nVENDOR_ID_EVALLEYVS = 17865\nVENDOR_ID_GPS_APPLICATIONS_INC = 17866\nVENDOR_ID_CM_FINE_PACK_INC = 17867\nVENDOR_ID_CODERSNETWORKCOUK = 17868\nVENDOR_ID_ETHERSTACKCOM = 17869\nVENDOR_ID_BRADFORD_TECHNOLOGY_LIMITED = 17870\nVENDOR_ID_NEXGEN_CITY = 17871\nVENDOR_ID_IDOC_KK = 17872\nVENDOR_ID_GCOM_INC = 17873\nVENDOR_ID_MICHAEL_F_DOYLE = 17874\nVENDOR_ID_MACROMEDIA_INC = 17875\nVENDOR_ID_FACTLINE_WEBSERVICES_GMBH = 17876\nVENDOR_ID_UNASSIGNED_22 = 17877\nVENDOR_ID_JOURNALISTIC_INC = 17878\nVENDOR_ID_ASK_SOFTWARE_CORPORATION = 17879\nVENDOR_ID_ROBERT_KURTYS = 17880\nVENDOR_ID_PROFIL_KFT = 17881\nVENDOR_ID_COSTCO_WHOLESALE_CORP = 17882\nVENDOR_ID_CSS_VERSICHERUNG = 17883\nVENDOR_ID_ROCKETSEED = 17884\nVENDOR_ID_AGARWAL_ASSOCIATES_LTD = 17885\nVENDOR_ID_BROSS_AG = 17886\nVENDOR_ID_REALTIME_SYSTEMS_LIMITED = 17887\nVENDOR_ID_XOR_TECHNOLOGIES = 17888\nVENDOR_ID_PORSCHE_INFORMATIK_GMBH = 17889\nVENDOR_ID_JSC_OSS_CORPORATION = 17890\nVENDOR_ID_MIDAMERICA_NAZARENE_UNIVERSITY = 17891\nVENDOR_ID_LUMENAR_NETWORKS_INC = 17892\nVENDOR_ID_CELLENT_AG = 17893\nVENDOR_ID_AIRTRIA = 17894\nVENDOR_ID_KEOPSYS = 17895\nVENDOR_ID_TELEPRO_CS = 17896\nVENDOR_ID_QUANTUM_RADIONICS_CORPORATION = 17897\nVENDOR_ID_RISS_REGIONAL_INFORMATION_SHARING_SYSTEMS = 17898\nVENDOR_ID_MISTA_TECHNOLOGIES = 17899\nVENDOR_ID_PIVETAL_LTD = 17900\nVENDOR_ID_KOOLSPAN_INC = 17901\nVENDOR_ID_COPELAND_CORPORATION = 17902\nVENDOR_ID_GROUSE_MEDIA = 17903\nVENDOR_ID_BOROS_CONSULTING_GMBH = 17904\nVENDOR_ID_AKTION_KRITISCHER_SCHLERINNEN_SALZBURG = 17905\nVENDOR_ID_FOLLEVILLE = 17906\nVENDOR_ID_KUMASHIRO_SYSTEM_FRONTIER_CO_LTD = 17907\nVENDOR_ID_TOBIAS_PUNKE = 17908\nVENDOR_ID_ZANDAR_TECHNOLOGIES = 17909\nVENDOR_ID_MERIDIAN_VAT_PROCESSING_INTERNATIONAL_LTD = 17910\nVENDOR_ID_MOUNTAIN_AREA_INFORMATION_NETWORK = 17911\nVENDOR_ID_JUGENDZENTRUM_KIRCHHEIM = 17912\nVENDOR_ID_MACSHED = 17913\nVENDOR_ID_ESCRIBANA_DE_LA_FUENTE = 17914\nVENDOR_ID_IRIS_MEDIA_LTD = 17915\nVENDOR_ID_ISTITUTO_TECNICO_COMMERCIALE_CESARE_BATTISTI = 17916\nVENDOR_ID_COMPUTER_ESSENCE = 17917\nVENDOR_ID_SMART_SYSTEMS_PTY_LTD = 17918\nVENDOR_ID_LIGHT_SOCKET_LTD = 17919\nVENDOR_ID_C_BORNE_COLTD = 17920\nVENDOR_ID_HALLE_DOT_COM_GERMANY = 17921\nVENDOR_ID_PINPOINT_ISRAEL_LTD = 17922\nVENDOR_ID_TINEXT_SA = 17923\nVENDOR_ID_RATNET = 17924\nVENDOR_ID_DRESDNER_KLEINWORT_WASSERSTEIN = 17925\nVENDOR_ID_BANCO_NACIONAL_DE_COSTA_RICA = 17926\nVENDOR_ID_SANA_SECURITY_INC = 17927\nVENDOR_ID_SIIKULS_INCORPORATED = 17928\nVENDOR_ID_SYNTHETIC_NETWORKS_INC = 17929\nVENDOR_ID_SAGA_UNIVERSITY = 17930\nVENDOR_ID_DILIGENT_TECHNOLOGIES_CORPORATION = 17931\nVENDOR_ID_ZECO_GMBH = 17932\nVENDOR_ID_COMPULOGIC_LIMITED = 17933\nVENDOR_ID_ASSOCIATION_OF_TEACHERS_AND_LECTURERS = 17934\nVENDOR_ID_VIDEOLARM_INC = 17935\nVENDOR_ID_PENN_STATE_HERSHEY_MEDICAL_CENTER = 17936\nVENDOR_ID_LOLLIPOP_LEARNING_LTD = 17937\nVENDOR_ID_UNASSIGNED_23 = 17938\nVENDOR_ID_GUANGDONG_PROVINCE_ELECTRONIC_TECHNOLOGY_RESEARCH_INSTITUTE = 17939\nVENDOR_ID_THE_UNIVERSITY_OF_TEXAS_AT_AUSTIN = 17940\nVENDOR_ID_WEB_FABRIC_LLC = 17941\nVENDOR_ID_ISN_INC_D_B_A_INSOLUTIONS = 17942\nVENDOR_ID_PROGRESSIX = 17943\nVENDOR_ID_SUBRENAT_EXPANSION_SA = 17944\nVENDOR_ID_ALPHA_TELECOM_INC_USA = 17945\nVENDOR_ID_SINEMA_INSTRUCTION = 17946\nVENDOR_ID_CARD_ACCESS_SERVICES_PTY_LTD = 17947\nVENDOR_ID_LV_POWER_2003_LTD = 17948\nVENDOR_ID_I_NEDA_LTD = 17949\nVENDOR_ID_ENDIAN = 17950\nVENDOR_ID_BARNIMNET = 17951\nVENDOR_ID_SCALENT_INC = 17952\nVENDOR_ID_ADVANCED_CLUSTERING_TECHNOLOGIES_INC = 17953\nVENDOR_ID_VOICENET_CYBER_CAFE = 17954\nVENDOR_ID_POLYTRON_CORPORATION = 17955\nVENDOR_ID_NETCARE = 17956\nVENDOR_ID_UNIWIDE_TECHNOLOGIES_INC = 17957\nVENDOR_ID_KAIYO_DENSHI_KOGYO_CO_LTD = 17958\nVENDOR_ID_ACCENSE_TECHNOLOGY_INC = 17959\nVENDOR_ID_ETRI_2 = 17960\nVENDOR_ID_LUOTTOKUNTA = 17961\nVENDOR_ID_ZANDAN = 17962\nVENDOR_ID_CONI_SERVIZI_SPA = 17963\nVENDOR_ID_MAIRIE_DE_PIERREFITTE_SUR_SEINE = 17964\nVENDOR_ID_MEDIASKILL_OHG = 17965\nVENDOR_ID_SPACE2GO_GMBH = 17966\nVENDOR_ID_QOVIA_INC = 17967\nVENDOR_ID_FORTRESS_SYSTEMS_LTD = 17968\nVENDOR_ID_OC4_LLC = 17969\nVENDOR_ID_JSNMP_ENTERPRISES = 17970\nVENDOR_ID_AUTHENTI_CORP = 17971\nVENDOR_ID_INTRAMETA_CORPORATION = 17972\nVENDOR_ID_TERRAVOX_TECHNOLOGIE_INC = 17973\nVENDOR_ID_JWM3_INC = 17974\nVENDOR_ID_WORLD_RADIO_MISSIONARY_FELLOWSHIP_INC = 17975\nVENDOR_ID_ISI_ESM = 17976\nVENDOR_ID_ROKEBY_TECHNOLOGIES_LTD = 17977\nVENDOR_ID_ELFWERKS = 17978\nVENDOR_ID_HYPERMEDIA_SYSTEMS_LTD = 17979\nVENDOR_ID_OLIVER_HUF = 17980\nVENDOR_ID_INTERACCT_SOLUTIONSAUSTRALIA = 17981\nVENDOR_ID_CLICKERTY_CLICK_LTD = 17982\nVENDOR_ID_OUTPOSTAL_CORPORATION = 17983\nVENDOR_ID_SHENZHEN_COSHIP_SOFTWARE_COLTD = 17984\nVENDOR_ID_KINGSOFT = 17985\nVENDOR_ID_SYSTEMS_UNION_SHANGHAI_LTD = 17986\nVENDOR_ID_VODAFONE_GROUP_SERVICES_LIMITED_FORMERLY_CABLE_WIRELESS_UK = 17987\nVENDOR_ID_PYLON_RISC_GMBH = 17988\nVENDOR_ID_PETUJEKNET = 17989\nVENDOR_ID_NEC_ELECTRONICS_CORPORATION = 17990\nVENDOR_ID_WELDUN_SRO = 17991\nVENDOR_ID_NET_DIRECT_INC = 17992\nVENDOR_ID_AWARE_NETWORKS_LTDA = 17993\nVENDOR_ID_MATHEMATICAL_INSTITUTE = 17994\nVENDOR_ID_ASOCIACIN_DE_ESCRIBANOS_DEL_URUGUAY = 17995\nVENDOR_ID_ALIEN_TECHNOLOGY_CORPORATION = 17996\nVENDOR_ID_ARTIS_INC = 17997\nVENDOR_ID_VORDEL_LTD = 17998\nVENDOR_ID_RAPSODIE = 17999\nVENDOR_ID_AGRICULTURAL_BANK_OF_GREECE_SA = 18000\nVENDOR_ID_UNIVERSITY_OF_CAPE_TOWN = 18001\nVENDOR_ID_TALISEN_TECHNOLOGIES = 18002\nVENDOR_ID_STICHTING_WIRELESS_LEIDEN_FOUNDATION_UNDER_DUTCH_LAW = 18003\nVENDOR_ID_MICRO_FORT_PTY_LTD = 18004\nVENDOR_ID_KK_ALICE = 18005\nVENDOR_ID_COGNITAS_GMBH = 18006\nVENDOR_ID_PHONALYSE_BVBA = 18007\nVENDOR_ID_FACHHOCHSCHULE_MANNHEIM_HS_F_TECHNIK_U_GESTALTUNG = 18008\nVENDOR_ID_OUTRAM_RESEARCH_LTD = 18009\nVENDOR_ID_EASTERN_WASHINGTON_UNIVERSITY = 18010\nVENDOR_ID_APOLLO_COMMUNICATIONS_INTERNATIONAL = 18011\nVENDOR_ID_CONNECTLOGIC = 18012\nVENDOR_ID_DBL_TECHNOLOGIES_LTD = 18013\nVENDOR_ID_DEPARTMENT_OF_ELECTRICAL_ELECTRONICS_ENGINEERING = 18014\nVENDOR_ID_FUTARQUE_A_S = 18015\nVENDOR_ID_JBOSS_GROUP_LLC = 18016\nVENDOR_ID_PUBLIC_VOICE_LAB_INTERNATIONAL_MEDIA_CO_OP = 18017\nVENDOR_ID_NORTHWOODS_CATHOLIC_SCHOOL = 18018\nVENDOR_ID_ON_Q_HOLDINGS_PTY_LTD = 18019\nVENDOR_ID_PACIFIC_RETAIL_GROUP = 18020\nVENDOR_ID_CONSTRUCTION_ELECTRONIQUE_ET_TELECOMMUNICATION_INTERNATIONNAL = 18021\nVENDOR_ID_COVARO_NETWORKS_INC = 18022\nVENDOR_ID_TATUNG_SCIENCE_TECHNOLOGY_INC = 18023\nVENDOR_ID_CINERGY_COMMUNICATIONS_COMPANY = 18024\nVENDOR_ID_SIWAN_GMBH_CO_KG = 18025\nVENDOR_ID_EXTRON_ELECTRONICS = 18026\nVENDOR_ID_BATTLEAXE_TECHNOLOGIES_INC = 18027\nVENDOR_ID_BATTLEAXE_TECHNOLOGIES_INC_2 = 18028\nVENDOR_ID_SONIC_FOUNDRY_INC = 18029\nVENDOR_ID_MOLECULAR_THERAPEUTICS_INC = 18030\nVENDOR_ID_ATM_TELECOM = 18031\nVENDOR_ID_MATIEUXNET = 18032\nVENDOR_ID_VIVIALE_LTD = 18033\nVENDOR_ID_FROGNET_INC = 18034\nVENDOR_ID_NETSOLUSCOM_INC = 18035\nVENDOR_ID_UNITED_TELECOMS_LTD = 18036\nVENDOR_ID_PRAMATI_TECHNOLOGIES_PVT_LTD = 18037\nVENDOR_ID_SCHOTTEN_MARCHART_OEG = 18038\nVENDOR_ID_TOYO_RADIATOR_CO_LTD = 18039\nVENDOR_ID_HTTP_PLANITIS_COMMUNICATIONS_LTD = 18040\nVENDOR_ID_PDVCOM_BERATUNGS_GMBH = 18041\nVENDOR_ID_METEKSAN_NET = 18042\nVENDOR_ID_FINANZIT_GMBH = 18043\nVENDOR_ID_SYNELEC_TELECOM_MULTIMEDIA = 18044\nVENDOR_ID_IMFORM_GMBH = 18045\nVENDOR_ID_SKELLEFTE_KOMMUN = 18046\nVENDOR_ID_NEOLOGICA_SRL = 18047\nVENDOR_ID_SUNGARD_FUTURES_SYSTEMS = 18048\nVENDOR_ID_PIXEL_POWER_LTD = 18049\nVENDOR_ID_ENTERPRISE_PRODUCTS_INTEGRATION_PTE_LTD = 18050\nVENDOR_ID_RF_SYSTEMS_NACHRICHTENTECHNIK_GMBH = 18051\nVENDOR_ID_FACHSCHAFTSVERTRETERINNENVERSAMMLUNG = 18052\nVENDOR_ID_CITECS_GMBH = 18053\nVENDOR_ID_TENOVIS_GMBH_CO_KG = 18054\nVENDOR_ID_UNASSIGNED_24 = 18055\nVENDOR_ID_PIONEER_DIGITAL_TECHNOLOGIES_INC = 18056\nVENDOR_ID_PROCONDO_GMBH = 18057\nVENDOR_ID_OPTIMUS_INC = 18058\nVENDOR_ID_B2SCORP = 18059\nVENDOR_ID_THE_APACHE_SOFTWARE_FOUNDATION = 18060\nVENDOR_ID_OCEAN_DEVELOPMENT = 18061\nVENDOR_ID_JO_TANKERS_AS = 18062\nVENDOR_ID_TECHNETIX_BV_FORMERLY_TRATEC_TELECOM_BV = 18063\nVENDOR_ID_MAREK_WALTHER = 18064\nVENDOR_ID_XOU_SOLUTIONS_LIMITED = 18065\nVENDOR_ID_PLANET_LAURITSEN = 18066\nVENDOR_ID_POWERTECH_INFORMATION_SYSTEMS_AS = 18067\nVENDOR_ID_HANSMICH = 18068\nVENDOR_ID_FULFILLMENT_PLUS = 18069\nVENDOR_ID_BTI_PHOTONIC_SYSTEMS = 18070\nVENDOR_ID_CENDURA_CORPORATION = 18071\nVENDOR_ID_R_MEDIA = 18072\nVENDOR_ID_HINEGARDNERORG = 18073\nVENDOR_ID_KASS_ENTERPRISES_LLC = 18074\nVENDOR_ID_COMBRIDGE_MEDICAL_INFORMATION_CORPORATION = 18075\nVENDOR_ID_B1N = 18076\nVENDOR_ID_ACASIM_TECHNOLOGIES_INC = 18077\nVENDOR_ID_UNASSIGNED_25 = 18078\nVENDOR_ID_CITY_IT_UK_LTD = 18079\nVENDOR_ID_BLUEBOARD_LTD = 18080\nVENDOR_ID_NUMA_TECHNOLOGY_INC = 18081\nVENDOR_ID_MIDWEST_INDEPENDENT_MEDIA_FOUNDATION = 18082\nVENDOR_ID_EUROPEAN_SOCIETY_OF_CARDIOLOGY = 18083\nVENDOR_ID_PHARMXPLORER = 18084\nVENDOR_ID_CIAOLAB_TECHNOLOGIES_SPA = 18085\nVENDOR_ID_PROTELEVISION_TECHNOLOGIES_A_S = 18086\nVENDOR_ID_OPTARE_SOLUTIONS_SL = 18087\nVENDOR_ID_JACKSON = 18088\nVENDOR_ID_INOVIS_INC = 18089\nVENDOR_ID_FROGNET_INC_2 = 18090\nVENDOR_ID_CABOVERDE = 18091\nVENDOR_ID_SSJI_NETWORKS = 18092\nVENDOR_ID_K_OPTICOM_CORPORATION = 18093\nVENDOR_ID_KINGDOM_LAN_NETWORK = 18094\nVENDOR_ID_BEIJING_NEUTRON_TELECOM_CO_LTD = 18095\nVENDOR_ID_ADVANCED_CERAMICS_RESEARCH_INC = 18096\nVENDOR_ID_SEVILLA_PROJECT = 18097\nVENDOR_ID_ALEXANDER_STENSRUD = 18098\nVENDOR_ID_AMOKE_NETWORKS_PVT_LTD = 18099\nVENDOR_ID_DESCOM_CONSULTING_LTD = 18100\nVENDOR_ID_ADAPTIVE_MOBILE_SECURITY_LTD = 18101\nVENDOR_ID_LEOSTREAM_CORP = 18102\nVENDOR_ID_SHANGHAI_HELITECH_TELECOMMUNICATION_COLTD_NEIJING_TECHNICAL_BRANCH = 18103\nVENDOR_ID_NET_WORKEDCOUK = 18104\nVENDOR_ID_CALYPTIX_SECURITY_CORPORATION = 18105\nVENDOR_ID_UNIVERSITY_OF_ICELAND_COMPUTING_SERVICES = 18106\nVENDOR_ID_EEG_ENTERPRISES_INC = 18107\nVENDOR_ID_PINGID_NETWORK_INC = 18108\nVENDOR_ID_NEOSPIRE_INC = 18109\nVENDOR_ID_SPEAKEASY_INC = 18110\nVENDOR_ID_AIC_COMMUNICATIONS_INC = 18111\nVENDOR_ID_ODESK_CORP = 18112\nVENDOR_ID_WANSPOTCOM_INC = 18113\nVENDOR_ID_TWOTREES_TECHNOLOGIES_LLC = 18114\nVENDOR_ID_ICRISAT = 18115\nVENDOR_ID_NODE_COMPUTING_SOLUTIONS = 18116\nVENDOR_ID_HTK_NETCOMMUNICATION_OY_PHNET = 18117\nVENDOR_ID_NEW_VOICE_INTERNATIONAL_AG = 18118\nVENDOR_ID_MONOPRIX = 18119\nVENDOR_ID_HYDER_CONSULTING_PLC = 18120\nVENDOR_ID_OBJECTSOURCE_SOFTWARE_GMBH = 18121\nVENDOR_ID_UNIVERSIDADE_DE_SAO_PAULO = 18122\nVENDOR_ID_PLEASANT_RIDGE_WALDORF_SCHOOL = 18123\nVENDOR_ID_VERTICON_INC = 18124\nVENDOR_ID_END_TO_END = 18125\nVENDOR_ID_QUANTUM_INTERNET_SERVICES_INC = 18126\nVENDOR_ID_NET_CONSEQUENCE_GBR = 18127\nVENDOR_ID_KOMOS = 18128\nVENDOR_ID_YORKSHIRE_BUILDING_SOCIETY = 18129\nVENDOR_ID_CDC_SAGAX = 18130\nVENDOR_ID_ECHORAITH = 18131\nVENDOR_ID_FUNDACIN_UNIVERSIDAD_DEL_NORTE = 18132\nVENDOR_ID_GENESIS_NETWORKS_AND_COMMUNICATIONS_INC = 18133\nVENDOR_ID_CEPRI = 18134\nVENDOR_ID_NORTEL_NETWORKS_NETAS = 18135\nVENDOR_ID_DELSYNE_SOFTWARE_SRL = 18136\nVENDOR_ID_WEGENER_COMMUNICATIONS_INC = 18137\nVENDOR_ID_ADWISE_LTD = 18138\nVENDOR_ID_NTT_FACILITIESINC = 18139\nVENDOR_ID_PETT_LUXEMBOURG = 18140\nVENDOR_ID_RRZN_LEIBNIZ_UNIVERSITAET_HANNOVER = 18141\nVENDOR_ID_GRUENDER_AV = 18142\nVENDOR_ID_LINDENAAR = 18143\nVENDOR_ID_MICHAEL_VISTEIN = 18144\nVENDOR_ID_AGRICULTURAL_MINERAL_PROSPECTORS_INC = 18145\nVENDOR_ID_PS_SOLUTIONS_LTD = 18146\nVENDOR_ID_TERRALUNA = 18147\nVENDOR_ID_COOLDE = 18148\nVENDOR_ID_BI_TECNOLOGIA_LTDA = 18149\nVENDOR_ID_WEBAGE = 18150\nVENDOR_ID_PFLUG_DATENTECHNIK = 18151\nVENDOR_ID_EZGETNET = 18152\nVENDOR_ID_SOFTWARE_ENGINEERING_GMBH = 18153\nVENDOR_ID_TELNET_MEDIA_LTD = 18154\nVENDOR_ID_STILPO_LABORATORIES = 18155\nVENDOR_ID_GREAT_PACIFIC_INDUSTRIES_INC = 18156\nVENDOR_ID_WILLOWGLEN_MSC_BERHAD = 18157\nVENDOR_ID_GATSWAY_DATA_COMMUNICATION_TECHNOLOGY_COLTD = 18158\nVENDOR_ID_ACCORDANCE_SYSTEMS_INC = 18159\nVENDOR_ID_SHENZHEN_GBIT_ELECTRONIC_TECHNICAL_LTD = 18160\nVENDOR_ID_IPOINT_LTD = 18161\nVENDOR_ID_EYME_TECHNOLOGIES_PVT_LTD = 18162\nVENDOR_ID_COMMIT_OY = 18163\nVENDOR_ID_OFFICE_OF_THE_PRIME_MINISTER = 18164\nVENDOR_ID_VB_PROS_OY_RS_SOLUTIONS = 18165\nVENDOR_ID_CHALMEGE = 18166\nVENDOR_ID_INTEGRO_NETWORKS = 18167\nVENDOR_ID_INFOGATE_ONLINE_LTD = 18168\nVENDOR_ID_DOTFLUX = 18169\nVENDOR_ID_INNOCOM_2 = 18170\nVENDOR_ID_TORCHBOX_LTD = 18171\nVENDOR_ID_LUDWIG_SCHNEIDER_IT_CONSULTING = 18172\nVENDOR_ID_RAMANAM_SOFTWARE_DISTRIBUTORS_PRIVATE_LIMITED = 18173\nVENDOR_ID_WISCONSIN_DEPARTMENT_OF_JUSTICE = 18174\nVENDOR_ID_ARAKNOS_SRL = 18175\nVENDOR_ID_PIKEVILLE_METHODIST_HOSPITAL = 18176\nVENDOR_ID_INPE = 18177\nVENDOR_ID_FRONT_RANGE_INTERNET_INC = 18178\nVENDOR_ID_QUEST_SOFTWARE_INC_FORMERLY_VINTELA_INC = 18179\nVENDOR_ID_UNIT_LTD = 18180\nVENDOR_ID_WESTERN_UNION_FINANCIAL_SERVICES_INC = 18181\nVENDOR_ID_AHOLD_INFORMATION_SERVICES = 18182\nVENDOR_ID_SYSTEMS_ATLANTA_INC = 18183\nVENDOR_ID_ACKRIUM = 18184\nVENDOR_ID_RENE_VAN_ROOYEN = 18185\nVENDOR_ID_AWACS_LTD = 18186\nVENDOR_ID_LINKWISE_SOFTWARESHANGHAI_COLTD = 18187\nVENDOR_ID_TORINET = 18188\nVENDOR_ID_DIRECTION_GNRALE_DES_IMPTS = 18189\nVENDOR_ID_DABSCOM_PLC = 18190\nVENDOR_ID_AUDIOVISION = 18191\nVENDOR_ID_ESCHOOLONLINE = 18192\nVENDOR_ID_RUBAN_CONSULTING = 18193\nVENDOR_ID_BEWER_ENTERPRISES = 18194\nVENDOR_ID_XSEC_SRL = 18195\nVENDOR_ID_LANDESZAHNRZTEKAMMER_SACHSEN = 18196\nVENDOR_ID_SONY_COMMUNICATION_NETWORK_CORPORATION = 18197\nVENDOR_ID_ZEMILOGIX_LLC = 18198\nVENDOR_ID_OBJECTIVE_DATA_STORAGE = 18199\nVENDOR_ID_SOFTWARE_EXPEDITION = 18200\nVENDOR_ID_BESTSELLER_A_S = 18201\nVENDOR_ID_BELATRONIX_KOMMUNIKATION_EDV = 18202\nVENDOR_ID_TC_ELECTRONIC_A_S = 18203\nVENDOR_ID_COMPUTER_AND_SOFTWARE_ENTERPRISES_INC = 18204\nVENDOR_ID_PIONEER_INDUSTRIES_INC = 18205\nVENDOR_ID_IVOLVE_PTY_LTD = 18206\nVENDOR_ID_ANTS_SOFTWARE_INC = 18207\nVENDOR_ID_TELESYM = 18208\nVENDOR_ID_MIDWEST_RADIOLOGY_OF_KENTUCKY = 18209\nVENDOR_ID_AGILIS_COMMUNICATION_TECHNOLOGIES_PTE_LTD = 18210\nVENDOR_ID_CATALINA_COMPUTERS_DISCOUNT = 18211\nVENDOR_ID_A_L_SOFT_SRO = 18212\nVENDOR_ID_VOXSANT_RESOURCES_INC = 18213\nVENDOR_ID_OLGIERD_ZIOLKO = 18214\nVENDOR_ID_METRO_PACKET_SYSTEMS_INC = 18215\nVENDOR_ID_ANYWEB_AG = 18216\nVENDOR_ID_PROFIUM_OY = 18217\nVENDOR_ID_DIGORA = 18218\nVENDOR_ID_SALTEN_BREDBAND_AS = 18219\nVENDOR_ID_W_EN_J = 18220\nVENDOR_ID_SY_ELECTRONICS_LTD = 18221\nVENDOR_ID_HOPITAUX_UNIVERSITAIRES_DE_STRASBOURG = 18222\nVENDOR_ID_W_ONESYS_SL = 18223\nVENDOR_ID_DIPL_INF_CARSTEN_DUMKE = 18224\nVENDOR_ID_GUENEVERNET = 18225\nVENDOR_ID_IMAP4ALL_BV = 18226\nVENDOR_ID_OPENCA = 18227\nVENDOR_ID_UNIVERSITY_OF_STUTTGART = 18228\nVENDOR_ID_SONITROL_SECURITY_SYSTEMS_OF_HARTFORD_INC = 18229\nVENDOR_ID_CONECTIUM_LIMITED = 18230\nVENDOR_ID_CLEAR_REACH_NETWORKS_INC = 18231\nVENDOR_ID_EQUIPOS_TELEMO_ET_SA = 18232\nVENDOR_ID_HEC_MONTREAL = 18233\nVENDOR_ID_NETSRV_CONSULTING_LTD = 18234\nVENDOR_ID_ANDREAS_SCHULZE = 18235\nVENDOR_ID_MCGILL_UNIVERSITY = 18236\nVENDOR_ID_INTELLIVID_CORPORATION = 18237\nVENDOR_ID_SKYLINK_DESIGN = 18238\nVENDOR_ID_DTS_INC_FORMERLY_DIGITAL_THEATER_SYSTEMS_INC = 18239\nVENDOR_ID_BERGERDE = 18240\nVENDOR_ID_W3DESIGN = 18241\nVENDOR_ID_WYYZZK_INC = 18242\nVENDOR_ID_GJ_FOSTER_TECHNOLOGIES_INC = 18243\nVENDOR_ID_MATISSE_NETWORKS_INC = 18244\nVENDOR_ID_DISHNET_DSL_LTD = 18245\nVENDOR_ID_DEGUSSA_AG = 18246\nVENDOR_ID_ITT_SRL = 18247\nVENDOR_ID_PAPOUCH_ELEKTRONIKA = 18248\nVENDOR_ID_ARCANE_PROJECT = 18249\nVENDOR_ID_TECHNOLOGIES_RESEAUX_SOLUTIONS = 18250\nVENDOR_ID_BEIJING_ACT_TECHNOLOGY_CO_LTD = 18251\nVENDOR_ID_SYMMETRUS_SYSTEMS_LTD = 18252\nVENDOR_ID_MVERIFY_CORPORATION = 18253\nVENDOR_ID_MIMEZINE = 18254\nVENDOR_ID_TALLER_DE_IDEAS_DE_C_DANIEL_MOJOLI_B = 18255\nVENDOR_ID_BABCOCK_WILCOX_COMPANY_MCDERMOTT = 18256\nVENDOR_ID_KHAMSIN_SECURITY_GMBH = 18257\nVENDOR_ID_BINKENCOM = 18258\nVENDOR_ID_CBTCBT_INC = 18259\nVENDOR_ID_BANDAPARTNET = 18260\nVENDOR_ID_TIGERBYTE = 18261\nVENDOR_ID_TECHNICOLOR_MEDIA_ASSET_MANAGEMENT = 18262\nVENDOR_ID_SANDERS_TECHNOLOGY_DESIGN = 18263\nVENDOR_ID_ICT_GROUP_HHW = 18264\nVENDOR_ID_KESTREL_TECHNOLOGIES_INC = 18265\nVENDOR_ID_DALLAS_GENEALOGICAL_SOCIETY = 18266\nVENDOR_ID_NEOJAPAN_INC = 18267\nVENDOR_ID_SKYNET_NETWORK_SECURITY_SYSTEM_INTEGRATION_COLTD = 18268\nVENDOR_ID_MAPFRE = 18269\nVENDOR_ID_BANKSYS = 18270\nVENDOR_ID_CIFOM_ESNIG = 18271\nVENDOR_ID_ALERTA_COMUNICACIONES_SAL = 18272\nVENDOR_ID_FRENCH_SENATE = 18273\nVENDOR_ID_SHENZHEN_EXPERIMENT_SCHOOL = 18274\nVENDOR_ID_CIBERNET_CORPORATION = 18275\nVENDOR_ID_LURCHER_LINK = 18276\nVENDOR_ID_COLUMBUS_METROPOLITAN_LIBRARY = 18278\nVENDOR_ID_RAINER_FISCHER_EDV_SERVICE = 18279\nVENDOR_ID_NETTEMPO_INC = 18280\nVENDOR_ID_BODACION_TECHNOLOGIES_LLC = 18281\nVENDOR_ID_MUTTSOFT_INC = 18282\nVENDOR_ID_PARAXIP_TECHNOLOGIES = 18283\nVENDOR_ID_EXEMYS_SRL = 18284\nVENDOR_ID_VIDIATOR_TECHNOLOGY_INC = 18285\nVENDOR_ID_ASSURENT_SOFTWARE_INC = 18286\nVENDOR_ID_INNOPATH_SOFTWARE = 18287\nVENDOR_ID_RABA_TECHNOLOGIES_LLC = 18288\nVENDOR_ID_ROUTER_MANAGEMENT_SOLUTIONS_INC = 18289\nVENDOR_ID_SZELES_TIBOR = 18290\nVENDOR_ID_LIGFY = 18291\nVENDOR_ID_METIS_OY = 18292\nVENDOR_ID_BLACKHAWK_INTERNET_COMMUNICATIONS_INC = 18293\nVENDOR_ID_CAMBRIDGE_UNIVERSITY_PRESS = 18294\nVENDOR_ID_APPLIED_SOFTWARE_SOLUTIONS_LLC = 18295\nVENDOR_ID_EMIGRANT_SAVINGS_BANK = 18296\nVENDOR_ID_SYMBIUM_CORPORATION = 18297\nVENDOR_ID_DRUGREFORG = 18298\nVENDOR_ID_INSTITUTE_FOR_INTERNATIONAL_ECOMONIC_AND_POLITICAL_STUDIES_RUSSIAN_ACADEMY_OF_SCIENCES = 18299\nVENDOR_ID_XOBA_INC = 18300\nVENDOR_ID_DATACARD_CORPORATION = 18301\nVENDOR_ID_METROPLEX_WEBS = 18302\nVENDOR_ID_SOLLAE_SYSTEMS_COLTD = 18303\nVENDOR_ID_DOUGLAS_NEEDHAM = 18304\nVENDOR_ID_NORTH_AMERICAN_ASTROPHYSICAL_OBSERVATORY = 18305\nVENDOR_ID_SICHUAN_E_LINK_CO_LTD = 18306\nVENDOR_ID_EADIEFLEET_CORPORATION = 18307\nVENDOR_ID_APHONA_KOMMUNIKATIONSSYSTEME_ENTWICKLUNGS_UND_VERTRIEBSGMBH = 18308\nVENDOR_ID_EINSLE = 18309\nVENDOR_ID_HEITEC_AG = 18310\nVENDOR_ID_LINZIES_COMPUTERS = 18311\nVENDOR_ID_DATA_FLOW_SYSTEMS = 18312\nVENDOR_ID_BODACION_TECHNOLOGIES_LLC_2 = 18313\nVENDOR_ID_CANBERRA_INDUSTRIES = 18314\nVENDOR_ID_MCCORMICK_COMPANY_INC = 18315\nVENDOR_ID_ORDINATION_MED_RAT_DR_ROESLER = 18316\nVENDOR_ID_MUTTSOFT_INC_2 = 18317\nVENDOR_ID_COPEL_TELECOMUNICAES_S_A = 18318\nVENDOR_ID_ASOCIACIN_NACIONAL_ECUMNICA_DE_DESARROLLO = 18319\nVENDOR_ID_HYDROLOGIC_CONSULTANTS_INC_OF_COLORADO = 18320\nVENDOR_ID_UNIVERSIDAD_DEL_SAGRADO_CORAZON = 18321\nVENDOR_ID_ITACS_GMBH = 18322\nVENDOR_ID_MINDWAYS_SOFTWARE_INC = 18323\nVENDOR_ID_PRESS_COMMUNICATIONS_P_L = 18324\nVENDOR_ID_ADVANCED_RELAY_CORPORATION = 18325\nVENDOR_ID_INFOGIN_LTD = 18326\nVENDOR_ID_42NETWORKS_AB = 18327\nVENDOR_ID_OPENMIND_NETWORKS_LIMITED = 18328\nVENDOR_ID_AMC_LTD = 18329\nVENDOR_ID_ELECTROBUSINESS_CONNECTIONS_INC = 18330\nVENDOR_ID_HUBER_S_CONSULTING_GMBH = 18331\nVENDOR_ID_ANF_AUTORIDAD_DE_CERTIFICACIN = 18332\nVENDOR_ID_ANF_AUTORIDAD_DE_CERTIFICACIN_2 = 18333\nVENDOR_ID_KONICA_MINOLTA_HOLDINGS_INC = 18334\nVENDOR_ID_MELLOUL_BLAMEY_CONSTRUCTION_INC = 18335\nVENDOR_ID_COMPUTER_LOGIX = 18336\nVENDOR_ID_CREEDON_ENGINEERING = 18337\nVENDOR_ID_CENTRUM_VOOR_WISKUNDE_EN_INFORMATICA = 18338\nVENDOR_ID_ANF_AUTORIDAD_DE_CERTIFICACIN_3 = 18339\nVENDOR_ID_PROQUEST_INFORMATION_AND_LEARNING = 18340\nVENDOR_ID_THE_INSTITUTE_FOR_OPEN_SYSTEMS_TECHNOLOGIES_PTY_LTD = 18341\nVENDOR_ID_CEYONIQ_TECHNOLOGY_GMBH = 18342\nVENDOR_ID_PERFORMANCE_SOLUTIONS_LIMITED = 18343\nVENDOR_ID_INTMAINCOM = 18344\nVENDOR_ID_MESSAGESOFT_INC = 18345\nVENDOR_ID_SEBASTIAN_DENEF_COMPUTER_SERVICE = 18346\nVENDOR_ID_MAUSER_WERKE_GMBH_CO_KG = 18347\nVENDOR_ID_AVITECH_INTERNATIONAL_CORP = 18348\nVENDOR_ID_LUTHER_SEMINARY = 18349\nVENDOR_ID_POLVA_CENTRAL_LIBRARY = 18350\nVENDOR_ID_VELARE_TECHNOLOGIES_INC = 18351\nVENDOR_ID_SONY_PICTURES_IMAGEWORKS = 18352\nVENDOR_ID_MAUSER_WERKE_GMBH_CO_KG_2 = 18353\nVENDOR_ID_CALYPTECH_PTY_LTD = 18354\nVENDOR_ID_AVITECH_INTERNATIONAL_CORP_2 = 18355\nVENDOR_ID_KEVINSTEVENSINFO = 18356\nVENDOR_ID_FULL_FRONTAL_INGENUITY_LLC_FORMERLY_LEATHERN_APRON_INCORPORATED = 18357\nVENDOR_ID_EPITECH = 18358\nVENDOR_ID_INTRANSA_INC = 18359\nVENDOR_ID_INTEC_WEB_AND_GENOME_INFORMATICS_CORPORATION = 18360\nVENDOR_ID_A3_SECURITY_CONSULTING_CO_LTD = 18361\nVENDOR_ID_HONG_KONG_CSL_LIMITED = 18362\nVENDOR_ID_EPOK_INC = 18363\nVENDOR_ID_NEZABUDKA = 18364\nVENDOR_ID_KONZUMBANK_RT = 18365\nVENDOR_ID_APPLICATA = 18366\nVENDOR_ID_NANOTEQ_PTY_LTD = 18367\nVENDOR_ID_COMUNICS_INFORMATIK_GMBH = 18368\nVENDOR_ID_PHOENIX_ZEPPELIN_SPOL_S_RO = 18369\nVENDOR_ID_INTERNET_CONSULT_SARL = 18370\nVENDOR_ID_PICKERING_INTERFACES_LTD = 18371\nVENDOR_ID_BALABIT_IT_LTD = 18372\nVENDOR_ID_CSAS_COMPUTER_SYSTEME_ARNO_SEIDEL = 18373\nVENDOR_ID_ANDRI_SAAR = 18374\nVENDOR_ID_RUPRECHT_KARLS_UNIVERSITAET_HEIDELBERG = 18375\nVENDOR_ID_ORGA_SYSTEMS_GMBH = 18376\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_TRIESTE = 18377\nVENDOR_ID_EASTERN_KENTUCKY_UNIVERSITY = 18378\nVENDOR_ID_EXTRAQUEST_CORPORATION = 18379\nVENDOR_ID_NEXTFOR_SA = 18380\nVENDOR_ID_SURAMERICANA_DE_SEGUROS_SA = 18381\nVENDOR_ID_BANK_OF_VALLETTA_PLC = 18382\nVENDOR_ID_ENTERUX_SOLUTIONS = 18383\nVENDOR_ID_REFLECTIVE_SOLUTIONS_LTD = 18384\nVENDOR_ID_ECKI_PATANG_ORG = 18385\nVENDOR_ID_OSHIIRE = 18386\nVENDOR_ID_LITRIUS_GROUP = 18387\nVENDOR_ID_ASTRAZENECA = 18388\nVENDOR_ID_OLD_GENIE_HOTTABYCH_COMPANY = 18389\nVENDOR_ID_MTS_SPA = 18390\nVENDOR_ID_LEARNING_OBJECTS_NETWORK_INC = 18391\nVENDOR_ID_APPLIED_PERSONAL_COMPUTING_INC = 18392\nVENDOR_ID_GOBLIN = 18393\nVENDOR_ID_FRED_CHEF_INC = 18394\nVENDOR_ID_VIVAXIS_SAS = 18395\nVENDOR_ID_DASSAULT_AVIATION = 18396\nVENDOR_ID_INFOSYS = 18397\nVENDOR_ID_JMIND_CONSULTING_LTD = 18398\nVENDOR_ID_K_P_CORPORATION = 18399\nVENDOR_ID_KOMMANDORADEN = 18400\nVENDOR_ID_XIQA_NETWORKS = 18401\nVENDOR_ID_SECURITYMETRICS_INC = 18402\nVENDOR_ID_CITY_OF_CHICAGO_OFFICE_OF_BUDGET_MANAGEMENT = 18403\nVENDOR_ID_UNITED_NATIONS_DEVELOPMENT_PROGRAMME = 18404\nVENDOR_ID_REDBIRD_INFORMATICS_INC = 18405\nVENDOR_ID_INTERNETWORKING_LTD = 18406\nVENDOR_ID_TRANSCENDENCENET = 18407\nVENDOR_ID_ASSOCIATION_OHANA = 18408\nVENDOR_ID_PLANET_AS = 18409\nVENDOR_ID_HME_POLYTECHNIC = 18410\nVENDOR_ID_DATACENTERTECHNOLOGIES = 18411\nVENDOR_ID_EPOCH_DESIGN_LTD = 18412\nVENDOR_ID_EGIM = 18413\nVENDOR_ID_IMAGINATIVE_IT_LIMITED = 18414\nVENDOR_ID_ELM_COMPUTER_TECHNOLOGIES_LTD = 18415\nVENDOR_ID_VICTRON_BVA = 18416\nVENDOR_ID_ARGON_TECHNOLOGIES_INC = 18417\nVENDOR_ID_ENDACE_TECHNOLOGY = 18418\nVENDOR_ID_GLAVENORG = 18419\nVENDOR_ID_CEREBRASOFT = 18420\nVENDOR_ID_TETERAORG = 18421\nVENDOR_ID_AETHERSTORMCOM = 18422\nVENDOR_ID_NETHARMONIX_INC = 18423\nVENDOR_ID_MOOREWARE = 18424\nVENDOR_ID_COMCO_AG = 18425\nVENDOR_ID_PATRICK_NF = 18427\nVENDOR_ID_AMERICAN_REGISTRY_FOR_INTERNET_NUMBERS = 18428\nVENDOR_ID_IT_CONSULTING_EDUCATION_LTD = 18429\nVENDOR_ID_GENERATIONE_TECHNOLOGIES_LLC = 18430\nVENDOR_ID_STMK_KRANKENANSTALTEN_GESMBH = 18431\nVENDOR_ID_DENY_ALL = 18433\nVENDOR_ID_UNIVERSITY_OF_LEIPZIG = 18434\nVENDOR_ID_ADVANCED_COMPUTER_SYSTEMS_ACS_SPA = 18435\nVENDOR_ID_BELL_MOBILITY = 18436\nVENDOR_ID_WISV_CHRISTIAAN_HUYGENS = 18437\nVENDOR_ID_COMPOSITE_SOFTWARE_INC = 18439\nVENDOR_ID_PEERIX = 18440\nVENDOR_ID_NATIONAL_FOOTBALL_LEAGUE = 18441\nVENDOR_ID_VIMATIX = 18442\nVENDOR_ID_NETSYSIT_GBR = 18443\nVENDOR_ID_SANDWICHNET_INTERNET_SERVICES = 18444\nVENDOR_ID_DATACARD_CORPORATION_2 = 18445\nVENDOR_ID_ASCENDANT_TECHNOLOGIES_INC = 18446\nVENDOR_ID_WILLIS_CONSULTING = 18447\nVENDOR_ID_VANQUISH_INC = 18448\nVENDOR_ID_ALEXANDER_GRETHA = 18449\nVENDOR_ID_SEVENL_NETWORKS_INC = 18450\nVENDOR_ID_PC_POOL_PHYSIK_TU_BERLIN = 18451\nVENDOR_ID_TEMPOD = 18452\nVENDOR_ID_THE_CITY_OF_CALGARY = 18453\nVENDOR_ID_OATSYSTEMS_INC = 18454\nVENDOR_ID_MEDICAL_INFOMATION_CO_LTD = 18455\nVENDOR_ID_NETKLASS_TECHNOLOGY_INC = 18456\nVENDOR_ID_EUROPEAN_DIRECTORATE_FOR_THE_QUALITY_OF_MEDICINES_HEALTHCARE_COUNCIL_OF_EUROPE_EDQM_FORMERLY_EUROPEAN_DIRECTORATE_FOR_THE_QUALITY_OF_MEDICINES = 18457\nVENDOR_ID_IMAGE_PROCESSING_TECHNIQUES_LTD = 18458\nVENDOR_ID_SEMAFOR_INFORMATIK_ENERGIE_AG = 18459\nVENDOR_ID_POWELL_COMPANIES = 18460\nVENDOR_ID_OSIX_INC = 18461\nVENDOR_ID_LIFETREE_CONVERGENCE_LTD = 18462\nVENDOR_ID_SPEKTAR_JSC = 18463\nVENDOR_ID_ROMATSA_RA = 18464\nVENDOR_ID_TRADELINK_LLC = 18465\nVENDOR_ID_AVIVA_COMMUNICATIONS_INC = 18466\nVENDOR_ID_ADVANCEPCS = 18467\nVENDOR_ID_HUGHES_NETWORK_SYSTEMS = 18468\nVENDOR_ID_UNIS_LUMIN_INC = 18469\nVENDOR_ID_INGENIEURBUERO_MICHAEL_KAPPLER = 18470\nVENDOR_ID_E_SCRIPPS = 18471\nVENDOR_ID_CRYSTAL_COMPUTER_CORPORATION_GEORGIA = 18472\nVENDOR_ID_FORM_IT = 18473\nVENDOR_ID_ETYPE_CO = 18474\nVENDOR_ID_RESEARCH_INSTITUTE_OF_AMERICA = 18475\nVENDOR_ID_ACTINIUM_NETWORK_SDN_BHD = 18476\nVENDOR_ID_BUNDESMINISTERIUM_DES_INNERN = 18477\nVENDOR_ID_WEHAY_AB = 18478\nVENDOR_ID_FS_VDSL = 18479\nVENDOR_ID_RF_DESIGN = 18480\nVENDOR_ID_TRUSTWORX_GMBH = 18481\nVENDOR_ID_ARCWAVE_INC = 18482\nVENDOR_ID_ROMATSA_RA_2 = 18483\nVENDOR_ID_PROCOLIX = 18484\nVENDOR_ID_MARIETTA_COLLEGE = 18485\nVENDOR_ID_QUICKSHIFT_INC = 18486\nVENDOR_ID_EVERBANK = 18487\nVENDOR_ID_INTERBAUN_COMMUNICATIONS_INC = 18488\nVENDOR_ID_CARRIERCOMM_INC = 18489\nVENDOR_ID_BOLSA_NACIONAL_DE_VALORES = 18490\nVENDOR_ID_NII_VOSKHOD = 18491\nVENDOR_ID_TACOMA_SPOLS_RO = 18492\nVENDOR_ID_PROCOLIX_2 = 18493\nVENDOR_ID_SWIFT_SCRL = 18494\nVENDOR_ID_GRAU_DATA_AG = 18495\nVENDOR_ID_ROLOTEC_AG = 18496\nVENDOR_ID_GEC_UOC_GROUP = 18497\nVENDOR_ID_AM_CONSULTING_CO = 18498\nVENDOR_ID_PD3_TECNOLOGIA_EM_REDES_E_SISTEMAS_DIGITAIS = 18499\nVENDOR_ID_ODDPOSTCOM = 18500\nVENDOR_ID_CODE_FUSION_CC = 18501\nVENDOR_ID_MENDEL_UNIVERSITY_OF_AGRICULTURE_AND_FORESTRY = 18502\nVENDOR_ID_INTELLI7_INC = 18503\nVENDOR_ID_BRAINSTORM_INTERNET = 18504\nVENDOR_ID_TELE_CONSULTING_GMBH = 18505\nVENDOR_ID_CACERT_INC = 18506\nVENDOR_ID_PRECISE_TIME_AND_FREQUENCY_INC = 18507\nVENDOR_ID_MURASHITA_CONSTRUCTION_INDUSTRY_CO_LTD = 18508\nVENDOR_ID_IVK_SMART_SOFTWARE_SOLUTIONS_LLC = 18509\nVENDOR_ID_REID_ENTERPRISES = 18510\nVENDOR_ID_CENTRE_INFORMATIQUE_REGION_BRUXELLOISE = 18511\nVENDOR_ID_SCHAAKE = 18512\nVENDOR_ID_PETE23COM = 18513\nVENDOR_ID_BEKARTS_INTERNATIONAL = 18514\nVENDOR_ID_NORTECH_MANAGEMENT_LTD = 18515\nVENDOR_ID_ECLIPSE_NETWORKING_LIMITED = 18516\nVENDOR_ID_ORBIT_RESEARCH_LTD = 18517\nVENDOR_ID_CREA_DOO = 18518\nVENDOR_ID_JAHI_NETWORKS_INC = 18519\nVENDOR_ID_APSI_INC = 18520\nVENDOR_ID_TAKENET = 18521\nVENDOR_ID_UNASSIGNED_26 = 18522\nVENDOR_ID_LIVERTON_LIMITED = 18523\nVENDOR_ID_EMPRESA_METALRGICA_CENTRAL_DE_ACERO_JOS_VALDES_REYES = 18524\nVENDOR_ID_ROBINBOWESCOM = 18525\nVENDOR_ID_FISK_LABS_INC = 18526\nVENDOR_ID_MAERSK_DATA_ORGANISATOR_A_S = 18527\nVENDOR_ID_CETELEM = 18528\nVENDOR_ID_SWISSCOM_EUROSPOT = 18529\nVENDOR_ID_NIGHTCITYNET = 18530\nVENDOR_ID_DECISIONPOINT_APPLICATIONS_INC = 18531\nVENDOR_ID_THE_UNIVERSITY_OF_NEW_BRUNSWICK = 18532\nVENDOR_ID_NTH_AG = 18533\nVENDOR_ID_MCI_5 = 18534\nVENDOR_ID_ECHOSTAR_DATA_SERVICES = 18535\nVENDOR_ID_OOLONG_PROJECT = 18536\nVENDOR_ID_TAM_INTERNET_SERVICE_LTD = 18537\nVENDOR_ID_RL_PHILLIPS_INC = 18538\nVENDOR_ID_FLAGWIRELESSCOM = 18539\nVENDOR_ID_WEBMEESTERS = 18540\nVENDOR_ID_ROLAND_BAUM_SYSTEM_CONSULT = 18541\nVENDOR_ID_SPHINX_INFORMATION_TECHNOLOGIES_INC = 18542\nVENDOR_ID_INNOVE_COMMUNICATIONS = 18543\nVENDOR_ID_ECOFINANCE = 18544\nVENDOR_ID_JOINT_STOCK_COMPANY_TRADING_SYSTEM_ADMINISTRATOR_OF_WHOLESALE_ELECTRICITY_MARKET_TRANSACTIONS = 18545\nVENDOR_ID_FAST_VIDEO_SECURITY_AG = 18546\nVENDOR_ID_AMANDA_EMILY = 18547\nVENDOR_ID_RELATIONALWARE = 18548\nVENDOR_ID_KEALIA_INC = 18549\nVENDOR_ID_GEMPLUS_DO_BRASIL = 18550\nVENDOR_ID_ANDERS_BYSTRUP_IT = 18551\nVENDOR_ID_FIREVUE_SECURITY_SYSTEMS = 18552\nVENDOR_ID_ARACHNE_PRIME_INC = 18553\nVENDOR_ID_XENOTROPIC_SYSTEMS = 18554\nVENDOR_ID_YOUNEEK_ORGANISATION_LIMITED = 18555\nVENDOR_ID_ZAURUM_ECP_PROJECT = 18556\nVENDOR_ID_HURRAYSOLUTION_LTD = 18557\nVENDOR_ID_WUSHIGONG_LTD = 18558\nVENDOR_ID_SOFTPAK_INTERNATIONAL = 18559\nVENDOR_ID_MAKEDONSKI_TELEKOMUNIKACII_MTNET = 18560\nVENDOR_ID_STARNIC = 18561\nVENDOR_ID_JAZZ_TELECOM_SA = 18562\nVENDOR_ID_DARKPHUTURE_TECHNOLOGIES_RESEARCH_DEVELOPMENT = 18563\nVENDOR_ID_BFI_BURGENLAND = 18564\nVENDOR_ID_SCHUH_TV = 18565\nVENDOR_ID_HOGESCHOOL_GENT = 18566\nVENDOR_ID_EPIC_SYSTEMS_CORPORATION = 18567\nVENDOR_ID_SERVICE_AVAILABILITY_FORUM = 18568\nVENDOR_ID_ENSEQUENCE_INC = 18569\nVENDOR_ID_GREENPULSE_LIMITED = 18570\nVENDOR_ID_MINDHUT_LIMITED = 18571\nVENDOR_ID_ORC = 18572\nVENDOR_ID_EDUCATE_INC = 18573\nVENDOR_ID_HUSH_COMMUNICATIONS_CANADA_INC = 18574\nVENDOR_ID_SAGEM_MORPHO_INC = 18575\nVENDOR_ID_TYPOSIGN_AG = 18576\nVENDOR_ID_CONTEMPORARY_CYBERNETICS_GROUP_INC = 18577\nVENDOR_ID_EARDOWN = 18578\nVENDOR_ID_CLEAR_EDGE_NETWORKS_LLC = 18579\nVENDOR_ID_WHETSTONE_SOFTWARE = 18580\nVENDOR_ID_SPD_BUNDESTAGSFRAKTION = 18581\nVENDOR_ID_SLACK_LTD = 18582\nVENDOR_ID_BIT_9_INC = 18583\nVENDOR_ID_AVANEX_CO = 18584\nVENDOR_ID_GUANGDONG_POSON_COMPANYLTD = 18585\nVENDOR_ID_BBASSETTNET = 18586\nVENDOR_ID_FORTESS_LTD = 18587\nVENDOR_ID_MEKHANIKA_SERVICE_LTD = 18588\nVENDOR_ID_GLOBETOM_PTY_LTD = 18589\nVENDOR_ID_STERCI_SA = 18590\nVENDOR_ID_HORUS_HARDWARE_SA = 18591\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_MILANO_BICOCCA = 18592\nVENDOR_ID_MINISTRY_OF_FINANCE_TAX_ADMINISTRATION_OF_THE_REPUBLIC_OF_SLOVENIA = 18593\nVENDOR_ID_GLOBALVISION_MEDIA = 18594\nVENDOR_ID_BERUFSBILDENDE_SCHULEN_I_UELZEN = 18595\nVENDOR_ID_PROFESSIONAL_COMPUTERS_SERVICES_ORGANIZATION = 18596\nVENDOR_ID_HELIOS_SOFTWARE_GMBH = 18597\nVENDOR_ID_FIREBOX_INTERNET_TECHNOLOGIES = 18598\nVENDOR_ID_FACHHOCHSCHULE_HAGENBERG = 18599\nVENDOR_ID_MARZEK_ETIKETTEN_GMBH = 18600\nVENDOR_ID_BLUE_MOUNTAINS_GRAMMER_SCHOOL = 18601\nVENDOR_ID_MEDIAZEN_CORP = 18602\nVENDOR_ID_POWERCN = 18603\nVENDOR_ID_DELTA_ES_AS = 18604\nVENDOR_ID_RIS_GMBH = 18605\nVENDOR_ID_ORBITEL_INC = 18606\nVENDOR_ID_KLM_ROYAL_DUTCH_AIRLINES = 18607\nVENDOR_ID_SYNLOGIC_AG = 18608\nVENDOR_ID_JPDIAS_SERVIOS_DE_INFORMATICA_LTD = 18609\nVENDOR_ID_UNIVERSITY_AT_BUFFALO = 18610\nVENDOR_ID_ALENIA_SPAZIO_SPA = 18611\nVENDOR_ID_SMSPUNDITCOM = 18612\nVENDOR_ID_CGL_CONSULTING = 18613\nVENDOR_ID_ALBERT_WHITE_TECHNOLOGIES = 18614\nVENDOR_ID_NORTH_AMERICAN_NETWORKS_CORPORATION = 18615\nVENDOR_ID_NEXTWLAN_CORPORATION = 18616\nVENDOR_ID_TIMESTOCK_INC = 18617\nVENDOR_ID_PUBLI_VAN_DYCK_NV = 18618\nVENDOR_ID_WEB_M_GBR = 18619\nVENDOR_ID_JAW_NETWORKS = 18620\nVENDOR_ID_HINSON_AND_ASSOCIATES = 18621\nVENDOR_ID_K_N_A_LTD = 18622\nVENDOR_ID_MICRO_SYSTEMS = 18623\nVENDOR_ID_LEHRSTUHL_FUER_TECHNISCHE_DIENSTLEISTUNGEN = 18624\nVENDOR_ID_UNIVISION_CANADA_LTD = 18625\nVENDOR_ID_UNET_BV = 18626\nVENDOR_ID_BAKASQUARED = 18627\nVENDOR_ID_MICROELECTRONICS_TECHNOLOGY_INC = 18628\nVENDOR_ID_ICLASS_CO_LTD = 18629\nVENDOR_ID_REEUENTA_DESIGN_SERVICE_TAIWAN_LTD = 18630\nVENDOR_ID_DARG = 18631\nVENDOR_ID_SA_SST_INFORMATIQUE = 18632\nVENDOR_ID_STATER = 18633\nVENDOR_ID_ADVANCED_SOFTWARE_PRODUCTION_LINE_SL = 18634\nVENDOR_ID_M_OTION_GMBH = 18635\nVENDOR_ID_UVT_SRO = 18636\nVENDOR_ID_JNS_INC = 18637\nVENDOR_ID_AVEDYA = 18638\nVENDOR_ID_KINNIKINNICK_FOODS_INC = 18639\nVENDOR_ID_DIGITAL_ENVOY_INC = 18640\nVENDOR_ID_ROYAL_MILITARY_COLLEGE_OF_CANADA = 18641\nVENDOR_ID_CC_POWER_INC = 18642\nVENDOR_ID_MONTGOMERY_COUNTY_GOVERNMENT = 18643\nVENDOR_ID_DANIEL_SKADLUBOWICZ = 18644\nVENDOR_ID_CESART_CREATION_INC = 18645\nVENDOR_ID_ELECTRIC_MAIL_CO = 18646\nVENDOR_ID_DEXTER_COMMUNICATIONS_INC = 18647\nVENDOR_ID_HTU_GRAZ = 18648\nVENDOR_ID_MAGNETCH_AG = 18649\nVENDOR_ID_PROJECTIONDESIGN_AS = 18650\nVENDOR_ID_GLANCE_AG = 18651\nVENDOR_ID_ZENTRUM_FR_BIOINFORMATIK_HAMBURG = 18652\nVENDOR_ID_ERAIA_SRL = 18653\nVENDOR_ID_SCOTTISH_POLICE_AUTHORITY_FORMERLY_CENTRAL_SCOTLAND_POLICE = 18654\nVENDOR_ID_IUNDS_AG = 18655\nVENDOR_ID_AIRRUNNER_TECHNOLOGIES = 18656\nVENDOR_ID_GOLDENGATE_SOFTWARE_INC = 18657\nVENDOR_ID_XCITEL_LTD = 18658\nVENDOR_ID_CHUNG_HUA_UNIVERSITY = 18659\nVENDOR_ID_WEBKMS = 18660\nVENDOR_ID_ELITECH_INFORMATION_TECHNOLOGY_COLTD = 18661\nVENDOR_ID_MATHIAS_KETTNER = 18662\nVENDOR_ID_LAAKIRCHEN_PAPIER_AG = 18663\nVENDOR_ID_IPNP = 18664\nVENDOR_ID_AXELERO_INTERNET_SZOLGLTAT_RT = 18665\nVENDOR_ID_PAYROLL_SWEDEN_AB = 18666\nVENDOR_ID_HBWARE = 18667\nVENDOR_ID_FRESHMEATNET_PART_OF_OSDN_INC = 18668\nVENDOR_ID_MEMORIAL_HERMANN_HEALTHCARE_SYSTEM = 18669\nVENDOR_ID_GENERAL_ATOMICS = 18670\nVENDOR_ID_KNOVATIVE_INC = 18671\nVENDOR_ID_SECURED_COMPUTER_CONCEPTS = 18672\nVENDOR_ID_WEBJORN_DATA_NATVERKSKONSULT = 18673\nVENDOR_ID_TELECOMSOFTWARE = 18674\nVENDOR_ID_STRATEGY_TECHNOLOGY_LTD = 18675\nVENDOR_ID_LEOFOO_DEVELOPMENT_CO_LTD = 18676\nVENDOR_ID_DATENZENTRALE_BADEN_WUERTTEMBERG = 18677\nVENDOR_ID_WINSTON_INDUSTRIES = 18678\nVENDOR_ID_BEHR_INTERNET_SOLUTIONS_INC = 18679\nVENDOR_ID_CON_EDISON_COMMUNICATIONS = 18680\nVENDOR_ID_TRAVELPING_GMBH = 18681\nVENDOR_ID_DR_BRUNTHALER_IITECH_GMBH = 18682\nVENDOR_ID_CJ_LTD = 18683\nVENDOR_ID_DAVEY_CONTROL_SYSTEMS = 18684\nVENDOR_ID_PORTAL_MNCHEN_GMBH_CO_KG = 18685\nVENDOR_ID_INCONTROL_TECHNOLOGY_INC = 18686\nVENDOR_ID_INFORMATION_FLOW = 18687\nVENDOR_ID_IUTV_LTD = 18688\nVENDOR_ID_NEONETIX_LLC = 18689\nVENDOR_ID_HEALTHLINK_LIMITED = 18690\nVENDOR_ID_BUSSI = 18691\nVENDOR_ID_KATANA_TECHNOLOGY_INC = 18692\nVENDOR_ID_NDS_MEDIA_SOLUTIONS = 18693\nVENDOR_ID_ISOMETRYNET = 18694\nVENDOR_ID_SOLUCIONES_TELEMATICAS_AVANZADAS_SL = 18695\nVENDOR_ID_IDIOM_COMMUNICATIONS_LLC = 18696\nVENDOR_ID_IVRS_INTERNATIONAL_LIMITED = 18697\nVENDOR_ID_TONGHUA_WANGHANG_INFORMATION_TECHNOLOGY_COLTD = 18698\nVENDOR_ID_DAPYXIS_NETWORK_LIMITED = 18699\nVENDOR_ID_ACOM_COLTD = 18700\nVENDOR_ID_MINPLAN = 18701\nVENDOR_ID_REUTERS_SA = 18702\nVENDOR_ID_SIIX_DOO = 18703\nVENDOR_ID_INSTITUTE_OF_MATHEMATICS_OF_THE_ROMANIAN_ACADEMY = 18704\nVENDOR_ID_DYNAMIX_PROMOTIONS_LIMITED = 18705\nVENDOR_ID_CORPORACION_ACEROS_AREQUIPA_SA = 18706\nVENDOR_ID_MUSKINGUM_COLLEGE = 18707\nVENDOR_ID_GUARDIUM_INC = 18708\nVENDOR_ID_INOTESKA_SRO = 18709\nVENDOR_ID_KAYTEC_LTD = 18710\nVENDOR_ID_BURGER_KNOWLEDGE_CONSULTANCY = 18711\nVENDOR_ID_AJIN_TECHLINE_CO_LTD = 18712\nVENDOR_ID_FH_JOANNEUM_GESELLSCHAFT_MBH = 18713\nVENDOR_ID_LANZHOU_UNIVERSITY_OF_TECHNOLOGY = 18714\nVENDOR_ID_GRAND_ELECTRONIC_COLTD = 18715\nVENDOR_ID_GRAND_ELECTRONIC_COLTD_2 = 18716\nVENDOR_ID_UCB_SA_NV = 18717\nVENDOR_ID_ASSOCIATION_OF_HELLENIC_INTERNET_USERS = 18718\nVENDOR_ID_O2_LTD = 18719\nVENDOR_ID_FARSITE_COMMUNICATIONS_LIMITED = 18720\nVENDOR_ID_EMICT_LTD = 18721\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_PARANA = 18722\nVENDOR_ID_DIGICAST_NETWORKS_INC = 18723\nVENDOR_ID_EDJ_ENTERPRISES_INC = 18724\nVENDOR_ID_PAYCOM_BILLING_SERVICES_INC = 18725\nVENDOR_ID_ISALA_KLINIEKEN = 18726\nVENDOR_ID_APOLLO_GROUP_INC = 18727\nVENDOR_ID_UNASSIGNED_27 = 18728\nVENDOR_ID_RB_HOLDINGS = 18729\nVENDOR_ID_CA_SRL = 18730\nVENDOR_ID_INGENIERIA_DE_SISTEMAS_MULTIAGENTE_SL = 18731\nVENDOR_ID_HORNER_BROTHERS_PRINT_GROUP = 18732\nVENDOR_ID_MAGNIFIRE_NETWORKS = 18733\nVENDOR_ID_WILDHER_ICT_SOLUTIONS = 18734\nVENDOR_ID_HAYES_LEMMERZ_INTERNATIONAL = 18735\nVENDOR_ID_ERTIUS_CONSULTING = 18736\nVENDOR_ID_NORTHROP_GRUMMAN_2 = 18737\nVENDOR_ID_DJE = 18738\nVENDOR_ID_CRAFTANALOGY_INC = 18739\nVENDOR_ID_J_S_THROWER_AND_ASSOCIATES_LTD = 18740\nVENDOR_ID_LEURCK_SOFTWARE = 18741\nVENDOR_ID_SACEM = 18742\nVENDOR_ID_ENTRADA_INTERNET_SYSTEMS_INC = 18743\nVENDOR_ID_IDEA_TEC_SAHAR_ITS_LTD = 18744\nVENDOR_ID_ERANET_SRL = 18745\nVENDOR_ID_MATSUSHITA_ELECTRIC_EUROPE = 18746\nVENDOR_ID_AMERICAN_FIBERTEK_INC = 18747\nVENDOR_ID_ENGELSCHALL = 18748\nVENDOR_ID_THE_OPENPKG_PROJECT = 18749\nVENDOR_ID_SOLAR = 18750\nVENDOR_ID_IPDELIVER_INC = 18751\nVENDOR_ID_FINANCIAL_ENGINES_INC = 18752\nVENDOR_ID_ADELPHIA_COMMUNICATIONS = 18753\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_PARKSIDE = 18754\nVENDOR_ID_MAVRIQ_TECHNOLOGIES_LLC = 18755\nVENDOR_ID_MICHAL_CHARVAT = 18756\nVENDOR_ID_UNITED_SYSTEMS_ACCESS_INC = 18757\nVENDOR_ID_STORDYNE_CORPORATION = 18758\nVENDOR_ID_NETLINK_TECHNOLOGY_LTD = 18759\nVENDOR_ID_GUANGDONG_ELECTRONIC_CERTIFICATION_AUTHORITY = 18760\nVENDOR_ID_REGAL_CYBER_LIMITED = 18761\nVENDOR_ID_SUMTECH_INC = 18762\nVENDOR_ID_THENETWERK = 18763\nVENDOR_ID_COMTEL_ELECTRONICS_GMBH = 18765\nVENDOR_ID_PROCITEC_GMBH = 18766\nVENDOR_ID_KABA_MANAGEMENT_CONSULTING_AG = 18767\nVENDOR_ID_VIRTUAL_ROYAL_DANISH_AIR_FORCE = 18768\nVENDOR_ID_UNIVERSITY_COMPUTER_CENTER_URC_BANJA_LUKA = 18769\nVENDOR_ID_SUNCOM_SYSTEMS = 18770\nVENDOR_ID_THE_SALVAGE_ASSOCIATION = 18771\nVENDOR_ID_MICROBUS_PLC = 18772\nVENDOR_ID_INTERNET_CREATION_COLTD = 18773\nVENDOR_ID_BANCA_MONTE_DEI_PASCHI_DI_SIENA_SPA = 18774\nVENDOR_ID_NEURONENWERK = 18775\nVENDOR_ID_EACCELERATION_CORP = 18776\nVENDOR_ID_THOMAS_LUZAT_IT_SERVICES = 18777\nVENDOR_ID_ARCANE_NETWORKS = 18778\nVENDOR_ID_SYNERGY_INFORMATION_SERVICES_INC = 18779\nVENDOR_ID_ANSES = 18780\nVENDOR_ID_ZAGAMMA_LABS = 18781\nVENDOR_ID_ROZHLEDCZ = 18782\nVENDOR_ID_INTERWOVEN_INC = 18783\nVENDOR_ID_GREAT_CLIPS_INC = 18784\nVENDOR_ID_COLLATION_INC = 18785\nVENDOR_ID_GLOBAL_ARTS = 18786\nVENDOR_ID_CLUBHAUS_PLC = 18787\nVENDOR_ID_MYNYM = 18788\nVENDOR_ID_PRO_QC_INTERNATIONAL_LTD = 18789\nVENDOR_ID_ECGUARD_TECHNOLOGY_CO_LTD = 18790\nVENDOR_ID_CHATCHALERM_NAMWONGPROM = 18791\nVENDOR_ID_HORIBA_EUROPE_AUTOMATION_DIVISION_GMBH = 18792\nVENDOR_ID_NORSKE_SKOGINDUSTRIER_ASA = 18793\nVENDOR_ID_UNI_REGENSBURG = 18794\nVENDOR_ID_ASPLINUX = 18795\nVENDOR_ID_HORIZONNET_SA = 18796\nVENDOR_ID_LUNICS_GMBH = 18797\nVENDOR_ID_DIGITAL_DESIGN_GMBH = 18798\nVENDOR_ID_LAYER14 = 18799\nVENDOR_ID_WRK_COMPUTER_SYSTEMS = 18800\nVENDOR_ID_FORREST_ALDRICH = 18801\nVENDOR_ID_AUCONET_GMBH = 18802\nVENDOR_ID_MEDCOM_SP_Z_OO = 18803\nVENDOR_ID_ADVISEC_AB = 18804\nVENDOR_ID_STRUKTUUR_MEEDIA = 18805\nVENDOR_ID_CALM_COMPUTER_CORP = 18806\nVENDOR_ID_MAPLE_NETWORKS_COLTD = 18807\nVENDOR_ID_GRADUATE_INSTITUTE_OF_INTERNATIONAL_AND_DEVELOPMENT_STUDIES = 18808\nVENDOR_ID_NETLINK_CONSULTING_LLC = 18809\nVENDOR_ID_INOTERA_MEMORIES_INC = 18810\nVENDOR_ID_COLGATE_PALMOLIVE_COMPANY = 18811\nVENDOR_ID_SAGEWAY_COMPUTER_SOLUTIONS_PTE_LTD = 18812\nVENDOR_ID_DEMARINA_SDN_BHD = 18813\nVENDOR_ID_ROCNET_LINUX_SERVICES = 18814\nVENDOR_ID_COND_GMBH = 18815\nVENDOR_ID_ANDREA_FINO = 18816\nVENDOR_ID_ETHERNET_POWERLINK_STANDARDISATION_GROUP_EPSG = 18817\nVENDOR_ID_DINSA_SOLUCIONES = 18818\nVENDOR_ID_PARDES_GROUP_SA = 18819\nVENDOR_ID_RAMCS = 18820\nVENDOR_ID_M_WISE_UK_LTD = 18821\nVENDOR_ID_FOTEK_LTD = 18822\nVENDOR_ID_COM_PAN_SC = 18823\nVENDOR_ID_AV = 18824\nVENDOR_ID_TOPIO_INC = 18825\nVENDOR_ID_PSA_CORPORATION_LIMITED = 18826\nVENDOR_ID_LOBOK_PROJECTS = 18827\nVENDOR_ID_DANET_GMBH_2 = 18828\nVENDOR_ID_COMBOX_INTERNET_SERVICE_GMBH = 18829\nVENDOR_ID_JINGO_DIGITAL = 18830\nVENDOR_ID_INFORMAL = 18831\nVENDOR_ID_UNIVERSITT_POTSDAM = 18832\nVENDOR_ID_MICROTROL_SRL = 18833\nVENDOR_ID_COMPETITIONHILL = 18834\nVENDOR_ID_GOVERNMENT_OF_THE_DISTRICT_OF_COLUMBIA = 18835\nVENDOR_ID_FLATHEAD_VALLEY_COMMUNITY_COLLEGE = 18836\nVENDOR_ID_SPECTRACOM_CORPORATION = 18837\nVENDOR_ID_AEAT = 18838\nVENDOR_ID_DATA_CONSULTING_GROUP_INC = 18839\nVENDOR_ID_MILWAUKEE_PUBLIC_SCHOOLS = 18840\nVENDOR_ID_ACORN_PACKET_SOLUTIONS = 18841\nVENDOR_ID_LINUXLSUNGEN_MICHAEL_RLER = 18842\nVENDOR_ID_CPR_SOFTWARE_LLC = 18843\nVENDOR_ID_TRIACTA_POWER_TECHNOLOGIES_INC = 18844\nVENDOR_ID_ECARTSOFTCOM = 18845\nVENDOR_ID_STATE_OF_TENNESSEE = 18846\nVENDOR_ID_OBJECTPARK_SOFTWARE_GBR = 18847\nVENDOR_ID_UIS_ABLER_ELECTRONICS_CORP_LTD = 18848\nVENDOR_ID_ONEDATACENTRAL = 18849\nVENDOR_ID_COSYSTEMS_INC = 18850\nVENDOR_ID_ASSOCIATION_DSPNET = 18851\nVENDOR_ID_GERDES_AKTIENGESELLSCHAFT = 18852\nVENDOR_ID_EURILOGIC_TECHNOLOGIES = 18853\nVENDOR_ID_AXILIANCE = 18854\nVENDOR_ID_BEIJING_FIBRIDGE_CO_LTD = 18855\nVENDOR_ID_MONITOR_ELECTRONICS_LTD = 18856\nVENDOR_ID_DH_COMPUTERSYSTEME = 18857\nVENDOR_ID_RDR_TECHNOLOGIES_LLC = 18858\nVENDOR_ID_PAX_AG = 18859\nVENDOR_ID_FRIENDS_OF_THE_EARTH_INTERNATIONAL = 18860\nVENDOR_ID_EDUCATIONAL_STANDARDS_AND_CERTIFICTATIONS_INC = 18861\nVENDOR_ID_WILLMEDIA_CORP = 18862\nVENDOR_ID_SISTERS_OF_CHARITY_HEALTH_SERVICE = 18863\nVENDOR_ID_TOURING_CLUB_SUISSE_TCS = 18864\nVENDOR_ID_TURUNCH_TECHNOLOGIES = 18865\nVENDOR_ID_WHITE_STOVER_INNOVATIONS_LLC = 18866\nVENDOR_ID_MEETINGHOUSE_DATA_COMMUNICATIONS = 18867\nVENDOR_ID_INTERNICHE_TECHNOLOGIES_INC = 18868\nVENDOR_ID_UNIVERSITY_OF_HELSINKI = 18869\nVENDOR_ID_OPSPOINT = 18870\nVENDOR_ID_FIRSTATTRIBUTE_AG = 18871\nVENDOR_ID_THE_GROOVY_CORPORATION = 18872\nVENDOR_ID_WORKS_OPERATING_COMPANY = 18873\nVENDOR_ID_S_S_PROFESSIONALS_INC = 18874\nVENDOR_ID_SCORPION_SOFTWARE_CORP = 18875\nVENDOR_ID_TEVRON_LLC = 18876\nVENDOR_ID_DARWIN_SOLUTIONS_LLC = 18877\nVENDOR_ID_ASSCHEM = 18878\nVENDOR_ID_LINUXHEAVEN = 18879\nVENDOR_ID_AMERICAN_MUSEUM_OF_NATURAL_HISTORY = 18880\nVENDOR_ID_PROMETEIA_SRL = 18881\nVENDOR_ID_ADVENTIST_INTERNATIONAL_INSTITUTE_OF_ADVANCED_STUDIES_AIIAS = 18882\nVENDOR_ID_PROJEKTGROUP_LDAP_UNIVERSITY_OF_SIEGEN = 18883\nVENDOR_ID_SHANGHAI_SANSI_TECHNOLOGY_CO_LTD = 18884\nVENDOR_ID_GEEKSPL = 18885\nVENDOR_ID_PFU_LIMITED = 18886\nVENDOR_ID_UNIVERSITY_OF_MASSACHUSETTS_BOSTON_CPCS = 18887\nVENDOR_ID_GUOXIN_TELECOM_SYSTEM_LTD = 18888\nVENDOR_ID_ARHANGELSK_TELEVISION_COMPANY_LTD = 18889\nVENDOR_ID_INTEGRATED_COMMUNICATION_TECHNOLOGIES = 18890\nVENDOR_ID_THE_CLOSED_JOINT_STOCK_COMPANY_DELTABANK = 18891\nVENDOR_ID_GEMMA_SYSTEMS_SPOL_S_RO = 18892\nVENDOR_ID_SMS_SIEMAG_AG = 18893\nVENDOR_ID_TECHNISCHE_FACHHOCHSCHULE_WILDAU = 18894\nVENDOR_ID_MORAVSKA_ZEMSKA_KNIHOVNA = 18895\nVENDOR_ID_ESILOG_CONSULTING_SL = 18896\nVENDOR_ID_CELLOPOINT_INTERNATIONAL_CORPORATION = 18897\nVENDOR_ID_FREIE_UNIVERSITAET_BERLIN_FU_BERLIN = 18898\nVENDOR_ID_ISVARA = 18899\nVENDOR_ID_EVOSOFT_GMBH = 18900\nVENDOR_ID_CAPITAL_LEASE_GMBH = 18901\nVENDOR_ID_AETAT = 18902\nVENDOR_ID_MANDOZZI_ELETTRONICA_SA = 18903\nVENDOR_ID_PROPYLON = 18904\nVENDOR_ID_TOTAL_CARD_INC = 18905\nVENDOR_ID_STEFI = 18906\nVENDOR_ID_PIRONET_NDH_AG = 18907\nVENDOR_ID_INPRIVA_INC = 18908\nVENDOR_ID_SERVICE_MANAGEMENT_SOFTWARE = 18909\nVENDOR_ID_BOMBARDIER_TRANSPORTATION_INC = 18910\nVENDOR_ID_PROFESSIONAL_DATA_MANAGEMENT_AGAIN_INC = 18911\nVENDOR_ID_N_ABLE_TECHNOLOGIES_INC = 18912\nVENDOR_ID_STATNA_POKLADNICA = 18913\nVENDOR_ID_EMPNEUSIS_INTERNET_SERVICES = 18914\nVENDOR_ID_NAUTRONIX_LTD = 18915\nVENDOR_ID_SHANGHAI_TRANSENGINES_TECHNOLOGIES_COLTD = 18916\nVENDOR_ID_SHANGHAI_FUTURES_EXCHANGE = 18917\nVENDOR_ID_BRINGE_INFORMATIONSTECHNIK_GMBH = 18918\nVENDOR_ID_ALFA21_OUTSOURCING_SL = 18919\nVENDOR_ID_AGENCIA_NOTARIAL_DE_CERTIFICACION = 18920\nVENDOR_ID_NEXTIRAONE_DEUTSCHLAND_GMBH = 18921\nVENDOR_ID_TRELLIS_TECNOLOGIA_LTDA = 18922\nVENDOR_ID_YAMAGUCHI_UNIVERSITY = 18923\nVENDOR_ID_RELSTON_CONSULTING_LIMITED = 18924\nVENDOR_ID_PRIOR = 18925\nVENDOR_ID_JTT_NOVEL_IL = 18926\nVENDOR_ID_TANDAV_ENTERPRISES = 18927\nVENDOR_ID_ARECA_TECHNOLOGY_CORPORATION = 18928\nVENDOR_ID_INTERWISE_INC = 18929\nVENDOR_ID_SKYXORG = 18930\nVENDOR_ID_DAVELINUX = 18931\nVENDOR_ID_NAEILNET_INC = 18932\nVENDOR_ID_ACTIVNETWORKS = 18933\nVENDOR_ID_VIVEX_GMBH = 18934\nVENDOR_ID_ESSEX_ELECTRONICS_INC = 18935\nVENDOR_ID_NATIONAL_INSTITUTE_OF_ADVANCED_INDUSTRIAL_SCIENCE_AND_TECHNOLOGY = 18936\nVENDOR_ID_LYNK_2 = 18937\nVENDOR_ID_RUBIX_INFORMATION_TECHNOLOGIES_INC = 18938\nVENDOR_ID_RETAIL_DECISIONS_INC = 18939\nVENDOR_ID_KRISTOPHER_JOHNSON_CONSULTING = 18940\nVENDOR_ID_VERMONT_STATE_COLLEGES = 18941\nVENDOR_ID_LIQUID_COMPUTING_CORPORATION = 18942\nVENDOR_ID_HEALTHPARTNERS = 18943\nVENDOR_ID_NETHYPE_GMBH = 18944\nVENDOR_ID_DYNAMIC_INFOSYSTEMS_LTD = 18945\nVENDOR_ID_DIGITAL_SPECIES_LTD = 18946\nVENDOR_ID_CANOPEE_SECURITY = 18947\nVENDOR_ID_SONATEL_MULTIMDIA = 18948\nVENDOR_ID_GOLDEN_EAGLE_ENTERPRISES_LTD = 18949\nVENDOR_ID_LAN_FORCE_INC = 18950\nVENDOR_ID_FAST_LANE_INSTITUTE_FOR_KNOWLEDGE_TRANSFER_GMBH = 18951\nVENDOR_ID_PRUDENTIAL_FINANICAL = 18952\nVENDOR_ID_ALTKOM_AKADEMIA_SA = 18953\nVENDOR_ID_BRANDYWINE_COMMUNCIATIONS = 18954\nVENDOR_ID_DIGITAL_IDENTITY_LTD = 18955\nVENDOR_ID_TRUSTED_NETWORK_TECHNOLOGIES_INC = 18956\nVENDOR_ID_ROBERTS_COMPUTER_ELECTRICAL_SERVICE = 18957\nVENDOR_ID_EZNETSOFT = 18958\nVENDOR_ID_SICHUAN_NORMAL_UNIVERSITY = 18959\nVENDOR_ID_LARSEN_TOUBRO_INFOTECH_LTD = 18960\nVENDOR_ID_AUDITOR_REVIZIJSKA_DRUZBA_DOO_PTUJ = 18961\nVENDOR_ID_LRP = 18962\nVENDOR_ID_EDN_SOVINTEL = 18963\nVENDOR_ID_ELEKTRONIK_HENGARTNER_AG = 18964\nVENDOR_ID_NETYANTRA_INC = 18965\nVENDOR_ID_UNASSIGNED_28 = 18966\nVENDOR_ID_OXFORD_COUNTY_TELEPHONE_AND_TELEGRAPH_COMPANY = 18967\nVENDOR_ID_012_GOLDENLINES_LTD = 18968\nVENDOR_ID_UNIVERSITY_OF_MARYLAND_BALTIMORE = 18969\nVENDOR_ID_EXPERT_SA = 18970\nVENDOR_ID_GS_SISTEMAS_DE_INFORMACIN_SL = 18971\nVENDOR_ID_PANAMA_CANAL_AUTHORITY = 18972\nVENDOR_ID_TUXICNL = 18973\nVENDOR_ID_UNIVERSAL_BUSINESS_MATRIX_LLC = 18974\nVENDOR_ID_BRG16 = 18975\nVENDOR_ID_BADGER_ALARM_AND_CONTROL_LLC = 18976\nVENDOR_ID_NIC_IQ_LTD = 18977\nVENDOR_ID_CXO_SYSTEMS_INC = 18978\nVENDOR_ID_EVERYWHERECOMMUNICATIONSNET = 18979\nVENDOR_ID_CYPAK_AB = 18980\nVENDOR_ID_RESERVED_3 = 18981\nVENDOR_ID_LINK_YUG_LTD = 18982\nVENDOR_ID_AOK_SACHSEN = 18983\nVENDOR_ID_MAGOS_CONSULTING_LTD = 18984\nVENDOR_ID_INSINOVA_AG = 18985\nVENDOR_ID_FLEETBOSTON_FINANCIAL_CORPORATION = 18986\nVENDOR_ID_RALF_MEISTER = 18987\nVENDOR_ID_SHANGHAI_EASTIMAGE_EQUIPMENTS_COLTD = 18988\nVENDOR_ID_DAY_DREAMS_AND_INFORMATION_TECHNOLOGIES = 18989\nVENDOR_ID_CNC_AS = 18990\nVENDOR_ID_IOP_PUBLISHING_LTD = 18991\nVENDOR_ID_WEBFORCE_GMBH = 18992\nVENDOR_ID_OBJECTFUSION_LLC = 18993\nVENDOR_ID_OLIX = 18994\nVENDOR_ID_COMMSPEED_LLC = 18995\nVENDOR_ID_GLOBIX_CORPORATION = 18996\nVENDOR_ID_IBRIX_CORP = 18997\nVENDOR_ID_REDSTONE_CONSULTING_LLC = 18998\nVENDOR_ID_HEALTH_MANAGEMENT_CORPORATION = 18999\nVENDOR_ID_DONGYANG_TELECOM_LTD = 19000\nVENDOR_ID_RESEARCH_CENTER_OF_COMPUTATIONAL_MECHANICS_INC = 19001\nVENDOR_ID_SUN_YAT_SEN_ZHONGSHAN_UNIVERSITY = 19002\nVENDOR_ID_SENASNET = 19003\nVENDOR_ID_CREATIONPOINT_SYSTEMS_INC = 19004\nVENDOR_ID_ADYTUMSOLUTIONS_INC = 19005\nVENDOR_ID_POLISH_PROFESSIONAL_PUBLISHERS_LTD = 19006\nVENDOR_ID_3C_SYSTEMS_OY = 19007\nVENDOR_ID_GATEHOUSE = 19008\nVENDOR_ID_CLEVER_IT_DI_IVAN_RAIMONDI = 19009\nVENDOR_ID_BLUETOP_TECHNOLOGY_CO_LTD = 19010\nVENDOR_ID_JACARTA_LTD = 19011\nVENDOR_ID_NET_EVIDENCE_SLM_LTD = 19012\nVENDOR_ID_SONARIO = 19013\nVENDOR_ID_MAGIX_SRO = 19014\nVENDOR_ID_OULMANORG = 19015\nVENDOR_ID_SCHOLL_CONSULTING = 19016\nVENDOR_ID_XTEND_CONSULTING_LLC = 19017\nVENDOR_ID_DANDRE = 19018\nVENDOR_ID_COASTAL_CAROLINA_UNIVERSITY = 19019\nVENDOR_ID_RYANSCOOL = 19020\nVENDOR_ID_ENSEMBLE_DESIGNS_INC = 19021\nVENDOR_ID_INVOCOM_LTD = 19022\nVENDOR_ID_LMU = 19023\nVENDOR_ID_BIXBY_TELEPHONE_COMPANY = 19024\nVENDOR_ID_OSLINK_SPOLKA_Z_OO = 19025\nVENDOR_ID_DIRK_GORNY_UNTERNEHMENSBERATUNG = 19026\nVENDOR_ID_TRIAWORKS_INC = 19027\nVENDOR_ID_SPUTNIK_INC = 19028\nVENDOR_ID_NITTOTSUSHINKI_COLTD = 19029\nVENDOR_ID_SUVA = 19030\nVENDOR_ID_LOGIN_SC_GMBH = 19031\nVENDOR_ID_APOLLIS_AG = 19032\nVENDOR_ID_MONIFORCE_BV = 19033\nVENDOR_ID_3SP_INVESTIGAO_E_DESENVOLVIMENTO_DE_TECNOLOGIAS_LDA = 19034\nVENDOR_ID_OMNIREI_SRL = 19035\nVENDOR_ID_ETHERBOOT_PROJECT = 19036\nVENDOR_ID_BOLSA_NACIONAL_DE_VALORES_2 = 19037\nVENDOR_ID_WEBNET_LTD = 19038\nVENDOR_ID_NATIONAL_RESEARCH_CENTER_FOR_HIGH_PERFORMACE_COMPUTERS = 19039\nVENDOR_ID_TRUSTED_COMPUTER_SOLUTIONS_INC = 19040\nVENDOR_ID_APPARENT_NETWORKS_INC = 19041\nVENDOR_ID_ACBR_COMPUTADORES_LTDA = 19042\nVENDOR_ID_XITRUST_SECURE_TECHNOLOGIES_GMBH = 19043\nVENDOR_ID_JSC_KREDYT_BANK_UKRAJINA = 19044\nVENDOR_ID_MYNETWORK_SYSTEM_COLTD = 19045\nVENDOR_ID_LENOVO_ENTERPRISE_BUSINESS_GROUP = 19046\nVENDOR_ID_MAGEREALM_ENTERPRISES = 19047\nVENDOR_ID_FAMBUS = 19048\nVENDOR_ID_SCALIX_CORPORATION = 19049\nVENDOR_ID_CONCHIS_LLC = 19050\nVENDOR_ID_MARTIN_THORPE = 19051\nVENDOR_ID_SEEKAMP_ENTERPRISES = 19052\nVENDOR_ID_KUBOTEK_CORPORATION = 19053\nVENDOR_ID_INTRAPERSON = 19054\nVENDOR_ID_NAVISCAN_PET_SYSTEMS_INC = 19055\nVENDOR_ID_ACCESS_COMPUTECH_PVT_LTD = 19056\nVENDOR_ID_EXAVIO_INC = 19057\nVENDOR_ID_BISON_SYSTEMS_AG = 19058\nVENDOR_ID_MORECOM_A_S = 19059\nVENDOR_ID_UXCOMM = 19060\nVENDOR_ID_WERNER_WIETHEGE = 19061\nVENDOR_ID_TUXEE_NETWORK = 19062\nVENDOR_ID_ALTERLANE = 19063\nVENDOR_ID_BUREAU_INGNIERIE_RICHARD_DOMON_SA = 19064\nVENDOR_ID_PETIT_FR = 19065\nVENDOR_ID_MACNETIX_OHG = 19066\nVENDOR_ID_UNIVERSIDADE_CATLICA_PORTUGUESA = 19067\nVENDOR_ID_TRAVEL_ONLY = 19068\nVENDOR_ID_XENOCASTLE = 19069\nVENDOR_ID_KEVCOM_MICROSOLUTIONS = 19070\nVENDOR_ID_I_ASSURE = 19071\nVENDOR_ID_MAGNASYNC = 19072\nVENDOR_ID_SUNDOWNER_TRAILERS_INC = 19073\nVENDOR_ID_FIDELIS_SECURITY_SYSTEMS_INC = 19074\nVENDOR_ID_POTNA_BANKA_SLOVENIJE_D_D = 19075\nVENDOR_ID_XENOCASTLE_2 = 19076\nVENDOR_ID_XING_LAB = 19077\nVENDOR_ID_FUJITSU_COMPONENT_LIMITED = 19078\nVENDOR_ID_SILICON_DATA_INTERNATIONAL_CO_LTD = 19079\nVENDOR_ID_TSUKASA_ENTERPRISE = 19080\nVENDOR_ID_WUHAN_JETWAY_INFORMATION_SECURITY_INDUSTRY_COLTD = 19081\nVENDOR_ID_VOELCKER_INFORMATIK_AG = 19082\nVENDOR_ID_ALBANET_LTD = 19083\nVENDOR_ID_MIMIC_PRODUCTIONS = 19084\nVENDOR_ID_THE_DAVIDGE_GROUP = 19085\nVENDOR_ID_MAYTECH_PUBLISHING_LTD = 19086\nVENDOR_ID_NTX_BACKOFFICE_CONSULTING_GROUP_GMBH = 19087\nVENDOR_ID_MAERSK_DATA_SPECTIVE = 19088\nVENDOR_ID_INFORORG_INC_TAIWAN = 19089\nVENDOR_ID_BERNHARD_RIEMANN_GYMNASIUM_SCHARNEBECK = 19090\nVENDOR_ID_NUGENESIS_TECHNOLOGIES_INC = 19091\nVENDOR_ID_EXA_NETWORKS_LTD = 19092\nVENDOR_ID_HOFSVANG = 19093\nVENDOR_ID_PEERVUE_LLC = 19094\nVENDOR_ID_TIL_SOLUTIONS_INC = 19095\nVENDOR_ID_INFO2CELLCOM_FZ_LLC = 19096\nVENDOR_ID_DEFAULTCITY = 19097\nVENDOR_ID_PAL_COMMUNICATIONS = 19098\nVENDOR_ID_WHITEWATER_MOBILE_LLC = 19099\nVENDOR_ID_OHANA_WIRELESS_INCORPORATED = 19100\nVENDOR_ID_VOUCH_INTEGRATED_TECHNOLOGIES_P_LTD = 19101\nVENDOR_ID_KARLSRUHER_LEBENSVERSICHERUNG_AG = 19102\nVENDOR_ID_CHMS_INC = 19103\nVENDOR_ID_BOUYGUES_SA = 19104\nVENDOR_ID_FABIAN_FAGERHOLM_CONSULTING = 19105\nVENDOR_ID_DEEP_EDDY_INTERNET_CONSULTING = 19106\nVENDOR_ID_BOOJUM_MOBILE_INC = 19107\nVENDOR_ID_ITC_SOLUTIONS_PTY_LTD = 19108\nVENDOR_ID_PACKETMOTION_INC = 19109\nVENDOR_ID_CONDUIT_NETWORKS_INC = 19110\nVENDOR_ID_EBDESK_LTD = 19111\nVENDOR_ID_RJL_COMPUTER_CONSULTING_LLC = 19112\nVENDOR_ID_SERVER_PLACE_LTDA = 19113\nVENDOR_ID_PROXIMION_FIBER_SYSTEMS_AB = 19114\nVENDOR_ID_BERNHARD_RIEMANN_GYMNASIUM_SCHARNEBECK_2 = 19115\nVENDOR_ID_ANTIDOT = 19116\nVENDOR_ID_MAMM_DOO = 19117\nVENDOR_ID_EUROPLEX_TECHNOLOGIES_LTD = 19118\nVENDOR_ID_BLUE_CHIP_TECHNOLOGY_LTD = 19119\nVENDOR_ID_800ONEMAIL_INC = 19120\nVENDOR_ID_AUGMENTIX_CORPORATION = 19121\nVENDOR_ID_YANG_ARTS = 19122\nVENDOR_ID_VIRTUAL_CHARTING = 19123\nVENDOR_ID_PEXIM_DOO = 19124\nVENDOR_ID_PLANAR_SYSTEMS_INC = 19125\nVENDOR_ID_AECODI = 19126\nVENDOR_ID_SPAMPET = 19127\nVENDOR_ID_KOMKOM_ELECTRONICS = 19128\nVENDOR_ID_SANEK_SYSTEMS = 19129\nVENDOR_ID_MENUSIS_TECHNOLOGIES_PTY_LTD = 19130\nVENDOR_ID_STIFTUNG_SYNANON = 19131\nVENDOR_ID_THE_CHESHIRE_WEB_MILL = 19132\nVENDOR_ID_BAYCOM_OPOTO_ELECTRONICS_TECHNOLOGY_CO_LTD = 19133\nVENDOR_ID_TEXOCOM_INC = 19134\nVENDOR_ID_DARKERHOSTINGNET = 19135\nVENDOR_ID_TRICHORD_INC = 19136\nVENDOR_ID_SEBASTIAN_STAIGER_COMPUTER_SERVICES = 19137\nVENDOR_ID_BRIGHT_PROSPECTS_LLC = 19138\nVENDOR_ID_EDGEWATER_NETWORKS_INC = 19139\nVENDOR_ID_MATTHEW_R_WILSON = 19140\nVENDOR_ID_QUEST_SERVICED_APARTMENTS = 19141\nVENDOR_ID_CARLO_STROZZI_FORMERLY_SCRIPTAWORKS_SRL = 19142\nVENDOR_ID_SECUREAGE_TECHNOLOGY = 19143\nVENDOR_ID_ARJUNA = 19144\nVENDOR_ID_XONIX = 19145\nVENDOR_ID_JUBATUS_CORPORATION = 19146\nVENDOR_ID_UNIVERSIT_DEGLI_STUDI_DI_MILANO = 19147\nVENDOR_ID_ACTICALL = 19148\nVENDOR_ID_INNOVACIONES_MICROELECTRNICAS_SL = 19149\nVENDOR_ID_VILLE_DAULNAY_SOUS_BOIS = 19150\nVENDOR_ID_WRX_SLOVAKIA_SRO = 19151\nVENDOR_ID_CAMARGO_E_SOUZA_SC_LTDA = 19152\nVENDOR_ID_INSTITUTO_POLITCNICO_DO_PORTO = 19153\nVENDOR_ID_CORPORACION_NACIONAL_DE_ANGIOPLASTIA = 19154\nVENDOR_ID_AIRMANAGE_NETWORKS_LTD = 19155\nVENDOR_ID_CUTTING_EDGE = 19156\nVENDOR_ID_CHONGQING_CHANGSONG_NETWORK_INFORMATION_COLTD = 19157\nVENDOR_ID_PLUMSTREET_LLC = 19158\nVENDOR_ID_SHELTON_SCHOOL_DISTRICT = 19159\nVENDOR_ID_ICAT_MANAGERS_LLC = 19160\nVENDOR_ID_POSNET_SERVICES_LLC = 19161\nVENDOR_ID_EVOLVING_MEDIA_NETWORK_LLC = 19162\nVENDOR_ID_INSEN = 19163\nVENDOR_ID_INITIAL_CITY_LINK_LIMITED = 19164\nVENDOR_ID_KANTON_SOLOTHURN = 19165\nVENDOR_ID_ALSWILLE_GLOABAL_SERVICES = 19166\nVENDOR_ID_CAPMON_A_S = 19167\nVENDOR_ID_FRUNO_SA = 19168\nVENDOR_ID_VOLANTIS_SYSTEMS_LTD = 19169\nVENDOR_ID_X_TASKFORCE_SRL = 19170\nVENDOR_ID_CHECKCARE_ENTERPRISES_LLC = 19171\nVENDOR_ID_PFMNET_INC = 19172\nVENDOR_ID_REX_CONSULTING_INC = 19173\nVENDOR_ID_GESTALT_LLC = 19174\nVENDOR_ID_ORAISE_GMBH = 19175\nVENDOR_ID_SCOMCENTER = 19176\nVENDOR_ID_TANDEM_SYSTEMS_LTD = 19177\nVENDOR_ID_SKILL_CORPORATION = 19178\nVENDOR_ID_RAYSIS_COLTD = 19179\nVENDOR_ID_GUIDEWIRE_SOFTWARE_INC = 19180\nVENDOR_ID_OPTIMUM_HOLDING_INC = 19181\nVENDOR_ID_JDA_SOFTWARE = 19182\nVENDOR_ID_HERDT_DOMAIN_SERVICE = 19183\nVENDOR_ID_WIDERTHANCOM = 19184\nVENDOR_ID_LINUXCARE_LTD = 19185\nVENDOR_ID_XTRAMUS_TECHNOLOGIES = 19186\nVENDOR_ID_MEK = 19187\nVENDOR_ID_SATUNOL_MIKROSISTEM = 19188\nVENDOR_ID_SENSHU_UNIVERSITY = 19189\nVENDOR_ID_BILDANALYSSYSTEM_AB = 19190\nVENDOR_ID_WOOFERTOM_MEDIA = 19191\nVENDOR_ID_IGLOOZ_TECHNOLOGIES = 19192\nVENDOR_ID_B_NEXT_GMBH = 19193\nVENDOR_ID_INTERBYTE_BVBA = 19194\nVENDOR_ID_TRANSRADIO_SENDERSYSTEME_BERLIN_AG = 19195\nVENDOR_ID_AGARIK = 19196\nVENDOR_ID_EASTLINK_GMBH = 19197\nVENDOR_ID_ACTIV_NET_GMBH_CO_KG = 19198\nVENDOR_ID_SHC_NETZWERKTECHNIK_GMBH = 19199\nVENDOR_ID_MMG = 19200\nVENDOR_ID_OYSTER_PARTNERS_LTD = 19201\nVENDOR_ID_METO_LOGIC = 19202\nVENDOR_ID_DAI_LABOR = 19203\nVENDOR_ID_MILANO_MEDIEN_GMBH = 19204\nVENDOR_ID_SECARDEO_GMBH = 19205\nVENDOR_ID_HOLLINS_UNIVERSITY = 19206\nVENDOR_ID_GRAPHIC_MANAGEMENT_PARTNERS_INC = 19207\nVENDOR_ID_ANALYTIQ_CONSULTING_GMBH = 19208\nVENDOR_ID_CATERPILLAR_INC = 19209\nVENDOR_ID_CASSATT_CORPORATION = 19210\nVENDOR_ID_TEZ_GEORGSBERG_GMBH = 19211\nVENDOR_ID_UNIVERSITY_SYSTEM_OF_MARYLAND = 19212\nVENDOR_ID_RAINING_DATA_CORPORATION = 19213\nVENDOR_ID_OGILVY_MATHER_DEUTSCHLAND_GMBH_FORMERLY_WPP_SERVICE_GMBH_CO_KG = 19214\nVENDOR_ID_EUROPEAN_ORGANISATION_FOR_RESEARCH_AND_TREATMENT_OF_CANCER_AISBL_IVZW = 19215\nVENDOR_ID_HERINGA = 19216\nVENDOR_ID_IINET_PTY_LTD = 19217\nVENDOR_ID_FORTRESS_NETWORKS_AUST_PTY_LTD = 19218\nVENDOR_ID_PI_KAPPA_ALPHA_GAMMA_TAU = 19219\nVENDOR_ID_LOCAL_WEB_AG = 19220\nVENDOR_ID_METROPOLIS_AG = 19221\nVENDOR_ID_EUROTEK_SRL = 19222\nVENDOR_ID_INTERNAP_NETWORK_SERVICES_CORPORATION = 19223\nVENDOR_ID_OSSBROADNET_KK = 19224\nVENDOR_ID_TUMEL = 19225\nVENDOR_ID_TITANIUM = 19226\nVENDOR_ID_BLACKWOOD_MEDICAL_INC = 19227\nVENDOR_ID_FINISH_LINE_INC = 19228\nVENDOR_ID_CFOKNOWS_LLC = 19229\nVENDOR_ID_GRAPHIX_PROSE_LLC = 19230\nVENDOR_ID_LUMENWARE_LLC = 19231\nVENDOR_ID_LSC_LINUX_SUPPORT_CENTER_KFT = 19232\nVENDOR_ID_BLUE_LANE_TECHNOLOGIES_INC = 19233\nVENDOR_ID_M2 = 19234\nVENDOR_ID_SILVER_DIAMOND_SERVICES_LLP = 19235\nVENDOR_ID_CPM_SA = 19236\nVENDOR_ID_BECOM_INFORMATIONSSYSTEME_GMBH = 19237\nVENDOR_ID_MOORE_SYSTEMS_INC = 19238\nVENDOR_ID_CFSOFTWARE_INC = 19239\nVENDOR_ID_NANSHU_DENSETSU = 19240\nVENDOR_ID_CEMAPHORE_SYSTEMS_INC = 19241\nVENDOR_ID_TELLUSOFT = 19242\nVENDOR_ID_TITUS = 19243\nVENDOR_ID_SAFENET_MEDIA = 19244\nVENDOR_ID_CBPM_SOFTWARE = 19245\nVENDOR_ID_XWDL = 19246\nVENDOR_ID_ROMAT_TELECOM_LTD = 19247\nVENDOR_ID_MANIA_RESEARCH_GROUP = 19248\nVENDOR_ID_FABIANSOFT_DI_FABIANO_COPETA = 19249\nVENDOR_ID_IMAGE_SYSTEMS_CORPORATION = 19250\nVENDOR_ID_KIP_INFORMATION_NETWORK = 19251\nVENDOR_ID_NUPI_SOLUTIONS = 19252\nVENDOR_ID_JASPERT = 19253\nVENDOR_ID_DARK_BLUE_SEA = 19254\nVENDOR_ID_VACCIUS_ITSEC_PTE_LTD = 19255\nVENDOR_ID_ICADA_GMBH = 19256\nVENDOR_ID_PROSYNTIC_INGENIEURS_BV = 19257\nVENDOR_ID_LA_JOLIVERIE = 19258\nVENDOR_ID_ANSYNC_INC = 19259\nVENDOR_ID_MAGIQ_TECHNOLOGIES_INC = 19260\nVENDOR_ID_MINNEAPOLIS_COLLEGE_OF_ART_AND_DESIGN = 19261\nVENDOR_ID_DEDICADO = 19262\nVENDOR_ID_ET_VOILA = 19263\nVENDOR_ID_MAGNUS_WEIS = 19264\nVENDOR_ID_MOMENTUM_COMPUTER_INC = 19265\nVENDOR_ID_BAYERISCHES_LANDESAMT_FR_STATISTIK_UND_DATENVERARBEITUNG = 19266\nVENDOR_ID_AJUNTAMENT_DE_PALMA = 19267\nVENDOR_ID_INTERCOMP_LTD = 19268\nVENDOR_ID_HYBRIGENICS_SA = 19269\nVENDOR_ID_STORA_ENSO_OYJ = 19270\nVENDOR_ID_MINISTRE_DE_LCONOMIE_DES_FINANCES_ET_DE_LINDUSTRIE_MINEFI = 19271\nVENDOR_ID_PRAKSYS = 19272\nVENDOR_ID_TMBNET = 19273\nVENDOR_ID_SERVICES_INDUSTRIELS_DE_GENEVE = 19274\nVENDOR_ID_CONSTANT_DATA_INC = 19275\nVENDOR_ID_PAEDAGOGISCHE_HOCHSCHULE_LUDWIGSBURG = 19276\nVENDOR_ID_SHENANDOAH_SOLUTIONS_INC = 19277\nVENDOR_ID_INOV_INESC_INOVAO = 19278\nVENDOR_ID_TMBNET_2 = 19279\nVENDOR_ID_CHINA_DAILY = 19280\nVENDOR_ID_INTRASYNC_LLC = 19281\nVENDOR_ID_INSTITUTE_OF_CONTINUOUS_MEDIA_MECHANICS = 19282\nVENDOR_ID_SIBELIUS_ACADEMY = 19283\nVENDOR_ID_TGS_TELONIC_GMBH = 19284\nVENDOR_ID_BRAZILMALL_NETWORK_LTDA = 19285\nVENDOR_ID_UNIVERSIDAD_DE_LOS_ANDES = 19286\nVENDOR_ID_META_INDUSTRIESOFTWARE_GMBH = 19287\nVENDOR_ID_ECOPETROL_SA = 19288\nVENDOR_ID_3SHARP = 19289\nVENDOR_ID_JUST_AARON = 19290\nVENDOR_ID_MACRAD = 19291\nVENDOR_ID_PIREL_INC = 19292\nVENDOR_ID_DANRIVER_TECHNOLOGIES_CORPORATION_FORMERLY_SHANGHAI_JISUNG_INFORMATION_TECHNOLOGY_COLTD = 19293\nVENDOR_ID_LEAPCOMM_COMMUNICATION_TECHNOLOGIES_INC = 19294\nVENDOR_ID_KOLLE_IT_INGENIRFIRMA_APS = 19295\nVENDOR_ID_FILTERLOGIX_LLC = 19296\nVENDOR_ID_DSPACE_PTY_LTD = 19297\nVENDOR_ID_MEDIA_CRUISE_SOLUTIONS_KK = 19298\nVENDOR_ID_TURKCELL_ILETISIM_HIZMETLERI_AS = 19299\nVENDOR_ID_DEUTSCHER_SPARKASSEN_VERLAG_GMBH = 19300\nVENDOR_ID_PULSE_SOFTWARE_CONSULTING_INC = 19301\nVENDOR_ID_CRYPTCOM_SECURITIES_INC = 19302\nVENDOR_ID_ZHEJIANG_TELECOM_EQUIPMENT_FACTORY = 19303\nVENDOR_ID_BNP_PARIBAS_ARBITRAGE = 19304\nVENDOR_ID_INDIO_TECHNOLOGIES = 19305\nVENDOR_ID_FATPIPE_NETWORKS = 19306\nVENDOR_ID_MDS_INC = 19307\nVENDOR_ID_GENESEE_FREENET = 19308\nVENDOR_ID_CHANDAN = 19309\nVENDOR_ID_DHS_DATA_HARDWARE_SOFTWARE_SPOL_S_RO = 19310\nVENDOR_ID_STERLING_CRANE = 19311\nVENDOR_ID_ARCHIVAS_INC = 19312\nVENDOR_ID_BEUCH = 19313\nVENDOR_ID_HEIN_ROEHRIG_IT_CONSULTING_GBR = 19314\nVENDOR_ID_ANDREW_JOHNSON = 19315\nVENDOR_ID_MITSUBISHI_MOTORS_CORPORATION = 19316\nVENDOR_ID_1310369_ONTARIO_LTD = 19317\nVENDOR_ID_SPAN_INTERNATIONAL = 19318\nVENDOR_ID_CLSA_LTD = 19319\nVENDOR_ID_TOMSKTELECOM_A_BRANCH_OF_SIBIRTELECOM_OJSC = 19320\nVENDOR_ID_VSNET = 19321\nVENDOR_ID_NETIQ_SRO = 19322\nVENDOR_ID_NATIONAL_CENTRE_FOR_PHYSICS = 19323\nVENDOR_ID_ROVER_LABORATORIES_SPA = 19324\nVENDOR_ID_EROSKI_S_COOP = 19325\nVENDOR_ID_TANCSICS_MIHALY_SZSZK = 19326\nVENDOR_ID_DEUTSCHER_SKIVERBAND = 19327\nVENDOR_ID_TRANSGENE_SA = 19328\nVENDOR_ID_TELCOTEC_LTD = 19329\nVENDOR_ID_RK_ENGINEERING_INC = 19330\nVENDOR_ID_TECNET_GMBH = 19331\nVENDOR_ID_PAPERLINX_NZ_LTD = 19332\nVENDOR_ID_ELECTRO_INDUSTRIES_GAUGETECH = 19333\nVENDOR_ID_CERZAN_INC = 19334\nVENDOR_ID_INTERMAX_BV = 19335\nVENDOR_ID_SIGNULL_TECHNOLOGIES = 19336\nVENDOR_ID_DYNAMX_INTERNET_SERVICES = 19337\nVENDOR_ID_BHARTI_TELESOFT_INTERNATIONAL_PVT_LTD = 19338\nVENDOR_ID_FACHHOCHSCHULE_BOCHUM = 19339\nVENDOR_ID_PROVINCIA_DI_REGGIO_EMILIA = 19340\nVENDOR_ID_FORENINGSSPARBANKEN = 19341\nVENDOR_ID_PINUTS_MEDIASCIENCE_MULTIMEDIA_AGENTUR_GMBH = 19342\nVENDOR_ID_MEDICTYON = 19343\nVENDOR_ID_UNITED_SSL_DEUTSCHLAND_GMBH = 19344\nVENDOR_ID_ODD_ELEMENT_INC = 19345\nVENDOR_ID_SMCOMPUTER_EDV_SERVICE_CONSULTING_SCHMID_MANFRED = 19346\nVENDOR_ID_PYZZO_SOFTWARE_CORPORATION = 19347\nVENDOR_ID_LIQUID_APPLIANCE = 19348\nVENDOR_ID_LIGHTSHORE = 19349\nVENDOR_ID_EYEVIS = 19350\nVENDOR_ID_IVEGA_CORPORATION_PVT_LTD = 19351\nVENDOR_ID_IP_LABS_GMBH = 19352\nVENDOR_ID_SCOTTRICKMAN = 19353\nVENDOR_ID_E_FORCE_SRL = 19354\nVENDOR_ID_SEBASTIAN_DIETZOLD = 19355\nVENDOR_ID_AGROPORTAL_BV = 19356\nVENDOR_ID_UNIVERSITY_MEDICAL_CENTRE_NIJMEGEN = 19357\nVENDOR_ID_WILDNER_AG = 19358\nVENDOR_ID_TOPPAN_FORMS_COLTD = 19359\nVENDOR_ID_QR_BV = 19360\nVENDOR_ID_KNOWLEDGE_MEDIA_RESEARCH_CENTER = 19361\nVENDOR_ID_VIRTUOUS_INC = 19362\nVENDOR_ID_NET_ISLAND_NETWORKS = 19363\nVENDOR_ID_4THPASS_INC = 19364\nVENDOR_ID_NIKE_INC = 19365\nVENDOR_ID_WESTEL_SYSTEMS = 19366\nVENDOR_ID_ECOLAB_INC = 19367\nVENDOR_ID_AZUL_SYSTEMS_INC = 19368\nVENDOR_ID_LABORATORIO_IMAGEN_RADIOLOGICA = 19369\nVENDOR_ID_TELECAST_FIBER_SYSTEMS_INC = 19370\nVENDOR_ID_LANVISE = 19371\nVENDOR_ID_MIAMI_COUNTY_ESC = 19372\nVENDOR_ID_POWERTEL_LIMITED = 19373\nVENDOR_ID_ORC_SOFTWARE = 19374\nVENDOR_ID_MAX_SI = 19375\nVENDOR_ID_INTEGRATING_THE_HEALTHCARE_ENTERPRISE = 19376\nVENDOR_ID_NEKOTEC_TELECOM = 19377\nVENDOR_ID_MAGICCASTLE_CUMMUNICATION = 19378\nVENDOR_ID_IMPERVA_INC = 19379\nVENDOR_ID_TAMURA_CORPORATION = 19380\nVENDOR_ID_BUNDESANSTALT_FUER_FINANZDIENSTLEISTUNGSAUFSICHT = 19381\nVENDOR_ID_MANZARA_ELECTRONICS_LTD = 19382\nVENDOR_ID_MIKROMARKETINGAS_UAB = 19383\nVENDOR_ID_VIC_TOKAI_CORPORATION = 19384\nVENDOR_ID_INFINITY_COMUNICACIONES = 19385\nVENDOR_ID_MARTECH_SYSTEMS_WEYMOUTH_LTD = 19386\nVENDOR_ID_LABORATORI_GUGLIELMO_MARCONI = 19387\nVENDOR_ID_DB_SYSTEMS_GMBH = 19388\nVENDOR_ID_COMSIGN_LTD = 19389\nVENDOR_ID_TREND_SOFTWARE_LLC = 19390\nVENDOR_ID_SASH_MANAGEMENT_LLC = 19391\nVENDOR_ID_CITY_OF_UNION_CITY_GEORGIA = 19392\nVENDOR_ID_TRIDENT_SYSTEMS_INCORPORATED = 19393\nVENDOR_ID_IT_BY_DESIGN_INC = 19394\nVENDOR_ID_NEWLINK_GENETICS = 19395\nVENDOR_ID_CITI_CENTER_FOR_INFORMATION_TECHNOLOGY_INTEGRATION = 19396\nVENDOR_ID_TRAFFICSIM_CO_LTD = 19397\nVENDOR_ID_JSC_INSTITUTE_OF_INFORMATIONAL_TECHNOLOGIES = 19398\nVENDOR_ID_XYLON_COMPUTERSYSTEMS = 19399\nVENDOR_ID_TRIGGERPLUS_SOFTWARE_LTD = 19400\nVENDOR_ID_FACHHOCHSCHULE_KAISERSLAUTERN_STANDORT_ZWEIBRUECKEN = 19401\nVENDOR_ID_ROBERT_W_BAIRD_CO = 19402\nVENDOR_ID_WESTBRIDGE_TECHNOLOGY_INC = 19403\nVENDOR_ID_NIC_INC = 19404\nVENDOR_ID_ADVANCED_SYSTEMS_CONCEPTS_INC = 19405\nVENDOR_ID_ADISCON_GMBH = 19406\nVENDOR_ID_ATOMIC9NET = 19407\nVENDOR_ID_ZWEICOM_LTD = 19408\nVENDOR_ID_SMITTSKYDDSINSTITUTET = 19409\nVENDOR_ID_MINISTERIO_DE_ECONOMIA_Y_HACIENDA = 19410\nVENDOR_ID_ANDREAS_FALK = 19411\nVENDOR_ID_TELIASONERA_MOBILE_NETWORKS_AB = 19412\nVENDOR_ID_SBIM_FMUP = 19413\nVENDOR_ID_KOLAB_PROJECT = 19414\nVENDOR_ID_DOCUCORP_INTERNATIONAL = 19415\nVENDOR_ID_EDISON_SCHOOLS = 19416\nVENDOR_ID_ENVOY_INTERNATIONAL_LLC = 19417\nVENDOR_ID_STAMPEDE_TECHNOLOGIES_INC = 19418\nVENDOR_ID_INTERNET_TEAM_GMBH = 19419\nVENDOR_ID_NODEMINDER = 19420\nVENDOR_ID_FUTAGO_LLC = 19421\nVENDOR_ID_LDAP_TECHNOLOGIES = 19422\nVENDOR_ID_GLOBAL_DIAL_PTY_LTD = 19423\nVENDOR_ID_ECOCOMS_LTD = 19424\nVENDOR_ID_HINTTECH_BV = 19425\nVENDOR_ID_ESDG_KONSULT_AB = 19426\nVENDOR_ID_THE_EXCEL_ORTHO_GROUP = 19427\nVENDOR_ID_NOVAG_SERVICES_LTD = 19428\nVENDOR_ID_ALPHAWAVE_LTD = 19429\nVENDOR_ID_NET_2COM_LTD = 19430\nVENDOR_ID_JSC_KORDON = 19431\nVENDOR_ID_VIRULENT_SOFTWARE = 19432\nVENDOR_ID_AUSTIN_INDEPENDENT_SCHOOL_DISTRICT = 19433\nVENDOR_ID_CONCEPTS_ET_CONTENUS = 19434\nVENDOR_ID_HECTEC_GMBH = 19435\nVENDOR_ID_CONCORDIA_UNIVERSITY = 19436\nVENDOR_ID_EUROPEAN_SCHOOL_OF_MANAGEMENT_AND_TECHNOLOGY_GMBH = 19437\nVENDOR_ID_BROADWEAVE_NETWORKS = 19438\nVENDOR_ID_KINGSTARWINNING_MEDICAL_INFO_TECH_COLTD = 19439\nVENDOR_ID_IAD_GENERAL_COLTD = 19440\nVENDOR_ID_TOROKI_INC = 19441\nVENDOR_ID_PHANTOM = 19442\nVENDOR_ID_EGATEL_SL = 19443\nVENDOR_ID_METASWITCH_NETWORKS_LTD_FORMERLY_DATA_CONNECTION_LTD = 19444\nVENDOR_ID_CALLTECH_SP_Z_OO = 19445\nVENDOR_ID_CABLE_ONE = 19446\nVENDOR_ID_SWIFT_AND_COMPANY = 19447\nVENDOR_ID_ZENDING = 19448\nVENDOR_ID_SYSTINET_CORP = 19449\nVENDOR_ID_NETSHIFT_SOFTWARE_LTD = 19450\nVENDOR_ID_NEXTG_NETWORKS_INC = 19451\nVENDOR_ID_BEIJING_NUQX_TECHNOLOGY_COLTD = 19452\nVENDOR_ID_UFINITY_PTE_LTD = 19453\nVENDOR_ID_AIRSPAN_NETWORKS_INC = 19454\nVENDOR_ID_MARKS_SPENCER_PLC = 19455\nVENDOR_ID_PREDIWAVE_INC = 19456\nVENDOR_ID_PLATINUM_EQUITY_LLC = 19457\nVENDOR_ID_APPLICATION_SECURITY_INC = 19458\nVENDOR_ID_RF_APPLICATIONS_INC = 19459\nVENDOR_ID_SYCAMOREUS = 19460\nVENDOR_ID_CENDANT_MORTGAGE_CORPORATION = 19461\nVENDOR_ID_ROBERTO_CAPANCIONI = 19462\nVENDOR_ID_DIVISION_OF_JOHNS_HOPKINS_IN_SINGAPORE_LIMITED = 19463\nVENDOR_ID_HITACHI_COMMUNICATION_TECHNOLOGIES_LTD = 19464\nVENDOR_ID_FRANZISKA_BUENDGENS = 19465\nVENDOR_ID_PND1 = 19466\nVENDOR_ID_GEEKBONEORG = 19467\nVENDOR_ID_ISHIHATA_INDUSTRY = 19468\nVENDOR_ID_HIGHNET_SYSTEMS_LTD = 19469\nVENDOR_ID_HIGHNET_SYSTEMS_LTD_2 = 19470\nVENDOR_ID_SECGO_GROUP_OY = 19471\nVENDOR_ID_STAER_SISTEMI_SRL = 19472\nVENDOR_ID_NORTH_AMERICAN_ELECTRIC_RELIABIITY_COUNCIL = 19473\nVENDOR_ID_CRL = 19474\nVENDOR_ID_CONFEDERAO_INTERESTADUAL_DAS_COOPERATIVAS_LIGADAS_AO_SICREDI_SICREDI = 19475\nVENDOR_ID_HIGHWALL_TECHNOLOGIES_LLC = 19476\nVENDOR_ID_INFOCAJA_SL = 19477\nVENDOR_ID_RAPIDPACKET = 19478\nVENDOR_ID_KEYON_COMMUNICATIONS_LLC = 19479\nVENDOR_ID_LITICADE_HERMANN_MATEJEK_GBR = 19480\nVENDOR_ID_BLUEPIG = 19481\nVENDOR_ID_WALDMANN = 19482\nVENDOR_ID_AQUA_SYSTEMS_INC = 19483\nVENDOR_ID_BANCO_DE_ESPAA = 19484\nVENDOR_ID_ART_OF_OBJECT_GMBH = 19485\nVENDOR_ID_VENALI_INC = 19486\nVENDOR_ID_LUCENT_TECHNOLOGIES_MOBILITY_IN = 19487\nVENDOR_ID_TOADICO_INC = 19488\nVENDOR_ID_IP3_NETWORKS_INC = 19489\nVENDOR_ID_HIPER_SA = 19490\nVENDOR_ID_EPEOPLE_SOLUES_S_C_LTDA = 19491\nVENDOR_ID_ADDC_INFOTECH_GMBH = 19492\nVENDOR_ID_IMEDIC_GMBH = 19493\nVENDOR_ID_RICHARD_SCHILLING_MBA = 19494\nVENDOR_ID_NATIONAL_INFORMATICS_COMPANY = 19495\nVENDOR_ID_COGNITION_GROUP_INC = 19496\nVENDOR_ID_OSS_APPLICATION_CONSULTING_CENTRE_TAIWAN = 19497\nVENDOR_ID_HMJ_PROJETS_DLOCALISS = 19498\nVENDOR_ID_ASSOCIATION_INFOROOTS = 19499\nVENDOR_ID_GOVERNMENT_INFORMATION_TECHNOLOGY_SERVICES = 19500\nVENDOR_ID_TRUST_INVESTMENT_BANK_JSB = 19501\nVENDOR_ID_QORVUS_SYSTEMS_INC = 19502\nVENDOR_ID_LOCKDOWN_NETWORKS_INC = 19503\nVENDOR_ID_MULLEN = 19504\nVENDOR_ID_VERZEICHNISDIENST = 19505\nVENDOR_ID_CHRISTIAN_JAHN = 19506\nVENDOR_ID_HAROLDBEUMERCOM = 19507\nVENDOR_ID_THE_SOFTWARE_GUILD_INC = 19508\nVENDOR_ID_TRIDENT_MICROSYSTEM_INC = 19509\nVENDOR_ID_CENTER_FOR_EXCELLENCE_IN_TELECOMMUNICATIONS_AND_SPACE = 19510\nVENDOR_ID_LARRY_BURTON = 19511\nVENDOR_ID_SAHM_TECHNOLOGIES_LLC = 19512\nVENDOR_ID_C3_DESENVOLVIMENTO_DE_SISTEMAS_COMPUTACIONAIS_LTD = 19513\nVENDOR_ID_ON_DEMAND_SYSTEMS_LIMITED_PARTNERSHIP = 19514\nVENDOR_ID_TREND_SERVICE_GMBH = 19515\nVENDOR_ID_UNIVERSITAET_ERFURT = 19516\nVENDOR_ID_COLIBRIA_AS = 19517\nVENDOR_ID_TECHNISCHE_UNIVERSITT_MNCHEN = 19518\nVENDOR_ID_ENOVATION_PORTAL_TECHNOLOGY_BV = 19519\nVENDOR_ID_SAMARTHA_INFORMATION_SYSTEMS_PTY_LTD = 19520\nVENDOR_ID_DATASCHALT_EA_GMBH = 19521\nVENDOR_ID_AINEASNET = 19522\nVENDOR_ID_SEQUENCE_SOLUTIONS = 19523\nVENDOR_ID_RATIONAL_INNOVATIONS = 19524\nVENDOR_ID_TIPPECANOE_COUNTY_PUBLIC_LIBRARY = 19525\nVENDOR_ID_BLUEBOXSTUDIONET = 19526\nVENDOR_ID_GLOBAL_TECHNOLOGY_LTD = 19527\nVENDOR_ID_MESON_FIBER_OPTICS = 19528\nVENDOR_ID_NETSTRONG_INFORMATION_LTD = 19529\nVENDOR_ID_NETMASTER_LTD = 19530\nVENDOR_ID_INSA_DE_RENNES = 19531\nVENDOR_ID_BUSINESSMART_AG = 19532\nVENDOR_ID_TELEMESSAGE_LTD = 19533\nVENDOR_ID_GORENJSKA_BANKA_DD_KRANJ = 19534\nVENDOR_ID_ACNMS = 19535\nVENDOR_ID_PANDUIT_CORP = 19536\nVENDOR_ID_M5_NETWORKS_INC = 19537\nVENDOR_ID_ADD2NET_INC = 19538\nVENDOR_ID_COUNTRY_HAVEN_ACADEMY = 19539\nVENDOR_ID_NCS_CONSULTING_INC = 19540\nVENDOR_ID_BELGORODENERGO = 19541\nVENDOR_ID_AALBORG_UNIVERSITY_LIBRARY = 19542\nVENDOR_ID_WELLCOME_TRUST_SANGER_INSTITUTE = 19543\nVENDOR_ID_WEATHER_STRATEGIES = 19544\nVENDOR_ID_SONY_CISC = 19545\nVENDOR_ID_MELENTANE = 19546\nVENDOR_ID_OPLINK_COMMUNICATIONS_INC = 19547\nVENDOR_ID_FROX_COMMUNICATION = 19548\nVENDOR_ID_UNI_Q_SYSTEMS_FORMERLY_ENGRENNET = 19549\nVENDOR_ID_AN_ACADEMIC_NETWORK_AT_SAO_PAULO_ANSP = 19550\nVENDOR_ID_THALES_NAVAL_FRANCE = 19551\nVENDOR_ID_ALEXANDER_KOWALSKI = 19552\nVENDOR_ID_BEIJING_GTT_TELECOM_TECHNOLOGIES_COLTD = 19553\nVENDOR_ID_PIPPKRO = 19554\nVENDOR_ID_ENGIM_INC = 19555\nVENDOR_ID_NEXTJET_TECHNOLOGIES = 19556\nVENDOR_ID_FRANK_HOLTZ = 19557\nVENDOR_ID_STONEHOLE = 19558\nVENDOR_ID_ZONES_INC = 19559\nVENDOR_ID_INFORMATIONSSICHERHEIT_CHRISTIAN_SCHEUCHER = 19560\nVENDOR_ID_MAXIM_INTEGRATED_PRODUCTS_INC = 19561\nVENDOR_ID_TELENA_COMMUNICATION = 19562\nVENDOR_ID_CENTER_FOR_IMAGING_RESEARCH = 19563\nVENDOR_ID_GOLUM = 19564\nVENDOR_ID_ESCAPE_COMMUNICATIONS_INC = 19565\nVENDOR_ID_C_SCAPE_CONSULTING_CORP = 19566\nVENDOR_ID_SCIENCELOGIC_LLC = 19567\nVENDOR_ID_GLOBAL_GATE_SYSTEMS_LLC = 19568\nVENDOR_ID_GRID_RESEARCH_LAB = 19569\nVENDOR_ID_FROTTAGEORG = 19570\nVENDOR_ID_MICROMATIC_TECNOLOGIA_E_SISTEMAS_LTDA = 19571\nVENDOR_ID_ECNUEE = 19572\nVENDOR_ID_ADEPTIVA = 19573\nVENDOR_ID_NETWORK_GULF_INFORMATION_TECHNOLOGY = 19574\nVENDOR_ID_SANSAY_INC = 19575\nVENDOR_ID_SLOVANET_AS = 19576\nVENDOR_ID_ACE_ELECTRONICS_NV = 19577\nVENDOR_ID_IPCONSULTING_AG = 19578\nVENDOR_ID_INFO_POINT = 19579\nVENDOR_ID_RZF_RECHENZENTRUM_DER_FINANZVERWALTUNG_DES_LANDES_NRW = 19580\nVENDOR_ID_TTC_TELECOM_LTD = 19581\nVENDOR_ID_PIXELPARK_AG = 19582\nVENDOR_ID_WAYFARER_TRANSIT_SYSTEMS_LTD = 19583\nVENDOR_ID_HEADISSUE_GMBH = 19584\nVENDOR_ID_LABORANOWITSCH = 19585\nVENDOR_ID_ICAN_INTERNATIONAL_COMMUNICATIONS_AND_NAVIGATION_LTD = 19586\nVENDOR_ID_ADTEC_DIGITAL_INC = 19587\nVENDOR_ID_TECNOLOGIA_BANCARIA_SA = 19588\nVENDOR_ID_BUSINESS_LINK_KENT_LTD = 19589\nVENDOR_ID_SYSTEMS_SOLUTION_INC = 19590\nVENDOR_ID_ORAL_ROBERTS_UNIVERSITY = 19591\nVENDOR_ID_PRINCE_LAW_OFFICES_PC = 19592\nVENDOR_ID_NERIM = 19593\nVENDOR_ID_MEDIACELL_INC = 19594\nVENDOR_ID_ALCATEL_SHANGHAI_BELL_CO_LTD = 19595\nVENDOR_ID_NHNGHIA = 19596\nVENDOR_ID_CAPNOVA_OY = 19597\nVENDOR_ID_IANET = 19598\nVENDOR_ID_GENIUSBYTES_SOFTWARE_SOLUTIONS_GMBH = 19599\nVENDOR_ID_CTA_SYSTEMSOURCE_INC = 19600\nVENDOR_ID_RGB_NETWORKS_INC = 19601\nVENDOR_ID_CUSTOM_IDM_SOLUTIONS = 19602\nVENDOR_ID_DEZCOM = 19603\nVENDOR_ID_SECURE_NETWORK_SYSTEMS_LLC = 19604\nVENDOR_ID_STARVIEW_TECHNOLOGY_INC = 19605\nVENDOR_ID_NIENSCHANZ_LTD = 19606\nVENDOR_ID_ARGELCOM_LIMITED = 19607\nVENDOR_ID_ASTEA_INTERNATIONAL_INC = 19608\nVENDOR_ID_ZYTEC = 19609\nVENDOR_ID_BASEN_OY = 19610\nVENDOR_ID_TRUSTSEC_IT_SOLUTIONS_GMBH = 19611\nVENDOR_ID_WYNCOTENET = 19612\nVENDOR_ID_WILLING_MINDS_LLC = 19613\nVENDOR_ID_BUSINESS_PORT_SYSTEMS_INC = 19614\nVENDOR_ID_FCS_INDIA_PVT_LTD = 19615\nVENDOR_ID_INTERCARD_AG = 19616\nVENDOR_ID_TAGLICHTCOM_SRL = 19617\nVENDOR_ID_RETURN_DATA = 19618\nVENDOR_ID_GO_NET = 19619\nVENDOR_ID_NETDEVICES_INC = 19620\nVENDOR_ID_ALIBABA = 19621\nVENDOR_ID_SHENZHEN_UNION_BROADBAND_COMMUNICATION_CO_LTD = 19622\nVENDOR_ID_ISENERGY_CZECH_AS = 19623\nVENDOR_ID_MANDA = 19624\nVENDOR_ID_UNILEVER_PLC = 19625\nVENDOR_ID_PERMABIT_INC = 19626\nVENDOR_ID_NTPL = 19627\nVENDOR_ID_WEBSLINGERZ_INC = 19628\nVENDOR_ID_UNIVERSITY_OF_CINCINNATI = 19629\nVENDOR_ID_ALOPA_NETWORKS_INC = 19630\nVENDOR_ID_EDIAL_INC = 19631\nVENDOR_ID_RYGO_TECHNICAL_ENTERPRISES = 19632\nVENDOR_ID_BOFH_NETWORKS_OY = 19633\nVENDOR_ID_THALIX = 19634\nVENDOR_ID_PRAGER_SEALY_CO_LLC = 19635\nVENDOR_ID_SOLNET_DATA_SERVICE = 19636\nVENDOR_ID_OAKMOON_CONSULTING_INC = 19637\nVENDOR_ID_UNIVERSITY_OF_TEXAS_AT_ARLINGTON = 19638\nVENDOR_ID_TEZTECH_INC = 19639\nVENDOR_ID_AUTOMATED_MARKETING_SOLUTIONS_INC = 19640\nVENDOR_ID_HOLLEY_COMMUNICATIONS_GROUP = 19641\nVENDOR_ID_EAST_ALABAMA_MEDICAL_CENTER = 19642\nVENDOR_ID_YIPES_ENTERPRISE_SERVICES_INC = 19643\nVENDOR_ID_POLARIS_WIRELESS_INC = 19644\nVENDOR_ID_SIOUX_MEDICAL_SYSTEMS_BV = 19645\nVENDOR_ID_COMPUTING_EDGE_INC = 19646\nVENDOR_ID_FREDERIKSBORG_AMT = 19647\nVENDOR_ID_TRANSCORE = 19648\nVENDOR_ID_ERP_HQ_INC = 19649\nVENDOR_ID_ETILIZE_INC = 19650\nVENDOR_ID_SEVEN_STAR_INC = 19651\nVENDOR_ID_NATIONAL_CHI_NAN_UNIVERSITY_TAIWAN = 19652\nVENDOR_ID_INTEGRAL_TECHNOLOGY_SOLUTIONS_PTY_LTD = 19653\nVENDOR_ID_INFOTERIA_CORPORATION = 19654\nVENDOR_ID_UNIVERSITY_OF_ZULULAND = 19655\nVENDOR_ID_DREAMTEL = 19656\nVENDOR_ID_PLEWSNET = 19657\nVENDOR_ID_MACRO_SYSTEM = 19658\nVENDOR_ID_PARADIGIT_COMPUTERS_BV = 19659\nVENDOR_ID_CRO24_GMBH = 19660\nVENDOR_ID_GLEISS_LUTZ = 19661\nVENDOR_ID_TELENOR_AB = 19662\nVENDOR_ID_SECURE_GROUP_AS = 19663\nVENDOR_ID_GR3_A_S = 19664\nVENDOR_ID_GRAZER_WECHSELSEITIGE_VERSICHERUNG_AG = 19665\nVENDOR_ID_ALCATEL_SUOMI_OY = 19666\nVENDOR_ID_DR_ING_HC_F_PORSCHE_AG = 19667\nVENDOR_ID_AS_REIISEVERANSTALTUNGS_GMBH = 19668\nVENDOR_ID_ASERVA_GMBH_FORMERLY_NEWTHINKING_IT_INHABER_ALEXANDER_SCHEIBNER = 19669\nVENDOR_ID_IT_UNIVERSITY_OF_COPENHAGEN = 19670\nVENDOR_ID_DMDSECURECOM_BV = 19671\nVENDOR_ID_GRATISAVISA_STIMULI = 19672\nVENDOR_ID_BYTEHOARD = 19673\nVENDOR_ID_CATALIS_HEALTH_INC = 19674\nVENDOR_ID_LIXTO_SOFTWARE_GMBH = 19675\nVENDOR_ID_UNIVERSITY_OF_HOUSTON = 19676\nVENDOR_ID_UNASSIGNED_29 = 19677\nVENDOR_ID_RELINACE_INFOCOMM = 19678\nVENDOR_ID_PRUSCH = 19679\nVENDOR_ID_DEMBACH_GOO_INFORMATIK_GMBH = 19680\nVENDOR_ID_VITADURUM_AG = 19681\nVENDOR_ID_BALO_N_CO = 19682\nVENDOR_ID_WELLINKLTD = 19683\nVENDOR_ID_TOWN_COUNTRY_CREDIT_CORP = 19684\nVENDOR_ID_VIRGINIA_DEPT_OF_SOCIAL_SERVICES = 19685\nVENDOR_ID_NET_CONCEPT = 19686\nVENDOR_ID_INDICATIVE_SOFTWARE_INC = 19687\nVENDOR_ID_CARGO_IT_AG = 19688\nVENDOR_ID_EVOLTA_BV = 19689\nVENDOR_ID_LINE4_INC = 19690\nVENDOR_ID_EPROCESS_BURKINA = 19691\nVENDOR_ID_HOPPE_DIALOG_GMBH = 19692\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_SANTA_CRUZ_UCSC = 19693\nVENDOR_ID_ENTERPRISE_MANAGEMENT_SHAREWARE = 19694\nVENDOR_ID_PROJEKTFARM_GMBH = 19695\nVENDOR_ID_CHERRYPICKS = 19696\nVENDOR_ID_MAY10_TECHNOLOGY_INC = 19697\nVENDOR_ID_INFORMATION_TECHNOLOGY_SERVICES_DEPARTMENT = 19698\nVENDOR_ID_SYSTEM_DETECTION_INC = 19699\nVENDOR_ID_TRAQUEUR_SA = 19700\nVENDOR_ID_MARS_COMPUTER_SYSTEMS_SP_J = 19701\nVENDOR_ID_BSZ_LEONBERG = 19702\nVENDOR_ID_AGENCE_DE_LEAU_SEINE_NORMANDIE = 19703\nVENDOR_ID_NETFOCUS_SRL = 19704\nVENDOR_ID_CITTO_TECNOLOGIA_LTDA = 19705\nVENDOR_ID_BBNED_NV = 19706\nVENDOR_ID_MICRAN_LTD = 19707\nVENDOR_ID_BRAIN_BROADCAST_SAS = 19708\nVENDOR_ID_TEXRAMP_INC = 19709\nVENDOR_ID_BITBUZZ_LTD = 19710\nVENDOR_ID_SCARYCLOWNSORG = 19711\nVENDOR_ID_WEBSOLVE_INC = 19712\nVENDOR_ID_ELFIQ_INC = 19713\nVENDOR_ID_LOGIC_DEVELOPMENT = 19714\nVENDOR_ID_LINKAIR_COMMUNICATIONS_INC = 19715\nVENDOR_ID_ARS_LUMINA_INC = 19716\nVENDOR_ID_GREATMARK = 19717\nVENDOR_ID_MOTOROLA_ISRAEL_LTD_NSA = 19718\nVENDOR_ID_QUAQUANET = 19719\nVENDOR_ID_WESTMARSH_CONSULTING_LTD = 19720\nVENDOR_ID_BLAZEARTS_LTD_SERVICESHU_NETWORK = 19721\nVENDOR_ID_CONYSER_CONSULTING_Y_SERVICIOS_SL = 19722\nVENDOR_ID_BROADBUS_TECHNOLOGIES_INC = 19723\nVENDOR_ID_DIGIDYNE_INC = 19724\nVENDOR_ID_D_TRUST_CERTIFIKACNA_AUTORITA_AS = 19725\nVENDOR_ID_CLINICAL_REFERENCE_LABORATORY_INC = 19726\nVENDOR_ID_SHYLEX_TELECOMUNICACIONES_SL = 19727\nVENDOR_ID_TECHNO_TOOLSMITHS = 19728\nVENDOR_ID_SOFTREK_CORPORATION = 19729\nVENDOR_ID_LOGIC_ETC_INC = 19730\nVENDOR_ID_SINAPTICA_NETWORKS = 19731\nVENDOR_ID_DRAGONSDAWNNET = 19732\nVENDOR_ID_HUB_CONSULTING_INC = 19733\nVENDOR_ID_RAYCOM_COLTD = 19734\nVENDOR_ID_OGA_SYNCOM_COLTD = 19735\nVENDOR_ID_I_RAID = 19736\nVENDOR_ID_KYNESTE_SPA = 19737\nVENDOR_ID_CAMPANA = 19738\nVENDOR_ID_UZORG_BV = 19739\nVENDOR_ID_INSTITUT_DE_MATHMATIQUES_ET_DE_SCIENCES_PHYSIQUES_UNIVERSIT = 19740\nVENDOR_ID_RESIDENTIAL_TECHNOLOGY_INCORPORATED = 19741\nVENDOR_ID_KAZEON_SYSTEMS_INC = 19742\nVENDOR_ID_JPWEBWORKS_PTY_LTD = 19743\nVENDOR_ID_NOVACOAST_INC = 19744\nVENDOR_ID_DATAFLAKE_WEBLICATIONS = 19745\nVENDOR_ID_DATA_DOMAIN_INC = 19746\nVENDOR_ID_THE_OPEN_AND_FREE_TECHNOLOGY_COMMUNITY = 19747\nVENDOR_ID_AFFILIATED_COMPUTER_SERVICES_INC_TRIPPAK_SERVICES = 19748\nVENDOR_ID_CISNS = 19749\nVENDOR_ID_BEIJING_YTT_TELECOM_TECHNOLOGIES_COLTD = 19750\nVENDOR_ID_NOTE_TORSBY_AB = 19751\nVENDOR_ID_AIS_APLICACIONES_DE_INTELIGENCIA_ARTIFICIAL_SA = 19752\nVENDOR_ID_INEXBEE = 19753\nVENDOR_ID_ESG_ELEKTRONIKSYSTEM_UND_LOGISTIK_GMBH = 19754\nVENDOR_ID_PERA_INTERNATIONAL_LTD = 19755\nVENDOR_ID_SCHWABING_SOFTWARE = 19756\nVENDOR_ID_IONTAS = 19757\nVENDOR_ID_HAFSJOLD_DATA_APS = 19758\nVENDOR_ID_COMPUNETIX_INC = 19759\nVENDOR_ID_LEON_COUNTY_SCHOOLS = 19760\nVENDOR_ID_GORDON_ALUMINUM_INDUSTRIES_INC = 19761\nVENDOR_ID_CAMINOS_Y_CANALES_LTD = 19762\nVENDOR_ID_BRANCH_BANKING_AND_TRUST_CORPORATION = 19763\nVENDOR_ID_VANDENBERG_SYSTEMS_INC = 19764\nVENDOR_ID_SYSTEMS_ENGINEERING_ASSOCIATES_INC = 19765\nVENDOR_ID_WUHAN_UNIVERSITY_OF_TECHNOLOGY = 19766\nVENDOR_ID_COOPERATIVA_NOVANTA_SCRL = 19767\nVENDOR_ID_SKYBOX_SECURITY_LTD = 19768\nVENDOR_ID_JLCX_INC = 19769\nVENDOR_ID_SELFSIGNEDCOM = 19770\nVENDOR_ID_IBM_TIVOLI_PROVISIONING_AND_ORCHESTRATION = 19771\nVENDOR_ID_MOBILE_WISDOM_INC = 19772\nVENDOR_ID_NEW_GLOBAL_CORPORATION = 19773\nVENDOR_ID_MBLOX_INC = 19774\nVENDOR_ID_IPG_PHOTONICS_CORPORATION = 19775\nVENDOR_ID_TI_PAPERCO_INC = 19776\nVENDOR_ID_TAYLOR_UNIVERSITY = 19777\nVENDOR_ID_LINGUANET = 19778\nVENDOR_ID_BOBEK = 19779\nVENDOR_ID_CLARIDION_INC = 19780\nVENDOR_ID_ODYS_SOLUTIONS = 19781\nVENDOR_ID_AEGEE_UTRECHT = 19782\nVENDOR_ID_NORTHLANS_ALLIANCE_LLC = 19783\nVENDOR_ID_LITTLE_BOX_SOLUTIONS_INC = 19784\nVENDOR_ID_GRAND_CENTRAL_COMMUNICATIONS = 19785\nVENDOR_ID_ESTEBAN_PIZZINI = 19786\nVENDOR_ID_AYUB_YAQUB = 19787\nVENDOR_ID_LDT_COMMUNICATION_TECHNOLOGY_CO_LTD = 19788\nVENDOR_ID_SHEARD_AND_COMPANY_PTY_LIMITED = 19789\nVENDOR_ID_INSE7120_CONU = 19790\nVENDOR_ID_MW_EDV_BERATUNG = 19791\nVENDOR_ID_FORTE_IT = 19792\nVENDOR_ID_FIRSTSERVED_NV = 19793\nVENDOR_ID_IP_SECURITY_CONSULTING = 19794\nVENDOR_ID_ASSETHOUSE_TECHNOLOGY_LTD = 19795\nVENDOR_ID_JOSTENS_INC = 19796\nVENDOR_ID_STEFAN_FIEDLER_KEG = 19797\nVENDOR_ID_FBIS = 19798\nVENDOR_ID_JEREMY_MCMILLAN = 19799\nVENDOR_ID_DEREK_BALLING = 19800\nVENDOR_ID_PINEAPP_LTD = 19801\nVENDOR_ID_ATLANTA_BUSINESS_SOFTWARE_INC = 19802\nVENDOR_ID_EC_TELECOM = 19803\nVENDOR_ID_THE_NORNS_LABORATORIES = 19804\nVENDOR_ID_IDIOTWINDORG = 19805\nVENDOR_ID_SPORTODDS_SYSTEMS_PTY_LIMITED = 19806\nVENDOR_ID_ALARMSPRO_INC = 19807\nVENDOR_ID_OPEN_CLOUD_LTD = 19808\nVENDOR_ID_GOUDRON_SARL = 19809\nVENDOR_ID_R_BROOKS_ASSOCIATES_INC = 19810\nVENDOR_ID_WILDONE_INFORMATION_SYSTEMS = 19811\nVENDOR_ID_HSIUPING_INSTITUTE_OF_TECHNOLOGY = 19812\nVENDOR_ID_SYSTEMS_INTERNATIONAL = 19813\nVENDOR_ID_DUOSOFT_INC = 19814\nVENDOR_ID_GETRONICS_SOLUTIONS_MALAYSIA = 19815\nVENDOR_ID_PHILIPS_MEDIZIN_SYSTEME_BOEBLINGEN_GMBH = 19816\nVENDOR_ID_SOLUZIONI_INFORMATICHE_SRL = 19817\nVENDOR_ID_KIABI = 19818\nVENDOR_ID_INFORMATIK_CLUB_DER_UNIVERSITT_ZRICH_ICU = 19819\nVENDOR_ID_PRIVAL_ODC_INC = 19820\nVENDOR_ID_BRIDGEPORT_NETWORKS = 19821\nVENDOR_ID_BOSSERS_CNOSSEN_BV = 19822\nVENDOR_ID_CASTLE_BUILDING_CENTRES_GROUP_LTD = 19823\nVENDOR_ID_TELEGANOVNET = 19824\nVENDOR_ID_KISSLINGER_EDV_BERATUNG = 19825\nVENDOR_ID_INSTITUT_TEKNOLOGI_BANDUNG_ITB = 19826\nVENDOR_ID_N2N_CONSULTING_PTE_LTD = 19827\nVENDOR_ID_LBCN_COMMUNICATION_TECHNOLOGY_COLTD = 19828\nVENDOR_ID_BITSTREAM = 19829\nVENDOR_ID_VDL_SA = 19830\nVENDOR_ID_IRT_INSTITUT_FUER_RUNDFUNKTECHNIK_GMBH = 19831\nVENDOR_ID_ROSTRVM_SOLUTIONS_LTD = 19832\nVENDOR_ID_TEAM17_SOFTWARE_LTD = 19833\nVENDOR_ID_BULLDOG_COMMUNICATIONS_LTD = 19834\nVENDOR_ID_EXCIBIR_LTD = 19835\nVENDOR_ID_QWEST_QNMS = 19836\nVENDOR_ID_USPFO_FOR_CA = 19837\nVENDOR_ID_UNIVITS_INTERNATIONAL_AB = 19838\nVENDOR_ID_SYNTHEAN_INC = 19839\nVENDOR_ID_AVALON_NETWORKS_INC = 19840\nVENDOR_ID_PUBLIC_COMMUNICATIONS_SERVICES_INC = 19841\nVENDOR_ID_PANTEL_SERVICE_HOLDING_GMBH = 19842\nVENDOR_ID_ANARCHOCOM = 19843\nVENDOR_ID_MOBIGEN_CO_LTD_2 = 19844\nVENDOR_ID_SOLENOVO_OY = 19845\nVENDOR_ID_DDI_POCKETINC = 19846\nVENDOR_ID_KU_COMMUNICATION_TECHNOLOGY_COLTD = 19847\nVENDOR_ID_UNIVERSITY_OF_BOLOGNA = 19848\nVENDOR_ID_NSFOCUS_LTD = 19849\nVENDOR_ID_WAGGENER_EDSTROM = 19850\nVENDOR_ID_TELNET_ISG = 19851\nVENDOR_ID_SOUTHERN_UTAH_UNIVERSITY = 19852\nVENDOR_ID_AAPALACOM = 19853\nVENDOR_ID_UCLA_EE_AINS_LAB = 19854\nVENDOR_ID_AIS_MANAGEMENT_GMBH = 19855\nVENDOR_ID_MOBILE_TELESYSTEMS_OJSC_KOMI_REPUBLIC = 19856\nVENDOR_ID_KUBAN_GSM_CJSC = 19857\nVENDOR_ID_IPC_MEDIA_LIMITED = 19858\nVENDOR_ID_CGSS_GUYANE = 19859\nVENDOR_ID_CGS_CORPORATE_GROUP_SERVICE_LTD = 19860\nVENDOR_ID_WAKE_FOREST_UNIVERSITY = 19861\nVENDOR_ID_MOTIVITY_TELECOM_INC = 19862\nVENDOR_ID_TIPPETT_STUDIO = 19863\nVENDOR_ID_JOSTENS_INC_2 = 19864\nVENDOR_ID_NEOMONTANA_ELECTRONIS = 19865\nVENDOR_ID_EDOUARD_BOISSONNEAULT = 19866\nVENDOR_ID_DIGITEC_GMBH = 19867\nVENDOR_ID_KRAFTY_CREATIONS_INC = 19868\nVENDOR_ID_BEAGLE_INTERNET_PTY_LTD = 19869\nVENDOR_ID_THE_DOTGOD_REGISTRY_LIMITED = 19870\nVENDOR_ID_AG_CONSULTING_LLP = 19871\nVENDOR_ID_TVENGINEERORG = 19872\nVENDOR_ID_MARSOLSNET_INC = 19873\nVENDOR_ID_DISTRIBUTEL_COMMUNICATIONS_LTD = 19874\nVENDOR_ID_HUTUWORMORG_INC = 19875\nVENDOR_ID_USE = 19876\nVENDOR_ID_NUERNBERGER_VERSICHERUNGSGRUPPE = 19877\nVENDOR_ID_ITNET_SPA = 19878\nVENDOR_ID_MAKEDONSKI_TELEKOMUNIKACII_MTNET_2 = 19879\nVENDOR_ID_CONARCOM_CA_SIRENA = 19880\nVENDOR_ID_AEGEE_EUROPE = 19881\nVENDOR_ID_RADIUS_LTD = 19882\nVENDOR_ID_META4_SPAIN_SA = 19883\nVENDOR_ID_ONTIER = 19884\nVENDOR_ID_NAVIMEDIX_INC = 19885\nVENDOR_ID_CORIO_INC = 19886\nVENDOR_ID_CALIFORNIA_SCHOOL_INFORMATION_SERVICES = 19887\nVENDOR_ID_THE_TARC_GROUP = 19888\nVENDOR_ID_APPTRIGGER = 19889\nVENDOR_ID_GLOBAL_INTERACTIVE_TECHNOLOGY_PTE_LTD = 19890\nVENDOR_ID_BAY_INNENMINISTERIUM_VERFASSUNGSSCHUTZ = 19891\nVENDOR_ID_HONKO_MFGCOLTD = 19892\nVENDOR_ID_BRIGHTON_CONSULTING_INC = 19893\nVENDOR_ID_CUBEROOT = 19894\nVENDOR_ID_HEOLYS_FRANCE_SARL = 19895\nVENDOR_ID_UDAYAN_KUMAR = 19896\nVENDOR_ID_IUT_FOTSO_VICTOR_DE_BANDJOUN_UNIVERSIT_DE_DSCHANG = 19897\nVENDOR_ID_LT_SYSTEMS_LLC = 19898\nVENDOR_ID_THINKING_SYSTEMS_CORPORATION = 19899\nVENDOR_ID_ADVANCED_RF_TECHNOLOGIES_INC = 19900\nVENDOR_ID_ATKINSON_INGLIS_ASSOCIATES = 19901\nVENDOR_ID_UNIVERSITY_OF_TEXAS_PAN_AMERICAN = 19902\nVENDOR_ID_JHARDING = 19903\nVENDOR_ID_SAGE_TECHNOLOGY_LTD = 19904\nVENDOR_ID_BEIJING_YTT_TELECOM_TECHNOLOGIES_COLTD_2 = 19905\nVENDOR_ID_EUROPACOMNET_LTD = 19906\nVENDOR_ID_ALPHA_OIL_LTD = 19907\nVENDOR_ID_ALCOPACK_GROUP = 19908\nVENDOR_ID_PADZNET_INC = 19909\nVENDOR_ID_DIRECTRUST = 19910\nVENDOR_ID_GLOBAL_VELOCITY_INC = 19911\nVENDOR_ID_PHATLINE = 19912\nVENDOR_ID_MURPHX_INNOVATIVE_SOLUTIONS_LTD = 19913\nVENDOR_ID_OPTUS_SINGTEL_PTY_LTD = 19914\nVENDOR_ID_BEIJING_GEFON_NETWORK_TECHNOLOGY_LTD = 19915\nVENDOR_ID_FUNDACIN_ESADE = 19916\nVENDOR_ID_SUNGARD_FINANCE = 19917\nVENDOR_ID_PHOENIX_IT_SERVICES = 19918\nVENDOR_ID_IPL_INFORMATION_PROCESSING_LTD = 19919\nVENDOR_ID_PREVX_LTD = 19920\nVENDOR_ID_GROSS = 19921\nVENDOR_ID_IOWA_STATE_UNIVERSITY = 19922\nVENDOR_ID_EI3_CORPORATION = 19923\nVENDOR_ID_MIRROR_IMAGE_INTERNET = 19924\nVENDOR_ID_TRIADIGM_TECHNOLOGY = 19925\nVENDOR_ID_FEITH_SYSTEMS_AND_SOFTWARE_INC = 19926\nVENDOR_ID_ESCHERWARE_BV = 19927\nVENDOR_ID_LINUXLAB_LTD = 19928\nVENDOR_ID_4X_INFORMATION_TECHNOLOGY_GMBH = 19929\nVENDOR_ID_SALESCATALYSTSCOM_LTD = 19930\nVENDOR_ID_BLUNTSOFT_LTD = 19931\nVENDOR_ID_MITTS_LTD = 19932\nVENDOR_ID_UNIVERSITY_OF_TASMANIA = 19933\nVENDOR_ID_KEY_BUSINESS_SERVICES = 19934\nVENDOR_ID_ALLNET_GMBH = 19935\nVENDOR_ID_PHILIP_MORRIS_INTERNATIONAL_MANAGEMENT_SA = 19936\nVENDOR_ID_COGENT_INNOVATORS_LLC = 19937\nVENDOR_ID_OU_COLLEGE_OF_CONTINUING_EDUCATION = 19938\nVENDOR_ID_AWARMNET_LTD = 19939\nVENDOR_ID_BROADREACH_SYSTEMS = 19940\nVENDOR_ID_LIND_WALDOCK = 19941\nVENDOR_ID_JUMBO_CORPORATION = 19942\nVENDOR_ID_D2D_CARS = 19943\nVENDOR_ID_SUNWEST_COMPUTERS_LTD = 19944\nVENDOR_ID_ABILITEC_LIMITED = 19945\nVENDOR_ID_ITS_PUB = 19946\nVENDOR_ID_WIENER_PLEIN_BAUS_GMBH = 19947\nVENDOR_ID_OOO_MAXIDOM = 19948\nVENDOR_ID_BELLMONTE = 19949\nVENDOR_ID_SVERIGES_TELEVISION_AB_SVT = 19950\nVENDOR_ID_AREA = 19951\nVENDOR_ID_MESSAGE_SYSTEMS_INC = 19952\nVENDOR_ID_IRONWORKS_CONSULTING_LLC = 19953\nVENDOR_ID_CENTERBOARD_INC = 19954\nVENDOR_ID_TENEBRIS_TECHNOLOGIES_INC = 19955\nVENDOR_ID_KABISSA_INC = 19956\nVENDOR_ID_AURORA_NETWORK_OPERATIONS_MANAGEMENT_SERVICES = 19957\nVENDOR_ID_NEX_G_SYSTEMS_PTE_LTD = 19958\nVENDOR_ID_LUND_UNIVERSITY = 19959\nVENDOR_ID_SER_STORAGE_TECHNOLOGY_GMBH = 19960\nVENDOR_ID_CENTRAL_RESEARCH_INSTITUTE_FOR_MACHINE_BUILDING = 19961\nVENDOR_ID_NETSERVERS_LTD = 19962\nVENDOR_ID_ENIGMA_SOFTWARE_CORPORATION = 19963\nVENDOR_ID_TRIBUNAL_REGIONAL_DO_TRABALHO_DA_22A_REGIO = 19964\nVENDOR_ID_SPOTWAVE_WIRELESS_INC = 19965\nVENDOR_ID_TELEXY_CORP = 19966\nVENDOR_ID_META_CONSULTING = 19967\nVENDOR_ID_NETWORK_INTELLIGENCE_CORPORATION = 19968\nVENDOR_ID_KLAMATH_NETWORKS_CORP = 19969\nVENDOR_ID_CLEVER_MACHINE_INC = 19970\nVENDOR_ID_TRIPLEPLAY_SERVICES_LTD = 19971\nVENDOR_ID_DAVID_NESTING = 19972\nVENDOR_ID_VADER_LOGIC_LLC = 19973\nVENDOR_ID_ESTONIAN_EDUCATIONAL_AND_RESEARCH_NETWORK = 19974\nVENDOR_ID_ICTEAM_SPA = 19975\nVENDOR_ID_ALBERTI_HOLDINGS_PTY_LTD = 19976\nVENDOR_ID_THETA_NETWORKS_INC = 19977\nVENDOR_ID_O2_GERMANY_GMBH_CO_OHG = 19978\nVENDOR_ID_INPES = 19979\nVENDOR_ID_VENETICA = 19981\nVENDOR_ID_CAP_GEMINI_NORWAY = 19982\nVENDOR_ID_CU_NES = 19983\nVENDOR_ID_PITTSBURG_STATE_UNIVERSITY = 19984\nVENDOR_ID_VIGOMENT_SOFTWARE_INC = 19985\nVENDOR_ID_VOID_SOLUTIONS = 19986\nVENDOR_ID_ANERIST = 19987\nVENDOR_ID_REZEL = 19988\nVENDOR_ID_NETLANTACOM = 19989\nVENDOR_ID_NETTEEM_LLC = 19990\nVENDOR_ID_BEIJING_ZHENGYOU_NETWORKSCOMMUNICATION_TECHNOLOGY_COLTD = 19991\nVENDOR_ID_ERICSSON_INC = 19992\nVENDOR_ID_S2_SYSTEMS_INC_2 = 19993\nVENDOR_ID_SHANGHAI_WITHUB_GENERAL_TECHNOLOGY_COLTD = 19994\nVENDOR_ID_SPES_SRL = 19995\nVENDOR_ID_SWISSQUAL_AG = 19996\nVENDOR_ID_4D_TECHNOLOGY_LLC = 19997\nVENDOR_ID_NETSPECS_BV = 19998\nVENDOR_ID_EEPOCH = 19999\nVENDOR_ID_ING_BRO_ZIEGLER = 20000\nVENDOR_ID_UKRAINE_TRUST_NETWORK = 20001\nVENDOR_ID_RZNET_AG = 20002\nVENDOR_ID_PTK_CENTERTEL_SP_Z_O_O = 20003\nVENDOR_ID_HEUFT_SYSTEMTECHNIK_GMBH = 20004\nVENDOR_ID_AIR_PRODUCTS_AND_CHEMICALS_INC = 20005\nVENDOR_ID_NAGIOS = 20006\nVENDOR_ID_KENATI_TECHNOLOGIES_INC = 20007\nVENDOR_ID_TOSHIBA_ELECTRONICS_EUROPE_GMBH = 20008\nVENDOR_ID_BEAVER_CREEK_COOPERATIVE_TELEPHONE_COMPANY = 20009\nVENDOR_ID_REUTER_NETWORK_CONSULTING = 20010\nVENDOR_ID_SYSTEM_BUSINESS_CONSULTING = 20011\nVENDOR_ID_QINETIQ_LTD_2 = 20012\nVENDOR_ID_VANGUARD_INTEGITY_PROFESSIONALS = 20013\nVENDOR_ID_FERNANDEZ_INDUSTRIES_INCORPORATED = 20014\nVENDOR_ID_VILLE_DYVERDON = 20015\nVENDOR_ID_MOUNTAIN_TOP_APPLIED_SOLUTIONS_INC = 20016\nVENDOR_ID_DANSK_NETCENTER_APS = 20017\nVENDOR_ID_RIVER_CITY_SOFTWARE_ASSOCIATES_LTD = 20018\nVENDOR_ID_ANTARCTICA_NETWORKS_LTD = 20019\nVENDOR_ID_PACIFIC_WAVE_SOLUTIONS_INCORPORATED = 20020\nVENDOR_ID_BOSWELL_ONLINE_BV = 20021\nVENDOR_ID_TETCO_TECHNOLOGIES_SA = 20022\nVENDOR_ID_REZEL_2 = 20023\nVENDOR_ID_PROXYCONN_INC = 20024\nVENDOR_ID_COMPUSAURUS_BT = 20025\nVENDOR_ID_REDENETWORKCOM = 20026\nVENDOR_ID_TDK_LAMBDA_CORPORATION = 20027\nVENDOR_ID_LINE_TEC_INC = 20028\nVENDOR_ID_MORTARA_INSTRUMENT_INC = 20029\nVENDOR_ID_VALIDSOFT_LTD = 20030\nVENDOR_ID_QNAMIC_AG = 20031\nVENDOR_ID_KISTER = 20032\nVENDOR_ID_DICR = 20033\nVENDOR_ID_RJCDBCOM = 20034\nVENDOR_ID_ALEXANDER_KELLMANN = 20035\nVENDOR_ID_ADVANCED_CONTROL_TECHNOLOGY_INC = 20036\nVENDOR_ID_HISL_LIMITED = 20037\nVENDOR_ID_LITHIUMCORP_PTY_LTD = 20038\nVENDOR_ID_SHANGHAI_COMMUNICATIONS_TECHNOLOGIES_CENTER = 20039\nVENDOR_ID_GUMC = 20040\nVENDOR_ID_INGENION_GMBH = 20041\nVENDOR_ID_HITEL_ITALIA_SPA = 20042\nVENDOR_ID_GRUPO_3A_RECOLETAS = 20043\nVENDOR_ID_EKINOPS_SAS = 20044\nVENDOR_ID_CORPORATE_EXPRESS_PROMOTIONAL_MARKETING = 20045\nVENDOR_ID_PILGERER_EV = 20046\nVENDOR_ID_THEGLOBECOM = 20047\nVENDOR_ID_INTERNET_BROADCASTING_SYSTEMS = 20048\nVENDOR_ID_GNUARCH = 20049\nVENDOR_ID_WESTERN_UNITED_INSURANCE = 20050\nVENDOR_ID_GLOBALSKYVAULT = 20051\nVENDOR_ID_INTESA_SANPAOLO_SPA = 20052\nVENDOR_ID_INET2_SRL = 20053\nVENDOR_ID_STATISTISCHES_BUNDESAMT = 20054\nVENDOR_ID_FRANCE2 = 20055\nVENDOR_ID_ASC_PROGRAM = 20056\nVENDOR_ID_LUMENOS_INC = 20057\nVENDOR_ID_ARAMISKA = 20058\nVENDOR_ID_ACSERA_CORPORATION = 20059\nVENDOR_ID_PACIFIC_UNIVERSITY_2 = 20060\nVENDOR_ID_SEACOAST_SYNERGY_INC = 20061\nVENDOR_ID_UNIVERSITY_OF_CRETE_FACULTY_OF_MEDICINE = 20062\nVENDOR_ID_VANDALSWEBCOM = 20063\nVENDOR_ID_TOHOKU_INTELLIGENT_TELECOMMUNICATION_COINC = 20064\nVENDOR_ID_OMEGA_CONSULT_INC = 20065\nVENDOR_ID_ENTHEOS_SOFTWARE = 20066\nVENDOR_ID_KARLSTAD_UNIVERSITY = 20067\nVENDOR_ID_ARTINFOR = 20068\nVENDOR_ID_JDG_TRADINGPTY_LTD = 20069\nVENDOR_ID_TELECOM_ITALIA_SPA = 20070\nVENDOR_ID_ELECTRONIC_FORMATIONS = 20071\nVENDOR_ID_IWKA_INFORMATIONSSYSTEME_GMBH = 20072\nVENDOR_ID_ABUNDANCE_NETWORKS_LLC = 20073\nVENDOR_ID_FREERUN_TECHNOLOGIES_INC = 20074\nVENDOR_ID_WERTHMOELLER_IT_SERVICE = 20075\nVENDOR_ID_MAKAERA_VIR_2000_INC = 20076\nVENDOR_ID_CMARKET_INC = 20077\nVENDOR_ID_ESCOBAR_ENTERPRISES = 20078\nVENDOR_ID_SK_TECHNET = 20079\nVENDOR_ID_MFD = 20080\nVENDOR_ID_ALANNE_LLC = 20081\nVENDOR_ID_ECE_PROJEKTMANAGEMENT = 20082\nVENDOR_ID_TECHNO_GROUP_INC = 20083\nVENDOR_ID_ONLINEWEB_LTD = 20084\nVENDOR_ID_HYPERSPACE_COMMUNICATIONS_INC = 20085\nVENDOR_ID_JRC_ENGINEERING_COLTD = 20086\nVENDOR_ID_CONSULTIX_GMBH = 20087\nVENDOR_ID_RENEWAL_ENTERPRISES_LLC = 20088\nVENDOR_ID_CORNERSTONE_CONSULTING_LLC = 20089\nVENDOR_ID_AIS_AUTOMATIONS_UND_INFORMATIONSSYSTEME_GMBH = 20090\nVENDOR_ID_SYAM_SOFTWARE_INC = 20091\nVENDOR_ID_SERVICIOS_DE_I_PRO_PARA_COMPETITIVIDAD_SA_DE_CV = 20092\nVENDOR_ID_TREKLOGIC_INC = 20093\nVENDOR_ID_VAONET = 20094\nVENDOR_ID_POSITRON_ACCESS_SOLUTIONS_CORP_FORMERLY_AKTINO_INC = 20095\nVENDOR_ID_IMAGE_ENTRY_INC = 20096\nVENDOR_ID_PLOPE_CONSULTING = 20097\nVENDOR_ID_DAVE_HOEBE = 20098\nVENDOR_ID_IMPULSE_INTERNET_SERVICES = 20099\nVENDOR_ID_SPLICED_NETWORKS_LLC = 20100\nVENDOR_ID_COX_ENTERPRISES = 20101\nVENDOR_ID_MULTIMEDIALENETLTD = 20102\nVENDOR_ID_ALLERYORG = 20103\nVENDOR_ID_DIGITAL_EVERGREEN_INC = 20104\nVENDOR_ID_NH_KOS_WORLD_INC = 20105\nVENDOR_ID_CENTER_FOR_LEADERSHIP_SOLUTIONS_LLC = 20106\nVENDOR_ID_ANIXIS = 20107\nVENDOR_ID_LPC_CONDOR_TECHNOLOGIES = 20108\nVENDOR_ID_CYNAP_LIMITED = 20109\nVENDOR_ID_MEDIAPLAN_INC = 20110\nVENDOR_ID_LEADER_ELECTRONICS_CORP = 20111\nVENDOR_ID_SMT_ELECTRONIC_TECHNOLOGY_LIMITED = 20112\nVENDOR_ID_VECINO = 20113\nVENDOR_ID_SYSTEMS_MANAGEMENT_ENTERPRISES_INC = 20114\nVENDOR_ID_JRAXIS = 20115\nVENDOR_ID_JANR = 20116\nVENDOR_ID_INSTITUTE_OF_APPLIED_INTERNET_TECHNOLOGY_INC = 20117\nVENDOR_ID_KCN_TECH_CO_LTD = 20118\nVENDOR_ID_EUROMARKNET_INTERNET_TECHNOLGIAI_S_TANCSAD_LTD = 20119\nVENDOR_ID_VIDEOTRON_CORP = 20120\nVENDOR_ID_IMOS_GMBH = 20121\nVENDOR_ID_MIND_N = 20122\nVENDOR_ID_SBASTIEN_NAMCHE_CONSULTING = 20123\nVENDOR_ID_COLOGNE_SYSTEMS_GMBH = 20124\nVENDOR_ID_VITEL_SOFTWARE_INC = 20125\nVENDOR_ID_LP_AGENT = 20126\nVENDOR_ID_TTYS0_FORMERLY_GUTENPRESS = 20127\nVENDOR_ID_SKH_TKO_KEI_TAK_PRIMARY_SCHOOL = 20128\nVENDOR_ID_SOURCECORPINC = 20129\nVENDOR_ID_ADVANCED_DIGITAL_SYSTEMS_INC = 20130\nVENDOR_ID_VERMEER_MANUFACTURING_COMPANY = 20131\nVENDOR_ID_AZONIC_SYSTEMS_INC = 20132\nVENDOR_ID_IZACORG = 20133\nVENDOR_ID_SURF_AND_SIP_INC = 20134\nVENDOR_ID_ELYO_SERVICES_LTD = 20135\nVENDOR_ID_SCHMIEDER_IT_SOLUTIONS_GMBH = 20136\nVENDOR_ID_CODESUPPLYCOM = 20137\nVENDOR_ID_AVARA_TECHNOLOGIES_PTY_LTD = 20138\nVENDOR_ID_LOBOS_INC = 20139\nVENDOR_ID_DAVOLINK = 20140\nVENDOR_ID_AXIS_INTERNET = 20141\nVENDOR_ID_QIANWANG_NETWORKS_CO = 20142\nVENDOR_ID_UFFAQ_TECHNOLOGIES_PRIVATE_LTD = 20143\nVENDOR_ID_OPTIMO_SERVICE_AG = 20144\nVENDOR_ID_SYNARTRA_LTD = 20145\nVENDOR_ID_ECUTEL = 20146\nVENDOR_ID_INTERNET_NETONRAMP = 20147\nVENDOR_ID_RUNIT_AG = 20148\nVENDOR_ID_OPTIM_LTD_INT_GRP = 20149\nVENDOR_ID_ZON_NEDERLAND_NV = 20150\nVENDOR_ID_MARTIN_LUTHER_UNIVERSITAET_HALLE_WITTENBERG = 20151\nVENDOR_ID_EUROFUNK_KAPPACHER_GMBH = 20152\nVENDOR_ID_ALCA_INFORMATIQUE_ET_TELECOM = 20153\nVENDOR_ID_REDES_DE_TELEFONA_MVIL_SA = 20154\nVENDOR_ID_WINTERTHUR_IBRICA_AIE = 20155\nVENDOR_ID_LOWES_COMPANIES_INC = 20156\nVENDOR_ID_HIGH_DESERT_EDUCATION_SERVICE_DISTRICT = 20157\nVENDOR_ID_WASHBURN_UNIVERSITY = 20158\nVENDOR_ID_FORCE_INCORPORATED = 20159\nVENDOR_ID_HILTON_HOTELS_CORPORATION = 20160\nVENDOR_ID_EWE_TEL_GMBH = 20161\nVENDOR_ID_TRINITY_CAPITAL_CORPORATION = 20162\nVENDOR_ID_KERNA_COMMUNICATIONS_LTD = 20163\nVENDOR_ID_SUBRAFTA_INDUSTRIES_INC = 20164\nVENDOR_ID_NIE_CORPORATION = 20165\nVENDOR_ID_DEODEO_COLTD = 20166\nVENDOR_ID_SONIC_INDUSTRIES_INC = 20167\nVENDOR_ID_GESELLSCHAFT_FUER_WISSENSCHAFTLICHE_DATENVERARBEITUNG_MBH_GOETTINGEN = 20168\nVENDOR_ID_URMET_TLC_SPA = 20169\nVENDOR_ID_SYSTEMLEGIONEN = 20170\nVENDOR_ID_BURWOOD_GROUP_INC = 20171\nVENDOR_ID_CRI_ADVANTAGE = 20172\nVENDOR_ID_SDM_AG = 20173\nVENDOR_ID_WELDATA_BV = 20174\nVENDOR_ID_FOR_A_COMPANY_LTD = 20175\nVENDOR_ID_MARK_ROSE = 20176\nVENDOR_ID_CHROME_CYZ_CO_LTD = 20177\nVENDOR_ID_NETSHIELD_PTY_LTD = 20178\nVENDOR_ID_RNDSOFT_COLTD = 20179\nVENDOR_ID_SONGHWASOFT = 20180\nVENDOR_ID_THE_REYNOLDS_AND_REYNOLDS_COMPANY = 20181\nVENDOR_ID_APPMIND_SOFTWARE_AB = 20182\nVENDOR_ID_WILLIAM_G_DEMPSEY_ASSOCIATES = 20183\nVENDOR_ID_MONTREAL_UNIVERSITY = 20184\nVENDOR_ID_BRAKE_PARTS_INC = 20185\nVENDOR_ID_PANAREEF_PTY_LTD = 20186\nVENDOR_ID_GARY_T_GIESEN = 20187\nVENDOR_ID_PHOENIX_SOFT = 20188\nVENDOR_ID_NATURE_CARE_COLLEGE = 20189\nVENDOR_ID_ICABLE_SYSTEM = 20190\nVENDOR_ID_THROUGHWAVE_INC = 20191\nVENDOR_ID_JK_TECHNOLOGIES_CORP = 20192\nVENDOR_ID_ERZIA_TECHNOLOGIES_SL = 20193\nVENDOR_ID_VOLEXIA_LTD = 20194\nVENDOR_ID_ALSYSTEMS_GMBH = 20195\nVENDOR_ID_RAINBOW_TRIANGLE_V_O_S = 20196\nVENDOR_ID_ST_OLAF_COLLEGE = 20197\nVENDOR_ID_EQUINOX_INFORMATION_SYSTEMS_INC = 20198\nVENDOR_ID_SUSCERTE_GOBIERNO_DE_LA_REPUBLICA_BOLIVARIANA_DE_VENEZUELA = 20199\nVENDOR_ID_SIOSS_LTD = 20200\nVENDOR_ID_KINNARPS_AB = 20201\nVENDOR_ID_FIRST_CANADIAN_TITLE_COMPANY_LTD = 20202\nVENDOR_ID_FIRST_CANADIAN_TITLE_COMPANY_LTD_2 = 20203\nVENDOR_ID_EBC = 20204\nVENDOR_ID_TIS_GRUPA_DOO = 20205\nVENDOR_ID_THE_UNWINS_WINE_GROUP_LTD = 20206\nVENDOR_ID_CLOSED_JOINT_STOCK_COMPANY_PIOGLOBAL_SERVICES = 20207\nVENDOR_ID_LATITUDE_TECHNOLOGIES_INC = 20208\nVENDOR_ID_SUBMERSION_CORPORATION = 20209\nVENDOR_ID_VIGILANT_PRIVACY_CORPORATION = 20210\nVENDOR_ID_INFORMATION_AND_TELECOMMUNICATIONS_TECHNOLOGY_CENTER = 20211\nVENDOR_ID_Q1LABS_INC = 20212\nVENDOR_ID_ROCK_ISLAND_COMMUNICATIONS_INC = 20213\nVENDOR_ID_NORDIC_INSTITUTE_FOR_THEORETICAL_PHYSICS = 20214\nVENDOR_ID_NETKEY_INC = 20215\nVENDOR_ID_MORE4U_GBR = 20216\nVENDOR_ID_POLYSTAR_INSTRUMENTS_AB = 20217\nVENDOR_ID_AJECO_OY = 20218\nVENDOR_ID_BSH_BOSCH_UND_SIEMENS_HAUSGERAETE_GMBH = 20219\nVENDOR_ID_EB_SOFTWARE_ENK_JOHN_WEHOLDT = 20220\nVENDOR_ID_IMAGINEON_OHG = 20221\nVENDOR_ID_PROFSOFT_SP_Z_OO = 20222\nVENDOR_ID_EMENTOR_NORGE_AS = 20223\nVENDOR_ID_INSTITUT_PASTEUR = 20224\nVENDOR_ID_SUB_SERVICE_LTD = 20225\nVENDOR_ID_CELSTAR_GUYANA_INC = 20226\nVENDOR_ID_BITPOINT_AG = 20227\nVENDOR_ID_TELEFLEX_INCORPORATED = 20228\nVENDOR_ID_KARL_HOFMANN_SCHULE_BERUFSBILDENDE_SCHULE = 20229\nVENDOR_ID_LUIS_LEWIS = 20230\nVENDOR_ID_LDAP_TECHNOLOGY = 20231\nVENDOR_ID_LOCALNET_SYSTEMS = 20232\nVENDOR_ID_PRO_G_INFORMATION_SECURITY_AND_RESEARCH_LTD = 20233\nVENDOR_ID_SUPERLATIV = 20234\nVENDOR_ID_LINUXFORCE_INC = 20235\nVENDOR_ID_CHINA_TELECOM_GUANGZHOU_RESEARCH_AND_DEVELOPMENT_CENTER = 20236\nVENDOR_ID_PJ_VELZEBOER = 20237\nVENDOR_ID_AMBIZ_INC = 20238\nVENDOR_ID_STERREWACHT_LEIDEN = 20239\nVENDOR_ID_CICA = 20240\nVENDOR_ID_PREMIERE_FERNSEHEN_GMBH_CO_KG = 20241\nVENDOR_ID_STEPHAN_RUCKELSHAUSSEN = 20242\nVENDOR_ID_SNR_SA = 20243\nVENDOR_ID_POLICE_IT_MANAGEMENT_AGENCY = 20244\nVENDOR_ID_DEVERTO_SYSTEMS_LTD = 20245\nVENDOR_ID_DELTA_ENERGY_SYSTEMS_SWEDEN_AB = 20246\nVENDOR_ID_BLADIANT_TECHNOLOGIES_INC = 20247\nVENDOR_ID_SONY_COMPUTER_ENTERTAINMENT_AMERICA_INC = 20248\nVENDOR_ID_TOUCHSTONE_SYSTEMS_INC = 20249\nVENDOR_ID_GLOBERANGER_CORPORATION = 20250\nVENDOR_ID_BN = 20251\nVENDOR_ID_NORTH_AMERICAN_WORLD_TRADE_GROUP = 20252\nVENDOR_ID_IOLOGICS_INC = 20253\nVENDOR_ID_MEDIATRIA_SRL = 20254\nVENDOR_ID_XALTED_INFORMATION_SYSTEMS_PVT_LTD = 20255\nVENDOR_ID_COMMUNICATE_NORGE_AS = 20256\nVENDOR_ID_AZIENDA_OSPEDALIERA_VILLASCASSI = 20257\nVENDOR_ID_SABANCI_UNIVERSITY = 20258\nVENDOR_ID_SANDPRINTS = 20259\nVENDOR_ID_MDTELECOM_INC = 20260\nVENDOR_ID_EMS_WIRELESS = 20261\nVENDOR_ID_ODYSSEY_SOFTWARE_INC = 20262\nVENDOR_ID_AURISP = 20263\nVENDOR_ID_MUIDERBERG_MHC = 20264\nVENDOR_ID_CAMBRIDGE_UNIVERSITY_FACULTY_OF_MUSIC = 20265\nVENDOR_ID_ONWEB_TECHNOLOGIES_CA = 20266\nVENDOR_ID_DAYS_OF_WONDER_INC = 20267\nVENDOR_ID_CHELSEA_TECHNOLOGIES_INC = 20268\nVENDOR_ID_UNIVERSITY_OF_YAMANASHI = 20269\nVENDOR_ID_XTENDO_TECHNOLOGIES_KURT_SCHWEDES = 20270\nVENDOR_ID_NETENRICH_INC = 20271\nVENDOR_ID_CREATIVE_MEDIA_GMBH = 20272\nVENDOR_ID_KUNSTHISTORISCHES_MUSEUM = 20273\nVENDOR_ID_CYBER_WARE_LTD = 20274\nVENDOR_ID_EX_FRUCTU_KFT = 20275\nVENDOR_ID_CITADEC_SOLUTIONS_OY = 20276\nVENDOR_ID_SYSTEM_NET = 20277\nVENDOR_ID_SAKANA_HOMENET = 20278\nVENDOR_ID_THE_POLESTAR_GROUP_LTD = 20279\nVENDOR_ID_CERNET_CHINA_EDUCATION_AND_RESEARCH_NETWORK = 20280\nVENDOR_ID_3TNET_EXPERIMENTAL_NETWORK = 20281\nVENDOR_ID_CRIBBINS_ASSOCIATES = 20282\nVENDOR_ID_KNOWGATE = 20283\nVENDOR_ID_FAURECIA = 20284\nVENDOR_ID_E_WORK_SPA = 20285\nVENDOR_ID_VIRUSBUSTER_LTD = 20286\nVENDOR_ID_KATHOLIEKE_THEOLOGISCHE_UNIVERSITEIT = 20287\nVENDOR_ID_TIMELINK_INTERNATIONAL_GMBH = 20288\nVENDOR_ID_INDATEX_GMBH = 20289\nVENDOR_ID_CNA_INSURANCE = 20290\nVENDOR_ID_ONTIMETEK_INC = 20291\nVENDOR_ID_DEPT_NETWORK_CENTER_CHINA_UNIVERSITY_OF_GEOSCIENCES = 20292\nVENDOR_ID_ONIRBAN_NETWORKS = 20293\nVENDOR_ID_CAPERIO_AB = 20294\nVENDOR_ID_EULER_HERMES_POLAND = 20295\nVENDOR_ID_BANCO_POPULAR = 20296\nVENDOR_ID_RODOS = 20297\nVENDOR_ID_IF_TECH = 20298\nVENDOR_ID_SUSSEX_COMMUNITY_WIRELESS = 20299\nVENDOR_ID_INSIGHTETE = 20300\nVENDOR_ID_IBM_ESERVER_X = 20301\nVENDOR_ID_MEDICA = 20302\nVENDOR_ID_BANCO_INDUSTRIAL_E_COMERCIAL_SA = 20303\nVENDOR_ID_MATRIX_BANCORP = 20304\nVENDOR_ID_DIR_A_S = 20305\nVENDOR_ID_KAPSCH_CARRIERCOM_AG = 20306\nVENDOR_ID_LIE_COMTEL = 20307\nVENDOR_ID_REGENT_GROUP_OF_COMPANIES = 20308\nVENDOR_ID_CIRIL_CENTRE_INTERUNIVERSITAIRE_DE_RESSOURCES_INFORMATIQUES_DE_LORRAINE = 20309\nVENDOR_ID_NICOTRA_SISTEMI_SPA = 20310\nVENDOR_ID_VIEWS_ON_NEWS = 20311\nVENDOR_ID_SEMANTICO_LIMITED = 20312\nVENDOR_ID_IX_TECH = 20313\nVENDOR_ID_FABDOUGLAS = 20314\nVENDOR_ID_OCA_OPENCALLARGENTINA = 20315\nVENDOR_ID_QOSMETRICS_INC = 20316\nVENDOR_ID_LISSI_CO_LTD = 20317\nVENDOR_ID_FRIEDRICH_LOCHNER_GMBH = 20318\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_SAN_FRANCISCO_INFORMATION_TECHNOLOGY_SERVICES = 20319\nVENDOR_ID_CAE_INC = 20320\nVENDOR_ID_GG_COMSOFT_GMBH = 20321\nVENDOR_ID_UDO_SCHLEDORN_EDV_BERATUNG = 20322\nVENDOR_ID_SUCCESS_MEDICAL_COMPUTER_CO_LTD = 20323\nVENDOR_ID_PROVINZIAL_RHEINLAND_VERSICHERUNG_AG = 20324\nVENDOR_ID_NESKA_SCHIFFAHRTS_UND_SPEDITIONSKONTOR_GMBH = 20325\nVENDOR_ID_EDUCATION_NATIONALE = 20326\nVENDOR_ID_HELSINKI_POLYTECHNIC_STADIA = 20327\nVENDOR_ID_WHITEHEAD_INSTITUTE_FOR_BIOMEDICAL_RESEARCH = 20328\nVENDOR_ID_UNIVERSITY_OF_MAINE_AT_FARMINGTON = 20329\nVENDOR_ID_WPS_HEALTH_INSURANCE = 20330\nVENDOR_ID_ILTC_INSTITUTO_DORIS_ARAGON = 20331\nVENDOR_ID_BAU_UND_WOHNGENOSSENSCHAFT_BRACHVOGEL = 20332\nVENDOR_ID_ASC_SYSTEM = 20333\nVENDOR_ID_IDS_GMBH = 20334\nVENDOR_ID_TEKNOLOGISK_INSTITUT = 20335\nVENDOR_ID_NTS_SPA = 20336\nVENDOR_ID_ARQUEMATICA = 20337\nVENDOR_ID_ADDAMARK_TECHNOLOGIES_INC = 20338\nVENDOR_ID_DANIEL_KELLEY_AND_ASSOCIATES = 20339\nVENDOR_ID_INFORMATION_BUILDERS_INC = 20340\nVENDOR_ID_LIFESIZE_COMMUNICATIONS_INC = 20341\nVENDOR_ID_AGENCIA_MARTIMA_DE_CONSIGNACIONES_SA = 20342\nVENDOR_ID_ALTEXIA = 20343\nVENDOR_ID_PORTRAIT_DISPLAYS_INC = 20344\nVENDOR_ID_EDGEWATER_COMPUTER_SYSTEMS_INC = 20345\nVENDOR_ID_METROFI_INC = 20346\nVENDOR_ID_EQUINOX_CONVERGED_SOLUTIONS_LTD = 20347\nVENDOR_ID_ARCUS_SOFTWARE_PTY_LTD = 20348\nVENDOR_ID_ARUBA_SRL = 20349\nVENDOR_ID_MILOS_MALIK = 20350\nVENDOR_ID_EUROPEAN_BRIDGE_CA = 20351\nVENDOR_ID_UNATECHCOLTD = 20352\nVENDOR_ID_EBANG_TELECOM_TECHNOLOGIES_HANGZHOU_CO_LTD = 20353\nVENDOR_ID_PLEXIS_COMPUTING_LIMITED = 20354\nVENDOR_ID_BUNDESVERBAND_DER_DEUTSCHEN_INDUSTRIE_EV = 20355\nVENDOR_ID_CONTER_CONTROL_DE_ENERGA_SA = 20356\nVENDOR_ID_TINC_ASSOCIATES_NV = 20357\nVENDOR_ID_CONCORDIA_COLLEGE = 20358\nVENDOR_ID_ON_COMMAND_CORPORATION = 20359\nVENDOR_ID_CRONBANK_AG = 20360\nVENDOR_ID_ECOLE_CENTRALE_DE_NANTES = 20361\nVENDOR_ID_ALCANET_INTERNATIONAL_DEUTSCHLAND_GMBH = 20362\nVENDOR_ID_TERRECABLATE = 20363\nVENDOR_ID_SYSTEM_ENGINEERING_INTERNATIONAL = 20364\nVENDOR_ID_MALAM_COMMUNICATIONS_LTD = 20365\nVENDOR_ID_DBI_TECHNOLOGIES = 20366\nVENDOR_ID_UNIVATES = 20367\nVENDOR_ID_MANZANITA_SYSTEMS = 20368\nVENDOR_ID_MEPHARTEC_SARL = 20369\nVENDOR_ID_ALLWARE_LTDA = 20370\nVENDOR_ID_VHAYU_TECHNOLOGIES = 20371\nVENDOR_ID_MICHAEL_A_NACHBAUR = 20372\nVENDOR_ID_COAST_TO_COAST_HOSTING = 20373\nVENDOR_ID_AVAL_NAGASAKI_CORPORATION = 20374\nVENDOR_ID_ATT_AUDIOTEXT_TELECOM_AG = 20375\nVENDOR_ID_CENTURY_SYSTEMS_INC = 20376\nVENDOR_ID_ITMG_GMBH = 20377\nVENDOR_ID_SABANCY_TELEKOMNIKASYON_HIZMETLERI_A = 20378\nVENDOR_ID_SPECSTROY_SVYAZ = 20379\nVENDOR_ID_PRIVACY_INC = 20380\nVENDOR_ID_SHOPPERTRAK = 20381\nVENDOR_ID_WORKING_KNOWLEDGE_INC = 20382\nVENDOR_ID_CNCLABSCHINA_NETCOM_GROUP_LABS = 20383\nVENDOR_ID_GAIA_EV = 20384\nVENDOR_ID_FRAMEWORX_INC = 20385\nVENDOR_ID_APPLE_DAILY_PUBLICATION_DEVELOPMENT_LIMITEDTAIWAN_BRANCH = 20386\nVENDOR_ID_EXTERNET_KFT = 20387\nVENDOR_ID_STREAMWIDE_SAS = 20388\nVENDOR_ID_CAPE_CLEAR_SOFTWARE = 20389\nVENDOR_ID_OT_ENERGY_SERVICES_AS_FORMERLY_I_C_ENERGO_AS = 20390\nVENDOR_ID_FAKUS_ELEKTRONIK_GMBH = 20391\nVENDOR_ID_OBERFINANZDIREKTION_BERLIN = 20392\nVENDOR_ID_MONEY_SERVICES_INC = 20393\nVENDOR_ID_ACKRIUM_2 = 20394\nVENDOR_ID_SIRCOM_SOFTWARE = 20395\nVENDOR_ID_ERBACH_ASSOCIATES = 20396\nVENDOR_ID_TELECOOPERATION_OFFICE_UNIVERSITY_OF_KARLSRUHE = 20397\nVENDOR_ID_QUINTECH_ELECTRONICS_AND_COMMUNICATIONS_INC = 20398\nVENDOR_ID_EDUCATIONAL_CONSULTING_SERVICES_INC = 20399\nVENDOR_ID_RAYTECH_TECHNOLOGIES_LTD = 20400\nVENDOR_ID_INTERMETRO_COMMUNICATIONS = 20401\nVENDOR_ID_COSTRON_CO_LTD = 20402\nVENDOR_ID_FIRST_COMMUNICATION_INC = 20403\nVENDOR_ID_PT_ELEKTRINDO_NUSANTARA = 20404\nVENDOR_ID_OMKHAR_LLC = 20405\nVENDOR_ID_NAESASOFTINC = 20406\nVENDOR_ID_FUHRER_ENGINEERING_AG = 20407\nVENDOR_ID_PYSNMP = 20408\nVENDOR_ID_KVINNHERAD_BREIBAND_AS = 20409\nVENDOR_ID_JANUSYS_NETWORKS_INC = 20410\nVENDOR_ID_LEPO = 20411\nVENDOR_ID_OAO_LINK = 20412\nVENDOR_ID_UNIVERSITY_OF_EXETER = 20413\nVENDOR_ID_FRACARRO_RADIOINDUSTRIE_SPA = 20414\nVENDOR_ID_SOLID_AB = 20415\nVENDOR_ID_FIFTH_THIRD_BANK = 20416\nVENDOR_ID_EUROTUNNEL = 20417\nVENDOR_ID_VECTORMAX_CORPORATION = 20418\nVENDOR_ID_SECURITY_CERTIFICATES_UK_LTD = 20419\nVENDOR_ID_DYAPTIVE_SYSTEMS_INC = 20420\nVENDOR_ID_RANGOSUR_SA = 20421\nVENDOR_ID_THE_LOG4PERL_PROJECT = 20422\nVENDOR_ID_NSS_SA = 20423\nVENDOR_ID_LUKA_NETCONSULT_GMBH = 20424\nVENDOR_ID_NOEA_CORPORATION = 20425\nVENDOR_ID_TELLUS_GROUP_CORP = 20426\nVENDOR_ID_TKD = 20427\nVENDOR_ID_ISTIA_AUTO = 20428\nVENDOR_ID_KALIOP_INTERACTIVE_MEDIA = 20429\nVENDOR_ID_OPTIMUM_SYSTEMES_INFORMATION = 20430\nVENDOR_ID_INVENTA_TECHNOLOGIES_INC = 20431\nVENDOR_ID_ITRACS_CORPORATION = 20432\nVENDOR_ID_PHOENIX_BROADBAND_TECHNOLOGIES_LLC = 20433\nVENDOR_ID_BOCA_INTERNET_TECHNOLOGIES_INC_DBA_ALERTSITE = 20434\nVENDOR_ID_SEENETIX_DOO = 20435\nVENDOR_ID_TRANSUNION_LLC = 20436\nVENDOR_ID_FUNC_INTERNET_INTEGRATION = 20437\nVENDOR_ID_CITIZEN_WATCH_COLTD = 20438\nVENDOR_ID_BODGIT_SCARPER = 20439\nVENDOR_ID_PATLITE_CORPORATION = 20440\nVENDOR_ID_REMASYS_PTY_LTD = 20441\nVENDOR_ID_SAMSUNG_SDS_CO_LTD = 20442\nVENDOR_ID_OPEN_DEVELOPMENT = 20443\nVENDOR_ID_MAX_SCHMIDT_PAPIERLOGISTIK = 20444\nVENDOR_ID_NONCOMMERCIAL_PARTNERSHIP_OPEN_FOOD_STOCK = 20445\nVENDOR_ID_COLEGIO_INGENIEROS_CAMINOS_CANALES_PUERTOS = 20446\nVENDOR_ID_APX_UK_LTD = 20447\nVENDOR_ID_GIBRNET = 20448\nVENDOR_ID_NETWISDOMBEIJINGTECHNOLOGY_COLTD = 20449\nVENDOR_ID_INDIGO_CORP = 20450\nVENDOR_ID_IDENTIGA_KARTO = 20451\nVENDOR_ID_FISHNET_INC = 20452\nVENDOR_ID_NAKINA_SYSTEMS = 20453\nVENDOR_ID_MIDDLESEX_COMMUNITY_COLLEGE = 20454\nVENDOR_ID_CONCORDE_MICROSYSTEMS = 20455\nVENDOR_ID_OMNIS_NETWORK_LLC = 20456\nVENDOR_ID_INCIPIENT_INC = 20457\nVENDOR_ID_SCHNEIDER_NATIONAL_INC = 20458\nVENDOR_ID_OKI_ELECTRIC_INDUSTRY_CO_LTD_FORMERLY_OF_NETWORKS_CO_LTD = 20459\nVENDOR_ID_GOLDENFILE_LTD = 20460\nVENDOR_ID_ORGANIKA_KUZNETSK = 20461\nVENDOR_ID_MULTIMEDIA_PROJECT_SRL = 20462\nVENDOR_ID_PERCEVAL = 20463\nVENDOR_ID_MI4E_AB = 20464\nVENDOR_ID_CAJA_DE_AHORROS_DE_CASTILLA_LA_MANCHA = 20465\nVENDOR_ID_DS_WILSON_CONSULTING = 20466\nVENDOR_ID_SAPIENS_TECHNOLOGIES_LTD = 20467\nVENDOR_ID_TATRAMED_SRO = 20468\nVENDOR_ID_LYCOS_EUROPE_GMBH = 20469\nVENDOR_ID_WINGCON_GMBH = 20470\nVENDOR_ID_BANCA_DI_ROMA_SPA = 20471\nVENDOR_ID_LYRA_NETWORK = 20472\nVENDOR_ID_PARLAMENTO_DE_ANDALUCIA = 20473\nVENDOR_ID_LONDONLINK_LTD = 20474\nVENDOR_ID_AVALANCHE_MOBILE_BV = 20475\nVENDOR_ID_FACHHOCHSCHULE_RAVENSBURG_WEINGARTEN = 20476\nVENDOR_ID_BUONGIORNO_SPA = 20477\nVENDOR_ID_NOOPYS_STORE_COMPANY = 20478\nVENDOR_ID_UMC_GENOMICS_LAB = 20479\nVENDOR_ID_STRIKEFORCE_TECHNOLOGIES_INC = 20480\nVENDOR_ID_CUBETECH = 20481\nVENDOR_ID_L_B_ENTERPRISES = 20482\nVENDOR_ID_MINISTERIO_DE_HACIENDA = 20483\nVENDOR_ID_SUKRA_HELITEK_INC = 20484\nVENDOR_ID_FUCHSIA_OPEN_SOURCE_SOLUTIONS = 20485\nVENDOR_ID_CHYRONHEGO_CORPORATION_FORMERLY_CHYRON_CORPORATION = 20486\nVENDOR_ID_AXT_SYSTEMS_PTY_LIMITED = 20487\nVENDOR_ID_DTMC_SYSTEMS = 20488\nVENDOR_ID_GEOTEK_DESIGN_SERVICES = 20489\nVENDOR_ID_CHINA_PUTIAN_INSTITUTE_OF_TECHNOLOGY = 20490\nVENDOR_ID_TEAMSUN_TECHNOLOGY_COLTD = 20491\nVENDOR_ID_MTT_COMPUTER_CONSULTING_INC = 20492\nVENDOR_ID_KOBLENZER_ELEKTRIZITTSWERK_UND_VERKEHRS_AG = 20493\nVENDOR_ID_CONSEJO_GENERAL_DEL_PODER_JUDICIAL = 20494\nVENDOR_ID_MARVELL_SEMICONDUCTOR_ISRAEL_LTD = 20495\nVENDOR_ID_CELLVISION_AS = 20496\nVENDOR_ID_UNIVERSITA_MEDITERRANEA_DI_REGGIO_CALABRIA = 20497\nVENDOR_ID_GNOBLE_TECHNOLOGIES = 20498\nVENDOR_ID_AZEUS_SYSTEMS_LTD = 20499\nVENDOR_ID_SOFT_LINK_AG = 20500\nVENDOR_ID_PADCOM = 20501\nVENDOR_ID_ALBERTSONS_INC = 20502\nVENDOR_ID_BEARINGPOINT_NZ_LTD = 20503\nVENDOR_ID_FRANZ_CHLADEK_EDV_DIENSTLEISTUNGEN = 20504\nVENDOR_ID_ASTROGATOR = 20505\nVENDOR_ID_HUETRON_COLTD = 20506\nVENDOR_ID_LUVANTIX_COLTD = 20507\nVENDOR_ID_URBANDALE_COMMUNITY_SCHOOL_DISTRICT = 20508\nVENDOR_ID_DIXON_HUGHES_PLLC = 20509\nVENDOR_ID_NATIONAL_TAIWAN_UNIVERSITY_HOSPITAL = 20510\nVENDOR_ID_MANZANITA_SYSTEMS_2 = 20511\nVENDOR_ID_ROMANIA_INTERNET_SECURITY_SYSTEMS = 20512\nVENDOR_ID_SARK_CONSULTANTS_PRIVATE_LIMITED = 20513\nVENDOR_ID_HOME_OFFICE_LIFE_KERNEL = 20514\nVENDOR_ID_FJD_INFORMATION_TECHNOLOGIES_AG = 20515\nVENDOR_ID_BATTLE_EAGLE_ENTERTAINMENT_INC = 20516\nVENDOR_ID_EBUILDCA_INC = 20517\nVENDOR_ID_FLASHBIT_RUF_AND_HEIDE_GBR = 20518\nVENDOR_ID_Y_SOFT_SRO = 20519\nVENDOR_ID_CRONYX_ENGINEERING = 20520\nVENDOR_ID_PSDA_INC = 20521\nVENDOR_ID_JAVALOBBYORG = 20522\nVENDOR_ID_TOM_ADDIS_AUTOMOTIVE_GROUP = 20523\nVENDOR_ID_SUNSTAR_SYSTEMS_INC = 20524\nVENDOR_ID_ANACOMP_INC = 20525\nVENDOR_ID_FRANCISCAN_MISSIONARIES_OF_OUR_LADY_HEALTH_SYSTEM_INC = 20526\nVENDOR_ID_SATHEE_INC = 20527\nVENDOR_ID_PARANA_EM_REDE_SISTEMAS_LTDA = 20528\nVENDOR_ID_AMETEK_SOLIDSTATE_CONTROLS_INC_DE_ARGENTINA = 20529\nVENDOR_ID_JOHANNES_KORNFELLNER = 20530\nVENDOR_ID_MATRIX_NETWORX = 20531\nVENDOR_ID_DEVSTREAM_CORPORATION = 20532\nVENDOR_ID_2KNOW_IT_GMBH = 20533\nVENDOR_ID_UNIKLINIK_ULM = 20534\nVENDOR_ID_LATVIJAS_MOBILAIS_TELEFONS_SIA = 20535\nVENDOR_ID_AUSTRIAN_PARLIAMENT = 20536\nVENDOR_ID_NIPPON_EXPRESS_COLTD = 20537\nVENDOR_ID_FIBRENETIX = 20538\nVENDOR_ID_FUR = 20539\nVENDOR_ID_RED_LION_CONTROLS_SIXNET = 20540\nVENDOR_ID_CITTIO_INC = 20541\nVENDOR_ID_AIRLINK_COMMUNICATIONS_INC = 20542\nVENDOR_ID_OPTOVIA_CORPORATION = 20543\nVENDOR_ID_SUNGKYUNKWAN_UNIVERSITY = 20544\nVENDOR_ID_BUSINESSLINK_ADVERTISING_LTD = 20545\nVENDOR_ID_WISSENSCHAFTSZENTRUM_BERLIN_FUER_SOZIALFORSCHUNG_GGMBH = 20546\nVENDOR_ID_MATTHIAS_BRAUN_EDV = 20547\nVENDOR_ID_SAP_HOSTING = 20548\nVENDOR_ID_PRIDE_SPA = 20549\nVENDOR_ID_RED_SQUARED_PLC = 20550\nVENDOR_ID_DDR_FREAK_LLC = 20551\nVENDOR_ID_SWISSCOM_BROADCAST_SA = 20552\nVENDOR_ID_WELLINGTON_MANAGEMENT_COMPANY_LLP = 20553\nVENDOR_ID_KRAAIORG = 20554\nVENDOR_ID_ETELEMETRY_INC = 20555\nVENDOR_ID_HASTINGS_ENTERTAINMENT_INC = 20556\nVENDOR_ID_NOFWARE_LTD = 20557\nVENDOR_ID_UNIVERSITY_COLLEGE_OF_OSLO_FACULTY_OF_ENGINEERING = 20558\nVENDOR_ID_ENGEDI_TECHNOLOGIES_INC = 20559\nVENDOR_ID_ALEXANDER_JANSSEN_CONSULTING = 20560\nVENDOR_ID_LIVEWAVE_INC = 20561\nVENDOR_ID_NORTH_ELECTRIC_COMPANY_INC = 20562\nVENDOR_ID_TNC_SA = 20563\nVENDOR_ID_ALBUQUERQUE_TECHNICAL_VOCATIONAL_INSTITUTE = 20564\nVENDOR_ID_OXFORD_WIRELESS_NETWORKS_LTD = 20565\nVENDOR_ID_TAONIX = 20566\nVENDOR_ID_TELEGRID_TECHNOLOGIES_INC = 20567\nVENDOR_ID_CITCO_TECHNOLOGY_MANGEMENT_INC = 20568\nVENDOR_ID_INVENTEC_ENTERPRISE_SYSTEM_CORP = 20569\nVENDOR_ID_SHENZHEN_YINGHETONG_INFORMATION_TECHNOLOGY_COLTD = 20570\nVENDOR_ID_INTERNATIONAL_TURNKEY_SYSTEMS = 20571\nVENDOR_ID_VIRTUAL_IMAGE = 20572\nVENDOR_ID_UNIVERSITTSKLINIKUM_AACHEN = 20573\nVENDOR_ID_OXYAN_SOFTWARE = 20574\nVENDOR_ID_NUCLEONET_INC = 20575\nVENDOR_ID_UNIVERSITY_OF_WALES_BANGOR = 20576\nVENDOR_ID_SCHUNK_EDV_SYSTEME_GMBH = 20577\nVENDOR_ID_ST_IVES_PLYMOUTH_LTD = 20578\nVENDOR_ID_BITSO_BUILD_IT_SOLUTIONS_GMBH = 20579\nVENDOR_ID_KIWI_ENTERPRISES = 20580\nVENDOR_ID_EVR_LTD = 20581\nVENDOR_ID_EBOCOM_LLC = 20582\nVENDOR_ID_UNION_SWITCH_SIGNAL = 20583\nVENDOR_ID_HUNAN_TALKWEB_INFORMATION_SYSTEM_CO_LTD = 20584\nVENDOR_ID_DIAMOND_STATE_PORT_CORP = 20585\nVENDOR_ID_CENTURY_DIGITAL_INVESTMENT_MANAGEMENT_CONSULTING_LTD = 20586\nVENDOR_ID_ROSE_ELECTRONICS = 20587\nVENDOR_ID_MAXTRONIC_INTERNATIONAL_CO_LTD = 20588\nVENDOR_ID_UKEDUPERSON_PILOT = 20589\nVENDOR_ID_RUBY_INC = 20590\nVENDOR_ID_VISTA_INTERNATIONAL_LTD = 20591\nVENDOR_ID_PEOPLES_TELEPHONE_SARATOV_CJSC = 20592\nVENDOR_ID_GUANGDONG_MULTIPLICATION_COMMUNICATION_LTD_CO = 20593\nVENDOR_ID_XSIF_SOFTWARE = 20594\nVENDOR_ID_PREFEITURA_MUNICIPAL_DE_FLORIANOPOLIS = 20595\nVENDOR_ID_TOMWARE_SRL = 20596\nVENDOR_ID_SURFCLOUD_LTD = 20597\nVENDOR_ID_EREMSTUDIO = 20598\nVENDOR_ID_COVENTRY_HEALTH_CARE_INC = 20599\nVENDOR_ID_ATLAB_SRL = 20600\nVENDOR_ID_THOMAS_JEFFERSON_HIGH_SCHOOL_FOR_SCIENCE_AND_TECHNOLOGY = 20601\nVENDOR_ID_XARAYA_DEVELOPMENT_GROUP = 20602\nVENDOR_ID_SOFTHOUSE_INFORMATICA_LTDA = 20603\nVENDOR_ID_NEXIOR_IT_SERVICES = 20604\nVENDOR_ID_ANTEPO_INC = 20605\nVENDOR_ID_CLINIQUES_UNIVERSITAIRES_SAINT_LUC = 20606\nVENDOR_ID_UNIVERSITY_OF_ANGERS = 20607\nVENDOR_ID_RADBOUD_UNIVERSITY_NIJMEGEN = 20608\nVENDOR_ID_SCALABLE_COMPUTING_LAB = 20609\nVENDOR_ID_NOAA_OAR_FSL_ITS_DSG = 20610\nVENDOR_ID_FLAREPATH_SOFTWARE_LIMITED = 20611\nVENDOR_ID_TIME_ICR = 20612\nVENDOR_ID_UNIVERSIT_CATHOLIQUE_DE_LOUVAIN_UCL = 20613\nVENDOR_ID_EXEO_TECHNOLOGIES_INC = 20614\nVENDOR_ID_NETLI_INC = 20615\nVENDOR_ID_CGS_WORLD_INC = 20616\nVENDOR_ID_TETESYS = 20617\nVENDOR_ID_CINETICA_SRL = 20618\nVENDOR_ID_UPC_CESKA_REPUBLIKA_AS = 20619\nVENDOR_ID_VALOX_SYSTEMS_COLTD = 20620\nVENDOR_ID_CRYSTAL_TECHNOLOGY_SOLUTIONS_GROUP_INC = 20621\nVENDOR_ID_IAING = 20622\nVENDOR_ID_RSDB_HOLDING_BV = 20623\nVENDOR_ID_NEXUS_TELECOM_AG = 20624\nVENDOR_ID_SERVICIUL_DE_TELECOMUNICATII_SPECIALE = 20625\nVENDOR_ID_SOFTWARE_SYSTEMS_A_S = 20626\nVENDOR_ID_INSTITUT_NATIONAL_DHISTOIRE_DE_LART = 20627\nVENDOR_ID_QUAL_PRO_CORPORATION = 20628\nVENDOR_ID_STREAMTEL = 20629\nVENDOR_ID_ODIBOSS_NETWORKS = 20630\nVENDOR_ID_MC110_GRUPO1 = 20631\nVENDOR_ID_BARRACUDA_NETWORKS_INC = 20632\nVENDOR_ID_SECURITY_FIRST_NETWORKS = 20633\nVENDOR_ID_LANGOCHAT = 20634\nVENDOR_ID_IBERISIGN = 20635\nVENDOR_ID_BENDIGO_AND_DISTRICT_DIVISION_OF_GENERAL_PRACTICE_INC = 20636\nVENDOR_ID_UNIVERSITY_OF_TEXAS_OF_THE_PERMIAN_BASIN = 20637\nVENDOR_ID_CAPITAL_MARKETS_CRC = 20638\nVENDOR_ID_ENTURA_LLC = 20639\nVENDOR_ID_INOMIAL_PTY_LTD = 20640\nVENDOR_ID_VINCENT_CONSULTING_GROUP_INC = 20641\nVENDOR_ID_NEXUS_COMMUNITY = 20642\nVENDOR_ID_PRIME_MX = 20643\nVENDOR_ID_VAASA_POLYTECHNIC = 20644\nVENDOR_ID_POLY_INFORMATION_LTD = 20645\nVENDOR_ID_CONVERGENZ = 20646\nVENDOR_ID_UNIVERSITY_OF_CAMBRIDGE_COMPUTER_LABORATORY = 20647\nVENDOR_ID_PK7 = 20648\nVENDOR_ID_TYCO_SAFETY_PRODUCTS = 20649\nVENDOR_ID_WG78_PTB_CENTRAL = 20650\nVENDOR_ID_COMPUTER_VISION_NETWORKS_INC = 20651\nVENDOR_ID_ARIZONA_DEPARTMENT_OF_ENVIRONMENTAL_QUALITY = 20652\nVENDOR_ID_ILLUSIONS_INTERNET_SOLUTIONS = 20653\nVENDOR_ID_TELEGENCE_CORPORATION = 20654\nVENDOR_ID_IKORO_DIGITAL_INC = 20655\nVENDOR_ID_ARCHER = 20656\nVENDOR_ID_RASCULAR_TECHNOLOGY_LTD = 20657\nVENDOR_ID_FINOBRA_SA = 20658\nVENDOR_ID_COMODO_JAPAN_INC = 20659\nVENDOR_ID_TOPONE_INFORMATION_TECHNOLOGY_CO_LTD = 20660\nVENDOR_ID_HITACHI_ULSI_SYSTEMS_CO_LTD = 20661\nVENDOR_ID_HEIKO_JERKE = 20662\nVENDOR_ID_BV_ASSOCIATES = 20663\nVENDOR_ID_NDE_NETZDESIGN_UND_ENTWICKLUNG_AG = 20664\nVENDOR_ID_ENERVATION_GMBH = 20665\nVENDOR_ID_SYNCHRONOSS_TECHNOLOGIES_INC = 20666\nVENDOR_ID_PROSILIENT_TECHNOLOGIES_AB = 20667\nVENDOR_ID_KABALLEROCOM_LLC = 20668\nVENDOR_ID_JELTECOM = 20669\nVENDOR_ID_SYSCOLOGNE_LUTZ_MISCHA_HEITMLLER = 20670\nVENDOR_ID_GEE_WIZ_CONSULTANCY = 20671\nVENDOR_ID_MEMORYLINK_CORP = 20672\nVENDOR_ID_MRO_DIRECT_INC = 20673\nVENDOR_ID_FULLERTON_ELEMENTARY_SCHOOL_DISTRICT = 20674\nVENDOR_ID_REED_NETWORKS = 20675\nVENDOR_ID_NIS4GRIDS = 20676\nVENDOR_ID_PULIZZI_ENGINEERING_INC = 20677\nVENDOR_ID_DEPARTMENT_OF_COMPUTER_SCIENCE_RENSSELAER_POLYTECHNIC_INSTITUTE = 20678\nVENDOR_ID_HELMER_ZIMMERMANN_GMBH_COKG = 20679\nVENDOR_ID_TEKMARK_CSL_INTERNATIONAL_SOLUTIONS_INC = 20680\nVENDOR_ID_ANTA_SYSTEMS_INC = 20681\nVENDOR_ID_CAMPUSMART_LTD = 20682\nVENDOR_ID_DIGIDOC_AB = 20683\nVENDOR_ID_METROPOLITAN_HEALTH_CORPORATE_PROPRIETARY_LIMITED = 20684\nVENDOR_ID_ADIES = 20685\nVENDOR_ID_POHL_CO_GMBH_CO_KG = 20686\nVENDOR_ID_ROVING_PLANET_INC = 20687\nVENDOR_ID_SEIRI_INC = 20688\nVENDOR_ID_ALLIANCE_INFORMATION_SYSTEMS_LLC = 20689\nVENDOR_ID_HARALD_SVAB = 20690\nVENDOR_ID_TECHTELL_INC = 20691\nVENDOR_ID_RUFFDOGS = 20692\nVENDOR_ID_DYNAWEB_IT_SERVICES_LP = 20693\nVENDOR_ID_LIGHTSPEED_TECHNOLOGIES_PTE_LTD = 20694\nVENDOR_ID_STRATUSSTATION_GROUP_INC = 20695\nVENDOR_ID_CAIXA_ANDORRANA_DE_SEGURETAT_SOCIAL = 20696\nVENDOR_ID_THINPRINT_GMBH = 20697\nVENDOR_ID_LIPETSKENERGO_JSC = 20698\nVENDOR_ID_CITIMORTGAGE = 20699\nVENDOR_ID_TREND_COMMUNICATIONS_LTD = 20700\nVENDOR_ID_PERYAM_KROLL_RESEARCH_CORPORATION = 20701\nVENDOR_ID_RITCHIE_CAPITAL_MANAGEMENT = 20702\nVENDOR_ID_EBUZ_INTERNETDIENSTE_GBR = 20703\nVENDOR_ID_MUUMILAAKSO_RY = 20704\nVENDOR_ID_HOLGUIN_FAHAN_ASSOCIATES_INC = 20705\nVENDOR_ID_VISION_WEB_NETWORKS_LLC = 20706\nVENDOR_ID_INTERCERVE_INC = 20707\nVENDOR_ID_SYSLABCOM_GMBH = 20708\nVENDOR_ID_FREMMES_SOFTWARE_UTVIKLING = 20709\nVENDOR_ID_AMERICAN_MEDICAL_RESPONSE_INC = 20710\nVENDOR_ID_PLATFORM_SOLUTIONS_INC = 20711\nVENDOR_ID_PARADISE_DATACOM_LLC = 20712\nVENDOR_ID_NORAN_TEL_COMMUNICATIONS_LIMITED = 20713\nVENDOR_ID_LIMITLAND_DEVELOPMENT = 20714\nVENDOR_ID_GIK_GESELLSCHAFT_FUER_INNOVATIVE_KOMMUNIKATIONSSYSTEME_MBH = 20715\nVENDOR_ID_CORBEL_SOLUTIONS_INC = 20716\nVENDOR_ID_FF_NETWORK_INC = 20717\nVENDOR_ID_AMERICAN_SCHOOL_FOUNDATION_OF_MONTERREY_AC = 20718\nVENDOR_ID_SHINLTD = 20719\nVENDOR_ID_MX_LOGIC_INC = 20720\nVENDOR_ID_ATOMICWEB_LLC = 20721\nVENDOR_ID_NETSPIRA_NETWORKS = 20722\nVENDOR_ID_INDUS_INTERNATIONAL_INC = 20723\nVENDOR_ID_CSIBRA_BT = 20724\nVENDOR_ID_ETRIA_LLP = 20725\nVENDOR_ID_WILMINGTON_COLLEGE = 20726\nVENDOR_ID_NET_THEATRE = 20727\nVENDOR_ID_SPOOK_LIMITED = 20728\nVENDOR_ID_PIOTR_MATUSZ = 20729\nVENDOR_ID_EEYE_DIGITAL_SECURITY = 20730\nVENDOR_ID_TRUETEL_COMMUNICATIONS_INC = 20731\nVENDOR_ID_BLUESCOPE_STEEL_LIMITED = 20732\nVENDOR_ID_JA_DAVEY = 20733\nVENDOR_ID_INTERNET_SHERIFF_TECHNOLOGY_LTD = 20734\nVENDOR_ID_ANDSCO_IT_PTY_LTD = 20735\nVENDOR_ID_RS_TELEMATICA_E_TECNOLOGIA_DA_INFORMACAO_LTDA = 20736\nVENDOR_ID_CYNICS_AT_LARGE = 20737\nVENDOR_ID_TIBBO_TECHNOLOGY_INC = 20738\nVENDOR_ID_CORTEC_SYSTEMS_PTY_LTD = 20739\nVENDOR_ID_AXISSOFT_CORPORATION = 20740\nVENDOR_ID_QALA_SINGAPORE_PTE_LTD = 20741\nVENDOR_ID_HORMANN_FUNKWERK_KLLEDA = 20742\nVENDOR_ID_ISO_INTERNATIONAL_ORGANIZATION_FOR_STANDARDIZATION = 20743\nVENDOR_ID_ICZ_AS = 20744\nVENDOR_ID_WLN_TECHNOLOGIES = 20745\nVENDOR_ID_DIS_DATA_INTEGRATION_SERVICES_GMBH = 20746\nVENDOR_ID_NORTEK = 20747\nVENDOR_ID_FREI_GMBH = 20748\nVENDOR_ID_GRINTEK_TCI_PTY_LTD = 20749\nVENDOR_ID_TECHNOLUTION_BV = 20750\nVENDOR_ID_PERAX = 20751\nVENDOR_ID_SA_POLYCLINIQUE_DE_COURLANCY = 20752\nVENDOR_ID_PHAROS_CONSULTING_PTY_LTD = 20753\nVENDOR_ID_UNIVERSITTSKLINIKUM_AACHEN_2 = 20754\nVENDOR_ID_WESTGLOBAL_LTD = 20755\nVENDOR_ID_HET_CONCERTGEBOUW_NV = 20756\nVENDOR_ID_PRISACOM_SA = 20757\nVENDOR_ID_NETSURITY_LTD = 20758\nVENDOR_ID_KEPLER_ROMINFO_SA = 20759\nVENDOR_ID_AUTONOMOUS_NONCOMMERCIAL_ORGANIZATION_SCIENTIFIC_AND_TRAINING_CENTER_OF = 20760\nVENDOR_ID_UNIKLINIKUM_MANNHEIM = 20761\nVENDOR_ID_PASSAGE_CONSORTIA_C_O_SONY_ELECTRONICS_TRUSTEE = 20762\nVENDOR_ID_FASTENAL_COMPANY_INC = 20763\nVENDOR_ID_DAVID_CROSS_TECHNICAL_CONSULTING = 20764\nVENDOR_ID_ROSATI_KAIN = 20765\nVENDOR_ID_QAI_INDIA_LTD = 20766\nVENDOR_ID_VEREINIGTE_POSTVERSICHERUNG_VVAG = 20767\nVENDOR_ID_ST_MARYS_HIGH_SCHOOL = 20768\nVENDOR_ID_IMMACULATE_CONCEPTION_SCHOOL = 20769\nVENDOR_ID_ADSTRA_SYSTEMS_INC = 20770\nVENDOR_ID_PRIORITY_NETWORKS_INC = 20771\nVENDOR_ID_OPTICA_TECHNOLOGIES_INC = 20772\nVENDOR_ID_ACCENTURE_BUSINESS_SERVICES_FOR_UTILITIES = 20773\nVENDOR_ID_OMT_SYSTEMS_SHENZHEN_LIMITED = 20774\nVENDOR_ID_ASPIRE_INFORMATION_SERVICES_LLC = 20775\nVENDOR_ID_INAF_OSSERVATORIO_ASTRONOMICO_DI_PADOVA = 20776\nVENDOR_ID_FLEXETECH_SOLUTIONS_INC = 20777\nVENDOR_ID_SMARTWARE = 20778\nVENDOR_ID_INOVA_VENTURE_PTE_LTD = 20779\nVENDOR_ID_GEMEINSAMENES_GEBIETSRECHENZENTRUM_HAGEN_SG_25 = 20780\nVENDOR_ID_SCIENTIFIC_RESEARCH_INSTITUTE_OF_APPLIED_INFORMATION_TECHNOLOGIES = 20781\nVENDOR_ID_SOC_COOP_BILANCIAI = 20782\nVENDOR_ID_ARGELA_YAZILIM_VE_BILISIM_TEKNOLOJILERI_AS = 20783\nVENDOR_ID_HITEKNOWLEDGE_LIMITED = 20784\nVENDOR_ID_BETA_SYSTEMS_SOFTWARE_AG = 20785\nVENDOR_ID_TECHSPAN_SYSTEM_LTD = 20786\nVENDOR_ID_PARC_CIENTIFIC_DE_BARCELONA = 20787\nVENDOR_ID_UNASSIGNED_30 = 20788\nVENDOR_ID_POWERMEMOBILECOM = 20789\nVENDOR_ID_HARRINGTON_GROUP_INC = 20790\nVENDOR_ID_KEYXNET_CONSULTING_SRL = 20791\nVENDOR_ID_ERDMANN_SYSTEMBERATUNG = 20792\nVENDOR_ID_NETBRIDGE_INC = 20793\nVENDOR_ID_IT_SCHALLER_GMBH = 20794\nVENDOR_ID_REALTIMEIMAGE = 20795\nVENDOR_ID_SHENZHEN_ROYTEL_TECHNOLOGY_LTD = 20796\nVENDOR_ID_GREAT_DRAGON_INFOMATION_TECHNOLOGYGROUPCOLTD = 20797\nVENDOR_ID_TDN_GMBH = 20798\nVENDOR_ID_UNIVERSITAET_KONSTANZ = 20799\nVENDOR_ID_JSC_PROMSVYAZ_INVEST = 20800\nVENDOR_ID_EXXON_MOBIL_CORPORATION = 20801\nVENDOR_ID_SANLAM_LTD = 20802\nVENDOR_ID_TYLER_RETAIL_SYSTEMS_INC = 20803\nVENDOR_ID_OPEN_PLC_EUROPEAN_RESEARCH_ALLIANCE_OPERA = 20804\nVENDOR_ID_BEIJING_SUNNIWELL_BROADBAND_DITITAL_TECHNOLOGY_CORP_LTD = 20805\nVENDOR_ID_SEGURMATICA = 20806\nVENDOR_ID_FEDERAL_BUREAU_OF_INVESTIGATION = 20807\nVENDOR_ID_MONACO_TELECOM = 20808\nVENDOR_ID_AGAMI_SYSTEMS_INC = 20809\nVENDOR_ID_HAMILTON_CONSULTING_NSW_PTY_LTD = 20810\nVENDOR_ID_INTERNATIONAL_SECURITIES_EXCHANGE_LLC = 20811\nVENDOR_ID_NETMON_INFORMATION_SYSTEMS_LTD = 20812\nVENDOR_ID_IPCON_INFORMATIONSSYSTEME_OHG = 20813\nVENDOR_ID_AMC_SA = 20814\nVENDOR_ID_ZEND_TECHNOLOGIES_LTD = 20815\nVENDOR_ID_ALEXANDRU_IOAN_CUZA_UNIVERSITY = 20816\nVENDOR_ID_ARGOS_MESSTECHNIK_GMBH = 20817\nVENDOR_ID_SUNTEK_TECHNOLOGY_CO_LTD = 20818\nVENDOR_ID_ALLENBROOK_INC = 20819\nVENDOR_ID_THE_UNIVERSITY_OF_TEXAS_AT_SAN_ANTONIO = 20820\nVENDOR_ID_INFORMATION_AND_DISPLAY_SYSTEMS_LLC = 20821\nVENDOR_ID_FRANWELL_INC = 20822\nVENDOR_ID_CAREFX_CORPORATION = 20823\nVENDOR_ID_LIONS_GATE_SOFTWARE_INC = 20824\nVENDOR_ID_TOUCH22_SOFTWARE_AND_CONSULTING = 20825\nVENDOR_ID_CONVERA = 20826\nVENDOR_ID_BANCO_CENTRAL_DE_COSTA_RICA = 20827\nVENDOR_ID_SCHWEIZERISCHE_LEBENSVERSICHERUNGS_UND_RENTENANSTALT = 20828\nVENDOR_ID_STADTVERWALTUNG_DRESDEN = 20829\nVENDOR_ID_REFLEX_AS = 20830\nVENDOR_ID_CZFREENET = 20831\nVENDOR_ID_RYDER_SYSTEMS_LTD = 20832\nVENDOR_ID_TERMINALES_DE_TELECOMUNICACION_TERRESTRE_SL = 20833\nVENDOR_ID_ALIKE_GROUP = 20834\nVENDOR_ID_BD_DIGITAL_LAB_CO_LTD = 20835\nVENDOR_ID_CONFER_COMPUTING_CONSULTANTS_COMPANY = 20836\nVENDOR_ID_DFU_SERVICES = 20837\nVENDOR_ID_GAVI_MBH = 20838\nVENDOR_ID_BROADCAST_TOOLS_INC = 20839\nVENDOR_ID_THOMSON_TECHNOLOGY_LIMITED = 20840\nVENDOR_ID_THE_COMMUNITY_GROUP_INC = 20841\nVENDOR_ID_ARENA_SOLUTIONS_INC = 20842\nVENDOR_ID_PHILIPP_STROZYK = 20843\nVENDOR_ID_LOREAL = 20844\nVENDOR_ID_LINUX_INFORMATION_SYSTEMS_AG = 20845\nVENDOR_ID_SARA = 20846\nVENDOR_ID_ATLAS_DEVELOPMENT_CORPORATION = 20847\nVENDOR_ID_ZOPE_CORPORATION = 20848\nVENDOR_ID_OMT_SYSTEMS_SHENZHEN_LIMITED_2 = 20849\nVENDOR_ID_TECHNERDVANA = 20850\nVENDOR_ID_GROUPE_BELL_NORDIQ_INC = 20851\nVENDOR_ID_CRIMTRAC = 20852\nVENDOR_ID_EURORAIL_INTERNATIONAL = 20853\nVENDOR_ID_OTC_WIRELESS_INC = 20854\nVENDOR_ID_SCIENTIFIC_TECHNOLOGIES_CORP = 20855\nVENDOR_ID_PATTERN_MATCHED_TECHNOLOGIES = 20856\nVENDOR_ID_INSPIRED_TECHNOLOGIES_LTD = 20857\nVENDOR_ID_CASA_SYSTEMS_INC = 20858\nVENDOR_ID_CITCO_TECHNOLOGY_MANGEMENT_INC_2 = 20859\nVENDOR_ID_LIBERTY_ENTERPRISES_INC = 20860\nVENDOR_ID_DANSK_SYSTEM_ELEKTRONIK_A_S = 20861\nVENDOR_ID_ONLINE_LEARNING_AUSTRALIA_PTY_LTD = 20862\nVENDOR_ID_UTIBA_PTY_LTD = 20863\nVENDOR_ID_TOWER_TECHNOLOGIES = 20864\nVENDOR_ID_SRI_LANKA_TELECOM = 20865\nVENDOR_ID_ELJAKIM_INFORMATION_TECHNOLOGY_BV = 20866\nVENDOR_ID_DANFFERLIU_CORPORATION = 20867\nVENDOR_ID_HELGE_GUDMUNDSEN = 20868\nVENDOR_ID_FRANK_VERCRUESSE = 20869\nVENDOR_ID_PUFFERBOX_PTY_LTD = 20870\nVENDOR_ID_KREDIETBANK_SA_LUXEMBOURG = 20871\nVENDOR_ID_STO_AG = 20872\nVENDOR_ID_PROTEI_LTD = 20873\nVENDOR_ID_HMS_PATENTBYR_ANS = 20874\nVENDOR_ID_DEVEXPERTS_LLC = 20875\nVENDOR_ID_VORARLBERGER_TELEKOMMUNIKATIONS_GESMBH = 20876\nVENDOR_ID_VINE_LINUX = 20877\nVENDOR_ID_VINECAVES_LTD = 20878\nVENDOR_ID_MBIT_GMBH = 20879\nVENDOR_ID_MAGNAQUEST_TECHNOLOGIES = 20880\nVENDOR_ID_CATENARE_LLC = 20881\nVENDOR_ID_PCDEMANO_INC = 20882\nVENDOR_ID_EVANGELISCHE_LANDESKIRCHE_WRTTEMBERG = 20883\nVENDOR_ID_BDT_GMBH_CO_KG = 20884\nVENDOR_ID_KONTRON_MODULAR_COMPUTERS_SA_FORMERLY_THALES_COMPUTERS = 20885\nVENDOR_ID_DR_GLINZ_COVIS_GMBH = 20886\nVENDOR_ID_SOLSOFT = 20887\nVENDOR_ID_SIS_SPEKTRUM_SRO = 20888\nVENDOR_ID_COMSYS_BV = 20889\nVENDOR_ID_SEBASTIAN_KUEPPERS_COMPUTER_MEDIEN_UND_EVENTSERVICE = 20890\nVENDOR_ID_STAR_INTERNET_LTD = 20891\nVENDOR_ID_CITEL_TECHNOLOGIES_INC = 20892\nVENDOR_ID_LSHIFT_LTD = 20893\nVENDOR_ID_YIRDIS_BV = 20894\nVENDOR_ID_DIPLOMADO = 20895\nVENDOR_ID_NUVOX_COMMUNICATIONS_INC = 20896\nVENDOR_ID_DETERMINA_INC = 20897\nVENDOR_ID_SUNGARD_SBI = 20898\nVENDOR_ID_APOLLO_INTERACTIVE_INC = 20899\nVENDOR_ID_QUANTECH_GLOBAL_SERVICES_LLC = 20900\nVENDOR_ID_VIRTUAL_BUSINESS_COMMUNITIES_INC = 20901\nVENDOR_ID_JOHNSTONSHOMEORG = 20902\nVENDOR_ID_CHILDRENS_HOSPITAL_BOSTON = 20903\nVENDOR_ID_RISOLVIAMO = 20904\nVENDOR_ID_UNICIBLE_SA = 20905\nVENDOR_ID_CUBIKA_SA = 20906\nVENDOR_ID_REGENT_COLLEGE = 20907\nVENDOR_ID_EMERGIN_INC = 20908\nVENDOR_ID_EXEMPLA_HEALTHCARE = 20909\nVENDOR_ID_PT_ONEHUB_TECHNOLOGY = 20910\nVENDOR_ID_TWILLEYORG = 20911\nVENDOR_ID_PUBLISHING_FIRM_VIDRODZHENIA_LTD = 20912\nVENDOR_ID_OJSC_RTCOMMRU = 20913\nVENDOR_ID_DEUTSCHE_TELEKOM_CSC_WUERZBURG = 20914\nVENDOR_ID_NATIONAL_BANK_AG_ESSEN = 20915\nVENDOR_ID_AVTECH_SOFTWARE_INC = 20916\nVENDOR_ID_FONDSSERVICEBANK = 20917\nVENDOR_ID_WICKED_STUDIO = 20918\nVENDOR_ID_MANOBI = 20919\nVENDOR_ID_PKWARE_INC = 20920\nVENDOR_ID_HILLSTONE_PRODUCTS_LTD = 20921\nVENDOR_ID_PRO_DIMENSION_LTD = 20922\nVENDOR_ID_MYXOMOP = 20923\nVENDOR_ID_PROYECTO_OTF_UDECHILE = 20924\nVENDOR_ID_BAKER_MCKENZIE = 20925\nVENDOR_ID_MASE_TECHNOLOGIES_LLC = 20926\nVENDOR_ID_TSI_SPORTS_INCORPORATED = 20927\nVENDOR_ID_TANGENT_SYSTEMS = 20928\nVENDOR_ID_SYSGO_AG = 20929\nVENDOR_ID_REN_ALEGRA_SEZ = 20930\nVENDOR_ID_SOFTWARE_BUILDERS_EXCHANGE = 20931\nVENDOR_ID_YOBEORG = 20932\nVENDOR_ID_TOMSK_STATE_UNIVERSITY_OF_CONTROL_SYSTEMS_AND_RADIOELECTRONICS = 20933\nVENDOR_ID_ITDESIGN_SOFTWARE_PROJECTS_AND_CONSULTING = 20934\nVENDOR_ID_ANYSTREAM_INC = 20935\nVENDOR_ID_CHINA_COMMUNICATIONS_STANDARDS_ASSOCIATIONS = 20936\nVENDOR_ID_NIMROD_AS = 20937\nVENDOR_ID_ETL_SYSTEMS_LTD = 20938\nVENDOR_ID_VIDEONEXT_LLC = 20939\nVENDOR_ID_THE_EBIZ_SHOP_LLC = 20940\nVENDOR_ID_PALO_ALTO_RESEARCH_CENTER_INC = 20941\nVENDOR_ID_CHINA_TELECOM_GUANGZHOU_RESEARCH_AND_DEVELOPMENT_CENTER_2 = 20942\nVENDOR_ID_QOSMOS_SA = 20943\nVENDOR_ID_MODULAR_BLADE_SERVER = 20944\nVENDOR_ID_EAST_ONLINE_LLC = 20945\nVENDOR_ID_BDM_BUSINESS_DATA_MANAGEMENT_GMBH = 20946\nVENDOR_ID_COX_COMMUNICATIONS_SAN_DIEGO = 20947\nVENDOR_ID_MANZANITA_INC = 20948\nVENDOR_ID_ANADARKO_PETROLEUM_INC = 20949\nVENDOR_ID_INTERHACK_CORPORATION = 20950\nVENDOR_ID_BREVIENT_TECHNOLOGIES_INC = 20951\nVENDOR_ID_EXABRIDGE = 20952\nVENDOR_ID_HAIFA_UNIVERSITY = 20953\nVENDOR_ID_XTENDREACH_LIMITED = 20954\nVENDOR_ID_SUNET = 20955\nVENDOR_ID_EMERSON_CLIMATE_TECHNOLOGIES_ALCO_PRODUCTS = 20956\nVENDOR_ID_E_GOVERNMENT_SOLUTIONS_UK_LTD = 20957\nVENDOR_ID_I_NEX_CORPORATION_PTY_LTD = 20958\nVENDOR_ID_SIEMENS_DD_HRVATSKA = 20959\nVENDOR_ID_LABORATORY_OF_CONTENT_SYSTEMSLCS = 20960\nVENDOR_ID_COMMUNICATION_TECHNOLOGIES = 20961\nVENDOR_ID_MULTIMEDIA_POLSKA = 20962\nVENDOR_ID_KATTARE_INTERNET_SERVICES = 20963\nVENDOR_ID_CAMILLE_BAUER = 20964\nVENDOR_ID_HVR_CONSULTING_SERVICES_LTD = 20965\nVENDOR_ID_JESUS_COLLEGE_OXFORD = 20966\nVENDOR_ID_ANEVIA = 20967\nVENDOR_ID_GENOMATIX_SOFTWARE_GMBH = 20968\nVENDOR_ID_EUDATA_SYSTEMS_SA = 20969\nVENDOR_ID_LISA_GMBH = 20970\nVENDOR_ID_BALTNET_LTD = 20971\nVENDOR_ID_BRITISH_AIRWAYS_PLC = 20972\nVENDOR_ID_NEXTIRAONE_CZECH_SRO = 20973\nVENDOR_ID_AMERICAN_MEGATRENDS_INC = 20974\nVENDOR_ID_PONTUSYS = 20975\nVENDOR_ID_PAUL_SMITH_COMPUTER_SERVICES = 20976\nVENDOR_ID_COMUNE_DI_IMOLA = 20977\nVENDOR_ID_DC_SATNET_LTD = 20978\nVENDOR_ID_WT_FINLAND_LTD = 20979\nVENDOR_ID_TUX_LLC = 20980\nVENDOR_ID_ATROCITY_MUD = 20981\nVENDOR_ID_PCDEMANO_INC_2 = 20982\nVENDOR_ID_IIT_MADRAS = 20983\nVENDOR_ID_GEONETICS = 20984\nVENDOR_ID_NETHONNUN_EHF = 20985\nVENDOR_ID_UNIVERSIDAD_DEL_CEMA = 20986\nVENDOR_ID_PHILADELPHIA_COMPUTER_INSTITUTE = 20987\nVENDOR_ID_RACKSPACE = 20988\nVENDOR_ID_SYSTEMS_RESEARCH_AND_DEVELOPMENT_INC = 20989\nVENDOR_ID_ASPECT_LOSS_PREVENTION_LLC = 20990\nVENDOR_ID_FAMILY_WILLIAMS_INC = 20991\nVENDOR_ID_CRADLEPOINT_INC = 20992\nVENDOR_ID_CAMUJO = 20993\nVENDOR_ID_EUROPA_COMMUNICATIONS_PTY_LTD = 20994\nVENDOR_ID_PROGRESS_ENERGY = 20995\nVENDOR_ID_ACCESS_CO_LTD = 20996\nVENDOR_ID_LOTUS_TECHNOLOGIES_SRL = 20997\nVENDOR_ID_HONEYWELL_INTERNATIONAL_INC = 20998\nVENDOR_ID_WILLIS_GROUP = 20999\nVENDOR_ID_IMETRIC = 21000\nVENDOR_ID_STRATIZON_INC = 21001\nVENDOR_ID_PARALLAX_NETWORKING_LIMITED = 21002\nVENDOR_ID_DYNAMIC_NETWORK_INTEGRATION_INC = 21003\nVENDOR_ID_AMERICAN_TECHNOLOGY_INTEGRATORS_CORPORATION = 21004\nVENDOR_ID_GERMAN_NETWORK_GMBH = 21005\nVENDOR_ID_OPENDASORG = 21006\nVENDOR_ID_INOSTOR = 21007\nVENDOR_ID_INFORMED_CONTROL_INC = 21008\nVENDOR_ID_MCGUIRE_ASSOCIATES_INC = 21009\nVENDOR_ID_ECOLLEGE = 21010\nVENDOR_ID_DOTNETSHOP = 21011\nVENDOR_ID_IHOTEL_INTERNATIONAL_INC = 21012\nVENDOR_ID_XIRRUS_INC = 21013\nVENDOR_ID_GAMERZ_HUB = 21014\nVENDOR_ID_ART_OF_LIVING_FOUNDATION = 21015\nVENDOR_ID_INTRUGUARD_DEVICES = 21016\nVENDOR_ID_IPEAK_NETWORKS_INC = 21017\nVENDOR_ID_PAXAR_AMERICAS_INC = 21018\nVENDOR_ID_RIVER_SYSTEMS_INC = 21019\nVENDOR_ID_STOWARZYSZENIE_FREEZE_NET_AMATORSKA_SIEC_KOMPUTEROWA = 21020\nVENDOR_ID_PERIMETER_TECHNOLOGY_CENTER_INC = 21021\nVENDOR_ID_THE_COLLEGE_BOARD = 21022\nVENDOR_ID_FORBRICH_COMPUTER_CONSULTING_LTD = 21023\nVENDOR_ID_ELECTRONICS_CORPORATION_OF_INDIA_LTD = 21024\nVENDOR_ID_ICOMM_TELE_LTD = 21025\nVENDOR_ID_HAUF_ELECTRIC_CO = 21026\nVENDOR_ID_MIP = 21027\nVENDOR_ID_DIGITAL_MOTORWORKS_LP = 21028\nVENDOR_ID_GIANT_STEPS = 21029\nVENDOR_ID_PEERAPP = 21030\nVENDOR_ID_HELGA_ADAM_UND_ROCIO_MANZANO_ROMERO_GBRMBH = 21031\nVENDOR_ID_ARGENT_NETWORKS_LTD = 21032\nVENDOR_ID_TAIKANG_LIFE_INSURANCE_COLTD = 21033\nVENDOR_ID_PRATAMA_SASTRIAWAN_SYSTEMS = 21034\nVENDOR_ID_DEV_SYSTEMTECHNIK_GMBH_CO_KG = 21035\nVENDOR_ID_ULTRAPOWER_SOFTWARE_CO_LTD_BEIJING = 21036\nVENDOR_ID_CHUNG_HUNG_STEEL_CO_LTD = 21037\nVENDOR_ID_RADIO_IP_SOFTWARE_INC = 21038\nVENDOR_ID_YUCA_TECH_CORP = 21039\nVENDOR_ID_FIBERPLEX_INC = 21040\nVENDOR_ID_BANCHILE_CORREDORES_DE_BOLSA_SA = 21041\nVENDOR_ID_PRT_SYSTEMS_LTD = 21042\nVENDOR_ID_AREVA = 21043\nVENDOR_ID_MAURO_CALDERARA = 21044\nVENDOR_ID_INTINOR_AB = 21045\nVENDOR_ID_UNIVERSITY_OF_WISCONSIN_EXTENSION = 21046\nVENDOR_ID_BANCO_DE_CREDITO_E_INVERSIONES = 21047\nVENDOR_ID_COPENHAGEN_MUNICIPAL = 21048\nVENDOR_ID_ROMPETROL_SA = 21049\nVENDOR_ID_FREEBITS = 21050\nVENDOR_ID_INIT_SEVEN_AG = 21051\nVENDOR_ID_INTERACT_SA = 21052\nVENDOR_ID_SINGLEFIN = 21053\nVENDOR_ID_YARDI_SYSTEMS_INC = 21054\nVENDOR_ID_SRI_LANKA_TELECOM_SERVICES_LTD = 21055\nVENDOR_ID_DEPLOYLINUX_CONSULTING = 21056\nVENDOR_ID_THEMIS_COMPUTER = 21057\nVENDOR_ID_TIZOR_SYSTEMS = 21058\nVENDOR_ID_NYVRI = 21059\nVENDOR_ID_GLOBAL_HEALTHCARE_EXCHANGE = 21060\nVENDOR_ID_NETAQUILA_SOLUTIONS_PVT_LTD = 21061\nVENDOR_ID_CHRIS_FORKIN_CONSULTING = 21062\nVENDOR_ID_MAQSYS = 21063\nVENDOR_ID_TSINGTEC_LTD = 21064\nVENDOR_ID_SHENZHEN_WLAN_RESEARCH_CENTERCCSA = 21065\nVENDOR_ID_SNCF_SOCIT_NATIONALE_DES_CHEMINS_DE_FER_FRANAIS = 21066\nVENDOR_ID_ELITECORE_TECHNOLOGIES_LTD = 21067\nVENDOR_ID_UNIVERSITY_OF_SOUTHERN_DENMARK = 21068\nVENDOR_ID_RADFORD_CONTROL_SYSTEMS = 21069\nVENDOR_ID_INTENTIA_RESEARCH_DEVELOPMENT = 21070\nVENDOR_ID_EFS_INC = 21071\nVENDOR_ID_ARNOLD_MAGNETICS = 21072\nVENDOR_ID_WEBCREATIONSCA = 21073\nVENDOR_ID_PUREWAVE_NETWORKS_INC = 21074\nVENDOR_ID_OLD_RED_MILL = 21075\nVENDOR_ID_SCIENCE_MUSEUM_OF_MINNESOTA = 21076\nVENDOR_ID_DIGITAR = 21077\nVENDOR_ID_DAFA = 21078\nVENDOR_ID_HAIPE = 21079\nVENDOR_ID_FROG_NAVIGATION_SYSTEMS_BV = 21080\nVENDOR_ID_PERSIUM_INC = 21081\nVENDOR_ID_EUN_PARTNERSHIP_AISBL = 21082\nVENDOR_ID_MAIRIE_DE_PARIS = 21083\nVENDOR_ID_SD_LABORATORIES = 21084\nVENDOR_ID_OPEN_ALLIANCE_SOFWARE_LIBRE_SA = 21085\nVENDOR_ID_MONOLITH_PRODUCTIONS = 21086\nVENDOR_ID_INFOSIA_SERVICES = 21087\nVENDOR_ID_KRIXBIZ_INTERNETDIENSTLEISTUNGEN = 21088\nVENDOR_ID_FLYWHEEL_CORPORATION = 21089\nVENDOR_ID_ITHAKA_HARBORS_INC = 21090\nVENDOR_ID_EXINDA_NETWORKS_PTY_LTD = 21091\nVENDOR_ID_RAINDANCE_WIRELESS = 21092\nVENDOR_ID_GOTNET_THE_INTERNET_CONNECTION_INC = 21093\nVENDOR_ID_RICOH_AUSTRALIA_PTY_LTD = 21094\nVENDOR_ID_COMMONWEALTH_BANK_OF_AUSTRALIA = 21095\nVENDOR_ID_QUANTIER_INC = 21096\nVENDOR_ID_KERR_MCGEE_CORPORATION = 21097\nVENDOR_ID_IECASCHIN_ACAD_OF_SCI = 21098\nVENDOR_ID_ALLTRIX_SDN_BHD = 21099\nVENDOR_ID_LINWORK_INFORMTICA_S_C_LTDA = 21100\nVENDOR_ID_VERREAU_ENTERPRISE = 21101\nVENDOR_ID_CONTROLTIER_SOFTWARE_INC = 21102\nVENDOR_ID_MANDRAKESOFT = 21103\nVENDOR_ID_MOFET_INSTITITUE = 21104\nVENDOR_ID_MANGO_NETWORKS_INC = 21105\nVENDOR_ID_SHANGHAI_ULINK_TELECOM_TECHNOLOGIES_CO_LTD = 21106\nVENDOR_ID_NOVAGEM_LTD = 21107\nVENDOR_ID_HARTING_ELECTRIC_GMBH_CO_KG = 21108\nVENDOR_ID_KNOWLEDGE_ZONE = 21109\nVENDOR_ID_SANITOP_WINGENROTH_GMBH_CO_KG = 21110\nVENDOR_ID_DATALOGIC_SPA = 21111\nVENDOR_ID_TNO_TELECOM = 21112\nVENDOR_ID_HASHBANG_CONSULTING_LTD = 21113\nVENDOR_ID_CONTEC_SJ = 21114\nVENDOR_ID_TFTEN_SA = 21115\nVENDOR_ID_NOVI_PAWEL_ZIMNOCH = 21116\nVENDOR_ID_AMG_SYSTEMS_LIMITED = 21117\nVENDOR_ID_AB2R = 21118\nVENDOR_ID_GURU_INFORMACIJSKE_TEHNOLOGIJE_DOO = 21119\nVENDOR_ID_SANOFI_AVENTIS = 21120\nVENDOR_ID_M0N0 = 21121\nVENDOR_ID_GIS_GLOBAL_INFORMATION_SERVICES_GMBH = 21122\nVENDOR_ID_AMPS_LLC = 21123\nVENDOR_ID_ADESIUM = 21124\nVENDOR_ID_DICO_ONLINE = 21125\nVENDOR_ID_VFORTRESS_NETWORK_SECURITY_PVT_LTD = 21126\nVENDOR_ID_KCI_TECHNOLOGIES_INC = 21127\nVENDOR_ID_HEIMETLI_SOFTWARE_AG = 21128\nVENDOR_ID_IDEAL_SOLUTION_LLC = 21129\nVENDOR_ID_GLASSHOUSE_UK_LTD = 21130\nVENDOR_ID_PHONESYNC_LTD = 21131\nVENDOR_ID_NOVUM_INFORMATION_TECHNOLOGY_BV = 21132\nVENDOR_ID_UNIVERSITY_OF_IOWA_HOSPITALS_AND_CLINICS = 21133\nVENDOR_ID_UNIVERSITY_OF_MINNESOTA = 21134\nVENDOR_ID_KIMMELBIZ = 21135\nVENDOR_ID_NORTH_CENTRAL_UNIVERSITY = 21136\nVENDOR_ID_ASTRON_COMPUTER_CORPORATION = 21137\nVENDOR_ID_ELECTROSYS_SRL = 21138\nVENDOR_ID_PROOFPOINT_INC = 21139\nVENDOR_ID_XERNOLAN_CONSULTING = 21140\nVENDOR_ID_ELEMENTAL_SECURITY_INC = 21141\nVENDOR_ID_ITER = 21142\nVENDOR_ID_DEVIS = 21143\nVENDOR_ID_MAIEUTICA_COOPERATIVA_DE_ENSINO_SUPERIOR_CRL = 21144\nVENDOR_ID_INTALIO_INC = 21145\nVENDOR_ID_WILTEL_COMMUNICATIONS_LLC = 21146\nVENDOR_ID_INNOTRAC_CORPORATION = 21147\nVENDOR_ID_SOLEIL_SECURITIES_GROUP_INC = 21148\nVENDOR_ID_H_BAUER_EDICIONES = 21149\nVENDOR_ID_XKL_LLC = 21150\nVENDOR_ID_PRIORITY_TECHNOLOGIES_INC = 21151\nVENDOR_ID_NUCOR_STEEL_INDIANA = 21152\nVENDOR_ID_ACADEMY_OF_FINE_ARTS = 21153\nVENDOR_ID_HARLAND_FINANCIAL_SOLUTIONS = 21154\nVENDOR_ID_CHAMELEON_TECHNOLOGY_INC = 21155\nVENDOR_ID_PIPP = 21156\nVENDOR_ID_RAE_INTERNET_INC = 21157\nVENDOR_ID_LINUX_ONLINE = 21158\nVENDOR_ID_IPCOM_SA = 21159\nVENDOR_ID_EMERSON_RETAIL_SERVICES = 21160\nVENDOR_ID_FLAMINGO_INTERNET_NAVIGATORS = 21161\nVENDOR_ID_VOXIVA_INC = 21162\nVENDOR_ID_EXPERTIS_TECNOLOGA_SA_DE_CV = 21163\nVENDOR_ID_LEGACY_HEALTH_SYSTEM = 21164\nVENDOR_ID_TIDAL_NETWORKS = 21165\nVENDOR_ID_PERSONAL_BROADBAND_AUSTRALIA = 21166\nVENDOR_ID_THE_CORRESPONDENCE_SCHOOL = 21167\nVENDOR_ID_SCF_OF_ARIZONA = 21168\nVENDOR_ID_JTHINC_COMPUTING_SOLUTIONS = 21169\nVENDOR_ID_VORTICE_RESEARCH_DEVELOPMENT_PTY_LTD = 21170\nVENDOR_ID_NRG_GLOBAL_INC = 21171\nVENDOR_ID_ELAN_DESIGNS = 21172\nVENDOR_ID_WSCICC = 21173\nVENDOR_ID_DISC_STATE_OF_KANSAS = 21174\nVENDOR_ID_XINUPRO_LLC = 21175\nVENDOR_ID_DATALUCID_LIMITED = 21176\nVENDOR_ID_ST_JOHN_SCHOOL = 21177\nVENDOR_ID_ANTEYA_TECHNOLOGY_CORPORATION = 21178\nVENDOR_ID_BEIJING_E_TECH_TECHNOLOGY_CO_LTD = 21179\nVENDOR_ID_SWIDYNA_TECHNOLOGIESINC = 21180\nVENDOR_ID_ANWEB = 21181\nVENDOR_ID_TONEDIY = 21182\nVENDOR_ID_LIGHTELLI_LTD = 21183\nVENDOR_ID_AIRMSG_INC = 21184\nVENDOR_ID_IONEDA_INC = 21185\nVENDOR_ID_CORNER_STONE_TECHNOLOGY_INC = 21186\nVENDOR_ID_SENSESTREAM_LIMITED = 21187\nVENDOR_ID_EYES_WORKS_CORPORATION = 21188\nVENDOR_ID_HUON_ASSOCIATES_PTY_LTD = 21189\nVENDOR_ID_MAYAZ_SOFTWARE_SERVICES = 21190\nVENDOR_ID_KCODES_CORPORATION = 21191\nVENDOR_ID_GOLDMAN_SACHS_JBWERE_PTY_LTD = 21192\nVENDOR_ID_WEBVISION = 21193\nVENDOR_ID_LLC_INFORM_MOBIL = 21194\nVENDOR_ID_NON_STOP_SYSTEMS_SOUTH_AFRICA_PTY_LIMITED = 21195\nVENDOR_ID_TERRAPAGES_PTY_LTD = 21196\nVENDOR_ID_CRYPTOEX = 21197\nVENDOR_ID_RTI_ZONE = 21198\nVENDOR_ID_SILKWAY = 21199\nVENDOR_ID_DR_RUFF_SOFTWARE_GMBH = 21200\nVENDOR_ID_LINUMA_ADVANCED_HOSTING_INC = 21201\nVENDOR_ID_BT_GERMANY_GMBH_CO_OHG = 21202\nVENDOR_ID_ARES_INC = 21203\nVENDOR_ID_MHGS = 21204\nVENDOR_ID_WEBDYN = 21205\nVENDOR_ID_MOBILERRD = 21206\nVENDOR_ID_TECHNISCHE_UNIVERSITAET_BERGAKADEMIE_FREIBERG = 21207\nVENDOR_ID_IKS_GMBH_JENA = 21208\nVENDOR_ID_MAYR_MELNHOF_PACKAGING_INTERNATIONAL_GMBH = 21209\nVENDOR_ID_KAIROS = 21210\nVENDOR_ID_FRAUNHOFER_INSTITUTE_FOR_TELECOMMUNICATIONS_HEINRICH_HERTZ_INSTITUT = 21211\nVENDOR_ID_INCITO_LTD = 21212\nVENDOR_ID_TOPOLISLT = 21213\nVENDOR_ID_EIDETIX_SRL = 21214\nVENDOR_ID_MM_KARTON = 21215\nVENDOR_ID_TELEPO_AB = 21216\nVENDOR_ID_LUX_SERVIZI_DI_LUIGI_IOTTI = 21217\nVENDOR_ID_SETTE_QUERCE = 21218\nVENDOR_ID_SOLIDEX_SA = 21219\nVENDOR_ID_BASF_AG = 21220\nVENDOR_ID_NEXUS_ADVANCED_TECHNOLOGIES_SRL = 21221\nVENDOR_ID_PROFLINE_BV = 21222\nVENDOR_ID_AKRIS_BV = 21223\nVENDOR_ID_4G_SYSTEME_GMBH = 21224\nVENDOR_ID_BRITISH_HEART_FOUNDATION = 21225\nVENDOR_ID_LINN_PRODUCTS_LTD = 21226\nVENDOR_ID_ABI_ASSOCIAZIONE_BANCARIA_ITALIANA = 21227\nVENDOR_ID_ASPEX_SEMICONDUCTOR_LTD = 21228\nVENDOR_ID_LENINGRAD_RESEARCH_AND_DEVELOPMENT_INSTITUTE_OF_TELECOMMUNICATIONS = 21229\nVENDOR_ID_IRIGA_NETWORKS = 21230\nVENDOR_ID_KUGELE_ELEKTRONIK = 21231\nVENDOR_ID_JUNG_MYOUNG_LTD = 21232\nVENDOR_ID_PETER_SCHMAEDICKE = 21233\nVENDOR_ID_O_N_S_COLTD = 21234\nVENDOR_ID_NEHLSEN_IT_TRAINING_UND_BERATUNG = 21235\nVENDOR_ID_LASEUR_ENTERPRISES = 21236\nVENDOR_ID_WRIGHT_EXPRESS = 21237\nVENDOR_ID_BRASILSAT_HARALD_S_A = 21238\nVENDOR_ID_GEIST_MANUFACTURING_INC = 21239\nVENDOR_ID_PINGUSOLUTION_MEIERHOFF_WOLTMANN_GBR = 21240\nVENDOR_ID_CHEZWAM = 21241\nVENDOR_ID_SIMDESK_TECHNOLOGIES_INC = 21242\nVENDOR_ID_LANET_SP_Z_OO = 21243\nVENDOR_ID_MT_UMUNHUM_WIRELESS = 21244\nVENDOR_ID_MACDONALD_ASSOCIATES_GMBH = 21245\nVENDOR_ID_QUANTITATIVE_IMAGING = 21246\nVENDOR_ID_VERIMATRIX = 21247\nVENDOR_ID_PIXEL_SOFTWARE_TECHNOLOGIES = 21248\nVENDOR_ID_LIGHTWAVE_SOLUTIONS_INC = 21249\nVENDOR_ID_CRANE_RIVER_CONSULTING = 21250\nVENDOR_ID_SECURE_CAMPUS_INC = 21251\nVENDOR_ID_FMS_INTERNETSERVICE_MLLER_UND_SCHAUB_GBR = 21252\nVENDOR_ID_TRANSOPTIX_INC = 21253\nVENDOR_ID_ARXCEO_CORPORATION = 21254\nVENDOR_ID_SANYUHU_LLC = 21255\nVENDOR_ID_CORPORATE_TECHNOLOGIES_INCORPORATED = 21256\nVENDOR_ID_TRANSERA_COMMUNICATIONS_INC = 21257\nVENDOR_ID_TONGELORG = 21258\nVENDOR_ID_OREGON_DEPARTMENT_OF_HUMAN_SERVICES = 21259\nVENDOR_ID_XYPRO_TECHNOLOGY_CORPORATION = 21260\nVENDOR_ID_AVENTIA_SL = 21261\nVENDOR_ID_SECOND_SHIFT_INC = 21262\nVENDOR_ID_PACIFIC_COLLEGE_OF_ORIENTAL_MEDICINE = 21263\nVENDOR_ID_AFC_COMMERCIAL = 21264\nVENDOR_ID_DARK_HORSE_COMICS_INC = 21265\nVENDOR_ID_JAB_LTD = 21266\nVENDOR_ID_IT_SERVICE_LEHMANN = 21267\nVENDOR_ID_TECNOCITY_SC = 21268\nVENDOR_ID_ONSITE_SYSTEMS_INC = 21269\nVENDOR_ID_SWAL = 21270\nVENDOR_ID_ITT_EDUCATIONAL_SERVICES_INC = 21271\nVENDOR_ID_THOMAS_P_OLSEN = 21272\nVENDOR_ID_MEDIAWEB_IT = 21273\nVENDOR_ID_CAMIANT_INC = 21274\nVENDOR_ID_N3K_INFORMATIK_LTD = 21275\nVENDOR_ID_ACCESS_INC = 21276\nVENDOR_ID_CITY_OF_OTTAWA = 21277\nVENDOR_ID_INTELLAMBDA_SYSTEMS_INC = 21278\nVENDOR_ID_STATE_OF_KANSAS = 21279\nVENDOR_ID_COMPUTER_ACCESS_TECHNOLOGY_CORPORATION = 21280\nVENDOR_ID_EMPRESA_JORNALSTICA_CALDAS_JNIOR_LTDA = 21281\nVENDOR_ID_SYS_IO = 21282\nVENDOR_ID_THE_FOREST_INDUSTRY_ONLINE_INC = 21283\nVENDOR_ID_EDUSTRUCTURES_LLC = 21284\nVENDOR_ID_CATALYST_IT_LTD = 21285\nVENDOR_ID_SYGATE_TECHNOLOGIES = 21286\nVENDOR_ID_MIKROVLNY_SRO = 21287\nVENDOR_ID_CETACEA_NETWORKS_CORPORATION = 21288\nVENDOR_ID_GRID_ZERONET = 21289\nVENDOR_ID_GBP_SOFTWARE_LLC = 21290\nVENDOR_ID_TRIBUTES_ONLINE_LTD = 21291\nVENDOR_ID_KAENGS_REICH = 21292\nVENDOR_ID_FABRIC7_SYSTEMS_INC = 21293\nVENDOR_ID_KIKA_SA = 21294\nVENDOR_ID_CUNNINGHAM_AND_OTHEN = 21295\nVENDOR_ID_INFINERA_CORP = 21296\nVENDOR_ID_UZKULEUVEN = 21297\nVENDOR_ID_ODYSSEY_PHARMACEUTICALS_INC = 21298\nVENDOR_ID_BIGFIX_INC = 21299\nVENDOR_ID_WATT_22_TVKZLSTECHNIKAI_SZOLGLTAT_KFT = 21300\nVENDOR_ID_DIALMEX_LLC = 21301\nVENDOR_ID_WRIGHT_STATE_UNIVERSITY = 21302\nVENDOR_ID_PERISCOPE_LTD = 21303\nVENDOR_ID_BC_GENOME_SCIENCES_CENTRE = 21304\nVENDOR_ID_KATHOLISCHEN_HOCHSCHULGEMEINDE_LINZ = 21305\nVENDOR_ID_CYBERFAMILYDK = 21306\nVENDOR_ID_TELPACIFIC = 21307\nVENDOR_ID_NEOMON = 21308\nVENDOR_ID_JUNI_AUSTRALIA_PTY_LTD = 21309\nVENDOR_ID_CENTER_FOR_HIGH_ENERGY_PHYSICS = 21310\nVENDOR_ID_GAMMASTREAM_TECHNOLOGIES_INC = 21311\nVENDOR_ID_LISASOFT_PTY_LTD = 21312\nVENDOR_ID_VRX_INC = 21313\nVENDOR_ID_SIZWE = 21314\nVENDOR_ID_THE_STATE_KEY_LABORATORY_OF_INFORMATION_SECURITY_OF_CHINA = 21315\nVENDOR_ID_OCTTEL_COMMUNICATION_CO_LTD = 21316\nVENDOR_ID_ATEN_INTERNATIONAL_CO_LTD = 21317\nVENDOR_ID_INTEC_NETCORE_INC = 21318\nVENDOR_ID_SYMBIO_GROUP = 21319\nVENDOR_ID_SOURCEMACHINE_DEVELOP_LTD = 21320\nVENDOR_ID_CITIC_TELECOM_1616_LIMITED = 21321\nVENDOR_ID_ESTONIAN_ACADEMY_OF_ARTS = 21322\nVENDOR_ID_CONSOLIDATED_CONTRACTORS_INTERNATIONAL_COMPANY_SAL = 21323\nVENDOR_ID_DATABUS_INC = 21324\nVENDOR_ID_SIEDLUNG_CUXHAVEN_AG = 21325\nVENDOR_ID_HEIM_HAUS_GMBH_CO_KG = 21326\nVENDOR_ID_WESTSAECHSISCHE_HOCHSCHULE_ZWICKAU = 21327\nVENDOR_ID_METOS_OY = 21328\nVENDOR_ID_SECXTREME_GMBH = 21329\nVENDOR_ID_JSC_TRANSTELECOM_COMPANY = 21330\nVENDOR_ID_RESEAUNANCE = 21331\nVENDOR_ID_LUCIAD_NV = 21332\nVENDOR_ID_CHONGQING_PUTIAN_COMMUNICATION_EQUIPMENT_LTD_CO = 21333\nVENDOR_ID_ACCIO_GLOBAL = 21334\nVENDOR_ID_OSRAM_OS_GMBH = 21335\nVENDOR_ID_CAEN_SPA = 21336\nVENDOR_ID_POWERSOURCE = 21337\nVENDOR_ID_NETFX = 21338\nVENDOR_ID_FIAT_AUTO_SPA = 21339\nVENDOR_ID_VERAX_SYSTEMS = 21340\nVENDOR_ID_CORNER_BANCA_SA = 21341\nVENDOR_ID_EPISOFTWARE_LTD = 21342\nVENDOR_ID_N3K_INFORMATIK_GMBH = 21343\nVENDOR_ID_CLARANET_GMBH = 21344\nVENDOR_ID_SACHS = 21345\nVENDOR_ID_FORLER_IT_TRAINING_CONSULTING = 21346\nVENDOR_ID_ITCNETWORKS = 21347\nVENDOR_ID_SONG_NETWORKS_SVENSKA_AB = 21348\nVENDOR_ID_TTG_EUROPE_PLC = 21349\nVENDOR_ID_SHS_INFORMATIONSSYSTEME_AG = 21350\nVENDOR_ID_GYRUS_PROD_SRL = 21351\nVENDOR_ID_ZHANG_YE = 21352\nVENDOR_ID_HOSPITAL_SANTA_MNICA = 21353\nVENDOR_ID_BEZIRKSAMT_LICHTENBERG_VON_BERLIN = 21354\nVENDOR_ID_ASCENTIAL_SOFTWARE = 21355\nVENDOR_ID_AUSTRIAN_GRID = 21356\nVENDOR_ID_ANTISLASH = 21357\nVENDOR_ID_CHINA_ZLTELECOM_TELECOMMUNICATION_EQUIPMENT_CO_LTD = 21358\nVENDOR_ID_OPNET_TECHNOLOGIES_INC = 21359\nVENDOR_ID_CHATSWORTH_PRODUCTS_INC = 21360\nVENDOR_ID_CATHOLIC_HEALTHCARE_WEST = 21361\nVENDOR_ID_IFOTEC = 21362\nVENDOR_ID_VALHALLA_MEDIA = 21363\nVENDOR_ID_REVINETIX_INC = 21364\nVENDOR_ID_ACCELERATE_CONSULTANCY_LIMITED = 21365\nVENDOR_ID_OPEN_SOURCE_LAB = 21366\nVENDOR_ID_CONNECTATHONNET = 21367\nVENDOR_ID_THE_CLOUD_NETWORKS_LTD = 21368\nVENDOR_ID_TERRASAT_COMMUNICATIONS_INC = 21369\nVENDOR_ID_THALES_NAVIGATION = 21370\nVENDOR_ID_WHITEDUS = 21371\nVENDOR_ID_JAVAPLUS = 21372\nVENDOR_ID_NETFILTER_IPTABLES_PROJECT = 21373\nVENDOR_ID_FABBRICADIGITALE_SRL = 21374\nVENDOR_ID_INTERACTIVE_VISION_MIND_BEACON_SP_Z_OO = 21375\nVENDOR_ID_GRUPPENKASPER = 21376\nVENDOR_ID_ZHONGYUAN_INSTITUTE_OF_TECHNOLOGY = 21377\nVENDOR_ID_HONDA_OF_AMERICA_MFG_INC = 21378\nVENDOR_ID_SHENZHEN_AIKE_COLTD = 21379\nVENDOR_ID_GUANGZHOU_AIKE_COLTD = 21380\nVENDOR_ID_VIESSMANN_WERKE_GMBH_CO_KG = 21381\nVENDOR_ID_UNITED_BOLTA_NIGERIA_LIMITED = 21382\nVENDOR_ID_BO_TECH_GMBH_CO_KG = 21383\nVENDOR_ID_SERIE_A_DIGITALE_MEDIEN_UND_SYSTEME_GMBH = 21384\nVENDOR_ID_ESCALON_NETWORKS_INC = 21385\nVENDOR_ID_QUIETTOUCH_INC = 21386\nVENDOR_ID_THE_JOHN_SIMON_GUGGENHEIM_MEMORIAL_FOUNDATION = 21387\nVENDOR_ID_RISETEK_INC = 21388\nVENDOR_ID_KING_FAHD_UNIVERSITY_OF_PETROLEUM_AND_MINERALS = 21389\nVENDOR_ID_ALAIN_BRION_SARL = 21390\nVENDOR_ID_NETALLEY_NETWORKS_LLP = 21391\nVENDOR_ID_TECH_ARABIA = 21392\nVENDOR_ID_CAREERWEAVERNET = 21393\nVENDOR_ID_APLISCZ_AS = 21394\nVENDOR_ID_PROJECT_LOGICALDREAMS = 21395\nVENDOR_ID_BRAND_X_SOFTWARE_INC = 21396\nVENDOR_ID_FIBERZONE_NETWORKS_LTD = 21397\nVENDOR_ID_CYBERGATE_TECHNOLOGIES_CORP = 21398\nVENDOR_ID_ACTIVE_CIRCLE_SA = 21399\nVENDOR_ID_E_GEEK = 21400\nVENDOR_ID_DSNCON_GMBH = 21401\nVENDOR_ID_EPIC_ENERGY = 21402\nVENDOR_ID_A_FIRST_TECHNOLOGY_COLTD = 21403\nVENDOR_ID_DG_TELECOM_CO_LTD = 21404\nVENDOR_ID_COMSATS_INTERNET_SERVICES = 21405\nVENDOR_ID_AZH_GMBH = 21406\nVENDOR_ID_MAIER = 21407\nVENDOR_ID_ERNITEC_A_S = 21408\nVENDOR_ID_ARTAX_A_S = 21409\nVENDOR_ID_KENNISNET = 21410\nVENDOR_ID_GOCEPT_GMBH_CO_KG = 21411\nVENDOR_ID_ANDREAS_WACHTER = 21412\nVENDOR_ID_SCRIPTLOGIC_CORPORATION = 21413\nVENDOR_ID_BATRA_CONSULTING_INC = 21414\nVENDOR_ID_OPTION_NV = 21415\nVENDOR_ID_CENTRE_HOSPITALIER_DE_LA_CTE_BASQUE = 21416\nVENDOR_ID_TDB_SOFTWARE_SERVICE_GMBH = 21417\nVENDOR_ID_UNIENT_COMMUNICATIONS_AS = 21418\nVENDOR_ID_TEDIAL_SL = 21419\nVENDOR_ID_HANSEMERKUR_KRANKENVERSICHERUNG_AG = 21420\nVENDOR_ID_YASSINE_ZAIRI_LTD = 21421\nVENDOR_ID_CVW = 21422\nVENDOR_ID_CONNECTERRA_INC = 21423\nVENDOR_ID_KANAGAWA_PREFECTURAL_BOARD_OF_EDUCATION = 21424\nVENDOR_ID_INSTITUTE_FOR_AUTOMATION_AND_CONTROL_PROCESSES_IACP_FEBRAS = 21425\nVENDOR_ID_HOEKSTRA_CONSULTING_GROUP = 21426\nVENDOR_ID_WEISENBERGER_SOLARSTROMERZEUGUNG_UND_VERTRIEB = 21427\nVENDOR_ID_AEPONA_LTD = 21428\nVENDOR_ID_SUNTECH_TELECOM_SOLUTION_LTDA = 21429\nVENDOR_ID_INPUT_SOFTWAREENTWICKLUNGS_GMBH = 21430\nVENDOR_ID_SAE_INTERNATIONAL = 21431\nVENDOR_ID_DIGINET_CORPORATION = 21432\nVENDOR_ID_INTERFACE_SOFTWARE_INC = 21433\nVENDOR_ID_KAROLIS_DAUTARTAS_PERSONAL_ENTERPRISE = 21434\nVENDOR_ID_INNER_CLASS_SOFTWARE_ENGINEERING_LIMITED = 21435\nVENDOR_ID_BASIS06_AG = 21436\nVENDOR_ID_ATEN_CANADA_TECHNOLOGIES_INC = 21437\nVENDOR_ID_THRUNET = 21438\nVENDOR_ID_BEIJING_MISSION_COMMUNICATION_CO_LTD = 21439\nVENDOR_ID_XIUS_INDIA_LTD = 21440\nVENDOR_ID_KBK_E_VALLALKOZASA = 21441\nVENDOR_ID_GAPIC_PVT_LTD = 21442\nVENDOR_ID_CAEMAR_SOFTWARE = 21443\nVENDOR_ID_OSS_TECHNOLOGIES_PTY_LTD = 21444\nVENDOR_ID_ESILICON_CORPORATION = 21445\nVENDOR_ID_ZIPPTEC_SYSTEMHAUS_GMBH = 21446\nVENDOR_ID_CLINTON_GROUP_INC = 21447\nVENDOR_ID_KARSTADTQUELLE_AG = 21448\nVENDOR_ID_RIVERSOFT_INTEGRACAO_E_DESENVOLVIMENTO_DE_SOFTWARE_LTDA = 21449\nVENDOR_ID_RADIANTEK = 21450\nVENDOR_ID_TOPERA_TECHNOLOGY_LTD = 21451\nVENDOR_ID_AUNA_OPERADORES_DE_TELECOMUNICACIONES_SA = 21452\nVENDOR_ID_GATHERWORKS_INC = 21453\nVENDOR_ID_DATA_VOICE_TECHNOLOGIES_GMBH = 21454\nVENDOR_ID_SINOSOFT_COLTD = 21455\nVENDOR_ID_LV1871 = 21456\nVENDOR_ID_DEMANDWARE_INC = 21457\nVENDOR_ID_CLOVIS_SOLUTIONS_INC = 21458\nVENDOR_ID_CALVIX = 21459\nVENDOR_ID_GLOBAL_INFOTEK_INC = 21460\nVENDOR_ID_COLE_NATIONAL = 21461\nVENDOR_ID_TORO_CO = 21462\nVENDOR_ID_UZ_GENT = 21463\nVENDOR_ID_ADELIOR_SA = 21464\nVENDOR_ID_VIPOND_INC = 21465\nVENDOR_ID_DOMISYS_SA = 21466\nVENDOR_ID_UBER_TECHNOLOGIES_CC = 21467\nVENDOR_ID_VIJIT_CONSULTING = 21468\nVENDOR_ID_BLADE_FUSION = 21469\nVENDOR_ID_SCHEMATECH = 21470\nVENDOR_ID_SIMPLEREZO = 21471\nVENDOR_ID_XMLEDORG = 21472\nVENDOR_ID_VIEW500 = 21473\nVENDOR_ID_ARDEC_INTERNATIONAL_PTY_LTD = 21474\nVENDOR_ID_FARSANDS_CORPORATION_LIMITED = 21475\nVENDOR_ID_ACADEMIA_SINICA_GRID_COMPUTING_CENTRE = 21476\nVENDOR_ID_TAIWANGRID = 21477\nVENDOR_ID_ADCOCOM_GMBH = 21478\nVENDOR_ID_ICEPAGE_AB = 21479\nVENDOR_ID_SHENZHEN_OLYM_TECH_CO_LTD = 21480\nVENDOR_ID_TKM_TELEKOMMUNIKATION_UND_ELEKTRONIK_GMBH = 21481\nVENDOR_ID_SAIPM = 21482\nVENDOR_ID_QUEST_RETAIL_TECHNOLOGY_PTY_LTD = 21483\nVENDOR_ID_SIGMETA_GMBH = 21484\nVENDOR_ID_UNIS_UKRAINE = 21485\nVENDOR_ID_SECCES_INFORMATION_TECHNOLOGIES_LTD = 21486\nVENDOR_ID_JAPAN_CABLE_LABORATORIES = 21487\nVENDOR_ID_NC_NUMERICABLE = 21488\nVENDOR_ID_DIE_ANTWORT = 21489\nVENDOR_ID_BOOTH_ASSOCIATES_INC = 21490\nVENDOR_ID_ENTELLIGENCIA = 21491\nVENDOR_ID_JMESH_LIMITED = 21492\nVENDOR_ID_SKODA_AUTO_AS = 21493\nVENDOR_ID_3CPLUS_GMBH = 21494\nVENDOR_ID_SIG_IT_GMBH = 21495\nVENDOR_ID_NSOLUTIONS_INC = 21496\nVENDOR_ID_TUXEO_SPRL = 21497\nVENDOR_ID_DAEMONSPACE_INC = 21498\nVENDOR_ID_LDCONFIG = 21499\nVENDOR_ID_SIC_LAB_SRL = 21500\nVENDOR_ID_ASDAG = 21501\nVENDOR_ID_SYSLOAD_SOFTWARE = 21502\nVENDOR_ID_WITT_WEIDEN_GMBH = 21503\nVENDOR_ID_SIPSTORM_INC = 21504\nVENDOR_ID_CATON_TECHNOLOGYBEIJING_CORPORATION = 21505\nVENDOR_ID_INFINITY_SOFTWARE_DEVELOPMENT = 21506\nVENDOR_ID_STRATEGIES_SOLUTIONS_LLC = 21507\nVENDOR_ID_LAAS_CNRS = 21508\nVENDOR_ID_CANWEST_GLOBAL_COMMUNICATIONS_CORP = 21509\nVENDOR_ID_HEICARE_GMBH = 21510\nVENDOR_ID_INSTITUT_LAUE_LANGEVIN = 21511\nVENDOR_ID_INSTITUTO_SUPERIOR_TCNICO = 21512\nVENDOR_ID_VORMETRIC_INC = 21513\nVENDOR_ID_COMPUTER_SERVICES_AND_SOLUTIONS_INC = 21514\nVENDOR_ID_HYPERION_VOF = 21515\nVENDOR_ID_SECURE_DATA_IN_MOTION_INC = 21516\nVENDOR_ID_EHWA_TECHNOLOGIES_INFORMATION = 21517\nVENDOR_ID_QUEENSDALE_INVESTMENT_CORP = 21518\nVENDOR_ID_DETLEF_WOLTMANN_IT_CONSULT_GMBH = 21519\nVENDOR_ID_CROSSWORKS_COLTD = 21520\nVENDOR_ID_ENGAGE_NETWORKS_INC = 21521\nVENDOR_ID_KNIGHTS_OF_COLUMBUS = 21522\nVENDOR_ID_SIA_EUROPEAN_SOFTWAREHOUSE = 21523\nVENDOR_ID_WINTEGRA = 21524\nVENDOR_ID_SYDIOS_IT_SOLUTIONS_GMBH = 21525\nVENDOR_ID_EQUIPTRANS = 21526\nVENDOR_ID_SLIT = 21527\nVENDOR_ID_MICROSEC_LTD = 21528\nVENDOR_ID_2WCOM_GMBH = 21529\nVENDOR_ID_CHAMP_CARGOSYSTEMS_SA = 21530\nVENDOR_ID_ADVENTEC = 21531\nVENDOR_ID_UNIVERSIDAD_TCNICA_FEDERICO_SANTA_MARA = 21532\nVENDOR_ID_ADMINISTRATION_FISCALE = 21533\nVENDOR_ID_EWAYDIRECT_INC = 21534\nVENDOR_ID_QVS_SOFTWARE_INC = 21535\nVENDOR_ID_MEUPC_INFORMTICA_E_COMUNICAES_LTDA = 21536\nVENDOR_ID_KUNET = 21537\nVENDOR_ID_FQDNORG = 21538\nVENDOR_ID_KLAHN_INTEGRATION_LLC = 21539\nVENDOR_ID_CLULICON = 21540\nVENDOR_ID_DNF_CONTROLS = 21541\nVENDOR_ID_NET_TEKINFO = 21542\nVENDOR_ID_BARTELS_SYSTEM_GMBH = 21543\nVENDOR_ID_KTECH_TELECOM = 21544\nVENDOR_ID_UNIVERSIDAD_NACIONAL_DE_SALTA = 21545\nVENDOR_ID_VIRTUAL_CONEXIONS_INC = 21546\nVENDOR_ID_LOGIC_PRODUCT_DEVELOPMENT = 21547\nVENDOR_ID_QORIS_INC = 21548\nVENDOR_ID_VINE_SYSTEMS_LIMITED = 21549\nVENDOR_ID_MILLENNIUM_PHARMACEUTICAL_INC = 21550\nVENDOR_ID_IDLEAIRE_TECHNOLOGIES_CORP = 21551\nVENDOR_ID_XI_INTERNET_SERVICES = 21552\nVENDOR_ID_KINETICODE_INC = 21553\nVENDOR_ID_INTERTECH_SOFTWARE_LTD = 21554\nVENDOR_ID_VONWANGELIN = 21555\nVENDOR_ID_BOTHONET = 21556\nVENDOR_ID_FABIO_PERINI_NORTH_AMERICA_INC = 21557\nVENDOR_ID_EAST_SEA_GROUP = 21558\nVENDOR_ID_PARALLELSPACE_CORPORATION = 21559\nVENDOR_ID_ATLANTA_HELP_DESK = 21560\nVENDOR_ID_ABK_TECHNOLOGY_GMBH = 21561\nVENDOR_ID_BOINGCOM = 21562\nVENDOR_ID_CENTER_OF_THE_SYSTEM_ADMINISTRATION_LLC = 21563\nVENDOR_ID_MMFORCESDE = 21564\nVENDOR_ID_R_E_SMITH = 21565\nVENDOR_ID_WMS_INDUSTRIES_INC = 21566\nVENDOR_ID_NETWORK_COMPUTING_SERVICES_INC = 21567\nVENDOR_ID_NGENN_GMBH = 21568\nVENDOR_ID_COMPSIS = 21569\nVENDOR_ID_CRIMSON_MICROSYSTEMS = 21570\nVENDOR_ID_CORNERSTONE_UNIVERSITY = 21571\nVENDOR_ID_INCOMPATIBLE_TIME_SHARING_SYSTEMS = 21572\nVENDOR_ID_GB_EDV_BERATUNG = 21573\nVENDOR_ID_ACTIVE_SYSTEMS_LTD = 21574\nVENDOR_ID_IRIS_TLCOM_RSEAUX = 21575\nVENDOR_ID_VESTFOLD_BUTIKKDATA_AS = 21576\nVENDOR_ID_ALLGEMEINE_ANTHROPOSOPHISCHE_GESELLSCHAFT = 21577\nVENDOR_ID_RADIUM_INSTITUTO_DE_ONCOLOGIA = 21578\nVENDOR_ID_HARLEMLIVE = 21579\nVENDOR_ID_XDS = 21580\nVENDOR_ID_BIRD_TECHNOLOGIES = 21581\nVENDOR_ID_TWAM_SYSTEMS = 21582\nVENDOR_ID_OY_STINGHORN_LTD = 21583\nVENDOR_ID_BTT_SOFTWARE = 21584\nVENDOR_ID_APOLLO_MEDICAL_IMAGING_TECHNOLOGY = 21585\nVENDOR_ID_ELITECH_DATACOM_COLTD = 21586\nVENDOR_ID_CEMTEK_COMPUTER_SOLUTIONS_LTD = 21587\nVENDOR_ID_MEDIA_CONNECT_GMBH = 21588\nVENDOR_ID_INFOSILA = 21589\nVENDOR_ID_ZENI_CORPORATION_SA = 21590\nVENDOR_ID_SYSTIME_INFORMATIK_AG = 21591\nVENDOR_ID_ACTIVIS_POLSKA_SP_Z_OO = 21592\nVENDOR_ID_AGNES_CEBULLA = 21593\nVENDOR_ID_DOUGS_COMPUTERS = 21594\nVENDOR_ID_KERBEROS_RESEARCH = 21595\nVENDOR_ID_LOW_FAT_TECHNOLOGY_LLC = 21596\nVENDOR_ID_PAPER_COATERS_LIMITED = 21597\nVENDOR_ID_NET_DESIGN_STUDIO_SL = 21598\nVENDOR_ID_TRAK_MICROWAVE_CORPORATION = 21599\nVENDOR_ID_NETIKUSNET_LTD = 21600\nVENDOR_ID_CEMENTHORIZON = 21601\nVENDOR_ID_TURBOCOMM_TECH_INC = 21602\nVENDOR_ID_E_LOCK_CORPORATION_SDN_BHD = 21603\nVENDOR_ID_FISERV = 21604\nVENDOR_ID_SOLLENTUNA_ENERGI_AB = 21605\nVENDOR_ID_ASCLEP_COMMUNICATIONS_PRIVATE_LTD = 21606\nVENDOR_ID_SPAR_OESTERREICHISCHE_WARENHANDELS_AG = 21607\nVENDOR_ID_JOHN_G_RUSSELL_TRANSPORT_LTD = 21608\nVENDOR_ID_SYSCOMP_GMBH = 21609\nVENDOR_ID_QUALITY_OBJECTS_SL = 21610\nVENDOR_ID_MDHM_COMMUNICATION = 21611\nVENDOR_ID_ISE_INDIVIDUELLE_SOFTWARE_ENTWICKLUNG_GMBH = 21612\nVENDOR_ID_TOYOTA_MOTOR_MARKETING_EUROPE = 21613\nVENDOR_ID_MULTIX_FINLAND_OY = 21614\nVENDOR_ID_BOLTON_6TH_FORM_COLLEGE = 21615\nVENDOR_ID_FRAUNHOFER_IIS = 21616\nVENDOR_ID_TIFIC_AB = 21617\nVENDOR_ID_NAVECOR_SA = 21618\nVENDOR_ID_MASSEY_WILCOX_TRANSPORT_LTD = 21619\nVENDOR_ID_MORROW_TECHNOLOGIES_CORPORATION = 21620\nVENDOR_ID_PEREZ_TORRES_Y_CIA = 21621\nVENDOR_ID_CENTERPOINT_TECHNOLOGIES_INC = 21622\nVENDOR_ID_SERONO_INTERNATIONAL_SA = 21623\nVENDOR_ID_ECONETCOM_INC = 21624\nVENDOR_ID_SHIKOKU_INSTRUMENTATION_COLTD = 21625\nVENDOR_ID_NETMON_INFORMATION_SYSTEMS_LTD_2 = 21626\nVENDOR_ID_EMBRAPA_MONITORAMENTO_POR_SATLITE = 21627\nVENDOR_ID_NIAGARA_LASALLE_CORPORATION = 21628\nVENDOR_ID_IKTEK = 21629\nVENDOR_ID_UNIVERSITY_OF_FUKUI = 21630\nVENDOR_ID_AXERO_AG = 21631\nVENDOR_ID_KAYAK_SOFTWARE_CORPORATION = 21632\nVENDOR_ID_ECORRIDOR_INC = 21633\nVENDOR_ID_EDUCATIONAL_COMMUNITY_CREDIT_UNION = 21634\nVENDOR_ID_ZHONGCHUANGXINGCE_BEIJINGCHINA = 21635\nVENDOR_ID_TECH_NOUS_LTD = 21636\nVENDOR_ID_PACWAN = 21637\nVENDOR_ID_PROD_EL_PRODOTTI_ELETTRONICI_SPA = 21638\nVENDOR_ID_CONSIGNACIONES_TORO_Y_BETOLAZASA = 21639\nVENDOR_ID_O2_UK_LTD = 21640\nVENDOR_ID_MM_CONTROL_AG = 21641\nVENDOR_ID_LE_TUAL_CONSULTING = 21642\nVENDOR_ID_ALLIANZ_CIA_DE_SEGUROS_Y_REASEGUROS_SA = 21643\nVENDOR_ID_HYPERWORX = 21644\nVENDOR_ID_PDV_SYSTEME = 21645\nVENDOR_ID_MEULEMAN_TECHNOLOGIES_BVBA = 21646\nVENDOR_ID_CREDENCE_SYSTEMS_CORPORATION = 21647\nVENDOR_ID_MOWA_MOBILE_WIRELESS_APPLICATIONS_LTDA = 21648\nVENDOR_ID_ACCESS_PRIME = 21649\nVENDOR_ID_THE_INTEGER_GROUP = 21650\nVENDOR_ID_FASTSECURE_TECHNOLOGIES = 21651\nVENDOR_ID_PROGRAMMERCAFE = 21652\nVENDOR_ID_WIRTUALNA_POLSKA_SA = 21653\nVENDOR_ID_NETNEA_AG = 21654\nVENDOR_ID_DEADPIXICOM = 21655\nVENDOR_ID_ISKRAEMECO_DD = 21656\nVENDOR_ID_ABRANTIX_AG = 21657\nVENDOR_ID_KASHYA = 21658\nVENDOR_ID_ISARNET_AG = 21659\nVENDOR_ID_ADAM_SOFTWARE_INGENIEURBUERO = 21660\nVENDOR_ID_VERILET_CORPORATION = 21661\nVENDOR_ID_IIJ_TECHNOLOGY_INC = 21662\nVENDOR_ID_PAZMANY_PETER_CATHOLIC_UNIVERSITY = 21663\nVENDOR_ID_SAPEC_SOCIEDAD_ANONIMA_DE_PRODUCTOS_ELECTRONICOS_Y_DE_COMUNICACION = 21664\nVENDOR_ID_VSB_TECHNICAL_UNIVERSITY_OF_OSTRAVA = 21665\nVENDOR_ID_TOUTPROGRAMMERCOM = 21666\nVENDOR_ID_CLAYMORE_SYSTEMS_INC = 21667\nVENDOR_ID_ONE11NET = 21668\nVENDOR_ID_MULTIBAND_INC = 21669\nVENDOR_ID_MM_INVENT = 21670\nVENDOR_ID_VSS_MONITORING_INC = 21671\nVENDOR_ID_PSYCHE_TRADING_COMPANY = 21672\nVENDOR_ID_BEI_JING_POLYPEGASUS_TECHNOLOGY_CO_LTD = 21673\nVENDOR_ID_BEIJING_TELESYSTEM_TECHNOLOGIES_CO_LTD = 21674\nVENDOR_ID_COMPUNICATE_TECHNOLOGIES_INC = 21675\nVENDOR_ID_SPARKLAN_COMMUNICATIONS_INC = 21676\nVENDOR_ID_SHANGHAI_HUAMA_INFORMATION_TECHDEVELOPMENET_COLTD = 21677\nVENDOR_ID_SCREEN_SERVICE_ITALIA_SPA = 21678\nVENDOR_ID_BUNDESAGENTUR_FR_ARBEIT = 21679\nVENDOR_ID_MEADWESTVACO_INTELLIGENT_SYSTEMS = 21680\nVENDOR_ID_WHOLESECURITY_INC = 21681\nVENDOR_ID_RICILAKENET = 21682\nVENDOR_ID_WYRDWRIGHT_INC = 21683\nVENDOR_ID_WAYNEANDERSENCOM = 21684\nVENDOR_ID_EFUNDS_CORP = 21685\nVENDOR_ID_KYUNG_GEE_ELECTRONICS_CO_LTD = 21686\nVENDOR_ID_KIP_AMERICA_INC = 21687\nVENDOR_ID_SERGE_CO = 21688\nVENDOR_ID_EASYNET = 21689\nVENDOR_ID_DAVID_BREMNER = 21690\nVENDOR_ID_GNUTECHNOLOGIES = 21691\nVENDOR_ID_CORADIR_SA = 21692\nVENDOR_ID_LINET_SERVICES_GBR = 21693\nVENDOR_ID_BEIJING_SINA_INFORMATION_TECHNOLOGY_COLTD = 21694\nVENDOR_ID_NET_TRACK_GMBH = 21695\nVENDOR_ID_KEYMILE_AG = 21696\nVENDOR_ID_RIVERTREE_NETWORKS_CORP = 21697\nVENDOR_ID_FIELD_BOXMORE_MAREEN = 21698\nVENDOR_ID_BELGOCONTROL = 21699\nVENDOR_ID_KELLER_PARTNER_GMBH = 21700\nVENDOR_ID_MOBOTIX_AG = 21701\nVENDOR_ID_EAPLV = 21702\nVENDOR_ID_MICROHARD_SYSTEMS_INC = 21703\nVENDOR_ID_DPS_PROMATIC_SRL = 21704\nVENDOR_ID_ARG_ELECTRODESIGN_LTD = 21705\nVENDOR_ID_DOMINION_RESOURCES_INC = 21706\nVENDOR_ID_DECATHLON = 21707\nVENDOR_ID_NETSWEEPER_INC = 21708\nVENDOR_ID_PROCIOS_OY = 21709\nVENDOR_ID_AGENTES_AG = 21710\nVENDOR_ID_MEDISOFT_EGYPT = 21711\nVENDOR_ID_CAISSE_DE_PRVOYANCE_SOCIALE = 21712\nVENDOR_ID_VECTORSITE = 21713\nVENDOR_ID_CAPE_BYRON_IMPORTS_WHOLESALE_PTY_LTD = 21714\nVENDOR_ID_UFRJ = 21715\nVENDOR_ID_HANGZHOU_GOLDWAY_INFORMATION_TECHNOLOGY_COLTD = 21716\nVENDOR_ID_NIPPON_KOEI_POWER_SYSTEMS_COLTD = 21717\nVENDOR_ID_REESTRRN = 21718\nVENDOR_ID_EMMECISOFT_SNC = 21719\nVENDOR_ID_MICROGAMING_SOFTWARE_SYSTEMS_LIMITED = 21720\nVENDOR_ID_SERVICIO_DE_CERTIFICACION_DE_LOS_REGISTRADORES = 21721\nVENDOR_ID_MARINE_CORPS_COMMUNITY_SERVICES = 21722\nVENDOR_ID_NTA_COLTD = 21723\nVENDOR_ID_ELEMENTEC_SOFTWARE_CONSULTING = 21724\nVENDOR_ID_OLAF_HUEBNER = 21725\nVENDOR_ID_HAPPYCOMM = 21726\nVENDOR_ID_PEOPLES_BANK_OF_GEORGIA = 21727\nVENDOR_ID_SYNACCESS_NETWORKS_INC = 21728\nVENDOR_ID_SOMOGY_INFORMATIKA_KFT = 21729\nVENDOR_ID_STSOFT = 21730\nVENDOR_ID_CRYPTOSOFT_LTD = 21731\nVENDOR_ID_SPARKASSE_HANAUERLAND = 21732\nVENDOR_ID_ALTAR_SP_Z_OO = 21733\nVENDOR_ID_APO_CONSORTIUM = 21734\nVENDOR_ID_ALBER_INC = 21735\nVENDOR_ID_INTELLITRANS_LTD = 21736\nVENDOR_ID_GESTWEB_SPA = 21737\nVENDOR_ID_HONG_KONG_EDUCATION_CITY_LTD = 21738\nVENDOR_ID_TRUSTED_SOLUTIONS_SRO = 21739\nVENDOR_ID_PERSYSTENT_TECHNOLOGY_INC = 21740\nVENDOR_ID_ST_MARGARETS_ANGLICAN_CHURCH = 21741\nVENDOR_ID_UWINK_INC = 21742\nVENDOR_ID_YASPAT = 21743\nVENDOR_ID_BLACKROCK_FINANCIAL_MANAGEMENT = 21744\nVENDOR_ID_ARNPRIOR_KF = 21745\nVENDOR_ID_CHEYENNE_NETWORKS_INC = 21746\nVENDOR_ID_ALDEBARAN_SYSTEMS_LTD = 21747\nVENDOR_ID_IGGESUND_PAPERBOARD_AB = 21748\nVENDOR_ID_ETHERTEK_CIRCUITS = 21749\nVENDOR_ID_HIGHBRIDGE_CAPITAL_MANAGEMENT_LLC = 21750\nVENDOR_ID_ST_THOMAS_UNIVERSITY = 21751\nVENDOR_ID_SOCIETE_COOPERATIVE_MIGROS_NEUCHATEL_FRIBOURG = 21752\nVENDOR_ID_ZKM_ZENTRUM_F_KUNST_UND_MEDIENTECHNOLOGIE_KARLSRUHE = 21753\nVENDOR_ID_MEDIA_COM_SP_Z_OO = 21754\nVENDOR_ID_COLLABORATIVE_ADAPTIVE_SENSING_OF_THE_ATMOSPHERE_CASA = 21755\nVENDOR_ID_SOFTEC_SA = 21756\nVENDOR_ID_DIGICADD_COMPUTACAO_GRAFICA_LTDA = 21757\nVENDOR_ID_SLUSHPUPIE = 21758\nVENDOR_ID_ALL_CHINA_FEDERATION_OF_INDUSTRY_COMMMERCE = 21759\nVENDOR_ID_E_ACCESS_BROADBAND = 21760\nVENDOR_ID_LBECKER_HAFEN_GESELLSCHAFT_MBH = 21761\nVENDOR_ID_CORNWALL_COUNTY_COUNCIL = 21762\nVENDOR_ID_CLARANET = 21763\nVENDOR_ID_HILL_SYSTEMS_LLC = 21764\nVENDOR_ID_THE_LYARAMA_PROJECT = 21765\nVENDOR_ID_IMPERIAL_COLLEGE_LONDON = 21766\nVENDOR_ID_SYNARC_INC = 21767\nVENDOR_ID_INSPIRED_BROADCAST_NETWORKS_LTD = 21768\nVENDOR_ID_M_TECH_INFORMATION_TECHNOLOGY_INC = 21769\nVENDOR_ID_WESAIDSO_SOFTWARE_ENGINEERING = 21770\nVENDOR_ID_IMOLKO_CA = 21771\nVENDOR_ID_SEB_EESTI_HISPANK_AS = 21772\nVENDOR_ID_CHOICE_SOURCING_PTY = 21773\nVENDOR_ID_ECLASS = 21774\nVENDOR_ID_DIGITAL_IMAGING_SOLUTIONS = 21775\nVENDOR_ID_TELCOBRIDGES_INC = 21776\nVENDOR_ID_NITIDO_INC = 21777\nVENDOR_ID_VA_TECH_ELIN_EBG_GMBH_CO = 21778\nVENDOR_ID_JADENET = 21779\nVENDOR_ID_ADURO_DOO = 21780\nVENDOR_ID_MONTELNOR_SCL = 21781\nVENDOR_ID_CHINASYS_TECHNOLOGIES_COLTD = 21782\nVENDOR_ID_ANTGROUP_SRL = 21783\nVENDOR_ID_CALREC_AUDIO_LTD = 21784\nVENDOR_ID_VB_SERVICE_GMBH = 21785\nVENDOR_ID_BOSTONCOM = 21786\nVENDOR_ID_QUALITAS_INC = 21787\nVENDOR_ID_POINDEXTER_SYSTEMS_INC = 21788\nVENDOR_ID_CABLEVISION_FIBERTEL = 21789\nVENDOR_ID_OBIDOBI_SOFTWARE = 21790\nVENDOR_ID_WAVE_TECH_INC = 21791\nVENDOR_ID_BEARINGPOINT_INC = 21792\nVENDOR_ID_KISOKU_NETWORKING = 21793\nVENDOR_ID_PANTHERA_SYSTEMS = 21794\nVENDOR_ID_INTEGRATED_DECISION_SYSTEMS = 21795\nVENDOR_ID_HW_GROUP_SRO = 21796\nVENDOR_ID_GOOGGUN_TECHNOLOGIES_INC = 21797\nVENDOR_ID_COVERGENCE_INC = 21798\nVENDOR_ID_CONSULTEC = 21799\nVENDOR_ID_ISLAND_INTERNET_SERVICES = 21800\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_LOS_ANGELES = 21801\nVENDOR_ID_MATERNIT_RGIONALE_A_PINARD = 21802\nVENDOR_ID_CENTREPOINT_TECHNOLOGIES = 21803\nVENDOR_ID_360DEGREEWEB_INC = 21804\nVENDOR_ID_MONKEYJRCOM = 21805\nVENDOR_ID_VITRADO_GMBH = 21806\nVENDOR_ID_TRW_ENGINE_COMPONENTS = 21807\nVENDOR_ID_PRAIRIE_SYSTEMS_INC = 21808\nVENDOR_ID_CAMPUSWARE = 21809\nVENDOR_ID_YUBIVAZA = 21810\nVENDOR_ID_KALION = 21811\nVENDOR_ID_KOFAX_IMAGE_PRODUCTS = 21812\nVENDOR_ID_WEST_JAPAN_RAILWAY_COMPANY = 21813\nVENDOR_ID_BOOTH_SOFTWARE_CONSULTING = 21814\nVENDOR_ID_SCHOOL_OF_VETERINARY_MEDICINE_HANNOVER = 21815\nVENDOR_ID_CDE_NOVE_TEHNOLOGIJE_DD = 21816\nVENDOR_ID_GEMINI_STORAGE_COMPANY = 21817\nVENDOR_ID_CAPTECH_VENTURES_INC = 21818\nVENDOR_ID_GUERNSEY_CUSTOMS = 21819\nVENDOR_ID_CHANNELYNX_LLC = 21820\nVENDOR_ID_COLIBRE = 21821\nVENDOR_ID_ANDREW_DUCORE_INDEPENDENT_CONSULTANT = 21822\nVENDOR_ID_MDS_CASWELL = 21823\nVENDOR_ID_FORTUITOUS_TECHNOLOGIES_INC = 21824\nVENDOR_ID_ASYSTEC_ADOLF_SYSTEMTECHNIK = 21825\nVENDOR_ID_METROPIPE_NETWORK_SERVICES_INC = 21826\nVENDOR_ID_ARCANANETWORKS_INC = 21827\nVENDOR_ID_META_SYSTEMS_AS = 21828\nVENDOR_ID_IAN_A_YOUNG = 21829\nVENDOR_ID_CROSSTALK_GTEBORG_AB = 21830\nVENDOR_ID_CLEARONE_COMMUNICATIONS_INC = 21831\nVENDOR_ID_LABONE_INC = 21832\nVENDOR_ID_MEGAS_MEDIA = 21833\nVENDOR_ID_TUFIN_TECHNOLOGIES = 21834\nVENDOR_ID_SESCAM_SERVICIO_DE_SALUD_DE_CASTILLA_LA_MANCHA = 21835\nVENDOR_ID_MRF_SYSTEMS_LTD = 21836\nVENDOR_ID_DIGIR = 21837\nVENDOR_ID_LOOSEFLOW_LTD = 21838\nVENDOR_ID_ALAXALA_NETWORKS_CORPORATION = 21839\nVENDOR_ID_HITACHI_IE_SYSTEMS_COLTD = 21840\nVENDOR_ID_HOCHSCHULE_FUER_ANGEWANDTE_WISSENSCHAFTEN_HAMBURG = 21841\nVENDOR_ID_ENERGY_TECHNOLOGIES_INC = 21842\nVENDOR_ID_SHENZHEN_MQ_TECHNOLOGIES_INDUSTRIAL_CO_LTD = 21843\nVENDOR_ID_DURHAM_SCHOOL_SERVICES = 21844\nVENDOR_ID_TRIUM_SISTEMAS_INFORMATICOS_SL = 21845\nVENDOR_ID_TRIUM_SYSTEMS_SL = 21846\nVENDOR_ID_THE_SCOTT_LAWSON_GROUP_LTD = 21847\nVENDOR_ID_SLACALEK = 21848\nVENDOR_ID_RIGGS_HEINRICH_MEDIA = 21849\nVENDOR_ID_INTAERO_SDN_BHD = 21850\nVENDOR_ID_MURRAYLISOOKCOM = 21851\nVENDOR_ID_NORKRING_AS = 21852\nVENDOR_ID_GESELLSCHAFT_FUER_INFORMATIONS_UND_DATENVERARBEITUNGS_MBH = 21853\nVENDOR_ID_COLLABNET_INC = 21854\nVENDOR_ID_WINTERDALE_COMPUTERDIENSTE_GBR = 21855\nVENDOR_ID_MODULUS_SYSTEMS = 21856\nVENDOR_ID_CHAUCER_PRESS_LIMITED = 21857\nVENDOR_ID_AP_WOODHAM_LTD = 21858\nVENDOR_ID_LEIGHTONS_PAPER_PRINTING_LTD = 21859\nVENDOR_ID_HARRAHS_ENTERTAINMENT_INC = 21860\nVENDOR_ID_MOBILE_COHESION = 21861\nVENDOR_ID_ALCASAT = 21862\nVENDOR_ID_INFOTEL = 21863\nVENDOR_ID_IBTE = 21864\nVENDOR_ID_UNITRENDS_SOFTWARE_CORP = 21865\nVENDOR_ID_FMAUDIT_LLC = 21866\nVENDOR_ID_ESI_HEB = 21867\nVENDOR_ID_HIGHMARK_INC = 21868\nVENDOR_ID_TECTROL_INC = 21869\nVENDOR_ID_UNITED_CEREBRAL_PALSY_OF_GREATER_CHICAGO = 21870\nVENDOR_ID_DATASTREAM_SYSTEMS_INC = 21871\nVENDOR_ID_WICEN_NSW_INC = 21872\nVENDOR_ID_XFI_CORPORATION = 21873\nVENDOR_ID_MOORE_GALLAGHER_LTD = 21874\nVENDOR_ID_MACFADDENORG = 21875\nVENDOR_ID_METABIT = 21876\nVENDOR_ID_MULTI_SKILLED_RESOURCES_AUSTRALIA = 21877\nVENDOR_ID_MEDSTAR_HEALTH = 21878\nVENDOR_ID_ASSOCIAZIONE_CULTURALE_INVENTATI = 21879\nVENDOR_ID_AUSTRALIAN_EXPERIMENTAL_HIGH_ENERGY_PHYSICS_GROUP = 21880\nVENDOR_ID_MILOM_INC = 21881\nVENDOR_ID_JUSTSYSTEM_CORP = 21882\nVENDOR_ID_BRAIN_LTD = 21883\nVENDOR_ID_W_SCHNEIDERCO_AG = 21884\nVENDOR_ID_ERICSSON_MOBILE_PLATFORMS_AB = 21885\nVENDOR_ID_NEWEL_INFORMATIQUE = 21886\nVENDOR_ID_FUNKWERK_AG_TRAFFIC_CONTROL_COMMUNICATION_KIEL_FORMERLY_FUNKWERK_INFORMATION_TECHNOLOGIES_KIEL_GMBH = 21887\nVENDOR_ID_CONTENT_MANAGEMENT_LICENSE_ADMINISTRATOR = 21888\nVENDOR_ID_ACSIS_INC = 21889\nVENDOR_ID_GRIB = 21890\nVENDOR_ID_TIBCO_TELECOM_RESEAU = 21891\nVENDOR_ID_RINGWALD_MIKROELEKTRONIK_GMBH = 21892\nVENDOR_ID_PHIL_CORNES = 21893\nVENDOR_ID_ISABEL_SA = 21894\nVENDOR_ID_DELTA_SOFT_LTD = 21895\nVENDOR_ID_NIEDERRHEIN_UNIVERSITY_OF_APPLIED_SCIENCES = 21896\nVENDOR_ID_I_CABLE_NETWORK_LIMITED = 21897\nVENDOR_ID_SVAMBERKNET_SRO = 21898\nVENDOR_ID_CAPE_CITY_COMMAND_LLC = 21899\nVENDOR_ID_DANACAL_LTD = 21900\nVENDOR_ID_MILLWARD_BROWN_UK_LIMITED = 21901\nVENDOR_ID_BAJM_INTERNET = 21902\nVENDOR_ID_NETSERVICES_LLC = 21903\nVENDOR_ID_YOSHIDAS_INC = 21904\nVENDOR_ID_LEIBNIZ_INSTITUT_FUER_MEERESWISSENSCHAFTEN = 21905\nVENDOR_ID_MARCH_HARE_SOFTWARE_LTD = 21906\nVENDOR_ID_WOHNPROJEKT_SCHELLINGSTRASSE_GMBH = 21907\nVENDOR_ID_NEXASOFT_INC = 21908\nVENDOR_ID_CHAOS_LIMITED_LLC = 21909\nVENDOR_ID_ELECTROCOMPONENTES_SA = 21910\nVENDOR_ID_TRUSTED_COMPUTING_GROUP = 21911\nVENDOR_ID_PRIVA_TECHNOLOGIES_INC = 21912\nVENDOR_ID_DOP_INTELLIGENCE = 21913\nVENDOR_ID_NETWORXAT_BUSTA_NEUMAYR_OEG = 21914\nVENDOR_ID_BITPUSHER_LLC = 21915\nVENDOR_ID_TEHNA = 21916\nVENDOR_ID_STAATLICHE_BERUFSSCHULE_I_BAYREUTH = 21917\nVENDOR_ID_IDEAS_TO_INTERCONNECT_BV = 21918\nVENDOR_ID_CLEARWIRE_INC = 21919\nVENDOR_ID_CIPHERIUM_SYSTEMS_CO_LTD = 21920\nVENDOR_ID_INSPIRATION_MATTERS_LTD = 21921\nVENDOR_ID_TIE_TECNOLOGIAS_DE_INTEGRAO_EMPRESARIAL_LDA = 21922\nVENDOR_ID_BOWATER_INC = 21923\nVENDOR_ID_ADAM_PORDZIK = 21924\nVENDOR_ID_RTP_NETWORK_SERVICES_INC = 21925\nVENDOR_ID_MEDORDER_INC = 21926\nVENDOR_ID_INTRALINUX = 21927\nVENDOR_ID_RENAISSANCE_COMPUTING_INSTITUTE = 21928\nVENDOR_ID_NETIKOS_FINLAND_OY = 21929\nVENDOR_ID_PRIHATEAM_NETWORKS_FINLAND_LTD = 21930\nVENDOR_ID_SE46_AB = 21931\nVENDOR_ID_TORAT_NETZWERKE_SERVER_SICHERHEIT = 21932\nVENDOR_ID_JAMIE_THOMPSON = 21933\nVENDOR_ID_FILESX = 21934\nVENDOR_ID_SIGTEC_LTD = 21935\nVENDOR_ID_SENFORCE_TECHNOLOGIES_INC = 21936\nVENDOR_ID_EZREZ_SOFTWARE_INC = 21937\nVENDOR_ID_RADIO_MUZYKA_FAKTY_SP_Z_OO = 21938\nVENDOR_ID_HYTEC_GMBH = 21939\nVENDOR_ID_ENATEL_LTD = 21940\nVENDOR_ID_DATA_RETURN_LLC = 21941\nVENDOR_ID_RUBICON_SOFTWARE_LTD = 21942\nVENDOR_ID_UNI_SOMMERFEST_EV = 21943\nVENDOR_ID_BLITZEN_NETWORKS = 21944\nVENDOR_ID_KERBEROS_DOO = 21945\nVENDOR_ID_UNIVERSITY_OF_LIVERPOOL_DEPARTMENT_OF_ELECTRICAL_ENGINEERING = 21946\nVENDOR_ID_TINTADIGITAL_SOLUES_EM_TECNOLOGIAS_DE_INFORMAO_LDA = 21947\nVENDOR_ID_TW_TEAMWARE_SRL = 21948\nVENDOR_ID_ISTITUTO_NAZIONALE_DI_GEOFISICA_E_VULCANOLOGIA = 21949\nVENDOR_ID_OPEN_CONSULTANTS = 21950\nVENDOR_ID_KATUN_CORPORATION = 21951\nVENDOR_ID_CRESCENT_BUSINESS_INC = 21952\nVENDOR_ID_BUSINESS_COMPUTER_MAINTENANCE_LIMITED = 21953\nVENDOR_ID_TRANSATLANTIC_DIAGNOSTICS_LLC = 21954\nVENDOR_ID_CONTROL_SYSTEMS_SRL = 21955\nVENDOR_ID_MEGAPATH_NETWORKS = 21956\nVENDOR_ID_SEALED_AIR_NZ_LTD = 21957\nVENDOR_ID_THERMAKRAFT_INDUSTRIESNZ_LTD = 21958\nVENDOR_ID_P_J_PAPERS_LTD = 21959\nVENDOR_ID_LEGEND_COMMUNICATIONS_PLC = 21960\nVENDOR_ID_EXEO_SYSTEMS = 21961\nVENDOR_ID_NEXTEL_COMMUNICATIONS_INC = 21962\nVENDOR_ID_OBECO_GMBH = 21963\nVENDOR_ID_NESYM_CONSULTING_SRL = 21964\nVENDOR_ID_LTLAB = 21965\nVENDOR_ID_COOPERATIVA_OBRERA_LTDA = 21966\nVENDOR_ID_INVENTO_NETWORKS_INC = 21967\nVENDOR_ID_FOOD_SERVICES_OF_AMERICA = 21968\nVENDOR_ID_KERNWAY_TECHNOLOGY_CO_LTD = 21969\nVENDOR_ID_AHTS = 21970\nVENDOR_ID_KISTERS_AG = 21971\nVENDOR_ID_1MAGE_SOFTWARE_INC = 21972\nVENDOR_ID_CARIBBEANCLUB = 21973\nVENDOR_ID_BORIS_KULIG_EDV_UND_STATISTIK_BERATUNG = 21974\nVENDOR_ID_INFRASERV_GMBH_CO_HOECHST_KG = 21975\nVENDOR_ID_ROBERTS_WESLEYAN_COLLEGE = 21976\nVENDOR_ID_THE_SAGE_GROUP_PLC = 21977\nVENDOR_ID_FLUID_INC = 21978\nVENDOR_ID_FKS_BVBA = 21979\nVENDOR_ID_ENRAN_TELECOM = 21980\nVENDOR_ID_SPIDERBOX_P_L = 21981\nVENDOR_ID_WITH_MOBILE_TECHNOLOGY_CO_LTD = 21982\nVENDOR_ID_TERRACE_TECHNOLOGY_INC = 21983\nVENDOR_ID_VISWIS_INC = 21984\nVENDOR_ID_SERVER_CENTER_JSC = 21985\nVENDOR_ID_SHINNYO_EN_BUDDHIST_ORDER_CO = 21986\nVENDOR_ID_BUGS_INC = 21987\nVENDOR_ID_ARENAL = 21988\nVENDOR_ID_CONNEXCC_DI_HADEK_GMBH = 21989\nVENDOR_ID_UNIVERSIDAD_AUTNOMA_DE_BAJA_CALIFORNIA_SUR = 21990\nVENDOR_ID_CHAR = 21991\nVENDOR_ID_CENTRAL_COMMAND_INC = 21992\nVENDOR_ID_GIRRULATDE = 21993\nVENDOR_ID_NORFOLK_PUBLIC_SCHOOLS = 21994\nVENDOR_ID_MAGYAR_ELEKTRONIKUS_ALRS_SZVETSG_HUNGARIAN_ASSOCIATION_FOR_ELECTRONIC = 21995\nVENDOR_ID_CROCOBOXORG = 21996\nVENDOR_ID_POWERSTAR_LTD = 21997\nVENDOR_ID_TIANI_SPIRIT = 21998\nVENDOR_ID_PLUM_COMPUTER_CONSULTING_INC = 21999\nVENDOR_ID_PACIFIC_LAMINATIONS_CO_LIMITED = 22000\nVENDOR_ID_FACHHOCHSCHULE_ESSLINGEN_HOCHSCHULE_FUER_TECHNIK = 22001\nVENDOR_ID_MICHAEL_BREUER = 22002\nVENDOR_ID_MST = 22003\nVENDOR_ID_X_MD = 22004\nVENDOR_ID_GE_HEALTHCARE_IT = 22005\nVENDOR_ID_AREVA_TD = 22006\nVENDOR_ID_WINWHOLESALE_INC = 22007\nVENDOR_ID_PLD_SPARC64 = 22008\nVENDOR_ID_IP_LABEL = 22009\nVENDOR_ID_TRANFA_OPTIC_TELECOMMUNICATIONS_CO_LTD = 22010\nVENDOR_ID_CORE_MICRO_SYSTEMS_INC = 22011\nVENDOR_ID_SILKROADTAIWANINC = 22012\nVENDOR_ID_SGDN = 22013\nVENDOR_ID_CHINA_BEIJING_BROADA_DIGITAL_TECHNOLOGY_COLTD = 22014\nVENDOR_ID_BANIANTECH_COLTD = 22015\nVENDOR_ID_RACKWATCH_LLC = 22016\nVENDOR_ID_CLARITAS_INC = 22017\nVENDOR_ID_REDICE_SA = 22018\nVENDOR_ID_TUTUS_DATA_AB = 22019\nVENDOR_ID_CORETEC_GMBH = 22020\nVENDOR_ID_WESTCALL_LTD = 22021\nVENDOR_ID_DEUSXMACHINA = 22022\nVENDOR_ID_SCHALY = 22023\nVENDOR_ID_INOI = 22024\nVENDOR_ID_ELTI_DOO = 22025\nVENDOR_ID_TEXAS_STATE_TECHNICAL_COLLEGE_SYSTEM = 22026\nVENDOR_ID_ROCK_MOBILE_CORPORATION = 22027\nVENDOR_ID_HAUSER_FLIMP_PROGRAMMING = 22028\nVENDOR_ID_ACTIVELIVE_TECHNOLOGIES_LLC = 22029\nVENDOR_ID_KIGN_FOUNDATION = 22030\nVENDOR_ID_LATTICE_SEMICONDUCTOR_CORPORATION = 22031\nVENDOR_ID_ACTELION_PHARMACEUTICALS_LTD = 22032\nVENDOR_ID_CYNICAL_NETWORKS = 22033\nVENDOR_ID_JOZTOZ_NET = 22034\nVENDOR_ID_ECT_NEWS_NETWORK_INC = 22035\nVENDOR_ID_TAPSELL_FERRIER_LIMITED = 22036\nVENDOR_ID_ELEKTROWNIA_BECHATW_SA = 22037\nVENDOR_ID_KOMMUNE42 = 22038\nVENDOR_ID_MATHIAS_WOHLFARTH_EDV_BERATUNG = 22039\nVENDOR_ID_STATCON_B_SCHAEFER = 22040\nVENDOR_ID_GENERALSTAATSANWALTSCHAFT_BERLIN = 22041\nVENDOR_ID_GITEM = 22042\nVENDOR_ID_LAND_OF_UZNET = 22043\nVENDOR_ID_MOVILTEK_INC = 22044\nVENDOR_ID_ELECTROSYSTEMS_INC = 22045\nVENDOR_ID_PLANECOM_SRL = 22046\nVENDOR_ID_QASCOM_SRL = 22047\nVENDOR_ID_CAJA_DE_AHORROS_EL_MONTE = 22048\nVENDOR_ID_METRO_GROUP_INFORMATION_TECHNOLOGIES = 22049\nVENDOR_ID_COPA_DATA_GMBH = 22050\nVENDOR_ID_SAVAGES_NET = 22051\nVENDOR_ID_RISING_TECHNOLOGY_CO_LTD = 22052\nVENDOR_ID_NEPTUNE_GAMING = 22053\nVENDOR_ID_THREE_RINGS_DESIGN_INC = 22054\nVENDOR_ID_HIGHSPEED_AMERICA_INC = 22055\nVENDOR_ID_PREFEITURA_DA_CIDADE_DO_RIO_DE_JANEIRO = 22056\nVENDOR_ID_NEW_SIGNATURE = 22057\nVENDOR_ID_DANAHER_POWER_SOLUTIONS = 22058\nVENDOR_ID_CORP_HOSTARICA = 22059\nVENDOR_ID_LABCOM_SISTEMAS_LTDA = 22060\nVENDOR_ID_LIQUID_SYSTEMS = 22061\nVENDOR_ID_G2_SWITCHWORKS = 22062\nVENDOR_ID_CIFE_CONSORCIO_DE_INTERMEDIACIN_DE_FACTURAS_ELECTRNICAS = 22063\nVENDOR_ID_LANDESKREDITBANK_BADEN_WRTTEMBERG_L_BANK = 22064\nVENDOR_ID_MOBILTEL_AD = 22065\nVENDOR_ID_MOBITEX_TECHNOLOGY_AB = 22066\nVENDOR_ID_ENSEA = 22067\nVENDOR_ID_TAI_LIANG_CHEMICAL_CORPORATION = 22068\nVENDOR_ID_DEUROMEDIA_TECHNOLOGIES = 22069\nVENDOR_ID_LMR_ROBOSISTIC_LTD_CO = 22070\nVENDOR_ID_ASSOCIAZIONE_CULTURALE_INVESTICI = 22071\nVENDOR_ID_EDS = 22072\nVENDOR_ID_CERANTUS_TECHNOLOGIES = 22073\nVENDOR_ID_VIBRANT_MEDIA_LTD = 22074\nVENDOR_ID_GLOBAL_TECHNICAL_ENGINEERING_SOLUTIONS_INC = 22075\nVENDOR_ID_TELEVISIO_DE_CATALUNYA_SA = 22076\nVENDOR_ID_SMILING_SCREENS_INC = 22077\nVENDOR_ID_BURLINGTON_COAT_FACTORY_WAREHOUSE = 22078\nVENDOR_ID_MATTERFORM_MEDIA = 22079\nVENDOR_ID_YACAST = 22080\nVENDOR_ID_GUYTON_NETWORKS = 22081\nVENDOR_ID_IBM_WPC_LAB = 22082\nVENDOR_ID_OKKERNOOTNET = 22083\nVENDOR_ID_INDUSTEC_INDUSTRIA_METALURGICA_LTDA = 22084\nVENDOR_ID_CIDE_CONSORCIO_PARA_LA_INTEROPERABILIDAD_DE_DOCUMENTOS_ELECTRNICOS = 22085\nVENDOR_ID_PAUL_POELTNER = 22086\nVENDOR_ID_INVELICA_GMBH = 22087\nVENDOR_ID_ALPINE_ENERGIE_HOLDING_AG = 22088\nVENDOR_ID_PAEDAGOGISCHE_HOCHSCHULE_ZENTRALSCHWEIZ = 22089\nVENDOR_ID_GCOMMERCE_INC = 22090\nVENDOR_ID_MATRICS_COMMUNICATIONS = 22091\nVENDOR_ID_MAZDA_MOTOR_EUROPE_GMBH = 22092\nVENDOR_ID_SOFTWARE_SYSTEMS = 22093\nVENDOR_ID_PULSE_ENTERTAINMENT = 22094\nVENDOR_ID_BALTIC_ONLINE_COMPUTER_GMBH = 22095\nVENDOR_ID_IMAGE_PROJECT_INC = 22096\nVENDOR_ID_BW_FAHRZEUGENTWICKLUNG_GMBH = 22097\nVENDOR_ID_CHEN = 22098\nVENDOR_ID_EKF_ELEKTRONIK_MESSTECHNIK_GMBH = 22099\nVENDOR_ID_SWISSCOM_FIXNET_AG = 22100\nVENDOR_ID_UDO_MENG_GMBH = 22101\nVENDOR_ID_KIM_SYSTEMHAUS_GMBH = 22102\nVENDOR_ID_PAYNET_LTD = 22103\nVENDOR_ID_YESTURNKEY_TECHNOLOGY_INC = 22104\nVENDOR_ID_CENTRAL_VISAYAS_INFORMATION_SHARING_NETWORK_FOUNDATION_INC = 22105\nVENDOR_ID_VODAFONE_SDEC = 22106\nVENDOR_ID_THE_FLORIDA_LOTTERY = 22107\nVENDOR_ID_APPLICATION_SCIENCE_AND_TECHNOLOGY = 22108\nVENDOR_ID_BEUTH_HOCHSCHULE_BERLIN_UNIVERSITY_OF_APPLIED_SCIENCES = 22109\nVENDOR_ID_AIREDALE_INTERNATIONAL_AIR_CONDITIONING_LTD = 22110\nVENDOR_ID_CHILIBYTE_OY = 22111\nVENDOR_ID_VIGIL_SECURITY_LLC = 22112\nVENDOR_ID_GIGABEAM = 22113\nVENDOR_ID_BATTLENET_UNDERGROUND = 22114\nVENDOR_ID_NETFLEXITY_LTD = 22115\nVENDOR_ID_QUERYUS = 22116\nVENDOR_ID_EPIQ_ELECTRONIC_ASSEMBLY_LTD = 22117\nVENDOR_ID_ADVANCE_AMERICA = 22118\nVENDOR_ID_GBST_HOLDINGS = 22119\nVENDOR_ID_DATASTACKSCOM = 22120\nVENDOR_ID_KRASNOYARSK_STATE_PEDAGOGICAL_UNIVERSITY = 22121\nVENDOR_ID_ESOLUTIONPROVIDERS = 22122\nVENDOR_ID_UNIMAS_SYSTEMS_CORP = 22123\nVENDOR_ID_NETWORKS_MORE_INC = 22124\nVENDOR_ID_SIERRA_VIDEO_SYSTEMS_INC = 22125\nVENDOR_ID_AVONET_SRO = 22126\nVENDOR_ID_DELVOS = 22127\nVENDOR_ID_RBC_CAPITAL_MARKETS_SYDNEY = 22128\nVENDOR_ID_AFTERHOURS_UPGRADES = 22129\nVENDOR_ID_VIVATAS_INC = 22130\nVENDOR_ID_TECHNICAL_MANAGEMENT_SYSTEM_GMBH = 22131\nVENDOR_ID_MEDIASYSCOM_SAS = 22132\nVENDOR_ID_UWIC = 22133\nVENDOR_ID_EMINDS_AB = 22134\nVENDOR_ID_SENTIVA_INNOVATION_AB = 22135\nVENDOR_ID_OUTSMART_LTD = 22136\nVENDOR_ID_IVOSH_SRO = 22137\nVENDOR_ID_ATS_KONVERS_LTD = 22138\nVENDOR_ID_KURCHATOV_INSTITUTE_GRID_DEPLOYMENT = 22139\nVENDOR_ID_VOLKER_SCHEUBER = 22140\nVENDOR_ID_PROCOM_GMBH = 22141\nVENDOR_ID_INTERFERENZA_SRL = 22142\nVENDOR_ID_STEATITE_LTD = 22143\nVENDOR_ID_INFONOTARY_LTD = 22144\nVENDOR_ID_VIDISYS_GMBH = 22145\nVENDOR_ID_DPT_OF_PHILOSOPHY_UTRECHT_UNIVERSITY = 22146\nVENDOR_ID_ALLPOINT_SECURITY_LTD = 22147\nVENDOR_ID_VENDA_LTD = 22148\nVENDOR_ID_SYSTEMHAUS_BAD_WALDSEE = 22149\nVENDOR_ID_WETTERN_NETWORK_SOLUTIONS = 22150\nVENDOR_ID_NEOTRONIC_SRL = 22151\nVENDOR_ID_CIPHERSEC_SPRL = 22152\nVENDOR_ID_VIVEON_AG = 22153\nVENDOR_ID_JOTRON_ELECTRONICS_AS = 22154\nVENDOR_ID_PONTIFICIA_UNIVERSITA_SANTA_CROCE = 22155\nVENDOR_ID_DYNAMIT_NOBEL_KUNSTSTOFF_GMBH = 22156\nVENDOR_ID_SLU = 22157\nVENDOR_ID_RESOLV_SARL = 22158\nVENDOR_ID_EPIN_TECHNOLOGIES_CHINA_LTD = 22159\nVENDOR_ID_RW_COMERCIO_E_SERVICOS_LTDA = 22160\nVENDOR_ID_JOHN_WIGGINS = 22161\nVENDOR_ID_BEYOND_DISABILITY_INC = 22162\nVENDOR_ID_RICOH_PRINTING_SYSTEMS_LTD = 22163\nVENDOR_ID_CAMBRIDGE_SILICON_RADIO_LIMITED = 22164\nVENDOR_ID_WEB_SERVICE_SOLUTIONS_INC = 22165\nVENDOR_ID_OCEAN_BROADBAND_NETWORKS = 22166\nVENDOR_ID_NOLOGICORG = 22167\nVENDOR_ID_CROWN_COLLEGE = 22168\nVENDOR_ID_NETENGINE_INC = 22169\nVENDOR_ID_FXCM = 22170\nVENDOR_ID_CESIGMA_SIGNALS_SYSTEMS = 22171\nVENDOR_ID_HACON_INGENIEURGESELLSCHAFT_MBH = 22172\nVENDOR_ID_FLEX_ENGINEERING = 22173\nVENDOR_ID_VIRTUAL_TRIP_LTD = 22174\nVENDOR_ID_MITRON_OY = 22175\nVENDOR_ID_ASKNET_AG = 22176\nVENDOR_ID_DFN_VEREIN = 22177\nVENDOR_ID_KURS_LLC = 22178\nVENDOR_ID_OTSUKA_CORPORATION = 22179\nVENDOR_ID_INSCAPE_DATA_CORPORATION = 22180\nVENDOR_ID_AVISION_INC = 22181\nVENDOR_ID_CASCADIA_BHC = 22182\nVENDOR_ID_CYLANT_INC = 22183\nVENDOR_ID_21ST_CENTURY_SOFTWARE_INC = 22184\nVENDOR_ID_ESCHOLAR_LLC = 22185\nVENDOR_ID_MARKETING_RESOURCE_CONSULTANTS_INC = 22186\nVENDOR_ID_SYMPHONIQ = 22187\nVENDOR_ID_CORRECTIME_LTD = 22188\nVENDOR_ID_STAR_TECHNOLOGIES_LLC = 22189\nVENDOR_ID_NETEFFECT_INC = 22190\nVENDOR_ID_BISMARCK_PUBLIC_SCHOOLS = 22191\nVENDOR_ID_PICTOU_REGIONAL_DEVELOPMENT_COMMISSION = 22192\nVENDOR_ID_COMPUTER_INFORMATION_SYSTEMS_LTD_BREST = 22193\nVENDOR_ID_ORION_SYSTEMS_INC = 22194\nVENDOR_ID_NEOTIP_SA = 22195\nVENDOR_ID_VISTEK_ELECTRONICS_LTD = 22196\nVENDOR_ID_SOFTBANK_BB_CORP = 22197\nVENDOR_ID_UNIVERSITY_OF_ST_GALLEN = 22198\nVENDOR_ID_UNITED_ARAB_EMIRATES_UNIVERSITY = 22199\nVENDOR_ID_SISTEMAS_TECHNICLITE_CA = 22200\nVENDOR_ID_RESEARCH_CENTER_OF_NETWORK_TECHOLOGY_NANJING_UNIVERSITY_OF_POSTS_AND = 22201\nVENDOR_ID_SECURITY_TOSTEM_COLTD = 22202\nVENDOR_ID_INFORMTICA_EL_CORTE_INGLS_SA = 22203\nVENDOR_ID_BUNDESVERSICHERUNGSANSTALT_FR_ANGESTELLTE = 22204\nVENDOR_ID_3G_DATA_SOLUCIONES_CA = 22205\nVENDOR_ID_M_REAL_CORPORATION = 22206\nVENDOR_ID_SUREWEST = 22207\nVENDOR_ID_AGES_INTERNATIONAL_GMBH_CO_KG = 22208\nVENDOR_ID_LJXN_INC = 22209\nVENDOR_ID_FLSYSTEM = 22210\nVENDOR_ID_LEGACY_PROPERTY_INVESTMENTS_LLC_FORMERLY_JMANDERSON_ENTERPRISES = 22211\nVENDOR_ID_COGNIO_INC = 22212\nVENDOR_ID_POSDA = 22213\nVENDOR_ID_EXPLORER_POST_227 = 22214\nVENDOR_ID_POGO_LINUX_INC = 22215\nVENDOR_ID_SIGHQ_NETWORKING = 22216\nVENDOR_ID_YITRAN_COMMUNICATIONS = 22217\nVENDOR_ID_NAVARRO_Y_BORONAD_SL = 22218\nVENDOR_ID_BORENET_AB = 22219\nVENDOR_ID_LACNIC = 22220\nVENDOR_ID_WESCOM_GMBH = 22221\nVENDOR_ID_PROAXIAL = 22222\nVENDOR_ID_INTELLICAL_LLC = 22223\nVENDOR_ID_QUEENSLAND_TREASURY = 22224\nVENDOR_ID_HUAZHONG_UNIVERSITY_OF_SCIENCE_AND_TECHNOLOGY = 22225\nVENDOR_ID_ACAMAYA_SA = 22226\nVENDOR_ID_DAVID_MAINS_CO_INC = 22227\nVENDOR_ID_THE_UNIVERSITY_OF_MANCHESTER_COMPUTER_SOCIETY = 22228\nVENDOR_ID_HEIKS_COMPUTERDIENSTEN = 22229\nVENDOR_ID_MYPOINTS_INC = 22230\nVENDOR_ID_VEL_TECHNOLOGIES_LLC = 22231\nVENDOR_ID_KYLE_HAMILTON = 22232\nVENDOR_ID_GERMAN_OVERSEAS_INSTITUTE = 22233\nVENDOR_ID_KEYNECTIS = 22234\nVENDOR_ID_BEIJING_WELLTELECOM_COLTD = 22235\nVENDOR_ID_ULTRAWAVES_DESIGN_INC = 22236\nVENDOR_ID_INVENTRONIK_GMBH = 22237\nVENDOR_ID_FOXCONN_TECHNOLOGY_GROUP = 22238\nVENDOR_ID_RESPONSE_SYSTEMS_CORPORATION = 22239\nVENDOR_ID_DATOR3_AS = 22240\nVENDOR_ID_CA_COMPUTER_CONSULTANTS_LTD = 22241\nVENDOR_ID_GENTOO_FOUNDATION_INC = 22242\nVENDOR_ID_THE_SWATCH_GROUP_LTD = 22243\nVENDOR_ID_ING_BRO_OTTE_GMBH = 22244\nVENDOR_ID_PHALANX = 22245\nVENDOR_ID_HSBC_BANK_PLC = 22246\nVENDOR_ID_PORT_OF_TILBURY_LONDON_LTD = 22247\nVENDOR_ID_TOPF_SICRETORG = 22248\nVENDOR_ID_INSIGHT_TECHNOLOGIES_CO_LTD = 22249\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_RADIOASTRONOMIE = 22250\nVENDOR_ID_SYDERAL_SA = 22251\nVENDOR_ID_MCAFEE_INC_FORMERLY_RECONNEX_CORPORATION = 22252\nVENDOR_ID_LITE_SPEED_TECHNOLOGIES_INC = 22253\nVENDOR_ID_JEROMES_FURNITURE_WAREHOUSE = 22254\nVENDOR_ID_STOPTHEGLACIERSORG = 22255\nVENDOR_ID_GROEP_T_HOGESCHOOL_LEUVEN = 22256\nVENDOR_ID_CONSULTATION_INFORMATIQUE_DANIEL_SAVARD_INC = 22257\nVENDOR_ID_ENLACES_TECNOLOGICOS_SA_DE_CV = 22258\nVENDOR_ID_WEBAVIS = 22259\nVENDOR_ID_SCANA = 22260\nVENDOR_ID_CALIFORNIA_LUTHERAN_UNIVERSITY = 22261\nVENDOR_ID_OPENSIDES_SPRL = 22262\nVENDOR_ID_THE_CORPORATION_OF_THE_COUNTY_OF_BRANT = 22263\nVENDOR_ID_ARTIFACT_SOFTWARE_INC = 22264\nVENDOR_ID_STEWART_ENTERPRISES_INC = 22265\nVENDOR_ID_EVIDANT_CORPORATION = 22266\nVENDOR_ID_INTEGRAL_TECHNOLOGIES_INC = 22267\nVENDOR_ID_FLAMMIGER_ENTERPRISES = 22268\nVENDOR_ID_CHARLES_A_GURA = 22269\nVENDOR_ID_QUALITY_COMM_COMRCIO_E_SERVIOS_DE_TELEINFORMTICA_LTDA = 22270\nVENDOR_ID_NIMIUM_DOO = 22271\nVENDOR_ID_PAREXEL_INTERNATIONAL_CORPORATION = 22272\nVENDOR_ID_UNIVERSITA_DEGLI_STUDI_DI_FERRARA = 22273\nVENDOR_ID_QSAN_TECHNOLOGY_INC = 22274\nVENDOR_ID_PNMS = 22275\nVENDOR_ID_FHD_LTD = 22276\nVENDOR_ID_GIQUADRAT_MBH = 22277\nVENDOR_ID_BOB_PAPERI_KY = 22278\nVENDOR_ID_SHIFLETT_CONSULTING = 22279\nVENDOR_ID_TELUS_MOBILITY = 22280\nVENDOR_ID_CODE_INGENIERIA_INFORMATICA = 22281\nVENDOR_ID_QUALYS_INC = 22282\nVENDOR_ID_GUTEMBERG_MEDEIROS_LTDA = 22283\nVENDOR_ID_DIMENSAO_DIGITAL_DESENVOLVIMENTO_LTD = 22284\nVENDOR_ID_TERACUE = 22285\nVENDOR_ID_SYSTEMA = 22286\nVENDOR_ID_TRS_SPA = 22287\nVENDOR_ID_EXTIS_GMBH = 22288\nVENDOR_ID_CONTEC_GMBH = 22289\nVENDOR_ID_SKANDSOFT_TECHNOLOGIES = 22290\nVENDOR_ID_FUJITSU_ADVANCED_SOLUTIONS_LIMITED = 22291\nVENDOR_ID_NETWORK_CENTER_OF_PEKING_UNIVERSITY = 22292\nVENDOR_ID_DAILY_DOSE_LANGUAGE_SYSTEMS_INC = 22293\nVENDOR_ID_CAR_FRESHNER_CORPORATION = 22294\nVENDOR_ID_MINISTRSTVO_ZA_OBRAMBO_REPUBLIKE_SLOVENIJE = 22295\nVENDOR_ID_FAZT_NETWORKS_LTD = 22296\nVENDOR_ID_ALLIED_BANK_CORPORATION = 22297\nVENDOR_ID_HJEBROMLLA = 22298\nVENDOR_ID_PONTIFICAL_UNIVERSITY_OF_ST_THOMAS = 22299\nVENDOR_ID_CABLEMATRIX_TECHNOLOGIES_INC = 22300\nVENDOR_ID_COMP_RZESZOW_SA = 22301\nVENDOR_ID_IC_COMPAS_GMBH_AND_CO_KG = 22302\nVENDOR_ID_RSS_SOLUTIONS_INC = 22303\nVENDOR_ID_WESTINGHOUSE_SAVANNAH_RIVER_COMPANY_LLC = 22304\nVENDOR_ID_SCHWABEROWDE = 22305\nVENDOR_ID_MCMASTER_UNIVERSITY = 22306\nVENDOR_ID_ACTIVE_REASONING_INC = 22307\nVENDOR_ID_REDSKY_TECHNOLOGIES_INC = 22308\nVENDOR_ID_CALIFORNIA_STATE_AUTOMOBILE_ASSOCIATION = 22309\nVENDOR_ID_COMNETMEDIA_AG = 22310\nVENDOR_ID_AF_BLAKEMORE_AND_SON_LTD = 22311\nVENDOR_ID_UNIVERSIT_SAINT_LOUIS_BRUXELLES_USL_B_FORMERLY_UNIVERSIT_SAINT_LOUIS_USL_B = 22312\nVENDOR_ID_SP_CONTROLS_INC = 22313\nVENDOR_ID_TGN_SYSTEME_KRUEGER_PARTNER = 22314\nVENDOR_ID_SPOT_MEDIA_AG = 22315\nVENDOR_ID_ONTAPSOLUTIONS = 22316\nVENDOR_ID_APPLIED_IDENTITY_INC = 22317\nVENDOR_ID_ANYWARE_VIDEO = 22318\nVENDOR_ID_DRAVSKE_ELEKTRARNE_MARIBOR = 22319\nVENDOR_ID_GUARDIAN_NEWSPAPERS_LIMITED = 22320\nVENDOR_ID_ISAC_INC = 22321\nVENDOR_ID_FREECOMM_CORPORATION = 22322\nVENDOR_ID_CAPINFO_CO_LTD = 22323\nVENDOR_ID_COOPERTON_LLC = 22324\nVENDOR_ID_BLICK_SA = 22325\nVENDOR_ID_SAGO_SPA = 22326\nVENDOR_ID_MARTOS_LTD = 22327\nVENDOR_ID_ID_QUANTIQUE_SA = 22328\nVENDOR_ID_SAME_2 = 22329\nVENDOR_ID_BIAS_INC = 22330\nVENDOR_ID_STATE_OF_TEXAS_OFFICE_OF_THE_ATTORNEY_GENERAL_CHILD_SUPPORT_DIVISION = 22331\nVENDOR_ID_IMMEDIATEIT = 22332\nVENDOR_ID_JPOTTER = 22333\nVENDOR_ID_LAWS_AND_WOLFE_INC = 22334\nVENDOR_ID_ALCORN_STATE_UNIVERSITY = 22335\nVENDOR_ID_HOPSON_ADVANCED_EMBEDDED_ENGINEERING = 22336\nVENDOR_ID_HITACHI_ELECTRONICS_SERVICES_COLTD = 22337\nVENDOR_ID_PALIOT = 22338\nVENDOR_ID_RHX_STUDIO_SNC = 22339\nVENDOR_ID_HERLEIN_ENGINEERING_INC = 22340\nVENDOR_ID_ESO_TECHNOLOGIES = 22341\nVENDOR_ID_DYNDACO_BVBA = 22342\nVENDOR_ID_TECHNICAL_MANANGMENT = 22343\nVENDOR_ID_TELCOMANAGER_TECHNOLOGIES = 22344\nVENDOR_ID_EXALON_DELFT = 22345\nVENDOR_ID_DASS_IT_GMBH = 22346\nVENDOR_ID_IDS_SERVICES_LLC = 22347\nVENDOR_ID_BRAINTOWER_TECHNOLOGIES_GMBH = 22348\nVENDOR_ID_PREMIER_RETAIL_NETWORKS = 22349\nVENDOR_ID_DEBITEL_AG = 22350\nVENDOR_ID_REDPROMPT = 22351\nVENDOR_ID_PRAGMETA_NETWORKS = 22352\nVENDOR_ID_NETWORK_CONNECTION = 22353\nVENDOR_ID_THE_LAPP_COMPANIES = 22354\nVENDOR_ID_CLARITON_NETWORKS_LTD = 22355\nVENDOR_ID_WEB_CYBER_CO = 22356\nVENDOR_ID_INET_CONSULTINGCOM_INC = 22357\nVENDOR_ID_ALBEO = 22358\nVENDOR_ID_JOFEE_INTERNET_SERVICES = 22359\nVENDOR_ID_UNZET_APS = 22360\nVENDOR_ID_UNIVERSITY_OF_MICHIGAN_RADIATION_ONCOLOGY_PHYSICS = 22361\nVENDOR_ID_GENERAL_SOFTWARE_INC = 22362\nVENDOR_ID_KEN_BASS_CONSULTING = 22363\nVENDOR_ID_EMARKMONITOR_INC = 22364\nVENDOR_ID_GLUESYS_CO_LTD = 22365\nVENDOR_ID_EASYSOFT = 22366\nVENDOR_ID_DIGITAL_FALLOUT = 22367\nVENDOR_ID_SILVER_SPRING_NETWORKS = 22368\nVENDOR_ID_HONG_KONG_APPLIED_SCIENCE_AND_TECHNOLOGY_RESEARCH_INSTITUTE_COMPANY = 22369\nVENDOR_ID_DUPLO_CORPORATION = 22370\nVENDOR_ID_BUSINESS_DATA_SOLUTIONS = 22371\nVENDOR_ID_HORST_REITERER = 22372\nVENDOR_ID_THUNDERTECHNOLOGY_SRL = 22373\nVENDOR_ID_ALLEGRO_WIRELESS_CANADA_INC = 22374\nVENDOR_ID_CRESCENT_REAL_ESTATE_EQUITIES_LTD = 22375\nVENDOR_ID_MASCO_CORPORATION = 22376\nVENDOR_ID_VOICEPORT_LLC = 22377\nVENDOR_ID_SPACESHIPCOM_INC = 22378\nVENDOR_ID_INOVAWEB = 22379\nVENDOR_ID_VINCENT_DEFERT_CONSULTING = 22380\nVENDOR_ID_LINUX_USER_GROUP_ROMA = 22381\nVENDOR_ID_DRAZEN_BAIC = 22382\nVENDOR_ID_HCCP = 22383\nVENDOR_ID_BENEDIKT_HEINEN = 22384\nVENDOR_ID_HOUSTON_ACADEMY_OF_MEDICINE_TEXAS_MEDICAL_CENTER_LIBRARY = 22385\nVENDOR_ID_IONFLUXORG = 22386\nVENDOR_ID_INSYNC_TECHNOLOGY_LTD = 22387\nVENDOR_ID_SENTELCO = 22388\nVENDOR_ID_IRIS_CORPORATION_BERHAD = 22389\nVENDOR_ID_PARSEK_CORPORATION_LTD = 22390\nVENDOR_ID_CITADEL_SECURITY_SOFTWARE_INC = 22391\nVENDOR_ID_DELCO_SPA = 22392\nVENDOR_ID_CDL_CHAIR_SAARLAND_UNIVERSITY = 22393\nVENDOR_ID_DIGITAL_FUEL_LTD = 22394\nVENDOR_ID_DYLOGIC_SRL = 22395\nVENDOR_ID_POWER_MEDIA_SP_Z_OO = 22396\nVENDOR_ID_IBAMA = 22397\nVENDOR_ID_COOPERATIVA_DE_COMPUTAO_DA_UNIMONTES = 22398\nVENDOR_ID_QBT_SYSTEMS_INC = 22399\nVENDOR_ID_INSIDE_HIGHER_ED = 22400\nVENDOR_ID_VOIP_INC = 22401\nVENDOR_ID_LOISINC = 22402\nVENDOR_ID_KOCH_NEFF_VOLCKMAR_GMBH = 22403\nVENDOR_ID_SBS_TECHNOLOGIES = 22404\nVENDOR_ID_FUJITSU_SERVICES_FINLAND_OY = 22405\nVENDOR_ID_ADERMIIS = 22406\nVENDOR_ID_NEOMERIDIAN_SDN_BHD = 22407\nVENDOR_ID_PRIMEKEY_SOLUTIONS_AB = 22408\nVENDOR_ID_MIDLAND_MEMORIAL_HOSPITAL = 22409\nVENDOR_ID_PIXEL_TECHNOLOGY = 22410\nVENDOR_ID_HAWKIS_CONSULTING = 22411\nVENDOR_ID_OPENENTERPRISECOUK = 22412\nVENDOR_ID_THESTREETCOM_INC = 22413\nVENDOR_ID_PACIFIC_LUTHERAN_UNIVERSITY = 22414\nVENDOR_ID_MOLE_VALLEY_FARMERS_LTD = 22415\nVENDOR_ID_SHELTON_INTERNET_LTD = 22416\nVENDOR_ID_INFORMATION_DESIGN_DEPARTMENT_OF_TAMA_ART_UNIVERSITY = 22417\nVENDOR_ID_USINA_DE_IMAGENS_PHOTODESIGN_LTDA = 22418\nVENDOR_ID_RELEX_INC = 22419\nVENDOR_ID_ACCEDIAN_INC = 22420\nVENDOR_ID_TSYS_PREPAID_INC = 22421\nVENDOR_ID_PROVIDEO_SYSTEMS_PTY_LTD = 22422\nVENDOR_ID_ALMOS_SYSTEMS_PTY_LTD = 22423\nVENDOR_ID_INTELSOFT = 22424\nVENDOR_ID_AUDIO_PROCESSING_TECHNOLOGY_LTD = 22425\nVENDOR_ID_DIGITAL_DATA_COMMUNICATIONS_ASIA_CO_LTD = 22426\nVENDOR_ID_SOWOOD_CO_LTD = 22427\nVENDOR_ID_REALOPS_INC = 22428\nVENDOR_ID_FLORICAL_SYSTEMS_INC = 22429\nVENDOR_ID_VOLKE_ENTWICKLUNGSRING_GMBH = 22430\nVENDOR_ID_PHOENIX_INTERACTIVE_DESIGN_INC = 22431\nVENDOR_ID_GIMLITECH = 22432\nVENDOR_ID_SILVERMEDIA_GROUP = 22433\nVENDOR_ID_NET_TIME_CORP = 22434\nVENDOR_ID_BEEP_SCIENCE_AS = 22435\nVENDOR_ID_SUMAR_CONSULTORES_ASSOCIADOS_LTDA = 22436\nVENDOR_ID_ITZ_INFORMATIONSTECHNOLOGIE_GMBH = 22437\nVENDOR_ID_GROXIS_INC = 22438\nVENDOR_ID_CASENEX = 22439\nVENDOR_ID_CANADIAN_BANK_NOTE_COMPANY_LTD = 22440\nVENDOR_ID_NEXT_DIMENSION_INC = 22441\nVENDOR_ID_CHILECOM_SA = 22442\nVENDOR_ID_EMETEC = 22443\nVENDOR_ID_GASCARD_PARTNERS_LP = 22444\nVENDOR_ID_SIMON_HOLMGAARD_IT = 22445\nVENDOR_ID_BITDEFENDER_SRL_FORMERLY_SOFTWIN_SRL = 22446\nVENDOR_ID_BBRAUN_MELSUNGEN_AG = 22447\nVENDOR_ID_CLUSTER_WORXXNET = 22448\nVENDOR_ID_SOPA = 22449\nVENDOR_ID_SERVICENETZBIZ = 22450\nVENDOR_ID_CUSTOM_IDEAS = 22451\nVENDOR_ID_ING_DIBA_AG = 22452\nVENDOR_ID_HS_HOVEDSTADENS_SYGEHUSFLLESSKAB = 22453\nVENDOR_ID_HELMUT_MAUELL_GMBH = 22454\nVENDOR_ID_TRIBUNAL_REGIONAL_DO_TRABALHO_DA_4A_REGIO = 22455\nVENDOR_ID_HEBRAIC_HERTIAGE_CHRISTIAN_SCHOOL_OF_THEOLOGY = 22456\nVENDOR_ID_DEUTSCHER_RING_LEBENSVERSICHERUNGSAG = 22457\nVENDOR_ID_MODULUS_VIDEO_INC = 22458\nVENDOR_ID_QVIDIA_TECHNOLOGIES_INC = 22459\nVENDOR_ID_TANGTOP_TECHNOLOGY_COLTD = 22460\nVENDOR_ID_JEEF_SOFTWARE = 22461\nVENDOR_ID_NIXSYS_BVBA = 22462\nVENDOR_ID_HEIDEMANNORG = 22463\nVENDOR_ID_01MAP = 22464\nVENDOR_ID_GIE_AXA_TECHNOLOGY_SERVICES_BELGIUM = 22465\nVENDOR_ID_HOEHMANNBIZ = 22466\nVENDOR_ID_APPLIED_GLOBAL_TECHNOLOGIES_INC = 22467\nVENDOR_ID_RED_C_OPTICAL_NETWORKING = 22468\nVENDOR_ID_UNIVERSIDAD_ORT_URUGUAY = 22469\nVENDOR_ID_NETDEPOSIT_INC = 22470\nVENDOR_ID_VISIBLE_SCHOOL_INC = 22471\nVENDOR_ID_BOINGO_WIRELESS_INC = 22472\nVENDOR_ID_TELEDYNE_CONTROLS = 22473\nVENDOR_ID_ASYLUM_TELECOM_LTD = 22474\nVENDOR_ID_UK_BROADBAND = 22475\nVENDOR_ID_SYNCOR_SYSTEMS_INC = 22476\nVENDOR_ID_KINGHOLD_TECHNOLOGY_COLTD = 22477\nVENDOR_ID_MY_ERM_APPLICATION = 22478\nVENDOR_ID_CROSSWALK_INC = 22479\nVENDOR_ID_XIPLINK_NETWORKING = 22480\nVENDOR_ID_HHS_HEALTH_OPTIONS_INC = 22481\nVENDOR_ID_NC = 22482\nVENDOR_ID_STREAMSHIELD_NETWORKS = 22483\nVENDOR_ID_GRANDCENTRALORG = 22484\nVENDOR_ID_SAFENET_INFOTECH_PVT_LTD = 22485\nVENDOR_ID_KYUSHU_INSTITUTE_OF_TECHNOLOGY = 22486\nVENDOR_ID_2X_SOFTWARE_LTD = 22487\nVENDOR_ID_TELTRONIC_SAU = 22488\nVENDOR_ID_TELVENT_TRFICO_Y_TRANSPORTE_SA = 22489\nVENDOR_ID_HEALTH_CARE_SERVICE_CORPORATION = 22490\nVENDOR_ID_VIRCOM_INC = 22491\nVENDOR_ID_FORENSIC_SIGNATURE_CORP = 22492\nVENDOR_ID_MW_2000_SA = 22493\nVENDOR_ID_ANIMALTRACKSNET = 22494\nVENDOR_ID_CHANDLER_GILBERT_COMMUNITY_COLLEGE = 22495\nVENDOR_ID_DIGITAL_STREAM_INC = 22496\nVENDOR_ID_SHANGHAI_BLACKSTONE_COMMUNICATION_LTD = 22497\nVENDOR_ID_NEDDCO_ENTERPRISES = 22498\nVENDOR_ID_DOCUMENT_PROCESSING_SYSTEMS_INC = 22499\nVENDOR_ID_OFFICELINK_PLUS_PTY_LTD = 22500\nVENDOR_ID_UAB_SKAITMENINIO_SERTIFIKAVIMO_CENTRAS = 22501\nVENDOR_ID_DAVITA_INC = 22502\nVENDOR_ID_KLAUS_HENSKE = 22503\nVENDOR_ID_REDDEVELCOM = 22504\nVENDOR_ID_VOLKER_ENGLISCH = 22505\nVENDOR_ID_INCACHE_LLC = 22506\nVENDOR_ID_MINISTERIO_DA_CIENCIA_E_TECNOLOGIA = 22507\nVENDOR_ID_BEIJING_FIBERHOME_MOBILE_TECHNOLOGIES_COLTD = 22508\nVENDOR_ID_THE_POTTER_GROUP_LTD = 22509\nVENDOR_ID_WHATCOUNTS = 22510\nVENDOR_ID_THINKORSWIM_GROUP_INC = 22511\nVENDOR_ID_PERSONAL_SOFTWARE_DEVELOPEMENT_COMPANY = 22512\nVENDOR_ID_PT_SAPTA_SARANA_KOMUNIKA = 22513\nVENDOR_ID_RVISION_LLC = 22514\nVENDOR_ID_THEORETIC_SOLUTIONS = 22515\nVENDOR_ID_CASTALIA_LLC = 22516\nVENDOR_ID_ERNSTER_PUBLIC_RELATIONS = 22517\nVENDOR_ID_AREL_COMMUNICATIONS_AND_SOFTWARE_LTD = 22518\nVENDOR_ID_AKADEMISCHE_FLIEGERGRUPPE_KARLSRUHE = 22519\nVENDOR_ID_SANDPATH = 22520\nVENDOR_ID_SCHWEGMAN_LUNDBERG_WOESSNER_KLUTH_PA = 22521\nVENDOR_ID_CLEARPATH_NETWORKS = 22522\nVENDOR_ID_FONTEC_INFORMATION_TECHNOLOGY_INC = 22523\nVENDOR_ID_PROYECTO_FIN_DE_CARRERA = 22524\nVENDOR_ID_RMP_WEBWORKS = 22525\nVENDOR_ID_INSTANTSERVERS_INC = 22526\nVENDOR_ID_CAPELLA_TECHNOLOGIES = 22527\nVENDOR_ID_IPODION_GMBH = 22528\nVENDOR_ID_KOMMUNALE_DATENVERARBEITUNGSGESELLSCHAFT_MBH = 22529\nVENDOR_ID_TAKEDA_PHARMACEUTICALS_NORTH_AMERICA_INC = 22530\nVENDOR_ID_PALOMA_PARTNERS = 22531\nVENDOR_ID_COMPUTER_GRAPHICS_GROUP = 22532\nVENDOR_ID_SYMETRA_FINANCIAL = 22533\nVENDOR_ID_PURDUE_PHARMA_LP = 22534\nVENDOR_ID_NEIMAN_MARCUS_GROUP = 22535\nVENDOR_ID_COPAN_SYSTEMS = 22536\nVENDOR_ID_TREETOP_GBR = 22537\nVENDOR_ID_REVA_SYSTEMS_CORPORATION = 22538\nVENDOR_ID_CHAMPION_COMPUTER_TECHNOLOGIES = 22539\nVENDOR_ID_OULUN_LYSEON_LUKIO = 22540\nVENDOR_ID_OPEN_ACUITY_LLC = 22541\nVENDOR_ID_LEX_PERSONA = 22542\nVENDOR_ID_GOUNOT = 22543\nVENDOR_ID_HOST_COLLECTIVE_INC = 22544\nVENDOR_ID_DAUDT_CONSULTING = 22545\nVENDOR_ID_QWASARTECH = 22546\nVENDOR_ID_ALFRED_UNIVERSITY = 22547\nVENDOR_ID_BIAPO = 22548\nVENDOR_ID_BROAD_NET_MUX_CORPORATION = 22549\nVENDOR_ID_NANOTEX_CORP = 22550\nVENDOR_ID_MOIMSTONE_COLTD = 22551\nVENDOR_ID_SINCO_INFORMATICA = 22552\nVENDOR_ID_IT_SAVER = 22553\nVENDOR_ID_LEGION_OF_THE_BOUNCY_CASTLE = 22554\nVENDOR_ID_SAFEHAUS = 22555\nVENDOR_ID_JAPAN_ADVANCED_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY = 22556\nVENDOR_ID_DEUTSCHE_BRSE_GROUP = 22557\nVENDOR_ID_ONE4VISION_GMBH = 22558\nVENDOR_ID_INTERSYS_AG = 22559\nVENDOR_ID_DYNAMIC_DESIGN_GMBH = 22560\nVENDOR_ID_GRAPHIC_IMAGE_TECHNOLOGIES_PTY_LTD = 22561\nVENDOR_ID_TRIVECTOR_SYSTEM_AB = 22562\nVENDOR_ID_EHOTEL_AG = 22563\nVENDOR_ID_ULX_LTD = 22564\nVENDOR_ID_ODYSSE_SYSTMES = 22565\nVENDOR_ID_DEVOTEAM = 22566\nVENDOR_ID_INSTITUTO_POLITCNICO_DE_CASTELO_BRANCO = 22567\nVENDOR_ID_REDWAVE_TECHNOLOGY_LTD = 22568\nVENDOR_ID_DYNAMEETING_SPA = 22569\nVENDOR_ID_THOMAS_TAEGER_DATENBLATT = 22570\nVENDOR_ID_AMART_LOGIC = 22571\nVENDOR_ID_ADNET_SOLUTIONS_ENRICO_ROGA = 22572\nVENDOR_ID_INFINITE_SOFTWARE_INC = 22573\nVENDOR_ID_ISEG_SPEZIALELEKTRONIK_GMBH = 22574\nVENDOR_ID_ASTRO_MED_INC = 22575\nVENDOR_ID_THE_OPENBSD_SNMP_PROJECT = 22576\nVENDOR_ID_THOMAS_WOLLNER_IT_BERATUNG_UND_INTEGRATION = 22577\nVENDOR_ID_INFARMTECH = 22578\nVENDOR_ID_CHRISTOPH_MICHEL_IT_MANAGEMENT = 22579\nVENDOR_ID_MARTIN_BAKER_AIRCRAFT_COMPANY_LTD = 22580\nVENDOR_ID_EPOLLUXORG = 22581\nVENDOR_ID_GROUP_4_TECHNOLOGY_LTD = 22582\nVENDOR_ID_CLARKSON_UNIVERSITY = 22583\nVENDOR_ID_ZETERA_CORPORATION = 22584\nVENDOR_ID_FOREST_LABORATORIES_INC = 22585\nVENDOR_ID_DOTCAST_INC = 22586\nVENDOR_ID_HJELLE_IT_BISTAND = 22587\nVENDOR_ID_LUCAS_WEB_STUDIO = 22588\nVENDOR_ID_P6R_INC = 22589\nVENDOR_ID_BHG_SECURITY_CONSULTING = 22590\nVENDOR_ID_FACHHOCHSCHULE_MUENCHEN_ZAK = 22591\nVENDOR_ID_INFORMATEC_LTDA = 22592\nVENDOR_ID_EMILY_CARR_COLLEGE_OF_ART_AND_DESIGN = 22593\nVENDOR_ID_GOLDKRUSH = 22594\nVENDOR_ID_MODULATION_SCIENCES_INC = 22595\nVENDOR_ID_MARRIANNECOM = 22596\nVENDOR_ID_EORG = 22597\nVENDOR_ID_MISSIONMODE_SOLUTIONS_INC = 22598\nVENDOR_ID_INFORMATEC_COMERCIAL_E_SERVIOS_LTDA = 22599\nVENDOR_ID_HARRIS_CAPROCK_COMMUNICATIONS_FORMERLY_CAPROCK_COMMUNICATIONS = 22600\nVENDOR_ID_TACHOMETRY_CORPORATION = 22601\nVENDOR_ID_TESI_TCNICA_DEL_SO_I_LA_IMATGE_SL = 22602\nVENDOR_ID_SKYBLUEEUCOM = 22603\nVENDOR_ID_RENTOKIL_INITIAL_PLC = 22604\nVENDOR_ID_WINKOWSKI_SP_Z_OO = 22605\nVENDOR_ID_THOMAS_URBAN = 22606\nVENDOR_ID_CHILITECH_INTERNET_SOLUTIONS_INC = 22607\nVENDOR_ID_CMED_LTD = 22608\nVENDOR_ID_CJ_MICROWARE_AND_ASSOCIATES = 22609\nVENDOR_ID_RAKSHA_NETWORKS_INC = 22610\nVENDOR_ID_TELE_LORCA = 22611\nVENDOR_ID_ENVIROCARE_OF_UTAH_LLC = 22612\nVENDOR_ID_CITY_ANIMAL_HOSPITAL_LTD = 22613\nVENDOR_ID_SHUTTERBUG_PRODUCTIONS_CONSULTING = 22614\nVENDOR_ID_LUNAE_PROJECT = 22615\nVENDOR_ID_COMPANHIA_DE_SISTEMAS_COMPSIS_CONSULTORIA_E_COMERCIO_DE = 22616\nVENDOR_ID_RICHLAND_COMMUNITY_COLLEGE = 22617\nVENDOR_ID_IBM_NY_HOSPITALS = 22618\nVENDOR_ID_UNIVERSIDADE_DE_AVEIRO = 22619\nVENDOR_ID_SERVEAPOLIS = 22620\nVENDOR_ID_STEPPING_STONE_GMBH = 22621\nVENDOR_ID_LIGHTEL_TECHNOLOGIES_INC = 22622\nVENDOR_ID_EXCELLENT_RAMEUR = 22623\nVENDOR_ID_SOURCE_TECHNOLOGIES = 22624\nVENDOR_ID_PROCESSCLAIMS = 22625\nVENDOR_ID_COMET_SYSTEM_SRO = 22626\nVENDOR_ID_MIKRO_KOD_LTD = 22627\nVENDOR_ID_DEUTSCHE_ANGESTELLTEN_KRANKENKASSE = 22628\nVENDOR_ID_ALPERMANNVELTE_ELECTRONIC_ENGINEERING_GMBH = 22629\nVENDOR_ID_ISTITUTO_NAZIONALE_PER_LA_RICERCA_SUL_CANCRO = 22630\nVENDOR_ID_FACHHOCHSCHULE_OSNABRUECK = 22631\nVENDOR_ID_TOKYO_BUSINESS_SOLUTION_COLTD = 22632\nVENDOR_ID_BANCO_MERCANTIL_DO_BRASIL_SA = 22633\nVENDOR_ID_OBJECTIF_SOFTWARE = 22634\nVENDOR_ID_SECIT_SECURE_IT_LTD = 22635\nVENDOR_ID_BBV_AG = 22636\nVENDOR_ID_ANGELS_OUTPOST = 22637\nVENDOR_ID_SIEMENS_PTD_EA = 22638\nVENDOR_ID_UNICO_COMPUTER_SYSTEMS_PTY_LTD = 22639\nVENDOR_ID_LUXPERT = 22640\nVENDOR_ID_MICROSYSTMES_SA = 22641\nVENDOR_ID_PROXID = 22642\nVENDOR_ID_CARSALESCOMAU_LTD = 22643\nVENDOR_ID_ZETTAINET_LLC = 22644\nVENDOR_ID_LANE_COUNTY = 22645\nVENDOR_ID_AMERICOM_GOVERNMENT_SERVICES_INC = 22646\nVENDOR_ID_WRO_COM_MACIEJ_JANKOWSKI = 22647\nVENDOR_ID_TENSQUARE_GMBH = 22648\nVENDOR_ID_ASTORIA_NETWORKS_INC = 22649\nVENDOR_ID_ADS_SPECIALISTS_INC = 22650\nVENDOR_ID_VISUAL_COMMANDS = 22651\nVENDOR_ID_RAPTOR_NETWORKS_TECHNOLOGY_INC = 22652\nVENDOR_ID_STOKE_INC = 22653\nVENDOR_ID_KODAK_DENTAL_SYSTEMS = 22654\nVENDOR_ID_NUMBER41MEDIA_CORPORATION = 22655\nVENDOR_ID_INTELICIS_CORPORATION = 22656\nVENDOR_ID_EXPRIT_SRO = 22657\nVENDOR_ID_APRIA_HEALTHCARE_GROUP = 22658\nVENDOR_ID_HHS_INTERNATIONAL_LTD = 22659\nVENDOR_ID_WYOMINGCOM = 22660\nVENDOR_ID_WOLFRAM_SCHLICH_IT_SERVICE = 22661\nVENDOR_ID_UECOMM_LTD = 22662\nVENDOR_ID_BANCO_DO_ESTADO_DE_SERGIPE_S_A = 22663\nVENDOR_ID_SOOST_SOFTWARE_TECHNOLOGY = 22664\nVENDOR_ID_EXPLICATEORG = 22665\nVENDOR_ID_HAUTESPOT_NETWORKS = 22666\nVENDOR_ID_PHASE5_INFORMATION_TECHNOLOGY_GBR = 22667\nVENDOR_ID_HAWAIIAN_ELECTRIC_COMPANY = 22668\nVENDOR_ID_NORTH_WEST_UNIVERSITY = 22669\nVENDOR_ID_CONTROLGUARD_LTD = 22670\nVENDOR_ID_VITRONIC_DR_ING_STEIN_BILDVERARBEITUNGSSYSTEME_GMBH = 22671\nVENDOR_ID_UNIVERSITY_OF_PERADENIYA = 22672\nVENDOR_ID_GTS_TELECOM_SRL = 22673\nVENDOR_ID_GAMERSMAFIA = 22674\nVENDOR_ID_PRORANGE_LTD = 22675\nVENDOR_ID_MANITU = 22676\nVENDOR_ID_FINSOFT_LTD = 22677\nVENDOR_ID_LATENS_SYSTEMS_LTD = 22678\nVENDOR_ID_FUTURA_NT_SRL = 22679\nVENDOR_ID_OXFORD_BIOSIGNALS_LTD = 22680\nVENDOR_ID_ARD_TECHNOLOGY = 22681\nVENDOR_ID_VESUVIUS = 22682\nVENDOR_ID_SIGMA_CHEMNITZ_GMBH = 22683\nVENDOR_ID_ACS_AUTOMOTIVE_COMMUNICATION_SERVICES_GMBH = 22684\nVENDOR_ID_FRONTER_AS = 22685\nVENDOR_ID_AZBOOKA_PUBLISHERS_LTD = 22686\nVENDOR_ID_BRINKS_UK_LIMITED = 22687\nVENDOR_ID_JBORDERCOM = 22688\nVENDOR_ID_YAMAGATA_UNIVERSITY = 22689\nVENDOR_ID_CLEON_SOLUTIONS_SRL = 22690\nVENDOR_ID_APL_LTD = 22691\nVENDOR_ID_MAGMA_SOFT = 22692\nVENDOR_ID_ALPHA_VENEGA_CORPORATION = 22693\nVENDOR_ID_BROADCAST_SERVICE_DANMARK_A_S = 22694\nVENDOR_ID_EPCGLOBAL = 22695\nVENDOR_ID_NETADMIN_SYSTEM_I_SVERIGE_AB = 22696\nVENDOR_ID_FIRST_POINT_GLOBAL_PTY_LTD = 22697\nVENDOR_ID_MATCH_LAB_INC = 22698\nVENDOR_ID_MT_BANK_CORPORATION = 22699\nVENDOR_ID_LUIS_COLORADO_SISTEMAS_SL = 22700\nVENDOR_ID_HOSPICES_CHUV = 22701\nVENDOR_ID_SC_STONET_COMPUTERS_SRL = 22702\nVENDOR_ID_ASK_ITS_DONE_LTD = 22703\nVENDOR_ID_UNIVERSITY_OF_KANSAS_MEDICAL_CENTER = 22704\nVENDOR_ID_DIGICAST_INC = 22705\nVENDOR_ID_DIGITAL_FORECAST_CORPORATION = 22706\nVENDOR_ID_COMTECHSERVICE = 22707\nVENDOR_ID_ESYS_INFORMATIONSSYSTEME_GMBH = 22708\nVENDOR_ID_APPISTRY = 22709\nVENDOR_ID_LIPMAN_ELEKTRONIK_VE_DANISMANLIK_LTDSTI = 22710\nVENDOR_ID_SGS_SOCIETE_GENERALE_DE_SURVEILLANCE_SA = 22711\nVENDOR_ID_WIELKOPOLSKI_ODDZIAL_WOJEWODZKI_NFZ_W_POZNANIU = 22712\nVENDOR_ID_UNIVERSIT_DEGLI_STUDI_DI_CASSINO = 22713\nVENDOR_ID_MOBILARIS_AB = 22714\nVENDOR_ID_CENTERPOINT_CONNECTIVE_SOFTWARE_ENGINEERING_GMBH = 22715\nVENDOR_ID_MODERN_WORLD_INTERNET_LTD = 22716\nVENDOR_ID_VRT = 22717\nVENDOR_ID_CENTRE_RESEAU_COMMUNICATION = 22718\nVENDOR_ID_PINELLAS_COUNTY_GOVERNMENT_IT = 22719\nVENDOR_ID_METREOS_CORPORATION = 22720\nVENDOR_ID_SIM_INTERNATIONAL_INC = 22721\nVENDOR_ID_KWPARK_HARDWARE = 22722\nVENDOR_ID_CYJAYA_KOREA = 22723\nVENDOR_ID_STORE_ALCALA = 22724\nVENDOR_ID_MARKO_DURKOVIC = 22725\nVENDOR_ID_INFINILOGIC_PRIVATE_LIMITED = 22726\nVENDOR_ID_ZZ_SERVICES = 22727\nVENDOR_ID_V_OFFICE = 22728\nVENDOR_ID_UNLEASH_COMPUTERS_LTD = 22729\nVENDOR_ID_TURNTIDE_INCORPORATED = 22730\nVENDOR_ID_DATA_AIREINC = 22731\nVENDOR_ID_BROCK_UNIVERSITY = 22732\nVENDOR_ID_NORBELLE_LLC = 22733\nVENDOR_ID_SYNETICS_GMBH = 22734\nVENDOR_ID_GSC_MOBILE_SOLUTIONS = 22735\nVENDOR_ID_DIGIUM = 22736\nVENDOR_ID_SMARTONE_MOBILE_COMMUNICATIONS_LIMITED = 22737\nVENDOR_ID_WINETWORKS = 22738\nVENDOR_ID_NETWORK_TECHNOLOGY_RESEARCH_GROUP = 22739\nVENDOR_ID_SP_COMPUTERSYSTEME_GMBH = 22740\nVENDOR_ID_N_DIMENSION_SOLUTIONS_INC = 22741\nVENDOR_ID_ACBEL_POLYTECH_INC = 22742\nVENDOR_ID_LINZ_AG = 22743\nVENDOR_ID_PURPLE_LABS_SA = 22744\nVENDOR_ID_MATHAN_PRAHA_SRO = 22745\nVENDOR_ID_PRIORITY_ELECTRONICS_LTD = 22746\nVENDOR_ID_TRAVELPACK = 22747\nVENDOR_ID_DADE_BEHRING = 22748\nVENDOR_ID_CELEBRITY_RESORTS_INC = 22749\nVENDOR_ID_TEEN_LIVING_PROGRAMS_INC = 22750\nVENDOR_ID_HEALTHLINEIS = 22751\nVENDOR_ID_PATCHLINK_CORPORATION = 22752\nVENDOR_ID_CONVERGENT_MEDIA_NETWORK_LTD = 22753\nVENDOR_ID_CYNTRUM_WEB_TECHNOLOGIES_INC = 22754\nVENDOR_ID_TERMA_SOFTWARE_LABS_LLC = 22755\nVENDOR_ID_REVOLUTION_LINUX_INC = 22756\nVENDOR_ID_AZONIC_TECHNOLOGY_LTD = 22757\nVENDOR_ID_ZRNRU = 22758\nVENDOR_ID_PROMAX_ELECTRONICASA = 22759\nVENDOR_ID_SPHERA_CORPORATION_LTD = 22760\nVENDOR_ID_NAVI_SP_Z_OO = 22761\nVENDOR_ID_GROUPE_ATLANTIC = 22762\nVENDOR_ID_ARTIS_GROUP_GMBH = 22763\nVENDOR_ID_SPIDCOM_TECHNOLOGIES_SA = 22764\nVENDOR_ID_AUGUR_SYSTEMS_INC = 22765\nVENDOR_ID_HOATECH_TECHNOLOGIES_CO_LTD = 22766\nVENDOR_ID_TTC_INFOAGE_INC = 22767\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_CRETE = 22768\nVENDOR_ID_MURAT_VEREIN_ZUR_FOERDERUNG_VON_NETZWERKKUNST = 22769\nVENDOR_ID_MEDIASPUTNIK_LTD = 22770\nVENDOR_ID_BLUEFINGER_LTD = 22771\nVENDOR_ID_OESTERREICHISCHE_NATIONALBANK = 22772\nVENDOR_ID_JOHN_FAN = 22773\nVENDOR_ID_ENSUREN_CORPORATION = 22774\nVENDOR_ID_CENTROMERIC_INC = 22775\nVENDOR_ID_COVANCE_CARDIAC_SAFETY_SERVICES = 22776\nVENDOR_ID_VENTURA24_SL = 22777\nVENDOR_ID_RECLUSIVE_HERMIT = 22778\nVENDOR_ID_CAREFIRST_BLUECROSS_BLUESHIELD = 22779\nVENDOR_ID_POWERLINE_TECHNOLOGIES_LTD = 22780\nVENDOR_ID_WENZHOU_TELECOM = 22781\nVENDOR_ID_BRIDGETTE_INC = 22782\nVENDOR_ID_RAUSCHER_NETWORX = 22783\nVENDOR_ID_PIMPORGZA = 22784\nVENDOR_ID_ICTEAM_AG = 22785\nVENDOR_ID_LATTELEKOM = 22786\nVENDOR_ID_INTERNETBUREAU_WEBSIGHT = 22787\nVENDOR_ID_PSIND_LLC = 22788\nVENDOR_ID_MARTYHILLNET = 22789\nVENDOR_ID_SKM_INFORMATIK_GMBH = 22790\nVENDOR_ID_CHINA_COUNCIL_FOR_THE_PROMOTION_OF_INTERNATIONAL_TRADE_CCPIT = 22791\nVENDOR_ID_VOICE_TECHNOLOGY_IND_AND_COM_LTD = 22792\nVENDOR_ID_STRATUM_COMMUNICATIONS_PTY_LTD = 22793\nVENDOR_ID_PAGAROS_PTY_LIMITED = 22794\nVENDOR_ID_MISSISSIPPI_VALLEY_STATE_UNIVERSITY = 22795\nVENDOR_ID_LOGSYS_INC = 22796\nVENDOR_ID_OPENCONCEPT_GMBH = 22797\nVENDOR_ID_UNIVERSITY_OF_CRETE = 22798\nVENDOR_ID_ENDO7_GMBH_SRL = 22799\nVENDOR_ID_FLEXDSL_TELECOMMUNICATIONS_AG = 22800\nVENDOR_ID_AMEDIA_NETWORKS_INC = 22801\nVENDOR_ID_TELABRIA_LTD = 22802\nVENDOR_ID_PSYCHOSYS_SOFTWARE_LIMITED = 22803\nVENDOR_ID_TRIVIUM_TECHNOLOGIES_LTD = 22804\nVENDOR_ID_UTEX_COMMUNICATIONS = 22805\nVENDOR_ID_SCIENTICA_LIFE_SCIENCES_PVT_LTD = 22806\nVENDOR_ID_ANDREAS_JULIUS = 22807\nVENDOR_ID_OESTERREICHISCHE_AERZTEKAMMER = 22808\nVENDOR_ID_VLI_COMMUNICATIONS_COLTD = 22809\nVENDOR_ID_AKTIA_SAVINGS_BANK_PLC = 22810\nVENDOR_ID_PFEIFFER_MAY_GROSSHANDEL_AG = 22811\nVENDOR_ID_ALLSCRIPTS_LLC = 22812\nVENDOR_ID_PEST_CONTROL_DATA_SYSTEMS_INC = 22813\nVENDOR_ID_RADIOWAVE_LIMTED = 22814\nVENDOR_ID_AXEDA_SYSTEMS_INC = 22815\nVENDOR_ID_RACKABLE_SYSTEMS_INC = 22816\nVENDOR_ID_BAE_SYSTEMS_AUSTRALIA = 22817\nVENDOR_ID_NAKED_DWARF = 22818\nVENDOR_ID_CHAS_PHILLY_STEAKS_AND_STIX = 22819\nVENDOR_ID_DATS_CO_LTD = 22820\nVENDOR_ID_SAAB_AB = 22821\nVENDOR_ID_MOBICOMP_COMPUTAO_MVEL_SA = 22822\nVENDOR_ID_CRODO_TECHNOLOGIES_PTE_LTD = 22823\nVENDOR_ID_VERBRUGGE_TERMINALS_BV = 22824\nVENDOR_ID_ANDROSOFT_GMBH = 22825\nVENDOR_ID_DFDS_A_S = 22826\nVENDOR_ID_CERTAGON_CORPORATION = 22827\nVENDOR_ID_EMACOLET_NETWORKING_SERVICES = 22828\nVENDOR_ID_CORE_MOBILITY_INC = 22829\nVENDOR_ID_NUMATA_KAZUYA = 22830\nVENDOR_ID_WARPERA_CORPORATION = 22831\nVENDOR_ID_POSDATA_CO_LTD = 22832\nVENDOR_ID_TMN_TECHNOLOGIES_TELECOMUNICAES_LTDA = 22833\nVENDOR_ID_REDFISH_GROUP_PTY_LTD = 22834\nVENDOR_ID_FIRETIDE_INC = 22835\nVENDOR_ID_TERCINA_INC = 22836\nVENDOR_ID_ROGERS_POLICE_DEPARTMENT = 22837\nVENDOR_ID_A1_ENTERPRISE_INC = 22838\nVENDOR_ID_ZQINTERACTIVE = 22839\nVENDOR_ID_PBK2_GMBH_CO_KG = 22840\nVENDOR_ID_EXTERNAL_BUSINESS_INFORMATION_SERVICES_GMBH = 22841\nVENDOR_ID_SCIENTIFIC_GAMES_INTERNATIONAL_GMBH = 22842\nVENDOR_ID_ANWB_BV = 22843\nVENDOR_ID_SCHEEDE = 22844\nVENDOR_ID_INTELSIGHT = 22845\nVENDOR_ID_YR20_GROUP_INC = 22846\nVENDOR_ID_VINDALOO_COMMUNICATIONS = 22847\nVENDOR_ID_IDIALIVRE = 22848\nVENDOR_ID_TF_COMPUTER_UND_NETWORKSYSTEMS_GMBH = 22849\nVENDOR_ID_MSB = 22850\nVENDOR_ID_CHILDRENS_MEMORIAL_HOSPITAL = 22851\nVENDOR_ID_ENEM_BV = 22852\nVENDOR_ID_GUANGZHOU_NET_CONTROL_TECH_LTD = 22853\nVENDOR_ID_WOJEWDZKI_ORODEK_INFORMATYKI_PRZY_WARMINSKO_MAZURSKIM = 22854\nVENDOR_ID_MULTISUNS_CORP = 22855\nVENDOR_ID_HISTOR_TECHNOLOGIES = 22856\nVENDOR_ID_REFLEX_SECURITY_INC = 22857\nVENDOR_ID_FINANCIALCOM_AG = 22858\nVENDOR_ID_TECHAYA_INC = 22859\nVENDOR_ID_THE_LDAP_COMPANY = 22860\nVENDOR_ID_MDOUK = 22861\nVENDOR_ID_WINVISION = 22862\nVENDOR_ID_SOFTWAREHAUS_HARTTER = 22863\nVENDOR_ID_ALPHACH_AG = 22864\nVENDOR_ID_UNIVERSITY_OF_BASEL = 22865\nVENDOR_ID_VATTENFALL_AB = 22866\nVENDOR_ID_G_INTERNATIONAL_LTD = 22867\nVENDOR_ID_VENTANA_MEDICAL_SYSTEMS_INC = 22868\nVENDOR_ID_DEUTSCHE_GESELLSCHAFT_FR_TECHNISCHE_ZUSAMMENARBEIT_GTZ_GMBH = 22869\nVENDOR_ID_INTER_GOVERNMENTAL_CONSULTATIONS_ON_ASYLUM_REFUGEE_AND_MIGRATION_POLICIES = 22870\nVENDOR_ID_AUTOCOM_A_S = 22871\nVENDOR_ID_REINHARD_MOOSAUER_IT_BERATUNG = 22872\nVENDOR_ID_INDIAN_INSTITUTE_OF_INFORMATION_TECHNOLOGY = 22873\nVENDOR_ID_SYNTERMED_INC = 22874\nVENDOR_ID_FUSION_LABORATORIES_INC = 22875\nVENDOR_ID_BLUECOWS_TECHNICAL_SERVICES = 22876\nVENDOR_ID_NORTHERN_ARKANSAS_TELEPHONE_COMPANY_INC = 22877\nVENDOR_ID_ALLEN_CORPORATION_OF_AMERICA = 22878\nVENDOR_ID_AFFINE_DB_LTD = 22879\nVENDOR_ID_SONICDUO_OSP_DEP = 22880\nVENDOR_ID_MAN_INVESTMENTS_LTD = 22881\nVENDOR_ID_CJSC_UKRAINIAN_MOBILE_COMMUNICATIONS = 22882\nVENDOR_ID_OPENLIMIT_SIGNCUBES_GMBH = 22883\nVENDOR_ID_WESTERN_GAS_RESOURCES_INC = 22884\nVENDOR_ID_GIP_CPAGE = 22885\nVENDOR_ID_ASTRO_STROBEL_KOMMUNIKATIONSSYSTEME_GMBH = 22886\nVENDOR_ID_PC_WARE_INFORMATION_TECHNOLOGIES_AG = 22887\nVENDOR_ID_INTERFACE_BUSINESS_GMBH = 22888\nVENDOR_ID_ZENPRISE_INC = 22889\nVENDOR_ID_DEPARTMENT_OF_APPLIED_MATHEMATICS_UDINI = 22890\nVENDOR_ID_FUTURE_CONNECT_PVT_LTD = 22891\nVENDOR_ID_JAN_B_TELEPSKI_TRADING = 22892\nVENDOR_ID_ING_PETR_SETKA = 22893\nVENDOR_ID_UNIPOWER_CORPORATION = 22894\nVENDOR_ID_RF_TECHNOLOGIES_INC = 22895\nVENDOR_ID_GOVERN_DE_LES_ILLES_BALEARS = 22896\nVENDOR_ID_EPRCI = 22897\nVENDOR_ID_SERICON_TECHNOLOGY_INC = 22898\nVENDOR_ID_ETHERSTUFF = 22899\nVENDOR_ID_STATEWIDE_SOFTWARE_SYSTEMS = 22900\nVENDOR_ID_PACKET411_CORPORATION = 22901\nVENDOR_ID_DISCOVERY_COMMUNICATIONS_INC = 22902\nVENDOR_ID_PREFERRED_COMMUNICATIONS_INC = 22903\nVENDOR_ID_R_L_POLK_CO = 22904\nVENDOR_ID_OAG_WORLDWIDE_LTD = 22905\nVENDOR_ID_MEDICAL_SOFT_INSTRUMENTS_SLL = 22906\nVENDOR_ID_RIEGE_SOFTWARE_INTERNATIONAL_GMBH = 22907\nVENDOR_ID_MAGNUS_INFORMATIK_A_S = 22908\nVENDOR_ID_T_VIPS_AS = 22909\nVENDOR_ID_MAESOFT_GROUP = 22910\nVENDOR_ID_EPSILON_SOFTWARE_ASSISTANCE_SA = 22911\nVENDOR_ID_COMRAD_MEDICAL_SYSTEMS_LIMITED = 22912\nVENDOR_ID_TJM_PRODUCTS_PTY_LTD = 22913\nVENDOR_ID_SONIM_TECHNOLOGIES = 22914\nVENDOR_ID_IFX_CORP = 22915\nVENDOR_ID_PYRAMIDE_TECHNOLOGIES_CORP = 22916\nVENDOR_ID_UHS_SYSTEMS_PTY_LTD = 22917\nVENDOR_ID_TEDENIUM_INDSTRIA_ELETROELETRNICA_LTDA = 22918\nVENDOR_ID_HERIT_CORPORATION = 22919\nVENDOR_ID_WINDOWS_CONSULTING_GROUP_INC = 22920\nVENDOR_ID_ATI_TECHNOLOGIES_INCORPORATED = 22921\nVENDOR_ID_POSTLAB = 22922\nVENDOR_ID_MOLL_ILLNER = 22923\nVENDOR_ID_WEGEWERK_GMBH = 22924\nVENDOR_ID_LAB_EL_ELEKTRONIKA_LABORATORYJNA = 22925\nVENDOR_ID_HEINRIG_IMPEX_SRL = 22926\nVENDOR_ID_AQSACOM_SA = 22927\nVENDOR_ID_SEOKYO_TELECOMMUNICATION_CO_LTD = 22928\nVENDOR_ID_SCHUEMPERLIN_ENGINEERING_AG = 22929\nVENDOR_ID_SPI_DYNAMICS_INC = 22930\nVENDOR_ID_PARLANO_INC = 22931\nVENDOR_ID_NVIA2_MENSAJES_INTERACTIVOS_CA = 22932\nVENDOR_ID_ITAAS_INC = 22933\nVENDOR_ID_RUDOLF_LEINER_GMBH = 22934\nVENDOR_ID_BEIJING_UNIV_OF_AERONAUTICS_ASTRNAUTICS = 22935\nVENDOR_ID_TONBRAND_SOFTWARE = 22936\nVENDOR_ID_MESSAGE_MOBILE_GMBH = 22937\nVENDOR_ID_NOS_TECHNOLOGY_AS = 22938\nVENDOR_ID_WEBINTERSTATE_INC = 22939\nVENDOR_ID_ARROWSPAN_INC = 22940\nVENDOR_ID_PDX_INC = 22941\nVENDOR_ID_O2_MICRO = 22942\nVENDOR_ID_CVC_ONLINE = 22943\nVENDOR_ID_WINUEL_SA = 22944\nVENDOR_ID_KAISERAIR = 22945\nVENDOR_ID_CHORDCOM = 22946\nVENDOR_ID_IT_INFORMATIK = 22947\nVENDOR_ID_INSERTO = 22948\nVENDOR_ID_EMAP_PLC = 22949\nVENDOR_ID_OEG_AUSTRALIA = 22950\nVENDOR_ID_LUCID_SECURITY_CORPORATION = 22951\nVENDOR_ID_ON2_TECHNOLOGIES = 22952\nVENDOR_ID_EOSLINK_CO_LTD = 22953\nVENDOR_ID_UNIVERSAL_MICROELECTRONICS_CO_LTD = 22954\nVENDOR_ID_AZENT_AB = 22955\nVENDOR_ID_NEWS_INTERNATIONAL_SUPPLY_COMPANY_LTD = 22956\nVENDOR_ID_ZEN_SISTEMI_SRL = 22957\nVENDOR_ID_WESTON_DIGITAL_TECHNOLOGIES_LTD = 22958\nVENDOR_ID_TONY_CHACHERES_CREOLE_FOODS_OF_OPELOUSAS_INC = 22959\nVENDOR_ID_SOZOTEK_INC = 22960\nVENDOR_ID_SK_TELESYS = 22961\nVENDOR_ID_MATRIXMX = 22962\nVENDOR_ID_VALE_TECHNOLOGY_LTD = 22963\nVENDOR_ID_ACCERIS_COMMUNICATIONS = 22964\nVENDOR_ID_SUNDANCE_DIGITAL_INC = 22965\nVENDOR_ID_COSA_GMBH = 22966\nVENDOR_ID_ZR_INFOTECH = 22967\nVENDOR_ID_COMBRIO_INC = 22968\nVENDOR_ID_HBEDV_DATENTECHNIK_GMBH = 22969\nVENDOR_ID_DENTAL_ON_LINE_SARL = 22970\nVENDOR_ID_AP_MOLLER_MAERSK_A_S = 22971\nVENDOR_ID_WILIBOX = 22972\nVENDOR_ID_GREENFIELD_NETWORKS_INC = 22973\nVENDOR_ID_ELGI_EQUIPMENTS_LTD = 22974\nVENDOR_ID_THE_NGIM_PROJECT = 22975\nVENDOR_ID_AIRINFINITE_INC = 22976\nVENDOR_ID_MEDIMPACT_HEALTHCARE_SYSTEMS = 22977\nVENDOR_ID_GRIDCONNECT_INC = 22978\nVENDOR_ID_BRIDGESTREAM_INC = 22979\nVENDOR_ID_CONFIO_SOFTWARE = 22980\nVENDOR_ID_BPB_PLC = 22981\nVENDOR_ID_TECTONA_SOFTSOLUTIONS_PVT_LTD = 22982\nVENDOR_ID_SSTIC = 22983\nVENDOR_ID_ALSTEC_LTD = 22984\nVENDOR_ID_DERDACK_GMBH = 22985\nVENDOR_ID_EUROFIGHTER_JAGDFLUGZEUG_GMBH = 22986\nVENDOR_ID_EVONET_BELGIUM_NV = 22987\nVENDOR_ID_UNIVERSITY_OF_KENTUCKY = 22988\nVENDOR_ID_ESSEX_PROPERTY_TRUST_INC = 22989\nVENDOR_ID_BALTIMORE_COUNTY_SAVINGS_BANK_FSB = 22990\nVENDOR_ID_NETALFA_LTD = 22991\nVENDOR_ID_WIT_INC = 22992\nVENDOR_ID_BELARC_INC = 22993\nVENDOR_ID_SILICONWORKS_CORPORATION = 22994\nVENDOR_ID_AXLEYNET = 22995\nVENDOR_ID_CITY_OF_PEABODY = 22996\nVENDOR_ID_AB_INITIO_SOFTWARE_CORPORATION = 22997\nVENDOR_ID_ALLSTREAM_INC = 22998\nVENDOR_ID_FURUNO_SYSTEMS_COLTD = 22999\nVENDOR_ID_NEXIS_SRL = 23000\nVENDOR_ID_CORPORACIN_SUPERMERCADOS_UNIDOS_SA = 23001\nVENDOR_ID_CONSENTRY_NETWORKS = 23002\nVENDOR_ID_HYPERWERK_FHBB = 23003\nVENDOR_ID_CC_SOLUTION_TECHNOLOGY = 23004\nVENDOR_ID_FLUIDSIGNAL_GROUP_SA = 23005\nVENDOR_ID_E_MONT_DOO = 23006\nVENDOR_ID_IMATIC = 23007\nVENDOR_ID_WEBPAWSCOM = 23008\nVENDOR_ID_ASAMNET_E_V = 23009\nVENDOR_ID_MAXIMA_COMMUNICATIONS = 23010\nVENDOR_ID_OCLC_PICA = 23011\nVENDOR_ID_NETPROVIDER_SA = 23012\nVENDOR_ID_SALEM_KEIZER_PUBLIC_SCHOOLS = 23013\nVENDOR_ID_GENIE_UK = 23014\nVENDOR_ID_NEWBAY_SOFTWARE_LTD = 23015\nVENDOR_ID_METAPHOR_STUDIO_LLC = 23016\nVENDOR_ID_IDEAL_TECHNOLOGIES_INC = 23017\nVENDOR_ID_MATRIX_NETWORKS_CHINA = 23018\nVENDOR_ID_PENTACOMP_SYSTEMY_INFORMATYCZNE_SP_Z_OO = 23019\nVENDOR_ID_FGAN_FKIE_KOM = 23020\nVENDOR_ID_ACSTRE_SUPPORT_LTD = 23021\nVENDOR_ID_NET_OPTICS_INC = 23022\nVENDOR_ID_THX_LTD = 23023\nVENDOR_ID_PT_DINAMIKA_MANDIRI = 23024\nVENDOR_ID_MESSSOFT = 23025\nVENDOR_ID_SUEDLEASING_GMBH = 23026\nVENDOR_ID_AREA_ELECTRONIC_SYSTEM = 23027\nVENDOR_ID_SUNRISE_TECHNOLOGY_CO_LTD = 23028\nVENDOR_ID_SQI_INC = 23029\nVENDOR_ID_SHING = 23030\nVENDOR_ID_NSP_LTD = 23031\nVENDOR_ID_MAILFRONTIER_INC = 23032\nVENDOR_ID_LEIVIO_TECHNOLOGIES_INC = 23033\nVENDOR_ID_SETIB = 23034\nVENDOR_ID_LABWARE_SA = 23035\nVENDOR_ID_ISOMORPHIC_SYSTEM_RESEARCH_INC = 23036\nVENDOR_ID_CMT_SYSTEMS_INC = 23037\nVENDOR_ID_EMPHASYS_SOFTWARE = 23038\nVENDOR_ID_AMBIENT_CORPORATION = 23039\nVENDOR_ID_EXOBIT_NETWORKS_INC = 23040\nVENDOR_ID_CQ_INC = 23041\nVENDOR_ID_THE_REAL_ESTATE_COMPANY_INC = 23042\nVENDOR_ID_CASTIS_CORP = 23043\nVENDOR_ID_SMALLBIZCONCEPTS_BV = 23044\nVENDOR_ID_CASSEENET = 23045\nVENDOR_ID_MTD_SYSTEMS = 23046\nVENDOR_ID_XINKE_CHINA_INFORMATION_SYSTEM_LTD = 23047\nVENDOR_ID_SABIK_OY = 23048\nVENDOR_ID_EMSYS_NV = 23049\nVENDOR_ID_JSC_DEPARTMENT_OF_SYSTEM_RESEARCH = 23050\nVENDOR_ID_SC_TESIS_LOGIC_SRL = 23051\nVENDOR_ID_APPI_TECNOLOGIA_SA = 23052\nVENDOR_ID_DOSHED_CORP = 23053\nVENDOR_ID_CYRIS_NETWORKS = 23054\nVENDOR_ID_H_ZERO_SEVEN = 23055\nVENDOR_ID_RIEDEL_COMMUNICATIONS_GMBH = 23056\nVENDOR_ID_ISD_HOLLAND_BV = 23057\nVENDOR_ID_EXPERTRON_GROUP_PTY_LTD = 23058\nVENDOR_ID_NETFUEL_INC = 23059\nVENDOR_ID_CODEBENCH_INC = 23060\nVENDOR_ID_VIRTUALBRIDGES_COMMUNICATIONS_CORP = 23061\nVENDOR_ID_HUIZE_WELNL = 23062\nVENDOR_ID_DOMINION_LASERCOM_INC = 23063\nVENDOR_ID_KRONBACK_APS = 23064\nVENDOR_ID_TWINCLING_SOCIETY = 23065\nVENDOR_ID_TELMAP_LTD = 23066\nVENDOR_ID_NANOMATIC_LTD = 23067\nVENDOR_ID_ANGELGROUP = 23068\nVENDOR_ID_SODEXHO = 23069\nVENDOR_ID_HUBRIS_COMMUNICATIONS_INC = 23070\nVENDOR_ID_CONFORMIQ_SOFTWARE_LTD = 23071\nVENDOR_ID_AUSTRALIAN_INTERNET_COMPANY_PTY_LTD = 23072\nVENDOR_ID_WIMETRICS_CORPORATION = 23073\nVENDOR_ID_SECURITY_CONSCIOUS_INC = 23074\nVENDOR_ID_NOVATEL_WIRELESS_INC = 23075\nVENDOR_ID_SP = 23076\nVENDOR_ID_KEPPLER_IT_GMBH = 23077\nVENDOR_ID_ADMINISTRATION_DES_DOUANES_ET_IMPTS_INDIRECTS = 23078\nVENDOR_ID_KILES_CONSULTING = 23079\nVENDOR_ID_NEW_YORK_STATE_DIRECTORY_SERVICES = 23080\nVENDOR_ID_OPUS_ONE_INC = 23081\nVENDOR_ID_RIEDELL_MOTORSPORTS = 23082\nVENDOR_ID_UNIVERSITY_OF_BRIDGEPORT = 23083\nVENDOR_ID_SCT_CONSULTING = 23084\nVENDOR_ID_QQ_TECHNOLOGY_INC = 23085\nVENDOR_ID_MAJOR_MINOR_EXIMS_PVT_LTD = 23086\nVENDOR_ID_ROSS_SAMPSON_CONSULTING = 23087\nVENDOR_ID_APPLIED_WATCH_TECHNOLOGIES_LLC = 23088\nVENDOR_ID_NANJING_GENTECH_SYSTEM_CO_LTD = 23089\nVENDOR_ID_NCFRITZNET = 23090\nVENDOR_ID_NILSON_GROUP_AB = 23091\nVENDOR_ID_GAZTEC_SERVICES = 23092\nVENDOR_ID_ANAGRAN = 23093\nVENDOR_ID_KUEHNE_NAGEL_AGCO_KG = 23094\nVENDOR_ID_CLARIONET_SRO = 23095\nVENDOR_ID_JMINETCOM = 23096\nVENDOR_ID_MUNICIPALIDAD_DE_ROSARIO = 23097\nVENDOR_ID_SERVICEPILOT_TECHNOLOGIES = 23098\nVENDOR_ID_NETAMS = 23099\nVENDOR_ID_HT_GREENLINE_GMBH = 23100\nVENDOR_ID_UNIVERSITY_HYGIENIC_LABORATORY = 23101\nVENDOR_ID_SAN_MATEO_COUNTY_PUBLIC_SAFETY_COMMUNICATIONS = 23102\nVENDOR_ID_SRP = 23103\nVENDOR_ID_RAVEN_SYSTEMS_DESIGN_INC = 23104\nVENDOR_ID_ACTION_SYSTEMS_INC = 23105\nVENDOR_ID_REDPHONE_SECURITY_INC = 23106\nVENDOR_ID_WOMENS_CENTER_FOR_RADIOLOGY = 23107\nVENDOR_ID_RP_ONLINE_VERLAGSGESELLSCHAFT_MBH = 23108\nVENDOR_ID_NETLINE_INTERNET_SERVICE_GMBH = 23109\nVENDOR_ID_UNYICO_MIEE = 23110\nVENDOR_ID_SPUN_PTY_LTD = 23111\nVENDOR_ID_UNIVERSITY_OF_TURKU = 23112\nVENDOR_ID_LXPT = 23113\nVENDOR_ID_COMSTAR_LTD = 23114\nVENDOR_ID_OBSERVATOIRE_MIDI_PYRENEES = 23115\nVENDOR_ID_IVOD_INC = 23116\nVENDOR_ID_NEW_ZEALAND_MINISTRY_OF_HEALTH = 23117\nVENDOR_ID_TELENET_SYSTEMS_PVT_LTD = 23118\nVENDOR_ID_SHEVCHENKO_DIDKOVSKIY_PARTNERS = 23119\nVENDOR_ID_BFE_STUDIO_AND_MEDIA_SYSTEMS_GMBH = 23120\nVENDOR_ID_SAINT_PETERSBURG_CERTIFICATION_AUTHORITY = 23121\nVENDOR_ID_SWISSCOM_LTD_FORMELY_BLUEWIN_AG = 23122\nVENDOR_ID_GEDAS_DEUTSCHLAND_GMBH = 23123\nVENDOR_ID_DICKEY_RURAL_TELEPHONE_COOPERATIVE = 23124\nVENDOR_ID_SPRING_LAKE_CONSULTING_LLC = 23125\nVENDOR_ID_BANETELE_AS = 23126\nVENDOR_ID_GINA_COMPUTING_GMBH = 23127\nVENDOR_ID_NITROSECURITY_INC = 23128\nVENDOR_ID_MACROVISION_CORPORATION = 23129\nVENDOR_ID_CPN_INTERNATIONAL_INC = 23130\nVENDOR_ID_MITHI_SOFTWARE_TECHNOLOGIES_PRIVATE_LIMITED = 23131\nVENDOR_ID_CANADIAN_NET = 23132\nVENDOR_ID_IZHINFORMPROJECT = 23133\nVENDOR_ID_SKILLSUNITEDCOUK_HTTP_SKILLSUNITEDCOUK = 23134\nVENDOR_ID_ARTICON_INTEGRALIS_AG = 23135\nVENDOR_ID_WARWEUS_SRL = 23136\nVENDOR_ID_ALTINITY_LIMITED = 23137\nVENDOR_ID_REUTLINGEN_UNIVERSITY = 23138\nVENDOR_ID_SOFTWARE_EGINERRING_ASSOCIATED_CONSULTANTS_INC = 23139\nVENDOR_ID_CYBERNETIKNET = 23140\nVENDOR_ID_HOCHIKI_COLTD = 23141\nVENDOR_ID_AKADEMIA_SWIETOKRZYSKA = 23142\nVENDOR_ID_PETERSON_PACKAGING_OY = 23143\nVENDOR_ID_DEFENXIS_SDN_BHD = 23144\nVENDOR_ID_EXTENDMEDIA_INC = 23145\nVENDOR_ID_HOYA = 23146\nVENDOR_ID_VIMESA_VIDEO_MEDIOS_SA = 23147\nVENDOR_ID_DR_PETER_KOCH_EDV_DIENSTLEISTUNGEN = 23148\nVENDOR_ID_TYPODATA = 23149\nVENDOR_ID_MOCOTEC_MOBILE_COMMUNICATION_TECHNOLOGIES = 23150\nVENDOR_ID_SEETEC_COMMUNICATIONS_GMBH_CO_KG = 23151\nVENDOR_ID_HVB_LEASING_GMBH = 23152\nVENDOR_ID_CLOANTO_CORPORATION = 23153\nVENDOR_ID_AIT_AUSTRIAN_INSTITUTE_OF_TECHNOLOGY_GMBH = 23154\nVENDOR_ID_SOFTWISE_DEVELOPMENT = 23155\nVENDOR_ID_VITEC_GROUP_COMMUNICATIONS_LIMITED = 23156\nVENDOR_ID_THEOBIT_GMBH = 23157\nVENDOR_ID_CCIS_SPRL = 23158\nVENDOR_ID_EVENTIS_SOFTWARE_SOLUTIONS_BV = 23159\nVENDOR_ID_GENEOUS_SOFTWARE_AG = 23160\nVENDOR_ID_ARAN_TECHNOLOGIES = 23161\nVENDOR_ID_ECOLE_SUPRIEURE_DINFORMATIQUE = 23162\nVENDOR_ID_DEFENSOR_DEL_PUEBLO = 23163\nVENDOR_ID_REVIEWORLD_LTD = 23164\nVENDOR_ID_SAFE_BIOPHARMA_ASSOCIATION = 23165\nVENDOR_ID_AUTOMATYKA = 23166\nVENDOR_ID_OPERATION_MOBILISATION = 23167\nVENDOR_ID_ORCHARD_VIEW_COMMUNITY_NETWORK = 23168\nVENDOR_ID_SIGMA_SYSTEMS_CANADA_INC = 23169\nVENDOR_ID_VERIZON_CARD_OPERATIONS = 23170\nVENDOR_ID_SERVERGRAPH = 23171\nVENDOR_ID_TELETRONICS_TECHNOLOGY_CORP = 23172\nVENDOR_ID_SUBZERONET = 23173\nVENDOR_ID_WILDBLUE_COMMUNICATIONS_INC = 23174\nVENDOR_ID_WORKCOMPCENTRALCOM_INC = 23175\nVENDOR_ID_SPEEDPARTNER_GMBH = 23176\nVENDOR_ID_CIROND_CORPORATION = 23177\nVENDOR_ID_HELIX_LTD = 23178\nVENDOR_ID_BILFROST_INCORPORATED_INC = 23179\nVENDOR_ID_TELEVES_SA = 23180\nVENDOR_ID_WEED_INSTRUMENT_COMPANY_INC = 23181\nVENDOR_ID_SUSSMAN_AUTOMOTIVE = 23182\nVENDOR_ID_AMNIS_LIMITED_COMPANY = 23183\nVENDOR_ID_APPLIED_MICROSYSTEMS_INC = 23184\nVENDOR_ID_ISENSIX_INC = 23185\nVENDOR_ID_4A_SOLUTIONS_LTD = 23186\nVENDOR_ID_RENE_THOMAS_FOLSE_INC = 23187\nVENDOR_ID_MAXI_NET_SERVICES = 23188\nVENDOR_ID_NETPLEX_LLC = 23189\nVENDOR_ID_INTERLAND_INC_2 = 23190\nVENDOR_ID_NVIA_GESTION_DE_DATOS_SL = 23191\nVENDOR_ID_NORLIGHT_TELECOMMUNICATIONS = 23192\nVENDOR_ID_M_VISION = 23193\nVENDOR_ID_NORTHWEST_UNIVERSITY = 23194\nVENDOR_ID_AFAR_COMMUNICATIONS_INC = 23195\nVENDOR_ID_DEVETEL_SA = 23196\nVENDOR_ID_HAN_INFOCOMM = 23197\nVENDOR_ID_ONE_COW_STANDING = 23198\nVENDOR_ID_MCGV_STACK = 23199\nVENDOR_ID_NETFOCUS_TECHNOLOGIES_INC = 23200\nVENDOR_ID_ACI_COMMUNICATIONS_INC = 23201\nVENDOR_ID_ZINFOUS = 23202\nVENDOR_ID_TASMANSTUDIOS_LTD = 23203\nVENDOR_ID_STRATACACHE_INC = 23204\nVENDOR_ID_ALCORMIZAR_INC = 23205\nVENDOR_ID_CLINICAL_DATAFAX_SYSTEMS_INC = 23206\nVENDOR_ID_BIA_BV = 23207\nVENDOR_ID_RHODANIE_SYSTEMES_ET_RESEAUX_SARL = 23208\nVENDOR_ID_UNION_COMPAGNONNIQUE = 23209\nVENDOR_ID_PYRAMID_ROBOTICS = 23210\nVENDOR_ID_QUEUE_GLOBAL_INFORMATION_SYSTEMS_CORP = 23211\nVENDOR_ID_CUTTRISS_CONSULTING = 23212\nVENDOR_ID_WILICO_WIRELESS_NETWORKING_SOLUTIONS_SA = 23213\nVENDOR_ID_J2ANYWHERECOM = 23214\nVENDOR_ID_NETENSIA = 23215\nVENDOR_ID_BAWUENET_EV = 23216\nVENDOR_ID_CHAMBRE_DE_COMMERCE_ET_DINDUSTRIE_DE_BREST = 23217\nVENDOR_ID_BETANETWORKS_LTDSHANGHAI_CHINA = 23218\nVENDOR_ID_DRIVETIME_AUTOMOTIVE_GROUP_INC = 23219\nVENDOR_ID_ICO_LTD = 23220\nVENDOR_ID_ROCSYS_TECHNOLOGIES_PVTLTD = 23221\nVENDOR_ID_ESI_SOFTWARE = 23222\nVENDOR_ID_STARTCOM_LTD = 23223\nVENDOR_ID_SUTTON_GROUP_REALTY_SERVICES_LTD = 23224\nVENDOR_ID_MAXITEL_S_A = 23225\nVENDOR_ID_DOLPHIN_SOFTWARE = 23226\nVENDOR_ID_KAYAK_INTERACTIVE = 23227\nVENDOR_ID_CITY_OF_LAS_VEGAS_NEVADA = 23228\nVENDOR_ID_ONEK_INTERNET_SOLUTIONS_INC = 23229\nVENDOR_ID_CAPTARA_CORPORATION = 23230\nVENDOR_ID_TEKVIZION_PVS_INC = 23231\nVENDOR_ID_TRACKABOUT_INC = 23232\nVENDOR_ID_WEBDOEDS = 23233\nVENDOR_ID_HOPS_INTERNATIONAL_INC = 23234\nVENDOR_ID_DTI2 = 23235\nVENDOR_ID_ESCHER_GROUP_LTD = 23236\nVENDOR_ID_SOFTIER_INC = 23237\nVENDOR_ID_FCI_BROADBAND_COMMUNICATIONS_INC = 23238\nVENDOR_ID_AQUEST_SYSTEMS_INCORPORATED = 23239\nVENDOR_ID_THE_CENTERS = 23240\nVENDOR_ID_PROTECTION_AND_GUARD_SERVICE = 23241\nVENDOR_ID_SDRC_INC = 23242\nVENDOR_ID_ALGORAB_SRL = 23243\nVENDOR_ID_IMPROBABLE_UNIVERSE = 23244\nVENDOR_ID_WESTDEUTSCHE_IMMOBILIENBANK = 23245\nVENDOR_ID_HARMONIA_INC = 23246\nVENDOR_ID_WM_DATA_PARERE = 23247\nVENDOR_ID_TRE_CE = 23248\nVENDOR_ID_NATIONAL_CENTER_FOR_BIOTECHNOLOGY_INFORMATION_NCBI = 23249\nVENDOR_ID_FGN_GMBH = 23250\nVENDOR_ID_SERVICIOS_CORPORATIVOS_GEFE_SA_DE_CV = 23251\nVENDOR_ID_MYDOM = 23252\nVENDOR_ID_PREMIER_IMAGE_CORPORATION = 23253\nVENDOR_ID_LEEBEL_SERVICES = 23254\nVENDOR_ID_1D_SOLUTIONS = 23255\nVENDOR_ID_WIT_SYS_CONSULTING_CORPORATION = 23256\nVENDOR_ID_OSISOFT_INC = 23257\nVENDOR_ID_SDO_INFORMATION_TECHNOLOGY_SRL = 23258\nVENDOR_ID_STADT_FRANKFURT_AM_MAIN = 23259\nVENDOR_ID_PARADIAL_AS = 23260\nVENDOR_ID_STRUCTURED_INFORMATION_MANAGEMENT_SIM_PROJECT = 23261\nVENDOR_ID_OBIECT_SOFT_SRL = 23262\nVENDOR_ID_EXCELIANCE = 23263\nVENDOR_ID_UNICON_SOLUTIONS_NV = 23264\nVENDOR_ID_HEDGEHOG_COMPUTER_SERVICES = 23265\nVENDOR_ID_FRANK_LOWE_RUBBER_GASKET_CO_INC = 23266\nVENDOR_ID_CERTICMARA_SA = 23267\nVENDOR_ID_SUNWAYWORLD_INFOMATION_TECHNOLOGY_INC = 23268\nVENDOR_ID_NEONOVA_NETWORK_SERVICES_INC = 23269\nVENDOR_ID_AW_COMP = 23270\nVENDOR_ID_PROTIUM_TECHNOLOGIES_INC = 23271\nVENDOR_ID_RUNCOM_TECHNOLOGIES_LTD = 23272\nVENDOR_ID_ELETECH_SRL = 23273\nVENDOR_ID_MINDSPHERE_AS = 23274\nVENDOR_ID_PRO_HELP = 23275\nVENDOR_ID_COOPERATIVA_DOS_AGRICULTORES_DA_REGIAO_DE_ORLANDIA = 23276\nVENDOR_ID_CLUSTERVISION_BV = 23277\nVENDOR_ID_COMPUTER_ROYALTIES = 23278\nVENDOR_ID_PICIS_INC = 23279\nVENDOR_ID_DIGITALFREAKSORG = 23280\nVENDOR_ID_LIAONING_MOBILE_COMMUNICATIONS_COLTD = 23281\nVENDOR_ID_IBRIGHT = 23282\nVENDOR_ID_I_O_CONCEPTS_INC = 23283\nVENDOR_ID_IDENTIFY_TECHNOLOGY_SOLUTIONS = 23284\nVENDOR_ID_STRATUM_IP = 23285\nVENDOR_ID_GOTTFRIED_HAMM_KOMMUNIKATIONSSYSTEME = 23286\nVENDOR_ID_JOINT_CONCEPTS_DEVELOPMENT = 23287\nVENDOR_ID_HANDS_ON_SECURITY_INC = 23288\nVENDOR_ID_DANDY_CONNECTIONS_INC = 23289\nVENDOR_ID_SHAANXI_NORMAL_UNIVERSITY = 23290\nVENDOR_ID_SIGVALUE_TECHNOLOGIES = 23291\nVENDOR_ID_ATERNITY_INC = 23292\nVENDOR_ID_ZAFIN_LABS = 23293\nVENDOR_ID_GEFOEKOM_EV = 23294\nVENDOR_ID_INGENIUM_NET_SRL = 23295\nVENDOR_ID_YAWARRA_INFORMATION_APPLIANCES_PTY_LTD = 23296\nVENDOR_ID_SCHLITTERMANN_INTERNET_UNIX_SUPPORT = 23297\nVENDOR_ID_WESTLOTTO_GMBH_CO_OHG = 23298\nVENDOR_ID_LRF = 23299\nVENDOR_ID_ABEM_INSTRUMENT_AB = 23300\nVENDOR_ID_DATENVERARBEITUNGSZENTRUM_HALLE_GMBH = 23301\nVENDOR_ID_LINBIT_INFORMATION_TECHNOLOGIES_GMBH = 23302\nVENDOR_ID_DOT_COMMUNICATIONS = 23303\nVENDOR_ID_CODAN_LIMITED = 23304\nVENDOR_ID_WOOJYUN_SYSTEC = 23305\nVENDOR_ID_BEIJING_TECHSTAR_LTD = 23306\nVENDOR_ID_MACHAIRA_ENTERPRISES_PTY_LTD = 23307\nVENDOR_ID_NATIONAL_CENTER_FOR_HIGH_PERFORMANCE_COMPUTING = 23308\nVENDOR_ID_AR_INFOTEK_INC = 23309\nVENDOR_ID_OFIR_A_S = 23310\nVENDOR_ID_MACAB_AB = 23311\nVENDOR_ID_INTELLICOM_INNOVATION_AB = 23312\nVENDOR_ID_TESLA_AS = 23313\nVENDOR_ID_PLANTRON_AB = 23314\nVENDOR_ID_BOLDON_JAMES_LTD = 23315\nVENDOR_ID_NIEDERSAECHISCHE_FORSTLICHE_VERSUCHSANSTALT = 23316\nVENDOR_ID_HEINRICH_BAUER_VERLAG_KG = 23317\nVENDOR_ID_COMUNE_DI_BOLOGNA = 23318\nVENDOR_ID_SIRLAN_TECHNOLOGIES_SAS = 23319\nVENDOR_ID_ORANGE_ROMANIA_SA = 23320\nVENDOR_ID_FRANK_JUEDES_EDV_SERVICE = 23321\nVENDOR_ID_AIRCOM_INTERNATIONAL = 23322\nVENDOR_ID_CABLE_WIRELESS_TELECOMMUNICATION_SERVICES_GMBH = 23323\nVENDOR_ID_SWARCO = 23324\nVENDOR_ID_KOTIO = 23325\nVENDOR_ID_ASSOCIATION_DES_DIPLMS_DES_FORMATIONS_SYSTMES_DE = 23326\nVENDOR_ID_VAD_VIDEO_AUDIO_DESIGN_GMBH = 23327\nVENDOR_ID_QUADRAGINTA_DUODE = 23328\nVENDOR_ID_MCDANIEL_COLLEGE = 23329\nVENDOR_ID_COMMSCOPE_INC_OF_NORTH_CAROLINA = 23330\nVENDOR_ID_JOHNSON_BIBLE_COLLEGE = 23331\nVENDOR_ID_ADCC_INC = 23332\nVENDOR_ID_COMPUTER_RESOURCE_TEAM_INC = 23333\nVENDOR_ID_GORMAN_ELECTRONICSINC = 23334\nVENDOR_ID_HAMPTON_ROADS_MARITIME_ASSOCIATION = 23335\nVENDOR_ID_VELUX_A_S_IT_DEPARTMENT = 23336\nVENDOR_ID_CYBERTRUST = 23337\nVENDOR_ID_OPENS_TECNOLOGIA_E_PROCESSAMENTO_DE_DADOS_LTDA = 23338\nVENDOR_ID_JUNG_ANALOG_UND_DIGITAL_SYSTEMTECHNIK_GMBH = 23339\nVENDOR_ID_KEDAH_ELECTRONICS_ENGINEERING = 23340\nVENDOR_ID_ASTUTEBIZ_INC = 23341\nVENDOR_ID_PATHFINDER_ASSOCIATES_LLC = 23342\nVENDOR_ID_INVENSYS_WONDERWARE = 23343\nVENDOR_ID_AXS_ONE_INC = 23344\nVENDOR_ID_SYSTEM_CONTROL_NETWORKS = 23345\nVENDOR_ID_CITISTREETLLC = 23346\nVENDOR_ID_INFRA_RESOURCE_LLC = 23347\nVENDOR_ID_PC_KNOW_HOW_CENTER_BRACHHOLD_GMBH = 23348\nVENDOR_ID_NTT_GIN = 23349\nVENDOR_ID_VERTASENT_LLC = 23350\nVENDOR_ID_WATERTOWN_PUBLIC_SCHOOLS_WATERTOWN_MA_USA = 23351\nVENDOR_ID_COGNIS_CORPORATION = 23352\nVENDOR_ID_INTELAWARE = 23353\nVENDOR_ID_NISKA_AB = 23354\nVENDOR_ID_GOSH_ENTERPRISES_INC = 23355\nVENDOR_ID_TRYSKEL = 23356\nVENDOR_ID_TWENTYFOURNINE_FORMERLY_OOGYNETWORKS = 23357\nVENDOR_ID_TYPHON_SARL = 23358\nVENDOR_ID_HEXOD = 23359\nVENDOR_ID_PACIFIC_UNION_COLLEGE = 23360\nVENDOR_ID_TECONCEPT_GMBH = 23361\nVENDOR_ID_LEVITON_MFG_CO = 23362\nVENDOR_ID_SUMACH_GB_LTD = 23363\nVENDOR_ID_BRYN_MAWR_COLLEGE = 23364\nVENDOR_ID_WEBSENSE_INC = 23365\nVENDOR_ID_VALUECLICK_INC = 23366\nVENDOR_ID_HOST_EUROPE_GMBH_FORMERLY_M_NETWORKING = 23367\nVENDOR_ID_GHK_WIRELESS = 23368\nVENDOR_ID_SHAWN_CHURCH_INFORMATION_SYSTEMS_CONSULTANT = 23369\nVENDOR_ID_JOEL_DAVIS = 23370\nVENDOR_ID_BESTINFO_CYBER_TECHNOLOGY_COLTD = 23371\nVENDOR_ID_BLOOMBASE_TECHNOLOGIES_LTD = 23372\nVENDOR_ID_NEC_KANSAI_LTD = 23373\nVENDOR_ID_REDTONE_TELECOMMUNICATIONS_SDN_BHD = 23374\nVENDOR_ID_ISLANDWIDE_EXPRESS = 23375\nVENDOR_ID_HYUNDAI_NETWORK_SYSTEM_INC = 23376\nVENDOR_ID_IT_SOLUTION_SERVICES_COLTD = 23377\nVENDOR_ID_TC_TECHNOLOGY = 23378\nVENDOR_ID_HUK_COBURG_VVAG = 23379\nVENDOR_ID_DATADEC_ONLINE_SA = 23380\nVENDOR_ID_DIE_GRUENEN = 23381\nVENDOR_ID_SWISSPHONE_TELECOM_AG = 23382\nVENDOR_ID_AZIENDA_SANITARIA_LOCALE_N4_CHIAVARESE = 23383\nVENDOR_ID_APTUS_ELEKTRONIK_AB = 23384\nVENDOR_ID_GESIS_MBH = 23385\nVENDOR_ID_POLE_UNIVERSITAIRE_LEONARD_DE_VINCI = 23386\nVENDOR_ID_IXTS_SOFTWARE_GMBH = 23387\nVENDOR_ID_HYPERCUBE_SYSTEMS_LTD = 23388\nVENDOR_ID_IZB_MNCHEN_FRANKFURT_A_M_GMBH_CO_KG = 23389\nVENDOR_ID_EASYWAN_GMBH = 23390\nVENDOR_ID_ATOMWIDE_LTD = 23391\nVENDOR_ID_INSIGHTIX_LTD = 23392\nVENDOR_ID_LLC_CTI_CENTER_OF_TELEPHONY_INTEGRATION = 23393\nVENDOR_ID_GROUPE_WESFORD = 23394\nVENDOR_ID_TRUSTEDTEC = 23395\nVENDOR_ID_NEIGHBOURHOOD_LINK = 23396\nVENDOR_ID_FINE_POINT_TECHNOLOGIES_INC = 23397\nVENDOR_ID_MTS_ALLSTREAM_INC = 23398\nVENDOR_ID_THE_NATIONAL_SCIENCE_FOUNDATION = 23399\nVENDOR_ID_MIDCONTINENT_COMMUNICATIONS = 23400\nVENDOR_ID_SLIWAEUORG_NETWORK = 23401\nVENDOR_ID_INTERSTAR_TECHNOLOGIES_INC = 23402\nVENDOR_ID_SHARP_HEALTHCARE = 23403\nVENDOR_ID_DAVANTEL = 23404\nVENDOR_ID_JSC_SAHALINMORSVJAZ = 23405\nVENDOR_ID_LDAPTIVE_PTY_LTD = 23406\nVENDOR_ID_BRYANT_UNLIMITED = 23407\nVENDOR_ID_RHOMBUS_SYSTEMS_LTD = 23408\nVENDOR_ID_TORQUENET_INC = 23409\nVENDOR_ID_HACKSTRIKE_LTD = 23410\nVENDOR_ID_SERVINFO = 23411\nVENDOR_ID_ARCONTECH_LTD = 23412\nVENDOR_ID_MELANGE_CORPORATION = 23413\nVENDOR_ID_ILMARINEN_MUTUAL_PENSION_INSURANCE_COMPANY = 23414\nVENDOR_ID_NORDSYSCOM = 23415\nVENDOR_ID_MIT_XPERTS_GMBH = 23416\nVENDOR_ID_COPITEC_CONSEJO_PROFESIONAL_DE_INGENIERA_DE_TELECOMUNICACIONES = 23417\nVENDOR_ID_GRIDLOGIX_INC = 23418\nVENDOR_ID_TALK24 = 23419\nVENDOR_ID_APS_SYSTEMS_AG = 23420\nVENDOR_ID_ALTANA_PHARMA_AG = 23421\nVENDOR_ID_INSTITUTO_SUPERIOR_DE_CONTAILIDADE_E_ADMINISTRACAO_DE_COIMBRA = 23422\nVENDOR_ID_OSMOSYS_SA = 23423\nVENDOR_ID_MAXIMUM_IMPRESSION_LLC = 23424\nVENDOR_ID_QS_TECHNOLOGIES_INC = 23425\nVENDOR_ID_LOUVERTURENET = 23426\nVENDOR_ID_THE_HOME_DEPOT_SUPPLY_MRO = 23427\nVENDOR_ID_NOC_SCHOOL_OF_ENGINEERING_MORGAN_STATE_UNIVERSITY = 23428\nVENDOR_ID_EUROCIS = 23429\nVENDOR_ID_LUMIGENT_TECHNOLOGIES_INC = 23430\nVENDOR_ID_CAMED = 23431\nVENDOR_ID_PACKET_ISLAND_INC = 23432\nVENDOR_ID_BGCOMP_INC = 23433\nVENDOR_ID_GEORGIA_TECHNOLOGY_AUTHORITY = 23434\nVENDOR_ID_ROCK_HOLDINGS_INC = 23435\nVENDOR_ID_MEXICANA_DE_ELECTROMECANICOS_SA_DE_CV = 23436\nVENDOR_ID_DON_BOSCO_INSTITUTE_OF_TECHNOLOGY = 23437\nVENDOR_ID_BEIJING_WANDONG_MEDICAL_EQUIPMENT_CO_LTD = 23438\nVENDOR_ID_HURDFR = 23439\nVENDOR_ID_AVVENU_INC = 23440\nVENDOR_ID_RASYSTEMS = 23441\nVENDOR_ID_ROCKMON_IT_CONSULTING = 23442\nVENDOR_ID_MINIPROBE = 23443\nVENDOR_ID_LATECOERE = 23444\nVENDOR_ID_JORDAN_CURZON = 23445\nVENDOR_ID_H5_GROUP = 23446\nVENDOR_ID_OPSWARE_INC = 23447\nVENDOR_ID_AVITECH_AG = 23448\nVENDOR_ID_TRIPOD_TECHNOLOGY_GROUP_INC = 23449\nVENDOR_ID_W_A_STROSBERG = 23450\nVENDOR_ID_WALLENIUS_WILHELMSEN_LINES = 23451\nVENDOR_ID_SUNGARD_AVAILABILITY_SERVICES = 23452\nVENDOR_ID_KUNGFOO = 23453\nVENDOR_ID_BELZEBYTE_NETWORK = 23454\nVENDOR_ID_EXCEPTIONAL_SOFTWARE_STRATEGIES_INC = 23455\nVENDOR_ID_NETCARRIER_INC = 23456\nVENDOR_ID_AMVESCAP_PLC = 23457\nVENDOR_ID_NATIONAL_CYBERNET_SECURITY_LTD = 23458\nVENDOR_ID_CHUNGHWA_TELECOM_CO_LTD = 23459\nVENDOR_ID_PROFILIUM_INC = 23460\nVENDOR_ID_IN4S_INC = 23461\nVENDOR_ID_UNIXCONN = 23462\nVENDOR_ID_KOLPORTER_INFO_SA = 23463\nVENDOR_ID_DEPARTMENT_OF_IT_UNIVERSITY_OF_DEFENSE_CZECH_ARMED_FORCES = 23464\nVENDOR_ID_VIVOTEK_INC = 23465\nVENDOR_ID_VISION_FIRE_AND_SECURITY = 23466\nVENDOR_ID_SHANGHAI_INFOPLS_NETWORK_TECHNOLOGY_COLTD_CHINA = 23467\nVENDOR_ID_NGC_SYSTEMS_SDN_BHD = 23468\nVENDOR_ID_OPENSOULORG = 23469\nVENDOR_ID_LOGATIQUE = 23470\nVENDOR_ID_DIGITA_OY = 23471\nVENDOR_ID_MANGOARTAT_WEB_UND_MULTIMEDIATECHNIK_SOFTWAREENTWICKLUNG = 23472\nVENDOR_ID_PANDA_SOFTWARE_INTERNATIONAL_SL = 23473\nVENDOR_ID_EITB = 23474\nVENDOR_ID_SOFTEL_GROUP = 23475\nVENDOR_ID_BRITISH_EDUCATIONAL_COMMUNICATIONS_AND_TECHNOLOGY_AGENCY = 23476\nVENDOR_ID_DABIS_AG = 23477\nVENDOR_ID_PROVINCIA_DI_FIRENZE = 23478\nVENDOR_ID_SULAKE_CORPORATION_OY = 23479\nVENDOR_ID_DEGUSSA_BANK_GMBH = 23480\nVENDOR_ID_INFOAXIS_LTD = 23481\nVENDOR_ID_ALTOBRIDGE_LTD = 23482\nVENDOR_ID_UNIVERSITY_OF_NORTH_CAROLINA_ASHEVILLE = 23483\nVENDOR_ID_C_DH_SRL = 23484\nVENDOR_ID_AUSCERT_AUSTRALIAN_COMPUTER_EMERGENCY_RESPONSE_TEAM = 23485\nVENDOR_ID_NETCENTRUM_LTD = 23486\nVENDOR_ID_DAXTEN_LTD = 23487\nVENDOR_ID_TECHNICA_CORPORATION = 23488\nVENDOR_ID_VISPLEX_ASSOCIATION = 23489\nVENDOR_ID_ENIDAN_TECHNOLOGIES_GMBH = 23490\nVENDOR_ID_CYBERTECH_BV = 23491\nVENDOR_ID_LIGHTCORE_CO_LTD = 23492\nVENDOR_ID_AMINFU_HUDIMA = 23493\nVENDOR_ID_MINT_SYSTEMS_LTD = 23494\nVENDOR_ID_IT_PRO_PETER_LECHNER = 23495\nVENDOR_ID_BOURSORAMA = 23496\nVENDOR_ID_LSWEI = 23497\nVENDOR_ID_SHANGHAI_ASIA_PACIFIC_COMPUTER_INFORMATION_SYSTEM_CO_LTD = 23498\nVENDOR_ID_SIEMENS_PROGRAMM_UND_SYSTEMENTWICKLUNG_GMBH_CO_KG = 23499\nVENDOR_ID_ARTICY_COMPUTER_SYSTEM_SERVICE = 23500\nVENDOR_ID_SAILBUM_ENTERPRISES_LLC = 23501\nVENDOR_ID_RENEW_DATA_CORP = 23502\nVENDOR_ID_ARIZONA_FOUNDATION_FOR_MEDICAL_CARE = 23503\nVENDOR_ID_TWENTIETH_CENTURY_FOX_FILM_CORPORATION = 23504\nVENDOR_ID_PROGRAMMING_DESIGN = 23505\nVENDOR_ID_PLEIADES_CONSULTING_INC = 23506\nVENDOR_ID_SALESFORCECOM = 23507\nVENDOR_ID_EVI = 23508\nVENDOR_ID_BVCOMPUWORKS = 23509\nVENDOR_ID_CENTRO_CULTURAL_Y_DEPORTIVO_TAJAMAR = 23510\nVENDOR_ID_TELUS = 23511\nVENDOR_ID_COPI_FAMILY = 23512\nVENDOR_ID_WESTLINE_SECURITY_LTD = 23513\nVENDOR_ID_MICHAELS_STORES_INC = 23514\nVENDOR_ID_TEKMOB_LDA = 23515\nVENDOR_ID_CITICARDS = 23516\nVENDOR_ID_LEVITON_VOICE_AND_DATA = 23517\nVENDOR_ID_TOMAS_ZOUFALY = 23518\nVENDOR_ID_REGAL_BELOIT_CORPORATION = 23519\nVENDOR_ID_UNASSIGNED_31 = 23520\nVENDOR_ID_AMHERST_COUNTY_PUBLIC_SCHOOLS = 23521\nVENDOR_ID_VOLICON_INC = 23522\nVENDOR_ID_MT_CONSULTING_SA = 23523\nVENDOR_ID_WEBERHOFER_GMBH = 23524\nVENDOR_ID_ALEKSEY_BARABANOV = 23525\nVENDOR_ID_AUSTER_SISTEMAS_SOLUES_DE_INFORMTICA_LTDA = 23526\nVENDOR_ID_NEWPAGE_CORPORATION = 23527\nVENDOR_ID_THE_LADDIE_GROUP = 23528\nVENDOR_ID_APPX_SRL = 23529\nVENDOR_ID_STATE_OF_ALASKA_ENTERPRISE_TECHNOLOGY_SERVICES = 23530\nVENDOR_ID_PRACTEO_SA = 23531\nVENDOR_ID_PLAN_AUSTRALIA_PTY_LTD = 23532\nVENDOR_ID_PJRCC = 23533\nVENDOR_ID_SUPERTRONIC_SPA = 23534\nVENDOR_ID_HOLLY_AUSTRALIA_PTY_LTD = 23535\nVENDOR_ID_ENCLUE_CO_LTD = 23536\nVENDOR_ID_SHANGHAI_DREAMING_INFORMATION_TECHNOLOGY_CO_LTD = 23537\nVENDOR_ID_JENSTON_TECHNOLOGY_CORPORATION_LTD = 23538\nVENDOR_ID_TEAMDZR = 23539\nVENDOR_ID_CORDYS_HOLDING_BV = 23540\nVENDOR_ID_EMCORE_CORPORATION = 23541\nVENDOR_ID_CRYPTOSIGN = 23542\nVENDOR_ID_ICONN = 23543\nVENDOR_ID_ALLEN_RESEARCH = 23544\nVENDOR_ID_WEST_RIDGE_NETWORKS_INC = 23545\nVENDOR_ID_WAGNER_AND_ASSOCIATES_GROUPWARE_SERVICES_INC = 23546\nVENDOR_ID_IFSERCON_COM_SRL = 23547\nVENDOR_ID_ELBER_SRL = 23548\nVENDOR_ID_TOYO_NETWORKS_SYSTEM_INTEGRATION_CO_LTD = 23549\nVENDOR_ID_E_WORLD_DEVELOPMENTS_LTD = 23550\nVENDOR_ID_ERGONOMIX_SOFTWARE_GMBH = 23551\nVENDOR_ID_JPS_COMMUNICATIONS = 23552\nVENDOR_ID_DISCOVER_FINANCIAL_SERVICES_INC = 23553\nVENDOR_ID_PEMI = 23554\nVENDOR_ID_CONTENTTEAM_GMBH = 23555\nVENDOR_ID_CENTRE_DE_GESTION_OCEAN = 23556\nVENDOR_ID_EEA_COMMUNICATION_SOLUTIONS = 23557\nVENDOR_ID_IPSOFT_INC = 23558\nVENDOR_ID_UNITED_INFORMATION_SYSTEM_SERVICE_CO_LTD = 23559\nVENDOR_ID_EDREAMS = 23560\nVENDOR_ID_ANITE_DEUTSCHLAND_GMBH_COKG = 23561\nVENDOR_ID_SMARTWARE_COMPUTING = 23562\nVENDOR_ID_DUX_INC = 23563\nVENDOR_ID_SCHMIDT_GMBH = 23564\nVENDOR_ID_PANTA_COMPUTER_SYSTEMS = 23565\nVENDOR_ID_INFOHIT_COMPUTERS_DOO = 23566\nVENDOR_ID_GEORG_CHRISTOPH_LICHTENBERG_SCHULE_KASSEL = 23567\nVENDOR_ID_NOEL_PLUS_SRO = 23568\nVENDOR_ID_TEAMWORX_PRODUCTIONS_LTD = 23569\nVENDOR_ID_SOLITON = 23570\nVENDOR_ID_IPBS_CNRS = 23571\nVENDOR_ID_WEBMAGICIAN_GLOBAL = 23572\nVENDOR_ID_KIDS_CO_GEV = 23573\nVENDOR_ID_TU_HAMBURG_HARBURG = 23574\nVENDOR_ID_WAYFINDER_SYSTEMS_AB = 23575\nVENDOR_ID_ADVIS_MACIEJ_MATYSIAK = 23576\nVENDOR_ID_ENFO_PARTNER_OY = 23577\nVENDOR_ID_MSC_VERTRIEBS_GMBH_FORMERLY_SMART_NETWORK_DEVICES_GMBH = 23578\nVENDOR_ID_CENTRICA_PLC = 23579\nVENDOR_ID_ANDRITZ_OY = 23580\nVENDOR_ID_HACOUSTO_HOLLAND = 23581\nVENDOR_ID_ESEO = 23582\nVENDOR_ID_APOS_SYSTEMS_INC = 23583\nVENDOR_ID_LOGICAL_PROGRESSION_LTD = 23584\nVENDOR_ID_BANK_TECHNOLOGIES_CENTRE = 23585\nVENDOR_ID_RALF_KIRCHNER_SYSTEMANALYSE = 23586\nVENDOR_ID_PROFICOMMS_SRO = 23587\nVENDOR_ID_FOI_SWEDISH_DEFENCE_RESEARCH_AGENCY = 23588\nVENDOR_ID_MAX_ZINALS_NUMBER = 23589\nVENDOR_ID_FIASA = 23590\nVENDOR_ID_CCNY = 23591\nVENDOR_ID_IOWA_COUNTIES_INFORMATION_TECHNOLOGY = 23592\nVENDOR_ID_DIPL_ING_HEIKO_BOESEL = 23593\nVENDOR_ID_EBI_LP = 23594\nVENDOR_ID_VIRGINIA_EMPLOYMENT_COMMISSION = 23595\nVENDOR_ID_PIKKERTON_GMBH = 23596\nVENDOR_ID_ESICA_TERRA_INC = 23597\nVENDOR_ID_UX = 23598\nVENDOR_ID_STUDIO_NETWORK_SOLUTIONS = 23599\nVENDOR_ID_TRANSORA_2 = 23600\nVENDOR_ID_EMCOM_SYSTEMS = 23601\nVENDOR_ID_FULANOCOMBR_S_A = 23602\nVENDOR_ID_OPTELLIOS = 23603\nVENDOR_ID_GOLDPOCKET_INTERACTIVE_INC = 23604\nVENDOR_ID_APPLICATIONS_PLUS_INC_2 = 23605\nVENDOR_ID_DIGIPEN_INSTITUTE_OF_TECHNOLOGY = 23606\nVENDOR_ID_MLIX = 23607\nVENDOR_ID_PAULS_FARM = 23608\nVENDOR_ID_IX_APPLIANCE_INC = 23609\nVENDOR_ID_WDG_SC = 23610\nVENDOR_ID_NLIGHT_SRO = 23611\nVENDOR_ID_ATLASSIAN_SOFTWARE_SYSTEMS = 23612\nVENDOR_ID_JAPAN_IMAGE_NETWORK_INC = 23613\nVENDOR_ID_A_WILTON = 23614\nVENDOR_ID_HIFX_IT_MEDIA_SERVICES_PVT_LTD = 23615\nVENDOR_ID_SYNCHROSOFT = 23616\nVENDOR_ID_DEUTSCHES_LITERATURARCHIV_MARBACH = 23617\nVENDOR_ID_SAIMA_AVANDERO_SPA = 23618\nVENDOR_ID_SERGAS = 23619\nVENDOR_ID_TELTRONIX_LTD = 23620\nVENDOR_ID_BECHTEL_SAIC_COMPANY_LLC = 23621\nVENDOR_ID_EUROPEAN_PATENT_OFFICE = 23622\nVENDOR_ID_ICON_MULTIMEDIA = 23623\nVENDOR_ID_PRVN_CERTIFIKAN_AUTORITA_AS = 23624\nVENDOR_ID_INTECHGRAL_INC = 23625\nVENDOR_ID_POGGS_COMPUTER_SERVICES = 23626\nVENDOR_ID_INTERLIX = 23627\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_DOMINGUEZ_HILLS = 23628\nVENDOR_ID_SAFENET_INC_FORMERLY_MYKOTRONX_INC = 23629\nVENDOR_ID_COMPUTER_AID_INC = 23630\nVENDOR_ID_AZALEA_NETWORKS_INC = 23631\nVENDOR_ID_SNEHA_TECHNOLOGIES_SL = 23632\nVENDOR_ID_IPSYS_COMMUNICATIONS_AG = 23633\nVENDOR_ID_TC_AUTOMATISERING = 23634\nVENDOR_ID_COLINDE = 23635\nVENDOR_ID_LYCEE_ADER_BERNAY = 23636\nVENDOR_ID_NOVARTIS_INSTITUTES_OG_BIOMEDICAL_RESEARCH_VIENNA_GMBH_CO_KG = 23637\nVENDOR_ID_LOGILEC = 23638\nVENDOR_ID_PARSGROUP_INFORMATIONSTECHNOLOGIE_GMBH = 23639\nVENDOR_ID_ENERCON_LTD = 23640\nVENDOR_ID_CASCADE_LTD = 23641\nVENDOR_ID_TMIDIA_INC = 23642\nVENDOR_ID_BSECUREDK = 23643\nVENDOR_ID_SIEMENS_LTD_CHINA = 23644\nVENDOR_ID_DAF_TRUCKS = 23645\nVENDOR_ID_CELL_C_PTY_LTD = 23646\nVENDOR_ID_SARL_GALLETINFO = 23647\nVENDOR_ID_ESV_LLC = 23648\nVENDOR_ID_CORNERTURN_LLC = 23649\nVENDOR_ID_OPENDICOM_SRL = 23650\nVENDOR_ID_INTEGRATED_DECISIONS_AND_SYSTEM_INC = 23651\nVENDOR_ID_LEWES_COMPUTER_SERVICES = 23652\nVENDOR_ID_CIRRUS_TECHNOLOGIES_PTY_LTD = 23653\nVENDOR_ID_AICHI_ELECTRIC_CO_LTD = 23654\nVENDOR_ID_CALLDESK_SA = 23655\nVENDOR_ID_CULT_HILL_INNOVATION_LIMITED = 23656\nVENDOR_ID_TEDIS_AS = 23657\nVENDOR_ID_TUBITAK_ULAKBIM = 23658\nVENDOR_ID_LARS_MORICH_KOMMUNIKATIONSTECHNIK_GMBH = 23659\nVENDOR_ID_DRS_TECHNOLOGIES_INC_C2_SYSTEMS = 23660\nVENDOR_ID_AMERICAN_TELECARE_INC = 23661\nVENDOR_ID_BLUE_JUNGLE_INC = 23662\nVENDOR_ID_STORIED_FUTURE_INFRASTRUCTURE = 23663\nVENDOR_ID_FEDERAL_DEPOSIT_INSURANCE_CORPORATION = 23664\nVENDOR_ID_WISELINK = 23665\nVENDOR_ID_BEAUFORTWEB = 23666\nVENDOR_ID_FREDNET = 23667\nVENDOR_ID_KASPERSKY_LAB_ZAO = 23668\nVENDOR_ID_KYPHON_EUROPE = 23669\nVENDOR_ID_NIHON_KOHDEN_CORPORATION = 23670\nVENDOR_ID_CIS_HOLLYWOOD = 23671\nVENDOR_ID_NTIME_SERVICOS_DE_INFORMATICA_E_COMERCIO_LTDA = 23672\nVENDOR_ID_BLUESOFT_SP_Z_OO = 23673\nVENDOR_ID_EDU_BUSINESS_SOLUTIONS = 23674\nVENDOR_ID_FORAY_TECHNOLOGIES_INC = 23675\nVENDOR_ID_GK_SERVICES_INC = 23676\nVENDOR_ID_COLONIAL_FIJI = 23677\nVENDOR_ID_PCTEL_INC = 23678\nVENDOR_ID_DILIGENCE_CONSULTING_LLC = 23679\nVENDOR_ID_ECLIPSE_SP_LLC = 23680\nVENDOR_ID_TERREACTIVE_AG = 23681\nVENDOR_ID_EMUSE_TECHNOLOGIES_LTD = 23682\nVENDOR_ID_EDV_COMPAS_GMBH = 23683\nVENDOR_ID_SENSITECH_INC = 23684\nVENDOR_ID_GODSKNET = 23685\nVENDOR_ID_SOFTENTIAL_INC = 23686\nVENDOR_ID_POBEDA_JSC = 23687\nVENDOR_ID_SUMMIT_DEVELOPMENT_LTD = 23688\nVENDOR_ID_PERVENIO_LTD = 23689\nVENDOR_ID_ABSTRACT_LTD = 23690\nVENDOR_ID_VIA = 23691\nVENDOR_ID_IDACTIS = 23692\nVENDOR_ID_NETWORKS_CONCEPTS_GMBH = 23693\nVENDOR_ID_PMX_NETWORKS_INC = 23694\nVENDOR_ID_PEPLINK_LTD = 23695\nVENDOR_ID_NILAI_INTERNATIONAL_COLLEGE = 23696\nVENDOR_ID_HOI_POLLOIORG_FORMERLY_ASPECTOR_GMBH = 23697\nVENDOR_ID_RELDATA_INC = 23698\nVENDOR_ID_ZYDEN_SOFTWARE = 23699\nVENDOR_ID_INTERNEWS_98_LTD = 23700\nVENDOR_ID_CANNON_TECHNOLOGIES_LTD = 23701\nVENDOR_ID_SHD_HOLDING_GMBH = 23702\nVENDOR_ID_AGILE_SOFTWARE_NZ_LTD = 23703\nVENDOR_ID_CALYPSO_CAPITAL_MANAGEMENT = 23704\nVENDOR_ID_SALIENT_CORPORATION_INC = 23705\nVENDOR_ID_GLOBALPOPS = 23706\nVENDOR_ID_LAFARGE_ALUMINATES = 23707\nVENDOR_ID_HYMATOM_SA = 23708\nVENDOR_ID_MILTOPE_CORPORATION = 23709\nVENDOR_ID_AGINCOURT_COMPUTING = 23710\nVENDOR_ID_SEVENTH_SKILL_LTD = 23711\nVENDOR_ID_MINNESOTA_OFFICE_OF_ENTERPRISE_TECHNOLOGY = 23712\nVENDOR_ID_KEATING_INC = 23713\nVENDOR_ID_DATA_SYSTEMS_SAECA = 23714\nVENDOR_ID_LIVE_MONITORING_PTY_LD_FORMERLY_PRODU_TECH_MONITORING_PTY_LD = 23715\nVENDOR_ID_UNITED_STATES_COUNCIL_FOR_AUTOMOTIVE_RESEARCH = 23716\nVENDOR_ID_SIRICOMM_INC = 23717\nVENDOR_ID_ESENSORS_INC = 23718\nVENDOR_ID_ARISHI = 23719\nVENDOR_ID_NETIFICE_COMMUNICATIONS_INC = 23720\nVENDOR_ID_THE_IDEAL_COMPUTER_GROUP_INC = 23721\nVENDOR_ID_CS_SOFT_SRO = 23722\nVENDOR_ID_GREAT_POWER_ELECTRIN_SCIENCE_AND_TECHNOLOGY_STOCK_COLTD = 23723\nVENDOR_ID_UDO_NEUMANN = 23724\nVENDOR_ID_THESERVER_BRASIL_MULTIDIAGNOSTICA_IT_TEAM = 23725\nVENDOR_ID_VOTORANTIM_INVESTIMENTOS_INDUSTRIAIS_SA = 23726\nVENDOR_ID_MARLIN_TRUST_MANAGEMENT_ORGANIZATION_LLC = 23727\nVENDOR_ID_VERSIO_SARL = 23728\nVENDOR_ID_DIVITAS_NETWORKS = 23729\nVENDOR_ID_OVEA = 23730\nVENDOR_ID_TELESTAR = 23731\nVENDOR_ID_SHIJIAZHUANG_RAILWAY_INSTITUTE = 23732\nVENDOR_ID_JGC_CORPORATION = 23733\nVENDOR_ID_OEBB = 23734\nVENDOR_ID_FONDATION_RESTENA = 23735\nVENDOR_ID_ICEWARP_LTD = 23736\nVENDOR_ID_HOCHSCHULE_ULM = 23737\nVENDOR_ID_AWR_SOLUTION_NETWORK = 23738\nVENDOR_ID_HUG = 23739\nVENDOR_ID_SYNERGIS_INFORMATIONSSYSTEME_GMBH = 23740\nVENDOR_ID_WOGRI_UNLIMITED = 23741\nVENDOR_ID_CONNOTECH_EXPERTS_CONSEILS_INC = 23742\nVENDOR_ID_KERRIDGE_COMPUTER_COMPANY_LTD = 23743\nVENDOR_ID_BITMARCK_SOFTWARE_GMBH_FORMERLY_ARBEITSGEMEINSCHAFT_INFORMATIONSSYSTEME_IN_DER_GESETZLICHEN_KRANKENVERSICHERUNG_ISKV = 23744\nVENDOR_ID_BLACK_HEN_LIMITED = 23745\nVENDOR_ID_ADMINISTRATION_COMMUNALE_DE_BRAINE_LALLEUD = 23746\nVENDOR_ID_ARESTE_CENTRE_INFORMATIQUE = 23747\nVENDOR_ID_EDINFORM_SPA = 23748\nVENDOR_ID_FEDERAL_STATE_UNITARY_ENTERPRISE_LENINGRAD_RADIO_RESEARCH_AND = 23749\nVENDOR_ID_NEW10_GMBH = 23750\nVENDOR_ID_PT_TRG_INTERNATIONAL = 23751\nVENDOR_ID_EXCELLNET_IT_SERVICES_AND_CONSULTING = 23752\nVENDOR_ID_INFINIT_PRODUCTIONS = 23753\nVENDOR_ID_MAIRIE_DE_SAVIGNY_SUR_ORGE = 23754\nVENDOR_ID_SOFTRAX_CORPORATION = 23755\nVENDOR_ID_PROMOTORA_DE_INFORMACIONES_SA = 23756\nVENDOR_ID_AR_TELECOM = 23757\nVENDOR_ID_DESERT_CASCADE = 23758\nVENDOR_ID_SZOLNOK_VROS_POLGRMESTERI_HIVATAL = 23759\nVENDOR_ID_LAYERZERO_POWER_SYSTEMS_INC = 23760\nVENDOR_ID_CMSL = 23761\nVENDOR_ID_TIME_WARE = 23762\nVENDOR_ID_RENT_A_PACS_GMBH = 23763\nVENDOR_ID_ATAMO_PTY_LTD = 23764\nVENDOR_ID_GETNET_COMUNICACOES_S_C_LTDA = 23765\nVENDOR_ID_TRIGEO_NETWORK_SECURITY_INC = 23766\nVENDOR_ID_RENSSELAER_HARTFORD_GRADUATE_CENTER_INC = 23767\nVENDOR_ID_INTEGRATED_MANAGEMENT_RESOURCES_INC = 23768\nVENDOR_ID_INFINITY_TECHNOLOGY_INC = 23769\nVENDOR_ID_ANDREOLI_DOMENICO = 23770\nVENDOR_ID_MARAKANA_INC = 23771\nVENDOR_ID_ROUTEPULSE_TECHNOLOGIES = 23772\nVENDOR_ID_STARFIRE_ENGINEERING_TECHNOLOGIES_INC = 23773\nVENDOR_ID_JNETX_INC = 23774\nVENDOR_ID_OUTER_TI = 23775\nVENDOR_ID_ROUGENETWORK = 23776\nVENDOR_ID_ELEKTRARNY_OPATOVICE_AS = 23777\nVENDOR_ID_BEZ_SYSTEMS_INC = 23778\nVENDOR_ID_ASKLEPIOS_GROUP = 23779\nVENDOR_ID_PROSE_CONSULTING_LTD_FORMERLY_FREEDOMWARE_UK = 23780\nVENDOR_ID_ALBERTSLUND_UNGDOMSBOLIGER = 23781\nVENDOR_ID_ASN = 23782\nVENDOR_ID_ITELLUS_HOLDINGS_INC_FORMERLY_TELLURIAN_NETWORKS_INC = 23783\nVENDOR_ID_STRATALIGHT_COMMUNICATIONS = 23784\nVENDOR_ID_CIC_CAFMICRO = 23785\nVENDOR_ID_DS_DATA_SYSTEMS_GMBH = 23786\nVENDOR_ID_GNYRFNET = 23787\nVENDOR_ID_MATT_WRIGHT_CONSULTING = 23788\nVENDOR_ID_GRAMMATECH_INC = 23789\nVENDOR_ID_PEARCE_BEVILL_LEESBURG_MOORE_PC = 23790\nVENDOR_ID_ADAPTIX = 23791\nVENDOR_ID_AXELL_WIRELESS_ISRAEL_LTD_FORMERLY_DEKOLINK_WIRELESS_LTD = 23792\nVENDOR_ID_CLUSTER_RESOURCES = 23793\nVENDOR_ID_SIGNIFICANT_BITS = 23794\nVENDOR_ID_MOVILE_FORMERLY_YAVOX_LATIN_AMERICA = 23795\nVENDOR_ID_SUNWARE_GMBH_CO_KG = 23796\nVENDOR_ID_KSIGN_CO_LTD = 23797\nVENDOR_ID_AUSTRALIA_POST = 23798\nVENDOR_ID_ICON_SYSTEMHAUS_GMBH = 23799\nVENDOR_ID_ROCA_CORPORACIN_EMPRESARIAL_SA = 23800\nVENDOR_ID_METRIMA_ENERGI_AB = 23801\nVENDOR_ID_DEKABANK = 23802\nVENDOR_ID_ECOLE_POLYTECHNIQUE = 23803\nVENDOR_ID_RENA_ELECTRONICA_BV = 23804\nVENDOR_ID_INTERNATIONAL_INDUSTRIAL_BANK = 23805\nVENDOR_ID_TOUCH_CLARITY_LTD = 23806\nVENDOR_ID_UIB_UMWELT_INFORMATIK_BRO_GMBH = 23807\nVENDOR_ID_CCM_SOFTWARE_SERVICES_LTD = 23808\nVENDOR_ID_BRIDICUM_SECURITY_GROUP_A_S = 23809\nVENDOR_ID_ROTHSCHILD_BANK_AG = 23810\nVENDOR_ID_QBIZM_TECHNOLOGIES_AS = 23811\nVENDOR_ID_INL_SARL = 23812\nVENDOR_ID_CENDANT_TDS = 23813\nVENDOR_ID_ID_TECH_SERVICOS_EM_INFORMATICA_LTDA = 23814\nVENDOR_ID_WATERBURY_REPUBLICAN_AMERICAN = 23815\nVENDOR_ID_SLIPSTREAM_DATA_INC = 23816\nVENDOR_ID_MINISTERIO_DE_ECONOMA_REPBLICA_ARGENTINA = 23817\nVENDOR_ID_FIRSTENERGY_CORP = 23818\nVENDOR_ID_EPOCH_INTEGRATION_INC = 23819\nVENDOR_ID_LATERAL_NET_LTD = 23820\nVENDOR_ID_IRISH_CENTRE_FOR_HIGH_END_COMPUTING = 23821\nVENDOR_ID_MITSUI_HOME_COLTD = 23822\nVENDOR_ID_WISE_TECHNOLOGY_COLTD = 23823\nVENDOR_ID_LAC_CO_LTD = 23824\nVENDOR_ID_EZCONN_CORPORATION = 23825\nVENDOR_ID_HISPEED_DATA_INC = 23826\nVENDOR_ID_GHY_INTERNATIONAL = 23827\nVENDOR_ID_MKI_SYSTEMS = 23828\nVENDOR_ID_WW_INFORMATIK_GMBH = 23829\nVENDOR_ID_BLEKINGE_STUDENTSERVICE_AB = 23830\nVENDOR_ID_TENEROS_INC = 23831\nVENDOR_ID_AITEC_DO_BRASIL_LTDA = 23832\nVENDOR_ID_DENTAQUEST_VENTURES_INC = 23833\nVENDOR_ID_FACHHOCHSCHULE_SALZBURG_GMBH = 23834\nVENDOR_ID_EMFAST_INC = 23835\nVENDOR_ID_DS4_LASER_TECHNOLOGY_SRL = 23836\nVENDOR_ID_JEFFERSON_COUNTY_SCHOOL_DISTRICT = 23837\nVENDOR_ID_BIATEL_SYSTEMY_KOMPUTEROWE_SP_Z_OO = 23838\nVENDOR_ID_GROX_NETWORKS = 23839\nVENDOR_ID_SCHOOL_DISTRICT_57_PRINCE_GEORGE = 23840\nVENDOR_ID_RAD_OP = 23841\nVENDOR_ID_KUBAN_PHARM_STOCKS_LTD = 23842\nVENDOR_ID_DEPARTAMENTO_DE_CINCIA_DA_COMPUTAO_UNIVERSIDADE_FEDERAL_DA = 23843\nVENDOR_ID_CONSTELLATION_BRANDS_INC = 23844\nVENDOR_ID_SCHOWALTER_GBR = 23845\nVENDOR_ID_ENDRESSHAUSER_INFOSERVE_GMBHCO_KG = 23846\nVENDOR_ID_ELOGIC_SNC_DI_ANTONINI_FILIPPO = 23847\nVENDOR_ID_MIDDLE_KINGDOM_SCA_INC = 23848\nVENDOR_ID_PACSGEAR_INC = 23849\nVENDOR_ID_ZYBERIT_AB = 23850\nVENDOR_ID_CCI_CONSULTING_LTD = 23851\nVENDOR_ID_SEEING_MACHINES_PTY_LTD = 23852\nVENDOR_ID_ETHINKSOLUTIONSINC = 23853\nVENDOR_ID_SHIPBUILDING_SS = 23854\nVENDOR_ID_BULLANT_SOFTWARE = 23855\nVENDOR_ID_IMTEC_IMAGING_LLC = 23856\nVENDOR_ID_NEXTIO_INC = 23857\nVENDOR_ID_VADATECH_INC = 23858\nVENDOR_ID_PUNTOBLU_SRL = 23859\nVENDOR_ID_SCHUBERT_UNTERNEHMENSGRUPPE = 23860\nVENDOR_ID_REDWEBCZ = 23861\nVENDOR_ID_AIMVALLEY_BV = 23862\nVENDOR_ID_FORT_HAYS_STATE_UNIVERSITY = 23863\nVENDOR_ID_CASCADIA_INFORMATION_TECHNOLOGIES_INC = 23864\nVENDOR_ID_SYNAPPS = 23865\nVENDOR_ID_STARNIX_CARE_INC = 23866\nVENDOR_ID_SILVER_PEAK_SYSTEMS_INC = 23867\nVENDOR_ID_SIS_TEC = 23868\nVENDOR_ID_HIOKI_EECORPORATION = 23869\nVENDOR_ID_EMSTONE_CO = 23870\nVENDOR_ID_QNO_TECHNOLOGY_INC = 23871\nVENDOR_ID_RIKOM_DOO = 23872\nVENDOR_ID_MKC_MICHELS_KLEBERHOFF_COMPUTER_GMBH = 23873\nVENDOR_ID_ACLI_ASSOCIAZIONI_CRISTIANE_DEI_LAVORATORI_ITALIANI = 23874\nVENDOR_ID_GYMNASIUM_MNCHENSTEIN = 23875\nVENDOR_ID_PIXID_SNC = 23876\nVENDOR_ID_GRID_OPERATION_CENTER_ARISTOTLE_UNIVERSITY_OF_THESSALONIKI = 23877\nVENDOR_ID_STANTON_GROVE_LTD = 23878\nVENDOR_ID_SAG_SYSTEMHAUS_GMBH_AMS = 23879\nVENDOR_ID_MOTIONPATH_DIGITAL_MEDIA_LTD = 23880\nVENDOR_ID_AVANTON_INC = 23881\nVENDOR_ID_INVESTIDOR_PROFISSIONAL_GESTO_DE_RECURSOS_LTDA = 23882\nVENDOR_ID_FRESENIUS_MEDICAL_CARE_NORTH_AMERICA = 23883\nVENDOR_ID_FOTOFUXX = 23884\nVENDOR_ID_CONTINENTAL_CITY_NETWORKS_LTD = 23885\nVENDOR_ID_HAY_GROUP_INC = 23886\nVENDOR_ID_KAWASHIMA_LABO_INC = 23887\nVENDOR_ID_TYMAR_SYSTEMS_DEVELOPMENT = 23888\nVENDOR_ID_DACO_SYSTEM_ELABORAZIONE_DATI_SRL = 23889\nVENDOR_ID_HCL_PERIPHERALS = 23890\nVENDOR_ID_ERGOGROUP = 23891\nVENDOR_ID_MILPOWER_SOURCE = 23892\nVENDOR_ID_KLIR_TECHNOLOGIES_INC = 23893\nVENDOR_ID_NORTHSHORE_SCHOOL_DISTRICT = 23894\nVENDOR_ID_EVILGENIUS_NETWORKS = 23895\nVENDOR_ID_NETUS_VAIZOVIC_KD = 23896\nVENDOR_ID_TRIGGER_SOFTWARE = 23897\nVENDOR_ID_TESSERACT_CORPORATION = 23898\nVENDOR_ID_SINERAY_CONSULTING_COLTD = 23899\nVENDOR_ID_PROGETTI_AMBIENTALI_INTEGRATI_SAS = 23900\nVENDOR_ID_DIGIGRAM = 23901\nVENDOR_ID_ABB_STOTZ_KONTAKT_GMBH = 23902\nVENDOR_ID_CARGOLNET_SOLUCIONS_LLIURES_SLL = 23903\nVENDOR_ID_ARBITRON_INC = 23904\nVENDOR_ID_VOCAL_TECHNOLOGIES_LTD = 23905\nVENDOR_ID_AXALTO_INC = 23906\nVENDOR_ID_ADVANTAGE_SECURITY_S_DE_RL_DE_CV = 23907\nVENDOR_ID_INFOENG_ORGANIZATION = 23908\nVENDOR_ID_BEL_AMI_REISEN = 23909\nVENDOR_ID_IPOINT_MEDIA_LTD = 23910\nVENDOR_ID_AURUS = 23911\nVENDOR_ID_Q_GO = 23912\nVENDOR_ID_BELLE_BONFILS_MEMORIAL_BLOOD_CENTER = 23913\nVENDOR_ID_PEDRO_ARMELIM_UNIPESSOAL_LDA = 23914\nVENDOR_ID_SUPERGEO_TECH_INC = 23915\nVENDOR_ID_APPEAR_TV_AS = 23916\nVENDOR_ID_UNDER_DUSKEN = 23917\nVENDOR_ID_JPBERLIN = 23918\nVENDOR_ID_CORPORACIN_TEDEXIS_CA = 23919\nVENDOR_ID_ZOIC_STUDIOS = 23920\nVENDOR_ID_ISSP_INTERNET_SOLUTIONS_SZONGOTT_PERTL_OEG = 23921\nVENDOR_ID_MILSTEIN_ASOOCIATES_INC = 23922\nVENDOR_ID_HOBNOB = 23923\nVENDOR_ID_READSHAWCOM = 23924\nVENDOR_ID_CACTI = 23925\nVENDOR_ID_GOLF_LEAGUESCOM = 23926\nVENDOR_ID_UKRAINIAN_CATHOLIC_UNIVERSITY = 23927\nVENDOR_ID_MVV_ENERGIE_AG = 23928\nVENDOR_ID_ENTIRE_TECHNOLOGIES_GMBH = 23929\nVENDOR_ID_INFERNO_ENTERPRISES = 23930\nVENDOR_ID_GOODRICH_CORPORATION = 23931\nVENDOR_ID_TLD_SOLUTIONS_LTD = 23932\nVENDOR_ID_CAVERASYSTEMS = 23933\nVENDOR_ID_APRIL_NINE_INC = 23934\nVENDOR_ID_ARCHITECTS_OF_VOIP_GMBH = 23935\nVENDOR_ID_CHINA_GROUP_ZHEJIANG_TELECOM_CORPORATION = 23936\nVENDOR_ID_EXTRICOMLTD = 23937\nVENDOR_ID_ANEDER_BT = 23938\nVENDOR_ID_AVOKIA_INC = 23939\nVENDOR_ID_SYSCO_SPA = 23940\nVENDOR_ID_OPENTASKFORCE = 23941\nVENDOR_ID_INTELLIGENT_MOBILE_SOLUTIONS_INC = 23942\nVENDOR_ID_CENDRES_MTAUX_SA = 23943\nVENDOR_ID_DENIC_EG = 23944\nVENDOR_ID_INSTITUTE_OF_JOURNALISM_UNIVERSITY_DORTMUND = 23945\nVENDOR_ID_MINISTERO_DELLINTERNO_DIREZIONE_CENTRALE_POLIZIA_CRIMINALE = 23946\nVENDOR_ID_INNOVENE_LLC = 23947\nVENDOR_ID_CONFERNET_PRODUTOS_E_SERVICOS_LTD = 23948\nVENDOR_ID_SWYX_SOLUTIONS_GMBH = 23949\nVENDOR_ID_PRINT_ASSOCIATES_A_S = 23950\nVENDOR_ID_EXAPROTECT_TECHNOLOGY = 23951\nVENDOR_ID_TJ_COLLECTION_CO_LTD = 23952\nVENDOR_ID_AUSTRALIAN_PARTNERSHIP_FOR_ADVANCED_COMPUTING = 23953\nVENDOR_ID_TRINIX_AB = 23954\nVENDOR_ID_PUCCAMP_PONTIFICIA_UNIVERSIDADE_CATLICA_DE_CAMPINAS = 23955\nVENDOR_ID_PCL_CONSTRUCTORS_INC = 23956\nVENDOR_ID_SPACELABS_MEDICAL_DATA = 23957\nVENDOR_ID_310_JSC = 23958\nVENDOR_ID_MICNEU = 23959\nVENDOR_ID_ACQUIST_INCORPORATED = 23960\nVENDOR_ID_CERTIMAIL = 23961\nVENDOR_ID_SAISUNG_CORPORATION_LTD = 23962\nVENDOR_ID_SAFE_HOST = 23963\nVENDOR_ID_T_MOBILE_AUSTRIA = 23964\nVENDOR_ID_DETECON_INTERNATIONAL_GMBH = 23965\nVENDOR_ID_LEINER_WOLFF_GBR = 23966\nVENDOR_ID_TALLENCE_GMBH = 23967\nVENDOR_ID_NETVOYAGER_PLC = 23968\nVENDOR_ID_ARVATO_MOBILE = 23969\nVENDOR_ID_HAMBURG_SDAMERIKANISCHE_DAMPFSCHIFFFAHRTS_GESELLSCHAFT_KG = 23970\nVENDOR_ID_MENZEBACH_UND_WOLFF_IT_CONSULTING_GBR = 23971\nVENDOR_ID_FIDELITY_MLS_SYSTEMS_AND_SOLUTIONS = 23972\nVENDOR_ID_STILL_TRIPPING_PRODUCTIONS = 23973\nVENDOR_ID_GENERAL_DYNAMICS_ROBOTIC_SYSTEMS = 23974\nVENDOR_ID_ET_AL_INNOVATIONS_LTD = 23975\nVENDOR_ID_ZEBANON_INC = 23976\nVENDOR_ID_MY_COMPUTER_PERSON = 23977\nVENDOR_ID_SADEL_SPA = 23978\nVENDOR_ID_KNOWAYS_SRL = 23979\nVENDOR_ID_STS_GMBH_CO_OHG = 23980\nVENDOR_ID_MWS = 23981\nVENDOR_ID_TTY1NET = 23982\nVENDOR_ID_HAMPSHIRE_CONSTABULARY = 23983\nVENDOR_ID_RYCO_ELECTRONIC_SYSTEMS_LIMITED = 23984\nVENDOR_ID_SOGESA_SAS_DI_UGO_GRASSI_C = 23985\nVENDOR_ID_ENENSYS_TECHNOLOGIES_SAS = 23986\nVENDOR_ID_AUTORIDAD_PORTUARIA_DE_BARCELONA = 23987\nVENDOR_ID_ELINK_GMBH = 23988\nVENDOR_ID_CABLEFREE_SOLUTIONS_LIMITED = 23989\nVENDOR_ID_SHIFA_INTERNATIONAL_HOSPITALS = 23990\nVENDOR_ID_PLANEETTA_INTERNET_OY = 23991\nVENDOR_ID_SOCIAL_SCIENCE_COMPUTING_COOPERATIVE = 23992\nVENDOR_ID_LINEAR_TECHNOLOGY_CORPORATION = 23993\nVENDOR_ID_OPENDARWIN_PROJECT = 23994\nVENDOR_ID_EIGHTBALL_PRODUCTIONS = 23995\nVENDOR_ID_FUEGO_INC = 23996\nVENDOR_ID_FLORIDA_DEPARTMENT_OF_STATE = 23997\nVENDOR_ID_RUF_TELEMATIK_AG = 23998\nVENDOR_ID_FTI_CONSULTING_INC = 23999\nVENDOR_ID_ABN_AMRO_BANK_SERVICES = 24000\nVENDOR_ID_FIEGE_LOGISTIK_SCHWEIZ_AG = 24001\nVENDOR_ID_INGENIERIA_DIEZ_CISNEROS_SA = 24002\nVENDOR_ID_CELLCOM = 24003\nVENDOR_ID_ONUS_PETRO_SERVICES = 24004\nVENDOR_ID_ALEXA_INTERNET_INC = 24005\nVENDOR_ID_WEIDLINGER_ASSOCIATES_INC = 24006\nVENDOR_ID_GLOBATCOM = 24007\nVENDOR_ID_GREAT_BAY_SOFTWARE = 24008\nVENDOR_ID_NEXTHOP_TECHNOLOGIES_INC = 24009\nVENDOR_ID_ELESIGN = 24010\nVENDOR_ID_NEWTECHCOLTD = 24011\nVENDOR_ID_EASPNET_TAIWAN_INC = 24012\nVENDOR_ID_RTX_TELECOM_A_S = 24013\nVENDOR_ID_LANDESVERSICHERUNGSANSTALT_RHEINPROVINZ = 24014\nVENDOR_ID_CODAFIX_SYSTEM = 24015\nVENDOR_ID_BIONIX_AB = 24016\nVENDOR_ID_TEEGEE = 24017\nVENDOR_ID_FREDERIKSHAVN_GYMNASIUM_OG_HF_KURSUS = 24018\nVENDOR_ID_CERTIPATH_LLC = 24019\nVENDOR_ID_METAGISTICS = 24020\nVENDOR_ID_13_SPIDERS_LTD = 24021\nVENDOR_ID_OPTELIAN_ACCESS_NETWORKS_CORP = 24022\nVENDOR_ID_IEA_SOFTWARE_INC = 24023\nVENDOR_ID_TECSIDEL_SA = 24024\nVENDOR_ID_MVP_SOFTWARE_INC = 24025\nVENDOR_ID_CUBE_ROUTE = 24026\nVENDOR_ID_DEXA_MEDICA_GROUP = 24027\nVENDOR_ID_BAYERWALD_FENSTER_HAUSTUEREN_GMBH_CO_KG = 24028\nVENDOR_ID_HEYFRA_ELECTRONIC_GMBH = 24029\nVENDOR_ID_CENTERTOOLS_SOFTWARE_GMBH = 24030\nVENDOR_ID_NOMUS_COMM_SYSTEMS = 24031\nVENDOR_ID_DMSTOOLS_AG = 24032\nVENDOR_ID_PEEREX_LTD = 24033\nVENDOR_ID_THE_ROYAL_BOTANIC_GARDENS_KEW = 24034\nVENDOR_ID_AFIP = 24035\nVENDOR_ID_HOWARDORG = 24036\nVENDOR_ID_REVOLT_LTD = 24037\nVENDOR_ID_VISTAPRINT_USA_INC = 24038\nVENDOR_ID_LUTZ_BADENHEUER = 24039\nVENDOR_ID_BARREL_INVESTMENT_COMPANY_LTD = 24040\nVENDOR_ID_M7_SOFTWARE_BV = 24041\nVENDOR_ID_AMS_1769_LTD = 24042\nVENDOR_ID_TANEL_UNT = 24043\nVENDOR_ID_CTHULHU_INC = 24044\nVENDOR_ID_DWERRYHOUSE_IT_CONSULTING = 24045\nVENDOR_ID_TMSW_CORP = 24046\nVENDOR_ID_NETFABRIC_CORPORATION = 24047\nVENDOR_ID_UNITED_DEVICES = 24048\nVENDOR_ID_EAPPS = 24049\nVENDOR_ID_ORION_SYSTEMS_INTERNATIONAL = 24050\nVENDOR_ID_SENECA_SOFTWARE_SOLAR_INC = 24051\nVENDOR_ID_WEDO_CONSULTING = 24052\nVENDOR_ID_XSPEDIUS_COMMUNICATIONS = 24053\nVENDOR_ID_NEXTNINE_LTD = 24054\nVENDOR_ID_GOVOLUTION_INC = 24055\nVENDOR_ID_JDI_ICT = 24056\nVENDOR_ID_ROBERT_D_ALLEN = 24057\nVENDOR_ID_ALTCALL_PTY_LTD = 24058\nVENDOR_ID_ZUZAX_LLC = 24059\nVENDOR_ID_ICUBE = 24060\nVENDOR_ID_AMTIUM_COMPUTER_NETWORK_COMMUNICTION_TECH_COLTD = 24061\nVENDOR_ID_KORENIX_TECHNOLOGY_CO_LTD = 24062\nVENDOR_ID_CALL_DIRECT_CELLULAR_SOLUTIONS_PTY_LTD = 24063\nVENDOR_ID_FLORIAN_HAGEDORN_IT_SERVICES = 24064\nVENDOR_ID_TELCOSI = 24065\nVENDOR_ID_BEIJING_WATERTEK_INFORMATION_TECHNOLOGY_COLTD = 24066\nVENDOR_ID_WEBRASKA_DO_BRASIL = 24067\nVENDOR_ID_TIER_3_PTY_LTD = 24068\nVENDOR_ID_IP_SYSTEMS_PTY_LTD = 24069\nVENDOR_ID_AMANO_CORPORATION = 24070\nVENDOR_ID_ZENITEL_RADIOTEKNIK = 24071\nVENDOR_ID_CODE_MERCENARIES_HARD_UND_SOFTWARE_GMBH = 24072\nVENDOR_ID_ABEO_AS = 24073\nVENDOR_ID_ASI_CONTROLS = 24074\nVENDOR_ID_ELIA_NV_SA = 24075\nVENDOR_ID_NATIONAL_INSTITUTE_FOR_PUBLIC_HEALTH_AND_THE_ENVIRONMENT = 24076\nVENDOR_ID_ZEUS_GESELLSCHAFT_FUER_INTEGRATION_UND_KOMMUNIKATION_GMBH = 24077\nVENDOR_ID_ISVA_PROJECT_TEAM_EADS_ISR_FHG_IITB_FGAN_FOM_FGAN_FKIE = 24078\nVENDOR_ID_CACANSKA_BANKA_AD_CACAK = 24079\nVENDOR_ID_KEY_STONE_BV = 24080\nVENDOR_ID_PAXFIRE_INC = 24081\nVENDOR_ID_GTL_LIMITED = 24082\nVENDOR_ID_SECURITECT = 24083\nVENDOR_ID_MANAGED_NETWORK_SOLUTIONS_INC = 24084\nVENDOR_ID_FITRE_SPA = 24085\nVENDOR_ID_MEDIZINISCHE_HOCHSCHULE_HANNOVER = 24086\nVENDOR_ID_INTERNATIONAL_GRID_TRUST_FEDERATION = 24087\nVENDOR_ID_DIAMELLE_INC = 24088\nVENDOR_ID_LEXBOX = 24089\nVENDOR_ID_CENTRAL_LIBRARY_ARISTOTLE_UNIVERSITY_OF_THESSALONIKI = 24090\nVENDOR_ID_SEW_EURODRIVE_GMBH_CO_KG = 24091\nVENDOR_ID_I_WAY_COMPUTERS_BVBA = 24092\nVENDOR_ID_JSC_FORMAT_LINK = 24093\nVENDOR_ID_UNIBWM = 24094\nVENDOR_ID_MIOSOFT_CORPORATION = 24095\nVENDOR_ID_UNIVERSITY_OF_DOUALA = 24096\nVENDOR_ID_THORALF_LINSS = 24097\nVENDOR_ID_SOUTHWEST_YOUTH_COLLABORATIVE = 24098\nVENDOR_ID_HOSANNA_CHRISTIAN_ACADEMY = 24099\nVENDOR_ID_LOGISOFT_AR_LTD_INC = 24100\nVENDOR_ID_BANYAN_TREE_HOTELS_RESORTS_PTE_LTD = 24101\nVENDOR_ID_AERIS_ENTERPRISES_INC = 24102\nVENDOR_ID_DIR_WIESLAWA_ROZYNEK = 24103\nVENDOR_ID_LENNAR_CORPORATION = 24104\nVENDOR_ID_DI_CROSS = 24105\nVENDOR_ID_DAMOVO_DO_BRASIL_S_A = 24106\nVENDOR_ID_XKOTO_INC = 24107\nVENDOR_ID_UAB_ELTERA = 24108\nVENDOR_ID_ATCANET = 24109\nVENDOR_ID_VIGILIX_LLC = 24110\nVENDOR_ID_OPTIVUS_TECHNOLOGY_INC = 24111\nVENDOR_ID_SHORTER_COLLEGE = 24112\nVENDOR_ID_NETZBIOTOP_DRESDEN_EV = 24113\nVENDOR_ID_CITY_OF_TULSA = 24114\nVENDOR_ID_GINIX = 24115\nVENDOR_ID_68KSE = 24116\nVENDOR_ID_IDERA = 24117\nVENDOR_ID_ARTEMIS_DESIGN_GBR = 24118\nVENDOR_ID_ESIMONE = 24119\nVENDOR_ID_JSDAAV_INTERNET_SOLUTIONS_CC = 24120\nVENDOR_ID_CENTRO_NACIONAL_DE_INFROMACIN_Y_COMUNICACIN_EDUCATIVA = 24121\nVENDOR_ID_BRODERSEN_CONTROLS_A_S = 24122\nVENDOR_ID_SPARKASSE_HASLACH_ZELL = 24123\nVENDOR_ID_AQON_LTD = 24124\nVENDOR_ID_OCEANLAKE_ASIA_PTE_LTD = 24125\nVENDOR_ID_JUNXION_INC = 24126\nVENDOR_ID_UUHOSTINGNET = 24127\nVENDOR_ID_CASINO_ARIZONA = 24128\nVENDOR_ID_INTERNATIONAL_ROAD_DYNAMICS_INC = 24129\nVENDOR_ID_ONEFORMATICS = 24130\nVENDOR_ID_THEPLATFORM_FOR_MEDIA_INC = 24131\nVENDOR_ID_ZYPORG = 24132\nVENDOR_ID_CALASSA_LABS_LTD = 24133\nVENDOR_ID_TOREX_RETAIL_SOLUTIONS_GMBH = 24134\nVENDOR_ID_SMARTCOM_BULGARIA_AD = 24135\nVENDOR_ID_SCHUR_PACK_DANMARK_A_S = 24136\nVENDOR_ID_OPTIMUM_COMPUTING_SOLUTIONS = 24137\nVENDOR_ID_JSC_TAXNET = 24138\nVENDOR_ID_RFK_INTERNATIONAL = 24139\nVENDOR_ID_VOICEOBJECTS_AG = 24140\nVENDOR_ID_T_2_DOO = 24141\nVENDOR_ID_BUNYA_TECHNOLOGY_PTY_LTD = 24142\nVENDOR_ID_MALLNET_LTD = 24143\nVENDOR_ID_MOBILLION_BV = 24144\nVENDOR_ID_ECS_GMBH = 24145\nVENDOR_ID_ZONE_SYSTEMS = 24146\nVENDOR_ID_EX_LIBRIS_LTD = 24147\nVENDOR_ID_DATALAB_DO_BRASIL_LTDA = 24148\nVENDOR_ID_MILESTONE_SYSTEMS_A_S = 24149\nVENDOR_ID_TIM_BRASIL = 24150\nVENDOR_ID_INFORSIS_INFORMATICA_Y_FORMACION_SL = 24151\nVENDOR_ID_OTA_MANAGEMENT_LLC = 24152\nVENDOR_ID_DEFENSE_FINANCE_AND_ACCOUNTING_SERVICE = 24153\nVENDOR_ID_MOOG_COMPONENTS_GROUP = 24154\nVENDOR_ID_MISSION_HOPITALS = 24155\nVENDOR_ID_INTELLIANT = 24156\nVENDOR_ID_SPECTRUM_SIGNAL_PROCESSING_INC = 24157\nVENDOR_ID_LANDSTAR_SYSTEM_HOLDINGS_INC = 24158\nVENDOR_ID_NEUREOL_TECHNOLOGIES_PRIVATE_LIMITED = 24159\nVENDOR_ID_COOL_IP = 24160\nVENDOR_ID_MLL_TELECOM_LIMITED = 24161\nVENDOR_ID_CAREWORKS_VOF = 24162\nVENDOR_ID_SUPERMEDIA_INTERNET_PROVIDER = 24163\nVENDOR_ID_KBOSSHU_KFT = 24164\nVENDOR_ID_DIGI_SIGN_LIMITED = 24165\nVENDOR_ID_CENTRO_DE_ESTUDOS_E_SISTEMAS_AVANADOS_DO_RECIFE = 24166\nVENDOR_ID_WEYCO_INC = 24167\nVENDOR_ID_GMAC = 24168\nVENDOR_ID_SUNSETBREW_INC = 24169\nVENDOR_ID_MOTRICITY_INC = 24170\nVENDOR_ID_8E6_TECHNOLOGIES = 24171\nVENDOR_ID_TENASKA_POWER_SERVICES_CO = 24172\nVENDOR_ID_RHO_INC = 24173\nVENDOR_ID_INSTITUTIONAL_SHAREHOLDER_SERVICES_INC = 24174\nVENDOR_ID_SILVER_SERVER_GMBH = 24175\nVENDOR_ID_COMGATE_ENGINEERING_LTD = 24176\nVENDOR_ID_TIVIT_SA = 24177\nVENDOR_ID_STILLWATER_MEDICAL_CENTER_AUTHORITY = 24178\nVENDOR_ID_MINISTERIE_VAN_BINNENLANDSE_ZAKEN_EN_KONINKRIJKSRELATIES = 24179\nVENDOR_ID_TGUSTACOM_CA = 24180\nVENDOR_ID_FRI_JADO_BV = 24181\nVENDOR_ID_SRH = 24182\nVENDOR_ID_VIMIO_PLC = 24183\nVENDOR_ID_MEDNET_SERVICE_FR_RZTE_AG = 24184\nVENDOR_ID_KVALIX_AUTOMATIKA_KFT = 24185\nVENDOR_ID_NETSOL_NETWORK_SOLUTIONS_OY = 24186\nVENDOR_ID_LAMBDASTREAM = 24187\nVENDOR_ID_MAIL_OBJECT = 24188\nVENDOR_ID_CAIN_COMPUTING = 24189\nVENDOR_ID_DISTRIBUTED_SYSTEMS_SERVICES_INC = 24190\nVENDOR_ID_DIGITAL_FUGUE = 24191\nVENDOR_ID_TRIAL_N_ERROR = 24192\nVENDOR_ID_STRANDBYGAARD = 24193\nVENDOR_ID_MARY_KAY_INC = 24194\nVENDOR_ID_I5KNET = 24195\nVENDOR_ID_OSEB_NV = 24196\nVENDOR_ID_COLLIERS_TURLEY_MARTIN_TUCKER = 24197\nVENDOR_ID_NETCORDIA_INC = 24198\nVENDOR_ID_PRIMAGRAPHICS_LTD = 24199\nVENDOR_ID_QUALITY_SOFTWARE_SOLUTIONS_LTD = 24200\nVENDOR_ID_ADRENIO_GMBH = 24201\nVENDOR_ID_MIKRONIKA = 24202\nVENDOR_ID_WELLINGTON_TECHNOLOGY_INC = 24203\nVENDOR_ID_RANDOLPH_PRODUCTS_COMPANY = 24204\nVENDOR_ID_JUPITER_TECHNOLOGYWUXICOLTD = 24205\nVENDOR_ID_EGROUP_SERVICES_LTD = 24206\nVENDOR_ID_DEIMOS_SPACE_SL = 24207\nVENDOR_ID_CYSTELCOM_SISTEMAS_SA = 24208\nVENDOR_ID_MWARE_CZ_SRO = 24209\nVENDOR_ID_COMWORTH_COLTD = 24210\nVENDOR_ID_SOLENT_TECHNOLOGY_LTD = 24211\nVENDOR_ID_CONEXIM_AUSTRALIA_PTY_LTD = 24212\nVENDOR_ID_OXFORD_HEALTH_PLANS_LLC_SUBSIDIARY_OF_UNITEDHEALTH_GROUP = 24213\nVENDOR_ID_MOUNT_HOLYOKE_COLLEGE_COMPUTER_SCIENCE_DEPARTMENT = 24214\nVENDOR_ID_REED_TECHNOLOGY_AND_INFORMATION_SERVICES_INC = 24215\nVENDOR_ID_UPTIME_SOFTWARE_INC = 24216\nVENDOR_ID_J_BUZZ_LLC = 24217\nVENDOR_ID_METAWEB_TECHNOLOGIES_INC = 24218\nVENDOR_ID_NUBRIDGES_LLC = 24219\nVENDOR_ID_MARCELO_RINESI = 24220\nVENDOR_ID_DONORWARE_LLC = 24221\nVENDOR_ID_RESOLUTE_NETWORKS_LTD = 24222\nVENDOR_ID_FABRYKA_STRON_INTERNETOWYCH_SP_Z_OO = 24223\nVENDOR_ID_SOUTHERN_REGIONAL_EDUCATION_BOARD = 24224\nVENDOR_ID_FORMULA_TELECOM_SOLUTIONS = 24225\nVENDOR_ID_BRAXCOMM_ELETRNICA_LTDA = 24226\nVENDOR_ID_NEGESO_UKRAINE_LTD = 24227\nVENDOR_ID_HOT_TECHNOLOGY = 24228\nVENDOR_ID_ARVATO_TECHNOLOGY_GMBH = 24229\nVENDOR_ID_VERINT_SYSTEMS_CANADA_INC = 24230\nVENDOR_ID_GUFI_GRUPPO_UTENTI_FREEBSD_ITALIA = 24231\nVENDOR_ID_6TH_SENSE_SOFTWARE_INC = 24232\nVENDOR_ID_IKATU = 24233\nVENDOR_ID_VUCOMP = 24234\nVENDOR_ID_HANNUM_COMPUTER_SERVICE = 24235\nVENDOR_ID_NSTUDIOCORP = 24236\nVENDOR_ID_RESOURCECHAIN_INC = 24237\nVENDOR_ID_PACLABS_TECHNOLOGY_AND_INNOVATION_INC = 24238\nVENDOR_ID_V_SHINE_CO_LTD = 24239\nVENDOR_ID_TONGSOFT_TECH = 24240\nVENDOR_ID_ACCUCAST_INC = 24241\nVENDOR_ID_SIMWORKS_INTERNATIONAL_LIMITED = 24242\nVENDOR_ID_AMRITA_INSTITUTE_OF_MEDICAL_SCIENCES = 24243\nVENDOR_ID_INTROMOBILE_CO_LTD = 24244\nVENDOR_ID_OSS_CORPORATON = 24245\nVENDOR_ID_MGP_MOSVODOKANAL = 24246\nVENDOR_ID_BETTGE = 24247\nVENDOR_ID_STOCKWAY_OY = 24248\nVENDOR_ID_CLINIQUE_SAINT_LUC_BOUGE = 24249\nVENDOR_ID_MATRICE_SYSTEM_SAS = 24250\nVENDOR_ID_BANCA24_7_SPA = 24251\nVENDOR_ID_ESG_GMBH = 24252\nVENDOR_ID_SYSTEMS_TRUST_CO_LTD = 24253\nVENDOR_ID_C4_SOLUTIONS_OY = 24254\nVENDOR_ID_OUTPOST24_AB = 24255\nVENDOR_ID_DEUTSCHE_WERTPAPIERSERVICE_BANK_AG = 24256\nVENDOR_ID_IDTECT = 24257\nVENDOR_ID_MINISTRY_OF_THE_FLEMISH_COMMUNITY = 24258\nVENDOR_ID_ACHILLES_INFORMATION_LIMITED = 24259\nVENDOR_ID_VIELAGE = 24260\nVENDOR_ID_MOBEON_AB = 24261\nVENDOR_ID_TEAM_SA = 24262\nVENDOR_ID_UP_TO_DATA_PROFESSIONAL_SERVICES_GMBH = 24263\nVENDOR_ID_NEUSTA_GMBH = 24264\nVENDOR_ID_THE_BRITISH_MUSEUM = 24265\nVENDOR_ID_INFOSCOPE_KFT = 24266\nVENDOR_ID_DIRECTORY_ENABLED_SOLUTIONS = 24267\nVENDOR_ID_OPENDIUM_LTD = 24268\nVENDOR_ID_CR2_LTD = 24269\nVENDOR_ID_S3_SRL_SERVIZI_SOLUZIONI_SISTEMI = 24270\nVENDOR_ID_NESSUS_INTERNET_SERVICES_FLORIAN_SCHICKER = 24271\nVENDOR_ID_UNIVERSIT_DELLA_SVIZZERA_ITALIANA = 24272\nVENDOR_ID_NIHILISTICORGUK = 24273\nVENDOR_ID_BEYOND_SECURITY_INC = 24274\nVENDOR_ID_IUT_VERDUN = 24275\nVENDOR_ID_UNIVERSIDAD_DE_ORIENTE = 24276\nVENDOR_ID_TIAXA_DO_BRASIL_LTDA = 24277\nVENDOR_ID_UNIVERSIT_CAMPUS_BIO_MEDICO = 24278\nVENDOR_ID_LDAP_ADMINISTRATION_CONSOLE_OPENSOURCE_PROJECT = 24279\nVENDOR_ID_HDL_COREN_CONE = 24280\nVENDOR_ID_FAMILY_HEALTH_INTERNATIONAL = 24281\nVENDOR_ID_STACKFRAME_LLC = 24282\nVENDOR_ID_DNS_LTD = 24283\nVENDOR_ID_WESDE = 24284\nVENDOR_ID_NOVAX_INDUSTRIES_CORPORATION = 24285\nVENDOR_ID_HUMANCONCEPTS = 24286\nVENDOR_ID_TELEX_COMMUNICATION_INC = 24287\nVENDOR_ID_BHMS_WEBHOSTING = 24288\nVENDOR_ID_HOTFEET_GMBH = 24289\nVENDOR_ID_DATORFRENINGEN_VID_LU_LTH = 24290\nVENDOR_ID_E_PLANIT_SYSTEMS_INC = 24291\nVENDOR_ID_BRAKKE_SCHAFNITZ_INS_BROKERS_INC = 24292\nVENDOR_ID_TOYOTA_NEW_ZEALAND_LTD = 24293\nVENDOR_ID_AIR_BROADBAND_COMMUNICATIONS = 24294\nVENDOR_ID_PICKWICK_CONSULTING = 24295\nVENDOR_ID_DENSO_WAVE_INCORPORATED = 24296\nVENDOR_ID_SONIC_SOLUTIONS = 24297\nVENDOR_ID_FREUDENBERG_DICHTUNGS_SCHWINGUNGSTECHNIK_GMBH_COKG = 24298\nVENDOR_ID_GO4TEAMS_GMBH = 24299\nVENDOR_ID_WOTIF = 24300\nVENDOR_ID_STJ_COMPANY = 24301\nVENDOR_ID_NETWORK_CONSTRUCTOR_CORE_CONSTRUCTOR_KUN_SHAN_UNIVERSITY = 24302\nVENDOR_ID_PEGACAT_PTY_LTD = 24303\nVENDOR_ID_ARGUSCONNECT_PTY_LTD = 24304\nVENDOR_ID_INBOS_PTY_LTD = 24305\nVENDOR_ID_3_VIAS_TECHNOLOGIES = 24306\nVENDOR_ID_ACTIVESEC_SA = 24307\nVENDOR_ID_MEDIA_TELECOM_VENTURES = 24308\nVENDOR_ID_TERRASCALE_TECHNOLOGIES_INC = 24309\nVENDOR_ID_MEDICAL_INFORMATION_TECHNOLOGY_INC = 24310\nVENDOR_ID_SUNHELP = 24311\nVENDOR_ID_IDENTITY_AUTOMATION_LP = 24312\nVENDOR_ID_TIENDALINUXCOM = 24313\nVENDOR_ID_WHAT_CREEK = 24314\nVENDOR_ID_FATIH_UNIVERSITY = 24315\nVENDOR_ID_IT_BRIDGENET_SRO = 24316\nVENDOR_ID_TORRINIORG = 24317\nVENDOR_ID_INTOUCH_BV = 24318\nVENDOR_ID_VOCONS_IT_CONSULTING_GMBH = 24319\nVENDOR_ID_ELCOM_GROUP = 24320\nVENDOR_ID_NETMAGIC_LTD = 24321\nVENDOR_ID_PETASTOR_INC = 24322\nVENDOR_ID_DEEPHAVEN_LTD = 24323\nVENDOR_ID_ELECTRIC_TRONICS_INCORPORATED = 24324\nVENDOR_ID_OGL_COMPUTER_SERVICES_GROUP_LTD = 24325\nVENDOR_ID_EXSYS = 24326\nVENDOR_ID_ESTACHA_PROYECTOS_Y_SERVICIOS = 24327\nVENDOR_ID_SPIRIT_AEROSYSTEMS_INC = 24328\nVENDOR_ID_LIXIL = 24329\nVENDOR_ID_IN_REACH_TECHNOLOGY = 24330\nVENDOR_ID_EVOLIX = 24331\nVENDOR_ID_HARDWARE_ONLINE_AS = 24332\nVENDOR_ID_FH_INGOLSTADT = 24333\nVENDOR_ID_EADS_DS_UK_LTD = 24334\nVENDOR_ID_STOREWIZ_INC = 24335\nVENDOR_ID_ATM_EXPRESS_INC = 24336\nVENDOR_ID_MONSTER_CABLE_PRODUCTS_INC = 24337\nVENDOR_ID_SITUS_MANAGEMENT_INC = 24338\nVENDOR_ID_ADLINK_TECHNOLOGY_INC = 24339\nVENDOR_ID_MACALESTER_COLLEGE = 24340\nVENDOR_ID_PONTIS_INC = 24341\nVENDOR_ID_FIO_LABS_LLC = 24342\nVENDOR_ID_ROKONET_ELECTRONICS_LTD = 24343\nVENDOR_ID_ESPECTRUM_INTERNET_SOLUTION_GMBH = 24344\nVENDOR_ID_XSITE_GMBH = 24345\nVENDOR_ID_ADAWAY_CONSULTING = 24346\nVENDOR_ID_MAGICPOT_INC = 24347\nVENDOR_ID_GPTECH_GMBH = 24348\nVENDOR_ID_FRANK_AGERHOLM = 24349\nVENDOR_ID_SENSORIA_CORPORATION = 24350\nVENDOR_ID_LINUX_NETWORK_CARE_INC = 24351\nVENDOR_ID_ALPHA_CENTAURI_SOFTWARE_LIMITED = 24352\nVENDOR_ID_MEDIA_TECHNOLOGY_SYSTEMS_INC = 24353\nVENDOR_ID_SECSCEND_LLC = 24354\nVENDOR_ID_LEMON_IT_CO_LTD = 24355\nVENDOR_ID_SOLINUS_INC = 24356\nVENDOR_ID_CD_TELEMATIKA_A_S = 24357\nVENDOR_ID_NOMICS = 24358\nVENDOR_ID_DEUTSCHE_RENTENVERSICHERUNG_MITTELDEUTSCHLAND = 24359\nVENDOR_ID_TRANSMITTON_LTD = 24360\nVENDOR_ID_INNOVASON = 24361\nVENDOR_ID_DUQUESNE_UNIVERSITY = 24362\nVENDOR_ID_SUPER_STAR_ENTERPRISES = 24363\nVENDOR_ID_ON_SEMICONDUCTOR = 24364\nVENDOR_ID_CONSTELLATION_ENERGY = 24365\nVENDOR_ID_GUIORG = 24366\nVENDOR_ID_SOMERDATA_LTD = 24367\nVENDOR_ID_PAAT_SOFTWARE = 24368\nVENDOR_ID_MEDEM_INC = 24369\nVENDOR_ID_CHANG_CHENG_INFORMATION_CONSULTANT_CO_LTD = 24370\nVENDOR_ID_LONDON_BUSINESS_SCHOOL = 24371\nVENDOR_ID_EXIIS_CORPORATION = 24372\nVENDOR_ID_INFORMATION_UNLIMITED = 24373\nVENDOR_ID_LIFE_SCIENCES_COLLABORATIVE_ACCESS_TEAM = 24374\nVENDOR_ID_ALEKSANDAR_MILIVOJEVIC = 24375\nVENDOR_ID_LANDESHAUPTSTADT_MNCHEN = 24376\nVENDOR_ID_NASSAUISCHE_SPARKASSE = 24377\nVENDOR_ID_KIZOOM_LTD = 24378\nVENDOR_ID_TRACEWELL_POWER = 24379\nVENDOR_ID_CERTEGY = 24380\nVENDOR_ID_JOACHIM_UHR = 24381\nVENDOR_ID_CH2M_HILL_LTD = 24382\nVENDOR_ID_ORANGE_CABLE_CORPORATION = 24383\nVENDOR_ID_CAERUS_INC = 24384\nVENDOR_ID_CRYPTGUARD = 24385\nVENDOR_ID_STM_NETWORKS_INC = 24386\nVENDOR_ID_SOFTWARE_ENGINEERING_FABIANI = 24387\nVENDOR_ID_WASHINGTON_STATE_BAR_ASSOCIATION = 24388\nVENDOR_ID_SUZHOU_KEDA_TECHNOLOGY_COMPANY_LTD = 24389\nVENDOR_ID_IRI_COMMUNICATIONS_INC = 24390\nVENDOR_ID_DOREMILABS_INC = 24391\nVENDOR_ID_FLEXAGONAL_SYSTEMS_LTD = 24392\nVENDOR_ID_OFFICE_NATIONAL_DES_FORETS = 24393\nVENDOR_ID_CONCURRENT_TECHNOLOGIES_PLC = 24394\nVENDOR_ID_DATAMAT_SPA = 24395\nVENDOR_ID_XINJIANG_SAILING_INFORMATION_TECHNOLOGY_CO_LTD = 24396\nVENDOR_ID_LIBERTAS_SOLUCOES_EM_TI_LTDA = 24397\nVENDOR_ID_ESPIRITO_SANTO_CENTRAIS_ELETRICAS_SA = 24398\nVENDOR_ID_TELSOURCE_CORPORATION = 24399\nVENDOR_ID_TNS_BUSINESS_SOLUTIONS_SA = 24400\nVENDOR_ID_KANTON_BASEL_STADT = 24401\nVENDOR_ID_OMGEO_LLC = 24402\nVENDOR_ID_MINISTERIO_DA_CULTURA = 24403\nVENDOR_ID_DROIDOS_PROJECT = 24404\nVENDOR_ID_TC_SOFTWARE_INC = 24405\nVENDOR_ID_DYNAMIC_BIOMETRICS_LTD = 24406\nVENDOR_ID_ONAIR_USA_INC = 24407\nVENDOR_ID_VIDEO_TECHNICS_INC = 24408\nVENDOR_ID_RISING_SYSTEM_INC = 24409\nVENDOR_ID_WHEEL_SP_Z_OO = 24410\nVENDOR_ID_MULTI_SERVICE_FORUM = 24411\nVENDOR_ID_BUNDESAMT_FR_VERBRAUCHERSCHUTZ_UND_LEBENSMITTELSICHERHEIT = 24412\nVENDOR_ID_UNIVERSITY_OF_CAMBRIDGE_DEPARTMENT_OF_ARCHAEOLOGY = 24413\nVENDOR_ID_CORE_CORPORATION = 24414\nVENDOR_ID_UNIMATRIX_ONE = 24415\nVENDOR_ID_NC_INTERACTIVE = 24416\nVENDOR_ID_INFOWEAPONS_CORPORATION = 24417\nVENDOR_ID_INFINICO_CORPORATION = 24418\nVENDOR_ID_RED_CROW_GROUP_LLC = 24419\nVENDOR_ID_EUROPEAN_AIRLIFT_CENTRE = 24420\nVENDOR_ID_ROWEB_DEVELOPMENT = 24421\nVENDOR_ID_INFORMATION_MANAGEMENT_SERVICES = 24422\nVENDOR_ID_XTEK_COMPUTER = 24423\nVENDOR_ID_IDSRDL = 24424\nVENDOR_ID_MONKSOFT = 24425\nVENDOR_ID_METAVIZE_INC = 24426\nVENDOR_ID_COYOTE_POINT_SYSTEMS_INC = 24427\nVENDOR_ID_NUSOFT_SYSTEM_INC = 24428\nVENDOR_ID_MANGOLD_ELEKTRONIK = 24429\nVENDOR_ID_RED_EARTH_SYSTEMS_AB = 24430\nVENDOR_ID_ACCEL_INSTRUMENTS_GMBH = 24431\nVENDOR_ID_UIIP_NASB = 24432\nVENDOR_ID_YUNET_INTERNATIONAL_DOO = 24433\nVENDOR_ID_OHIO_BUREAU_OF_WORKERS_COMPENSATION = 24434\nVENDOR_ID_UBITECH_SYSTEMS_INC = 24435\nVENDOR_ID_POWER_DISTRIBUTION_INC = 24436\nVENDOR_ID_DEIGHTIME_LLC = 24437\nVENDOR_ID_OAO_ROEDUNET = 24438\nVENDOR_ID_JBG_DEVELOPMENT_GROUP_LLC = 24439\nVENDOR_ID_XSIGO_SYSTEMS = 24440\nVENDOR_ID_ODDBITCOM = 24441\nVENDOR_ID_SMARTX_GMBH = 24442\nVENDOR_ID_COLBY_SAS = 24443\nVENDOR_ID_UNIBRIDGE_AS = 24444\nVENDOR_ID_CARSTEN_HEINRICI = 24445\nVENDOR_ID_TILIAR_SERVICES = 24446\nVENDOR_ID_ST_BASILS_HOMES = 24447\nVENDOR_ID_WEBDE_GMBH = 24448\nVENDOR_ID_KETSUJIN_STUDIOS = 24449\nVENDOR_ID_ALPHAGEEK_INC = 24450\nVENDOR_ID_TRANSITIONAL_DATA_SERVICES_INC = 24451\nVENDOR_ID_AXI = 24452\nVENDOR_ID_BANK_HAPOALIM_LTD = 24453\nVENDOR_ID_SCHENKER_JOYAU = 24454\nVENDOR_ID_ISOTOMA_LIMITED = 24455\nVENDOR_ID_CODA_PLC = 24456\nVENDOR_ID_BWMS_SOLUES_MVEIS_LTDA = 24457\nVENDOR_ID_WISE_TELECOMUNICAES_LTDA = 24458\nVENDOR_ID_SASKATCHEWAN_WHEAT_POOL_INC = 24459\nVENDOR_ID_FORTEAN_TECHNOLOGIES_INC = 24460\nVENDOR_ID_ADVANCED_SOLUTIONS_INTERNATIONAL_INC = 24461\nVENDOR_ID_E_SAUCE_LIMITED = 24462\nVENDOR_ID_BANCO_DE_COSTA_RICA = 24463\nVENDOR_ID_FIRST_CITIZENS_BANK = 24464\nVENDOR_ID_BELNET = 24465\nVENDOR_ID_MOVEL_CONSULTING = 24466\nVENDOR_ID_WALKGAME = 24467\nVENDOR_ID_LK_PRODUKT_CZ_AS = 24468\nVENDOR_ID_UNIVERSITY_OF_LEEDS = 24469\nVENDOR_ID_BOSTON_MAINE_AIRWAYS_CORP = 24470\nVENDOR_ID_OMNIPHASIC_INSTITUTE_LLC = 24471\nVENDOR_ID_UNIVERSITY_OF_VIRGINIAS_COLLEGE_AT_WISE = 24472\nVENDOR_ID_NETMEDIA_INC = 24473\nVENDOR_ID_JACOBACCI = 24474\nVENDOR_ID_OPTENA_CORPORATION = 24475\nVENDOR_ID_SERVER_SIDE_SYSTEMS_LTD = 24476\nVENDOR_ID_EENTERPHACE = 24477\nVENDOR_ID_MEGATRADE_CORP = 24478\nVENDOR_ID_EON_BUSINESS_SERVICES_CZECH_REPUBLIC_SRO = 24479\nVENDOR_ID_ONCAMPUSUK = 24480\nVENDOR_ID_WARSAW_DATA_CENTER_SP_Z_OO = 24481\nVENDOR_ID_LIGHT_BACKUP_SERVICES = 24482\nVENDOR_ID_ISO_NEW_ENGLAND_INC = 24483\nVENDOR_ID_ADVANCED_BROADCAST_COMPONENTS_LTD = 24484\nVENDOR_ID_WEBMASTERS_AKADEMIE_GMBH = 24485\nVENDOR_ID_MICROMEDIA_INTERNATIONAL = 24486\nVENDOR_ID_BULLETPROOF_SOLUTIONS_INC = 24487\nVENDOR_ID_UNITED_SOLUTIONS_INTERNATIONAL = 24488\nVENDOR_ID_BRUT = 24489\nVENDOR_ID_THE_PHONE_HOUSE_TELECOM_GMBH = 24490\nVENDOR_ID_ASOCIACIN_CENTRO_DE_COOPERACIN_INTERBANCARIA = 24491\nVENDOR_ID_CONSORZIO_TORINO_TIME = 24492\nVENDOR_ID_SAFEND_LTD = 24493\nVENDOR_ID_EXTRA_PROF_SRL = 24494\nVENDOR_ID_COMUNDUS_UNTERNEHMENSBERATUNG_GMBH = 24495\nVENDOR_ID_WESTERN_TELEMATIC_INC_2 = 24496\nVENDOR_ID_KMDCOMTW = 24497\nVENDOR_ID_INTERPRISE_PTY_LTD = 24498\nVENDOR_ID_EUROPEAN_AVIATION_SAFETY_AGENCY = 24499\nVENDOR_ID_MORKOM_GMBH = 24500\nVENDOR_ID_GREEN_HAT_CONSULTING_LTD = 24501\nVENDOR_ID_WANDERING_BARQUE = 24502\nVENDOR_ID_ICONICS_INC = 24503\nVENDOR_ID_CENTRL_MOSODK_SZOLGLTAT_RSZVNYTRSASG = 24504\nVENDOR_ID_EMERGING_SYSTEMS = 24505\nVENDOR_ID_OSAKI_ELECTRIC_COLTD = 24506\nVENDOR_ID_PEADAR_GRANT = 24507\nVENDOR_ID_STAGNINET = 24508\nVENDOR_ID_COMMONWEALTH_OF_MASSACHUSETTS = 24509\nVENDOR_ID_SHANGHAI_SIMED_TECH_LTD = 24510\nVENDOR_ID_FLOWINSPECT_SPA = 24511\nVENDOR_ID_BEIJING_HUGELAND_TECHNOLOGIES_COLTD = 24512\nVENDOR_ID_FINNISH_GAME_AND_FISHERIES_RESEARCH_INSTITUTE = 24513\nVENDOR_ID_RIVULET_COMMUNICATIONS_INC = 24514\nVENDOR_ID_ROC_SOFTWARE_SYSTEMS_INC = 24515\nVENDOR_ID_CONAIR_CORPORATION = 24516\nVENDOR_ID_LTIA = 24517\nVENDOR_ID_GREAT_WEST_LIFE_ANNUITY_INSURANCE_COMPANY = 24518\nVENDOR_ID_TRUSTWAVE_HOLDINGS_INC_FORMERLY_XRAMP_SECURITY_SERVICES_INC = 24519\nVENDOR_ID_TOKASH_CONSULTING_INC = 24520\nVENDOR_ID_SUPPLYFX_INC = 24521\nVENDOR_ID_PT_EXCELCOMINDO_PRATAMA_TBK = 24522\nVENDOR_ID_INFEUROPE_SA = 24523\nVENDOR_ID_RHEINENERGIE_AG = 24524\nVENDOR_ID_TWISTED_PAIR_SOLUTIONS_INC_2 = 24525\nVENDOR_ID_ST_JAMES_THE_GREAT_RC_PRIMARY_NURSERY_SCHOOL = 24526\nVENDOR_ID_COMMAX_COLTD = 24527\nVENDOR_ID_PROGRAMDUON_AB = 24528\nVENDOR_ID_SYSTEMBETREUUNGCOM = 24529\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_AMAZONAS = 24530\nVENDOR_ID_METIS_COMMUNICATION_CO_LTD = 24531\nVENDOR_ID_INTELLIGUARD_IT = 24532\nVENDOR_ID_AKVI_PATENT_CO = 24533\nVENDOR_ID_GORDANO_LTD = 24534\nVENDOR_ID_MD_SYSTEMS = 24535\nVENDOR_ID_DAS = 24536\nVENDOR_ID_NNMI = 24537\nVENDOR_ID_MORNING = 24538\nVENDOR_ID_IST_HOLDINGS_PTY_LTD = 24539\nVENDOR_ID_BETTY_TV_ENTWICKLUNGS_GMBH = 24540\nVENDOR_ID_BEIJING_GRANDROLE_SOFTWARE_COLTD = 24541\nVENDOR_ID_ALBERT_EINSTEIN_GYMNASIUM = 24542\nVENDOR_ID_BLACK_EYED_MOON = 24543\nVENDOR_ID_JSC_ELTEL = 24544\nVENDOR_ID_URSUS_TECHNOLOGIES_INC = 24545\nVENDOR_ID_SERVERCAVE_INC = 24546\nVENDOR_ID_LINUX_USERS_GROUP_SINGAPORE = 24547\nVENDOR_ID_OUTSYS_SNC = 24548\nVENDOR_ID_TRIPLE_M_SYSTEMS_AG = 24549\nVENDOR_ID_EDORAS_GMBH_CO_KG = 24550\nVENDOR_ID_CPU_DOO = 24551\nVENDOR_ID_INVERSE_PATH_LTD = 24552\nVENDOR_ID_PROMPTTEC_PRODUCT_MANAGEMENT_GMBH = 24553\nVENDOR_ID_CHURCH_OF_THE_NAZARENE = 24554\nVENDOR_ID_RACKMASTER_SYSTEMS_INC = 24555\nVENDOR_ID_STARWAVE_TECHNOLOGIESINC = 24556\nVENDOR_ID_OBCANSKE_SDRUZENI_HKFREE = 24557\nVENDOR_ID_ARCADE_ICT_BV = 24558\nVENDOR_ID_NET_TECNOLOGIES = 24559\nVENDOR_ID_INODE_GMBH = 24560\nVENDOR_ID_CELLETRA_LTD = 24561\nVENDOR_ID_BRIDGE_TECHNOLOGIES_CO_AS = 24562\nVENDOR_ID_KERFI_AB_AVDELNING_NORGE = 24563\nVENDOR_ID_HOLON_CORP = 24564\nVENDOR_ID_YUBA_COMMUNITY_COLLEGE_DISTRICT = 24565\nVENDOR_ID_KOREANAIR = 24566\nVENDOR_ID_YIT_CORPORATION = 24567\nVENDOR_ID_DAWNSPILL_LTD = 24568\nVENDOR_ID_DIRECTNEWS_AG = 24569\nVENDOR_ID_OPENWIRED = 24570\nVENDOR_ID_UNIWANBE = 24571\nVENDOR_ID_TOTALTEL_TELECOMMUNICATION_LTD = 24572\nVENDOR_ID_MASSACHUSETTS_BOARD_OF_LIBRARY_COMMISSIONERS = 24573\nVENDOR_ID_OPSERA_LTD = 24574\nVENDOR_ID_TRANZEO_WIRELESS_TECHNOLOGIES_INC = 24575\nVENDOR_ID_HL7_LITHUANIA = 24576\nVENDOR_ID_TOSHARECOMU_LLC = 24577\nVENDOR_ID_IDSIGNET = 24578\nVENDOR_ID_AUSTRALIAN_STYLE_PTY_LTD = 24579\nVENDOR_ID_TIETOENATOR_BROADCASTING_IT_OY = 24580\nVENDOR_ID_ZEMP_INFORMATIK = 24581\nVENDOR_ID_CREDATIV_GMBH = 24582\nVENDOR_ID_GUERRIER = 24583\nVENDOR_ID_NAGOYA_UNIVERSITY = 24584\nVENDOR_ID_CASSIANO_MORGADO_DE_AQUINO_ME = 24585\nVENDOR_ID_BA_SYSTEMS = 24586\nVENDOR_ID_JUDSON_COLLEGE = 24587\nVENDOR_ID_AUTOMATIC_IT_CORPORATION = 24588\nVENDOR_ID_REDOC_INC = 24589\nVENDOR_ID_BRISTOL_TECHNOLOGY_INC = 24590\nVENDOR_ID_MARCHEX_INC = 24591\nVENDOR_ID_BRAZOS_COUNTY_TEXAS = 24592\nVENDOR_ID_THINK_ZONE_SC = 24593\nVENDOR_ID_MYOB_AUSTRALIA_E1_PTY_LTD_FORMERLY_ILISYS_WEB_HOSTING_PTY_LTD = 24594\nVENDOR_ID_SAFARI_VIDEO_NETWORKS_LLC = 24595\nVENDOR_ID_ASCENT_TECHNOLOGY_INC = 24596\nVENDOR_ID_NRWBANK = 24597\nVENDOR_ID_NC_CABLE_PTY_LTD_T_AS_NEIGHBOURHOOD_CABLE = 24598\nVENDOR_ID_DOWNEY_SAVINGS_AND_LOAN_ASSOCIATION_FA = 24599\nVENDOR_ID_EDI_BRANCHSHANGHAI_TELECOM_CORPORATION_LTD = 24600\nVENDOR_ID_PREMICARE_AB = 24601\nVENDOR_ID_SIEMENS_COM_EN_PSY_DB = 24602\nVENDOR_ID_PEAVEY_ELECTRONICS_CORPORATION = 24603\nVENDOR_ID_COSMOSKEY = 24604\nVENDOR_ID_OWL_COMPUTING_TECHNOLOGIES_INC = 24605\nVENDOR_ID_THE_PEOPLES_REPUBLIC_OF_AMES = 24606\nVENDOR_ID_DRYSTONE = 24607\nVENDOR_ID_CENTRE_HOSPITALIER_DE_LAGNY_MARNE_LA_VALLE = 24608\nVENDOR_ID_R_S_SOFTWARE_INDIA_LTD = 24609\nVENDOR_ID_GEMEENTEBESTUUR_SINT_GILLIS_WAAS = 24610\nVENDOR_ID_BAPTIST_MEMORIAL_HEALTH_CARE_CORPORATION = 24611\nVENDOR_ID_FUJITSU_HONG_KONG_LTD = 24612\nVENDOR_ID_KINGSTON_UNIVERSITY = 24613\nVENDOR_ID_JAKOTA_DESIGN_GROUP_GMBH = 24614\nVENDOR_ID_BCOMP_GMBH = 24615\nVENDOR_ID_CROSSPOINT = 24616\nVENDOR_ID_NMS_SOFTWARE_INC = 24617\nVENDOR_ID_BOXALINO_AG = 24618\nVENDOR_ID_MOSDAN_TECHNOLOGY_COLTD = 24619\nVENDOR_ID_TECNOSIS_SA = 24620\nVENDOR_ID_TAZZ_NETWORKS_INC = 24621\nVENDOR_ID_NETCO_GMBH_HAMBURG = 24622\nVENDOR_ID_SAMSUNG_THALES_CO_LTD = 24623\nVENDOR_ID_EUROCABLELABS = 24624\nVENDOR_ID_LUXCORE_OPTRONICS_INC = 24625\nVENDOR_ID_LIME_BROKERAGE_LLC = 24626\nVENDOR_ID_VITAS = 24627\nVENDOR_ID_CXR_LARUS_CORPORATION = 24628\nVENDOR_ID_TELIO_AS = 24629\nVENDOR_ID_SKINKERS_LTD = 24630\nVENDOR_ID_MEDIAPROXY_PTY_LTD = 24631\nVENDOR_ID_COREDGE_NETWORKS_INC = 24632\nVENDOR_ID_TOYO_RADIO_SYSTEMS_COLTD = 24633\nVENDOR_ID_ERICPOL_TELECOM_SP_Z_OO = 24634\nVENDOR_ID_ALPS_ELECTRIC_EUROPA_GMBH = 24635\nVENDOR_ID_XPASS_TECHNOLOGIES_CO_LTD = 24636\nVENDOR_ID_NETWAVE_CO_LTD = 24637\nVENDOR_ID_JOTSPOT_INC = 24638\nVENDOR_ID_ELECOM_SCSI = 24639\nVENDOR_ID_NOVA_TECHNOLOGIES = 24640\nVENDOR_ID_ALLODIAL_SOLUTIONS_INC = 24641\nVENDOR_ID_UNIVERSITY_OF_SARAJEVO_FACULTY_OF_ELECTRICAL_ENGINEERING = 24642\nVENDOR_ID_CEDVAL_INFO_INC = 24643\nVENDOR_ID_APPLIED_BROADBAND_INC = 24644\nVENDOR_ID_E_DMZ_SECURITY_LLC = 24645\nVENDOR_ID_FONNER = 24646\nVENDOR_ID_NTC_ATLAS = 24647\nVENDOR_ID_SL_EDV_DIENSTLEISTUNGEN = 24648\nVENDOR_ID_MAINSKILL_TECHNOLOGIES_GMBHCOKG = 24649\nVENDOR_ID_CONTROL_SYSTEMS_SRL_2 = 24650\nVENDOR_ID_RONGJI_NETWORK_SECURITY_TECHNOLOGY_CO_LTD = 24651\nVENDOR_ID_EVERBEE_NETWORKS = 24652\nVENDOR_ID_STUDEC = 24653\nVENDOR_ID_NPO_TRUSTGEAR = 24654\nVENDOR_ID_APPLIED_BROADBAND_INC_2 = 24655\nVENDOR_ID_PRE_EMPTIVE_LIMITED = 24656\nVENDOR_ID_TCSYS_LIMITED = 24657\nVENDOR_ID_INTIVO = 24658\nVENDOR_ID_CARINGO_INC = 24659\nVENDOR_ID_RAPID_MOBILE_PTY_LTD = 24660\nVENDOR_ID_WM_DATA_INFRA_SOLUTIONS_AB = 24661\nVENDOR_ID_DIGITAL_INSTRUMENTS_SRL = 24662\nVENDOR_ID_NORVENTURE_LTDA = 24663\nVENDOR_ID_DELAWARE_TECHNICAL_AND_COMMUNITY_COLLEGE = 24664\nVENDOR_ID_BYTEPARK = 24665\nVENDOR_ID_CAMELCOM = 24666\nVENDOR_ID_ATLANTA_TECHNICAL_CONSULTANTS_LLC = 24667\nVENDOR_ID_QUAY_SECURITY_LTD = 24668\nVENDOR_ID_BEIJING_MOBILE_INTERACTIVE_CO_LTD = 24669\nVENDOR_ID_GEMINI_OBSERVATORY = 24670\nVENDOR_ID_VIENNA_UNIVERSITY = 24671\nVENDOR_ID_WATKINS_MFG_INC = 24672\nVENDOR_ID_SERVERENGINES_LLC = 24673\nVENDOR_ID_LINZER_TECHNIKUM_LITEC = 24674\nVENDOR_ID_NORDH_SISTEMAS_DE_CONTROLE_LTDA = 24675\nVENDOR_ID_APPLIED_VOICE_SPEECH_TECHNOLOGIES_INC = 24676\nVENDOR_ID_NEXGEN_COMMUNICATIONS_LLC = 24677\nVENDOR_ID_OKLAHOMA_CITY_UNIVERSITY = 24678\nVENDOR_ID_CHINA_SPORTS_LOTTERY_PRINTINGBEIJING_CO_LTD = 24679\nVENDOR_ID_BRADMARK_TECHNOLOGIES_INC = 24680\nVENDOR_ID_QNAP_SYSTEMS_INC = 24681\nVENDOR_ID_SAT = 24682\nVENDOR_ID_HUTCHISON_3G_AUSTRIA_GMBH = 24683\nVENDOR_ID_HELSINKI_BUSINESS_POLYTECHNIC = 24684\nVENDOR_ID_OMADA_A_S = 24685\nVENDOR_ID_PROFIBUS_NUTZERORGANISATION_EV = 24686\nVENDOR_ID_INTEGRATED_BROADBAND_SERVICES_LLC = 24687\nVENDOR_ID_C_H_EUSER_TRANSPORT_BV = 24688\nVENDOR_ID_WAR_INK = 24689\nVENDOR_ID_JAPAN_COMMUNICATION_EQUIPMENT_COLTD = 24690\nVENDOR_ID_BEIJING_GOODMEDIA_CO_LTD = 24691\nVENDOR_ID_ASK_JEEVES_HANGZHOU_LIMITED = 24692\nVENDOR_ID_FIREBRICK_LTD = 24693\nVENDOR_ID_TECHNISCHE_UNIVERSITEIT_EINDHOVEN = 24694\nVENDOR_ID_PRODEMGE_COMPANHIA_DE_TECNOLOGIA_DA_INFORMAO_DO_ESTADO_DE = 24695\nVENDOR_ID_FALKIN_SYSTEMS_LLC = 24696\nVENDOR_ID_CANAL_DE_ISABEL_II = 24697\nVENDOR_ID_WH_TRADING_LLC = 24698\nVENDOR_ID_AGB_NIELSEN_MEDIA_RESEARCH = 24699\nVENDOR_ID_PROLON_CONTROL_SYSTEMS = 24700\nVENDOR_ID_SPITZENVERBNDE_DER_LANDWIRTSCHAFTLICHEN_SOZIALVERSICHERUNG = 24701\nVENDOR_ID_CLS_SERVICES_LTD = 24702\nVENDOR_ID_SVEN_MEYER_IT_SERVICES = 24703\nVENDOR_ID_INFORMATIKZENTRUM_LANDESVERWALTUNG_BADEN_WRTTEMBERG = 24704\nVENDOR_ID_CLAL_INSURANCE_LTD = 24705\nVENDOR_ID_RW_CONSULTING = 24706\nVENDOR_ID_COMPUTATION_SYSTEMHAUS_GMBH = 24707\nVENDOR_ID_UNIVERSITY_OF_PISA = 24708\nVENDOR_ID_NORTH_YORK_GENERAL_HOSPITAL = 24709\nVENDOR_ID_OPSOFT_SRO = 24710\nVENDOR_ID_MLK_ST_INFORMATIQUE = 24711\nVENDOR_ID_WATERSTONE_ENVIRONMENTAL_HYDROLOGY_AND_ENGINEERING_INC = 24712\nVENDOR_ID_GRAMMOFONARTISTENES_FORENING = 24713\nVENDOR_ID_INTESIS_SOFTWARE_SL = 24714\nVENDOR_ID_BEIJING_LANGHUA_LTD = 24715\nVENDOR_ID_START_STELCOM_LTD_CORP = 24716\nVENDOR_ID_BERG_BSP = 24717\nVENDOR_ID_PIERRE_BRUYRE = 24718\nVENDOR_ID_CYBERVIEW_TECHNOLOGY_LTD = 24719\nVENDOR_ID_THALES_TRAINING_SIMULATION_LTD = 24720\nVENDOR_ID_SVISJ = 24721\nVENDOR_ID_KEF_SOLUTIONS_INC = 24722\nVENDOR_ID_SOS_GMBH = 24723\nVENDOR_ID_ALURIA_SOFTWARE = 24724\nVENDOR_ID_AUSTRALIAN_TECHNOLOGY_INFORMATION_PTY_LTD = 24725\nVENDOR_ID_USHER = 24726\nVENDOR_ID_CLEANOFFER_INC = 24727\nVENDOR_ID_PYTHEA = 24728\nVENDOR_ID_AUTOGAS_SYSTEMS_INC = 24729\nVENDOR_ID_AUDIBLE_MAGIC_CORP = 24730\nVENDOR_ID_BEIJING_KEXIN_TECHNOLOGY_CO_LTD = 24731\nVENDOR_ID_UNIVERSITT_BAYREUTH_RZ = 24732\nVENDOR_ID_SUMMIT_COMPUTER_SYSTEMS_INC = 24733\nVENDOR_ID_CINTECH = 24734\nVENDOR_ID_GUNNEBO_AB = 24735\nVENDOR_ID_NARCOMMUNICATIONS = 24736\nVENDOR_ID_ION_R_D_ELEKTRONIKA_BT = 24737\nVENDOR_ID_CABLECOM_GMBH = 24738\nVENDOR_ID_SLASKI_URZAD_WOJEWODZKI = 24739\nVENDOR_ID_ARFWORKS = 24740\nVENDOR_ID_MDT_INC = 24741\nVENDOR_ID_DANISH_MINISTRY_OF_THE_ENVIRONMENT = 24742\nVENDOR_ID_MEMOREX_TELEX_JAPAN_LTD = 24743\nVENDOR_ID_A2_SYSTEM = 24744\nVENDOR_ID_TVWORKS = 24745\nVENDOR_ID_OBERTO_SAUSAGE_COMPANY = 24746\nVENDOR_ID_CAPELLA_EDUCATION_COMPANY = 24747\nVENDOR_ID_TPSA_LTD = 24748\nVENDOR_ID_SCRUTABLE_SYSTEMS_INC = 24749\nVENDOR_ID_UNASSIGNED_32 = 24750\nVENDOR_ID_CLUSTER_WORKS_GBR = 24751\nVENDOR_ID_SYNCIO_OHG = 24752\nVENDOR_ID_SSC_PUBLICATIONS_INC = 24753\nVENDOR_ID_SIRCA_LTD = 24754\nVENDOR_ID_SATELLITE_MUSIC_AUSTRALIA_PTY_LIMITED = 24755\nVENDOR_ID_PARTAD = 24756\nVENDOR_ID_WIMAX_FORUM = 24757\nVENDOR_ID_BRIGHTWIRE_MEDIA = 24758\nVENDOR_ID_PANACYA_INC = 24759\nVENDOR_ID_ILS_TECHNOLOGY_LLC = 24760\nVENDOR_ID_EURO_IP_BV = 24761\nVENDOR_ID_SMART_AND_FINAL_STORES_CORPORATION = 24762\nVENDOR_ID_RROTHOSCOM = 24763\nVENDOR_ID_IRIS_CORP_BHD = 24764\nVENDOR_ID_AYLUS_NETWORKS_INC = 24765\nVENDOR_ID_SPICEBERRY = 24766\nVENDOR_ID_NOX_SYSTEMS_AG = 24767\nVENDOR_ID_POTT_KRNER = 24768\nVENDOR_ID_ACRONIS_INC = 24769\nVENDOR_ID_IZALLCOM_LTD = 24770\nVENDOR_ID_INTERCOOPERATION = 24771\nVENDOR_ID_SOLIDX_AB = 24772\nVENDOR_ID_SG_GENIKI_BANK_SA = 24773\nVENDOR_ID_WORLD_HEALTH_ORGANIZATION = 24774\nVENDOR_ID_AVIARETO_LIMITED = 24775\nVENDOR_ID_BRASIL_TELECOM_S_A = 24776\nVENDOR_ID_INGENIOUS_CORPORATION_LTD = 24777\nVENDOR_ID_TENXC_WIRELESS_INC = 24778\nVENDOR_ID_SEANET_TECHNOLOGIES_INC = 24779\nVENDOR_ID_SBIN_SYSTEMS = 24780\nVENDOR_ID_AFPBTP_DU_CALVADOS = 24781\nVENDOR_ID_TETRANED = 24782\nVENDOR_ID_WOLA_INFO_SA = 24783\nVENDOR_ID_LOGINTAS_AG = 24784\nVENDOR_ID_LUGANDA_GROUP_INC = 24785\nVENDOR_ID_ASTERISKADCOM = 24786\nVENDOR_ID_TU_DRESDEN_CHAIR_OF_ROAD_DESIGN = 24787\nVENDOR_ID_ITILON_PTY_LTD = 24788\nVENDOR_ID_TELETECH_DOO = 24789\nVENDOR_ID_HANDMADE_MOBILE_ENTERTAINMENT = 24790\nVENDOR_ID_INZON_CORP = 24791\nVENDOR_ID_RED_OXYGEN_PTY_LTD = 24792\nVENDOR_ID_GSTELETECH_COLTD = 24793\nVENDOR_ID_FEDERATED_DEPARTMENT_STORES = 24794\nVENDOR_ID_BLUE_ELEPHANT_SYSTEMS_GMBH = 24795\nVENDOR_ID_BUNDESRZTEKAMMER = 24796\nVENDOR_ID_IMSEC_GMBH = 24797\nVENDOR_ID_DATA_COMPLEX_GMBH = 24798\nVENDOR_ID_APP_LINE = 24799\nVENDOR_ID_APOGEE_NETWORK_SYSTEMS_CONSULTING_LLC = 24800\nVENDOR_ID_MTI_CO_LTD = 24801\nVENDOR_ID_SARATOGA_SYSTEMS_INC = 24802\nVENDOR_ID_NUORG = 24803\nVENDOR_ID_AKORRI_NETWORKS_INC = 24804\nVENDOR_ID_BANKOA_CREDIT_AGRICOLE = 24805\nVENDOR_ID_TERN_SYSTEMS_INC = 24806\nVENDOR_ID_RISO_KAGAKU_CORPORATION = 24807\nVENDOR_ID_EODP_SECTION_FOR_TESTING_ONLY = 24808\nVENDOR_ID_MANIC_PRODUCTIONS = 24809\nVENDOR_ID_INNERSPACE_LTD = 24810\nVENDOR_ID_ROBATECH_AG = 24811\nVENDOR_ID_TRIBALDI_GMBH = 24812\nVENDOR_ID_CHELLOMEDIA_SERVICES_LTD = 24813\nVENDOR_ID_YINHOO_SOFTWARE_INC = 24814\nVENDOR_ID_GOLZARI_IT_CONSULTANCY = 24815\nVENDOR_ID_ASOKA_USA_CORPORATION = 24816\nVENDOR_ID_TUVOX_INC = 24817\nVENDOR_ID_MICRO_INDUSTRIES_INC = 24818\nVENDOR_ID_CARDIONICS_SA = 24819\nVENDOR_ID_OSKARSHAMNS_KONVERTERINGS_AB = 24820\nVENDOR_ID_TELEFUNKEN_RADIO_COMMUNICATION_SYSTEMS_GMBH_CO_KG = 24821\nVENDOR_ID_INSTITUTO_NACIONAL_DE_ESTADISTICA = 24822\nVENDOR_ID_AMEY_DATEL = 24823\nVENDOR_ID_NIGHTSTORM_SOFTWARE_SYSTEMS_INC = 24824\nVENDOR_ID_CREIGHTON_UNIVERSITY = 24825\nVENDOR_ID_WEYERHAEUSER = 24826\nVENDOR_ID_BIELES_STANO = 24827\nVENDOR_ID_SPEEDWAY_INTERNET_SERVICE_SC_LTDA = 24828\nVENDOR_ID_ESTACADO_SYSTEMS_LLC = 24829\nVENDOR_ID_THOTT_SOLUTIONS = 24830\nVENDOR_ID_SIRIT_TECHNOLOGIES_INC = 24831\nVENDOR_ID_MI5_INC = 24832\nVENDOR_ID_ELITEITMINDS_TECHNOLOGIES_INC = 24833\nVENDOR_ID_KAT_PROJECT = 24834\nVENDOR_ID_UNIVERSITY_OF_OSTRAVA = 24835\nVENDOR_ID_JOHANNES_KAPUNE_GBR = 24836\nVENDOR_ID_SOBHA_RENAISSANCE_INFORMATION_TECHNOLOGY_PRIVATE_LIMITED = 24837\nVENDOR_ID_DANBURY_HEALTH_SYSTEMS = 24838\nVENDOR_ID_UNIVERSIDADE_FEDERAL_FLUMINENSE = 24839\nVENDOR_ID_DAVID_ROSS = 24840\nVENDOR_ID_RED_E_ENTERTAINMENT_GROUP = 24841\nVENDOR_ID_GRAVITIME = 24842\nVENDOR_ID_HALIER = 24843\nVENDOR_ID_PETROLEUM_CONVENIENCE_ALLIANCE_FOR_TECHNOLOGY_STANDARDS_INC = 24844\nVENDOR_ID_JSC_INSTITUTE_PROMSTROJNIIPROJECT = 24845\nVENDOR_ID_SCIVO_TECHNOLOGY_CO_LTD = 24846\nVENDOR_ID_INTERNATIONAL_CRIMINAL_COURT_COUR_PENALE_INTERNATIONALE = 24847\nVENDOR_ID_BOLLCONS = 24848\nVENDOR_ID_ELITNET_LTD = 24849\nVENDOR_ID_MERCANTILE_NETWORK_BRASIL_LTDA = 24850\nVENDOR_ID_HILLSBOROUGH_COMMUNITY_COLLEGE = 24851\nVENDOR_ID_PHIHONG_USA = 24852\nVENDOR_ID_KOMERCCENTRS_DATI_GRUPA = 24853\nVENDOR_ID_PACIFIC_STAR_COMMUNICATIONS = 24854\nVENDOR_ID_SENSONXI_INC = 24855\nVENDOR_ID_MDS_PHARMA_SERVICES = 24856\nVENDOR_ID_VECTORSGI = 24857\nVENDOR_ID_VENDETTA_PERFORMANCE_LIMITED = 24858\nVENDOR_ID_SHANGHAI_PONX_TECHNOLOGY_COMLTD = 24859\nVENDOR_ID_TOSKERNET = 24860\nVENDOR_ID_STUDYSTACK = 24861\nVENDOR_ID_QUALIMEDICCOM_AG = 24862\nVENDOR_ID_MTI_TECHNOLOGY_GMBH = 24863\nVENDOR_ID_LINK_GMBH = 24864\nVENDOR_ID_CRAMER_SYSTEMS_LTD = 24865\nVENDOR_ID_HANS_TURCK_GMBH_CO_KG = 24866\nVENDOR_ID_GOLDSMITHS_COLLEGE_UNIVERSITY_OF_LONDON = 24867\nVENDOR_ID_TECHNOFACE_CORPORATION = 24868\nVENDOR_ID_KLAB_INC = 24869\nVENDOR_ID_ZE_PAK_SA = 24870\nVENDOR_ID_WEBROOT_SOFTWARE_INC = 24871\nVENDOR_ID_H_D_H = 24872\nVENDOR_ID_PROCESAMIENTO_DIGITAL_Y_SISTEMAS_SL = 24873\nVENDOR_ID_GO_NETWORKS_INC = 24874\nVENDOR_ID_ANDXOR_SOLUZIONI_INFORMATICHE_SRL = 24875\nVENDOR_ID_ATLAS_ADVANCED_INTERNET_SOLUTIONS_LTD = 24876\nVENDOR_ID_INFORMATICA_Y_COMUNICACIONES_AVANZADAS_SL = 24877\nVENDOR_ID_MERCURIO_COMUNICACIONES = 24878\nVENDOR_ID_GI_GESUNDHEITSINFORMATIK_GMBH = 24879\nVENDOR_ID_DIRECCION_DE_IMPUESTOS_Y_ADUANAS_NACIONALES = 24880\nVENDOR_ID_CERIST = 24881\nVENDOR_ID_ALCATEL_JAPAN_LTD = 24882\nVENDOR_ID_VERTIGO_MEDIA_LLC = 24883\nVENDOR_ID_TONEWARE_TECHNOLOGY_CO_LTD = 24884\nVENDOR_ID_BANCA_INTESA_AD_BEOGRAD = 24885\nVENDOR_ID_EIGIL_BJRGUM = 24886\nVENDOR_ID_PARLAMENTO_DE_GALICIA = 24887\nVENDOR_ID_MALDEN_ELECTRONICS_LTD = 24888\nVENDOR_ID_IB_TECHNOLOGIES_SDN_BHD = 24889\nVENDOR_ID_EXTANT_SOLUTIONS = 24890\nVENDOR_ID_INSTITUTO_TECNOLGICO_Y_DE_ESTUDIOS_SUPERIORES_DE_OCCIDENTE_AC = 24891\nVENDOR_ID_GREAT_ATLANTIC_AND_PACIFIC_TEA_COMPANY_INC = 24892\nVENDOR_ID_GE_INTELLIGENT_PLATFORMS_INC = 24893\nVENDOR_ID_PANTHERANET = 24894\nVENDOR_ID_MEDIFACTS_INTERNATIONAL_INC = 24895\nVENDOR_ID_MICRODENTAL_LABORATORIES = 24896\nVENDOR_ID_INDEL_INDUSTRIA_ELETRONICA_LTDA = 24897\nVENDOR_ID_DB_AUDIOTECHNIK_AG = 24898\nVENDOR_ID_AGAMA_TECHNOLOGIES_AB = 24899\nVENDOR_ID_AURORA_NETWORKS_GOBACKTV = 24900\nVENDOR_ID_FUTURE_INFONET = 24901\nVENDOR_ID_ASTECH_CORPORATION = 24902\nVENDOR_ID_CORPORACIN_POLITCNICA_NACIONAL_DE_COLOMBIA = 24903\nVENDOR_ID_SKYRECON_SYSTEMS_SA = 24904\nVENDOR_ID_NEXTSENSE_LTD = 24905\nVENDOR_ID_ELECTRONIC_SOLUTIONS_LTD = 24906\nVENDOR_ID_INFOPACT_NETWERKDIENSTEN_BV = 24907\nVENDOR_ID_STORED_IQ_INC = 24908\nVENDOR_ID_SECURE_24_LLC = 24909\nVENDOR_ID_OOO_ELITSTUDIO = 24910\nVENDOR_ID_FOXBYTE_LTD = 24911\nVENDOR_ID_ASELSAN = 24912\nVENDOR_ID_COOK_GROUP_INCORPORATED = 24913\nVENDOR_ID_WSOFT_LDA = 24914\nVENDOR_ID_IG_INTERNET_GROUP_DO_BRASIL_LTDA = 24915\nVENDOR_ID_ESSENT_CORPORATION = 24916\nVENDOR_ID_INTERMEDIX_CORPORATION_FORMERLY_COLLABORATIVE_FUSION_INC = 24917\nVENDOR_ID_RADMER = 24918\nVENDOR_ID_WEB_WIZARD_DESIGN = 24919\nVENDOR_ID_OUR_HELP_DESK = 24920\nVENDOR_ID_MAINDATA_SPOL_S_RO = 24921\nVENDOR_ID_VOX_COMMUNICATIONS_INC = 24922\nVENDOR_ID_SHODOR_EDUCATION_FOUNDATION_INC = 24923\nVENDOR_ID_UNICENTRIX_SOLUTIONS = 24924\nVENDOR_ID_JORDET = 24925\nVENDOR_ID_LAIKA_INC = 24926\nVENDOR_ID_EXEGY_INC = 24927\nVENDOR_ID_WATERED_AUSTRALIA_PTY_LTD = 24928\nVENDOR_ID_VT100_DIGITAL_SOLUTIONS = 24929\nVENDOR_ID_SYNEDRA_INFORMATION_TECHNOLOGIES_GMBH = 24930\nVENDOR_ID_MIXED_SIGNALS_INC = 24931\nVENDOR_ID_MCOMMS_DESIGN = 24932\nVENDOR_ID_ANGEL_BOSCH = 24933\nVENDOR_ID_ISCG_LTD = 24934\nVENDOR_ID_TETRANED_2 = 24935\nVENDOR_ID_SNECMA_PROPULSION_SOLIDE_GROUPE_SAFRAN = 24936\nVENDOR_ID_UNIVERSAL_DISPLAY_AND_FIXTURES_COMPANY = 24937\nVENDOR_ID_TECHNOLABS_SPA = 24938\nVENDOR_ID_QPASS = 24939\nVENDOR_ID_DEPARTMENT_OF_COMPUTER_SCIENCE_NATIONAL_CHIAO_TUNG_UNIVERSITY = 24940\nVENDOR_ID_EMKA_TECHNOLOGIES_SA = 24941\nVENDOR_ID_KYLE_FOX_DBA_DIGITALFENNEC_NETWORKS = 24942\nVENDOR_ID_RIGPA = 24943\nVENDOR_ID_KREUZINGER_IT_TRILOGIE = 24944\nVENDOR_ID_PARASUN_TECHNOLOGIES_INC = 24945\nVENDOR_ID_CORREDOIRA_ABOGADOS = 24946\nVENDOR_ID_SHANALYST_CORPORATION = 24947\nVENDOR_ID_MITSUBISHI_MATERIALS_CORPORATION = 24948\nVENDOR_ID_SENTILLION_INC = 24949\nVENDOR_ID_UNIFORM_INDUSTRIAL_CORP = 24950\nVENDOR_ID_INDUSTRIAL_VIDEO_AND_CONTROL_LLC = 24951\nVENDOR_ID_COOL_BANANAS_LIMITED = 24952\nVENDOR_ID_NUMACHI = 24953\nVENDOR_ID_MOBILE_COMPLETE = 24954\nVENDOR_ID_SYNCCAST = 24955\nVENDOR_ID_INNOVATIVE_ELECTRONIC_DESIGNS_INC = 24956\nVENDOR_ID_ONOCLEA = 24957\nVENDOR_ID_ASCENT_MEDIA_GROUP = 24958\nVENDOR_ID_PANKERL_MEDIA = 24959\nVENDOR_ID_THE_SIP_ROUTER_PROJECT_FORMERLY_IPTELORG = 24960\nVENDOR_ID_TAIL_F_SYSTEMS_AB = 24961\nVENDOR_ID_ATLANTIC_HARBOUR_LIMITED = 24962\nVENDOR_ID_SILICONVORTEX = 24963\nVENDOR_ID_SHANGHAI_QIANJIN_ELECTRONIC_EQUIPMENT_COLTD = 24964\nVENDOR_ID_PICDAR_TECHNOLOGY_LIMITED = 24965\nVENDOR_ID_GREENWICH_HOSPITAL = 24966\nVENDOR_ID_EPCON_SP_Z_OO = 24967\nVENDOR_ID_BEIJING_SECUWARD_INFORMATION_SECURITY_TECHNOLOGY_COLTD = 24968\nVENDOR_ID_WHARFE_ELECTRONIC_DATA_LTD = 24969\nVENDOR_ID_INTERWAY_SRO = 24970\nVENDOR_ID_GIDE_LOYRETTE_NOUEL = 24971\nVENDOR_ID_LIPMAN_ELECTRONIC_ENGINEERING_LTD = 24972\nVENDOR_ID_GUILIN_JHARDEN_COMMUNICATION_CO_LTD = 24973\nVENDOR_ID_LOOTAH = 24974\nVENDOR_ID_WINGS_LTD = 24975\nVENDOR_ID_OMEGASPHERE_INC = 24976\nVENDOR_ID_SXIP_IDENTITY = 24977\nVENDOR_ID_MARTIN_HENSCHKE_GERAETEBAU = 24978\nVENDOR_ID_MADPILOTNET = 24979\nVENDOR_ID_CERVICEM = 24980\nVENDOR_ID_AMEX_INFORMATION_TECHNOLOGIES_LTD = 24981\nVENDOR_ID_FIEBIGTEAM_GMBH = 24982\nVENDOR_ID_TOD_LEWIN = 24983\nVENDOR_ID_KESTRAL_COMPUTING_PTY_LTD = 24984\nVENDOR_ID_XEROUND_SYSTEMS = 24985\nVENDOR_ID_BJRN_RUBERG_KONSULENTTJENESTER = 24986\nVENDOR_ID_ORTIVA_WIRELESS_INC = 24987\nVENDOR_ID_SINGH_TRAVELS = 24988\nVENDOR_ID_SYNALOGIC_EK = 24989\nVENDOR_ID_BLUESTEM_LTD = 24990\nVENDOR_ID_CARDCONTACT_SOFTWARE_SYSTEM_CONSULTING = 24991\nVENDOR_ID_TOKO_UNIVERSITY = 24992\nVENDOR_ID_MYSQL_INC = 24993\nVENDOR_ID_NABIOS_GMBH = 24994\nVENDOR_ID_INTEGRATECH_SA = 24995\nVENDOR_ID_SAFE_HEALTH = 24996\nVENDOR_ID_CIRROLOGIC_LTD = 24997\nVENDOR_ID_SBA_TECHNOLOGIES_INC = 24998\nVENDOR_ID_VATSIMNET = 24999\nVENDOR_ID_CONSOL_CONSULTING_SOLUTIONS_SOFTWARE_GMBH = 25000\nVENDOR_ID_CODRA_INGENIERIE_INFORMATIQUE = 25001\nVENDOR_ID_VISTIC_LTD = 25002\nVENDOR_ID_SQUILD = 25003\nVENDOR_ID_AEGON_MAGYARORSZAG_RT = 25004\nVENDOR_ID_SEVECEK = 25005\nVENDOR_ID_NVISION_CZECH_REPUBLIC_AS_FORMERLY_SITRONICS_TELECOM_SOLUTIONS_CZECH_REPUBLIC_AS = 25006\nVENDOR_ID_PRECESAMIENTO_DIGITAL_Y_SISTEMAS_SL = 25007\nVENDOR_ID_ITENOS_GMBH_MOBILE_SOLUTIONS = 25008\nVENDOR_ID_SYSWORKSOFT = 25009\nVENDOR_ID_BEDAG_INFORMATIQUE_SA = 25010\nVENDOR_ID_CRANITE_SYSTEMS_INC = 25011\nVENDOR_ID_MINUX_BT = 25012\nVENDOR_ID_RS_CONSULTING = 25013\nVENDOR_ID_VISIMETRICS_UK_LTD = 25014\nVENDOR_ID_2PM_TECHNOLOGIES_LTD = 25015\nVENDOR_ID_VIZRT_ARDENDO_AB = 25016\nVENDOR_ID_CERTSIGN = 25017\nVENDOR_ID_PROXYCONN_UKRAINE = 25018\nVENDOR_ID_PROFITRADE_90_LTD = 25019\nVENDOR_ID_MOBILMAIL_LTD = 25020\nVENDOR_ID_DEVON_COUNTY_COUNCIL = 25021\nVENDOR_ID_MEDOX_EXCHANGE_INC = 25022\nVENDOR_ID_CYBERSPACE_TECHNOLOGY_CORPORATION_LTD = 25023\nVENDOR_ID_AURIGA = 25024\nVENDOR_ID_CONCENTRUM_INC = 25025\nVENDOR_ID_LINEAR_EQUIPAMENTOS_ELETRNICOS_SA = 25026\nVENDOR_ID_BILLERUD_AB = 25027\nVENDOR_ID_WEBSERVICE_SP_Z_OO = 25028\nVENDOR_ID_ANTEK_HEALTHWARE_LLC = 25029\nVENDOR_ID_WARD_BECK_SYSTEMS = 25030\nVENDOR_ID_NETWORK_ORANGE_INC = 25031\nVENDOR_ID_DACI_COMRCIO_E_SERVIOS_DE_EQUIPAMENTOS_DE_INFORMTICA_LTDA = 25032\nVENDOR_ID_NAZTEC_INC = 25033\nVENDOR_ID_DIMA_LTDA = 25034\nVENDOR_ID_JINAN_DEAN_COMPUTER_TECHNOLOGY_CO_LTD = 25035\nVENDOR_ID_KANTONSSCHULE_ROMANSHORN = 25036\nVENDOR_ID_NOVOVIA = 25037\nVENDOR_ID_DENVER_HEALTH = 25038\nVENDOR_ID_VITROCONNECT_SYSTEMS_GMBH_FORMERLY_INFINITY_3_GMBH = 25039\nVENDOR_ID_KEYTRONIX_GMBH = 25040\nVENDOR_ID_MICROSOL_LTD = 25041\nVENDOR_ID_JDM_SOFTWARE_BV = 25042\nVENDOR_ID_LITTSNET = 25043\nVENDOR_ID_CAPWIN = 25044\nVENDOR_ID_MET_ADMINISTRATION_WALLONNE_BELGIQUE = 25045\nVENDOR_ID_GLOBALTOUCH_TELECOM = 25046\nVENDOR_ID_FLUID4_STUDIOS = 25047\nVENDOR_ID_SYNCHRONICA_PLC = 25048\nVENDOR_ID_OPENGEAR_INC = 25049\nVENDOR_ID_IT_KNOWS_APS = 25050\nVENDOR_ID_PYTHAGORAS_SOFTWARE_UK = 25051\nVENDOR_ID_IDYA_BT = 25052\nVENDOR_ID_RUCKUS_WIRELESS_INC = 25053\nVENDOR_ID_CARILLON_INFORMATION_SECURITY_INC = 25054\nVENDOR_ID_OXFORD_ARCHDIGITAL = 25055\nVENDOR_ID_HUNGARIAN_TELEVISION_CORPORATION = 25056\nVENDOR_ID_RURAL_TECHNOLOGIES_INC = 25057\nVENDOR_ID_BAIN_CAPITAL_LLC = 25058\nVENDOR_ID_ABICOM_INTERNATIONAL = 25059\nVENDOR_ID_PBXNSIP_INC = 25060\nVENDOR_ID_DOMAINGRUPPE_RIEMANN2000DE = 25061\nVENDOR_ID_MESSAGEONE_INC = 25062\nVENDOR_ID_AMERICAN_TRIBU_CORP = 25063\nVENDOR_ID_WOMENS_HEALTH_SERVICES = 25064\nVENDOR_ID_IDENTITY_ENGINES_INC = 25065\nVENDOR_ID_PELCO = 25066\nVENDOR_ID_G_CENTRAL = 25067\nVENDOR_ID_AXISTECH = 25068\nVENDOR_ID_LISA_REISEN_GMBH = 25069\nVENDOR_ID_MULTICERT_SERVICOS_DE_CERTIFICACAO_ELECTRONICA_SA = 25070\nVENDOR_ID_TERADICI_CORPORATION = 25071\nVENDOR_ID_LFW_ENTERPRISES_INC = 25072\nVENDOR_ID_THINKING_PHONE_NETWORKS_INC = 25073\nVENDOR_ID_PRESBYTERIAN_HEALTHCARE_SERVICES = 25074\nVENDOR_ID_INVENTEC_MULTIMEDIA_TELECOMTIANJIN_COLTD = 25075\nVENDOR_ID_45RU_TRUST = 25076\nVENDOR_ID_BGC_AUSTRALIA_PTY_LTD = 25077\nVENDOR_ID_MKQ_INTERNETSERVICE = 25078\nVENDOR_ID_GYANASOFT_INC = 25079\nVENDOR_ID_BELUGA_SOFTWARE_INC = 25080\nVENDOR_ID_UNIVERSIDAD_DE_CHILE = 25081\nVENDOR_ID_FISHNET_CONNECT = 25082\nVENDOR_ID_SIRIUS_CREATIONS = 25083\nVENDOR_ID_ARGENT_PRODUCTIONS = 25084\nVENDOR_ID_METROCAST_CABLEVISION_LLC = 25085\nVENDOR_ID_SYDNEY_MISSIONARY_AND_BIBLE_COLLEGE_LTD = 25086\nVENDOR_ID_HWS = 25087\nVENDOR_ID_TRANSACTIONAL_RECORDS_ACCESS_CLEARINGHOUSE = 25088\nVENDOR_ID_DSK_BANK_PLC = 25089\nVENDOR_ID_AMBIENTIA_OY = 25090\nVENDOR_ID_PIRANHA_MESSTECHNIK_GMBH_CO_KG = 25091\nVENDOR_ID_APTIC_AB = 25092\nVENDOR_ID_GREYSONBAINES_INNOVATION = 25093\nVENDOR_ID_VONAGE_HOLDINGS_CORP = 25094\nVENDOR_ID_XENIT_GMBH = 25095\nVENDOR_ID_MAIMONIDES_MEDICAL_CENTER = 25096\nVENDOR_ID_TJX_COMPANIES = 25097\nVENDOR_ID_REFLECTENT_SOFTWARE_INC = 25098\nVENDOR_ID_HEB_COMPANY_INC = 25099\nVENDOR_ID_HOCHSCHULE_VECHTA = 25100\nVENDOR_ID_DATAARMOR_PVT_LTD = 25101\nVENDOR_ID_PHYXIA_NETWORKS = 25102\nVENDOR_ID_NETSOL_INTERNATIONAL_ARGENTINA_SA = 25103\nVENDOR_ID_GANNETT_CO_INC = 25104\nVENDOR_ID_CABLE_WIRELESS_JAMAICA = 25105\nVENDOR_ID_CSE_SHPK = 25106\nVENDOR_ID_STAN_WINSTON_STUDIO = 25107\nVENDOR_ID_IRADEON_INC = 25108\nVENDOR_ID_WIRELESS_EDGE_CANADA_INC = 25109\nVENDOR_ID_VANGUARD_TECHNOLOGY_CORP = 25110\nVENDOR_ID_VODCA = 25111\nVENDOR_ID_TOP_GUN_DRYWALL_SUPPLY = 25112\nVENDOR_ID_KONSTRUCTIV_LTD = 25113\nVENDOR_ID_SSE_INFONET_LTD = 25114\nVENDOR_ID_DELBUILTPTYLTD = 25115\nVENDOR_ID_EBINTERACTIVE = 25116\nVENDOR_ID_ID_INNOVATIVE_DATENVERARBEITUNG_GMBH = 25117\nVENDOR_ID_STANAPHONE_LLC = 25118\nVENDOR_ID_ADDER_TECHNOLOGY_LIMITED = 25119\nVENDOR_ID_SAGUAPAC = 25120\nVENDOR_ID_TEMEX_SYNC = 25121\nVENDOR_ID_HAUK_SASKO_GMBH = 25122\nVENDOR_ID_BARCO_ORTHOGON_GMBH = 25123\nVENDOR_ID_TRADE_ON_TECHNOLOGY_HOLDINGS = 25124\nVENDOR_ID_ALWIL_SOFTWARE = 25125\nVENDOR_ID_JACKSON_STATE_UNIVERSITY = 25126\nVENDOR_ID_RADIALINK_CORP = 25127\nVENDOR_ID_BREASTSCREEN_VICTORIA = 25128\nVENDOR_ID_SFBC_ANAPHARM_INC = 25129\nVENDOR_ID_SCOUTS_OF_GREECE_10TH_GROUP_OF_AKROPOLI_THESSALONIKI = 25130\nVENDOR_ID_P_TEC_CO_LTD = 25131\nVENDOR_ID_REDEAL_LTD = 25132\nVENDOR_ID_HKU_SCHOOL_OF_PROFESSIONAL_AND_CONTINUING_EDUCATION = 25133\nVENDOR_ID_COMDESIGN_INC = 25134\nVENDOR_ID_MINISTERUL_PENTRU_SOCIETATEA_INFORMAIONAL_FORMERLY_MINISTERUL_COMUNICATIILOR_SI_TEHNOLOGIEI_INFORMATIEI = 25135\nVENDOR_ID_HAUTE_ECOLE_ARC = 25136\nVENDOR_ID_VORONEZH_STATE_PEDAGOGICAL_UNIVERSITY = 25137\nVENDOR_ID_ALYSEO = 25138\nVENDOR_ID_ADEPT_INTERNET_PTY_LTD = 25139\nVENDOR_ID_INSTITUT_CATHOLIQUE_DE_TOULOUSE = 25140\nVENDOR_ID_LA_POSTE = 25141\nVENDOR_ID_IP_CONTROL_SYSTEMS_LTD = 25142\nVENDOR_ID_DAMOVO_DEUTSCHLAND_GMBH_CO_KG = 25143\nVENDOR_ID_PERPUSTAKAAN_INSTITUT_PERTANIAN_BOGOR = 25144\nVENDOR_ID_NETZWERK_FR_KINDER_JUGENDARBEIT_EV = 25145\nVENDOR_ID_CYPRUS_RESEARCH_AND_ACADEMIC_NETWORK = 25146\nVENDOR_ID_INTERNET_SOLUTIONS = 25147\nVENDOR_ID_PIVOT3_INC = 25148\nVENDOR_ID_NATIONAL_ELECTRONICS_AND_COMPUTER_TECHNOLOGY_CENTER = 25149\nVENDOR_ID_KK_DENSOCOLTD = 25150\nVENDOR_ID_DRAGONTECH_CORPORATION_LIMITED = 25151\nVENDOR_ID_UPTIME_NEW_ZEALAND_LTD = 25152\nVENDOR_ID_AVANSEC = 25153\nVENDOR_ID_SEEKER_WIRELESS_PTY_LTD = 25154\nVENDOR_ID_UNISIS_SOLUTIONS_CORPORATION = 25155\nVENDOR_ID_GECI_GMBH = 25156\nVENDOR_ID_BECKHOFF_AUTOMATION_GMBH = 25157\nVENDOR_ID_AROS_MAGIC = 25158\nVENDOR_ID_OJSC_SVYAZINTEK = 25159\nVENDOR_ID_ARACKAL_DIGITAL_SOLUTIONS_INC = 25160\nVENDOR_ID_TELAVOX_AB = 25161\nVENDOR_ID_INDUSTRIAS_I_SC = 25162\nVENDOR_ID_BROADBAND_POWER_SOLUTIONS = 25163\nVENDOR_ID_INTERPAY = 25164\nVENDOR_ID_FMN_COMMUNICATIONS_GMBH = 25165\nVENDOR_ID_FACHHOCHSCHULE_MUENSTER = 25166\nVENDOR_ID_GENEXIS_BV = 25167\nVENDOR_ID_EDENTITY_LABS_LTD = 25168\nVENDOR_ID_AVCO_SYSTEMS_LTD = 25169\nVENDOR_ID_AFA_SYSTEMS_SRL = 25170\nVENDOR_ID_ARMBRUSTER_IT = 25171\nVENDOR_ID_INTEGRA_SOLUCIONES_AVANZADAS_SL = 25172\nVENDOR_ID_MET_MINISTRE_DE_LEQUIPEMENT_ET_DES_TRANSPORTS = 25173\nVENDOR_ID_NETOP_AS = 25174\nVENDOR_ID_DCN = 25175\nVENDOR_ID_FAMILIE_UHLIG = 25176\nVENDOR_ID_VAS_LATVIJAS_PASTS = 25177\nVENDOR_ID_TRANS_EUROPEAN_RESEARCH_AND_EDUCATION_NETWORKING_ASSOCIATION = 25178\nVENDOR_ID_GESA_ELEKTRONIK_GMBH = 25179\nVENDOR_ID_ITONIS_LTD = 25180\nVENDOR_ID_HEBUS_SARL = 25181\nVENDOR_ID_UNIVERSITY_OF_TAMPERE = 25182\nVENDOR_ID_SS_WORKGROUP_SOLUTIONS = 25183\nVENDOR_ID_ZINWAVE_LIMITED = 25184\nVENDOR_ID_BANCO_ESPRITO_SANTO_SA = 25185\nVENDOR_ID_UWE_DAUBE = 25186\nVENDOR_ID_AIRBR_ASSOCIATIONS_DES_INGNIEURS_SORTIS_DE_LUNIVERSIT_LIBRE = 25187\nVENDOR_ID_BOB_JONES_UNIVERSITY = 25188\nVENDOR_ID_INVIA = 25189\nVENDOR_ID_ETI_A_S = 25190\nVENDOR_ID_SMART_BEAR_INC = 25191\nVENDOR_ID_POSITIVE_NETWORKS_INC = 25192\nVENDOR_ID_WIRELESS_NOMAD_CO_OPERATIVE_INC = 25193\nVENDOR_ID_BIZANGA_LTD = 25194\nVENDOR_ID_WAHA_OIL_COMPANY = 25195\nVENDOR_ID_TM_SOFTWARE = 25196\nVENDOR_ID_ELEARNINGRECORD = 25197\nVENDOR_ID_SMARTSERV_WEB_HOSTING_DESIGN = 25198\nVENDOR_ID_KOBE_UNIVERSITY = 25199\nVENDOR_ID_TURKTEL_LTD = 25200\nVENDOR_ID_UNIWELL_ELECTRONICS_LTD = 25201\nVENDOR_ID_BEECHLER_REAL_ESTATE_SERVICES = 25202\nVENDOR_ID_PETE_RUSHMERE = 25203\nVENDOR_ID_PRODATO_INTEGRATION_TECHNOLOGY_GMBH = 25204\nVENDOR_ID_MOVIAL_CORPORATION = 25205\nVENDOR_ID_AXXESS_IDENTIFICATION_LIMITED = 25206\nVENDOR_ID_JSC_ATLAS = 25207\nVENDOR_ID_CSC_SCANDIHEALTH_A_S = 25208\nVENDOR_ID_CURON_INC = 25209\nVENDOR_ID_BIZEBOX = 25210\nVENDOR_ID_EDISON_ELECTRIC_CORP = 25211\nVENDOR_ID_INITWORKS_BV = 25212\nVENDOR_ID_NEXUS_WEB_AS = 25213\nVENDOR_ID_MINNESOTA_JUDICIAL_BRANCH = 25214\nVENDOR_ID_NOVACELL_SOLUTIONS_LTD = 25215\nVENDOR_ID_ADI_VIDEO_TECHNOLOGIES = 25216\nVENDOR_ID_NAUTILUS_HYOSUNG = 25217\nVENDOR_ID_HTTV = 25218\nVENDOR_ID_RPSOFT = 25219\nVENDOR_ID_SPORTCENTRIC_SYSTEMS = 25220\nVENDOR_ID_VIEWPOINT_CONSTRUCTION_SOFTWARE = 25221\nVENDOR_ID_BLUE_GECKO_INC = 25222\nVENDOR_ID_MINDBREEZE_SOFTWARE_GMBH = 25223\nVENDOR_ID_GRUPO_POCHTECA_SA_DE_CV = 25224\nVENDOR_ID_THE_AUSTIN_DIAGNOSTIC_CLINIC_PA = 25225\nVENDOR_ID_MAXMD = 25226\nVENDOR_ID_OHIO_DEPARTMENT_OF_TRANSPORTATION = 25227\nVENDOR_ID_NAV_CANADA = 25228\nVENDOR_ID_SWEDISH_ALLIANCE_FOR_MIDDLEWARE = 25229\nVENDOR_ID_THE_OHIO_CASUALTY_INSURANCE_COMPANY = 25230\nVENDOR_ID_RIVERFORGE_LLC = 25231\nVENDOR_ID_LINOG_CONSULTING = 25232\nVENDOR_ID_ACS = 25233\nVENDOR_ID_EMDEON_CORPORATION = 25234\nVENDOR_ID_WINDRUSH_FROZEN_FOODS_LTD = 25235\nVENDOR_ID_INVITROGEN_CORPORATION = 25236\nVENDOR_ID_L_3_COMMUNICATIONS_NARDA_SATELLITE_NETWORKS = 25237\nVENDOR_ID_GREENLIGHT_NETWORKS = 25238\nVENDOR_ID_TKNIKA = 25239\nVENDOR_ID_PEGGY_A_PUGH_MD_CPC = 25240\nVENDOR_ID_PROXIMUS_INFORMATION_TECHNOLOGIES = 25241\nVENDOR_ID_ACTORS_CONSULTING = 25242\nVENDOR_ID_AGGLUT_TECHNOLOGIES_INC = 25243\nVENDOR_ID_BRIGHTNET_OKLAHOMA = 25244\nVENDOR_ID_ORDER_OF_ST_CHARBEL = 25245\nVENDOR_ID_SOUTH_RUSSIA_STATE_TECHNICAL_UNIVERSITY = 25246\nVENDOR_ID_DANDELION_CA = 25247\nVENDOR_ID_SOLIDCORE_SYSTEMS_INC = 25248\nVENDOR_ID_DISPUUT_INTERLINK = 25249\nVENDOR_ID_ANQ_SYSTEMS_LTD = 25250\nVENDOR_ID_PRINCETON_ALLIANCE_CHURCH = 25251\nVENDOR_ID_VPTECHNOLOGIES_SRL = 25252\nVENDOR_ID_MFEC_PUBLIC_COMPANY_LIMITED = 25253\nVENDOR_ID_MAKENA_TECHNOLOGIES_INC = 25254\nVENDOR_ID_BROADSOFT_SYSTEMS = 25255\nVENDOR_ID_NABLE_COMMUNICATIONS_INC = 25256\nVENDOR_ID_SIPERA_SYSTEMS_INC = 25257\nVENDOR_ID_RANDOMBIT_CONSULTING = 25258\nVENDOR_ID_JWR_SOFTWARE_SERVICES_LTD = 25259\nVENDOR_ID_FRAUERPOWER = 25260\nVENDOR_ID_WESTENBERG_KUEPPERS_GBR = 25261\nVENDOR_ID_NETWORK_AUTOMATION_2 = 25262\nVENDOR_ID_MARECO_GMBH = 25263\nVENDOR_ID_PROPOLYS = 25264\nVENDOR_ID_DAVE_PUSEY_IT_SERVICES = 25265\nVENDOR_ID_FUH_EOS = 25266\nVENDOR_ID_VIRTUAL_SYNTHESIS = 25267\nVENDOR_ID_ENFON = 25268\nVENDOR_ID_CFNETTOOLS = 25269\nVENDOR_ID_MEEPZOR_CONSULTING = 25270\nVENDOR_ID_LOTUS_INTERWORKS_INC = 25271\nVENDOR_ID_GRUPO_XMARTS_SA_DE_CV = 25272\nVENDOR_ID_KONSOLE_NETWORK = 25273\nVENDOR_ID_IT2MEDIA_GMBH = 25274\nVENDOR_ID_PETER_HALL = 25275\nVENDOR_ID_GEAR6 = 25276\nVENDOR_ID_PEKAO_INC = 25277\nVENDOR_ID_CANON_ELECTRONICS_INC = 25278\nVENDOR_ID_OMX_GROUP = 25279\nVENDOR_ID_MARKET_PULSE_INTERNATIONAL = 25280\nVENDOR_ID_WESTERSTRAND_URFABRIK_AB = 25281\nVENDOR_ID_MDK_BADEN_WRTTEMBERG = 25282\nVENDOR_ID_CONSEIL_GENERAL_DU_CHER = 25283\nVENDOR_ID_TAYLOR_MADE_COMPUTER_SOLUTIONS_LTD = 25284\nVENDOR_ID_BEHEER_NET = 25285\nVENDOR_ID_OPEN_LOGIC_SOLUTIONS_LTD = 25286\nVENDOR_ID_MEGABIT_INFORMATIONSTECHNIK_GMBH = 25287\nVENDOR_ID_ONSHORE_DEVELOPMENT = 25288\nVENDOR_ID_ALABAMA_AM_UNIVERSITY = 25289\nVENDOR_ID_CONVERT_ITALIA_SPA = 25290\nVENDOR_ID_ZEACOM_LTD = 25291\nVENDOR_ID_SKAGIT_COUNTY_GOVERNMENT = 25292\nVENDOR_ID_MAXMD_2 = 25293\nVENDOR_ID_EESTEC_INTERNATIONAL = 25294\nVENDOR_ID_AFFINITI = 25295\nVENDOR_ID_VERICENTER_INC = 25296\nVENDOR_ID_HOTXT_LTD = 25297\nVENDOR_ID_ROHM_AND_HAAS_COMPANY = 25298\nVENDOR_ID_RODIC_MB_CO_DOO = 25299\nVENDOR_ID_OFFICENET_AS = 25300\nVENDOR_ID_NETAUTH_CONSULTING = 25301\nVENDOR_ID_DEAKIN_UNIVERSITY = 25302\nVENDOR_ID_SUBNETZCOMPUTING_GMBH = 25303\nVENDOR_ID_DEMON_NETHERLANDS = 25304\nVENDOR_ID_VODAFONE_HOLDING_GMBH_FPU_CEC = 25305\nVENDOR_ID_SUNMINE_COMMUNICATIONS = 25306\nVENDOR_ID_MINTEL_INTERNATIONAL_LTD = 25307\nVENDOR_ID_MDES = 25308\nVENDOR_ID_MANCHESTER_AIRPORT_MHT = 25309\nVENDOR_ID_INTERNET_SOCIETY_LUXEMBOURG_ASBL = 25310\nVENDOR_ID_REDEDOMINIOSCOM = 25311\nVENDOR_ID_NEXTAG_INC = 25312\nVENDOR_ID_VISUAL_DEVELOPMENT = 25313\nVENDOR_ID_NEW_VISUAL_WAVE_CABLE_COMMUNICATIONS_CO_LTD = 25314\nVENDOR_ID_E_WANG_INFORMATION_SYSTEMS_INC = 25315\nVENDOR_ID_KAROLINSKA_INSTITUTET = 25316\nVENDOR_ID_IXANON_AB = 25317\nVENDOR_ID_NEXCON_TELECOMUNICACIONES_SL = 25318\nVENDOR_ID_ACCESSPT_INC_2 = 25319\nVENDOR_ID_UNIVERSITY_OF_VAASA = 25320\nVENDOR_ID_THE_AMERICAN_BOARD_OF_ANESTHESIOLOGY = 25321\nVENDOR_ID_ALARIUS_SYSTEMS_LLC = 25322\nVENDOR_ID_AIRPATROL_CORPORATION = 25323\nVENDOR_ID_ROCK_HILL_TELEPHONE_COMPANY = 25324\nVENDOR_ID_TRUSTSERVER_S_L = 25325\nVENDOR_ID_FURREVILLE = 25326\nVENDOR_ID_VISIBLE_WORLD_INC = 25327\nVENDOR_ID_DEASIL_SYSTEMS_INC = 25328\nVENDOR_ID_HENFIELD_AB = 25329\nVENDOR_ID_THE_NATION = 25330\nVENDOR_ID_NOW_CONSULTING_GMBH = 25331\nVENDOR_ID_CADLOCK_INC = 25332\nVENDOR_ID_PACKETFRAME_INC = 25333\nVENDOR_ID_ASHANTIPLC_LIMITED = 25334\nVENDOR_ID_SEAMAX_MANUFACTURING_PTELTD = 25335\nVENDOR_ID_DSO_NATIONAL_LABORATORIES = 25336\nVENDOR_ID_CHINACACHE = 25337\nVENDOR_ID_RK_SYSTEMS = 25338\nVENDOR_ID_EMC_TECH_CO_LTD = 25339\nVENDOR_ID_TIROLER_GEBIETSKRANKENKASSE = 25340\nVENDOR_ID_IMMOSYS_LLC = 25341\nVENDOR_ID_IRCCS_POLICLINICO_SMATTEO = 25342\nVENDOR_ID_FACHHOCHSCHULE_FRANKFURT_AM_MAIN_UNIVERSITY_OF_APPLIED_SCIENCES = 25343\nVENDOR_ID_BLACKSPIDER_TECHNOLOGIES_LTD = 25344\nVENDOR_ID_CONSEIL_GNRAL_DU_VAL_DOISE = 25345\nVENDOR_ID_SAMCA = 25346\nVENDOR_ID_TETRA_NETWORKING_VOF = 25347\nVENDOR_ID_SJB_COMMUNICATIONS = 25348\nVENDOR_ID_CDSW_CITY_DATA_SOFTWARE_SRO = 25349\nVENDOR_ID_HAYMARKET_PUBLISHING_SERVICES_LIMITED = 25350\nVENDOR_ID_AMAG_AUTOMOBIL_UND_MOTOREN_AG = 25351\nVENDOR_ID_KUWAIT_METEOROLOGICAL_DEPARTMENT = 25352\nVENDOR_ID_GIBSON_DUNN_CRUTCHER_LLP = 25353\nVENDOR_ID_TRAVEL_SVCS_LLC = 25354\nVENDOR_ID_SHENZHEN_HAISHUO_TECHNOLOGIES_COLTD = 25355\nVENDOR_ID_E2E_IT_SOLUTIONS_PTY_LTD = 25356\nVENDOR_ID_DOTSTREAM = 25357\nVENDOR_ID_HUBERSUHNER_AG = 25358\nVENDOR_ID_PERSPEKTIV_BREDBAND_AB = 25359\nVENDOR_ID_SMACL = 25360\nVENDOR_ID_DR_JAN_HENDRIK_DRNER = 25361\nVENDOR_ID_HEADROOM_BROADCAST_GMBH = 25362\nVENDOR_ID_MEDICAL_IMAGING_SOFTWARE_AMSTERDAM = 25363\nVENDOR_ID_STUDIO_TRE_SRL = 25364\nVENDOR_ID_DIGITUM_LTD = 25365\nVENDOR_ID_IPTIC_SYSTEMS = 25366\nVENDOR_ID_MOBILE_STREAMS_PLC = 25367\nVENDOR_ID_ASSOCIATION_CRANS = 25368\nVENDOR_ID_RELIACT_SOLUTIONS_SL = 25369\nVENDOR_ID_EXTENDASP_LLC = 25370\nVENDOR_ID_ARCITECTA_PTY_LTD = 25371\nVENDOR_ID_PEGASUS_CONSULTANTS_SW_LTD = 25372\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DO_SUDOESTE_DA_BAHIA = 25373\nVENDOR_ID_UNIVERSITT_HAMBURG_REGIONALES_RECHENZENTRUM_HAMBURG_UNIVERSITY_COMPUTING_CENTER = 25374\nVENDOR_ID_NEXTSYSSECURE_INC = 25375\nVENDOR_ID_SURETEC_SYSTEMS_LTD = 25376\nVENDOR_ID_BAUMAN_MOSCOW_STATE_TECHNICAL_UNIVERSITY = 25377\nVENDOR_ID_SCHRODINGER_INC = 25378\nVENDOR_ID_AMERICAN_CHARTERED_BANK = 25379\nVENDOR_ID_MICHAEL_DERRICO = 25380\nVENDOR_ID_RX_NETWORKS_INC = 25381\nVENDOR_ID_NANITE_SERVICES_LIMITED = 25382\nVENDOR_ID_TICHOU = 25383\nVENDOR_ID_ALLIANT_ENERGY = 25384\nVENDOR_ID_SOCIETE_ANONYME_DE_LA_COMMUNICATION_SECURISEE = 25385\nVENDOR_ID_ELETEX_CO_LTD = 25386\nVENDOR_ID_XCURENET = 25387\nVENDOR_ID_GADGET_FACTORY_LTD = 25388\nVENDOR_ID_WESTCOAST_UNIVERSITY_OF_APPLIED_SCIENCES = 25389\nVENDOR_ID_ULRICH_FLAMM = 25390\nVENDOR_ID_SECURE_IT_SA = 25391\nVENDOR_ID_INABENSA = 25392\nVENDOR_ID_ALLIANT_TECHNOLOGIES = 25393\nVENDOR_ID_SUNFLOWER_TECHNOLOGIES = 25394\nVENDOR_ID_AQUILA_INC = 25395\nVENDOR_ID_DIGITAL_ALCHEMISTS_GMBH = 25396\nVENDOR_ID_PRIMETIME_MEDICAL_SOFTWARE = 25397\nVENDOR_ID_GEOFORSCHUNGSZENTRUM_POTSDAM = 25398\nVENDOR_ID_RHNET_INC = 25399\nVENDOR_ID_INTERSYSTEMS_USA = 25400\nVENDOR_ID_MU_NET_INC = 25401\nVENDOR_ID_FLANTEL_COMMUNICATIONS = 25402\nVENDOR_ID_CLEARCANVAS_INC = 25403\nVENDOR_ID_CITADELORG_THE_CITADEL_GROUPWARE_PROJECT = 25404\nVENDOR_ID_BOSTON_LINUX_UNIX = 25405\nVENDOR_ID_IPTIVIA_INC = 25406\nVENDOR_ID_ENGIBY_SRL = 25407\nVENDOR_ID_BARNET = 25408\nVENDOR_ID_SUPERCLICK_NETWORKS_INC = 25409\nVENDOR_ID_TECHNICAL_RESOURCES_INTERNATIONAL = 25410\nVENDOR_ID_TRAINING_TEAM_SRL = 25411\nVENDOR_ID_ORCAWARE_TECHNOLOGIES = 25412\nVENDOR_ID_FH_TRIER_UNIVERSITY_OF_APPLIED_SCIENCES = 25413\nVENDOR_ID_CITY_OF_HENDERSON_NEVADA = 25414\nVENDOR_ID_CROSSCERT = 25415\nVENDOR_ID_ACTIVE_DATABASE_TEAM = 25416\nVENDOR_ID_ROOTKLUBORG = 25417\nVENDOR_ID_INED_INSTITUT_NATIONAL_DETUDES_DEMOGRAPHIQUES = 25418\nVENDOR_ID_COMPANYNAME_2 = 25419\nVENDOR_ID_MAF = 25420\nVENDOR_ID_POSTINI_INC = 25421\nVENDOR_ID_VILNIUS_UNIVERSITY = 25422\nVENDOR_ID_BABS_PAYLINK_AB = 25423\nVENDOR_ID_NORCONTROL_IT_PTY_LTD = 25424\nVENDOR_ID_CONDOR_LEBENSVERSICHERUNGSAG = 25425\nVENDOR_ID_LENSOFT_LTD = 25426\nVENDOR_ID_AVENDA_SYSTEMS_INC = 25427\nVENDOR_ID_AGMEN = 25428\nVENDOR_ID_COMARCH_SA = 25429\nVENDOR_ID_NETSPECIALISTEN = 25430\nVENDOR_ID_INGENICO = 25431\nVENDOR_ID_SERVERSCHECK_BVBA = 25432\nVENDOR_ID_HAIVISION_SYSTEMS_INC = 25433\nVENDOR_ID_ENGINEERING_SCHOOL_OF_GENEVA_EIG = 25434\nVENDOR_ID_GREAT_LAKES_INTERNET_INC = 25435\nVENDOR_ID_LOREN_DATA_CORP = 25436\nVENDOR_ID_CHAIR_MMSP_OF_PERM_STATE_TECHNICAL_UNIVERSITY = 25437\nVENDOR_ID_B_ONE_APS = 25438\nVENDOR_ID_DIGITAL_GENESIS_TECHNOLOGIES = 25439\nVENDOR_ID_RADIQAL_LLC = 25440\nVENDOR_ID_LAGIS_INTERNET_SERVICE_PROVIDER_GMBH = 25441\nVENDOR_ID_AIRAYA_CORP = 25442\nVENDOR_ID_LOUISMC = 25443\nVENDOR_ID_FASTWIRE = 25444\nVENDOR_ID_ASTRALBLUE = 25445\nVENDOR_ID_BURN_NETWORKS_PTY_LTD = 25446\nVENDOR_ID_JIREH_INTERNATIONAL_INC = 25447\nVENDOR_ID_VERARI_SYSTEMS_INC = 25448\nVENDOR_ID_BEIJING_EASY_BROADBAND_TECHNOLOGY_COLTD = 25449\nVENDOR_ID_ETRAINTRONICSCOM = 25450\nVENDOR_ID_UFPS_TYMENSKOY_OBLASTI_FILIAL_FGUP_POCHTA_ROSSII = 25451\nVENDOR_ID_SIKOM_SOFTWARE_GMBH = 25452\nVENDOR_ID_SEAVIEW_SUPPORT_SYSTEMS_PVT_LTD = 25453\nVENDOR_ID_LICOMM_CO_LTD = 25454\nVENDOR_ID_TRINODAL_SL = 25455\nVENDOR_ID_WOORIBYUL_TELECOM_CO_LTD = 25456\nVENDOR_ID_SCHWEIZERISCHE_BIBLIOTHEK_F252R_BLINDE_UND_SEHBEHINDERTE = 25457\nVENDOR_ID_XTRAMIND_TECHNOLOGIES_GMBH = 25458\nVENDOR_ID_BONNET_LTD = 25459\nVENDOR_ID_COMPUTERLAND_SA = 25460\nVENDOR_ID_PALO_ALTO_NETWORKS = 25461\nVENDOR_ID_APPLIED_WIRELESS_IDENTIFICATIONS_GROUP_INC = 25462\nVENDOR_ID_NANSHANBRIDGE_COLTD = 25463\nVENDOR_ID_DEMARC_TECHNOLOGY_GROUP_LLC = 25464\nVENDOR_ID_FIRST_STANDARDS_ORGANISATION_FSO = 25465\nVENDOR_ID_ASIA_BANK_CARD_UNION_ABCUNIONORG = 25466\nVENDOR_ID_B_LEX_INFORMATION_TECHNOLOGIES = 25467\nVENDOR_ID_FORTICA_LTD = 25468\nVENDOR_ID_ALIASOURCE = 25469\nVENDOR_ID_NORTH_SUBURBAN_ACCESS_CORP = 25470\nVENDOR_ID_GRIDPOINT_SYSTEMS = 25471\nVENDOR_ID_ALLTEK_TECHNOLOGY_CORP = 25472\nVENDOR_ID_TELELOGOS = 25473\nVENDOR_ID_LISIS_NV = 25474\nVENDOR_ID_INNOVANT_PTY_LTD = 25475\nVENDOR_ID_VIDEOCELLS_LTD = 25476\nVENDOR_ID_ALPHA_NOVA_BETRIEBSGESMBH = 25477\nVENDOR_ID_LOCAL_SOLUTIONS = 25478\nVENDOR_ID_X_TEND = 25479\nVENDOR_ID_CONGRUENTIX_LLC = 25480\nVENDOR_ID_CONVERGIN_LTD = 25481\nVENDOR_ID_GLOBAL_VILLAGE_DATA_SOLUTIONS = 25482\nVENDOR_ID_ISCIENCE_SURGICAL = 25483\nVENDOR_ID_AKDB = 25484\nVENDOR_ID_PATENTANWALTSKANZLEI_HORNS = 25485\nVENDOR_ID_ASSET_ARCHIVES_INC = 25486\nVENDOR_ID_BISHOP_TECHNOLOGIES_INC = 25487\nVENDOR_ID_V2_TELECOM_LTDA = 25488\nVENDOR_ID_HENRIK_NORDSTROM_CONSULTING = 25489\nVENDOR_ID_WAGNER_TIEFKUEHLPRODUKTE_GMBH = 25490\nVENDOR_ID_NATIONAL_BANK_OF_THE_REPUBLIC_OF_BELARUS = 25491\nVENDOR_ID_RUUKKI = 25492\nVENDOR_ID_VNUNET_EUROPE = 25493\nVENDOR_ID_IVAN_DOLEZAL = 25494\nVENDOR_ID_OPTIMACOM_SRL = 25495\nVENDOR_ID_CEMES_CNRS = 25496\nVENDOR_ID_TRANSBIT_SPOLKA_Z_OO = 25497\nVENDOR_ID_INSECMA_SOLUTIONS_GMBH = 25498\nVENDOR_ID_GUIDECOM_GMBH = 25499\nVENDOR_ID_INTERKEY_INC = 25500\nVENDOR_ID_VAULTLAB_INC = 25501\nVENDOR_ID_ACCUREV_INC = 25502\nVENDOR_ID_NETWORK_INTEGRITY_SYSTEMS_INC = 25503\nVENDOR_ID_ST_EDWARDS_UNIVERSITY_INC = 25504\nVENDOR_ID_SPACENETWORK = 25505\nVENDOR_ID_H3C = 25506\nVENDOR_ID_JAPAN_MARITIME_SELF_DEFENSE_FORCE = 25507\nVENDOR_ID_NARRASOFT_PHILIPPINES_INC = 25508\nVENDOR_ID_CMER = 25509\nVENDOR_ID_SYMEDIA_SA = 25510\nVENDOR_ID_SPALE_NETWORKS = 25511\nVENDOR_ID_SIMPLE_NETWORKS_2 = 25512\nVENDOR_ID_VIRTUALLINK_TECHNOLOGIES_PTE_LTD = 25513\nVENDOR_ID_YATININC = 25514\nVENDOR_ID_LKH_VILLACH = 25515\nVENDOR_ID_VERIZONBUSINESS = 25516\nVENDOR_ID_CRITERIUM_SOLUES_EM_INFORMTICA_LTDA = 25517\nVENDOR_ID_STORCASE_TECHNOLOGY_INC = 25518\nVENDOR_ID_WASHINGTON_COUNTY_SCHOOL_DISTRICT = 25519\nVENDOR_ID_QUADRICS_LTD = 25520\nVENDOR_ID_NEXTCONNECT_LTD = 25521\nVENDOR_ID_RENKO_TECHNOLOGIES = 25522\nVENDOR_ID_HOMECAST_CO_LTD = 25523\nVENDOR_ID_OPEN_SOURCE_HARDWARE_ENGINEERING_COMMUNITY_OSHEC = 25524\nVENDOR_ID_TCC_TELECOMMUNICATION_AND_COMPUTER_TECHNOLOGY_LTD = 25525\nVENDOR_ID_IPROCESS = 25526\nVENDOR_ID_NEBRASKA_PUBLIC_POWER_DISTRICT = 25527\nVENDOR_ID_LABORATRIO_NACIONAL_DE_COMPUTAO_CIENTFICA = 25528\nVENDOR_ID_WORLD_LINKS = 25529\nVENDOR_ID_AIRDAT_LLC = 25530\nVENDOR_ID_B2E_TECHNOLOGIES_PTY_LTD = 25531\nVENDOR_ID_BCA_SERVICES_LTD = 25532\nVENDOR_ID_IDENTITYFORGE_LLC = 25533\nVENDOR_ID_LUSAN_SYSTEMS = 25534\nVENDOR_ID_KLAS_LTD = 25535\nVENDOR_ID_PROBARIS_TECHNOLOGIES_INC = 25536\nVENDOR_ID_THOMAS_FRIEDL = 25537\nVENDOR_ID_GNU_TELEPHONY = 25538\nVENDOR_ID_OSAKA_UNIVERSITY = 25539\nVENDOR_ID_NETTOOLWORKS_INC = 25540\nVENDOR_ID_JSTREAM_TECHNOLOGIES_INC = 25541\nVENDOR_ID_ORTIKON_INTERACTIVE_OY = 25542\nVENDOR_ID_MICROBIT_20_AB = 25543\nVENDOR_ID_IPTUNE_LTD = 25544\nVENDOR_ID_EADS_CASA = 25545\nVENDOR_ID_BOOTS_GROUP_PLC = 25546\nVENDOR_ID_VION = 25547\nVENDOR_ID_OPENCRAFT = 25548\nVENDOR_ID_STAR_GROUP = 25549\nVENDOR_ID_ZHIHAO = 25550\nVENDOR_ID_AMEC = 25551\nVENDOR_ID_POXIX = 25552\nVENDOR_ID_SONAS_INNOVATION_LTD = 25553\nVENDOR_ID_WIDERWEB_LTD = 25554\nVENDOR_ID_SOCIAL_SCIENCE_RESEARCH_COUNCIL = 25555\nVENDOR_ID_BEYOND_2000_LTD = 25556\nVENDOR_ID_XEROX_ORG = 25557\nVENDOR_ID_INFOBLOX_WINCONNECT_FORMERLY_IPANTO = 25558\nVENDOR_ID_TIVELLA_INC = 25559\nVENDOR_ID_MINISTERIO_PUBLICO_DO_DF_E_TERRITORIOS = 25560\nVENDOR_ID_TELECOM_PROTECTION_TECHNOLOGIES_LIMITED = 25561\nVENDOR_ID_FIRMIX_SOFTWARE_GMBH = 25562\nVENDOR_ID_STADTVERWALTUNG_DUESSELDORF = 25563\nVENDOR_ID_T7_EV = 25564\nVENDOR_ID_PIXALITY_GMBH = 25565\nVENDOR_ID_STAATL_GEPR_INF_MARKUS_KARG = 25566\nVENDOR_ID_CINGULAR_WIRELESS_LLC = 25567\nVENDOR_ID_DOUGLAS_FAST_NET = 25568\nVENDOR_ID_POINTS_SOUTH = 25569\nVENDOR_ID_MACKELPRANG_RESEARCH = 25570\nVENDOR_ID_NDOSA_TECHNOLOGIES_INC_2 = 25571\nVENDOR_ID_COLUMBIA_INTERNATIONAL_COLLEGE = 25572\nVENDOR_ID_POINT_CLARK_NETWORKS_LTD = 25573\nVENDOR_ID_FXC_INC = 25574\nVENDOR_ID_BEVUTA = 25575\nVENDOR_ID_AXMEDIS_ORGANISATION = 25576\nVENDOR_ID_NORLINX_INC = 25577\nVENDOR_ID_INTERCHANGE_CORPORATION = 25578\nVENDOR_ID_INFO_TECH_INC = 25579\nVENDOR_ID_UNIVERSIDAD_DE_EL_SALVADOR = 25580\nVENDOR_ID_MUSMAP_TEAM = 25581\nVENDOR_ID_EMPLOYEASE_INC = 25582\nVENDOR_ID_GFK = 25583\nVENDOR_ID_AXZONA_LTD = 25584\nVENDOR_ID_INFOGLOBAL_SA = 25585\nVENDOR_ID_UNIFIED_GROUP_LTD = 25586\nVENDOR_ID_JINITECH_INC = 25587\nVENDOR_ID_UNIVERSITY_OF_TEXAS_CENTER_FOR_AGILE_TECHNOLOGY = 25588\nVENDOR_ID_COMUNE_DI_CAGLIARI = 25589\nVENDOR_ID_TECNOWORLD_COM_IMP_EXP_LTDA = 25590\nVENDOR_ID_NATIONAL_CLEARINGHOUSE_FOR_REHABILITATION_TRAINING_MATERIALS = 25591\nVENDOR_ID_INTERCORP = 25592\nVENDOR_ID_AETHERNET_LTD = 25593\nVENDOR_ID_GOLLARD = 25594\nVENDOR_ID_CZNIC_ZSPO = 25595\nVENDOR_ID_DIGITALSIGN_CERTIFICADORA_DIGITAL = 25596\nVENDOR_ID_FIREEYE_INC = 25597\nVENDOR_ID_GEHLBACH_TECHNICAL_SERVICES_INC = 25598\nVENDOR_ID_SECURENET_PL = 25599\nVENDOR_ID_EZVALIDATION_INC = 25600\nVENDOR_ID_FSP_COMPUTER_NETZWERKE = 25601\nVENDOR_ID_TELEKOM_AUSTRIA_AG = 25602\nVENDOR_ID_LOCUBECOM = 25603\nVENDOR_ID_AGOS_SPA = 25604\nVENDOR_ID_INGENIEURBUERO_T_SCHOLZ = 25605\nVENDOR_ID_USI = 25606\nVENDOR_ID_ANDRITZ_AG = 25607\nVENDOR_ID_IRITEC = 25608\nVENDOR_ID_STREAMVISION = 25609\nVENDOR_ID_THE_SEEMIS_GROUP = 25610\nVENDOR_ID_LAFAYETTE_COLLEGE = 25611\nVENDOR_ID_TRILLIANT_NETWORKS = 25612\nVENDOR_ID_CGI_CONCEPT = 25613\nVENDOR_ID_AURORAS_ENTERTAINMENT = 25614\nVENDOR_ID_COMPUTER_SAVVY = 25615\nVENDOR_ID_CARDIAC_SCIENCE_CORPORATION = 25616\nVENDOR_ID_CLEARCUBE_TECHNOLOGY = 25617\nVENDOR_ID_OMNITROL_NETWORKS_INC = 25618\nVENDOR_ID_ULTRAGREEN = 25619\nVENDOR_ID_OST_WEST_HANDELSBANK_AG = 25620\nVENDOR_ID_Z_MICROSYSTEMS = 25621\nVENDOR_ID_JANETUK_FORMERLY_UKERNA_UNITED_KINGDOM_EDUCATION_AND_RESEARCH_NETWORKING_ASSOCIATION = 25622\nVENDOR_ID_OPENVAS = 25623\nVENDOR_ID_KENT_SCHOOL_DISTRICT = 25624\nVENDOR_ID_CHATTENASSOCIATES_INC = 25625\nVENDOR_ID_CRUFTY = 25626\nVENDOR_ID_OHIO_DEPARTMENT_OF_PUBLIC_SAFETY = 25627\nVENDOR_ID_PEROT_SYSTEMS_CORPORATION = 25628\nVENDOR_ID_US_ENVIRONMENTAL_PROTECTION_AGENCY = 25629\nVENDOR_ID_GROUPE_MUTUEL = 25630\nVENDOR_ID_INTERNATIONAL_NEWSPAPER_NETWORK_LLC = 25631\nVENDOR_ID_THOROLD_ALARM = 25632\nVENDOR_ID_LECENTRENET = 25633\nVENDOR_ID_UNIQUEOBJECT = 25634\nVENDOR_ID_CARLO_GAVAZZI_COMPUTING_SOLUTIONS_INC = 25635\nVENDOR_ID_CONTROL_ALTERNATIVE_SOLUTIONS_INC = 25636\nVENDOR_ID_POLICE_BRUXELLES_CAPITALE_IXELLES_ZP_5339 = 25637\nVENDOR_ID_UNIADEX_LTD = 25638\nVENDOR_ID_KMS_SYSTEMS_INC = 25639\nVENDOR_ID_REAL_SOFTSERVICE = 25640\nVENDOR_ID_PAPETERIES_HAMELIN = 25641\nVENDOR_ID_CHP_CONSULTING_LTD = 25642\nVENDOR_ID_INTERMEDIASUD = 25643\nVENDOR_ID_LILAND_OPEN_IT_SOLUTIONS_GMBH = 25644\nVENDOR_ID_COMMUNITY_TV_GMBH = 25645\nVENDOR_ID_BAB_TECHNOLOGIE_GMBH = 25646\nVENDOR_ID_HUNGARIAN_CUSTOMS_SERVICE_VPOP = 25647\nVENDOR_ID_ECOLE_NATIONALE_VETERINAIRE_DE_NANTES = 25648\nVENDOR_ID_TECHNOBOX_INC = 25649\nVENDOR_ID_SUNUP_DESIGN_SYSTEMS_INC = 25650\nVENDOR_ID_EXALT_COMMUNICATIONS = 25651\nVENDOR_ID_TASNEEM_ELECTRONICS_LLC = 25652\nVENDOR_ID_OAKLEY_NETWORKS_INC = 25653\nVENDOR_ID_PSI_SYSTEMS_INC = 25654\nVENDOR_ID_MIMS_SA = 25655\nVENDOR_ID_AXODE_EURL = 25656\nVENDOR_ID_NWCG = 25657\nVENDOR_ID_ESSENTIA_SPA = 25658\nVENDOR_ID_POLARSAT_INC = 25659\nVENDOR_ID_STARFLIGHT_ELECTRONICS = 25660\nVENDOR_ID_DATAPRO_GROUP_LIMITED = 25661\nVENDOR_ID_OPWAY_OPTICAL_TECHNOLOGYWUXICOLTD = 25662\nVENDOR_ID_INFOWARELAB_COLTD = 25663\nVENDOR_ID_TERASCALA_INC = 25664\nVENDOR_ID_ESSENTEL_INC = 25665\nVENDOR_ID_TELENAV_INC = 25666\nVENDOR_ID_PADJEN = 25667\nVENDOR_ID_BATTELLE_MEMORIAL_INSTITUTE = 25668\nVENDOR_ID_MARINER_PARTNERS_INC = 25669\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_FULLERTON = 25670\nVENDOR_ID_EC_HUGBUNADUR_EHF = 25671\nVENDOR_ID_RESPONSYS = 25672\nVENDOR_ID_GRUPO_IT_DEUSTO_SL = 25673\nVENDOR_ID_JLUNICINC = 25674\nVENDOR_ID_TEST_O_MAT = 25675\nVENDOR_ID_PROCILON_GMBH = 25676\nVENDOR_ID_ACTION_SOFT = 25677\nVENDOR_ID_EMBL_HEIDELBERG = 25678\nVENDOR_ID_SECUREAXIS_SOFTWARE = 25679\nVENDOR_ID_PIXEN_TECHNOLOGIES_PVT_LTD = 25680\nVENDOR_ID_INSTITUTO_MUNICIPAL_DE_CULTURA_Y_JUVENTUD_DE_BURJASSOT = 25681\nVENDOR_ID_DONLEY_CONSULTING = 25682\nVENDOR_ID_EPSTEIN_BECKER_GREEN_PC = 25683\nVENDOR_ID_PEROT_SYSTEMS_GOVERNMENT_SERVICES = 25684\nVENDOR_ID_HURRICANE_LABS_LLC = 25685\nVENDOR_ID_MCTEL_MONACO_TELEMATIQUE = 25686\nVENDOR_ID_GENDREAU_PELCHAT = 25687\nVENDOR_ID_CAIXANOVA = 25688\nVENDOR_ID_ALSATIS = 25689\nVENDOR_ID_REM_PROBE_LTD = 25690\nVENDOR_ID_EYES_JAPAN_CO_LTD = 25691\nVENDOR_ID_ANDREAS_STIHL_AG_CO_KG = 25692\nVENDOR_ID_INTERNETWORX_SYSTEMS_INC = 25693\nVENDOR_ID_DRS_SURVEILLANCE_SUPPORT_SYSTEMS_INC = 25694\nVENDOR_ID_VESTERGAARD_IT = 25695\nVENDOR_ID_NEDAP_NV = 25696\nVENDOR_ID_BBK = 25697\nVENDOR_ID_KSB_ITALIA_SPA = 25698\nVENDOR_ID_GENERIC_VARIABLES = 25699\nVENDOR_ID_PROTOKON_KFT = 25700\nVENDOR_ID_GAMIC_MBH = 25701\nVENDOR_ID_PCSOFA = 25702\nVENDOR_ID_CYBERSYS = 25703\nVENDOR_ID_INTER_TOUCH_MALAYSIA_SDN_BHD = 25704\nVENDOR_ID_PIXTREE_TECHNOLOGIES_INC = 25705\nVENDOR_ID_VIASCOPE_INT = 25706\nVENDOR_ID_MARKSMAN = 25707\nVENDOR_ID_MILDE_SOFTWARE_SOLUTIONS_MSS = 25708\nVENDOR_ID_WINDSTREAM_COMMUNICATIONS_INC = 25709\nVENDOR_ID_PHOENIX_WORLDWIDE_INDUSTRIES_INC = 25710\nVENDOR_ID_CORAL8_INC = 25711\nVENDOR_ID_THE_HIGHER_GEAR_GROUP_INC = 25712\nVENDOR_ID_MAGYAR_TELEKOM = 25713\nVENDOR_ID_CHENGDU_GUYUE_ELECTRONICS_COLTD = 25714\nVENDOR_ID_JUMPTVCOM_INC = 25715\nVENDOR_ID_MANUEL_DOMNGUEZ_HIDALGO = 25716\nVENDOR_ID_RAVN_WEBVEVERIET_AS = 25717\nVENDOR_ID_TACTION = 25718\nVENDOR_ID_POLYSYS_LTD = 25719\nVENDOR_ID_INGENIEURBRO_KUHLMANN = 25720\nVENDOR_ID_LINWAVE_TECHNOLOGY = 25721\nVENDOR_ID_INTEGRATED_FINANCIAL_ARRANGEMENTS_PLC = 25722\nVENDOR_ID_PHOENIX_DATABASE_INFORMATIONSTECHNOLOGIE_GMBH = 25723\nVENDOR_ID_UNIVERSITI_SAINS_MALAYSIA = 25724\nVENDOR_ID_SOSETH = 25725\nVENDOR_ID_CYRIX_TECHNOLOGIES_LIMITED = 25726\nVENDOR_ID_Q9_NETWORKS_INC = 25727\nVENDOR_ID_ZAO_LIGHT_COMMUNICATION = 25728\nVENDOR_ID_RADIODATA_GMBH = 25729\nVENDOR_ID_ASMITH_HOME = 25730\nVENDOR_ID_WEB_XTREME_INC = 25731\nVENDOR_ID_MIRAGO_PLC = 25732\nVENDOR_ID_CELLACT_LTD = 25733\nVENDOR_ID_BOLIGNET_AARHUS = 25734\nVENDOR_ID_VISIONEE_SRL = 25735\nVENDOR_ID_DUVAL_COUNTY_PUBLIC_SCHOOLS = 25736\nVENDOR_ID_REALITY_COMMUNICATIONS = 25737\nVENDOR_ID_INFOLOG_GMBH = 25738\nVENDOR_ID_INTERMET_UECKERMUENDE = 25739\nVENDOR_ID_NAKAMURA_TECHNOLOGIES_LTD = 25740\nVENDOR_ID_ARIANE_INGENIERIE = 25741\nVENDOR_ID_ALDI_EINKAUF_GMBH_CO_OHG = 25742\nVENDOR_ID_KRONTEK_PTY_LTD = 25743\nVENDOR_ID_AVILLON_NETWORKS = 25744\nVENDOR_ID_SMART_COMMUNICATIONS_INC = 25745\nVENDOR_ID_ARCADIA_LAB_SRL = 25746\nVENDOR_ID_YELLOWJACKET_SOFTWARE_INC = 25747\nVENDOR_ID_TEMPLER_WIRTSCHAFTSING_BUERO = 25748\nVENDOR_ID_CENGEN_INC = 25749\nVENDOR_ID_SAM_GROUP_INC = 25750\nVENDOR_ID_PYTHON_TECHNOLOGY_LIMITED = 25751\nVENDOR_ID_GALLERY_SOLO = 25752\nVENDOR_ID_KPH_COMPUTERS = 25753\nVENDOR_ID_SHANGHAI_ONLAN_COMMUNICATION_TECHCOLTD = 25754\nVENDOR_ID_LIFERAY_LLC = 25755\nVENDOR_ID_MAHIDOL_WITTAYANUSORN_PUBLIC_ORGANIZATION = 25756\nVENDOR_ID_MINISTER_OF_INTERIOR_OF_SAUDI_ARABIA = 25757\nVENDOR_ID_SIF_INC = 25758\nVENDOR_ID_ALMEN_LABORATORIES_INC = 25759\nVENDOR_ID_DOCTORS_TELEHEALTH_NETWORK = 25760\nVENDOR_ID_ABB_AUTOMATION_GMBH = 25761\nVENDOR_ID_PERSONALOFFICE = 25762\nVENDOR_ID_HAPPYDOO_SAS = 25763\nVENDOR_ID_EXMOS_LTD = 25764\nVENDOR_ID_BARCLAYS_GLOBAL_INVESTORS_LTD = 25765\nVENDOR_ID_CHRISTIE_DIGITAL_SYSTEMS = 25766\nVENDOR_ID_KOYA_IXIS_S_C = 25767\nVENDOR_ID_DATALLEGRO_INC = 25768\nVENDOR_ID_UTRONIX_ELEKTRONIKUTVECKLING_AB = 25769\nVENDOR_ID_CHATELPORG = 25770\nVENDOR_ID_MOBILE_365_INC = 25771\nVENDOR_ID_ASTHA_TECHNOLOGIES_PVT_LTD = 25772\nVENDOR_ID_WEMEUS = 25773\nVENDOR_ID_BCEAO = 25774\nVENDOR_ID_MIDPHASE_SERVICES_INC = 25775\nVENDOR_ID_HANGZHOU_ZHONGWEI_ELECTRONICS_LTD = 25776\nVENDOR_ID_TECHNOMS = 25777\nVENDOR_ID_IRKUTSK_STATE_TRANSPORT_UNIVERSITY_IRGUPS = 25778\nVENDOR_ID_MITO_PERFORMANCE = 25779\nVENDOR_ID_SANCHIN_CONSULTING_AB = 25780\nVENDOR_ID_NETFORT_TECHNOLOGIES_LIMITED = 25781\nVENDOR_ID_MSA_MANAGEMENT_SOLUTIONS_GMBH = 25782\nVENDOR_ID_BLUECOM_CA = 25783\nVENDOR_ID_DEUTSCHE_PROVINZ_DER_SALESIANER_DON_BOSCOS_KOER = 25784\nVENDOR_ID_UNIVERSITAT_POLITCNICA_DE_CATALUNYA_UPC = 25785\nVENDOR_ID_AGILESOFT_BVBA = 25786\nVENDOR_ID_DOXAT_SOFTWAREENTWICKLUNGS_UND_DIENSTLEISTUNGS_GMBH = 25787\nVENDOR_ID_DAIMS_LTD = 25788\nVENDOR_ID_DIGITAL_WORK_COLTD = 25789\nVENDOR_ID_SIRONA_DENTAL_SYSTEMS_GMBH = 25790\nVENDOR_ID_CERTSIGNEU = 25791\nVENDOR_ID_LEADERIT = 25792\nVENDOR_ID_HFELE_GMBH_CO_KG = 25793\nVENDOR_ID_XSALTO = 25794\nVENDOR_ID_VICARIAL_TECHNOLOGY = 25795\nVENDOR_ID_MENBIT_TECHNOLOGY_CO_LTD = 25796\nVENDOR_ID_SOUTHERLAND_CONSULTING_INC = 25797\nVENDOR_ID_ELABORATED_NETWORKS_GMBH = 25798\nVENDOR_ID_WEST_LIBERTY_TELEPHONE_COMPANY = 25799\nVENDOR_ID_AMPLE_COMMUNICATIONS_INC = 25800\nVENDOR_ID_IDENTITA_TECHNOLOGIES_INC = 25801\nVENDOR_ID_ALIADIS = 25802\nVENDOR_ID_TOTAL_SYSTEM_SERVICES_INC = 25803\nVENDOR_ID_SCALA_INC = 25804\nVENDOR_ID_THOMSON_LEARNING = 25805\nVENDOR_ID_SONNET_TECHNOLOGIES_INC = 25806\nVENDOR_ID_HEUNG_TO_MIDDLE_SCHOOL_TIN_SHUI_WAI = 25807\nVENDOR_ID_EBIZ_LTD = 25808\nVENDOR_ID_MOBILEX_AG = 25809\nVENDOR_ID_ABE_SOFTWARE = 25810\nVENDOR_ID_INLOG_SA = 25811\nVENDOR_ID_HOME_GATEWAY_INITIATIVE = 25812\nVENDOR_ID_SAI_FURNITURES_LTD = 25813\nVENDOR_ID_SUBZILLA = 25814\nVENDOR_ID_WIREVOX = 25815\nVENDOR_ID_ROLAND_DG_CORPORATION = 25816\nVENDOR_ID_POSEIDON_NETWORKS = 25817\nVENDOR_ID_THE_SAKAI_FOUNDATION = 25818\nVENDOR_ID_DOYOUSOFT = 25819\nVENDOR_ID_SKYBLUE_TECHNOLOGIES_INC = 25820\nVENDOR_ID_CONSILIENT_TECHNOLOGIES_CORP = 25821\nVENDOR_ID_ST_HUNGARY_LTD = 25822\nVENDOR_ID_CIO_INFORMATIQUE_INDUSTRIELLE = 25823\nVENDOR_ID_DEMENTIA_7 = 25824\nVENDOR_ID_ASGARDS_REALM = 25825\nVENDOR_ID_PETER_J_LEONARD_SMALL_BUSINESS_CONSULTING_SERVICES = 25826\nVENDOR_ID_BIG_LOTS_STORES_INC = 25827\nVENDOR_ID_TEXAS_HEALTH_AND_HUMAN_SERVICES = 25828\nVENDOR_ID_BEIJING_SUPERLINK_TELECOMMUNICATIONS_COLTD = 25829\nVENDOR_ID_4PLAYERS_GMBH = 25830\nVENDOR_ID_RHINOCORPS_LTD_CO = 25831\nVENDOR_ID_GLOBALSCAPE_INC = 25832\nVENDOR_ID_EDWARD_W_SPARROW_HOSPITAL_ASSOCIATION = 25833\nVENDOR_ID_INTEROPERABILIDAD_SA_DE_CV = 25834\nVENDOR_ID_PATIENTLINE_UK_LTD = 25835\nVENDOR_ID_AUSTRIAN_ACADEMY_OF_SCIENCES = 25836\nVENDOR_ID_ELECTRONNYI_GOROD_LLD = 25837\nVENDOR_ID_TAGAWA_SOFTWARE_ENGINEERING = 25838\nVENDOR_ID_ISTANTE_SRL = 25839\nVENDOR_ID_LOGCODE_SARL = 25840\nVENDOR_ID_ARAKELIAN_SOFTWARE_INC = 25841\nVENDOR_ID_TECHNICA_NECESSE_EST = 25842\nVENDOR_ID_VOIPCOUK = 25843\nVENDOR_ID_SENECA_TECHNOLOGY_CORPORATION = 25844\nVENDOR_ID_MIYATSU_COLTD = 25845\nVENDOR_ID_AIN_MANAGER_COMPANY_INC = 25846\nVENDOR_ID_M_NETWORKS_LLC = 25847\nVENDOR_ID_BALLY_TECHNOLOGIES_INC = 25848\nVENDOR_ID_DEAS_DEUTSCHE_ASSEKURANZ_MAKLER_GMBH = 25849\nVENDOR_ID_SMART_TECH_21_INC = 25850\nVENDOR_ID_5BY5_SOFTWARE_VENTURES_LTD = 25851\nVENDOR_ID_CITY_COMPUTING_LTD_LONDON_UK_1767817 = 25852\nVENDOR_ID_RUBIN_RT = 25853\nVENDOR_ID_MULTISOFT_LTD = 25854\nVENDOR_ID_NET24_LIMITED = 25855\nVENDOR_ID_FREE_UNIVERSITY_OF_BOZEN_BOLZANO = 25856\nVENDOR_ID_FEMTO_ST = 25857\nVENDOR_ID_THE_ROYAL_COLLEGE_OF_SURGEONS_IN_IRELAND = 25858\nVENDOR_ID_THE_AKAMALI_GROUP_INC = 25859\nVENDOR_ID_A_VONDERHAAR_NETWORKS = 25860\nVENDOR_ID_TANAPRO_GMBH = 25861\nVENDOR_ID_ASSIST_WISETECH_SA = 25862\nVENDOR_ID_BRENSON_PACIFIC_TECHNOLOGIES_LTD = 25863\nVENDOR_ID_VIDEOPROPULSION_INTERACTIVE_TELEVISION_INC = 25864\nVENDOR_ID_BOISE_STATE_UNIVERSITY = 25865\nVENDOR_ID_CHU_BESANCON = 25866\nVENDOR_ID_I_QNET = 25867\nVENDOR_ID_LAST_MILE_GEAR = 25868\nVENDOR_ID_MIRAVID_INC = 25869\nVENDOR_ID_FHLBANKS_OFFICE_OF_FINANCE = 25870\nVENDOR_ID_NEXTWIRELESS_CO_LTD = 25871\nVENDOR_ID_EMM_SRO = 25872\nVENDOR_ID_BITLBEE_TEAM = 25873\nVENDOR_ID_GRIMICE_INC = 25874\nVENDOR_ID_ONDREJ_SVOBODA = 25875\nVENDOR_ID_GNOME_TECHNOLOGIES = 25876\nVENDOR_ID_PORTRAIT_INTERNATIONAL_INC = 25877\nVENDOR_ID_FINERF = 25878\nVENDOR_ID_MESS_CREATIVE_ELECTRONICS_BV = 25879\nVENDOR_ID_AEB_GMBH = 25880\nVENDOR_ID_OBJECTIVE_ARTS = 25881\nVENDOR_ID_IMPINJ_INC = 25882\nVENDOR_ID_ELSPEC_LTD = 25883\nVENDOR_ID_JPK_INSTRUMENTS_AG = 25884\nVENDOR_ID_TQI_TOTAL_QUALITY_ON_INFORMATION = 25885\nVENDOR_ID_NETHIT = 25886\nVENDOR_ID_CENTRO_PROVINCIALE_DI_DOCUMENTAZIONE_MODENA = 25887\nVENDOR_ID_GESTION_PROFESSIONNELLE_DES_SERVICES_DE_LASSURANCE = 25888\nVENDOR_ID_IFETH_LTD_UK = 25889\nVENDOR_ID_MNG_NETWORKS_GMBH = 25890\nVENDOR_ID_SMS_SYSTEMS = 25891\nVENDOR_ID_TELETRONICS_INTERNATIONAL_INC = 25892\nVENDOR_ID_DEXTERRA_INC = 25893\nVENDOR_ID_BLUE_CROSS_AND_BLUE_SHIELD_OF_LOUISIANA = 25894\nVENDOR_ID_PS_WEBHOSTING = 25895\nVENDOR_ID_SENTO_CORPORATION = 25896\nVENDOR_ID_ALLIGACOM_INC = 25897\nVENDOR_ID_25TH_FLOOR_DE_PRETIS_HELMBERGER_KEG = 25898\nVENDOR_ID_KANTONSSCHULE_ZUG = 25899\nVENDOR_ID_BLUE_FROG_SOLUTIONS_INC = 25900\nVENDOR_ID_LINTERRA = 25901\nVENDOR_ID_MV_WERBEAGENTUR_GMBH = 25902\nVENDOR_ID_PALM_BEACH_COUNTY = 25903\nVENDOR_ID_FRESH_AGENCJA_REKLAMOWA_SP_Z_OO = 25904\nVENDOR_ID_CHARLES_UNIVERSITY_IN_PRAGUE = 25905\nVENDOR_ID_TOPCHIEV_INSTITUTE_OF_PETROCHEMICAL_SYNTHESIS = 25906\nVENDOR_ID_EMAP_FRANCE = 25907\nVENDOR_ID_HAICKU_S_COOP_MAD = 25908\nVENDOR_ID_IPCMS = 25909\nVENDOR_ID_LIVE_SOFTWARE_SOLUTIONS_LTD = 25910\nVENDOR_ID_ELCA_INFORMATIQUE_SA = 25911\nVENDOR_ID_PT_TELEAKSES_SOLUSINDO_TEL_ACCESS = 25912\nVENDOR_ID_FI_MESH_NETWORKS_PRIVATE_LTD = 25913\nVENDOR_ID_SOLACOM_TECHNOLOGIES = 25914\nVENDOR_ID_BCM_BUREAUTIQUE_SARL = 25915\nVENDOR_ID_PROGON_ENGINEERING = 25916\nVENDOR_ID_CONVEY_INFORMATION_SYSTEMS_GMBH = 25917\nVENDOR_ID_IT_SECUCONSULT_LTD = 25918\nVENDOR_ID_NORTHSPARK_AB = 25919\nVENDOR_ID_INSTITUT_DE_GENETIQUE_ET_MICROBIOLOGIE_IGM = 25920\nVENDOR_ID_CENTERRA_GMBH = 25921\nVENDOR_ID_TEUTONET_NETZDIENSTE_GMBH = 25922\nVENDOR_ID_C_D_P_COMMUNICATIONS_INC = 25923\nVENDOR_ID_CATSMUVVANET = 25924\nVENDOR_ID_READY_BUSINESS_SYSTEM = 25925\nVENDOR_ID_COMPUTER_AND_COMMUNICATION_CAC = 25926\nVENDOR_ID_MARKETCETERA_LLC = 25927\nVENDOR_ID_SECURENET_SCIENTIFIC_SOLUTIONS_SA_DE_CV = 25928\nVENDOR_ID_JHU_ACM = 25929\nVENDOR_ID_ZAMKOR_P_SAGNOWSKI_I_WSPOLNICY_SP_J = 25930\nVENDOR_ID_DATALAN_AS = 25931\nVENDOR_ID_8LABSCOM = 25932\nVENDOR_ID_QUANTUM_TECHNOLOGY_MARKETING_LTD = 25933\nVENDOR_ID_INTRAWAY_CORPORATION = 25934\nVENDOR_ID_TNT_EXPRESS_WORLDWIDE_UK_LTD = 25935\nVENDOR_ID_ECHTERNACHT_NEW_MEDIA_OHG = 25936\nVENDOR_ID_NNIT_A_S = 25937\nVENDOR_ID_AXONPRO_SPOL_S_RO = 25938\nVENDOR_ID_MAINSTREAM_TECHNOLOGIES_SRO = 25939\nVENDOR_ID_LYCE_TECHNIQUE_DETTELBRUCK = 25940\nVENDOR_ID_WICOMM_MMC = 25941\nVENDOR_ID_DIGIVOX_BV = 25942\nVENDOR_ID_PIXUSNET = 25943\nVENDOR_ID_PSYCHOTRONICS = 25944\nVENDOR_ID_LANDWEHR_EDV_TECHNIK = 25945\nVENDOR_ID_CINTRIXX_TECHNOLOGIES = 25946\nVENDOR_ID_HALLOO_COMMUNICATIONS_INC = 25947\nVENDOR_ID_YELLOWBANK = 25948\nVENDOR_ID_CHINA_AGRICULTURAL_UNIVERSITY = 25949\nVENDOR_ID_FLYLADY_COMPANY_INC = 25950\nVENDOR_ID_HUTMAN_INC = 25951\nVENDOR_ID_EYEQ_INFORMATIONSTECHNIK_MULTIMEDIA_REINHARD_SUCKER_SOHN_GBR = 25952\nVENDOR_ID_GETITSAFE = 25953\nVENDOR_ID_XERON = 25954\nVENDOR_ID_OBSERVIT_LDA = 25955\nVENDOR_ID_TALK_A_PHONE_CO = 25956\nVENDOR_ID_ATITEL_LTDA = 25957\nVENDOR_ID_SECURE_NETWORKS_LDA = 25958\nVENDOR_ID_RAIA_CIA_LTDA = 25959\nVENDOR_ID_HOUR_HAND_PRODUCTIONS_INC = 25960\nVENDOR_ID_BIZFON_INC = 25961\nVENDOR_ID_LARSON_TECHNOLOGY = 25962\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_STANISLAUS = 25963\nVENDOR_ID_SPEARWAY_LTD = 25964\nVENDOR_ID_PENNSYLVANIA_LEGISLATIVE_DATA_PROCESSING_CENTER = 25965\nVENDOR_ID_CBS_BROADCASTING_INC = 25966\nVENDOR_ID_PACKETWARE_INC = 25967\nVENDOR_ID_RABID_DOG_LABS = 25968\nVENDOR_ID_SEMARKET_SA = 25969\nVENDOR_ID_PMOVIL_LTDA = 25970\nVENDOR_ID_SGV = 25971\nVENDOR_ID_SUPERCOM = 25972\nVENDOR_ID_NEXGE_TECHNOLOGIES_P_LTD = 25973\nVENDOR_ID_FREEDOM9_INC = 25974\nVENDOR_ID_REUNA = 25975\nVENDOR_ID_SECOURS_CATHOLIQUE = 25976\nVENDOR_ID_BAUSPARKASSE_SCHWBISCH_HALL_AG = 25977\nVENDOR_ID_EGEEN = 25978\nVENDOR_ID_MAVENIR_SYSTEMS_INC = 25979\nVENDOR_ID_VAN_SHUNG_CHONG_HOLDINGS_LIMITED = 25980\nVENDOR_ID_SAPIAN_SA = 25981\nVENDOR_ID_HILLCREST_LABORATORIES_INC = 25982\nVENDOR_ID_TELECOM_DESIGN = 25983\nVENDOR_ID_FAST_CORPORATION = 25984\nVENDOR_ID_JOYTV10_S_VOX_LTD_FORMERLY_ROGERS_BROADCASTING_LTD = 25985\nVENDOR_ID_INTERGEN_SERVICES_INC = 25986\nVENDOR_ID_GRUPO_DE_INVESTIGACIN_EN_BIOINGENIERA_GIB_CES_EAFIT = 25987\nVENDOR_ID_AKH_WIEN = 25988\nVENDOR_ID_AUTOMATA_SOFTWARE_INC = 25989\nVENDOR_ID_SECURITY_COMPLIANCE_CORP = 25990\nVENDOR_ID_MASARLABSCOM = 25991\nVENDOR_ID_ACEFHAT_AIE = 25992\nVENDOR_ID_ASPALIS_SAS = 25993\nVENDOR_ID_ASPECT_CAPITAL_LTD = 25994\nVENDOR_ID_NETWORK_UNLIMITED = 25995\nVENDOR_ID_ITRI = 25996\nVENDOR_ID_UGLY_DESIGN_INC = 25997\nVENDOR_ID_ASSURE_PROGRAMS_PTY_LTD = 25998\nVENDOR_ID_JUNGER_AUDIO_STUDIOTECHNIK_GMBH = 25999\nVENDOR_ID_JOHN_LAESCH_FOR_CONGRESS = 26000\nVENDOR_ID_EMBEDDED_VENTURES_LLC = 26001\nVENDOR_ID_YOUTILITY_SOLUTIONS_INC = 26002\nVENDOR_ID_ADFLEX_LTD = 26003\nVENDOR_ID_CONNECT_SOFTWARE_AG = 26004\nVENDOR_ID_HESSISCHES_LANDESKRIMINALAMT_DV_KRIMINALISTISCHE_BERATUNGS_UND = 26005\nVENDOR_ID_PERSONAL_INFORMATIK_AG = 26006\nVENDOR_ID_EVERT_MOUW = 26007\nVENDOR_ID_NEOSIS = 26008\nVENDOR_ID_SEBASTIAN_PASCH = 26009\nVENDOR_ID_HIPPOGRIFF_LLC = 26010\nVENDOR_ID_CEPEL = 26011\nVENDOR_ID_HOLMBOE_CONSULTING = 26012\nVENDOR_ID_KONGSBERG_SEATEX_AS = 26013\nVENDOR_ID_LEGANDO_AG = 26014\nVENDOR_ID_MULTIPOLAR_CORPORATION_TBK_PT = 26015\nVENDOR_ID_REDERI_AB_TRANSATLANTIC = 26016\nVENDOR_ID_RAIFFEISENBANK_BULGARIA_EAD = 26017\nVENDOR_ID_WESTMINSTER_COLLEGE = 26018\nVENDOR_ID_NANTONG_VOCATIONAL_COLLEGE = 26019\nVENDOR_ID_DEPRATTI_CONSULTING_LLC = 26020\nVENDOR_ID_LIGOS_CORPORATION = 26021\nVENDOR_ID_KAMAYO = 26022\nVENDOR_ID_FACHSCHAFT_MPI_TU_MNCHEN = 26023\nVENDOR_ID_SUBNET_PLATFORM_FOR_MEDIA_ART_AND_EXPERIMENTAL_TECHNOLOGIES = 26024\nVENDOR_ID_ARI_VOUTILAINEN = 26025\nVENDOR_ID_ARM4ORG = 26026\nVENDOR_ID_OPENDSORG = 26027\nVENDOR_ID_METASOFT = 26028\nVENDOR_ID_DUROSYSTEMS_LTD = 26029\nVENDOR_ID_ZOBEL_SOFTWARE_GMBH = 26030\nVENDOR_ID_B_TREE_GMBH = 26031\nVENDOR_ID_XINU_TECHNOLOGIES_GMBH = 26032\nVENDOR_ID_ON_THE_NETWORK_COLTD = 26033\nVENDOR_ID_ADOBE_ANIMAL_HOSPITAL = 26034\nVENDOR_ID_ALINTO_SA = 26035\nVENDOR_ID_DEMONIAK_NETWORK = 26036\nVENDOR_ID_DENGLER_ENGINEERING_GMBH = 26037\nVENDOR_ID_CECOM_SA = 26038\nVENDOR_ID_CESR = 26039\nVENDOR_ID_T_PARTY = 26040\nVENDOR_ID_OPTICAL_INTERNETWORKING_FORUM_OIF = 26041\nVENDOR_ID_MUSIC_FOR_LIFE_INSTITUTE = 26042\nVENDOR_ID_LASER_LOYALTY = 26043\nVENDOR_ID_TELEMACRO_INFORMACOES_E_SERVICOS_LTDA = 26044\nVENDOR_ID_WRIGHT_PATMAN_CONGRESSIONAL_FEDERAL_CREDIT_UNION = 26045\nVENDOR_ID_INTERACTIVE_SYSTEMS_GMBH = 26046\nVENDOR_ID_FRITZINGER_IT_CONSULT = 26047\nVENDOR_ID_MO_SYS_LTD = 26048\nVENDOR_ID_OPEN_WWWORKS = 26049\nVENDOR_ID_ECOLE_CENTRALE_DE_MARSEILLE = 26050\nVENDOR_ID_RETEP_SOFTWARE = 26051\nVENDOR_ID_HALYS = 26052\nVENDOR_ID_GUTJAHR_GMBH = 26053\nVENDOR_ID_ARASOR_TECHNOLOGIES_PRIVATE_LIMITED = 26054\nVENDOR_ID_NORDICAWARE_AS = 26055\nVENDOR_ID_EXXIM_COMPUTING_CORPORATION = 26056\nVENDOR_ID_ALPHEUS_COMMUNICATIONS_LP = 26057\nVENDOR_ID_CODEBAY_OY = 26058\nVENDOR_ID_BTECH_INC = 26059\nVENDOR_ID_IZT_INNOVATIONSZENTRUM_TELEKOMMUNIKATIONSTECHNIK_GMBH = 26060\nVENDOR_ID_ARTESYN_EMBEDDED_TECHNOLOGIES_FORMERLY_EMERSON_NETWORK_POWER_EMBEDDED_COMPUTING = 26061\nVENDOR_ID_MZL_SOFTWARE_DEVELOPMENT = 26062\nVENDOR_ID_ANKHNET_INFORMATIONS_PVT_LTD = 26063\nVENDOR_ID_BRAGA_MORO_SPA = 26064\nVENDOR_ID_GECO_INC = 26065\nVENDOR_ID_MULTISERVICE_FORUM = 26066\nVENDOR_ID_KYLAND = 26067\nVENDOR_ID_SHAANXI_KEY_LABORATORY_OF_SATELLITE_TERRESTRIAL_NETWORK_TECHRD = 26068\nVENDOR_ID_IPG_SALES_PTY_LTD = 26069\nVENDOR_ID_NEUTRALITIESNET = 26070\nVENDOR_ID_MARCIN_RACIBORSKI = 26071\nVENDOR_ID_BEIJING_HUISEN_NETWORKS_TECHNOLOGY_INC = 26072\nVENDOR_ID_VEUSTEC_SERVICOS_DE_INFORMATICA_LTDA = 26073\nVENDOR_ID_TUSC = 26074\nVENDOR_ID_X2S_LIMITED = 26075\nVENDOR_ID_METRINOMICS_GMBH = 26076\nVENDOR_ID_ESPELTNET = 26077\nVENDOR_ID_S4SOFTWARE_INC = 26078\nVENDOR_ID_BURK_TECHNOLOGY = 26079\nVENDOR_ID_AR_DEPARTMENT_OF_INFORMATION_SYSTEMS = 26080\nVENDOR_ID_LARS_KORNWINKEL = 26081\nVENDOR_ID_CERTIRA = 26082\nVENDOR_ID_CACHEGUARD_TECHNOLOGIES_LTD_FORMERLY_ONETEC = 26083\nVENDOR_ID_ENTER_SRL = 26084\nVENDOR_ID_KUNSTUNIVERSITAET_LINZ = 26085\nVENDOR_ID_PC_ANWENDUNGEN = 26086\nVENDOR_ID_MARKUS_MEYER = 26087\nVENDOR_ID_ASPERA_OHG = 26088\nVENDOR_ID_EMANUEL_HAUPT = 26089\nVENDOR_ID_QIIQ_COMMUNICATION_INC = 26090\nVENDOR_ID_LAFARGE_SA = 26091\nVENDOR_ID_ACEB_ELECTRONIQUE = 26092\nVENDOR_ID_NIBWEB = 26093\nVENDOR_ID_MCGIBBON_IT_SERVICES = 26094\nVENDOR_ID_CANOPUS_CO_LTD = 26095\nVENDOR_ID_SYNERGY_NEWORKING_LTD = 26096\nVENDOR_ID_LINUX_TRAINING_NZ = 26097\nVENDOR_ID_KING_COUNTY = 26098\nVENDOR_ID_SHANGHAI_ENGINEERING_RESEARCH_CENTER_FOR_BROADBAND_TECHNOLOGIES_APPLICATIONSB_STAR_CO_LTD = 26099\nVENDOR_ID_CYPRESS_INTEGRATED_SYSTEMS_INC = 26100\nVENDOR_ID_NUPPEAD_NCLEO_DE_PESQUISA_E_PROJETOS_EM_EDUCAO_A_DISTNCIA = 26101\nVENDOR_ID_ADVANCE_INTERNET_INC = 26102\nVENDOR_ID_WOBCOM_GMBH = 26103\nVENDOR_ID_BELLWIN_INFORMATION_COLTD = 26104\nVENDOR_ID_CRUMMOCK_SCOTLAND_LTD = 26105\nVENDOR_ID_SENTIVISION_POLSKA_SP_Z_O_O = 26106\nVENDOR_ID_CAMBRIDGE_DISPLAY_TECHNOLOGY_LTD = 26107\nVENDOR_ID_HYDRA_FUEL_CELL_CORPORATION = 26108\nVENDOR_ID_TPS_PAKISTAN_PVT_LTD = 26109\nVENDOR_ID_PRINTMIB_LLC = 26110\nVENDOR_ID_INFORMI_GIS_A_S = 26111\nVENDOR_ID_ISGS = 26112\nVENDOR_ID_KEUNING_INFORMATION_SYSTEMS = 26113\nVENDOR_ID_AXIOHM_SAS = 26114\nVENDOR_ID_JSC_STC_RISSA = 26115\nVENDOR_ID_PRACTICAL_ECONOMIC_RESEARCH_LIMITED = 26116\nVENDOR_ID_LUX_SOLIS_LLC = 26117\nVENDOR_ID_BFST = 26118\nVENDOR_ID_TRAFSYS = 26119\nVENDOR_ID_CWEISKEDE = 26120\nVENDOR_ID_RISHI_VALLEY_SCHOOL = 26121\nVENDOR_ID_ZENITEL_NORWAY_AS = 26122\nVENDOR_ID_MINISTERIE_VAN_DE_VLAAMSE_GEMEENSCHAP_BELFLA_TELEMATICA = 26123\nVENDOR_ID_COMX_NETWORKS_A_S = 26124\nVENDOR_ID_VEGACOM_AS = 26125\nVENDOR_ID_MAKKO_SOLUTIONS_S_A_DE_C_V = 26126\nVENDOR_ID_BEIJING_VORX_TELECOMMUNICATIONS_CO_LTD = 26127\nVENDOR_ID_COMMSEED_CORPORATION = 26128\nVENDOR_ID_LOGITEK_ELECTRONIC_SYSTEMS_INC = 26129\nVENDOR_ID_MONTSERRAT_COLLEGE_OF_ART = 26130\nVENDOR_ID_VENDINI_TICKETS = 26131\nVENDOR_ID_AEGIS_SEMICONDUCTOR_INC = 26132\nVENDOR_ID_CENTER_FOR_REMOTE_SENSING_ICE_SHEETS_UNIVERSITY_OF_KANSAS = 26133\nVENDOR_ID_INSTITUTE_FOR_NETWORKED_SOLUTIONS = 26134\nVENDOR_ID_MOUNT_AIREY_GROUP_INC = 26135\nVENDOR_ID_GENOME_EXPRESS = 26136\nVENDOR_ID_THE_UNIVERSITY_OF_TEXAS_SYSTEM = 26137\nVENDOR_ID_INTELBRAS_S_A = 26138\nVENDOR_ID_SAMFORD_UNIVERSITY = 26139\nVENDOR_ID_REFLECTED_NETWORKS_INC = 26140\nVENDOR_ID_EDI_PRO = 26141\nVENDOR_ID_3WAY_NETWORKS_LTD = 26142\nVENDOR_ID_CENTRE_DALT_RENDIMENT_ESPORTIU = 26143\nVENDOR_ID_IRTE_SPA = 26144\nVENDOR_ID_NETWORK_SYSTEMS_2 = 26145\nVENDOR_ID_ZAO_NPC_SPECTRUM = 26146\nVENDOR_ID_TRIVORE_CORP = 26147\nVENDOR_ID_SUBURBAN_MEDICAL_LABORATORY_INC = 26148\nVENDOR_ID_INDIA_MOBILITY_RESEARCH_IMR = 26149\nVENDOR_ID_FDT_MANUFACTURING_LLC = 26150\nVENDOR_ID_WIN32TOOLS = 26151\nVENDOR_ID_HELSINKI_IT_SYSTEMS_CONSULTING = 26152\nVENDOR_ID_HIGHPOINT_TECHNOLOGIES_INC = 26153\nVENDOR_ID_BIAIX = 26154\nVENDOR_ID_BANCOLOMBIA_SA = 26155\nVENDOR_ID_QUICKSILVA_LTD = 26156\nVENDOR_ID_CHUPA_CHUPS_SA = 26157\nVENDOR_ID_BERTRAM_YACHT_INC = 26158\nVENDOR_ID_EURO_CONNECT = 26159\nVENDOR_ID_VUMS_CONTROL_SYSTEMS_AS = 26160\nVENDOR_ID_ROCKETSEED_2 = 26161\nVENDOR_ID_TELROS = 26162\nVENDOR_ID_AIRCUVE_CO_LTD = 26163\nVENDOR_ID_TRI_VISION_ELECTRONICS_INC = 26164\nVENDOR_ID_US_AIRWAYS = 26165\nVENDOR_ID_NEBRASKA_WESLEYAN_UNIVERSITY = 26166\nVENDOR_ID_BLAKEMERE_TECHNOLOGIES_INC = 26167\nVENDOR_ID_IDOLOGIC_INC = 26168\nVENDOR_ID_ELYNX_LTD = 26169\nVENDOR_ID_CLARIO_MEDICAL_IMAGING_INC = 26170\nVENDOR_ID_PARALLELS_HOLDINGS_LTD_FORMERLY_SWSOFT_INC = 26171\nVENDOR_ID_KEBLE_COLLEGE = 26172\nVENDOR_ID_MONAGHENCOM = 26173\nVENDOR_ID_SIGNACERT_INC = 26174\nVENDOR_ID_RS_MEDIZINSYSTEME = 26175\nVENDOR_ID_AB_COMPUTING_LTD = 26176\nVENDOR_ID_BLACK_PRESS_GROUP_LTD = 26177\nVENDOR_ID_LANDQUEST_SERVICES_LTD = 26178\nVENDOR_ID_CONNECTIVA_SYSTEMS = 26179\nVENDOR_ID_QUEENS_ACADEMIC_GROUP_LTD = 26180\nVENDOR_ID_COHDA_WIRELESS_LTD = 26181\nVENDOR_ID_ENTELECHY_SYSTEMS = 26182\nVENDOR_ID_NORTHEASTERN_STATE_UNIVERSITY = 26183\nVENDOR_ID_NSP = 26184\nVENDOR_ID_INTERALIA_INC = 26185\nVENDOR_ID_YOCOBOX_SOLUCIONES_DIGITALES = 26186\nVENDOR_ID_SCOTT_LOGIC_LTD = 26187\nVENDOR_ID_SWITCH_MEDIA = 26188\nVENDOR_ID_QSTREAMS_NETWORKS = 26189\nVENDOR_ID_CRISP_THINKING_LTD = 26190\nVENDOR_ID_JADEBIRD_INC = 26191\nVENDOR_ID_SONY_GLOBAL_SOLUTIONS_INC = 26192\nVENDOR_ID_HANGZHOU_GRANCOM_INFORMATION_TECHNOLOGY_COLTD = 26193\nVENDOR_ID_RASMUS_HAHN = 26194\nVENDOR_ID_IMAGIC_BILDVERARBEITUNG_AG = 26195\nVENDOR_ID_AVT_AUDIO_VIDEO_TECHNOLGIES_GMBH = 26196\nVENDOR_ID_HITT_GMBH = 26197\nVENDOR_ID_HEDMARK_UNIVERSITY_COLLEGE = 26198\nVENDOR_ID_ALLEGRO_DVT = 26199\nVENDOR_ID_SOLID_ROCK_IT = 26200\nVENDOR_ID_UHU_LINUX_KFT = 26201\nVENDOR_ID_SNIPE_NETWORKS = 26202\nVENDOR_ID_IT_ADVANCE_CONSULTING_INC = 26203\nVENDOR_ID_UNIVERSITY_OF_UTAH_DEPARTMENT_OF_MEDICAL_INFORMATICS = 26204\nVENDOR_ID_BRIGHT_HORIZONS_FAMILY_SOLUTIONS = 26205\nVENDOR_ID_ON_SITE_NETWORK_SOLUTIONS_INC = 26206\nVENDOR_ID_FT_INTERACTIVE_DATA_INC = 26207\nVENDOR_ID_PDL_BIOPHARMA_INC = 26208\nVENDOR_ID_LOUISIANA_DEPARTMENT_OF_HEALTH_AND_HOSPITALS = 26209\nVENDOR_ID_ACM_SYSTEMS = 26210\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_MINAS_GERAIS = 26211\nVENDOR_ID_HARMONIC_TECHNOLOGY_GROUP_LLC = 26212\nVENDOR_ID_STAHLGRUBER_GMBH_CO_KG = 26213\nVENDOR_ID_AFILIAS_CANADA = 26214\nVENDOR_ID_PROGENSYS_LTD = 26215\nVENDOR_ID_DECK_SRL = 26216\nVENDOR_ID_SYSTEL_SA = 26217\nVENDOR_ID_NOVA_SCOTIA_CANCER_CENTRE = 26218\nVENDOR_ID_ENAGAS_SA = 26219\nVENDOR_ID_GUNTER_WINSTON_ONEAL_CORPORATION = 26220\nVENDOR_ID_BETV_BELGIUM = 26221\nVENDOR_ID_SS_PAMIN = 26222\nVENDOR_ID_JAKOBS_FAMILY_ENTERPRISES = 26223\nVENDOR_ID_MONITORAPP_COLTD = 26224\nVENDOR_ID_STUDIO_DIGITAL_ART = 26225\nVENDOR_ID_NETCOM_SYSTEMS = 26226\nVENDOR_ID_MINDJAIL_CONSULTING_LTD = 26227\nVENDOR_ID_TRICIPHER_INC = 26228\nVENDOR_ID_DATA_MANAGEMENT_SPA = 26229\nVENDOR_ID_KIRUSA_INC = 26230\nVENDOR_ID_PUNCH_TELEMATIX = 26231\nVENDOR_ID_SCIMMIANET = 26232\nVENDOR_ID_STEPHEN_THOMPSON_CONSULTING_LLC = 26233\nVENDOR_ID_GATE_PETROLEUM_COMPANY = 26234\nVENDOR_ID_COMPUTER_NETWORKS_LABORATORY_AT_TECHNICAL_UNIVERSITY_OF_KOSICE = 26235\nVENDOR_ID_CAMARA_DE_COMERCIO_Y_PRODUCCION_DE_SANTO_DOMINGO = 26236\nVENDOR_ID_ELDERS_LIMITED = 26237\nVENDOR_ID_CONSORTIUM_GARR = 26238\nVENDOR_ID_BANK_SOLIDARNOST = 26239\nVENDOR_ID_HOCHSCHULE_DARMSTADT = 26240\nVENDOR_ID_ALLCARE_ADMINISTRATORS_PTY_LTD = 26241\nVENDOR_ID_LOY_HUTZ_AKTIENGESELLSCHAFT = 26242\nVENDOR_ID_SIS_SCHUL_INTERNET_SERVICE = 26243\nVENDOR_ID_OCILION_IPTV_TECHNOLOGIES_GMBH = 26244\nVENDOR_ID_AUSTRALIA_MULTIDRIVE_DEVELOPMENT_AMD = 26245\nVENDOR_ID_NORTH_SEATTLE_COMMUNITY_COLLEGE = 26246\nVENDOR_ID_SERVICETRACE_EK = 26247\nVENDOR_ID_DIE_NETZWERKSTATT = 26248\nVENDOR_ID_TRANSACT_SERVICES_LLC = 26249\nVENDOR_ID_INFORMATION_AND_MULTIMEDIA_CENTER_GIFU_UNIVERSITY = 26250\nVENDOR_ID_ZZNODE = 26251\nVENDOR_ID_UNIVERSIDAD_DE_SONORA = 26252\nVENDOR_ID_IDUNTEC = 26253\nVENDOR_ID_PESAPOINT_LTD = 26254\nVENDOR_ID_OUR_LADY_OF_THE_LAKE_HOSPITAL_INC = 26255\nVENDOR_ID_FLUENDO_SA = 26256\nVENDOR_ID_RT_TECH_LLC = 26257\nVENDOR_ID_DATUM_INTERNATIONAL_LTD = 26258\nVENDOR_ID_GLOBALX_TECHNOLOGIES_LLC = 26259\nVENDOR_ID_NIBCO_INC = 26260\nVENDOR_ID_MAXON_CIC_CORP = 26261\nVENDOR_ID_NMMN_NEW_MEDIA_MARKETS_NETWORKS_GMBH = 26262\nVENDOR_ID_DOUGLAS_SCHOOL_DISTRICT = 26263\nVENDOR_ID_GALERIES_LAFAYETTE = 26264\nVENDOR_ID_FLAWED_LOGIC_SERVER_MANAGEMENT_SOFTWARE = 26265\nVENDOR_ID_LITE_ON_TECHNOLOGY_CORP = 26266\nVENDOR_ID_KODIAK_NETWORKS_INDIA_PVT_LTD = 26267\nVENDOR_ID_POSITIVEART = 26268\nVENDOR_ID_INSORS_INTEGRATED_COMMUNICATIONS_INC = 26269\nVENDOR_ID_OLIVETTI_SPA = 26270\nVENDOR_ID_ACOSTASE = 26271\nVENDOR_ID_SALICRU = 26272\nVENDOR_ID_VENTIA_PTY_LIMITED = 26273\nVENDOR_ID_DIGITAL_IDEAS_PTY_LTD = 26274\nVENDOR_ID_INDIGO_STONE_INTERNATIONAL_LTD = 26275\nVENDOR_ID_HEINRICH_NIRSCHL = 26276\nVENDOR_ID_VORONEZH_STATE_UNIVERSITY = 26277\nVENDOR_ID_ZARAFA = 26278\nVENDOR_ID_ENVISION_TECHNOLOGY_PARTNERS_INC = 26279\nVENDOR_ID_ADARA_NETWORKS = 26280\nVENDOR_ID_THE_EA_GROUP = 26281\nVENDOR_ID_FYI_CORPORATION = 26282\nVENDOR_ID_CHRISTOPH_ANDEREGG = 26283\nVENDOR_ID_OCHSNER_HEALTH_SYSTEM = 26284\nVENDOR_ID_S_I_TECH_INC = 26285\nVENDOR_ID_ALFREE_SYSTEMS = 26286\nVENDOR_ID_EXELMIND_LTD = 26287\nVENDOR_ID_KAVARO_OY = 26288\nVENDOR_ID_VIMPLICITY_LTD = 26289\nVENDOR_ID_EXATEL_SA = 26290\nVENDOR_ID_THE_REVOLUTION_GROUP_PTY_LTD = 26291\nVENDOR_ID_TECHSYNDICATE = 26292\nVENDOR_ID_INTERAKTIVO_RISINAJUMU_GRUPA_SIA = 26293\nVENDOR_ID_ENDURANCE_INTERNATIONAL_GROUP = 26294\nVENDOR_ID_CYBERLOG_LTD = 26295\nVENDOR_ID_RESOURCE_SITESEEING_LTDA = 26296\nVENDOR_ID_WIRELESS_BROADBAND_SERVICES_PTY_LTD = 26297\nVENDOR_ID_ELECTIONMALL_TECHNOLOGIES_INC = 26298\nVENDOR_ID_EASTERNGRAPHICS_GMBH = 26299\nVENDOR_ID_GENERA_OY = 26300\nVENDOR_ID_TEXAS_DIGITAL_SYSTEMS_INC = 26301\nVENDOR_ID_BLONDER_TONGUE_LABORATORIES_INC = 26302\nVENDOR_ID_CARRIERIQ_INC = 26303\nVENDOR_ID_SNMPINFO = 26304\nVENDOR_ID_SYKORA_TECHNOLOGY_INC = 26305\nVENDOR_ID_OPPORTUNITY_SOLUTIONS_A_S = 26306\nVENDOR_ID_SKYGUIDE_SWISS_AIR_NAVIGATION_SERVICES_LTD = 26307\nVENDOR_ID_SAAB_TRANSPONDERTECH_AB = 26308\nVENDOR_ID_DRAKSOFT_SOLUZIONI_INFORMATICHE_SAS = 26309\nVENDOR_ID_DEPARTAMENTO_MUNICIPAL_DE_ELETRICIDADE_DE_POOS_DE_CALDAS = 26310\nVENDOR_ID_ANDREAS_KINZLER = 26311\nVENDOR_ID_GENIUS_COMPANY = 26312\nVENDOR_ID_MARK_ROSCROW = 26313\nVENDOR_ID_XCONTROL_GMBH = 26314\nVENDOR_ID_ASIAN_ACCESS_NETWORKS_PTE_LTD = 26315\nVENDOR_ID_PACIFIC_STATES_MARINE_FISHERIES_COMMISSION = 26316\nVENDOR_ID_FIRST_CHOICE_HEALTH_NETWORK = 26317\nVENDOR_ID_CONDOR_NETWORKS = 26318\nVENDOR_ID_HOMECITY_NET_LTD = 26319\nVENDOR_ID_PROJECT_TEAM_SRL = 26320\nVENDOR_ID_CHRISTIAN_TENA = 26321\nVENDOR_ID_TOKYO_UNIVERSITY_OF_MARINE_SCIENCE_AND_TECHNOLOGY = 26322\nVENDOR_ID_INFORMATICA_PRODUCTIVA_CONOCIMIENTO_Y_TECNOLOGIA_SL = 26323\nVENDOR_ID_WURM_GMBH_CO_KG = 26324\nVENDOR_ID_GT_LONDON_LTD = 26325\nVENDOR_ID_ADTECH_AG = 26326\nVENDOR_ID_KASSENZAHNRZTLICHE_VEREINIGUNG_WESTFALEN_LIPPE = 26327\nVENDOR_ID_BLACKFOOT_TELEPHONE_COOPERATIVE_INC = 26328\nVENDOR_ID_SIMPLER_WEBB_INC = 26329\nVENDOR_ID_SOUTH_SHORE_HOPSITAL = 26330\nVENDOR_ID_TRILINKINC = 26331\nVENDOR_ID_TECHNOKAD = 26332\nVENDOR_ID_BROSE_FAHRZEUGTEILE = 26333\nVENDOR_ID_MEGATRON_DATA_SERVICES_GMBH = 26334\nVENDOR_ID_DIVINETWORKS_LTD_FORMERLY_IPORTENT_LTD = 26335\nVENDOR_ID_PAWEL_KRASZEWSKI = 26336\nVENDOR_ID_PAPER_MANAGEMENT_SERVICES_LTD = 26337\nVENDOR_ID_IWICS_INC = 26338\nVENDOR_ID_RISK_LABORATORIES_LLC = 26339\nVENDOR_ID_SKBRASIL = 26340\nVENDOR_ID_MADEINHU_BT = 26341\nVENDOR_ID_FUJITSU_SYSTEM_SOLUTIONS_LTD = 26342\nVENDOR_ID_GRAINMUSTARDS_COLTD = 26343\nVENDOR_ID_ADVANCED_INSTITUTE_OF_INDUSTRIAL_TECHNOLOGY = 26344\nVENDOR_ID_PAK_ELECTRICAL_APPLIANCE_CO_LTD = 26345\nVENDOR_ID_ALL_POWERFUL_DAVE = 26346\nVENDOR_ID_ACENS_TECHNOLOGIES_SA = 26347\nVENDOR_ID_MAENKEN_SYSTEMS = 26348\nVENDOR_ID_SHYAM_TELECOM_LTD = 26349\nVENDOR_ID_BEIJING_AGREE_TECHNOLOGY_DEVELOPMENT_LTD = 26350\nVENDOR_ID_NILES_WERKZEUGMASCHINEN_GMBH = 26351\nVENDOR_ID_POWER_SYSTEMS_LLC = 26352\nVENDOR_ID_BLUE_LAKE_RANCHERIA = 26353\nVENDOR_ID_SOFTWARE_CONCEPTS_INC = 26354\nVENDOR_ID_FIPLEX_COMMUNICATIONS_INC = 26355\nVENDOR_ID_VECTOR_TECHNOLOGY = 26356\nVENDOR_ID_COMMONWEALTH_SERVICE_DELIVERY_AGENCY_CENTRELINK_AUSTRALIA = 26357\nVENDOR_ID_XM_ASIA_PACIFIC_PTE_LTD = 26358\nVENDOR_ID_XPRESSENT_INC = 26359\nVENDOR_ID_WOODWARD_VENTURES = 26360\nVENDOR_ID_SOLUTION_INNOVATORS_LLC = 26361\nVENDOR_ID_WENZEL_ELEKTRONIK_GMBH = 26362\nVENDOR_ID_WOODHEAD = 26363\nVENDOR_ID_EID_EMPRESA_DE_INVESTIGAO_E_DESENVOLVIMENTO_DE_ELECTRNICA = 26364\nVENDOR_ID_CRITICAL_LINKS_SA = 26365\nVENDOR_ID_AMANO_CINCINNATI = 26366\nVENDOR_ID_NONDETERMINISTIC_INFORMATION_SYSTEMS = 26367\nVENDOR_ID_MICKO_GROUP_INC = 26368\nVENDOR_ID_MATTIG_SCHAUER_GESMBH = 26369\nVENDOR_ID_BEND_CABLE_COMMUNICATIONS_LLC = 26370\nVENDOR_ID_SCHOOL_OF_ORIENTAL_AND_AFRICAN_STUDIES = 26371\nVENDOR_ID_STADIG_TECHNOLOGIES_LLC = 26372\nVENDOR_ID_GRI_EV = 26373\nVENDOR_ID_UNIVERSITY_OF_ILLINOIS = 26374\nVENDOR_ID_OCKAN = 26375\nVENDOR_ID_TRIBUNAL_REGIONAL_ELEITORAL_DE_SANTA_CATARINA = 26376\nVENDOR_ID_ACC_INGENIERIE_ET_MAINTENANCE = 26377\nVENDOR_ID_PRETTYBIT_SOFTWARE_OY = 26378\nVENDOR_ID_IEPALA = 26379\nVENDOR_ID_BUAA608 = 26380\nVENDOR_ID_LWIP_A_LIGHTWEIGHT_TCP_IP_STACK = 26381\nVENDOR_ID_SISTA_SALSA_LLC = 26382\nVENDOR_ID_PAY_BY_TOUCH = 26383\nVENDOR_ID_GANDI = 26384\nVENDOR_ID_BUFETE_CONSULTOR_DE_MEXICO_SA_DE_CV = 26385\nVENDOR_ID_KOERBER_ENTERPRISE = 26386\nVENDOR_ID_JOHN_CANTU = 26387\nVENDOR_ID_PROFIL_GMBH = 26388\nVENDOR_ID_FACTORY_MUTUAL_INSURANCE_COMPANY = 26389\nVENDOR_ID_WOVEN_SYSTEMS_INC = 26390\nVENDOR_ID_KELYAN_LAB_SPA = 26391\nVENDOR_ID_NETCLARITY = 26392\nVENDOR_ID_CALLCOPY_INC = 26393\nVENDOR_ID_EMAZE_NETWORKS_SPA = 26394\nVENDOR_ID_AMERICAN_TELECOMMUNICATION_INC = 26395\nVENDOR_ID_RISING_EDGE_DEVELOPMENT_LLC = 26396\nVENDOR_ID_OKLAHOMA_STATE_UNIVERSITY = 26397\nVENDOR_ID_WASALAB_OY = 26398\nVENDOR_ID_EMENCIA_SARL = 26399\nVENDOR_ID_BUNDESNETZAGENTUR = 26400\nVENDOR_ID_ALARMTECH_POLSKA_SP_Z_OO = 26401\nVENDOR_ID_ELETRONIQUE_PLUS_SA = 26402\nVENDOR_ID_IMATECH2NET = 26403\nVENDOR_ID_SUPPLYSCAPE_CORPORATION = 26404\nVENDOR_ID_THE_METALFISH_CONSULTANCY_LTD = 26405\nVENDOR_ID_CYBERDEFENSES_INC = 26406\nVENDOR_ID_TIGER_COMMUNICATIONS_PLC = 26407\nVENDOR_ID_WOLFVISION_GMBH = 26408\nVENDOR_ID_ERECRUITERS_LTD = 26409\nVENDOR_ID_PAKAMERA = 26410\nVENDOR_ID_VOCALITY_INTERNATIONAL_LTD = 26411\nVENDOR_ID_ALEXANDR_KARA = 26412\nVENDOR_ID_GOLDEN_WEST_INTERNET_SOLUTIONS = 26413\nVENDOR_ID_FENRI = 26414\nVENDOR_ID_J_W_SELIGMAN_CO_INCORPORATED = 26415\nVENDOR_ID_METACARTA_INC = 26416\nVENDOR_ID_TRANSCEPTA_LLC = 26417\nVENDOR_ID_NETSAFE_INFORMATION_TECHNOLOGY_LTD = 26418\nVENDOR_ID_TRANSTEC_AG = 26419\nVENDOR_ID_CLAN_INFORMATIK_AG = 26420\nVENDOR_ID_DAUGHTERS_OF_CHARITY_SERVICES_OF_NEW_ORLEANS = 26421\nVENDOR_ID_IABG_MBH = 26422\nVENDOR_ID_TLANTIC_SI = 26423\nVENDOR_ID_SYSCARENET = 26424\nVENDOR_ID_LAYERED_TECHNOLOGIES = 26425\nVENDOR_ID_FORGET_ABOUT_IT_LTD = 26426\nVENDOR_ID_KANSAS_DEPARTMENT_OF_HEALTH_AND_ENVIRONMENT_STATE_OF_KANSAS = 26427\nVENDOR_ID_BEDFORD_HOSPITAL_NHS_TRUST = 26428\nVENDOR_ID_XINWEI_TELECOM_TECHNOLOGYINC = 26429\nVENDOR_ID_E_TECHNOLOGIES_INC = 26430\nVENDOR_ID_THAI_NATIONAL_GRID_CENTER = 26431\nVENDOR_ID_CENTER_OF_INFORMATION_TECHNOLOGIES_OF_TATARSTAN_REPUBLIC = 26432\nVENDOR_ID_CALYX_INTERNET = 26433\nVENDOR_ID_TOUCH_SENSE_INC = 26434\nVENDOR_ID_NOAM_COMMUNICATIONS = 26435\nVENDOR_ID_HSH_SOFT_UND_HARDWARE_VERTRIEBS_GMBH = 26436\nVENDOR_ID_UNIVERSITT_ZU_KLN = 26437\nVENDOR_ID_SV_PARADOKS = 26438\nVENDOR_ID_SFERIA_SA = 26439\nVENDOR_ID_BLIXEM_INTERNET_SERVICES_BV = 26440\nVENDOR_ID_TECHNIKON_FORSCHUNGS_UND_PLANUNGSGESELLSCHAFT_MBH_LTD = 26441\nVENDOR_ID_PROLIVAL = 26442\nVENDOR_ID_CINETIX_SRL = 26443\nVENDOR_ID_COROWARE_INC = 26444\nVENDOR_ID_SPECIAL_SYSTEMS_AND_SOFTWARE_INC = 26445\nVENDOR_ID_OUVI_DIVULGACAO_E_MARKETING_EM_CELULARES_LTDA = 26446\nVENDOR_ID_COMPRO_COMPUTER_SERVICES_INC = 26447\nVENDOR_ID_VARIOMEDIA_AG = 26448\nVENDOR_ID_OKTO_TECNOLOGIA_E_SERVIOS_DE_INFORMTICA_LTDA = 26449\nVENDOR_ID_HUBBELL_INC = 26450\nVENDOR_ID_ESENCIS = 26451\nVENDOR_ID_HITB = 26452\nVENDOR_ID_VJ_SYSTEMS = 26453\nVENDOR_ID_WEALINKCOM_LIMITED_INC = 26454\nVENDOR_ID_SECRETARIAT_OF_INFORMATION_TECHNOLOGY_GOVERNMENT_OF_HARYANA = 26455\nVENDOR_ID_BUDAPEST_UNIVERSITY_OF_TECHNOLOGY_AND_ECONOMICS_BME = 26456\nVENDOR_ID_MEDITEC_GMBH = 26457\nVENDOR_ID_TETRADE_INC = 26458\nVENDOR_ID_WAVESYSCOM_COLTD = 26459\nVENDOR_ID_ALCOR_COMMUNICATIONS = 26460\nVENDOR_ID_KNORR_PARTNER_INGENIEURE = 26461\nVENDOR_ID_LANCK_TELECOM_EXPRESS_TELESERVICE_CORP = 26462\nVENDOR_ID_WYLESS_PLC = 26463\nVENDOR_ID_DUNDALK_INSTITUTE_OF_TECHNOLOGY = 26464\nVENDOR_ID_I_TOGETHER_LTD = 26465\nVENDOR_ID_LEISSNER_DATA_AB = 26466\nVENDOR_ID_HANZO_S_A = 26467\nVENDOR_ID_IT_MANAGEMENT_AND_CONSULTATION_SERVICES_ITMACS = 26468\nVENDOR_ID_AIRCLIC_INC = 26469\nVENDOR_ID_MEDIA_MOVEL_SERVIOS_INTERATIVOS_LTDA = 26470\nVENDOR_ID_INTERNATIONAL_TEAMS = 26471\nVENDOR_ID_NORDIC_OPTICAL_TELESCOPE_SCIENTIFIC_ASSOCIATION = 26472\nVENDOR_ID_DIGIPLUG = 26473\nVENDOR_ID_MIDWEST_CONNECTIONS_INC = 26474\nVENDOR_ID_GTN77 = 26475\nVENDOR_ID_ADVANCED_DEVICES_SPA = 26476\nVENDOR_ID_UWE_PERL = 26477\nVENDOR_ID_SI3SI = 26478\nVENDOR_ID_SCHENCK_PROCESS_GMBH = 26479\nVENDOR_ID_INFLERDE = 26480\nVENDOR_ID_ZANE_C_BOWERS = 26481\nVENDOR_ID_ROSSONET_SRL = 26482\nVENDOR_ID_JW_NETSOURCE_LLC = 26483\nVENDOR_ID_CISCO_SYSTEMS_INC_FORMERLY_ARCH_ROCK_CORPORATION = 26484\nVENDOR_ID_CRYOSERVER_LTD = 26485\nVENDOR_ID_THE_STANLEY_WORKS = 26486\nVENDOR_ID_WEBSPACE_FORUM = 26487\nVENDOR_ID_ENDER_INFORMATICS_GMBH = 26488\nVENDOR_ID_INTELLIDATA_SYSTEMS_LTD = 26489\nVENDOR_ID_BEVERLINET = 26490\nVENDOR_ID_METZLER_TECH_LTD = 26491\nVENDOR_ID_DONGYANG_TELECOM_CO_LTD = 26492\nVENDOR_ID_URZAD_MARSZALKOWSKI_WOJEWODZTWA_MALOPOLSKIEGO = 26493\nVENDOR_ID_CSJGLOBAL_INC = 26494\nVENDOR_ID_SCOPE = 26495\nVENDOR_ID_ZIPLIP_INC = 26496\nVENDOR_ID_BITBIN_LLC = 26497\nVENDOR_ID_DART_INDUSTRIES_INC = 26498\nVENDOR_ID_MEMO_SERVIOS_INTERATIVOS_SA = 26499\nVENDOR_ID_CARL_ZEISS_AG = 26500\nVENDOR_ID_PARI_MEDICAL_HOLDING_GMBH = 26501\nVENDOR_ID_EMERGING_INFORMATION_SYSTEMS_INC = 26502\nVENDOR_ID_UNIVERSITY_OF_APPLIED_SCIENCE_OSNABRCK = 26503\nVENDOR_ID_A3IP = 26504\nVENDOR_ID_ZENEXITY = 26505\nVENDOR_ID_IT_IDEAS = 26506\nVENDOR_ID_TJ_NET_SPA = 26507\nVENDOR_ID_ELECTRONIC_FORGE = 26508\nVENDOR_ID_DIGITAL_ELECTRONICS_CORPORATION = 26509\nVENDOR_ID_LIKE_MINDED_PEOPLE_LTD = 26510\nVENDOR_ID_TAC_BILGISAYAR_HIZMETLERI_IC_VE_DIS_TICARET_AS = 26511\nVENDOR_ID_GEEK_BILGISAYAR_MUHENDISLIK_VE_SANAYI_LTD_STI = 26512\nVENDOR_ID_HELLENIC_ACADEMIC_AND_RESEARCH_INSTITUTIONS_CERTIFICATIONAUTHORITY = 26513\nVENDOR_ID_SUNTEL_COMMUNICATIONS = 26514\nVENDOR_ID_TEPE_TEKNOLOJI = 26515\nVENDOR_ID_INNOVATION_DESIGNS_LTD = 26516\nVENDOR_ID_BESECURE = 26517\nVENDOR_ID_MEG_ELEKTRONIK_LTD = 26518\nVENDOR_ID_GEEK_BILGI_TEKNOLOJILERI_LTD_STI = 26519\nVENDOR_ID_PIERBRIDGE_LIMITED = 26520\nVENDOR_ID_PANNASOFT_TECHNOLOGIES = 26521\nVENDOR_ID_MDG_INFOSEC = 26522\nVENDOR_ID_AMERICAN_QUALIFIED_PLANS_INC = 26523\nVENDOR_ID_LYMAN_ASSOCIATES = 26524\nVENDOR_ID_GOLDEN_DYNAMIC_ENTERPRISES_LTD = 26525\nVENDOR_ID_ETOUCH_SYSTEMS_CORP = 26526\nVENDOR_ID_IRCONA = 26527\nVENDOR_ID_KIRCHE_FUR_OBERBERG_EV = 26528\nVENDOR_ID_CNRST = 26529\nVENDOR_ID_TELEMETRY_BTT = 26530\nVENDOR_ID_KODAK_IMAGING_NETWORK_INC = 26531\nVENDOR_ID_EB_TECHNOLOGIES_M_SDN_BHD = 26532\nVENDOR_ID_NURUN_INC = 26533\nVENDOR_ID_THINK_PROJECT_INTERNATIONAL_FORMERLY_AEC_COMMUNICATIONS_GMBH = 26534\nVENDOR_ID_OMNEX_CONTROL_SYSTEMS_ULC = 26535\nVENDOR_ID_RINGLAND_CONSULTING_LLC = 26536\nVENDOR_ID_RIOREY_INC = 26537\nVENDOR_ID_DUAXES_CORPORATION = 26538\nVENDOR_ID_IONOSCAPE_ASSOCIATES = 26539\nVENDOR_ID_CUDESOBE = 26540\nVENDOR_ID_MATRIX_TECHNOLOGY_AG = 26541\nVENDOR_ID_JHC_PLC = 26542\nVENDOR_ID_BLADE_NETWORK_TECHNOLOGIES_INC = 26543\nVENDOR_ID_AVTOVAZ_JSC = 26544\nVENDOR_ID_SALESFORCE_AUSTRALIA_SALMAT = 26545\nVENDOR_ID_CP_SECURE_INC = 26546\nVENDOR_ID_NORD_DATA_A_S = 26547\nVENDOR_ID_PRVOIR_VIE_PORTUGAL = 26548\nVENDOR_ID_AMPER = 26549\nVENDOR_ID_BLUEPEX_DO_BRASIL_TECNOLOGIA_DA_INFORMAO_LTDA_ME = 26550\nVENDOR_ID_GORDON_KAPES_INC = 26551\nVENDOR_ID_CONGRESO_DE_LOS_DIPUTADOS = 26552\nVENDOR_ID_CTI_NETWORKS_INC = 26553\nVENDOR_ID_THINGMAGIC_INC = 26554\nVENDOR_ID_NTT_IT_CO_LTD = 26555\nVENDOR_ID_ETHERNET_DIRECT_CORPORATION = 26556\nVENDOR_ID_STRACTUS = 26557\nVENDOR_ID_ASSOCIATED_NETWORK_PARTNERS_INC = 26558\nVENDOR_ID_NYUKID_NETWORKS = 26559\nVENDOR_ID_JNGER_AUDIO_STUDIOTECHNIK_GMBH = 26560\nVENDOR_ID_ZYNETIX_LTD = 26561\nVENDOR_ID_INTERNATIONAL_TELECOMMUNICATION_UNION = 26562\nVENDOR_ID_TRIADO = 26563\nVENDOR_ID_EMERJ_INC = 26564\nVENDOR_ID_STUDIO_TECHNOLOGIES_INC = 26565\nVENDOR_ID_GLOBAL_KNOWLEDGE = 26566\nVENDOR_ID_OBSIDIAN_CONSULTING_GROUP_PTY_LTD = 26567\nVENDOR_ID_MEGA_SOLUTION_INC = 26568\nVENDOR_ID_IDYRIA_SARL = 26569\nVENDOR_ID_CLEARTONE_VIDEO_LTD = 26570\nVENDOR_ID_DATANIN_LTD = 26571\nVENDOR_ID_OPTIMAL_IDM_SOFTWARE_LLC = 26572\nVENDOR_ID_DAWN_VME_PRODUCTS = 26573\nVENDOR_ID_DYNAMICS_RESEARCH_CORPORATION = 26574\nVENDOR_ID_KB_TOYS_INC = 26575\nVENDOR_ID_IAN_CAIRNS = 26576\nVENDOR_ID_KAUFCOM_GMBH = 26577\nVENDOR_ID_CREDITO_EMILIANO_SPA = 26578\nVENDOR_ID_J_CRAIG_VENTER_INSTITUTE = 26579\nVENDOR_ID_KAISER_PERMANENTE = 26580\nVENDOR_ID_RUSTENBACHDE = 26581\nVENDOR_ID_CLERITY_SOLUTIONS_INC = 26582\nVENDOR_ID_ATIVA_SOLUES_TECNOLGICAS_LTDA = 26583\nVENDOR_ID_BROOMANCOM_LLC = 26584\nVENDOR_ID_REACTRIX_SYSTEMS_INC = 26585\nVENDOR_ID_FREMNET = 26586\nVENDOR_ID_COMPUTER_BETTING_COMPANY_GMBH = 26587\nVENDOR_ID_NEXCOM_SYSTEMS = 26588\nVENDOR_ID_CT_COMPANY_LTD = 26589\nVENDOR_ID_CLAIM_GMBH_CO_KG = 26590\nVENDOR_ID_KYNETIA_NETWORKS_SL = 26591\nVENDOR_ID_POLATIS_LTD = 26592\nVENDOR_ID_LITTLEMAIL = 26593\nVENDOR_ID_ASOIU_DEPARTAMENT_OF_NTUU_KPI = 26594\nVENDOR_ID_CONNECT_TECH_INC = 26595\nVENDOR_ID_S_INFORMATION_TECHNOLOGY_CO_LTD = 26596\nVENDOR_ID_COMERICA_BANK = 26597\nVENDOR_ID_SUMITOMO_OSAKA_CEMENT_COLTD = 26598\nVENDOR_ID_UNIVERSITY_OF_GLASGOW = 26599\nVENDOR_ID_CHINA_XIAMEN_TRUETEL_TELECOMMUNICATIONS_TECHNOLOGIES_COLTD = 26600\nVENDOR_ID_DUNHAM_BUSH_YANTAI_CO_LTD = 26601\nVENDOR_ID_RACEME = 26602\nVENDOR_ID_GEDIM_AG = 26603\nVENDOR_ID_IMA_GMBH = 26604\nVENDOR_ID_PKB_INTEGRAL = 26605\nVENDOR_ID_VIDACTIVE_SL = 26606\nVENDOR_ID_ISCO_INTERNATIONAL = 26607\nVENDOR_ID_WAVELENGTH_CORPORATION_INC = 26608\nVENDOR_ID_PENTAIR_INC = 26609\nVENDOR_ID_ULTRAMAIN_SYSTEMS_INC = 26610\nVENDOR_ID_EXA_CORPORATION = 26611\nVENDOR_ID_KYOTO_SANGYO_UNIVERSITY = 26612\nVENDOR_ID_AUDIOMEDIA_LTD = 26613\nVENDOR_ID_GOVERNMENT_OF_REPUBLIC_OF_SRPSKA = 26614\nVENDOR_ID_NOVIFORUM_LTD_SOFTWARE_MEDIA = 26615\nVENDOR_ID_UNIVERSITY_COMPUTING_CENTRE_SRCE_UNIVERSITY_OF_ZAGREB = 26616\nVENDOR_ID_MOBITEL_DD = 26617\nVENDOR_ID_HIGHTECH_PASSPORT_LTD = 26618\nVENDOR_ID_PRIVATE_HIGHER_EDUCATION_ESTABLISHMENT_AUTONONYMOUS = 26619\nVENDOR_ID_WEST_UNIVERSITY_OF_TIMISOARA = 26620\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_CLUJ_NAPOCA = 26621\nVENDOR_ID_NJERS_COMMUNICATIONS = 26622\nVENDOR_ID_OPEN_SENSE_SOLUTIONS_LLC = 26623\nVENDOR_ID_THATS_SOFTWARE_BERLIN = 26624\nVENDOR_ID_SOPRIS_SURFERS_INC = 26625\nVENDOR_ID_CATIVANET = 26626\nVENDOR_ID_VIGOS_AG = 26627\nVENDOR_ID_BH_TELECOM_DD_SARAJEVO = 26628\nVENDOR_ID_RUMATI_COMPUTERS_CC = 26629\nVENDOR_ID_PBMS_SOLUCOES_MOVEIS_EM_INFORMATICA_LTDA = 26630\nVENDOR_ID_WATERMAN_GROUP_PLC = 26631\nVENDOR_ID_SAUNDERS_PROPERTIES_PTY_LTD = 26632\nVENDOR_ID_EMBEDDED_INTERNET_SOLUTIONS_INC = 26633\nVENDOR_ID_BIGTRIBE_CORPORATION = 26634\nVENDOR_ID_SQUID_CONSULTING_INTEGRATION = 26635\nVENDOR_ID_DEXON_SOFTWARE_INC = 26636\nVENDOR_ID_OMB_SISTEMAS_ELECTRNICOS_SA = 26637\nVENDOR_ID_STUDIO_HAMBURG_MEDIA_CONSULT_INTERNATIONAL_GMBH = 26638\nVENDOR_ID_THE_SCHNEIDER_FAMILY_TREE = 26639\nVENDOR_ID_INDUSOFT_INC = 26640\nVENDOR_ID_YELLOWBRIX = 26641\nVENDOR_ID_SCHOELZEL_IT_CONSULTING = 26642\nVENDOR_ID_XL_VISION_GROUP = 26643\nVENDOR_ID_INTERNATIONAL_WORKING_GROUP_ON_TAXONOMIC_DATABASES_TDWG = 26644\nVENDOR_ID_INVENTIVE_DESIGNERS_NV = 26645\nVENDOR_ID_INSTITUTE_FOR_PARALLEL_PROCESSING_BAS = 26646\nVENDOR_ID_BANCO_SAFRA_S_A = 26647\nVENDOR_ID_AVAGO_TECHNOLOGIES_LIMITED = 26648\nVENDOR_ID_COVIDIEN_FORMERLY_TYCO_HEALTHCARE = 26649\nVENDOR_ID_PANDORA_MEDIA_INC = 26650\nVENDOR_ID_PROPUS_INFORMATICA_LTDA = 26651\nVENDOR_ID_MELCO_HOLDINGS_INC = 26652\nVENDOR_ID_SHANGHAI_SUNSTAR_TELECOM_COLTD = 26653\nVENDOR_ID_NTT_RESONANT_INC = 26654\nVENDOR_ID_ADVANTECH_CO_LTD_2 = 26655\nVENDOR_ID_ALLAN_ASSOCIATES = 26656\nVENDOR_ID_OUBA = 26657\nVENDOR_ID_MIKRO_NETWORK_SOLUTIONS = 26658\nVENDOR_ID_ZERO9_SRL = 26659\nVENDOR_ID_ROBOT_BT = 26660\nVENDOR_ID_OPENPANEL_VOF = 26661\nVENDOR_ID_ALPHA_COMPANY = 26662\nVENDOR_ID_SOLANA_NETWORKS_INC = 26663\nVENDOR_ID_CENTRALSOFTORG = 26664\nVENDOR_ID_FACETOFACE_SOFTWARE_LTD = 26665\nVENDOR_ID_ASSURIA_LIMITED = 26666\nVENDOR_ID_EPPER_KRANZ_GBR = 26667\nVENDOR_ID_SIXFAMILYNET = 26668\nVENDOR_ID_SIRIUS_CORPORATION_PLC = 26669\nVENDOR_ID_NETEASECOM_INC = 26670\nVENDOR_ID_NETSPRING_INC = 26671\nVENDOR_ID_NANJING_ZIJIN_PHOTEL_COMMUNICATION_EQUIPMENTS_COLTD = 26672\nVENDOR_ID_WYNDEHAM_HERON_LTD = 26673\nVENDOR_ID_KLERX_EDV_BERATUNG = 26674\nVENDOR_ID_MESSAGELABS_LTD = 26675\nVENDOR_ID_GSF_SAS = 26676\nVENDOR_ID_DATACTICS_LTD = 26677\nVENDOR_ID_CANADIAN_SPACE_AGENCY = 26678\nVENDOR_ID_EMCOM_SP_Z_OO = 26679\nVENDOR_ID_GENERAL_DYNAMICS_UNITED_KINGDOM_LIMITED = 26680\nVENDOR_ID_PHI_THETA_KAPPA_INTERNATIONAL_HONOR_SOCIETY = 26681\nVENDOR_ID_LOHNETORG = 26682\nVENDOR_ID_VINCI_CONSULTING_CORP = 26683\nVENDOR_ID_COMM_NET_SYSTEMS_INC = 26684\nVENDOR_ID_FOSS_MIBS = 26685\nVENDOR_ID_SOFTJURY_GMBH = 26686\nVENDOR_ID_LG_TECHNOLOGY_INC = 26687\nVENDOR_ID_SINO_I_TECHNOLOGY_LTD = 26688\nVENDOR_ID_CAT_TELECOM_PUBLIC_COMPANY_LIMITED = 26689\nVENDOR_ID_PRETTL_PRODUKTIONS_HOLDING_GMBH = 26690\nVENDOR_ID_REICHERT_GMBH = 26691\nVENDOR_ID_MOBITEL_SA = 26692\nVENDOR_ID_AIRPOINT_CO_LTD = 26693\nVENDOR_ID_DIGITALS_INDIA = 26694\nVENDOR_ID_OPENLINK_FINANCIAL_INC = 26695\nVENDOR_ID_MARVELL_SEMICONDUCTOR_INC = 26696\nVENDOR_ID_ARCES_NETWORK_LLC = 26697\nVENDOR_ID_NET_PROJECT_SRL = 26698\nVENDOR_ID_OPEN_SWITCH_SOFTWARE_E_CONSULTORIA_LTDA = 26699\nVENDOR_ID_VULCAN_MATERIALS_COMPANY = 26700\nVENDOR_ID_OCEAN_ROCK_CORP = 26701\nVENDOR_ID_WYCLIFFE_BIBLE_TRANSLATORS_OF_CANADA_INC = 26702\nVENDOR_ID_PITTSBURGH_SUPERCOMPUTING_CENTER = 26703\nVENDOR_ID_VOICE_PROVIDER_SWEDEN_AB = 26704\nVENDOR_ID_WEBBERTEK_BLUNICEL_CONSULTORIA_EM_INFORMATICA_LTDA = 26705\nVENDOR_ID_4AM_LUNCH_INC = 26706\nVENDOR_ID_DELPHI_CORP = 26707\nVENDOR_ID_CERBERCOMM_LTD = 26708\nVENDOR_ID_LOGICIQ_LTD = 26709\nVENDOR_ID_ELASIS_SCPA = 26710\nVENDOR_ID_CROLOX_BV = 26711\nVENDOR_ID_CUTTER_PROJECT_LTD = 26712\nVENDOR_ID_STELLA_DORADUS_LTD = 26713\nVENDOR_ID_ERIS4_SRL = 26714\nVENDOR_ID_OBERLANDESGERICHT_MNCHEN_IT_STELLE_D_JUSTIZ = 26715\nVENDOR_ID_GANESH_TECHNOLOGIES_LTD = 26716\nVENDOR_ID_STROEER_OUT_OF_HOME_MEDIA_AG = 26717\nVENDOR_ID_ELMA_KURTALJ_DOO = 26718\nVENDOR_ID_BALUNA_GMBH = 26719\nVENDOR_ID_CRESSIDA_TECHNOLOGY_LTD = 26720\nVENDOR_ID_EAB_GMBH_RHEIN_MAIN = 26721\nVENDOR_ID_S_TELECOM_S_FONE = 26722\nVENDOR_ID_KUME_ELECTRIC_CO_LTD = 26723\nVENDOR_ID_E_TREESJAPANINC = 26724\nVENDOR_ID_EIRAKU_ELECTRIC_COLTD = 26725\nVENDOR_ID_WIRECACHE_INC = 26726\nVENDOR_ID_YAKSHAVERS_INCORPORATED = 26727\nVENDOR_ID_TRANSPARENCY_SOFTWARE_INC = 26728\nVENDOR_ID_SAGITTAR_BROADBAND_COMMUNICATION_SOLUTIONS = 26729\nVENDOR_ID_SICS_AB = 26730\nVENDOR_ID_SOFTWARE_LIBRE_DE_VENEZUELA_777_CA = 26731\nVENDOR_ID_COMNET_COMPUTER_NETZWERKE_GMBH = 26732\nVENDOR_ID_RRD_SPA = 26733\nVENDOR_ID_CMYK_ENERGY_SOFTWARE_LIMITED = 26734\nVENDOR_ID_DIPL_ING_T_BIEL = 26735\nVENDOR_ID_WEYHMUELLERNET = 26736\nVENDOR_ID_INFOSTREAM_PTY_LTD = 26737\nVENDOR_ID_BEA_INTERNATIONAL_FZE = 26738\nVENDOR_ID_HANS_GUENTNER_GMBH = 26739\nVENDOR_ID_TEIN_TELECOM_SA = 26740\nVENDOR_ID_ETIN_SYSTEMS_COLTD = 26741\nVENDOR_ID_ASTRALOGIC_CC = 26742\nVENDOR_ID_LEAN_LLC = 26743\nVENDOR_ID_NATIONAL_BANKCARD_SERVICES_INC = 26744\nVENDOR_ID_OBITUARIESONLINECA = 26745\nVENDOR_ID_HEBUS = 26746\nVENDOR_ID_GOROAM_LTD = 26747\nVENDOR_ID_PRINT_FULFILLMENT_SERVICES = 26748\nVENDOR_ID_SL_POWER_ELECTRONICS_CORP = 26749\nVENDOR_ID_ACCESS_INTEGRATED_TECHNOLOGIES_INC = 26750\nVENDOR_ID_VISUAL_SCIENCES_LLC = 26751\nVENDOR_ID_JAMUL_ENGINEERING = 26752\nVENDOR_ID_MOBILE_GREETINGS_INC = 26753\nVENDOR_ID_ASIAN_INSTITUTE_OF_TECHNOLOGY = 26754\nVENDOR_ID_EYELINE_COMMUNICATIONS_CIS_LLC = 26755\nVENDOR_ID_MSE_MATTHIES_SOFTWAREENTWICKLUNG_GMBH = 26756\nVENDOR_ID_SIBINCO_LLC = 26757\nVENDOR_ID_CECURITYCOM = 26758\nVENDOR_ID_SHF_COMMUNICATION_TECHNOLOGIES_AG = 26759\nVENDOR_ID_0X3F8NET = 26760\nVENDOR_ID_ESZTERHAZY_KAROLY_COLLEGE = 26761\nVENDOR_ID_DDINFORMATICA = 26762\nVENDOR_ID_CESTEL_SA = 26763\nVENDOR_ID_NOVNET_HB = 26764\nVENDOR_ID_UNIVERSITAET_BIELEFELD_FAKULTAET_FUER_MATHEMATIK = 26765\nVENDOR_ID_VANTRONIX_SECURE_SYSTEMS = 26766\nVENDOR_ID_ALCATEL_LUCENT_TMC_FORMERLY_ALCATEL_SOC = 26767\nVENDOR_ID_COMUNE_DI_RIMINI = 26768\nVENDOR_ID_UNITED_TECHNOLOGIES_CORPORATION = 26769\nVENDOR_ID_VIRTUTILITY_LTD = 26770\nVENDOR_ID_VERSATERM_INC = 26771\nVENDOR_ID_THE_ROYAL_CONSERVATOIRE = 26772\nVENDOR_ID_LINDE_IT_SERVICES = 26773\nVENDOR_ID_EFOTEK_COLTD = 26774\nVENDOR_ID_B2BITS_CORP = 26775\nVENDOR_ID_MAINTECH_GMBH = 26776\nVENDOR_ID_DECLUDE_INC = 26777\nVENDOR_ID_NERDBOY_SERVICES = 26778\nVENDOR_ID_PPW_ARAJ_SP_Z_OO = 26779\nVENDOR_ID_GMX_TECHNOLOGIES_INC = 26780\nVENDOR_ID_GREG_COCKERHAM = 26781\nVENDOR_ID_TRI_D_SYSTEMS_INC = 26782\nVENDOR_ID_TIOGA_PROJECT = 26783\nVENDOR_ID_ACROMATE_INC = 26784\nVENDOR_ID_UNIVERSITY_OF_MESSINA = 26785\nVENDOR_ID_SIET_SD_MLADOST_YNET = 26786\nVENDOR_ID_SOCIEDAD_DE_TASACIN_SA = 26787\nVENDOR_ID_ABILISOFT_LTD = 26788\nVENDOR_ID_WEBWORKS_SVERIGE_AB = 26789\nVENDOR_ID_GILBARCO_INC = 26790\nVENDOR_ID_THRALLING_PENGUIN_LLC = 26791\nVENDOR_ID_PROMPTLINK_COMMUNICATIONS_INC = 26792\nVENDOR_ID_GAWAB = 26793\nVENDOR_ID_PERIODIK_LABS_LLC = 26794\nVENDOR_ID_KEMNETIX_CORPORATION = 26795\nVENDOR_ID_MEITAI_TECHNOLOGY_COLTD = 26796\nVENDOR_ID_ASANKYA_NETWORKS_INC = 26797\nVENDOR_ID_HIPPO_SPOL_S_R_O = 26798\nVENDOR_ID_ROTALCOM_LTD = 26799\nVENDOR_ID_JAN_WELTE = 26800\nVENDOR_ID_NETWORK_CHEMISTRY_INC = 26801\nVENDOR_ID_UNESP_FC = 26802\nVENDOR_ID_DITTA_DI_FEO_PASQUALE = 26803\nVENDOR_ID_DIGITAL_OPPORTUNITY_TRUST = 26804\nVENDOR_ID_KREBS_CONSULTING_IT_SERVICES_GMBH_CO_KG = 26805\nVENDOR_ID_MULTIVISION_COMMUNICATIONS = 26806\nVENDOR_ID_UNITED_STATES_POSTAL_SERVICE = 26807\nVENDOR_ID_VISUAL_ACTING_GMBH = 26808\nVENDOR_ID_ENTELIENCE = 26809\nVENDOR_ID_SKIDATA_AG = 26810\nVENDOR_ID_UNLP = 26811\nVENDOR_ID_FLEXY_ENTERPRISE_SOLUTIONS_LTD = 26812\nVENDOR_ID_UNIWERSYTET_GDASKI = 26813\nVENDOR_ID_BVCOM_MEDIA_CORPORATIONLTD = 26814\nVENDOR_ID_ADVANCED_TECHNOLOGIES = 26815\nVENDOR_ID_DTM_CONSULTORIA_S_C_LTDA = 26816\nVENDOR_ID_IT_PROFESSIONAL_DOO = 26817\nVENDOR_ID_SERVICIO_NACIONAL_DE_METEOROLOGA_E_HIDROLOGIA_DEL_PER_SENAMHI = 26818\nVENDOR_ID_ECONOMISTS_INCORPORATED = 26819\nVENDOR_ID_MICROPORTALINFO = 26820\nVENDOR_ID_AGENT_LOGIC = 26821\nVENDOR_ID_BEIJING_TELESTONE_TECHNOLOGY_COLTD = 26822\nVENDOR_ID_MARZHILLSTUDIOS = 26823\nVENDOR_ID_CONSEIL_GNRAL_DE_MEURTHE_ET_MOSELLE = 26824\nVENDOR_ID_NETWERKZ_IT_SOLUTIONS = 26825\nVENDOR_ID_EON_CORPORATION = 26826\nVENDOR_ID_ICT_4_SCHOOLS = 26827\nVENDOR_ID_HAN_INTERNETWORKS_CO_LTD = 26828\nVENDOR_ID_S4_TECHNOLOGY_PTY_LTD = 26829\nVENDOR_ID_US_HOME_SYSTEMS_INC = 26830\nVENDOR_ID_COMMUNITY_HIGH_SCHOOL_DISTRICT_155 = 26831\nVENDOR_ID_JASON_PETSOD = 26832\nVENDOR_ID_BARKLEY_EVERGREEN_PARTNERS = 26833\nVENDOR_ID_TRAVEL_ACCOMMODATION_APS = 26834\nVENDOR_ID_SOUTHERNPRINT_LTD = 26835\nVENDOR_ID_INVISTA_SRL = 26836\nVENDOR_ID_MASARYK_HOSPITAL_IN_USTI_NAD_LABEM = 26837\nVENDOR_ID_HAYSTACK_PROFESSIONAL_SERVICES = 26838\nVENDOR_ID_DIAMEDX_INC = 26839\nVENDOR_ID_NETWAYS_GMBH = 26840\nVENDOR_ID_SOLEO_COMMUNICATIONS_INC = 26841\nVENDOR_ID_TELIO_AG = 26842\nVENDOR_ID_AKER_KVAERNER_SUBSEA_LTD = 26843\nVENDOR_ID_ENDEAVOR_INFORMATION_SYSTEMS_INC = 26844\nVENDOR_ID_MARK_HOOPER_LTD = 26845\nVENDOR_ID_SALFORD_CITY_COUNCIL = 26846\nVENDOR_ID_COLLINS_TRUCKING_LLC = 26847\nVENDOR_ID_DEUTSCHE_RENTENVERSICHERUNG_NIEDERBAYERN_OBERPFALZ = 26848\nVENDOR_ID_DEPARTAMENTO_DE_ENGENHARIA_INFORMTICA_DA_UNIVERSIDADE_DE_COIMBRA = 26849\nVENDOR_ID_VISIONOSS_LTD = 26850\nVENDOR_ID_PNZGYI_SZERVEZETEK_LLAMI_FELGYELETE_HUNGARIAN_FINANCIAL_SUPERVISORY_AUTHORITY = 26851\nVENDOR_ID_CONSEJO_GENERAL_DE_COLEGIOS_OFICIALES_DE_MEDICOS = 26852\nVENDOR_ID_MUELLER_KANDUTH_OEG = 26853\nVENDOR_ID_CHEROKEE_INTERNATIONAL_CORPORATION = 26854\nVENDOR_ID_COMMPROVE_LTD = 26855\nVENDOR_ID_EXCELSIS_BUSINESS_TECHNOLOGY_AG = 26856\nVENDOR_ID_TOCAJ = 26857\nVENDOR_ID_THEMSELVES = 26858\nVENDOR_ID_COMPUQUEST_INC = 26859\nVENDOR_ID_6COM_SRO = 26860\nVENDOR_ID_BM_POLYCO_LTD = 26861\nVENDOR_ID_IDILIA_INC = 26862\nVENDOR_ID_COREBRIDGE = 26863\nVENDOR_ID_INSIGHT_HEALTH_CORP = 26864\nVENDOR_ID_SPIRIT_LINUX = 26865\nVENDOR_ID_GIGAMON_SYSTEMS_LLC = 26866\nVENDOR_ID_INFITEL_ENGINEERING_GMBH = 26867\nVENDOR_ID_EUROPEAN_BANK_OF_DEVELOPMENT_OF_METALLURGY_INDUSTRY = 26868\nVENDOR_ID_SKYPE_TECHNOLOGIES_SA = 26869\nVENDOR_ID_ARCHENOVA_CONSULTING_GMBH = 26870\nVENDOR_ID_TIDOMAT_AB = 26871\nVENDOR_ID_STAINSBY = 26872\nVENDOR_ID_ALDEA_GLOBAL_SA = 26873\nVENDOR_ID_MORE_IT_EOOD = 26874\nVENDOR_ID_UNIVERSITY_OF_TECHNOLOGY_OF_HO_CHI_MINH_CITY = 26875\nVENDOR_ID_ADITEC_INC = 26876\nVENDOR_ID_CIVIC_COMPUTING = 26877\nVENDOR_ID_BROADHOP_INC = 26878\nVENDOR_ID_NINE_SYSTEMS_CORPORATION = 26879\nVENDOR_ID_CPUARCHITECTS_INC = 26880\nVENDOR_ID_UNIVESIDAD_TECNICA_PARTICULAR_DE_LOJA = 26881\nVENDOR_ID_CHILD_EXPLOITATION_AND_ONLINE_PROTECTION_CENTRE = 26882\nVENDOR_ID_LILLA_GRN_DATA_OCH_ELEKTRONIK = 26883\nVENDOR_ID_QUICKCIRCUIT = 26884\nVENDOR_ID_COMPU_SHARE_INC = 26885\nVENDOR_ID_COMPACT_MICROWAVE_INDONESIA = 26886\nVENDOR_ID_PLENWARE_GROUP_OY = 26887\nVENDOR_ID_CARESOLVE_CV = 26888\nVENDOR_ID_NAV_EPE = 26889\nVENDOR_ID_MARKUS_FRANZKE_SOFTWARE_ENTWICKLUNG = 26890\nVENDOR_ID_RCZI_FORT = 26891\nVENDOR_ID_YYOVKOVNET = 26892\nVENDOR_ID_ST_WILLIBRORD_GYMNASIUM = 26893\nVENDOR_ID_APPARATUS_INC = 26894\nVENDOR_ID_CRIMEAN_INTERNET_SERVICE = 26895\nVENDOR_ID_EFORE_PLC = 26896\nVENDOR_ID_COPA_AIRLINES = 26897\nVENDOR_ID_NIPPON_CAD_COLTD = 26898\nVENDOR_ID_UNIVERSITY_OF_ZAGREB_FACULTY_OF_SCIENCE = 26899\nVENDOR_ID_ANDANZA_TECHNOLOGIES_SA = 26900\nVENDOR_ID_NO_WIRES_ALLOWED_PTY_LTD = 26901\nVENDOR_ID_XIAMEN_LONGTOP_SYSTEM_CO_LTD = 26902\nVENDOR_ID_XYTAC_SYSTEM_TECHNOLOGIES = 26903\nVENDOR_ID_KATHMANN_CONSULTING_LLC = 26904\nVENDOR_ID_ABOUNDI_INC = 26905\nVENDOR_ID_WESTFAX_INC = 26906\nVENDOR_ID_JOE_LEWIS = 26907\nVENDOR_ID_PICTOR_SOLUTIONS_INC = 26908\nVENDOR_ID_SUBNET_SOLUTIONS_INC = 26909\nVENDOR_ID_STUDENTERSAMFUNDET_VED_AALBORG_UNIVERSITET = 26910\nVENDOR_ID_TREND_MICRO_INC_FORMERLY_THIRD_BRIGADE_INC = 26911\nVENDOR_ID_CHEIRON = 26912\nVENDOR_ID_GROUP_LOGIC_INC = 26913\nVENDOR_ID_TIME_NETWORKS_INC = 26914\nVENDOR_ID_WOLFPAC_MOBILE_INC = 26915\nVENDOR_ID_1822DIREKT_GESELLSCHAFT_DER_FRANKFURTER_SPARKASSE_MBH = 26916\nVENDOR_ID_NETCONSULTING = 26917\nVENDOR_ID_AF_KURSOR_AUDIT_LTD = 26918\nVENDOR_ID_DANPEX_CORPORATION = 26919\nVENDOR_ID_TXT_E_SOLUTIONS_SPA = 26920\nVENDOR_ID_MPI_FOR_MATHEMATICS = 26921\nVENDOR_ID_TD2_CONSULTING_LLC = 26922\nVENDOR_ID_BAPTIST_HEALTH_SOUTH_FLORIDA = 26923\nVENDOR_ID_KNEWCO_INC = 26924\nVENDOR_ID_ENIGMA_DATA_SOLUTIONS_LTD = 26925\nVENDOR_ID_MASSTECH_GROUP_INC = 26926\nVENDOR_ID_EXTANT_NETWORKS = 26927\nVENDOR_ID_AEROHIVE_NETWORKS_INC = 26928\nVENDOR_ID_JV_CONSULTANT = 26929\nVENDOR_ID_PHP_SYSTEMSCOM = 26930\nVENDOR_ID_REAKTOR_INNOVATIONS_OY = 26931\nVENDOR_ID_VISMA_SOFTWARE_ASA = 26932\nVENDOR_ID_TRIDION_BV = 26933\nVENDOR_ID_TATTILE_SRL = 26934\nVENDOR_ID_OSEO = 26935\nVENDOR_ID_VILLE_DE_MARSEILLE = 26936\nVENDOR_ID_YAHATA_KOSEI_HOSPITAL = 26937\nVENDOR_ID_WORLDGROUP_CONSULTING_SDN_BHD = 26938\nVENDOR_ID_TENWA_LTD = 26939\nVENDOR_ID_THE_ECONOMIST = 26940\nVENDOR_ID_JOHNSTONE_ASSOCIATES = 26941\nVENDOR_ID_AIM_PROFESSIONAL_SYSTEMS_LTD = 26942\nVENDOR_ID_DIEMOSERSORG = 26943\nVENDOR_ID_ICROSS_TECHNOLOGY = 26944\nVENDOR_ID_INTECH = 26945\nVENDOR_ID_ADITI_TECHNOLOGIES = 26946\nVENDOR_ID_MIPC_LTD = 26947\nVENDOR_ID_LAMBDA_RESEARCH_INC = 26948\nVENDOR_ID_INTERCOMPUTER_CORP = 26949\nVENDOR_ID_GUST_NINJA_SERVICES = 26950\nVENDOR_ID_RENAULT_NISSAN_BV = 26951\nVENDOR_ID_JOIN_STOCK_COMMERCIAL_BANK_SOYUZ = 26952\nVENDOR_ID_ASTRONIX_TECHNOLOGY_INC = 26953\nVENDOR_ID_INDUSTRIAS_SOLA_BASIC_SA_DE_CV = 26954\nVENDOR_ID_AVALON_NETWORKS_LLC = 26955\nVENDOR_ID_AG04_INNOVATIVE_SOLUTIONS = 26956\nVENDOR_ID_KOGNITA = 26957\nVENDOR_ID_INDU_SOL_GMBH = 26958\nVENDOR_ID_WWWBRIANMICHAELORG = 26959\nVENDOR_ID_VEM_MANUTENO_E_ENGENHARIA_S_A = 26960\nVENDOR_ID_TANTACOMM_SYSTEMS = 26961\nVENDOR_ID_KPMG_INTERNATIONAL = 26962\nVENDOR_ID_ISEANE = 26963\nVENDOR_ID_VAN_DEENEN_SUPPORT = 26964\nVENDOR_ID_THOMAS_PARQUETTE = 26965\nVENDOR_ID_ISKOOT_ISRAEL_LTD = 26966\nVENDOR_ID_ASSOTIATION_MIR_LTD = 26967\nVENDOR_ID_KIELNET_GMBH = 26968\nVENDOR_ID_BISPING_BISPING_GMBH_CO_KG = 26969\nVENDOR_ID_DOELLKEN_KUNSTSTOFFVERARBEITUNG_GMBH = 26970\nVENDOR_ID_KUDRA_TECHNICAL_SERVICES = 26971\nVENDOR_ID_QUETZ_LIMITED = 26972\nVENDOR_ID_TOMATO_VINE_INC = 26973\nVENDOR_ID_DISK_BRIDGE = 26974\nVENDOR_ID_COMPANYNAME_3 = 26975\nVENDOR_ID_NEXG_CO_LTD = 26976\nVENDOR_ID_QBALL_TECHNOLOGIES_LTD = 26977\nVENDOR_ID_NEXT_LAYER_GMBH = 26978\nVENDOR_ID_GRENKELEASING_AG = 26979\nVENDOR_ID_DUDLEY_PCT = 26980\nVENDOR_ID_SCHRACK_ENERGIETECHNIK_GMBH = 26981\nVENDOR_ID_R2_GMBH = 26982\nVENDOR_ID_RWD_TECHNOLOGIES = 26983\nVENDOR_ID_OTTO_PETERSEN_HAUS = 26984\nVENDOR_ID_ENET_INC = 26985\nVENDOR_ID_SOUTHWEST_RESEARCH_INSTITUTE = 26986\nVENDOR_ID_GEMINI_MOBILE_TECHNOLOGIES_INC_2 = 26987\nVENDOR_ID_7_ELEVEN_INC = 26988\nVENDOR_ID_INTEGRITY_LTD = 26989\nVENDOR_ID_HUDSON_DIGITAL_SYSTEMS_INC = 26990\nVENDOR_ID_DEVELER_SRL = 26991\nVENDOR_ID_ENTEL_SA = 26992\nVENDOR_ID_PROMWAD_INNOVATION_COMPANY = 26993\nVENDOR_ID_OPENSMA = 26994\nVENDOR_ID_PUBLIC_JOINT_STOCK_COMPANY_BALTIYSKIY_BANK = 26995\nVENDOR_ID_QMAX_COMMUNICATIONS = 26996\nVENDOR_ID_STUDER_PROFESSIONAL_AUDIO_GMBH = 26997\nVENDOR_ID_AUDIOSOFT_LTD = 26998\nVENDOR_ID_GRACE_COMMUNITY_CHURCH_OF_HOWARD_COUNTY_INC = 26999\nVENDOR_ID_MAGISTRAT_LINZ_AT = 27000\nVENDOR_ID_OPTIONSXPRESS_INC = 27001\nVENDOR_ID_ZAYO_GROUP_FORMERLY_ONVOY_INC = 27002\nVENDOR_ID_TRIGENCE_CORP = 27003\nVENDOR_ID_HOT_TELECOM_LTD = 27004\nVENDOR_ID_HACKWERKNET = 27005\nVENDOR_ID_CHALKTIME = 27006\nVENDOR_ID_LUCEOR_SAS = 27007\nVENDOR_ID_UNIFIED_GAME = 27008\nVENDOR_ID_BITRAIL_NETWORKS = 27009\nVENDOR_ID_LBM_SYSTEMS_LLC = 27010\nVENDOR_ID_SAGAMORE_SYSTEMS_INC = 27011\nVENDOR_ID_CASAUDIT_INC = 27012\nVENDOR_ID_TELEDIRECT_INTERNATIONAL_INC = 27013\nVENDOR_ID_COMMGATE_SYSTEMS_INDIA_PVT_LTD = 27014\nVENDOR_ID_EAST_COAST_ACCESS_PTY_LTD = 27015\nVENDOR_ID_ALPHITO_DOO = 27016\nVENDOR_ID_WORLD_DIRECT_EBUSINESS_SOLUTIONS_GMBH = 27017\nVENDOR_ID_TDC_SWITZERLAND_AG = 27018\nVENDOR_ID_ENVISION_NETWORK_TECHNOLOGIES_PVT_LTD = 27019\nVENDOR_ID_PAN_ASIAN_CERTIFICATE_POLICY_AUTHORITY_LIMITED = 27020\nVENDOR_ID_PACTIV_CORP = 27021\nVENDOR_ID_INSTRUMENTATION_TECHNOLOGY_SYSTEMS_CORPORATION = 27022\nVENDOR_ID_NEXANT_INC = 27023\nVENDOR_ID_I_CONNECT_INC = 27024\nVENDOR_ID_VISIONALIVE_GMBH = 27025\nVENDOR_ID_ILIRIKA_DD = 27026\nVENDOR_ID_ESTEAM_SOFTWARE_GMBH = 27027\nVENDOR_ID_TORGSERVIS_LTD = 27028\nVENDOR_ID_REH = 27029\nVENDOR_ID_WICHORUS_INC = 27030\nVENDOR_ID_CNS_TECHNOLOGY_INC = 27031\nVENDOR_ID_SOBEY_DIGITAL_TECHNOLOGY_CO_LTD = 27032\nVENDOR_ID_OK_SOFT_GMBH = 27033\nVENDOR_ID_HOPLING_TECHNOLOGIES_BV = 27034\nVENDOR_ID_ALAMON_TELCO_INC = 27035\nVENDOR_ID_MERCY_COLLEGE = 27036\nVENDOR_ID_NETMARKS_INC = 27037\nVENDOR_ID_ROBOT_VISUAL_SYSTEMS_GMBH = 27038\nVENDOR_ID_KEHITYSYHTEISTYN_PALVELUKESKUS_RY = 27039\nVENDOR_ID_ROYAL_CANADIAN_MOUNTED_POLICE = 27040\nVENDOR_ID_KEMET_CORPORATION = 27041\nVENDOR_ID_UNIVERSIDAD_DE_COLIMA = 27042\nVENDOR_ID_CENTRO_DE_INFORMATICA_E_AUTOMACAO_DO_ESTADO_DE_SANTA_CATARINA = 27043\nVENDOR_ID_CLUSTERPOINT_LTD = 27044\nVENDOR_ID_SANTILLANA_DE_EDICIONES_SA = 27045\nVENDOR_ID_ALEX_GROUP_SPOL_S_RO = 27046\nVENDOR_ID_ASK_INTERACTIVE_UK_LTD = 27047\nVENDOR_ID_OPTEQ_SYSTEMS_INTERNATIONAL_LTD = 27048\nVENDOR_ID_SYMARK_SOFTWARE = 27049\nVENDOR_ID_WARRIOR_TECHNOLOGY_SERVICES_INC = 27050\nVENDOR_ID_CHIPIDEA_MICROELECTRONICA_SA = 27051\nVENDOR_ID_BAY_MICROSYSTEMS_INC = 27052\nVENDOR_ID_OMNITROMICS_PTY_LTD = 27053\nVENDOR_ID_ONEIDA_BAPTIST_INSTITUTE = 27054\nVENDOR_ID_ZANDER_LLC = 27055\nVENDOR_ID_ZEDNAX_LIMITED = 27056\nVENDOR_ID_ELEKTROBIT_AUTOMOTIVE_GMBH_FORMERLY_3SOFT_GMBH = 27057\nVENDOR_ID_VENTELO_NORGE_AS = 27058\nVENDOR_ID_SMARTSOL_DOO = 27059\nVENDOR_ID_INTERACTIVE_INSTRUMENTS = 27060\nVENDOR_ID_NETSENS_SRL = 27061\nVENDOR_ID_OSTIUM_SOLUES_DE_ENGENHARIA_LDA = 27062\nVENDOR_ID_IMOCHA_CONSULTING_SDN_BHD = 27063\nVENDOR_ID_UNIVERSITY_OF_ST_THOMAS_HOUSTON = 27064\nVENDOR_ID_QUAGILITY_INC = 27065\nVENDOR_ID_RAVE_WIRELESS_INC = 27066\nVENDOR_ID_SOFTINBOX_INC = 27067\nVENDOR_ID_MOOTER_MEDIA_LTD = 27068\nVENDOR_ID_KAON_MEDIA_CO_LTD = 27069\nVENDOR_ID_DEKTEC_DIGITAL_VIDEO_BV = 27070\nVENDOR_ID_HLOGALAND_IKT_SENTER_AS = 27071\nVENDOR_ID_EURO_EMME_SRL = 27072\nVENDOR_ID_SEPTENTRIO_NV_SA = 27073\nVENDOR_ID_POINT_INTERNATIONAL = 27074\nVENDOR_ID_RDP_B92_AD = 27075\nVENDOR_ID_ZOT_INC = 27076\nVENDOR_ID_NANASOFT_SZOFTVERFEJLESZT_BT = 27077\nVENDOR_ID_LOHNUS = 27078\nVENDOR_ID_AT_PROMOTIONS_LIMITED = 27079\nVENDOR_ID_SEQUANUX = 27080\nVENDOR_ID_TRIMM_INC = 27081\nVENDOR_ID_CESMIC_CENTRO_DE_EXCELNCIA_EM_SERVIDORES_DE_MISSO_CRTICA = 27082\nVENDOR_ID_SWITCHING_TECHNOLOGIES = 27083\nVENDOR_ID_ARNULF_WIEDEMANN = 27084\nVENDOR_ID_GREENVIEW_DATA_INC = 27085\nVENDOR_ID_TEXAS_TRANSPORTATION_INSTITUTE = 27086\nVENDOR_ID_NETWORKING_SYSTEMS = 27087\nVENDOR_ID_SUPREME_COURT_OF_NEW_MEXICO = 27088\nVENDOR_ID_GUUS_LEEUW_IT_SOLUTIONS = 27089\nVENDOR_ID_NECTIA_SA = 27090\nVENDOR_ID_BRILLIANT_TELECOMMUNICATIONS_INC = 27091\nVENDOR_ID_ASTRONAUTICS_CORPORATION_OF_AMERICA = 27092\nVENDOR_ID_YUSOJP = 27093\nVENDOR_ID_RANEEN = 27094\nVENDOR_ID_PORTFOLIO_WIRED = 27095\nVENDOR_ID_CADET_FAMILY = 27096\nVENDOR_ID_APHELION_COMMUNICATIONS_INC = 27097\nVENDOR_ID_SOE_SOFTWARE_PTY_LTD = 27098\nVENDOR_ID_BUNDA_MULIA_UNIVERSITY = 27099\nVENDOR_ID_SWIFTVIEW_INC = 27100\nVENDOR_ID_EMBARCBIZ_LLC = 27101\nVENDOR_ID_GDMC = 27102\nVENDOR_ID_ROMANIAN_SPACE_AGENCY_ROSA = 27103\nVENDOR_ID_CFT_LTD = 27104\nVENDOR_ID_SOFTMETHOD_GMBH = 27105\nVENDOR_ID_AVERINA_SOFTWARE = 27106\nVENDOR_ID_SUPPORTING_OPEN_SOURCE_BVBA = 27107\nVENDOR_ID_MICRO_ELEKTRONISCHE_PRODUCTEN_BV = 27108\nVENDOR_ID_BARNAUL_STATE_PEDAGOGICAL_UNIVERSITY = 27109\nVENDOR_ID_PETROZAVODSK_STATE_UNIVERSITY_COMPUTER_SCIENCE_DEPARTMENT = 27110\nVENDOR_ID_ADAMENTIUM_SAS = 27111\nVENDOR_ID_MATHEMA_SOFTWARE_GMBH = 27112\nVENDOR_ID_APCO_WORLDWIDE = 27113\nVENDOR_ID_ELECTROLYTE_CONSULTING = 27114\nVENDOR_ID_QBIT_GMBH = 27115\nVENDOR_ID_FREESYSTEMS_SLL = 27116\nVENDOR_ID_TUX_LOGIC = 27117\nVENDOR_ID_GRONTMIJ_NV = 27118\nVENDOR_ID_ID90_TECHNOLOGIES = 27119\nVENDOR_ID_SMAR_EQUIPAMENTOS_INDUSTRIAIS_LTDA = 27120\nVENDOR_ID_IKIRBYNET = 27121\nVENDOR_ID_SHADOWCAT_SYSTEMS_LTD = 27122\nVENDOR_ID_ICOP_DIGITAL_INC = 27123\nVENDOR_ID_KOCIOK_BERATUNGSGESELLSCHAFT_MBH = 27124\nVENDOR_ID_ACCUITY_LLP = 27125\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_SAO_CARLOS = 27126\nVENDOR_ID_SYSTEMS_AND_SOFTWARE_INC = 27127\nVENDOR_ID_LANDESHAUPTSTADT_HANNOVER = 27128\nVENDOR_ID_DEPARTMENT_OF_CONSERVATION_NEW_ZEALAND = 27129\nVENDOR_ID_TEHNOCOM_LTD = 27130\nVENDOR_ID_KKW_GMBH = 27131\nVENDOR_ID_APIS_IT_DOO = 27132\nVENDOR_ID_HENSLEY_ELAM_ASSOCIATES = 27133\nVENDOR_ID_BANGLADESH_ONLINE_LIMITED = 27134\nVENDOR_ID_77_ELEKTRONIKA_KFT = 27135\nVENDOR_ID_OSAKA_GAS_INFORMATION_SYSTEM_RESEARCH_INSTITUTE_COLTD = 27136\nVENDOR_ID_PROXICOM_INC = 27137\nVENDOR_ID_TECHNO_VIKING = 27138\nVENDOR_ID_MY2DO_SOLUTIONS = 27139\nVENDOR_ID_ACRODYNE_INDUSTRIES_INC = 27140\nVENDOR_ID_APPLIED_INFORMATICS_SOFTWARE_ENGINEERING_GMBH = 27141\nVENDOR_ID_ALSTEC = 27142\nVENDOR_ID_DIRECTPARK_GMBH = 27143\nVENDOR_ID_TRANSACT_LIMITED = 27144\nVENDOR_ID_GRAHAMCOXCOUK = 27145\nVENDOR_ID_INFOCENTR_COMPANY_LTD = 27146\nVENDOR_ID_MOBISSIMO_INC = 27147\nVENDOR_ID_ICP_SC = 27148\nVENDOR_ID_WENZHOU_UNIVERSITY = 27149\nVENDOR_ID_ANGELLTECH_CO_LTD = 27150\nVENDOR_ID_SK_CC = 27151\nVENDOR_ID_INSTITUT_FR_KRISTALLZCHTUNG_BERLIN = 27152\nVENDOR_ID_MATZKE_SOFTWAREENTWICKLUNG = 27153\nVENDOR_ID_TELEKOMUNIKACJA_POLSKA_SA = 27154\nVENDOR_ID_MR_COPIADORAS_DIGITAIS_LTDA = 27155\nVENDOR_ID_WARLEI_ALVES = 27156\nVENDOR_ID_QUARTET_FINANCIAL_SYSTEMS_INC = 27157\nVENDOR_ID_DEPARTMENT_OF_INTERNAL_AFFAIRS_NEW_ZEALAND = 27158\nVENDOR_ID_PERSISTENT_SYSTEMS_LLC = 27159\nVENDOR_ID_PLASEC_INC = 27160\nVENDOR_ID_DEGOOROO_INC = 27161\nVENDOR_ID_SERVEIS_DE_SALUT_INTEGRATS_BAIX_EMPORD = 27162\nVENDOR_ID_DOLPHIN_TECHNOLOGY_INC = 27163\nVENDOR_ID_CNET_NETWORKS_ASIA_PACIFIC_PTE_LTD = 27164\nVENDOR_ID_UNIVERSIDADE_TECNOLGICA_FEDERAL_DO_PARAN_UTFPR = 27165\nVENDOR_ID_CHECCHIANET_IT_CONSULTING = 27166\nVENDOR_ID_NIPPON_ANTENNA_COLTD = 27167\nVENDOR_ID_EDWARD_ROPER = 27168\nVENDOR_ID_ERLANG_FINANCIAL_SYSTEM_PTY_LTD = 27169\nVENDOR_ID_ETHALON_GMBH = 27170\nVENDOR_ID_COUNCIL_OF_THE_EUROPEAN_UNION = 27171\nVENDOR_ID_ARCABIT_LTD = 27172\nVENDOR_ID_SOFTWARE_CONSULTING_MARKUS_BERNHARDT_GMBH = 27173\nVENDOR_ID_GUENTHER_MAIR = 27174\nVENDOR_ID_IO_TECH_SRL = 27175\nVENDOR_ID_AVINITY_SYSTEMS_BV = 27176\nVENDOR_ID_INTENDENCIA_MUNICIPAL_DE_MONTEVIDEO = 27177\nVENDOR_ID_ISIB_CNR = 27178\nVENDOR_ID_ULTRI = 27179\nVENDOR_ID_FRONTIER_SCIENCE_AND_TECHNOLOGY_RESEARCH_FOUNDATION_INC = 27180\nVENDOR_ID_TEAK_TECHNOLOGIES = 27181\nVENDOR_ID_CAI_NETWORKS_INC = 27182\nVENDOR_ID_BLUEWAVE_NETWORKS_INC = 27183\nVENDOR_ID_UNAVCO = 27184\nVENDOR_ID_VENDORAMA_LTD = 27185\nVENDOR_ID_SHENZHEN_QIAOWEI_INVESTMENT_DEVELOPMENT_COLTD = 27186\nVENDOR_ID_VALIANT_COMMUNICATIONS_LIMITED = 27187\nVENDOR_ID_SEP_SOFTWARE_ENGINEERING_PARTNER_GMBH = 27188\nVENDOR_ID_DD_NETSERVICE_GMBH = 27189\nVENDOR_ID_MICHAELBREUEREU = 27190\nVENDOR_ID_GODALMING_COLLEGE = 27191\nVENDOR_ID_SOONGSIL_UNIVERSITY = 27192\nVENDOR_ID_PATRICK_MONAHAN_DROGHEDA_LTD = 27193\nVENDOR_ID_DELTA_RESOURCES_INC = 27194\nVENDOR_ID_STADTWERKE_DUESSELDORF_AG = 27195\nVENDOR_ID_HARDER_SOFTWARE_LTD = 27196\nVENDOR_ID_HETEONIX = 27197\nVENDOR_ID_RSEAU_POUR_LEXCELLENCE_EN_ENSEIGNEMENT_SUPRIEUR_DE_LAFRIQUE = 27198\nVENDOR_ID_SEPRACOR_INC = 27199\nVENDOR_ID_ENERGY_OPTIONS_INC = 27200\nVENDOR_ID_VIANEL = 27201\nVENDOR_ID_BUSINESS_SYSTEMS_UK_LTD = 27202\nVENDOR_ID_CELESIO_AG = 27203\nVENDOR_ID_SEAWOLF_TECHNOLOGIES_INC = 27204\nVENDOR_ID_GRIDAPP_SYSTEMS_INC = 27205\nVENDOR_ID_BITSHIFT_BERCHTOLD_IT_SOLUTIONS = 27206\nVENDOR_ID_SEVONE_INC = 27207\nVENDOR_ID_OPINSYS_OY = 27208\nVENDOR_ID_LENDWORX_INC = 27209\nVENDOR_ID_SUSO_TECHNOLOGY_SERVICES_INC = 27210\nVENDOR_ID_ENGSOUND_TECHNICAL_ENTERPRISE_CO_LTD = 27211\nVENDOR_ID_ROUTING_INTERNATIONAL_NV = 27212\nVENDOR_ID_BANKA_SLOVENIJE = 27213\nVENDOR_ID_HOLZHAUSEN_NETWORK = 27214\nVENDOR_ID_MAGIX_AG = 27215\nVENDOR_ID_PATRYK_SCIBOREK = 27216\nVENDOR_ID_DIGISENSE_INC = 27217\nVENDOR_ID_GASAG_BERLINER_GASWERKE_AG = 27218\nVENDOR_ID_FUNAMBOL_INC = 27219\nVENDOR_ID_EFCO_CORPORATION_INC = 27220\nVENDOR_ID_DIEBOLD_SOFTWARE_SOLUTIONS_INC = 27221\nVENDOR_ID_PATHWAY_CONNECTIVITY_INC = 27222\nVENDOR_ID_ALCON_TECHNOLOGIES_INC = 27223\nVENDOR_ID_OHREALLY = 27224\nVENDOR_ID_CHIRIS_NETWORKS_INC = 27225\nVENDOR_ID_ASOCIACIN_GRUPO_UNIVERSITARIO_DE_INFORMTICA_UNIVERSIDAD_DE_VALLADOLID = 27226\nVENDOR_ID_SC_SECPRAL_COM_SRL = 27227\nVENDOR_ID_DSP_GROUP_INC = 27228\nVENDOR_ID_ENGINEERS_WITHOUT_BORDERS_CANADA = 27229\nVENDOR_ID_E_PORTAL = 27230\nVENDOR_ID_BIG_SKY_COMPUTER_SYSTEMS_LLC = 27231\nVENDOR_ID_BATM_ADVANCED_COMMUNICATIONS_GMBH = 27232\nVENDOR_ID_LA_EVENTS = 27233\nVENDOR_ID_PORTAUTHORITY_TECHNOLOGIES_INC = 27234\nVENDOR_ID_POLITECHNIKA_GDANSKA = 27235\nVENDOR_ID_NETORACLE_LTD = 27236\nVENDOR_ID_SMART_DATA_SOLUTIONS_INC = 27237\nVENDOR_ID_WINBOND_ELECTRONICS_CORP = 27238\nVENDOR_ID_USC_SATUNAMA = 27239\nVENDOR_ID_HEADNET_APS = 27240\nVENDOR_ID_IDC_INFORMATICA_SRL = 27241\nVENDOR_ID_BILFINGER_BERGER_AG = 27242\nVENDOR_ID_SIGNAL_NETWORKS_PVT_LTD = 27243\nVENDOR_ID_IRONGATE_SL = 27244\nVENDOR_ID_MALTACOM_PLC = 27245\nVENDOR_ID_JRFLLA_KOMMUN_FR_OCH_GRUNDSKOLOR = 27246\nVENDOR_ID_RADIAN_GROUP_INC = 27247\nVENDOR_ID_COMPUTER_PROGRAMS_AND_SYSTEMS_INC_CPSI = 27248\nVENDOR_ID_PICOSOFT_LTD = 27249\nVENDOR_ID_WEST_LINN_PAPER_COMPANY = 27250\nVENDOR_ID_MEDSTREAMING = 27251\nVENDOR_ID_EXCAPSA_SERVICES_INC = 27252\nVENDOR_ID_AUSREGISTRY_PTY_LTD = 27253\nVENDOR_ID_FIX_FLYER_LLC = 27254\nVENDOR_ID_TARKHANY_REGIONAL_COUNTY_OPEN_JOINT_STOCK_BANK = 27255\nVENDOR_ID_NPF_KRUG = 27256\nVENDOR_ID_VALIMO_WIRELESS_OY = 27257\nVENDOR_ID_NOVASECURE_AS = 27258\nVENDOR_ID_BEL_POWER_SOLUTIONS_FORMERLY_POWER_ONE = 27259\nVENDOR_ID_DYNAPEL_SYSTEMS_INC = 27260\nVENDOR_ID_SERVICIOS_AVANZADOS_PARA_LAS_INSTITUCIONES_SL = 27261\nVENDOR_ID_DANTE_LTD = 27262\nVENDOR_ID_NETSMART_PUBLIC_HEALTH_INC = 27263\nVENDOR_ID_NMODEL = 27264\nVENDOR_ID_INLET_TECHNOLOGIES_INC = 27265\nVENDOR_ID_FREECODE = 27266\nVENDOR_ID_ENCRYPTANET_INC = 27267\nVENDOR_ID_HANGAR_EIGHTEEN_ENTERPRISES_LLC = 27268\nVENDOR_ID_MYNAVI_CORPORATION = 27269\nVENDOR_ID_KOSYS_KOCKISCH_ITK_SYSTEMS_AND_SERVICES = 27270\nVENDOR_ID_STRUCTURED_SOFTWARE_SYSTEMS_LTD = 27271\nVENDOR_ID_ENVISIONEERING_MEDICAL_TECHNOLOGIES = 27272\nVENDOR_ID_INFINITE_VIDEO_CORPORATION = 27273\nVENDOR_ID_FASTFEED_INC = 27274\nVENDOR_ID_ALEXCODER = 27275\nVENDOR_ID_TECHNOVARE_SYSTEMS_INC = 27276\nVENDOR_ID_SATPATH_SYSTEMS_INC = 27277\nVENDOR_ID_SINDORICOH_CO_LTD = 27278\nVENDOR_ID_GOLDENNET_TECHNOLOGY_INC = 27279\nVENDOR_ID_UNIVERSIT_DEGLI_STUDI_DI_URBINO_CARLO_BO = 27280\nVENDOR_ID_NETCON_SYSTEMS = 27281\nVENDOR_ID_REALTEK_SEMICONDUCTOR_CORP = 27282\nVENDOR_ID_XCENIUM_TECHNOLOGY = 27283\nVENDOR_ID_DAON_TRUSTED_IDENTITY_SERVICES_FORMERLY_SECURITY_BIOMETRIC_CLEARING_NETWORK = 27284\nVENDOR_ID_THE_NISU_RESEARCH_TEAM = 27285\nVENDOR_ID_NETOPIA_INC = 27286\nVENDOR_ID_UNIVERSITY_OF_PERUGIA = 27287\nVENDOR_ID_MYSYSTEMADMIN = 27288\nVENDOR_ID_EGISTICS_INC = 27289\nVENDOR_ID_BEIJING_OSEE_DIGITAL_TECHNOLOGY_COLTD = 27290\nVENDOR_ID_BUNDESMINISTERIUM_FR_VERKEHR_BAU_UND_STADTENTWICKLUNG = 27291\nVENDOR_ID_TOPEX_SA = 27292\nVENDOR_ID_MELIAN_ITALIA_SRL = 27293\nVENDOR_ID_MACSPECIALIST = 27294\nVENDOR_ID_AXEL_TECHNOLOGY_SRL = 27295\nVENDOR_ID_BLIZZARD_ENTERTAINMENT = 27296\nVENDOR_ID_SCHECHTERTECH_LLC = 27297\nVENDOR_ID_ASIA_PACIFIC_BROADBAND_WIRELESS_COMMUNICATIONS = 27298\nVENDOR_ID_INFORMED_COMPUTING = 27299\nVENDOR_ID_TRANSCOM_TECHNOLOGIES_COLTD = 27300\nVENDOR_ID_GALAXYIO = 27301\nVENDOR_ID_DER_SENATOR_FR_BILDUNG_UND_WISSENSCHAFT = 27302\nVENDOR_ID_CLEAR_VALUE = 27303\nVENDOR_ID_DKT_A_S = 27304\nVENDOR_ID_SATIS_SUPERQUE_MERCE_BV = 27305\nVENDOR_ID_AUTOMATED_COMPUTING_MACHINERY_SL = 27306\nVENDOR_ID_RANKIN_COUNTY_SCHOOL_DISTRICT = 27307\nVENDOR_ID_UNIQUE_COMMUNICATIONS_INC = 27308\nVENDOR_ID_SSRC_MEDIA_LLC = 27309\nVENDOR_ID_NETIDEAS_INC = 27310\nVENDOR_ID_SENI_SYSTEMS_INC = 27311\nVENDOR_ID_EDA_LTD = 27312\nVENDOR_ID_SINTREX_INTEGRATION_SERVICES_PTY_LTD = 27313\nVENDOR_ID_DEL_SYSTEMS_DOO = 27314\nVENDOR_ID_INTERNET_MANAGEMENT_TECHNOLOGY_LABORATORY = 27315\nVENDOR_ID_SCHOEPPNER = 27316\nVENDOR_ID_EXTREME_ENGINEERING_SOLUTIONS_INC = 27317\nVENDOR_ID_ISE_INC = 27318\nVENDOR_ID_NEXEN_INC = 27319\nVENDOR_ID_KINGSBURY_INC = 27320\nVENDOR_ID_READY_TECHNOLOGY_UK_LIMITED = 27321\nVENDOR_ID_21NET_LTD = 27322\nVENDOR_ID_KEI_COMMUNICATION_TECHNOLOGY_INC = 27323\nVENDOR_ID_SEMEJNY_DOKTOR = 27324\nVENDOR_ID_UBIQUITECH_A_S = 27325\nVENDOR_ID_EUIT_TELECOMUNICACION_UNIVERSIDAD_POLITCNICA_DE_MADRID = 27326\nVENDOR_ID_MOBIZOOM_AG = 27327\nVENDOR_ID_ROSA_DANSK_ROCK_SAMRD = 27328\nVENDOR_ID_BUSINESS_EDUCATION_COUNCIL_OF_NIAGARA = 27329\nVENDOR_ID_LKHP_INC = 27330\nVENDOR_ID_JTG_99_APS = 27331\nVENDOR_ID_SOGETI = 27332\nVENDOR_ID_BUZZ_SYSTEMS_LTD = 27333\nVENDOR_ID_MULTIDYNE_ELECTRONICS_INC = 27334\nVENDOR_ID_RITEK_ZRT = 27335\nVENDOR_ID_CONVERGED_ACCESS_INC = 27336\nVENDOR_ID_CABLESERV_INC = 27337\nVENDOR_ID_ATEME = 27338\nVENDOR_ID_PROJECT_AUTOMATION_SPA = 27339\nVENDOR_ID_OPENVPN_SOLUTIONS_LLC = 27340\nVENDOR_ID_MEDIANSTRIP = 27341\nVENDOR_ID_HASKOLOGY_CONSULTING = 27342\nVENDOR_ID_TELEKOM_SRBIJA_AD = 27343\nVENDOR_ID_DALLMEIER_ELECTRONIC_GMBH_COKG = 27344\nVENDOR_ID_ALTICOR_INC = 27345\nVENDOR_ID_VDA_ELETTRONICA_SPA = 27346\nVENDOR_ID_ALEXANDROW_WEBHOSTING = 27347\nVENDOR_ID_BLUE_SPRUCE_TECHNOLOGIES_INC = 27348\nVENDOR_ID_LONARDIORG = 27349\nVENDOR_ID_QEW_EUROPE = 27350\nVENDOR_ID_MEDIZINISCHE_FAKULTT_CARL_GUSTAV_CARUS_DRESDEN_AN_DER = 27351\nVENDOR_ID_MAYWIDE_TECHNOLOGY_COLTD = 27352\nVENDOR_ID_ELTA = 27353\nVENDOR_ID_EPONAORG = 27354\nVENDOR_ID_UNIVERSITY_POLITECHNICAL_OF_BUCHAREST = 27355\nVENDOR_ID_DWESAB_ENGINEERING = 27356\nVENDOR_ID_ANDROME_NV = 27357\nVENDOR_ID_TECHNOLOGY_DYNAMICS_INC_2 = 27358\nVENDOR_ID_HILTRON_GMBH = 27359\nVENDOR_ID_NLS_TECHNOLOGY_LLC = 27360\nVENDOR_ID_RIZON_SOFTWARE_TECHNOLOGY_COLTD = 27361\nVENDOR_ID_SYMBIO_TECHNOLOGIES_LLC = 27362\nVENDOR_ID_TVHEAD_INC = 27363\nVENDOR_ID_AXIOMA_INC = 27364\nVENDOR_ID_SOFTECH_WORLDWIDE_LLC = 27365\nVENDOR_ID_INSIGNIA_MOBILE_COMMUNICATIONSCA = 27366\nVENDOR_ID_VISONYS_AG = 27367\nVENDOR_ID_BUSINESS_IT_SYSTEMS_LTD = 27368\nVENDOR_ID_ESTE_LAUDER_INC = 27369\nVENDOR_ID_HENNEPIN_COUNTY = 27370\nVENDOR_ID_ASPELLCLARK = 27371\nVENDOR_ID_PROGENIST_SYSTEMS_INC = 27372\nVENDOR_ID_QUICKPOINT_SOLUTIONS_LIMITED = 27373\nVENDOR_ID_MAKEITOPENNET = 27374\nVENDOR_ID_IT_SYSTEMHAUS_THOMAS_WIESE = 27375\nVENDOR_ID_TRIPLE_IT_APS = 27376\nVENDOR_ID_GROUPSTER = 27377\nVENDOR_ID_BELDEN = 27378\nVENDOR_ID_NESS_CONSULTING_LTD = 27379\nVENDOR_ID_PCS_PROCESS_CONTROL_SYSTEMS_AG = 27380\nVENDOR_ID_MYNDIT_PTY_LTD = 27381\nVENDOR_ID_OMNIACCESS_SL = 27382\nVENDOR_ID_THEO_BENNING_GMBH_COKG = 27383\nVENDOR_ID_WERNER_INDUSTRIELLE_ELEKTRONIK = 27384\nVENDOR_ID_ELCON_SYSTEMTECHNIK_GMBH = 27385\nVENDOR_ID_FARMERS_GROUP_INC = 27386\nVENDOR_ID_IHOP_CORP = 27387\nVENDOR_ID_WIREMAT_LTD = 27388\nVENDOR_ID_SPLUNK_INC = 27389\nVENDOR_ID_ICOGO_INC = 27390\nVENDOR_ID_BRAINTRIBE_IT_TECHNOLOGIES = 27391\nVENDOR_ID_SCHILLER = 27392\nVENDOR_ID_METROVACESA_SA = 27393\nVENDOR_ID_NOSMADEIRA = 27394\nVENDOR_ID_AVANSI_C_POR_A = 27395\nVENDOR_ID_OPEN_JOURNAL_PROJECT = 27396\nVENDOR_ID_PRAXIS_BALSTER_DE_BEER = 27397\nVENDOR_ID_BERND_HAUG = 27398\nVENDOR_ID_ROSS_VIDEO_LIMITED = 27399\nVENDOR_ID_RANDOLPH_MACON_COLLEGE = 27400\nVENDOR_ID_DATAUPIA_CORPORATION = 27401\nVENDOR_ID_TATRAD_GMBH = 27402\nVENDOR_ID_FRONTIER_IT = 27403\nVENDOR_ID_SIMPLECOMTOOLS = 27404\nVENDOR_ID_REN_FAIGLE_AG = 27405\nVENDOR_ID_CENTER_COMMUNICATION_SYSTEMS_GMBH = 27406\nVENDOR_ID_BUROTEC = 27407\nVENDOR_ID_HOTELPLAN_AG = 27408\nVENDOR_ID_MONDI_PACKAGING_AG = 27409\nVENDOR_ID_SKOLESYS_A_S = 27410\nVENDOR_ID_CURTIS_J_COLEMAN = 27411\nVENDOR_ID_ICSOFT_PTY_LTD = 27412\nVENDOR_ID_LABS2_I_LUND_AB = 27413\nVENDOR_ID_STADT_CHEMNITZ = 27414\nVENDOR_ID_SIRF_TECHNOLOGY_INC = 27415\nVENDOR_ID_ELVACO_AB = 27416\nVENDOR_ID_FAST_TV_SERVER_AG = 27417\nVENDOR_ID_FISEC_GMBH = 27418\nVENDOR_ID_UNIVERSITY_OF_NEW_ENGLAND_2 = 27419\nVENDOR_ID_SOUTHSIDE_COMMUNITY_HOSPITAL = 27420\nVENDOR_ID_SYNERGY_FOR_SMART_SOLUTIONS = 27421\nVENDOR_ID_INTER_CARS_SA = 27422\nVENDOR_ID_POTTS_MULLARKEY = 27423\nVENDOR_ID_FIRSTIN_WIRELESS_TECHNOLOGY = 27424\nVENDOR_ID_AFFINITY_MOBILE_INC = 27425\nVENDOR_ID_VIASOFT_LTD_UKRAINE = 27426\nVENDOR_ID_VECIMA_NETWORKS_INC = 27427\nVENDOR_ID_INTESYS_SRL = 27428\nVENDOR_ID_IT_SERVICE_ZAHNER = 27429\nVENDOR_ID_CALL_GENIE_INC = 27430\nVENDOR_ID_STETON_TECHNOLOGY_GROUP_INC = 27431\nVENDOR_ID_ARCHALIENCOM = 27432\nVENDOR_ID_CENTERIS_CORPORATION = 27433\nVENDOR_ID_HALS_SOFTWARE_INC = 27434\nVENDOR_ID_AOZORA_INFORMATION_SYSTEMS_CO_LTD = 27435\nVENDOR_ID_JEFFERIES_COMPANY_INC = 27436\nVENDOR_ID_TOA_CORPORATION = 27437\nVENDOR_ID_ERIC_LINDAHL = 27438\nVENDOR_ID_OPENAGENTSYSTEM = 27439\nVENDOR_ID_INGO_LANTSCHNER = 27440\nVENDOR_ID_PEM_GMBH = 27441\nVENDOR_ID_SAPERION_AG = 27442\nVENDOR_ID_YLABS_SRL = 27443\nVENDOR_ID_MURPHY_SOFTWARE_BV = 27444\nVENDOR_ID_INFORMED_LLC = 27445\nVENDOR_ID_PAHLNET_SYSTEMS = 27446\nVENDOR_ID_FEMTIO_PROCENT_DATA_AB = 27447\nVENDOR_ID_THE_AERO_GROUP_INC = 27448\nVENDOR_ID_UNIVERSIDAD_DE_BUENOS_AIRES = 27449\nVENDOR_ID_REALORGANIZED_INC = 27450\nVENDOR_ID_AURCON_COMPUTER_SERVICES = 27451\nVENDOR_ID_BILLINGS_CLINIC = 27452\nVENDOR_ID_LANE_COMPANY = 27453\nVENDOR_ID_NEOMENTIS_LTD = 27454\nVENDOR_ID_SCHLESINGER_ASSOCIATES_INC = 27455\nVENDOR_ID_UNIVERSITY_OF_WARWICK = 27456\nVENDOR_ID_JOOMLA_OPENSOURCEMATTER_INC = 27457\nVENDOR_ID_FLO_HEALTHCARE = 27458\nVENDOR_ID_INTLNET = 27459\nVENDOR_ID_DIGITAL_MAELSTROM_LLC = 27460\nVENDOR_ID_KNIT_ONE_PEARL_ONE = 27461\nVENDOR_ID_BUBBLE_MOTION_PTE_LTD = 27462\nVENDOR_ID_THCOM_GMBH = 27463\nVENDOR_ID_PROJEKTY_BANKOWE_POLSOFT_SP_Z_OO = 27464\nVENDOR_ID_DOMODESK_SL = 27465\nVENDOR_ID_INTER_IKEA_SYSTEMS_BV = 27466\nVENDOR_ID_NETHINKS_GMBH = 27467\nVENDOR_ID_ELTA_R = 27468\nVENDOR_ID_GLOWLINK_COMMUNICATIONS_TECHNOLOGY_INC = 27469\nVENDOR_ID_KUOREM_IT_CONSULTING_SL = 27470\nVENDOR_ID_KOTELETT_GROUP = 27471\nVENDOR_ID_PEAK_WEB_CONSULTING_INC = 27472\nVENDOR_ID_CONSEJO_DE_LA_MAGISTRATURA_DE_LA_CIUDAD_AUTONOMA_DE_BUENOS_AIRES = 27473\nVENDOR_ID_MULTI_CO = 27474\nVENDOR_ID_CIRITECH_SYSTEMS_INC = 27475\nVENDOR_ID_MICSGARAGE = 27476\nVENDOR_ID_ETHRIX_LTD = 27477\nVENDOR_ID_BOEKINGSPUNT_NEDERLAND_BV = 27478\nVENDOR_ID_PROJEKT_42_GMBH = 27479\nVENDOR_ID_FORSIS_GMBH = 27480\nVENDOR_ID_ARZL_DATENTECHNIK = 27481\nVENDOR_ID_G2_MICROSYSTEMS_PTY_LTD = 27482\nVENDOR_ID_OPENSIPSORG_FORMERLY_OPENSERORG = 27483\nVENDOR_ID_EIGHTWIRECOM_LIMITED = 27484\nVENDOR_ID_JSC_PUBLIC_KEY_INFRASTRUCTURE = 27485\nVENDOR_ID_SWISSGEEKORG = 27486\nVENDOR_ID_KENT_COUNTY_COUNCIL = 27487\nVENDOR_ID_ATU_HANDELS_GMBH = 27488\nVENDOR_ID_EVANGELISCH_LUTHERISCHE_LANDESKIRCHE_IN_BRAUNSCHWEIG = 27489\nVENDOR_ID_SP_SWEDISH_NATIONAL_TESTING_AND_RESEARCH_INSTITUTE = 27490\nVENDOR_ID_FREEPORT_TECHNOLOGIES_INC = 27491\nVENDOR_ID_MAJOR_HOSPITAL = 27492\nVENDOR_ID_DIRECCIN_DE_TECNOLOGA_EDUCATIVA = 27493\nVENDOR_ID_SEATORE_TECHNOLOGY = 27494\nVENDOR_ID_OPTIWAY = 27495\nVENDOR_ID_MALAIWAHCOM = 27496\nVENDOR_ID_FIDUCIAL_STAFFING = 27497\nVENDOR_ID_INNOVATIVE_TECHNOLOGY_SOLUTIONS_LLC = 27498\nVENDOR_ID_OPERATIONS_FEEDBACK_SYSTEMS_PTY_LTD = 27499\nVENDOR_ID_DAWNING_LTD = 27500\nVENDOR_ID_SELDON_SYSTEMS_INC = 27501\nVENDOR_ID_ARAB_BANKING_COPORATION = 27502\nVENDOR_ID_TD_COMPUTER_SOLUTIONS_GMBH_CO_KG = 27503\nVENDOR_ID_CELTIUS_LTD = 27504\nVENDOR_ID_KT_NET_COMMUNICATIONS_GMBH = 27505\nVENDOR_ID_OBJECT_BUILDER_SOFTWARE_BULGARIA = 27506\nVENDOR_ID_AUTOMATION_CONTROL_PRODUCTS_INC = 27507\nVENDOR_ID_TRAVELCENTERS_OF_AMERICA = 27508\nVENDOR_ID_CREANORD_LTD = 27509\nVENDOR_ID_NETGAIN_SYSTEMS_PTE_LTD = 27510\nVENDOR_ID_GIGANTE_INC = 27511\nVENDOR_ID_M3_TECHNOLOGY_GROUP = 27512\nVENDOR_ID_PRO_E_AUTOMATION_SDN_BHD = 27513\nVENDOR_ID_QTECH_LLC = 27514\nVENDOR_ID_STOCKHOLMS_STAD = 27515\nVENDOR_ID_NIVC_AS = 27516\nVENDOR_ID_GT50_SRL_FORMERLY_SECURE_EDGE_SRL = 27517\nVENDOR_ID_PROMEDICA_HEALTH_SYSTEM = 27518\nVENDOR_ID_POZICOM_TECHNOLOGIES_INC = 27519\nVENDOR_ID_INTERNATIONAL_ELECTRONIC_COMMUNICATION_ANALYSTS_IECA_INC = 27520\nVENDOR_ID_EMUSICCOM_INC = 27521\nVENDOR_ID_MUNICIPIO_DE_LA_CIUDAD_DE_MONTERREY = 27522\nVENDOR_ID_RUNLEVEL3_GMBH = 27523\nVENDOR_ID_TRIAX_CZ_SRO = 27524\nVENDOR_ID_DET_1_AFEREG = 27525\nVENDOR_ID_KANAZAWA_UNIVERSITY = 27526\nVENDOR_ID_ABB_LTD = 27527\nVENDOR_ID_DRAGON_STOCK_LABO_INC = 27528\nVENDOR_ID_DRI_CONSULTORIA_INFORMTICA_LDA = 27529\nVENDOR_ID_DECONTIS_GMBH = 27530\nVENDOR_ID_PLANNED_IT_SOLUTIONS_INC = 27531\nVENDOR_ID_HANCOCK_REGIONAL_HOSPITAL = 27532\nVENDOR_ID_BKE_AS = 27533\nVENDOR_ID_WIDESTORE_SRL = 27534\nVENDOR_ID_ARTWORK_SYSTEMS_NV = 27535\nVENDOR_ID_SANTECLAIR = 27536\nVENDOR_ID_EDUCATIO_PUBLIC_SERVICES_NON_PROFIT_LLC = 27537\nVENDOR_ID_ADTSYSTEMS_SRO = 27538\nVENDOR_ID_PACIFIC_DATAVISION_INC = 27539\nVENDOR_ID_SIMPPLE_SL = 27540\nVENDOR_ID_ITSSEEVIA_GROUP = 27541\nVENDOR_ID_COSAT_INC = 27542\nVENDOR_ID_GILLWARE_DATA_SERVICES_LLC = 27543\nVENDOR_ID_NSK_OPENSOURCE_INC = 27544\nVENDOR_ID_NINOMIYA_TOWN = 27545\nVENDOR_ID_AMERICAN_UNIVERSITY_OF_BEIRUT = 27546\nVENDOR_ID_FOUR_BATONS_TECHNOLOGY = 27547\nVENDOR_ID_KRS_HARDWARE_MONITORING_DEVELOPMENT = 27548\nVENDOR_ID_TELESANTE_AQUITAINE = 27549\nVENDOR_ID_ALCHEMY_GROUP_LIMITED = 27550\nVENDOR_ID_FARHEAP_SOLUTIONS_INC = 27551\nVENDOR_ID_NIMBUS_INC = 27552\nVENDOR_ID_SALEM_ACADEMY_AND_COLLEGE = 27553\nVENDOR_ID_PURETECH_SYSTEMS_INC = 27554\nVENDOR_ID_ROSUM_CORPORATION = 27555\nVENDOR_ID_THE_PTR_GROUP_INC = 27556\nVENDOR_ID_BOTECH_AB = 27557\nVENDOR_ID_IHMC = 27558\nVENDOR_ID_DATA_SCIENCE_GROUP_INC = 27559\nVENDOR_ID_ALAN_DICK_AND_COMPANY_LTD = 27560\nVENDOR_ID_INDECA = 27561\nVENDOR_ID_DAEMON_SOFTWARE = 27562\nVENDOR_ID_QSTAR_TECHNOLOGIES_INC = 27563\nVENDOR_ID_UNIFAL_UNIVERSIDADE_FEDERAL_DE_ALFENAS = 27564\nVENDOR_ID_MINISTERIO_DE_INDUSTRIA_TURISMO_Y_COMERCIO = 27565\nVENDOR_ID_VIZRT = 27566\nVENDOR_ID_BAUR_GMBH = 27567\nVENDOR_ID_KUPETTO = 27568\nVENDOR_ID_NATIONAL_DIGITAL_MEDICAL_ARCHIVE_INC = 27569\nVENDOR_ID_GIAROCO = 27570\nVENDOR_ID_GUENTHER_BRUNTHALER_EDV_DIENSTLEISTUNGEN = 27571\nVENDOR_ID_CEOS_INTEGRADORES_DE_SISTEMAS_CA = 27572\nVENDOR_ID_TECHGUARD_SECURITY_LLC_FORMERLY_THE_FERRETNET = 27573\nVENDOR_ID_10MT_CO = 27574\nVENDOR_ID_DSL_INTERNET_CORPORATION = 27575\nVENDOR_ID_ENVYSION_INC = 27576\nVENDOR_ID_R_D_PIERCE = 27577\nVENDOR_ID_CARTCHUNKORG = 27578\nVENDOR_ID_KELTRON_CORPORATION = 27579\nVENDOR_ID_INTEGRITY_SOLUES_EM_INFORMTICA_SOCIEDADE_SIMPLES = 27580\nVENDOR_ID_NETUM_OY = 27581\nVENDOR_ID_PH_GROUP_LTD = 27582\nVENDOR_ID_METRONIK_DOO = 27583\nVENDOR_ID_UPPLYSNINGSCENTRALEN_AB = 27584\nVENDOR_ID_ORANGE_NEDERLAND_BV = 27585\nVENDOR_ID_ALTAI_TECHNOLOGIES_LIMITED = 27586\nVENDOR_ID_SHINTO_DENSAN_CORPORATION = 27587\nVENDOR_ID_KINGSISLE_ENTERTAINMENT_INC = 27588\nVENDOR_ID_ZBN_ZHENGZHOU_BROADCASTING_TV_NETWORK_CO_LTD = 27589\nVENDOR_ID_CARDINAL_INFORMATION_SYSTEMS_LTD = 27590\nVENDOR_ID_BIT_SIDE_GMBH = 27591\nVENDOR_ID_BEIJING_NETEAST_TECHNOLOGIES_CORPORATION_LTD = 27592\nVENDOR_ID_MEDIA_EXCEL_INC = 27593\nVENDOR_ID_SKIPPER_WIRELESS_INC = 27594\nVENDOR_ID_NWP_TECHNOLOGIE_INFORMATYCZNE = 27595\nVENDOR_ID_NONNIC = 27596\nVENDOR_ID_CADIGS_LTD = 27597\nVENDOR_ID_AYUNTAMIENTO_DE_MADRID_POLICIA_MUNICIPAL = 27598\nVENDOR_ID_BIT_KAZAN_LTD = 27599\nVENDOR_ID_C_C_POR_A = 27600\nVENDOR_ID_HIGHER_INSTITUTE_FOR_APPLIED_SCIENCES_AND_TECHNOLOGY_HIAST = 27601\nVENDOR_ID_WOODFOREST_NATIONAL_BANK = 27602\nVENDOR_ID_GROOVE_MOBILE = 27603\nVENDOR_ID_TETRALOGYX = 27604\nVENDOR_ID_URZAD_MIASTA_STOLECZNEGO_WARSZAWY = 27605\nVENDOR_ID_GLOBAL_NETWATCH_INCORPORATED = 27606\nVENDOR_ID_SKIN_AND_CANCER_FOUNDATION_INC = 27607\nVENDOR_ID_WUHAN_YANGTZE_OPTICAL_TECHNOLOGY_CO_LTD = 27608\nVENDOR_ID_DASH_NAVIGATION_INC = 27609\nVENDOR_ID_SOLARCORE_INC = 27610\nVENDOR_ID_TRAFFIX_SYSTEMS_LTD = 27611\nVENDOR_ID_SMARTSTREAM_TECHNOLOGIES = 27612\nVENDOR_ID_ALBANOVA_UNIVERSITY_CENTER_THE_STOCKHOLM_CENTER_FOR_PHYSICS = 27613\nVENDOR_ID_ASCOM_SWEDEN_AB = 27614\nVENDOR_ID_DEVOLO = 27615\nVENDOR_ID_PHAEDRUS_LTD = 27616\nVENDOR_ID_PAYEX_SOLUTIONS_AB = 27617\nVENDOR_ID_SIHL_EIKA_PAPIER_AG = 27618\nVENDOR_ID_BEWAN_SYSTEMS = 27619\nVENDOR_ID_GS1_URUGUAY = 27620\nVENDOR_ID_NATIONAL_INFORMATION_TECHNOLOGIES_JSC = 27621\nVENDOR_ID_OPEN_COMMUNICATION_SECURITY_SA = 27622\nVENDOR_ID_SHAVLIK_TECHNOLOGIES_LLC = 27623\nVENDOR_ID_METANOIA_COMMUNICATIONS_INC = 27624\nVENDOR_ID_UZ_BRUSSEL = 27625\nVENDOR_ID_SK_NIC_AS = 27626\nVENDOR_ID_CESKOSLOVENSKA_OBCHODNI_BANKA_AS = 27627\nVENDOR_ID_UNUM_GROUP = 27628\nVENDOR_ID_HELENIC_MINISTRY_OF_INTERIOR_PUBLIC_ADMINISTRATION_AND = 27629\nVENDOR_ID_OSI_STE_CIVILE_ETUDES_ET_RECHERCHES = 27630\nVENDOR_ID_TOUCHSTONE_TECHNOLOGIES_INC = 27631\nVENDOR_ID_MVNO_SHERPA = 27632\nVENDOR_ID_ETERNIX_LTD = 27633\nVENDOR_ID_ABC_PHONES_OF_NC_INC = 27634\nVENDOR_ID_WHOLESALE_COMMUNICATIONS_GROUP_P_L = 27635\nVENDOR_ID_F_CAMARA_INFORMTICA_LTDA = 27636\nVENDOR_ID_LATERAL_NETWORKS_LTD = 27637\nVENDOR_ID_GULF_INTERSTATE_ENGINEERING = 27638\nVENDOR_ID_NASHUA_MOBILE_PTY_LTD = 27639\nVENDOR_ID_TELEFONICA_MOVILES_ESPAA_SA = 27640\nVENDOR_ID_JUNTA_DE_EXTREMADURA = 27641\nVENDOR_ID_MANUEL_LINSMAYER = 27642\nVENDOR_ID_ZEDA_LTD = 27643\nVENDOR_ID_CFC_INFORMATIONSSYSTEME_ENTWICKLUNGSGESELLSCHAFT_MBH = 27644\nVENDOR_ID_POSTGRESQL_GLOBAL_DEVELOPMENT_GROUP = 27645\nVENDOR_ID_SYSTEMS_ENGINEERING_ASSESSMENT_LTD = 27646\nVENDOR_ID_ISKRA_ZASCITE_DOO = 27647\nVENDOR_ID_ESPCI = 27648\nVENDOR_ID_HAY_SYSTEMS_LIMITED = 27649\nVENDOR_ID_HERWARD_HOYER = 27650\nVENDOR_ID_PROCONSULTANT_INFORMATIQUE = 27651\nVENDOR_ID_SUNY = 27652\nVENDOR_ID_MYRUNNINGCOM = 27653\nVENDOR_ID_TAIN_MALTA_LTD_FORMERLY_INVOLVE_LTD = 27654\nVENDOR_ID_IFP = 27655\nVENDOR_ID_HAFENCITY_UNIVERSITT_HAMBURG = 27656\nVENDOR_ID_HUGH_MCLENAGHAN = 27657\nVENDOR_ID_AGEMARKS_TECHNOLOGIES = 27658\nVENDOR_ID_ATOL_CONSEILS_ET_DVELOPPEMENTS = 27659\nVENDOR_ID_DEUTSCHE_WELLE = 27660\nVENDOR_ID_GATESQUARE_CO_LTD = 27661\nVENDOR_ID_PEPWAVE_LTD = 27662\nVENDOR_ID_AFP548COM = 27663\nVENDOR_ID_INTUICOM_INC = 27664\nVENDOR_ID_ISR_INC = 27665\nVENDOR_ID_NF_MEDIA_INC = 27666\nVENDOR_ID_APPRION_INC = 27667\nVENDOR_ID_OLIVIER_MOLTENI = 27668\nVENDOR_ID_EASYRAID = 27669\nVENDOR_ID_TIROLER_LANDESKRANKENANSTALTEN_GMBH = 27670\nVENDOR_ID_ATL_SYSTEMS_INC = 27671\nVENDOR_ID_ELECTOOL_SYSTEMS_KFT = 27672\nVENDOR_ID_QUOD_FINANCIAL_SA = 27673\nVENDOR_ID_MOBIBRASIL_SOLUOES_INTERACTIVAS_PELA_INTERNET = 27674\nVENDOR_ID_CURTISS_WRIGHT_CONTROLS_INC = 27675\nVENDOR_ID_MOTIONBOX_INC = 27676\nVENDOR_ID_EVOLUTION_BROADCAST_PTY_LTD = 27677\nVENDOR_ID_JAZZIO = 27678\nVENDOR_ID_THE_HYDE_COMPANY = 27679\nVENDOR_ID_NEMO_ENG = 27680\nVENDOR_ID_TECHNORATI_INC = 27681\nVENDOR_ID_ALBA_SOFTWARE_SL = 27682\nVENDOR_ID_MSCORP_VENEZUELA_CA = 27683\nVENDOR_ID_IDOPTE = 27684\nVENDOR_ID_TRENT_UNIVERSITY = 27685\nVENDOR_ID_REFACTORED_NETWORKS_LLC = 27686\nVENDOR_ID_DATAMIRROR_CORPORATION = 27687\nVENDOR_ID_KEANE_INC = 27688\nVENDOR_ID_ENERTEL_WIRELESS_BV = 27689\nVENDOR_ID_ARQIVA = 27690\nVENDOR_ID_FRAMEWORK_COMPUTER_CONSULTANTS_LIMITED = 27691\nVENDOR_ID_THINWARE_SRL = 27692\nVENDOR_ID_VOITH_AG = 27693\nVENDOR_ID_UTU_INC = 27694\nVENDOR_ID_METEOR_MOBILE = 27695\nVENDOR_ID_ATTOSENSE = 27696\nVENDOR_ID_GRAVITY_CIS_INC = 27697\nVENDOR_ID_VAAL_HOSTING = 27698\nVENDOR_ID_TYCHE_ENTERPRISES_LLC = 27699\nVENDOR_ID_OPEN_DIAMETER_PROJECT = 27700\nVENDOR_ID_ORIGIN_ELECTRIC_COLTD = 27701\nVENDOR_ID_BEIJING_SOFTTONE_COMPANY_LTD = 27702\nVENDOR_ID_CABO_COMMUNICATIONS_A_S = 27703\nVENDOR_ID_KEISOKUGIKEN_CORPORATION = 27704\nVENDOR_ID_1984_EHF = 27705\nVENDOR_ID_E_COMMERCE_XHTML_11_DOT_COM = 27706\nVENDOR_ID_SIMINN = 27707\nVENDOR_ID_ISB_BRACHERT = 27708\nVENDOR_ID_SOFTWARE_APPLICATIONS = 27709\nVENDOR_ID_HOSTNET_MEDIEN_GMBH = 27710\nVENDOR_ID_1053935_ALBERTA_LTD = 27711\nVENDOR_ID_MANAGING_COMPANY_SB_JSC = 27712\nVENDOR_ID_ETHON = 27713\nVENDOR_ID_ARNE_STEINKAMM = 27714\nVENDOR_ID_POSTERITY_TECHNOLOGIES_CO_LTD = 27715\nVENDOR_ID_MINNESOTA_STATE_COLLEGES_AND_UNIVERSITIES = 27716\nVENDOR_ID_CEDOC_MODENA = 27717\nVENDOR_ID_SELFSERVIX_IT_SERVICE = 27718\nVENDOR_ID_VIZIONCORE_INC = 27719\nVENDOR_ID_SBONEDE = 27720\nVENDOR_ID_DOTSTER_INC = 27721\nVENDOR_ID_PENNIC_CONSULTING_INC = 27722\nVENDOR_ID_PERMESSA_CORPORATION_FORMERLY_DYS_ANALYTICS_INC = 27723\nVENDOR_ID_OPTICOMM_CORPORATION = 27724\nVENDOR_ID_ASURION = 27725\nVENDOR_ID_EXECUTIVE_COACH_INC = 27726\nVENDOR_ID_ANTARTEC_SAC = 27727\nVENDOR_ID_DATRON_WORLD_COMMUNICATIONS_INC = 27728\nVENDOR_ID_US_TECHNOLOGY_RESOURCES_LLC = 27729\nVENDOR_ID_LEPORIS_CORPORATION = 27730\nVENDOR_ID_WESTERN_POWER = 27731\nVENDOR_ID_ONIONSOFTWARE_INC = 27732\nVENDOR_ID_ASW_SYSTEMS_SRO = 27733\nVENDOR_ID_SQUITEL = 27734\nVENDOR_ID_YAWABUREAU_SRL = 27735\nVENDOR_ID_SMILE_LTD = 27736\nVENDOR_ID_BERENDSEN_GROUP_SERVICES_GMBH = 27737\nVENDOR_ID_VERIT_VERWALTUNGS_UND_IMMOBILIEN_GESELLSCHAFT = 27738\nVENDOR_ID_TAUNIS_GMBH = 27739\nVENDOR_ID_ADFC_LV_BERLIN_EV = 27740\nVENDOR_ID_AAA_CAROLINAS = 27741\nVENDOR_ID_FLYING_HORSE_STUDIOS = 27742\nVENDOR_ID_SHANEY = 27743\nVENDOR_ID_MAJIK_NETWORKS_INC = 27744\nVENDOR_ID_4STEP_LTD = 27745\nVENDOR_ID_THE_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY = 27746\nVENDOR_ID_CAMINO_MO = 27747\nVENDOR_ID_CANON_KOREA_BUSINESS_SOLUTIONS_INC = 27748\nVENDOR_ID_STENNIS_INSTITUTE_OF_GOVERNMENT = 27749\nVENDOR_ID_GOODSOFTWARELAB_CO_LTD = 27750\nVENDOR_ID_FIREFLY_FZ_LLC = 27751\nVENDOR_ID_4A_CONSULTING_AB = 27752\nVENDOR_ID_NUCLEO_OPERACIONAL_PARA_A_SOCIEDADE_DE_INFORMAO_NOSI = 27753\nVENDOR_ID_AFFINITE_CORPORATION = 27754\nVENDOR_ID_FIVERUNS = 27755\nVENDOR_ID_RENAISSOFT_INC = 27756\nVENDOR_ID_SOLIS_ENERGY_INC = 27757\nVENDOR_ID_SERVICESOFT_SDN_BHD = 27758\nVENDOR_ID_SENSE8_UK_LTD = 27759\nVENDOR_ID_NOVO_MUNDO_MOVEIS_E_UTILIDADES_LTDA = 27760\nVENDOR_ID_SYSTEM_ONE_GMBH = 27761\nVENDOR_ID_FIXE_POST = 27762\nVENDOR_ID_ACCURATUS_CONSULTING_LLC = 27763\nVENDOR_ID_DONG_ENERGY_A_S = 27764\nVENDOR_ID_WELLTRANS_OE_TECHNOLOGY_CO_LTD = 27765\nVENDOR_ID_GRID_NET_INC = 27766\nVENDOR_ID_JAVASERVICE_CONSULTING = 27767\nVENDOR_ID_GESELLSCHAFT_FR_NETZWERK_UND_AUTOMATISIERUNGS_TECHNOLOGIE_MBH = 27768\nVENDOR_ID_UNIVERSIT_DE_PERPIGNAN_VIA_DOMITIA = 27769\nVENDOR_ID_MIS_CORPORATE_DEFENCE_SOLUTIONS = 27770\nVENDOR_ID_EVOLIS = 27771\nVENDOR_ID_SIDON_GMBH = 27772\nVENDOR_ID_ZABIUK = 27773\nVENDOR_ID_CENTURYTEL_INC = 27774\nVENDOR_ID_SITE_MONITORING_SOLUTIONS_INC = 27775\nVENDOR_ID_IDAC_LTD = 27776\nVENDOR_ID_AUPTYMA_CORPORATION = 27777\nVENDOR_ID_UNSTATE_EDUCATIONAL_ESTABLISHMENT_OF_ADDITIONAL_EDUCATION_EDUCATIONAL_CENTER_MESON = 27778\nVENDOR_ID_OFFRATEL = 27779\nVENDOR_ID_PUBLIC_SURPLUS_LLC = 27780\nVENDOR_ID_MINISTERIO_DE_EMPLEO_Y_SEGURIDAD_SOCIAL_FORMERLY_MINISTERIO_DE_TRABAJO_E_INMIGRACION = 27781\nVENDOR_ID_ONFIN = 27782\nVENDOR_ID_MULDER_INNOVA_BV = 27783\nVENDOR_ID_SENSATA_TECHNOLOGIES = 27784\nVENDOR_ID_VIALOGY = 27785\nVENDOR_ID_FIVE_MILE_CAPITAL_PARTNERS_LLC = 27786\nVENDOR_ID_COMPART_AG = 27787\nVENDOR_ID_ECO_WAREHOUSE = 27788\nVENDOR_ID_CATALINA_TECHNOLOGIES = 27789\nVENDOR_ID_S5_WIRELESS_INC = 27790\nVENDOR_ID_EMOBILE_NETWORKS_INC = 27791\nVENDOR_ID_EDITURE_LTD = 27792\nVENDOR_ID_MYTHOFBUTTERFLYCOM = 27793\nVENDOR_ID_GENETEC_CORPORATION = 27794\nVENDOR_ID_GUARDIAN_EQUIPAMENTOS_ELETRONICOS_LTDA = 27795\nVENDOR_ID_EMBEDDED_CONTROL_LOGIC_CORP = 27796\nVENDOR_ID_NATA_INFO_LTD = 27797\nVENDOR_ID_SES_NEW_SKIES_BV = 27798\nVENDOR_ID_7ID_TECHNOLOGIES_GMBH = 27799\nVENDOR_ID_PKE_ELECTRONICS_AG = 27800\nVENDOR_ID_FEJER_MEGYEI_SZENT_GYORGY_HOSPITAL = 27801\nVENDOR_ID_NEXPLORE = 27802\nVENDOR_ID_HTH_CONSULTING_GMBH = 27803\nVENDOR_ID_BERNARD_MATTHEWS_FOODS_LTD = 27804\nVENDOR_ID_COMPAGNIA_ASSICURATRICE_UNIPOL_SPA = 27805\nVENDOR_ID_UNIVERSITY_OF_MALTA = 27806\nVENDOR_ID_HAWA_AG = 27807\nVENDOR_ID_SKELVISION_SARL = 27808\nVENDOR_ID_LA_MAMMA_IND_DE_ALIMENTOS_LTDA = 27809\nVENDOR_ID_QOVO_SYSTEMS = 27810\nVENDOR_ID_ELLSWORTH_SCHOOL_SYSTEM = 27811\nVENDOR_ID_VOIPDS_VOICE_OVER_IP_DIRECTORY_SERVICES = 27812\nVENDOR_ID_LINUX_ONCOM = 27813\nVENDOR_ID_CHIANG_FAMILY = 27814\nVENDOR_ID_ADVANCED_UNIBYTE_GMBH = 27815\nVENDOR_ID_WES_POWER_TECHNOLOGY_INC = 27816\nVENDOR_ID_THORCOM_SYSTEMS_LTD = 27817\nVENDOR_ID_VAPO_OY = 27818\nVENDOR_ID_CALAVERAS_INTERNET = 27819\nVENDOR_ID_121MEDIA_INC = 27820\nVENDOR_ID_UNIHOST_PARTNERSHIP = 27821\nVENDOR_ID_COMTECH_MOBILE_DATACOM = 27822\nVENDOR_ID_MARIENFELD_MULTIMEDIA_GMBH = 27823\nVENDOR_ID_RENZOO_LTD = 27824\nVENDOR_ID_BATTERY_FORCE_LTD = 27825\nVENDOR_ID_BHARAT_FORGE_KILSTA_AB = 27826\nVENDOR_ID_I_SOLUTIONS_AB = 27827\nVENDOR_ID_ST_PAULS_CARDIAC_ELECTROPHYSIOLOGY_LTD = 27828\nVENDOR_ID_MIRA_NETWORKS_PTY_LTD = 27829\nVENDOR_ID_EPITIRO_LTD = 27830\nVENDOR_ID_ITEXIS_SARL = 27831\nVENDOR_ID_THOMAS_BAUER = 27832\nVENDOR_ID_BIZVOX_CONSULTORIA_E_TECNOLOGIA_DE_VOZ_LTDA = 27833\nVENDOR_ID_CONSUMERS_ENERGY_CORPORATION = 27834\nVENDOR_ID_GEMSTAR_TV_GUIDE_INTERNATIONAL_INC = 27835\nVENDOR_ID_JAG_STANGCH = 27836\nVENDOR_ID_HANDREAMNET = 27837\nVENDOR_ID_HOST_GRAD_INC = 27838\nVENDOR_ID_MARKUS_BOAS = 27839\nVENDOR_ID_POLYGON_2 = 27840\nVENDOR_ID_IP_NETWORKS_LTD = 27841\nVENDOR_ID_KLEBANOV = 27842\nVENDOR_ID_INTERNET_COMPUTING_SECURITY_LABORATORY = 27843\nVENDOR_ID_IVEC = 27844\nVENDOR_ID_NETCUBE_TECHNOLOGIESINC = 27845\nVENDOR_ID_PRILL_TECNOLOGIA_LTDA = 27846\nVENDOR_ID_VIRTENSYS_LTD = 27847\nVENDOR_ID_ITRON_GMBH_FORMERLY_ACTARIS_GASZAEHLERBAU_GMBH = 27848\nVENDOR_ID_AMERICAN_RESEARCH_INSTITUTE = 27849\nVENDOR_ID_LIQUIDXSTREAM_SYSTEMS_INC = 27850\nVENDOR_ID_VIDEO_FURNACE_INC = 27851\nVENDOR_ID_GUANGZHOU_ZHIYUAN_ELECTRONIC_COLTD = 27852\nVENDOR_ID_MCONSULTANCY = 27853\nVENDOR_ID_PETR_KUTALEK = 27854\nVENDOR_ID_INTERACTIONS_CORPORATION = 27855\nVENDOR_ID_THE_COUNCIL_OF_AUSTRALIAN_UNIVERSITY_DIRECTORS_OF_INFORMATION_TECHNOLOGY_FORMERLY_AUSTRALIAN_ACCESS_FEDERATION = 27856\nVENDOR_ID_J_GORDON_ELECTRONIC_DESIGN = 27857\nVENDOR_ID_UNIVERSITY_OF_DELHI = 27858\nVENDOR_ID_RAPID_INFORMATION_COMMUNICATION_CO_LTD = 27859\nVENDOR_ID_DMS_GROUP = 27860\nVENDOR_ID_FILS_COMMUNICATIONS_LTD = 27861\nVENDOR_ID_ATNOC_CORN_ZAUNER_OEG = 27862\nVENDOR_ID_DSR_COMMUNICATIONS_PTY_LTD = 27863\nVENDOR_ID_VOCEL_INC = 27864\nVENDOR_ID_TELLVOX_SA = 27865\nVENDOR_ID_LOGICTEC = 27866\nVENDOR_ID_ENTIC_SERVICES = 27867\nVENDOR_ID_GUARDTIME_AS = 27868\nVENDOR_ID_MICROPROCESSADOR_SISTEMAS_DIGITAIS_SA = 27869\nVENDOR_ID_HOOGHUIS_LYCEUM = 27870\nVENDOR_ID_SHEE_CONSULTANTS = 27871\nVENDOR_ID_FPT_CORPORATION = 27872\nVENDOR_ID_THE_BRIDGEMAN_ART_LIBRARY_LTD = 27873\nVENDOR_ID_EUROTEL_SPA = 27874\nVENDOR_ID_ZENULTA_LTD = 27875\nVENDOR_ID_RESPONSFABRIKKEN_SERVIOS_DE_TELECOMUNICAES_LTDA = 27876\nVENDOR_ID_BLUSTAFF_SPA = 27877\nVENDOR_ID_AGENOS_GMBH = 27878\nVENDOR_ID_CTDI_NETHOUSE_SERVICES_GMBH = 27879\nVENDOR_ID_FREESWITCH = 27880\nVENDOR_ID_KCS_DIGITAL_INC = 27881\nVENDOR_ID_PURYEAR_INFORMATION_TECHNOLOGY_LLC = 27882\nVENDOR_ID_EXTENSION7 = 27883\nVENDOR_ID_DOM_FINANSOWY_QS = 27884\nVENDOR_ID_NATIONAL_CITY_CORPORATION = 27885\nVENDOR_ID_BLACKNIGHT_INTERNET_SOLUTIONS_LTD = 27886\nVENDOR_ID_TUI_NET = 27887\nVENDOR_ID_AXESNETWORK_SOLUTIONS_INC = 27888\nVENDOR_ID_BEIJING_HUAMEI_NETWAVE_TECHNOLOGY_COLTD = 27889\nVENDOR_ID_ROUNDBOX_INC = 27890\nVENDOR_ID_INTERCOMGI_ARGENTINA_SRL = 27891\nVENDOR_ID_NAVANEETHAN_SHENOY = 27892\nVENDOR_ID_DMS = 27893\nVENDOR_ID_CUBE_OPTICS_AG = 27894\nVENDOR_ID_ISHD_INLINE_SKATERHOCKEY_DEUTSCHLAND = 27895\nVENDOR_ID_HARPA_ITALIA_SRL = 27896\nVENDOR_ID_QSI_SRL = 27897\nVENDOR_ID_RAILOG_SPA = 27898\nVENDOR_ID_STC_RADUGA = 27899\nVENDOR_ID_IT_OPTICS_SA = 27900\nVENDOR_ID_PIER_29_NETWORKS_CC = 27901\nVENDOR_ID_IRIS_FGUP_PKP = 27902\nVENDOR_ID_INGENIEURBUERO_FUER_EDV_UND_NETZWERKTECHNIK_STEFAN_HARTMANN = 27903\nVENDOR_ID_SUNCORP_METWAY_LTD = 27904\nVENDOR_ID_UNIVERSITAET_WUERZBURG = 27905\nVENDOR_ID_COMMUNITY4YOU_GMBH = 27906\nVENDOR_ID_TVTV_SERVICES_A_BRANCH_OF_SONY_UNITED_KINGDOM_LTD = 27907\nVENDOR_ID_PROJECTS4WEBDE = 27908\nVENDOR_ID_LOGRHYTHM_INC = 27909\nVENDOR_ID_PRESTO_NETWORKS_INC = 27910\nVENDOR_ID_DDS_INC = 27911\nVENDOR_ID_MESSAGING_ARCHITECTS = 27912\nVENDOR_ID_THE_INTERNET_GROUP_NORTHLAND_LTD = 27913\nVENDOR_ID_IXCALL = 27914\nVENDOR_ID_THE_COMPUTER_CENTRE_FOR_ICELANDIC_SAVINGS_BANKS = 27915\nVENDOR_ID_NEC_PORTUGAL_SA = 27916\nVENDOR_ID_ATCO_I_TEK_INC = 27917\nVENDOR_ID_WILFRID_LAURIER_UNIVERSITY = 27918\nVENDOR_ID_LOTO_QUEBEC = 27919\nVENDOR_ID_VIEWTEL_CO_LTD = 27920\nVENDOR_ID_INFORMATION_AND_MATHEMATICAL_SCIENCE_LABORATORY_INC = 27921\nVENDOR_ID_TRIPOINT_CORPORATION_PTY_LTD = 27922\nVENDOR_ID_TRILLIAN_GMBH = 27923\nVENDOR_ID_TITOF3000ORG = 27924\nVENDOR_ID_CANON_OPHTHALMIC_TECHNOLOGIES_SP_Z_OO_FORMERLY_OPTOPOL_TECHNOLOGY_SA = 27925\nVENDOR_ID_FUTURE_VOICE_TECHNOLOGY = 27926\nVENDOR_ID_EVANGELISCHE_KLINIKEN_BONN_GGMBH = 27927\nVENDOR_ID_AYECKA_COMMUNICATION_SYSTEMS_LTD = 27928\nVENDOR_ID_TARCZYNSKINET = 27929\nVENDOR_ID_JUSTWARE_CORPORATION = 27930\nVENDOR_ID_GFI_ITALIA_SPA = 27931\nVENDOR_ID_LIGNUP_CORPORATION = 27932\nVENDOR_ID_NOVOTECNO_SL = 27933\nVENDOR_ID_COMPUTER_SCIENCE_CLUB = 27934\nVENDOR_ID_SIGILORG = 27935\nVENDOR_ID_PD_HOUSE = 27936\nVENDOR_ID_UTNOXIUM_SL = 27937\nVENDOR_ID_GNU_GATEKEEPER_PROJECT = 27938\nVENDOR_ID_INTELLECTRONIKA = 27939\nVENDOR_ID_STADTWERKE_MUENCHEN_GMBH = 27940\nVENDOR_ID_ELABORATA_PRODUTOS_E_TREINAMENTOS_DE_INFORMATICA_LTDA = 27941\nVENDOR_ID_STREDNI_PRUMYSLOVA_SKOLA_USTI_NAD_LABEM_STARA_99_PO = 27942\nVENDOR_ID_VIMPELCOM_LTD = 27943\nVENDOR_ID_3LEAF_NETWORKS = 27944\nVENDOR_ID_UPSYS = 27945\nVENDOR_ID_THOMASKOCHIT = 27946\nVENDOR_ID_GRIDLINE_COMMUNICATIONS_HOLDINGS_INC = 27947\nVENDOR_ID_CPM_LTD = 27948\nVENDOR_ID_C_ALEX_NORTH_KEYS = 27949\nVENDOR_ID_STERLING_CONSULTING_GROUP_INC = 27950\nVENDOR_ID_ISGENESIS_INC = 27951\nVENDOR_ID_GAZPROMBANK_CERTIFICATION_AUTHORITY = 27952\nVENDOR_ID_BITPLUS_GMBH = 27953\nVENDOR_ID_FLEXOFT_LTD = 27954\nVENDOR_ID_GRIDNODE = 27955\nVENDOR_ID_OPNATEL = 27956\nVENDOR_ID_RETTIG_ICC = 27957\nVENDOR_ID_WECOMM_LTD = 27958\nVENDOR_ID_INTERNATIONAL_POWER_SWITCH_APS = 27959\nVENDOR_ID_E_BUSINESS_RESILIENCE_CENTRE = 27960\nVENDOR_ID_TRIBUNAL_DE_JUSTICA_DE_SANTA_CATARINA = 27961\nVENDOR_ID_DEMONHOST_INC = 27962\nVENDOR_ID_WESTEC_INTERACTIVE_SECURITY = 27963\nVENDOR_ID_COMMUGEN_LTD = 27964\nVENDOR_ID_SCRIBE_TECHNOLOGY_INC = 27965\nVENDOR_ID_CITIWAY_TECHNOLOGY_COLTD = 27966\nVENDOR_ID_APNIC_PTY_LTD = 27967\nVENDOR_ID_AKONIX_SYSTEMS_INC = 27968\nVENDOR_ID_MULTICAL_LTDA = 27969\nVENDOR_ID_KRYGLIKCOM = 27970\nVENDOR_ID_CHINA_INFOSEC_TECHNOLOGIES_COLTD = 27971\nVENDOR_ID_MAC_PAPERS_INC = 27972\nVENDOR_ID_OPEN_FINANCE_LLC = 27973\nVENDOR_ID_MCS_GROUPE = 27974\nVENDOR_ID_CENTEC_NETWORKS_INC = 27975\nVENDOR_ID_GEO_CONCEPT_SA = 27976\nVENDOR_ID_GENEX = 27977\nVENDOR_ID_STEWART_INFORMATION_SERVICE_CORPORATION = 27978\nVENDOR_ID_MET_SACRAMENTO_HIGH_SCHOOL = 27979\nVENDOR_ID_POSYSTECH_CO_LTD = 27980\nVENDOR_ID_INTRACHAOSNET = 27981\nVENDOR_ID_RTUNET_PTY_LTD = 27982\nVENDOR_ID_TECHGUARD_SECURITY_LLC = 27983\nVENDOR_ID_MSBC_PTY_LIMITED = 27984\nVENDOR_ID_SWINBURNE_UNIVERSITY_OF_TECHNOLOGY = 27985\nVENDOR_ID_AVONACO_SYSTEMS_INC = 27986\nVENDOR_ID_DATAACCESS_INC = 27987\nVENDOR_ID_TOPFIELD_CO_LTD = 27988\nVENDOR_ID_NEPRO_JAPAN_CO_LTD = 27989\nVENDOR_ID_LTD_AVTOR = 27990\nVENDOR_ID_MEDIA_LAYERS_INC = 27991\nVENDOR_ID_ENDESA_NETWORK_FACTORY_SLU = 27992\nVENDOR_ID_VIGINTOS_ELEKTRONIKA = 27993\nVENDOR_ID_XUNTA_DE_GALICIA_CONSELLERIA_DE_INNOVACIN_E_INDUSTRIA_DIRECCIN_XERAL_DE_PROMOCION_INDUSTRIAL_E_S = 27994\nVENDOR_ID_FORTH_CORPORATION_PUBLIC_COMPANY_LIMITED = 27995\nVENDOR_ID_ENTORNO_DIGITAL = 27996\nVENDOR_ID_ME_ON_TV = 27997\nVENDOR_ID_TRIPLE_IT = 27998\nVENDOR_ID_TREPESCH_GMBH = 27999\nVENDOR_ID_APTIVATE_LTD = 28000\nVENDOR_ID_TUFTS_ASSOCIATED_HEALTH_PLANS_INC = 28001\nVENDOR_ID_THE_SOURCE = 28002\nVENDOR_ID_BENDER_FAMILY = 28003\nVENDOR_ID_MOBILETECH_AS = 28004\nVENDOR_ID_LISSPRODUCTIONS = 28005\nVENDOR_ID_UNITED_SPACE_ALLIANCE = 28006\nVENDOR_ID_JASMIN_BUCHERT = 28007\nVENDOR_ID_CANU_GROUP_LLC = 28008\nVENDOR_ID_ACTIONCOACH_INC = 28009\nVENDOR_ID_KUMAMOTO_TECHNOLOGY_AND_INDUSTRY_FOUNDATION = 28010\nVENDOR_ID_NETNIC_CORPORATION = 28011\nVENDOR_ID_CHANNELSOFT_BEIJING_TECHNOLOGY_COLTD = 28012\nVENDOR_ID_PHOTOBUCKET_INC = 28013\nVENDOR_ID_BROADVOX_GMBH = 28014\nVENDOR_ID_METROCOM_CORPORATION = 28015\nVENDOR_ID_D_CUBE_RESOURCE = 28016\nVENDOR_ID_TEKUSO_H_KAELBER = 28017\nVENDOR_ID_NETJFWATCHER = 28018\nVENDOR_ID_TRADEROOT_TECHNOLOGIES_PTY_LTD = 28019\nVENDOR_ID_TEFNET = 28020\nVENDOR_ID_TREVEDI_IT_CONSULTING_GMBH = 28021\nVENDOR_ID_VITALPHONE_SARL = 28022\nVENDOR_ID_VITALIX_SARL = 28023\nVENDOR_ID_PILOT_SYSTEMS = 28024\nVENDOR_ID_CAPITA_BUSINESS_SERVICES_LTD = 28025\nVENDOR_ID_HOSTBASKET = 28026\nVENDOR_ID_MOVICLIPS_SA = 28027\nVENDOR_ID_URQUHART_CONSULTANCY = 28028\nVENDOR_ID_MERA_SYSTEMS_INC = 28029\nVENDOR_ID_THE_SIDWELL_COMPANY = 28030\nVENDOR_ID_BRIGHTPROFILES_RESOURCES_LTD = 28031\nVENDOR_ID_CREATIO_S_R_O_FORMERLY_GENESYS_S_R_O = 28032\nVENDOR_ID_VERISOFT_CONSULTING_TECNOLOGIA_DA_INFORMAO_LTDA = 28033\nVENDOR_ID_BELKIN_LOGISTICS_INC = 28034\nVENDOR_ID_VENTURE_DATA_LLC = 28035\nVENDOR_ID_TALNET = 28036\nVENDOR_ID_IASO_PTY_LTD = 28037\nVENDOR_ID_TRIHARPSKEL_PRODUCTIONS = 28038\nVENDOR_ID_COMWAVE_TELECOM_INC = 28039\nVENDOR_ID_TECHNOLOGICAL_EDUCATIONAL_INSTITUTE_TEI_OF_CRETE = 28040\nVENDOR_ID_JACKPOTUKNET = 28041\nVENDOR_ID_KMK_SOLUTIONS = 28042\nVENDOR_ID_ALTORIAN_SYSTEMS_INC = 28043\nVENDOR_ID_TECOM_CO_LTD = 28044\nVENDOR_ID_URALSIB_FINANCIAL_CORPORATION = 28045\nVENDOR_ID_DISTRIBUTED_MANAGEMENT_SYTEMS_LTD = 28046\nVENDOR_ID_NOVABASE_SRL = 28047\nVENDOR_ID_PRESTO_PREKLADATELSKE_CENTRUM_SRO = 28048\nVENDOR_ID_MS2_GMBH = 28049\nVENDOR_ID_OXFORD_COMPUTER_GROUP_2005_LIMITED = 28050\nVENDOR_ID_ATLAS_IT = 28051\nVENDOR_ID_BOOMER_CONSULTING_INC = 28052\nVENDOR_ID_TERVELA_INC = 28053\nVENDOR_ID_TOWER_CLOUD_INC = 28054\nVENDOR_ID_BECK_DATENTECHNIK = 28055\nVENDOR_ID_JOJO = 28056\nVENDOR_ID_NEBUAD_INC = 28057\nVENDOR_ID_SNDI_SOCIT_NATIONALE_DE_DVELOPPEMENT_INFORMATIQUE = 28058\nVENDOR_ID_MOHAWK_SOFTWARE = 28059\nVENDOR_ID_TELAIRITY_INC = 28060\nVENDOR_ID_INTERZONE_ENTERTAINMENT_LLC = 28061\nVENDOR_ID_KEWEGO_SA = 28062\nVENDOR_ID_SANDISK_IL_LTD = 28063\nVENDOR_ID_OKTET_LABS_LTD = 28064\nVENDOR_ID_TRAVIAUSTRIA_DATENSERVICE_FR_REISE_UND_TOURISTIK_GMBH_CO_NFG_KG = 28065\nVENDOR_ID_INOMACOMP_SRO = 28066\nVENDOR_ID_SOFTCREATE_CO_LTD = 28067\nVENDOR_ID_CONNECTBLUE_AB = 28068\nVENDOR_ID_UNIVERSIDAD_DE_ANTIOQUIA = 28069\nVENDOR_ID_ILLERTECH_DATENSYSTEME_GBR = 28070\nVENDOR_ID_GENTIAE_CLINICAL_RESEARCH = 28071\nVENDOR_ID_ENGINE_YARD = 28072\nVENDOR_ID_GRACE_REFORMED_BAPTIST_CHURCH = 28073\nVENDOR_ID_RICU_LLC = 28074\nVENDOR_ID_SUPPORT_MY_SYSTEM_UK_LTD = 28075\nVENDOR_ID_RECOMMIND_INC = 28076\nVENDOR_ID_WISESPORT_HONG_KONG_LIMITED = 28077\nVENDOR_ID_GENOS_OPEN_SOURCE_SL = 28078\nVENDOR_ID_OPENSCALE_TECHNOLOGIES_GMBH = 28079\nVENDOR_ID_ISG_JOINT_STOCK_COMPANY = 28080\nVENDOR_ID_NEW_CASTLE_COMMUNITY_SCHOOL_CORPORATION = 28081\nVENDOR_ID_RDESIGN = 28082\nVENDOR_ID_SOSDG = 28083\nVENDOR_ID_POLK_MECHANICAL_COMPANY_LLC = 28084\nVENDOR_ID_STMIK_AKAKOM = 28085\nVENDOR_ID_UNIVERSITAET_PASSAU = 28086\nVENDOR_ID_ALBENTIA_SYSTEMS_SA = 28087\nVENDOR_ID_NEC_UNIFIED_SOLUTIONS = 28088\nVENDOR_ID_SENTRIGO_LTD = 28089\nVENDOR_ID_IAM_TECHNOLOGY_INC = 28090\nVENDOR_ID_THELESE_MANAGEMENT = 28091\nVENDOR_ID_COVELIGHT_SYSTEMS_INC = 28092\nVENDOR_ID_COLOMBIA_MOVIL = 28093\nVENDOR_ID_VOICEMAIL_ANYWHERE_INC = 28094\nVENDOR_ID_JPEO_JTRS = 28095\nVENDOR_ID_ROUTE1_SECURITY_CORP = 28096\nVENDOR_ID_ACKSYS = 28097\nVENDOR_ID_NATIONAL_INTERBANK_TRANSACTION_MANAGEMENT_AND_EXCHANGE_CO_LTD = 28098\nVENDOR_ID_PROCESSING_CENTER_CO_LTD = 28099\nVENDOR_ID_GROUPWHERE_CONSULTING_LLC = 28100\nVENDOR_ID_MIVAN_KIER_JOINT_VENTURE_LIMITED_NEWPARK_BUCHAREST = 28101\nVENDOR_ID_BARINGANET_GMBH = 28102\nVENDOR_ID_AUDIONICS_LTD = 28103\nVENDOR_ID_EVORAD = 28104\nVENDOR_ID_ARCELOR_BREMEN_GMBH = 28105\nVENDOR_ID_GEUTEBRUECK = 28106\nVENDOR_ID_LIANGJIANG_COMMUNICATIONS_SYSTEM_INC = 28107\nVENDOR_ID_HOMISCO_INC = 28108\nVENDOR_ID_ROZIS_BV = 28109\nVENDOR_ID_NEAR_INFINITY_CORPORATION = 28110\nVENDOR_ID_VALUEPOINT_NETWORKS_INC = 28111\nVENDOR_ID_PIONEER_BIBLE_TRANSLATORS = 28112\nVENDOR_ID_THAI_DIGITAL_ID_CO_LTD = 28113\nVENDOR_ID_QUIES_NET = 28114\nVENDOR_ID_SHENZHEN_OWONDER_TECH_INC = 28115\nVENDOR_ID_4_TUNE_GMBH = 28116\nVENDOR_ID_CLEAR_MEMO = 28117\nVENDOR_ID_COLDSPARK_INC = 28118\nVENDOR_ID_STEELWORKS_TECHNOLOGIES = 28119\nVENDOR_ID_PINACONO_SOFTWARE_STUDIO = 28120\nVENDOR_ID_HYPERBAND_NETWORKS_INC = 28121\nVENDOR_ID_OBJECTMASTERY_PTY_LTD = 28122\nVENDOR_ID_INTERMODUS_DOO = 28123\nVENDOR_ID_C_GROUP = 28124\nVENDOR_ID_TRINAPS = 28125\nVENDOR_ID_ERAMON_AG = 28126\nVENDOR_ID_COSSILYS_21 = 28127\nVENDOR_ID_CIT = 28128\nVENDOR_ID_CLEVERSAFE_INC = 28129\nVENDOR_ID_MICHATECH = 28130\nVENDOR_ID_IBRO = 28131\nVENDOR_ID_EMBARQ_HOLDINGS_COMPANY_LLC = 28132\nVENDOR_ID_INSIST = 28133\nVENDOR_ID_LOT_POLISH_AIRLINES = 28134\nVENDOR_ID_COMINFO_AS = 28135\nVENDOR_ID_DELTA_DORE_SA = 28136\nVENDOR_ID_NXP_SEMICONDUCTORS_BV = 28137\nVENDOR_ID_ICEPEAK_AB = 28138\nVENDOR_ID_HRVATSKE_TELEKOMUNIKACIJE_DD = 28139\nVENDOR_ID_IT_GAMES_COMERCIO_E_SERVICOS_DE_INFORMATICA_LTDA = 28140\nVENDOR_ID_CEDAROPENACCOUNTS = 28141\nVENDOR_ID_NAUTEL_LIMITED = 28142\nVENDOR_ID_ALTAIGAZPROM = 28143\nVENDOR_ID_TRILUS_DOO = 28144\nVENDOR_ID_ORIGENIS_GMBH = 28145\nVENDOR_ID_FITZPATRICK_ENTERPRISE_OID = 28146\nVENDOR_ID_ARGON_ST = 28147\nVENDOR_ID_SAINT_PAUL_LUXEMBOURG_SA = 28148\nVENDOR_ID_RBAS = 28149\nVENDOR_ID_IMS_GLOBAL_LEARNING_CONSORTIUM_INC = 28150\nVENDOR_ID_BLUEPOINT_DATA_INC = 28151\nVENDOR_ID_PALO_ALTO_SOFTWARE_INC = 28152\nVENDOR_ID_NEWFOUND_COMMUNICATIONS_INC = 28153\nVENDOR_ID_LATTECH_SYSTEMS_PTY_LTD = 28154\nVENDOR_ID_COMPUTER_NETWORK_SOLUTIONS_LLC = 28155\nVENDOR_ID_REVEREDATA_LLC = 28156\nVENDOR_ID_OCTON_TECHNOLOGYSHANGHAI_LTD = 28157\nVENDOR_ID_GREAT_SOFTWARE_LABORATORY_PVT_LTD = 28158\nVENDOR_ID_OOPS_DEVELOPMENT_ORGANIZATION = 28159\nVENDOR_ID_MOTOTECH_INC = 28160\nVENDOR_ID_ANZSOFT_CO_LTD = 28161\nVENDOR_ID_KAZINVESTBANK = 28162\nVENDOR_ID_BEIJING_INSTITUTE_OF_TECHNOLOGY = 28163\nVENDOR_ID_THINK_TUX = 28164\nVENDOR_ID_INTERPHARMDATA_SYSTEMS_PTY_LTD = 28165\nVENDOR_ID_WEBBED_FEET = 28166\nVENDOR_ID_ATIP_GMBH = 28167\nVENDOR_ID_NEXTLINK_TECHNOLOGIES_LLC = 28168\nVENDOR_ID_WORLD_TRADE_ORGANIZATION = 28169\nVENDOR_ID_SOUTH_AFRICAN_NATIONAL_BIOINFORMATICS_INSTITUTE_SANBI = 28170\nVENDOR_ID_CORPS_RHENANIA = 28171\nVENDOR_ID_BIBLIOTHEKSSERVICE_ZENTRUM_BADEN_WUERTTEMBERG = 28172\nVENDOR_ID_ADVANCED_CONTROL_SYSTEMS_DESIGN_INC = 28173\nVENDOR_ID_SOLID_STATE_LOGIC = 28174\nVENDOR_ID_GLENTECH_CONSULTING = 28175\nVENDOR_ID_ROCKPORT_PA_LLC = 28176\nVENDOR_ID_BUDDHADATA_CONSULTING_INC = 28177\nVENDOR_ID_INTERNET_SOFTWARE_SOLUTIONS = 28178\nVENDOR_ID_BANK_ZACHODNI_WBK_SA = 28179\nVENDOR_ID_CVRNJEK_LAGERLOGISTIK_GMBH = 28180\nVENDOR_ID_WHITESTEIN_TECHNOLOGIES_AG = 28181\nVENDOR_ID_MOBILE_VISIONS = 28182\nVENDOR_ID_MUNGERWARE = 28183\nVENDOR_ID_HAGENUK_MARINEKOMMUNIKATION_GMBH = 28184\nVENDOR_ID_ZZVCOM = 28185\nVENDOR_ID_SSA_GLOBAL_TECHNOLOGIES = 28186\nVENDOR_ID_UPTIME_POWER_SERVICES_INC = 28187\nVENDOR_ID_KIM_MINH_KAPLAN = 28188\nVENDOR_ID_INTELIVOX = 28189\nVENDOR_ID_GENOSCOPE_CENTRE_NATIONAL_DE_SQUENCAGE = 28190\nVENDOR_ID_JVS_DO_BRASIL_LTDA = 28191\nVENDOR_ID_DIGITALLYSIGN = 28192\nVENDOR_ID_WEBPRESSO = 28193\nVENDOR_ID_EXTERITY_LTD = 28194\nVENDOR_ID_SKY_ITALIA_SRL = 28195\nVENDOR_ID_BROADWARE_TECHNOLOGIES_INC = 28196\nVENDOR_ID_WICHITA_STATE_UNIVERSITY = 28197\nVENDOR_ID_SNC_LAVALIN_ENERGY_CONTROL_SYSTEMS_INC = 28198\nVENDOR_ID_KMEL = 28199\nVENDOR_ID_CBC_COMPANIES_INC = 28200\nVENDOR_ID_DBG_INC = 28201\nVENDOR_ID_ALBERT_BAUER_KG = 28202\nVENDOR_ID_LINUX_KERNEL_AUSTRIA = 28203\nVENDOR_ID_SYNERWAY = 28204\nVENDOR_ID_7_IP_PTY_LTD = 28205\nVENDOR_ID_IKB_DEUTSCHE_INDUSTRIEBANK_AG = 28206\nVENDOR_ID_ROCKFORD_IT_LIMITED = 28207\nVENDOR_ID_ACCURITE_TECHNOLOGIES_INC = 28208\nVENDOR_ID_UP_MOBILE_CORP = 28209\nVENDOR_ID_SUNROCKET_INC = 28210\nVENDOR_ID_EMERGENCY_RESPONSE_MANAGEMENT_SERVICES_INC = 28211\nVENDOR_ID_FARIISTA_LIMITED = 28212\nVENDOR_ID_OPEN_JOINT_STOCK_COMPANY_AGENCY_FOR_MORTGAGE_HOUSING_CREDITING = 28213\nVENDOR_ID_KERNEOS = 28214\nVENDOR_ID_3ROAM_SA = 28215\nVENDOR_ID_FINGERPOST_LTD = 28216\nVENDOR_ID_RADIANT_LOGIC_PTY_LTD = 28217\nVENDOR_ID_THE_MARF_RESEARCH_AND_DEVELOPMENT_GROUP = 28218\nVENDOR_ID_LIAM_SCHNEIDER_CONSULTING = 28219\nVENDOR_ID_BRIGHTHOUSE_NETWORKS = 28220\nVENDOR_ID_STABAT_SOLUTIONS_PTY_LTD = 28221\nVENDOR_ID_SPECTRUM_COMMUNICATIONS_FZE = 28222\nVENDOR_ID_QUARTO_SOFTWARE_GMBH = 28223\nVENDOR_ID_EFFICENS_SOFTWARE_LTD = 28224\nVENDOR_ID_OS_SECURITY_LTD = 28225\nVENDOR_ID_DIGIDIENSTEN = 28226\nVENDOR_ID_BTC_AD = 28227\nVENDOR_ID_WIFINETSRO = 28228\nVENDOR_ID_PHAROS_COMMUNICATIONS_LTD = 28229\nVENDOR_ID_FIDBACK_CRM_SERVICES = 28230\nVENDOR_ID_AM_FIRE_ELECTRONIC_SERVICES_INC = 28231\nVENDOR_ID_PRINCE_GEORGES_COMMUNITY_COLLEGE = 28232\nVENDOR_ID_ISERVE_LTD = 28233\nVENDOR_ID_CYPRESS_COMMUNICATIONS_INC = 28234\nVENDOR_ID_ELLIE_MAE_INC = 28235\nVENDOR_ID_MYSPACE_INC = 28236\nVENDOR_ID_CODERYTE_INC = 28237\nVENDOR_ID_ADE = 28238\nVENDOR_ID_UNIVERSITY_OF_THE_RYUKYUS = 28239\nVENDOR_ID_WAVELENGTH_COMMUNICATIONS_INC = 28240\nVENDOR_ID_RIDGERUN_LLC = 28241\nVENDOR_ID_ORATEL_PTY_LTD = 28242\nVENDOR_ID_PULSAR_INC = 28243\nVENDOR_ID_HAUS_AM_RGENDAMM = 28244\nVENDOR_ID_AGORUM_SOFTWARE_GMBH = 28245\nVENDOR_ID_TRUSTED_PEER_NETWORKS_INC = 28246\nVENDOR_ID_MAXIS_COMMUNICATIONS_BERHAD = 28247\nVENDOR_ID_NEWPORT_DEVELOPMENT_GROUP = 28248\nVENDOR_ID_EONAS_IT_BERATUNG_UND_ENTWICKLUNG_GMBH = 28249\nVENDOR_ID_ENERCONV_SRL = 28250\nVENDOR_ID_THE_CONSTITUTIONALIST_PARTY_OF_IRAN_CPI = 28251\nVENDOR_ID_INFORMATEC = 28252\nVENDOR_ID_SCIVIS_WISSENSCHAFTLICHE_BILDVERARBEITUNG_GMBH = 28253\nVENDOR_ID_COBS_AB = 28254\nVENDOR_ID_UNASSIGNED_33 = 28255\nVENDOR_ID_INFOGUARD_AG = 28256\nVENDOR_ID_NUTRICHEM_DITPHARMA_GMBH = 28257\nVENDOR_ID_EIDOSMEDIA_SPA = 28258\nVENDOR_ID_LANDESHAUPTSTADT_STUTTGART_FORMERLY_BW_TRUST_CA = 28259\nVENDOR_ID_PROGIWEB = 28260\nVENDOR_ID_PROFIFORMS_PROJEKT_GMBH = 28261\nVENDOR_ID_CHICK_FIL_A_INC = 28262\nVENDOR_ID_TOTAL_SPIN_BRASIL_SERVIOS_DE_TELECOMUNICAES_LTDA = 28263\nVENDOR_ID_CLINICARE_CORPORATION = 28264\nVENDOR_ID_FSB_FRSTER_SYSTEMBERATUNG = 28265\nVENDOR_ID_LA_SPECIALTIES_INC = 28266\nVENDOR_ID_CYBERTRON_CO_LTD = 28267\nVENDOR_ID_GLOBAL_RED_SOLUCOES_EM_SOFTWARE_LIVRE_LTDA = 28268\nVENDOR_ID_INSTITUTE_FOR_THEORITICAL_COMPUTER_SCIENCE_TSINGHUA_UNIVERSITY = 28269\nVENDOR_ID_GTEBORGS_HAMN_AB = 28270\nVENDOR_ID_HTBLUVA_MOEDLING = 28271\nVENDOR_ID_CONCURRENT_SYSTEMS_PTY_LTD = 28272\nVENDOR_ID_STARLING_ADVANCED_COMMUNICATIONS = 28273\nVENDOR_ID_MC_CONTROL_SRO = 28274\nVENDOR_ID_IOSAFE_INC = 28275\nVENDOR_ID_GALENO = 28276\nVENDOR_ID_LUCASPCOM = 28277\nVENDOR_ID_DINNOVAN = 28278\nVENDOR_ID_ROCKSTEADY_NETWORKS_LLC = 28279\nVENDOR_ID_GHL_SYSTEMS_BERHAD = 28280\nVENDOR_ID_SLING_MEDIA_INC = 28281\nVENDOR_ID_KRONOS_INC = 28282\nVENDOR_ID_MEDITECNIA_INNOVA_SL = 28283\nVENDOR_ID_ESTONIAN_EHEALTH_FOUNDATION = 28284\nVENDOR_ID_AGES_STERREICHISCHE_AGENTUR_FR_GESUNDHEIT_UND_ERNHRUNGSSICHERHEIT_GMBH = 28285\nVENDOR_ID_DAON = 28286\nVENDOR_ID_OPTIUM_CORPORATION = 28287\nVENDOR_ID_LIGHTRAIL_INC = 28288\nVENDOR_ID_WHISPERITLOUD_LLC = 28289\nVENDOR_ID_XAWARE_INC = 28290\nVENDOR_ID_NAVAL_POSTGRADUATE_SCHOOL_CENTER_FOR_NETWORK_INNOVATION_AND_EXPERIMENTATION = 28291\nVENDOR_ID_STEPSTONE_TECHNOLOGIES_INC = 28292\nVENDOR_ID_JULONG_SCI_TECH_CO_LTD = 28293\nVENDOR_ID_INSTITUTO_RECONCAVO_DE_TECNOLOGIA = 28294\nVENDOR_ID_GAINSPAN_CORPORATION = 28295\nVENDOR_ID_VON_KARMAN_INSTITUUT_VOOR_STROMINGSDYNAMICA_IVZW = 28296\nVENDOR_ID_LUBLIN_TECHNICAL_UNIVERSITY = 28297\nVENDOR_ID_INFONL_HF_BV = 28298\nVENDOR_ID_UNIXGARAGECOM = 28299\nVENDOR_ID_MIRACLE_TV_CORPORATION = 28300\nVENDOR_ID_ONERA = 28301\nVENDOR_ID_ONE_COMMERCE_INTERNATIONAL_CORPORATION = 28302\nVENDOR_ID_CR_ENTERPRISE_BUSINESS_SERVICES = 28303\nVENDOR_ID_NEXCAN_SOLUTIONS = 28304\nVENDOR_ID_UNIVERSITAS_ISLAM_INDONESIA = 28305\nVENDOR_ID_FOERDERVEREIN_BUERGERNETZ_ULM_NEU_ULM_EV = 28306\nVENDOR_ID_POSTPATH_INC = 28307\nVENDOR_ID_ZARAGOZA_NETWORK_MANAGEMENT_RESEARCH_GROUP = 28308\nVENDOR_ID_STATRAD_LLC_FORMERLY_STAT_RADIOLOGY_MEDICAL_CORP = 28309\nVENDOR_ID_CENTER_FOR_COMPUTATIONAL_BIOLOGY_AND_BIOINFORMATICS = 28310\nVENDOR_ID_TECHNOGAMA_LTD = 28311\nVENDOR_ID_PENSON_GHCO = 28312\nVENDOR_ID_LANTIC_SYSTEMS_A_S = 28313\nVENDOR_ID_ARIESCOMMERCE_LTD = 28314\nVENDOR_ID_NEOLOGY_PTY_LTD = 28315\nVENDOR_ID_BRANDEN_INC = 28316\nVENDOR_ID_BORRAN_TECHNOLOGIES_INC = 28317\nVENDOR_ID_ACCELINK_TECHNOLOGIES_COLTD = 28318\nVENDOR_ID_IMIMOBILE_PRIVATE_LIMITED = 28319\nVENDOR_ID_GEOTECHMIN_OOD = 28320\nVENDOR_ID_ONIONTECH_CO_LTD = 28321\nVENDOR_ID_THOMSON_STS = 28322\nVENDOR_ID_CENTRAL_EUROPEAN_INTERNATIONAL_BANK_LTD = 28323\nVENDOR_ID_3PLE_MEDIA_BV = 28324\nVENDOR_ID_UNDERGROUND_8_SECURE_COMPUTING_GMBH = 28325\nVENDOR_ID_KO_SYS = 28326\nVENDOR_ID_HARRY_DAVID_OPERATIONS_CORP = 28327\nVENDOR_ID_BAYERISCHER_RUNDFUNK = 28328\nVENDOR_ID_BASE_TECHNOLOGIES_INC = 28329\nVENDOR_ID_MESHDYNAMICS_INC = 28330\nVENDOR_ID_SMILEY_MEDIA_INC = 28331\nVENDOR_ID_BRINKS_HOME_SECURITY = 28332\nVENDOR_ID_SIMON_NIECHZIAL_EDV_DIENSTLEISTUNGEN = 28333\nVENDOR_ID_SIEMENS_A_S_FORMERLY_PULZ8_COMMUNICATIONS_APS = 28334\nVENDOR_ID_XWORKS_NZ_LIMITED = 28335\nVENDOR_ID_VOXEO = 28336\nVENDOR_ID_ALBATRON_SRL = 28337\nVENDOR_ID_MUSHYPEA_INDUSTRIES = 28338\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_PAR = 28339\nVENDOR_ID_ISEEK_COMMUNICATIONS_PTY_LTD = 28340\nVENDOR_ID_CIVILOGIX_INC = 28341\nVENDOR_ID_WHITLEY_COLLEGE_THE_BAPTIST_COLLEGE_OF_VICTORIA = 28342\nVENDOR_ID_ROGERS_WIRELESS_OSS = 28343\nVENDOR_ID_DESKNET_INC = 28344\nVENDOR_ID_SFC_COLTD = 28345\nVENDOR_ID_DUPLEX_SECURE_LTD = 28346\nVENDOR_ID_SAMURAIWORKS = 28347\nVENDOR_ID_PIMP_MY_PROXY = 28348\nVENDOR_ID_PT_BANK_NEGARA_INDONESIA_TBK = 28349\nVENDOR_ID_SHENZHEN_FIRST_MILE_COMMUNICATIONS_LTD = 28350\nVENDOR_ID_VIMICRO_CORPORATION = 28351\nVENDOR_ID_MAXCOM = 28352\nVENDOR_ID_VITAL_IMAGES_INC = 28353\nVENDOR_ID_BCD_TRAVEL = 28354\nVENDOR_ID_PROMSVYAZBANK_OJSC = 28355\nVENDOR_ID_MYWAVE_INTERNETDIENSTLEISTUNGS_AG = 28356\nVENDOR_ID_RESEARCH_INSTITUTE_OF_CHINA_MOBILE = 28357\nVENDOR_ID_AK_IT_SERVICES = 28358\nVENDOR_ID_SIMULINA_GMBH = 28359\nVENDOR_ID_IMPI_LINUX_PTY_LTD = 28360\nVENDOR_ID_CRANIX_ENGINEERING_CO_LTD = 28361\nVENDOR_ID_LM2_CONSULTING_GMBH = 28362\nVENDOR_ID_BYTEC_BODRY_TECHNOLOGY_GMBH = 28363\nVENDOR_ID_WIDESOLUTIONSIT_SRL = 28364\nVENDOR_ID_ING_BUERO_DR_PLESNIK_GMBH = 28365\nVENDOR_ID_HOSTBASE = 28366\nVENDOR_ID_PROCURE_PERSONALMANAGEMENT_GMBH = 28367\nVENDOR_ID_GREEN_VALLEY_BV = 28368\nVENDOR_ID_INETLABS_DE = 28369\nVENDOR_ID_INFOTEH_DOO = 28370\nVENDOR_ID_NUTEL_COMMUNICATIONS_LTD = 28371\nVENDOR_ID_GRATKA_SP_Z_OO = 28372\nVENDOR_ID_CONVERSANT_SYSTEMS_PTY_LTD = 28373\nVENDOR_ID_OPENCHOICE_DI_DIEGO_ZACCARIOTTO = 28374\nVENDOR_ID_EB_ENTERPRISES_INC = 28375\nVENDOR_ID_MACROELITE_CORP = 28376\nVENDOR_ID_BIZZTOOLS_GMBH = 28377\nVENDOR_ID_PULSEWIDTH = 28378\nVENDOR_ID_OPEN_SYSTEMS_INTERNATIONAL_INC = 28379\nVENDOR_ID_01EDGE_TECHNOLOGIES = 28380\nVENDOR_ID_RED_LION_CONTROLS_N_TRON = 28381\nVENDOR_ID_AIRCELL_LLC = 28382\nVENDOR_ID_OPEN1X = 28383\nVENDOR_ID_PCONRAILS_LLC = 28384\nVENDOR_ID_COLUMBIA_WEATHER_SYSTEMS_INC = 28385\nVENDOR_ID_FUJIAN_FUJITSU_COMMUNICATION_SOFTWARE_CO_LTD = 28386\nVENDOR_ID_SVENUX = 28387\nVENDOR_ID_ITB_COMPUPHASE = 28388\nVENDOR_ID_SCHNEEWEIS = 28389\nVENDOR_ID_19POUCES = 28390\nVENDOR_ID_VILLA_CENTRUM_PTY_LTD = 28391\nVENDOR_ID_ECLIPSE_FOUNDATION_INC = 28392\nVENDOR_ID_THE_EMAKERS_DI_FABIO_VALLINO = 28393\nVENDOR_ID_MONKI = 28394\nVENDOR_ID_NEWMARKET_CORPORATION = 28395\nVENDOR_ID_EDOCEO_INC = 28396\nVENDOR_ID_BLUEGRASSNET_DEVELOPMENT = 28397\nVENDOR_ID_INVICTUS_NETWORKS_PTE_LTD = 28398\nVENDOR_ID_ACHOSCOM = 28399\nVENDOR_ID_CHRISTIAN_MAYER_BUERO_UND_EDV_SYSTEME = 28400\nVENDOR_ID_CIRTEC_AG = 28401\nVENDOR_ID_CONTEG = 28402\nVENDOR_ID_TOWN_COUNTRY_INDUSTRIES = 28403\nVENDOR_ID_CYNOSURE_RESEARCH = 28404\nVENDOR_ID_HUNT_BROTHERS_OF_LOUISIANA_LLC = 28405\nVENDOR_ID_SLOVENIJA_ONLINE_SIOL_INTERNET_DOO = 28406\nVENDOR_ID_BRADLEY_D_BROWN = 28407\nVENDOR_ID_RAMSYS_ZRT = 28408\nVENDOR_ID_PHOTONICS_INC = 28409\nVENDOR_ID_IPPON_TECHNOLOGIES = 28410\nVENDOR_ID_LUHANSK_TARAS_SHEVCHENKO_NATIONAL_PEDAGOGICAL_UNIVERSITY = 28411\nVENDOR_ID_COMTOOLS_GMBH = 28412\nVENDOR_ID_BRAZILIAN_MERCANTILE_AND_FUTURES_EXCHANGE = 28413\nVENDOR_ID_BUSINESS_SYSTEM_DEVELOPMENT_PTY_LTD = 28414\nVENDOR_ID_DIXIE_VALLEY_FARM = 28415\nVENDOR_ID_SMX = 28416\nVENDOR_ID_MLLER_WEDEL_GMBH = 28417\nVENDOR_ID_CORENET_LTD = 28418\nVENDOR_ID_TRILOGIC = 28419\nVENDOR_ID_OPUS_SOFTWARE = 28420\nVENDOR_ID_PARTIDO_SOCIALISTA_OBRERO_ESPAOL_PSOE = 28421\nVENDOR_ID_TOBIAS_SCHERBAUM = 28422\nVENDOR_ID_NUCOMM_INC = 28423\nVENDOR_ID_ROCKSHORE_LIMITED = 28424\nVENDOR_ID_EINSTEIN_INDUSTRIES_INC = 28425\nVENDOR_ID_SAINT_VINCENTS_HOSPITAL = 28426\nVENDOR_ID_UDICOM_AG = 28427\nVENDOR_ID_SECURE64 = 28428\nVENDOR_ID_NOVANETIC_INC = 28429\nVENDOR_ID_MACEDONIAN_ACADEMIC_AND_RESEARCH_NETWORK_MARNET = 28430\nVENDOR_ID_OPENAFS = 28431\nVENDOR_ID_NAVAJO_TECHNICAL_COLLEGE = 28432\nVENDOR_ID_JMEDVED = 28433\nVENDOR_ID_NHK_INTEGRATED_TECHNOLOGY_INC = 28434\nVENDOR_ID_ACT_SYSTEM_COLTD = 28435\nVENDOR_ID_CARNEGIE_LEARNING = 28436\nVENDOR_ID_TORSTEN_POHL_SOFTWARE_ENTWICKLUNG = 28437\nVENDOR_ID_RYBEZAHL = 28438\nVENDOR_ID_TRADESOFT_TECHNOLOGIES_SRL = 28439\nVENDOR_ID_IMPULSE_LTD = 28440\nVENDOR_ID_SJLAND_THYSELIUS = 28441\nVENDOR_ID_RPH_CONSULTING = 28442\nVENDOR_ID_GLOBAL_TRADER = 28443\nVENDOR_ID_DIRATEL_SLL = 28444\nVENDOR_ID_DEALERMADE = 28445\nVENDOR_ID_INSTITUTE_OF_MATHEMATICS_AND_COMPUTER_SCIENCE_UNIVERSITY_OF_LATVIA = 28446\nVENDOR_ID_KABONA_AB = 28447\nVENDOR_ID_FCS_FAIR_COMPUTER_SYSTEMS_GMBH = 28448\nVENDOR_ID_KOSKIORG = 28449\nVENDOR_ID_INTERNET_TEXOMA_INC = 28450\nVENDOR_ID_AMERICAN_WATER = 28451\nVENDOR_ID_ARABIAN_HORSE_ASSOCIATION = 28452\nVENDOR_ID_AMASOL_AG = 28453\nVENDOR_ID_WH4F = 28454\nVENDOR_ID_TRION_WORLD_NETWORK = 28455\nVENDOR_ID_QNIX_PTY_LTD = 28456\nVENDOR_ID_NTT_AMERICA_ENTERPRISE_HOSTING = 28457\nVENDOR_ID_NOKIA_SOLUTIONS_AND_NETWORKS_FORMERLY_NOKIA_SIEMENS_NETWORKS = 28458\nVENDOR_ID_ROGUE_ENGINEERING_INC = 28459\nVENDOR_ID_BENONE_BITENCOURT = 28460\nVENDOR_ID_MUTOH_INDUSTRIES_LTD = 28461\nVENDOR_ID_KNOXONE = 28462\nVENDOR_ID_BEGINUXORG = 28463\nVENDOR_ID_ON_AIR_NETWORKS = 28464\nVENDOR_ID_ECHOLA_SYSTEMS = 28465\nVENDOR_ID_MRLANECOM = 28466\nVENDOR_ID_PICELL_BV = 28467\nVENDOR_ID_FABIO_PRINA = 28468\nVENDOR_ID_CYBER_MEDIA_INDIA_LTD = 28469\nVENDOR_ID_ST_LAWRENCE_UNIVERSITY = 28470\nVENDOR_ID_BREMER_AG = 28471\nVENDOR_ID_TAPIRDATACOM = 28472\nVENDOR_ID_DAVONET_GMBH = 28473\nVENDOR_ID_PERISCOPTIC_PERCEPTIONS = 28474\nVENDOR_ID_AKADEMICKIE_CENTRUM_KLINICZNE_SZPITAL_AKADEMII_MEDYCZNEJ_W_GDANSKU = 28475\nVENDOR_ID_BWIN_INTERACTIVE_ENTERTAINMENT_AG = 28476\nVENDOR_ID_GLOBAL_TEL_LINK = 28477\nVENDOR_ID_IMPLICIT_MONITORING_SOLUTIONS_LP = 28478\nVENDOR_ID_COREMETRICS = 28479\nVENDOR_ID_TRAFFICCOM_INC = 28480\nVENDOR_ID_MICROIMAGING = 28481\nVENDOR_ID_TECHNOSPACE_SRL = 28482\nVENDOR_ID_SATILEON_NETWORKS = 28483\nVENDOR_ID_TTB_GROUP = 28484\nVENDOR_ID_IDTIC_CA = 28485\nVENDOR_ID_PETR_HUMMEL = 28486\nVENDOR_ID_DIGITAL_DYNAMICS_INC = 28487\nVENDOR_ID_ROBOC_COLTD = 28488\nVENDOR_ID_DEVCOM_SOLUTIONS_AB = 28489\nVENDOR_ID_KOSMOS_RY = 28490\nVENDOR_ID_MITENE_INTERNET_COLTD = 28491\nVENDOR_ID_MD_PREI_KRASKRIPT = 28492\nVENDOR_ID_NEXMEDIA_PTE_LTD = 28493\nVENDOR_ID_ORBIS_LUMEN = 28494\nVENDOR_ID_RODENSTOCK_GMBH = 28495\nVENDOR_ID_UNASSIGNED_34 = 28496\nVENDOR_ID_THE_CAVELL_GROUP = 28497\nVENDOR_ID_LINUXCON = 28498\nVENDOR_ID_DIFFERITAS_AS = 28499\nVENDOR_ID_TAGELIN = 28500\nVENDOR_ID_AMBISEA_TECHNOLOY_CORP_LTD = 28501\nVENDOR_ID_TELEIDEA_BV = 28502\nVENDOR_ID_UNIXUSER = 28503\nVENDOR_ID_PROCLOS = 28504\nVENDOR_ID_FACULDADE_METROPOLITANA_IESB = 28505\nVENDOR_ID_OPSERVICES_TECNOLOGIA_DA_INFORMACAO_S_A = 28506\nVENDOR_ID_GUDE_ANALOG_UND_DIGITALSYSTEME_GMBH = 28507\nVENDOR_ID_CUNHOL = 28508\nVENDOR_ID_FIFSOURCE = 28509\nVENDOR_ID_JOHN_S_CONNOR = 28510\nVENDOR_ID_DOWKEY_MICROWAVE = 28511\nVENDOR_ID_INTELLIBYTE_INC = 28512\nVENDOR_ID_VHV = 28513\nVENDOR_ID_ITALIACERCA_SA = 28514\nVENDOR_ID_GOERZ_IT_CONSULTING = 28515\nVENDOR_ID_BITGLUECOM = 28516\nVENDOR_ID_7KEY = 28517\nVENDOR_ID_CA_PARTNERS = 28518\nVENDOR_ID_NEC_FUKUI_LTD = 28519\nVENDOR_ID_NEXSYS_CONSULTING_PTY_LTD = 28520\nVENDOR_ID_JOPASANA_SOFTWARE_SYSTEMS_LTD = 28521\nVENDOR_ID_CANDIDO_KOMMUNIKATIONSELEKTRONIK = 28522\nVENDOR_ID_BACH_SYSTEMS_SRO = 28523\nVENDOR_ID_SYNTECH_SW_LTD = 28524\nVENDOR_ID_ACROSS_FINANCE_AS = 28525\nVENDOR_ID_CCS_CUSTOMER_COMMUNICATION_SYSTEMS_GMBH = 28526\nVENDOR_ID_ADEPTRA_INC = 28527\nVENDOR_ID_THEVISP = 28528\nVENDOR_ID_NETSOLUTIONS_PER_SAC = 28529\nVENDOR_ID_KHYPOEA = 28530\nVENDOR_ID_STEVEN_ROTH = 28531\nVENDOR_ID_AO_DAAZ = 28532\nVENDOR_ID_CYAN = 28533\nVENDOR_ID_CITY_OF_JACKSONVILLE = 28534\nVENDOR_ID_ALARMENGINE = 28535\nVENDOR_ID_ZAPPOSCOM = 28536\nVENDOR_ID_HEALTHSIGN_SL = 28537\nVENDOR_ID_FEDERATED_MUTUAL_INSURANCE = 28538\nVENDOR_ID_BUF_COMPAGNIE = 28539\nVENDOR_ID_WEISBERG_CONSULTING_INC = 28540\nVENDOR_ID_NET_DEMON = 28541\nVENDOR_ID_ALEPH_WEB_SERVICES = 28542\nVENDOR_ID_HOUSTON_BAPTIST_UNIVERSITY = 28543\nVENDOR_ID_CHILESCONSULTING = 28544\nVENDOR_ID_MG_INFOCOM_PVT_LTD = 28545\nVENDOR_ID_LAUBHEIMER = 28546\nVENDOR_ID_AUSTRALIAN_NATIONAL_UNIVERSITY = 28547\nVENDOR_ID_CAJA_DE_AHORROS_DE_SANTANDER_Y_CANTABRIA = 28548\nVENDOR_ID_PHYSISOFT = 28549\nVENDOR_ID_MARAND_DOO = 28550\nVENDOR_ID_WEIRD_SOLUTIONS_SWEDEN_AB = 28551\nVENDOR_ID_AVOCET_RT_LIMITED = 28552\nVENDOR_ID_SECUREPOINT_GMBH = 28553\nVENDOR_ID_CARE2 = 28554\nVENDOR_ID_MANHEIM_SERVICES_CORPORATION = 28555\nVENDOR_ID_LASTFM_LTD = 28556\nVENDOR_ID_HILLSTONE_NETWORKS_INC = 28557\nVENDOR_ID_KEYENCE_CORPORATION = 28558\nVENDOR_ID_UTAH_STATE_UNIVERSITY = 28559\nVENDOR_ID_ISERV = 28560\nVENDOR_ID_EHEALTHCONNECTICUT = 28561\nVENDOR_ID_FORTUNE_SYSTEM_INC = 28562\nVENDOR_ID_RFNC_VNIITF = 28563\nVENDOR_ID_NETWORK_SYNERGY_SERVICES_LLC = 28564\nVENDOR_ID_CARLEY_IP = 28565\nVENDOR_ID_SCACHE_SYSTEMS = 28566\nVENDOR_ID_MEGLA_GMBH = 28567\nVENDOR_ID_MICROLINK = 28568\nVENDOR_ID_ULTRARAD_CORPORATION = 28569\nVENDOR_ID_JUNTA_DE_CASTILLA_Y_LEON = 28570\nVENDOR_ID_HAFSLUND_ASA = 28571\nVENDOR_ID_AUDITIEL = 28572\nVENDOR_ID_ZONEKEY_INC = 28573\nVENDOR_ID_ICA_NET_SRL = 28574\nVENDOR_ID_MY_PORTALGR = 28575\nVENDOR_ID_LONGENT_LLC = 28576\nVENDOR_ID_WALNUT_VALLEY_UNIFIED_SCHOOL_DISTRICT = 28577\nVENDOR_ID_POWERLAND_COMPUTERS = 28578\nVENDOR_ID_NEW_WORLD_RESTAURANT_GROUP_INC = 28579\nVENDOR_ID_MOROSYSTEMS_SRO = 28580\nVENDOR_ID_WIRELESS_GENERATION_INC = 28581\nVENDOR_ID_LINUX_SYSTEMHAUS_SCHULZ = 28582\nVENDOR_ID_TANGENT_SYSTEMS_INC = 28583\nVENDOR_ID_ALLEGRO_NETWORKS_PTY_LTD = 28584\nVENDOR_ID_SNIDDLE_LLC = 28585\nVENDOR_ID_EATON_WIRELESS = 28586\nVENDOR_ID_MOBILESOFT_AUST_PTY_LIMITED = 28587\nVENDOR_ID_KAPLAN_SOFTWARE_LLC = 28588\nVENDOR_ID_IDERS_INC = 28589\nVENDOR_ID_EVC_INC = 28590\nVENDOR_ID_BEIJING_THINKOR_INFORMATION_TECHNOLOGIES_COLTD = 28591\nVENDOR_ID_ETERATION_AS = 28592\nVENDOR_ID_SCA_TIMBER_AB = 28593\nVENDOR_ID_EXGEN_NETWORKS_CO_LTD = 28594\nVENDOR_ID_PATRONAS_FINANCIAL_SYSTEMS_GMBH = 28595\nVENDOR_ID_CTE_DIGITAL_BROADCAST_SRL = 28596\nVENDOR_ID_NATIONAL_CENTRE_FOR_SCIENTIFIC_RESEARCH_DEMOKRITOS = 28597\nVENDOR_ID_SAMBERS_ITALIA_SPA = 28598\nVENDOR_ID_LANDMARK_COMMUNICATIONS_INC = 28599\nVENDOR_ID_HETRA_SECURE_SOLUTIONS_CORP = 28600\nVENDOR_ID_KNOW_IT_ALL = 28601\nVENDOR_ID_LOGICBOX_INC = 28602\nVENDOR_ID_MEDNETWORLDCOM_INC_FORMERLY_MEDNET_USA_INC = 28603\nVENDOR_ID_FACTORY_CREATIVE_STUDIO_LTD = 28604\nVENDOR_ID_LOGICALIS_GMBH_FORMERLY_MINTERS_GMBH = 28605\nVENDOR_ID_THEFIND_INC = 28606\nVENDOR_ID_COFORUM = 28607\nVENDOR_ID_TECHNOMONK_INDUSTRIES = 28608\nVENDOR_ID_SPONGELAVA_LTD = 28609\nVENDOR_ID_BENGT_MNSSON = 28610\nVENDOR_ID_COMMAGILITY_LTD = 28611\nVENDOR_ID_BOUNTIFUL_WIFI_LLC = 28612\nVENDOR_ID_PLASTEK_GROUP = 28613\nVENDOR_ID_6202110_CANADA_INC = 28614\nVENDOR_ID_ONDREJ_VLACH = 28615\nVENDOR_ID_ORPAK_SYSTEMS_LTD = 28616\nVENDOR_ID_KIORISOFT_LLC = 28617\nVENDOR_ID_LIGHTNING_SOURCE = 28618\nVENDOR_ID_UNIVERIS_CORPORATION = 28619\nVENDOR_ID_CSI_COMMUNICATION_SYSTEMS_INC_AG = 28620\nVENDOR_ID_HANDICAP_INTERNATIONAL = 28621\nVENDOR_ID_INTEGRATED_BUSINESS_SYSTEMS_SERVICES = 28622\nVENDOR_ID_PARI_NETWORKS = 28623\nVENDOR_ID_UNHFREENET = 28624\nVENDOR_ID_TAROTCOM = 28625\nVENDOR_ID_LASZLO_SYSTEMS_INC = 28626\nVENDOR_ID_HAMMERNET = 28627\nVENDOR_ID_TWISTED_STORAGE_INC = 28628\nVENDOR_ID_EVERRAISECOM = 28629\nVENDOR_ID_THE_ATLANTIS_CONSULTING = 28630\nVENDOR_ID_GOONSWARM = 28631\nVENDOR_ID_EUROMEDIA_SERVICE_GMBH = 28632\nVENDOR_ID_DATACENTR_LTD = 28633\nVENDOR_ID_COMAP_SPOL_S_R_O = 28634\nVENDOR_ID_FRAGNETICS_LLP = 28635\nVENDOR_ID_PHB_ELETRONICA_LTDA = 28636\nVENDOR_ID_DANSUPPORT = 28637\nVENDOR_ID_BELLOMY_RESEARCH_INC = 28638\nVENDOR_ID_TXCORE_INC = 28639\nVENDOR_ID_IT_LINUX = 28640\nVENDOR_ID_DELINKED = 28641\nVENDOR_ID_PROVEEDOR_DE_CERTIFICADOS_PROCERT_C_A = 28642\nVENDOR_ID_SUEIIDISS = 28643\nVENDOR_ID_GARY_THOMAS = 28644\nVENDOR_ID_TECHILA_TECHNOLOGIES_LTD = 28645\nVENDOR_ID_650MHZ = 28646\nVENDOR_ID_EKM4_LIMITED = 28647\nVENDOR_ID_SIATECH_INC = 28648\nVENDOR_ID_SIPGEAR_AB = 28649\nVENDOR_ID_AXISMOBILE = 28650\nVENDOR_ID_MODS = 28651\nVENDOR_ID_THE_HARTFORD = 28652\nVENDOR_ID_PHYSICIANS_GROUP_LLC = 28653\nVENDOR_ID_MOBILE_INTERACTIVE_GROUP = 28654\nVENDOR_ID_TIANJIN_OMUX_COMMUNICATION_TECHNOLOGY_COLTD = 28655\nVENDOR_ID_IPOLICY_NETWORKS_LIMITED = 28656\nVENDOR_ID_FONOKLIK_ILETISIM_HIZMETLERI_VE_TICARET_AS = 28657\nVENDOR_ID_ENTEGREAT_INC = 28658\nVENDOR_ID_THE_COOPER_CAIN_GROUP_INC = 28659\nVENDOR_ID_LINEAR_ACOUSTIC_INC = 28660\nVENDOR_ID_FOSTER = 28661\nVENDOR_ID_RICHARD_GAVENDA = 28662\nVENDOR_ID_ARADA_SYSTEMS = 28663\nVENDOR_ID_GIFTCS_LLC = 28664\nVENDOR_ID_VILLAGE_ISLAND_COLTD = 28665\nVENDOR_ID_ELAXYS_TECNOLOGIA = 28666\nVENDOR_ID_CONFUSATRONORG = 28667\nVENDOR_ID_DEVMACHCOM_LINUX_SUPPORT_SERVICES = 28668\nVENDOR_ID_BYCAST_INC = 28669\nVENDOR_ID_BLUE_CACAO_TECHNOLOGIES_SA_DE_CV = 28670\nVENDOR_ID_TORINS_LTD = 28671\nVENDOR_ID_COMMUNICATION_RESEARCH_LABS_SWEDEN_AB = 28672\nVENDOR_ID_CONSEIL_RGIONAL_DE_LORRAINE = 28673\nVENDOR_ID_KIRNEXUS_GMBH = 28674\nVENDOR_ID_PHORM_INC = 28675\nVENDOR_ID_WIREGATE_TECHNOLOGY = 28676\nVENDOR_ID_SISTEMAS_CATASTRALES_SA = 28677\nVENDOR_ID_VTK_GENT_VZW = 28678\nVENDOR_ID_MIDDLE_ATLANTIC_PRODUCTS = 28679\nVENDOR_ID_APPALACHIAN_REGIONAL_HEALTHCARE_INC = 28680\nVENDOR_ID_CRYSTAL_VISION_LTD = 28681\nVENDOR_ID_PLANETAS_MEDIOS_DIGITALES_SL = 28682\nVENDOR_ID_XEROX_DOCUMENT_SUPPLIES_EUROPE = 28683\nVENDOR_ID_KATE_KOM = 28684\nVENDOR_ID_CONSULTEM_DOO = 28685\nVENDOR_ID_THE_HERTZ_CORPORATION = 28686\nVENDOR_ID_INFOTRONIC = 28687\nVENDOR_ID_SAMWAY_ELECTRONIC_SRL = 28688\nVENDOR_ID_PC_SOLUTIONS_NET = 28689\nVENDOR_ID_MORRISEYUS = 28690\nVENDOR_ID_BLSTREAM_SP_Z_OO = 28691\nVENDOR_ID_KARMOY_KOMMUNE = 28692\nVENDOR_ID_COLIMBRA_BV = 28693\nVENDOR_ID_LEVIGO_HOLDING_GMBH = 28694\nVENDOR_ID_PHILADELPHIA_STOCK_EXCHANGE = 28695\nVENDOR_ID_ASQUARE_CONSULTING_GMBH = 28696\nVENDOR_ID_TRANSCOM_ENHANCED_SERVICES = 28697\nVENDOR_ID_TERADATA_CORPORATION = 28698\nVENDOR_ID_AUTO_CON_CORP = 28699\nVENDOR_ID_O_REGANORG = 28700\nVENDOR_ID_QUVIS_INC = 28701\nVENDOR_ID_CHARLES_STURT_UNIVERSITY = 28702\nVENDOR_ID_UNIVERSITY_OF_NEVADA_LAS_VEGAS = 28703\nVENDOR_ID_INTEGRATED_BROADCAST_INFORMATION_SYSTEMS_LTD = 28704\nVENDOR_ID_FURUNO_ELECTRIC_CO_LTD = 28705\nVENDOR_ID_AIRSERVICES_AUSTRALIA = 28706\nVENDOR_ID_NATIONAL_CANCER_CENTER = 28707\nVENDOR_ID_FUJIFILM_CORPORATION = 28708\nVENDOR_ID_UNIVERSIDADE_DE_BRASLIA = 28709\nVENDOR_ID_DWI_TUNGGAL_PUTRA_PRIVATE_LIMITED = 28710\nVENDOR_ID_DEPARTMENT_OF_ZOOLOGY_STOCKHOLM_UNIVERSITY = 28711\nVENDOR_ID_META_LEVEL_SOFTWARE_AG = 28712\nVENDOR_ID_GDC_TECHNOLOGY_LTD = 28713\nVENDOR_ID_SLITHY_TOVES = 28714\nVENDOR_ID_EDFINANCIAL_SERVICES = 28715\nVENDOR_ID_VIRTUAL_VIEWING_LTD = 28716\nVENDOR_ID_ZAVOD_K6_4 = 28717\nVENDOR_ID_MINISTRE_DE_LEDUCATION_NATIONALE_LUXEMBOURG = 28718\nVENDOR_ID_TARRANT_COUNTY = 28719\nVENDOR_ID_JAGUAR_SOFTWARE_DEVELOPMENT = 28720\nVENDOR_ID_AFFERNET_PTY_LTD = 28721\nVENDOR_ID_NETWORK_SYNERGY_PTY_LTD = 28722\nVENDOR_ID_GBCOM = 28723\nVENDOR_ID_ANNEAL_TECHNOLOGY_INC = 28724\nVENDOR_ID_ATONICS_INC = 28725\nVENDOR_ID_MFLO = 28726\nVENDOR_ID_EFUN_INTERNATIONAL_CORPORATION = 28727\nVENDOR_ID_JERICH_AUSTRIA_GMBH = 28728\nVENDOR_ID_GRD = 28729\nVENDOR_ID_NIX = 28730\nVENDOR_ID_EDGEWARE_AB = 28731\nVENDOR_ID_SECURE_LINKS = 28732\nVENDOR_ID_RONEXPRIM_SRL = 28733\nVENDOR_ID_AUTOMORPHEUSCOM_CORPORATION = 28734\nVENDOR_ID_AHOYA_NETWORKS_INC = 28735\nVENDOR_ID_ILOG = 28736\nVENDOR_ID_WEBAPPSJP = 28737\nVENDOR_ID_NIPPON_RAD_INC = 28738\nVENDOR_ID_IKA = 28739\nVENDOR_ID_NOVAL_NETWORKS = 28740\nVENDOR_ID_BANCO_POPULAR_Y_DE_DESARROLLO_COMUNAL = 28741\nVENDOR_ID_HORRY_ELECTRIC_COOPERATIVE_INC = 28742\nVENDOR_ID_GRESCHITZ_IT_SECURITY = 28743\nVENDOR_ID_COLLEGE_OF_MEDICINE_UNIVERSITY_OF_IBADAN_IBADAN = 28744\nVENDOR_ID_COMTEST_WIRELESS_SRL = 28745\nVENDOR_ID_THE_SWEDISH_NATIONAL_ARCHIVE_OF_RECORDED_SOUND_AND_MOVING_IMAGES = 28746\nVENDOR_ID_GIP_AG = 28747\nVENDOR_ID_LIBRESTREAM_TECHNOLOGIES_INC = 28748\nVENDOR_ID_TELIPHONE_INC = 28749\nVENDOR_ID_ISEDEV = 28750\nVENDOR_ID_4INFO_INC = 28751\nVENDOR_ID_WAE_TECHNOLOGIES_INC = 28752\nVENDOR_ID_EPS_CO_LTD = 28753\nVENDOR_ID_VINOTECH = 28754\nVENDOR_ID_COMWARE_GMBH = 28755\nVENDOR_ID_FACHHOCHSCHULE_WORMS = 28756\nVENDOR_ID_MU_DYNAMICS_FORMERLY_MU_SECURITY = 28757\nVENDOR_ID_CENTURUM_INC = 28758\nVENDOR_ID_SAVANT_TECNOLOGIA = 28759\nVENDOR_ID_ALBUS_INSEC = 28760\nVENDOR_ID_MDS_AMERICA_INC = 28761\nVENDOR_ID_UNWIRE = 28762\nVENDOR_ID_COCOZ = 28763\nVENDOR_ID_HOLLYWOOD_ENTERTAINMENT = 28764\nVENDOR_ID_SOUTH_BAY_COMMUNITY_NETWORK_INC = 28765\nVENDOR_ID_TRADESCAPE_INC = 28766\nVENDOR_ID_ENSEO_INC = 28767\nVENDOR_ID_MASTERCARD_WORLDWIDE = 28768\nVENDOR_ID_UNISON_NETWORK_LABS = 28769\nVENDOR_ID_RJ_LANDAU_PARTNERS_PLLC = 28770\nVENDOR_ID_WOLERYNET = 28771\nVENDOR_ID_BLUEBERRY_CONSULTANTS_LTD = 28772\nVENDOR_ID_PAPIER_RECYCLING_LOGISTIK_GMBH = 28773\nVENDOR_ID_IXARIS_SYSTEMS_LTD = 28774\nVENDOR_ID_EXPWAY = 28775\nVENDOR_ID_NEUF_CEGETEL = 28776\nVENDOR_ID_IGNOS_ESTUDIO_DE_INGENIERIA_SL = 28777\nVENDOR_ID_INTELLISTREAM = 28778\nVENDOR_ID_FOX_IT_BV = 28779\nVENDOR_ID_PATTERAN_INC = 28780\nVENDOR_ID_BOWDOIN_COLLEGE = 28781\nVENDOR_ID_EARMARK_MEDIA_SERVICES = 28782\nVENDOR_ID_VENAFI = 28783\nVENDOR_ID_CER_INTERNATIONAL_BV = 28784\nVENDOR_ID_MEDIUM_INC = 28785\nVENDOR_ID_VIDIOM_SYSTEMS_INC = 28786\nVENDOR_ID_FLEX_NETWORKS_INC = 28787\nVENDOR_ID_QUARANTAINENET_BV = 28788\nVENDOR_ID_CORY_ALBRECHT = 28789\nVENDOR_ID_POSLOVNO_INFORMACIONI_SISTEMI_DOO = 28790\nVENDOR_ID_SBI_JAPANNEXT_CO_INC = 28791\nVENDOR_ID_TOTALWIRE_SRL = 28792\nVENDOR_ID_NEPTUNY_SRL = 28793\nVENDOR_ID_SLASHCONCEPT_GBR = 28794\nVENDOR_ID_UPRESTO_INC = 28795\nVENDOR_ID_HABERST_INFRA_AS = 28796\nVENDOR_ID_SCBA_EXPERT_SERVICE_CENTRE = 28797\nVENDOR_ID_JSC_SBERCARD = 28798\nVENDOR_ID_THALES_SECURITY_SOLUTIONS_AND_SERVICES = 28799\nVENDOR_ID_QUALICONSULT_LTDA = 28800\nVENDOR_ID_FLEXSTAR_TECHNOLOGY_INC = 28801\nVENDOR_ID_SMS_TECNOLOGIA_ELETRONICA_LTDA = 28802\nVENDOR_ID_ISCAD_GMBH = 28803\nVENDOR_ID_LOCCITANE_SA = 28804\nVENDOR_ID_VISIONARY_NETWORKS_INC = 28805\nVENDOR_ID_NATIONWIDE_CHILDRENS_HOSPITAL_FORMERLY_CHILDRENS_HOSPITAL_INC = 28806\nVENDOR_ID_MULLINS_HOUSEHOLD = 28807\nVENDOR_ID_ACCOM_GMBH_CO_KG = 28808\nVENDOR_ID_NETWURK_LABS = 28809\nVENDOR_ID_DESAI_ELECTRONIC_TECHNOLOGY_SICHUAN_CO_LTD = 28810\nVENDOR_ID_SMS_SPOL_S_RO = 28811\nVENDOR_ID_DIGITALK_LIMITED = 28812\nVENDOR_ID_ALBERTA_PACIFIC_FOREST_INDUSTRIES_INC = 28813\nVENDOR_ID_HEALTHGRID = 28814\nVENDOR_ID_WEDJAA = 28815\nVENDOR_ID_SUPPLEE_TECHNOLOGIES = 28816\nVENDOR_ID_EXPLOREOS_INC = 28817\nVENDOR_ID_ST_JOHN_MEDICAL_CENTER = 28818\nVENDOR_ID_TITAN_CONSULTING_GROUP_INC = 28819\nVENDOR_ID_XUERONCOM = 28820\nVENDOR_ID_GREATWALL_SYSTEMS_INCORPORATED = 28821\nVENDOR_ID_ABE_ELETTRONICA_SPA = 28822\nVENDOR_ID_NETA_TECHNOLOGIES_INC = 28823\nVENDOR_ID_JPRAGMA = 28824\nVENDOR_ID_BUFETE_DE_SERVICIOS_INFORMATICOS_SA_DE_CV = 28825\nVENDOR_ID_INFINITE_INNOVATION_INC = 28826\nVENDOR_ID_TLH_SYSTEMS = 28827\nVENDOR_ID_OITA_COMPUTER_ENGINEERING_CONSULTING_LTD = 28828\nVENDOR_ID_BMST_CO_LTD = 28829\nVENDOR_ID_ALCON_TELECOMMUNICATIONS_CO_LTD = 28830\nVENDOR_ID_TURBOCONSULT = 28831\nVENDOR_ID_G_CLUSTER_LTD = 28832\nVENDOR_ID_LUFTHANSA_TECHNIK_AG = 28833\nVENDOR_ID_SURECLOUD = 28834\nVENDOR_ID_ACXSYS_BOTSWANA = 28835\nVENDOR_ID_BERTANA_SRL = 28836\nVENDOR_ID_MVP_HEALTH_PLAN = 28837\nVENDOR_ID_SCREENPC = 28838\nVENDOR_ID_ZEDX_INC = 28839\nVENDOR_ID_AVCORP_INDUSTRIES_INC = 28840\nVENDOR_ID_PHNIX_PACS_GMBH = 28841\nVENDOR_ID_GJALVES = 28842\nVENDOR_ID_DEKEYZER = 28843\nVENDOR_ID_CHANNEL_DYNAMIX = 28844\nVENDOR_ID_DIGITAL_OCULAR_NETWORKS_INC = 28845\nVENDOR_ID_UNIVERSIDAD_DE_MALAGA = 28846\nVENDOR_ID_DS_NETWORKS = 28847\nVENDOR_ID_GUANGZHOU_FRAMENET_TELECOMMUNICATION_TECHNOLOGIESCOLTD = 28848\nVENDOR_ID_PROFESSIONAL_PRODUCTS_INC = 28849\nVENDOR_ID_FELLTECH_LTD = 28850\nVENDOR_ID_TOPNORDIC_A_S = 28851\nVENDOR_ID_MICRO_INNOVATION_AG = 28852\nVENDOR_ID_FREUDENBERG_HOSTING_KG = 28853\nVENDOR_ID_OOO_BB_SYSTEMS = 28854\nVENDOR_ID_PRESCOM = 28855\nVENDOR_ID_CONCURRENT_THINKING_LTD = 28856\nVENDOR_ID_WORKING_TODAY_INC = 28857\nVENDOR_ID_PUBLIC_SERVICE_MUTUAL_INSURANCE_COMPANY = 28858\nVENDOR_ID_BIG_FISH_GAMES = 28859\nVENDOR_ID_GB_DEVELOPMENT = 28860\nVENDOR_ID_PROYECTO_CONECTATE_AL_CONOCIMIENTO = 28861\nVENDOR_ID_SIPCALLCOM_INC = 28862\nVENDOR_ID_OSS_INTEGRATORS_INC = 28863\nVENDOR_ID_COSMOFON_AD = 28864\nVENDOR_ID_ACHIEVO_DEUTSCHLAND_AG = 28865\nVENDOR_ID_TRENDNET_INC = 28866\nVENDOR_ID_PING_IDENTITY_CORPORATION = 28867\nVENDOR_ID_ANUBISNETWORKS = 28868\nVENDOR_ID_HOLLAENDERNET = 28869\nVENDOR_ID_HOGSKOLAN_I_GAVLE = 28870\nVENDOR_ID_PTER_SZCS = 28871\nVENDOR_ID_AGENCE_LANDAISE_POUR_LINFORMATIQUE = 28872\nVENDOR_ID_CHIP_XONIO_ONLINE_GMBH = 28873\nVENDOR_ID_SOLARFLARE_COMMUNICATIONS_INC = 28874\nVENDOR_ID_SECOM_CONSULTING = 28875\nVENDOR_ID_JORDAN_JORDAN = 28876\nVENDOR_ID_NRC_SYSTEMS_LTD = 28877\nVENDOR_ID_SEIKOSHA_INC = 28878\nVENDOR_ID_AMERICANASCOM = 28879\nVENDOR_ID_WESTONE_INFORMATION_INDUSTRY_INC = 28880\nVENDOR_ID_DSIGMA_LLC_FORMERLY_DCUBE_TECHNOLOGIES_LLC = 28881\nVENDOR_ID_MICHAEL_EISLER = 28882\nVENDOR_ID_TOMAS_BATA_UNIVERSITY_IN_ZLN = 28883\nVENDOR_ID_KUCKO = 28884\nVENDOR_ID_SPOLKA_INZYNIEROW_SIM_SP_Z_OO = 28885\nVENDOR_ID_OXEA_GROUP = 28886\nVENDOR_ID_LABSET = 28887\nVENDOR_ID_UXTECHNOLOGY_BV = 28888\nVENDOR_ID_NEMOQ_IBERICA_SA = 28889\nVENDOR_ID_ART_CENTER_COLLEGE_OF_DESIGN = 28890\nVENDOR_ID_COLLEGE_OF_DUNAUJVAROS_DUNAJVROSI_FISKOLA = 28891\nVENDOR_ID_EXOWEB = 28892\nVENDOR_ID_RIHOTEC_OY = 28893\nVENDOR_ID_MAXI_VIEW_HOLDINGS_LIMITED = 28894\nVENDOR_ID_CAISSE_NATIONALE_DE_SCURIT_SOCIALE_MAROC = 28895\nVENDOR_ID_BCC_GMBH = 28896\nVENDOR_ID_NSEC = 28897\nVENDOR_ID_SECURAPLANE_TECHNOLOGIES = 28898\nVENDOR_ID_DATASTARVEDNET = 28899\nVENDOR_ID_YASASHII_SYNDICATE = 28900\nVENDOR_ID_ENDICOTT_COLLEGE = 28901\nVENDOR_ID_ANHUI_UNIVERSITY_OF_TECHNOLOGY = 28902\nVENDOR_ID_INTERFAX = 28903\nVENDOR_ID_ARIUS_SOFTWARE = 28904\nVENDOR_ID_MESHLINX_WIRELESS_INC = 28905\nVENDOR_ID_CLUENET = 28906\nVENDOR_ID_VIASSOL_VIRTUAL_APPLIED_SCIENTIFIC_SOFTWARE_LABORATORYFORMERLY_VISSOL_VIRTUAL_SCIENTIFIC_SOFTWARE_LABORATORY = 28907\nVENDOR_ID_MUJIN_SYSTEMS_INC = 28908\nVENDOR_ID_4A_SECURER = 28909\nVENDOR_ID_ANSITALY = 28910\nVENDOR_ID_COMPFORT_MERIDIAN_POLSKA_SP_Z_OO = 28911\nVENDOR_ID_ZURIEL_LTD = 28912\nVENDOR_ID_BITTORRENT_INC = 28913\nVENDOR_ID_GE_TRANSPORTATION_SYSTEMS_GLOBAL_SIGNALING_LLC = 28914\nVENDOR_ID_TURTLESYSTEMS = 28915\nVENDOR_ID_INTEROP_INFORMATICA = 28916\nVENDOR_ID_COMTICA = 28917\nVENDOR_ID_INFOPRINT_SOLUTIONS_COMPANY = 28918\nVENDOR_ID_BORGHESIA_CONSULTING = 28919\nVENDOR_ID_BLAULINK_GBR = 28920\nVENDOR_ID_ANCHIVA_SYSTEMS_INC = 28921\nVENDOR_ID_CRESCENT_GROUP_LTD = 28922\nVENDOR_ID_LUMINATOR_HOLDING_LP = 28923\nVENDOR_ID_MEGATEL_INDUSTRIES_CORP = 28924\nVENDOR_ID_BIGLIST_INC = 28925\nVENDOR_ID_MITTELDEUTSCHER_RUNDFUNK = 28926\nVENDOR_ID_FIRST_MALLORCA = 28927\nVENDOR_ID_TAYLOR_FRANCIS_GROUP_LTD = 28928\nVENDOR_ID_RASKAT = 28929\nVENDOR_ID_KILOWATT_SA = 28930\nVENDOR_ID_MIKE_SOFTWARENETWORK_SRL = 28931\nVENDOR_ID_NAZERFARZAN = 28932\nVENDOR_ID_SENADO_DE_ESPAA = 28933\nVENDOR_ID_TICK_TRADING_SOFTWARE_AG = 28934\nVENDOR_ID_SACRED_HEART_COLLEGE = 28935\nVENDOR_ID_INFORMATION_TECHNOLOGY_LTDA = 28936\nVENDOR_ID_DASANTPS_INC = 28937\nVENDOR_ID_TAS_FRANCE = 28938\nVENDOR_ID_BREMEN_ONLINE_SERVICES_GMBH_CO_KG = 28939\nVENDOR_ID_IMP_TELEKOM_DD = 28940\nVENDOR_ID_NETWORK_SOLUTIONS_NORWAY_ASA = 28941\nVENDOR_ID_AMPERION_SOUTH_EAST = 28942\nVENDOR_ID_INTER_CLAMP_MANAGEMENT_AG = 28943\nVENDOR_ID_MEYER_ASSOCIATES_INC = 28944\nVENDOR_ID_NOME_CONSULTING_LTD = 28945\nVENDOR_ID_E_BAND_COMMUNICATIONS_CORP = 28946\nVENDOR_ID_TRILLENIUM_WORKS = 28947\nVENDOR_ID_VEEPEE = 28948\nVENDOR_ID_OWNAGE_INC = 28949\nVENDOR_ID_VIRTUAL_U_AT_UNION_COLLEGE = 28950\nVENDOR_ID_IP_FJARSKIPTI = 28951\nVENDOR_ID_CYPRESS_SOLUTIONS_INC = 28952\nVENDOR_ID_AINETEK_COLTD = 28953\nVENDOR_ID_AND_OR_LOGIC = 28954\nVENDOR_ID_9_TO_5_MAGIC = 28955\nVENDOR_ID_ALLEN_MARTIN_LTD = 28956\nVENDOR_ID_INSTITUT_FR_GRAPHISCHE_UND_PARALLELE_DATENVERARBEITUNG_UNIVERSITT_LINZ = 28957\nVENDOR_ID_SNAPIN_SOFTWARE_INC = 28958\nVENDOR_ID_FARGO_ELECTRONICS_INCORPORATED = 28959\nVENDOR_ID_RESOLUX = 28960\nVENDOR_ID_PIAX_PROJECT = 28961\nVENDOR_ID_DOWN_TO_EARTH_SYSTEMS = 28962\nVENDOR_ID_DEYEB = 28963\nVENDOR_ID_FUTBAG = 28964\nVENDOR_ID_KOSNET_EDV = 28965\nVENDOR_ID_37SIGNALS_LLC = 28966\nVENDOR_ID_OPTOSECURITY_INC = 28967\nVENDOR_ID_AFFINITIC_SPRL = 28968\nVENDOR_ID_DANA_KOCH = 28969\nVENDOR_ID_DIGITEC_SYSTEMS = 28970\nVENDOR_ID_INCONTECH_LTD = 28971\nVENDOR_ID_KEIO_UNIVERSITY = 28972\nVENDOR_ID_LVR_INFOKOM = 28973\nVENDOR_ID_BELARUSBANK = 28974\nVENDOR_ID_GSI_EUROPE_SL = 28975\nVENDOR_ID_INTERSYS_SISTEMAS_INTERACTIVOS = 28976\nVENDOR_ID_NOVUSEDGE = 28977\nVENDOR_ID_CANONICAL_LTD = 28978\nVENDOR_ID_MWGHENNNDO = 28979\nVENDOR_ID_LEIDEN_UNIVERSITY_FACULTY_OF_SCIENCE = 28980\nVENDOR_ID_TKRJASEK = 28981\nVENDOR_ID_PACHI = 28982\nVENDOR_ID_TECHBASE_SP_Z_OO = 28983\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_MATO_GROSSO_DO_SUL = 28984\nVENDOR_ID_STAPLES_INC = 28985\nVENDOR_ID_FNMS_PROJECT = 28986\nVENDOR_ID_MARSLDAP = 28987\nVENDOR_ID_ICANETIX_SOFTWARE_SYSTEMS_AND_CONSULTING_GMBH = 28988\nVENDOR_ID_SOCIEDAD_MUTUAL_SEGURO_DE_VIDA = 28989\nVENDOR_ID_PRIVATEMONITORING = 28990\nVENDOR_ID_GHZ_SOLUES_EM_INFORMATICA_DRACENA_LTDA_ME = 28991\nVENDOR_ID_AMERICAN_CENTURY_PROPRIETARY_HOLDINGS_INC = 28992\nVENDOR_ID_PCM_LLC_I = 28993\nVENDOR_ID_LIVESQUARE = 28994\nVENDOR_ID_DRESSER_WAYNE_DRESSER_INC = 28995\nVENDOR_ID_JAE_ENTERPRISES = 28996\nVENDOR_ID_SOUTH_CHINA_UNIVERSITY_OF_TECHNOLOGY = 28997\nVENDOR_ID_PINE_TREE_SYSTEMS = 28998\nVENDOR_ID_VOIBLE_COMMUNICATIONS_LTD = 28999\nVENDOR_ID_MARKUS_ALEXANDER_MATTH = 29000\nVENDOR_ID_TRISKEL_TELECOM_SL = 29001\nVENDOR_ID_PGGM = 29002\nVENDOR_ID_FIBERNET_INTERNATIONAL = 29003\nVENDOR_ID_LA_VOZ_DE_GALICIA = 29004\nVENDOR_ID_JOINT_STOCK_COMPANY_SCIENTIFIC_PRODUCTION_ENTERPRISE_ORBITA = 29005\nVENDOR_ID_VOCALINK_LIMITED = 29006\nVENDOR_ID_RD_SCANEX = 29007\nVENDOR_ID_KAYA_SOFTWARE_LLC = 29008\nVENDOR_ID_MIRTH_CORPORATION_FORMERLY_WEBREACH_INC = 29009\nVENDOR_ID_NATIONAL_BANK_OF_KUWAIT = 29010\nVENDOR_ID_HEBIS = 29011\nVENDOR_ID_QUALITY_TECHNOLOGY_SERVICES = 29012\nVENDOR_ID_TELDAT_SPJ_H_KRUSZYSKI_M_CICHOCKI = 29013\nVENDOR_ID_INTELLENGINE = 29014\nVENDOR_ID_KEITAI_GAMING_FORMERLY_TALLTELE = 29015\nVENDOR_ID_PROFESSIONAL_PARTNERSHIP_LTD = 29016\nVENDOR_ID_BUDA = 29017\nVENDOR_ID_NETWORK_SECURITY_SOLUTIONS_DOO = 29018\nVENDOR_ID_ACK_NETWORKS_INC = 29019\nVENDOR_ID_MARCO_ASPROMONTI = 29020\nVENDOR_ID_MUGLER_AG = 29021\nVENDOR_ID_DORSTEWITZ = 29022\nVENDOR_ID_FAMAF_FACULTAD_DE_MATEMATICA_ASTRONOMIA_Y_FSICA_UNIVERSIDAD_NACIONAL_DE_CORDOBA_ARGENTINA = 29023\nVENDOR_ID_OSERYS_SYSTMES = 29024\nVENDOR_ID_RECRO_NET_DOO = 29025\nVENDOR_ID_GUZMAN = 29026\nVENDOR_ID_NETFINITY_LTD = 29027\nVENDOR_ID_JERRY_CHAPMAN = 29028\nVENDOR_ID_ALTIERRE_CORPORATION = 29029\nVENDOR_ID_RINGIER_SLOVAKIA_AS = 29030\nVENDOR_ID_ILSC = 29031\nVENDOR_ID_CREATIVE_INDUSTRIES = 29032\nVENDOR_ID_4DK_TECHNOLOGIES_INC = 29033\nVENDOR_ID_COMMON_SENSE_IT_CONSULTING_GMBH = 29034\nVENDOR_ID_KYMZ_ONLINE_PAGE = 29035\nVENDOR_ID_CACI_INTERNATIONAL_INC = 29036\nVENDOR_ID_MOOL_INVEST_KFT = 29037\nVENDOR_ID_ICEGEL_KFT = 29038\nVENDOR_ID_OTIS_COLLEGE_OF_ART_AND_DESIGN = 29039\nVENDOR_ID_CX_COMPUTERS_CONSULTING_SRO = 29040\nVENDOR_ID_SMARTOFFICEBUILDING = 29041\nVENDOR_ID_TOPPAN = 29042\nVENDOR_ID_PEEKCLOPPENBURG_KG = 29043\nVENDOR_ID_DIGITAL_ALERT_SYSTEMS = 29044\nVENDOR_ID_CAMP_DRESSER_AND_MCKEE_INC = 29045\nVENDOR_ID_THE_BOSTON_CONSULTING_GROUP_INC = 29046\nVENDOR_ID_GIGAFIN_NETWORKS = 29047\nVENDOR_ID_VIANET_INTERNATIONAL_LTD = 29048\nVENDOR_ID_SICHUAN_XINHUA_WINSHARE_CHAINSTORE_COLTD = 29049\nVENDOR_ID_KORCETT_HOLDINGS_INC = 29050\nVENDOR_ID_DAIKON_INTEGRACION_Y_DESARROLLO_SL = 29051\nVENDOR_ID_DEFZONE_BV = 29052\nVENDOR_ID_INTELLIO_LTD = 29053\nVENDOR_ID_BLUEBELL_OPTICOM_LIMITED = 29054\nVENDOR_ID_AMERICAN_INTERNATIONAL_DISTRIBUTION_CORPORATION_INC = 29055\nVENDOR_ID_LOGICFISHORG = 29056\nVENDOR_ID_UNIVERSITAET_FUER_BODENKULTUR_WIEN_BOKU = 29057\nVENDOR_ID_NEOLOGY_CORPORATION = 29058\nVENDOR_ID_FAL_SOLUTIONS = 29059\nVENDOR_ID_SCHNAPPER_VISION_STUDIOS = 29060\nVENDOR_ID_AFORE_SOLUTIONS_INC = 29061\nVENDOR_ID_HEANET_LIMITED = 29062\nVENDOR_ID_PATRICK_MCDONNELL = 29063\nVENDOR_ID_ODDO_CIE = 29064\nVENDOR_ID_31337_HACKERS = 29065\nVENDOR_ID_ENOVATIA = 29066\nVENDOR_ID_THE_LOOP_COMMUNICATIONS = 29067\nVENDOR_ID_OPENSOURCE_TRAINING_RALF_SPENNEBERG = 29068\nVENDOR_ID_HARTMANNSOFT = 29069\nVENDOR_ID_CONVERSION_CO_LTD = 29070\nVENDOR_ID_ON_DEMAND_MICROELECTRONICS_AG = 29071\nVENDOR_ID_NEOPOST = 29072\nVENDOR_ID_WESTERN_AVIONICS = 29073\nVENDOR_ID_EPIC_AVIATION_LLC = 29074\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_ASSOCIATES_OF_SOUTHWEST_INDIANA_PC = 29075\nVENDOR_ID_CP_SHARING = 29076\nVENDOR_ID_GENTGEENS_LODGE = 29077\nVENDOR_ID_SYNAPSENSE_CORPORATION = 29078\nVENDOR_ID_CRYPTOLOGIC_INC = 29079\nVENDOR_ID_KIONG_SOFTWARE = 29080\nVENDOR_ID_ISINC = 29081\nVENDOR_ID_L2C2_TECHNOLOGIES = 29082\nVENDOR_ID_PKO_BP_SA = 29083\nVENDOR_ID_OVH = 29084\nVENDOR_ID_CONERGY_AG = 29085\nVENDOR_ID_BETHLEHEM_LUTHERAN_SCHOOL = 29086\nVENDOR_ID_ROULLIER = 29087\nVENDOR_ID_SPINVOX_LTD = 29088\nVENDOR_ID_INTEC_SOFTWARE_SOLUTIONS = 29089\nVENDOR_ID_SENDZA_INC = 29090\nVENDOR_ID_FRIENDLYSNMP = 29091\nVENDOR_ID_WIRAMA = 29092\nVENDOR_ID_STEKFON = 29093\nVENDOR_ID_AQUARIUS_TELECOM_TECHNOLOGIES = 29094\nVENDOR_ID_AEROSAT_AVIONICS_LLC = 29095\nVENDOR_ID_NEWACT_LTD = 29096\nVENDOR_ID_TRIGLAV_ZDRAVSTVENA_ZAVAROVALNICA_DD = 29097\nVENDOR_ID_DRM_DIGITAL_RADIO_MONDIALE = 29098\nVENDOR_ID_LARIMART_SPA = 29099\nVENDOR_ID_LITHUSTECH_SISTEMAS_ELETRNICOS_LTDA = 29100\nVENDOR_ID_INTERSTATE_GAS_SUPPLY = 29101\nVENDOR_ID_CARGILL_INC = 29102\nVENDOR_ID_NAROPA_UNIVERSITY = 29103\nVENDOR_ID_FELIX_TIEDE = 29104\nVENDOR_ID_INTELLEFLEX_CORP = 29105\nVENDOR_ID_XANGATI = 29106\nVENDOR_ID_KEY_SOLUTIONS = 29107\nVENDOR_ID_ENLEITEN_INC = 29108\nVENDOR_ID_HOOVER_TREATED_WOOD_PRODUCTS_INC = 29109\nVENDOR_ID_WOODSIDE_FABRICS_LIMITED = 29110\nVENDOR_ID_BEIJING_POWERON_TECHNOLOGIES_CO_LTD = 29111\nVENDOR_ID_BIBLIOTECA_DE_CATALUNYA = 29112\nVENDOR_ID_BANK_PEKAO_SA = 29113\nVENDOR_ID_SECUREW2 = 29114\nVENDOR_ID_ECCO_SKO_A_S = 29115\nVENDOR_ID_INSTITUTO_POLITECNICO_DE_SETUBAL = 29116\nVENDOR_ID_XEMBEDDED_INC = 29117\nVENDOR_ID_BOSSIO_SOLUTIONS_SERVICES_SL = 29118\nVENDOR_ID_JOINT_STOCK_COMPANY_ALL_RUSSIAN_SCIENTIFIC_RESEARCH_INSTITUTE_OF_TELEVISION_AND_RADIO_BROADCASTING = 29119\nVENDOR_ID_SYSOON_SARL = 29120\nVENDOR_ID_NZN = 29121\nVENDOR_ID_TCX_COMPUTER_TECHNOLOGY = 29122\nVENDOR_ID_JALASUTRAM_INC = 29123\nVENDOR_ID_IMAGENICS_COLTD = 29124\nVENDOR_ID_ADVANCE_INTERACTIVE_TECHNOLOGIES_PTE_LTD = 29125\nVENDOR_ID_OSTERHOLM_ASSOCIATES = 29126\nVENDOR_ID_SV_CORPORATION = 29127\nVENDOR_ID_MINDWELL_TECHNOLOGIES = 29128\nVENDOR_ID_DG_SOLUTIONS = 29129\nVENDOR_ID_LITHUANIAN_ACADEMY_OF_PHYSICAL_EDUCATION = 29130\nVENDOR_ID_PERSONAL_JG = 29131\nVENDOR_ID_CALNET = 29132\nVENDOR_ID_ATIS_SYSTEMS_GMBH = 29133\nVENDOR_ID_SPEEDXS = 29134\nVENDOR_ID_SALVAD_SRL = 29135\nVENDOR_ID_TOYS_R_US_CORPORATION = 29136\nVENDOR_ID_MICHAELGERZABEKCOMR = 29137\nVENDOR_ID_TWIC_ROOT = 29138\nVENDOR_ID_UNICOM_DATA_GROUP_TECNOLOGIA_LTDA = 29139\nVENDOR_ID_ONEDOC_AB = 29140\nVENDOR_ID_LIVEOPS = 29141\nVENDOR_ID_VIEWPLUS_TECHNOLOGIES_INC = 29142\nVENDOR_ID_CABLEWORLD_LTD = 29143\nVENDOR_ID_UNASSIGNED_35 = 29144\nVENDOR_ID_KP_COMPUTER_GMBH = 29145\nVENDOR_ID_SWAPSWIRE_LTD = 29146\nVENDOR_ID_PROFICIENT_TECHNOLOGY = 29147\nVENDOR_ID_AXOLOTL_CORP = 29148\nVENDOR_ID_DATA_INFORM_SRL = 29149\nVENDOR_ID_COMLAB_AG = 29150\nVENDOR_ID_LIVE_DATA_GROUP_INC = 29151\nVENDOR_ID_PALO_ALTO_UNIFIED_SCHOOL_DISTRICT = 29152\nVENDOR_ID_RIDGECREST_FINANCIAL_INC = 29153\nVENDOR_ID_ELECTROMAGNETIC_TECHNOLOGIES_INDUSTRIES_INC = 29154\nVENDOR_ID_TEWS_TECHNOLOGIES_GMBH = 29155\nVENDOR_ID_BYTE_DYNAMICS_SRL = 29156\nVENDOR_ID_BYTEMARK_HOSTING = 29157\nVENDOR_ID_ALINEA_SOFTWARE_SOLUTIONS_SL = 29158\nVENDOR_ID_NODAK_FLYING_CLUB_INC = 29159\nVENDOR_ID_L2_ENTERPRISES = 29160\nVENDOR_ID_HIDDEN_CITYNET = 29161\nVENDOR_ID_CHINA_LOTTERY_ONLINE_CO_LTD = 29162\nVENDOR_ID_DARROWCOM = 29163\nVENDOR_ID_ENABLEDPEOPLE_LLC = 29164\nVENDOR_ID_ANTECH = 29165\nVENDOR_ID_NETQOST = 29166\nVENDOR_ID_ISTEC_GMBH = 29167\nVENDOR_ID_T_MOBILE_INTERNATIONAL = 29168\nVENDOR_ID_LLC_ASTELIT = 29169\nVENDOR_ID_INTERACTIVE_QUALITY_SERVICES_INC = 29170\nVENDOR_ID_ESET_SPOL_S_RO = 29171\nVENDOR_ID_BRESNAN_COMMUNICATIONS_LLC = 29172\nVENDOR_ID_INSPATIAL_LLC = 29173\nVENDOR_ID_RPATH_INC = 29174\nVENDOR_ID_PHASMANL = 29175\nVENDOR_ID_FIRST_RABBIT_GMBH = 29176\nVENDOR_ID_UMLAUTUS = 29177\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_BAKERSFIELD = 29178\nVENDOR_ID_AGINOVA_SRL = 29179\nVENDOR_ID_PONSSE_OYJ = 29180\nVENDOR_ID_ECOLE_DE_TECHOLOGIE_SUPERIEURE = 29181\nVENDOR_ID_AMI_DEPT_SENSUS_METERING_SYSTEMS_INC = 29182\nVENDOR_ID_6PIXIES_INTERNATIONAL = 29183\nVENDOR_ID_HUMOR_RAINBOW_INC = 29184\nVENDOR_ID_DIGITAL_FOUNTAIN_INC = 29185\nVENDOR_ID_INNOVATIVE_IT_ARCHITECTS_LLC = 29186\nVENDOR_ID_REVELATION_TV = 29187\nVENDOR_ID_WAVEX_TECHNOLOGIES_PTE_LTD = 29188\nVENDOR_ID_ROADSIDE = 29189\nVENDOR_ID_VALYD_TECHNOLOGIES_PVT_LTD = 29190\nVENDOR_ID_DYNATECH_SRO = 29191\nVENDOR_ID_OPUSVL = 29192\nVENDOR_ID_FABRIX_TV_LTD = 29193\nVENDOR_ID_SHELBY_COUNTY_BOARD_OF_EDUCATION = 29194\nVENDOR_ID_ZEELANDNET_BV = 29195\nVENDOR_ID_LATTICE_LLC = 29196\nVENDOR_ID_KAAZING_CORP = 29197\nVENDOR_ID_PHR = 29198\nVENDOR_ID_TERADA_ELECTRIC_WORKS_COLTD = 29199\nVENDOR_ID_UNETSYSTEM_CO_LTD = 29200\nVENDOR_ID_RAWENSTVO_OJSC = 29201\nVENDOR_ID_HARI_SEKHON = 29202\nVENDOR_ID_GRUPO_SANTANDER = 29203\nVENDOR_ID_SENEX_TECHNOLOGIES_INC = 29204\nVENDOR_ID_NEWMEDIA_NET_GMBH_DIVISION_DD_WRT = 29205\nVENDOR_ID_VARGOUS = 29206\nVENDOR_ID_RESCENTRIS_INC = 29207\nVENDOR_ID_ZANDANEL_INFORMATIONSTECHNOLOGIE = 29208\nVENDOR_ID_HERMANN_EHLERS_HAUS = 29209\nVENDOR_ID_KARCHER_LADWEIN_INGENIEURPARTNERSCHAFT_FUER_BAUTECHNIK = 29210\nVENDOR_ID_DIOMEGA_GMBH = 29211\nVENDOR_ID_HOV_SERVICES_LLC = 29212\nVENDOR_ID_GARURU = 29213\nVENDOR_ID_DAIRIKI_SOLUTIONS = 29214\nVENDOR_ID_EYEBALL_NETWORKS_INC = 29215\nVENDOR_ID_ONODE_SERVER_PROJECT = 29216\nVENDOR_ID_GRANT_STREET_GROUP_INC = 29217\nVENDOR_ID_THE_ALPHAVICTOR_COMPANIES = 29218\nVENDOR_ID_WUILLE_BVBA = 29219\nVENDOR_ID_CIPUTRA_GROUP = 29220\nVENDOR_ID_ENFORTA = 29221\nVENDOR_ID_WEISSER = 29222\nVENDOR_ID_STADTVERWALTUNG_BORNHEIM = 29223\nVENDOR_ID_CORETREK_AS = 29224\nVENDOR_ID_MARKO_KARG = 29225\nVENDOR_ID_BERGERAT_MONNOYEUR_LOCATION = 29226\nVENDOR_ID_CRITICALL_LIMITED = 29227\nVENDOR_ID_DISTRIBUTED_MEDICAL_SVERIGE_AB = 29228\nVENDOR_ID_OUTSERV_INC = 29229\nVENDOR_ID_DIRECTION_GNRALE_DE_LAVIATION_CIVILE = 29230\nVENDOR_ID_CONFDRATION_FRANAISE_MICROTEL_MULTIMDIA = 29231\nVENDOR_ID_COREIPM = 29232\nVENDOR_ID_MCL_INC = 29233\nVENDOR_ID_TITAN_PUBLISHING_GROUP_LIMITED = 29234\nVENDOR_ID_PROTEY = 29235\nVENDOR_ID_APHP_BECLERE = 29236\nVENDOR_ID_NEW_HAMPSHIRE_EMPLOYMENT_SECURITY = 29237\nVENDOR_ID_ADBRITE_INC = 29238\nVENDOR_ID_SYSTEMSKILLS_COMPUTER_TECHNICAL_SERVICES_LTD = 29239\nVENDOR_ID_HID_GLOBAL = 29240\nVENDOR_ID_SPRY_HOSTING = 29241\nVENDOR_ID_PEABODY_ENERGY = 29242\nVENDOR_ID_RESOLVE_SYSTEMS = 29243\nVENDOR_ID_LIME_WIRE_LLC = 29244\nVENDOR_ID_COMMONWEALTH_OF_PENNSYLVANIA_GOVERNORS_OFFICE_OF_ADMINISTRATION = 29245\nVENDOR_ID_KNOWLEDGETRAX_LLC = 29246\nVENDOR_ID_SECIOSS_CORPORATION = 29247\nVENDOR_ID_WANMI_TELECOM_TECHNOLOGIES_COLTD = 29248\nVENDOR_ID_REVUE_VTK_VZW = 29249\nVENDOR_ID_EPM_EXPERT = 29250\nVENDOR_ID_LNM_IIT = 29251\nVENDOR_ID_SERVER_SYSTEM_INFRASTRUCTURE_SSI = 29252\nVENDOR_ID_KBK_CONSULTANT = 29253\nVENDOR_ID_PULSAR_MOBILE_SP_Z_O_O = 29254\nVENDOR_ID_HRZ_ZITTAU_GRLITZ = 29255\nVENDOR_ID_HALLESCHE_KRANKENVERSICHERUNG_AUF_GEGENSEITIGKEIT = 29256\nVENDOR_ID_FEDASIL = 29257\nVENDOR_ID_MITTELRHEIN_VERLAG_GMBH = 29258\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_CHICO = 29259\nVENDOR_ID_TEMPEST_SECURITY_INTELLIGENCE = 29260\nVENDOR_ID_EMQBIT = 29261\nVENDOR_ID_CYBERMAHCOM = 29262\nVENDOR_ID_MAX_PLANCK_INSTITUTE_OF_BIOCHEMISTRY = 29263\nVENDOR_ID_APC_INTERACTIVE_SOLUTIONS_AG = 29264\nVENDOR_ID_KIRP_GMBH = 29265\nVENDOR_ID_XVPN = 29266\nVENDOR_ID_TELEOLOGIC_LEARNING_COMPANY = 29267\nVENDOR_ID_UNITARIAN_UNIVERSALIST_ASSOCIATION = 29268\nVENDOR_ID_SITEXS_NETZWERKLOESUNGEN_IT_CONSULTING_GMBH = 29269\nVENDOR_ID_ROGERS_WEST = 29270\nVENDOR_ID_OBS_TECHNOLOGY = 29271\nVENDOR_ID_BIOLOGICAL_AND_POPULAR_CULTURE_LLC = 29272\nVENDOR_ID_GCS_SOFTWARE_CONSULTING_KEG = 29273\nVENDOR_ID_BUSINESSFABRIC_INC = 29274\nVENDOR_ID_AUTOMETRIX_PRECISION_CUTTING_SYSTEMS = 29275\nVENDOR_ID_WIZARDS_INTERNET_LIMITED = 29276\nVENDOR_ID_BOOKIESTREET_LTD = 29277\nVENDOR_ID_DIMA_TECHNOLOGIES_COLTD = 29278\nVENDOR_ID_WUXI_ZHONGXING_OPTOELECTRONICS_TECHNOLOGY_CO_LTD = 29279\nVENDOR_ID_WIDGETS = 29280\nVENDOR_ID_TRELLEBORGS_HAMN_AB = 29281\nVENDOR_ID_AZUKI_SOFTWARE = 29282\nVENDOR_ID_DSCNETORG = 29283\nVENDOR_ID_AXXANA = 29284\nVENDOR_ID_AQUANASOFT = 29285\nVENDOR_ID_IMAGINE_COMMUNICATIONS = 29286\nVENDOR_ID_FINITE_COMMUNICATION_INC = 29287\nVENDOR_ID_ALTUS_NETWORKS_INC = 29288\nVENDOR_ID_ADVERTISINGCOM = 29289\nVENDOR_ID_WEGO_HEALTH_INC = 29290\nVENDOR_ID_SECRETARIA_DE_LA_FUNCION_PUBLICA = 29291\nVENDOR_ID_UBIQUITOUS_SYSTEMS_LTD = 29292\nVENDOR_ID_ROYAL_ROADS_UNIVERSITY = 29293\nVENDOR_ID_MESHWEAVE = 29294\nVENDOR_ID_IMESC = 29295\nVENDOR_ID_IDX_COMPANY_LTD = 29296\nVENDOR_ID_SHENZHEN_VSTRONG_TECHNOLOGY_COLTD = 29297\nVENDOR_ID_ADOR_POWERTRON_LTD = 29298\nVENDOR_ID_ZAROVS_STELSELS_BK = 29299\nVENDOR_ID_SSI_SCHAEFER_PEEM_GMBH = 29300\nVENDOR_ID_BRAXTEL_COMMUNICATIONS_INC = 29301\nVENDOR_ID_ESI_MOBILE_SOLUTIONS_SLL_GENAKER = 29302\nVENDOR_ID_TELAPPLIANT_LTD = 29303\nVENDOR_ID_SERVICES_FOR_BUSINESS_IT_RUHR_GMBH = 29304\nVENDOR_ID_IPFIX_REVERSE_INFORMATION_ELEMENT_PRIVATE_ENTERPRISE = 29305\nVENDOR_ID_USEFUL_NETWORKS = 29306\nVENDOR_ID_LOKI_INDUSTRIES = 29307\nVENDOR_ID_RPGFICTION = 29308\nVENDOR_ID_IBM_MITTELSTAND_SYSTEME = 29309\nVENDOR_ID_WILLIAM_PETERSEN_ELEKTRONIK_A_S = 29310\nVENDOR_ID_ITAY_BEERLI = 29311\nVENDOR_ID_BERNECKERRAINER_INDUSTRIE_ELEKTRONIK_GESMBH = 29312\nVENDOR_ID_GLOBOTECH_GMBH = 29313\nVENDOR_ID_WDV_GMBH = 29314\nVENDOR_ID_VAUDE_SPORT_GMBH_CO_KG = 29315\nVENDOR_ID_ASTUTE_NETWORKS_INC = 29316\nVENDOR_ID_GLOBAL_TECHNOLOGY_INC = 29317\nVENDOR_ID_DOQUENT_INC = 29318\nVENDOR_ID_NTT_COMMUNICATIONS_CORPORATION = 29319\nVENDOR_ID_REGIO_IT_AACHEN_GMBH = 29320\nVENDOR_ID_IBL_SOFTWARE_ENGINEERING_LTD = 29321\nVENDOR_ID_CABINPLANT_A_S = 29322\nVENDOR_ID_LESUN_TECHNOLOGIES_COLTD = 29323\nVENDOR_ID_VOXY_COMMUNICATIONS = 29324\nVENDOR_ID_WORSHIPWORKS_MINISTRIES_INTERNATIONAL = 29325\nVENDOR_ID_IBM_RATIONAL = 29326\nVENDOR_ID_BARRANG = 29327\nVENDOR_ID_THE_STABLE_GROUP = 29328\nVENDOR_ID_TRADE_ME_LTD = 29329\nVENDOR_ID_CRYPTIC_STUDIOS = 29330\nVENDOR_ID_SWAN_ISLAND_NETWORKS_INC = 29331\nVENDOR_ID_FRANK_MEISSCHAERT = 29332\nVENDOR_ID_JBLADE_LLC = 29333\nVENDOR_ID_PROVIDERNL = 29334\nVENDOR_ID_ZAJIL_INTERNATIONAL_TELECOM_KCSC = 29335\nVENDOR_ID_BOMBARDIER_TRANSPORTATION_SIGNAL_GERMANY_GMBH = 29336\nVENDOR_ID_BYNARI = 29337\nVENDOR_ID_KESTREL_WIRELESS_INC = 29338\nVENDOR_ID_3GUPPIESCOM = 29339\nVENDOR_ID_JONCAVESCOM = 29340\nVENDOR_ID_INGENIEURBUERO_SCHMID = 29341\nVENDOR_ID_BROWAVE_INC = 29342\nVENDOR_ID_GRUNDIG_SAT_SYSTEMS_GMBH = 29343\nVENDOR_ID_SHANGHAI_HUABO_TAIFU_INTERNET_TECHNOLOGY_COLTD = 29344\nVENDOR_ID_SOFTING_AG = 29345\nVENDOR_ID_UKN_GROUP_LIMITED = 29346\nVENDOR_ID_AMADEUS_GLOBAL_TRAVEL_LTD = 29347\nVENDOR_ID_ROTABANNER_NEXT = 29348\nVENDOR_ID_MEDIAGRIDS_PLC = 29349\nVENDOR_ID_REMUDA_RANCH_CENTER_FOR_ANOREXIA_BULIMIA_INC = 29350\nVENDOR_ID_FALLIBROOME_HIGH_SCHOOL = 29351\nVENDOR_ID_IBEX_TECHNOLOGY_COLTD = 29352\nVENDOR_ID_BREWER_SCIENCE_INC = 29353\nVENDOR_ID_HEALTH_DIALOG_SERVICES_CORPORATION = 29354\nVENDOR_ID_PING_EV = 29355\nVENDOR_ID_MONTVILLE_ENTERPRISES_LLC = 29356\nVENDOR_ID_FENSTER_SOFTWARE = 29357\nVENDOR_ID_ZLANGO = 29358\nVENDOR_ID_INDUSTRIE_DIAL_FACE_SPA = 29359\nVENDOR_ID_AMS_MEDIA_SVERIGE_AB = 29360\nVENDOR_ID_MAGMA = 29361\nVENDOR_ID_TOMIZONE_LIMITED = 29362\nVENDOR_ID_CHCLABNET = 29363\nVENDOR_ID_APPLIED_ELECTRO_MAGNETICS_P_LTD = 29364\nVENDOR_ID_PENTA_INVESTMENTS_AS = 29365\nVENDOR_ID_BMI_SPA = 29366\nVENDOR_ID_DREAMLAB_TECHNOLOGIES_AG = 29367\nVENDOR_ID_IASC = 29368\nVENDOR_ID_TOM_COLLINS_LLC = 29369\nVENDOR_ID_DANIEL_MANDLER = 29370\nVENDOR_ID_CDC_ARKHINEO = 29371\nVENDOR_ID_BIDIX = 29372\nVENDOR_ID_DILLETNET = 29373\nVENDOR_ID_ELEGIAC = 29374\nVENDOR_ID_SELEKRON_MICROCONTROL_SL = 29375\nVENDOR_ID_TRGERVEREIN_BRGERNETZ_BAMBERG_EV = 29376\nVENDOR_ID_MAKE_A_BYTE_INC = 29377\nVENDOR_ID_COCO_COMMUNICATIONS_CORP = 29378\nVENDOR_ID_LOSTAR_BILGI_GUVENLIGI_AS = 29379\nVENDOR_ID_BEEKHUL_HOLDINGS_PTY_LTD = 29380\nVENDOR_ID_MCNEESE_STATE_UNIVERSITY = 29381\nVENDOR_ID_DEDALUS_SPA = 29382\nVENDOR_ID_SYSVIEW_INC = 29383\nVENDOR_ID_PD_CONSULTING_AND_SECURITY = 29384\nVENDOR_ID_ANS = 29385\nVENDOR_ID_ZETES_3IV_CC = 29386\nVENDOR_ID_ENOVANCE = 29387\nVENDOR_ID_ACTIVANT_SOLUTIONS = 29388\nVENDOR_ID_LOGIKONLINE_INC = 29389\nVENDOR_ID_DIGITAL_IMS = 29390\nVENDOR_ID_STRATEGIC_DATA_PTY_LTD = 29391\nVENDOR_ID_A3_SYSTEMS_GMBH = 29392\nVENDOR_ID_AETA_AUDIO_SYSTEMS = 29393\nVENDOR_ID_CENTRE_HOSPITALIER_RGIONAL_UNIVERSITAIRE_DE_LILLE = 29394\nVENDOR_ID_PHEEDO_INC = 29395\nVENDOR_ID_VERISAT_AS = 29396\nVENDOR_ID_ENGINEERING_SYSTEM_SOLUTIONS = 29397\nVENDOR_ID_WORKSCAPE = 29398\nVENDOR_ID_SIDSA = 29399\nVENDOR_ID_OKC_AG = 29400\nVENDOR_ID_FULLNET_INC = 29401\nVENDOR_ID_HELEX = 29402\nVENDOR_ID_COMWAX = 29403\nVENDOR_ID_INTELLIGENS_RENDSZEREK_DIVIZIO_KFT = 29404\nVENDOR_ID_UNICEL_DO_BRASIL_TELECOMUNICAES_LTDA = 29405\nVENDOR_ID_CONNECTBEAM = 29406\nVENDOR_ID_PORTAL_ANDRES_JADAN = 29407\nVENDOR_ID_KEPCO = 29408\nVENDOR_ID_INNOVATION_WIRELESS_INC = 29409\nVENDOR_ID_FIRESTEEL_TECHNOLOGIES_INC = 29410\nVENDOR_ID_INSTITUTO_DE_TECNOLOGIA_DA_INFORMAO_E_COMUNICAO_DO_ESTADO_DO_ESPRITO_SANTO_PRODEST = 29411\nVENDOR_ID_PRODEA_SYSTEMS = 29412\nVENDOR_ID_ACCESS_LAYERS_LTD = 29413\nVENDOR_ID_OPENGATE_DATA_SYSTEMS = 29414\nVENDOR_ID_AUTENTIA_REAL_BUSINESS_SOLUTIONS = 29415\nVENDOR_ID_ORBIT_TECHNOLOGY_GROUP = 29416\nVENDOR_ID_FELIX_SCHWARZ_SOFTWARE_ENTWICKLUNG = 29417\nVENDOR_ID_TRACENETWORK_CORPORATION_SDN_BHD = 29418\nVENDOR_ID_KAPITAL_INSURANCE_GROUP = 29419\nVENDOR_ID_WEST_BENGAL_UNIVERSITY_OF_TECHNOLOGY = 29420\nVENDOR_ID_KARGO_GLOBAL_INC = 29421\nVENDOR_ID_SUPPORT_SOLUES_EM_INFORMTICA_LTDA = 29422\nVENDOR_ID_2V_SRL = 29423\nVENDOR_ID_EMBRYO_WEB_SOLUTIONS_LTDA = 29424\nVENDOR_ID_MATERIALES_ELECTRICOS_Y_MECANICOS_MEM_LTDA = 29425\nVENDOR_ID_STATE_OF_MIND = 29426\nVENDOR_ID_EZSAFE = 29427\nVENDOR_ID_IKOEMED = 29428\nVENDOR_ID_SYNERGYRT = 29429\nVENDOR_ID_HMS_GMBH = 29430\nVENDOR_ID_FAITHFAMILY_ACADEMY = 29431\nVENDOR_ID_HURCO_AUTOMATION_LTD = 29432\nVENDOR_ID_DIGMA_INC = 29433\nVENDOR_ID_MRK_MEDIA_AG = 29434\nVENDOR_ID_WISEKEY_ELA = 29435\nVENDOR_ID_CENTRAL_TECHNOLOGY_SERVICES = 29436\nVENDOR_ID_HNP = 29437\nVENDOR_ID_ARAMEX_INTERNATIONAL_LTD = 29438\nVENDOR_ID_UNTOLD_STRUCTURES_P_L = 29439\nVENDOR_ID_UNIVERSIT_LOUIS_PASTEUR_UFR_DE_MATHMATIQUE_ET_DINFORMATIQUE = 29440\nVENDOR_ID_QUANZHOU_NORMAL_UNIVERSITY = 29441\nVENDOR_ID_ARISE = 29442\nVENDOR_ID_SHANGHAI_RUIGAO_INFORMATIONTECHNOLOGIES_COLTD = 29443\nVENDOR_ID_SONDARA_SOLUCIONS = 29444\nVENDOR_ID_INTEGRA_SRL = 29445\nVENDOR_ID_TELEMATIK_DESIGN = 29446\nVENDOR_ID_NORDIC_GROWTH_MARKET_NGM_AB = 29447\nVENDOR_ID_GLOUCESTER_RESEARCH_LTD = 29448\nVENDOR_ID_RESOLVITY_INC = 29449\nVENDOR_ID_DIGISTAR_TELECOMUNICAES_SA = 29450\nVENDOR_ID_INTEROP_TECHNOLOGIES = 29451\nVENDOR_ID_DIGITALPERSONA_INC = 29452\nVENDOR_ID_BRENDT_PETER = 29453\nVENDOR_ID_ODS_INC = 29454\nVENDOR_ID_CRAHAYEU = 29455\nVENDOR_ID_MODAS_MOBILE_DATENSYSTEME_GMBH = 29456\nVENDOR_ID_PEER_FUSION_INC = 29457\nVENDOR_ID_ACETEL = 29458\nVENDOR_ID_GOBIERNO_DE_ARAGN = 29459\nVENDOR_ID_RED_BEE_MEDIA = 29460\nVENDOR_ID_AUTHENTITY_CERTIFICATON_ENTITY = 29461\nVENDOR_ID_STULZ_GMBH_KLIMATECHNIK = 29462\nVENDOR_ID_AXIGEN_MESSAGING_FORMERLY_GECAD_TECHNOLOGIES = 29463\nVENDOR_ID_INVERSE_GROUPE_CONSEIL = 29464\nVENDOR_ID_AARON_VON_GAUSS = 29465\nVENDOR_ID_THE_NATION_TRAFFIC = 29466\nVENDOR_ID_FIRE_BREATHING_ROBOT_SYSTEMS = 29467\nVENDOR_ID_FRUHEN_INFOTEC = 29468\nVENDOR_ID_FREBER_ENTERPRISES = 29469\nVENDOR_ID_DAX_TECHNOLOGIES_CORP = 29470\nVENDOR_ID_VIBIT_BVBA = 29471\nVENDOR_ID_GRINNING_FOOL_PRODUCTIONS = 29472\nVENDOR_ID_HUMANITY_FORWARD = 29473\nVENDOR_ID_CHINA_NETCOM_GROUP_BROADBAND_SERVICE_APPLICATIONS_LIMITED_CORPORATION_FOR_NATIONAL_ENGINEERING_LABORATORY = 29474\nVENDOR_ID_ADILEC_SL = 29475\nVENDOR_ID_VILIAM_TREPK_NETCOM = 29476\nVENDOR_ID_MARKAS_AL_NOUR = 29477\nVENDOR_ID_UNIVERSITY_OF_CHICAGO_GRADUATE_SCHOOL_OF_BUSINESS = 29478\nVENDOR_ID_HC_CONSULTING = 29479\nVENDOR_ID_BARASH_COMMUNICATION_TECHNOLOGIES_INC_BCTI = 29480\nVENDOR_ID_CAMBRIDGE_SEMANTICS_INC = 29481\nVENDOR_ID_EXCELL_BATTERY_COMPANY = 29482\nVENDOR_ID_PROFORMATIQUE = 29483\nVENDOR_ID_DEVGUY = 29484\nVENDOR_ID_SMART_TECHNOLOGIES_ULC = 29485\nVENDOR_ID_ROUNDYSOFT = 29486\nVENDOR_ID_BEIJING_LHWT_MICROELECTRONICS_INC = 29487\nVENDOR_ID_JEREMY_JONES = 29488\nVENDOR_ID_SLITHERSOFT = 29489\nVENDOR_ID_PROTECH_SAS = 29490\nVENDOR_ID_JOHN_WILEY_SONS_INC = 29491\nVENDOR_ID_PISCHOWS = 29492\nVENDOR_ID_LIMESTONE_COLLEGE = 29493\nVENDOR_ID_STATE_OF_MAINE_GOVERNMENT = 29494\nVENDOR_ID_SITEWORX_INC = 29495\nVENDOR_ID_MARC_SUTTLE = 29496\nVENDOR_ID_CARBON_PLANET_PTY_LTD = 29497\nVENDOR_ID_PROBIN = 29498\nVENDOR_ID_UNASSIGNED_36 = 29499\nVENDOR_ID_STORAGESWITCH = 29500\nVENDOR_ID_ALGOLITH_INC = 29501\nVENDOR_ID_MDIT_INNOVATIONS_INC = 29502\nVENDOR_ID_GENINETWORKS = 29503\nVENDOR_ID_SDC_EK_FR = 29504\nVENDOR_ID_RESERCOM_LP = 29505\nVENDOR_ID_TELEPIN_SOFTWARE = 29506\nVENDOR_ID_INCODE = 29507\nVENDOR_ID_PFADFINDER_PFADFINDERINNENBUND_NORDLICHT_EV = 29508\nVENDOR_ID_NAFTNA_INDUSTRIJA_SRBIJE_AD_NOVI_SAD = 29509\nVENDOR_ID_ZIPTIE = 29510\nVENDOR_ID_HITACHI_HI_SYSTEM21_COLTD_MINAMI_TEAM = 29511\nVENDOR_ID_INTEGRAL_SISTEMAS = 29512\nVENDOR_ID_MVPZONE = 29513\nVENDOR_ID_NEWLINES_LTD = 29514\nVENDOR_ID_KOREA_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY_KIST = 29515\nVENDOR_ID_UUDYNAMICS_INC = 29516\nVENDOR_ID_AUXALNET = 29517\nVENDOR_ID_DREW_HESS = 29518\nVENDOR_ID_URZD_ZAMWIE_PUBLICZNYCH = 29519\nVENDOR_ID_DOMOD = 29520\nVENDOR_ID_OMEGA_DESIGN_SRO = 29521\nVENDOR_ID_UNIX_SYSTEMS_MANAGEMENT_PTY_LTD = 29522\nVENDOR_ID_IE_INTERNETCOM_LIMITED = 29523\nVENDOR_ID_DUBAI_DUTY_FREE = 29524\nVENDOR_ID_UKRAINIAIN_INDUSTRIAL = 29525\nVENDOR_ID_EBI_CONSULTING = 29526\nVENDOR_ID_SPANGENBERG_CONSULTING = 29527\nVENDOR_ID_TOEL_ELECTRONICS_LTD = 29528\nVENDOR_ID_CPS_TECHNOLOGIES = 29529\nVENDOR_ID_NEW_MEDICAL_COLTD = 29530\nVENDOR_ID_K3_NETWORKS = 29531\nVENDOR_ID_PACIFIC_WEST_ASSOCIATION_OF_REALTORS = 29532\nVENDOR_ID_NSSE_SSC_CHARLESTON = 29533\nVENDOR_ID_THE_HIVE = 29534\nVENDOR_ID_BKMKSCOM = 29535\nVENDOR_ID_SKY_PERFECT_JSAT_CORPORATION_FORMERLY_SPACE_COMMUNICATIONS_CORPORATION = 29536\nVENDOR_ID_VELOX = 29537\nVENDOR_ID_CELEONET = 29538\nVENDOR_ID_LOCKVIEW = 29539\nVENDOR_ID_B_204_1 = 29540\nVENDOR_ID_CITY_OF_ROSEVILLE_INFORMATION_TECHNOLOGY_DEPARTMENT = 29541\nVENDOR_ID_BROADCASTWEBS_LLC = 29542\nVENDOR_ID_INQNET_GMBH = 29543\nVENDOR_ID_UNIVERSITY_OF_MONTENEGRO = 29544\nVENDOR_ID_OPEN_SOURCE_BUSINESS_GROUP = 29545\nVENDOR_ID_SOFT_HARDWARE_BERATUNG_EBELING = 29546\nVENDOR_ID_THOMAS_NEUMANN = 29547\nVENDOR_ID_4COM_GMBH = 29548\nVENDOR_ID_EDS_FRANCE_SAS_D3SP = 29549\nVENDOR_ID_EFECTIVOS_DE_TECNICAS_SA = 29550\nVENDOR_ID_DUST_IN_THE_NET = 29551\nVENDOR_ID_THREE_PALM_SOFTWARE_LLC = 29552\nVENDOR_ID_HABEGGER_AG = 29553\nVENDOR_ID_POUIKORG = 29554\nVENDOR_ID_CMB_CONSULTING = 29555\nVENDOR_ID_TECHMIND_LTD = 29556\nVENDOR_ID_TITUS_INTERNATIONAL_INC = 29557\nVENDOR_ID_TITUS_LABS_INC = 29558\nVENDOR_ID_LATE_HOURS = 29559\nVENDOR_ID_SBE_NETWORK_SOLUTIONS_GMBH = 29560\nVENDOR_ID_YUSTON_BV = 29561\nVENDOR_ID_SOPHELIOS_BVBA = 29562\nVENDOR_ID_MITANI_CORPORATION = 29563\nVENDOR_ID_OPENSQUAD_SARL = 29564\nVENDOR_ID_DCMSYS_LLC = 29565\nVENDOR_ID_OH_SAN_JUAN_DE_DIOS_PROVINCIA_BETICA = 29566\nVENDOR_ID_CENTRAL_INFORMATICS_ORGANISATION = 29567\nVENDOR_ID_INTEGRO_TECHNOLOGIES_PRIVATE_LIMITED_SINGAPORE = 29568\nVENDOR_ID_SENSELOGIC_AB = 29569\nVENDOR_ID_OAK_RIDGE_ASSOCIATED_UNIVERISITES = 29570\nVENDOR_ID_MIRASYS = 29571\nVENDOR_ID_APOTEX_INC = 29572\nVENDOR_ID_LAREDO_IT = 29573\nVENDOR_ID_POWERCORE_ENGINEERING = 29574\nVENDOR_ID_ALEXANDER_BADENT_NONE = 29575\nVENDOR_ID_KILGOUR = 29576\nVENDOR_ID_GATEPROTECT_AG_GERMANY = 29577\nVENDOR_ID_STN_BV = 29578\nVENDOR_ID_42MEDIA_GROUP_GMBH = 29579\nVENDOR_ID_VIYYA_TECHNOLOGIES_INC = 29580\nVENDOR_ID_AXIOMATICA = 29581\nVENDOR_ID_NATIV_SYSTEMS_LTD = 29582\nVENDOR_ID_ANGELO_STATE_UNIVERSITY = 29583\nVENDOR_ID_TOM_LINK = 29584\nVENDOR_ID_COMSEC_TR_PTY_LTD = 29585\nVENDOR_ID_USG_PEOPLE_INTERNATIONAL_NV = 29586\nVENDOR_ID_ZADIG_SRL = 29587\nVENDOR_ID_EGOS_THE_EDUCATION_COMPANY = 29588\nVENDOR_ID_WANARI_KFT = 29589\nVENDOR_ID_LILEO_SCOP_SARL = 29590\nVENDOR_ID_OPENSS7_CORPORATION = 29591\nVENDOR_ID_CORPORATE_BIG = 29592\nVENDOR_ID_BOLKHUIS = 29593\nVENDOR_ID_SAN_JOSE_STATE_UNIVERSITY = 29594\nVENDOR_ID_DRURY_HOTELS_CORPORATION = 29595\nVENDOR_ID_CMP_AUDIOVISUAL = 29596\nVENDOR_ID_NEXTFOUR_GROUP_LTD = 29597\nVENDOR_ID_NSI_HOSTING_INC = 29598\nVENDOR_ID_TOROKINA_NETWORKS = 29599\nVENDOR_ID_INTERNATIONAL_ISLAMIC_UNIVERSITY_MALAYSIA = 29600\nVENDOR_ID_ARICENT_COMMUNICATION_HOLDINGS_LTD = 29601\nVENDOR_ID_ALTASIS_DI_CASTIGLIEGO_MICHELE = 29602\nVENDOR_ID_KENOXA_GMBH = 29603\nVENDOR_ID_DIVERSE_COMPUTING_INC = 29604\nVENDOR_ID_CELLGAIN = 29605\nVENDOR_ID_ECONOPRINT_INC = 29606\nVENDOR_ID_REVERB_NETWORKS_INC = 29607\nVENDOR_ID_PELZEL = 29608\nVENDOR_ID_APOGEE_LABS_INC = 29609\nVENDOR_ID_SECURE_PROCESS = 29610\nVENDOR_ID_CLONEWARSORG = 29611\nVENDOR_ID_WI_LINKS = 29612\nVENDOR_ID_ETHOS_NETWORKS = 29613\nVENDOR_ID_AUG_HEDINGER_GMBH_CO_KG = 29614\nVENDOR_ID_29WEST_INC = 29615\nVENDOR_ID_REYNALDORG = 29616\nVENDOR_ID_SYTECH = 29617\nVENDOR_ID_REGION_SYDDANMARK = 29618\nVENDOR_ID_JOHANNES_OECHSLE_LAN_PARTY_NETZWERKAUSRUESTER = 29619\nVENDOR_ID_GAMESYS_LTD = 29620\nVENDOR_ID_BIOS_CORPORATION = 29621\nVENDOR_ID_MEGAFON_OJSC = 29622\nVENDOR_ID_BANQUE_DU_LIBAN = 29623\nVENDOR_ID_RIMOC_GMBH = 29624\nVENDOR_ID_SAGI_MEHADAVE = 29625\nVENDOR_ID_TELEDESIGN_PLC = 29626\nVENDOR_ID_IDPENDANT_GMBH = 29627\nVENDOR_ID_N2N_COMMERCE = 29628\nVENDOR_ID_LEGG_MASON_INC = 29629\nVENDOR_ID_ONE_ANS_SPA = 29630\nVENDOR_ID_IPTEGO_GMBH = 29631\nVENDOR_ID_SEKO_WORLDWIDE = 29632\nVENDOR_ID_PELETON_PHOTONIC_SYSTEMS = 29633\nVENDOR_ID_DOM_INWESTYCYJNY_BRE_BANKU_SA = 29634\nVENDOR_ID_DEALER_INFORMATION_SYSTEMS_CORPORATION = 29635\nVENDOR_ID_SECUREMEDIA = 29636\nVENDOR_ID_TRINITYSOFT_COLTD = 29637\nVENDOR_ID_NOVATEC_KOMMUNIKATIONSTECHNIK_GMBH = 29638\nVENDOR_ID_THE_ELECTRIC_SHEEP_COMPANY_INC = 29639\nVENDOR_ID_AP_NEDERLAND_BV = 29640\nVENDOR_ID_HOSTWORKS_GROUP_LTD = 29641\nVENDOR_ID_EXXACT = 29642\nVENDOR_ID_WINKWAVES = 29643\nVENDOR_ID_ANTONY_VENNARD = 29644\nVENDOR_ID_BOTHANNET = 29645\nVENDOR_ID_VISIWEAR_AS = 29646\nVENDOR_ID_VIRTUAL_BROADBAND_TECHNOLOGY_INC = 29647\nVENDOR_ID_QUOPIN = 29648\nVENDOR_ID_INFOTON_CORPORATION = 29649\nVENDOR_ID_GEORG_SIMON_GMBH = 29650\nVENDOR_ID_VIDIP = 29651\nVENDOR_ID_SHOOK_HARDY_BACON_LLP = 29652\nVENDOR_ID_OVERSTOCKCOM_INC = 29653\nVENDOR_ID_FREEDOM_NETWORKS = 29654\nVENDOR_ID_KIRISHI_GLASS_PLANT_LTD = 29655\nVENDOR_ID_PHASEDOT_IT_BUSINESS_SOLUTIONS = 29656\nVENDOR_ID_VTG_DEUTSCHLAND_GMBH = 29657\nVENDOR_ID_FUNDACION_INTEGRA = 29658\nVENDOR_ID_CARESTREAM_HEALTH = 29659\nVENDOR_ID_AFCO_SYSTEMS = 29660\nVENDOR_ID_FULCRUM_ANALYTICS_INC = 29661\nVENDOR_ID_CRON_IT_GMBH = 29662\nVENDOR_ID_EMBEDDED_X_INC = 29663\nVENDOR_ID_PACKET_GENERAL_NETWORKS_INC = 29664\nVENDOR_ID_PROTRACTOR_SOFTWARE_INC = 29665\nVENDOR_ID_LUNIXTREME = 29666\nVENDOR_ID_DESTINY_SOLUTIONS = 29667\nVENDOR_ID_KIREI_AB = 29668\nVENDOR_ID_FIRSTLIGHT_NETWORKS = 29669\nVENDOR_ID_MEDFLOW_INC = 29670\nVENDOR_ID_MERAKI_NETWORKS_INC = 29671\nVENDOR_ID_CSK_WINTECHNOLOGY_CORPORATION = 29672\nVENDOR_ID_M3_DESIGN_INC = 29673\nVENDOR_ID_THEWOLFENET_LLC = 29674\nVENDOR_ID_ALEMO_KOMMUNIKATIONS_GMBH = 29675\nVENDOR_ID_NET_PLUS_TECNOLODGY = 29676\nVENDOR_ID_SENSATA_TECHNOLOGIES_POWER_CONTROLS_WBL = 29677\nVENDOR_ID_ABSOLUTE_LTD = 29678\nVENDOR_ID_ESPIA_SRL = 29679\nVENDOR_ID_ATLANTUX_CONSULTORES_SL = 29680\nVENDOR_ID_AFPY = 29681\nVENDOR_ID_DMO_TECHNOLOGIES = 29682\nVENDOR_ID_COPPEREYE_LTD = 29683\nVENDOR_ID_PIONEER_MAGNETICS_INC = 29684\nVENDOR_ID_EVISION_PTY_LTD = 29685\nVENDOR_ID_BHARAT_ELECTRONICS_LTD = 29686\nVENDOR_ID_ABSOLUTE_PERFORMANCE_INC = 29687\nVENDOR_ID_AXSTOR = 29688\nVENDOR_ID_EKPLEK = 29689\nVENDOR_ID_DOCTOR_WEB_LTD = 29690\nVENDOR_ID_SILVER_WAVE_TECHNOLOGY_LIMITED = 29691\nVENDOR_ID_GLOBESY_SRO = 29692\nVENDOR_ID_COBALT_DIGITAL = 29693\nVENDOR_ID_TETHERS_UNLIMITED_INC = 29694\nVENDOR_ID_REWSS_A_S = 29695\nVENDOR_ID_CITIFINANCIAL_CONSUMER_FINANCE_INDIA_LTD = 29696\nVENDOR_ID_LEEDS_PRIMARY_CARE_TRUST = 29697\nVENDOR_ID_NBG_ID = 29698\nVENDOR_ID_CETIS_DD = 29699\nVENDOR_ID_GOT_LINUX_INC = 29700\nVENDOR_ID_PMD_GMBH = 29701\nVENDOR_ID_ECKARD_VOSSAS_UNTERNEHMENSBERATUNG = 29702\nVENDOR_ID_ZANZAR = 29703\nVENDOR_ID_CARLOS_PERELLO_MARIN = 29704\nVENDOR_ID_SNOLAB = 29705\nVENDOR_ID_MAPSOLUTE_GMBH = 29706\nVENDOR_ID_BUSINESS_ENGINEERING_SYSTEMS_CORP = 29707\nVENDOR_ID_INFOSTREAM_TECHNOLOGIES = 29708\nVENDOR_ID_ARGIBEL_SERVICIOS_DIGITALES_SL = 29709\nVENDOR_ID_LONDON_BOROUGH_OF_CAMDEN = 29710\nVENDOR_ID_802AUTOMATION_LTD = 29711\nVENDOR_ID_M_SYS_EDV_DIENSTLEISTUNGEN = 29712\nVENDOR_ID_LTECH = 29713\nVENDOR_ID_KYOCERA_COMMUNICATION_SYSTEMS_COLTD = 29714\nVENDOR_ID_ZAVOD_ZA_ZDRAVSTVENO_ZAVAROVANJE_SLOVENIJE = 29715\nVENDOR_ID_CONCILIO_NETWORKS = 29716\nVENDOR_ID_REALDOLMEN_FORMERLY_DOLMEN_COMPUTER_APPLICATIONS = 29717\nVENDOR_ID_TECHNOLOGICAL_EDUCATIONAL_INSTITUTION_OF_ATHENS_TEI_OF_ATHENS = 29718\nVENDOR_ID_MICROPLEX_PRINTWARE_AG = 29719\nVENDOR_ID_XYCO_TECHNOLOGIES_AG = 29720\nVENDOR_ID_BI_LO_LLC = 29721\nVENDOR_ID_TIMECOST = 29722\nVENDOR_ID_IMAX_CORP = 29723\nVENDOR_ID_RPC_PACKAGING = 29724\nVENDOR_ID_INCONCERTCC = 29725\nVENDOR_ID_ROTTENBYTES = 29726\nVENDOR_ID_JOHN_ZORNIG = 29727\nVENDOR_ID_PLANEX_TECHNOLOGIES_SA = 29728\nVENDOR_ID_LOGESTA_GESTION_DEL_TRANSPORTE_SA = 29729\nVENDOR_ID_MADEK_LTD = 29730\nVENDOR_ID_GENERAL_DYNAMICS_INFORMATION_TECHNOLOGY = 29731\nVENDOR_ID_MTS = 29732\nVENDOR_ID_HYPERTAG_LTD = 29733\nVENDOR_ID_WARTSILA_CORPORATION = 29734\nVENDOR_ID_ETSV_SCINTILLA = 29735\nVENDOR_ID_UNIFIED_BUSINESS_SOLUTIONS = 29736\nVENDOR_ID_HOLLYWOOD_CENTER_STUDIOS = 29737\nVENDOR_ID_KERK = 29738\nVENDOR_ID_GRETA_SUD_NORMANDIE = 29739\nVENDOR_ID_MST_SYSTEMTECHNIK_AG = 29740\nVENDOR_ID_ARUBA_PEC_SPA = 29741\nVENDOR_ID_NETONE_SA = 29742\nVENDOR_ID_DIGIREMOTE = 29743\nVENDOR_ID_SVP_BROADCAST_MICROWAVE_SL = 29744\nVENDOR_ID_INTERNATIONAL_INSTITUTE_FOR_APPLIED_SYSTEMS_ANALYSIS = 29745\nVENDOR_ID_SATRO_SRO = 29746\nVENDOR_ID_EXPRESSTHOUGHT = 29747\nVENDOR_ID_SOPHIASOFT = 29748\nVENDOR_ID_MATTHEW_R_CHASE = 29749\nVENDOR_ID_KTS_INFOTECH_PVT_LTD = 29750\nVENDOR_ID_CUBICO_SOLUTIONS = 29751\nVENDOR_ID_COMPUTER_SYSTEM_LABORATORY_AT_CMC_FACULTY_MOSCOW_STATE_UNIVERSITY = 29752\nVENDOR_ID_3TERA_INC = 29753\nVENDOR_ID_KARL_BLANDERER_INTERNETMARKETING = 29754\nVENDOR_ID_SISTEER = 29755\nVENDOR_ID_ROCHESTER_COMMUNITY_AND_TECHNICAL_COLLEGE = 29756\nVENDOR_ID_OFICINA_DE_COOPERACIN_UNIVERSITARIA_SA = 29757\nVENDOR_ID_POLSKA_GRUPA_FARMACEUTYCZNA = 29758\nVENDOR_ID_ENGINEERING_SOLUTIONS_INC = 29759\nVENDOR_ID_CSS_INC = 29760\nVENDOR_ID_GOCONNECT_AUSTRALIA_PTY_LTD = 29761\nVENDOR_ID_DEVMETRIX = 29762\nVENDOR_ID_READYLINKS = 29763\nVENDOR_ID_CRYPTO_TEAM = 29764\nVENDOR_ID_PAYCOR_INC = 29765\nVENDOR_ID_FALCONTROL_SECURITY_GMBH = 29766\nVENDOR_ID_JAMES_HUNT = 29767\nVENDOR_ID_EMPORIA_STATE_UNIVERSITY = 29768\nVENDOR_ID_ACCOUNTIS = 29769\nVENDOR_ID_DIRECT_ENERGIE = 29770\nVENDOR_ID_TRIOCOM_LTD = 29771\nVENDOR_ID_SUTTER_HEALTH = 29772\nVENDOR_ID_GENWORTH_FINANCIAL = 29773\nVENDOR_ID_AMOBEE = 29774\nVENDOR_ID_WUSHNET_LLC = 29775\nVENDOR_ID_CHECKPHONE = 29776\nVENDOR_ID_SHAW_INDUSTRIES_INC = 29777\nVENDOR_ID_HONEYWELL_SYSTEMS_GROUP = 29778\nVENDOR_ID_ZION_GROUP_LIMITED = 29779\nVENDOR_ID_SECURE_IT_IS = 29780\nVENDOR_ID_XEYEDFROG_SOLUTIONS = 29781\nVENDOR_ID_CSK_HOLDINGS_CORPORATION = 29782\nVENDOR_ID_BRANDENBURG_UNIVERSITY_OF_TECHNOLOGY = 29783\nVENDOR_ID_TURISMO_ANDALUZ = 29784\nVENDOR_ID_MINISTERIO_DE_AGRICULTURA_PESCA_Y_ALIMENTACION = 29785\nVENDOR_ID_MEDITERRUM_SARL = 29786\nVENDOR_ID_T_SYSTEMS_MMS_DRESDEN = 29787\nVENDOR_ID_GZT_TELKOM_TELMOR_SP_Z_OO = 29788\nVENDOR_ID_RED_LION_CONTROLS_BLUETREE_WIRELESS_DATA_INC = 29789\nVENDOR_ID_YELP_INC = 29790\nVENDOR_ID_QUALITY_NIGHTHAWK = 29791\nVENDOR_ID_IPERCOM = 29792\nVENDOR_ID_ENVENT_TECHNOLOGIES = 29793\nVENDOR_ID_DBD_DEUTSCHE_BREITBAND_DIENSTE = 29794\nVENDOR_ID_CC_COMPUTER_CONSULTANTS_GMBH = 29795\nVENDOR_ID_INSTITUTO_MEXICANO_DEL_SEGURO_SOCIAL_IMSS = 29796\nVENDOR_ID_WORKING_TECHNOLOGIES = 29797\nVENDOR_ID_LOMA_TECHNOLOGY_GROUP = 29798\nVENDOR_ID_EX_EVENTU_GMBH = 29799\nVENDOR_ID_ZEUGMA_SYSTEMS_INC = 29800\nVENDOR_ID_DEEPSCAN_GR = 29801\nVENDOR_ID_COMWAY_GMBH = 29802\nVENDOR_ID_HELSINKI_METROPOLIA_UNIVERSITY_OF_APPLIED_SCIENCES = 29803\nVENDOR_ID_PYROLL_OY = 29804\nVENDOR_ID_BLUEOCEAN_IT_SERVICES = 29805\nVENDOR_ID_DEMOTERA = 29806\nVENDOR_ID_VILLE_DE_SEVRAN = 29807\nVENDOR_ID_NEXTLEAD_GMBH = 29808\nVENDOR_ID_GETNET_TECNOLOGIA = 29809\nVENDOR_ID_MOVING_BYTES_COMMUNICATIONS_SYSTEMENTWICKLUNG_GMBH = 29810\nVENDOR_ID_CONTADURA_GENERAL_DE_LA_NACIN = 29811\nVENDOR_ID_KINETIC_AVIONICS_LIMITED = 29812\nVENDOR_ID_PROLOGICA_SGPS = 29813\nVENDOR_ID_GANDARA_CENTER = 29814\nVENDOR_ID_GYMNASIUM_SALZGITTER_BAD = 29815\nVENDOR_ID_IRI_FRANCE = 29816\nVENDOR_ID_GOLD_MOBILE = 29817\nVENDOR_ID_NATIONAL_FINANCIAL_PARTNERS = 29818\nVENDOR_ID_ELASTIQ_LLC = 29819\nVENDOR_ID_X_GATE = 29820\nVENDOR_ID_SZTUPY_DOT_HU = 29821\nVENDOR_ID_THE_OPTIONS_CLEARING_CORPORATION = 29822\nVENDOR_ID_CALLMINER_INC = 29823\nVENDOR_ID_INPRINT = 29824\nVENDOR_ID_NEOACCEL_INC = 29825\nVENDOR_ID_WIBORNE_INC = 29826\nVENDOR_ID_QNESS_AB = 29827\nVENDOR_ID_BELLGARDT_EMBEDDED_SYSTEMS = 29828\nVENDOR_ID_SOFTWARE_ART = 29829\nVENDOR_ID_ELEKTRO_SLOVENIJA_DOO = 29830\nVENDOR_ID_SCUOLA_SUPERIORE_SANNA = 29831\nVENDOR_ID_SAEIL_SYSTEMS_INC = 29832\nVENDOR_ID_GTZ_INDIA = 29833\nVENDOR_ID_PRO_ZETA_SPOL_SRO_PRAHA = 29834\nVENDOR_ID_BRUGGMANN_ENGINEERING = 29835\nVENDOR_ID_CHINA_INTERNET_NETWORK_INFORMATION_CENTER = 29836\nVENDOR_ID_EREMA_ENGINEERING_RECYCLING_MASCHINEN_UND_ANLAGEN_GMBH = 29837\nVENDOR_ID_DIALOGUESCIENCE_INC = 29838\nVENDOR_ID_DALMAN_TECHNICAL_SERVICES_LTD = 29839\nVENDOR_ID_LLRPORG = 29840\nVENDOR_ID_FAT_SPANIEL_TECHNOLOGIES = 29841\nVENDOR_ID_MACMON_SECURE_GMBH_FORMERLY_MIKADO_SOFT_GMBH = 29842\nVENDOR_ID_CARGOSERVER_AG_FORMERLY_NCODE_GMBH = 29843\nVENDOR_ID_CENTILE_SA = 29844\nVENDOR_ID_VCC_PERFECT_PICTURES_AG = 29845\nVENDOR_ID_SPARKROOM_INC = 29846\nVENDOR_ID_NAV_N_GO_KFT = 29847\nVENDOR_ID_FAR_EASTERN_STATE_UNIVERSITY = 29848\nVENDOR_ID_KSB_AG = 29849\nVENDOR_ID_NETLINE_COMMUNICATIONS_TECHNOLOGIES_NCT_LTD = 29850\nVENDOR_ID_NUCLEAR_WHALES_INFORMATIKAI_BT = 29851\nVENDOR_ID_GRYPHON_NETWORKS = 29852\nVENDOR_ID_ECARE4ALL = 29853\nVENDOR_ID_ADVANCED_MEDICAL_IMAGING_SOLUTIONS_LLC = 29854\nVENDOR_ID_T_MOBILE_CRNA_GORA_DOO = 29855\nVENDOR_ID_ANAPOL = 29856\nVENDOR_ID_READY_SET_COMPANIES = 29857\nVENDOR_ID_CHRYSLER_LLC = 29858\nVENDOR_ID_KJC_SYSTEMS_LTD_CO = 29859\nVENDOR_ID_OCTOPUS_TECHNOLOGIES_LTD = 29860\nVENDOR_ID_N_IX_LLC = 29861\nVENDOR_ID_NANCY_SRO = 29862\nVENDOR_ID_SOFTWARE_LOGIC_INC = 29863\nVENDOR_ID_TYPERIA = 29864\nVENDOR_ID_KJAERULFF_1_A_S = 29865\nVENDOR_ID_METHOD_ANALYSIS_LIMITED = 29866\nVENDOR_ID_SKANSKA = 29867\nVENDOR_ID_BUSINESS_SECURITY = 29868\nVENDOR_ID_UNINET = 29869\nVENDOR_ID_EUROCOM_SATELLITE_SYSTEMS_AS = 29870\nVENDOR_ID_COLLEGE_OF_SOUTHERN_MARYLAND = 29871\nVENDOR_ID_PROJECT_RIALTO = 29872\nVENDOR_ID_OUTPROTECT = 29873\nVENDOR_ID_TEL2WEB_GMBH = 29874\nVENDOR_ID_SORCELLERIE = 29875\nVENDOR_ID_ANTWOORD_VOOR_BEDRIJVEN_ICTU = 29876\nVENDOR_ID_ALLNIGHT_COMPUTING = 29877\nVENDOR_ID_REDUCE_MY_FEE_LLC = 29878\nVENDOR_ID_PITTMAN_HOLDINGS = 29879\nVENDOR_ID_SCHELDE_NAVAL_SHIPBUILDING = 29880\nVENDOR_ID_BROVIC_LTD_CHINA = 29881\nVENDOR_ID_LAMBDA_NETWORKS_LTD = 29882\nVENDOR_ID_TELEMUNE_SOFTWARE_SOLUTIONS_LTD = 29883\nVENDOR_ID_MADASOFT = 29884\nVENDOR_ID_HAUTE_ECOLE_SPECIALISEE_DE_SUISSE_OCCIDENTALE_HES_SO = 29885\nVENDOR_ID_BERONET_GMBH = 29886\nVENDOR_ID_DIRECCIN_GENERAL_DEL_TERRITORIO_MARTIMO = 29887\nVENDOR_ID_SPINETIX_SA = 29888\nVENDOR_ID_UTILIA = 29889\nVENDOR_ID_WORK_MICROWAVE_GMBH = 29890\nVENDOR_ID_BLUELON = 29891\nVENDOR_ID_GENESILICO = 29892\nVENDOR_ID_JEROEN_KOEKKOEK = 29893\nVENDOR_ID_FRENCHCRIES = 29894\nVENDOR_ID_FAM_LIST_SCHLATTSTALL = 29895\nVENDOR_ID_VDH_SOFT = 29896\nVENDOR_ID_QSENT = 29897\nVENDOR_ID_ACROPOLIS_SOFTWARE_SPRL = 29898\nVENDOR_ID_ROOSEVELT_UNIVERSITY = 29899\nVENDOR_ID_EDEKA_AKTIENGESELLSCHAFT = 29900\nVENDOR_ID_ANAHEIM_ENGINEERING_CO_LTD = 29901\nVENDOR_ID_DYTECNA_LIMITED = 29902\nVENDOR_ID_COUNSELS_CHAMBERS_LIMITED = 29903\nVENDOR_ID_ABACON_PRODUCTS_GMBH = 29904\nVENDOR_ID_PERRIT = 29905\nVENDOR_ID_DYBALA = 29906\nVENDOR_ID_WEBMEDIA_AS = 29907\nVENDOR_ID_INDIGOVISION_LTD = 29908\nVENDOR_ID_CICERO_NETWORKS_LIMITED = 29909\nVENDOR_ID_OPEN_SYSTEMS_MANAGEMENT_LTD = 29910\nVENDOR_ID_OPEN_TEC = 29911\nVENDOR_ID_HX_TECHNOLOGIES_INC = 29912\nVENDOR_ID_INTELLIGENT_TRANSPORTATION_VIDEO = 29913\nVENDOR_ID_NETWORKCONCEPTS_BV = 29914\nVENDOR_ID_NORTHWOOD_LOGIC = 29915\nVENDOR_ID_LIGHTWORKS_TECHNOLOGY_INC = 29916\nVENDOR_ID_GUANGZHOU_NEW_POSTCOM_EQUIPMENT_COLTD = 29917\nVENDOR_ID_URALSVJAZINFORM_INC = 29918\nVENDOR_ID_CJSC_ORBITA = 29919\nVENDOR_ID_MYSOFTIT_GMBH = 29920\nVENDOR_ID_FV_SERVICE_KG = 29921\nVENDOR_ID_STARMARK_TRADING_LTD = 29922\nVENDOR_ID_NETRIS = 29923\nVENDOR_ID_GTD_SISTEMAS_DE_INFORMACION = 29924\nVENDOR_ID_MULTIPLEX_LTD = 29925\nVENDOR_ID_SANTA_ROSA_SA = 29926\nVENDOR_ID_LOHR = 29927\nVENDOR_ID_RELAYHEALTH = 29928\nVENDOR_ID_UNITED_STATES_STEEL_CORPORATION = 29929\nVENDOR_ID_KOINEMA_SRL = 29930\nVENDOR_ID_CAMBRIDGE_IMAGING_SYSTEMS = 29931\nVENDOR_ID_SOUND4 = 29932\nVENDOR_ID_APOAL_INC = 29933\nVENDOR_ID_HYPERMEDIA_SYSTEMS_INC_USA = 29934\nVENDOR_ID_ABC_STARTSIDEN_AS = 29935\nVENDOR_ID_X15 = 29936\nVENDOR_ID_ELLIS_STEWART_DESIGN = 29937\nVENDOR_ID_THE_SWEDISH_COAST_GUARD = 29938\nVENDOR_ID_ALPHA_RED_INC = 29939\nVENDOR_ID_KAWHAI = 29940\nVENDOR_ID_PAVLOV_MEDIA_INC = 29941\nVENDOR_ID_HIMALAYA_TECHNOLOGIES = 29942\nVENDOR_ID_SHELTON_JOHNS_TECHNOLOGY_GROUP = 29943\nVENDOR_ID_COARA_INC = 29944\nVENDOR_ID_CHINAUNINET = 29945\nVENDOR_ID_OOO_MEDIA_MARKT_SATURN = 29946\nVENDOR_ID_CNW_CONSULTING_NETWORK_AB = 29947\nVENDOR_ID_CONSELL_DE_MALLORCA = 29948\nVENDOR_ID_CASSIOPEA_ONLINE_SRL = 29949\nVENDOR_ID_GMIT_GMBH = 29950\nVENDOR_ID_DCOM_SPOL_S_RO = 29951\nVENDOR_ID_JSC_ALLIANCE_GROUP_HOLDING = 29952\nVENDOR_ID_DEBURIT_CHEMICAL_ENGINEERING_GMBH = 29953\nVENDOR_ID_HEALTH_IDENTITY_MANAGEMENT_CONSORTIUM_HIMC = 29954\nVENDOR_ID_MEDINA_VOIP = 29955\nVENDOR_ID_FREEWAVE_TECHNOLOGIES = 29956\nVENDOR_ID_PCB_PIEZOTRONICS_INC = 29957\nVENDOR_ID_WASHTENAW_COMMUNITY_COLLEGE = 29958\nVENDOR_ID_KOLEJNET = 29959\nVENDOR_ID_SPECURIO_STUDIO = 29960\nVENDOR_ID_ASERVER_NV = 29961\nVENDOR_ID_TAG_SYSTEMS_SA = 29962\nVENDOR_ID_IRON_COUNCIL = 29963\nVENDOR_ID_TRIBUNAL_DE_CONTAS_DOS_MUNICIPIOS_DO_ESTADO_DO_PAR = 29964\nVENDOR_ID_SHINYMARK_ENTERPRISES_LIMITED = 29965\nVENDOR_ID_ADVANCED_CONCEPT_TECHNOLOGY_LTD = 29966\nVENDOR_ID_BR_DATA_SYSTEMS = 29967\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DE_CAMPINAS_UNICAMP = 29968\nVENDOR_ID_MORISHIMANET = 29969\nVENDOR_ID_ZERVINA_TECHNOLOGIES_LLC = 29970\nVENDOR_ID_DAMOGRAN_APATHETIC_SOLUTIONS = 29971\nVENDOR_ID_COMPICO = 29972\nVENDOR_ID_GEMEX_SYSTEMS_INC = 29973\nVENDOR_ID_E_WEB_INFORMATION_CO = 29974\nVENDOR_ID_GUANGZHOU_GREAT_SYMBOL_INFORMATION_TECHNOLOGY_COLTD = 29975\nVENDOR_ID_NARA_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY = 29976\nVENDOR_ID_PALM_TREE_TECHNOLOGY_INC = 29977\nVENDOR_ID_GOTLAND_UNIVERSITY = 29978\nVENDOR_ID_BRUKER_AXS_GMBH = 29979\nVENDOR_ID_SMART_COM_DOO = 29980\nVENDOR_ID_MARBEN_PRODUCTS = 29981\nVENDOR_ID_MASSIVE_ENTERTAINMENT = 29982\nVENDOR_ID_WAVES_AUDIO_LTD = 29983\nVENDOR_ID_BYELORUSSIAN_STATE_UNIVERSITY_OF_INFORMATICS_AND_RADIOELECTRONICS_BSUIR = 29984\nVENDOR_ID_DETRACOM_SAS = 29985\nVENDOR_ID_NET_STREAMS = 29986\nVENDOR_ID_HIVEMIND_SYSTEMS_INC = 29987\nVENDOR_ID_CALABRIO_INC = 29988\nVENDOR_ID_QWAQ_INC = 29989\nVENDOR_ID_JOHN_SMITH_NETWORK_MANAGEMENT = 29990\nVENDOR_ID_MACIF = 29991\nVENDOR_ID_PONT_TECHNOLOGY_COLTD = 29992\nVENDOR_ID_NET_MARVELLOUS = 29993\nVENDOR_ID_CONCORD_GMBH = 29994\nVENDOR_ID_FUSAGX = 29995\nVENDOR_ID_THE_LORENTZ_GROUP = 29996\nVENDOR_ID_LAVANET_INC = 29997\nVENDOR_ID_KURASHIKI_CABLE_TELEVISION_COLTD = 29998\nVENDOR_ID_MICROC_DESIGN_SRL = 29999\nVENDOR_ID_UNIVERSITY_OF_WESTERN_SYDNEY = 30000\nVENDOR_ID_BROWAN_COMMUNICATIONS_INCORPORATION = 30001\nVENDOR_ID_FREEPP_INCORPORATION = 30002\nVENDOR_ID_HIFLEX_GMBH = 30003\nVENDOR_ID_TERRANUA_LTD = 30004\nVENDOR_ID_RAYBIT_SYSTEMS_KOREA_INC = 30005\nVENDOR_ID_MOBILE_FUN = 30006\nVENDOR_ID_DOBSK = 30007\nVENDOR_ID_BANK_AUSTRIA_REAL_INVEST_GMBH = 30008\nVENDOR_ID_INFORMATION_INDUSTRY_COMPANY = 30009\nVENDOR_ID_EMBOTICS_CORPORATION = 30010\nVENDOR_ID_ITOCHU_CABLE_SYSTEM_CORP = 30011\nVENDOR_ID_IPOQUE_GMBH = 30012\nVENDOR_ID_DEN_SELVEJENDE_INSTITUTION_PAUL_BARGSE_KOLLEGIET = 30013\nVENDOR_ID_PECSI_TUDOMANYEGYETEM_KLINIKAI_KOZPONT = 30014\nVENDOR_ID_KBC_BANK = 30015\nVENDOR_ID_ANEL_ELEKTRONIK_AG = 30016\nVENDOR_ID_TAG_AVIATION = 30017\nVENDOR_ID_FUSIONIO = 30018\nVENDOR_ID_DIVERSIFIED_SALES_AND_SERVICE_INC = 30019\nVENDOR_ID_SILESIAN_UNIVERSITY_OF_TECHNOLOGY = 30020\nVENDOR_ID_MHLBAUER_AG = 30021\nVENDOR_ID_GUANGDONG_CIRRUS_SCI_TECH_DEVELOPMENT_CO_LTD = 30022\nVENDOR_ID_ITS_TELECOM = 30023\nVENDOR_ID_IN_TUITION_NETWORKS_LTD = 30024\nVENDOR_ID_MARKUS_WIDMER = 30025\nVENDOR_ID_BLUE_CARAVEL = 30026\nVENDOR_ID_BRAINFAT_NETWORKING = 30027\nVENDOR_ID_NOVA_CATV_INC = 30028\nVENDOR_ID_NENTRON_TECHNOLOGY = 30029\nVENDOR_ID_JAMESOFFNET = 30030\nVENDOR_ID_PENGUINLABS_LTD = 30031\nVENDOR_ID_BEIJING_XINTONG_HUAAN_TECHNOLOGIES_CO_LTD = 30032\nVENDOR_ID_ATABYTE = 30033\nVENDOR_ID_IIJ_ENGINEERINGINC_FORMERLY_NET_CAREINC = 30034\nVENDOR_ID_FORMOSA_WIRELESS_SYSTEMS_CORP = 30035\nVENDOR_ID_NOMAD_DIGITAL_LTD = 30036\nVENDOR_ID_COMPANY_EXTRIM_PRO_LTD = 30037\nVENDOR_ID_ALMDUDLER_LIMONADE_A_S_KLEIN_GMBH_CO_KG = 30038\nVENDOR_ID_TOPDOG_SOFTWARECOM = 30039\nVENDOR_ID_TARTU_UNIVERSITY_HOSPITAL = 30040\nVENDOR_ID_UNIVERSITT_AUGSBURG = 30041\nVENDOR_ID_DYNACO_OY = 30042\nVENDOR_ID_CORAL_AUTOMAO_MUNICIPAL = 30043\nVENDOR_ID_WALTER_DORWIN_TEAGUE_ASSOCIATES_INC = 30044\nVENDOR_ID_DAVIDFUCHSCA = 30045\nVENDOR_ID_RH_TEC_BUSINESS_GMBH = 30046\nVENDOR_ID_WORTHTEK = 30047\nVENDOR_ID_BNC_TECHNOLOGIES_COLTD = 30048\nVENDOR_ID_ACORN_ACTIVE_MEDIA_FOUNDATION = 30049\nVENDOR_ID_JUSHRI_TECHNOLOGIES_INC = 30050\nVENDOR_ID_EDICOM_INTERCAMBIO_ELECTRONICO_DE_DATOS_Y_COM_SL = 30051\nVENDOR_ID_AGORA_SA = 30052\nVENDOR_ID_MDOFFICE_INC = 30053\nVENDOR_ID_UNTANGLE_INC = 30054\nVENDOR_ID_BKK_ESSANELLE = 30055\nVENDOR_ID_BANDO_ELECTRONIC_COMMUNICATION_CO_LTD = 30056\nVENDOR_ID_AIO_SYSTEMS = 30057\nVENDOR_ID_OTAKINGSE = 30058\nVENDOR_ID_ALARISLABS = 30059\nVENDOR_ID_SEVENSTAX = 30060\nVENDOR_ID_IMPRIMERIE_NATIONALE = 30061\nVENDOR_ID_CRIX_INTERNATIONAL = 30062\nVENDOR_ID_KANTONSSPITAL_LUZERN = 30063\nVENDOR_ID_JENS_KAISER = 30064\nVENDOR_ID_ARISTA_NETWORKS_INC_FORMERLY_ARASTRA_INC = 30065\nVENDOR_ID_SWISSDOTNET = 30066\nVENDOR_ID_IMPRINT_GLOBAL_PTY_LTD = 30067\nVENDOR_ID_WALKER_CHANDIOK_GRANT_THORNTON = 30068\nVENDOR_ID_CANDLELIGHT_SOFTWARE = 30069\nVENDOR_ID_LUFTHANSA_SYSTEMS_INDONESIA = 30070\nVENDOR_ID_COLBY_DILLION = 30071\nVENDOR_ID_THE_GOVERNMENT_OF_BRUNEI_DARUSSALAM = 30072\nVENDOR_ID_WYS_SOC_CORPORATION = 30073\nVENDOR_ID_BEIJING_SHARENET_INFORMATION_TECHNOLOGY_COLTD = 30074\nVENDOR_ID_HUMANOMED = 30075\nVENDOR_ID_ATILF_ANALYSE_ET_TRAITEMENT_AUTOMATIQUE_DE_LA_LANGUE_FRANCAISE = 30076\nVENDOR_ID_CLANCONLEYCOM = 30077\nVENDOR_ID_NOVELLA_SATCOMS_LIMITED = 30078\nVENDOR_ID_OPEN_MOBILE_ALLIANCE_OMA = 30079\nVENDOR_ID_FRAPORT_AG = 30080\nVENDOR_ID_PHILIP_MORRIS_USA = 30081\nVENDOR_ID_DAVID_COMPUTER_SERVICE = 30082\nVENDOR_ID_INTELLECA = 30083\nVENDOR_ID_1DIANCOM = 30084\nVENDOR_ID_KNOPAD_SOFTWARE_SRL = 30085\nVENDOR_ID_ARINBE_TECHNOLOGIES_INC = 30086\nVENDOR_ID_NEU_INFO = 30087\nVENDOR_ID_WUHAN_GEWEI_ELECTRONIC_TECHNOLOGY_CO_LTD = 30088\nVENDOR_ID_AK_KAMAL_ISCC_LLP = 30089\nVENDOR_ID_SHAIKH = 30090\nVENDOR_ID_SEABRIGHT_INSURANCE_COMPANY = 30091\nVENDOR_ID_ZAVAROVALNICA_MARIBOR_DD = 30092\nVENDOR_ID_GEMAC_GESELLSCHAFT_FR_MIKROELEKTRONIKANWENDUNG_CHEMNITZ_MBH = 30093\nVENDOR_ID_BEIJING_US_SINO_DIVERSE_TELECOM_EQUIPMENT_COLTD = 30094\nVENDOR_ID_KOM_PAKT = 30095\nVENDOR_ID_DATAWAY_GMBH = 30096\nVENDOR_ID_FAMILIE_DIETER_BAERWOLF = 30097\nVENDOR_ID_BBP_AG = 30098\nVENDOR_ID_MORPHOTRUST_USA_FORMERLY_L_1_IDENTITY_SOLUTIOINS_INC = 30099\nVENDOR_ID_GREENBYTES_INC = 30100\nVENDOR_ID_SUNIX_CO_LTD = 30101\nVENDOR_ID_TEAM_COMMUNICATION_TECHNOLOGY_MANAGEMENT_GMBH = 30102\nVENDOR_ID_ONE_REEL = 30103\nVENDOR_ID_ERR = 30104\nVENDOR_ID_JARS_OG = 30105\nVENDOR_ID_BOARD_OF_EUROPEAN_STUDENTS_OF_TECHNOLOGY = 30106\nVENDOR_ID_SEACON_TERMINALS_LTD = 30107\nVENDOR_ID_XARAGUA_ENTERPRISE_CORPORATION = 30108\nVENDOR_ID_COMPIT_SRL = 30109\nVENDOR_ID_MDEV_DESENVOLVIMENTO_DE_SOFTWARE_PARA_CELULAR_LTDA = 30110\nVENDOR_ID_PACIFIC_NETWORK_IMAGING_INC = 30111\nVENDOR_ID_NETWORK_SOLUTIONS_PRIVATE_LIMITED = 30112\nVENDOR_ID_FORNOVA = 30113\nVENDOR_ID_RESERVED_4 = 30114\nVENDOR_ID_DAMIEN_DEGOIS = 30115\nVENDOR_ID_JIMS_GROUP = 30116\nVENDOR_ID_TELEFIELD_INC = 30117\nVENDOR_ID_HOSTDIMECOM_INC = 30118\nVENDOR_ID_UNION_FENOSA_SA = 30119\nVENDOR_ID_NAYATEK_SL = 30120\nVENDOR_ID_SCOYO = 30121\nVENDOR_ID_MDBNET = 30122\nVENDOR_ID_MARESCOM_GMBH = 30123\nVENDOR_ID_ABAJAX = 30124\nVENDOR_ID_ANDURAS_AG = 30125\nVENDOR_ID_LSI_JAPAN_COLTD = 30126\nVENDOR_ID_DEFT_LABS_INC = 30127\nVENDOR_ID_NEOVEST_INC = 30128\nVENDOR_ID_TRASK_SOLUTIONS = 30129\nVENDOR_ID_HYPERWAVE_AG = 30130\nVENDOR_ID_OMA = 30131\nVENDOR_ID_ANAC = 30132\nVENDOR_ID_ICONTROL_NETWORKS = 30133\nVENDOR_ID_BITSCAPE = 30134\nVENDOR_ID_E_MEHLBOXEU = 30135\nVENDOR_ID_SHARIF_UNIVERSITY_OF_TECHNOLOGY = 30136\nVENDOR_ID_SHANDONG_TRANSPARENT_COMMUNICATIONS_COLTD = 30137\nVENDOR_ID_SPARKASSEN_INFORMATIK_GMBH_CO_KG = 30138\nVENDOR_ID_AMS_ENGINEERING_STICHT_GMBH = 30139\nVENDOR_ID_CONEL_SRO = 30140\nVENDOR_ID_LANDESBETRIEB_DATEN_UND_INFORMATION_RHEINLAND_PFALZ = 30141\nVENDOR_ID_NATIONAL_MAGAZINE_COMPANY = 30142\nVENDOR_ID_DECISIONSOFT_LTD = 30143\nVENDOR_ID_KEPWARE_TECHNOLOGIES = 30144\nVENDOR_ID_ACTIVE_MEDIA_ARCHITECTS_INC = 30145\nVENDOR_ID_DOVETAIL_STORAGE_INC = 30146\nVENDOR_ID_MAGNUSNET = 30147\nVENDOR_ID_CROSSWORLD = 30148\nVENDOR_ID_TECNOVA_LTDA = 30149\nVENDOR_ID_NIZHNY_TAGIL_IRON_STEEL_WORKS = 30150\nVENDOR_ID_ZIMBABWE_REVENUE_AUTHORITY = 30151\nVENDOR_ID_NLOGY_SRO = 30152\nVENDOR_ID_KEYSTONE_ELECTRONIC_SOLUTIONS = 30153\nVENDOR_ID_E_VOX = 30154\nVENDOR_ID_OPENBSD_PROJECT = 30155\nVENDOR_ID_THE_POSITIVE_INTERNET_COMPANY_LTD = 30156\nVENDOR_ID_KALOPA_RESEARCH_LIMITED = 30157\nVENDOR_ID_EMPRESA_BRASILEIRA_DE_TELECOMUNICACOES_S_A_EMBRATEL = 30158\nVENDOR_ID_SCIENTIFIC_GAMES_RACING = 30159\nVENDOR_ID_INSOMNIAC_GAMES_INC = 30160\nVENDOR_ID_ORBITAL_SPUDS_DEVELOPMENT_INC = 30161\nVENDOR_ID_FAREZ = 30162\nVENDOR_ID_JOHANNES_H_LAXDAL = 30163\nVENDOR_ID_RADIUM_NETWORK_SOLUTIONS = 30164\nVENDOR_ID_DEREK_BELROSE = 30165\nVENDOR_ID_BLUE_RIDGE_NETWORKS_INC = 30166\nVENDOR_ID_TAVASTI_SOLUTIONS_OY = 30167\nVENDOR_ID_DNSEE = 30168\nVENDOR_ID_PRAGMAS_JAN_SCHLOSSER = 30169\nVENDOR_ID_SMART_HEALTH_SOLUTIONS_PTY_LTD = 30170\nVENDOR_ID_NET_SPACE_DANIEL_KIPER = 30171\nVENDOR_ID_OPENGOSS_CORPORATION = 30172\nVENDOR_ID_CONVEY_PLUS_TC = 30173\nVENDOR_ID_DEKA_WORKS = 30174\nVENDOR_ID_JEFF_KNECHT = 30175\nVENDOR_ID_HIROTOSHI_HAMADA = 30176\nVENDOR_ID_GEODESIC_LIMITED = 30177\nVENDOR_ID_MARTIN_COUNTY_SCHOOL_DISTRICT = 30178\nVENDOR_ID_CERVANTES_SA = 30179\nVENDOR_ID_PETRAYS_LP = 30180\nVENDOR_ID_PUBLIC_WORKS_GOVERNMENT_SERVICES_CANADA = 30181\nVENDOR_ID_3G_FACTORY_SARL = 30182\nVENDOR_ID_KES_INC = 30183\nVENDOR_ID_GLEIM_INTERNET_INC = 30184\nVENDOR_ID_AWEK_MICRODATA = 30185\nVENDOR_ID_TRINAMIC_SOFTWARE_FACTORY = 30186\nVENDOR_ID_HCS_GMBH = 30187\nVENDOR_ID_MB_TECHNOLOGY_GMBH = 30188\nVENDOR_ID_BRAVURA_SOLUTIONS_UK_LIMITED = 30189\nVENDOR_ID_SOLERA_NETWORKS = 30190\nVENDOR_ID_IPTRADE_SA = 30191\nVENDOR_ID_VERAZ_NETWORKS = 30192\nVENDOR_ID_COMDATANETWORK_INC = 30193\nVENDOR_ID_EGON_FRERICH = 30194\nVENDOR_ID_CARLSON_WIRELESS_TECHNOLOGIES_INC = 30195\nVENDOR_ID_SMITH_TRAVEL_RESEARCH = 30196\nVENDOR_ID_KESTANCOUK = 30197\nVENDOR_ID_COHERENT_SOLUTIONS = 30198\nVENDOR_ID_ABACA_TECHNOLOGY_CORPORATION = 30199\nVENDOR_ID_EPRIZE_LLC = 30200\nVENDOR_ID_METAVERSE_REPUBLIC = 30201\nVENDOR_ID_HCE_ENGINEERING = 30202\nVENDOR_ID_FORSCHUNGSVERBUND_BERLIN_EV = 30203\nVENDOR_ID_FACULTY_OF_PHYSICS_AND_APPLIED_INFORMATICS_UNIVERSITY_OF_LODZ = 30204\nVENDOR_ID_SIRRIX_AG_SECURITY_TECHNOLOGIES = 30205\nVENDOR_ID_INVISIBLE_SOFTWARE_LTD = 30206\nVENDOR_ID_LEVEL_3_SOLUTIONS_LLC = 30207\nVENDOR_ID_FIRECODE_SOLUES_EM_TECNOLOGIA_LTDA = 30208\nVENDOR_ID_UNIVERSITA_CA_FOSCARI_VENEZIA = 30209\nVENDOR_ID_LOGALTY_SERVICIOS_DE_TERCERO_DE_CONFIANZA_SL_FORMERLY_POSTALTRUST_SL = 30210\nVENDOR_ID_THE_CHUNICHI_SHIMBUN_CO_LTD = 30211\nVENDOR_ID_ON_TELECOMM = 30212\nVENDOR_ID_VERTEX_PHARMACEUTICALS = 30213\nVENDOR_ID_CVSDUDE_PTY_LTD = 30214\nVENDOR_ID_SERENITY_INFORMATION_SYSTEMS = 30215\nVENDOR_ID_AZOLIA = 30216\nVENDOR_ID_OSINET_SA = 30217\nVENDOR_ID_ALTAVOZ_SA = 30218\nVENDOR_ID_VERIVUE_INC = 30219\nVENDOR_ID_WAVESTREAM_CORP = 30220\nVENDOR_ID_UNBOUNDID_CORP = 30221\nVENDOR_ID_HOME_CREDIT_FINANCE_UKRAINE = 30222\nVENDOR_ID_OOE_GEBIETSKRANKENKASSE = 30223\nVENDOR_ID_NCC_HOORN = 30224\nVENDOR_ID_COTENDO = 30225\nVENDOR_ID_MAIRIE_DE_BESANON_FRANCE = 30226\nVENDOR_ID_CHANNELOT_LTD = 30227\nVENDOR_ID_VISIPIA = 30228\nVENDOR_ID_DEBIAN_COMMUNITYORG = 30229\nVENDOR_ID_DIMEDIS_GMBH = 30230\nVENDOR_ID_MORPHISM = 30231\nVENDOR_ID_WWWTHEMAINENET = 30232\nVENDOR_ID_JOHN_MUIR_HEALTH = 30233\nVENDOR_ID_NBT_INFRA = 30234\nVENDOR_ID_GORDON_LOUIS_TECHNOLOGIES = 30235\nVENDOR_ID_DESKTONE_INC = 30236\nVENDOR_ID_ETEVAN_TECHNOLOGIES_CO_LTD = 30237\nVENDOR_ID_XANDMAIL = 30238\nVENDOR_ID_ARCHISYS_SARL = 30239\nVENDOR_ID_VIVESTA = 30240\nVENDOR_ID_JEFFREY_RICKER_LLC = 30241\nVENDOR_ID_INFO_CONSULTORIA_E_INFORMATICA_LTDA = 30242\nVENDOR_ID_NETWORKCOAT_GMBH = 30243\nVENDOR_ID_DAZZLE = 30244\nVENDOR_ID_THE_WASHINGTON_POST_COMPANY = 30245\nVENDOR_ID_DIVENTUS_GMBH = 30246\nVENDOR_ID_COOPERS_PEELE_FRANCE_SARL = 30247\nVENDOR_ID_WEBKUTEER = 30248\nVENDOR_ID_MAREKPRIVAT = 30249\nVENDOR_ID_TELECOM_DESIGN_FRANCE = 30250\nVENDOR_ID_CAMPUSLAN_SOFTWARE_GMBH = 30251\nVENDOR_ID_JETAIR_NV = 30252\nVENDOR_ID_CERTISIGN_CERTIFICADORA_DIGITAL_SA = 30253\nVENDOR_ID_THE_MAIN_STREET_AMERICA_GROUP = 30254\nVENDOR_ID_COUNTY_OF_SAN_BERNARDINO = 30255\nVENDOR_ID_TELECOMMUNICATION_TECHNOLOGIES_LTD = 30256\nVENDOR_ID_INTRCOMM_TECHNOLOGY = 30257\nVENDOR_ID_XALYO_SYSTEMS = 30258\nVENDOR_ID_LWSYSTEMS_GMBH_CO_KG = 30259\nVENDOR_ID_ZENITEL_NETHERLANDS_BV = 30260\nVENDOR_ID_HIGHERGROUND_INC = 30261\nVENDOR_ID_CACHOLONG = 30262\nVENDOR_ID_KLOPF = 30263\nVENDOR_ID_AXIOMETRIC_LLC = 30264\nVENDOR_ID_HINFOX_BT = 30265\nVENDOR_ID_INCA_DIGITAL_PRINTERS_LTD = 30266\nVENDOR_ID_SOFINCO = 30267\nVENDOR_ID_PENN_WAREHOUSING_DISTRIBUTION_INC = 30268\nVENDOR_ID_VIA_DONAU_STERREICHISCHE_WASSERSTRAENGESELLSCHAFT_MBH = 30269\nVENDOR_ID_MICRODATA_TECNOLOGIA_LTDA = 30270\nVENDOR_ID_NETSENSE = 30271\nVENDOR_ID_CACHE_IQ_INC_FORMERLY_STORSPEED_INC = 30272\nVENDOR_ID_SAIRYX = 30273\nVENDOR_ID_GREENFOSSIL_PTE_LTD = 30274\nVENDOR_ID_TERACORTEX = 30275\nVENDOR_ID_OEAMTC = 30276\nVENDOR_ID_SOFTWARE_CELLULAR_NETWORK_LTD = 30277\nVENDOR_ID_PEYKASA_MESSAGEWARE_CO = 30278\nVENDOR_ID_GLADSERV_LIMITED = 30279\nVENDOR_ID_DELTA4_BUSINESS_SOLUTIONS_GMBH = 30280\nVENDOR_ID_AUSSIEHQ_PTY_LTD = 30281\nVENDOR_ID_HAMMOND_STREET_DEVELOPMENTS_PTY_LTD = 30282\nVENDOR_ID_GRADIOR_GROUP_AS = 30283\nVENDOR_ID_INTERSOFT = 30284\nVENDOR_ID_TMT_SYSTEM = 30285\nVENDOR_ID_TRIDYMEDIA = 30286\nVENDOR_ID_AGITO_NETWORKS_INC = 30287\nVENDOR_ID_ALOG_DATACENTERS_DO_BRASIL_S_A = 30288\nVENDOR_ID_BRIAN_W_BUSH = 30289\nVENDOR_ID_VANGENECHTEN_PACKAGING = 30290\nVENDOR_ID_SUJANSKY_ASSOCIATES_LLC = 30291\nVENDOR_ID_MONIT24PL = 30292\nVENDOR_ID_COLLGE_DUNOYER_DE_SEGONZAC = 30293\nVENDOR_ID_INNOTRANS_COMMUNICATIONS_INC = 30294\nVENDOR_ID_I2NET_CHRISTIAN_NORDMANN = 30295\nVENDOR_ID_INNOVATION_SUPPORT_CENTRE = 30296\nVENDOR_ID_THE_CLOCKWORK_LAB = 30297\nVENDOR_ID_INDUSTRIAL_CONTROL_AND_COMMUNICATION_LIMITED = 30298\nVENDOR_ID_SEP_BULGARIA_JSC = 30299\nVENDOR_ID_INTERNETWORKING_BROADBAND_CONSULTING_CO_LTD = 30300\nVENDOR_ID_INVADA_RECORDS_PTY_LTD = 30301\nVENDOR_ID_NUSUARA_TECHNOLOGIES_SDN_BHD = 30302\nVENDOR_ID_KOMSENS = 30303\nVENDOR_ID_CHAMBRE_DAGRICULTURE_DU_BAS_RHIN = 30304\nVENDOR_ID_ITIS_HOLDINGS_PLC = 30305\nVENDOR_ID_SATEL_OY = 30306\nVENDOR_ID_INVIDI_TECHNOLOGIES = 30307\nVENDOR_ID_CLEARSPRING_TECHNOLOGIES_INC = 30308\nVENDOR_ID_SVENSKA_LINUXFRENINGEN = 30309\nVENDOR_ID_REMIGIO_CONTI = 30310\nVENDOR_ID_CARTIZA_NETWORKS = 30311\nVENDOR_ID_EDUCAGRI = 30312\nVENDOR_ID_INDANET_AG = 30313\nVENDOR_ID_SELTEC_COMPUTERS_LTD = 30314\nVENDOR_ID_PAPIERFABRIK_PALM_GMBH_CO_KG = 30315\nVENDOR_ID_UNASSIGNED_37 = 30316\nVENDOR_ID_FIRST_SENSOR_TECHNOLOGY_GMBH = 30317\nVENDOR_ID_GSOFT_BG = 30318\nVENDOR_ID_SMARTPROPERTYMANAGER_LTD = 30319\nVENDOR_ID_EXELTECH = 30320\nVENDOR_ID_UNISON_TECHNOLOGIES = 30321\nVENDOR_ID_INTERNATIONAL_BROADBAND_ELECTRIC_COMMUNICATIONS_INC_IBEC = 30322\nVENDOR_ID_EIGEN_LLC = 30323\nVENDOR_ID_INTERFACE_MASTERS_INC = 30324\nVENDOR_ID_GRIN_AB = 30325\nVENDOR_ID_SHOREGROUP_INC = 30326\nVENDOR_ID_METRO_SERVERS_INC = 30327\nVENDOR_ID_TRAVIS_HEIN = 30328\nVENDOR_ID_CONRAC_GMBH = 30329\nVENDOR_ID_ATOM_CONSULTANTS_COLTD = 30330\nVENDOR_ID_OCTANT_INFORMATIQUE = 30331\nVENDOR_ID_EXXCELLENT_SOLUTIONS = 30332\nVENDOR_ID_GRIPS_GILLEN_PARTNER = 30333\nVENDOR_ID_KORSCIENT_CONSULTING_LIMITED = 30334\nVENDOR_ID_DXI_NETWORKS = 30335\nVENDOR_ID_EIRTEIC_CONSULTING_LTD = 30336\nVENDOR_ID_LUCEAT_SPA = 30337\nVENDOR_ID_SMART421 = 30338\nVENDOR_ID_NATIONAL_CENTER_OF_DIGITAL_SIGNATURE_AUTHENTICATION_MINISTRY_OF_INFORMATION_AND_COMMUNICATIONS_OF_VIET_NAM = 30339\nVENDOR_ID_MODERNTIMES = 30340\nVENDOR_ID_DELTACAST = 30341\nVENDOR_ID_PELLUCID_CONSULTING_LLC = 30342\nVENDOR_ID_MIDDLE_EAST_EDUCATION_THROUGH_TECHNOLOGY = 30343\nVENDOR_ID_POSSIMO_TECHNOLOGIES_SDN_BHD = 30344\nVENDOR_ID_TMS_LLC = 30345\nVENDOR_ID_IT_DESIGN_SOLUTIONS_GMBH = 30346\nVENDOR_ID_BEKATUL_PORT = 30347\nVENDOR_ID_W_I_E_S_E_RNET = 30348\nVENDOR_ID_KVANT_EFIR = 30349\nVENDOR_ID_CAUCHO_TECHNOLOGY_INC = 30350\nVENDOR_ID_PHILIP_GLADSTONE = 30351\nVENDOR_ID_SNEUDERTDE = 30352\nVENDOR_ID_SYMMETRIA_HUNGARY_LTD = 30353\nVENDOR_ID_EPIQ_LIFE_SCIENCE_AB = 30354\nVENDOR_ID_DIGITAL_RESEARCH_SERVICES_LLC = 30355\nVENDOR_ID_DOMEO_BV = 30356\nVENDOR_ID_UNIX_NETWORK = 30357\nVENDOR_ID_PROATRIA_LTD = 30358\nVENDOR_ID_TANGO_NETWORKS = 30359\nVENDOR_ID_TRUSTWAVE_HOLDINGS_INC_2 = 30360\nVENDOR_ID_TRIPLE_PLAY_COMMUNICATIONS = 30361\nVENDOR_ID_BRANDWIDTH = 30362\nVENDOR_ID_NV_DEVOTEAM_TELECOM_MEDIA = 30363\nVENDOR_ID_NEWMEDIA_PUBLICATIONS_LTD = 30364\nVENDOR_ID_INEO_SUEZ_GROUP_INEO_SYSTRANS = 30365\nVENDOR_ID_M_TECH = 30366\nVENDOR_ID_DRAGONFLY_TECHNOLOGIES_PTY_LTD = 30367\nVENDOR_ID_WHITEWALL_NETWORKS = 30368\nVENDOR_ID_GRUPA_LOTOS_SA = 30369\nVENDOR_ID_GIHAR_LTD = 30370\nVENDOR_ID_FINANCIAL_LINK_SDN_BHD = 30371\nVENDOR_ID_SANBLAZE_TECHNOLOGY_INC = 30372\nVENDOR_ID_WALLIX = 30373\nVENDOR_ID_OPENCODE_SYSTEMS_LTD = 30374\nVENDOR_ID_INNOVATURE_LABS = 30375\nVENDOR_ID_OUTRIGHT_SOLUTIONS = 30376\nVENDOR_ID_BASEBLACK_LTD = 30377\nVENDOR_ID_TRUE_CORPORATION_PCL = 30378\nVENDOR_ID_SOUTHCOAST_HEALTH_SYSTEM = 30379\nVENDOR_ID_AGGIENERDS = 30380\nVENDOR_ID_FRIENDSHIP_SYSTEMS = 30381\nVENDOR_ID_KRISTOFF_KIEFER = 30382\nVENDOR_ID_VIACOM_INFORMATICS_LTD = 30383\nVENDOR_ID_INTERJATO_TELECOM = 30384\nVENDOR_ID_CAVOK_SOFTWARE_SYSTEMS_GMBH = 30385\nVENDOR_ID_SOFTWARE_SERVICE_CHRISTOPH_BACH = 30386\nVENDOR_ID_SINGLESNETCOM = 30387\nVENDOR_ID_NOBISCUM = 30388\nVENDOR_ID_HANGZHOU_DIGICAST_TECHNOLOGY_CO_LTD = 30389\nVENDOR_ID_CITY_OF_GARDEN_GROVE = 30390\nVENDOR_ID_ALEX_POTTER_CONSULTING = 30391\nVENDOR_ID_GLOBOLOG_GMBH = 30392\nVENDOR_ID_CIBENIX = 30393\nVENDOR_ID_KYOTO_UNIVERSITY = 30394\nVENDOR_ID_ALHAMBRA_EIDOS = 30395\nVENDOR_ID_CAMBRIDGE_CONSULTANTS = 30396\nVENDOR_ID_TELERAD_SA = 30397\nVENDOR_ID_LEADER_TECHNOLOGIES = 30398\nVENDOR_ID_LOGISYNC_LLC = 30399\nVENDOR_ID_RED_CONDOR_INC = 30400\nVENDOR_ID_FEDORA_PROJECT = 30401\nVENDOR_ID_HALSTED_SURGERY = 30402\nVENDOR_ID_SECURE_COMPUTING_NETWORKS = 30403\nVENDOR_ID_NEVERNO_AS = 30404\nVENDOR_ID_CLAIMLYNX_INC = 30405\nVENDOR_ID_AUBESOFT_INC = 30406\nVENDOR_ID_CRISALID_SARL = 30407\nVENDOR_ID_ULRICH_BODDENBERG_INFORMATIQUE = 30408\nVENDOR_ID_FTR_PTY_LTD = 30409\nVENDOR_ID_JOZEF_HATALA = 30410\nVENDOR_ID_PARKER_HANNIFIN_CORP = 30411\nVENDOR_ID_AEROFLEX_INCORPORATED = 30412\nVENDOR_ID_CHANNEL_ISLANDS_STOCK_EXCHANGE_LBG = 30413\nVENDOR_ID_OBJECT_SISTEMAS_MULTIMIDIA_LTDA = 30414\nVENDOR_ID_PANSKY_TECHOLOGY_CORPORATION_CHENGDU_GROUP = 30415\nVENDOR_ID_LATENTER = 30416\nVENDOR_ID_RLG_INFORMATICA = 30417\nVENDOR_ID_JEWELRY_TELEVISION = 30418\nVENDOR_ID_NOVGOROD_STATE_UNIVERSITY = 30419\nVENDOR_ID_SOFTEX_INSOPORATED = 30420\nVENDOR_ID_NAVICON_A_S = 30421\nVENDOR_ID_FATWIRE_CORPORATION = 30422\nVENDOR_ID_CENTENE_CORPORATION = 30423\nVENDOR_ID_OAK_SCIENTIFIC_LLC = 30424\nVENDOR_ID_INNOVATIVE_COMMUNICATIONS_ENGINEERING = 30425\nVENDOR_ID_UNIVERSAL_SOLUTIONS_GROUP_INC = 30426\nVENDOR_ID_2INCHES = 30427\nVENDOR_ID_TELEKOM_RESEARCH_DEVELOPMENT_SDN_BHD = 30428\nVENDOR_ID_AMNAFZAR_CO = 30429\nVENDOR_ID_CARNEROCA = 30430\nVENDOR_ID_TELVENT_ENVIRONMENT_SA = 30431\nVENDOR_ID_OPEN_SYSTEM_SOLUTIONS_UK_LIMITED = 30432\nVENDOR_ID_DAH_SING_LIFE_ASSURANCE_COMPANY_LIMITED = 30433\nVENDOR_ID_SATELCOM_OY = 30434\nVENDOR_ID_DALARNA_UNIVERSITY = 30435\nVENDOR_ID_ARALIA_SYSTEMS_LTD = 30436\nVENDOR_ID_FORTNA_INC = 30437\nVENDOR_ID_CAPECOM_GBR = 30438\nVENDOR_ID_LAYERX_TECHNOLOGIES = 30439\nVENDOR_ID_PROXIFLEX = 30440\nVENDOR_ID_MATRA_SYSTEMS_UK = 30441\nVENDOR_ID_ADAPTIVE_SPECTRUM_AND_SIGNAL_ALIGNMENT_INC = 30442\nVENDOR_ID_SCHOONER_INFORMATION_TECHNOLOGY_INC = 30443\nVENDOR_ID_2_BIT_PROGRAMMERS = 30444\nVENDOR_ID_GENIE_TECHNOLOGY_MANAGEMENT = 30445\nVENDOR_ID_MOBILE_TECHNIKA_INC = 30446\nVENDOR_ID_PETE_GOOCH = 30447\nVENDOR_ID_SRLV_HOLDING = 30448\nVENDOR_ID_INSTITUTE_OF_PSYCHOLOGY_AND_PEDAGOGICS_OF_DEVELOPMENT = 30449\nVENDOR_ID_TELEGLOBE_CANADA_ULC = 30450\nVENDOR_ID_CPEGM = 30451\nVENDOR_ID_XOFT_INC = 30452\nVENDOR_ID_KANNEL_SOFTWARE_FOUNDATION = 30453\nVENDOR_ID_SANTA_BARBARA_CITY_COLLEGE = 30454\nVENDOR_ID_WM_MORRISON_SUPERMARKETS_PLC = 30455\nVENDOR_ID_SUGATCOMNP = 30456\nVENDOR_ID_CYGNET_TECHNOLOGY_BV = 30457\nVENDOR_ID_THOMAS_DUCLOS_SOFTWARE = 30458\nVENDOR_ID_ECHOSTORM_WORLDWIDE_LLC = 30459\nVENDOR_ID_PERFOMIX_TECHNOLOGIES_INTLP_LTD = 30460\nVENDOR_ID_RADLEY_NETWORK_TECHNOLOGIES_CC = 30461\nVENDOR_ID_FREIFUNK_HALLE = 30462\nVENDOR_ID_SUPRIDATTA_TELEINFORMATICA_LTDA = 30463\nVENDOR_ID_TECNOSISTEMAS_INC = 30464\nVENDOR_ID_VISAGE_MOBILE_INC = 30465\nVENDOR_ID_PRIVANTIS_SA = 30466\nVENDOR_ID_CARLSON_WAGONLIT_TRAVEL = 30467\nVENDOR_ID_SOLID_TECHNOLOGIES_INC = 30468\nVENDOR_ID_SYNACOR_INC = 30469\nVENDOR_ID_CYBERTRAILS = 30470\nVENDOR_ID_TWOPIRADIAN_INFOTECH_PRIVATE_LIMITED = 30471\nVENDOR_ID_CITYLINK_LTD = 30472\nVENDOR_ID_STEROPES_TECHNOLOGIES_LIMITED = 30473\nVENDOR_ID_CJSC_INCORE = 30474\nVENDOR_ID_INTRA2NET_AG = 30475\nVENDOR_ID_BIS = 30476\nVENDOR_ID_GIG_MBH_BERLIN = 30477\nVENDOR_ID_ENVENTIS = 30478\nVENDOR_ID_GLOBESTAR_SYSTEMS_INC = 30479\nVENDOR_ID_DOTLIBRE = 30480\nVENDOR_ID_HYSKY_COMMUNICATIONS = 30481\nVENDOR_ID_OMNES_LOQUANTUR_LIMITED = 30482\nVENDOR_ID_VIRTUAL_SWITCHING_CONSULTANCY_LIMITED = 30483\nVENDOR_ID_OPTEAM_SA = 30484\nVENDOR_ID_RTC_SIBERIA_CO_LTD = 30485\nVENDOR_ID_THOMAS_KOBIENIA = 30486\nVENDOR_ID_HYDRA_LABS = 30487\nVENDOR_ID_BOARDLINK_GROUP_LIMITED = 30488\nVENDOR_ID_FAMIPOW = 30489\nVENDOR_ID_DTELLA_LABS = 30490\nVENDOR_ID_HELPING_HAND_PC_SERVICES_NETWORKING_INC = 30491\nVENDOR_ID_HYPERTEK_INC = 30492\nVENDOR_ID_DIGITEK_SPA = 30493\nVENDOR_ID_MICROLINK_TELECOM = 30494\nVENDOR_ID_ROUNDTRIP_SYSTEMS = 30495\nVENDOR_ID_E_SMART_SYSTEMS_DOO = 30496\nVENDOR_ID_BEIJING_EASESEA_INTERMAN_TECHNOLOGY_CO = 30497\nVENDOR_ID_AEROSCOUT = 30498\nVENDOR_ID_DESIGN_2000_PVT_LTD = 30499\nVENDOR_ID_FORCA_A_S = 30500\nVENDOR_ID_INSTITUTE_FOR_NETWORKING_TECHNOLOGY = 30501\nVENDOR_ID_THE_NORWEGIAN_POLAR_INSTITUTE = 30502\nVENDOR_ID_BASTART = 30503\nVENDOR_ID_PUNCTUAL_SOFTWARE_INC = 30504\nVENDOR_ID_SCHWEIZERISCHE_LEBENSVERSICHERUNGS_UND_RENTENANSTALT_NIEDERLASSUNG_FR_DEUTSCHLAND = 30505\nVENDOR_ID_OOMA_INC = 30506\nVENDOR_ID_EXTREME_COPPER_INCORPORATED = 30507\nVENDOR_ID_MEDAVIE_BLUE_CROSS = 30508\nVENDOR_ID_SHENZHEN_LEAGSOFT_TECHNOLOGY_CO_LTD = 30509\nVENDOR_ID_BESTWIZ_SOFTWARW_DEVELOPMENT_DALIAN_COLTD = 30510\nVENDOR_ID_ARTS_ALLIANCE_MEDIA = 30511\nVENDOR_ID_ATEIS = 30512\nVENDOR_ID_FORD_MOTOR_COMPANY = 30513\nVENDOR_ID_LAVNIA_TAVARES = 30514\nVENDOR_ID_M7_EVOLUTION = 30515\nVENDOR_ID_OCLANE = 30516\nVENDOR_ID_ZOOT_ENTERPRISES_INC = 30517\nVENDOR_ID_COOLIT_SYSTEMS_INC = 30518\nVENDOR_ID_WIELDIM = 30519\nVENDOR_ID_IAESTE_AUSTRIA = 30520\nVENDOR_ID_COLLAB = 30521\nVENDOR_ID_KLUDGECA = 30522\nVENDOR_ID_TAICHUNG_VETERANS_GENERAL_HOSPITAL = 30523\nVENDOR_ID_INTERSOFT_ELECTRONICS = 30524\nVENDOR_ID_HS_VENTURES_LLC = 30525\nVENDOR_ID_ASTEC_SOLUTIONS = 30526\nVENDOR_ID_MOCHI_MEDIA_INC = 30527\nVENDOR_ID_VSAINT_DENIS = 30528\nVENDOR_ID_VKERNEL_CORPORATION = 30529\nVENDOR_ID_INTI_ELECTRONICA_E_INFORMATICA = 30530\nVENDOR_ID_LEANDRO_DA_SILVA_MENDES_INFORMATICA_ME = 30531\nVENDOR_ID_ALOX = 30532\nVENDOR_ID_DASANCNS = 30533\nVENDOR_ID_TAJINCORG_LLC = 30534\nVENDOR_ID_ALPHASOFT_GMBH = 30535\nVENDOR_ID_BMTI = 30536\nVENDOR_ID_WELSH_BLOOD_SERVICE = 30537\nVENDOR_ID_WEBLYZARD = 30538\nVENDOR_ID_SAPPI_FINE_PAPER = 30539\nVENDOR_ID_ZYMEWORKS_INC = 30540\nVENDOR_ID_EXACQ_TECHNOLOGIES_INC = 30541\nVENDOR_ID_KOMES_CO_LTD = 30542\nVENDOR_ID_QUARTZNET = 30543\nVENDOR_ID_ITAS_TECHNOLOGY_CORP = 30544\nVENDOR_ID_AKADEMIA_PODLASKA = 30545\nVENDOR_ID_JLA_LTD = 30546\nVENDOR_ID_INSTITUTE_OF_PHYSICS_OF_THE_ASCR_V_V_I = 30547\nVENDOR_ID_ALBERTA_BLUE_CROSS = 30548\nVENDOR_ID_MERLI_DR_CLIZIO_CONSULTANT = 30549\nVENDOR_ID_KONEXXO_GMBH = 30550\nVENDOR_ID_TRANSTRUCT_FOUNDATION = 30551\nVENDOR_ID_MICROBLADE_INC = 30552\nVENDOR_ID_LINCWARE = 30553\nVENDOR_ID_MITSUBISHI_SPACE_SOFTWARE_COLTD = 30554\nVENDOR_ID_MIKHAILELIASNET = 30555\nVENDOR_ID_KING_FAISAL_UNIVERSITY = 30556\nVENDOR_ID_SAPPHIRE_COMPUTER_SYSTEMS_UK_LTD = 30557\nVENDOR_ID_TICKETCORNER_AG = 30558\nVENDOR_ID_KRGER_NETWORK_TRAINING_CONSULTING = 30559\nVENDOR_ID_PUMPKIN_3D = 30560\nVENDOR_ID_EXPACTIT = 30561\nVENDOR_ID_UNIVERSIDAD_DE_MONTEMORELOS_A_C = 30562\nVENDOR_ID_BLACKWAVE_INC = 30563\nVENDOR_ID_ALGARROBA = 30564\nVENDOR_ID_GTS_NEXTRA = 30565\nVENDOR_ID_DR_GREGORY_M_STONE_ASSOCIATES = 30566\nVENDOR_ID_PORT_ONE_INTERNET_INC = 30567\nVENDOR_ID_MSONA_LIMITED = 30568\nVENDOR_ID_GLOBITEL = 30569\nVENDOR_ID_ARCH_RED_OY = 30570\nVENDOR_ID_MESTO_DOMAZLICE = 30571\nVENDOR_ID_NETDESIGN_A_S = 30572\nVENDOR_ID_PHOTON_MEISSENER_TECHNOLOGIES_GMBH = 30573\nVENDOR_ID_FIXMA_SL = 30574\nVENDOR_ID_CASTLABS_GMBH = 30575\nVENDOR_ID_WILLS_AND_CO_STOCKBROKERS = 30576\nVENDOR_ID_OPUS_NOTION = 30577\nVENDOR_ID_T_PROJE_MUHENDISLIK_DIS_TIC_LTD_STI = 30578\nVENDOR_ID_ARAB_BANK_SWITZERLAND = 30579\nVENDOR_ID_PENINSULA_ENGINEERING_SOLUTIONS_INC = 30580\nVENDOR_ID_APPRIVER_LLC = 30581\nVENDOR_ID_RSP_SYSTEMS_A_S = 30582\nVENDOR_ID_AHMUSEINDUSTRYNET_LLC = 30583\nVENDOR_ID_ALLEGORY_SOFTWARE_INC = 30584\nVENDOR_ID_SMARTSHARE_SYSTEMS = 30585\nVENDOR_ID_XYTRONIX_RESEARCH_DESIGN_INC = 30586\nVENDOR_ID_JUMPGEN_SYSTEMS_LLC = 30587\nVENDOR_ID_EUPHONIX_INC = 30588\nVENDOR_ID_HIS_TECHNOLOGIES_HK_LIMITED = 30589\nVENDOR_ID_STERREICHISCHE_PENSIONSVERSICHERUNGSANSTALT = 30590\nVENDOR_ID_HETZNER_PTY_LTD = 30591\nVENDOR_ID_NICO_ROESER = 30592\nVENDOR_ID_SPYDERWEB_CONSULTING = 30593\nVENDOR_ID_LSTC = 30594\nVENDOR_ID_XENATECH_CO_LTD_SOUTH_KOREA = 30595\nVENDOR_ID_UNIONCAST = 30596\nVENDOR_ID_KAN_SP_Z_OO = 30597\nVENDOR_ID_HC_STARCK_GMBH = 30598\nVENDOR_ID_SIMPLISIP = 30599\nVENDOR_ID_DELTATEC = 30600\nVENDOR_ID_PODHARTNET = 30601\nVENDOR_ID_TYSON_FOODS_INC = 30602\nVENDOR_ID_JXX_TECHNOLOGIES = 30603\nVENDOR_ID_UHLAND = 30604\nVENDOR_ID_LANDMARK_DIGITAL_SERVICES = 30605\nVENDOR_ID_ETOUR = 30606\nVENDOR_ID_SASKATCHEWAN_BLUE_CROSS = 30607\nVENDOR_ID_FACULDADE_NOVAFAPI = 30608\nVENDOR_ID_TEMBOO_INC = 30609\nVENDOR_ID_UVT_UNTERNEHMENSBERATUNG_FR_VERKEHR_UND_TECHNIK_GMBH = 30610\nVENDOR_ID_MAESSA_TELECONTROL = 30611\nVENDOR_ID_EK3_TECHNOLOGIES_INC = 30612\nVENDOR_ID_ATIS = 30613\nVENDOR_ID_EXPANDIUM_SAS = 30614\nVENDOR_ID_CREATIVE_TECHNOLOGY_LTD = 30615\nVENDOR_ID_MAGMATEC_PTY_LTD = 30616\nVENDOR_ID_ADVANCED_DIGITAL_SYSTEMS_INC_ADS = 30617\nVENDOR_ID_ROSTOCKER_FREIZEITZENTRUM_EV = 30618\nVENDOR_ID_TOSHIBA_MITSUBISHI_ELECTRIC_INDUSTRIAL_SYSTEMS_CORPORATION = 30619\nVENDOR_ID_SLOKA_TELECOM_PRIVATE_LIMITED = 30620\nVENDOR_ID_GLOBAL_HOLDINGS_GROUP = 30621\nVENDOR_ID_CENTRE_DES_TECHNOLOGIES_DE_LINFORMATION_DE_LETAT_LUXEMBOURG_FORMERLY_CENTRE_INFORMATIQUE_DE_LETAT_LUXEMBOURG = 30622\nVENDOR_ID_FEDERAL_SIGNAL_CORPORATION_INTEGRATED_SYSTEMS = 30623\nVENDOR_ID_ALALOOP_SAS = 30624\nVENDOR_ID_TOLLWERK_SINNESNAVIGATOREN = 30625\nVENDOR_ID_VERISIGN = 30626\nVENDOR_ID_BITGATE_DATA_SYSTEMS_GMBH = 30627\nVENDOR_ID_NIDEC_CORPORATION = 30628\nVENDOR_ID_ARCHCYBER_TECHNOLOGY_CO_LTD = 30629\nVENDOR_ID_AFRINIC_LTD = 30630\nVENDOR_ID_TERRA = 30631\nVENDOR_ID_CJSC_KYIVSTAR_GSM = 30632\nVENDOR_ID_UNIVERSITAET_FUER_MUSIK_UND_DARSTELLENDE_KUNST_WIEN = 30633\nVENDOR_ID_EDDAHBI_KARIM = 30634\nVENDOR_ID_II_GIMNAZIJA_MARIBOR = 30635\nVENDOR_ID_AMT_DATA = 30636\nVENDOR_ID_HAAGENTI_GROUP_INC = 30637\nVENDOR_ID_LARRY_STURTZ = 30638\nVENDOR_ID_SMART_EDUCATION_SP_ZOO = 30639\nVENDOR_ID_UNLIMI_TECH_SOFTWARE_INC = 30640\nVENDOR_ID_AJA_VIDEO_SYSTEMS_INC = 30641\nVENDOR_ID_AOPTIX_TECHNOLOGIES_INC = 30642\nVENDOR_ID_DATABITS = 30643\nVENDOR_ID_AMIR_REZGHIAN = 30644\nVENDOR_ID_ENTRY_POINT_LLC = 30645\nVENDOR_ID_NYCLIX = 30646\nVENDOR_ID_VALUE_TEAM = 30647\nVENDOR_ID_ISUPPORTISP_LLC = 30648\nVENDOR_ID_INETU_INC = 30649\nVENDOR_ID_PARA_SYSTEMS_INC = 30650\nVENDOR_ID_PRECOGNET = 30651\nVENDOR_ID_GLENMARSHALLUS = 30652\nVENDOR_ID_COMABILITY = 30653\nVENDOR_ID_COLLEGE_OF_POLICY_SCIENCE_RITSUMEIKAN_UNIVERSITY = 30654\nVENDOR_ID_DIAMOND_VALLEY_COLLEGE = 30655\nVENDOR_ID_LANCEHENDRIXCOM = 30656\nVENDOR_ID_EATON_WILLIAMS = 30657\nVENDOR_ID_BTC_BUSINESS_TECHNOLOGY_CONSULTING_AG = 30658\nVENDOR_ID_SCILLA_SYSTEMS_INC = 30659\nVENDOR_ID_ONSITE_MEDIA_NETWORK_INC = 30660\nVENDOR_ID_ZUBDATA = 30661\nVENDOR_ID_TARA_SYSTEMS_GMBH = 30662\nVENDOR_ID_TALL_UMBRELLA = 30663\nVENDOR_ID_P_BRYAN_CONSULTING_INC = 30664\nVENDOR_ID_APG_ALGEMENE_PENSIOEN_GROEP_NV = 30665\nVENDOR_ID_ONLINE_REWARDS = 30666\nVENDOR_ID_PORT40 = 30667\nVENDOR_ID_BRCONTROLS = 30668\nVENDOR_ID_RESEARCH_FOR_SCIENCE_ART_AND_TECHNOLOGY_RFSAT_LTD = 30669\nVENDOR_ID_VOLOLINK_PTY_LTD = 30670\nVENDOR_ID_CROCUS_COM_COMPANY = 30671\nVENDOR_ID_ANCERNO_LTD = 30672\nVENDOR_ID_EDELCA = 30673\nVENDOR_ID_NTS_WORKSPACE_AG = 30674\nVENDOR_ID_WAYNE_STATE_UNIVERSITY_SCHOOL_OF_MEDICINE = 30675\nVENDOR_ID_D_TA_SYSTEMS_INC = 30676\nVENDOR_ID_C4I_SECURITY_LLC = 30677\nVENDOR_ID_NOMOVOK_LTD = 30678\nVENDOR_ID_XICOM_TECHNOLOGY = 30679\nVENDOR_ID_CITY_OF_WALSENBURG_COLORADO = 30680\nVENDOR_ID_DONALD_SWAUGER_CONSULTING = 30681\nVENDOR_ID_DAVIDROBINNET = 30682\nVENDOR_ID_QUADIUMNET = 30683\nVENDOR_ID_YAZAKI_CORPORATION = 30684\nVENDOR_ID_TSTENG = 30685\nVENDOR_ID_N_ITUS = 30686\nVENDOR_ID_COSOLIT = 30687\nVENDOR_ID_SHENZHEN_DASHI_TECHNOLOGY_COLTD = 30688\nVENDOR_ID_PLANET_CONTROLS_PTY_LTD = 30689\nVENDOR_ID_INSTITUTE_OF_COMPUTATIONAL_MATHEMATICS_AND_MATHEMATICAL_GEOPHYSICS_SB_RAS = 30690\nVENDOR_ID_WAPICE_LTD = 30691\nVENDOR_ID_WS_ATKINS_PLC = 30692\nVENDOR_ID_GLOBAL_INFINIPOOL_GMBH = 30693\nVENDOR_ID_FAXBACK_INC = 30694\nVENDOR_ID_CHRYSLER_FINANCIAL = 30695\nVENDOR_ID_DEIMOS_ENGENHARIA_SA = 30696\nVENDOR_ID_CPC_UK = 30697\nVENDOR_ID_N1ETY = 30698\nVENDOR_ID_UBIPART_LTD = 30699\nVENDOR_ID_TELEFONIA_DIALOG_SA = 30700\nVENDOR_ID_NORWEGIAN_UNIVERSITY_OF_LIFE_SCIENCES_UMB = 30701\nVENDOR_ID_A2E_TECHNOLOGIES = 30702\nVENDOR_ID_OBERTHUR_TECHNOLOGIES = 30703\nVENDOR_ID_DIPL_ING_EBERHARD_IGLHAUT = 30704\nVENDOR_ID_SOUNDBITE_COMMUNICATIONS = 30705\nVENDOR_ID_OPENDNS_LLC = 30706\nVENDOR_ID_SOLAIEMES = 30707\nVENDOR_ID_STEJ_STEFAN_JENS_INTERNET_SERVICES_AB = 30708\nVENDOR_ID_NCCI_HOLDINGS_INC = 30709\nVENDOR_ID_IT_SOFT_LTD = 30710\nVENDOR_ID_COOLMAN_INC = 30711\nVENDOR_ID_BDO_SEIDMAN_LLP = 30712\nVENDOR_ID_OOPSSORG = 30713\nVENDOR_ID_HARRY_WETTKE_CONSULTING = 30714\nVENDOR_ID_Q_LAYER = 30715\nVENDOR_ID_ALSTON_BIRD_LLP = 30716\nVENDOR_ID_ODYSSEYWARE_INC = 30717\nVENDOR_ID_TSB_BANK_LTD = 30718\nVENDOR_ID_ELEKTROSERVICE = 30719\nVENDOR_ID_ETONE = 30720\nVENDOR_ID_AGENOR_DOO = 30721\nVENDOR_ID_PROSOFT_TECHNOLOGY = 30722\nVENDOR_ID_FREECODE_INTERNATIONAL_INC = 30723\nVENDOR_ID_VIETNAM_COMMERCIAL_COMPUTING_AND_COMMUNICATION = 30724\nVENDOR_ID_ALL_INCLUDED_SOFTWARE_GMBH = 30725\nVENDOR_ID_FJ3US_ENTERPRISES = 30726\nVENDOR_ID_SNIX_NET_INTERNATIONAL = 30727\nVENDOR_ID_SILTANET = 30728\nVENDOR_ID_SLM_CORPORATION = 30729\nVENDOR_ID_SEANODES = 30730\nVENDOR_ID_BODET_SA = 30731\nVENDOR_ID_NETSOCKET_INC = 30732\nVENDOR_ID_UMPQUA_BANK = 30733\nVENDOR_ID_FLORIAN_SAILER_FORMERLY_SEVEN_F = 30734\nVENDOR_ID_BLUECOARA_NETWORKS = 30735\nVENDOR_ID_KYOEISANGYO_CORP = 30736\nVENDOR_ID_SERVICIOS_TECNICOS_AGRUPADOS_SA = 30737\nVENDOR_ID_OPTENET = 30738\nVENDOR_ID_JASON_ANTMAN = 30739\nVENDOR_ID_ASSYST_GESELLSCHAFT_FR_AUTOMATISIERUNG_SOFTWARE_UND_SYSTEME_MBH = 30740\nVENDOR_ID_CONFIGO_SYSTEMS_GMBH = 30741\nVENDOR_ID_GLIMMERGLASS_NETWORKS_INC = 30742\nVENDOR_ID_GLOBAL_VILLAGE_TELECOM = 30743\nVENDOR_ID_MISSISSIPPI_RIVER_MARITIME_ASSOCIATION = 30744\nVENDOR_ID_OPEN_CHANNEL_SOFTWARE = 30745\nVENDOR_ID_OPENSOLUTIONS_GMBH_CO_KG = 30746\nVENDOR_ID_THR_SYSTEMS = 30747\nVENDOR_ID_RAUMTEX_BIEHL = 30748\nVENDOR_ID_MARABU_EDV_BERATUNG_UND_SERVICE_GMBH = 30749\nVENDOR_ID_MESH_CITY_WIRELESS = 30750\nVENDOR_ID_PENTADYNE_POWER_CORPORATION = 30751\nVENDOR_ID_INFOGROUP_SPA = 30752\nVENDOR_ID_UNIVERSITY_OF_TSUKUBA = 30753\nVENDOR_ID_ERIK_ABELE_TECHNOLOGY_CONSULTING = 30754\nVENDOR_ID_FAULTINJECTIONNET = 30755\nVENDOR_ID_CODERSAPPLECOM = 30756\nVENDOR_ID_FAR_NETWORKS_SRL = 30757\nVENDOR_ID_COMTECH_SYSTEMS_INC = 30758\nVENDOR_ID_SHOWSYS = 30759\nVENDOR_ID_ELECTRO_STANDARDS_LABORATORIES = 30760\nVENDOR_ID_TELAVISTA_BV = 30761\nVENDOR_ID_MBIRA_TECHNOLOGIES = 30762\nVENDOR_ID_GLASSFISH_NETWORKS = 30763\nVENDOR_ID_QLIKTECH = 30764\nVENDOR_ID_GAMA_V2 = 30765\nVENDOR_ID_TOMAS_SHULMAN = 30766\nVENDOR_ID_FULL_SPECTRUM_INC = 30767\nVENDOR_ID_COLLGE_DE_FRANCE = 30768\nVENDOR_ID_CITEC_SPA = 30769\nVENDOR_ID_ALBERTO_STORCH = 30770\nVENDOR_ID_HEALTHPLUS_OF_MICHIGAN = 30771\nVENDOR_ID_PROCOM_PROFESSIONAL_COMMUNICATION_SERVICE_GMBH = 30772\nVENDOR_ID_FLYCATCHER = 30773\nVENDOR_ID_ANTHENA_TECHNOLOGY_INC = 30774\nVENDOR_ID_XCONTROL_SISTEMAS_SOLUCIONES_LTD = 30775\nVENDOR_ID_DRONAS_2002_SLU = 30776\nVENDOR_ID_CYMOTEC = 30777\nVENDOR_ID_MURILO_FUJITA = 30778\nVENDOR_ID_APELON_INC = 30779\nVENDOR_ID_CHARLES_MCCROBIE = 30780\nVENDOR_ID_INFONOVA_CONSULTORES = 30781\nVENDOR_ID_HILISOFT = 30782\nVENDOR_ID_ICECELL_EHF = 30783\nVENDOR_ID_FINK_CONSULTING_GMBH = 30784\nVENDOR_ID_BITFROST_AS = 30785\nVENDOR_ID_DEFNE = 30786\nVENDOR_ID_GLOBAL_NETWORKS_SWITZERLAND_AG = 30787\nVENDOR_ID_VSCAPE = 30788\nVENDOR_ID_MARKET_TECHNOLOGIES_INC = 30789\nVENDOR_ID_CORTEX_INFORMATICA = 30790\nVENDOR_ID_BRASS_MEDIA_INC = 30791\nVENDOR_ID_HUBER_VERLAG_FR_NEUE_MEDIEN_GMBH = 30792\nVENDOR_ID_INGRAM_BOOK_CO = 30793\nVENDOR_ID_PLATINUMTEL_COMMUNICATIONS = 30794\nVENDOR_ID_ZELTIQ_AESTHETICS_INC = 30795\nVENDOR_ID_VIDEON_CENTRAL_INC = 30796\nVENDOR_ID_ELCONAS = 30797\nVENDOR_ID_DELTA_LAMBDA_PHI_NATIONAL_SOCIAL_FRATERNITY = 30798\nVENDOR_ID_SKYNET_COMMUNITY_VPN = 30799\nVENDOR_ID_BEE_WARE_SA = 30800\nVENDOR_ID_IGUS_ITS_GMBH = 30801\nVENDOR_ID_FIRESCOPE_INC = 30802\nVENDOR_ID_VYATTA_INC = 30803\nVENDOR_ID_LATTICE_LIMITED = 30804\nVENDOR_ID_SOLEGY_LLC = 30805\nVENDOR_ID_IPCENTERAT = 30806\nVENDOR_ID_FRANZ_KRAINER_NETAL = 30807\nVENDOR_ID_SUN_INTERNATIONAL_MANAGEMENT_LIMITED = 30808\nVENDOR_ID_PACKETOPS = 30809\nVENDOR_ID_UNIVERSITAET_BREMEN_FACHBEREICH_3 = 30810\nVENDOR_ID_HERLEY_CTI = 30811\nVENDOR_ID_OBJECTTEL_INC = 30812\nVENDOR_ID_ADVANCED_TELECOM_TECHNOLOGIES = 30813\nVENDOR_ID_INSTITUT_FRANAIS_DE_RECHERCHE_POUR_LEXPLOITATION_DE_LA_MER = 30814\nVENDOR_ID_INTECNA_SOLUCIONES = 30815\nVENDOR_ID_ESCAPE_STUDIO = 30816\nVENDOR_ID_ILLUMINATE_SOLUTIONS = 30817\nVENDOR_ID_POWERSET_INC = 30818\nVENDOR_ID_SOFTWARE_SECURITY_NETWORKS_LUKAS_GRADL = 30819\nVENDOR_ID_FIGHTING_PENGUIN_BUSINESS_SYSTEMS = 30820\nVENDOR_ID_CAPE_COD_SENSORS = 30821\nVENDOR_ID_GENERAL_CONFERENCE_OF_SEVENTH_DAY_ADVENTISTS = 30822\nVENDOR_ID_AKIMEKA = 30823\nVENDOR_ID_SH_SOLUTIONS = 30824\nVENDOR_ID_CENTRACOMM_COMMUNICATIONS_LTD = 30825\nVENDOR_ID_SMARTOPTICS_AS = 30826\nVENDOR_ID_RIZ_ODASILJACI_DD = 30827\nVENDOR_ID_COLFAX_CORPORATION = 30828\nVENDOR_ID_UNITED_TECHNOLOGISTS_EUROPE_LIMITED_UTEL = 30829\nVENDOR_ID_G_L_GEISSENDRFER_LESCHINSKY_GMBH = 30830\nVENDOR_ID_NETWORK_CENTER_OF_TIANJIN_UNIVERSITY = 30831\nVENDOR_ID_COMPUCREDIT_CORPORATION = 30832\nVENDOR_ID_CLEARSPEED_TECHNOLOGY_PLC = 30833\nVENDOR_ID_VIRTUEFUSION = 30834\nVENDOR_ID_BLUE_BOX_GROUP_LLC = 30835\nVENDOR_ID_WINGSERVERS = 30836\nVENDOR_ID_EDGE_VELOCITY_CORPORATION = 30837\nVENDOR_ID_CASH_AMERICA_NET_OF_ILLINOIS_LLC = 30838\nVENDOR_ID_SKIDMORE_COLLEGE = 30839\nVENDOR_ID_REPLIFY_LTD = 30840\nVENDOR_ID_ASTASE = 30841\nVENDOR_ID_APINC_ASSOCIATION_POUR_LINTERNET_NON_COMMERCIAL = 30842\nVENDOR_ID_BLOGREEN = 30843\nVENDOR_ID_LUCAS_IT_SERVICES = 30844\nVENDOR_ID_MECHRON_POWER_SYSTEMS = 30845\nVENDOR_ID_IPSMARX_TECHNOLOGY_INC = 30846\nVENDOR_ID_9STAR_RESEARCH_INC = 30847\nVENDOR_ID_SITRONICS_SMART_TECHNOLOGIES_LLC = 30848\nVENDOR_ID_MAGELLAN_NETZWERKE_GMBH = 30849\nVENDOR_ID_THE_UNIVERSITY_OF_HONG_KONG = 30850\nVENDOR_ID_ACCOLM = 30851\nVENDOR_ID_KNIPP_MEDIEN_UND_KOMMUNIKATION_GMBH = 30852\nVENDOR_ID_MIKRO_VRKSTEDET = 30853\nVENDOR_ID_HEINLEIN_SUPPORT_GMBH = 30854\nVENDOR_ID_GECKOLOGIC_GMBH = 30855\nVENDOR_ID_BANDWIDTHCOM_INC = 30856\nVENDOR_ID_DATA_DEVICE_CORPORATION = 30857\nVENDOR_ID_MOBILE_NEWS_CHANNEL_SA = 30858\nVENDOR_ID_E_SOLUTIONS = 30859\nVENDOR_ID_BETGENIUS = 30860\nVENDOR_ID_VENTURE_CRAFT_NETWORKS = 30861\nVENDOR_ID_NANCY_UNIVERSITE = 30862\nVENDOR_ID_SAMSUNG_ELECTRO_MECHANICS_CO_LTD = 30863\nVENDOR_ID_CD_ADAPCO = 30864\nVENDOR_ID_CILANTRO_CAFE = 30865\nVENDOR_ID_ID2GO_IT_SOLUTIONS = 30866\nVENDOR_ID_VOLKSMISSION_ENTSCHIEDENER_CHRISTEN_EV = 30867\nVENDOR_ID_KANSAS_CITY_WEB_REPAIR_CO = 30868\nVENDOR_ID_WEILAND_ASSOCIATES_INC = 30869\nVENDOR_ID_INTERRED_GMBH = 30870\nVENDOR_ID_LUCE_FORWARD_HAMILTON_AND_SCRIPPS_LLP = 30871\nVENDOR_ID_UNILOC_USA = 30872\nVENDOR_ID_CONFIDENT_INC = 30873\nVENDOR_ID_TUNEOLOGY = 30874\nVENDOR_ID_INNODOMUS = 30875\nVENDOR_ID_DIVMOD_INC = 30876\nVENDOR_ID_GIOGIO_IT = 30877\nVENDOR_ID_PANACEA_VISION_CO_LTD = 30878\nVENDOR_ID_PAVLECK_LLC = 30879\nVENDOR_ID_CHAOS_COMPUTER_CLUB_MNCHEN_EV = 30880\nVENDOR_ID_ELYCE_SAS = 30881\nVENDOR_ID_NANJING_XIAN_ZHI_LU_TECHNOLOGY_COLTD = 30882\nVENDOR_ID_CORRELIX_INC = 30883\nVENDOR_ID_COVERTIX = 30884\nVENDOR_ID_ROOKIE_INC = 30885\nVENDOR_ID_SICHUAN_JIUZHOU_ELECTRONIC_TECHNOLOGY_COLTD = 30886\nVENDOR_ID_ALFRED_KUHSE_GMBH = 30887\nVENDOR_ID_CITTADINO_GMBH = 30888\nVENDOR_ID_VALERO_ENERGY_CORPORATION = 30889\nVENDOR_ID_INSTITUT_DE_RECHERCHE_EN_OPHTALMOLOGIE = 30890\nVENDOR_ID_GRAMANT = 30891\nVENDOR_ID_MIRADA_PLC = 30892\nVENDOR_ID_CJSC_GOODWIN = 30893\nVENDOR_ID_INTRA_SYS_GMBH = 30894\nVENDOR_ID_ANTONISMOBI = 30895\nVENDOR_ID_KNITEBANENET = 30896\nVENDOR_ID_MCDONALDS_CORPORATION = 30897\nVENDOR_ID_NETWORKEDASSETS_GMBH = 30898\nVENDOR_ID_MONTANA_STATE_UNIVERSITY = 30899\nVENDOR_ID_IPWORKS_CO_LTD = 30900\nVENDOR_ID_UNITED_INFORMATION_TECHNOLOGY_COLTD = 30901\nVENDOR_ID_GOBGK = 30902\nVENDOR_ID_REGISTRU_CENTRAS = 30903\nVENDOR_ID_RADIUS_SWEDEN_AB = 30904\nVENDOR_ID_INNOVA_SA = 30905\nVENDOR_ID_IFS_ING_VERTRIEBSBUERO_FR_EDV_SOFTWARETECHNIK_GMBH = 30906\nVENDOR_ID_PARADIGM_COMMUNICATION_SYSTEMS_LTD = 30907\nVENDOR_ID_RTVISION_INC = 30908\nVENDOR_ID_WBB_WIRELESS = 30909\nVENDOR_ID_WS_LIVE_LLC = 30910\nVENDOR_ID_CHRISTOPHER_HUBBARD = 30911\nVENDOR_ID_INDENT_SOLUTIONS_LLC = 30912\nVENDOR_ID_UMC_ELECTRONICS_CO_LTD = 30913\nVENDOR_ID_OLIVER_OEHME_EDV_SERVICE_GMBH = 30914\nVENDOR_ID_BEIJING_SHENGTIAN_ENGINEERING_DESIGNCONSULT_INC_BJST = 30915\nVENDOR_ID_TEAMQUALITY = 30916\nVENDOR_ID_JILLSTEPHENSORG = 30917\nVENDOR_ID_CATATREPA_SA = 30918\nVENDOR_ID_UNIPIER_LTD = 30919\nVENDOR_ID_SCANIA_INFOMATE = 30920\nVENDOR_ID_JOHN_HORTON_CONSULTANCY_LTD = 30921\nVENDOR_ID_TELSASOFT = 30922\nVENDOR_ID_MAX_PLANCK_INSTITUTE_FOR_MATHEMATICS_IN_THE_SCIENCES = 30923\nVENDOR_ID_JANTRONICS = 30924\nVENDOR_ID_ROBUST_SOLUTIONS_LLC = 30925\nVENDOR_ID_FLEXMEDIACOMTW = 30926\nVENDOR_ID_MAINOVA_AG = 30927\nVENDOR_ID_LOYCON_SC = 30928\nVENDOR_ID_SCHUBERG_PHILIS = 30929\nVENDOR_ID_BILLIAMWARE_SW = 30930\nVENDOR_ID_SHELDON_NETWORKS_INC = 30931\nVENDOR_ID_EPICENTER_INC = 30932\nVENDOR_ID_NICK125 = 30933\nVENDOR_ID_STECO_LTD = 30934\nVENDOR_ID_RAILWAY_EQUIPMENT_COMPANY = 30935\nVENDOR_ID_TEXAS_STATE_UNIVERSITY = 30936\nVENDOR_ID_COMMUNICATIONS_ELECTRONICS_SOLUTIONS_PTY_LTD = 30937\nVENDOR_ID_N8_IDENTITY_CORP = 30938\nVENDOR_ID_EMBRAPA_GADO_DE_CORTE = 30939\nVENDOR_ID_SC_FITS_SRL = 30940\nVENDOR_ID_IFACTORY_CONSULTING = 30941\nVENDOR_ID_GLOBAL_IP_SOLUTIONS_INC = 30942\nVENDOR_ID_MULTIQ_PRODUCTS_AB = 30943\nVENDOR_ID_PCMS_GROUP_PLC = 30944\nVENDOR_ID_CHENGDU_GUANGDA_ELECTRONICTELECOMMUNICATION_TECHNOLOGY_DEVELOPMENT_CO_LTD = 30945\nVENDOR_ID_DEPARTMENT_OF_COMPUTER_ENGG = 30946\nVENDOR_ID_YAMAKI_ELECTRIC_CORPORATION = 30947\nVENDOR_ID_CLOUDMARK_INC = 30948\nVENDOR_ID_AHA_SOFTWARE = 30949\nVENDOR_ID_TRANSNEPTUNE = 30950\nVENDOR_ID_N_GREEN = 30951\nVENDOR_ID_CONSTALANT_JSC = 30952\nVENDOR_ID_NOVOTRONIK_GMBH = 30953\nVENDOR_ID_IDS_SERVICES = 30954\nVENDOR_ID_FLAVIO_POLETTI = 30955\nVENDOR_ID_YTECH_GMBH = 30956\nVENDOR_ID_WHP_INTERNATIONAL_SAS = 30957\nVENDOR_ID_SLAVENET = 30958\nVENDOR_ID_ZHONGLIANTONG_ELECTRONICS_CORPORATION_LTD = 30959\nVENDOR_ID_INNOTUBE_INC = 30960\nVENDOR_ID_REDSHIFT_INTER_NETWORKING = 30961\nVENDOR_ID_DENIS_KNAUF = 30962\nVENDOR_ID_HUTON = 30963\nVENDOR_ID_ZLGMCU = 30964\nVENDOR_ID_UNIVERSITY_DUNAREA_DE_JOS_GALATI = 30965\nVENDOR_ID_SHENZHEN_CLEVER_ELECTRONIC_COLTD = 30966\nVENDOR_ID_VVAAQIS = 30967\nVENDOR_ID_FOR_SALE_DIGITAL_INTERNET_AGENTUR_GMBH = 30968\nVENDOR_ID_2MI_TECNOLOGIA = 30969\nVENDOR_ID_IC_PLUS_CORP = 30970\nVENDOR_ID_ALEXON_COLTD = 30971\nVENDOR_ID_COLLEGE_OF_LAKE_COUNTY = 30972\nVENDOR_ID_RIGHTSASSIST_LLC = 30973\nVENDOR_ID_KITASP = 30974\nVENDOR_ID_CVICSE_LTD = 30975\nVENDOR_ID_NETEZZA_INC = 30976\nVENDOR_ID_SPINLOCK_DOO = 30977\nVENDOR_ID_CORDIUM_LINKS_LLC = 30978\nVENDOR_ID_ECO_INSTITUT_FR_KOLOGIE = 30979\nVENDOR_ID_KRAZAN_AND_ASSOCIATES_INC = 30980\nVENDOR_ID_MAGTICOM_LTD = 30981\nVENDOR_ID_JACOBS_UNIVERSITY_BREMEN = 30982\nVENDOR_ID_GURULABSIT = 30983\nVENDOR_ID_GNS_SYSTEMS_GMBH = 30984\nVENDOR_ID_GADGETS_TECHNOLOGY_SOLUTIONS_LLC = 30985\nVENDOR_ID_PAYMETRIC_INC = 30986\nVENDOR_ID_NORPAK_CORPORATION = 30987\nVENDOR_ID_POWERFILE_INC = 30988\nVENDOR_ID_HISCOX_PLC = 30989\nVENDOR_ID_FOOD_FOR_THE_HUNGRY = 30990\nVENDOR_ID_PCS_DO_BRASIL_LTDA = 30991\nVENDOR_ID_WROCAW_UNIVERSITY_OF_ECONOMICS = 30992\nVENDOR_ID_SURE3_NETWORKS_LLC = 30993\nVENDOR_ID_SSB_PROGETTI_SRL = 30994\nVENDOR_ID_WEBMESSENGER_INC = 30995\nVENDOR_ID_BLACKMESH = 30996\nVENDOR_ID_TELECOM_SOUTH_AMERICA_S_A = 30997\nVENDOR_ID_FIKUS_DEVELOPMENT_CORP = 30998\nVENDOR_ID_ROHATI_SYSTEMS_INC = 30999\nVENDOR_ID_STELCOM = 31000\nVENDOR_ID_SECOMICON_GMBH = 31001\nVENDOR_ID_COSI = 31002\nVENDOR_ID_CHINA_PACIFIC_INSURANCE_GROUP_COMPANY_LIMITED = 31003\nVENDOR_ID_NAUTILE_SARL = 31004\nVENDOR_ID_ODS_MEDICAL_GMBH = 31005\nVENDOR_ID_ENERGODATA = 31006\nVENDOR_ID_IKSENET = 31007\nVENDOR_ID_BUSINESS_DECISION = 31008\nVENDOR_ID_PRECISION_ELECTRONICS_LTD = 31009\nVENDOR_ID_CYMPHONIX_CORP = 31010\nVENDOR_ID_ENTERPRISE_MANAGEMENT_CONSULTING_LTD = 31011\nVENDOR_ID_HOME_WORKS_SPA = 31012\nVENDOR_ID_SCHOOL_DISTRICT_OF_PHILADELPHIA = 31013\nVENDOR_ID_FXTION_LIMITED = 31014\nVENDOR_ID_NALCO_COMPANY = 31015\nVENDOR_ID_SOCRATA_INC = 31016\nVENDOR_ID_TELESJBPARTNERS_AG = 31017\nVENDOR_ID_HELI_NET_ITK = 31018\nVENDOR_ID_TECAL_ENGENHARIA_LTDA = 31019\nVENDOR_ID_TEACHERS_CREDIT_UNION = 31020\nVENDOR_ID_NSTEIN_TECHNOLOGIES_INC = 31021\nVENDOR_ID_SUNSEEDS_SOLUTIONS_SL = 31022\nVENDOR_ID_VEEAM_SOFTWARE = 31023\nVENDOR_ID_SWISS_REINSURANCE_COMPANY = 31024\nVENDOR_ID_NPAI_SA = 31025\nVENDOR_ID_GIL_LEDUC_INDUSTRIES = 31026\nVENDOR_ID_SYTECH_CORPORATION = 31027\nVENDOR_ID_ONSE_TELECOM_CORPORATION = 31028\nVENDOR_ID_HYUNDAI_DIGITAL_TECHNOLOGY_COLTD = 31029\nVENDOR_ID_VOIPEX_LIMITED = 31030\nVENDOR_ID_VO2_LABS = 31031\nVENDOR_ID_JCSBK = 31032\nVENDOR_ID_ELODIG = 31033\nVENDOR_ID_SCHLEIFENBAUER_PRODUCTS_BV = 31034\nVENDOR_ID_HANIRIITO_COLTD = 31035\nVENDOR_ID_SVYAZ_ENGINEERING_M_JSC = 31036\nVENDOR_ID_LUXMS_INC = 31037\nVENDOR_ID_NEXT_GENERATION_CREATIVE_LLC = 31038\nVENDOR_ID_JINNIWARE_SOFTWARE = 31039\nVENDOR_ID_DOZENET = 31040\nVENDOR_ID_TZ_COMMUNICATIONS_LTD = 31041\nVENDOR_ID_UNY_IT_BV = 31042\nVENDOR_ID_ECLIPSE_OPTIONS_HK_LTD = 31043\nVENDOR_ID_ALFRESCO_SOFTWARE_LTD = 31044\nVENDOR_ID_FRY_CONSULTING_INC = 31045\nVENDOR_ID_COLLOGIA_UNTERNEHMENSBERATUNG_AG = 31046\nVENDOR_ID_APTILON_HOLDINGS_INC = 31047\nVENDOR_ID_ART_OF_MOBILE = 31048\nVENDOR_ID_MIDTRONICS_INC = 31049\nVENDOR_ID_CYT_COMUNICACIONES_Y_TELEMTICA_SRL = 31050\nVENDOR_ID_MOJIX_INC = 31051\nVENDOR_ID_LIBERTY_ALLIANCE = 31052\nVENDOR_ID_EVOLVED_INTELLIGENCE = 31053\nVENDOR_ID_TTECH = 31054\nVENDOR_ID_GFSB_GESELLSCHAFT_FUER_SYSTEMBERATUNG_MBH = 31055\nVENDOR_ID_THUNDERBIRD_RESORTS = 31056\nVENDOR_ID_ERGOWELLS = 31057\nVENDOR_ID_TERAGAUGE = 31058\nVENDOR_ID_KNOWN_STAR_BEIJING_KIOSKS_CO_LTD = 31059\nVENDOR_ID_VIDEO_INTERNET_TECHNOLOGIES_LTD = 31060\nVENDOR_ID_CHEOPS_ELEKTRONIK_HANDELS_UND_FERTIGUNGS_KG = 31061\nVENDOR_ID_AERACODE = 31062\nVENDOR_ID_DANIEL_SAUL = 31063\nVENDOR_ID_OPTIMAL_SATCOM_INC = 31064\nVENDOR_ID_TOYO_ELECTRONICS_CORP = 31065\nVENDOR_ID_GSP_LOTEAMENTOS = 31066\nVENDOR_ID_ON_LINE_INFORMATICA = 31067\nVENDOR_ID_TYFON_SVENSKA_AB = 31068\nVENDOR_ID_BELVOK_LTD = 31069\nVENDOR_ID_ZENTZU_INC = 31070\nVENDOR_ID_INTELINET_AS = 31071\nVENDOR_ID_PROQUEST_COMPUTERSYSTEME_GMBH = 31072\nVENDOR_ID_RADIAN_COMPANY = 31073\nVENDOR_ID_ELECTRONIMEC_INC = 31074\nVENDOR_ID_MOBIGEO = 31075\nVENDOR_ID_JAN_FISCHER = 31076\nVENDOR_ID_SYSTEMS_NEUROBIOLOGY_LABORATORY = 31077\nVENDOR_ID_NANKAI_DENSETSU_COLTD = 31078\nVENDOR_ID_BIRCHER_PROCESSCONTROL_AG = 31079\nVENDOR_ID_GALILEO_INTERNATIONAL = 31080\nVENDOR_ID_PERLAN_TECHNOLOGIES_POLSKA_SP_Z_OO = 31081\nVENDOR_ID_EUNETIC_GMBH = 31082\nVENDOR_ID_ALTE_LEIPZIGER_VERSICHERUNG_A_G = 31083\nVENDOR_ID_TECHSAT_GMBH = 31084\nVENDOR_ID_GREYWARE_AUTOMATION_PRODUCTS_INC = 31085\nVENDOR_ID_TECHNOLOGY_NEXUS_SECURED_BUSINESS_SOLUTIONS_AB = 31086\nVENDOR_ID_ENFO_BROADCAST_AS = 31087\nVENDOR_ID_EXTEND_HEALTH_INC = 31088\nVENDOR_ID_CLEMSON_UNIVERSITY = 31089\nVENDOR_ID_SCALE_COMPUTING_INC = 31090\nVENDOR_ID_ANDREAS_TSIOTSIAS = 31091\nVENDOR_ID_GFI_SOFTWARE_LTD = 31092\nVENDOR_ID_PASSGUARD = 31093\nVENDOR_ID_DYNATRACE_SOFTWARE_INC = 31094\nVENDOR_ID_SEC_SOFTWARE_ENGINEERING_CENTER_CHINESE_ACADEMY_OF_SCIENCES = 31095\nVENDOR_ID_KOYO_ELECTRIC_COLTD = 31096\nVENDOR_ID_MOUSE_HOLECOM = 31097\nVENDOR_ID_PJM_INTERCONNECTION_LLC = 31098\nVENDOR_ID_SZ_ID_BV = 31099\nVENDOR_ID_METASCOPIC = 31100\nVENDOR_ID_FUTURE_SPIRITS_COLTD = 31101\nVENDOR_ID_U10_NETWORKS = 31102\nVENDOR_ID_DANIEL_ELLARD = 31103\nVENDOR_ID_EPRO_TELECOM_SERVICES_LTD = 31104\nVENDOR_ID_WMHOST = 31105\nVENDOR_ID_23PROJECTSORG = 31106\nVENDOR_ID_GLOBAL_PROTOCOLS = 31107\nVENDOR_ID_COMPRIVA_COMMUNICATIONS_PRIVACY_SOLUTIONS_INC = 31108\nVENDOR_ID_IAVANTE_FOUNDATION = 31109\nVENDOR_ID_UAB_BT_GRUPE = 31110\nVENDOR_ID_NORFELLO_OY = 31111\nVENDOR_ID_XFORM_SYSTEMS_GMBH = 31112\nVENDOR_ID_SWEMEL_JSC = 31113\nVENDOR_ID_AETNA_GROUP_SPA = 31114\nVENDOR_ID_INFOWATCH = 31115\nVENDOR_ID_CUESTA_COLLEGE = 31116\nVENDOR_ID_QUALITY_BICYCLE_PRODUCTS_INC = 31117\nVENDOR_ID_CRYPTOMACH_LTD = 31118\nVENDOR_ID_I_NODE_SRL = 31119\nVENDOR_ID_QIPLAY = 31120\nVENDOR_ID_TECHFIRM_INC = 31121\nVENDOR_ID_VOIPFUTURE_LTD = 31122\nVENDOR_ID_WUHAN_TEKLONG_TECHNOLOGY_COLTD = 31123\nVENDOR_ID_ABF_BALTIC_AS = 31124\nVENDOR_ID_RESSOURCES_INFORMATIQUES = 31125\nVENDOR_ID_ASTELLIA = 31126\nVENDOR_ID_EMERSON_PROCESS_MANAGEMENT = 31127\nVENDOR_ID_LEAD_TECH_DESIGN = 31128\nVENDOR_ID_ALASKA_SATELLITE_FACILITY = 31129\nVENDOR_ID_BASHO_TECHNOLOGIES_INC = 31130\nVENDOR_ID_ILOVE2SKI = 31131\nVENDOR_ID_DICTAO = 31132\nVENDOR_ID_TRITON_CONTAINER_INTL = 31133\nVENDOR_ID_KINDEREDHEART = 31134\nVENDOR_ID_DIGLINKS_GMBH = 31135\nVENDOR_ID_GESTIN_DE_SEGURIDAD_ELECTRNICA_SA_GSE_SA = 31136\nVENDOR_ID_BILDUNGSZENTRUM_USTER = 31137\nVENDOR_ID_DRJAYSCOM_INC = 31138\nVENDOR_ID_VIV_DIWAKAR = 31139\nVENDOR_ID_TOUK_SP_Z_O_O_S_K_A = 31140\nVENDOR_ID_GEMIK = 31141\nVENDOR_ID_7SIGNAL_OY = 31142\nVENDOR_ID_ANDREAS_STENIUS_TEKNIKKONSULT = 31143\nVENDOR_ID_CORPORACIN_SANTANDEREANA_PARA_EL_AVANCE_Y_LA_INNOVACIN_CIENTFICA_Y_TECNOLGICA_AVANCE = 31144\nVENDOR_ID_HOLIDO = 31145\nVENDOR_ID_MATRIKONOPC = 31146\nVENDOR_ID_RIVERSTAR_SOFTWARE = 31147\nVENDOR_ID_SAGA_DOO_BEOGRAD = 31148\nVENDOR_ID_SOUTH_WEST_UNIVERSITY = 31149\nVENDOR_ID_TRIUMSTAR_INTERNATIONAL_CO_LTD = 31150\nVENDOR_ID_SIXGREEN = 31151\nVENDOR_ID_ALLEGEA_INFORMATION_SERVICES = 31152\nVENDOR_ID_AONALU = 31153\nVENDOR_ID_CK_PRODUCTIONS = 31154\nVENDOR_ID_SEYO_SOLUTIONS = 31155\nVENDOR_ID_BY_LIGHT_PROFESSIONAL_IT_SERVICES = 31156\nVENDOR_ID_PATERSONS_HR_PAYROLL_SOLUTIONS = 31157\nVENDOR_ID_TEAM_ENGINEERS = 31158\nVENDOR_ID_STADTWERKE_SPEYER_GMBH = 31159\nVENDOR_ID_DARTALIS_SA = 31160\nVENDOR_ID_SMTC_CO_LTD = 31161\nVENDOR_ID_EMC_ELECTRONIC_MEDIA_COMMUNICATION_SA = 31162\nVENDOR_ID_ULTRA_ELECTRONICS_TACTICAL_COMMUNICATION_SYSTEMS = 31163\nVENDOR_ID_XWEB_OG = 31164\nVENDOR_ID_ACTIVE_STORAGE_INC = 31165\nVENDOR_ID_VIM_INTERNETDIENSTLEISTUNGEN_GMBH = 31166\nVENDOR_ID_HOME_STATE_BANK = 31167\nVENDOR_ID_PLEORA_TECHNOLOGIES_INC = 31168\nVENDOR_ID_MEDICAL_FACILITIES_OF_AMERICA = 31169\nVENDOR_ID_PNG_DEVELOPMENT_GROUP = 31170\nVENDOR_ID_NING_INC = 31171\nVENDOR_ID_BROWARD_SHERIFFS_OFFICE = 31172\nVENDOR_ID_ALASKA_DEPARTMENT_OF_FISH_GAME = 31173\nVENDOR_ID_MOBILE_ACTIVE_PTY_LTD = 31174\nVENDOR_ID_PARTITION_TRAGIC = 31175\nVENDOR_ID_LARGIC_COLTD = 31176\nVENDOR_ID_QUANTM = 31177\nVENDOR_ID_GROUNDHOG_SOFTWARE = 31178\nVENDOR_ID_MICRO_RESEARCH_LTD = 31179\nVENDOR_ID_CENTRE_FOR_DEVELOPMENT_OF_ADVANCED_COMPUTING = 31180\nVENDOR_ID_DBALAB_SPA = 31181\nVENDOR_ID_VILLE_DE_LUXEMBOURG = 31182\nVENDOR_ID_THE_LOGIC_GROUP_ENTERPRISES_LTD = 31183\nVENDOR_ID_EWE_AG = 31184\nVENDOR_ID_KELL_SYSTEMS = 31185\nVENDOR_ID_MYBASTACOM = 31186\nVENDOR_ID_SECURE_DESIGNS_INC = 31187\nVENDOR_ID_ENGEL_SOLUTIONS_AG = 31188\nVENDOR_ID_RHOMBOTECH_LLC = 31189\nVENDOR_ID_HACKERS_TREASURE_ZOO = 31190\nVENDOR_ID_ALSET_CORPORATION = 31191\nVENDOR_ID_HELLA_KGAA_HUECK_CO = 31192\nVENDOR_ID_DT_NETSOLUTION_GMBH = 31193\nVENDOR_ID_PUBLIC_ASSOCIATION_RENAM_RESEARCH_AND_EDUCATIONAL_NETWORKING_ASSOCIATION_OF_MOLDOVA = 31194\nVENDOR_ID_AUDIO_DATA_TON_UND_DATENTECHNIK_GMBH = 31195\nVENDOR_ID_SOSIALISTISK_VENSTREPARTI = 31196\nVENDOR_ID_OUSMANE_BA_INTERNATIONAL_BUSINESS_AUTOMATION = 31197\nVENDOR_ID_THOMAS_STEIN = 31198\nVENDOR_ID_E_LEARNING_SA = 31199\nVENDOR_ID_IS_RO_INFORMATIONS_ARCHITEKTUR = 31200\nVENDOR_ID_DOTCOM_MONITOR_INC = 31201\nVENDOR_ID_WIREDOBJECTS = 31202\nVENDOR_ID_JENOMICS_GMBH = 31203\nVENDOR_ID_I_JAMES_TECHNOLOGY = 31204\nVENDOR_ID_NEWSROOM_SOLUTIONS_LLC = 31205\nVENDOR_ID_DRS_TEST_AND_ENERGY_MANAGEMENT_LLC = 31206\nVENDOR_ID_VERTICA_SYSTEMS_INC = 31207\nVENDOR_ID_SENECA_COLLEGE_OF_APPLIED_ARTS_TECHNOLOGY = 31208\nVENDOR_ID_LIGHTCOMM_TECHNOLOGY = 31209\nVENDOR_ID_CROSS_TECHNOLOGIES_INC = 31210\nVENDOR_ID_ENGINEERING_DESIGN_TEAM_INC = 31211\nVENDOR_ID_SENOTRON_GMBH = 31212\nVENDOR_ID_INTEGRAT_PTY_LTD = 31213\nVENDOR_ID_ADIPSYS = 31214\nVENDOR_ID_PFS = 31215\nVENDOR_ID_PCM_INDUSTRIES = 31216\nVENDOR_ID_AST = 31217\nVENDOR_ID_UCOPIA_COMMUNICATIONS = 31218\nVENDOR_ID_KUBUS_IT_GBR = 31219\nVENDOR_ID_SYBERIAN = 31220\nVENDOR_ID_NIGGEMANN_INNOVATIONS_GMBH = 31221\nVENDOR_ID_IDIUM_AS = 31222\nVENDOR_ID_SPIDER_FINANCIAL = 31223\nVENDOR_ID_HORIZON_SEMICONDUCTORS = 31224\nVENDOR_ID_PULSE_POWER_AND_MEASUREMENT_LTD = 31225\nVENDOR_ID_NWG_TECHNOLOGIES_LLC = 31226\nVENDOR_ID_US_CABLE = 31227\nVENDOR_ID_RUSTEDCOMPUTINGCOM = 31228\nVENDOR_ID_ONE_CONVERGENCE = 31229\nVENDOR_ID_LAZURIT = 31230\nVENDOR_ID_LONGHURST_GROUP = 31231\nVENDOR_ID_RINGCENTRAL_INC = 31232\nVENDOR_ID_ALMIRA_LABS_SL = 31233\nVENDOR_ID_INTER7_INTERNET_TECHNOLOGIES_INC = 31234\nVENDOR_ID_ENVALE_SYSTEMS_PVT_LTD = 31235\nVENDOR_ID_PARTYGAMING_PLC = 31236\nVENDOR_ID_ESIGMA_TECHNOLOGY_AG = 31237\nVENDOR_ID_BAUMANNAT_CONCEPTS_SULOTIONS = 31238\nVENDOR_ID_AUSTRIAPRO_E_ZUSTELLUNG = 31239\nVENDOR_ID_I_MOVE_INTERNET_GMBH = 31240\nVENDOR_ID_CROSS_INDUSTRIES_AG = 31241\nVENDOR_ID_FOSTER_LINK_INC = 31242\nVENDOR_ID_INTERHOST_AS = 31243\nVENDOR_ID_FRESH_MEDIA_GROUP = 31244\nVENDOR_ID_BRANDON_WERNER = 31245\nVENDOR_ID_REALMAGIC_TECHNOLOGY_LTD = 31246\nVENDOR_ID_DIGISSL_INC = 31247\nVENDOR_ID_FIELD_SOLUTIONS_LLC = 31248\nVENDOR_ID_DARUMA_TELECOMUNICACOES_E_INFORMATICA_S_A = 31249\nVENDOR_ID_AVNET = 31250\nVENDOR_ID_OL_TELECOM = 31251\nVENDOR_ID_ELMECH = 31252\nVENDOR_ID_ANDRE_HOTZLER_EDV_DIENSTLEISTUNGEN = 31253\nVENDOR_ID_FOOMAN_LIMITED = 31254\nVENDOR_ID_MAC_TELECOM_TECHNOLOGIES_PVT_LTD = 31255\nVENDOR_ID_CSO_SRL = 31256\nVENDOR_ID_ELXSI_NETWORKING_SERVICES = 31257\nVENDOR_ID_3ONEDATA_TECHNOLOGY_CO_LTD = 31258\nVENDOR_ID_SISNETINFO_CO_LTD = 31259\nVENDOR_ID_PHEBUS = 31260\nVENDOR_ID_PLACID_SKY_CONSULTING = 31261\nVENDOR_ID_HOLA_SA = 31262\nVENDOR_ID_RIGA_TECHNICAL_UNIVERSITY = 31263\nVENDOR_ID_TEGNIX = 31264\nVENDOR_ID_QUEENSLAND_STUDIES_AUTHORITY = 31265\nVENDOR_ID_PRIVREDNA_KOMORA_SRBIJE = 31266\nVENDOR_ID_ZIVIOS_LLC = 31267\nVENDOR_ID_NUBIUM_SYSTEMS = 31268\nVENDOR_ID_SAPOTEK_INC = 31269\nVENDOR_ID_XROADS_NETWORKS = 31270\nVENDOR_ID_GENI_INC = 31271\nVENDOR_ID_ED_GREENBERG_TECHNICAL_SERVICES_CORP = 31272\nVENDOR_ID_RIS_TECHNOLOGY = 31273\nVENDOR_ID_WEBMASTERPROGRAMM_GMBH = 31274\nVENDOR_ID_TTG_ULUSLARARASI_TELEKOMINIKASYON_ILETISIM_HIZMETLERI_VE_ELEKTTICLTDSTI = 31275\nVENDOR_ID_DSA_VOLGMANN = 31276\nVENDOR_ID_FLUIDMESH_NETWORKS_INC = 31277\nVENDOR_ID_ALPHONS_TECH_CO_LTD = 31278\nVENDOR_ID_SHENZHEN_ROUTDATA_TECHNOLOGY_CO_LTD = 31279\nVENDOR_ID_PREMIERSOFT_SINGAPORE_PTE_LTD = 31280\nVENDOR_ID_SOURCEPHOTONICS = 31281\nVENDOR_ID_SOLID_ACCESS_TECHNOLOGIES_LLC = 31282\nVENDOR_ID_SONOWAND_AS = 31283\nVENDOR_ID_SPAZIDIGITALI = 31284\nVENDOR_ID_BEIJING_3V_COMMUNICATION_TECHNOLOGY_COLTD = 31285\nVENDOR_ID_VALORA_HOLDING_AG = 31286\nVENDOR_ID_FUTUREIT = 31287\nVENDOR_ID_PARTNERS_DATA_SYSTEMS_INC = 31288\nVENDOR_ID_SARL_SECOM_GMIXON_PIXELIRIS = 31289\nVENDOR_ID_NISSAN_FINACIAL_SERVICES_CO_LTD = 31290\nVENDOR_ID_MINUTOLO = 31291\nVENDOR_ID_WPC_VOGT = 31292\nVENDOR_ID_TATA_VROS_POLGRMESTERI_HIVATALA = 31293\nVENDOR_ID_IMPETUS_INFOTECH_INDIA_PVT_LTD = 31294\nVENDOR_ID_AQUALECTRA_BV = 31295\nVENDOR_ID_KYNETIX = 31296\nVENDOR_ID_DORTMUND_UNIVERSITY_OF_TECHNOLOGY = 31297\nVENDOR_ID_HOCHSCHULE_ANHALT_FH = 31298\nVENDOR_ID_ELITE_CRM_SOFTWARE_LTD = 31299\nVENDOR_ID_EMMESKAY = 31300\nVENDOR_ID_LITHEWARE_PTY_LTD = 31301\nVENDOR_ID_SCUTTLEDMONKEY = 31302\nVENDOR_ID_HELLOWEB = 31303\nVENDOR_ID_ANDES_SCD = 31304\nVENDOR_ID_SURE_TECH_HK_LIMITED = 31305\nVENDOR_ID_SEVERED_HEAD_SOFTWARE_LTD = 31306\nVENDOR_ID_ASTARSOFT = 31307\nVENDOR_ID_PACIFIC_NETWORK_RESEARCH = 31308\nVENDOR_ID_QUINTESSENCELABS_PTY_LTD = 31309\nVENDOR_ID_CRYPTECHNIQ_PTY_LTD = 31310\nVENDOR_ID_CEMA_ASP = 31311\nVENDOR_ID_JENS_AXBOE_LINUX_KERNEL = 31312\nVENDOR_ID_NETS_DANID_A_S = 31313\nVENDOR_ID_PRIVA_BV = 31314\nVENDOR_ID_THALES_ALENIA_SPACE_ITALIA = 31315\nVENDOR_ID_SEED_LINUX = 31316\nVENDOR_ID_ADTELECOM_SL = 31317\nVENDOR_ID_SOUTHERN_SYMENTECH_SOLUTIONS_PRIVATE_LIMITED = 31318\nVENDOR_ID_PORTUGAL_TELECOM_SA = 31319\nVENDOR_ID_DISIG_AS = 31320\nVENDOR_ID_MUNISENSE_BV = 31321\nVENDOR_ID_SIERRA_WIRELESS_INC = 31322\nVENDOR_ID_EXELATE_MEDIA = 31323\nVENDOR_ID_CTS_CORPORATION = 31324\nVENDOR_ID_HOWARD_UNIVERSITY = 31325\nVENDOR_ID_APOLLO_SECURITY_SALES_INC = 31326\nVENDOR_ID_GREENPLUM = 31327\nVENDOR_ID_WHISPERING_WOLF_PRODUCTIONS = 31328\nVENDOR_ID_DIGINEXT_BV = 31329\nVENDOR_ID_COMSTAR_INC = 31330\nVENDOR_ID_COMMUTURE_CORP = 31331\nVENDOR_ID_DRREISACHER = 31332\nVENDOR_ID_PUREKERNEL_SYSTEMS_LIMITED = 31333\nVENDOR_ID_UNICON_INC = 31334\nVENDOR_ID_JOHN_ANTYPAS = 31335\nVENDOR_ID_NEOVERA_INC = 31336\nVENDOR_ID_UNION_COMSTAR = 31337\nVENDOR_ID_KAVACH_NETWORKS_PRIVATE_LIMITED = 31338\nVENDOR_ID_TRIADA = 31339\nVENDOR_ID_JIWALU = 31340\nVENDOR_ID_INNOSYSTEC_GMBH = 31341\nVENDOR_ID_S_TERRA_CSP = 31342\nVENDOR_ID_FESTO_AG_CO_KG = 31343\nVENDOR_ID_TRIPADVISOR = 31344\nVENDOR_ID_SUN_MICROSYSTEMS_BC_INC = 31345\nVENDOR_ID_CINE_TAL = 31346\nVENDOR_ID_SPIRUS_APPLIED_LEARNING_SOLUTIONS_AG = 31347\nVENDOR_ID_DONET_SAC = 31348\nVENDOR_ID_DIGITAL_WAVE_COLTD = 31349\nVENDOR_ID_GOVERNMENT_INFORMATION_MANAGEMENT_UNIT_MINISTRY_OF_FINANCE_FINLAND = 31350\nVENDOR_ID_MANAGEDHOSTINGDE_GMBH = 31351\nVENDOR_ID_METEOGROUP_DEUTSCHLAND = 31352\nVENDOR_ID_IKU_SYSTEMS_SERVICES_GMBH_CO_KG = 31353\nVENDOR_ID_COMPUTA_SERVICES_AND_CONSULTANTS_LTD = 31354\nVENDOR_ID_TUXICOMAN = 31355\nVENDOR_ID_CASA_BRASIL = 31356\nVENDOR_ID_GUOKE_TEKINC = 31357\nVENDOR_ID_ID3_SEMICONDUCTORS = 31358\nVENDOR_ID_ORCANTHUS = 31359\nVENDOR_ID_REVENCO = 31360\nVENDOR_ID_CONJECT_AG = 31361\nVENDOR_ID_FHEIGL = 31362\nVENDOR_ID_SUMLOGIC_INNOVATIONS = 31363\nVENDOR_ID_BEE_MEDIASOFT_LIMITED = 31364\nVENDOR_ID_MAXSP_CORPORATION = 31365\nVENDOR_ID_MMJ_GROUP_INC = 31366\nVENDOR_ID_ASSECO_SLOVAKIA_AS = 31367\nVENDOR_ID_SYSTANCIA_SA = 31368\nVENDOR_ID_OHMFORCE = 31369\nVENDOR_ID_JUGENDZENTRUM_EV_KARLSTR_13 = 31370\nVENDOR_ID_COMMUNICADO_INC = 31371\nVENDOR_ID_UNIVERSITY_OF_SOUTHERN_INDIANA = 31372\nVENDOR_ID_CENELEC_TC79_WG7_CCTV_SURVEILLANCE_SYSTEMS = 31373\nVENDOR_ID_PLANSMITH_CORPORATION = 31374\nVENDOR_ID_THE_HUB_PARTNERSHIP_LLP = 31375\nVENDOR_ID_RELIABLE_SCIENCE_TECHNOLOGY_COLTD = 31376\nVENDOR_ID_BUUNSOFT = 31377\nVENDOR_ID_VERVIS_COMINT_SERVICES_GMBH = 31378\nVENDOR_ID_INFORM_SOLUTIONS_GMBH = 31379\nVENDOR_ID_CITEC = 31380\nVENDOR_ID_TI_WMC = 31381\nVENDOR_ID_EDEKA_HANDELSGESELLSCHAFT_SUEDWEST_MBH = 31382\nVENDOR_ID_EAST_TAIYA_WIRELESS_TELECOMMUNICATION_INC = 31383\nVENDOR_ID_PORT25_SOLUTIONS_INC = 31384\nVENDOR_ID_ZYLEX_SYSTEMS = 31385\nVENDOR_ID_ARCHE_ENGENHARIA_E_COMERCIO_DE_SISTEMAS_DE_AUTOMACAO_E_TELEINFORMATICA_LTDA = 31386\nVENDOR_ID_ROW_44_INC = 31387\nVENDOR_ID_ON_NET_SURVEILLANCE_SYSTEMS_INC_ONSSI = 31388\nVENDOR_ID_SVEN_RICHTER = 31389\nVENDOR_ID_URAL_STATE_FOREST_ENGINEERING_UNIVERSITY = 31390\nVENDOR_ID_OAKTON_COMMUNITY_COLLEGE = 31391\nVENDOR_ID_SQUARED_FINANCIAL_SERVICES_LTD = 31392\nVENDOR_ID_ONEBEACON_INSURANCE = 31393\nVENDOR_ID_VICTRON_ENERGY_BV = 31394\nVENDOR_ID_THE_TRANSLATIONAL_GENOMICS_RESEARCH_INSTITUTE = 31395\nVENDOR_ID_HPC_SYSTEMS_INC = 31396\nVENDOR_ID_ARMOR_SAFE_TECHNOLOGIES_LLC = 31397\nVENDOR_ID_SUBURBIA_PUBLIC_ACCESS_NETWORK = 31398\nVENDOR_ID_SCALABLE_NETWORK_TECHNOLOGIES = 31399\nVENDOR_ID_WAVEGUIDER_TECHNOLOGY_LTD = 31400\nVENDOR_ID_SARBARIAN_SOFTWARE = 31401\nVENDOR_ID_WINLAB = 31402\nVENDOR_ID_MGAME_JAPAN_CORP = 31403\nVENDOR_ID_OPTIWAVE_PHOTONICS_LIMITED = 31404\nVENDOR_ID_X_TEC_GMBH_ICNS = 31405\nVENDOR_ID_LE_STUDIO_VERT = 31406\nVENDOR_ID_ON_X = 31407\nVENDOR_ID_CINCINNATI_COUNTRY_DAY_SCHOOL = 31408\nVENDOR_ID_TELEMETRY_NETWORK_SYSTEM = 31409\nVENDOR_ID_TENROSES_SRL = 31410\nVENDOR_ID_EDINBORO_UNIVERSITY_OF_PA = 31411\nVENDOR_ID_CARTER_AND_ASSOCIATES = 31412\nVENDOR_ID_EBIZ_CONSULTING_INC = 31413\nVENDOR_ID_MMK = 31414\nVENDOR_ID_NEDERLANDS_MINISTERIE_VAN_BUITENLANDSE_ZAKEN = 31415\nVENDOR_ID_EDEVAG_CONSULTING_HB = 31416\nVENDOR_ID_TOKYO_UNIVERSITY_OF_SCIENCE = 31417\nVENDOR_ID_ADEXSO_ADVANCED_EXPERT_SOLUTIONS = 31418\nVENDOR_ID_SKALARIT_AB_FORMERLY_SKVADER_SYSTEMS_AB = 31419\nVENDOR_ID_TEAM2WORK_GBR = 31420\nVENDOR_ID_COBLAN_SRL = 31421\nVENDOR_ID_RETAILP_SAS = 31422\nVENDOR_ID_IDENTITY_TECHNOLOGY_LTD = 31423\nVENDOR_ID_EGOTHOR = 31424\nVENDOR_ID_MOUNTAIN_POWER_INC = 31425\nVENDOR_ID_WEDDELL_IT_SOLUTIONS = 31426\nVENDOR_ID_TICKETPRO_GMBH = 31427\nVENDOR_ID_PT_TELEMETRI_INDONESIA = 31428\nVENDOR_ID_REALCONNECT_PTY_LTD = 31429\nVENDOR_ID_RSU_GMBH = 31430\nVENDOR_ID_COSISO = 31431\nVENDOR_ID_COURTYARD_ELECTRONICS_LTD = 31432\nVENDOR_ID_TOUMAZ_TECHNOLOGY_LIMITED = 31433\nVENDOR_ID_MINERVA_KOREA = 31434\nVENDOR_ID_USERS_INCORPORATED = 31435\nVENDOR_ID_ANSLEY_ASSOCIATES_INC = 31436\nVENDOR_ID_CALL_CALL_HOLDING_SPA = 31437\nVENDOR_ID_PHOOPS_SRL = 31438\nVENDOR_ID_CORREO_URUGUAYO = 31439\nVENDOR_ID_EMBEDDED_DATA_SYSTEMS_LLC = 31440\nVENDOR_ID_EURIKA_SRL = 31441\nVENDOR_ID_JONDOS_GMBH = 31442\nVENDOR_ID_THE_ALBERTA_LIBRARY = 31443\nVENDOR_ID_MAKELSAN_LTD = 31444\nVENDOR_ID_FATBOX_INC = 31445\nVENDOR_ID_CATPIPE = 31446\nVENDOR_ID_IRGA_PRODUCTION_COMPANY = 31447\nVENDOR_ID_PROLANCER_PTY_LTD = 31448\nVENDOR_ID_PERFECT_LINE_SA = 31449\nVENDOR_ID_DAVID_ROURKE = 31450\nVENDOR_ID_IPADO_INFORMATIKER_PARTNERSCHAFT_PAUXBERGER_UND_DOMSCHKE = 31451\nVENDOR_ID_VS_INFORMATION_SYSTEMS = 31452\nVENDOR_ID_ZYRION_INC = 31453\nVENDOR_ID_TOWEBS_INC = 31454\nVENDOR_ID_BULB = 31455\nVENDOR_ID_SCAPECASTER = 31456\nVENDOR_ID_MEEBO_INC = 31457\nVENDOR_ID_RAVIOLIKINGDOMCOM = 31458\nVENDOR_ID_UNITED_STATES_PEOPLES_VIRTUAL_PARTY = 31459\nVENDOR_ID_VERSATILE_SECURITY_SWEDEN_AB = 31460\nVENDOR_ID_SCHSISCHE_INFORMATIONS_COMPAGNIE_ZU_BERLIN_MARCUS_PAULI = 31461\nVENDOR_ID_CANARE = 31462\nVENDOR_ID_ITIBIA_TECHNOLOGIES_INC = 31463\nVENDOR_ID_EPCOM_IT_SYSTEME_PIRKER_ZAUNER_OEG = 31464\nVENDOR_ID_SYSTEMICA_CONSULTING = 31465\nVENDOR_ID_NEOCONSULT_A_S = 31466\nVENDOR_ID_GRAVITY_INTERACTIVE_INC = 31467\nVENDOR_ID_THE_BLUENOTE_GROUP = 31468\nVENDOR_ID_ALIOR_BANK_SA = 31469\nVENDOR_ID_VECTOR_DATA_LLC = 31470\nVENDOR_ID_SUNSTROM_GMBH = 31471\nVENDOR_ID_AXCERA_INC = 31472\nVENDOR_ID_NOVA_CHEMICALS_CORPORATION = 31473\nVENDOR_ID_VIAGENIE_INC = 31474\nVENDOR_ID_ITS_SCHMIDINGER_GMBH = 31475\nVENDOR_ID_DEVIANT_SOFTWARE = 31476\nVENDOR_ID_TTC_MARCONI_SRO = 31477\nVENDOR_ID_PLURIBUS = 31478\nVENDOR_ID_GREY_GROUP = 31479\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_RIO_GRANDE = 31480\nVENDOR_ID_ABBRIS_LTD = 31481\nVENDOR_ID_TOP_LEVEL_INTERNET_PTY_LTD = 31482\nVENDOR_ID_UNIVERSIDAD_REY_JUAN_CARLOS = 31483\nVENDOR_ID_BASSET_AB_FORMERLY_BASSETLABS_AB = 31484\nVENDOR_ID_FLEXSECURE_GMBH = 31485\nVENDOR_ID_LOGICA_NORR_AB = 31486\nVENDOR_ID_THE_TRANSACTION_COMPANY = 31487\nVENDOR_ID_OXYLANE = 31488\nVENDOR_ID_MANCHESTER_COMPUTING_LTD = 31489\nVENDOR_ID_MONNSTA = 31490\nVENDOR_ID_CABO_TELECOM = 31491\nVENDOR_ID_BOCOM_SECURITYASIA_PACIFIC_LIMITED = 31492\nVENDOR_ID_THE_HOSPITAL_AUTHORITY_HONG_KONG = 31493\nVENDOR_ID_HOST_17 = 31494\nVENDOR_ID_COMBE_WALDEN_ASSOCIATES_LIMITED = 31495\nVENDOR_ID_NETMODULE_AG = 31496\nVENDOR_ID_HAUTE_ECOLE_DINGNIERIE_ET_DE_GESTION_DU_CANTON_DE_VAUD_HEIG_VD = 31497\nVENDOR_ID_STIFTUNG_SYMPANY = 31498\nVENDOR_ID_NOVOZYMES_A_S = 31499\nVENDOR_ID_LINDSAY_BROADBAND_INC = 31500\nVENDOR_ID_KHALEDMA = 31501\nVENDOR_ID_MANTARAY_AB = 31502\nVENDOR_ID_SANITAS_SA_DE_SEGUROS = 31503\nVENDOR_ID_NETWORKERS_AG = 31504\nVENDOR_ID_DIRECCIN_GENERAL_DE_TRFICO = 31505\nVENDOR_ID_DRAGONFLY_GRZEGORZ_MARSZAEK = 31506\nVENDOR_ID_ARCUTRONIX_GMBH = 31507\nVENDOR_ID_INTERNAT_DER_MARISTENBRDER_MINDELHEIM = 31508\nVENDOR_ID_SOAPSTONE_NETWORKS = 31509\nVENDOR_ID_NEW_HORIZONS = 31510\nVENDOR_ID_HENRY_FORD_COMMUNITY_COLLEGE = 31511\nVENDOR_ID_BITTWARE_INC = 31512\nVENDOR_ID_PROSUL_PROJETOS_SUPERVISO_E_PLANEJAMENTO_LTDA = 31513\nVENDOR_ID_SOFTWARE_HORIZONS_INC = 31514\nVENDOR_ID_SIZEIT_DRIFT_AKTIEBOLAG = 31515\nVENDOR_ID_ZEN_INTERNET_LIMITED = 31516\nVENDOR_ID_AKIXA = 31517\nVENDOR_ID_INTERNATIONAL_ALL_SPORTS_LIMITED = 31518\nVENDOR_ID_JAKKO_NETWORK = 31519\nVENDOR_ID_IPERFECTA_JAPAN_LTD = 31520\nVENDOR_ID_UNIVAR_BENELUX_SA = 31521\nVENDOR_ID_WASHINGTON_APPLE_PI_LTD = 31522\nVENDOR_ID_COMMUNITY_HEALTH_INFORMATION_COLLABORATIVE = 31523\nVENDOR_ID_MLLER_IT_GMBH = 31524\nVENDOR_ID_NEC_LABORATORIES_EUROPE = 31525\nVENDOR_ID_CHANGE_NETWORKS_A_S = 31526\nVENDOR_ID_VMF_NORD_EK_FR = 31527\nVENDOR_ID_SIEMENS_SA_IA_SPAIN = 31528\nVENDOR_ID_PENSIONSKASSE_SBB = 31529\nVENDOR_ID_TSI_POWER_CORPORATION = 31530\nVENDOR_ID_IMMUTIFY_LIMITED = 31531\nVENDOR_ID_ENSYNCH_INC = 31532\nVENDOR_ID_SCANSAFE_LTD = 31533\nVENDOR_ID_ADFINIS_SYGROUP_AG_FORMERLY_SYGROUP_GMBH = 31534\nVENDOR_ID_PARKEON = 31535\nVENDOR_ID_OPENNHRP_PROJECT = 31536\nVENDOR_ID_GOSSAMER_THREADS_INC = 31537\nVENDOR_ID_VELOCITY_NETWORK = 31538\nVENDOR_ID_TRAVELING_BITS_INC = 31539\nVENDOR_ID_INTEC_INC = 31540\nVENDOR_ID_YAAMEN_INC = 31541\nVENDOR_ID_ROBERT_CARLETON = 31542\nVENDOR_ID_RIONERO = 31543\nVENDOR_ID_SISTEMA_INTEGRADO_DE_DEFESA_SOCIAL = 31544\nVENDOR_ID_YELLOWBOOK_INC = 31545\nVENDOR_ID_ROTARY_INTERNATIONAL = 31546\nVENDOR_ID_COGITO_MANAGEMENT_CONSULTING = 31547\nVENDOR_ID_MEDIA_BROADCAST_TECHNOLOGIES = 31548\nVENDOR_ID_SHU_TE_UNIVERSITY = 31549\nVENDOR_ID_K_FRANCHISE_VERTRIEBSSYSTEME_GESELLSCHAFT_MBH = 31550\nVENDOR_ID_NIECHOJ_ELECTRONIC_GMBH = 31551\nVENDOR_ID_DISFORCE = 31552\nVENDOR_ID_INVOCROWN_LTD = 31553\nVENDOR_ID_ELVYS_LTD = 31554\nVENDOR_ID_VCS_AKTIENGESELLSCHAFT = 31555\nVENDOR_ID_TIQ_SRL = 31556\nVENDOR_ID_VISION_TECHNOLOGIES_INC = 31557\nVENDOR_ID_DAVID_M_BROOKE = 31558\nVENDOR_ID_PATHSOLUTIONS = 31559\nVENDOR_ID_ARTEC_COMPUTER_GMBH = 31560\nVENDOR_ID_TELECOMPRODUCT = 31561\nVENDOR_ID_BACKCOUNTRYCOM = 31562\nVENDOR_ID_HGST = 31563\nVENDOR_ID_CHAINZONE_TECH_IND = 31564\nVENDOR_ID_NURMINEN_LOGISTICS_OYJ = 31565\nVENDOR_ID_YTTI = 31566\nVENDOR_ID_EURECA = 31567\nVENDOR_ID_LICENSYS_PTY_LTD = 31568\nVENDOR_ID_BRANDEN_SCHNEIDER = 31569\nVENDOR_ID_GNODAL = 31570\nVENDOR_ID_NARRATONE_PTE_LTD = 31571\nVENDOR_ID_CONSOLIDATED_SMART_SYSTEMS = 31572\nVENDOR_ID_PEEL_DISTRICT_SCHOOL_BOARD = 31573\nVENDOR_ID_SECURITY_MONSTER = 31574\nVENDOR_ID_INNOGAMES_GMBH = 31575\nVENDOR_ID_CTC_ENGINEERING_LTD = 31576\nVENDOR_ID_7SAFE_LTD = 31577\nVENDOR_ID_A2X_TREFZER_CONSULTING = 31578\nVENDOR_ID_VIRGITECH = 31579\nVENDOR_ID_DEPARTAMENTO_DE_ENGENHARIA_ELETRNICA_CEFET_RJ = 31580\nVENDOR_ID_REDDOXX_GMBH = 31581\nVENDOR_ID_CAIXA_GERAL_DE_DEPSITOS = 31582\nVENDOR_ID_AGILTECH = 31583\nVENDOR_ID_BEN_JEN_ONLINE = 31584\nVENDOR_ID_UMOE_COMMUNICATION = 31585\nVENDOR_ID_TERAGRAM_A_SAS_COMPANY = 31586\nVENDOR_ID_UNIV_COMMUNITY = 31587\nVENDOR_ID_ICEWAVE = 31588\nVENDOR_ID_AXLON_ELECTRONICS_CORPORATION = 31589\nVENDOR_ID_MRI_CARDIAC_SERVICES_INC = 31590\nVENDOR_ID_DIGITAL_GOVERNANCE = 31591\nVENDOR_ID_JUMP_TRADING_LLC = 31592\nVENDOR_ID_ELECTRONIC_CHILD_HEALTH_NETWORK = 31593\nVENDOR_ID_ELM_TECHNOLOGY = 31594\nVENDOR_ID_KGLOBAL_TECH_CO_LTD = 31595\nVENDOR_ID_OJSC_ICFO = 31596\nVENDOR_ID_GLOBAL_REAL_ESTATE_AND_TECHNOLOGY_CONSORTIUM_INC = 31597\nVENDOR_ID_GROK_A_LOT_LLC = 31598\nVENDOR_ID_P0F_SISTEMSKE_STORITVE_GREGA_BREMEC_SP = 31599\nVENDOR_ID_BEIJING_TECHSOLUTE_TECHNOLOGY_CO_LTD = 31600\nVENDOR_ID_DREAMGARAGE_INC = 31601\nVENDOR_ID_RAYING_TECHNOLOGY_CO_LTD = 31602\nVENDOR_ID_INFORMATION_SOCIETY_DEVELOPMENT_COMMITTEE_UNDER_THE_GOVERNMENT_OF_THE_REPUBLIC_OF_LITHUANIA = 31603\nVENDOR_ID_SUNNY_MULTIMEDIA_COLTD = 31604\nVENDOR_ID_EKAHAU_OY = 31605\nVENDOR_ID_LUMINOUS_POWER_TECHNOLOGIES_PVT_LTD = 31606\nVENDOR_ID_EBOX_TECHNOLOGIES_SL = 31607\nVENDOR_ID_EMAGING = 31608\nVENDOR_ID_LISP = 31609\nVENDOR_ID_NOISIVNE = 31610\nVENDOR_ID_CALIFORNIA_CREATIVITY_ASSOCIATION_INC = 31611\nVENDOR_ID_ROESSNER_NETWORK_SOLUTIONS = 31612\nVENDOR_ID_EXTRAWERK = 31613\nVENDOR_ID_UBUNTU_NL = 31614\nVENDOR_ID_LEVELER_LLC = 31615\nVENDOR_ID_LINUX_INK = 31616\nVENDOR_ID_CELESTE = 31617\nVENDOR_ID_CLOUDPIC = 31618\nVENDOR_ID_EDITORA_ABRIL_SA = 31619\nVENDOR_ID_THE_JM_SMUCKER_COMPANY = 31620\nVENDOR_ID_MOCA_MULTIMEDIA_OVER_COAX_ALLIANCE = 31621\nVENDOR_ID_MEDDIUS_LLC = 31622\nVENDOR_ID_INFORMATION_SECURITY_CORP = 31623\nVENDOR_ID_PREMIER_HEART = 31624\nVENDOR_ID_ASTRON_FORTIS_INC = 31625\nVENDOR_ID_LEE_DICKENS_LTD = 31626\nVENDOR_ID_PREFERRED_VOICE_INC = 31627\nVENDOR_ID_OPTICOM_COMMUNICATIONS_LLC = 31628\nVENDOR_ID_FENGYUNLTD = 31629\nVENDOR_ID_MEDIA_CONCEPT_GMBH = 31630\nVENDOR_ID_CONSEIL_RGIONAL_NORD_PAS_DE_CALAIS = 31631\nVENDOR_ID_SHANGHAI_TITAN_TECHNOLOGY_CO_LTD = 31632\nVENDOR_ID_QUICKLINE_BUSINESS_AG_FORMERLY_EBM_TELECOM_AG = 31633\nVENDOR_ID_ICT_EMBEDDED_BV = 31634\nVENDOR_ID_TEXTFUNNEL = 31635\nVENDOR_ID_SHANGHAI_COLORFUL_MAGNETIC_RESONANCE_TECHNOLOGY_CO_LTD = 31636\nVENDOR_ID_PEAK_COMMUNICATIONS_LTD = 31637\nVENDOR_ID_INDRA_SYSTEMS_INC = 31638\nVENDOR_ID_LITMUS_LOGIC = 31639\nVENDOR_ID_7IA = 31640\nVENDOR_ID_CFH_SOFTWARE = 31641\nVENDOR_ID_EUROTECH_SPA = 31642\nVENDOR_ID_M_CREATIONS_GMBH = 31643\nVENDOR_ID_PERTHRO_LTD = 31644\nVENDOR_ID_NETWORK_CRITICAL = 31645\nVENDOR_ID_VIRGINA_DEPARTMENT_OF_MOTOR_VEHICLES = 31646\nVENDOR_ID_MINISTERIO_DE_DEFENSA_DE_LA_NACIN = 31647\nVENDOR_ID_HANGZHOU_DPTECH_TECHNOLOGIES_CO_LTD = 31648\nVENDOR_ID_KEKSBUDENET = 31649\nVENDOR_ID_FELINE_SOUL_SYSTEMS = 31650\nVENDOR_ID_W_KEY_SRL = 31651\nVENDOR_ID_ARCADIA_CONSULTING = 31652\nVENDOR_ID_ING_REINHARD_HIRZ_IT_SERVICES = 31653\nVENDOR_ID_EM_SOFTWARE_SYSTEMS = 31654\nVENDOR_ID_MARTEK_DI_MEUCCI_MARCO = 31655\nVENDOR_ID_BEIJING_AUTELAN_TECHNOLOGIES_CO_LTD = 31656\nVENDOR_ID_INFINITUS_DOO = 31657\nVENDOR_ID_LIGHTSOFTWARE = 31658\nVENDOR_ID_TURNOVFREENET_SDRUEN = 31659\nVENDOR_ID_ESURE_LABS_INC = 31660\nVENDOR_ID_LOGILAB_SA = 31661\nVENDOR_ID_TIGNET_OPEN_SOURCE_SOLUTIONS = 31662\nVENDOR_ID_NEW_YORK_STATE_ASSEMBLY = 31663\nVENDOR_ID_BRAVO_TECH_INC = 31664\nVENDOR_ID_STRONGMAIL_SYSTEMS_INC = 31665\nVENDOR_ID_AIRCANOPY_INTERNET = 31666\nVENDOR_ID_MINISTERSTWO_SPRAWIEDLIWOSCI = 31667\nVENDOR_ID_KRAFT_BENJAMIN_JEAN = 31668\nVENDOR_ID_TEMA_NETWORKS_LTD = 31669\nVENDOR_ID_JAWORSITO = 31670\nVENDOR_ID_ANUNDA_TECHNOLOGY_CO_LTD = 31671\nVENDOR_ID_XORTEC = 31672\nVENDOR_ID_DATACENTER_LUXEMBOURG = 31673\nVENDOR_ID_GLOBAL_STAR_SOLUTIONS_ULC = 31674\nVENDOR_ID_COLDSPOTDE = 31675\nVENDOR_ID_MANTARA_INC = 31676\nVENDOR_ID_REMEC_BROADBAND_WIRELESS = 31677\nVENDOR_ID_TENALT_DOO = 31678\nVENDOR_ID_DROIDNESTORG = 31679\nVENDOR_ID_ALTOR_NETWORKS = 31680\nVENDOR_ID_SOUTH_AFRICAN_POST_OFFICE = 31681\nVENDOR_ID_AUDINATE_PTY_LTD = 31682\nVENDOR_ID_COMMUNITY_ENGINEERING_GMBH = 31683\nVENDOR_ID_EBM_WEBSOURCING = 31684\nVENDOR_ID_IDG_GMBH = 31685\nVENDOR_ID_HARRY_JEDE = 31686\nVENDOR_ID_LORICA_SOLUTIONS = 31687\nVENDOR_ID_RTFMCOMPUTINGCOM = 31688\nVENDOR_ID_EDITSPOT_LLC = 31689\nVENDOR_ID_SENSORLOGIC_INC = 31690\nVENDOR_ID_FIMMG_FEDERAZIONE_ITALIANA_MEDICI_DI_MEDICINA_GENERALE = 31691\nVENDOR_ID_CLOSE_PREMIUM_FINANCE = 31692\nVENDOR_ID_MERLINTECHS = 31693\nVENDOR_ID_HEILIG_GRAF = 31694\nVENDOR_ID_BNYCONVERGEX_EXECUTION_SOLUTIONS_LLC = 31695\nVENDOR_ID_HABERLER_ENTERPRISES_LTD = 31696\nVENDOR_ID_PEER_1 = 31697\nVENDOR_ID_BLUEMOON_GAMES = 31698\nVENDOR_ID_GYMNASIUM_QUERFURT_BROADCASTING_CHANNEL = 31699\nVENDOR_ID_ICE_HOUSE_PRODUCTIONS = 31700\nVENDOR_ID_SONOA_SYSTEMS = 31701\nVENDOR_ID_INDIA_LOGICS_LLC = 31702\nVENDOR_ID_INSTITUT_DARONOMIE_SPATIALE_DE_BELGIQUE = 31703\nVENDOR_ID_ASPICON_GMBH = 31704\nVENDOR_ID_LUGORGUK = 31705\nVENDOR_ID_TORRENGA_ENGINEERING_INC = 31706\nVENDOR_ID_TAMIL_IPTV_INC = 31707\nVENDOR_ID_MEDDIFF_TECHNOLOGIES_PVT_LTD_FORMERLY_MEDSPHERE_TECHNOLOGIES_PVT_LTD = 31708\nVENDOR_ID_SISTEMA_FIESC = 31709\nVENDOR_ID_TORRENGA_SURVEYING_LLC = 31710\nVENDOR_ID_MYSTIQ_MOBILE_PTE_LTD = 31711\nVENDOR_ID_GPFMEUK = 31712\nVENDOR_ID_KHIPU_NETWORKS_LTD = 31713\nVENDOR_ID_NATIONAL_CENTER_FOR_MISSING_AND_EXPLOITED_CHILDREN = 31714\nVENDOR_ID_PORTWARE_LLC = 31715\nVENDOR_ID_WILDER_ASSOCIATES = 31716\nVENDOR_ID_ROGUE_PROJECT_INC = 31717\nVENDOR_ID_KRAUSSER_EDV = 31718\nVENDOR_ID_PROGRAMMERCOMHK = 31719\nVENDOR_ID_JAN_DITTBERNER_IT_CONSULTING_SOLUTIONS = 31720\nVENDOR_ID_ARGOSOFT_JSC = 31721\nVENDOR_ID_SPELLMAN_HIGH_VOLTAGE_ELECTRONICS_CORPORATION = 31722\nVENDOR_ID_COMMUNICATION_SYSTEMS_COMPANY = 31723\nVENDOR_ID_DAS_LABOR_EV = 31724\nVENDOR_ID_E_CERT = 31725\nVENDOR_ID_RANCORE_TECHNOLOGIES_P_LTD = 31726\nVENDOR_ID_US_DEPARTMENT_OF_ENERGY = 31727\nVENDOR_ID_MONOGRAFIASCOM = 31728\nVENDOR_ID_ART_OF_DEFENCE_GMBH = 31729\nVENDOR_ID_MIMOMAX_WIRELESS_LIMITED = 31730\nVENDOR_ID_SUNWAVE_COMMUNICATIONS_CO_LTD = 31731\nVENDOR_ID_DROPFIRE_INC = 31732\nVENDOR_ID_KEPID_AMSTECH_CO_LTD = 31733\nVENDOR_ID_DAYANG_TECHNOLOGY_DEVELOPMENT_INC = 31734\nVENDOR_ID_ZAO_NPK_MICROTEC = 31735\nVENDOR_ID_FILIPSTADS_KOMMUN = 31736\nVENDOR_ID_DIGITAL_SYSTEMS_LTD = 31737\nVENDOR_ID_SC_LTHD_CORPORATION_SRL = 31738\nVENDOR_ID_PENAGOSG = 31739\nVENDOR_ID_UNIVERSITY_OF_PRINCE_EDWARD_ISLAND = 31740\nVENDOR_ID_PROLOGIC_INC = 31741\nVENDOR_ID_AVENUE_A_RAZORFISH = 31742\nVENDOR_ID_EXERP_APS = 31743\nVENDOR_ID_ADESA_INC = 31744\nVENDOR_ID_CENTRO_FEDERAL_DE_EDUCAO_TECNOLGICA_DE_PELOTAS = 31745\nVENDOR_ID_GEMALTO = 31746\nVENDOR_ID_AAP_COMMUNICATIONS_LLC = 31747\nVENDOR_ID_JED_CAPITAL_LLC = 31748\nVENDOR_ID_NEED_TO_KNOW_NEWS_LLC = 31749\nVENDOR_ID_MARCHERIT = 31750\nVENDOR_ID_BURLESON_TECHNOLOGY_GROUP_LLC = 31751\nVENDOR_ID_OMNISCIENT_TECHNOLOGIES = 31752\nVENDOR_ID_ALCESTIS = 31753\nVENDOR_ID_TRIWEST_HEALTHCARE_ALLIANCE = 31754\nVENDOR_ID_LINK_LABINC = 31755\nVENDOR_ID_GXMUGUANGXI_MEDICAL_UNIVERSITY = 31756\nVENDOR_ID_INTERNET_TELEPHONY_USERS_ASSOCIATION_INC = 31757\nVENDOR_ID_INFINOVA_LLC = 31758\nVENDOR_ID_STOO_NETWORKS = 31759\nVENDOR_ID_C_MATIC_SYSTEMS_LTD = 31760\nVENDOR_ID_RFI_ENGINEERING_BV = 31761\nVENDOR_ID_FUJIAN_STAR_NET_COMMUNICATION_COLTD = 31762\nVENDOR_ID_BITEL_TVKZLS_S_BIZTONSGTECHNIKA_KFT = 31763\nVENDOR_ID_INMEDIASIT_GESELLSCHAFT_FR_INFORMATIONSTECHNOLOGIE_MBH = 31764\nVENDOR_ID_ADVANCE_DISPLAY_TECHNOLOGIES_INC = 31765\nVENDOR_ID_SHOWIT = 31766\nVENDOR_ID_NOOTEK = 31767\nVENDOR_ID_SHARP_ELECTRONICS_EUROPE_GMBH = 31768\nVENDOR_ID_KASSENRZTLICHE_VEREINIGUNG_BAYERNS = 31769\nVENDOR_ID_BACHMANN_GMBH_CO_KG = 31770\nVENDOR_ID_EGENIXCOM_SOFTWARE_SKILLS_AND_SERVICES_GMBH = 31771\nVENDOR_ID_INTERNATIONAL_PAPER = 31772\nVENDOR_ID_GEWI_EUROPE_GMBH_CO_KG = 31773\nVENDOR_ID_REALTIMESITES = 31774\nVENDOR_ID_GELLINGS_CO = 31775\nVENDOR_ID_THELOGINN = 31776\nVENDOR_ID_DATAPREV_PREVIDENCIA_SOCIAL = 31777\nVENDOR_ID_SMHS_LTD = 31778\nVENDOR_ID_INNOCOM_ARCODAN = 31779\nVENDOR_ID_ACIPIA = 31780\nVENDOR_ID_TG_MESS_STEUER_UND_REGELTECHNIK_GMBH = 31781\nVENDOR_ID_SYFERLOCK_TECHNOLOGY_CORPORATION = 31782\nVENDOR_ID_METROSOUTH_MEDICAL_CENTER = 31783\nVENDOR_ID_ENDLERNET_GMBH = 31784\nVENDOR_ID_DEROUINEAU = 31785\nVENDOR_ID_ZDRAVSTVENI_DOM_LJUBLJANA = 31786\nVENDOR_ID_SYREN_TECHNOLOGIES = 31787\nVENDOR_ID_QSG_VERKEHRSTECHNIK_GMBH = 31788\nVENDOR_ID_HD_SOFTWARE_SYSTEME_GMBH = 31789\nVENDOR_ID_COMPRESSUS_INC = 31790\nVENDOR_ID_COUNTY_OF_ERIE_NEW_YORK = 31791\nVENDOR_ID_ADWAYS_CO_LTD = 31792\nVENDOR_ID_TEMIX_SPA = 31793\nVENDOR_ID_INFINOVATE_INC = 31794\nVENDOR_ID_BOARD_OF_REGENTS_OF_THE_UNIVERSITY_SYSTEM_OF_GEORGIA = 31795\nVENDOR_ID_IDENTIPHI_INC = 31796\nVENDOR_ID_NEETZE_ONLINE = 31797\nVENDOR_ID_REWSE_LAB = 31798\nVENDOR_ID_TRESTORE_GMBH = 31799\nVENDOR_ID_VIVIDLOGIC_INC = 31800\nVENDOR_ID_BIAP_INC = 31801\nVENDOR_ID_AQUASYS = 31802\nVENDOR_ID_SECUREWARE_INC = 31803\nVENDOR_ID_OFFICE_OF_STATE_REVENUE = 31804\nVENDOR_ID_IBA_CZ_SRO = 31805\nVENDOR_ID_VIRTUALTEC_SOLUTIONS_AG = 31806\nVENDOR_ID_UNIVERSIDAD_DE_CALDAS = 31807\nVENDOR_ID_TOGLIATTI_STATE_UNIVERSITY = 31808\nVENDOR_ID_JOSEF_LUX_UND_SOHN_BAUMEISTER_GMBH = 31809\nVENDOR_ID_CINTERION_GMBH = 31810\nVENDOR_ID_IKOR_PRODUCTS_GMBH = 31811\nVENDOR_ID_UNITED_TOTE_CO = 31812\nVENDOR_ID_DIKMENOGLU = 31813\nVENDOR_ID_AMWAY_OF_AUSTRALIA = 31814\nVENDOR_ID_BEAR_SOLUTIONS_AUSTRALASIA_PTY_LTD = 31815\nVENDOR_ID_PRINTFLEET_INC = 31816\nVENDOR_ID_CONNEXIS_KFT = 31817\nVENDOR_ID_DROITECH_ESOLUTIONS_PRIVATE_LIMITED = 31818\nVENDOR_ID_CHENGBO_NETWORK_TECHNOLOGY_CO_LTD = 31819\nVENDOR_ID_FEDERAL_PRISON_INDUSTRIES_UNICOR = 31820\nVENDOR_ID_EONBIT_AS = 31821\nVENDOR_ID_X2B_SECURITY = 31822\nVENDOR_ID_SCHWEITZER_ENGINEERING_LABORATORIES_INC = 31823\nVENDOR_ID_SOLAR_TECHNOLOGY_INC = 31824\nVENDOR_ID_HTW_DRESDEN_FB_INFORMATIK = 31825\nVENDOR_ID_LOGIC_UNITED_GMBH = 31826\nVENDOR_ID_SHAREDBAND_LIMITED = 31827\nVENDOR_ID_PEGASUS_TELECOM = 31828\nVENDOR_ID_MIPIH = 31829\nVENDOR_ID_DECODE_GENETICS = 31830\nVENDOR_ID_AD_HOC_NETWORK_SRL = 31831\nVENDOR_ID_LOS_ANGELES_COMMUNITY_COLLEGE_DISTRICT = 31832\nVENDOR_ID_ACI_WORLDWIDE_INC = 31833\nVENDOR_ID_BECAUSEWECANAT = 31834\nVENDOR_ID_JOHN_BERNINGER = 31835\nVENDOR_ID_DTS_SYSTEME_GMBH = 31836\nVENDOR_ID_MEDINFORMATIX_INCORPORATED = 31837\nVENDOR_ID_ITECH_ROMANIA_LTD = 31838\nVENDOR_ID_GRIDIRON_SYSTEMS_INC = 31839\nVENDOR_ID_CHOICEPOINT_ASSET_COMPANY_LLC = 31840\nVENDOR_ID_UNIVERSITY_OF_WESTERN_MACEDONIA = 31841\nVENDOR_ID_E2E_SERVICES_LIMITED = 31842\nVENDOR_ID_GUISYS_CORPORATION = 31843\nVENDOR_ID_SATELLITE_SYSTEMS_CORPORATION = 31844\nVENDOR_ID_DANS_ROCK_ELECTRONICS = 31845\nVENDOR_ID_WIMBA = 31846\nVENDOR_ID_BEJING_XCZY_NETWORKS_INC = 31847\nVENDOR_ID_SHERMAN_FINANIAL_GROUP_LLC = 31848\nVENDOR_ID_JACOBSSON_PROGRAMUTVECKLING = 31849\nVENDOR_ID_OTN_SYSTEMS_NV = 31850\nVENDOR_ID_WH_NETZ_VEREIN_FUER_NETZWERKSICHERHEIT_UND_TECHNOLOGIETRANSFER_EV = 31851\nVENDOR_ID_PIREAN_LTD = 31852\nVENDOR_ID_LLC_MAILRU = 31853\nVENDOR_ID_STIX_AS = 31854\nVENDOR_ID_PLUSNET_PLC = 31855\nVENDOR_ID_WYCLIFFE_BIBLE_TRANSLATORS_USA = 31856\nVENDOR_ID_TIREPISTE = 31857\nVENDOR_ID_INTELLIMEDIA_SYSTEMS_LTD = 31858\nVENDOR_ID_HFRINC = 31859\nVENDOR_ID_SCIENCE_AND_TECHNOLOGY_FACILITIES_COUNCIL = 31860\nVENDOR_ID_EMBINET_GMBH = 31861\nVENDOR_ID_INFINITY_TRUST_SRL = 31862\nVENDOR_ID_AUSTRALIAN_RESEARCH_COLLABORATION_SERVICE = 31863\nVENDOR_ID_KUNDEN_SERVERORG_NETWORK_SERVICES = 31864\nVENDOR_ID_DURCHMESSER = 31865\nVENDOR_ID_ST_BERNARD_SOFTWARE = 31866\nVENDOR_ID_UNASSIGNED_38 = 31867\nVENDOR_ID_THE_VILLAGE_GROUP_INC = 31868\nVENDOR_ID_EMPOWERING_MEDIA_INC = 31869\nVENDOR_ID_MINKAMAU = 31870\nVENDOR_ID_MO_TECHNOLOGIES = 31871\nVENDOR_ID_NANZAN_GAKUEN = 31872\nVENDOR_ID_ELANTI_SYSTEMS_INC = 31873\nVENDOR_ID_ALPHA_NETWORKS_INC = 31874\nVENDOR_ID_SHANGHAI_XINLAN_ELECTRONIC_TECHNOLOGY_COLTD = 31875\nVENDOR_ID_DE_KOOMEN = 31876\nVENDOR_ID_KAREL_ELECTRONICS = 31877\nVENDOR_ID_CHAMAELEON_AG = 31878\nVENDOR_ID_TELASIC_COMMUNICATIONS = 31879\nVENDOR_ID_PROGRAMMA_VERWIJSINDEX = 31880\nVENDOR_ID_GGH_ENGINEERING_SRL = 31881\nVENDOR_ID_METROTEK = 31882\nVENDOR_ID_OPENSTAT_FORMERLY_VEGA = 31883\nVENDOR_ID_KUIPERS_ELECTRONIC_ENGINEERING = 31884\nVENDOR_ID_PRODAM = 31885\nVENDOR_ID_SYNTACTIC_SUGAR_S_R_O = 31886\nVENDOR_ID_SCHERING_PLOUGH_CORPORATION = 31887\nVENDOR_ID_ADMINDBORG = 31888\nVENDOR_ID_APANTAC_LLC = 31889\nVENDOR_ID_CHICKEN_AND_PORN = 31890\nVENDOR_ID_UNIVERSIDADE_DO_ESTADO_DO_RIO_DE_JANEIRO = 31891\nVENDOR_ID_T3G_TECHNOLOGY_COLTD = 31892\nVENDOR_ID_NELNET = 31893\nVENDOR_ID_RPBUS_LLC = 31894\nVENDOR_ID_CHITA_MEDIAS_NETWORK_INC = 31895\nVENDOR_ID_DOXENSE_SARL = 31896\nVENDOR_ID_KNOWLEDGE_POWERED_SOLUTIONS = 31897\nVENDOR_ID_BIT4ID = 31898\nVENDOR_ID_CS_GROUP_PUERTO_RICO = 31899\nVENDOR_ID_TARLETON_STATE_UNIVERSITY = 31900\nVENDOR_ID_BACKSTOP_SOLUTIONS_GROUP = 31901\nVENDOR_ID_ANN_ARBOR_PUBLIC_SCHOOLS = 31902\nVENDOR_ID_GLOBAL_INFORMATION_TECHNOLOGY_INC = 31903\nVENDOR_ID_MANDLI_COMMUNICATIONS_INC = 31904\nVENDOR_ID_SPRINGDALE_PUBLIC_SCHOOLS = 31905\nVENDOR_ID_NMI_INFOSECURITY_SOLUTIONS = 31906\nVENDOR_ID_DIMENZIO_INFORMATIKA_LTD = 31907\nVENDOR_ID_ORANGE_JORDAN = 31908\nVENDOR_ID_TEXTIEL_VERHAEGHE_BVBA = 31909\nVENDOR_ID_HALEY_LIMITED = 31910\nVENDOR_ID_MINE_SITE_TECHNOLOGIES_PTY_LTD = 31911\nVENDOR_ID_GYVENTOJU_REGISTRO_TARNYBA_PRIE_LIETUVOS_RESPUBLIKOS_VIDAUS_REIKALU_MINISTERIJOS = 31912\nVENDOR_ID_SMITH_MICRO_SOFTWARE_INC = 31913\nVENDOR_ID_AFCC_INC = 31914\nVENDOR_ID_NSTRUMENT_INC = 31915\nVENDOR_ID_EXATROL_CORPORATION = 31916\nVENDOR_ID_TIAN_DI_YING_CAISINOPROFESSIONAL_LTD = 31917\nVENDOR_ID_JSC_IZHEVSKIY_RADIOZAVOD = 31918\nVENDOR_ID_EMERIONCOM = 31919\nVENDOR_ID_PHARMDATASRO = 31920\nVENDOR_ID_STS_GROUP_SA = 31921\nVENDOR_ID_KEENEO_SAS = 31922\nVENDOR_ID_FRONTIER_ELECTRONIC_SYSTEMS_CORP = 31923\nVENDOR_ID_DMITRYKULGAVY = 31924\nVENDOR_ID_MIYOWA = 31925\nVENDOR_ID_SIKLU_COMMUNICATION_LTD = 31926\nVENDOR_ID_SQDATA = 31927\nVENDOR_ID_Q_INDUSTRIES_INC = 31928\nVENDOR_ID_AKUA_CORP = 31929\nVENDOR_ID_WIINZ_LTD = 31930\nVENDOR_ID_CLERTECHCOMINC = 31931\nVENDOR_ID_4IPNET_INC = 31932\nVENDOR_ID_POWERBOX_AUSTRALIA = 31933\nVENDOR_ID_GETRONICS_PINKROCCADE_HEALTHCARE_BV = 31934\nVENDOR_ID_YOUNOU_INC = 31935\nVENDOR_ID_INVENTUM_TECHNOLOGIES_PRIVATE_LIMITED = 31936\nVENDOR_ID_NAW_ENTERPRISES_INC = 31937\nVENDOR_ID_ANDERSCORE_GMBH = 31938\nVENDOR_ID_RKIRKPATNET = 31939\nVENDOR_ID_TV1DE = 31940\nVENDOR_ID_ECOLIHUB = 31941\nVENDOR_ID_AKRUPP_NETWORKING = 31942\nVENDOR_ID_CLEMENS_FINK = 31943\nVENDOR_ID_ISH_GROUP_PTY_LTD = 31944\nVENDOR_ID_ADVANCED_POWERS_MERCHANT_EMPIRES = 31945\nVENDOR_ID_ELENOS_SRL = 31946\nVENDOR_ID_YOMU_PROJECT = 31947\nVENDOR_ID_RC_ALLTECH_POWER_SYSTEMS_PVT_LTD = 31948\nVENDOR_ID_SPIKELOPS = 31949\nVENDOR_ID_NEXTIVITY_INC = 31950\nVENDOR_ID_ORGANIZACION_DE_SERVICIOS_DIRECTOS_EMPRESARIOS = 31951\nVENDOR_ID_MIROSLAW_LACH = 31952\nVENDOR_ID_MARKUS_FALB = 31953\nVENDOR_ID_E_SMILE_CO_LTD = 31954\nVENDOR_ID_PROLAR_CORPORATION = 31955\nVENDOR_ID_GUANGZHOU_E_STANDARD_SOFTWARE_TECHNOLOGY_COLTD = 31956\nVENDOR_ID_TSDA_TECNOLOGIA_E_SOLUES_DIGITAIS_APLICADAS_LTDA = 31957\nVENDOR_ID_INDUSTRONIC_INDUSTRIE_ELECTRONIC_GMBH_CO_KG = 31958\nVENDOR_ID_EDV_BERATUNG_ROBERT_VELTER = 31959\nVENDOR_ID_ALTECH_ISIS = 31960\nVENDOR_ID_PUBLITRONIC_BV = 31961\nVENDOR_ID_FLYBE = 31962\nVENDOR_ID_BEJING_TONGTIAN_CENTURY_TECHNOLOGY_COLTD = 31963\nVENDOR_ID_CHENGDU_GOLDTEL_COMMUNICATION_GROUP_COLTD = 31964\nVENDOR_ID_PGE_GORNICTWO_I_ENERGETYKA_SA = 31965\nVENDOR_ID_LAMPE_BATKIN_ASSOCIATES_INC = 31966\nVENDOR_ID_THOMAS_PRODUCTION_COMPANY_LLC = 31967\nVENDOR_ID_DATUM_SYSTEMS_INC = 31968\nVENDOR_ID_GRADWELL_DOT_COM_LTD = 31969\nVENDOR_ID_SIEGEL_DATEN_UND_ANWENDUNGSSERVICE = 31970\nVENDOR_ID_MQUEST_SA = 31971\nVENDOR_ID_GRUPPO_SOFTWARE_OY = 31972\nVENDOR_ID_THEJOFCOM = 31973\nVENDOR_ID_CAVAZZA_ANNA_SAS = 31974\nVENDOR_ID_CABLE_VISION_ELECTRONICS_CO_LTD = 31975\nVENDOR_ID_INTEG_PROCESS_GROUP_INC = 31976\nVENDOR_ID_SAIA_BURGESS_CONTROLS_AG = 31977\nVENDOR_ID_FORTICOM = 31978\nVENDOR_ID_ALTIMATOS = 31979\nVENDOR_ID_MELOGCOM = 31980\nVENDOR_ID_HONGDIAN_TECHNOLOGIES = 31981\nVENDOR_ID_ORNL_FEDERAL_CREDIT_UNION = 31982\nVENDOR_ID_FOUGEROLLE = 31983\nVENDOR_ID_ERICSSON_AUSTRALIA_PTY_LTD = 31984\nVENDOR_ID_SYPHAN_TECHNOLOGIES = 31985\nVENDOR_ID_GOL_MOBILE_PRODUTOS_E_SERVIOS_DE_TECNOLOGIA_DA_INFORMAO_LTDA = 31986\nVENDOR_ID_SPLATTERLADDER = 31987\nVENDOR_ID_MEN_MIKROELEKTRONIK_NUERNBERG_GMBH = 31988\nVENDOR_ID_EVERMAX_SRO = 31989\nVENDOR_ID_CONTINENTAL_AG = 31990\nVENDOR_ID_TOSCO_CORPORATION = 31991\nVENDOR_ID_OCEANA_SENSOR_MODULE = 31992\nVENDOR_ID_PARINYA_SOFTWARE = 31993\nVENDOR_ID_NXGEN_COMMUNICATIONS_PTE_LTD = 31994\nVENDOR_ID_NATIONAL_BANK_OF_POLAND = 31995\nVENDOR_ID_BRIAN_THOMAS_MATTHEWS_LIMITED = 31996\nVENDOR_ID_CELLUSYS = 31997\nVENDOR_ID_NOVA_KREDITNA_BANKA_MARIBOR_DD = 31998\nVENDOR_ID_ADCON_TELEMETRY_GMBH = 31999\nVENDOR_ID_EKSTREM_BIR_BILGISAYAR = 32000\nVENDOR_ID_CONVERCOM_AG = 32001\nVENDOR_ID_BA_BI_MOBILE_MEDIA_CO_LTD = 32002\nVENDOR_ID_HERBSTWESTDE = 32003\nVENDOR_ID_ON_WAVES_EHF = 32004\nVENDOR_ID_OBRA_SOCIAL_DE_EMPLEADOS_PUBLICOS_DE_MENDOZA_OSEP = 32005\nVENDOR_ID_FASHION_INSTITUTE_OF_TECHNOLOGY_OF_THE_STATE_UNIVERSITY_OF_NEW_YORK = 32006\nVENDOR_ID_INNOVATIVE_LABS = 32007\nVENDOR_ID_DIGITAL_RAPIDS_CORP = 32008\nVENDOR_ID_OUTERNET = 32009\nVENDOR_ID_PIXELWORKS = 32010\nVENDOR_ID_KABEL_DEUTSCHLAND_GMBH = 32011\nVENDOR_ID_PENANGO_INC = 32012\nVENDOR_ID_INTRANET_SOLUTION = 32013\nVENDOR_ID_ESAC = 32014\nVENDOR_ID_EXTRAHOP_NETWORKS_INC = 32015\nVENDOR_ID_LATVIA_UNIVERSITY_OF_AGRICULTURE = 32016\nVENDOR_ID_LINQUEST_CORPORATION = 32017\nVENDOR_ID_LAW_OFFICES_OF_ROGER_E_NAGHASH = 32018\nVENDOR_ID_INTELLON_CORPORATION = 32019\nVENDOR_ID_DOUDEMOII = 32020\nVENDOR_ID_POSITRON_INC = 32021\nVENDOR_ID_PEGATRON_COMPUTER_INC = 32022\nVENDOR_ID_AMERICAN_CLEAN_AIR_INC_FORMERLY_XENSIIS = 32023\nVENDOR_ID_APPLIED_POLYMORPHISM = 32024\nVENDOR_ID_PRIMAL_RESEARCH = 32025\nVENDOR_ID_SIGMA_ITS_CO_LTD = 32026\nVENDOR_ID_EDVINA_AB = 32027\nVENDOR_ID_TRAY_INTERNATIONAL_SERVICES_AND_ADMINISTRATION_PTY_LTD = 32028\nVENDOR_ID_THE_RAFFERTY_PATENT_LAW_FIRM_PC = 32029\nVENDOR_ID_COMMODITY_SYSTEMS = 32030\nVENDOR_ID_XITIJ_INDIA = 32031\nVENDOR_ID_DWI_TECHNOLOGIES = 32032\nVENDOR_ID_APFELWALD = 32033\nVENDOR_ID_FINNSAT_LTD = 32034\nVENDOR_ID_ISEN_CONSULTING_AND_SERVICES = 32035\nVENDOR_ID_BORDERS_GROUP_INC = 32036\nVENDOR_ID_COMMERCE_LAB = 32037\nVENDOR_ID_TELZAS = 32038\nVENDOR_ID_TOTAL_COMPUTER_KFT = 32039\nVENDOR_ID_TECNOLOGIC_CONSULTING = 32040\nVENDOR_ID_ASSOCIATION_PARIS_MONTAGNE = 32041\nVENDOR_ID_VIRGINIA_COMMUNITY_COLLEGE_SYSTEM = 32042\nVENDOR_ID_HACKLAB_TORONTO_CLUB_INC = 32043\nVENDOR_ID_IVOCS = 32044\nVENDOR_ID_AVANQUEST_SOFTWARE = 32045\nVENDOR_ID_NETMATCH = 32046\nVENDOR_ID_IDRIX = 32047\nVENDOR_ID_X9000COM_CONSULTING_SERVICES_LIMITED = 32048\nVENDOR_ID_FACILITYONE = 32049\nVENDOR_ID_PACKETFLUX_TECHNOLOGIES_INC = 32050\nVENDOR_ID_SAMSYSTEMS_GMBH = 32051\nVENDOR_ID_TORONTO_HYDRO_CORPORATION = 32052\nVENDOR_ID_3Y_POWER_TECHNOLOGY_INC = 32053\nVENDOR_ID_IPSL_FORMERLY_IPSL_CETP = 32054\nVENDOR_ID_SERVICE_TO_YOUTH_COUNCIL_INC = 32055\nVENDOR_ID_VIETNAM_DATACOMMUNICATION_COMPANY_VDC = 32056\nVENDOR_ID_MERCURY_BRAIN_SYSTEMS = 32057\nVENDOR_ID_VIETNAM_POSTS_AND_TELECOMMUNICATIONS_GROUP_VNPT = 32058\nVENDOR_ID_AXIS_NETWORK_TECHNOLOGY_LIMITED = 32059\nVENDOR_ID_BABELWAY = 32060\nVENDOR_ID_VAS_LATVIJAS_VALSTS_RADIO_UN_TELEVIZIJAS_CENTRS = 32061\nVENDOR_ID_ENDERSYS = 32062\nVENDOR_ID_THE_EID_COMPANY = 32063\nVENDOR_ID_STATE51 = 32064\nVENDOR_ID_JONEBIRD = 32065\nVENDOR_ID_EAFB_ESCOLA_AGROTCNICA_FEDERAL_DE_BARBACENA_MG = 32066\nVENDOR_ID_IPAXIOM_NETWORKS = 32067\nVENDOR_ID_SCHERNDL = 32068\nVENDOR_ID_UNIVERSITY_OF_LAVERNE = 32069\nVENDOR_ID_LASER_INTERFEROMETER_GRAVITATIONAL_WAVE_OBSERVATORY_LIGO = 32070\nVENDOR_ID_VIALTUS_SOLUTIONS = 32071\nVENDOR_ID_SEKIZAWA_CORP_INC = 32072\nVENDOR_ID_MESAVIDA_INFORMATION_MANAGEMENT = 32073\nVENDOR_ID_PRORAIL_BV = 32074\nVENDOR_ID_XS_NETWORKS_BV = 32075\nVENDOR_ID_CONNECTICAL_IT = 32076\nVENDOR_ID_SUMLOCK_ELECTRONICS_NE_LTD = 32077\nVENDOR_ID_ZENTRUM_SERVICIOS_SA_DE_CV = 32078\nVENDOR_ID_ESTEEM_WIRELESS_MODEMS_INC = 32079\nVENDOR_ID_BASELINE_COMMUNICATIONS = 32080\nVENDOR_ID_CYTEC_INDUSTRIES_INC = 32081\nVENDOR_ID_UNASSIGNED_39 = 32082\nVENDOR_ID_HEALTHBLOCKS_INC = 32083\nVENDOR_ID_DELTANODE_LTD = 32084\nVENDOR_ID_EON_BUSINESS_SERVICES_GMBH = 32085\nVENDOR_ID_FIBERBLAZE = 32086\nVENDOR_ID_XFER_GMBH = 32087\nVENDOR_ID_COLLEGE_OF_MICRONESIA_FSM = 32088\nVENDOR_ID_IMS_MESSSYSTEME_GMBH = 32089\nVENDOR_ID_WAUMOVIL = 32090\nVENDOR_ID_AES_CORPORATION = 32091\nVENDOR_ID_PRAGMA_PEOPLE = 32092\nVENDOR_ID_ENGINEERING_SYSTEMS_INCORPORATED = 32093\nVENDOR_ID_VANTAGE_TECH_SOLUTIONS = 32094\nVENDOR_ID_HOSEI_UNIVERSITY_RESEARCH_INSTITUTE_CALIFORNIA = 32095\nVENDOR_ID_APD_TECHNOLOGIES_INC = 32096\nVENDOR_ID_REORDER = 32097\nVENDOR_ID_BASELINE_IT = 32098\nVENDOR_ID_MIDNIGHT_OIL_CONSULTING_INC = 32099\nVENDOR_ID_OVERSI_NETWORKS = 32100\nVENDOR_ID_TELINEA_DOO = 32101\nVENDOR_ID_TIAXA = 32102\nVENDOR_ID_NEW_YORK_CONNECT = 32103\nVENDOR_ID_INCHARGE_SYSTEMS_INC = 32104\nVENDOR_ID_CHIEF_SECURITY_OFFICERS_SA = 32105\nVENDOR_ID_HADIKO_EV = 32106\nVENDOR_ID_SOH_SYSTEMS = 32107\nVENDOR_ID_PLANAR_LLC = 32108\nVENDOR_ID_ADC_COLLC = 32109\nVENDOR_ID_IPVOX_SDN_BHD = 32110\nVENDOR_ID_DIGITAL_SOLUTIONS_LTD = 32111\nVENDOR_ID_VCS_COMPUTER_SYSTEME_GMBH = 32112\nVENDOR_ID_VOCORD = 32113\nVENDOR_ID_ORELIA_SAS = 32114\nVENDOR_ID_ZWEITES_DEUTSCHES_FERNSEHEN_ANSTALT_DES_OEFFENTLICHEN_RECHTS = 32115\nVENDOR_ID_ACTIV_FINANCIAL_SYSTEMS_INC = 32116\nVENDOR_ID_UNASSIGNED_40 = 32117\nVENDOR_ID_IWAVE_SOFTWARE = 32118\nVENDOR_ID_TERASYS_HARDWARE_INC = 32119\nVENDOR_ID_FOCON_ELECTRONIC_SYSTEMS_A_S = 32120\nVENDOR_ID_ARMSTRONG_RELOCATION = 32121\nVENDOR_ID_NETAFIM_AUSTRALIA = 32122\nVENDOR_ID_SIDLINGER_COMPUTER_CORPORATION = 32123\nVENDOR_ID_STADTVERWALTUNG_LUDWIGSHAFEN = 32124\nVENDOR_ID_SMALL_MEDIA_GIANT_LTD = 32125\nVENDOR_ID_LIETUVOS_ARCHYVU_DEPARTAMENTAS_PRIE_LIETUVOS_RESPUBLIKOS_VYRIAUSYBES = 32126\nVENDOR_ID_DARKWARE_CO = 32127\nVENDOR_ID_OCTOTELEMATICS_SRL = 32128\nVENDOR_ID_INNOVATION_CENTER_COMPUTER_ASSISTED_SURGERY_ICCAS = 32129\nVENDOR_ID_DATA_ELEMENTS_FOR_EMERGENCY_DEPARTMENT_SYSTEMS_DEEDS = 32130\nVENDOR_ID_ESPN_INC = 32131\nVENDOR_ID_ULTRAMONKEY_L7_PROJECT = 32132\nVENDOR_ID_NATIVENETCH = 32133\nVENDOR_ID_ZESTYSOFT = 32134\nVENDOR_ID_WWK_LEBENSVERSICHERUNG_AG = 32135\nVENDOR_ID_HACKBURG = 32136\nVENDOR_ID_TECNOSTEEL = 32137\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_ITAJUB = 32138\nVENDOR_ID_APPLITRON_DATASYSTEM_AB = 32139\nVENDOR_ID_CHALMERS_UNIVERSITY_OF_TECHNOLOGY_AB = 32140\nVENDOR_ID_UNIVERSITY_OF_MARYLAND_CENTER_FOR_ENVIRONMENTAL_SCIENCE = 32141\nVENDOR_ID_SOLID_SOLUTIONS = 32142\nVENDOR_ID_FINSIGNIA_LLC = 32143\nVENDOR_ID_TRANSHUMAN_DESIGN = 32144\nVENDOR_ID_ALLERGAN_INC = 32145\nVENDOR_ID_VALIDIAN_CORPORATION = 32146\nVENDOR_ID_ROB_JOHNSON = 32147\nVENDOR_ID_INDIVIDUALI_VEIKLA = 32148\nVENDOR_ID_UXCG = 32149\nVENDOR_ID_ZETRON_INC = 32150\nVENDOR_ID_NERDGROUP = 32151\nVENDOR_ID_REARDEN_LABS = 32152\nVENDOR_ID_DAMOSYS_LTD = 32153\nVENDOR_ID_IXUROS_LIMITED = 32154\nVENDOR_ID_HUMANA_INC = 32155\nVENDOR_ID_TECHCARE = 32156\nVENDOR_ID_INTELMS_PTY_LTD = 32157\nVENDOR_ID_ALCOM = 32158\nVENDOR_ID_ANCLA_INTERNET_SL = 32159\nVENDOR_ID_POWER_INNOVATION_STROMVERSORGUNGSTECHNIK_GMBH = 32160\nVENDOR_ID_TRILOGY_COMMUNICATIONS_LTD = 32161\nVENDOR_ID_EUTECERT = 32162\nVENDOR_ID_UMBER_SYSTEMS = 32163\nVENDOR_ID_JWARE_TECHNOLOGIES = 32164\nVENDOR_ID_WESTGRID = 32165\nVENDOR_ID_COMPUTACENTER = 32166\nVENDOR_ID_REDCOM_LABORATORIES_INC = 32167\nVENDOR_ID_FIBER_SPAN = 32168\nVENDOR_ID_TURKCELL_TEKNOLOJI_ARASTIRMA_VE_GELISTIRME_AS = 32169\nVENDOR_ID_MAYA_GROUP = 32170\nVENDOR_ID_SEAMICRO_INC = 32171\nVENDOR_ID_PREFEITURA_MUNICIPAL_DE_FRANCO_DA_ROCHA = 32172\nVENDOR_ID_ROYAL_OBSERVATORY_EDINBURGH = 32173\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DO_OESTE_DO_PARAN = 32174\nVENDOR_ID_THIEME_ICT_SERVICES_BV = 32175\nVENDOR_ID_GLOBALTELECOM = 32176\nVENDOR_ID_BAROSSAFARM = 32177\nVENDOR_ID_ECOTEL_COMMUNICATION_AG = 32178\nVENDOR_ID_SANDS_INDIA_PVT_LTD = 32179\nVENDOR_ID_MOSCOW_BRANCH_OF_FEDERAL_MIGRATION_SERVICE_RUSSIA = 32180\nVENDOR_ID_AMUSER_SPA = 32181\nVENDOR_ID_CUBRO = 32182\nVENDOR_ID_ANSWERSCOM = 32183\nVENDOR_ID_INSTANTIATIONS_INC = 32184\nVENDOR_ID_ENVIRONMENTAL_TECHNOLOGY_INC = 32185\nVENDOR_ID_PROLEXIC_TECHNOLOGIES = 32186\nVENDOR_ID_FOUNDER_INTERNATIONAL_INC = 32187\nVENDOR_ID_SKYCASH_SP_Z_OO = 32188\nVENDOR_ID_RICHARDS_ZETA_BUILDING_INTELLIGENCE = 32189\nVENDOR_ID_REDOUBT_INC = 32190\nVENDOR_ID_EMERGENSYS_SOLUTIONS_INC = 32191\nVENDOR_ID_VANGUARD_RUGGED_STORAGE_LLC = 32192\nVENDOR_ID_I_NEW_UNIFIED_MOBILE_SOLUTIONS_AG = 32193\nVENDOR_ID_INDORSE_TECHNOLOGIES = 32194\nVENDOR_ID_COMMTEL_NETWORK_SOLUTIONS_PTY_LTD = 32195\nVENDOR_ID_EBFS_AG = 32196\nVENDOR_ID_BUNKSPEED_INC = 32197\nVENDOR_ID_ESANG_TECHNOLOGIES_CO_LTD = 32198\nVENDOR_ID_LOUISIANA_IMMERSIVE_TECHNOLOGIES_ENTERPRISE = 32199\nVENDOR_ID_SEVEN_NETWORKS_INC = 32200\nVENDOR_ID_SONITOR_TECHNOLOGIES_AS = 32201\nVENDOR_ID_SAIMA_SISTEMAS_SL = 32202\nVENDOR_ID_PIXEON = 32203\nVENDOR_ID_MYKOLA_GRECHUKH = 32204\nVENDOR_ID_TWISTROUND_LTD = 32205\nVENDOR_ID_OKSIJUN = 32206\nVENDOR_ID_US_DEPARTMENT_OF_TRANSPORTATION = 32207\nVENDOR_ID_WWWJOINTHEGRIDCOM = 32208\nVENDOR_ID_ESCUELA_BANCARIA_Y_COMERCIA = 32209\nVENDOR_ID_EAGENCY_INC = 32210\nVENDOR_ID_POSITECH_CONSULTING_LTD = 32211\nVENDOR_ID_ARMSTRONG_INTERNATIONAL_INC = 32212\nVENDOR_ID_LUKE_RULES = 32213\nVENDOR_ID_GRETA_DE_BORDEAUX = 32214\nVENDOR_ID_JOHN_ANSON_CO_LLC = 32215\nVENDOR_ID_SIOS_TECHNOLOGY_INC = 32216\nVENDOR_ID_BWE_SYSTEC_GMBH = 32217\nVENDOR_ID_TEDMANCOM = 32218\nVENDOR_ID_NBS_SRL = 32219\nVENDOR_ID_ESPERION_THERAPEUTICS_INC = 32220\nVENDOR_ID_INTERA_GROUP_INC = 32221\nVENDOR_ID_TCM_NETWORKS = 32222\nVENDOR_ID_SHANGHAI_KYATTINFO_INC = 32223\nVENDOR_ID_EPIVALLEY_CO_LTD = 32224\nVENDOR_ID_PCCW_MOBILE = 32225\nVENDOR_ID_INGENIEURBUERO_FR_INNOVATIVE_INFORMATIONSTECHNIK = 32226\nVENDOR_ID_ARTSOFT_CONSULT = 32227\nVENDOR_ID_MERAWEX_SP_Z_O_O = 32228\nVENDOR_ID_NOKIA_FORMERLY_NOVARRA_INC = 32229\nVENDOR_ID_AERIS_COMMUNICATIONS_INC = 32230\nVENDOR_ID_HBCMS = 32231\nVENDOR_ID_LANDRATSAMT_MUENCHEN = 32232\nVENDOR_ID_VIONIS_DOO = 32233\nVENDOR_ID_KMUX_PROJECT = 32234\nVENDOR_ID_PROACE_INTERNATIONAL_TRADING_LTD = 32235\nVENDOR_ID_DATASPHERE_SA = 32236\nVENDOR_ID_ATEA_SYSTEMS_LTD = 32237\nVENDOR_ID_VENTURE_RESEARCH_INC = 32238\nVENDOR_ID_EMNICO_TECHNOLOGIES_LTD = 32239\nVENDOR_ID_CLIPSAL_CHINA_LTD = 32240\nVENDOR_ID_VEDERIE = 32241\nVENDOR_ID_COMIC_RELIEF = 32242\nVENDOR_ID_FAUSER_AG = 32243\nVENDOR_ID_CASO_CONSULTORES_ASSOCIADOS_DE_ORGANIZAES_E_INFORMTICA = 32244\nVENDOR_ID_PINGUS_SOLUTIONS_OHG = 32245\nVENDOR_ID_IBSDATAFORT = 32246\nVENDOR_ID_NEWNET_COMMUNICATION_TECHNOLOGIES_LLC = 32247\nVENDOR_ID_WANZL_METALLWARENFABRIK_GMBH = 32248\nVENDOR_ID_NATIONAL_FOOD_TECHNOLOGY_RESEARCH_CENTRE = 32249\nVENDOR_ID_SAN_FRANCISCO_INTERNATIONAL_AIRPORT_INFORMATION_TECHNOLOGY_TELECOMMUNICATIONS = 32250\nVENDOR_ID_ETRI_SRC = 32251\nVENDOR_ID_PAVOL_JOZEF_AFRIK_UNIVERSITY_IN_KOICE = 32252\nVENDOR_ID_DANU_TECHNOLOGIES = 32253\nVENDOR_ID_HOARE_LEA_AND_PARTNERS = 32254\nVENDOR_ID_J_CHRISTOF_GMBH = 32255\nVENDOR_ID_SONLINC_A_S = 32256\nVENDOR_ID_REALTIME_INTELLIGENCE = 32257\nVENDOR_ID_WYDE_VOICE_LLC = 32258\nVENDOR_ID_MEYER_TOOL_INC = 32259\nVENDOR_ID_PACKETDNA_INC = 32260\nVENDOR_ID_VAROLII = 32261\nVENDOR_ID_CYBER_OPERATIONS_INC = 32262\nVENDOR_ID_PLUS_NET_SOLUTIONS = 32263\nVENDOR_ID_NATIONAL_INSTITUTE_OF_INFORMATICS = 32264\nVENDOR_ID_JOHNNY_SOFTWARE_STUDIO = 32265\nVENDOR_ID_POWER_PLUS_COMMUNICATIONS_AG = 32266\nVENDOR_ID_IST_AUSTRIA = 32267\nVENDOR_ID_HOBBY_LOBBY_STORES_INC = 32268\nVENDOR_ID_NOVANTIQUA_MULTIMEDIA = 32269\nVENDOR_ID_ELSETA = 32270\nVENDOR_ID_ZAXMY = 32271\nVENDOR_ID_SEBASTIEN_APERGHIS_TRAMONI = 32272\nVENDOR_ID_NETZWERKPLANET = 32273\nVENDOR_ID_SHEFFIELD_TEACHING_HOSPITALS_FOUNDATION_TRUST = 32274\nVENDOR_ID_INTERSCAN_NAVIGATION_SYSTEMS = 32275\nVENDOR_ID_SICHUAN_PUBLIC_INFORMATION_INDUSTRY_COLTD_SCPI = 32276\nVENDOR_ID_ZTI = 32277\nVENDOR_ID_RT_SYSTEMS_PTY_LTD = 32278\nVENDOR_ID_RYAN_J_THOMPSON = 32279\nVENDOR_ID_JOHNSTON_PRESS_PLC = 32280\nVENDOR_ID_VIDEOPLAZA = 32281\nVENDOR_ID_DAIMONLAB = 32282\nVENDOR_ID_TBITSNET_GMBH = 32283\nVENDOR_ID_EREFER = 32284\nVENDOR_ID_SUMAVISION_TECHNOLOGIES_COLTD = 32285\nVENDOR_ID_ACD_ELEKTRONIK_GMBH = 32286\nVENDOR_ID_SATTVIK_SOFTWARE_TECHNOLOGY_RESOURCES_LTD_CO = 32287\nVENDOR_ID_EG_ELECTRONIC_GMBH = 32288\nVENDOR_ID_CELLSPOTTINGCOM = 32289\nVENDOR_ID_RECORDS_FOR_LIVING_INC = 32290\nVENDOR_ID_LINGZHOU_NETWORK = 32291\nVENDOR_ID_FLORIDA_DEPARTMENT_OF_CHILDREN_AND_FAMILIES = 32292\nVENDOR_ID_NETFUTURA_GMBH_CO_KG = 32293\nVENDOR_ID_LEWIS_SILKIN = 32294\nVENDOR_ID_CPANEL_INC = 32295\nVENDOR_ID_BEACH_HORIZON_LLP = 32296\nVENDOR_ID_S2COMPANY_SRL = 32297\nVENDOR_ID_COMMUNICATION_NETWORKS_LLC = 32298\nVENDOR_ID_COATESOFT = 32299\nVENDOR_ID_ALCORN_MCBRIDE_INC = 32300\nVENDOR_ID_SIEMENS_IT_SOLUTIONS_AND_SERVICES = 32301\nVENDOR_ID_INSERT_DATA_HERE = 32302\nVENDOR_ID_ANCHOR_SYSTEMS_PTY_LTD = 32303\nVENDOR_ID_LOJAS_MAIA_LTDA = 32304\nVENDOR_ID_KAMP_NETZWERKDIENSTE_GMBH = 32305\nVENDOR_ID_SOOLBOX_ASSOCIATION = 32306\nVENDOR_ID_EMBEDDED_SYSTEMS = 32307\nVENDOR_ID_NLI_BUSINESS_SUPPORT_AS = 32308\nVENDOR_ID_CHITTAGONG_ONLINE_LIMITED = 32309\nVENDOR_ID_EDGE_TECHNOLOGIES = 32310\nVENDOR_ID_CPI_PROGETTI_SPA = 32311\nVENDOR_ID_INTERNATIONAL_HELLENIC_UNIVERISTY = 32312\nVENDOR_ID_RED_LAMBDA_INC = 32313\nVENDOR_ID_SP_ITS = 32314\nVENDOR_ID_VIRTUAL_MANAGEMENT_TECHNOLOGIES = 32315\nVENDOR_ID_FROM2 = 32316\nVENDOR_ID_THE_NATIONAL_LIBRARY_OF_NORWAY = 32317\nVENDOR_ID_TOM_GEUDENS_PRIVATE_ENTERPRISE_LIMITED = 32318\nVENDOR_ID_FERNAU_AVIONICS_LTD = 32319\nVENDOR_ID_SUPERMARCHS_MATCH = 32320\nVENDOR_ID_ESYSTEMS_INC = 32321\nVENDOR_ID_CONSEILS_OY_SIMPLYSECURE = 32322\nVENDOR_ID_FILBDE = 32323\nVENDOR_ID_CERTUS_DIGITAL_INC = 32324\nVENDOR_ID_BADGERNETNET = 32325\nVENDOR_ID_NEWAGE_UKRAINE_INC = 32326\nVENDOR_ID_RF_INDUSTRIES = 32327\nVENDOR_ID_LEGENDSEC_TECHNOLOGY_COLTD = 32328\nVENDOR_ID_SHENZHEN_GUANRI_TECHNOLOGY_CO_LTD = 32329\nVENDOR_ID_OLITECHS = 32330\nVENDOR_ID_NIMBUS_DATA_SYSTEMS_INC = 32331\nVENDOR_ID_SISCARD_SA = 32332\nVENDOR_ID_IRRINGERDE = 32333\nVENDOR_ID_CGNET = 32334\nVENDOR_ID_NIPPON_CONTROL_SYSTEM_CORPORATION_NCS = 32335\nVENDOR_ID_MICRO_OCEAN_TECHNOLOGIES_SDN_BHD = 32336\nVENDOR_ID_ISRACARD_LDT = 32337\nVENDOR_ID_UNITED_BISCUITS = 32338\nVENDOR_ID_SCHWEITZER_GMBH_ARCHITEKTUR_GENERALPLANUNG = 32339\nVENDOR_ID_DCTI = 32340\nVENDOR_ID_GANGOLA_DESIGNS = 32341\nVENDOR_ID_XORP_INC = 32342\nVENDOR_ID_SHOP_DIRECT_HOME_SHOPPING_LIMITED = 32343\nVENDOR_ID_ADVANSCOPE_INC = 32344\nVENDOR_ID_RF_MONOLITHICS_INC = 32345\nVENDOR_ID_DIGI_TELECOMMUNICATIONS_SDN_BHD = 32346\nVENDOR_ID_SITESCANNER_EUROPE_AB = 32347\nVENDOR_ID_CROSS_COUNTRY_SYSTEMS = 32348\nVENDOR_ID_IREDMAIL = 32349\nVENDOR_ID_BEDEWORKORG = 32350\nVENDOR_ID_GENSCAPE_INC = 32351\nVENDOR_ID_RINDELS_INFORMATION_MANAGEMENT_SYSTEMS_RIMS = 32352\nVENDOR_ID_BAIDU = 32353\nVENDOR_ID_VERTICO_SOFTWARE_GMBH = 32354\nVENDOR_ID_KOCAK_CORP = 32355\nVENDOR_ID_SYSLOGIC_LTD = 32356\nVENDOR_ID_SOLO_NETWORKS_INC = 32357\nVENDOR_ID_EPIPHAN_SYSTEMS_INC = 32358\nVENDOR_ID_UNIVERSITY_OF_UDINE = 32359\nVENDOR_ID_DNEPROOBLENERGO = 32360\nVENDOR_ID_CAIR = 32361\nVENDOR_ID_IDT_SPC = 32362\nVENDOR_ID_ENGINEERING_SOFTWARE_GMBH = 32363\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_ESTADO_DO_RIO_DE_JANEIRO_UNIRIO = 32364\nVENDOR_ID_MINO_WIRELESS_USA_INC = 32365\nVENDOR_ID_PRAGMATIC_DATA = 32366\nVENDOR_ID_COMMUNICATION_AUTOMATION_CORPORATION = 32367\nVENDOR_ID_FACULTY_OF_INFORMATION_TECHNOLOGY_NGUYEN_TAT_THANH_COLLEGE = 32368\nVENDOR_ID_UPTIME_IT = 32369\nVENDOR_ID_UNIVERSITY_OF_ZIELONA_GORA = 32370\nVENDOR_ID_COMPLEX_IT_SOLUTIONS = 32371\nVENDOR_ID_WEB_SAGES = 32372\nVENDOR_ID_PATERNOSTROORG = 32373\nVENDOR_ID_RIDGEVIEWTEL_LLC = 32374\nVENDOR_ID_SECORIX_INC = 32375\nVENDOR_ID_RAM_MOBILE_DATA = 32376\nVENDOR_ID_ARCHIT = 32377\nVENDOR_ID_TB_SOLUTIONS_SECURITY_SA = 32378\nVENDOR_ID_LAKE_MICHIGAN_CREDIT_UNION = 32379\nVENDOR_ID_INSTITUTO_CURITIBA_DE_INFORMTICA = 32380\nVENDOR_ID_MILWAUKEE_COUNTY_GOVERNMENT = 32381\nVENDOR_ID_MIXTUR_INTERACTIVE_INC = 32382\nVENDOR_ID_IOJIK_INC = 32383\nVENDOR_ID_HENCHMONKEY = 32384\nVENDOR_ID_BEIJING_BOHUI_SCIENCE_TECHNOLOGY_CO_LTD = 32385\nVENDOR_ID_PROXICAST_LLC = 32386\nVENDOR_ID_ETISALAT = 32387\nVENDOR_ID_THE_NETBSD_FOUNDATION = 32388\nVENDOR_ID_MILLENNIUM_ARTS_GROUP = 32389\nVENDOR_ID_ID7_LTD = 32390\nVENDOR_ID_SYSTEMHUSET_EPISTEME_AS = 32391\nVENDOR_ID_SECURE_MSP_GMBH = 32392\nVENDOR_ID_ONESTO_SERVICES_OY = 32393\nVENDOR_ID_SOLUTIONS_AND_SERVICES_AS = 32394\nVENDOR_ID_SALAMANDERSOFT_LTD = 32395\nVENDOR_ID_OHIO_UNIVERSITY = 32396\nVENDOR_ID_IROBOT_CORPORATION = 32397\nVENDOR_ID_EATON_VANCE_MANAGEMENT = 32398\nVENDOR_ID_NEDERLAND_LIVE = 32399\nVENDOR_ID_WAVEMAKER_SOFTWARE_INC = 32400\nVENDOR_ID_AMP_FINANCIAL_SERVICES_NEW_ZEALAND = 32401\nVENDOR_ID_GREENSON_PTY_LTD = 32402\nVENDOR_ID_CHINA_FUZHOU_EVIDEO = 32403\nVENDOR_ID_NETHAWK_OYJ = 32404\nVENDOR_ID_SELECTRON_SYSTEMS_AG = 32405\nVENDOR_ID_KONCEPT_SP_Z_OO = 32406\nVENDOR_ID_GECOSOFT_CONSULTING_GMBH = 32407\nVENDOR_ID_DANIEL_ANDRADE_COSTA_SILVA = 32408\nVENDOR_ID_VOXEL_DOT_NET_INC = 32409\nVENDOR_ID_RF_CODE_INC = 32410\nVENDOR_ID_SWEDISH_ORIENT_LINE = 32411\nVENDOR_ID_MINOT_ENTERPRISES_INC = 32412\nVENDOR_ID_ECBRIDGES_INC = 32413\nVENDOR_ID_VERACITY_UK = 32414\nVENDOR_ID_COMAX_BV = 32415\nVENDOR_ID_DOCOUT_SL = 32416\nVENDOR_ID_KINAMIK_DATA_INTEGRITY_SL = 32417\nVENDOR_ID_MARNE_ELK_HORN_TELEPHONE_CO = 32418\nVENDOR_ID_INSTITUT_STRAUMANN_AG = 32419\nVENDOR_ID_PAYMENT_PROCESSING_INC = 32420\nVENDOR_ID_BERTHOLDSSON = 32421\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_VIOSA = 32422\nVENDOR_ID_ROGALAND_FYLKESKOMMUNE_COUNTY_OF_ROGALAND = 32423\nVENDOR_ID_HARRY_JACKSON_BOOZLED = 32424\nVENDOR_ID_CRW_DATA_AB = 32425\nVENDOR_ID_INSTITUTE_FOR_STUDIES_IN_THEORETICAL_PHYSICS_AND_MATHEMATICS_IPM = 32426\nVENDOR_ID_BORNIS_GROUP = 32427\nVENDOR_ID_SEPEHR_S_T_CO_LTD = 32428\nVENDOR_ID_UNIVERSITY_OF_ISFAHAN = 32429\nVENDOR_ID_NADAM_COLTD = 32430\nVENDOR_ID_YUKTHI_SYSTEMS_PVT_LTD = 32431\nVENDOR_ID_LDAP_STUDY_UNION = 32432\nVENDOR_ID_NETCELER = 32433\nVENDOR_ID_TELENOR_TELECOM_SOLUTIONS_AS = 32434\nVENDOR_ID_TAMOSOFT_LTD = 32435\nVENDOR_ID_INTERSEC = 32436\nVENDOR_ID_OBSIDIAN_RESEARCH = 32437\nVENDOR_ID_PROMONT_SOLUES_LTDA = 32438\nVENDOR_ID_SHANGHAI_YOSEE_LTD = 32439\nVENDOR_ID_KINOPSISNET = 32440\nVENDOR_ID_NETWELL_LTD = 32441\nVENDOR_ID_MPSETIBR = 32442\nVENDOR_ID_INTERNET_RESEARCH_INSTITUTE_INC = 32443\nVENDOR_ID_FIBERCOM_TECHNOLOGIES_SHENZHEN_COLTD = 32444\nVENDOR_ID_LAMOREE_SOFTWARE = 32445\nVENDOR_ID_PAESSLER_AG = 32446\nVENDOR_ID_CASERIS_GMBH = 32447\nVENDOR_ID_ADDITION_IT_SWEDEN_AB = 32448\nVENDOR_ID_CUATRECASAS_ABOGADOS = 32449\nVENDOR_ID_MICRON_ENGINEERING_DI_MANCA_MASSIMO = 32450\nVENDOR_ID_B_SOURCE_SA = 32451\nVENDOR_ID_DAMAYA_UK = 32452\nVENDOR_ID_TERRAPIN_ASSOCIATES = 32453\nVENDOR_ID_ATRATO_INC = 32454\nVENDOR_ID_E_TAG_INC = 32455\nVENDOR_ID_FREEBOX_SAS = 32456\nVENDOR_ID_IPTEC_INC = 32457\nVENDOR_ID_COLORADO_CLINICAL_RESEARCH_ECG_CORE_LAB = 32458\nVENDOR_ID_HAPPYEND = 32459\nVENDOR_ID_THE_DIGITAL_FREEHOLD = 32460\nVENDOR_ID_BRINKER_PHARMACONSULTING = 32461\nVENDOR_ID_VIP_SYSTEMS_CO_LTD = 32462\nVENDOR_ID_COALESE_CORPORATION = 32463\nVENDOR_ID_IDH_GMBH = 32464\nVENDOR_ID_ALL_OPTIONS_INTERNATIONAL_BV = 32465\nVENDOR_ID_GUIFINET = 32466\nVENDOR_ID_SYSDESIGN = 32467\nVENDOR_ID_TEAMNETT_AS = 32468\nVENDOR_ID_NETWORK_DESIGN_GMBH = 32469\nVENDOR_ID_FORSCHUNGSZENTRUM_JLICH = 32470\nVENDOR_ID_DAITEC_GMBH = 32471\nVENDOR_ID_TIKONA_DIGITAL_NETWORKS = 32472\nVENDOR_ID_EXAMPLE_ENTERPRISE_NUMBER_FOR_DOCUMENTATION_USE = 32473\nVENDOR_ID_KIALCO_GROUP = 32474\nVENDOR_ID_AMBIT_COMMUNICATE = 32475\nVENDOR_ID_BELLS_BOOKING_AGENCY = 32476\nVENDOR_ID_ISACCOUNTABLE = 32477\nVENDOR_ID_RF_WINDOW_CO_LTD = 32478\nVENDOR_ID_APPEX_NETWORKS = 32479\nVENDOR_ID_OLLIX = 32480\nVENDOR_ID_UNITRONICS = 32481\nVENDOR_ID_QNECTIVE_AG_FORMERLY_QPORTER_SCHWEITZ_AG = 32482\nVENDOR_ID_OCTROOICENTRUM_NEDERLAND = 32483\nVENDOR_ID_ESCATRONIC_GMBH = 32484\nVENDOR_ID_LIVE_INTERACTIVE_SA = 32485\nVENDOR_ID_DCK_WORLDWIDE = 32486\nVENDOR_ID_LEAGUE_OF_AMERICAN_ORCHESTRAS = 32487\nVENDOR_ID_THE_COLLEGE_OF_NEW_JERSEY = 32488\nVENDOR_ID_ALAN_SAVAGE = 32489\nVENDOR_ID_PRINGO = 32490\nVENDOR_ID_BEIJING_UNITRUST_TECH_SERVICE_COLTD = 32491\nVENDOR_ID_MAAS_MARTINNL = 32492\nVENDOR_ID_CPS_COLOR_EQUIPMENT_SPA = 32493\nVENDOR_ID_KWASNIAK = 32494\nVENDOR_ID_SCREWFIX_LTD = 32495\nVENDOR_ID_MINDLOGIX = 32496\nVENDOR_ID_CENTEX_SERVICE_CO_LLC = 32497\nVENDOR_ID_CLOCKWORK_ACTIVE_MEDIA_SYSTEMS_LLC = 32498\nVENDOR_ID_TECCON_INC = 32499\nVENDOR_ID_VIRTUAL_COMPUTER_INC = 32500\nVENDOR_ID_TELEMISIS_LTD = 32501\nVENDOR_ID_PANCETERA_SOFTWARE_INC = 32502\nVENDOR_ID_PUREWIRE_INC = 32503\nVENDOR_ID_WASHINGTON_DIVISION_OF_URS_CORPORATION = 32504\nVENDOR_ID_APTIX_IT_SRL = 32505\nVENDOR_ID_KOR_NETWORKS = 32506\nVENDOR_ID_FIRST_COMMUNITY_SERVICES_INC = 32507\nVENDOR_ID_SIEMON = 32508\nVENDOR_ID_LUMINIS = 32509\nVENDOR_ID_WATCHDATA = 32510\nVENDOR_ID_FOUNTAINHEAD_INVESTMENTS_LTD = 32511\nVENDOR_ID_ZEN_SOLUCIONES = 32512\nVENDOR_ID_BUEROLOGISTIK_GMBH_CO_KG = 32513\nVENDOR_ID_JSC_EFFORTEL = 32514\nVENDOR_ID_REBTEL_NETWORKS_AB = 32515\nVENDOR_ID_GISDATA = 32516\nVENDOR_ID_ACCSYS_GMBH = 32517\nVENDOR_ID_VIRTUOZ = 32518\nVENDOR_ID_WIRELESS_MUNDI_SL = 32519\nVENDOR_ID_ANGLO_EUROPEAN_AVIATION_AG = 32520\nVENDOR_ID_KONTUR_NETWORX = 32521\nVENDOR_ID_CREARE_INC = 32522\nVENDOR_ID_ACN_AGNCIA_CATALANA_DE_NOTCIES = 32523\nVENDOR_ID_ZAXIA = 32524\nVENDOR_ID_GOLD_LASSO_INC = 32525\nVENDOR_ID_OBJECT_PARTNERS_INC = 32526\nVENDOR_ID_YUGMA_INC = 32527\nVENDOR_ID_ACQUIA_INC = 32528\nVENDOR_ID_WARPED_COMMUNICATIONS_INC = 32529\nVENDOR_ID_UID0_NETWORKS = 32530\nVENDOR_ID_NOKEENA_NETWORKS_INC = 32531\nVENDOR_ID_REGIS_CORPORATION = 32532\nVENDOR_ID_XUE_CAN = 32533\nVENDOR_ID_MB_CONNECT_LINE_GMBH = 32534\nVENDOR_ID_ZT_SYSTEMS = 32535\nVENDOR_ID_ERGOBYTE_INFORMATICS = 32536\nVENDOR_ID_VOIDMAGENET = 32537\nVENDOR_ID_NETCARE_SERVICE_CO_LTD = 32538\nVENDOR_ID_CINNOBER_FINANCIAL_TECHNOLOGY_AB = 32539\nVENDOR_ID_MANLIGHT = 32540\nVENDOR_ID_ALSION = 32541\nVENDOR_ID_BANCO_CREDICOOP = 32542\nVENDOR_ID_RAIDBR_SOLUCOES_EM_INFORMATICA_LTDA = 32543\nVENDOR_ID_KENTUCKY_DEPARTMENT_OF_EDUCATION = 32544\nVENDOR_ID_ARMY_AIR_FORCE_EXCHANGE_SERVICE = 32545\nVENDOR_ID_VALCOM_INC = 32546\nVENDOR_ID_SENSAGE_INC = 32547\nVENDOR_ID_UNIVERSITY_OF_NORTH_CAROLINA_GENERAL_ADMINISTRATION = 32548\nVENDOR_ID_GOVIERNO_DE_LA_PROVINCIA_DE_CORRIENTES = 32549\nVENDOR_ID_COVETEL_RS = 32550\nVENDOR_ID_VALUNEX = 32551\nVENDOR_ID_FREEIT = 32552\nVENDOR_ID_HOPEWISER_LTD = 32553\nVENDOR_ID_VINCENT_WANG = 32554\nVENDOR_ID_RNDFR = 32555\nVENDOR_ID_BRUNO_MEDICI_CONSULTING = 32556\nVENDOR_ID_HUNGARIAN_CHAMBER_OF_CIVIL_LAW_NOTARIES_MOKK = 32557\nVENDOR_ID_KLEINHENZ_ELEKTRONIK_GMBH = 32558\nVENDOR_ID_PARADIGMA_TECNOLOGICO_SL = 32559\nVENDOR_ID_TSUBATA_ENGINEERING_CO_LTD = 32560\nVENDOR_ID_EDSI_TREND_ARGENTINA_SA = 32561\nVENDOR_ID_AMBRADO_INC = 32562\nVENDOR_ID_DRK_GEMEINNTZIGE_KRANKENHAUS_GMBH_SACHSEN = 32563\nVENDOR_ID_ASIDEV_SRL = 32564\nVENDOR_ID_NEISSWARE_GMBH = 32565\nVENDOR_ID_I2C_INDUSTRIE_INNOVATION_CONSEIL = 32566\nVENDOR_ID_ALASTRIA_NETWORKS_LIMITED = 32567\nVENDOR_ID_INTEGRAL = 32568\nVENDOR_ID_GAYUX = 32569\nVENDOR_ID_HILLYTON_ELECTRONIC_TECHNOLOGY_CO_LTD = 32570\nVENDOR_ID_PEERING_PORTAL_INC = 32571\nVENDOR_ID_CIAVOX = 32572\nVENDOR_ID_ONI_NET_CS = 32573\nVENDOR_ID_DSIT_REIMSMETROPOLE = 32574\nVENDOR_ID_DANIEL_PALFFY = 32575\nVENDOR_ID_AYDAYEVS_INVESTMENT_BUSINESS_GROUP = 32576\nVENDOR_ID_PROXIMETRY_INC = 32577\nVENDOR_ID_GEEKDUDECOM = 32578\nVENDOR_ID_GIANLUCA_DANDREA = 32579\nVENDOR_ID_HDT_HANSEATISCHE_DATENTECHNIK_GMBH = 32580\nVENDOR_ID_REMOTEK_CORPORATION = 32581\nVENDOR_ID_N2_NETWORKS = 32582\nVENDOR_ID_LITESPAN_INC = 32583\nVENDOR_ID_DESIGNART_NETWORKS = 32584\nVENDOR_ID_VIGITRONIC = 32585\nVENDOR_ID_INSTITUTO_VENEZOLANO_DE_INVESTIGACIONES_CIENTIFICAS = 32586\nVENDOR_ID_WIKID_SYSTEMS_INC = 32587\nVENDOR_ID_MVLOGIX = 32588\nVENDOR_ID_EFFINGER = 32589\nVENDOR_ID_AXIOM_NETWORKING = 32590\nVENDOR_ID_DELTARES = 32591\nVENDOR_ID_PINTU = 32592\nVENDOR_ID_CRYSTAL_MEDIA_INC = 32593\nVENDOR_ID_INVENSYS_ROBERTSHAW_INDUSTRIAL_PRODUCTS = 32594\nVENDOR_ID_NEXTGEN_NETWORKS = 32595\nVENDOR_ID_PLATH_PROCITEC_SUISSE_AG = 32596\nVENDOR_ID_DOUBLE_NEGATIVE = 32597\nVENDOR_ID_PROVIDENCE_LIFE_SERVICES = 32598\nVENDOR_ID_SUPEMIR = 32599\nVENDOR_ID_CLEARCRYPT_INC = 32600\nVENDOR_ID_GENCORE_CANDEO_LTD = 32601\nVENDOR_ID_FACULDADE_SEAMA = 32602\nVENDOR_ID_DVS_SOLUTIONS = 32603\nVENDOR_ID_FRC_COMPONENT_PRODUCTS = 32604\nVENDOR_ID_STRUCTUAL_BIOLOGY_RESEARCH_CENTERHIGH_ENERGY_ACCELERATOR_RESEARCH_ORGANIZATIONKEK = 32605\nVENDOR_ID_CRYSTALINE_INFOTECH = 32606\nVENDOR_ID_GOLDAN = 32607\nVENDOR_ID_FEDERAL_HOME_LOAN_BANK = 32608\nVENDOR_ID_DEVELOPMENT_CONSULTANTS_INCORPORATED = 32609\nVENDOR_ID_JILIN_UNIVERSITY_INFORMATION_TECHNOLOGIES_CO_LTD = 32610\nVENDOR_ID_IMAGE_MANIPULATION_SYSTEMS_INC = 32611\nVENDOR_ID_MORISAKI_TAKATOSI = 32612\nVENDOR_ID_CALIFORNIA_STATE_LEGISLATURE = 32613\nVENDOR_ID_YOU_TELECOM_INDIA_PVT_LTD = 32614\nVENDOR_ID_ELPROC_SP_Z_OO = 32615\nVENDOR_ID_OPENSOURCEXPRESS_LTD = 32616\nVENDOR_ID_POLYTECHNICAL_ENGINEERING_COLLEGE_IN_SUBOTICA = 32617\nVENDOR_ID_FIOK_I_WSPLNICY_SP_Z_OO = 32618\nVENDOR_ID_MOVIK_NETWORKS_INC = 32619\nVENDOR_ID_ANUESYSTEMS = 32620\nVENDOR_ID_FRANKLIN_UNIVERSITY = 32621\nVENDOR_ID_CACE_TECHNOLOGIES = 32622\nVENDOR_ID_KUNI_AUTOMOTIVE = 32623\nVENDOR_ID_KHOMP_IND_E_COM_LTDA = 32624\nVENDOR_ID_GOPC_PTY_LTD = 32625\nVENDOR_ID_SECURITY_CUBE = 32626\nVENDOR_ID_EMAGEON_INC = 32627\nVENDOR_ID_AXIOMTEK_CO_LTD = 32628\nVENDOR_ID_DIGI_LTD = 32629\nVENDOR_ID_TREZORIX = 32630\nVENDOR_ID_LIYO_TECHNOLOGY_CO_LTD = 32631\nVENDOR_ID_EXCLUVIOR = 32632\nVENDOR_ID_ORS_TISZAY = 32633\nVENDOR_ID_BLUETICK_INC = 32634\nVENDOR_ID_SISTERS_OF_MERCY_HEALTH_SYSTEMS = 32635\nVENDOR_ID_ITS_ELECTRONICS_INC = 32636\nVENDOR_ID_PERCEPTECH_INC = 32637\nVENDOR_ID_ISTOR_NETWORKS_INC = 32638\nVENDOR_ID_TRIBUNAL_ELECTORAL_DEL_PODER_JUDICIAL_DE_LA_FEDERACIN = 32639\nVENDOR_ID_NEOCATENA_NETWORKS_INC = 32640\nVENDOR_ID_SECURITY_SERVICES_FRAMEWORK = 32641\nVENDOR_ID_FRENINGEN_DIS = 32642\nVENDOR_ID_KRAKOWSKIE_E_CENTRUM_INFORMATYCZNE_JUMP = 32643\nVENDOR_ID_BWS_CONSULTORES_CA = 32644\nVENDOR_ID_COTY_INC = 32645\nVENDOR_ID_PNEUMATIC_TUBE_PRODUCTS_CO_INC = 32646\nVENDOR_ID_FEDERAL_DEFENDER_OFFICE = 32647\nVENDOR_ID_VORTEX_TECHNOLOGY_NETWORKS = 32648\nVENDOR_ID_BEIJING_RAYCOMM_DIGITAL_TECHNOLOGY_COLTD = 32649\nVENDOR_ID_NAMTRAC_KFT = 32650\nVENDOR_ID_NEWTEC_COMMUNICATIONS_GMBH = 32651\nVENDOR_ID_MACHINE_VFX = 32652\nVENDOR_ID_IOKO365_LTD = 32653\nVENDOR_ID_INSTITUT_FR_EXPERIMENTELLE_KERNPHYSIK_KIT = 32654\nVENDOR_ID_CLASSICS_ANIMATED = 32655\nVENDOR_ID_HYPIOS = 32656\nVENDOR_ID_PARTICLE_DYNAMICS_GMBH = 32657\nVENDOR_ID_ICONOCLAST_IT = 32658\nVENDOR_ID_SAT_TRAKT_DOO = 32659\nVENDOR_ID_JOACHIM_KELTSCH = 32660\nVENDOR_ID_MITSUBISHI_ELECTRIC_ENGINEERING_COLTD = 32661\nVENDOR_ID_NTTME = 32662\nVENDOR_ID_IFIN_SISTEMI_SRL_A_SOCIO_UNICO = 32663\nVENDOR_ID_DSR_INFORMATION_TECHNOLOGIES_LTD = 32664\nVENDOR_ID_VECCSA_SA = 32665\nVENDOR_ID_INTEGRATED_HEALTHCARE_SOLUTIONS = 32666\nVENDOR_ID_ULTRABLEND_LLC = 32667\nVENDOR_ID_IPFIREORG = 32668\nVENDOR_ID_CONSISTEC_ENGINEERING_CONSULTING_GMBH = 32669\nVENDOR_ID_CONSILIENCE_SOFTWARE = 32670\nVENDOR_ID_GRASPI = 32671\nVENDOR_ID_BETABUILDNET = 32672\nVENDOR_ID_WAB_SICHERHEITSSYSTEME_GMBH = 32673\nVENDOR_ID_GEEKNODE = 32674\nVENDOR_ID_CRACOW_UNIVERSITY_OF_ECONOMICS = 32675\nVENDOR_ID_SOFTWAREHUSETDK = 32676\nVENDOR_ID_EMI_MUSIC_LTD = 32677\nVENDOR_ID_FRAMESTORE_LTD = 32678\nVENDOR_ID_ZINC_SOLUTIONS = 32679\nVENDOR_ID_RENTABILIWEB_GROUP = 32680\nVENDOR_ID_ATWAL_INC = 32681\nVENDOR_ID_TEXT_TEAM_GMBH_CO_KG = 32682\nVENDOR_ID_TOKYO_KEIKI_INC = 32683\nVENDOR_ID_HEALTHTRANS_LLC = 32684\nVENDOR_ID_REDEFINE_SP_Z_OO = 32685\nVENDOR_ID_HOLLY_CORPORATION = 32686\nVENDOR_ID_DIGITAL_FINANCE_SPDA = 32687\nVENDOR_ID_GIGLE_SEMICONDUCTOR = 32688\nVENDOR_ID_MWJ_COMPUTING = 32689\nVENDOR_ID_COMREX_CORPORATION = 32690\nVENDOR_ID_EXMERITUS_SOFTWARE_FEDERAL_SYSTEMS_INC = 32691\nVENDOR_ID_AMCOM_TELECOMMUNICATIONS_LTD = 32692\nVENDOR_ID_E_SZMLA_ZRT = 32693\nVENDOR_ID_COMPUTERPRIDE = 32694\nVENDOR_ID_VOZPP = 32695\nVENDOR_ID_ZAKLAD_PRODUKCYJNY_TEL_KA_SC = 32696\nVENDOR_ID_ACO_SERVERIN_AHLMANN_GMBH_CO_KG = 32697\nVENDOR_ID_SE_ELEKTRONIC_GMBH = 32698\nVENDOR_ID_THALES_ALENIA_SPACE_FRANCE = 32699\nVENDOR_ID_INBUSS_INFORMATIKAI_SZOLGLTAT_S_KERESKEDELMI_KFT = 32700\nVENDOR_ID_LOYALTY_PARTNER_GMBH = 32701\nVENDOR_ID_JOINT_STOCK_COMPANY_NPO_RUSBITECH = 32702\nVENDOR_ID_CENTRE_DE_RECHERCHE_HENRI_TUDOR_SANTEC = 32703\nVENDOR_ID_JSC_ERSHOVTELECOM = 32704\nVENDOR_ID_DSYS_EK = 32705\nVENDOR_ID_REECH_CAPITAL_LTD = 32706\nVENDOR_ID_PI_CONSULTING_UK_LIMITED = 32707\nVENDOR_ID_DIMACO_SYSTEMS_SRL = 32708\nVENDOR_ID_AIRTIES = 32709\nVENDOR_ID_LOJAS_RENNER_SA = 32710\nVENDOR_ID_FIDES_AG = 32711\nVENDOR_ID_LINDEN_LAB = 32712\nVENDOR_ID_FLOX_ARTSNET = 32713\nVENDOR_ID_IPS_METEOSTAR = 32714\nVENDOR_ID_IBM_MANAGED_SECURITY_SERVICES = 32715\nVENDOR_ID_ALEA_SOLUCIONES_SLL = 32716\nVENDOR_ID_GEMINTEK_CORPORATION = 32717\nVENDOR_ID_SOUTHWESTERN_UNIVERSITY_OF_FINANCE_AND_ECONOMICS = 32718\nVENDOR_ID_3NOKTA_BILISIM_TEKNOLOJILERI_LTD = 32719\nVENDOR_ID_CVR_TRANSPORT_KFT = 32720\nVENDOR_ID_RTPHYS = 32721\nVENDOR_ID_MAASTRO = 32722\nVENDOR_ID_PACEMAKER_CLUSTER_PROJECT = 32723\nVENDOR_ID_AIRDATEC_TECNICOS_SL = 32724\nVENDOR_ID_TRANS_ICELAND = 32725\nVENDOR_ID_TATIS = 32726\nVENDOR_ID_WEBTECH_AS = 32727\nVENDOR_ID_GRID_DYNAMICS_CONSULTING_SERVICES_INC = 32728\nVENDOR_ID_EMS_SATCOM = 32729\nVENDOR_ID_MOBILE_FOR_YOU_M4U = 32730\nVENDOR_ID_OBVIOUSLY_NICE = 32731\nVENDOR_ID_WK_KELLOGG_FOUNDATION = 32732\nVENDOR_ID_PHYBRIDGE_INC = 32733\nVENDOR_ID_CITY_OF_SEATTLE = 32734\nVENDOR_ID_SECURITYNETCZ_SRO = 32735\nVENDOR_ID_SHD_SYSTEM_HAUS_DRESDEN_GMBH = 32736\nVENDOR_ID_MEGHNABEN_DAXESHBHAI_PATEL = 32737\nVENDOR_ID_DELTA_NUSANTARA_NETWORKS_CO_LTD = 32738\nVENDOR_ID_SAIMAAN_LEHTIPAINO_OY = 32739\nVENDOR_ID_LEHTIKANTA_OY = 32740\nVENDOR_ID_SAVON_PAINO_OY = 32741\nVENDOR_ID_HMEEN_PAINO_OY = 32742\nVENDOR_ID_SANOMALA_OY = 32743\nVENDOR_ID_KAMEKO_BT = 32744\nVENDOR_ID_DURAG_DATA_SYSTEMS = 32745\nVENDOR_ID_INSTITUTO_DE_BIOLOGA_UNIVERSIDAD_NACIONAL_AUTNOMA_DE_MXICO = 32746\nVENDOR_ID_TELENET_AG_RHEIN_MAIN = 32747\nVENDOR_ID_KOLOSSTUDIO = 32748\nVENDOR_ID_TRUSTMISSION = 32749\nVENDOR_ID_LIGOWAVE = 32750\nVENDOR_ID_SOLYTRON = 32751\nVENDOR_ID_JOHN_WILL_MOTORS = 32752\nVENDOR_ID_OMNITURE_INC = 32753\nVENDOR_ID_DEXCEL_ELECTRONICS_DESIGNS_PVT_LTD = 32754\nVENDOR_ID_WESABE_INC = 32755\nVENDOR_ID_CREATIVE_SOLUTIONS_LABORATORIES_SP_Z_OO = 32756\nVENDOR_ID_CHARTCONNECT_INC = 32757\nVENDOR_ID_ANAGKY_BVBA = 32758\nVENDOR_ID_PRIMX_TECHNOLOGIES = 32759\nVENDOR_ID_KOLIADA = 32760\nVENDOR_ID_DELIBERANT = 32761\nVENDOR_ID_AKSOLUTIONS = 32762\nVENDOR_ID_YMAGIS = 32763\nVENDOR_ID_INTECHNOLOGY_PLC = 32764\nVENDOR_ID_WEBHOST_ASIA_PACIFIC_PTY_LTD = 32765\nVENDOR_ID_CAPRICODE = 32766\nVENDOR_ID_JPPA_GERENCIAMENTO_E_PROJETOS_S_S_LTDA = 32767\nVENDOR_ID_EDUCATIONAL_SERVICE_UNIT_6 = 32768\nVENDOR_ID_BIZICLE = 32769\nVENDOR_ID_HOEDL_ONLINE_SYSTEMTECHNIK = 32770\nVENDOR_ID_FUJITSU_TOHOKU_SYSTEMS_LTD = 32771\nVENDOR_ID_DECLERA_LTD = 32772\nVENDOR_ID_JEREMY_SELF = 32773\nVENDOR_ID_WEI_FANG_LESHENG_ELECTRONIC_COLTD = 32774\nVENDOR_ID_GIGASET_COMMUNICATIONS = 32775\nVENDOR_ID_HARRY_JE_DAY = 32776\nVENDOR_ID_BOWBRIDGE_SOFTWARE = 32777\nVENDOR_ID_RAIFFEISEN_BANK_HUNGARY = 32778\nVENDOR_ID_BBS_AS = 32779\nVENDOR_ID_SYNERGETIC_AG = 32780\nVENDOR_ID_GROUPE_CHEVALIER = 32781\nVENDOR_ID_CONSEIL_GNRAL_DU_MORBIHAN = 32782\nVENDOR_ID_ECRIN_SYSTEMS = 32783\nVENDOR_ID_AMPLIA_SOLUCIONES_SL = 32784\nVENDOR_ID_PWI_CONSULTANTS = 32785\nVENDOR_ID_MASONRAY_NETWORKS = 32786\nVENDOR_ID_APREND_TECHNOLOGY = 32787\nVENDOR_ID_ENNORIS_TRANS = 32788\nVENDOR_ID_INSTITUTE_OF_ECONOMICS_MANAGEMENT_AND_LAW = 32789\nVENDOR_ID_RAZ_LEE_SECURITY = 32790\nVENDOR_ID_ICSMED_AG = 32791\nVENDOR_ID_ATEX_GROUP_LTD = 32792\nVENDOR_ID_SHENICK_NETWORK_SYSTEMS = 32793\nVENDOR_ID_LUTONG_OPTOELECTRONIC_TECHNOLOGY_COLTD = 32794\nVENDOR_ID_WESTNET_PTD_LTD = 32795\nVENDOR_ID_I_STS_MANUFACTUIRING = 32796\nVENDOR_ID_ASEMPRA_TECHNOLOGIES = 32797\nVENDOR_ID_NETLINX_INC = 32798\nVENDOR_ID_WWWTHINGALLCOM = 32799\nVENDOR_ID_WWWNEUQEDUCN = 32800\nVENDOR_ID_OBJECTFX = 32801\nVENDOR_ID_INUK_NETWORKS = 32802\nVENDOR_ID_RESEARCH_INSTITUTE_FOR_LINGUISTICS_HUNGARIAN_ACADEMY_OF_SCIENCES = 32803\nVENDOR_ID_UNIFY_GMBH_CO_KG_FORMERLY_SIEMENS_ENTERPRISE_COMMUNICATIONS_GMBH_CO_KG = 32804\nVENDOR_ID_CR_HOST = 32805\nVENDOR_ID_SCIENTIANET = 32806\nVENDOR_ID_TVACE = 32807\nVENDOR_ID_SYNTECH_SOC_COOP_A_RL = 32808\nVENDOR_ID_EVALESC_GMBH = 32809\nVENDOR_ID_LANCASHIRE_CONSTABULARY = 32810\nVENDOR_ID_GEMNET_BV = 32811\nVENDOR_ID_ICFO = 32812\nVENDOR_ID_GXPCONSULT_LIMITED = 32813\nVENDOR_ID_REALTIME7_INC = 32814\nVENDOR_ID_CONSERT_INC = 32815\nVENDOR_ID_AREYOUNETCOM = 32816\nVENDOR_ID_SHIFTED_LABS = 32817\nVENDOR_ID_TECTON_LIMITED = 32818\nVENDOR_ID_INFONET_NETWORK_SYSTEMS = 32819\nVENDOR_ID_MUNDO_LINUX = 32820\nVENDOR_ID_MARTIN_MOLLET_INFORMATIK = 32821\nVENDOR_ID_PGS = 32822\nVENDOR_ID_HEXTRA_DIGITAL_SLL = 32823\nVENDOR_ID_FREE_OPEN_SOURCE_SOLUTIONS_INC = 32824\nVENDOR_ID_LS_CABLE = 32825\nVENDOR_ID_TONGJI_UNIVERSITY = 32826\nVENDOR_ID_SIEMENS_I_MO_TS = 32827\nVENDOR_ID_GUNTERMANN_DRUNCK_GMBH_SYSTEMENTWICKLUNG = 32828\nVENDOR_ID_MARC_CAIN_GMBH = 32829\nVENDOR_ID_QUESTORA_SOFTWARE_CJSC = 32830\nVENDOR_ID_IDS = 32831\nVENDOR_ID_OPTECH_FIBRES_LIMITED = 32832\nVENDOR_ID_UNIVERSIT_LILLE_2_DROIT_ET_SANT = 32833\nVENDOR_ID_ANTALIS_SPAIN = 32834\nVENDOR_ID_DATA_DRIVEN_LOGISTICS_LIMITED = 32835\nVENDOR_ID_C2SAT_COMMUNICATIONS_AB = 32836\nVENDOR_ID_LOHMANN_GMBHCOKG = 32837\nVENDOR_ID_UNIVERSITY_OF_AJK_CSIT_CAMPUS_MIRPUR_AZAD_KASHMIR = 32838\nVENDOR_ID_OLEA_MEDICAL = 32839\nVENDOR_ID_KRUM_INDEPENDENT_SCHOOL_DISTRICT = 32840\nVENDOR_ID_CONSTANT_CONTACT = 32841\nVENDOR_ID_SEIDL_KEG = 32842\nVENDOR_ID_INFORMATION_COMPUTING_CENTER_OF_MINISTERY_OF_COMMUNICATIONS_AND_INFORMATION_TECHNOLOGIES = 32843\nVENDOR_ID_DIE_RUDOLPHS = 32844\nVENDOR_ID_METRIC_SYSTEMS_CORPORATION = 32845\nVENDOR_ID_COUGAAR_SOFTWARE_INC = 32846\nVENDOR_ID_DATASTRESS = 32847\nVENDOR_ID_ARQUILA_LIMITED = 32848\nVENDOR_ID_ACTIVE_BROADBAND_NEWORKS_INC = 32849\nVENDOR_ID_C4I_PTY_LTD = 32850\nVENDOR_ID_AYTEL = 32851\nVENDOR_ID_TOWERSTREAM = 32852\nVENDOR_ID_PIXEL8_NETWORKS = 32853\nVENDOR_ID_OMNIGLOBE_NETWORKS_INC = 32854\nVENDOR_ID_TOTAL_TRANSACTION_MANAGEMENT_LLC = 32855\nVENDOR_ID_JL_INGRAM_ASSOCIATES_CC_T_A_THE_HARDWARE_JUNCTION = 32856\nVENDOR_ID_OPENWARE = 32857\nVENDOR_ID_NERDNETCA = 32858\nVENDOR_ID_ESCUELA_POLITCNICA_NACIONAL = 32859\nVENDOR_ID_EXPERT_SYSTEMS_PVT_LTD = 32860\nVENDOR_ID_SHENZHEN_LINKPOWER_NETWORK_SYSTEMS_COLTD = 32861\nVENDOR_ID_BNING_IT_SERVICE = 32862\nVENDOR_ID_OMNITI_LABS = 32863\nVENDOR_ID_WORKFLOWCOM_LLC = 32864\nVENDOR_ID_HEOL_DESIGN = 32865\nVENDOR_ID_ROCKYLUKE = 32866\nVENDOR_ID_UNIVERSITY_OF_ECONOMICS_PRAGUE = 32867\nVENDOR_ID_DIAMANTE_TECHNOLOGY_ADVISORS_INC = 32868\nVENDOR_ID_GRAVITAS_MM_LTD = 32869\nVENDOR_ID_FUJIAN_SUNNADA_COMMUNICATION_CO_LTD = 32870\nVENDOR_ID_BUPT_INCOWIN_INFORMATION_COMMUNICATION_TECHNOLOGY_INSTITUTE_LTD = 32871\nVENDOR_ID_ROYAL_ALBERTS_BROADCASTING_NETWORK = 32872\nVENDOR_ID_KONE_CORPORATION = 32873\nVENDOR_ID_NOVATIUM_SOLUTIONS_PRIVATE_LIMITED = 32874\nVENDOR_ID_VEDICIS = 32875\nVENDOR_ID_MARIAN_FOTUL = 32876\nVENDOR_ID_RADIO_AMATEURS_AGAINST_PACKET_RADIO = 32877\nVENDOR_ID_MEDIAPOD_SARL = 32878\nVENDOR_ID_EUGENE_4J_SCHOOL_DISTRICT = 32879\nVENDOR_ID_KNERER_LANG_ARCHITEKTEN_GMBH = 32880\nVENDOR_ID_BEEMOBILE = 32881\nVENDOR_ID_GAMEACCOUNT_GLOBAL_LTD = 32882\nVENDOR_ID_ONE23_DESIGNS = 32883\nVENDOR_ID_CHEMNITZER_VERLAG_UND_DRUCK_GMBH_CO_KG = 32884\nVENDOR_ID_H_NET_AG = 32885\nVENDOR_ID_RESTOREPOINT_FORMERLY_TADASOFT_LTD = 32886\nVENDOR_ID_JOSEPH_KING_ICT_CONSULTANTS = 32887\nVENDOR_ID_BIZSENSORS = 32888\nVENDOR_ID_THE_COLLEGE_AT_BROCKPORT_STATE_UNIVERSITY_OF_NEW_YORK = 32889\nVENDOR_ID_BIGRED_SOLUTIONS_LTD = 32890\nVENDOR_ID_JANGWHAN_KIM = 32891\nVENDOR_ID_CAPLOG_X_GMBH = 32892\nVENDOR_ID_BJS_DEISGN_CONSULTING_INC = 32893\nVENDOR_ID_TOURO_COLLEGE = 32894\nVENDOR_ID_BRICOM_TECHNOLOGY_CO_LTD = 32895\nVENDOR_ID_JARN_AS = 32896\nVENDOR_ID_MEGWARE_COMPUTER_GMBH = 32897\nVENDOR_ID_SPECTRUM_HEALTH = 32898\nVENDOR_ID_QUIST_LTD = 32899\nVENDOR_ID_DIMENSIONAL_INSIGHT = 32900\nVENDOR_ID_SAGI_B_EXPERT_GROUP_SP_Z_OO = 32901\nVENDOR_ID_VERIZON = 32902\nVENDOR_ID_LINCOLN_LABORATORY = 32903\nVENDOR_ID_NUMLOG = 32904\nVENDOR_ID_COGNITO_LTD = 32905\nVENDOR_ID_ROROTIKA_TECHNOLOGIES = 32906\nVENDOR_ID_NPO_RTC_LTD = 32907\nVENDOR_ID_ADVENAGE_GMBH = 32908\nVENDOR_ID_KINEK_TECHNOLOGIES_INC = 32909\nVENDOR_ID_IMPEQ_TECHNOLOGIES_BV = 32910\nVENDOR_ID_BRIAN_RAAEN_NETWORK_CONSULTING = 32911\nVENDOR_ID_DUCK_CREEK_TECHNOLOGIES_INC = 32912\nVENDOR_ID_ELECTRODATA_RECORDERS_PTY_LTD = 32913\nVENDOR_ID_PHARMACY_CHAIN_366 = 32914\nVENDOR_ID_EDINBURGHS_TELFORD_COLLEGE = 32915\nVENDOR_ID_LANE_COMMUNITY_COLLEGE = 32916\nVENDOR_ID_GT_APPS_LIMITED = 32917\nVENDOR_ID_INSTITUT_SAINTE_CATHERINE = 32918\nVENDOR_ID_BARKING_IGUANA = 32919\nVENDOR_ID_ETSA = 32920\nVENDOR_ID_ORBIS_TECHNOLOGY_LTD = 32921\nVENDOR_ID_VERATHON = 32922\nVENDOR_ID_ALASTAIR_CARR = 32923\nVENDOR_ID_MENTURAGROUP_LTD = 32924\nVENDOR_ID_TRECK_INC = 32925\nVENDOR_ID_WEBONYX = 32926\nVENDOR_ID_UNLABELED_ARTISTS_GROUP_LLC = 32927\nVENDOR_ID_BRIGHTHOUSE = 32928\nVENDOR_ID_SQUAREWAVE_COMPUTING = 32929\nVENDOR_ID_WOLFGANG_KARALL_EDV_CONSULTING_AND_TRAINING = 32930\nVENDOR_ID_TOTEC_AMENITY_LIMITED_FORMERLY_EASYNET_INC = 32931\nVENDOR_ID_DIRECT_TELECOM_LTD = 32932\nVENDOR_ID_CONDUCT_AS = 32933\nVENDOR_ID_INSTITUTE_OF_BIOPHYSICS_AS_CR_VVI = 32934\nVENDOR_ID_AMALTO_TECHNOLOGIES = 32935\nVENDOR_ID_ATELIER_DECORA = 32936\nVENDOR_ID_UMA_INFORMATION_TECHNOLOGY_GMBH = 32937\nVENDOR_ID_SERVER_RACKS_AUSTRALIA = 32938\nVENDOR_ID_FACHHOCHSCHULE_HANNOVER = 32939\nVENDOR_ID_NCC_AB = 32940\nVENDOR_ID_AZETSK_AS = 32941\nVENDOR_ID_VOLTAGE_SECURITY = 32942\nVENDOR_ID_HEXIOS = 32943\nVENDOR_ID_DRS4DRS = 32944\nVENDOR_ID_NORSK_ESPORT_DA = 32945\nVENDOR_ID_MANUEL_MEISTROWITZ = 32946\nVENDOR_ID_NUCLEMED_SA = 32947\nVENDOR_ID_UNIFIRST_CORPORATION = 32948\nVENDOR_ID_SUNWATER = 32949\nVENDOR_ID_MEUCCI_SOLUTIONS = 32950\nVENDOR_ID_WELLSEEING_COMMUNICATION_TECHNOLOGY_COLTD = 32951\nVENDOR_ID_PHEENET_TECHNOLOGY_CORP = 32952\nVENDOR_ID_YACOUB_AUTOMATIOM_GMBH = 32953\nVENDOR_ID_MATRIX_SPA = 32954\nVENDOR_ID_HRVATSKE_SUME_DOO = 32955\nVENDOR_ID_IPCTNET = 32956\nVENDOR_ID_IN_SWITCH_SOLUTIONS = 32957\nVENDOR_ID_YMMV_LLP = 32958\nVENDOR_ID_AUDIT_BUREAU_QATAR = 32959\nVENDOR_ID_RINGSTED_KOMMUNE = 32960\nVENDOR_ID_KBC_CONSUMER_FINANCE = 32961\nVENDOR_ID_BEIJING_GEFEI_TECH_CO_LTD = 32962\nVENDOR_ID_TAEKJIN_SOLUTIONS = 32963\nVENDOR_ID_BRAND_UP_LLC = 32964\nVENDOR_ID_REAL_SOLUTIONS_SA = 32965\nVENDOR_ID_ESPIDA_LIMITED = 32966\nVENDOR_ID_CENTRO_DE_TECNOLOGIA_DA_INFORMAO_RENATO_ARCHER = 32967\nVENDOR_ID_HELIX_SOFTWARE_SUPPORT_GMBH = 32968\nVENDOR_ID_ODIN_TELESYSTEMS_INC = 32969\nVENDOR_ID_CALTHA_KRZEWSKI_MACH_POTEMPSKI_SP_J = 32970\nVENDOR_ID_MUZICALL = 32971\nVENDOR_ID_TRANSWORKS_INC = 32972\nVENDOR_ID_POPPL_INTERNETOWE_SYSTEMY_SIECIOWE = 32973\nVENDOR_ID_STIMULUS_SOFTWARE = 32974\nVENDOR_ID_CIRCLESOFT_LLC = 32975\nVENDOR_ID_HYC_AMRICAS = 32976\nVENDOR_ID_TELOIP = 32977\nVENDOR_ID_INTELLIDOT_CORPORATION = 32978\nVENDOR_ID_XIX = 32979\nVENDOR_ID_HITACHI_SYSTEMS_ENGINEERING_SERVICES_LTD_FORMERLY_HITACHI_SYSTEMS_ENGINEERING_AND_SOLUTIONS_LTD = 32980\nVENDOR_ID_ARCADYAN_TECHNOLOGY_CORPORATION = 32981\nVENDOR_ID_TRENDS_TELEMATICS_BV = 32982\nVENDOR_ID_OPEN_COMPUTING_SOLUTIONS = 32983\nVENDOR_ID_ADVANTAGE_TELECOM = 32984\nVENDOR_ID_PHILIPS_ELECTRONICS_ISRAEL_LTD_PHILIPS_HEALTHCARE = 32985\nVENDOR_ID_KOMMUNIK8_INC = 32986\nVENDOR_ID_BARROWA = 32987\nVENDOR_ID_DOTT_GIULIMONDI_GABRIELE = 32988\nVENDOR_ID_IN_VOLV = 32989\nVENDOR_ID_PRAHM_IT_SYSTEMDIENSTLEISTUNGEN = 32990\nVENDOR_ID_DIXCZ = 32991\nVENDOR_ID_LADAVACOM = 32992\nVENDOR_ID_OPENSAF_FOUNDATION = 32993\nVENDOR_ID_STANDINGSTONE = 32994\nVENDOR_ID_VENDIO_SERVICES_INC = 32995\nVENDOR_ID_GOURMET_NAVIGATOR_INCORPORATED = 32996\nVENDOR_ID_TUIJNMAN_PROFESSIONAL_SERVICES = 32997\nVENDOR_ID_SHANGHAI_DAREGLOBAL_TECHNOLOGIES_COLTD = 32998\nVENDOR_ID_AIR_TRANSPORTATION_ADVANCEMENT_PROGRAM = 32999\nVENDOR_ID_ZEON_CORPORATION = 33000\nVENDOR_ID_MICRO_TALK_SYSTEMS_CORP = 33001\nVENDOR_ID_OPEN_END_AB = 33002\nVENDOR_ID_SHENZHEN_GONGJIN_ELECTRONICS_COLTD = 33003\nVENDOR_ID_UNIVERSAL_SCIENTIFIC_INDUSTRIAL_SHANGHAI_CO_LTD = 33004\nVENDOR_ID_ARTIO_OY = 33005\nVENDOR_ID_MGB_TECH_BVBA = 33006\nVENDOR_ID_SCHOENHOFER_SALES_AND_ENGINEERING_GMBH = 33007\nVENDOR_ID_TV_2 = 33008\nVENDOR_ID_STADTVERWALTUNG_MANNHEIM = 33009\nVENDOR_ID_IRB_BARCELONA = 33010\nVENDOR_ID_DIGITAL_PERFORMANCE = 33011\nVENDOR_ID_FASTFOOD_SERVICE_LTD = 33012\nVENDOR_ID_NEXAIRA_INC = 33013\nVENDOR_ID_NETWORK_ZEN = 33014\nVENDOR_ID_EMILIE_MYERS_AND_ASSOCIATES = 33015\nVENDOR_ID_AJUNTAMENT_DE_BARCELONA = 33016\nVENDOR_ID_MOBITO_INC = 33017\nVENDOR_ID_PILIN_ECHTARNET = 33018\nVENDOR_ID_HUNTSVILLE_HOSPITAL = 33019\nVENDOR_ID_REBEL_2000_LIMITED = 33020\nVENDOR_ID_WFG_PARTICIPAES_SA = 33021\nVENDOR_ID_SIMON_STOLLE_GBR = 33022\nVENDOR_ID_EOOS_TECHNOLOGIES_GMBH = 33023\nVENDOR_ID_LENOVO_CHINAWEAL_SYSTEM_SERVICE_COLTD = 33024\nVENDOR_ID_ATLANTA_ADVANCED_COMMUNICATIONS_HOLDINGS_LIMITED = 33025\nVENDOR_ID_POSITIVE_ADVISORY_SA = 33026\nVENDOR_ID_CAJA_DE_AHORROS_DE_GALICIA = 33027\nVENDOR_ID_PRASSEL_SRL = 33028\nVENDOR_ID_CJSC_BORISOGLEBSK_COMMUNICATION_SYSTEM = 33029\nVENDOR_ID_TIMICO_LTD = 33030\nVENDOR_ID_CGCAS = 33031\nVENDOR_ID_CTP_GMBH = 33032\nVENDOR_ID_PROBABILITY_PLC = 33033\nVENDOR_ID_TALEO_INC = 33034\nVENDOR_ID_INGENIUS_SOFTWARE = 33035\nVENDOR_ID_A_KRANKENHAUS_DER_ELISABETHINEN_LINZ = 33036\nVENDOR_ID_BROADCAST_INTERNATIONAL = 33037\nVENDOR_ID_FLUOR_CORPORATION = 33038\nVENDOR_ID_ADAPT4_LLC = 33039\nVENDOR_ID_BEATLENET_LTD = 33040\nVENDOR_ID_ZEIT_VERLAG_GERD_BUCERIUS_GMBH_CO_KG = 33041\nVENDOR_ID_BITRAUSCH = 33042\nVENDOR_ID_SHARED_AUTONOMOUS_SYSTEMS = 33043\nVENDOR_ID_MANTICA_SOLUTIONS_SL = 33044\nVENDOR_ID_JINPENG = 33045\nVENDOR_ID_NEXTWERK_IT_SERVICES_GMBH = 33046\nVENDOR_ID_FREIFUNK_POTSDAM_EV = 33047\nVENDOR_ID_BRAND = 33048\nVENDOR_ID_MELLANOX_TECHNOLOGIES_LTD = 33049\nVENDOR_ID_CHINA_IWNCOMM_CO_LTD = 33050\nVENDOR_ID_FLYKERNEL = 33051\nVENDOR_ID_DHYAN_INFOTECH_INC = 33052\nVENDOR_ID_VIALIS_BV = 33053\nVENDOR_ID_IPLON_GMBH_THE_INFRANET_COMPANY = 33054\nVENDOR_ID_VAN_DIJK_EDUCATIE_BV = 33055\nVENDOR_ID_CAMBRIDGE_RESEARCH_SYSTEMS_LTD = 33056\nVENDOR_ID_CRISOL_DE_FRUTOS_SECOS_SAT = 33057\nVENDOR_ID_STRATUS_TELECOMMUNICATIONS = 33058\nVENDOR_ID_MOBITRUM = 33059\nVENDOR_ID_INTERNATIONAL_COMPUTER_SCIENCE_INSTITUTE = 33060\nVENDOR_ID_UNIVERSITY_OF_SHANGHAI_FOR_SCIENCE_TECHNOLOGY = 33061\nVENDOR_ID_NETVISION_TELECOM_INC = 33062\nVENDOR_ID_DVN_TECHNOLOGY_LIMITED = 33063\nVENDOR_ID_A2B_ELECTRONICS_AB = 33064\nVENDOR_ID_CERTICON_AS = 33065\nVENDOR_ID_SMARTSYNCH_INC = 33066\nVENDOR_ID_LAKE_CUMBERLAND_DISTRICT_HEALTH_DEPARTMENT = 33067\nVENDOR_ID_F2WARE_INC = 33068\nVENDOR_ID_GRIESHABER_LOGISTIK_AG = 33069\nVENDOR_ID_ALKALOID_NETWORKS_LLC = 33070\nVENDOR_ID_BBMS_AS = 33071\nVENDOR_ID_SUBSIST_GMBH = 33072\nVENDOR_ID_SYSTEM_ANALYSIS_AND_INFORMATION_TECHNOLOGIES_CONFERENCE = 33073\nVENDOR_ID_ORYX_MAIL_SYSTEMS_GMBH = 33074\nVENDOR_ID_LINUX_SYSTEME_THOMAS = 33075\nVENDOR_ID_SCORE42_SAS_FORMERLY_VIRTUAL_INTERNET_SERVICE_PROVIDER = 33076\nVENDOR_ID_INFORMSVYAZSTROI_LTD = 33077\nVENDOR_ID_GANYMEADE_SYSTEMS = 33078\nVENDOR_ID_EMBLACOM_OY = 33079\nVENDOR_ID_DREXLER_HARD_UND_SOFTWARE_EK = 33080\nVENDOR_ID_KOGAN = 33081\nVENDOR_ID_ZOZSSE = 33082\nVENDOR_ID_SEAFREEZE_ACQUISITION_LLC = 33083\nVENDOR_ID_BOX_AND_DICE_SOFTWARE_PTY_LTD = 33084\nVENDOR_ID_MUELLER_LTD_CO_KG = 33085\nVENDOR_ID_IMS_INFO_MANAGEMENT_SYSTEM_AG = 33086\nVENDOR_ID_INTERNATIONAL_SCHOOL_OF_STUTTGART_E_V = 33087\nVENDOR_ID_VERSATILE_KNOWLEDGE_SYSTEM = 33088\nVENDOR_ID_FACHHOCHSCHULE_FR_FFENTLICHE_VERWALTUNG_NRW = 33089\nVENDOR_ID_XXLBOY = 33090\nVENDOR_ID_TCRP = 33091\nVENDOR_ID_OPSOURCE = 33092\nVENDOR_ID_LEXISNEXIS_RIAG = 33093\nVENDOR_ID_NETACTIVE_SYSTEMS_LTD = 33094\nVENDOR_ID_HYTRUST_INC = 33095\nVENDOR_ID_HARD_TO_PORT_PRODUCTIONS = 33096\nVENDOR_ID_ADLIGO_INC = 33097\nVENDOR_ID_GRADIENT_EFFECTS = 33098\nVENDOR_ID_RUDRA_NEVATIA = 33099\nVENDOR_ID_ELITE_SISTEMAS = 33100\nVENDOR_ID_DANUBE_DATA_CENTER_GMBH = 33101\nVENDOR_ID_ENGELSBURG_GYMNIASUM = 33102\nVENDOR_ID_EMISFR = 33103\nVENDOR_ID_KYAPANEL = 33104\nVENDOR_ID_D_NS = 33105\nVENDOR_ID_SOFTBOOKING = 33106\nVENDOR_ID_MEETUP_INC = 33107\nVENDOR_ID_NEXEN_SERVICES_ALTER_WAY_HOSTING = 33108\nVENDOR_ID_CUMQUAT_INFORMATION_TECHNOLOGY_BV = 33109\nVENDOR_ID_ITD_NETWORK_SA = 33110\nVENDOR_ID_DICKICHTORG_GBR_RAGNAR_NEVRIES_ROBERT_WALTEMATH = 33111\nVENDOR_ID_VIDIENT_SYSTEMS_INC = 33112\nVENDOR_ID_FXHOME = 33113\nVENDOR_ID_MARICOPA_COUNTY_COMMUNITY_COLLEGE_DISTRICT = 33114\nVENDOR_ID_SHAMIR_SYSTEMS_LTD = 33115\nVENDOR_ID_SOLVO_LTD = 33116\nVENDOR_ID_LINUXENSE_INFORMATION_SYSTEMS_PVT_LTD = 33117\nVENDOR_ID_FREESCALE_SEMICONDUCTOR = 33118\nVENDOR_ID_ALTASTREAM_CONTROLS_INC = 33119\nVENDOR_ID_EZ_SYSTEMS = 33120\nVENDOR_ID_TADCOM_AB = 33121\nVENDOR_ID_VESTMARK_INC = 33122\nVENDOR_ID_PROTEL_COMMUNICATIONS_LTD = 33123\nVENDOR_ID_ASKING_CO_LTD = 33124\nVENDOR_ID_PRECISE_POWER_INC = 33125\nVENDOR_ID_DATASOFT_CORP = 33126\nVENDOR_ID_DIALOG_UND_MEDIEN_AGENTUR_DER_ACS_MBH = 33127\nVENDOR_ID_SEMPERIAN_CAPITAL_MANAGEMENT = 33128\nVENDOR_ID_ENTEREST_GMBH = 33129\nVENDOR_ID_VIRTUAL_INSTRUMENTS_CORPORATION = 33130\nVENDOR_ID_DREXEL_UNIVERSITY = 33131\nVENDOR_ID_LICHTI_GBR = 33132\nVENDOR_ID_DAEDALUS_SOFTWARE_INC = 33133\nVENDOR_ID_LS_INDUSTRIAL_SYSTEMS_COLTD = 33134\nVENDOR_ID_PEAKSYSTEMS = 33135\nVENDOR_ID_ELPRO_VIDEOLABS_SRL = 33136\nVENDOR_ID_JIGAR = 33137\nVENDOR_ID_TENA_SDA = 33138\nVENDOR_ID_5GBITDE = 33139\nVENDOR_ID_THEBSIDE = 33140\nVENDOR_ID_E_RANK_INTERNETDIENSTEN = 33141\nVENDOR_ID_MANUEL_KOBASHIGAWA = 33142\nVENDOR_ID_CLIPSAL_AUSTRALIA_PTY_LTD = 33143\nVENDOR_ID_KITTEN_WRANGLERS_UNLIMITED = 33144\nVENDOR_ID_DIGIVISION_ENTERTAINMENT_PRIVATE_LIMITED = 33145\nVENDOR_ID_STIFTUNG_NIKOLAUSPFLEGE = 33146\nVENDOR_ID_OLIVIER_BONHOMME = 33147\nVENDOR_ID_BRITISH_COLUMBIA_WIRELESS_NETWORK_SOCIETY = 33148\nVENDOR_ID_DEFINING_TECHNOLOGY_INC = 33149\nVENDOR_ID_SILMARILLIEU = 33150\nVENDOR_ID_CAIL_TECHNOLOGIES = 33151\nVENDOR_ID_ASIC_NORTH_INC = 33152\nVENDOR_ID_TELEDNA_COMMUNICATIONS_PVT_LTD = 33153\nVENDOR_ID_NPO_IMPULS = 33154\nVENDOR_ID_CODE_JAWA = 33155\nVENDOR_ID_MONSTERNETT_AS = 33156\nVENDOR_ID_FQDN_DOT_RO = 33157\nVENDOR_ID_AK_OBS_LTD = 33158\nVENDOR_ID_AGS_INFORMATIQUE = 33159\nVENDOR_ID_THE_INVARIANT_AUTOCRACY = 33160\nVENDOR_ID_WWWLIBVOIPCOM = 33161\nVENDOR_ID_DCS_INTERNET_PTY_LIMITED = 33162\nVENDOR_ID_GUNDERSEN_LUTHERAN = 33163\nVENDOR_ID_DATAHOUSE_AG = 33164\nVENDOR_ID_MINDS_MACHINES = 33165\nVENDOR_ID_FIASKO_SOFTWARE = 33166\nVENDOR_ID_TRUSTED_LOGIC = 33167\nVENDOR_ID_MLIFE_SP_Z_OO = 33168\nVENDOR_ID_VIA_VOX_LIMITED = 33169\nVENDOR_ID_INTERNATIONAL_FINANCIAL_DATA_SERVICES_CANADA_LTD = 33170\nVENDOR_ID_HELIKA_AS = 33171\nVENDOR_ID_NETCLEAN_TECHNOLOGIES_SWEDEN_AB = 33172\nVENDOR_ID_ANNIDIS_HEALTH_SYSTEMS_CORP = 33173\nVENDOR_ID_COMM_CONNECT_A_S = 33174\nVENDOR_ID_ZIEHL_INDUSTRIE_ELEKTRONIK_GMBHCO_KG = 33175\nVENDOR_ID_RAMBLA = 33176\nVENDOR_ID_RADIATION_ONCOLOGY_VICTORIA = 33177\nVENDOR_ID_JILIN_UNIVERSITY = 33178\nVENDOR_ID_OMOD = 33179\nVENDOR_ID_PAYLIFE_BANK_GMBH = 33180\nVENDOR_ID_LASELEC_SA = 33181\nVENDOR_ID_ADVANCED_NETWORK_ENGINEERING_CONSULTANTS_LIMITED = 33182\nVENDOR_ID_SYSTEMSPROMAUTOMATIC = 33183\nVENDOR_ID_ASIARF_LTD = 33184\nVENDOR_ID_JPS_NETWORKS = 33185\nVENDOR_ID_DATA_ROBOTICS_INC = 33186\nVENDOR_ID_COMMISSION_DE_LA_SANT_ET_DE_LA_SCURIT_DU_TRAVAIL_CSST = 33187\nVENDOR_ID_DANS_DATA_ARCHIVING_AND_NETWORKED_SERVICES = 33188\nVENDOR_ID_DROPLET_TECHNOLOGY_INC = 33189\nVENDOR_ID_PETROLEUM_DEVELOPMENT_OMAN_LLC = 33190\nVENDOR_ID_EQUINE_TECHNOLOGY_PTE_LTD = 33191\nVENDOR_ID_UNIVERSITY_OF_ILINA = 33192\nVENDOR_ID_POWERCOM_CONSULTANTS_PTY_LTD = 33193\nVENDOR_ID_KREDITOR_EUROPE_AB = 33194\nVENDOR_ID_BIMASH_LLP = 33195\nVENDOR_ID_VITA = 33196\nVENDOR_ID_WIT = 33197\nVENDOR_ID_SISCA = 33198\nVENDOR_ID_TERRATEL_LLC = 33199\nVENDOR_ID_GELBER_GROUP_LLC = 33200\nVENDOR_ID_3F_ELETTRONICA_SNC = 33201\nVENDOR_ID_ASUMO_CO_LTD = 33202\nVENDOR_ID_SENSIMESH_PTE_LTD = 33203\nVENDOR_ID_SPRILLION_TECHNOLOGIES = 33204\nVENDOR_ID_ELMAN_SRL = 33205\nVENDOR_ID_AQUEOUSLIFE = 33206\nVENDOR_ID_CEJIL_CENTER_FOR_JUSTICE_AND_INTERNATIONAL_LAW = 33207\nVENDOR_ID_AMB_CONSULTING_SARL = 33208\nVENDOR_ID_DICH_NETWORKS_CO = 33209\nVENDOR_ID_QVANTEL = 33210\nVENDOR_ID_WESTMINSTER_COLLEGE_2 = 33211\nVENDOR_ID_RTZER_ENGINEERING = 33212\nVENDOR_ID_MOELLER_GMBH = 33213\nVENDOR_ID_IPBFR = 33214\nVENDOR_ID_SWISSCANTO_ASSETMANAGEMENT_AG = 33215\nVENDOR_ID_DR_AUGUST_OETKER_NAHRUNGSMITTEL_KG = 33216\nVENDOR_ID_ACCESSEC_GMBH = 33217\nVENDOR_ID_POLAR_CIRCLE_AS = 33218\nVENDOR_ID_CAUSATA_LTD = 33219\nVENDOR_ID_NETFONDS_BANK_ASA = 33220\nVENDOR_ID_INSUMO_SYSTEMS = 33221\nVENDOR_ID_INECOIEC = 33222\nVENDOR_ID_AERO_INFO_TECHNOLOGIES_COLTD = 33223\nVENDOR_ID_CJSC_ROSTA = 33224\nVENDOR_ID_OBELUX_OY = 33225\nVENDOR_ID_INLINE_INTERNET_ONLINE_DIENSTE_GMBH = 33226\nVENDOR_ID_PROMINET_SRO = 33227\nVENDOR_ID_AARENET_AG = 33228\nVENDOR_ID_COMUNICI_GMBH = 33229\nVENDOR_ID_BLUELOOP_LTD = 33230\nVENDOR_ID_AVL_TECHNOLOGIES = 33231\nVENDOR_ID_STDERRNL = 33232\nVENDOR_ID_ALERT_LIFE_SCIENCES_COMPUTING_SA = 33233\nVENDOR_ID_HALON_SECURITY = 33234\nVENDOR_ID_DATAHACK = 33235\nVENDOR_ID_AMTRON_GMBH = 33236\nVENDOR_ID_AUTHERNATIVE_INC = 33237\nVENDOR_ID_REACHLOCAL_INC = 33238\nVENDOR_ID_ACTIVE_CONTROL_TECHNOLOGY_INC = 33239\nVENDOR_ID_SALAMANDER_TECHNOLOGIES_INC = 33240\nVENDOR_ID_CITIZEN_SYSTEMS_JAPAN_CO_LTD = 33241\nVENDOR_ID_PANTEK = 33242\nVENDOR_ID_CHINA_BROADBAND_WIRELESS_IP_STANDARD_GROUP = 33243\nVENDOR_ID_WILLIAM_DEMANT_HOLDING = 33244\nVENDOR_ID_KAFCZ = 33245\nVENDOR_ID_UAB_PIVOT_CAPITAL_MANAGEMENT = 33246\nVENDOR_ID_DATON_SECURITIES_CO_LTD = 33247\nVENDOR_ID_RADIX_DEVELOPMENT_CORPORATION_CC = 33248\nVENDOR_ID_BIWORK_SRL = 33249\nVENDOR_ID_SMURFITKAPPA_NEWS_PRESS = 33250\nVENDOR_ID_REASON_TECNOLOGIA_SA = 33251\nVENDOR_ID_FLASHLIGHT_ENGINEERING_CONSULTING = 33252\nVENDOR_ID_MIS_INC = 33253\nVENDOR_ID_TIMEDATA_CORPORATION = 33254\nVENDOR_ID_KENTUCKY_CHRISTIAN_UNIVERSITY = 33255\nVENDOR_ID_SMALL_OFFICE_NETWORKS = 33256\nVENDOR_ID_DIENSTE_FUER_MENSCHEN_GGMBH = 33257\nVENDOR_ID_DZHON_PTY_LTD_FORMERLY_MOSAIS_PTY_LTD = 33258\nVENDOR_ID_MARTIN_DIVIAIO = 33259\nVENDOR_ID_TRIESCOM_CO_LTD = 33260\nVENDOR_ID_RESILANS_AB = 33261\nVENDOR_ID_JGER_COMPUTERGESTEUERTE_MESSTECHNIK_GMBH = 33262\nVENDOR_ID_RAIFFEISENVERBAND_SUEDTIROL_GEN = 33263\nVENDOR_ID_EPI_SERVICE_LTD = 33264\nVENDOR_ID_ROBERT_RHEA_PHOTOGRAPHY = 33265\nVENDOR_ID_ISOMEDIA_INC = 33266\nVENDOR_ID_THE_SPACEPOL_CORPORATION = 33267\nVENDOR_ID_CLEARTECH_LTDA = 33268\nVENDOR_ID_ECESSA_CORPORATION = 33269\nVENDOR_ID_SYSMAP_SOLUTIONS = 33270\nVENDOR_ID_BAPTIST_CARE_SA_INC = 33271\nVENDOR_ID_MED_RT_LLC = 33272\nVENDOR_ID_GOMEZ_ASSOCIATES = 33273\nVENDOR_ID_NESTLE_WATERS_NORTH_AMERICA = 33274\nVENDOR_ID_THE_HUTCHINS_SCHOOL = 33275\nVENDOR_ID_KDN_KOREA_ELECTRIC_POWER_DATA_NETWORK = 33276\nVENDOR_ID_PFIFFNER_GRUPPE = 33277\nVENDOR_ID_CONFIDENT_INSTRUMENTS_INC = 33278\nVENDOR_ID_MAZIOLI_LTDA_ME = 33279\nVENDOR_ID_OWFS_ONE_WIRE_FILESYSTEM = 33280\nVENDOR_ID_NEW_DREAM_NETWORK = 33281\nVENDOR_ID_EASTERN_OREGON_UNIVERSITY = 33282\nVENDOR_ID_AN_DCZ = 33283\nVENDOR_ID_MACQUARIE_GROUP_LIMITED = 33284\nVENDOR_ID_NAVSTAR_GEOMATICS_LTD = 33285\nVENDOR_ID_KIPAC = 33286\nVENDOR_ID_EPIX_LLC = 33287\nVENDOR_ID_GEVAS_SOFTWARE_GMBH = 33288\nVENDOR_ID_METALOR = 33289\nVENDOR_ID_BUNDESVERFASSUNGSGERICHT = 33290\nVENDOR_ID_MICROVIDEO_LTD = 33291\nVENDOR_ID_FORDHAM_UNIVERSITY = 33292\nVENDOR_ID_JENKINS_SHIPPING_COMPANY_LTD = 33293\nVENDOR_ID_LINCOR_SOLUTIONS_LTD = 33294\nVENDOR_ID_GEORG_UTZ_INC = 33295\nVENDOR_ID_LEPOMISLAB_LLC = 33296\nVENDOR_ID_ARION_SYSTEMS_PVT_LTD = 33297\nVENDOR_ID_WIKIMEDIA_FOUNDATION_INC = 33298\nVENDOR_ID_ITHOS_USA = 33299\nVENDOR_ID_LINKARE_TI = 33300\nVENDOR_ID_MEE_IT_SOLUTIONS_COLTD = 33301\nVENDOR_ID_TRIO_DATACOM = 33302\nVENDOR_ID_DANNATU_AG = 33303\nVENDOR_ID_EUDOXESOFT_SARL = 33304\nVENDOR_ID_ARK_COMPUTING = 33305\nVENDOR_ID_TELEMAQUE = 33306\nVENDOR_ID_ST_JUDE_CHILDRENS_RESEARCH_HOSPITAL = 33307\nVENDOR_ID_DATACODE_SRL = 33308\nVENDOR_ID_AOCHUANG_ELECTRONIC_EQUIPMENT_COLTD = 33309\nVENDOR_ID_ZMC_ELEKTRONIKA_DOO = 33310\nVENDOR_ID_EVEREST_SOFTWARE_INTERNATIONAL = 33311\nVENDOR_ID_FORENET_INC = 33312\nVENDOR_ID_SOEKUL_LLC = 33313\nVENDOR_ID_SERVICIO_NACIONAL_DE_REHABILITACIN = 33314\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_INFORMATIK = 33315\nVENDOR_ID_GOVERNMENT_OF_SASKATCHEWAN = 33316\nVENDOR_ID_INCITS_TECHNICAL_COMMITTEE_T11 = 33317\nVENDOR_ID_AIDS_LAW_PROJECT = 33318\nVENDOR_ID_TECHNISCHE_UNIVERSITT_KAISERSLAUTERN = 33319\nVENDOR_ID_SKARVON = 33320\nVENDOR_ID_TRADESMEN_INTERNATIONAL_INC = 33321\nVENDOR_ID_PROGRESS_FINANCIAL = 33322\nVENDOR_ID_CHAOS_ETERNAL_NETWORK = 33323\nVENDOR_ID_ISTOCHNIK_LTD = 33324\nVENDOR_ID_MSB_MICRO_SYSTEMS = 33325\nVENDOR_ID_PERTUS = 33326\nVENDOR_ID_ZIP_SISTEMAS_SL = 33327\nVENDOR_ID_NETART_PIOTR_NOWAK = 33328\nVENDOR_ID_ENCODE_NETWORKS_SVENSKA_AB = 33329\nVENDOR_ID_RELEVANTUM_OY = 33330\nVENDOR_ID_BALANCE_NETWORK_CO_LTD = 33331\nVENDOR_ID_CITY_OF_EDMONTON = 33332\nVENDOR_ID_MORNINGSTAR_CORPORATION = 33333\nVENDOR_ID_STEALTHBITS_TECHNOLOGIES_INC = 33334\nVENDOR_ID_TRUEOFFICE = 33335\nVENDOR_ID_KAT5DESIGN = 33336\nVENDOR_ID_ELINEIS = 33337\nVENDOR_ID_COMKOM_GMBH = 33338\nVENDOR_ID_THE_CHARITY_BUS = 33339\nVENDOR_ID_FUNDACIO_PRIVADA_UNIVERSITAT_ABAT_OLIBA_CEU = 33340\nVENDOR_ID_BEIJING_TONGFANG_GIGAMEGA_TECH_CO_LTD = 33341\nVENDOR_ID_U_BLOX_AG = 33342\nVENDOR_ID_STOREBRAND_ASA = 33343\nVENDOR_ID_SC_GARANT_INDUSTRIES_SRL = 33344\nVENDOR_ID_BRANDED_PAYMENT_SOLUTIONS = 33345\nVENDOR_ID_CONSEIL_GNRAL_DES_PYRNES_ATLANTIQUES = 33346\nVENDOR_ID_PAPA_JOHNS_INTERNATIONAL_INC = 33347\nVENDOR_ID_VOIDNETBIZ = 33348\nVENDOR_ID_MOHAWK_COLLEGE_OF_APPLIED_ARTS_AND_TECHNOLOGY = 33349\nVENDOR_ID_GALLACCI_COMMUNICATIONS = 33350\nVENDOR_ID_HOSPITAL_SERVICE_ASSOCIATION_OF_NORTHEASTERN_PENNSYLVANIA = 33351\nVENDOR_ID_MAX_TECHNOLOGIES = 33352\nVENDOR_ID_2RING = 33353\nVENDOR_ID_KAASJAGER_CONSULTANCY = 33354\nVENDOR_ID_OZEKI_INFORMATICS_LTD = 33355\nVENDOR_ID_HEADJAPAN_COLTD = 33356\nVENDOR_ID_TWINSEC_GMBH = 33357\nVENDOR_ID_APPLIANSYS_LTD = 33358\nVENDOR_ID_VUT_GMBH = 33359\nVENDOR_ID_KAHAF_PVT_LTD = 33360\nVENDOR_ID_CURSUM = 33361\nVENDOR_ID_DATASCHENK_INC = 33362\nVENDOR_ID_DUFF_PHELPS_LLC = 33363\nVENDOR_ID_GINKGOTEK = 33364\nVENDOR_ID_EDELBLUTH_ENGINEERING = 33365\nVENDOR_ID_COLUMBIA_DATA_PRODUCTS_INC = 33366\nVENDOR_ID_VIRTUALMGS = 33367\nVENDOR_ID_VTRON_TECHNOLOGIES_LTD = 33368\nVENDOR_ID_SINO_TELECOM_TECHNOLOGY_COLTD = 33369\nVENDOR_ID_ERASMUS_MC_ROTTERDAM = 33370\nVENDOR_ID_KELKOO = 33371\nVENDOR_ID_INFOCARE_AS = 33372\nVENDOR_ID_ZEROPOINTIT = 33373\nVENDOR_ID_SFPROJECTS = 33374\nVENDOR_ID_DALEE_LLC = 33375\nVENDOR_ID_ARGEON_LIMITED = 33376\nVENDOR_ID_PAUL_ARMSTRONG = 33377\nVENDOR_ID_ZETTA_INC = 33378\nVENDOR_ID_KLABS = 33379\nVENDOR_ID_ICS_COMPUTER_SERVICES_SA = 33380\nVENDOR_ID_DVS_DIGITAL_VIDEO_SYSTEMS_AG = 33381\nVENDOR_ID_CHILLYWEB = 33382\nVENDOR_ID_AUDISOFT_TECHNOLOGIES = 33383\nVENDOR_ID_ESATURNUS = 33384\nVENDOR_ID_FEEVA_TECHNOLOGY_INC = 33385\nVENDOR_ID_HYPER9 = 33386\nVENDOR_ID_SS7_SOLUTIONS = 33387\nVENDOR_ID_INCASE_SVEN_MUELLER = 33388\nVENDOR_ID_KEYBOARD_MONKEYS_LTD = 33389\nVENDOR_ID_CORMEDICA = 33390\nVENDOR_ID_OSI_DOO = 33391\nVENDOR_ID_SOURCE_ALLIES_INC = 33392\nVENDOR_ID_C_NET_INFORMATION_TECHNOLOGY_LTD = 33393\nVENDOR_ID_MIO_SOFTWARE_LABORATORY_INC = 33394\nVENDOR_ID_WASHINGTON_STATE_DEPARTMENT_OF_INFORMATION_SERVICES = 33395\nVENDOR_ID_FERPA_CONSULTORIA_E_SISTEMAS_LTDA = 33396\nVENDOR_ID_CREAPPTIVE_LIMITED = 33397\nVENDOR_ID_TRAFFIC_MANAGEMENT_TECHNOLOGIES = 33398\nVENDOR_ID_EGYPTION_ROOT_CERTIFICATION_AUTHORITY = 33399\nVENDOR_ID_ANYWIRE_CORPORATION = 33400\nVENDOR_ID_SERVERA_INC = 33401\nVENDOR_ID_QUADRIZEN = 33402\nVENDOR_ID_RADIOCOMP_APS = 33403\nVENDOR_ID_DIPL_ING_CHRISTIAN_LINDEMANN = 33404\nVENDOR_ID_EISST_LIMITED = 33405\nVENDOR_ID_KELLER_WILLIAMS_REALTY_INTL = 33406\nVENDOR_ID_I_EVOLVE = 33407\nVENDOR_ID_BASIS_INTERNATIONAL_LTD = 33408\nVENDOR_ID_THE_CHRONICLE = 33409\nVENDOR_ID_FETAC = 33410\nVENDOR_ID_QNETIC_LTD = 33411\nVENDOR_ID_KOOTENAI_ELECTRIC_COOPERATIVE_INC = 33412\nVENDOR_ID_ADSLWEB_DOT_NET = 33413\nVENDOR_ID_MONITIS_INC = 33414\nVENDOR_ID_N_COM_LP = 33415\nVENDOR_ID_WONDERSGROUP = 33416\nVENDOR_ID_PIN_GMBH = 33417\nVENDOR_ID_RILA_FEINKOST_IMPORTE_GMBH_UND_CO_KG = 33418\nVENDOR_ID_CNSTREAMING_TECHNOLOGIES_CO_LTD = 33419\nVENDOR_ID_VOALTE_INC = 33420\nVENDOR_ID_SOUTH_GLOUCESTERSHIRE_COUNCIL_CYP_ICT = 33421\nVENDOR_ID_COM_NED_NETWERKEN_BV = 33422\nVENDOR_ID_TRIAGNOSYS_GMBH = 33423\nVENDOR_ID_ITXTEND_LLC = 33424\nVENDOR_ID_FORTISBANK_NL_NV = 33425\nVENDOR_ID_MIRAE_IKORN_COMPANY = 33426\nVENDOR_ID_5V_TECHNOLOGIES_LTD = 33427\nVENDOR_ID_TRAKCE_AS = 33428\nVENDOR_ID_MOBILE_EXPERTS_SP_Z_OO = 33429\nVENDOR_ID_LIBRA_SZOFTVER_ZRT = 33430\nVENDOR_ID_OBERFINANZDIREKTION_KARLSRUHE = 33431\nVENDOR_ID_MAHLE_INTERNATIONAL_GMBH = 33432\nVENDOR_ID_INTERWETTEN = 33433\nVENDOR_ID_SDC_SISTEMI_DI_COMPUTER = 33434\nVENDOR_ID_DICAS_DIGITAL_IMAGE_CODING_GMBH = 33435\nVENDOR_ID_LEPIDA_SPA = 33436\nVENDOR_ID_HEIDELBERG_ENGINEERING_GMBH = 33437\nVENDOR_ID_RIPN = 33438\nVENDOR_ID_CENTRALX = 33439\nVENDOR_ID_CENTRO_BRASILEIRO_DE_PESQUISA_E_TECNOLOGIA_EM_INFORMTICA_MDICA = 33440\nVENDOR_ID_SCIENCE_SYSTEMS_AND_APPLICATIONS_INC = 33441\nVENDOR_ID_BERNARDS = 33442\nVENDOR_ID_NOVUS_ENTERTAINMENT_INC = 33443\nVENDOR_ID_OBTELECOM = 33444\nVENDOR_ID_THE_LONDON_LIBRARY = 33445\nVENDOR_ID_RELAY_STATION_LTD = 33446\nVENDOR_ID_COMTECH_LTD = 33447\nVENDOR_ID_CHEMTURA_CORPORATION = 33448\nVENDOR_ID_TIME2DIVE = 33449\nVENDOR_ID_FACULTAD_DE_INGENIERIA_INFORMATICA_CUJAE = 33450\nVENDOR_ID_INFOMED = 33451\nVENDOR_ID_COMSENZLTD = 33452\nVENDOR_ID_POLYLOGICS_CONSULTING_INC = 33453\nVENDOR_ID_NIPPON_SOGO_SYSTEMS_INC = 33454\nVENDOR_ID_BVE_SOLUTIONS = 33455\nVENDOR_ID_DCF_TECHNOLOGIES = 33456\nVENDOR_ID_DANETCZ_SRO = 33457\nVENDOR_ID_COLGIO_SANTO_AGOSTINHO = 33458\nVENDOR_ID_VIVISIMO_INC = 33459\nVENDOR_ID_SEIBERT_MEDIA_GMBH = 33460\nVENDOR_ID_DS_MEDIA_LABS_INC = 33461\nVENDOR_ID_ZMAC1_INC = 33462\nVENDOR_ID_LIMELIGHT_NETWORKS_INC = 33463\nVENDOR_ID_LEO_LAB = 33464\nVENDOR_ID_UNLIMITED_BANDWIDTH_LLC = 33465\nVENDOR_ID_KADEO_PTY_LTD = 33466\nVENDOR_ID_CYPROTEX = 33467\nVENDOR_ID_FUTURE_SKIES = 33468\nVENDOR_ID_PRODUBAN_SERVICIOS_INFORMATICOS_GENERALES = 33469\nVENDOR_ID_VISTA_SYSTEMS_CORP = 33470\nVENDOR_ID_ALEKSTRA_OY = 33471\nVENDOR_ID_SITTIG_INDUSTRIE_ELEKTRONIK_GMBH_CO_KG = 33472\nVENDOR_ID_DATAMAN_INTERNATIONAL_BV = 33473\nVENDOR_ID_REGEX = 33474\nVENDOR_ID_BOTSWANA_POWER_CORPORATION = 33475\nVENDOR_ID_KITTELBERGER_MEDIA_SOLUTIONS_GMBH = 33476\nVENDOR_ID_SOMMER_MESS_SYSTEMTECHNIK = 33477\nVENDOR_ID_ASERVA_GMBH = 33478\nVENDOR_ID_TRADINGSCREEN_INC = 33479\nVENDOR_ID_CANADIAN_AUTOMOBILE_ASSOCIATION_SOUTH_CENTRAL_ONTARIO = 33480\nVENDOR_ID_MANUFACTURING_RESOURCES_INTERNATIONAL = 33481\nVENDOR_ID_MANAGEIQ_INC = 33482\nVENDOR_ID_GOLDFLOWER_INCORPORATED = 33483\nVENDOR_ID_INITECH_SRO = 33484\nVENDOR_ID_CARIBOU_SOFTWARE = 33485\nVENDOR_ID_SILK_INFORMATION_SYSTEMS_INC = 33486\nVENDOR_ID_PACKET_SHIP_TECHNOLOGIES_LIMITED = 33487\nVENDOR_ID_MOANINGMARMOT = 33488\nVENDOR_ID_NERO_NETWORK = 33489\nVENDOR_ID_GENEGO_INC = 33490\nVENDOR_ID_MALVINY_INTERNATIONAL = 33491\nVENDOR_ID_BROADEX_TECHNOLOGIES_SHANGHAI = 33492\nVENDOR_ID_LOADCOM_TECHNOLOGY_SHENZHEN_CO_LTD = 33493\nVENDOR_ID_SEKOCI_MAJU_JAYA = 33494\nVENDOR_ID_AXPO_INFORMATIK_AG = 33495\nVENDOR_ID_SPURIOUS_LOGIC_TECHNOLOGY_SERVICES = 33496\nVENDOR_ID_VAHNI_SOLUTIONS = 33497\nVENDOR_ID_ANDREW_KIPCHARSKIY = 33498\nVENDOR_ID_KPN_HOTSPOTS = 33499\nVENDOR_ID_VERTEX_ANTENNENTECHNIK_GMBH = 33500\nVENDOR_ID_NOVATICE_TECHNOLOGIES = 33501\nVENDOR_ID_COMUNIDAD_AUTONOMA_REGION_DE_MURCIA = 33502\nVENDOR_ID_HEAVENS_ABOVE_GMBH = 33503\nVENDOR_ID_NARODNI_TECHNICKA_KNIHOVNA = 33504\nVENDOR_ID_TW_TELECOM_INC = 33505\nVENDOR_ID_DASSAULT_SYSTEMES_FORMERLY_ENGINUITY_PLM_LLC = 33506\nVENDOR_ID_ELSTER_ELECTRICITY_LLC = 33507\nVENDOR_ID_AVERE_SYSTEMS_INC = 33508\nVENDOR_ID_SOCIEDAD_HEBRAICA_ARGENTINA = 33509\nVENDOR_ID_PROVINCIAL_HEALTH_SERVICES_AUTHORITY = 33510\nVENDOR_ID_RADIANT_TECHNOLOGIES_INC = 33511\nVENDOR_ID_THEMARKETSCOM_LLC = 33512\nVENDOR_ID_ARVENSIAN = 33513\nVENDOR_ID_LUMANTEK = 33514\nVENDOR_ID_ANTONIO_CUNHA_BARBOSA = 33515\nVENDOR_ID_ZHUHAI_JIASIN_INDUSTRY_CO_LTD = 33516\nVENDOR_ID_SCOURGERNL = 33517\nVENDOR_ID_TAP_BKRUSE_ASSOCIATES_LLC = 33518\nVENDOR_ID_SKYMESH_PTY_LTD = 33519\nVENDOR_ID_MODERN_MODULE_INC = 33520\nVENDOR_ID_IKT_ADVANCED_TECHNOLOGIES_SRO = 33521\nVENDOR_ID_SOIT_GMBH = 33522\nVENDOR_ID_SWORD_REAL_TIME = 33523\nVENDOR_ID_MEASANCTUM = 33524\nVENDOR_ID_BEWIGO_TECHNOLOGIES_SARL = 33525\nVENDOR_ID_DONALDWILSONINFO = 33526\nVENDOR_ID_USDA = 33527\nVENDOR_ID_KRESTFIELD = 33528\nVENDOR_ID_MIDASPLUS_INC = 33529\nVENDOR_ID_EASYWAY = 33530\nVENDOR_ID_DMITRY_KOMARCHEV = 33531\nVENDOR_ID_VALSTS_ROBESARDZE = 33532\nVENDOR_ID_LINKDEVICES_TECHNOLOGY_INC = 33533\nVENDOR_ID_SYSTEMBASE_LIMITED = 33534\nVENDOR_ID_HERNING_KOMMUNE = 33535\nVENDOR_ID_INESC_PORTO = 33536\nVENDOR_ID_BCV_SOLUTIONS_SRO = 33537\nVENDOR_ID_EDX_SOFTWARE_DESIGN = 33538\nVENDOR_ID_EUROPCAR_INFORMATION_SERVICES = 33539\nVENDOR_ID_ION_BEAM_APPLICATIONS = 33540\nVENDOR_ID_W3VARIANCE = 33541\nVENDOR_ID_CBC_COLOGNE_BROADCASTING_CENTER_GMBH = 33542\nVENDOR_ID_UHU_SYSTEMS_KFT = 33543\nVENDOR_ID_TROWE_PRICE = 33544\nVENDOR_ID_ENTELEC_CONTROL_SYSTEMS = 33545\nVENDOR_ID_AXIROS_GMBH = 33546\nVENDOR_ID_LIBERTY_MUTUAL_INSURANCE_COMPANY = 33547\nVENDOR_ID_MANAGED_IT = 33548\nVENDOR_ID_ZNAMINET = 33549\nVENDOR_ID_BIXOLON_CO_LTD = 33550\nVENDOR_ID_DAVID_JONES = 33551\nVENDOR_ID_HIFULL_TECHNOLOGY = 33552\nVENDOR_ID_TBC_SOLUTIONS = 33553\nVENDOR_ID_GENETECH_AB = 33554\nVENDOR_ID_RACOM_SRO = 33555\nVENDOR_ID_HYPERTHOUGHT_SOLUTIONS = 33556\nVENDOR_ID_UNIVERSITY_OF_KENT = 33557\nVENDOR_ID_POWERTRON_ENGINEERING_CO_LTD = 33558\nVENDOR_ID_AXION_RED_DE_BANDA_ANCHA_DE_ANDALUCIA_SA = 33559\nVENDOR_ID_COMMERCIAL_COURT_OF_TULA_REGION = 33560\nVENDOR_ID_EXPRESS_GIFTS_LTD = 33561\nVENDOR_ID_JUDAKO_AB = 33562\nVENDOR_ID_CNEA_REGIONAL_CENTRO = 33563\nVENDOR_ID_MEDIATECH = 33564\nVENDOR_ID_EPIC_EVENT_INTERNATIONAL_PTY_LTD = 33565\nVENDOR_ID_DUBLIN_UNIVERSITY_INTERNET_SOCIETY = 33566\nVENDOR_ID_VIRA_REALTIME_LTD = 33567\nVENDOR_ID_BAKOMA_SA = 33568\nVENDOR_ID_ERG_SPA = 33569\nVENDOR_ID_RENATA_WEB_SYSTEMS = 33570\nVENDOR_ID_MRC_EPIDEMIOLOGY_UNIT = 33571\nVENDOR_ID_EDUCATIONAL_SERVICE_UNIT_10 = 33572\nVENDOR_ID_CORPS_SAXO_MONTANIA = 33573\nVENDOR_ID_WAXTIE = 33574\nVENDOR_ID_INOVATIC_DOO = 33575\nVENDOR_ID_AP_ROUTER_INDUSTRIA_ELETRONICA_LTDA = 33576\nVENDOR_ID_CENIP = 33577\nVENDOR_ID_JASON_B_ALONSO = 33578\nVENDOR_ID_FAIRFIELD_COUNTY_OHIO = 33579\nVENDOR_ID_ANACOM_ELETRNICA_LTDA = 33580\nVENDOR_ID_OPENMIND_SRL = 33581\nVENDOR_ID_ERRIGAL_INC = 33582\nVENDOR_ID_BSOFT = 33583\nVENDOR_ID_ONLLINE_TECHNOLOGIES = 33584\nVENDOR_ID_INTEHEL = 33585\nVENDOR_ID_INSTITUTE_OF_INFORMATION_SCIENCE_BEIJING_JIAOTONG_UNIVERSITY_CHINA = 33586\nVENDOR_ID_PLAYBOX_TECHNOLOGY_LTD = 33587\nVENDOR_ID_AUTEK_INGENIERIA_SL = 33588\nVENDOR_ID_MINISTARSTVO_UNUTRASNJIH_POSLOVA_REPUBLIKE_SRBIJE = 33589\nVENDOR_ID_FALTERMEIER = 33590\nVENDOR_ID_GIE_ASTRIA = 33591\nVENDOR_ID_GRYPHON_TECHNOLOGY_PTY_LTD = 33592\nVENDOR_ID_ERRIGAL_INC_2 = 33593\nVENDOR_ID_DANIEL_HOMMEL = 33594\nVENDOR_ID_SAN_FRANCISCO_STATE_UNIVERSITY = 33595\nVENDOR_ID_ADVENTIST_HEALTH_SYSTEM = 33596\nVENDOR_ID_CLASDIX_SRL = 33597\nVENDOR_ID_ISI_MUENCHEN_LTD = 33598\nVENDOR_ID_DOLF_SYSTEMS = 33599\nVENDOR_ID_OMNICONNECT_PTY_LTD = 33600\nVENDOR_ID_KIRYUNG = 33601\nVENDOR_ID_NORTHSTARLABSNET = 33602\nVENDOR_ID_INFOTECH_ENTERPRISES = 33603\nVENDOR_ID_SARL_LES_CAGOTS = 33604\nVENDOR_ID_SOFT_CONTROL_TECHNOLOGY_SRO = 33605\nVENDOR_ID_HI5_NETWORKS_INC = 33606\nVENDOR_ID_SEECHANGE_HEALTH = 33607\nVENDOR_ID_RIPCODE_INC = 33608\nVENDOR_ID_SOFTTEK = 33609\nVENDOR_ID_FASTIP_LLC = 33610\nVENDOR_ID_TRANSMICRO = 33611\nVENDOR_ID_COM_HEM_AB = 33612\nVENDOR_ID_CRISPYLOGICS = 33613\nVENDOR_ID_DPD_POLSKA_SP_Z_OO = 33614\nVENDOR_ID_CROSS_COUNTRY_AUTOMOTIVE_SERVICES = 33615\nVENDOR_ID_OHIO_SUPERCOMPUTER_CENTER = 33616\nVENDOR_ID_DAVID_KRAEUTMANN = 33617\nVENDOR_ID_NITO_PROGRAMS = 33618\nVENDOR_ID_FREECOMM_DATA_COMMUNICATION_CO_LTD = 33619\nVENDOR_ID_CERTUSNET = 33620\nVENDOR_ID_ASMENS_DOKUMENTU_ISRASYMO_CENTRAS_PRIE_LIETUVOS_RESPUBLIKOS_VIDAUS_REIKALU_MINISTERIJOS = 33621\nVENDOR_ID_4DST_INTERNATIONAL_TELECOMMUNICATIONS_PTY_LTD = 33622\nVENDOR_ID_POKROVSKOE_LTD = 33623\nVENDOR_ID_BEIJING_VBON_SCIENCE_TECHNOLOGY_DEVELOPMENT_COLTD = 33624\nVENDOR_ID_XALLARAPARADIGM = 33625\nVENDOR_ID_REOUEL = 33626\nVENDOR_ID_CODE_DROHNEDE = 33627\nVENDOR_ID_EGYPTION_GOVERNMENT_CERTIFICATION_AUTHORITY = 33628\nVENDOR_ID_T_LINUX_LTD = 33629\nVENDOR_ID_IRIDEA_M_SDN_BHD = 33630\nVENDOR_ID_POCZTA_POLSKA = 33631\nVENDOR_ID_AGNEKO = 33632\nVENDOR_ID_HERMAN_ANDERSSON_OY = 33633\nVENDOR_ID_REALE_SEGUROS_GENERALES = 33634\nVENDOR_ID_RUBY_SYNC = 33635\nVENDOR_ID_TECHNOSEC = 33636\nVENDOR_ID_WALLA_WALLA_UNIVERSITY = 33637\nVENDOR_ID_VOICEBOARD_CORPORATION = 33638\nVENDOR_ID_VESTAS_WIND_SYSTEMS_A_S = 33639\nVENDOR_ID_TCPOS_SA = 33640\nVENDOR_ID_AJIMI = 33641\nVENDOR_ID_DENMARK_FUJITSU_SERVICES_A_S = 33642\nVENDOR_ID_COMGROUP_GMBH = 33643\nVENDOR_ID_SYTEL_LIMITED = 33644\nVENDOR_ID_MKS_INC = 33645\nVENDOR_ID_EXTELIA = 33646\nVENDOR_ID_MASHLAB_HUTHER_SOMMER_GBR = 33647\nVENDOR_ID_IRETH = 33648\nVENDOR_ID_PRAMANA_INC = 33649\nVENDOR_ID_ADACORE_SAS = 33650\nVENDOR_ID_SPARKPLUG_INC = 33651\nVENDOR_ID_COUSTEAU_NETWORK_DEVELOPMENT_LLC = 33652\nVENDOR_ID_OPULAN_TECHNOLOGIES_CORP = 33653\nVENDOR_ID_POSIDEX_TECHONOLOGIES_PVT_LTD = 33654\nVENDOR_ID_OVOCENTRUM_VV_SRO = 33655\nVENDOR_ID_WARDSBACK_BROTHERHOOD = 33656\nVENDOR_ID_HARALD_WRGER = 33657\nVENDOR_ID_VDS_VIDEO_DISPLAY_SYSTEMS_SRL = 33658\nVENDOR_ID_UNIVERSIT_DI_BARI = 33659\nVENDOR_ID_LOWER_COLORADO_RIVER_AUTHORITY = 33660\nVENDOR_ID_LINERATE_SYSTEMS_INC = 33661\nVENDOR_ID_AFRODUCK_PRODUCTIONS = 33662\nVENDOR_ID_MANZ_AUTOMATION_AG = 33663\nVENDOR_ID_CONEI_CIA_INT_DE_INVERSIONES = 33664\nVENDOR_ID_LIVEPERSON = 33665\nVENDOR_ID_STMIK_MIKROSKIL = 33666\nVENDOR_ID_SADA_SYSTEMS_INC_APPS_DIVISION = 33667\nVENDOR_ID_ECTEL_LTD = 33668\nVENDOR_ID_KEVIN_R_JAMES_ENTERPRISE_SERVICES = 33669\nVENDOR_ID_ARCTIC_LAKE = 33670\nVENDOR_ID_HESTIA_FRANCE = 33671\nVENDOR_ID_INTECSOFT_GMBH = 33672\nVENDOR_ID_LACERDA_SISTEMAS_DE_ENERGIA = 33673\nVENDOR_ID_NUVICO = 33674\nVENDOR_ID_ZYDAX_LLC = 33675\nVENDOR_ID_HAPPY_JACK_SOFTWARE_LLC = 33676\nVENDOR_ID_HIWIFI_NETWORKS = 33677\nVENDOR_ID_FHNLE_IT_SOLUTIONS = 33678\nVENDOR_ID_THE_UNIVERSITY_OF_WAIKATO = 33679\nVENDOR_ID_BANKART_DOO = 33680\nVENDOR_ID_DEUTSCHE_PAPIER_VERTRIEBS_GMBH = 33681\nVENDOR_ID_TYZECOM = 33682\nVENDOR_ID_AGILINK_SYSTEMS_CORP = 33683\nVENDOR_ID_ECERN_INC = 33684\nVENDOR_ID_NETGROUP_A_S = 33685\nVENDOR_ID_NETVITESSE_SARL = 33686\nVENDOR_ID_NETAVIS_SOFTWARE_GMBH = 33687\nVENDOR_ID_PACKET_POWER = 33688\nVENDOR_ID_MEDIQ = 33689\nVENDOR_ID_SHENZHEN_ETOPTECH_COLTD = 33690\nVENDOR_ID_MOSTCOM_LTD = 33691\nVENDOR_ID_MEONA_GMBH = 33692\nVENDOR_ID_SMALS = 33693\nVENDOR_ID_KNEXUS_RESEARCH_CORPORATION = 33694\nVENDOR_ID_NATIONAL_OILWELL_VARCO = 33695\nVENDOR_ID_TRULIX_SYSTEMS = 33696\nVENDOR_ID_KLAUS_BECKER_KOPIERSYSTEME_SERVICE_GMBH = 33697\nVENDOR_ID_ACRA_CONTROL_LTD = 33698\nVENDOR_ID_TAG_VIDEO_SYSTEMS = 33699\nVENDOR_ID_SAGINAW_VALLEY_STATE_UNIVERSITY = 33700\nVENDOR_ID_CATHAY_PACIFIC_AIRWAYS_LTD = 33701\nVENDOR_ID_TECHNALOGIX_LTD = 33702\nVENDOR_ID_ZIGGURAT29 = 33703\nVENDOR_ID_MIDDLE_OFFICE_SOLUTIONS_LLC = 33704\nVENDOR_ID_GLOBAL_360_INC = 33705\nVENDOR_ID_OPVISION_TECHNOLOGY_COLTD = 33706\nVENDOR_ID_UNITED_INTERNATIONAL_COLLEGE = 33707\nVENDOR_ID_SPIT_ELEKTROMECHANICA_BV = 33708\nVENDOR_ID_ONTIMELINE = 33709\nVENDOR_ID_TAWASUL_TELECOM = 33710\nVENDOR_ID_CAMPANJA_AB = 33711\nVENDOR_ID_CSC_PYXUS_2006 = 33712\nVENDOR_ID_WB_ELECTRONICS_SP_Z_OO = 33713\nVENDOR_ID_NEURALITIC_SYSTEMS_INC = 33714\nVENDOR_ID_AXCIENT_INCORPORATED = 33715\nVENDOR_ID_JIANGSU_HENGTONG_PHOTOELECTRIC_STOCK_CO_LTD = 33716\nVENDOR_ID_NIRMITSU_TECHNOLOGIES_PRIVATE_LIMITED = 33717\nVENDOR_ID_LAVA_TECH = 33718\nVENDOR_ID_EBU_UER = 33719\nVENDOR_ID_ELTA_SYSTEMS_LTD = 33720\nVENDOR_ID_THRANE_THRANE = 33721\nVENDOR_ID_MC_SECURITY_CO_LTD = 33722\nVENDOR_ID_LAURENTUMDE = 33723\nVENDOR_ID_EBDSOFT = 33724\nVENDOR_ID_BIMENG_COMMUNICATIONS_SYSTEM_COLTD = 33725\nVENDOR_ID_WHITE_SANDS_TECHNOLOGY = 33726\nVENDOR_ID_CAERIAN_INC = 33727\nVENDOR_ID_ADAPTIVE_AI_INC = 33728\nVENDOR_ID_BEIJING_PANNET_INFORMATION_TECHNOLOGY_CO_LTD = 33729\nVENDOR_ID_STEFAN_AULBACH = 33730\nVENDOR_ID_ASITO_BV = 33731\nVENDOR_ID_NETRESULTS_SRL = 33732\nVENDOR_ID_SW_K_SOFTWARE_SYSTEM_ENGINEERING = 33733\nVENDOR_ID_CHINIINFO = 33734\nVENDOR_ID_BUZZLOGIC_INC = 33735\nVENDOR_ID_FYLLERIIS = 33736\nVENDOR_ID_SOPRANO_DESIGN_PTY_LTD = 33737\nVENDOR_ID_ANIMELLIURE = 33738\nVENDOR_ID_ANTRICE_SA = 33739\nVENDOR_ID_INTERDATANET_DET = 33740\nVENDOR_ID_YELLOWSTONE_SOFT = 33741\nVENDOR_ID_NET4PROMOTIONS = 33742\nVENDOR_ID_ZENTRUM_FR_SOZIALE_INNOVATION = 33743\nVENDOR_ID_APPLICATION_SOLUTIONS_SAFETY_AND_SECURITY_LTD = 33744\nVENDOR_ID_COLLEGE_FOR_CREATIVE_STUDIES = 33745\nVENDOR_ID_IMAGINE_THAT = 33746\nVENDOR_ID_ONLINEOK = 33747\nVENDOR_ID_WILCOX_TECHNOLOGIES = 33748\nVENDOR_ID_VOLGA_FORUM = 33749\nVENDOR_ID_IRITEL_AD_BEOGRAD = 33750\nVENDOR_ID_OBEJ_DI_GALANTINI_ANDREA = 33751\nVENDOR_ID_GEN_Z_TECHNOLOGIES_INC = 33752\nVENDOR_ID_BEIJING_CIRCLOOP_DIGITAL_IMAGE_TECHCOLTD = 33753\nVENDOR_ID_DUELCO_A_S_DENMARK = 33754\nVENDOR_ID_WWWCAPADDE = 33755\nVENDOR_ID_KEIMATSUCOM = 33756\nVENDOR_ID_OBLONG_INDUSTRIES_INC = 33757\nVENDOR_ID_INQUINOX_LLC = 33758\nVENDOR_ID_GOLDEN_MICRO_SYSTEMS_CORPORATION = 33759\nVENDOR_ID_MINISTERSTVO_FINANSOV_CHELYABINSKOY_OBLASTI = 33760\nVENDOR_ID_OPTIMSYS_SRO = 33761\nVENDOR_ID_GLOBAL_DISPLAY_SOLUTIONS_SPA = 33762\nVENDOR_ID_AD_HOLDINGS_PLC = 33763\nVENDOR_ID_I_BRIDGE_BV = 33764\nVENDOR_ID_SAPIENZA_CONSULTING_LTD = 33765\nVENDOR_ID_PANAGENDA_GMBH = 33766\nVENDOR_ID_KOREAN_BROADCASTING_SYSTEM_KBS = 33767\nVENDOR_ID_BEIJING_ZHONGHONGLIDA_TECHNOLOGY_DEVELOPMENT_CO_LTD = 33768\nVENDOR_ID_UNIVERSIDAD_DE_LA_HABANA = 33769\nVENDOR_ID_TELCOM_RESEARCH = 33770\nVENDOR_ID_ACADEMY_CONSULT_MNCHEN_EV = 33771\nVENDOR_ID_THE_PORTALUS_GROUP = 33772\nVENDOR_ID_WEATHER_KAT = 33773\nVENDOR_ID_PYRO_NETWORKS = 33774\nVENDOR_ID_MOSCOW_METERING_COMPANY = 33775\nVENDOR_ID_ORCA_INTERACTIVE_LTD = 33776\nVENDOR_ID_CADMOS_MICROSYSTEMS_SRL = 33777\nVENDOR_ID_TIKLA_TV = 33778\nVENDOR_ID_STEFAN_SEELMANN = 33779\nVENDOR_ID_GROSVENOR_TECHNOLOGY_LTD = 33780\nVENDOR_ID_FREEKEYLABS_SL = 33781\nVENDOR_ID_PICTAGE_INC = 33782\nVENDOR_ID_CHINARAINBOW_TECHNOLOGY_COLTD = 33783\nVENDOR_ID_AVFINITY_LLC = 33784\nVENDOR_ID_LA_SALLE_UNIVERSITY = 33785\nVENDOR_ID_IQUALL_SA = 33786\nVENDOR_ID_KAHO_SINT_LIEVEN = 33787\nVENDOR_ID_JURIS_GMBH = 33788\nVENDOR_ID_MEDICAL_IT = 33789\nVENDOR_ID_INFOCUS_CORPORATION = 33790\nVENDOR_ID_XELNET = 33791\nVENDOR_ID_NOISEBRIDGE = 33792\nVENDOR_ID_INVICRO_LLC = 33793\nVENDOR_ID_MYUNGMIN_SYSTEMS_INC = 33794\nVENDOR_ID_SOLIT_INFORMATION_SECURITY = 33795\nVENDOR_ID_ROMTELECOM_SA = 33796\nVENDOR_ID_ESRI_PORTUGAL = 33797\nVENDOR_ID_SUEFKE_SOFTWAREENTWICKLUNG = 33798\nVENDOR_ID_LINKSAT = 33799\nVENDOR_ID_CARFAX_INC = 33800\nVENDOR_ID_COLORQUICK_LLC = 33801\nVENDOR_ID_XENSOR_SYSTEMS_INCORPORATED = 33802\nVENDOR_ID_MANOR_AG = 33803\nVENDOR_ID_CHRISALYS = 33804\nVENDOR_ID_PEAK_DRIVE_SOLUTIONS_LTD = 33805\nVENDOR_ID_UTILISE_IT_LIMITED = 33806\nVENDOR_ID_INTERNEXO_LTDA = 33807\nVENDOR_ID_JIM_MONTAGUE_SOFTWARE_LLC = 33808\nVENDOR_ID_TOPOMARO = 33809\nVENDOR_ID_MASTERHOST_CJSC = 33810\nVENDOR_ID_IDENDEGO_INC = 33811\nVENDOR_ID_GOODUS_INC = 33812\nVENDOR_ID_INVENSO = 33813\nVENDOR_ID_IPRONET_SISTEMAS_SA = 33814\nVENDOR_ID_ARCHEAN_TECHNOLOGIES = 33815\nVENDOR_ID_PROFILAX_SRO = 33816\nVENDOR_ID_COPYKNIGHT_TECHNOLOGIES_LTD = 33817\nVENDOR_ID_ASCO = 33818\nVENDOR_ID_STREETGEEK = 33819\nVENDOR_ID_DECOIT_GMBH = 33820\nVENDOR_ID_PROLIPHIX_INC = 33821\nVENDOR_ID_COMPUTER_TASK_GROUP_INC = 33822\nVENDOR_ID_COMSPACE_GMBH_CO_KG = 33823\nVENDOR_ID_SPIRENT_COMMUNICATIONS_OF_ROCKVILLE_INC = 33824\nVENDOR_ID_ECHO_KEISOKUKI_COLTD = 33825\nVENDOR_ID_LUTONG_NETWORK_TECHNOLOGY_CO_LTD = 33826\nVENDOR_ID_DAN_HIRSCH = 33827\nVENDOR_ID_NTT_PLALA_INC = 33828\nVENDOR_ID_NOVEL_COMMUNICATION_CO_LTD = 33829\nVENDOR_ID_ONE97_COMMUNICATION_P_LIMITED = 33830\nVENDOR_ID_NOFILIS_AUTOID_GMBH = 33831\nVENDOR_ID_BIOLOGISCHE_HEILMITTEL_HEEL_GMBH = 33832\nVENDOR_ID_NETTARE_SRL = 33833\nVENDOR_ID_SALFORD = 33834\nVENDOR_ID_REGS_DE_CATALUNYA_SA = 33835\nVENDOR_ID_ALLIARIA_SL = 33836\nVENDOR_ID_GESTI_DINFRAESTRUCTURES_SA = 33837\nVENDOR_ID_VOXLINE_CONTACT_CENTER = 33838\nVENDOR_ID_CONFESOL = 33839\nVENDOR_ID_LEDZGO = 33840\nVENDOR_ID_ARENANET = 33841\nVENDOR_ID_SIBIO = 33842\nVENDOR_ID_PROIS_DOO = 33843\nVENDOR_ID_BLASTWAVEORG_INC = 33844\nVENDOR_ID_MICROLAB_SNC = 33845\nVENDOR_ID_DISA_CSD_MONTGOMERY = 33846\nVENDOR_ID_MAXAN_PTY_LTD = 33847\nVENDOR_ID_HOT_SOLDER_LTD = 33848\nVENDOR_ID_UNIVERSIDAD_AUTNOMA_DE_COLOMBIA = 33849\nVENDOR_ID_CAPGEMINI_SPAIN_SLU = 33850\nVENDOR_ID_COMBILENT_A_S = 33851\nVENDOR_ID_TRACTIS = 33852\nVENDOR_ID_STM_CO_LTD = 33853\nVENDOR_ID_RP_COMPOUNDS_GMBH = 33854\nVENDOR_ID_ADVTOOLS = 33855\nVENDOR_ID_ANSGAR_JONIETZ = 33856\nVENDOR_ID_SECONS_SRO = 33857\nVENDOR_ID_AVECO_SRO = 33858\nVENDOR_ID_JRD = 33859\nVENDOR_ID_THE_INSITU_GROUP = 33860\nVENDOR_ID_CONGUIDE = 33861\nVENDOR_ID_LARGE_BINOCULAR_TELESCOPE_OBSERVATORY = 33862\nVENDOR_ID_MANTARO_NETWORKS_INC = 33863\nVENDOR_ID_PRAKTIKER_SERVICES_GMBH = 33864\nVENDOR_ID_ATUKORALA_HOLDINGS_LTD_FORMERLY_SQUAD_17_LIMITED = 33865\nVENDOR_ID_LIONIC_CORP = 33866\nVENDOR_ID_INFRASCAPE_TECHNOLOGIES_LIMITED = 33867\nVENDOR_ID_DOSISOFT = 33868\nVENDOR_ID_KOMPAS_XNET_DOO = 33869\nVENDOR_ID_EXXOSS_SPRL = 33870\nVENDOR_ID_ZIBIMED_GMBH = 33871\nVENDOR_ID_ALPHA_TECHNOLOGIES_INC_FORMERLY_CHEETAH_TECHNOLOGIES_LP = 33872\nVENDOR_ID_ARC_CRATIONS = 33873\nVENDOR_ID_NOVITA = 33874\nVENDOR_ID_NATIONAL_BANK_OF_UKRAINE = 33875\nVENDOR_ID_VAN_HAMEREN_ICT_DIENSTEN = 33876\nVENDOR_ID_PUBLICATIONS_OFFICE = 33877\nVENDOR_ID_CHILDRENS_MIRACLE_NETWORK = 33878\nVENDOR_ID_GLOBAL_IT_BILISIM_HIZMETLERI_LTD = 33879\nVENDOR_ID_ISCA_NETWORKS_CORPORATION_LTD = 33880\nVENDOR_ID_ETM_ELECTROMATIC_INC = 33881\nVENDOR_ID_FOUR_COLOR_STUDIO = 33882\nVENDOR_ID_THE_BANK_OF_LITHUANIA = 33883\nVENDOR_ID_NSG = 33884\nVENDOR_ID_ABHINEET_SINGH_CHAUHAN = 33885\nVENDOR_ID_UNICEF = 33886\nVENDOR_ID_INTEGRASUL_SOLUCOES_EM_INFORMATICA_LTDA = 33887\nVENDOR_ID_AQUA_COOLER_PTY_LTD = 33888\nVENDOR_ID_DO_STYLEINC = 33889\nVENDOR_ID_KUB_LTD = 33890\nVENDOR_ID_GOETTERTNET_INTERNET_SERVICE = 33891\nVENDOR_ID_BE_IP_SA = 33892\nVENDOR_ID_SPECIALIZED_INFORMATION_SYSTEMS_LTD = 33893\nVENDOR_ID_AULOFE = 33894\nVENDOR_ID_THE_JOINT_COMMISSION = 33895\nVENDOR_ID_DDO_ORGANISATION_SARL = 33896\nVENDOR_ID_GSA = 33897\nVENDOR_ID_SYNOVEL_SOFTWARE_TECHNOLOGIES_PVT_LTD = 33898\nVENDOR_ID_RAHMNCOM_LLC = 33899\nVENDOR_ID_NEXT_LEVEL_SECURITY_SYSTEMS_INC = 33900\nVENDOR_ID_EZWWWCH = 33901\nVENDOR_ID_TIJU_PAUL = 33902\nVENDOR_ID_NENUNIC = 33903\nVENDOR_ID_SERGEI_BUTAKOV = 33904\nVENDOR_ID_IVOLTAIREORG = 33905\nVENDOR_ID_WANTS_INC = 33906\nVENDOR_ID_SECURITAS_DIRECT_ESPAA_SAU = 33907\nVENDOR_ID_SEOWONINTECH_CO_LTD = 33908\nVENDOR_ID_OPEN_JOINT_STOCK_COMPANY_BELVNESHECONOMBANK = 33909\nVENDOR_ID_BSN_MEDICAL_GMBH = 33910\nVENDOR_ID_CERILLION_TECHNOLOGIES_LIMITED = 33911\nVENDOR_ID_FULLSEE_ELECTRONICS_CO_LTD_BEIJING = 33912\nVENDOR_ID_CLUSTERDBCOM = 33913\nVENDOR_ID_MONMOUTH_TELECOM = 33914\nVENDOR_ID_MIDDLE_EAST_NUMBER_THIRTEEN_FINANCIAL_SERVICES = 33915\nVENDOR_ID_FREEMAN_DECORATING_SERVICES_INC = 33916\nVENDOR_ID_INTACT_FINANCIAL_CORPORATION = 33917\nVENDOR_ID_TOP_PRODUCER_SYSTEMS = 33918\nVENDOR_ID_IMMEDIATV_CORPORATION_FORMERLY_MAGENTA_VIDEO_NETWORKS = 33919\nVENDOR_ID_REMOTE_MANAGEMENT_SYSTEMS_LIMITED = 33920\nVENDOR_ID_MOLOWA = 33921\nVENDOR_ID_BYZORO_NETWORKS_LTD = 33922\nVENDOR_ID_AXIONE = 33923\nVENDOR_ID_EBOR_COMPUTING_PTY_LTD = 33924\nVENDOR_ID_PROGETTO_3000_SRL = 33925\nVENDOR_ID_BUZZWORDORGUK = 33926\nVENDOR_ID_CAMBRIDGE_LEANING_CENTER = 33927\nVENDOR_ID_IBUILDINGS = 33928\nVENDOR_ID_UNIVERSITAT_JAUME_I = 33929\nVENDOR_ID_CONTINEO_SYSTEMS = 33930\nVENDOR_ID_IK_TECH = 33931\nVENDOR_ID_MEDIACAST_CO_LTD = 33932\nVENDOR_ID_QOXINC = 33933\nVENDOR_ID_XENDATA_LIMITED = 33934\nVENDOR_ID_REDFOX_COMMUNICATIONS_LTD = 33935\nVENDOR_ID_SENTILLA_CORPORATION = 33936\nVENDOR_ID_LINUXBOXCZ = 33937\nVENDOR_ID_ORDINA = 33938\nVENDOR_ID_BOLT_COURT_CONSULTING = 33939\nVENDOR_ID_WUHAN_HONGXIN_TELECOMMUNICATION_TECHNOLOGIES_COLTD = 33940\nVENDOR_ID_BUSINESS_LOGIC_SYSTEMS = 33941\nVENDOR_ID_NAKEDAPE = 33942\nVENDOR_ID_FACULTY_OF_ELECTRICAL_ENGINEERING_BANJA_LUKA = 33943\nVENDOR_ID_COMPOWER_SYSTEMS_INC = 33944\nVENDOR_ID_OHO_INTERACTIVE = 33945\nVENDOR_ID_VENCOMM = 33946\nVENDOR_ID_MAGICONLINE = 33947\nVENDOR_ID_AZIENDA_USL_FERRARA = 33948\nVENDOR_ID_GEOTECH_LTDA = 33949\nVENDOR_ID_ZILOGIC_SYSTEMS_PVT_LTD = 33950\nVENDOR_ID_TAUNUSSTEINNET = 33951\nVENDOR_ID_ZIMZAHM_PRODUCTIONS = 33952\nVENDOR_ID_DLT_LIMITED = 33953\nVENDOR_ID_INTERNATIONAL_SCHOOL_OF_BEIJING = 33954\nVENDOR_ID_BETTER_PLACE = 33955\nVENDOR_ID_OVERSUN = 33956\nVENDOR_ID_NCHOVY_INC = 33957\nVENDOR_ID_SKYTAP = 33958\nVENDOR_ID_THE_EGYPTIAN_COMPANY_FOR_NETWORKS_AND_COMPUTER_SECURITY_SERVICES = 33959\nVENDOR_ID_NORDNET_AB = 33960\nVENDOR_ID_ENCENTRO_SYSTEMS_INC = 33961\nVENDOR_ID_ICUETV = 33962\nVENDOR_ID_OCCN_LTD = 33963\nVENDOR_ID_PARAVOLVE_DEVELOPMENT_CORPORATION = 33964\nVENDOR_ID_R_DATA_SP_Z_OO = 33965\nVENDOR_ID_FUNAI_ELECTRIC_CO_LTD = 33966\nVENDOR_ID_THE_NOW_FACTORY = 33967\nVENDOR_ID_PULEO_ELECTRONICS_INC = 33968\nVENDOR_ID_CANFIELD_RESEARCH_GROUP = 33969\nVENDOR_ID_TRADEHELM_INC = 33970\nVENDOR_ID_VANCEINFO_TECHNOLOGIES_INC = 33971\nVENDOR_ID_RFPA = 33972\nVENDOR_ID_NET_ENTERTAINMENT_NE_AB = 33973\nVENDOR_ID_AGENCYCOM = 33974\nVENDOR_ID_GNOMISHTHOUGHTS = 33975\nVENDOR_ID_HACKTHISSITE = 33976\nVENDOR_ID_BLIP = 33977\nVENDOR_ID_YAGI_ANTENNA_INC = 33978\nVENDOR_ID_HONG_KONG_TRADE_DEVELOPMENT_COUNCIL = 33979\nVENDOR_ID_DDB_LINK = 33980\nVENDOR_ID_TEK_OPSCOM = 33981\nVENDOR_ID_NEW_INTERNET_TECHNOLOGIES_SP_Z_O_O = 33982\nVENDOR_ID_TOTAL_TEL_INTERNATIONAL_PTY_LTD = 33983\nVENDOR_ID_SPARKRED_LLC = 33984\nVENDOR_ID_MIGRATECH = 33985\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_PERNAMBUCO = 33986\nVENDOR_ID_LAKSTINS_FAMILY_LLC = 33987\nVENDOR_ID_COMMSEC_DI_VALTER_FORESTO = 33988\nVENDOR_ID_HYETTE_SA = 33989\nVENDOR_ID_CASSANDRA_RESEARCH_CENTER = 33990\nVENDOR_ID_BEAUMARIS_NETWORKS = 33991\nVENDOR_ID_LOUISIANA_COMMUNITY_AND_TECHNICAL_COLLEGE_SYSTEM = 33992\nVENDOR_ID_COALINGA_STATE_HOSPITAL = 33993\nVENDOR_ID_NEI_TIL_EU = 33994\nVENDOR_ID_PIXIPNET_GMBH = 33995\nVENDOR_ID_DIATEAM = 33996\nVENDOR_ID_ONEMEDNET_CORPORATION = 33997\nVENDOR_ID_AGILY_NETWORKS_INC = 33998\nVENDOR_ID_XIANGMIN_TECHNOLOGY_COLTD = 33999\nVENDOR_ID_SIMB_TECNOLOGIA = 34000\nVENDOR_ID_INGRIFO = 34001\nVENDOR_ID_WRITEX_LTD = 34002\nVENDOR_ID_ADRIVER = 34003\nVENDOR_ID_PETROFAC_INT_LTD = 34004\nVENDOR_ID_COMMUNITY_TECHNOLOGY = 34005\nVENDOR_ID_NUMBER_KUUS_KONSULTATSIOONID_O = 34006\nVENDOR_ID_SKYSOFT_ATM = 34007\nVENDOR_ID_TECH_MAHINDRA = 34008\nVENDOR_ID_YGOMI_EUROPE_LTD = 34009\nVENDOR_ID_PARAFLUX_INC = 34010\nVENDOR_ID_DONET_INC = 34011\nVENDOR_ID_INTERNET_DOORWAY_INC = 34012\nVENDOR_ID_CBTS = 34013\nVENDOR_ID_B1_SYSTEMS_GMBH = 34014\nVENDOR_ID_PINGHU_FEIHONG_TECHNOLOGY_COLTD = 34015\nVENDOR_ID_MANAGEMENT_OF_PROCUREMENT_FOR_STATE_NEEDS_OF_KRASNODAR_REGION = 34016\nVENDOR_ID_TELECOMMUNICATION_SOFTWARE_GMBH = 34017\nVENDOR_ID_MAC_GUFF_LIGNE = 34018\nVENDOR_ID_AGROKOR = 34019\nVENDOR_ID_OPENHTTPD = 34020\nVENDOR_ID_HOSTEAM = 34021\nVENDOR_ID_ITG_SOLUTIONS_SAC = 34022\nVENDOR_ID_ZUMBI = 34023\nVENDOR_ID_DEPARTMENT_OF_HOMELAND_SECURITY = 34024\nVENDOR_ID_ACCELERATED_DATA_LLC = 34025\nVENDOR_ID_ALPHALINK = 34026\nVENDOR_ID_QUMU_INC = 34027\nVENDOR_ID_IDAHO_POWER_COMPANY = 34028\nVENDOR_ID_TLSPU_FORMERLY_HAQASOFT = 34029\nVENDOR_ID_METATUXNET = 34030\nVENDOR_ID_VIEWSTOR_PTY_LTD = 34031\nVENDOR_ID_AMATEUR_RADIO_CLUB_ARC_ITB = 34032\nVENDOR_ID_UNIX_LINUX_AUTHORITY_KFT = 34033\nVENDOR_ID_ACTIVE_WEB_SOLUTIONS_LTD = 34034\nVENDOR_ID_IPSOTV = 34035\nVENDOR_ID_BENCHMARK_GROUP = 34036\nVENDOR_ID_EUROPEAN_NAZARENE_COLLEGE = 34037\nVENDOR_ID_USGN = 34038\nVENDOR_ID_CONVERSANT_SOLUTIONS_PTE_LTD = 34039\nVENDOR_ID_ORGLDAP_PROJECT = 34040\nVENDOR_ID_UNATTENDED_GUI = 34041\nVENDOR_ID_T_MOBILE_HRVATSKA_DOO = 34042\nVENDOR_ID_SUFFOLK_UNIVERSITY_ITS = 34043\nVENDOR_ID_ADESTA_LLC = 34044\nVENDOR_ID_VEX = 34045\nVENDOR_ID_MIDWATCH_SYSTEMS_INC = 34046\nVENDOR_ID_THENEWPASTAWAVECOM = 34047\nVENDOR_ID_NOVELL_CONSULTING_UKRAINE_LTD = 34048\nVENDOR_ID_SPIRTECH = 34049\nVENDOR_ID_CLOUDHOPPER_INC = 34050\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DE_PONTA_GROSSA = 34051\nVENDOR_ID_MOUNT_DESERT_ISLAND_BIOLOGICAL_LABORATORY = 34052\nVENDOR_ID_ASSOCIAO_HOSPITALAR_SANTA_ROSLIA = 34053\nVENDOR_ID_AUSTRALIAN_NURSING_FEDERATION = 34054\nVENDOR_ID_VIETNAM_NATIONAL_UNIVERSITY_HANOI = 34055\nVENDOR_ID_TRANQUIL_HOSTING = 34056\nVENDOR_ID_BEEHIVE_SECURITY = 34057\nVENDOR_ID_BABICOM = 34058\nVENDOR_ID_NII_VEKTOR = 34059\nVENDOR_ID_NEXGEN_TECHNOLOGIES = 34060\nVENDOR_ID_COS_CRPF = 34061\nVENDOR_ID_MOSART_MEDIALAB_AS = 34062\nVENDOR_ID_HYVES_STARTPHONE_LTD = 34063\nVENDOR_ID_BCHERER_ANGEWANDTE_INFORMATIK = 34064\nVENDOR_ID_RICOH_EUROPE_PLC = 34065\nVENDOR_ID_INTERPUBLIC_GROUP_OF_COMPANIES_INC = 34066\nVENDOR_ID_OWVAT = 34067\nVENDOR_ID_GAI_TRONICS_CORPORATION = 34068\nVENDOR_ID_INFORMATION_SECURITY_SERVICES_ASSOCIATION = 34069\nVENDOR_ID_TEACHMKS = 34070\nVENDOR_ID_HEARST_COMMUNICATIONS_INC = 34071\nVENDOR_ID_NBEE_EMBEDDED_SYSTEMS_SL = 34072\nVENDOR_ID_ISS = 34073\nVENDOR_ID_IDP_COLTD = 34074\nVENDOR_ID_DELTATEC_TECNOLOGIA_DE_SISTEMAS_LDA = 34075\nVENDOR_ID_DATAKOM_LTD = 34076\nVENDOR_ID_BRVZ_BAU_RECHEN_UND_VERWALTUNGSZENTRUM_GMBH = 34077\nVENDOR_ID_INFORMTEKHNIKA_COMMUNICATION_LLC = 34078\nVENDOR_ID_AXIOS_SYSTEMS = 34079\nVENDOR_ID_RTCAMP_SOLUTIONS_PVT_LTD = 34080\nVENDOR_ID_INSYS_MICROELECTRONICS_GMBH = 34081\nVENDOR_ID_CITYSYNC_LIMITED = 34082\nVENDOR_ID_ERAYD_LTD = 34083\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_JUIZ_DE_FORA = 34084\nVENDOR_ID_AWEBER_COMMUNICATIONS_INC = 34085\nVENDOR_ID_TALARI_NETWORKS = 34086\nVENDOR_ID_ULTRA_ELECTRONICS_NUCLEAR_SENSORS_PROCESS_INSTRUMENTATION = 34087\nVENDOR_ID_VISIONEER_INC = 34088\nVENDOR_ID_NEWPORT_ELECTRONICS_INC = 34089\nVENDOR_ID_TFB_TECHNOLOGY_LTD = 34090\nVENDOR_ID_BENCHLABS_LIMITED = 34091\nVENDOR_ID_MYMAIL_PLC = 34092\nVENDOR_ID_UAB_PROFIMUS = 34093\nVENDOR_ID_FANAMOJ_JSC = 34094\nVENDOR_ID_GYMNAZIUM_JAROSLAVA_SEIFERTA = 34095\nVENDOR_ID_TRILOGICAL = 34096\nVENDOR_ID_RACKTIVITY = 34097\nVENDOR_ID_FARBWAHL_GBR = 34098\nVENDOR_ID_PALESTINE_POLYTECHNIC_UNIVERSITY = 34099\nVENDOR_ID_TOMPKINS_CORTLAND_COMMUNITY_COLLEGE = 34100\nVENDOR_ID_AIMETIS_CORP = 34101\nVENDOR_ID_PERVERSIA_NETWORKING = 34102\nVENDOR_ID_BLUESTONE_SRL = 34103\nVENDOR_ID_CETON_CORP = 34104\nVENDOR_ID_LOCAL_WEBSITE_CONSULTING = 34105\nVENDOR_ID_TESCOMA_SRO = 34106\nVENDOR_ID_SELEX_ES_LTD_FORMERLY_SELEX_GALILEO = 34107\nVENDOR_ID_IAM_SOLUTIONS_GMBH_CO_KG = 34108\nVENDOR_ID_GG_FITNESS_EQUIPMENT_INC = 34109\nVENDOR_ID_CODE_BLUE_CORPORATION = 34110\nVENDOR_ID_CONFAMILIARES_DE_CALDAS = 34111\nVENDOR_ID_NETSERVE365 = 34112\nVENDOR_ID_CERTIFICALL = 34113\nVENDOR_ID_MITCHELL_INTERNATIONAL = 34114\nVENDOR_ID_NIW_SOLUTIONS = 34115\nVENDOR_ID_EHANGCOMMUCATION_TECHNOLOGY_LTD = 34116\nVENDOR_ID_INFORMATION_SYSTEM_PRODUCTS_COLTD = 34117\nVENDOR_ID_HL_KOMM_TELEKOMMUNIKATIONS_GMBH = 34118\nVENDOR_ID_MAX_PLANCK_INSTITUTE_FOR_HUMAN_COGNITIVE_AND_BRAIN_SCIENCES = 34119\nVENDOR_ID_LAKETEC_COMMUNICATIONS_INC = 34120\nVENDOR_ID_ALIAS = 34121\nVENDOR_ID_RETRIX_HOSTING_INC = 34122\nVENDOR_ID_AKITOGO_INTERNET_AND_MEDIA_APPLICATIONS_GMBH = 34123\nVENDOR_ID_DIGITAL_MEASURES = 34124\nVENDOR_ID_BEYOND_SEMICONDUCTOR = 34125\nVENDOR_ID_INFOCON_S_A = 34126\nVENDOR_ID_ALLGEMEINER_DEUTSCHER_FAHRRAD_CLUB_LANDESVERBAND_NORDRHEIN_WESTFALEN_EV = 34127\nVENDOR_ID_FABRI = 34128\nVENDOR_ID_TUBITAK_BILGEM_BTE = 34129\nVENDOR_ID_ALCEA = 34130\nVENDOR_ID_UNITED_IN_SONG = 34131\nVENDOR_ID_CASH_AMERICA_INTERNATIONAL_INC = 34132\nVENDOR_ID_SAFETY_VISION_LP = 34133\nVENDOR_ID_OPENTTD = 34134\nVENDOR_ID_FOREVER_HOME_IMPROVEMENT = 34135\nVENDOR_ID_VENMSOL_TECHNOLOGIES = 34136\nVENDOR_ID_ATHENS_WIRELESS_METROPOLITAN_NETWORK_AWMN = 34137\nVENDOR_ID_CER_FRANCE_POITOU_CHARENTES = 34138\nVENDOR_ID_VASISTA_SYSTEMS_INC = 34139\nVENDOR_ID_MAISONNEUVE_INFORMATIQUE = 34140\nVENDOR_ID_EXPRESS = 34141\nVENDOR_ID_BANK_OF_THAILAND = 34142\nVENDOR_ID_NETROUNDS_SOLUTIONS_AB_FORMERLY_ABSILION_AB = 34143\nVENDOR_ID_BHLER_EDELSTAHL_GMBH_COKG = 34144\nVENDOR_ID_KROLY_RBERT_COLLEGE_GYNGYS_HUNGARY = 34145\nVENDOR_ID_TELOGIC_LTD = 34146\nVENDOR_ID_MANGO = 34147\nVENDOR_ID_PRESENSE_TECHNOLOGIES_GMBH = 34148\nVENDOR_ID_IMATRIX_CORP = 34149\nVENDOR_ID_SYNDICAT_IT_INTERNET = 34150\nVENDOR_ID_PEPPE_CERTIFICATION = 34151\nVENDOR_ID_ESD_ELECTRONIC_SYSTEM_DESIGN_GMBH = 34152\nVENDOR_ID_PIVLN_KANSANOPISTO = 34153\nVENDOR_ID_TEXPREZZO_GROUP_BV = 34154\nVENDOR_ID_TENDRIL_NETWORKS = 34155\nVENDOR_ID_OREL_ANALYTICS = 34156\nVENDOR_ID_INSTITUTO_NACIONAL_DE_MATEMTICA_PURA_E_APLICADA = 34157\nVENDOR_ID_GOUVERNEMENT_DE_LA_POLYNSIE_FRANAISE = 34158\nVENDOR_ID_PELICAN_ENGINEERING_INC = 34159\nVENDOR_ID_CERTICHRON_INC = 34160\nVENDOR_ID_CUSICHINA_UNICOM_SYSTEM_INTEGRATION_LIMITED_CORPORATION = 34161\nVENDOR_ID_SYMPLIFIED_INC = 34162\nVENDOR_ID_LOGPATROL = 34163\nVENDOR_ID_FUBRA_LIMITED = 34164\nVENDOR_ID_CONVERGENCE_CT_INC = 34165\nVENDOR_ID_STELLAR_SWITCHES_INC = 34166\nVENDOR_ID_POWER_ADMIN_LLC = 34167\nVENDOR_ID_RICHER_LINK_COLTD = 34168\nVENDOR_ID_NORTHSUNNET = 34169\nVENDOR_ID_TTK_SAS = 34170\nVENDOR_ID_WINGPATH_LTD = 34171\nVENDOR_ID_FIXME_INTERNET_KYTTJT_RY = 34172\nVENDOR_ID_PD_SOFTWARE_SRO = 34173\nVENDOR_ID_FASTONLINEPM = 34174\nVENDOR_ID_ADVANCED_NAVIGATION_POSITIONING_CORPORATION = 34175\nVENDOR_ID_HEDGEHOG_OY_LTD = 34176\nVENDOR_ID_BOND_TECHNICAL_MANAGEMENT = 34177\nVENDOR_ID_PARAGON_ELECTRONIC_DESIGN_LIMITED = 34178\nVENDOR_ID_INLAND_REVENUE_DEPARTMENT_OF_SRI_LANKA = 34179\nVENDOR_ID_PHOTOP_TECHNOLOGIES_INC = 34180\nVENDOR_ID_DARSHAN_DUDHORIA = 34181\nVENDOR_ID_AREA_SX = 34182\nVENDOR_ID_GLOBAL_DATA_LOGISTIX_PTY_LTD = 34183\nVENDOR_ID_UNIVERSITT_HOHENHEIM = 34184\nVENDOR_ID_EBANK_ONLINE_BEIJING_TECHNOLOGY_CO_LTD = 34185\nVENDOR_ID_TEAMCAST = 34186\nVENDOR_ID_WAGNER_GROUP_GMBH = 34187\nVENDOR_ID_KLOCKTORNET_AB = 34188\nVENDOR_ID_MAX_PLANCK_INSTITUTE_FOR_THE_SCIENCE_OF_LIGHT = 34189\nVENDOR_ID_SSCANRFK54425 = 34190\nVENDOR_ID_HUMAN_FACTORS_INTERNATIONAL = 34191\nVENDOR_ID_SIKJUR = 34192\nVENDOR_ID_MCKINNEY_IDENTITY_MANAGEMENT_SOLUTIONS_LLC = 34193\nVENDOR_ID_JERUSALEM_COLLEGE_OF_TECHNOLOGY = 34194\nVENDOR_ID_ZID_VIENNA_UNIVERSITY_OF_TECHNOLOGY = 34195\nVENDOR_ID_CATCHYNET_BV = 34196\nVENDOR_ID_EXANE = 34197\nVENDOR_ID_PRAGMATIC_SOURCE_SARL = 34198\nVENDOR_ID_WEST_VIRGINIA_UNIVERSITY = 34199\nVENDOR_ID_PLANET_WORK = 34200\nVENDOR_ID_NEUBERGER_BERMAN = 34201\nVENDOR_ID_THING_IN_THE_CORNER_ENTERPRISES_LLC = 34202\nVENDOR_ID_TRUSTALERT = 34203\nVENDOR_ID_NETWEB_TECHNOLOGIES = 34204\nVENDOR_ID_ALTRUSOFT_AB = 34205\nVENDOR_ID_PENGUIN_SOLUTIONS = 34206\nVENDOR_ID_TMIRA_SOLUTIONS = 34207\nVENDOR_ID_TELEFIN_SPA = 34208\nVENDOR_ID_VAMED_MANAGEMENT_UND_SERVICE_GMBH_CO_KG = 34209\nVENDOR_ID_EVANGELISCHE_KIRCHE_VON_KURHESSEN_WALDECK = 34210\nVENDOR_ID_HANIL_DISPLAY = 34211\nVENDOR_ID_FUNCTION_INTERNATIONAL = 34212\nVENDOR_ID_OOVOO_LLC = 34213\nVENDOR_ID_ACENET = 34214\nVENDOR_ID_ACKSEN_LTD = 34215\nVENDOR_ID_IZMIR_UNIVERSITY_OF_ECONOMICS = 34216\nVENDOR_ID_SKY_NETWORK_TELEVISION_LTD = 34217\nVENDOR_ID_DEW_INDUSTRIAL_ELECTRONICS_PTY_LTD_T_A_SOS_INDUSTRIAL_ELECTRONICS = 34218\nVENDOR_ID_WER_KENNT_WENDE = 34219\nVENDOR_ID_CREAIM_BV = 34220\nVENDOR_ID_TELEFRANG_AB = 34221\nVENDOR_ID_SOLTENLAR_S_L = 34222\nVENDOR_ID_CHAOS_STUDIO = 34223\nVENDOR_ID_OPENSPIRIT_SA = 34224\nVENDOR_ID_S30LABS_IT_ADVANCED_SYSTEMS = 34225\nVENDOR_ID_EION_INC = 34226\nVENDOR_ID_SOFTWARE_MACHINE_SRL = 34227\nVENDOR_ID_RADIALPOINT_SAFECARE_GENERAL_PARTNERSHIP = 34228\nVENDOR_ID_CODEWALKER_SOLUTIONS = 34229\nVENDOR_ID_GCI_SCIENCE_TECHNOLOGY_CO_LTD = 34230\nVENDOR_ID_OPEN_COBALT_PROJECT = 34231\nVENDOR_ID_LUCIAN_ALEXANDRU_STANESCU = 34232\nVENDOR_ID_KRUGER = 34233\nVENDOR_ID_LAND_SRL = 34234\nVENDOR_ID_CORK_IT = 34235\nVENDOR_ID_PIXIE = 34236\nVENDOR_ID_ASSURETEC_SYSTEMS_INC = 34237\nVENDOR_ID_NEWSWATCH_INC = 34238\nVENDOR_ID_INNOVATING_DISTRIBUTED_SYSTEMS_SL = 34239\nVENDOR_ID_DARS_DD = 34240\nVENDOR_ID_COMPETELLA_AB = 34241\nVENDOR_ID_PERSPECSYS_INC = 34242\nVENDOR_ID_ROB_SIMS = 34243\nVENDOR_ID_MEDIA_CAPITAL_EDITORA_MULTIMEDIA_SA = 34244\nVENDOR_ID_CIRCLE_SOFTWARE_GROUP_BV = 34245\nVENDOR_ID_HACKTOR = 34246\nVENDOR_ID_STATIONTOSTATION = 34247\nVENDOR_ID_CYKOR_SYSTEMS_LTD = 34248\nVENDOR_ID_TRIADA_DOO = 34249\nVENDOR_ID_ARKADIN = 34250\nVENDOR_ID_FREESTONE_INTERNATIONAL_GROUP_LIMITED = 34251\nVENDOR_ID_XPS_ELETRNICA_LTDA = 34252\nVENDOR_ID_VIAFIRMA_SL = 34253\nVENDOR_ID_SAVANNAH_NETWORKS_LLC = 34254\nVENDOR_ID_CORNER_BOWL_SOFTWARE_CORPORATION = 34255\nVENDOR_ID_HUMICOM_CO_LTD = 34256\nVENDOR_ID_DEFENSE_SYSTEMS_GROUP_NTT_DATA_CORPORATION = 34257\nVENDOR_ID_OTIP_OFFICE = 34258\nVENDOR_ID_THE_STATE_HIGHER_SCHOOL_OF_VOCATIONAL_EDUCATION_IN_ELBLAG = 34259\nVENDOR_ID_APTTSOFT = 34260\nVENDOR_ID_MEVIS_MEDICAL_SOLUTIONS_AG = 34261\nVENDOR_ID_JOINVILLE_EAU_VIVE = 34262\nVENDOR_ID_PICOCHIP_DESIGNS_LTD = 34263\nVENDOR_ID_ICE_LOGIC_LTD = 34264\nVENDOR_ID_OMNITECH_SECURITY = 34265\nVENDOR_ID_UNOCHAPECO = 34266\nVENDOR_ID_SWEDBANK_AB = 34267\nVENDOR_ID_MARTIN_LUTHER_COLLEGE = 34268\nVENDOR_ID_SLA_CORPORATION = 34269\nVENDOR_ID_BAMAG_GMBH = 34270\nVENDOR_ID_GEOMIDI_INFORMATICA_LTDA = 34271\nVENDOR_ID_JSC_NCC = 34272\nVENDOR_ID_TMNS_BV = 34273\nVENDOR_ID_SIPWISE_GMBH = 34274\nVENDOR_ID_BOYNE_RESORTS = 34275\nVENDOR_ID_SIGNATURGRUPPEN_A_S = 34276\nVENDOR_ID_JENS_MEINER = 34277\nVENDOR_ID_JANITZA_ELECTRONICS_GMBH = 34278\nVENDOR_ID_JOUTCON_OY = 34279\nVENDOR_ID_METVA = 34280\nVENDOR_ID_TAIWAN_DICHEN_CO_LTD = 34281\nVENDOR_ID_MEON_YAMAGUCHI = 34282\nVENDOR_ID_CA_JINCHEN_SOFTWARE_COLTD = 34283\nVENDOR_ID_ELISA_OYJ = 34284\nVENDOR_ID_SC_DIGISIGN_SA = 34285\nVENDOR_ID_FEUSI_BILDUNGSZENTRUM_AG = 34286\nVENDOR_ID_RAIFFEISEN_BANK_KOSOVO_JSC = 34287\nVENDOR_ID_CENTRALNA_BANKA_CRNE_GORE = 34288\nVENDOR_ID_IRE_RAYOS_X_SA = 34289\nVENDOR_ID_RS2I = 34290\nVENDOR_ID_XROW_GMBH = 34291\nVENDOR_ID_SPRING_STREET_STORAGE = 34292\nVENDOR_ID_COYOTE_CREEK = 34293\nVENDOR_ID_C_CRON_GMBH = 34294\nVENDOR_ID_DALIAN_GIGATEC_ELECTRONICS_COLTD = 34295\nVENDOR_ID_DALIAN_MARITIME_UNIVERSITY = 34296\nVENDOR_ID_MOBISTAR_SA_NV = 34297\nVENDOR_ID_CONTEXTREAM = 34298\nVENDOR_ID_DATAVALET_TECHNOLOGIES_INC = 34299\nVENDOR_ID_CROIX_ROUGE_FRANCAISE = 34300\nVENDOR_ID_NEON_INC = 34301\nVENDOR_ID_NETINTEGRATE_SOLUTIONS_INC = 34302\nVENDOR_ID_SKYLINE_NETWORK_ENGINEERING = 34303\nVENDOR_ID_FEYNMAN_GROUP_INC = 34304\nVENDOR_ID_DEVELOPING_SOLUTIONS_INC = 34305\nVENDOR_ID_CANODUS_FORMERLY_DECRE = 34306\nVENDOR_ID_DECKLAND = 34307\nVENDOR_ID_FORD_MASON_LTD = 34308\nVENDOR_ID_ARCHIMEDES_SOLUTIONS_GMBH = 34309\nVENDOR_ID_UBINETSYSCO_LTD = 34310\nVENDOR_ID_DATA_NET_SOLUTIONS_GROUP_INC = 34311\nVENDOR_ID_ACCANTO_SYSTEMS_SRL = 34312\nVENDOR_ID_IDMS = 34313\nVENDOR_ID_DATANOMIC_LTD = 34314\nVENDOR_ID_BROADBAND_UNITED_GMBH = 34315\nVENDOR_ID_PDSG = 34316\nVENDOR_ID_FABRIC_TECHNOLOGIES = 34317\nVENDOR_ID_IEARN_USA = 34318\nVENDOR_ID_INVENEO_INC = 34319\nVENDOR_ID_OCTO_WIRELESS_LLC = 34320\nVENDOR_ID_ICP_DAS_CO_LTD = 34321\nVENDOR_ID_HOOJIMA_LTD = 34322\nVENDOR_ID_ZOLFO_COOPER = 34323\nVENDOR_ID_MINISTRY_FOR_INFORMATION_SOCIETY_OF_MONTENEGRO = 34324\nVENDOR_ID_INVESTEC = 34325\nVENDOR_ID_NOKIA_SERVICES = 34326\nVENDOR_ID_FARMACIA_VALENTINI = 34327\nVENDOR_ID_TMCPCORP = 34328\nVENDOR_ID_DOCOMO_INTERTOUCH = 34329\nVENDOR_ID_WEBYOG_SOFTWORKS_PVT_LTD = 34330\nVENDOR_ID_VILANT_SYSTEMS_OY = 34331\nVENDOR_ID_FOREX_CLUB_INTERNATIONAL_LTD = 34332\nVENDOR_ID_STREAMIT_BV = 34333\nVENDOR_ID_PSYLOCK_GMBH = 34334\nVENDOR_ID_JAVAHAR_PRIVATE_LIMITED = 34335\nVENDOR_ID_SHENZHEN_MEIKAI_ELECTRONICS_CO_LTD = 34336\nVENDOR_ID_BATRACOMIOMACHIA = 34337\nVENDOR_ID_BREDBANDSTELEFONI_I_SVERIGE_AB = 34338\nVENDOR_ID_ASESORA_CTDATA = 34339\nVENDOR_ID_HOIPORG = 34340\nVENDOR_ID_GLOBALINX = 34341\nVENDOR_ID_PRIME_CREATION_TECHNOLOGY_LIMITED = 34342\nVENDOR_ID_SAINT_PETERSBURG_INDUSTRIAL_JOINT_STOCK_BANK = 34343\nVENDOR_ID_PNI_DIGITAL_MEDIA_INC = 34344\nVENDOR_ID_BLOODHOUND_TECHNOLOGIES_INC = 34345\nVENDOR_ID_ASTRAL_MEDIA_RADIO_INC = 34346\nVENDOR_ID_ATX_INNOVATION_INC = 34347\nVENDOR_ID_AKC_SOLUTIONS = 34348\nVENDOR_ID_MIRACLESOFT_BEIJING_COLTD = 34349\nVENDOR_ID_BINGLEY_GRAMMAR_SCHOOL = 34350\nVENDOR_ID_ISEEMEDIA_INC = 34351\nVENDOR_ID_KAMAILIOORG = 34352\nVENDOR_ID_CLAIRMAIL = 34353\nVENDOR_ID_CGS_LLC = 34354\nVENDOR_ID_SOL4NET = 34355\nVENDOR_ID_INEPEX_LTD = 34356\nVENDOR_ID_PLAID_TIE_SOFTWARE = 34357\nVENDOR_ID_SERVICIOS_TCNICO_COMERCIALES_EN_INTERNET_SCP = 34358\nVENDOR_ID_NUCLEUS_CONNECT_PTE_LTD = 34359\nVENDOR_ID_SILMORDE_PROJECTS = 34360\nVENDOR_ID_MATRIXWARE_INFORMATION_SERVICES_GMBH = 34361\nVENDOR_ID_FH_AACHEN = 34362\nVENDOR_ID_ILLALLANGI_ENTERPRISES = 34363\nVENDOR_ID_GEINITZINFO = 34364\nVENDOR_ID_BEIJING_EASTCAT_INFORMATION_TECHNOLOGY_COMPANY = 34365\nVENDOR_ID_ERWIN_PETERS_SYSTEMTECHNIK_GMBH = 34366\nVENDOR_ID_FIRE_CHECK_CONSULTANTS_PTY_LTD = 34367\nVENDOR_ID_GENERAL_DYNAMICS_MEDIAWARE = 34368\nVENDOR_ID_NANOSOFT_AG = 34369\nVENDOR_ID_PAPIER_UND_KARTONFABRIK_VAREL_GMBH_CO_KG = 34370\nVENDOR_ID_A1_SYSTEMS_LTD = 34371\nVENDOR_ID_TUBEDALE_LIMITED = 34372\nVENDOR_ID_ESCAUX = 34373\nVENDOR_ID_PAKI_SHELLS_INTERNET_SERVICES = 34374\nVENDOR_ID_MEVIO = 34375\nVENDOR_ID_AUTOMTICA_Y_REGULACIN_SA = 34376\nVENDOR_ID_LOCAWEB_LTDA = 34377\nVENDOR_ID_Q1CCNET = 34378\nVENDOR_ID_CHEERS_COLTD = 34379\nVENDOR_ID_PUPPET_LABS_INC_FORMERLY_REDUCTIVE_LABS_INC = 34380\nVENDOR_ID_INIXA_SECURITY_COMMUNICATION = 34381\nVENDOR_ID_BIGDOGS_BROS_CO = 34382\nVENDOR_ID_INEX_ZAMIR = 34383\nVENDOR_ID_SIPOON_KUNTA = 34384\nVENDOR_ID_HINGE_SOFTWARE_COLTD = 34385\nVENDOR_ID_INTELLIGENT_MECHATRONIC_SYSTEMS_INC = 34386\nVENDOR_ID_COMPONENT_ENGINEERING_INC = 34387\nVENDOR_ID_OREILLY_AUTOMOTIVE_INC = 34388\nVENDOR_ID_GEOFRONT = 34389\nVENDOR_ID_BLACKGINGER = 34390\nVENDOR_ID_OWENS_CORNING = 34391\nVENDOR_ID_3_RIVERS_COMMUNICATIONS = 34392\nVENDOR_ID_BLAU_MOBILFUNK_GMBH = 34393\nVENDOR_ID_WHIPLASHCENTRET = 34394\nVENDOR_ID_OMESH_NETWORKS = 34395\nVENDOR_ID_METROPOLITAN_GOVERNMENT_OF_NASHVILLE_DAVIDSON_COUNTY = 34396\nVENDOR_ID_CLOUD_SCOPE_TECHNOLOGIES_INC = 34397\nVENDOR_ID_LANCARDCOMINC = 34398\nVENDOR_ID_CORAVY_LTD = 34399\nVENDOR_ID_RESEARCH_ELECTRONICS_AB = 34400\nVENDOR_ID_STUDIO_MODERNA_DOO = 34401\nVENDOR_ID_SISKIYOU_COUNTY = 34402\nVENDOR_ID_UNSEREGEDANKENDE = 34403\nVENDOR_ID_UNASSIGNED_41 = 34404\nVENDOR_ID_CITY_OF_CAPE_TOWN = 34405\nVENDOR_ID_GENERALS_NETWORK_OZ = 34406\nVENDOR_ID_NEXUS_AG = 34407\nVENDOR_ID_WANET_SRO = 34408\nVENDOR_ID_BEBIDAS_GASEOSAS_DEL_NOROESTE_SA = 34409\nVENDOR_ID_FOSS_ON_LINE = 34410\nVENDOR_ID_PLAYTECH_ESTONIA_O = 34411\nVENDOR_ID_MUTINA_TECHNOLOGY_SRL = 34412\nVENDOR_ID_GLOBAL_SUBSTATION_SOLUTIONS_INC = 34413\nVENDOR_ID_BEIJING_GALAXY_GOLDEN_STAR_TECHNOLOGY_DEVELOPMENT_LTD = 34414\nVENDOR_ID_SUPERNA_ANALYTICS_INC = 34415\nVENDOR_ID_OTTAWA_AREA_INTERMEDIATE_SCHOOL_DISTRICT = 34416\nVENDOR_ID_EGESTALT_TECHNOLOGIES_PVT_LTD = 34417\nVENDOR_ID_SANTA_CLARA_UNIVERSITY = 34418\nVENDOR_ID_REGIS_UNIVERSITY = 34419\nVENDOR_ID_HOCHSCHULE_RHEINMAIN_UNIVERSITY_OF_APPLIED_SCIENCES = 34420\nVENDOR_ID_BENOIT_ELETRODOMESTICOS_LTDA = 34421\nVENDOR_ID_KINGLEY_HEALTH = 34422\nVENDOR_ID_JAMTLANDS_COUNTY_COUNCIL_SWEDEN = 34423\nVENDOR_ID_LANSEN_TECHNOLOGY = 34424\nVENDOR_ID_ARCHANT_LIMITED = 34425\nVENDOR_ID_WIND_TELECOMUNICAZIONI_SPA = 34426\nVENDOR_ID_CZEH_CONSULTANTS = 34427\nVENDOR_ID_UAB_LEMA = 34428\nVENDOR_ID_LESS_RAIN_GMBH = 34429\nVENDOR_ID_WWWFIBER_SPACEDE = 34430\nVENDOR_ID_FORCEFIVE_AG = 34431\nVENDOR_ID_LESCOM_AG = 34432\nVENDOR_ID_UNICONTROLS_AS = 34433\nVENDOR_ID_HONGTEC_BEIJING_CO_LTD = 34434\nVENDOR_ID_NORTH_LOOP_NETWORKS = 34435\nVENDOR_ID_TS_ASSOCIATES_PLC = 34436\nVENDOR_ID_CONSEQUOR_CONSULTING_AG = 34437\nVENDOR_ID_DOHMEN_HERZOG_PARTNER_GMBH = 34438\nVENDOR_ID_WEST_VIRGINIA_STATE_UNIVERSITY = 34439\nVENDOR_ID_VELOCIX_LIMITED = 34440\nVENDOR_ID_NTT_BASIC_RESEARCH_LABORATORIES = 34441\nVENDOR_ID_E_UTILE_SPA = 34442\nVENDOR_ID_NARINET_INC = 34443\nVENDOR_ID_STS_STUDI_TECNOLOGIE_SISTEMI_SRL = 34444\nVENDOR_ID_CAPGEMINI_NEDERLAND_BV_NETHERLANDS = 34445\nVENDOR_ID_HASENOHR_CONSULTING = 34446\nVENDOR_ID_BEIJING_HUOOHUOO_TECHNOLOGY_CO_LTD = 34447\nVENDOR_ID_G_BITS_NETWORK_TECHNOLOGY_CO_LTD = 34448\nVENDOR_ID_LAGUNA_VENTURES_INC = 34449\nVENDOR_ID_JCNETWORK_EV = 34450\nVENDOR_ID_OS3_SRL = 34451\nVENDOR_ID_EDV_SERVICE_OLIVER_STRUCKEN = 34452\nVENDOR_ID_OPT_TAHITI = 34453\nVENDOR_ID_VIS_VISUAL_INFORMATION_SYSTEMS_LIMITED = 34454\nVENDOR_ID_PRIMEX_FAMILY_OF_COMPANIES = 34455\nVENDOR_ID_DASHWIRE_INC = 34456\nVENDOR_ID_REX_WHEELER = 34457\nVENDOR_ID_KSTRANSPLANETA_LTD = 34458\nVENDOR_ID_NETWORK_BOX_CORPORATION_LTD = 34459\nVENDOR_ID_XPLORE_IT_SERVICES = 34460\nVENDOR_ID_ITHAXIS = 34461\nVENDOR_ID_INIT_AG = 34462\nVENDOR_ID_COREY_FARRELL = 34463\nVENDOR_ID_PRAGMA_SECURITIES = 34464\nVENDOR_ID_CYPACE_INC = 34465\nVENDOR_ID_POLYFORMAL_SYSTEM_FORMARBEIT = 34466\nVENDOR_ID_REPOTEC_CO_LTD = 34467\nVENDOR_ID_OPEN_SOURCE_SOLUTION_TECHNOLOGY_CORPORATION = 34468\nVENDOR_ID_LOGIT_CORPORATION = 34469\nVENDOR_ID_INSTITUTE_OF_CYBERNETICS_AT_TALLINN_UNIVERSITY_OF_TECHNOLOGY = 34470\nVENDOR_ID_TRUST_ID_BV = 34471\nVENDOR_ID_HOGESCHOOL_VAN_AMSTERDAM = 34472\nVENDOR_ID_DOKOM_GESELLSCHAFT_FR_TELEKOMMUNIKATION_MBH = 34473\nVENDOR_ID_ALT_LAN = 34474\nVENDOR_ID_POLYTRONICS_ENGINEERING_LTD = 34475\nVENDOR_ID_BIA_NET_GMBH = 34476\nVENDOR_ID_K_V_SPOL_S_RO = 34477\nVENDOR_ID_CMS_HASCHE_SIGLE = 34478\nVENDOR_ID_DWEB_SOLUES_PARA_INTERNET = 34479\nVENDOR_ID_IMODULES = 34480\nVENDOR_ID_WORLD_FUEL_SERVICES = 34481\nVENDOR_ID_LAMBDAZERO_IT = 34482\nVENDOR_ID_HIMALAYA_NETWORKS = 34483\nVENDOR_ID_TOOLIO_SYSTEMS = 34484\nVENDOR_ID_R2METON_AB = 34485\nVENDOR_ID_HANNODK = 34486\nVENDOR_ID_KEMI_SHIPPING_OY = 34487\nVENDOR_ID_KRYPTIQ_CORPORATION = 34488\nVENDOR_ID_NIKON_AG = 34489\nVENDOR_ID_TELIWAVE_PTE_LTD = 34490\nVENDOR_ID_ALMAZ_ANTEY_TELECOM = 34491\nVENDOR_ID_ARYAKA_NETWORKS = 34492\nVENDOR_ID_CPSG = 34493\nVENDOR_ID_HSQ_TECHNOLOGY = 34494\nVENDOR_ID_STREETCAR_LTD = 34495\nVENDOR_ID_CISION_US_INC = 34496\nVENDOR_ID_LINSEC_CONSULTING = 34497\nVENDOR_ID_IRBIS_T = 34498\nVENDOR_ID_MARTIN_MERKEL = 34499\nVENDOR_ID_LAOLA1_MULTIMEDIA_GMBH = 34500\nVENDOR_ID_S_C_NULL_TEAM_IMPEX_SRL = 34501\nVENDOR_ID_MILLIKIN_UNIVERSITY = 34502\nVENDOR_ID_WMI_COMPUTER = 34503\nVENDOR_ID_GUANGZHOU_COMBLE_INFORMATION_TECHNOLOGY_COLTD = 34504\nVENDOR_ID_SIEGNETZ_IT_GMBH = 34505\nVENDOR_ID_TWINFALLS_TECHNOLOGIES = 34506\nVENDOR_ID_SAFE_CONSULTING_AS = 34507\nVENDOR_ID_WYATT_TARRANT_COMBS_LLP = 34508\nVENDOR_ID_PORTLAND_STATE_UNIVERSITY = 34509\nVENDOR_ID_OPTIMUM_PATH_SYSTEMS_INC = 34510\nVENDOR_ID_TRINITY_COUNTY_OFFICE_OF_EDUCATION = 34511\nVENDOR_ID_GRAPHISCHE_INFORMATIONSTECHNIK_BERATUNGSGESELLSCHAFT_MBH_GRIT = 34512\nVENDOR_ID_RMT_INC = 34513\nVENDOR_ID_AUSTRALIAN_COLLEGE_OF_REMOTE_AND_RURAL_MEDICINE = 34514\nVENDOR_ID_WHITEMICE_CONSULTING = 34515\nVENDOR_ID_NETWORK_APPLIED_COMMUNICATION_LABORATORY = 34516\nVENDOR_ID_EASTCOM_SYSTEMS_PTE_LTD = 34517\nVENDOR_ID_MOVIANTO_GMBH = 34518\nVENDOR_ID_UK_BORDER_AGENCY = 34519\nVENDOR_ID_MUDRA_COMMUNICATIONS_PVT_LTD = 34520\nVENDOR_ID_COMLINK_TELECOMMUNICATION_SERVICES_INC = 34521\nVENDOR_ID_PINNACLE_WIRELESS = 34522\nVENDOR_ID_BLUEKRYPT = 34523\nVENDOR_ID_RIS2048_LDA = 34524\nVENDOR_ID_YESINNET = 34525\nVENDOR_ID_TECHSOLOGIC = 34526\nVENDOR_ID_MATRIX_TELECOM_PVT_LTD = 34527\nVENDOR_ID_SECUREWARE = 34528\nVENDOR_ID_IUNIPERUS_SRL = 34529\nVENDOR_ID_NETPIONEER_GMBH = 34530\nVENDOR_ID_LANDOFNEVERNET = 34531\nVENDOR_ID_MKBDOOS = 34532\nVENDOR_ID_COMPUVISOR_LAB = 34533\nVENDOR_ID_TRIMBLE_MRM = 34534\nVENDOR_ID_JETTEK_LLC = 34535\nVENDOR_ID_FDXTENDED = 34536\nVENDOR_ID_THE_MOSES_H_CONE_MEMORIAL_HOSPITAL = 34537\nVENDOR_ID_SA_DIETEREN_NV = 34538\nVENDOR_ID_NETCOM_XXI_INFORMATICA_Y_COMUNICACIONES_SL = 34539\nVENDOR_ID_AZETI_NETWORKS_GMBH = 34540\nVENDOR_ID_BEMATECH_SA = 34541\nVENDOR_ID_KINDWIND_TECHNOLOGICAL_LTD = 34542\nVENDOR_ID_SUSQUEHANNA_INTERNATIONAL_GROUP = 34543\nVENDOR_ID_CERTANT = 34544\nVENDOR_ID_CISTERA_NETWORKS = 34545\nVENDOR_ID_REDZINC_LTD = 34546\nVENDOR_ID_TALARIS = 34547\nVENDOR_ID_BADISCHER_LANDWIRTSCHAFTLICHER_HAUPTVERBAND_EV = 34548\nVENDOR_ID_UNIVERSITY_OF_SASKATCHEWAN = 34549\nVENDOR_ID_AUSTIN_HUGHES_ELECTRONICS_LTD = 34550\nVENDOR_ID_ZETTACON_SYSTEMS_INC = 34551\nVENDOR_ID_IP_SQUARE_SOFTWAREERZEUGER_GMBH = 34552\nVENDOR_ID_SPRYWARE = 34553\nVENDOR_ID_GRANDPOWER = 34554\nVENDOR_ID_EURASIAN_ENERGY_CORPORATION_JSC = 34555\nVENDOR_ID_EDAN_INSTRUMENTS_CO_LTD = 34556\nVENDOR_ID_MINISTERIO_DE_JUSTICIA = 34557\nVENDOR_ID_UNASSIGNED_42 = 34558\nVENDOR_ID_MASCHINENFABRIK_REINHAUSEN_GMBH = 34559\nVENDOR_ID_MARQUISE_TECHNOLOGIES = 34560\nVENDOR_ID_VITALATIV_SRO = 34561\nVENDOR_ID_FUHST_MEHRENS = 34562\nVENDOR_ID_CALAME = 34563\nVENDOR_ID_HOSEO_TELECOM_CO_LTD = 34564\nVENDOR_ID_KVARTA_LTD = 34565\nVENDOR_ID_TRADAR_LIMITED = 34566\nVENDOR_ID_MICRONETICS_INC = 34567\nVENDOR_ID_SYNECTICS = 34568\nVENDOR_ID_KB_UNIASTRUMBANK = 34569\nVENDOR_ID_NETDEEP_TECNOLOGIA = 34570\nVENDOR_ID_SIGNION_SYSTEMS = 34571\nVENDOR_ID_NARI_RELAYS_ELECTRIC_CO_LTD = 34572\nVENDOR_ID_FINAF_SPA = 34573\nVENDOR_ID_BLACKBIT_STUDIO = 34574\nVENDOR_ID_KENT_IMAGING_INC = 34575\nVENDOR_ID_HS_EMDEN_LEER = 34576\nVENDOR_ID_CORRELATION_SYSTEMS_LTD = 34577\nVENDOR_ID_OPENNMS_SANS_EFFORT_OSE = 34578\nVENDOR_ID_SYM_TECHNOLOGY_INC = 34579\nVENDOR_ID_NEED_SOLUTIONS = 34580\nVENDOR_ID_J3TEL = 34581\nVENDOR_ID_TUENTI_TECHNOLOGIES = 34582\nVENDOR_ID_V_PRIVATE_AG = 34583\nVENDOR_ID_UNTERBERG_ELECTRONIC_GMBH = 34584\nVENDOR_ID_REWE_INFORMATIONS_SYSTEME_GMBH = 34585\nVENDOR_ID_ONTARIO_TEACHERS_PENSION_PLAN_BOARD = 34586\nVENDOR_ID_HIIVE_SYSTEMS = 34587\nVENDOR_ID_BEIJING_OFFICE_OF_INTERNATIONAL_AIR_TRANSPORT_ASSOCIATION = 34588\nVENDOR_ID_ADNOVATE = 34589\nVENDOR_ID_NOVUS_PRODUTOS_ELETRONICOS_LTDA = 34590\nVENDOR_ID_JSC_PRORYV_KOMPLEKT = 34591\nVENDOR_ID_SHENZHEN_C_DATA_TECHNOLOGY_COLTD = 34592\nVENDOR_ID_ZHILABS = 34593\nVENDOR_ID_GROWING_OPPORTUNITY_FINANCE_INDIA_PRIVATE_LIMITED = 34594\nVENDOR_ID_XTEAM_NETWORKBEIJING_COLTD = 34595\nVENDOR_ID_CASALOGIC_A_S = 34596\nVENDOR_ID_CADT_SOFTWARE_AND_DRAFTING_SL = 34597\nVENDOR_ID_CABLE_SENSE_LTD = 34598\nVENDOR_ID_3SI_SECURITY_SYSTEMS_NV = 34599\nVENDOR_ID_TECSEM_TECNOLOGIA_EM_SISTEMAS_EMBARCADOS = 34600\nVENDOR_ID_MONGODB = 34601\nVENDOR_ID_BOMGAR_CORPORATION = 34602\nVENDOR_ID_SERIA_AS = 34603\nVENDOR_ID_FIBERNETICS_CORP = 34604\nVENDOR_ID_SL_CORPORATION = 34605\nVENDOR_ID_WAYNE_RESA = 34606\nVENDOR_ID_NEWDAYSOFT_CO_LTD = 34607\nVENDOR_ID_AMERICAN_SOCIETY_FOR_MICROBIOLOGY = 34608\nVENDOR_ID_VINE_TELECOM_CO_LTD = 34609\nVENDOR_ID_GRAND_FUTURE_BEIJING_INFO_TECH_CO_LTD = 34610\nVENDOR_ID_BERUFSFRDERUNGSWERK_OBERHAUSEN = 34611\nVENDOR_ID_ALTERIS_SP_Z_OO = 34612\nVENDOR_ID_IKRON_LTD = 34613\nVENDOR_ID_TECHNOCATS_GMBH = 34614\nVENDOR_ID_MAGYAR_LLAMKINCSTR_HUNGARIAN_STATE_TREASURY = 34615\nVENDOR_ID_ACTUALWEB_SOLUCIONES_INFORMATICAS = 34616\nVENDOR_ID_RCDEVS = 34617\nVENDOR_ID_GRUPPO_TNT_SRL = 34618\nVENDOR_ID_3DICOM_SL = 34619\nVENDOR_ID_ASUERUS_VAN_TUIJL = 34620\nVENDOR_ID_IMACAB = 34621\nVENDOR_ID_HEIMORE_GROUP_AB = 34622\nVENDOR_ID_USF1 = 34623\nVENDOR_ID_TOKAVUH_TECHNOLOGIES_OY = 34624\nVENDOR_ID_ACTAVIS_GROUP_HF = 34625\nVENDOR_ID_A_REAL_CONSULTING_LLC = 34626\nVENDOR_ID_DIGIFIX_LTDA = 34627\nVENDOR_ID_CITRUS_NETWORKS = 34628\nVENDOR_ID_MP_ADVANCED_MULTIMEDIA = 34629\nVENDOR_ID_TIGRON_BVBA = 34630\nVENDOR_ID_JANELIA_FARM_RESEARCH_CAMPUS_HHMI = 34631\nVENDOR_ID_COHORT_TECHNOLOGY_LTD = 34632\nVENDOR_ID_NORGIENET = 34633\nVENDOR_ID_GRADUATE_SCHOOL_OF_EDUCATION_AND_INFORMATION_STUDIES = 34634\nVENDOR_ID_PI_SYSTEMPROGRAMMIERUNGS_GMBH = 34635\nVENDOR_ID_CONTACT_CENTER_COMPLIANCE_CORPORATION = 34636\nVENDOR_ID_REVENUE_SOLUTIONS_INC = 34637\nVENDOR_ID_MEMPHIS_NETWORK_SERVICE_LTD = 34638\nVENDOR_ID_CONFORMITY_INC = 34639\nVENDOR_ID_NODNET = 34640\nVENDOR_ID_DIMAC_HOSTING_AB = 34641\nVENDOR_ID_RUGGED_INFORMATION_TECHNOLOGY_EQUIPMENT_CORPORATION = 34642\nVENDOR_ID_GARMIN_INTERNATIONAL = 34643\nVENDOR_ID_POTOMAC_BLUEBONNET_TECHNOLGY_LLC = 34644\nVENDOR_ID_ADAEL_WIRELESS_SARL = 34645\nVENDOR_ID_HELLERMANNTYTON_DATA_LTD = 34646\nVENDOR_ID_KAMOME_ENGINEERING_INC = 34647\nVENDOR_ID_THE_BOX_DEVELOPMENT = 34648\nVENDOR_ID_NETVISIONTEL = 34649\nVENDOR_ID_P2CACHE_PTE_LTD = 34650\nVENDOR_ID_AGAMA_COLTD = 34651\nVENDOR_ID_IPF_TECHNOLOGY_LTD = 34652\nVENDOR_ID_IRISYS = 34653\nVENDOR_ID_LA_GENTZ_KG = 34654\nVENDOR_ID_BERTHOLD_BOESER_INGENIEURBUERO = 34655\nVENDOR_ID_ATS_APPLICAZIONE_TECNOLOGIE_SPECIALI = 34656\nVENDOR_ID_SEIFERT_MTM_SYSTEMS_MALTA_LTD = 34657\nVENDOR_ID_SYSADMINS_LV = 34658\nVENDOR_ID_EPLAN_SOFTWARE_SERVICE_GMBH_CO_KG = 34659\nVENDOR_ID_SIA_DATU_SISTEMAS = 34660\nVENDOR_ID_ISLANDSBANKI = 34661\nVENDOR_ID_AJUNTAMENT_DE_SANT_ADRIA_DE_BESOS = 34662\nVENDOR_ID_LAVINIA_INTERACTIVA = 34663\nVENDOR_ID_TRIDENT_MICRO_SYSTEMS = 34664\nVENDOR_ID_ENTEL_SA_BOLIVIA = 34665\nVENDOR_ID_LAVA_BUSINESS_SOLUTIONS = 34666\nVENDOR_ID_DSP_LABS_SRL = 34667\nVENDOR_ID_KOINE_SERVIZI_SRL = 34668\nVENDOR_ID_ENCARNATE_LLC = 34669\nVENDOR_ID_SCOTT_SHEN = 34670\nVENDOR_ID_ANOOP_ARYAL = 34671\nVENDOR_ID_MICROAQUA_NETWORK_SYSTEM = 34672\nVENDOR_ID_THE_FREEDHCP_PROJECT = 34673\nVENDOR_ID_FLIR_SYSTEMS_INC = 34674\nVENDOR_ID_BLACKCASEPL = 34675\nVENDOR_ID_VOX_TELECOM = 34676\nVENDOR_ID_INFORMATIONPARTNERS_GMBH_CO_KG = 34677\nVENDOR_ID_ANTICEPT = 34678\nVENDOR_ID_FORCONT_BUSINESS_TECHNOLOGY_GMBH = 34679\nVENDOR_ID_RUAG_HOLDING_AG = 34680\nVENDOR_ID_DATAGROUP_IT_SERVICES_HOLDING_AG = 34681\nVENDOR_ID_ATP_MANAGEMENT_TECHNOLOGY_SRL = 34682\nVENDOR_ID_SEACLIFF_ASSOCIATES_LLC = 34683\nVENDOR_ID_ROSADO_BEHEER_BV = 34684\nVENDOR_ID_ACCIPITER_SYSTEMS_INC = 34685\nVENDOR_ID_SUNET_TECHNOLOGY_LLC = 34686\nVENDOR_ID_GALE = 34687\nVENDOR_ID_KING_ABDULLAH_UNIVERSITY_OF_SCIENCE_AND_TECHNOLOGY = 34688\nVENDOR_ID_TEKRON_INTERNATIONAL_LTD = 34689\nVENDOR_ID_NATIONAL_GYPSUM_COMPANY = 34690\nVENDOR_ID_EON_COLTD = 34691\nVENDOR_ID_DICOM_GRID_INC = 34692\nVENDOR_ID_NETSOFT_LUND_DEVELOPMENT_AB = 34693\nVENDOR_ID_ELEVEN_GMBH = 34694\nVENDOR_ID_EXTENSION_INC = 34695\nVENDOR_ID_RIOD_TECHNOLOGIES = 34696\nVENDOR_ID_AFIRMTRUST_LLC = 34697\nVENDOR_ID_STUDIO_CACCIA = 34698\nVENDOR_ID_FRANCE_DVELOPPEMENT_CONSEIL = 34699\nVENDOR_ID_BEIJING_HONGDEXIN_INFORMATION_TECHNOLOGY_CO_LTD = 34700\nVENDOR_ID_BTCENTRAL = 34701\nVENDOR_ID_PARITY_ENERGY_INC = 34702\nVENDOR_ID_STEFAN_SIEBER = 34703\nVENDOR_ID_H_LUNDBECK_A_S = 34704\nVENDOR_ID_ZAO_GU_NPO_STROYTECHAUTOMATIKA = 34705\nVENDOR_ID_APRIUS_INC = 34706\nVENDOR_ID_CENTRO_FEDERAL_DE_EDUCAO_TECNOLGICA_DE_MINAS_GERAIS = 34707\nVENDOR_ID_ETRAFFICERS_INC = 34708\nVENDOR_ID_LIGHTNER_ENGINEERING = 34709\nVENDOR_ID_ADVANCE_COMMUNICATION_TECHNOLOGIES = 34710\nVENDOR_ID_JAMAICA_BROILERS_GROUP = 34711\nVENDOR_ID_FUJIAN_NEWLAND_AUTO_ID_TECH_CO_LTD = 34712\nVENDOR_ID_LC4EVERNET = 34713\nVENDOR_ID_OCULUS_OPTIKGERTE_GMBH = 34714\nVENDOR_ID_ITVT_GMBH = 34715\nVENDOR_ID_VIZIMAX_INC = 34716\nVENDOR_ID_BHOLD = 34717\nVENDOR_ID_FUENSO = 34718\nVENDOR_ID_CRONON_AG = 34719\nVENDOR_ID_MFOUNDRY = 34720\nVENDOR_ID_MAGYAR_WALDORF_SZVETSG_HUNGARIAN_WALDORF_FELLOWSHIP = 34721\nVENDOR_ID_FASTSOFT_INC = 34722\nVENDOR_ID_CONXX = 34723\nVENDOR_ID_NETINSIGHT_ITLABS = 34724\nVENDOR_ID_VASC_ALERT = 34725\nVENDOR_ID_WORKS_SYSTEMS = 34726\nVENDOR_ID_BURDA_DIGITAL_SYSTEMS_GMBH = 34727\nVENDOR_ID_INSA_DE_LYON = 34728\nVENDOR_ID_OOO_PS_YANDEXDENGI = 34729\nVENDOR_ID_FRANCILIENNE_DINGENIERIE_ET_DE_SERVICES_INFORMATIQUES_SAS = 34730\nVENDOR_ID_SLOAN_VALVE_COMPANY = 34731\nVENDOR_ID_SPB_SOFTWARE_INC = 34732\nVENDOR_ID_ZINNIA_SYSTEMS = 34733\nVENDOR_ID_UNIVERSITY_OF_MACERATA = 34734\nVENDOR_ID_CELLFISH = 34735\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_VALE_DO_ACARA_UVA = 34736\nVENDOR_ID_CIMNE = 34737\nVENDOR_ID_MASSIVESOLUTIONS_LTD = 34738\nVENDOR_ID_LIHNIDOSORG = 34739\nVENDOR_ID_UNIVERSITY_OF_OTTAWA = 34740\nVENDOR_ID_BINET_RSEAU = 34741\nVENDOR_ID_LEVELMOBILE_INC = 34742\nVENDOR_ID_TELEPERFORMANCE = 34743\nVENDOR_ID_QC_TECHNOLOGY_BV = 34744\nVENDOR_ID_METADYS = 34745\nVENDOR_ID_KEVINSNET_LIMITED = 34746\nVENDOR_ID_INFINETA_SYSTEMS_INC = 34747\nVENDOR_ID_TWITTER_INC = 34748\nVENDOR_ID_SUBSCRIBERMAIL_LLC = 34749\nVENDOR_ID_TRUENORTHLOGIC = 34750\nVENDOR_ID_SHANGHAI_MERIDIAN_TECHNOLOGIES_CO_LTD = 34751\nVENDOR_ID_ITDIVCOM = 34752\nVENDOR_ID_ONTIME_NETWORKS_AS = 34753\nVENDOR_ID_POWERTRUNK_INC = 34754\nVENDOR_ID_RES_INGENIUM_SRL = 34755\nVENDOR_ID_INOA = 34756\nVENDOR_ID_GORILLA_CONCEPT_GMBH = 34757\nVENDOR_ID_UNIVERZA_V_LJUBLJANI = 34758\nVENDOR_ID_THAMES_VALLEY_POLICE = 34759\nVENDOR_ID_AMIT_SRO = 34760\nVENDOR_ID_SSC_IT = 34761\nVENDOR_ID_DARTIT = 34762\nVENDOR_ID_PEOPLE_POWER_COMPANY = 34763\nVENDOR_ID_PROSTRUCTURE_CONSULTING = 34764\nVENDOR_ID_FORVNS_GROUP = 34765\nVENDOR_ID_INVITIES = 34766\nVENDOR_ID_ISPIN_AG = 34767\nVENDOR_ID_SP_LION_AG = 34768\nVENDOR_ID_ACORDE_TECHNOLOGIES = 34769\nVENDOR_ID_CARDIFF_UNIVERSITY = 34770\nVENDOR_ID_ALTMANN_SOFTWARE = 34771\nVENDOR_ID_AUTOMAT_LIMITED = 34772\nVENDOR_ID_HX_ENGINEERING_LLC = 34773\nVENDOR_ID_HUAWEI_SYMANTEC_TECHNOLOGIES_COLTD = 34774\nVENDOR_ID_CANFORD_SOFTWARE_CONSULTANCY_LIMITED = 34775\nVENDOR_ID_TODO_BPO_E_SOLUCOES_EM_TECNOLOGIA_SA = 34776\nVENDOR_ID_CAPEK_CONSULTING = 34777\nVENDOR_ID_AMERICAN_CUSTOMER_CARE_INC = 34778\nVENDOR_ID_DELTAGLOBAL_CO_LTD = 34779\nVENDOR_ID_IT_ONE = 34780\nVENDOR_ID_UNASSIGNED_43 = 34781\nVENDOR_ID_DCM4CHEORG = 34782\nVENDOR_ID_GORDIAN_KNOT_LIMITED = 34783\nVENDOR_ID_HURTIG_DATACOMM = 34784\nVENDOR_ID_UNIVERSITY_OF_CRAIOVA = 34785\nVENDOR_ID_HARTWICK_SERVICES = 34786\nVENDOR_ID_SUNFLOWER_BROADBAND = 34787\nVENDOR_ID_MINISTERIO_DE_HACIENDA_DE_EL_SALVADOR = 34788\nVENDOR_ID_NORTHGATE_INFORMATION_SOLUTIONS_PLC = 34789\nVENDOR_ID_VTKOM_DOO = 34790\nVENDOR_ID_CENTRE_HOSPITALIER_DE_PRONNE = 34791\nVENDOR_ID_GOUVERNEMENT_DE_NOUVELLE_CALEDONIE = 34792\nVENDOR_ID_AZBLINK = 34793\nVENDOR_ID_JSC_COMMERCIAL_BANK_CENTER_INVEST = 34794\nVENDOR_ID_DATA_PKS_LTD = 34795\nVENDOR_ID_MBS_GMBH = 34796\nVENDOR_ID_AM_GMBH = 34797\nVENDOR_ID_TRIBUNAL_REGIONAL_ELEITORAL_DO_MARANHO = 34798\nVENDOR_ID_ACTI_CORPORATION = 34799\nVENDOR_ID_POLIZEI_BADEN_WRTTEMBERG = 34800\nVENDOR_ID_SUBLAB_EV = 34801\nVENDOR_ID_HOMENET = 34802\nVENDOR_ID_GUBKIN_RUSSIAN_STATE_UNIVERSITY = 34803\nVENDOR_ID_WIDEBAND_SEMICONDUCTOR_INC = 34804\nVENDOR_ID_ZIVILLIAN_SOFTWARE = 34805\nVENDOR_ID_OPTICAL_SYSTEMS_DESIGN_PTY_LTD = 34806\nVENDOR_ID_Q_TECH_INFORMATION_COLTD = 34807\nVENDOR_ID_JIANGSU_BROADCASTING_TELEVISION_NETWORK_CORPORATION_LIMITED = 34808\nVENDOR_ID_PARSONS_BRINCKERHOFF = 34809\nVENDOR_ID_INTERMOUNTAIN_HEALTHCARE = 34810\nVENDOR_ID_STOLLMANN_EV_GMBH = 34811\nVENDOR_ID_MIRIFICE_LTD = 34812\nVENDOR_ID_MULTILINK = 34813\nVENDOR_ID_ZPEND_PTY_LTD = 34814\nVENDOR_ID_ANGRY_DOG_BUSINESS_SYTEMS = 34815\nVENDOR_ID_ICON_POWER_SOLUTIONS_PVT_LTD = 34816\nVENDOR_ID_TAMTRON_OY = 34817\nVENDOR_ID_CPI_CORPORATION = 34818\nVENDOR_ID_NACKA_KOMMUN = 34819\nVENDOR_ID_SATCOM_TECHNOLOGIES_EMC = 34820\nVENDOR_ID_LAFAYETTE_CONSOLIDATED_GOVERNMENT = 34821\nVENDOR_ID_CALET_INC = 34822\nVENDOR_ID_VERSAFORM_SYSTEMS_CORP = 34823\nVENDOR_ID_TEXAS_AM_UNIVERSITY_SYSTEM = 34824\nVENDOR_ID_PARETO_NETWORKS_INC = 34825\nVENDOR_ID_TAYANA_SOFTWARE_SOLUTIONS_PVT_LTD = 34826\nVENDOR_ID_RT_RK = 34827\nVENDOR_ID_PANNON_GSM_TVKZLSI_ZRT = 34828\nVENDOR_ID_GRAPHLOGIC_INC = 34829\nVENDOR_ID_FORERS_S_R_O = 34830\nVENDOR_ID_THE_FREECYCLE_NETWORK = 34831\nVENDOR_ID_INTELIBS_INC = 34832\nVENDOR_ID_DRIVENDOWNCOM = 34833\nVENDOR_ID_BERMUDATRIANGLECOM = 34834\nVENDOR_ID_HYPERCABLE = 34835\nVENDOR_ID_DENKOSHA_COLTD = 34836\nVENDOR_ID_ARRIVE_TECHNOLOGIES = 34837\nVENDOR_ID_INNOVATIVE_SCADA_SOLUTIONS_PTY_LTD = 34838\nVENDOR_ID_ABAKUS_IT_AG = 34839\nVENDOR_ID_SHANGHAI_HUAHENG_TELECOM_EQUIPMENT_COLTD = 34840\nVENDOR_ID_GORDON_FOOD_SERVICE_INC = 34841\nVENDOR_ID_TERASAKI_ELECTRIC_COLTD = 34842\nVENDOR_ID_NASCENT_TECHNOLOGY_LLC = 34843\nVENDOR_ID_GENNET_SA = 34844\nVENDOR_ID_FACULT_DES_SCIENCES_ET_TECHNIQUES_DE_TANGER = 34845\nVENDOR_ID_SERTRES_DEL_NORTE = 34846\nVENDOR_ID_SPACETIME_STUDIOS_LLC = 34847\nVENDOR_ID_SHIBASOKU = 34848\nVENDOR_ID_SECURITY_CODE_LTD = 34849\nVENDOR_ID_ELDOS_CORPORATION = 34850\nVENDOR_ID_ADALIA_OY = 34851\nVENDOR_ID_ROEFTEN = 34852\nVENDOR_ID_RAINSTOR = 34853\nVENDOR_ID_INDENI = 34854\nVENDOR_ID_VOTIRO_LTD_FORMERLY_MOBILETICK_LTD = 34855\nVENDOR_ID_ALTAVIA_SA = 34856\nVENDOR_ID_BAIY_STUDIO = 34857\nVENDOR_ID_WIRELESS_NETWORKS_ASSOCIATION_WNAGR = 34858\nVENDOR_ID_JGFSNET = 34859\nVENDOR_ID_FINALIST_IT_GROUP = 34860\nVENDOR_ID_RAJANT_CORPORATION = 34861\nVENDOR_ID_FUNDAMO = 34862\nVENDOR_ID_LEOPOLD_KOSTAL_GMBH_CO_KG = 34863\nVENDOR_ID_MITO_EUROPE_LTD = 34864\nVENDOR_ID_WORLD_EVOLVED_SERVICES_LLC = 34865\nVENDOR_ID_SUFFOLK_COUNTY_COUNCIL_FORMERLY_CUSTOMER_SERVICE_DIRECT = 34866\nVENDOR_ID_UNIVERSITAET_GREIFSWALD = 34867\nVENDOR_ID_WINNERSTEK_INC = 34868\nVENDOR_ID_IAN_HINE_CONSULTING = 34869\nVENDOR_ID_MEGABYTE_DOCTOR_PTY_LTD = 34870\nVENDOR_ID_TROVICOR_GMBH = 34871\nVENDOR_ID_ETM_COMMUNICATIONS_AB = 34872\nVENDOR_ID_KLEIN_PARTNER_KG = 34873\nVENDOR_ID_AUTOMASJON_OG_DATA_AS = 34874\nVENDOR_ID_ALPIKOM_SPA = 34875\nVENDOR_ID_INFORMATICS_CORPORATION_OF_AMERICA = 34876\nVENDOR_ID_MASERGY_COMMUNICATIONS_INC = 34877\nVENDOR_ID_ADVANSTAR_COMMUNICATIONS_INC = 34878\nVENDOR_ID_BLUECROSS_BLUESHIELD_OF_MINNESOTA = 34879\nVENDOR_ID_CORTINA_SYSTEMS = 34880\nVENDOR_ID_EVT_TECHNOLOGIES_LTD = 34881\nVENDOR_ID_KOLEKTOR_GROUP = 34882\nVENDOR_ID_HOUSE_ARKKO = 34883\nVENDOR_ID_DAVID_WOZNY_LIMITED = 34884\nVENDOR_ID_SSI_US_INC = 34885\nVENDOR_ID_COMPAGNIE_DES_ALPES = 34886\nVENDOR_ID_IARISS = 34887\nVENDOR_ID_GATIX = 34888\nVENDOR_ID_MCKNIGHT_INSIGHT = 34889\nVENDOR_ID_AIZKRAUKLES_BANKA_A_S = 34890\nVENDOR_ID_CROATIA_CONTROL_LTD = 34891\nVENDOR_ID_KEDROS_AS = 34892\nVENDOR_ID_LEEDS_CITY_COUNCIL = 34893\nVENDOR_ID_GLOBAL_STRATEGIES_GROUP_MISSION_SYSTEMS = 34894\nVENDOR_ID_ITAM_SERVICES = 34895\nVENDOR_ID_GORILLA_LOGIC_INC = 34896\nVENDOR_ID_CENTRO_BRASILEIRO_DE_PESQUISAS_FISICAS = 34897\nVENDOR_ID_CESEC_SFF = 34898\nVENDOR_ID_H5_AUDITS = 34899\nVENDOR_ID_INFORMATIONS_TECHNOLOGIE_SERVICE_UND_CONSULTING_GMBH = 34900\nVENDOR_ID_FORTUNAGLOBAL_PVT_LIMITED = 34901\nVENDOR_ID_IT_INDUSTRY_LTD = 34902\nVENDOR_ID_M247_LTD = 34903\nVENDOR_ID_KRC_OOO = 34904\nVENDOR_ID_G_LAB = 34905\nVENDOR_ID_RADIANTGRID_TECHNOLOGIES_LLC = 34906\nVENDOR_ID_TELEVIC_NV = 34907\nVENDOR_ID_CARECLOUD_CORP = 34908\nVENDOR_ID_RHD_RESEARCH_LTD = 34909\nVENDOR_ID_GEEKNET_INC = 34910\nVENDOR_ID_NANJING_JIAJIAN_NETWORK_CO_LTD = 34911\nVENDOR_ID_PT_NYRA = 34912\nVENDOR_ID_TDM_INGNIERIE = 34913\nVENDOR_ID_CREATIVE_CONSULTING_GMBH = 34914\nVENDOR_ID_FREE_SOFTWARE_FOUNDATION_EUROPE_EV = 34915\nVENDOR_ID_WALKI_GROUP_OY = 34916\nVENDOR_ID_CAR_CHASE_WORKSHOP_INC = 34917\nVENDOR_ID_SYNCAPSE_CORP = 34918\nVENDOR_ID_SKY_WISDOM_TECHNOLOGY_LIMITED = 34919\nVENDOR_ID_ALLEN_LUND_COMPANY = 34920\nVENDOR_ID_EVOSTOR_INC = 34921\nVENDOR_ID_EPIC_ADVERTISING_INC = 34922\nVENDOR_ID_KOOLING = 34923\nVENDOR_ID_AUGUSTINE_CONSULTING = 34924\nVENDOR_ID_NANTES_SYSTEMS_PRIVATE_LIMITED = 34925\nVENDOR_ID_LIMITED_LIABILITY_COMPANY_WILD_ORCHID = 34926\nVENDOR_ID_DL_SANT = 34927\nVENDOR_ID_ACVITAS = 34928\nVENDOR_ID_SURGIDEX = 34929\nVENDOR_ID_CANERIS_INC = 34930\nVENDOR_ID_SHANGHAI_DYNAMICODE_COMPANY_LIMITED = 34931\nVENDOR_ID_CMS_AFFILIATE = 34932\nVENDOR_ID_CPO_PARTNERS = 34933\nVENDOR_ID_CIRCLEPRINTERS = 34934\nVENDOR_ID_MARMIRA = 34935\nVENDOR_ID_CREOWAVE_OY = 34936\nVENDOR_ID_UNIVERSITAETSSPITAL_ZURICH = 34937\nVENDOR_ID_FDRATION_FRANAISE_DQUITATION = 34938\nVENDOR_ID_SURMEI_MIHAI_EUGEN = 34939\nVENDOR_ID_ROMAN_V_KISELIOV = 34940\nVENDOR_ID_DIEGOLIMAORG = 34941\nVENDOR_ID_CAMBRIUM_BV = 34942\nVENDOR_ID_SUMISHO_COMPUTER_SYSTEMS_CORPORATION = 34943\nVENDOR_ID_AMPLUS_COMMUNICATION_PTE_LTD = 34944\nVENDOR_ID_ALBERT_ZIEGLER_GMBH_CO_KG = 34945\nVENDOR_ID_INDEPENDENT_PROJECT_ENGINEERING_LTD = 34946\nVENDOR_ID_CHILL_N_GO_INC = 34947\nVENDOR_ID_NORMHOST = 34948\nVENDOR_ID_ELECTRONICS_SOURCE_COLTD = 34949\nVENDOR_ID_HERRMANN_LENZ_SOLUTIONS_GMBH = 34950\nVENDOR_ID_KOMERCIJALNA_BANKA_AD_SKOPJE = 34951\nVENDOR_ID_NXTCONTROL_GMBH = 34952\nVENDOR_ID_CONCENTRIC_CIRCLE_CONSULTING = 34953\nVENDOR_ID_NOVTIS_DO_BRASIL_S_A = 34954\nVENDOR_ID_ROLAND_GRUBER_SOFTWAREENTWICKLUNG = 34955\nVENDOR_ID_SHANGHAI_TRANSFORM_IT_CO_LTD = 34956\nVENDOR_ID_TTC_NEXT_GENERATION_HOME_NETWORK_SYSTEM_WG = 34957\nVENDOR_ID_LOGILIN = 34958\nVENDOR_ID_INGENIEURBUERO_BERGHOFER_KG = 34959\nVENDOR_ID_SUPERHOSTPL_SC = 34960\nVENDOR_ID_HS_HOCHFREQUENZTECHNIK_GMBH = 34961\nVENDOR_ID_FALCO_NETWORKS_BV = 34962\nVENDOR_ID_IDLE_PATTERN_COMMUNICATIONS_LLC = 34963\nVENDOR_ID_CARBONES_DEL_CERREJON_LTD = 34964\nVENDOR_ID_RICARDO_I_VIEITEZ_PARRA = 34965\nVENDOR_ID_GLOBAL_RAIL_SYSTEMS_INC = 34966\nVENDOR_ID_SICHUAN_HONGGUAN_COMMUNICATION_TECHNOLOGY_CO_LTD = 34967\nVENDOR_ID_AIRIMBA_WIRELESS_INC = 34968\nVENDOR_ID_REGNIAINC = 34969\nVENDOR_ID_INSTITUT_TEKNOLOGI_NASIONAL_ITENAS = 34970\nVENDOR_ID_ETHEREAL_INFORMATION_TECHNOLOGY_LTD = 34971\nVENDOR_ID_ERIC_HUSS = 34972\nVENDOR_ID_MIANYANG_NETOP_TELECOM_EQUIPMENT_LTDCO = 34973\nVENDOR_ID_ALENTOGROUPORG = 34974\nVENDOR_ID_IPROAD_INC = 34975\nVENDOR_ID_MATHEW_SYSTEMS_INC = 34976\nVENDOR_ID_NODE_NINE_INC = 34977\nVENDOR_ID_LAYSIS_CONSULTING_INC = 34978\nVENDOR_ID_SCIENTIS_SOLUTIONS_LTD = 34979\nVENDOR_ID_LINEXUS = 34980\nVENDOR_ID_CRAMIF = 34981\nVENDOR_ID_EXASTACK_LIMITED = 34982\nVENDOR_ID_013NETVISION = 34983\nVENDOR_ID_ER_TECHNOLOGY_LTDA = 34984\nVENDOR_ID_KYLIMARCOM = 34985\nVENDOR_ID_BOOKMANS = 34986\nVENDOR_ID_ONEWIRE = 34987\nVENDOR_ID_CLEARSTONE_CENTRAL_LABORATORIES = 34988\nVENDOR_ID_APPVENTURE_GMBH = 34989\nVENDOR_ID_VODAFONE_CZECH_REPUBLIC_AS = 34990\nVENDOR_ID_SOOPERCREATIONS = 34991\nVENDOR_ID_MICROLYNX_SYSTEMS_LTD = 34992\nVENDOR_ID_CYMFONY = 34993\nVENDOR_ID_D3V_SYSTEMS = 34994\nVENDOR_ID_DBMJ_REHABILITATION_SERVICES_PLLC = 34995\nVENDOR_ID_RICHARD_D_BALL_MD_PHD = 34996\nVENDOR_ID_KYOTO_UNIVERSITY_OF_EDUCATION = 34997\nVENDOR_ID_CILOGON_PROJECT = 34998\nVENDOR_ID_JSC_INSTITUTE_OF_INFOTELECOMMUNICATIONS = 34999\nVENDOR_ID_OPTXWARE_RESEARCHDEVELOPMENT_LTD = 35000\nVENDOR_ID_APTASYS_SRL = 35001\nVENDOR_ID_DCUX_COLTD = 35002\nVENDOR_ID_ADP_ESI = 35003\nVENDOR_ID_BAHIA_SOFTWARE_SL = 35004\nVENDOR_ID_IMS_NANOFABRICATION_AG = 35005\nVENDOR_ID_VIVIO_WORLD = 35006\nVENDOR_ID_MPAY24_GMBH = 35007\nVENDOR_ID_CORPORATION_SERVICE_COMPANY = 35008\nVENDOR_ID_TECHNO_FACTORY_DESENVOLVIMENTO_DE_SOFTWARE_LTDA = 35009\nVENDOR_ID_ATK_TEHDAS_OY = 35010\nVENDOR_ID_TOYOTA_FINANCE_AUSTRALIA_LTD = 35011\nVENDOR_ID_STORSIMPLE = 35012\nVENDOR_ID_SWEET_BRIAR_COLLEGE = 35013\nVENDOR_ID_FENZKE_NETZWERKTECHNIK_GMBH = 35014\nVENDOR_ID_PWM_PROJECT = 35015\nVENDOR_ID_BANK_PEDERSEN = 35016\nVENDOR_ID_WESTERN_RANGE_MAINTENANCE = 35017\nVENDOR_ID_GOMIDJETS = 35018\nVENDOR_ID_DECHO_CORPORATION = 35019\nVENDOR_ID_NANGUTV = 35020\nVENDOR_ID_TRANSOFT_AS = 35021\nVENDOR_ID_SUEDDEUTSCHER_VERLAG = 35022\nVENDOR_ID_HEIRICH_IT_DIENSTE_GMBH = 35023\nVENDOR_ID_HOSPITAL_SIERRALLANA_SERVICIO_CNTABRO_DE_SALUD = 35024\nVENDOR_ID_LACHLAN_GUNN = 35025\nVENDOR_ID_PRODIST_CONSULTORIA_INFORMATICA_E_PRODUCOES_ARTISTICAS_LTDA = 35026\nVENDOR_ID_LIUXIANGBUPTCOM = 35027\nVENDOR_ID_NETPARK_LLC = 35028\nVENDOR_ID_KCINNOVATIONS_COLTD = 35029\nVENDOR_ID_RUN_TECHNOLOGIES_COLTDBEIJING = 35030\nVENDOR_ID_GP_NPF_RATEX = 35031\nVENDOR_ID_BELTECHINFO = 35032\nVENDOR_ID_GLOBAL_NET_COMMERCE_INC = 35033\nVENDOR_ID_SENTAI_DIGITAL_LLC = 35034\nVENDOR_ID_INTERCLICK = 35035\nVENDOR_ID_ASKO_IT = 35036\nVENDOR_ID_ONESOURCE = 35037\nVENDOR_ID_XYMA_SONDEO = 35038\nVENDOR_ID_DENVA_APS = 35039\nVENDOR_ID_XIAMEN_HELIOS_TELECOM_EQUIPMENT_MANUFACTURE_INC = 35040\nVENDOR_ID_ELECTRO_POWER_SYSTEMS_SPA = 35041\nVENDOR_ID_SPORTING_INDEX_LTD = 35042\nVENDOR_ID_TRIPOWER = 35043\nVENDOR_ID_CJSC_SCHELKOVO_AGROCHIM = 35044\nVENDOR_ID_MATHIEU_MALATERRE_CONSULTING = 35045\nVENDOR_ID_INTUCELL = 35046\nVENDOR_ID_SANGFOR_TECHNOLOGIES_COLTD = 35047\nVENDOR_ID_SHENZHEN_GREATFIRST_TECHNOLOGY_CO_LTD = 35048\nVENDOR_ID_MARLER_MEDIA = 35049\nVENDOR_ID_TOPDOGRUNET = 35050\nVENDOR_ID_SYSTEMNOE_MODELIROVANIE_I_ANALIZ_LLC = 35051\nVENDOR_ID_CONDREY_CORPORATION = 35052\nVENDOR_ID_LLC_PROMO_INTERACTIVE = 35053\nVENDOR_ID_JAN_SCHAMPERA = 35054\nVENDOR_ID_GAMELOFT = 35055\nVENDOR_ID_WHITEROAD = 35056\nVENDOR_ID_UNESP = 35057\nVENDOR_ID_NIKB_SOFT = 35058\nVENDOR_ID_VARNANET = 35059\nVENDOR_ID_IGI_MOBILE_INC = 35060\nVENDOR_ID_NORMATION = 35061\nVENDOR_ID_AIN_TECH_CORP = 35062\nVENDOR_ID_UKRAINE_PROPERTY_GROUP_LTD = 35063\nVENDOR_ID_JDEROBOT = 35064\nVENDOR_ID_SINEQUA = 35065\nVENDOR_ID_HLRN = 35066\nVENDOR_ID_MAILDE_GMBH = 35067\nVENDOR_ID_VIRGO_SYSTEMS_KFT = 35068\nVENDOR_ID_WORLDWIDE_TRUST_ASIA_PTE_LTD = 35069\nVENDOR_ID_PLAUSIBLE_LABS_COOPERATIVE_INC = 35070\nVENDOR_ID_Q_M_INFORMTICA_LTDA = 35071\nVENDOR_ID_NGK_HOUTEN = 35072\nVENDOR_ID_GATEWARE_COMMUNICATIONS_GMBH = 35073\nVENDOR_ID_MAXMARA_FASHION_GROUP_SRL = 35074\nVENDOR_ID_BLUETECH_TECHNOLOGY_CO_LTD = 35075\nVENDOR_ID_SYNFINDE = 35076\nVENDOR_ID_GRACENOTE_INC = 35077\nVENDOR_ID_I_FABRIK_GMBH = 35078\nVENDOR_ID_TERMINAL_QUEQUEN_SA = 35079\nVENDOR_ID_KDH = 35080\nVENDOR_ID_SARANA_TUNGGAL_PRATAMA = 35081\nVENDOR_ID_AMARANTEN_ASIA_NETWORK_CO_LTD = 35082\nVENDOR_ID_TOSS_GMBH = 35083\nVENDOR_ID_RBS_COUTTS_INTERNATIONAL = 35084\nVENDOR_ID_EURO_INFORMATION = 35085\nVENDOR_ID_RELIABILITYFIRST_CORPORATION = 35086\nVENDOR_ID_BD_CONSULT_A_S = 35087\nVENDOR_ID_SRA_INTERNATIONAL_INC = 35088\nVENDOR_ID_BLUEBIRD_ELECTRONICS_LTD = 35089\nVENDOR_ID_CTI_2 = 35090\nVENDOR_ID_MITEC_TELECOM_INC = 35091\nVENDOR_ID_MADE_IT = 35092\nVENDOR_ID_AT_TESTING = 35093\nVENDOR_ID_IDEVICES_INDUSTRIA_E_COMERCIO_DE_PRODUTOS_ELETRONICOS_LTDA = 35094\nVENDOR_ID_OFFICE24_COLTD = 35095\nVENDOR_ID_SMARTEQUIP_INC = 35096\nVENDOR_ID_BLUEWATER_COMMUNICATION_GROUP = 35097\nVENDOR_ID_PICA8_TECHNOLOGIES_INC = 35098\nVENDOR_ID_E_MICE_SOLUTIONS_HK_LIMITED = 35099\nVENDOR_ID_GLOBELINKS_TECHNOLOGIES_LIMITED = 35100\nVENDOR_ID_SHENZHEN_SHENXUN_INFORMATION_TECHNOLOGY_DEVELOPMENT_COLID = 35101\nVENDOR_ID_GUANGDONG_HUADA_INTEGRATED_TECHNOLOGY_COLTD = 35102\nVENDOR_ID_SICHUAN_CYBERCAMERA_INFORMATION_TECHNOLOGY_COLTD = 35103\nVENDOR_ID_OERLIKON_TEXTILE = 35104\nVENDOR_ID_MASON_BROWN_DEVELOPMENT_LLC = 35105\nVENDOR_ID_REALE_MUTUA_ASSICURAZIONI = 35106\nVENDOR_ID_PROSOL_GROUP_PTY_LTD = 35107\nVENDOR_ID_TOCORE_EDUCATION = 35108\nVENDOR_ID_SCIENTA_MEDIA_SRO = 35109\nVENDOR_ID_443_PTY_LTD = 35110\nVENDOR_ID_NBANK_INVESTITIONS_UND_FRDERBANK = 35111\nVENDOR_ID_VEM_SISTEMI_SPA = 35112\nVENDOR_ID_OPTIER = 35113\nVENDOR_ID_ROBERT_WOOD_JOHNSON_UNIVERSITY_HOSPITAL = 35114\nVENDOR_ID_SQUEAKSOFTCOM_LLC = 35115\nVENDOR_ID_TROVER_SOLUTIONS = 35116\nVENDOR_ID_BAMNET = 35117\nVENDOR_ID_KORESTONE_TECHNOLOGIES = 35118\nVENDOR_ID_BELHARD_GROUP_JSC = 35119\nVENDOR_ID_SIDN = 35120\nVENDOR_ID_BULIGL = 35121\nVENDOR_ID_WAYOB = 35122\nVENDOR_ID_CLEAR_CHANNEL_RADIO_DIGITAL = 35123\nVENDOR_ID_FILESANYWHERECOM = 35124\nVENDOR_ID_HELMUT_RITTER = 35125\nVENDOR_ID_VODAFONE_GROUP_SERVICES_GMBH = 35126\nVENDOR_ID_JAPAN_COMMUNICATION_INC = 35127\nVENDOR_ID_KWS_ELECTRONIC_GMBH = 35128\nVENDOR_ID_RAHN_BODMER_CO = 35129\nVENDOR_ID_FIPSCODE = 35130\nVENDOR_ID_LONDON_UNDERGROUND_LTD = 35131\nVENDOR_ID_IFPROJECT = 35132\nVENDOR_ID_GOBIERNO_DE_LA_REPUBLICA_NEUKARTHAGO = 35133\nVENDOR_ID_4ACCESS_COMMUNICATIONS_COMPANY_INC = 35134\nVENDOR_ID_PERSONAL_SOFTWARE_COMPANY = 35135\nVENDOR_ID_BLUESTRIPE_SOFTWARE = 35136\nVENDOR_ID_CHRIS_CLAYSON = 35137\nVENDOR_ID_PK_VERKKOTAITO_OY = 35138\nVENDOR_ID_AZWUL = 35139\nVENDOR_ID_CABLEHD_RADIO_NETWORK = 35140\nVENDOR_ID_PSIGLENMERE = 35141\nVENDOR_ID_VX4NET = 35142\nVENDOR_ID_HELPO_SYSTEMS = 35143\nVENDOR_ID_POWER_QUADRANT = 35144\nVENDOR_ID_GEARBIT = 35145\nVENDOR_ID_CHINA_NET_CLOUD = 35146\nVENDOR_ID_WISHFI_PTE_LTD = 35147\nVENDOR_ID_TECHNOLOGICAL_EDUCATIONAL_INSTITUTE_OF_PIRAEUS = 35148\nVENDOR_ID_NPO_LISCO_LTD = 35149\nVENDOR_ID_INNO_NETWORKS = 35150\nVENDOR_ID_RAIFFEISEN_BANK_AVAL = 35151\nVENDOR_ID_AVRORAID = 35152\nVENDOR_ID_KYNETICS_SRL = 35153\nVENDOR_ID_POWERSHIELD_LTD = 35154\nVENDOR_ID_IP_CUBE_COLTD = 35155\nVENDOR_ID_UNBIT = 35156\nVENDOR_ID_UNIVERSITY_OF_MANITOBA = 35157\nVENDOR_ID_OSAKA_INTERNATIONAL_EDUCATIONAL_INSTITUTION = 35158\nVENDOR_ID_ITC_MIKS_LLC = 35159\nVENDOR_ID_EQUICOM = 35160\nVENDOR_ID_VENTURI_SRL = 35161\nVENDOR_ID_TELEOSS_CONSULTING_LTD = 35162\nVENDOR_ID_OOO_INFOTECHSERVICE = 35163\nVENDOR_ID_BLACK_EARTH_CONSULTING_LTD = 35164\nVENDOR_ID_BARID_AL_MAGHRIB = 35165\nVENDOR_ID_E2E_NETWORKS_PRIVATE_LIMITED = 35166\nVENDOR_ID_MPI_BREMEN = 35167\nVENDOR_ID_NT_SERVICES_LTD = 35168\nVENDOR_ID_SVEN_CHRISTEL = 35169\nVENDOR_ID_BIOPTIC_CO_LTD = 35170\nVENDOR_ID_CLOUDEVA = 35171\nVENDOR_ID_NORDEX = 35172\nVENDOR_ID_AUTOMOBILE_ASSOCIATION_DREAMCAR = 35173\nVENDOR_ID_PBSJ = 35174\nVENDOR_ID_TAMKANG_UNIVERSITY_INFORMATION_MANAGEMENT_NETWORK_ASSOCIATION = 35175\nVENDOR_ID_ASAVIE_TECHNOLOGIES_LTD = 35176\nVENDOR_ID_CONTROL4 = 35177\nVENDOR_ID_MJV_TECNOLOGIA_LTDA = 35178\nVENDOR_ID_DANZUCK = 35179\nVENDOR_ID_MARK_DOMANSKY_CONSULTING = 35180\nVENDOR_ID_TECHUBS_NETWORK = 35181\nVENDOR_ID_AGGREGATE_KNOWLEDGE_INC = 35182\nVENDOR_ID_ROB_HAVERKORT_BV = 35183\nVENDOR_ID_KONTORSPLATSEN_BUSINESS_GROUP_AB = 35184\nVENDOR_ID_PLAINTEXT_SRO = 35185\nVENDOR_ID_HIROMASA_NARA = 35186\nVENDOR_ID_KUNMING_UCROWN_NETWORK_SYSTEM_CHINA_LTD_CO = 35187\nVENDOR_ID_EVENTIDE = 35188\nVENDOR_ID_THERMO_FISHER_SCIENTIFIC_INC_FORMERLY_THERMO_ELECTRON_LED_GMBH = 35189\nVENDOR_ID_GREAT_CONNECTION = 35190\nVENDOR_ID_APPLIED_SOFTWARE_CONTROL_LTD = 35191\nVENDOR_ID_MIRACLE_TAN = 35192\nVENDOR_ID_MICRONET_VIDEO_TECHNOLOGY_LTD = 35193\nVENDOR_ID_BARCLAYS_CAPITAL = 35194\nVENDOR_ID_RUDRAKSHA_TECHNOLOGY_PRIVATE_LIMITED = 35195\nVENDOR_ID_DEMONWARE_LIMITED = 35196\nVENDOR_ID_INTEGRA_SOFTWARE_SYSTEMS = 35197\nVENDOR_ID_AL_MADINAH_INTERNATIONAL_UNIVERSITY = 35198\nVENDOR_ID_DYNCORP_INTERNATIONAL_LLC = 35199\nVENDOR_ID_ARIAL = 35200\nVENDOR_ID_OCHANOMIZU_UNIVERSITY = 35201\nVENDOR_ID_TECHNIDATA_AG = 35202\nVENDOR_ID_SQUATLABS = 35203\nVENDOR_ID_YOUNICOS_AG = 35204\nVENDOR_ID_SIAG_OMC = 35205\nVENDOR_ID_ALLDSP_GMBH_CO_KG = 35206\nVENDOR_ID_DYNAMICA_SRL = 35207\nVENDOR_ID_TRUBIQUITY_GMBH = 35208\nVENDOR_ID_FOMENTO_DE_CONSTRUCCIONES_Y_CONTRATAS_SA = 35209\nVENDOR_ID_BECHTLE_AG = 35210\nVENDOR_ID_NORTH_POINT_TECHNOLOGY_LLC = 35211\nVENDOR_ID_DEALNEWSCOM_INC = 35212\nVENDOR_ID_SANDBOX_SOLUTIONS = 35213\nVENDOR_ID_AGENCE_POUR_LENSEIGNEMENT_FRANAIS_LETRANGER = 35214\nVENDOR_ID_ZAO_BEGUN = 35215\nVENDOR_ID_W_HA = 35216\nVENDOR_ID_ADKNOWLEDGE_INC = 35217\nVENDOR_ID_BEEMASTER_ICT = 35218\nVENDOR_ID_FTTXNU = 35219\nVENDOR_ID_IOANNES_CO_LTD = 35220\nVENDOR_ID_SC_INTERDATA_SYSTEMS_SRL = 35221\nVENDOR_ID_NEWYORK_PRESBYTERIAN_HOSPITAL_RADIATION_ONCOLOGY = 35222\nVENDOR_ID_INSIGHT_INTERNATIONAL_CORPORATION = 35223\nVENDOR_ID_LANGARA_COLLEGE = 35224\nVENDOR_ID_SHANGHAI_HOWZONE_NETWORK_COMMUNICATION_DEVICE_COLTD = 35225\nVENDOR_ID_BUREAU_SOFTWARE_DEVELOPMENT_CORPORATION = 35226\nVENDOR_ID_OOO_NIKA_MOTORS_HOLDING = 35227\nVENDOR_ID_COMMSQUARE_BVBA = 35228\nVENDOR_ID_INTERCARD_SERVICES_AD = 35229\nVENDOR_ID_GENERIC_SWEDEN_AB = 35230\nVENDOR_ID_ARCA_SISTEMI_SCARL = 35231\nVENDOR_ID_IMAGING_IN_MOTION_LLC = 35232\nVENDOR_ID_WHITEBEARSOLUTIONS = 35233\nVENDOR_ID_COMPUTERIZED_ASSESSMENTS_LEARNING_LLC = 35234\nVENDOR_ID_HARGROVE_ASSOCIATES_INC = 35235\nVENDOR_ID_FLORIAN_RUPP_INGENIEUR = 35236\nVENDOR_ID_KBJ_JEDYNAK_I_WSPLNICY_SPKA_JAWNA = 35237\nVENDOR_ID_NOVGOROD_INFORMATION_AND_ANALITICAL_CENTRE = 35238\nVENDOR_ID_NETSIEBEN_TECHNOLOGIES_INC = 35239\nVENDOR_ID_BEEHIVETESTING = 35240\nVENDOR_ID_BETZ_STEFAN_WEBDESIGN_COMPUTERSERVICE = 35241\nVENDOR_ID_CYGNUS_NETWORKS_GMBH = 35242\nVENDOR_ID_DORNA_SPORTS = 35243\nVENDOR_ID_WOJO = 35244\nVENDOR_ID_RAILCAR_MANAGEMENT_INC = 35245\nVENDOR_ID_OS_QINGDAO_UNIVERSITY = 35246\nVENDOR_ID_OPENDL_PTY_LTD = 35247\nVENDOR_ID_SERENDIO_INC = 35248\nVENDOR_ID_ALTAMYS_TIERS_DE_CONFIANCE = 35249\nVENDOR_ID_SIMPLY_INFO = 35250\nVENDOR_ID_AWIND_INC = 35251\nVENDOR_ID_SAM_ELECTRONICS = 35252\nVENDOR_ID_AIXSOLVE_GMBH = 35253\nVENDOR_ID_ZON_MULTIMDIA = 35254\nVENDOR_ID_MIND_CANDY_LTD = 35255\nVENDOR_ID_IONDALE_INFORMATION_SERVICES_LIMITED = 35256\nVENDOR_ID_BRISA_INOVAO_E_TECNOLOGIA_SA = 35257\nVENDOR_ID_HEHAORG = 35258\nVENDOR_ID_TELEVERSIONS_LLC = 35259\nVENDOR_ID_ROTKRAUT = 35260\nVENDOR_ID_NORWEGIAN_DEFENCE = 35261\nVENDOR_ID_VERSORGUNGS_UND_VERKEHRSGESELLSCHAFT_SAARBRCKEN_MBH = 35262\nVENDOR_ID_ARANEO_LIMITED = 35263\nVENDOR_ID_TETRASTORM_TECHNOLOGIES = 35264\nVENDOR_ID_ELTEX_ENTERPRISE_LTD = 35265\nVENDOR_ID_EJJE_LDA = 35266\nVENDOR_ID_ETEN_TECHNOLOGIES_INC = 35267\nVENDOR_ID_ORESCO = 35268\nVENDOR_ID_SIEMENS_AG_STERREICH_CMT_FORMERLY_SIEMENS_AG_STERREICH_SIS_SDE_SVI_OSS_SAC = 35269\nVENDOR_ID_SAMJI_ELETRONICS_CO_LTD = 35270\nVENDOR_ID_MICALLEFFR = 35271\nVENDOR_ID_DEBID = 35272\nVENDOR_ID_JAHZ_INTERACTIVE = 35273\nVENDOR_ID_CHU_ANGERS = 35274\nVENDOR_ID_SMARIS_SRO = 35275\nVENDOR_ID_TOPCODER_INC = 35276\nVENDOR_ID_ZZ_DATS_LTD = 35277\nVENDOR_ID_TEXAS_COMMUNICATIONS_INC = 35278\nVENDOR_ID_SINGLENESIA_SOFTWARE = 35279\nVENDOR_ID_QUICKPLAY_MEDIA_INC = 35280\nVENDOR_ID_METRACOM = 35281\nVENDOR_ID_COMMUNITY_HEALTH_NETWORK = 35282\nVENDOR_ID_PACIFIC_BLUE_CROSS = 35283\nVENDOR_ID_UROEPCOM = 35284\nVENDOR_ID_MINISTRY_OF_ADMINISTRATION_AND_INTERIOR_GENERAL_DIRECTORATE_FOR_IT_C = 35285\nVENDOR_ID_JOHANNITER_UNFALL_HILFE_E_V_LANDESVERBAND_BADEN_WUERTTEMBERG = 35286\nVENDOR_ID_MOBILE_METRICS = 35287\nVENDOR_ID_DEEP_WEB_GMBH_CO_KG = 35288\nVENDOR_ID_QUATIVE_LIMITED = 35289\nVENDOR_ID_PTMANNAME = 35290\nVENDOR_ID_EMBVUE = 35291\nVENDOR_ID_EMBEDDED_SOLUTIONS_GROUP = 35292\nVENDOR_ID_COLLEGIUM_JOSEPHINUM_BONN = 35293\nVENDOR_ID_INETJ_COMMUNICATIONS_LTD = 35294\nVENDOR_ID_EXITPI = 35295\nVENDOR_ID_CYCLONE_MICROSYSTEMS_INC = 35296\nVENDOR_ID_ORAINF = 35297\nVENDOR_ID_DVSANALYTICS_INC = 35298\nVENDOR_ID_UNIVERSIDAD_DEL_VALLE_DE_GUATEMALA = 35299\nVENDOR_ID_REGISTRO_NACIONAL_DE_IDENTIFICACIN_Y_ESTADO_CIVIL = 35300\nVENDOR_ID_KVAZAR_TEST = 35301\nVENDOR_ID_OUTBLAZE_LIMITED = 35302\nVENDOR_ID_VELOCITY = 35303\nVENDOR_ID_PROCUBE_LTD = 35304\nVENDOR_ID_DB_ELETTRONICA_TELECOMUNICAZIONI_SPA = 35305\nVENDOR_ID_EQUINOX_SOFTWARE_INC = 35306\nVENDOR_ID_SCREWGUN_LOGIC = 35307\nVENDOR_ID_KOUKAAM_AS = 35308\nVENDOR_ID_AM_COR_INC = 35309\nVENDOR_ID_GAGGLENET_INC = 35310\nVENDOR_ID_ARANZ_MEDICAL_LTD = 35311\nVENDOR_ID_GABOSH = 35312\nVENDOR_ID_SPINNAKER_WEB_DESIGN_HOSTING_LLC = 35313\nVENDOR_ID_CONERGOS_GMBH_CO_KG = 35314\nVENDOR_ID_WAVE_CREATIVE_TECHNOLOGIES = 35315\nVENDOR_ID_SCHAUER_HUNGARIA_KFT = 35316\nVENDOR_ID_KOLIBRI_SYSTEMS_BV = 35317\nVENDOR_ID_KUTZTOWN_UNIVERSITY = 35318\nVENDOR_ID_ON_RAMP_WIRELESS_INC = 35319\nVENDOR_ID_UNIVERSIT_DEGLI_STUDI_DI_TORINO = 35320\nVENDOR_ID_PROFITCOMPUTING_SRO = 35321\nVENDOR_ID_PJRCCOM_LLC = 35322\nVENDOR_ID_KLINIKEN_NORDOBERPFALZ_AG = 35323\nVENDOR_ID_EDUTEL_BV = 35324\nVENDOR_ID_UNIVERSITT_WITTEN_HERDECKE = 35325\nVENDOR_ID_UNIVERSITY_OF_MUSIC_AND_DRAMA_HANNOVER = 35326\nVENDOR_ID_SMABTP = 35327\nVENDOR_ID_BLUECREST_CAPITAL_MANAGEMENT = 35328\nVENDOR_ID_S_WALTER_PACKAGING = 35329\nVENDOR_ID_RRSAT_GLOBAL_COMMUNICATIONS_NETWORK = 35330\nVENDOR_ID_FACULDADE_NATALENSE_PARA_O_DESENVOLVIMENTO_DO_RIO_GRANDE_DO_NORTE = 35331\nVENDOR_ID_ALTICAST_CORP = 35332\nVENDOR_ID_PK0 = 35333\nVENDOR_ID_LAMDA_NETWORKS = 35334\nVENDOR_ID_ALION_SCIENCE_AND_TECHNOLOGY = 35335\nVENDOR_ID_LIME_LABS_LLC = 35336\nVENDOR_ID_PRIMITIVESLV = 35337\nVENDOR_ID_IMFIREWALL_SOFTWARE = 35338\nVENDOR_ID_YAMBAY_TECHNOLOGIES_PTY_LTD = 35339\nVENDOR_ID_DUSTOS = 35340\nVENDOR_ID_BUNDESAMT_F_EICH_UND_VERMESSUNGSWESEN = 35341\nVENDOR_ID_AMERICAN_HOMEPATIENT = 35342\nVENDOR_ID_CAIRO_UNIVERSITY_HOSPITALS = 35343\nVENDOR_ID_THALES_DEFENCE_DEUTSCHLAND_GMBH = 35344\nVENDOR_ID_SRC_DOO = 35345\nVENDOR_ID_NORTHERN_IRELAND_HOUSING_EXECUTIVE = 35346\nVENDOR_ID_WUHAN_RENTANG_INFORMATION_LIMITED = 35347\nVENDOR_ID_RTQA_MEDICAL_LIMITED = 35348\nVENDOR_ID_TAKAHASHI_YUSUKE = 35349\nVENDOR_ID_DS_DEPARTMENT = 35350\nVENDOR_ID_SILVER_SKY_SOFT = 35351\nVENDOR_ID_AR_CARTON = 35352\nVENDOR_ID_ENTRY_POINT = 35353\nVENDOR_ID_NINTENDO_OF_AMERICA_INC = 35354\nVENDOR_ID_INTELLIRESPONSE_SYSTEMS_INC = 35355\nVENDOR_ID_TELEZYGOLOGY_INC = 35356\nVENDOR_ID_GARDEN_STATE_HEALTH_SYSTEMS = 35357\nVENDOR_ID_SYNTERVISION = 35358\nVENDOR_ID_FENSOM_SYSTEM_SL = 35359\nVENDOR_ID_ZODIAC_DATA_SYSTEMS_GMBH = 35360\nVENDOR_ID_NEWTEL_ENGINEERING_SRL = 35361\nVENDOR_ID_QUILL_TRAINING_SYSTEMS_LTD = 35362\nVENDOR_ID_UNIVERSITY_OF_HUDDERSFIELD = 35363\nVENDOR_ID_SEATTLE_CHILDRENS_HOSPITAL = 35364\nVENDOR_ID_SCHROFF_TECHNOLOGIES_INTERNATIONAL_INC = 35365\nVENDOR_ID_CHENGDU_OURUAN_CORP_LTD = 35366\nVENDOR_ID_ITL_LLC = 35367\nVENDOR_ID_DOUBANGO = 35368\nVENDOR_ID_3IMEDIA_GMBH = 35369\nVENDOR_ID_NATNAT_INC = 35370\nVENDOR_ID_INFOCOREINC = 35371\nVENDOR_ID_DANIEL_CLARK = 35372\nVENDOR_ID_SLOVAK_TELEKOM_AS = 35373\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_ESPIRITO_SANTO = 35374\nVENDOR_ID_UAB_MANO_NUMERIS = 35375\nVENDOR_ID_SOFTWAY_MEDICAL = 35376\nVENDOR_ID_FUNKWERK_IP_APPLIANCES_GMBH = 35377\nVENDOR_ID_ANTWERPSE_WATERWERKEN = 35378\nVENDOR_ID_ISIS_PAPYRUS_SOFTWARE_AG = 35379\nVENDOR_ID_ROGERS_BROADCASTING_LTD_VANCOUVER_TELEVISION = 35380\nVENDOR_ID_INFORMATIKOS_IR_RYSIU_DEPARTAMENTAS_PRIE_LIETUVOS_RESPUBLIKOS_VIDAUS_REIKALU_MINISTERIJOS = 35381\nVENDOR_ID_EUPATHDB_BIOINFORMATICS_RESOURCE_CENTER = 35382\nVENDOR_ID_SWISSFRAM_SRL = 35383\nVENDOR_ID_INTERNATIONAL_SOCIAL_SECURITY_ASSOCIATION = 35384\nVENDOR_ID_FAR_SYSTEMS_SPA = 35385\nVENDOR_ID_NEVERFAIL_GROUP = 35386\nVENDOR_ID_NING = 35387\nVENDOR_ID_BEYEL = 35388\nVENDOR_ID_KIWIGRID = 35389\nVENDOR_ID_CREDOC_SERVICES_CVBA = 35390\nVENDOR_ID_HEALTHTRIO_LLC = 35391\nVENDOR_ID_SEPOXDE = 35392\nVENDOR_ID_BLUE_VERVET_LTD = 35393\nVENDOR_ID_SUKAITEK = 35394\nVENDOR_ID_PT_PRIMA_TEKNOLOGI = 35395\nVENDOR_ID_ZAO_INTERCROSS = 35396\nVENDOR_ID_X_FABRIC_GMBH = 35397\nVENDOR_ID_IDKAYA = 35398\nVENDOR_ID_CENETMON = 35399\nVENDOR_ID_NOUMENON_LLC = 35400\nVENDOR_ID_ELECTROLINK_SRL = 35401\nVENDOR_ID_INTERNET_CONNECTIVITY_GROUP_INC = 35402\nVENDOR_ID_HOCHSCHULE_MITTWEIDA = 35403\nVENDOR_ID_BEIJING_CW_OPTICAL_COMMUNICATION_TECHNOLOGY_COLTD = 35404\nVENDOR_ID_DEFAULT_DENY_SECURITY = 35405\nVENDOR_ID_RADIFLOW = 35406\nVENDOR_ID_BOUYGUES_IMMOBILIER = 35407\nVENDOR_ID_ING_ROMAN_TK = 35408\nVENDOR_ID_ACCELOPS_INC = 35409\nVENDOR_ID_SOLIS_COOPERATIVA_DE_SOLUES_LIVRES_LTDA = 35410\nVENDOR_ID_FORTIUM_TECHNOLOGIES_LTD = 35411\nVENDOR_ID_CZ_MAN_SRO = 35412\nVENDOR_ID_GLIDEAROUND_LLC = 35413\nVENDOR_ID_MOLISOFT_GRUPO_EMPRESARIAL_SL = 35414\nVENDOR_ID_UNIVERSITAS_SURABAYA = 35415\nVENDOR_ID_DHD_DEUBNER_HOFFMANN_DIGITAL_GMBH = 35416\nVENDOR_ID_RANDSTAD_DEUTSCHLAND = 35417\nVENDOR_ID_ICUB3D = 35418\nVENDOR_ID_ELECTRON_LTD = 35419\nVENDOR_ID_RTRON = 35420\nVENDOR_ID_CHINASCOPE_FINANCIAL_LIMITED = 35421\nVENDOR_ID_SCHWEIZER_PARAPLEGIKER_ZENTRUM = 35422\nVENDOR_ID_BEROLINA_SCHRIFTBILD_GMBH_CO_KG = 35423\nVENDOR_ID_VIPRINET_GMBH = 35424\nVENDOR_ID_MASTERY_TECHNOLOGIES_INC = 35425\nVENDOR_ID_THE_OPENSSH_PROJECT = 35426\nVENDOR_ID_DATA_TURBINE_INC = 35427\nVENDOR_ID_STERLING_COMPUTER_SYSTEMS = 35428\nVENDOR_ID_LIMIS = 35429\nVENDOR_ID_INTELLIGENTWORKS_CO_LTD = 35430\nVENDOR_ID_KAMFU_INFOMATION_TECHNOLOGY_CO_LTD = 35431\nVENDOR_ID_SUPERBLOCK_LLC = 35432\nVENDOR_ID_CONNEXION_TECHNOLOGIES = 35433\nVENDOR_ID_QUADRANT_NEWMEDIA_CORP = 35434\nVENDOR_ID_ANABASIS_CONSULTING_LTD = 35435\nVENDOR_ID_01COM_INC = 35436\nVENDOR_ID_SERPRO_SERVIO_FEDERAL_DE_PROCESSAMENTO_DE_DADOS = 35437\nVENDOR_ID_EKOM21_KGRZ_HESSEN = 35438\nVENDOR_ID_APP_BV = 35439\nVENDOR_ID_FAIVRE_ET_MAHON = 35440\nVENDOR_ID_CORPORACION_EMPRESARIAL_IUNKA = 35441\nVENDOR_ID_DEZEM_GMBH = 35442\nVENDOR_ID_CAT_CONSULTING_INC = 35443\nVENDOR_ID_SPECTRALNET_SOLLUTIONS_LLC = 35444\nVENDOR_ID_INFORMATION_SECURITY_SERVICE_DIGITAL_UNITED = 35445\nVENDOR_ID_CONNAUGHT_FACTSLINE_LTD = 35446\nVENDOR_ID_SEEBYTE_LTD = 35447\nVENDOR_ID_VIDEO_LOCATION_SERVICE = 35448\nVENDOR_ID_KEYTECH_BVBA = 35449\nVENDOR_ID_STORAGEDATA = 35450\nVENDOR_ID_INCENP = 35451\nVENDOR_ID_COMMERCIAL_BANK_DELTACREDIT = 35452\nVENDOR_ID_DREAM_TRAIN_INTERNET_INC = 35453\nVENDOR_ID_NIOMETRICS_PTE_LTD = 35454\nVENDOR_ID_TOKYO_METROPOLITAN_ORGANIZATION_FOR_MEDICAL_RESEARCH = 35455\nVENDOR_ID_WESTWAY_NOMINEES = 35456\nVENDOR_ID_INFOCOMM_DEVELOPMENT_AUTHORITY_OF_SINGAPORE = 35457\nVENDOR_ID_DOSSOT_NETWORKS = 35458\nVENDOR_ID_LEMKO_CORPORATION = 35459\nVENDOR_ID_EDAXI_UG_HAFTUNGSBESCHRAENKT = 35460\nVENDOR_ID_BERNHARD_DICK = 35461\nVENDOR_ID_QINGDAO_HISENSE_MEDIA_NETWORKS_LTD = 35462\nVENDOR_ID_EFICODE_OY = 35463\nVENDOR_ID_BLUES_POINT_PARTNERS_PTY_LTD = 35464\nVENDOR_ID_BANK_JULIUS_BAER_CO_LTD = 35465\nVENDOR_ID_FORSWAY_SCANDINAVIA_AB = 35466\nVENDOR_ID_OOOSPINBRAIN = 35467\nVENDOR_ID_KAUNAS_UNIVERSITY_OF_TECHNOLOGY = 35468\nVENDOR_ID_SEAMLESS_DISTRIBUTION_AB = 35469\nVENDOR_ID_FIRST_MATRIX = 35470\nVENDOR_ID_JOHNS_BYRNE_COMPANY = 35471\nVENDOR_ID_BLICHMANNDE = 35472\nVENDOR_ID_UNETCONVERGENCE = 35473\nVENDOR_ID_TRANSMIT_GMBH = 35474\nVENDOR_ID_SPRENGNETTER_GMBH = 35475\nVENDOR_ID_THE_OVERTIS_GROUP_LIMITED = 35476\nVENDOR_ID_DATARAM_CORPORATION = 35477\nVENDOR_ID_THE_UNIX_MAN_CONSULTING_LLC = 35478\nVENDOR_ID_ACADEMIC_MEDICAL_CENTER = 35479\nVENDOR_ID_KUTAK_ROCK_LLP = 35480\nVENDOR_ID_LIGHTNINGIO = 35481\nVENDOR_ID_IMAGE_SOFT_OY = 35482\nVENDOR_ID_EXAGATE = 35483\nVENDOR_ID_ALPHACOM_LLC = 35484\nVENDOR_ID_DERRICK_ASSOCIATES_INC = 35485\nVENDOR_ID_TELEVISION_NEW_ZEALAND_LTD = 35486\nVENDOR_ID_THE_SALVATION_ARMY_USA_WESTERN_TERRITORY = 35487\nVENDOR_ID_THE_COROSYNC_CLUSTER_ENGINE_PROJECT = 35488\nVENDOR_ID_RADIOFID_LTD = 35489\nVENDOR_ID_AGEPS_APHP = 35490\nVENDOR_ID_MS_PROJEKT_MANAGEMENT_VERTRIEB_GMBH = 35491\nVENDOR_ID_RHEINLAND_VERSICHERUNGEN = 35492\nVENDOR_ID_EMBED_IT_OG = 35493\nVENDOR_ID_ACT750 = 35494\nVENDOR_ID_ARJO_WIGGINS_CHARTHAM_LIMITED = 35495\nVENDOR_ID_INTERFACE_DEVICES_LTD = 35496\nVENDOR_ID_GENLAN_DOO = 35497\nVENDOR_ID_VDG_SECURITY_BV = 35498\nVENDOR_ID_STRATOS_NZ_LTD = 35499\nVENDOR_ID_AIM_CO_LTD = 35500\nVENDOR_ID_ACCESS_GENERAL_INSURANCE_HOLDINGS = 35501\nVENDOR_ID_BIGSSS = 35502\nVENDOR_ID_CYBERSCUBE = 35503\nVENDOR_ID_EITELWEIN_NET = 35504\nVENDOR_ID_LINDENBAUM_GMBH = 35505\nVENDOR_ID_STREAMEZZO_SA = 35506\nVENDOR_ID_BEN_CLIFFORD = 35507\nVENDOR_ID_ADDIVA_ENGINEERING_AB = 35508\nVENDOR_ID_C_SQUARED_SYSTEMS_LLC = 35509\nVENDOR_ID_TECNICAS_DE_SOFT_SA = 35510\nVENDOR_ID_VIRTUALSCOPICS = 35511\nVENDOR_ID_OSSERA_INC = 35512\nVENDOR_ID_AIXCONCEPT_GMBH = 35513\nVENDOR_ID_LIQUIDWEB_INC = 35514\nVENDOR_ID_KJ3_ELEKTRONIK = 35515\nVENDOR_ID_SUOMEN_TEOLLISUUSOSA_OY = 35516\nVENDOR_ID_SHERNET = 35517\nVENDOR_ID_BAY_TALKITEC_PRIVATE_LIMITED = 35518\nVENDOR_ID_MALDIVES_MONETARY_AUTHORITY = 35519\nVENDOR_ID_VIDEO_CLARITY = 35520\nVENDOR_ID_ENTIMO_AG = 35521\nVENDOR_ID_COMELIT_GROUP_SPA = 35522\nVENDOR_ID_PHILLIPS_AND_JORDAN_INC = 35523\nVENDOR_ID_PHGAMERS = 35524\nVENDOR_ID_DIRECTSTREAMS = 35525\nVENDOR_ID_FOUNDATA_GMBH_FORMERLY_IKTWERK_GBR = 35526\nVENDOR_ID_FLEXRADIO_SYSTEMS = 35527\nVENDOR_ID_ADLANTIA = 35528\nVENDOR_ID_EVONY_LLC = 35529\nVENDOR_ID_TJK_TIETOLAITE_OY = 35530\nVENDOR_ID_CONTATO_GLOBAL_SOLUTIONS = 35531\nVENDOR_ID_ACSYS_BSC_SP_Z_OO = 35532\nVENDOR_ID_AXECTA_INC = 35533\nVENDOR_ID_ETTEX_GMBH = 35534\nVENDOR_ID_NANVPN = 35535\nVENDOR_ID_SYSTEMS_IN_PROGRESS_GMBH = 35536\nVENDOR_ID_TEMENO_GMBH = 35537\nVENDOR_ID_TELETRADER_SOFTWARE_AG = 35538\nVENDOR_ID_MICROS_SYSTEMS_INC = 35539\nVENDOR_ID_M_S_VARUN_INFOSYS = 35540\nVENDOR_ID_OESTERREICHISCHE_ELEKTRIZITAETSWIRTSCHAFTS_AG = 35541\nVENDOR_ID_LUCAS_SARL = 35542\nVENDOR_ID_NOVAWORX = 35543\nVENDOR_ID_JAS_QUINN_SON = 35544\nVENDOR_ID_ROBOT_LDA = 35545\nVENDOR_ID_EBS_SRL = 35546\nVENDOR_ID_CA_DIKEY_LTD = 35547\nVENDOR_ID_KNI_TECHNICAL_CONSULTING_LTD = 35548\nVENDOR_ID_E_DISP_DA = 35549\nVENDOR_ID_LEITH_BRANDELAND = 35550\nVENDOR_ID_CONCHUS = 35551\nVENDOR_ID_COMGUIDE_COLTD = 35552\nVENDOR_ID_INTERNET_HYPERMARKET_LTD = 35553\nVENDOR_ID_CORSSYS = 35554\nVENDOR_ID_INFINITIES_WITHIN = 35555\nVENDOR_ID_ODYSSLOOT = 35556\nVENDOR_ID_NYADENDIS_ENTERPRICES = 35557\nVENDOR_ID_IT_INTEGRATION_SOLUES_INTEGRADAS_EM_TECNOLOGIA_DA_INFORMAO_LTDA_ME = 35558\nVENDOR_ID_SHANDA_INTERACTIVE_ENTERTAINMENT_LIMITED = 35559\nVENDOR_ID_DNSPOD = 35560\nVENDOR_ID_NETDIALOG_INTERNATIONAL_BV = 35561\nVENDOR_ID_SERVICE_ELEMENTS = 35562\nVENDOR_ID_SALADISDEADCOM = 35563\nVENDOR_ID_UNIVERSIDAD_CATOLICA_ANDRES_BELLO = 35564\nVENDOR_ID_KOOZYT_INC = 35565\nVENDOR_ID_TRAMMELLCH = 35566\nVENDOR_ID_CME_GROUP = 35567\nVENDOR_ID_BETH_ISRAEL_DEACONESS_MEDICAL_CENTER = 35568\nVENDOR_ID_A_DEC_INC = 35569\nVENDOR_ID_TRAVEL_TRIPPER_LLC = 35570\nVENDOR_ID_LU_HOSTING = 35571\nVENDOR_ID_ARENDS_ITTK = 35572\nVENDOR_ID_SITEL = 35573\nVENDOR_ID_DAMBACH_WERKE_GMBH = 35574\nVENDOR_ID_BYTESOURCE_TECHNOLOGY_CONSULTING_GMBH = 35575\nVENDOR_ID_AILUX_SRL = 35576\nVENDOR_ID_LIVINGDATA_GESELLSCHAFT_FR_ANGEWANDTE_INFORMATIONSTECHNOLOGIEN_MBH = 35577\nVENDOR_ID_SOUTHERN_TELECOMMUNICATIONS_COMPANY = 35578\nVENDOR_ID_SUPER_GROUP_TRADING_PTY_LTD = 35579\nVENDOR_ID_TECHNISYS_INC = 35580\nVENDOR_ID_LINCT = 35581\nVENDOR_ID_MTRUST_S_R_O = 35582\nVENDOR_ID_DRIZZLE = 35583\nVENDOR_ID_BANK_AL_MAGHRIB = 35584\nVENDOR_ID_INTELCAN_TECHNOSYSTEMS_INC = 35585\nVENDOR_ID_COMPETENTUM = 35586\nVENDOR_ID_WHITE_BIRCH_PAPER_DIVISION_PAPIER_MASSON = 35587\nVENDOR_ID_NDLKIEVUA = 35588\nVENDOR_ID_CONFEDERACIN_PIRATA_FORMERLY_PARTIDO_PIRATA = 35589\nVENDOR_ID_CONVERGENT_COMMUNICATIONS_INC = 35590\nVENDOR_ID_LIMITED_LIABILITY_COMPANY_MEJREGIONGAZ = 35591\nVENDOR_ID_FIBERSENSING_SA = 35592\nVENDOR_ID_THALES_ROCKWELL_COLLINS = 35593\nVENDOR_ID_ICOMCEPT_GMBH = 35594\nVENDOR_ID_DISTRIBUTEDMATTERNET = 35595\nVENDOR_ID_INNOVID_CO_LTD = 35596\nVENDOR_ID_TELEMIKS_UE = 35597\nVENDOR_ID_PIWORKS_INC = 35598\nVENDOR_ID_MARKETWARE = 35599\nVENDOR_ID_TCC_RD_GMBH = 35600\nVENDOR_ID_TRANSCANADA_PIPELINES_LTD = 35601\nVENDOR_ID_SYNDETIC_PTY_LTD = 35602\nVENDOR_ID_TIANJIN_DEVISER_ELECTRONICS_INSTRUMENT_COLTD = 35603\nVENDOR_ID_COMPAL_BROADBAND_NETWORKS_INC = 35604\nVENDOR_ID_MONTANI_WEBDEVELOPMENT_STRATEGIE = 35605\nVENDOR_ID_ZAO_NPC_KOMPYUTERNYE_TECHNOLOGII = 35606\nVENDOR_ID_WIRELESS_ESYSTEMS = 35607\nVENDOR_ID_ANSWER_QUICK = 35608\nVENDOR_ID_AXIE_CONSORTIUM_INC = 35609\nVENDOR_ID_ITEL_SNC = 35610\nVENDOR_ID_SOFT_PROJECT_CA = 35611\nVENDOR_ID_DIGITAL_MAGES = 35612\nVENDOR_ID_LINKTRUST = 35613\nVENDOR_ID_ITK_ENGINEERING = 35614\nVENDOR_ID_BASILEA_PHARMACEUTICA_LTD = 35615\nVENDOR_ID_DELTANET_AG = 35616\nVENDOR_ID_XTCN = 35617\nVENDOR_ID_BEANFIELD_TECHNOLOGIES_INC = 35618\nVENDOR_ID_MITTWALD_CM_SERVICE = 35619\nVENDOR_ID_WILLIAM_BEAUMONT_HOSPITALS = 35620\nVENDOR_ID_PATRICK_KOBLY = 35621\nVENDOR_ID_AKAFLIEG_STUTTGART = 35622\nVENDOR_ID_STWALKERSTERCOUK_FORMERLY_ALBINO_SLUG_STUDIOS = 35623\nVENDOR_ID_TUXADCOM = 35624\nVENDOR_ID_VEMBU_TECHNOLOGIES_PRIVATE_LIMITED = 35625\nVENDOR_ID_CHONGQING_JINGHONG_HI_TECH_COLTD = 35626\nVENDOR_ID_ATERA_NETWORKS_LTD = 35627\nVENDOR_ID_UNITAS_NETWORK_GMBH = 35628\nVENDOR_ID_PL_GRID = 35629\nVENDOR_ID_QUBE_TECHNOLOGIES_SP_Z_OO = 35630\nVENDOR_ID_CYBERTRANS_JAPAN = 35631\nVENDOR_ID_NTOP = 35632\nVENDOR_ID_OPEN_SISTEMAS = 35633\nVENDOR_ID_KARL_WRWAG_LACK_UND_FARBENFABRIK_GMBH_CO_KG = 35634\nVENDOR_ID_GFR_SOFTWARE_SOLUTIONS_AG = 35635\nVENDOR_ID_KION_GROUP_GMBH = 35636\nVENDOR_ID_UBIQU_ACCESS_BV = 35637\nVENDOR_ID_FLUGHAFEN_WIEN_AG = 35638\nVENDOR_ID_WYDAWNICTWO_NAUKOWE_PWN_SA = 35639\nVENDOR_ID_APPAREO_SYSTEMS_LLC = 35640\nVENDOR_ID_UNIVERSIDAD_DE_LOS_ANDES_2 = 35641\nVENDOR_ID_PANEDA_AS = 35642\nVENDOR_ID_EURIX_SRL = 35643\nVENDOR_ID_OLSON_CONSULTING = 35644\nVENDOR_ID_ZICHEN_TECH_CO_LTD = 35645\nVENDOR_ID_CTS_CASHPRO_SPA = 35646\nVENDOR_ID_DEPOSITA_SYSTEMS_PTY_LTD = 35647\nVENDOR_ID_BROADBAND_SOLUTIONS_TECHNOLOGY_PTY_LTD = 35648\nVENDOR_ID_DIRECT_PAYMENT_SOLUTIONS_LIMITED = 35649\nVENDOR_ID_PIRATENPARTEI_SCHWEIZ = 35650\nVENDOR_ID_IHM_P_S = 35651\nVENDOR_ID_INFORMATIQUE_DE_SCURIT = 35652\nVENDOR_ID_DELTAWARE_SYSTEMS_INC = 35653\nVENDOR_ID_HAUT_COMMISSARIAT_POUR_LES_REFUGIES_HCR_UNHCR = 35654\nVENDOR_ID_PEAK_SOLUTION_GMBH = 35655\nVENDOR_ID_BRIAN_DELANEY = 35656\nVENDOR_ID_PT_BANK_BRI_SYARIAH = 35657\nVENDOR_ID_HEALTH_INFO_NET_AG = 35658\nVENDOR_ID_BAKER_TILLY_RUSSAUDIT_LTD = 35659\nVENDOR_ID_3WAY_SOLUTIONS = 35660\nVENDOR_ID_NETWORKIP = 35661\nVENDOR_ID_OPTRAK_DISTRIBUTION_SOFTWARE_LTD = 35662\nVENDOR_ID_STATE_OF_HAWAII = 35663\nVENDOR_ID_PI_EMBEDDED_BUILDING_AUTOMATION_COMMUNITY = 35664\nVENDOR_ID_BROADBAND_SECURITY_INC = 35665\nVENDOR_ID_JOINT_STOCK_COMMERCIAL_BANK_INVESTBANK_OPEN_END_JSC = 35666\nVENDOR_ID_ELIMCO_SISTEMAS_SL = 35667\nVENDOR_ID_PEAK6_INVESTMENTS_LP = 35668\nVENDOR_ID_ADVANCED_INTEGRATION_TECHNOLOGY = 35669\nVENDOR_ID_ALBERTA_HEALTH_SERVICES = 35670\nVENDOR_ID_IM3D_SPA = 35671\nVENDOR_ID_BITNETHIC_SRL = 35672\nVENDOR_ID_BANK_SAINT_PETERSBURG = 35673\nVENDOR_ID_JOHAN_DE_WIT = 35674\nVENDOR_ID_ZAP_S_A_INTERNET = 35675\nVENDOR_ID_COMPUGHTERWORX = 35676\nVENDOR_ID_ENVISIONIER_MEDICAL_TECHNOLOGIES_INC = 35677\nVENDOR_ID_CLAYSTER_AB = 35678\nVENDOR_ID_GRITA = 35679\nVENDOR_ID_ADGEAR_TECHNOLOGIES_INC_FORMERLY_BLOOM_DIGITAL_PLATFORMS = 35680\nVENDOR_ID_ZENITH_SYSTEM_SOLUTIONS = 35681\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_LIBEREC = 35682\nVENDOR_ID_HOFMANN_IT_SYSTEME_INGENIEURBUERO = 35683\nVENDOR_ID_PROSERVE_BV = 35684\nVENDOR_ID_HELLUG = 35685\nVENDOR_ID_BRIAN_DESMOND_CONSULTING_LLC = 35686\nVENDOR_ID_PROWARE_TECHNOLOGIES_CO_LTD = 35687\nVENDOR_ID_HOCHSCHULE_WISMAR_UNIVERSITY_OF_APPLIED_SCIENCES_TECHNOLOGY_BUSINESS_AND_DESIGN = 35688\nVENDOR_ID_BETFAIR = 35689\nVENDOR_ID_INDAAL_INFORMATION_MANAGEMENT_GMBH = 35690\nVENDOR_ID_MATTHIAS_BONN_IT_CONSULT = 35691\nVENDOR_ID_HEADWEB_AB = 35692\nVENDOR_ID_OPEN_FUTURE_BVBA = 35693\nVENDOR_ID_CHOOSEHELPCOM = 35694\nVENDOR_ID_SITEM_SRL = 35695\nVENDOR_ID_AVVASI = 35696\nVENDOR_ID_YSTRAD_MYNACH_COLLEGE_OF_FURTHER_EDUCATION = 35697\nVENDOR_ID_LDAPCOMBR = 35698\nVENDOR_ID_CUMMINS_POWER_GENERATION = 35699\nVENDOR_ID_TYRIAN_TECHNICAL_CONSULTING = 35700\nVENDOR_ID_PHPCOMS = 35701\nVENDOR_ID_NTO_IRE_POLUS_LTD_FORMERLY_OPTICAL_COMPONENTS_SYSTEMS = 35702\nVENDOR_ID_JSC_DEVLAB = 35703\nVENDOR_ID_SALUC = 35704\nVENDOR_ID_HWS_INFORMATIONSSYSTEME_GMBH = 35705\nVENDOR_ID_GUANGZHOU_KINGTELLER_TECHNOLOGY_COLTD = 35706\nVENDOR_ID_SP_2 = 35707\nVENDOR_ID_BOUYGUES_CONSTRUCTION = 35708\nVENDOR_ID_UNASSIGNED_44 = 35709\nVENDOR_ID_ALCATEL_LUCENT_4ESS = 35710\nVENDOR_ID_SOPINSPACE = 35711\nVENDOR_ID_MASTER_TRANSLATION_AND_TECHNOLOGY_SERVICES_COLTD = 35712\nVENDOR_ID_INFORMATION_MANAGEMENT_SERVICES_2 = 35713\nVENDOR_ID_KOMMTNOCHCOM = 35714\nVENDOR_ID_VIDEO_GAMING_TECHNOLOGIES = 35715\nVENDOR_ID_ACTION_WITHOUT_BORDERS = 35716\nVENDOR_ID_DI_MICHAEL_KUEN = 35717\nVENDOR_ID_MISSISSIPPI_GULF_COAST_COMMUNITY_COLLEGE = 35718\nVENDOR_ID_SHOPPINGCOM = 35719\nVENDOR_ID_INFOTREND_DEVELOPMENT = 35720\nVENDOR_ID_INSTITUTE_OF_CORPORATE_LAW_AND_CORPORATE_GOVERNANCE = 35721\nVENDOR_ID_DIGITAL_NIRVANA = 35722\nVENDOR_ID_SENSAIR_PTY_LTD = 35723\nVENDOR_ID_CHENEGA_CORPORATION = 35724\nVENDOR_ID_CHINA_BEIJING_TV_STATION = 35725\nVENDOR_ID_CHINA_GUANGDONG_TELEPOWER_COMMUNICATION_TECHNOLOGY_COLTD = 35726\nVENDOR_ID_FIRST_HORIZON_NATIONAL_CORPORATION = 35727\nVENDOR_ID_SCALLABLE_TECHNOLOGIES_INC = 35728\nVENDOR_ID_FORSSAN_SEUDUN_PUHELIN_OY_SURFFINET = 35729\nVENDOR_ID_IAD_GMBH = 35730\nVENDOR_ID_ABTIS_GMBH = 35731\nVENDOR_ID_AJUNTAMENT_DE_BENICARL = 35732\nVENDOR_ID_VIDA_DIAGNOSTICS_INC = 35733\nVENDOR_ID_LENNART_JTTE = 35734\nVENDOR_ID_A9_SAS = 35735\nVENDOR_ID_BZCTOONS_NETWORK_REDJUICEFR_SARL = 35736\nVENDOR_ID_QA_CAFE_LLC = 35737\nVENDOR_ID_ABCWXYCOM = 35738\nVENDOR_ID_BOWLINE_NETWORK_CONSULTING_INC = 35739\nVENDOR_ID_SACD = 35740\nVENDOR_ID_CHI_X_EUROPE_LTD = 35741\nVENDOR_ID_NEUROSEARCH_INC = 35742\nVENDOR_ID_WORKONLINE_COMMUNICATIONS_PTY_LTD = 35743\nVENDOR_ID_D_MEDIA_COMMUNICATION_TECH = 35744\nVENDOR_ID_MARINE_HARVEST_ASA = 35745\nVENDOR_ID_PASSEPARTOUT_SA = 35746\nVENDOR_ID_FEDERALNOE_AGENTSTVO_ZHELEZNODOROZHNOGO_TRANSPORTA = 35747\nVENDOR_ID_SWITCH_2 = 35748\nVENDOR_ID_ALSIM = 35749\nVENDOR_ID_SPRING_WIRELESS = 35750\nVENDOR_ID_LINUX_LUNATIX = 35751\nVENDOR_ID_SUPRA_NET_DOO = 35752\nVENDOR_ID_LES_DVELOPPEMENTS_DURABLES = 35753\nVENDOR_ID_ON_AIR_SYSTEMS_LTD = 35754\nVENDOR_ID_P_21_GMBH = 35755\nVENDOR_ID_INETT_GMBH = 35756\nVENDOR_ID_SONNECTION_BV = 35757\nVENDOR_ID_STICHTING_DIAGNOSE_KANKER = 35758\nVENDOR_ID_WELKIN_SCIENCES_LLC = 35759\nVENDOR_ID_OPTICAL_ACCESS_NETWORKS_LAB_SHANGHAI_UNIVERSITY = 35760\nVENDOR_ID_CENTER_PARCS_EUROPE = 35761\nVENDOR_ID_FMLOG_SWEDISH_ARMED_FORCES_LOGISTICS = 35762\nVENDOR_ID_GROUPE_LAURENT = 35763\nVENDOR_ID_ST_LAWRENCE_COLLEGE = 35764\nVENDOR_ID_ZBITS_UNTERNEHMENSBERATUNG_GMBH = 35765\nVENDOR_ID_KILLERMANN_GDBR = 35766\nVENDOR_ID_UNIVERSITY_OF_LODZ = 35767\nVENDOR_ID_GETWELLNETWORK_INC = 35768\nVENDOR_ID_WELLOGIC = 35769\nVENDOR_ID_USIL_TECHNOLOGY = 35770\nVENDOR_ID_HIGHTECH_PAYMENT_SYSTEMS = 35771\nVENDOR_ID_NWORK_INTERNET_INFORMATIONSSYSTEME_GMBH = 35772\nVENDOR_ID_ARCTURUS_NETWORKS_INC = 35773\nVENDOR_ID_UNIVERSAL_ELECTRIC_CORPORATION = 35774\nVENDOR_ID_RACHITSKIY_RESEARCH_AND_DEVELOPMENT_LLC = 35775\nVENDOR_ID_BLUENOTE_COMMUNICATIONS_SA = 35776\nVENDOR_ID_UNIQUE_SOLUTIONS_SA = 35777\nVENDOR_ID_RTC_LEASING_OJSC = 35778\nVENDOR_ID_ICAN_SOLUTIONS_PRIVATE_LIMITED = 35779\nVENDOR_ID_OAO_TATNEFT = 35780\nVENDOR_ID_MATEJ_BEL_UNIVERSITY_BANSKA_BYSTRICA = 35781\nVENDOR_ID_UNIVERSIDAD_DE_EXTREMADURA = 35782\nVENDOR_ID_NIKA_LTD = 35783\nVENDOR_ID_ECKD_GMBH = 35784\nVENDOR_ID_XCIRA_INC = 35785\nVENDOR_ID_CONTINUANT_INC = 35786\nVENDOR_ID_COMPUTARIS = 35787\nVENDOR_ID_XOLIDO_SYSTEMSSA = 35788\nVENDOR_ID_DESPEGARCOM_INC = 35789\nVENDOR_ID_CLEARCORP = 35790\nVENDOR_ID_IES_SYSTEMS_INC = 35791\nVENDOR_ID_RYGL = 35792\nVENDOR_ID_HIROTECH_INC = 35793\nVENDOR_ID_JAVA_VERIFIED = 35794\nVENDOR_ID_ACTIFIO = 35795\nVENDOR_ID_BURDAIC_GMBH = 35796\nVENDOR_ID_POLSKA_TELEFONIA_CYFROWA_SP_Z_OO = 35797\nVENDOR_ID_SHACK_EV = 35798\nVENDOR_ID_PHMB_CONSULTING = 35799\nVENDOR_ID_UNICONSULT = 35800\nVENDOR_ID_EIX_LTD = 35801\nVENDOR_ID_MOBANGO_LTD = 35802\nVENDOR_ID_EUCALYPTUS_SYSTEMS_INC = 35803\nVENDOR_ID_ALLGOOD_NETWORKS = 35804\nVENDOR_ID_ATHONET_SRL = 35805\nVENDOR_ID_PAUL_MILLIKEN = 35806\nVENDOR_ID_AJR_DEVELOPMENT = 35807\nVENDOR_ID_SAR_ELEKTRONIK_AS = 35808\nVENDOR_ID_HOSTING_COMMUNITY = 35809\nVENDOR_ID_CDL_PMO = 35810\nVENDOR_ID_AMTANGEE_AKTIENGESELLSCHAFT = 35811\nVENDOR_ID_CANCOM_IT_SOLUTIONS_GMBH = 35812\nVENDOR_ID_LINUXRULZ = 35813\nVENDOR_ID_CORDIER_NETWORKS = 35814\nVENDOR_ID_QUADSTOR_SYSTEMS = 35815\nVENDOR_ID_SHENZHEN_HY_AMPLITEC_TECHNOLOGY_COLTD = 35816\nVENDOR_ID_GIORIK_SPA = 35817\nVENDOR_ID_AZIENDA_FELTRINA_SP = 35818\nVENDOR_ID_DIGITHURST_BILDVERARBEITUNGSSYSTEME = 35819\nVENDOR_ID_RCS_KLADNO_SRO = 35820\nVENDOR_ID_FBCOMPUTERS_SRL = 35821\nVENDOR_ID_V_INTERNET_OPERATIONS_INC = 35822\nVENDOR_ID_HANGZHOU_RICH_INFO_TECH_COLTD = 35823\nVENDOR_ID_BOLL_UND_PARTNER_SOFTWARE_GMBH = 35824\nVENDOR_ID_INAX_CORPORATION = 35825\nVENDOR_ID_THALES_AIR_OPERATION = 35826\nVENDOR_ID_INVENGO_INFORMATION_TECHNOLOGY_COLTD = 35827\nVENDOR_ID_ENTROPIA_EV = 35828\nVENDOR_ID_UNITED_NATURAL_FOODS_INC = 35829\nVENDOR_ID_ROFFETCOM = 35830\nVENDOR_ID_ATECH_MICROELECTRONIC_SYSTEMS = 35831\nVENDOR_ID_OPEN_HORIZONTLTD = 35832\nVENDOR_ID_DEVA_BROADCAST_LTD = 35833\nVENDOR_ID_GOZAIMASS = 35834\nVENDOR_ID_IB_SOLUTION_CORPORATION = 35835\nVENDOR_ID_CHINA_BRAVEFLY_TECHNOLOGY_CO_LTD = 35836\nVENDOR_ID_MAMAT_GMBH = 35837\nVENDOR_ID_MATRIXX_SOFTWARE_INC = 35838\nVENDOR_ID_IMAGINE_ONE_TECHNOLOGY_MANAGEMENT = 35839\nVENDOR_ID_GYRUS_ACMI_INC = 35840\nVENDOR_ID_AGECODAGIS_SARL = 35841\nVENDOR_ID_RAMVZ = 35842\nVENDOR_ID_SEBASTIAN_MUSZYTOWSKI = 35843\nVENDOR_ID_STORMONT_VAIL_HEALTHCARE = 35844\nVENDOR_ID_HERAKLION_WIRELESS = 35845\nVENDOR_ID_PARSONS = 35846\nVENDOR_ID_GREENBONE_NETWORKS_GMBH = 35847\nVENDOR_ID_MULTIPOLARIS_LTD = 35848\nVENDOR_ID_TELEFONICA_INTERNATIONAL_WHOLESALE_SERVICES = 35849\nVENDOR_ID_HORNS_AND_HOOVES = 35850\nVENDOR_ID_ABIX_TECNOLOGIA = 35851\nVENDOR_ID_SPIRE_SCIENCES_LLC = 35852\nVENDOR_ID_REMOTE_ENTERPRISE_MONITORING_INC = 35853\nVENDOR_ID_AMERICAN_MODERN = 35854\nVENDOR_ID_DIALOG_SEMICONDUCTOR = 35855\nVENDOR_ID_BERCHTOLD_HOLDING_GMBH = 35856\nVENDOR_ID_AMARON_BVBA = 35857\nVENDOR_ID_THE_GOODYEAR_TIRE_RUBBER_CO = 35858\nVENDOR_ID_GEORGIA_PACIFIC_LLC = 35859\nVENDOR_ID_KVADROTEH_LTD = 35860\nVENDOR_ID_CRAWFORD_COMMUNICATIONS_INC = 35861\nVENDOR_ID_MOBILE_INTEGRATION_WORKGROUP = 35862\nVENDOR_ID_WAMAJU_LLC = 35863\nVENDOR_ID_ALES_HAKL = 35864\nVENDOR_ID_TRIVIA_SOLUTIONS_BV = 35865\nVENDOR_ID_ENO_INC = 35866\nVENDOR_ID_PRIOR_SRL = 35867\nVENDOR_ID_ATER_BELLUNO = 35868\nVENDOR_ID_STB_BROADCAST = 35869\nVENDOR_ID_OPSWISE_SOFTWARE_INC = 35870\nVENDOR_ID_CLOUPIA = 35871\nVENDOR_ID_HUGGLACOM = 35872\nVENDOR_ID_JDS_UNIPHASE_CORPORATION = 35873\nVENDOR_ID_ACTION_PACKED_NETWORKS = 35874\nVENDOR_ID_JX2_TECHNOLOGY_PTY_LTD = 35875\nVENDOR_ID_WHITECODELTD = 35876\nVENDOR_ID_LEITNER_AG_SPA = 35877\nVENDOR_ID_CONSEIL_GNRAL_DE_LAUBE = 35878\nVENDOR_ID_WELLDOC_INC = 35879\nVENDOR_ID_JSC_MEDIAFON = 35880\nVENDOR_ID_IONIS_GROUP = 35881\nVENDOR_ID_NTT_DATA_KYUSHU_CORPORATION = 35882\nVENDOR_ID_VISUALSOFT_PRIVATE_LIMITED = 35883\nVENDOR_ID_NETHOST_SRO = 35884\nVENDOR_ID_VZ_HOLDING_AG = 35885\nVENDOR_ID_ARISE_TELECOMMUNICATIONS_LTD = 35886\nVENDOR_ID_LUCIERNA_SLNE = 35887\nVENDOR_ID_DEADINKVINYL = 35888\nVENDOR_ID_COLUMBIASOFT_CORPORATION = 35889\nVENDOR_ID_VIDEO_FLOW_LTD = 35890\nVENDOR_ID_PUNCTUM_GESELLSCHAFT_FUER_SOFTWARE_MBH = 35891\nVENDOR_ID_ELMEH_GIU = 35892\nVENDOR_ID_XELMO = 35893\nVENDOR_ID_COGNIMATICS_AB = 35894\nVENDOR_ID_SLACKAREA_INTERNET_SERVICES = 35895\nVENDOR_ID_CONCORD_ENERGY = 35896\nVENDOR_ID_VIOLIN_MEMORY_INC = 35897\nVENDOR_ID_SYSTEREL = 35898\nVENDOR_ID_PRISM_CLINICAL_IMAGING_INC = 35899\nVENDOR_ID_DUMONT_NET_GMBH_CO_KG = 35900\nVENDOR_ID_AL_QUDS_UNIVERSITY = 35901\nVENDOR_ID_OPENHEADEND = 35902\nVENDOR_ID_BARTONIA_DOMAIN_AND_ENTERPRISES = 35903\nVENDOR_ID_MACROSAN = 35904\nVENDOR_ID_ACME_CEBUL_INC = 35905\nVENDOR_ID_UNISTER = 35906\nVENDOR_ID_CRV_NATURAL = 35907\nVENDOR_ID_EMBRANE_INC = 35908\nVENDOR_ID_HORACE_MANN_EDUCATORS_CORPORATION = 35909\nVENDOR_ID_OVERNETQCCA = 35910\nVENDOR_ID_MREZNE_TEHNOLOGIJE_VERSO = 35911\nVENDOR_ID_MAKEDONIJALEK = 35912\nVENDOR_ID_DIPUTACION_PROVINCIAL_DE_CCERES = 35913\nVENDOR_ID_BOREA_LTD = 35914\nVENDOR_ID_SERLI = 35915\nVENDOR_ID_ORANGEHEAD_SOFTWARE = 35916\nVENDOR_ID_KOBISUNORG_SURDURULEBILIR_SUNUCU_SISTEMLERI = 35917\nVENDOR_ID_ETON_INTERNATIONAL_CO_LTD = 35918\nVENDOR_ID_FUNKWERK_PLETTAC_ELECTRONICS_GMBH = 35919\nVENDOR_ID_SEBASTIAN_HIMBERGER_SOFTWARE = 35920\nVENDOR_ID_ALPHA_BIT_GMBH = 35921\nVENDOR_ID_BACKBASE_BV = 35922\nVENDOR_ID_ENTHUSIA_CONSULTING_LTD = 35923\nVENDOR_ID_IET_INTERNATIONAL_EMPIRE_TRADERS = 35924\nVENDOR_ID_WARSAW_STOCK_EXCHANGE = 35925\nVENDOR_ID_AGUAS_DE_LA_CUENCA_DEL_NORTE_SA = 35926\nVENDOR_ID_SOFTFINANA_SA = 35927\nVENDOR_ID_WHEATON_COLLEGE = 35928\nVENDOR_ID_PRODATA_MOBILITY_SYSTEMS_NV = 35929\nVENDOR_ID_RADEKS_MEDICAL_INFORMATION_TECHNOLOGIES_LTD = 35930\nVENDOR_ID_WOASIS_TELECOMMUNICATIONS_LTD = 35931\nVENDOR_ID_JM_TECHNOLOGY_INC = 35932\nVENDOR_ID_SEMIOCAST = 35933\nVENDOR_ID_OOO_CPCR_EXPRESS = 35934\nVENDOR_ID_RAU_STROMVERSORGUNGEN_GMBH = 35935\nVENDOR_ID_ICONMOBILE_GMBH = 35936\nVENDOR_ID_UNASSIGNED_45 = 35937\nVENDOR_ID_OMNIBOND_SYSTEMS_LLC = 35938\nVENDOR_ID_ORIGINAL1_GMBH = 35939\nVENDOR_ID_NEUHALFEN = 35940\nVENDOR_ID_MITSUBISHI_UFJ_SECURITIES_USA_INC = 35941\nVENDOR_ID_URALCHEM = 35942\nVENDOR_ID_BOERSE_STUTTGART = 35943\nVENDOR_ID_SELECOM = 35944\nVENDOR_ID_SWID = 35945\nVENDOR_ID_SMG_CO_LTD = 35946\nVENDOR_ID_SME_SOLUCIONES = 35947\nVENDOR_ID_PHONEYTUNESCOM = 35948\nVENDOR_ID_VIENNA_SYMPHONIC_LIBRARY_GMBH = 35949\nVENDOR_ID_EFOLDER_INC = 35950\nVENDOR_ID_XCONNECT_GLOBAL_NETWORKS = 35951\nVENDOR_ID_SLEEVEWERKS_BV = 35952\nVENDOR_ID_CHARGETEK_INC = 35953\nVENDOR_ID_VOD_PTY_LTD = 35954\nVENDOR_ID_NIIGATA_UNIVERSITY = 35955\nVENDOR_ID_CHINA_WING_TECHNOLOGIES_COLTD = 35956\nVENDOR_ID_DONJIN_COMMUNICATION_TECHNOLOGY_COLTD = 35957\nVENDOR_ID_VEDEKON = 35958\nVENDOR_ID_TECHWAY_SAS = 35959\nVENDOR_ID_DROTPOSTA_CONSULTING_LTD = 35960\nVENDOR_ID_CHRISTIAN_ARNOLD = 35961\nVENDOR_ID_PUMPKINHEADS_COLTD = 35962\nVENDOR_ID_K12_ITC_INC = 35963\nVENDOR_ID_BEIJING_CSS_HUATECH_INFO_TECH_LTD = 35964\nVENDOR_ID_CONTROL_RISKS_GROUP_LTD = 35965\nVENDOR_ID_MBDA_ITALIA_SPA = 35966\nVENDOR_ID_AUTOZONE = 35967\nVENDOR_ID_TRUSTFABRIC = 35968\nVENDOR_ID_VIDYO_INC = 35969\nVENDOR_ID_PLANETSGROUP = 35970\nVENDOR_ID_ZAHA_HADID_ARCHITECTS = 35971\nVENDOR_ID_AUDAXIS_SA = 35972\nVENDOR_ID_FENAZARI = 35973\nVENDOR_ID_SNMPSOFT_COMPANY = 35974\nVENDOR_ID_HEALTHSENSE_INC = 35975\nVENDOR_ID_HERRMANN_EDV_BERATUNG = 35976\nVENDOR_ID_REDDOG_CHILI = 35977\nVENDOR_ID_CLEARLEAP_INC = 35978\nVENDOR_ID_GONOW_TECNOLOGIA = 35979\nVENDOR_ID_VMONITOR_LLC = 35980\nVENDOR_ID_ISIGMA_ASESORA_TECNOLGICA_SL = 35981\nVENDOR_ID_HUMANNIX_CO_LTD = 35982\nVENDOR_ID_MADS_BV = 35983\nVENDOR_ID_SIMBRELLA = 35984\nVENDOR_ID_SM_CNS_CORPORATION = 35985\nVENDOR_ID_KALKITECH = 35986\nVENDOR_ID_SANGOMA_TECHNOLOGIES = 35987\nVENDOR_ID_HIPORT_SRL = 35988\nVENDOR_ID_MARANATHA_CHRISTIAN_UNIVERSITY = 35989\nVENDOR_ID_UK_MOD_DES = 35990\nVENDOR_ID_CHESAPEAKE_SYSTEMS = 35991\nVENDOR_ID_CHRISTIAN_HAIN = 35992\nVENDOR_ID_SYRUS_LTD = 35993\nVENDOR_ID_INTUIX_LLC = 35994\nVENDOR_ID_QUIDECCODE = 35995\nVENDOR_ID_DATATEK_APPLICATIONS_INC = 35996\nVENDOR_ID_KATH_JUGEND_ST_BRUNO = 35997\nVENDOR_ID_UNIVERSITAT_DANDORRA = 35998\nVENDOR_ID_E_FLAMINGO_LLC = 35999\nVENDOR_ID_HOST_CONSULTANTS = 36000\nVENDOR_ID_PJB_CONSULTING = 36001\nVENDOR_ID_TAIJI_COMPUTER_CORPORATION_LTD = 36002\nVENDOR_ID_TECHLAN_RETI_SRL = 36003\nVENDOR_ID_VITRACOM_AG = 36004\nVENDOR_ID_CSE_SCARL_CONSORZIO_SERVIZI_BANCARI = 36005\nVENDOR_ID_VFT_TELECOM = 36006\nVENDOR_ID_LOGIKOS_INC = 36007\nVENDOR_ID_KELLY_SERVICES_INC = 36008\nVENDOR_ID_6CONNECT_INC = 36009\nVENDOR_ID_LORDGANDALF = 36010\nVENDOR_ID_COMMONTIME_LTD = 36011\nVENDOR_ID_OXFORD_LIFE_INSURANCE_COMPANY = 36012\nVENDOR_ID_SMA_SOLAR_TECHNOLOGY_AG = 36013\nVENDOR_ID_RADIO_FREE_ASIA = 36014\nVENDOR_ID_SAVILLTECH = 36015\nVENDOR_ID_PROCERGS_RIO_GRANDE_DO_SUL_STATE_IT_COMPANY_BRAZIL = 36016\nVENDOR_ID_HUNTSMAN_CANCER_INSTITUTE_AT_THE_UNIVERSITY_OF_UTAH = 36017\nVENDOR_ID_RAAF_TECHNOLOGY = 36018\nVENDOR_ID_DIE_TAGESZEITUNG = 36019\nVENDOR_ID_POC_OY_LTD = 36020\nVENDOR_ID_IT_RESEARCH_CENTER_LLP = 36021\nVENDOR_ID_RKUIT_GMBH = 36022\nVENDOR_ID_STICHTING_CHRISTELIJKE_HOGESCHOOL_WINDESHEIM = 36023\nVENDOR_ID_ALTASOFT_SC = 36024\nVENDOR_ID_VIDEOPOLIS_FRANCE = 36025\nVENDOR_ID_GOLDZONE_WEB = 36026\nVENDOR_ID_METHODE_ELECTRONICS = 36027\nVENDOR_ID_NOCONAGEEK = 36028\nVENDOR_ID_MEDICAL_MICROGRAPHICS_LLC = 36029\nVENDOR_ID_HAPPYSERVER_LTD = 36030\nVENDOR_ID_TECHSENSE_SOLUTIONS_SDN_BHD = 36031\nVENDOR_ID_PROMSVJAZDIZAJN_OOO = 36032\nVENDOR_ID_PAK_EVENTURES = 36033\nVENDOR_ID_KELVIN_CONNECT_LTD = 36034\nVENDOR_ID_SIGNE_SA = 36035\nVENDOR_ID_DNA_OY = 36036\nVENDOR_ID_FOLIA_A_S = 36037\nVENDOR_ID_ADIF_ADMINISTRADOR_DE_INFRAESTRUCTURAS_FERROVIARIAS = 36038\nVENDOR_ID_ESTONIAN_INTERNET_FOUNDATION = 36039\nVENDOR_ID_IBETOR_SL = 36040\nVENDOR_ID_KAMAZ_INC = 36041\nVENDOR_ID_LIAB_APS = 36042\nVENDOR_ID_ATHENA_WIRELESS_COMMUNICATIONS_INC = 36043\nVENDOR_ID_UCC_PRO_GMBH_FORMERLY_NSSRNET = 36044\nVENDOR_ID_UMA_ELECTROTECHNICAL_SERVICES = 36045\nVENDOR_ID_TDVINE_CO_LTD = 36046\nVENDOR_ID_KADME_AS = 36047\nVENDOR_ID_PUISSANCE = 36048\nVENDOR_ID_GGG_KFT = 36049\nVENDOR_ID_FEED_YOUR_HEAD = 36050\nVENDOR_ID_TDM_CONSULT_GMBH = 36051\nVENDOR_ID_EDGECAST_NETWORKS_INC = 36052\nVENDOR_ID_AZKA_NATIONAL_FOR_INFORMATION_TECHNOLOGY = 36053\nVENDOR_ID_EVIGILO_LTD = 36054\nVENDOR_ID_RADLOGIX_PTY_LTD = 36055\nVENDOR_ID_AIDEV_LLC = 36056\nVENDOR_ID_FREESINNO_NETWORK_TECHNOLOGY_COLTD = 36057\nVENDOR_ID_BEIJING_TOPLINK_TECHNOLOGY_DEVELOPMENT_CO_LTD = 36058\nVENDOR_ID_INTERNATIONAL_ELECTRIC_SUPPLY_CORP_IESC = 36059\nVENDOR_ID_GEEKDAILY = 36060\nVENDOR_ID_AMONICS_LTD = 36061\nVENDOR_ID_INTEGRIUS_AB = 36062\nVENDOR_ID_NKIA_COLTD = 36063\nVENDOR_ID_ZAPPWARE = 36064\nVENDOR_ID_PIONIER_POLISH_OPTICAL_INTERNET = 36065\nVENDOR_ID_INVENSYS_TRICONEX = 36066\nVENDOR_ID_TIMO_GERKE = 36067\nVENDOR_ID_UBIMET_GESMBH = 36068\nVENDOR_ID_CARBOFOS_RU = 36069\nVENDOR_ID_POWER_STANDARDS_LAB = 36070\nVENDOR_ID_HERPECO_LLC = 36071\nVENDOR_ID_ANTARES_611_LLC = 36072\nVENDOR_ID_ETECSA_SA = 36073\nVENDOR_ID_DARK_MATTER_LABS_INC = 36074\nVENDOR_ID_TBWACHIATDAY = 36075\nVENDOR_ID_SAPO = 36076\nVENDOR_ID_XILOCORE = 36077\nVENDOR_ID_RFVISION_COLTD = 36078\nVENDOR_ID_AUDAXIS = 36079\nVENDOR_ID_NATIONAL_INFORMATION_TECHNOLOGY_AND_INTERNET_AGENCY = 36080\nVENDOR_ID_CLARE_CONTROLS_INC = 36081\nVENDOR_ID_ELECTRONIC_TELE_COMMUNICATIONS_INC = 36082\nVENDOR_ID_AGILITY_LOGISTICS_PVT_LTD = 36083\nVENDOR_ID_ELECTRONIC_CLASSROOM_OF_TOMORROW = 36084\nVENDOR_ID_L_CARD = 36085\nVENDOR_ID_LAMEHOSTIT = 36086\nVENDOR_ID_MCIO_INCORPORATED = 36087\nVENDOR_ID_LINOWSAT = 36088\nVENDOR_ID_SPARF = 36089\nVENDOR_ID_REMOTE_INSTRUMENTS = 36090\nVENDOR_ID_SIS_GROUP_PTY_LTD = 36091\nVENDOR_ID_NPP_UGPROMAVTOMATIZACIYA = 36092\nVENDOR_ID_WEIFANG_DONGSHENG_ELECTRONICS_CO_LTD = 36093\nVENDOR_ID_VVDN_TECHNOLOGIES = 36094\nVENDOR_ID_INSIGHTECK = 36095\nVENDOR_ID_ADAMA_UNIVERSITY = 36096\nVENDOR_ID_UNIXWIZNET = 36097\nVENDOR_ID_GOODFORBUSINESS = 36098\nVENDOR_ID_HANGMAT = 36099\nVENDOR_ID_WWF_UK = 36100\nVENDOR_ID_SOUTH_PATRON_FORMERLY_SMK_SOFTWARE = 36101\nVENDOR_ID_PARAMATRIX_TECHNOLOGIES_PVT_LTD = 36102\nVENDOR_ID_LAN_ETS = 36103\nVENDOR_ID_TRACESPAN_COMMUNICATIONS = 36104\nVENDOR_ID_BLUE_CORSS_BLUE_SHIELD_OF_MASSACHUSETTS = 36105\nVENDOR_ID_WRAPTASTIC_LLC_FOR_HTTP_RPM5ORG = 36106\nVENDOR_ID_HELEN_MARKS_MARKETING_LTD = 36107\nVENDOR_ID_COOPERATIVE_RESOURCES_INTERNATIONAL = 36108\nVENDOR_ID_STELLAWAREDE = 36109\nVENDOR_ID_WANNET_TECNOLOGIA_DA_INFORMAO_LTDA = 36110\nVENDOR_ID_INNOS_CO_LTD = 36111\nVENDOR_ID_PERCEPTIVE_SOFTWARE_INC = 36112\nVENDOR_ID_IQINVISION = 36113\nVENDOR_ID_AUTOMAZIONE_E_SICUREZZA_FERROVIARIA = 36114\nVENDOR_ID_TRUE_ACCESS_CONSULTING_SA = 36115\nVENDOR_ID_AKROMETRIX_LLC = 36116\nVENDOR_ID_GUSTAV_R_JANSEN = 36117\nVENDOR_ID_OFFSHORE_SYSTEMS_LTD = 36118\nVENDOR_ID_ZER0TOOLS_IT_SOLUTIONS = 36119\nVENDOR_ID_LEMNISYS = 36120\nVENDOR_ID_EBRUIT_LTD = 36121\nVENDOR_ID_DESIGNSKOLEN_KOLDING = 36122\nVENDOR_ID_KORATEK = 36123\nVENDOR_ID_VINZENZ_GRUPPE_KRANKENHAUSBETEILIGUNGS_UND_MANAGEMENT_GMBH = 36124\nVENDOR_ID_SECADM_GMBH = 36125\nVENDOR_ID_CCBILL = 36126\nVENDOR_ID_THE_ULYANOVSK_REG_DEPT_OF_TREASURY = 36127\nVENDOR_ID_MOBILETECH_LIMITED = 36128\nVENDOR_ID_INSTITUTION_DES_CHARTREUX = 36129\nVENDOR_ID_INDUSTEX_SL = 36130\nVENDOR_ID_ORAFOL_EUROPE_GMBH = 36131\nVENDOR_ID_WOERNHARDNET = 36132\nVENDOR_ID_CARTAGENA_AS = 36133\nVENDOR_ID_TRISTAN_NAVIKRVICIUS = 36134\nVENDOR_ID_YET_ANOTHER_LINUX_DISTRO = 36135\nVENDOR_ID_CENTRAL_BANK_OF_THE_UAE = 36136\nVENDOR_ID_RISING_SUN_PICTURES = 36137\nVENDOR_ID_CENTRON_COMMUNICATIONS_TECHNOLOGIES_FUJIAN_COLTD = 36138\nVENDOR_ID_FLKT_WOODS_GROUP_SA = 36139\nVENDOR_ID_FUNKWERK_INFORMATION_TECHNOLOGIES_KARLSFELD_GMBH = 36140\nVENDOR_ID_UBIQUOSS = 36141\nVENDOR_ID_ASTREA_LA_INFOPISTA_JURIDICA_SL = 36142\nVENDOR_ID_DIPSWITCH_NETWORKS = 36143\nVENDOR_ID_NOVASPARKS = 36144\nVENDOR_ID_ALLIANCE_HEALTHCARE = 36145\nVENDOR_ID_FIVE_COLLEGES_INCORPORATED = 36146\nVENDOR_ID_SIMREX_CORPORATION = 36147\nVENDOR_ID_WEBPRODUCE_CORPORATION = 36148\nVENDOR_ID_ARGOX_INFORMATION_CO_LTD = 36149\nVENDOR_ID_SHENZHEN_MINGWAH_AOHAN_HIGH_TECHNOLOGY_CORPORATION_LTD = 36150\nVENDOR_ID_HM_EI_ZRT = 36151\nVENDOR_ID_KULCZYK_TRADEX = 36152\nVENDOR_ID_BEIJING_INHAND_NETWORKS_TECHNOLOGY_COLTD = 36153\nVENDOR_ID_FACTOR_POWER_INC = 36154\nVENDOR_ID_US_ARMY_SURFACE_DEPLOYMENT_AND_DISTRIBUTION_COMMAND = 36155\nVENDOR_ID_MAX_INFORMATIONSTECHNOLOGIE_AG = 36156\nVENDOR_ID_GOOSEMANCZ = 36157\nVENDOR_ID_COBLITZ_LLC = 36158\nVENDOR_ID_INPHORIA_CORPORATION = 36159\nVENDOR_ID_OR_CZ_SPOL_S_R_O = 36160\nVENDOR_ID_HILLS_COOK_OUTCOMES_CONSULTING_COMPANY = 36161\nVENDOR_ID_HARDATA = 36162\nVENDOR_ID_CC_SERVICES_INC = 36163\nVENDOR_ID_VIDEOSWITCH_SRL = 36164\nVENDOR_ID_LEARNING_OBJECTS_INC = 36165\nVENDOR_ID_CABELAS = 36166\nVENDOR_ID_BEWATEC_KOMMUNIKATIONSTECHNIK_GMBH = 36167\nVENDOR_ID_JURKIEWICZ = 36168\nVENDOR_ID_RSG_MODEL_WORKS = 36169\nVENDOR_ID_KEEPEROS = 36170\nVENDOR_ID_HOST_GROUP_OF_COMPANIES_PTY_LTD = 36171\nVENDOR_ID_GORENJE_DD = 36172\nVENDOR_ID_BOBSH = 36173\nVENDOR_ID_CHENGDU_ETHERCOM_INFORMATION_TECHCOLTD = 36174\nVENDOR_ID_SUNSPEEDY_TECHNOLOGY_COLTD = 36175\nVENDOR_ID_HUAYUAN_TECHNOLOGY_COLTD = 36176\nVENDOR_ID_AIRSAGE_INC = 36177\nVENDOR_ID_MINETEC_PTY_LTD = 36178\nVENDOR_ID_CELERITY_SYSTEMS_PTY_LTD = 36179\nVENDOR_ID_BALTIC_AMADEUS_INFRASTRUKTUROS_PASLAUGOS = 36180\nVENDOR_ID_PM_MICROWAVE_SRL = 36181\nVENDOR_ID_ENYCA = 36182\nVENDOR_ID_VMK_RAUSCHER = 36183\nVENDOR_ID_WRIGHT_LINE_LLC = 36184\nVENDOR_ID_LVM_WORKS = 36185\nVENDOR_ID_HANGZHOU_PREVAIL_OPTOELECTRONIC_EQUIPMENT_COLTD = 36186\nVENDOR_ID_LOGICFACTOR = 36187\nVENDOR_ID_PLANDATA_DATENVERARBEITUNGSGESELLSCHAFT_MBH = 36188\nVENDOR_ID_BILGI_GIS = 36189\nVENDOR_ID_JIANG_WENKAIS_OWN_LDAP = 36190\nVENDOR_ID_OTOP_AG = 36191\nVENDOR_ID_XTENDX_AG = 36192\nVENDOR_ID_KENBIT_KOENIG_I_WSPLNICY_SPJ = 36193\nVENDOR_ID_IT_PROSERV_PROJECTS_SERVICES_ING_KARL_LIEPOLD = 36194\nVENDOR_ID_HEDERA_TECHNOLOGY = 36195\nVENDOR_ID_KAI_MEDIA_CO = 36196\nVENDOR_ID_MOVIUS_INTERACTIVE_CORPORATION = 36197\nVENDOR_ID_THESPIDERSPROJECT = 36198\nVENDOR_ID_OPEN_FINANCE = 36199\nVENDOR_ID_VALTECH = 36200\nVENDOR_ID_NTV_BROADCASTING_COMPANY = 36201\nVENDOR_ID_THOMSON_REUTERS = 36202\nVENDOR_ID_NAMIRIAL_SPA = 36203\nVENDOR_ID_SYSINFORG_KFT = 36204\nVENDOR_ID_XHOMBEE_STUDIOS = 36205\nVENDOR_ID_STICHTING_REVELATION_SPACE = 36206\nVENDOR_ID_SYNERGY_INFORMATION_SYSTEMS_INC = 36207\nVENDOR_ID_KARL_STORZ = 36208\nVENDOR_ID_RGAZDI_KFT = 36209\nVENDOR_ID_CENTRE_HOSPITALIER_DE_LUNIVERSIT_DE_MONTRAL = 36210\nVENDOR_ID_THE_CATHOLIC_UNIVERSITY_OF_AMERICA = 36211\nVENDOR_ID_RESEARCH_AND_EDUCATION_BRIDGE_CERTIFICATION_AUTHORITY_INC = 36212\nVENDOR_ID_SIA_INBOKSS = 36213\nVENDOR_ID_GALAXY_TELECOM_TECHNOLOGIES_LTD = 36214\nVENDOR_ID_GREEK_ACADEMIC_NETWORK_GUNET = 36215\nVENDOR_ID_GOLIATHDNS_ENK = 36216\nVENDOR_ID_LADELA_INTERACTIVE = 36217\nVENDOR_ID_OPEN_CLOUD_CONSULTANTS_INC = 36218\nVENDOR_ID_PIPE_COATERS_NIGERIA_LIMITED = 36219\nVENDOR_ID_FLACSO = 36220\nVENDOR_ID_INTERNET_BRANDS_INC = 36221\nVENDOR_ID_QBS_QUALITY_BUSINESS_SOFTWARE = 36222\nVENDOR_ID_BEST_CLOSED_JOINT_STOCK_COMPANY_BELARUSIAN_TELECOMMUNICATIONS_NETWORK = 36223\nVENDOR_ID_PLAYPHONE_ENTRETENIMENTO_LTDA = 36224\nVENDOR_ID_SECURE_FORWARD_LLC = 36225\nVENDOR_ID_SECURUS_TECHNOLOGIES_INC = 36226\nVENDOR_ID_BOOKMARKCOM = 36227\nVENDOR_ID_DELLUS_COMMUNICATION_TECHNOLOGIES_LTD = 36228\nVENDOR_ID_TECHSTUDIO_SOLUTIONS_PTE_LTD = 36229\nVENDOR_ID_AXCO_INSURANCE_INFORMATION_SERVICES = 36230\nVENDOR_ID_SEMANTICS_GMBH = 36231\nVENDOR_ID_STIG_JOHNSEN_IKT = 36232\nVENDOR_ID_SECURITY_INDUSTRY_SUPPLIES_PTY_LTD = 36233\nVENDOR_ID_THE_OTTO_VON_GUERICKE_UNIVERSITY_OF_MAGDEBURG = 36234\nVENDOR_ID_LIVEDRIVE_INTERNET_LTD = 36235\nVENDOR_ID_POINTSHARP = 36236\nVENDOR_ID_APPLICATION_SOLUTIONS_ELECTRONICS_AND_VISION_LTD = 36237\nVENDOR_ID_OOCERO_MICROSYSTEMS_UNTERNEHMERGESELLSCHAFT_HAFTUNGSBESCHRNKT = 36238\nVENDOR_ID_LIVE_OAK_TECHNOLOGIES_LLC = 36239\nVENDOR_ID_PROBUILD_HOLDINGS_LLC = 36240\nVENDOR_ID_BANKINTER = 36241\nVENDOR_ID_MEP_SRL = 36242\nVENDOR_ID_HOLLAN_FAMILY = 36243\nVENDOR_ID_LINGUAMATICS_SOLUTIONS_LTD = 36244\nVENDOR_ID_EBO_GROUP_INC = 36245\nVENDOR_ID_RZTEKAMMER_SCHLESWIG_HOLSTEIN = 36246\nVENDOR_ID_ACAMS_AS = 36247\nVENDOR_ID_HEADHUNTER = 36248\nVENDOR_ID_GREEN_CLOUD_SRL = 36249\nVENDOR_ID_NEW_YORK_STATE_DIVISION_OF_CRIMINAL_JUSTICE_SERVICES = 36250\nVENDOR_ID_ALLGOODBITSORG = 36251\nVENDOR_ID_PHARMATECHNIK_GMBH_CO_KG = 36252\nVENDOR_ID_CUSTOMIZED_INFORMSYSTEMS_LTD = 36253\nVENDOR_ID_BRANDON_ASSOCIATES = 36254\nVENDOR_ID_GEEK_CENTRAL = 36255\nVENDOR_ID_PRIMA_CINEMA_INC = 36256\nVENDOR_ID_GIVAUDAN_SA = 36257\nVENDOR_ID_THREATGUARD_INC = 36258\nVENDOR_ID_CALLINO = 36259\nVENDOR_ID_BIOMARIN_PHARMACEUTICAL_INC = 36260\nVENDOR_ID_BD2000_LTD = 36261\nVENDOR_ID_MEYERTECH_LTD = 36262\nVENDOR_ID_EUROP_ASSISTANCE_SERVICIOS_INTEGRALES_DE_GESTION_SA = 36263\nVENDOR_ID_EVALDO_GARDENALI = 36264\nVENDOR_ID_MAXBERT = 36265\nVENDOR_ID_GOLDEN_GEKKO = 36266\nVENDOR_ID_TORSTEN_FRANKE = 36267\nVENDOR_ID_COMABILITY_2 = 36268\nVENDOR_ID_SERVICIOS_DE_CONSULTORIA_INDEPENDIENTE_SL = 36269\nVENDOR_ID_JAEA = 36270\nVENDOR_ID_STREAMOCEAN_INC = 36271\nVENDOR_ID_PROTACON_SOLUTIONS_OY = 36272\nVENDOR_ID_HAAS_ELEKTRO_GMBH = 36273\nVENDOR_ID_EMBEDDED_SYSTEMS_TECHNOLOGY_GROUP = 36274\nVENDOR_ID_COMMUNITAKE = 36275\nVENDOR_ID_NORTH_ISLAND_CREDIT_UNION = 36276\nVENDOR_ID_UOL_SA = 36277\nVENDOR_ID_PROTALITY_LTD = 36278\nVENDOR_ID_UNO_WEB_INFORMAO_E_TECNOLOGIA_LTDA = 36279\nVENDOR_ID_BASDA_MEDICAL_APPARATUS_COLTD = 36280\nVENDOR_ID_BEIJING_BOOMSENSE_TECHNOLOGY_COLTD = 36281\nVENDOR_ID_MONICO_MONITORING_INC = 36282\nVENDOR_ID_LILEE_SYSTEMS_INC = 36283\nVENDOR_ID_CENTRE_PSYCHOTHRAPIQUE_DE_LAIN = 36284\nVENDOR_ID_ALLIANCE_DESIGN_WORKGROUP = 36285\nVENDOR_ID_MIKROKLIMA_SRO = 36286\nVENDOR_ID_WTVISION = 36287\nVENDOR_ID_EDITORA_DEL_MAR_SA = 36288\nVENDOR_ID_AVM_INFORMATIQUE = 36289\nVENDOR_ID_VEEX_INC = 36290\nVENDOR_ID_SIGNALION_GMBH = 36291\nVENDOR_ID_KULTHAUSKANTE_EV = 36292\nVENDOR_ID_SMARTLINK_NETWORK_SYSTEMS_LIMITED = 36293\nVENDOR_ID_MSO_LINK = 36294\nVENDOR_ID_MARUBENI_ITOCHU_TUBULARS_AMERICA_INC = 36295\nVENDOR_ID_MENTOR_SOLUTIONS = 36296\nVENDOR_ID_DVM_ITS = 36297\nVENDOR_ID_BAUSTEM_TECHNOLOGIES_LTD = 36298\nVENDOR_ID_RONIX_SYSTEMS = 36299\nVENDOR_ID_INTERVALE_JSC = 36300\nVENDOR_ID_URS_FEDERAL_SERVICES = 36301\nVENDOR_ID_ARTIIS_GROUP_AS = 36302\nVENDOR_ID_AUTHENTEC_INC = 36303\nVENDOR_ID_KANDCNET_INC = 36304\nVENDOR_ID_WOSIGN_CA_LIMITED_FORMERLY_WOSIGN_ECOMMERCE_SERVICES_LTD = 36305\nVENDOR_ID_UNIVERSITY_OF_TEESSIDE = 36306\nVENDOR_ID_SONUMA = 36307\nVENDOR_ID_TXTNATION_LTD = 36308\nVENDOR_ID_CIRCADENCE_CORPORATION = 36309\nVENDOR_ID_FIRELANDS_REGIONAL_MEDICAL_CENTER = 36310\nVENDOR_ID_EXTHEX_GMBH = 36311\nVENDOR_ID_ALERT_LOGIC_INC = 36312\nVENDOR_ID_GL_COMMUNICATIONS_INC = 36313\nVENDOR_ID_REGIONAL_COURT_IN_LUBLIN = 36314\nVENDOR_ID_JOEL_RIEDESEL = 36315\nVENDOR_ID_POLAR_POWER_INC = 36316\nVENDOR_ID_AVCOM_OF_VIRGINIA_INC = 36317\nVENDOR_ID_MARATHON_PETROLEUM_COMPANY = 36318\nVENDOR_ID_IT_CUBE_SYSTEMS_GMBH = 36319\nVENDOR_ID_4TEL_PTY_LTD = 36320\nVENDOR_ID_DIRECCIN_EJECUTIVA_DE_LA_MAGISTRATURA = 36321\nVENDOR_ID_SEMANTICLAB = 36322\nVENDOR_ID_WYNNIT_LTD = 36323\nVENDOR_ID_OPENRT = 36324\nVENDOR_ID_IMAQLIQ_LTD = 36325\nVENDOR_ID_T_GIPP = 36326\nVENDOR_ID_9NETICS_INC = 36327\nVENDOR_ID_PARVUS_CORPORATION = 36328\nVENDOR_ID_OHIO_FARMERS_INSURANCE_COMPANY = 36329\nVENDOR_ID_COMWIRED_INC = 36330\nVENDOR_ID_SOCIAL_SCIENTIFIC_SYSTEMS = 36331\nVENDOR_ID_COAST360_FEDERAL_CREDIT_UNION = 36332\nVENDOR_ID_WILSHIRE_MEDIA_GROUP = 36333\nVENDOR_ID_DIALOG_INFORMATION_TECHNOLOGY = 36334\nVENDOR_ID_ACEWAY_TELECOM_COLTD = 36335\nVENDOR_ID_ARXSCAN_INC = 36336\nVENDOR_ID_ST_ANTONIUS_ZIEKENHUIS = 36337\nVENDOR_ID_RESI_INFORMATIK_AUTOMATION_GMBH = 36338\nVENDOR_ID_NEUROSEARCH_A_S = 36339\nVENDOR_ID_PHONOGRAPHIC_PERFORMANCE_LIMITED = 36340\nVENDOR_ID_OPTIVER = 36341\nVENDOR_ID_ERLYVIDEO = 36342\nVENDOR_ID_CORECODEC_INC = 36343\nVENDOR_ID_SKYFIBER_INC = 36344\nVENDOR_ID_BENCHBEE_CO_LTD = 36345\nVENDOR_ID_X_TRANS_INC = 36346\nVENDOR_ID_PROSODIE = 36347\nVENDOR_ID_COMPASS_EOS = 36348\nVENDOR_ID_ANSEC_GROUP_SRO = 36349\nVENDOR_ID_NEW_ZEALAND_MINISTRY_OF_EDUCATION = 36350\nVENDOR_ID_CESI_SPA = 36351\nVENDOR_ID_JUST_IT_SRL = 36352\nVENDOR_ID_BRIDGEWATER = 36353\nVENDOR_ID_GLOBOCOM = 36354\nVENDOR_ID_BIRUNI_GRID_COMPUTING_CENTRE = 36355\nVENDOR_ID_ZYCOMM_ELECTRONICS_LIMITED = 36356\nVENDOR_ID_NOMOS_BANK_OPEN_JOINT_STOCK_COMPANY = 36357\nVENDOR_ID_WHOLE_FOODS_MARKET_SERVICES_INC = 36358\nVENDOR_ID_SECURUS_SOFTWARE_LTD = 36359\nVENDOR_ID_ASTELNET = 36360\nVENDOR_ID_APTEC_LLC = 36361\nVENDOR_ID_OT_BIOELETTRONICA_SNC = 36362\nVENDOR_ID_NRT_LLC = 36363\nVENDOR_ID_STEFAN_REINHOLD = 36364\nVENDOR_ID_OTJ_TECNOLOGIA = 36365\nVENDOR_ID_KAMINARIO = 36366\nVENDOR_ID_E_SONDE_NETWORK_MONITORING_SL = 36367\nVENDOR_ID_SHENZHEN_HEXICOM_TECHNOLOGY_CO_LTD = 36368\nVENDOR_ID_CIRRASCALE_CORPORATION = 36369\nVENDOR_ID_GROWTH_CURVE_TECHNOLOGIES_LTD = 36370\nVENDOR_ID_SOLIUM_CAPITAL_INC = 36371\nVENDOR_ID_FLYGPRESTANDA_US_INC = 36372\nVENDOR_ID_HHO_AUTOMATION = 36373\nVENDOR_ID_MIG = 36374\nVENDOR_ID_NEOTA_LOGIC_INC = 36375\nVENDOR_ID_VERSASUITE = 36376\nVENDOR_ID_SCHMIDT_ELECTRONIC = 36377\nVENDOR_ID_NORDIC_AKKASOURCE_AB = 36378\nVENDOR_ID_MESTO_PROSTEJOV = 36379\nVENDOR_ID_INTERNET_APPLICATIONS_RESEARCH_AND_DEVELOPMENT_LLC = 36380\nVENDOR_ID_TELEMATENET_SOFTWARE = 36381\nVENDOR_ID_DAMBALLA_INC = 36382\nVENDOR_ID_VDC_DISPLAY_COMPANY = 36383\nVENDOR_ID_DESIGNFUSION_INC = 36384\nVENDOR_ID_NMS_UNLIMITED = 36385\nVENDOR_ID_DIGIA_CC = 36386\nVENDOR_ID_SCORPION_HOLDING_COMPANY_LIMITED = 36387\nVENDOR_ID_SANCTUARY_GROUP = 36388\nVENDOR_ID_INFOSPECTRUM_INDIA_PVT_LTD = 36389\nVENDOR_ID_NICE_THOUGHTS = 36390\nVENDOR_ID_BEIJING_JINYUANXIN_TECHNOLOGY_COLTD = 36391\nVENDOR_ID_TAXCOM_LTD = 36392\nVENDOR_ID_BOHEMIA_INTERACTIVE = 36393\nVENDOR_ID_BENCO_DENTAL = 36394\nVENDOR_ID_HOCHSCHULE_WILHELMSHAVEN_OLDENBURG_ELSFLETH = 36395\nVENDOR_ID_OAO_FSK_EES_MES_SIBERIAN = 36396\nVENDOR_ID_PLURK_INC = 36397\nVENDOR_ID_INGENIERIA_GBR_CA = 36398\nVENDOR_ID_39TH_STUDIOS_LLC = 36399\nVENDOR_ID_NEO_SILURIAN_TECHNOLOGIES_NS_TECHNOLOGIES = 36400\nVENDOR_ID_DAX_NETWORKS_LTD = 36401\nVENDOR_ID_CHUNICHI_DENSHI_COLTD = 36402\nVENDOR_ID_SENTIAM_INC = 36403\nVENDOR_ID_MAKO_NETWORKS_LTD = 36404\nVENDOR_ID_DEPARTMENT_OF_INFORMATION_SYSTEM_HANOI_NATIONAL_UNIVERSITY_OF_EDUCATION_VIETNAM = 36405\nVENDOR_ID_POPTARANTULA = 36406\nVENDOR_ID_PEER_REVIEW_MEDIATION_AND_ARBITRATION = 36407\nVENDOR_ID_NORGES_BANK_INVESTMENT_MANAGEMENT = 36408\nVENDOR_ID_FOYER_ASSURANCES_SA = 36409\nVENDOR_ID_GOKURAKUIT = 36410\nVENDOR_ID_ZHEJIANG_CHUANGYI_TECHNOLOGY_CO_LTD = 36411\nVENDOR_ID_SCIENTIFIC_MANUFACTURING_FIRM_STALENERGO_LIMITED = 36412\nVENDOR_ID_LUMIPLAN_SAS = 36413\nVENDOR_ID_ESPIAL_GROUP_INC = 36414\nVENDOR_ID_INRS_CUSTOM_DATA_INC = 36415\nVENDOR_ID_HARRITRONICS_LLC = 36416\nVENDOR_ID_KDE_EV = 36417\nVENDOR_ID_QWILT_INC = 36418\nVENDOR_ID_PATH_INTELLIGENCE = 36419\nVENDOR_ID_TRINET_CO_LTD = 36420\nVENDOR_ID_GENIEGATECOM = 36421\nVENDOR_ID_GAIKAI_INC = 36422\nVENDOR_ID_WARPED_REALITY_STUDIOS = 36423\nVENDOR_ID_ROBERTO_DE_DURO = 36424\nVENDOR_ID_FLADIAT = 36425\nVENDOR_ID_AT_SOFTWARE_UND_RECHNERTECHNIK_GMBH = 36426\nVENDOR_ID_SONECO_DOO = 36427\nVENDOR_ID_INREAL_TECHNOLOGIES_LTD = 36428\nVENDOR_ID_TOOLSLV_SIA = 36429\nVENDOR_ID_PIARISTA_GIMNZIUM_VC = 36430\nVENDOR_ID_COBHAM = 36431\nVENDOR_ID_PROTECO_INDUSTRIA_ELETROTECNICA_LTDA = 36432\nVENDOR_ID_STATION_TO_STATION_BV = 36433\nVENDOR_ID_INOVIT_GMBH = 36434\nVENDOR_ID_RATHRAVANE_LLC = 36435\nVENDOR_ID_BEIJING_GUOTIE_HUACHEN_COMMUNICATION_INFORMATION_TECHNOLOGY_COLTD = 36436\nVENDOR_ID_ASAHI_ELECTRONICS_COLTD = 36437\nVENDOR_ID_SHANGHAI_XZ_COM_COLTD = 36438\nVENDOR_ID_TELENETIK_CORPORATION = 36439\nVENDOR_ID_RICH_RIGHT_TECHNOLOGY_LIMITED = 36440\nVENDOR_ID_G_FIT_GMBH_CO_KG = 36441\nVENDOR_ID_COMUNE_DI_JESI = 36442\nVENDOR_ID_EIKJU_AG = 36443\nVENDOR_ID_SANA_IT_SERVICES_GMBH_BERLIN_BRANDENBURG = 36444\nVENDOR_ID_FOTOCOM = 36445\nVENDOR_ID_NETKEY_INFORMATION_TECHNOLOGY_GMBH = 36446\nVENDOR_ID_COLLIERS_INTERNATIONAL = 36447\nVENDOR_ID_VERKEHRSAUTOMATISIERUNG_BERLIN_GMBH = 36448\nVENDOR_ID_COMPUTATION_INSTITUTE = 36449\nVENDOR_ID_DFZ = 36450\nVENDOR_ID_CNP_ASSURANCES = 36451\nVENDOR_ID_SAMARA_INSTITUTE_OF_OPEN_EDUCATION = 36452\nVENDOR_ID_VANGUARDIA_LIBERAL = 36453\nVENDOR_ID_RGI_INC = 36454\nVENDOR_ID_SYNERTRONIXX_GMBH = 36455\nVENDOR_ID_FREIWILLIGE_FEUERWEHR_STRASSHOF = 36456\nVENDOR_ID_APL_SOFTWARE_SL = 36457\nVENDOR_ID_TRIUMFANT_INC = 36458\nVENDOR_ID_SURVISION = 36459\nVENDOR_ID_PANGYRESOFT = 36460\nVENDOR_ID_SQUEEP = 36461\nVENDOR_ID_1ST_SOURCE_BANK = 36462\nVENDOR_ID_DNW_TECHNOLOGIES = 36463\nVENDOR_ID_HENRICH = 36464\nVENDOR_ID_DATA_CENTER_MANAGEABILITY_INTERFACE_FORUM = 36465\nVENDOR_ID_BALLARD_FUEL_CELL_SYSTEMS_FORMERLY_IDATECH_LLC = 36466\nVENDOR_ID_ADESSO_AG = 36467\nVENDOR_ID_CORNASTONE_INFRASTRUCTURE_SERVICES_PTY_LTD = 36468\nVENDOR_ID_THROUGH_IP_PTY_LTD = 36469\nVENDOR_ID_SOFDELA_INC = 36470\nVENDOR_ID_BEIJING_SUREKAM_TECHNOLOGY_CO_LTD = 36471\nVENDOR_ID_ILAIT = 36472\nVENDOR_ID_DIRECT_ONE_SA = 36473\nVENDOR_ID_LIFESPAN_CORPORATION = 36474\nVENDOR_ID_FUJIAN_ETIM_INFORMATION_TECHNOLOGY_COLTD = 36475\nVENDOR_ID_ACADEMIA_DE_INFORMTICA_BRAVA_ENGENHARIA_DE_SISTEMA_LDA = 36476\nVENDOR_ID_MINISTRY_OF_HEALTH_SAUDI_ARABIA = 36477\nVENDOR_ID_WAREVALLEY = 36478\nVENDOR_ID_FASTBOOKING = 36479\nVENDOR_ID_DRIVING_GROWTH_INTERNATIONAL_GMBH = 36480\nVENDOR_ID_EQQON_GMBH = 36481\nVENDOR_ID_FIRST_BUSINESSPOST_GMBH = 36482\nVENDOR_ID_LOWE_ENTERPRISES_AND_DESTINATION_HOTELS_AND_RESORTS = 36483\nVENDOR_ID_JAREVO = 36484\nVENDOR_ID_NCK_RESEARCH_LLC = 36485\nVENDOR_ID_ECATOR_LTD = 36486\nVENDOR_ID_SHANGHAI_XINMIN_TELECOM_TECHNOLOGIES_COLTD = 36487\nVENDOR_ID_BRIMROSE_TECHNOLOGY_CORPORATION = 36488\nVENDOR_ID_GEOVAN_SALVATO_BORGES = 36489\nVENDOR_ID_MASSHOUSING = 36490\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_LONG_BEACH = 36491\nVENDOR_ID_JUNET_JORDANIAN_NETWORK_UNIVERSITIES = 36492\nVENDOR_ID_IDIS_COLTD = 36493\nVENDOR_ID_FIXMO_INC = 36494\nVENDOR_ID_SYSTEMFIVE = 36495\nVENDOR_ID_TEAMBOX_SARL = 36496\nVENDOR_ID_BUZZINBEES_SAS = 36497\nVENDOR_ID_ASUREA_INSURANCE_SERVICES = 36498\nVENDOR_ID_WEST_PENN_ALLEGHENY_HEALTH_SYSTEMS = 36499\nVENDOR_ID_BEHAVIOREAL_LTD = 36500\nVENDOR_ID_EVER_TEAM_SOFTWARE = 36501\nVENDOR_ID_NETBOSS_TECHNOLOGIES_INC = 36502\nVENDOR_ID_WALDMEISDACOM = 36503\nVENDOR_ID_JOINT_STOCK_COMPANY_ARKHANGELSK_SALE_COMPANY = 36504\nVENDOR_ID_VIATEL = 36505\nVENDOR_ID_COM_N_S_LTD = 36506\nVENDOR_ID_CHGAUERT = 36507\nVENDOR_ID_UNICA_CORPORATION = 36508\nVENDOR_ID_BEIJING_TESTOR_TECHNIQUAL_LTD = 36509\nVENDOR_ID_TECHNOSERV_A_S = 36510\nVENDOR_ID_MKB_UNIONBANK_AD = 36511\nVENDOR_ID_CITILOG = 36512\nVENDOR_ID_SOGELINK_SAS = 36513\nVENDOR_ID_IPEER_INTERNET_NETWORK = 36514\nVENDOR_ID_SUPREMA_CORTE_DE_JUSTICIA_DE_LA_REPBLICA_ORIENTAL_DEL_URUGUAY = 36515\nVENDOR_ID_BEAUFORT_DELTA_EDUCATION_COUNCIL = 36516\nVENDOR_ID_ESTALEA_LP = 36517\nVENDOR_ID_RF_TECHNOLOGY_PTY_LTD = 36518\nVENDOR_ID_BSDN = 36519\nVENDOR_ID_SIGI = 36520\nVENDOR_ID_GLOBAL_RADIODATA_COMMUNICATIONS_LTD = 36521\nVENDOR_ID_SIMPLES_CONSULTORIA = 36522\nVENDOR_ID_SIPPYSOFT = 36523\nVENDOR_ID_LOCUS_TELECOMMUNICATIONS_INC = 36524\nVENDOR_ID_IMATIA_INNOVATION_SL = 36525\nVENDOR_ID_BLACKHAWK_COMPUTER_SERVICES = 36526\nVENDOR_ID_MARK_PRHL = 36527\nVENDOR_ID_WMZ_ENGENHARIA = 36528\nVENDOR_ID_BLUESPACE_SOFTWARE = 36529\nVENDOR_ID_FRUKTTRDET = 36530\nVENDOR_ID_NETFORD = 36531\nVENDOR_ID_STATE_AGENCY_OF_MEDICINES_OF_LATVIA = 36532\nVENDOR_ID_DANAHER_CORPORATION = 36533\nVENDOR_ID_BITARTISTS = 36534\nVENDOR_ID_DER_BECK_GMBH = 36535\nVENDOR_ID_EPRINSA = 36536\nVENDOR_ID_BEIJING_NETOPCHIP_TECHNOLOGY_COLTD = 36537\nVENDOR_ID_EXPERTEACH_GESELLSCHAFT_FR_NETZWERKKOMPETENZ_MBH = 36538\nVENDOR_ID_SMART_SNMP = 36539\nVENDOR_ID_INNOFINITY_GMBH = 36540\nVENDOR_ID_FIVES = 36541\nVENDOR_ID_STPETERSBURG_OUT_PATIENT_DEPARTMENT_N106 = 36542\nVENDOR_ID_SASCHA_SILBE = 36543\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DO_ABC = 36544\nVENDOR_ID_II2P_LLC = 36545\nVENDOR_ID_TOWERS_WATSON = 36546\nVENDOR_ID_HEIMATVEREIN_ELTE_EV = 36547\nVENDOR_ID_VIRTUALMIN_INC = 36548\nVENDOR_ID_MEDIENZENTRUM_KASSEL = 36549\nVENDOR_ID_ANTHONYVINHPHAM = 36550\nVENDOR_ID_RAADIUS_LLC = 36551\nVENDOR_ID_CORA_INFORMATIQUE = 36552\nVENDOR_ID_ALTOS_SOLUTIONS = 36553\nVENDOR_ID_MOOCOM_CORPORATION = 36554\nVENDOR_ID_TIMETOOLS_LIMITED = 36555\nVENDOR_ID_TRIAD_SEMICONDUCTOR_INC = 36556\nVENDOR_ID_POSITIVE_SOFTWARE_SPRL = 36557\nVENDOR_ID_ACTUS_DIGITAL = 36558\nVENDOR_ID_BITNETHU_LTD = 36559\nVENDOR_ID_ENTROUVERT = 36560\nVENDOR_ID_NWORK_COLTD = 36561\nVENDOR_ID_GREEN_RESOURCE_INC = 36562\nVENDOR_ID_REMSDAQ_LIMITED = 36563\nVENDOR_ID_DANIEL_FERNANDES = 36564\nVENDOR_ID_WASHINGTON_STATE_PATROL = 36565\nVENDOR_ID_NEW_FRONTIERS_SOFTWARE_GMBH = 36566\nVENDOR_ID_TEVA_PHARMACEUTICAL_INDUSTRIES_LTD = 36567\nVENDOR_ID_ANIXTER = 36568\nVENDOR_ID_GRIDSTORE = 36569\nVENDOR_ID_GEMSERING_STUTTGART_GMBH = 36570\nVENDOR_ID_PICOWARE_LTD = 36571\nVENDOR_ID_NET4GAS_SRO = 36572\nVENDOR_ID_HARNEY = 36573\nVENDOR_ID_SCI_GROUP = 36574\nVENDOR_ID_MERLAR = 36575\nVENDOR_ID_APB_PRODATA_LTDA = 36576\nVENDOR_ID_STARSCRIBER_CORPORATION = 36577\nVENDOR_ID_KRON_TELEKOMUNIKASYON_HIZMETLERI_AS = 36578\nVENDOR_ID_ERSTE_BANK_HUNGARY_NYRT = 36579\nVENDOR_ID_DVG_DEUTSCHE_VERTRIEBSGESELLSCHAFT_FR_PUBLIKATIONEN_UND_FILME_MBH = 36580\nVENDOR_ID_BSTECNOLOGIA = 36581\nVENDOR_ID_ARDUINO_HTTP_WWWARDUINOCC = 36582\nVENDOR_ID_TOM_AAFLOEN = 36583\nVENDOR_ID_VMKIDCOM = 36584\nVENDOR_ID_LOGAN_TECHNOLOGIES = 36585\nVENDOR_ID_NET_IDEA_DOO = 36586\nVENDOR_ID_NFB_CONSULTING_PTY_LIMITED = 36587\nVENDOR_ID_SATELLINK_INC = 36588\nVENDOR_ID_PIER_1_IMPORTS = 36589\nVENDOR_ID_RB_DATENSYSTEME_GMBH = 36590\nVENDOR_ID_PREFEITURA_MUNICIPAL_DE_FORTALEZA = 36591\nVENDOR_ID_THE_CBORD_GROUP_INC = 36592\nVENDOR_ID_PAUL_DE_AUDNEY = 36593\nVENDOR_ID_CERTI_NETWORKS_SDN_BHD_FORMERLY_TELISTAR_SOLUTIONS_PTE_LTD = 36594\nVENDOR_ID_ENA_TECNOLOGIA_SL = 36595\nVENDOR_ID_DACHSER_GMBH_CO_KG = 36596\nVENDOR_ID_PRDS = 36597\nVENDOR_ID_SELEX_SYSTEMS_INTEGRATION_INC = 36598\nVENDOR_ID_BREMER_LANDESBANK = 36599\nVENDOR_ID_NASHIRE_AG_STARTUP_HTTP_WWWNASHIRECOM = 36600\nVENDOR_ID_OTPASSWD = 36601\nVENDOR_ID_OBSERVIUM = 36602\nVENDOR_ID_ITECHNICAL = 36603\nVENDOR_ID_MEDIA_SERVICE_PROVIDER_LTD = 36604\nVENDOR_ID_HANNOVER_RCKVERSICHERUNG_AG = 36605\nVENDOR_ID_LITTLEHALL_CORPORATION = 36606\nVENDOR_ID_JOHNNY_ABRAHAMSSON = 36607\nVENDOR_ID_WHTY = 36608\nVENDOR_ID_UNIVERSITA_DEL_SALENTO = 36609\nVENDOR_ID_AUGUST_MOON_LLC = 36610\nVENDOR_ID_ZIBORSKI_KG = 36611\nVENDOR_ID_ANGLOGOLD_ASHANTI = 36612\nVENDOR_ID_UNITED_EUROPE_HOLDING_OJSC = 36613\nVENDOR_ID_ITL_INSTITUT_FR_TECHNISCHE_LITERATUR_AG = 36614\nVENDOR_ID_IDENTITY_NETWORKS = 36615\nVENDOR_ID_ARCATEM = 36616\nVENDOR_ID_ROOX = 36617\nVENDOR_ID_ALCEO_SRL = 36618\nVENDOR_ID_BEATPORT_LLC = 36619\nVENDOR_ID_8086_LIMITED = 36620\nVENDOR_ID_KRITHIA_LTD = 36621\nVENDOR_ID_WELLHATINC = 36622\nVENDOR_ID_SWEDISH_ORPHAN_BIOVITRUM = 36623\nVENDOR_ID_SENATH_PTY_LTD = 36624\nVENDOR_ID_ALLESKLARCOM_AG = 36625\nVENDOR_ID_STATE_OF_MONTANA = 36626\nVENDOR_ID_COMPLUS_CZ_AS = 36627\nVENDOR_ID_INPHOSOFT_PTE_LTD = 36628\nVENDOR_ID_ASSENS_KOMMUNE = 36629\nVENDOR_ID_3STYLESTUDIO_SRL = 36630\nVENDOR_ID_PORTALIFY_LTD = 36631\nVENDOR_ID_SCALR_INC = 36632\nVENDOR_ID_IVOCLAR_VIVADENT_CORPORATION = 36633\nVENDOR_ID_LINKORB = 36634\nVENDOR_ID_KIRCHLICHE_PAEDAGOGISCHE_HOCHSCHULE_WIEN_KREMS = 36635\nVENDOR_ID_AMS_LTD = 36636\nVENDOR_ID_DELAWARE_DEPARTMENT_OF_EDUCATION = 36637\nVENDOR_ID_PLANPHORIA_LLC = 36638\nVENDOR_ID_TIMEDOUT_SERVICES = 36639\nVENDOR_ID_BENJAMIN_TIETZ = 36640\nVENDOR_ID_FAMOS_LLC = 36641\nVENDOR_ID_FIREID = 36642\nVENDOR_ID_ANNAX_PASSENGER_ELECTRONICS_AG = 36643\nVENDOR_ID_WISEMO_A_S = 36644\nVENDOR_ID_CYBERTRONIXX_CONSULTING_SERVICES_GMBH = 36645\nVENDOR_ID_SAN_DIEGO_STATE_UNIVERSITY = 36646\nVENDOR_ID_STV_ELECTRONIC_GMBH = 36647\nVENDOR_ID_NETHERLANDS_INSTITUTE_FOR_NEUROSCIENCE = 36648\nVENDOR_ID_TRAFICON_INTERNATIONAL_NV = 36649\nVENDOR_ID_JOH_ENSCHED_IT_CONSULTANCY = 36650\nVENDOR_ID_SPORTVISION_INC = 36651\nVENDOR_ID_DENKAGENTEN_GBR = 36652\nVENDOR_ID_COPENHAGEN_BUSINESS_SCHOOL = 36653\nVENDOR_ID_CHU_DE_NANTES = 36654\nVENDOR_ID_INNOVATIVE_ENERGIES = 36655\nVENDOR_ID_UNGER_WELSOW_COMPANY_GMBH = 36656\nVENDOR_ID_AXEPT_AG = 36657\nVENDOR_ID_OMGPOP = 36658\nVENDOR_ID_ATRUST_COMPUTER_CORPORATION = 36659\nVENDOR_ID_PAUL_CONSULTANTS_EV = 36660\nVENDOR_ID_MAILCLEANER = 36661\nVENDOR_ID_TOGNUM_AG = 36662\nVENDOR_ID_AISH_TECHNOLOGIES_LIMITED = 36663\nVENDOR_ID_STADT_WARBURG = 36664\nVENDOR_ID_EGRESS_SOFTWARE_TECHNOLOGIES_LTD = 36665\nVENDOR_ID_GOLDEN_FROG_INC = 36666\nVENDOR_ID_ORANGE_COUNTY_CONTAINER_GROUP_LLC = 36667\nVENDOR_ID_CANADIAN_STANDARDS_ASSOCIATION = 36668\nVENDOR_ID_MEDICOM_HEALTH_INTERACTIVE = 36669\nVENDOR_ID_BUNDESMINISTERIUM_FR_INNERES_REPUBLIK_STERREICH = 36670\nVENDOR_ID_GUANGZHOU_CHANGYUE_ELECTRONIC_TECHNOLOGY_LTD = 36671\nVENDOR_ID_FIELDVIEW_SOLUTIONS = 36672\nVENDOR_ID_IP_INFUSION_INC = 36673\nVENDOR_ID_MOVING_IMPRESSIONS = 36674\nVENDOR_ID_COSSETTE = 36675\nVENDOR_ID_E_PRIME_CO_LTD = 36676\nVENDOR_ID_NEJLA = 36677\nVENDOR_ID_BARMHERZIGE_BRDER_STERREICH = 36678\nVENDOR_ID_EO_NETWORKS_SA = 36679\nVENDOR_ID_BW_SOFTWARE_GMBH = 36680\nVENDOR_ID_ISOBEEF_GBR = 36681\nVENDOR_ID_REAONIX_LLC = 36682\nVENDOR_ID_APEXIDENTITY_INC = 36683\nVENDOR_ID_NETCOM_CONSULTING_GMBH = 36684\nVENDOR_ID_MOZDELL_INC = 36685\nVENDOR_ID_ISENCIA_AB = 36686\nVENDOR_ID_JAXMP_LLC = 36687\nVENDOR_ID_DOORSOLUTIONS = 36688\nVENDOR_ID_JT_SYSTEMS = 36689\nVENDOR_ID_HCS_HES_CABLING_SYSTEMS = 36690\nVENDOR_ID_DOLPHIN_SPEED_NETWORKS_LTD = 36691\nVENDOR_ID_OPEN_CERTIFICATION_CENTRE = 36692\nVENDOR_ID_SGI_JAPAN_LTD = 36693\nVENDOR_ID_THE_REVENUE_DEPARTMENT = 36694\nVENDOR_ID_COGNITIVE_SECURITY_LTD = 36695\nVENDOR_ID_NATURAL_HISTORY_MUSEUM = 36696\nVENDOR_ID_NEO_TELECOMS = 36697\nVENDOR_ID_TOYON = 36698\nVENDOR_ID_THE_ENGLE_GROUP = 36699\nVENDOR_ID_DEFFERRARI_SISTEMAS_DE_INFORMTICA_LTDA = 36700\nVENDOR_ID_COGECO_CABLE = 36701\nVENDOR_ID_CERBINI = 36702\nVENDOR_ID_ABR_INNOVATIONS_LLC = 36703\nVENDOR_ID_MY_WAYS_ORG = 36704\nVENDOR_ID_NATIONAL_TIME_SERVICE_CENTERCHINESE_ACADEMY_OF_SCIENCES = 36705\nVENDOR_ID_FUNDACIN_CENTRO_ONCOLGICO_DE_GALICIA_JOS_ANTONIO_QUIROGA_Y_PIEYRO = 36706\nVENDOR_ID_SPIDERCLOUD_WIRELESS_INC = 36707\nVENDOR_ID_SENSUS_INFORMATIKA_KFT = 36708\nVENDOR_ID_MEZEO_SOFTWARE_CORPORATION = 36709\nVENDOR_ID_ANOIGO_SERVICES_LTD = 36710\nVENDOR_ID_MICROMODJE_INDUSTRIES = 36711\nVENDOR_ID_THE_CELL = 36712\nVENDOR_ID_ALEPO_USA = 36713\nVENDOR_ID_JACKL0PHTY_LLC = 36714\nVENDOR_ID_SEAS_NVE = 36715\nVENDOR_ID_JIU_INFO_TECH = 36716\nVENDOR_ID_STUDENTENWERK_MNCHEN = 36717\nVENDOR_ID_FUTURICE_LTD = 36718\nVENDOR_ID_ONEDROUSCOM = 36719\nVENDOR_ID_EVAX_SARL = 36720\nVENDOR_ID_CUKER_INTERACTIVE = 36721\nVENDOR_ID_TSC_TECHNOLOGIES = 36722\nVENDOR_ID_ILT_INNOVATIONS_AB = 36723\nVENDOR_ID_KAPLAN_RESEARCH_AND_APPLICATION_PROTOTYPING = 36724\nVENDOR_ID_ARTISAN_COMPUTER_SERVICES_LLC = 36725\nVENDOR_ID_CENTERED_LOGIC_LLC = 36726\nVENDOR_ID_BENCHMARK_SYSTEMS_LLC = 36727\nVENDOR_ID_ELLERINES = 36728\nVENDOR_ID_EAS_SCHALTANLAGEN_GMBH = 36729\nVENDOR_ID_TAGSYS_RFID = 36730\nVENDOR_ID_AGORABOX = 36731\nVENDOR_ID_PDR_NETWORK = 36732\nVENDOR_ID_FORGEROCK = 36733\nVENDOR_ID_LEIBNIZ_CENTER_FOR_MARINE_TROPICAL_ECOLOGY_ZMT = 36734\nVENDOR_ID_REGIONE_EMILIA_ROMAGNA = 36735\nVENDOR_ID_BALANCE_OF_NATURE = 36736\nVENDOR_ID_POTA_CRNE_GORE = 36737\nVENDOR_ID_BLINQ_NETWORKS_INC = 36738\nVENDOR_ID_CHRISTOPHE_GARAULT = 36739\nVENDOR_ID_SINICNET_TECHNOLOGY_CO_LTD = 36740\nVENDOR_ID_CV_REKATAMA_ELEKTRONIKA_PERSADA = 36741\nVENDOR_ID_PROVINCIAL_GOVERNMENT_OF_THE_WESTERN_CAPE = 36742\nVENDOR_ID_GESTICUMPRE = 36743\nVENDOR_ID_MCCLISHINGRAMCATERING_SERVICE = 36744\nVENDOR_ID_NINJO_WORKSTATION_EUMETSYS_C_O_ERNST_BASLER_PARTNER_GMBH = 36745\nVENDOR_ID_PAPENDORF_SOFTWARE_ENGINEERING_GMBH = 36746\nVENDOR_ID_VERTICA_A_S = 36747\nVENDOR_ID_LEINE_LINDE_AB = 36748\nVENDOR_ID_EUROPEAN_MEDIA_LABORATORY_GMBH = 36749\nVENDOR_ID_JACOTEC = 36750\nVENDOR_ID_RPC_SCANDINAVIA = 36751\nVENDOR_ID_DATASINC = 36752\nVENDOR_ID_ENGINEERING_WITH_IT = 36753\nVENDOR_ID_BZK_GROUP_SP_Z_OO = 36754\nVENDOR_ID_STOCKER_SCHMIDCH = 36755\nVENDOR_ID_FOSSMART_PVT_LIMITED = 36756\nVENDOR_ID_GUANFANG_TECHNOLOGIES_CO_LTD = 36757\nVENDOR_ID_FORTRUST_LLC = 36758\nVENDOR_ID_EKS_ENGEL_GMBH_CO_KG = 36759\nVENDOR_ID_ANCITEL_SPA = 36760\nVENDOR_ID_DATERA_SA = 36761\nVENDOR_ID_ACTISIS_GMBH = 36762\nVENDOR_ID_RIVERSIDE_HEALTH_SYSTEM = 36763\nVENDOR_ID_LINUXSTAR_DE = 36764\nVENDOR_ID_HERFF_JONES_INC = 36765\nVENDOR_ID_IXOLIT_GMBH = 36766\nVENDOR_ID_ROCKYOU = 36767\nVENDOR_ID_IT_PROF_SERVICE_LTD = 36768\nVENDOR_ID_ORIGINITY = 36769\nVENDOR_ID_REDMARK = 36770\nVENDOR_ID_LEARNING_UNLIMITED_INC = 36771\nVENDOR_ID_FUNK_ELECTRONIC_PICIORGROS_GMBH = 36772\nVENDOR_ID_SECURACTIVE = 36773\nVENDOR_ID_OP5_AB = 36774\nVENDOR_ID_AKERA_SRL = 36775\nVENDOR_ID_WASHINGTON_STATE_UNIVERSITY_EXTENSION_ENERGY_PROGRAM = 36776\nVENDOR_ID_SEDOSS_AB = 36777\nVENDOR_ID_LEAP_POWER = 36778\nVENDOR_ID_UNIVERSITY_CORPORATION_FOR_ATMOSPHERIC_RESEARCH = 36779\nVENDOR_ID_FORMAT_COMPUTING = 36780\nVENDOR_ID_MONUMENT_SYSTEMS_LLC = 36781\nVENDOR_ID_PREMIER_WIRELESS_INC = 36782\nVENDOR_ID_TASCO_SALES_AUST_PTY_LTD = 36783\nVENDOR_ID_FMS_SOFTWARE_LTD = 36784\nVENDOR_ID_DIINO_AB = 36785\nVENDOR_ID_TECHMA_SRL = 36786\nVENDOR_ID_FUTUREX_LLC = 36787\nVENDOR_ID_AUTORIDADE_NACIONAL_DE_SEGURANA_RODOVIRIA = 36788\nVENDOR_ID_BONET_GROUP = 36789\nVENDOR_ID_POWERVAR_INC = 36790\nVENDOR_ID_EAC_EASY_AUTOMATION_COMPONENTS_GMBH = 36791\nVENDOR_ID_ZYTRUST_SA = 36792\nVENDOR_ID_KIWIBANK = 36793\nVENDOR_ID_WEB4U_SRO = 36794\nVENDOR_ID_ALLGEMEINE_BAUGESELLSCHAFT_A_PORR_AKTIENGESELLSCHAFT = 36795\nVENDOR_ID_NORBIT = 36796\nVENDOR_ID_NO_LIMITS_SOFTWARE = 36797\nVENDOR_ID_TEAMUP_TECHNOLOGY_LIMITED = 36798\nVENDOR_ID_CODEWORX3_PTY_LTD = 36799\nVENDOR_ID_DONGGUANG_APTECH_ELECTRONICS_CO_LTD = 36800\nVENDOR_ID_KOKII = 36801\nVENDOR_ID_CAZOODLE_INC = 36802\nVENDOR_ID_FLUGHAFEN_STUTTGART_GMBH = 36803\nVENDOR_ID_UCN_GMBH = 36804\nVENDOR_ID_RIDECHARGE_INC = 36805\nVENDOR_ID_GREAT_RIVER_ENERGY = 36806\nVENDOR_ID_NETWITNESS = 36807\nVENDOR_ID_THE_SHERWIN_WILLIAMS_COMPANY = 36808\nVENDOR_ID_ITERANET_LTD = 36809\nVENDOR_ID_237_SOLUTIONS_PTY_LTD = 36810\nVENDOR_ID_CONSENDO_SYSTEMS_A_S = 36811\nVENDOR_ID_CSP_INC = 36812\nVENDOR_ID_SAFETEK_USA_LLC = 36813\nVENDOR_ID_DEFFAYET = 36814\nVENDOR_ID_SAVINGS_SOCIETY_INC = 36815\nVENDOR_ID_BEIJING_ABLOOMY_TECHNOLOGIES_CO_LTD_FORMERLY_BEIJING_YUNSHENGFA_TECHNOLOGIES_CO_LTD = 36816\nVENDOR_ID_BOHEMIA_INTERACTIVE_SIMULATIONS = 36817\nVENDOR_ID_ACCELYA_FRANCE_SAS = 36818\nVENDOR_ID_YARE_OBJECTS_AB = 36819\nVENDOR_ID_UPDATA_INFRASTRUCTURE_UK_LIMITED = 36820\nVENDOR_ID_LOCAL_MATTERS_INC = 36821\nVENDOR_ID_ADAFFIX_GMBH = 36822\nVENDOR_ID_CONFERENCE_PLUS_INC = 36823\nVENDOR_ID_UFPS_TATARSTAN_POCHTASY_FILIAL_FGUP_POCHTA_ROSSII = 36824\nVENDOR_ID_GRENADA_LAKE_MEDICAL_CENTER = 36825\nVENDOR_ID_CONTROL_ZERO = 36826\nVENDOR_ID_MESSAGE_SOLUTION = 36827\nVENDOR_ID_CEZ_A_S = 36828\nVENDOR_ID_LAGARDERE_ACTIVE = 36829\nVENDOR_ID_WHATEVER_MOBILE_GMBH = 36830\nVENDOR_ID_RATIO_CONSULTA = 36831\nVENDOR_ID_POCKET_KINGS_LTD = 36832\nVENDOR_ID_AUTHENWARE_CORPORATION = 36833\nVENDOR_ID_OMNIS_CLOUD = 36834\nVENDOR_ID_SOLIMAR_SYSTEMS_INC = 36835\nVENDOR_ID_BRIAN_CARLSON = 36836\nVENDOR_ID_HANGZHOU_FUTURE_TECHNOLOGY_COLTD = 36837\nVENDOR_ID_GK_SOFTWARE_AG = 36838\nVENDOR_ID_CONNECT_INFORMATICA_SRL = 36839\nVENDOR_ID_PETER_KUTTING_IT_SERVICES = 36840\nVENDOR_ID_THOR_DMS = 36841\nVENDOR_ID_CSR_LTD = 36842\nVENDOR_ID_VALLEY_TELEGENCE_PRIVATE_LTD = 36843\nVENDOR_ID_SOZIALHILFEVERBAND_KIRCHDORF_AN_DER_KREMS = 36844\nVENDOR_ID_ABACOM_INGENIEURGESLLSCHAFT = 36845\nVENDOR_ID_OOO_SMU_OFISSTROY = 36846\nVENDOR_ID_INTERNATIONAL_GAME_TECHNOLOGY_INC = 36847\nVENDOR_ID_CRE_DO_GMBH = 36848\nVENDOR_ID_SAMSUNG_TECHWIN_CO_LTD = 36849\nVENDOR_ID_DHARMA_DRUM_BUDDHIST_COLLEGE_DDBC = 36850\nVENDOR_ID_OUTPUTLINKS_INC = 36851\nVENDOR_ID_BNEI_BARUCH = 36852\nVENDOR_ID_AXILARIS_GMBH = 36853\nVENDOR_ID_BURGO_GROUP_SPA = 36854\nVENDOR_ID_GESIASS_SCRL = 36855\nVENDOR_ID_GEDIA_GEBRDER_DINGERKUS_GMBH = 36856\nVENDOR_ID_HOLZTECHNIKUM_KUCHL = 36857\nVENDOR_ID_THQ_INC = 36858\nVENDOR_ID_IXIA_FORMERLY_BREAKINGPOINT_SYSTEMS = 36859\nVENDOR_ID_TRUE_VALUE_COMPANY = 36860\nVENDOR_ID_PACMED_INTERNATIONAL_INC = 36861\nVENDOR_ID_MITROL_SRL = 36862\nVENDOR_ID_SANKAI = 36863\nVENDOR_ID_SOUTH_STREAM = 36864\nVENDOR_ID_DELIGHT_SOFTWARE_GMBH = 36865\nVENDOR_ID_ZOTT_GMBH_CO_KG = 36866\nVENDOR_ID_ZAMSTNANCICOM_SRO = 36867\nVENDOR_ID_SIGNGUARD_EUROPE_AB = 36868\nVENDOR_ID_SOFIUM = 36869\nVENDOR_ID_WALTER_PARR = 36870\nVENDOR_ID_DAYLIFE_INC = 36871\nVENDOR_ID_TEKNO_TELECOM_LLC = 36872\nVENDOR_ID_WIDEPORTAL_IT_SOLUTIONS_UG_HAFTUNGSBESCHRNKT = 36873\nVENDOR_ID_ANERMA_ELECTRONICS_BVBA = 36874\nVENDOR_ID_TOYO_CORPORATION = 36875\nVENDOR_ID_CHONGQING_RURAL_COMMERCIAL_BANK = 36876\nVENDOR_ID_SUNDALE_GARDEN_VILLAGE = 36877\nVENDOR_ID_INSTA_GROUP_LTD = 36878\nVENDOR_ID_NEW_MEXICO_CONSORTIUM = 36879\nVENDOR_ID_TOLJORG_SYSTEM_ARCHITECTURE = 36880\nVENDOR_ID_SIMON_JOSEFSSON_DATAKONSULT_AB = 36881\nVENDOR_ID_TEXAS_DEPARTMENT_OF_TRANSPORTATION = 36882\nVENDOR_ID_MODERNIZING_MEDICINE_INC = 36883\nVENDOR_ID_ESE_MOD_ELECTRONICS_INC = 36884\nVENDOR_ID_CIMBAL_INC = 36885\nVENDOR_ID_OLIVER_WYMAN_GROUP = 36886\nVENDOR_ID_ARTPLANT = 36887\nVENDOR_ID_E_FORMATION_GMBH = 36888\nVENDOR_ID_CHINA_BLUEDON_INFORMATION_SECURITY_TECHNOLOGY_CO_LTD = 36889\nVENDOR_ID_FUTURE_TRAINING_CONSULTING_GMBH = 36890\nVENDOR_ID_NOMADIC_TECHNOLOGIES_INC = 36891\nVENDOR_ID_AXEL_SPRINGER_SE = 36892\nVENDOR_ID_TAKACOM_CORPORATION = 36893\nVENDOR_ID_COMPAGNIE_EUROPENNE_DES_EMBALLAGES_ROBERT_SCHISLER = 36894\nVENDOR_ID_GUANGDONG_NEWSTART_TECHNOLOGY_SERVICE_COLTD = 36895\nVENDOR_ID_QUALITY_MANAGER_PLUS_AS = 36896\nVENDOR_ID_OECONNECTION_LLC = 36897\nVENDOR_ID_FINNING_CANADA = 36898\nVENDOR_ID_CEVA_SANTE_ANIMALE = 36899\nVENDOR_ID_ATRICORE_INC = 36900\nVENDOR_ID_ART_IS_REBELLION = 36901\nVENDOR_ID_ONEWAIHEKE = 36902\nVENDOR_ID_OSYRIS = 36903\nVENDOR_ID_LEGION_TELEKOMMUNIKATION_GMBH = 36904\nVENDOR_ID_MEDCENTRAL_HEALTH_SYSTEM = 36905\nVENDOR_ID_INSTITUTE_FOR_INTERNET_TECHNOLOGIES_AND_APPLICATIONS = 36906\nVENDOR_ID_LUGGAGE_PROS = 36907\nVENDOR_ID_RESEARCH_INDUSTRIAL_SYSTEMS_ENGINEERING_RISE_FORSCHUNGS_ENTWICKLUNGS_UND_GROPROJEKTBERATUNG_GMBH = 36908\nVENDOR_ID_BISON_IT_SERVICES_AG = 36909\nVENDOR_ID_PACIFIC_COMMUNICATIONS = 36910\nVENDOR_ID_EETRUST = 36911\nVENDOR_ID_LENGLET_IMPRIMEURS = 36912\nVENDOR_ID_ASOCIACIN_COOPERATIVA_SUTRONIX_RL = 36913\nVENDOR_ID_SQUARE_INC = 36914\nVENDOR_ID_ALFATRUST_CERTIFICATION_SA = 36915\nVENDOR_ID_GEMEENTE_GRONINGEN = 36916\nVENDOR_ID_TUNZCOM = 36917\nVENDOR_ID_ALTRAN = 36918\nVENDOR_ID_MENTANA_CLAIMSOFT_GMBH = 36919\nVENDOR_ID_YEARSUN_INDUSTRIAL_CO_LTD = 36920\nVENDOR_ID_LLC_SIBUR = 36921\nVENDOR_ID_EUROHUECO_SA = 36922\nVENDOR_ID_SCHLOTT_GRUPPE_AKTIENGESELLSCHAFT = 36923\nVENDOR_ID_DOOSAN_POWER_SYSTEMS_LIMITED = 36924\nVENDOR_ID_HEINRICH_SCHMID_SYSTEMHAUS_GMBH_CO_KG = 36925\nVENDOR_ID_PRIME_THERAPEUTICS = 36926\nVENDOR_ID_INNOVASIC_SEMICONDUCTOR_INC = 36927\nVENDOR_ID_TECHNICAL_UNIVERSITY_OF_LODZ_COMPUTER_CENTER = 36928\nVENDOR_ID_VITRI_SOLUTIONS_PRIVATE_LIMITED = 36929\nVENDOR_ID_ZOE_EVANGELISTISCHE_VEREINIGUNG = 36930\nVENDOR_ID_ABOAGYE_OKYERE_EMMANUEL = 36931\nVENDOR_ID_ZETETIC_LLC = 36932\nVENDOR_ID_PXL_SC_ARL = 36933\nVENDOR_ID_LEMCO_ELECTRONICS = 36934\nVENDOR_ID_KENTUCKIANA_PRIDE_FOUNDATION = 36935\nVENDOR_ID_CLINICAL_SOFTWARE_SOLUTIONS = 36936\nVENDOR_ID_ALPHASOFT_NEDERLAND = 36937\nVENDOR_ID_PROFWEB = 36938\nVENDOR_ID_SENTINELA_SECURITY_LTDA = 36939\nVENDOR_ID_TLO = 36940\nVENDOR_ID_SOLEKAI_SYSTEMS_CORPORATION = 36941\nVENDOR_ID_KAVECO_WORKFLOW = 36942\nVENDOR_ID_VENICE_INTERNATIONAL_UNIVERSITY = 36943\nVENDOR_ID_ANO_TV_NOVOSTI = 36944\nVENDOR_ID_ADVANCE_MILLES_SYSTEM_COLTD = 36945\nVENDOR_ID_WEB_TECHNOLOGY_PROJECTS_LTD = 36946\nVENDOR_ID_MULTILAB_AS = 36947\nVENDOR_ID_OPENIT_GMBH = 36948\nVENDOR_ID_GFI = 36949\nVENDOR_ID_DDALO_HELICOLOR_SA = 36950\nVENDOR_ID_SOUTHERN_ILLINOIS_UNIVERISTY = 36951\nVENDOR_ID_KUNMING_RAILWAY_SIGNALLING_AND_TELECOMMUNICATIONS_DEPARTMENT = 36952\nVENDOR_ID_VOX_NORWEGIAN_AGENCY_FOR_LIFELONG_LEARNING = 36953\nVENDOR_ID_42_UNITS_IT_LTD = 36954\nVENDOR_ID_ELSIST_SRL = 36955\nVENDOR_ID_SEMATECH = 36956\nVENDOR_ID_LIBVIRT = 36957\nVENDOR_ID_RECEPTIVE_IT = 36958\nVENDOR_ID_THE_CELLARS_GROUP_LLC = 36959\nVENDOR_ID_TPH_ACQUISITIONS_LLLP = 36960\nVENDOR_ID_BOC_GMBH = 36961\nVENDOR_ID_ADVERTISER_TECHNOLOGIES = 36962\nVENDOR_ID_COMMUNICATIONS_SUPPLY_SUPPORT_LIMITED = 36963\nVENDOR_ID_ARKODIA_TECHNOLOGIES_LLC = 36964\nVENDOR_ID_CRIPTOTEC = 36965\nVENDOR_ID_CCDMD = 36966\nVENDOR_ID_FNET = 36967\nVENDOR_ID_OCOM_COMMUNICATIONS_INC = 36968\nVENDOR_ID_NELLS_ELECTRONIC_SYSTEMS_INC = 36969\nVENDOR_ID_FINANCESCOUT24_GMBH = 36970\nVENDOR_ID_TRANSCEND_COMMUNICATION_BEIJING_COLTD = 36971\nVENDOR_ID_BANCO_CENTRAL_DE_HONDURAS = 36972\nVENDOR_ID_PHOENIX_CAPITAL = 36973\nVENDOR_ID_SIMULATION_SYSTEMS_LTD = 36974\nVENDOR_ID_URGENTCARE_WORKS_LLC = 36975\nVENDOR_ID_CRITTER_BVBA = 36976\nVENDOR_ID_ELOQUA_CORPORATION = 36977\nVENDOR_ID_PICO_DIGITAL_INC = 36978\nVENDOR_ID_ACCUMIO_GMBH = 36979\nVENDOR_ID_STEINLE_SOLUTION_FACTORY_GMBH = 36980\nVENDOR_ID_KINDERSPRACHSCREENING = 36981\nVENDOR_ID_UNESCO_IHE = 36982\nVENDOR_ID_KIWILIGHTCOM_LIMITED = 36983\nVENDOR_ID_TAO_BERATUNGS_UND_MANAGEMENT_GMBH = 36984\nVENDOR_ID_SEWAR_TECHNOLOGIES = 36985\nVENDOR_ID_PIRATENPARTEI_OESTERREICHS = 36986\nVENDOR_ID_ONVPS = 36987\nVENDOR_ID_HOST4UAT = 36988\nVENDOR_ID_BEIJING_XINGHUA_BRAINRUST_TECHNOLOGY_COLTD = 36989\nVENDOR_ID_PRINOVIS_NUERNBERG_GMBH = 36990\nVENDOR_ID_CASTEL = 36991\nVENDOR_ID_SYSTEMGROUP = 36992\nVENDOR_ID_LUCID_DESIGN_GROUP = 36993\nVENDOR_ID_FASTNET = 36994\nVENDOR_ID_AKRIDONET = 36995\nVENDOR_ID_FORDINGBRIDGE_COMPUTER_SERVICES = 36996\nVENDOR_ID_XUZHOU_MEDICAL_COLLEGE = 36997\nVENDOR_ID_MTEK_ENTERPRISES_LLC = 36998\nVENDOR_ID_INSTITUTO_DE_TECNOLOGIA_QUMICA_E_BIOLGICA = 36999\nVENDOR_ID_JOEL_HATCHER = 37000\nVENDOR_ID_MINDSHIFT_CORP = 37001\nVENDOR_ID_DIVERSIFIED_CONTROL_INC = 37002\nVENDOR_ID_VERTU = 37003\nVENDOR_ID_VMTURBO = 37004\nVENDOR_ID_MEDIZINISCHE_EINRICHTUNGEN_DES_BEZIRKS_OBERPFALZ_GMBH = 37005\nVENDOR_ID_KOGER_INC = 37006\nVENDOR_ID_LOGIWAYS = 37007\nVENDOR_ID_CLEOPATRA = 37008\nVENDOR_ID_CHIP_N_LLC = 37009\nVENDOR_ID_SAGUNA_NETWORKS_LTD = 37010\nVENDOR_ID_KFSOFTWARE = 37011\nVENDOR_ID_BESTGOPL_SP_Z_OO = 37012\nVENDOR_ID_EOSWAN = 37013\nVENDOR_ID_HANMING_TECHNOLOGY_CO_LTD = 37014\nVENDOR_ID_HARMS_CONSULTING_PTY_LTD = 37015\nVENDOR_ID_UNICREDIT_SPA = 37016\nVENDOR_ID_NATION_TECHNOLOGIES_GROUP_INC = 37017\nVENDOR_ID_PHABRIX = 37018\nVENDOR_ID_LANOS_COMPUTER_GMBH_CIE_KG = 37019\nVENDOR_ID_DICHOTOMIA = 37020\nVENDOR_ID_SCANDFIBRE_LOGISTICS_AB = 37021\nVENDOR_ID_SCIENTIFIC_AND_PRODUCTION_COMPANY_GRANCH_LTD = 37022\nVENDOR_ID_KAZTRANSCOM_JSC = 37023\nVENDOR_ID_EDV_NEUBRAND = 37024\nVENDOR_ID_MAVERICK_WIRELESS_SOLUTIONS_PRIVATE_LIMITED = 37025\nVENDOR_ID_MYLAB_OY = 37026\nVENDOR_ID_RC_TEC_GMBH = 37027\nVENDOR_ID_FERNWAERME_ULM_GMBH = 37028\nVENDOR_ID_TECHNOLOGY_ON_DEMAND_INC = 37029\nVENDOR_ID_G4S_TECHNOLOGY_LIMITED = 37030\nVENDOR_ID_STUDIO_MEKTEK_INC = 37031\nVENDOR_ID_RR_DONNELLEY_EUROPE_SP_Z_OO = 37032\nVENDOR_ID_EDEN_ROCK_COMMUNICATIONS = 37033\nVENDOR_ID_GOATRACE_LTD = 37034\nVENDOR_ID_KITAMI_INSTITUTE_OF_TECHNOLOGY = 37035\nVENDOR_ID_GEEKERATI = 37036\nVENDOR_ID_AMERICA_FIRST_FEDERAL_CREDIT_UNION = 37037\nVENDOR_ID_COMPLEXNET_LTD = 37038\nVENDOR_ID_ETHERWORKS_PTY_LTD = 37039\nVENDOR_ID_GOLDCARD_SPOL_S_R_O = 37040\nVENDOR_ID_THALES_ALENIA_SPACE_ESPAA = 37041\nVENDOR_ID_BEE_SOFTWARE_INC = 37042\nVENDOR_ID_IRKUTSK_REGIONAL_CLINICAL_HOSPITAL = 37043\nVENDOR_ID_DINEC_INTERNATIONAL = 37044\nVENDOR_ID_LEXISNEXIS_UNIVENTIO_BV = 37045\nVENDOR_ID_FJORD_TECHNOLOGY_UG_HAFTUNGSBESCHRNKT = 37046\nVENDOR_ID_INTERCARD_KARTENSYTEME_GMBH = 37047\nVENDOR_ID_TETRA_TECH_INC = 37048\nVENDOR_ID_UFCSPA = 37049\nVENDOR_ID_TECHYOND_INC = 37050\nVENDOR_ID_OLIVER_ROLL = 37051\nVENDOR_ID_AND_ONE_INC = 37052\nVENDOR_ID_MMR_NETWORK_MANAGEMENT_SCIENCE_TECHNOLOGY_CO_LTD = 37053\nVENDOR_ID_AIRP_SYSTEMS_LLC = 37054\nVENDOR_ID_JM_PROPERTIES = 37055\nVENDOR_ID_ATM_JAPAN_LTD = 37056\nVENDOR_ID_QUICKPAY_LTD_FORMERLY_MPS_QUICKPAY = 37057\nVENDOR_ID_THOCKAR_IT_CONSULTING = 37058\nVENDOR_ID_COMMAND_AND_CONTROL_SYSTEMS = 37059\nVENDOR_ID_SILICON_SOFTWARE_SYSTEMS_LTD = 37060\nVENDOR_ID_SARGENTO_FOODS_INC = 37061\nVENDOR_ID_RIGNET_INC = 37062\nVENDOR_ID_SARL_AEGLE_INFORMATIQUE_MEDICALE = 37063\nVENDOR_ID_THE_UNIVERSITY_OF_KITAKYUSHU = 37064\nVENDOR_ID_COTEK_ELECTRONIC_INDCOLTD = 37065\nVENDOR_ID_OE_INVESTMENTS_LIMITED = 37066\nVENDOR_ID_CENTRUM_ROZWOJU_SZK_WYSZYCH_TEB_AKADEMIA_SP_Z_OO = 37067\nVENDOR_ID_ARIZONA_COPPERSOFT = 37068\nVENDOR_ID_BROADBAND_ANTENNA_TRACKING_SYSTEMS = 37069\nVENDOR_ID_RADIOOPT_GMBH = 37070\nVENDOR_ID_SOFISTONE_OY = 37071\nVENDOR_ID_LANTECH_COMMUNICATIONS_GLOBAL_INC = 37072\nVENDOR_ID_BEIJING_JETSEN_TECHNOLOGY_COLTD = 37073\nVENDOR_ID_ASSAM_ELECTRONICS_DEVELOPMENT_CORPORATION_LIMITED_AMTRON = 37074\nVENDOR_ID_ROOTSYS = 37075\nVENDOR_ID_IPETRIK = 37076\nVENDOR_ID_ALBUQUERQUE_PUBLIC_SCHOOLS = 37077\nVENDOR_ID_NOR1_INC = 37078\nVENDOR_ID_WOFFORD_COLLEGE = 37079\nVENDOR_ID_3VR_SECURITY_INC = 37080\nVENDOR_ID_WICKED_TRICKSTER_LLC = 37081\nVENDOR_ID_MINISTRY_OF_FINANCE = 37082\nVENDOR_ID_BLOK_SOFTWARE_DEVELOPMENT_BLOKSOFT = 37083\nVENDOR_ID_9H37 = 37084\nVENDOR_ID_KDS = 37085\nVENDOR_ID_ELEMENTAL_TECHNOLOGIES_INC = 37086\nVENDOR_ID_HOLY_CROSS_ENERGY = 37087\nVENDOR_ID_TEAMSOURCING_CIA_LTDA = 37088\nVENDOR_ID_MEDIENGRUPPE_PRESSEDRUCK_DIENSTLEISTUNGS_GMBH_CO_OHG = 37089\nVENDOR_ID_OUVREZLABOITE = 37090\nVENDOR_ID_ORION_VIRTUALISATION_SOLUTIONS_PTY_LIMITED = 37091\nVENDOR_ID_CJ_COMPUTERS = 37092\nVENDOR_ID_CONSOLIDATED_EDISON_COMPANY_OF_NEW_YORK_INC = 37093\nVENDOR_ID_MADPILOT_PRODUCTIONS = 37094\nVENDOR_ID_GH_INFORMATIK_GMBH = 37095\nVENDOR_ID_DONGNIAN_NETWORKS_INC = 37096\nVENDOR_ID_UKSATSE = 37097\nVENDOR_ID_INGENIEURSBUREAU_EBATECH_BV = 37098\nVENDOR_ID_ITAUTEC_SA = 37099\nVENDOR_ID_ENDAI_WORLDWIDE = 37100\nVENDOR_ID_QUELLTEXT_AG = 37101\nVENDOR_ID_WIND_MOBILE = 37102\nVENDOR_ID_INFINETIX_CORP = 37103\nVENDOR_ID_PEBBLE_BEACH_SYSTEM_LTD = 37104\nVENDOR_ID_SECURE_SYSTEMS_AND_TECHNOLOGIES_LTD = 37105\nVENDOR_ID_RAZORTHREAT_INC = 37106\nVENDOR_ID_MANITOBA_TELECOM_SERVICES = 37107\nVENDOR_ID_DONBASSINFORMCOMMUNICATIONSERVICE = 37108\nVENDOR_ID_SMS_DATA_PRODUCTS_GROUP_INC = 37109\nVENDOR_ID_ALTERA_CORPORATION = 37110\nVENDOR_ID_INSTITUTE_FOR_CLINICAL_AND_EXPERIMENTAL_MEDICINE = 37111\nVENDOR_ID_INFOSOL_DOO = 37112\nVENDOR_ID_CHITA_STATE_UNIVERSITY = 37113\nVENDOR_ID_CHRISTIAN_AID = 37114\nVENDOR_ID_VIVA_SOFT_LTD = 37115\nVENDOR_ID_INSTITUTO_NACIONAL_DE_SEGUROS = 37116\nVENDOR_ID_INDUSTRIAL_THINKING_LTD = 37117\nVENDOR_ID_PANORAMIC_DATA = 37118\nVENDOR_ID_OBJECT_ECM_AG = 37119\nVENDOR_ID_VELOCENT_SYSTEMS_INC = 37120\nVENDOR_ID_EIRITU_EQUIPMENT_TECHNOLOGY_COLTD = 37121\nVENDOR_ID_EVOTRIX_SYSTEMS = 37122\nVENDOR_ID_BYTIS_LTD = 37123\nVENDOR_ID_BEATANDMUSIC_MEDIA_GMBH = 37124\nVENDOR_ID_OMEGA_CUBE = 37125\nVENDOR_ID_SYN2CAT_ASBL = 37126\nVENDOR_ID_SUPERLUMIN_NETWORKS = 37127\nVENDOR_ID_BOLT = 37128\nVENDOR_ID_PROJECT_76 = 37129\nVENDOR_ID_MIROSLAV_MRAKOTA = 37130\nVENDOR_ID_UNIONCAST_NETWORK_TECHNOLOGY_COLTDBEIJING = 37131\nVENDOR_ID_FRIEDRICH_KUHNT_GMBH = 37132\nVENDOR_ID_REVERSE_LOGIC_LTD = 37133\nVENDOR_ID_MACKTECH_GMBH = 37134\nVENDOR_ID_OSCARDIJKHOFFNL = 37135\nVENDOR_ID_CRAWFORD_AND_COMPANY = 37136\nVENDOR_ID_REILLY_TELECOM_INC = 37137\nVENDOR_ID_TIBRA = 37138\nVENDOR_ID_DEEP_SECURE_LTD = 37139\nVENDOR_ID_GUAVUS_INC = 37140\nVENDOR_ID_MUWA_SPELLE = 37141\nVENDOR_ID_ACTUA = 37142\nVENDOR_ID_IN_PUT_GBR_DAS_LINUX_SYSTEMHAUS = 37143\nVENDOR_ID_VIKTOR_GRUBER = 37144\nVENDOR_ID_MEDICVISION = 37145\nVENDOR_ID_UNITRIN_SERVICES_GROUP = 37146\nVENDOR_ID_ALVEOLE_STUDIO = 37147\nVENDOR_ID_BURAK_ZEN = 37148\nVENDOR_ID_ONLINEDB_LTD = 37149\nVENDOR_ID_SURTRONIC_INTERNATIONAL_BV = 37150\nVENDOR_ID_CROSS_DOMAIN_TECHNICAL_FORUM = 37151\nVENDOR_ID_FRANCE_NET_COM = 37152\nVENDOR_ID_SRNJAKCOM = 37153\nVENDOR_ID_JUNCTION_SOFTWARE_LTD = 37154\nVENDOR_ID_BYTEACTIVE_AB = 37155\nVENDOR_ID_HANGZHOU_LANCABLE_TECHNOLOGY_COLTD = 37156\nVENDOR_ID_NETENTSEC_INC = 37157\nVENDOR_ID_CYNIXORG = 37158\nVENDOR_ID_SCK_CEN = 37159\nVENDOR_ID_CONTINIUM_LTD = 37160\nVENDOR_ID_MOBIS_LTD = 37161\nVENDOR_ID_SOFTPERIENCE = 37162\nVENDOR_ID_IPS_INTERNATIONAL_POWER_SUPPLY = 37163\nVENDOR_ID_IMAGE_INTELLIGENCE_IMINT = 37164\nVENDOR_ID_KIVANC_OSKAY = 37165\nVENDOR_ID_SEILLAC_CO_LTD = 37166\nVENDOR_ID_INFRAFUTURE_INC = 37167\nVENDOR_ID_CORPGENIE = 37168\nVENDOR_ID_XEIRIUS_SOLUTIONS = 37169\nVENDOR_ID_SOFTWAREMIND = 37170\nVENDOR_ID_DIPL_ING_BA_THOMAS_KNOBLAUCH = 37171\nVENDOR_ID_WIRED_INFORMTICA_E_SISTEMAS_LDA = 37172\nVENDOR_ID_KLUWER = 37173\nVENDOR_ID_STEP_NETWORKS_INC = 37174\nVENDOR_ID_NOVOLINK_COMMUNICATIONS = 37175\nVENDOR_ID_INTEGRATED_PRODUCTS_INC = 37176\nVENDOR_ID_SOUTHERN_OREGON_UNIVERSITY = 37177\nVENDOR_ID_ALQUIST_CONSULTING_LTD = 37178\nVENDOR_ID_AB_OVO_NEDERLAND_BV = 37179\nVENDOR_ID_CENTRIC_CORPORATION = 37180\nVENDOR_ID_IP_TECHNOLOGY_LABS = 37181\nVENDOR_ID_VIEWTEQ_CORP = 37182\nVENDOR_ID_CIPHERDYNE = 37183\nVENDOR_ID_APTUS_INTERACTIVE_LTD = 37184\nVENDOR_ID_AMERSPORTS = 37185\nVENDOR_ID_PERFECTO_MOBILE = 37186\nVENDOR_ID_PREMIER_MANUFACTURING_SUPPORT_SERVICES_POLAND_SP_Z_OO = 37187\nVENDOR_ID_ETELLICOM_PTY_LTD = 37188\nVENDOR_ID_AUDIT_GRUP_LTD = 37189\nVENDOR_ID_TECISA74_SL = 37190\nVENDOR_ID_ANDROSCOGGIN_VALLEY_HOSPITAL = 37191\nVENDOR_ID_INSTITUTO_FEDERAL_DO_PAR_IFPA = 37192\nVENDOR_ID_REACH_GLOBAL_SERVICES = 37193\nVENDOR_ID_GABA_CORPORATION = 37194\nVENDOR_ID_CONNECT_COLTD = 37195\nVENDOR_ID_TIELINE_TECHNOLOGY = 37196\nVENDOR_ID_OBERFINANZDIREKTION_NIEDERSACHSEN = 37197\nVENDOR_ID_SOFTAGENCY_CO_LTD = 37198\nVENDOR_ID_ZENTRUM_FUER_INFORMATIONSTECHNOLOGIE_KREUZNACHER_DIAKONIE = 37199\nVENDOR_ID_SL_ITCOMPLIANCE_GMBH = 37200\nVENDOR_ID_SL_NETZWERKTECHNIK_GMBH = 37201\nVENDOR_ID_UNITED_NETWORK_FOR_ORGAN_SHARING = 37202\nVENDOR_ID_GLOBAL_TELECOM_TOOLS_LLC = 37203\nVENDOR_ID_MAXXESS_SYSTEMS_INC = 37204\nVENDOR_ID_SAMPENSION_KP_LIVSFORSIKRING_A_S = 37205\nVENDOR_ID_FEMSWISS_AG = 37206\nVENDOR_ID_ASTRIUM_SERVICES_GEO_INFORMATION_DIVISION = 37207\nVENDOR_ID_EMBEDDED_PLANET = 37208\nVENDOR_ID_SAN_FRANCISCO_DEPARTMENT_OF_PUBLIC_HEALTH = 37209\nVENDOR_ID_THE_MONKEYSPHERE_PROJECT = 37210\nVENDOR_ID_FONTANA_UNIFIED_SCHOOL_DISTRICT = 37211\nVENDOR_ID_YAMAHA_MOTOR_SOLUTIONS_XIAMEN = 37212\nVENDOR_ID_RS_AUTOMATION_COLTD = 37213\nVENDOR_ID_AEROMARITIME_SYSTEMBAU_GMBH = 37214\nVENDOR_ID_MICROWORLD_TECHNOLOGIES_INC = 37215\nVENDOR_ID_CLICKSTREAM_TECHNOLOGIES_PLC = 37216\nVENDOR_ID_ENTANET_INTERNATIONAL_LTD = 37217\nVENDOR_ID_SZMCOM_SRO = 37218\nVENDOR_ID_WANDERTEC = 37219\nVENDOR_ID_CPACKET_NETWORKS_INC = 37220\nVENDOR_ID_TERRAVISION_PTY_LTD = 37221\nVENDOR_ID_ALLCLEAR = 37222\nVENDOR_ID_INTEGRA_S = 37223\nVENDOR_ID_INTERNATIONAL_WEST_TRADING_LTD = 37224\nVENDOR_ID_EPARADEIGMA_LLC = 37225\nVENDOR_ID_POLIZEI_SAARLAND = 37226\nVENDOR_ID_INC_TECHNOLOGIES = 37227\nVENDOR_ID_HANDCRAFTIT = 37228\nVENDOR_ID_APPLIED_INTELLIGENCE_GMBH = 37229\nVENDOR_ID_MODULO_CONSULTING = 37230\nVENDOR_ID_UNIVERSITY_OF_PLOVDIV = 37231\nVENDOR_ID_GTS_THAUMAT_XXI_SA = 37232\nVENDOR_ID_VOID_SISTEMAS_SL = 37233\nVENDOR_ID_XUZHOU_NORMAL_UNIVERSITY = 37234\nVENDOR_ID_GEN_ENERGIJA_DOO = 37235\nVENDOR_ID_STANTECH_COMMUNICATIONS_SOLUTIONS_INC = 37236\nVENDOR_ID_METABOLON = 37237\nVENDOR_ID_BATEAU_LIMITED = 37238\nVENDOR_ID_MKM_BILGISAYAR_DANISMANLIK_VE_EGITIM_HIZMETLERI_SAN_VE_TIC_LTD_STI = 37239\nVENDOR_ID_JOERG_RIESMEIER = 37240\nVENDOR_ID_GRUPO_SOARES_DA_COSTA_SA = 37241\nVENDOR_ID_ZEROLAG_COMMUNICATIONS = 37242\nVENDOR_ID_EVERYONE_COUNTS_INC = 37243\nVENDOR_ID_ZIGBEE_ALLIANCE_INC = 37244\nVENDOR_ID_FUSION_CRYPTO = 37245\nVENDOR_ID_ZERFOWSKI = 37246\nVENDOR_ID_THALES_SOLUTIONS_ASIA = 37247\nVENDOR_ID_JOONGBOTECH_CO_LTD = 37248\nVENDOR_ID_AMICON_LTD = 37249\nVENDOR_ID_GRID2HOME = 37250\nVENDOR_ID_EVENT_MEDICAL_INC = 37251\nVENDOR_ID_IMAGE_VIDEO = 37252\nVENDOR_ID_ENERGY_AWARE_TECHNOLOGY_INC = 37253\nVENDOR_ID_INTRONIS_INC = 37254\nVENDOR_ID_MIRADA = 37255\nVENDOR_ID_MENDELEY_LTD = 37256\nVENDOR_ID_DIE_BRUECKENSCHLAEGER = 37257\nVENDOR_ID_TELEKOMUNIKACIJE_RS_AD_BANJA_LUKA = 37258\nVENDOR_ID_NETIC_A_S = 37259\nVENDOR_ID_XIAN_ZIKING_NETWORK_COMMUNICATIONS_COLTD = 37260\nVENDOR_ID_UNIVERSITY_OF_SHKODRA = 37261\nVENDOR_ID_SABREFIN_LIMITED = 37262\nVENDOR_ID_CATHOLIC_EDUCATION_OFFICE_LISMORE = 37263\nVENDOR_ID_TULAROSA_COMMUNICATIONS = 37264\nVENDOR_ID_DELOVOY_PARTNER_LTD = 37265\nVENDOR_ID_SCHINDLER_ELEVATOR_LTD = 37266\nVENDOR_ID_TECNOBIT = 37267\nVENDOR_ID_GIRA_GIERSIEPEN_GMBH_CO_KG = 37268\nVENDOR_ID_ROSA_LUXEMBURG_STIFTUNG_GESELLSCHAFTSANALYSE_UND_POLITISCHE_BILDUNG_E_V = 37269\nVENDOR_ID_FARELL_INSTRUMENTS_SL = 37270\nVENDOR_ID_COESYS_SRL = 37271\nVENDOR_ID_WESTVIK = 37272\nVENDOR_ID_ACISION_LTD = 37273\nVENDOR_ID_INFRATEL_INC = 37274\nVENDOR_ID_SKYFIRE_LABS_INC = 37275\nVENDOR_ID_SYSTEM_OF_MODULAR_TECHNOLOGIES_ICC = 37276\nVENDOR_ID_UNIVERSIDAD_TECMILENIO = 37277\nVENDOR_ID_HANSELMANN_CONSULTING_GMBH = 37278\nVENDOR_ID_ECO_GED = 37279\nVENDOR_ID_JTENDO_SP_Z_OO = 37280\nVENDOR_ID_SIGNATEC_LTD = 37281\nVENDOR_ID_BARLOWORLD_POWER = 37282\nVENDOR_ID_SPF_FINANCES = 37283\nVENDOR_ID_ENERGY_SECTOR_SECURITY_CONSORTIUM_INC = 37284\nVENDOR_ID_NATIONALFIELD = 37285\nVENDOR_ID_CONGRESSIONAL_BUDGET_OFFICE = 37286\nVENDOR_ID_CHRISTOPHER_D_DEL_RIESGO = 37287\nVENDOR_ID_AXGATE_CO_LTD_FORMERLY_AXAN_NETWORKS_COLTD = 37288\nVENDOR_ID_INCO_SERVICE_LTD = 37289\nVENDOR_ID_GRIDMERGE_LIMITED = 37290\nVENDOR_ID_BRITZE_ELEKTRONIK_UND_GERAETEBAU_GMBH = 37291\nVENDOR_ID_ARCANUM_COMMUNICATIONS_LTD = 37292\nVENDOR_ID_RUSTELETECH_LTD = 37293\nVENDOR_ID_NETZQUADRAT_GMBH = 37294\nVENDOR_ID_STADT_MUENSTER_CITEQ = 37295\nVENDOR_ID_NANOLOGIKA_GMBH = 37296\nVENDOR_ID_LITECORE_NETWORKS_INDIA_PVT_LTD = 37297\nVENDOR_ID_PAGANI_INFORMATIQUE_SARL = 37298\nVENDOR_ID_QUANXI_TECHNOLOGIES_LLC = 37299\nVENDOR_ID_NEOWARE_SRO = 37300\nVENDOR_ID_METAVENTIS_GMBH = 37301\nVENDOR_ID_DANIEL_ADAM = 37302\nVENDOR_ID_IGNESCO_SOFTWARE = 37303\nVENDOR_ID_STONEGATE_INSTRUMENTS_LTD = 37304\nVENDOR_ID_BEIJING_UTILITY_SOFTWARE_CORE_TECHNOLOGY_CO_LTD = 37305\nVENDOR_ID_HINTZ = 37306\nVENDOR_ID_VODA = 37307\nVENDOR_ID_GSMK_MBH = 37308\nVENDOR_ID_PTV_PCSI_TVFT_KFT = 37309\nVENDOR_ID_NETACADEMIA_KFT = 37310\nVENDOR_ID_NTEAM_LEIBNIZ_GYMNASIUM_REMSCHEID = 37311\nVENDOR_ID_ULC_SYSTEMS_INC = 37312\nVENDOR_ID_PEERSPLAY = 37313\nVENDOR_ID_40_NORTH_LLC = 37314\nVENDOR_ID_GREENSHIFT = 37315\nVENDOR_ID_YUVAD_TECHNOLOGIES = 37316\nVENDOR_ID_RUBY_ROCKET_CHENGDU_CONSULTING_CO_LTD = 37317\nVENDOR_ID_DATACENTER_SERVICES_INC = 37318\nVENDOR_ID_GERNY = 37319\nVENDOR_ID_INNEASOFT = 37320\nVENDOR_ID_REALLY_HELSINKI_OY = 37321\nVENDOR_ID_ERNW_GMBH = 37322\nVENDOR_ID_YASASHI_MATSUO = 37323\nVENDOR_ID_ALBANY_MEDICAL_CENTER = 37324\nVENDOR_ID_YORK_COLLEGE_OF_PENNSYLVANIA = 37325\nVENDOR_ID_DATASAT_DIGITAL_ENTERTAINMENT = 37326\nVENDOR_ID_STUDENT_SATELLITE_INITIATIVE_MUNICH_SSIMUC_EV = 37327\nVENDOR_ID_PENINSULA_REGIONAL_MEDICAL_CENTER = 37328\nVENDOR_ID_COMMUNITY_CARE_PHYSICIANS_PC = 37329\nVENDOR_ID_OPENMARKET = 37330\nVENDOR_ID_FREY_TEXTILREINIGUNG_GMBH = 37331\nVENDOR_ID_CPS_POWER_SYSTEMS_GMBH = 37332\nVENDOR_ID_CADENAS_GMBH = 37333\nVENDOR_ID_NORSK_HYDRO_ASA = 37334\nVENDOR_ID_DIMPLEDOUGH = 37335\nVENDOR_ID_IDENTITY_SOLUTIONS_PTY_LTD = 37336\nVENDOR_ID_RANDOMSTORM_LTD = 37337\nVENDOR_ID_C3 = 37338\nVENDOR_ID_OPEN_IPTV_FORUM_EV = 37339\nVENDOR_ID_TECLO_NETWORKS = 37340\nVENDOR_ID_PLEXXI_INC = 37341\nVENDOR_ID_UCIRRUS_CORP = 37342\nVENDOR_ID_INTERSCOT_NETWORK = 37343\nVENDOR_ID_EXPRESS_TELECOM_JSC = 37344\nVENDOR_ID_IT_SUITS_IT = 37345\nVENDOR_ID_MEDICITY = 37346\nVENDOR_ID_IT_SERVICES_DER_OESTERREICHISCHEN_SOZIALVERSICHERUNGS_GMBH = 37347\nVENDOR_ID_COMPACT_SOFTWARE_INTERNATIONAL_SA = 37348\nVENDOR_ID_FAMILY_TRACH = 37349\nVENDOR_ID_SKYONLINE_ARGENTINA = 37350\nVENDOR_ID_AGILE_EUROPE_S_R_O = 37351\nVENDOR_ID_MINISTERIO_DE_RELACIONES_EXTERIORES_COMERCIO_INTERNACIONAL_Y_CULTO = 37352\nVENDOR_ID_EUROPORTS = 37353\nVENDOR_ID_ARAWAT_INC = 37354\nVENDOR_ID_NORRIS_COMMUNICATIONS = 37355\nVENDOR_ID_DEUTSCHMANN_AUTOMATION_GMBH_CO_KG = 37356\nVENDOR_ID_AUDERIS = 37357\nVENDOR_ID_REGIONALMEDIEN_AUSTRIA_AG = 37358\nVENDOR_ID_PAPERLINX_EUROPE = 37359\nVENDOR_ID_HYPACE_TECHNOLOGY_COLTD = 37360\nVENDOR_ID_EQUIVOX_INC = 37361\nVENDOR_ID_CENTER_INFORMATION_TECHNOLOGIES_OF_AMUR_REGION = 37362\nVENDOR_ID_VIISHANKE_OY = 37363\nVENDOR_ID_LIKEWISE_SOFTWARE = 37364\nVENDOR_ID_AECS_AEROCLUB_SAAR_EV = 37365\nVENDOR_ID_NETWORK_APPLICATION_ENGINEERING_LABORATORIES_LTD = 37366\nVENDOR_ID_UNIVISION_SRL = 37367\nVENDOR_ID_AND_TECHNOLOGY_RESEARCH_LTD = 37368\nVENDOR_ID_CYBERCIT = 37369\nVENDOR_ID_MARK_WHITE = 37370\nVENDOR_ID_IDIBRI = 37371\nVENDOR_ID_UNIVERSITY_OF_SAN_DIEGO = 37372\nVENDOR_ID_MITRASTAR_TECHNOLOGY_CORPORATION = 37373\nVENDOR_ID_BRAINSTORM_MOBILE_SOLUTIONS_LTD = 37374\nVENDOR_ID_DATA_5_INGENIEURBUERO_FUER_DATENTECHNIK_GMBH = 37375\nVENDOR_ID_GERHARD_MESSER = 37376\nVENDOR_ID_CHAOS_CREATIONS = 37377\nVENDOR_ID_DANSK_KABEL_TV = 37378\nVENDOR_ID_CHARLES_SCHWAB_CO_INC = 37379\nVENDOR_ID_COMPUTER_OUTPUT_PRINT_INTERNET_COPI = 37380\nVENDOR_ID_BALIDEVCOM = 37381\nVENDOR_ID_DANATEQ_PTE_LTD = 37382\nVENDOR_ID_INFOCOM_NETWORK_LIMITED = 37383\nVENDOR_ID_ONZE_LIEVE_VROUW_ZIEKENHUIS_AALST = 37384\nVENDOR_ID_CENTRUM_INFORMATYKI_ZETO_SA_W_BIAYMSTOKU = 37385\nVENDOR_ID_CEGES_SOMA = 37386\nVENDOR_ID_NAVUM_GMBH = 37387\nVENDOR_ID_LIETUVOS_RESPUBLIKOS_SEIMO_KANCELIARIJA = 37388\nVENDOR_ID_BYO_NETWORKS = 37389\nVENDOR_ID_ADYTON_SYSTEMS_AG = 37390\nVENDOR_ID_MINISTRY_OF_HEALTH_REPUBLIC_OF_MACEDONIA = 37391\nVENDOR_ID_PROBE_INC = 37392\nVENDOR_ID_TAZARV_AFZAR_CO = 37393\nVENDOR_ID_FARSINET = 37394\nVENDOR_ID_KASPIAN_SANAT_CO = 37395\nVENDOR_ID_USUGI_INFORMATYCZNE_ITS_MARIUSZ_KRYSKI = 37396\nVENDOR_ID_MMB_RESEARCH_INC = 37397\nVENDOR_ID_THREATMETRIX = 37398\nVENDOR_ID_OCEANS_EDGE_INC = 37399\nVENDOR_ID_TOPSOFT_ZRT = 37400\nVENDOR_ID_FANCYFON_SOFTWARE = 37401\nVENDOR_ID_NEVERPANICDE = 37402\nVENDOR_ID_MARMIKO_IT_SOLUTIONS_GMBH = 37403\nVENDOR_ID_RISCHIOTO_CORP = 37404\nVENDOR_ID_HEBEI_FAREAST_HARRIES_COMUNICATION_COMPANY = 37405\nVENDOR_ID_AHASWARE_SRO = 37406\nVENDOR_ID_COMCRAFT = 37407\nVENDOR_ID_CALLIS_TECHNOLOGIES = 37408\nVENDOR_ID_HOME_CREDIT_INTERNATIONAL_A_S = 37409\nVENDOR_ID_OPUS_VFX = 37410\nVENDOR_ID_L_S_B_BROADCAST_TECHNOLOGIES_GMBH = 37411\nVENDOR_ID_CABLE_MANUFACTURING_BUSINESS_INC = 37412\nVENDOR_ID_SMILE_SA = 37413\nVENDOR_ID_TIPJAR_LLC = 37414\nVENDOR_ID_INTERNATIONAL_RADIO_AND_ELECTRONICS_CORP = 37415\nVENDOR_ID_RIVET_SOFTWARE = 37416\nVENDOR_ID_EFM_SRL = 37417\nVENDOR_ID_MOBILE_PEOPLE = 37418\nVENDOR_ID_BONPRIX_SP_ZOO = 37419\nVENDOR_ID_VIRTUAL_BIT_DI_LUCIO_CRUSCA = 37420\nVENDOR_ID_FACTUM_IT_BV = 37421\nVENDOR_ID_START_NORGE = 37422\nVENDOR_ID_DYNAMITE_SERVICES = 37423\nVENDOR_ID_MDL29 = 37424\nVENDOR_ID_ERICSSON_LG_ENTERPRISE_CO_LTD_FORMERLY_LG_ERICSSON_CO_LTD = 37425\nVENDOR_ID_TRAVELZEN_GROUP_LTD = 37426\nVENDOR_ID_ENTE = 37427\nVENDOR_ID_BRKERT_WERKE_GMBH = 37428\nVENDOR_ID_GRAND_CANYON_UNIVERSITY = 37429\nVENDOR_ID_ELECTRONIC_POWER_AND_MARKET_SP_Z_OO = 37430\nVENDOR_ID_MONTALBANO_TECHNOLOGY_SPA = 37431\nVENDOR_ID_CARBON_MOUNTAIN_LLC = 37432\nVENDOR_ID_CUSTOM_RADIO_NETWORK_INC = 37433\nVENDOR_ID_ZENROBOTICS_LTD = 37434\nVENDOR_ID_GENSLER_IT_SUPPORT = 37435\nVENDOR_ID_MARITIME_BROADBAND_INC = 37436\nVENDOR_ID_SOFTEC_INTEGRATIONS_AG = 37437\nVENDOR_ID_NETWORKS_DIREKT_GESELLSCHAFT_FR_INFORMATIONSTECHNOLOGIE_MBH = 37438\nVENDOR_ID_COMPUTER_NETWORK_LIMITED = 37439\nVENDOR_ID_DIGITALWATT_SRL = 37440\nVENDOR_ID_OCI_NITROGEN = 37441\nVENDOR_ID_ANF_AUTHORITY_OF_CERTIFICATION_ECUADOR_SA = 37442\nVENDOR_ID_CENTINA_SYSTEMS = 37443\nVENDOR_ID_DIGITAL_PRODUCTS_LIMITED = 37444\nVENDOR_ID_ATLANTIC_INTERTRADE_LTD = 37445\nVENDOR_ID_ANDREY_KLYACHKIN = 37446\nVENDOR_ID_NIMBLE_STORAGE = 37447\nVENDOR_ID_ENBLINK = 37448\nVENDOR_ID_OPZOON_TECHNOLOGY_CO_LTD = 37449\nVENDOR_ID_SODRUGESTVO_GROUP_OF_COMPANIES = 37450\nVENDOR_ID_EFFDON_NETWORKS_LTD = 37451\nVENDOR_ID_DELTA_SISTEMI_SRL = 37452\nVENDOR_ID_B_OBVIOUS = 37453\nVENDOR_ID_NEWSWEB = 37454\nVENDOR_ID_ABERTIS_AUTOPISTAS_ESPAA = 37455\nVENDOR_ID_THE_NEW_SCHOOL = 37456\nVENDOR_ID_MEDAS_SRL = 37457\nVENDOR_ID_QUALCARE_INC = 37458\nVENDOR_ID_YEALINK = 37459\nVENDOR_ID_NOVA_BANKA_AD = 37460\nVENDOR_ID_PEAKWORK_GMBH = 37461\nVENDOR_ID_COGISTICS_INC = 37462\nVENDOR_ID_LEITWELT_GMBH = 37463\nVENDOR_ID_INTELLIGRATED_INC = 37464\nVENDOR_ID_DATADESIGN = 37465\nVENDOR_ID_DIGITACTICS_INC = 37466\nVENDOR_ID_ARPEGGIO_SOFTWARE_INC = 37467\nVENDOR_ID_EDUCATIONAL_SERVICE_UNIT_COORDINATING_COUNSEL = 37468\nVENDOR_ID_SHENZHEN_COMMUNICATION_TECHNOLOGY_COLTD = 37469\nVENDOR_ID_POWER_INTERNET_LTD = 37470\nVENDOR_ID_QEES_APS = 37471\nVENDOR_ID_CUCULUS_GMBH = 37472\nVENDOR_ID_USED_CAR_DEALERS_ASSOCIATION_OF_ONTARIO = 37473\nVENDOR_ID_SEDKOL = 37474\nVENDOR_ID_OT_SYSTEMS_LIMITED = 37475\nVENDOR_ID_VIATHINKSOFT = 37476\nVENDOR_ID_SIGNALIS = 37477\nVENDOR_ID_THE_KARTHIKEYANS = 37478\nVENDOR_ID_WARIMAX_LTD = 37479\nVENDOR_ID_SKYSQL_AB = 37480\nVENDOR_ID_CANYONS_SCHOOL_DISTRICT = 37481\nVENDOR_ID_STEWART_MCKELVEY = 37482\nVENDOR_ID_A5_SECURITY_CONSULTING_GROUP_SL = 37483\nVENDOR_ID_PT_TEKNOLOGI_MULTIMEDIA_INDONESIA = 37484\nVENDOR_ID_ALICO_GRAPHIC_WEB_DESIGNS = 37485\nVENDOR_ID_OOO_VERIFIED_SOLUTIONS = 37486\nVENDOR_ID_NICOLAS_LEDEZ = 37487\nVENDOR_ID_RIDGETOP_GROUP_INC = 37488\nVENDOR_ID_SCALITY = 37489\nVENDOR_ID_ENCO_SYSTEMS_INC = 37490\nVENDOR_ID_FTM_SYSTEMS_KFT = 37491\nVENDOR_ID_MINDSTORM_NETWORKS = 37492\nVENDOR_ID_CYBERLINK_AG = 37493\nVENDOR_ID_VINCENT_DE_LAU = 37494\nVENDOR_ID_MARS_ADVANCED_RESEARCH_SYSTEMS = 37495\nVENDOR_ID_ZHEJIANG_DAHUA_TECHNOLOGY_COLTD = 37496\nVENDOR_ID_DELPHI_INNOVATIONS = 37497\nVENDOR_ID_NASUTEK_ENTERPRISES = 37498\nVENDOR_ID_NETSOFT_DISTRIBUTED_SOLUTIONS_PTY_LTD = 37499\nVENDOR_ID_SCHMID_INDUSTRIEHOLDING = 37500\nVENDOR_ID_PROGETTO_ARCHIVIO_SRL = 37501\nVENDOR_ID_KYBERNA_AG = 37502\nVENDOR_ID_SERATEL_TECHNOLOGY_SAL = 37503\nVENDOR_ID_ONETASTIC_SRL = 37504\nVENDOR_ID_WSO2_INC = 37505\nVENDOR_ID_BIODEC_SRL = 37506\nVENDOR_ID_FREENET_LIBEREC_OS = 37507\nVENDOR_ID_AQUAPHOR = 37508\nVENDOR_ID_DIRECTORYSELFSERVICE = 37509\nVENDOR_ID_SILENTSYSTEM = 37510\nVENDOR_ID_FUTURE_DYNAMICS_INTERSTELLAR = 37511\nVENDOR_ID_SYSTEMS_CORPS = 37512\nVENDOR_ID_CITKOMM = 37513\nVENDOR_ID_RAPHAEL_FRASCH_GMBH = 37514\nVENDOR_ID_AVAJADI_SOLUTIONS = 37515\nVENDOR_ID_SOFTWARE_INTEGRATION_DEVELOPMENT = 37516\nVENDOR_ID_SVERIGES_RADIO_AB = 37517\nVENDOR_ID_FIREWALL_SERVICES = 37518\nVENDOR_ID_DRAEXLMAIER_GROUP = 37519\nVENDOR_ID_KASSENAERZTLICHE_VEREINIGUNG_BADEN_WUERTTEMBERG = 37520\nVENDOR_ID_NETWORK_PIPELINE_INC = 37521\nVENDOR_ID_KOUSEC_SOFTWARE_INC = 37522\nVENDOR_ID_ALYRICA_NETWORKS_INC = 37523\nVENDOR_ID_COM1_COMMUNICATION_SOLUTIONS_BV = 37524\nVENDOR_ID_INFOVIDE_MATRIX = 37525\nVENDOR_ID_WELLCENTIVE_LLC = 37526\nVENDOR_ID_SIGNALSKY_COMMUNICATION_CO_LTD = 37527\nVENDOR_ID_CROMPTON_GREAVES_LIMITED = 37528\nVENDOR_ID_A_AND_A_SYSTEM_CO_LTD = 37529\nVENDOR_ID_WEBRADAR = 37530\nVENDOR_ID_FRANK_MOELLER = 37531\nVENDOR_ID_BBT_TECHNOLOGY_CORP = 37532\nVENDOR_ID_DELTA_ELECTRONICS_THAILAND_PUBLIC_COLTD = 37533\nVENDOR_ID_UHERINFO = 37534\nVENDOR_ID_MICRODATA_GIS_INC = 37535\nVENDOR_ID_NRG2_BV = 37536\nVENDOR_ID_JADE = 37537\nVENDOR_ID_BIG_SWITCH_NETWORKS = 37538\nVENDOR_ID_CODE_ONE_GMBH = 37539\nVENDOR_ID_N3_LABS_SDN_BHD = 37540\nVENDOR_ID_COMPUTER_HI_TECH_INC = 37541\nVENDOR_ID_DEPELMAAN_LTD = 37542\nVENDOR_ID_CROWE_HORWATH_LLP = 37543\nVENDOR_ID_UM_LABS_LTD = 37544\nVENDOR_ID_GFI_SOLUTIONS_GROUP_INC = 37545\nVENDOR_ID_BNP_PARIBAS_FORTIS_GROUP = 37546\nVENDOR_ID_EUROPAPIER_INTERNATIONAL_GMBH = 37547\nVENDOR_ID_CENTURYLINK = 37548\nVENDOR_ID_CT_SAS = 37549\nVENDOR_ID_FLEXENCLOSURE_AB = 37550\nVENDOR_ID_IFM_INFOMASTER_SPA = 37551\nVENDOR_ID_RAYCORE_TAIWAN_CO_LTD = 37552\nVENDOR_ID_FRDLWEB = 37553\nVENDOR_ID_ARCHBOLD_MEDICAL_CENTER = 37554\nVENDOR_ID_ENABLING_TECHNOLOGIES_COMPANY_INC = 37555\nVENDOR_ID_BRANDWATCH = 37556\nVENDOR_ID_PATHOLOGY_ASSOCIATES_MEDICAL_LABORATORIES_LLC = 37557\nVENDOR_ID_VM_DG_HEMMERT_SCHUSTER_GBR = 37558\nVENDOR_ID_SOCIALCAST = 37559\nVENDOR_ID_NETSCOUT_SYSTEMS_INC_FORMERLY_SIMENA_LLC = 37560\nVENDOR_ID_BEIJING_KEMACOM_TECHNOLOGIES_CO_LTD = 37561\nVENDOR_ID_HANGZHOU_YUWAN_TECHNOLOGY_CO_LTD = 37562\nVENDOR_ID_NNS_NIGL_NETWORK_SOLUTIONS = 37563\nVENDOR_ID_EVEREST_DISPLAY_INC = 37564\nVENDOR_ID_STRUCK_INNOVATIVE_SYSTEME_GMBH = 37565\nVENDOR_ID_DISCOVERY_REPLY_SRL = 37566\nVENDOR_ID_ALLIANT_TECHSYSTEMS_INC = 37567\nVENDOR_ID_COMMEND_INTERNATIONAL_GMBH = 37568\nVENDOR_ID_VOCATIVE_LTD = 37569\nVENDOR_ID_ELFF_TECH = 37570\nVENDOR_ID_KVUC = 37571\nVENDOR_ID_PANINI_SPA = 37572\nVENDOR_ID_LIGHTSOFT_RESEARCH_LTD = 37573\nVENDOR_ID_ALBERTA_DISTANCE_LEARNING_CENTRE = 37574\nVENDOR_ID_INFOBIP_LTD = 37575\nVENDOR_ID_NOVELSAT = 37576\nVENDOR_ID_BRANCH_OF_LLC_TABAK_INVEST_TRADE_CENTER_KORONA = 37577\nVENDOR_ID_SAMWORTH_BROTHERS_LTD = 37578\nVENDOR_ID_SYNETRIX_HOLDINGS_LIMITED = 37579\nVENDOR_ID_CHAO_INN_ELEMENTARY_SCHOOL = 37580\nVENDOR_ID_MIKA_TIMING_GMBH = 37581\nVENDOR_ID_THEOBROMA_SYSTEMS_DESIGN_UND_CONSULTING_GMBH = 37582\nVENDOR_ID_SURESCRIPTS_LLC = 37583\nVENDOR_ID_GARY_HAWKINS = 37584\nVENDOR_ID_QDIAGNOSTICA = 37585\nVENDOR_ID_E_SEKTIONENS_TELETEKNISKA_AVDELNING = 37586\nVENDOR_ID_QUALVU_INC = 37587\nVENDOR_ID_QINGDAO_EASYTELECOM_CO_LTD = 37588\nVENDOR_ID_INSTITUT_DE_LEBRE = 37589\nVENDOR_ID_MEYER_BURGER_TECHNOLOGY_AG = 37590\nVENDOR_ID_REGGIANI = 37591\nVENDOR_ID_EV_LUTH_BRDERGEMEINDE_ENGER_EV = 37592\nVENDOR_ID_PLATFORM_A_ARASTIRMA_GELISTIRME_KOORDINASYON_HIZMETLERI_A_S = 37593\nVENDOR_ID_NETMINING_LLC = 37594\nVENDOR_ID_GEOMARINE_LTD = 37595\nVENDOR_ID_AGRI_HITECH_LLC = 37596\nVENDOR_ID_DECATUR_HOSPITAL_AUTHORITY_DBA_WISE_REGIONAL_HEALTH_SYSTEM = 37597\nVENDOR_ID_CIPHERCLOUD_INC = 37598\nVENDOR_ID_MEONTRUST_INC = 37599\nVENDOR_ID_LEDEUNSORG = 37600\nVENDOR_ID_XECH_SRL = 37601\nVENDOR_ID_SPIDER_SOFTWARE_GMBH = 37602\nVENDOR_ID_MEAMIORG = 37603\nVENDOR_ID_RMG_TECH_MALAYSIA_SDN_BHD = 37604\nVENDOR_ID_MCX_TELECOM_2_SP_Z_OO = 37605\nVENDOR_ID_SM_FINANCEJSC = 37606\nVENDOR_ID_CASCADA_SOFTWARE_CONSULTING = 37607\nVENDOR_ID_CAREEVOLUTION_INC = 37608\nVENDOR_ID_DANG_NETWORKS_INC = 37609\nVENDOR_ID_THE_TUXCLAN = 37610\nVENDOR_ID_CJSC_TSI_SERVICE = 37611\nVENDOR_ID_KASSENRZTLICHE_VEREINIGUNG_NIEDERSACHSEN = 37612\nVENDOR_ID_ENNOVATIS_GMBH = 37613\nVENDOR_ID_SIQURA = 37614\nVENDOR_ID_V_LABS_INFORMATICA_LTDA = 37615\nVENDOR_ID_SATS_HOLDING_AB = 37616\nVENDOR_ID_VENTEK_SISTEMAS_E_AUTOMAO = 37617\nVENDOR_ID_TUMBLR = 37618\nVENDOR_ID_SCHIEX = 37619\nVENDOR_ID_ALEGENT_HEALTH = 37620\nVENDOR_ID_ENAME_SA = 37621\nVENDOR_ID_CHRYSALIS_UTAH_INC = 37622\nVENDOR_ID_RED_HOUND_SOFTWARE_INC = 37623\nVENDOR_ID_M_PI_SOFTWARE_SRL = 37624\nVENDOR_ID_MIKE_JOHNSON = 37625\nVENDOR_ID_STC_AKTOR = 37626\nVENDOR_ID_ENSEMBLE = 37627\nVENDOR_ID_NETRATOR_ANDRZEJ_DOPIERALA = 37628\nVENDOR_ID_COMTEC_NET = 37629\nVENDOR_ID_IRON_TECHNOLOGY_SOLUTIONS_LTD = 37630\nVENDOR_ID_PLASMATRONICS_PTY_LTD = 37631\nVENDOR_ID_THE_FRONTIER_GROUP = 37632\nVENDOR_ID_BOLNISNICA_GOLNIK_KOPA = 37633\nVENDOR_ID_ACHIEVE3000_INC = 37634\nVENDOR_ID_AWAREPOINT = 37635\nVENDOR_ID_CATHOLIC_HEALTH = 37636\nVENDOR_ID_HENRY_COUNTY_HOSPITAL = 37637\nVENDOR_ID_INFINITRUM_CO_LTD = 37638\nVENDOR_ID_ECYS_SA = 37639\nVENDOR_ID_FEDERAL_CARDIOVASCULAR_SURGERY_CENTER = 37640\nVENDOR_ID_NEEBULA_SYSTEMS = 37641\nVENDOR_ID_GK_SOFTEXPERT = 37642\nVENDOR_ID_IBM_BTO_BUSINESS_CONSULTING_SERVICES_SP_Z_OO = 37643\nVENDOR_ID_FUZHOU_UCORE_INFORMATION_TECHNOLOGIES_COLTD = 37644\nVENDOR_ID_MEDICAL_DATA_EXPRESS = 37645\nVENDOR_ID_WYOMING_VALLEY_HEALTH_CARE_SYSTEM = 37646\nVENDOR_ID_MINISTRY_OF_INTERIOR_UAE_GOVERNMENTAL_ENTITY = 37647\nVENDOR_ID_KALMIA_TECHNOLOGY_CO_LLC = 37648\nVENDOR_ID_HELIUM_INC = 37649\nVENDOR_ID_SHARED_TECHNOLOGY_SERVICES_GROUP_INC = 37650\nVENDOR_ID_JOYSTEM_WEB_SERVICES_PRIVATE_LIMITED = 37651\nVENDOR_ID_I_TECH = 37652\nVENDOR_ID_LAMBY = 37653\nVENDOR_ID_MOCCU_GMBH = 37654\nVENDOR_ID_FAR_SOUTH_NETWORKS = 37655\nVENDOR_ID_BROXTOWE_BOROUGH_COUNCIL = 37656\nVENDOR_ID_ERSKINE_DESIGN = 37657\nVENDOR_ID_CZECH_NATIONAL_BANK = 37658\nVENDOR_ID_CONTROLCIRCLE_LTD = 37659\nVENDOR_ID_UNIT_OF_RESEARCH_OF_TECHNOLOGIES_OF_INFORMATION_AND_COMMUNICATION_UTIC = 37660\nVENDOR_ID_TRANSCON_ELECTRONIC_SYSTEMS_SPOL_S_R_O = 37661\nVENDOR_ID_ABLEREX_ELECTRONIC_CO_LTD = 37662\nVENDOR_ID_NGEN_NIAGARA_INTERACTIVE_MEDIA_GENERATOR = 37663\nVENDOR_ID_ZONE_DE_POLICE_MIDI = 37664\nVENDOR_ID_R_W_BECKETT_CORPORATION = 37665\nVENDOR_ID_AIREBULLAS_CB = 37666\nVENDOR_ID_OFFICE_OF_THE_AUDITOR_GENERAL_OF_NORWAY = 37667\nVENDOR_ID_BIT_GMBH = 37668\nVENDOR_ID_FONDEMI = 37669\nVENDOR_ID_BARLING_BAY_LLC = 37670\nVENDOR_ID_THE_BIOSTATISTICS_CENTER_GWU = 37671\nVENDOR_ID_VERSCOM_INTERNATIONAL_HOLDING_UK_LLP = 37672\nVENDOR_ID_ESTECH_SYSTEMS_INC = 37673\nVENDOR_ID_HEINEKEN_INTERNATIONAL = 37674\nVENDOR_ID_LOVEBEE = 37675\nVENDOR_ID_SUTUNAM_CO_LTD = 37676\nVENDOR_ID_LINUXSOFT_SRO = 37677\nVENDOR_ID_HALL_RESEARCH = 37678\nVENDOR_ID_AGILICOM = 37679\nVENDOR_ID_SCOTT_ELLIS = 37680\nVENDOR_ID_SINEFA_PTY_LTD = 37681\nVENDOR_ID_ALEXXHOST = 37682\nVENDOR_ID_TIMOCOM_SOFT_UND_HARDWARE_GMBH = 37683\nVENDOR_ID_GRUPO_ALSA = 37684\nVENDOR_ID_ONLINE_MARKETING_SOLUTIONS_AG = 37685\nVENDOR_ID_LOOKOUT_MOBILE_SECURITY_INC = 37686\nVENDOR_ID_BETHESDA_MEMORIAL_HOSPITAL = 37687\nVENDOR_ID_ACE_COMPUTER_BV = 37688\nVENDOR_ID_UNIXTASTIC = 37689\nVENDOR_ID_JOTATEC = 37690\nVENDOR_ID_BROADCAST_DEVICES_INC = 37691\nVENDOR_ID_STRINGIT = 37692\nVENDOR_ID_BRATTLEBORO_MEMORIAL_HOSPITAL = 37693\nVENDOR_ID_TSUBAKIMOTO_CHAIN_CO = 37694\nVENDOR_ID_QUANTUM_DATA_SYSTEMS_HK_LTD = 37695\nVENDOR_ID_WIKA_POLSKA_SA = 37696\nVENDOR_ID_HIGHER_ONE = 37697\nVENDOR_ID_CUSTOMS_AND_BORDER_PROTECTION = 37698\nVENDOR_ID_BOLZWACHTEL_DENTAL_CLINIC = 37699\nVENDOR_ID_AXED_SPA = 37700\nVENDOR_ID_ENERGIE_MDE = 37701\nVENDOR_ID_NARODOWY_FUNDUSZ_ZDROWIA_CENTRALA = 37702\nVENDOR_ID_MYWINDOWSLABCOM = 37703\nVENDOR_ID_INTERCONCEPT_GMBH = 37704\nVENDOR_ID_COMMSOFT_RMS_LLC = 37705\nVENDOR_ID_NETMEDIA_SYSTEMS_E_K = 37706\nVENDOR_ID_ROCRAIL = 37707\nVENDOR_ID_SYSTOLA_FORWARDING_GMBH = 37708\nVENDOR_ID_S3_SATCOM_LTD = 37709\nVENDOR_ID_DANE_E_JONES = 37710\nVENDOR_ID_FILEMAKER_INC = 37711\nVENDOR_ID_EUROSISTEMI = 37712\nVENDOR_ID_WINEXTREMEORG = 37713\nVENDOR_ID_APPFOLIO_INC = 37714\nVENDOR_ID_FTN = 37715\nVENDOR_ID_VILLE_DE_LAUSANNE = 37716\nVENDOR_ID_HERBERT_SMITH_LLP = 37717\nVENDOR_ID_FRESENIUS_VIAL = 37718\nVENDOR_ID_PT_MULTI_STRUCTURE = 37719\nVENDOR_ID_CSR_ZHUZHOU_INSTITUTE_CO_LTD = 37720\nVENDOR_ID_OPENSYS_M_BERHAD = 37721\nVENDOR_ID_TRUSTED_INFORMATION_CONSULTING_SP_Z_OO = 37722\nVENDOR_ID_ODIN_TECHNOLOGIES = 37723\nVENDOR_ID_CHALET_TECHNOLOGIES_INC = 37724\nVENDOR_ID_YUPIQ_CORP = 37725\nVENDOR_ID_BERTOL_ALEXANDER = 37726\nVENDOR_ID_GENERAL_DIGITAL_CORPORATION = 37727\nVENDOR_ID_ADV_CONSULTING = 37728\nVENDOR_ID_ATS_GROUP_GMBH = 37729\nVENDOR_ID_P_RIMESNET = 37730\nVENDOR_ID_MB_SPA = 37731\nVENDOR_ID_YMIF_ENGINEERING_BV = 37732\nVENDOR_ID_CIVIL_REGISTRY_AGENCY_OF_MINISTRY_OF_JUSTICE_OF_GEORGIA = 37733\nVENDOR_ID_ASSA_ABLOY_AB = 37734\nVENDOR_ID_ST_MARYS_MEDICAL_CENTER = 37735\nVENDOR_ID_PINNACLEHEALTH_SYSTEM = 37736\nVENDOR_ID_GUANGDONG_DONYAN_NETWORK_TECHNOLOGIES_COLTD = 37737\nVENDOR_ID_APADMI_LTD = 37738\nVENDOR_ID_BRAINTREE_PAYMENT_SOLUTIONS_LLC = 37739\nVENDOR_ID_JOHANNES_ROITH = 37740\nVENDOR_ID_FIRST_STEP_INTERNET_LLC = 37741\nVENDOR_ID_IPRIO_CORPORATION = 37742\nVENDOR_ID_ROBERT_FRANK = 37743\nVENDOR_ID_CENTRIFY_CORPORATION = 37744\nVENDOR_ID_SPAMPIGORGUK = 37745\nVENDOR_ID_SECURITY_DATA_SA = 37746\nVENDOR_ID_MERCY_HEALTH_PARTNERS = 37747\nVENDOR_ID_GIAVANEERS = 37748\nVENDOR_ID_WIRE_E_WIRELESS_WORLD_SA = 37749\nVENDOR_ID_QUESTER_TANGENT = 37750\nVENDOR_ID_EI_DU_PONT_DE_NEMOURS_AND_COMPANY = 37751\nVENDOR_ID_NETS_DENMARK_A_S = 37752\nVENDOR_ID_ROBIN_PARTINGTON_ARCHITECTS = 37753\nVENDOR_ID_NEXTRAGEN_GMBH = 37754\nVENDOR_ID_RADIO_ACTIVITY_SRL = 37755\nVENDOR_ID_THE_MINISTRY_OF_INTERIOR_OF_THE_REPUBLIC_OF_CROATIA = 37756\nVENDOR_ID_NEWTON_GRAPHICS_INC = 37757\nVENDOR_ID_ACTIDATA_COMPANY = 37758\nVENDOR_ID_WXXR_NETWORK_TECHNOLOGY_LTD_BEIJING = 37759\nVENDOR_ID_POWERTECH_AUTOMATION_SOLUTIONS_PVT_LTD = 37760\nVENDOR_ID_ALTITUDE_SOFTWARE = 37761\nVENDOR_ID_NEOTION_RD = 37762\nVENDOR_ID_BITXENIO_SL = 37763\nVENDOR_ID_PORTEL_SERVICIOS_TELEMTICOS = 37764\nVENDOR_ID_LHERITIER = 37765\nVENDOR_ID_BEIJING_BANGGOO_NETWORKS_COLTD = 37766\nVENDOR_ID_GARTNER_INC = 37767\nVENDOR_ID_BUNDESMINISTERIUM_FR_ARBEIT_UND_SOZIALES = 37768\nVENDOR_ID_KORAMIS_GMBH = 37769\nVENDOR_ID_IDMACHINES_LLC = 37770\nVENDOR_ID_LINKWISE_TECHNOLOGY_PRIVATE_LIMITED = 37771\nVENDOR_ID_AERODEV = 37772\nVENDOR_ID_OAO_NESK_NOVOROSSIYSKENERGOSBIT = 37773\nVENDOR_ID_516_NOORD_BV = 37774\nVENDOR_ID_BAOBROS_STUDIO = 37775\nVENDOR_ID_CO_LTD_RCS_LABS = 37776\nVENDOR_ID_CABINET_PIERRE_GUERIN = 37777\nVENDOR_ID_NORTHERN_DESIGN_ELECTRONICS_LTD = 37778\nVENDOR_ID_NUVOLAS = 37779\nVENDOR_ID_MICRORIGHT_CORPORATION = 37780\nVENDOR_ID_EZUCE_INC = 37781\nVENDOR_ID_KINDLEIT = 37782\nVENDOR_ID_WOLF_POND_CREATIVE_LLC = 37783\nVENDOR_ID_IDC_SOLUTIONS_PTY_LTD = 37784\nVENDOR_ID_INGENIEURBUERO_JAN_F_WESTERKAMP_IBW = 37785\nVENDOR_ID_GALTRONICS_TELEMETRY_INC = 37786\nVENDOR_ID_EMIRATES_IDENTITY_AUTHORITY = 37787\nVENDOR_ID_SYSLIFE = 37788\nVENDOR_ID_NOVAPOST_SAS = 37789\nVENDOR_ID_GOULD_INTERNATIONAL_UK_LTD = 37790\nVENDOR_ID_PORTAONE_INC = 37791\nVENDOR_ID_ENFUSE_INC = 37792\nVENDOR_ID_SQUIRREL_SOLUTIONS_LTD = 37793\nVENDOR_ID_DVR_SUPPORT_CENTER = 37794\nVENDOR_ID_CENTRE_HOSPITALIER_DU_NORD = 37795\nVENDOR_ID_PTS_GROUP_AG = 37796\nVENDOR_ID_GRAYLOG2 = 37797\nVENDOR_ID_PCMEDIC = 37798\nVENDOR_ID_COLORIURIS_AIE = 37799\nVENDOR_ID_ASTER_DATA_SYSTEMS_INC = 37800\nVENDOR_ID_INNOVACTIVE_ENGINEERING_SRL = 37801\nVENDOR_ID_SYPRIS_SOLUTIONS_INC = 37802\nVENDOR_ID_CALIFORNIA_STATE_UNIVERSITY_SAN_MARCOS = 37803\nVENDOR_ID_SPIRIT_SOFTWARE_SOLUTIONS = 37804\nVENDOR_ID_TEAM_SIMOCO_LTD = 37805\nVENDOR_ID_NORTH_POWER_COPORATION_EVN_NPC = 37806\nVENDOR_ID_INSTITUTO_TECNOLGICO_DE_CANARIAS = 37807\nVENDOR_ID_FIBCOM_INDIA_LIMITED = 37808\nVENDOR_ID_WNET_WISP_SRL = 37809\nVENDOR_ID_PCE_SYSTEMS = 37810\nVENDOR_ID_GLASS_ECHIDNA = 37811\nVENDOR_ID_KOTKAMILLS_OY = 37812\nVENDOR_ID_DSM_COMPUTER_GMBH = 37813\nVENDOR_ID_INFINIDAT_LTD = 37814\nVENDOR_ID_FRIENDLY_RUNET_FOUNDATION = 37815\nVENDOR_ID_SKWEEZNET = 37816\nVENDOR_ID_GMG_TECHNOLOGIES = 37817\nVENDOR_ID_LEGALBOX = 37818\nVENDOR_ID_TECHNICAL_DABBLINGS = 37819\nVENDOR_ID_TELECORE_LTD = 37820\nVENDOR_ID_UNTERMSTRICH_SOFTWARE_GMBH = 37821\nVENDOR_ID_WOLFPLEX_HACKERSPACE_ASBL = 37822\nVENDOR_ID_VIMUKTI_TECHNOLOGIES_PRIVATE_LIMITED = 37823\nVENDOR_ID_ECOLE_NATIONALE_VETERINAIRE_DALFORT = 37824\nVENDOR_ID_INTERREGIONAL_DISTRIBUTION_GRID_COMPANY_OF_VOLGA_JSC = 37825\nVENDOR_ID_ISL_INTERNET_SICHERHEITSLOESUNGEN_GMBH = 37826\nVENDOR_ID_WV_NETWORK_FOR_EDUCATIONAL_TELECOMPUTING_WVNET = 37827\nVENDOR_ID_LILSYSTEMS = 37828\nVENDOR_ID_PUXLIT = 37829\nVENDOR_ID_INCAMPUS_PTE_LTD = 37830\nVENDOR_ID_TECHROUTES_NETWORK = 37831\nVENDOR_ID_CLIFFORD_CHANCE_LLP = 37832\nVENDOR_ID_SOUTHERN_NEW_HAMPSHIRE_MEDICAL_CENTER = 37833\nVENDOR_ID_NO23 = 37834\nVENDOR_ID_JEROME_BAUM = 37835\nVENDOR_ID_CCM_BENCHMARK_GROUP = 37836\nVENDOR_ID_MIKROVOX_SRO = 37837\nVENDOR_ID_FUTURAD_SRL = 37838\nVENDOR_ID_ONESYSTEM_SA = 37839\nVENDOR_ID_VEDA_ADVANTAGE = 37840\nVENDOR_ID_FLUGHAFEN_ZRICH_AG = 37841\nVENDOR_ID_AICOX_SOLUCIONES_SA = 37842\nVENDOR_ID_ADECCO_GROUP = 37843\nVENDOR_ID_EASTERN_UPPER_PENINSULA_ISD = 37844\nVENDOR_ID_VINCI_SA = 37845\nVENDOR_ID_MEDIAPRINT_ZEITUNGS_UND_ZEITSCHRIFTEN_VERLAGS_GESMBH = 37846\nVENDOR_ID_BUSINESS_INFORMATION_INTELLIGENCE_SERVICES = 37847\nVENDOR_ID_ORSENNA = 37848\nVENDOR_ID_ARIS_SYSTEM = 37849\nVENDOR_ID_SLAVIC_GOSPEL_ASSOCIATION = 37850\nVENDOR_ID_YTY_ENTERPRISES = 37851\nVENDOR_ID_ECCOS_INZENJERING = 37852\nVENDOR_ID_OASIS_SYSTEMS_PTY_LTD = 37853\nVENDOR_ID_CROZER_KEYSTONE_HEALTH_SYSTEM = 37854\nVENDOR_ID_THE_READING_HOSPITAL_AND_MEDICAL_CENTER = 37855\nVENDOR_ID_ESSENTIAL_ENTERPRISE_SOLUTIONS_INC = 37856\nVENDOR_ID_VEOLIA_ENVIRONMENTAL_SERVICES_NORTH_AMERICA = 37857\nVENDOR_ID_SYNEGEN = 37858\nVENDOR_ID_SYNERLINE_SPRL = 37859\nVENDOR_ID_SOURCE_TRADING_CO_LTD = 37860\nVENDOR_ID_AUSTCO_COMMUNICATION_SYSTEMS = 37861\nVENDOR_ID_SUNTEL_SA = 37862\nVENDOR_ID_ETMC_REGIONAL_HEALTHCARE_SYSTEM = 37863\nVENDOR_ID_CAPE_COD_HEALTHCARE = 37864\nVENDOR_ID_CITY_AND_COUNTY_OF_SAN_FRANCISCO_DEPARTMENT_OF_TECHNOLOGY = 37865\nVENDOR_ID_BANK_OF_NEW_ZEALAND = 37866\nVENDOR_ID_APG = 37867\nVENDOR_ID_VIRTUALSHARP_SOFTWARE = 37868\nVENDOR_ID_BRUTECO_CERTIFICATE_AUTHORITY = 37869\nVENDOR_ID_SENSOMETRIX_SA = 37870\nVENDOR_ID_DIGITAL_VISION_SRO = 37871\nVENDOR_ID_NEKO_CONSULTING_LTD = 37872\nVENDOR_ID_J4CARE_GMBH = 37873\nVENDOR_ID_CEBATECH_INC = 37874\nVENDOR_ID_OOGLE_NETWORKS_LLC = 37875\nVENDOR_ID_DELTA_MANAGEMENT_AB = 37876\nVENDOR_ID_TITNC_ALEXANDER_SEIFARTH = 37877\nVENDOR_ID_WINESKILLS = 37878\nVENDOR_ID_NETORG_LTD = 37879\nVENDOR_ID_QOWISIO = 37880\nVENDOR_ID_ESCA = 37881\nVENDOR_ID_REDECAMP_IND_COM_E_SERVIOS_DE_TELECOMUNICAES_SA = 37882\nVENDOR_ID_VITALY_PASHKOV = 37883\nVENDOR_ID_PERFECT_HOME_AS = 37884\nVENDOR_ID_RENEWABLE_FUNDING_LLC = 37885\nVENDOR_ID_CORAID_INC = 37886\nVENDOR_ID_ORAPHARMA_INC = 37887\nVENDOR_ID_PROGIRIS = 37888\nVENDOR_ID_ACCORD_MEDICAL_MANAGEMENT_LP_DBA_NIX_HEALTH_CARE_SYSTEM = 37889\nVENDOR_ID_QUALITY_FIBER_AND_RF_INC = 37890\nVENDOR_ID_BIG_ANT_STUDIOS_PTY_LTD = 37891\nVENDOR_ID_GCT_SEMICONDUCTOR_INC = 37892\nVENDOR_ID_BEYONDTRUST_SOFTWARE_INC = 37893\nVENDOR_ID_AYLITE = 37894\nVENDOR_ID_LUCIDVIEW = 37895\nVENDOR_ID_IFD_KAPITAL = 37896\nVENDOR_ID_MAXWELL_MANAGEMENT_INC_MMI = 37897\nVENDOR_ID_RIC_LARIVIRE = 37898\nVENDOR_ID_HAHN_FAMILY = 37899\nVENDOR_ID_INTERNATIONAL_INFORMATION_PROGRAMS_IR_DEPTARTMENT_OF_STATE = 37900\nVENDOR_ID_AEON_EXPERIENCED_DEVELOPMENT = 37901\nVENDOR_ID_POLYNET_LTD = 37902\nVENDOR_ID_CURUPIRA_S_A = 37903\nVENDOR_ID_UNIXSERVICES = 37904\nVENDOR_ID_BEIJING_JIAXUN_FEIHONG_ELECTRICAL_COLTD = 37905\nVENDOR_ID_BEIJING_WINGMAX_TECHNOLOGY_COLTD = 37906\nVENDOR_ID_FUSION_COMM_SOLUTION_SDN_BHD = 37907\nVENDOR_ID_A_PUISSANCE_3 = 37908\nVENDOR_ID_ARANTIA_2010_SLU = 37909\nVENDOR_ID_MODESAT_COMMUNICATIONS = 37910\nVENDOR_ID_CDP_COMMUNICATIONS_INC = 37911\nVENDOR_ID_LOCOMOTIVE_SOFTWARE_CONSULTING = 37912\nVENDOR_ID_ZAO_PTKB_MERCURIY = 37913\nVENDOR_ID_TECNOTEL_SRL = 37914\nVENDOR_ID_SHENZHEN_ZYEEDA_INFORMATION_TECHNOLOGY_CO_LTD = 37915\nVENDOR_ID_VOLVO_CAR_CORPORATION_AB = 37916\nVENDOR_ID_MARKITSERV = 37917\nVENDOR_ID_SAGE_DINING_SERVICES = 37918\nVENDOR_ID_NETMOON = 37919\nVENDOR_ID_DEXUS_HOLDINGS_PTY_LIMITED = 37920\nVENDOR_ID_SOUTHWEST_INSTITUTE_OF_HEALING_ARTS = 37921\nVENDOR_ID_TELEMEDIA_SYSTEMS_INC = 37922\nVENDOR_ID_FREYSTEINN_ALFREDSSON = 37923\nVENDOR_ID_NOKIANTYRES_LLC = 37924\nVENDOR_ID_MYSQL_CLUSTER_SNMP_MONITOR = 37925\nVENDOR_ID_PRANVEER_SINGH_INSTITUTE_OF_TECHNOLOGY = 37926\nVENDOR_ID_RTLGROUP = 37927\nVENDOR_ID_SHEFFIELD_TEACHING_HOSPITALS_NHS_FOUNDATION_TRUST = 37928\nVENDOR_ID_PIPS_TECHNOLOGY_LTD = 37929\nVENDOR_ID_VIRUS_STOPPER_FOUNDATION_REGISTERED_NGO_NO_348_2010 = 37930\nVENDOR_ID_BOB_GREENE = 37931\nVENDOR_ID_JACK_STORM = 37932\nVENDOR_ID_WESTCHESTER_MEDICAL_CENTER = 37933\nVENDOR_ID_CONFIDENT_TECHNOLOGIES_INC = 37934\nVENDOR_ID_DANMARKS_DESIGNSKOLE = 37935\nVENDOR_ID_CALENDAR42 = 37936\nVENDOR_ID_SCHAFFHAUSEN_COMMUNICATION_GMBH = 37937\nVENDOR_ID_LAKE_HOSPITAL_SYSTEM_INC = 37938\nVENDOR_ID_REYKJAVIK_UNIVERSITY = 37939\nVENDOR_ID_WRD_TECHNOLOGY_CO_LTD = 37940\nVENDOR_ID_COMFORTE_21_GMBH = 37941\nVENDOR_ID_FUTUVER_SA_DE_CV = 37942\nVENDOR_ID_MEDIUM_LINK_SYSTEM_TECHNOLOGY_CO_LTD = 37943\nVENDOR_ID_MEGALO_COMPANY = 37944\nVENDOR_ID_INSPURBEIJING_ELECTRONIC_INFORMATION_INDUSTRY_COLTD = 37945\nVENDOR_ID_CJSC_DZETTA = 37946\nVENDOR_ID_BANCO_CENTRAL_DEL_ECUADOR = 37947\nVENDOR_ID_TOSBG = 37948\nVENDOR_ID_TENNET_TSO = 37949\nVENDOR_ID_V_SOLUTION = 37950\nVENDOR_ID_DATAONE = 37951\nVENDOR_ID_MOCA_BY_DESIGN = 37952\nVENDOR_ID_CONTROLNET_INTERNATIONAL_INC = 37953\nVENDOR_ID_KENTIX_GMBH = 37954\nVENDOR_ID_NIERHAUS = 37955\nVENDOR_ID_EMH_HEALTHCARE = 37956\nVENDOR_ID_TEXAS_REGIONAL_MEDICAL_CENTER = 37957\nVENDOR_ID_HTTP_WWWSENTINEL_ENGINEORG = 37958\nVENDOR_ID_PARATIOCOM_EK = 37959\nVENDOR_ID_MINIADMIN = 37960\nVENDOR_ID_COCUS_AG = 37961\nVENDOR_ID_MINDBENDER_TECHNOLOGIES = 37962\nVENDOR_ID_AFFIRMED_NETWORKS_INC = 37963\nVENDOR_ID_CTI_DIGITAL = 37964\nVENDOR_ID_ALTOONA_REGIONAL_HEALTH_SYSTEM = 37965\nVENDOR_ID_PERTH_LINUX_USERS_GROUP = 37966\nVENDOR_ID_WEBRA_JSC = 37967\nVENDOR_ID_ELMA_ELECTRONIC_GMBH = 37968\nVENDOR_ID_OKSEI = 37969\nVENDOR_ID_GLOBAL_DIGITAL_INC = 37970\nVENDOR_ID_EKILIA = 37971\nVENDOR_ID_DYALOG_LTD = 37972\nVENDOR_ID_MOUNTAIN_VIEW_SYSTEMS_LLC = 37973\nVENDOR_ID_WINTHROP_UNIVERSITY_HOSPITAL = 37974\nVENDOR_ID_IMESSAGEDE = 37975\nVENDOR_ID_METAFORM_BILISIM_ILETISIM_VE_DANISMANLIK_LTD_STI = 37976\nVENDOR_ID_XTO_ENERGY_INC = 37977\nVENDOR_ID_TEB = 37978\nVENDOR_ID_PANARAM_LTD = 37979\nVENDOR_ID_BAYER_BUSINESS_SERVICES_GMBH = 37980\nVENDOR_ID_SOLUTION_CONCEPT_SRO = 37981\nVENDOR_ID_NETSTREAM_AG = 37982\nVENDOR_ID_NUX_LTD = 37983\nVENDOR_ID_GSURFNET = 37984\nVENDOR_ID_CCDI = 37985\nVENDOR_ID_MCARBON_TECH_INNOVATION_PVT_LTD = 37986\nVENDOR_ID_THE_HONG_KONG_COUNTRY_CLUB = 37987\nVENDOR_ID_JACK_IN_THE_BOX = 37988\nVENDOR_ID_FASTEK_ITALIA_SRL = 37989\nVENDOR_ID_INTELLIQUE = 37990\nVENDOR_ID_LETECHNIC_LTD = 37991\nVENDOR_ID_SYSM_SYSTEMMANAGEMENT_SERVICE_KONZEPTE_GMBH = 37992\nVENDOR_ID_HOKKAIDO_TELECOMMUNICATION_NETWORK_CO_INC = 37993\nVENDOR_ID_I_FREE = 37994\nVENDOR_ID_INITIATIVE_FR_NETZFREIHEIT = 37995\nVENDOR_ID_KTS_GMBH = 37996\nVENDOR_ID_4G_TECHNOLOGY = 37997\nVENDOR_ID_GREENWOOD_LEFLORE_HOSPITAL = 37998\nVENDOR_ID_TRANSPACKET_AS = 37999\nVENDOR_ID_DELEC_AUDIO_UND_VIDEOTECHNIK_GMBH = 38000\nVENDOR_ID_DIGITATA_LTD = 38001\nVENDOR_ID_INNOVISE_IES_FORMERLY_INNOVISE_ESM_SOFTWARE_LTD = 38002\nVENDOR_ID_STORMAGIC_LTD = 38003\nVENDOR_ID_EDENRED_SA = 38004\nVENDOR_ID_REFLEXE_TECHNOLOGIES = 38005\nVENDOR_ID_DIETRICH_IT_SERVICES = 38006\nVENDOR_ID_HANDY_NETWORKS = 38007\nVENDOR_ID_ELECOM_SAS = 38008\nVENDOR_ID_FONSEE_TECHNOLOGY_INC = 38009\nVENDOR_ID_CE_LABS = 38010\nVENDOR_ID_NTTM_NAME_TO_TELEPHONE_MAPPING_LIMITED = 38011\nVENDOR_ID_USL_INC = 38012\nVENDOR_ID_AMPEX_DATA_SYSTEMS = 38013\nVENDOR_ID_NORICS_GMBH = 38014\nVENDOR_ID_DUHA_SYSTEM_SRO = 38015\nVENDOR_ID_EXICOM_TELE_SYSTEMS_LIMITED = 38016\nVENDOR_ID_SC_EXIMTUR_SRL = 38017\nVENDOR_ID_GUIDEYEDE = 38018\nVENDOR_ID_SPECIAL_SYSTEMS_ENGINEERING_CENTER_LLC = 38019\nVENDOR_ID_FRANKLIN_COUNTY_PUBLIC_SCHOOLS = 38020\nVENDOR_ID_CFENGINE_AS = 38021\nVENDOR_ID_HAPPYBOOKING_UG_HAFTUNGSBESCHRNKT = 38022\nVENDOR_ID_ULTRACHAOS = 38023\nVENDOR_ID_LOGIC_SOFT_SAS = 38024\nVENDOR_ID_MINDARRAY_SYSTEMS_P_LTD = 38025\nVENDOR_ID_ACOME = 38026\nVENDOR_ID_LTD_INFOTECHNOSERVICE = 38027\nVENDOR_ID_DANTECH_LIMITED = 38028\nVENDOR_ID_UNIVERSITY_OF_SOUTH_FLORIDA = 38029\nVENDOR_ID_CONNGAME_COLTD = 38030\nVENDOR_ID_NEXTGATE = 38031\nVENDOR_ID_EFOLIA = 38032\nVENDOR_ID_TEAMF1 = 38033\nVENDOR_ID_IHSE_GMBH = 38034\nVENDOR_ID_GS1_SWEDEN_AB = 38035\nVENDOR_ID_CHRONOPAY_BV = 38036\nVENDOR_ID_STLE_HEBK_DEGRDEN = 38037\nVENDOR_ID_INFORMACIJSKO_SVETOVANJE_MIHA_VALENI_SP = 38038\nVENDOR_ID_KLIKA_DOO = 38039\nVENDOR_ID_RELIABLE_SYSTEM_SERVICES_CORPORATION = 38040\nVENDOR_ID_VIA_CHRISTI_HEALTH = 38041\nVENDOR_ID_UNASSIGNED_46 = 38042\nVENDOR_ID_HEAR_AND_SEE_SYSTEMS_O = 38043\nVENDOR_ID_WU_WAY_INC = 38044\nVENDOR_ID_SHENZHEN_WINHAP_COMMUCATIONS_INC = 38045\nVENDOR_ID_CJSC_UNICREDIT_BANK = 38046\nVENDOR_ID_JSC_STC_ELECTRON_SERVICE = 38047\nVENDOR_ID_INSTITUT_DES_SCIENCES_DE_LHOMME = 38048\nVENDOR_ID_ZAEHLWERK_GBR = 38049\nVENDOR_ID_LIGHTBAR_SOFTWARE_SOLUTIONS_LLC = 38050\nVENDOR_ID_BOY_SCOUTS_OF_AMERICA = 38051\nVENDOR_ID_ATTACKPLAN_SOFTWARE = 38052\nVENDOR_ID_AVISIT_SOLUTIONS_LIMITED = 38053\nVENDOR_ID_ARELLIA_CORPORATION = 38054\nVENDOR_ID_GFORCE_INC = 38055\nVENDOR_ID_NASON_HOSPITAL = 38056\nVENDOR_ID_DB_GERMANY_GMBH = 38057\nVENDOR_ID_CYANIDE_STUDIO = 38058\nVENDOR_ID_BANKING_PRODUCTION_CENTER = 38059\nVENDOR_ID_SEMPLA_SRL = 38060\nVENDOR_ID_EDISTAR_SRL = 38061\nVENDOR_ID_MARATHON_OIL_CORPORATION = 38062\nVENDOR_ID_SUOMEN_ASIAKASTIETO_OY = 38063\nVENDOR_ID_SSL_CORP = 38064\nVENDOR_ID_MEDIA_ALLIANCE_CJSC = 38065\nVENDOR_ID_SC_ROMASTRU_TRADING_SRL = 38066\nVENDOR_ID_APPRO_INTERNATIONAL_INC = 38067\nVENDOR_ID_CENTRASTATE_MEDICAL_CENTER_INC = 38068\nVENDOR_ID_CETIS_INC = 38069\nVENDOR_ID_ANODE = 38070\nVENDOR_ID_MAXIMATELECOM_JSC = 38071\nVENDOR_ID_LINEAR_PHOTONICS_LLC = 38072\nVENDOR_ID_DEFENSE_PHOTONICS_GROUP = 38073\nVENDOR_ID_STATROPY_SOFTWARE_LLC = 38074\nVENDOR_ID_SENTACA_COMMUNICATIONS = 38075\nVENDOR_ID_RADICAL_CREATIONS = 38076\nVENDOR_ID_JETPAY_LLC = 38077\nVENDOR_ID_NANJING_YXLINK_INFORMATION_TECHNOLOGIES_COLTD = 38078\nVENDOR_ID_DEAC_MEDICS_S_DE_RL_DE_CV = 38079\nVENDOR_ID_PICK_N_PAY = 38080\nVENDOR_ID_RANK_GROUP = 38081\nVENDOR_ID_HD_VIETNAM_CO = 38082\nVENDOR_ID_SLG_BROADCAST_AG = 38083\nVENDOR_ID_CONNECTURE_INC = 38084\nVENDOR_ID_SOLO_CUP_COMPANY = 38085\nVENDOR_ID_KORDIA = 38086\nVENDOR_ID_REAL_IT_TECHNICIANS_LLC = 38087\nVENDOR_ID_JOSHUA_TREE_SOFTWARE_LLC = 38088\nVENDOR_ID_PROMETHEUS_RESEARCH = 38089\nVENDOR_ID_GREENMOJITOORG = 38090\nVENDOR_ID_SOLIDFIRE_INC = 38091\nVENDOR_ID_ETHERDVB_PTY_LTD = 38092\nVENDOR_ID_WOPOCODE = 38093\nVENDOR_ID_THALES_OPTRONICS = 38094\nVENDOR_ID_COOPERATIVA_DE_ENSINO_SUPERIOR_POLITECNICO_E_UNIVERSITARIO = 38095\nVENDOR_ID_CYCLOPUSCAD_SRL = 38096\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DE_GOIS = 38097\nVENDOR_ID_ROSTOV_REGION_OFFICE_OF_FEDERAL_SERVICE_OF_STATE_REGISTRATION_CADASTER_AND_CARTOGRAPHY = 38098\nVENDOR_ID_TRANSGLOBAL_SECURE_COLLABORATION_PARTICIPATION_INC_TSCP = 38099\nVENDOR_ID_CAMI_RESEARCH_INC = 38100\nVENDOR_ID_ROALTER_INTERNATIONAL = 38101\nVENDOR_ID_SZECHENYI_ISTVAN_UNIVERSITY = 38102\nVENDOR_ID_DATAPORT_AR = 38103\nVENDOR_ID_PROFIX_CO = 38104\nVENDOR_ID_KIT_DIGITAL = 38105\nVENDOR_ID_NEBRASKA_FURNITURE_MART_INC = 38106\nVENDOR_ID_AVIOSYS_INC = 38107\nVENDOR_ID_MICROXEL_NETWORKS_INC = 38108\nVENDOR_ID_DOMTAR = 38109\nVENDOR_ID_ARKIVUM_LTD = 38110\nVENDOR_ID_SHENZHEN_DINSTAR_TECHNOLOGIES_COLTD = 38111\nVENDOR_ID_WUXI_ZHONGXUN_TECHNOLOGY_COLTD = 38112\nVENDOR_ID_RED_LION_CONTROLS_INC = 38113\nVENDOR_ID_MERSEYTRAVEL = 38114\nVENDOR_ID_MARIST_COLLEGE = 38115\nVENDOR_ID_CLEARBUS = 38116\nVENDOR_ID_UNIVERSITY_COLLEGE_DUBLIN = 38117\nVENDOR_ID_BEI_ELECTRONICS_LLC = 38118\nVENDOR_ID_OPEN_MOBILE_VIDEO_COALITION = 38119\nVENDOR_ID_UMASS_MEMORIAL_MEDICAL_CENTER = 38120\nVENDOR_ID_IOD_INCORPORATEDCOM = 38121\nVENDOR_ID_RED_WIRE_SERVICES_LLC = 38122\nVENDOR_ID_KINKAJOUGAMES = 38123\nVENDOR_ID_THOMSON_VIDEO_NETWORKS = 38124\nVENDOR_ID_EURODNS_SA = 38125\nVENDOR_ID_COGITOP_SAS = 38126\nVENDOR_ID_IES_DOCTOR_BALMIS = 38127\nVENDOR_ID_LAURENTIAN_UNIVERSITY = 38128\nVENDOR_ID_AKUMEN_LTD = 38129\nVENDOR_ID_FAITH_REGIONAL_HEALTH_SERVICES = 38130\nVENDOR_ID_RG_NETS = 38131\nVENDOR_ID_ETRUHLA_SRO = 38132\nVENDOR_ID_INGNITIA_HTTP_WWWINGNITIACOM = 38133\nVENDOR_ID_NATIONAL_DOCUMENT_CUSTODIANS_LLC = 38134\nVENDOR_ID_SHIELD_BRIDGE_INC = 38135\nVENDOR_ID_IN_TOUCH_PHARMACEUTICALS_INC = 38136\nVENDOR_ID_FUSIONSKYE = 38137\nVENDOR_ID_HOCHSCHULE_REGENSBURG = 38138\nVENDOR_ID_PRO_PARITY_IT_SERVICE = 38139\nVENDOR_ID_IMTECH_MARINE = 38140\nVENDOR_ID_EMICH_KSE_KUNDENSPEZIFISCHE_ELEKTRONIK = 38141\nVENDOR_ID_BHE_BONN_HUNGARY_ELECTRONICS_LTD = 38142\nVENDOR_ID_CLOUDBEES_INC = 38143\nVENDOR_ID_DISPLAYDATA_LTD_FORMERLY_ZBD_DISPLAYS_LIMITED = 38144\nVENDOR_ID_ECG_INC = 38145\nVENDOR_ID_ACCESS_NOW = 38146\nVENDOR_ID_MIND_MATTERS_LLC = 38147\nVENDOR_ID_EMCALI_EICE_ESP = 38148\nVENDOR_ID_TEKNOKALA_KY = 38149\nVENDOR_ID_ALTIA_CONSULTORES_SA = 38150\nVENDOR_ID_INVENDIS_TECHNOLOGIES = 38151\nVENDOR_ID_BAUERFEIND_AG = 38152\nVENDOR_ID_DADA_SPA = 38153\nVENDOR_ID_AUTOPART_INTERNATIONAL_INC = 38154\nVENDOR_ID_EXATEQ_LTD = 38155\nVENDOR_ID_ZEPHEIRA_LLC = 38156\nVENDOR_ID_POLICA_NACIONAL_DE_COLOMBA = 38157\nVENDOR_ID_OPEN_PLATFORM_TRUST_SERVICES = 38158\nVENDOR_ID_UNITY_GLOBAL_CORPORATION = 38159\nVENDOR_ID_DATTO_INC = 38160\nVENDOR_ID_WW_GRAINGER_INC = 38161\nVENDOR_ID_BNTPRO_BILGI_VE_ILETISIM_HIZ_LTD_STI = 38162\nVENDOR_ID_KIESEL_GMBH = 38163\nVENDOR_ID_TICKET_MONSTER_INC = 38164\nVENDOR_ID_KOHLPHARMA_GMBH = 38165\nVENDOR_ID_NEXURIUMFR = 38166\nVENDOR_ID_ALBRECHT_JUNG_GMBH_CO_KG = 38167\nVENDOR_ID_THE_TAUBMAN_COMPANY = 38168\nVENDOR_ID_LIFE_IMAGE_INC = 38169\nVENDOR_ID_LOCALNET_CORP = 38170\nVENDOR_ID_FISCHERWERKE_GMBH_CO_KG = 38171\nVENDOR_ID_CUSTOSMOBILE = 38172\nVENDOR_ID_ADMINIA_SISTEMAS = 38173\nVENDOR_ID_HAMILTON_MEDICAL_CENTER = 38174\nVENDOR_ID_DALI_WIRELESS_INC = 38175\nVENDOR_ID_MARKEN_MEHRWERT_AG = 38176\nVENDOR_ID_ICUE = 38177\nVENDOR_ID_SKYTIDE_INC = 38178\nVENDOR_ID_BARD_COLLEGE = 38179\nVENDOR_ID_KANGAROO_MEDIA_INC = 38180\nVENDOR_ID_TRINITY_HEALTH = 38181\nVENDOR_ID_CUBE_CORPORATE_RELEASE_SA = 38182\nVENDOR_ID_PYTHAGORE_FD = 38183\nVENDOR_ID_HEIDELBERG_MOBIL_INTERNATIONAL_GMBH = 38184\nVENDOR_ID_DETAILRESULT_GROEP = 38185\nVENDOR_ID_XPANDIA_LTD = 38186\nVENDOR_ID_WEIDMLLER_INTERFACE_GMBH_CO_KG = 38187\nVENDOR_ID_STORMMQ_LIMITED = 38188\nVENDOR_ID_TELEMEDIA_LTD = 38189\nVENDOR_ID_MAGNA = 38190\nVENDOR_ID_MEMJET_INC = 38191\nVENDOR_ID_GRAVITY_RD_LIMITED = 38192\nVENDOR_ID_YUDUAN_MOBILE_CO_LTD = 38193\nVENDOR_ID_NAGA_CONCEPT = 38194\nVENDOR_ID_GAMESERVERSCOM = 38195\nVENDOR_ID_FLAGSHIP_FACILITY_SERVICES = 38196\nVENDOR_ID_LACUNA_SYSTEMS_INC = 38197\nVENDOR_ID_RINCON_RESEARCH_CORPORATION = 38198\nVENDOR_ID_FRASER_TALBOT_CONSULTING_SERVICES_LLC = 38199\nVENDOR_ID_LIBO = 38200\nVENDOR_ID_RONALD_HUMMELINK = 38201\nVENDOR_ID_NETILITY_GMBH_CO_KG = 38202\nVENDOR_ID_INTERACTIVE_SYSTEMS_BUSINESS_CONSULTING = 38203\nVENDOR_ID_SIX_DEE_TELECOM_SOLUTIONS_PVT_LTD = 38204\nVENDOR_ID_UNIVERSITY_TELEINFORMATIC_CENTER_UTIC_UNIVERSITY_OF_SARAJEVO = 38205\nVENDOR_ID_ELOQUERA = 38206\nVENDOR_ID_FUJIAN_JINQIANMAO_ELECTRONIC_TECHNOLOGY_COLTD = 38207\nVENDOR_ID_MEAGANHARRISNET = 38208\nVENDOR_ID_VMC_SYSTEMS_LTD = 38209\nVENDOR_ID_XOVIS_AG = 38210\nVENDOR_ID_JSC_SIBERIAN_COAL_ENERGY_COMPANY = 38211\nVENDOR_ID_DERICHEBOURG = 38212\nVENDOR_ID_ACCENT_ELECTRONIC = 38213\nVENDOR_ID_VLATACOM = 38214\nVENDOR_ID_HOCHSCHULE_HAMM_LIPPSTADT_UNIVERSITY_OF_APPLIED_SCIENCES = 38215\nVENDOR_ID_BLUMENTHAL_SRL = 38216\nVENDOR_ID_GIGATEC_GMBH = 38217\nVENDOR_ID_DESIGNER_SYSTEMS_LTD = 38218\nVENDOR_ID_THERAP_SERVICES_LLC = 38219\nVENDOR_ID_PRIVATE_UNITARY_ENTERPRISE_ON_RENDERING_SERVICES_GREENWALL_SYSTEMS_FORMERLY_IZAO_GREENWALL_SYSTEMS = 38220\nVENDOR_ID_IP_GORSHKOV_YURI_VALEREVICH = 38221\nVENDOR_ID_PHILIPS_ELECTRONICS_NORTH_AMERICA_CORPORATION = 38222\nVENDOR_ID_DEFINITION_SIX_INC = 38223\nVENDOR_ID_CAROMONT_HEALTH = 38224\nVENDOR_ID_ENCELL_TECHNOLOGY_INC = 38225\nVENDOR_ID_ARIADNEXT = 38226\nVENDOR_ID_WELLINGTON_AND_KING_INC = 38227\nVENDOR_ID_PICA_GMBH = 38228\nVENDOR_ID_GIVC = 38229\nVENDOR_ID_KOSTROMA_STATE_TECHNOLOGICAL_UNIVERSITY = 38230\nVENDOR_ID_LYCE_SAINTE_MARIE_DU_PORT = 38231\nVENDOR_ID_ONONDAGA_COMMUNITY_COLLEGE = 38232\nVENDOR_ID_ARCHE_SYSTEME_GMBH = 38233\nVENDOR_ID_TESSCO_TECHNOLOGIES_INCORPORATED = 38234\nVENDOR_ID_ENTERSECT_TECHNOLOGIES_PTY_LTD = 38235\nVENDOR_ID_COLSYS_SRO = 38236\nVENDOR_ID_ELVERSON_ROD_AND_GUN_CLUB = 38237\nVENDOR_ID_KARNAL_TALAT_PRIVATE_LIMITED = 38238\nVENDOR_ID_OARC_INC = 38239\nVENDOR_ID_BUTTE_GLENN_COMMUNITY_COLLEGE_DISTRICT = 38240\nVENDOR_ID_HANLONG_TECHNOLOGY_COLTD = 38241\nVENDOR_ID_SHENZHEN_33E9_E_BUSINESS_CO_LTD = 38242\nVENDOR_ID_THECUS_THECNOLOGY_CORP = 38243\nVENDOR_ID_TOKYO_RADAR_CORPORATION = 38244\nVENDOR_ID_MIBUC_NET = 38245\nVENDOR_ID_FSC_INTERNATIONAL_CENTER_GMBH = 38246\nVENDOR_ID_CHARLESTON_AREA_MEDICAL_CENTER_INC = 38247\nVENDOR_ID_NEBRASKA_HEART_HOSPITAL = 38248\nVENDOR_ID_NIAGARA_HEALTH_SYSTEM = 38249\nVENDOR_ID_PROVENTA_AG = 38250\nVENDOR_ID_ZMANDA_INC = 38251\nVENDOR_ID_EOSSONLINE_LIMITED = 38252\nVENDOR_ID_ATHENTA_TECHNOLOGIES_P_LTD_INDIA = 38253\nVENDOR_ID_RESOLAN = 38254\nVENDOR_ID_KHALID_SHUKRI_IT_BERATUNG = 38255\nVENDOR_ID_ITSON_INC = 38256\nVENDOR_ID_NUINNO = 38257\nVENDOR_ID_WHIPTAIL_TECHNOLOGIES = 38258\nVENDOR_ID_ADD_TECHNOLOGY_SRL = 38259\nVENDOR_ID_4SMS_APS = 38260\nVENDOR_ID_BRIGHTSTONE = 38261\nVENDOR_ID_BOXCAR_PRESS_INC = 38262\nVENDOR_ID_THOMAS_MEMORIAL_HOSPITAL = 38263\nVENDOR_ID_MIDWEST_HEALTH_SYSTEMS_DATA_CENTER = 38264\nVENDOR_ID_INTENDENCIA_DE_CANELONES = 38265\nVENDOR_ID_CHINESE_BIBLE_CHURCH_OF_GREATER_BOSTON = 38266\nVENDOR_ID_UTS_PROGRAMMERS_SOCIETY = 38267\nVENDOR_ID_THREELINE_LLC = 38268\nVENDOR_ID_RRBONE = 38269\nVENDOR_ID_INTALIGENT_DIGITAL_CONSULTANTS = 38270\nVENDOR_ID_INTALIGENT_DIGITAL_CONSULTANTS_2 = 38271\nVENDOR_ID_LIBERTI = 38272\nVENDOR_ID_AVEPOINT_INC = 38273\nVENDOR_ID_SAFIRION_GMBH = 38274\nVENDOR_ID_3_IK = 38275\nVENDOR_ID_CIPSOFT_GMBH = 38276\nVENDOR_ID_R_TEC_IT_SYSTEME_GMBH = 38277\nVENDOR_ID_MEMORIAL_HOSPITAL_OF_SOUTH_BEND = 38278\nVENDOR_ID_PILOT_CORPORATION_OF_AMERICA = 38279\nVENDOR_ID_MILLENNIUM_INFORMATION_TECHNOLOGIES_PRIVATE_LIMITED = 38280\nVENDOR_ID_1ST_SETUP = 38281\nVENDOR_ID_ITALTELEC_SPA = 38282\nVENDOR_ID_MOBIWORK_LLC = 38283\nVENDOR_ID_PACKETACCESS = 38284\nVENDOR_ID_LIVE_PA_LTD = 38285\nVENDOR_ID_PKI24COM = 38286\nVENDOR_ID_D_TACQ_SOLUTIONS_LTD = 38287\nVENDOR_ID_SWISS_PUBLIC_BROADCASTING_ORGANISATION_SRG_SSR = 38288\nVENDOR_ID_LEETGEEK_PTY_LTD = 38289\nVENDOR_ID_INTELLIVOICE_COLTD = 38290\nVENDOR_ID_G_DATA_SOFTWARE_AG = 38291\nVENDOR_ID_DAMALL_TECHNOLOGIES_SAS = 38292\nVENDOR_ID_DYNAMIC_TECHNICAL_SOLUTIONS_INC = 38293\nVENDOR_ID_IOMACHINE_LLC = 38294\nVENDOR_ID_PRO_BROADBAND_INC = 38295\nVENDOR_ID_MULTI_SINERGI_INFRASTRUKTUR_PT = 38296\nVENDOR_ID_COMMEDIA_LDA = 38297\nVENDOR_ID_DAGO_SOLUTIONS = 38298\nVENDOR_ID_DILLARDS_INC = 38299\nVENDOR_ID_GRUBHUB = 38300\nVENDOR_ID_HOSTHISORG = 38301\nVENDOR_ID_ITSUMO_SC = 38302\nVENDOR_ID_PASK = 38303\nVENDOR_ID_CROSSIMAGING_INC = 38304\nVENDOR_ID_LYBREDYNE_TECHNOLOGIES = 38305\nVENDOR_ID_MASIBUS_AUTOMATION_AND_INSTRUMENTATION_PVT_LTD = 38306\nVENDOR_ID_OIS_NET = 38307\nVENDOR_ID_JOINT_STOCK_COMPANY_BANKING_FINANCIAL_NETWORK = 38308\nVENDOR_ID_CIRQUENT_GMBH = 38309\nVENDOR_ID_PREMIER_BANKCARD_LLC = 38310\nVENDOR_ID_OPTIMHEXA = 38311\nVENDOR_ID_CAREVIEW_COMMUNICATIONS = 38312\nVENDOR_ID_STG_STARGAZER = 38313\nVENDOR_ID_ADJECTIVISMORG = 38314\nVENDOR_ID_NATIONAL_LAND_SURVEY_OF_ICELAND = 38315\nVENDOR_ID_SEKONIC_CORPORATION = 38316\nVENDOR_ID_JR_EAST_MECHATRONICS_COLTD = 38317\nVENDOR_ID_ING_BUERO_FISCHER_GMBH = 38318\nVENDOR_ID_LANTIQ_DEUTSCHLAND_GMBH = 38319\nVENDOR_ID_BUBBLEPHONE_LTD = 38320\nVENDOR_ID_GREATNETDE_OHG = 38321\nVENDOR_ID_STRANGELOOP_NETWORKS = 38322\nVENDOR_ID_STUART_MCGRAW = 38323\nVENDOR_ID_EMAGSOFTWARE = 38324\nVENDOR_ID_PRECOGEN_LLC = 38325\nVENDOR_ID_NEPDA = 38326\nVENDOR_ID_VOKZAL_INFOKOM = 38327\nVENDOR_ID_LVLUP_EV = 38328\nVENDOR_ID_THREE_LAWS_OF_MOBILITY = 38329\nVENDOR_ID_DATAMETRIX_AS = 38330\nVENDOR_ID_SKEED_CO_LTD = 38331\nVENDOR_ID_LEONIT_GBR = 38332\nVENDOR_ID_NETWORK_SOLUTION_TECHNOLOGIES_CO_LTD = 38333\nVENDOR_ID_ARCHONE = 38334\nVENDOR_ID_AVIN_NETWORKS_PRIVATE_LIMITED = 38335\nVENDOR_ID_PLATTE_VALLEY_MEDICAL_CENTER = 38336\nVENDOR_ID_POWER_INSTRUMENTS_PTE_LTD = 38337\nVENDOR_ID_SUNTEL_LTD = 38338\nVENDOR_ID_CENTRUM_INFORMATYKI_STATYSTYCZNEJ = 38339\nVENDOR_ID_BROADCAST_PARTNERS = 38340\nVENDOR_ID_AGETO_INNOVATION_GMBH = 38341\nVENDOR_ID_CITY_OF_HOPE = 38342\nVENDOR_ID_WILCOM_TECHNOLOGIES = 38343\nVENDOR_ID_MAXWELL_WORTHINGTON = 38344\nVENDOR_ID_ST_UKRAINE = 38345\nVENDOR_ID_PALLAS_GMBH = 38346\nVENDOR_ID_ING_GNTHER_VLASCHITS = 38347\nVENDOR_ID_ISDEFE_INGENIERIA_DE_SISTEMAS_PARA_LA_DEFENSA_DE_ESPAA_SA = 38348\nVENDOR_ID_FIRSTCOM_A_S = 38349\nVENDOR_ID_XTREEMFS_PROJECT = 38350\nVENDOR_ID_NET_LAB_GMBH = 38351\nVENDOR_ID_NATIONAL_INFORMATION_TECHNOLOGY_CENTER = 38352\nVENDOR_ID_WEEBLY_INC = 38353\nVENDOR_ID_PRINCETON_CONSULTANTS = 38354\nVENDOR_ID_TTTECH_COMPUTERTECHNIK_AG = 38355\nVENDOR_ID_MIKE_BECKER = 38356\nVENDOR_ID_ACTUALMED = 38357\nVENDOR_ID_PEAK_RELIABILITY_FORMERLY_WESTERN_ELECTRICITY_COORDINATING_COUNCIL = 38358\nVENDOR_ID_MEISSNER = 38359\nVENDOR_ID_DELLED_COMPANY_LTD = 38360\nVENDOR_ID_EXABRE_LTD = 38361\nVENDOR_ID_ALPHA_DOT_NET_AUSTRALIA = 38362\nVENDOR_ID_PT_PRIMATAMA_SENTRA_SOLUSI = 38363\nVENDOR_ID_NETSIS_TECHNOLOGY = 38364\nVENDOR_ID_BKW_FMB_ENERGIE_AG = 38365\nVENDOR_ID_JOINT_STOCK_BANK_MASTER_BANK = 38366\nVENDOR_ID_KIS_INFORMATION_SERVICES_GMBH = 38367\nVENDOR_ID_RADIMETRICS_INC = 38368\nVENDOR_ID_ZIXI_LLC = 38369\nVENDOR_ID_JETNEXUS_LIMITED = 38370\nVENDOR_ID_PT_CAHAYA_BARUMAS_SEJAHTERA = 38371\nVENDOR_ID_PT_INPAR_SAKA = 38372\nVENDOR_ID_GREENVILLE_HOSPITAL_SYSTEM_UNIVERSITY_MEDICAL_CENTER = 38373\nVENDOR_ID_CLOUDERA = 38374\nVENDOR_ID_LINUS_VAN_GEUNS = 38375\nVENDOR_ID_THE_CHESTER_COUNTY_HOSPITAL = 38376\nVENDOR_ID_TOHOJO_APS = 38377\nVENDOR_ID_FEEDHENRY_LTD = 38378\nVENDOR_ID_INTER_MEDIA_GROUP = 38379\nVENDOR_ID_AMGNET_SA = 38380\nVENDOR_ID_UNETVALE_SERVICOS_E_EQUIPAMENTOS_LTDA_EPP = 38381\nVENDOR_ID_ZNT_ZENTREN_FR_NEUE_TECHNOLOGIEN_GMBH = 38382\nVENDOR_ID_WORLDCARE_CLINICAL_LLC = 38383\nVENDOR_ID_DBAPP_SECURITY = 38384\nVENDOR_ID_SVYAZCOM_LTD = 38385\nVENDOR_ID_COOP_DENMARK_A_S = 38386\nVENDOR_ID_SMART_DESIGN_SPRL = 38387\nVENDOR_ID_HANGZHOU_LAYBEL_ELECTRONIC_TECHNOLOGY_CO_LTD = 38388\nVENDOR_ID_VERISEC_AB = 38389\nVENDOR_ID_RAILINC_CORPORATION = 38390\nVENDOR_ID_IROD = 38391\nVENDOR_ID_UNIVERSITY_OF_DAYTON = 38392\nVENDOR_ID_SJX_SOFT = 38393\nVENDOR_ID_INTERFIBRA_TELECOMUNICACIONES_SL_FORMERLY_TELEYECLA_SL = 38394\nVENDOR_ID_PHILLIPS_FOODS_INC = 38395\nVENDOR_ID_FLINDERS_CHRISTIAN_COMMUNITY_COLLEGE_INC = 38396\nVENDOR_ID_TSB_TIEFDRUCK_SCHWANN_BAGEL_GMBH_COKG = 38397\nVENDOR_ID_ZAO_TD_BOVID = 38398\nVENDOR_ID_KLOECKNER_CO_SE = 38399\nVENDOR_ID_NFON_AG = 38400\nVENDOR_ID_VERIDIAN_SOLUTIONS_PTY_LTD = 38401\nVENDOR_ID_CI_CENTRO_DE_INFORMACOES = 38402\nVENDOR_ID_VACCCH = 38403\nVENDOR_ID_MAINTAINET_AG = 38404\nVENDOR_ID_AUTOTALKS = 38405\nVENDOR_ID_ROSCOM_LTD = 38406\nVENDOR_ID_CHESAPEAKE_LTD = 38407\nVENDOR_ID_OKIT_GMBH = 38408\nVENDOR_ID_CARGOSOFT_LLC = 38409\nVENDOR_ID_RAIKOSOFT_GMBH = 38410\nVENDOR_ID_KNOLOGY = 38411\nVENDOR_ID_FUN_RELAX_GMBH = 38412\nVENDOR_ID_LODGEISTICS_INC = 38413\nVENDOR_ID_FUSIONDIRECTORY = 38414\nVENDOR_ID_CLAVIUS_GYMNASIUM_BAMBERG = 38415\nVENDOR_ID_NORDIC_ID_OY = 38416\nVENDOR_ID_KYBEIRE_LTD = 38417\nVENDOR_ID_UFMA_UNIVERSIDADE_FEDERAL_DO_MARANHO = 38418\nVENDOR_ID_RAULAND_AUSTRALIA_PTY_LTD = 38419\nVENDOR_ID_YOTTAA_INC = 38420\nVENDOR_ID_ALL_RTP = 38421\nVENDOR_ID_TESYNC_TECHNOLOGY_LIMITED = 38422\nVENDOR_ID_PBEAKK = 38423\nVENDOR_ID_BALTSTAMP = 38424\nVENDOR_ID_PRIVATE_UNIVERSITY_COLLEGE_OF_EDUCATION_OF_THE_DIOCESE_OF_LINZ = 38425\nVENDOR_ID_STATE_COMPANY_RUSSIAN_HIGHWAYS = 38426\nVENDOR_ID_GENVE_AROPORT = 38427\nVENDOR_ID_SLIMPAY = 38428\nVENDOR_ID_DRYDEN_MUNICIPAL_TELEPHONE_SYSTEM = 38429\nVENDOR_ID_IRELL_MANELLA_LLP = 38430\nVENDOR_ID_COMMUNICATIONS_POWER_INDUSTRIES_SATCOM_DIVISION = 38431\nVENDOR_ID_OBERON_INC = 38432\nVENDOR_ID_NETAXIS_SOLUTIONS = 38433\nVENDOR_ID_OPENCSI = 38434\nVENDOR_ID_ABEGGLEN_IT_CONSULTING = 38435\nVENDOR_ID_REININET = 38436\nVENDOR_ID_VLASTIMIL_KUPSKY = 38437\nVENDOR_ID_GTWINS = 38438\nVENDOR_ID_AURENZ_GMBH = 38439\nVENDOR_ID_HEROLD_BUSINESS_DATA_GMBH = 38440\nVENDOR_ID_BLUE_SPHERE = 38441\nVENDOR_ID_INRADIOS_GMBH = 38442\nVENDOR_ID_ORBICONNECT_GMBH_CO_KG = 38443\nVENDOR_ID_HOLIDAY_EXTRAS_LIMITED = 38444\nVENDOR_ID_VMC = 38445\nVENDOR_ID_ENLOGIC_SYSTEMS_LLC = 38446\nVENDOR_ID_ING_VILIAM_ORULA_IELECTRO = 38447\nVENDOR_ID_NOLOGIN_CONSULTING_SL = 38448\nVENDOR_ID_NATIONWIDE_BUILDING_SOCIETY = 38449\nVENDOR_ID_DEDIPOWER_MANAGED_HOSTING_LTD = 38450\nVENDOR_ID_LANDERNET_INC = 38451\nVENDOR_ID_QQ2 = 38452\nVENDOR_ID_INDIGO_DYNAMIC_NETWORKS_LLC = 38453\nVENDOR_ID_ADPUNTUM_GMBH = 38454\nVENDOR_ID_CYBERWARE_INC = 38455\nVENDOR_ID_IC_ISKRA_LTD = 38456\nVENDOR_ID_ECVISION = 38457\nVENDOR_ID_NACHTWACHT = 38458\nVENDOR_ID_SBIT_GMBH = 38459\nVENDOR_ID_GEMTEK_TECHNOLOGY_CO_LTD = 38460\nVENDOR_ID_RAGENET_LLC = 38461\nVENDOR_ID_PT_MAGNAR_NUGRAHA = 38462\nVENDOR_ID_DATA_SERVICE_INTEGRATION = 38463\nVENDOR_ID_SNOERFORG = 38464\nVENDOR_ID_AVALCOM_SP_Z_OO = 38465\nVENDOR_ID_MAX_PLANCK_INSTITUT_FR_MOLEKULARE_GENETIK = 38466\nVENDOR_ID_CARL_EDELMANN_GMBH = 38467\nVENDOR_ID_GARAGE_CENTER_FOR_CONTEMPORARY_CULTURE = 38468\nVENDOR_ID_AXTION_SDN_BHD = 38469\nVENDOR_ID_BISON_SCHWEIZ_AG = 38470\nVENDOR_ID_MULTIMEDIAKONTOR_HAMBURG_GMBH = 38471\nVENDOR_ID_KEVIN_MULLET = 38472\nVENDOR_ID_ELLIS_HOSPITAL = 38473\nVENDOR_ID_BLACKRIDGE_TECHNOLOGY = 38474\nVENDOR_ID_GLOBAL_SATCOM_TECHNOLOGY_INC = 38475\nVENDOR_ID_PROSOZIAL_GMBH = 38476\nVENDOR_ID_ANTAIRA_TECHNOLOGIES_LLC_FORMERLY_AAXEON_TECHNOLOGIES_LLC = 38477\nVENDOR_ID_VERTICALCUE_DESIGN_LLC = 38478\nVENDOR_ID_SELUXIT = 38479\nVENDOR_ID_ABPM = 38480\nVENDOR_ID_M_FINANCIAL_GROUP = 38481\nVENDOR_ID_METASTACK_SOLUTIONS_LTD = 38482\nVENDOR_ID_NETMONITOR = 38483\nVENDOR_ID_INNERDIVE_SOLUTIONS_LLC = 38484\nVENDOR_ID_WESTCHESTER_DIGESTIVE_DISEASE_GROUP_LLP = 38485\nVENDOR_ID_EUROTEC_INFORMATION_SYSTEMS_KK = 38486\nVENDOR_ID_QUADRO_SYSTEMS = 38487\nVENDOR_ID_EXCEPTIONAL_INNOVATION_LLC = 38488\nVENDOR_ID_WD_40_COMPANY = 38489\nVENDOR_ID_NEBULA_INC = 38490\nVENDOR_ID_CLEAN_COMMUNICATIONS_LTD = 38491\nVENDOR_ID_WORLDMINGOSOLUTIONS = 38492\nVENDOR_ID_VPT = 38493\nVENDOR_ID_CLINTWORLD_GMBH = 38494\nVENDOR_ID_PERTIMM = 38495\nVENDOR_ID_DIGG_INC = 38496\nVENDOR_ID_COLLINS_SYSTEMS = 38497\nVENDOR_ID_GEORGIA_CUMBERLAND_CONFERENCE = 38498\nVENDOR_ID_VERSADIAL_SOLUTIONS = 38499\nVENDOR_ID_CARETECH_AB = 38500\nVENDOR_ID_FUNDAO_PARQUE_TECNOLGICO_ITAIPU = 38501\nVENDOR_ID_BIZNET_CORPORACIN_COSTA_RICA = 38502\nVENDOR_ID_ADVTAL52 = 38503\nVENDOR_ID_SKYWORTH = 38504\nVENDOR_ID_OJSC_OC_ROSNEFT = 38505\nVENDOR_ID_PLUS_PACK_A_S = 38506\nVENDOR_ID_DEPALOL_GESTI_I_MULTIMDIA = 38507\nVENDOR_ID_BW_BROADCAST_LTD = 38508\nVENDOR_ID_DNSNET_INTERNET_SERVICE_GMBH = 38509\nVENDOR_ID_COLORCON_INC = 38510\nVENDOR_ID_TOYOTA_MOTOR_CORPORATION_AUSTRALIA = 38511\nVENDOR_ID_ST_MARYS_COLLEGE = 38512\nVENDOR_ID_PJSC_MYRONIVSKY_HLIBOPRODUCT = 38513\nVENDOR_ID_FR_SAUTER_AG = 38514\nVENDOR_ID_IXC = 38515\nVENDOR_ID_ALLWORX = 38516\nVENDOR_ID_ST_JOSEPH_HEALTHCARE = 38517\nVENDOR_ID_ATMA_TECNOLOGIA_LTDA = 38518\nVENDOR_ID_DELTAVISION_SP_Z_OO = 38519\nVENDOR_ID_SEMMLE_LTD = 38520\nVENDOR_ID_OBANSK_SDRUEN_UBUNTU_PRO_ESKOU_REPUBLIKU = 38521\nVENDOR_ID_ZHEJIANG_POST = 38522\nVENDOR_ID_SAMIMRAYANEH = 38523\nVENDOR_ID_STORAGECRAFT_TECHNOLOGY_CORPORATION = 38524\nVENDOR_ID_CITY_OF_WINDHOEK = 38525\nVENDOR_ID_PAUL_DAVISON_CONSULTING = 38526\nVENDOR_ID_GEEKSOC = 38527\nVENDOR_ID_PIKA_TECHNOLOGIES = 38528\nVENDOR_ID_AKA_COMPUTER_SOLUTION_INC = 38529\nVENDOR_ID_INFORMATIONSDESIGN_AG = 38530\nVENDOR_ID_ICF_INTERNATIONAL = 38531\nVENDOR_ID_GROUPSCAPECOM = 38532\nVENDOR_ID_ELPHOTECH = 38533\nVENDOR_ID_L_ACOUSTICS = 38534\nVENDOR_ID_SIERRA_PHOTONICS_INC = 38535\nVENDOR_ID_10ZIG_TECHNOLOGY = 38536\nVENDOR_ID_TEXAS_MUNICIPAL_LEAGUE_INTERGOVERNMENTAL_RISK_POOL = 38537\nVENDOR_ID_SIFY_TECHNOLOGIES_LTD = 38538\nVENDOR_ID_ANKABUT_UAE_ADVANCED_NETWORK_FOR_RESEARCH_AND_EDUCATION = 38539\nVENDOR_ID_PHOEBUS_VISION = 38540\nVENDOR_ID_CONCENTRIC_CLOUD_SOLUTIONS_LLC_FORMERLY_XO_INTERACTIVE_LLC = 38541\nVENDOR_ID_OPENIP = 38542\nVENDOR_ID_CONTINENTAL_LENSA_LTD = 38543\nVENDOR_ID_ASSET_CONTROL_INTERNATIONAL_BV = 38544\nVENDOR_ID_ADVANCED_MEDICAL_X_RAY = 38545\nVENDOR_ID_ORPHEUS = 38546\nVENDOR_ID_DIGNITAS_TECHNOLOGIES = 38547\nVENDOR_ID_SHENZHEN_UNIVERSAL_INTELLISYS_PTE_LTD = 38548\nVENDOR_ID_NETSTOR_TECHNOLOGY_CO_LTD = 38549\nVENDOR_ID_SECURITY_PILLAR_LTD = 38550\nVENDOR_ID_PANSARDATA_AB = 38551\nVENDOR_ID_MANFRED_NAGL_NAGLITAT = 38552\nVENDOR_ID_BUREAU_OF_INDUSTRIAL_AUTOMATION_LLC = 38553\nVENDOR_ID_MARK_SPACE_TELESYSTEMS_P_LTD = 38554\nVENDOR_ID_JEPPESEN = 38555\nVENDOR_ID_TRADESIGNAL_GMBH = 38556\nVENDOR_ID_ARTVIN_CORUH_UNIVERSITY = 38557\nVENDOR_ID_INNES_CORPORATION_PTY_LTD = 38558\nVENDOR_ID_ITAC_IT_APPLICATIONS_CONSULTING_SA = 38559\nVENDOR_ID_DENVER_INTERNATIONAL_AIRPORT_CITY_AND_COUNTY_OF_DENVER = 38560\nVENDOR_ID_APPLETON_COATED_LLC = 38561\nVENDOR_ID_KOKELNET = 38562\nVENDOR_ID_RYAN_SYSTEMS_INC = 38563\nVENDOR_ID_MARK_IV_INDONESIA = 38564\nVENDOR_ID_INSTRUMENTATION_TECHNOLOGIES_DD = 38565\nVENDOR_ID_FIRSTPOWER_AS = 38566\nVENDOR_ID_HIT_THE_STICKS_LLC = 38567\nVENDOR_ID_SYVEA_TECHNOLOGIES = 38568\nVENDOR_ID_UZIEK_PTE_LTD = 38569\nVENDOR_ID_AXN_SOFTWARE_UG_HAFTUNGSBESCHRNKT = 38570\nVENDOR_ID_HEALTH_INFORMATION_TECHNOLOGY_EXCHANGE_OF_CONNECTICUT = 38571\nVENDOR_ID_TROSOFT_AB = 38572\nVENDOR_ID_ZUCCHETTI_AXESS_SPA = 38573\nVENDOR_ID_FACULTAD_REGIONAL_SANTA_FE_UNIVERSIDAD_TECNOLGICA_NACIONAL = 38574\nVENDOR_ID_TERATRON_GMBH = 38575\nVENDOR_ID_LOMOND_PAPER_LTD = 38576\nVENDOR_ID_PERFECTA_AVIATION = 38577\nVENDOR_ID_NEW_YORK_CITY_TRANSIT_AUTHORITY = 38578\nVENDOR_ID_PIKE_AEROSPACE_RESEARCH_CORPORATION = 38579\nVENDOR_ID_I3_INTERNATIONAL_INC = 38580\nVENDOR_ID_CROUSE_HOSPITAL = 38581\nVENDOR_ID_FRYMAN_AND_ASSOCIATES_INC = 38582\nVENDOR_ID_METROPCS_WIRELESS_INC = 38583\nVENDOR_ID_SUPERIOR_COMMUNICATION_SOLUTIONS_INC = 38584\nVENDOR_ID_VEG_NETWORKS = 38585\nVENDOR_ID_DOZEENER_CONTROLS = 38586\nVENDOR_ID_SMARTKOMM_GMBH = 38587\nVENDOR_ID_TANUKI_SOFTWARE_LTD = 38588\nVENDOR_ID_EGYPTIAN_UNIVERSITIES_NETWORK_EUN = 38589\nVENDOR_ID_ISLAMIC_REPUBLIC_BROADCASTING_OF_IRAN = 38590\nVENDOR_ID_INDUSFACE_TELECOM_PRIVATE_LIMITED = 38591\nVENDOR_ID_CYAN_TECHNOLOGY = 38592\nVENDOR_ID_CLOUD_9_BUSINESS_ANALYTICS_LIMITED = 38593\nVENDOR_ID_ENEL_PS_DOO = 38594\nVENDOR_ID_SHANGHAI_ZHONGMI_COMMUNICATION_TECHNOLOGY_COLTD = 38595\nVENDOR_ID_UNIVERSITY_OF_SAINT_JOSEPH = 38596\nVENDOR_ID_SUNFEST = 38597\nVENDOR_ID_SUNFEST_2 = 38598\nVENDOR_ID_LTU_TECHNOLOGIES = 38599\nVENDOR_ID_KLEINHANS_IT_SOLUTIONS_UND_SERVICES = 38600\nVENDOR_ID_ELIUM_GMBH = 38601\nVENDOR_ID_SC_ELECTRIC_COMPANY = 38602\nVENDOR_ID_APPLIED_SYSTEMS_ENGINEERING_INC = 38603\nVENDOR_ID_IN_AND_OUT_COLOGNE = 38604\nVENDOR_ID_CALXEDA_INC = 38605\nVENDOR_ID_GUSBECKERS_DEVELOPMENT = 38606\nVENDOR_ID_WITTENSTEIN_AG = 38607\nVENDOR_ID_GYMNZIUM_PLZE = 38608\nVENDOR_ID_LIPPLEJP = 38609\nVENDOR_ID_PT_RESPATI_SOLUSI_REKATAMA = 38610\nVENDOR_ID_ALAN_BAUGHER = 38611\nVENDOR_ID_ITRIX_INCORPORATION = 38612\nVENDOR_ID_COMPUTER_TECHNOLOGES_AND_SYSTEMS_LTD = 38613\nVENDOR_ID_NEXTEST_SYSTEMS = 38614\nVENDOR_ID_METTLE_NETWORKS_INC = 38615\nVENDOR_ID_METEL_SRO = 38616\nVENDOR_ID_CALLPLUS_SERVICES_LIMITED = 38617\nVENDOR_ID_CRITICAL_SOFTWARE_LTD = 38618\nVENDOR_ID_THINK_DIGITAL_GMBH = 38619\nVENDOR_ID_GAMMA_2000_PTE_LTD = 38620\nVENDOR_ID_MERRUK_TECHNOLOGY_SARL = 38621\nVENDOR_ID_MASTER_POWER_TECHNOLOGIES = 38622\nVENDOR_ID_BOLAYCO = 38623\nVENDOR_ID_NETGRAPPLER_CORPORATION = 38624\nVENDOR_ID_SILOCOM_INTERNACIONAL_CORP = 38625\nVENDOR_ID_BUREAU_14_SARL = 38626\nVENDOR_ID_DLC_SYSTEMS_INC = 38627\nVENDOR_ID_LIVINGSOCIAL = 38628\nVENDOR_ID_CONNAMARA_SYSTEMS_LLC = 38629\nVENDOR_ID_ONEHEALTHPORT = 38630\nVENDOR_ID_MORGAJELCOM = 38631\nVENDOR_ID_MARIANA_CONSULTING_LLC = 38632\nVENDOR_ID_VOXLIBERTUM_AG = 38633\nVENDOR_ID_HENDRIKX_ITC_BV = 38634\nVENDOR_ID_FALCON_STEEL_CO = 38635\nVENDOR_ID_STARFISH_TECHNOLOGIES_LIMITED = 38636\nVENDOR_ID_U2_SYSTEMS = 38637\nVENDOR_ID_ISTA_INTERNATIONAL_GMBH = 38638\nVENDOR_ID_BPOST = 38639\nVENDOR_ID_NOVUS_PARTNERS_INC = 38640\nVENDOR_ID_YATE = 38641\nVENDOR_ID_NET_TRANS_SERVICES_AS = 38642\nVENDOR_ID_SQISOFT_INC = 38643\nVENDOR_ID_ARMADINO = 38644\nVENDOR_ID_OCV_CJSC = 38645\nVENDOR_ID_STONIESHOME = 38646\nVENDOR_ID_KV_TELEMATIK_ARGE = 38647\nVENDOR_ID_DOMENYPL_LTD = 38648\nVENDOR_ID_MR_PANQUECITO = 38649\nVENDOR_ID_WESTERN_AUSTRALIAN_NETWORK_GAMING_INC = 38650\nVENDOR_ID_OBSERVATRIO_NACIONAL = 38651\nVENDOR_ID_INSTITUTO_FEDERAL_CATARINENSE_CAMPUS_VIDEIRA = 38652\nVENDOR_ID_VERLAGSGRUPPE_NEWS_GESMBH = 38653\nVENDOR_ID_BOOSTAEROSPACE_SAS = 38654\nVENDOR_ID_NBU_SK_NATIONAL_SECURITY_AUTHORITY = 38655\nVENDOR_ID_ENERGINETDK = 38656\nVENDOR_ID_MINISTERIO_DE_JUSTICIA_Y_PAZ = 38657\nVENDOR_ID_MUSIC_FOR_HUMANS = 38658\nVENDOR_ID_THE_CRIMINAL_DEFENSE_GROUP = 38659\nVENDOR_ID_CERTIPOST_NV_SA = 38660\nVENDOR_ID_WUXI_THINKYARE_ELECTRONIC_TECHNOLOGY_CO_LTD = 38661\nVENDOR_ID_DRACHENFELS_LTD = 38662\nVENDOR_ID_AHD_HELLWEG_DATA_GMBH_CO_KG = 38663\nVENDOR_ID_SKY_AREA = 38664\nVENDOR_ID_PUUR_IT_WWWPUUR_ITNL = 38665\nVENDOR_ID_SILVERSANDS_LIMITED = 38666\nVENDOR_ID_MINDBEAN = 38667\nVENDOR_ID_RAHUNAS = 38668\nVENDOR_ID_NIKKEY_COLTD = 38669\nVENDOR_ID_BICS_BELGACOM_INTERNATIONAL_CARRIER_SERVICES = 38670\nVENDOR_ID_CELLBUSTERS_LLC = 38671\nVENDOR_ID_ZAEIM_ELECTRONIC_INDUSTRIES = 38672\nVENDOR_ID_E_MERCHANT = 38673\nVENDOR_ID_WEST_VIRGINIA_HEALTH_INFORMATION_NETWORK_WVHIN = 38674\nVENDOR_ID_NORCELL_INC = 38675\nVENDOR_ID_PDU_EXPERT_UK_LTD = 38676\nVENDOR_ID_ECOSIX = 38677\nVENDOR_ID_JOYENT_INC = 38678\nVENDOR_ID_IDCELLCOLTD = 38679\nVENDOR_ID_NIMBULA_INC = 38680\nVENDOR_ID_HJBAIER = 38681\nVENDOR_ID_MINDLINX_TECHNOLOGY_SOLUTIONS = 38682\nVENDOR_ID_KLINIKUM_ANSBACH = 38683\nVENDOR_ID_LOGEMED = 38684\nVENDOR_ID_SEMPTIAN_TECHNOLOGIES_LTD = 38685\nVENDOR_ID_CLS_ARGOS = 38686\nVENDOR_ID_THE_ONLINE_BACKUP_COMPANY_NORWAY_AS = 38687\nVENDOR_ID_EDUCACH_SCHWEIZER_MEDIENINSTITUT_FR_BILDUNG_UND_KULTUR = 38688\nVENDOR_ID_OLD_MUTUAL = 38689\nVENDOR_ID_COREPOINT_HEALTH = 38690\nVENDOR_ID_QUANTI_SRO = 38691\nVENDOR_ID_ONPATH_TECHNOLOGIES_INC = 38692\nVENDOR_ID_MATTHEWVCOM = 38693\nVENDOR_ID_ALABAMA_ONE_HEALTH_RECORD_ALOHR = 38694\nVENDOR_ID_JOEHL_KOEFERLI_AG = 38695\nVENDOR_ID_HACKING_NETWORKED_SOLUTIONS_LTD = 38696\nVENDOR_ID_DSM_INC = 38697\nVENDOR_ID_ONEBOX_TICKET_MANAGEMENT = 38698\nVENDOR_ID_PULSAR_CONSULTING_SA = 38699\nVENDOR_ID_SERGEY_KOZLOV = 38700\nVENDOR_ID_ECBIZNET_INC = 38701\nVENDOR_ID_TALISMAN_ENERGY_INC = 38702\nVENDOR_ID_ADVANCIA_CORPORATION = 38703\nVENDOR_ID_NVEST_INC = 38704\nVENDOR_ID_AMPLIDATA = 38705\nVENDOR_ID_MACEGHOST = 38706\nVENDOR_ID_ZODIAC_DATA_SYSTEMS = 38707\nVENDOR_ID_SHENZHEN_CTI_TECHNOLOGY_CO_LTD = 38708\nVENDOR_ID_EDISON_GLOBAL_CIRCUITS_LLC = 38709\nVENDOR_ID_IAN_KRISTIN = 38710\nVENDOR_ID_DOLBY_MEDICAL_HOME_RESPIRATORY_CARE_LTD = 38711\nVENDOR_ID_ST_JOSEPHS_HEALTHCARE_SYSTEM_INC = 38712\nVENDOR_ID_NATIONAL_ASSOCIATION_OF_REALTORS = 38713\nVENDOR_ID_RLH_INDUSTRIESINC = 38714\nVENDOR_ID_JLLIN_AGRICULTURAL_UNIVERSITY = 38715\nVENDOR_ID_ORBOTECH = 38716\nVENDOR_ID_INSIEL_INFORMATICA_PER_IL_SISTEMA_DEGLI_ENTI_LOCALI_SPA = 38717\nVENDOR_ID_ZOBELE_INSTRUMENT_SHENZHEN_CO_LTD = 38718\nVENDOR_ID_NEXTGEN_INNOVATION_LABS_LLC = 38719\nVENDOR_ID_ENTLIBRE = 38720\nVENDOR_ID_HEXAGLOBE = 38721\nVENDOR_ID_CONSEIL_GNRAL_DU_CALVADOS = 38722\nVENDOR_ID_JUSMECOM = 38723\nVENDOR_ID_3ISYS = 38724\nVENDOR_ID_FLORIAN_WAGNER = 38725\nVENDOR_ID_BJOERNSKOU = 38726\nVENDOR_ID_BANAN_SRO = 38727\nVENDOR_ID_KIEZNET = 38728\nVENDOR_ID_GCCA_INC = 38729\nVENDOR_ID_RADIOACCESS = 38730\nVENDOR_ID_WISCADA_SRL = 38731\nVENDOR_ID_SACHSEN_DV_GMBH = 38732\nVENDOR_ID_VOICERITE_INC = 38733\nVENDOR_ID_PADILHA_COM = 38734\nVENDOR_ID_WEB_SECURE_VAULT_INC = 38735\nVENDOR_ID_PROMISE_REGIONAL_MEDICAL_CENTER_HUTCHINSON = 38736\nVENDOR_ID_MYOWNFILE_BV = 38737\nVENDOR_ID_NL_TECHNOLOGIES = 38738\nVENDOR_ID_NEBRAS_TECHNOLOGY = 38739\nVENDOR_ID_ATTENTEC_AB = 38740\nVENDOR_ID_MOBILE_FROSTING = 38741\nVENDOR_ID_LES_CRATIONS_SNOWFLAKES = 38742\nVENDOR_ID_GRUDEN = 38743\nVENDOR_ID_TWOOTTON = 38744\nVENDOR_ID_UNO_SYSTEM = 38745\nVENDOR_ID_INCELIS = 38746\nVENDOR_ID_SHENZHEN_SUPLET_CO_LTD = 38747\nVENDOR_ID_2H_ENERGY = 38748\nVENDOR_ID_GNU_GENERATION = 38749\nVENDOR_ID_NEOLOGIC_SP_Z_OO = 38750\nVENDOR_ID_MARKETWIRE = 38751\nVENDOR_ID_NEW_JERSEY_MANUFACTURERS_INSURANCE_COMPANY = 38752\nVENDOR_ID_TECNOMEDSA = 38753\nVENDOR_ID_JINON_CORPORATION = 38754\nVENDOR_ID_ESKOMORAVSK_INFORMAN_SYSTMY_SRO = 38755\nVENDOR_ID_TNG_TECHNOLOGY_CONSULTING = 38756\nVENDOR_ID_SIGTEC_PTY_LTD = 38757\nVENDOR_ID_GRANDCAPITAL_LTD = 38758\nVENDOR_ID_KATHOLIEKE_HOGESCHOOL_LIMBURG = 38759\nVENDOR_ID_VESELBAS_EKONOMIKAS_CENTRS_FORMERLY_ABC_SOFTWARE_LTD = 38760\nVENDOR_ID_OSNODE = 38761\nVENDOR_ID_DEUTSCHE_RENTENVERSICHERUNG_BUND = 38762\nVENDOR_ID_CENHARE_AG = 38763\nVENDOR_ID_BOSCAD = 38764\nVENDOR_ID_IMIRHILFR = 38765\nVENDOR_ID_GOSLOTO_LTD = 38766\nVENDOR_ID_MARTIN_DIENER = 38767\nVENDOR_ID_STREAMBASE_SYSTEMS_INC = 38768\nVENDOR_ID_HOLY_REDEEMER_HOSPITAL_AND_MEDICAL_CENTER = 38769\nVENDOR_ID_AGGREGATUM = 38770\nVENDOR_ID_INTERNET_INTEGRATION_INC = 38771\nVENDOR_ID_MAGEIAORG = 38772\nVENDOR_ID_VISIONUTVECKLING_AB = 38773\nVENDOR_ID_CONET_SOLUTIONS_GMBH = 38774\nVENDOR_ID_STREAM_LABS = 38775\nVENDOR_ID_TELARIX = 38776\nVENDOR_ID_NOU_DPO_UMC_YARB = 38777\nVENDOR_ID_JEDA_NETWORKS = 38778\nVENDOR_ID_NOGGIN_IT = 38779\nVENDOR_ID_GAERTNER = 38780\nVENDOR_ID_TRAINLINE = 38781\nVENDOR_ID_TAGHOS_TECNOLOGIA = 38782\nVENDOR_ID_TERACOM_LTD = 38783\nVENDOR_ID_SYSTEMS_INTEGRATION_SPECIALISTS_COMPANY_INC = 38784\nVENDOR_ID_DIRDAL_IT = 38785\nVENDOR_ID_EMIRATES_INTEGRATED_TELECOMMUNICATIONS_COMPANY_PJSC = 38786\nVENDOR_ID_NANJING_TUNEC_SCIENCE_TECHNOLOGY_CO_LTD = 38787\nVENDOR_ID_OASIS_TELECOMMUNICATION_TECHNOLOGIES = 38788\nVENDOR_ID_NATIONAL_TELECONSULTANTS_LLC = 38789\nVENDOR_ID_EUROBANK_EFG_BULGARIA_AD = 38790\nVENDOR_ID_ATOS_IT_SOLUTIONS_AND_SERVICES_AG = 38791\nVENDOR_ID_OPERATOR_LOGISTYCZNY_PALIW_PYNNYCH_SP_Z_OO = 38792\nVENDOR_ID_UNIVERSIDADE_FEDERAL_RURAL_DO_RIO_DE_JANEIRO = 38793\nVENDOR_ID_UQODE = 38794\nVENDOR_ID_ASSOCIATION_MENSA_FRANCE = 38795\nVENDOR_ID_TAKASHI_KOMATSUBARA = 38796\nVENDOR_ID_ATLANTIS_COMPUTING_INC = 38797\nVENDOR_ID_COMPULINK = 38798\nVENDOR_ID_DREAM_PROPERTY_GMBH = 38799\nVENDOR_ID_ECKER_PARTNER = 38800\nVENDOR_ID_PYTHIA_TECHNOLOGIES = 38801\nVENDOR_ID_CLOUDWARE_CO = 38802\nVENDOR_ID_WOORI_NET_INC = 38803\nVENDOR_ID_SEVEN_PRINCIPLES_AG = 38804\nVENDOR_ID_ENVERS_AG = 38805\nVENDOR_ID_VICTOR_TECHNOLOGIES = 38806\nVENDOR_ID_LANKA_EDUCATION_AND_RESEARCH_NETWORK = 38807\nVENDOR_ID_UNIVERSITY_OF_MIYAZAKI = 38808\nVENDOR_ID_4FINANCE = 38809\nVENDOR_ID_ANHUI_ASKY_QUANTUM_TECHNOLOGY_COLTD = 38810\nVENDOR_ID_MINISTRY_OF_INFORMATION = 38811\nVENDOR_ID_CENTERM_INFORMATION_COMPANY = 38812\nVENDOR_ID_COMPUTER_SYSTEMS_CONSULTING_SRO = 38813\nVENDOR_ID_IFMOD_GMBH_CO_KG = 38814\nVENDOR_ID_ETHERPOWER_SRL = 38815\nVENDOR_ID_PARTNERPEDIA_SOLUTIONS_INC = 38816\nVENDOR_ID_UNIVERSITY_OF_WESTERN_GREECE = 38817\nVENDOR_ID_AMERICAN_NATIONAL_INSURANCE = 38818\nVENDOR_ID_VCE_COMPANY_LLC = 38819\nVENDOR_ID_INSIDE_LACROSSE = 38820\nVENDOR_ID_THIRDWAVE_BV = 38821\nVENDOR_ID_SPORT_VOSWINKEL_GMBH_CO_KG = 38822\nVENDOR_ID_GRANDVISION = 38823\nVENDOR_ID_LYNX_SPOL_S_RO = 38824\nVENDOR_ID_HUNTSMAN_INTERNATIONAL_LLC = 38825\nVENDOR_ID_LIBERTY_LIFE = 38826\nVENDOR_ID_ORIENTSCIENCE = 38827\nVENDOR_ID_ALLDIGITAL_INC = 38828\nVENDOR_ID_SJFARTSVERKET = 38829\nVENDOR_ID_SEPIALINE_INC = 38830\nVENDOR_ID_FDRATION_NATIONALE_DES_TIERS_DE_CONFIANCE = 38831\nVENDOR_ID_CLEARFIELD_HOSPITAL = 38832\nVENDOR_ID_TRANSPOREON_GMBH = 38833\nVENDOR_ID_ORAD_HI_TEC_SYSTEMS_LTD = 38834\nVENDOR_ID_YOTA = 38835\nVENDOR_ID_WESTERN_OREGON_UNIVERSITY = 38836\nVENDOR_ID_FIRST_INTERSTATE_BANK = 38837\nVENDOR_ID_ANGSTREM_TELECOM_JSC = 38838\nVENDOR_ID_NPHASE_LLC = 38839\nVENDOR_ID_VISUAL_CLICK_SOFTWARE_INC = 38840\nVENDOR_ID_XCEL_SOLUTIONS_CORP = 38841\nVENDOR_ID_ECM_INC = 38842\nVENDOR_ID_KINOTON_GMBH = 38843\nVENDOR_ID_ASTEC_IT_SOLUTIONS_LTD = 38844\nVENDOR_ID_DZ_BANK_AG = 38845\nVENDOR_ID_BONG_UK_LTD = 38846\nVENDOR_ID_PRELERT = 38847\nVENDOR_ID_SUSQUEHANNA_HEALTH = 38848\nVENDOR_ID_INTWINE_ENERGY = 38849\nVENDOR_ID_GLOBAL_MUNNEXTECH_SA_DE_CV = 38850\nVENDOR_ID_IZMIR_INSTITUTE_OF_HIGH_TECHNOLOGY = 38851\nVENDOR_ID_XCOM_AG = 38852\nVENDOR_ID_RIA_NOVOSTI_FORMERLY_FEDERAL_STATE_UNITARY_ENTERPRISE_RUSSIAN_INFORMATION_AGENCY_NEWS = 38853\nVENDOR_ID_NCURITY = 38854\nVENDOR_ID_NAGOYA_INSTITUTE_OF_TECHNOLOGY = 38855\nVENDOR_ID_LOGIN_PEOPLE = 38856\nVENDOR_ID_VASONA_NETWORKS = 38857\nVENDOR_ID_GENERAL_MICRO_SYSTEMS_INC = 38858\nVENDOR_ID_AGILE_COMMUNICATIONS_INC = 38859\nVENDOR_ID_COMADOTNET = 38860\nVENDOR_ID_RUDY_GEVAERT = 38861\nVENDOR_ID_ERSTIKALENDERINFO = 38862\nVENDOR_ID_SICHUAN_ANDI_INDUSTRY_COLTD = 38863\nVENDOR_ID_VIRGIN_HOLIDAYS_LTD = 38864\nVENDOR_ID_SQUADRA_TECHNOLOGIES = 38865\nVENDOR_ID_TRIMET_ALUMINIUM_SE_FORMERLY_TRIMET_ALUMINIUM_AG = 38866\nVENDOR_ID_MECODIA_GMBH = 38867\nVENDOR_ID_COMISION_NACIONAL_DE_BANCOS_Y_SEGUROS = 38868\nVENDOR_ID_ALEXEY_S_KHROMOV = 38869\nVENDOR_ID_MANDIANT = 38870\nVENDOR_ID_VOSTOKCEMENT_LTD = 38871\nVENDOR_ID_JSC_PROMPRIBOR = 38872\nVENDOR_ID_ALEX_BOLGOV = 38873\nVENDOR_ID_ENABIL_SOLUTIONS_LTD = 38874\nVENDOR_ID_UNIFIEDPOST_SA = 38875\nVENDOR_ID_MORK = 38876\nVENDOR_ID_BPM_ADVANCED_TECHNOLOGY_COMPANY = 38877\nVENDOR_ID_SDI_SPA = 38878\nVENDOR_ID_TRADEBRIDGE_PTY_LTD = 38879\nVENDOR_ID_MICROAUTOMATION = 38880\nVENDOR_ID_ABELIUM_DOO = 38881\nVENDOR_ID_BARRON_MCCANN_TECHNOLOGY = 38882\nVENDOR_ID_PHENOMIC_BUSINESS_SYSTEMS_LTD = 38883\nVENDOR_ID_ELECTROLUX = 38884\nVENDOR_ID_NPULSE_TECHNOLOGIES_INC = 38885\nVENDOR_ID_SOCIETE_DEXPLOITATION_DE_RESEAUX_ET_DE_SERVICES_SECURISES_SER2S = 38886\nVENDOR_ID_VIS_VEREIN_DER_INFORMATIK_STUDIERENDEN = 38887\nVENDOR_ID_C3PB_EV = 38888\nVENDOR_ID_OKUEJINA = 38889\nVENDOR_ID_BLUE_SHIELD_OF_CALIFORNIA = 38890\nVENDOR_ID_JIMMA_UNIVERSITY = 38891\nVENDOR_ID_AXIOVISTA_SA = 38892\nVENDOR_ID_MARC_LUEHR = 38893\nVENDOR_ID_GROB_WERKE_GMBH_CO_KG = 38894\nVENDOR_ID_SIG21_LABS = 38895\nVENDOR_ID_FINDAWAY_WORLD = 38896\nVENDOR_ID_SAFEGATE_INTERNATIONAL_AB = 38897\nVENDOR_ID_LA_FRANCE_DU_NORD_AU_SUD = 38898\nVENDOR_ID_NATIONAL_INSTITUTE_OF_WEATHER_AND_ATMOSPHERIC_RESEARCH = 38899\nVENDOR_ID_FUKUOKA_UNIVERSITY = 38900\nVENDOR_ID_LANDSVIRKJUN = 38901\nVENDOR_ID_NOVATEL_INC = 38902\nVENDOR_ID_MALIN_SPACE_SCIENCE_SYSTEMS = 38903\nVENDOR_ID_SCHOOL_SPECIALTY_INC = 38904\nVENDOR_ID_TIMANETWORKS_INC = 38905\nVENDOR_ID_GOETHE_UNIVERSITAET_FRANKFURT_AM_MAIN = 38906\nVENDOR_ID_ZUMBOX_INC = 38907\nVENDOR_ID_AON_CORPORATION = 38908\nVENDOR_ID_LINGUISTIC_DATA_CONSORTIUM = 38909\nVENDOR_ID_XICOY_ELECTRONICA_SL = 38910\nVENDOR_ID_MCLEOD_HEALTH = 38911\nVENDOR_ID_PSYCH0TIKNET = 38912\nVENDOR_ID_QXTN_PTY_LTD = 38913\nVENDOR_ID_JNT_SOUND_SYSTEM_AB = 38914\nVENDOR_ID_AVONO_AG = 38915\nVENDOR_ID_SHANGHAI_EKINGSTAR_DIGITAL_CAMPUS_COLTD = 38916\nVENDOR_ID_GUANGXI_XINHAI_COMMUNICATION_TECHNOLOGY_COLTD = 38917\nVENDOR_ID_DEK_TECHNOLOGIES_PTY_LTD = 38918\nVENDOR_ID_EPRONA_AS = 38919\nVENDOR_ID_SNAPTV_AS = 38920\nVENDOR_ID_CAPETTI_ELETTRONICA_SRL = 38921\nVENDOR_ID_HYPOTECNI_BANKA_AS = 38922\nVENDOR_ID_IPROFS = 38923\nVENDOR_ID_DAMAREL_SYSTEMS_INTERNATIONAL_LTD = 38924\nVENDOR_ID_PROCENTEC = 38925\nVENDOR_ID_INNOVACTION_SRL = 38926\nVENDOR_ID_VERSILE_AS = 38927\nVENDOR_ID_POWEL_ENERGY_MANAGEMENT_AB = 38928\nVENDOR_ID_FUGRO_GEOS_LTD = 38929\nVENDOR_ID_PLANET_LTD = 38930\nVENDOR_ID_CHAZ6 = 38931\nVENDOR_ID_INSTART_INC = 38932\nVENDOR_ID_UBILOGIX_INTERNATIONAL_INC = 38933\nVENDOR_ID_35XDE = 38934\nVENDOR_ID_MPM_SAS = 38935\nVENDOR_ID_ENRICO_RIVAROLA = 38936\nVENDOR_ID_RESMED_SAS = 38937\nVENDOR_ID_ISACO_GMBH = 38938\nVENDOR_ID_FLEXERA_SOFTWARE_LLC = 38939\nVENDOR_ID_THALES_COMMUNICATIONS_AND_SECURITY = 38940\nVENDOR_ID_D_E_SHAW_CO_LP = 38941\nVENDOR_ID_COCA_COLA_ENTERPRISES_INC = 38942\nVENDOR_ID_EDGAR_KITTNER_GMBH_COKG = 38943\nVENDOR_ID_KAMSTRUP_A_S = 38944\nVENDOR_ID_NASA_CENTER_FOR_CLIMATE_SIMULATION_NCCS = 38945\nVENDOR_ID_RAJA_CONSULTING_LTD = 38946\nVENDOR_ID_IREQ_INSTITUT_DE_RECHERCHE_DHYDRO_QUEBEC = 38947\nVENDOR_ID_SUREID_INC_FORMERLY_EID_PASSPORT_INC = 38948\nVENDOR_ID_BALLARD_TECHNOLOGY_INC = 38949\nVENDOR_ID_MARS_SPACE_FLIGHT_FACILITY = 38950\nVENDOR_ID_BEIJING_ZIGVINE_TECH_CO_LTD = 38951\nVENDOR_ID_FEROX_COMMUNICATIONS_SL = 38952\nVENDOR_ID_COVERAGETOOLS = 38953\nVENDOR_ID_INFORMATIO_GMBH = 38954\nVENDOR_ID_WIRE_AND_WIRELESS_CO_LTD = 38955\nVENDOR_ID_HOERBIGER_DEUTSCHLAND_HOLDING_GMBH = 38956\nVENDOR_ID_SWISS_ARTG = 38957\nVENDOR_ID_DYNAMIC_TECHNOLOGIESASIA_LTD = 38958\nVENDOR_ID_K_M_MEDICALS = 38959\nVENDOR_ID_E_VAL_TECNOLOGIA_EM_INFORMTICA_LTD = 38960\nVENDOR_ID_AW_NETWORKS = 38961\nVENDOR_ID_OLEKSANDR_MOSKALETS = 38962\nVENDOR_ID_WOODWING_SOFTWARE = 38963\nVENDOR_ID_CORAL_SEA_ENTERPRISES_LLC = 38964\nVENDOR_ID_TELEPRO_INC = 38965\nVENDOR_ID_STRYKER = 38966\nVENDOR_ID_RESAL_SPOL_S_RO = 38967\nVENDOR_ID_TELINO = 38968\nVENDOR_ID_INTELLIPOWER_INC = 38969\nVENDOR_ID_VILPRA_UAB = 38970\nVENDOR_ID_GUACAMOLE_PROJECT = 38971\nVENDOR_ID_COORDINATE_SYSTEM_TRANSPORT_TECH_COLTD = 38972\nVENDOR_ID_K_BLUE = 38973\nVENDOR_ID_ENDA_GMBH_CO_KG = 38974\nVENDOR_ID_PRODUCTION_RESOURCE_GROUP_LLC = 38975\nVENDOR_ID_QUORTUS_LTD = 38976\nVENDOR_ID_IMAYHEM_SLL = 38977\nVENDOR_ID_ADRIATIC_SOLUTIONS_CORP = 38978\nVENDOR_ID_SII_LILLE = 38979\nVENDOR_ID_AGH_UNIVERSITY_OF_SCIENCE_AND_TECHNOLOGY = 38980\nVENDOR_ID_STRADUS = 38981\nVENDOR_ID_ADVANCED_TELECOMMUNICATIONS_TECHNOLOGY_RESEARCH_SP_Z_OO = 38982\nVENDOR_ID_COMPUROOT = 38983\nVENDOR_ID_CAMPUSIT = 38984\nVENDOR_ID_ECM2 = 38985\nVENDOR_ID_SOCAR_GEORGIA = 38986\nVENDOR_ID_NETTBUSS_AS = 38987\nVENDOR_ID_MINISTRY_OF_AWQAF_AND_ISLAMIC_AFFAIRS_KUWAIT = 38988\nVENDOR_ID_QTREE_BVBA = 38989\nVENDOR_ID_NOVA_WORLD_INTERNATIONAL_LLC_DBA_NOVA_SHIPPING = 38990\nVENDOR_ID_INNOFORMA_E_LEARNING_TECHNOLOGIES = 38991\nVENDOR_ID_SCCT_WILHELM_WIMMREUTER = 38992\nVENDOR_ID_SOUTH_JERSEY_HEALTHCARE = 38993\nVENDOR_ID_SAN_JUAN_SOFTWARE = 38994\nVENDOR_ID_CONNEXON_TELECOM_INC = 38995\nVENDOR_ID_JAPAN_AEROSPACE_EXPLORATION_AGENCY = 38996\nVENDOR_ID_TELNETWARE_COLTD = 38997\nVENDOR_ID_I20 = 38998\nVENDOR_ID_HIGHER_LIGHT_COMMUNICATIONS = 38999\nVENDOR_ID_LINUXMCE = 39000\nVENDOR_ID_NETFLOW_LOGIC = 39001\nVENDOR_ID_CIBEX_GMBH = 39002\nVENDOR_ID_SUB10_SYSTEMS_LTD = 39003\nVENDOR_ID_DIAPHANOSCOPE = 39004\nVENDOR_ID_TOTAL_DEVICE = 39005\nVENDOR_ID_VZTECH_IMPORTACAO_EXPORTACAO_E_DESENVOLVIMENTO_DE_TECNOLOGIA_LTDA = 39006\nVENDOR_ID_ARMADA_NACIONAL_URUGUAY = 39007\nVENDOR_ID_NOUVELLE_SRL = 39008\nVENDOR_ID_HUB_TELECOM = 39009\nVENDOR_ID_GRUPAA_SP_Z_OO = 39010\nVENDOR_ID_FRESCO_LOGIC_INC = 39011\nVENDOR_ID_INNOBAND_TECHNOLOGIES_INC = 39012\nVENDOR_ID_ASSURITY_TRUSTED_SOLUTIONS_PTE_LTD = 39013\nVENDOR_ID_COLINA_PARTICIPATIONS = 39014\nVENDOR_ID_MAXXING_SASU = 39015\nVENDOR_ID_FIELD_ELECTRONICS_LIMITED = 39016\nVENDOR_ID_OBJECT_TRADING_PTY_LTD = 39017\nVENDOR_ID_DYNA_HEALTHCARE_CO_LTD = 39018\nVENDOR_ID_TECHINFOCOM_JSC = 39019\nVENDOR_ID_NET_TO_NET_CO_LTD = 39020\nVENDOR_ID_PDV_SYSTEME_SACHSEN_GMBH = 39021\nVENDOR_ID_JOINT_STOCK_COMPANY_SVYAZNOY_BANK = 39022\nVENDOR_ID_MURTAZA_ENTERPRIZES = 39023\nVENDOR_ID_BJANGO = 39024\nVENDOR_ID_VELLEROS_INC = 39025\nVENDOR_ID_TRITUX = 39026\nVENDOR_ID_WWWDUOWANCOM = 39027\nVENDOR_ID_ENKATA = 39028\nVENDOR_ID_LUKSE = 39029\nVENDOR_ID_CLOUDGUARD_SOFTWARE_AG_FORMERLY_WLAN_PARTNERCOM_AG = 39030\nVENDOR_ID_EASTERN_MENNONITE_UNIVERSITY = 39031\nVENDOR_ID_CALDWELL_MEMORIAL_HOSPITAL_INC = 39032\nVENDOR_ID_QUINSTAR_TECHNOLOGY_INC = 39033\nVENDOR_ID_NESFILEORG = 39034\nVENDOR_ID_ORBITAL_SYSTEMS_LTD = 39035\nVENDOR_ID_IMOBILE3_LLC = 39036\nVENDOR_ID_INOCYBE_TECHNOLOGIES_INC = 39037\nVENDOR_ID_COMPNET_LTD = 39038\nVENDOR_ID_DANIELS_ELECTRONICS_LTD = 39039\nVENDOR_ID_DIGITALARTS_INC = 39040\nVENDOR_ID_ENTHINA = 39041\nVENDOR_ID_E_ID_INTERNET_STRATEGIES_BV = 39042\nVENDOR_ID_EBRO_ARMATUREN_GMBH = 39043\nVENDOR_ID_IDEFCLUBRU = 39044\nVENDOR_ID_CUBIO_COMMUNICATIONS_OY = 39045\nVENDOR_ID_JIMDO_GMBH = 39046\nVENDOR_ID_THE_FOUNDRY = 39047\nVENDOR_ID_SAYRE_MEMORIAL_HOSPITAL = 39048\nVENDOR_ID_BYTE_SIA = 39049\nVENDOR_ID_FORSCHUNGSGEMEINSCHAFT_ELEKTRONISCHE_MEDIEN_FEM_EV = 39050\nVENDOR_ID_G360APPSCOM = 39051\nVENDOR_ID_VUTLAN_SRO_FORMERLY_SKY_CONTROL_SRO = 39052\nVENDOR_ID_RAIL_SEA = 39053\nVENDOR_ID_NETUP_INC = 39054\nVENDOR_ID_S2_COMMUNICATIONS_AB = 39055\nVENDOR_ID_SAMSUNG_ELECTRONICS_AMERICA_INC = 39056\nVENDOR_ID_SCAE_CO_LTD = 39057\nVENDOR_ID_CET_ELECTRONICS = 39058\nVENDOR_ID_RTE = 39059\nVENDOR_ID_SUSTERNET = 39060\nVENDOR_ID_ANALYTICA = 39061\nVENDOR_ID_MARK_HARLOS_SOFTWARE_ENGINEERING_CONSULTANT = 39062\nVENDOR_ID_DELECON = 39063\nVENDOR_ID_ESEYE_LTD = 39064\nVENDOR_ID_AFRICAN_INSTITUTE_FOR_MATHEMATICAL_SCIENCES = 39065\nVENDOR_ID_FTS_DVL_SRL = 39066\nVENDOR_ID_VERBA_TECHNOLOGIES = 39067\nVENDOR_ID_HOSTAPD_WPA_SUPPLICANT_PROJECT = 39068\nVENDOR_ID_JAPAN_BALLAST_CO = 39069\nVENDOR_ID_STARK = 39070\nVENDOR_ID_KONKURENT_LTD = 39071\nVENDOR_ID_CAMPAI_BUSINESS_SOLUTIONS_BV = 39072\nVENDOR_ID_BLUE_MIND = 39073\nVENDOR_ID_MAKABRA = 39074\nVENDOR_ID_HEALTHE_ADVOCATE_LLP = 39075\nVENDOR_ID_ZALASZAM_KFT = 39076\nVENDOR_ID_DORLET_SA = 39077\nVENDOR_ID_VIMPEX_GMBH = 39078\nVENDOR_ID_ADVAICT_AS = 39079\nVENDOR_ID_ITRS_GROUP_LIMITED = 39080\nVENDOR_ID_ASACA_CORPORATION = 39081\nVENDOR_ID_PHOENIXNAP = 39082\nVENDOR_ID_SAMODZIELNY_PUBLICZNY_CENTRALNY_SZPITAL_KLINICZNY = 39083\nVENDOR_ID_TEXAS_AM_UNIVERSITY_KINGSVILLE = 39084\nVENDOR_ID_MUJIN_INC = 39085\nVENDOR_ID_FRIENDFINDER_NETWORKS_INC = 39086\nVENDOR_ID_ASTRA_COMMUNICATION_SERVICE_CO_LTD = 39087\nVENDOR_ID_HOCHSCHULE_DEGGENDORF = 39088\nVENDOR_ID_KRONES_AG = 39089\nVENDOR_ID_SUBREPORT_VERLAG_SCHAWE_GMBH = 39090\nVENDOR_ID_GOOD_LINK = 39091\nVENDOR_ID_CHONGQING_CABLE_NETWORK = 39092\nVENDOR_ID_BASLER_AG = 39093\nVENDOR_ID_KAMBI = 39094\nVENDOR_ID_IFLEX_LTD = 39095\nVENDOR_ID_LOHIKA_LTD = 39096\nVENDOR_ID_MAXELER_TECHNOLOGIES_LTD = 39097\nVENDOR_ID_KYANMEDIA_LIMITED = 39098\nVENDOR_ID_RSA_SAAS = 39099\nVENDOR_ID_THE_BINARY_WORKSHOP = 39100\nVENDOR_ID_FRISBIE_MEMORIAL_HOSPITAL = 39101\nVENDOR_ID_POWER_HOME_REMODELING_GROUP_INC = 39102\nVENDOR_ID_LS_TELCOM_AG = 39103\nVENDOR_ID_UNIVERSIDAD_CENTRAL_DE_LAS_VILLAS = 39104\nVENDOR_ID_TECHNET_SYSTEMS = 39105\nVENDOR_ID_EXPATJOBNET_GROUP = 39106\nVENDOR_ID_ULHI_URRUTIKO_LANBIDE_HEZIKETA_INSTITUTUA = 39107\nVENDOR_ID_TRUSTEER_LTD = 39108\nVENDOR_ID_MORPHO_DETECTION_INC = 39109\nVENDOR_ID_STATE_OF_COLORADO_JUDICIAL_DEPARTMENT = 39110\nVENDOR_ID_ELADIAN_PARTNERS_LLC = 39111\nVENDOR_ID_NETSOC_DIT = 39112\nVENDOR_ID_IRT_TECHNOLOGIES_INC = 39113\nVENDOR_ID_ITTXA = 39114\nVENDOR_ID_XACKINC = 39115\nVENDOR_ID_FOLKWANG_UNIVERSITT_DER_KNSTE = 39116\nVENDOR_ID_NOAX_TECHNOLOGIES_AG = 39117\nVENDOR_ID_AMADEUS_SAS = 39118\nVENDOR_ID_DM_DROGERIE_MARKT_GMBH_CO_KG = 39119\nVENDOR_ID_ITUNIC_CONSULTING = 39120\nVENDOR_ID_ELRINGKLINGER_AG = 39121\nVENDOR_ID_FRAMEHAWK_INC = 39122\nVENDOR_ID_TWO_DEGREES_MOBILE_LTD = 39123\nVENDOR_ID_KAWEAH_DELTA_HEALTH_CARE_DISTRICT = 39124\nVENDOR_ID_INSTITUTO_SUPERIOR_DE_ENGENHARIA_DO_PORTO_ISEP = 39125\nVENDOR_ID_DCA_INC = 39126\nVENDOR_ID_MERCURY_INSURANCE_GROUP = 39127\nVENDOR_ID_ALLIANZ_LIFE_INSURANCE_OF_NORTH_AMERICA = 39128\nVENDOR_ID_REIKNISTOFA_I_VEDURFRAEDI = 39129\nVENDOR_ID_CENTURY_SOFTWARE_M_SDN_BHD = 39130\nVENDOR_ID_SISTEMAS_INFORMATICOS_ABIERTOS_SA = 39131\nVENDOR_ID_CAMAIR_CO = 39132\nVENDOR_ID_KAMSOFT_SA = 39133\nVENDOR_ID_APEX = 39134\nVENDOR_ID_US_BANCORP = 39135\nVENDOR_ID_ADAMS_STATE_COLLEGE = 39136\nVENDOR_ID_AMERIA_GMBH = 39137\nVENDOR_ID_SANTA_BARBARA_COUNTY_EDUCATION_OFFICE = 39138\nVENDOR_ID_NPARIO_INC = 39139\nVENDOR_ID_INTERRA_SYSTEMS_INC = 39140\nVENDOR_ID_QICE_TECHNOLOGY_CO_LTD = 39141\nVENDOR_ID_NIAN_ELECTRONIC_COMPANY = 39142\nVENDOR_ID_LARS = 39143\nVENDOR_ID_NEXTOUCH_INC = 39144\nVENDOR_ID_INNOVATIVE_CIRCUIT_TECHNOLOGY_LTD = 39145\nVENDOR_ID_WATCHDOG_SOFTWARE_PTY_LIMITED = 39146\nVENDOR_ID_INTRATOP = 39147\nVENDOR_ID_AGJENCIA_KOMBETARE_E_SHOQERISE_SE_INFORMACIONIT = 39148\nVENDOR_ID_BROADANGLE_LLC = 39149\nVENDOR_ID_BOS_SOFTWARE_SERVICE_UND_VERTRIEB_GMBH = 39150\nVENDOR_ID_AUTORIT_DES_MARCHS_FINANCIERS = 39151\nVENDOR_ID_DVT_DATEN_VERARBEITUNG_TIROL_GMBH = 39152\nVENDOR_ID_WAYF_WHERE_ARE_YOU_FROM = 39153\nVENDOR_ID_SWIFTSTACK = 39154\nVENDOR_ID_MANGO_DSP_INC = 39155\nVENDOR_ID_PROSCOPE_CORPORATION = 39156\nVENDOR_ID_DERMALOG_IDENTIFICATION_SYSTEMS_GMBH = 39157\nVENDOR_ID_AKOUTO = 39158\nVENDOR_ID_REDPOINT_SOFTWARE = 39159\nVENDOR_ID_POINTRED_TELECOM_LTD = 39160\nVENDOR_ID_PRECISION_INFOMATIC = 39161\nVENDOR_ID_WEOLO = 39162\nVENDOR_ID_U_BTECH_SOLUTIONS = 39163\nVENDOR_ID_CIRES21_SL = 39164\nVENDOR_ID_HIKVISION_DIGITAL_TECHNOLOGY_CO_LTD = 39165\nVENDOR_ID_STADT_MOENCHENGLADBACH = 39166\nVENDOR_ID_KASTELNET = 39167\nVENDOR_ID_ENEATEC_GMBH = 39168\nVENDOR_ID_SOFTRONICS_AG = 39169\nVENDOR_ID_KOARIO = 39170\nVENDOR_ID_ALIPAY = 39171\nVENDOR_ID_PAYTRONIX_SYSTEMS_INC = 39172\nVENDOR_ID_DATEK_WIRELESS_AS = 39173\nVENDOR_ID_CLUB_MDITERRANNE_SA = 39174\nVENDOR_ID_GOEAST_GMBH = 39175\nVENDOR_ID_MITEK_INC = 39176\nVENDOR_ID_LEUPHANA_UNIVERSITY_OF_LUENEBURG = 39177\nVENDOR_ID_THE_IMS_COMPANY = 39178\nVENDOR_ID_ACCUOSS = 39179\nVENDOR_ID_MTICUBE_LLC = 39180\nVENDOR_ID_INTERNATIONAL_DEVELOPMENT_COUNCIL_FOR_ACADEMIC_STUDIES_IDCAS = 39181\nVENDOR_ID_OJSC_GT_TEC_ENERGO = 39182\nVENDOR_ID_LAYERED_LOGIC_INC = 39183\nVENDOR_ID_XINGPLATFORM_INC = 39184\nVENDOR_ID_SYSTEM_LEVEL_SOLUTIONS_INDIA_PVT_LTD = 39185\nVENDOR_ID_MINISTRY_OF_FOREIGN_AFFAIRS_OF_HUNGARY = 39186\nVENDOR_ID_MARMARA_UNIVESITY = 39187\nVENDOR_ID_VIRTUAL_CABLE_SL = 39188\nVENDOR_ID_KING_PINE = 39189\nVENDOR_ID_SERGEY_I_MIHAILOV = 39190\nVENDOR_ID_COMFORT_CONSULTING = 39191\nVENDOR_ID_IBSMM_ENGINEERING_SPOL_S_RO = 39192\nVENDOR_ID_VAYOSOFT_NETWORK_TECHNOLOGIES_LTD = 39193\nVENDOR_ID_CSSS_IUGS_CENTRE_DE_SANTE_ET_DES_SERVICES_SOCIAUX_INSTITUT_UNIVERSITAIRE_DE_GERIATRIE_DE_SHERBROOKE = 39194\nVENDOR_ID_SPAWNGRID_INC = 39195\nVENDOR_ID_OXYNUX = 39196\nVENDOR_ID_XITEK_DESIGN_LTD = 39197\nVENDOR_ID_BREKEKE_SOFTWARE_INC = 39198\nVENDOR_ID_EXPRESSTRAK_DATS = 39199\nVENDOR_ID_KTB_COMPUTER_SERVICES_COLTD = 39200\nVENDOR_ID_REDTOO_AG = 39201\nVENDOR_ID_ASP_ALERCE_TECNOLOGY_SL = 39202\nVENDOR_ID_QUALYSOFT_INFORMATIKAI_ZRT = 39203\nVENDOR_ID_QUANTICEVENTS = 39204\nVENDOR_ID_BROADNET_TELECOM_INC = 39205\nVENDOR_ID_EITV_ENTRETENIMENTO_E_INTERATIVIDADE_PARA_TV_DIGITAL = 39206\nVENDOR_ID_SPARKYARD_INC = 39207\nVENDOR_ID_LIVINGOBJECTS = 39208\nVENDOR_ID_PLEXUS_CORP = 39209\nVENDOR_ID_IMPULSE_POINT_LLC = 39210\nVENDOR_ID_POSITRONICS_ENTERPRISE_LIMITED = 39211\nVENDOR_ID_PROSYSCOR_LTD = 39212\nVENDOR_ID_DATAKONSULT_MAGNUS_SANDBERG = 39213\nVENDOR_ID_MT2IT = 39214\nVENDOR_ID_KERNUN = 39215\nVENDOR_ID_BROADFORWARD_BV = 39216\nVENDOR_ID_TRIPLE_T_BROADBAND_PCL = 39217\nVENDOR_ID_CONNECTION_ELECTRONICS_LTD = 39218\nVENDOR_ID_OVERKIZ = 39219\nVENDOR_ID_THEOLDMONKNET = 39220\nVENDOR_ID_PAKEDGE_DEVICE_AND_SOFTWARE_INC = 39221\nVENDOR_ID_PATRICK_SHUFF_INDUSTRIES = 39222\nVENDOR_ID_ADNET_SYSTEMS_INC = 39223\nVENDOR_ID_DJIPALO_JUNUZ = 39224\nVENDOR_ID_AVRO_ELECTRICS = 39225\nVENDOR_ID_REWOO_TECHNOLOGIES_AG = 39226\nVENDOR_ID_GIE_VAUBAN_HUMANIS = 39227\nVENDOR_ID_KEMIRA_OYJ = 39228\nVENDOR_ID_CONVERGENCE_TECHNOLOGIES = 39229\nVENDOR_ID_LENICEU = 39230\nVENDOR_ID_HOSTINGCOM_INC = 39231\nVENDOR_ID_DROGENTHERAPIEZENTRUM_LAGO = 39232\nVENDOR_ID_SAINT_JOHNS_HEALTH_SYSTEM = 39233\nVENDOR_ID_MITROKO_INC = 39234\nVENDOR_ID_EXELIS_INC = 39235\nVENDOR_ID_TRIFRACTAL_STUDIOS_FORMERLY_SACRED_POINT_STUDIOS = 39236\nVENDOR_ID_FW_SYSTEME_GMBH = 39237\nVENDOR_ID_VELOCIDATA_INC = 39238\nVENDOR_ID_LITTLEJACKAL = 39239\nVENDOR_ID_ATACAMA_LARGE_MILLIMETER_SUBMILLIMETER_ARRAY = 39240\nVENDOR_ID_VOLKSZAEHLERORG = 39241\nVENDOR_ID_KRKI_IT = 39242\nVENDOR_ID_VNLI_LTD_CO = 39243\nVENDOR_ID_CHINA_NATIONAL_SOFTWARE_SERVICE_CO_LTD = 39244\nVENDOR_ID_LINKRA_NETWORKS = 39245\nVENDOR_ID_MBDA_DEUTSCHLAND_GMBH = 39246\nVENDOR_ID_MEDINT_HOLDINGS_LLC_FORMERLY_IMALOGIX = 39247\nVENDOR_ID_STEC = 39248\nVENDOR_ID_SHANGO = 39249\nVENDOR_ID_DALIAN_XINYU_TECHNOLOGY_LTD = 39250\nVENDOR_ID_NEWSUN_CO_LTD = 39251\nVENDOR_ID_RIOCARD_TECNOLOGIA_DA_INFORMACAO_S_A = 39252\nVENDOR_ID_PUNTO_COM_SRL = 39253\nVENDOR_ID_CONSECOM_AG = 39254\nVENDOR_ID_YAKAZ = 39255\nVENDOR_ID_LAORIM = 39256\nVENDOR_ID_MEDICAL_RECORDS_LLC = 39257\nVENDOR_ID_TZ_CONSULTING_UG = 39258\nVENDOR_ID_GEOFFROY_PLANQUART = 39259\nVENDOR_ID_KOELLER_FAMILY = 39260\nVENDOR_ID_PLANUNGSBRO_LEDERMANN = 39261\nVENDOR_ID_MEDIAMELON_INC = 39262\nVENDOR_ID_AKADEMISCHER_VEREIN = 39263\nVENDOR_ID_NEW_ROCK_TECHNOLOGIES_INC = 39264\nVENDOR_ID_VERSINO_GMBH = 39265\nVENDOR_ID_RUNWAY_INTERNATIONAL_O = 39266\nVENDOR_ID_ZAT_AS = 39267\nVENDOR_ID_FACHHOCHSCHULE_BRANDENBURG = 39268\nVENDOR_ID_BASE_GESTI_DINGRESSOS = 39269\nVENDOR_ID_CLUB_PSCO = 39270\nVENDOR_ID_PALISADES_MEDICAL_CENTER = 39271\nVENDOR_ID_WCR_EDV_GESMBH = 39272\nVENDOR_ID_ARC_WIRELESS_LLC = 39273\nVENDOR_ID_INNOVTIVE_IT_LTD = 39274\nVENDOR_ID_MARTELLO_TECHNOLOGIES_CORPORATION = 39275\nVENDOR_ID_INTUX = 39276\nVENDOR_ID_CAPE_REGIONAL_MEDICAL_CENTER = 39277\nVENDOR_ID_ZEXTRAS_SRL = 39278\nVENDOR_ID_WEB_DEVICES_LTD = 39279\nVENDOR_ID_ARVOO_ENGINEERING_BV = 39280\nVENDOR_ID_ST_ENCLOSURES_FOR_ELECTRONICS_SYSTEMS_LTD = 39281\nVENDOR_ID_INFINET_FINANCIAL_SYSTEMS = 39282\nVENDOR_ID_TELEWARE_PLC = 39283\nVENDOR_ID_MOUNTAIN_STATES_HEALTH_ALLIANCE = 39284\nVENDOR_ID_PRIME_ENGINEERING_LTD = 39285\nVENDOR_ID_WARGAMINGNET_LLP = 39286\nVENDOR_ID_UNIMED_LITORAL = 39287\nVENDOR_ID_FIMASYS = 39288\nVENDOR_ID_SPAUN_ELECTRONIC_GMBH_CO_KG = 39289\nVENDOR_ID_CITIBANK_NA = 39290\nVENDOR_ID_SUGARCRM_LLC = 39291\nVENDOR_ID_VICTORIAS_SECRET = 39292\nVENDOR_ID_MARS = 39293\nVENDOR_ID_RUE_LA_LA = 39294\nVENDOR_ID_YAKIMA_VALLEY_MEMORIAL_HOSPITAL = 39295\nVENDOR_ID_SALFORD_SOFTWARE_LTD = 39296\nVENDOR_ID_BEIJING_YUKUAN_TECHNOLOGY_COLTD = 39297\nVENDOR_ID_BANQUE_DU_BOIS_AG = 39298\nVENDOR_ID_MCPHERSON_HOSPITAL_INC = 39299\nVENDOR_ID_SHERWOOD_COMPLIANCE_SERVICES_LTD = 39300\nVENDOR_ID_OIKAZE = 39301\nVENDOR_ID_ESSENT_NV = 39302\nVENDOR_ID_OSPOW = 39303\nVENDOR_ID_SHINE_DATA_AB = 39304\nVENDOR_ID_WIVDO_LDA = 39305\nVENDOR_ID_INTELLIDESIGN = 39306\nVENDOR_ID_CLEALINK_TECHNOLOGY_CO_LTD = 39307\nVENDOR_ID_BLINKENLICHTEN_OPEN_SOURCE_SOLUTIONS = 39308\nVENDOR_ID_CENTRUM_PROMOCJI_I_ROZWOJU_INICJATYW_OBYWATELSKICH_OPUS = 39309\nVENDOR_ID_SNDERBORG_KOMMUNE = 39310\nVENDOR_ID_WELLSPAN = 39311\nVENDOR_ID_BROOKHAVEN_MEMORIAL_HOSPITAL = 39312\nVENDOR_ID_IFAX_SOLUTIONS_INC = 39313\nVENDOR_ID_EFACTURES_JLEM = 39314\nVENDOR_ID_XELION_BV = 39315\nVENDOR_ID_SAVTIRA = 39316\nVENDOR_ID_SYSTEMS_SOLUTIONS_DEVELOPMENT_TECHNOLOGIES_LTD = 39317\nVENDOR_ID_QUALIS_AUDIO_INC = 39318\nVENDOR_ID_MR_BROOKSCOM = 39319\nVENDOR_ID_CANADA_REVENUE_AGENCY = 39320\nVENDOR_ID_SCHOONEMANNET = 39321\nVENDOR_ID_CHAMPLAIN_VALLEY_PHYSICIANS_HOSPITAL_MEDICAL_CENTER = 39322\nVENDOR_ID_E2E4_TECHNOLOGIES = 39323\nVENDOR_ID_OS_NEXUS_INC = 39324\nVENDOR_ID_SECUAVAIL_INC = 39325\nVENDOR_ID_UNIVERSITY_OF_NEUCHATEL = 39326\nVENDOR_ID_ID_CYBER_IDENTITY_LTD = 39327\nVENDOR_ID_SEAWELL_NETWORKS = 39328\nVENDOR_ID_LESLEY_UNIVERSITY = 39329\nVENDOR_ID_DALIAN_JINGHAOFENG_TECHBOLOGY_CO_LTD = 39330\nVENDOR_ID_SURGATE_LABS = 39331\nVENDOR_ID_ZUERCHER_LEHRBETRIEBSVERBAND_ICT = 39332\nVENDOR_ID_M3_BAUPROJEKTMANAGEMENT_GMBH = 39333\nVENDOR_ID_RADMOR_SA = 39334\nVENDOR_ID_BASIS_VOLUME_LIMITED = 39335\nVENDOR_ID_KRAUS = 39336\nVENDOR_ID_ELEPHANT_BIRD_CONSULTING = 39337\nVENDOR_ID_OPERATE4ALL = 39338\nVENDOR_ID_BAGSBUG = 39339\nVENDOR_ID_KINGSBROOK_JEWISH_MEDICAL_CENTER = 39340\nVENDOR_ID_SOIFDINFO = 39341\nVENDOR_ID_CSF_SISTEMI_SRL = 39342\nVENDOR_ID_VENNETICS_LIMITED = 39343\nVENDOR_ID_NEXTNAV_LLC = 39344\nVENDOR_ID_CONCEN = 39345\nVENDOR_ID_COMMUNAUTE_DAGGLOMERATION_HERAULT_MEDITERRANEE = 39346\nVENDOR_ID_LEONUX = 39347\nVENDOR_ID_HOCHSCHULE_FR_TELEKOMMUNIKATON_LEIPZIG = 39348\nVENDOR_ID_NATIONAL_OBSERVATORY_OF_ATHENS = 39349\nVENDOR_ID_SUPERNAS = 39350\nVENDOR_ID_VOXBONE_SA = 39351\nVENDOR_ID_ADIRONDACK_COMMUNITY_COLLEGE = 39352\nVENDOR_ID_BIOGEN_IDEC = 39353\nVENDOR_ID_OCEUS_NETWORKS_INC = 39354\nVENDOR_ID_JEANES_HOSPITAL = 39355\nVENDOR_ID_SHOWA_UNIVERSITY = 39356\nVENDOR_ID_INSTITUTO_FEDERAL_DO_CEAR_IFCE = 39357\nVENDOR_ID_PROSPECT_COMPUTER_SYSTEMS_INC_PCS = 39358\nVENDOR_ID_SUPRANETCOM = 39359\nVENDOR_ID_WELOTEC_GMBH = 39360\nVENDOR_ID_FRAUDBUSTER = 39361\nVENDOR_ID_ACTIVANOS_SAS = 39362\nVENDOR_ID_WESSEL_DANKERS = 39363\nVENDOR_ID_THE_BASIS_GROUP_INC = 39364\nVENDOR_ID_KOMAR_CONSULTING_INC = 39365\nVENDOR_ID_HREFNET = 39366\nVENDOR_ID_THEODORE_PRODUCTIONS = 39367\nVENDOR_ID_AQCUA_ELECTRONICS = 39368\nVENDOR_ID_SILICON_VALLEY_MEDICAL_INSTRUMENTS = 39369\nVENDOR_ID_REELWAY_GMBH = 39370\nVENDOR_ID_DERON_CONSULTING_GMBH = 39371\nVENDOR_ID_TEO_TECHNOLOGIES_INC = 39372\nVENDOR_ID_COOLTECH_SRL = 39373\nVENDOR_ID_TDK_TECHNOLOGIES_LLC = 39374\nVENDOR_ID_XTRONIX_LTD = 39375\nVENDOR_ID_GIGALAN = 39376\nVENDOR_ID_G2B_HOLDINGS_INC = 39377\nVENDOR_ID_WAO_CORPORATION = 39378\nVENDOR_ID_LAB_M_LLC = 39379\nVENDOR_ID_FYSISCH_MATHEMATISCHE_FACULTEITSVERENIGING = 39380\nVENDOR_ID_DAGGERPOINT_TECHNOLOGIES = 39381\nVENDOR_ID_JSC_ZHASO = 39382\nVENDOR_ID_FLEX_VALLEY_SRL = 39383\nVENDOR_ID_CRYPTAS_IT_SECURITY_GMBH = 39384\nVENDOR_ID_MM_ELEKTROLAB = 39385\nVENDOR_ID_ULTRA_ELECTRONICS_ADVANCED_TACTICAL_SYSTEMS = 39386\nVENDOR_ID_ALPHA_DIRECT_SERVICES = 39387\nVENDOR_ID_ONLINE_CLASSIFIEDS_AUSTRALIA = 39388\nVENDOR_ID_BEAULATON = 39389\nVENDOR_ID_BAYCOM_TECHNOLOGY_COLTD = 39390\nVENDOR_ID_HL_INSTRUMENTS_LLC = 39391\nVENDOR_ID_JAMESKINNAIRDCA = 39392\nVENDOR_ID_GLOBAL_REACH_TECHNOLOGY_LIMITED = 39393\nVENDOR_ID_DIRECCION_GENERAL_DE_ESCUELA_NACIONAL_PREPARATORIA = 39394\nVENDOR_ID_ELDIS_PARDUBICE_SRO = 39395\nVENDOR_ID_ZYGMA_LLC = 39396\nVENDOR_ID_AMITEGO_ENGINEERING_GMBH_FORMERLY_TOOLBOX_SOLUTION_GMBH = 39397\nVENDOR_ID_HVS_CONSULTING_AG = 39398\nVENDOR_ID_GUMILYOV_EURASIAN_NATIONAL_UNIVERSITY = 39399\nVENDOR_ID_INSTITUT_FR_ANGEWANDTE_FUNKSYSTEMTECHNIK_GMBH = 39400\nVENDOR_ID_TILBURG_UNIVERSITY = 39401\nVENDOR_ID_B2F_CONCEPT = 39402\nVENDOR_ID_GEBIT_SOLUTIONS_GMBH = 39403\nVENDOR_ID_KEIREX_TECHNOLOGY_INC = 39404\nVENDOR_ID_YIELDBROKER_PTY_LIMITED = 39405\nVENDOR_ID_BENU_NETWORKS_INC = 39406\nVENDOR_ID_EXPLORYS = 39407\nVENDOR_ID_CLARK_STATE_COMMUNITY_COLLEGE = 39408\nVENDOR_ID_B3LATERAL_LTD = 39409\nVENDOR_ID_IDECO = 39410\nVENDOR_ID_ONGOING_WAREHOUSE_AB = 39411\nVENDOR_ID_ALBEDO_TELECOM_SL = 39412\nVENDOR_ID_SD_WORX_VZW = 39413\nVENDOR_ID_DOMO_INC = 39414\nVENDOR_ID_MICROSTEP_MIS_SPOL_S_RO = 39415\nVENDOR_ID_METROPOLITAN_TRANSPORTATION_AUTHORITY = 39416\nVENDOR_ID_KUKINTO = 39417\nVENDOR_ID_LIBERTY_HEALTHCARE_SYSTEM_INC = 39418\nVENDOR_ID_NETWORK_PROCESS_CONTROL_SYSTEMS_SL = 39419\nVENDOR_ID_DELTA_INFORMATION_SYSTEMS_INC = 39420\nVENDOR_ID_RISING_GODS_UG = 39421\nVENDOR_ID_JAZZHANDS_MANAGEMENT_SYSTEM = 39422\nVENDOR_ID_JOSHUA_MORGAN = 39423\nVENDOR_ID_HILLTONIC = 39424\nVENDOR_ID_VEREIN_FR_MENSCHEN_MIT_KRPER_UND_MEHRFACHBEHINDERUNG_EV = 39425\nVENDOR_ID_MEDICAL_MUTUAL_OF_OHIO = 39426\nVENDOR_ID_CYRRUS_PRODUCTS_LTD = 39427\nVENDOR_ID_HIMILCO = 39428\nVENDOR_ID_G10_TRANSPORTES_LTDA = 39429\nVENDOR_ID_OWNCLOUD_INC = 39430\nVENDOR_ID_BLT_ITALIA_SRL = 39431\nVENDOR_ID_DEVCOACH_FISHER_WILLERS_GBR = 39432\nVENDOR_ID_T8_LLC = 39433\nVENDOR_ID_ISTHMUS_SARL = 39434\nVENDOR_ID_SISTEMAS_DYPSA_SRL = 39435\nVENDOR_ID_JUST_COMMODITY_SOFTWARE_SOLUTIONS_PTE_LTD = 39436\nVENDOR_ID_SIX_QUARKS = 39437\nVENDOR_ID_CB10 = 39438\nVENDOR_ID_FACOS = 39439\nVENDOR_ID_JELETL = 39440\nVENDOR_ID_GEORGE_WATSONS_COLLEGE = 39441\nVENDOR_ID_FRED_HUTCHINSON_CANCER_RESEARCH_CENTER = 39442\nVENDOR_ID_BANCO_DE_LA_PROVINCIA_DEL_NEQUN_SA = 39443\nVENDOR_ID_CAUCASUS_ONLINE_LLC = 39444\nVENDOR_ID_ALAMEDA_COUNTY_MEDICAL_CENTER = 39445\nVENDOR_ID_RESEARCH_CONCEPTS_INC = 39446\nVENDOR_ID_CAREER_PARTNER_GMBH = 39447\nVENDOR_ID_SWISS_MIDEAST_FINANCE_GROUP_AG = 39448\nVENDOR_ID_UBI_SISTEMI_E_SERVIZI_SCPA = 39449\nVENDOR_ID_THE_LAMPO_GROUP_INC = 39450\nVENDOR_ID_ZARATHUSTRA_SOLUCOES_EM_INFORMATICA = 39451\nVENDOR_ID_ARTEMIS_INVESTMENT_MANAGEMENT_LLP = 39452\nVENDOR_ID_BEQUANT_SL = 39453\nVENDOR_ID_UNIVERSITY_OF_SCRANTON = 39454\nVENDOR_ID_RENO_AE = 39455\nVENDOR_ID_DENIS_BONDAR = 39456\nVENDOR_ID_PCSYSTEMEAT_IT_SERVICE_GMBH = 39457\nVENDOR_ID_LOBSTER_GMBH = 39458\nVENDOR_ID_STOFEY_GBR = 39459\nVENDOR_ID_CIPHERTELECOM = 39460\nVENDOR_ID_ARACHNOCYPHER_WEB_SERVICES = 39461\nVENDOR_ID_DAMOVO_BELGIUM_NV_SA = 39462\nVENDOR_ID_ADAPTIVE_NETWORKS_INC = 39463\nVENDOR_ID_SOLID_INSTANCE_INC = 39464\nVENDOR_ID_ENBALA_POWER_NETWORKS = 39465\nVENDOR_ID_NV_NEDERLANDSE_GASUNIE = 39466\nVENDOR_ID_RISC_SOFTWARE_GMBH = 39467\nVENDOR_ID_KETTERING_UNIVERSITY = 39468\nVENDOR_ID_NEOSHO_MEMORIAL_REGIONAL_MEDICAL_CENTER = 39469\nVENDOR_ID_METAEMOTION_SL = 39470\nVENDOR_ID_EL_CENTRO_REGIONAL_MEDICAL_CENTER = 39471\nVENDOR_ID_KARSTEN_EBERDING = 39472\nVENDOR_ID_TGW_LIMITED = 39473\nVENDOR_ID_KALEVA_OY = 39474\nVENDOR_ID_TUIR_WARTA_SA = 39475\nVENDOR_ID_ANTINEA_SOFTWARE = 39476\nVENDOR_ID_AMERICAN_BUREAU_OF_SHIPPING_ABS = 39477\nVENDOR_ID_ANDI_MILLER_ENGINEERING_SERVICES = 39478\nVENDOR_ID_SYSANGELS_EU = 39479\nVENDOR_ID_BC_HYDRO = 39480\nVENDOR_ID_WWPASS_CORPORATION = 39481\nVENDOR_ID_PIECEABLE_SOFTWARE_INC = 39482\nVENDOR_ID_ENEO_TECNOLOGIA_SL = 39483\nVENDOR_ID_THE_UNIVERSITY_OF_CONNECTICUT_HEALTH_CENTER = 39484\nVENDOR_ID_EUCAST_CO_LTD = 39485\nVENDOR_ID_CHONGQING_TRUNKSOFT_TECHNOLOGY_CO_LTD = 39486\nVENDOR_ID_WAVESTORE_LIMITED = 39487\nVENDOR_ID_PLEXIPI_KFT = 39488\nVENDOR_ID_EZYIELD = 39489\nVENDOR_ID_DATA_SECURITY_SYSTEMS_SOLUTIONS_PTE_LTD = 39490\nVENDOR_ID_ELEISS = 39491\nVENDOR_ID_STEVEN_DENZINGER = 39492\nVENDOR_ID_BRCKENKOPF_EV = 39493\nVENDOR_ID_COMBERG_COMPUTERSYSTEME = 39494\nVENDOR_ID_CHU_DE_CHARLEROI = 39495\nVENDOR_ID_ARCH_SYSTEMS_INC = 39496\nVENDOR_ID_EMSYS_DESIGN_INC = 39497\nVENDOR_ID_PEERPATH = 39498\nVENDOR_ID_INVEA_TECH_AS = 39499\nVENDOR_ID_SUMATRONIC_AG = 39500\nVENDOR_ID_BAYERISCHE_MEDIEN_TECHNIK_BMT_GMBH = 39501\nVENDOR_ID_AARON_WOLFE = 39502\nVENDOR_ID_ADSALSA_PUBLICIDAD_SL = 39503\nVENDOR_ID_CTI_GROUP_HOLDINGS_INC = 39504\nVENDOR_ID_LINGO_SYSTEMS_SA_DE_CV = 39505\nVENDOR_ID_QALIXA_SOLUTIONS_AB = 39506\nVENDOR_ID_KREUZER_BB_NETWORKING = 39507\nVENDOR_ID_SCHMITZ_RZ_CONSULT_GMBH = 39508\nVENDOR_ID_TOTEMO_AG = 39509\nVENDOR_ID_INSTITUT_DE_BIOLOGIE_STRUCTURALE = 39510\nVENDOR_ID_SCHIAVONE_ORG = 39511\nVENDOR_ID_SAMAN_INSURANCE = 39512\nVENDOR_ID_MACALLISTER_SOFTWARE = 39513\nVENDOR_ID_ASSOCIATED_ENGINEERING = 39514\nVENDOR_ID_JHVI_VALLAVALITSUS = 39515\nVENDOR_ID_INDISYS = 39516\nVENDOR_ID_EVERNOTE_CORP = 39517\nVENDOR_ID_KAGE_SYSTEMS_LTD = 39518\nVENDOR_ID_HAVENSEC_INC = 39519\nVENDOR_ID_QUALYCLOUD = 39520\nVENDOR_ID_XG_TECHNOLOGY = 39521\nVENDOR_ID_MALDIVICA_INC = 39522\nVENDOR_ID_ALIPHCOM = 39523\nVENDOR_ID_NACOGDOCHES_MEMORIAL_HOSPITAL = 39524\nVENDOR_ID_CREOTECH_INSTRUMENTS_SA = 39525\nVENDOR_ID_LOGICLORE_INCORPORATION = 39526\nVENDOR_ID_MOTAAVI_LLC = 39527\nVENDOR_ID_ADDIT_LTD = 39528\nVENDOR_ID_LUGA_TECHNOLOGY_LTD = 39529\nVENDOR_ID_6CURE_SAS = 39530\nVENDOR_ID_N_TIER_CONSTRUCT_GMBH = 39531\nVENDOR_ID_QUANEX_BUILDING_PRODUCTS = 39532\nVENDOR_ID_ARMADILLO_SOFTWARE = 39533\nVENDOR_ID_MOBIATA_LLC = 39534\nVENDOR_ID_MODUSOFT_GMBH = 39535\nVENDOR_ID_RBNETWORK = 39536\nVENDOR_ID_SUPREME_EDUCATION_COUNCIL = 39537\nVENDOR_ID_BRIGHT_PATTERN_INC = 39538\nVENDOR_ID_NORTHWEST_HOSPITAL_MEDICAL_CENTER = 39539\nVENDOR_ID_SAPHETY_LEVEL_TRUSTED_SERVICES_SA = 39540\nVENDOR_ID_BLACKLIGHT_IT_UG = 39541\nVENDOR_ID_CALGARY_CO_OPERATIVE_ASSOCIATION_LIMITED = 39542\nVENDOR_ID_GNUSTEP_GNUORG = 39543\nVENDOR_ID_IGOLGI_INC = 39544\nVENDOR_ID_WINTERS_BROADBAND_LLC = 39545\nVENDOR_ID_INFOAGE = 39546\nVENDOR_ID_WAKEMED_HEALTH_AND_HOSPITALS = 39547\nVENDOR_ID_BEIJING_TOPSHINE_TECHNOLOGY_CO_LTD = 39548\nVENDOR_ID_DATACORE_SYSTEMS_LTD = 39549\nVENDOR_ID_KE2_THERM_SOLUTIONS = 39550\nVENDOR_ID_UAB_SIGNDIGI = 39551\nVENDOR_ID_DALIAN_CO_EDIFICE_VIDEO_TECHNOLOGY_CO_LTD = 39552\nVENDOR_ID_BEIJING_DYNAMIC_POWER_COLTD = 39553\nVENDOR_ID_DCRYPT_PRIVATE_LIMITED = 39554\nVENDOR_ID_GYSELROTH_GMBH = 39555\nVENDOR_ID_UNIVERSITY_OF_ZURICH_INSTITUTE_OF_MATHEMATICS = 39556\nVENDOR_ID_HOROQUARTZ = 39557\nVENDOR_ID_THATS_IT_GMBH = 39558\nVENDOR_ID_DEREDVDIENST = 39559\nVENDOR_ID_LEAD_INNOVATION_SYSTEM_TECHNOLOGY_CORP = 39560\nVENDOR_ID_XSD_ZRT = 39561\nVENDOR_ID_GREENHILLS_IT_LTD = 39562\nVENDOR_ID_SMART_MESSAGING_SOLUTION_PTE_LTD = 39563\nVENDOR_ID_YUNNAN_TECHNICIAN_COLLEGE = 39564\nVENDOR_ID_BIRZEIT_UNIVERSITY = 39565\nVENDOR_ID_IDEALO_INTERNET_GMBH = 39566\nVENDOR_ID_DJIGZO = 39567\nVENDOR_ID_LIBEROLOGICO_SRL = 39568\nVENDOR_ID_MAX4G_INC = 39569\nVENDOR_ID_POOL4TOOL_AG = 39570\nVENDOR_ID_L33_NETWORKS = 39571\nVENDOR_ID_TCPWAVE_INC = 39572\nVENDOR_ID_SAUPER_ASSOCIATES_INC = 39573\nVENDOR_ID_GUIDO_BERHOERSTER = 39574\nVENDOR_ID_GLOBAL_PATIENT_IDENTIFIERS_INC = 39575\nVENDOR_ID_ELVENSTAR_PRODUCTIONS = 39576\nVENDOR_ID_GLOBEOSS_SDN_BHD = 39577\nVENDOR_ID_SVEN_VAN_DEN_HEUVEL_GMBH = 39578\nVENDOR_ID_HEARST_BUSINESS_MEDIA = 39579\nVENDOR_ID_DUAL_PROJEKT_PAWE_SZMIDT = 39580\nVENDOR_ID_ZPBE_ENERGOPOMIAR_ELEKTRYKA = 39581\nVENDOR_ID_WEBSATMEDIA_PTE_LTD = 39582\nVENDOR_ID_EGEMIN_AUTOMATION = 39583\nVENDOR_ID_HANNOVERSCHE_VOLKSBANK_EG = 39584\nVENDOR_ID_KLEYLING_SPEDITION_GMBH = 39585\nVENDOR_ID_DATASIEL_SPA = 39586\nVENDOR_ID_GUIDESTONE_FINANCIAL_RESOURCES_OF_THE_SOUTHERN_BAPTIST_CONVENTION = 39587\nVENDOR_ID_SELECTRIC_NACHRICHTEN_SYSTEME_GMBH = 39588\nVENDOR_ID_EBACKPACK_INC = 39589\nVENDOR_ID_FUNDACI_PRIVADA_I2CAT = 39590\nVENDOR_ID_AUX_SABLE_LIQUID_PRODUCTS_LP = 39591\nVENDOR_ID_SERMOTEC_COMMUNICATIONS_GMBH = 39592\nVENDOR_ID_SUOFEIYA_HOME_COLLECTION_CO_LTD = 39593\nVENDOR_ID_POINT_OF_PAY_PTY_LTD = 39594\nVENDOR_ID_GUANGZHOU_JOYSIM_NETWORK_TECHNOLOGY_COLTD = 39595\nVENDOR_ID_ZHEJIANG_BROADCASTTELEVISION_TECHNOLOGY_COLTD = 39596\nVENDOR_ID_CHONGQING_CHONGYOU_COMMUNICATION_TECHNOLOGIES_COLTD = 39597\nVENDOR_ID_INFACOM_SL = 39598\nVENDOR_ID_MZINGA_INC = 39599\nVENDOR_ID_CAPITAL_BANK = 39600\nVENDOR_ID_VECTOR_3_SA = 39601\nVENDOR_ID_REGIONAL_MEDICAL_CENTER_AT_MEMPHIS = 39602\nVENDOR_ID_DTTEC_CONSULTING = 39603\nVENDOR_ID_ACCUENERGY_CANADA_INC = 39604\nVENDOR_ID_GLOBECAST_FRANCE = 39605\nVENDOR_ID_GOLDKEY_SECURITY_CORPORATION = 39606\nVENDOR_ID_NX_INFORMATION_SERVICES = 39607\nVENDOR_ID_PALOSANTO_SOLUTIONS_SA = 39608\nVENDOR_ID_NEXT_PBX = 39609\nVENDOR_ID_BITLANCER_LLC = 39610\nVENDOR_ID_VIDEO_DESIGN_SOFTWARE_INC = 39611\nVENDOR_ID_STANTEC_CONSULTING = 39612\nVENDOR_ID_TORRES_NETWORKS = 39613\nVENDOR_ID_VALID = 39614\nVENDOR_ID_2008MCITPCOM = 39615\nVENDOR_ID_GLASGOWNET = 39616\nVENDOR_ID_PDT_PARTNERS_LLC = 39617\nVENDOR_ID_CLOUD_ASSIST = 39618\nVENDOR_ID_INSTITUTUL_PENTRU_TEHNOLOGII_AVANSATE = 39619\nVENDOR_ID_JANUS_SRL = 39620\nVENDOR_ID_SOPLEX_CONSULT_GMBH = 39621\nVENDOR_ID_INTERMAS_FRANCE_SAS = 39622\nVENDOR_ID_PCS_SYSTEMTECHNIK_GMBH = 39623\nVENDOR_ID_HEROLDSCHNSTEINER_NETWORKS_UG_HAFTUNGSBESCHRNKT = 39624\nVENDOR_ID_KRAFT_FOODS = 39625\nVENDOR_ID_HACKERSPACE_WARSAW = 39626\nVENDOR_ID_RHINOBEE = 39627\nVENDOR_ID_VEGAYAN_SYSTEMS = 39628\nVENDOR_ID_AUXILIUM = 39629\nVENDOR_ID_MAILPLUSCOAT = 39630\nVENDOR_ID_MOCUBE = 39631\nVENDOR_ID_HYRO_PTY_LTD = 39632\nVENDOR_ID_DOS_TEK_GROUP = 39633\nVENDOR_ID_HIGHGRAND_TECHNOLOGY = 39634\nVENDOR_ID_BEIJING_ZHONGCHUANG_TELECOM_TEST_COLTD = 39635\nVENDOR_ID_COMET_COMPUTER_GMBH = 39636\nVENDOR_ID_IMP_SOLUTIONS_NETWORK_OPERATIONS = 39637\nVENDOR_ID_CORNERSTONE_BACKUP_INC = 39638\nVENDOR_ID_VIGILENT_CORPORATION = 39639\nVENDOR_ID_EUROPALAB_NETWORKS = 39640\nVENDOR_ID_SPICE_DIGITAL_LIMITED = 39641\nVENDOR_ID_S3_SRL = 39642\nVENDOR_ID_WEDACON_INFORMATIONSTECHNOLOGIEN_GMBH = 39643\nVENDOR_ID_THE_UNIVERSITY_OF_NORTH_CAROLINA_AT_GREENSBORO = 39644\nVENDOR_ID_ANGLO_AMERICAN_SCHOOL_OF_MOSCOW = 39645\nVENDOR_ID_MIKRO_ODEME_SISTEMLERI_AS = 39646\nVENDOR_ID_INIC_AS = 39647\nVENDOR_ID_ENOVACOM = 39648\nVENDOR_ID_GENERAL_DATA_TECHNOLOGY_CO_LTD = 39649\nVENDOR_ID_AEMO_LTD = 39650\nVENDOR_ID_COMTECT = 39651\nVENDOR_ID_THE_WILLIAM_CARTER_COMPANY = 39652\nVENDOR_ID_IMBIO = 39653\nVENDOR_ID_TISSOT = 39654\nVENDOR_ID_HUMBUG_TELECOM_LABS_LIMITED = 39655\nVENDOR_ID_ING_INSURANCE_IM = 39656\nVENDOR_ID_ADMINISTRATION_OF_THE_VLADIMIR_REGION = 39657\nVENDOR_ID_TOLLNET_AS = 39658\nVENDOR_ID_NSD_CO_LTD = 39659\nVENDOR_ID_TARANA_WIRELESS_INC = 39660\nVENDOR_ID_ALLIANZ_MANAGED_OPERATIONS_AND_SERVICES_SE_ONEWEB = 39661\nVENDOR_ID_METAFINANZ_INFORMATIONSSYSTEME_GMBH = 39662\nVENDOR_ID_RENK_AG = 39663\nVENDOR_ID_LINGUA_IT_SP_Z_OO = 39664\nVENDOR_ID_FAT_MONGOOSE_TECHNOLOGIES_INC = 39665\nVENDOR_ID_CONSULT_A_NERD = 39666\nVENDOR_ID_CODEMETTLE_LLC = 39667\nVENDOR_ID_IRIDIUM_DIGITAL_SYSTEMS_CORPORATION = 39668\nVENDOR_ID_KONING_CORPORATION = 39669\nVENDOR_ID_KNAUTEINFO = 39670\nVENDOR_ID_NEXTDC_LTD = 39671\nVENDOR_ID_ELITE_AUTOMAO_COMRCIO_E_SERVIOS_LTDA_ME = 39672\nVENDOR_ID_TALON_STORAGE_SOLUTIONS = 39673\nVENDOR_ID_OCTOGATE_GMBH = 39674\nVENDOR_ID_VAST_ARRAY_CORPORATION = 39675\nVENDOR_ID_PASON_SYSTEMS_CORP = 39676\nVENDOR_ID_ARCHDATA_SPRL = 39677\nVENDOR_ID_AMERICAN_DOMAIN_NAMES_LLC = 39678\nVENDOR_ID_JSC_TEKHDIAGNOSTIKA = 39679\nVENDOR_ID_NOZHUP_BV = 39680\nVENDOR_ID_CATALYST_REPOSITORY_SYSTEMS = 39681\nVENDOR_ID_EXEGIN_TECHNOLOGIES_LIMITED = 39682\nVENDOR_ID_SINGLE_TOUCH_INTERACTIVE = 39683\nVENDOR_ID_GENTEELORG = 39684\nVENDOR_ID_WTG_MUENSTER = 39685\nVENDOR_ID_ACQUIRENTE_UNICO = 39686\nVENDOR_ID_JSC_APRELEVKA_X_RAY_FACTORY = 39687\nVENDOR_ID_INTERACTINGSTARSORG = 39688\nVENDOR_ID_BRF = 39689\nVENDOR_ID_IPACCT_LTD = 39690\nVENDOR_ID_EMBEDDEERS_GMBH = 39691\nVENDOR_ID_IDEAL_MAHDBAN_ENGINEERING_SERVICES = 39692\nVENDOR_ID_N_PARTNER = 39693\nVENDOR_ID_DIAMONT_EQUIPAMENTOS_ESPECIAIS_LTDA = 39694\nVENDOR_ID_FRAFOS_GMBH = 39695\nVENDOR_ID_BANGLALION_COMMUNICATIONS_LIMITED = 39696\nVENDOR_ID_INTELLIGENT_SECURITY_SYSTEMS = 39697\nVENDOR_ID_MIANYANG_NETOP_TELECOM_EQUIPMENT_COLTD = 39698\nVENDOR_ID_ROBUSTEL_TECHNOLOGIES = 39699\nVENDOR_ID_SONIC_BOOM_WELLNESS = 39700\nVENDOR_ID_MANGELAL_SONS = 39701\nVENDOR_ID_LINUX_SOLUTIONS = 39702\nVENDOR_ID_SASCO = 39703\nVENDOR_ID_UNYONSYS = 39704\nVENDOR_ID_SKSLATERNET = 39705\nVENDOR_ID_ADTEK = 39706\nVENDOR_ID_CUMBRIA_CONSTABULARY = 39707\nVENDOR_ID_TELENT_GMBH_A_DIVISION_OF_EUROMICRON_GROUP = 39708\nVENDOR_ID_BROADCAST_GRAPHICS_AND_CONTROL_LIMITED = 39709\nVENDOR_ID_WENTWORTH_DOUGLASS_HOSPITAL = 39710\nVENDOR_ID_RADIOBOLAGET_GUNHAMN_OCH_SBRINK_AB = 39711\nVENDOR_ID_QSD_SISTEMI_SRL = 39712\nVENDOR_ID_ABERTIS_TELECOM = 39713\nVENDOR_ID_ASSOCIACIO_CULTURAL_TGK = 39714\nVENDOR_ID_DOMINIONTECH_COMPUTER_SERVICES = 39715\nVENDOR_ID_UNIVERSITY_OF_SOUTH_ALABAMA_HEALTH_SYSTEM = 39716\nVENDOR_ID_WESTERHOLT = 39717\nVENDOR_ID_SILVERFLARE_LTD = 39718\nVENDOR_ID_TCF_FINANCIAL_CORPORATION = 39719\nVENDOR_ID_MARYLAND_STADIUM_AUTHORITY = 39720\nVENDOR_ID_DUCSS = 39721\nVENDOR_ID_UNDERPIN_TAIWAN_LTD = 39722\nVENDOR_ID_LOGISTICS_ENERGY_KOREA_CO_LTD = 39723\nVENDOR_ID_JKAREF_GMBH = 39724\nVENDOR_ID_JERASOFT = 39725\nVENDOR_ID_BRITISH_NATIONAL_PARTY = 39726\nVENDOR_ID_IT_IHME = 39727\nVENDOR_ID_BESSELS_IT = 39728\nVENDOR_ID_CILUTIONS_DIGITAL_MEDIA_BRIDGE = 39729\nVENDOR_ID_SHANGHAI_MEXON_COMMUNICATION_TECHNOLOGYLTD = 39730\nVENDOR_ID_EMIND_SYSTEMS_LTD = 39731\nVENDOR_ID_SHENZHEN_SMART_CUBE_INTELLIGENT_TECHNOLOGY_COLTD = 39732\nVENDOR_ID_BOSS_INFO_AG = 39733\nVENDOR_ID_WUJIMANNET = 39734\nVENDOR_ID_MAIN_STREET_SOFTWORKS_INC = 39735\nVENDOR_ID_ACTIVE_SYSTEM_MANAGEMENT = 39736\nVENDOR_ID_COMMERCEPACK = 39737\nVENDOR_ID_IBS_AMERICA_INC = 39738\nVENDOR_ID_MADSCIENTISTCLUB = 39739\nVENDOR_ID_PSA_ZEEBRUGGE_INTERNATIONAL_PORT_NV = 39740\nVENDOR_ID_EGNYTE_INC = 39741\nVENDOR_ID_SOCIT_DES_INGNIEURS_ARTS_ET_MTIERS = 39742\nVENDOR_ID_SHANGHAI_DONGZHOU_LAWTON_TELECOM_TECHNOLOGIES_COLTD = 39743\nVENDOR_ID_EDESA = 39744\nVENDOR_ID_OPOWER_INC = 39745\nVENDOR_ID_MEITSUDENSHI = 39746\nVENDOR_ID_ZHEJIANG_UNIVIEW_TECHNOLOGIES_CO_LTD = 39747\nVENDOR_ID_INTESYN_SRL = 39748\nVENDOR_ID_KASSENRZTLICHE_VEREINIGUNG_BRANDENBURG = 39749\nVENDOR_ID_UNION_HOSPITAL_HEALTH_GROUP = 39750\nVENDOR_ID_MOBINTEGRO = 39751\nVENDOR_ID_HOOTSUITE_MEDIA_INC = 39752\nVENDOR_ID_VIGNOLD_WORKFLOW_NEW_MEDIA_GMBH = 39753\nVENDOR_ID_HAVI_LOGISTICS_IS_GMBH = 39754\nVENDOR_ID_SAINT_MONDIALE_PTE_LTD = 39755\nVENDOR_ID_ST_JOHNS_COUNTY_SCHOOL_DISTRICT = 39756\nVENDOR_ID_SCHOMCKER_GMBH = 39757\nVENDOR_ID_IMOXION = 39758\nVENDOR_ID_LOREME = 39759\nVENDOR_ID_NEW_COSMOS_ELECTRIC_CO_LTD = 39760\nVENDOR_ID_GALIAM_CAPITAL_LLC = 39761\nVENDOR_ID_RADIO_MOBILE_ACCESS_INC = 39762\nVENDOR_ID_ADAMS_COUNTY_SCHOOL_DISTRICT_50 = 39763\nVENDOR_ID_TRANSOFT_SHANGHAI_INC = 39764\nVENDOR_ID_KEYDAP = 39765\nVENDOR_ID_NULL_POINTER_INC = 39766\nVENDOR_ID_TOMTOM_INTERNATIONAL_BV = 39767\nVENDOR_ID_UAB_TECHNOLOGIJU_IR_INOVACIJU_CENTRAS = 39768\nVENDOR_ID_ITALIAN_GRID_INFRASTRUCTURE_IGI = 39769\nVENDOR_ID_MARTIN_NEIMEIER = 39770\nVENDOR_ID_SIP_EXPRESS_MEDIA_SERVER = 39771\nVENDOR_ID_MELCHINGER_SYSTEMHAUS_UG = 39772\nVENDOR_ID_PANNON_SITE_LTD = 39773\nVENDOR_ID_CRIENA_NETWORK = 39774\nVENDOR_ID_CAPITOL_LIEN_RECORDS_RESEARCH_INC = 39775\nVENDOR_ID_ANDREAS_STREY = 39776\nVENDOR_ID_SIMON_ARLOTT = 39777\nVENDOR_ID_YOUNG_MASTER_SUPPLIES_GENERAL_ENTERPRISES_LTD = 39778\nVENDOR_ID_UCLA_ANDERSON_SCHOOL_OF_MANAGEMETN = 39779\nVENDOR_ID_PIKOPIKO_NETWORK = 39780\nVENDOR_ID_TW = 39781\nVENDOR_ID_HANGZHOU_ICONVERGE_TECHONOLOAY_COLTD = 39782\nVENDOR_ID_ASB_BANK_LIMITED = 39783\nVENDOR_ID_NATIONAL_JEWISH_HEALTH = 39784\nVENDOR_ID_DS_2_GBR = 39785\nVENDOR_ID_TRAVELOCITYCOM = 39786\nVENDOR_ID_SUNTRUST_BANKS_INC = 39787\nVENDOR_ID_LOGODYNAMIC_UNIT_GMBH = 39788\nVENDOR_ID_SOUTHWEST_TEXAS_REGIONAL_ADVISORY_COUNCIL = 39789\nVENDOR_ID_CHURCH_DWIGHT_CO_INC = 39790\nVENDOR_ID_UNIFIED_MICROSYSTEMS = 39791\nVENDOR_ID_YOUDOTNET_LIMITED = 39792\nVENDOR_ID_WORLD_NET = 39793\nVENDOR_ID_FEDEREZ = 39794\nVENDOR_ID_CARDIOTHINK_INC = 39795\nVENDOR_ID_BKAVCA = 39796\nVENDOR_ID_CONTRACT_KITTING = 39797\nVENDOR_ID_REPUBLIKI_FOND_ZA_ZDRAVSTVENO_OSIGURANJE = 39798\nVENDOR_ID_TELE_APOSTUAK = 39799\nVENDOR_ID_MTU_AERO_ENGINES_GMBH = 39800\nVENDOR_ID_IMAGICLE_SPA = 39801\nVENDOR_ID_URBAN_AIRSHIP_INC = 39802\nVENDOR_ID_IT_BOX_GMBH = 39803\nVENDOR_ID_CTYLE_CORPORATION = 39804\nVENDOR_ID_INGENIOUS_MED = 39805\nVENDOR_ID_PRJSC_IC_SEB_LIFE_UKRAINE = 39806\nVENDOR_ID_EDGEWATER_WIRELESS_SYSTEMS_INC = 39807\nVENDOR_ID_SHINE_SYSTEM = 39808\nVENDOR_ID_LONELY_PLANET = 39809\nVENDOR_ID_KNET_CO_LTD = 39810\nVENDOR_ID_ZAPOP_PTY_LTD = 39811\nVENDOR_ID_UC_RUSAL = 39812\nVENDOR_ID_PUBLIC_JOINT_STOCK_COMPANY_NATIONAL_DEPOSITORY_OF_UKRAINE = 39813\nVENDOR_ID_SOLYSTIC = 39814\nVENDOR_ID_IPHION_BV = 39815\nVENDOR_ID_ACCELATIS = 39816\nVENDOR_ID_CL0SECALLNET = 39817\nVENDOR_ID_ANATOR = 39818\nVENDOR_ID_VAPORPUNK_INC = 39819\nVENDOR_ID_CYSSEA = 39820\nVENDOR_ID_EDINEC_SRL = 39821\nVENDOR_ID_ISCHEMAVIEW_INC = 39822\nVENDOR_ID_CONSORCI_ADMINISTRACI_OBERTA_DE_CATALUNYA = 39823\nVENDOR_ID_SMART_GRID_NETWORKS = 39824\nVENDOR_ID_PUBLIC_SAFETY_CANADA = 39825\nVENDOR_ID_ACCELERATED_SERVERS_INC = 39826\nVENDOR_ID_CELAL_BAYAR_UNIVERSITY = 39827\nVENDOR_ID_ATP = 39828\nVENDOR_ID_ASETEK = 39829\nVENDOR_ID_GREEVE = 39830\nVENDOR_ID_MUSEU_DE_ASTRONOMIA_E_CIENCIAS_AFINS = 39831\nVENDOR_ID_LOGICMONITOR_INC = 39832\nVENDOR_ID_HANGZHOU_E_VISION_ELECTRONIC_SYSTEM_ENGINEERING_CORP = 39833\nVENDOR_ID_FATA_INFORMATICA = 39834\nVENDOR_ID_JANTEQ_CORPORATION = 39835\nVENDOR_ID_SINDIKAT_AKADEMSKA_SOLIDARNOST = 39836\nVENDOR_ID_A123_SYSTEMS_INC = 39837\nVENDOR_ID_UNIVERSITY_OF_BAHRAIN = 39838\nVENDOR_ID_GAFTECH = 39839\nVENDOR_ID_ICAR_CNR = 39840\nVENDOR_ID_DANSKE_BANK = 39841\nVENDOR_ID_COMMUNAUT_URBAINE_DU_GRAND_TOULOUSE = 39842\nVENDOR_ID_PRECOGS_SOFTWARE_SAS = 39843\nVENDOR_ID_MAPPER_LITHOGRAPHY = 39844\nVENDOR_ID_DR_SCHENK_IT_CONSULTING_GMBH = 39845\nVENDOR_ID_UNILINK_SA = 39846\nVENDOR_ID_ATS_GRUP_LTD = 39847\nVENDOR_ID_VOXIMAGE = 39848\nVENDOR_ID_ARBITER_SYSTEMS = 39849\nVENDOR_ID_ROSS_OPTICIANS_INC = 39850\nVENDOR_ID_HLT_SOFTWARE_GMBH = 39851\nVENDOR_ID_CLIMA_TECH_COPORATION = 39852\nVENDOR_ID_BSI_BUSINESS_SYSTEMS_INTEGRATION_AG = 39853\nVENDOR_ID_EVOLUTION_NETWORKS = 39854\nVENDOR_ID_FCP_FRITSCH_CHIARI_PARTNER_ZT_GMBH = 39855\nVENDOR_ID_BEIJING_QIBADIAN_INFORMATION_TECHNOLOGY_CO_LTD = 39856\nVENDOR_ID_CYSM_LTD = 39857\nVENDOR_ID_KIRIN_GUMI = 39858\nVENDOR_ID_CLEMAXINC = 39859\nVENDOR_ID_OGS_IT_SOLUTIONS = 39860\nVENDOR_ID_ORBITZ_WORLDWIDE_LLC = 39861\nVENDOR_ID_COMSONICSINC = 39862\nVENDOR_ID_WORLD_VISION_US = 39863\nVENDOR_ID_WEBEDOCTOR_INC = 39864\nVENDOR_ID_SLABINFO_EU = 39865\nVENDOR_ID_ADVANCED_NETWORK_DEVICES = 39866\nVENDOR_ID_LINEDATA = 39867\nVENDOR_ID_MIAMI_INTERNATIONAL_HOLDINGS = 39868\nVENDOR_ID_ILLUMINA_INC = 39869\nVENDOR_ID_TELESIS_AS = 39870\nVENDOR_ID_TRANS_INDUSTRIAS_ELECTRONICAS = 39871\nVENDOR_ID_CIPFP_AUSIAS_MARCH = 39872\nVENDOR_ID_SILICON_LABS_FORMERLY_EMBER_CORPORATION = 39873\nVENDOR_ID_ASMLAB_LIMITED = 39874\nVENDOR_ID_BEIJING_GUANGXINYINGKE_TECHNOLOGY_COLTD = 39875\nVENDOR_ID_7_TECHNOLOGIES_A_S = 39876\nVENDOR_ID_VCE_VIENNA_CONSULTING_ENGINEERS = 39877\nVENDOR_ID_LE_AQUILE_UNITA_CINOFILE_DA_SOCCORSO_RAVENNATE = 39878\nVENDOR_ID_AMPLITUDE_SYSTEMES = 39879\nVENDOR_ID_THOMAS_WIEDSTRUCK_INFORMATIONSTECHNIK = 39880\nVENDOR_ID_EYESOFNETWORK = 39881\nVENDOR_ID_GREATER_PITTSBURGH_GLASS_DOOR = 39882\nVENDOR_ID_SYSACOM = 39883\nVENDOR_ID_T_PLATFORMS = 39884\nVENDOR_ID_STORONE = 39885\nVENDOR_ID_KURT_KINCAID_CONSULTING = 39886\nVENDOR_ID_LOCALROOTDE = 39887\nVENDOR_ID_NESS_COMPUTING_INC = 39888\nVENDOR_ID_ICECREEK_SOFTWARE_UND_SERVICES = 39889\nVENDOR_ID_BEIJING_FORSUN_TECHNOLOGY_COLTD = 39890\nVENDOR_ID_MNUCIB_VNII_PVTI = 39891\nVENDOR_ID_V_IC = 39892\nVENDOR_ID_ENERGIERVERSORGUNG_MITTELRHEIN_GMBH = 39893\nVENDOR_ID_HALEY_TECHNOLOGIES_INC_DBA_PC_PITSTOP = 39894\nVENDOR_ID_OPENX = 39895\nVENDOR_ID_THE_CLEVELAND_CLINIC_FOUNDATION = 39896\nVENDOR_ID_RYDER_SYSTEM_INC = 39897\nVENDOR_ID_ATRILA_GMBH = 39898\nVENDOR_ID_VIRGINIA_HOSPITAL_CENTER = 39899\nVENDOR_ID_INITE_SC = 39900\nVENDOR_ID_CRYPTO4A = 39901\nVENDOR_ID_INQABE = 39902\nVENDOR_ID_PIVOTAL_TECHNOLOGIES_PTY_LTD = 39903\nVENDOR_ID_SASCHA_WOLF = 39904\nVENDOR_ID_EA_LIGHT_ARBEITSGEMEINSCHAFT_DER_KNO_UND_KWL = 39905\nVENDOR_ID_ZWISSLER_TECHNOLOGIES_LLC = 39906\nVENDOR_ID_LINKSQUARE = 39907\nVENDOR_ID_CHINA_BEIJING_KOAL_COMPANY = 39908\nVENDOR_ID_OJSC_GUTA_BANK = 39909\nVENDOR_ID_FUSIONEX = 39910\nVENDOR_ID_LTD_ARHANGELSKOE_PREDPRIJATIE_PROTIVOPOZHARNOJ_AVTOMATIKI = 39911\nVENDOR_ID_STATE_GRID_ELECTRIC_POWER_RESEARCH_INSTITUTE = 39912\nVENDOR_ID_ELONG_CORP = 39913\nVENDOR_ID_ZPAS_SA = 39914\nVENDOR_ID_WIBA10 = 39915\nVENDOR_ID_KEYLEMON_SA = 39916\nVENDOR_ID_KUFP_MEDAPARATURA_ALC = 39917\nVENDOR_ID_CARDIOCORE = 39918\nVENDOR_ID_HYBRIS_GMBH = 39919\nVENDOR_ID_WINTEK_SYSTEM = 39920\nVENDOR_ID_UKFASTNET_LTD = 39921\nVENDOR_ID_SDN_SPA = 39922\nVENDOR_ID_SERES = 39923\nVENDOR_ID_CHASE_PAYMENTECH = 39924\nVENDOR_ID_EXCELLENT_SA = 39925\nVENDOR_ID_ASPEN_SYSTEMS = 39926\nVENDOR_ID_VORONEZH_CITYHALL = 39927\nVENDOR_ID_DMITRY_PONOMAREV = 39928\nVENDOR_ID_DINGBOX = 39929\nVENDOR_ID_REWIRED_STATE = 39930\nVENDOR_ID_OPENNETMON = 39931\nVENDOR_ID_MINDWARE = 39932\nVENDOR_ID_TECHNOLOGY_SPACE_INTEGRATION_LIMITED = 39933\nVENDOR_ID_TOPHAT_SOFTWARE = 39934\nVENDOR_ID_TRANSAS_MARINE_INTERNATIONAL = 39935\nVENDOR_ID_CHESHIRE_MEDICAL_CENTER = 39936\nVENDOR_ID_NETSPECTIVE = 39937\nVENDOR_ID_INCA_NETWORKS_INC = 39938\nVENDOR_ID_LANSING_COMMUNITY_COLLEGE = 39939\nVENDOR_ID_OREGON_SCIENTIFIC_GLOBAL_DISTRIBUTION_LIMITED = 39940\nVENDOR_ID_KUZUMI_ELECTRONICSINC = 39941\nVENDOR_ID_EWORLD_TECHNOLOGIES_LTD = 39942\nVENDOR_ID_UNIVERSITY_OF_SANTO_TOMAS = 39943\nVENDOR_ID_SHENZHEN_CATIC_BIT_COMMUNICATION_TECHNOLOGY_COLTD = 39944\nVENDOR_ID_TECBLAZER = 39945\nVENDOR_ID_EV_GROUP_GMBH = 39946\nVENDOR_ID_B_PLUS_TV_AS = 39947\nVENDOR_ID_PING_COMMUNICATION = 39948\nVENDOR_ID_BEIJING_ARRAYS_MEDICAL_IMAGING_TECHNOLOGY_DEVELOPMENT_COTD = 39949\nVENDOR_ID_ALTERSIGN_LLC = 39950\nVENDOR_ID_TOWN_SPORTS_INTERNATIONAL = 39951\nVENDOR_ID_SECUREPKI = 39952\nVENDOR_ID_SERVICE_DEPARTEMENTAL_D_INCENDIE_ET_DE_SECOURS_DE_LA_DROME = 39953\nVENDOR_ID_RWETC_SRO = 39954\nVENDOR_ID_SMP_BANK_OJSC = 39955\nVENDOR_ID_VALE = 39956\nVENDOR_ID_COLUMBUS_REGIONAL_HEATHCARE_SYSTEM_INC = 39957\nVENDOR_ID_WITHINGS = 39958\nVENDOR_ID_CIRCUTOR_SA = 39959\nVENDOR_ID_CKTSOICOM = 39960\nVENDOR_ID_NICIRA_INC = 39961\nVENDOR_ID_KERN_SCIENTIFIC_CO = 39962\nVENDOR_ID_AGCO_CORPORATION = 39963\nVENDOR_ID_EIDEN_COLTD = 39964\nVENDOR_ID_TRANS_SPED = 39965\nVENDOR_ID_LUMINOSO_LLC = 39966\nVENDOR_ID_ETHERSEX_PROJECT = 39967\nVENDOR_ID_TOYA_TECHNOLOGIES_INC = 39968\nVENDOR_ID_UNITED_ENERGY_PAKISTAN_LIMITED = 39969\nVENDOR_ID_HANDYSOLUTIONS_CJSC = 39970\nVENDOR_ID_SHENZHEN_SKYEE_OPTICAL_FIBER_COMMUNICATION_TECHNOLOGY_LTD = 39971\nVENDOR_ID_TUV_RHEINLAND_IBERICA_SA = 39972\nVENDOR_ID_JANMEDIA_INTERACTIVE_SP_Z_OO = 39973\nVENDOR_ID_GARLAND_TECHNOLOGY_LLC = 39974\nVENDOR_ID_COGNEX = 39975\nVENDOR_ID_SOUTHWESTERN_UNIVERSITY = 39976\nVENDOR_ID_DELTIX_INC = 39977\nVENDOR_ID_DANIEL_THEODORO_CONSULTORIA_EM_INFORMATICA_LTD = 39978\nVENDOR_ID_CONICIT_LTD = 39979\nVENDOR_ID_NOCTURNAL_AVIATION = 39980\nVENDOR_ID_OPT_SP_COLTD = 39981\nVENDOR_ID_ICAREUS_LTD = 39982\nVENDOR_ID_PROJECT_ENGINEERING_SRL = 39983\nVENDOR_ID_SHENZHEN_PROCESS_TECHCOLTD = 39984\nVENDOR_ID_GRZ_IT_CENTER_LINZ_GMBH = 39985\nVENDOR_ID_FLORIDA_DEPARTMENT_OF_EDUCATION = 39986\nVENDOR_ID_PATHMAKER_GROUP_INC = 39987\nVENDOR_ID_RESERVED_5 = 39988\nVENDOR_ID_LINE_SEALIZACIN_ELECTRNICA_SL = 39989\nVENDOR_ID_CENTER_OF_INFORMATION_TECHNOLOGIES_OF_VOLGOGRAD_REGION_HTTPCITVORU = 39990\nVENDOR_ID_AITIA_INTERNATIONAL_INC = 39991\nVENDOR_ID_DAVIDHOWLANDCOM = 39992\nVENDOR_ID_OWL_FORESTRY = 39993\nVENDOR_ID_ECHO360 = 39994\nVENDOR_ID_PLYMOUTH_UNIVERSITY = 39995\nVENDOR_ID_SYS4_AG = 39996\nVENDOR_ID_NETSUMO_LTD = 39997\nVENDOR_ID_BEIJING_LANXUM_NEW_TECHNOLOGY = 39998\nVENDOR_ID_HISPANIA_EUROVIP_SL = 39999\nVENDOR_ID_KAPSI_INTERNET_KYTTJT_RY = 40000\nVENDOR_ID_WINESOFT = 40001\nVENDOR_ID_OPEN_SYSTEM_CO_LTD = 40002\nVENDOR_ID_KARJALAN_PAPERI_OY = 40003\nVENDOR_ID_CARGO_SERVICE_NORD_GMBH = 40004\nVENDOR_ID_5P_GMBH_CO_KG = 40005\nVENDOR_ID_REEVEX_LLC = 40006\nVENDOR_ID_UNIVERSAL_RESEARCH_SOLUTIONS_LLC = 40007\nVENDOR_ID_VIRTUAL_CONNECT_TECHNOLOGIES_INC = 40008\nVENDOR_ID_OASISWORK_SARL = 40009\nVENDOR_ID_MSMC_INFORMATICA_LTDA = 40010\nVENDOR_ID_FRIPOST = 40011\nVENDOR_ID_HATOMI_SP_Z_OO = 40012\nVENDOR_ID_LINTLOAFNET = 40013\nVENDOR_ID_PROGRESS_RAIL_SERVICES_INSPECTION_INFORMATION_SYSTEMS = 40014\nVENDOR_ID_HTTNER_WERFLING_SOFTWAREENTWICKLUNG_GBR = 40015\nVENDOR_ID_MAS_TECHNOLOGY = 40016\nVENDOR_ID_ARKS_LLC = 40017\nVENDOR_ID_JSC_BANK_VOLOGZHANIN = 40018\nVENDOR_ID_ISBAK_AS = 40019\nVENDOR_ID_GUTENBERG_NETWORKS = 40020\nVENDOR_ID_VISCOUNT_SYSTEMS_INC = 40021\nVENDOR_ID_SIRIUS_SOFTWARE_INC = 40022\nVENDOR_ID_LLC_NPF_DUKON = 40023\nVENDOR_ID_INOVO_BROADBAND_INC = 40024\nVENDOR_ID_TYM3 = 40025\nVENDOR_ID_SOCIT_DINFORMATIQUE_ET_DE_SYSTMES = 40026\nVENDOR_ID_AKI_NETWORK_TECHNOLOGY = 40027\nVENDOR_ID_TAKOTA_LTD = 40028\nVENDOR_ID_LEADTONE = 40029\nVENDOR_ID_RADOM_SRO = 40030\nVENDOR_ID_OBLAKO10_LTD = 40031\nVENDOR_ID_ULTRA_ELECTRONICS_PRECISION_AIR_LAND_SYSTEMS = 40032\nVENDOR_ID_RADIO_DESIGN = 40033\nVENDOR_ID_DURASPACE = 40034\nVENDOR_ID_CELLSEC_INC = 40035\nVENDOR_ID_VERTAFORE_PLM = 40036\nVENDOR_ID_INCEPTUM_DOO = 40037\nVENDOR_ID_LIVESTREAM_LLC = 40038\nVENDOR_ID_MYSYSADMINDE = 40039\nVENDOR_ID_STICHTING_IFCAT_FOUNDATION = 40040\nVENDOR_ID_OOO_ELEKTRONNYE_OFISNYE_SISTEMY_PROEKTIROVANIE_I_VNEDRENIE = 40041\nVENDOR_ID_STIFTELSEN_CHALMERS_STUDENTBOSTDER = 40042\nVENDOR_ID_NEWPACE_TECHNOLOGY_DEVELOPMENT_INC = 40043\nVENDOR_ID_PC_DOCTOR_INC = 40044\nVENDOR_ID_NEXENTA_SYSTEMS_INC = 40045\nVENDOR_ID_CREDIT_EUROPE_BANK_LTD = 40046\nVENDOR_ID_KOREX_NETWORKS_SRO = 40047\nVENDOR_ID_INFORMATION_DISPLAY_COMPANY = 40048\nVENDOR_ID_RED_BEND = 40049\nVENDOR_ID_MICROTECH_ANDRZEJ_SOKULSKI = 40050\nVENDOR_ID_RELEASE14 = 40051\nVENDOR_ID_ENERGIE_AG_OBERSTERREICH_DATA_GMBH = 40052\nVENDOR_ID_SISTEMAS_AVANZADOS_DE_DISEO = 40053\nVENDOR_ID_4UR = 40054\nVENDOR_ID_YUCHENGTECH = 40055\nVENDOR_ID_ACCUBEAT_LTD = 40056\nVENDOR_ID_RESERVED_6 = 40057\nVENDOR_ID_VITALIY_TOKAREV = 40058\nVENDOR_ID_DATAGRAM_INC = 40059\nVENDOR_ID_LEO_LI_COM = 40060\nVENDOR_ID_BAY_AREA_HOSPITAL = 40061\nVENDOR_ID_TREVOR_AND_EMILY_MOUAT_KING = 40062\nVENDOR_ID_QINTARA_INC = 40063\nVENDOR_ID_OPTIMA_LAB_SRL = 40064\nVENDOR_ID_LARCH_NETWORKS = 40065\nVENDOR_ID_SALIENS_INFORMATION_SYSTEMS_LTD = 40066\nVENDOR_ID_LINTECH_JSC = 40067\nVENDOR_ID_THE_VENUS_PROJECT = 40068\nVENDOR_ID_ENPROVIA_SOFTWARE_ENGINEERING_S_R_O = 40069\nVENDOR_ID_RETAILNEXT = 40070\nVENDOR_ID_P_ST_ONGE = 40071\nVENDOR_ID_TECHLABJP_FORMERLY_SCMINFONET = 40072\nVENDOR_ID_LUTRON_ELECTRONICS_COMPANY_INC = 40073\nVENDOR_ID_ENERGY_SOLUTIONS_LTD = 40074\nVENDOR_ID_SPL_XDEMAT = 40075\nVENDOR_ID_SIFOX = 40076\nVENDOR_ID_AUSTRIAN_RED_CROSS = 40077\nVENDOR_ID_OPEN_GRID_COMPUTING = 40078\nVENDOR_ID_ELECTRONIC_SYSTEMS_PROTECTION_INC = 40079\nVENDOR_ID_IIHE_INTER_UNIVERSITY_INSTITUTE_FOR_HIGH_ENERGIES = 40080\nVENDOR_ID_SHANGHAI_MYWAY_TECHNOLOGY_INC = 40081\nVENDOR_ID_NUGARDT_SOFTWARE_UG_HAFTUNGSBESCHRNKT = 40082\nVENDOR_ID_ACCELERATED_CONCEPTS_INC = 40083\nVENDOR_ID_INGALLS_MEMORIAL_HOSPITAL = 40084\nVENDOR_ID_STAGE_TEC_GMBH = 40085\nVENDOR_ID_INWORX_GROUP = 40086\nVENDOR_ID_NIDO_INFORMATICA = 40087\nVENDOR_ID_VOIXTEL_TELECOM = 40088\nVENDOR_ID_NETAMBIT_INFOSOURCE_E_SERVICES_PVT_LTD = 40089\nVENDOR_ID_NETLINE_COMMUNICATIONS_TECHNOLOGIES_LTD = 40090\nVENDOR_ID_ACTIC_ASBL = 40091\nVENDOR_ID_WIWYNN_CORPORATION = 40092\nVENDOR_ID_ZHUHAI_SEINE_TECHNOLOGY_CO_LTD = 40093\nVENDOR_ID_SECUENV = 40094\nVENDOR_ID_G4S_ENGENHARIA_E_SISTEMAS_S_A = 40095\nVENDOR_ID_ROICX = 40096\nVENDOR_ID_WORLDPAY = 40097\nVENDOR_ID_UPDATE_SOFTWARE = 40098\nVENDOR_ID_NORTH_CAROLINA_HEALTHCARE_EXCHANGE = 40099\nVENDOR_ID_TECHNET = 40100\nVENDOR_ID_EPB_FIBER_OPTICS = 40101\nVENDOR_ID_PINGER_INC = 40102\nVENDOR_ID_FASHION_DAYS = 40103\nVENDOR_ID_BAMSENET_GMBH = 40104\nVENDOR_ID_APN_PROMISE_SA = 40105\nVENDOR_ID_POLARA_ENGINEERING_INC = 40106\nVENDOR_ID_MICHAEL_RESCHLY = 40107\nVENDOR_ID_AMBER_BUDDHA = 40108\nVENDOR_ID_SIGALGO_TECHNOLOGY_LTD = 40109\nVENDOR_ID_EGNATIA = 40110\nVENDOR_ID_DELOITTE_SERVICES_INVESTMENTS_NV = 40111\nVENDOR_ID_ETHERNIX = 40112\nVENDOR_ID_BLUE_MOUNTAIN_HEALTH_SYSTEM = 40113\nVENDOR_ID_GUAVATECH = 40114\nVENDOR_ID_V_B_INGENIERIA_SA_DE_CV = 40115\nVENDOR_ID_DCO4_SP_Z_OO = 40116\nVENDOR_ID_FACULT_DES_SCIENCES_ET_TECHNOLOGIES_UNIVERSIT_DE_LORRAINE = 40117\nVENDOR_ID_CNPC_LOGGING_COLTC = 40118\nVENDOR_ID_TERRALINK_LLC = 40119\nVENDOR_ID_PAMLOCK_AB = 40120\nVENDOR_ID_METHODIA_INC = 40121\nVENDOR_ID_BEIJING_CYBER_STONE_INFORMATION_TECHNOLOGY_CORP_LTD = 40122\nVENDOR_ID_HANGZHOU_DUNCHONG_TECHNOLOGY_COLTD = 40123\nVENDOR_ID_KERNKRAFTWERK_LEIBSTADT_AG = 40124\nVENDOR_ID_TRAVELFUSION_LTD = 40125\nVENDOR_ID_REAL_VIRTUAL_GMBH = 40126\nVENDOR_ID_MONOLITH_SOFTWARE = 40127\nVENDOR_ID_BEIJING_PHOTON_BYTE_TECHNOLOGY_CO_LTD = 40128\nVENDOR_ID_MARLUKKI_CENTRE = 40129\nVENDOR_ID_ASGUARD_NETWORKS = 40130\nVENDOR_ID_NUVEM_NETWORKS_INC = 40131\nVENDOR_ID_TELEMEDIA_ARGENTINA_SA = 40132\nVENDOR_ID_FIX_TELECOM = 40133\nVENDOR_ID_NEXUM_INC = 40134\nVENDOR_ID_SPAWN_LABS_INC = 40135\nVENDOR_ID_COMVIVA_TECHNOLOGIES_LIMITED = 40136\nVENDOR_ID_UNIVERSITY_OF_PARDUBICE = 40137\nVENDOR_ID_DATANET21_SOLUTIONS_GMBH = 40138\nVENDOR_ID_GRN_SERVEIS_TELEMATICS = 40139\nVENDOR_ID_AIRTEL_ATN = 40140\nVENDOR_ID_INTERCONNECT_BRASIL = 40141\nVENDOR_ID_MODULISTICNET = 40142\nVENDOR_ID_COOKIECONCEPTS = 40143\nVENDOR_ID_UNDERSTANDING_SHAREPOINT_LLC = 40144\nVENDOR_ID_STRYME_GMBH = 40145\nVENDOR_ID_ASCENT_COMMUNICATION_TECHNOLOGY = 40146\nVENDOR_ID_IT_TECHNOLOGY_GMBH = 40147\nVENDOR_ID_THORSTEN_PAPE = 40148\nVENDOR_ID_PFA_PENSION = 40149\nVENDOR_ID_KENIUM = 40150\nVENDOR_ID_GMOBILITY_SA = 40151\nVENDOR_ID_TRIMTABCA = 40152\nVENDOR_ID_ABRAXAS_INFORMATIK_AG = 40153\nVENDOR_ID_NORTH_CAUCASIAN_FEDERAL_UNIVERSITY = 40154\nVENDOR_ID_GROUNDHOG_TECHNOLOGIES = 40155\nVENDOR_ID_WVNET_GMBH = 40156\nVENDOR_ID_MEDICALGORITHMICS = 40157\nVENDOR_ID_GAGE_MARKETING_GROUP_LLC = 40158\nVENDOR_ID_PAUL_REINHART_AG = 40159\nVENDOR_ID_NJVC = 40160\nVENDOR_ID_CANAL_STREET_SECURITIES = 40161\nVENDOR_ID_MCCARTHY_TETRAULT = 40162\nVENDOR_ID_KAMIDAMA_BREEDABLES = 40163\nVENDOR_ID_OOO_AVTOMATIZIROVANNYE_SISTEMY_AUTOMATED_SYSTEMS_LTD = 40164\nVENDOR_ID_MORROWMEUK = 40165\nVENDOR_ID_OMEGA_TECH_CONSULTING_GROUP_LLC = 40166\nVENDOR_ID_NS_REIZIGERS_BV = 40167\nVENDOR_ID_ETRANSMEDIA_TECHNOLOGY = 40168\nVENDOR_ID_3XA_SECURITY_AB = 40169\nVENDOR_ID_NP_NETWORKS_INC = 40170\nVENDOR_ID_HF_RADIO_COMMUNICATION_TECHNOLOGY_CO_LTD = 40171\nVENDOR_ID_CLOSED_JOINT_STOCK_COMPANY_STANDARTELECOM = 40172\nVENDOR_ID_HOERMANN_SOLUTIONS = 40173\nVENDOR_ID_BLUEFINCH = 40174\nVENDOR_ID_RIPAS = 40175\nVENDOR_ID_CONSULFEM = 40176\nVENDOR_ID_RIGHTABOVE = 40177\nVENDOR_ID_NOOLITIC = 40178\nVENDOR_ID_APLICACIONESYREDESCOM = 40179\nVENDOR_ID_HTL_KAINDORF_MECHATRONIK = 40180\nVENDOR_ID_CYBERCENTER_SA = 40181\nVENDOR_ID_SICHUAN_CABLE_TV_NETWORK_CO_LTD = 40182\nVENDOR_ID_CON_TERRA_GMBH = 40183\nVENDOR_ID_NOVINTEH_LLC = 40184\nVENDOR_ID_ESA_UNGGUL_UNIVERSITY = 40185\nVENDOR_ID_DA_PAGE_LLC = 40186\nVENDOR_ID_ACLIMA_INC = 40187\nVENDOR_ID_UNITED_STATES_INFRASTRUCTURE_CORPORATION = 40188\nVENDOR_ID_CHARLTON_LABS = 40189\nVENDOR_ID_JCL_ECOMMERCE_GMBH = 40190\nVENDOR_ID_LYLID_NET_LTD = 40191\nVENDOR_ID_ITQUALITY = 40192\nVENDOR_ID_INSTITUTE_OF_ELECTRONIC_MUSIC_AND_ACOUSTICS = 40193\nVENDOR_ID_WAVECLOUD_CORPORATION = 40194\nVENDOR_ID_ZANTEK_PTY_LTD = 40195\nVENDOR_ID_SANTOS = 40196\nVENDOR_ID_JSC_CROC_POVOLZHYE = 40197\nVENDOR_ID_MOVIRTU = 40198\nVENDOR_ID_SZECHENYI_ISTVAN_SZKI = 40199\nVENDOR_ID_ANEXT = 40200\nVENDOR_ID_NEXIWAY = 40201\nVENDOR_ID_PRIMETECH_LTD = 40202\nVENDOR_ID_GOLDER_ASSOCIATES = 40203\nVENDOR_ID_AVAILITY_LLC = 40204\nVENDOR_ID_JACKSON_FAMILY_ENTERPRISES = 40205\nVENDOR_ID_MINIVI = 40206\nVENDOR_ID_GERRIT_BEINE_GMBH = 40207\nVENDOR_ID_SJM_STEFFANN = 40208\nVENDOR_ID_HIROSHIMA_UNIVERSITY = 40209\nVENDOR_ID_MATT_JCOUK = 40210\nVENDOR_ID_SHENZHEN_MEGMEET_ELECTRICAL_COLTD = 40211\nVENDOR_ID_PHV_CONFLUANCES = 40212\nVENDOR_ID_UNIVERSITY_COLLEGE_NORTHEN_DENMARK = 40213\nVENDOR_ID_ICEANS_INVENTIVE_COMPUTER_ENGINEERING_AND_NETWORK_SERVICE = 40214\nVENDOR_ID_ITF_EDV_FROESCHL_GMBH = 40215\nVENDOR_ID_GLOBAL_TRAFFIC_TECHNOLOGIES_LLC = 40216\nVENDOR_ID_BERTEL_SPA = 40217\nVENDOR_ID_WITZIG_THE_OFFICE_COMPANY_AG = 40218\nVENDOR_ID_HIRTLE_CALLAGHAN_CO = 40219\nVENDOR_ID_NORTHWESTERN_MICHIGAN_COLLEGE = 40220\nVENDOR_ID_INFRASTRUCTURES_TECHNOLOGIQUES_GALLIUM = 40221\nVENDOR_ID_FAMILY_HOME_CARE_HOSPICE_INC = 40222\nVENDOR_ID_MOLOTOVRO = 40223\nVENDOR_ID_WILLEM4EVER_BV = 40224\nVENDOR_ID_IMAGE_DATA_SYSTEMS = 40225\nVENDOR_ID_XNET_SOLUTIONS_INC_FORMERLY_XNETBOX_SOLUTIONS = 40226\nVENDOR_ID_DIGITAL_ONE = 40227\nVENDOR_ID_VALLEY_COMPUTERWORKS_INC_DBA_PARAGUS_STRATEGIC_IT = 40228\nVENDOR_ID_VIZIONR = 40229\nVENDOR_ID_MEDIKON_POLSKA_SP_Z_OO = 40230\nVENDOR_ID_BAPTIST_ST_ANTHONYS_HEALTH_SYSTEM = 40231\nVENDOR_ID_MICHEL_MESSERSCHMIDT = 40232\nVENDOR_ID_SANOMA_MEDIA_NETHERLANDS_BV = 40233\nVENDOR_ID_ANDREAS_ZIESCHANG = 40234\nVENDOR_ID_STADT_DORTMUND = 40235\nVENDOR_ID_DIPUTACI_DE_BARCELONA = 40236\nVENDOR_ID_THE_OFFICE_OF_THE_GOVERNMENT_CHIEF_INFORMATION_OFFICER_OF_THE_GOVERNMENT_OF_THE_HONG_KONG_SPECIAL_ADMINISTRATIVE_REGION = 40237\nVENDOR_ID_ROUTOMESSAGING = 40238\nVENDOR_ID_GRUPPO_EDITORIALE_LESPRESSO_SPA = 40239\nVENDOR_ID_OPENSKYCOM = 40240\nVENDOR_ID_OGDEN_TECHNOLOGY_CORPORATION = 40241\nVENDOR_ID_GNS_SCIENCE = 40242\nVENDOR_ID_3U_HOLDING_AG = 40243\nVENDOR_ID_SDAMO_GROUP_LLC = 40244\nVENDOR_ID_BNING_AUTOMATIONSTECHNOLOGIE_GMBH_CO_KG = 40245\nVENDOR_ID_OOO_LABORATORIYA_TREHMERNOGO_ZRENIYA = 40246\nVENDOR_ID_GGS_GERMAN_GRADUATE_SCHOOL_OF_MANAGEMENT_AND_LAW = 40247\nVENDOR_ID_NPO_TELECOM_JSC = 40248\nVENDOR_ID_VARGYAS_NETWORKS_INC_D_B_A_MAXXWAVE = 40249\nVENDOR_ID_FIBER_CONNECTIONS_INC = 40250\nVENDOR_ID_CORETANIUMNET = 40251\nVENDOR_ID_LONNIE_MANDIGO = 40252\nVENDOR_ID_RUNSTONE_TECHNOLOGY_CO_LTD = 40253\nVENDOR_ID_PARTICLE_SOFTWARE_INDUSTRIES = 40254\nVENDOR_ID_ZHIWAY_TECHNOLOGIES_CO_LTD = 40255\nVENDOR_ID_EFG_BANK_SA = 40256\nVENDOR_ID_ARCONTIA_TECHNOLOGY_AB = 40257\nVENDOR_ID_REWAG_REGENSBURGER_ENERGIE_UND_WASSERVERSORGUNG_AG_CO_KG = 40258\nVENDOR_ID_BRUDERHAUSDIAKONIE_STIFTUNG = 40259\nVENDOR_ID_MONGOOSE_METRICS_LLC = 40260\nVENDOR_ID_KEENSYSTEMS_BV = 40261\nVENDOR_ID_AIRBNB_INC = 40262\nVENDOR_ID_BANK_OF_LATVIA = 40263\nVENDOR_ID_CIRTEC_MEDICAL_SYSTEMS_LLC = 40264\nVENDOR_ID_DERBYSHIRE_COUNTY_COUNCIL = 40265\nVENDOR_ID_ZXC_LTD = 40266\nVENDOR_ID_ANITE_TRAVEL_LTD = 40267\nVENDOR_ID_KRZN = 40268\nVENDOR_ID_KENSHOO_LTD = 40269\nVENDOR_ID_FLEXAGON_GMBH = 40270\nVENDOR_ID_PECONIC_BAY_MEDICAL_CENTER = 40271\nVENDOR_ID_SLAC_NATIONAL_ACCELERATOR_LABORATORY = 40272\nVENDOR_ID_XEROATOM_GROUP_LTD = 40273\nVENDOR_ID_SPIRE_PAYMENTS_HOLDINGS_SARL = 40274\nVENDOR_ID_BLACKHOLEARCHIVESORG = 40275\nVENDOR_ID_NAVY_FEDERAL_CREDIT_UNION = 40276\nVENDOR_ID_CLOUDANT_INC = 40277\nVENDOR_ID_OCEAN_COUNTY_MONMOUTH_AMATEUR_RADIO_CLUB_INC_OMARC = 40278\nVENDOR_ID_HAMILTON_BONADUZ_AG = 40279\nVENDOR_ID_SOVTEST_INTERNET_LIMITED_COMPANY = 40280\nVENDOR_ID_BOTTEGA_VERDE_SRL = 40281\nVENDOR_ID_NSB_AS = 40282\nVENDOR_ID_SOPORCEL_SOCIEDADE_PORTUGUESA_DE_PAPEL_SA = 40283\nVENDOR_ID_WAVEX_TECHNOLOGY_LTD = 40284\nVENDOR_ID_BRITISH_COLUMBIA_INTERNATIONAL_SCHOOL_BANGKOK = 40285\nVENDOR_ID_SICLIC_SARL = 40286\nVENDOR_ID_PERFECTLY_POSH_LLC = 40287\nVENDOR_ID_DELTA_POWER_SOLUTIONS_INDIA_PVT_LTD = 40288\nVENDOR_ID_TRANSLATTICE_INC = 40289\nVENDOR_ID_GOVERNMENT_OF_DANE_COUNTY_WISCONSIN = 40290\nVENDOR_ID_CENTRAL_NATIONAL_AUSTRALIA_PTY_LTD = 40291\nVENDOR_ID_MEKELLE_UNIVERSITY = 40292\nVENDOR_ID_TG_BYTE_SOFTWARE_GMBH = 40293\nVENDOR_ID_OOO_JEWELRY_HOUSE_KRISTALL = 40294\nVENDOR_ID_DOGADO_INTERNET_GMBH = 40295\nVENDOR_ID_STOCKA = 40296\nVENDOR_ID_HYTERA_COMMUNICATIONS_COLTD = 40297\nVENDOR_ID_THAD_TOUCHTON = 40298\nVENDOR_ID_PETER_JANKE = 40299\nVENDOR_ID_RADIALOGICA_LLC = 40300\nVENDOR_ID_ESIS_ENERJI_VE_ELEKTRONIK_SAN_TIC_AS = 40301\nVENDOR_ID_OOZLUM = 40302\nVENDOR_ID_ANIX_NETWORKS_INC = 40303\nVENDOR_ID_WACKER_NEUSON_SE = 40304\nVENDOR_ID_ELETROSUL_CENTRAIS_ELTRICAS_S_A = 40305\nVENDOR_ID_POINTSTORE = 40306\nVENDOR_ID_GREAT_RIVER_TECHNOLOGY = 40307\nVENDOR_ID_FUNDAIA_CEATA = 40308\nVENDOR_ID_UNICART_EOOD = 40309\nVENDOR_ID_CUMULUS_NETWORKS_INC = 40310\nVENDOR_ID_ECHOES_TECHNOLOGIES_SAS = 40311\nVENDOR_ID_DENBRIDGE_MARINE_LTD = 40312\nVENDOR_ID_GORILL_SOLUTIONS = 40313\nVENDOR_ID_UNIVERSIDAD_EUROPEA_DE_MADRID = 40314\nVENDOR_ID_ML_SOLUTION = 40315\nVENDOR_ID_VASTRIVER_TECHNOLOGY_COLTD = 40316\nVENDOR_ID_ALLTECH_GROUP = 40317\nVENDOR_ID_BUDIKOM = 40318\nVENDOR_ID_CANTO_GMBH = 40319\nVENDOR_ID_CONVENE_NETWORKS = 40320\nVENDOR_ID_VITROCONNECT_GMBH = 40321\nVENDOR_ID_JAN_AXELSSON_DICOM2USB = 40322\nVENDOR_ID_BIG_NERD_RANCH = 40323\nVENDOR_ID_THE_WOMANS_CHRISTIAN_ASSOCIATION_OF_JAMESTOWN_NY = 40324\nVENDOR_ID_LEON_GAMING_LIMITED = 40325\nVENDOR_ID_EXPERTIZE = 40326\nVENDOR_ID_METAL_EXPERT_LLC = 40327\nVENDOR_ID_YUNOHOST = 40328\nVENDOR_ID_TANAZA_SRL = 40329\nVENDOR_ID_KUVISION_DIGITAL_TECHNOLOGY_LTD = 40330\nVENDOR_ID_MICRONICA_SRL = 40331\nVENDOR_ID_SYN_APPS_LLC = 40332\nVENDOR_ID_ENTHOUGHT = 40333\nVENDOR_ID_MERCURY_SECURITY_CORP = 40334\nVENDOR_ID_RMTECH = 40335\nVENDOR_ID_MERICLE_TECHNOLOGIES_LLC = 40336\nVENDOR_ID_CENTERS_FOR_MEDICARE_AND_MEDICAID_SERVICES = 40337\nVENDOR_ID_AIZOON_CONSULTING_SRL = 40338\nVENDOR_ID_ANOVIO_AG = 40339\nVENDOR_ID_MIERSCH_IT = 40340\nVENDOR_ID_DALMARTIN_LTD = 40341\nVENDOR_ID_CRONLAB_LTD = 40342\nVENDOR_ID_E_SALES_SOLUES_DE_INTERGRAO = 40343\nVENDOR_ID_FALK_ONLINE = 40344\nVENDOR_ID_JRE_ASSOCIATES_INC = 40345\nVENDOR_ID_BELARUSIAN_UNIVERSAL_COMMODITY_EXCHANGE = 40346\nVENDOR_ID_DUIT_GMBH = 40347\nVENDOR_ID_SNMART_GRID_NORWAY_AS = 40348\nVENDOR_ID_EICSYS_GMBH = 40349\nVENDOR_ID_HEALTH_SCIENCES_LIBRARIES_CONSORTIUM = 40350\nVENDOR_ID_XO_COMMUNICATIONS_LLC = 40351\nVENDOR_ID_AMERICAN_ELECTRIC_POWER = 40352\nVENDOR_ID_CIRRUS_SOFTWARE_ENGINEERING_LLC = 40353\nVENDOR_ID_SUTTLE_APPARATUS = 40354\nVENDOR_ID_DOMANTIC = 40355\nVENDOR_ID_IT_CE = 40356\nVENDOR_ID_MICHAEL_BUTH_IT_CONSULTING = 40357\nVENDOR_ID_MERCADO_LIBRE_SRL = 40358\nVENDOR_ID_ZEPPELIN_GMBH = 40359\nVENDOR_ID_IP_TOTAL_SOFTWARE_SA = 40360\nVENDOR_ID_XENYA_DOO = 40361\nVENDOR_ID_CAMBRIDGE_COMMUNICATION_SYSTEMS = 40362\nVENDOR_ID_GALAMBOS_DNIEL = 40363\nVENDOR_ID_TRINITY_DESKTOP_PROJECT = 40364\nVENDOR_ID_WEICHI_CONSULTING_LLC = 40365\nVENDOR_ID_SHADRINSKY_TELEPHONNY_ZAVOD_SHTZ = 40366\nVENDOR_ID_ELCOM_INTERNATIONAL_PVT_LTD = 40367\nVENDOR_ID_DATA_1_LTD = 40368\nVENDOR_ID_GRUPPENRICHTLINIENDE = 40369\nVENDOR_ID_SOCIALBAKERS_A_S = 40370\nVENDOR_ID_FORCARE_BV = 40371\nVENDOR_ID_CELAB_LTD = 40372\nVENDOR_ID_HEALTHFORCE_PARTNERS = 40373\nVENDOR_ID_ODYA_BILGISAYAR_VE_TEKNOLOJI_URUNLERI_SAN_VE_TIC_LTD_STI = 40374\nVENDOR_ID_BAYPORT_FINANCIAL_SERVICES = 40375\nVENDOR_ID_ASTOREX_CORP = 40376\nVENDOR_ID_INDEPENDENCE_SCHOOL_DISTRICT = 40377\nVENDOR_ID_INNOVATIVE_TECHNOLOGY_SOLUTIONS_INC_2 = 40378\nVENDOR_ID_LOWER_BUCKS_HOSPITAL = 40379\nVENDOR_ID_ARKOLOGIC_INC = 40380\nVENDOR_ID_GOLUB_CAPITAL = 40381\nVENDOR_ID_KLIMAT_PROF_CO = 40382\nVENDOR_ID_CAME_CANCELLI_AUTOMATICI_SPA = 40383\nVENDOR_ID_ASSOCIATION_OF_FRIENDS_OF_JAPANESE_CULTURE_SPJK = 40384\nVENDOR_ID_ROSE_DATASYSTEMS_INC = 40385\nVENDOR_ID_INSTITUTO_NACIONAL_DE_SEGURANA_SOCIAL = 40386\nVENDOR_ID_MEDIATREE_SAS = 40387\nVENDOR_ID_EUROSEL = 40388\nVENDOR_ID_FACULTAD_REGIONAL_CORDOBA_UNIVERSIDAD_TECNOLGICA_NACIONAL = 40389\nVENDOR_ID_SHALE_INLAND_HOLDINGS_LLC = 40390\nVENDOR_ID_ECKS_THREE_LTD = 40391\nVENDOR_ID_MDV_SOFT = 40392\nVENDOR_ID_PHANTASY_CONCEPTS = 40393\nVENDOR_ID_OPTOGAN_GROUP = 40394\nVENDOR_ID_25_SEVEN_SYSTEMS = 40395\nVENDOR_ID_LUMINO_LICHT_ELEKTRONIK_GMBH = 40396\nVENDOR_ID_PIRATEPARTEI_LTZEBUERG = 40397\nVENDOR_ID_SCOUT_TRADING_LLC = 40398\nVENDOR_ID_HUNEED_TECHNOLOGIES_COLTD = 40399\nVENDOR_ID_CORTIJODELRIONET = 40400\nVENDOR_ID_VIDSCALE_INC = 40401\nVENDOR_ID_CRYPTONECTOR_LLC = 40402\nVENDOR_ID_DETACHED = 40403\nVENDOR_ID_VESTIAIRE_COLLECTIVE = 40404\nVENDOR_ID_UAB_FORTEVENTO = 40405\nVENDOR_ID_CADIS = 40406\nVENDOR_ID_SMARTBOX_EXPERIENCE_LIMITED = 40407\nVENDOR_ID_PHILIP_CULLEN_LTD = 40408\nVENDOR_ID_YEEJOIN_BEIJING_TECHNOLOGY_COMPANY_LIMITED = 40409\nVENDOR_ID_BOXELEVEN = 40410\nVENDOR_ID_PAANSNET = 40411\nVENDOR_ID_OPTION_COMPUTERS_LTD = 40412\nVENDOR_ID_CONCORDUS_APPLICATIONS_INC = 40413\nVENDOR_ID_NEW_ENGLAND_BAPTIST_HOSPITAL_INC = 40414\nVENDOR_ID_SYMTHOUGHTS = 40415\nVENDOR_ID_HECTRONIC_GMBH = 40416\nVENDOR_ID_SUNSEA_OPMEX_TECHNOLOGIES_CO_LTD = 40417\nVENDOR_ID_NAG_LLC = 40418\nVENDOR_ID_PAWI_VERPACKUNGEN_AG = 40419\nVENDOR_ID_TUXUM_SECURE_SYSTEMS_S_L = 40420\nVENDOR_ID_ADORSYS_GMBH_CO_KG = 40421\nVENDOR_ID_SOLUTIONARY_INC = 40422\nVENDOR_ID_OSCEOLA_COUNTY_BOARD_OF_COUNTY_COMISSIONERS = 40423\nVENDOR_ID_TJ_SAMSON_COMMUNITY_HOSPITAL = 40424\nVENDOR_ID_LAIRD_TECHNOLOGIES = 40425\nVENDOR_ID_UNIFIED_COMMUNICATIONS_INC = 40426\nVENDOR_ID_KODOFON_JSC = 40427\nVENDOR_ID_SWIFTSERVE_LIMITED = 40428\nVENDOR_ID_UTOOLITY_GMBH = 40429\nVENDOR_ID_ZINUSOFT_SA_DE_CV = 40430\nVENDOR_ID_DRACAL_TECHNOLOGIES_INC = 40431\nVENDOR_ID_SQUAREONE_NETWORKS_INC = 40432\nVENDOR_ID_CENSUS_DIGITAL_INC = 40433\nVENDOR_ID_HUNTINGTON_NATIONAL_BANK = 40434\nVENDOR_ID_CYARA_SOLUTIONS_PTY_LTD = 40435\nVENDOR_ID_DBA_GLEN_BLACK = 40436\nVENDOR_ID_POLCOM_SP_Z_OO = 40437\nVENDOR_ID_OTTO_FRIEDRICH_UNIVERSITT_BAMBERG = 40438\nVENDOR_ID_I_M_SKAUGEN_SE = 40439\nVENDOR_ID_RESTFARBEDE = 40440\nVENDOR_ID_DARKDNA = 40441\nVENDOR_ID_ONAPP = 40442\nVENDOR_ID_COMPUTER_REHAB = 40443\nVENDOR_ID_ETEK_TECHNOLOGY_SHENZHEN_CO_LTD = 40444\nVENDOR_ID_TRADERS_SA = 40445\nVENDOR_ID_ORDBOGEN_A_S = 40446\nVENDOR_ID_FAVITE_INC = 40447\nVENDOR_ID_RATOCSYSTEMS_INC = 40448\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_EXTRATERRESTRISCHE_PHYSIK = 40449\nVENDOR_ID_UNIVERSITY_OF_OTTAWA_HEART_INSTITUTE = 40450\nVENDOR_ID_ALLENS_INC = 40451\nVENDOR_ID_CARE_TEAM_CONNECT_INC = 40452\nVENDOR_ID_SCHOOL_DISTRICT_59_PEACE_RIVER_SOUTH = 40453\nVENDOR_ID_JAGUAR_NETWORK = 40454\nVENDOR_ID_TMMCX = 40455\nVENDOR_ID_RADIO_SYSTEMS_LTD_2 = 40456\nVENDOR_ID_ZEN_ENTERTAINMENT_INC = 40457\nVENDOR_ID_EAST_TENNESSEE_STATE_UNIVERSITY = 40458\nVENDOR_ID_PAYMARK_LIMITED = 40459\nVENDOR_ID_SHENZHEN_SUPER_RICH_TECHNOLOGY_COLTD = 40460\nVENDOR_ID_MIRZO_ULUGBEK_PROFESSIONAL_COLLEGE_OF_INFORMATICS = 40461\nVENDOR_ID_CIDEON = 40462\nVENDOR_ID_TROY_GROUP_INC = 40463\nVENDOR_ID_A4ESSOR_SAS = 40464\nVENDOR_ID_NEISEO_BILISIM_TEKNOLOJILERI_SAN_VE_TIC_LTD_STI = 40465\nVENDOR_ID_WEST_MONROE_PARTNERS_LLC = 40466\nVENDOR_ID_NETRONOME_SYSTEMS_INC = 40467\nVENDOR_ID_LSE_LEADING_SECURITY_EXPERTS_GMBH = 40468\nVENDOR_ID_ARKANSAS_HEART_HOSPITAL = 40469\nVENDOR_ID_ECODOTA_ECOLO_FEDERAL_ASBL = 40470\nVENDOR_ID_ZIMORY_GMBH = 40471\nVENDOR_ID_SYNAPTURE = 40472\nVENDOR_ID_CHIANG_MAI_INTERNATIONAL_SCHOOL_CMIS = 40473\nVENDOR_ID_ALAGAS_NETWORK_PTE_LTD = 40474\nVENDOR_ID_IWEAVE_INC = 40475\nVENDOR_ID_WINNERTEL = 40476\nVENDOR_ID_GEOMEDIA = 40477\nVENDOR_ID_LEVELONE_COMMUNICATIONS_GMBH = 40478\nVENDOR_ID_40MM_HOLDINGS_LLC = 40479\nVENDOR_ID_OTS_LOGISTICS_GROUP_LTD = 40480\nVENDOR_ID_MIMEDIACOM_INC = 40481\nVENDOR_ID_PURE_STORAGE = 40482\nVENDOR_ID_VOLTA_ELECTRONICS_SRL = 40483\nVENDOR_ID_AUROVILLE_FOUNDATION = 40484\nVENDOR_ID_ONLINENET = 40485\nVENDOR_ID_STATE_OF_NEVADA_DEPT_OF_EMPLOYMENT_TRAINING_AND_REHABILITATION = 40486\nVENDOR_ID_TIMESAFER_INC = 40487\nVENDOR_ID_STAIGER_SCHWALD_PARTNER_AG = 40488\nVENDOR_ID_MINTLAB_BV = 40489\nVENDOR_ID_THE_DOT_NET_FACTORY_LLC = 40490\nVENDOR_ID_UCEEM_NETWORKS_INC = 40491\nVENDOR_ID_BALSEC_GMBH = 40492\nVENDOR_ID_TOYOTA_ADRIA_DOO = 40493\nVENDOR_ID_DITENITY_INC = 40494\nVENDOR_ID_ADVANCEDDIGITAL_INC = 40495\nVENDOR_ID_SHANGHAI_AEROSPACE_AUTOMOBILE_ELECTROMECHANICAL_COLTD = 40496\nVENDOR_ID_CROSS_ZLIN_AS = 40497\nVENDOR_ID_THIRD_SIGHT_PTE_LTD = 40498\nVENDOR_ID_SOCEL_VISIONOR = 40499\nVENDOR_ID_DAN_ELECTRONIC_LTD = 40500\nVENDOR_ID_MAF_CONSULTING_LTD = 40501\nVENDOR_ID_AT_CONSULTING = 40502\nVENDOR_ID_UNIVERSITY_OF_LOUISVILLE_HOSPITAL = 40503\nVENDOR_ID_KAMIL_BUJNIEWICZ = 40504\nVENDOR_ID_OUTSCALE = 40505\nVENDOR_ID_NSC_CORPRATION = 40506\nVENDOR_ID_TRAVELSKY_TECHNOLOGY_LIMITED = 40507\nVENDOR_ID_DYNAMIC_TELECOM = 40508\nVENDOR_ID_VOIPSWITCH = 40509\nVENDOR_ID_FOURTH_SECTOR_INNOVATIONS = 40510\nVENDOR_ID_DOGI_ENTERPRISE = 40511\nVENDOR_ID_HAMID_SAEED = 40512\nVENDOR_ID_WEIFANG_MINGJI_TECHNOLOGY_CO_LTD = 40513\nVENDOR_ID_SHENZHEN_HOWAH_NETWORK_COMMUNICATION_CO_LTD = 40514\nVENDOR_ID_BOIVIE_INC = 40515\nVENDOR_ID_STAFFORDSHIRE_COUNTY_COUNCIL = 40516\nVENDOR_ID_SHENZHEN_HEROTEL_TECH_COLTD = 40517\nVENDOR_ID_FORESIGHT = 40518\nVENDOR_ID_SPRDNET_AG = 40519\nVENDOR_ID_NOVARETO = 40520\nVENDOR_ID_METACLOUD_INC = 40521\nVENDOR_ID_MYOSCIENCE_INC = 40522\nVENDOR_ID_EAU_DE_WEB = 40523\nVENDOR_ID_REALEX_PAYMENTS = 40524\nVENDOR_ID_BUSINESS_INTELLIGENCE_DIRECT_LIMITED = 40525\nVENDOR_ID_REGISTRO_PUBLICO_DE_PANAMA = 40526\nVENDOR_ID_BANK_OF_CANADA = 40527\nVENDOR_ID_KOD_INTEGRATIONS_LLC = 40528\nVENDOR_ID_MASSXESS = 40529\nVENDOR_ID_AGENCE_UNIVERSITAIRE_DE_LA_FRANCOPHONIE = 40530\nVENDOR_ID_DR_STOLYARENKO_MEDICAL_CENTER = 40531\nVENDOR_ID_ZEPTONICS_PTY_LTD = 40532\nVENDOR_ID_VOICE_OF_RUSSIA = 40533\nVENDOR_ID_SIGNAMAX_AS = 40534\nVENDOR_ID_SVYAZKOMPLEKTSERVICE_LLC = 40535\nVENDOR_ID_WIELAND_WERKE_AG = 40536\nVENDOR_ID_NULL_VENTURES_LLC = 40537\nVENDOR_ID_SEAL_MAKER_PRODUKTIONS_UND_VERTRIEBS_GMBH = 40538\nVENDOR_ID_AQUTO = 40539\nVENDOR_ID_LPAR2RRD = 40540\nVENDOR_ID_MECSYS = 40541\nVENDOR_ID_SDL_FREDHOPPER = 40542\nVENDOR_ID_UDRUGA_POINT = 40543\nVENDOR_ID_IMPEDANCE_MISMATCH_LLC = 40544\nVENDOR_ID_INSIGHT_ENTERPRISES_INC = 40545\nVENDOR_ID_TENTIXO_NG_AB = 40546\nVENDOR_ID_AADVANCED_FILTERING_SERVICES = 40547\nVENDOR_ID_ID3AS = 40548\nVENDOR_ID_SYNCHROADCOM = 40549\nVENDOR_ID_OZTELL = 40550\nVENDOR_ID_BOOTABLE_CLUSTER_CD = 40551\nVENDOR_ID_SALCININKU_RAJONO_SAVIVALDYBES_ADMINISTRACIJA = 40552\nVENDOR_ID_BULGARTABAC_HOLDING_AD = 40553\nVENDOR_ID_TECOM = 40554\nVENDOR_ID_GARZ_FRICKE_GMBH = 40555\nVENDOR_ID_MOVING_POSSIBILITIES_LLC = 40556\nVENDOR_ID_TRIODOS_BANK_NV = 40557\nVENDOR_ID_ELECMOR = 40558\nVENDOR_ID_BPCE = 40559\nVENDOR_ID_NORSAT_INTERNATIONAL_INC = 40560\nVENDOR_ID_ALLOY_COMPUTER_PRODUCTS_AUST_PTY_LTD = 40561\nVENDOR_ID_OPEN_BROADCAST_SYSTEMS_LTD = 40562\nVENDOR_ID_CHRISTINE_STEUP_UNTERNEHMENSBERATUNG = 40563\nVENDOR_ID_STRIKEAD_LCC = 40564\nVENDOR_ID_BERUFSBILDENDE_SCHULEN_TECHNIK = 40565\nVENDOR_ID_FORTE_AUTOMATION_SYSTEM_INC = 40566\nVENDOR_ID_MELODON_SOFTWARE_INC = 40567\nVENDOR_ID_TREDEGAR_CORPORATION = 40568\nVENDOR_ID_HERNIS_SCAN_SYSTEMS_AS = 40569\nVENDOR_ID_RFOPTIC = 40570\nVENDOR_ID_SRT_COMMUNICATIONS_INC = 40571\nVENDOR_ID_CARLOS_DOMINGUES = 40572\nVENDOR_ID_VKLOPCOM = 40573\nVENDOR_ID_UKRAINIAN_COMPUTER_LABORATORY_LTD = 40574\nVENDOR_ID_TOURO_INFIRMARY = 40575\nVENDOR_ID_NOVATECH_LLC = 40576\nVENDOR_ID_KOCH = 40577\nVENDOR_ID_COMPUTING_POINT_LIMITED = 40578\nVENDOR_ID_VISTULA_UNIVERSITY = 40579\nVENDOR_ID_GLOBALSITE_UK = 40580\nVENDOR_ID_BIG_DUTCHMAN_LTD = 40581\nVENDOR_ID_IBLOCKS_LTD = 40582\nVENDOR_ID_FEDERAL_SERVICE_STATE_REGISTRATION_CADASTRE_AND_CARTOGRAPHY_IN_MOSCOW = 40583\nVENDOR_ID_PETERSBURG_STATE_UNIVERSITY_OF_RAILWAYS_TRANSPORT = 40584\nVENDOR_ID_BOX_UK_LIMITED = 40585\nVENDOR_ID_ROCKY_MOUNTAIN_COLLEGE = 40586\nVENDOR_ID_NEPTEC_OS_INC = 40587\nVENDOR_ID_TRIKEAPPS_PTY_LTD = 40588\nVENDOR_ID_INDOCHINA_TELECOMMUNICATION_TECHNOLOGY_JSC_ITT = 40589\nVENDOR_ID_CLICKBRIDGE_INC = 40590\nVENDOR_ID_AVATEQ_CORP = 40591\nVENDOR_ID_IDK_CORPORATION = 40592\nVENDOR_ID_IBERDROLA_USA_MANAGEMENT_CORPORATION = 40593\nVENDOR_ID_ILOGIXX_LIMITED = 40594\nVENDOR_ID_NB_SOFTWARE = 40595\nVENDOR_ID_COMTECFTTERER = 40596\nVENDOR_ID_NETPROBE_LLC = 40597\nVENDOR_ID_GEOPOST_UK_LTD = 40598\nVENDOR_ID_QUICK_OID_REGISTRY_QUICK_OIDORG_ROMAN_RYBALKO = 40599\nVENDOR_ID_EWA_LTD = 40600\nVENDOR_ID_EMARIS_LIMITED = 40601\nVENDOR_ID_VYTAUTAS_MAGNUS_UNIVERSITY = 40602\nVENDOR_ID_HARVARD_PILGRIM_HEALTH_CARE = 40603\nVENDOR_ID_GEOSYNC_MICROWAVE_INC = 40604\nVENDOR_ID_YOUNES_SLEEP_TECHNOLOGIES = 40605\nVENDOR_ID_SCRIPPS_HEALTH = 40606\nVENDOR_ID_MENARA_NETOWRKS = 40607\nVENDOR_ID_BARS_NPK_LTD = 40608\nVENDOR_ID_NORDSTROM = 40609\nVENDOR_ID_DOCSTOC_INC = 40610\nVENDOR_ID_KEY_SOFTWARE_DEVELPMENT = 40611\nVENDOR_ID_SOFTPRO_SRL = 40612\nVENDOR_ID_INSTITUTO_TECNOLGICO_DE_INFORMTICA = 40613\nVENDOR_ID_GUANGDONG_EAST_POWER_COLTD = 40614\nVENDOR_ID_OLYMPUS_CORPORATION_OF_THE_AMERICAS = 40615\nVENDOR_ID_PRAGMATICA_LLC = 40616\nVENDOR_ID_WIMACTEL_INC = 40617\nVENDOR_ID_INTECHNE_TECNOLOGIA_DA_INFORMAO = 40618\nVENDOR_ID_FIRST_GULF_BANK_PJSC = 40619\nVENDOR_ID_WELCOME_ITALIA_SPA = 40620\nVENDOR_ID_CENTRUM_HOLDINGS_SRO = 40621\nVENDOR_ID_COVEA_INSURANCE_PLC = 40622\nVENDOR_ID_MORGOWICZ_INC = 40623\nVENDOR_ID_WILLOPS_MANAGEMENT = 40624\nVENDOR_ID_SBO_CENTRE_OF_INFORMATION_TECHNOLOGY_OF_THE_ORENBURG_REGION = 40625\nVENDOR_ID_WEB_DE_CONFIANZA_ANDALUZA_SCOOPAND = 40626\nVENDOR_ID_JEFFERSON_REGIONAL_MEDICAL_CENTER = 40627\nVENDOR_ID_FORMPIPE_SOFTWARE_A_S = 40628\nVENDOR_ID_LEXINGTON_SL = 40629\nVENDOR_ID_CREXENDO_INC = 40630\nVENDOR_ID_AVA_COMMUNICATIONS = 40631\nVENDOR_ID_TRB_AG = 40632\nVENDOR_ID_SCAN_ENGINEERING_TELECOM_CJSC = 40633\nVENDOR_ID_WILLWAY_SA = 40634\nVENDOR_ID_OPVIZOR_GMBH = 40635\nVENDOR_ID_USE_SYSTEM_ENGINEERING_BV = 40636\nVENDOR_ID_DELISERVICE_PUNNITSE_SST_OY = 40637\nVENDOR_ID_BSC_NUTRITION_LTD = 40638\nVENDOR_ID_PROFI_UC_LTD = 40639\nVENDOR_ID_POLISNAB_JSC = 40640\nVENDOR_ID_DIERICHSWEILER_UNTERNEHMENS_UND_PROZESSBERATUNG_GMBH = 40641\nVENDOR_ID_GARDADO_SRO = 40642\nVENDOR_ID_BROADPEAK = 40643\nVENDOR_ID_FORMANEK = 40644\nVENDOR_ID_UFAL_UNIVERSIDADE_FEDERAL_DE_ALAGOAS = 40645\nVENDOR_ID_INET_TELECOMS_LTD_VOIPFONE = 40646\nVENDOR_ID_HELVETAS_SWISS_INTERCOOPERATION = 40647\nVENDOR_ID_AREAL = 40648\nVENDOR_ID_ACUMENTRICS_CORPORATION = 40649\nVENDOR_ID_INTERMEDIA_ENTERPRISES = 40650\nVENDOR_ID_BEIJING_HUASUN_UNICREATE_TECHNOLOGY_LTD = 40651\nVENDOR_ID_ILLINOIS_WESLEYAN_UNIVERSITY = 40652\nVENDOR_ID_BITTOO = 40653\nVENDOR_ID_CONSRCIO_DE_INFORMTICA_NA_GESTO_PBLICA_MUNICIPAL = 40654\nVENDOR_ID_NANJING_WLANEASE_CO_LTD = 40655\nVENDOR_ID_STATE_INDEPENDENT_ESTABLISHMENT_TULA_REGION_CENTER_OF_INFORMATION_TECHNOLOGIES = 40656\nVENDOR_ID_EXPERIENCE4YOU_GMBH = 40657\nVENDOR_ID_DELTA_MECCANICA_SRL = 40658\nVENDOR_ID_OREGANO_SYSTEMS_DESIGN_CONSULTING_GESMBH = 40659\nVENDOR_ID_SOUTHERN_RECORD_DISTRIBUTORS_LTD = 40660\nVENDOR_ID_AIRWAVE_SOLUTIONS = 40661\nVENDOR_ID_NISZ_CO = 40662\nVENDOR_ID_KUPSON_SPOL_S_RO = 40663\nVENDOR_ID_NOBLIS_INC = 40664\nVENDOR_ID_AKRON_GROUP = 40665\nVENDOR_ID_ZITO_MEDIA = 40666\nVENDOR_ID_BRTOKEN_IND_E_COM_DE_PRODUTOS_ELETRNICOS_LTDA = 40667\nVENDOR_ID_NEC_NEW_ZEALAND_LTD = 40668\nVENDOR_ID_MICROLAB_RF_LTD = 40669\nVENDOR_ID_LANKA_GOVERNMENT_INFORMATION_INFRASTUCTURE = 40670\nVENDOR_ID_RADINET_COMMUNICATIONS_INC = 40671\nVENDOR_ID_FIBER_SENSYS_INC = 40672\nVENDOR_ID_UNIGINE_INC = 40673\nVENDOR_ID_SAIT_FORMERLY_SAIT_ZENITEL = 40674\nVENDOR_ID_GEIGER_BDT_GMBH = 40675\nVENDOR_ID_MICROSEMI_CORPORATION = 40676\nVENDOR_ID_RKF_ENGINEERING_SOLUTIONS_LLC = 40677\nVENDOR_ID_NEXURA_INTERNACIONAL_SA = 40678\nVENDOR_ID_CENTRE_HOSPITALIER_DE_FOUGERES = 40679\nVENDOR_ID_LA_TROBE_UNIVERSITY = 40680\nVENDOR_ID_ELNO = 40681\nVENDOR_ID_THANISORG = 40682\nVENDOR_ID_OPEN_GRID_EUROPE_GMBH = 40683\nVENDOR_ID_APPDYNAMICS = 40684\nVENDOR_ID_KAFINATED_KODE_INC = 40685\nVENDOR_ID_ISSAC_SYSTEMS_INC = 40686\nVENDOR_ID_EZAMBER = 40687\nVENDOR_ID_KUM_AND_GO = 40688\nVENDOR_ID_DIGITAL_PROCESSING_SYSTEMS = 40689\nVENDOR_ID_MBTECHNOLOGY_LTD = 40690\nVENDOR_ID_CROSSTEL_INC = 40691\nVENDOR_ID_THE_ZAP_GROUP = 40692\nVENDOR_ID_INTER_VEHICLE_COMMUNICATION = 40693\nVENDOR_ID_ANTROU = 40694\nVENDOR_ID_BITPLANET_INC = 40695\nVENDOR_ID_IDENETWORK = 40696\nVENDOR_ID_ALMA_MANU_OY = 40697\nVENDOR_ID_TELISWITCH_SOLUTIONS = 40698\nVENDOR_ID_LEXSOFT_LTD = 40699\nVENDOR_ID_M_CUBE_SPA = 40700\nVENDOR_ID_VITERA_HEALTHCARE_SOLUTIONS = 40701\nVENDOR_ID_SAN_MATEO_MEDICAL_CENTER = 40702\nVENDOR_ID_HOKKAIDO_TRACKS = 40703\nVENDOR_ID_AMSTAR_CREATIVE_LTD = 40704\nVENDOR_ID_SIGNAL_PROCESSING_DEVICES = 40705\nVENDOR_ID_AGMF_PRVOYANCE_UNION_DE_MUTUELLES_SOUMISE_AU_LIVRE_II_DU_CODE_DE_LA_MUTUALIT_FILIALE_DE_GPM = 40706\nVENDOR_ID_ALETURO_GROUP = 40707\nVENDOR_ID_RHYTHM_ENGINEERING_LLC = 40708\nVENDOR_ID_JIAHENG_MEDICAL_TECHNOLOGY_CO_LTD = 40709\nVENDOR_ID_GRASSHOPPER = 40710\nVENDOR_ID_DSTA_SL = 40711\nVENDOR_ID_DHCPCD_PROJECT = 40712\nVENDOR_ID_MIGAMEORG = 40713\nVENDOR_ID_ACCELERA_MOBILE_BROADBAND_INC = 40714\nVENDOR_ID_INNERWORKINGS = 40715\nVENDOR_ID_KYLE_BRANTLEY = 40716\nVENDOR_ID_CONDE_NAST = 40717\nVENDOR_ID_RELYSYS_TECHNOLOGIES_INDIA_PRIVATE_LIMITED = 40718\nVENDOR_ID_THE_LUBRIZOL_CORPORATION = 40719\nVENDOR_ID_TEXAS_DEPARTMENT_OF_PUBLIC_SAFETY = 40720\nVENDOR_ID_FORMFACTOR_INC = 40721\nVENDOR_ID_HUVITZ = 40722\nVENDOR_ID_NEW_ZEALAND_DEFENCE_FORCE = 40723\nVENDOR_ID_UBISOFT_ENTERTAINMENT = 40724\nVENDOR_ID_INTUNE_NETWORKS_LIMITED = 40725\nVENDOR_ID_CIPHRON_GMBH = 40726\nVENDOR_ID_COSIUM = 40727\nVENDOR_ID_FALCK_DANMARK_A_S = 40728\nVENDOR_ID_LAND_DATA_GMBH = 40729\nVENDOR_ID_NEOCOM_SOFTWARE_LTD = 40730\nVENDOR_ID_ELEPHANT_TALK_COMMUNICATIONS_CORP = 40731\nVENDOR_ID_CONSORTIUM_FOR_SMART_ENERGY_PROFILE_2_INTEROPERABILITY = 40732\nVENDOR_ID_SABZFAAM_ICT = 40733\nVENDOR_ID_KARINA_MOBILE_SOLUTIONS = 40734\nVENDOR_ID_DOCTUSOFT_LTD = 40735\nVENDOR_ID_AUDEO_INC = 40736\nVENDOR_ID_NATIONAL_LABOR_RELATIONS_BOARD = 40737\nVENDOR_ID_THE_CHILDRENS_INSTITUTE_OF_PITTSBURGH = 40738\nVENDOR_ID_AFFIRMATIVE_INSURANCE_HOLDINGS_INC = 40739\nVENDOR_ID_DIRECTOUT_GMBH = 40740\nVENDOR_ID_FLYING_HORSE_PRODUCTIONS_LLC = 40741\nVENDOR_ID_PDI_NINTH_HOUSE = 40742\nVENDOR_ID_REISSMANN_IT_SERVICES = 40743\nVENDOR_ID_CENTER_FOR_TRANSLATIONAL_MOLECULAR_MEDICINE_CTMM_TRAIT = 40744\nVENDOR_ID_WIVALLEY_INC = 40745\nVENDOR_ID_GOZUBUYUKOGLU = 40746\nVENDOR_ID_RADIANT_LOGIC_INC = 40747\nVENDOR_ID_IONODES_INC = 40748\nVENDOR_ID_CORFIRE_SK_CC_USA_INC = 40749\nVENDOR_ID_SYNRC_RESEARCH_CENTER = 40750\nVENDOR_ID_HOMEMAIL_ROSS_JOHNSON = 40751\nVENDOR_ID_BARRICANE_TECHNOLOGY_LTD = 40752\nVENDOR_ID_BEIJING_TIME_ANTAEUS_MEDIA_TECHNOLOGY_COLTD = 40753\nVENDOR_ID_LIIKENNEVIRASTO_TVT = 40754\nVENDOR_ID_ACTICOM = 40755\nVENDOR_ID_KWDOGGETT_FINE_PAPER = 40756\nVENDOR_ID_MOSCOW_COMMERCIAL_BANK_MOSCOMPRIVATBANK_ZAO = 40757\nVENDOR_ID_ELTEK_POLSKA = 40758\nVENDOR_ID_EGRIMA_BUISNESSCENTER = 40759\nVENDOR_ID_TOMRA_SYSTEMS_ASA = 40760\nVENDOR_ID_MIDEYE_AB = 40761\nVENDOR_ID_HITEC_ELECTRIC_BV = 40762\nVENDOR_ID_KENNEDY_UNIVERSITY_HOSPITALS_INC = 40763\nVENDOR_ID_RESONATE_INSIGHTS = 40764\nVENDOR_ID_HSENID_SOFTWARE_SINGAPORE_PVT_LIMITED = 40765\nVENDOR_ID_XENODE_CO_LTD = 40766\nVENDOR_ID_REPORTING_ESTNDAR_SL = 40767\nVENDOR_ID_HOTWORDS_TECNOLOGIA = 40768\nVENDOR_ID_VENDSCREEN = 40769\nVENDOR_ID_PARTHEAS = 40770\nVENDOR_ID_VISUAPPS_GMBH = 40771\nVENDOR_ID_SUPERMEDIA_LLC = 40772\nVENDOR_ID_THE_PROSECUTOR_GENERALS_OFFICE_OF_UKRAINE = 40773\nVENDOR_ID_NAGSNMP = 40774\nVENDOR_ID_TRIPODWORKS_COLTD = 40775\nVENDOR_ID_KALYAN_KADIYALA = 40776\nVENDOR_ID_QIN_TECHNOLOGY_SPA = 40777\nVENDOR_ID_UNASSIGNED_47 = 40778\nVENDOR_ID_2REALLIFE = 40779\nVENDOR_ID_SMARTPIPE_SOLUTIONS = 40780\nVENDOR_ID_CYNAPTICA = 40781\nVENDOR_ID_DYNE_SYSTEM_CO_LTD = 40782\nVENDOR_ID_ICOMETRIX = 40783\nVENDOR_ID_KUMAHIRA_CO_LTD = 40784\nVENDOR_ID_OPTRO_COLTD = 40785\nVENDOR_ID_UNASSIGNED_48 = 40786\nVENDOR_ID_COMPUMATICA_SECURE_NETWORKS = 40787\nVENDOR_ID_ABEGGLEN_MANAGEMENT_CONSULTANTS_AG = 40788\nVENDOR_ID_LOGIX = 40789\nVENDOR_ID_SIMPLE_SOLUTION_TECHNOLOGIES_LLC = 40790\nVENDOR_ID_BEIJING_OMATE_DIGITAL_TECHNOLOGY_COLTD = 40791\nVENDOR_ID_EXPRESS_INTERFRACHT_INTERNATIONALE_SPEDITION_GMBH = 40792\nVENDOR_ID_ANDELSKASSEN_JAK = 40793\nVENDOR_ID_IG_METALL_VORSTANDSVERWALTUNG = 40794\nVENDOR_ID_OTAKU_REALMNET = 40795\nVENDOR_ID_ICBPI_SPA = 40796\nVENDOR_ID_SIDION = 40797\nVENDOR_ID_3D_P = 40798\nVENDOR_ID_SWISS_INTERNATIONAL_AIR_LINES_LTD = 40799\nVENDOR_ID_SMART_REFILL_I_HELSINGBORG_AB = 40800\nVENDOR_ID_FIVECO = 40801\nVENDOR_ID_INDRA_NAVIA_AS = 40802\nVENDOR_ID_NETRAPID_GMBH_CO_KG = 40803\nVENDOR_ID_ULTEO = 40804\nVENDOR_ID_NIMBUS_DIRECTORY_SERVICES = 40805\nVENDOR_ID_ICBTECH_DOO = 40806\nVENDOR_ID_SEMYONORG = 40807\nVENDOR_ID_WI_FI_ALLIANCE = 40808\nVENDOR_ID_TOHOKU_GAKUIN_UNIVERSITY = 40809\nVENDOR_ID_BUPT_GUOAN_BROADBAND_NETWORK_TECHNOLOGY_COLTD = 40810\nVENDOR_ID_WEBSISTEM = 40811\nVENDOR_ID_DIE_FIRMA_GMBH = 40812\nVENDOR_ID_AGENTURADMINDE = 40813\nVENDOR_ID_GARDEN_CITY_HOSPITAL = 40814\nVENDOR_ID_DR_THALMAIR = 40815\nVENDOR_ID_ECODIGI_TECNOLOGIA_E_SERVIOS_LTDA = 40816\nVENDOR_ID_DR_MARTIN_FROEHLICH = 40817\nVENDOR_ID_CYG_SUNRI_COLTD = 40818\nVENDOR_ID_PROVIDENT_SOLUTIONS_LLC = 40819\nVENDOR_ID_OPENIPMI = 40820\nVENDOR_ID_PUBLIC_PROTECTOR_SOUTH_AFRICA = 40821\nVENDOR_ID_HAGEDORN_INFORMATIONSSYSTEME_GMBH = 40822\nVENDOR_ID_NVABLE_LIMITED = 40823\nVENDOR_ID_QORE_TECHNOLOGIES_SRO = 40824\nVENDOR_ID_VERITEKNIK = 40825\nVENDOR_ID_SHORT_FILMS_4_U_LIMITED = 40826\nVENDOR_ID_LIFELAN_TECHNOLOGY_CO_LTD = 40827\nVENDOR_ID_CHIERU_CO_LTD = 40828\nVENDOR_ID_CAMBRIDGE_INDUSTRIES_GROUP_CIG = 40829\nVENDOR_ID_QIAOYINFO = 40830\nVENDOR_ID_DOMENIKSS_SIA = 40831\nVENDOR_ID_MICRONOVA_AG = 40832\nVENDOR_ID_HYTEC_ELECTRONICS_LTD = 40833\nVENDOR_ID_KBLER_IT = 40834\nVENDOR_ID_DEPARTMENT_OF_MICROELECTRONICS_AND_COMPUTER_SCIENCE_LODZ_UNIVERSITY_OF_TECHNOLOGY = 40835\nVENDOR_ID_BLACKBIRD_GROUP_INC = 40836\nVENDOR_ID_ITECH_COMRCIO_IMPORTAO_E_EXPORTAO_DE_COMPONENTES_ELETRNICOS_LTDA = 40837\nVENDOR_ID_COMMUNE_DE_NIORT = 40838\nVENDOR_ID_SARDA_SOUTH_WALES = 40839\nVENDOR_ID_RAINYDAYZ = 40840\nVENDOR_ID_N_SYSTEMS_GMBH_CO_KG = 40841\nVENDOR_ID_A10_NETWORKS = 40842\nVENDOR_ID_CHATMONGERS_LLC = 40843\nVENDOR_ID_MACC_LLC = 40844\nVENDOR_ID_VERIS_INDUSTRIES = 40845\nVENDOR_ID_MONTPELIER_TECHNICAL_RESOURCES_LTD = 40846\nVENDOR_ID_CRDP_DE_LACADMIE_DE_VERSAILLES = 40847\nVENDOR_ID_VERIFYLE_INC = 40848\nVENDOR_ID_CEIEC_ELECTRIC_TECHNOLOGY_INC = 40849\nVENDOR_ID_KONGSBERG_SPACETEC_AS = 40850\nVENDOR_ID_IPCONTACT_SOFTWARE = 40851\nVENDOR_ID_MAIN_LINE_HEALTH_INC = 40852\nVENDOR_ID_ATOSS_CSD_SOFTWARE_GMBH = 40853\nVENDOR_ID_WH_IRELAND_LIMITED = 40854\nVENDOR_ID_UNIVERSITY_OF_PITTSBURGH = 40855\nVENDOR_ID_TOFINO_SECURITY = 40856\nVENDOR_ID_MIRA_SOFT = 40857\nVENDOR_ID_MODEMTEC_SPOL_S_R_O = 40858\nVENDOR_ID_VOSGELIS = 40859\nVENDOR_ID_PROTOCOM_TECHNOLOGY = 40860\nVENDOR_ID_SILENT_SOFTWARES_PVT_LTD = 40861\nVENDOR_ID_SYSTEMA_TECHNOLOGIES_SA = 40862\nVENDOR_ID_UP_NXT = 40863\nVENDOR_ID_LARCAN_INC = 40864\nVENDOR_ID_MAJORPOWER_CORPORATION = 40865\nVENDOR_ID_ARCUSYS_OY = 40866\nVENDOR_ID_BOARDROOM_PTY_LIMITED = 40867\nVENDOR_ID_GENEW_TECHNOLOGIES_COLTD = 40868\nVENDOR_ID_TAIWAN_CA_INC = 40869\nVENDOR_ID_CLOSED_JOINT_STOCK_COMPANY_INTERFAX = 40870\nVENDOR_ID_POWEROASIS = 40871\nVENDOR_ID_PARDAZESHGARAN_SAMAN_BANKING_SOLUTIONS = 40872\nVENDOR_ID_SEMAFONE_LIMITED = 40873\nVENDOR_ID_LL_CONTROL_SOLUTIONS_INTERNATIONAL_PTY_LTD = 40874\nVENDOR_ID_OFFICECORE = 40875\nVENDOR_ID_PRESSENS_FLLESINDKB = 40876\nVENDOR_ID_MYPROCUREMENT = 40877\nVENDOR_ID_VENERE_NET_SRL = 40878\nVENDOR_ID_VERION_TEKNOLOJI_AS = 40879\nVENDOR_ID_DBI_SOFTWARE_INC = 40880\nVENDOR_ID_MUTUALINK_INC = 40881\nVENDOR_ID_STEP_ONE_AS = 40882\nVENDOR_ID_BEIJING_CANGLANG_TV_TECHNOLOGIES_CO_LTD = 40883\nVENDOR_ID_INSTITUTO_FEDERAL_FLUMINENSE_IFF = 40884\nVENDOR_ID_ELCUS = 40885\nVENDOR_ID_KOMMUNALES_RECHENZENTRUM_MINDEN_RAVENSBERG_LIPPE = 40886\nVENDOR_ID_EDEKA_MINDEN_HANNOVER_IT_LOGISTIC_SERVICE_GMBH = 40887\nVENDOR_ID_UNIVERSITAETSKLINIKUM_TUEBINGEN = 40888\nVENDOR_ID_GLOBAL_INVACOM_LTD = 40889\nVENDOR_ID_HARDOMO = 40890\nVENDOR_ID_RDC_INC_DBA_LYNTEC = 40891\nVENDOR_ID_ABIMUS = 40892\nVENDOR_ID_UNIVERSITY_OF_THE_ARTS_HELSINKI = 40893\nVENDOR_ID_CORY_NET = 40894\nVENDOR_ID_VRVIS_ZENTRUM_FR_VIRTUAL_REALITY_UND_VISUALISIERUNG_FORSCHUNGS_GMBH = 40895\nVENDOR_ID_PEARSON_TECHNOLOGY = 40896\nVENDOR_ID_CS_VERITAS = 40897\nVENDOR_ID_CIRRIES_TECHNOLOGIES_INC = 40898\nVENDOR_ID_EVO_GROUP_TECHNOLOGIES_INC = 40899\nVENDOR_ID_CYBERSMART_LTD = 40900\nVENDOR_ID_COURTNEYORGZA = 40901\nVENDOR_ID_TRANSLINK_SOUTH_COAST_BRITISH_COLUMBIA_TRANSPORTATION_AUTHORITY = 40902\nVENDOR_ID_THONGFFORONGCYF = 40903\nVENDOR_ID_BRISBANE_CITY_COUNCIL = 40904\nVENDOR_ID_ALTRONIX_CORPORATION = 40905\nVENDOR_ID_DIVITEL_DEVELOPMENT_LDA = 40906\nVENDOR_ID_OOO_ADICOM = 40907\nVENDOR_ID_AUTORITATEA_NAIONAL_PENTRU_ADMINISTRARE_I_REGLEMENTARE_N_COMUNICAII_ANCOM = 40908\nVENDOR_ID_BIGBROTHER_SECURITY_SYSTEMS = 40909\nVENDOR_ID_BRADLEY_UNIVERSITY = 40910\nVENDOR_ID_FREEDOMPAY_INC = 40911\nVENDOR_ID_KULCS_SOFT_NYRT = 40912\nVENDOR_ID_QEM_SOFTWARE_LTD = 40913\nVENDOR_ID_SYMANITRON = 40914\nVENDOR_ID_WANDISCO_INC = 40915\nVENDOR_ID_BERICO_TECHNOLOGIES = 40916\nVENDOR_ID_LENDER_PROCESSING_SERVICE = 40917\nVENDOR_ID_RESPONSETAP_LIMITED = 40918\nVENDOR_ID_VNOMICS = 40919\nVENDOR_ID_ICAHN_SCHOOL_OF_MEDICINE_AT_MOUNT_SINAI = 40920\nVENDOR_ID_MIKROM_MIKROELEKTRONIK_FR_MULTIMEDIA_GMBH = 40921\nVENDOR_ID_TELYDATA_CA_LTDA = 40922\nVENDOR_ID_ISLE_OF_CAPRI_CASINOS_INC = 40923\nVENDOR_ID_AYALINE = 40924\nVENDOR_ID_TRENKWLADER_SOLUTIONS_SRO = 40925\nVENDOR_ID_MAJIC = 40926\nVENDOR_ID_SID_SOLUTIONS_INC = 40927\nVENDOR_ID_ESPRIT_DIGITAL_LTD = 40928\nVENDOR_ID_BARRETT_CONSULTING_GROUP_PTY_LTD = 40929\nVENDOR_ID_MAGREX_CO_LTD = 40930\nVENDOR_ID_VICTORIAN_ELECTORAL_COMMISSION = 40931\nVENDOR_ID_SUCCWARE_BEIJING_SOFTWARE_SYSTEM_CO_LTD = 40932\nVENDOR_ID_QIZHI_TECHNOLOGIES = 40933\nVENDOR_ID_LIG_NEX1 = 40934\nVENDOR_ID_LTD_MEDSCANN = 40935\nVENDOR_ID_ST_ELISABETH_CONVENT = 40936\nVENDOR_ID_AXELPROD_GSM_TRANSMISSION = 40937\nVENDOR_ID_MOBILEIRON_INC = 40938\nVENDOR_ID_ALPHONSO = 40939\nVENDOR_ID_ROYAL_NEW_ZEALAND_PLUNKET_SOCIETY_INCORPORATED = 40940\nVENDOR_ID_TAMARA_ELEKTRONIK_LTDSTI = 40941\nVENDOR_ID_LOGIC_BASE_GMBH = 40942\nVENDOR_ID_XHONIA = 40943\nVENDOR_ID_BITLOMAT_LLC = 40944\nVENDOR_ID_OAK_SOLUCOES_EM_INFORMATICA_LTDA_EPP = 40945\nVENDOR_ID_YURIY_MOSKOVETS = 40946\nVENDOR_ID_METROMATICS_PTY_LTD = 40947\nVENDOR_ID_BITMICRO_NETWORKS_INC = 40948\nVENDOR_ID_SMART_GRID_BILLING_INC = 40949\nVENDOR_ID_JSC_STOCK_COMPANY_OZNA = 40950\nVENDOR_ID_UANYWHERE = 40951\nVENDOR_ID_S3_ID_LTD = 40952\nVENDOR_ID_UNASSIGNED_49 = 40953\nVENDOR_ID_IVAR_JACOBSON_INTERNATIONAL_AB = 40954\nVENDOR_ID_CAMPBELL_COUNTY_HOSPITAL_DISTRICT = 40955\nVENDOR_ID_SEAKR_ENGINEERING_INC = 40956\nVENDOR_ID_DEXA_SYSTEMS_INC = 40957\nVENDOR_ID_GENEITY_LTD = 40958\nVENDOR_ID_OPTICAL_ZONU_CORPORATION = 40959\nVENDOR_ID_WITELCOM_AS = 40960\nVENDOR_ID_AXXES = 40961\nVENDOR_ID_SDL_LANGUAGE_WEAVER = 40962\nVENDOR_ID_JACQUES_LEDOUX = 40963\nVENDOR_ID_STONE_FIFTEEN_DESIGN_GROUP = 40964\nVENDOR_ID_LOUISIANA_STATE_BOARD_OF_MEDICAL_EXAMINERS = 40965\nVENDOR_ID_RONALDORG = 40966\nVENDOR_ID_SVIAT_LTD = 40967\nVENDOR_ID_NIRVANIX_INC = 40968\nVENDOR_ID_TOBILA_SYSTEMS_INC = 40969\nVENDOR_ID_LRD23_CONSULTING_LLC = 40970\nVENDOR_ID_AUDIOPTIC_TRADE_SERVICES = 40971\nVENDOR_ID_SFR = 40972\nVENDOR_ID_FREESIDE_ATLANTA = 40973\nVENDOR_ID_KIM_JOHNSSON = 40974\nVENDOR_ID_APPLIED_COMMUNICATION_SCIENCES = 40975\nVENDOR_ID_VIDEOTREC_INDUSTRIAL_CO_LTD = 40976\nVENDOR_ID_INTER_M = 40977\nVENDOR_ID_AZELECTRONIC = 40978\nVENDOR_ID_NEWELL_RUBBERMAID_DYMO_CORP = 40979\nVENDOR_ID_CREATALE_GMBH = 40980\nVENDOR_ID_FACEBOOK_INC = 40981\nVENDOR_ID_ROARING_FORK_SCHOOL_DISTRICT = 40982\nVENDOR_ID_TRINITY_SOLUTIONS_INC = 40983\nVENDOR_ID_FASTBACK_NETWORKS = 40984\nVENDOR_ID_CLEARVIEW_SYSTEMS_LLC = 40985\nVENDOR_ID_JVL_VENTURES_ISIS_MOBILE_COMMERCE = 40986\nVENDOR_ID_QUALITY_SOFTWARE_WORKS = 40987\nVENDOR_ID_JUSTIN_OBERNIER = 40988\nVENDOR_ID_GLSUN_SCIENCE_AND_TECH_COLTD = 40989\nVENDOR_ID_DOMAIN_NAME_SERVICES = 40990\nVENDOR_ID_TEDOX_KG = 40991\nVENDOR_ID_VIJAY_PVT_LTD = 40992\nVENDOR_ID_HD_VEST_INC = 40993\nVENDOR_ID_LLC_AIS_GOROD = 40994\nVENDOR_ID_DLG_AUTOMACAO_INDUSTRIAL_LTDA = 40995\nVENDOR_ID_SILVERRAIL_TECHNOLOGIES_INC = 40996\nVENDOR_ID_ARMONTI_DIGITAL_SERVICES = 40997\nVENDOR_ID_DOMACOM_PTY_LTD = 40998\nVENDOR_ID_RIBOSE_INC = 40999\nVENDOR_ID_MYKARTECOM = 41000\nVENDOR_ID_CUATTRO_LLC = 41001\nVENDOR_ID_BIOTEST_AG = 41002\nVENDOR_ID_WORKERS_COMPENSATION_BOARD_ALBERTA = 41003\nVENDOR_ID_CLACKAMAS_COUNTY = 41004\nVENDOR_ID_INTELLIBATT_INC = 41005\nVENDOR_ID_INELUCTABLE_DESIGNS = 41006\nVENDOR_ID_IMBC_GMBH = 41007\nVENDOR_ID_EMTS_TELECOM_SERVICES_LTD = 41008\nVENDOR_ID_INFO_M_LTD = 41009\nVENDOR_ID_FLYINGVOICE_TECHNOLOGY_LTD = 41010\nVENDOR_ID_LANPRO_INC = 41011\nVENDOR_ID_TMAKINENCOM = 41012\nVENDOR_ID_MIYAGI_UNIVERSITY_OF_EDUCATION = 41013\nVENDOR_ID_ATTAM_LTD = 41014\nVENDOR_ID_INTELLIGENZA = 41015\nVENDOR_ID_HONIUM_SARL = 41016\nVENDOR_ID_EDV_STUDIO_STEPHAN_KONHEISER = 41017\nVENDOR_ID_WALDINETWORK_LTD_HOME = 41018\nVENDOR_ID_ACUNTIA_SA = 41019\nVENDOR_ID_GETONLINE_LTD = 41020\nVENDOR_ID_GENSICKE = 41021\nVENDOR_ID_VAN_RENS_IT_CONSULTANCY = 41022\nVENDOR_ID_BAITS_GLOBAL = 41023\nVENDOR_ID_BG_UNFALLKLINIK_MURNAU = 41024\nVENDOR_ID_LORILLARD_TOBACCO_COMPANY = 41025\nVENDOR_ID_DEALERTRACK = 41026\nVENDOR_ID_DIRECT_LINE_INSURANCE_GROUP_PLC = 41027\nVENDOR_ID_DELPHIX_CORP = 41028\nVENDOR_ID_THE_ORVIS_COMPANY_INC = 41029\nVENDOR_ID_JAI_INC = 41030\nVENDOR_ID_AXEOS_SERVICES_BV = 41031\nVENDOR_ID_VERICOM_AB = 41032\nVENDOR_ID_AMOR_GROUP = 41033\nVENDOR_ID_SYSTEMS_WITH_INTELLIGENCE_INC = 41034\nVENDOR_ID_TM_SYSTEMS_LLC = 41035\nVENDOR_ID_CORERO_NETWORK_SECURITY = 41036\nVENDOR_ID_EDGEPOINT_IT_SERVICES = 41037\nVENDOR_ID_GRIDCORE_AB = 41038\nVENDOR_ID_ADIDAS_AG = 41039\nVENDOR_ID_SCIENTIFIC_RESEARCH_CENTER_EPSILON = 41040\nVENDOR_ID_FAIRPERSONAL_GMBH = 41041\nVENDOR_ID_TINNET_LUKAS_BARTH = 41042\nVENDOR_ID_RADIUS_LLC = 41043\nVENDOR_ID_SOHNTECH_SOLUTIONS_LLC = 41044\nVENDOR_ID_ROVER_APPS_LLC = 41045\nVENDOR_ID_DRIVEN_TECHNICAL_SOLUTIONS = 41046\nVENDOR_ID_SESTEK_COMMUNICATIONS_INC = 41047\nVENDOR_ID_NETIFY = 41048\nVENDOR_ID_ERUDIO_SOLUTIONS = 41049\nVENDOR_ID_RASPMON = 41050\nVENDOR_ID_MBIA_INC = 41051\nVENDOR_ID_INTRAFIND_SOFTWARE_AG = 41052\nVENDOR_ID_MUSICUTE_PROJECT_ROUVEN_RAUDZUS = 41053\nVENDOR_ID_DINAMO_NETWORKS = 41054\nVENDOR_ID_ESQUISSE_SOFTWARE_STUDIO = 41055\nVENDOR_ID_TELCO_MANAGEMENT_SERVICE_GMBH = 41056\nVENDOR_ID_FANCYRABBITORG = 41057\nVENDOR_ID_LOGGLY_INC = 41058\nVENDOR_ID_PETROMOC = 41059\nVENDOR_ID_M_D_TECHNOLOGY = 41060\nVENDOR_ID_SOLUTI_CERTIFICACAO_DIGITAL = 41061\nVENDOR_ID_NUSCALE_POWER_LLC = 41062\nVENDOR_ID_ASYNCHRONY_INC = 41063\nVENDOR_ID_CHECKMYSYSTEMS_LTD = 41064\nVENDOR_ID_ALEA_IACTA_EST = 41065\nVENDOR_ID_SHAANXI_TIANS_INFORMATION_TECHNOLOGY_COLTD = 41066\nVENDOR_ID_QUANTITATIVE_RISK_RESEARCH_SL = 41067\nVENDOR_ID_SHENZHEN_RHC_TECHNOLOGY_COLTD = 41068\nVENDOR_ID_INSYSTEM = 41069\nVENDOR_ID_WHEREGROUP_GMBH_CO_KG = 41070\nVENDOR_ID_SERVICIOS_ELECTRNICOS_UNIVERSITARIOS_SAS = 41071\nVENDOR_ID_DOMOGIK = 41072\nVENDOR_ID_OPENREACH = 41073\nVENDOR_ID_VOESTALPINE_GROUP_IT_GMBH = 41074\nVENDOR_ID_EDGE_SA = 41075\nVENDOR_ID_THE_PROBE_PROJECT_LTD = 41076\nVENDOR_ID_IOWA_AB = 41077\nVENDOR_ID_APTEKA_ALPI_FARM = 41078\nVENDOR_ID_AUTOCRASHINFO = 41079\nVENDOR_ID_IT_EASY_BERLIN = 41080\nVENDOR_ID_LLC_OKEY = 41081\nVENDOR_ID_ALTARIX_SAMARA = 41082\nVENDOR_ID_SHANGHAI_RUIYUAN_INFORMATION_TECHNOLOGIES_COLTD = 41083\nVENDOR_ID_ALTELL_LTD = 41084\nVENDOR_ID_ISIDA_INFORMATICA_LTD = 41085\nVENDOR_ID_TRAFIKSELSKABET_MOVIA = 41086\nVENDOR_ID_AUTOMATION_NV_SA = 41087\nVENDOR_ID_TCUBE = 41088\nVENDOR_ID_NEPTUNE_INTERNET_SERVICE = 41089\nVENDOR_ID_SHANGHAI_HEADING_INFORMATION_ENGINEERING_CO_LTD = 41090\nVENDOR_ID_LIBRA_SRL = 41091\nVENDOR_ID_DYNAMIC_SYSTEMS_INC = 41092\nVENDOR_ID_BAREOS_GMBH_CO_KG = 41093\nVENDOR_ID_IS5_COMMUNICATIONS_INC = 41094\nVENDOR_ID_EVRISKO_SYSTEMS = 41095\nVENDOR_ID_METADOSIS_GP = 41096\nVENDOR_ID_MAGNUS_LTD = 41097\nVENDOR_ID_ESPEC_CORP = 41098\nVENDOR_ID_COMPTA_EQUIPAMENTOS_E_SERVIOS_DE_INFORMTICA_SA = 41099\nVENDOR_ID_FON_WIRELESS_LTD = 41100\nVENDOR_ID_SIMPLY_BUSINESS = 41101\nVENDOR_ID_NS_SOLUTIONS_CORPORATION = 41102\nVENDOR_ID_GLOBAL_RADIO_SERVICES_LIMITED = 41103\nVENDOR_ID_TRANSWAY_LTD = 41104\nVENDOR_ID_LOGNET_BILLING_LTD = 41105\nVENDOR_ID_INSTITUTE_OF_PHOTONICS_AND_ELECTRONICS_AS_CR_VVI = 41106\nVENDOR_ID_TRANSACT_TECHNOLOGIES_INC = 41107\nVENDOR_ID_MILL_SOFTWARE = 41108\nVENDOR_ID_TRIVU_MEDIA = 41109\nVENDOR_ID_GOOD_DOG_DESIGN = 41110\nVENDOR_ID_66_VISION_TECH_COLTD = 41111\nVENDOR_ID_UBIQUITI_NETWORKS_INC = 41112\nVENDOR_ID_BARNFIND_TECHNOLOGIES_AS = 41113\nVENDOR_ID_S2_FACTORY_INC = 41114\nVENDOR_ID_GLARNER_KANTONALBANK = 41115\nVENDOR_ID_DEBES_ENGINEERING = 41116\nVENDOR_ID_RICHARD_WOLF_GMBH = 41117\nVENDOR_ID_STADT_DUISBURG = 41118\nVENDOR_ID_3_STACK_TECHNOLOGIES = 41119\nVENDOR_ID_CMOSAIX = 41120\nVENDOR_ID_TERMINAL_PLUS_LLC = 41121\nVENDOR_ID_PINDROP_SECURITY = 41122\nVENDOR_ID_SUMO_LOGIC_INC = 41123\nVENDOR_ID_KFW = 41124\nVENDOR_ID_MYSTIC_VIDEO_INC = 41125\nVENDOR_ID_SFERA = 41126\nVENDOR_ID_LINUX_ROUTER_SYSTEMS = 41127\nVENDOR_ID_KNORST_CONSULTING_LTDA = 41128\nVENDOR_ID_WIDENET = 41129\nVENDOR_ID_MINT_MEDICAL_GMBH = 41130\nVENDOR_ID_LUGO_TERMINAL_SPA = 41131\nVENDOR_ID_VSTRA_GTALANDSREGIONEN = 41132\nVENDOR_ID_ALINEAN_INC = 41133\nVENDOR_ID_RONAL_AG = 41134\nVENDOR_ID_SALSBURY_ENGINEERING_INC = 41135\nVENDOR_ID_RYAN_SPINUZZI = 41136\nVENDOR_ID_AUTOTOLL_LIMITED = 41137\nVENDOR_ID_10GEN_INC = 41138\nVENDOR_ID_NEXTGENTEL_AS = 41139\nVENDOR_ID_NPLAWES = 41140\nVENDOR_ID_SOUTHEAST_HEALTH = 41141\nVENDOR_ID_INSTANT_SOLUTIONS_LTDA = 41142\nVENDOR_ID_GOODLOE_CONSULTING_GROUP_LLC = 41143\nVENDOR_ID_INITRA_DOO = 41144\nVENDOR_ID_INDUSTRIAL_CONTROL_COMMUNICATIONS_INC = 41145\nVENDOR_ID_VERTICLOUD = 41146\nVENDOR_ID_THE_SOUTHAMPTON_HOSPITAL_ASSOCIATION = 41147\nVENDOR_ID_BINARY_SOFTWARE_INDY_LLC = 41148\nVENDOR_ID_SHANDONG_NEW_BEIYANG_INFORMATION_TECHNOLOGY_CO_LTD_SNBC = 41149\nVENDOR_ID_ACELIS_SARL = 41150\nVENDOR_ID_DEVNCDSEU = 41151\nVENDOR_ID_CYFROWY_POLSAT_SA = 41152\nVENDOR_ID_STATUS_NOBILIS_SA = 41153\nVENDOR_ID_TROJNIAKNET = 41154\nVENDOR_ID_OBERLIN_COLLEGE = 41155\nVENDOR_ID_SOLMATE_GROUP = 41156\nVENDOR_ID_JEFFREY_WALTER_HEISEY = 41157\nVENDOR_ID_SPECIAL_SERVICES_DIVISION_NCISS = 41158\nVENDOR_ID_MEDIA_GROUP_LLC = 41159\nVENDOR_ID_COPPER_SYSTEMS_LTD = 41160\nVENDOR_ID_BENTSEN_ELECTRONICS = 41161\nVENDOR_ID_SOFTWARE_DATEN_SERVICE = 41162\nVENDOR_ID_INVAP_SE = 41163\nVENDOR_ID_TULSA_TECHNOLOGY_CENTER = 41164\nVENDOR_ID_SKYERA_INC = 41165\nVENDOR_ID_STREIBELTNET = 41166\nVENDOR_ID_POMONA_VALLEY_HOSPITAL_MEDICAL_CENTER = 41167\nVENDOR_ID_EXCELITAS = 41168\nVENDOR_ID_SCORPIO_IT = 41169\nVENDOR_ID_NOVXTEL = 41170\nVENDOR_ID_MECC_CO_LTD = 41171\nVENDOR_ID_HEC_PARIS = 41172\nVENDOR_ID_DREAM_CHIP_TECHNOLOGIES_GMBH = 41173\nVENDOR_ID_MOUNT_VERNON_HOSPITAL_PHYSICS_UK = 41174\nVENDOR_ID_AARTESYS_AG = 41175\nVENDOR_ID_ENERGY_X_SYSTEMS_LTD = 41176\nVENDOR_ID_OCEAN_INTERACTIVE_BEIJING_TECHNOLOGY_CO_LTD = 41177\nVENDOR_ID_PROFTAL_OY = 41178\nVENDOR_ID_DIRECTTRUSTORG_INC = 41179\nVENDOR_ID_PROCESS_QUERY_SYSTEMS_LLC = 41180\nVENDOR_ID_CONVERSIS_TECHNOLOGIES_GMBH = 41181\nVENDOR_ID_DIGITAL_IMAGING_LAB = 41182\nVENDOR_ID_CONTIM_AUTOMAO_DE_SISTEMAS_LTDA = 41183\nVENDOR_ID_FREEDOMVOICE_SYSTEMS = 41184\nVENDOR_ID_NORWIA_AS = 41185\nVENDOR_ID_QUANTUMATRIX_TECHNOLOGIES = 41186\nVENDOR_ID_VIDEO_TECH_LABORATORIES = 41187\nVENDOR_ID_UNIVERSITY_OF_CALIFORNIA_HASTINGS_COLLEGE_OF_THE_LAW = 41188\nVENDOR_ID_SIKA_INFORMATIONSSYSTEME_AG = 41189\nVENDOR_ID_INVENSYS_RAIL = 41190\nVENDOR_ID_EDUCASTREAM = 41191\nVENDOR_ID_VICTORY_STANDARDS_SUPPORT_OFFICE = 41192\nVENDOR_ID_TELETOR_LLC = 41193\nVENDOR_ID_PIRATENPARTEI_DEUTSCHLAND_LANDESVERBAND_SAARLAND = 41194\nVENDOR_ID_IMECON_ENGINEERING_SRL = 41195\nVENDOR_ID_SIMPLIVITY_CORPORATION = 41196\nVENDOR_ID_EPICARD_SA = 41197\nVENDOR_ID_RYAN_J_GEYER = 41198\nVENDOR_ID_OPTEYA_SAS = 41199\nVENDOR_ID_VISION_MICROSYSTEMS_COLTD = 41200\nVENDOR_ID_ZEROSPACE_ICT_SERVICES_BV = 41201\nVENDOR_ID_INTIGUA_INC = 41202\nVENDOR_ID_SWISS_BANKERS_PREPAID_SERVICES_AG = 41203\nVENDOR_ID_AVASAD = 41204\nVENDOR_ID_COLGIO_TCNICO_INDUSTRIAL_DE_SANTA_MARIA_CTISM = 41205\nVENDOR_ID_TRAVELEX_LIMITED = 41206\nVENDOR_ID_YOSPACE_TECHNOLOGIES_LTD = 41207\nVENDOR_ID_GORODISSKY_PARTNERS_LTD = 41208\nVENDOR_ID_QPAY_INC = 41209\nVENDOR_ID_SANTA_FE_COLLEGE = 41210\nVENDOR_ID_CHERRYROAD_TECHNOLOGIES_INC = 41211\nVENDOR_ID_PROVIDIGM = 41212\nVENDOR_ID_BITAGENTUR_GMBH_CO_KG = 41213\nVENDOR_ID_CLOUD_CONCEPTS = 41214\nVENDOR_ID_INFOMARK_CO_LTD = 41215\nVENDOR_ID_MONITISE_GROUP_LIMITED = 41216\nVENDOR_ID_XCISION_MEDICAL_SYSTEMS_LLC = 41217\nVENDOR_ID_VERA_NETWORKS_LLC = 41218\nVENDOR_ID_LYTZEN_IT_A_S = 41219\nVENDOR_ID_PS_IT_CONSULTING = 41220\nVENDOR_ID_IMDIT_GMBH = 41221\nVENDOR_ID_JNSYS = 41222\nVENDOR_ID_ASC_TEC_AG = 41223\nVENDOR_ID_MOBILEVAULTS_INC_FORMERLY_CLOUDVAULTS_LLC = 41224\nVENDOR_ID_JSC_VOLGA = 41225\nVENDOR_ID_ENNETIX = 41226\nVENDOR_ID_VOICE_CONFERENCING_SYSTEMS_FOR_MISSON_CONTROL_CENTERS_VOCSMCC = 41227\nVENDOR_ID_COREMEDA = 41228\nVENDOR_ID_FRIULIA_SPA = 41229\nVENDOR_ID_USHARESOFT = 41230\nVENDOR_ID_INTELLIMAGIC_BV = 41231\nVENDOR_ID_ZFSOFT = 41232\nVENDOR_ID_HUBSPOT_INC = 41233\nVENDOR_ID_RNELSON_CONSULTING = 41234\nVENDOR_ID_SCHALTER_ELETRNICA = 41235\nVENDOR_ID_TELEPOINT_GLOBAL_HOSTING_SERVICES_LLC = 41236\nVENDOR_ID_GREAT_LAKES_DATA_SYSTEMS_INC = 41237\nVENDOR_ID_SHANE_SPINUZZI = 41238\nVENDOR_ID_CHARLES_COUNTY_GOVERMENT = 41239\nVENDOR_ID_MIJARES_CONSULTORA_Y_SISTEMAS_SL = 41240\nVENDOR_ID_ARC_DOCUMENT_SOLUTIONS_INC = 41241\nVENDOR_ID_SHANGHAI_PPLIVE_MEDIA_TECH_COLTD = 41242\nVENDOR_ID_DESOMA_GMBH = 41243\nVENDOR_ID_ABAK_SYSTMES = 41244\nVENDOR_ID_SADARA_INTERNET = 41245\nVENDOR_ID_2600HZ = 41246\nVENDOR_ID_RAKENNUSLIITTO_RY = 41247\nVENDOR_ID_IETFNGORG = 41248\nVENDOR_ID_SILENT_CIRCLE_LLC = 41249\nVENDOR_ID_GLOBOSAT_PROGRAMADORA_LTDA = 41250\nVENDOR_ID_SIMPLE_SOFTWARE_SOLUTIONS = 41251\nVENDOR_ID_WICKED_SOFTWARE = 41252\nVENDOR_ID_MILLRY_TELEPHONE_CO = 41253\nVENDOR_ID_WROCLAW_SCHOOL_OF_APPLIED_INFORMATICS_HORYZONT = 41254\nVENDOR_ID_MAUI_SYSTEMS_LTD = 41255\nVENDOR_ID_NORMANSTUDIOS = 41256\nVENDOR_ID_SIGNON = 41257\nVENDOR_ID_JASON_R_GONSALVES = 41258\nVENDOR_ID_LULLABOT_CONSULTING_INC = 41259\nVENDOR_ID_CRITICAL_LINK_LLC = 41260\nVENDOR_ID_TRACEVECTOR = 41261\nVENDOR_ID_INSTITUT_NATIONAL_DE_PHYSIQUE_NUCLAIRE_ET_DE_PHYSIQUE_DES_PARTICULES = 41262\nVENDOR_ID_NUTANIX_INC = 41263\nVENDOR_ID_KENT_AND_ESSEX_POLICE_IT_DIRECTORATE = 41264\nVENDOR_ID_INFOPEN = 41265\nVENDOR_ID_IGOR_POSLEDOV = 41266\nVENDOR_ID_BENBRO_ELECTRONICS_PTY_LTD = 41267\nVENDOR_ID_ELSICOM_LTD = 41268\nVENDOR_ID_DR_VMPONZONI_ICT_OUTSOURCING = 41269\nVENDOR_ID_VIBICOM_COMMUNICATIONS_INC = 41270\nVENDOR_ID_ONDOT_SYSTEMS_INC = 41271\nVENDOR_ID_CASCADE_MICROTECH_INC = 41272\nVENDOR_ID_LAKEHEAD_UNIVERSITY = 41273\nVENDOR_ID_BLUWAN_SA = 41274\nVENDOR_ID_KAPSCH_TELEMATIC_SERVICES_SP_Z_OO = 41275\nVENDOR_ID_BCI_LIMITED = 41276\nVENDOR_ID_COMPUTER_SYSTEM_CORP = 41277\nVENDOR_ID_STATELESS_NETWORKS = 41278\nVENDOR_ID_DANISH_BROADCASTING_CORPORATION = 41279\nVENDOR_ID_NEUL_LIMITED = 41280\nVENDOR_ID_TOLSORG = 41281\nVENDOR_ID_SPEECHSTORM_LTD = 41282\nVENDOR_ID_IEX_GROUP_LLC = 41283\nVENDOR_ID_CELESTECH_INC = 41284\nVENDOR_ID_CLEMEX_TECHNOLOGIES_INC = 41285\nVENDOR_ID_THE_LIBRESWAN_PROJECT = 41286\nVENDOR_ID_RED_BULL_GMBH = 41287\nVENDOR_ID_JD_IRVING_LIMITED_IT_DIVISION = 41288\nVENDOR_ID_LANACCESS_TELECOM = 41289\nVENDOR_ID_O3_DOO = 41290\nVENDOR_ID_LEO_PHARMA_A_S = 41291\nVENDOR_ID_LSU_HEALTH_SYSTEM = 41292\nVENDOR_ID_TAYLOR_INNOVATIONS_LLC = 41293\nVENDOR_ID_DATAFROG = 41294\nVENDOR_ID_ANDALUSIA_GROUP = 41295\nVENDOR_ID_E_GATE_COMMUNICATIONS_INC = 41296\nVENDOR_ID_NEXTECH_COLTD = 41297\nVENDOR_ID_BRGFRAUENGASSE = 41298\nVENDOR_ID_INFODOM_DOO = 41299\nVENDOR_ID_DEGANIUS = 41300\nVENDOR_ID_CSF_SCIENTIFIC_COMPUTING_CORE = 41301\nVENDOR_ID_UNIFIED_TECHNOLOGY_LTD = 41302\nVENDOR_ID_SIX_DEGREES_MANAGED_DATA_LTD = 41303\nVENDOR_ID_QINET_SRL = 41304\nVENDOR_ID_SCHOCH_IT_UG = 41305\nVENDOR_ID_COLUMBUS_COLLEGE_OF_ART_DESIGN = 41306\nVENDOR_ID_LDS_TECHNOLOGY_GROUP = 41307\nVENDOR_ID_ALCO_AIRCRAFT = 41308\nVENDOR_ID_INTER_DIMENSIONAL_SPACE_PORT = 41309\nVENDOR_ID_DWAPI_LTD = 41310\nVENDOR_ID_MISSOURI_WESTERN_STATE_UNIVERSITY = 41311\nVENDOR_ID_NETSCREENS_LTD = 41312\nVENDOR_ID_OLTRI_LLC = 41313\nVENDOR_ID_AEQ_APLICACIONES_ELECTRNICAS_QUASAR = 41314\nVENDOR_ID_RECORDING_ENTERPRISE_SOLUTION_RES = 41315\nVENDOR_ID_VELOCIMETRICS_LTD = 41316\nVENDOR_ID_DAC_BEACHCROFT_LLP = 41317\nVENDOR_ID_ADAPTAVIST = 41318\nVENDOR_ID_NETBUILDER_SRL = 41319\nVENDOR_ID_DIAGNOSOFT = 41320\nVENDOR_ID_COMMSKY_TECHNOLOGIESHANGZHOUCOLTD = 41321\nVENDOR_ID_TIME_O_MATIC_INC = 41322\nVENDOR_ID_REID_HOSPITAL_HEALTH_CARE_SERVICES = 41323\nVENDOR_ID_CENTRE_DE_SERVICES_PARTAGS_DU_QUBEC = 41324\nVENDOR_ID_UBER_TECHNOLOGIES_INC = 41325\nVENDOR_ID_DANGEROUS_LINUX = 41326\nVENDOR_ID_RADIOLOGYIO_INC = 41327\nVENDOR_ID_BLACKNED_GMBH = 41328\nVENDOR_ID_SONCATEC_OY = 41329\nVENDOR_ID_EUROTOLL = 41330\nVENDOR_ID_NXTGRID_LTD = 41331\nVENDOR_ID_FOURTH_WATCH_BUSINESS_CONTINUITY_SERVICES_LC = 41332\nVENDOR_ID_SHENZHEN_GREAT_ELECTRONIC_TECHNOLOGY_CO_LTD = 41333\nVENDOR_ID_FELDHAUS_UHLENBROCK_SICHERHEIT_TECHNIK_GMBH = 41334\nVENDOR_ID_AMPEG_GMBH = 41335\nVENDOR_ID_UEL_UNIVERSIDADE_ESTADUAL_DE_LONDRINA = 41336\nVENDOR_ID_WINGSYSTEM_RST_INC = 41337\nVENDOR_ID_IMAGINATION_TEAM = 41338\nVENDOR_ID_DUONS = 41339\nVENDOR_ID_FRIEDRICH_MIESCHER_INSTITUTE_FOR_BIOMEDICAL_RESEARCH = 41340\nVENDOR_ID_KNOBBE_MARTENS_OLSON_BEAR_LLP = 41341\nVENDOR_ID_IMAIOS_SAS = 41342\nVENDOR_ID_QIHONG_COMPUTER_SCIENCE_TECHNOLOGY_CO_LTD = 41343\nVENDOR_ID_FIRMWIN_SOFTWARE_TECHNOLOGY_CO_LTD = 41344\nVENDOR_ID_NECTAR_SERVICES_CORPORATION = 41345\nVENDOR_ID_CERTIWISE = 41346\nVENDOR_ID_COMSYS_BRTSCH_AG = 41347\nVENDOR_ID_RONYO = 41348\nVENDOR_ID_ENIGMEDIA = 41349\nVENDOR_ID_ITMANX_LTD = 41350\nVENDOR_ID_FJM_SECURITY_SOLUTIONS_LLC = 41351\nVENDOR_ID_PAYCHEX_INC = 41352\nVENDOR_ID_WAUKEGAN_PUBLIC_SCHOOLS = 41353\nVENDOR_ID_PARKER_POE_ADAMS_AND_BERNSTEIN_LLP = 41354\nVENDOR_ID_OPTIC_CLOUD_TECHNOLOGY_COLTD = 41355\nVENDOR_ID_TUFTS_CLINICAL_AND_TRANSLATIONAL_SCIENCE_INSTITUTE = 41356\nVENDOR_ID_GROUPE_CLARINS = 41357\nVENDOR_ID_JSC_AMB_BANK = 41358\nVENDOR_ID_TRIAX_AS = 41359\nVENDOR_ID_PRODRIVE_BV = 41360\nVENDOR_ID_KYOS_SARL = 41361\nVENDOR_ID_TRANSPORT_DEPARTMENT_HKSARG = 41362\nVENDOR_ID_NAUNET_CORPORATION = 41363\nVENDOR_ID_MIRACLE_INFORMATION_SYSTEMS_GMBH = 41364\nVENDOR_ID_AVON_AND_WILTSHIRE_MENTAL_HEALTH_PARTNERSHIP_NHS_TRUST = 41365\nVENDOR_ID_CITELUM = 41366\nVENDOR_ID_ATWORKS_INC = 41367\nVENDOR_ID_NILSOFT_JANKO_DEBENJAK_SP = 41368\nVENDOR_ID_BURRI_IT_SYSTEMS = 41369\nVENDOR_ID_JHOME_CONSULTING_LTD = 41370\nVENDOR_ID_2NDQUADRANT = 41371\nVENDOR_ID_CONVISTA_CONSULTING_AG = 41372\nVENDOR_ID_SEAWIND_SUD_AMERICA = 41373\nVENDOR_ID_FACHSCHAFTSRAT_ELEKTROTECHNIK_AN_DER_TU_DRESDEN = 41374\nVENDOR_ID_SWITCHING_POWER_INC = 41375\nVENDOR_ID_HIVECAST_CORPORATION = 41376\nVENDOR_ID_IONHT_COLTD = 41377\nVENDOR_ID_RODNIK_SPE_INC = 41378\nVENDOR_ID_MIROS_AS = 41379\nVENDOR_ID_KORUS_CONSULTING_SNG_LTD = 41380\nVENDOR_ID_CJSC_NEC_NEVA_COMMUNICATIONS_SYSTEMS = 41381\nVENDOR_ID_FUNDACION_SOCIAL_CAMARA_CHILENA_DE_LA_CONSTRUCCION = 41382\nVENDOR_ID_DURR_SYSTEMS_GMBH = 41383\nVENDOR_ID_ZAKAD_USUG_INFORMATYCZNYCH_OTAGO_SP_Z_OO = 41384\nVENDOR_ID_DEEP_SEA_ELECTRONICS_PLC = 41385\nVENDOR_ID_SYBORG_INFORMATIONSSYSTEME_BH_OHG = 41386\nVENDOR_ID_NEST_LABS = 41387\nVENDOR_ID_IRIS_ANALYTICS_GMBH = 41388\nVENDOR_ID_SMARSH_INC = 41389\nVENDOR_ID_SUZHOU_ANKE_MEDICAL_SYSTEM_CO_LTD = 41390\nVENDOR_ID_OOO_TFPK = 41391\nVENDOR_ID_LIVESPORT_SRO = 41392\nVENDOR_ID_OH_LECK = 41393\nVENDOR_ID_QUARXCONNECT = 41394\nVENDOR_ID_CODIAC_GMBH = 41395\nVENDOR_ID_V_NOVA_LTD = 41396\nVENDOR_ID_ARAG_SE = 41397\nVENDOR_ID_MICAELA_GASPER_LMT = 41398\nVENDOR_ID_GROUPE_DYNAMITE_INC = 41399\nVENDOR_ID_ECCEL_CORP = 41400\nVENDOR_ID_NORTHWEST_SAVINGS_BANK = 41401\nVENDOR_ID_NMS_GURU_INC = 41402\nVENDOR_ID_APCERA_INC = 41403\nVENDOR_ID_RAYAN_ROSHD_ELECTRONIC = 41404\nVENDOR_ID_FRONTRANGE_SOLUTIONS = 41405\nVENDOR_ID_FOCOM_LIMITED = 41406\nVENDOR_ID_COMMUNE_DE_BLONAY = 41407\nVENDOR_ID_STRIX_DOO = 41408\nVENDOR_ID_CDJEM = 41409\nVENDOR_ID_NTS_NETZWERK_TELEKOM_SERVICE_AG = 41410\nVENDOR_ID_THINKSKINK_SA_DE_CV = 41411\nVENDOR_ID_INNOVATIVE_TECHNICAL_DECISIONS_LTD = 41412\nVENDOR_ID_XETAWAVE_LLC = 41413\nVENDOR_ID_SYSTEME_U_GIE_IRIS = 41414\nVENDOR_ID_LUCILE_PACKARD_CHILDRENS_HOSPITAL_AT_STANFORD = 41415\nVENDOR_ID_FUTURA_RETAIL_SOLUTION_AG = 41416\nVENDOR_ID_ROSEMANN_SOFTWARE_GMBH = 41417\nVENDOR_ID_TOOPHER_INC = 41418\nVENDOR_ID_SCHLENKERMANN = 41419\nVENDOR_ID_COMUNICACIN_Y_TECNOLOGA_ARAOS_LTDA = 41420\nVENDOR_ID_ARIZONA_ENGINEERED_PRODUCTS_LLC = 41421\nVENDOR_ID_VELLO_SYSTEMS_INC = 41422\nVENDOR_ID_HORASPHERE_INC = 41423\nVENDOR_ID_NATIONAL_COMPUTER_BOARD = 41424\nVENDOR_ID_IQSIM = 41425\nVENDOR_ID_FLEXLAB_LTD = 41426\nVENDOR_ID_BENBRIA = 41427\nVENDOR_ID_OTTER_TAIL_POWER_COMPANY = 41428\nVENDOR_ID_INCOAX_NETWORKS_EUROPE_AB = 41429\nVENDOR_ID_NEW_ZEALAND_MINISTRY_OF_BUSINESS_INNOVATION_AND_EMPLOYMENT = 41430\nVENDOR_ID_TAHITI_NUI_ARENA = 41431\nVENDOR_ID_BERNHARD_CZECH = 41432\nVENDOR_ID_GROWMARK_INC = 41433\nVENDOR_ID_ROLAMASAOORG = 41434\nVENDOR_ID_SMART_ASSOCIATES_LIMITED = 41435\nVENDOR_ID_ALLWIN_TELECOMMUNICATION_CO_LTD = 41436\nVENDOR_ID_GEOFFROY_GRAMAIZE = 41437\nVENDOR_ID_HITOTEK_COLTD = 41438\nVENDOR_ID_MOSCOW_PSYCHOLOGICAL_AND_SOCIAL_UNIVERSITY = 41439\nVENDOR_ID_STABILUS_GMBH = 41440\nVENDOR_ID_TOHOKU_UNIVERSITY = 41441\nVENDOR_ID_BERGER_GUNKEL_IT_SYSTEME_GMBH = 41442\nVENDOR_ID_EVOTOPE_AS = 41443\nVENDOR_ID_SYSLORE_OY = 41444\nVENDOR_ID_BROADCAST_OVER_CELLULAR = 41445\nVENDOR_ID_APEX_MEDICUS_UAB = 41446\nVENDOR_ID_INGECOM = 41447\nVENDOR_ID_ELECTRONIC_TOLLING_SOCIT_HABILITE_FOURNISSANT_UN_SERVICE_DE_TLPAGE_TOLL_SERVICE_PROVIDER_FRONT_END = 41448\nVENDOR_ID_TERANGA_SOFTWARE = 41449\nVENDOR_ID_SHEEPDIP_PROJECT = 41450\nVENDOR_ID_CANDID_COLOR_SYSTEMS_INC = 41451\nVENDOR_ID_LUISLAINCOM = 41452\nVENDOR_ID_DECURA_IM_LLP = 41453\nVENDOR_ID_GLOBIG_CONSULTING = 41454\nVENDOR_ID_INTERNATIONAL_RADIO_AND_ELECTRONICS_CORPORATION_FORMERLY_CHRISSO_TECHNOLOGIES_LLC = 41455\nVENDOR_ID_TINTRI_INC = 41456\nVENDOR_ID_BAUMAN_MOSCOW_STATE_TECHNICAL_UNIVERSITY_BMSTU = 41457\nVENDOR_ID_ENSOFT_LTD = 41458\nVENDOR_ID_COFELY_ZUID_NEDERLAND_BV = 41459\nVENDOR_ID_BUNDESNOTARKAMMER = 41460\nVENDOR_ID_ELMITEL_DOO = 41461\nVENDOR_ID_ACTIONTEC_ELECTRONICS_INC = 41462\nVENDOR_ID_AIR_INTERNET_SERVICE_COLTD = 41463\nVENDOR_ID_MAXIOL_LTD = 41464\nVENDOR_ID_DICELOCK_SECURITY_SL = 41465\nVENDOR_ID_JAKE_PTY_LTD = 41466\nVENDOR_ID_SHANGHAI_ICOMHOME_CO_LTD = 41467\nVENDOR_ID_ZAKAD_UBEZPIECZE_SPOECZNYCH = 41468\nVENDOR_ID_LACTALIS_DANMARK = 41469\nVENDOR_ID_IMAGINA_VISIN_ARTIFICIAL_S_L = 41470\nVENDOR_ID_BASWARE_BELGIUM = 41471\nVENDOR_ID_PKP_CARGO_SA = 41472\nVENDOR_ID_OVERSEAS_PRIVATE_INVESTMENT_CORPORATION = 41473\nVENDOR_ID_PASCAGOULA_SCHOOL_DISTRICT = 41474\nVENDOR_ID_SHENZHEN_TENCENT_COMPUTER_SYSTEM_CO_LTD = 41475\nVENDOR_ID_LIGHTSQUARED = 41476\nVENDOR_ID_COMPUTER_SYSTEMS_INSTITUTE = 41477\nVENDOR_ID_EXTREMFARM_LTD = 41478\nVENDOR_ID_KOENIG_BAUER_AG_WERK_BIELEFELD = 41479\nVENDOR_ID_LA_DETECTION_ELECTRONIQUE_FRANCAISE_DEF = 41480\nVENDOR_ID_MEDISCHEGEGEVENSNL = 41481\nVENDOR_ID_YUBICO = 41482\nVENDOR_ID_4SAFE_ADVANCED_SOLUTIONS = 41483\nVENDOR_ID_VIDOVATION_MOVING_VIDEO_FORWARD = 41484\nVENDOR_ID_FPX_LLC = 41485\nVENDOR_ID_SARGENT_LUNDY_LLC = 41486\nVENDOR_ID_OSTROVOKRU = 41487\nVENDOR_ID_CITY_OF_NAPERVILLE = 41488\nVENDOR_ID_HAKWERK_IT_BV = 41489\nVENDOR_ID_SUNGSAM_CO_LTD = 41490\nVENDOR_ID_KDDI_WEB_COMMUNICATIONS_INC = 41491\nVENDOR_ID_MOBTECHONLINE = 41492\nVENDOR_ID_BANGKOK_PACIFIC_STEEL_CO_LTD = 41493\nVENDOR_ID_HYDAC_VERWALTUNG_GMBH = 41494\nVENDOR_ID_NORTHGAS = 41495\nVENDOR_ID_DEDICATED_NETWORK_PARTNERS = 41496\nVENDOR_ID_OPTIMUS_SA = 41497\nVENDOR_ID_SCHOTT_AG = 41498\nVENDOR_ID_ORGACOMM_INTERNATIONAL_SA = 41499\nVENDOR_ID_FABOLEON_BONAPARTE = 41500\nVENDOR_ID_AFGHANISTAN_ROOT_CERTIFICATION_AUTHORITY_ARCA = 41501\nVENDOR_ID_BALOGH_SA = 41502\nVENDOR_ID_ST_TAMMANY_PARISH_HOSPITAL = 41503\nVENDOR_ID_LES_SOLUTIONS_ASENTRI_INC = 41504\nVENDOR_ID_ALLIANCE_AVIA = 41505\nVENDOR_ID_MANIILAQ_ASSOCIATION = 41506\nVENDOR_ID_CLOUD21 = 41507\nVENDOR_ID_REST_NETWORK = 41508\nVENDOR_ID_SPING = 41509\nVENDOR_ID_NAS_RECRUITMENT_COMMUNICATIONS = 41510\nVENDOR_ID_MUNICIPALITY_OF_ATHENS = 41511\nVENDOR_ID_DENSANCOLTD = 41512\nVENDOR_ID_AUTONOMY_SYSTEMS_LIMITED = 41513\nVENDOR_ID_LIHAS_ADRIAN_REYER = 41514\nVENDOR_ID_QUADRAC_CO_LTD = 41515\nVENDOR_ID_SAITECSRL = 41516\nVENDOR_ID_EAGLE_ELECTRONICS = 41517\nVENDOR_ID_INGRAM_CONTENT_GROUP = 41518\nVENDOR_ID_OPENADR_ALLIANCE = 41519\nVENDOR_ID_JAKUB_JUSZCZAKIEWICZ = 41520\nVENDOR_ID_ZEBSYS_LTD = 41521\nVENDOR_ID_WWWINFO_XORG = 41522\nVENDOR_ID_CLOUDSEED = 41523\nVENDOR_ID_NERATEC_SOLUTIONS_AG = 41524\nVENDOR_ID_HUBJECT_GMBH = 41525\nVENDOR_ID_MJP_COMMUNICATIONS_LTD = 41526\nVENDOR_ID_PAPERLESS = 41527\nVENDOR_ID_DUNDER_MIFFLIN = 41528\nVENDOR_ID_ZENERJI_LLC = 41529\nVENDOR_ID_USIX_CO_LTD = 41530\nVENDOR_ID_BASIC_INC = 41531\nVENDOR_ID_QUICK2WIRE_LIMITED = 41532\nVENDOR_ID_CDS_CALL_DISPATCH_SCHOLZ_GMBH = 41533\nVENDOR_ID_VOICEHOST_LTD = 41534\nVENDOR_ID_CLEO_COMMUNICATIONS_US_LLC = 41535\nVENDOR_ID_VIX_TECHNOLOGY = 41536\nVENDOR_ID_UP_JOVEN_CLUB_DE_COMPUTACIN_Y_ELECTRNICA = 41537\nVENDOR_ID_DARC_EV_OV_FREIBURG = 41538\nVENDOR_ID_RAGGED_SOFTWARE = 41539\nVENDOR_ID_INTELLIGENT_SOFTWARE_SOLUTIONS_INC = 41540\nVENDOR_ID_ARDRAL_CO = 41541\nVENDOR_ID_MONNIT_CORPORATION = 41542\nVENDOR_ID_ADVANCED_POWER_LABORATORIES = 41543\nVENDOR_ID_FISH_EAGLE_LIMITED = 41544\nVENDOR_ID_GRAVITY_NETWORKS = 41545\nVENDOR_ID_INNOLOGICA_JSC = 41546\nVENDOR_ID_MOVASIM = 41547\nVENDOR_ID_LAIMBOCK_CONSULTING = 41548\nVENDOR_ID_RUNTASTIC_GMBH = 41549\nVENDOR_ID_INTERLOGICA = 41550\nVENDOR_ID_NAVAYO_RESEARCH_KFT = 41551\nVENDOR_ID_COMPAGNIE_NATIONALE_DES_COMMISSAIRES_AUX_COMPTES = 41552\nVENDOR_ID_SPELLPOINT_OY = 41553\nVENDOR_ID_ITX_SECRURITY = 41554\nVENDOR_ID_ECOIT = 41555\nVENDOR_ID_FEXCO_MERCHANT_SERVICES_LTD = 41556\nVENDOR_ID_AUTOUPLINK_TECH = 41557\nVENDOR_ID_DIGITALSIGNAL = 41558\nVENDOR_ID_GRUP_SERHS_SA = 41559\nVENDOR_ID_LANDESFORSTEN_RHEINLAND_PFALZ = 41560\nVENDOR_ID_INTELIGO_FINANCIAL_SERVICES_SA = 41561\nVENDOR_ID_NEXIENS = 41562\nVENDOR_ID_BIOLINK_SOLUTIONS_LTD = 41563\nVENDOR_ID_SELECTEL_LLC = 41564\nVENDOR_ID_MINISTRY_OF_TAXES_OF_THE_REPUBLIC_OF_AZERBAIJAN = 41565\nVENDOR_ID_AMAGICALNET = 41566\nVENDOR_ID_A_B_GENSETS_INC = 41567\nVENDOR_ID_SOKUDA_TECHNOLOGIESBEIJING_INC = 41568\nVENDOR_ID_MOBILE_INTERACTIVA_SL = 41569\nVENDOR_ID_9BIT_BORUT_MRAK_SP = 41570\nVENDOR_ID_GLOBAL_LINKING_SOLUTIONS = 41571\nVENDOR_ID_BRS_LABS = 41572\nVENDOR_ID_ITRUN_CONSULTING_SP_Z_OO = 41573\nVENDOR_ID_UNIO_BRASILEIRA_DOS_ESTUDANTES_SECUNDARISTAS = 41574\nVENDOR_ID_MODERN_WOODMEN_OF_AMERICA = 41575\nVENDOR_ID_UNIAO_NACIONAL_DOS_ESTUDANTES = 41576\nVENDOR_ID_CAR_CONNECTIVITY_CONSORTIUM = 41577\nVENDOR_ID_MAC_IT_SOLUTIONS = 41578\nVENDOR_ID_TERAOKA_SEIKO_CO_LTD = 41579\nVENDOR_ID_HOMER_ELECTRIC_ASSOCIATION_INC = 41580\nVENDOR_ID_RB_GENERALEKONOMIK = 41581\nVENDOR_ID_MAKSAT_TECH_PVT_LTD = 41582\nVENDOR_ID_ZAO_NHK = 41583\nVENDOR_ID_GCC_LTD = 41584\nVENDOR_ID_EILEO = 41585\nVENDOR_ID_ENSTEAM_SP_Z_OO_C_O_E_FISH_SP_Z_OO = 41586\nVENDOR_ID_HOLLYCOLTD = 41587\nVENDOR_ID_SHUMILOV_NIKITA_SERGEEVICH = 41588\nVENDOR_ID_JOLOKIA = 41589\nVENDOR_ID_WIRTSCHAFTSAGENTUR_WIEN_EIN_FONDS_DER_STADT_WIEN = 41590\nVENDOR_ID_SIPI_SRL = 41591\nVENDOR_ID_EVANTI = 41592\nVENDOR_ID_SARD_VERBINNEN_CO = 41593\nVENDOR_ID_LLC_EKB_INFO = 41594\nVENDOR_ID_GENESIS_TECHNICAL_SYSTEMS_CORP = 41595\nVENDOR_ID_HORNERSCORNERS_LLC = 41596\nVENDOR_ID_RFEVOLUTION_SRL = 41597\nVENDOR_ID_INSTITUTO_FEDERAL_CATARINENSE_CAMPUS_CONCRDIA = 41598\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_DILIMAN = 41599\nVENDOR_ID_ABDUL_KHALEK_STORE = 41600\nVENDOR_ID_MYRIAD_GROUP_AG = 41601\nVENDOR_ID_LINKS_GLOBAL_SERVICES_CA = 41602\nVENDOR_ID_SOMANSA_CO_LTD = 41603\nVENDOR_ID_MONITOR_ELECTRIC_JOINT_STOCK_COMPANY = 41604\nVENDOR_ID_GEORGIAS_OWN_CREDIT_UNION = 41605\nVENDOR_ID_CENTROTHERM_PHOTOVOLTAICS_AG = 41606\nVENDOR_ID_ONE_IP = 41607\nVENDOR_ID_EFP_ROTENBERG_LLP = 41608\nVENDOR_ID_KJEMPEKJEKT_AS = 41609\nVENDOR_ID_ASPECTRA_AG = 41610\nVENDOR_ID_BANK_VONTOBEL_AG = 41611\nVENDOR_ID_SWISSCOM_ENERGY_SOLUTION_AG = 41612\nVENDOR_ID_CONTROLES_SA = 41613\nVENDOR_ID_EAGLEVILLE_HOSPITAL = 41614\nVENDOR_ID_MANHATTAN_COLLEGE = 41615\nVENDOR_ID_WEEO_GROUP = 41616\nVENDOR_ID_SPARTA_CONSULTING = 41617\nVENDOR_ID_OJSC_BANK_SGB = 41618\nVENDOR_ID_HOSPITALITY_ALLIANCE_AG = 41619\nVENDOR_ID_ERIC_LAKIN = 41620\nVENDOR_ID_MINISTERIO_DE_GOBIERNO_Y_REFORMA_DEL_ESTADO = 41621\nVENDOR_ID_XOR_MEDIA_INC = 41622\nVENDOR_ID_ONE_TECH_INC = 41623\nVENDOR_ID_BELL_ALIANT = 41624\nVENDOR_ID_MENDED_DUCK_COMPUTER_SERVICES = 41625\nVENDOR_ID_GELLER_COMPANY_LLC = 41626\nVENDOR_ID_CENWELL_LTD = 41627\nVENDOR_ID_LEARNING_MEDIA_LTD = 41628\nVENDOR_ID_CHAKRA_NETWORK_SOLUTIONS_PRIVATE_LIMITED = 41629\nVENDOR_ID_SENSEMATIX = 41630\nVENDOR_ID_TASNEEM_ELECTRONICS_LLC_2 = 41631\nVENDOR_ID_PTBINA_BUANA_RAYA = 41632\nVENDOR_ID_CERTIVOX_LTD = 41633\nVENDOR_ID_EDV_BERATUNG_HAAG = 41634\nVENDOR_ID_NBC_ELETTRONICA_GROUP_SRL = 41635\nVENDOR_ID_TOLARISCOM = 41636\nVENDOR_ID_TALIA_LTD = 41637\nVENDOR_ID_SOCUS_NETWORKS = 41638\nVENDOR_ID_SVSI = 41639\nVENDOR_ID_LACONISOFT_LLC = 41640\nVENDOR_ID_COLGLAZIER_CLINIC = 41641\nVENDOR_ID_THINKOM_SOLUTIONS_INC = 41642\nVENDOR_ID_RCG_CREATIONS_LIMITED = 41643\nVENDOR_ID_CINEGY_GMBH = 41644\nVENDOR_ID_SINOGRAM_TECHNOLOGY_BEIJING_CO_LTD = 41645\nVENDOR_ID_QUADROTECH_SOLUTIONS_AG = 41646\nVENDOR_ID_SPECTRAP = 41647\nVENDOR_ID_SHENZHEN_SDGI_OPTICAL_NETWORK_TECHNOLOGIES_CO_LTD = 41648\nVENDOR_ID_SCHNOOR_INDUSTRIEELEKTRONIK_GMBH_CO_KG = 41649\nVENDOR_ID_ENGISOFT = 41650\nVENDOR_ID_DAPESCO_SA = 41651\nVENDOR_ID_IDENTSIGN = 41652\nVENDOR_ID_KCG_EUROPE_LTD_FORMERLY_GETCO_EUROPE_LTD = 41653\nVENDOR_ID_EAL_APELDOORN_BV = 41654\nVENDOR_ID_CARDSMART_TECHNOLOGIES = 41655\nVENDOR_ID_2024SIGHT_INC = 41656\nVENDOR_ID_BRESSNER_TECHNOLOGY = 41657\nVENDOR_ID_UNITED_BUSINESS_MEDIA = 41658\nVENDOR_ID_DATASAT_TECHNOLOGIES_LTD = 41659\nVENDOR_ID_SCIVISUM_LTD = 41660\nVENDOR_ID_SEKAS_GMBH = 41661\nVENDOR_ID_CAPIO_ST_GRANS_SJUKHUS_AB = 41662\nVENDOR_ID_PHILIPPE_BONATTI = 41663\nVENDOR_ID_COSTANEIRA_ARNO_JOHANN_S_A_COMRCIO_DE_MATERIAL_DE_CONSTRUO = 41664\nVENDOR_ID_GEORGE_FLEMMING_LLC = 41665\nVENDOR_ID_GOVERNMENT_OF_YUKON = 41666\nVENDOR_ID_PARK_BENCH_SOFTWARE = 41667\nVENDOR_ID_THE_EVERGREEN_STATE_COLLEGE = 41668\nVENDOR_ID_SPIROS_ILIADIS = 41669\nVENDOR_ID_ADDON_HOLDING_GMBH = 41670\nVENDOR_ID_ATELIER_WW_ARCHITEKTEN_SIA_AG = 41671\nVENDOR_ID_TECMASUR_CIA_LTDA = 41672\nVENDOR_ID_LAPSUM = 41673\nVENDOR_ID_WASCH_GMBH = 41674\nVENDOR_ID_ARMOWL_LAB_ROMAN_V_KOSINSKIY = 41675\nVENDOR_ID_GORDON_BROOM = 41676\nVENDOR_ID_NICHOLAS_BROWN = 41677\nVENDOR_ID_SIBOAVANCE = 41678\nVENDOR_ID_OVNETAP = 41679\nVENDOR_ID_MEDIA_NETWERK_AS = 41680\nVENDOR_ID_CHUDYK_CLOUD_SERVICES = 41681\nVENDOR_ID_ASSEMBLY_ORGANIZING_OY = 41682\nVENDOR_ID_NEBULA_MEDIA_SOLUTIONS_LTD = 41683\nVENDOR_ID_PYZUKA = 41684\nVENDOR_ID_NFOTEX_INFORMATIONSTECHNOLOGIE_DIENSTLEISTUNGS_GMBH = 41685\nVENDOR_ID_UZIN_UTZ_AG = 41686\nVENDOR_ID_COLD_CROSSING = 41687\nVENDOR_ID_EOS_SISTEMI_SRL = 41688\nVENDOR_ID_THGA_AKTIENGESELLSCHAFT = 41689\nVENDOR_ID_DENSION_AUDIO_SYSTEMS = 41690\nVENDOR_ID_HORIZON_FOREST_PRODUCTS_LLP = 41691\nVENDOR_ID_RENEE_MARIE_JONES = 41692\nVENDOR_ID_NYINGMA_ASSOCIATION_OF_MANGALAM_ORGANIZATIONS_COMMUNICATIONS_AND_NETWORK_INFRASTRUCTURE = 41693\nVENDOR_ID_CHRISTIANS_AGAINST_POVERTY = 41694\nVENDOR_ID_TRANSLATIONAL_CENTRE_FOR_REGENERATIVE_MEDICINE_TRM = 41695\nVENDOR_ID_ACTIA_SYSTEMS_ESPAA_SAU = 41696\nVENDOR_ID_EUROPEAN_CENTRAL_BANK = 41697\nVENDOR_ID_LUCAS_CONSULTING = 41698\nVENDOR_ID_LGS_INNOVATIONS = 41699\nVENDOR_ID_EYERETURN_MARKETING_INC = 41700\nVENDOR_ID_JARVIS_FORD = 41701\nVENDOR_ID_LEVART_DISTRIBUTION_SYSTEMS_PTY_LTD = 41702\nVENDOR_ID_ATM_12 = 41703\nVENDOR_ID_NEOFLOW_CO_LTD = 41704\nVENDOR_ID_INSTITUTUL_DE_DEZVOLTARE_A_SOCIETATII_INFORMATIONALE = 41705\nVENDOR_ID_TROLLHATTAN_STAD_IT = 41706\nVENDOR_ID_SOLBOX_INC = 41707\nVENDOR_ID_SUPERIOR_ACCESS_SOLUTIONS_INC = 41708\nVENDOR_ID_EAP_TECHNOLOGIES_INC = 41709\nVENDOR_ID_ATES_NETWORKS = 41710\nVENDOR_ID_DOSSIA = 41711\nVENDOR_ID_ISTHARI = 41712\nVENDOR_ID_MELETCOM = 41713\nVENDOR_ID_AZUKI_SYSTEMS_INC = 41714\nVENDOR_ID_UNIVERSAL_CINEMA_SERVICES_CO_LTD = 41715\nVENDOR_ID_RATIONAL_RETENTION_LLC = 41716\nVENDOR_ID_BLEKINGE_INSTITUTE_OF_TECHNOLOGY = 41717\nVENDOR_ID_OUROBOROS = 41718\nVENDOR_ID_QOSMOTEC_GMBH = 41719\nVENDOR_ID_SAISEI_NETWORKS_INC = 41720\nVENDOR_ID_INTERNATIONAL_COMMUNICATIONS_CORPORATION_INC = 41721\nVENDOR_ID_INFORMATION_NETWORKS_LTD = 41722\nVENDOR_ID_XGEN_WEB_BUSINESS = 41723\nVENDOR_ID_CHENGDU_SKSPRUCE_TECHNOLOGY_INC = 41724\nVENDOR_ID_TERECOM_NETWORKS_O = 41725\nVENDOR_ID_DR_SULAIMAN_AL_HABIB_MEDICAL_GROUP = 41726\nVENDOR_ID_SABATIER_GEOLOCALISATION = 41727\nVENDOR_ID_ATHENAHEALTH_INC = 41728\nVENDOR_ID_UNITED_EQUITABLE_GROUP_LTD = 41729\nVENDOR_ID_ARAB_STATES_RESEARCH_AND_EDUCATION_NETWORK_GMBH = 41730\nVENDOR_ID_PRODWARE_DEUTSCHLAND_AG = 41731\nVENDOR_ID_MATHIAS_HAIMERL_3S = 41732\nVENDOR_ID_PARALLEL_WIRELESS = 41733\nVENDOR_ID_V10_NETWORKS = 41734\nVENDOR_ID_TELETECH_PTY_LTD = 41735\nVENDOR_ID_BEATRICE_WIREKO_IT = 41736\nVENDOR_ID_BRYAN_HEALTH = 41737\nVENDOR_ID_ALGO_COMMUNICATION_PRODUCTS_LTD = 41738\nVENDOR_ID_FIVE9_INC = 41739\nVENDOR_ID_THEGUNNSNET = 41740\nVENDOR_ID_ITTIM_TECHNOLOGY_COLTD = 41741\nVENDOR_ID_IMEC = 41742\nVENDOR_ID_EKING_TECHNOLOGY_CO_LTD = 41743\nVENDOR_ID_Z3_TECHNOLOGY = 41744\nVENDOR_ID_FROZENWARRIORCOM = 41745\nVENDOR_ID_CHENGDU_KINGTYPE_DIGITAL_TV_EQUIPMENT_CO_LTD = 41746\nVENDOR_ID_OLIVER_SOLUTIONS = 41747\nVENDOR_ID_CENSORNET_LTD = 41748\nVENDOR_ID_OWENS_STATE_COMMUNITY_COLLEGE = 41749\nVENDOR_ID_HEAD_DEPARTMENT_FOR_STATISTICS_AND_INFORMATION_TECHNOLOGIES_OF_STATE_CUSTOMS_COMMITTEE = 41750\nVENDOR_ID_ROBINS = 41751\nVENDOR_ID_ZAO_NPK_ROTEK = 41752\nVENDOR_ID_GREG_WATERHOUSE = 41753\nVENDOR_ID_DANIEL_SAGE = 41754\nVENDOR_ID_LASTLINE_INC = 41755\nVENDOR_ID_REVCORD_REVOLUTIONIZING_VOICE_RECORDING = 41756\nVENDOR_ID_PRISM_SYSTEMS_INC = 41757\nVENDOR_ID_AXHAM_CORPORATION = 41758\nVENDOR_ID_OPEN_COMPUTING_FACILITY = 41759\nVENDOR_ID_TIBETSYSTEM_COLTD = 41760\nVENDOR_ID_ATEA_SVERIGE_AB = 41761\nVENDOR_ID_MAYAK_LTD = 41762\nVENDOR_ID_JSC_BYSTROBANK = 41763\nVENDOR_ID_ETAT_DE_FRIBOURG = 41764\nVENDOR_ID_TROYER_AG = 41765\nVENDOR_ID_FLOW_DATA_INC = 41766\nVENDOR_ID_IDSS_AB = 41767\nVENDOR_ID_BEIJING_TELESOUND_ELECTRONICS_CO_LTD = 41768\nVENDOR_ID_IS4IT_GMBH = 41769\nVENDOR_ID_ASCENDI = 41770\nVENDOR_ID_FUNDAMENTAL_GAMES = 41771\nVENDOR_ID_AUTH_SERVERS = 41772\nVENDOR_ID_TELVUE_CORPORATION = 41773\nVENDOR_ID_HEALTH_RESEARCH_INC = 41774\nVENDOR_ID_GLOBAL_SOLUTIONS_TECNOLOGIA_DA_INFORMAO_LTDA = 41775\nVENDOR_ID_IACIT_SOLUES_TECNOLGICAS_LTDA = 41776\nVENDOR_ID_GSE_ENVIRONMENTAL_LLC = 41777\nVENDOR_ID_LAKE_AVENUE_CONGREGATIONAL_CHURCH_OF_PASADENA = 41778\nVENDOR_ID_QUALITYLOGIC_INC = 41779\nVENDOR_ID_TELESPHERE_NETWORKS_LTD = 41780\nVENDOR_ID_DIGBY_WELLS_ENVIRONMENTAL = 41781\nVENDOR_ID_PACIFIC_DESIGN_ENGINERING = 41782\nVENDOR_ID_GEOLINK_SATELLITE_SERVICES = 41783\nVENDOR_ID_IFBYPHONE_INC = 41784\nVENDOR_ID_MARY_WASHINGTON_HEALTHCARE = 41785\nVENDOR_ID_RYU_PROJECT = 41786\nVENDOR_ID_HYPERMATRIX_SOLUTIONS_LTD = 41787\nVENDOR_ID_KUEDERLINET = 41788\nVENDOR_ID_ALTAYSIR_FOR_INFORMATION_SYSTEMS_SECURITY_CONSULTING_LLC = 41789\nVENDOR_ID_I_CONCEPT = 41790\nVENDOR_ID_ESPE = 41791\nVENDOR_ID_ALRAYYAN_FOR_MEDIA_AND_MARKETING_CO = 41792\nVENDOR_ID_NORTH_EAST_INDEPENDENT_SCHOOL_DISTRICT = 41793\nVENDOR_ID_HIGH_POINT_PC_SOLUTIONS = 41794\nVENDOR_ID_NET_CONSULTING_UK_LTD = 41795\nVENDOR_ID_ELESY = 41796\nVENDOR_ID_STC_SYSTEMA = 41797\nVENDOR_ID_ASTOZI = 41798\nVENDOR_ID_WILLIAM_HILL = 41799\nVENDOR_ID_GAHIN_GEORGIA_HEALTH_INFORMATION_NETWORK = 41800\nVENDOR_ID_PRATTVILLE_WATER_WORKS_BOARD = 41801\nVENDOR_ID_TALKPATH_LLC = 41802\nVENDOR_ID_ON_CENTER_SOFTWARE_INC = 41803\nVENDOR_ID_AUSTRIAN_FEDERAL_MINISTRY_OF_SCIENCE_AND_RESEARCH = 41804\nVENDOR_ID_GUIDANCE_SOLUTIONS_INC = 41805\nVENDOR_ID_VIASTORAGE = 41806\nVENDOR_ID_GUIZHOU_BCTV_INFORMATION_NETWORK_COLTD = 41807\nVENDOR_ID_ADMINISTRATION_OF_MUNICIPAL_FORMATION_OF_THE_CITY_HERO_OF_NOVOROSSIYSK = 41808\nVENDOR_ID_DISMUNTEL_SAL = 41809\nVENDOR_ID_CREDIT_AGRICOLE_BANK_PJSC = 41810\nVENDOR_ID_SPITAL_MNNEDORF_AG = 41811\nVENDOR_ID_ROUIS_LABS = 41812\nVENDOR_ID_ANHUI_COMHIGHER_TECH_COLTD = 41813\nVENDOR_ID_HUBEI_UNIVERSITY_OF_AUTOMOTIVE_TECHNOLOGY = 41814\nVENDOR_ID_FRAUNHOFER_INSTITUT_FUER_SOFTWARE_UND_SYSTEMTECHNIK_ISST = 41815\nVENDOR_ID_BLISSFUL_LIVING_FOUNDATION = 41816\nVENDOR_ID_COOPER_GITIESSE = 41817\nVENDOR_ID_QUOTIENT_INC = 41818\nVENDOR_ID_IPNETWORK = 41819\nVENDOR_ID_KANTON_BASEL_LANDSCHAFT = 41820\nVENDOR_ID_FRANTOVOCZ = 41821\nVENDOR_ID_PROJECT_FIFO = 41822\nVENDOR_ID_MIAOZHEN_SYSTEMS = 41823\nVENDOR_ID_UNIVERSIT_GASTON_BERGER = 41824\nVENDOR_ID_AGILORD_LTD = 41825\nVENDOR_ID_PROGNUS_SOLUES_LIVRES_EM_TI = 41826\nVENDOR_ID_NOVANTUM_BV = 41827\nVENDOR_ID_NYSOFT_ARGENTINA_SRL = 41828\nVENDOR_ID_MEDDATA = 41829\nVENDOR_ID_PICOCELA_INC = 41830\nVENDOR_ID_BITBASE_AS = 41831\nVENDOR_ID_PRIVATE_ENTREPRENEUR_KUTSEVOL_MAXYM = 41832\nVENDOR_ID_PAREE_BV_ELEKTRO_TELECOM = 41833\nVENDOR_ID_BRAM_TECHNOLOGIES = 41834\nVENDOR_ID_JDL_DIGITAL_SYSTEMS_INC = 41835\nVENDOR_ID_BCT_ELECTRONIC_GESMBH = 41836\nVENDOR_ID_EVAN_MOOR_CORP = 41837\nVENDOR_ID_DYNAMIC_NETWORK_SERVICES_INC = 41838\nVENDOR_ID_PRISM_IPX_SYSTEMS_LLC = 41839\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_MANILA = 41840\nVENDOR_ID_ZHUHAI_BLUEMAX_BROADBAND_ELECTRONIC_COLTD = 41841\nVENDOR_ID_NOVOSIBIRSK_STATE_UNIVERSITY = 41842\nVENDOR_ID_UNI_FILM_CLUB_DORTMUND = 41843\nVENDOR_ID_PERF_IT_BV = 41844\nVENDOR_ID_BITCARRIER_SL = 41845\nVENDOR_ID_CHINASOFT_INTERNATIONAL_CO_LTD = 41846\nVENDOR_ID_EDALAB_SRL = 41847\nVENDOR_ID_TOVEK = 41848\nVENDOR_ID_CIDON = 41849\nVENDOR_ID_DAYSEQUERRA_CORPORATION = 41850\nVENDOR_ID_ZEB_ROLFESSCHIERENBECKASSOCIATES_GMBH = 41851\nVENDOR_ID_PEREGRINE_CAPITAL_MANAGEMENT = 41852\nVENDOR_ID_RAMI = 41853\nVENDOR_ID_WJ_BRADLEY = 41854\nVENDOR_ID_LOGOL = 41855\nVENDOR_ID_GRAND_VALLEY_STATE_UNIVERSITY = 41856\nVENDOR_ID_AGENCE_NATIONALE_DES_INFRASTRUCTURES_NUMERIQUES_ET_DES_FREQUENCES = 41857\nVENDOR_ID_THE_TRADE_DESK_INC = 41858\nVENDOR_ID_HIDDEN_DESIGN_KFT = 41859\nVENDOR_ID_ORYON_TI = 41860\nVENDOR_ID_TUCKER_ELLIS_LLP = 41861\nVENDOR_ID_METAWELL = 41862\nVENDOR_ID_MONGOOSE_GFX = 41863\nVENDOR_ID_EYEKOR_LLC = 41864\nVENDOR_ID_MONITOR_BUSINESS_MACHINES_LTD = 41865\nVENDOR_ID_HITACHI_LG_DATA_STORAGE_INC = 41866\nVENDOR_ID_YINYUETAI = 41867\nVENDOR_ID_ELECOM_CO_LTD = 41868\nVENDOR_ID_SELEX_GEMATRONIK_GMBH = 41869\nVENDOR_ID_NOTARTEL_SPA = 41870\nVENDOR_ID_SONIFEX_LTD = 41871\nVENDOR_ID_MASDAR_PV_GMBH = 41872\nVENDOR_ID_INSTITUT_SUPERIEUR_DELECTRONIQUE_DE_PARIS_ISEP = 41873\nVENDOR_ID_LLC_ANTE_MEDIAM = 41874\nVENDOR_ID_ESSELTE_IPR_AB = 41875\nVENDOR_ID_FOXCOMM_NETWORKS = 41876\nVENDOR_ID_ORBAN = 41877\nVENDOR_ID_TOBIAS_TOBIAS = 41878\nVENDOR_ID_MIND_LABS = 41879\nVENDOR_ID_MICROTEL_INNOVATION_SRL = 41880\nVENDOR_ID_KORBITEC_PTY_LTD = 41881\nVENDOR_ID_KLU_CONSULTING_KKUA_LOLO_UILA = 41882\nVENDOR_ID_TROJAN_TECHNOLOGIES = 41883\nVENDOR_ID_KATHERINE_SHAW_BETHEA_HOSPITAL = 41884\nVENDOR_ID_NDSOFTWARE = 41885\nVENDOR_ID_BEIJING_SAPLING_TECHNOLOGY_COLTD = 41886\nVENDOR_ID_ENSCO_INC = 41887\nVENDOR_ID_URZ_FRIEDRICH_SCHILLER_UNIVERSITT_JENA = 41888\nVENDOR_ID_NINE_INTERNET_SOLUTIONS_AG = 41889\nVENDOR_ID_CUYAHOGA_COMMUNITY_COLLEGE_DISTRICT = 41890\nVENDOR_ID_HOLLAND_LP = 41891\nVENDOR_ID_BIFIT_SERVICE = 41892\nVENDOR_ID_DBM_SRL = 41893\nVENDOR_ID_LOGISTICA_INTEGRAL = 41894\nVENDOR_ID_ALLIANCE_DATA = 41895\nVENDOR_ID_ALBERTA_ELECTRIC_SYSTEM_OPERATOR = 41896\nVENDOR_ID_INOVAR = 41897\nVENDOR_ID_AUSTRALIAN_NUCLEAR_SCIENCE_TECHNOLOGY_ORGANIZATION = 41898\nVENDOR_ID_YU_JYA_TECHNOLOGY_CO_LTD = 41899\nVENDOR_ID_MINISTRY_OF_INTERIOR_BULGARIA = 41900\nVENDOR_ID_CSG_SCIENCETECHNOLOGY_CO_LTDHEFEI = 41901\nVENDOR_ID_GEMEINDEVERWALTUNG_LANDQUART = 41902\nVENDOR_ID_ETL_SOLUTIONS_LTD = 41903\nVENDOR_ID_IMPALA_EDITORES_SA = 41904\nVENDOR_ID_GREAT_WEST_LIFE = 41905\nVENDOR_ID_VERISIGN_INC = 41906\nVENDOR_ID_LOUDCELL_TECHNOLOGIES_PVT_LTD = 41907\nVENDOR_ID_HANKEINFO = 41908\nVENDOR_ID_AVENTURAHQ_INC = 41909\nVENDOR_ID_ZENTYAL = 41910\nVENDOR_ID_GREAT_PLAINS_MANUFACTURING_INC = 41911\nVENDOR_ID_INTERNATIONAL_ELECTROTECHNICAL_COMMISSION = 41912\nVENDOR_ID_TECSYS_DO_BRASIL_INDUSTRIAL_LTDA = 41913\nVENDOR_ID_BRADFORD_ROBOTIC_TELESCOPE = 41914\nVENDOR_ID_SOUTHWESTERN_ENERGY_CO = 41915\nVENDOR_ID_VIPTELA_INC = 41916\nVENDOR_ID_LEICA_GEOSYSTEMS_AG = 41917\nVENDOR_ID_CIT_TELECOM_SERVICE_JSC = 41918\nVENDOR_ID_UGOBAME_UCHIBEKE = 41919\nVENDOR_ID_SHENZHEN_INTEGRATED_ELECTRONIC_SYSTERMS_LAB_COLTD = 41920\nVENDOR_ID_BEIJING_INFOMEDIA_ELECTRONIC_TECHNOLOGY_CO_LTD = 41921\nVENDOR_ID_GUANGDONG_SUPER_TELECOM_COLTD = 41922\nVENDOR_ID_PATRICK_SCZEPANSKI = 41923\nVENDOR_ID_DIGITAL_VALUE_SL = 41924\nVENDOR_ID_NUFARM_LIMITED = 41925\nVENDOR_ID_FINECOM_TELECOMMUNICATIONS_AG = 41926\nVENDOR_ID_FORO_TELE = 41927\nVENDOR_ID_MUIR_MATHESON_LTD = 41928\nVENDOR_ID_JUNG_DMS_CIE_AG = 41929\nVENDOR_ID_NAUTRONIX_LIMITED = 41930\nVENDOR_ID_CMC_ELECTRONICS = 41931\nVENDOR_ID_HSC_BRASIL = 41932\nVENDOR_ID_ALIGERA = 41933\nVENDOR_ID_NKI_AS = 41934\nVENDOR_ID_INDIAN_RIVER_COUNTY_SHERIFF = 41935\nVENDOR_ID_MARWAY_POWER_SOLUTIONS = 41936\nVENDOR_ID_ESCOLA_AGRICOLA_DE_JUNDIAI_EAJ_UFRN = 41937\nVENDOR_ID_INCEPTRUM_TECHNOLOGIES_INC = 41938\nVENDOR_ID_TRALIX_MXICO_S_DE_RL_DE_CV = 41939\nVENDOR_ID_BRADBURY_SCHOOL = 41940\nVENDOR_ID_STUSTANET_E_V = 41941\nVENDOR_ID_LETTERGEN = 41942\nVENDOR_ID_BARTEC_GMBH = 41943\nVENDOR_ID_VIRGINIA_DEPARTMENT_OF_BEHAVIORAL_HEALTH_AND_DEVELOPMENTAL_SERVICES = 41944\nVENDOR_ID_INSTITUTION_SOLUTIONS = 41945\nVENDOR_ID_THE_INFORMATION_ARCHITECTURE_INSTITUTE = 41946\nVENDOR_ID_UNIDEM_SALES_INC = 41947\nVENDOR_ID_JOB_SNIJDERS = 41948\nVENDOR_ID_DANMAGI = 41949\nVENDOR_ID_DTI_SOLUTIONS = 41950\nVENDOR_ID_QUARLES_BRADY_LLP = 41951\nVENDOR_ID_ASAD_AHMED = 41952\nVENDOR_ID_JSC_ESC_OF_EVRAAS = 41953\nVENDOR_ID_POLEWALL_NORGE_AS = 41954\nVENDOR_ID_JANSEN_AG = 41955\nVENDOR_ID_FELLIG_EV = 41956\nVENDOR_ID_OLFEO = 41957\nVENDOR_ID_PRIME_RATE_LTD = 41958\nVENDOR_ID_EARLHAM_COLLEGE = 41959\nVENDOR_ID_EASYGO = 41960\nVENDOR_ID_INTRACOM_SYSTEMS_LLC = 41961\nVENDOR_ID_3ZTELECOM_INC = 41962\nVENDOR_ID_WEBAMPHIBIANCOM = 41963\nVENDOR_ID_OZONA_CONSULTING_SL = 41964\nVENDOR_ID_MANO_NAMAI_UK = 41965\nVENDOR_ID_APPLIED_CARD_TECHNOLOGIES_LTD = 41966\nVENDOR_ID_PIVOT_POINT_SECURITY = 41967\nVENDOR_ID_EPCOTS = 41968\nVENDOR_ID_ENERO_SOLUTIONS_INC = 41969\nVENDOR_ID_ORION_NETWORKS_INTERNATIONAL_INC = 41970\nVENDOR_ID_TOUCH_TECNOLOGIA_E_INFORMTICA_LTDA = 41971\nVENDOR_ID_POZNAN_UNIVERSITY_OF_LIFE_SCIENCES = 41972\nVENDOR_ID_GENERATION_TECH = 41973\nVENDOR_ID_AUF_NACH_MALLORCA_GMBH = 41974\nVENDOR_ID_ALNET_ELEKTROMEKANIK_LTD = 41975\nVENDOR_ID_TURVASANA_TMI = 41976\nVENDOR_ID_OAKLAND_COUNTY_MICHIGAN = 41977\nVENDOR_ID_BEIJING_DING_QING_TECHNOLOGY_LTD = 41978\nVENDOR_ID_MITSUBISHI_ELECTRIC_TOKKI_SYSTEMS_CORPORATION = 41979\nVENDOR_ID_NEO_RENAISSANCE_STUDIOS = 41980\nVENDOR_ID_AERVOX = 41981\nVENDOR_ID_ZETVISIONS_AG = 41982\nVENDOR_ID_VORBOSS_LIMITED = 41983\nVENDOR_ID_METERRIBLECREWNET = 41984\nVENDOR_ID_DESVAUX_LABS = 41985\nVENDOR_ID_DEEPEARTHCOUK = 41986\nVENDOR_ID_BMO_CAPITAL_MARKETS = 41987\nVENDOR_ID_VAN_WERT_COUNTY_HOSPITAL = 41988\nVENDOR_ID_ALPHATRON_SECURITY_SYSTEMS = 41989\nVENDOR_ID_PELAGICORE_AG = 41990\nVENDOR_ID_SUPER_VISIONS = 41991\nVENDOR_ID_HOPPE_HOLDING_AG = 41992\nVENDOR_ID_REDACTIA = 41993\nVENDOR_ID_JONAS_KOPP_SYSTEMS_TRUST_NETWORK = 41994\nVENDOR_ID_SIA_CE = 41995\nVENDOR_ID_COM_TECH_ITALIA_SPA = 41996\nVENDOR_ID_SILVERSKY_INC = 41997\nVENDOR_ID_BUMICOM_TELECOMMUNICATIE_BV = 41998\nVENDOR_ID_E2X_LTD = 41999\nVENDOR_ID_NATIONAL_MINERAL_RESOURCE_UNIVERSITY = 42000\nVENDOR_ID_TECHDIVISION_GMBH = 42001\nVENDOR_ID_HURRIKANE_SYSTEMS = 42002\nVENDOR_ID_AKRON_PUBLIC_SCHOOLS = 42003\nVENDOR_ID_GERTEC = 42004\nVENDOR_ID_NHST_MEDIA_GROUP_AS = 42005\nVENDOR_ID_NETIS_KOREA = 42006\nVENDOR_ID_NIKOLAKOCO = 42007\nVENDOR_ID_BUMEBOX_INC = 42008\nVENDOR_ID_RIAVA_NETWORKS_INC = 42009\nVENDOR_ID_LUXUL_CORPORATION = 42010\nVENDOR_ID_ISAAC_SOFTWARE_SOLUTIONS_BV = 42011\nVENDOR_ID_MANGOLD_TECHNOLOGIES = 42012\nVENDOR_ID_REGISTRO_GENERAL_DE_LA_PROPIEDAD_DE_GUATEMALA = 42013\nVENDOR_ID_FRANCOIS_TRAHAN = 42014\nVENDOR_ID_WEILHAMMER_NETWORKS = 42015\nVENDOR_ID_KINGMAN_REGIONAL_MEDICAL_CENTER = 42016\nVENDOR_ID_MAILMAK_APS = 42017\nVENDOR_ID_NUMO_LABS_PTY_LTD = 42018\nVENDOR_ID_FORT_TELECOM = 42019\nVENDOR_ID_PITER_GAZ_JSC = 42020\nVENDOR_ID_VOICECOM_SA = 42021\nVENDOR_ID_ITUS_JAPAN_COLTD = 42022\nVENDOR_ID_THETUS_CORPORATION = 42023\nVENDOR_ID_CIBERTEC_INTERNACIONAL = 42024\nVENDOR_ID_KOJI_KOMATSUZAKI = 42025\nVENDOR_ID_TSTREAM_COLTD = 42026\nVENDOR_ID_SANCTUM_NETWORKS_P_LTD = 42027\nVENDOR_ID_ARNEL_LIMITED = 42028\nVENDOR_ID_AMIGO_SOFTWARE = 42029\nVENDOR_ID_GHOST_SOFTWARE = 42030\nVENDOR_ID_42 = 42031\nVENDOR_ID_SWISSPARTNERS_INVESTMENT_NETWORK_AG = 42032\nVENDOR_ID_ISLALINK = 42033\nVENDOR_ID_INTEMO_TECHNOLOGIES = 42034\nVENDOR_ID_ZEDGE = 42035\nVENDOR_ID_LOYTEC_ELECTRONICS_GMBH = 42036\nVENDOR_ID_STADT_AUGSBURG = 42037\nVENDOR_ID_SANQUIN_BLOEDVOORZIENING = 42038\nVENDOR_ID_LABORATOIRE_JACQUES_LOUIS_LIONS = 42039\nVENDOR_ID_NASUNI_CORPORATION = 42040\nVENDOR_ID_VNERHAMN_AB = 42041\nVENDOR_ID_INCA_TELECOM_SAC = 42042\nVENDOR_ID_DINGLI_COMMUNICATIONS_CORP_LTD = 42043\nVENDOR_ID_GMQ_CONSULTING_AB = 42044\nVENDOR_ID_LOGICAL_TOOLS_SRL = 42045\nVENDOR_ID_DIGITALSIGN_CERTIFICAO_DIGITAL_LTDA = 42046\nVENDOR_ID_TWISLA_CLEMENT_MARTIN = 42047\nVENDOR_ID_CIRCLE_OF_LIFE_HOSPICE = 42048\nVENDOR_ID_ACHKEY_LTD = 42049\nVENDOR_ID_CHINA_SECURITY_SURVEILLANCE_TECHNOLOGYINC = 42050\nVENDOR_ID_SKYWARD_INFORMATION_SYSTEM_COLTD = 42051\nVENDOR_ID_VITAPUBLIC_GMBH = 42052\nVENDOR_ID_MEDVISION360 = 42053\nVENDOR_ID_STADLER_BUSSNANG_AG = 42054\nVENDOR_ID_WEST_LOTHIAN_COUNCIL = 42055\nVENDOR_ID_MULTITOLL_SOLUTIONS_SAS = 42056\nVENDOR_ID_CEGEDIM = 42057\nVENDOR_ID_LOMNIDO_SRO = 42058\nVENDOR_ID_MED2020_HEALTH_CARE_SOFTWARE_INC = 42059\nVENDOR_ID_EGON_BRAUN = 42060\nVENDOR_ID_SQUARETWO_FINANCIAL = 42061\nVENDOR_ID_CYBERTRANSJAPAN_CO_LTD = 42062\nVENDOR_ID_GUIDOON_SAS = 42063\nVENDOR_ID_ROYSE_CITY_ISD = 42064\nVENDOR_ID_IBERIA = 42065\nVENDOR_ID_DBSPECTRA = 42066\nVENDOR_ID_BAYERISCHE_STAATSFORSTEN_AOER = 42067\nVENDOR_ID_UBM_DRECKER_GMBH = 42068\nVENDOR_ID_THE_COMPTROLLER_GENERALS_DEPARTMENT = 42069\nVENDOR_ID_GERMAN_AEROSPACE_CENTER_INSTITUTE_OF_COMMUNICATIONS_AND_NAVIGATION = 42070\nVENDOR_ID_SPRECHER_AUTOMATION_GMBH = 42071\nVENDOR_ID_HOMES_AND_COMMUNITIES_AGENCY = 42072\nVENDOR_ID_DATASE = 42073\nVENDOR_ID_DELTENNA_LIMITED = 42074\nVENDOR_ID_BAFO_TECHNOLOGIES_CORP = 42075\nVENDOR_ID_SALTATION_GMBH_CO_KG = 42076\nVENDOR_ID_SRATIO = 42077\nVENDOR_ID_RECURSOFTORG = 42078\nVENDOR_ID_ARMY_EMERGENCY_RELIEF = 42079\nVENDOR_ID_DAJAR = 42080\nVENDOR_ID_TRAVAILPRIVE = 42081\nVENDOR_ID_TRAVIS_PERKINS_PLC = 42082\nVENDOR_ID_JS_NETWORKING_LAB = 42083\nVENDOR_ID_MIKE_MACKINTOSH = 42084\nVENDOR_ID_PROLATERAL_CONSULTING_LTD = 42085\nVENDOR_ID_VOSSLOH_COGIFER = 42086\nVENDOR_ID_BUSINESS_INSURANCE_DIRECT = 42087\nVENDOR_ID_LEGAL_GENERAL_NEDERLAND = 42088\nVENDOR_ID_RAMBLER_INTERNET_HOLDING_LLC = 42089\nVENDOR_ID_ALEAT_SHPK = 42090\nVENDOR_ID_TRITECH_INTERNATIONAL_LIMITED = 42091\nVENDOR_ID_SERTTEL_LTDA = 42092\nVENDOR_ID_EXPAND = 42093\nVENDOR_ID_BFABRICORG = 42094\nVENDOR_ID_NII_SOKB_LTD = 42095\nVENDOR_ID_IQNET_LTD = 42096\nVENDOR_ID_IT2U_CZECH_SRO = 42097\nVENDOR_ID_FAHRZEUGSYSTEMDATEN_GMBH = 42098\nVENDOR_ID_SMART_GREEN_LABS_SL = 42099\nVENDOR_ID_DV_INDUSTRIAL_COMPUTER_LTD = 42100\nVENDOR_ID_ITEL = 42101\nVENDOR_ID_COMMUNICATIONS_AUDIT_UK_LTD = 42102\nVENDOR_ID_HMCW_GMBH = 42103\nVENDOR_ID_WI2BE_TECNOLOGIA_S_A = 42104\nVENDOR_ID_WEBCONTROL = 42105\nVENDOR_ID_MIGHTY_APPARATUS_FOR_RADIOBRODCASTING_AND_TV_JOINT_STOCK_COMPANY = 42106\nVENDOR_ID_SOUTH_CAROLINA_DEPARTMENT_OF_REVENUE = 42107\nVENDOR_ID_HRSOFTWORKS = 42108\nVENDOR_ID_LINUX_BASED_SYSTEMS_DESIGN_LTD = 42109\nVENDOR_ID_API_DIGITAL_COMMUNICATIONS_GROUP_LLC = 42110\nVENDOR_ID_INOVONICS_INC = 42111\nVENDOR_ID_KAKAPO_TECHNOLOGIES_LTD = 42112\nVENDOR_ID_STASOFTNET = 42113\nVENDOR_ID_FINNISH_INSTITUTE_OF_OCCUPATIONAL_HEALTH = 42114\nVENDOR_ID_COMMERCEWEST_BANK = 42115\nVENDOR_ID_AIG = 42116\nVENDOR_ID_OMAN_TELECOMMUNICATIONS_COMPANY_SAOG = 42117\nVENDOR_ID_IDENTACC = 42118\nVENDOR_ID_TRACT_CJSC = 42119\nVENDOR_ID_MULTIMATIC_INC = 42120\nVENDOR_ID_MICHIGAN_PUBLIC_HEALTH_INSTITUTE = 42121\nVENDOR_ID_YURUR = 42122\nVENDOR_ID_SHANGHAI_XINYOU_INFORMATION_TECHNOLOGY_CO_LTD = 42123\nVENDOR_ID_YN_IT = 42124\nVENDOR_ID_CK_ENGINEERING_LTD = 42125\nVENDOR_ID_NOVARCHIVE = 42126\nVENDOR_ID_SYMCOM_INC = 42127\nVENDOR_ID_KUL_ELEKTRONIK_TEKNOLOJILERI_LTD = 42128\nVENDOR_ID_CONTINENTAL_GRAPHICS_CORP = 42129\nVENDOR_ID_SKYLINK_TECHNOLOGY_INC = 42130\nVENDOR_ID_WESTMONT_COLLEGE = 42131\nVENDOR_ID_APPLIED_SECURITY_GMBH = 42132\nVENDOR_ID_GOS_NETWORKS_LTD = 42133\nVENDOR_ID_SCALEARC = 42134\nVENDOR_ID_TRUSTE = 42135\nVENDOR_ID_ULTRA_ELECTRONICS_AIRPORT_SYSTEMS = 42136\nVENDOR_ID_UNIPAGOS_S_DE_RL_DE_CV = 42137\nVENDOR_ID_VIRTUALMASTER_SRO = 42138\nVENDOR_ID_INTERNET_CORPORATION_FOR_ASSIGNED_NAMES_AND_NUMBERS = 42139\nVENDOR_ID_BITFABRIK_GMBH_CO_KG = 42140\nVENDOR_ID_LABORATOIRE_DINFORMATIQUE_PARIS_NORD = 42141\nVENDOR_ID_THE_FACULTY_OF_ADVOCATES = 42142\nVENDOR_ID_MOOSE_BEAST_SOFTWARE = 42143\nVENDOR_ID_CYCOS_AG = 42144\nVENDOR_ID_PRIME_APPARATUS = 42145\nVENDOR_ID_ENTOBILSOFT_INC = 42146\nVENDOR_ID_PEPPERLFUCHS_GMBH = 42147\nVENDOR_ID_THE_GENEVA_FOUNDATION = 42148\nVENDOR_ID_CLOUD_LIFE_SOFTWARE_LLC = 42149\nVENDOR_ID_AFFINIINTERNATIONAL_BV = 42150\nVENDOR_ID_NET_BUSINESS_PTY_LTD = 42151\nVENDOR_ID_ITRANSITION = 42152\nVENDOR_ID_CHUDEN_CTI_COLTD = 42153\nVENDOR_ID_OAK3_GMBH = 42154\nVENDOR_ID_EVOLUTION_RACINGTEAM_SAAR = 42155\nVENDOR_ID_NEOLAB_SYSTEMS_SARL = 42156\nVENDOR_ID_CERTIFIRMA_SOCIEDAD_ANONIMA = 42157\nVENDOR_ID_NETAGENT_CO_LTD = 42158\nVENDOR_ID_AT_BIOTECH_TRACEABILITY_INFORMATION_SYSTEMS_SLU = 42159\nVENDOR_ID_IVERDAHL_SYSTEMS = 42160\nVENDOR_ID_GIE_AGIRC_ARRCO = 42161\nVENDOR_ID_NAKAYO_ELECTRONICS_COLTD = 42162\nVENDOR_ID_EBS_SERVICE_COMPANY_LIMITED = 42163\nVENDOR_ID_MINISTRIO_PBLICO_DO_RS = 42164\nVENDOR_ID_PI_CORAL_INC = 42165\nVENDOR_ID_SAINT_JOSEPHS_HOSPITAL_YONKERS = 42166\nVENDOR_ID_DATA_TOTE = 42167\nVENDOR_ID_BLACKCHAIR_LTD = 42168\nVENDOR_ID_THE_COCA_COLA_COMPANY = 42169\nVENDOR_ID_TIGER_COMPUTING_LTD = 42170\nVENDOR_ID_GRAVITATE = 42171\nVENDOR_ID_STRENCOM = 42172\nVENDOR_ID_ADICZION_SARL = 42173\nVENDOR_ID_THIEMONET = 42174\nVENDOR_ID_REFER_TELECOM_SA = 42175\nVENDOR_ID_EBERND = 42176\nVENDOR_ID_ANUTA_NETWORKS_INC = 42177\nVENDOR_ID_NYM_NETWORKS = 42178\nVENDOR_ID_SONORA_QUEST_LABORATORIES = 42179\nVENDOR_ID_KANTONSSPITAL_WINTERTHUR = 42180\nVENDOR_ID_WAVECOM_SOLUES_RDIO_SA = 42181\nVENDOR_ID_SPEED_AND_FUNCTION = 42182\nVENDOR_ID_DIGITUS_BIOMETRICS = 42183\nVENDOR_ID_ECG_MANAGEMENT_CONSULTANTS_INC = 42184\nVENDOR_ID_DEMTECH = 42185\nVENDOR_ID_NATIONAL_CEMENT_COMPANY_INC = 42186\nVENDOR_ID_PODOMATIC_INC = 42187\nVENDOR_ID_MATRIXGROUP_CMS_PTY_LTD = 42188\nVENDOR_ID_JRTWINE_SOFTWARE_LLC = 42189\nVENDOR_ID_GENOWISE = 42190\nVENDOR_ID_TOTALSERVE_PTY_LTD = 42191\nVENDOR_ID_IDF_CONNECT_INC = 42192\nVENDOR_ID_ALPHA_NETWORKS_SA = 42193\nVENDOR_ID_MATTHEWS_MIDRANGE_CONSULTING_INC = 42194\nVENDOR_ID_TEKTORQUE_LDA = 42195\nVENDOR_ID_CAULDRON_DEVELOPMENT_LLC = 42196\nVENDOR_ID_COFFEE_BEAN_SOFTWARE_PTY_LTD = 42197\nVENDOR_ID_IO_POWER_TECHNOLOGY_CO_LTD = 42198\nVENDOR_ID_FOOTHILLS_RURAL_TELEPHONE_COOPERATIVE_CORPORATION_INC = 42199\nVENDOR_ID_ECIL_INFORMTICA_INDSTRIA_E_COMERCIO_LTDA = 42200\nVENDOR_ID_SCHENKER_INC = 42201\nVENDOR_ID_FREETEL_SRO = 42202\nVENDOR_ID_TRAOTOPZIO_INFORMTICA_UNIPESSOAL_LDA = 42203\nVENDOR_ID_KUMOYA_NETWORK = 42204\nVENDOR_ID_DOOKS_COMPUTER_SERVICES_LTD = 42205\nVENDOR_ID_PROELSE = 42206\nVENDOR_ID_COMMISSION_SCOLAIRE_DE_LA_POINTE_DE_LILE = 42207\nVENDOR_ID_ITECPLUS_GMBH = 42208\nVENDOR_ID_CHARLESREAD_DOT_COM = 42209\nVENDOR_ID_BEENIUS_DOO = 42210\nVENDOR_ID_SHENZHEN_HUAXUNARK_TECHNOLOGY_CO_LTD = 42211\nVENDOR_ID_CARECENTER_SOFTWARE_GMBH = 42212\nVENDOR_ID_TROYDENTONCA = 42213\nVENDOR_ID_KAPLAN_BILISIM_TEKNOLOJILERI_YAZILIM_VE_TICARET_LTD = 42214\nVENDOR_ID_ALERANT_INC = 42215\nVENDOR_ID_BLUECORNER = 42216\nVENDOR_ID_KHOO_SOFTWARE_SOLUTIONS = 42217\nVENDOR_ID_VALLEYCARE_HEALTH_SYSTEM = 42218\nVENDOR_ID_UNICREDIT_LUXEMBOURG_SA = 42219\nVENDOR_ID_TELEDATA_IT_LSUNGEN_GMBH = 42220\nVENDOR_ID_SYL_RESEARCH_LIMITED = 42221\nVENDOR_ID_INTEGRATED_SYSTEMS_TECHNOLOGY_INC = 42222\nVENDOR_ID_ARCHIVE_ANALYTICS_LTD = 42223\nVENDOR_ID_FRAUNHOFER_PORTUGAL_RESEARCH_CENTER_FOR_ASSISTIVE_INFORMATION_AND_COMMUNICATION_SOLUTIONS_FRAUNHOFER_AICOS = 42224\nVENDOR_ID_AMCO_MARKETING = 42225\nVENDOR_ID_EVOLVE_MEDIA_LLC = 42226\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_MIKROSTRUKTURPHYSIK = 42227\nVENDOR_ID_CENTER_GROUP = 42228\nVENDOR_ID_CORIANT_RD_GMBH = 42229\nVENDOR_ID_HIPROCALL_GMBH = 42230\nVENDOR_ID_ALFATREIN_LTD = 42231\nVENDOR_ID_FANZZ = 42232\nVENDOR_ID_SIGMA_DESIGNS_INC = 42233\nVENDOR_ID_KNOTICE_LTD = 42234\nVENDOR_ID_TRESORIT_KFT = 42235\nVENDOR_ID_RDT_LTD = 42236\nVENDOR_ID_TEXAS_AM_UNIVERSITY_CENTRAL_TEXAS = 42237\nVENDOR_ID_GRENVILLE_MUTUAL_INSURANCE_COMPANY = 42238\nVENDOR_ID_ASPIRA_NETWORKS_INC = 42239\nVENDOR_ID_KEYANO_COLLEGE = 42240\nVENDOR_ID_GEOQUIP_WORLDWIDE = 42241\nVENDOR_ID_ZNETS = 42242\nVENDOR_ID_DLA_PIPER_LLP_US = 42243\nVENDOR_ID_ITS_EXPRESS_INC = 42244\nVENDOR_ID_TAGGED_INC = 42245\nVENDOR_ID_ONEPIN_INC = 42246\nVENDOR_ID_ALEPH01 = 42247\nVENDOR_ID_SAIV = 42248\nVENDOR_ID_CLARITECH_SRL = 42249\nVENDOR_ID_HFC_TECHNICS_LTD = 42250\nVENDOR_ID_FUTURETEK_INC = 42251\nVENDOR_ID_PFLEGEHEIM_ALEXANDER_BEER_GMBH_CO_KG = 42252\nVENDOR_ID_ZALANDO_GMBH = 42253\nVENDOR_ID_INLINE_TELECOM_SOLUTIONS = 42254\nVENDOR_ID_THE_ALL_ENGLAND_LAWN_TENNIS_CLUB_CHAMPIONSHIPS_LIMITED = 42255\nVENDOR_ID_MCGUIREWOODS_LLP = 42256\nVENDOR_ID_CAMBRIDGE_MAJOR_LABORATORIES_INC = 42257\nVENDOR_ID_OOBLICKCOM = 42258\nVENDOR_ID_GREEN_ENERGY_OPTIONS_LTD = 42259\nVENDOR_ID_BENT_VECTOR = 42260\nVENDOR_ID_SAYEGH_JOHN_E_TROLLEY_GBR = 42261\nVENDOR_ID_TECHREDE_LLC = 42262\nVENDOR_ID_SERVAS = 42263\nVENDOR_ID_FABIEN_DEBUIRE = 42264\nVENDOR_ID_THUNDER_SOFTWARE_TECHNOLOGY_CO_LTD = 42265\nVENDOR_ID_OTTO_GMBH_CO_KG = 42266\nVENDOR_ID_SARL_MIXCOM = 42267\nVENDOR_ID_MEWA_TEXTIL_SERVICE_AG_CO_MANAGEMENT_OHG = 42268\nVENDOR_ID_RIGSPOLITIET_DANISH_NATIONAL_POLICE = 42269\nVENDOR_ID_AZIENDA_UNITA_SANITARIA_LOCALE_DI_PARMA = 42270\nVENDOR_ID_FIXIOUS_GLOBAL_INDONESIA = 42271\nVENDOR_ID_HOWARD_UNIVERSITY_HOSPITAL = 42272\nVENDOR_ID_AMPER_2 = 42273\nVENDOR_ID_NEXUSGUARD_LIMITED = 42274\nVENDOR_ID_ADVANCED_MR_ANALYTICS_AB = 42275\nVENDOR_ID_INFRAGEAR_INC = 42276\nVENDOR_ID_CSWIO = 42277\nVENDOR_ID_PRECITEL_SA = 42278\nVENDOR_ID_SENSMASTER_S_B = 42279\nVENDOR_ID_SATEXPANDER = 42280\nVENDOR_ID_INFOBRIDGE_SOLUTIONS = 42281\nVENDOR_ID_PRAGMATIX_SERVICES_PRIVATE_LIMITED = 42282\nVENDOR_ID_BERWICK_AREA_SCHOOL_DISTRICT = 42283\nVENDOR_ID_KAI_VAN_ES = 42284\nVENDOR_ID_FCS_COMPUTER_SYSTEMS_SDN_BHD = 42285\nVENDOR_ID_CONNECTEM_INC = 42286\nVENDOR_ID_UAP_INC = 42287\nVENDOR_ID_SPORTECH_INC = 42288\nVENDOR_ID_NETTECH_ASSOCIATES_LLC = 42289\nVENDOR_ID_LLC_SYSVISOR = 42290\nVENDOR_ID_DWANGO_MOBILE_CO_LTD = 42291\nVENDOR_ID_SL_AUDIO_A_S = 42292\nVENDOR_ID_NORTH_WEST_CUSTOMS_LOGISTICAL_SERVICE_CO_LTD = 42293\nVENDOR_ID_S_AS_LTD = 42294\nVENDOR_ID_IMZADIDE_NETWORK = 42295\nVENDOR_ID_IMPERO_SOLUTIONS_LTD = 42296\nVENDOR_ID_FRAUNHOFER_INSTITUT_FUER_KOMMUNIKATION_INFORMATIONSVERARBEITUNG_UND_ERGONOMIE_FKIE = 42297\nVENDOR_ID_SMOOTHWALL_LTD = 42298\nVENDOR_ID_JOHNSON_FINANCIAL_GROUP = 42299\nVENDOR_ID_MINISTRE_DE_LA_SANT_ET_DES_SERVEURS_SOCIAUX = 42300\nVENDOR_ID_TURLEYCLANCOM = 42301\nVENDOR_ID_BEIJING_FOREASE_TIMES_TECHNOLOGY_CO_LTD = 42302\nVENDOR_ID_TE_SYSTEMS_GMBH = 42303\nVENDOR_ID_IT_SYNERGY_GMBH = 42304\nVENDOR_ID_LUPUS_ALPHA_ASSET_MANAGEMENT = 42305\nVENDOR_ID_CANARIE_INC = 42306\nVENDOR_ID_WILDCARD_UK_LTD = 42307\nVENDOR_ID_INDEXUNIVERSE_LLC = 42308\nVENDOR_ID_SKALE_INC = 42309\nVENDOR_ID_MATRIX_SWITCH_CORPORATION = 42310\nVENDOR_ID_X_CENTRIC_SOLUTIONS = 42311\nVENDOR_ID_HANGZHOU_ZAILING_ELECTRONIC_TECHNOLOGY_CO_LTD = 42312\nVENDOR_ID_SYNERGY_TECNOLOGIA = 42313\nVENDOR_ID_D2D_TECHNOLOGIES_LLC = 42314\nVENDOR_ID_MOBISANTE_INC = 42315\nVENDOR_ID_PRAGMATECH = 42316\nVENDOR_ID_INVENTIA = 42317\nVENDOR_ID_RECOGNITION_TECHNOLOGIES_LTD = 42318\nVENDOR_ID_777_TECHNOLOGY_SOLUTIONS_LIMITED = 42319\nVENDOR_ID_UNASSIGNED_50 = 42320\nVENDOR_ID_MOTHER_LODE_HOLDING_COMPANY = 42321\nVENDOR_ID_TRAKSYSTEMS = 42322\nVENDOR_ID_DEMMA = 42323\nVENDOR_ID_POWERCODE_LLC = 42324\nVENDOR_ID_DIALIGHT_INC = 42325\nVENDOR_ID_ICON_AMERICAS = 42326\nVENDOR_ID_IEEE_STUDENT_BRANCH_PASSAU = 42327\nVENDOR_ID_NEMENTIS = 42328\nVENDOR_ID_IPOWERTEC = 42329\nVENDOR_ID_DELTAPATH_COMMERCE_AND_TECHNOLOGY_LIMITED = 42330\nVENDOR_ID_POLARLINK = 42331\nVENDOR_ID_VAILLANT_GROUP = 42332\nVENDOR_ID_ALITER_TECHNOLOGIES_AS = 42333\nVENDOR_ID_RELMEK_CO_LTD = 42334\nVENDOR_ID_IQ_CONSULT_PTY_LTD = 42335\nVENDOR_ID_ADITO_SOFTWARE_GMBH = 42336\nVENDOR_ID_NEW_YORK_STATE_WORKERS_COMPENSATION_BOARD = 42337\nVENDOR_ID_ANYWHERE24_TECHNOLOGIES_GMBH = 42338\nVENDOR_ID_SABTECH = 42339\nVENDOR_ID_OPEN_STANDARD_DIGITAL_IF_INTERFACE = 42340\nVENDOR_ID_TUCSON_AIRPORT_AUTHORITY = 42341\nVENDOR_ID_GUANGDONG_CABLE_CORPORATION_LIMITED = 42342\nVENDOR_ID_JAMES_HURLEY = 42343\nVENDOR_ID_PULI_SPACE_TECHNOLOGIES_LTD = 42344\nVENDOR_ID_FLUIDIC_INC_D_B_A_FLUIDIC_ENERGY = 42345\nVENDOR_ID_E_SIGN_SA = 42346\nVENDOR_ID_TOYOU_FEIJI_ELECTRONICS_CO_LTD = 42347\nVENDOR_ID_RUSNANO = 42348\nVENDOR_ID_NOACK_GROUP = 42349\nVENDOR_ID_TREBING_HIMSTEDT_PROZESSAUTOMATION_GMBH_CO_KG = 42350\nVENDOR_ID_CHAMPS_LIBRES_SCRLFS = 42351\nVENDOR_ID_HANWECK_ASSOCIATES_LLC = 42352\nVENDOR_ID_LOTTSPOT = 42353\nVENDOR_ID_TRACKPROTECT_BV = 42354\nVENDOR_ID_ABCTEC = 42355\nVENDOR_ID_ELECTRONIC_MEDIA_SERVICES_LTD = 42356\nVENDOR_ID_CHILLI_MINT_LABS_LIMITED = 42357\nVENDOR_ID_IP2I = 42358\nVENDOR_ID_VERSA_NETWORKS_INC = 42359\nVENDOR_ID_SKYBOX_IMAGING_INC = 42360\nVENDOR_ID_RAHONT = 42361\nVENDOR_ID_SPACEFROGGNET = 42362\nVENDOR_ID_DEMATIS = 42363\nVENDOR_ID_OPTOSCAPE_OPTICAL_ELECTRONIC_TECHCOLTD = 42364\nVENDOR_ID_H_M_HENNES_MAURITZ_AB = 42365\nVENDOR_ID_WXBR_WIRELESS_BROADBAND_SOLUCTIONS = 42366\nVENDOR_ID_GEDOMO_GMBH = 42367\nVENDOR_ID_AZURU_NETWORKS = 42368\nVENDOR_ID_SOFTEL_LTD = 42369\nVENDOR_ID_ADRIATIC_SLOVENICA_DD = 42370\nVENDOR_ID_PA_CSS_PENNSYLVANIA_EHEALTH_PARTNERSHIP_AUTHORITYS_COMMUNITY_SHARED_SERVICES = 42371\nVENDOR_ID_BANTERRA = 42372\nVENDOR_ID_KLINIKEN_DES_MTK_GMBH = 42373\nVENDOR_ID_INMAR_ENTERPRISES = 42374\nVENDOR_ID_UNASSIGNED_51 = 42375\nVENDOR_ID_OCEDO_GMBH_FORMERLY_XYNE_GMBH = 42376\nVENDOR_ID_MBD_CONSULTING_LLC = 42377\nVENDOR_ID_FOSS_GROUP_GMBH = 42378\nVENDOR_ID_DANSKE_FRAGTMND_A_S = 42379\nVENDOR_ID_IDFOCUS = 42380\nVENDOR_ID_HUMAN_BRAIN_PROJECT = 42381\nVENDOR_ID_ISYSTEMS_EU = 42382\nVENDOR_ID_HORIZON_FUEL_CELL_TECHNOLOGIES = 42383\nVENDOR_ID_TECNOLOGAS_INTELIGENTES_Y_MODELACIN_DE_SISTEMAS_SA_DE_CV = 42384\nVENDOR_ID_AIC_INC = 42385\nVENDOR_ID_DYLANHARRISORG = 42386\nVENDOR_ID_COMPUTEK_INDUSTRIES = 42387\nVENDOR_ID_TEL_STER_SP_Z_OO = 42388\nVENDOR_ID_ITAL_MEC_SRL = 42389\nVENDOR_ID_OSLO_KFUMS_SJKORPS = 42390\nVENDOR_ID_EASTERN_INFORMATICS_INC = 42391\nVENDOR_ID_FOXTER_CIA_IMOBILIRIA = 42392\nVENDOR_ID_TELEDATA_COMUNICACIONES_SA = 42393\nVENDOR_ID_SYNAPSE = 42394\nVENDOR_ID_EPM = 42395\nVENDOR_ID_XSINFOSOL_PVT_LTD = 42396\nVENDOR_ID_GRANDSTREAM_NETWORKS_INC = 42397\nVENDOR_ID_KNCMINER_AB = 42398\nVENDOR_ID_GARUDA_PERMATA_SAPUTRA_CV = 42399\nVENDOR_ID_TD_TECH_LTD = 42400\nVENDOR_ID_CANTECH_SRO = 42401\nVENDOR_ID_SPEC_SA = 42402\nVENDOR_ID_IVANE_JAVAKHISHVILI_TBILISI_STATE_UNIVERSITY = 42403\nVENDOR_ID_VADACOM_LIMITED = 42404\nVENDOR_ID_ROAMBOTICS_INC = 42405\nVENDOR_ID_SATO_CORPORATION = 42406\nVENDOR_ID_IGRID_SL = 42407\nVENDOR_ID_HEALTHSAFE24 = 42408\nVENDOR_ID_TOPMENUCOM = 42409\nVENDOR_ID_BLUE_DENIM_CONSULTING_GROUP_INC = 42410\nVENDOR_ID_NIKLAUS_LTD = 42411\nVENDOR_ID_OSORNO_ENTERPRISES_INC = 42412\nVENDOR_ID_PACSHEALTH_LLC = 42413\nVENDOR_ID_CLOUDACC_INTERACTIVE_INC = 42414\nVENDOR_ID_PRINCE_RUPERT_GRAIN_LTD = 42415\nVENDOR_ID_SOFTWARE_ENGINEERING_CENTER_SEC = 42416\nVENDOR_ID_A2ZLOGIX = 42417\nVENDOR_ID_GOVSOURCE_PTY_LTD = 42418\nVENDOR_ID_NICEUC_COMMUNICATION_TECH_CO_LTD = 42419\nVENDOR_ID_HEBEI_SICON_EMI_POWER_SYSTEM_CO_LTD = 42420\nVENDOR_ID_OPENVOX_LTD = 42421\nVENDOR_ID_ALLWIN_NETWORK_CORP = 42422\nVENDOR_ID_REPUBLIC_OF_AZERBAIJAN_MINISTRY_OF_FOREIGN_AFFAIRS = 42423\nVENDOR_ID_INTERNATIONAL_CARD_SERVICES_BV_ICS = 42424\nVENDOR_ID_THIESEN_HARDWARE_SOFTWARE_DESIGN_GMBH = 42425\nVENDOR_ID_INSTITUT_PAUL_BOCUSE = 42426\nVENDOR_ID_NEW_YORK_COMMUNITY_BANCORP = 42427\nVENDOR_ID_BHARTI_AIRTEL_LIMITED = 42428\nVENDOR_ID_HIDDEN_AUTHENTICATION_AND_TRUST_SERVICE = 42429\nVENDOR_ID_UNIVERSITY_OF_MASSACHUSETTS = 42430\nVENDOR_ID_CHELYABINSK_PALACE_OF_PIONEERS_AND_PUPILS_NAMED_AFTER_KRUPSKAYA_NK = 42431\nVENDOR_ID_LEPASSEPRESENTCOM = 42432\nVENDOR_ID_PARLIAMENTARY_COMMISSIONER_FOR_ADMINISTRATIVE_INVESTIGATIONS = 42433\nVENDOR_ID_BOMATEC_AG = 42434\nVENDOR_ID_LEONHARD_KURZ_STIFTUNG_CO_KG = 42435\nVENDOR_ID_OJSC_NIAEP = 42436\nVENDOR_ID_DELTEK_INC = 42437\nVENDOR_ID_SARATOGA_SPEED_INC = 42438\nVENDOR_ID_STEPHAN_SEITZ = 42439\nVENDOR_ID_IQ_DEVICES = 42440\nVENDOR_ID_UNISCON_UNIVERSAL_IDENTITY_CONTROL_GMBH = 42441\nVENDOR_ID_HOCHSCHULE_DER_MEDIEN_STUTTGART = 42442\nVENDOR_ID_GENESIS_INTEGRATION = 42443\nVENDOR_ID_ORIENTAL_CAMBRIDGE_EDUCATION_GROUP = 42444\nVENDOR_ID_INTERASIA_SOLUTIONS_INC = 42445\nVENDOR_ID_BEIJING_HESUN_TECHNOLOGIES_COLTD = 42446\nVENDOR_ID_FREESOFT_NYRT = 42447\nVENDOR_ID_TAISIS_INTEGRATION_AND_CONSULTING_SERVICES_SL = 42448\nVENDOR_ID_INVESTLAB_TECHNOLOGY_LLC = 42449\nVENDOR_ID_MUTUAL_AID_LABS_LLC = 42450\nVENDOR_ID_RIZOTEC = 42451\nVENDOR_ID_IRIS_RFID = 42452\nVENDOR_ID_DRAWERSTEAK_RESEARCH = 42453\nVENDOR_ID_FUNKRINGNET = 42454\nVENDOR_ID_FOBAS_CONSULTING_INC = 42455\nVENDOR_ID_VM_FARMS = 42456\nVENDOR_ID_PALLUC = 42457\nVENDOR_ID_TIGERLEAD_SOLUTIONS = 42458\nVENDOR_ID_ESDENERA_NETWORKS_GMBH = 42459\nVENDOR_ID_SYSTRONICS_CO_LTD = 42460\nVENDOR_ID_INNOSONIX_GMBH = 42461\nVENDOR_ID_DAVID_OUAGNE = 42462\nVENDOR_ID_TLS_CORP = 42463\nVENDOR_ID_BINARYCUBE = 42464\nVENDOR_ID_XERX_SOFTWARE_LTD = 42465\nVENDOR_ID_KRATOS_DEFENSE_AND_SECURITY_SOLUTIONS_INC = 42466\nVENDOR_ID_LUCIPHER = 42467\nVENDOR_ID_JORGE_CAVALLIN = 42468\nVENDOR_ID_INFOBAHN_SA = 42469\nVENDOR_ID_VOIPPARTNERS_SRL = 42470\nVENDOR_ID_HOTCITY_SA = 42471\nVENDOR_ID_SC_IT_GMBH = 42472\nVENDOR_ID_ACTION_TECHNOLOGY_LTD = 42473\nVENDOR_ID_TORO_DEVELOPMENT_LTD = 42474\nVENDOR_ID_DEWAR_ELECTRONICS_PTY_LTD = 42475\nVENDOR_ID_BORDER_6 = 42476\nVENDOR_ID_ONENECK_IT_SERVICES_CORPORATION = 42477\nVENDOR_ID_PROTEUS_SENSOR = 42478\nVENDOR_ID_METROPOLITAN_WIRELESS_INTERNATIONAL_PTE_LTD = 42479\nVENDOR_ID_GRENLAND_DATA_AS = 42480\nVENDOR_ID_TELETRONIX = 42481\nVENDOR_ID_DOCUSIGN_INC = 42482\nVENDOR_ID_PIONEER_BANK = 42483\nVENDOR_ID_ULTRIX_SISTEMAS_DE_INFORMAO = 42484\nVENDOR_ID_CHRISTIAN_SCHOLZ = 42485\nVENDOR_ID_NUOLEZIO = 42486\nVENDOR_ID_SHENZHEN_PHILORISE_COLTD = 42487\nVENDOR_ID_ELEMENT_DOO = 42488\nVENDOR_ID_PREFERRED_CREDIT_INC = 42489\nVENDOR_ID_INTESI_GROUP_SPA = 42490\nVENDOR_ID_RACKTOP_SYSTEMS = 42491\nVENDOR_ID_FAR_BANK_ENTERPRISES = 42492\nVENDOR_ID_CITY_OF_WAUKESHA = 42493\nVENDOR_ID_BECKWITH_ELECTRIC_CO_INC = 42494\nVENDOR_ID_O2_SYSTEMS_LIMITED = 42495\nVENDOR_ID_GLOBALNAZ_IT = 42496\nVENDOR_ID_BROOKHAVEN_RETREAT_LLC = 42497\nVENDOR_ID_GUENTER_ZIMMERMANN = 42498\nVENDOR_ID_ORLOV_MILLER = 42499\nVENDOR_ID_DEOCA_LTD = 42500\nVENDOR_ID_OTO_IT_LIMITED = 42501\nVENDOR_ID_CELLOS_SOFTWARE_LIMITED = 42502\nVENDOR_ID_XJ_GROUP_CORPORATION = 42503\nVENDOR_ID_SOKRAT_LTD = 42504\nVENDOR_ID_DENKOVI_ASSEMBLY_ELECTRONICS_LTD = 42505\nVENDOR_ID_GOSTCOMP_OLIWER_GODLEWSKI = 42506\nVENDOR_ID_HEULESOFT = 42507\nVENDOR_ID_SHEPHERD_GROUP_BUILT_ENVIRONMENT_INFORMATION_SYSTEMS_SGBE_IS = 42508\nVENDOR_ID_NET4HOME_GMBH = 42509\nVENDOR_ID_CAPE_FEAR_VALLEY_HEALTH_SYSTEM = 42510\nVENDOR_ID_MAXROSINCOM = 42511\nVENDOR_ID_SUCHOCKI_IT = 42512\nVENDOR_ID_YMAX_COMMUNICATIONS = 42513\nVENDOR_ID_SHENZHEN_HXWK_TECHNOLOGIESCO_LTD = 42514\nVENDOR_ID_LIBERTY_GLOBAL_SERVICES_BV = 42515\nVENDOR_ID_ORDERMAN_GMBH = 42516\nVENDOR_ID_FUNDACIN_CENTRO_DE_ESTUDIOS_DE_FSICA_DEL_COSMOS_DE_ARAGN = 42517\nVENDOR_ID_ZPE_SYSTEMS_INC = 42518\nVENDOR_ID_BRAINLOGICAL_SOFTWARE_DEVELOPMENT = 42519\nVENDOR_ID_LIFESAFETY_POWER_INC = 42520\nVENDOR_ID_ASSYSTEM_FRANCE = 42521\nVENDOR_ID_VELIN_V_PAVLOV = 42522\nVENDOR_ID_LEIBNIZ_INSTITUT_FUER_ANALYTISCHE_WISSENSCHAFTEN_ISAS_EV = 42523\nVENDOR_ID_TOWNET_SRL = 42524\nVENDOR_ID_WERKBANK_MULTIMEDIA_GMBH = 42525\nVENDOR_ID_ELGRIS_UG = 42526\nVENDOR_ID_WTG_TECHNOLOGIES_LTD = 42527\nVENDOR_ID_SLOVAK_HYDROMETEOROLOGICAL_INSTITUTE_SHMU = 42528\nVENDOR_ID_NEW_JERSEY_OFFICE_OF_INFORMATION_TECHNOLOGY = 42529\nVENDOR_ID_SSQ_FINANCIAL_GROUP = 42530\nVENDOR_ID_SECURITY_INDUSTRY_ASSOCIATION = 42531\nVENDOR_ID_HOLYSEE_VATICAN_LIBRARY = 42532\nVENDOR_ID_BIOVELA_UAB = 42533\nVENDOR_ID_CAFAT = 42534\nVENDOR_ID_ICTJOB = 42535\nVENDOR_ID_HANOVER_DISPLAYS_LTD = 42536\nVENDOR_ID_SNMPSTACK = 42537\nVENDOR_ID_ARTNET_WORLD_WIDE = 42538\nVENDOR_ID_TRUMPET_INC = 42539\nVENDOR_ID_ZIMPEL_EVENTS_AND_COMMUNICATIONS_PTY_LTD = 42540\nVENDOR_ID_MY_TELECOM_HOLDINGS_PTY_LTD = 42541\nVENDOR_ID_VOILLO_SOLUTIONS_LTD = 42542\nVENDOR_ID_SIMPSON_UNIVERSITY = 42543\nVENDOR_ID_ALLENGERS_GLOBAL_HEALTHCARE_PRIVATE_LIMITED = 42544\nVENDOR_ID_CSC_TELECOM = 42545\nVENDOR_ID_TYNTEC_GMBH = 42546\nVENDOR_ID_ORECX_LLC = 42547\nVENDOR_ID_GLOOPS_INC = 42548\nVENDOR_ID_FSP_FILOFARM = 42549\nVENDOR_ID_SFS_SERVICES_AG = 42550\nVENDOR_ID_CRFS_LIMITED = 42551\nVENDOR_ID_HRVATSKI_ZAVOD_ZA_TELEMEDICINU = 42552\nVENDOR_ID_TEKNOUNIT = 42553\nVENDOR_ID_DYNAMIC_QUEST_INC = 42554\nVENDOR_ID_FACULTY_OF_INFORMATION_TECHNOLOGY_AND_APPLIED_MATHEMATICS_BELSU = 42555\nVENDOR_ID_VISAO_TECNOLOGIA_EM_TRANSMISSAO_DE_DADOS_LTDA = 42556\nVENDOR_ID_UNICO_DATA_AG = 42557\nVENDOR_ID_CANIS_LUPUS_LLC = 42558\nVENDOR_ID_APPENSURE = 42559\nVENDOR_ID_KIROVOHRAD_VOLODYMYR_VYNNYCHENKO_STATE_PEDAGOGICAL_UNIVERSITY = 42560\nVENDOR_ID_ZAO_MD_PROJECT_2000 = 42561\nVENDOR_ID_UNIVERSIDAD_PBLICA_DE_NAVARRA_UPNA = 42562\nVENDOR_ID_KALEIDESCAPE_INC = 42563\nVENDOR_ID_KO4BB_ELECTRONICS = 42564\nVENDOR_ID_WEIRTON_MEDICAL_CENTER = 42565\nVENDOR_ID_CLEARBEARING_INC = 42566\nVENDOR_ID_DAVID_SPINELLA = 42567\nVENDOR_ID_ANDREAS_VAVRA = 42568\nVENDOR_ID_MIESEPIES = 42569\nVENDOR_ID_INDEPENDENT_BANK_CORPORATION = 42570\nVENDOR_ID_CYBERA_INC = 42571\nVENDOR_ID_SAFELYLOCKED_LLC = 42572\nVENDOR_ID_SUN_NUCLEAR_CORPORATION = 42573\nVENDOR_ID_SYDESTEP_LTD = 42574\nVENDOR_ID_E_BUSINESS_SYSTEMS_SARL = 42575\nVENDOR_ID_LINPOW_SRL = 42576\nVENDOR_ID_CROSSPOINT_SRL_ROMANIA = 42577\nVENDOR_ID_XCEL_ENERGY = 42578\nVENDOR_ID_SYSMOCOM_SYSTEMS_FOR_MOBILE_COMMUNICATIONS_GMBH = 42579\nVENDOR_ID_STATSEEKER = 42580\nVENDOR_ID_REGIONAL_DIGITAL_TELECOMMUNICATION_COMPANY = 42581\nVENDOR_ID_INTERLINK_LTD = 42582\nVENDOR_ID_DPII_TELECOM_SERVICES = 42583\nVENDOR_ID_ROWA_GROUP_HOLDING_GMBH = 42584\nVENDOR_ID_TRIKOM_LTD = 42585\nVENDOR_ID_DAG_SYSTEM = 42586\nVENDOR_ID_INVESTIGACIONES_MEDICAS_SA = 42587\nVENDOR_ID_AGST_CONTROLES_E_AUTOMAO_LTDA = 42588\nVENDOR_ID_SWIFTTRIP_LLC = 42589\nVENDOR_ID_AVB_GMBH_WIND_ENGINEERING = 42590\nVENDOR_ID_FORLANI_IMPIANTI_SRL = 42591\nVENDOR_ID_TV_2_DANMARK_A_S = 42592\nVENDOR_ID_GAS_NATURAL_INFORMTICA_SA = 42593\nVENDOR_ID_FOX_TECHNOLOGIES = 42594\nVENDOR_ID_RIGHT_SYSTEMS_INC = 42595\nVENDOR_ID_ATNET_SERVICES = 42596\nVENDOR_ID_NORBERTO_BENSA_ENEABE = 42597\nVENDOR_ID_TIBERO = 42598\nVENDOR_ID_NIPPON_TELEGRAPH_AND_TELEPHONE_WEST_CORPORATION = 42599\nVENDOR_ID_REJLERS_OY = 42600\nVENDOR_ID_SYCADA = 42601\nVENDOR_ID_PERFORMR_BV = 42602\nVENDOR_ID_VORSTON = 42603\nVENDOR_ID_SPRINGFIELD_TECHNICAL_COMMUNITY_COLLEGE = 42604\nVENDOR_ID_PLC_INTERNATIONAL_INC = 42605\nVENDOR_ID_URBAN_SOFTWAREDE = 42606\nVENDOR_ID_BREKFORD_INTERNATIONAL = 42607\nVENDOR_ID_ALAN_SEEDHOUSE = 42608\nVENDOR_ID_BOUNDARY_INC = 42609\nVENDOR_ID_SUPERIOR_POWER_SOLUTIONS_HK_COLTD = 42610\nVENDOR_ID_VALDREA_LLC = 42611\nVENDOR_ID_KONINKLIJKE_BAM_GROEP_NV = 42612\nVENDOR_ID_POLYONE_CORPORATION = 42613\nVENDOR_ID_TRIBAL_CHICKEN_AUSTRALIA = 42614\nVENDOR_ID_ETRUST_CO_LTD = 42615\nVENDOR_ID_PANNONIA_TECHNOLOGIES = 42616\nVENDOR_ID_ALPHION_INDIA_PRIVATE_LIMITED = 42617\nVENDOR_ID_KAAOS_UNLIMITED_OY = 42618\nVENDOR_ID_PRYSM_SARL = 42619\nVENDOR_ID_KATALIX_SYSTEMS_LTD = 42620\nVENDOR_ID_ELECDAN = 42621\nVENDOR_ID_HERNIC_FERRO_CHROME_PTY_LTD = 42622\nVENDOR_ID_OPEN_COMPUTE_PROJECT = 42623\nVENDOR_ID_WHATEVER_SA = 42624\nVENDOR_ID_TECHNOLOGY_TOOLBOX_LLC = 42625\nVENDOR_ID_BLUE_FIRE_CAPITAL = 42626\nVENDOR_ID_VERMONT_DEPARTMENT_OF_LABOR = 42627\nVENDOR_ID_SHENZHEN_HD_DIGITAL_TECH_CO_LTD = 42628\nVENDOR_ID_WAVENT_COLTD = 42629\nVENDOR_ID_DONA_ANA_COUNTY_NEW_MEXICO = 42630\nVENDOR_ID_XELLIA_PHARMACEUTICALS_APS = 42631\nVENDOR_ID_KOMPANIJA_DUNAV_OSIGURANJE_ADO_BEOGRAD = 42632\nVENDOR_ID_VOXXL = 42633\nVENDOR_ID_PSW_GROUP_GMBH_CO_KG = 42634\nVENDOR_ID_RUDINET_LTD = 42635\nVENDOR_ID_SECURIPAX = 42636\nVENDOR_ID_CLOUDHOUSE_TECHNOLOGIES = 42637\nVENDOR_ID_ARD_STERNPUNKT = 42638\nVENDOR_ID_CELLCRYPT_LTD = 42639\nVENDOR_ID_DEREK_LAMBERT_CREOF = 42640\nVENDOR_ID_TRI_STATE_GENERATION_AND_TRANSMISSION = 42641\nVENDOR_ID_STAGE_ENTERTAINMENT = 42642\nVENDOR_ID_NETSAVIA_SA = 42643\nVENDOR_ID_NEW_LEAF_PUBLISHING_GROUP_INC = 42644\nVENDOR_ID_ROS_VICENTE_ITCOMP = 42645\nVENDOR_ID_ETHERLIVE_LTD = 42646\nVENDOR_ID_ALLIANCE_SPACESYSTEMS_LLC = 42647\nVENDOR_ID_BLUE_GLOBAL_MEDIA = 42648\nVENDOR_ID_THE_LASALLE_TECHNOLOGY_GROUP = 42649\nVENDOR_ID_PARQUE_TECNOLGICO_ITAIPU_PARAGUAY = 42650\nVENDOR_ID_WILLISSSCOM = 42651\nVENDOR_ID_SICHUAN_BIHONG_BROADCASTTELEVISION_NEW_TECHNOLOGIES_COLTD = 42652\nVENDOR_ID_NETCLOUD_AG = 42653\nVENDOR_ID_RCS_RDS_SA = 42654\nVENDOR_ID_ON_THE_CUSP_LTD = 42655\nVENDOR_ID_CLEAR_COM = 42656\nVENDOR_ID_MIXPO = 42657\nVENDOR_ID_LAKRA_SINTEZ_LTD = 42658\nVENDOR_ID_ROBERT_MAXWELL_PROFESSIONAL_CONSULTING = 42659\nVENDOR_ID_WILDMAN_MORRIS = 42660\nVENDOR_ID_ASIAN_PACIFIC_TELECOMMUNICATIONS = 42661\nVENDOR_ID_WUERZBURGER_VERSORGUNGS_UND_VERKEHRS_GMBH = 42662\nVENDOR_ID_ZHENGWEI_TECH_COLTD = 42663\nVENDOR_ID_IROMEDICA_AG = 42664\nVENDOR_ID_WIRD_AG = 42665\nVENDOR_ID_AFFILIATED_MANAGERS_GROUP_INC = 42666\nVENDOR_ID_NORTHWEST_MULTIPLE_LISTING_SERVICE = 42667\nVENDOR_ID_ZIMT_UNIVERSITY_OF_SIEGEN = 42668\nVENDOR_ID_HANGZHOU_CHENXIAO_TECHNOLOGIES_COLTD = 42669\nVENDOR_ID_SICE_TECNOLOGA_Y_SISTEMAS_SA_FORMERLY_SOCIEDAD_IBRICA_DE_CONSTRUCCIONES_ELCTRICAS_SA = 42670\nVENDOR_ID_PINETRON_COLTD = 42671\nVENDOR_ID_G_X_CLARKE_CO = 42672\nVENDOR_ID_SAIC_INC = 42673\nVENDOR_ID_TVH_GROUP_NV = 42674\nVENDOR_ID_COMIT_PERMANENT_DES_MDECINS_EUROPENS = 42675\nVENDOR_ID_SERVERGY_INC = 42676\nVENDOR_ID_ALTERTECH_SRO = 42677\nVENDOR_ID_LAKRA_SIBIR_LTD = 42678\nVENDOR_ID_CNEAT = 42679\nVENDOR_ID_RANDSTAD_ESPAA_SL = 42680\nVENDOR_ID_FREEPORT_OF_RIGA_AUTHORITY = 42681\nVENDOR_ID_CYVIZ_AS = 42682\nVENDOR_ID_TRANS_DATA_MANAGEMENT_TDM = 42683\nVENDOR_ID_BUMP_NETWORKS_INC = 42684\nVENDOR_ID_BENJAMIN_HUEPEDEN_IT = 42685\nVENDOR_ID_SIEMPELKAMP_MASCHINEN_UND_ANLAGENBAU_GMBH_CO_KG = 42686\nVENDOR_ID_MERIDIAN_HEALTH_SYSTEM = 42687\nVENDOR_ID_STABILO_INTERNATIONAL_GMBH = 42688\nVENDOR_ID_SOUTHERN_METHODIST_UNIVERSITY = 42689\nVENDOR_ID_NGENIUX_LLC = 42690\nVENDOR_ID_AUSTRALIA_AND_NEW_ZEALAND_BANKING_GROUP_LIMITED = 42691\nVENDOR_ID_PHILOTECH = 42692\nVENDOR_ID_ACRORED_TECHNOLOGIES_INC = 42693\nVENDOR_ID_LOOPPAY_INC = 42694\nVENDOR_ID_BEIJING_QTS_NETWORKS_TECHNOLOGIES_CO_LTD = 42695\nVENDOR_ID_INDIAN_HOTELS_COMPANY_LIMITED = 42696\nVENDOR_ID_ACTIVSOLAR = 42697\nVENDOR_ID_QUALITIS_KFT = 42698\nVENDOR_ID_DORWIN_ENTERPRISES = 42699\nVENDOR_ID_ESP_CREDIT_MANAGEMENT = 42700\nVENDOR_ID_THEPICKLECOM_INC = 42701\nVENDOR_ID_ALTAIRIS_S_R_O = 42702\nVENDOR_ID_LOCATRIX_COMMUNICATIONS = 42703\nVENDOR_ID_MARCO_DISPLAYS = 42704\nVENDOR_ID_HVR_SOFTWARE = 42705\nVENDOR_ID_MINISTRY_OF_INTERNAL_AFFAIRS_KOSOVA = 42706\nVENDOR_ID_CORVINUS_UNIVERSITY_OF_BUDAPEST = 42707\nVENDOR_ID_TEACHERS_ASSURANCE = 42708\nVENDOR_ID_CARWOO_INC = 42709\nVENDOR_ID_DESIGNS_FOR_HEALTH_INC = 42710\nVENDOR_ID_MEIRYO_DENSHI_CORPORATION = 42711\nVENDOR_ID_HANVIT_SI_INC = 42712\nVENDOR_ID_HPS_ICTMOBILE_SOLUTIONS = 42713\nVENDOR_ID_BEIJING_JOY_AND_SUCCESS_TECHNOLOGY_CO_LTD = 42714\nVENDOR_ID_TANUM_CONSULT_GMBH = 42715\nVENDOR_ID_LZLABS_GMBH = 42716\nVENDOR_ID_PREFEITURA_MUNICIPAL_DE_CACHOEIRINHA_RS_BRASIL = 42717\nVENDOR_ID_VEMA_AS = 42718\nVENDOR_ID_CYBERFX_INC = 42719\nVENDOR_ID_BILGIBIM_BILGISAYAR_TEKNOLOJILERI = 42720\nVENDOR_ID_TECK_RESOURCES_LIMITED = 42721\nVENDOR_ID_MIRAJ_TECHNOLOGY_AND_CONSULTING_CORPORATION = 42722\nVENDOR_ID_SHOUTING_GROUND_TECHNOLOGIES_INC = 42723\nVENDOR_ID_KERNEL_ELECTRONICS_CO_LTD = 42724\nVENDOR_ID_INSTITUT_TEKNOLOGI_SEPULUH_NOPEMBER = 42725\nVENDOR_ID_ARCSOFT_HANGZHOU_COLTD = 42726\nVENDOR_ID_X_COMPANY_PTY_LTD = 42727\nVENDOR_ID_TOMAXX_GMBH = 42728\nVENDOR_ID_PRIVATE_IRON_AND_STEEL_JOINT_STOCK_COMPANY_DONETSKSTEEL = 42729\nVENDOR_ID_CRODA_INTERNATIONAL_PLC = 42730\nVENDOR_ID_STATKRAFT_SF = 42731\nVENDOR_ID_SOUTHERN_POWER_SYSTEMS_INC = 42732\nVENDOR_ID_FSMLABS = 42733\nVENDOR_ID_NEXTMOVE_TECHNOLOGIES = 42734\nVENDOR_ID_DPARADIG = 42735\nVENDOR_ID_HAUS_DER_BARMHERZIGKEIT = 42736\nVENDOR_ID_ZENDS = 42737\nVENDOR_ID_VIVINT_WIRELESS = 42738\nVENDOR_ID_VEOLIA_WATER_SOLUTIONS_TECHNOLOGIES = 42739\nVENDOR_ID_MAERDNGAMING_GBR = 42740\nVENDOR_ID_NANJING_DONG_XUN_INFORMATION_TECHNOLOGY_CO_LTD = 42741\nVENDOR_ID_WINIX_SOLUTIONS_LLC = 42742\nVENDOR_ID_NIEDERSTERREICHISCHE_GEBIETSKRANKENKASSE = 42743\nVENDOR_ID_FALABELLA = 42744\nVENDOR_ID_JAMDEO = 42745\nVENDOR_ID_INTERNETX_GMBH = 42746\nVENDOR_ID_KIK_INTERACTIVE = 42747\nVENDOR_ID_MYORGAT_JOHANNES_HACKL = 42748\nVENDOR_ID_UTILIDATA_INC = 42749\nVENDOR_ID_UMBRELLA_ID = 42750\nVENDOR_ID_NEOWATT_ENERGY_SOLUTIONS_CO_PVT_LTD = 42751\nVENDOR_ID_AMEDTEC_MEDIZINTECHNIK_AUE_GMBH = 42752\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_LOS_BAOS = 42753\nVENDOR_ID_ENEL_ENERGY_ELECTRONIC = 42754\nVENDOR_ID_ATON_GMBH = 42755\nVENDOR_ID_PURDUE_RESEARCH_FOUNDATION = 42756\nVENDOR_ID_ENCANA_CORPORATION = 42757\nVENDOR_ID_C4B_COM_FOR_BUSINESS_AG = 42758\nVENDOR_ID_PRACTICOM_BV = 42759\nVENDOR_ID_PHOENIX_PHARMA = 42760\nVENDOR_ID_IMAVIS_SRL = 42761\nVENDOR_ID_IPEX_TELECOM_LLC = 42762\nVENDOR_ID_SHANGHAI_JEELAN_INFORMATION_TECHNOLOGY_INC = 42763\nVENDOR_ID_SMITH_COLLEGE = 42764\nVENDOR_ID_MUZEUM_HISTORII_ZYDOW_POLSKICH = 42765\nVENDOR_ID_TYPOMEDIA_FOUNDATION = 42766\nVENDOR_ID_QUEENSLAND_MOTORWAYS_LIMITED = 42767\nVENDOR_ID_MARCELO_LEAL = 42768\nVENDOR_ID_SUPERMATHIE_NETWORKS = 42769\nVENDOR_ID_TOTALPOST_SERVICES_PLC = 42770\nVENDOR_ID_DGQOS = 42771\nVENDOR_ID_GALKAM_PTY_LTD = 42772\nVENDOR_ID_TRANSPORT_FOR_LONDON = 42773\nVENDOR_ID_SEMTECH_CORPORATION = 42774\nVENDOR_ID_LINX_ICT_SOLUTIONS = 42775\nVENDOR_ID_ONE2MANY_BV = 42776\nVENDOR_ID_GOSUNCN_TECHNOLOGY_GROUP_CO_LTD = 42777\nVENDOR_ID_MICHAEL_OFFEL_MFLOURCOM = 42778\nVENDOR_ID_CJSC_NORSI_TRANS = 42779\nVENDOR_ID_SEB_DEVELOPPEMENT_SAS = 42780\nVENDOR_ID_BRAGG_COMMUNICATIONS_INC = 42781\nVENDOR_ID_EKROMPT_JSC = 42782\nVENDOR_ID_WORKVSLIFECOM = 42783\nVENDOR_ID_PINNACLE_FOODS_GROUP_LLC = 42784\nVENDOR_ID_SYNTAXJOCKEY = 42785\nVENDOR_ID_CNS_ENGINEERING = 42786\nVENDOR_ID_CONCENTRIC_SKY = 42787\nVENDOR_ID_ARTEC_TECHNOLOGIES_AG = 42788\nVENDOR_ID_SYNQOR_INC = 42789\nVENDOR_ID_REBASOFT = 42790\nVENDOR_ID_GEO_COMM_INC = 42791\nVENDOR_ID_NEAR_EAST_UNIVERSITY = 42792\nVENDOR_ID_INTCACHE_TECHNOLOGY_COLTD = 42793\nVENDOR_ID_LEX_MEDIA_CONCEPTS_SRL = 42794\nVENDOR_ID_MRBYTE_TECH_SOLUTIONS = 42795\nVENDOR_ID_IQ_SOLUTIONS_SA = 42796\nVENDOR_ID_FREIE_ARBEITERINNEN_UNION = 42797\nVENDOR_ID_HUENGSBERG_AG = 42798\nVENDOR_ID_ALFSTORE = 42799\nVENDOR_ID_CO_NEXUS_COMMUNICATIONS_SYSTEMS_INC = 42800\nVENDOR_ID_ESSAI_INC = 42801\nVENDOR_ID_RIGEL_ENGINEERING = 42802\nVENDOR_ID_VALIALSOFT_LLC = 42803\nVENDOR_ID_NEW_SINGULARITY_INTERNATIONAL_TECHNICAL_DEVELOPMENT_COLTD = 42804\nVENDOR_ID_CLOUDY_IT = 42805\nVENDOR_ID_WINFO_CORP = 42806\nVENDOR_ID_CITY_WEST_COUNTRY_LTD = 42807\nVENDOR_ID_ARACHNID_LABS_LTD = 42808\nVENDOR_ID_NETBREAKER_IT_SERVICE = 42809\nVENDOR_ID_TELESIS_SA_DE_CV = 42810\nVENDOR_ID_ENYX = 42811\nVENDOR_ID_ISD_DUNAFERR_CO_LTD = 42812\nVENDOR_ID_POLSKIE_SIECI_ELEKTROENERGETYCZNE_SA = 42813\nVENDOR_ID_INVEO = 42814\nVENDOR_ID_TUSSA_IKT_AS = 42815\nVENDOR_ID_HACENTER = 42816\nVENDOR_ID_IBM_PLATFORM_FIRMWARE_DIVISION = 42817\nVENDOR_ID_RELATIVE_VARIABLE_SOFTWARE = 42818\nVENDOR_ID_CARANTE_GROEP = 42819\nVENDOR_ID_TECHSUN = 42820\nVENDOR_ID_ACXIO = 42821\nVENDOR_ID_TESC = 42822\nVENDOR_ID_SPILSBY_INTERNET_SOLUTIONS = 42823\nVENDOR_ID_WEBCLOUDAPPS_GMBH = 42824\nVENDOR_ID_VARMOUR_NETWORKS = 42825\nVENDOR_ID_CHENGDU_NETWORK_SECURITY_TECHNOLOGY_CORPORATION = 42826\nVENDOR_ID_RM_NETPROJECT_UG_HAFTUNGSBESCHRNKT = 42827\nVENDOR_ID_US_ARMY_ELECTRONIC_PROVINGS_GROUND_USAEPG_INSTRUMENTATION_MANAGEMENT_SYSTEM_IMS = 42828\nVENDOR_ID_QUARTZDESKCOM = 42829\nVENDOR_ID_POWERSENSE = 42830\nVENDOR_ID_KICKASS_SYSTEMS = 42831\nVENDOR_ID_TATA_INSTITUTE_FUNDAMENTAL_RESEARCH = 42832\nVENDOR_ID_NIMBUS_TECHNOLOGIEBERATUNG_GMBH = 42833\nVENDOR_ID_TECHNIDATA_IT_SERVICE_GMBH = 42834\nVENDOR_ID_ZELITRON_SA = 42835\nVENDOR_ID_EXTREME_IT_DEVELOPMENT = 42836\nVENDOR_ID_WESTPAC_NEW_ZEALAND_LTD = 42837\nVENDOR_ID_FAST_DISTRIBUTED_CLOUD_COMPUTING_INC = 42838\nVENDOR_ID_TACTICAL_COMMUNICATIONS_CORPORATION = 42839\nVENDOR_ID_REPORO = 42840\nVENDOR_ID_KRAFTANLAGEN_MUENCHEN_GMBH = 42841\nVENDOR_ID_IQSPOT = 42842\nVENDOR_ID_TWIN_ENGINEERING_SRL = 42843\nVENDOR_ID_SPI_GMBH = 42844\nVENDOR_ID_TOKYO_SYSTEM_HOUSE_CO_LTD = 42845\nVENDOR_ID_CORHOMA_SRL = 42846\nVENDOR_ID_2H_OFFSHORE_ENGINEERING_LTD = 42847\nVENDOR_ID_NETIXIA = 42848\nVENDOR_ID_FABRECODE = 42849\nVENDOR_ID_LOCALTV_LLC_OF_ALABAMA = 42850\nVENDOR_ID_FIDELITY_VOICE_SERVICES = 42851\nVENDOR_ID_BANK_GOSPODARSTWA_KRAJOWEGO = 42852\nVENDOR_ID_DUNNCOX = 42853\nVENDOR_ID_EMPRESA_DE_TECNOLOGIA_DA_INFORMAO_E_COMUNICAO_DO_MUNICPIO_DE_SO_PAULO = 42854\nVENDOR_ID_TECHSOUPNET = 42855\nVENDOR_ID_KREIS_WARENDORF = 42856\nVENDOR_ID_FAMILY_MADERA_OF_SWITZERLAND = 42857\nVENDOR_ID_LINUX_SZERVER_KFT = 42858\nVENDOR_ID_SHANGHAI_SHR_AUTOMATION_COLTD = 42859\nVENDOR_ID_ASUL_IT_CONSULTING_LLP = 42860\nVENDOR_ID_OPHYLINK_COMMUNICATION_TECHNOLOGY_CO_LTD = 42861\nVENDOR_ID_AITA_SOFT = 42862\nVENDOR_ID_IOS_HEALTH_SYSTEMS = 42863\nVENDOR_ID_MOBIUS_EMBEDDED_SYSTEMS_LTD = 42864\nVENDOR_ID_HOZA_LOGISTIC_SOLUTIONS = 42865\nVENDOR_ID_FRONTENDBIZ_GMBH = 42866\nVENDOR_ID_BESTSOLUTIONAT = 42867\nVENDOR_ID_ASSOCIATION_OF_AMERICAN_RAILROADS = 42868\nVENDOR_ID_UNE_EPM_TELECOMUNICACIONES_SA = 42869\nVENDOR_ID_UNITHER_MANUFACTURING_LLC = 42870\nVENDOR_ID_IMRIS = 42871\nVENDOR_ID_UNOMALY_AB = 42872\nVENDOR_ID_COMUNE_DI_ASCOLI_PICENO = 42873\nVENDOR_ID_HOSPEDIA_LTD = 42874\nVENDOR_ID_ACISA = 42875\nVENDOR_ID_SGSITES_TECHNOLOGIES = 42876\nVENDOR_ID_SUNDVOR = 42877\nVENDOR_ID_CREDIT_MOSCOW_BANK = 42878\nVENDOR_ID_SIELAFF_GMBH_CO_KG = 42879\nVENDOR_ID_UWE_DISCH = 42880\nVENDOR_ID_NO_LIMIT_NETWORK = 42881\nVENDOR_ID_JIANGSU_FABLESOFT_COLTD = 42882\nVENDOR_ID_CARC_C_DOT_ALCATEL_LUCENT_RESEARCH_CENTRE_PVT_LTD = 42883\nVENDOR_ID_ANDERSON_MORGAN_KELOWNA_INC = 42884\nVENDOR_ID_S_P_I_R_I_T_INFORMAN_SYSTMY_AS = 42885\nVENDOR_ID_INMOTION_HOSTING = 42886\nVENDOR_ID_ONE_CALL_NOW = 42887\nVENDOR_ID_CANADIAN_MUSEUM_FOR_HUMAN_RIGHTS = 42888\nVENDOR_ID_IO_DATA_CENTERS_LLC = 42889\nVENDOR_ID_RENKUS_HEINZ_INCORPORATED = 42890\nVENDOR_ID_SANTECHKOMPLEKT_LTD = 42891\nVENDOR_ID_TOYGA = 42892\nVENDOR_ID_FUNKFEUER_WIEN_VEREIN_ZUR_FRDERUNG_FREIER_NETZE = 42893\nVENDOR_ID_CAROL_JEANNE_MACK_CORPORATION = 42894\nVENDOR_ID_SECURITON_GMBH = 42895\nVENDOR_ID_THE_OGARA_GROUP = 42896\nVENDOR_ID_EVAN_EDSTROM = 42897\nVENDOR_ID_IM_SERVICE_LAB_SRL = 42898\nVENDOR_ID_KILOWATTSOL = 42899\nVENDOR_ID_ELCOM_INNOVATIONS_PRIVATE_LIMITED = 42900\nVENDOR_ID_CHAOS_COMPUTER_CLUB_COLOGNE = 42901\nVENDOR_ID_JR_TORRALBA = 42902\nVENDOR_ID_IT_INNOVATIONS_UKRAINE_LLC = 42903\nVENDOR_ID_NEMIK_CONSULTING_INC = 42904\nVENDOR_ID_TRIHEDRAL_ENGINEERING_LTD = 42905\nVENDOR_ID_SHIFT_WORKFORCE_MANAGEMENT = 42906\nVENDOR_ID_PLUTEX_GMBH = 42907\nVENDOR_ID_MEGADEVICES = 42908\nVENDOR_ID_TVER_STATE_UNIVERSITY = 42909\nVENDOR_ID_LATTICEWARECOM = 42910\nVENDOR_ID_METIRI_SYSTEMS_LLC = 42911\nVENDOR_ID_LOCATE_SOLUTION_GMBH = 42912\nVENDOR_ID_EXATECH_BV = 42913\nVENDOR_ID_WIMSEY = 42914\nVENDOR_ID_MCATSYSTEMS_LLC = 42915\nVENDOR_ID_ARCERM = 42916\nVENDOR_ID_ADCUBUM_AG = 42917\nVENDOR_ID_TRAFIGURA = 42918\nVENDOR_ID_MAX_PLANCK_INSTITUT_FUER_ASTROPHYSIK = 42919\nVENDOR_ID_SLAUGHTER_AND_MAY = 42920\nVENDOR_ID_DROPBOX_INC = 42921\nVENDOR_ID_MINISTARSTVO_ODBRANE_REPUBLIKE_SRBIJE = 42922\nVENDOR_ID_STEFAN_EBERT = 42923\nVENDOR_ID_THE_MOLECULE = 42924\nVENDOR_ID_SYLEB_SARL = 42925\nVENDOR_ID_NSC_COMMUNICATIONS_SIBERIA_LTD = 42926\nVENDOR_ID_FIDELIO_CRUISE_SOFTWARE = 42927\nVENDOR_ID_GALLEON_SYSTEMS_LTD = 42928\nVENDOR_ID_SECUREDEVICEACCESSCOM = 42929\nVENDOR_ID_GEKONET_DI_MENA_GIUSEPPE = 42930\nVENDOR_ID_VLADIMIR_MIHAJLOVI_PR_RAUNARSKO_PROGRAMIRANJE_METACODE_BEOGRAD = 42931\nVENDOR_ID_INFOLINK_GLOBAL = 42932\nVENDOR_ID_IARTEMIS = 42933\nVENDOR_ID_APRS_WORLD_LLC = 42934\nVENDOR_ID_AXCELERA = 42935\nVENDOR_ID_ANHUI_TELEHOME_DIGITAL_TECHNOLOGY_CO_LTD = 42936\nVENDOR_ID_VP_VIDEO_PRIVACY_FORUM = 42937\nVENDOR_ID_MOVIRI_SPA = 42938\nVENDOR_ID_APPLIED_INFORMATICS_FOR_HEALTH_SOCIETY = 42939\nVENDOR_ID_CITY_OF_SMYRNA = 42940\nVENDOR_ID_2XWIRELESS_INC = 42941\nVENDOR_ID_KAYZAN = 42942\nVENDOR_ID_COPPERPOINT_MUTUAL_INSURANCE_COMPANY = 42943\nVENDOR_ID_SEENOV_INC = 42944\nVENDOR_ID_SEESER_DATENTECHNIK = 42945\nVENDOR_ID_UTEL_SYSTEMS = 42946\nVENDOR_ID_NETWORK_TECHNOLOGIES_INTERNATIONAL_INC = 42947\nVENDOR_ID_METHODIST_HOME_FOR_CHILDREN = 42948\nVENDOR_ID_BOLCOM_BV = 42949\nVENDOR_ID_HANGZHOU_JOSON_TECHNOLOGY_COLTD = 42950\nVENDOR_ID_HIGHLANDS_TECHNOLOGIES_SOLUTIONS = 42951\nVENDOR_ID_SOREDI_TOUCH_SYSTEMS_GMBH = 42952\nVENDOR_ID_RUNET_BUSINESS_SYSTEMS = 42953\nVENDOR_ID_BIZERBA_GMBH_CO_KG = 42954\nVENDOR_ID_LOUISVILLE_JEFFERSON_COUNTY_METRO_GOVERNMENT = 42955\nVENDOR_ID_HUMANIT_INC = 42956\nVENDOR_ID_WAVE_ADVANCED_TECHNOLOGY_APPLICATIONS_SRL = 42957\nVENDOR_ID_CENTRAL_OFFICE_FOR_ADMINISTRATIVE_AND_ELECTRONIC_PUBLIC_SERVICES = 42958\nVENDOR_ID_SNAP_LIMITED = 42959\nVENDOR_ID_GARN_CONTRACTING_CONSULTING_PTY_LTD = 42960\nVENDOR_ID_EH_ELECTRONICS_GMBH = 42961\nVENDOR_ID_BLITZNOTE_EK = 42962\nVENDOR_ID_ULTRAMED_SYSTEMS_INC = 42963\nVENDOR_ID_ABELSOFT_INC = 42964\nVENDOR_ID_EC3_NETWORKS_GMBH = 42965\nVENDOR_ID_ECHO_LLC = 42966\nVENDOR_ID_LIEDLOFFORG = 42967\nVENDOR_ID_ME_ENGINEERING_M2M_GMBH = 42968\nVENDOR_ID_IORGA_GROUP = 42969\nVENDOR_ID_RP_SIA_RIGAS_SATIKSME = 42970\nVENDOR_ID_ONELAN_LIMITED = 42971\nVENDOR_ID_IT_BUSINESS_SOLUTIONS_AND_SERVICES_ITBSS = 42972\nVENDOR_ID_COMDOK_GMBH = 42973\nVENDOR_ID_WILLIS_KNIGHTON_HEALTH_SYSTEM = 42974\nVENDOR_ID_IRIDIUM_THOUGHT = 42975\nVENDOR_ID_KEY_SOURCE_INTERNATIONAL = 42976\nVENDOR_ID_MATTA_CONSULTING_LIMITED = 42977\nVENDOR_ID_CSN_GROEP_BV = 42978\nVENDOR_ID_WELLINGTON_SECURITY_SYSTEMS = 42979\nVENDOR_ID_EZ_E_TRAK = 42980\nVENDOR_ID_HEURISTIC_SYSTEMS_PTY_LTD = 42981\nVENDOR_ID_LEAFSPROUT = 42982\nVENDOR_ID_SAS_NEXYLAN = 42983\nVENDOR_ID_TOYOHASHI_UNIVERSITY_OF_TECHNOLOGY = 42984\nVENDOR_ID_CNOFE = 42985\nVENDOR_ID_BEIJING_MICROCOLOR_CORP_LTD = 42986\nVENDOR_ID_GIDA_TECHNOLOGY_SERVICES = 42987\nVENDOR_ID_NANJING_HUAMAI_TECHNOLOGY_CO_LTD = 42988\nVENDOR_ID_TELEGRTNER_KARL_GRTNER_GMBH = 42989\nVENDOR_ID_VTSL_LTD = 42990\nVENDOR_ID_MARYLHURST_UNIVERSITY = 42991\nVENDOR_ID_VEKTRON_ENERGY_PTY_LTD = 42992\nVENDOR_ID_CORNERSTONE_HEALTH_CARE_PA = 42993\nVENDOR_ID_INSTITUT_DE_PHYSIQUE_DE_RENNES = 42994\nVENDOR_ID_AVERTIT = 42995\nVENDOR_ID_NOMASYSTEMS_SL = 42996\nVENDOR_ID_RED_GIANT_INC = 42997\nVENDOR_ID_PROGDENCE_COLTD = 42998\nVENDOR_ID_PARSE_SOFTWARE_DEVELOPMENT_BV = 42999\nVENDOR_ID_SERVICE_ONTARIO = 43000\nVENDOR_ID_NEXTBEACON = 43001\nVENDOR_ID_ROOTSERVICE_MARKUS_KOHLMEYER = 43002\nVENDOR_ID_TRIBALGROUP = 43003\nVENDOR_ID_XINGUARD_INC = 43004\nVENDOR_ID_UNIVERSITY_OF_TECHNOLOGY_AND_LIFE_SCIENCES_IN_BYDGOSZCZ = 43005\nVENDOR_ID_ROOT_ANET = 43006\nVENDOR_ID_GIPEN_SYSTEMS = 43007\nVENDOR_ID_FRTEK = 43008\nVENDOR_ID_VILNIUS_GALLERY = 43009\nVENDOR_ID_TWO_SIGMA_INVESTMENTS_LLC = 43010\nVENDOR_ID_SNGERSCHAFT_ERATO = 43011\nVENDOR_ID_ALDO_GROUP_INC = 43012\nVENDOR_ID_ISC8_INC = 43013\nVENDOR_ID_EN_GARDE_SYSTEMS_INC = 43014\nVENDOR_ID_QUINYX_AB = 43015\nVENDOR_ID_RSEAU_EN_SCNE_LANGUEDOC_ROUSSILLON = 43016\nVENDOR_ID_ALBAAD = 43017\nVENDOR_ID_PDAGOGISCHES_LANDESINSTITUT = 43018\nVENDOR_ID_DIGITAL_HUMAN_IDENTITY_SL = 43019\nVENDOR_ID_ANGEL_LANE = 43020\nVENDOR_ID_I_STORM = 43021\nVENDOR_ID_ONESEARCH_DIRECT_LTD = 43022\nVENDOR_ID_TUXPOWERDK = 43023\nVENDOR_ID_INFOGOOSEINC = 43024\nVENDOR_ID_NOMADCONNECTION_INC = 43025\nVENDOR_ID_MOSTLUCKY_LTD = 43026\nVENDOR_ID_FUJIAN_GREAT_POWER_PLC_EQUIPMENT_COLTD = 43027\nVENDOR_ID_OFFICE_OF_IMMIGRATION_AND_NATIONALITY = 43028\nVENDOR_ID_NETCO_LTDA_NETWORK_SOLUTIONS_CO = 43029\nVENDOR_ID_ROCK_YOUR_LIFE_GGMBH = 43030\nVENDOR_ID_RAUMZEITLABOR_EV = 43031\nVENDOR_ID_LIVE_IT_NERD = 43032\nVENDOR_ID_TVV_LIPPU_JA_MAKSUJRJESTELM_OY = 43033\nVENDOR_ID_K_AND_P_BUSINESS_SOLUTIONS = 43034\nVENDOR_ID_FEINSCHLIFF = 43035\nVENDOR_ID_BAY_OF_PLENTY_DISTRICT_HEALTH_BOARD = 43036\nVENDOR_ID_NEWCASTLE_UNDER_LYME_COLLEGE = 43037\nVENDOR_ID_CREATIVE_ELECTRONIC_SYSTEMS_SA = 43038\nVENDOR_ID_OASYS_HEALTHCARE_CORPORATION = 43039\nVENDOR_ID_DAVRA_NETWORKS = 43040\nVENDOR_ID_ATREM_SA = 43041\nVENDOR_ID_DEFINITION_NETWORKS_INC = 43042\nVENDOR_ID_INFORMATION_SYSTEM_ASSIOCIATIES = 43043\nVENDOR_ID_GRAN_INVESTIMENTOS = 43044\nVENDOR_ID_BANCO_EXTERIOR_CA_BANCO_UNIVERSAL = 43045\nVENDOR_ID_ANDREY_FEDOROV = 43046\nVENDOR_ID_HW_COMPUTER_SYSTEMS = 43047\nVENDOR_ID_CB7_SYSTEMS_LLC = 43048\nVENDOR_ID_STEWART_BRYANT = 43049\nVENDOR_ID_VOBILE_CO_LTD = 43050\nVENDOR_ID_SHENZHEN_SENSEGRID_COLTD = 43051\nVENDOR_ID_SHENZHEN_TENDZONE_INTELLIGENT_TECHNOLOGY_CO_LTD = 43052\nVENDOR_ID_IT_SYNERGY_LIMITED = 43053\nVENDOR_ID_CROWN_PRINCE_COURT = 43054\nVENDOR_ID_AMERICAN_KYBERNETIK_JUAN_DAUGHERTY = 43055\nVENDOR_ID_ENVISTACOM = 43056\nVENDOR_ID_PRAT_CENTRAVIS_PRODUCTION_UKRAINE = 43057\nVENDOR_ID_SYNERGY_SKY_AS = 43058\nVENDOR_ID_ITERACON_GMBH = 43059\nVENDOR_ID_LEEPFROG_TECHNOLOGIES_INC = 43060\nVENDOR_ID_GLOBAL_SYSTEM_NETWORK_SERVICES_BVBA = 43061\nVENDOR_ID_INGENIEURE_OHNE_GRENZEN_EV = 43062\nVENDOR_ID_DIGITAL_MULTIMEDIA_TECHNOLOGY_COLTD = 43063\nVENDOR_ID_EMBEDDED_WIRELESS_LABS = 43064\nVENDOR_ID_SHANGHAI_ONEZERO_ELECTRONIC_COMMERCE_CO_LTD = 43065\nVENDOR_ID_STIEBEL_ELTRON_GMBH_CO_KG = 43066\nVENDOR_ID_VFI_SYSTEM = 43067\nVENDOR_ID_AVG_TECHNOLOGIES = 43068\nVENDOR_ID_MARKUS_RUECKER_MR_CONSULTNET = 43069\nVENDOR_ID_HRVATSKA_NARODNA_BANKA = 43070\nVENDOR_ID_NABB_GAMING_COMMUNITY = 43071\nVENDOR_ID_PRIVLO_INC = 43072\nVENDOR_ID_ROSKAKORIFI = 43073\nVENDOR_ID_WRH_INC = 43074\nVENDOR_ID_SKY_INTERACTIVE = 43075\nVENDOR_ID_GREINER_HOLDING_AG = 43076\nVENDOR_ID_TUI_MARINE = 43077\nVENDOR_ID_LINDVIK = 43078\nVENDOR_ID_ZIMMER_GMBH = 43079\nVENDOR_ID_ATLANTIC_CORPORATION_OF_WILMINGTON_INC = 43080\nVENDOR_ID_INTELLEC = 43081\nVENDOR_ID_INFORMATIK_SERVICE_GESELLSCHAFT_MBH = 43082\nVENDOR_ID_IMEN_RAYANE_SHRGH_CO = 43083\nVENDOR_ID_WEBTOWN_INFORMATIKA_KFT = 43084\nVENDOR_ID_DETROIT_R_D_INC = 43085\nVENDOR_ID_NHS_SISTEMAS_ELETRONICOS = 43086\nVENDOR_ID_XCELOR_LLC = 43087\nVENDOR_ID_MEASURLOGIC_INC = 43088\nVENDOR_ID_DUALOG_AS = 43089\nVENDOR_ID_KVADOS_AS = 43090\nVENDOR_ID_SAP_INTEGRATOR_LTD = 43091\nVENDOR_ID_HABERMEHL = 43092\nVENDOR_ID_XIAMEN_FARATRONIC_CO_LTD = 43093\nVENDOR_ID_HYPERWALLET_SYSTEMS_INC = 43094\nVENDOR_ID_SERVICE2MEDIA_BV = 43095\nVENDOR_ID_JAMES_GUSE_JAG_ENTERPRISES = 43096\nVENDOR_ID_ROTH_WEBER_GMBH = 43097\nVENDOR_ID_MARTEM_AS = 43098\nVENDOR_ID_EMBRIONIX_DESIGN_INC = 43099\nVENDOR_ID_STRATA_DECISION_TECHNOLOGY_LLC = 43100\nVENDOR_ID_ALPHAVIDA = 43101\nVENDOR_ID_REGIONAL_MUNICIPALITY_OF_PEEL = 43102\nVENDOR_ID_CARADIGM = 43103\nVENDOR_ID_CYBERSECURE_IPS = 43104\nVENDOR_ID_CYBERFLOW_ANALYTICS_INC = 43105\nVENDOR_ID_PERK_INNOVATION_GMBH = 43106\nVENDOR_ID_WACLAW_SCHILLER_TORINTHIEL = 43107\nVENDOR_ID_ATTEND_SYSTEMS_LLC = 43108\nVENDOR_ID_DATAFASCIA_CORPORATION = 43109\nVENDOR_ID_LTD_BRADBURY_LAB = 43110\nVENDOR_ID_VNT_SOFTWARE = 43111\nVENDOR_ID_PICSEARCH_AB_PUBL = 43112\nVENDOR_ID_SCREEN9_AB = 43113\nVENDOR_ID_KANTONSAPOTHEKE_ZUERICH = 43114\nVENDOR_ID_FORTS_BOIS_DE_LEST = 43115\nVENDOR_ID_BERGHOF_AUTOMATION_GMBH = 43116\nVENDOR_ID_NATIONAL_STOCK_EXCHANGE_OF_INDIA_LIMITED = 43117\nVENDOR_ID_NORDSYS_GMBH = 43118\nVENDOR_ID_ALTIBOX_AS = 43119\nVENDOR_ID_PESHAWAR_BUSINESS_SCHOOL = 43120\nVENDOR_ID_YPSOMED_AG = 43121\nVENDOR_ID_SUMMIT_NETWORKS = 43122\nVENDOR_ID_INSTITUTO_NACIONAL_PARA_LA_EVALUACIN_DE_LA_EDUCACIN = 43123\nVENDOR_ID_PASSWORDBOX_INC = 43124\nVENDOR_ID_SYSTEM_STUDIES_INCORPORATED = 43125\nVENDOR_ID_US_FIRE_INSURANCE_COMPANY = 43126\nVENDOR_ID_OLIVER_MANZ_IPS_MANZ_CONSULTING = 43127\nVENDOR_ID_TANGENTORG = 43128\nVENDOR_ID_MEIJO_UNIVERSITY = 43129\nVENDOR_ID_AMPLESKY_COMMUNICATION_TECHNOLOGIES_LTD = 43130\nVENDOR_ID_TERNOPIL_STATE_MEDICAL_UNIVERSITY = 43131\nVENDOR_ID_CJSC_SVYAZ_ENGINEERING = 43132\nVENDOR_ID_MAILGARANT_MEINT_POST = 43133\nVENDOR_ID_ADVANCED_FIBER_PRODUCTS_LLC = 43134\nVENDOR_ID_ADISCA = 43135\nVENDOR_ID_DIGITAL_FOOTPRINTS_INTERNATIONAL_LLC_DBA_INTERNET_IDENTITY = 43136\nVENDOR_ID_RAVEN_ROCKS_COMPUTER_SERVICES_GROUP_INC = 43137\nVENDOR_ID_MULTAPPLIED_NETWORKS_INC = 43138\nVENDOR_ID_GLUTONUS_SRL = 43139\nVENDOR_ID_XORA_INC = 43140\nVENDOR_ID_RVTNORG = 43141\nVENDOR_ID_ST_MARYS_INTERNATIONAL_SCHOOL = 43142\nVENDOR_ID_NANJING_SINOVATIO_TECHNOLOGY_CO_LTD = 43143\nVENDOR_ID_HMS_INDUSTRIAL_NETWORKS = 43144\nVENDOR_ID_VASILY_NUSHTAKIN_HOME_ROUTER = 43145\nVENDOR_ID_VANWESTENNET = 43146\nVENDOR_ID_BEST_THERATRONICS_LTD = 43147\nVENDOR_ID_DET_NORSKE_OLJESELSKAP = 43148\nVENDOR_ID_RUBYCAT_LABS = 43149\nVENDOR_ID_STENBOCK_SYSTEMS_INC = 43150\nVENDOR_ID_ALTASTEEL_LTD = 43151\nVENDOR_ID_KRISTOFFER_BERDAL_COGNITIVEIO = 43152\nVENDOR_ID_GERRIKO_S_E_T_TECHNOLOGY_SOLUTIONS_LTD = 43153\nVENDOR_ID_NEXLABS_PTE_LTD = 43154\nVENDOR_ID_ION_TRADING_SRL = 43155\nVENDOR_ID_WEY_ELEKTRONIK_AG = 43156\nVENDOR_ID_TATUNG_TECHNOLOGY_INC = 43157\nVENDOR_ID_SKYTECHLT = 43158\nVENDOR_ID_HARTLEY_CONSULTANTS_LIMITED = 43159\nVENDOR_ID_ENSTREAM_LP = 43160\nVENDOR_ID_RIVERSIDE_COUNTY_REGIONAL_MEDICAL_CENTER = 43161\nVENDOR_ID_FLASH_SERVICES = 43162\nVENDOR_ID_CLOUD_TECHNOLOGIES_INC = 43163\nVENDOR_ID_ERUDITOR_GROUP_LTD = 43164\nVENDOR_ID_STRIKE_TECHNOLOGIES_LLC = 43165\nVENDOR_ID_THAI_CITRUS_INC = 43166\nVENDOR_ID_NASYS_INC = 43167\nVENDOR_ID_ALFRED_E_TIEFENBACHER_GMBH_CO_KG = 43168\nVENDOR_ID_TIROLER_VERSICHERUNG = 43169\nVENDOR_ID_BANCO_BILBAO_VIZCAYA_ARGENTARIA_SA = 43170\nVENDOR_ID_DATWYLER_HOLDING_AG = 43171\nVENDOR_ID_ATRIUM_REGION_PACA = 43172\nVENDOR_ID_ELESTA_LTD = 43173\nVENDOR_ID_UBIQUITY_SRL = 43174\nVENDOR_ID_DORSEY_RACING = 43175\nVENDOR_ID_SWISS_MOBILITY_SOLUTIONS = 43176\nVENDOR_ID_POSITRON_SRL = 43177\nVENDOR_ID_MAIN_LINE_HEALTHCARE = 43178\nVENDOR_ID_LENDY_LLC = 43179\nVENDOR_ID_OLE_VIRGINIA_HAMS_AMATEUR_RADIO_CLUB = 43180\nVENDOR_ID_VFA_INC = 43181\nVENDOR_ID_MINOR_INFTECH = 43182\nVENDOR_ID_RENFE_VIAJEROS_SA = 43183\nVENDOR_ID_THE_FLOOW = 43184\nVENDOR_ID_FINN_SP_Z_OO = 43185\nVENDOR_ID_ZWEITE_HEIMAT_GMBH = 43186\nVENDOR_ID_LIM_COLLEGE = 43187\nVENDOR_ID_INDIWAN_GMBH = 43188\nVENDOR_ID_JB_HUNT_TRANSPORT_SERVICES_INC = 43189\nVENDOR_ID_ARKET_SRL = 43190\nVENDOR_ID_METAMAKO = 43191\nVENDOR_ID_AUTOMATION_INTEGRATION_GLOBAL_SECURITY_GROUP_LLC = 43192\nVENDOR_ID_GRG_INTERNATIONAL_LTD = 43193\nVENDOR_ID_ABB_OY = 43194\nVENDOR_ID_MANAGEMENT_OF_FINANCE_OF_THE_ADMINISTRATION_OF_TCHAIKOVSKY_MUNICIPAL_DISTRICT_PERM_REGION = 43195\nVENDOR_ID_EVINTIA_SL = 43196\nVENDOR_ID_BCS_TECHNOLOGIES = 43197\nVENDOR_ID_STEPINSCOM = 43198\nVENDOR_ID_AITCH_PEA_LIMITED = 43199\nVENDOR_ID_CLAAS_KGAA_MBH = 43200\nVENDOR_ID_BYTEMINE_GMBH = 43201\nVENDOR_ID_ZETA_STORAGE_SYSTEMS_LTD_FORMERLY_DIGITAL_NETWORKS_UK_LTD = 43202\nVENDOR_ID_TSS_COMPANY = 43203\nVENDOR_ID_HARD_N_SOFTWARE_CONSULTING_GMBH = 43204\nVENDOR_ID_ALOXAEU = 43205\nVENDOR_ID_AMERICAN_CANCER_SOCIETY_INC = 43206\nVENDOR_ID_REAL_TIME_BY_DESIGN_LLC = 43207\nVENDOR_ID_CYBERSAVANTSLLC = 43208\nVENDOR_ID_BLIIK = 43209\nVENDOR_ID_PROMINICNET_INC = 43210\nVENDOR_ID_ATOSTEK_OY = 43211\nVENDOR_ID_SPACE150_INC = 43212\nVENDOR_ID_AVEILLANT_LTD = 43213\nVENDOR_ID_PROGRAMA_INTERLEGIS = 43214\nVENDOR_ID_PC_USERS_GROUP_ACT_INCORPORATED = 43215\nVENDOR_ID_FUKUSHIMA_PREFECTURAL_GOVERNMENT_JAPAN = 43216\nVENDOR_ID_ULTIMATE_EUROPE_TRANSPORTATION_EQUIPMENT_GMBH = 43217\nVENDOR_ID_TECALOR = 43218\nVENDOR_ID_SALLIE_MAE = 43219\nVENDOR_ID_DB_NETZ_AG = 43220\nVENDOR_ID_BEMOBI_MIDIA_E_ENTRETENIMENTO_LTDA = 43221\nVENDOR_ID_OXFAM = 43222\nVENDOR_ID_WIRELESS_TELECOM_GROUP_INC = 43223\nVENDOR_ID_NETYARD_PAWEL_JENNER = 43224\nVENDOR_ID_UNITYMEDIA_KABELBW = 43225\nVENDOR_ID_ASHE_COSGROVE_CORPORATION = 43226\nVENDOR_ID_OSSMAILDE = 43227\nVENDOR_ID_SHANGHAI_MRDCOM_CO_LTD = 43228\nVENDOR_ID_SOFTEH_PLUS_SRL = 43229\nVENDOR_ID_BETRUST_NV = 43230\nVENDOR_ID_GSI_HELMHOLTZZENTRUM_FR_SCHWERIONENFORSCHUNG_GMBH = 43231\nVENDOR_ID_BANK_OF_NOVA_SCOTIA = 43232\nVENDOR_ID_SCHEINKNIG_CO = 43233\nVENDOR_ID_LLC_ENISTEK = 43234\nVENDOR_ID_STADT_CHUR = 43235\nVENDOR_ID_PILZ_GMBH_CO_KG = 43236\nVENDOR_ID_AOC_OOST = 43237\nVENDOR_ID_COMPASS_PLUS_LTD = 43238\nVENDOR_ID_MINDMADE_SP_Z_OO = 43239\nVENDOR_ID_DAY_ZIMMERMANN = 43240\nVENDOR_ID_GUIDANCE_LTD = 43241\nVENDOR_ID_UNIVERSAL_SWITCHING_CORPORATION = 43242\nVENDOR_ID_SHINYBYTE_WEB_AGENCY_LLC = 43243\nVENDOR_ID_OPEN_INFORMATION_SECURITY_FOUNDATION = 43244\nVENDOR_ID_G421_NETWORKS = 43245\nVENDOR_ID_BENNINGTON_RUTLAND_SUPERVISORY_UNION = 43246\nVENDOR_ID_RUI_PEREIRA_NETCLOUDPT = 43247\nVENDOR_ID_3_TURN_PRODUCTIONS_LLC = 43248\nVENDOR_ID_THM_CONSULTING_LTD = 43249\nVENDOR_ID_GROUP_OF_COMPANIES_POWER_ENGINEERING_LTD = 43250\nVENDOR_ID_PLANET_ERDE = 43251\nVENDOR_ID_COSDAY_E_V = 43252\nVENDOR_ID_ASGRAPHICS = 43253\nVENDOR_ID_GEONOV = 43254\nVENDOR_ID_FISBA_OPTIK_AG = 43255\nVENDOR_ID_FLOULAB_IOANNIS_ANGELAKOPOULOS = 43256\nVENDOR_ID_WEBSBZ = 43257\nVENDOR_ID_DYOUVILLE_COLLEGE = 43258\nVENDOR_ID_CAMBRIDGE_HEALTH_ALLIANCE = 43259\nVENDOR_ID_WIREGEOCOM = 43260\nVENDOR_ID_PONTIS_RESEARCH_INC = 43261\nVENDOR_ID_ABVI_GOODWILL = 43262\nVENDOR_ID_SOLARCITY = 43263\nVENDOR_ID_OPANGA_NETWORKS_INC = 43264\nVENDOR_ID_HONGKONG_YUNLINK_TECHNOLOGY_CO_LTD = 43265\nVENDOR_ID_STORAIGHYROV_PAVLODAR_STATE_UNIVERSITY = 43266\nVENDOR_ID_JAMESON_MEMORIAL_HOSPITAL = 43267\nVENDOR_ID_TELECO_SPA = 43268\nVENDOR_ID_DI_KURT_RENAUER = 43269\nVENDOR_ID_YOSHITAKA_YAMANE = 43270\nVENDOR_ID_JUSTUS_LIEBIG_UNIVERSITT_GIEEN = 43271\nVENDOR_ID_AUSTRIA_CARD_PLASTIKKARTEN_UND_AUSWEISSYSTEME_GESMBH = 43272\nVENDOR_ID_CONTROL_CENTER_APPS_GMBH = 43273\nVENDOR_ID_GROUP_OF_COMPANIES_ROSINTEGRACIJA_LLC = 43274\nVENDOR_ID_ALEX_EGGENBERGER = 43275\nVENDOR_ID_CORELINE_SOFT_COLTD = 43276\nVENDOR_ID_AE_TELELINK_SYSTEM_LIMITED = 43277\nVENDOR_ID_ZALIO = 43278\nVENDOR_ID_R_L_DRAKE_HOLDINGS_LLC = 43279\nVENDOR_ID_VERENIGING_ONS_MIDDELBAAR_ONDERWIJS = 43280\nVENDOR_ID_PAUL_HARTMANN_AG = 43281\nVENDOR_ID_PROVIDENTIA_SYSTEMS = 43282\nVENDOR_ID_VADO_SECURITY = 43283\nVENDOR_ID_DREAM_SOLUTIONS_LTD = 43284\nVENDOR_ID_QUANZHOU_KARASSN_SECURITY_PROTECTION_ELECTRONICS_CO_LTD = 43285\nVENDOR_ID_KEYSIGHT_TECHNOLOGIES_INC = 43286\nVENDOR_ID_MOCOMSOFT_INC = 43287\nVENDOR_ID_LUGANSK_STATE_ACADEMY_CULTURE_AND_ARTS = 43288\nVENDOR_ID_W3SECURITY = 43289\nVENDOR_ID_DLP_NETWORKS = 43290\nVENDOR_ID_FRANK_LOEPTHIEN_LOEPPI = 43291\nVENDOR_ID_APPLIFIER_OY = 43292\nVENDOR_ID_DIAKONIE_DEUTSCHLAND = 43293\nVENDOR_ID_M2M_TELEMETRIA_LTDA = 43294\nVENDOR_ID_KREEL_LLC = 43295\nVENDOR_ID_EXABLAZE = 43296\nVENDOR_ID_BASSANO_ASSOCIATES = 43297\nVENDOR_ID_FNORDSPACENET = 43298\nVENDOR_ID_DAS_KARTELL_GERMAN_STAR_CITIZEN_ORGANIZATION = 43299\nVENDOR_ID_PDC_CORPORATION = 43300\nVENDOR_ID_XIAMEN_DIKSOFT_COLTD = 43301\nVENDOR_ID_BANK_OF_STOCKTON = 43302\nVENDOR_ID_1ST_CHOICE_TAX_SERVICE_INC = 43303\nVENDOR_ID_DAVENPORT_UNIVERSITY = 43304\nVENDOR_ID_HEY_COMMUNICATIONS = 43305\nVENDOR_ID_BITCLEAR_LLC = 43306\nVENDOR_ID_KEYPROCESSOR = 43307\nVENDOR_ID_APPCARA_INC = 43308\nVENDOR_ID_SWERATEL_AB = 43309\nVENDOR_ID_KONAK_SOLUTIONS_PTY_LTD = 43310\nVENDOR_ID_BELCITY_SOFTWARE = 43311\nVENDOR_ID_ZRO_KVANT = 43312\nVENDOR_ID_ZEROLATENCY_LTD = 43313\nVENDOR_ID_TECTEO_GROUP_SA = 43314\nVENDOR_ID_POWERDNSCOM_BV = 43315\nVENDOR_ID_INFORMATION_FACTORY = 43316\nVENDOR_ID_STADTWERKE_BONN_GMBH = 43317\nVENDOR_ID_PERSON_TO_PERSON_ANALYSIS_CA = 43318\nVENDOR_ID_SECURE_METERS_LIMITED = 43319\nVENDOR_ID_NETSTAR_INC_2 = 43320\nVENDOR_ID_POLARIS_NETWORKS = 43321\nVENDOR_ID_KENYA_EDUCATION_NETWORK = 43322\nVENDOR_ID_TRANS4MATION_IT_GMBH = 43323\nVENDOR_ID_FARSENS_SL = 43324\nVENDOR_ID_SHORELAND_INC = 43325\nVENDOR_ID_TRIPLE_CANOPY_INC = 43326\nVENDOR_ID_TORONTO_PUBLIC_LIBRARY = 43327\nVENDOR_ID_EXSCRIBE_INC = 43328\nVENDOR_ID_ONECONFIG_PTY_LTD = 43329\nVENDOR_ID_SONAVATION_INC = 43330\nVENDOR_ID_MADHAT_TECHNICAL_SOLUTIONS_LLC = 43331\nVENDOR_ID_DIALOGSOFT_INC = 43332\nVENDOR_ID_GANGWON_EMBEDDED_SOFTWARE_COOPERATIVE_RESEARCH_CENTER = 43333\nVENDOR_ID_IDOCTRUST = 43334\nVENDOR_ID_UNION_DES_BOIS_DE_CHAMPAGNE = 43335\nVENDOR_ID_GOERLITZ_AG = 43336\nVENDOR_ID_ZENON_MEDIA_GMBH = 43337\nVENDOR_ID_YOTTABYTE = 43338\nVENDOR_ID_EFCOMS_UG = 43339\nVENDOR_ID_TRAFFIC_TECHNOLOGIES_INC = 43340\nVENDOR_ID_DASHLINK = 43341\nVENDOR_ID_SNAILPROOF_COMPUTER_SERVICES = 43342\nVENDOR_ID_CONTACTLESS_DEVICES_LLC = 43343\nVENDOR_ID_MAVEN_INVENTING_SOLUTIONS = 43344\nVENDOR_ID_AKTIETRYKKERIET_AS = 43345\nVENDOR_ID_DOUGLAS_COUNTY_SCHOOL_DISTRICT_COLORADO = 43346\nVENDOR_ID_VALUEDATUM_SYSTEMS_INC_LTD = 43347\nVENDOR_ID_EMBEDDEDSOFT_LTD = 43348\nVENDOR_ID_NIGERIAN_RESEARCH_AND_EDUCATION_NETWORK_NGREN = 43349\nVENDOR_ID_ARIKELNET_ENTERPRISES_LLC = 43350\nVENDOR_ID_ADVANIA = 43351\nVENDOR_ID_HANGZHOU_HUAXING_CHUANGYE_COMMUNICATION_TECHNOLOGY_COLTD = 43352\nVENDOR_ID_BEIJING_CERTIFICATE_AUTHORITY = 43353\nVENDOR_ID_OBI_SMART_TECHNOLOGIES_GMBH = 43354\nVENDOR_ID_VTI_INSTRUMENTS_CORPORATION = 43355\nVENDOR_ID_MIMOSA_NETWORKS_INC = 43356\nVENDOR_ID_THOMAS_FAGART_BROZS = 43357\nVENDOR_ID_CANDIANSOLARCOM = 43358\nVENDOR_ID_CHINA_GUODIAN_CORPORATION = 43359\nVENDOR_ID_BINHAI_ONLINE_INFORMATION_TECHNOLOGY_COMPANY_LIMITED = 43360\nVENDOR_ID_IT_VOIMALA_OY = 43361\nVENDOR_ID_ZAKAD_AUTOMATYKI_I_URZDZE_POMIAROWYCH_AREX_SP_Z_OO = 43362\nVENDOR_ID_B2BCZ_SRO = 43363\nVENDOR_ID_VISION_BOX_SA = 43364\nVENDOR_ID_QI_ICT = 43365\nVENDOR_ID_N_TOOLSDE = 43366\nVENDOR_ID_SUEDZUCKER_AG = 43367\nVENDOR_ID_ORADIAN_DOO = 43368\nVENDOR_ID_BRIGHTSIGN_LLC = 43369\nVENDOR_ID_GIORDANO_BRUNO_STIFTUNG = 43370\nVENDOR_ID_MOEGUI_SPA = 43371\nVENDOR_ID_EMBEDDED_ACCESS_INC = 43372\nVENDOR_ID_ASSOCIAO_DOS_REGISTRADORES_IMOBILIRIOS_DE_SO_PAULO = 43373\nVENDOR_ID_BELTON_IT = 43374\nVENDOR_ID_BAER_KARRER_AG = 43375\nVENDOR_ID_LADYBIRD_CRANES_LTD = 43376\nVENDOR_ID_GDV_IT = 43377\nVENDOR_ID_HOLGER_GENTH_HGD = 43378\nVENDOR_ID_RJ_OBRIEN_AND_ASSOCIATES = 43379\nVENDOR_ID_COUNTERPOINT_NETWORKING_INC = 43380\nVENDOR_ID_GEMATICA_SRL = 43381\nVENDOR_ID_DREAMKET_CO_LTD = 43382\nVENDOR_ID_COMMERCIAL_BANK_SEVERO_VOSTOCHNY_ALLIANCE_JOINT_STOCK_OMPANY = 43383\nVENDOR_ID_PELLE_OLSSON_RAHOLMEN = 43384\nVENDOR_ID_PROYECTOS_IP = 43385\nVENDOR_ID_EXPKITS = 43386\nVENDOR_ID_CITY_OF_SIOUX_CITY_IA = 43387\nVENDOR_ID_AEWORLDCOUK = 43388\nVENDOR_ID_EKO_KONNECT_RESEARCH_AND_EDUCATION_INITIATIVE = 43389\nVENDOR_ID_BEIJING_FOREVER_COMMUNICATION_ELECTRONICS_COLTD = 43390\nVENDOR_ID_UTT_CO_LTD = 43391\nVENDOR_ID_AGILE_DIGITAL_ENGINEERING_PTY_LTD = 43392\nVENDOR_ID_S_NET = 43393\nVENDOR_ID_INTRINIUM_INC = 43394\nVENDOR_ID_THE_CITY_OF_AMSTERDAM = 43395\nVENDOR_ID_EARTHLAB_DAICHI_MAKINO = 43396\nVENDOR_ID_NET_MEDIA_SERVICES_AS = 43397\nVENDOR_ID_WILDIX = 43398\nVENDOR_ID_TISCALI_ITALIA_SPA = 43399\nVENDOR_ID_IT_STORITVE_GREGOR_JERE_SP = 43400\nVENDOR_ID_TRDATA_LIMITED = 43401\nVENDOR_ID_LAYER_7_TECHNOLOGIES = 43402\nVENDOR_ID_CAREERHUB_PTY_LTD = 43403\nVENDOR_ID_SOCIEDAD_ESTATAL_CORREOS_Y_TELEGRAFOS_SA = 43404\nVENDOR_ID_SA_WATER_CORPORATION = 43405\nVENDOR_ID_UNIVERSITI_PUTRA_MALAYSIA = 43406\nVENDOR_ID_DAVID_MARTIN_REAPERLEGION = 43407\nVENDOR_ID_HDMESSAGING_INC = 43408\nVENDOR_ID_REITH_IT_LSUNGEN_GMBH = 43409\nVENDOR_ID_JOSEPH_WILLIAMS = 43410\nVENDOR_ID_GRAESER_DEVELOPMENT = 43411\nVENDOR_ID_GENIUS_DIGITAL_LIMITED = 43412\nVENDOR_ID_FAIRVIEW_HEALTH_SERVICES = 43413\nVENDOR_ID_MOLSON_COORS_BREWING_COMPANY = 43414\nVENDOR_ID_DEEPBLUE_INFORMATIKAI_KFT = 43415\nVENDOR_ID_MULTIGENREGAMEWORLD_LLC = 43416\nVENDOR_ID_SOUTH_SIDE_HACKERSPACE_CHICAGO_NFP = 43417\nVENDOR_ID_KHAKHAM_SAYAVONG_NTICKS = 43418\nVENDOR_ID_MICROSOFT_UNIFIED_COMMUNICATIONS_AND_COLLABORATION_USER_GROUP = 43419\nVENDOR_ID_PROXIMIC_INC = 43420\nVENDOR_ID_SYSMACZ = 43421\nVENDOR_ID_ADTEC_COMMUNICATIONS = 43422\nVENDOR_ID_KEYONET = 43423\nVENDOR_ID_SECURITAS_FINLAND = 43424\nVENDOR_ID_ADUNO_GRUPPE = 43425\nVENDOR_ID_NOCTION = 43426\nVENDOR_ID_ALTUS_SISTEMAS_DE_AUTOMAO_SA = 43427\nVENDOR_ID_THE_WILLIAM_AND_FLORA_HEWLETT_FOUNDATION = 43428\nVENDOR_ID_STRATA_INFORMATION_TECHNOLOGY_INC = 43429\nVENDOR_ID_SYSTEMS_DEFINITION_INC = 43430\nVENDOR_ID_TATE_INC = 43431\nVENDOR_ID_MICROMED_BIOTECNOLOGIA_LTDA = 43432\nVENDOR_ID_SREEVIDYA_ARAVIND = 43433\nVENDOR_ID_METACOM_PTY_LTD = 43434\nVENDOR_ID_NUTSRANGE_TECHNOLOGIES = 43435\nVENDOR_ID_ACCUMULI_PLC = 43436\nVENDOR_ID_CITY_OF_MONTCLAIR = 43437\nVENDOR_ID_COUNTY_OF_BRUCE = 43438\nVENDOR_ID_JJ_DOWNS_INDUSTRIAL_PLASTICS_INC = 43439\nVENDOR_ID_ROYAL_HOLLOWAY_UNIVERSITY_OF_LONDON = 43440\nVENDOR_ID_ROYAL_HOLLOWAY_UNIVERSITY_OF_LONDON_2 = 43441\nVENDOR_ID_NILES_RADIO_COMMUNICATIONS = 43442\nVENDOR_ID_TRANSACCIONES_Y_SERVICIOS_MOBILE = 43443\nVENDOR_ID_INSPIRE_LIVING_INC = 43444\nVENDOR_ID_4TH_LAYER_INTEGRATED_SOLUTIONS_SRL = 43445\nVENDOR_ID_HARTMANN_ELECTRONIC_GMBH = 43446\nVENDOR_ID_LOADFRONT_SL = 43447\nVENDOR_ID_THEFEINERSCOM = 43448\nVENDOR_ID_MOBILCOM_DEBITEL_GMBH = 43449\nVENDOR_ID_AGENCJA_RESTRUKTURYZACJI_I_MODERNIZACJI_ROLNICTWA = 43450\nVENDOR_ID_AUSTRALIAN_CUSTOMS_AND_BORDER_PROTECTION_SERVICE = 43451\nVENDOR_ID_PRAGTEC_INC = 43452\nVENDOR_ID_VISIOMETRICS_SL = 43453\nVENDOR_ID_WICCESS = 43454\nVENDOR_ID_LFT_SOLUTIONS = 43455\nVENDOR_ID_KHS_GMBH = 43456\nVENDOR_ID_WARP_SOFTWARE_LTDA = 43457\nVENDOR_ID_NVIZIBLE_LTD = 43458\nVENDOR_ID_VIRSAE_GROUP_LTD = 43459\nVENDOR_ID_UNIVERSITY_COLLEGE_LEUVEN_LIMBURG_UCLL = 43460\nVENDOR_ID_DGIT_INTERNATIONAL_PTE_LTD = 43461\nVENDOR_ID_UNIVERSIDADE_FEDERAL_RURAL_DE_PERNAMBUCO = 43462\nVENDOR_ID_KYOTO_UNIVERSITY_MICROCOMPUTER_CLUB = 43463\nVENDOR_ID_TEN_CITIES_MEDIA = 43464\nVENDOR_ID_COMMUNICATION_FEDERAL_CREDIT_UNION = 43465\nVENDOR_ID_CMS_CENTRAL_MEDIA_SOLUTIONS_GMBH = 43466\nVENDOR_ID_EVOLV_INC = 43467\nVENDOR_ID_CACTO_INTERNET_LTDA = 43468\nVENDOR_ID_SYSNOVE = 43469\nVENDOR_ID_G_H_NETZWERK_DESIGN_GESELLSCHAFT_FR_IT_CONSULTING_MBH = 43470\nVENDOR_ID_SUN_TRADING_SOLUTIONS = 43471\nVENDOR_ID_APC_INTEGRATED_SERVICES_GROUP_INC = 43472\nVENDOR_ID_YHGFL_FOUNDATION = 43473\nVENDOR_ID_COCA_COLA_HELLENIC_BOTTLING_COMPANY = 43474\nVENDOR_ID_XNX_SRL = 43475\nVENDOR_ID_LEANDEV = 43476\nVENDOR_ID_BIOSS_CONSULTING_SRL = 43477\nVENDOR_ID_JONATHON_ANDERSON_CIVILFRITZ = 43478\nVENDOR_ID_ECOLE_NATIONALE_SUPRIEURE_DINFORMATIQUE = 43479\nVENDOR_ID_CANINE_CRECHE = 43480\nVENDOR_ID_INNOVAATIK_O = 43481\nVENDOR_ID_GLOBALSENSING_TECHNOLOGIES = 43482\nVENDOR_ID_AIPHONE_CO_LTD = 43483\nVENDOR_ID_FUNDACIN_FULGOR = 43484\nVENDOR_ID_TRILLIUM_TEAMOLOGIES_INC = 43485\nVENDOR_ID_FUSE_NETWORKS_LLC = 43486\nVENDOR_ID_GUANGZHOU_WOXIANG_INFORMATION_TECHNOLOGY_CO_LTD = 43487\nVENDOR_ID_SCHLETTER_GMBH = 43488\nVENDOR_ID_GOOD_FIRST_GROUP = 43489\nVENDOR_ID_RITE_TECH_INDUSTRIAL_CO_LTD = 43490\nVENDOR_ID_ITR_SERVICE_GMBH = 43491\nVENDOR_ID_BERNHARD_TRINNES_MICRODOTS = 43492\nVENDOR_ID_ONLINE_LINJEFORENING = 43493\nVENDOR_ID_CLARITY_LTD = 43494\nVENDOR_ID_TAIDE_ENTERPRISE_COLTD = 43495\nVENDOR_ID_QSC_AG = 43496\nVENDOR_ID_WEAVESYS_UK = 43497\nVENDOR_ID_SENSORBOX_DO_BRASIL_LTDA = 43498\nVENDOR_ID_YOUNCTA = 43499\nVENDOR_ID_4D_SECURITY_SOLUTIONS = 43500\nVENDOR_ID_BOSTON_FINANCIAL_DATA_SERVICES_INC = 43501\nVENDOR_ID_HIGHRES_BIOSOLUTIONS = 43502\nVENDOR_ID_JAY_RIDGEWAY_BEEKLINGCOM = 43503\nVENDOR_ID_JUDD_STORRS = 43504\nVENDOR_ID_PLUGH_STUDIOS_LTD = 43505\nVENDOR_ID_BEATS_BY_DRE = 43506\nVENDOR_ID_TIM_AG = 43507\nVENDOR_ID_EDT_SAS_ELECTRONIC_DATA_TRANSFER = 43508\nVENDOR_ID_BITPRO_AS = 43509\nVENDOR_ID_JUAN_JOSE_RODRIGUEZ_PONCE = 43510\nVENDOR_ID_E7_SOLUTIONS = 43511\nVENDOR_ID_BEIJING_SIFANG_AUTOMATION_CO_LTD = 43512\nVENDOR_ID_SDIS68 = 43513\nVENDOR_ID_KT_TELECOP = 43514\nVENDOR_ID_NISCOMINC = 43515\nVENDOR_ID_AUVIK_NETWORKS_INC = 43516\nVENDOR_ID_COOLMINDS_TECHNOLOGIES_P_LTD = 43517\nVENDOR_ID_SMARTCONNECT_NV_SA = 43518\nVENDOR_ID_TRANWALL = 43519\nVENDOR_ID_PTEAM_GMBH = 43520\nVENDOR_ID_RSE_INFORMATIONSTECHNOLOGIE_GMBH = 43521\nVENDOR_ID_VOLTSERVER_INC = 43522\nVENDOR_ID_ALBERTA_INVESTMENT_MANAGEMENT_CORPORATION = 43523\nVENDOR_ID_VANTEON_CORP = 43524\nVENDOR_ID_WAVECON_GMBH = 43525\nVENDOR_ID_SIGNAL_BREDBND_AS = 43526\nVENDOR_ID_PRESIDIO_NETWORKED_SOLUTIONS = 43527\nVENDOR_ID_SHODEN_CORPORATION = 43528\nVENDOR_ID_ISTITUTO_RADIOLOGICO_E_FISIORADIOTERAPICO_VALDARNO = 43529\nVENDOR_ID_HYTEC_INTER_COLTD = 43530\nVENDOR_ID_ATOMIC_OBJECT_LLC = 43531\nVENDOR_ID_YAFENG_SHAN_KOKONUR = 43532\nVENDOR_ID_BEIJING_NATIONAL_RAILWAY_RESEARCH_DESIGN_INSTITUDE_OF_SIGNAL_COMMUNICATION_CO_LTD_CRSCD = 43533\nVENDOR_ID_ALSTOM_GRID = 43534\nVENDOR_ID_LUXOTTICA_NORTH_AMERICA_DISTRIBUTION_LLC = 43535\nVENDOR_ID_AO_K_DORSTROY = 43536\nVENDOR_ID_SOLUMED = 43537\nVENDOR_ID_EXA_TMR = 43538\nVENDOR_ID_DWARF_ANIMATION_STUDIO = 43539\nVENDOR_ID_FEDERAL_AGRICULTURAL_MARKETING_AUTHORITY = 43540\nVENDOR_ID_LSY_INC = 43541\nVENDOR_ID_DENT_INSTRUMENTS = 43542\nVENDOR_ID_ID_BUSINESS_SOLUTIONS_LTD = 43543\nVENDOR_ID_DIGICOMM_GMBH = 43544\nVENDOR_ID_OMNITRACS_LLC = 43545\nVENDOR_ID_TARIOX_LIMITED = 43546\nVENDOR_ID_SCOOP_SOFTWARE_GMBH = 43547\nVENDOR_ID_TRASIS_SA = 43548\nVENDOR_ID_IT_COMPETENCE_GROUP_SE = 43549\nVENDOR_ID_CAMEA_SPOL_S_R_O = 43550\nVENDOR_ID_MAVARI_IT_BVBA = 43551\nVENDOR_ID_WHITESKY_COMMUNICATIONS = 43552\nVENDOR_ID_RAPID_FOCUS_SECURITY_INC = 43553\nVENDOR_ID_IGC_2 = 43554\nVENDOR_ID_LAYEREDDEFENSE = 43555\nVENDOR_ID_RIGAS_DOMES_INFORMACIJAS_TEHNOLOGIJU_CENTRS = 43556\nVENDOR_ID_NICK_FENDER = 43557\nVENDOR_ID_GITHUB_INC = 43558\nVENDOR_ID_ENKOM_AG = 43559\nVENDOR_ID_NEW_ORLEANS_EAST_HOSPITAL = 43560\nVENDOR_ID_MICRO_RESEARCH_FINLAND_OY = 43561\nVENDOR_ID_ZEPMED_LLC = 43562\nVENDOR_ID_PEDRO_PAULO_MEDEIROS = 43563\nVENDOR_ID_TSC_AUTO_ID_TECHNOLOGY_CO_LTD = 43564\nVENDOR_ID_RELIANCE_JIO_INFOCOMM_LIMITED = 43565\nVENDOR_ID_ENGINEERING_CENTER_REGIONAL_SYSTEMS_LIMITED = 43566\nVENDOR_ID_YONGJIA_COUNTY_BOARD_OF_EDUCATION = 43567\nVENDOR_ID_EMICON = 43568\nVENDOR_ID_HONG_YUN_TECHNOLOGY = 43569\nVENDOR_ID_COOPRATIVE_FORESTIRE_BOURGOGNE_LIMOUSIN_CFBL = 43570\nVENDOR_ID_SOCIETE_DES_TRANSPORTS_ROCHATTE = 43571\nVENDOR_ID_FOUNDATION_FOR_RESEARCH_AND_TECHNOLOGY_HELLAS = 43572\nVENDOR_ID_VSAT_SERVICE = 43573\nVENDOR_ID_LANSING_MAKERS_NETWORK = 43574\nVENDOR_ID_OPENPEAK = 43575\nVENDOR_ID_INTSECNET = 43576\nVENDOR_ID_CNPC_BEIJING_RICHFIT_INFORMATION_TECHNOLOGY_COLTD = 43577\nVENDOR_ID_42TECHNOLOGY_AG = 43578\nVENDOR_ID_EASYPROTO_DI_GIACOMO_CESARI = 43579\nVENDOR_ID_SUTHERLANDGLOBALSERVICES = 43580\nVENDOR_ID_OOYALA_INC = 43581\nVENDOR_ID_DOCUMENT_CENTRIC_SOLUTIONS_LTD = 43582\nVENDOR_ID_REMAKE_ELECTRIC = 43583\nVENDOR_ID_TRIZETTO_PROVIDER_SOLUTIONS = 43584\nVENDOR_ID_SAMSON_AG = 43585\nVENDOR_ID_SVS_TELEKOMNKASYON_HZ_TC_SAN_A = 43586\nVENDOR_ID_ROAVE_LLC = 43587\nVENDOR_ID_SAA_TOPNET_GMBH = 43588\nVENDOR_ID_KEKLOLWTF_AS = 43589\nVENDOR_ID_HAL9K_HACKERSPACE = 43590\nVENDOR_ID_ERLANG_SOLUTIONS_LTD = 43591\nVENDOR_ID_CAMPBELL_SCIENTIFIC_INCORPORATED = 43592\nVENDOR_ID_CRIMSON_INNOVATIVE = 43593\nVENDOR_ID_INTERHYP_AG = 43594\nVENDOR_ID_MOLINOSOFT_JULIAN_BOURNE = 43595\nVENDOR_ID_CARNEGIE_FITNESS = 43596\nVENDOR_ID_COMPREHENSIVE_HEALTH_MANAGEMENT_INC = 43597\nVENDOR_ID_STORM = 43598\nVENDOR_ID_PANEIDOS_DESU = 43599\nVENDOR_ID_BEIJING_EASESKY_NETCOM_TECHNOLOGY_COLTD = 43600\nVENDOR_ID_NURI_TECHNOLOGY_CO_LTD = 43601\nVENDOR_ID_ROSSIYA_SEGODNYA = 43602\nVENDOR_ID_THE_TWELVE_TRIBES = 43603\nVENDOR_ID_ARKANSAS_EDUCATIONAL_TELEVISION_NETWORK_AETN = 43604\nVENDOR_ID_METATRUST = 43605\nVENDOR_ID_NOBAQNET = 43606\nVENDOR_ID_FUNDA_REAL_ESTATE_BV = 43607\nVENDOR_ID_RABEN_GROUP = 43608\nVENDOR_ID_NETCRACKER_TECHNOLOGY_CORP = 43609\nVENDOR_ID_COLOSSEOEAS_AS = 43610\nVENDOR_ID_POWER_ETHERNET = 43611\nVENDOR_ID_IOLAN = 43612\nVENDOR_ID_SKYLIFE_ENGINEERING = 43613\nVENDOR_ID_PHAENOVUM_SCHLERFORSCHUNGSZENTRUM_LRRACH_DREILNDERECK_EV = 43614\nVENDOR_ID_VONROLL = 43615\nVENDOR_ID_AVENTURA_TECHNOLOGIES_INC = 43616\nVENDOR_ID_VIDANT_HEALTH = 43617\nVENDOR_ID_CAMTRACE = 43618\nVENDOR_ID_LIANYUNGANG_E_PORT_INFORMATION_DEVELOPMENT_COLTD = 43619\nVENDOR_ID_SHENZHEN_HEADSUN_TECHNOLOGY = 43620\nVENDOR_ID_MEDICAL_EFFECT = 43621\nVENDOR_ID_WEBPERATIVE_LLC = 43622\nVENDOR_ID_UMENSIS_GUILLAUME_PANNATIER = 43623\nVENDOR_ID_JAROSLAV_SENDLER_XSENDL00 = 43624\nVENDOR_ID_CORE_TECHNOLOGY = 43625\nVENDOR_ID_NEWB = 43626\nVENDOR_ID_DEVANI_CREATIVE = 43627\nVENDOR_ID_THE_RUBICON_PROJECT = 43628\nVENDOR_ID_PSITEX_LLC = 43629\nVENDOR_ID_DUXOFT_INC = 43630\nVENDOR_ID_HEIJMANS_NV = 43631\nVENDOR_ID_CELTEX_WORKS = 43632\nVENDOR_ID_AIES_ADVANCED_INDUSTRIAL_ELECTRONIC_SYSTEMS = 43633\nVENDOR_ID_METRELLIS_INC = 43634\nVENDOR_ID_PRACTICE_VELOCITY_LLC = 43635\nVENDOR_ID_LESNET = 43636\nVENDOR_ID_ZYMER_INC = 43637\nVENDOR_ID_ITS_KOREA = 43638\nVENDOR_ID_EVOLUTA_INTERACTIVE = 43639\nVENDOR_ID_THROUGHOTHEREYES_JONATHAN_PLATZER = 43640\nVENDOR_ID_NETPLUSCH_SA = 43641\nVENDOR_ID_LINDE_ENGINEERING = 43642\nVENDOR_ID_TEQ_SA = 43643\nVENDOR_ID_INFRA_SERVICES = 43644\nVENDOR_ID_FEIG_ELECTRONIC_GMBH = 43645\nVENDOR_ID_DATATAL_AB = 43646\nVENDOR_ID_RIMBACH_IT_SYSTEMS_UG = 43647\nVENDOR_ID_NAUDIT_HIGH_PERFORMANCE_COMPUTING_AND_NETWORKING_SL = 43648\nVENDOR_ID_RARITAN_BAY_MEDICAL_CENTER = 43649\nVENDOR_ID_UNITED_HEALTH_SERVICES = 43650\nVENDOR_ID_INTTRA_INC = 43651\nVENDOR_ID_GOBICS = 43652\nVENDOR_ID_UNIVERSITAT_OBERTA_DE_CATALUNYA = 43653\nVENDOR_ID_MARCSICH = 43654\nVENDOR_ID_UNIVERSITY_ECCLESIASTICAL_ACADEMY_OF_THESSALONIKI = 43655\nVENDOR_ID_CONSORTIUM = 43656\nVENDOR_ID_KANTON_STGALLEN = 43657\nVENDOR_ID_SEACLOUD = 43658\nVENDOR_ID_HOCHSCHULE_FR_TECHNIK_UND_WIRTSCHAFT_DES_SAARLANDES_HTW_SAAR = 43659\nVENDOR_ID_ZADARA_STORAGE_LTD = 43660\nVENDOR_ID_COLUMBUS_BUSINESS_SOLUTIONS = 43661\nVENDOR_ID_SIMPSON_HOUSING_LLLP = 43662\nVENDOR_ID_ETOUCH_FEDERAL_SYSTEMS = 43663\nVENDOR_ID_UNZANE = 43664\nVENDOR_ID_RIOXO_GMBH = 43665\nVENDOR_ID_HACKERSPACE_BRUSSELS = 43666\nVENDOR_ID_SUNWIRE_INC = 43667\nVENDOR_ID_ANDREAS_KREISEL = 43668\nVENDOR_ID_THE_INSTITUTE_OF_MATHEMATICAL_SCIENCES = 43669\nVENDOR_ID_EPIC_CODE_PTY_LTD = 43670\nVENDOR_ID_EMSEAS_TEKNIK_AB = 43671\nVENDOR_ID_INTELLECT_MODULE = 43672\nVENDOR_ID_FEDERAL_STATE_UNITARY_ENTERPRISE_CENTRINFORM = 43673\nVENDOR_ID_ROBONECT = 43674\nVENDOR_ID_ACCENTURE_CAS_GMBH = 43675\nVENDOR_ID_57NORTH_HACKLAB = 43676\nVENDOR_ID_ICT_PLUS_SRL = 43677\nVENDOR_ID_MICHAEL_KRAMER = 43678\nVENDOR_ID_SETTE = 43679\nVENDOR_ID_CHORUS_LIMITED = 43680\nVENDOR_ID_ELESTER_PKP_SP_Z_OO = 43681\nVENDOR_ID_ITSA_CONSULTING_LLC = 43682\nVENDOR_ID_ALDEIS = 43683\nVENDOR_ID_NOVASIB_GMBH = 43684\nVENDOR_ID_BIZCONSULT_UNTERNEHMENSBERATUNG_GMBH = 43685\nVENDOR_ID_JEFFERSON_COUNTY = 43686\nVENDOR_ID_CHRISTOPH_KNOTT_IT_SICHERHEITSTECHNIK = 43687\nVENDOR_ID_GERMEN_ELEKTRONIK_LTD = 43688\nVENDOR_ID_SCHUGART = 43689\nVENDOR_ID_THE_ACTIVE_NETWORK = 43690\nVENDOR_ID_MICHAEL_KETTNER = 43691\nVENDOR_ID_HABERBERGERCOM = 43692\nVENDOR_ID_FOTOLIA_LLC = 43693\nVENDOR_ID_OMEGA_INTELLIGENCE_SYSTEMS_LTD = 43694\nVENDOR_ID_5NINE_SOFTWARE = 43695\nVENDOR_ID_LLC_INFO_KONTENT = 43696\nVENDOR_ID_JSC_TYUMEN_ELECTRICITY_SALE_COMPANY = 43697\nVENDOR_ID_JOINT_ELECTRONIC_TELLER_SERVICES_LTD = 43698\nVENDOR_ID_EASYDATA_LLC = 43699\nVENDOR_ID_PATHCORE = 43700\nVENDOR_ID_HYSECURITY_INC = 43701\nVENDOR_ID_DOM_DANIEL = 43702\nVENDOR_ID_WACOM_COMPANY_LTD = 43703\nVENDOR_ID_ACCUTRON_INSTRUMENTS_INC = 43704\nVENDOR_ID_FNTCHORG = 43705\nVENDOR_ID_STATNETT_SF = 43706\nVENDOR_ID_AUSTRALIAN_RAIL_TECCHNOLOGY = 43707\nVENDOR_ID_SIMONMED_IMAGING = 43708\nVENDOR_ID_AIRDSL_PTY_LTD = 43709\nVENDOR_ID_GAMESA = 43710\nVENDOR_ID_MYSUPPLY_APS = 43711\nVENDOR_ID_UNIVERSIDAD_CENTRAL_DE_VENEZUELA = 43712\nVENDOR_ID_CODE_42 = 43713\nVENDOR_ID_MEGA_SOFT_COMPUTACIN_CA = 43714\nVENDOR_ID_DATA_INFRASTRUCTURE_TECHNOLOGIES_LTD = 43715\nVENDOR_ID_VETERINARY_NURSE_SOLUTIONS_PTY_LTD = 43716\nVENDOR_ID_IMENSUP = 43717\nVENDOR_ID_STERREICHISCHES_WELTRAUM_FORUM = 43718\nVENDOR_ID_TELVIO_LLC = 43719\nVENDOR_ID_CREAT0RPRO = 43720\nVENDOR_ID_CYBEROAM_TECHNOLOGIES_PVT_LTD = 43721\nVENDOR_ID_DAC_SYSTEMS_INC = 43722\nVENDOR_ID_STANCIL_CORPORATION = 43723\nVENDOR_ID_JAPAN_PRIME_COMPUTING = 43724\nVENDOR_ID_CASAIR_INC = 43725\nVENDOR_ID_GO_EXPRESS_LOGISTICS_DEUTSCHLAND_GMBH = 43726\nVENDOR_ID_VALEO_COMFORT_ANS_DRIVING_ASSITANCE = 43727\nVENDOR_ID_SINERGISE_LTD = 43728\nVENDOR_ID_TECKIDS_EV = 43729\nVENDOR_ID_ERNST_KLETT_AG = 43730\nVENDOR_ID_FOOXTEK_CO_LTD = 43731\nVENDOR_ID_NETMAG_TECHNOLOGY_CORPORATION = 43732\nVENDOR_ID_EAST_PHOTONICS_INC = 43733\nVENDOR_ID_IQUO_LTD = 43734\nVENDOR_ID_STI_TASSIMCO = 43735\nVENDOR_ID_STANDARD_IMAGING_INC = 43736\nVENDOR_ID_MEDALLIES = 43737\nVENDOR_ID_DOSHISHA_UNIVERSITY = 43738\nVENDOR_ID_CONCEPT_SMOKE_SCREEN_LTD = 43739\nVENDOR_ID_ASB_TECHNOLOGY_SP_Z_OO = 43740\nVENDOR_ID_CERQUEIRA_MARCOS_LDA = 43741\nVENDOR_ID_MICROX_COMPUTER_GMBH = 43742\nVENDOR_ID_OPEN_SYSTEMS_TECHNOLOGY_PTY = 43743\nVENDOR_ID_AIRBERLIN = 43744\nVENDOR_ID_CONSEJO_DE_LA_JUDICATURA = 43745\nVENDOR_ID_ULTERIUS_TECHNOLOGIES_LLC = 43746\nVENDOR_ID_MATERIALAPPS = 43747\nVENDOR_ID_ARES_CONOCIMIENTO_DE_NEGOCIO_SL = 43748\nVENDOR_ID_COUNTRY_BRIGHT_COMPANY_LTD = 43749\nVENDOR_ID_JABIL_CIRCUIT_INC = 43750\nVENDOR_ID_SHENZHEN_TG_NET_BOTONE_TECHNOLOGY_CO_LTD = 43751\nVENDOR_ID_CHINA_FILM_EQUIPMENT_CO_LTD = 43752\nVENDOR_ID_KYRIASIS = 43753\nVENDOR_ID_PHILIPP_WAGNER_SOFTWAREENTWICKLUNG = 43754\nVENDOR_ID_BG_PHOENICS_GMBH = 43755\nVENDOR_ID_SCHWARZ_DIENSTLEISTUNG_KG = 43756\nVENDOR_ID_QOSIT_AG = 43757\nVENDOR_ID_CLIQUE_INTELLIGENCE_INC = 43758\nVENDOR_ID_BIG_WHITE_NETWORK_TECHNOLOGIESLTD = 43759\nVENDOR_ID_ATLAS_NETWORKS = 43760\nVENDOR_ID_OUR_SCHOOL_LTD = 43761\nVENDOR_ID_PLAZALOTUSGROUP = 43762\nVENDOR_ID_CHINAFILM_GLOBAL_BEIJING_TECHNOLOGY_LIMITED = 43763\nVENDOR_ID_TALLAC_NETWORKS = 43764\nVENDOR_ID_COLOR_PRINT = 43765\nVENDOR_ID_MBSYS_LLC_AZERBAIJAN = 43766\nVENDOR_ID_EASTERN_LONG_ISLAND_HOSPITAL = 43767\nVENDOR_ID_GATESAIR_INC = 43768\nVENDOR_ID_VEZEA = 43769\nVENDOR_ID_ADDAT_SRO = 43770\nVENDOR_ID_BEHLMAN_ELECTRONICS = 43771\nVENDOR_ID_KS_IT_SERVICES_GMBH = 43772\nVENDOR_ID_THE_VANCOUVER_CLINIC_INC = 43773\nVENDOR_ID_HORTONWORKS_INC = 43774\nVENDOR_ID_QUOTEPRO_INC = 43775\nVENDOR_ID_SYMBIOTIC_SYSTEM_DESIGN = 43776\nVENDOR_ID_MAIKEL_DE_BOER = 43777\nVENDOR_ID_HAMPSHIRE_CONTROLS_CORPORATION = 43778\nVENDOR_ID_FINNOVA_AG = 43779\nVENDOR_ID_PARADOX_NETWORKS_INC = 43780\nVENDOR_ID_MOSHEL_KAMADU_RECORDS = 43781\nVENDOR_ID_UPS_SOLUTIONS_INC = 43782\nVENDOR_ID_WAVENET_COMMUNICATIONS_PRIVATE_LIMITED = 43783\nVENDOR_ID_IFOM = 43784\nVENDOR_ID_MAGELLIUM = 43785\nVENDOR_ID_FACTUAL_INC = 43786\nVENDOR_ID_LEVIATHAN_SECURITY_TECHNOLOGIES = 43787\nVENDOR_ID_COMITA_DD = 43788\nVENDOR_ID_TRADING_CONSULTING_HPC_GMBH = 43789\nVENDOR_ID_BECKER_AERO = 43790\nVENDOR_ID_CINE_DIGITAL_SERVICE = 43791\nVENDOR_ID_NOW_WIRELESS_LIMITED = 43792\nVENDOR_ID_TOM_GUNDERSEN_SYSTEMD = 43793\nVENDOR_ID_CHRIS_THOMSON = 43794\nVENDOR_ID_GUANGZHOU_ANDEA_ELECTRONICS_TECHNOLOGY_COLTD = 43795\nVENDOR_ID_RASING_IT_SOLUTIONS = 43796\nVENDOR_ID_CROZ_DOO = 43797\nVENDOR_ID_NANJING_SAND_TECHNOLOGY_CO_LTD = 43798\nVENDOR_ID_TRUMPF_GMBH_CO_KG = 43799\nVENDOR_ID_ORASENTRY = 43800\nVENDOR_ID_DOLPHIN_SYSTEMS_AG = 43801\nVENDOR_ID_AVALOQ_EVOLUTION_AG = 43802\nVENDOR_ID_UNIVERSITY_OF_SOUTH_WALES = 43803\nVENDOR_ID_BOMBARDIER_AEROSPACE = 43804\nVENDOR_ID_METALOGIX_INTERNATIONAL_GMBH = 43805\nVENDOR_ID_SHAPE_SECURITY_INC = 43806\nVENDOR_ID_CENTRI_TECHNOLOGY_INC = 43807\nVENDOR_ID_SPINCAT_STUDIOS = 43808\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES = 43809\nVENDOR_ID_LI_HONGNAN_LIHN = 43810\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_MINDANAO = 43811\nVENDOR_ID_CORSCIENCE_GMBH_CO_KG = 43812\nVENDOR_ID_CENTRAAL_JUSTITIEEL_INCASSOBUREAU = 43813\nVENDOR_ID_GNU_NETWORKS_LTD = 43814\nVENDOR_ID_THE_UNIVERSITY_OF_TEXAS_MD_ANDERSON_CANCER_CENTER = 43815\nVENDOR_ID_TRAN_INDUSTRIES_LLC = 43816\nVENDOR_ID_VERTEX_BUSINESS_SERVICES = 43817\nVENDOR_ID_FEATURESPACE_LIMITED = 43818\nVENDOR_ID_PULSE_TECHNOLOGIES = 43819\nVENDOR_ID_MOZY_INC = 43820\nVENDOR_ID_SUWANNEE_COUNTY_SCHOOL_BOARD = 43821\nVENDOR_ID_NOK_NOK_LABS_INC = 43822\nVENDOR_ID_VAS_EXPERTS = 43823\nVENDOR_ID_CONECTAIP_TECNOLOGIA_SL = 43824\nVENDOR_ID_EARNEST_PRODUCTS_INC_DBA_SOUTHERN_MANUFACTURING = 43825\nVENDOR_ID_TEXKA_LABS = 43826\nVENDOR_ID_IDEOSOFT_CB = 43827\nVENDOR_ID_BOSOFT = 43828\nVENDOR_ID_IFIELD_SCHOOL = 43829\nVENDOR_ID_EWATER_PTY_LTD = 43830\nVENDOR_ID_EZVOICETEK_CO_LTD = 43831\nVENDOR_ID_BEIJING_DS_FIELDBUS_TECHNOLOGY_COLTD = 43832\nVENDOR_ID_LIVECREATION = 43833\nVENDOR_ID_URBAN_SYSTEMS_DESIGN_INSTITUTE = 43834\nVENDOR_ID_HOCHTIEF_CZ_AS = 43835\nVENDOR_ID_C_TECH_BILISIM_TEKNOLOJILERI_SANVE_TIC_AS = 43836\nVENDOR_ID_DTI_GROUP_LTD = 43837\nVENDOR_ID_GENEX_HELLAS_LTD = 43838\nVENDOR_ID_RAILCOMM_LLC = 43839\nVENDOR_ID_SUMITOMO_MITSUI_BANKING_CORPORATION = 43840\nVENDOR_ID_EATEL = 43841\nVENDOR_ID_ZERO_WASTE_SCOTLAND = 43842\nVENDOR_ID_ALTER_TRADING_CORPORATION_LLC = 43843\nVENDOR_ID_GUANGDONG_BIG_BANIAN_INFO_TECH_CO_LTD = 43844\nVENDOR_ID_TOSHIBA_TEC_SOLUTION_SERVICES_CORPORATION = 43845\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_BAGUIO = 43846\nVENDOR_ID_A_HAGEDOORN_ELECTRONICS = 43847\nVENDOR_ID_INOTHINGS_GMBH = 43848\nVENDOR_ID_LIION_LLC = 43849\nVENDOR_ID_DOXCELERATE_CORPORATION = 43850\nVENDOR_ID_DANIELLEGALNET_RECHTSANWLTE = 43851\nVENDOR_ID_TRUSECO_SRO = 43852\nVENDOR_ID_ACADEMY_OF_ECONOMIC_STUDIES_OF_MOLDOVA = 43853\nVENDOR_ID_TU_INVESTMENT_CLUB_EV = 43854\nVENDOR_ID_EZIXORG = 43855\nVENDOR_ID_UNIT4_BUSINESS_SOFTWARE_SPAIN_SLU = 43856\nVENDOR_ID_MITRA_DATA = 43857\nVENDOR_ID_GRIGORIVSKA_INTERNATIONAL_SCHOOL = 43858\nVENDOR_ID_HARBOR_FREIGHT_TOOLS = 43859\nVENDOR_ID_GROENEWOUD = 43860\nVENDOR_ID_NEW_YORK_GENOME_CENTER = 43861\nVENDOR_ID_DREI_BANKEN_EDV_GESMBH = 43862\nVENDOR_ID_VALOUR_SECURITY_LTD = 43863\nVENDOR_ID_BREEZE_INNOVATIONS_PRIVATE_LIMITED = 43864\nVENDOR_ID_MATTHIAS_KRAUSE_SPECTRE_NET = 43865\nVENDOR_ID_BEIJING_HUAFEI_TECHNOLOGY_COLTD = 43866\nVENDOR_ID_RENAME_IT = 43867\nVENDOR_ID_CONJUR_INC = 43868\nVENDOR_ID_YATHARTH_GUPTA = 43869\nVENDOR_ID_PRECYSE_TECHNOLOGIES = 43870\nVENDOR_ID_METRICELL_LTD = 43871\nVENDOR_ID_QLIGENTINC = 43872\nVENDOR_ID_TA_ASSOCIATES = 43873\nVENDOR_ID_PMACCT = 43874\nVENDOR_ID_TEKNOWLEDGY_INC = 43875\nVENDOR_ID_CENTRE_HOSPITALIER_UNIVERSITAIRE_SAINTE_JUSTINE = 43876\nVENDOR_ID_DALIAN_RURAL_COMMERCIAL_BANK_COLTD = 43877\nVENDOR_ID_EMBROSS_GROUP = 43878\nVENDOR_ID_CHENGDU_FUHUAXIN_TECHNOLOGY_COLTD = 43879\nVENDOR_ID_FRAKO_KONDENSATOREN_UND_ANLAGENBAU_GMBH = 43880\nVENDOR_ID_INFORMATICS_SERVICES_CORPORATION_ISC = 43881\nVENDOR_ID_DHBW_VILLINGEN_SCHWENNINGEN = 43882\nVENDOR_ID_NIVO_ENGINEERING_BV = 43883\nVENDOR_ID_ANYCODE_KFT = 43884\nVENDOR_ID_WCC_GROUP_BV = 43885\nVENDOR_ID_ANJARY_PTY_LTD = 43886\nVENDOR_ID_COMPUTER_SA = 43887\nVENDOR_ID_AGILOO_SRL_SEMPLIFICATA = 43888\nVENDOR_ID_DATENKOLLEKTIVNET = 43889\nVENDOR_ID_THOTAKA_TECHNOLOGIES_PRIVATE_LIMITED = 43890\nVENDOR_ID_SMYCOM = 43891\nVENDOR_ID_NERYSEC = 43892\nVENDOR_ID_HOPE_BAY_TECHNOLOGIES_INC = 43893\nVENDOR_ID_HEDON_ELECTRONIC_DEVELOPMENTS_BV = 43894\nVENDOR_ID_INSTITUT_FR_HOLZTECHNOLOGIE_DRESDEN_GEMEINNTZIGE_GMBH = 43895\nVENDOR_ID_EMERCIT = 43896\nVENDOR_ID_AMPED_WIRELESS = 43897\nVENDOR_ID_HUDSON_CITY_SAVINGS_BANK = 43898\nVENDOR_ID_ATLANTIS_SOFTWARE = 43899\nVENDOR_ID_TERAMATRIX_TECHNOLOGIES_PRIVATE_LIMITED = 43900\nVENDOR_ID_TALISMAN_SINOPEC_ENERGY_UK_LIMITED = 43901\nVENDOR_ID_ENKEL_TECNOLOGIA = 43902\nVENDOR_ID_LIONS_CLUBS_INTERNATIONAL_MULTI_DISTRICT_111_GERMANY = 43903\nVENDOR_ID_BITRONIKLAB = 43904\nVENDOR_ID_MELROK_LLC = 43905\nVENDOR_ID_TEGILE_SYSTEMS_INC = 43906\nVENDOR_ID_CLOUDTHING_LTD = 43907\nVENDOR_ID_HAWKING_TECHNOLOGY_INC = 43908\nVENDOR_ID_ASSOCIATION_PAULLA = 43909\nVENDOR_ID_PRAVALA_INC = 43910\nVENDOR_ID_THUREON_LIMITED = 43911\nVENDOR_ID_FUJI_FURUKAWA_ENGINEERING_CONSTRUCTION_COLTD = 43912\nVENDOR_ID_ZHEJIANG_SCIENCE_ELECTRONIC_TECHNOLOGY_CO_LTD = 43913\nVENDOR_ID_THE_ADMINISTRATIVE_COMMITTEE_OF_JIANGNING_DEVELOPMENT_ZONE = 43914\nVENDOR_ID_WALLACE_KROEKER = 43915\nVENDOR_ID_VAN_LANSCHOT = 43916\nVENDOR_ID_SANTLINK_SAS = 43917\nVENDOR_ID_MARINA_DEL_REY_HOSPITAL = 43918\nVENDOR_ID_NEOTECK_GRUP = 43919\nVENDOR_ID_SHANDONG_CHAOYUE_DIGITAL_CONTROL_ELECTRONICS_CO_LTD = 43920\nVENDOR_ID_CJSC_STC_SIMOS = 43921\nVENDOR_ID_EQURA_HEALTH_TRUST = 43922\nVENDOR_ID_IVAN_LEONARDI = 43923\nVENDOR_ID_STANDARD_TRANSFER_SPECIFICATION_ASSOCIATION = 43924\nVENDOR_ID_EASTWIND = 43925\nVENDOR_ID_CSINET_INC = 43926\nVENDOR_ID_IDME_INC = 43927\nVENDOR_ID_VANTAGE_COMMUNICATIONS = 43928\nVENDOR_ID_WELLERNET = 43929\nVENDOR_ID_RADLINK_COMMUNICATIONS = 43930\nVENDOR_ID_IFB_INSTITUT_FR_BAHNTECHNIK_GMBH = 43931\nVENDOR_ID_BLUWIRELESS_TECHNOLOGY_LIMITED = 43932\nVENDOR_ID_EXPLOROS_INC = 43933\nVENDOR_ID_VRUMAA_KUTSEHARIDUSKESKUS = 43934\nVENDOR_ID_KEEN_IO = 43935\nVENDOR_ID_ZHONG_YUAN_HUA_DIAN = 43936\nVENDOR_ID_TIETO_SIGNALING_SOLUTIONS = 43937\nVENDOR_ID_MEMORABLE_IMAGES = 43938\nVENDOR_ID_INVLID = 43939\nVENDOR_ID_WISAG_DIENSTLEISTUNGSHOLDING_GMBH = 43940\nVENDOR_ID_EVENT_STORE_LLP = 43941\nVENDOR_ID_LUMA_PICTURES = 43942\nVENDOR_ID_VOLTRONIC_POWER_TECHNOLOGY_CORP = 43943\nVENDOR_ID_VOLTRONIC_POWER_TECHNOLOGY_CORP_2 = 43944\nVENDOR_ID_TELENIA_SOFTWARE_SRL = 43945\nVENDOR_ID_VANILLANO = 43946\nVENDOR_ID_LICHTBLICK_SE = 43947\nVENDOR_ID_TAIWAN_INTELLIGENT_HOME = 43948\nVENDOR_ID_ACEYUS_INC = 43949\nVENDOR_ID_NEXXCOM_WIRELESS = 43950\nVENDOR_ID_DENOVO_VENTURES_LLC = 43951\nVENDOR_ID_LRAD_CORPORATION = 43952\nVENDOR_ID_CLOSERLOOK_INC = 43953\nVENDOR_ID_SENO_MEDICAL_INSTRUMENTS_INC = 43954\nVENDOR_ID_RADIOLOGY_ASSOCIATES_LLP = 43955\nVENDOR_ID_TOTAL_RESTYLING_DI_TOLA_ROSA = 43956\nVENDOR_ID_MULTITONE_ELECTRONIC_PLC = 43957\nVENDOR_ID_UNIVERSITY_OF_INNSBRUCK = 43958\nVENDOR_ID_TORRASPAPEL_SA = 43959\nVENDOR_ID_SAF_GMBH = 43960\nVENDOR_ID_OKTAL_SAS = 43961\nVENDOR_ID_UTENA_UNIVERSITY_OF_APPLIED_SCIENCES = 43962\nVENDOR_ID_THRUPUT_LTD = 43963\nVENDOR_ID_SILPAKORN_UNIVERSITY = 43964\nVENDOR_ID_AKRAASDE = 43965\nVENDOR_ID_J4SYSTEMS_SOLUCOES_TECNOLOGICAS_LTDA = 43966\nVENDOR_ID_MANTHORPE_LTD = 43967\nVENDOR_ID_CALIFORNIA_UNIVERSITY_OF_PENNSYLVANIA = 43968\nVENDOR_ID_NIPPON_FIELD_ENGINEERING_COLTD = 43969\nVENDOR_ID_BCHTOLD_MOOR_AG = 43970\nVENDOR_ID_MAP59 = 43971\nVENDOR_ID_DRIVEWORKS_LTD = 43972\nVENDOR_ID_UNIVERSIDAD_NACIONAL_DE_CRDOBA_UNC = 43973\nVENDOR_ID_ELCOMA = 43974\nVENDOR_ID_DAEDAFUSION_LLC = 43975\nVENDOR_ID_UNIVERSITY_OF_THE_PHILIPPINES_CEBU = 43976\nVENDOR_ID_HOMESEND_SCRL = 43977\nVENDOR_ID_IKATA_NETWORKS = 43978\nVENDOR_ID_IMED_ENGINEERING_SRO = 43979\nVENDOR_ID_CERRITOS_COLLEGE = 43980\nVENDOR_ID_PARTNET_INC = 43981\nVENDOR_ID_ANALYTICAL_FLAVOR_SYSTEMS = 43982\nVENDOR_ID_COLIBRI_TECHNOLOGIES_INC = 43983\nVENDOR_ID_MPL_TECHNOLOGY_GROUP = 43984\nVENDOR_ID_WEBINTENSIVE_SOFTWARE = 43985\nVENDOR_ID_PRIVREDNA_BANKA_ZAGREB_D_D = 43986\nVENDOR_ID_ALVA_IT_SOLUTIONS = 43987\nVENDOR_ID_BICHARA_TECNOLOGIA_LTD = 43988\nVENDOR_ID_EEMRA_INC = 43989\nVENDOR_ID_TROPO_INC = 43990\nVENDOR_ID_ELEKTRUM_SARL = 43991\nVENDOR_ID_POWER_ASSURE_INC = 43992\nVENDOR_ID_SECURITY_FIRST_CORP = 43993\nVENDOR_ID_QUANTEMPLATE_TECHNOLOGIES_LIMITED = 43994\nVENDOR_ID_AXENTIA_TECHNOLOGIES_AB = 43995\nVENDOR_ID_BLOOMINGTON_MEDICAL_SERVICES = 43996\nVENDOR_ID_CELLWIZE_WIRELESS_TECHNOLOGIES_PTE_LTD = 43997\nVENDOR_ID_COMPUTERWORK_GMBH = 43998\nVENDOR_ID_AGENCIJA_ZA_KOMERCIJALNU_DJELATNOST_DOO = 43999\nVENDOR_ID_POINTSECURE_TECHNOLOGIES_INC = 44000\nVENDOR_ID_SHENZHEN_ENVICOOL_TECHNOLOGY_CO_LTD = 44001\nVENDOR_ID_GRIDWIZ_INC = 44002\nVENDOR_ID_AUTOGRID_SYSTEMS = 44003\nVENDOR_ID_BYKING_INC = 44004\nVENDOR_ID_WADI_CHADLI = 44005\nVENDOR_ID_XUNLEI_NETWORKING_TECHNOLOGIESLTD = 44006\nVENDOR_ID_INFORMATICA_BANCARIA_TRENTINA = 44007\nVENDOR_ID_SYSTECH = 44008\nVENDOR_ID_WEBPKIORG = 44009\nVENDOR_ID_OADISCORP = 44010\nVENDOR_ID_EMORTGAGE_LOGIC = 44011\nVENDOR_ID_TATA_ADVANCED_SYSTEMS_LIMITED_TASL = 44012\nVENDOR_ID_MPEC_TECHNOLOGY_LTD = 44013\nVENDOR_ID_TYCO_FIRE_INTEGRATED_SOLUTIONS_UK_LTD = 44014\nVENDOR_ID_DATAINFO = 44015\nVENDOR_ID_BAIKAL_ELECTRONICS = 44016\nVENDOR_ID_SMARTGUARD_LLC = 44017\nVENDOR_ID_EXIZTEC = 44018\nVENDOR_ID_MAXIMA_GROUP_UAB = 44019\nVENDOR_ID_ROUTER_NETWORKING_LTD = 44020\nVENDOR_ID_ALLIANCE_RESOURCE_PARTNERS_LP_ARLP = 44021\nVENDOR_ID_ADVANCED_PUBLISHING_TECHNOLOGY = 44022\nVENDOR_ID_KARTHER_INGENIERA = 44023\nVENDOR_ID_CONNECTSOLUTIONS = 44024\nVENDOR_ID_FOOBAR_DEVELOPMENT_LLC = 44025\nVENDOR_ID_SMART4AVIATION_GROUP = 44026\nVENDOR_ID_SHOP_AIRLINES_LTD = 44027\nVENDOR_ID_EXTREME_ACCESSCOM = 44028\nVENDOR_ID_NESTL_OPERATIONAL_SERVICES_WORLDWIDE_SA = 44029\nVENDOR_ID_WOOSHCOM_CORPORATION = 44030\nVENDOR_ID_TRUSTCOR_SYSTEMS_S_DE_RL = 44031\nVENDOR_ID_CLOUD_UTILITY_DISTRICT = 44032\nVENDOR_ID_MOBITECH = 44033\nVENDOR_ID_S_BROKER_AG_CO_KG = 44034\nVENDOR_ID_WOJSKOWE_ZAKLADY_LACZNOSCI_NR_1_SA = 44035\nVENDOR_ID_OPENNETEUROPE = 44036\nVENDOR_ID_DEELNA_BANKA_SLOVENIJE_D_D = 44037\nVENDOR_ID_FILMAKADEMIE_BADEN_WRTTEMBERG_GMBH = 44038\nVENDOR_ID_WIND_MOBILE_SA = 44039\nVENDOR_ID_IEI_INTEGRATION_CORP = 44040\nVENDOR_ID_CONNTRACK_TECHNOLOGIES = 44041\nVENDOR_ID_INSTITUTO_NACIONAL_DE_TECNOLOGIAS_DE_INFORMACAO_E_COMUNICACAO_INTIC = 44042\nVENDOR_ID_BSG_IT_KFT = 44043\nVENDOR_ID_SETCCE = 44044\nVENDOR_ID_DOS_AL_CUBO = 44045\nVENDOR_ID_POK_POWER_OF_KNOWLEDGE = 44046\nVENDOR_ID_SCHREIBER_FOODS_INC = 44047\nVENDOR_ID_INSTYTUT_HODOWLI_I_AKLIMATYZACJI_ROSLIN_PANSTWOWY_INSTYTUT_BADAWCZY = 44048\nVENDOR_ID_CLOUD2GROUND_TECHNOLOGIES_DIV_DIGITAL_MULTIMEDIA_LLC = 44049\nVENDOR_ID_CRYPTOGRAFREE_DAVID_HOYLE = 44050\nVENDOR_ID_SAPPORO_GAKUIN_UNIVERSITY = 44051\nVENDOR_ID_BEIJING_CLOUD_CORE_NETWORK_TECHNOLOGY_CO_LTD = 44052\nVENDOR_ID_ELFTECH_CO_LTD = 44053\nVENDOR_ID_HRMANN_KG_VERKAUFSGESELLSCHAFT = 44054\nVENDOR_ID_IDENTITY_AND_ACCESS_MANAGEMENT_TECHNOLOGIES_IAM_TEC = 44055\nVENDOR_ID_AKTIF_MHENDISLIK = 44056\nVENDOR_ID_PREDATAORG = 44057\nVENDOR_ID_AVALANCHE_CLOUD_CORPORATION = 44058\nVENDOR_ID_SCHOOL_DISTRICT_63_SAANICH = 44059\nVENDOR_ID_IRIDIUM_COMMUNICATIONS_INC = 44060\nVENDOR_ID_TIPPECANOE_COUNTY_GOVERNMENT = 44061\nVENDOR_ID_FLIGHTSTATS_INC = 44062\nVENDOR_ID_ACCESS_CO_LTD_2 = 44063\nVENDOR_ID_QUOBYTE_INC = 44064\nVENDOR_ID_PROGSTAR = 44065\nVENDOR_ID_FACHSCHAFTINFORMATIK_WHS = 44066\nVENDOR_ID_MCSTAS_PROJECT = 44067\nVENDOR_ID_MAJOR_LEAGUE_BASEBALL_ADVANCED_MEDIA = 44068\nVENDOR_ID_GROUPE_CITYPASSENGER_INC = 44069\nVENDOR_ID_IFTER = 44070\nVENDOR_ID_NEW_RELIC_INC = 44071\nVENDOR_ID_LEE_COUNTY_SCHOOLS = 44072\nVENDOR_ID_DATA_PEOPLE_PTY_LTD = 44073\nVENDOR_ID_SERVYOU = 44074\nVENDOR_ID_BEIJING_NAN_BAO_TECHNOLOGY_CO_LTD = 44075\nVENDOR_ID_LANDTAG_VON_BADEN_WRTTEMBERG = 44076\nVENDOR_ID_PST_AG = 44077\nVENDOR_ID_TAIWAN_MOBILE_PAYMENT_CO = 44078\nVENDOR_ID_NPO_SISTEMI_SPA = 44079\nVENDOR_ID_TNTNET = 44080\nVENDOR_ID_UNI_LEADER_INTERNATIONAL_LTD = 44081\nVENDOR_ID_BEIJING_DTLT_TECHNOLOGY_CO_LTD = 44082\nVENDOR_ID_GUILIN_HYGJ_COMMUNICATION_TECHNOLOGY_CO_LTD = 44083\nVENDOR_ID_B_METZLER_SEEL_SOHN_CO_KGAA = 44084\nVENDOR_ID_DISPLAY_QUALITY_EQUIPMENT_SL = 44085\nVENDOR_ID_E_T_A_ELEKTROTECHNISCHE_APPARATE_GMBH = 44086\nVENDOR_ID_HAMMOND_CONSULTING_SERVICES = 44087\nVENDOR_ID_CODESA_GRUPO_EMPRESARIAL_DE_LA_CONSTRUCCIN_SANTIAGO_DE_CUBA_CUBA = 44088\nVENDOR_ID_ABIT_CONSULTING = 44089\nVENDOR_ID_CSG_GLOBAL_LLC = 44090\nVENDOR_ID_AGILION_GMBH = 44091\nVENDOR_ID_SIGEL_GMBH = 44092\nVENDOR_ID_BELL_AMBULANCE_INC = 44093\nVENDOR_ID_ASER_SECURY = 44094\nVENDOR_ID_KAGOSHIMA_UNIVERSITY = 44095\nVENDOR_ID_SHENZHEN_ZHONG_YUAN_TONG_POWER_SUPPLY_TECHNOLOGY_CO_LTD = 44096\nVENDOR_ID_DB_CENTRAL_GMBH = 44097\nVENDOR_ID_PATCHMAN_BV = 44098\nVENDOR_ID_CYBERSEAL_LTD = 44099\nVENDOR_ID_SLASH16 = 44100\nVENDOR_ID_RADISS_SC = 44101\nVENDOR_ID_GRC_ADVISORY_SOLUTIONS = 44102\nVENDOR_ID_AGORA_CON_GMBH = 44103\nVENDOR_ID_GROUPE_ALSATIS = 44104\nVENDOR_ID_BHS_TABLETOP_AG = 44105\nVENDOR_ID_IMSWORKX_INC = 44106\nVENDOR_ID_RIVADA_NETWORKS_LLC = 44107\nVENDOR_ID_TELECOM_ARGENTINA_SA = 44108\nVENDOR_ID_FAA_NATIONAL_AIRSPACE_SYSTEMS = 44109\nVENDOR_ID_NOWA_ERA_SP_Z_OO = 44110\nVENDOR_ID_GUANGZHOU_YOUNGHEAD_ELECTRONIC_TECHNOLOGY_COLTD = 44111\nVENDOR_ID_RABOBANK_INTERNATIONAL = 44112\nVENDOR_ID_VILLEROY_BOCH_AG = 44113\nVENDOR_ID_REALVNC_LTD = 44114\nVENDOR_ID_HEIGHT8_TECHNOLOGIES_PVT_LTD = 44115\nVENDOR_ID_ROSBUSINESSCONSULTING_CJSC = 44116\nVENDOR_ID_CROSS_BORDERS_TRUST_SERVICES_O = 44117\nVENDOR_ID_NOAKES = 44118\nVENDOR_ID_CREIGHTON = 44119\nVENDOR_ID_AVAIRIS_INC = 44120\nVENDOR_ID_HRK_SOFT_GROUP_LTD = 44121\nVENDOR_ID_T17R_MARTIN_TREUSCH_VON_BUTTLAR = 44122\nVENDOR_ID_BUSINESS_INTELLIGENCE_OF_ORIENTAL_NATIONS_CORPORATION_LTD = 44123\nVENDOR_ID_BIT_MEDIA_E_SOLUTIONS_GMBH = 44124\nVENDOR_ID_LANYO_NETWORKS_CO_LTD = 44125\nVENDOR_ID_LOOKHERE_DESIGN = 44126\nVENDOR_ID_BORDERLIGHT_AB = 44127\nVENDOR_ID_MAPGEAR = 44128\nVENDOR_ID_BEIJING_YUNZHENG_TELECOMMUNICATION_TECHNOLOGY_CO_LTD = 44129\nVENDOR_ID_MICHAEL_GHAZI = 44130\nVENDOR_ID_NANJING_DUNLEI_NETWORK_TECHNOLOGY_COLTD = 44131\nVENDOR_ID_OPSVISION_SOLUTIONS = 44132\nVENDOR_ID_COMMERCE_TECHNOLOGIES_INC = 44133\nVENDOR_ID_BLESS_INFORMATION_COMMUNICATION_INC = 44134\nVENDOR_ID_JONKOPING_ENERGI_AB = 44135\nVENDOR_ID_DATA_CONTROLS_INC = 44136\nVENDOR_ID_KAIXIANG = 44137\nVENDOR_ID_NODEFORGE = 44138\nVENDOR_ID_VIZURY_INTERACTIVE_SOLUTIONS_PVT_LTD = 44139\nVENDOR_ID_RAPP_MANAGEMENT_AG = 44140\nVENDOR_ID_ROSBANK = 44141\nVENDOR_ID_EDIDIN_GROUP_INC = 44142\nVENDOR_ID_KAZALO_GMBH = 44143\nVENDOR_ID_SYMBOLIC_IO = 44144\nVENDOR_ID_POKAZZ_SP_Z_OO = 44145\nVENDOR_ID_INSYS_KBARTKOWSKI_PCZEKALA_SPJ = 44146\nVENDOR_ID_DIAGNOSTIC_IMAGING_ASSOCIATES = 44147\nVENDOR_ID_NANJING_TSINGHUA_NOVEL_NETWORK_TECHNOLOGY_COLTD = 44148\nVENDOR_ID_KOUXIANGLONG = 44149\nVENDOR_ID_INTERMARKETING_OY = 44150\nVENDOR_ID_METROVISION = 44151\nVENDOR_ID_KAMBIO_COMPANY = 44152\nVENDOR_ID_DREAMCODE_SAS = 44153\nVENDOR_ID_INFOSTREET_INC = 44154\nVENDOR_ID_SACRED_HEART_HOSPITAL_OF_ALLENTOWN = 44155\nVENDOR_ID_COMPUTER_APPLICATIONS_TECHNICAL_SERVICES = 44156\nVENDOR_ID_STADTVERWALTUNG_DUEBENDORF = 44157\nVENDOR_ID_MEDITERRANEAN_BROADBAND_INFRASTRUCTURE_SRL = 44158\nVENDOR_ID_DK_TECHNOLOGIES = 44159\nVENDOR_ID_CONTRA_COSTA_ONCOLOGY = 44160\nVENDOR_ID_TRI_COUNTY_HEMATOLOGY_ONCOLOGY_ASSOC = 44161\nVENDOR_ID_CHAMPLAIN_VALLEY_HEMATOLOGY_ONCOLOGY_PC = 44162\nVENDOR_ID_UNIVERSITY_OF_SS_CYRIL_AND_METHODIUS_IN_TRNAVA = 44163\nVENDOR_ID_OUTSMART_POWER_SYSTEMS_LLC = 44164\nVENDOR_ID_EDUARDO_MIRANDA_MD = 44165\nVENDOR_ID_ANDREWS_PATEL_ASSOCIATES_PC = 44166\nVENDOR_ID_NORTH_TEXAS_GYNECOLOGIC_ONCOLOGY = 44167\nVENDOR_ID_NETCRAFT_AUSTRALIA_PTY_LTD = 44168\nVENDOR_ID_FIDA_INTERNATIONAL_S_PTE_LTD = 44169\nVENDOR_ID_DECISION_GROUP_INC = 44170\nVENDOR_ID_ROGSIBAL_LLC = 44171\nVENDOR_ID_HANGZHOU_KUAIYUE_MOBILE_TECHNOLOGIES_LTD = 44172\nVENDOR_ID_INPHOSYS_LTD = 44173\nVENDOR_ID_BAPTIST_HEALTH_CANCER_CARE_BLOOD_DISORDERS = 44174\nVENDOR_ID_UROLOGY_CANCER_CENTER = 44175\nVENDOR_ID_SOCIETE_REUNIONNAISE_DU_RADIOTELEPHONE = 44176\nVENDOR_ID_INSTITUTO_DE_HEMATOLOGIA_Y_ONCOLOGIA_MEDICA_SRL = 44177\nVENDOR_ID_CANCER_CLINIC = 44178\nVENDOR_ID_DANIEL_STENSNES = 44179\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_ASSOCIATES_OF_WEST_BROWARD_PA = 44180\nVENDOR_ID_CHITRA_VENKATRAMAN_MD_PA = 44181\nVENDOR_ID_ASSOCIATES_IN_ONCOLOGY_HEMATOLOGY = 44182\nVENDOR_ID_SECURITY_CONFIDENCE_CORPORATION = 44183\nVENDOR_ID_MA_YA_IT_CONSULT_EU = 44184\nVENDOR_ID_HORIZON_MEDICAL_GROUP_INC = 44185\nVENDOR_ID_KEATS_CONNELLY_ASSOCIATES_LLC = 44186\nVENDOR_ID_ZIRTUAL_INC = 44187\nVENDOR_ID_CANCER_CENTER_ONCOLOGY_MEDICAL_GROUP = 44188\nVENDOR_ID_PACIFIC_CANCER_CARE = 44189\nVENDOR_ID_POSTAR = 44190\nVENDOR_ID_CLG_ENTERPRISES = 44191\nVENDOR_ID_REMEGO_LTD = 44192\nVENDOR_ID_BEIJING_DATAX_TECHNOLOGY_CO_LTD = 44193\nVENDOR_ID_ENGENIUS_NETWORKS_INC = 44194\nVENDOR_ID_SOUTHERN_ONCOLOGY_SPECIALISTS_PLLC = 44195\nVENDOR_ID_SECURERF_CORPORATION = 44196\nVENDOR_ID_PIEDMONT_CANCER_INSTITUTE = 44197\nVENDOR_ID_CANCER_AND_HEMATOLOGY_CENTERS_OF_WESTERN_MICHIGAN = 44198\nVENDOR_ID_UNIVERSITY_OF_NEW_SOUTH_WALES = 44199\nVENDOR_ID_MARKIT_LTD = 44200\nVENDOR_ID_MICROMATIONNET = 44201\nVENDOR_ID_AMERICAN_ENERGY_PARTNERS_LP = 44202\nVENDOR_ID_GLOBAL_3R_LTD = 44203\nVENDOR_ID_MEDICAL_ONCOLOGY_ASSOCIATES_OF_LONG_ISLAND_PC = 44204\nVENDOR_ID_BANDRICH_INC = 44205\nVENDOR_ID_FUJITSU_ISOTEC_LIMITED = 44206\nVENDOR_ID_PROXEE_SOLUTIONS = 44207\nVENDOR_ID_TELECOM_PERSONAL_PARAGUAY = 44208\nVENDOR_ID_FSIS_GMBH = 44209\nVENDOR_ID_ROBADEY_NETWORK = 44210\nVENDOR_ID_GGR_COMMUNICATIONS_LTD = 44211\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_CARE_OF_CONNECTICUT_LLC = 44212\nVENDOR_ID_HAPPY_GEARS_INC = 44213\nVENDOR_ID_ERIE_INDEMNITY_COMPANY = 44214\nVENDOR_ID_ARSSLENSOFT = 44215\nVENDOR_ID_FUYOH_VIDEO_INDUSTRY_COLTD = 44216\nVENDOR_ID_FIBERROAD = 44217\nVENDOR_ID_BUFFALO_BOOTS_GMBH = 44218\nVENDOR_ID_BEIJING_RAYTIGHT_TECHNOLOGIES_CO = 44219\nVENDOR_ID_NETZIN_TECHNOLOGY_CORPORATIONLTD = 44220\nVENDOR_ID_PRIMARY_ONCOLOGY_NETWORK_PLLC = 44221\nVENDOR_ID_FOX_VALLEY_HEMATOLOGY_ONCOLOGY_ILLINOIS_CANCER_SPECIALISTS = 44222\nVENDOR_ID_GE_AVIC_CIVIL_AVIONICS_SYSTEMS_COMPANY_LIMITED = 44223\nVENDOR_ID_MATTHEW_TAUB_MD_PA = 44224\nVENDOR_ID_MRYASSINE_HAMRAOUI = 44225\nVENDOR_ID_SONORAN_HEMATOLOGY_ONCOLOGY = 44226\nVENDOR_ID_PULSE_SECURE = 44227\nVENDOR_ID_PORT_GMBH = 44228\nVENDOR_ID_WANCO_INC = 44229\nVENDOR_ID_BUNDESAMT_FR_SEESCHIFFFAHRT_UND_HYDROGRAPHIE = 44230\nVENDOR_ID_QUEENS_MEDICAL_ASSOCIATES_PC = 44231\nVENDOR_ID_ING_BRO_MANN = 44232\nVENDOR_ID_BALLUFF_GMBH = 44233\nVENDOR_ID_VIT_SA = 44234\nVENDOR_ID_OSPERO_PTY_LTD = 44235\nVENDOR_ID_COMPASSIONATE_ONCOLOGY_MEDICAL_GROUP = 44236\nVENDOR_ID_ALLEGRO_PACKETS_GMBH = 44237\nVENDOR_ID_ESENSE_EMBEDED = 44238\nVENDOR_ID_CENTRO_DE_CANCER_DE_LA_MUJER_DE_PUERTO_RICO = 44239\nVENDOR_ID_ROCKET_INTERNET_AG = 44240\nVENDOR_ID_LOTUSCOM_INC = 44241\nVENDOR_ID_RADOMIR_LLC = 44242\nVENDOR_ID_NSTEK_INC = 44243\nVENDOR_ID_GARDENS_REGIONAL_HOSPITAL_AND_MEDICAL_CENTER_INC = 44244\nVENDOR_ID_FAZION_SISTEMAS_LTDA = 44245\nVENDOR_ID_ST_LOUIS_CANCER_CARE_LLC = 44246\nVENDOR_ID_CLEAR_SRL = 44247\nVENDOR_ID_SIMULA_RESEARCH_LABORATORY = 44248\nVENDOR_ID_FLORIDA_CANCER_SPECIALISTS_RESEARCH_INSTITUTE = 44249\nVENDOR_ID_COASTAL_INTEGRATIVE_CANCER_CARE = 44250\nVENDOR_ID_IMT_SERVICES_CORP = 44251\nVENDOR_ID_ICEOTOPE = 44252\nVENDOR_ID_HANKYUNG_I_NET = 44253\nVENDOR_ID_LUCKYBULLDOZER = 44254\nVENDOR_ID_MEDICAL_ONCOLOGY_ASSOCIATES_OF_SAN_DIEGO = 44255\nVENDOR_ID_KOOTENAI_CANCER_CENTER = 44256\nVENDOR_ID_TERAOKA_WEIGH_SYSTEM_PTE_LTD = 44257\nVENDOR_ID_HELLO_WORLD_LTD = 44258\nVENDOR_ID_XSTREAM_FLOW_PTY_LTD = 44259\nVENDOR_ID_BALLY_WULFF_GAMES_ENTERTAINMENT_GMBH = 44260\nVENDOR_ID_CARBOGEN_AMCIS_AG = 44261\nVENDOR_ID_BJS_WHOLESALE_CLUB = 44262\nVENDOR_ID_CANCER_CENTER_OF_SARASOTA_MANATEE = 44263\nVENDOR_ID_SURFCREW_INC = 44264\nVENDOR_ID_GROTEX_OOO = 44265\nVENDOR_ID_LUNA_78_LLC = 44266\nVENDOR_ID_HEMATOLOGY_ONCOLOGY_ASSOCIATES_OF_ALABAMA_LLC = 44267\nVENDOR_ID_DYNASCAN_TECHNOLOGY_INC = 44268\nVENDOR_ID_BEAMLY = 44269\nVENDOR_ID_BARNARDSOFT_CO_LTD = 44270\nVENDOR_ID_NUAGE_NETWORKS = 44271\nVENDOR_ID_PRO_PFLEGEBERATUNG = 44272\nVENDOR_ID_GERNERT_NET = 44273\nVENDOR_ID_TRIT_NETWORKS_LLC = 44274\nVENDOR_ID_ILLUMIO_INC = 44275\nVENDOR_ID_TANABIKI_INC = 44276\nVENDOR_ID_MIKE_TENNANT = 44277\nVENDOR_ID_SHANGHAI_REALCOM_COMMUNICATION_TECHNOLOGY_COLTD = 44278\nVENDOR_ID_ZHEJIANG_UNIVERSITY_PRESS = 44279\nVENDOR_ID_F_E_T_ELETTRONICA_SNC = 44280\nVENDOR_ID_BLOOD_MARROW_TRANSPLANT_GROUP_OF_GEORGIA = 44281\nVENDOR_ID_MICROWARE_COMPUTING_CONSULTING_PVT_LTD = 44282\nVENDOR_ID_APPNOVATION_TECHNOLOGIES_INC = 44283\nVENDOR_ID_TIME4_SYSTEMS_LTD = 44284\nVENDOR_ID_NEW_ENGLAND_CANCER_SPECIALISTS = 44285\nVENDOR_ID_WORKING_DISTRIBUTORS_INC = 44286\nVENDOR_ID_JCONCEPT_OPEN_SOLUTIONS = 44287\nVENDOR_ID_GREATY = 44288\nVENDOR_ID_BEIJING_CYBER_GREATWALL_INFORMATION_TECHNOLOGY_CO_LTD = 44289\nVENDOR_ID_SAJEEV_ANAND_MD_LLC = 44290\nVENDOR_ID_NEW_LONDON_CANCER_CENTER = 44291\nVENDOR_ID_EMPLUS_NETWORKS_INC = 44292\nVENDOR_ID_UNWIRED_NETWORKS_GMBH = 44293\nVENDOR_ID_QUANTA_COMPUTING = 44294\nVENDOR_ID_SSE_STUELLEIN_SOFTWARE_ENGINEERING = 44295\nVENDOR_ID_HELMETHUB = 44296\nVENDOR_ID_ALLIANCE_CANCER_SPECIALISTS_PC = 44297\nVENDOR_ID_COGVIS_GMBH = 44298\nVENDOR_ID_IM_DAUNTLESS = 44299\nVENDOR_ID_CYBER1ST_RD_LTD = 44300\nVENDOR_ID_ALEXANDER_MAIER_GMBH = 44301\nVENDOR_ID_CLEARVIEW_CANCER_INSTITUTE = 44302\nVENDOR_ID_NETZ_AG_EMIL_FIGGESTRAE_15_39 = 44303\nVENDOR_ID_HEMATOLOGY_ONCOLOGY_LIFE_CENTER_LLC = 44304\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_ASSOCIATES_OF_SPRINGFIELD_MD_PC = 44305\nVENDOR_ID_CAROLINA_ONCOLOGY_ASSOCIATES_PA = 44306\nVENDOR_ID_LP_TECHNOLOGIES_INC = 44307\nVENDOR_ID_CENTRIPETAL_NETWORKS_INC = 44308\nVENDOR_ID_CENTER_FOR_CANCER_CARE = 44309\nVENDOR_ID_SITESPECT_INC = 44310\nVENDOR_ID_BUDAPESTI_FAZEKAS_MIHALY_GYAKORLO_ALTALANOS_ISKOLA_ES_GIMNAZIUM = 44311\nVENDOR_ID_AMUNDSON_PARTNERS_INC = 44312\nVENDOR_ID_JOHAN_GRIP_OGUNORG = 44313\nVENDOR_ID_DEMOCRITUS_UNIVERSITY_OF_THRACE = 44314\nVENDOR_ID_GUIDO_DI_FAZIO = 44315\nVENDOR_ID_SOFTNETA_UAB = 44316\nVENDOR_ID_KANTON_ZUG_WWWZGCH = 44317\nVENDOR_ID_PT_TELEKOMUNIKASI_INDONESIA = 44318\nVENDOR_ID_TULSA_CANCER_INSTITUTE_PLLC = 44319\nVENDOR_ID_LAKE_NORMAN_HEMATOLOGY_ONCOLOGY = 44320\nVENDOR_ID_TRILIODATA_INC = 44321\nVENDOR_ID_SHENZHEN_MAILIAN_ELECTRONICS_COLTD = 44322\nVENDOR_ID_SMARTRG_INC = 44323\nVENDOR_ID_ESTINET_TECHNOLOGIES_INC = 44324\nVENDOR_ID_TANGOME_INC = 44325\nVENDOR_ID_KWARTZLAB_MAKERSPACE = 44326\nVENDOR_ID_ARDEXA_PTY_LTD = 44327\nVENDOR_ID_TMON = 44328\nVENDOR_ID_ELEKTRONIK_ART = 44329\nVENDOR_ID_XENETA_AS = 44330\nVENDOR_ID_ZHAW_ZRCHER_HOCHSCHULE_FR_ANGEWANDTE_WISSENSCHAFTEN = 44331\nVENDOR_ID_WALLARM_INC = 44332\nVENDOR_ID_ARTDECODEDE = 44333\nVENDOR_ID_SAINT_VINCENT_PHYSICIAN_SERVICES_INC = 44334\nVENDOR_ID_WAVERULES_LLC = 44335\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_ASSOCIATES_OF_SAGINAW_VALLEY_PC = 44336\nVENDOR_ID_ONCOLOGY_ASSOCIATES_OF_MONROE = 44337\nVENDOR_ID_LOW_COUNTRY_CANCER_CARE_ASSOCIATES_PC = 44338\nVENDOR_ID_LOW_COUNTRY_CANCER_CARE_ASSOCIATES_PC_2 = 44339\nVENDOR_ID_MID_ILLINOIS_HEMATOLOGY_ONCOLOGY_ASSOCIATES_LTD = 44340\nVENDOR_ID_GREATCALL_INC = 44341\nVENDOR_ID_REGIONAL_CANCER_CARE_ASSOCIATES_LLC = 44342\nVENDOR_ID_JACKSON_ONCOLOGY_ASSOCIATES_PLLC = 44343\nVENDOR_ID_CANCER_CENTER_ASSOCIATES = 44344\nVENDOR_ID_LLC_SINTEK = 44345\nVENDOR_ID_JSC_PROMSTROIKONTRAKT = 44346\nVENDOR_ID_IK_SATPROF_LLC = 44347\nVENDOR_ID_NIL_KSA = 44348\nVENDOR_ID_HIGHLAND_CLINIC_APMC = 44349\nVENDOR_ID_CANCER_CARE_CENTERS_OF_BREVARD = 44350\nVENDOR_ID_GREGLEARNS_GREG_EDWARDS = 44351\nVENDOR_ID_NORTH_SHORE_HEMATOLOGY_ONCOLOGY_ASSOCIATES_PC = 44352\nVENDOR_ID_CANCER_CENTER_OF_CENTRAL_CONNECTICUT_LLC = 44353\nVENDOR_ID_GRACE_HEMATOLOGY_AND_ONCOLOGY = 44354\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_ASSOCIATES_OF_NORTHERN_PA_PC = 44355\nVENDOR_ID_TRUST_MEDICAL_AND_ONCOLOGY_CENTER = 44356\nVENDOR_ID_BIRCHBOX_INC = 44357\nVENDOR_ID_NASHAT_Y_GABRAIL_MD_INC = 44358\nVENDOR_ID_FREDERICK_P_SMITH_MD_PC = 44359\nVENDOR_ID_EAST_SIDE_ONCOLOGY_ASSOCIATES_PLLC = 44360\nVENDOR_ID_DABAS_CANCER_INSTITUTE_PA = 44361\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_UBERLANDIA = 44362\nVENDOR_ID_CLOUDFLARE = 44363\nVENDOR_ID_AVEA = 44364\nVENDOR_ID_DR_CHRISTOPHER_T_SOPRENUK_MD_PA = 44365\nVENDOR_ID_ESSEX_ONCOLOGY_OF_NORTH_JERSEY_PA = 44366\nVENDOR_ID_HIGHLAND_SOLUTIONS = 44367\nVENDOR_ID_UNMUKTI_TECHNOLOGY_PRIVATE_LIMITED = 44368\nVENDOR_ID_NEOTERRA_SYSTEMS_INC = 44369\nVENDOR_ID_UTELISYS_COMMUNICATIONS_BV = 44370\nVENDOR_ID_JAY_STEEL = 44371\nVENDOR_ID_VALLEY_MEDICAL_ONCOLOGY_CONSULTANTS_A_MEDICAL_GROUP_A_PROFESSIONAL_CORP = 44372\nVENDOR_ID_REGIONAL_CANCER_CARE_ASSOCIATES_CENTRAL_JERSEY_DIVISION = 44373\nVENDOR_ID_NEW_ENGLAND_HEMATOLOGY_ONCOLOGY_ASSOCIATESD = 44374\nVENDOR_ID_EASTERN_LONG_ISLAND_HEMATOLOGY_ONCOLOGY = 44375\nVENDOR_ID_OPUS_ONE_WINERY_LLC = 44376\nVENDOR_ID_HUDSON_HEMATOLOGY_ONCOLOGY = 44377\nVENDOR_ID_STEPHAN_GOGLER = 44378\nVENDOR_ID_MEANWAVE_GMBH = 44379\nVENDOR_ID_DESERT_HEMATOLOGY_ONCOLOGY_MEDICAL_GROUP_INC = 44380\nVENDOR_ID_MEDICAL_ONCOLOGY_ASSOCIATES_PS = 44381\nVENDOR_ID_INTEC_PACIFIC_PTY_LTD = 44382\nVENDOR_ID_ASCENT_COLTD = 44383\nVENDOR_ID_HARBOUR_IT_PTY_LTD = 44384\nVENDOR_ID_BONSONINFO_SYSTEM_COLTD = 44385\nVENDOR_ID_3_GEN_DOO = 44386\nVENDOR_ID_CONWAY_HEMATOLOGY_ONCOLOGY = 44387\nVENDOR_ID_MEDICAL_AND_SURGICAL_CLINIC_OF_IRVING = 44388\nVENDOR_ID_MAX_PLANCK_INSTITUTE_FOR_METABOLISM_RESEARCH = 44389\nVENDOR_ID_SKOOTRCOM = 44390\nVENDOR_ID_POLYTECHNIC_WEST = 44391\nVENDOR_ID_XPERTERRA = 44392\nVENDOR_ID_PINELLAS_HEMATOLOGY_ONCOLOGY_PA = 44393\nVENDOR_ID_PROVINCE_NORD_NOUVELLE_CALDONIE = 44394\nVENDOR_ID_PIERRE_DECAZES = 44395\nVENDOR_ID_HILBERLING_GMBH = 44396\nVENDOR_ID_OTP_BANK_PLC = 44397\nVENDOR_ID_SAITEL_TELECOMUNICAZIONI_SRL = 44398\nVENDOR_ID_MASGALOR = 44399\nVENDOR_ID_EAGLE_INVESTMENT_SYSTEMS_LLC = 44400\nVENDOR_ID_MEETING_HOUSE_LANE_MEDICAL_PRACTICE_PC = 44401\nVENDOR_ID_SINGH_ARORA_ONCOLOGY_HEMATOLOGY_PC = 44402\nVENDOR_ID_STUART_ONCOLOGY_ASSOCIATES = 44403\nVENDOR_ID_CLIMATE_CONTROL_NN_LTD = 44404\nVENDOR_ID_SHENZHEN_WINTOP_PHOTOELECTRIC_TECHNOLOGY_CO_LTD = 44405\nVENDOR_ID_SMT_SA = 44406\nVENDOR_ID_VIDDER_INC = 44407\nVENDOR_ID_VENTUS_TECHNOLOGIES_SL = 44408\nVENDOR_ID_OSNA_RESEARCH = 44409\nVENDOR_ID_VERSILIS_INC = 44410\nVENDOR_ID_UNIVERSIDAD_MARIANO_GLVEZ_DE_GUATEMALA = 44411\nVENDOR_ID_MARKUS_FROEHLICH = 44412\nVENDOR_ID_STUDIEVERENIGING_A_ESKWADRAAT = 44413\nVENDOR_ID_ALDAZAR_LLC = 44414\nVENDOR_ID_MIKEJI_DOO = 44415\nVENDOR_ID_CHINA_ELECTRONICS_TECHNOLOGY_GROUP_CORPORATION_NO7_RESEARCH_INSTITUTE = 44416\nVENDOR_ID_LAZY_MOUNTAIN_COMPUTERS = 44417\nVENDOR_ID_SHENZHEN_HAIPENGXIN_ELECTRONICS_CO_LTD = 44418\nVENDOR_ID_SOUTH_COUNTY_HEMATOLOGY_ONCOLOGY = 44419\nVENDOR_ID_FAIRFAX_MEDIA = 44420\nVENDOR_ID_SHEN_ZHEN_HUAPTEC_COLTD = 44421\nVENDOR_ID_CLOUDGATE_SYSTEMS_INDIA_PVT_LTD = 44422\nVENDOR_ID_FREDERICK_G_BARR_MD = 44423\nVENDOR_ID_NELSON_GN_KALIL_MD_PC = 44424\nVENDOR_ID_GOLDENTECH_SA = 44425\nVENDOR_ID_EK_SOFT_GMBH = 44426\nVENDOR_ID_HILLS_ROAD_SIXTH_FORM_COLLEGE = 44427\nVENDOR_ID_ZAO_SEVERO_ZAPAD = 44428\nVENDOR_ID_GREAT_LAKES_CANCER_MANAGEMENT_SPECIALISTS = 44429\nVENDOR_ID_AGF_MANAGEMENT_LIMITED = 44430\nVENDOR_ID_PANHANDLE_CANCER_CENTER = 44431\nVENDOR_ID_CANDEAL = 44432\nVENDOR_ID_TRI_TECH_MANUFACTURING_INC = 44433\nVENDOR_ID_JUNTA_DE_COMUNIDADES_DE_CASTILLA_LA_MANCHA = 44434\nVENDOR_ID_STAATLICHES_BERUFSSCHULZENTRUM_HERMSDORF = 44435\nVENDOR_ID_IDENTKEY_SICHERHEITSVERBUND_ITHAMAR_GARBE = 44436\nVENDOR_ID_COMMBOX_PTY_LTD = 44437\nVENDOR_ID_THOMAS_A_YORK = 44438\nVENDOR_ID_FOP_KAGARLICKIJ_DV = 44439\nVENDOR_ID_INFUSION_ASSOCIATES_PC = 44440\nVENDOR_ID_RADFORD_UNIVERSITY = 44441\nVENDOR_ID_ISYSBUS = 44442\nVENDOR_ID_STELO_COMPANHIA_BRASILEIRA_DE_PAG_ELETR = 44443\nVENDOR_ID_IWELCOME_BV = 44444\nVENDOR_ID_CORRADO_MULAS_ENTERPRISE_ROOT_CA = 44445\nVENDOR_ID_GOVCOMM_INC = 44446\nVENDOR_ID_FAIRCHILD_MEDICAL_CENTER = 44447\nVENDOR_ID_APICA = 44448\nVENDOR_ID_XIAMEN_UNIVERSITY = 44449\nVENDOR_ID_SYNAPSYS_SOLUTIONS_LTD = 44450\nVENDOR_ID_SCHESSNER_IT_CONSULTING = 44451\nVENDOR_ID_EVGENY_ARTEMYEV_XART = 44452\nVENDOR_ID_ARIZONA_ONCOLOGY_SAGUARO_CANCER_CENTER = 44453\nVENDOR_ID_GLOBALSTAR_INC = 44454\nVENDOR_ID_CHINA_HUALU_GROUP_CO_LTD = 44455\nVENDOR_ID_TUXWAVENET = 44456\nVENDOR_ID_BIAMP_SYSTEMS = 44457\nVENDOR_ID_IT_WATANA_COMPANY = 44458\nVENDOR_ID_BLUEPUNKT_NETWORKS_INC = 44459\nVENDOR_ID_ALUMINA_ELIT_2003_LTD = 44460\nVENDOR_ID_RAINUS = 44461\nVENDOR_ID_K2E = 44462\nVENDOR_ID_BTS_TECH_SRL = 44463\nVENDOR_ID_EDGEGUIDE_AB = 44464\nVENDOR_ID_CATALEYA_PTE_LTD = 44465\nVENDOR_ID_FOP_TUMAKHA_YURIY_VOLODYMYROVYCH = 44466\nVENDOR_ID_SIGMACOM_BROADCAST = 44467\nVENDOR_ID_STREAMLINE_LDA = 44468\nVENDOR_ID_ARPA2 = 44469\nVENDOR_ID_INTERMEDIATE_ENGINEERING_GMBH = 44470\nVENDOR_ID_KRYPTOS_SECURITY = 44471\nVENDOR_ID_BAMBR_INFORMATION_INC = 44472\nVENDOR_ID_CSTX_GMBH = 44473\nVENDOR_ID_MURATA_MANUFACTURING_COLTD = 44474\nVENDOR_ID_INITAT_INFORMATIONSTECHNOLOGIE_GMBH = 44475\nVENDOR_ID_MIDDLESEX_ONCOLOGY = 44476\nVENDOR_ID_WASHINGTON_METROPOLITAN_AREA_TRANSIT_AUTHORITY = 44477\nVENDOR_ID_BIN_CONTROL_GMBH = 44478\nVENDOR_ID_GIKOS_NETWORKS = 44479\nVENDOR_ID_BEIJING_LIUHE_INTELLIGENCE_TECHNOLOGY_LTD = 44480\nVENDOR_ID_CENTRALERT = 44481\nVENDOR_ID_ONCARE_HAWAII_HEMATOLOGY_ONCOLOGY = 44482\nVENDOR_ID_LOS_ANGELES_CANCER_NETWORK = 44483\nVENDOR_ID_YIXUN_TECHNOLOGY_CO_LTD = 44484\nVENDOR_ID_WIBU_SYSTEMS_AG = 44485\nVENDOR_ID_DIABOLOCOM = 44486\nVENDOR_ID_INEOS_MANUFACTURING_KOELN_GMBH = 44487\nVENDOR_ID_REICHLE_DE_MASSARI_AG = 44488\nVENDOR_ID_POSSYBILITY = 44489\nVENDOR_ID_BEWARD_RD_CO_LTD = 44490\nVENDOR_ID_CHERRY_CREEK_MORTGAGE_CO_INC = 44491\nVENDOR_ID_MEDIAHOUND_INC = 44492\nVENDOR_ID_STARMON_SRO = 44493\nVENDOR_ID_TRUSTASIA_TECHNOLOGIES_INC = 44494\nVENDOR_ID_PAIO_COLTD = 44495\nVENDOR_ID_BENDER_GMBH_CO_KG = 44496\nVENDOR_ID_CHINA_AERONAUTICAL_RADIO_ELECTRONICS_RESEARCH_INSTITUTE = 44497\nVENDOR_ID_IT_SOLUTIONS_ROLAND_BREITSCHAFT = 44498\nVENDOR_ID_BLOOD_AND_CANCER_CENTER_OF_EAST_TEXAS = 44499\nVENDOR_ID_CHRONOTRACK_SYSTEMS_CORP = 44500\nVENDOR_ID_NULEDS_INC = 44501\nVENDOR_ID_SMARTCAST_GMBH = 44502\nVENDOR_ID_MDLIVE_INC = 44503\nVENDOR_ID_EVILCATS_ORGANIZATION = 44504\nVENDOR_ID_IDEUM_GROUP_INC = 44505\nVENDOR_ID_CONSULTA_NETWORK_SECURITY_AB = 44506\nVENDOR_ID_NORTHWEST_ALABAMA_CANCER_CENTER_PC = 44507\nVENDOR_ID_VIGILANT_APPLICATIONS_LIMITED = 44508\nVENDOR_ID_COMPTEK = 44509\nVENDOR_ID_FJ_CONSULTANT = 44510\nVENDOR_ID_RUDOLF_WILD_GMBH_CO_KG = 44511\nVENDOR_ID_IPTRONIX_SRL = 44512\nVENDOR_ID_ESSENER_VERSORGUNGS_UND_VERKEHRSGESELLSCHAFT_MBH_EVV = 44513\nVENDOR_ID_BREMERSEEORG = 44514\nVENDOR_ID_GRIESSON_DE_BEUKELAER_GMBH_CO_KG = 44515\nVENDOR_ID_ETES_GMBH = 44516\nVENDOR_ID_VIRGIL_GRIGORAS = 44517\nVENDOR_ID_EUROSELL_SPA = 44518\nVENDOR_ID_US_RAILROAD_RETIREMENT_BOARD = 44519\nVENDOR_ID_CONSOLIDATED_INFORMATION_SYSTEMS = 44520\nVENDOR_ID_WUNDERVOLL_NETWORKS = 44521\nVENDOR_ID_INFORMATION_TECHNOLOGY_SOLUTIONS_LABORATORY = 44522\nVENDOR_ID_NETBEEZ = 44523\nVENDOR_ID_RESEARCH_DEVELOPMENT_CENTER_VULKAN_LLC = 44524\nVENDOR_ID_BREAST_SURGERY_OF_TULSA = 44525\nVENDOR_ID_CARTA_SOLUTIONS_PROCESSING_SERVICES_CORP = 44526\nVENDOR_ID_MARCO_DOMINGUEZ = 44527\nVENDOR_ID_URIEL_TECHNOLOGIES = 44528\nVENDOR_ID_ONE_CALL_CARE_MANAGEMENT = 44529\nVENDOR_ID_ALPHAPOWER_LTD = 44530\nVENDOR_ID_RENFELL_ENGINEERING_PTY_LTD = 44531\nVENDOR_ID_SAGE_ELECTRONIC_ENGINEERING_LLC = 44532\nVENDOR_ID_DIGITAL_BARRIERS = 44533\nVENDOR_ID_WEYBOURNE_PARTNERS_LLP = 44534\nVENDOR_ID_TSAT_AS = 44535\nVENDOR_ID_TRUE_PARTNERS_CONSULTING_LLC = 44536\nVENDOR_ID_ELAUWIT_NETWORKS_LLC = 44537\nVENDOR_ID_PROVIDIUS_CORP = 44538\nVENDOR_ID_SAFE_PATIENT_SYSTEMS_LTD = 44539\nVENDOR_ID_BOND_ENTERPRISES = 44540\nVENDOR_ID_FEITIAN_UNITED_BEIJING_SYSTEM_TECHNOLOGY_COLTD = 44541\nVENDOR_ID_VDS_SCHADENVERHTUNG_GMBH = 44542\nVENDOR_ID_VIESTI_NETWORKS_OY = 44543\nVENDOR_ID_SANEF_ITS = 44544\nVENDOR_ID_K_LAGAN_ESPAA_SL = 44545\nVENDOR_ID_HARP_VISUAL_COMMUNICATIONS_LTD = 44546\nVENDOR_ID_YMOR_GROUP_BV = 44547\nVENDOR_ID_CENTRALE_ASHTON_INC = 44548\nVENDOR_ID_ELECTRIS = 44549\nVENDOR_ID_AVATURE_USA_LLC = 44550\nVENDOR_ID_NETCREDIT_GROUP = 44551\nVENDOR_ID_NIGHT_CORPORATION = 44552\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_OF_LOUDOUN_AND_RESTON = 44553\nVENDOR_ID_PRIMEVATION_LTD = 44554\nVENDOR_ID_CICS_AB = 44555\nVENDOR_ID_UNIVERSITAS_AL_AZHAR_INDONESIA = 44556\nVENDOR_ID_WORNET_AG = 44557\nVENDOR_ID_DERIXX_GMBH = 44558\nVENDOR_ID_TRIBUNAL_REGIONAL_DO_TRABALHO_DA_13A_REGIAO = 44559\nVENDOR_ID_INTERNATIONAL_BLACK_SEA_UNIVERSITY = 44560\nVENDOR_ID_ALACHUA_COUNTY_LIBRARY_DISTRICT = 44561\nVENDOR_ID_AIXTOOLS_MICHAEL_FELT = 44562\nVENDOR_ID_IRKUTSK_DIAGNOSTIC_CENTRE = 44563\nVENDOR_ID_CJSC_ENERGOMERA = 44564\nVENDOR_ID_LECKERBEEFDE = 44565\nVENDOR_ID_OOO_KOMANDOR_HOLDING = 44566\nVENDOR_ID_AGENCJA_ROZWOJU_PRZEMYSLU_SA = 44567\nVENDOR_ID_NEWNET_MARKETING_FORMERLY_TOPIK_BUSINESS_SERVICES_GMBH = 44568\nVENDOR_ID_REGIONAL_NETWORKS_LTD = 44569\nVENDOR_ID_LANCASTER_CANCER_CENTER = 44570\nVENDOR_ID_SOLINEA_INC = 44571\nVENDOR_ID_ABINGTON_HEMATOLOGY_ONCOLOGY_ASSOCIATES = 44572\nVENDOR_ID_MGI1 = 44573\nVENDOR_ID_JILIN_YUXIN_TECHNOLOGY_CO_LTD = 44574\nVENDOR_ID_3S_POCKETNET = 44575\nVENDOR_ID_PERNOD_RICARD = 44576\nVENDOR_ID_PROXION_SOLUTIONS_OY = 44577\nVENDOR_ID_SPECTRA_ENGINEERING_PTY_LTD = 44578\nVENDOR_ID_SONNENBURG_ELECTRONIC_AG = 44579\nVENDOR_ID_JOHANN_SPERBER_GMBH_CO_KG = 44580\nVENDOR_ID_REGIONAL_HEMATOLOGY_ONCOLOGY_ASSOCIATESPC = 44581\nVENDOR_ID_INVERSION_SOFTWARE_O = 44582\nVENDOR_ID_OBICIS_LTD = 44583\nVENDOR_ID_JUMPCLOUD_INC = 44584\nVENDOR_ID_SERVATO_CORP = 44585\nVENDOR_ID_COMMDEV_LLC = 44586\nVENDOR_ID_INMECHASOL = 44587\nVENDOR_ID_KRYPTUS_INFORMATION_SECURITY_LTD = 44588\nVENDOR_ID_BECKER_IKTDE_JOCHEN_BECKER = 44589\nVENDOR_ID_KEVIN_NIEHAGE = 44590\nVENDOR_ID_MORGAN_HUNT_LTD = 44591\nVENDOR_ID_FININVEST_SP_Z_OO = 44592\nVENDOR_ID_JAN_BTK_DOL_SVIN = 44593\nVENDOR_ID_YOKOGAWA_DIGITAL_COMPUTER_CORPORATION = 44594\nVENDOR_ID_INDIGO_CONSULTING_GMBH = 44595\nVENDOR_ID_DILO_ARMATUREN_UND_ANLAGEN_GMBH = 44596\nVENDOR_ID_BIGBOARDS = 44597\nVENDOR_ID_GOSFORD_IT = 44598\nVENDOR_ID_VUZIX_CORPORATION = 44599\nVENDOR_ID_E_PAPER_LTD = 44600\nVENDOR_ID_SUNWARE_SRO = 44601\nVENDOR_ID_SYSTEMS_MECHANICS_LTD = 44602\nVENDOR_ID_U_FORM_TESTSYSTEME_GMBH_CO_KG = 44603\nVENDOR_ID_BEIJING_JINHONG_XI_DIAN_INFORMATION_TECHNOLOGY_CORP = 44604\nVENDOR_ID_LIGHTHOUSE_IVM_GMBH = 44605\nVENDOR_ID_SIRAYA_NETWORKS_CO_LTD = 44606\nVENDOR_ID_GREENFIELD_SOFTWARE_PRIVATE_LIMITED = 44607\nVENDOR_ID_NET_AT_WORK_NETZWERKSYSTEME_GMBH = 44608\nVENDOR_ID_PRONIX_SRO = 44609\nVENDOR_ID_ELVIS_TELECOM_JSC = 44610\nVENDOR_ID_DUMEEFR = 44611\nVENDOR_ID_BEIJING_TONLIER_ENERGY_TECHNOLOGY_CO_LTD = 44612\nVENDOR_ID_SUNKAISENSBEIJING_TECHNOLOGY_COLTD = 44613\nVENDOR_ID_LINGUALEO_LLC = 44614\nVENDOR_ID_BLUEHOUSE_TECHNOLOGY_LTD = 44615\nVENDOR_ID_UNIVERSITY_TRANSILVANIA_OF_BRASOV = 44616\nVENDOR_ID_GLOBTECH_SPOL_S_RO = 44617\nVENDOR_ID_PHILTER_LLC = 44618\nVENDOR_ID_ZIFTEN_TECHNOLOGIES = 44619\nVENDOR_ID_INTEGRATED_SERVICE_COMPANY_LLC = 44620\nVENDOR_ID_OLEARY_COMPUTERS_INC = 44621\nVENDOR_ID_INSTITUTO_COLEGIO_DE_TODOS_LOS_SANTOS = 44622\nVENDOR_ID_IOMNIS_SURVEILLANCE_SOLUTIONS = 44623\nVENDOR_ID_BLOOD_CANCER_CENTER_OHIO = 44624\nVENDOR_ID_ELECTRE = 44625\nVENDOR_ID_CAPTIVENET = 44626\nVENDOR_ID_NATIONAL_INSTRUMENTS_CORPORATION = 44627\nVENDOR_ID_CANVA_INC = 44628\nVENDOR_ID_AUSTRALIAN_DEPARTMENT_OF_INFRASTRUCTURE_AND_REGIONAL_DEVELOPMENT = 44629\nVENDOR_ID_JSC_PLATRON = 44630\nVENDOR_ID_TECHFU_PTY_LTD = 44631\nVENDOR_ID_EBLINK_SA = 44632\nVENDOR_ID_SQUIRE_TECHNOLOGIES = 44633\nVENDOR_ID_MARKENTIER_CHRISTOPH_GRABO = 44634\nVENDOR_ID_DEGEETIA_O = 44635\nVENDOR_ID_NEWCASHEL_INC = 44636\nVENDOR_ID_CBI_FEDERAL_SERVICES = 44637\nVENDOR_ID_ONEDC = 44638\nVENDOR_ID_HERMES_EUROPE_GMBH = 44639\nVENDOR_ID_UPDATELOGIC_INC = 44640\nVENDOR_ID_VYOS = 44641\nVENDOR_ID_NATIONAL_KNOWLEDGE_NETWORK = 44642\nVENDOR_ID_FUJIKURA_AUTOMOTIVE_EUROPE_SA = 44643\nVENDOR_ID_VOPIUM_A_S = 44644\nVENDOR_ID_INFRABEL_NV = 44645\nVENDOR_ID_EMKO_ELEKTRONIK_SANAYI_VE_TICARET_A = 44646\nVENDOR_ID_ARGUS_DER_PRESSE_AG = 44647\nVENDOR_ID_MANET_LTD = 44648\nVENDOR_ID_ALMA_TECHNOLOGIES = 44649\nVENDOR_ID_HEMOTOLOGY_ONCOLOGY_CARE_OF_NORTHERN_VA = 44650\nVENDOR_ID_UNIVERSITY_OF_DETROIT_JESUIT_HIGH_SCHOOL_AND_ACADEMY = 44651\nVENDOR_ID_LAMARCHE_MFG_COMPANY = 44652\nVENDOR_ID_UNASSIGNED_52 = 44653\nVENDOR_ID_HOCHSCHULE_FR_MUSIK_FREIBURG = 44654\nVENDOR_ID_HEARTLAND_HEMATOLOGY_ONCOLOGY = 44655\nVENDOR_ID_SOUND_CHOICE_COMMUNICATIONS_LLC = 44656\nVENDOR_ID_BOW_VALLEY_COLLEGE = 44657\nVENDOR_ID_NORTHWEST_MEDICAL_SPECIALTIES_PLLC = 44658\nVENDOR_ID_BURLINGTON_COUNTY_HEMATOLOGY_ONCOLOGY_ASSOCIATES_PA = 44659\nVENDOR_ID_LANDSPITALI = 44660\nVENDOR_ID_BOYCE_TECHNOLOGIES_INC = 44661\nVENDOR_ID_CODECHASE = 44662\nVENDOR_ID_WUHAN_GREENET_INFORMATION_SERVICE_CO_LTD = 44663\nVENDOR_ID_IRCOS_JSC = 44664\nVENDOR_ID_11_INTERNET_AG = 44665\nVENDOR_ID_VILLE_DE_SAINT_ANDR = 44666\nVENDOR_ID_PARDIC_SYSTEMS_LTD = 44667\nVENDOR_ID_SECUROSYS_SA = 44668\nVENDOR_ID_FIRST_CAPITAL_PAYMENTS = 44669\nVENDOR_ID_PRISM_SOFTWARE_CORPORATION = 44670\nVENDOR_ID_SYSCTL_AB = 44671\nVENDOR_ID_NAUCRA_CO_LTD = 44672\nVENDOR_ID_SITEPEN_INC = 44673\nVENDOR_ID_FUSED_NETWORK_CORP = 44674\nVENDOR_ID_SPILLMAN_TECHNOLOGIES_INC = 44675\nVENDOR_ID_GLENN_MCGURRIN = 44676\nVENDOR_ID_DREAMHACK_NETWORK = 44677\nVENDOR_ID_LOOPIA_AB = 44678\nVENDOR_ID_PLANSEE_GROUP_SERVICE_GMBH = 44679\nVENDOR_ID_IUDEX = 44680\nVENDOR_ID_AJUNTAMENT_DE_VALENCIA = 44681\nVENDOR_ID_COMPLISPACE_TECHNOLOGY_PTY_LTD = 44682\nVENDOR_ID_INTERN_NET = 44683\nVENDOR_ID_CORSA_TECHNOLOGY_INC = 44684\nVENDOR_ID_NTENT = 44685\nVENDOR_ID_ROI_DEVELOPMENT_CORP_DBA_NEWMAR = 44686\nVENDOR_ID_HEBEO = 44687\nVENDOR_ID_WORLDWIDE_SUPPLY_LLC_AKA_WWS = 44688\nVENDOR_ID_GROUPE_SIMPLINET_INC = 44689\nVENDOR_ID_SONAVOX_CANADA_INC = 44690\nVENDOR_ID_GRUPO_ONCOLOGICO_COMUNITARIO_DE_SAN_JUAN = 44691\nVENDOR_ID_SEDUS_STOLL_AG = 44692\nVENDOR_ID_MICROWAVE_PHOTONIC_SYSTEMS_INC = 44693\nVENDOR_ID_ADAMS_COUNTY_CANCER_CENTER = 44694\nVENDOR_ID_WOLFGANG_ERLENKOETTER_IT = 44695\nVENDOR_ID_APLIO = 44696\nVENDOR_ID_CHARLES_UNIVERSITY_IN_PRAGUE_FACULTY_OF_MATHEMATICS_AND_PHYSICS = 44697\nVENDOR_ID_BAXTER_PLANNING_SYSTEM = 44698\nVENDOR_ID_BILL_GMBH = 44699\nVENDOR_ID_KUSS_IT_SOLUTIONS = 44700\nVENDOR_ID_HEARSAY_SOCIAL = 44701\nVENDOR_ID_VOICEWORKS_BV = 44702\nVENDOR_ID_DANVILLE_HEMATOLOGY_AND_ONCOLOGY = 44703\nVENDOR_ID_BLACKSIP_DEVELOPMENT = 44704\nVENDOR_ID_HACK12 = 44705\nVENDOR_ID_HOSTOPIACOM_INC = 44706\nVENDOR_ID_SAI_TECHNOLOGY_INC = 44707\nVENDOR_ID_CREWS_BANKING_CORPORATION = 44708\nVENDOR_ID_XOLPHIN_BV = 44709\nVENDOR_ID_ENSURED_BV = 44710\nVENDOR_ID_T_MOBILE_NEDERLAND_BV = 44711\nVENDOR_ID_AGAT_SYSTEM = 44712\nVENDOR_ID_COSMOS_SOFTNET = 44713\nVENDOR_ID_TRANSDATA = 44714\nVENDOR_ID_EZITHERM = 44715\nVENDOR_ID_UNIVERSITY_OF_THE_SUNSHINE_COAST = 44716\nVENDOR_ID_CO_SOL_INC = 44717\nVENDOR_ID_LOEWS_HOTELS_INC = 44718\nVENDOR_ID_UNIVERSALCARD_SIBIRIA_LLC = 44719\nVENDOR_ID_SHANGHAI_BEIDIAN_INDUSTRY_GROUP = 44720\nVENDOR_ID_OKAKI_HEALTH_INTELLIGENCE_INC = 44721\nVENDOR_ID_WALLMEDIEN_AG = 44722\nVENDOR_ID_UNASSIGNED_53 = 44723\nVENDOR_ID_LLC_ITTECH = 44724\nVENDOR_ID_BADTRONIC_SARL = 44725\nVENDOR_ID_RADIONIKA_SP_Z_OO = 44726\nVENDOR_ID_Y2S_CORPORATION = 44727\nVENDOR_ID_I3_CZ_SRO = 44728\nVENDOR_ID_FIXMON = 44729\nVENDOR_ID_ELKOMTECH_SA = 44730\nVENDOR_ID_PALESTINE_MONETARY_AUTHORITY = 44731\nVENDOR_ID_OOO_BELLA_DON = 44732\nVENDOR_ID_FORBES_TECHNOSYS_LTD = 44733\nVENDOR_ID_MENLO_SECURITY = 44734\nVENDOR_ID_ELECTRONIC_COMMERCE_INC = 44735\nVENDOR_ID_JERRA_SOFT_GMBH = 44736\nVENDOR_ID_RAINDROP_LABORATORIES_ALAN_BATIE = 44737\nVENDOR_ID_ASUSTOR_INC = 44738\nVENDOR_ID_MIELE_CIE_KG = 44739\nVENDOR_ID_INNOVAPUGLIA_SPA = 44740\nVENDOR_ID_IAV_GMBH = 44741\nVENDOR_ID_AUNIGMA_NETWORK_SECURITY_CORP = 44742\nVENDOR_ID_POMA = 44743\nVENDOR_ID_SCANLINE_VFX_LA_INC = 44744\nVENDOR_ID_TREMOR_VIDEO = 44745\nVENDOR_ID_SEA_SURVEILLANCE_AS = 44746\nVENDOR_ID_VOICETRUST = 44747\nVENDOR_ID_WILD_KILT_PTY_LTD = 44748\nVENDOR_ID_MALWAREBYTES_CORPORATION = 44749\nVENDOR_ID_EDIFECS_INC = 44750\nVENDOR_ID_TELL_INTERNATIONAL_INC = 44751\nVENDOR_ID_QUAMATIK_DOO = 44752\nVENDOR_ID_UNIQ_CA_BV = 44753\nVENDOR_ID_PATENT_AGENCY_TEGAS_LLC = 44754\nVENDOR_ID_ONLINE_DEVELOPMENT_INC = 44755\nVENDOR_ID_AGNO3_GMBH_CO_KG = 44756\nVENDOR_ID_ANIMO_LIMITED = 44757\nVENDOR_ID_ACTRONICS_KK = 44758\nVENDOR_ID_TURBO_SYSTEMS_CO_LTD = 44759\nVENDOR_ID_VSOFT_COLOMBIA_LTDA = 44760\nVENDOR_ID_VOXIDEA = 44761\nVENDOR_ID_IBS_PROJECT_LLC = 44762\nVENDOR_ID_STEVEN_SLOANE = 44763\nVENDOR_ID_BACQRU = 44764\nVENDOR_ID_PTL_LIMITED = 44765\nVENDOR_ID_KATAO_OPS = 44766\nVENDOR_ID_TIETO_SWEDEN_AB = 44767\nVENDOR_ID_GRAYSON_BVBA = 44768\nVENDOR_ID_TSINGHUA_UNIVERSITY = 44769\nVENDOR_ID_NYNEX_SATELLITE_OHG = 44770\nVENDOR_ID_APSIDIS = 44771\nVENDOR_ID_WEST_GENESEE_CENTRAL_SCHOOL_DISTRICT = 44772\nVENDOR_ID_SISTEMAS_DE_SEGURIDADE_A1 = 44773\nVENDOR_ID_ALAMEDA_HEALTH_SERVICES = 44774\nVENDOR_ID_CITY_NETWORK_HOSTING_AB = 44775\nVENDOR_ID_HEDBERG_PRODUTIONS = 44776\nVENDOR_ID_MEAZON_SA = 44777\nVENDOR_ID_THINKINDIFFERENTNET = 44778\nVENDOR_ID_UNITY_HEALTH_INSURANCE = 44779\nVENDOR_ID_BIKEPICS = 44780\nVENDOR_ID_CONNETOS_COMPANY = 44781\nVENDOR_ID_XIAMEN_KEHUA_HENGSHENG_COLTD = 44782\nVENDOR_ID_PUSH_TO_TALK_INTERNATIONAL_LTD = 44783\nVENDOR_ID_HITZIGRATH = 44784\nVENDOR_ID_IS2_INTELLIGENT_SOLUTION_SERVICES_AG = 44785\nVENDOR_ID_STADTWERKE_JENA_GMBH = 44786\nVENDOR_ID_CORPORATE_BUSINESS_SYSTEMS_LLP = 44787\nVENDOR_ID_GOETHE_INSTITUT_E_V = 44788\nVENDOR_ID_SARAH_CANNON_RESEARCH_INSTITUTE = 44789\nVENDOR_ID_INGENIUM_AUTOMATION_ENGINEERING_PTE_LTD = 44790\nVENDOR_ID_CHENGDU_GLOBAL_CAPSHEAF_SOLUTION_TECHNOLOGY_CO_LTD = 44791\nVENDOR_ID_AZURITEUK_VALERIJ_PRUSAKOV = 44792\nVENDOR_ID_GAMING1_SPRL = 44793\nVENDOR_ID_CHICKASAW_HOLDING_COMPANY = 44794\nVENDOR_ID_TRIDIGY_LLC = 44795\nVENDOR_ID_SFO_TECHNOLOGIES_PVT_LTD = 44796\nVENDOR_ID_STOAT_WORKS = 44797\nVENDOR_ID_TECHSMIX_NETWORKS = 44798\nVENDOR_ID_AUDIOALGORITHMS = 44799\nVENDOR_ID_IT7_SRO = 44800\nVENDOR_ID_SOLE_PROPRIETORSHIP_ILYA_GRUZINOV = 44801\nVENDOR_ID_IT_LABOR = 44802\nVENDOR_ID_WHATSON_WEB = 44803\nVENDOR_ID_FCM_TECHNOLOGY_SRL = 44804\nVENDOR_ID_SEA_ISLAND_CANCER_CENTER = 44805\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DA_INTEGRAO_LATINO_AMERICANA = 44806\nVENDOR_ID_INFORMED = 44807\nVENDOR_ID_TSBLOGORG = 44808\nVENDOR_ID_HEALTHSTREAM_INC = 44809\nVENDOR_ID_ARALESORG = 44810\nVENDOR_ID_FUNAMBOLO_TECHNOLOGIES_PRIVATE_LIMITED = 44811\nVENDOR_ID_JSC_INSTITUTE_OF_AUTOMATION_OF_ENERGY_SYSTEMS = 44812\nVENDOR_ID_BEIJING_EASYNETWORKS_TECHNOLOGY_COLTD = 44813\nVENDOR_ID_GENEXYX_SRL = 44814\nVENDOR_ID_MAURO_ALTAMURA = 44815\nVENDOR_ID_SOUTH_CAROLINA_ONCOLOGY_ASSOCIATES = 44816\nVENDOR_ID_IDAHO_DIVISION_OF_VETERANS_SERVICES = 44817\nVENDOR_ID_CADMO_CONOCIMIENTO_SL = 44818\nVENDOR_ID_STORE_ELECTRONIC_SYSTEMS_SA = 44819\nVENDOR_ID_CHLORINE_HILARVA = 44820\nVENDOR_ID_BEIJER_ELECTRONICS_AB = 44821\nVENDOR_ID_DC_MATRIX_INTERNET_S_A = 44822\nVENDOR_ID_AIRBORNE_INTERACTIVE = 44823\nVENDOR_ID_OPRAVIL = 44824\nVENDOR_ID_LAUTERSOFT = 44825\nVENDOR_ID_FIRE_PROTECTION_SERVICE_CORPORATION = 44826\nVENDOR_ID_EPCAN_GMBH = 44827\nVENDOR_ID_SILVERNET_LTD = 44828\nVENDOR_ID_GANYMED_PHARMACEUTICALS_AG = 44829\nVENDOR_ID_TRIO_MOTION_TECHNOLOGY_LTD = 44830\nVENDOR_ID_NUVOTEX_SOLUTIONS_GMBH_CO_KG = 44831\nVENDOR_ID_PRODUCT_VENTURES_LTD = 44832\nVENDOR_ID_PETEHEILIGCOM = 44833\nVENDOR_ID_SYSTEMS_AND_TECHNOLOGIES_ZAO = 44834\nVENDOR_ID_ONCOLOGY_HEMATOLOGY_CONSULTANTS_OF_HOUSTON = 44835\nVENDOR_ID_BREQWATR_INC = 44836\nVENDOR_ID_ABSEC_MALAYSIA_SDN_BHD = 44837\nVENDOR_ID_CHINASOFT_TOKYO_CORPORATION = 44838\nVENDOR_ID_MEGA_DESIGNS_PVT_LTD = 44839\nVENDOR_ID_INTRASONICS_LTD = 44840\nVENDOR_ID_LYNGMONET = 44841\nVENDOR_ID_FAIRBANKS_NORTH_STAR_BOROUGH_SCHOOL_DISTRICT = 44842\nVENDOR_ID_HASIN_TECHNOLOGY = 44843\nVENDOR_ID_NOBEL_BIOCARE_SERVICES_AG = 44844\nVENDOR_ID_DILLERT = 44845\nVENDOR_ID_SUPERNETWORK_SRO = 44846\nVENDOR_ID_YURI_BUGELLI = 44847\nVENDOR_ID_COSYLVAL = 44848\nVENDOR_ID_FIVE_BELOW_INC = 44849\nVENDOR_ID_UNITED_STATES_ANTARCTIC_PROGRAM = 44850\nVENDOR_ID_WINK_STREAMING = 44851\nVENDOR_ID_ENERGY_COMMUNICATIONS_MANAGEMENT_EXCHANGE_SUB_DIVISION_OF_FUTURE_DOS_RESEARCH_DEVELOPMENT_INC = 44852\nVENDOR_ID_KVL_COMP_KFT = 44853\nVENDOR_ID_LINMAONLINEDE = 44854\nVENDOR_ID_H_DYS_HOME = 44855\nVENDOR_ID_ART_DEVELOPERS_CORPORATION = 44856\nVENDOR_ID_BROADSOUND_CORPORATION = 44857\nVENDOR_ID_ELKJP_NORDIC_AS = 44858\nVENDOR_ID_MOBIK_DOO = 44859\nVENDOR_ID_EMANOMEDIA_GMBH = 44860\nVENDOR_ID_CATOCTIN_SYSTEMS = 44861\nVENDOR_ID_IT_SYSTEMS_SRL = 44862\nVENDOR_ID_UNITOW_SERVICES_1978_LTD = 44863\nVENDOR_ID_BETHEL_BLOOD_AND_CANCER_CENTER = 44864\nVENDOR_ID_BAY_AREA_REGIONAL_MEDICAL_CENTER = 44865\nVENDOR_ID_BENEDIKT_FRENZEL_SYSTEMS = 44866\nVENDOR_ID_ETIC_TELECOM = 44867\nVENDOR_ID_EARTHLING_INTERACTIVE = 44868\nVENDOR_ID_ZEN_SOLUTIONS_LIMITED = 44869\nVENDOR_ID_JSC_SKB_ELECTRONMASH = 44870\nVENDOR_ID_UNIVERSIDAD_DE_CUENCA = 44871\nVENDOR_ID_FIBERLABS_INC = 44872\nVENDOR_ID_CJSC_INTERSET = 44873\nVENDOR_ID_INSTYTUT_MATEMATYCZNY_POLSKIEJ_AKADEMII_NAUK = 44874\nVENDOR_ID_REYKJAVIKURBORG = 44875\nVENDOR_ID_HRVATSKA_POTANSKA_BANKA_DIONIKO_DRUTVO = 44876\nVENDOR_ID_IMMA_INC = 44877\nVENDOR_ID_DATCENT_TECHNOLOGY_COLTD = 44878\nVENDOR_ID_CUNZ_RAD_LTD = 44879\nVENDOR_ID_HARTE_LYNE_LIMITED = 44880\nVENDOR_ID_IKARA = 44881\nVENDOR_ID_TECHNO_COM = 44882\nVENDOR_ID_IW1BI = 44883\nVENDOR_ID_ONEVISION_SOFTWARE_AG = 44884\nVENDOR_ID_BALTECH_AG = 44885\nVENDOR_ID_GAINSPEED_INC = 44886\nVENDOR_ID_THE_KANSAS_CITY_SOUTHERN_RAILWAY_COMPANY = 44887\nVENDOR_ID_KLOLIKORG = 44888\nVENDOR_ID_DENVER_PUBLIC_LIBRARY = 44889\nVENDOR_ID_BKTEL_PHOTONICS_SAS = 44890\nVENDOR_ID_XERO = 44891\nVENDOR_ID_PRIMUM_HEALTH_IT_SL = 44892\nVENDOR_ID_SOFTWARE_DIVERSIONS_INC = 44893\nVENDOR_ID_NAPATECH = 44894\nVENDOR_ID_BITCRAZE_AB = 44895\nVENDOR_ID_SECURELOIN = 44896\nVENDOR_ID_VISTA_ONCOLOGY = 44897\nVENDOR_ID_INSIGNIS = 44898\nVENDOR_ID_CODE_L7 = 44899\nVENDOR_ID_REMINDERMEDIA = 44900\nVENDOR_ID_XIAMEN_SUNWE_TECHNOLOGY_COLTD = 44901\nVENDOR_ID_SHARETECH_INFORMATION_CO_LTD = 44902\nVENDOR_ID_STRATECH_SYSTEMS_LIMITED = 44903\nVENDOR_ID_MEDIA_STREAM_CO_LTD = 44904\nVENDOR_ID_NIGHTTRADE_GROUP_INC = 44905\nVENDOR_ID_TBDD_LTD = 44906\nVENDOR_ID_NVISIONIT_PTY_LTD = 44907\nVENDOR_ID_CARTIERE_DEL_GARDA = 44908\nVENDOR_ID_SYS_PRO_GMBH = 44909\nVENDOR_ID_ST_VITRINEN_TRAUTMANN_GMBH_CO_KG = 44910\nVENDOR_ID_ALPHA_ENGINEERING_TUNISIA = 44911\nVENDOR_ID_2BE_FFICIENT = 44912\nVENDOR_ID_REDSOCKS_BV = 44913\nVENDOR_ID_GENTING_CASINOS_UK = 44914\nVENDOR_ID_SILEX_INDUSTRIAL_AUTOMATION_LTD = 44915\nVENDOR_ID_MJOG_LIMITED = 44916\nVENDOR_ID_LMPRO_GMBH = 44917\nVENDOR_ID_NETHIX_SRL = 44918\nVENDOR_ID_AVISI_BV = 44919\nVENDOR_ID_ARGYLE_SECURITY_INC = 44920\nVENDOR_ID_EXELE = 44921\nVENDOR_ID_ECHO_TECHNOLOGY_SOLUTIONS = 44922\nVENDOR_ID_REMCO_ICT = 44923\nVENDOR_ID_ALLSEEN_ALLIANCE_INC = 44924\nVENDOR_ID_EAST_KENT_HOSPITALS_UNIVERSITY_FOUNDATION_TRUST = 44925\nVENDOR_ID_AMDOCS_NETWORK_SOLUTIONS = 44926\nVENDOR_ID_SYS_LLC = 44927\nVENDOR_ID_CALIGARE_SRO = 44928\nVENDOR_ID_NETKNIGHTS_GMBH = 44929\nVENDOR_ID_FISHER_INVESTMENTS = 44930\nVENDOR_ID_SYNCWISE_SYSTEMS_TECHNOLOGY = 44931\nVENDOR_ID_PANASONIC_SYSTEM_COMMUNICATIONS_COMPANY_OF_NORTH_AMERICA = 44932\nVENDOR_ID_IN_ARDUA_PETIT = 44933\nVENDOR_ID_G_RAY = 44934\nVENDOR_ID_DIGITAL_TELECOMMUNICATION_SYSTEMS_WA_PTY_LTD = 44935\nVENDOR_ID_STRATECH_IVISION_PTE_LTD = 44936\nVENDOR_ID_INOVENTICA_TECHNOLOGIES = 44937\nVENDOR_ID_CHARIT_UNIVERSITTSMEDIZIN_BERLIN = 44938\nVENDOR_ID_AVA_PETER_LTD = 44939\nVENDOR_ID_NEMIROFF = 44940\nVENDOR_ID_GCP_GERMAN_CATHODIC_PROTECTION_GMBH_CO_KG = 44941\nVENDOR_ID_STADT_DUELMEN = 44942\nVENDOR_ID_INLINK_O = 44943\nVENDOR_ID_ROCK_FLOW_DYNAMICS = 44944\nVENDOR_ID_TEKTELIC_COMMUNICATIONS_INC = 44945\nVENDOR_ID_DANISH_RAILWAY_DSB = 44946\nVENDOR_ID_INTERNET_SECURITY_RESEARCH_GROUP = 44947\nVENDOR_ID_PACIFIC_INSTITUTE_FOR_THE_MATHEMATICAL_SCIENCES = 44948\nVENDOR_ID_NJK_AVIATION_AG = 44949\nVENDOR_ID_AUTOMATION_ENGINEERING = 44950\nVENDOR_ID_SSR_ENGINEERING_INC = 44951\nVENDOR_ID_AC_BC_ELECTRICAL_COMPANY = 44952\nVENDOR_ID_FLAT_WORLD_RESOURCE_TECHNOLOGIES_LIMITED = 44953\nVENDOR_ID_KEWEON = 44954\nVENDOR_ID_CONNEXO_TECNOLOGIA_E_COMUNICAO_EIRELI = 44955\nVENDOR_ID_SAVVI_INC = 44956\nVENDOR_ID_ROBOTRON_DATENBANK_SOFTWARE_GMBH = 44957\nVENDOR_ID_MSE_GMBH = 44958\nVENDOR_ID_CARL_BERBERICH_GMBH = 44959\nVENDOR_ID_CRALTECH_ELECTRNICA_SL = 44960\nVENDOR_ID_VALLEY_MEDICAL_CENTER_PLLC = 44961\nVENDOR_ID_FOREMAN_INSTRUMENTATION_AND_CONTROLS = 44962\nVENDOR_ID_GUEUXORG = 44963\nVENDOR_ID_VIVID_ORANGE_LIMITED = 44964\nVENDOR_ID_PASCHERIT = 44965\nVENDOR_ID_JINGTU_PRINTING_SYSTEMS_CO_LTD = 44966\nVENDOR_ID_BEIJING_HEWEINET_TECHNOLOGY_COLTD = 44967\nVENDOR_ID_MAY_CHINA = 44968\nVENDOR_ID_CLINICA_DE_CANCER_Y_ENFERMEDADES_DE_LA_SANGRE_CSP = 44969\nVENDOR_ID_THREAD_GROUP_INC = 44970\nVENDOR_ID_COMPEN_EMBEDDED_SOFTWARE = 44971\nVENDOR_ID_ALAMEDA_HOSPITAL = 44972\nVENDOR_ID_KANTAR_MEDIA_FRANCE_SAS = 44973\nVENDOR_ID_SONOS_INC = 44974\nVENDOR_ID_FLEXCODERS_LTD = 44975\nVENDOR_ID_ONEGINI_BV = 44976\nVENDOR_ID_REDUXIO_SYSTEMS = 44977\nVENDOR_ID_ISTRIA_SOLUCIONES_DE_CRIPTOGRAFA_S_A = 44978\nVENDOR_ID_TSMART_INC = 44979\nVENDOR_ID_MEDIA_LINK_COLTD = 44980\nVENDOR_ID_LLC_PROMIT = 44981\nVENDOR_ID_INNEXIV_INC = 44982\nVENDOR_ID_ARTIS_GMBH = 44983\nVENDOR_ID_EPAM_SYSTEMS = 44984\nVENDOR_ID_TECNOLOGIAS_CORPORATIVAS_SC = 44985\nVENDOR_ID_TAGLIO_LLC = 44986\nVENDOR_ID_TEMPLE_UNIVERSITY = 44987\nVENDOR_ID_NXTERA_LTD = 44988\nVENDOR_ID_MULTI_PARTS_SUPPLY_USA_INC = 44989\nVENDOR_ID_TONGFANG_INDUSTRIAL_COLTD = 44990\nVENDOR_ID_AMERIPRISE_FINANCIAL = 44991\nVENDOR_ID_AMSCREEN_GROUP_LIMITED = 44992\nVENDOR_ID_BCP_CO = 44993\nVENDOR_ID_UMBRELLIUM_LTD = 44994\nVENDOR_ID_REGIONAL_CANCER_CARE_ASSOCIATES_LITTLE_SILVER_DIVISION = 44995\nVENDOR_ID_JMP_GROUP_INC = 44996\nVENDOR_ID_EMERY_TELCOM = 44997\nVENDOR_ID_SICHUAN_ZERO_GRAVITY_TECHNOLOGY_COLTD = 44998\nVENDOR_ID_LTD_GOLDLANS = 44999\nVENDOR_ID_SYMBICON_LTD = 45000\nVENDOR_ID_NORTHERN_VIRGINIA_HEMATOLOGY_ONCOLOGY_ASSOCIATES = 45001\nVENDOR_ID_COMPUGROUP_MEDICAL_POLSKA_SP_Z_OO = 45002\nVENDOR_ID_EGAG_LLC = 45003\nVENDOR_ID_SMARTRAC_NV = 45004\nVENDOR_ID_ADVANCED_ALLOY_PROCESSING = 45005\nVENDOR_ID_WUESTENROT_POISTOVNA_AS = 45006\nVENDOR_ID_TRIAL_SOFTWARE_LABORATORIES_INC = 45007\nVENDOR_ID_THINGSEXPERT_LLC = 45008\nVENDOR_ID_THOMAS_HASSALL_ANGLICAN_COLLEGE = 45009\nVENDOR_ID_YOUHUA = 45010\nVENDOR_ID_MING_DYNASTY_AVANTLEXA_FIRM = 45011\nVENDOR_ID_MIRAESON = 45012\nVENDOR_ID_BEIJING_GEHUA_CATV_NETWORK_COLTD = 45013\nVENDOR_ID_ANDRA_SP_Z_O_O = 45014\nVENDOR_ID_FOOSH = 45015\nVENDOR_ID_KOUBA_PARTNER = 45016\nVENDOR_ID_I3_COMRCIO_DE_COMPUTADORES_LTDA_EPP = 45017\nVENDOR_ID_QUALISTREAM = 45018\nVENDOR_ID_INFINITE_AI_INC = 45019\nVENDOR_ID_BITNASIUM_CO_LTD = 45020\nVENDOR_ID_HEALTH_PLAN_PARTNERS_LLC = 45021\nVENDOR_ID_DIGIVOD_GMBH = 45022\nVENDOR_ID_CHAIR_FOUR_DEVELOPMENT_GROUP_LLC = 45023\nVENDOR_ID_BTS_SOFTWARE_SOLUTIONS_LLC = 45024\nVENDOR_ID_FUJITSU_HOKURIKU_SYSTEMS_LIMITED = 45025\nVENDOR_ID_MYNAVI_CORPORATION_2 = 45026\nVENDOR_ID_THE_CENTER_FOR_MENTAL_HEALTH = 45027\nVENDOR_ID_DEBUGO = 45028\nVENDOR_ID_FENGYZ_TECHNOLOGY_COLTD = 45029\nVENDOR_ID_LAGOPUS_SWITCH_PROJECT = 45030\nVENDOR_ID_JSC_ENGINEERING_CENTRE_ENERGOSERVICE = 45031\nVENDOR_ID_JUSTNOW = 45032\nVENDOR_ID_SYNYX_GMBH_CO_KG = 45033\nVENDOR_ID_MILLIMETRICA_SRL = 45034\nVENDOR_ID_TELSIP_COMMUNICATION = 45035\nVENDOR_ID_NIC_HOSTING = 45036\nVENDOR_ID_HAUKE_BARTSCH = 45037\nVENDOR_ID_ENMAN = 45038\nVENDOR_ID_CENTRAL_BANK_OF_THE_REPUBLIC_OF_AZERBAIJAN = 45039\nVENDOR_ID_BBH_MEDIA = 45040\nVENDOR_ID_VIEIRA_FILHO_TECNOLOGIA_ELETRONICA = 45041\nVENDOR_ID_OFFICEWORKS_LTD = 45042\nVENDOR_ID_ARGUS_HOSTING_LLC = 45043\nVENDOR_ID_TANGORYTHM = 45044\nVENDOR_ID_DELNET = 45045\nVENDOR_ID_LPK = 45046\nVENDOR_ID_CRYPTO_SOFTWARE_CHRYSELIUS = 45047\nVENDOR_ID_MARIA_DEBORA = 45048\nVENDOR_ID_GUDOK_LLC = 45049\nVENDOR_ID_BJRN_LUDVIG_LANGAAS_JOHANSEN = 45050\nVENDOR_ID_FINALSITE = 45051\nVENDOR_ID_SEQUOIADB_LTD = 45052\nVENDOR_ID_INFORMATION_AND_TELECOM_SYSTEMS_INDIA_PVT_LTD = 45053\nVENDOR_ID_TONY_DITCHFIELD = 45054\nVENDOR_ID_ISAE = 45055\nVENDOR_ID_KASSENRZTLICHE_VEREINIGUNG_SCHLESWIG_HOLSTEIN = 45056\nVENDOR_ID_COPALP = 45057\nVENDOR_ID_CCP_GAMES = 45058\nVENDOR_ID_BAUDUIN_RAPHAL = 45059\nVENDOR_ID_OTIS_R_BOWEN_CENTER_FOR_HUMAN_SERVICES_INC = 45060\nVENDOR_ID_GYMNASIUM_GERETSRIED = 45061\nVENDOR_ID_SOUTHERN_CANCER_CENTER = 45062\nVENDOR_ID_SEATECH_TECHNOLOGY_INC = 45063\nVENDOR_ID_CHINA_MOBILE_HONG_KONG_COMPANY_LIMITED = 45064\nVENDOR_ID_INSYDE = 45065\nVENDOR_ID_SIP_CANTABRIA_SL = 45066\nVENDOR_ID_DUDE_SOLUTIONS_INC = 45067\nVENDOR_ID_PROTECH_SYSTEMS_PRIVATE_LIMITED = 45068\nVENDOR_ID_TOMINF_TOMASZ_TOMASZEWSKI = 45069\nVENDOR_ID_RESERVOIR_LABS_INC = 45070\nVENDOR_ID_TETRAGUARD_SYSTEMS_GMBH = 45071\nVENDOR_ID_CATALYST_PAPER = 45072\nVENDOR_ID_PACIFIC_SEAFOOD_GROUP = 45073\nVENDOR_ID_TTSSB_CORP = 45074\nVENDOR_ID_ELECTRON_JUNGLE_LLC = 45075\nVENDOR_ID_HAMLOGINCOM = 45076\nVENDOR_ID_SESTEK_SES_VE_ILETISIM_BILGISAYAR_TEKNOLOJILERI_SAN_VE_TIC_AS = 45077\nVENDOR_ID_QOS_SOLUTIONS = 45078\nVENDOR_ID_I2P_INFORMATIKAI_KFT = 45079\nVENDOR_ID_KERIO_TECHNOLOGIES_INC = 45080\nVENDOR_ID_INCREASE_QINGDAO_INFORMATION_TECHNOLOGY_CO_LTD = 45081\nVENDOR_ID_PT_TEKNO_INOVASI_ASIA = 45082\nVENDOR_ID_INTILITY_AS = 45083\nVENDOR_ID_ARBEITSGEMEINSCHAFT_DRESDNER_STUDENTENNETZ = 45084\nVENDOR_ID_BIBLIOTHECA_ALEXANDRINA = 45085\nVENDOR_ID_ADVANCED_IMAGING_TECHNOLOGIES_PTY_LTD = 45086\nVENDOR_ID_INSTITUT_CATALA_DE_FINANCES = 45087\nVENDOR_ID_VOLKSWAGEN_MLLER_BILFINANS_AS = 45088\nVENDOR_ID_ICANN = 45089\nVENDOR_ID_MUSHROOM_NETWORKS_INC = 45090\nVENDOR_ID_CISCO_SERA = 45091\nVENDOR_ID_SILECTICA = 45092\nVENDOR_ID_SUMOMO_COMPUTER_ASSOCIATION = 45093\nVENDOR_ID_UAB_VAATC = 45094\nVENDOR_ID_INAF_OSSERVATORIO_ASTROFISICO_DI_ARCETRI = 45095\nVENDOR_ID_INTERNATIONAL_MEDICAL_SOLUTIONS_INC = 45096\nVENDOR_ID_GRAPHITE_SYSTEMS_INC = 45097\nVENDOR_ID_EX_CATHEDRA_SOLUTIONS_LTD = 45098\nVENDOR_ID_PENTAHO_CORPORATION = 45099\nVENDOR_ID_CLOUD_VISION_NETWORKS_TECHNOLOGY_COLTD_CVN = 45100\nVENDOR_ID_YEW_TREE_SERVICES_INC = 45101\nVENDOR_ID_YAWNSCOM_LIMITED = 45102\nVENDOR_ID_SATEL_SPAIN_SL = 45103\nVENDOR_ID_INFOWORXX_GMBH = 45104\nVENDOR_ID_SAMSUNG_POLAND_RD_CENTER = 45105\nVENDOR_ID_SUBSENTIO = 45106\nVENDOR_ID_INTEGRAOPTICS_INC = 45107\nVENDOR_ID_JETMOBILE = 45108\nVENDOR_ID_CHAOS_LABS_OOD = 45109\nVENDOR_ID_IZUMOBASE_INC = 45110\nVENDOR_ID_ELBRUS_RW = 45111\nVENDOR_ID_CHRISTIAN_WILHELMI = 45112\nVENDOR_ID_OPTIMANS = 45113\nVENDOR_ID_PALS_ELEKTRONIK = 45114\nVENDOR_ID_AJENTI_SOLUTIONS = 45115\nVENDOR_ID_LOJACK_CORP = 45116\nVENDOR_ID_UNIVERSITY_OF_NORTH_CAROLINA_AT_CHARLOTTE = 45117\nVENDOR_ID_EHAAIHEE = 45118\nVENDOR_ID_SBONGILE_PROJECT = 45119\nVENDOR_ID_IBA_AG = 45120\nVENDOR_ID_HANGZHOU_GUANGWEI_TECHNOLOGY_CO_LTD = 45121\nVENDOR_ID_M_T_BANK_CORPORATION = 45122\nVENDOR_ID_SUZHOU_INDUSTRIAL_PARK_KEJIA_AUTOMATION_CO_LTD = 45123\nVENDOR_ID_DE_HAAN = 45124\nVENDOR_ID_NETCOM_EUROPA_SL = 45125\nVENDOR_ID_SARADA_GUMMADI_MD_PA = 45126\nVENDOR_ID_PROFITBRICKS_GMBH = 45127\nVENDOR_ID_INFOTRAGE_LIMITED = 45128\nVENDOR_ID_BID_INITIATIVE_TANZANIA_PATH = 45129\nVENDOR_ID_R3K = 45130\nVENDOR_ID_ONELOGIN_INC = 45131\nVENDOR_ID_ADD_ENGINEERING_BV = 45132\nVENDOR_ID_KRISTIAN_SDERHOLM = 45133\nVENDOR_ID_XCORE_COMPANY_LIMITED = 45134\nVENDOR_ID_AQUASOFT_SPOL_S_RO = 45135\nVENDOR_ID_E_COP_PTE_LTD = 45136\nVENDOR_ID_NANOHA_PROJECT = 45137\nVENDOR_ID_HUWOMOBILITY_INC = 45138\nVENDOR_ID_MARUGANZER = 45139\nVENDOR_ID_GREEN_VICT_TECHNOLOGY_CO_LTD = 45140\nVENDOR_ID_ONOMICHI_IKAKIKAI_CO_LTD = 45141\nVENDOR_ID_CORPORATE_WEST_COMPUTER_SYSTEMS_INC = 45142\nVENDOR_ID_DATAWISE_SYSTEMS_INC = 45143\nVENDOR_ID_AMERICAN_AIRLINES_FEDERAL_CREDIT_UNION = 45144\nVENDOR_ID_HIVEMIND_ENGINEERING = 45145\nVENDOR_ID_PRIMESTONE_NETWORK = 45146\nVENDOR_ID_DATU_HEALTH = 45147\nVENDOR_ID_UNIVERSITT_KOBLENZ_LANDAU = 45148\nVENDOR_ID_NOISYPEAK = 45149\nVENDOR_ID_WAGNER_AG = 45150\nVENDOR_ID_MEISLAB = 45151\nVENDOR_ID_PARCHMENT_INC = 45152\nVENDOR_ID_DRILLINGINFO = 45153\nVENDOR_ID_ELES_DOO_SISTEMSKI_OPERATER_PRENOSNEGA_ELEKTROENERGETSKEGA_OMREZJA = 45154\nVENDOR_ID_DEMOCRATIC_ALLIANCE = 45155\nVENDOR_ID_THE_ICEDTEA_PROJECT_HEAPSTATS = 45156\nVENDOR_ID_MEDGATE_AG = 45157\nVENDOR_ID_INFRACOM_SPA = 45158\nVENDOR_ID_HEINZ_NIXDORF_MUSEUMSFORUM_GMBH = 45159\nVENDOR_ID_JABATAN_KETUA_MENTERI_MELAKA = 45160\nVENDOR_ID_YOUCO_SRL = 45161\nVENDOR_ID_GUANG_DONG_SMART_ELECTRIC_INFORMATION_INDUSTRY_COLTD = 45162\nVENDOR_ID_HAFEN_ENTWICKLUNGSGESELLSCHAFT_ROSTOCK_MBH = 45163\nVENDOR_ID_BRULLI_ENERGIA = 45164\nVENDOR_ID_IT_SERVICES_LOUGHBOROUGH_UNIVERSITY = 45165\nVENDOR_ID_ITAIPU_BINACIONAL = 45166\nVENDOR_ID_REDGATESCOM = 45167\nVENDOR_ID_KRUMEDIA_GMBH = 45168\nVENDOR_ID_TAHOE_FOREST_HEALTH_SYSTEM = 45169\nVENDOR_ID_THE_BAUPOST_GROUP_LLC = 45170\nVENDOR_ID_GARETH_MORGAN_INVESTMENTS = 45171\nVENDOR_ID_STRONGHOLD_LTD = 45172\nVENDOR_ID_THE_FURUKAWA_BATTERY_COLTD = 45173\nVENDOR_ID_EYECOM_TELECOMMUNICATION_EQUIPMENTS_LTD = 45174\nVENDOR_ID_NGI_SPA = 45175\nVENDOR_ID_MIRANTIS_INC = 45176\nVENDOR_ID_SAPIENTIER_DEVELOPMENT = 45177\nVENDOR_ID_DIREKTION_DER_JUSTIZ_UND_DES_INNERN_DES_KANTONS_ZUERICH = 45178\nVENDOR_ID_JABLOTRON_ALARMS_AS = 45179\nVENDOR_ID_ROLLS_ROYCE_MARINE = 45180\nVENDOR_ID_AVSYSTEM = 45181\nVENDOR_ID_BKAISER_GMBH = 45182\nVENDOR_ID_ACCESS_CONTROL_SERVICES_LTD = 45183\nVENDOR_ID_PATRICK_KALKMAN = 45184\nVENDOR_ID_SCA_SKOG_AB = 45185\nVENDOR_ID_FRAZZSE = 45186\nVENDOR_ID_AMBER_TECHNICAL_SOLUTIONS_LTD = 45187\nVENDOR_ID_VZAJEMNA_DVZ = 45188\nVENDOR_ID_GENPLUS_PTE_LTD = 45189\nVENDOR_ID_PEAXY_INC = 45190\nVENDOR_ID_SIMPLE_FINANCE_TECHNOLOGY_CORP = 45191\nVENDOR_ID_LONMIN = 45192\nVENDOR_ID_TERASTREAM = 45193\nVENDOR_ID_ORYX_EMBEDDED = 45194\nVENDOR_ID_BEIJING_35ONE_TECHNOLOGY_DEVELOPMENT_CO_LTD = 45195\nVENDOR_ID_OF_MODEMS_AND_MEN = 45196\nVENDOR_ID_CSCDGR = 45197\nVENDOR_ID_WEICHERT_LEAD_NETWORK_INC = 45198\nVENDOR_ID_LITE_ON_POWER_SYSTEM_SOLUTIONS = 45199\nVENDOR_ID_RESERVE_BANK_OF_AUSTRALIA = 45200\nVENDOR_ID_BBRIGHT = 45201\nVENDOR_ID_FACHHOCHSCHULE_POTSDAM = 45202\nVENDOR_ID_SYNERGY_CONSULTING_LTD = 45203\nVENDOR_ID_FOUR_HORSEMEN = 45204\nVENDOR_ID_RICHARD_FROSTELL = 45205\nVENDOR_ID_QUINTRON_SYSTEMS_INC = 45206\nVENDOR_ID_HEALCERION = 45207\nVENDOR_ID_GSS_INTERNATIONAL_GROUP = 45208\nVENDOR_ID_ALTOSTRATUS_OY = 45209\nVENDOR_ID_DIGISEQ_LIMITED = 45210\nVENDOR_ID_DATA_CONTROL_LTD = 45211\nVENDOR_ID_VECTURE_INC = 45212\nVENDOR_ID_MUNICIPAL_PARKING_SERVICES_INC = 45213\nVENDOR_ID_COMMUNITY_CAMPAIGN_HART = 45214\nVENDOR_ID_MATCHPOINT_SYSTEMS_INC = 45215\nVENDOR_ID_CYPRUS_TELECOMMUNICATIONS_AUTHORITY_CYTA = 45216\nVENDOR_ID_LARGE_DISPLAY_SOLUTIONS_INTERNATIONAL_LTD = 45217\nVENDOR_ID_MESOSPHERE = 45218\nVENDOR_ID_TELECOMAX = 45219\nVENDOR_ID_EGO_TRAVEL_LEISURE_AG = 45220\nVENDOR_ID_AMP = 45221\nVENDOR_ID_XPOLOG_LTD = 45222\nVENDOR_ID_FASII_INFORMATION_TECHNOLOGY = 45223\nVENDOR_ID_WIRELESS_SENSORS_LLC = 45224\nVENDOR_ID_GUANGZHOU_NETZONE_INC = 45225\nVENDOR_ID_ALLICIENT = 45226\nVENDOR_ID_OKINAWA_INSTITUTE_OF_SCIENCE_AND_TECHNOLOGY_GRADUATE_UNIVERSITY = 45227\nVENDOR_ID_LUMAGATE_AB = 45228\nVENDOR_ID_NYANTEC_UG_HAFTUNGSBESCHRNKT = 45229\nVENDOR_ID_RCD_RADIOKOMUNIKACE_SPOL_S_R_O = 45230\nVENDOR_ID_LIVEROCK_TECHNOLOGIES = 45231\nVENDOR_ID_HELLENIC_MINISTRY_OF_FOREIGN_AFFAIRS = 45232\nVENDOR_ID_GUANGZHOU_TONGRUI_ELECTRONIC_ELECTRONIC_TECHNOLOGY_COLTD = 45233\nVENDOR_ID_PENNSYLVANIA_STATE_EDUCATION_ASSOCIATION = 45234\nVENDOR_ID_CONFIRMSIGN_SL = 45235\nVENDOR_ID_FERZ_CORP = 45236\nVENDOR_ID_CONTEXT_RELEVANT = 45237\nVENDOR_ID_CITY_OF_OREGON_CITY = 45238\nVENDOR_ID_ROSRESERV = 45239\nVENDOR_ID_INTERNATIONAL_CAPITAL_MANAGEMENT_COMPANY = 45240\nVENDOR_ID_FUZZCATNET = 45241\nVENDOR_ID_INGEBI = 45242\nVENDOR_ID_LA_BOULGOUR_COMPAGNIE = 45243\nVENDOR_ID_IJM_SYSTEMS = 45244\nVENDOR_ID_SAS_CALVI_CLESTIN = 45245\nVENDOR_ID_ECOCOOLING_LTD = 45246\nVENDOR_ID_TRIPLE_DOMAIN_VISION_CO_LTD = 45247\nVENDOR_ID_NETOCEAN = 45248\nVENDOR_ID_BANCO_MACRO_SA = 45249\nVENDOR_ID_HABR_LLC = 45250\nVENDOR_ID_AXELIT_ZLETFEJLESZTSI_KFT = 45251\nVENDOR_ID_MDAKS_GMBH = 45252\nVENDOR_ID_RMB_CAPITAL_MANAGEMENT_LLC = 45253\nVENDOR_ID_SHOUEI_DENSHI_KENKYUUSHO_COLTD = 45254\nVENDOR_ID_DALLAS_DELTA_CORP = 45255\nVENDOR_ID_FOREKS_BILGI_ILETISIM_HIZ_AS = 45256\nVENDOR_ID_INTERCONNECTDATA = 45257\nVENDOR_ID_LAZAROS_ECONOMOU = 45258\nVENDOR_ID_BILLO_SYSTEMS_LTD_CO = 45259\nVENDOR_ID_FYLDE_MICRO_LTD = 45260\nVENDOR_ID_INAERE_HOLDINGS = 45261\nVENDOR_ID_RAVEN = 45262\nVENDOR_ID_VTAS_GMBH_CO_KG = 45263\nVENDOR_ID_SCHAEFFLER_TECHNOLOGIES_AG_CO_KG = 45264\nVENDOR_ID_GMAURER = 45265\nVENDOR_ID_BOOTIX_TECHNOLOGY_GMBH = 45266\nVENDOR_ID_ISSENDIS = 45267\nVENDOR_ID_RUSHYDRO = 45268\nVENDOR_ID_RIVASENSE_TECHNOLOGIES_LTD = 45269\nVENDOR_ID_ELECTRONIC_CERTIFICATION_SERVICES_SL = 45270\nVENDOR_ID_BECO = 45271\nVENDOR_ID_SZALLASHU_LTD = 45272\nVENDOR_ID_INDEPENDIT_INTEGRATIVE_TECHNOLOGIES_GMBH = 45273\nVENDOR_ID_EYASYS = 45274\nVENDOR_ID_ENERGY_ESSENTIALS_GROUP_BV = 45275\nVENDOR_ID_ITEAM_INSTITUTO_DE_TELECOMUNICACIONES_Y_APLICACIONES_MULTIMEDIA_GRUPO_COMM = 45276\nVENDOR_ID_FIVE_MONKEYS_CODE_FACTORY = 45277\nVENDOR_ID_OPENCLOUD_SL = 45278\nVENDOR_ID_STRATEGY_OBJECT = 45279\nVENDOR_ID_PREMISE_HEALTH = 45280\nVENDOR_ID_GENERAC_POWER_SYSTEMS_INC = 45281\nVENDOR_ID_LINKUP_NETWORKS = 45282\nVENDOR_ID_T_SYSTEMS_INTERNATIONAL_GMBH = 45283\nVENDOR_ID_AX86NET = 45284\nVENDOR_ID_SALIENCE_SYSTEMS_PTY_LTD = 45285\nVENDOR_ID_MORNING_PROJECT_SAMURAI = 45286\nVENDOR_ID_GEOPRAEVENT_AG = 45287\nVENDOR_ID_COMPANIA_LOGISTICA_DE_HIDROCARBUROS_CLH_SA = 45288\nVENDOR_ID_UNIXADMORG = 45289\nVENDOR_ID_AGENTIA_PENTRU_AGENDA_DIGITALA_A_ROMANIEI = 45290\nVENDOR_ID_DOCTORS_CENTER_HEMATOLOGY_ONCOLOGY_GROUP_PSC = 45291\nVENDOR_ID_DOCTORS_CENTER_HEMATOLOGY_ONCOLOGY_GROUP_BAYAMON_PSC = 45292\nVENDOR_ID_TRANSPORT_NETWORK_LLC = 45293\nVENDOR_ID_ANEAC_CO_LTD = 45294\nVENDOR_ID_BTT_BILGI_TEKNOLOJI_TASARIM_LTD = 45295\nVENDOR_ID_MAZARS = 45296\nVENDOR_ID_T_21_TECHNOLOGIES_LLC = 45297\nVENDOR_ID_ALEA_SRL = 45298\nVENDOR_ID_AMRTEC_TECNOLOGIA_IMPORTAO_E_EXPORTAO_LTDA = 45299\nVENDOR_ID_WATCHDOX_LTD = 45300\nVENDOR_ID_DOUBLE_B_BUSINESS_SRO = 45301\nVENDOR_ID_SOIN_SOLUCIONES_INTEGRALES_SA = 45302\nVENDOR_ID_INDUSTRIAL_SOFTWARE_CO = 45303\nVENDOR_ID_BYTELOGIX = 45304\nVENDOR_ID_ASYNE_INC = 45305\nVENDOR_ID_DE_CIX_MANAGEMENT_GMBH = 45306\nVENDOR_ID_TRACSIS_PLC = 45307\nVENDOR_ID_BORN_INVENTORS_BV = 45308\nVENDOR_ID_NEEDHAM_PUBLIC_SCHOOLS = 45309\nVENDOR_ID_UNIVERSIDADE_ESTADUAL_DE_SANTA_CRUZ = 45310\nVENDOR_ID_GHT_CO_LTD = 45311\nVENDOR_ID_INSTITUTO_PARA_OS_ASSUNTOS_CVICOS_E_MUNICIPAIS_MACAU = 45312\nVENDOR_ID_IIPAY_LTD = 45313\nVENDOR_ID_CCV_DEUTSCHLAND_GMBH = 45314\nVENDOR_ID_KRKA_TOVARNA_ZDRAVIL_D_D_NOVO_MESTO = 45315\nVENDOR_ID_DEVLAB = 45316\nVENDOR_ID_SAU = 45317\nVENDOR_ID_ROSA_KHUTOR_LLC = 45318\nVENDOR_ID_NGENIX = 45319\nVENDOR_ID_ACTISTUFF = 45320\nVENDOR_ID_TRIUMPH_BANCORP_INC = 45321\nVENDOR_ID_GIGAENERGY_INC = 45322\nVENDOR_ID_BIORETICS_SRL = 45323\nVENDOR_ID_BUSINESS_SOLUTIONS_ADVISER = 45324\nVENDOR_ID_ROOCH = 45325\nVENDOR_ID_YVES_DURCE_ENT = 45326\nVENDOR_ID_NATAJA_MACIEJ_KOZUCH = 45327\nVENDOR_ID_KOSHIN_DENKI_KOGYO_CO_LTD = 45328\nVENDOR_ID_KRISTIN_SCHOOL = 45329\nVENDOR_ID_FINELINE_SOLUTIONS_LTD = 45330\nVENDOR_ID_SAN_FERNANDO_VALLEY_COMMUNITY_MENTAL_HEALTH_CENTER_INC = 45331\nVENDOR_ID_EAST_SIDE_ONCOLOGY_CLINIC_PLLC = 45332\nVENDOR_ID_NEATAPPS_INC = 45333\nVENDOR_ID_NEXTYS = 45334\nVENDOR_ID_MATTHIAS_BLMEL_IT_DIENSTLEISTUNGEN = 45335\nVENDOR_ID_MICROBASE = 45336\nVENDOR_ID_VORIANET = 45337\nVENDOR_ID_TABLEAU_SOFTWARE_INC = 45338\nVENDOR_ID_JSC_HOUSING_CONSTRUCTION_SAVINGS_BANK_OF_KAZAKHSTAN = 45339\nVENDOR_ID_HALF_BAKED_SOFTWARE = 45340\nVENDOR_ID_NEXT_SRL = 45341\nVENDOR_ID_IWD_LTD = 45342\nVENDOR_ID_THUMMAHR_GMBH = 45343\nVENDOR_ID_ZHENJIANG_COLLEGE = 45344\nVENDOR_ID_SMITHEE_SPELVIN_AGNEW_PLINGE_INC = 45345\nVENDOR_ID_VELOCLOUD_NETWORKS_INC = 45346\nVENDOR_ID_THE_CENTERS_FOR_FAMILIES_AND_CHILDREN = 45347\nVENDOR_ID_MEGVII_INC = 45348\nVENDOR_ID_VGNET_NETWORKING = 45349\nVENDOR_ID_JORDEIT = 45350\nVENDOR_ID_XPSOFT_SAS = 45351\nVENDOR_ID_AMERGINT_TECHNOLOGIES_INC = 45352\nVENDOR_ID_BRS_SISTEMAS_ELETRNICOS = 45353\nVENDOR_ID_E2G_SRL = 45354\nVENDOR_ID_STAFFORDSHIRE_POLICE = 45355\nVENDOR_ID_LIVEBLOCK_AUCTIONS_INTERNATIONAL = 45356\nVENDOR_ID_CUBENET_GMBH = 45357\nVENDOR_ID_INTEGRAL_BUSINESS_SOLUTIONS = 45358\nVENDOR_ID_ARC_INFORMATIQUE = 45359\nVENDOR_ID_VALLEY_CHRISTIAN_SCHOOL = 45360\nVENDOR_ID_OC_SOFTWARE_ENGINEERING = 45361\nVENDOR_ID_COCA_COLA_ERFRISCHUNGSGETRAENKE_AG = 45362\nVENDOR_ID_ADVANCED_TRAINING_LLC = 45363\nVENDOR_ID_TRIADE_INFORMATIONSYSTEMS_GMBH = 45364\nVENDOR_ID_OM_VINDHYAVASINI_COLLEGE_OF_IT_MANAGEMENT = 45365\nVENDOR_ID_COHERE_TECHNOLOGIES = 45366\nVENDOR_ID_SILVERTIP_MARINE_INC = 45367\nVENDOR_ID_AMIDA_TECHNOLOGY_SOLUTIONS = 45368\nVENDOR_ID_MVZ_LABOR_DR_QUADE_UND_KOLLEGEN = 45369\nVENDOR_ID_ID_TECH = 45370\nVENDOR_ID_AV_2 = 45371\nVENDOR_ID_PROFESSIONAL_SOFTWARE_DESIGN_PTY_LTD = 45372\nVENDOR_ID_SPEECH_TECHNOLOGY_CENTER_LIMITED = 45373\nVENDOR_ID_I_SOLUTIONS_HEALTH_GMBH = 45374\nVENDOR_ID_ZNUNY_GMBH = 45375\nVENDOR_ID_PT_MAHARDIKA_PUTRA_MAHKOTA = 45376\nVENDOR_ID_AIR_LIQUIDE_IT = 45377\nVENDOR_ID_BEIJING_UXSINO_SOFTWARE_COLTD = 45378\nVENDOR_ID_ICRCO_INC = 45379\nVENDOR_ID_HAPPY_CROW_ENTERPRISES_LLC = 45380\nVENDOR_ID_ICODE_GLOBAL_LLC = 45381\nVENDOR_ID_HUF_SECURE_MOBILE = 45382\nVENDOR_ID_SHARP_CORPORATION_COMMUNICATION_SYSTEMS_DIVISION = 45383\nVENDOR_ID_SERGROUP_HOLDING_EUROPE_GMBH = 45384\nVENDOR_ID_4GTSS_CORPORATION_WLL = 45385\nVENDOR_ID_PEOPLELOGIC_CORPORATION = 45386\nVENDOR_ID_NCC_GROUP_PLC = 45387\nVENDOR_ID_SSV_SOFTWARE_SYSTEMS_GMBH = 45388\nVENDOR_ID_LV = 45389\nVENDOR_ID_ALEF_MOBITECH_INC = 45390\nVENDOR_ID_PLC_GROUP = 45391\nVENDOR_ID_QUADRO_GROUP_LLC = 45392\nVENDOR_ID_OSM_GMBH = 45393\nVENDOR_ID_MANGSTOR_INC = 45394\nVENDOR_ID_SECRTARIAT_GNRAL_DE_LENSEIGNEMENT_CATHOLIQUE = 45395\nVENDOR_ID_DEJERO_LABS_INC = 45396\nVENDOR_ID_ASFINAG_MAUT_SERVICE_GMBH = 45397\nVENDOR_ID_SEGMINT_INC = 45398\nVENDOR_ID_OMEMEE_ENGINEERING_GROUP = 45399\nVENDOR_ID_CANDID_SECURITY_SOLUTIONS_LLC = 45400\nVENDOR_ID_UNITRON_NV = 45401\nVENDOR_ID_ARVET_BANK_OPERATIONS_INC = 45402\nVENDOR_ID_EXCHANGECORE_LLC = 45403\nVENDOR_ID_TIGHTVIDEO_LTD = 45404\nVENDOR_ID_LEE_COUNTY_SCHOOL_SYSTEM = 45405\nVENDOR_ID_BETEASY_PTY_LTD = 45406\nVENDOR_ID_NORTHWEST_KITS = 45407\nVENDOR_ID_OCTAVIAN_TECHNOLOGY_LTD = 45408\nVENDOR_ID_ONESOFT_TECNOLOGIA_S_A = 45409\nVENDOR_ID_ISAMBERT = 45410\nVENDOR_ID_ULTRA_ELECTRONICS_VARISYS = 45411\nVENDOR_ID_HGH_SYSTEMES_INFRAROUGES = 45412\nVENDOR_ID_GLOBAL_IQX = 45413\nVENDOR_ID_SHUYSKIY_ZAVOD_AKVARIUS_LLC = 45414\nVENDOR_ID_REPHEKA_HAITI_INC = 45415\nVENDOR_ID_CHENGDU_CHENGXUN_NETWORK_TECHNOLOGIES_CO_LTD = 45416\nVENDOR_ID_HCO_COMPUTER_PRODUCTS_DBA_ZGO_TECH_HOSTING = 45417\nVENDOR_ID_ABAST_SYSTEMS = 45418\nVENDOR_ID_PHIREPHLY_DESIGN = 45419\nVENDOR_ID_STRIKE_XII_DEVELOPMENT = 45420\nVENDOR_ID_NICO_BOEHR = 45421\nVENDOR_ID_POWERBRAND_MARKETING_GMBH = 45422\nVENDOR_ID_MATCHCOM_LLC = 45423\nVENDOR_ID_THE_GHOSH_CENTER_FOR_ONCOLOGY_HEMATOLOGY = 45424\nVENDOR_ID_KADLEC_HEALTH_SYSTEM = 45425\nVENDOR_ID_SOLTEC_TECHNOLOGY_CO_LTD = 45426\nVENDOR_ID_XIAMEN_WINER_TECHNOLOGY_COLTD = 45427\nVENDOR_ID_URTHECAST = 45428\nVENDOR_ID_INSTITUTO_FEDERAL_CATARINENSE_CAMPUS_SOMBRIO = 45429\nVENDOR_ID_ATLAS_COPCO_ROCK_DRILLS_AB_BUSINESS_AREA_MR = 45430\nVENDOR_ID_NANJING_LOPU_CO_LTD = 45431\nVENDOR_ID_CIRRATO_TECHNOLOGIES_AB = 45432\nVENDOR_ID_FINIVATION_SOFTWARE = 45433\nVENDOR_ID_ACCEL_FRONTLINE_LTD = 45434\nVENDOR_ID_CYPRUS_UNIVERSITY_OF_TECHNOLOGY = 45435\nVENDOR_ID_THALES_SERVICES_LAB_DT = 45436\nVENDOR_ID_TEOCO_CORPORATION = 45437\nVENDOR_ID_AI2M_SRL = 45438\nVENDOR_ID_ESTERLINE_BELGIUM_BVBA = 45439\nVENDOR_ID_BISS_DOO = 45440\nVENDOR_ID_SAFE_INTERNET_LLC = 45441\nVENDOR_ID_WROCAW_UNIVERSITY_OF_TECHNOLOGY = 45442\nVENDOR_ID_ARCA_SISTEMI_SCARL_2 = 45443\nVENDOR_ID_ECGLOCAL = 45444\nVENDOR_ID_KUANTIC_SAS = 45445\nVENDOR_ID_MINISTERIO_PUBLICO_DE_LA_ACUSACIN = 45446\nVENDOR_ID_SOCIETE_DU_FIGARO = 45447\nVENDOR_ID_UF_HEALTH_ONCOLOGY_BAYMEADOWS = 45448\nVENDOR_ID_BLUE_KRAIT_CONSULTING_INC = 45449\nVENDOR_ID_PARSEC_PTY_LTD = 45450\nVENDOR_ID_REBTSOFT = 45451\nVENDOR_ID_INSTITUTO_MEDICO_ALEXANDER_FLEMING = 45452\nVENDOR_ID_BANFF_CYBER_TECHNOLOGIES_PTE_LTD = 45453\nVENDOR_ID_SHANGHAI_DIGIGRID_TECHNOLOGY_COLTD = 45454\nVENDOR_ID_JOHN_WASON = 45455\nVENDOR_ID_GALAXIA_ELECTRONICS_CO_LTD = 45456\nVENDOR_ID_KANTON_THURGAU = 45457\nVENDOR_ID_VKBIT_BETRIEB_GMBH = 45458\nVENDOR_ID_LONIX_OY = 45459\nVENDOR_ID_COMFACT_AB = 45460\nVENDOR_ID_POCOS_BV = 45461\nVENDOR_ID_DELVAG_LUFTFAHRTVERSICHERUNGS_AG = 45462\nVENDOR_ID_FEDERAL_PUBLIC_SERVICE_JUSTICE_BELGIUM = 45463\nVENDOR_ID_VERBAND_CHRISTLICHER_PFADFINDERINNEN_UND_PFADFINDER_IN_WRTTEMBERG = 45464\nVENDOR_ID_CLEAR2PAY_NV_SA = 45465\nVENDOR_ID_PIXEL_SP_Z_OO = 45466\nVENDOR_ID_VIDAT = 45467\nVENDOR_ID_AVI_NETWORKS = 45468\nVENDOR_ID_IQ_MESSENGER = 45469\nVENDOR_ID_AZIENDA_OSPEDALIERO_UNIVERSITARIA_DI_BOLOGNA = 45470\nVENDOR_ID_TRIANGLE_WHOLEFOODS_COLLECTIVE_LTD = 45471\nVENDOR_ID_EBEE_SMART_TECHNOLOGIES_GMBH = 45472\nVENDOR_ID_EXCELFORE_CORPORATION = 45473\nVENDOR_ID_HFMT_HAMBURG = 45474\nVENDOR_ID_MEYTEC_GMBH = 45475\nVENDOR_ID_STREAMVUE_LTD = 45476\nVENDOR_ID_ZOO_DIGITAL_GROUP_PLC = 45477\nVENDOR_ID_DIVA_IT_SIA = 45478\nVENDOR_ID_PXP_SOLUTIONS_LTD = 45479\nVENDOR_ID_PACKETWERK_GMBH = 45480\nVENDOR_ID_GALORE_NETWORKS_PRIVATE_LIMITED = 45481\nVENDOR_ID_ST_JUDE_MEDICAL = 45482\nVENDOR_ID_FUSIONLAYER_INC = 45483\nVENDOR_ID_SIAMA_SYSTEMS_INC = 45484\nVENDOR_ID_SCUBI = 45485\nVENDOR_ID_ACSS_COMMUNICATIONS_PTY_LTD = 45486\nVENDOR_ID_POLYDATA_CORPORATE = 45487\nVENDOR_ID_KONAR = 45488\nVENDOR_ID_GROUPE_ALPHA = 45489\nVENDOR_ID_NEXPERTEAM = 45490\nVENDOR_ID_GAINDE_2000 = 45491\nVENDOR_ID_CONNEXIN_SOFTWARE_INC = 45492\nVENDOR_ID_MEDIA_SYSTEM_TECHNOLOGIES_SRL = 45493\nVENDOR_ID_GISTEC = 45494\nVENDOR_ID_KONNEKA_INFORMATION_TECHNOLOGIES_FORMERLY_KONNEKA_BILGI_VE_ILETISIM_TEKNOLOJILERI_IMALAT_TIC_LTD_STI = 45495\nVENDOR_ID_GROUPE_ESB = 45496\nVENDOR_ID_QUCELL = 45497\nVENDOR_ID_NOVELLA_R_SIA = 45498\nVENDOR_ID_JANOS = 45499\nVENDOR_ID_VIRGIN_TECHNOLOGIES_INC = 45500\nVENDOR_ID_MICRO_INSTRUMENTS = 45501\nVENDOR_ID_NTERRA_INTEGRATION_GMBH = 45502\nVENDOR_ID_42_SOLUTIONS_BV = 45503\nVENDOR_ID_SYNAPTIVE_MEDICAL_INC = 45504\nVENDOR_ID_TOX_FOUNDATION = 45505\nVENDOR_ID_MIDA_SOLUTIONS_SRL = 45506\nVENDOR_ID_IMAPDATACOM = 45507\nVENDOR_ID_STRICH_LABS = 45508\nVENDOR_ID_YOURMEMBERSHIP = 45509\nVENDOR_ID_BBMRI_ERIC = 45510\nVENDOR_ID_COGENT_TECHNOLOGIES_LIMITED = 45511\nVENDOR_ID_ENTERGATE_AB = 45512\nVENDOR_ID_HEKATRON_TECHNIK_GMBH = 45513\nVENDOR_ID_SHENZHEN_SNMP_LINK_ELECTRONICS_CO_LTD = 45514\nVENDOR_ID_ECONOCOM_OSIATIS = 45515\nVENDOR_ID_VALID_SOLUCIONES_TECNGICAS_SAU = 45516\nVENDOR_ID_GARANTPLUS_LTD = 45517\nVENDOR_ID_MACNICA_INC = 45518\nVENDOR_ID_DIAMEDICA_SP_Z_OO = 45519\nVENDOR_ID_ACTILITY = 45520\nVENDOR_ID_OPENBASE = 45521\nVENDOR_ID_XIPKIORG = 45522\nVENDOR_ID_RFE_BROADCAST_SRL = 45523\nVENDOR_ID_ADVANCAPP = 45524\nVENDOR_ID_UBIQAM_LTD = 45525\nVENDOR_ID_SNAPPER_SERVICES = 45526\nVENDOR_ID_DIEHL_AKO_STIFTUNG_CO_KG = 45527\nVENDOR_ID_JOERG_PETER_HEMPEL = 45528\nVENDOR_ID_VISHMAILNET = 45529\nVENDOR_ID_MEDIEN_SERVICE_UNTERMAIN_GMBH = 45530\nVENDOR_ID_MADA = 45531\nVENDOR_ID_INFINICORE_INC = 45532\nVENDOR_ID_RED_ARROW_SOUTHAMPTON_GROUP_LIMITED = 45533\nVENDOR_ID_WESTNET = 45534\nVENDOR_ID_INFORMATION_SYSTEMS_DYNAMICS = 45535\nVENDOR_ID_RHEINMETALL_DEFENCE_ELECTRONICS_GMBH = 45536\nVENDOR_ID_NUAZ = 45537\nVENDOR_ID_PHARMAGEST_INTERACTIVE = 45538\nVENDOR_ID_DOMAIN_FRITZEORG = 45539\nVENDOR_ID_RUEVAL_SA = 45540\nVENDOR_ID_SCHNEIDER_ELEKTRONIK_GMBH = 45541\nVENDOR_ID_ORLANDO_UTILITIES_COMMISSION = 45542\nVENDOR_ID_MEKANSAL_YAZILIM = 45543\nVENDOR_ID_IT_KIMMIG = 45544\nVENDOR_ID_ORMAZABAL = 45545\nVENDOR_ID_SECUWAVE_CO_LT = 45546\nVENDOR_ID_WIRTGEN_CHINA_MACHINERY_CO_LTD = 45547\nVENDOR_ID_ASIAN_HOPE_INC = 45548\nVENDOR_ID_SHENZHEN_ZONTELE_TECHNOLOGIES_CO_LTD = 45549\nVENDOR_ID_WEBSTUDIO_INFORMATION_TECHNOLOGY_INC = 45550\nVENDOR_ID_VIPP = 45551\nVENDOR_ID_UNISYS = 45552\nVENDOR_ID_GE_HEALTHCARE_ENGINEERING = 45553\nVENDOR_ID_GRUPO_JAMPIG_SAS = 45554\nVENDOR_ID_RDP = 45555\nVENDOR_ID_TRIADIC_INDUSTRIES_LLC = 45556\nVENDOR_ID_SHENZHEN_CAN_TECHNOLOGY_COLTD = 45557\nVENDOR_ID_CJSC_GROUP_OF_COMPANIES_RENOVA = 45558\nVENDOR_ID_PREVOTY_INC = 45559\nVENDOR_ID_INOVAPAR_SOLUES_LTDA = 45560\nVENDOR_ID_MASTERCLOCK_INC = 45561\nVENDOR_ID_CAPELLA_AEROSPACE_SYSTEMS_ENGINEERING_INC = 45562\nVENDOR_ID_SOMNOMEDICS_GMBH = 45563\nVENDOR_ID_BEIJING_SPLENDIDTEL_COLTD = 45564\nVENDOR_ID_INTERBYSS_SRL = 45565\nVENDOR_ID_INTELMA_CONSULTING_INC = 45566\nVENDOR_ID_TICOM_GEOMATICS_INC = 45567\nVENDOR_ID_GOCARDLESS_LTD = 45568\nVENDOR_ID_CORE_NETWORK_DYNAMICS = 45569\nVENDOR_ID_IQ_TEL_DOO = 45570\nVENDOR_ID_MIDFIN_SYSTEMS = 45571\nVENDOR_ID_AWELTEN = 45572\nVENDOR_ID_WESTERN_MICHIGAN_UNIVERSITY_HOMER_STRYKER_MD_SCHOOL_OF_MEDICINE = 45573\nVENDOR_ID_HELLEA_SPRL = 45574\nVENDOR_ID_CHINA_BEIJING_STEGOSAURUS_TECHNOLOGY_LABORATORY = 45575\nVENDOR_ID_HULU_LLC = 45576\nVENDOR_ID_SHENZHEN_SUNDRAY_TECHNOLOGIES_COMPANY_LIMITED = 45577\nVENDOR_ID_BROADQUEST = 45578\nVENDOR_ID_GUANGDONG_NENKINGTECH_DEVELOPMENT_COLTD = 45579\nVENDOR_ID_DENTCAT = 45580\nVENDOR_ID_YICHUN_YILIAN_PRINT_TECH_COLTD = 45581\nVENDOR_ID_PAYSAFECARDCOM_WERTKARTEN_GMBH = 45582\nVENDOR_ID_PUMINSOFT_COLTD = 45583\nVENDOR_ID_OJSC_RIRT = 45584\nVENDOR_ID_SPACE_IMAGING_MIDDLE_EAST_SIME = 45585\nVENDOR_ID_MYTHIC_NETWORK = 45586\nVENDOR_ID_SOFTWARE_SERVICE_CENTERSICHUAN_CHANGHONG_ELECTRIC_COLTD = 45587\nVENDOR_ID_OLSPS = 45588\nVENDOR_ID_DOC_SOFT_LTD = 45589\nVENDOR_ID_MUTESAH_GENERAL_INVESTMENTS_LTD = 45590\nVENDOR_ID_SHENZHEN_SUNGREAT_COMMUNICATION_COLTD = 45591\nVENDOR_ID_JULIUS_CLINICAL = 45592\nVENDOR_ID_OPENREM = 45593\nVENDOR_ID_UNIVERSIT_IUAV_DI_VENEZIA = 45594\nVENDOR_ID_REAKTOR_23 = 45595\nVENDOR_ID_ICLOUD_INNOVATION_BEIJING_LTD = 45596\nVENDOR_ID_TESA_ASSA_ABLOY = 45597\nVENDOR_ID_MCKINNEY_INDEPENDENT_SCHOOL_DISTRICT = 45598\nVENDOR_ID_NETWORK_RADIUS_SARL = 45599\nVENDOR_ID_OX_SERVICE_AG = 45600\nVENDOR_ID_WIKIMEDIA_DEUTSCHLAND_EV = 45601\nVENDOR_ID_CORVUS_ENERGY = 45602\nVENDOR_ID_RIEKER_INC = 45603\nVENDOR_ID_BEIJING_SMARTWELL_INFOTECH_COLTD = 45604\nVENDOR_ID_WI_SUN_ALLIANCE_INC = 45605\nVENDOR_ID_CARILLON_FEDERAL_SERVICES_INC = 45606\nVENDOR_ID_SYSCO_FOODS = 45607\nVENDOR_ID_ATLAN_DYNAMIC_GROUP = 45608\nVENDOR_ID_CENTRALSCHWEIZERISCHE_KRAFTWERKE_AG = 45609\nVENDOR_ID_EAM_GMBH_CO_KG = 45610\nVENDOR_ID_EOSPACE_INC = 45611\nVENDOR_ID_UNDER_ARMOUR_CONNECTED_FITNESS = 45612\nVENDOR_ID_UNIVERSITI_MALAYSIA_TERENGGANU = 45613\nVENDOR_ID_REGED_INC = 45614\nVENDOR_ID_CITYNET = 45615\nVENDOR_ID_HEALTHCARE_INFORMATION_AND_MANAGEMENT_SYSTEM_SOCIETY_HIMSS = 45616\nVENDOR_ID_THE_INSTITUTE_OF_COMPUTATIONAL_TECHNOLOGIES_OF_THE_SIBERIAN_BRANCH_OF_THE_RUSSIAN_ACADEMY_OF_SCIENCES = 45617\nVENDOR_ID_FERDINAND_MALCHER = 45618\nVENDOR_ID_OEI_FAMILY_OFFICE = 45619\nVENDOR_ID_STEAMPUNK_ISLAND_INC = 45620\nVENDOR_ID_TYCON_SYSTEMS_INC = 45621\nVENDOR_ID_NETRIX_LLC = 45622\nVENDOR_ID_HUGHEY_PHILLIPS_LLC = 45623\nVENDOR_ID_BRAIN_SENSE = 45624\nVENDOR_ID_HAHNEFELDNET = 45625\nVENDOR_ID_SAPIENTIA_SYSTEMS = 45626\nVENDOR_ID_X_NET = 45627\nVENDOR_ID_HANFORD_DOE = 45628\nVENDOR_ID_RITRON = 45629\nVENDOR_ID_REGIONAL_MEDICAL_ONCOLOGY_CENTER = 45630\nVENDOR_ID_PERIMIND_CORPORATION = 45631\nVENDOR_ID_BR0FR = 45632\nVENDOR_ID_THE_HERSHEY_COMPANY = 45633\nVENDOR_ID_XEEMETRIC_INC = 45634\nVENDOR_ID_CORNERSTONE_HEALTH_ENABLEMENT_STRATEGIC_SOLUTIONS_LLC = 45635\nVENDOR_ID_ROBIT_SAS = 45636\nVENDOR_ID_DICKS_GARAGE = 45637\nVENDOR_ID_AVOLITES_LTD = 45638\nVENDOR_ID_CHEN_HUNG_CHEN = 45639\nVENDOR_ID_FUJITSU_TAIWAN_LTD = 45640\nVENDOR_ID_SOARNEX_TECHNOLOGY_CORPORATION = 45641\nVENDOR_ID_SITRINICS_CAMS_JSC = 45642\nVENDOR_ID_MARETON_DOO = 45643\nVENDOR_ID_TOM_MAHER = 45644\nVENDOR_ID_THINKCSC_INC = 45645\nVENDOR_ID_UK_SHARED_BUSINESS_SERVICES_LTD = 45646\nVENDOR_ID_GRANT_THORNTON_UK_LLP = 45647\nVENDOR_ID_BRIDGEWAY_SOFTWARE_INC = 45648\nVENDOR_ID_SOUSOU_INDUSTRIES = 45649\nVENDOR_ID_FIBERSYSTEM_AB = 45650\nVENDOR_ID_LAYER3_TV_INC = 45651\nVENDOR_ID_NEW_JERSEY_STATE_GOVERNMENT_OFFICE_OF_INFORMATION_TECHNOLOGY = 45652\nVENDOR_ID_COMPRESSION_SERVICES = 45653\nVENDOR_ID_LOGICVEIN_INC = 45654\nVENDOR_ID_CHUNG_HSIN_ELECTRIC_MACHINERY_MFG_CORP = 45655\nVENDOR_ID_VECTOR_V_LAW_FIRM = 45656\nVENDOR_ID_SYNCBAK = 45657\nVENDOR_ID_P3_GMBH_CO_KG = 45658\nVENDOR_ID_LPO_OUI_DEV_TEAMS = 45659\nVENDOR_ID_PENTANDRA_RESEARCH_SOLUTIONS_INC = 45660\nVENDOR_ID_INSTEC_INC = 45661\nVENDOR_ID_INTELLIGENCE_AMBIANTE = 45662\nVENDOR_ID_HOCHSCHULE_MERSEBURG = 45663\nVENDOR_ID_GUANGZHOU_HUGEN_ELECTRONIC_TECHNOLOGY_CO_LTD = 45664\nVENDOR_ID_BIROTEH_LTD = 45665\nVENDOR_ID_EBIID_PRODUCT_AND_SOLUTIONS_SL = 45666\nVENDOR_ID_SINGLE_DIGITS = 45667\nVENDOR_ID_MIDWEST_MICROWAVE_SOLUTIONS_INC = 45668\nVENDOR_ID_CBR_SYSTEMS_LIMITED = 45669\nVENDOR_ID_TCC_CONSTRUCTION = 45670\nVENDOR_ID_NICK_SVERDEL = 45671\nVENDOR_ID_HARVL = 45672\nVENDOR_ID_SMITH_NEPHEW = 45673\nVENDOR_ID_REDBIRD_ADVANCED_LEARNING_LLC = 45674\nVENDOR_ID_EVOLVE_IP_LLC = 45675\nVENDOR_ID_OCHIN = 45676\nVENDOR_ID_PARASHIFT = 45677\nVENDOR_ID_DEPARTMENT_OF_PRIMARY_INDUSTRIES_AND_MINES = 45678\nVENDOR_ID_AGR_ABFALLENTSORGUNGS_GESELLSCHAFT_RUHRGEBIET_MBH = 45679\nVENDOR_ID_ORISOFT = 45680\nVENDOR_ID_POLSKA_SPOLKA_GAZOWNICTWA_SP_Z_OO = 45681\nVENDOR_ID_MICHIGAN_EDUCATION_SPECIAL_SERVICES_ASSOCIATION = 45682\nVENDOR_ID_FLEXPAY_AB_BENIFY = 45683\nVENDOR_ID_INGENIEURBRO_DBON = 45684\nVENDOR_ID_ALLCREATOR_CO_LTD = 45685\nVENDOR_ID_RATEL_TECHNOLOGIES = 45686\nVENDOR_ID_ONEM2M = 45687\nVENDOR_ID_LIMONE_FRESCO_LIMITED = 45688\nVENDOR_ID_EVOLVEUM = 45689\nVENDOR_ID_BITBONE_AG = 45690\nVENDOR_ID_JAVACRAFT_LLC = 45691\nVENDOR_ID_DANTHERM_POWER_A_S = 45692\nVENDOR_ID_ARVATO_SYSTEMS_S4M_GMBH = 45693\nVENDOR_ID_COMVERGENCE_PTY_LTD = 45694\nVENDOR_ID_CHAPS_SPOL_S_RO = 45695\nVENDOR_ID_MITCHEL_BERBERICH_SOFTWARE_GMBH = 45696\nVENDOR_ID_COMPUTER_SCIENCES_CORPORATION_3 = 45697\nVENDOR_ID_E_KENT_TEKNOLOJI_VE_ODEME_SISTEMLERI_SAN_VE_TIC_AS = 45698\nVENDOR_ID_HIREKU_INC = 45699\nVENDOR_ID_TRANSYLVANIA_UNIVERSITY = 45700\nVENDOR_ID_INTEGRACORE_LLC = 45701\nVENDOR_ID_CHINA_TRANSINFO_TECHNOLOGY = 45702\nVENDOR_ID_GEMEINDEWERKE_GA_PA = 45703\nVENDOR_ID_LANDSTINGET_I_KALMAR_LN = 45704\nVENDOR_ID_FINT_AB = 45705\nVENDOR_ID_BLUER_MEDICAL_TECHNOLOGY = 45706\nVENDOR_ID_ITCEG_SAS = 45707\nVENDOR_ID_LIVELY_ARTS_PRODUCTIONS_LLC = 45708\nVENDOR_ID_SEIBELS = 45709\nVENDOR_ID_MOBIE_OY = 45710\nVENDOR_ID_MATRIX_ELECTRONICA_SL = 45711\nVENDOR_ID_SERFIM_TIC_FORMERLY_SERELEC_SAS = 45712\nVENDOR_ID_CONSULDATA_ADVISORS_DI_MASSIMO_DEL_BARBA = 45713\nVENDOR_ID_LOGITRAVEL_SL = 45714\nVENDOR_ID_EMPRESA_MUNICIPAL_DE_INFORMTICA_SA_IPLANRIO = 45715\nVENDOR_ID_ARGE_RUNDFUNK_BETRIEBSTECHNIK = 45716\nVENDOR_ID_SENSU_ENTERPRISE = 45717\nVENDOR_ID_TJH_SYSTEMS_PTY_LIMITED = 45718\nVENDOR_ID_INQOOL_AS = 45719\nVENDOR_ID_CHAOS_COMPUTER_CLUB_MAINZ_EV = 45720\nVENDOR_ID_SHENZHEN_SONTU_MEDICAL_IMAGING_EQUIPMENT_COLTD = 45721\nVENDOR_ID_HAMBURG_PORT_AUTHORITY_AOER = 45722\nVENDOR_ID_CIRRENT = 45723\nVENDOR_ID_FIDO_ALLIANCE_INC = 45724\nVENDOR_ID_ABB_XIAMEN_LOW_VOLTAGE_EQUIPMENT_COLTD = 45725\nVENDOR_ID_ECAVA_SDN_BHD = 45726\nVENDOR_ID_HDWIFI_TECHNOLOGIES = 45727\nVENDOR_ID_JUNOTELE_SOLUTIONS_PVT_LTD = 45728\nVENDOR_ID_ROEDL_IT_OPERATION_GMBH = 45729\nVENDOR_ID_GENEBERG = 45730\nVENDOR_ID_WOOBE_SAS = 45731\nVENDOR_ID_TIM_AG_2 = 45732\nVENDOR_ID_FRANK_WAGNER_HOLDING_HANSEATISCHE_MANAGEMENT_GMBH = 45733\nVENDOR_ID_STARNET_SRO = 45734\nVENDOR_ID_EASYSET = 45735\nVENDOR_ID_UTILISOFT_LTD = 45736\nVENDOR_ID_SHAH_NETWORKCOM = 45737\nVENDOR_ID_ASPIRATIONAL_COGNITION_LLC = 45738\nVENDOR_ID_WINFONETEU = 45739\nVENDOR_ID_CIRRUS_IDENTITY_INC = 45740\nVENDOR_ID_ENTENSYS = 45741\nVENDOR_ID_IMAGEWARE_COMPONENTS_GMBH = 45742\nVENDOR_ID_FIBERLAB = 45743\nVENDOR_ID_GGEXO = 45744\nVENDOR_ID_CARE_ZONE_INC = 45745\nVENDOR_ID_UNIVERSITY_OF_ROCHESTER_MEDICAL_CENTER = 45746\nVENDOR_ID_WUHAN_RUI_YING_TONG_NETWORK_TECHNOLOGY_CO_LTDCHINA = 45747\nVENDOR_ID_THGA_METERINGSERVICE_GMBH = 45748\nVENDOR_ID_EVOLVING_MODELS = 45749\nVENDOR_ID_GERTHOUX = 45750\nVENDOR_ID_HIBERNATING_RHINOS = 45751\nVENDOR_ID_CONNECT_EDV_VERTRIEBS_GMBH = 45752\nVENDOR_ID_WINTERDRACHEDE = 45753\nVENDOR_ID_VOIPOTAGO_LTD = 45754\nVENDOR_ID_2MEMORY_LTD = 45755\nVENDOR_ID_MICROLAB_SYSTEMS = 45756\nVENDOR_ID_FUCOM = 45757\nVENDOR_ID_IPCOMM_GMBH = 45758\nVENDOR_ID_SIGNICAT_AS = 45759\nVENDOR_ID_KOVE_IO_INC = 45760\nVENDOR_ID_CELAB_COMMUNICATIONS_AB = 45761\nVENDOR_ID_PLATAN_SPKA_Z_OGRANICZON_ODPOWIEDZIALNOCI_SPK = 45762\nVENDOR_ID_EMG_SYSTEMS_SP_Z_OO = 45763\nVENDOR_ID_CH_DES_PAYS_DE_MORLAIX = 45764\nVENDOR_ID_NOHLEU = 45765\nVENDOR_ID_SERVAL_CA = 45766\nVENDOR_ID_SUCCEED_MANAGEMENT_SOLUTIONS_LLC = 45767\nVENDOR_ID_TELECOMS_FORENSICS_EQUIPMENT_LTD = 45768\nVENDOR_ID_FARM_HOUSE_TECHNOLOGIES_LLC = 45769\nVENDOR_ID_DIGITAL_LOGGERS_INC = 45770\nVENDOR_ID_WEATHERLIGHTSCOM = 45771\nVENDOR_ID_TAURES_GESELLSCHAFT_FR_INVESTMENTBERATUNG_MBH = 45772\nVENDOR_ID_LIEBHERR_IT_SERVICES_GMBH = 45773\nVENDOR_ID_SHS_SERVICES_GMBH = 45774\nVENDOR_ID_TORNADO_NETWORK_OPERATING_SYSTEM = 45775\nVENDOR_ID_BELDEN_DEUTSCHLAND_GMBH = 45776\nVENDOR_ID_FINGERPRINT_TECHNOLOGIES_SAS = 45777\nVENDOR_ID_EXP_SERVICES_INC = 45778\nVENDOR_ID_MOSAIC_LIFE_CARE_AT_ST_JOSEPH_MEDICAL_ONCOLOGY = 45779\nVENDOR_ID_NORSK_SYKEPLEIERFORBUND = 45780\nVENDOR_ID_MASARYK_MEMORIAL_CANCER_INSTITUTE = 45781\nVENDOR_ID_METACORES_SP_Z_OO = 45782\nVENDOR_ID_TEKIN = 45783\nVENDOR_ID_NOVARAD_CORP = 45784\nVENDOR_ID_BANGJ_LLC = 45785\nVENDOR_ID_SAT_AN_CABLENET_SE = 45786\nVENDOR_ID_WISTE = 45787\nVENDOR_ID_AGUSTUS_AHAB_INC = 45788\nVENDOR_ID_VICON = 45789\nVENDOR_ID_CRYSTAL_GMBH = 45790\nVENDOR_ID_NEOS_VENTURES_GMBH = 45791\nVENDOR_ID_FLOHR_IT = 45792\nVENDOR_ID_JOINT_STOCK_COMPANY_PK_KUPCHINO = 45793\nVENDOR_ID_SAFE_CREATIVE = 45794\nVENDOR_ID_PRIMO1D_SA = 45795\nVENDOR_ID_UMEA_MUNICIPALITY = 45796\nVENDOR_ID_VIETTEL_GROUP = 45797\nVENDOR_ID_ENOVAE_BV = 45798\nVENDOR_ID_CSAW_BV = 45799\nVENDOR_ID_ZORGDOC_NEDERLAND_BV = 45800\nVENDOR_ID_TARASOFT_SRL = 45801\nVENDOR_ID_UBEE_INTERACTIVE_CORP = 45802\nVENDOR_ID_NETCRUZ_INC = 45803\nVENDOR_ID_ERICA = 45804\nVENDOR_ID_OCMW_TEMSE = 45805\nVENDOR_ID_GENEALOGIECOM = 45806\nVENDOR_ID_STARBUCKS_COFFEE_COMPANY = 45807\nVENDOR_ID_GLOBAL_TECNOLOGIA_LTDA = 45808\nVENDOR_ID_BEIJING_MIPAY_TECHNOLOGY_CO_LTD = 45809\nVENDOR_ID_BINARY_ROCK = 45810\nVENDOR_ID_ISTVAN_PUZSAR_EV = 45811\nVENDOR_ID_ILOCA_SERVICES_INC = 45812\nVENDOR_ID_PI_97_BT = 45813\nVENDOR_ID_WAUKESHA_PEARCE_INDUSTRIES_INC = 45814\nVENDOR_ID_SOURCEWISE = 45815\nVENDOR_ID_BRUCE_R_SMITH_LIMITED = 45816\nVENDOR_ID_INACOMP_CONSULTORES_SA = 45817\nVENDOR_ID_PASSAIC_COUNTY_TECHNICAL_INSTITUTE = 45818\nVENDOR_ID_SVEN_ANDERS = 45819\nVENDOR_ID_PROFIPRINT_SPOL_S_RO = 45820\nVENDOR_ID_21ST_CENTURY_ONCOLOGY_LLC_GABRIEL_DOMENECH_MD = 45821\nVENDOR_ID_LES_AMBASSADEURS_CLUB = 45822\nVENDOR_ID_ORIENT_TECHNOLOGIES_LTD = 45823\nVENDOR_ID_SYSTEM_ONE_NOC_DEVELOPMENT_SOLUTIONS = 45824\nVENDOR_ID_ONE_CLICK_SOFTWORKS = 45825\nVENDOR_ID_SINGLEWIRE_SOFTWARE_LLC = 45826\nVENDOR_ID_BEIJING_JN_TASS_TECHNOLOGY_COLTD = 45827\nVENDOR_ID_KANHAN_TECHNOLOGIES_LIMITED = 45828\nVENDOR_ID_PREIS24DE_GMBH = 45829\nVENDOR_ID_IMTECH_TRAFFIC_INFRA_UK_LTD = 45830\nVENDOR_ID_ARGO_TECHNOLOGIE_SA = 45831\nVENDOR_ID_I_ROSE_DOO = 45832\nVENDOR_ID_HOFFMANN_FOERDERTECHNIK_GMBH = 45833\nVENDOR_ID_TIETO_FINLAND_OY = 45834\nVENDOR_ID_TANGARA_TAGENTIS_INC = 45835\nVENDOR_ID_VARONIS_SYSTEM_INC = 45836\nVENDOR_ID_ORAGEIO = 45837\nVENDOR_ID_BELIMO_AUTOMATION_AG = 45838\nVENDOR_ID_NETEVEN = 45839\nVENDOR_ID_LESTER_ELECTRICAL_OF_NEBRASKA_INC = 45840\nVENDOR_ID_SYSTEM_ONE_NOC_DEVELOPMENT_SOLUTIONS_SA = 45841\nVENDOR_ID_ANDREW_STEMEN = 45842\nVENDOR_ID_WEBNET_BROADBAND = 45843\nVENDOR_ID_UWE_STOPPEL = 45844\nVENDOR_ID_ECHOPIXEL_INC = 45845\nVENDOR_ID_STORPOOL_STORAGE_AD = 45846\nVENDOR_ID_COMPUTERTEL_LTD = 45847\nVENDOR_ID_VISHMAIL = 45848\nVENDOR_ID_MMCVEN_MAIL = 45849\nVENDOR_ID_ETERNITYS_TOUCH_INC = 45850\nVENDOR_ID_UNFALLKASSE_BADEN_WUERTTEMBERG = 45851\nVENDOR_ID_MIAMI_HEMATOLOGY_AND_ONCOLOGY_ASSOCIATES = 45852\nVENDOR_ID_JAGUAR_LAND_ROVER_LIMITED = 45853\nVENDOR_ID_CELL_TECHNOLOGY_LTD = 45854\nVENDOR_ID_INTRACOM_ASIA_CO_LTD = 45855\nVENDOR_ID_MIE_PREFECTURAL_GOVERNMENT = 45856\nVENDOR_ID_KAILOW_GRAPHIC_A_S = 45857\nVENDOR_ID_CIFERNET_INC = 45858\nVENDOR_ID_PYLONET = 45859\nVENDOR_ID_EXEL_TECHNOLOGY_GROUP = 45860\nVENDOR_ID_RESEARCH_ASSOCIATES_OF_SYRACUSE_INC = 45861\nVENDOR_ID_APOST_LTD = 45862\nVENDOR_ID_LA_FOLIE_BOUTIQUE = 45863\nVENDOR_ID_DIRECTION_GENERALE_DE_LEDUCATION_ET_DES_ENSEIGNEMENTS = 45864\nVENDOR_ID_SHOUEI_ELECTRICCO = 45865\nVENDOR_ID_GLOBALPME = 45866\nVENDOR_ID_LUKOIL_BULGARIA_LTD = 45867\nVENDOR_ID_SKYWIRE_TECHNOLOGIES = 45868\nVENDOR_ID_POET_GMBH = 45869\nVENDOR_ID_FRAUNHOFER_INSTITUTE_FOR_SECURE_INFORMATION_TECHNOLOGY_SIT = 45870\nVENDOR_ID_FATECH_ELECTRONIC = 45871\nVENDOR_ID_INSTITUT_NATIONAL_DE_LAUDIOVISUEL = 45872\nVENDOR_ID_INSTITUTO_FEDERAL_CATARINENSE = 45873\nVENDOR_ID_COENCORP = 45874\nVENDOR_ID_EDWARD_H_KAPLANMD_AND_ASSOC = 45875\nVENDOR_ID_JETSON_SYSTEMS_LLC = 45876\nVENDOR_ID_INTELLIGENT_HOMES = 45877\nVENDOR_ID_VESPERALEU = 45878\nVENDOR_ID_UNIVERSIT_DE_LILLE = 45879\nVENDOR_ID_WEST_WARD_PHARMACEUTICALS_CORP = 45880\nVENDOR_ID_2LCONSULT = 45881\nVENDOR_ID_GLOBAL_VOICE_GROUP_SA = 45882\nVENDOR_ID_EAGLEBURGMANN_GERMANY_GMBH_CO_KG = 45883\nVENDOR_ID_AUTHCLUB_INC = 45884\nVENDOR_ID_CESBO_LTD = 45885\nVENDOR_ID_CONNECT_OMSK_LTD = 45886\nVENDOR_ID_ARKE_TELEKOM_LTD_STI = 45887\nVENDOR_ID_JAWSET_VISUAL_COMPUTING = 45888\nVENDOR_ID_TECHMIC_ELECTRONICS = 45889\nVENDOR_ID_SYS_CITY_CO_LTD = 45890\nVENDOR_ID_PANDORA_A_S = 45891\nVENDOR_ID_COMBINATION_AB = 45892\nVENDOR_ID_PSTECH = 45893\nVENDOR_ID_SYSADMIN_CR_SOCIEDAD_ANONIMA = 45894\nVENDOR_ID_SYSADMIN_CR_SOCIEDAD_ANONIMA_2 = 45895\nVENDOR_ID_PAPERLESS_PIPELINE_LLC = 45896\nVENDOR_ID_M_H_CORBIN_INC = 45897\nVENDOR_ID_KEYLOGIC_AB = 45898\nVENDOR_ID_CASWELL_INC = 45899\nVENDOR_ID_WEBER_SCHRAUBAUTOMATEN_GMBH = 45900\nVENDOR_ID_KELLERMAN_NETWORKS = 45901\nVENDOR_ID_KELLERMAN_NETWORKS_2 = 45902\nVENDOR_ID_DACHSBAU = 45903\nVENDOR_ID_NATIONAL_FOODS_LTD = 45904\nVENDOR_ID_OBIHAI_TECHNOLOGY_INC = 45905\nVENDOR_ID_SELINKO_SA = 45906\nVENDOR_ID_POLYVIRTUAL_CORPORATION = 45907\nVENDOR_ID_ITDO_INC = 45908\nVENDOR_ID_SHENZHEN_ANKKI_TECHNOLOGIES_CO_LTD = 45909\nVENDOR_ID_HAIYI = 45910\nVENDOR_ID_SYNERMED_LABS = 45911\nVENDOR_ID_UNIVERSITAS_BRAWIJAYA = 45912\nVENDOR_ID_M2_GROUP_PTY_LTD = 45913\nVENDOR_ID_CETERA_FINANCIAL_GROUP = 45914\nVENDOR_ID_PROMONLOGICALIS = 45915\nVENDOR_ID_QUEST_PAYMENT_SYSTEMS = 45916\nVENDOR_ID_NFRI = 45917\nVENDOR_ID_NETWORK_CANARY = 45918\nVENDOR_ID_PLANEVISION_SYSTEMS_GMBH = 45919\nVENDOR_ID_HUMBLE_CARRIER = 45920\nVENDOR_ID_MINISTRY_OF_AGRICULTURE_LATVIA = 45921\nVENDOR_ID_DUNANET_DEVICEMANAGEMENT_LLC = 45922\nVENDOR_ID_TVN_SA = 45923\nVENDOR_ID_NOU_IPAP = 45924\nVENDOR_ID_MPS_GMBH = 45925\nVENDOR_ID_OPENZABCOM = 45926\nVENDOR_ID_AHSAY_SYSTEMS_CORPORATION_LIMITED = 45927\nVENDOR_ID_MORU_INDUSTRIAL_SYSTEMS_COLTD = 45928\nVENDOR_ID_PLUM_SP_Z_OO = 45929\nVENDOR_ID_LANDWIRTSCHAFTSKAMMER_NIEDERSACHSEN = 45930\nVENDOR_ID_PATTERSON_COMPANIES = 45931\nVENDOR_ID_WALCOE = 45932\nVENDOR_ID_KURATORIUM_FR_DIALYSE_UND_NIERENTRANSPLANTATION_EV = 45933\nVENDOR_ID_FIBER_MOUNTAIN_INC = 45934\nVENDOR_ID_MAIN_LINE_ONCOLOGY_HEMATOLOGY_ASSOCIATES = 45935\nVENDOR_ID_DAS_KOMMUNALUNTERNEHMEN_DES_LANDKREISES_WUERZBURG = 45936\nVENDOR_ID_M_C_ENTERPRISES_LTD = 45937\nVENDOR_ID_INTELLIGENT_VISIBILITY_INC = 45938\nVENDOR_ID_TRIMET_SA = 45939\nVENDOR_ID_BECKMAN_LIBRARY = 45940\nVENDOR_ID_PAPA_MALICK_MBOW = 45941\nVENDOR_ID_EZVOICE_TELECOM = 45942\nVENDOR_ID_LONDELEC_UK_LTD = 45943\nVENDOR_ID_IT_TELECOM_COLTD = 45944\nVENDOR_ID_FRIEDRICH_VON_BODELSCHWINGH_SCHULE = 45945\nVENDOR_ID_DYNEXO_GMBH = 45946\nVENDOR_ID_KARTAL_BELEDIYE_BASKANLIGI = 45947\nVENDOR_ID_FITNESSFIRST_GERMANY = 45948\nVENDOR_ID_RF_ELEMENTS_SRO = 45949\nVENDOR_ID_COGO_LABS = 45950\nVENDOR_ID_RDK_MANAGEMENT_LLC = 45951\nVENDOR_ID_CTRLTECH_SA = 45952\nVENDOR_ID_CYBERDATA_CORPORATION = 45953\nVENDOR_ID_TRUVEN_HEALTH_ANALYTICS_INC = 45954\nVENDOR_ID_BIG_DADDY_GAMES_LLC = 45955\nVENDOR_ID_128_TECHNOLOGY = 45956\nVENDOR_ID_CRYPTOGRAPHIC_INFORMATION_SERVICES = 45957\nVENDOR_ID_AISUBP = 45958\nVENDOR_ID_ZHONGYUNWANGAN_TECHNOLOGY_BEIJING_COLTD = 45959\nVENDOR_ID_IMS_TU_WIEN = 45960\nVENDOR_ID_ATGEN_SOFTWARE_SOLUTIONS_LLP = 45961\nVENDOR_ID_SHOWA_TSUSHIN_KOGYO_INC = 45962\nVENDOR_ID_HHNET = 45963\nVENDOR_ID_DISPERSIVE_TECHNOLOGIES = 45964\nVENDOR_ID_ALERIS_INTERNATIONAL_INC = 45965\nVENDOR_ID_GURI_SOFTHOUSE_LTDA = 45966\nVENDOR_ID_SWAN_ANALYTISCHE_INSTRUMENTE_AG = 45967\nVENDOR_ID_PERINOVA_IT_MANAGEMENT_GMBH = 45968\nVENDOR_ID_PERINOVA_IT_MANAGEMENT_GMBH_2 = 45969\nVENDOR_ID_BTTCHER_COLLIN_GBR = 45970\nVENDOR_ID_CJSC_TRANSINFOSET = 45971\nVENDOR_ID_BAPTIST_SCHOOL_OF_HEALTH_PROFESSIONS = 45972\nVENDOR_ID_PLAYGROUND_GLOBAL = 45973\nVENDOR_ID_SPINNER_GMBH = 45974\nVENDOR_ID_SECURITIES_FINANCE_TRUST_COMPANY = 45975\nVENDOR_ID_INTEMA_COMUNICACIONES = 45976\nVENDOR_ID_PLATFORMSH = 45977\nVENDOR_ID_VISION_95_LTD = 45978\nVENDOR_ID_INTEVAC_INC = 45979\nVENDOR_ID_SNETWORK_COMMUNICATIONS_LTD = 45980\nVENDOR_ID_DROIDINACTU = 45981\nVENDOR_ID_GOLETAS = 45982\nVENDOR_ID_AIRBUS_DS_LIMITED_MIPN = 45983\nVENDOR_ID_OOO_STELS = 45984\nVENDOR_ID_CYBERSTREAM_LTD = 45985\nVENDOR_ID_KRAMER_ELECTRONICS_LTD = 45986\nVENDOR_ID_RETE_TELEMATICA_DEL_CNR_DI_PISA = 45987\nVENDOR_ID_SKYCOM = 45988\nVENDOR_ID_SKYCOM_2 = 45989\nVENDOR_ID_BRUECKNER_WERKE_KG = 45990\nVENDOR_ID_KLENK_HOLZ_AG = 45991\nVENDOR_ID_GRABEUH_CORP = 45992\nVENDOR_ID_ITSMOS = 45993\nVENDOR_ID_PRINK_SRL = 45994\nVENDOR_ID_POSTEO_EK = 45995\nVENDOR_ID_CHORA_A_S = 45996\nVENDOR_ID_COLORADO_CENTER_FOR_GYNECOLOGIC_ONCOLOGY = 45997\nVENDOR_ID_JENSEN_GROUP = 45998\nVENDOR_ID_THE_DYSONGANG = 45999\nVENDOR_ID_THIRD_LIGHT_LTD = 46000\nVENDOR_ID_VEKTRA_ADVANCED_ENGINEERING = 46001\nVENDOR_ID_6HARMONICS_INC = 46002\nVENDOR_ID_NAUTILUS_INFOTECH_CO_LTD = 46003\nVENDOR_ID_50HERTZ_TRANSMISSION_GMBH = 46004\nVENDOR_ID_SAG_SERVICES_AG_FORMERLY_SAG_INFORMATIK_AG = 46005\nVENDOR_ID_GREETZ_BV = 46006\nVENDOR_ID_AUGUSTINUM_GGMBH = 46007\nVENDOR_ID_CODAN_A_S = 46008\nVENDOR_ID_ADVANCED_HEMATOLOGY_ONCOLOGY_GROUP_OF_PR = 46009\nVENDOR_ID_WESTFALEN_WESER_NETZ_GMBH = 46010\nVENDOR_ID_CLOUDVM_INC = 46011\nVENDOR_ID_REDHOT_OOO = 46012\nVENDOR_ID_YHAT_INC = 46013\nVENDOR_ID_KCA_DEUTAG = 46014\nVENDOR_ID_PRIMOTECHSOLUTION_SRL = 46015\nVENDOR_ID_LEONTON_TECHNOLOGIES_CO_LTD = 46016\nVENDOR_ID_RESEARCH_INSTITUTE_OF_SYSTEMS_PLANNING_INC_ISP = 46017\nVENDOR_ID_THORALF_TIETBOEHL_TTCN = 46018\nVENDOR_ID_DSPG_LTD = 46019\nVENDOR_ID_CARDIO_SISTEMAS_COML_INDL_LTDA = 46020\nVENDOR_ID_THALES_BELGIUM_SA = 46021\nVENDOR_ID_DEEP_SRL = 46022\nVENDOR_ID_HIGH_DESERT_ONCOLOGY = 46023\nVENDOR_ID_WW_AFCO_STEEL_LLC = 46024\nVENDOR_ID_KAHANA_TECHNOLOGY_LLC = 46025\nVENDOR_ID_SOUTHERN_ONCOLOGY_HEMATOLOGY_ASSOCIATES = 46026\nVENDOR_ID_OFICINA_NACIONAL_DE_PROCESOS_ELECTORALES = 46027\nVENDOR_ID_PLAY_CONSULTING = 46028\nVENDOR_ID_SERENERGY_A_S = 46029\nVENDOR_ID_IRESPOND = 46030\nVENDOR_ID_TACONZA_LLC = 46031\nVENDOR_ID_ACCELSTOR_INC = 46032\nVENDOR_ID_CAVIUM_INC = 46033\nVENDOR_ID_RAMAKRISHNA_MISSION_VIVEKANANDA_UNIVERSITY = 46034\nVENDOR_ID_COMPANY_CRYPTON_LTD = 46035\nVENDOR_ID_IT_CARD_CENTRUM_TECHNOLOGII_PLATNICZYCH_SA = 46036\nVENDOR_ID_CITY_OF_PEARLAND = 46037\nVENDOR_ID_LAYER8 = 46038\nVENDOR_ID_DYNAMIST_AB = 46039\nVENDOR_ID_FREESTYLE_TECHNOLOGY_PTY_LTD = 46040\nVENDOR_ID_WB_HUNT_CO_INC = 46041\nVENDOR_ID_SPACEPATH_COMMUNICATIONS = 46042\nVENDOR_ID_ELEMENT_J = 46043\nVENDOR_ID_CLOUDBYTE = 46044\nVENDOR_ID_BYTEDANCE_LTD = 46045\nVENDOR_ID_BRANISLAV_MANIC_LAW_OFFICE = 46046\nVENDOR_ID_PAULISTA_INFORMATICA_LTD = 46047\nVENDOR_ID_ATTIVO_NETWORKS = 46048\nVENDOR_ID_SMSEAGLE = 46049\nVENDOR_ID_REMOD_OY = 46050\nVENDOR_ID_STAGE2015 = 46051\nVENDOR_ID_NEOTYS = 46052\nVENDOR_ID_AVEBE_UA = 46053\nVENDOR_ID_NBS_LTD = 46054\nVENDOR_ID_HYTERA_BROADBAND_PRODUCTS = 46055\nVENDOR_ID_OOONPF_MULTIOBRABOTKA = 46056\nVENDOR_ID_HONG_KONG_COMMUNITY_ATHLETIC_DEVELOPMENT = 46057\nVENDOR_ID_PANDA_SPORTS = 46058\nVENDOR_ID_VIDAMIN_LTD = 46059\nVENDOR_ID_CENTRAL_FLORIDA_CANCER_AND_BLOOD_CENTER = 46060\nVENDOR_ID_OGNIOS_GMBH = 46061\nVENDOR_ID_YAVEON_AG = 46062\nVENDOR_ID_BROALA = 46063\nVENDOR_ID_ADDAPPTR_GMBH = 46064\nVENDOR_ID_CANNABIS_CREDIT = 46065\nVENDOR_ID_THE_DIAMETERTECH_PROJECT = 46066\nVENDOR_ID_UNION_COLLEGE_COMPUTER_SCIENCE_DEPARTMENT = 46067\nVENDOR_ID_TAKE_TWO_INTERACTIVE_SOFTWARE_INC = 46068\nVENDOR_ID_DEUTSCHES_ROTES_KREUZ_ORTSVEREIN_SUEDLICHER_WONNEGAU_E_V = 46069\nVENDOR_ID_NDP_LLC_NVEA = 46070\nVENDOR_ID_CHISTA_LTD = 46071\nVENDOR_ID_B2B_SOFT = 46072\nVENDOR_ID_IMBASOFT = 46073\nVENDOR_ID_ROAMDATA_INC = 46074\nVENDOR_ID_FRESHMIND_SP_Z_O_O = 46075\nVENDOR_ID_EDWARD_A_EICHLER_JR_MD_PA = 46076\nVENDOR_ID_INVENTIVE_IT_SERVICES_LTD = 46077\nVENDOR_ID_BEIJING_FORCECONTROL_HUACON_TECHNOLOGY_CO_LTD = 46078\nVENDOR_ID_HM_ELECTRONICS_INC = 46079\nVENDOR_ID_YARA_SA_NV = 46080\nVENDOR_ID_INFODAS_GESELLSCHAFT_FR_SYSTEMENTWICKLUNG_UND_INFORMATIONSVERARBEITUNG_MBH = 46081\nVENDOR_ID_AVI = 46082\nVENDOR_ID_FF_COMPUTER_ANWENDUNGEN_UND_UNTERNEHMENSBERATUNG_GMBH = 46083\nVENDOR_ID_FACTORYNET_AUGUSTA_SL = 46084\nVENDOR_ID_INFORMATICA_Y_PROCESOS_DE_GESTION_SL = 46085\nVENDOR_ID_INFOTEAM_TECHNIQUE_SA = 46086\nVENDOR_ID_IT_SCHARSCHINGER = 46087\nVENDOR_ID_SYLVAINGIROD = 46088\nVENDOR_ID_DBSTUDIO = 46089\nVENDOR_ID_NAMOTRONIC_GMBH = 46090\nVENDOR_ID_ICM_UNIVERSITY_OF_WARSAW = 46091\nVENDOR_ID_INGENIEURGESELLSCHAFT_FR_GEBUDEAUTOMATION_MBH = 46092\nVENDOR_ID_SISTELBANDA_SA = 46093\nVENDOR_ID_BRAMPTON_COLLEGE = 46094\nVENDOR_ID_OTRISPROJECTS_GMBH = 46095\nVENDOR_ID_BITBERTCOM = 46096\nVENDOR_ID_IPIFONY_SYSTEMS_INC = 46097\nVENDOR_ID_ERICSSON_CANADA_INC = 46098\nVENDOR_ID_COMMUNITY_HEALTH_SYSTEMS_CHS14 = 46099\nVENDOR_ID_MAXWELL_PAPER_CANADA_INC = 46100\nVENDOR_ID_BELAR_ELECTRONICS_LABORATORY_INC = 46101\nVENDOR_ID_ART_VAN_FURNITURE_INC = 46102\nVENDOR_ID_VOIP_INTEGRATION_INC = 46103\nVENDOR_ID_TVM_CAPITAL = 46104\nVENDOR_ID_ALEXION_PHARMACEUTICALS_INC = 46105\nVENDOR_ID_1_800_CONTACTS_INC = 46106\nVENDOR_ID_MEDIVATION_INC = 46107\nVENDOR_ID_MEDIVATION_INC_2 = 46108\nVENDOR_ID_CREDOMATIC = 46109\nVENDOR_ID_SMARTTRADE_TECHNOLOGIES = 46110\nVENDOR_ID_DOCUMENT_KNOWLEDGE_BUSINESS_SOLUTIONS_DKB_SOLUTIONS_SA = 46111\nVENDOR_ID_ALL_RUSSIAN_INSTITUTE_FOR_SCIENTIFIC_AND_TECHNICAL_INFORMATION_VINITI_OF_THE_RUSSIAN_ACADEMY_OF_SCIENCES = 46112\nVENDOR_ID_THE_MOSCOW_CHAMBER_OF_ADVOCATES = 46113\nVENDOR_ID_SUMYOBLENERGO_PJSC = 46114\nVENDOR_ID_PROGI_MDIA_INC = 46115\nVENDOR_ID_CRYPTONEO = 46116\nVENDOR_ID_SMP_SOLUTIONS_GMBH = 46117\nVENDOR_ID_SWISSMEDIAPARTNERS_AG = 46118\nVENDOR_ID_EDEN_ROCK_COMMUNICATIONS_LLC = 46119\nVENDOR_ID_ALLIANCE_ELECTRONICS_LTD = 46120\nVENDOR_ID_THE_STAHURA_BRENNER_GROUP_INC = 46121\nVENDOR_ID_WRIGHTCCS = 46122\nVENDOR_ID_WIENER_BOERSE_AG = 46123\nVENDOR_ID_MICI_NETWORK_COLTD = 46124\nVENDOR_ID_CANADIAN_PACIFIC = 46125\nVENDOR_ID_BLOCKSTREAM = 46126\nVENDOR_ID_ROCK_SOLID_SOLUTIONS_LLC = 46127\nVENDOR_ID_CITY_OF_BIEL = 46128\nVENDOR_ID_MECHANICAPARK_LLC = 46129\nVENDOR_ID_INFORMA_SISTEMI_SPA = 46130\nVENDOR_ID_HACKERSPACE_KRAKW = 46131\nVENDOR_ID_AMDATU = 46132\nVENDOR_ID_OSTERMEYERDE = 46133\nVENDOR_ID_UPRAVA_ZA_INDIREKTNO_OPOREZIVANJE = 46134\nVENDOR_ID_MSS_MANAGED_SECURITY_SERVICES_GMBH = 46135\nVENDOR_ID_STEINBEIS_EMBEDDED_SYSTEMS_TECHNOLOGIES_GMBH = 46136\nVENDOR_ID_ASSOCIATION_CLANDESTINE = 46137\nVENDOR_ID_HTU_HRTETECHNIK_UHLDINGEN_MHLHOFEN_GMBH = 46138\nVENDOR_ID_BASEVENTURE_INVESTING = 46139\nVENDOR_ID_LABORATOIRE_DANALYSE_ET_DE_MATHMATIQUES_APPLIQUES = 46140\nVENDOR_ID_YSANCE = 46141\nVENDOR_ID_SHENZHEN_SINEXCEL_ELECTRIC_COLTD = 46142\nVENDOR_ID_LAZADA_TECH_HUB = 46143\nVENDOR_ID_SCHMIDT_CO_HK_LTD_TAIWAN_BRANCH = 46144\nVENDOR_ID_A_BAGGENSTOS_CO_AG = 46145\nVENDOR_ID_INFORM_GMBH = 46146\nVENDOR_ID_AMERICAN_PREPAID_VAS_LLC = 46147\nVENDOR_ID_BEIJING_YOXON_SMART_TECHNOLOGY_COLTD = 46148\nVENDOR_ID_ZAO_CITIBANK = 46149\nVENDOR_ID_SPORNKULLERDE = 46150\nVENDOR_ID_BRETT_A_LEWIS = 46151\nVENDOR_ID_MCHV_SOFTWARE = 46152\nVENDOR_ID_BUDAFONY = 46153\nVENDOR_ID_XMOB = 46154\nVENDOR_ID_TAKAOKA_TOKO_COLTD = 46155\nVENDOR_ID_SB_SYSTEMS_COLTD = 46156\nVENDOR_ID_NARI_TECHNOLOGY_CO_LTD = 46157\nVENDOR_ID_OHANAE = 46158\nVENDOR_ID_TSELINTRANSSTROY_LTD = 46159\nVENDOR_ID_GDV_DIENSTLEISTUNGS_GMBH_CO_KG = 46160\nVENDOR_ID_MOBILE_VIEWPOINT = 46161\nVENDOR_ID_TUNA_TECHNOLOGIES_LIMITED = 46162\nVENDOR_ID_NEUBERGER_GEBAEUDEAUTOMATION_GMBH = 46163\nVENDOR_ID_AS_PC_SARL = 46164\nVENDOR_ID_POLITEKNIK_NEGERI_UJUNG_PANDANG = 46165\nVENDOR_ID_JETR_CONSULTING = 46166\nVENDOR_ID_TOPTRANSLATION_GMBH = 46167\nVENDOR_ID_NEWGEN_INTERACTIVE_SOFTWARE_CORPORATION = 46168\nVENDOR_ID_INTERNATIONAL_CAPITAL_INVESTMENT_COMPANY = 46169\nVENDOR_ID_RUNETWISTER_PUBLISHING = 46170\nVENDOR_ID_HASHPLEX_INC = 46171\nVENDOR_ID_REDCELLO_LTD = 46172\nVENDOR_ID_PAYPAL_INC = 46173\nVENDOR_ID_SECULYNX_CORPORATION = 46174\nVENDOR_ID_NEWIND_SP_Z_OO = 46175\nVENDOR_ID_SENSORLINK = 46176\nVENDOR_ID_KYOSAN_ELECTRIC_MFG_CO_LTD = 46177\nVENDOR_ID_FACULTY_OF_INFORMATICS_TU_WIEN = 46178\nVENDOR_ID_PIKKATECH_SOFTWARE_DEVELOPMENT_CONSULTING = 46179\nVENDOR_ID_GABLES_ENGINEERING_INC = 46180\nVENDOR_ID_SANSCOMP = 46181\nVENDOR_ID_GOLDEN_GRID_SYSTEMS = 46182\nVENDOR_ID_DANSK_MEDICINSK_DATACENTER_APS = 46183\nVENDOR_ID_LUMENTUMCOM = 46184\nVENDOR_ID_INTELITY = 46185\nVENDOR_ID_CYONTEC_SOLUTIONS_GMBH = 46186\nVENDOR_ID_AGRAVIS_RAIFFEISEN_AG = 46187\nVENDOR_ID_MARKETFACTORY_INC = 46188\nVENDOR_ID_JOHN_CIANFARANI = 46189\nVENDOR_ID_PHOENYXCODE = 46190\nVENDOR_ID_21ST_CENTURY_ONCOLOGY_CRESTVIEW = 46191\nVENDOR_ID_TOASTCODERS = 46192\nVENDOR_ID_DISTRIBUTED_HACKER_MAKER_NETWORK_INC = 46193\nVENDOR_ID_REPICA_INC = 46194\nVENDOR_ID_SDC_WORLD_GROUP_CO = 46195\nVENDOR_ID_NARODOWY_FUNDUSZ_OCHRONY_SRODOWISKA_I_GOSPODARKI_WODNEJ = 46196\nVENDOR_ID_TELENSA_LIMITED = 46197\nVENDOR_ID_EQUINOX_HOLDINGS_LLC = 46198\nVENDOR_ID_DENTSPLY_INTERNATIONAL = 46199\nVENDOR_ID_MATTHEW_MARTIN = 46200\nVENDOR_ID_BUSINESS_TELECOMMUNICATIONS_SERVICES_EUROPE = 46201\nVENDOR_ID_AVIGILON_CORPORATION = 46202\nVENDOR_ID_STRICTLY_MONITORING_LIMITED = 46203\nVENDOR_ID_HUTCHISON_DREI_AUSTRIA_GMBH = 46204\nVENDOR_ID_MIT_DYNAMIC_TECHNOLOGIES_LIMITED = 46205\nVENDOR_ID_STAMM = 46206\nVENDOR_ID_KASISTO_INC = 46207\nVENDOR_ID_KNJAZ_MILOS_AD = 46208\nVENDOR_ID_DEEPIN = 46209\nVENDOR_ID_SHANGHAI_KOAL_SOFTWARE = 46210\nVENDOR_ID_FERNFACHHOCHSCHULE_SCHWEIZ_FFHS = 46211\nVENDOR_ID_E2E_SATCOM_LIMITED = 46212\nVENDOR_ID_ATMOS_SISTEMAS_LTDA = 46213\nVENDOR_ID_COGIT_MATIDA_UK_LTD = 46214\nVENDOR_ID_SHANDONG_SENTER_ELECTRONIC_CO_LTD = 46215\nVENDOR_ID_ROCKEN_AM_BROCKEN_UG = 46216\nVENDOR_ID_VINCI_ENERGIES_SCHWEIZ_AG = 46217\nVENDOR_ID_SILVERTOURS_GMBH = 46218\nVENDOR_ID_MIGROS_BANK_AG = 46219\nVENDOR_ID_MINISTRIO_PBLICO_DO_ESTADO_DE_SANTA_CATARINA = 46220\nVENDOR_ID_ICONECTIV = 46221\nVENDOR_ID_ON_IP_46_LIMITED = 46222\nVENDOR_ID_CYBER_MEDICAL_IMAGING_INC = 46223\nVENDOR_ID_INNER_RANGE_PTY_LTD = 46224\nVENDOR_ID_TEHASDFCOM = 46225\nVENDOR_ID_APIGEE_CORPORATION = 46226\nVENDOR_ID_GUANGXI_RADIO_AND_TELEVISION_INFORMATION_NETWORK_CORPORATION_LIMITED = 46227\nVENDOR_ID_NIKKO_GRAPHIC_ARTS_COLTD = 46228\nVENDOR_ID_IGUS_GMBH = 46229\nVENDOR_ID_CLEVERLANCE_ENTERPRISE_SOLUTIONS_AS = 46230\nVENDOR_ID_EIKEO = 46231\nVENDOR_ID_ERGATEL = 46232\nVENDOR_ID_MUNDO_DIGITAL_INFORMTICA_REDES_Y_COMUNICACIN_SL = 46233\nVENDOR_ID_SPACETEAMLAB_LTD = 46234\nVENDOR_ID_RCNTEC = 46235\nVENDOR_ID_MULTISOFT_SA = 46236\nVENDOR_ID_AYUNTAMIENTO_DE_ALCOBENDAS = 46237\nVENDOR_ID_IMMOBILIEN_HILGERS_EK = 46238\nVENDOR_ID_INVINETS = 46239\nVENDOR_ID_POLISH_BORDER_GUARD_BORDER_GUARD_HEADQUARTERS = 46240\nVENDOR_ID_BIONIC_FUEL_KNOWLEDGE_PARTNERS_INC = 46241\nVENDOR_ID_NETONIX = 46242\nVENDOR_ID_PROGRAMIZE = 46243\nVENDOR_ID_SOUTH_AFRICAN_AIR_FORCE = 46244\nVENDOR_ID_REO3 = 46245\nVENDOR_ID_88IO = 46246\nVENDOR_ID_SUPERTEL_DALS = 46247\nVENDOR_ID_POLE_ZERO_CORPORATION = 46248\nVENDOR_ID_SITES = 46249\nVENDOR_ID_AMSTED_RAIL = 46250\nVENDOR_ID_POSBANK = 46251\nVENDOR_ID_Z_ROUTER_TECHNOLOGY = 46252\nVENDOR_ID_PLUSSERVER_GMBH = 46253\nVENDOR_ID_VECTOR_INFORMATIK_GMBH = 46254\nVENDOR_ID_OVENDEN_PAPERS_LIMITED = 46255\nVENDOR_ID_HOKKAIDO_UNIVERSITY = 46256\nVENDOR_ID_WLBE_DEUTSCHLAND = 46257\nVENDOR_ID_VENISO_SOLUTIONS_PRIVATE_LIMITED = 46258\nVENDOR_ID_HAUSEIGENTMERVERBAND_ZRICH = 46259\nVENDOR_ID_IQ_MEDIA_BV = 46260\nVENDOR_ID_UNIVERSIDAD_NACIONAL_DEL_LITORAL = 46261\nVENDOR_ID_ZSCALER_INC = 46262\nVENDOR_ID_LPL_FINANCIAL = 46263\nVENDOR_ID_FINNHEMS_OY = 46264\nVENDOR_ID_ALBIKARNET = 46265\nVENDOR_ID_WOOD_COUNTY_TELEPHONE_COMPANY_DBA_SOLARUS = 46266\nVENDOR_ID_DEVELOPMENT_GATEWAY = 46267\nVENDOR_ID_BLEIMNET_GMBH = 46268\nVENDOR_ID_DYNASYS_TECHNOLOGY_COLTD = 46269\nVENDOR_ID_NBOO_RU = 46270\nVENDOR_ID_PALOVERDE_CANCER_SPECIALISTS = 46271\nVENDOR_ID_DATASTAX_INC = 46272\nVENDOR_ID_INFORMALOGIQUE = 46273\nVENDOR_ID_HEARTWARE = 46274\nVENDOR_ID_EBPI = 46275\nVENDOR_ID_LINUX_LAB = 46276\nVENDOR_ID_MINISTERIO_DOS_PETROLEOS = 46277\nVENDOR_ID_TV_NORD_AG = 46278\nVENDOR_ID_THOMAS_HELLSTRM = 46279\nVENDOR_ID_ENTERPRISE_COMPUTING = 46280\nVENDOR_ID_WRITESYS_TRAFFIC_SYSTEMS = 46281\nVENDOR_ID_UGO3D_LLC = 46282\nVENDOR_ID_INMOTION_DATA_LLC = 46283\nVENDOR_ID_ENERGEX = 46284\nVENDOR_ID_TRIMBLE_NAVIGATION_LTD = 46285\nVENDOR_ID_RUDIMENTS = 46286\nVENDOR_ID_YAXUNHONGDA = 46287\nVENDOR_ID_TEDAS_BV = 46288\nVENDOR_ID_GLUIT_SOFTWARE_GMBH = 46289\nVENDOR_ID_VS_XXI_JSC = 46290\nVENDOR_ID_IES_SRL = 46291\nVENDOR_ID_KOIOSSIAN_INC = 46292\nVENDOR_ID_MONROE_COUNTY_HOSPITAL_ONCOLOGY_CLINIC = 46293\nVENDOR_ID_INVIEW_GMBH = 46294\nVENDOR_ID_CITY_OF_HUNTSVILLE = 46295\nVENDOR_ID_SHI = 46296\nVENDOR_ID_AGRARMARKT_AUSTRIA = 46297\nVENDOR_ID_ISPM_SERVIOS_EM_INFORMTICA_LTDA = 46298\nVENDOR_ID_BIRMINGHAM_HEMATOLOGY_AND_ONCOLOGY_ASSOCIATES_LLC_D_B_A_ALABAMA_ONCOLOGY = 46299\nVENDOR_ID_MICROKNIGHT_BUSINESS_SYSTEMS_LTD = 46300\nVENDOR_ID_CARRA_INC = 46301\nVENDOR_ID_URMET_SISTEMI_SPA = 46302\nVENDOR_ID_ITSUDE = 46303\nVENDOR_ID_GSMA = 46304\nVENDOR_ID_OSDE = 46305\nVENDOR_ID_INSTITUTE_FOR_TRAFFIC_SAFETY_MANAGEMENT_AND_RESEARCH = 46306\nVENDOR_ID_BRISKHOME = 46307\nVENDOR_ID_GDC_COMMUNICATIONS = 46308\nVENDOR_ID_DELFT_SOLUTIONS = 46309\nVENDOR_ID_BCONS_ARGENTINA_SA = 46310\nVENDOR_ID_BAUFEST = 46311\nVENDOR_ID_JACK_KINGSMAN = 46312\nVENDOR_ID_LEVEL_8_APS = 46313\nVENDOR_ID_SONGMOVERS = 46314\nVENDOR_ID_SILICON_VALLEY_BANK = 46315\nVENDOR_ID_AERTICKET_AG = 46316\nVENDOR_ID_VRSG_VERWALTUNGSRECHENZENTRUM_AG_STGALLEN = 46317\nVENDOR_ID_MILS_ELECTRONIC_GESMBH_COKG = 46318\nVENDOR_ID_TRAFFIC_TECH_INC = 46319\nVENDOR_ID_BNC_NATIONAL_BANK = 46320\nVENDOR_ID_SENSIGNAL_COLTD = 46321\nVENDOR_ID_GARETH_WILLIAMS = 46322\nVENDOR_ID_F_KLUCZNIK_SON_LIMITED = 46323\nVENDOR_ID_HAYSYS_LTD = 46324\nVENDOR_ID_FIRSTWAN_DELIVERY_NETWORK_SERVICES = 46325\nVENDOR_ID_IUT_DE_VALENCE = 46326\nVENDOR_ID_NIAGARA_REGIONAL_POLICE_SERVICE = 46327\nVENDOR_ID_DDS_WIRELESS_INTERNATIONAL_INC = 46328\nVENDOR_ID_SECURITY_INDEMNITY_INSURANCE_COMPANY_IN_LIQUIDATION = 46329\nVENDOR_ID_VUBIQ_NETWORKS = 46330\nVENDOR_ID_NIGHTSTEAM_SOLUTIONS = 46331\nVENDOR_ID_LACUNA_SOFTWARE_LTDA_EPP = 46332\nVENDOR_ID_AMERICAN_EXPRESS_GLOBAL_BUSINESS_TRAVEL = 46333\nVENDOR_ID_HRM_SYSTEMS_AG = 46334\nVENDOR_ID_BRUCE_A_HAYTON_MD = 46335\nVENDOR_ID_LIVE_NIAGA = 46336\nVENDOR_ID_MEISEI_ELECTRIC_CO_LTD = 46337\nVENDOR_ID_CTO_BALZUWEIT_GMBH = 46338\nVENDOR_ID_NATIONAL_ARCHIVES_CZECH_REPUBLIC = 46339\nVENDOR_ID_THE_OPOLE_UNIVERSITY_OF_TECHNOLOGY = 46340\nVENDOR_ID_DANSK_METALARBEJDERFORBUND = 46341\nVENDOR_ID_ANOOP_SUKUMARAN = 46342\nVENDOR_ID_MAZOU_KITCHEN = 46343\nVENDOR_ID_PRICEWATERHOUSECOOPERS_AG = 46344\nVENDOR_ID_CLEAR_GOVERNMENT_SOLUTIONS_INC = 46345\nVENDOR_ID_VAIL_SOFTWARE_SOLUTIONS = 46346\nVENDOR_ID_OVAPRO = 46347\nVENDOR_ID_PROVIDENCE_HEALTH_SERVICES = 46348\nVENDOR_ID_DEEPFIELD = 46349\nVENDOR_ID_NORCERT_NORWEGIAN_COMPUTER_EMERGENCY_RESPONSE_TEAM = 46350\nVENDOR_ID_LAUBHEIMER_NETWORKS = 46351\nVENDOR_ID_PREMIER_BUSINESS_CENTERS = 46352\nVENDOR_ID_SCHWACKENBERG_CONSULTING = 46353\nVENDOR_ID_KOOPERATIVA_POJISTOVNA_AS = 46354\nVENDOR_ID_EXPERT_TEAM_PTE_LTD = 46355\nVENDOR_ID_GRUPO_DE_TECNOLOGIA_CIBERNETICA_SA_DE_CV = 46356\nVENDOR_ID_NBS_SYSTEM = 46357\nVENDOR_ID_ZWICK_GMBH_CO_KG = 46358\nVENDOR_ID_ROBERT_P_FEIN_AND_DAVID_A_RICHARDS = 46359\nVENDOR_ID_WEST_AND_CENTRAL_AFRICAN_RESEARCH_AND_EDUCATION_NETWORK_WACREN = 46360\nVENDOR_ID_RICHARD_SCRANTON = 46361\nVENDOR_ID_DIGITAL_DATA_TECHNOLOGIES_INC = 46362\nVENDOR_ID_BGPROTECT = 46363\nVENDOR_ID_HALMSTAD_UNIVERSITY = 46364\nVENDOR_ID_ARVATO_IT_SUPPORT_GMBH = 46365\nVENDOR_ID_TECHNICOLOR = 46366\nVENDOR_ID_UPSINVERTERCOM = 46367\nVENDOR_ID_THE_JOB_PLANET = 46368\nVENDOR_ID_MISKOLCI_EGYETEM_INFORMATIKAI_INTEZET = 46369\nVENDOR_ID_ESHORE = 46370\nVENDOR_ID_JAPAN_CANADA_OIL_SANDS_LIMITED = 46371\nVENDOR_ID_UBER_OPERATIONS_LLC = 46372\nVENDOR_ID_BYPASS_NETWORK_SERVICES = 46373\nVENDOR_ID_ZIZAIKE_INC = 46374\nVENDOR_ID_ECOMMISTRY_LTD = 46375\nVENDOR_ID_NULLROUTE = 46376\nVENDOR_ID_STAR_MEDIA_BEIJING_COLTD = 46377\nVENDOR_ID_CENTRE_HOSPITALIER_MMORIAL_SAINT_L = 46378\nVENDOR_ID_LUNATICISLANDNET = 46379\nVENDOR_ID_ENGHOUSE_INTERACTIVE_AB = 46380\nVENDOR_ID_IMTERRA = 46381\nVENDOR_ID_BEROLINA_AUTOLACKE = 46382\nVENDOR_ID_MINISTRY_DIVISION_CHURCH_OF_ENGLAND = 46383\nVENDOR_ID_DUCA_FINANCIAL_SERVICES_CREDIT_UNION_LTD = 46384\nVENDOR_ID_WALNUT_HILL_PHYSICIANS_HOSPITAL_LLC = 46385\nVENDOR_ID_SHENZHEN_GL_COM_TECHNOLOGY_COLTD = 46386\nVENDOR_ID_DRIFT = 46387\nVENDOR_ID_TAYGETA_SCIENTIFIC_INC = 46388\nVENDOR_ID_VESTA = 46389\nVENDOR_ID_CLARKE_TECHNICAL_SERVICES_INC = 46390\nVENDOR_ID_JDDEV = 46391\nVENDOR_ID_DONOSTIAN_BELGIE = 46392\nVENDOR_ID_PROGRAMLABBET_AB = 46393\nVENDOR_ID_BLITSC = 46394\nVENDOR_ID_FIRSTRAND_GROUP = 46395\nVENDOR_ID_MAROTTA_CONTROLS_INC = 46396\nVENDOR_ID_ISECWAY_INC = 46397\nVENDOR_ID_REGIONAL_CANCER_CARE_ASSOCIATES_HOPE_COMMUNITY_CANCER_CENTER_DIVISION = 46398\nVENDOR_ID_ISIGHT_PARTNERS = 46399\nVENDOR_ID_NORQUEST_COLLEGE = 46400\nVENDOR_ID_MARSHALL_B_KETCHUM_UNIVERSITY = 46401\nVENDOR_ID_NSF_TELECOM_AB = 46402\nVENDOR_ID_QA2 = 46403\nVENDOR_ID_DOT_SYSTEMS_SP_Z_OO = 46404\nVENDOR_ID_SUPERCHIC = 46405\nVENDOR_ID_FOUNDATION_PRNU_HOSPITAL = 46406\nVENDOR_ID_TECNOLOGIAS_EOS_SA_DE_CV = 46407\nVENDOR_ID_PKP_POLSKIE_LINIE_KOLEJOWE_SA = 46408\nVENDOR_ID_BSP_CONSULTING_SPOL_S_RO = 46409\nVENDOR_ID_SEGGER_MICROCONTROLLER_GMBH_CO_KG = 46410\nVENDOR_ID_ART2WAVE_CANADA_INC = 46411\nVENDOR_ID_ANDREW_SHERET_LTD = 46412\nVENDOR_ID_TABLE25_INC = 46413\nVENDOR_ID_WILLIAM_OLIVER = 46414\nVENDOR_ID_OPEN_BANKING_FOUNDATION = 46415\nVENDOR_ID_THE_NATIONAL_ARCHIVES_OF_LATVIA = 46416\nVENDOR_ID_EMERALD_COAST_CANCER_CENTER = 46417\nVENDOR_ID_AGILE_INGENIERA_Y_CONSULTORA_LTDA = 46418\nVENDOR_ID_ARAKNIS_NETWORKS = 46419\nVENDOR_ID_KNAUF_INFORMATION_SERVICES_GMBH = 46420\nVENDOR_ID_B_E_AEROSPACE = 46421\nVENDOR_ID_UTEK_TECHNOLOGYSHENZHENCOLTD = 46422\nVENDOR_ID_OSIRIUM_LTD = 46423\nVENDOR_ID_OTTERBEIN_HOMES = 46424\nVENDOR_ID_DTSV_INC = 46425\nVENDOR_ID_SALINAS_VALLEY_MEDICAL_CLINIC_CANCER_CARE = 46426\nVENDOR_ID_LISI_AEROSPACE = 46427\nVENDOR_ID_MOBICARE = 46428\nVENDOR_ID_UNIVERSIDAD_NACIONAL_DE_SAN_MARTIN = 46429\nVENDOR_ID_RTEC = 46430\nVENDOR_ID_ALAF_ORGANIZATION = 46431\nVENDOR_ID_MODULA_SHOP_SYSTEMS = 46432\nVENDOR_ID_FERN_RIDGE_SCHOOL_DISTRICT_28J = 46433\nVENDOR_ID_CONSULTER_NET_GMBH = 46434\nVENDOR_ID_LEW_AG = 46435\nVENDOR_ID_INFOPROCESS = 46436\nVENDOR_ID_TTI_NORTE_SL = 46437\nVENDOR_ID_BARTEC_VODEC = 46438\nVENDOR_ID_BOLSAS_Y_MERCADOS_ESPAOLES_INNOVA_SAU_BME_INNOVA = 46439\nVENDOR_ID_CLOUD_ELECTRONICS_LTD = 46440\nVENDOR_ID_AKROS_AG = 46441\nVENDOR_ID_PIHI_MEDIA = 46442\nVENDOR_ID_INTEC_GMBH = 46443\nVENDOR_ID_ZHEJIANG_HUANSHUN_NETWORK_SCIENCE_TECHNOLOGY_CO_LTD = 46444\nVENDOR_ID_UNITEL_ENGINEERING = 46445\nVENDOR_ID_OV_CORPORATION_SAS = 46446\nVENDOR_ID_EMBEDICT = 46447\nVENDOR_ID_TELEWIZJA_POLSAT_SPOLKA_Z_O_O = 46448\nVENDOR_ID_COLLIBRA = 46449\nVENDOR_ID_OPSMATE_INC = 46450\nVENDOR_ID_INFORELAY_ONLINE_SYSTEMS_INC = 46451\nVENDOR_ID_LANWORLD_FINLAND_OY = 46452\nVENDOR_ID_MCKESSON_IWS = 46453\nVENDOR_ID_GOLDBERG_AND_MATHEW_MEDICAL_ASSC_PLLC = 46454\nVENDOR_ID_CORAL_ACTIVE = 46455\nVENDOR_ID_ATTOCORE_LTD = 46456\nVENDOR_ID_GERRIE_ELECTRIC_WHOLESALE_LIMITED = 46457\nVENDOR_ID_ENOW_INC = 46458\nVENDOR_ID_MAIRIE_DE_CANTELEU = 46459\nVENDOR_ID_VETERINARY_SPECIALISTS_OF_NORTH_TEXAS = 46460\nVENDOR_ID_OUTHWAITE_TECHNOLOGIES = 46461\nVENDOR_ID_SICOOB_CONFEDERAO = 46462\nVENDOR_ID_RADIO_GIGABIT_INC = 46463\nVENDOR_ID_KNOWLEDGELOOP_INC = 46464\nVENDOR_ID_EKE_ELECTRONICS_LTD = 46465\nVENDOR_ID_ROSSBACH_SYSTEMS = 46466\nVENDOR_ID_CELLSENS = 46467\nVENDOR_ID_COHO_DATA_INC = 46468\nVENDOR_ID_149W_MANAGED_SERVICES_LLC = 46469\nVENDOR_ID_MAN_TECHNOLOGY_CO_LTD = 46470\nVENDOR_ID_ILLUSIVE_NETWORKS_LTD = 46471\nVENDOR_ID_INFRAVIEW_GMBH = 46472\nVENDOR_ID_OTTERBEIN_HOMES_2 = 46473\nVENDOR_ID_KIWOX_SOLUCIONES_TECNOLGICAS = 46474\nVENDOR_ID_OSTEC_BUSINESS_SECURITY = 46475\nVENDOR_ID_MARTIJN_VAN_HOOF = 46476\nVENDOR_ID_HEALTHNOW_NEW_YORK_INC = 46477\nVENDOR_ID_DIAL_GMBH = 46478\nVENDOR_ID_UNIDESK_CORPORATION = 46479\nVENDOR_ID_MODULAR_MINING_SYSTEMS_INC = 46480\nVENDOR_ID_DESJARDINS_GROUPE_TECHNOLOGIES = 46481\nVENDOR_ID_NETKI_INC = 46482\nVENDOR_ID_ERLPHASE_POWER_TECHNOLOGIES_LTD = 46483\nVENDOR_ID_HERE_NORTH_AMERICA_LLC = 46484\nVENDOR_ID_GUYS_AND_ST_THOMAS_NHS_FOUNDATION_TRUST = 46485\nVENDOR_ID_DEDRONE_GMBH = 46486\nVENDOR_ID_STRIPE_INC = 46487\nVENDOR_ID_WALSER_NET = 46488\nVENDOR_ID_TGR_TECNOLOGIA_PARA_GESTO_DE_REDES_SA = 46489\nVENDOR_ID_CAPTEL = 46490\nVENDOR_ID_VALERIO_MOROZZO = 46491\nVENDOR_ID_CONEVITY_SOLUTIONS_INC = 46492\nVENDOR_ID_UAB_GKF = 46493\nVENDOR_ID_ASSIMIL8_LIMITED = 46494\nVENDOR_ID_EUROPEAN_DYNAMICS_SA = 46495\nVENDOR_ID_DEPARTAMENTO_ADMINISTRATIVO_DE_CIENCIA_TECNOLOGIA_E_INNOVACION_COLCIENCIAS = 46496\nVENDOR_ID_ISS_BRASIL_LTDA = 46497\nVENDOR_ID_JIANGSU_SINOLTE_WIRELESS_TECHNOLOGY_CO_LTD = 46498\nVENDOR_ID_ICD_COLTD = 46499\nVENDOR_ID_TRUKAI_INDUSTRIES_LIMITED = 46500\nVENDOR_ID_DIDACTUM_LTD_DEUTSCHLAND_FORMERLY_VUTLAN_SRO = 46501\nVENDOR_ID_TASS = 46502\nVENDOR_ID_QUENCH_WORLDWIDE_LIMITED = 46503\nVENDOR_ID_STOLT_NIELSEN_LIMITED = 46504\nVENDOR_ID_PLAS_TEK_LTD = 46505\nVENDOR_ID_SYSTEMS_INTEGRATED = 46506\nVENDOR_ID_SIMPRESS_COMERCIO_LOCACAO_E_SERVICOS = 46507\nVENDOR_ID_GLEN_RAVEN_INC = 46508\nVENDOR_ID_ONCOLOGY_AND_HEMATOLOGY_SPECIALISTS = 46509\nVENDOR_ID_WAKE_COUNTY_PUBLIC_SCHOOL_SYSTEM = 46510\nVENDOR_ID_NEW_TELECOM_SOLUTIONS_LLC = 46511\nVENDOR_ID_TIMES_INTERNET_LIMITED = 46512\nVENDOR_ID_ZORGNED_AUTOMATISERING_BV = 46513\nVENDOR_ID_MHASHIM_LTD = 46514\nVENDOR_ID_WOLF_MEDIZINTECHNIK_GMBH = 46515\nVENDOR_ID_ANTE_GRUP_ELEKTRIK_ELEKTRONIK_BILIIM_NAAT_DANIMANLIK_SAN_VE_TIC_LTD_TI = 46516\nVENDOR_ID_FITX_DEUTSCHLAND_GMBH = 46517\nVENDOR_ID_SPD_ELECTRICAL_ENGINEERS_PTY_LTD = 46518\nVENDOR_ID_ALBERTSLUND_KOMMUNE = 46519\nVENDOR_ID_HITACHI_INDUSTRY_CONTROL_SOLUTIONS_LTD = 46520\nVENDOR_ID_PMC_PERIPHERIQUES_ET_MATERIELS_DE_CONTROLE = 46521\nVENDOR_ID_DINO_OCCHIALINI = 46522\nVENDOR_ID_BRIDGETEC_CORP = 46523\nVENDOR_ID_LINKBROAD_TECHNOLOGY_BEIJING_CORPORATION_LIMITED = 46524\nVENDOR_ID_HEDVIG_INC = 46525\nVENDOR_ID_MOLDEO_AB = 46526\nVENDOR_ID_TRANS_LINK_SYSTEMS_BV = 46527\nVENDOR_ID_SHANGHAI_CHUXUN_INFORMATION_TECHNOLOGY_COLTD = 46528\nVENDOR_ID_LDAP4MAIL = 46529\nVENDOR_ID_R_SYS_SRO = 46530\nVENDOR_ID_PGE_POLSKA_GRUPA_ENERGETYCZNA_SA = 46531\nVENDOR_ID_HINCHINGBROOKE_HOSPITAL_NHS_HEALTH_CARE_TRUST = 46532\nVENDOR_ID_OPEN_SOURCE_SYSTEM = 46533\nVENDOR_ID_ARX_ONE = 46534\nVENDOR_ID_COSMOKEY_GMBH_CO_KG = 46535\nVENDOR_ID_TEXTEL_MARIMON_SA = 46536\nVENDOR_ID_YODEL_DELIVERY_NETWORK_LIMITED = 46537\nVENDOR_ID_PIONEERS_MEMORIAL_HEALTHCARE = 46538\nVENDOR_ID_VIRTUAL_NETWORK_ELEMENT_INC = 46539\nVENDOR_ID_VSSUT = 46540\nVENDOR_ID_SENECA_DATA_DISTRIBUTORS_INC = 46541\nVENDOR_ID_MOUNTAIN_BLUE_CANCER_CARE_CENTER = 46542\nVENDOR_ID_CNIAP_GUINEA_ECUATORIAL = 46543\nVENDOR_ID_AXION_TECHNOLOGIES_LTD = 46544\nVENDOR_ID_RECHTSANWALTSKANZLEI_SCHAALO = 46545\nVENDOR_ID_IMPAVID_LLC = 46546\nVENDOR_ID_BILD_GMBH_CO_KG = 46547\nVENDOR_ID_SECVICE_INFORMATION_TECHNOLOGIES_PRIVATE_LIMITED = 46548\nVENDOR_ID_MESSER_INFORMATION_SERVICES_GMBH = 46549\nVENDOR_ID_DUFOORT = 46550\nVENDOR_ID_AMPRION_GMBH = 46551\nVENDOR_ID_ELTHAM_COLLEGE = 46552\nVENDOR_ID_AMSTERDAMTELECOM_LTD = 46553\nVENDOR_ID_ANTHON_ROMANOV = 46554\nVENDOR_ID_KOSTYAPRO = 46555\nVENDOR_ID_LD_LUTUM = 46556\nVENDOR_ID_SCALE_GENIUS_INC = 46557\nVENDOR_ID_FUTOIN = 46558\nVENDOR_ID_ESC_ELECTRONIC_SERVICE_CENTER_GBR = 46559\nVENDOR_ID_COX_COMMUNICATIONS_INC_ENGINEERING = 46560\nVENDOR_ID_BHS_SONTHOFEN_GMBH = 46561\nVENDOR_ID_REVENUE_MANAGEMENT_SOLUTIONS_LLC = 46562\nVENDOR_ID_VIRGIN_ISLANDS_ONCOLOGY_HEMATOLOGYPC = 46563\nVENDOR_ID_ENTERA_AS = 46564\nVENDOR_ID_WIOLLO_SP_Z_OO = 46565\nVENDOR_ID_HOLBK_KOMMUNE = 46566\nVENDOR_ID_DIROX = 46567\nVENDOR_ID_MOQOM_LIMITED = 46568\nVENDOR_ID_HYBRIDDIGITAL = 46569\nVENDOR_ID_MITHRIL_INFORMATIQUE = 46570\nVENDOR_ID_FRUIT_OF_THE_LOOM = 46571\nVENDOR_ID_COMACT_EQUIPMENT_INC = 46572\nVENDOR_ID_STEFAN_VAN_SOMEREN = 46573\nVENDOR_ID_ENCORE_SYSTEMS_LLC = 46574\nVENDOR_ID_WORKCOVER_QUEENSLAND = 46575\nVENDOR_ID_NFWARE_INC = 46576\nVENDOR_ID_CLOUDSTEAD_INC = 46577\nVENDOR_ID_GERELTEI_SYSTEMS = 46578\nVENDOR_ID_PIVOTAL_CLOUD_FOUNDRY = 46579\nVENDOR_ID_BRAINCOOLANT_OY = 46580\nVENDOR_ID_MALARIAGEN = 46581\nVENDOR_ID_ROBERT_BOSCH_KRANKENHAUS_GMBH = 46582\nVENDOR_ID_LINOMA_SOFTWARE = 46583\nVENDOR_ID_FRENCH_LICK_RESORT = 46584\nVENDOR_ID_STRATHTECH = 46585\nVENDOR_ID_PROSIEBENSAT1_MEDIA_SE = 46586\nVENDOR_ID_INSTITUTE_OF_LOW_TEMPERATURE_AND_STRUCTURE_RESEARCH_POLISH_ACADEMY_OF_SCIENCES = 46587\nVENDOR_ID_APTITUDE_TECHNOLOGIES = 46588\nVENDOR_ID_STIFEL_FINANCIAL_CORP = 46589\nVENDOR_ID_SURETAP_WALLET_LP = 46590\nVENDOR_ID_AUDITORIA_Y_CONSULTORIA_DE_PRIVACIDAD_Y_SEGURIDAD_SL = 46591\nVENDOR_ID_GEBR_HOFFMANN_WERKZEUGMASCHINEN_GMBH = 46592\nVENDOR_ID_JUNTOTELECOM = 46593\nVENDOR_ID_MATTHEW_WYNN = 46594\nVENDOR_ID_SMARTBITS = 46595\nVENDOR_ID_HAZELNUT_SOFTWARE_LTD = 46596\nVENDOR_ID_OW2_CONSORTIUM = 46597\nVENDOR_ID_INDUSTRIELLE_ALLIANCE_VALEURS_MOBILIRES_INC = 46598\nVENDOR_ID_UAB_ERISATA = 46599\nVENDOR_ID_MERSOFT_CORPORATION = 46600\nVENDOR_ID_INFORM_MOBIL = 46601\nVENDOR_ID_KT_CORPORATION = 46602\nVENDOR_ID_XERON_UNIVERSAL_TECHNOLOGIES = 46603\nVENDOR_ID_NETINDIA_PRIVATE_LIMITED = 46604\nVENDOR_ID_WALLYS_COMMUNICATIONS_SDN_BHD = 46605\nVENDOR_ID_CISCO_SYSTEMS_INDIA_PRIVATE_LIMITED = 46606\nVENDOR_ID_VETRAY_N = 46607\nVENDOR_ID_SOFTLABNSK_CO_LTD = 46608\nVENDOR_ID_THE_WIRELESS_INNOVATION_FORUM = 46609\nVENDOR_ID_SENSORPOINT_LLC = 46610\nVENDOR_ID_ST_VINCENTS_HEALTH_AUSTRALIA_NSW = 46611\nVENDOR_ID_DV_IMPEX_LTD = 46612\nVENDOR_ID_JSC_SPO_ANGSTREM = 46613\nVENDOR_ID_BBM_SPOL_S_R_O = 46614\nVENDOR_ID_WIRELESSCAR = 46615\nVENDOR_ID_ANGHEL_F_DAN_ALEXANDRU_PFA = 46616\nVENDOR_ID_HELSE_NORD_IKT = 46617\nVENDOR_ID_AXEL = 46618\nVENDOR_ID_CENTRE_HOSPITALIER_EMILE_MAYRISCH = 46619\nVENDOR_ID_WOLSELEY_PLC = 46620\nVENDOR_ID_THALES_SERVICES_FRANCE_TOULOUSE = 46621\nVENDOR_ID_FLAG_SOLUTIONS_SL = 46622\nVENDOR_ID_TRUNOMI_INC = 46623\nVENDOR_ID_FLEXOPTIX_GMBH = 46624\nVENDOR_ID_WINGTOP_CO_LTD = 46625\nVENDOR_ID_ZIBERNETICS = 46626\nVENDOR_ID_INIT_CORPORATION = 46627\nVENDOR_ID_SC_4_WAVE_BRO_SRL = 46628\nVENDOR_ID_JOE_PITT = 46629\nVENDOR_ID_DOMINIQUE_DOR = 46630\nVENDOR_ID_DEVIOUSOPS = 46631\nVENDOR_ID_ENCINITAS_COUNTRY_DAY_SCHOOL = 46632\nVENDOR_ID_ONCOLOGY_SAN_ANTONIO = 46633\nVENDOR_ID_NIVETTI_SYSTEMS_PRIVATE_LIMITED = 46634\nVENDOR_ID_INTERSCHALT_MARITIME_SYSTEMS_AG = 46635\nVENDOR_ID_HONORARDOZENT_PETER_KRUSE = 46636\nVENDOR_ID_RAULWALTER_LLC = 46637\nVENDOR_ID_CITY_OF_SUNRISE = 46638\nVENDOR_ID_JAN_SKOGQVIST = 46639\nVENDOR_ID_CAIXA_ECONOMICA_FEDERAL = 46640\nVENDOR_ID_METERBEE = 46641\nVENDOR_ID_NATIONAL_DOCUMENTATION_CENTRE = 46642\nVENDOR_ID_KITTENBERGERORG = 46643\nVENDOR_ID_ZETTALOGS = 46644\nVENDOR_ID_AERONIX = 46645\nVENDOR_ID_WAVELAB_INC = 46646\nVENDOR_ID_MICHAEL_G_SULLIVAN_MGS = 46647\nVENDOR_ID_BRAIN4NET_INC = 46648\nVENDOR_ID_PTPD_PROJECT = 46649\nVENDOR_ID_HUMBOLDT_SOLUTIONS_LTD = 46650\nVENDOR_ID_DANTHERM_COOLING_A_S = 46651\nVENDOR_ID_SERTEL_ELECTRONICS_UK_LTD = 46652\nVENDOR_ID_RAYMOND_CHUNG_INDUSTRIES_CORPORATION = 46653\nVENDOR_ID_FUTURE_INFRASTRUCTURES_ONLINE_LTD = 46654\nVENDOR_ID_INNOFIDEI_TECHNOLOGIES_INC = 46655\nVENDOR_ID_POLSKIE_KOLEJE_PASTWOWE_SA = 46656\nVENDOR_ID_EKCR = 46657\nVENDOR_ID_ASSETOWL = 46658\nVENDOR_ID_BBR_VERKEHRSTECHNIK_GMBH = 46659\nVENDOR_ID_VOLVO_GROUP_TELEMATICS = 46660\nVENDOR_ID_BUCHERER_AG = 46661\nVENDOR_ID_POINTEK = 46662\nVENDOR_ID_TORRING_SYSTEMS_CORP = 46663\nVENDOR_ID_NOVATRONIC = 46664\nVENDOR_ID_RESHIN = 46665\nVENDOR_ID_NPF_MODEM_LTD = 46666\nVENDOR_ID_LIMITED_LIABILITY_COMPANY_ICBCOM = 46667\nVENDOR_ID_ENX_ASSOCIATION = 46668\nVENDOR_ID_JOB_CORPS = 46669\nVENDOR_ID_OCTAGON_COMPUTERCOMMUNICATION = 46670\nVENDOR_ID_MEDICAL_SPECIALISTS_OF_FAIRFIELD_LLC = 46671\nVENDOR_ID_PRIMEDESIGN = 46672\nVENDOR_ID_MINORIS = 46673\nVENDOR_ID_CANTAA_GMBH = 46674\nVENDOR_ID_ESSENTIAL_ENERGY = 46675\nVENDOR_ID_WEIR_SHARED_SERVICES_LTD = 46676\nVENDOR_ID_XATU = 46677\nVENDOR_ID_NAKSITRALLIDCOM = 46678\nVENDOR_ID_BISTUM_WRZBURG = 46679\nVENDOR_ID_CONTROL_TECHNIQUES = 46680\nVENDOR_ID_SV_INFORMATIK_GMBH = 46681\nVENDOR_ID_APPLIED_OPTOELECTRONICS_INC = 46682\nVENDOR_ID_ZDRAVEC_BULGARIA_LTD = 46683\nVENDOR_ID_NAZESSEN = 46684\nVENDOR_ID_MAAG_INFORMATIK = 46685\nVENDOR_ID_DOCUMENT_STORAGE_SYSTEMS_INC = 46686\nVENDOR_ID_QUALICORP_SA = 46687\nVENDOR_ID_KARL_CAMILLERI = 46688\nVENDOR_ID_ENTRIA_LLC = 46689\nVENDOR_ID_12SIDED_TECHNOLOGY_LLC = 46690\nVENDOR_ID_IDOBJECT = 46691\nVENDOR_ID_RIPPLE = 46692\nVENDOR_ID_BESTCAS_LTD = 46693\nVENDOR_ID_KORELOGIC_INC = 46694\nVENDOR_ID_CANCER_CARE_OF_WEST_CENTRAL_OHIO = 46695\nVENDOR_ID_MASTMINDER_LTD = 46696\nVENDOR_ID_UNIMAR_INC = 46697\nVENDOR_ID_CYBERSALES_AS = 46698\nVENDOR_ID_HCIT_CONSULTANT = 46699\nVENDOR_ID_ICTREX = 46700\nVENDOR_ID_STATE_HISTORICAL_MUSEUM = 46701\nVENDOR_ID_CONTROL_SERVICE_DO_BRASIL_LTDA = 46702\nVENDOR_ID_ABJORNE = 46703\nVENDOR_ID_SALIB_ONCOLOGY_HEMATOLOGY = 46704\nVENDOR_ID_MAESTRIA_EN_SEGURIDAD_INFORMATICA_APLICADA_ESPOL = 46705\nVENDOR_ID_WOWZA_MEDIA_SYSTEMS_LLC = 46706\nVENDOR_ID_NEOCORETECH_SAS = 46707\nVENDOR_ID_ACTION_FOR_CHILDREN = 46708\nVENDOR_ID_BDO_CANADA_LLP = 46709\nVENDOR_ID_NETWORK_TIME_FOUNDATION = 46710\nVENDOR_ID_DOUBLENEGATIVEEU = 46711\nVENDOR_ID_OPEN_INFRASTRUCTURE = 46712\nVENDOR_ID_DATAHEALTH = 46713\nVENDOR_ID_CESA_INC = 46714\nVENDOR_ID_BIOPTICK_LABORATO_SRO = 46715\nVENDOR_ID_TARGOBANK_AG_CO_KGAA = 46716\nVENDOR_ID_IBYS_TECHNOLOGIES_SA = 46717\nVENDOR_ID_SEA_ISLAND_SYSTEMS_INC = 46718\nVENDOR_ID_DTSI = 46719\nVENDOR_ID_LIGHTFACTOR = 46720\nVENDOR_ID_CANCER_CARE_CENTER_PC = 46721\nVENDOR_ID_MERGE_SECURITY = 46722\nVENDOR_ID_UNITED_EDUCATORS_CREDIT_UNION = 46723\nVENDOR_ID_FERROGRAPH_LIMITED = 46724\nVENDOR_ID_SWIFT_MT = 46725\nVENDOR_ID_US_ANESTHESIA_PARTNERS_INC = 46726\nVENDOR_ID_SOFTEK_GLOBAL_EDESIGN_S_DE_RL_DE_CV = 46727\nVENDOR_ID_HEKSAGON_GROUP_CY_LTD = 46728\nVENDOR_ID_GROWING_ENERGY_LABS_INC = 46729\nVENDOR_ID_ROUTE_WEAVER_LLC = 46730\nVENDOR_ID_INSTITUT_FUER_MEDIZINISCHE_UND_PHARMAZEUTISCHE_PRUEFUNGSFRAGEN = 46731\nVENDOR_ID_VEDANG_RADIO_TECHNOLOGY_PVT_LIMITED = 46732\nVENDOR_ID_DOM_P_ZRT = 46733\nVENDOR_ID_TCCC = 46734\nVENDOR_ID_SILHOUETTE_INTERNATIONAL_SCHMIED_AG = 46735\nVENDOR_ID_POWERTECH_IT_SERVICES_SRL = 46736\nVENDOR_ID_AMPHINICY_TECHNOLOGIES = 46737\nVENDOR_ID_BEELER_IT_SERVICES = 46738\nVENDOR_ID_RONIT_NTHAKOR = 46739\nVENDOR_ID_ZENDESK_INC = 46740\nVENDOR_ID_ASPECT_ENTERPRISE_SOLUTIONS_INC = 46741\nVENDOR_ID_GLOBAL_BIODIVERSITY_INFORMATION_FACILITY_GBIF = 46742\nVENDOR_ID_TECHNOLOGY_ARCHITECTS_LLC = 46743\nVENDOR_ID_TRANSACTION_TECHNOLOGIES_PTE_LTD = 46744\nVENDOR_ID_JOE_THIELEN = 46745\nVENDOR_ID_WEILL_CORNELL_MEDICINE = 46746\nVENDOR_ID_THE_CHRIST_HOSPITAL_HEM_ONC = 46747\nVENDOR_ID_ALLIANCE_TECHNOLOGY_GROUP_LLC = 46748\nVENDOR_ID_121_MARKETING_SERVICES_GROUP_INC = 46749\nVENDOR_ID_MOBILSIGN_LTD = 46750\nVENDOR_ID_CARRIZO_OIL_GAS_INC = 46751\nVENDOR_ID_THE_MINNITI_CENTER_FOR_MEDICAL_ONCOLOGY_HEMATOLOGY = 46752\nVENDOR_ID_HEMATOLOGY_ONCOLOGY_CLINIC_LLP = 46753\nVENDOR_ID_NETFOX_AG = 46754\nVENDOR_ID_NEXGEN_ONCOLOGY = 46755\nVENDOR_ID_MICHAEL_OBERDORF_IT_CONSULTING = 46756\nVENDOR_ID_DEMOULAS_MARKET_BASKET_INC = 46757\nVENDOR_ID_CARMAX = 46758\nVENDOR_ID_COVERMYMEDS = 46759\nVENDOR_ID_TEKSUSHCOM = 46760\nVENDOR_ID_GROUPE_JVS = 46761\nVENDOR_ID_ATOS_IT_SOLUTIONS_AND_SERVICES_GMBH = 46762\nVENDOR_ID_ALFER_ALUMINIUM_GESELLSCHAFT_MBH = 46763\nVENDOR_ID_HEALTHINSIGHT = 46764\nVENDOR_ID_SVIAZ_BANK = 46765\nVENDOR_ID_CREATCOMM_TECHNOLOGY = 46766\nVENDOR_ID_CARMAX_INC = 46767\nVENDOR_ID_SYMPHONY_COMMUNICATION_SERVICES_LLC = 46768\nVENDOR_ID_ST_LEONARDS_COMMUNITY_SERVICES = 46769\nVENDOR_ID_BENZ_DATACONSULTING = 46770\nVENDOR_ID_ATOS_IT_SERVICES_SP_Z_OO = 46771\nVENDOR_ID_BRIG_CENTER_FOR_CANCER_CARE_AND_SURVIVORSHIP = 46772\nVENDOR_ID_VOSS_KOMMUNIKASJON_AS = 46773\nVENDOR_ID_K4CONNECT = 46774\nVENDOR_ID_BOURGEOIS_BITS_LLC = 46775\nVENDOR_ID_WESTCHESTER_CANCER_CARE = 46776\nVENDOR_ID_AIR_NEW_ZEALAND = 46777\nVENDOR_ID_NTX_BACK_OFFICE_CONSULTING_GROUP = 46778\nVENDOR_ID_BELGIAN_SUPREME_ADMINISTRATIVE_COURT = 46779\nVENDOR_ID_LEO_ANGELO = 46780\nVENDOR_ID_SASOLA_LIMITED = 46781\nVENDOR_ID_JOHN_HOLLAND_PTY_LTD = 46782\nVENDOR_ID_NEPHOS6 = 46783\nVENDOR_ID_COSMOVISION_CO_LTD = 46784\nVENDOR_ID_COMARK_COMMUNICATIONS_LLC = 46785\nVENDOR_ID_BLUE_BEAMDE = 46786\nVENDOR_ID_SONY_COMPUTER_ENTERTAINMENT_SHANGHAI_LTD = 46787\nVENDOR_ID_XABYSS_INC = 46788\nVENDOR_ID_RAINS_CORP = 46789\nVENDOR_ID_TOYOTA_MOTOR_CORPORATION = 46790\nVENDOR_ID_STEPHAN_FIEBRANDT = 46791\nVENDOR_ID_ISON_TECHNOLOGY_CO_LTD = 46792\nVENDOR_ID_ASAT_CO_LTD = 46793\nVENDOR_ID_DECISION_DETECTIVE_CORPORATION = 46794\nVENDOR_ID_ORGANIZATION_FOR_SECURITY_AND_CO_OPERATION_IN_EUROPE = 46795\nVENDOR_ID_BEDROCK_AUTOMATION_PLATFORMS_INC = 46796\nVENDOR_ID_THE_SELF_FINANCING_SCIENCE_INFORMATION_CENTER_FOR_NEW_TECHNOLOGIES_UNDER_STATE_TAX_COMMITTEE_OF_THE_REPUBLIC_OF_UZBEKISTAN = 46797\nVENDOR_ID_RBS_SERVICES_SWITZERLAND_LTD = 46798\nVENDOR_ID_INTERBLOCK_DD = 46799\nVENDOR_ID_DIGITOLL_INFORMATION_TECHNOLOGY_AND_SERVICING_LTD = 46800\nVENDOR_ID_THE_HUT_GROUP = 46801\nVENDOR_ID_THE_BUSINESS_CLINIC_LTD = 46802\nVENDOR_ID_BROCELIA = 46803\nVENDOR_ID_HIMNARK_CJSC = 46804\nVENDOR_ID_ONCOLOGY_CONSULTANTS = 46805\nVENDOR_ID_MID_FLORIDA_HEMATOLOGY_ONCOLOGY = 46806\nVENDOR_ID_MOTIV_TELECOM_GROUP = 46807\nVENDOR_ID_FALL_RIVER_SCHOOL_DISTRICT = 46808\nVENDOR_ID_KB_PROMSVYAZ = 46809\nVENDOR_ID_STOCKTON_UNIVERSITY = 46810\nVENDOR_ID_LIMPRIMERIE = 46811\nVENDOR_ID_KONSORTIUM_ICT_PANTAI_TIMUR = 46812\nVENDOR_ID_SUNBIRD_SOFTWARE_INC = 46813\nVENDOR_ID_SC3_TECHNOLOGIES_O = 46814\nVENDOR_ID_THIRD_POINT_LLC = 46815\nVENDOR_ID_HELM_AG = 46816\nVENDOR_ID_ATAM_HOLDINGS = 46817\nVENDOR_ID_SYSTEMHAUS_SCHEUSCHNER_GMBH = 46818\nVENDOR_ID_ATTENDA_LTD = 46819\nVENDOR_ID_TELEKOM_MALAYSIA_BERHAD = 46820\nVENDOR_ID_COMMANDUS = 46821\nVENDOR_ID_ZHUHAI_KINGSOFT_OFFICE_SOFTWARE_CO_LTD = 46822\nVENDOR_ID_SISELECTRON_TECHNOLOGY_LTD = 46823\nVENDOR_ID_CERTLY_INC = 46824\nVENDOR_ID_LOOP_TECHNOLOGIES_LIMITED = 46825\nVENDOR_ID_OPTIMALMETHODS_LTD = 46826\nVENDOR_ID_AFFIX_TECHNOLOGY_CO_LTD = 46827\nVENDOR_ID_SEA_AND_AIR_TECHNOLOGY_SL = 46828\nVENDOR_ID_GLOCK_GESMBH = 46829\nVENDOR_ID_LEARNCONSULT_DI_MEITZ_ING_POCK_OG = 46830\nVENDOR_ID_GRAUPNER_MEDICAL_SOLUTIONS_GMBH = 46831\nVENDOR_ID_HEYLIGE_FRAU_LATTE = 46832\nVENDOR_ID_SYNAPSES_TECHNOLOGIES_LLC = 46833\nVENDOR_ID_MARTIN_GMBH_FR_UMWELT_UND_ENERGIETECHNIK = 46834\nVENDOR_ID_RF152 = 46835\nVENDOR_ID_BILFINGER_GREYLOGIX_GMBH = 46836\nVENDOR_ID_AZD_PRAHA_SRO = 46837\nVENDOR_ID_SWAFFER_CONSULTING_LTD = 46838\nVENDOR_ID_RED_ELECTRICA_DE_ESPAA_SAU = 46839\nVENDOR_ID_CHRISTOPHORUS_CLUB_EV = 46840\nVENDOR_ID_HWACHEON_MACHINERY_EUROPE_GMBH = 46841\nVENDOR_ID_HAMBURGER_SOFTWARE_GMBH_CO_KG = 46842\nVENDOR_ID_NEWFIELD_AUTOMATION_LTD = 46843\nVENDOR_ID_DREAMTIMENET_THAILAND_CO_LTD = 46844\nVENDOR_ID_INTERLINK_INC_2 = 46845\nVENDOR_ID_FLOPNET = 46846\nVENDOR_ID_VALLEY_MEDICAL_SURGICAL_CLINIC = 46847\nVENDOR_ID_LAVELLE_NETWORKS_INDIA_PRIVATE_LIMITED = 46848\nVENDOR_ID_IRVING_INDEPENDENT_SCHOOL_DISTRICT = 46849\nVENDOR_ID_TULA_STATE_CENTER_OF_INFORMATION_TECHNOLOGY = 46850\nVENDOR_ID_TERREMARK = 46851\nVENDOR_ID_VIAGOGO_AG = 46852\nVENDOR_ID_PAC_ENTERPRISES = 46853\nVENDOR_ID_HAGENBERGER_KREIS_ZUR_FRDERUNG_DER_DIGITALEN_SICHERHEIT = 46854\nVENDOR_ID_SHOWCASE_PRO_TECNOLOGIA_LTDA = 46855\nVENDOR_ID_ZPEG_INC = 46856\nVENDOR_ID_PARK_CONTROLS_COMMUNICATIONS_P_LTD = 46857\nVENDOR_ID_DGOUJARD = 46858\nVENDOR_ID_GUANGDONG_QUANTUM_TECHNOLOGY_CO_LTD = 46859\nVENDOR_ID_BITTACLE_CONSULTING_LIMITED = 46860\nVENDOR_ID_JVCKENWOOD_CORPORATION = 46861\nVENDOR_ID_DIGITAL_LIFE_PROMOTION_ASSOCIATION = 46862\nVENDOR_ID_BOSCH_THERMOTECHNIK_GMBH = 46863\nVENDOR_ID_EMBEDTRONICS_OY = 46864\nVENDOR_ID_IS4U_SRO = 46865\nVENDOR_ID_VIRDATA_NV = 46866\nVENDOR_ID_SYNTHETEL_CORPORATION = 46867\nVENDOR_ID_SECURE_ENERGY_SERVICES = 46868\nVENDOR_ID_TORCHMIND = 46869\nVENDOR_ID_RELAXT_CONFUSION_LABS_EU = 46870\nVENDOR_ID_MAGIC_MIKE_LTD = 46871\nVENDOR_ID_BIMEX_ENERGY_AG = 46872\nVENDOR_ID_Y1S2 = 46873\nVENDOR_ID_WAVENET_SPRL = 46874\nVENDOR_ID_PRODOT_GMBH = 46875\nVENDOR_ID_GE_LIGHTING = 46876\nVENDOR_ID_ATB_FINANCIAL = 46877\nVENDOR_ID_PERMAGREEN_SUPREME_INC = 46878\nVENDOR_ID_LENGVARSKYCOM = 46879\nVENDOR_ID_TECHNOLOGY_KITCHEN_CORPORATION = 46880\nVENDOR_ID_HENZCO = 46881\nVENDOR_ID_LSTI = 46882\nVENDOR_ID_CAPSICUM_BUSINESS_ARCHITECTS = 46883\nVENDOR_ID_FREIE_EV_GEMEINDE_GIESSEN = 46884\nVENDOR_ID_TWOFIVE_INC = 46885\nVENDOR_ID_BEKEN_LEARNING_SYSTEMS_INC = 46886\nVENDOR_ID_BULLETINNET_LTD = 46887\nVENDOR_ID_KRDS = 46888\nVENDOR_ID_GRAVITY_ACADEMY_ENGINEERING = 46889\nVENDOR_ID_SOLUM_CO_LTD = 46890\nVENDOR_ID_FMAD_ENGINEERING_LLC = 46891\nVENDOR_ID_TWELVEBAUD_STUDIOS_LLC = 46892\nVENDOR_ID_ANTELOPE_ENTERPRISES = 46893\nVENDOR_ID_HANWHA_SC = 46894\nVENDOR_ID_NEXDEFENSE_INC = 46895\nVENDOR_ID_UNIACC_ELECTRONIC_TECHNOLOGY_LTD_OF_SUZHOU = 46896\nVENDOR_ID_VIRTUAL_HOLD_TECHNOLOGY_LLC = 46897\nVENDOR_ID_HEWLETT_PACKARD_ENTERPRISE = 46898\nVENDOR_ID_TDK_LAMBDA_LTD = 46899\nVENDOR_ID_TIEPIE_ENGINEERING = 46900\nVENDOR_ID_WILHELMSEN_LOOM_CONSULTING = 46901\nVENDOR_ID_KEEGAN_MOODLEY_LTD = 46902\nVENDOR_ID_DE_CIX_MANAGEMENT_GMBH_2 = 46903\nVENDOR_ID_SEPURA_PLC = 46904\nVENDOR_ID_KTI_RDIO_SPOL_S_RO = 46905\nVENDOR_ID_ENGHOUSE_NETWORKS_NORDICS_AB = 46906\nVENDOR_ID_QOGNIFY_LTD = 46907\nVENDOR_ID_ASCOT_INDUSTRIAL = 46908\nVENDOR_ID_CENTRIC_HOUSING_HEALTHCARE = 46909\nVENDOR_ID_AIC_SA = 46910\nVENDOR_ID_KERLINK = 46911\nVENDOR_ID_NASSAUISCHE_HEIMSTAETTE_WOHNUNGS_UND_ENTWICKLUNGSGESELLSCHAFT_MBH = 46912\nVENDOR_ID_HOTSPOT_TIEFENORT = 46913\nVENDOR_ID_ADMINISTRATION_DES_PONTS_ET_CHAUSSES = 46914\nVENDOR_ID_RAFFELBIZ = 46915\nVENDOR_ID_AVIVA_VOICE_SYSTEMS_AND_SERVICES_SL = 46916\nVENDOR_ID_PC_TIPTOP = 46917\nVENDOR_ID_GRUPO_REVENGA = 46918\nVENDOR_ID_AADI_NETWORK_TOOLS = 46919\nVENDOR_ID_DEVISE_FUTURES_IT_SOLUTIONS_LDA = 46920\nVENDOR_ID_UNIVERSIDADE_FEDERAL_DE_SAO_JOAO_DEL_REI = 46921\nVENDOR_ID_WOLF_GMBH = 46922\nVENDOR_ID_LGE_KU_LLC = 46923\nVENDOR_ID_ONCOLOGY_SPECIALISTS_OF_CHARLOTTE_PA = 46924\nVENDOR_ID_EEBUS_INITIATIVE_EV = 46925\nVENDOR_ID_MIDAS_GREEN_TECHNOLOGIES = 46926\nVENDOR_ID_INVITE_NETWORKS_INCORPORATED = 46927\nVENDOR_ID_R0CKNET = 46928\nVENDOR_ID_UZMA_IQBAL_MD_PA = 46929\nVENDOR_ID_SANDELMAN_SOFTWARE_WORKS = 46930\nVENDOR_ID_WELCH_ALLYN_SINGAPORE_PTE_LTD = 46931\nVENDOR_ID_OAO_NEFAZ = 46932\nVENDOR_ID_BUSINESSDECISION = 46933\nVENDOR_ID_AFSOC = 46934\nVENDOR_ID_PROVINZIAL_NORDWEST = 46935\nVENDOR_ID_INGENIEURBRO_EGGIMANN = 46936\nVENDOR_ID_JDUPRATNET = 46937\nVENDOR_ID_FREDERICK_ONCOLOGY_HEMATOLOGY_ASSOCIATES = 46938\nVENDOR_ID_SENTINEL_TECHNOLOGIES = 46939\nVENDOR_ID_QUANTIC_TELECOM = 46940\nVENDOR_ID_NOOM_INC = 46941\nVENDOR_ID_LWENFELSEN_UG_HAFTUNGSBESCHRNKT = 46942\nVENDOR_ID_STC_SYSTEMS = 46943\nVENDOR_ID_BEIJING_YANGLIAN_TECHNOLOGY_CO_LTD = 46944\nVENDOR_ID_RAFAKO_SA = 46945\nVENDOR_ID_TRANSPORTS_PUBLICS_GENEVOIS = 46946\nVENDOR_ID_MEPLAN_GMBH = 46947\nVENDOR_ID_UNITED_AIRLINES_INC = 46948\nVENDOR_ID_MOORE_FAMILY = 46949\nVENDOR_ID_FRZ_UNI_LEIPZIG = 46950\nVENDOR_ID_FIRST_AFFILIATED_HOSPITAL_OF_SUN_YAT_SEN = 46951\nVENDOR_ID_SECUREAUTH_CORPORATION = 46952\nVENDOR_ID_ACTIVE8 = 46953\nVENDOR_ID_INSTITUT_PUIG_CASTELLAR = 46954\nVENDOR_ID_WOLFNET = 46955\nVENDOR_ID_INSTITUTE_OF_COSMOPHYSICAL_RESEARCH_AND_AERONOMY_OF_THE_SIBERIAN_BRANCH_OF_THE_RUSSIAN_ACADEMY_OF_SCIENCES = 46956\nVENDOR_ID_SETELSA = 46957\nVENDOR_ID_NEW_CLOUD_TECHNOLOGIES_LTD = 46958\nVENDOR_ID_JAXAGETO = 46959\nVENDOR_ID_MRN_LDA = 46960\nVENDOR_ID_EMINEO_AG = 46961\nVENDOR_ID_NOVARIS_LTD = 46962\nVENDOR_ID_SHENZHEN_UNITED_INNOVATION_AUTOMATIC_CONTROL_SYSTEM_CO_LTD = 46963\n"
  },
  {
    "path": "python/nav/errors.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Exceptions and errors related to NAV.\"\"\"\n\n\nclass GeneralException(Exception):\n    \"General exception\"\n\n    # Just subclass this with a new doc-string\n    def __str__(self):\n        # Returns a nice version of the docstring\n        args = Exception.__str__(self)  # Get our arguments\n        result = self.__doc__\n        if args:\n            result += \": %s\" % args\n        return result\n\n\nclass ConfigurationError(GeneralException):\n    \"Configuration error\"\n\n\nclass BasepathError(ConfigurationError):\n    \"Configuration error, unknown basepath\"\n\n\nclass RedirectError(GeneralException):\n    \"Need to redirect\"\n\n    # raise with URL, dispatcher.py will redirect\n\n\nclass NoServicesFound(GeneralException):\n    \"No services found for netbox\"\n\n\nclass NoNetboxTypeError(GeneralException):\n    \"This netbox has no type\"\n"
  },
  {
    "path": "python/nav/etc/alertengine.conf",
    "content": "# Default values are commented out\n\n[main]\n# Delay in seconds between queue checks\n#delay: 30\n\n# Log messages of <mailwarnlevel> or higher are also sent via e-mail\n# to the nav admin from nav.conf. Generic log levels are set in logging.conf.\n# Valid mailwarnlevels are DEBUG, INFO, WARNING, ERROR, CRITICAL\n#mailwarnlevel: ERROR\n#mailserver: localhost\n\n\n#[slack]\n# Verify SSL-certificate\n#verify: True\n\n# Slack channel options\n#username: <username>\n#channel: <channel>\n\n# The user icon for the user posting to the channel\n#emoji: <emoji user-icon>\n"
  },
  {
    "path": "python/nav/etc/alertmsg/aggregateLinkState/linkDegraded-email.txt",
    "content": "{% with interface=event.get_subject %}\nSubject: Degraded aggregate link: {{ interface }}\n\nThe aggregated link {{ interface }} ({{interface.ifalias}}) is DEGRADED (at {{ time }})\n\n{% if interface.to_interface %}Connected to {{ interface.to_interface }} ({{ interface.to_interface.ifalias }})\n{% elif interface.to_netbox %}Connected to {{ interface.to_netbox }}{% endif %}\n\nAggregated interfaces: {% for aggregate in interface.get_bundled_interfaces %}\n{{ aggregate.ifname }}{% if not aggregate.is_oper_up %} (Down){% endif %}{% endfor %}\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/aggregateLinkState/linkDegraded-sms.txt",
    "content": "{% with interface=event.get_subject %}\nLink DEGRADED on {{ interface }} ({{ interface.ifalias }}) at {{ time }} - Link down on {{ aggregate_ifname }}\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/aggregateLinkState/linkRestored-email.txt",
    "content": "{% with interface=event.get_subject %}\nSubject: Restored aggregate link: {{ interface }}\n\nThe aggregated link {{ interface }} ({{interface.ifalias}}) is RESTORED (at {{ time }})\n\n{% if interface.to_interface %}Connected to {{ interface.to_interface }} ({{ interface.to_interface.ifalias }})\n{% elif interface.to_netbox %}Connected to {{ interface.to_netbox }}{% endif %}\n\nAggregated interfaces: {% for aggregate in interface.get_bundled_interfaces %}\n{{ aggregate.ifname }}{% if not aggregate.is_oper_up %} (Down){% endif %}{% endfor %}\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/aggregateLinkState/linkRestored-sms-txt",
    "content": "{% with interface=event.get_subject %}\nLink RESTORED on {{ interface }} ({{ interface.ifalias }}) at {{time }}\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/apState/apDown-email.txt",
    "content": "Subject: AccessPoint {{ apname }} disassociated.\n\nMac-address: {{ mac }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/apState/apDown-sms.txt",
    "content": "AccessPoint {{ apname }} ({{ mac }}) disassociated.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/apState/apUp-email.txt",
    "content": "Subject: AccessPoint {{ apname }} associated.\n\nMac-address: {{ mac }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/apState/apUp-sms.txt",
    "content": "AccessPoint {{ apname }} ({{ mac }}) associated.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpAdmDown-email.txt",
    "content": "{% with session=event.get_subject %}\nSubject: {{ netbox }} BGP session with {{ session.get_peer_display }} is administratively DOWN\n\n{{ netbox }} BGP session with {{ session.get_peer_display }} administrative status transitioned away from running to halted.\n\nDetected at {{ time }}.\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpAdmDown-sms.txt",
    "content": "{% with session=event.get_subject %}\n{{ netbox }} BGP session with {{ session.get_peer_display }} is administratively DOWN\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpDown-email.txt",
    "content": "{% with session=event.get_subject %}\nSubject: {{ netbox }} BGP session with {{ session.get_peer_display }} is DOWN\n\n{{ netbox }} BGP session with {{ session.get_peer_display }} transitioned away from established state.\n\nDetected at {{ time }}.\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpDown-sms.txt",
    "content": "{% with session=event.get_subject %}\n{{ netbox }} BGP session with {{ session.get_peer_display }} is DOWN\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpEstablished-email.txt",
    "content": "{% with session=event.get_subject %}\nSubject: {{ netbox }} BGP session with {{ session.get_peer_display }} is ESTABLISHED\n\n{{ netbox }} BGP session with {{ session.get_peer_display }} returned to established state.\n\nDetected at {{ time }}.\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/bgpState/bgpEstablished-sms.txt",
    "content": "{% with session=event.get_subject %}\n{{ netbox }} BGP session with {{ session.get_peer_display }} is ESTABLISHED\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxRestart/coldStart-email.txt",
    "content": "Subject: {{netbox.sysname}} ({{netbox.ip}}) has cold started\n\nBoks {{netbox.sysname}} ({{netbox.ip}}) has performed a coldstart:\n\nOld up since: {{old_upsince}}\nNew up since: {{new_upsince}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxRestart/coldStart-sms.txt",
    "content": "Box has performed a coldstart: {{netbox.sysname}} ({{netbox.ip}})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxDown-email.txt",
    "content": "Subject: Box {{netbox.sysname}} is down\n\nBox {{netbox.sysname}} ({{netbox.ip}}) is down since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxDown-sms.txt",
    "content": "box down {{netbox.sysname}} {{netbox.ip}}"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxDownWarning-email.txt",
    "content": "Subject: Box {{netbox.sysname}} does not reply to ping requests.\n\nBox {{netbox.sysname}} ({{netbox.ip}}) does not reply to ping requests and\nwill be declared down soon if the situation does not change.\nDetected at {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxDownWarning-sms.txt",
    "content": "Box {{netbox.sysname}} does not reply to ping since {{time}}."
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxShadow-email.txt",
    "content": "Subject: Box {{netbox.sysname}} is in shadow\n\nBox {{netbox.sysname}} ({{netbox.ip}}) is in shadow since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxShadow-sms.txt",
    "content": "Box shadow {{netbox.sysname}} ({{netbox.ip}})"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxShadowWarning-email.txt",
    "content": "Subject: Box {{netbox.sysname}}  does not reply to ping requests (shadow).\n\nBox {{netbox.sysname}} ({{netbox.ip}}) does not reply to ping request and\nwill be declared in shadow soon if the situation does not change.\nDetected at {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxShadowWarning-sms.txt",
    "content": "Box {{netbox.sysname}} does not reply to ping (shadow) since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxSunny-email.txt",
    "content": "Subject: Box {{netbox.sysname}} is up from shadow\n\nBox {{netbox.sysname}} ({{netbox.ip}}) is up from shadow since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxSunny-sms.txt",
    "content": "box sunny {{netbox.sysname}} ({{netbox.ip}})"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxUp-email.txt",
    "content": "Subject: Box {{netbox.sysname}} is up\n\nBox {{netbox.sysname}} ({{netbox.ip}}) is up since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/boxState/boxUp-sms.txt",
    "content": "Box {{netbox.sysname}} ({{netbox.ip}}) is up since {{time}}."
  },
  {
    "path": "python/nav/etc/alertmsg/chassisState/chassisDown-email.txt",
    "content": "Subject: {{event.get_subject}} is down\n\n{{event.get_subject}} is down (detected {{time}}).\n"
  },
  {
    "path": "python/nav/etc/alertmsg/chassisState/chassisDown-sms.txt",
    "content": "{{event.get_subject}} is down\n"
  },
  {
    "path": "python/nav/etc/alertmsg/chassisState/chassisUp-email.txt",
    "content": "Subject: {{event.get_subject}} is up\n\n{{event.get_subject}} is up (detected {{time}}).\n"
  },
  {
    "path": "python/nav/etc/alertmsg/chassisState/chassisUp-sms.txt",
    "content": "{{event.get_subject}} is up\n\n"
  },
  {
    "path": "python/nav/etc/alertmsg/default-email.txt",
    "content": "{{event_type}}/{{ alert_type }} on {{ netbox.sysname }} from NAV, but no message template is defined.\nVariable dump:\n{{ context_dump|safe }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/default-sms.txt",
    "content": "{{event_type}}/{{ alert_type }} on {{ netbox.sysname }} (ERROR: no msg template defined)"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceError-email.txt",
    "content": "Subject: Error event registered on {{ netbox.sysname }}\nUser {{ username }} registered an error event on device {{ netbox.sysname }}.\nThe following comment was given:\n\n{{ comment }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceError-sms.txt",
    "content": "{{ username }} registered an error event on {{ netbox.sysname }}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceFwUpgrade-email.txt",
    "content": "Subject: Device {{ device.get_extended_description }} had a firmware upgrade\nDevice {{ device.get_extended_description }} had a firmware upgrade from version {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceFwUpgrade-sms.txt",
    "content": "Device {{ device.get_extended_description }} had a firmware upgrade from {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceHwUpgrade-email.txt",
    "content": "Subject: Device {{ device.get_extended_description }} had a hardware upgrade\nDevice {{ device.get_extended_description }} had a hardware upgrade from {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceHwUpgrade-sms.txt",
    "content": "Device {{ device.get_extended_description }} had a hardware upgrade from {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceSwUpgrade-email.txt",
    "content": "Subject: Device {{ device.get_extended_description }} had a software upgrade\nDevice {{ device.get_extended_description }} had a software upgrade from {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceNotice/deviceSwUpgrade-sms.txt",
    "content": "Device {{ device.get_extended_description }} had a software upgrade from {{ old_version }} to version {{ new_version }}."
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedChassis-email.txt",
    "content": "Subject: Device has been removed as a chassis\nDevice {{device}} has been removed from {{netbox}} as a chassis\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedChassis-sms.txt",
    "content": "Device {{device}} has been removed from {{netbox}} as a chassis\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedFan-email.txt",
    "content": "Subject: Device has been removed as a fan\nDevice {{device}} has been removed from {{netbox}} as a fan\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedFan-sms.txt",
    "content": "Device {{device}} has been removed from {{netbox}} as a fan\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedModule-email.txt",
    "content": "Subject: Device has been removed as a module\nDevice {{device}} has been removed from {{netbox}} as a module\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedModule-sms.txt",
    "content": "Device {{device}} has been removed from {{netbox}} as a module\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedPsu-email.txt",
    "content": "Subject: Device has been removed as a power supply\nDevice {{device}} has been removed from {{netbox}} as a power supply\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceDeletedPsu-sms.txt",
    "content": "Device {{device}} has been removed from {{netbox}} as a power supply\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewChassis-email.txt",
    "content": "Subject: Device has been found as a module\nDevice {{ device.get_extended_description }} has been found on {{netbox}} as a chassis\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewChassis-sms.txt",
    "content": "Device {{ device.get_extended_description }} has been found on {{netbox}} as a chassis\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewFan-email.txt",
    "content": "Subject: Device has been found as a fan\nDevice {{ device.get_extended_description }} has been found on {{netbox}} as a fan\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewFan-sms.txt",
    "content": "Device {{ device.get_extended_description }} has been found on {{netbox}} as a fan\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewModule-email.txt",
    "content": "Subject: Device has been found as a module\nDevice {{ device.get_extended_description }} has been found on {{netbox}} as a module\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewModule-sms.txt",
    "content": "Device {{ device.get_extended_description }} has been found on {{netbox}} as a module\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewPsu-email.txt",
    "content": "Subject: Device has been found as a power supply\nDevice {{ device.get_extended_description }} has been found on {{netbox}} as a power supply\n"
  },
  {
    "path": "python/nav/etc/alertmsg/deviceState/deviceNewPsu-sms.txt",
    "content": "Device {{ device.get_extended_description }} has been found on {{netbox}} as a power supply\n"
  },
  {
    "path": "python/nav/etc/alertmsg/fanState/fanNotOK-email.txt",
    "content": "Subject: Fan not OK on {{ netbox.sysname }}\nFan unit {{ unitname }} on {{ netbox.sysname }} is not OK (state={{ alert.state }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/fanState/fanNotOK-sms.txt",
    "content": "Fan not OK on {{ netbox.sysname }} ({{ unitname }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/fanState/fanOK-email.txt",
    "content": "Subject: Fan OK again on {{ netbox.sysname }}\nFan unit {{ unitname }} on {{ netbox.sysname }} is OK again (state={{ alert.state }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/fanState/fanOK-sms.txt",
    "content": "Fan OK on {{ netbox.sysname }} ({{ unitname }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/deviceHwVerChanged-email.txt",
    "content": "Subject: Hardware version changed for ({{netbox.sysname}})\n\nHardware version changed to:\n    {{new_hwver}}\nfrom:\n    {{old_hwver}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/deviceHwVerChanged-sms.txt",
    "content": "HW Ver changed: {{netbox.sysname}} from {{old_hwver}} to {{new_hwver}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/dnsMismatch-email.txt",
    "content": "Subject: DNS Mismatch ({{dnsname}})\n\nReverse DNS for {{netbox.ip}} is {{dnsname}}; does not match reported sysname\n{{snmpsysname}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/dnsMismatch-sms.txt",
    "content": "DNS {{dnsname}} does not match {{snmpsysname}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/macWarning-email.txt",
    "content": "Subject: Mac active\n\n{{ mac }} is active on {{ netbox.sysname }}, {% if module %}module {{ module }}, {% endif %}port {{ port }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/macWarning-sms.txt",
    "content": "{{mac}} active on {{sysname}} ({% if module %}{{module}}:{% endif %}{{port}})"
  },
  {
    "path": "python/nav/etc/alertmsg/info/serialChanged-email.txt",
    "content": "Subject: Serial changed for ({{new_deviceid}})\n\nSerial changed to:\n    ({{new_deviceid}}) {{new_serial}}\nfrom:\n    ({{old_deviceid}}) {{old_serial}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/info/serialChanged-sms.txt",
    "content": "Serial changed to ({{new_deviceid}}) {{new_serial}} from ({{old_deviceid}}) {{old_serial}}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/juniperRedAlarmState/juniperRedAlarmOff-email.txt",
    "content": "Subject: No red alarms on {{ netbox }}\nAll red alarms on {{ netbox }} were resolved."
  },
  {
    "path": "python/nav/etc/alertmsg/juniperRedAlarmState/juniperRedAlarmOff-sms.txt",
    "content": "No red alarms on {{ netbox }}."
  },
  {
    "path": "python/nav/etc/alertmsg/juniperRedAlarmState/juniperRedAlarmOn-email.txt",
    "content": "Subject: {{ count }} red alarms on {{ netbox }}\nThe red alarm count on {{ netbox }} changed to {{ count }}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/juniperRedAlarmState/juniperRedAlarmOn-sms.txt",
    "content": "{{ count }} red alarms on {{ netbox }}."
  },
  {
    "path": "python/nav/etc/alertmsg/juniperYellowAlarmState/juniperYellowAlarmOff-email.txt",
    "content": "Subject: No yellow alarms on {{ netbox }}\nAll yellow alarms on {{ netbox }} were resolved."
  },
  {
    "path": "python/nav/etc/alertmsg/juniperYellowAlarmState/juniperYellowAlarmOff-sms.txt",
    "content": "No yellow alarms on {{ netbox }}."
  },
  {
    "path": "python/nav/etc/alertmsg/juniperYellowAlarmState/juniperYellowAlarmOn-email.txt",
    "content": "Subject: {{ count }} yellow alarms on {{ netbox }}\nThe yellow alarm count on {{ netbox }} changed to {{ count }}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/juniperYellowAlarmState/juniperYellowAlarmOn-sms.txt",
    "content": "{{ count }} yellow alarms on {{ netbox }}."
  },
  {
    "path": "python/nav/etc/alertmsg/kake/default-email.txt",
    "content": "Subject: {{ subject }}\n\n{{ body }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/kake/default-sms.txt",
    "content": "{{ subject }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/linkState/linkDown-email.txt",
    "content": "{% with interface=event.get_subject %}\nSubject: Link down on {{ interface }}\n\nLink status on {{ interface }} ({{interface.ifalias}}) is DOWN.\n\n{% if interface.to_interface %}Connected to {{ interface.to_interface }} ({{ interface.to_interface.ifalias }})\n{% elif interface.to_netbox %}Connected to {{ interface.to_netbox }}{% endif %}{% if interface.get_aggregator %}{% with aggregator=interface.get_aggregator %}Part of aggregate interface {{ aggregator.ifname }} ({{ aggregator.ifalias }}){% endwith %}{% endif %}\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/linkState/linkDown-sms.txt",
    "content": "{% with interface=event.get_subject %}\nLink DOWN on {{ interface }} ({{ interface.ifalias }})\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/linkState/linkUp-email.txt",
    "content": "{% with interface=event.get_subject %}\nSubject: Link UP on {{ interface }}\n\nLink status on {{ interface }} ({{interface.ifalias}}) is UP.\n\n{% if interface.to_interface %}Connected to {{ interface.to_interface }} ({{ interface.to_interface.ifalias }})\n{% elif interface.to_netbox %}Connected to {{ interface.to_netbox }}{% endif %}{% if interface.get_aggregator %}{% with aggregator=interface.get_aggregator %}Part of aggregate interface {{ aggregator.ifname }} ({{ aggregator.ifalias }}){% endwith %}{% endif %}\n\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/linkState/linkUp-sms.txt",
    "content": "{% with interface=event.get_subject %}\nLink UP on {{ interface }} ({{ interface.ifalias }})\n{% endwith %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/maintenanceState/offMaintenance-email.txt",
    "content": "Subject: Off maintenance: {{netbox.sysname}}\n\n{{netbox.sysname}} is no longer on maintenance, since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/maintenanceState/offMaintenance-sms.txt",
    "content": "Box {{sysname}} is off maintenance since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/maintenanceState/onMaintenance-email.txt",
    "content": "Subject: On maintenance: {{netbox.sysname}}\n\n{{netbox.sysname}} is now on maintenance.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/maintenanceState/onMaintenance-sms.txt",
    "content": "Box {{netbox.sysname}} is on maintenance since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleDown-email.txt",
    "content": "Subject: Module {{module.name}}, box {{netbox.sysname}} down\n\nModule {{module.name}}, box {{netbox.sysname}} ({{netbox.ip}}) does not reply to\nrequests and is declared down.\nDetected {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleDown-sms.txt",
    "content": "Module {{module.name}}, box {{netbox.sysname}} is down since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleDownWarning-email.txt",
    "content": "Subject: Module {{module.name}}, box {{netbox.sysname}} does not reply to requests\n\nModule {{module.name}}, box {{netbox.sysname}} ({{netbox.ip}}) does not reply to\nrequests and will be declared down soon if the situation does not change.\nDetected {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleDownWarning-sms.txt",
    "content": "Module {{module.name}}, box {{netbox.sysname}} does not reply since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleUp-email.txt",
    "content": "Subject: Module {{module.name}}, box {{netbox.sysname}} is up\n\nModule {{module.name}}, box {{netbox.sysname}} ({{netbox.ip}}) is up again,\nsince {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/moduleState/moduleUp-sms.txt",
    "content": "Module {{module.name}}, box {{netbox.sysname}} is up since {{time}}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/psuState/psuNotOK-email.txt",
    "content": "Subject: PSU not OK on {{ netbox.sysname }}\nPSU unit {{ unitname }} on {{ netbox.sysname }} is not OK (state={{ alert.state }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/psuState/psuNotOK-sms.txt",
    "content": "PSU not OK on {{ netbox.sysname }} ({{ unitname }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/psuState/psuOK-email.txt",
    "content": "Subject: PSU OK again on {{ netbox.sysname }}\nPSU unit {{ unitname }} on {{ netbox.sysname }} is OK again (state={{ alert.state }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/psuState/psuOK-sms.txt",
    "content": "PSU OK on {{ netbox.sysname }} ({{ unitname }})\n"
  },
  {
    "path": "python/nav/etc/alertmsg/serviceState/default-email.txt",
    "content": "{% if state == event.STATE_START %}\n\nSubject: Service {{service.handler}} is down on {{netbox.sysname}}\n\nService {{service.handler}} on {{netbox.sysname}} is down since {{time}}.\nServer up: {{deviceup}}\nStatus: {{descr}}\n\n{% else %}{% if state == event.STATE_END %}\n\nSubject: Service {{service.handler}} is up on {{netbox.sysname}}\n\nService {{service.handler}} on {{netbox.sysname}} is up since {{time}}.\nServer up: {{deviceup}}\nStatus: {{descr}}\n\n{% else %}\n\nUnrecognized service alert on {{netbox.sysname}}\n{% debug %}\n\n{% endif %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/serviceState/default-sms.txt",
    "content": "{% if state == event.STATE_START %}\n\nService {{service.handler}} on {{netbox.sysname}} is down since {{time}}\n\n{% else %}{% if state == event.STATE_END %}\n\nService {{service.handler}} on {{netbox.sysname}} is up since {{time}}\n\n{% else %}\n\nUnrecognized service alert on {{netbox.sysname}}\n\n{% endif %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/snmpAgentState/snmpAgentDown-email.txt",
    "content": "Subject: SNMP agent down on {{ netbox.sysname }}\n{{ netbox.sysname }} has stopped responding to SNMP requests.\n\nVerify that read-only SNMP community is configured correctly in NAV, and that no access lists are blocking SNMP.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/snmpAgentState/snmpAgentDown-sms.txt",
    "content": "No SNMP response: {{ netbox.sysname }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/snmpAgentState/snmpAgentUp-email.txt",
    "content": "Subject: SNMP agent up on {{ netbox.sysname }}\n{{ netbox.sysname }} has resumed responding to SNMP requests.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/snmpAgentState/snmpAgentUp-sms.txt",
    "content": "SNMP response OK: {{ netbox.sysname }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/thresholdState/belowThreshold-email.txt",
    "content": "Subject: Threshold alert cleared for {{ metric }}\n\nA previously exceeded threshold rule has returned to normal:\n\nMetric: {{ metric }}\nTime: {{ time }}\nValue: {{ measured_value }}\nThreshold: {% firstof clear alert %}\n{% if description %}Description: {{ description }}{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/thresholdState/belowThreshold-sms.txt",
    "content": "{{ metric }} cleared at {{ measured_value }} {% firstof clear alert %} on {{ time }}{% if description %} ({{ description }}){% endif %}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/thresholdState/exceededThreshold-email.txt",
    "content": "Subject: Threshold exceeded on {{ metric }}\n\nA configured threshold rule was exceeded:\n\nMetric: {{ metric }}\nTime: {{ time }}\nValue: {{ measured_value }}\nThreshold: {{ alert|safe }}\n{% if description %}Description: {{ description }}{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/thresholdState/exceededThreshold-sms.txt",
    "content": "{{ metric }} exceeded at {{ measured_value }} {{ alert|safe }} on {{ time }}{% if description %} ({{ description }}){% endif %}.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/upsPowerState/upsOnBatteryPower-email.txt",
    "content": "{{ sysname }} is operating on battery power.\n\n{{ sysname }} is operating on battery power.\n{% if batterytime %}\nBatterytime left: {{ batterytime }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/upsPowerState/upsOnBatteryPower-sms.txt",
    "content": "{{ sysname }} is operating on battery power. {% if batterytime %} Batterytime left: {{ batterytime }} {% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/upsPowerState/upsOnUtilityPower-email.txt",
    "content": "Utility power has been restored on {{ sysname }}.\n\n{{ sysname }} is now running on utility power.\n"
  },
  {
    "path": "python/nav/etc/alertmsg/upsPowerState/upsOnUtilityPower-sms.txt",
    "content": "Utility power has been restored on {{ sysname }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_airflow/default-email.txt",
    "content": "{% if event.state == event.STATE_START %}\nSubject: Weathergoose {{ goosename }}: airflow threshold exceeded\n\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n{% else %}\nSubject: Weathergoose {{ goosename }}: airflow threshold clear\n\n{{ climatedescr }}: {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_airflow/default-sms.txt",
    "content": "{% if event.state == event.STATE_START %}\n{{ goosename }}: airflow threshold exceeded - {{ climatevalue }}\n{% else %}\n{{ goosename }}: airflow threshold clear - {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_humidity/cmClimateHumidityNOTIFY-email.txt",
    "content": "Subject: Weathergoose {{ goosename }}: humidity threshold exceeded\n\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_humidity/cmClimateHumidityNOTIFY-sms.txt",
    "content": "{{ goosename }}: humidity threshold exceeded - {{ climatevalue }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_humidity/default-email.txt",
    "content": "{% if event.state == event.STATE_START %}\nSubject: Weathergoose {{ goosename }}: humidity threshold exceeded\n\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n{% else %}\nSubject: Weathergoose {{ goosename }}: humidity threshold clear\n{{ climatedescr }}: {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_humidity/default-sms.txt",
    "content": "{% if event.state == event.STATE_START %}\n{{ goosename }}: humidity threshold exceeded - {{ climatevalue }}\n{% else %}\n{{ goosename }}: humidity threshold clear - {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_light/default-email.txt",
    "content": "{% if event.state == event.STATE_START %}\nSubject: Weathergoose {{ goosename }}: light threshold exceeded\n\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n{% else %}\nSubject: Weathergoose {{ goosename }}: light threshold clear\n{{ climatedescr }}: {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_light/default-sms.txt",
    "content": "{% if event.state == event.STATE_START %}\n{{ goosename }}: light threshold clear - {{ climatevalue }}\n{% else %}\n{{ goosename }}: light threshold exceeded - {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_sound/default-email.txt",
    "content": "{% if event.state == event.STATE_START %}\nSubject: Weathergoose {{ goosename }}: sound threshold exceeded\n\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n{% else %}\nSubject: Weathergoose {{ goosename }}: sound threshold clear\n{{ climatedescr }}: {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_sound/default-sms.txt",
    "content": "{% if event.state == event.STATE_START %}\n{{ goosename }}: sound threshold exceeded - {{ climatevalue }}\n{% else %}\n{{ goosename }}: sound threshold clear - {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_temperature/default-email.txt",
    "content": "{% if event.state == event.STATE_START %}\nSubject: Weathergoose {{ goosename }}: temperature threshold exceeded\n\nSensorname: {{ sensorname|default:\"N/A\" }}\nThreshold: {{ triptype }}\n{{ climatedescr }}: {{ climatevalue }}\n{% else %}\nSubject: Weathergoose {{ goosename }}: temperature threshold clear\n\nSensorname: {{ sensorname|default:\"N/A\" }}\n{{ climatedescr }}: {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/weathergoose_temperature/default-sms.txt",
    "content": "{% if event.state == event.STATE_START %}\n{{ goosename }}: {{ sensorname }} temperature threshold exceeded - {{ climatevalue }}\n{% else %}\n{{ goosename }}: {{ sensorname }} temperature threshold clear - {{ climatevalue }}\n{% endif %}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/whatsup/default-email.txt",
    "content": "Subject: {{ subject }}\n\n{{ body }}\n"
  },
  {
    "path": "python/nav/etc/alertmsg/whatsup/default-sms.txt",
    "content": "{{ subject }}\n"
  },
  {
    "path": "python/nav/etc/alertprofiles/README",
    "content": "In this directory we have templates for time period layouts. These templates\nmay be used when making new profiles and are intended to make the operation of\nmaking profiles easier.\n\nThe templates follow python config file rules, ie. first a \"[section]\" header\nand then \"name: value\" pairs.\n\nAlert profiles will only recognize the following sections:\n - [main]\n - [all_week]\n - [weekdays]\n - [weekends]\n\nUnder [main] only one entry is recognized: \"description:\". It's only purpose is\nto describe what's special about this time period template, and is used in the\ndrop-down list the user can choose a template from when making a new profile.\n\n[all_week], [weekdays] and [weekends] are used to specify the time periods, in\nthe same manner one would specify them in the web GUI. The \"key: value\" pairs\none will use here is \"unique_name: start_of_period\" where start_of_period is a\ntime stamp, ie \"08:00\" or \"15:00\". The name of the key is not important, but\nshould be unique to follow configuration file rules.\n\nExample file (START and EOF are for your readability only, and should not be in\na real template file):\n\nSTART\n[main]\ndescription: This is an example time period template.\n\n[all_week]\nperiod_1: 08:00\n\n[weekdays]\nperiod_1: 16:00\nperiod_2: 22:00\nperiod_3: 24:00\n\n[weekends]\nperiod_1: 04:00\nEOF\n"
  },
  {
    "path": "python/nav/etc/alertprofiles/five_periods.conf",
    "content": "[main]\ndescription: Two periods on weekdays (08:00 - 16:00), one on weekends and a shared night period (22:00 - 08:00).\n\n[all_week]\nperiod_1: 22:00\n\n[weekdays]\nperiod_1: 08:00\nperiod_2: 16:00\n\n[weekends]\nperiod_1: 08:00\n"
  },
  {
    "path": "python/nav/etc/alertprofiles/one_period.conf",
    "content": "[main]\ndescription: One period for the whole week.\n\n[all_week]\nperiod_1: 08:00\n"
  },
  {
    "path": "python/nav/etc/alertprofiles/three_periods.conf",
    "content": "[main]\ndescription: Two periods on weekdays (08:00 - 16:00), one on weekends.\n\n[weekdays]\nperiod_1: 08:00\nperiod_2: 16:00\n\n[weekends]\nperiod_1: 08:00\n"
  },
  {
    "path": "python/nav/etc/apache/apache.conf.example",
    "content": "# NAV web interface example Apache configuration using mod_wsgi\n#\n# This file should be included from a VirtualHost directive somewhere (or in\n# the global Apache config if you're not using virtualhosts).\n#\n#\n# You should alter these defines according to your installation:\n#\nDefine document_root /path/to/your/webroot\nDefine documentation_path /path/to/your/installed/nav/documentation\nDefine nav_uploads_path /usr/share/nav/var/uploads\nDefine nav_python_base /usr/share/pyshared\n# Define nav_virtual_env /path/to/a/python/virtual/env/with/NAV/in/it\nDefine nav_user navcron\n\n#\n# Configuration begins here\n#\n\nDocumentRoot \"${document_root}\"\n\n<Directory \"${document_root}\">\n    Options Indexes FollowSymlinks ExecCGI\n    # Access directives are different from Apache 2.4 and on\n    <IfVersion < 2.4>\n      Order allow,deny\n      Allow from all\n    </IfVersion>\n    <IfVersion >= 2.4>\n      Require all granted\n    </IfVersion>\n</Directory>\n\nAlias /favicon.ico \"${document_root}/static/images/main/favicon.ico\"\nAlias /doc \"${documentation_path}/html\"\n\n<Location /doc>\n    # Access directives are different from Apache 2.4 and on\n    <IfVersion < 2.4>\n      Order allow,deny\n      Allow from all\n    </IfVersion>\n    <IfVersion >= 2.4>\n      Require all granted\n    </IfVersion>\n</Location>\n\nAlias /uploads \"${nav_uploads_path}\"\n<Location /uploads>\n    # Files here may be sensitive. Do not allow browsing.\n    Options -Indexes\n    # Access directives are different from Apache 2.4 and on\n    <IfVersion < 2.4>\n      Order allow,deny\n      Allow from all\n    </IfVersion>\n    <IfVersion >= 2.4>\n      Require all granted\n    </IfVersion>\n</Location>\n\nAlias /static \"${document_root}/static\"\n\n<Location /api>\n    # Make sure WSGI allows the Authorization header to pass through to\n    # allow tokens to be used for authorization.\n    WSGIPassAuthorization On\n</Location>\n\n# Define the actual WSGI daemon process that runs the NAV web code.\n#\n# It may or may not run in a Python virtualenv. If nav_virtual_env is defined,\n# make sure mod_wsgi was compiled with the same Python interpreter used by this\n# environment.\n#\n<IfDefine nav_virtual_env>\n  WSGIDaemonProcess NAV user=${nav_user} processes=2 display-name=%{GROUP} python-home=${nav_virtual_env}\n</IfDefine>\n<IfDefine !nav_virtual_env>\n  WSGIDaemonProcess NAV user=${nav_user} processes=2 display-name=%{GROUP}\n</IfDefine>\n\nWSGIProcessGroup NAV\nWSGIApplicationGroup %{GLOBAL}\nWSGIScriptAlias / \"${nav_python_base}/nav/wsgi.py\"\n<Directory \"${nav_python_base}/nav\">\n    # Access directives are different from Apache 2.4 and on\n    <IfVersion < 2.4>\n      Order allow,deny\n      Allow from all\n    </IfVersion>\n    <IfVersion >= 2.4>\n      Require all granted\n    </IfVersion>\n</Directory>\n"
  },
  {
    "path": "python/nav/etc/arnold/arnold.conf",
    "content": "########################################\n# Configuration for Arnold\n# \"I'll be back\"\n########################################\n\n[arnold]\n\n# Email sent by Arnold use this address.\nfromaddress = arnold@localhost\n\n# List of allowed equipment-types to block ports in.\nallowtypes = SW,EDGE\n\n# Mail-adress to send list of computers not blocked\nnonblockmail = \n\n# inputfiles - depricated\ninputfiles = \n\n# Define loglevels for the different subsystems of arnold\n# See http://docs.python.org/lib/module-logging.html for possible values\n[loglevel]\n\nautoenable = DEBUG\nstart_arnold = DEBUG\nt1000 = DEBUG\narnold = DEBUG\n\n\n[arnoldweb]\n\n# Default method of detention on web\n# Valid values: block, quarantine\ndefaultdetention = block\n"
  },
  {
    "path": "python/nav/etc/arnold/mailtemplates/README",
    "content": "In this directory we have the mail-templates. The templates are used\nwhen Arnold sends out mails to the people responsible for a computer.\n\nYou specify the name of the template Arnold uses on the website.\n\nA template is easy to make. It consist of a subject and whatever text\nyou want to include. There are some variales available for you to make\nthe template more informative:\n\n$reason - the reason for this block\n$list - the list of ip-addresses blocked\n$comment - the comment entered when running the script\n\nA mailtemplate may look like this (the START and EOF are for your\nreadability only):\n\n\nSTART\nComputers blocked because of $reason.\n\nSome informative text.\n\nThe following computers have been blocked:\n\n$list\n\n\nContact-information.\nEOF\n"
  },
  {
    "path": "python/nav/etc/arnold/nonblock.conf",
    "content": "# nonblock\n# --------\n#\n# This file is parsed by arnold during runtime. There are 2 things\n# specified in this file:\n#\n# 1. What netboxtypes to not try to block/unblock ports on.\n# 2. IP-adresses/ranges not to block.\n#\n# The netboxtypes should be entered after the line starting with\n# \";netboxtypes\".\n#\n# The netboxtypes are specified by a vendor,typename format (these\n# fields are in the \"type\"-table in the manage-database).\n# E.g. 3com,SW3300\n\n\n;netboxtypes\n\n# Enter any netboxtypes that we don't want to block/unblock ports on,\n# here (format: vendor,typename):\n\n\ncisco,wsc5500\n3com,PS40\n3com,Off8\n\n\n# The ip-adresses may be specified in the following ways:\n# - normal: xxx.xxx.xxx.xxx     (e.g. 129.241.23.56)\n# - list  : xxx.xxx.xxx.xxx-xxx (e.g. 129.241.23.56-68)\n# - subnet: xxx.xxx.xxx.xxx/xx  (e.g. 129.241.23.0/26)\n\n;ip-ranges/addresses\n\n# Enter any ip-adresses/ranges that are not to be blocked, here:\n\n"
  },
  {
    "path": "python/nav/etc/cron.d/activeip",
    "content": "## info: Collect active ip-adresses for all prefixes\n*/30 * * * * collect_active_ip\n"
  },
  {
    "path": "python/nav/etc/cron.d/dbclean",
    "content": "## info: Clean database with navclean\n*/5 * * * * navclean -f -q --netbox --websessions\n*/5 * * * * navclean -f -q --close-arp --interval '30 minutes'\n"
  },
  {
    "path": "python/nav/etc/cron.d/emailreports",
    "content": "## info: Send email reports for device and link availability\n0 5 1 * * emailreports month\n0 5 * * mon emailreports week\n0 5 * * * emailreports day\n"
  },
  {
    "path": "python/nav/etc/cron.d/logengine",
    "content": "## info: Regularly check the syslog for network messages and update the logger database\n\n# Regular run\n* * * * * logengine -q\n\n# Delete old messages once a day\n3 3 * * * logengine -d\n\n# Delete old ipdevpoll job log entries once every hour\n3 * * * * ipdevpolld --clean\n"
  },
  {
    "path": "python/nav/etc/cron.d/mactrace",
    "content": "## info: Checks NAV's cam log for watched MAC addresses\n11,26,41,56 * * * *      macwatch\n"
  },
  {
    "path": "python/nav/etc/cron.d/maintengine",
    "content": "## info: Regularly check the maintenance-queue and send events to eventq\n*/5 * * * * maintengine\n"
  },
  {
    "path": "python/nav/etc/cron.d/navdhcpstats",
    "content": "## info: Regularly fetch DHCP stats from endpoints in dhcpstats.conf to the Carbon backend\n*/5 * * * * navdhcpstats\n"
  },
  {
    "path": "python/nav/etc/cron.d/navoui",
    "content": "## info: Update the database with OUIs and their respective vendors\n0 10 * * * navoui\n"
  },
  {
    "path": "python/nav/etc/cron.d/navstats",
    "content": "## navstats: Collect statistics defined in navstats.conf\n*/5 * * * * navstats\n"
  },
  {
    "path": "python/nav/etc/cron.d/netbiostracker",
    "content": "## info: Regularly fetch netbiosnames from active computers\n*/15 * * * * netbiostracker\n"
  },
  {
    "path": "python/nav/etc/cron.d/sortedstats_cacher",
    "content": "## info: Regularly update cache for sortedstats\n*/15 * * * * sortedstats_cacher hour\n0 * * * * sortedstats_cacher day\n0 */6 * * * sortedstats_cacher week\n0 0 * * * sortedstats_cacher month\n"
  },
  {
    "path": "python/nav/etc/cron.d/thresholdmon",
    "content": "## info: Monitors your Graphite metrics for exceeded thresholds\n\n*/5 * * * * thresholdmon\n"
  },
  {
    "path": "python/nav/etc/cron.d/topology",
    "content": "## info: Detects the topology of your network.\n\n35 * * * *              navtopology --l2 --vlan\n\n# If you want to run the old topology detector, uncomment the following lines:\n\n# 35 * * * *              network-discovery topology\n# 38 * * * *              network-discovery vlan\n"
  },
  {
    "path": "python/nav/etc/daemons.yml",
    "content": "# NAV daemons\ndaemons:\n    alertengine:\n        description: Dispatches alerts according to individual alert profiles.\n        command: alertengine\n\n    eventengine:\n        command: eventengine\n        description: Reacts and creates alerts from events on the event queue.\n\n    ipdevpoll:\n        description: Collects SNMP inventory data from IP devices.\n        command: ipdevpolld\n        pidfile: ipdevpolld.pid\n\n    pping:\n        description: Pings all IP devices for status monitoring.\n        command: pping\n        privileged: true\n\n    servicemon:\n        description: Monitors configured services.\n        command: servicemon\n\n    smsd:\n        description: Dispatches queued SMS alerts.\n        command: smsd\n\n    snmptrapd:\n        description: Receives and processes SNMP traps and notifications.\n        command: navtrapd\n        privileged: true\n"
  },
  {
    "path": "python/nav/etc/db.conf",
    "content": "#\n# This file contains database configuration setup for NAV.  Please be\n# aware that whitespace is allowed on each side of the = characters.\n#\n\n# Configure which host is running the postmaster.\ndbhost=localhost\n\n# Configure which port the postmaster listens to.\ndbport=5432\n\n# Configure the name of the database on the SQL server.\ndb_nav=nav\n\n# What database user to connect as.  \n#\n# For more advanced usage, individual NAV programs and subsystems can\n# be configured to connect with separate users by specifying\n# script_<subsystem name> = <database user>\n#\n# The default user is set with script_default = <database user>\n#\nscript_default = nav\n\n#\n# PostgreSQL user passwords.\n# userpw_nav configures the password used when connecting as the\n# database user \"nav\".\n#\nuserpw_nav=\n"
  },
  {
    "path": "python/nav/etc/dhcpstats.conf",
    "content": "# This file contains the configuration for collection of stats from DHCP servers.\n#\n# For NAV to collect stats from a DHCP server, API endpoints on the DHCP server\n# that serve such statistics must be set up. (Such API endpoints are usually a\n# part of the DHCP server implementation.) Afterwards, options for the the DHCP\n# server, such as its type and its API's root URL, must be set in a new section\n# in this file. The section's name must start with 'server_' for NAV to\n# recognize the section as configuring a DHCP server (other sections are\n# reserved for future use). Depending on the type you specify for the DHCP\n# server, various additional options may be available to control NAV's behavior\n# for that DHCP server.\n#\n#\n# [server_foo] <--- This section configures a DHCP server with name 'foo'\n# type=dnsmasq <--- This option tells us it's a dnsmasq server\n# url=https://url.to.dnsmasq.server/api/ <--- This option tells us where the API\n#                                             root is located\n# token=/path/to/token <--- different server types have different additional\n#                           options (see their respective sections below)\n#\n# [foo] <--- This section does *not* configure a DHCP server\n#            (and is reserved for future use)\n# loglevel=info\n# threads=4\n#\n#\n# Note that server names (the part after 'server_' in section names) are used\n# when storing statistics from the respective DHCP server into the\n# Graphite/Carbon timeseries database backend. Therefore, the server names\n# *should* contain only English letters, digits, underscores, and hyphens. Any\n# other character is replaced by an underscore, which at best causes some\n# confusion and at worst causes unrelated DHCP servers to be treated as the same\n# server in the timeseries database.\n#\n#\n# [server_foo!]  <--- This section configures a DHCP server with name stored by\n#                     NAV as 'foo_'\n#\n# [server_foo?]  <--- This section *also* configures a DHCP server with name\n#                     stored by NAV as 'foo_'\n#\n#\n# The remainder of this commentary documents how to configure the\n# various types of DHCP servers that are supported:\n#\n#\n# Configuring DHCP servers with type 'kea-dhcp4'\n# ==============================================\n# If the DHCP server you want to collect stats from is a Kea DHCPv4 server,\n# its type should be 'kea-dhcp4'.\n#\n# Mandatory options\n# -----------------\n# * The 'type' option, specifying what type of DHCP server is being configured.\n#   Its value must be set to 'kea-dhcp4'.\n#\n# * The 'url' option, specifying where the server's Kea API (control socket) is\n#   located. The url's scheme must be 'http' or 'https'. Sensitive data (such as\n#   passwords) that might be stored in the Kea DHCPv4 server's configuration is\n#   transmitted during correspondence, so using 'https' is highly recommended.\n#   As a sidenote, such possibly sensitive data is also temporarily stored in\n#   the memory of a NAV process.\n#\n# Optional options\n# ----------------\n# * The 'timeout' option, specifying how many seconds the client should wait for\n#   an HTTP response from the Kea API (control socket) before timing out.\n#   Defaults to 5.0.\n#\n# * The 'http_basic_username' and 'http_basic_password' options. When\n#   both of these options are set, HTTP Basic Authentication will be used in\n#   communication with the Kea API (control socket).\n#\n# * The 'client_cert_path' and 'client_cert_key_path' options. These options\n#   enable authentication to the Kea API (control socket) using client-side SSL\n#   certificates if either 'client_cert_path' is specified alone, or if\n#   'client_cert_path' and 'client_cert_key_path' are both specified. If\n#   'client_cert_path' is specified alone, it specifies the path to a file\n#   containing both the client's certificate and its private key. If\n#   'client_cert_path' and 'client_cert_key_path' are both specified,\n#   'client_cert_path' specifies the path to a file containing the client's\n#   certificate, and 'client_cert_key_path' specifies the path to a file\n#   containing the client's private key. Authentication using client-side SSL\n#   certificates require the Kea API's url to have the 'https' scheme.\n#\n# * The 'user_context_groupname_key' option, specifying how NAV finds the group\n#   name (if any) of a Kea DHCPv4 address pool. On the server-side each Kea\n#   DHCPv4 address pool is configured as a JSON object with a mandatory 'pool'\n#   key and an optional 'user-context' key holding an arbitrary JSON object. The\n#   'user_context_groupname_key' option specifies which key in this\n#   'user-context' object NAV will look up to find the group name (if any) of a\n#   Kea DHCPv4 address pool. By default, NAV will look for the 'group' key.\n#   Example:\n#\n#     If 'user_context_groupname_key' has been set to 'group-in-nav' for a Kea\n#     DHCPv4 server with the following configuration:\n#\n#     {\n#       \"Dhcp4\": {\n#         \"subnet4\": [\n#           {\n#             \"subnet\":  \"172.31.255.0/24\",\n#             \"pools\": [\n#               {\n#                 \"pool\": \"172.31.255.0/25\",\n#                 \"pool-id\": 1,\n#                 \"user-context\": {\n#                    \"group-in-nav\": \"oslo-staff\"\n#                 }\n#               }\n#             ],\n#             \"id\": 1,\n#             \"interface\": \"eth0\"\n#           }\n#         ]\n#       }\n#     }\n#\n#     Then NAV will associate with the address pool '172.31.255.0/25' the group\n#     name 'oslo-staff'. Note that the group name of a Kea DHCPv4 address pool\n#     *should* only contain English letters, digits, underscores, and hyphens as\n#     it will be stored into the Graphite/Carbon timeseries database backend.\n#\n#\n# Example 'kea-dhcp4' configuration\n# ---------------------------------\n# [server_example-1]\n# type=kea-dhcp4\n# url=https://example.org:8080/\n# timeout=5.0\n# http_basic_username=nav\n# http_basic_password=cfcc3475c4de4f0484a4a475ec0a6edd\n# client_cert_path=/etc/client-cert.pem\n# client_cert_key_path=/etc/client-cert-key.pem\n# user_context_groupname_key=group\n"
  },
  {
    "path": "python/nav/etc/eventengine.conf",
    "content": "# NAV eventengine configuration\n[export]\n# If set, the script option will point to a program that will receive a\n# continuous stream of JSON serialized alert objects on its STDIN.\n;script = /path/to/event/receiver/script\n\n[timeouts]\n#\n# This section configures timeout values for alert quarantines. A quarantine\n# is when one or multiple alerts are held back for a period of time, while\n# waiting for the problem to resolve itself. It is a protection against a\n# torrent of alerts for things that are rapidly flapping. \n#\n# All options are commented out with default values. Uncomment to change the\n# defaults. Valid units are s=seconds, m=minutes, h=hours, d=days.\n#\n\n# When a boxDown event is received, how long to wait for resolve before\n# sending out a boxDownwarning.\n;boxDown.warning = 1m\n\n# When a boxDown event is received, how long to wait for resolve before\n# finally declaring the IP device as down.\n;boxDown.alert = 4m\n\n# When a moduleDown event is received, how long to wait for resolve before\n# sending out a moduleDownWarning.\n;moduleDown.warning = 1m\n\n# When a moduleDown event is received, how long to wait for resolve before\n# finally declaring the module as down.\n;moduleDown.alert = 4m\n\n# When a linkDown event is received, how long to wait for resolve before\n# finally declaring the link as down.\n;linkDown.alert = 4m\n\n# When an snmpAgentDown event is received, how long to wait for resolve before\n# finally declaring the SNMP agent as down.\n;snmpAgentDown.alert = 4m\n\n# When a bgpDown event is received, how long to wait for resolve before\n# finally declaring the BGP session to be down.\n;bgpDown.alert = 1m\n\n[linkdown]\n# This section contains options to control which link down events to\n# send alerts about. Also see settings in ipdevpoll.conf about which links to\n# generate events for in the first place.\n\n# When enabled, only link loss on redundant links cause alerts to be sent.\n# The rationale is that on a non-redundant link, you will get boxDown alerts\n# for the devices behind that link, which are now unreachable.\n;only_redundant = yes\n\n# If a linkDown event is posted for a switch port that doesn't carry any of\n# these vlans (tagged or untagged), no alert is sent. This is a\n# space-separated list of VLAN tag numbers. An empty value means no filtering\n# based on VLAN.\n;limit_to_vlans =\n"
  },
  {
    "path": "python/nav/etc/fillthresholds.conf",
    "content": "# Config file for fillthresholds\nthreshold = 90\n"
  },
  {
    "path": "python/nav/etc/geomap/config.py",
    "content": "# config.py: Configuration file for Geomap.\n#\n# Warning: Despite the name, this file is NOT a Python file.  The\n# '.py' in the name is there because the syntax is sufficiently\n# similar to Python to make it beneficial to edit the file in Python\n# mode.\n\n\ndef variant(normal, \"Map with sensitive information\"):\n\n    template_file(node_popup, \"popup_place.html\")\n    template_file(edge_popup, \"popup_network.html\")\n\n    def indicator(edge, color, \"Link load\"):\n        if is_nan(load_out) or capacity == 0:\n            (\"#666666\", \"No statistics\")\n        if load_out/capacity < 0.3:\n            (\"#8AE234\", \"0--30 %\")\n        if load_out/capacity < 0.6:\n            (\"#FCE94F\", \"30--60 %\")\n        if load_out/capacity < 0.9:\n            (\"#FCAF3E\", \"60--90 %\")\n        if True:\n            (\"#CC0000\", \"90--100 %\")\n\n    def indicator(edge, size, \"Link capacity\"):\n        if capacity <= 2:\n            (4, \"<= 2 Mbit/s\")\n        if capacity <= 155:\n            (6, \"<= 155 Mbit/s\")\n        if capacity <= 2500:\n            (8, \"<= 2.5 Gbit/s\")\n        if True:\n            (10, \"> 2.5 Gbit/s\")\n\n    def indicator(node, color, \"CPU load\"):\n        if is_nan(load):\n            (\"#666666\", \"No statistics\")\n        if load < 50:\n            (\"#8AE234\", \"0--0.5\")\n        if load < 100:\n            (\"#FCE94F\", \"0.5--1\")\n        if load >= 100:\n            (\"#CC0000\", \"> 1\")\n\n    def indicator(node, size, \"# netboxes\"):\n        if num_netboxes == 1:\n            (4, \"1\")\n        if num_netboxes <= 10:\n            (6, \"2--10\")\n        if num_netboxes <= 20:\n            (8, \"11--20\")\n        if True:\n            (10, \"> 20\")\n\n\ndef variant(open, \"Map with open information\"):\n\n    template_file(node_popup, \"popup_place_open.html\")\n    template_file(edge_popup, \"popup_network_open.html\")\n\n    def indicator(edge, color, \"Link load\"):\n        if is_nan(load_out) or capacity == 0:\n            (\"#666666\", \"No statistics\")\n        if load_out/capacity < 0.3:\n            (\"#8AE234\", \"0--30 %\")\n        if load_out/capacity < 0.6:\n            (\"#FCE94F\", \"30--60 %\")\n        if load_out/capacity < 0.9:\n            (\"#FCAF3E\", \"60--90 %\")\n        if True:\n            (\"#CC0000\", \"90--100 %\")\n\n    def indicator(edge, size, \"Link capacity\"):\n        if capacity <= 2:\n            (4, \"<= 2 Mbit/s\")\n        if capacity <= 155:\n            (6, \"<= 155 Mbit/s\")\n        if capacity <= 2500:\n            (8, \"<= 2.5 Gbit/s\")\n        if True:\n            (10, \"> 2.5 Gbit/s\")\n\n    def indicator(node, color, \"CPU load\"):\n        if is_nan(load):\n            (\"#666666\", \"No statistics\")\n        if load < 50:\n            (\"#8AE234\", \"0--0.5\")\n        if load < 100:\n            (\"#FCE94F\", \"0.5--1\")\n        if load >= 100:\n            (\"#CC0000\", \"> 1\")\n\n    def indicator(node, size, \"# netboxes\"):\n        if num_netboxes == 1:\n            (4, \"1\")\n        if num_netboxes <= 10:\n            (6, \"2--10\")\n        if num_netboxes <= 20:\n            (8, \"11--20\")\n        if True:\n            (10, \"> 20\")\n"
  },
  {
    "path": "python/nav/etc/geomap/popup_network.html",
    "content": "{% load geomap %}\n<div class=\"network-popup\">\n  {% if network.subedges|length_is:\"1\" %}\n  {% else %}\n  <table class=\"vertitable\">\n    <caption>\n      Combined details of {{ network.subedges|length }} link{{ network.subedges|length|pluralize }}\n    </caption>\n    <tr><th>Capacity</th> <td>{{ network.capacity|floatformat:0 }} Mbps<td></tr>\n    <tr><th>Load in</th> <td>{{ network.load_in|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n    <tr><th>Load out</th> <td>{{ network.load_out|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n  </table>\n\n  <h5>Individual links:</h5>\n  {% endif %}\n\n  {% for sub in network.subedges %}\n\n  <table class=\"vertitable\">\n    <caption>{{ sub.netident }}</caption>\n    <tr>\n        <th>From</th>\n        <td>\n            <a href=\"{% url 'ipdevinfo-details-by-name' sub.local_sysname %}\"\n               target=\"_blank\"\n               title=\"View device details\">{{ sub.local_sysname }}</a>\n            {% if sub.local_interface %}\n            <a href=\"{% url 'ipdevinfo-interface-details-by-name' sub.local_sysname sub.local_interface %}\"\n               target=\"_blank\"\n               title=\"View interface details\">{{ sub.local_interface }}</a>\n            {% else %}\n              N/A\n            {% endif %}\n        </td>\n    </tr>\n    <tr>\n        <th>To</th>\n        <td>\n            <a href=\"{% url 'ipdevinfo-details-by-name' sub.remote_sysname %}\"\n               target=\"_blank\"\n               title=\"View device details\">{{ sub.remote_sysname }}</a>\n            {% if sub.remote_interface %}\n            <a href=\"{% url 'ipdevinfo-interface-details-by-name' sub.remote_sysname sub.remote_interface %}\"\n               target=\"_blank\"\n               title=\"View interface details\">{{ sub.remote_interface }}</a>\n            {% else %}\n              N/A\n            {% endif %}\n        </td>\n    </tr>\n    <tr><th>Capacity</th>     <td>{{ sub.capacity|floatformat:0 }} Mbps</td></tr>\n    <tr><th>Load in</th>      <td>{{ sub.load_in|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n    <tr><th>Load out</th>     <td>{{ sub.load_out|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n    <tr><th>Network type</th> <td>{{ sub.nettype }}</td></tr>\n    <tr><th>Layer</th>        <td>{{ sub.layer }}</td></tr>\n    <tr><th>Vlan</th>         <td>{{ sub.vlan }}</td></tr>\n    {% if debug %}\n      <tr><th colspan=\"2\">Debug</th></tr>\n      <tr><th>Port from</th>    <td>{{ sub.local_portid }}</td></tr>\n      <tr><th>Port to</th>      <td>{{ sub.remote_portid }}</td></tr>\n      <tr><th>RRD file</th>     <td>{{ sub.local_rrdfile }}</td></tr>\n    {% endif %}\n  </table>\n\n  {% endfor %}\n\n</div>\n"
  },
  {
    "path": "python/nav/etc/geomap/popup_network_open.html",
    "content": "{% load geomap %}\n<div class=\"network-popup\">\n  <table class=\"vertitable\">\n    <caption>\n      {{ network.subedges|length }} link{{ network.subedges|length|pluralize }}<br>\n      - combined data\n    </caption>\n    <tr><th>Capacity</th> <td>{{ network.capacity|floatformat:0 }} Mbps<td></tr>\n    <tr><th>Load in</th> <td>{{ network.load_in|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n    <tr><th>Load out</th> <td>{{ network.load_out|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n  </table>\n\n  {% for sub in network.subedges %}\n\n  <table class=\"vertitable\">\n    <caption>{{ sub.netident }}</caption>\n    <tr><th>Capacity</th>     <td>{{ sub.capacity|floatformat:0 }} Mbps</td></tr>\n    <tr><th>Load in</th>      <td>{{ sub.load_in|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n    <tr><th>Load out</th>     <td>{{ sub.load_out|nan2none|format:\"%.3f Mbps\"|default:\"unknown\" }}</td></tr>\n  </table>\n\n  {% endfor %}\n\n</div>\n"
  },
  {
    "path": "python/nav/etc/geomap/popup_place.html",
    "content": "{% load geomap %}\n<div class=\"place-popup\">\n\n  <table class=\"listtable\">\n    <tr>\n      <th>Rooms</th>\n      <th>IP devices</th>\n      <th>CPU load (max)</th>\n    </tr>\n    <tr>\n      <td>{{ place.num_rooms }}</td>\n      <td>{{ place.num_netboxes }}</td>\n      <td>{{ place.load|nan2none|floatformat:2|default:\"unknown\" }}</td>\n    </tr>\n  </table>\n\n  {% for room in place.rooms %}\n    <table class=\"listtable\">\n      <caption>\n        <a href=\"{% url 'room-info' room.id %}\"\n           target=\"_blank\"\n           title=\"View room information\">\n          {{ room.id }}\n          {% if room.descr %}({{ room.descr }}){% endif %}\n        </a>\n      </caption>\n\n      <tr>\n        <td><b>IP Devices:</b> {{ room.num_netboxes }}</td>\n        <td><b>CPU load (max):</b> {{ room.load|nan2none|floatformat:2|default:\"unknown\" }}</td>\n      </tr>\n\n      <tr>\n        <td colspan=\"2\">\n          <ul class=\"large-block-grid-2\">\n            {% for box in room.netboxes %}\n              <li>\n                <h5>\n                  <a href=\"{% url 'ipdevinfo-details-by-name' box.real_sysname %}\"\n                     target=\"_blank\"\n                     title=\"View in IP Device Info\">{{ box.sysname }}</a>\n                </h5>\n                <ul class=\"no-bullet\">\n                  <li><b>IP:</b> {{ box.ip }}</li>\n                  <li><b>Category:</b> {{ box.catid }}</li>\n                  <li><b>Type:</b> {{ box.type|default:\"N/A\" }}</li>\n                  <li><b>Up:</b> {{ box.up }}</li>\n                  <li><b>Load:</b> {{ box.load|nan2none|floatformat:2|default:\"unknown\" }}</li>\n                </ul>\n              </li>\n            {% endfor %}\n          </ul>\n        </td>\n      </tr>\n\n    </table>\n  {% endfor %}\n\n</div>\n"
  },
  {
    "path": "python/nav/etc/geomap/popup_place_open.html",
    "content": "{% load geomap %}\n<div class=\"place-popup\">\n\n  <table class=\"vertitable\">\n    <caption>{{ place.num_rooms }} room{{ place.num_rooms|pluralize }}</caption>\n    {% for room in place.rooms %}\n    <tr><th>{{ room.id }}</th> <td>{{ room.descr|default:\"\" }}</td></tr>\n    {% endfor %}\n  </table>\n\n</div>\n"
  },
  {
    "path": "python/nav/etc/graphite/README",
    "content": "This directory contains recommended example configuration settings for the\nGraphite system NAV will send metrics to.\n"
  },
  {
    "path": "python/nav/etc/graphite/storage-aggregation.conf",
    "content": "# Recommended Whisper aggregation methods for using Graphite with NAV.\n#\n# If you already have a Graphite installation you wish to use, use these\n# examples to adapt your own config.\n#\n\n# ipdevpoll jobs don't necesarily run very often; an xFilesFactor of 0 ensures\n# we roll up everything into the lower precision archives no matter how often\n# runs are logged.\n[ipdevpoll]\npattern = ^nav\\..*\\.ipdevpoll\\..*runtime$\nxFilesFactor = 0\naggregationMethod = average\n\n# Any kind of event counter NAV uses will log the number of events since the\n# last time the metric was logged, so the approprate aggregation is to sum the\n# counts.\n[event-counts]\npattern = ^nav\\..*-count$\nxFilesFactor = 0\naggregationMethod = sum\n\n# NAV stores the raw octet/packet/error/etc counters of interfaces in Graphite.\n# Since these counter values are absolute, and the rates are calculated using\n# the difference of the port counter and the time difference between two\n# counter numbers, the appropriate aggregation method would be to picke the\n# last counter value when rolling up.\n[port-counters]\npattern = ^nav\\..*ports\\..*\naggregationMethod = last\n"
  },
  {
    "path": "python/nav/etc/graphite/storage-schemas.conf",
    "content": "# Recommended Whisper schema definitions for using Graphite with NAV.\n#\n# If you already have a Graphite installation you wish to use, use these\n# examples to adapt your own config.\n#\n\n# Carbon's internal metrics. This entry should match what is specified in\n# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings\n[carbon]\npattern = ^carbon\\.\nretentions = 60:90d\n\n# Statistics - store data for a long time is more important than short\n# intervals.\n[nav-statistics]\npattern = ^nav\\.stats\\.\nretentions = 300s:10d, 1h:100d, 1d:6y\n\n# NAV device/system metrics\n[nav-system]\npattern = ^nav\\..*(system|cpu|memory|services|ipdevpoll|sensors)\\.\nretentions = 60s:1d, 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n# NAV multicast metrics\n[nav-multicast]\npattern = ^nav\\.multicast\\.groups\\.\nretentions = 60s:1d, 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n# NAV pping metrics. The default pping configuration pings in 20 second\n# intervals; the most detailes retention archive should match up with this.\n[nav-pping]\npattern = ^nav\\..*\\.ping\\.\nretentions = 20s:6h, 60s:1d, 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n# NAV IP prefix utilization metrics. Default ARP/ND collection interval is\n# 30 minutes.\n[nav-prefix]\npattern = ^nav\\.prefixes\\.\nretentions = 30m:30d, 2h:90d, 6h:600d\n\n# NAV dhcp metric retention archive\n[nav-dhcp]\npattern = ^nav\\.dhcp\\.\nretentions = 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n\n# NAV generic metric retention archive\n[nav-generic]\npattern = ^nav\\.\nretentions = 300s:7d, 30m:12d, 2h:50d, 1d:600d\n\n# A not-very-sane default for any metric not caught by the above.\n[default_1min_for_1day]\npattern = .*\nretentions = 60s:1d\n"
  },
  {
    "path": "python/nav/etc/graphite.conf",
    "content": "#\n#\n# Configuration for integrating NAV's statistics collectors with a Graphite\n# installation.\n#\n#\n\n\n[carbon]\n#\n# NAV supports Carbon's UDP line receiver. Host and port information of\n# the backend can be configured in this section.\n#\n#host = 127.0.0.1\n#port = 2003\n\n\n[graphiteweb]\n#\n# Where is the Graphite web interface located. NAV needs this to get graphs\n# and data from Graphite.\n#\n#base=http://localhost:8000/\n\n#\n# Which format to use when producing graphs. The default is png, but svg is\n# also supported.\n#\n#format = png\n"
  },
  {
    "path": "python/nav/etc/ipdevpoll.conf",
    "content": "[ipdevpoll]\n#\n# Where to put log messages.  If this starts with / or . it will be\n# interpreted literally.  Otherwise, the file will be created in the\n# NAV log directory.\n#\nlogfile = ipdevpoll.log\n\n#\n# The maximum number of concurrent jobs within a single ipdevpoll process. It\n# may be necessary to adjust this if you keep running out of available file\n# descriptors.\n#\n#max_concurrent_jobs = 500\n\n[netbox_filters]\n#\n# Specify which groups of devices will be included or excluded from this\n# instance of ipdevpoll. Handles all devices by default.\n#\n#groups_included=\n#groups_excluded=\n\n[snmp]\n#\n# Default SNMP polling parameters\n# If there are slow devices on your network (i.e. ipdevpoll logs show they\n# keep timing out), consider either increasing the timeout value (seconds) or\n# decreasing the max-repetitions value used for GET-BULK operations.\n#\n#timeout = 1.5\n#max-repetitions = 10\n#\n# Setting the throttle delay value will ensure a delay of this many seconds\n# between each an every SNMP request packet in a single SNMP session. This can\n# be good for devices with poor SNMP implementations, but it is generally a bad\n# idea to set this globally.\n#throttle-delay = 0\n\n[plugins]\n#\n# List all the plugins to load into ipdevpoll and assign them short aliases.\n# Plugins are loaded from the built-in nav.ipdevpoll.plugins package unless a\n# fully qualified class name is supplied as a value.  To load your homebrew\n# plugin class Foo from the homebrew.foo module, add::\n#\n#  foo = homebrew.foo.Foo\n#\nsystem=\nuptime=\ninterfaces=\nbridge=\ntypeoid=\ndnsname=\n# juniperdot1q replaces dot1q, but with workarounds for broken juniper switches\ndot1q=nav.ipdevpoll.plugins.juniperdot1q.JuniperDot1q\nciscovlan=\nprefix=\nvirtualrouter=\narp=\ncam=\nlldp=\ncdp=\nmodules=\nextremevlan=\nlinkstate=\nsensors=\npsu=\npsuwatch=\nsnmpcheck=\npropserial=\nstatports=\nstatsystem=\nstatsensors=\nstatmulticast=\nentity=\nstaticroutes=\nlinkaggregate=\nbgp=\npoe=\njuniperalarm=\npaloaltoarp=\n\n[job_inventory]\n#\n# How often to run this job for each device\n#\ninterval: 6h\ndescription:\n The inventory job is set up to run every 6 hours to collect all bits of\n inventory information, from dns names, type, modules, interfaces\n (switch and router ports), vlan and prefix information.\n\n\n#\n# Maximum number of concurrent instances of this job. Default is 0, meaning\n# unlimited concurrency.  Polling thousands of devices concurrently may result\n# in high system load.  Limiting concurrency can help reduce the load.\n#\nintensity: 0\n\n#\n# Which plugins to run for this job. The plugins are run in the order\n# specified here. Any line starting with a space is assumed to be a\n# continuation of the previous line.\n#\nplugins:\n typeoid\n uptime\n entity\n modules\n propserial\n bridge\n interfaces\n linkaggregate\n dot1q\n ciscovlan\n extremevlan\n prefix\n virtualrouter\n sensors\n psu\n system\n\n\n[job_dns]\ninterval: 10m\nplugins: dnsname\ndescription: Checks for changes in the reverse DNS records of devices\n\n\n[job_ip2mac]\ninterval: 30m\nintensity: 0\nplugins:\n  paloaltoarp arp\ndescription:\n The ip2mac job logs IP to MAC address mappings from routers and firewalls\n (i.e. from IPv4 ARP and IPv6 Neighbor caches)\n\n\n[job_topo]\ninterval: 15m\nplugins: cam lldp cdp\ndescription:\n The topo job collects data necessary for detecting the network topology,\n like switch forwarding tables (CAM) and LLDP and CDP neighboring data\n\n\n[job_statuscheck]\ninterval = 5m\nintensity = 0\nplugins = linkstate entity modules bgp poe psuwatch juniperalarm\ndescription:\n This job runs plugins that check on the status of various internal components\n of IP devices. The link state of interfaces, and the status/presence of\n modules and chassis are verified. The [linkstate] section can be used to\n control which interfaces the linkState plugin wil post events for.\n\n[job_snmpcheck]\ninterval = 30m\nintensity = 0\nplugins = snmpcheck\ndescription:\n Post snmpAgentState alerts when SNMP agents stop responding\n\n\n# 5 minute statistics\n[job_5minstats]\ninterval = 5m\nplugins = statports\n\n# 1 minute statistics\n[job_1minstats]\ninterval = 1m\nplugins = statsystem statsensors statmulticast\n\n# This job can be enabled if you wish to collect static routes as prefixes.\n# Be warned that this entails dumping the entire routing table of your routers,\n# which may bring some routers to their knees while trying to sort their SNMP\n# responses. Enable at your own risk.\n#[job_staticroutes]\n#interval = 24h\n#plugins = staticroutes\n#description: Collects and stores static routes as prefixes\n\n#\n# plugin configuration\n#\n[prefix]\n# A comma separated list of IP prefix addresses to ignore during collection.\n# The default value ignores loopback networks, and strange prefixes provided by\n# some virtual chassis configurations of Juniper routers.\n#\n# An address prefixed by the <<= operator will match every subnet that is\n# contained within it, or equal to it. E.g. <<=127.0.0.0/8 will match\n# 127.0.1.0/24. This is the default operator if omitted.\n#\n# An address prefixed by the = operator will only match subnets that equal it.\n#\nignored = <<=127.0.0.0/8, <<=fe80::/16, =128.0.0.0/2\n\n[modules]\n# A space separated list of serial numbers that will be ignored as\n# modules/devices. The default value is used to ignore soldered-on\n# linecards that Juniper erroneously reports as fieldreplaceable\n# units in ENTITY-MIB\n#ignored-serials = BUILTIN\n\n[linkstate]\n# Which ports to generate linkState events/alerts for.  Allowed values are\n# 'topology' for uplink/downlink ports, or 'any' for all ports.\nfilter = topology\n\n[bgp]\n# Whether to generate alerts for internal BGP sessions\n#alert_ibgp = yes\n\n[interfaces]\n# Work around broken SNMP agents that return incorrect IF-MIB::ifSpeed values,\n# but correct IF-MIB::ifHighSpeed values\n#always_use_ifhighspeed = false\n\n[staticroutes]\n# Temporary SNMP throttle-delay to use during collection of routing tables\n# using the staticroutes plugins. Value is a number of seconds between requests.\n#throttle-delay=0.0\n\n[paloaltoarp]\n# Until a management profile type for (Palo Alto) REST API credentials\n# exist in NAV, this section is used to configure API tokens/keys per\n# Palo Alto firewall.  Identify each Palo Alto firewall with either its\n# NAV sysname or management IP address:\n\n#hostname = secret-API-key\n#ip = another-secret-API-key\n\n[sensors]\n# A space-separated list of Python modules to load into ipdevpoll as the\n# sensors plugin is loaded. An asterisk suffix will cause all modules in that\n# package to be loaded.\n# Any subclass of MibRetriever with a get_all_sensors() method will be\n# considered an implementation usable by the sensors plugin; this option just\n# ensure all wanted implementations are loaded into ipdevpoll.\n\n#loadmodules = nav.mibs.*\n\n[sensors:vendormibs]\n# Maps vendor/enterprise IDs to ordered list of MIBs to attempt discovering\n# sensors from. The enterprise ID can either be numerical (as published at\n# http://www.iana.org/assignments/enterprise-numbers), or a name from the\n# constants listed in the nav.enterprise.ids module. The asterisk option is\n# the list of fallback MIBs to try if no enterprise IDs matched. MIB names can\n# be either official module names or the name of a corresponding Python class\n# that implements a MibRetriever for it.\n\n#* = ENTITY-SENSOR-MIB UPS-MIB\n#CISCOSYSTEMS = ENTITY-SENSOR-MIB CISCO-ENTITY-SENSOR-MIB CISCO-ENVMON-MIB\n#HEWLETT_PACKARD = ENTITY-SENSOR-MIB\n#AMERICAN_POWER_CONVERSION_CORP = PowerNet-MIB\n#EMERSON_COMPUTER_POWER = UPS-MIB\n#EATON_CORPORATION = XUPS-MIB\n#MERLIN_GERIN = MG-SNMP-UPS-MIB\n#IT_WATCHDOGS_INC = IT-WATCHDOGS-MIB-V3 IT-WATCHDOGS-MIB ItWatchDogsMibV4\n#GEIST_MANUFACTURING_INC = GEIST-MIB-V3 GeistMibV4\n#COMET_SYSTEM_SRO = P8652-MIB COMETMS-MIB T3611-MIB\n#KCP_INC = SPAGENT-MIB\n#ELTEK_ENERGY_AS = ELTEK-DISTRIBUTED-MIB\n#EATON_WILLIAMS = CD6C\n#RARITAN_COMPUTER_INC = PDU2-MIB\n#IBM = IBM-PDU-MIB\n#RITTAL_WERK_RUDOLF_LOH_GMBH_COKG = RITTAL-CMC-III-MIB\n#JUNIPER_NETWORKS_INC = ENTITY-SENSOR-MIB JUNIPER-DOM-MIB\n#SUPERIOR_POWER_SOLUTIONS_HK_COLTD = Pwt3PhaseV1Mib\n#ALCATEL_LUCENT_ENTERPRISE_FORMERLY_ALCATEL = ALCATEL-IND1-PORT-MIB\n#COMPAQ = CPQPOWER-MIB\n#CORIANT_RD_GMBH = CORIANT-GROOVE-MIB\n"
  },
  {
    "path": "python/nav/etc/l2trace.conf",
    "content": "# This configuration file is Python code to be included in the l2trace\n# web interface.  It lacks documentation.\n\ndef link(self,table = \"\",record = ()):\n  pass\n    \n"
  },
  {
    "path": "python/nav/etc/logger.conf",
    "content": "[start]\n# enable syslog parsing\nenable: 1\n\n[paths]\n# Path to the log file to watch for syslog messages.  The file needs to exist\n# and be readable and writable by the user running the logengine process.\nsyslog: /var/log/cisco.log\n\n# Logengine needs to know charset the above file is encoded with, so that it\n# may properly encode it for storage in the database.\ncharset: iso-8859-1\n\n[deletepriority]\n# deletes messages of the given priority older than a limited number of days\n0:730\n1:730\n2:90\n3:90\n4:90\n5:30\n6:30\n7:1\n\n[priorityexceptions]\n# defines new priorities for messages\n#\n# syntax:\n# FAC-0-MNEM@x-gsw.university.net:7\n# gives the FAC-0-MNEM type new priority 7 (low) for x-gsw\n#\n# FAC-0-MNEM:7\n# FAC-0-MNEM@ANY:7\n# gives all FAC-0-MNEM messages new priority 7\n#\n# unit-gsw.university.net:5\n# ANY@unit-gsw.university.net:5\n# gives priority 5 to all messages from x-gsw \n# \n# the most specific exceptions are considered most important\n#\n"
  },
  {
    "path": "python/nav/etc/logging.conf",
    "content": "# This is the default global log level configuration file for NAV.\n#\n# All NAV programs, except pping and servicemon, will initialize their log\n# levels from this file, possibly combining them with log settings from command\n# line options and/or their own configuration files. This file can also be used\n# to configure the log levels of third party Python modules used by NAV.\n#\n# If you want to use a separate configuration file for some NAV program, set\n# and export the environment variable NAV_LOGGING_CONF to point to that\n# configuration file before executing the program in question.\n#\n\n[levels]\n\n# NAV logging is organized into a named hierarchy, so that log levels can be\n# set differently for different parts of the code. The root of NAV's logger\n# hierarchy is \"nav\". \n\n# This line initializes all NAV logging to the INFO level.  Available levels\n# are DEBUG, INFO, WARNING, ERROR and CRITICAL.\nnav = INFO\n\n\n# Some other examples:\n#\n#nav.eventengine = INFO\n#nav.ipdevpoll = INFO\n#nav.ipdevpoll.jobs.jobhandler = DEBUG\n#nav.ipdevpoll.plugins = DEBUG\n#nav.smsd = DEBUG\n#nav.web.auth = DEBUG\n\n\n[files]\n\n# If you want specific parts of NAV to log to separate files, you can specify\n# this here. Log output will still be duplicated in the original location.\n\n# The log file names will be relative to NAV's log directory; specifying the\n# name of an existing log file will append to this. If any of the NAV\n# processes that may happen to use this logger does not have permission to\n# create or write to the specified file, the process will likely fail.\n\n# For example, if you want to log portadmin-related information to a separate\n# file, use this configuration:\n#nav.web.portadmin = portadmin.log\n"
  },
  {
    "path": "python/nav/etc/mailin.conf",
    "content": "[main]\n# What plugins to load\nplugins =\n#  nav.mailin.plugins.whatsup\n#  nav.mailin.plugins.kake\n\n# logfile = /some/other/place/mailin.log\n"
  },
  {
    "path": "python/nav/etc/nav.conf",
    "content": "#\n# This file contains general NAV configuration.\n#\n\n# Any NAV daemon started by root will drop privileges by switching to this user\nNAV_USER=navcron\n\n# Where should NAV daemons store their pid files?\nPID_DIR=/tmp\n\n# Where should NAV daemons store their log files?\nLOG_DIR=/tmp\n\n# Where should the NAV web ui store image uploads? Your web server needs to\n# be configure to serve this directory at the /uploads URI, and the directory\n# needs to have write permission for the web server.\n#UPLOAD_DIR=/usr/share/nav/var/uploads\n\n# The e-mail address of the NAV system administrator. All cron error\n# messages will be sent to this address.\nADMIN_MAIL=root@localhost\n\n# The email address used by NAV as the sender address when sending\n# alerts and such.  If you don't change this, your MTA should be\n# configured to rewrite \"localhost\" into the host's fully qualified\n# domain name.\nDEFAULT_FROM_EMAIL=nav@localhost\n\n# This secret key is used for cryptographic signing in Django framework.\n# See https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY\n# Pro tip to generate a secret key:\n#  gpg -a --gen-random 1 51\nSECRET_KEY=YouShouldReallyChangeThis\n\n\n# SMTP server settings to use when sending email alerts from NAV\n#\n#EMAIL_HOST = localhost\n#EMAIL_PORT = 25\n#EMAIL_HOST_USER =\n#EMAIL_HOST_PASSWORD =\n#EMAIL_USE_TLS = False\n\n# The domain suffix of your network.  This is stripped from device DNS names\n# in several places to save display space.\nDOMAIN_SUFFIX = .example.com\n\n# Should the Django-based web applications run in debug-mode?\n#DJANGO_DEBUG=True\n\n# Any timestamp NAV generates (using Django) will be relative to this time\n# zone.\n#TIME_ZONE = Europe/Oslo\n\n# A colon separated list of Python namespaces to search for SNMP MIB modules\n# (as converted to Python modules by the smidump program). You should only\n# need to change this if you are developing or using 3rd party plugins.\n#SMIDUMPS = nav.smidumps\n"
  },
  {
    "path": "python/nav/etc/navstats.conf",
    "content": "# This file contains the configuration for the NAV stats collection.\n#\n# Each collection is defined as a section and must contain _path_ and _query_\n# option. An optional _valueindex_ option defines the index of the value. If not\n# set it defaults to the last value of the result row\n#\n# The path is the metric path that Graphite uses. If your query returns only a\n# single result, then this is the complete path to store that value. If your\n# query returns several rows of data, then you must define how to separate those\n# rows.\n#\n# Example 1 (simple collection):\n# ------------------------------\n# [switchports]\n# path=nav.stats.ports.switchports.all\n# query=select count(*) from swport;\n#\n# Example 2 (multiple rows):\n# --------------------------\n# [netbox_types]\n# path=nav.stats.devices.{}.{}  # vendorid and typename is put in the path\n# query=select vendorid, typename, count(*)\n#    from netbox join type using(typeid)\n#    group by typename, vendorid;\n#\n# Example 3 (multiple rows - define index):\n# --------------------------\n# [netbox_types]\n# path=nav.stats.devices.{1}.{2}  # Does not support negative indexes\n# valueindex=0\n# query=select count(*), vendorid, typename\n#    from netbox join type using(typeid)\n#    group by typename, vendorid;\n#\n\n[DEFAULT]\n\n# The index of the value to be sent to carbon, -1 = the last index\nvalueindex=-1\n\n# Collects all netboxes and groups them by vendor and type. Sum of netboxes is\n# found by sumSeries(nav.stats.devices.*.*)\n[netbox_types]\npath=nav.stats.devices.{}.{}\nquery=select vendorid, typename, count(*)\n    from netbox join type using(typeid)\n    group by typename, vendorid;\n\n\n# Sum of all switchports\n[switchports]\npath=nav.stats.ports.switchports.all\nquery=select count(*) from interface\n    join netbox using (netboxid)\n    where baseport is not null;\n\n\n# Sum of all switchports that has link\n[switchports_has_link]\npath=nav.stats.ports.switchports.has_link\nquery=select count(*) from interface\n    join netbox using (netboxid)\n    where baseport is not null\n    and ifoperstatus=1;\n"
  },
  {
    "path": "python/nav/etc/netbiostracker.conf",
    "content": "[main]\n\n# This is the encoding returned by the query for netbiosname. We need to know\n# this to properly encode it to unicode.\nencoding = cp850\n\n# List of ip-addresses or ranges that will not be scanned.\n# ONE IP-ADDRESS FOR EACH LINE - he yelled mercilessly\n# Example:\n# exceptions =\n#  158.38.62.3\n#  158.38.62.128/25\n# ^ this space is important\n;exceptions =\n"
  },
  {
    "path": "python/nav/etc/portadmin/portadmin.conf",
    "content": "# Config file for PortAdmin\n[general]\n\n# Voice vlans are the vlans you use for ip telephone traffic. If you define\n# several vlans here, make sure only one of them is available on the netbox.\n# Otherwise there is no way of knowing which one you want.\n#\n# Comma separated list of vlans.\n# voice_vlans =\n\n# Cisco has its own terminology and configuration regarding voice vlans. NAV\n# also supports this. To make NAV use Cisco Voice vlans, set this option to\n# true. The default is false.\n# cisco_voice_vlan = false\n\n# Some Cisco VoIP devices require the uplink Cisco switch port to be CDP enabled.\n# Set this option to 'true' if you would like to enable CDP when you set voice\n# ports via PortAdmin and disable CDP when you unset the voice option.\n# The default is false.\n# cisco_voice_cdp = false\n\n# PortAdmin will restart (set ifadmin down and up again) an interface if you\n# change vlan. This is so that any computers behind that interface will\n# notice that the network is down and try to aquire a new IP address. Set this\n# to off if you do not want this. Default is on\n# restart_interface = on\n\n# When PortAdmin has made one or more config changes on a device does not\n# automatically commit those changes to its startup config, PortAdmin will\n# issue a command to commit them (if such a command is available on the\n# actual combination of platform and management protocol used, such as the\n# write mem\" operation on Cisco devices). Default is `on`.\n# commit = on\n\n# Adjust the connection values for the snmp agent.\n# timeout = 3\n# retries = 3\n\n# Allow trunk edit. If this is set to true, PortAdmin will make it possible to\n# create, remove and edit trunks on interfaces.\n# trunk_edit = true\n\n# Allow editing uplinks/downlinks. If this is set to false, PortAdmin will not\n# allow editing any access port that is known to be an uplink or downlink in\n# the topology. This will take precedence over trunk_edit when a trunks is an\n# uplink\n# link_edit = true\n\n[authorization]\n# Authorization options\n\n# vlan_auth enables or disables the authorization based on the relationsship\n# user <-> organization <-> vlan, where a user is only able to edit an\n# interface if the vlan belongs to an organization the user is a member of. If\n# this is disabled all users allowed to use PortAdmin may edit any interface\n# information. If vlan_auth is not set (default), it acts as if vlan_auth is\n# off.\n# Possible values are: 1, yes, on, true, 0, no, off, false\n\n#vlan_auth = off\n\n[defaultvlan]\n#\n# Default vlan is the vlan that is not necessary defined on the switch\n# but is used to stop traffic on the interface. It is available to all users.\n#\n# If defined in the database the netident from the database will be used.\n#\n# vlan = the vlannumber used\n# netident = description of the vlan\n\n#vlan = 666\n#netident = This vlan is not routed.\n\n[ifaliasformat]\n#\n# Here you enter a regexp that enforces a specific input format on the\n# port description. If you do this, we strongly suggest also editing\n# the information given to the user (the portadmin/aliasformat.html template,\n# see\n# /doc/hacking/extending-nav-locally.html#overriding-django-templates )\n#\n# format = regexp\n\n#format = \\d+\n\n[dot1x]\n#\n# If enabled vlan/trunk editing will be disabled for interfaces with\n# dot1x enabled. Optionally port_url_template can be set to create\n# buttons to external systems for configuring dot1x for ports. This is\n# a python format string with 'netbox' and 'interface' available\n#\n# enabled = false\n# port_url_template = https://netadmin.example.org/dot1x?switch={netbox.sysname}&ifindex={interface.ifindex}\n"
  },
  {
    "path": "python/nav/etc/pping.conf",
    "content": "#\n# Configuration file for the NAV parallel pinger.\n#\n\n\n# How often do you want to ping\ncheckinterval = 20\n\n# Size of the ping packets\npacketsize = 64\n\n# Number of seconds to wait for ping replies after\n# the last ping request is sent.\ntimeout = 5\n\n# Number of requests without answer needed before \n# marking netbox as unavailable\nnrping = 4\n\n# Delay in ms between each ping request.\ndelay = 2\n\n# Location of the logfile, defaults to ./pping.log\nlogfile = pping.log\n\n# Space separated group ids containing the netboxes\n# this ppinger will handle. Empty to include all.\n#groups_included =\n\n# Space separated group ids containing the netboxes\n# this ppinger will not handle. Empty to exclude none.\n#groups_excluded =\n"
  },
  {
    "path": "python/nav/etc/report/front.html",
    "content": "<div class=\"row\">\n\n    <div class=\"medium-3 column\">\n        <div class=\"panel\">\n            <!-- Insert new search forms here -->\n            <form action=\"netbox\">\n                <label>Room search</label>\n                <input type=\"hidden\" name=\"op_roomid\" value=\"like\"/>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"text\" name=\"roomid\" placeholder=\"Room (*)\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <form action=\"device\">\n                <label>Device search</label>\n                <input type=\"hidden\" name=\"op_serial\" value=\"like\"/>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"text\" name=\"serial\"\n                               placeholder=\"Serial number (*)\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <form action=\"swporttrunk\">\n                <label>Switchports with VLAN</label>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"number\" name=\"vlan\"\n                               placeholder=\"Vlan number\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <form action=\"netbox\">\n                <label>IP Device report</label>\n                <input type=\"hidden\" name=\"op_sysname\" value=\"like\"/>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"text\" name=\"sysname\" placeholder=\"Sysname (*)\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <form action=\"swport\">\n                <label>Portname search</label>\n                <input type=\"hidden\" name=\"op_alias\" value=\"like\"/>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"text\" name=\"alias\" placeholder=\"Text (*)\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <form action=\"prefix\">\n                <label>Prefix search</label>\n                <input type=\"hidden\" name=\"op_netident\" value=\"like\"/>\n\n                <div class=\"row collapse\">\n                    <div class=\"column large-8\">\n                        <input type=\"text\" name=\"netident\" placeholder=\"Text (*)\"/>\n                    </div>\n                    <div class=\"column large-4\">\n                        <input type=\"submit\" class=\"button prefix\" value=\"Find\"/>\n                    </div>\n                </div>\n            </form>\n\n            <small>\n              (*) asterisk wildcards allowed.\n            </small>\n\n        </div>\n    </div>\n\n    <!--\n         This div contains all report links. To create a new column,\n         create a div with class \"left\".\n      -->\n    <div class=\"column medium-9 reportlist\">\n\n        <div class=\"left\">\n            <h5>Collected information</h5>\n\n            <ul>\n                <li><a href=\"netbox\">All IP Devices</a></li>\n                <li>\n                    <a href=\"matrix\"\n                       title=\"See your subnet allocations and utilization levels in a table matrix\">\n                    <em>Subnet Matrix</em>\n                    </a>\n                </li>\n                <li><a href=\"netbox?catid=GW%2CGSW&amp;op_catid=in\">Routers</a>\n                    <ul>\n                        <li><a href=\"prefix\">Prefixes</a></li>\n                        <li><a href=\"gwport\">Router ports</a></li>\n                    </ul>\n                </li>\n                <li>\n                    <a href=\"netbox?catid=SW%2CGSW&amp;op_catid=in\">Core Switches</a>\n                    <ul>\n                        <li><a href=\"swport?op_catid=in&amp;catid=SW,GSW\">Core switch ports</a></li>\n                        <li><a href=\"swport?catid=SW&amp;trunk=Y\">Trunked core switch ports</a></li>\n                        <li><a href=\"swporttrunk?catid=SW\">Core switch ports (expand trunks to VLAN)</a></li>\n                        <li><a href=\"stpblock\">STP blocked switch ports</a></li>\n                        <li><a href=\"aggregate?op_speed=gt&amp;speed=0\">Ether-/Portchannels</a></li>\n                    </ul>\n                </li>\n                <li><a href=\"netbox?catid=EDGE\">Edge Switches and Hubs</a>\n                    <ul>\n                        <li>\n                            <a href=\"swporttrunk?catid=EDGE\">Edge switch ports</a>\n                        </li>\n                    </ul>\n                </li>\n                <li><a href=\"netbox?catid=WLAN\">Wireless</a></li>\n\n                <li><a href=\"srv\">Servers</a>\n                    <ul>\n                        <li><a href=\"/ipdevinfo/service/\">Service list</a></li>\n                        <li><a href=\"/ipdevinfo/service/matrix/\">Service matrix</a></li>\n                    </ul>\n                </li>\n                <li><a href=\"netbox?catid=OTHER\">Other devices</a>\n                    <ul>\n                        <li><a href=\"entity\">Operational entities within IP devices</a></li>\n                        <li><a href=\"offline_devices\">Offline/shelved devices</a></li>\n                    </ul>\n                </li>\n\n                <li><a href=\"modules\">Modules</a></li>\n                <li><a href=\"mem\">Memory</a></li>\n                <li><a href=\"unrecognized_neighbors\">Unrecognized device neighbors</a></li>\n                <li><a href=\"duplexmismatch\">Duplex mismatches</a></li>\n            </ul>\n\n        </div>\n\n        <div class=\"left\">\n            <h5>Summaries</h5>\n            <ul>\n                <li>\n                    <a href=\"availability_month\">Availability summary for last month</a>\n                </li>\n            </ul>\n        </div>\n\n        <div class=\"left\">\n            <h5>Manually updated information</h5>\n\n            <ul>\n                <li><a href=\"/seeddb/\"><i>[Seed database]</i></a></li>\n                <li><a href=\"type\">Equipment types</a></li>\n                <li><a href=\"room\">Rooms</a></li>\n                <li><a href=\"location\">Locations</a></li>\n                <li><a href=\"org\">Organisations</a></li>\n                <li><a href=\"usage\">User groups</a></li>\n                <li><a href=\"vendor?op_ipcount=gt&amp;ipcount=0\">Vendors</a></li>\n            </ul>\n        </div>\n\n        <div class=\"left\">\n            <h5>Automatically generated information</h5>\n\n            <ul>\n                <li><a href=\"reportlist\">Report List</a></li>\n            </ul>\n        </div>\n\n    </div>\n\n</div>\n"
  },
  {
    "path": "python/nav/etc/report/report.conf.d/report.conf",
    "content": "##\n#### Configuration file for the report generator\n##\n## - Variables starts with '$', and comments with '#'.\n## - Values must be within double quates (\") and lines must end with a semicolon (;).\n## - $sql is the sql-query. Line break and white space is allowed.\n## - $order_by defines the default ordering of the sql query. By clicking on the\n##   column headers\n##   in the report, you can sort/reverse sort on other criteria.\n## - $title ($overskrift) is the report title as shown on web.\n## - $extra ($ekstra) are extra columns that can be used for hyperlinks (see $url).\n## - $hide ($skjul) are columns that must be included in the $sql because they\n##   are used in a $url, see below. $hide will not show the column in the report.\n## - $sum shows the total of a given column (may not work...).\n## - $count angir kolonner som skal telles.\n## - $name_MYCOL ($navn_MYCOL) changes the column header.\n## - $url_MYCOL makes a hyperlink\n## - $explain_MYCOL ($forklar_MYCOL) shows an explaination as popup in the\n##   browser when you hold the curser over the column header.\n## - $description is the descriptive summary of what the report shows.\n##\n##\n\n# ---------------------------------------------------------------------\n# netbox related reports\n#\n\nnetbox {\n$description = \"An overview of all IP devices.\";\n$sql=\"\nWITH chassis AS (\n       SELECT\n         netboxid,\n \t string_agg(DISTINCT serial, ', ') AS serials,\n \t string_agg(DISTINCT sw_ver, ', ') AS sw_vers\n       FROM netboxentity ne\n       JOIN device d USING (deviceid)\n       WHERE physical_class=3 GROUP BY netboxid\n),\nsoftwares AS (\n       SELECT\n         netboxid,\n \t string_agg(DISTINCT software_revision, ', ') AS software\n       FROM netboxentity\n       WHERE COALESCE(software_revision, '') <> ''\n       GROUP BY netboxid\n)\nSELECT roomid,sysname,ip,catid,sub,typeid,typename,vendorid,\n       orgid,netbox.up,modules,swport,gwport, prefixcount,\n       CASE WHEN COALESCE(sw_vers, '') <> '' THEN sw_vers ELSE software END AS Software,\n       serials,val AS function,netbox.netboxid,\n       netboxprefix.prefixid\n       FROM type\n       RIGHT OUTER JOIN netbox USING (typeid)\n       LEFT JOIN netboxprefix USING (netboxid)\n       LEFT JOIN (SELECT netboxid,count(distinct interfaceid) AS gwport, count(prefixid) AS prefixcount\n                       FROM interface JOIN gwportprefix USING (interfaceid)\n                       GROUP BY netboxid) tempaggr1 USING (netboxid)\n       LEFT JOIN (SELECT netboxid,count(interfaceid) AS swport\n                       FROM interface_swport\n                       GROUP BY netboxid) tempaggr2 USING (netboxid)\n       LEFT JOIN (SELECT netboxid,count(netboxid) AS modules\n                       FROM module\n                       GROUP BY netboxid) tempaggr3 USING (netboxid)\n       LEFT JOIN (SELECT netboxid,count(netboxid) AS sub\n                       FROM netboxcategory\n                       GROUP BY netboxid) tempaggr4 USING (netboxid)\n       LEFT JOIN chassis USING (netboxid)\n       LEFT JOIN softwares USING (netboxid)\n       LEFT JOIN netboxinfo ON (netbox.netboxid=netboxinfo.netboxid\n                                AND var='function')\n\";\n\n$hide = \"netboxid,prefixid,typeid,vendorid\";\n$order_by=\"roomid\";\n$title = \"Devices in Operation\";\n$name_sysname=\"Name\";\n$name_catid=\"Cat\";\n$name_ip=\"IP address\";\n$name_typename=\"Type\";\n$name_roomid=\"Room\";\n$name_orgid=\"Org\";\n$name_up=\"Up\";\n$name_modules=\"#mod\";\n$name_swport=\"#swp\";\n$name_gwport=\"#gwp\";\n$name_prefixcount=\"#prefixes\";\n$name_sub=\"Groups\";\n$name_serials=\"Chassis serials\";\n$url_roomid=\"/report/room?roomid=$roomid\";\n$url_sysname=\"/ipdevinfo/$sysname\";\n$url_typename=\"/report/type?typeid=$typeid\";\n$url_orgid=\"/report/org?orgid=$orgid\";\n$url_catid=\"/report/netbox?catid=$catid\";\n$url_sub=\"/report/netboxinfo?netboxid=$netboxid\";\n$url_modules=\"/report/modules?sysname=$sysname\";\n$url_swport=\"/report/swport?netboxid=$netboxid\";\n$url_gwport=\"/report/gwport?netboxid=$netboxid\";\n$url_up=\"/devicehistory/history/?netbox=$netboxid\";\n$url_function=\"/report/netbox?function=$function\";\n$url_prefixcount=\"/report/gwip?sysname=$sysname\";\n$explain_swp=\"Switch Ports\";\n$explain_gwp=\"Router Ports\";\n$explain_up=\"Status\";\n$explain_sub=\"Device Groups\";\n$sum=\"swport\";\n}\n\n\nnetboxinfo {\n$description = \"Simple info about a netbox.\";\n$sql=\"SELECT roomid,sysname,catid,category,netboxid\n      FROM netbox\n      LEFT JOIN netboxcategory USING (netboxid)\":\n$title=\"Device Groups\";\n$name_category=\"device group\";\n$hide=\"netboxid\";\n$url_category=\"/search/devicegroup/$category\";\n}\n\n\nuptime {\n$description = \"Netboxes uptime listed descending.\";\n$sql=\"\nSELECT roomid,sysname,host(ip),catid,typeid,typename,prefixid,upsince,now()-upsince as uptime\nFROM netbox\nJOIN type USING (typeid)\nLEFT JOIN netboxprefix USING (netboxid)\n\";\n$title=\"Uptime\";\n$hide=\"typeid,prefixid\";\n$name_catid=\"Category\";\n$name_typename=\"Type\";\n$name_roomid=\"Room\";\n$name_sysname=\"Name\";\n$order_by=\"upsince desc\";\n$url_roomid=\"/report/room?roomid=$roomid\";\n$url_sysname=\"/ipdevinfo/$sysname\";\n$url_typename=\"/report/type?typeid=$typeid\";\n$url_orgid=\"/report/org?orgid=$orgid\";\n$url_ip=\"/report/prefix?prefixid=$prefixid\";\n$url_catid=\"/report/netbox?catid=$catid\";\n}\n\n\nsrv {\n$description = \"Shows monitored servers and related information.\";\n$sql = \"\n SELECT roomid,sysname,host(ip),catid,orgid, count(distinct category) as netboxgroups,\n        count(serviceid) as services, val as function, netbox.netboxid, netboxprefix.prefixid\n FROM netbox\n LEFT JOIN netboxprefix USING (netboxid)\n LEFT JOIN service USING (netboxid)\n LEFT JOIN netboxcategory USING (netboxid)\n LEFT JOIN netboxinfo ON (netboxinfo.netboxid=netbox.netboxid AND netboxinfo.var='function')\n WHERE catid='SRV'\n GROUP BY roomid,sysname,host(ip),catid,orgid,val,netbox.netboxid,netbox.ip,prefixid\";\n$title = \"Servers being monitored\";\n$name_sysname=\"Name\";\n$url_sysname=\"/ipdevinfo/$sysname\";\n$name_ip=\"IP\";\n$name_orgid=\"Org\";\n$name_roomid=\"Room\";\n$name_netboxgroups=\"Groups\";\n$order_by=\"roomid\";\n$hide = \"netboxid,prefixid\";\n$url_netboxgroups=\"/report/netboxinfo?netboxid=$netboxid\";\n$url_ip=\"/report/prefix?prefixid=$prefixid\";\n$url_roomid=\"/report/room?roomid=$roomid\";\n$url_typeid=\"/report/type?typeid=$typeid\";\n$url_orgid=\"/report/org?orgid=$orgid\";\n$url_services=\"/report/servicemon?netboxid=$netboxid\";\n$url_function=\"/report/netbox?function=$function\";\n$url_catid=\"/report/netbox?catid=$catid\";\n}\n\n\nservicemon {\n$description = \"Shows monitored services and related information.\";\n$sql=\"\n  SELECT sysname,handler,version,netboxid\n  FROM service\n  LEFT JOIN netbox USING (netboxid)\";\n$title=\"Services being monitored\";\n$name_orgid=\"Owner\";\n$hide=\"netboxid\";\n$url_sysname=\"/report/srv?sysname=$sysname\";\n}\n\n\ndevice {\n$description = \"Shows information about devices.\";\n$sql = \"\n (SELECT\n    serial, roomid, sysname,\n    CASE module.name\n      WHEN NULL THEN 'N/A'\n      WHEN '' THEN 'N/A'\n      ELSE module.name\n    END AS module,\n    module.moduleid\n  FROM device\n  JOIN module USING (deviceid)\n  JOIN netbox USING (netboxid)\n ) UNION\n (SELECT\n    serial, roomid, sysname, NULL as module, NULL as moduleid\n  FROM netboxentity ne\n  JOIN netbox USING (netboxid)\n  JOIN device USING (deviceid)\n  WHERE physical_class=3 AND serial IS NOT NULL\n )\n\";\n$title = \"Devices\";\n$hide = \"moduleid\";\n$name_roomid=\"Room\";\n$name_serial=\"Serial Number\";\n$name_sysname=\"Netbox\";\n$name_module=\"Module\";\n$order_by=\"roomid,sysname,module,serial\";\n$url_roomid=\"/report/room?roomid=$roomid\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_module=\"/report/modules?moduleid=$moduleid\";\n}\n\n\nmodules {\n$description = \"A overview of modules on netboxes.\";\n$sql=\"\n SELECT\n   netboxid,\n   typeid,\n   roomid,\n   sysname,\n   moduleid,\n   module.name AS mn,\n   swport,\n   gwport,\n   model,\n   descr,\n   serial,\n   sw_ver AS Software,\n   hw_ver AS Hardware,\n   fw_ver AS Firmware\n FROM netbox\n JOIN module USING (netboxid)\n JOIN device ON module.deviceid=device.deviceid\n LEFT JOIN (SELECT moduleid,count(interfaceid) AS gwport\n                 FROM interface_gwport\n                 GROUP BY moduleid) tempaggr1 USING (moduleid)\n LEFT JOIN (SELECT moduleid,count(interfaceid) AS swport\n                 FROM interface_swport\n                 GROUP BY moduleid) tempaggr2 USING (moduleid)\n\";\n$title = \"Modules\";\n$order_by=\"roomid,sysname,mn\";\n$hide = \"netboxid,typeid,moduleid\";\n$name_swport=\"#swp\";\n$name_gwport=\"#gwp\";\n$url_roomid=\"/report/room?roomid=$roomid\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_swport=\"/report/swport?sysname=$sysname&module=$mn\";\n$url_gwport=\"/report/gwport?sysname=$sysname&module=$mn\";\n$url_model=\"/report/modules?model=$model\";\n$explain_mn=\"Module number\";\n}\n\n\nmem {\n$description = \"Memory status on netboxes. This report is outdated.\";\n$sql=\"\n SELECT sysname,catid,typename,memtype,device,to_char(size,'999G999G999G999') AS size,\n  to_char(used,'999G999G999G999') AS used,\n  to_char(size-used,'999G999G999G999') AS free,\n  TO_CHAR((used/(size+0.0001))*100, '999')::int AS used_pst\n FROM netbox JOIN mem USING (netboxid)\n LEFT JOIN type USING (typeid)\";\n$order_by=\"sysname,catid,memtype,device\";\n$title = \"Memory\";\n$name_used_pst = \"used %\"\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_memtype=\"/report/mem?memtype=$memtype\";\n$url_device=\"/report/mem?device=$device\";\n$url_typename=\"/report/type?typename=$typename\";\n}\n\n\n# ---------------------------------------------------------------------\n# router port / prefix - related reports\n#\n\ngwport {\n$description = \"Extended information about router ports.\";\n$sql= \"\n SELECT\n   netbox.sysname,\n   interface.ifindex,\n   interface.ifname as interface,\n   module.module as moduleno,\n   module.name as module,\n   interface.link,\n   interface.speed,\n   prefixcount,\n   netbox.netboxid,\n   interface.interfaceid,\n   interface.ifalias AS alias,\n   n2.sysname AS otherbox,\n   i2.ifname AS remoteif\n FROM\n   interface_gwport AS interface\n JOIN\n   netbox USING (netboxid)\n JOIN\n   (SELECT interfaceid, COUNT(prefixid) AS prefixcount\n    FROM gwportprefix\n    GROUP BY interfaceid) tempaggr1 USING (interfaceid)\n LEFT JOIN\n   module USING (moduleid)\n LEFT JOIN\n   netbox AS n2 ON (interface.to_netboxid=n2.netboxid)\n LEFT JOIN\n   interface AS i2 ON (interface.to_interfaceid=i2.interfaceid)\n\";\n$title = \"Router ports\";\n$hide = \"netboxid,ifindex,interfaceid,moduleno\";\n$name_sysname=\"Router\";\n$name_interface=\"Interface\";\n$name_gwip=\"IP address\";\n$name_speed=\"Mbps\";\n$name_portname=\"Description\";\n$name_prefixcount=\"#prefix\";\n$name_otherbox=\"Connected to\";\n$name_remoteif=\"Remote if\";\n$order_by=\"sysname,ifindex\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_module=\"/report/modules?sysname=$sysname&module=$module\";\n$url_prefixcount=\"/report/gwip?sysname=$sysname&ifindex=$ifindex\";\n$url_otherbox=\"/report/netbox?sysname=$otherbox\";\n$url_remoteif=\"/report/swport?sysname=$otherbox&interface=$remoteif\";\n}\n\n\ngwip {\n$description = \"Router port prefixes and related information.\";\n$sql= \"\n SELECT\n   sysname,\n   ifindex,\n   ifname AS interface,\n   module.name AS module,\n   speed,\n   CASE\n     WHEN virtual THEN 'Y'\n     ELSE NULL\n   END AS virtual,\n   gwip,\n   netaddr AS prefix,\n   vlan.vlanid,\n   vlan.vlan,\n   nettype,\n   netident,\n   ifalias AS Description,\n   interface.netboxid,\n   prefix.prefixid\n FROM\n   interface\n JOIN\n   gwportprefix USING (interfaceid)\n JOIN\n   prefix ON (gwportprefix.prefixid=prefix.prefixid)\n JOIN\n   netbox USING (netboxid)\n LEFT JOIN\n   module USING (moduleid)\n LEFT JOIN\n   vlan USING (vlanid)\n WHERE netbox.catid IN ('GW', 'GSW')\n\";\n$title = \"Router port prefixes\";\n$hide = \"netboxid,prefixid,vlanid\";\n$name_sysname=\"Router\";\n$name_interface=\"Router port\";\n$name_gwip=\"IP address\";\n$name_speed=\"Mbps\";\n$order_by=\"sysname,ifindex,gwip\";\n$url_prefix=\"/report/prefix?prefixid=$prefixid\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_vlan=\"/report/swporttrunk?vlan=$vlan\";\n$url_module=\"/report/modules?sysname=$sysname&module=$module\";\n$url_interface=\"/report/gwip?sysname=$sysname&ifindex=$ifindex\";\n}\n\n\nprefix {\n$description = \"Detailed information about IP ranges/prefixes.\";\n$sql=\"\nSELECT host(netaddr) AS netaddr,\n       host(netaddr)::inet AS Network,\n       masklen(netaddr::inet) AS m,\n       CASE family(netaddr::inet)\n         WHEN 6 THEN 'IPv6'\n         WHEN 4 THEN 'IPv4'\n       END AS family,\n       vlan,\n       gwcount,\n       nettype,\n       netident,\n       orgid,\n       usageid AS usage,\n       description,\n       active_ip_cnt as act,\n       prefix.prefixid,\n       vlan.vlanid\nFROM prefix\nLEFT JOIN vlan USING (vlanid)\nLEFT JOIN (SELECT gwportprefix.prefixid, COUNT(DISTINCT netboxid) AS gwcount\n           FROM gwportprefix\n           JOIN interface USING (interfaceid)\n           JOIN netbox USING (netboxid)\n           WHERE catid IN ('GSW', 'GW')\n           GROUP BY gwportprefix.prefixid) tempaggr1 USING (prefixid)\nLEFT JOIN prefix_active_ip_cnt USING (prefixid)\n\";\n$title = \"Prefixes\";\n$order_by=\"network\";\n$name_m=\"Mask\";\n$name_act=\"Active IPs\";\n$hide = \"netaddr,prefixid,vlanid\";\n$url_gwcount=\"/report/gwip?vlanid=$vlanid\";\n$url_vlan=\"/report/swporttrunk?vlan=$vlan\";\n$name_orgid=\"org\";\n$url_orgid=\"/report/org?orgid=$orgid\";\n$url_usage=\"/report/usage?usageid=$usage\";\n$url_act=\"/machinetracker/ip?ip_range=$network/$m&days=-1\";\n$url_nettype=\"/report/prefix?nettype=$nettype\";\n$explain_m=\"Mask of subnet\";\n$explain_act=\"No of currently active IP addresses\";\n$explain_gwcount=\"No of gateways connected\";\n$explain_family=\"IP address family\";\n$sum=\"act\";\n}\n\n\n# ---------------------------------------------------------------------\n# switch port related reports\n#\n\nswport {\n$description = \"List of switch ports and related information about them.\";\n$sql=\"\n SELECT\n   local_box.sysname,\n   local_interface.ifindex,\n   local_interface.ifname AS interface,\n   local_module.moduleid,\n   local_module.module AS moduleno,\n   local_module.name as module,\n   local_interface.baseport AS port,\n   local_interface.link,\n   local_interface.speed,\n   local_interface.duplex,\n   local_interface.media,\n   CASE WHEN local_interface.trunk THEN 'Y' ELSE '' END as trunk,\n   CASE WHEN local_interface.trunk THEN 'see list' ELSE '' END AS allowvlan,\n   CASE WHEN vlan.vlan IS NOT NULL THEN vlan.vlan ELSE local_interface.vlan END AS vlan,\n   CASE WHEN vlan.vlan IS NOT NULL THEN 'Y' ELSE '' END AS derived,\n   local_interface.ifalias AS alias,\n   remote_box.sysname AS to_netboxid,\n   remote_interface.ifname AS remote_interface,\n   local_interface.interfaceid,\n   local_box.netboxid AS netboxid,\n   local_box.catid\n FROM\n   interface_swport AS local_interface\n JOIN\n   netbox AS local_box ON (local_interface.netboxid=local_box.netboxid)\n LEFT JOIN\n   module AS local_module USING (moduleid)\n LEFT JOIN\n   netbox AS remote_box ON (to_netboxid=remote_box.netboxid)\n LEFT JOIN\n   swportvlan ON (local_interface.interfaceid=swportvlan.interfaceid AND (trunk=false OR trunk IS NULL))\n LEFT JOIN\n   vlan using(vlanid)\n LEFT JOIN\n   interface AS remote_interface ON (local_interface.to_interfaceid=remote_interface.interfaceid)\n\";\n$title=\"Switch ports\";\n$hide = \"ifindex,moduleno,port,interfaceid,netboxid,moduleid,catid\";\n$name_sysname = \"Switch\";\n$name_to_netboxid = \"Connected to\";\n$name_remote_interface=\"Remote if\";\n$name_speed = \"Mbps\";\n$name_portname = \"Description\";\n$order_by=\"sysname,moduleno,module,port,ifindex\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_module=\"/report/modules?sysname=$sysname&mn=$module\";\n$url_interface=\"/machinetracker/swp?switch=$sysname&port=$interface\";\n$url_netboxid=\"/report/netbox?netboxid=$netboxid\";\n$url_trunk=\"/report/swporttrunk?interfaceid=$interfaceid\";\n$url_allowvlan=\"/report/allowedvlan?interfaceid=$interfaceid\";\n$url_vlan=\"/report/prefix?vlan=$vlan\";\n$url_to_netboxid=\"/report/netbox?sysname=$to_netboxid\";\n$url_remote_interface=\"/report/swport?sysname=$to_netboxid&interface=$remote_interface\";\n$explain_to_netboxid=\"Netbox connected\";\n$explain_remote_interface=\"Interface on connected netbox\";\n$explain_derived=\"VLAN derived by topology\";\n$explain_Description=\"ifAlias or similar description\";\n}\n\n\nallowedvlan {\n$description = \"Allowed VLANs on a switch port.\";\n$sql=\"\n  SELECT\n    allowedvlan_both.interfaceid,\n    sysname,\n    module.name AS module,\n    ifname AS interface,\n    allowedvlan\n  FROM allowedvlan_both\n  JOIN interface ON (interface.interfaceid=allowedvlan_both.interfaceid2)\n  JOIN netbox USING (netboxid)\n  LEFT JOIN module USING (moduleid)\n\";\n$hide = \"interfaceid\";\n$title=\"Allowed VLANs on switch port\";\n$order_by=\"allowedvlan\";\n$url_sysname=\"/report/swport?sysname=$sysname\";\n$url_interface=\"/report/swport?sysname=$sysname&interfaceid=$interfaceid\";\n}\n\n\nswporttrunk {\n$description = \"Switch ports with trunk ports expanded.\";\n$sql=\"\n SELECT\n   local_box.sysname,\n   local_interface.ifindex,\n   local_interface.ifname AS interface,\n   local_module.moduleid,\n   local_module.module AS moduleno,\n   local_module.name as module,\n   local_interface.baseport AS port,\n   local_interface.link,\n   local_interface.speed,\n   local_interface.duplex,\n   local_interface.media,\n   CASE\n     WHEN local_interface.trunk THEN 'Y'\n     ELSE ''\n   END as trunk,\n   vlan.vlanid,\n   COALESCE(vlan.vlan, local_interface.vlan) AS vlan,\n   CASE direction\n     WHEN 'o' THEN 'Up'\n     WHEN 'n' THEN 'Down'\n     ELSE 'N/A'\n   END AS direction,\n   local_interface.ifalias AS alias,\n   remote_box.sysname AS to_netboxid,\n   remote_interface.ifname AS remote_interface,\n   local_interface.interfaceid,\n   local_box.netboxid AS netboxid,\n   local_box.catid\n FROM\n   interface_swport AS local_interface\n JOIN\n   netbox AS local_box ON (local_interface.netboxid=local_box.netboxid)\n LEFT JOIN\n   module AS local_module USING (moduleid)\n LEFT JOIN\n   netbox AS remote_box ON (to_netboxid=remote_box.netboxid)\n LEFT JOIN\n   swportvlan ON (local_interface.interfaceid=swportvlan.interfaceid)\n LEFT JOIN\n   vlan USING (vlanid)\n LEFT JOIN\n   interface AS remote_interface ON (local_interface.to_interfaceid=remote_interface.interfaceid)\n\";\n$title=\"Switch ports with trunk ports expanded\";\n$hide = \"moduleno,moduleid,ifindex,interfaceid,netboxid,catid,vlanid\";\n$name_sysname = \"Switch\";\n$name_to_netboxid = \"Connected to\";\n$name_remote_interface=\"Remote if\";\n$name_speed = \"Mbps\";\n$name_alias = \"Description\";\n$order_by=\"sysname,ifindex\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_module=\"/report/modules?sysname=$sysname&module=$module\";\n$url_interface=\"/machinetracker/swp?switch=$sysname&module=$module&port=$interface\";\n$url_netboxid=\"/report/netbox?netboxid=$netboxid\";\n$url_trunk=\"/report/swporttrunk?interfaceid=$interfaceid\";\n$url_vlan=\"/report/prefix?vlan=$vlan\";\n$url_to_netboxid=\"/report/netbox?sysname=$to_netboxid\";\n$url_remote_interface=\"/report/swport?sysname=$to_netboxid&interface=$remote_interface\";\n$explain_to_netboxid=\"Netbox connected\";\n$explain_remote_interface=\"Interface on connected netbox\";\n$explain_Description=\"ifAlias or similar description\";\n}\n\n\n\n# ---------------------------------------------------------------------\n# The room table uses a data dictionary (hstore). If you want to output a\n# foobar column containing the values of the foobar data key, use this syntax:\n# data->'foobar' AS foobar\n#\n\nroom {\n$description = \"Information about rooms.\";\n$sql=\"\n  SELECT\n    roomid,\n    count AS nb,\n    locationid,\n    descr,\n    position,\n    position[0] as lat,\n    position[1] as lon,\n    data\n  FROM room\n  LEFT JOIN (SELECT roomid, COUNT(netboxid) FROM netbox GROUP BY roomid) AS foo USING (roomid)\"\n$title = \"Room\";\n$hide=\"lat,lon\";\n$name_roomid=\"Room\";\n$name_nb=\"IP Devices\";\n$name_locationid=\"Location\";\n$name_descr=\"Description\";\n$name_data=\"Attributes\";\n$explain_devices=\"Number of registered IP devices in this room\";\n$order_by=\"roomid\";\n$url_roomid=\"/search/room/$roomid/\";\n$url_nb=\"/report/netbox?roomid=$roomid\";\n$url_position=\"http://www.openstreetmap.org/index.html?mlat=$lat&mlon=$lon\"\n$url_locationid=\"/report/location?locationid=$locationid\";\n}\n\n\nlocation {\n$description = \"Short info about a location; name, number of rooms and a description.\";\n$sql=\"\n  SELECT\n    location.locationid,\n    location.parent,\n    CASE count(distinct sublocs.locationid)\n      WHEN 0 THEN NULL\n      ELSE count(distinct sublocs.locationid)\n    END AS sublocations,\n    count(distinct roomid) AS rooms,\n    location.descr\n  FROM location\n  LEFT JOIN location AS sublocs ON (sublocs.parent=location.locationid)\n  LEFT JOIN room ON (location.locationid=room.locationid)\n  GROUP BY location.locationid,location.descr\";\n$title = \"Locations\";\n$order_by=\"locationid\";\n$name_locationid=\"Location\";\n$name_parent=\"Parent\";\n$name_descr=\"Description\";\n$url_locationid =\"/search/location/$locationid\";\n$url_rooms=\"/report/room?locationid=$locationid\";\n$url_parent=\"location?locationid=$parent\";\n$url_sublocations=\"location?parent=$locationid\";\n}\n\n\ntype {\n$description = \"List of product models and the numer of IP addresses and modules related to them.\";\n$sql=\"\n  SELECT vendorid,typename,count(distinct netboxid) AS ipcount,\n    count(moduleid) AS modcount,typeid,type.descr,sysobjectid\n  FROM type\n  LEFT JOIN netbox USING (typeid)\n  LEFT JOIN module USING (netboxid)\n  GROUP by type.typename,vendorid,typeid,type.descr,sysobjectid HAVING count(netbox)>0\";\n$title = \"Types of equipment\";\n$name_typename=\"Type\";\n$name_vendorid=\"Vendor\";\n$name_descr=\"Description\";\n$order_by=\"vendorid,typename\";\n$hide = \"typeid\";\n$url_vendorid=\"/report/vendor?vendorid=$vendorid\";\n$url_ipcount=\"/report/netbox?typeid=$typeid\";\n$url_modcount=\"/report/modules?typeid=$typeid\";\n$explain_ipcount=\"Number of IP addresses related to this type\";\n$explain_modcount=\"Number of modules related to this type\";\n}\n\n\nvendor {\n$description = \"List of vendors and the number of IP addresses and modules related to them.\";\n$sql = \"\n  SELECT vendorid,count(distinct netboxid) AS ipcount,count(moduleid) AS modcount\n  FROM module\n  RIGHT JOIN netbox USING (netboxid)\n  JOIN type USING (typeid)\n  RIGHT JOIN vendor USING (vendorid)\n  GROUP BY vendorid\n  ORDER by vendorid\";\n$title = \"Vendors\";\n$name_vendorid=\"Vendor\";\n$explain_ipcount=\"Number of IP addresses related to this vendor\";\n$explain_modcount=\"Number of modules related to this vendor\";\n$url_vendorid=\"/report/type?vendorid=$vendorid\";\n$url_ipcount=\"/report/netbox?vendorid=$vendorid\";\n}\n\n\n\n\n# ---------------------------------------------------------------------\n# usage,org\n#\n\nusage {\n$description = \"List of how many networks different groups of users uses.\";\n$sql=\"\n  SELECT usageid,count(prefixid) AS netcount,descr\n  FROM usage\n  LEFT JOIN vlan USING (usageid)\n  LEFT JOIN prefix USING (vlanid)\n  GROUP BY usageid,descr\";\n$title = \"Usage\";\n$name_netcount = \"Number of networks\";\n$name_usageid=\"Usage\";\n$name_descr=\"Description\";\n$order_by=\"usageid\";\n$url_netcount=\"/report/prefix?usage=$usageid\";\n}\n\n\n# The org table uses a data dictionary (hstore). If you want to output a\n# foobar column containing the values of the foobar data key, use this syntax:\n# data->'foobar' AS foobar\n#\norg {\n$description = \"List of number of networks the different organizational units uses.\";\n$sql = \"\n  SELECT\n    orgid,\n    count(distinct netbox.netboxid) AS boxcount,\n    count(distinct prefix.prefixid) AS netcount,\n    parent,\n    descr,\n    org.data\n  FROM org\n  LEFT JOIN netbox USING (orgid)\n  LEFT JOIN vlan USING (orgid)\n  LEFT JOIN prefix USING (vlanid)\n  GROUP BY orgid,parent,descr,org.data\";\n$title = \"Organization\";\n$name_descr=\"Description\";\n$name_parent=\"Parent\";\n$name_orgid=\"Organizational unit\";\n$name_data=\"Attributes\";\n$order_by=\"orgid\";\n$url_parent=\"/report/org?parent=$parent\";\n$url_boxcount=\"/report/netbox?orgid=$orgid\";\n$url_netcount=\"/report/prefix?orgid=$orgid\";\n}\n\n\n# ---------------------------------------------------------------------\n# other reports\n#\n\n\n#############################\n#\n# spanning tree blocked\nstpblock {\n$description = \"Lists ports that are blocked by the spanning tree protocol.\";\n$sql = \"\n  SELECT swportblocked.vlan,sysname,ifname,baseport,ifindex,link,ifalias AS description\n  FROM swportblocked\n  JOIN interface_swport USING (interfaceid)\n  JOIN netbox USING (netboxid)\n  WHERE link='y'\";\n$order_by=\"vlan,sysname,baseport,ifindex\";\n$title = \"STP blocked ports\";\n$hide = \"baseport,ifindex\";\n}\n\n\ninterfaces {\n$title = \"Interfaces\";\n$description = \"The full list of collected interfaces on a device\";\n$sql = \"\n SELECT\n   sysname,\n   ifindex,\n   ifname,\n   ifdescr,\n\n   CASE\n     WHEN catid IN ('GW', 'GSW') AND addr_count > 0 THEN '3/gw'\n     WHEN addr_count > 0 THEN '3'\n     WHEN baseport IS NOT NULL THEN '2'\n     ELSE 'N/A'\n   END AS layer,\n\n   iftype,\n   ifphysaddress AS mac,\n   moduleid,\n   module AS moduleno,\n   name as module,\n\n   CASE ifadminstatus\n     WHEN 1 THEN 'up'\n     WHEN 2 THEN 'down'\n     WHEN 3 THEN 'testing'\n     ELSE ifadminstatus::TEXT\n   END AS adm,\n\n   CASE ifoperstatus\n     WHEN 1 THEN 'up'\n     WHEN 2 THEN 'down'\n     WHEN 3 THEN 'testing'\n     WHEN 4 THEN 'unknown'\n     WHEN 5 THEN 'dormant'\n     WHEN 6 THEN 'notPresent'\n     WHEN 7 THEN 'lowerLayerDown'\n     ELSE ifoperstatus::TEXT\n   END as oper,\n\n   CASE duplex\n     WHEN 'f' THEN 'full'\n     WHEN 'h' THEN 'half'\n     ELSE duplex\n   END AS duplex,\n\n   speed,\n   media,\n   ifalias AS alias,\n\n   CASE\n     WHEN gone_since IS NULL THEN 'yes'\n     ELSE 'missing since ' || to_char(gone_since, 'YYYY-MM-DD HH24:MI')\n   END AS present,\n\n   interfaceid,\n   interface.netboxid,\n   catid\n FROM\n   interface\n JOIN\n   netbox USING (netboxid)\n LEFT JOIN\n   module USING (moduleid)\n LEFT JOIN\n   (SELECT interfaceid, COUNT(gwip) AS addr_count\n    FROM gwportprefix\n    GROUP BY interfaceid) AS foo USING (interfaceid)\n\";\n\n$hide = \"moduleno,interfaceid,netboxid,moduleid,catid\";\n$name_sysname = \"Sysname\";\n$name_to_netboxid = \"Neighbor\";\n$name_remote_interface=\"Neighbor port\";\n$name_speed = \"Mbps\";\n$order_by=\"sysname,moduleno,module,ifindex,ifname\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_ifname=\"/ipdevinfo/$sysname/interface=$interfaceid\";\n$url_module=\"/report/modules?sysname=$sysname&mn=$module\";\n$explain_alias=\"ifAlias / description / portname\";\n}\n\naggregate {\n$title = \"Aggregated interfaces\";\n$description = \"Interfaces that appear to be aggregates of multiple lower-layer ports, like port- or etherchannels\";\n$sql = \"\n SELECT\n   sysname,\n   ifname,\n   ifindex,\n   ifdescr,\n\n   CASE\n     WHEN catid IN ('GW', 'GSW') AND addr_count > 0 THEN '3/gw'\n     WHEN addr_count > 0 THEN '3'\n     WHEN baseport IS NOT NULL THEN '2'\n     ELSE 'N/A'\n   END AS layer,\n\n   iftype,\n   moduleid,\n   module AS moduleno,\n   name as module,\n\n   CASE ifadminstatus\n     WHEN 1 THEN 'up'\n     WHEN 2 THEN 'down'\n     WHEN 3 THEN 'testing'\n     ELSE ifadminstatus::TEXT\n   END AS adm,\n\n   CASE ifoperstatus\n     WHEN 1 THEN 'up'\n     WHEN 2 THEN 'down'\n     WHEN 3 THEN 'testing'\n     WHEN 4 THEN 'unknown'\n     WHEN 5 THEN 'dormant'\n     WHEN 6 THEN 'notPresent'\n     WHEN 7 THEN 'lowerLayerDown'\n     ELSE ifoperstatus::TEXT\n   END as oper,\n\n   CASE duplex\n     WHEN 'f' THEN 'full'\n     WHEN 'h' THEN 'half'\n     ELSE duplex\n   END AS duplex,\n\n   speed,\n   ifalias AS alias,\n   interfaceid,\n   interface.netboxid,\n   catid\n FROM\n   interface\n JOIN\n   netbox USING (netboxid)\n LEFT JOIN\n   module USING (moduleid)\n LEFT JOIN\n   (SELECT interfaceid, COUNT(gwip) AS addr_count\n    FROM gwportprefix\n    GROUP BY interfaceid) AS foo USING (interfaceid)\n WHERE interfaceid IN (SELECT higher FROM interface_stack WHERE higher <> lower GROUP BY higher HAVING COUNT(*) > 1)\n\";\n\n$hide = \"moduleno,interfaceid,ifindex,netboxid,moduleid,catid\";\n$name_sysname = \"Sysname\";\n$name_to_netboxid = \"Neighbor\";\n$name_remote_interface=\"Neighbor port\";\n$name_speed = \"Mbps\";\n$order_by=\"sysname,moduleno,module,ifindex,ifname\";\n$url_sysname=\"/report/netbox?sysname=$sysname\";\n$url_ifname=\"/ipdevinfo/$sysname/interface=$interfaceid\";\n$url_module=\"/report/modules?sysname=$sysname&mn=$module\";\n$explain_alias=\"ifAlias / description / portname\";\n}\n\nifstack {\n$title = \"Interface stacks\";\n$description = \"Interfaces that are stacked in conceptual layers\";\n$sql = \"\n SELECT\n   sysname,\n\n   h.interfaceid AS h_id,\n   h.ifindex AS h_ifindex,\n   h.ifname AS higher,\n   h.ifalias AS high_alias,\n\n   l.interfaceid AS l_id,\n   l.ifindex AS l_ifindex,\n   l.ifname AS lower,\n   l.ifalias AS low_alias\n\n FROM interface_stack ifs\n JOIN interface h ON (ifs.higher=h.interfaceid)\n JOIN interface l ON (ifs.lower=l.interfaceid)\n JOIN netbox ON (h.netboxid=netbox.netboxid)\n\";\n\n$hide = \"h_ifindex,h_id,l_ifindex,l_id\";\n$name_sysname = \"Sysname\";\n$order_by=\"sysname,h_ifindex,l_ifindex\";\n$url_sysname=\"/ipdevinfo/$sysname/\";\n$url_higher=\"/ipdevinfo/$sysname/interface=$h_id\";\n$url_lower=\"/ipdevinfo/$sysname/interface=$l_id\";\n$explain_high_alias=\"ifAlias / description / portname\";\n$explain_low_alias=\"ifAlias / description / portname\";\n}\n\nunrecognized_neighbors {\n$description = \"Discovered neighbor devices that aren't known/monitored by NAV\";\n$sql = \"\nSELECT\n  sysname,\n  interfaceid,\n  ifname,\n  ifindex,\n  remote_id,\n  remote_name,\n  source,\n  date_trunc('second', since) AS since\nFROM unrecognized_neighbor\nJOIN netbox USING (netboxid)\nJOIN interface USING (interfaceid)\n\";\n$hide=\"interfaceid,ifindex\";\n$order_by=\"sysname, ifindex, remote_id\";\n$title=\"Unrecognized neighbors\";\n$url_sysname=\"/ipdevinfo/$sysname\";\n$url_ifname=\"/ipdevinfo/$sysname/interface=$interfaceid\";\n$url_remote_id=\"/ipdevinfo/?query=$remote_id\";\n$url_remote_name=\"/ipdevinfo/?query=$remote_name\";\n$name_ifname=\"Interface\";\n$name_sysname=\"Reported by\";\n$name_remote_id=\"Remote ID\";\n$explain_remote_id=\"Identifier of unrecognized neighbor\";\n$name_remote_name=\"Remote name\";\n$explain_remote_name=\"Name of unrecognized neighbor\";\n$name_since=\"Seen since\";\n$explain_source=\"Discovery protocol that reported this neighbor\";\n}\n\nduplexmismatch {\n$title = \"Duplex mismatch\";\n$description = \"Lists duplex mismatches on connected switch ports\";\n$sql = \"\nSELECT\n  n1.sysname AS sysname1,\n  s1.interface AS interface1,\n  CASE s1.duplex\n    WHEN 'h' THEN 'Half'\n    WHEN 'f' THEN 'Full'\n    ELSE 'N/A'\n  END AS duplex1,\n  CASE s2.duplex\n    WHEN 'h' THEN 'Half'\n    WHEN 'f' THEN 'Full'\n    ELSE 'N/A'\n  END AS duplex2,\n  s2.interface AS interface2,\n  n2.sysname AS sysname2\nFROM\n  swport s1\nJOIN\n  swport s2 ON (s1.to_swportid=s2.swportid AND\n                s1.duplex <> s2.duplex)\nJOIN\n  module m1 ON (s1.moduleid=m1.moduleid)\nJOIN\n  netbox n1 ON (m1.netboxid=n1.netboxid)\nJOIN\n  module m2 ON (s2.moduleid=m2.moduleid)\nJOIN\n  netbox n2 ON (m2.netboxid=n2.netboxid)\n\";\n$order_by = \"sysname1\";\n$url_sysname1=\"/report/netbox?sysname=$sysname1\";\n$url_sysname2=\"/report/netbox?sysname=$sysname2\";\n}\n\navailability_month {\n$title = \"Availability last month\";\n$description = \"Availability and downtime summary for the last month\";\n$sql = \"\nSELECT\n  netboxid,\n  sysname,\n  SUM(downtime) AS downtime_sum,\n  COUNT(alerthistid) AS downperiod_count,\n\n  (1 - (EXTRACT(EPOCH FROM SUM(downtime)) /\n        EXTRACT(EPOCH FROM (global_end-global_start)))\n  ) * 100 AS availability_pct,\n  global_start::DATE AS from_date\n\nFROM (\n\n  SELECT\n    alerthistid,\n    netbox.netboxid,\n    sysname,\n    global_start,\n    global_end,\n    LEAST(end_time, global_end) - GREATEST(start_time, global_start) AS downtime\n\n  FROM alerthist ah\n\n  JOIN\n    (SELECT\n       now()-interval '1 month' AS global_start,\n       now() as global_end) AS timeslot\n    ON (ah.start_time, ah.end_time) OVERLAPS (timeslot.global_start, timeslot.global_end)\n  JOIN\n    netbox USING (netboxid)\n  WHERE\n    eventtypeid = 'boxState' AND\n    end_time IS NOT NULL AND\n    alerttypeid = (SELECT alerttypeid FROM alerttype WHERE alerttype='boxDown')\n  ORDER BY\n    sysname,\n    alerthistid\n\n) AS downtime\nGROUP BY\n  netboxid, sysname, global_start, global_end\n\";\n$order_by = \"downtime_sum DESC\";\n$hide=\"netboxid,from_date\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$url_downperiod_count = \"/devicehistory/history/?from_date=$from_date&amp;netbox=$netboxid\"\n$name_sysname = \"Sysname\";\n$name_downtime_sum = \"Total downtime\";\n$name_downperiod_count = \"Incidents count\";\n$name_availability_pct = \"% available\";\n}\n\ntopology_candidates {\n$title = \"Direct neighborship candidates\";\n$description = \"Candidates for direct neighborship, evaluated during topology derivation\";\n$sql=\"\nSELECT\n  frombox.sysname AS from_device, fromport.ifname as from_interface,\n  source,\n  tobox.sysname AS to_device, toport.ifname as to_interface,\n  CASE toportbox.netboxid = tobox.netboxid\n    WHEN True THEN NULL\n    ELSE toportbox.sysname\n  END AS control\nFROM\n  adjacency_candidate AS ac\nJOIN\n  netbox frombox ON (ac.netboxid=frombox.netboxid)\nJOIN\n  interface fromport ON (ac.interfaceid=fromport.interfaceid)\nJOIN\n  netbox tobox ON (ac.to_netboxid = tobox.netboxid)\nLEFT JOIN\n  interface toport ON (ac.to_interfaceid = toport.interfaceid)\nLEFT JOIN\n  netbox toportbox ON (toport.netboxid=toportbox.netboxid)\nORDER BY\n  from_device, fromport.ifindex, source, to_device, to_interface\n\";\n$name_from_device=\"Sysname\";\n$url_from_device=\"/ipdevinfo/$from_device\";\n\n$name_from_interface=\"Interface\";\n$url_from_interface=\"/ipdevinfo/$from_device/ifname=$from_interface\";\n\n$name_to_device=\"Candidate neighbor\";\n$url_to_device=\"/ipdevinfo/$to_device\";\n\n$name_to_interface=\"Candidate neighbor port\";\n$url_to_interface=\"/ipdevinfo/$to_device/ifname=$to_interface\";\n\n$explain_control=\"This column should be empty, or something is wrong with the topology system\";\n}\n\nno_uplink {\n$title = \"Devices without a known uplink\";\n$description = \"Devices where no ports have it listed as a known topology neighbor, i.e. NAV has not discovered any uplink\";\n$sql = \"\nSELECT\n  netbox.sysname,\n  netbox.ip,\n  catid,\n  roomid,\n  orgid,\n  COALESCE(ac_count, 0) AS candidates,\n  netbox.netboxid\nFROM\n  netbox\nLEFT JOIN (\n  SELECT to_netboxid, count(*) AS ac_count\n  FROM adjacency_candidate\n  GROUP BY to_netboxid\n) ac ON ac.to_netboxid = netbox.netboxid\nWHERE\n  netbox.netboxid NOT IN (\n    SELECT DISTINCT to_netboxid\n    FROM interface\n    WHERE to_netboxid IS NOT NULL\n  )\n\";\n$order_by = \"sysname\";\n$hide = \"netboxid\";\n$name_sysname = \"Name\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$name_ip = \"IP address\";\n$name_catid = \"Category\";\n$name_roomid = \"Room\";\n$url_roomid = \"/report/room?roomid=$roomid\";\n$name_orgid = \"Organization\";\n$url_orgid = \"/report/org?orgid=$orgid\";\n$name_candidates = \"Adjacency candidacies\";\n$explain_candidates = \"Number of times this device appears as a candidate neighbor in the topology system\";\n$url_candidates = \"/report/topology_candidates?to_device=$sysname\";\n}\n\noffline_devices {\n$title = \"Offline devices\";\n$description = \"These are devices that have been shelved, but are known to NAV\";\n$sql = \"\nSELECT\n  serial,\n  COALESCE(to_char(discovered, 'YYYY-MM-DD HH24:MI:SS'), 'N/A') AS firstseen,\n  hw_ver, fw_ver, sw_ver,\n  COALESCE(discovered, '1970-01-01 00:00:00'::timestamp) AS discovered\nFROM\n  device\nWHERE\n  serial IS NOT NULL AND serial <> '' AND\n  deviceid NOT IN (SELECT ne.deviceid FROM netboxentity ne WHERE ne.deviceid IS NOT NULL\n                   UNION\n                   SELECT m.deviceid FROM module m WHERE m.deviceid IS NOT NULL)\nORDER BY discovered DESC\n\n\";\n\n$name_serial = \"Serial #\";\n$name_hw_ver = \"HW version\";\n$name_fw_ver = \"FW version\";\n$name_sw_ver = \"SW version\";\n$name_firstseen = \"First seen by NAV\";\n$hide = \"discovered\";\n\n}\n\nlastupdated {\n$title = \"Last ipdevpoll update timestamps\";\n$description = \"Shows when the last ipdevpoll job ran for each device\";\n$sql = \"\nSELECT sysname, foo.*\nFROM netbox\nLEFT JOIN (\n    SELECT\n      netboxid,\n      job_name as Job,\n      date_trunc('second', age(now(), end_time)) AS age,\n      date_trunc('second', end_time::timestamp without time zone) AS last_updated,\n      CASE WHEN end_time IS NULL THEN 'N/A'\n           WHEN success THEN 'success'\n           ELSE 'FAILED'\n      END AS job_status,\n\n      CASE WHEN NOW() > (end_time + interval * INTERVAL '1 second')\n           THEN 'OVERDUE'\n           ELSE NULL\n      END AS overdue,\n\n      CASE up WHEN 'y' THEN 'up' ELSE 'DOWN' END AS box_status,\n\n      CASE WHEN (SELECT COUNT(*) = 0\n             FROM alerthist\n             WHERE\n               eventtypeid='snmpAgentState'\n               AND end_time >= 'infinity'\n               AND alerthist.netboxid=netbox.netboxid)\n           THEN 'ok ' ELSE 'NOT OK' END AS snmp_status\n\n    FROM\n      ipdevpoll_job_log AS ijl\n    JOIN netbox USING (netboxid)\n    JOIN (SELECT\n             netboxid,\n             job_name,\n             MAX(end_time) AS end_time\n           FROM\n             ipdevpoll_job_log\n           GROUP BY netboxid, job_name) AS latestjobs\n              USING (netboxid, job_name, end_time)\n    ) AS foo USING (netboxid)\n\";\n\n$url_sysname = \"/ipdevinfo/$sysname\";\n$order_by = \"age DESC\";\n}\n\ncisco_serials {\n$title=\"Cisco chassis/module serial numbers decoded\";\n$description=\"This report attempts to decode production date from Cisco serial numbers\";\n$sql=\"\nSELECT\n  sysname, orgid,\n  CASE\n    WHEN physical_class=3 THEN 'chassis'\n    WHEN physical_class=9 THEN 'module'\n    ELSE NULL\n  END AS Kind,\n  model_name AS model,\n  serial,\n  substr(serial, 4, 2)::int + 1996 AS prod_year,\n  substr(serial, 6, 2) AS prod_week,\n  CASE\n    WHEN physical_class=3\n    THEN COALESCE(d.discovered, netbox.discovered)\n    ELSE d.discovered\n  END AS discovered\nFROM netboxentity ne\nJOIN device d ON (d.deviceid=ne.deviceid)\nJOIN netbox USING (netboxid)\nWHERE\n  vendor_type LIKE '.1.3.6.1.4.1.9.%'\n  AND physical_class IN (3, 9)\n  AND serial ~* '^[a-z]{3}[a-z,0-9]{8}$'\n\";\n$order_by = \"prod_year, prod_week, sysname\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$name_model = \"Model\";\n$name_serial = \"Serial\";\n$name_discovered = \"First seen by NAV\";\n}\n\nchassis_models {\n$title = \"IP Device SNMP types and chassis models\";\n$description = \"Comparative listing of SNMP agent types and chassis model names for all IP devices\";\n$sql = \"\n    SELECT sysname, vendorid, typename, model_name AS model, serial\n    FROM netbox\n    LEFT JOIN type USING (typeid)\n    LEFT JOIN netboxentity ne ON (ne.netboxid=netbox.netboxid AND physical_class=3)\n    LEFT JOIN device ON (ne.deviceid=device.deviceid)\n\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$url_vendorid = \"chassis_models?vendorid=$vendorid\";\n$url_typename = \"chassis_models?typename=$typename\";\n$url_model = \"chassis_models?model=$model\";\n$name_vendorid = \"Vendor\";\n$name_model = \"Chassis model\";\n$name_serial = \"Chassis serial\";\n$order_by = \"sysname\";\n}\n\n\nbgp {\n$title = \"BGP peering sessions\";\n$sql = \"\n  SELECT\n    sysname,\n    peer,\n    state,\n    adminstatus,\n    local_as,\n    remote_as,\n    local_as = remote_as AS ibgp,\n    last_state_change\n  FROM peersession\n  JOIN netbox USING (netboxid)\n  WHERE protocol=1\n\n\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$url_peer = \"/ipdevinfo/ip=$peer/\";\n$url_ibgp = \"bgp?ibgp=$ibgp\";\n$url_local_as = \"bgp?local_as=$local_as\";\n$url_remote_as = \"bgp?remote_as=$remote_as\";\n$order_by = \"sysname, peer\";\n}\n\nhistorylast24hours {\n$title=\"Events detected last 24 hours\";\n$description=\"All events detected in NAV within the last 24 hours\";\n$sql=\"\n  SELECT\n    sysname,\n    alerttype,\n    start_time,\n    end_time,\n    locationid,\n    alerttypeid,\n    alerthistid\n  FROM alerthist\n  JOIN netbox USING (netboxid)\n  JOIN room USING (roomid)\n  JOIN alerttype USING (alerttypeid)\n  WHERE start_time > (now() - interval '24 hour')\n\";\n$hide = \"alerttypeid,alerthistid\";\n$order_by = \"start_time desc\";\n$name_locationid = \"location\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$url_alerttype = \"/search/event/$alerthistid\";\n$url_locationid = \"/report/room?locationid=$locationid\";\n}\n\nentity {\n$title = \"Operational IP Device entities\";\n$description = \"All operational entities with vendors, classifications and serial numbers\";\n$sql=\"\nWITH classmap AS (\n  SELECT * FROM\n  (VALUES\n    (1, 'other'),\n    (2, 'unknown'),\n    (3, 'chassis'),\n    (4, 'backplane'),\n    (5, 'container'),\n    (6, 'powerSupply'),\n    (7, 'fan'),\n    (8, 'sensor'),\n    (9, 'module'),\n    (10, 'port'),\n    (11, 'stack'),\n    (12, 'cpu'),\n    (13, 'energyObject'),\n    (14, 'battery')\n  ) AS classmap (physical_class, class_name)\n)\nSELECT\n  sysname,\n  vendorid AS vendor,\n  classmap.class_name AS class,\n  device.serial,\n  ne.name,\n  ne.descr,\n  ne.model_name,\n  ne.software_revision AS software\nFROM\n  netboxentity AS ne\nJOIN netbox USING (netboxid)\nLEFT JOIN type USING (typeid)\nLEFT JOIN device ON (ne.deviceid=device.deviceid)\nLEFT JOIN classmap USING (physical_class)\nWHERE serial IS NOT NULL\nORDER BY sysname, ne.index\n\";\n$url_sysname = \"/ipdevinfo/$sysname\";\n$explain_sysname = \"Which IP device an entity is contained within\";\n$url_vendor = \"entity?vendor=$vendor\";\n$url_class = \"entity?class=$class\";\n$name_model_name = \"model name\";\n}\n\n#\n# EOF\n#\n"
  },
  {
    "path": "python/nav/etc/report/report.conf.d/report.local.conf",
    "content": "##\n#### Local configuration file for the report generator\n#\n# Local reports with equivalent name as in the default configuration file\n# (report.conf) will take precedence. The local report configuration file only\n# has to define or redefine parts of existing reports that wants to be added or\n# changed.\n#\n##\n## - Variables starts with '$', and comments with '#'.\n## - Values must be within double quates (\") and lines must end with a semicolon (;).\n## - $sql is the sql-query. Line break and white space is allowed.\n## - $order_by defines the default ordering of the sql query. By clicking on the\n##   column headers\n##   in the report, you can sort/reverse sort on other criteria.\n## - $title ($overskrift) is the report title as shown on web.\n## - $extra ($ekstra) are extra columns that can be used for hyperlinks (see $url).\n## - $hide ($skjul) are columns that must be included in the $sql because they\n##   are used in a $url, see below. $hide will not show the column in the report.\n## - $sum shows the total of a given column (may not work...).\n## - $count angir kolonner som skal telles.\n## - $name_MYCOL ($navn_MYCOL) changes the column header.\n## - $url_MYCOL makes a hyperlink\n## - $explain_MYCOL ($forklar_MYCOL) shows an explaination as popup in the\n##   browser when you hold the curser over the column header.\n## - $description is the descriptive summary of what the report shows.\n##\n## Comment out configuration with '# '\n\n\n# netbox {\n# $title = \"Devices in Operation + more sums\";\n# $sum=\"swport,sub\";\n# }\n\n\n#\n# EOF\n#\n"
  },
  {
    "path": "python/nav/etc/seeddb.conf",
    "content": "#\n# $Id$\n# This file contains configuration for the seeddb subsystem.\n#\n\n#\n# Character encodings used by seeddb\n# The default_encoding should match the encoding set \n# in the maintemplate.\n#\n# The bulk_try_encodings is a list of encodings to try\n# out on uploaded files. If one encoding fails, then\n# the next one in the list is tried.\n#\n# Place new encodings you want used first in the list,\n# since some encodings, like utf_16, will catch everything. \n\ndefault_encoding = utf_8\nbulk_try_encodings = ['utf_8','latin_1','iso8859_10','utf_16']\n\n#\n# Network cable categories (used for adding and editing cablings)\n#\n# Each category is defined as a tuple (id,description) where\n# id is used in the database and description is a textual\n# description which can be used by the web interface.\n#\n# Categories is a list of the defined categories. Entries\n# will appear in the order they are listed here . The first\n# entry in this list is the default entry.\n#\n\ncat5  =  ('cat5','cat5')\ncat3  =  ('cat3','cat3')\ncat5e =  ('cat5e','cat5e')\ncat6  =  ('cat6','cat6')\n\ncategories = ['cat5','cat3','cat5e','cat6']\n\n#\n# Splits (used for adding and editing patches)\n#\n# Each split is defined as a tuple (id,description,opposite) where\n# id is used in the database, description is a textual description\n# for the web interface and opposite is a reference to the other\n# part of the split. Ie. if split1 is chosen on a patch, split2\n# is defined as opposite and will be selected for the other patch\n# on the selected jack/swport.\n#\n# Splits is a list of the defined splits. Entries will appear in\n# the order they are listed here. The first entry is the default.\n#\n\nsplit0 = ('no','No split',None)\nsplit1 = ('lance25 A','lance25 A','split2')\nsplit2 = ('lance25 B','lance25 B','split1')\nsplit3 = ('YA4-E2-E2 A','YA4-E2-E2 B','split4')\nsplit4 = ('YA4-E2-E2 B','YA4-E2-E2 B','split3')\n\nsplits = ['split0','split1','split2','split3','split4']\n"
  },
  {
    "path": "python/nav/etc/servicemon.conf",
    "content": "#\n# This is a sample configuration file for NAV servicemon.\n#\n\n# Maximum number of threads. This value defaults to sysmaxint.\nmaxthreads = 20\n\n# Recycle each thread after a given number of jobs\n# The value 0 means never.\nrecycle interval = 50\n\n# How often do we want to check each service\ncheckinterval = 60\n\n# Set default timeout in seconds\n# Defalts to 5\ntimeout\t\t= 5\n\n# Set default timeout for ssh\n# Defaults to 'timeout'\nssh timeout\t= 10\n\nsmtp timeout\t= 10\npop3 timeout\t= 10\n\n# Number of retries before reporting state change\n# Defaults to 3\nretry\t\t= 3\n\n\n# Nuber of seconds to wait between each retry\n# Defaults to 5 seconds\nretry delay\t= 5\n\n# Location of the log file\nlogfile = servicemon.log\n"
  },
  {
    "path": "python/nav/etc/severity.yml",
    "content": "# This file configures how severity values are assigned to alerts generated by\n# the Event Engine. Severity values are in the interval 1-5. A value of 1\n# denotes the most critical level, while level 5 is purely informational.\n#\n# Please see the event engine reference docs for details.\n---\ndefault-severity: '3'\nrules:\n    - event_type.id: boxState\n      severity: '2'\n      rules:\n          - netbox.category.id: GSW\n            severity: '1'\n          - netbox.category.id: GW\n            severity: '1'\n          - netbox.category.id: SW\n            severity: '3'\n          - alert_type: boxDownWarning\n            severity: '5'\n\n    - event_type.id: moduleState\n      severity: '2'\n      rules:\n          - netbox.category.id: GSW\n            severity: '1'\n          - netbox.category.id: GW\n            severity: '1'\n          - netbox.category.id: SW\n            severity: '3'\n          - alert_type: moduleDownWarning\n            severity: '5'\n\n    - event_type.id: chassisState\n      severity: '2'\n      rules:\n          - netbox.category.id: GSW\n            severity: '1'\n          - netbox.category.id: GW\n            severity: '1'\n          - netbox.category.id: SW\n            severity: '3'\n\n    - event_type.id: aggregateLinkState\n      severity: '4'\n\n    - event_type.id: maintenanceState\n      severity: '5'\n\n    - event_type.id: boxRestart\n      severity: '5'\n"
  },
  {
    "path": "python/nav/etc/smsd.conf",
    "content": "# Default values are commented out\n\n[main]\n# Delay in seconds between queue checks\n#delay: 30\n\n# The delay between queue checks will increase by a factor 'delayfactor' on\n# each subsequent failure to dispatch an SMS message.\n#delayfactor: 1.5\n\n# The delay between queue checks will never increase above the maxdelay value\n#maxdelay: 3600\n\n# Retry limit. The number of failed attempts before 'retrylimitaction' is\n# performed. If 'retrylimit' is set to 0 the the daemon will continue its\n# dispatch attempts indefinitely without ever executing 'retrylimitaction'.\n#retrylimit: 5\n\n# Retry limit action\n# ignore   - Messages in queue are marked as ignored and error details are logged and\n#            mailed to admin. Deamon resumes running and checking the message queue.\n#\n# shutdown - Error details are logged and mailed to admin and the daemon is shuts down. \n#\n#retrylimitaction: ignore\n\n# Whether or not to exit the daemon with an error code when a dispatch error\n# is reported as being permanent (e.g. phone appears to be disconnected)\n#exit_on_permanent_error: yes\n\n# Automatically cancel all messages older than 'autocancel', 0 to disable\n# Format like the PostgreSQL interval type, e.g. '1 day 12 hours'\n#autocancel: 0\n\n# Log messages of <mailwarnlevel> or higher are also sent via e-mail\n# to the nav admin from nav.conf. Generic log levels are set in logging.conf.\n# Valid mailwarnlevels are DEBUG, INFO, WARNING, ERROR, CRITICAL\n#mailwarnlevel: ERROR\n#mailserver: localhost\n\n[dispatcher]\n# Dispatchers in prioritized order\n# In other words: most wanted/cheapest first, safest last\n# Don't skip numbers in the priority sequence, e.g. 1,2,3, not 1,3,7\ndispatcher1: GammuDispatcher\n#dispatcher2: HttpGetDispatcher\n#dispatcher3: UninettMailDispatcher\n#dispatcher4: BoostDispatcher\n# WARNING: Don't enable the DebugDispatcher unless you are actually debugging!\n#dispatcher5: DebugDispatcher\n\n[GammuDispatcher]\n# No smsd custom configuration needed, but Gammu itself must be configured\n# correctly.\n\n[UninettMailDispatcher]\nmailaddr: sms@uninett.no\n\n[BoostDispatcher]\nurl: https://secure.boostcom.net/axis/services/ExternalSender\n# Authentication information\nusername: None\npassword: None\n# Phone number to send from\nsender: None\n\n[HttpGetDispatcher]\n# Both HTTP and HTTPS are supported\n# Make sure to include %(phone)s and %(sms)s in your URL\nurl: https://smsgw/sms/send?user=me&pass=secret&recv=%(phone)s&msg=%(sms)s\n\n[DebugDispatcher]\n# What to do when asked to dispatch an SMS\n# valid values are:\n#   success   -- everyone is happy\n#   fail      -- return failed status\n#   permanent -- return a permanent failure status\n#   error     -- raise a DispatcherError\nresult=success\n"
  },
  {
    "path": "python/nav/etc/snmptrapd.conf",
    "content": "# Configfile for snmptrapd\n\n[snmptrapd]\n# Each of these Python modules will be offered the chance to handle an incoming\n# trap, in this order. Each of the modules may have their own config section in\n# this file as well. If you change this list, you need to restart snmptrapd.\n\nhandlermodules = nav.snmptrapd.handlers.linkupdown, nav.snmptrapd.handlers.airespace, nav.snmptrapd.handlers.weathergoose, nav.snmptrapd.handlers.ups\n\n[linkupdown]\nPORTOID = .1.3.6.1.2.1.2.2.1.1\n\n[airespace]\n"
  },
  {
    "path": "python/nav/etc/sortedstats.conf",
    "content": "# Configuration for \"Ranked statistics\" web tool\n\n# Define reports to periodically fetch and pre-populate the ranked\n# statistics cache with.\n# Different timeframes are updated at different intervals:\n# hour: every 15 minutes. day: every hour. week: every 6 hours. month: every day\n#[myreport]\n#view=cpu_routers_highestmax | uptime | ifinoctets | ifoutoctets | ifouterrors | ifinerrors | leastfreeaddresses\n#timeframe=hour | day | week | month\n#rows=integer > 0\n\n# Example for a periodic report\n#[myreport_cpu]\n#view=cpu_routers_highestmax\n#timeframe=hour\n#rows=5\n"
  },
  {
    "path": "python/nav/etc/toolbox/alertprofiles.tool",
    "content": "name=Alert Profiles\nuri=/alertprofiles/\nicon=/static/images/toolbox/alertprofiles.png\ndescription=Configure your alert subscriptions.\n"
  },
  {
    "path": "python/nav/etc/toolbox/arnold.tool",
    "content": "name=Arnold\nuri=/arnold/\nicon=/static/images/toolbox/arnold.png\ndescription=Block or quarantine switch access ports.\ndoclink=/doc/reference/arnold.html\n"
  },
  {
    "path": "python/nav/etc/toolbox/auditlog.tool",
    "content": "name=Audit Log\nuri=/auditlog/\nicon=/static/images/toolbox/auditlog.png\ndescription=See who changed what when\n"
  },
  {
    "path": "python/nav/etc/toolbox/business.tool",
    "content": "name=Business reports\nuri=/business/\nicon=/static/images/toolbox/suitcase.svg\ndescription=View business reports\n"
  },
  {
    "path": "python/nav/etc/toolbox/devicehistory.tool",
    "content": "name=Device History\nuri=/devicehistory/\nicon=/static/images/toolbox/devicehistory.png\ndescription=Browse and search alert history of devices. Delete modules that are no longer in operation.\n"
  },
  {
    "path": "python/nav/etc/toolbox/geomap.tool",
    "content": "name=Geomap\nuri=/geomap/\nicon=/static/images/toolbox/geomap.png\ndescription=Geographic network weather map, based on OpenStreetMap data.\n"
  },
  {
    "path": "python/nav/etc/toolbox/info.tool",
    "content": "name=Search\nuri=/search/\nicon=/static/images/toolbox/info.png\ndescription=Search for devices, rooms, prefixes and more.\n"
  },
  {
    "path": "python/nav/etc/toolbox/interface_browser.tool",
    "content": "name=Interface browser\nuri=/interfaces/\nicon=/static/images/toolbox/interface_browser.svg\ndescription=View detailed interface information for multiple interfaces\n"
  },
  {
    "path": "python/nav/etc/toolbox/ipam.tool",
    "content": "name=IPAM\nuri=/ipam/\nicon=/static/images/toolbox/ipam.png\ndescription=Manage subnets and IP adresses\ndoclink=/doc/reference/ipam.html\n"
  },
  {
    "path": "python/nav/etc/toolbox/ipdevinfo.tool",
    "content": "name=IP Device Info\nuri=/ipdevinfo/\nicon=/static/images/toolbox/ipdevinfo.png\ndescription=Search and display details of all monitored devices, ports and IP addresses.\n"
  },
  {
    "path": "python/nav/etc/toolbox/l2trace.tool",
    "content": "name=Layer 2 Traceroute\nuri=/l2trace/\nicon=/static/images/toolbox/l2trace.png\ndescription=Trace layer 2 network paths between hosts.\n\n"
  },
  {
    "path": "python/nav/etc/toolbox/logger.tool",
    "content": "name=Syslog Analyzer\nuri=/syslogger/\nicon=/static/images/toolbox/syslog-analyzer.png\ndescription=Summarize and search syslog messages from (Cisco) devices.\n"
  },
  {
    "path": "python/nav/etc/toolbox/machinetracker.tool",
    "content": "name=Machine Tracker\nuri=/machinetracker/\nicon=/static/images/toolbox/machinetracker.png\ndescription=Search NAV's logs of IP and MAC address activity to find where and when hosts in your network have been active.\n"
  },
  {
    "path": "python/nav/etc/toolbox/macwatch.tool",
    "content": "name=MAC Watch\nuri=/macwatch/\nicon=/static/images/toolbox/macwatch.png\ndescription=Edit list of MAC addresses whose presence on the network will be alerted by NAV."
  },
  {
    "path": "python/nav/etc/toolbox/maintenance.tool",
    "content": "name=Maintenance Tasks\nuri=/maintenance/calendar\nicon=/static/images/toolbox/maintenance.png\ndescription=Edit device maintenance schedules. Alerts for devices are suppressed while on maintenance.\n"
  },
  {
    "path": "python/nav/etc/toolbox/messages.tool",
    "content": "name=Messages\nuri=/messages/active\nicon=/static/images/toolbox/messages.png\ndescription=Read and publish operational messages.\n"
  },
  {
    "path": "python/nav/etc/toolbox/neighbors.tool",
    "content": "name=Unrecognized Neighbors\nuri=/neighbors/\nicon=/static/images/toolbox/neighbors.svg\ndescription=List, add or ignore unrecognized neighbors\n"
  },
  {
    "path": "python/nav/etc/toolbox/netmap.tool",
    "content": "name=Netmap\nuri=/netmap/\nicon=/static/images/toolbox/vlanplot.png\ndescription=Topological layer 2 and layer 3 network weather map."
  },
  {
    "path": "python/nav/etc/toolbox/networkexplorer.tool",
    "content": "name=Network Explorer\nuri=/networkexplorer/\nicon=/static/images/toolbox/network-explorer.png\ndescription=Explore the network topology as it expands from each router port.\n"
  },
  {
    "path": "python/nav/etc/toolbox/portadmin.tool",
    "content": "name=Port Admin\nuri=/portadmin/\nicon=/static/images/toolbox/portadmin.svg\ndescription=Configure interfaces on ip devices.\ndoclink=/doc/reference/portadmin.html\n"
  },
  {
    "path": "python/nav/etc/toolbox/radius.tool",
    "content": "name=Radius\nuri=/radius/\nicon=/static/images/toolbox/radius.png\ndescription=View and search Radius accounting/error log.\ndoclink=/doc/reference/radius.html\n"
  },
  {
    "path": "python/nav/etc/toolbox/report.tool",
    "content": "name=Report\nuri=/report/\nicon=/static/images/toolbox/report.png\ndescription=Customizable NAV database reports\n"
  },
  {
    "path": "python/nav/etc/toolbox/seeddb.tool",
    "content": "name=Seed Database\nuri=/seeddb/\nicon=/static/images/toolbox/seeddb.png\ndescription=Edit NAV seed data: Which devices and services to monitor, location/room/organization registry, cabling and patch registry.\n"
  },
  {
    "path": "python/nav/etc/toolbox/stats.tool",
    "content": "name=Ranked Statistics\nuri=/stats/\nicon=/static/images/toolbox/stats.png\ndescription=Ranked statistics reports and charts. See which devices and interfaces have the highest loads.\n"
  },
  {
    "path": "python/nav/etc/toolbox/status.tool",
    "content": "name=Status\nuri=/status/\nicon=/static/images/toolbox/status.png\ndescription=See currently active problems detected by NAV\n"
  },
  {
    "path": "python/nav/etc/toolbox/threshold.tool",
    "content": "name=Thresholds\nuri=/threshold/\nicon=/static/images/toolbox/threshold.png\ndescription=Configure and manage threshold values for metrics stored in Graphite.\n"
  },
  {
    "path": "python/nav/etc/toolbox/useradmin.tool",
    "content": "name=User and API Administration\nuri=/useradmin/\nicon=/static/images/toolbox/useradmin.png\ndescription=Edit NAV user accounts, group memberships and access privileges.\n"
  },
  {
    "path": "python/nav/etc/toolbox/watchdog.tool",
    "content": "name=WatchDog\nuri=/watchdog/\nicon=/static/images/toolbox/watchdog.svg\ndescription=See NAV overview and status\n"
  },
  {
    "path": "python/nav/etc/webfront/authentication.toml",
    "content": "# Should NAV itself handle multi factor authentication (mfa)?\n[multi-factor-authentication]\n# Whether mfa should be enabled\nenabled = false\n\n# Whether mfa recovery codes can be generated and used. Default: yes\n## We recommend not changing this setting.\n#support-recovery-codes = true\n# The number of codes is hard-coded to 10\n\n\n# Configuration for \"social\" login providers bundled with django-allauth\n# See https://docs.allauth.org/en/latest/socialaccount/providers/index.html\n# for list. \"oidc\" and \"SAML\" have their own config sections\n# We have tested github and dataporten.\n\n# Example: github\n# [social.providers.github]\n# client_id = \"not.optional\"\n# secret = \"not.optional\"\n# scope = [\"user:email\"]  # optional, \"user\" scope is default and includes \"user:email\"\n\n\n# Configuration for OIDC login\n# [oidc]\n# module-path = \"allauth.socialaccount.providers.openid_connect\"\n#\n# Example: Feide OIDC (dataporten)\n# [oidc.idps.dataporten-oidc]  # The name after the dot is used in the URLs\n# name = \"Feide OIDC\"  # Shown in login screen\n# client_id = \"not.optional\"\n# secret = \"not.optional\"\n# server_url = \"https://auth.dataporten.no/\"  # NEVER optional\n# Feide OIDC does not support the standard OIDC scopes/claims\n# scope = [\"userid-feide\"]\n\n# [oidc.dataporten-oidc.settings]\n# uid_field = \"https://n.feide.no/claims/eduPersonPrincipalName\"\n"
  },
  {
    "path": "python/nav/etc/webfront/contact-information.txt",
    "content": "<h4 class=\"subheader\">Your info</h4>\n\n<p>Add your organization's contact information.</p>\n<p>Your NAV administrator: <a href=\"mailto:root@localhost\">root@localhost</a></p>\n"
  },
  {
    "path": "python/nav/etc/webfront/jwt.conf",
    "content": "# This file contains configuration for JWT tokens.\n# This includes tokens generated by NAV itself and external issuers.\n\n# The settings in the `nav` section are for tokens issued by NAV itself.\n# Comment this in and fill out the values if you want to activate local JWT tokens.\n# The section name should NOT be changed.\n# Token lifetime can be defined with either seconds (s), minutes (m), hours (h)\n# or days (d).\n# The default lifetime is 1 hour for access tokens and 1 day for refresh tokens.\n\n#[nav]\n# Absolute path to private key in PEM format\n#private_key=\n# Absolute path to public key in PEM format.\n#public_key=\n# Used for the 'iss' and 'aud' claims of generated tokens.\n#name=\n#access_token_lifetime=1h\n#refresh_token_lifetime=1d\n\n# Custom JWT issuers can be defined in a section. The name of the section should be\n# the issuers name, the same value as the 'iss' claim will be in tokens\n# generated by this issuer. This value is often a URL, but does not\n# have to be.\n\n# Each section must contain an _aud_ option. NAV will only accept\n# tokens from this issuer where the 'aud' claim matches the value of _aud_.\n\n# The _keytype_ option defines what kind of key the _key_ option contains.\n# The value can be either JWKS or PEM.\n\n# The _key_ option contains the key matching the _keytype_ option.\n# If _keytype_ is JWKS, then _key_ must contain a URL to an endpoint\n# exposing a JWKS object. If _keytype_ is PEM, then _key_ must contain\n# a path to a file that contains a public key in PEM format.\n\n# Example 1 (Issuer with _keytype_ JWKS)\n\n# [https://issuer-with-url-name.no]\n# aud=nav-instance-url\n# keytype=JWKS\n# key=https://some-url/jwks\n\n# Example 2 (Issuer with _keytype_ PEM)\n\n# [issuer-with-simpler-name]\n# aud=nav-instance-url\n# keytype=PEM\n# key=/some/path/public_key.pem\n"
  },
  {
    "path": "python/nav/etc/webfront/nav-links.conf",
    "content": "Documentation = /doc/\nStatistics = /stats/\nMachine Tracker = /machinetracker/\nAbout NAV = /about/\nReports = /report/\n"
  },
  {
    "path": "python/nav/etc/webfront/webfront.conf",
    "content": "#\n# Configuration file for the NAV web frontend\n#\n[sessions]\n# The maximum amount of seconds of inactivity before a session expires\ntimeout = 3600\n\n\n#\n# Configuration items for the toolbox\n#\n[toolbox]\n# This sets the search path for tool plugin description files.\n#path = /some/explicit/location:/or/even/multiple/locations\n\n#\n# Configuration items for ldap authentication\n#\n[ldap]\nenabled = no\nserver = ldap.example.com\n\n# Which port to connect to.  Standard LDAP port is 389, used for both\n# non-encrypted and TLS-encrypted sessions.  Standard port for SSL\n# (ldaps) encrypted sessions is 636.\n#\n#port = 389\n\n# Specify which type of encryption to employ when talking to the LDAP\n# server.  Valid alternatives are \"tls\", \"ssl\" or \"none\".\n#\n#encryption = none\n\n# What object attribute refers to the user id (login name)\n#\n#uid_attr = uid\n\n# What object attribute stores the full user name\n#\n#name_attr = cn\n\n# The base DN (Distinguished Name) of the LDAP directory's user\n# objects.\n#\nbasedn = ou=people,dc=example,dc=com\n\n# How to lookup a user object from LDAP.\n# 'direct' binds to <uid_attr>=<login name>,<user_basedn>\n# 'search' searches for <uid_attr>=<login name> using basedn as searchbase.\n#lookupmethod=direct\n\n# Choose to bind to LDAP as the user with 'suffix' for Active Directory support.\n# lookupmethod should be set to search for this option to function.\n#suffix = @ad.example.com\n\n# If the LDAP directory requires an authenticated user to search for a user\n# object, authenticate as the following user.\n#manager=\n#manager_password=\n\n# Require users to be members of this group to allow logging into NAV.\n# If not set, group membership will not be required.  This object's\n# class should be either groupOfNames, groupOfUniqueNames or\n# posixGroup.\n#\n# NAV will first attempt to match the object's member attribute\n# against the full DN of the user. If no match is made, it will try to\n# match the user's login name (uid) against the memberUid attribute.\n#\n#require_group = cn=noc-operators,cn=groups,dc=example,dc=com\n\n# The search filter to use when verifying group memberships (for non-POSIX\n# groups). The string %%s will be substituted for the authenticating user's\n# distinguished name.\n#\n# The default value is fine for most purposes. AD will support a\n# recursive group search operator, so that nested group memberships are\n# allowed. Use a value of (member:1.2.840.113556.1.4.1941:=%%s) to enable\n# this AD extension\n#\n#group_search = (member=%%s)\n\n# If set, requires user objects to have a specific entitlement value before\n# allowing a NAV login\n#require_entitlement=\n\n# Give Administrator privileges to any user with this entitlement value. If set,\n# will also remove admin privileges from a user that lacks the entitlement, as\n# that user logs in.\n#admin_entitlement=\n\n# Set the specific user object attribute to use when looking for entitlements.\n#entitlement_attribute=eduPersonEntitlement\n\n# Which character encoding to use when talking to the LDAP server\n#encoding=utf-8\n\n# Whether the underlying LDAP library should output debug information to\n# stderr.  If enabled, you will typically find this output in the Apache error\n# log.\n#debug = no\n\n# Should it be possible to log in with the username  set in a request header\n# (usually REMOTE_USER)?\n[remote-user]\n# Whether REMOTE_USER authentication should be enabled\nenabled = no\n\n# Which header/environment variable will contain the username of the remotely\n# authenticated user?\n#varname = REMOTE_USER\n\n# Whether a username set in REMOTE_USER should lead to the automatic creation\n# of a user in the database if the user does not already exist.\n# autocreate = off\n\n# If the supplied remote username value needs modification to become more\n# \"username-like\", specify which workaround to use here. Only `feide-oidc` is\n# supported, at the moment.\n#workaround=none\n\n# These variables can be used to control which URLs NAV will redirect the user\n# to when login or logout is requested. The string `{}` acts as a placeholder,\n# where NAV will insert the URL the external idP should return the client to\n# when login/logout is done. Changing *logout-url* changes what the\n# Logout-button in the webpage header points to.\n#login-url=https://sso.example.org/login/?nexthop={}\n#logout-url=https://sso.example.org/logout/?nexthop={}\n\n# Some remote user systems need to be visited *after* NAV has logged the user\n# out. The default/unset value is \"/\"\n#post-logout-redirect-url=/magic/logout?nexthop=/\n\n[security]\n# Whether NAV must be run under TLS or not. Toggling this to `yes` toggles web\n# security features that are only available with TLS/SSL enabled. In\n# development mode this defaults to `no`.\n# needs_tls = no\n\n#\n# Configuration items for QR codes in NAV\n#\n[qr_codes]\n# Whether to produce QR codes as SVG or PNG files\nfile_format = png\n"
  },
  {
    "path": "python/nav/etc/webfront/welcome-anonymous.txt",
    "content": "<p>This is where you can put a welcome message and some information\nabout your NAV installation for anonymous users.</p>\n\n<a href=\"https://nav.uninett.no/wiki/user_guide\">See how to do that</a>\n"
  },
  {
    "path": "python/nav/etc/webfront/welcome-registered.txt",
    "content": "<p>This is where you can put a welcome message and some information\nabout your NAV installation for registered users.</p>\n\n<p>\n    <a href=\"https://nav.uninett.no/wiki/user_guide\">See how to do that</a>\n</p>\n"
  },
  {
    "path": "python/nav/event.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Simple API to interface with NAVs event queue.\"\"\"\n\nfrom django.db import transaction\n\nimport nav.db\nfrom nav.errors import GeneralException\n\nfrom nav.models.event import EventType, AlertType\n\nDEFAULT_SEVERITY = 3\n\n\nclass Event(dict):\n    \"\"\"Represents a single event on or off the queue.\n\n    Use like a dictionary to manipulate event variables (in eventqvar).\n    Otherwise, this is just a dumb storage class (any database activity\n    performed by this class is done using the EventQ class as proxy)\n    \"\"\"\n\n    def __init__(\n        self,\n        source=None,\n        target=None,\n        deviceid=None,\n        netboxid=None,\n        subid=None,\n        time=None,\n        eventtypeid=None,\n        state=None,\n        value=None,\n        severity=DEFAULT_SEVERITY,\n    ):\n        super(Event, self).__init__()\n        self.eventqid = None\n\n        self.source = source\n        self.target = target\n        self.deviceid = deviceid\n        self.netboxid = netboxid\n        self.subid = subid\n        self.time = time\n        self.eventtypeid = eventtypeid\n        self.state = state\n        self.value = value\n        self.severity = severity\n\n    def __repr__(self):\n        attr_list = [\n            \"%s=%s\" % (attr, getattr(self, attr))\n            for attr in (\n                'eventqid',\n                'source',\n                'target',\n                'deviceid',\n                'netboxid',\n                'subid',\n                'time',\n                'eventtypeid',\n                'state',\n                'value',\n                'severity',\n            )\n            if getattr(self, attr)\n        ]\n        attr_list = \", \".join(attr_list)\n        return \"<Event %s / %s>\" % (attr_list, super(Event, self).__repr__())\n\n    def post(self):\n        \"\"\"Post this event to the eventq\"\"\"\n        return EventQ.post_event(self)\n\n    def delete(self):\n        \"\"\"Delete this event from the event queue\n\n        This should normally only be done when an event has been consumed and\n        processed by its target.\n        \"\"\"\n        if not self.eventqid:\n            raise EventNotPostedError(\n                \"source=%s, target=%s, type=%s\"\n                % (self.source, self.target, self.eventtypeid)\n            )\n        else:\n            result = EventQ.delete_event(self.eventqid)\n            self.eventqid = None\n            return result\n\n    # Alias the delete member function as dispose\n    dispose = delete\n\n\nclass EventQ(object):\n    \"\"\"Static class to manipulate the event queue\"\"\"\n\n    @classmethod\n    def _get_connection(cls):\n        conn = nav.db.getConnection('default', 'manage')\n        # Make sure the connection doesn't autocommit: Posting an event\n        # consists of several SQL statements that should go into a single\n        # transaction.\n        conn.set_isolation_level(1)\n        return conn\n\n    @classmethod\n    def allocate_id(cls):\n        sql = \"SELECT NEXTVAL('eventq_eventqid_seq')\"\n        conn = cls._get_connection()\n        cursor = conn.cursor()\n        cursor.execute(sql)\n        if cursor.rowcount > 0:\n            return cursor.fetchone()[0]\n        else:\n            raise EventIdAllocationError\n\n    @classmethod\n    def post_event(cls, event):\n        if event.eventqid:\n            raise EventAlreadyPostedError(event.eventqid)\n\n        # First post the relevant fields to eventq\n        fields = []\n        values = []\n        for attr in (\n            'source',\n            'target',\n            'deviceid',\n            'netboxid',\n            'subid',\n            'time',\n            'eventtypeid',\n            'state',\n            'value',\n            'severity',\n        ):\n            if getattr(event, attr, None):\n                fields.append(attr)\n                values.append(getattr(event, attr))\n        if not fields:\n            raise EventIncompleteError\n        field_string = ','.join(fields)\n        placeholders = ', %s' * len(values)\n        eventsql = (\n            \"INSERT INTO eventq (eventqid, \" + field_string + \") \"\n            \"VALUES (%s\" + placeholders + \")\"\n        )\n        eventqid = cls.allocate_id()\n        conn = cls._get_connection()\n        cursor = conn.cursor()\n        cursor.execute(eventsql, (eventqid,) + tuple(values))\n\n        # Prepare an SQL statement to post the variables, if any\n        if event:\n            varsql = \"INSERT INTO eventqvar (eventqid, var, val)VALUES (%s, %s, %s)\"\n            values = [(eventqid,) + i for i in event.items()]\n            cursor.executemany(varsql, values)\n\n        # If we got this far, commit the transaction and update the event\n        # object with the allocated id\n\n        conn.commit()\n        event.eventqid = eventqid\n        return cursor.statusmessage\n\n    @classmethod\n    def consume_events(cls, target):\n        \"\"\"Consume and return a list of Event objects queued for this target.\n\n        Events that are processed should be deleted from the queue afterwards.\n        \"\"\"\n        eventsql = \"\"\"SELECT eventqid, source, target, deviceid, netboxid,\n                             subid, time, eventtypeid, state, value, severity\n                      FROM eventq\n                      WHERE target = %s\"\"\"\n        conn = cls._get_connection()\n        conn.commit()\n        cursor = conn.cursor()\n\n        def load_vars(event):\n            varsql = \"SELECT var, val FROM eventqvar WHERE eventqid=%s\"\n            curs = conn.cursor()\n            curs.execute(varsql, (event.eventqid,))\n            if curs.rowcount > 0:\n                for var, val in curs.fetchmany():\n                    event[var] = val\n\n        events = []\n        cursor.execute(eventsql, (target,))\n        if cursor.rowcount > 0:\n            for event_row in cursor.fetchall():\n                event = Event()\n                (\n                    event.eventqid,\n                    event.source,\n                    event.target,\n                    event.deviceid,\n                    event.netboxid,\n                    event.subid,\n                    event.time,\n                    event.eventtypeid,\n                    event.state,\n                    event.value,\n                    event.severity,\n                ) = event_row\n                load_vars(event)\n                events.append(event)\n        return events\n\n    @classmethod\n    def delete_event(cls, eventqid):\n        \"\"\"Delete the event with the specified id from the queue.\n\n        This should normally only be done when an event has been consumed and\n        processed by its target.\n        \"\"\"\n        sql = \"DELETE FROM eventq WHERE eventqid = %s\"\n        conn = cls._get_connection()\n        cursor = conn.cursor()\n        cursor.execute(sql, (eventqid,))\n        conn.commit()\n        return cursor.statusmessage\n\n\nclass EventIdAllocationError(GeneralException):\n    \"\"\"Error allocating a new event ID from the queue\"\"\"\n\n    pass\n\n\nclass EventAlreadyPostedError(GeneralException):\n    \"\"\"Event was already posted\"\"\"\n\n    pass\n\n\nclass EventIncompleteError(GeneralException):\n    \"\"\"Incomplete event cannot be posted\"\"\"\n\n    pass\n\n\nclass EventNotPostedError(GeneralException):\n    \"\"\"Cannot perform this operation on an unposted event\"\"\"\n\n    pass\n\n\n@transaction.atomic\ndef create_type_hierarchy(hierarchy):\n    \"\"\"Create an event/alert type hierarchy in the database.\n\n    If the hierarchy already exists, nothing is done.\n\n    hierarchy -- A structure like this:\n      { (event_type_name, description, stateful) :\n        [(alert_type_name, description), ...]\n      }\n\n    Returns: The number of objects created.  A return value of 0\n    indicates that all the objects already exist.\n\n    This function uses the Django ORM for database access, thus it is\n    not async-safe.\n\n    Usage example:\n\n    >>> h = {('apState', 'Access point assocation/disassociation events', True):\n    ...      [('apUp', 'AP associated with controller'),\n    ...       ('apDown', 'AP disassociated from controller'),\n    ...      ]}\n    >>> create_type_hierarchy(h)\n    3\n    >>>\n\n    \"\"\"\n    created_count = 0\n\n    for event_type, alert_types in hierarchy.items():\n        event_type_name, event_descr, stateful = event_type\n        if stateful not in ('y', 'n'):\n            # Parse the stateful var as a boolean\n            stateful = 'y' if stateful else 'n'\n\n        try:\n            etype = EventType.objects.get(id=event_type_name)\n        except EventType.DoesNotExist:\n            etype = EventType(\n                id=event_type_name, description=event_descr, stateful=stateful\n            )\n            etype.save()\n            created_count += 1\n\n        for alert_type_name, alert_descr in alert_types:\n            atype, created = AlertType.objects.get_or_create(\n                name=alert_type_name, event_type=etype\n            )\n            if created:\n                atype.description = alert_descr\n                atype.save()\n                created_count += 1\n\n    return created_count\n"
  },
  {
    "path": "python/nav/event2.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nNext generation event factory functionality for NAV, based on the Django ORM\nmodels from nav.models.event.\n\"\"\"\n\nfrom nav.models.event import EventQueue\n\n\nclass EventFactory(object):\n    \"\"\"A factory for NAV event dispatching\"\"\"\n\n    def __init__(self, source, target, event_type, start_type=None, end_type=None):\n        \"\"\"\n        Initialize a template for event generation.\n\n        :param source: An event source string (e.g. 'ipdevpoll')\n        :param target: An event target string (e.g. 'eventEngine')\n        :param event_type: An event type name.\n        :param start_type: An optional start alert type hint for eventengine\n        :param end_type: An optional end alert type hint for eventengine\n        \"\"\"\n        self.source = source\n        self.target = target\n        self.event_type = event_type\n        self.start_type = start_type\n        self.end_type = end_type\n\n    def base(self, device=None, netbox=None, subid='', varmap=None, alert_type=None):\n        \"\"\"Creates and returns an event base template\n\n        :param device: A nav.models.manage.Device object or primary key.\n        :param netbox: A nav.models.manage.Netbox object or primary key.\n        :param subid: A subid string, if applicable.\n        :param varmap: A dictionary of arbitrary event variables to attach.\n        :param alert_type: An option alert type hint for eventEngine; useful\n                           for cases where eventEngine has no specific plugin.\n        :return:\n        \"\"\"\n        event = EventQueue()\n        event.source_id = self.source\n        event.target_id = self.target\n        event.event_type_id = self.event_type\n\n        if isinstance(device, int):\n            event.device_id = device\n        else:\n            event.device = device\n\n        if isinstance(netbox, int):\n            event.netbox_id = netbox\n        else:\n            event.netbox = netbox\n\n        event.subid = str(subid)\n\n        var = dict(varmap or {})\n        if alert_type:\n            var['alerttype'] = alert_type\n        event.varmap = var\n\n        return event\n\n    def start(self, device=None, netbox=None, subid='', varmap=None, alert_type=None):\n        \"\"\"Creates and returns a start event\"\"\"\n        event = self.base(device, netbox, subid, varmap, alert_type or self.start_type)\n        event.state = event.STATE_START\n        return event\n\n    def end(self, device=None, netbox=None, subid='', varmap=None, alert_type=None):\n        \"\"\"Creates and returns an end event\"\"\"\n        event = self.base(device, netbox, subid, varmap, alert_type or self.end_type)\n        event.state = event.STATE_END\n        return event\n\n    def notify(self, device=None, netbox=None, subid='', varmap=None, alert_type=None):\n        \"\"\"Creates and returns a stateless event\"\"\"\n        event = self.base(device, netbox, subid, varmap, alert_type or self.start_type)\n        event.state = event.STATE_STATELESS\n        return event\n"
  },
  {
    "path": "python/nav/eventengine/__init__.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV eventengine\"\"\"\n\nfrom subprocess import STDOUT, check_output, TimeoutExpired, CalledProcessError\n\n\ndef get_eventengine_output(timeout=10):\n    \"\"\"\n    Runs eventengine in foreground mode, kills it after timeout seconds and\n    returns the combined stdout+stderr output from the process.\n    Also asserts that pping shouldn't unexpectedly exit with a zero exitcode.\n    \"\"\"\n    cmd = [\"eventengine\", \"-f\"]\n    try:\n        output = check_output(cmd, stderr=STDOUT, timeout=timeout)\n    except TimeoutExpired as error:\n        # this is the normal case, since we need to kill eventengine after the timeout\n        print(error.output.decode(\"utf-8\"))\n        return error.output.decode(\"utf-8\")\n    except CalledProcessError as error:\n        print(error.output.decode(\"utf-8\"))\n        raise\n    else:\n        print(output)\n        assert False, \"eventengine exited with non-zero status\"\n"
  },
  {
    "path": "python/nav/eventengine/alerts.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert generator functionality for the eventEngine\"\"\"\n\nfrom collections import namedtuple\nimport logging\nimport os\nfrom pprint import pformat\nimport re\n\nfrom django.template import loader\n\nfrom nav.models.event import AlertQueue as Alert, EventQueue as Event, AlertType\nfrom nav.models.event import AlertHistory\nfrom nav.models.fields import INFINITY\n\nimport nav.config\nfrom . import unresolved\nfrom . import export\nfrom . import severity\n\nALERT_TEMPLATE_DIR = nav.config.find_config_file('alertmsg')\n_logger = logging.getLogger(__name__)\n_template_logger = logging.getLogger(__name__ + '.template')\n\n\nclass AlertGenerator(dict):\n    severity_rules: severity.SeverityRules = None\n\n    def __init__(self, event):\n        super(AlertGenerator, self).__init__()\n        self.event = event\n\n        self.source = event.source\n        self.device = event.device\n        self.netbox = event.netbox\n        self.subid = event.subid\n        self.time = event.time\n        self.event_type = event.event_type\n        self.state = event.state\n        self.value = event.value\n        self.severity = event.severity\n\n        self.update(event.varmap)\n        self.history_vars = {}\n\n        if 'alerttype' in self:\n            self.alert_type = self['alerttype']\n            del self['alerttype']\n        else:\n            self.alert_type = None\n\n        self._messages = None\n\n    def __repr__(self):\n        dictrepr = super(AlertGenerator, self).__repr__()\n        attribs = [\n            \"{0}={1!r}\".format(key, value)\n            for key, value in vars(self).items()\n            if not key.startswith('_') and key != 'event'\n        ]\n        return \"<AlertGenerator: {0} varmap={1}>\".format(\" \".join(attribs), dictrepr)\n\n    def __bool__(self):\n        \"\"\"AlertGenerator inherits from dict, but must always be\n        considered True\n\n        \"\"\"\n        return True\n\n    def make_alert(self):\n        \"\"\"Generates an alert object based on the current attributes\"\"\"\n        attrs = {}\n        if self.severity_rules:\n            self.severity = self.severity_rules.evaluate(self)\n        for attr in (\n            'source',\n            'device',\n            'netbox',\n            'subid',\n            'time',\n            'event_type',\n            'state',\n            'value',\n            'severity',\n        ):\n            attrs[attr] = getattr(self, attr)\n        alert = Alert(**attrs)\n        alert.alert_type = self.get_alert_type()\n        alert.varmap = self\n        return alert\n\n    def make_alert_history(self):\n        \"\"\"Generates an alert history object based on the current attributes\"\"\"\n        if self.state == Event.STATE_END:\n            return self._resolve_alert_history()\n\n        attrs = dict(\n            start_time=self.time,\n            end_time=INFINITY if self.state == Event.STATE_START else None,\n        )\n        if self.severity_rules:\n            self.severity = self.severity_rules.evaluate(self)\n        for attr in (\n            'source',\n            'device',\n            'netbox',\n            'subid',\n            'event_type',\n            'value',\n            'severity',\n        ):\n            attrs[attr] = getattr(self, attr)\n        alert = AlertHistory(**attrs)\n        alert.alert_type = self.get_alert_type()\n        self._update_history_vars(alert)\n        return alert\n\n    def _resolve_alert_history(self):\n        alert = self._find_existing_alert_history()\n        if alert:\n            alert.end_time = self.event.time\n            self._update_history_vars(alert)\n        return alert\n\n    def _update_history_vars(self, alert):\n        if self.history_vars:\n            vars = alert.varmap\n            vars[self.state] = self.history_vars\n            alert.varmap = vars\n\n    def _find_existing_alert_history(self):\n        return unresolved.refers_to_unresolved_alert(self.event) or None\n\n    def post(self, post_alert=True, set_state=True):\n        \"\"\"Generates and posts the necessary alert objects to the database,\n        and exports the alert to an external script if configured.\n\n        :param post_alert: If True, an AlertQueue entry is posted.\n\n        :param set_state: If True, a new AlertHistory (state) entry is posted,\n                          or an existing one is updated/resolved. If False, no\n                          AlertHistory objects are created or updated. If this is an\n                          actual AlertHistory instance and _post_alert is True, the\n                          posted alert will reference this AlertHistory record.\n        \"\"\"\n        if isinstance(set_state, AlertHistory):\n            history = set_state\n        else:\n            history = self._post_alert_history() if set_state else None\n        alert = self._post_alert(history) if post_alert else None\n        if export.exporter:\n            if not alert:\n                alert = self.make_alert()\n                alert.history = history\n            try:\n                export.exporter.export(alert)\n            except Exception:  # noqa: BLE001\n                # we don't want to derail everything internally if external export fails\n                _logger.exception(\"Ignoring unhandled exception on alert export\")\n\n    def _post_alert(self, history=None):\n        \"\"\"Generates and posts an alert on the alert queue only\"\"\"\n        _logger.debug(\"posting to alert queue for %r\", self)\n        alert = self.make_alert()\n        alert.history = history\n        alert.save()\n        self._post_alert_messages(alert)\n        return alert\n\n    def _post_alert_history(self):\n        \"\"\"Generates and posts an alert history record only\"\"\"\n        _logger.debug(\"posting to alert history for %r\", self)\n        history = self.make_alert_history()\n        if history:\n            history.save()\n            self._post_alert_messages(history)\n        return history\n\n    def _post_alert_messages(self, obj):\n        msg_class = obj.messages.model\n        for details, text in self._make_messages():\n            kwargs = {\"type\": details.msgtype, \"language\": details.language}\n            if hasattr(msg_class, \"alert_queue\"):\n                kwargs[\"alert_queue\"] = obj\n            elif hasattr(msg_class, \"alert_history\"):\n                kwargs[\"alert_history\"] = obj\n                kwargs[\"state\"] = self.state\n\n            msg, _created = msg_class.objects.get_or_create(\n                **kwargs,\n                defaults={\"message\": text},\n            )\n            msg.save()\n\n    def _make_messages(self):\n        if self._messages is None:\n            self._messages = render_templates(self)\n        return self._messages\n\n    def is_event_duplicate(self):\n        \"\"\"Returns True if the represented event seems to duplicate an\n        existing unresolved alert.\n\n        \"\"\"\n        return (\n            self.event.state == Event.STATE_START\n            and unresolved.refers_to_unresolved_alert(self.event)\n        )\n\n    def get_alert_type(self):\n        if not self.alert_type:\n            return\n\n        try:\n            return AlertType.objects.get(name=self.alert_type)\n        except AlertType.DoesNotExist:\n            return\n\n\n###\n### Alert message template processing\n###\n\nTEMPLATE_PATTERN = re.compile(\n    r\"^(?P<alert_type>\\w+)-\" r\"(?P<msgtype>\\w+)\" r\"(\\.(?P<language>\\w+))?\" r\"\\.txt$\"\n)\n\nDEFAULT_LANGUAGE = \"en\"\n\n\ndef ensure_alert_templates_are_available():\n    \"\"\"Inserts the ALERT_TEMPLATE_DIR into Django's TEMPLATE_DIRS list\"\"\"\n    from django.conf import settings\n\n    for config in settings.TEMPLATES:\n        if (\n            config.get('BACKEND') == 'django.template.backends.django.DjangoTemplates'\n            and ALERT_TEMPLATE_DIR not in config['DIRS']\n        ):\n            config['DIRS'] += (ALERT_TEMPLATE_DIR,)\n\n\ndef render_templates(alert):\n    \"\"\"Renders and returns message template based on the parameters of `alert`.\n\n    :param alert: An :py:class:AlertGenerator object representing the alert\n    :return: A list of (TemplateDetails, <rendered_unicode>) tuples\n\n    \"\"\"\n    ensure_alert_templates_are_available()\n    templates = get_list_of_templates_for(\n        alert.event_type.id, alert.alert_type\n    ) or get_list_of_templates_for(alert.event_type.id)\n    if not templates:\n        _logger.error(\n            \"no templates defined for %r, sending generic alert message\", alert\n        )\n        templates = [\n            TemplateDetails(\"default-email.txt\", \"email\", DEFAULT_LANGUAGE),\n            TemplateDetails(\"default-sms.txt\", \"sms\", DEFAULT_LANGUAGE),\n        ]\n\n    return [_render_template(template, alert) for template in templates]\n\n\ndef _render_template(details, alert):\n    template = loader.get_template(details.name)\n    context = dict(alert)\n    context.update(vars(alert))\n    context.update(dict(msgtype=details.msgtype, language=details.language))\n    context.update(dict(context_dump=pformat(context)))\n\n    _template_logger.debug(\n        \"rendering alert template with context:\\n%s\", context['context_dump']\n    )\n    output = template.render(context).strip()\n    _template_logger.debug(\"rendered as:\\n%s\", output)\n    return details, output\n\n\ndef get_list_of_templates_for(event_type, alert_type=\"default\"):\n    \"\"\"Returns a list of TemplateDetails objects for the available alert\n    message templates for the given event_type and alert_type.\n\n    \"\"\"\n\n    def _matcher(name):\n        match = TEMPLATE_PATTERN.search(name)\n        if match and match.group('alert_type') == alert_type:\n            return match\n\n    directory = os.path.join(ALERT_TEMPLATE_DIR, event_type)\n    if os.path.isdir(directory):\n        matches = [\n            (_matcher(name), os.path.join(event_type, name))\n            for name in os.listdir(directory)\n        ]\n    else:\n        matches = []\n    return [\n        TemplateDetails(\n            name, match.group('msgtype'), match.group('language') or DEFAULT_LANGUAGE\n        )\n        for match, name in matches\n        if match\n    ]\n\n\nTemplateDetails = namedtuple(\"TemplateDetails\", \"name msgtype language\")\n"
  },
  {
    "path": "python/nav/eventengine/config.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"eventengine config\"\"\"\n\nfrom configparser import NoSectionError, NoOptionError\n\nfrom nav.config import NAVConfigParser\nfrom nav.util import parse_interval\n\n\nclass EventEngineConfig(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = ('eventengine.conf',)\n    DEFAULT_CONFIG = \"\"\"\n[timeouts]\nboxDown.warning = 1m\nboxDown.alert = 4m\n\nmoduleDown.warning = 1m\nmoduleDown.alert = 4m\n\nlinkDown.alert = 4m\n\nsnmpAgentDown.alert = 4m\n\nbgpDown.alert = 1m\n\"\"\"\n\n    def get_timeout_for(self, option):\n        \"\"\"Gets an integer timeout value from option in the timeouts section.\n\n        :param option: An option name in the timeouts section, or an integer.\n        :return: An integer number of seconds parsed from option. If the\n                 option is not present, None is returned.  If option itself is\n                 an int, option is returned unchanged.\n\n        \"\"\"\n        if isinstance(option, int):\n            return option\n        try:\n            return parse_interval(self.get('timeouts', option))\n        except (NoSectionError, NoOptionError):\n            pass\n\n    def get_timeouts_for(self, *options):\n        \"\"\"Gets timeouts using get_timeout_for for multiple options\"\"\"\n        return [self.get_timeout_for(opt) for opt in options]\n\n\nEVENTENGINE_CONF = EventEngineConfig()\n"
  },
  {
    "path": "python/nav/eventengine/daemon.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"eventengine daemon interface\"\n\nimport sys\nimport os\nimport logging\nfrom optparse import OptionParser\nimport signal\n\nfrom nav import buildconf\nimport nav.daemon\nfrom nav.eventengine.engine import EventEngine\nimport nav.logs\nfrom nav.config import NAV_CONFIG\n\nPIDFILE = 'eventengine.pid'\nLOGFILE = os.path.join(NAV_CONFIG['LOG_DIR'], 'eventengine.log')\n_logger = logging.getLogger(__name__)\n\n\ndef main():\n    \"main execution entry\"\n    options, _args = parse_options()\n    nav.logs.init_stderr_logging()\n    exit_if_already_running()\n    if not options.foreground:\n        daemonize()\n    else:\n        nav.daemon.writepidfile(PIDFILE)\n    start_engine()\n\n\ndef parse_options():\n    \"Parses the program's command line options\"\n    parser = make_option_parser()\n    options, args = parser.parse_args()\n    return options, args\n\n\ndef make_option_parser():\n    \"Makes an OptionParser instance for the program\"\n    parser = OptionParser(\n        version=\"NAV \" + buildconf.VERSION,\n        epilog=(\n            \"This program monitors NAV's event queue and decides which \"\n            \"actions to take when events occur\"\n        ),\n    )\n    opt = parser.add_option\n    opt(\n        \"-f\",\n        \"--foreground\",\n        action=\"store_true\",\n        dest=\"foreground\",\n        help=\"run in foreground instead of daemonizing\",\n    )\n\n    return parser\n\n\ndef exit_if_already_running():\n    \"Exits the process if another eventengine process is already running\"\n    try:\n        nav.daemon.justme(PIDFILE)\n    except nav.daemon.DaemonError as error:\n        _logger.error(error)\n        sys.exit(1)\n\n\ndef daemonize():\n    \"Daemonizes the program\"\n    try:\n        nav.daemon.daemonize(PIDFILE, stderr=open(LOGFILE, \"a\"))\n    except nav.daemon.DaemonError as error:\n        _logger.fatal(error)\n        sys.exit(1)\n    install_signal_handlers()\n\n\ndef install_signal_handlers():\n    \"\"\"Installs signal handlers\"\"\"\n    signal.signal(signal.SIGTERM, sigterm_handler)\n    signal.signal(signal.SIGHUP, sighup_handler)\n\n\ndef sigterm_handler(signum, _frame):\n    \"\"\"Logs the imminent shutdown\"\"\"\n    _logger.info(\n        \"--- %s received: shutting down eventengine ---\", nav.daemon.signame(signum)\n    )\n    sys.exit(0)\n\n\ndef sighup_handler(_signum, _frame):\n    \"\"\"Reopens log files.\"\"\"\n    _logger.info(\"SIGHUP received; reopening log files\")\n    nav.logs.reopen_log_files()\n    nav.daemon.redirect_std_fds(stderr=open(LOGFILE, \"a\"))\n    nav.logs.reset_log_levels()\n    nav.logs.set_log_config()\n    _logger.info(\"Log files reopened, log levels reloaded.\")\n\n\ndef start_engine():\n    \"Starts event queue processing\"\n    engine = EventEngine()\n    engine.start()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/eventengine/engine.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"The actual \"engine\" part of the NAV eventEngine\n\nWill check the eventq ever so often, but will also react to notifications from\nPostgreSQL. To add notification of new events posted to eventq, the following\nSQL is needed::\n\n    CREATE RULE eventq_notify AS ON INSERT TO eventq DO ALSO NOTIFY new_event;\n\n\"\"\"\n\nimport logging\nimport sched\nimport select\nimport time\nfrom functools import wraps\nimport errno\n\nfrom psycopg2 import OperationalError\nfrom django.db import connection, DatabaseError, transaction\n\nfrom nav.eventengine import export\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.config import EVENTENGINE_CONF\nfrom nav.eventengine import unresolved\nfrom nav.eventengine.severity import SeverityRules\nfrom nav.models.event import EventQueue as Event\nimport nav.db\n\n_logger = logging.getLogger(__name__)\n\n\ndef harakiri():\n    \"\"\"Kills the entire daemon when no database is available\"\"\"\n    _logger.fatal(\"unable to establish database connection, qutting...\")\n    raise SystemExit(1)\n\n\ndef retry_on_db_loss():\n    \"\"\"Returns a nav.db.retry_on_db_loss decorator with eventengine's default\n    parameters.\n    \"\"\"\n    return nav.db.retry_on_db_loss(\n        count=3, delay=5, fallback=harakiri, also_handled=(DatabaseError,)\n    )\n\n\ndef swallow_unhandled_exceptions(func):\n    \"\"\"Decorates a function to log and ignore any exceptions thrown by it\n    :param func: The function to decorate\n    :return: A decorated version of func\n\n    \"\"\"\n\n    @wraps(func)\n    def _decorated(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except Exception:  # noqa: BLE001\n            _logger.exception(\"Unhandled exception occurred; ignoring it\")\n\n    return _decorated\n\n\nclass EventEngine(object):\n    \"\"\"Event processing engine.\n\n    Only one instance of this class should ever be needed.\n\n    \"\"\"\n\n    # interval for regularly scheduled queue checks. these don't need to be\n    # too often, since we rely on PostgreSQL notification when new events are\n    # inserted into the queue.\n    CHECK_INTERVAL = 30\n    PLUGIN_TASKS_PRIORITY = 1\n    _logger = logging.getLogger(__name__)\n\n    def __init__(self, target=\"eventEngine\", config=EVENTENGINE_CONF):\n        self._scheduler = sched.scheduler(time.time, self._notifysleep)\n        self._unfinished = set()\n        self.target = target\n        self.config = config\n        self.handlers = EventHandler.load_and_find_subclasses()\n        self._logger.debug(\n            \"found %d event handler%s: %r\",\n            len(self.handlers),\n            's' if len(self.handlers) > 1 else '',\n            self.handlers,\n        )\n\n    def _notifysleep(self, delay):\n        \"\"\"Sleeps up to delay number of seconds, but will schedule an\n        immediate new event queue check if an event notification is received\n        from PostgreSQL.\n\n        \"\"\"\n        conn = connection.connection\n        if conn:\n            self._logger.debug(\"select sleep for %ss\", delay)\n            try:\n                select.select([conn], [], [], delay)\n            except select.error as err:\n                if err.args[0] != errno.EINTR:\n                    raise\n            try:\n                conn.poll()\n            except OperationalError:\n                connection.connection = None\n                self._listen()\n                return\n            if conn.notifies:\n                self._logger.debug(\"got event notification from database\")\n                self._schedule_next_queuecheck()\n                del conn.notifies[:]\n        else:\n            self._logger.debug(\"regular sleep for %ss\", delay)\n            time.sleep(delay)\n\n    def start(self):\n        \"Starts the event engine\"\n        self._logger.info(\"--- starting event engine ---\")\n        self._load_severity_rules()\n        self._start_export_script()\n        self._listen()\n        self._load_new_events_and_reschedule()\n        self._scheduler.run()\n        self._logger.debug(\"scheduler exited\")\n\n    @staticmethod\n    def _load_severity_rules():\n        # Imbues the AlertGenerator class with user-defined severity rules\n        AlertGenerator.severity_rules = SeverityRules.load_from_file()\n\n    def _start_export_script(self):\n        if self.config.has_option(\"export\", \"script\"):\n            script = self.config.get(\"export\", \"script\")\n            self._logger.info(\"Starting export script: %r\", script)\n            try:\n                export.exporter = export.StreamExporter(script)\n            except OSError as error:\n                self._logger.error(\"Cannot start export script: %s\", error)\n        else:\n            export.exporter = None\n\n    @staticmethod\n    @retry_on_db_loss()\n    @transaction.atomic()\n    def _listen():\n        \"\"\"Ensures that we subscribe to new_event notifications on our\n        PostgreSQL connection.\n\n        \"\"\"\n        _logger.debug(\"registering event listener with PostgreSQL\")\n        cursor = connection.cursor()\n        cursor.execute('LISTEN new_event')\n\n    def _load_new_events_and_reschedule(self):\n        self.load_new_events()\n        self._schedule_next_queuecheck(\n            self.CHECK_INTERVAL, action=self._load_new_events_and_reschedule\n        )\n\n    def _has_overdue_callbacks(self):\n        \"\"\"Checks whether the scheduler has any callbacks that are past due.\"\"\"\n        queue = self._scheduler.queue\n        return bool(queue) and queue[0].time <= time.time()\n\n    def _schedule_next_queuecheck(self, delay=0, action=None):\n        if not action:\n            action = self.load_new_events\n\n        self._scheduler.enter(delay, 0, action, ())\n\n    @swallow_unhandled_exceptions\n    @transaction.atomic()\n    def load_new_events(self):\n        \"Loads and processes new events on the queue, if any\"\n        self._logger.debug(\"checking for new events on queue\")\n        events = Event.objects.filter(target=self.target).order_by('id')\n        if events:\n            old_events = [event for event in events if event.id in self._unfinished]\n            new_events = [event for event in events if event.id not in self._unfinished]\n            self._logger.info(\n                \"found %d new and %d old events in queue db\",\n                len(new_events),\n                len(old_events),\n            )\n            batch_start = time.monotonic()\n            events_processed = 0\n            for event in new_events:\n                handler_start = time.monotonic()\n                unresolved.update()\n                try:\n                    self.handle_event(event)\n                except Exception:  # noqa: BLE001\n                    self._logger.exception(\n                        \"Unhandled exception while handling %s, deleting event\",\n                        event,\n                    )\n                    if event.id:\n                        event.delete()\n                events_processed += 1\n                handler_duration = time.monotonic() - handler_start\n                self._logger.debug(\n                    \"spent %.3fs handling event %s (%s for %s)\",\n                    handler_duration,\n                    event.id,\n                    event.event_type_id,\n                    event.netbox,\n                )\n                if self._has_overdue_callbacks():\n                    self._logger.debug(\n                        \"yielding to overdue scheduler entries after %d of %d events\",\n                        events_processed,\n                        len(new_events),\n                    )\n                    self._schedule_next_queuecheck()\n                    break\n            if events_processed:\n                batch_duration = time.monotonic() - batch_start\n                self._logger.info(\n                    \"processed %d events in %.3fs\",\n                    events_processed,\n                    batch_duration,\n                )\n\n        self._log_task_queue()\n\n    def _log_task_queue(self):\n        _logger = logging.getLogger(__name__ + '.queue')\n        _logger.debug(\"about to log task queue: %d\", len(self._scheduler.queue))\n        if not _logger.isEnabledFor(logging.DEBUG):\n            return\n\n        modified_queue = [\n            e\n            for e in self._scheduler.queue\n            if e.action != self._load_new_events_and_reschedule\n        ]\n        if modified_queue:\n            logtime = time.time()\n            _logger.debug(\"%d tasks in queue at %s\", len(modified_queue), logtime)\n            for event in modified_queue:\n                _logger.debug(\"In %s seconds: %r\", event.time - logtime, event)\n\n    def _post_generic_alert(self, event):\n        alert = AlertGenerator(event)\n        if 'alerttype' in event.varmap:\n            alert.alert_type = event.varmap['alerttype']\n\n        is_stateless = event.state == Event.STATE_STATELESS\n        if is_stateless or not alert.is_event_duplicate():\n            if self._box_is_on_maintenance(event):\n                self._logger.debug(\n                    '%s is on maintenance, only posting to alert history for %s event',\n                    event.netbox,\n                    event.event_type,\n                )\n                alert.post(post_alert=False)\n            else:\n                self._logger.debug('Posting %s event', event.event_type)\n                alert.post()\n        else:\n            self._logger.info(\n                'Ignoring duplicate %s event for %s', event.event_type, event.netbox\n            )\n            self._logger.debug('ignored alert details: %r', event)\n        event.delete()\n\n    @staticmethod\n    def _box_is_on_maintenance(event):\n        \"\"\"Returns True if the event's associated netbox is currently on\n        maintenance.\n        \"\"\"\n        return (\n            event.netbox\n            and event.netbox.get_unresolved_alerts('maintenanceState').count() > 0\n        )\n\n    @transaction.atomic()\n    def handle_event(self, event):\n        \"Handles a single event\"\n        original_id = event.id\n\n        self._logger.debug(\"handling %r\", event)\n        queue = [cls(event, self) for cls in self.handlers if cls.can_handle(event)]\n        self._logger.debug(\"plugins that can handle: %r\", queue)\n        if not queue:\n            self._post_generic_alert(event)\n\n        for handler in queue:\n            self._logger.debug(\"giving event to %s\", handler.__class__.__name__)\n            try:\n                handler.handle()\n            except Exception:  # noqa: BLE001\n                self._logger.exception(\n                    \"Unhandled exception in plugin %s; ignoring it\", handler\n                )\n                if len(queue) == 1 and event.id:\n                    # there's only one handler and it failed,\n                    # this will probably never be handled, so we delete it\n                    event.delete()\n\n        if event.id:\n            self._logger.debug(\n                \"event wasn't disposed of, maybe held for later processing? %r\",\n                event,\n            )\n            self._unfinished.add(event.id)\n        elif original_id in self._unfinished:\n            self._unfinished.remove(original_id)\n\n    def schedule(self, delay, action, args=()):\n        \"\"\"Schedule running action after a given delay\"\"\"\n        self._logger.debug(\n            \"scheduling delayed task in %s seconds: %r (args=%r)\", delay, action, args\n        )\n        return self._scheduler.enter(\n            delay,\n            self.PLUGIN_TASKS_PRIORITY,\n            swallow_unhandled_exceptions(action),\n            args,\n        )\n\n    def cancel(self, task):\n        \"\"\"Cancel the current scheduled task\"\"\"\n        self._scheduler.cancel(task)\n"
  },
  {
    "path": "python/nav/eventengine/export.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert stream export functionality\"\"\"\n\nimport logging\nimport json\nimport subprocess\n\nfrom django.core.serializers.json import DjangoJSONEncoder\n\n\nfrom nav.web.api.v1.alert_serializers import AlertQueueSerializer\n\ntry:\n    exporter\nexcept NameError:\n    \"\"\"A singleton, normally instantiated by the event engine as it starts\"\"\"\n    exporter = None\n\n_logger = logging.getLogger(__name__)\n\n\nclass StreamExporter(object):\n    \"\"\"Exports a stream of alert objects over a pipe to a specific script\"\"\"\n\n    def __init__(self, command):\n        self.command = command\n        self._process = None\n        self.run()\n\n    def run(self):\n        \"\"\"Runs the subprocess that will receive the alert stream on its STDIN\"\"\"\n        self._process = subprocess.Popen(\n            [self.command], stdin=subprocess.PIPE, stdout=subprocess.DEVNULL\n        )\n\n    def is_ok(self):\n        \"\"\"Verifies that the subprocess is running, and attempts to restart it if\n        it's dead.\n\n        :returns: True if the subprocess is running, False if it wasn't running and\n                  couldn't be restarted.\n\n        \"\"\"\n        if self._process.poll() is not None:\n            _logger.info(\n                \"restarting dead export script (retcode=%s) %r\",\n                self._process.returncode,\n                self.command,\n            )\n            try:\n                self.run()\n            except Exception as error:  # noqa: BLE001\n                _logger.error(\"Cannot restart dead export script: %s\", error)\n                return False\n\n        return True\n\n    def export(self, alert):\n        \"\"\"Serializes and exports an event or alert to the export script.\n\n        :type alert: nav.models.event.AlertQueue\n\n        \"\"\"\n        _logger.debug(\"exporting %r\", alert)\n        serializer = AlertQueueSerializer(alert)\n        data = json.dumps(serializer.data, cls=DjangoJSONEncoder)\n        self._send_string(data + \"\\n\")\n\n    def _send_string(self, string):\n        if self.is_ok():\n            self._process.stdin.write(\n                string if not isinstance(string, str) else string.encode(\"utf-8\")\n            )\n            self._process.stdin.flush()\n"
  },
  {
    "path": "python/nav/eventengine/plugin.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"event engine plugin handling\"\n\nimport os\nimport logging\n\n\nclass UnsupportedEvent(ValueError):\n    \"Event of unsupported type was passed to a handler\"\n\n    pass\n\n\nclass EventHandler(object):\n    \"Base class for event handlers\"\n\n    @classmethod\n    def can_handle(cls, event):\n        \"\"\"Verifies whether this handler can handle the specific event.\n\n        :returns: The default implementation will return True for all events,\n                  unless the class variable `handled_types` is a list of\n                  accepted event type ids.\n\n        \"\"\"\n        return event.event_type_id in cls.handled_types if cls.handled_types else True\n\n    def __init__(self, event, engine):\n        \"\"\"Initializes an event plugin instance.\n\n        :type event: nav.models.event.EventQueue\n        :type engine: nav.eventengine.engine.EventEngine\n        \"\"\"\n        if not self.can_handle(event):\n            raise UnsupportedEvent(\n                \"%s can't handle %s\" % (self.__class__.__name__, event.event_type_id)\n            )\n        self.event = event\n        self.engine = engine\n        self._logger = logging.getLogger(\n            \"%s.%s\" % (self.__class__.__module__, self.__class__.__name__)\n        )\n\n    def handle(self):\n        \"Handles the attached event\"\n        raise NotImplementedError\n\n    @classmethod\n    def load_and_find_subclasses(cls, package_names=None):\n        \"\"\"Loads all modules from the listed packages and subsequently returns\n        list of all defined subclasses of EventHandler.\n\n        \"\"\"\n        if not package_names:\n            from . import plugins\n\n            package_names = [plugins.__name__]\n\n        for name in package_names:\n            _load_all_modules_in_package(name)\n        return _get_recursive_subclasses(cls)\n\n    def _box_is_on_maintenance(self):\n        \"\"\"Returns True if the target netbox is currently on maintenance\"\"\"\n\n        return self.event.netbox.get_unresolved_alerts('maintenanceState').count() > 0\n\n\ndef _load_all_modules_in_package(package_name):\n    modnames = (\n        '%s.%s' % (package_name, mod) for mod in _find_package_modules(package_name)\n    )\n    for name in modnames:\n        __import__(name, fromlist=['*'])\n\n\ndef _find_package_modules(package_name):\n    extensions = ('.py', '.pyc')\n    package = __import__(package_name, fromlist=['*'])\n    directory = os.path.dirname(package.__file__)\n    files = (\n        os.path.splitext(f)\n        for f in os.listdir(directory)\n        if not f.startswith('.') and not f.startswith('_')\n    )\n    modnames = set(name for name, ext in files if ext in extensions)\n    return list(modnames)\n\n\ndef _get_recursive_subclasses(cls, subclasses=None):\n    if subclasses is None:\n        subclasses = set()\n    new_classes = cls.__subclasses__()\n    subclasses.update(new_classes)\n    for cls in new_classes:\n        subclasses.update(_get_recursive_subclasses(cls))\n    return subclasses\n"
  },
  {
    "path": "python/nav/eventengine/plugins/__init__.py",
    "content": "\"eventengine plugins package\"\n"
  },
  {
    "path": "python/nav/eventengine/plugins/aggregatelinkstate.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav.eventengine import unresolved\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\n\n\nclass AggregateLinkStateHandler(EventHandler):\n    \"\"\"Accepts aggregateLinkState events\"\"\"\n\n    handled_types = ('aggregateLinkState',)\n\n    def handle(self):\n        event = self.event\n        alert = AlertGenerator(event)\n        interface = event.get_subject()\n        is_unresolved = unresolved.refers_to_unresolved_alert(event)\n\n        if event.state == event.STATE_START:\n            alert.alert_type = 'linkDegraded'\n            if is_unresolved:\n                return self._handle_duplicate(alert, is_unresolved)\n            if not interface.is_degraded():\n                return self._ignore(\n                    \"Got aggregateLinkState start event, but \"\n                    \"the interface is not currently degraded.\"\n                )\n\n        elif event.state == event.STATE_END:\n            alert.alert_type = 'linkRestored'\n            if not is_unresolved:\n                return self._ignore(\n                    \"Got aggregateLinkState end event, but \"\n                    \"there is no currently active alert to \"\n                    \"resolve.\"\n                )\n            if interface.is_degraded():\n                return self._ignore(\n                    \"Got aggregateLinkState end event, but the \"\n                    \"interface still appears to be degraded.\"\n                )\n\n        alert.post(post_alert=not self._box_is_on_maintenance())\n\n        event.delete()\n\n    def _handle_duplicate(self, alert, existing_alert):\n        interface = self.event.get_subject()\n        self._logger.info(\n            \"%s: Got another linkDegraded event, interface is \"\n            \"possibly degraded further\",\n            interface,\n        )\n        self._logger.debug(\n            \"%s: The unresolved AlertHist entry is %r\", interface, vars(existing_alert)\n        )\n        # Post just an alertq entry, but don't touch alerthist\n        alert.post(set_state=existing_alert)\n        self.event.delete()\n\n    def _ignore(self, msg):\n        interface = self.event.get_subject()\n        self._logger.info(\"%s: %s Ignoring event.\", interface, msg)\n        self.event.delete()\n"
  },
  {
    "path": "python/nav/eventengine/plugins/bgpstate.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"bgpState event plugin\"\"\"\n\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugins import delayedstate\n\n\nclass BGPStateHandler(delayedstate.DelayedStateHandler):\n    \"\"\"Accepts bgpState events\"\"\"\n\n    handled_types = ('bgpState',)\n    HAS_WARNING_ALERT = False\n    ALERT_WAIT_TIME = 'bgpDown.alert'\n\n    def get_target(self):\n        \"\"\"Returns the peering session this event is about.\n\n        :rtype: nav.models.manage.GatewayPeerSession\n        \"\"\"\n        return self.event.get_subject()\n\n    def _get_up_alert(self):\n        alert = AlertGenerator(self.event)\n        alert.alert_type = 'bgpEstablished'\n        return alert\n\n    def _get_down_alert(self):\n        alert = AlertGenerator(self.event)\n        if self._is_peer_down():\n            self._logger.info(\n                \"%s: peer is down, not posting bgp alert\", self.get_target()\n            )\n            return\n        return alert\n\n    def _post_down_warning(self):\n        pass\n\n    def _is_peer_down(self):\n        session = self.get_target()\n        netbox = session.get_peer_as_netbox()\n        if netbox:\n            return not netbox.is_up()\n"
  },
  {
    "path": "python/nav/eventengine/plugins/boxstate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"boxState event plugin\"\"\"\n\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugins import delayedstate\nfrom nav.models.manage import Netbox\n\n\nclass BoxStateHandler(delayedstate.DelayedStateHandler):\n    \"\"\"Accepts boxState events\"\"\"\n\n    handled_types = ('boxState',)\n    WARNING_WAIT_TIME = 'boxDown.warning'\n    ALERT_WAIT_TIME = 'boxDown.alert'\n\n    def _is_internally_down(self):\n        netbox = self.get_target()\n        return netbox.up != netbox.UP_UP\n\n    def _set_internal_state_down(self):\n        shadow = self._verify_shadow()\n        state = Netbox.UP_SHADOW if shadow else Netbox.UP_DOWN\n        self._set_internal_state(state)\n\n    def _set_internal_state_up(self):\n        self._set_internal_state(Netbox.UP_UP)\n\n    def _set_internal_state(self, state):\n        netbox = self.get_target()\n        netbox.up = state\n        Netbox.objects.filter(id=netbox.id).update(up=state)\n\n    def get_target(self):\n        return self.event.netbox\n\n    def _get_up_alert(self):\n        alert = AlertGenerator(self.event)\n        is_shadow = self.event.netbox.up == self.event.netbox.UP_SHADOW\n        alert.alert_type = \"boxSunny\" if is_shadow else \"boxUp\"\n        return alert\n\n    def _post_down_warning(self):\n        \"\"\"Posts the actual warning alert\"\"\"\n        alert = AlertGenerator(self.event)\n        alert.state = self.event.STATE_STATELESS\n\n        shadow = self._verify_shadow()\n        if shadow:\n            alert.alert_type = 'boxShadowWarning'\n            self._set_internal_state(Netbox.UP_SHADOW)\n        else:\n            alert.alert_type = 'boxDownWarning'\n\n        self._logger.info(\"%s: Posting %s alert\", self.event.netbox, alert.alert_type)\n        alert.post()\n\n    def _get_down_alert(self):\n        alert = AlertGenerator(self.event)\n        if self._verify_shadow():\n            alert.alert_type = 'boxShadow'\n            self._set_internal_state(Netbox.UP_SHADOW)\n        else:\n            alert.alert_type = 'boxDown'\n        return alert\n"
  },
  {
    "path": "python/nav/eventengine/plugins/delayedstate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"Superclass for plugins that use delayed handling of state events\"\"\"\n\nfrom nav.eventengine import unresolved\n\nfrom nav.eventengine.topology import netbox_appears_reachable\nfrom nav.models.manage import Netbox\nfrom nav.eventengine.plugin import EventHandler\n\n\nclass DelayedStateHandler(EventHandler):\n    \"\"\"A plugin that wants to delay down alerts while waiting a possible\n    quick resolve should be able to subclass this.\n\n    \"\"\"\n\n    HAS_WARNING_ALERT = True\n    WARNING_WAIT_TIME = 60\n    ALERT_WAIT_TIME = 240\n\n    handled_types = (None,)\n    __waiting_for_resolve = {}\n\n    def __init__(self, *args, **kwargs):\n        super(DelayedStateHandler, self).__init__(*args, **kwargs)\n        self.task = None\n        self._set_wait_times()\n\n    def _set_wait_times(self):\n        \"\"\"Sets wait times from config options under the timeouts section\"\"\"\n        get_timeout_for = self.engine.config.get_timeout_for\n        for wait_var in ('WARNING_WAIT_TIME', 'ALERT_WAIT_TIME'):\n            new_value = get_timeout_for(getattr(self, wait_var))\n            if new_value:\n                setattr(self, wait_var, new_value)\n\n    def handle(self):\n        event = self.event\n        if event.state == event.STATE_START:\n            return self._handle_start()\n        elif event.state == event.STATE_END:\n            return self._handle_end()\n        else:\n            self._logger.info(\n                \"ignoring strange stateless %s event: %r\", event.event_type, event\n            )\n            self.event.delete()\n\n    def _handle_start(self):\n        event = self.event\n        if self._is_duplicate():\n            self._logger.info(\n                \"%s is already down, ignoring duplicate start event\", self.get_target()\n            )\n            event.delete()\n        else:\n            self._set_internal_state_down()\n            if self.HAS_WARNING_ALERT:\n                self._logger.info(\n                    \"%s start event for %s; warning in %s seconds, declaring \"\n                    \"down in %s seconds (if still unresolved)\",\n                    self.event.event_type,\n                    self.get_target(),\n                    self.WARNING_WAIT_TIME,\n                    self.ALERT_WAIT_TIME,\n                )\n                self.schedule(\n                    self.WARNING_WAIT_TIME,\n                    self._make_down_warning,\n                    args=(self.event.get_subject(),),\n                )\n            else:\n                self._logger.info(\n                    \"%s start event for %s; declaring down in %s seconds \"\n                    \"(if still unresolved)\",\n                    self.event.event_type,\n                    self.get_target(),\n                    self.ALERT_WAIT_TIME,\n                )\n                self.schedule(\n                    self.ALERT_WAIT_TIME,\n                    self._make_down_alert,\n                    args=(self.event.get_subject(),),\n                )\n\n    def _set_internal_state_down(self):\n        \"\"\"Called to set target's internal state to down as soon as start event\n        is received.\n\n        \"\"\"\n        return\n\n    def _set_internal_state_up(self):\n        \"\"\"Called to set target's internal state to up as soon as end event is\n        received.\n\n        \"\"\"\n        return\n\n    def _is_internally_down(self):\n        \"\"\"\n        Called to verify whether the internal state of the target is\n        currently \"down\".\n\n        :return: True if down, False if upn, None if internal state cannot be\n                 determined or is inapplicable for this target/event combo.\n        \"\"\"\n        return\n\n    def get_target(self):\n        \"\"\"Returns the target of the associated event\"\"\"\n        raise NotImplementedError\n\n    def _handle_end(self):\n        is_unresolved = unresolved.refers_to_unresolved_alert(self.event)\n        waiting_plugin = self._get_waiting()\n\n        if is_unresolved or waiting_plugin:\n            self._logger.info(\"%s is back up\", self.get_target())\n            self._set_internal_state_up()\n\n            if is_unresolved:\n                alert = self._get_up_alert()\n                alert.post(post_alert=not self._box_is_on_maintenance())\n\n            if waiting_plugin:\n                self._logger.info(\n                    \"ignoring transient down state for %s\", self.get_target()\n                )\n                waiting_plugin.deschedule()\n        elif self._is_internally_down():\n            self._logger.info(\n                \"no unresolved %s for %s, but its internal state \"\n                \"was down; correcting internal state\",\n                self.event.event_type,\n                self.get_target(),\n            )\n            self._set_internal_state_up()\n        else:\n            self._logger.info(\n                \"no unresolved %s for %s, ignoring end event\",\n                self.event.event_type,\n                self.get_target(),\n            )\n\n        self.event.delete()\n\n    def _get_up_alert(self):\n        raise NotImplementedError\n\n    def _is_duplicate(self):\n        \"\"\"Returns True if this appears to be a duplicate boxDown event\"\"\"\n        return unresolved.refers_to_unresolved_alert(self.event) or self._get_waiting()\n\n    def _get_waiting(self):\n        \"\"\"Returns a plugin instance waiting for boxState resolve\n        events for the same netbox this instance is processing.\n\n        :returns: A plugin instance, if one is waiting, otherwise False.\n\n        \"\"\"\n        return self.__waiting_for_resolve.get((type(self), self.get_target()), False)\n\n    def _make_down_warning(self, _comment=None):\n        \"\"\"Posts the initial boxDownWarning alert and schedules the callback\n        for the final boxDown alert.\n\n        \"\"\"\n        if not self._box_is_on_maintenance():\n            self._post_down_warning()\n        else:\n            self._logger.info(\n                \"%s: is on maintenance, not posting warning\", self.event.netbox\n            )\n\n        self.task = self.engine.schedule(\n            max(self.ALERT_WAIT_TIME - self.WARNING_WAIT_TIME, 0),\n            self._make_down_alert,\n            args=(self.event.get_subject(),),\n        )\n\n    def _post_down_warning(self):\n        \"\"\"Posts the actual warning alert\"\"\"\n        raise NotImplementedError\n\n    def _make_down_alert(self, _comment=None):\n        alert = self._get_down_alert()\n        if alert:\n            self._logger.info(\n                \"%s: Posting %s alert\", self.get_target(), alert.alert_type\n            )\n            alert.post(post_alert=not self._box_is_on_maintenance())\n        else:\n            self._logger.error(\"could not find a down alert, doing nothing (%r)\", alert)\n\n        del self.__waiting_for_resolve[(type(self), self.get_target())]\n        self.task = None\n        self.event.delete()\n\n    def _get_down_alert(self):\n        \"\"\"Returns a ready-made AlertGenerator that can be used to post a\n        down alert for the implementing plugin.\n\n        :return: An AlertGenerator instance, or None if no alert should be\n                 posted.\n\n        \"\"\"\n        raise NotImplementedError\n\n    def _verify_shadow(self):\n        netbox = self.event.netbox\n        netbox.up = (\n            Netbox.UP_DOWN if netbox_appears_reachable(netbox) else Netbox.UP_SHADOW\n        )\n        Netbox.objects.filter(id=netbox.id).update(up=netbox.up)\n        return netbox.up == Netbox.UP_SHADOW\n\n    def schedule(self, delay, action, args=()):\n        \"Schedules a callback and makes a note of it in a class variable\"\n        self.task = self.engine.schedule(delay, action, args=args)\n        self.__waiting_for_resolve[(type(self), self.get_target())] = self\n\n    def deschedule(self):\n        \"\"\"Deschedules any outstanding task and deletes the associated event\"\"\"\n        self._logger.debug(\"descheduling waiting callback for %s\", self.get_target())\n        self.engine.cancel(self.task)\n        self.task = None\n        if self._get_waiting() == self:\n            del self.__waiting_for_resolve[(type(self), self.get_target())]\n        self.event.delete()\n"
  },
  {
    "path": "python/nav/eventengine/plugins/juniperalertcount.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"juniper alert count handler plugin\"\"\"\n\nfrom nav.eventengine import unresolved\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.models.event import STATE_CHOICES\n\n\nclass JuniperAlertCountHandler(EventHandler):\n    \"\"\"Accepts juniperYellowAlarmState and juniperRedAlarmState events\"\"\"\n\n    handled_types = (\n        'juniperYellowAlarmState',\n        'juniperRedAlarmState',\n    )\n\n    def handle(self):\n        event = self.event\n\n        if event.state == event.STATE_STATELESS:\n            self._logger.warning(\n                'Ignoring stateless %s event: %r', event.event_type, event\n            )\n            self.event.delete()\n        elif event.state == event.STATE_START:\n            return self._handle_start()\n        elif event.state == event.STATE_END:\n            return self._handle_end()\n\n    def _handle_start(self):\n        event = self.event\n        alert = AlertGenerator(event)\n\n        if self._delete_event_with_incorrect_alert_type(\n            event=event,\n            alert_type=alert.alert_type,\n            accepted_alert_types=[\"juniperRedAlarmOn\", \"juniperYellowAlarmOn\"],\n        ):\n            return\n\n        alert.history_vars = {\"count\": alert[\"count\"]}\n        unresolved_alert = unresolved.refers_to_unresolved_alert(self.event)\n\n        if unresolved_alert:\n            if int(alert[\"count\"]) == int(\n                unresolved_alert.variables.get(variable=\"count\").value\n            ):\n                self._logger.warning(\n                    'Ignoring duplicate %s start event: %r',\n                    event.event_type,\n                    event,\n                )\n                event.delete()\n                return\n\n            unresolved_alert.end_time = event.time\n            unresolved_alert.save()\n\n        alert.post()\n        event.delete()\n\n    def _handle_end(self):\n        event = self.event\n        alert = AlertGenerator(event)\n\n        if self._delete_event_with_incorrect_alert_type(\n            event=event,\n            alert_type=alert.alert_type,\n            accepted_alert_types=[\"juniperRedAlarmOff\", \"juniperYellowAlarmOff\"],\n        ):\n            return\n\n        unresolved_alert = unresolved.refers_to_unresolved_alert(event)\n\n        if unresolved_alert:\n            alert.post()\n        else:\n            self._logger.warning(\n                \"no unresolved %s for %s, ignoring end event\",\n                self.event.event_type,\n                self.get_target(),\n            )\n\n        self.event.delete()\n\n    def get_target(self):\n        return self.event.get_subject()\n\n    def _delete_event_with_incorrect_alert_type(\n        self, event, alert_type, accepted_alert_types\n    ):\n        \"\"\"\n        Checks if an the alert type of an event is within the given accepted alert\n        types and deletes the event and returns true if not\n        \"\"\"\n        if alert_type not in accepted_alert_types:\n            self._logger.warning(\n                'Ignoring %s %s event with alert type %s: %r',\n                event.event_type,\n                dict(STATE_CHOICES)[event.state],\n                alert_type,\n                event,\n            )\n            event.delete()\n            return True\n\n        return False\n"
  },
  {
    "path": "python/nav/eventengine/plugins/linkstate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"linkState event plugin\"\"\"\n\nimport copy\n\nfrom nav.config import ConfigurationError\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugins import delayedstate\nfrom nav.models.manage import Interface, Netbox\nfrom nav.models.event import EventQueue as Event, EventQueueVar as EventVar\n\n\nclass LinkStateHandler(delayedstate.DelayedStateHandler):\n    \"\"\"Accepts linkState events\"\"\"\n\n    HAS_WARNING_ALERT = False\n    ALERT_WAIT_TIME = 'linkDown.alert'\n    handled_types = ('linkState',)\n\n    _target = None\n\n    def __init__(self, *args, **kwargs):\n        super(LinkStateHandler, self).__init__(*args, **kwargs)\n        self.config = LinkStateConfiguration(self.engine.config)\n\n    def get_target(self):\n        if not self._target:\n            self._target = Interface.objects.get(id=self.event.subid)\n            assert self._target.netbox_id == self.event.netbox.id\n        return self._target\n\n    def get_link_partner(self):\n        \"\"\"Returns the link partner of the target interface\"\"\"\n        return self.get_target().to_netbox\n\n    def handle(self):\n        if self._is_a_master_for_virtualized_instances():\n            self._copy_event_for_instances()\n        return super(LinkStateHandler, self).handle()\n\n    def _handle_end(self):\n        self._post_event_if_aggregate_restored()  # always verify aggregates\n        return super(LinkStateHandler, self)._handle_end()\n\n    def _set_internal_state_down(self):\n        self._set_ifoperstatus(Interface.OPER_DOWN)\n\n    def _set_internal_state_up(self):\n        self._set_ifoperstatus(Interface.OPER_UP)\n\n    def _set_ifoperstatus(self, ifoperstatus):\n        ifc = self.get_target()\n        if ifc.ifoperstatus != ifoperstatus:\n            ifc.ifoperstatus = ifoperstatus\n            Interface.objects.filter(id=ifc.id).update(ifoperstatus=ifoperstatus)\n\n    def _get_up_alert(self):\n        alert = AlertGenerator(self.event)\n        alert.alert_type = \"linkUp\"\n        self._logger.info(\n            \"Posting %s alert for %s\", alert.alert_type, self.get_target()\n        )\n        return alert\n\n    def _get_down_alert(self):\n        self._post_event_if_aggregate_degraded()  # always verify aggregates\n        alert = AlertGenerator(self.event)\n        alert.alert_type = \"linkDown\"\n\n        if any(\n            (\n                self._hold_back_alert_due_to_vlan_mismatch(),\n                self._hold_back_alert_due_to_redundancy_limit(),\n            )\n        ):\n            self._logger.info(\n                \"%s: withholding %s alert because of unmatched criteria\",\n                self.get_target(),\n                alert.alert_type,\n            )\n            return None\n\n        return alert\n\n    def _post_down_warning(self):\n        pass\n\n    def _hold_back_alert_due_to_redundancy_limit(self):\n        if self.config.alert_only_on_redundancy_loss():\n            partner = self.get_link_partner()\n            redundancy_loss = partner and partner.up == Netbox.UP_UP\n            if redundancy_loss:\n                self._logger.info(\n                    \"likely link redundancy degradation: %s is \"\n                    \"down, but link partner %s is still up\",\n                    self.get_target(),\n                    partner,\n                )\n            else:\n                return True\n        return False\n\n    def _hold_back_alert_due_to_vlan_mismatch(self):\n        limited_to_vlans = self.config.get_vlan_limit_set()\n        if limited_to_vlans:\n            vlans = self._get_target_vlans()\n            if vlans.intersection(limited_to_vlans):\n                self._logger.info(\n                    \"%s vlans %r intersects with list of limited vlans %r\",\n                    self.get_target(),\n                    vlans,\n                    limited_to_vlans,\n                )\n            elif vlans:\n                self._logger.info(\n                    \"%s vlans %r does not intersect with list of limited vlans %r\",\n                    self.get_target(),\n                    vlans,\n                    limited_to_vlans,\n                )\n                return True\n        return False\n\n    def _get_target_vlans(self):\n        \"\"\"Returns the set of untagged/tagged vlans configured on the target\n        interface.\n\n        \"\"\"\n        ifc = self.get_target()\n        vlans = ifc.swport_vlans.values('vlan__vlan')\n        vlans = {row['vlan__vlan'] for row in vlans}\n        return vlans\n\n    #\n    # Methods to handle aggregateLinkState event posting if this interface is\n    # part of an aggregate\n    #\n\n    def _post_event_if_aggregate_degraded(self):\n        if self.get_target().get_aggregator():\n            self._logger.info(\n                \"down event for %s, posting linkDegraded event for %s\",\n                self.get_target(),\n                self.get_target().get_aggregator(),\n            )\n            return self._get_aggregate_link_event(start=True)\n\n    def _post_event_if_aggregate_restored(self):\n        if self.get_target().get_aggregator():\n            self._logger.info(\n                \"up event for %s, posting linkRestored event for %s\",\n                self.get_target(),\n                self.get_target().get_aggregator(),\n            )\n            return self._get_aggregate_link_event(start=False)\n\n    def _get_aggregate_link_event(self, start):\n        target = self.get_target()\n        aggregator = target.get_aggregator()\n        event = Event()\n        event.source_id = event.target_id = 'eventEngine'\n        event.netbox_id = aggregator.netbox_id\n        event.subid = aggregator.id\n        event.event_type_id = 'aggregateLinkState'\n        event.state = event.STATE_START if start else event.STATE_END\n        event.save()\n\n        EventVar(\n            event_queue=event,\n            variable='alerttype',\n            value='linkDegraded' if start else 'linkRestored',\n        ).save()\n        EventVar(event_queue=event, variable='aggregate', value=target.id).save()\n        EventVar(\n            event_queue=event, variable='aggregate_ifname', value=target.ifname\n        ).save()\n        EventVar(\n            event_queue=event, variable='aggregate_ifalias', value=target.ifalias or ''\n        ).save()\n\n    #\n    # Methods to handle duplication of events for virtualized netbox instances\n    #\n\n    def _is_a_master_for_virtualized_instances(self):\n        ifc = self.get_target()\n        return ifc and ifc.netbox and ifc.netbox.instances.count() > 0\n\n    def _copy_event_for_instances(self):\n        ifc = self.get_target()\n        netbox = ifc.netbox\n        for instance in netbox.instances.all():\n            self._copy_event_for_instance(netbox, instance, ifc)\n\n    def _copy_event_for_instance(self, netbox, instance, ifc):\n        try:\n            other_ifc = Interface.objects.get(netbox=instance, ifname=ifc.ifname)\n        except Interface.DoesNotExist:\n            self._logger.info(\n                \"interface %s does not exist on instance %s\", ifc.ifname, instance\n            )\n            return\n\n        new_event = copy.copy(self.event)  # type: nav.models.event.EventQueue\n        new_event.pk = None\n        new_event.netbox = instance\n        new_event.device = None\n        new_event.subid = other_ifc.pk\n\n        self._logger.info('duplicating linkState event for %s to %s', ifc, instance)\n        new_event.save()\n\n\nclass LinkStateConfiguration(object):\n    \"\"\"Retrieves configuration options for the LinkStateHandler\"\"\"\n\n    def __init__(self, config):\n        self.config = config\n\n    def get_vlan_limit_set(self):\n        \"\"\"Returns a set of VLAN IDs to limit linkState alerts to\"\"\"\n        opt = (\"linkdown\", \"limit_to_vlans\")\n        if self.config.has_option(*opt):\n            vlanstring = self.config.get(*opt)\n            try:\n                vlans = [int(vlan) for vlan in vlanstring.split()]\n            except (TypeError, ValueError):\n                raise ConfigurationError(\"Invalid config value for %s\" % opt)\n            return set(vlans)\n        else:\n            return set()\n\n    def alert_only_on_redundancy_loss(self):\n        \"\"\"Returns True if linkState alerts are only to be sent on linkDown's\n        that degrade a redundant link setup\n\n        \"\"\"\n        opt = (\"linkdown\", \"only_redundant\")\n        if self.config.has_option(*opt):\n            return self.config.getboolean(*opt)\n        else:\n            return True\n"
  },
  {
    "path": "python/nav/eventengine/plugins/maintenancestate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"maintenance handler plugin\"\"\"\n\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\n\n\nclass MaintenanceStateHandler(EventHandler):\n    \"\"\"Accepts maintenanceState events\"\"\"\n\n    handled_types = ('maintenanceState',)\n\n    def handle(self):\n        event = self.event\n\n        if event.state == event.STATE_STATELESS:\n            self._logger.info('Ignoring stateless maintenanceState event')\n        else:\n            self._post_alert(event)\n\n        event.delete()\n\n    def _post_alert(self, event):\n        alert = AlertGenerator(event)\n        alert.alert_type = (\n            'onMaintenance' if event.state == event.STATE_START else 'offMaintenance'\n        )\n        alert.history_vars = dict(alert)\n        if alert.is_event_duplicate():\n            self._logger.info('Ignoring duplicate event')\n        else:\n            alert.post()\n"
  },
  {
    "path": "python/nav/eventengine/plugins/modulestate.py",
    "content": "#\n# Copyright (C) 2012, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"moduleState event plugin\"\"\"\n\nimport datetime\n\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugins import delayedstate\nfrom nav.models.manage import Module\n\n\nclass ModuleStateHandler(delayedstate.DelayedStateHandler):\n    \"\"\"Accepts moduleState events\"\"\"\n\n    HAS_WARNING_ALERT = True\n    WARNING_WAIT_TIME = 'moduleDown.warning'\n    ALERT_WAIT_TIME = 'moduleDown.alert'\n    handled_types = ('moduleState',)\n\n    _target = None\n\n    def get_target(self):\n        if not self._target:\n            self._target = Module.objects.get(id=self.event.subid)\n            assert self._target.netbox_id == self.event.netbox.id\n        return self._target\n\n    def _is_internally_down(self):\n        module = self.get_target()\n        return module.up != module.UP_UP\n\n    def _get_up_alert(self):\n        alert = self._get_alert()\n        alert.alert_type = \"moduleUp\"\n        return alert\n\n    def _set_internal_state_down(self):\n        module = self.get_target()\n        module.up = module.UP_DOWN\n        module.down_since = datetime.datetime.now()\n        module.save()\n\n    def _set_internal_state_up(self):\n        module = self.get_target()\n        module.up = module.UP_UP\n        module.down_since = None\n        module.save()\n\n    def _get_down_alert(self):\n        if self._is_chassis_down():\n            self._logger.info(\n                \"%s: Containing chassis is down, not posting moduleDown\",\n                self.get_target(),\n            )\n            return\n\n        alert = self._get_alert()\n        alert.alert_type = \"moduleDown\"\n        return alert\n\n    def _get_alert(self):\n        alert = AlertGenerator(self.event)\n        target = self.get_target()\n        if target:\n            alert['module'] = target\n        return alert\n\n    def _post_down_warning(self):\n        \"\"\"Posts the actual warning alert\"\"\"\n        if self._is_chassis_down():\n            self._logger.info(\n                \"%s: Containing chassis is down, not posting moduleDownWarning\",\n                self.get_target(),\n            )\n            return\n\n        alert = self._get_alert()\n        alert.alert_type = \"moduleDownWarning\"\n        alert.state = self.event.STATE_STATELESS\n        self._logger.info(\"%s: Posting %s alert\", self.get_target(), alert.alert_type)\n        alert.post()\n\n    def _is_chassis_down(self):\n        chassis = self.get_target().get_chassis()\n        return chassis and chassis.gone_since\n"
  },
  {
    "path": "python/nav/eventengine/plugins/servicestate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"servicestate handler plugin\"\"\"\n\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.models.event import EventQueue as Event\nfrom nav.models.manage import Netbox\nfrom nav.models.service import Service\n\n\nclass ServiceStateHandler(EventHandler):\n    \"\"\"Accepts serviceState events\"\"\"\n\n    handled_types = ('serviceState',)\n\n    def handle(self):\n        event = self.event\n        alert = AlertGenerator(event)\n\n        if event.state in [event.STATE_START, event.STATE_END]:\n            service = self._update_service()\n            self._set_alert_type(alert, service)\n\n        self._populate_alert(alert)\n\n        alert.post(post_alert=not self._box_is_on_maintenance())\n\n        event.delete()\n\n    def _update_service(self):\n        \"\"\"Update state of service directly based on event\"\"\"\n        event = self.event\n        service = Service.objects.get(pk=event.subid)\n        service.up = (\n            Service.UP_DOWN if event.state == Event.STATE_START else Service.UP_UP\n        )\n        service.save()\n        return service\n\n    @staticmethod\n    def _set_alert_type(alert, service):\n        \"\"\"Set alerttype based on handler and event state\"\"\"\n        state = 'Down' if alert.state == Event.STATE_START else 'Up'\n        alert.alert_type = service.handler + state\n\n    def _populate_alert(self, alert):\n        \"\"\"Populate alert-dict with variables used in alertmessage\"\"\"\n        alert['deviceup'] = 'Yes' if self.event.netbox.up == Netbox.UP_UP else 'No'\n        try:\n            service = Service.objects.get(pk=self.event.subid)\n            alert['service'] = service\n        except Service.DoesNotExist:\n            pass\n"
  },
  {
    "path": "python/nav/eventengine/plugins/snmpagentstate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Uses delayedstatehandler to implement a handler for snmpagentstate\"\"\"\n\nfrom nav.eventengine.alerts import AlertGenerator\nfrom nav.eventengine.plugins.delayedstate import DelayedStateHandler\nfrom nav.models.manage import Netbox\n\n\nclass SnmpAgentStateHandler(DelayedStateHandler):\n    \"\"\"Accepts snmpAgentState events\"\"\"\n\n    HAS_WARNING_ALERT = False\n    ALERT_WAIT_TIME = 'snmpAgentDown.alert'\n    handled_types = ('snmpAgentState',)\n\n    def get_target(self):\n        return self.event.netbox\n\n    def _get_up_alert(self):\n        alert = AlertGenerator(self.event)\n        alert.alert_type = 'snmpAgentUp'\n        return alert\n\n    def _get_down_alert(self):\n        if self._is_netbox_currently_up():\n            alert = AlertGenerator(self.event)\n            alert.alert_type = 'snmpAgentDown'\n            return alert\n        else:\n            self._logger.info(\n                \"%s has gone down in the meantime, not posting snmpAgentDown alert\",\n                self.get_target(),\n            )\n\n    def _is_netbox_currently_up(self):\n        row = Netbox.objects.filter(id=self.get_target().id).values_list('up')[0]\n        return row[0] == Netbox.UP_UP\n\n    def _post_down_warning(self):\n        pass\n"
  },
  {
    "path": "python/nav/eventengine/plugins/thresholdstate.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"thresholdstate handler plugin\"\"\"\n\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\n\n\nclass ThresholdStateHandler(EventHandler):\n    \"\"\"Accepts thresholdState events\"\"\"\n\n    handled_types = ('thresholdState',)\n\n    def handle(self):\n        event = self.event\n\n        if event.state == event.STATE_STATELESS:\n            self._logger.info('Ignoring stateless thresholdState event')\n        else:\n            self._post_alert(event)\n\n        event.delete()\n\n    def _post_alert(self, event):\n        alert = AlertGenerator(event)\n        alert.alert_type = (\n            'exceededThreshold'\n            if event.state == event.STATE_START\n            else 'belowThreshold'\n        )\n\n        if alert.is_event_duplicate():\n            self._logger.info('Ignoring duplicate alert')\n        else:\n            alert.post()\n"
  },
  {
    "path": "python/nav/eventengine/plugins/upgrade.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"software/firmware/hardware upgrade handler plugin\"\"\"\n\nfrom nav.eventengine.plugin import EventHandler\nfrom nav.eventengine.alerts import AlertGenerator\n\n\nclass UpgradeHandler(EventHandler):\n    \"\"\"Accepts deviceNotice events\"\"\"\n\n    handled_types = ('deviceNotice',)\n\n    def handle(self):\n        event = self.event\n\n        if event.state != event.STATE_STATELESS:\n            self._logger.info('Ignoring stateful deviceNotice event')\n        else:\n            self._post_alert(event)\n\n        event.delete()\n\n    def _post_alert(self, event):\n        alert = AlertGenerator(event)\n        if alert.alert_type in (\n            \"deviceHwUpgrade\",\n            \"deviceSwUpgrade\",\n            \"deviceFwUpgrade\",\n        ):\n            alert.history_vars[\"old_version\"] = alert.get(\"old_version\", \"N/A\")\n            alert.history_vars[\"new_version\"] = alert.get(\"new_version\", \"N/A\")\n\n        alert.post()\n"
  },
  {
    "path": "python/nav/eventengine/severity.py",
    "content": "#\n# Copyright (C) 2021 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Contains functionality for eventengine to parse user-configured alert severity\nmodification rules and apply them to generated alerts.\n\nTo load a set of rules from a YAML config file, you can do:\n\n    rules = SeverityRules.load_from_file(\"my_config_file.yml\")\n\nThen, given an alert object you wish to assign a new severity value to:\n\n    new_severity = rules.evaluate(alert)\n    alert.severity = new_severity\n    alert.save()\n\n\"\"\"\n\nfrom operator import attrgetter\nimport logging\nimport typing\nimport yaml\n\nfrom nav import config\nfrom nav.models import event\n\n__all__ = [\"Severity\", \"SeverityRules\"]\n#\n# Module constants\n#\n\n\nDEFAULT_SEVERITY = 3  # middle of the road\nCONFIG_FILE = \"severity.yml\"\n_logger = logging.getLogger(__name__)\n\n#\n# Type definitions used in this module\n#\n\n\nclass Expression(typing.NamedTuple):\n    \"\"\"An alert attribute matching expression\"\"\"\n\n    attr: typing.Union[str, callable]\n    value: typing.Any\n\n\nSeverityModifier = typing.Callable[[int], int]\nExpressions = typing.Union[tuple[Expression], tuple]\nRule = tuple[Expressions, SeverityModifier]\nAlertObject = typing.Union[event.EventQueue, event.AlertQueue, event.AlertHistory]\n\n#\n# Class definitions\n#\n\n\nclass Severity(int):\n    \"\"\"Integer subclass that will not allow values outside the interval [1,5]\"\"\"\n\n    def __new__(cls, *args, **kwargs):\n        value = max(min(int(args[0]), 5), 1)\n        return super(Severity, cls).__new__(cls, value)\n\n    def __add__(self, value: int):\n        return self.__class__(int(self) + value)\n\n    def __sub__(self, value: int):\n        return self.__class__(int(self) - value)\n\n\nclass SeverityRules(tuple):\n    \"\"\"An ordered sequence of evaluateable severity modification rules.\n\n    An instance of this class represents an immutable, ordered sequence of rules to\n    match alert objects and assign new severity value to them. It provides the\n    evaluate() method to evaluate the sequence of rules in the context of any given\n    alert object.\n    \"\"\"\n\n    def __new__(cls, rules: typing.Sequence[Rule]):\n        translated_rules = (cls._translate_rule(r) for r in rules)\n        return super().__new__(cls, translated_rules)\n\n    @classmethod\n    def load_from_file(cls, filename: str = CONFIG_FILE) -> 'SeverityRules':\n        \"\"\"Instantiates a SeverityRules object from rule definitions in a YAML file\"\"\"\n        full_path = config.find_config_file(filename)\n        if not full_path:\n            _logger.debug(\"could not find severity config file %s\", filename)\n            return None\n        else:\n            _logger.debug(\"loading severity rules from %s\", full_path)\n\n        with open(full_path) as conf:\n            return cls.load(conf)\n\n    @classmethod\n    def load(cls, string_or_stream: typing.Union[str, typing.IO]) -> 'SeverityRules':\n        \"\"\"Instantiates a new SeverityRules object from YAML rule definitions\"\"\"\n        raw_data = yaml.safe_load(string_or_stream) or {}\n        rules = cls._parse_raw_severity_rules(raw_data)\n        return cls(rules)\n\n    def evaluate(self, alert: AlertObject) -> Severity:\n        \"\"\"Evaluates this set of rules using the supplied alert object as context,\n        returning the resulting severity value.\n        \"\"\"\n        _logger.debug(\"evaluating rules against %r\", alert)\n        severity = getattr(alert, \"severity\", DEFAULT_SEVERITY)\n        for expressions, modifier in self:\n            checks = (expr.attr(alert) == expr.value for expr in expressions)\n            try:\n                if all(checks):\n                    _logger.debug(\"Matched %r\", expressions)\n                    severity = modifier(severity)\n                else:\n                    _logger.debug(\"%r did NOT match\", expressions)\n            except AttributeError as error:\n                _logger.error(\n                    \"severity rule tried to access invalid attribute: %s\", error\n                )\n        return severity\n\n    @classmethod\n    def _parse_raw_severity_rules(\n        cls, definitions: dict\n    ) -> typing.Generator[Rule, None, None]:\n        \"\"\"Generator that parses a dictionary of severity rules as loaded from a YAML\n        config file, and yields a chain of rules with matching expressions and\n        corresponding severity modifiers.\n\n        \"\"\"\n        default = definitions.get(\"default-severity\")\n        if default is None:\n            # Use the alert's original severity value\n            yield (), lambda x: Severity(x)\n        else:\n            default = Severity(default)\n            yield (), lambda x: default\n\n        yield from cls._parse_rule_sublist((), definitions.get(\"rules\", []))\n\n    @classmethod\n    def _parse_rule_sublist(\n        cls, current: Expressions, definitions: list[dict]\n    ) -> typing.Generator[Rule, None, None]:\n        \"\"\"Generator that parses a nested list of severity rule definitions and their\n        corresponding severity modifiers, yielding a list of tuples describing the\n        rules to be applied.\n\n        :param current: The current set of expressions that new expressions will begin\n        with.\n        :param definitions: The list of YAML-deserialized rule definitions to parse.\n        \"\"\"\n        for ruledef in definitions:\n            expr = current\n            modifier = None\n            for attr, value in ruledef.items():\n                if attr == \"severity\":\n                    try:\n                        modifier = cls._parse_modifier(value)\n                    except ValueError:\n                        raise ValueError(\n                            f\"{value!r} is an invalid severity modifier expression\"\n                        ) from None\n                elif attr == \"rules\":\n                    continue\n                else:\n                    expr += (Expression(attr, value),)\n\n            if modifier:\n                yield expr, modifier\n            if \"rules\" in ruledef:\n                yield from cls._parse_rule_sublist(expr, ruledef.get(\"rules\", []))\n\n    @staticmethod\n    def _parse_modifier(value: typing.Union[str, int]) -> SeverityModifier:\n        \"\"\"Parses a severity modifier expression and returns a modifier callable. The\n        callable will take a severity value as an argument, and returns a modified\n        severity value.\n        \"\"\"\n        oper = None\n        if isinstance(value, str):\n            if value[0] in (\"+\", \"-\"):\n                oper = value[0]\n                value = int(value[1:])\n\n        value = int(value)\n        if oper == \"+\":\n            return lambda x: x + value\n        elif oper == \"-\":\n            return lambda x: x - value\n        else:\n            return lambda x: Severity(value)\n\n    @classmethod\n    def _translate_rule(cls, rule: Rule):\n        \"\"\"Translates the attribute sequence of a Rule to attrgetter callables that\n        will fetch those attributes from any object supplied as its argument.\n        \"\"\"\n        expressions, modifier = rule\n        if expressions == ():\n            # empty expression list means: Alway apply / Always True\n            new_expressions = (Expression(lambda x: True, True),)\n        else:\n            new_expressions = (\n                Expression(attrgetter(e.attr), e.value) for e in expressions\n            )\n        return tuple(new_expressions), modifier\n"
  },
  {
    "path": "python/nav/eventengine/topology.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Topology evaluation functions for event processing\"\"\"\n\nimport logging\nimport socket\nimport datetime\n\nimport networkx\nfrom networkx.exception import NetworkXException\nfrom nav.models.manage import SwPortVlan, Netbox, Prefix, Arp, Cam\n\n_logger = logging.getLogger(__name__)\n\n\ndef netbox_appears_reachable(netbox):\n    \"\"\"Returns True if netbox appears to be reachable through the known\n    topology.\n\n    \"\"\"\n    target_path = get_path_to_netbox(netbox)\n    nav = NAVServer.make_for(netbox.ip)\n    nav_path = get_path_to_netbox(nav) if nav else True\n    _logger.debug(\n        \"reachability paths, target_path=%(target_path)r, nav_path=%(nav_path)r\",\n        locals(),\n    )\n    return bool(target_path and nav_path)\n\n\ndef get_path_to_netbox(netbox):\n    \"\"\"Returns a likely path from netbox to its apparent gateway/router.\n\n    If any switches on the path, or the router itself is down,\n    no current path exists and a False value is returned. However,\n    if there is insufficient information for NAV to find a likely path,\n    a True value is returned.\n\n    \"\"\"\n    prefix = netbox.get_prefix()\n    if not prefix:\n        _logger.warning(\"couldn't find prefix for %s\", netbox)\n        return True\n\n    router_ports = prefix.get_router_ports()\n    if router_ports:\n        router_port = router_ports[0]\n    else:\n        _logger.warning(\"couldn't find router ports for %s\", prefix)\n        return True\n\n    router = router_port.interface.netbox\n    _logger.debug(\n        \"reachability check for %s on %s (router: %s)\", netbox, prefix, router\n    )\n\n    graph = get_graph_for_vlan(prefix.vlan)\n    try:\n        netbox.add_to_graph(graph)\n    except AttributeError:\n        pass\n\n    # first, see if any path exists\n    if not _path_exists(graph, netbox, router):\n        _logger.warning(\n            \"cannot find a path between %s and %s on VLAN %s\",\n            netbox,\n            router,\n            prefix.vlan,\n        )\n        return True\n\n    # now, remove nodes that are down and see if a path still exists\n    strip_down_nodes_from_graph(graph, keep=netbox)\n\n    if netbox not in graph or router not in graph:\n        if router.up == router.UP_UP:\n            _logger.warning(\n                \"%(netbox)s topology problem: router %(router)s \"\n                \"is up, but not in VLAN graph for %(prefix)r. \"\n                \"Defaulting to 'reachable' status.\",\n                locals(),\n            )\n            return True\n        _logger.debug(\n            \"%s not reachable, router or box not in graph: %r\", netbox, graph.edges()\n        )\n        return False\n\n    try:\n        path = networkx.shortest_path(graph, netbox, router)\n    except NetworkXException as error:\n        _logger.debug(\n            \"an internal networkx exception was raised in \"\n            \"shortest_path, assuming no path was found: %s\",\n            error,\n        )\n        path = []\n    else:\n        _logger.debug(\"path to %s: %r\", netbox, path)\n    return path\n\n\ndef _path_exists(graph, source, target):\n    try:\n        path = networkx.shortest_path(graph, source, target)\n    except NetworkXException:\n        path = []\n    return bool(path)\n\n\ndef get_graph_for_vlan(vlan):\n    \"\"\"Builds a simple topology graph of the active netboxes in vlan.\n\n    Any netbox that seems to be down at the moment will not be included in\n    the graph.\n\n    :returns: A networkx.Graph object.\n\n    \"\"\"\n    swpvlan = SwPortVlan.objects.filter(vlan=vlan).select_related(\n        'interface',\n        'interface__netbox',\n        'interface__to_netbox',\n        'interface__to_interface',\n    )\n    graph = networkx.MultiGraph(name='graph for vlan %s' % vlan)\n    for swp in swpvlan:\n        source = swp.interface.netbox\n        source_ifc = swp.interface\n        target = swp.interface.to_netbox\n        target_ifc = swp.interface.to_interface\n        if target:\n            # ensure key ordering is always consistent:\n            key = tuple(\n                sorted(\n                    (\n                        source_ifc.id,\n                        target_ifc.id if target_ifc else None,\n                    ),\n                    key=lambda x: x if x else 0,\n                )\n            )\n            data = {source_ifc, target_ifc}\n            graph.add_edge(source, target, key=key, data=data)\n    return graph\n\n\ndef strip_down_nodes_from_graph(graph, keep=None):\n    \"\"\"Strips all nodes (netboxes) from graph that are currently down.\n\n    :param keep: A node to keep regardless of its current status.\n\n    \"\"\"\n    removable = set(\n        node for node in graph.nodes() if node.up != node.UP_UP and node != keep\n    )\n    graph.remove_nodes_from(removable)\n    return len(removable)\n\n\ndef strip_down_links_from_graph(graph):\n    \"\"\"Strips all edges (links) from graph where any of the involved\n    interfaces are down.\n\n    \"\"\"\n\n    def _is_down(data):\n        ifcs = data.get('data', [])\n        return any(ifc and ifc.ifoperstatus == ifc.OPER_DOWN for ifc in ifcs)\n\n    removable = set(\n        (u, v, key)\n        for u, v, key, data in graph.edges(data=True, keys=True)\n        if _is_down(data)\n    )\n    graph.remove_edges_from(removable)\n    return len(removable)\n\n\n###\n### Functions for locating the NAV server itself\n###\n\n\nclass NAVServer(object):\n    \"\"\"A simple mockup of a Netbox representing the NAV server itself\"\"\"\n\n    UP_UP = Netbox.UP_UP\n\n    @classmethod\n    def make_for(cls, dest):\n        \"\"\"Creates a NAVServer instance with the source IP address of the\n        local host used for routing traffic to dest.\n\n        :param dest: An IP address\n        \"\"\"\n\n        ipaddr = get_source_address_for(dest)\n        if ipaddr:\n            return cls(ipaddr)\n\n    def __init__(self, ip):\n        self.sysname = \"NAV\"\n        self.ip = ip\n        self.up = Netbox.UP_UP\n\n    def get_prefix(self):\n        \"\"\"Gets the prefix for the NAV servers ip\"\"\"\n        matches = Prefix.objects.contains_ip(self.ip)\n        if matches:\n            return matches[0]\n\n    def add_to_graph(self, graph):\n        \"\"\"Adds edge between myself and all neighboring switches\"\"\"\n        for switch in self.get_switches_from_cam():\n            graph.add_edge(self, switch)\n\n    def get_switches_from_cam(self):\n        \"\"\"Gets all neighboring switches\"\"\"\n        mac = self.get_mac_from_arp()\n        if mac:\n            records = Cam.objects.filter(\n                mac=mac, end_time__gte=datetime.datetime.max\n            ).select_related('netbox')\n            return list(set(cam.netbox for cam in records))\n        else:\n            return []\n\n    def get_mac_from_arp(self):\n        \"\"\"Finds the NAV server's MAC address based on its IP address\"\"\"\n        arp = Arp.objects.extra(where=['ip = %s'], params=[self.ip]).filter(\n            end_time__gte=datetime.datetime.max\n        )\n        if arp:\n            return arp[0].mac\n\n    def __repr__(self):\n        return \"{self.__class__.__name__}({self.ip!r})\".format(self=self)\n\n\ndef get_source_address_for(dest):\n    \"\"\"Gets the source IP address used by this host when attempting to\n    contact the destination host.\n\n    :param dest: An IP address string.\n    :return: And IP address string, or None if no address was found.\n\n    \"\"\"\n    family, sockaddr = _get_target_dgram_addr(dest)\n    sock = socket.socket(family, socket.SOCK_DGRAM)\n    try:\n        sock.connect(sockaddr)\n    except socket.error as err:\n        _logger.warning(\n            \"Error when getting NAV's source address for connecting to %s: %s\",\n            dest,\n            err,\n        )\n        return\n    addrinfo = sock.getsockname()\n    sock.close()\n    return addrinfo[0]\n\n\ndef _get_target_dgram_addr(target):\n    \"\"\"Returns a (family, sockaddr) tuple for the target address for\n    a SOCK_DGRAM socket type.\n\n    \"\"\"\n    for family, socktype, _proto, _canonname, sockaddr in socket.getaddrinfo(target, 1):\n        if socktype == socket.SOCK_DGRAM:\n            return family, sockaddr\n"
  },
  {
    "path": "python/nav/eventengine/unresolved.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Loading and caching of unresolved alert states from the database\"\"\"\n\nimport logging\n\nfrom nav.models.event import AlertHistory\nfrom nav.models.fields import INFINITY\n\n_logger = logging.getLogger(__name__)\n_unresolved_alerts_map = {}\n\n\ndef get_map():\n    \"\"\"Returns a cached dictionary of unresolved AlertHistory entries\"\"\"\n    return _unresolved_alerts_map\n\n\ndef update():\n    \"\"\"Updates the map of unresolved alerts from the database\"\"\"\n    global _unresolved_alerts_map\n    unresolved = AlertHistory.objects.filter(end_time__gte=INFINITY)\n    _unresolved_alerts_map = dict((alert.get_key(), alert) for alert in unresolved)\n\n\ndef refers_to_unresolved_alert(event):\n    \"\"\"Verifies whether an event appears to refer to a currently\n    unresolved alert state.\n\n    :returns: An AlertHistory object for the matched unresolved alert,\n              or False if none was found.\n\n    \"\"\"\n    try:\n        result = _unresolved_alerts_map[event.get_key()]\n        return result\n    except KeyError:\n        _logger.debug(\n            \"no match for (%r) %r among list of unresolved alerts\",\n            event.get_key(),\n            event,\n        )\n        _logger.debug(\"unresolved map contains: %r\", _unresolved_alerts_map)\n        return False\n"
  },
  {
    "path": "python/nav/ip.py",
    "content": "#\n# Copyright (C) 2017, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThis module exists only to work around deficiencies in IPy, but could\npotentially evolve to become a facade for other modules in the event of a\ntransition away from the IPy library.\n\"\"\"\n\nimport IPy\n\n\nclass IP(IPy.IP):\n    \"\"\"Class for handling IP addresses and networks.\"\"\"\n\n    # Stupid IPy.IP will refuse to be compared with other types,\n    # which makes sorting of various dictionaries for pretty printing\n    # and such nigh-on impossible. Here we make some workarounds for this.\n\n    def __cmp__(self, other):\n        \"\"\"Overrides IPy.IP's __cmp__, which us used by all its rich comparison\n        operators, even though Python no longer consults __cmp__ directly.\n        \"\"\"\n        try:\n            return super(IP, self).__cmp__(other)\n        except TypeError:\n            return (self.ip > other) - (self.ip < other)\n\n    def __eq__(self, other):\n        try:\n            return super(IP, self).__eq__(other)\n        except TypeError:\n            return False\n\n    def __hash__(self):\n        return super(IP, self).__hash__()\n"
  },
  {
    "path": "python/nav/ipdevpoll/__init__.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV subsystem for IP device polling.\n\nPackages:\n\n  plugins -- polling plugin system\n\n\"\"\"\n\nfrom nav.models import manage\nfrom nav.ipdevpoll.config import IpdevpollConfig\nfrom .log import ContextLogger, ContextFormatter\n\n__all__ = [\"ContextFormatter\", \"IpdevpollConfig\", \"Plugin\"]\n\n\nclass Plugin(object):\n    \"\"\"Abstract class providing common functionality for all polling plugins.\n\n    Do *NOT* create instances of the base class.\n\n    \"\"\"\n\n    _logger = ContextLogger()\n    RESTRICT_TO_VENDORS = []\n\n    def __init__(self, netbox, agent, containers, config: IpdevpollConfig = None):\n        \"\"\"\n\n        :type netbox: nav.ipdevpoll.shadows.Netbox\n        :type agent: nav.ipdevpoll.snmp.AgentProxy\n        :type containers: nav.ipdevpoll.storage.ContainerRepository\n        :type config: configparser.ConfigParser\n        \"\"\"\n        self.netbox = netbox\n        self.agent = agent\n        self.containers = containers\n        self.config = config\n        # touch _logger to initialize logging context right away\n        self._logger\n\n    def __str__(self):\n        return '%s(%s)' % (self.full_name(), repr(self.netbox.sysname))\n\n    def __repr__(self):\n        return '%s(%s)' % (self.full_name(), repr(self.netbox))\n\n    def handle(self):\n        \"\"\"Handle plugin business, return a deferred.\"\"\"\n        raise NotImplementedError\n\n    @classmethod\n    def can_handle(cls, netbox):\n        \"\"\"Verifies whether this plugin can/wants to handle polling for this\n        netbox instance at this time.\n\n        The base implementation returns True as long as the Netbox' SNMP agent\n        is not known to be down and it has a configured SNMP community;\n        plugins must override this method if their requirements are different.\n\n        :returns: A boolean value.\n        \"\"\"\n        snmp_up = getattr(netbox, 'snmp_up', True)\n\n        basic_req = netbox.is_up() and snmp_up and bool(netbox.snmp_parameters)\n        vendor_check = cls._verify_vendor_restriction(netbox)\n        return basic_req and vendor_check\n\n    @classmethod\n    def _verify_vendor_restriction(cls, netbox):\n        if cls.RESTRICT_TO_VENDORS:\n            return (\n                netbox.type\n                and netbox.type.get_enterprise_id() in cls.RESTRICT_TO_VENDORS\n            )\n        else:\n            return True\n\n    @classmethod\n    def on_plugin_load(cls):\n        \"\"\"Called as the plugin class is loaded in the plugin registry.\n\n        Can be used to perform any kind of initialization task that\n        doesn't fit into module-level initialization.\n\n        \"\"\"\n        pass\n\n    def name(self):\n        \"\"\"Return the class name of this instance.\"\"\"\n        return self.__class__.__name__\n\n    def full_name(self):\n        \"\"\"Return the full module and class name of this instance.\"\"\"\n        return \"%s.%s\" % (self.__class__.__module__, self.__class__.__name__)\n\n    def _get_netbox_list(self):\n        \"\"\"Returns a list of netbox names to make metrics for. Will return just\n        the one netbox in most instances, but for situations with multiple\n        virtual device contexts, all the subdevices will be returned.\n\n        \"\"\"\n        netboxes = [self.netbox.sysname]\n        instances = manage.Netbox.objects.filter(master=self.netbox.id).values_list(\n            'sysname', flat=True\n        )\n        netboxes.extend(instances)\n        self._logger.debug(\"duplicating metrics for these netboxes: %s\", netboxes)\n        return netboxes\n"
  },
  {
    "path": "python/nav/ipdevpoll/config.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2012 Uninett AS\n# Copyright (C) 2020 Universitetet i Oslo\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll configuration management\"\"\"\n\nimport logging\n\nfrom nav.config import ConfigurationError, NAVConfigParser\nfrom nav.util import parse_interval\n\n_logger = logging.getLogger(__name__)\nJOB_PREFIX = 'job_'\n\n\nclass IpdevpollConfig(NAVConfigParser):\n    \"\"\"ipdevpoll config parser\"\"\"\n\n    DEFAULT_CONFIG_FILES = ('ipdevpoll.conf',)\n    DEFAULT_CONFIG = \"\"\"\n[ipdevpoll]\nlogfile = ipdevpolld.log\nmax_concurrent_jobs = 500\n\n[netbox_filters]\ngroups_included=\ngroups_excluded=\n\n[snmp]\ntimeout = 1.5\nmax-repetitions = 10\n\n[multiprocess]\nping_workers = true\nping_interval = 30\nping_timeout = 10\n\n[plugins]\n\n[jobs]\n\n[prefix]\nignored = <<=127.0.0.0/8, <<=fe80::/16, =128.0.0.0/2\n\n[linkstate]\nfilter = topology\n\n[bgp]\nalert_ibgp = yes\n\n[interfaces]\nalways_use_ifhighspeed = false\n\n[sensors]\nloadmodules = nav.mibs.*\n\n[sensors:vendormibs]\n* = ENTITY-SENSOR-MIB UPS-MIB\nCISCOSYSTEMS = ENTITY-SENSOR-MIB CISCO-ENTITY-SENSOR-MIB CISCO-ENVMON-MIB\nHEWLETT_PACKARD = ENTITY-SENSOR-MIB\nAMERICAN_POWER_CONVERSION_CORP = PowerNet-MIB\nEMERSON_COMPUTER_POWER = UPS-MIB\nEATON_CORPORATION = XUPS-MIB\nMERLIN_GERIN = MG-SNMP-UPS-MIB\nIT_WATCHDOGS_INC = IT-WATCHDOGS-MIB-V3 IT-WATCHDOGS-MIB ItWatchDogsMibV4\nGEIST_MANUFACTURING_INC = GEIST-MIB-V3 GeistMibV4\nCOMET_SYSTEM_SRO = P8652-MIB COMETMS-MIB T3611-MIB\nKCP_INC = SPAGENT-MIB\nELTEK_ENERGY_AS = ELTEK-DISTRIBUTED-MIB\nEATON_WILLIAMS = CD6C\nRARITAN_COMPUTER_INC = PDU2-MIB\nIBM = IBM-PDU-MIB\nRITTAL_WERK_RUDOLF_LOH_GMBH_COKG = RITTAL-CMC-III-MIB\nJUNIPER_NETWORKS_INC = ENTITY-SENSOR-MIB JUNIPER-DOM-MIB JUNIPER-MIB\nSUPERIOR_POWER_SOLUTIONS_HK_COLTD = Pwt3PhaseV1Mib\nALCATEL_LUCENT_ENTERPRISE_FORMERLY_ALCATEL = ALCATEL-IND1-PORT-MIB\nCOMPAQ = CPQPOWER-MIB\nCORIANT_RD_GMBH = CORIANT-GROOVE-MIB\n\"\"\"\n\n\ndef get_job_descriptions(config=None):\n    \"\"\"Builds a dict of all job descriptions\"\"\"\n    return {d.name.replace(JOB_PREFIX, ''): d.description for d in get_jobs(config)}\n\n\ndef get_jobs(config=None):\n    \"\"\"Returns a list of JobDescriptors for each of the jobs configured in\n    ipdevpoll.conf\n\n    \"\"\"\n    if config is None:\n        config = ipdevpoll_conf\n\n    job_sections = get_job_sections(config)\n    job_descriptors = [\n        JobDescriptor.from_config_section(config, section) for section in job_sections\n    ]\n    _logger.debug(\"parsed jobs from config file: %r\", [j.name for j in job_descriptors])\n    return job_descriptors\n\n\ndef get_job_sections(config):\n    \"\"\"Find all job sections in a config file\"\"\"\n    return [s for s in config.sections() if s.startswith(JOB_PREFIX)]\n\n\ndef get_netbox_filter(section, config=None):\n    \"\"\"Get the requested netbox filter as list\"\"\"\n    if config is None:\n        config = ipdevpoll_conf\n\n    netbox_filters = ipdevpoll_conf.get('netbox_filters', section)\n\n    if netbox_filters:\n        return netbox_filters.split()\n    return []\n\n\nclass JobDescriptor(object):\n    \"\"\"A data structure describing a job.\"\"\"\n\n    def __init__(self, name, interval, intensity, plugins, description=''):\n        self.name = str(name)\n        self.interval = int(interval)\n        self.intensity = int(intensity)\n        self.plugins = list(plugins)\n        self.description = description\n\n    @classmethod\n    def from_config_section(cls, config, section):\n        \"\"\"Creates a JobDescriptor from a ConfigParser section\"\"\"\n        if section.startswith(JOB_PREFIX):\n            jobname = section.removeprefix(JOB_PREFIX)\n        else:\n            raise InvalidJobSectionName(section)\n\n        interval = parse_interval(config.get(section, 'interval'))\n        if interval < 1:\n            raise ValueError(\n                \"Interval for job %s is too short: %s\"\n                % (jobname, config.get(section, 'interval'))\n            )\n\n        intensity = (\n            config.getint(section, 'intensity')\n            if config.has_option(section, 'intensity')\n            else 0\n        )\n\n        plugins = _parse_plugins(config.get(section, 'plugins'))\n        if not plugins:\n            raise ValueError(\"Plugin list for job %s is empty\" % jobname)\n\n        description = (\n            _parse_description(config.get(section, 'description'))\n            if config.has_option(section, 'description')\n            else ''\n        )\n\n        return cls(jobname, interval, intensity, plugins, description)\n\n\ndef _parse_plugins(value):\n    if value:\n        return value.split()\n\n    return []\n\n\ndef _parse_description(descr):\n    if descr:\n        return descr.replace('\\n', ' ').strip()\n\n\nclass InvalidJobSectionName(ConfigurationError):\n    \"\"\"Section name is invalid as a job section\"\"\"\n\n\nipdevpoll_conf = IpdevpollConfig()\n"
  },
  {
    "path": "python/nav/ipdevpoll/control.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"Process control for multi-process invocation of ipdevpoll\"\n\nimport sys\n\n\ndef get_process_command():\n    \"Tries to return the path to the current executable\"\n    return sys.argv[0]\n"
  },
  {
    "path": "python/nav/ipdevpoll/daemon.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll daemon.\n\nThis is the daemon program that runs the IP device poller.\n\n\"\"\"\n\nimport sys\nimport os\nimport logging\nfrom multiprocessing import cpu_count\nimport signal\nimport time\nimport argparse\n\nimport twisted\nfrom twisted.internet import reactor\nfrom twisted.internet.defer import maybeDeferred, setDebugging\nfrom twisted.python.failure import Failure\n\nfrom nav import buildconf\nfrom nav.config import NAV_CONFIG\nfrom nav.util import is_valid_ip\nimport nav.daemon\nfrom nav.daemon import signame\nimport nav.logs\nfrom nav.models import manage\n\nfrom nav.ipdevpoll import ContextFormatter, schedule, db\nfrom . import plugins, pool\n\n\nclass NetboxAction(argparse.Action):\n    def __call__(self, parser, namespace, values, option_string=None):\n        if not values:\n            parser.error(\"%s argument must be non-empty\" % option_string)\n\n        search_base = manage.Netbox.objects.select_related(\n            'type', 'type__vendor'\n        ).order_by('sysname')\n        if is_valid_ip(values, strict=True):\n            matches = search_base.filter(ip=values)\n        else:\n            matches = search_base.filter(sysname__startswith=values)\n\n        if len(matches) == 1:\n            namespace.netbox = matches[0]\n            namespace.foreground = True\n            namespace.logstderr = True\n            return\n        elif len(matches) > 1:\n            print(\"matched more than one netbox:\")\n            print('\\n'.join(\"%s (%s)\" % (n.sysname, n.ip) for n in matches))\n        else:\n            print(\"no netboxes match %r\" % values)\n\n        sys.exit(1)\n\n\nclass IPDevPollProcess(object):\n    \"\"\"Main IPDevPoll process setup\"\"\"\n\n    def __init__(self, options):\n        self.options = options\n        self._logger = logging.getLogger('nav.ipdevpoll')\n        self._shutdown_start_time = 0\n        self.job_loggers = []\n        self.reloaders = []\n\n    def run(self):\n        \"\"\"Loads plugins, and initiates polling schedules.\"\"\"\n        reactor.callWhenRunning(self.install_sighandlers)\n\n        if self.options.netbox:\n            self.setup_single_job()\n        elif self.options.multiprocess:\n            self.setup_multiprocess(self.options.multiprocess, self.options.max_jobs)\n        elif self.options.worker:\n            self.setup_worker()\n        else:\n            self.setup_scheduling()\n\n        reactor.suggestThreadPoolSize(self.options.threadpoolsize)\n        reactor.addSystemEventTrigger(\"after\", \"shutdown\", self.shutdown)\n        reactor.run()\n\n    def install_sighandlers(self):\n        \"Installs ipdevpoll's own signal handlers\"\n        if not self.options.foreground:\n            signal.signal(signal.SIGHUP, self.sighup_handler)\n        signal.signal(signal.SIGTERM, self.sigterm_handler)\n        signal.signal(signal.SIGINT, self.sigterm_handler)\n        signal.signal(signal.SIGUSR1, self.sigusr1_handler)\n        signal.signal(signal.SIGUSR2, self.sigusr2_handler)\n\n    def setup_scheduling(self):\n        \"Sets up regular job scheduling according to config\"\n        # NOTE: This is locally imported because it will in turn import\n        # twistedsnmp. Twistedsnmp is stupid enough to call\n        # logging.basicConfig().  If imported before our own loginit, this\n        # causes us to have two StreamHandlers on the root logger, duplicating\n        # every log statement.\n        self._logger.info(\"Starting scheduling in single process\")\n        from .schedule import JobScheduler\n\n        plugins.import_plugins()\n        self.work_pool = pool.InlinePool()\n        reactor.callWhenRunning(\n            JobScheduler.initialize_from_config_and_run,\n            self.work_pool,\n            self.options.onlyjob,\n        )\n        db.delete_stale_job_refresh_notifications()\n        reactor.callWhenRunning(\n            db.subscribe_to_event_notifications, schedule.handle_incoming_events\n        )\n\n        def log_scheduler_jobs():\n            JobScheduler.log_active_jobs(logging.INFO)\n\n        self.job_loggers.append(log_scheduler_jobs)\n\n        def reload_netboxes():\n            JobScheduler.reload()\n\n        self.reloaders.append(reload_netboxes)\n\n    def setup_worker(self):\n        \"Sets up a worker process\"\n        # NOTE: This is locally imported because it will in turn import\n        # twistedsnmp. Twistedsnmp is stupid enough to call\n        # logging.basicConfig().  If imported before our own loginit, this\n        # causes us to have two StreamHandlers on the root logger, duplicating\n        # every log statement.\n        self._logger.info(\"Starting worker process\")\n        plugins.import_plugins()\n\n        def init():\n            handler = pool.initialize_worker()\n            self.job_loggers.append(handler.log_jobs)\n\n        reactor.callWhenRunning(init)\n\n    def setup_single_job(self):\n        \"Sets up a single job run with exit when done\"\n        from .jobs import JobHandler\n        from . import config\n\n        def _run_job():\n            descriptors = dict((d.name, d) for d in config.get_jobs())\n            job = descriptors[self.options.onlyjob]\n            self._log_context = dict(job=job.name, sysname=self.options.netbox.sysname)\n            job_handler = JobHandler(\n                job.name,\n                self.options.netbox.id,\n                plugins=job.plugins,\n                interval=job.interval,\n            )\n            deferred = maybeDeferred(job_handler.run)\n            deferred.addBoth(_log_job, job_handler, interval=job.interval)\n            deferred.addBoth(lambda x: reactor.stop())\n\n        def _log_job(result, handler, interval):\n            success = not isinstance(result, Failure)\n            schedule.log_job_externally(handler, success if result else None, interval)\n\n        plugins.import_plugins()\n        self._logger.info(\n            \"Running single %r job for %s\", self.options.onlyjob, self.options.netbox\n        )\n        reactor.callWhenRunning(_run_job)\n\n    def setup_multiprocess(self, process_count, max_jobs):\n        self._logger.info(\"Starting multi-process setup\")\n        from .schedule import JobScheduler\n\n        plugins.import_plugins()\n        self.work_pool = pool.WorkerPool(\n            process_count, max_jobs, self.options.threadpoolsize\n        )\n        reactor.callWhenRunning(\n            JobScheduler.initialize_from_config_and_run,\n            self.work_pool,\n            self.options.onlyjob,\n        )\n        db.delete_stale_job_refresh_notifications()\n        reactor.callWhenRunning(\n            db.subscribe_to_event_notifications, schedule.handle_incoming_events\n        )\n\n        def log_scheduler_jobs():\n            JobScheduler.log_active_jobs(logging.INFO)\n\n        self.job_loggers.append(log_scheduler_jobs)\n        self.job_loggers.append(self.work_pool.log_summary)\n\n        def reload_netboxes():\n            JobScheduler.reload()\n\n        self.reloaders.append(reload_netboxes)\n\n    def sighup_handler(self, _signum, _frame):\n        \"\"\"Reopens log files.\"\"\"\n        self._logger.info(\"SIGHUP received; reopening log files\")\n        nav.logs.reopen_log_files()\n        nav.daemon.redirect_std_fds(stderr=nav.logs.get_logfile_from_logger())\n        nav.logs.reset_log_levels()\n        nav.logs.set_log_config()\n        self._logger.info(\"Log files reopened, log levels reloaded.\")\n\n    def sigterm_handler(self, signum, _frame):\n        \"\"\"Cleanly shuts down logging system and the reactor.\"\"\"\n        self._logger.warning(\"%s received: Shutting down\", signame(signum))\n        self._shutdown_start_time = time.time()\n        reactor.callFromThread(reactor.stop)\n\n    def sigusr1_handler(self, _signum, _frame):\n        \"Log list of active jobs on SIGUSR1\"\n        self._logger.info(\"SIGUSR1 received: Logging active jobs\")\n        for logger in self.job_loggers:\n            logger()\n\n    def sigusr2_handler(self, _signum, _frame):\n        \"Reload boxes from database\"\n        self._logger.info(\"SIGUSR2 received: Reloading netboxes\")\n        for reloader in self.reloaders:\n            reloader()\n\n    def shutdown(self):\n        \"\"\"Initiates a shutdown sequence\"\"\"\n        self._log_shutdown_time()\n        logging.shutdown()\n\n    def _log_shutdown_time(self):\n        if self._shutdown_start_time > 0:\n            sequence_time = time.time() - self._shutdown_start_time\n            self._logger.warning(\n                \"Shutdown sequence completed in %.02f seconds\", sequence_time\n            )\n\n\nclass CommandProcessor(object):\n    \"\"\"Processes the command line and starts ipdevpoll.\"\"\"\n\n    pidfile = 'ipdevpolld.pid'\n\n    def __init__(self):\n        self.options = self.parse_options()\n        self._logger = None\n\n    def parse_options(self):\n        \"\"\"Parses the command line options\"\"\"\n        parser = self.make_option_parser()\n        options = parser.parse_args()\n        if options.list_jobs:\n            self._list_jobs()\n        if options.list_plugins:\n            self._list_plugins()\n        if options.logstderr and not options.foreground:\n            parser.error('-s is only valid if running in foreground')\n        if options.netbox and not options.onlyjob:\n            parser.error('specifying a netbox requires the -J option')\n        if options.multiprocess:\n            options.pidlog = True\n        if options.capture_vars:\n            setDebugging(True)\n        if options.multiprocess and options.multiprocess < 2:\n            parser.error('--multiprocess requires at least 2 workers')\n\n        return options\n\n    def make_option_parser(self):\n        \"\"\"Sets up and returns a command line option parser.\"\"\"\n        parser = argparse.ArgumentParser(\n            epilog=\"This program runs SNMP polling jobs for IP devices monitored by NAV\"\n        )\n        opt = parser.add_argument\n\n        opt('--version', action='version', version='NAV ' + buildconf.VERSION)\n        opt(\n            \"-f\",\n            \"--foreground\",\n            action=\"store_true\",\n            dest=\"foreground\",\n            help=\"run in foreground instead of daemonizing\",\n        )\n        opt(\n            \"-s\",\n            \"--log-stderr\",\n            action=\"store_true\",\n            dest=\"logstderr\",\n            help=\"log to stderr instead of log file\",\n        )\n        opt(\n            \"-j\",\n            \"--list-jobs\",\n            action=\"store_true\",\n            help=\"print a list of configured jobs and exit\",\n        )\n        opt(\n            \"-p\",\n            \"--list-plugins\",\n            action=\"store_true\",\n            help=\"load and print a list of configured plugins\",\n        )\n        opt(\n            \"-J\",\n            action=\"store\",\n            dest=\"onlyjob\",\n            choices=self._joblist(),\n            metavar=\"JOBNAME\",\n            help=\"run only JOBNAME jobs in this process\",\n        )\n        opt(\n            \"-n\",\n            \"--netbox\",\n            action=NetboxAction,\n            metavar=\"NETBOX\",\n            help=\"Run JOBNAME once for NETBOX. Also implies -f and -s options.\",\n        )\n        opt(\n            \"-m\",\n            \"--multiprocess\",\n            type=int,\n            dest=\"multiprocess\",\n            nargs='?',\n            const=cpu_count(),\n            metavar='WORKERS',\n            help=\"Run ipdevpoll in a multiprocess setup. If WORKERS is not set \"\n            \"it will default to number of cpus in the system\",\n        )\n        opt(\n            \"-M\",\n            \"--max-jobs-per-worker\",\n            type=int,\n            dest=\"max_jobs\",\n            metavar=\"JOBS\",\n            help=\"Restart worker processes after completing \"\n            \"JOBS jobs. (Default: Don't restart)\",\n        )\n        opt(\n            \"-P\",\n            \"--pidlog\",\n            action=\"store_true\",\n            dest=\"pidlog\",\n            help=\"Include process ID in every log line\",\n        )\n        opt(\n            \"--capture-vars\",\n            action=\"store_true\",\n            dest=\"capture_vars\",\n            help=\"Capture and print locals and globals in tracebacks when \"\n            \"debug logging\",\n        )\n        opt(\n            \"-c\",\n            \"--clean\",\n            action=\"store_true\",\n            dest=\"clean\",\n            help=\"cleans/purges old job log entries from the database and then exits\",\n        )\n        opt(\n            \"--threadpoolsize\",\n            action=\"store\",\n            dest=\"threadpoolsize\",\n            metavar=\"COUNT\",\n            type=int,\n            default=10,\n            help=\"the number of database worker threads, and thus db \"\n            \"connections, to use in this process\",\n        )\n        opt(\n            \"--worker\",\n            action=\"store_true\",\n            help=\"Used internally when lauching worker processes\",\n        )\n        return parser\n\n    def run(self):\n        \"\"\"Runs an ipdevpoll process\"\"\"\n        self.init_logging(self.options.logstderr)\n        self._logger = logging.getLogger('nav.ipdevpoll')\n\n        if self.options.clean:\n            self._logger.debug(\"purging old job log entries\")\n            db.purge_old_job_log_entries()\n            sys.exit(0)\n        if self.options.multiprocess:\n            self._logger.info(\"--- Starting ipdevpolld multiprocess master ---\")\n        elif self.options.onlyjob:\n            self._logger.info(\"--- Starting ipdevpolld %s ---\", self.options.onlyjob)\n        else:\n            self._logger.info(\"--- Starting ipdevpolld ---\")\n\n        if not self.options.foreground:\n            self.exit_if_already_running()\n            self.daemonize()\n            nav.logs.reopen_log_files()\n            self._logger.info(\"ipdevpolld now running in the background\")\n\n        self.start_ipdevpoll()\n\n    def init_logging(self, stderr_only=False):\n        \"\"\"Initializes ipdevpoll logging for the current process.\"\"\"\n        observer = twisted.python.log.PythonLoggingObserver()\n        observer.start()\n\n        formatter = ContextFormatter(self.options.pidlog)\n\n        logfile_name = None\n        if not stderr_only:\n            # Now try to load config and output logs to the configured file\n            # instead.\n            from nav.ipdevpoll import config\n\n            logfile_name = config.ipdevpoll_conf.get('ipdevpoll', 'logfile')\n            if not logfile_name.startswith(os.sep):\n                logfile_name = os.path.join(NAV_CONFIG['LOG_DIR'], logfile_name)\n\n        nav.logs.init_generic_logging(\n            logfile=logfile_name,\n            stderr=stderr_only,\n            formatter=formatter,\n            read_config=True,\n        )\n\n        if not stderr_only:\n            nav.daemon.redirect_std_fds(stderr=nav.logs.get_logfile_from_logger())\n\n    def exit_if_already_running(self):\n        \"\"\"Exits the process if another ipdevpoll daemon is already running\"\"\"\n        try:\n            nav.daemon.justme(self.pidfile)\n        except nav.daemon.DaemonError as error:\n            self._logger.error(error)\n            sys.exit(1)\n\n    def daemonize(self):\n        \"\"\"Puts the ipdevpoll process in the background\"\"\"\n        try:\n            nav.daemon.daemonize(\n                self.pidfile, stderr=nav.logs.get_logfile_from_logger()\n            )\n        except nav.daemon.DaemonError as error:\n            self._logger.error(error)\n            sys.exit(1)\n\n    def start_ipdevpoll(self):\n        \"\"\"Creates an ipdevpoll process and runs it\"\"\"\n        process = IPDevPollProcess(self.options)\n        process.run()\n\n    @staticmethod\n    def _joblist():\n        from nav.ipdevpoll.config import get_jobs\n\n        jobs = sorted(job.name for job in get_jobs())\n        return jobs\n\n    @staticmethod\n    def _list_jobs(*_args, **_kwargs):\n        from nav.ipdevpoll.config import get_jobs\n\n        jobs = sorted(job.name for job in get_jobs())\n        print('\\n'.join(jobs))\n        sys.exit()\n\n    @staticmethod\n    def _list_plugins(*_args, **_kwargs):\n        plugins.import_plugins()\n        print('\\n'.join(sorted(plugins.plugin_registry.keys())))\n        sys.exit()\n\n\ndef main():\n    \"\"\"Main execution function\"\"\"\n    processor = CommandProcessor()\n    processor.run()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/ipdevpoll/dataloader.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2012 Uninett AS\n# Copyright (C) 2020 Universitetet i Oslo\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll seed data loading.\n\nTo perform its polling duties, the ipdevpoll system must know what\nnetboxes to poll, what type netboxes are and what vendors they come\nfrom.\n\nThis module contains functionality to periodically load from the\ndatabase and cache a list of Netboxes to poll.  It also loads and\ncaches Type and Vendor data.\n\nData is loaded synchronously from the database using Django models -\nthe model objects are \"shadowed\" using the shadows.Netbox class, so\nthat the resulting objects will be guaranteed to stay away from the\ndatabase during asynchronous operation.  The loading/reloading of data\nfrom the database can be executed in a separate thread to avoid\ninterfering with the daemon's asynchronous operations.\n\n\"\"\"\n\nfrom collections import defaultdict\nimport logging\n\nimport django.db\n\nfrom nav.models import manage, event\nfrom nav import ipdevpoll\nfrom nav.ipdevpoll.db import django_debug_cleanup, run_in_thread\nfrom nav.ipdevpoll.config import get_netbox_filter\nfrom . import storage\n\n\n_logger = logging.getLogger(__name__)\n\n\ndef load_netbox(netbox_id):\n    \"\"\"Loads a single Netbox from the database, converted to a Shadow object.\n\n    :param netbox_id: A Netbox integer primary key.\n    :type netbox_id: int\n    :rtype: nav.ipdevpoll.shadows.netbox.Netbox\n\n    \"\"\"\n    related = ('room__location', 'type__vendor', 'category', 'organization')\n    netbox = manage.Netbox.objects.select_related(*related).get(id=netbox_id)\n    return storage.shadowify(netbox)\n\n\nclass NetboxLoader(dict):\n    \"\"\"Loads netboxes from the database, synchronously or asynchronously.\n\n    Access as a dictionary to retrieve information about the loaded\n    netboxes.  The dictionary keys are netbox table primary keys, the\n    values are shadows.Netbox objects.\n\n    \"\"\"\n\n    _logger = ipdevpoll.ContextLogger()\n\n    def __init__(self):\n        super(NetboxLoader, self).__init__()\n        self.peak_count = 0\n        # touch _logger to initialize logging context right away\n        self._logger\n\n    def load_all_s(self):\n        \"\"\"Synchronously load netboxes from database.\n\n        Returns:\n\n          A three-tuple, (new_ids, lost_ids, changed_ids), whose elements are\n          sets of netbox IDs.\n\n          - The first set are IDs that a new since the last load operation.\n\n          - The second is the set of IDs that have been removed since the last\n            load operation.\n\n          - The third is the set of IDs of netboxes whose information have\n            changed in the database since the last load operation.\n\n        \"\"\"\n        related = ('room__location', 'type__vendor', 'category', 'organization')\n        snmp_down = set(\n            event.AlertHistory.objects.unresolved('snmpAgentState').values_list(\n                'netbox__id', flat=True\n            )\n        )\n        self._logger.debug(\"These netboxes have active snmpAgentStates: %r\", snmp_down)\n        queryset = manage.Netbox.objects.filter(deleted_at__isnull=True)\n\n        filter_groups_included = get_netbox_filter('groups_included')\n        if filter_groups_included:\n            queryset = queryset.filter(groups__id__in=filter_groups_included)\n\n        filter_groups_excluded = get_netbox_filter('groups_excluded')\n        if filter_groups_excluded:\n            queryset = queryset.exclude(groups__id__in=filter_groups_excluded)\n\n        queryset = list(queryset.select_related(*related))\n        for netbox in queryset:\n            netbox.snmp_up = netbox.id not in snmp_down\n        netbox_list = storage.shadowify_queryset(queryset)\n        netbox_dict = dict((netbox.id, netbox) for netbox in netbox_list)\n\n        times = load_last_updated_times()\n        for netbox in netbox_list:\n            netbox.last_updated = times.get(netbox.id, {})\n\n        django_debug_cleanup()\n\n        previous_ids = set(self.keys())\n        current_ids = set(netbox_dict.keys())\n        lost_ids = previous_ids.difference(current_ids)\n        new_ids = current_ids.difference(previous_ids)\n\n        same_ids = previous_ids.intersection(current_ids)\n        changed_ids = set(\n            i for i in same_ids if is_netbox_changed(self[i], netbox_dict[i])\n        )\n\n        # update self\n        for i in lost_ids:\n            del self[i]\n        for i in new_ids:\n            self[i] = netbox_dict[i]\n        for i in same_ids:\n            self[i].copy(netbox_dict[i])\n\n        self.peak_count = max(self.peak_count, len(self))\n\n        anything_changed = len(new_ids) or len(lost_ids) or len(changed_ids)\n        log = self._logger.info if anything_changed else self._logger.debug\n\n        log(\n            \"Loaded %d netboxes from database \"\n            \"(%d new, %d removed, %d changed, %d peak)\",\n            len(netbox_dict),\n            len(new_ids),\n            len(lost_ids),\n            len(changed_ids),\n            self.peak_count,\n        )\n\n        return (new_ids, lost_ids, changed_ids)\n\n    def load_all(self):\n        \"\"\"Asynchronously load netboxes from database.\"\"\"\n        return run_in_thread(self.load_all_s)\n\n\ndef is_netbox_changed(netbox1, netbox2):\n    \"\"\"Determine whether a netbox' information has changed enough to\n    warrant a schedule change.\n\n    \"\"\"\n    if netbox1.id != netbox2.id:\n        raise Exception(\"netbox1 and netbox2 do not represent the same netbox\")\n\n    for attr in (\n        'ip',\n        'type',\n        'up',\n        'snmp_up',\n        'snmp_parameters',\n        'deleted_at',\n    ):\n        if getattr(netbox1, attr) != getattr(netbox2, attr):\n            _logger.debug(\n                \"%s.%s changed from %r to %r\",\n                netbox1.sysname,\n                attr,\n                getattr(netbox1, attr),\n                getattr(netbox2, attr),\n            )\n            return True\n\n    # Switching from up_to_date to not up_to_date warrants a reload, but not\n    # the other way around.\n    if netbox1.up_to_date and not netbox2.up_to_date:\n        return True\n\n    return False\n\n\ndef load_last_updated_times():\n    \"\"\"Loads the last-successful timestamps of each job of each netbox\"\"\"\n    sql = \"\"\"SELECT\n               netboxid,\n               job_name,\n               MAX(end_time) AS end_time\n             FROM\n               ipdevpoll_job_log\n             WHERE\n               success\n             GROUP BY netboxid, job_name\n             \"\"\"\n    cursor = django.db.connection.cursor()\n    cursor.execute(sql)\n    times = defaultdict(dict)\n    for netboxid, job_name, end_time in cursor.fetchall():\n        times[netboxid][job_name] = end_time\n    return dict(times)\n"
  },
  {
    "path": "python/nav/ipdevpoll/db.py",
    "content": "#\n# Copyright (C) 2009-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Database related functionality for ipdevpoll.\"\"\"\n\nimport gc\nimport logging\nfrom pprint import pformat\nimport threading\nfrom functools import wraps\nfrom typing import Callable, Optional\n\nfrom twisted.internet import threads, reactor, abstract\nfrom twisted.internet.base import ReactorBase\nimport django.db\nfrom django.db import transaction\nfrom django.db.utils import OperationalError as DjangoOperationalError\nfrom django.db.utils import InterfaceError as DjangoInterfaceError\nfrom psycopg2 import InterfaceError, OperationalError\n\nfrom nav.models.event import EventQueue\n\n_logger = logging.getLogger(__name__)\n_query_logger = logging.getLogger(\".\".join((__name__, \"query\")))\n\n\nclass ResetDBConnectionError(Exception):\n    pass\n\n\ndef django_debug_cleanup():\n    \"\"\"Resets Django's list of logged queries.\n\n    When DJANGO_DEBUG is set to true, Django will log all generated SQL queries\n    in a list, which grows indefinitely.  This is ok for short-lived processes;\n    not so much for daemons.  We may want those queries in the short-term, but\n    in the long-term the ever-growing list is uninteresting and also bad.\n\n    This should be called once-in-a-while from every thread that has Django\n    database access, as the queries list is stored in thread-local data.\n\n    \"\"\"\n    query_count = len(django.db.connection.queries)\n    if query_count:\n        runtime = sum_django_queries_runtime()\n        thread = threading.current_thread()\n        _query_logger.debug(\n            \"Thread %s/%s: Removing %d logged Django queries (total time %.03f):\\n%s\",\n            thread.ident,\n            thread.name,\n            query_count,\n            runtime,\n            pformat(django.db.connection.queries),\n        )\n        django.db.reset_queries()\n        gc.collect()\n\n\ndef sum_django_queries_runtime():\n    \"\"\"Sums the runtime of all queries logged by django.db.connection.queries\"\"\"\n    runtimes = (float(query['time']) for query in django.db.connection.queries)\n    return sum(runtimes)\n\n\ndef cleanup_django_debug_after(func):\n    \"\"\"Decorates func such that django_debug_cleanup is run after func.\n\n    Even if func raises an exception, the cleanup will be run.\n\n    \"\"\"\n\n    def _cleanup(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        finally:\n            django_debug_cleanup()\n\n    return wraps(func)(_cleanup)\n\n\ndef run_in_thread(func, *args, **kwargs):\n    \"\"\"Runs a synchronous function in a thread, with special handling of\n    database errors.\n\n    \"\"\"\n    return threads.deferToThread(\n        reset_connection_on_interface_error(func), *args, **kwargs\n    )\n\n\ndef reset_connection_on_interface_error(func):\n    \"\"\"Decorates function to reset the current thread's Django database\n    connection on exceptions that appear to come from connection resets.\n\n    \"\"\"\n\n    def _reset(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except (\n            InterfaceError,\n            OperationalError,\n            DjangoInterfaceError,\n            DjangoOperationalError,\n        ) as error:\n            thread = threading.current_thread()\n            _logger.warning(\n                \"it appears this thread's database connection was \"\n                \"dropped, resetting it now - you may see further \"\n                \"errors about this until the situation is fully \"\n                \"resolved for all threads \"\n                \"(this thread is '%s', function was: %r, error was '%s')\",\n                thread.name,\n                func,\n                error,\n            )\n            django.db.connection.connection = None\n            raise ResetDBConnectionError(\"The database connection was reset\", error)\n\n    return wraps(func)(_reset)\n\n\ndef synchronous_db_access(func):\n    \"\"\"\n    Decorates a function to run in a separate thread for synchronous database\n    access\n    \"\"\"\n\n    def _thread_it(*args, **kwargs):\n        return run_in_thread(func, *args, **kwargs)\n\n    return wraps(func)(_thread_it)\n\n\n@transaction.atomic()\ndef purge_old_job_log_entries():\n    \"\"\"\n    Purges old job log entries from the ipdevpoll_job_log db table\n    \"\"\"\n    cursor = django.db.connection.cursor()\n    # Delete all but the last 100 entries of each netbox/job_name combination,\n    # ordered by timestamp\n    cursor.execute(\n        \"\"\"\n        WITH ranked AS (SELECT id, rank()\n                        OVER (PARTITION BY netboxid, job_name\n                              ORDER BY end_time DESC)\n                        FROM ipdevpoll_job_log)\n        DELETE FROM ipdevpoll_job_log USING ranked\n              WHERE ipdevpoll_job_log.id = ranked.id AND rank > 100;\n        \"\"\"\n    )\n\n\n@transaction.atomic()\ndef delete_stale_job_refresh_notifications():\n    \"\"\"Deletes stale job refresh events from the database, typically at process\n    startup time.\n\n    All events in the queue can be considered stale at process startup, since all\n    jobs will be re-run at startup anyway.\n    \"\"\"\n    count, _ = EventQueue.objects.filter(target='ipdevpoll').delete()\n    if count:\n        _logger.info(\n            \"Deleted %d stale job refresh notifications from the database\",\n            count,\n        )\n\n\ndef subscribe_to_event_notifications(trigger: Optional[Callable] = None):\n    \"\"\"Ensures the Django database connection in the calling thread is subscribed to\n    'new_event' notifications from PostgreSQL.  Notification events will be read by\n    an instance of PostgresNotifyReader, which is added to the Twisted reactor.\n\n    :param trigger: An optional callable trigger function that will be called from\n                    the main reactor thread whenever matching refresh notifications are\n                    received.\n    \"\"\"\n\n    cursor = django.db.connection.cursor()\n    cursor.execute(\"LISTEN new_event\")\n    django.db.connection.commit()\n    reader = PostgresNotifyReader(reactor, trigger)\n    _logger.debug(\n        \"Subscribed to new event notifications from thread %r\",\n        threading.current_thread(),\n    )\n    reactor.addReader(reader)\n\n\ndef resubscribe_to_event_notifications():\n    \"\"\"Removes any existing PostgresNotifyReader from the reactor and adds a new one,\n    re-using the trigger function of the first removed one.\n    \"\"\"\n    trigger = _remove_postgres_reader_and_get_its_trigger_function()\n\n    def retry_connect_loop():\n        \"\"\"Re-try event subscription every second, until the database connection has\n        been re-established.\n        \"\"\"\n        try:\n            subscribe_to_event_notifications(trigger)\n        except Exception as error:  # noqa: BLE001\n            _logger.debug(\n                \"unable to resubscribe to events (%s), retrying in 1 second\",\n                str(error).strip(),\n            )\n            reactor.callLater(1, retry_connect_loop)\n\n    reactor.callLater(1, retry_connect_loop)\n\n\ndef _remove_postgres_reader_and_get_its_trigger_function():\n    postgres_readers: list[PostgresNotifyReader] = [\n        reader\n        for reader in reactor.getReaders()\n        if isinstance(reader, PostgresNotifyReader)\n    ]\n    if not postgres_readers:\n        return\n    _logger.debug(\"Removing PostgresNotifyReaders: %r\", postgres_readers)\n    primary = postgres_readers[0]\n    for reader in postgres_readers:\n        reactor.removeReader(reader)\n\n    return primary.trigger\n\n\ndef resubscribe_on_connection_loss(func):\n    \"\"\"Decorates function to re-subscribe to event notifications in the event of a\n    connection loss.\n    \"\"\"\n\n    def _resubscribe(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except ResetDBConnectionError:\n            _thread = threading.current_thread()\n            _logger.debug(\"resubscribing to event notifications\")\n            resubscribe_to_event_notifications()\n\n    return wraps(func)(_resubscribe)\n\n\nclass PostgresNotifyReader(abstract.FileDescriptor):\n    \"\"\"Implements a FileDescriptor to act on PostgreSQL notifications asynchronously.\n\n    The LISTEN subscription is run on a random thread in the threadpool. However,\n    getting the doRead code to run in the same thread as the originating connection\n    is not really feasible with the API of the Twisted threadpool - so this is just\n    designed to keep on trying until it's run by a thread where it succeeds.\n    \"\"\"\n\n    def __init__(\n        self,\n        reactor: ReactorBase,\n        trigger: Optional[Callable] = None,\n    ):\n        \"\"\"Initialize a postgres notification reader.\n\n        :param reactor: The event reactor to use for scheduling\n        :param connection: The database connection object to poll for notifications\n        :param trigger: A trigger function to be called from the main reactor thread\n                        when a refresh  notifications is received.\n        \"\"\"\n        self.reactor = reactor\n        self.trigger = trigger\n        self._fileno = django.db.connection.connection.fileno()\n\n    def fileno(self):\n        return self._fileno\n\n    @resubscribe_on_connection_loss\n    @reset_connection_on_interface_error\n    def doRead(self):\n        _logger.debug(\"PostgresNotifyReader.doRead: checking for notifications\")\n\n        connection = django.db.connection.connection\n        if connection:\n            _logger.debug(\n                \"check_for_notifications: polling for notifications from %r\",\n                threading.current_thread(),\n            )\n            connection.poll()\n            if connection.notifies:\n                _logger.debug(\"Found notifications: %r\", connection.notifies)\n                if any(_is_a_new_ipdevpoll_event(c) for c in connection.notifies):\n                    self.schedule_trigger()\n                del connection.notifies[:]\n        else:\n            _logger.debug(\n                \"check_for_notifications: connection was empty in thread %r \"\n                \"(subscription is in %r)\",\n                threading.current_thread(),\n            )\n\n    def schedule_trigger(self):\n        \"\"\"Schedules the trigger function for an immediate run in the reactor thread\"\"\"\n        if not self.trigger:\n            return\n        _logger.debug(\n            \"scheduling %r to be called from main reactor thread\", self.trigger\n        )\n        self.reactor.callInThread(self.trigger)\n\n\ndef _is_a_new_ipdevpoll_event(notification):\n    return notification.channel == \"new_event\" and notification.payload == \"ipdevpoll\"\n"
  },
  {
    "path": "python/nav/ipdevpoll/descrparsers.py",
    "content": "#\n# Copyright (C) 2010 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Interface description convention parsers.\n\nEach description parser takes two arguments: A sysname and an ifalias value.\nIf the ifalias value cannot be parsed by the given description parser, it will\nreturn a None value.\n\n\"\"\"\n\nimport re\n\nNTNU_CORE_LAN_PATTERN = re.compile(\n    r\"\"\"\n    (?P<net_type>(core|lan)) ,\n    (?P<org>[^,]+) ,\n    (?P<ident> (?P<usage>[^\\d,]+) (?P<n>\\d+)? ) ( ,\n    (?P<comment>[^,]*) ( ,\n    (?P<vlan>\\d+) )? )?\n    \"\"\",\n    re.X | re.I,\n)\n\nNTNU_LINK_PATTERN = re.compile(\n    r\"\"\"\n    (?P<net_type>link) ,\n    (?P<to_router>[^,]+) ( ,\n    (?P<comment>[^,]*) ( ,\n    (?P<vlan>\\d+) )? )?\n    \"\"\",\n    re.X | re.I,\n)\n\nNTNU_ELINK_PATTERN = re.compile(\n    r\"\"\"\n    (?P<net_type>elink) ,\n    (?P<to_router>[^,]+) ,\n    (?P<to_org>[^,]+) ( ,\n    (?P<comment>[^,]*) ( ,\n    (?P<vlan>\\d+) )? )?\n    \"\"\",\n    re.X | re.I,\n)\n\n\ndef parse_ntnu_convention(sysname, ifalias):\n    \"\"\"Parses router port description, using NTNU conventions.\n\n    The conventions are documented at\n    https://nav.uninett.no/wiki/subnetsandvlans\n\n    \"\"\"\n    # Strip leading and trailing whitespace from each part individually\n    string = ','.join([s.strip() for s in ifalias.split(',')])\n    for pattern in (NTNU_CORE_LAN_PATTERN, NTNU_LINK_PATTERN, NTNU_ELINK_PATTERN):\n        match = pattern.match(string)\n        if match:\n            break\n    if not match:\n        return None\n\n    d = match.groupdict()\n    if 'vlan' in d and d['vlan']:\n        d['vlan'] = int(d['vlan'])\n    if 'n' in d and d['n'] is not None:\n        d['n'] = int(d['n'])\n\n    if d['net_type'] in ('core', 'lan'):\n        d['netident'] = ','.join(\n            str(d[s]) for s in ('org', 'ident', 'comment') if s in d and d[s]\n        )\n    elif d['net_type'] in ('link', 'elink'):\n        d['netident'] = \"%s,%s\" % (sysname, d['to_router'])\n    return d\n\n\nUNINETT_PATTERN = re.compile(\n    r\"\"\"\n    (?P<comment>[^,]+) ,\n    (?P<netident>.*)\n    \"\"\",\n    re.X | re.I,\n)\n\n\ndef parse_uninett_convention(_sysname, ifalias):\n    \"\"\"Parse router port description, using Uninett conventions.\"\"\"\n    # Strip leading and trailing whitespace from each part individually\n    string = ','.join([s.strip() for s in ifalias.split(',')])\n    match = UNINETT_PATTERN.match(string)\n    if not match:\n        return None\n\n    return match.groupdict()\n"
  },
  {
    "path": "python/nav/ipdevpoll/epollreactor2.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Custom epollreactor implementation for ipdevpoll.\n\nThis reactor inherits Twisted's original epollrecator, but overrides the one\npart that seems incompatible with pynetsnmp, which is central to ipdevpoll.\n\"\"\"\n\nimport errno\nimport logging\n\nfrom twisted.internet import epollreactor\n\n_logger = logging.getLogger(__name__)\n\n\nclass EPollReactor2(epollreactor.EPollReactor):\n    \"\"\"A reactor that uses epoll(7), with modified handling of closed file\n    descriptors\n    \"\"\"\n\n    def _remove(self, xer, primary, other, selectables, event, antievent):\n        \"\"\"\n        Private method for removing a descriptor from the event loop.\n\n        It does the inverse job of _add, and also add a check in case of the fd\n        has gone away.\n\n        It overrides the inherited epollreactor functionality to ensure that file\n        descriptors closed behind our back are ignored and properly removed from the\n        reactor's internal data structures. This is needed mostly because pynetsnmp\n        adds reactor readers for file descriptors that are managed by the NET-SNMP C\n        library. There is no way for Python code close these file descriptors in a\n        controlled way, wherein they are removed from the reactor first - the\n        NET-SNMP library will close them \"behind our backs\", so to speak.\n\n        Attempting to unregister a closed file descriptor from the epoll object will\n        cause an OSError that the original implementation left the client to handle -\n        but this also caused the internal data structures of the reactor to become\n        inconsistent.\n        \"\"\"\n        try:\n            super()._remove(xer, primary, other, selectables, event, antievent)\n        except OSError as error:\n            if error.errno == errno.EBADF:\n                fd = xer.fileno()\n                _logger.debug(\"removing/ignoring bad file descriptor %r\", fd)\n                if fd in primary:\n                    primary.remove(fd)\n            else:\n                raise\n\n\ndef install():\n    \"\"\"\n    Install the epoll() reactor.\n    \"\"\"\n    p = EPollReactor2()\n    from twisted.internet.main import installReactor\n\n    installReactor(p)\n\n\n__all__ = [\"EPollReactor2\", \"install\"]\n"
  },
  {
    "path": "python/nav/ipdevpoll/jobs.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Job handling.\"\"\"\n\nimport time\nimport datetime\nimport pprint\nimport logging\nimport threading\nimport gc\nfrom itertools import cycle\n\nfrom twisted.internet import defer, reactor\nfrom twisted.internet.error import TimeoutError\n\nfrom nav.ipdevpoll import ContextLogger\nfrom nav.ipdevpoll.snmp import snmpprotocol, AgentProxy\nfrom nav.ipdevpoll.snmp.common import SnmpError\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_prefix_for_ipdevpoll_job\nfrom nav.models import manage\nfrom nav.util import splitby\nfrom nav.ipdevpoll import db\nfrom .plugins import plugin_registry\nfrom . import storage, shadows, dataloader\nfrom .utils import log_unhandled_failure\n\n_logger = logging.getLogger(__name__)\nports = cycle([snmpprotocol.port() for i in range(50)])\n\n\nclass AbortedJobError(Exception):\n    \"\"\"Signals an aborted collection job.\"\"\"\n\n    def __init__(self, msg, cause=None):\n        Exception.__init__(self, msg, cause)\n        self.cause = cause\n\n    def __str__(self):\n        return str(self.args[0]) + (\" (cause=%r)\" % self.cause if self.cause else \"\")\n\n\nclass SuggestedReschedule(AbortedJobError):\n    \"\"\"Can be raised by plugins to abort and reschedule a job at a specific\n    later time, without necessarily logging it as a job failure.\n\n    \"\"\"\n\n    def __init__(self, msg=None, cause=None, delay=60):\n        self.delay = delay\n        super(SuggestedReschedule, self).__init__(\n            msg=\"Job was suggested rescheduled in %d seconds\" % self.delay, cause=cause\n        )\n\n\nclass JobHandler(object):\n    \"\"\"Handles a single polling job against a single netbox.\n\n    An instance of this class performs a polling job, as described by\n    a job specification in the config file, for a single netbox.  It\n    will handle the dispatch of polling plugins, and contain state\n    information for the job.\n\n    \"\"\"\n\n    _logger = ContextLogger()\n    _queue_logger = ContextLogger(suffix='queue')\n    _timing_logger = ContextLogger(suffix='timings')\n    _start_time = datetime.datetime.min\n\n    def __init__(self, name, netbox, plugins=None, interval=None):\n        self.name = name\n        self.netbox_id = netbox\n        self.netbox: shadows.Netbox = None\n        self.cancelled = threading.Event()\n        self.interval = interval\n\n        self.plugins = plugins or []\n        self._log_context = {}\n        self.containers = storage.ContainerRepository()\n        self.storage_queue = []\n\n        self.agent = None\n\n    def _create_agentproxy(self):\n        if self.agent:\n            self._destroy_agentproxy()\n\n        if not self.netbox.snmp_parameters:\n            self.agent = None\n            return\n\n        port = next(ports)\n        self.agent = AgentProxy(\n            self.netbox.ip,\n            161,\n            protocol=port.protocol,\n            snmp_parameters=self.netbox.snmp_parameters,\n        )\n        try:\n            self.agent.open()\n        except SnmpError as error:\n            self.agent.close()\n            session_count = self.agent.count_open_sessions()\n            job_count = self.get_instance_count()\n            self._logger.error(\n                \"%s (%d currently open SNMP sessions, %d job handlers)\",\n                error,\n                session_count,\n                job_count,\n            )\n            raise AbortedJobError(\"Cannot open SNMP session\", cause=error)\n        else:\n            self._logger.debug(\n                \"AgentProxy created for %s: %s\", self.netbox.sysname, self.agent\n            )\n\n    def _destroy_agentproxy(self):\n        if self.agent:\n            self._logger.debug(\"Destroying agentproxy\", self.agent)\n            self.agent.close()\n        self.agent = None\n\n    @defer.inlineCallbacks\n    def _find_plugins(self):\n        \"\"\"Populate the internal plugin list with plugin class instances.\"\"\"\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        plugin_classes = [plugin_registry[name] for name in self._get_valid_plugins()]\n        willing_plugins = yield self._get_willing_plugins(plugin_classes)\n\n        plugins = [\n            cls(\n                self.netbox,\n                agent=self.agent,\n                containers=self.containers,\n                config=ipdevpoll_conf,\n            )\n            for cls in willing_plugins\n        ]\n\n        if not plugins:\n            return None\n\n        return plugins\n\n    def _get_valid_plugins(self):\n        valid_plugins, invalid_plugins = splitby(\n            lambda name: name in plugin_registry, self.plugins\n        )\n        if list(invalid_plugins):\n            self._logger.error(\n                \"Non-existent plugins were configured for job %r (ignoring them): %r\",\n                self.name,\n                list(invalid_plugins),\n            )\n        return valid_plugins\n\n    @defer.inlineCallbacks\n    def _get_willing_plugins(self, plugin_classes):\n        willing_plugins = []\n        unwilling_plugins = []\n        for cls in plugin_classes:\n            try:\n                can_handle = yield defer.maybeDeferred(cls.can_handle, self.netbox)\n            except db.ResetDBConnectionError:\n                raise\n            # We very intentionally log and ignore unhandled exception here, to ensure\n            # the stability of the ipdevpoll daemon\n            except Exception:  # noqa: BLE001\n                self._logger.exception(\"Unhandled exception from can_handle(): %r\", cls)\n                can_handle = False\n            if can_handle:\n                willing_plugins.append(cls)\n            else:\n                unwilling_plugins.append(cls)\n\n        for willingness, plugins in [\n            ('unwilling', unwilling_plugins),\n            ('willing', willing_plugins),\n        ]:\n            if plugins:\n                self._logger.debug(\n                    \"%s plugins: %r\", willingness, [cls.__name__ for cls in plugins]\n                )\n            else:\n                self._logger.debug(\"no %s plugins\", willingness)\n\n        return willing_plugins\n\n    def _iterate_plugins(self, plugins):\n        \"\"\"Iterates plugins.\"\"\"\n        plugins = iter(plugins)\n\n        def log_plugin_failure(failure, plugin_instance):\n            if failure.check(TimeoutError, defer.TimeoutError):\n                self._logger.debug(\n                    \"Plugin %s reported a timeout\", plugin_instance.alias, exc_info=True\n                )\n                raise AbortedJobError(\n                    \"Plugin %s reported a timeout\" % plugin_instance.alias\n                )\n            elif failure.check(SuggestedReschedule):\n                self._logger.debug(\n                    \"Plugin %s suggested a reschedule in %d seconds\",\n                    plugin_instance,\n                    failure.value.delay,\n                )\n            elif failure.check(db.ResetDBConnectionError):\n                pass\n            else:\n                log_unhandled_failure(\n                    self._logger,\n                    failure,\n                    \"Plugin %s reported an unhandled failure\",\n                    plugin_instance,\n                )\n            return failure\n\n        def next_plugin(result=None):\n            self._raise_if_cancelled()\n            try:\n                plugin_instance = next(plugins)\n            except StopIteration:\n                return result\n\n            self._logger.debug(\"Now calling plugin: %s\", plugin_instance)\n            self._start_plugin_timer(plugin_instance)\n\n            df = defer.maybeDeferred(plugin_instance.handle)\n            df.addErrback(self._stop_plugin_timer)\n            df.addErrback(log_plugin_failure, plugin_instance)\n            df.addCallback(self._stop_plugin_timer)\n            df.addCallback(next_plugin)\n            return df\n\n        return next_plugin()\n\n    @defer.inlineCallbacks\n    def run(self):\n        \"\"\"Starts a polling job for netbox.\n\n        :returns: A Deferred, whose result will be True when the job did\n                  something, or False when the job did nothing (i.e. no\n                  plugins ran).\n\n        \"\"\"\n        self.netbox = yield db.run_in_thread(dataloader.load_netbox, self.netbox_id)\n        self._log_context.update(dict(job=self.name, sysname=self.netbox.sysname))\n        self._logger.debug(\n            \"Job %r started for netbox %s with plugins: %r\",\n            self.name,\n            self.netbox_id,\n            self.plugins,\n        )\n        # Initialize netbox in container\n        self._container_factory(\n            shadows.Netbox, key=None, id=self.netbox.id, sysname=self.netbox.sysname\n        )\n\n        self._create_agentproxy()\n        plugins = yield self._find_plugins()\n        self._reset_timers()\n        if not plugins:\n            self._destroy_agentproxy()\n            return False\n\n        self._logger.debug(\"Starting job %r for %s\", self.name, self.netbox.sysname)\n\n        def wrap_up_job(_result):\n            self._logger.debug(\"Job %s for %s done.\", self.name, self.netbox.sysname)\n            self._log_timings()\n            return True\n\n        def plugin_failure(failure):\n            self._log_timings()\n            if not failure.check(AbortedJobError):\n                raise AbortedJobError(\n                    \"Job aborted due to plugin failure\", cause=failure.value\n                )\n            return failure\n\n        def save_failure(failure):\n            if not failure.check(db.ResetDBConnectionError):\n                log_unhandled_failure(\n                    self._logger, failure, \"Save stage failed with unhandled error\"\n                )\n            self._log_timings()\n            raise AbortedJobError(\n                \"Job aborted due to save failure\", cause=failure.value\n            )\n\n        def log_abort(failure):\n            if failure.check(SuggestedReschedule):\n                return failure\n            if failure.check(AbortedJobError):\n                self._logger.error(\n                    \"Job %r for %s aborted: %s\",\n                    self.name,\n                    self.netbox.sysname,\n                    failure.value,\n                )\n            return failure\n\n        def save(result):\n            if self.cancelled.is_set():\n                return wrap_up_job(result)\n\n            df = self._save_container()\n            df.addErrback(save_failure)\n            df.addCallback(wrap_up_job)\n            return df\n\n        shutdown_trigger_id = reactor.addSystemEventTrigger(\n            \"before\", \"shutdown\", self.cancel\n        )\n\n        def cleanup(result):\n            self._destroy_agentproxy()\n            reactor.removeSystemEventTrigger(shutdown_trigger_id)\n            return result\n\n        def log_externally_success(result):\n            self._log_job_externally(True if result else None)\n            return result\n\n        def log_externally_failure(result):\n            self._log_job_externally(False)\n            return result\n\n        # The action begins here\n        df = self._iterate_plugins(plugins)\n        df.addErrback(plugin_failure)\n        df.addCallback(save)\n        df.addErrback(log_abort)\n        df.addBoth(cleanup)\n        df.addCallbacks(log_externally_success, log_externally_failure)\n        yield df\n        return True\n\n    def cancel(self):\n        \"\"\"Cancels a running job.\n\n        Job stops at the earliest convenience.\n        \"\"\"\n        self.cancelled.set()\n        self._logger.info(\"Cancelling running job\")\n\n    def _reset_timers(self):\n        self._start_time = datetime.datetime.now()\n        self._plugin_times = []\n\n    def _start_plugin_timer(self, plugin):\n        now = datetime.datetime.now()\n        timings = [plugin.__class__.__name__, now, now]\n        self._plugin_times.append(timings)\n\n    def _stop_plugin_timer(self, result=None):\n        timings = self._plugin_times[-1]\n        timings[-1] = datetime.datetime.now()\n        return result\n\n    def _log_timings(self):\n        stop_time = datetime.datetime.now()\n        job_total = stop_time - self._start_time\n\n        times = [(plugin, stop - start) for (plugin, start, stop) in self._plugin_times]\n        plugin_total = sum((i[1] for i in times), datetime.timedelta(0))\n\n        times.append((\"Plugin total\", plugin_total))\n        times.append((\"Job total\", job_total))\n        times.append((\"Job overhead\", job_total - plugin_total))\n\n        log_text = []\n        longest_label = max(len(i[0]) for i in times)\n        format = \"%%-%ds: %%s\" % longest_label\n\n        for plugin, delta in times:\n            log_text.append(format % (plugin, delta))\n\n        dashes = \"-\" * max(len(i) for i in log_text)\n        log_text.insert(-3, dashes)\n        log_text.insert(-2, dashes)\n\n        log_text.insert(0, \"Job %r timings for %s:\" % (self.name, self.netbox.sysname))\n\n        self._timing_logger.debug(\"\\n\".join(log_text))\n\n    def get_current_runtime(self):\n        \"\"\"Returns time elapsed since the start of the job as a timedelta.\"\"\"\n        return datetime.datetime.now() - self._start_time\n\n    def _save_container(self):\n        \"\"\"\n        Parses the container and finds a sane storage order. We do this\n        so we get ForeignKeys stored before the objects that are using them\n        are stored.\n        \"\"\"\n\n        @db.cleanup_django_debug_after\n        def complete_save_cycle():\n            # Traverse all the classes in the container repository and\n            # generate the storage queue\n            self._populate_storage_queue()\n            # Prepare all shadow objects for storage.\n            self._prepare_containers_for_save()\n            # Actually save to the database\n            result = self._perform_save()\n            self._log_timed_result(result, \"Storing to database complete\")\n            # Do cleanup for the known container classes.\n            self._cleanup_containers_after_save()\n\n        df = db.run_in_thread(complete_save_cycle)\n        return df\n\n    def _prepare_containers_for_save(self):\n        \"\"\"Runs every queued manager's prepare routine\"\"\"\n        for manager in self.storage_queue:\n            self._raise_if_cancelled()\n            manager.prepare()\n\n    def _cleanup_containers_after_save(self):\n        \"\"\"Runs every queued manager's cleanup routine\"\"\"\n        self._logger.debug(\n            \"Running cleanup routines for %d managers: %r\",\n            len(self.storage_queue),\n            self.storage_queue,\n        )\n        try:\n            for manager in self.storage_queue:\n                self._raise_if_cancelled()\n                manager.cleanup()\n        except AbortedJobError:\n            raise\n        except Exception:  # noqa: BLE001\n            self._logger.exception(\n                \"Caught exception during cleanup. Last manager = %r\", manager\n            )\n            import django.db\n\n            if django.db.connection.queries:\n                self._logger.error(\n                    \"The last query was: %s\", django.db.connection.queries[-1]\n                )\n            raise\n\n    def _log_timed_result(self, res, msg):\n        self._logger.debug(msg + \" (%0.3f ms)\" % res)\n\n    def _perform_save(self):\n        start_time = time.time()\n        manager = None\n        try:\n            self._log_containers(\"containers before save\")\n\n            for manager in self.storage_queue:\n                self._raise_if_cancelled()\n                manager.save()\n\n            end_time = time.time()\n            total_time = (end_time - start_time) * 1000.0\n\n            self._log_containers(\"containers after save\")\n\n            return total_time\n        except AbortedJobError:\n            raise\n        except Exception:  # noqa: BLE001\n            self._logger.exception(\n                \"Caught exception during save. Last manager = %s. Last model = %s\",\n                manager,\n                getattr(manager, 'cls', None),\n            )\n            import django.db\n\n            if django.db.connection.queries:\n                self._logger.error(\n                    \"The last query was: %s\", django.db.connection.queries[-1]\n                )\n            raise\n\n    def _log_containers(self, prefix=None):\n        log = self._queue_logger\n        if not log.isEnabledFor(logging.DEBUG):\n            return\n        log.debug(\n            \"%s%s\", prefix and \"%s: \" % prefix, pprint.pformat(dict(self.containers))\n        )\n\n    def _populate_storage_queue(self):\n        \"\"\"Naive population of the storage queue.\n\n        Assuming there are no inter-dependencies between instances of a single\n        shadow class, the only relevant ordering is the one between the\n        container types themselves.  This method will only order instances\n        according to the dependency (topological) order of their classes.\n\n        \"\"\"\n        for shadow_class in self.containers.sortedkeys():\n            manager = shadow_class.manager(shadow_class, self.containers)\n            self.storage_queue.append(manager)\n\n    def _container_factory(self, container_class, key, *args, **kwargs):\n        \"\"\"Container factory function\"\"\"\n        return self.containers.factory(key, container_class, *args, **kwargs)\n\n    def _raise_if_cancelled(self):\n        \"\"\"Raises an AbortedJobError if the current job is cancelled\"\"\"\n        if self.cancelled.is_set():\n            raise AbortedJobError(\"Job was already cancelled\")\n\n    @classmethod\n    def get_instance_count(cls):\n        \"\"\"Returns the number of JobHandler instances as seen by the garbage\n        collector.\n\n        \"\"\"\n        return len([o for o in gc.get_objects() if isinstance(o, cls)])\n\n    @defer.inlineCallbacks\n    def _log_job_externally(self, success=True):\n        \"\"\"Logs a job to the database\"\"\"\n        duration = self.get_current_runtime()\n        duration_in_seconds = (\n            duration.days * 86400 + duration.seconds + duration.microseconds / 1e6\n        )\n        timestamp = time.time()\n\n        def _create_record(timestamp):\n            netbox = manage.Netbox.objects.get(id=self.netbox.id)\n            if netbox.deleted_at:\n                _logger.info(\n                    \"Not logging job to db; delete of this IP device\"\n                    \" was requested at %s\",\n                    netbox.deleted_at,\n                )\n                return\n\n            log = manage.IpdevpollJobLog(\n                netbox_id=self.netbox.id,\n                job_name=self.name,\n                end_time=datetime.datetime.fromtimestamp(timestamp),\n                duration=duration_in_seconds,\n                success=success,\n                interval=self.interval,\n            )\n            log.save()\n\n        def _log_to_graphite():\n            prefix = metric_prefix_for_ipdevpoll_job(self.netbox.sysname, self.name)\n            runtime_path = prefix + \".runtime\"\n            runtime = (runtime_path, (timestamp, duration_in_seconds))\n            send_metrics([runtime])\n\n        _log_to_graphite()\n        try:\n            yield db.run_in_thread(_create_record, timestamp)\n        except db.ResetDBConnectionError:\n            pass  # this is being logged all over the place at the moment\n        except Exception as error:  # noqa: BLE001\n            _logger.warning(\"failed to log job to database: %s\", error)\n"
  },
  {
    "path": "python/nav/ipdevpoll/log.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Logging utilities for ipdevpoll\"\"\"\n\nimport logging\nfrom logging import Formatter\nimport inspect\nfrom itertools import islice\n\n\nclass ContextFormatter(Formatter):\n    \"\"\"A log formatter that will add context data if available in the record.\n\n    Only recognizes the attributes 'job' and 'sysname' as context data.\n\n    \"\"\"\n\n    prefix = 'nav.ipdevpoll.'\n\n    def __init__(self, pidlog=False):\n        pidlog = \"[%(process)s] \" if pidlog else \"\"\n        self._normal_fmt = (\n            \"%(asctime)s \" + pidlog + \"[%(levelname)s %(name)s] %(message)s\"\n        )\n        self._context_fmt = (\n            \"%(asctime)s \" + pidlog + \"[%(levelname)s \"\n            \"%(name)s] [%(context)s] %(message)s\"\n        )\n        Formatter.__init__(self, self._normal_fmt)\n\n    def format(self, record):\n        \"\"\"Overridden to choose format based on record contents.\"\"\"\n        self._set_context(record)\n        record.name = record.name.removeprefix(self.prefix)\n        return Formatter.format(self, record)\n\n    def _set_context(self, record):\n        context = [\n            getattr(record, attr)\n            for attr in ('job', 'sysname')\n            if hasattr(record, attr)\n        ]\n        if context:\n            record.__dict__['context'] = ' '.join(context)\n            self._set_format(self._context_fmt)\n        else:\n            self._set_format(self._normal_fmt)\n\n    def _set_format(self, fmt):\n        self._fmt = fmt\n        self._style._fmt = fmt\n\n\nclass ContextLogger(object):\n    \"\"\"Descriptor for getting an appropriate logger instance.\n\n    A class that needs logging can use this descriptor to automatically get a\n    logger with the correct name and context.  Example::\n\n      class Foo(object):\n          _logger = ContextLogger()\n\n          def do_bar(self):\n              self._logger.debug(\"now doing bar\")\n\n    The _logger attribute will be either a logging.Logger or\n    logging.LoggerAdapter, depending on whether a logging context can be\n    found.  The first time _logger is accessed, it establishes the context\n    either via direct lookup on the owning instance, or via stack frame\n    inspection.  If the current instance hasn't already established a logging\n    context, but the calling client object has one, this context will be\n    copied permanently to this instance.\n\n    \"\"\"\n\n    log_attr = '_logger_object'\n\n    def __init__(self, suffix=None, context_vars=None):\n        if suffix:\n            self.log_attr = \"%s_%s\" % (self.log_attr, suffix)\n\n        self.suffix = suffix\n        self.context_vars = context_vars\n\n    def __get__(self, obj, owner=None):\n        target = owner if obj is None else obj\n        if hasattr(target, self.log_attr):\n            return getattr(target, self.log_attr)\n\n        logger = logging.getLogger(self._logger_name(owner))\n        if target is obj:\n            if self.context_vars:\n                extra = dict((k, getattr(target, k, None)) for k in self.context_vars)\n            elif hasattr(target, '_log_context'):\n                extra = getattr(target, '_log_context')\n            else:\n                extra = _context_search(inspect.currentframe())\n\n            if extra:\n                logger = logging.LoggerAdapter(logger, extra)\n\n        setattr(target, self.log_attr, logger)\n        return logger\n\n    def _logger_name(self, klass):\n        if klass.__module__ != '__main__':\n            name = \"%s.%s\" % (klass.__module__, klass.__name__)\n        else:\n            name = klass.__name__.lower()\n        if self.suffix:\n            name = name + '-' + self.suffix\n        return name.lower()\n\n    def __set__(self, obj, value):\n        raise AttributeError(\"cannot reassign a %s attribute\" % self.__class__.__name__)\n\n    def __delete__(self, obj):\n        raise AttributeError(\"cannot delete a %s attribute\" % self.__class__.__name__)\n\n\n#\n# Utility functions for inspecting the call stack for logging contexts\n#\n\n\ndef _context_search(frame, maxdepth=10):\n    \"\"\"Attempts to extract a logging context from the current stack\"\"\"\n    frames = islice(_stack_iter(frame), maxdepth)\n    return _first_true(_get_context_from_frame(f) for f in frames)\n\n\ndef _stack_iter(frame):\n    \"Iterates backwards through stack frames, starting with the one below frame\"\n    try:\n        while frame.f_back:\n            frame = frame.f_back\n            yield frame\n    finally:\n        del frame\n\n\ndef _first_true(sequence):\n    \"\"\"Returns the first element from sequence that evaluates to a true value,\n    or None if no such element was found.\n\n    \"\"\"\n    for elem in sequence:\n        if elem:\n            return elem\n\n\ndef _get_context_from_frame(frame):\n    \"Returns a logging context from a stack frame, if found\"\n    obj = frame.f_locals.get('self', None)\n    if obj is None:\n        return\n    if hasattr(obj, '_log_context'):\n        return getattr(obj, '_log_context')\n    elif hasattr(obj, '_logger'):\n        logger = getattr(obj, '_logger')\n        if hasattr(logger, 'extra'):\n            return logger.extra\n"
  },
  {
    "path": "python/nav/ipdevpoll/neighbor.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility functions for device neighbor identification.\n\nUseful for ipdevpoll plugins who collect neighbor information from neigbor\ndiscovery protocols and such (e.g. CDP, LLDP, switch forwarding tables).\n\nThe classes and function within this module operate synchronously, and should\ntherefore be run in the threadpool instead of the main reactor thread.\n\n\"\"\"\n\nimport re\nfrom datetime import timedelta\nimport threading\n\nfrom IPy import IP\nfrom django.db.models import Q\n\nfrom nav.util import cachedfor, synchronized\nfrom nav.models import manage\nfrom nav.ipdevpoll.log import ContextLogger\nfrom nav.ipdevpoll import shadows\nfrom nav.ipdevpoll.utils import is_invalid_database_string\n\nHSRP_MAC_PREFIXES = ('00:00:0c:07:ac',)\nVRRP_MAC_PREFIXES = ('00:00:5e:00:01', '00:00:5e:00:02')  # RFC5798\nIGNORED_MAC_PREFIXES = HSRP_MAC_PREFIXES + VRRP_MAC_PREFIXES\n\n\n@synchronized(threading.Lock())\n@cachedfor(timedelta(minutes=5))\ndef get_netbox_macs():\n    \"\"\"Returns a dict of (mac, netboxid) mappings of NAV-monitored devices.\n\n    Special MAC address will be ignored, such as those reserved by VRRP.\n\n    \"\"\"\n    return _get_netbox_macs()\n\n\ndef _get_netbox_macs():\n    \"\"\"Actual implementation of get_netbox_macs()\"\"\"\n    from django.db import connection\n\n    cursor = connection.cursor()\n    cursor.execute('SELECT mac, netboxid FROM netboxmac')\n    netbox_macs = dict(\n        (mac, netboxid)\n        for (mac, netboxid) in cursor.fetchall()\n        if not _mac_is_ignored(mac)\n    )\n    return netbox_macs\n\n\ndef _mac_is_ignored(mac):\n    for ignored in IGNORED_MAC_PREFIXES:\n        if mac.lower().startswith(ignored.lower()):\n            return True\n    return False\n\n\n@synchronized(threading.Lock())\n@cachedfor(timedelta(minutes=10))\ndef get_netbox_catids():\n    \"\"\"Returns a dict of {netboxid: catid} pairs of NAV-monitored devices\"\"\"\n    return _get_netbox_catids()\n\n\ndef _get_netbox_catids():\n    \"\"\"Actual implementation of get_netbox_catids()\"\"\"\n    catids = dict(\n        (i['id'], i['category__id'])\n        for i in manage.Netbox.objects.values('id', 'category__id')\n    )\n    return catids\n\n\nINVALID_IPS = (\n    'None',\n    '0.0.0.0',\n)\n\n\nclass Neighbor(object):\n    \"Abstract base class for neigbor identification\"\n\n    _logger = ContextLogger()\n\n    def __init__(self, record, local_address=None):\n        \"\"\"Given a supported neighbor record, tries to identify the remote\n        device and port among the ones registered in NAV's database.\n\n        If a neighbor can be identified, the identified attribute is set to\n        True.  The netbox and interface attributes will represent the\n        identified items.\n\n        :param record: Some namedtuple instance representing the\n                       neighboring record read from the device.\n        :param local_address: The management IP address used by the local\n                              system. If supplied, will be used to identify\n                              and ignore possible self-loops.\n\n        \"\"\"\n        self.record = record\n        self._invalid_neighbor_ips = list(INVALID_IPS)\n        if local_address:\n            self._invalid_neighbor_ips.append(str(local_address))\n\n        self.netbox = self.interfaces = None\n        self.identified = False\n\n        self.identify()\n\n    def identify(self):\n        self.netbox = self._identify_netbox()\n        self.interfaces = self._identify_interfaces()\n        self.identified = bool(self.netbox or self.interfaces)\n        if self.interfaces and len(self.interfaces) > 1:\n            self._logger.info(\"found multiple interface matches for %r\", self)\n\n    def _identify_netbox(self):\n        raise NotImplementedError\n\n    def _identify_interfaces(self):\n        raise NotImplementedError\n\n    def _netbox_from_mac(self, mac):\n        mac_map = get_netbox_macs()\n        if mac in mac_map:\n            return self._netbox_query(Q(id=mac_map[mac]))\n\n    def _netbox_from_ip(self, ip):\n        \"\"\"Tries to find a Netbox from NAV's database based on an IP address.\n\n        :returns: A shadows.Netbox object representing the netbox, or None if no\n                  corresponding netbox was found.\n\n        \"\"\"\n        try:\n            ip = str(IP(ip))\n        except ValueError:\n            self._logger.warning(\n                \"Invalid IP (%s) in neighbor record: %r\", ip, self.record\n            )\n            return\n\n        assert ip\n        if ip in self._invalid_neighbor_ips:\n            return\n        return self._netbox_query(Q(ip=ip)) or self._netbox_query(\n            Q(interfaces__gwport_prefixes__gw_ip=ip)\n        )\n\n    ID_PATTERN = re.compile(r'(.*\\()?(?P<sysname>[^\\)]+)\\)?')\n\n    def _netbox_from_sysname(self, sysname):\n        \"\"\"Tries to find a Netbox from NAV's database based on a sysname string.\n\n        The sysname string is interpreted in various ways that have been seen\n        in the wild in CDP and LLDP implementations.  Valid examples are the\n        remote device's sysname, with or without a qualified domain name, or a\n        string following the \"SERIAL(sysname)\" pattern.\n\n        :returns: A shadows.Netbox object representing the netbox, or None if no\n                  corresponding netbox was found.\n\n        \"\"\"\n        match = self.ID_PATTERN.search(sysname)\n        sysname = match.group('sysname')\n        assert sysname\n        query = Q(sysname__iexact=sysname)\n\n        is_fqdn = '.' in sysname\n        if not is_fqdn:\n            query = query | Q(sysname__istartswith=sysname + '.')\n\n        return self._netbox_query(query)\n\n    def _netbox_query(self, query):\n        \"\"\"Runs a Django get()-query on the Netbox model, based on query.\n\n        :param query: A Q object usable in a Netbox query.\n        :returns: A shadows.Netbox object if a db object was found, otherwise\n                  None.\n\n        \"\"\"\n        assert query\n        try:\n            netbox = manage.Netbox.objects.values('id', 'sysname').get(query)\n        except manage.Netbox.DoesNotExist:\n            return None\n        except manage.Netbox.MultipleObjectsReturned:\n            self._logger.info(\n                \"found multiple matching neighbors on remote, cannot decide: %s\",\n                query,\n            )\n            return None\n        return shadows.Netbox(**netbox)\n\n    def _interfaces_from_name(self, name):\n        \"\"\"Tries to find an Interface in NAV's database for the already\n        identified netbox.\n\n        The ifName, ifDescr, ifAlias, and optionally, baseport attributes are\n        searched for name.\n\n        :returns: A shadows.Interface object representing the interface, or None\n                  if no corresponding interface was found.\n\n        \"\"\"\n        if not (self.netbox and name):\n            return\n\n        # on some buggy devices, port names contain long trails of \\x00 characters...\n        name = name.rstrip('\\x00')\n\n        if is_invalid_database_string(name):\n            self._logger.warning(\n                \"cannot search database for malformed neighboring port name %r\", name\n            )\n            return\n\n        queries = [Q(ifdescr=name), Q(ifname=name), Q(ifalias=name)]\n        if name.isdigit():\n            queries.append(Q(baseport=int(name)))\n\n        for query in queries:\n            ifc = self._interface_query(query)\n            if ifc:\n                return ifc\n\n    def _interface_query(self, query):\n        assert query\n        netbox = Q(netbox__id=self.netbox.id)\n        result = []\n        for ifc in manage.Interface.objects.values(\n            'id', 'ifname', 'ifdescr', 'iftype'\n        ).filter(netbox & query):\n            ifc = shadows.Interface(**ifc)\n            ifc.netbox = self.netbox\n            result.append(ifc)\n        return result\n\n    def __repr__(self):\n        return (\n            '<{myclass} '\n            'identified={identified} '\n            'netbox={netbox} '\n            'interfaces={interfaces}>'\n        ).format(myclass=self.__class__.__name__, **vars(self))\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/__init__.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin handling.\n\nThis package contains plugins submodules as distributed with NAV.\n\n\"\"\"\n\nimport inspect\nimport logging\n\nfrom nav.errors import GeneralException\n\nfrom nav.ipdevpoll import Plugin\n\n_logger = logging.getLogger(__name__)\nplugin_registry = {}\n\n\nclass PluginImportError(GeneralException):\n    \"\"\"Failed to import plugin\"\"\"\n\n\ndef import_plugins():\n    \"\"\"Import all configured plugins into the plugin registry.\"\"\"\n    from nav.ipdevpoll.config import ipdevpoll_conf\n\n    plugin_counter = 0\n    for alias in ipdevpoll_conf.options('plugins'):\n        import_plugin(ipdevpoll_conf, alias)\n        plugin_counter += 1\n\n    _logger.info(\n        'Imported %d plugin classes, %d classes in plugin registry',\n        plugin_counter,\n        len(plugin_registry),\n    )\n\n\ndef import_plugin(config, alias):\n    \"\"\"Attempts to import the plugin aliased to alias in config.\n\n    If alias is set, but the config doesn't contain the full name of the\n    plugin class, the module and class will be searched for in the\n    nav.ipdevpoll.plugins package.\n\n    \"\"\"\n    full_class_name = config.get('plugins', alias)\n    if full_class_name:\n        module_name = '.'.join(full_class_name.split('.')[:-1])\n        class_name = full_class_name.split('.')[-1]\n    else:\n        module_name = 'nav.ipdevpoll.plugins.%s' % alias\n        class_name = None\n\n    _logger.debug('Importing plugin %s=%s', alias, full_class_name)\n    try:\n        module_ = __import__(module_name, globals(), locals(), [module_name])\n        if class_name:\n            class_ = getattr(module_, class_name)\n        else:\n            class_ = get_plugin_from_module(module_)\n    except (ImportError, AttributeError) as error:\n        _logger.exception(\"Failed to import plugin %s\", full_class_name)\n        raise PluginImportError(error)\n\n    class_.alias = alias\n    plugin_registry[alias] = class_\n    class_.on_plugin_load()\n\n\ndef get_plugin_from_module(module_):\n    \"\"\"Tries to find a Plugin subclass in module_ and returns it\"\"\"\n\n    def _predicate(thing):\n        return (\n            inspect.isclass(thing)\n            and issubclass(thing, Plugin)\n            and inspect.getmodule(thing) == module_\n        )\n\n    members = inspect.getmembers(module_, _predicate)\n    if members:\n        name, value = members[0]\n        _logger.debug('found plugin class %s in %s', name, module_)\n        return value\n    else:\n        raise AttributeError(\"no plugin class defined in module %r\", module_)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/arp.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to log IP / MAC address pairings from routers.\n\nThere are basically four methods to collect this via SNMP, some of\nwhich are deprecated, but still in use by vendors.  This plugin will\nsupport all four methods.\n\nIP-MIB contains two tables:\n  ipNetToMediaTable     -- deprecated, as it contains only entries for IPv4.\n  ipNetToPhysicalTable  -- current, address version agnostic table\n\nIPV6-MIB has been abandoned in favor of the revised IP-MIB, but has one table:\n  ipv6NetToMediaTable\n\nCISCO-IETF-IP-MIB       -- based on an early draft of the revised IP-MIB\n  cInetNetToMediaTable\n\nAlthough the ARP protocol is only related to IPv4, this plugin keeps\nthe name for historical reasons.\n\n\"\"\"\n\nimport operator\nfrom datetime import datetime, timedelta\n\nfrom IPy import IP\nfrom twisted.internet import defer\n\nfrom nav.enterprise.ids import VENDOR_ID_ARISTA_NETWORKS_INC_FORMERLY_ARASTRA_INC\nfrom nav.ipdevpoll.utils import get_arista_vrf_instances\nfrom nav.mibs.ip_mib import IpMib, MultiIpMib\nfrom nav.mibs.ipv6_mib import Ipv6Mib\nfrom nav.mibs.cisco_ietf_ip_mib import CiscoIetfIpMib\n\nfrom nav.models import manage\nfrom nav.ipdevpoll import Plugin, db\nfrom nav.ipdevpoll import storage, shadows\n\nINCOMPLETE_MAC = '00:00:00:00:00:00'\n\n\nclass Arp(Plugin):\n    \"\"\"Collects ARP records for IPv4 devices and NDP cache for IPv6 devices.\"\"\"\n\n    prefix_cache = []  # prefix cache, should be sorted by descending mask length\n    prefix_cache_update_time = datetime.min\n    prefix_cache_max_age = timedelta(minutes=5)\n\n    @classmethod\n    def can_handle(cls, netbox):\n        \"\"\"This will only be useful on layer 3 devices, i.e. GW/GSW devices.\"\"\"\n        daddy_says_ok = super(Arp, cls).can_handle(netbox)\n        return daddy_says_ok and netbox.category.id in ('GW', 'GSW')\n\n    @defer.inlineCallbacks\n    def handle(self):\n        yield self._check_and_update_prefix_cache()\n        if self._is_arp_already_collected():\n            self._logger.debug(\"ARP records already collected for this device\")\n            return\n        self._logger.debug(\"Collecting IP/MAC mappings\")\n\n        # Fetch standard MIBs\n        ip_mib = yield self._get_ip_mib()\n        mappings = yield ip_mib.get_ifindex_ip_mac_mappings()\n        self._logger.debug(\"Found %d mappings in IP-MIB\", len(mappings))\n\n        # Try IPV6-MIB if no IPv6 results were found in IP-MIB\n        if not ipv6_address_in_mappings(mappings):\n            ipv6_mib = Ipv6Mib(self.agent)\n            ipv6_mappings = yield ipv6_mib.get_ifindex_ip_mac_mappings()\n            self._logger.debug(\"Found %d mappings in IPV6-MIB\", len(ipv6_mappings))\n            mappings.update(ipv6_mappings)\n\n        # If we got no results, or no IPv6 results, try vendor specific MIBs\n        if not mappings or not ipv6_address_in_mappings(mappings):\n            cisco_ip_mib = CiscoIetfIpMib(self.agent)\n            cisco_ip_mappings = yield cisco_ip_mib.get_ifindex_ip_mac_mappings()\n            self._logger.debug(\n                \"Found %d mappings in CISCO-IETF-IP-MIB\", len(cisco_ip_mappings)\n            )\n            mappings.update(cisco_ip_mappings)\n\n        yield self._process_data(mappings)\n\n    @classmethod\n    @defer.inlineCallbacks\n    def _check_and_update_prefix_cache(cls):\n        \"\"\"Updates the prefix cache if deemed necessary\"\"\"\n        prefix_cache_age = datetime.now() - cls.prefix_cache_update_time\n        if prefix_cache_age > cls.prefix_cache_max_age:\n            yield cls._update_prefix_cache()\n\n    def _is_arp_already_collected(self):\n        \"\"\"Returns True if ARP entries have already been collected in this run\"\"\"\n        return shadows.Arp in self.containers and bool(self.containers[shadows.Arp])\n\n    @defer.inlineCallbacks\n    def _get_ip_mib(self):\n        if not self.is_arista():\n            return IpMib(self.agent)  # regular IpMib for regular folks\n        else:\n            instances = yield get_arista_vrf_instances(self.agent)\n            return MultiIpMib(self.agent, instances=instances)\n\n    def is_arista(self):\n        \"\"\"Returns True if this is an Arista device\"\"\"\n        return (\n            self.netbox.type\n            and self.netbox.type.get_enterprise_id()\n            == VENDOR_ID_ARISTA_NETWORKS_INC_FORMERLY_ARASTRA_INC\n        )\n\n    @defer.inlineCallbacks\n    def _process_data(self, mappings):\n        \"\"\"Process collected mapping data.\n\n        1. Find all open ARP database records for this netbox\n        2. Add Arp containers for all newly discovered mappings\n        3. Add Arp containers to expire missing mappings\n\n        \"\"\"\n        # Collected mappings include ifindexes.  Arp table doesn't\n        # care about this, so we prune those.\n        found_mappings = set(\n            (ip, mac) for (ifindex, ip, mac) in mappings if mac != INCOMPLETE_MAC\n        )\n        stripped = len(mappings) - len(found_mappings)\n        if stripped:\n            self._logger.debug(\"stripped %d incomplete mappings\", stripped)\n\n        # Get open mappings from database to compare with\n        open_mappings = yield self._load_existing_mappings()\n\n        new_mappings = found_mappings.difference(open_mappings)\n        expireable_mappings = set(open_mappings).difference(found_mappings)\n\n        self._logger.debug(\n            \"Mappings: %d new / %d expired / %d kept\",\n            len(new_mappings),\n            len(expireable_mappings),\n            len(open_mappings) - len(expireable_mappings),\n        )\n\n        self._make_new_mappings(new_mappings)\n        self._expire_arp_records(\n            open_mappings[mapping] for mapping in expireable_mappings\n        )\n\n    @defer.inlineCallbacks\n    def _load_existing_mappings(self):\n        \"\"\"Load the existing ARP records for this box from the db.\n\n        Returns:\n\n          A deferred whose result is a dictionary: { (ip, mac): arpid }\n        \"\"\"\n        self._logger.debug(\"Loading open arp records from database\")\n        open_arp_records_queryset = manage.Arp.objects.filter(\n            netbox__id=self.netbox.id, end_time__gte=datetime.max\n        ).values('id', 'ip', 'mac')\n        open_arp_records = yield db.run_in_thread(\n            storage.shadowify_queryset_and_commit, open_arp_records_queryset\n        )\n        self._logger.debug(\"Loaded %d open records from arp\", len(open_arp_records))\n\n        open_mappings = dict(\n            ((IP(arp['ip']), arp['mac']), arp['id']) for arp in open_arp_records\n        )\n        return open_mappings\n\n    @classmethod\n    def _update_prefix_cache(cls):\n        cls.prefix_cache_update_time = datetime.now()\n        df = db.run_in_thread(cls._load_prefixes_synchronously)\n        df.addCallback(cls._update_prefix_cache_with_result)\n        return df\n\n    @classmethod\n    def _load_prefixes_synchronously(cls):\n        return list(manage.Prefix.objects.all().values('id', 'net_address'))\n\n    @classmethod\n    def _update_prefix_cache_with_result(cls, prefixes):\n        cls._logger.debug(\"Populating prefix cache with %d prefixes\", len(prefixes))\n\n        prefixes = [(IP(p['net_address']), p['id']) for p in prefixes]\n        prefixes.sort(key=operator.itemgetter(1), reverse=True)\n\n        del cls.prefix_cache[:]\n        cls.prefix_cache.extend(prefixes)\n\n    def _make_new_mappings(self, mappings):\n        \"\"\"Convert a sequence of (ip, mac) tuples into a Arp shadow containers.\n\n        Arguments:\n\n          mappings -- An iterable containing tuples: (ip, mac)\n\n        \"\"\"\n        netbox = self.containers.factory(None, shadows.Netbox)\n        timestamp = datetime.now()\n        infinity = datetime.max\n\n        for ip, mac in mappings:\n            if not ip or not mac:\n                continue  # Some devices seem to return empty results!\n            arp = self.containers.factory((ip, mac), shadows.Arp)\n            arp.netbox = netbox\n            arp.sysname = self.netbox.sysname\n            arp.ip = ip.strCompressed()\n            arp.mac = mac\n            arp.prefix_id = self._find_largest_matching_prefix(ip)\n            arp.start_time = timestamp\n            arp.end_time = infinity\n\n    def _expire_arp_records(self, arp_ids):\n        \"\"\"Create containers to force expiry of a set of Arp records.\n\n        Arguments:\n\n          arp_ids -- An iterable containing db primary keys for Arp records.\n\n        \"\"\"\n        timestamp = datetime.now()\n\n        for arp_id in arp_ids:\n            arp = self.containers.factory(arp_id, shadows.Arp)\n            arp.id = arp_id\n            arp.end_time = timestamp\n\n    def _find_largest_matching_prefix(self, ip):\n        \"\"\"Find the largest prefix that ip is part of.\n\n        Returns:\n\n          An integer prefix ID, or None if no matches were found.\n        \"\"\"\n        for prefix_addr, prefix_id in self.prefix_cache:\n            if ip in prefix_addr:\n                return prefix_id\n\n\ndef ipv6_address_in_mappings(mappings):\n    \"\"\"Return True if there are any IPv6 addresses in mappings.\n\n    Mappings must be an iterable of tuples: (foo, ip, bar).\n\n    \"\"\"\n    for _, ip, _ in mappings:\n        if ip and ip.version() == 6:\n            return True\n    return False\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/bgp.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"BGP peer state monitor plugin for ipdevpoll\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll.shadows import GatewayPeerSession, Netbox\nfrom nav.models import manage\n\nfrom nav.mibs.bgp4_mib import BGP4Mib\nfrom nav.mibs.bgp4_v2_mib_juniper import BGP4V2JuniperMib\nfrom nav.mibs.cisco_bgp4_mib import CiscoBGP4Mib\n\n\nclass BGP(Plugin):\n    \"\"\"Monitors the state of BGP peers through polling\"\"\"\n\n    @classmethod\n    def can_handle(cls, netbox):\n        \"\"\"This will only be useful on routers\"\"\"\n        daddy_says_ok = super(BGP, cls).can_handle(netbox)\n        return daddy_says_ok and netbox.category.id in ('GW', 'GSW')\n\n    @inlineCallbacks\n    def handle(self):\n        mib = yield self._get_supported_mib()\n\n        if not mib:\n            self._logger.debug(\"No BGP MIBs are supported\")\n            return None\n\n        self._logger.debug(\"Collect BGP peers from %s\", mib.mib['moduleName'])\n        data = yield mib.get_bgp_peer_states()\n        if data:\n            self._logger.debug(\"found %d bgp peers\", len(data))\n        for peer in data.values():\n            if str(peer.peer) == '0.0.0.0':\n                self._logger.debug(\"ignoring buggy bgp entry: %r\", peer)\n                continue  # ignore buggy entries\n            self._make_gwpeer(peer)\n\n    def _make_gwpeer(self, bgp_peer_state):\n        netbox = self.containers.factory(None, Netbox)\n\n        key = ('bgp', str(bgp_peer_state.peer))\n        session = self.containers.factory(key, GatewayPeerSession)\n        session.netbox = netbox\n        session.protocol = manage.GatewayPeerSession.PROTOCOL_BGP\n        session.peer = bgp_peer_state.peer\n        session.state = bgp_peer_state.state\n        session.adminstatus = bgp_peer_state.adminstatus\n        session.local_as = bgp_peer_state.local_as\n        session.remote_as = bgp_peer_state.remote_as\n\n        return session\n\n    @inlineCallbacks\n    def _get_supported_mib(self):\n        for mibclass in (BGP4V2JuniperMib, CiscoBGP4Mib, BGP4Mib):\n            mib = mibclass(self.agent)\n            support = yield mib.is_supported()\n            if support:\n                return mib\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/bridge.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect bridge data.\n\nThis plugin doesn't do much except find baseport numbers for switch\nports, using the BRIDGE-MIB.  The plugin also supports multiple\nBRIDGE-MIB instances if they are listed as logical entities in\nENTITY-MIB. The plugin also fetches the base bridge address from the bridge mib\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\nfrom nav.ipdevpoll.utils import get_multibridgemib, binary_mac_to_hex\n\nINFO_KEY_BRIDGE_INFO = 'bridge_info'\nINFO_VAR_BASE_ADDRESS = 'base_address'\n\n\nclass Bridge(Plugin):\n    \"Finds interfaces in L2/switchport mode\"\n\n    @defer.inlineCallbacks\n    def handle(self):\n        bridge = yield get_multibridgemib(self.agent)\n        bridge_address = yield bridge.get_base_bridge_address()\n        if bridge_address:\n            self._save_bridge_address(bridge_address)\n        baseports = yield bridge.get_baseport_ifindex_map()\n        return self._set_port_numbers(baseports)\n\n    def _save_bridge_address(self, bridge_address):\n        info = self.containers.factory(\n            (INFO_KEY_BRIDGE_INFO, INFO_VAR_BASE_ADDRESS), shadows.NetboxInfo\n        )\n        info.value = binary_mac_to_hex(bridge_address)\n        info.netbox = self.netbox\n        info.key = INFO_KEY_BRIDGE_INFO\n        info.variable = INFO_VAR_BASE_ADDRESS\n\n    def _set_port_numbers(self, baseports):\n        \"Processes a dictionary of {portnumber: ifindex} mappings\"\n\n        self._logger.debug(\n            \"Found %d base (switch) ports: %r\", len(baseports), baseports\n        )\n\n        for portnum, ifindex in baseports.items():\n            interface = self.containers.factory(ifindex, shadows.Interface)\n            interface.ifindex = ifindex\n            interface.baseport = portnum\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/cam.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"ipdevpoll plugin to collect switch forwarding tables and STP blocking ports\"\n\nimport re\nfrom collections import defaultdict\n\nfrom twisted.internet import defer\n\nfrom nav.models import manage\nfrom nav.util import splitby\nfrom nav.mibs.bridge_mib import MultiBridgeMib\nfrom nav.mibs.qbridge_mib import QBridgeMib\nfrom nav.ipdevpoll import Plugin, db\nfrom nav.ipdevpoll import shadows\nfrom nav.ipdevpoll import utils\nfrom nav.ipdevpoll.neighbor import get_netbox_macs\n\n\nclass Cam(Plugin):\n    \"\"\"Collects switches' forwarding tables and port STP states.\n\n    For each port it finds forwarding data from, a decision is made:\n\n    1. If the port reports any MAC address belonging to any NAV-monitored\n       equipment, it is considered a topological port and one or more entries\n       in the adjacency candidate table is made.\n\n    2. Otherwise, the found forwarding entries are stored in NAV's cam table.\n\n    \"\"\"\n\n    bridge = None\n    fdb = None\n    monitored = None\n    dot1d_instances = None\n    baseports = None\n    linkports = None\n    accessports = None\n    blocking = None\n    my_macs = None\n\n    @classmethod\n    @defer.inlineCallbacks\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(Cam, cls).can_handle(netbox)\n        has_ifcs = yield db.run_in_thread(cls._has_interfaces, netbox)\n        return has_ifcs and daddy_says_ok\n\n    @classmethod\n    def _has_interfaces(cls, netbox):\n        return manage.Interface.objects.filter(netbox__id=netbox.id).count() > 0\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Gets forwarding tables from Q-BRIDGE-MIB. It that fails, reverts to\n        BRIDGE-MIB, with optional community string indexing on Cisco.\n\n        \"\"\"\n        fdb = yield self._get_dot1q_mac_port_mapping()\n        self._log_fdb_stats(\"Q-BRIDGE-MIB\", fdb)\n\n        if not fdb:\n            fdb = yield self._get_dot1d_mac_port_mapping()\n            self._log_fdb_stats(\"BRIDGE-MIB\", fdb)\n\n        self.fdb = fdb\n\n        self.monitored = yield db.run_in_thread(get_netbox_macs)\n        self.my_macs = set(\n            mac\n            for mac, netboxid in self.monitored.items()\n            if netboxid == self.netbox.id\n        )\n        self._classify_ports()\n        self._store_cam_records()\n        self._store_adjacency_candidates()\n\n        self.blocking = yield self._get_dot1d_stp_blocking()\n\n    @defer.inlineCallbacks\n    def _get_dot1d_mac_port_mapping(self):\n        bridge = yield self._get_bridge()\n        fdb = yield bridge.get_forwarding_database()\n        baseports = yield self._get_baseports()\n\n        mapping = defaultdict(set)\n        for mac, port in fdb.items():\n            if port in baseports:\n                ifindex = baseports[port]\n                mapping[ifindex].add(mac)\n\n        return dict(mapping)\n\n    @defer.inlineCallbacks\n    def _get_dot1q_mac_port_mapping(self):\n        qbridge = QBridgeMib(self.agent)\n        fdb = yield qbridge.get_forwarding_database()\n        baseports = yield self._get_baseports()\n\n        mapping = defaultdict(set)\n        for mac, port in fdb:\n            if port in baseports:\n                ifindex = baseports[port]\n                mapping[ifindex].add(mac)\n\n        return dict(mapping)\n\n    @defer.inlineCallbacks\n    def _get_baseports(self):\n        if not self.baseports:\n            bridge = yield self._get_bridge()\n            self.baseports = yield bridge.get_baseport_ifindex_map()\n        return self.baseports\n\n    @defer.inlineCallbacks\n    def _get_bridge(self):\n        if not self.bridge:\n            instances = yield self._get_dot1d_instances()\n            self.bridge = MultiBridgeMib(self.agent, instances)\n        return self.bridge\n\n    @defer.inlineCallbacks\n    def _get_dot1d_instances(self):\n        if not self.dot1d_instances:\n            self.dot1d_instances = yield utils.get_dot1d_instances(self.agent)\n        return self.dot1d_instances\n\n    def _log_fdb_stats(self, prefix, fdb):\n        mac_count = sum(len(v) for v in fdb.values())\n        self._logger.debug(\n            \"%s: %d MAC addresses found on %d ports\", prefix, mac_count, len(fdb)\n        )\n\n    def _classify_ports(self):\n        def _is_linkport(portmacs):\n            _port, macs = portmacs\n            return any(\n                mac in self.monitored and mac not in self.my_macs for mac in macs\n            )\n\n        linkports, accessports = splitby(_is_linkport, self.fdb.items())\n        self.linkports = dict(linkports)\n        self.accessports = dict(accessports)\n\n        self._logger.debug(\"up/downlinks: %r\", sorted(self.linkports.keys()))\n        self._logger.debug(\"access ports: %r\", sorted(self.accessports.keys()))\n\n    def _store_cam_records(self):\n        for port in self.accessports:\n            macs = self.fdb.get(port, [])\n            for mac in macs:\n                self.containers.factory((port, mac), shadows.Cam, port, mac)\n        shadows.Cam.manager.add_sentinel(self.containers)  # ensure cleanup!\n\n    def _store_adjacency_candidates(self):\n        shadows.AdjacencyCandidate.sentinel(self.containers, 'cam')\n        for port in self.linkports:\n            macs = self.fdb.get(port, None) or set()\n            macs = macs.intersection(self.monitored).difference(self.my_macs)\n            if macs:\n                self._logger.debug(\n                    \"%r sees the following monitored mac addresses: %r\", port, macs\n                )\n                candidates = [self.monitored[mac] for mac in macs]\n                self._make_candidates(port, candidates)\n\n    def _make_candidates(self, port, candidates):\n        for netboxid in candidates:\n            otherbox = self._factory_netbox(netboxid)\n            ifc = self._factory_interface(port)\n\n            candidate = self._factory_candidate(port, netboxid)\n            candidate.interface = ifc\n            candidate.to_netbox = otherbox\n            candidate.source = 'cam'\n\n    def _factory_netbox(self, netboxid):\n        netbox = self.containers.factory(netboxid, shadows.Netbox)\n        netbox.id = netboxid\n        return netbox\n\n    def _factory_interface(self, ifindex):\n        ifc = self.containers.factory(ifindex, shadows.Interface)\n        ifc.netbox = self.netbox\n        ifc.ifindex = ifindex\n        return ifc\n\n    def _factory_candidate(self, port, candidate):\n        candidate = self.containers.factory(\n            (port, candidate, None, 'cam'), shadows.AdjacencyCandidate\n        )\n        candidate.netbox = self.netbox\n        return candidate\n\n    #\n    # STP blocking related methods\n    #\n    # Currently, these are here just because we don't want to send multiple\n    # duplicate queries to find multiple BRIDGE-MIB instances etc.  When SNMP\n    # response caching is properly implemented, this should be extracted into\n    # a separate plugin.\n    #\n\n    @defer.inlineCallbacks\n    def _get_dot1d_stp_blocking(self):\n        bridge = yield self._get_bridge()\n        blocking = yield bridge.get_stp_blocking_ports()\n        baseports = yield self._get_baseports()\n\n        # Ensure processing of blocking states in DB, even if we found no\n        # current blocking ports:\n        self.containers.add(shadows.SwPortBlocked)\n\n        translated = [\n            (baseports[port], vlan) for port, vlan in blocking if port in baseports\n        ]\n        if translated:\n            self._log_blocking_ports(translated)\n            self._store_blocking_ports(translated)\n        return translated\n\n    def _log_blocking_ports(self, blocking):\n        ifc_count = len(set(ifc for ifc, vlan in blocking))\n        vlan_count = len(set(vlan for ifc, vlan in blocking))\n        self._logger.debug(\n            \"found %d STP blocking ports on %d vlans: %r\",\n            ifc_count,\n            vlan_count,\n            blocking,\n        )\n\n    VLAN_PATTERN = re.compile('(vlan)?(?P<vlan>[0-9]+)', re.IGNORECASE)\n\n    def _store_blocking_ports(self, blocking):\n        for ifindex, vlan in blocking:\n            if vlan:\n                match = self.VLAN_PATTERN.match(vlan)\n                vlan = int(match.group('vlan')) if match else None\n\n            ifc = self.containers.factory(ifindex, shadows.Interface)\n            ifc.ifindex = ifindex\n\n            block = self.containers.factory((ifindex, vlan), shadows.SwPortBlocked)\n            block.interface = ifc\n            block.vlan = vlan\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/cdp.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"ipdevpoll plugin to collect CDP (Cisco Discovery Protocol) information\"\n\nimport string\n\nfrom twisted.internet import defer\n\nfrom nav.macaddress import MacAddress\nfrom nav.models import manage\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.mibs.cisco_cdp_mib import CiscoCDPMib\nfrom nav.ipdevpoll.neighbor import Neighbor\nfrom nav.ipdevpoll.db import run_in_thread\nfrom nav.ipdevpoll.timestamps import TimestampChecker\n\nINFO_VAR_NAME = \"cdp\"\nINFO_KEY_NAME = \"cdp\"\nINFO_VAR_NEIGHBORS_CACHE = \"neighbors_cache\"\nSOURCE = \"cdp\"\n\n\nclass CDP(Plugin):\n    \"\"\"Finds neighboring devices from a device's CDP cache.\n\n    If the neighbor can be identified as something monitored by NAV, a\n    topology adjacency candidate will be registered. Otherwise, the\n    neighboring device will be noted as an unrecognized neighbor to this\n    device.\n\n    \"\"\"\n\n    neighbors = None\n\n    @classmethod\n    @defer.inlineCallbacks\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(CDP, cls).can_handle(netbox)\n        has_ifcs = yield run_in_thread(cls._has_interfaces, netbox)\n        return has_ifcs and daddy_says_ok\n\n    @classmethod\n    def _has_interfaces(cls, netbox):\n        return manage.Interface.objects.filter(netbox__id=netbox.id).count() > 0\n\n    @defer.inlineCallbacks\n    def handle(self):\n        cdp = CiscoCDPMib(self.agent)\n\n        stampcheck = yield self._get_stampcheck(cdp)\n        remote_table_has_changed = yield stampcheck.is_changed()\n        need_to_collect = remote_table_has_changed\n\n        if not remote_table_has_changed:\n            cache = yield self._get_cached_neighbors()\n            if cache is not None:\n                self._logger.debug(\"Using cached CDP neighbors\")\n                self.neighbors = cache\n            else:\n                self._logger.debug(\n                    \"CDP cache table didn't change, but local cache was empty\"\n                )\n                need_to_collect = True\n\n        if need_to_collect:\n            self._logger.debug(\"collecting CDP cache table\")\n            self.neighbors = yield cdp.get_cdp_neighbors()\n\n        if self.neighbors:\n            self._logger.debug(\"CDP neighbors:\\n %r\", self.neighbors)\n            yield run_in_thread(self._process_neighbors)\n            yield self._save_cached_neighbors(self.neighbors)\n        else:\n            self._logger.debug(\"No CDP neighbors to process\")\n\n        # Store sentinels to signal that CDP neighbors have been processed\n        shadows.AdjacencyCandidate.sentinel(self.containers, SOURCE)\n        shadows.UnrecognizedNeighbor.sentinel(self.containers, SOURCE)\n        stampcheck.save()\n\n    @defer.inlineCallbacks\n    def _get_stampcheck(self, mib):\n        stampcheck = TimestampChecker(self.agent, self.containers, INFO_VAR_NAME)\n        yield stampcheck.load()\n        yield stampcheck.collect([mib.get_neighbors_last_change()])\n\n        return stampcheck\n\n    @defer.inlineCallbacks\n    def _get_cached_neighbors(self):\n        \"\"\"Retrieves a cached version of the remote neighbor table\"\"\"\n        value = yield run_in_thread(\n            manage.NetboxInfo.cache_get,\n            self.netbox,\n            INFO_KEY_NAME,\n            INFO_VAR_NEIGHBORS_CACHE,\n        )\n        return value\n\n    @defer.inlineCallbacks\n    def _save_cached_neighbors(self, neighbors):\n        \"\"\"Saves a cached a copy of the remote neighbor table\"\"\"\n        yield run_in_thread(\n            manage.NetboxInfo.cache_set,\n            self.netbox,\n            INFO_KEY_NAME,\n            INFO_VAR_NEIGHBORS_CACHE,\n            neighbors,\n        )\n\n    def _process_neighbors(self):\n        \"\"\"\n        Tries to synchronously identify CDP cache entries in NAV's database\n        \"\"\"\n        neighbors = [CDPNeighbor(cdp, self.netbox.ip) for cdp in self.neighbors]\n\n        self._process_identified([n for n in neighbors if n.identified])\n        self._process_unidentified([n.record for n in neighbors if not n.identified])\n\n    def _process_identified(self, identified):\n        for neigh in identified:\n            self._logger.debug(\n                \"identified neighbor %r from %r\",\n                (neigh.netbox, neigh.interfaces),\n                neigh.record,\n            )\n\n            self._store_candidates(neigh)\n\n    def _store_candidates(self, neighbor):\n        if not neighbor.interfaces:\n            return self._store_candidate(neighbor, None)\n        for interface in neighbor.interfaces:\n            self._store_candidate(neighbor, interface)\n\n    def _store_candidate(self, neighbor, interface):\n        ifindex = neighbor.record.ifindex\n        ifc = self.containers.factory(ifindex, shadows.Interface)\n        ifc.ifindex = ifindex\n\n        key = (\n            ifindex,\n            self.netbox.id,\n            neighbor.netbox.id,\n            interface and interface.id or None,\n            SOURCE,\n        )\n        cand = self.containers.factory(key, shadows.AdjacencyCandidate)\n        cand.netbox = self.netbox\n        cand.interface = ifc\n        cand.to_netbox = neighbor.netbox\n        cand.to_interface = interface\n        cand.source = SOURCE\n\n    def _process_unidentified(self, unidentified):\n        for record in unidentified:\n            self._store_unidentified(record)\n\n    def _store_unidentified(self, record):\n        ifc = self.containers.factory(record.ifindex, shadows.Interface)\n        ifc.ifindex = record.ifindex\n\n        key = (record.ifindex, str(record.ip), SOURCE)\n        neighbor = self.containers.factory(key, shadows.UnrecognizedNeighbor)\n        neighbor.netbox = self.netbox\n        neighbor.interface = ifc\n        neighbor.remote_id = str(record.ip)\n        neighbor.remote_name = record.deviceid\n        neighbor.source = SOURCE\n\n\nclass CDPNeighbor(Neighbor):\n    \"\"\"Parses a CDP tuple from nav.mibs.cisco_cdp_mib to identify a neighbor\"\"\"\n\n    def _identify_netbox(self):\n        netbox = None\n        if self.record.ip:\n            netbox = self._netbox_from_ip(self.record.ip)\n\n        if not netbox and self.record.deviceid:\n            if looks_like_binary_garbage(self.record.deviceid):\n                if len(self.record.deviceid) == 6:\n                    try:\n                        mac = MacAddress.from_octets(self.record.deviceid)\n                    except TypeError:\n                        pass\n                    else:\n                        netbox = self._netbox_from_mac(str(mac))\n                else:\n                    self._logger.debug(\n                        \"remote deviceid looks like garbage: %r\", self.record.deviceid\n                    )\n            else:\n                netbox = self._netbox_from_sysname(self.record.deviceid)\n        return netbox\n\n    def _identify_interfaces(self):\n        return self._interfaces_from_name(self.record.deviceport)\n\n\ndef looks_like_binary_garbage(deviceid):\n    \"\"\"Determines whether the string looks like it contains binary garbage\"\"\"\n    return any(c not in string.printable for c in deviceid)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/ciscovlan.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect 802.1q VLAN information from Cisco devices.\n\nCISCO-VTP-MIB and CISCO-VLAN-MEMBERSHIP-MIB are used as sources for\nthis plugin.\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs.if_mib import IfMib\nfrom nav.mibs.cisco_vtp_mib import CiscoVTPMib\nfrom nav.mibs.cisco_vlan_membership_mib import CiscoVlanMembershipMib\nfrom nav.mibs.cisco_vlan_iftable_relationship_mib import CiscoVlanIftableRelationshipMib\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\nfrom nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\n\n\nclass CiscoVlan(Plugin):\n    \"\"\"Collect 802.1q info from CISCO-VTP-MIB and CISCO-VLAN-MEMBERSHIP-MIB.\"\"\"\n\n    _valid_ifindexes = ()\n\n    @classmethod\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(CiscoVlan, cls).can_handle(netbox)\n        if netbox.type:\n            vendor_id = netbox.type.get_enterprise_id()\n            if vendor_id != VENDOR_ID_CISCOSYSTEMS:\n                return False\n        return daddy_says_ok\n\n    @defer.inlineCallbacks\n    def handle(self):\n        ciscovtp = CiscoVTPMib(self.agent)\n        ciscovm = CiscoVlanMembershipMib(self.agent)\n        ciscovlanif = CiscoVlanIftableRelationshipMib(self.agent)\n\n        enabled_vlans = yield ciscovtp.get_trunk_enabled_vlans(as_bitvector=True)\n        native_vlans = yield ciscovtp.get_trunk_native_vlans()\n        vlan_membership = yield ciscovm.get_vlan_membership()\n        vlan_ifindex = yield ciscovlanif.get_routed_vlan_ifindexes()\n\n        if vlan_membership or native_vlans or enabled_vlans or vlan_ifindex:\n            self._logger.debug(\"vlan_membership: %r\", vlan_membership)\n            self._logger.debug(\"native_vlans: %r\", native_vlans)\n            self._logger.debug(\"enabled_vlans: %r\", enabled_vlans)\n            self._logger.debug(\"vlan_ifindex: %r\", vlan_ifindex)\n\n            self._valid_ifindexes = yield self._get_ifindexes()\n            self._store_access_ports(vlan_membership)\n            self._store_trunk_ports(native_vlans, enabled_vlans)\n            self._store_vlan_ifc_relationships(vlan_ifindex)\n\n    @defer.inlineCallbacks\n    def _get_ifindexes(self):\n        ifmib = IfMib(self.agent)\n        indexes = yield ifmib.get_ifindexes()\n        return set(indexes)\n\n    def _store_access_ports(self, vlan_membership):\n        \"\"\"Store vlan memberships for all ports.\"\"\"\n        for ifindex, vlan in vlan_membership.items():\n            if ifindex not in self._valid_ifindexes:\n                self._logger.debug(\"ignoring info for invalid ifindex %s\", ifindex)\n                continue\n\n            interface = self.containers.factory(ifindex, shadows.Interface)\n            interface.trunk = False\n            interface.vlan = vlan\n            if not interface.baseport:\n                interface.baseport = -ifindex\n\n    def _store_trunk_ports(self, native_vlans, enabled_vlans):\n        \"\"\"Store the set of enabled vlans for each trunk port.\"\"\"\n        for ifindex, vector in enabled_vlans.items():\n            if ifindex not in self._valid_ifindexes:\n                self._logger.debug(\"ignoring info for invalid ifindex %s\", ifindex)\n                continue\n\n            interface = self.containers.factory(ifindex, shadows.Interface)\n            interface.trunk = True\n            if ifindex in native_vlans:\n                interface.vlan = native_vlans[ifindex]\n\n            self._logger.debug(\n                \"Trunk port %r enabled VLAN count: %s\",\n                interface.ifname,\n                len(vector.get_set_bits()),\n            )\n\n            allowed = self.containers.factory(ifindex, shadows.SwPortAllowedVlan)\n            allowed.interface = interface\n            allowed.hex_string = vector.to_hex()\n\n    def _store_vlan_ifc_relationships(self, routed_vlans):\n        for route in routed_vlans:\n            ifc = self.containers.factory(route.virtual, shadows.Interface)\n            ifc.vlan = route.vlan\n            vlan = self.containers.factory(route.virtual, shadows.Vlan)\n            vlan.vlan = route.vlan\n            if route.physical:\n                phys_ifc = self.containers.factory(route.physical, shadows.Interface)\n                phys_ifc.trunk = True\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/debugging.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugins to test error handling and scheduling in ipdevpoll\n\nExample config:\n[plugins]\ncrash=nav.ipdevpoll.plugins.debugging.Crash\nerror=nav.ipdevpoll.plugins.debugging.Error\nfail=nav.ipdevpoll.plugins.debugging.Fail\nsleep=nav.ipdevpoll.plugins.debugging.Sleep\nnoop=nav.ipdevpoll.plugins.debugging.Noop\n\n[job_debug]\ninterval: 30\ndescription: Testing testing\nplugins: sleep\n\n[job_stress]\ninterval: 1\ndescription: Stress the scheduler\nplugins: noop\n\n[job_stress2]\ninterval: 2\ndescription: Stress the scheduler\nplugins: noop\n\n[job_stress5]\ninterval: 5\ndescription: Stress the scheduler\nplugins: noop\n\"\"\"\n\nfrom twisted.internet import defer, reactor\n\nfrom nav.ipdevpoll import Plugin\n\n\nclass Crash(Plugin):\n    \"This plugin crashes when invoked\"\n\n    def handle(self):\n        raise RuntimeError(\"crash\")\n\n\nclass Error(Plugin):\n    \"This plugin allways triggers it's deferred's errback\"\n\n    def handle(self):\n        deferred = defer.Deferred()\n        reactor.callLater(0, self.error, deferred)\n        return deferred\n\n    def error(self, deferred):\n        try:\n            raise RuntimeError()\n        except Exception:  # noqa: BLE001\n            deferred.errback()\n\n\nclass Fail(Plugin):\n    \"This plugin allways returns a failed state\"\n\n    def handle(self):\n        deferred = defer.Deferred()\n        reactor.callLater(0, deferred.callback, False)\n        return deferred\n\n\nclass Sleep(Plugin):\n    \"This plugin succeeds, but very slowly\"\n\n    def handle(self):\n        deferred = defer.Deferred()\n        reactor.callLater(300, deferred.callback, True)\n        return deferred\n\n\nclass Noop(Plugin):\n    \"This plugin allways returns a failed state\"\n\n    def handle(self):\n        deferred = defer.Deferred()\n        reactor.callLater(0, deferred.callback, True)\n        return deferred\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/dnsname.py",
    "content": "#\n# Copyright (C) 2008-2012, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nipdevpoll plugin to perform reverse DNS lookups on netbox IP addresses.\n\nWill generate events if there are mismatches between device sysname\nand dnsname.\n\"\"\"\n\nfrom itertools import cycle\n\nfrom IPy import IP\n\nfrom twisted.internet import defer, error\nfrom twisted.names import client, dns\nfrom twisted.names.error import DomainError\n\nfrom nav.ipdevpoll import Plugin, shadows\n\n_resolvers = cycle([client.createResolver() for i in range(3)])\n\n\nclass DnsName(Plugin):\n    \"\"\"Performs reverse DNS lookup on netbox IP address\"\"\"\n\n    @staticmethod\n    def can_handle(netbox):\n        \"Handles anything, anytime, since we don't query the netbox directly\"\n        return True\n\n    def handle(self):\n        ip = IP(self.netbox.ip)\n        self._logger.debug(\"Doing DNS PTR lookup for %s\", ip.reverseName())\n        # Use the OS configured DNS resolver method\n        resolver = next(_resolvers)\n        df = resolver.lookupPointer(ip.reverseName())\n        df.addCallbacks(self._find_ptr_response, self._handle_failure, errbackArgs=ip)\n        df.addCallback(self._log_name).addCallback(self._verify_name_change)\n        return df\n\n    def _handle_failure(self, failure, ip=None):\n        \"\"\"Logs DNS failures, but does not stop the job from running.\"\"\"\n        failtype = failure.trap(error.TimeoutError, defer.TimeoutError, DomainError)\n        if failtype in (error.TimeoutError, defer.TimeoutError):\n            self._logger.warning(\"DNS lookup timed out\")\n        elif failtype == DomainError:\n            self._logger.warning(\n                \"DNS lookup error for %s: %s\", ip, failure.type.__name__\n            )\n\n    def _find_ptr_response(self, dns_response):\n        \"\"\"\n        Finds and returns a PTR record from a DNS response.\n\n        If multiple records are found, prefer to keep the existing name,\n        if still applicable.\n\n        \"\"\"\n        self._logger.debug(\"DNS response: %s\", dns_response)\n        ptrs = (\n            record\n            for record_set in dns_response\n            for record in record_set\n            if record.type == dns.PTR\n        )\n        names = [str(record.payload.name) for record in ptrs]\n\n        if len(names) > 1:\n            self._logger.debug(\"found multiple PTR records: %s\", names)\n            if self.netbox.sysname in names:\n                self._logger.debug(\"keeping old name for stability\")\n                return self.netbox.sysname\n\n        if names:\n            return names[0]\n\n    def _log_name(self, dns_name):\n        if not dns_name:\n            self._logger.warning(\n                \"Unable to find PTR record for %s (%s)\",\n                self.netbox.ip,\n                IP(self.netbox.ip).reverseName(),\n            )\n        else:\n            self._logger.debug(\n                \"Reverse DNS lookup result: %s -> %s\", self.netbox.ip, dns_name\n            )\n        return dns_name\n\n    def _verify_name_change(self, new_name):\n        if new_name:\n            if new_name.strip().lower() != self.netbox.sysname.strip().lower():\n                self._logger.warning(\n                    \"Box dnsname has changed from %s to %s\",\n                    repr(self.netbox.sysname),\n                    repr(new_name),\n                )\n                netbox = self.containers.factory(None, shadows.Netbox)\n                netbox.sysname = new_name\n\n        return new_name\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/dot1q.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect 802.1q VLAN information.\n\nBRIDGE-MIB and Q-BRIDGE-MIB are used as sources for this plugin.\nBRIDGE-MIB is used purely to collect a translation map between\nifindexes from IF-MIB and the port numbers used internally in BRIDGE\nand Q-BRIDGE.\n\nSpecifically, this plugin will set the vlan and trunk attributes for\ninterfaces, as well as set the list of enabled VLANs on trunks.\n\n\"\"\"\n\nfrom collections import defaultdict\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.util import mergedicts\nfrom nav.mibs.bridge_mib import BridgeMib\nfrom nav.mibs.qbridge_mib import QBridgeMib\nfrom nav.models.manage import SwPortAllowedVlan\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\n\nclass Dot1q(Plugin):\n    \"\"\"Collect 802.1q info from BRIDGE and Q-BRIDGE MIBs.\"\"\"\n\n    baseports = {}\n    pvids = {}\n\n    def __init__(self, *args, **kwargs):\n        super(Dot1q, self).__init__(*args, **kwargs)\n        self.bridgemib = BridgeMib(self.agent)\n        self.qbridgemib = QBridgeMib(self.agent)\n\n    def _remap_vlan(self, vlan_ident):\n        \"\"\"Hook-in for subclasses to remap VLAN numbers if necessary\"\"\"\n        return vlan_ident\n\n    @inlineCallbacks\n    def handle(self):\n        \"\"\"Collects VLAN configuration using Q-BRIDGE-MIB.\n\n        If no PVID information can be found in Q-BRIDGE, the plugin assumes\n        the device either doesn't support Q-BRIDGE or doesn't support 802.1q\n        and exits.\n\n        \"\"\"\n        self._logger.debug(\"Collecting 802.1q VLAN information\")\n\n        self.baseports = yield self.bridgemib.get_baseport_ifindex_map()\n        self.pvids = yield self.qbridgemib.get_baseport_pvid_map()\n        if self.pvids:\n            self._process_pvids()\n        else:\n            return\n\n        yield self._get_vlan_names()\n        yield self._get_tagging_info()\n\n    def _process_pvids(self):\n        \"\"\"Process the list of collected port/PVID mappings.\n\n        If no PVID data was found, it is assumed that this bridge\n        either does not support Q-BRIDGE-MIB or does not support\n        802.1q, and the plugin exits.\n\n        \"\"\"\n        self._logger.debug(\"PVID mapping: %r\", self.pvids)\n\n        for port, pvid in self.pvids.items():\n            self._set_port_pvid(port, pvid)\n\n    def _set_port_pvid(self, port, pvid):\n        if port in self.baseports:\n            ifindex = self.baseports[port]\n            interface = self.containers.factory(ifindex, shadows.Interface)\n            interface.vlan = pvid\n            interface.trunk = False  # default all ports to non-tagging at first\n        else:\n            self._logger.debug(\"saw reference to non-existant baseport %s\", port)\n\n    @inlineCallbacks\n    def _get_tagging_info(self):\n        \"\"\"Retrieves and processes information about VLAN egress ports and\n        tagging.\n\n        The set of untagged ports is subtracted from the total set of\n        egress ports for each vlan, resulting in a set of ports that\n        transmit and receive tagged frames for this vlan (i.e. trunk\n        ports).\n\n        \"\"\"\n        egress, untagged = yield self._retrieve_vlan_ports()\n        trunkports = self._find_trunkports(egress, untagged)\n        self._logger.debug(\"trunkports: %r\", trunkports)\n\n        self._store_trunkports(trunkports)\n\n    @inlineCallbacks\n    def _retrieve_vlan_ports(self):\n        query = self.qbridgemib\n        egress = yield query.get_vlan_current_egress_ports()\n        untagged = yield query.get_vlan_current_untagged_ports()\n\n        if not egress and not untagged:\n            egress = yield query.get_vlan_static_egress_ports()\n            untagged = yield query.get_vlan_static_untagged_ports()\n\n        return (egress, untagged)\n\n    def _find_trunkports(self, egress, untagged):\n        trunkports = defaultdict(list)\n        for vlan, (egress, untagged) in mergedicts(egress, untagged).items():\n            try:\n                tagged = egress - untagged\n            except ValueError:\n                self._logger.error(\n                    \"vlan %s subtraction mismatch between \"\n                    \"EgressPorts and UntaggedPorts\",\n                    vlan,\n                )\n            else:\n                for port in tagged:\n                    trunkports[port].append(vlan)\n            finally:\n                self._logger.debug(\n                    \"vlan: %s egress: %r untagged: %r\", vlan, egress, untagged\n                )\n\n        return trunkports\n\n    def _store_trunkports(self, trunkports):\n        for port, vlans in trunkports.items():\n            self._set_trunkport(port, vlans)\n\n    def _set_trunkport(self, port, vlans):\n        if port not in self.baseports:\n            self._logger.debug(\"saw reference to non-existant baseport %s\", port)\n            return\n\n        # Mark as trunk\n        ifindex = self.baseports[port]\n        interface = self.containers.factory(ifindex, shadows.Interface)\n        interface.trunk = True\n\n        # Store a hex string representation of enabled VLANs\n        # in swportallowedvlan\n        allowed = self.containers.factory(ifindex, shadows.SwPortAllowedVlan)\n        allowed.interface = interface\n        allowed.hex_string = vlan_list_to_hex(vlans)\n\n    @inlineCallbacks\n    def _get_vlan_names(self):\n        names = yield self.qbridgemib.get_vlan_static_names()\n        if names:\n            for vlannum, name in names.items():\n                vlannum = self._remap_vlan(vlannum)\n                suffix = '+{}'.format(vlannum)\n                name = name.removesuffix(suffix)\n                vlan = self.containers.factory(name, shadows.Vlan)\n                vlan.net_type = shadows.NetType.get('lan')\n                vlan.vlan = vlannum\n                vlan.net_ident = name\n                vlan.netbox = self.netbox\n                self._logger.debug(\"Found vlan {}: {}\".format(vlannum, name))\n\n\ndef vlan_list_to_hex(vlans):\n    \"\"\"Convert a list of VLAN numbers to a hexadecimal string.\"\"\"\n    return SwPortAllowedVlan.vlan_list_to_hex(vlans)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/entity.py",
    "content": "#\n# Copyright (C) 2009-2012, 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nipdevpoll plugin to collect information about physical entities, if any,\nwithin a Netbox, from the ENTITY-MIB::entPhysicalTable (RFC 4133 and RFC 6933)\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.Snmp import safestring\nfrom nav.ipdevpoll.shadows.entity import NetboxEntity\n\nfrom nav.mibs.entity_mib import EntityMib, EntityTable\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.ipdevpoll.plugins.modules import get_ignored_serials\nfrom nav.ipdevpoll.timestamps import TimestampChecker\nfrom nav.models import manage\n\nINFO_VAR_NAME = 'entityphysical'\n\n\nclass Entity(Plugin):\n    \"\"\"Plugin to collect physical entity data from devices\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(Entity, self).__init__(*args, **kwargs)\n        self.alias_mapping = {}\n        self.entitymib = EntityMib(self.agent)\n        self.stampcheck = TimestampChecker(self.agent, self.containers, INFO_VAR_NAME)\n\n    @classmethod\n    def on_plugin_load(cls):\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        cls.ignored_serials = get_ignored_serials(ipdevpoll_conf)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting physical entity data\")\n        # Temporarily disabled due to consistency issues with some vendors:\n        # need_to_collect = yield self._need_to_collect()\n        # if need_to_collect:\n        if True:\n            physical_table = yield self.entitymib.get_entity_physical_table()\n            self._logger.debug(\"found %d entities\", len(physical_table))\n            self._process_entities(physical_table)\n        self.stampcheck.save()\n\n    @defer.inlineCallbacks\n    def _need_to_collect(self):\n        yield self.stampcheck.load()\n        yield self.stampcheck.collect([self.entitymib.get_last_change_time()])\n\n        result = yield self.stampcheck.is_changed()\n        return result\n\n    def _process_entities(self, result):\n        \"\"\"Process the list of collected entities.\"\"\"\n        # be able to look up all entities using entPhysicalIndex\n        entities = EntityTable(result)\n        containers = [\n            self._container_from_entity(entity)\n            for _, entity in sorted(entities.items())\n        ]\n        self._fix_hierarchy(containers)\n\n    def _fix_hierarchy(self, containers):\n        by_index = {c.index: c for c in containers}\n        ghosts = set()\n        for container in containers:\n            if container.contained_in:\n                parent_id = str(container.contained_in)\n                parent = by_index.get(parent_id)\n                if parent:\n                    container.contained_in = parent\n                else:\n                    ghosts.add(str(container.contained_in))\n                    container.contained_in = None\n\n        if ghosts:\n            self._logger.info(\n                \"kick your device vendor in the shin. entPhysicalContainedIn \"\n                \"values refer to non-existant entities: %s\",\n                \", \".join(ghosts),\n            )\n\n    field_map = {\n        k: 'entPhysical' + v\n        for k, v in dict(\n            index='Index',\n            descr='Descr',\n            vendor_type='VendorType',\n            contained_in='ContainedIn',\n            physical_class='Class',\n            parent_relpos='ParentRelPos',\n            name='Name',\n            hardware_revision='HardwareRev',\n            firmware_revision='FirmwareRev',\n            software_revision='SoftwareRev',\n            mfg_name='MfgName',\n            model_name='ModelName',\n            alias='Alias',\n            asset_id='AssetID',\n            fru='IsFRU',\n            mfg_date='MfgDate',\n            uris='Uris',\n            serial='SerialNum',\n        ).items()\n    }\n\n    class_map = {name: value for value, name in manage.NetboxEntity.CLASS_CHOICES}\n\n    def _container_from_entity(self, ent):\n        device_key = 'ENTITY-MIB:' + str(ent.get(0))\n\n        container = self.containers.factory(device_key, NetboxEntity)\n        netbox = self.containers.factory(None, shadows.Netbox)\n        container.netbox = netbox\n        container.index = ent.get(0)\n        container.source = 'ENTITY-MIB'\n\n        for attr, column in self.field_map.items():\n            value = ent.get(column)\n            if column in EntityMib.text_columns and value and \"\\x00\" in value:\n                value = value.replace(\"\\x00\", \"\")  # Remove broken stuff from text\n            if column in (\"entPhysicalVendorType\", \"entPhysicalUris\") and value:\n                value = safestring(value).replace(\"\\x00\", \"\")\n            if column == 'entPhysicalClass':\n                value = self.class_map.get(value)\n            if value is not None:\n                setattr(container, attr, value)\n\n        serial_num = getattr(container, 'serial', None)\n        if serial_num and serial_num not in self.ignored_serials:\n            device = self.containers.factory(container.serial, shadows.Device)\n            device.serial = serial_num\n            for key in ('hardware', 'firmware', 'software'):\n                val = getattr(container, key + '_revision')\n                if val:\n                    version = getattr(device, key + '_version', None)\n                    if not version:\n                        setattr(device, key + '_version', val)\n            device.active = True\n            container.device = device\n\n        return container\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/extremevlan.py",
    "content": "#\n# Copyright (C) 2011,2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects 802.1q VLAN information from Extreme Networks devices.\n\nUses information from EXTREME-VLAN-MIB and BRIDGE-MIB.\n\n\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.enterprise.ids import VENDOR_ID_EXTREME_NETWORKS\nfrom nav.mibs.extreme_vlan_mib import ExtremeVlanMib\nfrom nav.mibs.bridge_mib import BridgeMib\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\nfrom .dot1q import vlan_list_to_hex\n\n\nclass ExtremeVlan(Plugin):\n    \"\"\"Collects 802.1q info from EXTREME-VLAN-MIB and BRIDGE-MIB\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(ExtremeVlan, self).__init__(*args, **kwargs)\n        self.extremevlan = ExtremeVlanMib(self.agent)\n        self.bridge = BridgeMib(self.agent)\n        self.baseport_ifindex = {}\n\n    @classmethod\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(ExtremeVlan, cls).can_handle(netbox)\n        if netbox.type:\n            vendor_id = netbox.type.get_enterprise_id()\n            if vendor_id != VENDOR_ID_EXTREME_NETWORKS:\n                return False\n        return daddy_says_ok\n\n    def handle(self):\n        self._logger.debug(\n            \"Collecting Extreme Networks proprietary 802.1q VLAN information\"\n        )\n        return self._get_vlan_data()\n\n    @inlineCallbacks\n    def _get_vlan_data(self):\n        vlan_ports = yield self.extremevlan.get_vlan_ports()\n        if not vlan_ports:\n            # Doesn't appear to have VLAN data in EXTREME MIBs, get out now.\n            return None\n        ifindex_vlan = yield self.extremevlan.get_ifindex_vlan_map()\n        self.baseport_ifindex = yield self.bridge.get_baseport_ifindex_map()\n\n        vlan_config = self._consolidate_vlan_config(vlan_ports, ifindex_vlan)\n\n        self._store_access_ports(vlan_config)\n        self._store_trunk_ports(vlan_config)\n\n    def _consolidate_vlan_config(self, vlan_ports, ifindex_vlan):\n        config = {}\n        for vlan_ifindex, (tagged, untagged) in vlan_ports.items():\n            vlanid = ifindex_vlan.get(vlan_ifindex, None)\n            if not vlanid:\n                continue\n            tagged_indexes = self._portnums_to_ifindexes(tagged)\n            untagged_indexes = self._portnums_to_ifindexes(untagged)\n            config[vlanid] = (tagged_indexes, untagged_indexes)\n\n        return config\n\n    def _portnums_to_ifindexes(self, portnums):\n        return [\n            self.baseport_ifindex[portnum]\n            for portnum in portnums\n            if portnum in self.baseport_ifindex\n        ]\n\n    def _store_access_ports(self, vlan_config):\n        \"\"\"Store vlan memberships for all ports.\"\"\"\n        for vlanid, (_tagged, untagged) in vlan_config.items():\n            for ifindex in untagged:\n                interface = self.containers.factory(ifindex, shadows.Interface)\n                interface.trunk = False\n                interface.vlan = vlanid\n\n    def _store_trunk_ports(self, vlan_config):\n        \"\"\"Store the set of enabled vlans for each trunk port.\"\"\"\n        ifindex_vlans = {}\n        for vlanid, (tagged, _untagged) in vlan_config.items():\n            for ifindex in tagged:\n                if ifindex not in ifindex_vlans:\n                    ifindex_vlans[ifindex] = set()\n                ifindex_vlans[ifindex].add(vlanid)\n\n        for ifindex, vlans in ifindex_vlans.items():\n            interface = self.containers.factory(ifindex, shadows.Interface)\n            interface.trunk = True\n            interface.vlan = None\n\n            allowed = self.containers.factory(ifindex, shadows.SwPortAllowedVlan)\n            allowed.interface = interface\n            allowed.hex_string = vlan_list_to_hex(vlans)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/interfaces.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect interface data.\n\nThe plugin uses IF-MIB to retrieve generic interface data, and\nEtherLike-MIB to retrieve duplex status for ethernet interfaces.\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.Snmp import safestring\nfrom nav.mibs import reduce_index\nfrom nav.mibs.if_mib import IfMib\nfrom nav.mibs.etherlike_mib import EtherLikeMib\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\nfrom nav.ipdevpoll.utils import binary_mac_to_hex\nfrom nav.models import manage\n\nDUPLEX_MAP = {\n    'unknown': None,\n    'halfDuplex': manage.Interface.DUPLEX_HALF,\n    'fullDuplex': manage.Interface.DUPLEX_FULL,\n}\n\n\nclass Interfaces(Plugin):\n    \"Collects comprehensive information about device's network interfaces\"\n\n    def __init__(self, *args, **kwargs):\n        super(Interfaces, self).__init__(*args, **kwargs)\n        self.ifmib = IfMib(self.agent)\n        self.etherlikemib = EtherLikeMib(self.agent)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting interface data\")\n        df = self._get_iftable_columns()\n        df.addCallback(self._retrieve_duplex)\n        df.addCallback(self._process_interfaces)\n        df.addCallback(self._get_stack_status)\n        yield df\n        shadows.Interface.add_sentinel(self.containers)\n\n    def _get_iftable_columns(self):\n        df = self.ifmib.retrieve_columns(\n            [\n                'ifDescr',\n                'ifType',\n                'ifSpeed',\n                'ifPhysAddress',\n                'ifAdminStatus',\n                'ifOperStatus',\n                'ifName',\n                'ifHighSpeed',\n                'ifConnectorPresent',\n                'ifAlias',\n            ]\n        )\n        return df.addCallback(reduce_index)\n\n    def _process_interfaces(self, result):\n        \"\"\"Process the list of collected interfaces.\"\"\"\n\n        self._logger.debug(\"Found %d interfaces\", len(result))\n\n        # Now save stuff to containers and pass the list of containers\n        # to the next callback\n        netbox = self.containers.factory(None, shadows.Netbox)\n        interfaces = [\n            self._convert_row_to_container(netbox, ifindex, row)\n            for ifindex, row in result.items()\n            if isinstance(ifindex, int)\n        ]\n        return interfaces\n\n    def _convert_row_to_container(self, netbox, ifindex, row):\n        \"\"\"Convert a collected ifTable/ifXTable row into a container object.\"\"\"\n\n        interface = self.containers.factory(ifindex, shadows.Interface)\n        interface.ifindex = ifindex\n        interface.ifdescr = row['ifDescr']\n        interface.iftype = row['ifType']\n\n        speed = self._extract_interface_speed(\n            row[\"ifSpeed\"],\n            row[\"ifHighSpeed\"],\n            always_use_highspeed=self.config.getboolean(\n                \"interfaces\", \"always_use_ifhighspeed\"\n            ),\n        )\n        if speed is not None:\n            interface.speed = speed\n\n        interface.ifphysaddress = typesafe_binary_mac_to_hex(row['ifPhysAddress'])\n        interface.ifadminstatus = row['ifAdminStatus']\n        interface.ifoperstatus = row['ifOperStatus']\n\n        interface.ifname = row['ifName'] or interface.baseport or row['ifDescr']\n        interface.ifconnectorpresent = row['ifConnectorPresent'] == 1\n        interface.ifalias = safestring(row['ifAlias'])\n\n        # Set duplex if sucessfully retrieved\n        if 'duplex' in row and row['duplex'] in DUPLEX_MAP:\n            interface.duplex = DUPLEX_MAP[row['duplex']]\n\n        interface.gone_since = None\n\n        interface.netbox = netbox\n        return interface\n\n    @staticmethod\n    def _extract_interface_speed(speed, highspeed, always_use_highspeed=False):\n        \"\"\"Determines the interface speed from a combination of ifSpeed and ifHighSpeed\n        values.\n\n        The IF-MIB spec says to use the ifHighSpeed value if the 32-bit unsigned\n        ifSpeed value is maxed out. However, some devices, like Cisco SG350X-24T\n        running 2.5.5.47 firmware, have an incorrect implementation that causes\n        ifSpeed=ifHighSpeed.\n\n        Yet other buggy implementations even have no discernable correlation between\n        the two values, and only their ifHighSpeed value can be trusted.\n        \"\"\"\n        if always_use_highspeed and isinstance(highspeed, int):\n            return float(highspeed)\n\n        if isinstance(speed, int):\n            if 4294967295 > speed != highspeed:\n                return speed / 1000000.0\n            elif isinstance(highspeed, int):\n                return float(highspeed)\n\n    @defer.inlineCallbacks\n    def _get_stack_status(self, interfaces):\n        \"\"\"Retrieves data from the ifStackTable and initiates a search for a\n        proper ifAlias value for those interfaces that lack it.\n\n        \"\"\"\n\n        def _stackify(stackstatus):\n            ifindex_map = dict((ifc.ifindex, ifc) for ifc in interfaces)\n            stack = [\n                (ifindex_map[higher], ifindex_map[lower])\n                for higher, lower in stackstatus\n                if higher in ifindex_map and lower in ifindex_map\n            ]\n            return stack\n\n        stack = yield self.ifmib.get_stack_status().addCallback(_stackify)\n        self._get_ifalias_from_lower_layers(stack)\n        self._create_stack_containers(stack)\n        return interfaces\n\n    def _get_ifalias_from_lower_layers(self, stack):\n        \"\"\"For each interface without an ifAlias value, attempts to find\n        ifAlias from a lower layer interface.\n\n        By popular convention, some devices are configured with virtual router\n        ports that are conceptually a layer above the physical interface.  The\n        virtual port may have no ifAlias value, but the physical interface may\n        have.  We want an ifAlias value, since it tells us the netident of the\n        router port's network.\n\n        \"\"\"\n        for higher, lower in stack:\n            if not higher.ifalias and lower.ifalias:\n                higher.ifalias = lower.ifalias\n                self._logger.debug(\n                    \"%s alias set from lower layer %s: %s\",\n                    higher.ifname,\n                    lower.ifname,\n                    higher.ifalias,\n                )\n\n    def _create_stack_containers(self, stacklist):\n        for higher, lower in stacklist:\n            key = higher.ifindex, lower.ifindex\n            stack = self.containers.factory(key, shadows.InterfaceStack)\n            stack.higher = higher\n            stack.lower = lower\n\n    def _retrieve_duplex(self, interfaces):\n        \"\"\"Get duplex from EtherLike-MIB and update the ifTable results.\"\"\"\n\n        def update_result(duplexes):\n            self._logger.debug(\"Got duplex information: %r\", duplexes)\n            for index, duplex in duplexes.items():\n                if index in interfaces:\n                    interfaces[index]['duplex'] = duplex\n            return interfaces\n\n        deferred = self.etherlikemib.get_duplex()\n        deferred.addCallback(update_result)\n        return deferred\n\n\ndef typesafe_binary_mac_to_hex(octets):\n    \"\"\"Converts binary mac addresses to hexadecimal representations for database\n    storage.\n\n    However, some devices return the wrong data types, so this method will return\n    None if the given value cannot be converted to a Mac Address without a TypeError\n    being raised.\n    \"\"\"\n    try:\n        return binary_mac_to_hex(octets)\n    except TypeError:\n        return None\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/juniperalarm.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Juniper chassis/system alarms\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.enterprise.ids import VENDOR_ID_JUNIPER_NETWORKS_INC\nfrom nav.event2 import EventFactory\nfrom nav.ipdevpoll import Plugin, db\nfrom nav.mibs.juniper_alarm_mib import JuniperAlarmMib\nfrom nav.models.manage import NetboxInfo\n\nYELLOW_EVENT = EventFactory(\n    source='ipdevpoll',\n    target='eventEngine',\n    event_type='juniperYellowAlarmState',\n    start_type='juniperYellowAlarmOn',\n    end_type='juniperYellowAlarmOff',\n)\nRED_EVENT = EventFactory(\n    source='ipdevpoll',\n    target='eventEngine',\n    event_type='juniperRedAlarmState',\n    start_type='juniperRedAlarmOn',\n    end_type='juniperRedAlarmOff',\n)\n\nINFO_KEY_NAME = \"juniperalarm\"\n\n\nclass JuniperChassisAlarm(Plugin):\n    \"\"\"Retrieves the number of red and yellow alarms in a chassis\n\n    This is done by attempting to retrieve the gauges in JUNIPER-ALARM-MIB:\n\n    * jnxYellowAlarmCount\n    * jnxRedAlarmCount\n\n    If the count is not zero, a start event for that color is sent. When the\n    count goes back to zero, an end-event is sent.\n\n    \"\"\"\n\n    RESTRICT_TO_VENDORS = [VENDOR_ID_JUNIPER_NETWORKS_INC]\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting any juniper led alarms\")\n\n        mib = JuniperAlarmMib(self.agent)\n\n        last_yellow_count = yield db.run_in_thread(self._get_last_count, \"yellow_count\")\n        last_red_count = yield db.run_in_thread(self._get_last_count, \"red_count\")\n\n        current_yellow_count = yield mib.get_yellow_alarm_count()\n        current_red_count = yield mib.get_red_alarm_count()\n\n        if last_yellow_count != current_yellow_count:\n            if current_yellow_count:\n                yield db.run_in_thread(\n                    self._post_yellow_alarm_count_non_zero, current_yellow_count\n                )\n            else:\n                yield db.run_in_thread(self._post_yellow_alarm_count_zero)\n\n            yield db.run_in_thread(\n                self._create_or_update_new_alarm_count,\n                current_yellow_count,\n                \"yellow_count\",\n            )\n\n        if last_red_count != current_red_count:\n            if current_red_count:\n                yield db.run_in_thread(\n                    self._post_red_alarm_count_non_zero, current_red_count\n                )\n            else:\n                yield db.run_in_thread(self._post_red_alarm_count_zero)\n\n            yield db.run_in_thread(\n                self._create_or_update_new_alarm_count,\n                current_red_count,\n                \"red_count\",\n            )\n\n    def _get_last_count(self, variable: str):\n        count = getattr(\n            NetboxInfo.objects.filter(netbox__id=self.netbox.id)\n            .filter(key=INFO_KEY_NAME)\n            .filter(variable=variable)\n            .first(),\n            \"value\",\n            None,\n        )\n        if count is not None and count.isdigit():\n            return int(count)\n\n    def _post_yellow_alarm_count_non_zero(self, count: int):\n        YELLOW_EVENT.start(netbox=self.netbox.id, varmap={\"count\": count}).save()\n\n    def _post_yellow_alarm_count_zero(self):\n        YELLOW_EVENT.end(netbox=self.netbox.id).save()\n\n    def _post_red_alarm_count_non_zero(self, count: int):\n        RED_EVENT.start(netbox=self.netbox.id, varmap={\"count\": count}).save()\n\n    def _post_red_alarm_count_zero(self):\n        RED_EVENT.end(netbox=self.netbox.id).save()\n\n    def _create_or_update_new_alarm_count(self, count: int, variable: str):\n        object, _ = NetboxInfo.objects.get_or_create(\n            netbox_id=self.netbox.id,\n            key=INFO_KEY_NAME,\n            variable=variable,\n        )\n        object.value = count\n        object.save()\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/juniperdot1q.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect 802.1q VLAN information, but with a workaround\nfor Juniper's moronic munging of VLAN tags in the Q-BRIDGE-MIB.\n\n\"What's that\", you say? Well, Juniper has their own creative interpretation\nof the Q-BRIDGE-MIB (RFC 4363). They think they can omit real VLAN tags as\nidentifiers in the MIB, and use some opaque internal identifier instead. To\nfind out which actual VLAN tag the identifier represents, you will need to\nconsult a mapping in the proprietary JUNIPER-VLAN-MIB.\n\nThe really funny part is that, when first discovered, this was reported as a\nbug against Q-BRIDGE-MIB::dot1qPvid (Which NAV basically uses to find the\nnative/untagged VLAN of each switch port) - Juniper admitted that this was a\nmistake and fixed the bug, so now, dot1qPvid reports actual VLAN tags.\nHowever, when the same problem was discovered and reported for\ndot1qVlanStaticTable (which NAV uses to discover which ports are tagged on\neach VLAN), Juniper refused to admit that their interpretation of the MIB was\nwrong, and now keep munging that table's index by using opaque, internal\nidentifiers. So Juniper devs are morons. Who knew?\n\nThe following can be used as proof of stupidity^W^W^W reference material:\nhttps://www.juniper.net/documentation/en_US/junos12.3/topics/reference/general/snmp-ex-vlans-retrieving.html\n\n\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\nfrom nav.enterprise.ids import VENDOR_ID_JUNIPER_NETWORKS_INC\nfrom nav.oids import OID\nfrom . import dot1q\n\n# F**k the MIB, let's do it commando-style with Juniper!\n_jnxExVlanTag = '.1.3.6.1.4.1.2636.3.40.1.5.1.5.1.5'\n\n\nclass JuniperDot1q(dot1q.Dot1q):\n    \"\"\"Collect 802.1q info from BRIDGE and Q-BRIDGE MIBs, with Juniper patch\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(JuniperDot1q, self).__init__(*args, **kwargs)\n        self.jnx_vlan_map = {}\n        if self.__is_a_moronic_juniper_device():\n            self.qbridgemib.juniper_hack = True\n\n    @inlineCallbacks\n    def handle(self):\n        if self.__is_a_moronic_juniper_device():\n            self._logger.debug(\"Collecting Juniper VLAN mapping\")\n            self.jnx_vlan_map = yield self.__get_jnx_ex_vlan_tag()\n\n        yield super(JuniperDot1q, self).handle()\n\n    def _remap_vlan(self, vlan_ident):\n        if self.jnx_vlan_map:\n            try:\n                return self.jnx_vlan_map[vlan_ident]\n            except KeyError:\n                self._logger.info(\n                    \"cannot map juniper vlan %s to a tag, using raw value\",\n                    vlan_ident,\n                )\n\n        return vlan_ident\n\n    @inlineCallbacks\n    def _retrieve_vlan_ports(self):\n        \"\"\"\n        Overrides base class implementation to translate VLAN ids to VLAN\n        tags on Juniper switches.\n\n        \"\"\"\n        (egress, untagged) = yield super(JuniperDot1q, self)._retrieve_vlan_ports()\n        if not self.jnx_vlan_map:\n            return (egress, untagged)\n\n        new_egress = {self._remap_vlan(key): value for key, value in egress.items()}\n        new_untagged = {self._remap_vlan(key): value for key, value in untagged.items()}\n\n        return (new_egress, new_untagged)\n\n    def __is_a_moronic_juniper_device(self):\n        if self.netbox.type:\n            vendor_id = self.netbox.type.get_enterprise_id()\n            if vendor_id == VENDOR_ID_JUNIPER_NETWORKS_INC:\n                return True\n\n    @inlineCallbacks\n    def __get_jnx_ex_vlan_tag(self):\n        result = yield self.agent.getTable([_jnxExVlanTag])\n        mappings = result.get(_jnxExVlanTag, {})\n        mappings = {OID(key)[-1]: value for key, value in mappings.items()}\n        self._logger.debug(\"got jnxExVlanTag map: %r\", mappings)\n        return mappings\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/linkaggregate.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport logging\nfrom collections import defaultdict\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\nfrom nav.mibs.ieee8023_lag_mib import IEEE8023LagMib\nfrom nav.mibs.if_mib import IfMib\n\n\nclass LinkAggregate(Plugin):\n    \"\"\"Collects information about link aggregation\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(LinkAggregate, self).__init__(*args, **kwargs)\n        self.ifmib = IfMib(self.agent)\n        self.lagmib = IEEE8023LagMib(self.agent)\n\n    @inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting link aggregations\")\n        result = yield self.lagmib.retrieve_aggregations_by_operational_key()\n        aggregates = yield self._convert_to_interfaces(result)\n        self._log_aggregates(aggregates)\n        self._create_aggregate_containers(aggregates)\n\n    @inlineCallbacks\n    def _convert_to_interfaces(self, aggregatedict):\n        result = []\n        for aggregator_idx, aggregates in aggregatedict.items():\n            aggregator = yield self._get_interface(aggregator_idx)\n            for if_idx in aggregates:\n                interface = yield self._get_interface(if_idx)\n                result.append((interface, aggregator))\n        return result\n\n    @inlineCallbacks\n    def _get_interface(self, ifindex):\n        ifc = self.containers.factory(ifindex, shadows.Interface, ifindex=ifindex)\n        if not ifc.ifname:\n            # In case no other plugins ran before us to collect this:\n            self._logger.debug(\"retrieving ifName.%s\", ifindex)\n            ifc.ifname = yield self.ifmib.retrieve_column_by_index('ifName', (ifindex,))\n        return ifc\n\n    def _log_aggregates(self, aggregates):\n        if not self._logger.isEnabledFor(logging.DEBUG):\n            return\n\n        aggr = defaultdict(list)\n        for ifc, aggregator in aggregates:\n            aggr[aggregator.ifname].append(ifc.ifname)\n\n        for aggregator, ports in aggr.items():\n            self._logger.debug(\n                \"%s aggregates these ports: %s\", aggregator, ', '.join(ports)\n            )\n\n    def _create_aggregate_containers(self, aggregates):\n        for interface, aggregator in aggregates:\n            key = aggregator.ifindex, interface.ifindex\n            aggregate = self.containers.factory(key, shadows.InterfaceAggregate)\n            aggregate.aggregator = aggregator\n            aggregate.interface = interface\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/linkstate.py",
    "content": "#\n# Copyright (C) 2011,2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects interface link states and dispatches NAV events on changes\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.mibs import reduce_index\nfrom nav.mibs.if_mib import IfMib\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\n\nclass LinkState(Plugin):\n    \"\"\"Monitors interface link states\"\"\"\n\n    @inlineCallbacks\n    def handle(self):\n        if self.netbox.master:\n            self._logger.debug(\n                \"this is a virtual instance of %s, not polling\", self.netbox.master\n            )\n            return None\n\n        ifmib = IfMib(self.agent)\n        result = yield ifmib.retrieve_columns(\n            ['ifName', 'ifAdminStatus', 'ifOperStatus']\n        ).addCallback(reduce_index)\n        self._put_results(result)\n\n    def _put_results(self, results):\n        netbox = self.containers.factory(None, shadows.Netbox)\n        for index, row in results.items():\n            if isinstance(index, int):  # only accept proper ifIndex values\n                self._update_interface(netbox, index, row)\n\n    def _update_interface(self, netbox, ifindex, row):\n        ifc = self.containers.factory(ifindex, shadows.Interface)\n        ifc.netbox = netbox\n        ifc.ifindex = ifindex\n        if row['ifName']:\n            ifc.ifname = row['ifName']\n        ifc.ifadminstatus = row['ifAdminStatus']\n        ifc.ifoperstatus = row['ifOperStatus']\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/lldp.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect LLDP neighbors\"\"\"\n\nfrom pprint import pformat\n\nfrom django.db.models import Q\nfrom twisted.internet import defer\n\nfrom nav.models import manage\nfrom nav.mibs import lldp_mib\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.ipdevpoll.neighbor import Neighbor\nfrom nav.ipdevpoll.db import run_in_thread\nfrom nav.ipdevpoll.timestamps import TimestampChecker\n\nINFO_VAR_NAME = 'lldp'\nSOURCE = 'lldp'\nINFO_KEY_LLDP_INFO = \"lldp\"\nINFO_VAR_CHASSIS_ID = \"chassis_id\"\nINFO_VAR_CHASSIS_MAC = \"chassis_mac\"\nINFO_VAR_REMOTES_CACHE = \"remotes_cache\"\n\n\nclass LLDP(Plugin):\n    \"\"\"Collects devices' table of remote LLDP devices.\n\n    If the neighbor can be identified as something monitored by NAV, a\n    topology adjacency candidate will be registered. Otherwise, the\n    neighboring device will be noted as an unrecognized neighbor to this\n    device.\n\n    \"\"\"\n\n    remote = None\n    neighbors = None\n\n    @classmethod\n    @defer.inlineCallbacks\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(LLDP, cls).can_handle(netbox)\n        has_ifcs = yield run_in_thread(cls._has_interfaces, netbox)\n        return has_ifcs and daddy_says_ok\n\n    @classmethod\n    def _has_interfaces(cls, netbox):\n        return manage.Interface.objects.filter(netbox__id=netbox.id).count() > 0\n\n    @defer.inlineCallbacks\n    def handle(self):\n        mib = lldp_mib.LLDPMib(self.agent)\n\n        stampcheck = yield self._get_stampcheck(mib)\n        remote_table_has_changed = yield stampcheck.is_changed()\n        need_to_collect = remote_table_has_changed\n\n        if not remote_table_has_changed:\n            cache = yield self._get_cached_remote_table()\n            if cache is not None:\n                self._logger.debug(\"Using cached LLDP remote table\")\n                self.remote = cache\n            else:\n                self._logger.debug(\"Remote didn't change, but cache was empty\")\n                need_to_collect = True\n\n        if need_to_collect:\n            self._logger.debug(\"collecting LLDP remote table\")\n            self.remote = yield mib.get_remote_table()\n\n        if self.remote:\n            self._logger.debug(\"LLDP neighbors:\\n %s\", pformat(self.remote))\n            yield run_in_thread(self._process_remote)\n            yield self._get_chassis_id(mib)\n            yield self._save_cached_remote_table(self.remote)\n        else:\n            self._logger.debug(\"No LLDP neighbors to process\")\n\n        # Store sentinels to signal that LLDP neighbors have been processed\n        shadows.AdjacencyCandidate.sentinel(self.containers, SOURCE)\n        shadows.UnrecognizedNeighbor.sentinel(self.containers, SOURCE)\n        stampcheck.save()\n\n    @defer.inlineCallbacks\n    def _get_cached_remote_table(self):\n        \"\"\"Retrieves a cached version of the remote neighbor table\"\"\"\n        value = yield run_in_thread(\n            manage.NetboxInfo.cache_get,\n            self.netbox,\n            INFO_KEY_LLDP_INFO,\n            INFO_VAR_REMOTES_CACHE,\n        )\n        return value\n\n    @defer.inlineCallbacks\n    def _save_cached_remote_table(self, remote_table):\n        \"\"\"Saves a cached copy of the remote neighbor table\"\"\"\n        yield run_in_thread(\n            manage.NetboxInfo.cache_set,\n            self.netbox,\n            INFO_KEY_LLDP_INFO,\n            INFO_VAR_REMOTES_CACHE,\n            remote_table,\n        )\n\n    @defer.inlineCallbacks\n    def _get_chassis_id(self, mib):\n        chassis_id_subtype = yield mib.get_next(\n            \"lldpLocChassisIdSubtype\", translate_result=True\n        )\n        chassis_id = yield mib.get_next(\"lldpLocChassisId\")\n        if not chassis_id:\n            return\n        chassis_id = lldp_mib.IdSubtypes.get(chassis_id_subtype, chassis_id)\n        info = self.containers.factory(\n            (INFO_KEY_LLDP_INFO, INFO_VAR_CHASSIS_ID), shadows.NetboxInfo\n        )\n        info.value = str(chassis_id)\n        info.netbox = self.netbox\n        info.key = INFO_KEY_LLDP_INFO\n        info.variable = INFO_VAR_CHASSIS_ID\n        if isinstance(chassis_id, lldp_mib.MacAddress):\n            info = self.containers.factory(\n                (INFO_KEY_LLDP_INFO, INFO_VAR_CHASSIS_MAC), shadows.NetboxInfo\n            )\n            info.value = str(chassis_id)\n            info.netbox = self.netbox\n            info.key = INFO_KEY_LLDP_INFO\n            info.variable = INFO_VAR_CHASSIS_MAC\n\n    @defer.inlineCallbacks\n    def _get_stampcheck(self, mib):\n        \"\"\"Retrieves the last change timestamp of the LLDP remote table, returning a\n        TimestampChecker instance reflecting it.\n        \"\"\"\n        stampcheck = TimestampChecker(self.agent, self.containers, INFO_VAR_NAME)\n        yield stampcheck.load()\n        yield stampcheck.collect([mib.get_remote_last_change()])\n\n        return stampcheck\n\n    def _process_remote(self):\n        \"\"\"Tries to synchronously identify LLDP entries in NAV's database\"\"\"\n        neighbors = [LLDPNeighbor(lldp) for lldp in self.remote]\n\n        self._process_identified([n for n in neighbors if n.identified])\n        self._process_unidentified([n.record for n in neighbors if not n.identified])\n\n        self.neighbors = neighbors\n\n    def _process_identified(self, identified):\n        for neigh in identified:\n            self._logger.debug(\n                \"identified neighbor %r from %r\",\n                (neigh.netbox.sysname, neigh.interfaces),\n                neigh.record,\n            )\n            self._store_candidates(neigh)\n\n    def _store_candidates(self, neighbor):\n        if not neighbor.interfaces:\n            return self._store_candidate(neighbor, None)\n        for interface in neighbor.interfaces:\n            self._store_candidate(neighbor, interface)\n\n    def _store_candidate(self, neighbor, interface):\n        ifindex = neighbor.record.ifindex\n        ifc = self.containers.factory(ifindex, shadows.Interface)\n        ifc.ifindex = ifindex\n\n        key = (\n            ifindex,\n            self.netbox.id,\n            neighbor.netbox.id,\n            interface and interface.id or None,\n            SOURCE,\n        )\n        cand = self.containers.factory(key, shadows.AdjacencyCandidate)\n        cand.netbox = self.netbox\n        cand.interface = ifc\n        cand.to_netbox = neighbor.netbox\n        cand.to_interface = interface\n        cand.source = SOURCE\n\n    def _process_unidentified(self, unidentified):\n        for record in unidentified:\n            self._store_unidentified(record)\n\n    def _store_unidentified(self, record):\n        ifc = self.containers.factory(record.ifindex, shadows.Interface)\n        ifc.ifindex = record.ifindex\n\n        key = (record.ifindex, record.chassis_id, SOURCE)\n        neighbor = self.containers.factory(key, shadows.UnrecognizedNeighbor)\n        neighbor.netbox = self.netbox\n        neighbor.interface = ifc\n        neighbor.remote_id = record.chassis_id\n        neighbor.remote_name = record.sysname\n        neighbor.source = SOURCE\n\n\nclass LLDPNeighbor(Neighbor):\n    \"Parses an LLDP tuple from nav.mibs.lldp_mib to identify a neighbor\"\n\n    def _identify_netbox(self):\n        chassid = self.record.chassis_id\n        netbox = None\n        if chassid:\n            lookup = None\n            if isinstance(chassid, lldp_mib.IdSubtypes.macAddress):\n                lookup = self._netbox_from_mac\n            elif isinstance(chassid, lldp_mib.IdSubtypes.networkAddress):\n                lookup = self._netbox_from_ip\n            elif isinstance(chassid, lldp_mib.IdSubtypes.local):\n                lookup = self._netbox_from_local\n\n            if lookup:\n                netbox = lookup(str(chassid))\n\n        if not netbox and self.record.sysname:\n            netbox = self._netbox_from_sysname(self.record.sysname)\n\n        return netbox\n\n    def _netbox_from_local(self, chassid):\n        # Some devices tend to put null bytes in local IDs, which make no sense and\n        # will also not work in database queries. We cross our fingers and strip them\n        # to avoid db issues:\n        chassid = str(chassid).strip(\"\\x00\")\n        if not chassid:\n            return None  # stripped input was all garbage?\n        netbox = self._netbox_query(\n            Q(\n                info_set__key=INFO_KEY_LLDP_INFO,\n                info_set__variable=INFO_VAR_CHASSIS_ID,\n                info_set__value=chassid,\n            )\n        )\n        if netbox:\n            self._logger.debug(\"Found netbox through local type lookup\")\n            return netbox\n        else:\n            return self._netbox_from_sysname(chassid)\n\n    def _identify_interfaces(self):\n        portid = self.record.port_id\n        if self.netbox and portid:\n            lookup = None\n            if isinstance(\n                portid,\n                (lldp_mib.IdSubtypes.interfaceAlias, lldp_mib.IdSubtypes.interfaceName),\n            ):\n                lookup = self._interfaces_from_name\n            elif isinstance(portid, (lldp_mib.IdSubtypes.local)):\n                lookup = self._interfaces_from_local\n            elif isinstance(portid, (lldp_mib.IdSubtypes.macAddress)):\n                lookup = self._interfaces_from_mac\n            elif isinstance(portid, (lldp_mib.IdSubtypes.networkAddress)):\n                lookup = self._interfaces_from_ip\n\n            if lookup:\n                result = lookup(str(portid))\n                if not result:\n                    # IEEE 802.1AB-2005 9.5.5.2\n                    portdesc = self.record.port_desc\n                    if portdesc:\n                        return self._interfaces_from_name(str(portdesc))\n                else:\n                    return result\n\n    def _interfaces_from_local(self, portid):\n        \"\"\"Implements a heuristic seen on Juniper, where the port id is an\n        ifIndex and the remote port description is the port's ifAlias value.\n        If no match can be made this way, just revert to the regular \"portid\n        interpreted as name\" lookup\n\n        \"\"\"\n        portdesc = self.record.port_desc\n        if portdesc and portid.isdigit():\n            query = Q(ifindex=int(portid)) & Q(ifalias=portdesc)\n            ifc = self._interface_query(query)\n            if ifc:\n                return ifc\n        return self._interfaces_from_name(portid)\n\n    def _interfaces_from_mac(self, mac):\n        assert mac\n        return self._interface_query(Q(ifphysaddress=mac))\n\n    def _interfaces_from_ip(self, ip):\n        ip = str(ip)\n        assert ip\n        if ip in self._invalid_neighbor_ips:\n            return\n        return self._interface_query(Q(gwport_prefixes__gw_ip=ip))\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/modules.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect module information from ENTITY-MIB.\n\nThis will collect anything that looks like a field-replaceable module\nwith a serial number from the entPhysicalTable.  If a module has a\nname that can be interpreted as a number, it will have its\nmodule_number field set to this number.\n\nentAliasMappingTable is collected; mappings between any physical\nentity and an interface from IF-MIB is kept.  For each mapping found,\nthe interface will have its module set to be whatever the ancestor\nmodule of the physical entity is.\n\"\"\"\n\nimport configparser\nimport re\n\nfrom twisted.internet import defer\n\nfrom nav.mibs.entity_mib import EntityMib, EntityTable\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.ipdevpoll.timestamps import TimestampChecker\n\nINFO_VAR_NAME = 'modules'\n\n\nclass Modules(Plugin):\n    \"\"\"Plugin to collect module data from devices\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(Modules, self).__init__(*args, **kwargs)\n        self.alias_mapping = {}\n        self.entitymib = EntityMib(self.agent)\n        self.stampcheck = TimestampChecker(self.agent, self.containers, INFO_VAR_NAME)\n\n    @classmethod\n    def on_plugin_load(cls):\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        cls.ignored_serials = get_ignored_serials(ipdevpoll_conf)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting ENTITY-MIB module data\")\n        need_to_collect = yield self._need_to_collect()\n        if need_to_collect:\n            physical_table = yield self.entitymib.get_entity_physical_table()\n\n            self.alias_mapping = yield self.entitymib.get_alias_mapping()\n            self._process_entities(physical_table)\n        self.stampcheck.save()\n\n    @defer.inlineCallbacks\n    def _need_to_collect(self):\n        yield self.stampcheck.load()\n        yield self.stampcheck.collect([self.entitymib.get_last_change_time()])\n\n        result = yield self.stampcheck.is_changed()\n        return result\n\n    def _device_from_entity(self, ent):\n        serial_column = 'entPhysicalSerialNum'\n        if serial_column in ent and ent[serial_column] and ent[serial_column].strip():\n            serial_number = ent[serial_column].strip()\n            device_key = serial_number\n        else:\n            serial_number = None\n            device_key = 'unknown-%s' % ent[0]\n\n        if serial_number in self.ignored_serials:\n            self._logger.debug(\"ignoring %r due to ignored serial number\", ent)\n            return None\n\n        device = self.containers.factory(device_key, shadows.Device)\n        if serial_number:\n            device.serial = serial_number\n        if ent['entPhysicalHardwareRev']:\n            device.hardware_version = ent['entPhysicalHardwareRev'].strip()\n        if ent['entPhysicalSoftwareRev']:\n            device.software_version = ent['entPhysicalSoftwareRev'].strip()\n        if ent['entPhysicalFirmwareRev']:\n            device.firmware_version = ent['entPhysicalFirmwareRev'].strip()\n        device.active = True\n        return device\n\n    def _module_from_entity(self, ent):\n        module = self.containers.factory(ent['entPhysicalSerialNum'], shadows.Module)\n        netbox = self.containers.factory(None, shadows.Netbox)\n\n        module.netbox = netbox\n        module.model = ent['entPhysicalModelName'].strip()\n        module.description = ent['entPhysicalDescr'].strip()\n        module.name = ent['entPhysicalName'].strip()\n        if module.name.strip().isdigit():\n            module.module_number = int(module.name.strip())\n        module.parent = None\n        return module\n\n    def _process_modules(self, entities):\n        # map entity indexes to module containers\n        module_containers = {}\n        modules = entities.get_modules()\n        for ent in modules:\n            entity_index = ent[0]\n            device = self._device_from_entity(ent)\n            if not device:\n                continue  # this device was ignored\n            module = self._module_from_entity(ent)\n            module.device = device\n\n            module_containers[entity_index] = module\n            self._logger.debug(\"module (entPhysIndex=%s): %r\", entity_index, module)\n\n        return module_containers\n\n    def _process_ports(self, entities, module_containers):\n        ports = entities.get_ports()\n        netbox = self.containers.factory(None, shadows.Netbox)\n\n        # Map interfaces to modules, if possible\n        module_ifindex_map = {}  # just for logging debug info\n        for port in ports:\n            entity_index = port[0]\n            if entity_index in self.alias_mapping:\n                module_entity = entities.get_nearest_module_parent(port)\n\n                if module_entity and module_entity[0] in module_containers:\n                    module = module_containers[module_entity[0]]\n                    indices = self.alias_mapping[entity_index]\n                    for ifindex in indices:\n                        interface = self.containers.factory(ifindex, shadows.Interface)\n                        interface.netbox = netbox\n                        interface.ifindex = ifindex\n                        interface.module = module\n\n                        if module.name in module_ifindex_map:\n                            module_ifindex_map[module.name].append(ifindex)\n                        else:\n                            module_ifindex_map[module.name] = [ifindex]\n\n        if module_ifindex_map:\n            self._logger.debug(\"module/ifindex mapping: %r\", module_ifindex_map)\n\n    def _process_entities(self, result):\n        \"\"\"Process the list of collected entities.\"\"\"\n        # be able to look up all entities using entPhysicalIndex\n        entities = EntityTable(result)\n\n        module_containers = self._process_modules(entities)\n        self._process_ports(entities, module_containers)\n\n\ndef get_ignored_serials(config: configparser.ConfigParser) -> list[str]:\n    \"\"\"Returns a list of ignored serial numbers from a ConfigParser instance\"\"\"\n    if config is None:\n        return []\n\n    raw_string = config.get(\"modules\", \"ignored-serials\", fallback=\"BUILTIN\")\n    values = re.split(r\" +\", raw_string)\n    return [v for v in values if v]\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/paloaltoarp.py",
    "content": "#\n# Copyright (C) 2023, 2024 University of Tromsø\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nipdevpoll plugin for fetching arp mappings from Palo Alto firewalls\n\nConfigure a netbox to work with this plugin by assigning it a\nHTTP_API management profile with service set to \"Palo Alto ARP\"\nin seedDB.\n\"\"\"\n\nimport xml.etree.ElementTree as ET\n\nfrom IPy import IP\nfrom twisted.internet import defer, reactor, ssl\nfrom twisted.web import client\nfrom twisted.web.client import Agent\nfrom twisted.web.http_headers import Headers\n\nfrom nav import buildconf\nfrom nav.ipdevpoll import db\nfrom nav.ipdevpoll.plugins.arp import Arp\nfrom nav.models.manage import Netbox, ManagementProfile, NetboxProfile\n\n\nclass PaloaltoArp(Arp):\n    @classmethod\n    @defer.inlineCallbacks\n    def can_handle(cls, netbox):\n        \"\"\"Return True if this plugin can handle the given netbox.\"\"\"\n        has_configurations = yield cls._has_paloalto_configurations(netbox)\n        return has_configurations\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Handle plugin business, return a deferred.\"\"\"\n        self._check_and_update_prefix_cache()\n        self._logger.debug(\"Collecting IP/MAC mappings for Paloalto device\")\n\n        configurations = yield self._get_paloalto_configurations(self.netbox)\n        for configuration in configurations:\n            mappings = yield self._get_paloalto_arp_mappings(\n                self.netbox.ip, configuration[\"api_key\"]\n            )\n            if mappings:\n                yield self._process_data(mappings)\n                break\n\n    @staticmethod\n    @db.synchronous_db_access\n    def _has_paloalto_configurations(netbox: Netbox):\n        \"\"\"\n        Make a database request to check if the netbox has any management\n        profile that configures access to Palo Alto ARP data via HTTP\n        \"\"\"\n        queryset = _paloalto_profile_queryset(netbox)\n        return queryset.exists()\n\n    @staticmethod\n    @db.synchronous_db_access\n    def _get_paloalto_configurations(netbox: Netbox):\n        \"\"\"\n        Make a database request that fetches all management profiles of\n        the netbox that configures access to Palo Alto ARP data via HTTP\n        \"\"\"\n        queryset = _paloalto_profile_queryset(netbox)\n        return list(queryset)\n\n    @defer.inlineCallbacks\n    def _get_paloalto_arp_mappings(self, address: IP, key: str):\n        \"\"\"\n        Make a HTTP request for ARP data from Paloalto device with the given\n        ip-address, using the given api-key. Returns a formatted list of ARP\n        mappings for use in NAV.\n        \"\"\"\n        arptable = yield self._do_request(address, key)\n        mappings = _parse_arp(arptable) if arptable else []\n        return mappings\n\n    @defer.inlineCallbacks\n    def _do_request(self, address: IP, key: str):\n        \"\"\"Make an HTTP request to a Palo Alto device\"\"\"\n\n        class SslPolicy(client.BrowserLikePolicyForHTTPS):\n            def creatorForNetloc(self, hostname, port):\n                return ssl.CertificateOptions(verify=False)\n\n        url = f\"https://{address}/api/?type=op&cmd=<show><arp><entry+name+=+'all'/></arp></show>&key={key}\"\n        self._logger.debug(\n            \"Making HTTP request to Paloalto API endpoint at %s\", address\n        )\n\n        agent = Agent(reactor, contextFactory=SslPolicy())\n\n        try:\n            response = yield agent.request(\n                b'GET',\n                url.encode('utf-8'),\n                Headers(\n                    {'User-Agent': [f'NAV/PaloaltoArp; version {buildconf.VERSION}']}\n                ),\n                None,\n            )\n        except Exception:  # noqa: BLE001\n            self._logger.exception(\n                \"Error when making HTTP request to Paloalto API endpoint. \"\n                \"Make sure the device is reachable and the API key is correct.\"\n            )\n            return None\n\n        response = yield client.readBody(response)\n        return response\n\n\ndef _parse_arp(arpbytes: bytes) -> list[tuple[str, IP, str]]:\n    \"\"\"\n    Create mappings from arp table\n    xml.etree.ElementTree is considered insecure: https://docs.python.org/3/library/xml.html#xml-vulnerabilities\n    However, since we are not parsing untrusted data, this should not be a problem.\n    \"\"\"\n    arps = []\n\n    root = ET.fromstring(arpbytes.decode(\"utf-8\"))\n    entries = root.find(\"result\").find(\"entries\")\n    for entry in entries:\n        status = entry.find(\"status\").text\n        ip = entry.find(\"ip\").text\n        mac = entry.find(\"mac\").text\n        if status.strip() != \"i\":\n            if mac != \"(incomplete)\":\n                arps.append(('ifindex', IP(ip), mac))\n\n    return arps\n\n\ndef _paloalto_profile_queryset(netbox: Netbox):\n    \"\"\"\n    Creates a Django queryset which when iterated yields JSON dictionaries\n    representing configurations for accessing Palo Alto ARP data of the given\n    netbox via HTTP. The keys in these dictionaries are the attribute-names of\n    the :py:class:`~nav.web.seeddb.page.management_profile.forms.HttpRestForm`\n    Django form.\n    \"\"\"\n    return NetboxProfile.objects.filter(\n        netbox_id=netbox.id,\n        profile__protocol=ManagementProfile.PROTOCOL_HTTP_API,\n        profile__configuration__contains={\"service\": \"Palo Alto ARP\"},\n    ).values_list(\"profile__configuration\", flat=True)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/poe.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects power over ethernet information\"\"\"\n\nfrom collections import defaultdict\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.mibs.power_ethernet_mib import PowerEthernetMib\nfrom nav.mibs.cisco_power_ethernet_ext_mib import CiscoPowerEthernetExtMib\nfrom nav.mibs.entity_mib import EntityMib\n\nfrom nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\nSNMP_TRUTH_VALUES = {1: True, 2: False}\n\n\nclass Poe(Plugin):\n    \"\"\"Monitors power over ethernet status\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(Poe, self).__init__(*args, **kwargs)\n        self.invalid_groups = defaultdict(list)\n\n    @inlineCallbacks\n    def handle(self):\n        if self.netbox.master:\n            self._logger.debug(\n                \"this is a virtual instance of %s, not polling\", self.netbox.master\n            )\n            return None\n\n        poemib = PowerEthernetMib(self.agent)\n        if self._is_cisco():\n            (\n                group_phy_index,\n                port_ifindices,\n            ) = yield self._map_cisco_power_ports_to_ifindex()\n        else:\n            port_ifindices = {}\n            group_phy_index = {}\n\n        groups = yield poemib.get_groups_table()\n        self._process_groups(groups, group_phy_index)\n\n        ports = yield poemib.get_ports_table()\n        self._process_ports(ports, port_ifindices)\n        self._log_invalid_portgroups()\n\n    def _is_cisco(self):\n        return (\n            self.netbox.type\n            and self.netbox.type.get_enterprise_id() == VENDOR_ID_CISCOSYSTEMS\n        )\n\n    @inlineCallbacks\n    def _map_cisco_power_ports_to_ifindex(self):\n        \"\"\"Uses the Cisco proprietary CISCO-POWER-ETHERNET-EXT-MIB to map the group/port\n        index pairs used exclusively in PORT-ETHERNET-MIB to an actual ifIndex, that\n        most other MIBs (and NAV's Interface model) uses for identification of\n        interfaces/ports.\n\n        POWER-ETHERNET-MIB provides only a very vague identification of power-enabled\n        ports. These identifiers are not universally and consistently mappable to an\n        ifIndex, for example. A more conclusive mapping to interfaces may be provided\n        on a vendor-by-vendor basis. The only supported vendor for mapping in this\n        codebase so far is Cisco.\n\n        Cisco's mapping is indirect via the ENTITY-MIB - each entry from the power\n        ethernet tables is mapped to a physical port in ENTITY-MIB::entPhysicalTable\n        via its entPhysicalIndex. This table, in turn, can map physical ports to\n        interface indexes from the IF-MIB::ifTable.\n        \"\"\"\n        cisco_mib = CiscoPowerEthernetExtMib(self.agent)\n        port_phy_index = yield cisco_mib.retrieve_column(\"cpeExtPsePortEntPhyIndex\")\n        group_phy_index = yield cisco_mib.retrieve_column(\"cpeExtMainPseEntPhyIndex\")\n        entity_mib = EntityMib(self.agent)\n        alias_mapping = yield entity_mib.get_alias_mapping()\n        port_ifindices = self._resolve_ifindex(port_phy_index, alias_mapping)\n        return (group_phy_index, port_ifindices)\n\n    def _process_groups(self, groups, phy_indices):\n        netbox = self.containers.factory(None, shadows.Netbox)\n        for index, row in groups.items():\n            self._update_group(netbox, index, row, phy_indices.get(index))\n\n    def _update_group(self, netbox, index, row, phy_index):\n        index = index[0]\n        group = self.containers.factory(index, shadows.POEGroup)\n        group.netbox = self.netbox\n        group.index = index\n        group.status = row['pethMainPseOperStatus']\n        group.power = row['pethMainPsePower']\n        group.phy_index = phy_index\n\n    def _process_ports(self, ports, ifindices):\n        netbox = self.containers.factory(None, shadows.Netbox)\n        for index, row in ports.items():\n            self._update_port(netbox, index, row, ifindices.get(index))\n\n    def _update_port(self, netbox, index, row, ifindex):\n        grpindex, portindex = index\n        poegroup = self.containers.get(grpindex, shadows.POEGroup)\n        if not poegroup:\n            self.invalid_groups[grpindex].append(portindex)\n            return\n        port = self.containers.factory((grpindex, portindex), shadows.POEPort)\n        port.netbox = self.netbox\n        port.index = portindex\n        port.poegroup = poegroup\n        port.admin_enable = SNMP_TRUTH_VALUES.get(row['pethPsePortAdminEnable'], False)\n        port.detection_status = row['pethPsePortDetectionStatus']\n        port.priority = row['pethPsePortPowerPriority']\n        port.classification = row['pethPsePortPowerClassifications']\n        vendor = self.netbox.type.vendor.id if self.netbox.type else ''\n        if not ifindex and vendor == 'hp':\n            ifindex = portindex\n        if ifindex:\n            port.interface = self.containers.factory(ifindex, shadows.Interface)\n            port.interface.netbox = netbox\n            port.interface.ifindex = ifindex\n\n    def _resolve_ifindex(self, phy_indices, alias_mapping):\n        result = {}\n        for portindex, phy_index in phy_indices.items():\n            if phy_index in alias_mapping:\n                ifindices = alias_mapping[phy_index]\n                if len(ifindices) != 1:\n                    self._logger.warning(\n                        \"Found unexpected number of ifindices for phy_index %s\",\n                        phy_index,\n                    )\n                    continue\n                result[portindex] = ifindices[0]\n        return result\n\n    def _log_invalid_portgroups(self):\n        if not self.invalid_groups:\n            return\n\n        valid_groups = (\n            list(self.containers[shadows.POEGroup].keys())\n            if shadows.POEGroup in self.containers\n            else []\n        )\n\n        for group in self.invalid_groups:\n            self.invalid_groups[group].sort()\n            self._logger.info(\n                \"ignoring PoE ports in invalid PoE groups: group=%s ports=%s\",\n                group,\n                self.invalid_groups[group],\n            )\n        self._logger.info(\"Valid PoE groups for this device are: %s\", valid_groups)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/prefix.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n# Copyright (C) 2022-2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to poll IP prefix information.\n\nThis plugin will use the IF-MIB, IP-MIB, IPv6-MIB and\nCISCO-IETF-IP-MIB to poll prefix information for both IPv4 and IPv6.\n\nA revised version of the IP-MIB contains the IP-version-agnostic\nipAddressTable which is queried first, although not much equipment\nsupports this table yet.  It then falls back to the original IPv4-only\nipAddrTable, followed by the IPv6-MIB (which has been superseded by\nthe updated IP-MIB).  It also tries a Cisco proprietary\nCISCO-IETF-IP-MIB, which is based on a draft that later became the\nrevised IP-MIB.\n\nAn interface with an IP address whose name matches the VLAN_PATTERN\nwill cause the corresponding prefix to be associated with the VLAN id\nparsed from the interface name.  Not all dot1q enabled routers name\ntheir interfaces like this, but routing switches from several vendors\ndo.\n\n\"\"\"\n\nimport re\nimport logging\n\nfrom twisted.internet import defer, error\n\nfrom IPy import IP\n\nfrom nav.mibs import reduce_index\nfrom nav.mibs.if_mib import IfMib\nfrom nav.mibs.ip_mib import IpMib, IndexToIpException\nfrom nav.mibs.ipv6_mib import Ipv6Mib\nfrom nav.mibs.cisco_ietf_ip_mib import CiscoIetfIpMib\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\nVLAN_PATTERN = re.compile(\n    r\"(Vl(an)?|irb\\.|reth\\d+\\.|bond\\d+\\.)(?P<vlan>\\d+)\",\n    re.IGNORECASE,\n)\n\n\nclass Prefix(Plugin):\n    \"\"\"\n    ipdevpoll-plugin for collecting prefix information from monitored\n    equipment.\n    \"\"\"\n\n    @classmethod\n    def on_plugin_load(cls):\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        cls.ignored_prefixes = get_ignored_prefixes(ipdevpoll_conf)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\"Collecting prefixes\")\n        netbox = self.containers.factory(None, shadows.Netbox)\n\n        ipmib = IpMib(self.agent)\n        ciscoip = CiscoIetfIpMib(self.agent)\n        ipv6mib = Ipv6Mib(self.agent)\n\n        # Retrieve interface names and keep those who match a VLAN\n        # naming pattern\n        vlan_interfaces = yield self.get_vlan_interfaces()\n        ifc_aliases = yield self._get_ifc_aliases()\n\n        # Traverse address tables from IP-MIB, IPV6-MIB and\n        # CISCO-IETF-IP-MIB in that order.\n        addresses = set()\n        for mib in ipmib, ipv6mib, ciscoip:\n            self._logger.debug(\"Trying address tables from %s\", mib.mib['moduleName'])\n            df = mib.get_interface_addresses()\n            # Special case; some devices will time out while building a bulk\n            # response outside our scope when it has no proprietary MIB support\n            if mib != ipmib:\n                df.addErrback(self._ignore_timeout, set())\n            df.addErrback(self._ignore_index_exceptions, mib)\n            new_addresses = yield df\n            self._logger.debug(\n                \"Found %d addresses in %s: %r\",\n                len(new_addresses),\n                mib.mib['moduleName'],\n                new_addresses,\n            )\n            addresses.update(new_addresses)\n\n        adminup_ifcs = yield self._get_adminup_ifcs()\n        for ifindex, ip, prefix in addresses:\n            if ifindex not in adminup_ifcs:\n                self._logger.debug(\n                    \"ignoring collected address %s on admDown ifindex %s\", ip, ifindex\n                )\n                continue\n            if self._prefix_should_be_ignored(prefix):\n                self._logger.debug(\"ignoring prefix %s as configured\", prefix)\n                continue\n            self.create_containers(\n                netbox, ifindex, prefix, ip, vlan_interfaces, ifc_aliases\n            )\n\n    def _get_ifc_aliases(self):\n        return IfMib(self.agent).get_ifaliases()\n\n    def _ignore_index_exceptions(self, failure, mib):\n        failure.trap(IndexToIpException)\n        self._logger.warning(\n            \"device has strange SNMP implementation of %s; \"\n            \"ignoring retrieved IP address data: %s\",\n            mib.mib['moduleName'],\n            failure.getErrorMessage(),\n        )\n        return set()\n\n    @defer.inlineCallbacks\n    def _get_adminup_ifcs(self):\n        ifmib = IfMib(self.agent)\n        statuses = yield ifmib.get_admin_status()\n        result = set(ifindex for ifindex, status in statuses.items() if status == 'up')\n        return result\n\n    def create_containers(\n        self, netbox, ifindex, net_prefix, ip, vlan_interfaces, ifc_aliases=None\n    ):\n        \"\"\"\n        Utitilty method for creating the shadow-objects\n        \"\"\"\n        interface = self.containers.factory(ifindex, shadows.Interface)\n        interface.ifindex = ifindex\n        if ifc_aliases and ifc_aliases.get(ifindex, None):\n            interface.ifalias = ifc_aliases[ifindex]\n        interface.netbox = netbox\n\n        # No use in adding the GwPortPrefix unless we actually found a prefix\n        if net_prefix:\n            port_prefix = self.containers.factory(ip, shadows.GwPortPrefix)\n            port_prefix.interface = interface\n            port_prefix.gw_ip = str(ip)\n\n            prefix = self.containers.factory(net_prefix, shadows.Prefix)\n            prefix.net_address = str(net_prefix)\n            # Host masks aren't included when IPy converts to string\n            if '/' not in prefix.net_address:\n                prefix.net_address += \"/%s\" % net_prefix.prefixlen()\n            port_prefix.prefix = prefix\n\n            # Always associate prefix with a VLAN record, but set a\n            # VLAN number if we can.\n            vlan = self.containers.factory(ifindex, shadows.Vlan)\n            if ifindex in vlan_interfaces:\n                vlan.vlan = vlan_interfaces[ifindex]\n\n            prefix.vlan = vlan\n\n    @defer.inlineCallbacks\n    def get_vlan_interfaces(self):\n        \"\"\"Get all virtual VLAN interfaces.\n\n        Any interface whose ifName matches the VLAN_PATTERN regexp\n        will be included in the result.\n\n        Return value:\n\n          A deferred whose result is a dictionary: { ifindex: vlan }\n\n        \"\"\"\n        ifmib = IfMib(self.agent)\n        df = ifmib.retrieve_column('ifName')\n        df.addCallback(reduce_index)\n        interfaces = yield df\n\n        vlan_ifs = {}\n        for ifindex, ifname in interfaces.items():\n            match = VLAN_PATTERN.match(ifname)\n            if match:\n                vlan = int(match.group('vlan'))\n                vlan_ifs[ifindex] = vlan\n\n        return vlan_ifs\n\n    def _ignore_timeout(self, failure, result=None):\n        \"\"\"Ignores a TimeoutError in an errback chain.\n\n        The result argument will be returned, and there injected into the\n        regular callback chain.\n\n        \"\"\"\n        failure.trap(error.TimeoutError, defer.TimeoutError)\n        self._logger.debug(\"request timed out, ignoring and moving on...\")\n        return result\n\n    def _prefix_should_be_ignored(self, prefix):\n        if prefix is None:\n            return False\n\n        return any(ignored.matches(prefix) for ignored in self.ignored_prefixes)\n\n\ndef get_ignored_prefixes(config):\n    \"\"\"Returns a list of ignored prefixes from a ConfigParser instance\"\"\"\n    if config is not None:\n        raw_string = config.get('prefix', 'ignored', fallback='')\n    else:\n        return []\n    items = raw_string.split(',')\n    prefixes = [_convert_string_to_prefix(i) for i in items]\n    return [prefix for prefix in prefixes if prefix is not None]\n\n\ndef _convert_string_to_prefix(string):\n    try:\n        return IgnoredPrefix(string)\n    except ValueError:\n        logging.getLogger(__name__).error(\n            \"Ignoring invalid prefix in ignore list: %s\", string\n        )\n\n\nclass IgnoredPrefix(IP):\n    \"\"\"An ignored prefix.\n\n    May match every contained prefix, or just the identical prefix, according\n    to the input syntax. If no match operator is present, the \"contained\n    within or equals\" operator is assumed (since that was the default behavior\n    of bare addresses before operators were introduced).\n\n    Examples::\n    >>> IgnoredPrefix('192.168.1.0/24').matches('192.168.1.128/25')\n    True\n    >>> IgnoredPrefix('<<=192.168.1.0/24').matches('192.168.1.128/25')\n    True\n    >>> IgnoredPrefix('=192.168.1.0/24').matches('192.168.1.0/24')\n    True\n\n    \"\"\"\n\n    EQUALS_OPERATOR = '='\n    CONTAINED_IN_OPERATOR = '<<='\n    OPERATORS = (EQUALS_OPERATOR, CONTAINED_IN_OPERATOR)\n\n    DEFAULT_OPERATOR = CONTAINED_IN_OPERATOR\n    match_operator = DEFAULT_OPERATOR\n\n    def __init__(self, string):\n        string = string.strip()\n\n        for oper in self.OPERATORS:\n            if string.startswith(oper):\n                self.match_operator = oper\n                string = string.removeprefix(oper)\n                break\n\n        IP.__init__(self, string)  # stupid old-style class implementation!\n\n    def matches(self, prefix):\n        \"\"\"\n        Returns True if prefix matches this ignored prefix, using the\n        matching operator specified for this instance.\n        \"\"\"\n        assert self.match_operator in self.OPERATORS\n\n        if self.match_operator == self.EQUALS_OPERATOR:\n            return IP(prefix) == self\n        elif self.match_operator == self.CONTAINED_IN_OPERATOR:\n            return IP(prefix) in self\n        else:\n            return NotImplementedError\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/propserial.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"retrieves chassis serial numbers from various proprietary MIBs\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll.shadows import Netbox, Device, NetboxEntity\nfrom nav.models import manage\n\nfrom nav.mibs.hp_httpmanageable_mib import HPHTTPManageableMib\nfrom nav.mibs.juniper_mib import JuniperMib\nfrom nav.mibs.powernet_mib import PowerNetMib\nfrom nav.mibs.wlsx_systemext_mib import WLSXSystemextMib\n\nfrom nav.enterprise.ids import (\n    VENDOR_ID_HEWLETT_PACKARD,\n    VENDOR_ID_AMERICAN_POWER_CONVERSION_CORP,\n    VENDOR_ID_JUNIPER_NETWORKS_INC,\n    VENDOR_ID_ARUBA_NETWORKS_INC,\n)\n\n\nVENDOR_MIBS = {\n    VENDOR_ID_HEWLETT_PACKARD: HPHTTPManageableMib,\n    VENDOR_ID_AMERICAN_POWER_CONVERSION_CORP: PowerNetMib,\n    VENDOR_ID_JUNIPER_NETWORKS_INC: JuniperMib,\n    VENDOR_ID_ARUBA_NETWORKS_INC: WLSXSystemextMib,\n}\n\n\nclass ProprietarySerial(Plugin):\n    \"\"\"retrieves chassis serial numbers from various proprietary MIBs\"\"\"\n\n    RESTRICT_TO_VENDORS = VENDOR_MIBS.keys()\n\n    @defer.inlineCallbacks\n    def handle(self):\n        vendor_id = self.netbox.type.get_enterprise_id()\n        mibclass = VENDOR_MIBS.get(vendor_id, None)\n        if mibclass:\n            mib = mibclass(self.agent)\n            serial = yield mib.get_serial_number()\n            if serial:\n                self._logger.debug(\n                    \"got a chassis serial number from %s: %r\",\n                    mib.mib.get('moduleName', None),\n                    serial,\n                )\n                self._set_chassis_serial(serial, mib.mib.get('moduleName'))\n\n    def _set_chassis_serial(self, serial, source):\n        netbox = self.containers.factory(None, Netbox)\n        chassis = NetboxEntity.get_chassis_entities(self.containers)\n        if not chassis:\n            entity = self.containers.factory(None, NetboxEntity)\n            device = self.containers.factory(serial, Device)\n            device.serial = serial\n\n            entity.netbox = netbox\n            entity.index = 0\n            entity.source = source\n            entity.physical_class = manage.NetboxEntity.CLASS_CHASSIS\n            entity.device = device\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/psu.py",
    "content": "#\n# Copyright (C) 2008-2011, 2014, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This ipdevpoll plugin collects the inventory of power supplies and fans from\ndevices.\n\nThe inventory record of a PSU or FAN includes an SNMP OID that can be used to monitor\nthe status of the entity by the powersupplywatch program. Normally, this status\ninformation is not available in the ENTITY-MIB itself, but from some proprietary MIB.\nThis plugin tries to discover the relationship between PSU/FAN entities found in\nENTITY-MIB and entities found in the proprietary MIBs.\n\nAt the moment, only Cisco and Hewlett-Packard devices are supported, but support for\nnew vendors can be added by creating new MibRetriever class which implements the\nnecessary interfaces to fetch lists of PSU or FAN units, and to to query their states.\n\nSee the implementations of these methods in the currently supported MibRetriever\ninstances for Cisco and HP:\n\n\n- get_power_supplies()\n- get_fans()\n- get_power_supply_status()\n- get_fan_status()\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\n\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.mibs.cisco_entity_fru_control_mib import CiscoEntityFruControlMib\nfrom nav.mibs.hpicf_fan_mib import HpIcfFanMib\nfrom nav.mibs.hpicf_powersupply_mib import HpIcfPowerSupplyMib\nfrom nav.mibs.juniper_mib import JuniperMib\nfrom nav.enterprise.ids import (\n    VENDOR_ID_CISCOSYSTEMS,\n    VENDOR_ID_HEWLETT_PACKARD,\n    VENDOR_ID_JUNIPER_NETWORKS_INC,\n)\n\nVENDOR_MIB_MAP = {\n    VENDOR_ID_CISCOSYSTEMS: [CiscoEntityFruControlMib],\n    VENDOR_ID_HEWLETT_PACKARD: [HpIcfPowerSupplyMib, HpIcfFanMib],\n    VENDOR_ID_JUNIPER_NETWORKS_INC: [JuniperMib],\n}\nFALLBACK_MIBS = [EntityMib]\n\n\nclass PowerSupplyUnit(Plugin):\n    \"\"\"Plugin that collect PSUs and FANs,- and their status from netboxes.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(PowerSupplyUnit, self).__init__(*args, **kwargs)\n        self.vendor_id = (\n            self.netbox.type.get_enterprise_id() if self.netbox.type else None\n        )\n        self.miblist = get_mibretrievers_from_vendor_id(self.vendor_id, self.agent)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"\n        Collect PSUs and FANs,- their corresponding statuses and store in database.\n        \"\"\"\n        self._logger.debug(\"Collecting PSUs and FANs\")\n        psus = []\n        fans = []\n        for mib in self.miblist:\n            if hasattr(mib, \"get_power_supplies\"):\n                _psus = yield mib.get_power_supplies()\n                if _psus:\n                    psus.extend(_psus)\n\n            if hasattr(mib, \"get_fans\"):\n                _fans = yield mib.get_fans()\n                if _fans:\n                    psus.extend(_fans)\n\n        # for now, the data model is the same for both PSUs and FANs, so:\n        all_the_things = psus + fans\n        if all_the_things:\n            for unit in all_the_things:\n                yield self._handle_unit(unit)\n\n    def _handle_unit(self, in_unit):\n        \"\"\"\n        :type in_unit: nav.ipdevpoll.shadows.PowerSupplyOrFan\n        \"\"\"\n        self._logger.debug(\"PSU:FAN: %s\", in_unit)\n\n        out_unit = self.containers.factory(in_unit.name, shadows.PowerSupplyOrFan)\n        out_unit.copy(in_unit)\n        out_unit.netbox = self.netbox\n\n        if in_unit.device:\n            device = self.containers.factory(in_unit.device.serial, shadows.Device)\n            device.copy(in_unit.device)\n            out_unit.device = device\n\n\ndef get_mibretrievers_from_vendor_id(vendor_id, agent_proxy):\n    \"\"\"Returns a list of matching MibRetriever instances based on a vendor id.\n    :param vendor_id: A integer IANA enterprise number.\n    :param agent_proxy: An SNMP agent_proxy instance.\n\n    \"\"\"\n    miblist = VENDOR_MIB_MAP.get(vendor_id, FALLBACK_MIBS)\n    return [mibclass(agent_proxy) for mibclass in miblist]\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/psuwatch.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to monitor the state of known field-replaceable power supply and\nfan units.\n\n\"\"\"\n\nimport datetime\n\nfrom twisted.internet import defer\n\nfrom django.db import transaction\n\nfrom nav.event2 import EventFactory\nfrom nav.ipdevpoll import Plugin, db\nfrom nav.models.manage import PowerSupplyOrFan\n\nfrom .psu import get_mibretrievers_from_vendor_id\n\n\nCALL_MAP = {\"powerSupply\": \"get_power_supply_status\", \"fan\": \"get_fan_status\"}\nPSU_EVENT = EventFactory(\"ipdevpoll\", \"eventEngine\", \"psuState\", \"psuNotOK\", \"psuOK\")\nFAN_EVENT = EventFactory(\"ipdevpoll\", \"eventEngine\", \"fanState\", \"fanNotOK\", \"fanOK\")\nEVENT_MAP = {\"powerSupply\": PSU_EVENT, \"fan\": FAN_EVENT}\n\n# Shorthand for database states\nSTATE_UNKNOWN = PowerSupplyOrFan.STATE_UNKNOWN\nSTATE_UP = PowerSupplyOrFan.STATE_UP\nSTATE_DOWN = PowerSupplyOrFan.STATE_DOWN\nSTATE_WARNING = PowerSupplyOrFan.STATE_WARNING\n\n\nclass PowerSupplyOrFanStateWatcher(Plugin):\n    \"\"\"Collects PSU and FAN statues from netboxes\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(PowerSupplyOrFanStateWatcher, self).__init__(*args, **kwargs)\n        self.vendor_id = (\n            self.netbox.type.get_enterprise_id() if self.netbox.type else None\n        )\n        self.miblist = get_mibretrievers_from_vendor_id(self.vendor_id, self.agent)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        units = yield db.run_in_thread(self._get_database_unit_list)\n\n        state_map = {}\n        for unit in units:\n            old_state = unit.up\n            new_state = yield self._retrieve_current_unit_state(unit)\n            state_map[unit] = new_state\n            if old_state != new_state:\n                yield self._handle_state_change(unit, new_state)\n\n        return True\n\n    @defer.inlineCallbacks\n    def _retrieve_current_unit_state(self, unit):\n        \"\"\"\n        :type unit: nav.models.manage.PowerSupplyOrFan\n        \"\"\"\n        method_name = CALL_MAP.get(unit.physical_class)\n        assert method_name is not None\n\n        if unit.internal_id is not None:\n            for mib in self.miblist:\n                method = getattr(mib, method_name, None)\n                if method:\n                    state = yield method(unit.internal_id)\n                    return state or STATE_UNKNOWN\n        else:\n            self._logger.debug(\"unit has no internal id: %r\", unit)\n\n        return STATE_UNKNOWN\n\n    @defer.inlineCallbacks\n    def _handle_state_change(self, unit, new_state):\n        self._logger.info(\n            \"%s state changed from %s to %s\", unit.name, unit.up, new_state\n        )\n        yield db.run_in_thread(self._update_internal_state, unit, new_state)\n        yield db.run_in_thread(self._post_event, unit, new_state)\n\n    #\n    # Synchronous database access methods\n    #\n\n    def _get_database_unit_list(self):\n        return list(PowerSupplyOrFan.objects.filter(netbox_id=self.netbox.id))\n\n    @staticmethod\n    def _update_internal_state(unit, new_state):\n        old_state = unit.up\n\n        if old_state in (STATE_UP, STATE_UNKNOWN) and new_state in (\n            STATE_WARNING,\n            STATE_DOWN,\n        ):\n            unit.downsince = datetime.datetime.now()\n        elif old_state in (STATE_DOWN, STATE_WARNING) and new_state == STATE_UP:\n            unit.downsince = None\n\n        PowerSupplyOrFan.objects.filter(id=unit.id).update(\n            up=new_state, downsince=unit.downsince\n        )\n\n    def _post_event(self, unit, new_state):\n        factory = EVENT_MAP.get(unit.physical_class)\n        assert factory is not None\n\n        if new_state in (STATE_DOWN, STATE_WARNING):\n            construct = factory.start\n        else:\n            construct = factory.end\n\n        varmap = {\n            \"sysname\": unit.netbox.sysname,\n            \"unitname\": unit.name,\n            \"state\": new_state,\n        }\n        event = construct(\n            netbox=unit.netbox,\n            device=unit.device if unit.device_id else None,\n            subid=unit.id,\n            varmap=varmap,\n        )\n        self._logger.debug(\"posting state change event for %s: %r\", unit, event)\n        with transaction.atomic():\n            event.save()\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/sensors.py",
    "content": "#\n# Copyright (C) 2008-2011, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to collect sensor data.\n\nThis plugin can use any MibRetriever class that provides the get_all_sensors()\nmethod to discover and store information about physical environmental sensors\navailable for readout on a device.\n\nWhich MibRetriever classes to use for each type of device is configured\nin the [sensors] and [sensors:vendormibs] sections of ipdevpoll.conf.\n\n\"\"\"\n\nimport importlib\nimport logging\nimport os\nimport re\nfrom collections import defaultdict\n\nfrom twisted.internet import defer\nfrom twisted.internet import error\n\nfrom nav.config import ConfigurationError\nfrom nav.mibs import mibretriever\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import shadows\nfrom nav.enterprise import ids\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\nfrom nav.oids import get_enterprise_id\n\n_logger = logging.getLogger(__name__)\n\n\nclass Sensors(Plugin):\n    \"\"\"Plugin to detect environmental sensors in netboxes\"\"\"\n\n    @classmethod\n    def on_plugin_load(cls):\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        loadmodules(ipdevpoll_conf)\n        cls.mib_map = get_mib_map(ipdevpoll_conf)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Collects sensors and feed them in to persistent store.\"\"\"\n        mibs = yield self.mibfactory()\n        self._logger.debug(\n            \"Discovering sensors sensors using: %r\", [type(m).__name__ for m in mibs]\n        )\n        for mib in mibs:\n            self._logger.debug(\"Trying %r\", type(mib).__name__)\n            try:\n                all_sensors = yield mib.get_all_sensors()\n            except (error.TimeoutError, defer.TimeoutError):\n                self._logger.debug(\n                    \"Timed out collecting sensors from %s\", mib.mib[\"moduleName\"]\n                )\n                continue\n\n            if all_sensors:\n                # Store and jump out on the first MIB that give\n                # any results\n                self._logger.debug(\n                    \"Found %d sensors from %s\", len(all_sensors), type(mib).__name__\n                )\n                self._store_sensors(all_sensors)\n\n    @defer.inlineCallbacks\n    def mibfactory(self):\n        \"\"\"\n        Returns a list of MibRetriever instances, as configured in\n        ipdevpoll.conf, to use for retrieving sensors from this netbox.\n\n        \"\"\"\n        vendor_id = None\n\n        snmpv2_mib = Snmpv2Mib(self.agent)\n        sysobjectid = yield snmpv2_mib.get_sysObjectID()\n        if sysobjectid:\n            vendor_id = get_enterprise_id(sysobjectid)\n        elif self.netbox.type:\n            vendor_id = self.netbox.type.get_enterprise_id()\n\n        classes = self.mib_map.get(vendor_id, ()) or self.mib_map.get('*', ())\n        mibs = [cls(self.agent) for cls in classes]\n        return mibs\n\n    def _store_sensors(self, result):\n        \"\"\"Stores sensor records in the current job's container dictionary, so\n        that they may be persisted to the database.\n\n        \"\"\"\n        sensors = []\n        for row in result:\n            oid = row.get('oid', None)\n            internal_name = row.get('internal_name', None)\n            mib = row.get('mib', None)\n            ifindex = row.get('ifindex')\n            # Minimum requirement.  Uniq by netbox, internal name and mib\n            if oid and internal_name and mib:\n                sensor = self.containers.factory(oid, shadows.Sensor)\n                sensor.netbox = self.netbox\n                sensor.oid = oid\n                sensor.unit_of_measurement = row.get('unit_of_measurement', None)\n                sensor.precision = row.get('precision', 0)\n                sensor.data_scale = row.get('scale', None)\n                sensor.human_readable = row.get('description', None)\n                sensor.name = row.get('name', None)\n                sensor.internal_name = internal_name\n                sensor.mib = mib\n                sensor.display_minimum_sys = row.get('minimum', None)\n                sensor.display_maximum_sys = row.get('maximum', None)\n                sensor.on_message_sys = row.get('on_message')\n                sensor.off_message_sys = row.get('off_message')\n                sensor.on_state_sys = row.get('on_state')\n                if ifindex:\n                    iface = self.containers.factory(ifindex, shadows.Interface)\n                    iface.netbox = self.netbox\n                    iface.ifindex = ifindex\n                    sensor.interface = iface\n                sensors.append(sensors)\n        return sensors\n\n\n####################\n# Helper functions #\n####################\n\n\ndef loadmodules(config):\n    \"\"\":type config: ConfigParser.ConfigParser\"\"\"\n    names = _get_space_separated_list(config, 'sensors', 'loadmodules')\n    names = sorted(list(_expand_module_names(names)))\n    _logger.debug(\"importing modules: %s\", names)\n    for name in names:\n        importlib.import_module(name)\n\n\ndef get_mib_map(config):\n    \"\"\":type config: ConfigParser.ConfigParser\"\"\"\n    candidate_classes = {\n        k: v\n        for k, v in mibretriever.MibRetrieverMaker.modules.items()\n        if hasattr(v, 'get_all_sensors')\n    }\n    _logger.debug(\"sensor candidate classes: %r\", candidate_classes)\n    candidate_classes.update({cls.__name__: cls for cls in candidate_classes.values()})\n\n    mib_map = defaultdict(list)\n    for opt in config.options('sensors:vendormibs'):\n        names = _get_space_separated_list(config, 'sensors:vendormibs', opt)\n        enterprise = _translate_enterprise_id(opt)\n        if not enterprise:\n            raise ConfigurationError(\"Unknown enterprise value: %s\", opt)\n\n        for mib in names:\n            if mib not in candidate_classes:\n                raise ConfigurationError(\n                    \"No known MIB implementation with sensor support: %s\", mib\n                )\n            cls = candidate_classes[mib]\n            mib_map[enterprise].append(cls)\n\n    return dict(mib_map)\n\n\ndef _translate_enterprise_id(name):\n    if not name or name == '*':\n        return name\n    if name.isdigit():\n        return int(name)\n\n    for lookup in (name.upper(), 'VENDOR_ID_' + name.upper()):\n        if hasattr(ids, lookup):\n            return getattr(ids, lookup)\n\n\ndef _expand_module_names(names):\n    for name in names:\n        items = name.split('.')\n        if items[-1] == '*':\n            for subname in _find_submodules('.'.join(items[:-1])):\n                yield subname\n        else:\n            yield name\n\n\ndef _find_submodules(name):\n    package = importlib.import_module(name)\n    directory = os.path.dirname(package.__file__)\n    pyfiles = (\n        n\n        for n in os.listdir(directory)\n        if (n.endswith('.py') or n.endswith('.pyc')) and n[0] not in '_.'\n    )\n    names = (os.path.splitext(n)[0] for n in pyfiles)\n    return [\"{}.{}\".format(name, n) for n in names]\n\n\ndef _get_space_separated_list(config, section, option):\n    raw_string = config.get(section, option, fallback='').strip()\n    items = re.split(r\"\\s+\", raw_string)\n    return [item for item in items if item]\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/snmpcheck.py",
    "content": "#\n# Copyright (C) 2011, 2012, 2016, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"snmp check plugin\"\"\"\n\nfrom pynetsnmp.netsnmp import SnmpTimeoutError\nfrom twisted.internet import error, defer\n\nfrom django.db import transaction\n\nfrom nav.event2 import EventFactory\nfrom nav.models import manage, event\nfrom nav.ipdevpoll import Plugin, db\nfrom nav.ipdevpoll.jobs import SuggestedReschedule\n\nSYSTEM_OID = '.1.3.6.1.2.1.1'\nEVENT = EventFactory(\n    'ipdevpoll', 'eventEngine', 'snmpAgentState', 'snmpAgentDown', 'snmpAgentUp'\n)\nINFO_KEY_NAME = 'status'\nINFO_VARIABLE_NAME = 'snmpstate'\n\n\nclass SnmpCheck(Plugin):\n    \"\"\"Checks that the device's SNMP agent is responding properly.\n\n    This is done by attempting to retrieve the SNMPv2-MIB::system variables.\n    If there is no response, an snmpAgentState (snmpAgentDown) event is\n    dispatched.\n\n    \"\"\"\n\n    @classmethod\n    def can_handle(cls, netbox):\n        return netbox.is_up() and bool(netbox.snmp_parameters)\n\n    def __init__(self, *args, **kwargs):\n        super(SnmpCheck, self).__init__(*args, **kwargs)\n\n    @defer.inlineCallbacks\n    def handle(self):\n        self._logger.debug(\n            \"snmp version from db: %s\", self.netbox.snmp_parameters.version\n        )\n        was_down = yield db.run_in_thread(self._currently_down)\n        is_ok = yield self._do_check()\n\n        if is_ok and was_down:\n            yield self._mark_as_up()\n        elif not is_ok:\n            # Always send down events; eventengine will ignore any duplicates\n            yield self._mark_as_down()\n            raise SuggestedReschedule(delay=60)\n\n    @defer.inlineCallbacks\n    def _do_check(self):\n        self._logger.debug(\"checking SNMP v%s availability\", self.agent.snmpVersion)\n        try:\n            result = yield self.agent.walk(SYSTEM_OID)\n        except (defer.TimeoutError, error.TimeoutError, SnmpTimeoutError):\n            self._logger.debug(\"SNMP v%s timed out\", self.agent.snmpVersion)\n            return False\n\n        self._logger.debug(\"SNMP response: %r\", result)\n        return bool(result)\n\n    @defer.inlineCallbacks\n    def _mark_as_down(self):\n        self._logger.warning(\"SNMP agent down on %s\", self.netbox.sysname)\n        yield db.run_in_thread(self._save_state, 'down')\n        yield db.run_in_thread(self._dispatch_down_event)\n\n    @defer.inlineCallbacks\n    def _mark_as_up(self):\n        self._logger.warning(\"SNMP agent up again on %s\", self.netbox.sysname)\n        yield db.run_in_thread(self._save_state, 'up')\n        yield db.run_in_thread(self._dispatch_up_event)\n\n    def _save_state(self, state):\n        info, _ = manage.NetboxInfo.objects.get_or_create(\n            netbox_id=self.netbox.id, key=INFO_KEY_NAME, variable=INFO_VARIABLE_NAME\n        )\n        info.value = state\n        info.save()\n\n    @transaction.atomic()\n    def _dispatch_down_event(self):\n        EVENT.start(None, self.netbox.id).save()\n\n    @transaction.atomic()\n    def _dispatch_up_event(self):\n        EVENT.end(None, self.netbox.id).save()\n\n    @transaction.atomic()\n    def _currently_down(self):\n        internally_down = manage.NetboxInfo.objects.filter(\n            netbox=self.netbox.id,\n            key=INFO_KEY_NAME,\n            variable=INFO_VARIABLE_NAME,\n            value=\"down\",\n        ).exists()\n        globally_down = (\n            event.AlertHistory.objects.unresolved(\"snmpAgentState\")\n            .filter(netbox=self.netbox.id)\n            .exists()\n        )\n\n        return internally_down or globally_down\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/staticroutes.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to find and store static routes from routing tables\"\"\"\n\nimport configparser\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll.shadows import Prefix, Vlan, NetType\nfrom nav.mibs.ip_forward_mib import IpForwardMib\nfrom nav.mibs.if_mib import IfMib\n\nfrom nav.ipdevpoll import Plugin\nfrom .prefix import get_ignored_prefixes\n\nWANTED_PROTOCOLS = (\"local\", \"netmgmt\")\n\n\nclass StaticRoutes(Plugin):\n    \"\"\"\n    Collects the entire routing table to select only static routes\n    \"\"\"\n\n    ignored_prefixes = ()\n\n    @classmethod\n    def on_plugin_load(cls):\n        from nav.ipdevpoll.config import ipdevpoll_conf\n\n        cls.ignored_prefixes = get_ignored_prefixes(ipdevpoll_conf)\n        cls.throttle_delay = get_throttle_delay(ipdevpoll_conf)\n\n    @classmethod\n    def can_handle(cls, netbox):\n        \"\"\"This will only be useful on layer 3 devices, i.e. GW/GSW devices.\"\"\"\n        daddy_says_ok = super(StaticRoutes, cls).can_handle(netbox)\n        return daddy_says_ok and netbox.category.id in ('GW', 'GSW')\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Initiates throttled collection of routing table\"\"\"\n        orig_delay = self.agent.throttle_delay\n        self.agent.throttle_delay = self.throttle_delay\n        try:\n            yield self.collect_routes()\n        finally:\n            self.agent.throttle_delay = orig_delay\n\n    @defer.inlineCallbacks\n    def collect_routes(self):\n        \"\"\"\n        Collects the routing table, filters out what we consider to be static\n        routes worthy of storage in NAV, and ensure storage as prefixes.\n\n        \"\"\"\n        mib = IpForwardMib(self.agent)\n        ifmib = IfMib(self.agent)\n\n        routes = yield mib.get_decoded_routes(protocols=WANTED_PROTOCOLS)\n        filtered = [r for r in routes if self.is_wanted_route(r)]\n\n        self._logger.debug(\n            \"%d of %d collected routes are static candidates\",\n            len(filtered),\n            len(routes),\n        )\n        self._logger.debug(\n            \"collected destinations: %r\", [r.destination for r in filtered]\n        )\n\n        for route in filtered:\n            ifindex = yield mib.get_cidr_route_column('IfIndex', route.index)\n            alias = None\n            if ifindex:\n                alias = yield ifmib.retrieve_column_by_index('ifAlias', (ifindex,))\n            self.route_to_containers(route, descr=alias)\n\n        Prefix.add_static_routes_sentinel(self.containers)\n\n    def route_to_containers(self, route, descr=None):\n        \"\"\"Helper method to create container objects for db persistence\"\"\"\n        if self.containers.get(route.destination, Prefix):\n            self._logger.debug(\n                \"ignoring static route for %s, prefix already exists\", route.destination\n            )\n            return\n\n        vlan = self.containers.factory(route.destination, Vlan)\n        vlan.net_type = NetType.get('static')\n        sysname = self.netbox.sysname.split('.')[0]\n        vlan.net_ident = \"{},{}\".format(sysname, route.nexthop)\n        if descr:\n            vlan.description = descr\n\n        prefix = self.containers.factory(route.destination, Prefix)\n        prefix.net_address = str(route.destination)\n        prefix.vlan = vlan\n\n    @classmethod\n    def is_wanted_route(cls, route):\n        \"\"\"Returns True if this CidrRouteEntry is interesting to NAV.\n\n        :type route: CidrRouteEntry\n\n        \"\"\"\n        dest = route.destination\n        if dest.version() == 4 and dest.prefixlen() == 32:\n            return False  # no host routes, please\n        if dest.version() == 6 and dest.prefixlen() == 128:\n            return False  # no host routes, please\n        if route.nexthop is None:\n            return False  # only care about routes that have a nexthop\n        for ignored in cls.ignored_prefixes:\n            if ignored.matches(dest):\n                return False  # explicitly ignored by config\n        return True\n\n\ndef get_throttle_delay(config):\n    \"\"\"Returns a throttle delay value from a ConfigParser instance\"\"\"\n    try:\n        return config.getfloat('staticroutes', 'throttle-delay')\n    except configparser.Error:\n        return 0.0\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/statmulticast.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collect multicast statistics and send to Graphite\"\"\"\n\nimport time\nimport logging\nfrom collections import Counter\nfrom pprint import pformat\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_path_for_multicast_usage\nfrom nav.mibs.statistics_mib import StatisticsMib\nfrom nav.enterprise.ids import VENDOR_ID_HEWLETT_PACKARD\n\n\nclass StatMulticast(Plugin):\n    \"\"\"Collects system statistics and pushes to Graphite\"\"\"\n\n    @defer.inlineCallbacks\n    def handle(self):\n        vendor = self.netbox.type.get_enterprise_id() if self.netbox.type else None\n        if vendor == VENDOR_ID_HEWLETT_PACKARD:\n            yield self._collect_hp_multicast()\n\n    @defer.inlineCallbacks\n    def _collect_hp_multicast(self):\n        timestamp = time.time()\n\n        mib = StatisticsMib(self.agent)\n        result = yield mib.get_ipv4_multicast_groups_per_port()\n\n        if self._logger.isEnabledFor(logging.DEBUG):\n            self._logger.debug(\"%s\", pformat(result))\n\n        if result:\n            counts = self._count_ports_by_group(result)\n            self._logger.debug(\"%r\", counts)\n            metrics = self._make_metrics_from_counts(counts, timestamp)\n            if metrics:\n                send_metrics(metrics)\n\n    @staticmethod\n    def _count_ports_by_group(report):\n        \"\"\"\n        Counts the number of listening ports per multicast group.\n\n        Only ports with apparent IGMP hosts are counted, not ports with\n        apparent routers.\n        \"\"\"\n        counter = Counter(r.group for r in report if r.access == \"host\")\n        return counter\n\n    def _make_metrics_from_counts(self, count_report, timestamp=None):\n        timestamp = timestamp or time.time()\n        return [\n            (metric_path_for_multicast_usage(group, self.netbox), (timestamp, count))\n            for group, count in count_report.items()\n        ]\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/statports.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects port traffic counters and pushes to Graphite\"\"\"\n\nimport time\nimport logging\n\nfrom twisted.internet import defer\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import db\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_path_for_interface\nfrom nav.mibs import reduce_index\nfrom nav.mibs.if_mib import IfMib\nfrom nav.mibs.ip_mib import IpMib\nfrom nav.models import manage\n\n\nNON_HC_COUNTERS = (\n    \"ifInOctets\",\n    \"ifOutOctets\",\n    \"ifInBroadcastPkts\",\n    \"ifOutBroadcastPkts\",\n    \"ifInMulticastPkts\",\n    \"ifOutMulticastPkts\",\n)\n\nHC_COUNTERS = (\n    \"ifHCInOctets\",\n    \"ifHCOutOctets\",\n    \"ifHCInBroadcastPkts\",\n    \"ifHCOutBroadcastPkts\",\n    \"ifHCInMulticastPkts\",\n    \"ifHCOutMulticastPkts\",\n)\n\nOTHER_COUNTERS = (\n    \"ifInErrors\",\n    \"ifOutErrors\",\n    \"ifInUcastPkts\",\n    \"ifOutUcastPkts\",\n    \"ifInDiscards\",\n    \"ifOutDiscards\",\n)\n\nIF_IN_OCTETS_IPV6 = 'ifInOctetsIPv6'\nIF_OUT_OCTETS_IPV6 = 'ifOutOctetsIPv6'\n\nIP_COUNTERS = (\n    IF_IN_OCTETS_IPV6,\n    IF_OUT_OCTETS_IPV6,\n)\n\nUSED_COUNTERS = NON_HC_COUNTERS + HC_COUNTERS + OTHER_COUNTERS\nLOGGED_COUNTERS = USED_COUNTERS + IP_COUNTERS\n\n\nclass StatPorts(Plugin):\n    @classmethod\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(StatPorts, cls).can_handle(netbox)\n        return daddy_says_ok and netbox.category.id != 'EDGE'\n\n    @defer.inlineCallbacks\n    def handle(self):\n        if self.netbox.master:\n            yield self._log_instance_details()\n            return None\n\n        timestamp = time.time()\n        stats = yield self._get_stats()\n        netboxes = yield db.run_in_thread(self._get_netbox_list)\n        tuples = list(self._make_metrics(stats, netboxes=netboxes, timestamp=timestamp))\n        if tuples:\n            self._logger.debug(\"Counters collected\")\n            send_metrics(tuples)\n\n    @defer.inlineCallbacks\n    def _get_stats(self):\n        ifmib = IfMib(self.agent)\n        ipmib = IpMib(self.agent)\n        stats = yield ifmib.retrieve_columns(\n            (\"ifName\", \"ifDescr\") + USED_COUNTERS\n        ).addCallback(reduce_index)\n        ipv6stats = yield ipmib.get_ipv6_octet_counters()\n        if ipv6stats:\n            self._logger.debug(\n                \"found ipv6 octet counters for %d interfaces\", len(ipv6stats)\n            )\n        for ifindex, (in_octets, out_octets) in ipv6stats.items():\n            if ifindex in stats:\n                stats[ifindex][IF_IN_OCTETS_IPV6] = in_octets\n                stats[ifindex][IF_OUT_OCTETS_IPV6] = out_octets\n\n        return stats\n\n    def _make_metrics(self, stats, netboxes, timestamp=None):\n        timestamp = timestamp or time.time()\n        hc_counters = False\n\n        for row in stats.values():\n            hc_counters = use_hc_counters(row) or hc_counters\n            for key in LOGGED_COUNTERS:\n                if key not in row:\n                    continue\n                value = row[key]\n                if value is not None:\n                    for netbox in netboxes:\n                        # duplicate metrics for all involved netboxes\n                        path = metric_path_for_interface(\n                            netbox, row['ifName'] or row['ifDescr'], key\n                        )\n                        yield (path, (timestamp, value))\n\n        if stats:\n            if hc_counters:\n                self._logger.debug(\"High Capacity counters used\")\n            else:\n                self._logger.debug(\"High Capacity counters NOT used\")\n\n    @defer.inlineCallbacks\n    def _log_instance_details(self):\n        def _get_master_and_instance_list():\n            netbox = manage.Netbox.objects.get(id=self.netbox.id)\n\n            my_ifcs = netbox.interfaces.values_list('ifname', flat=True)\n            masters_ifcs = netbox.master.interfaces.values_list('ifname', flat=True)\n            local_ifcs = set(masters_ifcs) - set(my_ifcs)\n            return netbox.master.sysname, local_ifcs\n\n        if self._logger.isEnabledFor(logging.DEBUG):\n            master, ifcs = yield db.run_in_thread(_get_master_and_instance_list)\n            self._logger.debug(\n                \"local interfaces (that do not exist on master %s): %r\", master, ifcs\n            )\n\n\ndef use_hc_counters(row):\n    \"\"\"\n    Replaces octet counter values with high capacity counter values, if present\n    \"\"\"\n    result = False\n    for hc, nonhc in zip(HC_COUNTERS, NON_HC_COUNTERS):\n        if row.get(hc, None) is not None:\n            result = True\n            row[nonhc] = row[hc]\n        if hc in row:\n            del row[hc]\n    return result\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/statsensors.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Sensors collection and logging to graphite\"\"\"\n\nimport time\n\nfrom twisted.internet import defer\n\nfrom nav.Snmp import safestring\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import db\nfrom nav.ipdevpoll.db import run_in_thread\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_path_for_sensor\nfrom nav.models.manage import Sensor\n\n# Ask for no more than this number of values in a single SNMP GET operation\nMAX_SENSORS_PER_REQUEST = 5\n\n\nclass StatSensors(Plugin):\n    \"\"\"Collects measurement values from registered sensors and pushes to\n    Graphite.\n\n    \"\"\"\n\n    @classmethod\n    @defer.inlineCallbacks\n    def can_handle(cls, netbox):\n        base_can_handle = yield defer.maybeDeferred(\n            super(StatSensors, cls).can_handle, netbox\n        )\n        if base_can_handle:\n            i_can_handle = yield run_in_thread(cls._has_sensors, netbox)\n            return i_can_handle\n        return base_can_handle\n\n    @classmethod\n    def _has_sensors(cls, netbox):\n        return Sensor.objects.filter(netbox=netbox.id).count() > 0\n\n    @defer.inlineCallbacks\n    def handle(self):\n        if self.netbox.master:\n            return None\n        netboxes = yield db.run_in_thread(self._get_netbox_list)\n        sensors = yield run_in_thread(self._get_sensors)\n        self._logger.debug(\"retrieving data from %d sensors\", len(sensors))\n        oids = list(sensors.keys())\n        requests = [\n            oids[x : x + MAX_SENSORS_PER_REQUEST]\n            for x in range(0, len(oids), MAX_SENSORS_PER_REQUEST)\n        ]\n        for req in requests:\n            data = yield self.agent.get(req).addCallback(\n                self._response_to_metrics, sensors, netboxes\n            )\n            self._logger.debug(\"got data from sensors: %r\", data)\n\n    def _get_sensors(self):\n        sensors = Sensor.objects.filter(netbox=self.netbox.id).values()\n        return dict((row['oid'], row) for row in sensors)\n\n    def _response_to_metrics(self, result, sensors, netboxes):\n        metrics = []\n        timestamp = time.time()\n        data = (\n            (sensors[oid], value) for oid, value in result.items() if oid in sensors\n        )\n        for sensor, value in data:\n            # Attempt to support numbers-as-text values\n            if isinstance(value, bytes):\n                value = safestring(value)\n            if isinstance(value, str):\n                try:\n                    value = float(value)\n                except ValueError:\n                    pass\n\n            value = convert_to_precision(value, sensor)\n            for netbox in netboxes:\n                path = metric_path_for_sensor(netbox, sensor['internal_name'])\n                metrics.append((path, (timestamp, value)))\n        send_metrics(metrics)\n        return metrics\n\n\ndef convert_to_precision(value, sensor):\n    \"\"\"Moves the decimal point of a value according to the precision defined\n    for sensor\n\n    \"\"\"\n    prec = sensor.get('precision', 0)\n    return value * (10**-prec) if value and prec else value\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/statsystem.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects system statistics and pushes to Graphite\"\"\"\n\nimport time\n\nfrom twisted.internet import defer\nfrom twisted.internet.error import TimeoutError\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll import db\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import (\n    metric_path_for_bandwith,\n    metric_path_for_bandwith_peak,\n    metric_path_for_cpu_load,\n    metric_path_for_cpu_utilization,\n    metric_path_for_sysuptime,\n    metric_path_for_power,\n    metric_prefix_for_memory,\n)\nfrom nav.mibs.cisco_memory_pool_mib import CiscoMemoryPoolMib\nfrom nav.mibs.cisco_enhanced_memory_pool_mib import CiscoEnhancedMemoryPoolMib\n\nfrom nav.mibs.esswitch_mib import ESSwitchMib\nfrom nav.mibs.cisco_c2900_mib import CiscoC2900Mib\nfrom nav.mibs.cisco_stack_mib import CiscoStackMib\nfrom nav.mibs.netswitch_mib import NetswitchMib\nfrom nav.mibs.old_cisco_cpu_mib import OldCiscoCpuMib\nfrom nav.mibs.cisco_process_mib import CiscoProcessMib\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\nfrom nav.mibs.statistics_mib import StatisticsMib\nfrom nav.mibs.juniper_mib import JuniperMib\nfrom nav.mibs.power_ethernet_mib import PowerEthernetMib\nfrom nav.enterprise.ids import (\n    VENDOR_ID_CISCOSYSTEMS,\n    VENDOR_ID_HEWLETT_PACKARD,\n    VENDOR_ID_JUNIPER_NETWORKS_INC,\n)\n\n\nBANDWIDTH_MIBS = {\n    VENDOR_ID_CISCOSYSTEMS: [CiscoStackMib, CiscoC2900Mib, ESSwitchMib],\n}\n\nCPU_MIBS = {\n    VENDOR_ID_CISCOSYSTEMS: [CiscoProcessMib, OldCiscoCpuMib],\n    VENDOR_ID_HEWLETT_PACKARD: [StatisticsMib],\n    VENDOR_ID_JUNIPER_NETWORKS_INC: [JuniperMib],\n}\n\nMEMORY_MIBS = {\n    VENDOR_ID_CISCOSYSTEMS: [CiscoMemoryPoolMib, CiscoEnhancedMemoryPoolMib],\n    VENDOR_ID_HEWLETT_PACKARD: [NetswitchMib],\n    VENDOR_ID_JUNIPER_NETWORKS_INC: [JuniperMib],\n}\n\n\nclass StatSystem(Plugin):\n    \"\"\"Collects system statistics and pushes to Graphite\"\"\"\n\n    @defer.inlineCallbacks\n    def handle(self):\n        if self.netbox.master:\n            return None\n        netboxes = yield db.run_in_thread(self._get_netbox_list)\n        bandwidth = yield self._collect_bandwidth(netboxes)\n        cpu = yield self._collect_cpu(netboxes)\n        sysuptime = yield self._collect_sysuptime(netboxes)\n        memory = yield self._collect_memory(netboxes)\n        power = yield self._collect_power(netboxes)\n\n        metrics = bandwidth + cpu + sysuptime + memory + power\n        if metrics:\n            send_metrics(metrics)\n\n    @defer.inlineCallbacks\n    def _collect_bandwidth(self, netboxes):\n        for mib in self._mibs_for_me(BANDWIDTH_MIBS):\n            try:\n                metrics = yield self._collect_bandwidth_from_mib(mib, netboxes)\n            except (TimeoutError, defer.TimeoutError):\n                self._logger.debug(\n                    \"collect_bandwidth: ignoring timeout in %s\", mib.mib['moduleName']\n                )\n            else:\n                if metrics:\n                    return metrics\n        return []\n\n    @defer.inlineCallbacks\n    def _collect_bandwidth_from_mib(self, mib, netboxes):\n        try:\n            bandwidth = yield mib.get_bandwidth()\n            bandwidth_peak = yield mib.get_bandwidth_peak()\n            percent = False\n        except AttributeError:\n            bandwidth = yield mib.get_bandwidth_percent()\n            bandwidth_peak = yield mib.get_bandwidth_percent_peak()\n            percent = True\n\n        if bandwidth or bandwidth_peak:\n            self._logger.debug(\n                \"Found bandwidth values from %s: %s, %s\",\n                mib.mib['moduleName'],\n                bandwidth,\n                bandwidth_peak,\n            )\n            timestamp = time.time()\n            metrics = []\n            for netbox in netboxes:\n                metrics += [\n                    (metric_path_for_bandwith(netbox, percent), (timestamp, bandwidth)),\n                    (\n                        metric_path_for_bandwith_peak(netbox, percent),\n                        (timestamp, bandwidth_peak),\n                    ),\n                ]\n            return metrics\n\n    @defer.inlineCallbacks\n    def _collect_cpu(self, netboxes):\n        for mib in self._mibs_for_me(CPU_MIBS):\n            try:\n                load = yield self._get_cpu_loadavg(mib, netboxes)\n                utilization = yield self._get_cpu_utilization(mib, netboxes)\n            except (TimeoutError, defer.TimeoutError):\n                self._logger.debug(\n                    \"collect_cpu: ignoring timeout in %s\", mib.mib['moduleName']\n                )\n            else:\n                return load + utilization\n        return []\n\n    @defer.inlineCallbacks\n    def _get_cpu_loadavg(self, mib, netboxes):\n        load = yield mib.get_cpu_loadavg()\n        timestamp = time.time()\n        metrics = []\n\n        if load:\n            self._logger.debug(\n                \"Found CPU loadavg from %s: %s\", mib.mib['moduleName'], load\n            )\n            for cpuname, loadlist in load.items():\n                for interval, value in loadlist:\n                    for netbox in netboxes:\n                        path = metric_path_for_cpu_load(netbox, cpuname, interval)\n                        metrics.append((path, (timestamp, value)))\n        return metrics\n\n    @defer.inlineCallbacks\n    def _get_cpu_utilization(self, mib, netboxes):\n        utilization = yield mib.get_cpu_utilization()\n        timestamp = time.time()\n        metrics = []\n\n        if utilization:\n            self._logger.debug(\n                \"Found CPU utilization from %s: %s\", mib.mib['moduleName'], utilization\n            )\n            for cpuname, value in utilization.items():\n                for netbox in netboxes:\n                    path = metric_path_for_cpu_utilization(netbox, cpuname)\n                    metrics.append((path, (timestamp, value)))\n        return metrics\n\n    def _mibs_for_me(self, mib_class_dict):\n        vendor = self.netbox.type.get_enterprise_id() if self.netbox.type else None\n        mib_classes = mib_class_dict.get(vendor, None) or mib_class_dict.get(None, [])\n        self._logger.debug(\"mibs for me (vendor=%s): %r\", vendor, mib_classes)\n        for mib_class in mib_classes:\n            yield mib_class(self.agent)\n\n    @defer.inlineCallbacks\n    def _collect_sysuptime(self, netboxes):\n        mib = Snmpv2Mib(self.agent)\n        uptime = yield mib.get_sysUpTime()\n        timestamp = time.time()\n\n        if uptime:\n            metrics = []\n            for netbox in netboxes:\n                path = metric_path_for_sysuptime(netbox)\n                metrics.append((path, (timestamp, uptime)))\n            return metrics\n        else:\n            return []\n\n    @defer.inlineCallbacks\n    def _collect_power(self, netboxes):\n        mib = PowerEthernetMib(self.agent)\n        power = yield mib.get_groups_table()\n        self._logger.debug(\"Got poe data %s\", power)\n        power = {\n            key: val['pethMainPseConsumptionPower']\n            for key, val in power.items()\n            if val['pethMainPseOperStatus'] == 1\n        }\n        timestamp = time.time()\n\n        if power:\n            metrics = []\n            for netbox in netboxes:\n                for index, value in power.items():\n                    path = metric_path_for_power(netbox, index)\n                    metrics.append((path, (timestamp, value)))\n            return metrics\n        else:\n            return []\n\n    @defer.inlineCallbacks\n    def _collect_memory(self, netboxes):\n        memory = dict()\n        for mib in self._mibs_for_me(MEMORY_MIBS):\n            try:\n                mem = yield mib.get_memory_usage()\n            except (TimeoutError, defer.TimeoutError):\n                self._logger.debug(\n                    \"collect_memory: ignoring timeout in %s\", mib.mib['moduleName']\n                )\n            else:\n                if mem:\n                    self._logger.debug(\n                        \"Found memory values from %s: %r\", mib.mib['moduleName'], mem\n                    )\n                    memory.update(mem)\n\n        timestamp = time.time()\n        result = []\n        for name, (used, free) in memory.items():\n            for netbox in netboxes:\n                prefix = metric_prefix_for_memory(netbox, name)\n                result.extend(\n                    [\n                        (prefix + '.used', (timestamp, used)),\n                        (prefix + '.free', (timestamp, free)),\n                    ]\n                )\n        return result\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/system.py",
    "content": "#\n# Copyright (C) 2011,2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Collects system information from SNMPv2-MIB\"\"\"\n\nimport re\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.models import manage\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\n\nPATTERNS = [\n    re.compile(r\"Version (?P<version>[^,]+)\"),\n    re.compile(r\"V(?P<version>[0-9]+[0-9A-Za-z.]*)\"),\n    re.compile(r\"SW:(?P<version>v?[0-9]+[0-9A-Za-z.]*)\"),\n    re.compile(r\" (?P<version>[0-9]+\\.[0-9A-Za-z.]+)\"),\n    re.compile(r\" (?P<version>[A-Z]+\\.[0-9]+\\.[0-9]+)\"),\n]\n\n\nclass System(Plugin):\n    \"\"\"Collects sysDescr and parses a software version from it\"\"\"\n\n    @inlineCallbacks\n    def handle(self):\n        snmpv2_mib = Snmpv2Mib(self.agent)\n        sysdescr = yield snmpv2_mib.get_sysDescr()\n        if sysdescr:\n            self._logger.debug(\"sysDescr: %r\", sysdescr)\n            version = parse_version(sysdescr)\n            self._logger.debug(\"Parsed version: %s\", version)\n            if version:\n                self._set_device_version(version)\n\n    def _set_device_version(self, version):\n        netbox = self.containers.factory(None, shadows.Netbox)\n        chassis = shadows.NetboxEntity.get_chassis_entities(self.containers)\n        if chassis and len(chassis) == 1:\n            entity = chassis[0]\n            self._logger.debug(\n                \"found a pre-existing chassis: %s/%s (%s)\",\n                entity.name,\n                entity.source,\n                entity.device.serial if entity.device else \"N/A\",\n            )\n            if not entity.software_revision:\n                entity.software_revision = version\n                self._logger.debug(\"set pre-existing entity software revision\")\n            if entity.device and not entity.device.software_version:\n                entity.device.software_version = version\n                self._logger.debug(\"set pre-existing device software revision\")\n\n        if not chassis:\n            roots = shadows.NetboxEntity.get_root_entities(self.containers)\n            if roots:\n                self._logger.debug(\n                    \"device has root entities, but none are chassis. doing \"\n                    \"nothing about the software revisions I found\"\n                )\n                return\n\n            device = self.containers.factory(None, shadows.Device)\n            if not device.software_version:\n                self._logger.debug(\"didn't find a pre-existing chassis, making one\")\n                device.software_version = version\n\n                entity = self.containers.factory(None, shadows.NetboxEntity)\n                entity.netbox = netbox\n                entity.index = 0\n                entity.source = \"SNMPv2-MIB\"\n                entity.physical_class = manage.NetboxEntity.CLASS_CHASSIS\n                entity.device = device\n                entity.software_revision = version\n\n\ndef parse_version(sysdescr):\n    \"\"\"Parses sysDescr according to known patterns and returns a software\n    version number.\n\n    \"\"\"\n    for pattern in PATTERNS:\n        match = pattern.search(sysdescr)\n        if match:\n            return match.group('version')\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/typeoid.py",
    "content": "#\n# Copyright (C) 2008-2012, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll type detection plugin.\n\nCollects sysObjectId and compares with the registered type of the\nnetbox.\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin, shadows, signals, db\nfrom nav.oids import OID, get_enterprise_id\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\nfrom nav.models import manage\n\nfrom nav.enterprise import ids\n\nUNKNOWN_VENDOR_ID = UNKNOWN_TYPE_ID = \"unknown\"\nCONSTANT_PREFIX = \"VENDOR_ID_\"\n_enterprise_map = {\n    value: constant\n    for constant, value in vars(ids).items()\n    if constant.startswith(CONSTANT_PREFIX)\n}\n\n\nclass InvalidResponseError(Exception):\n    pass\n\n\nclass TypeOid(Plugin):\n    \"\"\"SNMP Agent type detector plugin\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(TypeOid, self).__init__(*args, **kwargs)\n        self.snmpv2_mib = Snmpv2Mib(self.agent)\n        self.sysobjectid = None\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Collects sysObjectID and looks for type changes.\"\"\"\n        self._logger.debug(\"Collecting sysObjectId\")\n\n        oid = yield self._fetch_sysobjectid()\n        if self._is_sysobjectid_changed(oid):\n            yield self._switch_type(oid)\n\n    @defer.inlineCallbacks\n    def _fetch_sysobjectid(self):\n        result = yield self.snmpv2_mib.get_sysObjectID()\n        if not result:\n            raise InvalidResponseError(\n                \"No response on sysObjectID query.\", result, self.agent\n            )\n        oid = OID(result)\n        self._logger.debug(\"sysObjectID is %s\", oid)\n        return oid\n\n    def _is_sysobjectid_changed(self, oid):\n        current_oid = OID(self.netbox.type.sysobjectid) if self.netbox.type else None\n        return current_oid != OID(oid)\n\n    @defer.inlineCallbacks\n    def _switch_type(self, oid):\n        new_type = yield self._get_type_from_oid(oid)\n        if not new_type:\n            new_type = yield self._create_new_type(oid)\n        self._set_type(shadows.NetboxType(new_type))\n\n    @staticmethod\n    @db.synchronous_db_access\n    def _get_type_from_oid(oid):\n        \"\"\"Loads from db a type object matching the sysobjectid.\"\"\"\n        term = str(oid).strip(\".\")\n        try:\n            return manage.NetboxType.objects.get(sysobjectid=term)\n        except manage.NetboxType.DoesNotExist:\n            return None\n\n    def _set_type(self, new_type):\n        \"\"\"Sets the netbox type to type_.\"\"\"\n        netbox_container = self.containers.factory(None, shadows.Netbox)\n        netbox_container.type = new_type\n\n        self._send_signal_if_changed_from_known_to_new_type(new_type)\n        self._logger.info(\n            \"%s has changed type from %s to %s\",\n            self.netbox.sysname,\n            type_to_string(self.netbox.type),\n            type_to_string(new_type),\n        )\n\n        self.netbox.type = new_type\n\n    def _send_signal_if_changed_from_known_to_new_type(self, new_type):\n        if self.netbox.type is not None:\n            signals.netbox_type_changed.send(\n                sender=self, netbox_id=self.netbox.id, new_type=new_type\n            )\n\n    @defer.inlineCallbacks\n    def _create_new_type(self, oid):\n        \"\"\"Creates a new NetboxType from the given sysobjectid.\"\"\"\n        self._logger.debug(\"Creating a new type from %r\", oid)\n        description = yield self.snmpv2_mib.get_sysDescr()\n\n        def _create():\n            vendor = self._get_vendor(oid)\n            type_ = manage.NetboxType(\n                vendor=vendor,\n                name=str(oid),\n                sysobjectid=str(oid).strip(\".\"),\n                description=description,\n            )\n            type_.save()\n            return type_\n\n        new_type = yield db.run_in_thread(_create)\n        return new_type\n\n    @classmethod\n    def _get_vendor(cls, sysobjectid):\n        \"\"\"Looks up the most likely vendor based on a sysObjectID\"\"\"\n        enterprise_id = get_enterprise_id(sysobjectid)\n        query = (\n            \"vendorid IN (SELECT vendorid FROM enterprise_number WHERE enterprise=%s)\"\n        )\n        try:\n            return manage.Vendor.objects.extra(where=[query], params=[enterprise_id])[0]\n        except IndexError:\n            return cls._make_new_vendor(sysobjectid)\n\n    @classmethod\n    def _make_new_vendor(cls, sysobjectid):\n        \"\"\"Makes up a new Vendor based on a sysObjectID\"\"\"\n        enterprise_id = get_enterprise_id(sysobjectid)\n        if enterprise_id in _enterprise_map:\n            name = _enterprise_map[enterprise_id]\n            name = name.replace(CONSTANT_PREFIX, \"\").replace(\"_\", \"\").lower()[:15]\n        else:\n            name = UNKNOWN_VENDOR_ID\n\n        cls._logger.debug(\"Making new vendor %r from %r\", name, sysobjectid)\n        vendor, _created = manage.Vendor.objects.get_or_create(id=name)\n        return vendor\n\n\ndef type_to_string(type_):\n    \"\"\"Returns a string representation of a NetboxType for logging use. Should work\n    with both ORM models and Shadow instances, as well as None values.\n    \"\"\"\n    if not type_:\n        return UNKNOWN_TYPE_ID\n    else:\n        return \"{} ({})\".format(type_.name, type_.vendor.id)\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/uptime.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n# TODO: Add support for HOST-RESOURCES-MIB::hrSystemUptime as well\n#\n\"\"\"Collects uptime ticks and interprets discontinuities as cold boots\"\"\"\n\nfrom datetime import timedelta, datetime\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.ipdevpoll import Plugin, shadows\nfrom nav.ipdevpoll.timestamps import TimestampChecker\n\nCOLDBOOT_MAX_DELTA = 60 * 60  # seconds\n\n\nclass Uptime(Plugin):\n    \"\"\"Collects uptime ticks and discovers discontinuities in uptime data\"\"\"\n\n    @inlineCallbacks\n    def handle(self):\n        is_deviant, new_upsince = yield self._get_timestamps()\n        netbox = self.containers.factory(None, shadows.Netbox)\n        if is_deviant:\n            self._logger.warning(\"Detected possible coldboot at %s\", new_upsince)\n\n        if is_deviant or not self.netbox.up_since:\n            self._logger.debug(\"setting new upsince: %s\", new_upsince)\n            netbox.up_since = new_upsince  # container netbox\n            self.netbox.up_since = new_upsince  # input netbox\n\n    @inlineCallbacks\n    def _get_timestamps(self):\n        stampcheck = TimestampChecker(self.agent, self.containers, \"uptime\")\n        old_times = yield stampcheck.load()\n        new_times = yield stampcheck.collect([])\n        changed = old_times and stampcheck.is_changed(COLDBOOT_MAX_DELTA)\n        self._logger.debug(\"uptime data (changed=%s): %r\", changed, new_times)\n        timestamp, ticks = new_times[0]\n        upsince = get_upsince(timestamp, ticks)\n        self._logger.debug(\n            \"last sysuptime reset/rollover reported by device: %s\", upsince\n        )\n        stampcheck.save()\n        return (changed, upsince)\n\n\ndef get_upsince(timestamp, ticks):\n    \"\"\"Calculates the datetime of a timestamp minus a ticks delta.\n\n    :param timestamp: A number of seconds since the epoch.\n    :param ticks: A number of SNMP timeticks / centiseconds.\n    :returns: A datetime object representing the timestamp minus the ticks.\n\n    \"\"\"\n    delta = timedelta(seconds=int(ticks / 100))\n    sometime = datetime.fromtimestamp(timestamp)\n    return sometime - delta\n"
  },
  {
    "path": "python/nav/ipdevpoll/plugins/virtualrouter.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll plugin to poll Cisco HSRP address information\"\"\"\n\nfrom IPy import IP\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll import Plugin\nfrom nav.ipdevpoll.shadows import GwPortPrefix\nfrom nav.mibs.vrrp_mib import VRRPMib\nfrom nav.mibs.cisco_hsrp_mib import CiscoHSRPMib\n\n\nclass VirtualRouter(Plugin):\n    \"\"\"ipdevpoll plugin to collect Virtual Router addresses from VRRP and\n    HSRP routers.\n\n    These addresses are marked as virtual in NAV database,\n    and will ensure that networks with redundant routers aren't classified\n    incorrectly as link networks.\n\n    This plugin will only update existing addresses that were collected by a\n    plugin that ran before this one in the same job (such as the Prefix\n    plugin). This is to ensure we don't create addresses that aren't active\n    on the router.\n\n    \"\"\"\n\n    @classmethod\n    def can_handle(cls, netbox):\n        daddy_says_ok = super(VirtualRouter, cls).can_handle(netbox)\n        return daddy_says_ok and netbox.category.id in ('GW', 'GSW')\n\n    def __init__(self, *args, **kwargs):\n        super(VirtualRouter, self).__init__(*args, **kwargs)\n        self.mibs = [mib(self.agent) for mib in (CiscoHSRPMib, VRRPMib)]\n\n    @defer.inlineCallbacks\n    def handle(self):\n        \"\"\"Handles address collection\"\"\"\n        if self.gwportprefixes_found():\n            mibs = []\n            virtual_addrs = set()\n\n            for mib in self.mibs:\n                addrs_from_mib = yield mib.get_virtual_addresses()\n                virtual_addrs.update(addrs_from_mib)\n                if addrs_from_mib:\n                    mibs.append(mib.mib['moduleName'])\n\n            self.update_containers_with(virtual_addrs, mibs)\n\n    def gwportprefixes_found(self):\n        if GwPortPrefix not in self.containers:\n            self._logger.debug(\"there are no collected GwPortPrefixes to update\")\n            return False\n        else:\n            return True\n\n    def update_containers_with(self, addresses, from_mib=None):\n        if addresses:\n            self._logger.debug(\n                \"Found virtual addresses from %s: %r\", from_mib, addresses\n            )\n        for gwp_prefix in self.containers[GwPortPrefix].values():\n            gwp_prefix.virtual = IP(gwp_prefix.gw_ip) in addresses\n"
  },
  {
    "path": "python/nav/ipdevpoll/pool.py",
    "content": "#\n# Copyright (C) 2017, 2020 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Handle sending jobs to worker processes.\"\"\"\n\nimport datetime\nimport os\nimport signal\nimport sys\nimport logging\n\nfrom twisted.protocols import amp\nfrom twisted.internet import reactor, protocol\nfrom twisted.internet.defer import inlineCallbacks\nfrom twisted.internet.endpoints import ProcessEndpoint, StandardIOEndpoint\nimport twisted.internet.endpoints\n\nfrom nav.ipdevpoll.config import ipdevpoll_conf\nfrom . import control, jobs\n\n\ndef initialize_worker():\n    \"\"\"Initializes AMP server for a worker process\"\"\"\n    handler = JobHandler()\n    factory = protocol.Factory()\n    factory.protocol = lambda: ProcessAMP(is_worker=True, locator=handler)\n    StandardIOEndpoint(reactor).listen(factory)\n    return handler\n\n\nclass Cancel(amp.Command):\n    \"\"\"Represent a cancel message for sending to workers\"\"\"\n\n    arguments = [\n        (b'serial', amp.Integer()),\n    ]\n    response = []\n\n\nclass Shutdown(amp.Command):\n    \"\"\"Represent a shutdown message for sending to workers\"\"\"\n\n    arguments = []\n    response = []\n\n\nclass Ping(amp.Command):\n    \"\"\"Represents a ping command for sending to workers\"\"\"\n\n    arguments = []\n    response = [(b'result', amp.Unicode())]\n\n\nclass Job(amp.Command):\n    \"\"\"Represent a job for sending to a worker\"\"\"\n\n    arguments = [\n        (b'netbox', amp.Integer()),\n        (b'job', amp.Unicode()),\n        (b'plugins', amp.ListOf(amp.Unicode())),\n        (b'interval', amp.Integer()),  # Needs to be included in database record.\n        # Not used for scheduling\n        (b'serial', amp.Integer()),  # Serial number needed for cancelling\n    ]\n    response = [(b'result', amp.Boolean()), (b'reschedule', amp.Integer())]\n    errors = {\n        jobs.AbortedJobError: b'AbortedJob',\n    }\n\n\nclass JobHandler(amp.CommandLocator):\n    \"\"\"Resolve actions for jobs received over AMP\"\"\"\n\n    _logger = logging.getLogger(__name__ + '.jobhandler')\n\n    def __init__(self):\n        super(JobHandler, self).__init__()\n        self.jobs = dict()\n        self.done = False\n\n    def job_done(self, result, serial):\n        \"\"\"De-registers a finished job\"\"\"\n        if serial in self.jobs:\n            del self.jobs[serial]\n        if self.done and not self.jobs:\n            reactor.callLater(3, reactor.stop)\n        return result\n\n    @Job.responder\n    def execute_job(self, netbox, job, plugins, interval, serial):\n        \"\"\"Executes a single job, as instructed by the scheduler\"\"\"\n        self._logger.debug(\n            \"Process %s received job %s for netbox %s with plugins %s\",\n            os.getpid(),\n            job,\n            netbox,\n            \",\".join(plugins),\n        )\n        job = jobs.JobHandler(job, netbox, plugins, interval)\n        self.jobs[serial] = job\n        deferred = job.run()\n        deferred.addBoth(self.job_done, serial)\n        deferred.addCallback(lambda x: {'result': x, 'reschedule': 0})\n\n        def handle_reschedule(failure):\n            failure.trap(jobs.SuggestedReschedule)\n            return {'reschedule': failure.value.delay, \"result\": False}\n\n        deferred.addErrback(handle_reschedule)\n        return deferred\n\n    @Cancel.responder\n    def cancel(self, serial):\n        \"\"\"Cancels a running job\"\"\"\n        if serial in self.jobs:\n            self.jobs[serial].cancel()\n        return {}\n\n    @Shutdown.responder\n    def shutdown(self):\n        \"\"\"Shuts down the worker process\"\"\"\n        self.done = True\n        return {}\n\n    @Ping.responder\n    def ping(self):\n        \"\"\"Returns the string \"pong\" as a response to a ping\"\"\"\n        return {\"result\": \"pong\"}\n\n    def log_jobs(self):\n        \"\"\"Logs information about active jobs\"\"\"\n        self._logger.info(\"Got %s active jobs\", len(self.jobs))\n        for job in self.jobs.values():\n            self._logger.info(\"%s %s %s\", job.name, job.netbox, \", \".join(job.plugins))\n\n\nclass ProcessAMP(amp.AMP):\n    \"\"\"Modify AMP protocol to allow running over process pipes\"\"\"\n\n    def __init__(self, is_worker, **kwargs):\n        super(ProcessAMP, self).__init__(**kwargs)\n        self.is_worker = is_worker\n        self.lost_handler = None\n\n    def makeConnection(self, transport):\n        \"\"\"Overrides the base implementation to fake the required getPeer() and\n        getHost() methods on the incoming process transport object, if needed ( the\n        base AMP class was not really designed with process pipe transports in mind,\n        but with IP transports).\n\n        Process transports in Twisted<21 did not implement these methods at all,\n        while in Twisted>=21 they resolve to base methods that raise\n        `NotImplementError`.\n        \"\"\"\n        try:\n            transport.getPeer()\n        except (AttributeError, NotImplementedError):\n            setattr(transport, 'getPeer', lambda: \"peer\")\n\n        try:\n            transport.getHost()\n        except (AttributeError, NotImplementedError):\n            setattr(transport, 'getHost', lambda: \"host\")\n\n        super(ProcessAMP, self).makeConnection(transport)\n\n    def connectionLost(self, reason):\n        \"\"\"Called when a connection to the AMP endpoint has been lost\"\"\"\n        super(ProcessAMP, self).connectionLost(reason)\n        if self.is_worker:\n            if reactor.running:\n                reactor.stop()\n        else:\n            if self.lost_handler:\n                self.lost_handler(self, reason)\n\n\nclass InlinePool(object):\n    \"\"\"This is a dummy worker pool that executes all jobs in the current process\"\"\"\n\n    def __init__(self):\n        self.active_jobs = {}\n\n    def job_done(self, result, deferred):\n        \"\"\"Cancels a running job\"\"\"\n        if deferred in self.active_jobs:\n            del self.active_jobs[deferred]\n        return result\n\n    def execute_job(self, job, netbox, plugins=None, interval=None):\n        \"\"\"Executes a single job, as instructed by the scheduler\"\"\"\n        job = jobs.JobHandler(job, netbox, plugins, interval)\n        deferred = job.run()\n        self.active_jobs[deferred] = job\n        deferred.addBoth(self.job_done, deferred)\n        return deferred\n\n    def cancel(self, deferred):\n        \"\"\"Cancels a running job\"\"\"\n        if deferred in self.active_jobs:\n            self.active_jobs[deferred].cancel()\n\n\nclass Worker(object):\n    \"\"\"This class holds information about one worker process as seen from\n    the worker pool\"\"\"\n\n    _logger = logging.getLogger(__name__ + '.worker')\n\n    def __init__(self, pool, threadpoolsize, max_jobs):\n        self._pid = None\n        self.process = None\n        self.active_jobs = 0\n        self.total_jobs = 0\n        self.max_concurrent_jobs = 0\n        self.pool = pool\n        self.threadpoolsize = threadpoolsize\n        self.max_jobs = max_jobs\n        self.started_at = None\n        self._ping_loop = twisted.internet.task.LoopingCall(\n            self._euthanize_unresponsive_worker,\n            timeout=ipdevpoll_conf.getint(\"multiprocess\", \"ping_timeout\", fallback=10),\n        )\n\n    def __repr__(self):\n        return (\n            \"<Worker pid={pid} ready={ready} active={active} max={max} \"\n            \"total={total} started_at={started_at}>\"\n        ).format(\n            pid=self.pid,\n            ready=not self.done(),\n            active=self.active_jobs,\n            max=self.max_concurrent_jobs,\n            total=self.total_jobs,\n            started_at=self.started_at,\n        )\n\n    @inlineCallbacks\n    def start(self):\n        \"\"\"Starts a new child worker process\"\"\"\n        args = [control.get_process_command(), '--worker', '-f', '-s', '-P']\n        if self.threadpoolsize:\n            args.append('--threadpoolsize=%d' % self.threadpoolsize)\n        endpoint = ProcessEndpoint(\n            reactor, control.get_process_command(), args, os.environ\n        )\n        factory = protocol.Factory()\n        factory.protocol = lambda: ProcessAMP(is_worker=False, locator=JobHandler())\n        self.process = yield endpoint.connect(factory)\n        self.process.lost_handler = self._worker_died\n        self.started_at = datetime.datetime.now()\n        self._logger.debug(\"Started new worker %r\", self)\n\n        if ipdevpoll_conf.getboolean(\"multiprocess\", \"ping_workers\", fallback=True):\n            self._ping_loop.start(\n                interval=ipdevpoll_conf.getint(\n                    \"multiprocess\", \"ping_interval\", fallback=30\n                ),\n                now=False,\n            )\n\n        return self\n\n    @property\n    def pid(self):\n        \"\"\"Returns the PID number of the worker process, if started\"\"\"\n        try:\n            if not self._pid:\n                self._pid = self.process.transport._process.pid\n        except AttributeError:\n            return None\n        return self._pid\n\n    def done(self):\n        \"\"\"Returns True if this worker process will take no more jobs\"\"\"\n        return self.max_jobs and (self.total_jobs >= self.max_jobs)\n\n    def _worker_died(self, _process, _reason):\n        if self._ping_loop.running:\n            self._ping_loop.stop()\n        if not self.done():\n            self._logger.warning(\"Lost worker: %r\", self)\n        elif self.active_jobs:\n            self._logger.warning(\"Exited with active jobs: %r\", self)\n        else:\n            self._logger.debug(\"Exited normally: %r\", self)\n        self.pool.worker_died(self)\n\n    @inlineCallbacks\n    def _euthanize_unresponsive_worker(self, timeout=10):\n        \"\"\"Sends the ping command to the worker. If the ping command does not succeed\n        within the configured timeout, the worker is killed using the SIGTERM signal,\n        under the assumption the process has frozen somehow.\n        \"\"\"\n        is_alive = not self.done()  # assume the best\n        if not self.done():\n            try:\n                is_alive = yield self.responds_to_ping(timeout)\n            except twisted.internet.defer.TimeoutError:\n                self._logger.warning(\"PING: Timed out for %r\", self)\n                is_alive = False\n            except Exception:  # noqa: BLE001\n                self._logger.exception(\n                    \"PING: Unhandled exception while pinging %r\", self\n                )\n                is_alive = None\n\n        # check again; no need to kill worker if its status became 'done'while waiting\n        if not self.done():\n            try:\n                if not is_alive:\n                    self._logger.warning(\n                        \"PING: Not responding, attempting to kill: %r\", self\n                    )\n                    os.kill(self.pid, signal.SIGTERM)\n            except Exception:  # noqa: BLE001\n                self._logger.exception(\n                    \"PING: Ignoring unhandled exception when killing worker %r\", self\n                )\n\n    def execute(self, serial, command, **kwargs):\n        \"\"\"Executes a remote job\"\"\"\n        self.active_jobs += 1\n        self.total_jobs += 1\n        self.max_concurrent_jobs = max(self.active_jobs, self.max_concurrent_jobs)\n        self._logger.debug(\n            \"Dispatching to process %s job %s for netbox %s with plugins %s \"\n            \"(serial=%r)\",\n            self.pid,\n            kwargs.get(\"job\"),\n            kwargs.get(\"netbox\"),\n            \",\".join(kwargs.get(\"plugins\", [])),\n            serial,\n        )\n        deferred = self.process.callRemote(command, serial=serial, **kwargs)\n        if self.done():\n            self.process.callRemote(Shutdown)\n        return deferred\n\n    @inlineCallbacks\n    def responds_to_ping(self, timeout=10):\n        \"\"\"Verifies that this worker is alive.\n\n        :param timeout: The maximum allowable number of seconds for the worker to\n                        respond\n        :type timeout: int\n        :return: A Deferred whose result will be True if the worker process responded\n                 correctly and within the set timeout.\n        \"\"\"\n        self._logger.debug(\"PING: %r\", self)\n        deferred = self.process.callRemote(Ping)\n        response = yield deferred.addTimeout(timeout, clock=reactor)\n        self._logger.debug(\"PING: Response from %r: %r\", self, response)\n        return response.get(\"result\") == \"pong\"\n\n    def cancel(self, serial):\n        \"\"\"Cancels a job running on this worker\"\"\"\n        return self.process.callRemote(Cancel, serial=serial)\n\n\nclass WorkerPool(object):\n    \"\"\"This class represent a pool of worker processes to which jobs can\n    be scheduled\"\"\"\n\n    _logger = logging.getLogger(__name__ + '.workerpool')\n\n    def __init__(self, workers, max_jobs, threadpoolsize=None):\n        twisted.internet.endpoints.log = HackLog\n        self.workers = set()\n        self.target_count = workers\n        self.max_jobs = max_jobs\n        self.threadpoolsize = threadpoolsize\n        for _ in range(self.target_count):\n            self._spawn_worker()\n        self.serial = 0\n        self.jobs = dict()\n\n    def worker_died(self, worker):\n        \"\"\"Called to signal the death of a worker process\"\"\"\n        self.workers.remove(worker)\n        if not worker.done():\n            self._spawn_worker()\n\n    @inlineCallbacks\n    def _spawn_worker(self):\n        worker = yield Worker(self, self.threadpoolsize, self.max_jobs).start()\n        self.workers.add(worker)\n\n    def _cleanup(self, result, deferred):\n        _serial, worker = self.jobs[deferred]\n        del self.jobs[deferred]\n        worker.active_jobs -= 1\n        return result\n\n    def _execute(self, command, **kwargs):\n        ready_workers = [w for w in self.workers if not w.done()]\n        if not ready_workers:\n            raise RuntimeError(\"No ready workers\")\n        worker = min(ready_workers, key=lambda x: x.active_jobs)  # type: Worker\n        self.serial += 1\n        deferred = worker.execute(self.serial, command, **kwargs)\n        if worker.done():\n            self._spawn_worker()\n        self.jobs[deferred] = (self.serial, worker)\n        deferred.addBoth(self._cleanup, deferred)\n        return deferred\n\n    def cancel(self, deferred):\n        \"\"\"Cancels a job running in the pool\"\"\"\n        if deferred not in self.jobs:\n            self._logger.debug(\"Cancelling job that isn't known\")\n            return\n        serial, worker = self.jobs[deferred]\n        return worker.cancel(serial)\n\n    def execute_job(self, job, netbox, plugins=None, interval=None):\n        \"\"\"Executes a single job on an available worker\"\"\"\n        deferred = self._execute(\n            Job, job=job, netbox=netbox, plugins=plugins, interval=interval\n        )\n\n        def handle_reschedule(result):\n            reschedule = result.get('reschedule', 0)\n            if reschedule:\n                raise jobs.SuggestedReschedule(delay=reschedule)\n            return result\n\n        deferred.addCallback(handle_reschedule)\n        deferred.addCallback(lambda x: x['result'])\n        return deferred\n\n    def log_summary(self):\n        \"\"\"Logs a summary of currently running workers\"\"\"\n        self._logger.info(\n            \"%s out of %s workers running\", len(self.workers), self.target_count\n        )\n        for worker in self.workers:\n            self._logger.info(\" - %r\", worker)\n\n\nclass HackLog(object):\n    \"\"\"Used to monkeypatch twisted.endpoints to log worker output the\n    ipdevpoll way\"\"\"\n\n    @staticmethod\n    def msg(data, **_kwargs):\n        \"\"\"Logs a message to STDERR\"\"\"\n        if isinstance(data, bytes):\n            data = data.decode(\"utf-8\")\n        sys.stderr.write(data)\n        sys.stderr.flush()\n"
  },
  {
    "path": "python/nav/ipdevpoll/schedule.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Handle scheduling of polling jobs.\"\"\"\n\nimport logging\nimport datetime\nimport time\nfrom operator import itemgetter\nfrom collections import defaultdict\nfrom random import randint\nfrom math import ceil\n\nfrom django.db.transaction import atomic\nfrom twisted.python.failure import Failure\nfrom twisted.internet import task, reactor\nfrom twisted.internet.defer import Deferred\nfrom twisted.internet.task import LoopingCall\nfrom twisted.python.log import err\n\nfrom nav import ipdevpoll\nfrom nav.ipdevpoll import db\nfrom nav.ipdevpoll.snmp import SnmpError, AgentProxy\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import metric_prefix_for_ipdevpoll_job\nfrom nav.tableformat import SimpleTableFormatter\n\nfrom nav.ipdevpoll.utils import log_unhandled_failure\n\nfrom . import shadows, config, signals\nfrom .dataloader import NetboxLoader\nfrom .db import run_in_thread\nfrom .jobs import JobHandler, AbortedJobError, SuggestedReschedule\nfrom ..models.event import EventQueue\n\n_logger = logging.getLogger(__name__)\n\n\nclass NetboxJobScheduler(object):\n    \"\"\"Netbox job schedule handler.\n\n    An instance of this class takes care of scheduling, running and\n    rescheduling of a single JobHandler for a single netbox.\n\n    \"\"\"\n\n    job_counters = {}\n    job_queues = {}\n    global_job_queue = []\n    global_intensity = config.ipdevpoll_conf.getint('ipdevpoll', 'max_concurrent_jobs')\n    _logger = ipdevpoll.ContextLogger()\n\n    def __init__(self, job, netbox, pool):\n        self.job = job\n        self.netbox = netbox\n        self.pool = pool\n        self._log_context = dict(job=job.name, sysname=netbox.sysname)\n        self._logger.debug(\n            \"initializing %r job scheduling for %s\", job.name, netbox.sysname\n        )\n        self.cancelled = False\n        self._deferred = Deferred()\n        self._next_call = None\n        self._last_job_started_at = 0\n        self.running = False\n        self._start_time = None\n        self._current_job = None\n        self.callLater = reactor.callLater\n\n    def get_current_runtime(self):\n        \"\"\"Returns time elapsed since the start of the job as a timedelta.\"\"\"\n        return datetime.datetime.now() - self._start_time\n\n    def start(self):\n        \"\"\"Start polling schedule.\"\"\"\n        self._next_call = self.callLater(0, self.run_job)\n        return self._deferred\n\n    def cancel(self):\n        \"\"\"Cancel scheduling of this job for this box.\n\n        Future runs will not be scheduled after this.\n\n        \"\"\"\n        if self.cancelled:\n            self._logger.debug(\n                \"cancel: Job %r already cancelled for %s\",\n                self.job.name,\n                self.netbox.sysname,\n            )\n            return\n\n        if self._next_call.active():\n            self._next_call.cancel()\n            self._logger.debug(\n                \"cancel: Job %r cancelled for %s\", self.job.name, self.netbox.sysname\n            )\n        else:\n            self._logger.debug(\n                \"cancel: Job %r cancelled for %s, though no next run was scheduled\",\n                self.job.name,\n                self.netbox.sysname,\n            )\n\n        self.cancelled = True\n        self.cancel_running_job()\n        self._deferred.callback(self)\n\n    def cancel_running_job(self):\n        if self._current_job:\n            self._logger.debug('Cancelling running job')\n            self.pool.cancel(self._current_job)\n\n    def run_job(self, dummy=None):\n        if self.is_running():\n            self._logger.info(\n                \"Previous %r job is still running for %s, not running again now.\",\n                self.job.name,\n                self.netbox.sysname,\n            )\n            return\n\n        if self.is_job_limit_reached():\n            self._logger.debug(\n                \"intensity limit reached for %s - waiting to run for %s\",\n                self.job.name,\n                self.netbox.sysname,\n            )\n            self.queue_myself(self.get_job_queue())\n            return\n\n        if self.is_global_limit_reached():\n            self._logger.debug(\n                \"global intensity limit reached - waiting to run for %s\",\n                self.netbox.sysname,\n            )\n            self.queue_myself(self.global_job_queue)\n            return\n\n        # We're ok to start a polling run.\n        try:\n            self._start_time = datetime.datetime.now()\n            deferred = self.pool.execute_job(\n                self.job.name,\n                self.netbox.id,\n                plugins=self.job.plugins,\n                interval=self.job.interval,\n            )\n            self._current_job = deferred\n        except Exception:  # noqa: BLE001\n            self._log_unhandled_error(Failure())\n            self.reschedule(60)\n            return\n\n        self.count_job()\n        self._last_job_started_at = time.time()\n\n        deferred.addErrback(self._adjust_intensity_on_snmperror)\n        deferred.addCallbacks(self._reschedule_on_success, self._reschedule_on_failure)\n        deferred.addErrback(self._log_unhandled_error)\n\n        deferred.addCallback(self._unregister_handler)\n\n    def is_running(self):\n        return self.running\n\n    @classmethod\n    def _adjust_intensity_on_snmperror(cls, failure):\n        if failure.check(AbortedJobError) and isinstance(\n            failure.value.cause, SnmpError\n        ):\n            open_sessions = AgentProxy.count_open_sessions()\n            new_limit = int(ceil(open_sessions * 0.90))\n            if new_limit < cls.global_intensity:\n                cls._logger.warning(\"Setting global intensity limit to %d\", new_limit)\n                cls.global_intensity = new_limit\n        return failure\n\n    def _update_counters(self, success):\n        prefix = metric_prefix_for_ipdevpoll_job(self.netbox.sysname, self.job.name)\n        counter_path = prefix + (\".success-count\" if success else \".failure-count\")\n        _COUNTERS.increment(counter_path)\n        _COUNTERS.start()\n\n    def _reschedule_on_success(self, result):\n        \"\"\"Reschedules the next normal run of this job.\"\"\"\n        delay = max(0, self.job.interval - self.get_runtime())\n        self.reschedule(delay)\n        if result:\n            self._log_finished_job(True)\n        else:\n            self._logger.debug(\"job did nothing\")\n        self._update_counters(True if result else None)\n        return result\n\n    def _reschedule_on_failure(self, failure):\n        \"\"\"Examines the job failure and reschedules the job if needed.\"\"\"\n        if failure.check(SuggestedReschedule):\n            delay = int(failure.value.delay)\n        else:\n            # within 5-10 minutes, but no longer than set interval\n            delay = min(self.job.interval, randint(5 * 60, 10 * 60))\n        self.reschedule(delay)\n        self._log_finished_job(False)\n        self._update_counters(False)\n        failure.trap(AbortedJobError)\n\n    def _log_finished_job(self, success=True):\n        status = \"completed\" if success else \"failed\"\n        runtime = datetime.timedelta(seconds=self.get_runtime())\n        next_time = self.get_time_to_next_run()\n        if next_time is not None:\n            if next_time <= 0:\n                delta = \"right now\"\n            else:\n                delta = \"in %s\" % datetime.timedelta(seconds=next_time)\n            self._logger.info(\n                \"%s for %s %s in %s. next run %s.\",\n                self.job.name,\n                self.netbox.sysname,\n                status,\n                runtime,\n                delta,\n            )\n        else:\n            self._logger.info(\"%s in %s. no next run scheduled\", status, runtime)\n\n    def get_runtime(self):\n        \"\"\"Returns the number of seconds passed since the start of last job\"\"\"\n        return time.time() - self._last_job_started_at\n\n    def get_time_to_next_run(self):\n        \"\"\"Returns the number of seconds until the next job starts\"\"\"\n        if self._next_call.active():\n            return self._next_call.getTime() - time.time()\n\n    def reschedule(self, delay):\n        \"\"\"Reschedules the next run of of this job\"\"\"\n        if self.cancelled:\n            self._logger.debug(\"ignoring request to reschedule cancelled job\")\n            return\n\n        next_time = datetime.datetime.now() + datetime.timedelta(seconds=delay)\n\n        self._logger.debug(\n            \"Next %r job for %s will be in %d seconds (%s)\",\n            self.job.name,\n            self.netbox.sysname,\n            delay,\n            next_time,\n        )\n\n        if self._next_call.active():\n            self._next_call.reset(delay)\n        else:\n            self._next_call = self.callLater(delay, self.run_job)\n\n    def _log_unhandled_error(self, failure):\n        if not failure.check(db.ResetDBConnectionError):\n            log_unhandled_failure(\n                self._logger, failure, \"Unhandled exception raised by JobHandler\"\n            )\n\n    def _unregister_handler(self, result):\n        \"\"\"Remove a JobHandler from internal data structures.\"\"\"\n        if self.running:\n            self.uncount_job()\n            self.unqueue_next_job()\n            self.unqueue_next_global_job()\n        return result\n\n    def count_job(self):\n        current_count = self.__class__.job_counters.get(self.job.name, 0)\n        current_count += 1\n        self.__class__.job_counters[self.job.name] = current_count\n        self.running = True\n\n    def uncount_job(self):\n        current_count = self.__class__.job_counters.get(self.job.name, 0)\n        current_count -= 1\n        self.__class__.job_counters[self.job.name] = max(current_count, 0)\n        self.running = False\n        self._current_job = None\n\n    def get_job_count(self):\n        return self.__class__.job_counters.get(self.job.name, 0)\n\n    def is_job_limit_reached(self):\n        \"Returns True if the number of jobs >= the job intensity limit\"\n        return self.job.intensity > 0 and self.get_job_count() >= self.job.intensity\n\n    @classmethod\n    def is_global_limit_reached(cls):\n        \"Returns True if the global number of jobs >= global intensity limit\"\n        return cls.get_global_job_count() >= cls.global_intensity\n\n    @classmethod\n    def get_global_job_count(cls):\n        if cls.job_counters:\n            return sum(cls.job_counters.values())\n        else:\n            return 0\n\n    def queue_myself(self, queue):\n        queue.append(self)\n\n    def unqueue_next_job(self):\n        \"Unqueues the next waiting job\"\n        queue = self.get_job_queue()\n        if queue and not self.is_job_limit_reached():\n            handler = queue.pop(0)\n            return handler.start()\n\n    @classmethod\n    def unqueue_next_global_job(cls):\n        \"Unqueues the next job waiting because of the global intensity setting\"\n        if not cls.is_global_limit_reached():\n            for index, handler in enumerate(cls.global_job_queue):\n                if not handler.is_job_limit_reached():\n                    del cls.global_job_queue[index]\n                    return handler.start()\n\n    def get_job_queue(self):\n        if self.job.name not in self.job_queues:\n            self.job_queues[self.job.name] = []\n        return self.job_queues[self.job.name]\n\n\nclass JobScheduler(object):\n    active_schedulers = set()\n    job_logging_loop = None\n    netbox_reload_interval = 2 * 60.0  # seconds\n    netbox_reload_loop = None\n    _logger = ipdevpoll.ContextLogger()\n\n    def __init__(self, job, pool):\n        \"\"\"Initializes a job schedule from the job descriptor.\"\"\"\n        self._log_context = dict(job=job.name)\n        self.job = job\n        self.pool = pool\n        self.netboxes = NetboxLoader()\n        self.active_netboxes: dict[int, NetboxJobScheduler] = {}\n\n        self.active_schedulers.add(self)\n\n    def __repr__(self):\n        return \"<{} job={}>\".format(self.__class__.__name__, self.job.name)\n\n    @classmethod\n    def get_job_schedulers_by_name(cls) -> dict[str, 'JobScheduler']:\n        \"\"\"Returns the names of actively scheduled jobs in this process\"\"\"\n        return {scheduler.job.name: scheduler for scheduler in cls.active_schedulers}\n\n    @classmethod\n    def initialize_from_config_and_run(cls, pool, onlyjob=None):\n        descriptors = config.get_jobs()\n        schedulers = [\n            JobScheduler(d, pool)\n            for d in descriptors\n            if not onlyjob or (d.name == onlyjob)\n        ]\n        for scheduler in schedulers:\n            scheduler.run()\n\n    def run(self):\n        \"\"\"Initiate scheduling of this job.\"\"\"\n        signals.netbox_type_changed.connect(self.on_netbox_type_changed)\n        self._setup_active_job_logging()\n        self._start_netbox_reload_loop()\n\n    def _start_netbox_reload_loop(self):\n        if not self.netbox_reload_loop:\n            self.netbox_reload_loop = task.LoopingCall(self._reload_netboxes)\n        if self.netbox_reload_loop.running:\n            self.netbox_reload_loop.stop()\n\n        def die_on_unhandled_failure(failure):\n            err(failure, \"Unhandled failure in data reload loop, stopping ipdevpoll\")\n            if reactor.running:\n                reactor.callLater(0, reactor.stop)\n\n        deferred = self.netbox_reload_loop.start(\n            interval=self.netbox_reload_interval, now=True\n        )\n        deferred.addErrback(die_on_unhandled_failure)\n\n    def on_netbox_type_changed(self, netbox_id, new_type, **_kwargs):\n        \"\"\"Performs various cleanup and reload actions on a netbox type change\n        signal.\n\n        The netbox' data are cleaned up, and the next netbox data reload is\n        scheduled to take place immediately.\n\n        \"\"\"\n        sysname = (\n            netbox_id in self.netboxes\n            and self.netboxes[netbox_id].sysname\n            or str(netbox_id)\n        )\n        self._logger.info(\"Cancelling all jobs for %s due to type change.\", sysname)\n        self.cancel_netbox_scheduler(netbox_id)\n\n        df = db.run_in_thread(\n            shadows.Netbox.cleanup_replaced_netbox, netbox_id, new_type\n        )\n        return df.addCallback(lambda x: self._start_netbox_reload_loop())\n\n    def _setup_active_job_logging(self):\n        if self.__class__.job_logging_loop is None:\n            loop = task.LoopingCall(self.__class__.log_active_jobs)\n            self.__class__.job_logging_loop = loop\n            loop.start(interval=5 * 60.0, now=False)\n\n    def _reload_netboxes(self):\n        \"\"\"Reload the set of netboxes to poll and update schedules.\"\"\"\n        deferred = self.netboxes.load_all()\n        deferred.addCallbacks(\n            self._process_reloaded_netboxes, self._handle_reload_failures\n        )\n        db.django_debug_cleanup()\n        return deferred\n\n    def _process_reloaded_netboxes(self, result):\n        \"\"\"Process the result of a netbox reload and update schedules.\"\"\"\n        (new_ids, removed_ids, changed_ids) = result\n\n        # Deschedule removed and changed boxes\n        for netbox_id in removed_ids.union(changed_ids):\n            self.cancel_netbox_scheduler(netbox_id)\n\n        # Schedule new and changed boxes\n        def _lastupdated(netboxid):\n            return self.netboxes[netboxid].last_updated.get(\n                self.job.name, datetime.datetime.min\n            )\n\n        new_and_changed = sorted(new_ids.union(changed_ids), key=_lastupdated)\n        for netbox_id in new_and_changed:\n            self.add_netbox_scheduler(netbox_id)\n\n    def _handle_reload_failures(self, failure):\n        failure.trap(db.ResetDBConnectionError)\n        self._logger.error(\n            \"Reloading the IP device list failed because the \"\n            \"database connection was reset\"\n        )\n\n    def add_netbox_scheduler(self, netbox_id):\n        netbox = self.netboxes[netbox_id]\n        scheduler = NetboxJobScheduler(self.job, netbox, self.pool)\n        self.active_netboxes[netbox_id] = scheduler\n        return scheduler.start()\n\n    def cancel_netbox_scheduler(self, netbox_id):\n        if netbox_id not in self.active_netboxes:\n            return\n        scheduler = self.active_netboxes[netbox_id]\n        scheduler.cancel()\n        del self.active_netboxes[netbox_id]\n\n    @classmethod\n    def reload(cls):\n        \"\"\"Reload netboxes for all jobs\"\"\"\n        for scheduler in cls.active_schedulers:\n            scheduler._reload_netboxes()\n\n    @classmethod\n    def log_active_jobs(cls, level=logging.DEBUG):\n        \"\"\"Debug logs a list of running job handlers.\n\n        The handlers will be sorted by descending runtime.\n\n        \"\"\"\n        jobs = [\n            (\n                netbox_scheduler.netbox.sysname,\n                netbox_scheduler.job.name,\n                netbox_scheduler.get_current_runtime(),\n            )\n            for scheduler in cls.active_schedulers\n            for netbox_scheduler in scheduler.active_netboxes.values()\n            if netbox_scheduler.is_running()\n        ]\n        jobs.sort(key=itemgetter(2), reverse=True)\n        table_formatter = SimpleTableFormatter(jobs)\n\n        _logger = logging.getLogger(\"%s.joblist\" % __name__)\n        if jobs:\n            _logger.log(\n                level, \"currently active jobs (%d):\\n%s\", len(jobs), table_formatter\n            )\n        else:\n            _logger.log(\n                level,\n                \"no active jobs (%d JobHandlers)\",\n                JobHandler.get_instance_count(),\n            )\n\n\nclass CounterFlusher(defaultdict):\n    \"\"\"\n    A dictionary of counters that can be incremented and be flushed as\n    Graphite metrics at specific intervals.\n    \"\"\"\n\n    def __init__(self, interval=60):\n        \"\"\"\n        Initialize a dictionary of counters.\n\n        :param interval: How often (in seconds) to flush the counters to\n                         a Carbon backend.\n        \"\"\"\n        super(CounterFlusher, self).__init__(int)\n        self.loop = LoopingCall(self.flush)\n        self.interval = interval\n\n    def start(self):\n        \"\"\"Starts the counter flushing task if it isn't running already\"\"\"\n        if not self.loop.running:\n            self.loop.start(self.interval, now=False)\n\n    def increment(self, name):\n        \"\"\"Increments a named counter by one\"\"\"\n        self[name] += 1\n\n    def flush(self):\n        \"\"\"\n        Flushes all the counters to the Carbon backend and resets them to zero\n        \"\"\"\n        if not self:\n            _logger.debug(\"no counters to flush yet\")\n\n        _logger.debug(\"flushing %d counters to graphite\", len(self))\n        metrics = []\n        timestamp = time.time()\n        for counter, count in self.items():\n            metrics.append((counter, (timestamp, count)))\n            self[counter] = 0\n\n        send_metrics(metrics)\n\n\n_COUNTERS = CounterFlusher()\n\n\ndef handle_incoming_events():\n    \"\"\"Checks the event queue for events addressed to ipdevpoll and handles them\"\"\"\n    # Since this extensively accesses the database, it needs to run in a thread:\n    return run_in_thread(_handle_incoming_events)\n\n\n@atomic\ndef _handle_incoming_events():\n    events = EventQueue.objects.filter(target='ipdevpoll')\n    # Filter out (and potentially delete) events not worthy of our attention\n    events = [event for event in events if _event_pre_filter(event)]\n\n    boxes_to_reschedule = defaultdict(list)\n    # There may be multiple notifications queued for the same request, so group them\n    # by netbox+jobname\n    for event in events:\n        boxes_to_reschedule[(event.netbox_id, event.subid)].append(event)\n    _logger.debug(\"boxes_to_reschedule: %r\", boxes_to_reschedule)\n\n    _reschedule_jobs(boxes_to_reschedule)\n\n\ndef _reschedule_jobs(boxes_to_reschedule: dict[tuple[int, str], list[EventQueue]]):\n    job_schedulers = JobScheduler.get_job_schedulers_by_name()\n    for (netbox_id, job_name), events in boxes_to_reschedule.items():\n        first_event = events[0]\n        job_scheduler = job_schedulers[job_name]\n        netbox_scheduler = job_scheduler.active_netboxes[netbox_id]\n        _logger.info(\n            \"Re-scheduling immediate %s run for %s as requested by %s\",\n            first_event.netbox,\n            job_name,\n            first_event.source,\n        )\n        # Ensure all re-scheduling happens in the main reactor thread:\n        reactor.callFromThread(netbox_scheduler.reschedule, 0)\n        # now we can safely delete all the events\n        for event in events:\n            event.delete()\n\n\ndef _event_pre_filter(event: EventQueue):\n    \"\"\"Returns True if this event is worthy of this process' attention. If the event\n    isn't worthy of *any* ipdevpoll process' attention, we delete it from the database\n    too.\n    \"\"\"\n    _logger.debug(\"Found event on queue: %r\", event)\n    if not _is_valid_refresh_event(event):\n        event.delete()\n        return False\n    if not _is_refresh_event_for_me(event):\n        return False\n    return True\n\n\ndef _is_valid_refresh_event(event: EventQueue) -> bool:\n    \"\"\"Returns True if the event seems to be a valid refresh event for ipdevpoll.\"\"\"\n    if event.event_type_id != 'notification':\n        _logger.info(\"Ignoring non-notification event from %s\", event.source)\n        return False\n\n    if event.subid not in _get_valid_job_names():\n        _logger.info(\n            \"Ignoring notification event from %s with unknown job name %r\",\n            event.source,\n            event.subid,\n        )\n        return False\n\n    return True\n\n\ndef _get_valid_job_names() -> set[str]:\n    \"\"\"Returns a set of job names that exist in the ipdevpoll configuration\"\"\"\n    return set(job.name for job in config.get_jobs())\n\n\ndef _is_refresh_event_for_me(event: EventQueue):\n    schedulers = JobScheduler.get_job_schedulers_by_name()\n    if event.subid not in schedulers:\n        _logger.debug(\n            \"This process does not schedule %s, %r is not for us\", event.subid, event\n        )\n        return False\n\n    if event.netbox_id not in schedulers[event.subid].netboxes:\n        _logger.debug(\n            \"This process does not poll from %s, %r is not for us\", event.netbox, event\n        )\n        return False\n\n    return True\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/__init__.py",
    "content": "#\n# Copyright (C) 2009-2012, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Shadow model classes.\n\nThis module defines Shadow classes for use in ipdevpoll's storage system.  A\nShadow object will mimic a Django model object, but will not be a \"live\nobject\", in the sense that access to member attributes will not result in\ndatabase I/O.\n\n\"\"\"\n\nfrom collections import defaultdict\nimport IPy\n\nfrom django.db.models import Q\n\nfrom nav.models import manage\nfrom nav.event2 import EventFactory\n\nfrom nav.ipdevpoll.storage import MetaShadow, Shadow, shadowify\nfrom nav.ipdevpoll import descrparsers\nfrom nav.ipdevpoll import utils\nfrom nav.oids import get_enterprise_id\n\nfrom .netbox import Netbox\nfrom .interface import Interface, InterfaceStack, InterfaceAggregate\nfrom .swportblocked import SwPortBlocked\nfrom .cam import Cam\nfrom .adjacency import AdjacencyCandidate, UnrecognizedNeighbor\nfrom .entity import NetboxEntity\nfrom .prefix import Prefix\nfrom .gwpeers import GatewayPeerSession\n\n__all__ = [\n    \"NetboxType\",\n    \"NetboxInfo\",\n    \"Vendor\",\n    \"Module\",\n    \"Device\",\n    \"Location\",\n    \"Room\",\n    \"Category\",\n    \"Organization\",\n    \"Usage\",\n    \"Vlan\",\n    \"GwPortPrefix\",\n    \"NetType\",\n    \"SwPortVlan\",\n    \"Arp\",\n    \"SwPortAllowedVlan\",\n    \"Sensor\",\n    \"PowerSupplyOrFan\",\n    \"POEPort\",\n    \"POEGroup\",\n    \"Interface\",\n    \"InterfaceStack\",\n    \"InterfaceAggregate\",\n    \"SwPortBlocked\",\n    \"Cam\",\n    \"AdjacencyCandidate\",\n    \"UnrecognizedNeighbor\",\n    \"NetboxEntity\",\n    \"GatewayPeerSession\",\n]\n\n# Shadow classes.  Not all of these will be used to store data, but\n# may be used to retrieve and cache existing database records.\n\n\nALERT_TYPE_MAPPING = {\n    \"hardware_version\": \"deviceHwUpgrade\",\n    \"software_version\": \"deviceSwUpgrade\",\n    \"firmware_version\": \"deviceFwUpgrade\",\n}\ndevice_event = EventFactory('ipdevpoll', 'eventEngine', 'deviceState')\n\n\nclass NetboxType(Shadow):\n    __shadowclass__ = manage.NetboxType\n    __lookups__ = ['sysobjectid']\n\n    def get_enterprise_id(self):\n        \"\"\"Returns the type's enterprise ID as an integer.\n\n        The type's sysobjectid should always start with\n        SNMPv2-SMI::enterprises (1.3.6.1.4.1).  The next OID element will be\n        an enterprise ID, while the remaining elements will describe the type\n        specific to the vendor.\n\n        :returns: A long integer if the type has a valid enterprise id, None\n                  otherwise.\n\n        \"\"\"\n        try:\n            return get_enterprise_id(self.sysobjectid)\n        except ValueError:\n            return None\n\n\nclass NetboxInfo(Shadow):\n    __shadowclass__ = manage.NetboxInfo\n    __lookups__ = [('netbox', 'key', 'variable')]\n\n    @classmethod\n    def get_dependencies(cls):\n        \"\"\"Fakes a dependency to all Shadow subclasses.\n\n        We do this to ensure NetboxInfo is always the last table to be updated\n        by a job.\n\n        Often, this table is used to store timestamps of successful jobs, but\n        with no other real dependencies than Netbox it would be saved before\n        most of the other container objects are saved. Since not all the data\n        is stored in a single transaction, storing timestamps in NetboxInfo\n        may indicate a success where there was in reality a failure due to a\n        database problem that occurred after NetboxInfo was updated.\n\n        \"\"\"\n\n        return MetaShadow.shadowed_classes.values()\n\n\nclass Vendor(Shadow):\n    __shadowclass__ = manage.Vendor\n\n\nclass Module(Shadow):\n    __shadowclass__ = manage.Module\n    __lookups__ = [('netbox', 'device'), ('netbox', 'name')]\n    event = EventFactory('ipdevpoll', 'eventEngine', 'moduleState')\n\n    def __init__(self, *args, **kwargs):\n        super(Module, self).__init__(*args, **kwargs)\n        self.is_new = None\n\n    @classmethod\n    def prepare_for_save(cls, containers):\n        cls._resolve_actual_duplicate_names(containers)\n        return super(Module, cls).prepare_for_save(containers)\n\n    @classmethod\n    def _resolve_actual_duplicate_names(cls, containers):\n        \"\"\"Attempts to resolve an issue where multiple collected modules are\n        reported as having the same name, by adding the module's serial number\n        to its name before it's stored into the db.\n\n        This may happen in some devices, but is not supported by NAV's data\n        model.\n\n        \"\"\"\n        if cls not in containers:\n            return\n\n        by_name = defaultdict(list)\n        for module in containers[cls].values():\n            by_name[module.name].append(module)\n        duped = [name for name in by_name if len(by_name[name]) > 1]\n        for name in duped:\n            cls._logger.warning(\n                \"Device reports %d modules by the name %r\", len(by_name[name]), name\n            )\n            for module in by_name[name]:\n                serial = module.device.serial if module.device else None\n                if serial:\n                    module.name = '{} ({})'.format(name, serial)\n\n    def prepare(self, containers):\n        self._fix_binary_garbage()\n        self._fix_missing_name()\n        self._resolve_duplicate_names()\n        self.is_new = not self.get_existing_model()\n\n    def _fix_binary_garbage(self):\n        \"\"\"Fixes string attributes that appear as binary garbage.\"\"\"\n\n        if utils.is_invalid_database_string(self.model):\n            self._logger.warning(\"Invalid value for model: %r\", self.model)\n            self.model = repr(self.model)\n\n    def _fix_missing_name(self):\n        if not self.name and self.device and self.device.serial:\n            self.name = \"S/N %s\" % self.device.serial\n\n    def _resolve_duplicate_names(self):\n        \"\"\"Attempts to solve module naming conflicts inside the same chassis.\n\n        If two modules physically switch slots in a chassis, they will be\n        recognized by their serial numbers, but their names will likely be\n        swapped.\n\n        Module names must be unique within a chassis, so if another module on\n        this netbox has the same name as us, we need to do something about the\n        other module's name before our own to avoid a database integrity\n        error.\n\n        \"\"\"\n        other = self._find_name_duplicates()\n        if other:\n            self._logger.warning(\n                \"modules appear to have been swapped inside same chassis (%s): \"\n                \"%s (%s) <-> %s (%s)\",\n                other.netbox.sysname,\n                self.name,\n                self.device.serial,\n                other.name,\n                other.device.serial,\n            )\n\n            other.name = \"%s (%s)\" % (other.name, other.device.serial)\n            other.save()\n\n    def _find_name_duplicates(self):\n        myself_in_db = self.get_existing_model()\n\n        same_name_modules = manage.Module.objects.filter(\n            netbox__id=self.netbox.id, name=self.name\n        )\n\n        if myself_in_db:\n            same_name_modules = same_name_modules.exclude(id=myself_in_db.id)\n\n        other = same_name_modules.select_related('device', 'netbox')\n\n        return other[0] if other else None\n\n    @classmethod\n    def _handle_missing_modules(cls, containers):\n        \"\"\"Handles modules that have gone missing from a device.\"\"\"\n        netbox = containers.get(None, Netbox)\n        all_modules = manage.Module.objects.filter(netbox__id=netbox.id)\n        modules_up = all_modules.filter(up=manage.Module.UP_UP)\n        modules_down = all_modules.filter(up=manage.Module.UP_DOWN)\n\n        collected_modules = containers[Module].values()\n        collected_module_pks = [m.id for m in collected_modules if m.id]\n\n        missing_modules = modules_up.exclude(id__in=collected_module_pks)\n        reappeared_modules = modules_down.filter(id__in=collected_module_pks)\n\n        if missing_modules:\n            shortlist = \", \".join(m.name for m in missing_modules)\n            cls._logger.info(\n                \"%d modules went missing on %s (%s)\",\n                netbox.sysname,\n                len(missing_modules),\n                shortlist,\n            )\n            for module in missing_modules:\n                cls.event.start(module.device, module.netbox, module.id).save()\n\n        if reappeared_modules:\n            shortlist = \", \".join(m.name for m in reappeared_modules)\n            cls._logger.info(\n                \"%d modules reappeared on %s (%s)\",\n                netbox.sysname,\n                len(reappeared_modules),\n                shortlist,\n            )\n            for module in reappeared_modules:\n                cls.event.end(module.device, module.netbox, module.id).save()\n\n    def cleanup(self, containers):\n        self._handle_new_module()\n\n    def _handle_new_module(self):\n        if not self.is_new:\n            return\n        module = self.get_existing_model()\n        # If a module is also registered as a chassis, then avoid duplicate\n        # events and let NetboxEntity handle it. This should not really happen,\n        # but its possible if the standard MIBs detects something as a module\n        # and proprietary MIBs detect the same thing as a chassis.\n        if not module.get_entity().is_chassis() and module.device.serial:\n            device_event.notify(\n                device=module.device,\n                netbox=module.netbox,\n                alert_type='deviceNewModule',\n            ).save()\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        cls._handle_missing_modules(containers)\n        super(Module, cls).cleanup_after_save(containers)\n\n\nclass Device(Shadow):\n    __shadowclass__ = manage.Device\n    __lookups__ = ['serial']\n    event = EventFactory('ipdevpoll', 'eventEngine', 'deviceNotice')\n\n    def __init__(self, *args, **kwargs):\n        super(Device, self).__init__(*args, **kwargs)\n        self.changed_versions = {}\n\n    def prepare(self, containers):\n        self._fix_binary_garbage()\n        self._detect_version_changes()\n\n    def _fix_binary_garbage(self):\n        \"\"\"Fixes version strings that appear as binary garbage.\"\"\"\n\n        for attr in (\n            'hardware_version',\n            'software_version',\n            'firmware_version',\n            'serial',\n        ):\n            value = getattr(self, attr)\n            if utils.is_invalid_database_string(value):\n                self._logger.warning(\"Invalid value for %s: %r\", attr, value)\n                setattr(self, attr, repr(value))\n        self.clear_cached_objects()\n\n    def _detect_version_changes(self):\n        \"\"\"\n        Detects if the software, hardware or firmware version changed for each device.\n\n        Saves this information in changed_versions in the Device instance.\n        \"\"\"\n        old_device = self.get_existing_model()\n        if old_device:\n            changed_versions = set(self.get_diff_attrs(old_device)).intersection(\n                (\n                    'hardware_version',\n                    'software_version',\n                    'firmware_version',\n                )\n            )\n            for version in changed_versions:\n                self.changed_versions[version] = (\n                    getattr(old_device, version),\n                    getattr(self, version),\n                )\n\n    def cleanup(self, containers):\n        if self.changed_versions:\n            self._post_events_version_changes(containers)\n\n    def _post_events_version_changes(self, containers):\n        \"\"\"Posts events for software, hardware or firmware changes.\"\"\"\n        device = self.get_existing_model()\n        for alert_type, (old_version, new_version) in self.changed_versions.items():\n            self.event.notify(\n                device=device,\n                netbox=containers.get(None, Netbox).get_existing_model(),\n                alert_type=ALERT_TYPE_MAPPING[alert_type],\n                varmap={\n                    \"old_version\": old_version if old_version else \"N/A\",\n                    \"new_version\": new_version if new_version else \"N/A\",\n                },\n            ).save()\n\n\nclass Location(Shadow):\n    __shadowclass__ = manage.Location\n\n\nclass Room(Shadow):\n    __shadowclass__ = manage.Room\n\n\nclass Category(Shadow):\n    __shadowclass__ = manage.Category\n\n\nclass Organization(Shadow):\n    __shadowclass__ = manage.Organization\n\n\nclass Usage(Shadow):\n    __shadowclass__ = manage.Usage\n\n\nclass Vlan(Shadow):\n    __shadowclass__ = manage.Vlan\n\n    def prepare(self, containers):\n        \"\"\"Prepares this VLAN object for saving.\n\n        The data stored in a VLAN object consists much of what can be found\n        from other objects, such as interfaces and prefixes, so the logic in\n        here can become rather involved.\n\n        \"\"\"\n        if not self.net_type or self.net_type.id == 'unknown':\n            net_type = self._guesstimate_net_type(containers)\n            if net_type:\n                self.net_type = net_type\n\n    def save(self, containers):\n        if self._revert_vlan_on_type_change_to_scope(\n            containers\n        ) or self._is_type_changed_to_static(containers):\n            return\n\n        self._ignore_unknown_organizations()\n        self._ignore_unknown_usages()\n\n        super(Vlan, self).save(containers)\n\n    def get_existing_model(self, containers=None):\n        \"\"\"Finds pre-existing Vlan object using custom logic.\n\n        This is complicated because of the relationship between Prefix and\n        Vlan, and the fact that multiple vlans with the same vlan number may\n        exist, and even Vlan entries without a number.\n\n        If we have a known netident and find an existing record with the same\n        vlan value (either a number or NULL) and netident, they are considered\n        the same.\n\n        Otherwise, we consider the prefixes that are associated with this vlan.\n        If these prefixes already exist in the database, they are likely\n        connected to the existing vlan object that we should update.\n\n        If all else fails, a new record is created.\n\n        \"\"\"\n        # Only lookup if primary key isn't already set.\n        if self.id:\n            return super(Vlan, self).get_existing_model(containers)\n\n        if self.net_ident:\n            if self.netbox:\n                netboxid = self.netbox.id\n            else:\n                netboxid = None\n            vlans = manage.Vlan.objects.filter(\n                vlan=self.vlan, net_ident=self.net_ident, netbox__id=netboxid\n            )\n            if vlans:\n                self._logger.debug(\n                    \"get_existing_model: %d matches found for vlan+net_ident: %r\",\n                    len(vlans),\n                    self,\n                )\n                return vlans[0]\n\n        vlan = self._get_vlan_from_my_prefixes(containers)\n        if vlan:\n            # Only reuse the existing Vlan object if lacks essential identifiers\n            if vlan.vlan is None or (vlan.vlan == self.vlan and not self.net_ident):\n                return vlan\n\n    def _has_no_prefixes(self, containers):\n        prefixes = self._get_my_prefixes(containers)\n        if not prefixes:\n            self._logger.debug(\"no associated prefixes, not saving: %r\", self)\n            return True\n\n    def _revert_vlan_on_type_change_to_scope(self, containers):\n        mdl = self.get_existing_model(containers)\n        if mdl and mdl.net_type_id == 'scope':\n            prefixes = self._get_my_prefixes(containers)\n            self._logger.warning(\n                \"some interface claims to be on a scope \"\n                \"prefix, not changing vlan details. attached \"\n                \"prefixes: %r\",\n                [pfx.net_address for pfx in prefixes],\n            )\n            for pfx in prefixes:\n                pfx.vlan = mdl\n            return True\n\n    def _is_type_changed_to_static(self, containers):\n        mdl = self.get_existing_model(containers)\n        if mdl and mdl.net_type_id != 'static' and self.net_type.id == 'static':\n            self._logger.info(\n                \"will not change vlan %r type from %s to static\",\n                self.net_ident,\n                mdl.net_type_id,\n            )\n            return True\n\n    def _ignore_unknown_organizations(self):\n        if self.organization and not self.organization.get_existing_model():\n            self._logger.warning(\n                \"ignoring unknown organization id %r\", self.organization.id\n            )\n            self.organization = None\n\n    def _ignore_unknown_usages(self):\n        if self.usage and not self.usage.get_existing_model():\n            self._logger.warning(\"ignoring unknown usage id %r\", self.usage.id)\n            self.usage = None\n\n    def _get_my_prefixes(self, containers):\n        \"\"\"Get a list of Prefix shadow objects that point to this Vlan.\"\"\"\n        if Prefix in containers:\n            all_prefixes = containers[Prefix].values()\n            my_prefixes = [prefix for prefix in all_prefixes if prefix.vlan is self]\n            return my_prefixes\n        else:\n            return []\n\n    def _get_vlan_from_my_prefixes(self, containers):\n        \"\"\"Find and return an existing vlan any shadow prefix object pointing\n        to this Vlan.\n\n        \"\"\"\n        my_prefixes = self._get_my_prefixes(containers)\n        for prefix in my_prefixes:\n            live_prefix = prefix.get_existing_model()\n            if live_prefix and live_prefix.vlan_id:\n                # We just care about the first associated prefix we found\n                self._logger.debug(\n                    \"_get_vlan_from_my_prefixes: selected prefix \"\n                    \"%s for possible vlan match for %r (%s), \"\n                    \"pre-existing is %r\",\n                    live_prefix.net_address,\n                    self,\n                    id(self),\n                    live_prefix.vlan,\n                )\n                return live_prefix.vlan\n\n    def _log_if_multiple_prefixes(self, prefix_containers):\n        if len(prefix_containers) > 1:\n            self._logger.debug(\n                \"multiple prefixes for %r: %r\",\n                self,\n                [p.net_address for p in prefix_containers],\n            )\n\n    def _guesstimate_net_type(self, containers):\n        \"\"\"Guesstimates a net type for this VLAN, based on its prefixes.\n\n        Various algorithms may be used (and the database may be queried).\n\n        Returns:\n\n          A NetType storage container, suitable for assignment to\n          Vlan.net_type.\n\n        \"\"\"\n        prefix_containers = self._get_my_prefixes(containers)\n        self._log_if_multiple_prefixes(prefix_containers)\n\n        if prefix_containers:\n            # prioritize ipv4 prefixes, as the netmasks are more revealing\n            prefix_containers.sort(key=lambda p: IPy.IP(p.net_address).version())\n            prefix = IPy.IP(prefix_containers[0].net_address)\n        else:\n            return NetType.get('unknown')\n\n        netbox = containers.get(None, Netbox)\n        net_type = 'lan'\n        router_count = self._get_router_count_for_prefix(prefix, netbox.id)\n        has_virtual_addrs = self._get_virtual_address_count(prefix) > 0\n\n        if prefix.version() == 6 and prefix.prefixlen() == 128:\n            net_type = 'loopback'\n        elif prefix.version() == 4:\n            if prefix.prefixlen() == 32:\n                net_type = 'loopback'\n            elif prefix.prefixlen() in (30, 31):\n                net_type = 'elink' if router_count == 1 else 'link'\n        if not has_virtual_addrs:\n            if router_count > 2:\n                net_type = 'core'\n            elif router_count == 2:\n                net_type = 'link'\n\n        self._logger.debug(\n            \"_guesstimate_net_type: %r -> %r (router_count=%r has_virtual_addrs=%r)\",\n            prefix,\n            net_type,\n            router_count,\n            has_virtual_addrs,\n        )\n        return NetType.get(net_type)\n\n    @staticmethod\n    def _get_router_count_for_prefix(net_address, include_netboxid=None):\n        \"\"\"Returns the number of routers attached to a prefix.\n\n        :param net_address: a prefix network address\n        :param include_netboxid: count the netbox with this id as a router for\n                                 the prefix, no matter what the db might say\n                                 about it.\n        :returns: an integer count of routers for `net_address`\n\n        \"\"\"\n        address_filter = Q(\n            interfaces__gwport_prefixes__prefix__net_address=str(net_address)\n        )\n        if include_netboxid:\n            address_filter = address_filter | Q(id=include_netboxid)\n\n        router_count = manage.Netbox.objects.filter(\n            address_filter, category__id__in=('GW', 'GSW')\n        )\n        return router_count.distinct().count()\n\n    @staticmethod\n    def _get_virtual_address_count(net_address):\n        \"\"\"Returns the number of virtual router port addresses attached to a prefix.\n        If there are any virtual addresses, this indicates the network has some sort of\n        redundancy, either HSRP or VRRP.\n\n        :param net_address: a prefix network address\n        :returns: an integer count of virtual gwportprefixes\n\n        \"\"\"\n        virtual_addresses = manage.GwPortPrefix.objects.filter(\n            prefix__net_address=str(net_address),\n            virtual=True,\n        )\n        return virtual_addresses.distinct().count()\n\n\nclass GwPortPrefix(Shadow):\n    __shadowclass__ = manage.GwPortPrefix\n    __lookups__ = ['gw_ip']\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        cls._delete_missing_addresses(containers)\n\n    @classmethod\n    def _delete_missing_addresses(cls, containers):\n        missing_addresses = cls._get_missing_addresses(containers)\n        gwips = [row['gw_ip'] for row in missing_addresses.values('gw_ip')]\n        if not gwips:\n            return\n\n        netbox = containers.get(None, Netbox).get_existing_model()\n        cls._logger.info(\n            \"deleting %d missing addresses from %s: %s\",\n            len(gwips),\n            netbox.sysname,\n            \", \".join(gwips),\n        )\n\n        missing_addresses.delete()\n\n    @classmethod\n    def _get_missing_addresses(cls, containers):\n        found_addresses = [g.gw_ip for g in containers[cls].values()]\n        netbox = containers.get(None, Netbox).get_existing_model()\n        missing_addresses = manage.GwPortPrefix.objects.filter(\n            interface__netbox=netbox\n        ).exclude(gw_ip__in=found_addresses)\n        return missing_addresses\n\n    def _parse_description(self, containers):\n        \"\"\"Parses router port descriptions to find a suitable Organization,\n        netident, usageid and description for this vlan.\n\n        \"\"\"\n        if not self._are_description_variables_present():\n            return\n\n        data = self._parse_description_with_all_parsers()\n        if not data:\n            self._logger.debug(\n                \"ifalias did not match any known router port \"\n                \"description conventions: %s\",\n                self.interface.ifalias,\n            )\n            self.prefix.vlan.netident = self.interface.ifalias\n            return\n\n        self._update_with_parsed_description_data(data, containers)\n\n    def _are_description_variables_present(self):\n        return (\n            self.interface\n            and self.interface.netbox\n            and self.interface.ifalias\n            and self.prefix\n            and self.prefix.vlan\n        )\n\n    def _parse_description_with_all_parsers(self):\n        for parse in (\n            descrparsers.parse_ntnu_convention,\n            descrparsers.parse_uninett_convention,\n        ):\n            data = parse(self.interface.netbox.sysname, self.interface.ifalias)\n            if data:\n                return data\n\n    def _update_with_parsed_description_data(self, data, containers):\n        vlan = self.prefix.vlan\n        if data.get('net_type', None):\n            vlan.net_type = NetType.get(data['net_type'].lower())\n        if data.get('netident', None):\n            vlan.net_ident = data['netident']\n        if data.get('usage', None):\n            vlan.usage = containers.factory(data['usage'], Usage)\n            vlan.usage.id = data['usage']\n        if data.get('comment', None):\n            vlan.description = data['comment']\n        if data.get('org', None):\n            vlan.organization = containers.factory(data['org'], Organization)\n            vlan.organization.id = data['org']\n        if data.get('vlan'):\n            vlan.vlan = data['vlan']\n            self._logger.info(\n                \"forcing vlan tag of %s to %s by description convention\",\n                self.prefix.net_address,\n                vlan.vlan,\n            )\n\n    def prepare(self, containers):\n        self._parse_description(containers)\n\n\nclass NetType(Shadow):\n    __shadowclass__ = manage.NetType\n\n    @classmethod\n    def get(cls, net_type_id):\n        \"\"\"Creates a NetType container for the given net_type id.\"\"\"\n        ntype = cls()\n        ntype.id = net_type_id\n        return ntype\n\n\nclass SwPortVlan(Shadow):\n    __shadowclass__ = manage.SwPortVlan\n\n\nclass Arp(Shadow):\n    __shadowclass__ = manage.Arp\n\n    def save(self, containers):\n        if not self.id:\n            return super(Arp, self).save(containers)\n\n        attrs = dict(\n            (attr, getattr(self, attr)) for attr in self.get_touched() if attr != 'id'\n        )\n        if attrs:\n            myself = manage.Arp.objects.filter(id=self.id)\n            myself.update(**attrs)\n\n\nclass SwPortAllowedVlan(Shadow):\n    __shadowclass__ = manage.SwPortAllowedVlan\n    __lookups__ = ['interface']\n\n\nclass Sensor(Shadow):\n    __shadowclass__ = manage.Sensor\n    __lookups__ = [('netbox', 'internal_name', 'mib')]\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        cls._delete_missing_sensors(containers)\n\n    @classmethod\n    def _delete_missing_sensors(cls, containers):\n        missing_sensors = cls._get_missing_sensors(containers)\n        sensor_names = [\n            row['internal_name'] for row in missing_sensors.values('internal_name')\n        ]\n        if not missing_sensors:\n            return\n        netbox = containers.get(None, Netbox)\n        cls._logger.debug(\n            'Deleting %d missing sensors from %s: %s',\n            len(sensor_names),\n            netbox.sysname,\n            \", \".join(sensor_names),\n        )\n        missing_sensors.delete()\n\n    @classmethod\n    def _get_missing_sensors(cls, containers):\n        found_sensor_pks = [sensor.id for sensor in containers[cls].values()]\n        netbox = containers.get(None, Netbox)\n        missing_sensors = manage.Sensor.objects.filter(netbox=netbox.id).exclude(\n            pk__in=found_sensor_pks\n        )\n        return missing_sensors\n\n    def prepare(self, containers):\n        if self.interface:\n            if self.name:\n                self.name = self.name.format(ifc=self.interface.ifname)\n            if self.human_readable:\n                self.human_readable = self.human_readable.format(\n                    ifc=self.interface.ifdescr\n                )\n            if self.internal_name:\n                self.internal_name = self.internal_name.format(\n                    ifc=self.interface.ifname\n                )\n\n\nclass PowerSupplyOrFan(Shadow):\n    __shadowclass__ = manage.PowerSupplyOrFan\n    __lookups__ = [('netbox', 'name')]\n\n    def __init__(self, *args, **kwargs):\n        super(PowerSupplyOrFan, self).__init__(*args, **kwargs)\n        self.is_new = None\n\n    def prepare(self, containers):\n        self.is_new = not self.get_existing_model()\n        # Set a default value of UNKNOWN if this is a new object\n        if self.is_new and self.up is None:\n            self.up = manage.PowerSupplyOrFan.STATE_UNKNOWN\n\n    def cleanup(self, containers):\n        self._handle_new_psu_or_fan()\n\n    def _handle_new_psu_or_fan(self):\n        if not self.is_new:\n            return\n        psufan = self.get_existing_model()\n        # Device not existing seems to be an issue exclusive to PowerSupplyOrFan objects\n        try:\n            if psufan.device.serial:\n                device_event.notify(\n                    device=psufan.device,\n                    netbox=psufan.netbox,\n                    alert_type=\"deviceNewPsu\" if psufan.is_psu() else \"deviceNewFan\",\n                ).save()\n        except manage.Device.DoesNotExist:\n            return\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        cls._delete_missing_psus_and_fans(containers)\n        super(PowerSupplyOrFan, cls).cleanup_after_save(containers)\n\n    @classmethod\n    def _delete_missing_psus_and_fans(cls, containers):\n        missing_psus_and_fans = cls._get_missing_psus_and_fans(containers)\n        psu_and_fan_names = [\n            row['name'] for row in missing_psus_and_fans.values('name')\n        ]\n        if not missing_psus_and_fans:\n            return\n        netbox = containers.get(None, Netbox)\n        cls._logger.debug(\n            'Deleting %d missing psus and fans from %s: %s',\n            len(psu_and_fan_names),\n            netbox.sysname,\n            \", \".join(psu_and_fan_names),\n        )\n        cls._alert_missing_devices_are_deleted(missing_psus_and_fans)\n        missing_psus_and_fans.delete()\n\n    @classmethod\n    def _get_missing_psus_and_fans(cls, containers):\n        found_psus_and_fans_pks = [psu_fan.id for psu_fan in containers[cls].values()]\n        netbox = containers.get(None, Netbox)\n        missing_psus_and_fans = manage.PowerSupplyOrFan.objects.filter(\n            netbox=netbox.id\n        ).exclude(pk__in=found_psus_and_fans_pks)\n        return missing_psus_and_fans\n\n    @classmethod\n    def _alert_missing_devices_are_deleted(cls, deleted_psus_and_fans):\n        for psufan in deleted_psus_and_fans:\n            try:\n                if psufan.device.serial:\n                    device_event.notify(\n                        device=psufan.device,\n                        netbox=psufan.netbox,\n                        alert_type=(\n                            \"deviceDeletedPsu\"\n                            if psufan.is_psu()\n                            else \"deviceDeletedFan\"\n                        ),\n                    ).save()\n            except manage.Device.DoesNotExist:\n                pass\n\n\nclass POEPort(Shadow):\n    __shadowclass__ = manage.POEPort\n    __lookups__ = [('netbox', 'poegroup', 'index')]\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        found = [port.id for port in containers[cls].values()]\n        netbox = containers.get(None, Netbox)\n        manage.POEPort.objects.filter(netbox=netbox.id).exclude(pk__in=found).delete()\n\n\nclass POEGroup(Shadow):\n    __shadowclass__ = manage.POEGroup\n    __lookups__ = [('netbox', 'index')]\n    phy_index = None\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        found = [grp.id for grp in containers[cls].values()]\n        netbox = containers.get(None, Netbox)\n        manage.POEGroup.objects.filter(netbox=netbox.id).exclude(pk__in=found).delete()\n\n    def prepare(self, containers):\n        if self.phy_index and not self.module:\n            entity = manage.NetboxEntity.objects.filter(\n                netbox=self.netbox.id, index=self.phy_index\n            ).first()\n            if entity and entity.device:\n                self.module = entity.device.modules.first()\n        vendor = self.netbox.type.vendor.id if self.netbox.type else ''\n        if vendor == 'hp' and not self.module:\n            module = manage.Module.objects.filter(\n                netbox=self.netbox.id,\n                name=chr(ord('A') + self.index - 1),\n            ).first()\n            if module:\n                self.module = shadowify(module)\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/adjacency.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"adjacency candidate storage and handling.\n\nAbout sources\n-------------\n\nEach record has a source; typical sources are 'lldp', 'cam' and 'cdp'.\n\nRecord expiry\n-------------\n\nA database record that is not in the ContainerRepository will have its\nmiss_count incremented.  Any record whose miss_count >= MAX_MISS_COUNT will be\ndeleted from the database.\n\nThe AdjacencyManager will make note of which sources placed records in the\nContainerRepository.  If only the lldp collector plugin ran, records that came\nfrom other sources will _NOT_ be targets of the expiration algorithm.\n\nA collector plugin that found no records should place a sentinel record in the\nContainerRepository, to ensure that pre-existing database records from the\nsame source are expired properly.\n\nSentinels\n---------\n\nA sentinel record is an AdjacencyCandidate or UnrecognizedNeighbor instance whose\ninterface attribute is None, and whose source attribute is a non-empty string.\n\n\"\"\"\n\nfrom nav.models import manage\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\nfrom nav.ipdevpoll.utils import is_invalid_database_string\nfrom .netbox import Netbox\n\nMAX_MISS_COUNT = 3\n\n\nclass AdjacencyManager(DefaultManager):\n    \"Manages AdjacencyCandidate records\"\n\n    _existing = None\n    _missing = None\n    _sources = None\n\n    def __init__(self, *args, **kwargs):\n        super(AdjacencyManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n\n    def prepare(self):\n        self._load_existing()\n        self._map_existing()\n\n    def _load_existing(self):\n        candidates = manage.AdjacencyCandidate.objects.filter(netbox__id=self.netbox.id)\n        self._existing = dict((candidate_key(c), c) for c in candidates)\n\n    def _map_existing(self):\n        found = dict((candidate_key(c), c) for c in self.get_managed())\n        self._sources = set()\n        for key, cand in found.items():\n            if key in self._existing:\n                cand.set_existing_model(self._existing[key])\n                # always reset miss_count of found records\n                cand.miss_count = 0\n            if cand.source:\n                self._sources.add(cand.source)\n\n        missing = set(self._existing.keys()).difference(found)\n        self._missing = [\n            self._existing[key]\n            for key in missing\n            if self._existing[key].source in self._sources\n        ]\n\n        self._logger.debug(\"existing: %r\", self._existing)\n        self._logger.debug(\"missing: %r\", self._missing)\n        self._logger.debug(\"sources: %r\", self._sources)\n\n    def cleanup(self):\n        self._handle_missing()\n        self._delete_expired()\n\n    def _handle_missing(self):\n        \"\"\"Increments the miss_count of each missing adjacency candidate.\n\n        Will only increment the counter for candidates that came from a source\n        that found any records at all during this collection run.  I.e. if the\n        cam collector ran, but not the lldp collector, we shouldn't consider\n        lldp candidates to be missing.\n\n        \"\"\"\n        missing = (c for c in self._missing if c.source in self._sources)\n        for cand in missing:\n            db_cand = manage.AdjacencyCandidate.objects.filter(id=cand.id)\n            db_cand.update(miss_count=cand.miss_count + 1)\n\n    def _delete_expired(self):\n        expired = manage.AdjacencyCandidate.objects.filter(\n            netbox__id=self.netbox.id, miss_count__gte=MAX_MISS_COUNT\n        )\n        expired.delete()\n\n\nclass AdjacencyCandidate(Shadow):\n    __shadowclass__ = manage.AdjacencyCandidate\n    manager = AdjacencyManager\n\n    def get_existing_model(self, containers=None):\n        \"Returns only a cached object, if available\"\n        return getattr(self, '_cached_existing_model', None)\n\n    def save(self, containers=None):\n        \"Does nothing if this is a sentinel object\"\n        if self.interface:\n            return super(AdjacencyCandidate, self).save(containers)\n\n    @classmethod\n    def sentinel(cls, containers, source):\n        \"\"\"Creates or returns existing sentinel for source in containers.\n\n        :param containers: A ContainerRepository.\n        :param source: A source identifier string, e.g. 'lldp', 'cam', 'cdp',\n                       etc.\n\n        \"\"\"\n        candidate = containers.factory(source, cls)\n        candidate.source = source\n        return candidate\n\n\ndef candidate_key(cand):\n    \"return a (hopefully) unique dict key for a candidate object\"\n    # all this getattr yaking is trying to reduce the number of db fetches\n    return (\n        (getattr(cand, 'interface_id', None) or (cand.interface and cand.interface.id)),\n        (getattr(cand, 'to_netbox_id', None) or (cand.to_netbox and cand.to_netbox.id)),\n        (\n            getattr(cand, 'to_interface_id', None)\n            or (cand.to_interface and cand.to_interface.id)\n        ),\n        cand.source,\n    )\n\n\nclass UnrecognizedNeighborManager(DefaultManager):\n    \"\"\"Manager for UnrecognizedNeighbor entries\"\"\"\n\n    existing = None\n    found = None\n    sources = None\n\n    def __init__(self, *args, **kwargs):\n        super(UnrecognizedNeighborManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n\n    def prepare(self):\n        for record in self.get_managed():\n            record.prepare()\n\n        self._find_candidate_sources()\n        self._load_and_map_existing()\n\n    def _find_candidate_sources(self):\n        if AdjacencyCandidate not in self.containers:\n            return\n        candidates = self.containers[AdjacencyCandidate].values()\n        self.sources = set(c.source for c in candidates if c.source)\n\n    def _load_and_map_existing(self):\n        existing = manage.UnrecognizedNeighbor.objects.filter(\n            netbox__id=self.netbox.id\n        ).select_related('interface')\n        self.existing = dict((self.make_key(e), e) for e in existing)\n        self.found = dict((self.make_key(m), m) for m in self.get_managed())\n\n        matched = set(self.found).intersection(self.existing)\n        for key in matched:\n            self.found[key].set_existing_model(self.existing[key])\n\n    @staticmethod\n    def make_key(obj):\n        return obj.interface.id if obj.interface else None, obj.remote_id, obj.source\n\n    def cleanup(self):\n        missing = set(self.existing).difference(self.found)\n        missing = (self.existing[key] for key in missing)\n        deleteable = [m for m in missing if m.source in self.sources]\n        if deleteable:\n            self._logger.debug(\n                \"deleting %d missing records: %r\", len(deleteable), deleteable\n            )\n            manage.UnrecognizedNeighbor.objects.filter(\n                id__in=[d.id for d in deleteable]\n            ).delete()\n\n\nclass UnrecognizedNeighbor(Shadow):\n    __shadowclass__ = manage.UnrecognizedNeighbor\n    __lookups__ = [('netbox', 'interface', 'remote_id')]\n    manager = UnrecognizedNeighborManager\n\n    def prepare(self, _=None):\n        for attr in ('remote_id', 'remote_name'):\n            if getattr(self, attr) and is_invalid_database_string(getattr(self, attr)):\n                self._logger.debug(\n                    \"converting invalid %s: %r\", attr, getattr(self, attr)\n                )\n                setattr(self, attr, repr(getattr(self, attr)))\n            elif not getattr(self, attr):\n                setattr(self, attr, '')\n            elif not isinstance(getattr(self, attr), str):\n                value = getattr(self, attr)\n                setattr(self, attr, value.decode('utf-8'))\n\n    def save(self, containers=None):\n        \"\"\"Does nothing if this is a sentinel object\"\"\"\n        if self.interface:\n            return super(UnrecognizedNeighbor, self).save(containers)\n\n    @classmethod\n    def sentinel(cls, containers, source):\n        \"\"\"Creates or returns existing sentinel for source in containers.\n\n        :param containers: A ContainerRepository.\n        :param source: A source identifier string, e.g. 'lldp', 'cam', 'cdp',\n                       etc.\n\n        \"\"\"\n        sentinel = containers.factory(source, cls)\n        sentinel.source = source\n        return sentinel\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/cam.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"cam record storage and handling.\n\nUpdating NAV's cam table goes rougly like this:\n\n* Load all open CAM records for the current netbox.\n\n  - In the database, an open cam record is considered one whose\n    end_time='infinity' or whose miss_count is NON-NULL.\n\n* An ifindex+mac combination the collector found, which wasn't already in the\n  list of open records is added as a new record, with end_time='infinity' and\n  miss_count=0.\n\n* An ifindex+mac combination the collector found which is also among the open\n  records is left untouched, unless its miss_count <> 0; in such a case the\n  miss_count is reset to 0.\n\n* If an ifindex+mac combination from the open records list is not found by the\n  collector, we ensure it's end_time is set to anything but infinity, and its\n  miss_count is incremented by one.\n\n  - If a record's miss_count becomes greater or equal to MAX_MISS_COUNT, the\n    miss_count is set to a NULL value.\n\nThe point of miss_count in this algorithm is that closed cam records have a\ngrace period of MAX_MISS_COUNT collector runs.  If a \"closed\" cam record is\nfound again within MAX_MISS_COUNT collector runs, the existing record can be\nreclaimed by resetting end_time to infinity.\n\n\"\"\"\n\nimport datetime\nimport logging\nfrom collections import namedtuple\n\nfrom django.db.models import Q\nfrom django.db import transaction\n\nfrom nav.models import manage\nfrom nav.models.fields import INFINITY\nfrom nav.ipdevpoll.storage import DefaultManager\nfrom .netbox import Netbox\nfrom .interface import Interface\n\nMAX_MISS_COUNT = 3\n\n\nCam = namedtuple('Cam', 'ifindex mac')\nCam.sentinel = Cam(None, None)\n\nCamDetails = namedtuple('CamDetails', 'id end_time miss_count')\n\n\nclass CamManager(DefaultManager):\n    \"\"\"Manages Cam records\"\"\"\n\n    _previously_open = None\n    _now_open = None\n    _keepers = None\n    _missing = None\n    _new = None\n    _ifnames = None\n\n    def __init__(self, *args, **kwargs):\n        super(CamManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n\n    def prepare(self):\n        self._remove_sentinel()\n        self._load_open_records()\n        self._map_found_to_open()\n        self._log_stats()\n\n    def _remove_sentinel(self):\n        if Cam.sentinel in self.containers[Cam]:\n            del self.containers[Cam][Cam.sentinel]\n\n    def _load_open_records(self):\n        match_open = Q(end_time__gte=INFINITY) | Q(miss_count__gte=0)\n        camlist = manage.Cam.objects.filter(netbox__id=self.netbox.id)\n        camlist = camlist.filter(match_open).values_list(\n            'ifindex', 'mac', 'id', 'end_time', 'miss_count'\n        )\n        self._previously_open = dict(\n            (Cam(*cam[0:2]), CamDetails(*cam[2:])) for cam in camlist\n        )\n\n    def _map_found_to_open(self):\n        self._now_open = set(self.get_managed())\n        self._new = self._now_open.difference(self._previously_open)\n\n        missing = set(self._previously_open).difference(self._now_open)\n        self._missing = set(self._previously_open[key] for key in missing)\n\n        self._keepers = self._now_open.intersection(self._previously_open)\n\n    def _log_stats(self):\n        if not self._logger.isEnabledFor(logging.DEBUG):\n            return\n        reclaimable_count = sum(\n            1 for cam in self._previously_open.values() if cam.end_time < INFINITY\n        )\n        self._logger.debug(\n            \"existing=%d (reclaimable=%d) / found=%d (known=%d new=%d missing=%d)\",\n            len(self._previously_open),\n            reclaimable_count,\n            len(self._now_open),\n            len(self._keepers),\n            len(self._new),\n            len(self._missing),\n        )\n\n    @transaction.atomic()\n    def save(self):\n        # Reuse the same object over and over in an attempt to avoid the\n        # overhead of Python object creation\n        record = manage.Cam(\n            netbox_id=self.netbox.id,\n            sysname=self.netbox.sysname,\n            start_time=datetime.datetime.now(),\n            end_time=INFINITY,\n        )\n        for cam in self._new:\n            record.id = None\n            record.port = self._get_port_for(cam.ifindex)\n            record.ifindex = cam.ifindex\n            record.mac = cam.mac\n            record.save()\n\n        # reclaim recently closed records\n        keepers = (self._previously_open[cam] for cam in self._keepers)\n        reclaim = [cam.id for cam in keepers if cam.end_time < INFINITY]\n        if reclaim:\n            self._logger.debug(\"reclaiming %r\", reclaim)\n            manage.Cam.objects.filter(id__in=reclaim).update(\n                end_time=INFINITY, miss_count=0\n            )\n\n    def _get_port_for(self, ifindex):\n        \"\"\"Gets a port name from an ifindex, either from newly collected or\n        previously saved data.\n\n        \"\"\"\n        port = self.containers.get(ifindex, Interface)\n        if port and port.ifname:\n            return port.ifname\n        else:\n            return self._get_saved_ifname_for(ifindex)\n\n    def _get_saved_ifname_for(self, ifindex):\n        if not self._ifnames:\n            ifcs = manage.Interface.objects.filter(\n                netbox__id=self.netbox.id, ifindex__isnull=False\n            ).values('ifindex', 'ifname', 'ifdescr')\n            self._ifnames = dict(\n                (row['ifindex'], row['ifname'] or row['ifdescr']) for row in ifcs\n            )\n\n        return self._ifnames.get(ifindex, '')\n\n    def cleanup(self):\n        for cam_detail in self._missing:\n            self._close_missing(cam_detail)\n\n    @classmethod\n    def _close_missing(cls, cam_detail):\n        upd = {}\n        cls._logger.debug(\"closing %r\", cam_detail)\n        if cam_detail.end_time >= INFINITY:\n            upd['end_time'] = datetime.datetime.now()\n\n        if cam_detail.miss_count >= 0:\n            miss_count = cam_detail.miss_count + 1\n            upd['miss_count'] = miss_count if miss_count < MAX_MISS_COUNT else None\n\n        if upd:\n            manage.Cam.objects.filter(id=cam_detail.id).update(**upd)\n\n    @classmethod\n    def add_sentinel(cls, containers):\n        \"\"\"Adds a Cam cleanup sentinel to a ContainerRepository, signifying\n        that a full CAM collection has taken place and that old CAM records\n        can be safely expired.\n\n        \"\"\"\n        containers.setdefault(Cam, {})[Cam.sentinel] = Cam.sentinel\n\n\nCam.manager = CamManager\nCamManager.sentinel = Cam.sentinel\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/entity.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NetboxEntity shadow and manager classes for ipdevpoll\"\"\"\n\nfrom collections import defaultdict\nfrom datetime import datetime\n\nimport networkx as nx\nfrom networkx.algorithms.traversal.depth_first_search import dfs_tree as subtree\n\nfrom django.db import transaction\n\nfrom nav.toposort import build_graph, topological_sort\n\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\nfrom nav.models import manage\nfrom nav.event2 import EventFactory\nfrom .netbox import Netbox\n\ndevice_event = EventFactory('ipdevpoll', 'eventEngine', 'deviceState')\n\nchassis_event = EventFactory(\n    'ipdevpoll', 'eventEngine', 'chassisState', 'chassisDown', 'chassisUp'\n)\n\n\nclass EntityManager(DefaultManager):\n    \"\"\"A manager class for NetboxEntity objects\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(EntityManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n        self.matched = set()\n        self.missing = set()\n        self.existing = set()\n\n    @transaction.atomic()\n    def save(self):\n        \"\"\"Override parent only to add transaction handling\"\"\"\n        super(EntityManager, self).save()\n        self._delete_missing()\n\n    def prepare(self):\n        # index known entities in various ways, but only bother to index things\n        # that are unique\n        index = EntityIndex(\n            manage.NetboxEntity.objects.filter(\n                netbox__id=self.netbox.id\n            ).select_related('device')\n        )\n\n        matches = ((ent, index.match(ent)) for ent in self.get_managed())\n        for collected, model in matches:\n            if model:\n                collected.set_existing_model(model)\n                self.matched.add(model)\n\n        self.existing = index.entities\n        self.missing = self.existing.difference(self.matched)\n        super(EntityManager, self).prepare()\n\n    def _delete_missing(self):\n        if self.missing:\n            w_serial = sum(int(m.device is not None) for m in self.missing)\n            self._logger.info(\n                \"%d entities have disappeared, %d of which have known serial numbers\",\n                len(self.missing),\n                w_serial,\n            )\n\n            to_purge = self.get_purge_list()\n            to_set_missing = self.missing.difference(to_purge)\n            self._logger.info(\n                \"marking %d entities as missing, purging %d\",\n                len(to_set_missing),\n                len(to_purge),\n            )\n\n            manage.NetboxEntity.objects.filter(id__in=[e.id for e in to_purge]).delete()\n            manage.NetboxEntity.objects.filter(\n                id__in=[e.id for e in to_set_missing],\n                gone_since__isnull=True,\n            ).update(gone_since=datetime.now())\n\n            if to_set_missing:\n                self._verify_stack_degradation(to_set_missing)\n\n    def get_purge_list(self):\n        \"\"\"Returns a  list of entitites that should be purged from the db\"\"\"\n        to_purge = set(self.missing)\n        graph = self._build_dependency_graph()\n        if not graph:\n            return to_purge\n        collected = set(entitykey(e) for e in self.get_managed())\n        missing = (\n            miss\n            for miss in self.missing\n            if miss.device is not None and miss in to_purge\n        )\n        for miss in missing:\n            if miss not in graph:\n                self._logger.warning(\n                    \"missing entity cannot be found in dependency graph, maybe \"\n                    \"the plugin that originally collected it didn't run? : \"\n                    \"%r : %r\",\n                    miss,\n                    graph.nodes(),\n                )\n                continue\n            try:\n                sub = subtree(graph, miss)\n            except nx.NetworkXError as err:\n                self._logger.warning(\n                    \"Ignoring suspicious error during processing of entity \"\n                    \"relationships in ENTITY-MIB::entPhysicalTable: %s\",\n                    err,\n                )\n                continue\n            # filter away any missing entity whose index appears to have\n            # been re-used\n            not_replaced = [n for n in sub if entitykey(n) not in collected]\n            to_purge.difference_update(not_replaced)\n        return to_purge\n\n    def _build_dependency_graph(self):\n        self._logger.debug(\"building dependency graph\")\n        by_id = {entity.id: entity for entity in self.existing}\n        graph = nx.DiGraph()\n\n        for entity in self.existing:\n            if entity.contained_in_id in by_id:\n                parent = by_id[entity.contained_in_id]\n                graph.add_edge(parent, entity)\n\n        return graph\n\n    @transaction.atomic()\n    def _verify_stack_degradation(self, missing):\n        chassis_count = sum(e.physical_class == e.CLASS_CHASSIS for e in self.existing)\n        if chassis_count < 2:\n            # we only care about multi-chassis set-ups\n            return\n\n        chassis = [\n            m for m in missing if m.physical_class == manage.NetboxEntity.CLASS_CHASSIS\n        ]\n        if not chassis:\n            return\n        else:\n            self._logger.warning(\n                \"%d of %d chassis is missing: %s\",\n                len(chassis),\n                chassis_count,\n                \", \".join(c.name for c in chassis),\n            )\n        for chass in chassis:\n            chassis_event.start(chass.device, chass.netbox, chass.id).save()\n\n    def get_managed(self):\n        \"\"\"\n        Returns managed containers in topological sort order; the point being\n        that containers can be inserted into the database in the returned\n        order without raising integrity errors.\n        \"\"\"\n        managed = super(EntityManager, self).get_managed()\n        graph = build_graph(\n            managed, lambda ent: [ent.contained_in] if ent.contained_in else []\n        )\n        return topological_sort(graph)\n\n\ndef entitykey(ent):\n    \"\"\"\n    Returns an identity key for an entity object, based on its source MIB and\n    index within that MIB.\n    \"\"\"\n    return '%s:%s' % (ent.source, ent.index)\n\n\ndef parententitykey(ent):\n    \"\"\"\n    Returns an identity key for an entity object's parent object, based on its\n    source MIB and contained_in pointer within that MIB.\n    \"\"\"\n    if ent.contained_in:\n        return '%s:%s' % (ent.source, ent.contained_in)\n\n\nclass NetboxEntity(Shadow):\n    \"\"\"A NetboxEntity shadow class\"\"\"\n\n    __shadowclass__ = manage.NetboxEntity\n    manager = EntityManager\n\n    def __init__(self, *args, **kwargs):\n        super(NetboxEntity, self).__init__(*args, **kwargs)\n        self.is_new = None\n        if 'gone_since' not in kwargs:\n            # make sure to reset the gone_since timestamp on created records\n            self.gone_since = None\n\n    def __setattr__(self, key, value):\n        if key == 'index' and value is not None:\n            value = str(value)\n        if key == 'contained_in' and value == 0:\n            value = None\n        super(NetboxEntity, self).__setattr__(key, value)\n\n    def save(self, containers):\n        self._check_for_resolved_chassis_outage()\n        super(NetboxEntity, self).save(containers)\n\n    def _check_for_resolved_chassis_outage(self):\n        if self.physical_class != manage.NetboxEntity.CLASS_CHASSIS:\n            return\n        entity = getattr(self, '_cached_existing_model', None)\n        if entity and entity.gone_since is not None and self.gone_since is None:\n            self._logger.info(\"%s is back up\", entity)\n            chassis_event.end(entity.device, entity.netbox, entity.id).save()\n\n    def prepare(self, containers):\n        self.is_new = not self.get_existing_model()\n\n    def cleanup(self, containers):\n        self._handle_new_entity()\n\n    def _handle_new_entity(self):\n        if not self.is_new:\n            return\n        entity = self.get_existing_model()\n        if entity.is_chassis() and entity.device.serial:\n            device_event.notify(\n                device=entity.device,\n                netbox=entity.netbox,\n                alert_type='deviceNewChassis',\n            ).save()\n\n    @classmethod\n    def get_chassis_entities(cls, containers):\n        \"\"\"Returns a list of chassis entities in containers\n\n        :type containers: nav.ipdevpoll.storage.ContainerRepository\n        \"\"\"\n        if cls in containers:\n            entities = containers[cls].values()\n            return [\n                e\n                for e in entities\n                if e.physical_class == manage.NetboxEntity.CLASS_CHASSIS\n            ]\n        else:\n            return []\n\n    @classmethod\n    def get_root_entities(cls, containers):\n        \"\"\"Returns a list of entities that aren't contained within others\n\n        :type containers: nav.ipdevpoll.storage.ContainerRepository\n        \"\"\"\n        if cls in containers:\n            entities = containers[cls].values()\n            return [\n                e for e in entities if e.contained_in is None or e.contained_in == -1\n            ]\n        else:\n            return []\n\n\nclass EntityIndex(object):\n    \"\"\"\n    Given a sequence of of nav.models.manage.NetboxEntity objects, indexes them\n    in various ways applicable for matching them against collected entities.\n    \"\"\"\n\n    def __init__(self, entities):\n        self.entities = set(entities)\n        self.by_id = self.index_by_id()\n        self.by_name = self.index_by_name()\n        self.by_serial = self.index_by_serial()\n\n    def match(self, entity):\n        \"\"\"\n        Attempts to match entity against one of the indexed\n        nav.models.manage.NetboxEntity objects.\n\n        :param entity: The collected entity to find a match for\n        :type entiy: NetboxEntity\n        :return: A Django model object, if a match was found, otherwise None.\n        :rtype: nav.models.manage.NetboxEntity\n        \"\"\"\n        match = None\n        if entity.device and entity.device.serial:\n            match = self.by_serial.get((entity.source, entity.device.serial))\n        if not match:\n            match = self.by_name.get((entity.source, entity.name))\n        if not match:\n            match = self.by_id.get(entitykey(entity))\n        return match\n\n    def index_by_id(self):\n        \"\"\"\n        Builds and returns a dict indexing contained entities by their\n        'entitykey'\n        \"\"\"\n        return {entitykey(e): e for e in self.entities}\n\n    def index_by_serial(self):\n        \"\"\"\n        Builds and returns a dict indexing contained entities by their unique\n        serial numbers, if they have one.\n        \"\"\"\n        by_serial = defaultdict(list)\n        for ent in self.entities:\n            if ent.device and ent.device.serial:\n                by_serial[(ent.source, ent.device.serial)].append(ent)\n        by_serial = {k: v[0] for k, v in by_serial.items() if len(v) == 1}\n        return by_serial\n\n    def index_by_name(self):\n        \"\"\"\n        Builds and returns a dict indexing contained entities by their unique\n        entity names, if they have one.\n        \"\"\"\n        by_name = defaultdict(list)\n        for ent in self.entities:\n            if ent.name:\n                by_name[(ent.source, ent.name)].append(ent)\n        by_name = {k: v[0] for k, v in by_name.items() if len(v) == 1}\n        return by_name\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/gwpeers.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Handling of gateway protocol state changes\"\"\"\n\nfrom functools import partial\n\nfrom django.db import transaction\n\nfrom nav.event2 import EventFactory\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\nfrom nav.models import manage\nfrom .netbox import Netbox\n\n\nEVENT = EventFactory(\n    source='ipdevpoll',\n    target='eventEngine',\n    event_type='bgpState',\n    start_type='bgpDown',\n    end_type='bgpEstablished',\n)\n\n\nclass GatewayPeerSessionManager(DefaultManager):\n    \"\"\"Manager for GatewayPeerSession objects\"\"\"\n\n    _map = None\n\n    def __init__(self, *args, **kwargs):\n        super(GatewayPeerSessionManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n        self._sessions_to_keep = set()\n        self._sessions_to_remove = set()\n\n    def prepare(self):\n        for session in self.get_managed():\n            session.peer = str(session.peer)\n        self._load_existing_sessions()\n        self._map_known_sessions()\n        self._map_unknown_sessions()\n\n    def _load_existing_sessions(self):\n        sessions = manage.GatewayPeerSession.objects\n        sessions = sessions.filter(netbox=self.netbox.id)\n        self._map = {(sess.protocol, str(sess.peer)): sess for sess in sessions}\n\n    def _map_known_sessions(self):\n        for session in self.get_managed():\n            key = (session.protocol, str(session.peer))\n            if key in self._map:\n                session.set_existing_model(self._map[key])\n                self._sessions_to_keep.add(self._map[key])\n\n    def _map_unknown_sessions(self):\n        previous_sessions = set(self._map.values())\n        self._sessions_to_remove = previous_sessions - self._sessions_to_keep\n\n    def cleanup(self):\n        if self._sessions_to_remove:\n            self._logger.info(\n                \"Removing these peering sessions, that seem to have disappeared: %r\",\n                self._sessions_to_remove,\n            )\n            for session in self._sessions_to_remove:\n                session.delete()\n\n\nclass GatewayPeerSession(Shadow):\n    \"\"\"A GatewayPeerSession shadow class\"\"\"\n\n    __shadowclass__ = manage.GatewayPeerSession\n    _protocol_map = dict(manage.GatewayPeerSession.PROTOCOL_CHOICES)\n    manager = GatewayPeerSessionManager\n\n    def save(self, containers):\n        self._verify_state_changes(containers)\n        return super(GatewayPeerSession, self).save(containers)\n\n    def _verify_state_changes(self, containers):\n        \"\"\"\n        Verifies potential state changes and posts a single alert if the\n        state change(s) warrants it.\n\n        If admin status has changed, primarily an event about that. If not,\n        post events if session state switches between 'established' and\n        non-established states.\n\n        \"\"\"\n        if not should_alert_on_ibgp() and self.is_ibgp():\n            return  # GTFO\n\n        self._log_all_state_changes(containers)\n        model = self.get_existing_model(containers)\n        if not model:\n            return\n\n        if model.adminstatus != self.adminstatus:\n            new_alert = self.adminstatus in ('stop', 'halted')\n            self._make_bgpstate_event(start=new_alert, is_adminstatus=True)\n            return\n\n        states = set((model.state, self.state))\n        if len(states) > 1 and 'established' in states:\n            new_alert = self.state != 'established'\n            self._make_bgpstate_event(start=new_alert)\n\n    def _log_all_state_changes(self, containers):\n        model = self.get_existing_model(containers)\n        if not model:\n            return\n        proto = self._protocol_map.get(self.protocol, None)\n        peerid = self._get_peer_id()\n\n        if model.adminstatus != self.adminstatus:\n            self._logger.debug(\n                \"%s %s adminstatus change detected: %s -> %s\",\n                proto,\n                peerid,\n                model.adminstatus,\n                self.adminstatus,\n            )\n        if model.state != self.state:\n            self._logger.debug(\n                \"%s %s state change detected: %s -> %s\",\n                proto,\n                peerid,\n                model.state,\n                self.state,\n            )\n\n    @transaction.atomic\n    def _make_bgpstate_event(self, start=True, is_adminstatus=False):\n        model = self.get_existing_model()\n        peername = self._get_peer_name() or str(model.peer)\n        peerid = self._get_peer_id()\n        varmap = {\n            'peer': str(model.peer),\n            'peername': peername,\n            'state': self.state,\n            'adminstatus': self.adminstatus,\n        }\n        event = EVENT.start if start else EVENT.end\n        if start and is_adminstatus:\n            event = partial(event, alert_type='bgpAdmDown')\n        event = event(netbox=self.netbox.id, subid=model.id, varmap=varmap)\n\n        proto = self._protocol_map.get(self.protocol, None)\n        self._logger.info(\n            \"dispatching event (%s) for %s %s state change from %s to %s\",\n            event.varmap['alerttype'],\n            proto,\n            peerid,\n            model.state,\n            self.state,\n        )\n        event.save()\n\n    def _get_peer_name(self):\n        if not self.peer:\n            return\n\n        if not getattr(self, '_peername', None):\n            try:\n                peers = manage.Netbox.objects.filter(ip=self.peer)\n                self._peername = peers.values_list('sysname', flat=1)[0]\n            except (IndexError, AttributeError):\n                self._peername = None\n\n        return self._peername\n\n    def _get_peer_id(self):\n        peername = self._get_peer_name()\n        if peername:\n            return \"{} ({})\".format(self.peer, peername)\n        else:\n            return self.peer\n\n    def is_ibgp(self):\n        \"\"\"Returns True if this is an iBGP session\"\"\"\n        return self.local_as == self.remote_as\n\n\ndef should_alert_on_ibgp():\n    \"\"\"Returns the value of the IBGP alert option of ipdevpoll config\"\"\"\n    from nav.ipdevpoll.config import ipdevpoll_conf as conf\n\n    default = True\n    alert_ibgp = (\n        conf.getboolean('bgp', 'alert_ibgp')\n        if conf.has_option('bgp', 'alert_ibgp')\n        else default\n    )\n    return alert_ibgp\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/interface.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"interface related shadow classes\"\"\"\n\nimport datetime\nimport operator\nfrom itertools import groupby\n\nfrom django.db.models import Q\nfrom django.db import transaction\n\nfrom nav.models import manage\nfrom nav.models.event import EventQueue as Event, EventQueueVar as EventVar\nfrom nav.models.event import AlertHistory\nfrom nav import natsort\n\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\n\nfrom .netbox import Netbox\n\nMISSING_THRESHOLD = datetime.timedelta(days=1)\nINFINITY = datetime.datetime.max\n\n\nclass InterfaceManager(DefaultManager):\n    _found_existing_map = {}\n    _db_ifcs = []\n    _by_ifname = {}\n    _by_ifnamedescr = {}\n    _by_ifindex = {}\n    _missing_ifcs = {}\n\n    def __init__(self, *args, **kwargs):\n        super(InterfaceManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n        self.handle_missing = False\n\n    def prepare(self):\n        if self.sentinel in self.containers[Interface]:\n            self.handle_missing = True\n            self._logger.debug(\n                \"full interface table collected; \"\n                \"will handle missing ones during cleanup\"\n            )\n            del self.containers[Interface][self.sentinel]\n            self._reset_baseport_numbers()\n\n        for ifc in self.get_managed():\n            ifc.prepare(self.containers)\n        self._load_existing_objects()\n        self._resolve_changed_ifindexes()\n        self._resolve_linkstate_alerts()\n\n    def _reset_baseport_numbers(self):\n        \"\"\"Explicitly sets baseport to None for interfaces where it wasn't\n        touched.\n\n        This is qto ensure that switch ports that have been deconfigured as such\n        won't keep their switch port status in NAV.\n\n        \"\"\"\n        for ifc in self.get_managed():\n            if not ifc.baseport:\n                ifc.baseport = None\n\n    def _load_existing_objects(self):\n        db_ifcs = manage.Interface.objects.filter(\n            netbox__id=self.netbox.id\n        ).select_related('module')\n        self._make_maps(db_ifcs)\n\n    def _make_maps(self, db_ifcs):\n        self._db_ifcs = db_ifcs\n        self._by_ifname = mapby(db_ifcs, 'ifname')\n        self._by_ifnamedescr = mapby(db_ifcs, 'ifname', 'ifdescr')\n        self._by_ifindex = mapby(db_ifcs, 'ifindex')\n\n        self._found_existing_map = dict(\n            (snmp_ifc, self._find_existing_for(snmp_ifc))\n            for snmp_ifc in self.get_managed()\n        )\n        for found, existing in self._found_existing_map.items():\n            if existing:\n                found.set_existing_model(existing)\n\n        self._missing_ifcs = dict(\n            (ifc.id, ifc)\n            for ifc in self._db_ifcs\n            if (ifc not in self._found_existing_map.values() and not ifc.gone_since)\n        )\n\n    def _find_existing_for(self, snmp_ifc):\n        result = None\n        if snmp_ifc.ifname:\n            result = self._by_ifname.get(snmp_ifc.ifname, None)\n        if not result and snmp_ifc.ifdescr:\n            # this is only likely on a db recently migrated from NAV 3.5\n            result = self._by_ifnamedescr.get(\n                (snmp_ifc.ifdescr, snmp_ifc.ifdescr), None\n            )\n        if result and len(result) > 1:\n            # Multiple ports with same name? damn...\n            # also filter for ifindex, maybe we get lucky\n            result = [i for i in result if i.ifindex == snmp_ifc.ifindex]\n\n        # If none of this voodoo helped, try matching ifindex only\n        if not result:\n            result = self._by_ifindex.get(snmp_ifc.ifindex, None)\n\n        if result and len(result) > 1:\n            self._logger.debug(\n                \"_find_existing_for: multiple matching interfaces found for %r: %r\",\n                snmp_ifc,\n                result,\n            )\n            raise manage.Interface.MultipleObjectsReturned(\n                \"_find_existing_for: \"\n                \"Found multiple matching interfaces for %r\" % snmp_ifc\n            )\n        elif result:\n            return result[0]\n\n    def _resolve_changed_ifindexes(self):\n        \"\"\"Resolves conflicts that arise from changed ifindexes.\n\n        The db model will not allow duplicate ifindex, so any ifindex\n        that appears to have changed on the device must be nulled out\n        in the database before we start updating Interfaces.\n\n        \"\"\"\n        changed_ifindexes = [\n            (new.ifindex, old.ifindex)\n            for new, old in self._found_existing_map.items()\n            if old and new.ifindex != old.ifindex\n        ]\n        if not changed_ifindexes:\n            return\n\n        self._logger.debug(\n            \"%s changed ifindex mappings (new/old): %r\",\n            self.netbox.sysname,\n            changed_ifindexes,\n        )\n\n        changed_interfaces = self._db_ifcs.filter(\n            ifindex__in=[new for new, old in changed_ifindexes]\n        )\n        changed_interfaces.update(ifindex=None)\n\n    def _resolve_linkstate_alerts(self):\n        alerts = self._get_unresolved_linkstate_alerts()\n        need_to_resolve = set(\n            ifc\n            for ifc in self.get_managed()\n            if not ifc.is_linkstate_changed()\n            and ifc.id in alerts\n            and ifc.ifoperstatus == manage.Interface.OPER_UP\n        )\n        self._logger.debug(\n            \"resolving link state alerts for these ifcs: %r\",\n            [ifc.ifname or ifc.ifdescr for ifc in need_to_resolve],\n        )\n        for ifc in need_to_resolve:\n            ifc.ifoperstatus_change = (\n                manage.Interface.OPER_DOWN,\n                manage.Interface.OPER_UP,\n            )\n        self._ifcs_with_unresolved_alerts = need_to_resolve\n\n    def _get_unresolved_linkstate_alerts(self):\n        unresolved = AlertHistory.objects.filter(\n            netbox=self.netbox.id, event_type__id='linkState', end_time__gte=INFINITY\n        )\n        interface_ids = [v['subid'] for v in unresolved.values('subid')]\n        return [int(ifc_id) for ifc_id in interface_ids if ifc_id.isdigit()]\n\n    def cleanup(self):\n        \"\"\"Cleans up Interface data.\"\"\"\n        if self.handle_missing:\n            self._mark_missing_interfaces()\n            self._delete_missing_interfaces()\n        self._generate_linkstate_events()\n\n    @transaction.atomic()\n    def _mark_missing_interfaces(self):\n        \"\"\"Marks interfaces in db as gone if they haven't been collected in\n        this round.\n\n        \"\"\"\n        if self._missing_ifcs:\n            self._logger.debug(\n                \"marking %d interface(s) as gone: %r\",\n                len(self._missing_ifcs),\n                ifnames(self._missing_ifcs.values()),\n            )\n\n            missing = manage.Interface.objects.filter(id__in=self._missing_ifcs.keys())\n            missing.update(gone_since=datetime.datetime.now())\n\n    @transaction.atomic()\n    def _delete_missing_interfaces(self):\n        \"\"\"Deletes missing interfaces from the database.\"\"\"\n        indexless = self._get_indexless_ifcs()\n        dead = self._get_dead_ifcs()\n\n        deleteable = set(indexless + dead)\n        if deleteable:\n            self._logger.info(\n                \"deleting %d missing interfaces: %s\",\n                len(deleteable),\n                ifnames(deleteable),\n            )\n            pks = [ifc.id for ifc in deleteable]\n            manage.Interface.objects.filter(pk__in=pks).delete()\n\n    def _get_indexless_ifcs(self):\n        return [ifc for ifc in self._db_ifcs if not ifc.ifindex]\n\n    def _get_dead_ifcs(self):\n        \"\"\"Returns a list of dead interfaces.\n\n        An interface is considered dead if has a gone_since timestamp older\n        than the MISSING_THRESHOLD and is either not associated with a module or\n        is associated with a module known to still be up.\n        \"\"\"\n        deadline = datetime.datetime.now() - MISSING_THRESHOLD\n\n        def is_dead(ifc):\n            return (\n                ifc.gone_since\n                and ifc.gone_since < deadline\n                and (not ifc.module or ifc.module.up == 'y')\n            )\n\n        return [ifc for ifc in self._db_ifcs if is_dead(ifc)]\n\n    @transaction.atomic()\n    def _generate_linkstate_events(self):\n        changed_ifcs = [ifc for ifc in self.get_managed() if ifc.is_linkstate_changed()]\n        if not changed_ifcs:\n            return\n\n        self._logger.debug(\"link state changed for: %s\", ifnames(changed_ifcs))\n\n        linkstate_filter = self.get_linkstate_filter()\n        eventful_ifcs = [\n            ifc\n            for ifc in changed_ifcs\n            if ifc.matches_filter(linkstate_filter)\n            or ifc in self._ifcs_with_unresolved_alerts\n        ]\n        if eventful_ifcs:\n            self._logger.debug(\n                \"posting linkState events for %r: %s\",\n                linkstate_filter,\n                ifnames(eventful_ifcs),\n            )\n\n        for ifc in eventful_ifcs:\n            ifc.post_linkstate_event()\n\n    def get_linkstate_filter(self):\n        from nav.ipdevpoll.config import ipdevpoll_conf as conf\n\n        default = 'topology'\n        link_filter = (\n            conf.get('linkstate', 'filter')\n            if conf.has_option('linkstate', 'filter')\n            else default\n        )\n\n        if link_filter not in ('any', 'topology'):\n            self._logger.warning(\n                \"configured linkstate filter is invalid: %r (using %r as default)\",\n                link_filter,\n                default,\n            )\n            return default\n        else:\n            return link_filter\n\n\nclass Interface(Shadow):\n    __shadowclass__ = manage.Interface\n    manager = InterfaceManager\n    ifoperstatus_change = None\n\n    def is_linkstate_changed(self):\n        return bool(self.ifoperstatus_change)\n\n    def matches_filter(self, linkstate_filter):\n        django_ifc = self.get_existing_model()\n        if linkstate_filter == 'topology' and django_ifc.to_netbox:\n            return True\n        elif linkstate_filter == 'any':\n            return True\n        else:\n            return False\n\n    def post_linkstate_event(self):\n        \"\"\"\n        Posts a linkState event, but only if the interface is\n        administratively up and the link status has changed.\n        \"\"\"\n        if not self.is_admin_up():\n            self._logger.debug(\n                \"withholding linkState event, interface %s is not admUp\",\n                self.ifname or self.ifindex,\n            )\n            return\n\n        if not self.is_linkstate_changed():\n            return\n\n        oldstate, newstate = self.ifoperstatus_change\n        if newstate == manage.Interface.OPER_DOWN:\n            self._make_linkstate_event(True)\n        elif newstate == manage.Interface.OPER_UP:\n            self._make_linkstate_event(False)\n\n    def is_admin_up(self):\n        \"\"\"Returns True if interface is administratively up\"\"\"\n        return self.ifadminstatus == manage.Interface.ADM_UP\n\n    def _make_linkstate_event(self, start=True):\n        django_ifc = self.get_existing_model()\n        event = Event()\n        event.source_id = 'ipdevpoll'\n        event.target_id = 'eventEngine'\n        event.netbox_id = self.netbox.id\n        event.device = django_ifc.netbox.device\n        event.subid = self.id\n        event.event_type_id = 'linkState'\n        event.state = event.STATE_START if start else event.STATE_END\n        event.save()\n\n        EventVar(\n            event_queue=event,\n            variable='alerttype',\n            value='linkDown' if start else 'linkUp',\n        ).save()\n        EventVar(event_queue=event, variable='interface', value=self.ifname).save()\n        EventVar(\n            event_queue=event, variable='ifalias', value=django_ifc.ifalias or ''\n        ).save()\n\n    def get_existing_model(self, containers=None):\n        \"\"\"Returns the existing Django ORM object represented by this object.\n\n        Will return the cached existing model if set.  If not, will use the\n        primary key, if set, for database lookup.\n\n        \"\"\"\n        if self._cached_existing_model:\n            return self._cached_existing_model\n        elif self.id:\n            try:\n                ifc = manage.Interface.objects.get(id=self.id)\n            except manage.Interface.DoesNotExist:\n                return None\n            else:\n                self._cached_existing_model = ifc\n                return ifc\n\n    def set_existing_model(self, django_object):\n        super(Interface, self).set_existing_model(django_object)\n        self._verify_operstatus_change(django_object)\n\n    def _verify_operstatus_change(self, stored):\n        if self.ifoperstatus and self.ifoperstatus != stored.ifoperstatus:\n            self.ifoperstatus_change = (stored.ifoperstatus, self.ifoperstatus)\n        else:\n            self.ifoperstatus_change = None\n\n    def prepare(self, containers):\n        self._strip_null_bytes(containers)\n        self._set_netbox_if_unset(containers)\n        self._set_ifindex_if_unset(containers)\n        self.gone_since = None\n\n    def _strip_null_bytes(self, containers):\n        \"\"\"Strips null bytes from several string fields.\n\n        As it turns out, some devices like to return these as part of interface names\n        or descriptions, but we cannot insert those into the database.\n        \"\"\"\n        for field in 'ifname', 'ifdescr', 'ifalias':\n            value = getattr(self, field, None)\n            if isinstance(value, str) and \"\\x00\" in value:\n                value = value.replace(\"\\x00\", \"\")\n                setattr(self, field, value)\n\n    def _set_netbox_if_unset(self, containers):\n        \"\"\"Sets this Interface's netbox reference if unset by plugins.\"\"\"\n        if self.netbox is None:\n            self.netbox = containers.get(None, Netbox)\n\n    def _set_ifindex_if_unset(self, containers):\n        \"\"\"Sets this Interface's ifindex value if unset by plugins.\"\"\"\n        if self.ifindex is None:\n            interfaces = dict((v, k) for k, v in containers[Interface].items())\n            if self in interfaces:\n                self.ifindex = interfaces[self]\n\n    @classmethod\n    def add_sentinel(cls, containers):\n        \"\"\"Adds an Interface sentinel to a ContainerRepository, signifying\n        that a full interface collection has taken place and that handling of\n        missing interfaces can be safely performed by the manager.\n\n        \"\"\"\n        containers.setdefault(cls, {})[cls.sentinel] = cls.sentinel\n\n\nInterfaceManager.sentinel = Interface.sentinel = Interface()\n\n\nclass InterfaceStack(Shadow):\n    __shadowclass__ = manage.InterfaceStack\n    __lookups__ = [('higher', 'lower')]\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        \"\"\"Delete from database the higher/lower combinations from this device\n        that weren't found in the collected set.\n\n        \"\"\"\n        collected_stackings = containers[cls].values()\n        stacking_primary_keys = set(s.id for s in collected_stackings)\n        collected_ifc_ids = set(\n            ifc.id for ifc in containers[Interface].values() if ifc.id\n        )\n\n        existing = Q(higher__in=collected_ifc_ids) | Q(lower__in=collected_ifc_ids)\n        obsolete = existing & ~Q(id__in=stacking_primary_keys)\n\n        deleteable = manage.InterfaceStack.objects.filter(obsolete)\n        deleteable.delete()\n\n\nclass InterfaceAggregate(Shadow):\n    __shadowclass__ = manage.InterfaceAggregate\n    __lookups__ = [('aggregator', 'interface')]\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        \"\"\"Delete from database the aggregator/interface combinations from this\n        device that weren't found in the collected set.\n\n        \"\"\"\n        collected_aggregates = containers[cls].values()\n        aggregate_primary_keys = set(s.id for s in collected_aggregates)\n        collected_ifc_ids = set(\n            ifc.id for ifc in containers[Interface].values() if ifc.id\n        )\n\n        existing = Q(aggregator__in=collected_ifc_ids) | Q(\n            interface__in=collected_ifc_ids\n        )\n        obsolete = existing & ~Q(id__in=aggregate_primary_keys)\n\n        deleteable = manage.InterfaceAggregate.objects.filter(obsolete)\n        deleteable.delete()\n\n\ndef mapby(items, *attrs):\n    \"\"\"Maps items by attributes\"\"\"\n    keyfunc = operator.attrgetter(*attrs)\n    groupgen = groupby(items, keyfunc)\n    return dict((k, list(v)) for k, v in groupgen)\n\n\ndef ifnames(ifcs):\n    \"\"\"Returns a loggable string of interface names from a list of Interface\n    objects.\n\n    \"\"\"\n    return ', '.join(sorted((ifc.ifname or 'None' for ifc in ifcs), key=natsort.split))\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/netbox.py",
    "content": "#\n# Copyright (C) 2009-2012, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"netbox related shadow classes\"\"\"\n\nfrom typing import Union\n\nfrom django.db.models import Q\nfrom django.db import transaction\n\nfrom nav.ipdevpoll.snmp.common import SNMPParameters\nfrom nav.models import manage\nfrom nav.ipdevpoll.storage import Shadow\n\n\nclass Netbox(Shadow):\n    __shadowclass__ = manage.Netbox\n    __lookups__ = ['sysname', 'ip']\n\n    def __init__(self, *args, **kwargs):\n        super(Netbox, self).__init__(*args, **kwargs)\n        if args:\n            obj: Union[Netbox, manage.Netbox] = args[0]\n            self.snmp_up = getattr(obj, 'snmp_up', not obj.is_snmp_down())\n            self.last_updated = getattr(\n                obj, 'last_updated', self._translate_last_jobs(obj)\n            )\n            self.snmp_parameters = getattr(obj, \"snmp_parameters\", None)\n            if not self.snmp_parameters:\n                self.snmp_parameters = SNMPParameters.factory(obj)\n\n    @staticmethod\n    def _translate_last_jobs(netbox):\n        \"\"\"Compatibility method for translating a set of last run jobs for a\n        Netbox into the structure expected by users of this class. This was\n        made necessary because the Netbox objects initialized by the\n        dataloder classes is no longer passed through to the JobHandler\n        instances, just a netbox primary key, used to load a new Netbox\n        instance from the database.\n\n        :type netbox: nav.models.manage.Netbox\n\n        :returns: A dict structured like the return value of\n                  nav.ipdevpoll.dataloader.load_last_updated_times()\n\n        \"\"\"\n        return {job.job_name: job.end_time for job in netbox.get_last_jobs()}\n\n    def is_up(self):\n        return self.up == manage.Netbox.UP_UP\n\n    def copy(self, other):\n        \"\"\"In addition to copying the 'official' attrs of another Netbox object,\n        this also copies 'computed'/'internal' attributes that are only part of the\n        Netbox shadow class definition.\n        \"\"\"\n        super(Netbox, self).copy(other)\n        for attr in (\n            \"snmp_up\",\n            \"last_updated\",\n            \"snmp_parameters\",\n        ):\n            if hasattr(other, attr):\n                setattr(self, attr, getattr(other, attr))\n\n    def prepare(self, containers):\n        self._handle_sysname_conflicts(containers)\n\n    def _handle_sysname_conflicts(self, containers):\n        if self.id and self.sysname:\n            other = manage.Netbox.objects.filter(\n                ~Q(id=self.id), Q(sysname=self.sysname)\n            )\n            if not other:\n                return\n            else:\n                other = other[0]\n\n            liveself = self.get_existing_model(containers)\n            self._logger.warning(\n                \"%s and %s both appear to resolve to the same DNS name (%s).\"\n                \"Are they the same device? Setting sysname = IP Address to \"\n                \"avoid conflicts\",\n                liveself.ip,\n                other.ip,\n                self.sysname,\n            )\n            self.sysname = liveself.ip\n\n    @classmethod\n    @transaction.atomic()\n    def cleanup_replaced_netbox(cls, netbox_id, new_type):\n        \"\"\"Removes basic inventory knowledge for a netbox.\n\n        When a netbox has changed type (sysObjectID), this can be called to set\n        its new type, delete its modules and interfaces, and reset its\n        up_to_date status.\n\n        Arguments:\n\n            netbox_id -- Netbox primary key integer.\n            new_type -- A NetboxType shadow container representing the new\n                        type.\n\n        \"\"\"\n        type_ = new_type.convert_to_model() if new_type else None\n        if type_:\n            type_.save()\n\n        netbox = manage.Netbox.objects.get(id=netbox_id)\n        cls._logger.warning(\"Removing stored inventory info for %s\", netbox.sysname)\n        netbox.type = type_\n        netbox.up_to_date = False\n\n        netbox.save()\n\n        # Delete interfaces and stored hardware information\n        netbox.modules.all().delete()\n        netbox.interfaces.all().delete()\n        netbox.entities.all().delete()\n        netbox.sensors.all().delete()\n        netbox.power_supplies_or_fans.all().delete()\n        netbox.info_set.filter(key='poll_times').delete()\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/prefix.py",
    "content": "#\n# Copyright (C) 2008-2012, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A shadow implementation of the nav.manage.Prefix model, and its manager\"\"\"\n\nfrom nav.models import manage\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\nfrom .netbox import Netbox\n\n\nPREFIX_AUTHORITATIVE_CATEGORIES = ('GW', 'GSW')\n\n\nclass PrefixManager(DefaultManager):\n    \"\"\" \"Manager of Prefix containers\"\"\"\n\n    def cleanup(self):\n        \"\"\"Cleans up missing static prefixes\"\"\"\n        if STATIC_ROUTES_SENTINEL not in self.get_managed():\n            return  # no static route cleanup necessary\n\n        missing = self._get_missing_static_prefixes()\n        if missing:\n            self._logger.info(\n                \"deleting missing static routes: %s\",\n                \",\".join(p.net_address for p in missing),\n            )\n            missing.delete()\n\n    def _get_missing_static_prefixes(self):\n        netbox = self.containers.get(None, Netbox)\n        sysname = netbox.sysname.split('.')[0]\n\n        statics = (\n            p\n            for p in self.get_managed()\n            if p.vlan and p.vlan.net_type and p.vlan.net_type.id == 'static'\n        )\n        collected_addrs = [str(p.net_address) for p in statics if p.net_address]\n        missing_statics = manage.Prefix.objects.filter(\n            vlan__net_type__id='static',\n            vlan__net_ident__startswith=sysname,\n        ).exclude(net_address__in=collected_addrs)\n        return missing_statics\n\n\nclass Prefix(Shadow):\n    \"\"\"A shadow container for nav.model.Prefix data\"\"\"\n\n    manager = PrefixManager\n    __shadowclass__ = manage.Prefix\n    __lookups__ = [('net_address', 'vlan'), 'net_address']\n\n    def save(self, containers):\n        if (\n            self is STATIC_ROUTES_SENTINEL\n            or self._is_not_authorized_to_modify_prefix(containers)\n            or self._is_modification_of_existing_prefix_to_static()\n        ):\n            return\n        else:\n            return super(Prefix, self).save(containers)\n\n    def _is_not_authorized_to_modify_prefix(self, containers):\n        if self.get_existing_model():\n            netbox = containers.get(None, Netbox).get_existing_model()\n            if netbox.category_id not in PREFIX_AUTHORITATIVE_CATEGORIES:\n                self._logger.debug(\n                    \"not updating existing prefix %s for box of category %s\",\n                    self.net_address,\n                    netbox.category_id,\n                )\n                return True\n\n    def _is_modification_of_existing_prefix_to_static(self):\n        existing = self.get_existing_model()\n        if existing:\n            try:\n                if (\n                    self.vlan.net_type.id == 'static'\n                    and existing.vlan.net_type.id != 'static'\n                ):\n                    self._logger.info(\n                        \"not changing existing prefix %s into static route\",\n                        self.net_address,\n                    )\n                    return True\n            except AttributeError:\n                return False  # maybe the proper attrs weren't set, ignore\n\n    @classmethod\n    def add_static_routes_sentinel(cls, containers):\n        \"\"\"\n        Adds a sentinel to the container repository to signify the completed\n        collection of static routes, meaning missing static routes can be\n        safely pruned from the db.\n\n        \"\"\"\n        containers.setdefault(cls, {})['static'] = STATIC_ROUTES_SENTINEL\n\n\nSTATIC_ROUTES_SENTINEL = Prefix()\n"
  },
  {
    "path": "python/nav/ipdevpoll/shadows/swportblocked.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"stp blocked ports storage and handling\"\"\"\n\nfrom nav.models import manage\n\nfrom nav.ipdevpoll.storage import Shadow, DefaultManager\n\nfrom .netbox import Netbox\n\n\nclass SwPortBlockedManager(DefaultManager):\n    \"Manages SwPortBlocked entries\"\n\n    _db_blocks = None\n    _found_existing_map = {}\n\n    def __init__(self, *args, **kwargs):\n        super(SwPortBlockedManager, self).__init__(*args, **kwargs)\n        self.netbox = self.containers.get(None, Netbox)\n\n    def prepare(self):\n        for block in self.get_managed():\n            block.prepare(self.containers)\n        self._load_and_map_existing_objects()\n\n    def _load_and_map_existing_objects(self):\n        blocking = manage.SwPortBlocked.objects.filter(\n            interface__netbox__id=self.netbox.id\n        )\n        self._db_blocks = dict(((b.interface_id, b.vlan), b) for b in blocking)\n\n        self._found_existing_map = dict(\n            (found, self._find_existing_for(found)) for found in self.get_managed()\n        )\n\n        for found, existing in self._found_existing_map.items():\n            if existing:\n                found.set_existing_model(existing)\n\n    def _find_existing_for(self, found_block):\n        key = (found_block.interface.id, found_block.vlan)\n        return self._db_blocks.get(key, None)\n\n    def cleanup(self):\n        \"remove blocking states that weren't found anymore\"\n        matched_existing = set(self._found_existing_map.values())\n        gone = [b for b in self._db_blocks.values() if b not in matched_existing]\n        if gone:\n            self._logger.debug(\"removing stp blocking states: %r\", gone)\n            manage.SwPortBlocked.objects.filter(id__in=[b.id for b in gone]).delete()\n\n\nclass SwPortBlocked(Shadow):\n    __shadowclass__ = manage.SwPortBlocked\n    manager = SwPortBlockedManager\n\n    def get_existing_model(self, containers=None):\n        \"Returns only a cached object, if available\"\n        return getattr(self, '_cached_existing_model', None)\n\n    def prepare(self, containers):\n        \"sets the vlan attribute from the interface if missing\"\n        if self.interface and not self.vlan:\n            ifc = self.interface.get_existing_model(containers)\n            if ifc:\n                self.vlan = ifc.vlan\n\n    def save(self, containers):\n        \"refuses to save if vlan is not set; logs an error instead\"\n        if not self.vlan:\n            self._logger.debug(\"missing vlan value for STP block, ignoring: %r\", self)\n        else:\n            super(SwPortBlocked, self).save(containers)\n"
  },
  {
    "path": "python/nav/ipdevpoll/signals.py",
    "content": "#\n# Copyright (C) 2010 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ipdevpoll signals, using Django signals framework.\"\"\"\n\nimport django.dispatch\n\n# providing args: \"netbox_id\", \"new_type\"\nnetbox_type_changed = django.dispatch.Signal()\n"
  },
  {
    "path": "python/nav/ipdevpoll/snmp/__init__.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"selects a proper SNMP backend for ipdevpoll\"\"\"\n\ntry:\n    import pynetsnmp.twistedsnmp  # noqa: F401 - unused imports\nexcept ImportError:\n    raise ImportError(\"No supported SNMP backend was found\")\nelse:\n    from nav.ipdevpoll.snmp.pynetsnmp import AgentProxy, snmpprotocol\n\nfrom .common import SnmpError\n\n__all__ = [\n    \"AgentProxy\",\n    \"snmpprotocol\",\n    \"SnmpError\",\n]\n"
  },
  {
    "path": "python/nav/ipdevpoll/snmp/common.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"common AgentProxy mixin\"\n\nimport time\nimport logging\nfrom dataclasses import dataclass\nfrom functools import wraps\nfrom typing import Any, Optional\n\nfrom twisted.internet import reactor\nfrom twisted.internet.defer import succeed\nfrom twisted.internet.task import deferLater\n\nfrom nav.Snmp.defines import SecurityLevel, AuthenticationProtocol, PrivacyProtocol\nfrom nav.models.manage import Netbox\n\n_logger = logging.getLogger(__name__)\n\n\ndef cache_for_session(func):\n    \"\"\"Decorator for AgentProxyMixIn.getTable to cache responses\"\"\"\n\n    def _wrapper(*args, **kwargs):\n        self, oids = args[0], args[1]\n        cache = getattr(self, '_result_cache')\n        key = tuple(oids)\n        if key not in cache:\n            df = func(*args, **kwargs)\n            if df:\n                df.addCallback(_cache_result, cache, key)\n            return df\n        else:\n            return succeed(cache[key])\n\n    return wraps(func)(_wrapper)\n\n\ndef _cache_result(result, cache, key):\n    cache[key] = result\n    return result\n\n\ndef throttled(func):\n    \"\"\"Decorator for AgentProxyMixIn.getTable to throttle requests\"\"\"\n\n    def _wrapper(*args, **kwargs):\n        self = args[0]\n        last_request = getattr(self, '_last_request')\n        delay = (last_request + self.throttle_delay) - time.time()\n        setattr(self, '_last_request', time.time())\n\n        if delay > 0:\n            _logger.debug(\"%sss delay due to throttling: %r\", delay, self)\n            return deferLater(reactor, delay, func, *args, **kwargs)\n        else:\n            return func(*args, **kwargs)\n\n    return wraps(func)(_wrapper)\n\n\nclass AgentProxyMixIn(object):\n    \"\"\"Common AgentProxy mix-in class.\n\n    This mix-in provides some common base functionality for ipdevpoll\n    AgentProxies, whether they be derived from the twistedsnmp or the pynetsmp\n    library.  The former uses old-style classes, while the latter new-style\n    classes, which makes weird things happen when we want super() to work\n    properly.\n\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        \"\"\"Initializes an agent proxy.\n\n        :params snmp_parameters: An SNMPParameters namedtuple.\n\n        \"\"\"\n        if 'snmp_parameters' in kwargs:\n            self.snmp_parameters = kwargs['snmp_parameters']\n            del kwargs['snmp_parameters']\n        else:\n            self.snmp_parameters = SNMPParameters()\n        self._result_cache = {}\n        self._last_request = 0\n        self.throttle_delay = self.snmp_parameters.throttle_delay\n\n        kwargs_out = self.snmp_parameters.as_agentproxy_args()\n        kwargs_out.update(kwargs)\n        super(AgentProxyMixIn, self).__init__(*args, **kwargs_out)\n        # If we're mixed in with a pure twistedsnmp AgentProxy, the timeout\n        # parameter will have no effect, since it is an argument to individual\n        # method calls.\n        self.timeout = self.snmp_parameters.timeout\n\n    def __repr__(self):\n        return \"<{module}.{klass}({ip}, ...) at {ident}>\".format(\n            module=self.__class__.__module__,\n            klass=self.__class__.__name__,\n            ip=repr(self.ip),\n            ident=id(self),\n        )\n\n    @cache_for_session\n    def getTable(self, *args, **kwargs):\n        kwargs['maxRepetitions'] = self.snmp_parameters.max_repetitions\n        return super(AgentProxyMixIn, self).getTable(*args, **kwargs)\n\n    @throttled\n    def _get(self, *args, **kwargs):\n        return super(AgentProxyMixIn, self)._get(*args, **kwargs)\n\n    @throttled\n    def _walk(self, *args, **kwargs):\n        return super(AgentProxyMixIn, self)._walk(*args, **kwargs)\n\n    @throttled\n    def _getbulk(self, *args, **kwargs):\n        return super(AgentProxyMixIn, self)._getbulk(*args, **kwargs)\n\n\n@dataclass\nclass SNMPParameters:\n    \"\"\"SNMP session parameters common to all SNMP protocol versions\"\"\"\n\n    # Constants, no annotations\n    DEFAULT_TIMEOUT = 1.5\n\n    # Common for all SNMP sessions\n    version: int = 1\n    timeout: float = DEFAULT_TIMEOUT\n    tries: int = 3\n\n    # Common for v1 and v2 only\n    community: str = \"public\"\n\n    # Common for v2c +\n    max_repetitions: int = 50\n\n    # SNMPv3 only\n    sec_level: Optional[SecurityLevel] = None\n    auth_protocol: Optional[AuthenticationProtocol] = None\n    sec_name: str = None\n    auth_password: Optional[str] = None\n    priv_protocol: Optional[PrivacyProtocol] = None\n    priv_password: Optional[str] = None\n    context_name: Optional[str] = None\n    context_engine_id: Optional[str] = None\n\n    # Specific to ipdevpoll-derived implementations\n    throttle_delay: int = 0\n\n    def __post_init__(self):\n        \"\"\"Enforces Enum types on init\"\"\"\n        if self.sec_level and not isinstance(self.sec_level, SecurityLevel):\n            self.sec_level = SecurityLevel(self.sec_level)\n        if self.auth_protocol and not isinstance(\n            self.auth_protocol, AuthenticationProtocol\n        ):\n            self.auth_protocol = AuthenticationProtocol(self.auth_protocol)\n        if self.priv_protocol and not isinstance(self.priv_protocol, PrivacyProtocol):\n            self.priv_protocol = PrivacyProtocol(self.priv_protocol)\n\n    @property\n    def version_string(self):\n        \"\"\"Returns the SNMP protocol version as a command line compatible string\"\"\"\n        return \"2c\" if self.version == 2 else str(self.version)\n\n    @classmethod\n    def factory(\n        cls, netbox: Optional[Netbox] = None, **kwargs\n    ) -> Optional[\"SNMPParameters\"]:\n        \"\"\"Creates and returns a set of SNMP parameters based on three sources, in\n        reverse order of precedence:\n\n        1. Given a Netbox, adds the parameters from its preferred SNMP profile.\n        2. SNMP parameters from ipdevpoll.conf.\n        3. SNMP parameters given as keyword arguments to the factory method.\n\n        Beware that this method will synchronously fetch management profiles from the\n        database using the Django ORM, and should not be called from async code\n        unless deferred to a worker thread.\n\n        If the netbox argument is a Netbox without a configured SNMP profile, None will\n        be returned.\n        \"\"\"\n        kwargs_out = {}\n        if netbox:\n            profile = netbox.get_preferred_snmp_management_profile()\n            if profile:\n                kwargs_out.update(\n                    {k: v for k, v in profile.configuration.items() if hasattr(cls, k)}\n                )\n                # Let profile object parse its own version to an int\n                kwargs_out[\"version\"] = profile.snmp_version\n            else:\n                _logger.debug(\"%r has no snmp profile\", netbox)\n                return None\n\n        kwargs_out.update(cls.get_params_from_ipdevpoll_config())\n        kwargs_out.update(kwargs)\n        return cls(**kwargs_out)\n\n    @classmethod\n    def get_params_from_ipdevpoll_config(cls, section: str = \"snmp\") -> dict[str, Any]:\n        \"\"\"Reads and returns global SNMP parameters from ipdevpoll configuration as a\n        simple dict.\n        \"\"\"\n        from nav.ipdevpoll.config import ipdevpoll_conf as config\n\n        params = {}\n        for var, getter in [\n            ('max-repetitions', config.getint),\n            ('timeout', config.getfloat),\n            ('throttle-delay', config.getfloat),\n        ]:\n            if config.has_option(section, var):\n                key = var.replace('-', '_')\n                params[key] = getter(section, var)\n\n        return params\n\n    def as_agentproxy_args(self) -> dict[str, Any]:\n        \"\"\"Returns the SNMP session parameters in a dict format compatible with\n        pynetsnmp.twistedsnmp.AgentProxy() keyword arguments.\n        \"\"\"\n        kwargs = {\"snmpVersion\": f\"v{self.version_string}\"}\n        if self.version in (1, 2):\n            kwargs[\"community\"] = self.community\n        if self.timeout:\n            kwargs[\"timeout\"] = self.timeout\n        if self.tries:\n            kwargs[\"tries\"] = self.tries\n\n        if self.version == 3:\n            params = []\n            params.extend([\"-l\", self.sec_level.value, \"-u\", self.sec_name])\n            if self.auth_protocol:\n                params.extend([\"-a\", self.auth_protocol.value])\n            if self.auth_password:\n                params.extend([\"-A\", self.auth_password])\n            if self.priv_protocol:\n                params.extend([\"-x\", self.priv_protocol.value])\n            if self.priv_password:\n                params.extend([\"-X\", self.priv_password])\n            if self.context_name:\n                params.extend([\"-n\", self.context_name])\n            if self.context_engine_id:\n                params.extend([\"-E\", self.context_engine_id])\n            kwargs[\"cmdLineArgs\"] = tuple(params)\n\n        return kwargs\n\n\nclass SnmpError(Exception):\n    pass\n"
  },
  {
    "path": "python/nav/ipdevpoll/snmp/pynetsnmp.py",
    "content": "#\n# Copyright (C) 2011,2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"pynetsnmp compatibility\"\"\"\n\nimport inspect\nimport os\n\nimport sys\n\n# don't have NET-SNMP load and parse MIB modules, we don't use them\n# and we don't need all the parsing errors in our logs\nos.environ['MIBS'] = ''\nos.environ['MIBDIRS'] = ''\n\nfrom pynetsnmp import twistedsnmp, netsnmp\nfrom pynetsnmp.twistedsnmp import snmpprotocol\n\nfrom . import common\n\n__all__ = [\"snmpprotocol\", \"pynetsnmp_limits_results\", \"AgentProxy\"]\n\n\ndef pynetsnmp_limits_results():\n    \"\"\"Returns True if the available pynetsnmp version limits the number of\n    results of getTable operations.\n\n    ipdevpoll doesn't want this arbitrary limit, which appeared sometime\n    between pynetsnmp 0.28.8 and 0.28.14.\n\n    \"\"\"\n    try:\n        from pynetsnmp.tableretriever import TableRetriever\n    except ImportError:\n        return False\n    else:\n        args = inspect.getfullargspec(TableRetriever.__init__)[0]\n        return 'limit' in args\n\n\nclass AgentProxy(common.AgentProxyMixIn, twistedsnmp.AgentProxy):\n    \"\"\"pynetsnmp AgentProxy derivative to adjust the silly 1000 value\n    limit imposed in getTable calls\"\"\"\n\n    if pynetsnmp_limits_results():\n\n        def getTable(self, *args, **kwargs):\n            if 'limit' not in kwargs:\n                kwargs['limit'] = sys.maxsize\n            return super(AgentProxy, self).getTable(*args, **kwargs)\n\n    def open(self):\n        try:\n            super(AgentProxy, self).open()\n        except netsnmp.SnmpError:\n            raise common.SnmpError(\n                \"could not open session for %s:%s, maybe too many open file \"\n                \"descriptors?\" % (self.ip, self.port)\n            )\n\n    @classmethod\n    def count_open_sessions(cls):\n        \"Returns a count of the number of open SNMP sessions in this process\"\n        import gc\n\n        mykind = (o for o in gc.get_objects() if isinstance(o, cls))\n        open_sessions = [o for o in mykind if getattr(o.session, 'sess', None)]\n        return len(open_sessions)\n"
  },
  {
    "path": "python/nav/ipdevpoll/storage.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Storage layer for ipdevpoll\"\"\"\n\nimport django.db.models\nfrom django.db import transaction\n\nfrom nav import toposort\nfrom nav import ipdevpoll\n\n\nclass MetaShadow(type):\n    \"\"\"Metaclass for building storage container classes.\n\n    A shadow class built by this metaclass will look mostly like its\n    Django model counterpart, but will be a dumb container.  Usage of\n    attributes in such a container will guarantee that no database\n    access occurs, and should therefore not introduce unwanted delays\n    inside an asynchronous event loop.\n\n    \"\"\"\n\n    # dict structure: { django_model_class: shadow_class }\n    shadowed_classes = {}\n\n    def __init__(mcs, name, bases, dct):\n        try:\n            shadowclass = dct['__shadowclass__']\n        except KeyError:\n            shadowclass = dct['__shadowclass__'] = None\n\n        super(MetaShadow, mcs).__init__(name, bases, dct)\n\n        if shadowclass is None:\n            return\n\n        _meta = getattr(shadowclass, '_meta')\n        setattr(mcs, '_meta', _meta)\n        field_names = [f.name for f in _meta.fields]\n        setattr(mcs, '_fields', field_names)\n        for fname in field_names:\n            setattr(mcs, fname, None)\n\n        setattr(mcs, '_logger', ipdevpoll.ContextLogger())\n        MetaShadow.shadowed_classes[shadowclass] = mcs\n\n\nclass DefaultManager(object):\n    \"\"\"The default storage manager used by all shadow classes.\n\n    Mostly uses helper methods in shadow classes to perform its work.\n\n    \"\"\"\n\n    _logger = ipdevpoll.ContextLogger()\n\n    def __init__(self, cls, containers):\n        \"\"\"Creates a storage manager.\n\n        :param cls: The Shadow subclass this instance will work with.\n        :param containers: A ContainerRepository instance.\n\n        \"\"\"\n        self.cls = cls\n        self.containers = containers\n\n    def prepare(self):\n        \"\"\"Prepares managed shadows in containers\"\"\"\n        self.cls.prepare_for_save(self.containers)\n\n    def save(self):\n        \"\"\"Saves managed shadows in containers\"\"\"\n        for obj in self.get_managed():\n            obj.save(self.containers)\n\n    def cleanup(self):\n        \"\"\"Runs any necessary cleanup hooks after save is done\"\"\"\n        self.cls.cleanup_after_save(self.containers)\n\n    def get_managed(self):\n        \"\"\"Returns the list of container objects managed by this instance\"\"\"\n        if self.cls in self.containers:\n            return self.containers[self.cls].values()\n        else:\n            return []\n\n    def __repr__(self):\n        return \"%s(%r, %r(...))\" % (\n            self.__class__.__name__,\n            self.cls,\n            self.containers.__class__.__name__,\n        )\n\n\nclass Shadow(object, metaclass=MetaShadow):\n    \"\"\"Base class to shadow Django model classes.\n\n    To create a \"dumb\" container of values, whose attribute list will\n    be equal to that of a Django model class, define a descendant of\n    this class and set its __shadowclass__ attribute to the Django\n    model class.\n\n    Using shadow containers will ensure no synchronous database calls\n    take place behind the scenes.\n\n    Example:\n\n    >>> from nav.models import manage\n    >>> class Netbox(Shadow):\n    ...     __shadowclass__ = manage.Netbox\n    ...\n    >>>\n\n    \"\"\"\n\n    __lookups__ = []\n    manager = DefaultManager\n\n    def __init__(self, *args, **kwargs):\n        \"\"\"Initialize a shadow container.\n\n        To copy the values of a Django model object, supply the object\n        as the first argument.  Any keyword arguments will be used to\n        initialize the attributes of the container object.\n\n        If an object of a shadowed class is assigned as an attribute's\n        value, the attribute will be changed into a shadowed object.\n        This is to ensure no live Django model objects will live\n        inside the object hierarchy.\n\n        \"\"\"\n        self._touched = set()\n        if args:\n            obj = args[0]\n            if isinstance(obj, self.__class__.__shadowclass__):\n                for field in self._fields:\n                    setattr(self, field, getattr(obj, field))\n            else:\n                raise ValueError(\n                    \"First argument is not a %s instance\"\n                    % self.__class__.__shadowclass__.__name__\n                )\n        else:\n            for key, val in kwargs.items():\n                if not hasattr(self.__class__, key):\n                    raise AttributeError(\"Invalid keyword argument %s\" % key)\n                setattr(self, key, val)\n\n        self.delete = False\n        self.update_only = False\n        self._cached_converted_model = None\n        self._cached_existing_model = None\n\n    def __eq__(self, other):\n        if not isinstance(other, self.__class__):\n            return False\n        if not self.__shadowclass__ == other.__shadowclass__:\n            return False\n\n        if (\n            self.get_primary_key()\n            and other.get_primary_key()\n            and self.get_primary_key() == other.get_primary_key()\n        ):\n            return True\n\n        for lookup in self.__lookups__:\n            if isinstance(lookup, tuple):\n                ret = True\n                for field in lookup:\n                    try:\n                        if getattr(self, field) != getattr(other, field):\n                            ret = False\n                    except AttributeError:\n                        ret = False\n                if ret:\n                    return ret\n            else:\n                try:\n                    if getattr(self, lookup) == getattr(other, lookup):\n                        return True\n                except AttributeError:\n                    continue\n        return False\n\n    def __hash__(self):\n        return hash(id(self))\n\n    def __ne__(self, other):\n        return not (self == other)\n\n    def __repr__(self):\n        attrs = [\n            field\n            for field in self._fields\n            if getattr(self, field) is not None or field in self._touched\n        ]\n        varbinds = [\"%s=%r\" % (field, getattr(self, field)) for field in attrs]\n        return \"%s(%s)\" % (self.__class__.__name__, \", \".join(varbinds))\n\n    def __setattr__(self, attr, value):\n        \"\"\"Set attribute and register it as having been touched.\n\n        See the get_touched() method for more info.\n\n        \"\"\"\n        if self.is_shadowy_attribute(attr):\n            if hasattr(self, '_touched'):\n                self._touched.add(attr)\n            # If the passed value belongs to a shadowed class, replace it\n            # with a shadow object.\n            if value.__class__ in MetaShadow.shadowed_classes:\n                shadow = MetaShadow.shadowed_classes[value.__class__]\n                value = shadow(value)\n            else:\n                if isinstance(value, django.db.models.Model):\n                    self._logger.warning(\n                        \"Live model object being added to %r attribute: %r\", value, attr\n                    )\n        return super(Shadow, self).__setattr__(attr, value)\n\n    @classmethod\n    def is_shadowy_attribute(cls, attr):\n        \"\"\"Returns True if attr is the name of an attribute from the\n        corresponding Model class.\n\n        \"\"\"\n        return attr in cls._fields\n\n    def copy(self, other):\n        \"\"\"Copies (only the touched) attributes of another instance (shallow)\"\"\"\n        if isinstance(other, self.__class__):\n            for field in other.get_touched():\n                setattr(self, field, getattr(other, field))\n        else:\n            raise ValueError(\n                \"First argument is not a %s instance\" % self.__class__.__name__\n            )\n\n    @classmethod\n    def get_dependencies(cls):\n        \"\"\"Get a list of other shadow classes this class depends on.\n\n        Returns:\n\n          A list of shadow classes that are known to be foreign keys\n          on this one.\n\n        \"\"\"\n        dependencies = []\n        for field in cls._meta.fields:\n            if issubclass(field.__class__, django.db.models.fields.related.ForeignKey):\n                django_dependency = field.remote_field.model\n\n                shadow_dependency = MetaShadow.shadowed_classes.get(\n                    django_dependency, None\n                )\n                if shadow_dependency:\n                    dependencies.append(shadow_dependency)\n        return dependencies\n\n    def get_touched(self):\n        \"\"\"Get list of touched attributes.\n\n        Returns a list of attributes that have been modified since\n        this container's creation.\n\n        \"\"\"\n        return list(self._touched)\n\n    def convert_to_model(self, containers=None):\n        \"\"\"Return a live Django model object based on the data of this one.\n\n        If this shadow object represents something that is already in the\n        database, the existing database object will be retrieved\n        synchronously, and its attributes modified with the contents of the\n        touched attributes of the shadow object.\n\n        The current job handler's containers are provided for asvanced lookups\n        overrides in certain shadow classes. The containers argument is a\n        dictionary with keyed by the shadowclass. The value connected to the\n        key is a dictionary with shadow instances keyed by their index created\n        upon container creation.\n        \"\"\"\n        if hasattr(self, '_cached_converted_model') and self._cached_converted_model:\n            return self._cached_converted_model\n\n        if containers is None:\n            containers = {}\n\n        # Get existing or create new instance\n        model = self.get_existing_model(containers)\n        if not model and self.update_only:\n            return None\n        elif not model:\n            model = self.__shadowclass__()\n\n        # Copy all modified attributes to the empty model object\n        for attr in self._touched:\n            value = getattr(self, attr)\n            if issubclass(value.__class__, Shadow):\n                value = value.convert_to_model(containers)\n            setattr(model, attr, value)\n        self._cached_converted_model = model\n        return model\n\n    def get_primary_key_attribute(self):\n        \"\"\"Return a reference to the corresponding Django model's primary key\n        attribute.\n        \"\"\"\n        return self._meta.pk\n\n    def get_primary_key(self):\n        \"\"\"Return the value of the primary key, if set.\"\"\"\n        pkey = self.get_primary_key_attribute()\n        return getattr(self, pkey.name)\n\n    def set_primary_key(self, value):\n        \"\"\"Set the value of the primary key.\"\"\"\n        pkey = self.get_primary_key_attribute()\n        setattr(self, pkey.name, value)\n\n    def get_existing_model(self, containers=None):\n        \"\"\"Returns the Django model instance represented by this shadow\n        instance.\n\n        If not set explicitly via the set_existing_model() call, this method\n        will synchronously query the database to find the object. If a\n        matching object cannot be found in the database, None is returned.\n\n        \"\"\"\n        if hasattr(self, '_cached_existing_model') and self._cached_existing_model:\n            return self._cached_existing_model\n        if containers is None:\n            containers = {}\n\n        # Find the primary key attribute.  If the primary key is also\n        # a foreign key, we need to get the existing model for the\n        # foreign key first.  Either way, the primary key attribute\n        # name is added to the list of lookup fields.\n        pkey = self.get_primary_key_attribute()\n        pkey_value = self.get_primary_key()\n        lookups = [pkey.name] + self.__lookups__\n\n        if issubclass(pkey_value.__class__, Shadow):\n            pkey_value = pkey_value.get_existing_model(containers)\n\n        # If we have the primary key, we can return almost at once\n        # If PK is AutoField, we raise an exception if the object\n        # does not exist.\n        if pkey_value:\n            try:\n                model = self.__shadowclass__.objects.get(pk=pkey_value)\n            except self.__shadowclass__.DoesNotExist:\n                pkey_type = self._meta.pk.__class__\n                if pkey_type == django.db.models.fields.AutoField:\n                    raise\n                else:\n                    return None\n            self._cached_existing_model = model\n            return model\n\n        # Try each lookup field and see which one corresponds to\n        # something in the a database, if any\n        for lookup in lookups:\n            kwargs = None\n            if isinstance(lookup, tuple):\n                kwargs = dict(zip(lookup, [getattr(self, field) for field in lookup]))\n            else:\n                value = getattr(self, lookup)\n                if value is not None:\n                    kwargs = {lookup: value}\n            if kwargs:\n                # Ensure we only have django models\n                for key, val in kwargs.items():\n                    if issubclass(val.__class__, Shadow):\n                        kwargs[key] = val.get_existing_model(containers)\n                try:\n                    model = self.__shadowclass__.objects.get(**kwargs)\n                except self.__shadowclass__.DoesNotExist:\n                    pass\n                except self.__shadowclass__.MultipleObjectsReturned:\n                    self._logger.error(\n                        \"Multiple %s objects returned while \"\n                        \"looking up myself.\"\n                        \"Lookup args used: %r \"\n                        \"Myself: %r\",\n                        self.__shadowclass__.__name__,\n                        kwargs,\n                        self,\n                    )\n                    raise\n\n                else:\n                    # Set our primary key from the existing object in an\n                    # attempt to achieve consistency\n                    setattr(self, pkey.name, model.pk)\n                    self._cached_existing_model = model\n                    return model\n\n    def set_existing_model(self, django_object):\n        \"\"\"Explicitly sets the existing Django model instance this shadow\n        instance represents.\n\n        \"\"\"\n        if not isinstance(django_object, self.__shadowclass__):\n            raise TypeError(\n                'Expected a %s object: %r'\n                % (self.__shadowclass__.__name__, django_object)\n            )\n        pkey = self.get_primary_key_attribute()\n        setattr(self, pkey.name, getattr(django_object, pkey.name))\n        self._cached_existing_model = django_object\n\n    @classmethod\n    def prepare_for_save(cls, containers):\n        \"\"\"This method is run in a separate thread before saving containers,\n        once for each type of container class that was created by a job.\n\n        This will invoke the prepare method of each container object of the cls\n        type.\n\n        It can be overridden by container classes to perform custom data\n        preparation, maintenance or validation logic before the containers are\n        saved to the database.\n\n        The containers argument is the complete repository of containers\n        created during the job run, and can be sneakily modified by this method\n        if you are so inclined.\n\n        \"\"\"\n        if cls in containers:\n            for container in containers[cls].values():\n                container.prepare(containers)\n\n    @classmethod\n    def cleanup_after_save(cls, containers):\n        \"\"\"This method is run in a separate thread after containers have been\n        saved, once for each type of container class.\n\n        This will invoke the cleanup method of each container object of the cls\n        type.\n\n        Overriding this will enable a Shadow class to do things like database\n        maintenance after changes have taken place.\n\n        The containers argument is the complete repository of containers\n        created during the job run, and can be sneakily modified by this method\n        if you are so inclined.\n\n        \"\"\"\n        if cls in containers:\n            for container in containers[cls].values():\n                container.cleanup(containers)\n\n    def prepare(self, containers):\n        \"\"\"Run by prepare_for_save before conversion of this object into a\n        Django model object and saving it.\n\n        By default does nothing, but can be overridden to perform custom logic\n        per container class.\n\n        The containers argument is the complete repository of containers\n        created during the job run, and can be sneakily modified by this method\n        if you are so inclined.\n\n        \"\"\"\n        pass\n\n    def clear_cached_objects(self):\n        \"\"\"Clear object caches from this shadow.\"\"\"\n        for attr in dir(self):\n            if attr.startswith('_cached'):\n                delattr(self, attr)\n\n    def save(self, containers):\n        \"\"\"Saves this container to the database synchronously\"\"\"\n        existing = self.get_existing_model(containers)\n        if self.delete and existing:\n            existing.delete()\n        elif existing:\n            self.update(containers)\n        else:\n            obj = self.convert_to_model(containers)\n            if obj:\n                obj.save()\n                # In case we saved a new object, store a reference to\n                # the newly allocated primary key in the shadow object.\n                # This is to ensure that other shadows referring to\n                # this shadow will know about this change.\n                if not self.get_primary_key():\n                    self.set_primary_key(obj.pk)\n                self._touched.clear()\n\n    def update(self, containers):\n        \"\"\"Updates the existing object in the database (synchronously) with\n        only the changed attributes of this shadow.\n\n        If none of the touched attributes of this instance are different from\n        the existing object, no update is executed.\n\n        \"\"\"\n        existing = self.get_existing_model(containers)\n        diff = self.get_diff_attrs(existing)\n        if diff:\n            obj = self.convert_to_model(containers)\n            update = dict((attr, getattr(obj, attr)) for attr in diff)\n            pkey = self.get_primary_key_attribute().name\n            filtr = {pkey: getattr(obj, pkey)}\n            myself = self.__shadowclass__.objects.filter(**filtr)\n            myself.update(**update)\n            self._touched.clear()\n\n    def get_diff_attrs(self, other):\n        \"\"\"Returns a list of the names of the touched attributes on self whose\n        values are are different from the corresponding attributes on other.\n\n        \"\"\"\n\n        def _is_different(attr):\n            myvalue = getattr(self, attr)\n            if isinstance(myvalue, Shadow):\n                attr = \"%s_id\" % attr\n                myvalue = myvalue.id\n            return hasattr(other, attr) and myvalue != getattr(other, attr)\n\n        return [a for a in self.get_touched() if _is_different(a)]\n\n    def cleanup(self, containers):\n        \"\"\"This method is run in a separate thread after containers have been\n        saved, once for each container instance.\n\n        By default this method does nothing, but can be overridden for custom\n        logic.\n\n        \"\"\"\n        pass\n\n\ndef shadowify(model):\n    \"\"\"Return a properly shadowed version of a Django model object.\n\n    If no shadow class exists for the object's class, the original\n    object is returned as-is.\n\n    \"\"\"\n    cls = model.__class__\n    if cls in MetaShadow.shadowed_classes:\n        new_cls = MetaShadow.shadowed_classes[cls]\n        model = new_cls(model)\n    return model\n\n\ndef shadowify_queryset(queryset):\n    \"\"\"Run a Django queryset and transform results to shadow containers.\"\"\"\n    result = list(queryset)\n    new_list = [shadowify(obj) for obj in result]\n    return new_list\n\n\n@transaction.atomic()\ndef shadowify_queryset_and_commit(queryset):\n    \"\"\"Runs a Django queryset and transform results to shadow containers,\n    committing the current transaction on success.\n\n    \"\"\"\n    return shadowify_queryset(queryset)\n\n\nclass ContainerRepository(dict):\n    \"\"\"A repository of container objects.\n\n    This is basically a dictionary with custom methods to manipulate it as a\n    repository of container objects that need to be stored to the database.  It\n    is typically used by a JobHandler and various container classes'\n    do_maintenance and prepare_for_save methods.\n\n    \"\"\"\n\n    def factory(self, key, container_class, *args, **kwargs):\n        \"\"\"Instantiates a container_class object and stores it in the\n        repository using the given key.\n\n        The *args and **kwargs arguments are fed to the container_class\n        constructor.\n\n        If the given key already exists in the repository, the existing\n        container_class object associated with is is returned instead, and the\n        args and kwargs arguments are ignored.\n\n        \"\"\"\n        obj = self.get(key, container_class)\n        if obj is None:\n            obj = container_class(*args, **kwargs)\n            if container_class not in self:\n                self[container_class] = {}\n            self[container_class][key] = obj\n\n        return obj\n\n    def add(self, container_class):\n        \"\"\"Ensures there is a reference to container_class in repository.\n\n        Even though no containers of this class are added to the repository,\n        the reference to the class will cause its manager to run save-time\n        processing.\n\n        \"\"\"\n        if not issubclass(container_class, Shadow):\n            raise ValueError(\"%s is not a shadow container class\" % container_class)\n\n        if container_class not in self:\n            self[container_class] = {}\n\n    def get(self, key, container_class):\n        \"\"\"Returns the container_class object associated with key, or None if\n        no such object was found.\n\n        \"\"\"\n        if container_class not in self or key not in self[container_class]:\n            return None\n        else:\n            return self[container_class][key]\n\n    def __repr__(self):\n        orig = super(ContainerRepository, self).__repr__()\n        return \"ContainerRepository(%s)\" % orig\n\n    def sortedkeys(self):\n        \"\"\"Returns the shadow class keys sorted topologically according to\n        dependencies, starting with the class with the fewest dependencies.\n\n        \"\"\"\n        order = get_shadow_sort_order()\n        return [cls for cls in order if cls in self] + [\n            cls for cls in self if cls not in order\n        ]\n\n\ndef get_shadow_sort_order():\n    \"\"\"Return a topologically sorted list of shadow classes.\"\"\"\n\n    def _get_dependencies(shadow_class):\n        return shadow_class.get_dependencies()\n\n    shadow_classes = MetaShadow.shadowed_classes.values()\n    graph = toposort.build_graph(shadow_classes, _get_dependencies)\n    sorted_classes = toposort.topological_sort(graph)\n    return sorted_classes\n"
  },
  {
    "path": "python/nav/ipdevpoll/timestamps.py",
    "content": "#\n# Copyright (C) 2012-2015, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SNMP timestamps and sysUpTime comparisons\"\"\"\n\nimport json\n\nfrom twisted.internet import defer\n\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\n\nfrom nav.ipdevpoll import db, shadows\nfrom nav.ipdevpoll.log import ContextLogger\nfrom nav.models import manage\n\nINFO_KEY_NAME = 'poll_times'\n\n\nclass TimestampChecker(object):\n    \"\"\"Generic handling of SNMP time stamp checking.\n\n    Various MIBs provide last-updated timestamps for potentially large\n    tables. These timestamps are usually reported as the value of sysUpTime\n    when the last table modification was made.\n\n    A manager should collect such a timestamp before collecting a large\n    table. If the timestamp is unchanged on the next collection run, then it\n    needn't waste time collecting the unchanged table over again.\n\n    Some tables will have a timestamp of 0, meaning it was last changed at the\n    time the SNMP agent was initialized. If the SNMP agent has been\n    re-initialized or the device rebooted, the timestamp may still be 0, while\n    the table contents have changed.  Therefore, the manager should check for\n    deviations in the expected sysUpTime value - if it appears the device has\n    restarted, it's time to collect the full table again, to be on the safe\n    side.\n\n    This class provides re-usable mechanisms for doing these operations in an\n    ipdevpoll context.  It can perform the sysUpTime collection and receive\n    the results of other timestamp query results, persist these to the NAVdb\n    and/or compare them with previously persisted values to determine whether\n    table re-collection should occur.\n\n    \"\"\"\n\n    _logger = ContextLogger()\n\n    def __init__(self, agent, containers, var_name):\n        self._logger\n        self.agent = agent\n        self.snmpv2mib = Snmpv2Mib(agent)\n        self.containers = containers\n        self.var_name = var_name\n        self.collected_times = None\n        self.loaded_times = None\n\n    @defer.inlineCallbacks\n    def collect(self, collectors):\n        \"\"\"Collects timestamp results in parallel, using a DeferredList.\n\n        :param collectors: A list of deferreds to wait for - the deferreds\n                           should return integer results.\n\n        \"\"\"\n        result = yield defer.DeferredList(\n            [self.snmpv2mib.get_timestamp_and_uptime()] + list(collectors)\n        )\n        tup = []\n        for success, value in result:\n            if success:\n                tup.append(value)\n            else:\n                value.raiseException()\n        self.collected_times = tuple(tup)\n        return self.collected_times\n\n    @defer.inlineCallbacks\n    def load(self):\n        \"\"\"Loads existing timestamps from db\"\"\"\n\n        def _deserialize():\n            try:\n                info = manage.NetboxInfo.objects.get(\n                    netbox__id=self._get_netbox().id,\n                    key=INFO_KEY_NAME,\n                    variable=self.var_name,\n                )\n            except manage.NetboxInfo.DoesNotExist:\n                return None\n            try:\n                return json.loads(info.value)\n            except (\n                AttributeError,\n                json.JSONDecodeError,\n                UnicodeDecodeError,\n                TypeError,\n            ):\n                return None\n\n        self.loaded_times = yield db.run_in_thread(_deserialize)\n        return self.loaded_times\n\n    def save(self):\n        \"\"\"Saves timestamps to a ContainerRepository\"\"\"\n        netbox = self._get_netbox()\n        info = self.containers.factory(\n            (INFO_KEY_NAME, self.var_name), shadows.NetboxInfo\n        )\n        info.netbox = netbox\n        info.key = INFO_KEY_NAME\n        info.variable = self.var_name\n        info.value = json.dumps(self.collected_times)\n\n    def _get_netbox(self):\n        return self.containers.factory(None, shadows.Netbox)\n\n    def is_changed(self, max_deviation=60):\n        \"\"\"Verifies whether any timestamps have changed.\n\n        :param max_deviation: Accepted sysUpTime deviation before a device is\n                              considered to have rebooted, in number of\n                              seconds.\n\n        :returns: True if any of the collected timestamps are different from\n                  the loaded ones, or if a discontinuity in sysUpTime (aka a\n                  reboot) is detected.\n\n        \"\"\"\n        if not self.loaded_times:\n            self._logger.debug(\"%r: no previous collection times found\", self.var_name)\n            return True\n\n        old_uptime, old_times = (self.loaded_times[0], self.loaded_times[1:])\n        new_uptime, new_times = (self.collected_times[0], self.collected_times[1:])\n        uptime_deviation = self.snmpv2mib.get_uptime_deviation(old_uptime, new_uptime)\n\n        if None in new_times:\n            self._logger.debug(\n                \"%r: None in timestamp list: %r\", self.var_name, new_times\n            )\n            return True\n        if uptime_deviation is None:\n            self._logger.debug(\n                \"%r: unable to calculate uptime deviation for old/new: %r/%r\",\n                self.var_name,\n                old_times,\n                new_times,\n            )\n            return True\n        if list(old_times) != list(new_times):\n            self._logger.debug(\n                \"%r: timestamps have changed: %r / %r\",\n                self.var_name,\n                old_times,\n                new_times,\n            )\n            return True\n        elif abs(uptime_deviation) > max_deviation:\n            self._logger.debug(\n                \"%r: sysUpTime deviation detected, possible reboot\", self.var_name\n            )\n            return True\n        else:\n            self._logger.debug(\n                \"%r: timestamps appear unchanged since last run\", self.var_name\n            )\n            return False\n"
  },
  {
    "path": "python/nav/ipdevpoll/utils.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility functions for ipdevpoll.\"\"\"\n\nimport logging\nimport re\nfrom typing import TYPE_CHECKING\n\nfrom IPy import IP\n\nfrom twisted.internet import defer\nfrom twisted.internet.defer import Deferred\nfrom twisted.internet import reactor\n\nfrom nav.oids import get_enterprise_id\nfrom nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\nfrom nav.enterprise.ids import VENDOR_ID_ARUBA_NETWORKS_INC\n\nif TYPE_CHECKING:\n    from nav.mibs.bridge_mib import MultiBridgeMib\n    from nav.mibs.types import LogicalMibInstance\n\n_logger = logging.getLogger(__name__)\nMAX_MAC_ADDRESS_LENGTH = 6\n\n\ndef fire_eventually(result):\n    \"\"\"This returns a Deferred which will fire in a later reactor turn.\n\n    Can be used to cause a break in deferred chain, so the number of\n    stack frames won't exceed sys.getrecursionlimit().  Do like this:\n\n    >>> deferred_chain.addCallback(lambda thing: fire_eventually(thing))\n\n    Reference:\n    http://twistedmatrix.com/pipermail/twisted-python/2008-November/018693.html\n\n    \"\"\"\n    deferred = Deferred()\n    reactor.callLater(0, deferred.callback, result)\n    return deferred\n\n\ndef binary_mac_to_hex(binary_mac):\n    \"\"\"Converts a binary string MAC address to hex string.\n\n    If the binary string exceeds 6 octets, only the last 6 octets are\n    converted. If the string contains less than 6 octets the result will be\n    padded with leading zeros.\n\n    \"\"\"\n    if binary_mac:\n        binary_mac = binary_mac[-6:].rjust(MAX_MAC_ADDRESS_LENGTH, b'\\x00')\n        return \":\".join(\"%02x\" % x for x in binary_mac)\n\n\ndef truncate_mac(mac):\n    \"\"\"Takes a MAC address on the form xx:xx:xx... of any length and returns\n    the first 6 parts.\n    \"\"\"\n    parts = mac.split(':')\n    if len(parts) > 6:\n        mac = ':'.join(parts[:6])\n    return mac\n\n\ndef find_prefix(ip, prefix_list):\n    \"\"\"Takes an IPy.IP object and a list of manage.Prefix and returns the most\n    precise prefix the IP matches.\n    \"\"\"\n    ret = None\n    for pfx in prefix_list:\n        sub = IP(pfx.net_address)\n        if ip in sub:\n            # Return the most precise prefix, ie the longest prefix\n            if not ret or IP(ret.net_address).prefixlen() < sub.prefixlen():\n                ret = pfx\n    return ret\n\n\ndef is_invalid_database_string(string):\n    \"\"\"Returns True if string cannot be stored in PostgreSQL in its current\n    representation. I.e. if string contains NUL characters, or is a binary object\n    that cannot be decoded as UTF-8, or is another type of object, it is considered\n    invalid.\n    \"\"\"\n    return (isinstance(string, str) and \"\\x00\" in string) or is_invalid_utf8(string)\n\n\ndef is_invalid_utf8(string):\n    \"\"\"Returns True if string is invalid UTF-8.\n\n    If string is not a an str object, or is decodeable as UTF-8, False is\n    returned.\n\n    \"\"\"\n    if isinstance(string, bytes):\n        try:\n            string.decode('utf-8')\n        except UnicodeDecodeError:\n            return True\n    return False\n\n\ndef log_unhandled_failure(logger, failure, msg, *args, **kwargs):\n    \"\"\"Logs a Failure with traceback using logger.\n\n    If the logger has an effective loglevel of debug, a verbose traceback\n    (complete with stack frames) is logged.  Otherwise, a regular traceback is\n    loggged.\n\n    \"\"\"\n    detail = 'default'\n    if logger.isEnabledFor(logging.DEBUG):\n        detail = 'verbose'\n    traceback = failure.getTraceback(detail=detail)\n    args = args + (traceback,)\n\n    logger.error(msg + \"\\n%s\", *args, **kwargs)\n\n\nasync def get_multibridgemib(agentproxy) -> \"MultiBridgeMib\":\n    \"\"\"Returns a MultiBridgeMib retriever pre-populated with instances from\n    get_dot1d_instances()\n\n    \"\"\"\n    from nav.mibs.bridge_mib import MultiBridgeMib\n\n    instances = await get_dot1d_instances(agentproxy)\n    return MultiBridgeMib(agentproxy, instances)\n\n\nasync def get_dot1d_instances(agentproxy) -> \"list[LogicalMibInstance]\":\n    \"\"\"\n    Gets a list of alternative BRIDGE-MIB instances from a Cisco or Aruba\n    agent.\n\n    :returns: A list of LogicalMibInstance for each alternate BRIDGE-MIB instance.\n\n    \"\"\"\n    from nav.mibs.snmpv2_mib import Snmpv2Mib\n    from nav.mibs.cisco_vtp_mib import CiscoVTPMib\n    from nav.mibs.entity_mib import EntityMib\n\n    enterprise_id = await (\n        Snmpv2Mib(agentproxy).get_sysObjectID().addCallback(get_enterprise_id)\n    )\n    if enterprise_id == VENDOR_ID_CISCOSYSTEMS:\n        mibclasses = [EntityMib, CiscoVTPMib]\n        modifier = lambda x: x\n    elif enterprise_id == VENDOR_ID_ARUBA_NETWORKS_INC:\n        mibclasses = [EntityMib]\n        modifier = _workaround_broken_aruba_alternate_communities\n    else:\n        mibclasses = []\n\n    for mibclass in mibclasses:\n        mib = mibclass(agentproxy)\n        instances = await mib.retrieve_alternate_bridge_mibs()\n        if instances:\n            result = modifier(instances)\n            modified_by = modifier if instances != result else None\n            _logger.debug(\n                \"get_dot1d_instances(%r) [modified=%r]: %r\",\n                agentproxy.ip,\n                modified_by,\n                result,\n            )\n            return result\n\n    return []\n\n\n@defer.inlineCallbacks\ndef get_arista_vrf_instances(agentproxy) -> Deferred:\n    \"\"\"\n    Gets a list of alternative VRF instances from an Arista agent\n\n    :returns: A list of [(description, community), ...] for each alternate\n              VRF\n\n    \"\"\"\n    from nav.mibs.arista_vrf_mib import AristaVrfMib\n    from nav.mibs.types import LogicalMibInstance\n\n    vrf_mib = AristaVrfMib(agentproxy)\n    states = yield vrf_mib.get_vrf_states(only='active')\n    # XXX: This part does not currently support SNMPv3, as we have no known way to\n    #      derive the correct SNMPv3 context name for each VRF.\n    vrfs = [LogicalMibInstance(description='', community=agentproxy.community)]\n    vrfs.extend(\n        LogicalMibInstance(description=vrf, community=f\"{agentproxy.community}@{vrf}\")\n        for vrf in states\n    )\n    return vrfs\n\n\n_VLAN_RE = re.compile('^vlan([0-9]+)', re.IGNORECASE)\n\n\ndef _workaround_broken_aruba_alternate_communities(\n    instances: \"list[LogicalMibInstance]\",\n) -> \"list[LogicalMibInstance]\":\n    \"\"\"\n    Works around a b0rked alternate bridge mib instance list from Aruba\n    switches.\n\n    Aruba switches tend to return the wrong community for BRIDGE-MIB instances\n    from ENTITY-MIB::entLogicalCommunity - the community is not indexed for\n    the given vlan.\n\n    \"\"\"\n    from nav.mibs.types import LogicalMibInstance\n\n    output = []\n    for instance in instances:\n        match = _VLAN_RE.match(instance.description)\n        if match:\n            vlan = match.group(1)\n            index = '@' + vlan\n            if instance.community and not instance.community.endswith(index):\n                instance = LogicalMibInstance(\n                    description=instance.description,\n                    community=instance.community + index,\n                    context=instance.context,\n                    context_engine_id=instance.context_engine_id,\n                )\n        output.append(instance)\n    return output\n"
  },
  {
    "path": "python/nav/junos/__init__.py",
    "content": "\"\"\"Juniper JunOS specific libraries for NAV\"\"\"\n"
  },
  {
    "path": "python/nav/junos/nav_views.py",
    "content": "#\n# Copyright (C) 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"JunOS PyEZ tables/views for NAV specific use.\n\nPyEZ' FactoryLoader is used to generate the desired Python classes from the\nYAML-based definitions. These class definitions are dynamically inserted into this\nmodule's namespace.\n\n\"\"\"\n\nfrom os.path import splitext\nimport yaml\nfrom jnpr.junos.factory import FactoryLoader\n\n\ndef _loadyaml_bypass(yaml_file):\n    \"\"\"Bypass Juniper's loadyaml to utilize yaml.safe_load, thereby avoiding potential\n    unintended code execution.\n    \"\"\"\n    with open(yaml_file) as handle:\n        return FactoryLoader().load(yaml.safe_load(handle.read()))\n\n\n_YAML_ = splitext(__file__)[0] + \".yml\"\nglobals().update(_loadyaml_bypass(_YAML_))\n"
  },
  {
    "path": "python/nav/junos/nav_views.yml",
    "content": "---\n\n####\n#### Interface configuration table\n#### I.e. `show configuration interface`\n####\n\nInterfaceConfigTable:\n  get: interfaces/interface\n  view: InterfaceConfigView\n\nInterfaceConfigView:\n  fields:\n    ifindex: snmp\n    ifname: name\n    ifalias: description\n    port_mode: unit/family/ethernet-switching/port-mode\n    native_vlan: unit/family/ethernet-switching/native-vlan-id|native-vlan-id\n    ifgroup: name/@group\n    vlans: _VlanTable\n\n\n_VlanTable:\n  item: unit/family/ethernet-switching/vlan\n  key: members\n  view: _VlanView\n\n\n_VlanView:\n  fields:\n    vlan: members\n\n\n####\n#### Terse interface status table for both physical and logical interfaces\n#### I.e. `show interface`\n####\n#### PyEZ seems unable to key the result properly when mixing physical/logical\n#### items, so this table is no good.\n####\n\nInterfaceTable:\n  rpc: get-interface-information\n  args:\n    interface_name: '[afgxe][et]-*'\n    terse: True\n  args_key: interface_name\n  item: physical-interface|physical-interface/logical-interface\n  view: InterfaceView\n\nInterfaceView:\n  fields:\n    name: name\n    oper: oper-status\n    admin: admin-status\n    description: description\n\n\n\n####\n#### Ethernet switching interfaces table\n#### I.e. `show ethernet-switching interfaces`\n####\n\nEthernetSwitchingInterfaceTable:\n  rpc: get-ethernet-switching-interface-information\n  args_key: interface_name\n  item: interface\n  key: interface-name\n  view: EthernetSwitchingInterfaceView\n\nEthernetSwitchingInterfaceView:\n  fields:\n    ifname: interface-name\n    state: interface-state\n    vlans: _VlanMemberTable\n\n_VlanMemberTable:\n  item: interface-vlan-member-list/interface-vlan-member\n  key: interface-vlan-name\n  view: _VlanMemberView\n\n_VlanMemberView:\n  fields:\n    name: interface-vlan-name\n    tag: { interface-vlan-member-tagid: int }\n    tagged: { interface-vlan-member-tagness: True=tagged }\n    blocking-status: blocking-status\n\n\nElsEthernetSwitchingInterfaceTable:\n    rpc: get-ethernet-switching-interface-information\n    args:\n        detail: True\n    item: l2ng-l2ald-iff-interface-entry\n    key: l2iff-interface-handle\n    view: ElsEthernetSwitchingInterfaceView\n\nElsEthernetSwitchingInterfaceTableJunOS20:\n    rpc: get-ethernet-switching-interface-details\n    args:\n        detail: True\n    item: l2ng-l2ald-iff-interface-entry\n    key: l2iff-interface-handle\n    view: ElsEthernetSwitchingInterfaceView\n\nElsEthernetSwitchingInterfaceView:\n    fields:\n        ifname: l2iff-interface-name\n        tag: { l2iff-interface-vlan-id: int }\n        vlan_name: l2iff-interface-vlan-name\n        tagged: { l2iff-interface-vlan-member-tagness: True=tagged }\n        flags: l2iff-interface-flags\n\n\n####\n#### Vlan information table, updated version for l2ng (ELS Switches)\n#### PyEZ comes with an old VlanTable definition, but newer JunOS seems to\n#### provide a very different XML response to this RPC, so here is the newer\n#### definition\n\nElsVlanTable:\n  rpc: get-vlan-information\n  key: l2ng-l2rtb-vlan-name\n  item: l2ng-l2ald-vlan-instance-group\n  view: ElsVlanView\n\nElsVlanView:\n  fields:\n    name: l2ng-l2rtb-vlan-name\n    tag: l2ng-l2rtb-vlan-tag\n    members: .//l2ng-l2rtb-vlan-member-interface\n"
  },
  {
    "path": "python/nav/jwtconf.py",
    "content": "import logging\nfrom os.path import join\nfrom functools import partial\nimport configparser\nfrom typing import Any, Optional\nfrom dataclasses import dataclass\nfrom datetime import timedelta\n\nfrom nav.config import ConfigurationError, NAVConfigParser\nfrom nav.util import parse_interval\n\n_logger = logging.getLogger('nav.jwtconf')\n\n\n@dataclass\nclass LocalJWTConfig:\n    \"\"\"Local JWT configuration data\"\"\"\n\n    private_key: Optional[str] = None\n    public_key: Optional[str] = None\n    name: Optional[str] = None\n    access_token_lifetime: Optional[timedelta] = None\n    refresh_token_lifetime: Optional[timedelta] = None\n\n\nclass JWTConf(NAVConfigParser):\n    \"\"\"webfront/jwt.conf config parser\"\"\"\n\n    DEFAULT_CONFIG_FILES = [join('webfront', 'jwt.conf')]\n    NAV_SECTION = \"nav\"\n    DEFAULT_ACCESS_TOKEN_LIFETIME = timedelta(hours=1)\n    DEFAULT_REFRESH_TOKEN_LIFETIME = timedelta(days=1)\n\n    def get_issuers_setting(self) -> dict[str, Any]:\n        \"\"\"Parses the webfront/jwt.conf config file and returns a dictionary that can\n        be used as settings for the `drf-oidc-auth` django extension.\n        If the parsing fails, an empty dict is returned.\n        \"\"\"\n        try:\n            external_settings = self._get_settings_for_external_tokens()\n            local_settings = self._get_settings_for_nav_issued_tokens()\n            external_settings.update(local_settings)\n            return external_settings\n        except ConfigurationError as error:\n            _logger.error('Error reading jwtconfig: %s', error)\n            return dict()\n\n    def get_local_config(self) -> LocalJWTConfig:\n        \"\"\"Returns dataclass containing the local JWT configuration data.\n        Data will be None if local tokens are not configured or the config is invalid.\n        Logs an error if the config is invalid.\n        \"\"\"\n        try:\n            return self._get_local_config()\n        except ConfigurationError as error:\n            _logger.error('Error reading NAV section of jwtconfig: %s', error)\n            return LocalJWTConfig()\n\n    def _get_local_config(self) -> LocalJWTConfig:\n        \"\"\"Internal method without error handling to get\n        the local JWT configuration data.\n        Returns empty LocalJWTConfig if the NAV section is not present.\n        \"\"\"\n        if not self.has_section(self.NAV_SECTION):\n            return LocalJWTConfig()\n        return LocalJWTConfig(\n            private_key=self.get_nav_private_key(),\n            public_key=self.get_nav_public_key(),\n            name=self.get_nav_name(),\n            access_token_lifetime=self.get_access_token_lifetime(),\n            refresh_token_lifetime=self.get_refresh_token_lifetime(),\n        )\n\n    def _get_settings_for_external_tokens(self):\n        settings = dict()\n        try:\n            for section in self.sections():\n                if section == self.NAV_SECTION:\n                    continue\n                get = partial(self.get, section)\n                issuer = self._validate_issuer(section)\n                key = self._validate_key(get('key'))\n                aud = self._validate_audience(get('aud'))\n                key_type = self._validate_type(get('keytype'))\n                if key_type == 'PEM':\n                    key = self._read_key_from_path(key)\n                claims_options = {\n                    'aud': {'values': [aud], 'essential': True},\n                }\n                settings[issuer] = {\n                    'key': key,\n                    'type': key_type,\n                    'claims_options': claims_options,\n                }\n        except (\n            configparser.NoSectionError,\n            configparser.NoOptionError,\n        ) as error:\n            raise ConfigurationError(error)\n        return settings\n\n    def _read_key_from_path(self, path):\n        try:\n            with open(path, \"r\") as f:\n                return f.read()\n        except FileNotFoundError:\n            raise ConfigurationError(\n                \"Could not find file %s to read PEM key from\", path\n            )\n        except PermissionError:\n            raise ConfigurationError(\n                \"Could not access file %s to read PEM key from\", path\n            )\n\n    def _validate_key(self, key):\n        if not key:\n            raise ConfigurationError(\"Invalid 'key': 'key' must not be empty\")\n        return key\n\n    def _validate_type(self, key_type):\n        if key_type not in ['JWKS', 'PEM']:\n            raise ConfigurationError(\n                \"Invalid 'keytype': 'keytype' must be either 'JWKS' or 'PEM'\"\n            )\n        return key_type\n\n    def _validate_issuer(self, section):\n        if not section:\n            raise ConfigurationError(\"Invalid 'issuer': 'issuer' must not be empty\")\n        try:\n            nav_name = self.get_nav_name()\n        except ConfigurationError:\n            pass\n        else:\n            if section == nav_name:\n                raise ConfigurationError(\n                    \"Invalid 'issuer': %s collides with internal issuer name %s\",\n                    section,\n                )\n        return section\n\n    def _validate_audience(self, audience):\n        if not audience:\n            raise ConfigurationError(\"Invalid 'aud': 'aud' must not be empty\")\n        return audience\n\n    def _get_nav_token_config_option(self, option):\n        try:\n            get = partial(self.get, self.NAV_SECTION)\n            return get(option)\n        except (\n            configparser.NoSectionError,\n            configparser.NoOptionError,\n        ) as error:\n            raise ConfigurationError(error)\n\n    def get_nav_private_key(self):\n        path = self._get_nav_token_config_option('private_key')\n        return self._read_key_from_path(path)\n\n    def get_nav_public_key(self):\n        path = self._get_nav_token_config_option('public_key')\n        return self._read_key_from_path(path)\n\n    def get_nav_name(self):\n        name = self._get_nav_token_config_option('name')\n        if not name:\n            raise ConfigurationError(\"Invalid 'name': 'name' must not be empty\")\n        return name\n\n    def get_access_token_lifetime(self):\n        try:\n            interval = self._get_nav_token_config_option('access_token_lifetime')\n        except ConfigurationError:\n            return self.DEFAULT_ACCESS_TOKEN_LIFETIME\n        try:\n            lifetime = parse_interval(interval)\n        except ValueError:\n            raise ConfigurationError(\"Invalid 'access_token_lifetime': %s\", interval)\n        return timedelta(seconds=lifetime)\n\n    def get_refresh_token_lifetime(self):\n        try:\n            interval = self._get_nav_token_config_option('refresh_token_lifetime')\n        except ConfigurationError:\n            return self.DEFAULT_REFRESH_TOKEN_LIFETIME\n        try:\n            lifetime = parse_interval(interval)\n        except ValueError:\n            raise ConfigurationError(\"Invalid 'refresh_token_lifetime': %s\", interval)\n        return timedelta(seconds=lifetime)\n\n    def _get_settings_for_nav_issued_tokens(self):\n        local_config = self._get_local_config()\n        if local_config == LocalJWTConfig():\n            return {}\n        claims_options = {\n            'aud': {'values': [local_config.name], 'essential': True},\n            'token_type': {'values': ['access_token'], 'essential': True},\n        }\n        settings = {\n            local_config.name: {\n                'type': \"PEM\",\n                'key': local_config.public_key,\n                'claims_options': claims_options,\n            }\n        }\n        return settings\n"
  },
  {
    "path": "python/nav/logengine.py",
    "content": "#\n# Copyright (C) 2007, 2009-2011 Uninett AS\n# Copyright (C) 2022, 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"logengine.py inserts Cisco syslog messages into the NAV database.\n\nMost of the operation of this program is configured in logger.conf.\n\nSyslog messages will be read from the configured file, parsed and\ninserted into structured NAV database tables.  Messages that cannot be\nparsed as Cisco syslog messages are ignored.\n\nThe syslog file is truncated upon the exit of this program.  If you\nwish to keep a copy of the syslog messages on file, you should\nconfigure your syslog daemon to log the messages to two separate\nfiles, one of which this program will have exclusive access to.\n\n\"\"\"\n\n# The structure of this code was a mess translated more or less\n# directly from perl code. Some refactoring attempts have been made\n# to make it more maintainable.  Feel free to refactor it further,\n# where it makes sense.\n\n# BUGS: This program has one glaring problem: All the log lines are\n# read into memory, and the logfile is subsequently truncated.  If\n# the program crashes before the lines are inserted into the\n# database, all the read log lines are lost.\n\n# TODO: Possible future enhancement is the ability to tail a log file\n# continually, instead of reading and truncating as a cron job.\n\nimport re\nimport fcntl\nimport sys\nimport errno\nimport atexit\nimport logging\nfrom configparser import ConfigParser\nimport datetime\nimport optparse\n\nimport nav\nimport nav.logs\nfrom nav import db\nfrom nav import daemon\nfrom nav.config import find_config_file\n\n\nPID_FILE = 'logengine.pid'\n_logger = logging.getLogger(\"nav.logengine\")\n\n\ndef get_exception_dicts(config):\n    options = config.options(\"priorityexceptions\")\n\n    exceptionorigin = {}\n    exceptiontype = {}\n    exceptiontypeorigin = {}\n    exceptions = {}\n    for option in options:\n        newpriority = config.get(\"priorityexceptions\", option)\n        opt = re.split(\"@\", option)\n        if len(opt) == 1:\n            exceptions[opt[0]] = newpriority\n        if len(opt) == 2:\n            any_re = re.compile(\"any\", re.I)\n            if not opt[0] or any_re.search(opt[0]):\n                exceptionorigin[opt[1]] = newpriority\n            if not opt[1] or any_re.search(opt[1]):\n                exceptiontype[opt[0]] = newpriority\n            # both fields\n            if opt[0] and opt[1]:\n                if opt[0] not in exceptiontypeorigin:\n                    exceptiontypeorigin[opt[0]] = {}\n                exceptiontypeorigin[opt[0]][opt[1]] = newpriority\n\n        # only one of the fields\n        for exception, priority in exceptions.items():\n            typematch = re.search(r\"^\\w+\\-\\d+\\-\\S+$\", exception)\n            if typematch:\n                exceptiontype[exception] = priority\n            else:\n                exceptionorigin[exception] = priority\n\n    return exceptionorigin, exceptiontype, exceptiontypeorigin\n\n\n# Timestamp patterns for syslog server timestamps\n# RFC 3339 format (used by rsyslog on Debian Bookworm+ with RFC 5424)\n_RFC3339_TS = r\"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,6})?(?:Z|[+-]\\d{2}:\\d{2})\"\n# Traditional BSD syslog format (spaces escaped for re.VERBOSE compatibility)\n_BSD_TS = r\"[A-Z][a-z]{2}\\ [ \\d]\\d\\ \\d{2}:\\d{2}:\\d{2}\"\n_SERVER_TS = rf\"(?:{_RFC3339_TS}|{_BSD_TS})\"\n\n# Cisco/source timestamp: [*]Mon D[D] [YYYY] HH:MM:SS[.fff] [TZ]\n_SOURCE_TS = (\n    r\"\\*?[A-Z][a-z]{2}\\s+\\d{1,2}(?:\\s+\\d{4})?\\s+\"\n    r\"\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:\\s+[A-Z]{2,5})?\"\n)\n\n# Matches log lines where the origin included its own timestamp\n_typical_match_re = re.compile(\n    rf\"\"\"\n    ^\n    {_SERVER_TS}                                     # server timestamp (not captured)\n    \\s+\n    (?P<origin>\\S+)                                  # origin\n    .+?                                              # garbage (non-greedy)\n    (?P<timestamp>{_SOURCE_TS})                      # source timestamp\n    \\s* : \\s*\n    %(?P<type>[^:]+):                                # message type\n    \\s*(?P<description>.*)                           # description\n    $\n    \"\"\",\n    re.VERBOSE,\n)\n\n# Matches log lines where there is no timestamp from the origin\n_not_so_typical_match_re = re.compile(\n    rf\"\"\"\n    ^\n    (?P<timestamp>{_SERVER_TS})                      # server timestamp (captured)\n    \\s+\n    (?P<origin>\\S+)                                  # origin\n    .*                                               # everything until %\n    %(?P<type>[a-zA-Z0-9\\-_]+):                      # message type\n    \\s*(?P<description>.*)                           # description\n    $\n    \"\"\",\n    re.VERBOSE,\n)\n\n_type_match_re = re.compile(r\"\\w+-\\d+-?\\S*:\")\n\n# Patterns for parse_timestamp()\n_tz_suffix_re = re.compile(r'\\s+[A-Z]{2,5}$')\n_space_padded_day_re = re.compile(r'^([A-Z][a-z]{2})\\s+(\\d)\\s')\n\n\ndef create_message(line, database=None):\n    match = _typical_match_re.search(line) or _not_so_typical_match_re.search(line)\n\n    if match:\n        try:\n            timestamp = parse_timestamp(match.group('timestamp'))\n            return Message(\n                timestamp,\n                match.group('origin'),\n                match.group('type'),\n                match.group('description'),\n            )\n        except ValueError:\n            _logger.debug(\"syslog line parse error: %s\", line, exc_info=True)\n\n    # if this message shows sign of cisco format, put it in the error log\n    typematch = _type_match_re.search(line)\n    if typematch and database:\n        database.execute(\"INSERT INTO errorerror (message) VALUES (%s)\", (line,))\n\n\nclass Message(object):\n    prioritymatch_re = re.compile(r\"^(.*)-(\\d*)-(.*)$\")\n    categorymatch_re = re.compile(r\"\\W(gw|sw|gsw|fw|ts)\\W\")\n\n    def __init__(self, time, origin, msgtype, description):\n        self.time = time\n        self.origin = origin\n        self.category = self.find_category(origin)\n        self.type = msgtype\n        self.description = description\n        (self.facility, self.priorityid, self.mnemonic) = self.find_priority(msgtype)\n        if not self.facility:\n            raise ValueError(\"cannot parse message type: %s\" % msgtype)\n\n    def find_priority(self, msgtype):\n        prioritymatch = self.prioritymatch_re.search(msgtype)\n        if prioritymatch:\n            return (\n                prioritymatch.group(1),\n                int(prioritymatch.group(2)),\n                prioritymatch.group(3),\n            )\n        else:\n            return None, None, None\n\n    def find_category(self, origin):\n        categorymatch = self.categorymatch_re.search(origin)\n        if categorymatch:\n            return categorymatch.group(1)\n        else:\n            return \"rest\"\n\n\ndef find_year(mnd):\n    now = datetime.datetime.now()\n    if mnd == 12 and now.month == 1:\n        return now.year - 1\n    else:\n        return now.year\n\n\ndef find_month(textual):\n    months = [\n        \"jan\",\n        \"feb\",\n        \"mar\",\n        \"apr\",\n        \"may\",\n        \"jun\",\n        \"jul\",\n        \"aug\",\n        \"sep\",\n        \"oct\",\n        \"nov\",\n        \"dec\",\n    ]\n    try:\n        return months.index(textual.lower()) + 1\n    except ValueError:\n        pass\n\n\ndef parse_timestamp(timestamp_str: str) -> datetime.datetime:\n    \"\"\"Parse a timestamp string, trying RFC 3339 first, then traditional formats.\n\n    :param timestamp_str: A timestamp string in either RFC 3339 format\n                          (e.g. \"2026-01-05T13:54:43.262668+01:00\") or traditional\n                          Cisco/BSD syslog format (e.g. \"Oct 28 13:15:05.310 CEST\")\n    :returns: A datetime.datetime object (without timezone info)\n    :raises ValueError: If the timestamp cannot be parsed\n    \"\"\"\n    # Try RFC 3339 / ISO 8601 first\n    try:\n        # Replace trailing Z with +00:00 for Python 3.9 compatibility\n        iso_str = (\n            timestamp_str.removesuffix('Z') + '+00:00'\n            if timestamp_str.endswith('Z')\n            else timestamp_str\n        )\n        dt = datetime.datetime.fromisoformat(iso_str)\n        # Convert to local time before stripping timezone info (since NAV legacy code\n        # unfortunately still uses timezone-naive timestamps)\n        if dt.tzinfo is not None:\n            dt = dt.astimezone().replace(tzinfo=None)\n        return dt\n    except ValueError:\n        pass\n\n    # Try traditional syslog/Cisco formats\n    ts = timestamp_str.lstrip('*')  # Some Cisco timestamps have leading *\n\n    # Strip timezone abbreviation at end (strptime %Z is unreliable)\n    ts = _tz_suffix_re.sub('', ts)\n\n    # Normalize space-padded single-digit days (e.g., \"Jan  5\" -> \"Jan 05\")\n    ts = _space_padded_day_re.sub(r'\\1 0\\2 ', ts)\n\n    for fmt in [\n        \"%b %d %H:%M:%S.%f\",  # Oct 28 13:15:05.310\n        \"%b %d %H:%M:%S\",  # Oct 28 13:15:05\n        \"%b %d %Y %H:%M:%S.%f\",  # Oct 28 2010 12:08:49.123\n        \"%b %d %Y %H:%M:%S\",  # Oct 28 2010 12:08:49\n    ]:\n        try:\n            dt = datetime.datetime.strptime(ts, fmt)\n            if dt.year == 1900:  # strptime default when no year in format\n                dt = dt.replace(year=find_year(dt.month))\n            return dt\n        except ValueError:\n            continue\n\n    raise ValueError(f\"Cannot parse timestamp: {timestamp_str}\")\n\n\ndef delete_old_messages(config):\n    \"\"\"Delete old messages from db, according to config settings.\"\"\"\n    _logger.debug(\"Deleting old messages from db\")\n\n    conn = db.getConnection('logger', 'logger')\n    cursor = conn.cursor()\n\n    for priority in range(0, 8):\n        if config.get(\"deletepriority\", str(priority)):\n            days = config.getint(\"deletepriority\", str(priority))\n            cursor.execute(\n                \"DELETE FROM log_message WHERE newpriority=%s \"\n                \"AND time < now() - interval %s\",\n                (priority, '%d days' % days),\n            )\n\n    conn.commit()\n\n\ndef verify_singleton(quiet=False):\n    \"\"\"Verify that we are the single running logengine process.\n\n    If a logengine process is already running, we exit this process.\n\n    \"\"\"\n    # Create a pidfile and delete it automagically when the process exits.\n    # Although we're not a daemon, we do want to prevent multiple simultaineous\n    # logengine processes.\n\n    try:\n        daemon.justme(PID_FILE)\n    except daemon.AlreadyRunningError as err:\n        if quiet:\n            sys.exit(0)\n        else:\n            print(\"logengine is already running (%d)\" % err.pid, file=sys.stderr)\n            sys.exit(1)\n\n    daemon.writepidfile(PID_FILE)\n    atexit.register(daemon.daemonexit, PID_FILE)\n\n\ndef get_categories(cursor):\n    categories = {}\n    cursor.execute(\"select category from category\")\n    for (category,) in cursor.fetchall():\n        if category not in categories:\n            categories[category] = category\n    return categories\n\n\ndef get_origins(cursor):\n    origins = {}\n    cursor.execute(\"select origin, name from origin\")\n    for origin, name in cursor.fetchall():\n        if name not in origins:\n            origins[name] = int(origin)\n    return origins\n\n\ndef get_types(cursor):\n    types = {}\n    cursor.execute(\"select type, facility, mnemonic, priority from log_message_type\")\n    for type_, facility, mnemonic, _priority in cursor.fetchall():\n        if facility not in types:\n            types[facility] = {}\n        if mnemonic not in types[facility]:\n            types[facility][mnemonic] = int(type_)\n    return types\n\n\ndef read_log_lines(config):\n    \"\"\"Read and yield message lines from the watched cisco log file.\n\n    Once the log file has been read, it is truncated. The watched file\n    is configured using the syslog option in the paths section of\n    logger.conf.\n\n    \"\"\"\n    filename = config.get(\"paths\", \"syslog\")\n    if config.has_option(\"paths\", \"charset\"):\n        charset = config.get(\"paths\", \"charset\")\n    else:\n        charset = \"ISO-8859-1\"\n\n    logfile = None\n    # open log\n    try:\n        logfile = open(filename, \"r+\", encoding=charset)\n    except IOError as err:\n        # If logfile can't be found, we ignore it.  We won't needlessly\n        # spam the NAV admin every minute with a file not found error!\n        if err.errno != errno.ENOENT:\n            _logger.exception(\"Couldn't open logfile %s\", filename)\n\n    # if the file exists\n    if logfile:\n        # lock logfile\n        fcntl.flock(logfile, fcntl.LOCK_EX)\n\n        # read log\n        fcon = logfile.readlines()\n\n        # truncate logfile\n        logfile.truncate(0)\n\n        # unlock logfile\n        fcntl.flock(logfile, fcntl.LOCK_UN)\n        # close log\n        logfile.close()\n\n        for line in fcon:\n            yield line\n\n\ndef parse_and_insert(\n    line,\n    database,\n    categories,\n    origins,\n    types,\n    exceptionorigin,\n    exceptiontype,\n    exceptiontypeorigin,\n):\n    \"\"\"Parse a line of cisco log text and insert into db.\"\"\"\n\n    try:\n        message = create_message(line, database)\n    except Exception:  # noqa: BLE001\n        _logger.exception(\"Unhandled exception during message parse: %s\", line)\n        return False\n\n    if message:\n        try:\n            insert_message(\n                message,\n                database,\n                categories,\n                origins,\n                types,\n                exceptionorigin,\n                exceptiontype,\n                exceptiontypeorigin,\n            )\n        except Exception:  # noqa: BLE001\n            _logger.exception(\"Unhandled exception during message insert: %s\", line)\n            raise\n\n\ndef insert_message(\n    message,\n    database,\n    categories,\n    origins,\n    types,\n    exceptionorigin,\n    exceptiontype,\n    exceptiontypeorigin,\n):\n    # check origin (host)\n    if message.origin not in origins:\n        if message.category not in categories:\n            add_category(message.category, categories, database)\n        add_origin(message.origin, message.category, origins, database)\n    originid = origins[message.origin]\n\n    # check type\n    if message.facility not in types or message.mnemonic not in types[message.facility]:\n        add_type(\n            message.facility, message.mnemonic, message.priorityid, types, database\n        )\n    typeid = types[message.facility][message.mnemonic]\n\n    # overload priority if exceptions are set\n    m_type = message.type.lower()\n    origin = message.origin.lower()\n    if m_type in exceptiontypeorigin and origin in exceptiontypeorigin[m_type]:\n        try:\n            message.priorityid = int(exceptiontypeorigin[m_type][origin])\n        except ValueError:\n            pass\n\n    elif origin in exceptionorigin:\n        try:\n            message.priorityid = int(exceptionorigin[origin])\n        except ValueError:\n            pass\n\n    elif m_type in exceptiontype:\n        try:\n            message.priorityid = int(exceptiontype[m_type])\n        except ValueError:\n            pass\n\n    # insert message into database\n    database.execute(\n        \"INSERT INTO log_message (time, origin, \"\n        \"newpriority, type, message) \"\n        \"VALUES (%s, %s, %s, %s, %s)\",\n        (str(message.time), originid, message.priorityid, typeid, message.description),\n    )\n\n\ndef add_category(category, categories, database):\n    database.execute(\"INSERT INTO category (category) VALUES (%s)\", (category,))\n    categories[category] = category\n\n\ndef add_origin(origin, category, origins, database):\n    database.execute(\"SELECT nextval('origin_origin_seq')\")\n    originid = database.fetchone()[0]\n    assert isinstance(originid, int)\n    database.execute(\n        \"INSERT INTO origin (origin, name, category) VALUES (%s, %s, %s)\",\n        (originid, origin, category),\n    )\n    origins[origin] = originid\n    return originid\n\n\ndef add_type(facility, mnemonic, priorityid, types, database):\n    database.execute(\"SELECT nextval('log_message_type_type_seq')\")\n    typeid = int(database.fetchone()[0])\n    assert isinstance(typeid, int)\n\n    database.execute(\n        \"INSERT INTO log_message_type (type, facility, \"\n        \"mnemonic, priority) \"\n        \"VALUES (%s, %s, %s, %s)\",\n        (typeid, facility, mnemonic, priorityid),\n    )\n    if facility not in types:\n        types[facility] = {}\n    types[facility][mnemonic] = typeid\n\n\ndef logengine(config, options):\n    verify_singleton(options.quiet)\n\n    connection = db.getConnection('logger', 'logger')\n    database = connection.cursor()\n\n    # initial setup of dictionaries\n\n    categories = get_categories(database)\n    origins = get_origins(database)\n    types = get_types(database)\n\n    # parse priorityexceptions\n    (exceptionorigin, exceptiontype, exceptiontypeorigin) = get_exception_dicts(config)\n\n    # add new records\n    _logger.debug(\"Reading new log entries\")\n    my_parse_and_insert = swallow_all_but_db_exceptions(parse_and_insert)\n    for line in read_log_lines(config):\n        my_parse_and_insert(\n            line,\n            database,\n            categories,\n            origins,\n            types,\n            exceptionorigin,\n            exceptiontype,\n            exceptiontypeorigin,\n        )\n\n    # Make sure it all sticks\n    connection.commit()\n\n\ndef swallow_all_but_db_exceptions(func):\n    def _swallow(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except db.driver.Error:\n            raise\n        except Exception:  # noqa: BLE001\n            _logger.exception(\"Unhandled exception occurred, ignoring.\")\n\n    return _swallow\n\n\ndef parse_options():\n    \"\"\"Parse and return options supplied on command line.\"\"\"\n    parser = optparse.OptionParser()\n    parser.add_option(\n        \"-d\",\n        \"--delete\",\n        action=\"store_true\",\n        dest=\"delete\",\n        help=\"delete old messages from database and exit\",\n    )\n    parser.add_option(\n        \"-q\",\n        \"--quiet\",\n        action=\"store_true\",\n        dest=\"quiet\",\n        help=\"quietly exit without returning an error code if \"\n        \"logengine is already running\",\n    )\n\n    return parser.parse_args()\n\n\ndef main():\n    # Figure out what to do\n    (options, _args) = parse_options()\n\n    # Process setup\n\n    config = ConfigParser()\n    config.read(find_config_file('logger.conf'))\n\n    nav.logs.init_stderr_logging()\n\n    if options.delete:\n        # get rid of old records\n        delete_old_messages(config)\n        sys.exit(0)\n    else:\n        logengine(config, options)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/logs.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2006, 2007, 2009, 2011, 2012, 2014, 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV related logging functionality.\"\"\"\n\nimport sys\nimport os\nimport logging\nimport logging.config\nfrom itertools import chain\nfrom typing import Optional\nimport yaml\n\nimport configparser\nfrom nav.config import find_config_file, NAV_CONFIG\n\nDEFAULT_LOG_FORMATTER = logging.Formatter(\n    '%(asctime)s [%(levelname)s] [%(name)s] %(message)s'\n)\nLOGGING_CONF_VAR = 'NAV_LOGGING_CONF'\nLOGGING_CONF_FILE_DEFAULT = find_config_file('logging.conf') or ''\nLOGGING_YAML_VAR = 'NAV_LOGGING_YAML'\nLOGGING_YAML_FILE_DEFAULT = find_config_file('logging.yml') or ''\n\n_logger = logging.getLogger(__name__)\n\n\ndef set_log_config():\n    \"\"\"Set log levels and custom log files\"\"\"\n    set_log_levels()\n    _set_custom_log_file()\n    _read_dictconfig_from_yaml_file()\n\n\ndef set_log_levels():\n    \"\"\"\n    Read the logging config file and set up log levels for the different\n    loggers.\n    \"\"\"\n    config = _get_logging_conf()\n    if 'levels' not in config.sections():\n        return\n\n    for logger_name in config.options('levels'):\n        level = config.get('levels', logger_name)\n        # Allow the config file to specify the root logger as 'root'\n        if logger_name.lower() == 'root':\n            logger_name = ''\n        _logger = logging.getLogger(logger_name)\n        _logger.setLevel(_translate_log_level(level))\n\n\ndef _translate_log_level(level):\n    \"\"\"Allow log levels to be specified as either names or values.\n\n    Translate any non-integer levels to integer first.\n    \"\"\"\n    if not level.isdigit():\n        level = logging.getLevelName(level)\n    try:\n        level = int(level)\n    except ValueError:\n        # Default to INFO\n        level = logging.INFO\n\n    return level\n\n\ndef _set_custom_log_file():\n    \"\"\"Read logging config and add additional file handlers to specified logs\"\"\"\n\n    config = _get_logging_conf()\n    section = 'files'\n\n    if section not in config.sections():\n        return\n\n    for logger_name in config.options(section):\n        filename = config.get(section, logger_name)\n        # Allow the config file to specify the root logger as 'root'\n        if logger_name.lower() == 'root':\n            logger_name = ''\n        _logger = logging.getLogger(logger_name)\n\n        filehandler = logging.FileHandler(_get_logfile_path(filename), encoding='utf-8')\n        filehandler.setFormatter(DEFAULT_LOG_FORMATTER)\n        _logger.addHandler(filehandler)\n\n\ndef _read_dictconfig_from_yaml_file():\n    \"\"\"Reads legacy logging dictconfig from alternative yaml-based config file, if\n    possible.\n\n    This allows for much more flexible logging configuration than NAV's standard logging\n    parameters.\n    \"\"\"\n    config = _get_logging_yaml()\n    if config:\n        logging.config.dictConfig(config)\n\n\ndef _get_logging_conf():\n    \"\"\"\n    Returns a ConfigParser with the logging configuration to use.\n\n    Unless a specific config file is specified NAV_LOGGING_CONF environment\n    variable, the default is to read from the file specified by\n    LOGGING_CONF_FILE_DEFAULT .\n\n    \"\"\"\n    filename = os.environ.get(LOGGING_CONF_VAR, LOGGING_CONF_FILE_DEFAULT)\n    config = configparser.ConfigParser()\n    read = config.read(filename)\n    if filename not in read and LOGGING_CONF_VAR in os.environ:\n        _logger.error(\n            \"cannot read logging config from %s, trying default %s\",\n            filename,\n            LOGGING_CONF_FILE_DEFAULT,\n        )\n        config.read(LOGGING_CONF_FILE_DEFAULT)\n    return config\n\n\ndef _get_logging_yaml() -> Optional[dict]:\n    \"\"\"Returns a logging config dict from logging.yaml, if readable\"\"\"\n    filename = os.environ.get(LOGGING_YAML_VAR, LOGGING_YAML_FILE_DEFAULT)\n    try:\n        with open(filename, \"rb\") as yamlconf:\n            config = yaml.safe_load(yamlconf)\n            _logger.debug(\"Loaded logging config from %r\", filename)\n    except OSError as error:\n        _logger.debug(\"Could not load yaml logging config: %r\", error)\n        return None\n    return config\n\n\ndef reset_log_levels(level=logging.WARNING):\n    \"\"\"Resets the log level of all loggers.\n\n    The root logger's level is set to `level`, while other existing loggers in\n    the hierarchy are reset to NOTSET.\n\n    \"\"\"\n    root = logging.getLogger('')\n    root.setLevel(level)\n    all_loggers = root.manager.loggerDict.values()\n    for logger in all_loggers:\n        if hasattr(logger, 'setLevel'):\n            logger.setLevel(logging.NOTSET)\n\n\ndef reopen_log_files():\n    \"\"\"\n    Function to iterate over all FileHandlers in the logger hierarchy, close\n    their streams and reopen them.\n    \"\"\"\n    # Get the manager of the root logger\n    root = logging.getLogger()\n    manager = root.manager\n    mylog = logging.getLogger('nav.logs')\n    for logger in chain([root], manager.loggerDict.values()):\n        try:\n            for hdl in logger.handlers:\n                if isinstance(hdl, logging.FileHandler):\n                    mylog.debug(\"Reopening \" + hdl.baseFilename)\n                    hdl.flush()\n                    hdl.acquire()\n                    hdl.stream.close()\n                    hdl.stream = open(hdl.baseFilename, hdl.mode)\n                    hdl.release()\n                    mylog.debug(\"Reopened \" + hdl.baseFilename)\n        except AttributeError:\n            continue\n\n\ndef get_logfile_from_logger(logger=logging.root):\n    \"\"\"Return the file object of the first FileHandler of a given logger.\n\n    This can be used as shorthand for redirecting the low-level stderr\n    file descriptor to a log file after daemonization.\n\n    Example usage:\n        nav.daemon.daemonize('/var/run/nav/mydaemon.pid',\n                             stderr=get_logfile_from_logger())\n\n    Arguments:\n        ``logger'' the logger object whose first FileHandler's file will be\n                   returned.  If omitted, the root logger is searched for a\n                   FileHandler.\n\n    Returns:\n        A file object, or None if no FileHandlers were found.\n\n    \"\"\"\n    for handler in logger.handlers:\n        if isinstance(handler, logging.FileHandler):\n            return handler.stream\n\n\ndef init_stderr_logging(formatter=None, rootlogger=''):\n    \"\"\"Initializes logging to stderr.\n\n    Log levels are read from logging.conf, the root logger's format is set to\n    NAV's default format, and its handler is set to a StreamHandler writing\n    to sys.stderr.\n\n    \"\"\"\n    init_generic_logging(formatter=formatter, read_config=True, rootlogger=rootlogger)\n\n\ndef init_generic_logging(\n    logfile=None,\n    stderr=True,\n    stdout=False,\n    formatter=None,\n    read_config=False,\n    rootlogger='',\n    stderr_level=None,\n):\n    \"\"\"Setup logging\n\n    Attempts to cover all the possible existing ways of setting up logging\"\"\"\n\n    if 'TIME_ZONE' in NAV_CONFIG:\n        os.environ['TZ'] = NAV_CONFIG['TIME_ZONE']\n\n    root = logging.getLogger(rootlogger)\n\n    if stderr or (stdout and sys.stdout.isatty()):\n        tty = sys.stderr if stderr else sys.stdout\n        tty_handler = logging.StreamHandler(tty)\n        formatter = formatter or DEFAULT_LOG_FORMATTER\n        tty_handler.setFormatter(formatter)\n        if stderr and stderr_level:\n            tty_handler.setLevel(stderr_level)\n        root.addHandler(tty_handler)\n\n    if logfile:\n        try:\n            filehandler = logging.FileHandler(\n                _get_logfile_path(logfile), encoding='utf-8'\n            )\n        except IOError:\n            pass\n        else:\n            formatter = formatter or DEFAULT_LOG_FORMATTER\n            filehandler.setFormatter(formatter)\n            root.addHandler(filehandler)\n\n    if read_config:\n        set_log_config()\n    else:\n        set_log_levels()\n\n\ndef _get_logfile_path(logfile):\n    \"\"\"Returns the fully qualified path to logfile.\n\n    If logfile is an absolute path, it is returned unchanged, otherwise,\n    the LOG_DIR path configured in nav.conf will be prepended.\n    \"\"\"\n    if not logfile.startswith(os.sep):\n        logfile = os.path.join(NAV_CONFIG['LOG_DIR'], logfile)\n    return logfile\n"
  },
  {
    "path": "python/nav/macaddress.py",
    "content": "#\n# Copyright 2013 (C) Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MAC address manipulation.\n\nMAC is a Media Access Control address. It may also be known as an Ethernet\nhardware address (EHA), hardware address or physical address.\n\nThe standard (IEEE 802) format for printing MAC-48 addresses in human-\nfriendly form is six groups of two hexadecimal digits, separated by hyphens\n(-) or colons (:), in transmission order (e.g. 01-23-45-67-89-ab or\n01:23:45:67:89:ab). This form is also commonly used for EUI-64. Anotqher\nconvention used by networking equipment uses three groups of four hexadecimal\ndigits separated by dots (.) (e.g. 0123.4567.89ab), again in transmission\norder.\n\n\"\"\"\n\nimport re\nimport string\n\n# A range of left shift values for the 6 bytes in a MAC address\n_SHIFT_RANGE = tuple(x * 8 for x in reversed(range(6)))\n# Legal delimiters and the number of nybbles between them.\nDELIMS_AND_STEPS = {\n    '.': 4,\n    ':': 2,\n    '-': 2,\n}\n# Only these characters are allowed in a MacAddress after delimiters have\n# been stripped.\nMAC_ADDRESS_PATTERN = re.compile('^[a-fA-F0-9]+$')\n# Number of nybbles in a valid mac-address.\nMAC_ADDR_NYBBLES = 12\n# Obviously number of bits for a nybble.\nNUM_BITS_IN_NYBBLE = 4\n\n\nclass MacAddress(object):\n    \"\"\"A representation of a single MAC address\"\"\"\n\n    # Default delimiter for a mac-address as a string.\n    DEFAULT_DELIM = ':'\n    # Maximum value for a mac-address when all bits are set.\n    MAX_MAC_ADDR_VALUE = 0xFFFFFFFFFFFF\n    # Strip for delimiters and test against this pattern.\n    MAC_ADDRESS_PATTERN = re.compile('^[a-fA-F0-9]{6,12}$')\n    # To hold the value for a mac-address as an int.\n    _addr = None\n\n    def __init__(self, addr):\n        if isinstance(addr, MacAddress):\n            self._addr = addr._addr\n        elif isinstance(addr, int):\n            self._addr = addr\n            if self._addr < 0 or self._addr > self.MAX_MAC_ADDR_VALUE:\n                raise ValueError('Illegal value for MacAddress')\n        elif isinstance(addr, str):\n            self._addr = self._parse_address_string(addr)\n        else:\n            raise ValueError('Illegal parameter-type')\n\n    @classmethod\n    def from_octets(cls, binary_mac):\n        \"\"\"Return a legal mac-address from the given binary octet-string\"\"\"\n        hexstring = octets_to_hexstring(binary_mac)\n        return cls(hexstring.rjust(MAC_ADDR_NYBBLES, \"0\"))\n\n    def toint(self):\n        \"\"\"Returns an integer representation of this MacAddress\"\"\"\n        return self._addr\n\n    @staticmethod\n    def _parse_address_string(addr):\n        \"\"\"Parses the mac-address string and returns an int\n        representation of it\n\n        \"\"\"\n        if not isinstance(addr, str):\n            raise TypeError('addr argument must be string or unicode')\n        addr = _clean_hexstring(addr)\n        if len(addr) != MAC_ADDR_NYBBLES:\n            raise ValueError('Mac-address must be %s nybbles long' % MAC_ADDR_NYBBLES)\n\n        addr_bytes = [int(addr[x : x + 2], 16) for x in range(0, len(addr), 2)]\n        addr = sum(n << shift for n, shift in zip(addr_bytes, _SHIFT_RANGE))\n        return addr\n\n    def __str__(self):\n        \"\"\"Return the string representation of this Object.\n\n        >>> ma = MacAddress('e42f3d5')\n        >>> str(ma)\n        'e4:2f:3d:5'\n        >>> ma.__str__()\n        'e4:2f:3d:5'\n        \"\"\"\n        return _int_to_delimited_hexstring(\n            self._addr, self.DEFAULT_DELIM, DELIMS_AND_STEPS[self.DEFAULT_DELIM]\n        )\n\n    def __repr__(self):\n        \"\"\"Print the representation of the Object.\n\n        >>> MacAddress('e4:2f:3d:5')\n        MacAddress('e4:2f:3d:5')\n        \"\"\"\n        return \"MacAddress('%s')\" % _int_to_delimited_hexstring(\n            self._addr, self.DEFAULT_DELIM, DELIMS_AND_STEPS[self.DEFAULT_DELIM]\n        )\n\n    def __lt__(self, other):\n        return self._compare(other, lambda s, o: s < o)\n\n    def __le__(self, other):\n        return self._compare(other, lambda s, o: s <= o)\n\n    def __eq__(self, other):\n        return self._compare(other, lambda s, o: s == o)\n\n    def __ne__(self, other):\n        return self._compare(other, lambda s, o: s != o)\n\n    def __gt__(self, other):\n        return self._compare(other, lambda s, o: s > o)\n\n    def __ge__(self, other):\n        return self._compare(other, lambda s, o: s >= o)\n\n    def _compare(self, other, method):\n        try:\n            other = self.__class__(other)\n        except ValueError:\n            return NotImplemented\n        else:\n            return method(self._addr, other._addr)\n\n    def __hash__(self):\n        return hash((self.__class__, self._addr))\n\n    def to_string(self, delim=None):\n        \"\"\"Return a mac-address as a string with a given delimiter.\n        The delimiter must be one of the legal delimiters '.', '-' or ':'.\n\n        If no delimiter is given the address is returned as a string\n        without a delimiter.\n        \"\"\"\n        if delim is None:\n            return _int_to_delimited_hexstring(self._addr, '', 2)\n        if delim not in DELIMS_AND_STEPS:\n            raise ValueError('Illegal delimiter')\n        return _int_to_delimited_hexstring(self._addr, delim, DELIMS_AND_STEPS[delim])\n\n\nclass MacPrefix(object):\n    \"\"\"Represents the prefix of a range of MacAddress objects.\n\n    Prefixes are allowed on nybble boundaries, but must contain at least 6\n    nybbles to be valid. I.e. \"00-ab-cd-e\" is a valid prefix,\n    but \"00-ab-c\" is not.\n\n    A MacPrefix behaves like a list; len(prefix) will report how many\n    addresses are represented by the prefix. The first address is accessible\n    as prefix[0] and so on.\n\n    \"\"\"\n\n    MIN_PREFIX_LEN = 6\n\n    def __init__(self, prefix, min_prefix_len=MIN_PREFIX_LEN):\n        prefix = _clean_hexstring(str(prefix))\n\n        self._mask_len = len(prefix)\n        if self._mask_len < min_prefix_len:\n            raise ValueError(\n                \"MacPrefix must be at least %s nybbles long\" % min_prefix_len\n            )\n        if self._mask_len > MAC_ADDR_NYBBLES:\n            raise ValueError(\n                \"MacPrefix must be no longer than %s nybbles\" % MAC_ADDR_NYBBLES\n            )\n\n        self._base = MacAddress(prefix.ljust(MAC_ADDR_NYBBLES, '0'))\n\n    @classmethod\n    def from_octets(cls, binary_mac):\n        \"\"\"Creates a MacPrefix from a binary octet string\"\"\"\n        return cls(octets_to_hexstring(binary_mac))\n\n    def __len__(self):\n        \"\"\"Returns the number of MacAddresses contained in this prefix.\n\n        >>> ma = MacPrefix('e4:23:1d:7e:de:03')\n        >>> len(ma)\n        1\n        >>> ma = MacPrefix('e4:23:1d:7e:de:3')\n        >>> len(ma)\n        16\n        >>> ma = MacPrefix('e4:23:1d:7e:de')\n        >>> len(ma)\n        256\n        \"\"\"\n        unset_nybbles = MAC_ADDR_NYBBLES - self._mask_len\n        return 2 ** (unset_nybbles * NUM_BITS_IN_NYBBLE)\n\n    def __getitem__(self, key):\n        \"\"\"Called to implement evaluation of self[key].\n\n        >>> ma = MacPrefix('e4:23:1d')\n        >>> for x in ma:\n        ...   print(repr(x))\n        ...\n        MacAddress('e4:23:1d:00:00:00')\n        MacAddress('e4:23:1d:00:00:01')\n        MacAddress('e4:23:1d:00:00:02')\n        MacAddress('e4:23:1d:00:00:03')\n                     ...\n        MacAddress('e4:23:1d:ff:ff:ff')\n        >>> ma[2]\n        MacAddress('e4:23:1d:00:00:02')\n        >>> ma[11]\n        MacAddress('e4:23:1d:00:00:0b')\n        >>> ma[-1]\n        MacAddress('e4:23:1d:ff:ff:ff')\n        \"\"\"\n        if not isinstance(key, int):\n            raise TypeError\n        if key < 0:\n            if abs(key) <= len(self):\n                key = len(self) - abs(key)\n            else:\n                raise IndexError\n        else:\n            if key >= len(self):\n                raise IndexError\n        return MacAddress(self._base.toint() + int(key))\n\n    def __str__(self):\n        base = str(self._base)\n        digitpos = [pos for pos, char in enumerate(base) if char in string.hexdigits]\n        digitpos = digitpos[self._mask_len - 1]\n        base = base[: digitpos + 1]\n        return base.rstrip(''.join(DELIMS_AND_STEPS.keys()))\n\n    def __repr__(self):\n        return \"MacPrefix(%r)\" % str(self)\n\n\n# Helper functions used by both classes\n\n\ndef _clean_hexstring(hexstr):\n    stripped = ''.join(\n        i for i in hexstr.strip().replace(\" \", \"\") if i not in DELIMS_AND_STEPS\n    )\n    if not MAC_ADDRESS_PATTERN.match(stripped):\n        raise ValueError(\"Not a valid hexadecimal string: %s\" % hexstr)\n    return stripped\n\n\ndef _int_to_delimited_hexstring(mac_addr, delim, step):\n    \"\"\"Formats a long value to a delimited hexadecimal string\"\"\"\n    mac_addr = '%x' % mac_addr\n    mac_addr = mac_addr.rjust(MAC_ADDR_NYBBLES, '0')\n    return delim.join(mac_addr[x : x + step] for x in range(0, len(mac_addr), step))\n\n\ndef octets_to_hexstring(octets):\n    \"\"\"Converts an octet string to a printable hexadecimal string\"\"\"\n    if isinstance(octets, bytes):\n        return ''.join(\"%02x\" % byte for byte in octets)\n    else:\n        return ''.join(\"%02x\" % ord(byte) for byte in octets)\n"
  },
  {
    "path": "python/nav/mailin/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MailIn\n\nE-Mail to NAV event/alert translator.\n\n\"\"\"\n\nimport nav\nimport nav.event\n\n\ndef make_event(**kw):\n    \"\"\"Shortcut to make an event with mailin as source and eventEngine as\n    target.\n\n    Keyword arguments are the same as for nav.event.Event().\n\n    \"\"\"\n    return nav.event.Event(source='mailin', target='eventEngine', **kw)\n\n\nclass Plugin(object):\n    \"\"\"Abstract base class for mailin plugin.\n\n    Subclass this and override the init(), accept(),\n    authorize() and process() methods.\n    \"\"\"\n\n    def __init__(self, name, config, logger):\n        self.name = name\n        self.config = config\n        self.logger = logger\n        self.init()\n\n    #\n    # These methods are meant to be overriden.\n    #\n\n    def init(self):\n        \"\"\"Plugin specific initialization.\"\"\"\n        raise NotImplementedError\n\n    def accept(self, msg):\n        \"\"\"Returns True if the plugin wants to process the message.\"\"\"\n        raise NotImplementedError\n\n    def authorize(self, msg):\n        \"\"\"Returns True if the message is authorized by the plugin.\n        (This method typically checks the From and Reveiced headers.)\"\"\"\n        raise NotImplementedError\n\n    def process(self, msg):\n        \"\"\"Process the message.\n        Called if accept() and authorize() both return True.\n        Returns True if the plugin posted one or more events.\n        \"\"\"\n        raise NotImplementedError\n"
  },
  {
    "path": "python/nav/mailin/plugins/__init__.py",
    "content": "\"\"\"MailIn plugin modules.\"\"\"\n"
  },
  {
    "path": "python/nav/mailin/plugins/kake.py",
    "content": "import nav.event\nimport nav.mailin\n\n\nclass Plugin(nav.mailin.Plugin):\n    def init(self):\n        nav.event.create_type_hierarchy(\n            {\n                ('kake', 'Kake paa pauserommet!', False): [\n                    ('kake', 'kake paa pauserommet')\n                ]\n            }\n        )\n\n    def accept(self, msg):\n        return 'kake' in msg['Subject'].lower()\n\n    def process(self, msg):\n        body = msg.get_payload()\n        body = body.decode('iso-8859-1').encode('utf-8')  # Temporary fix\n\n        event = nav.mailin.make_event(eventtypeid='mailinKake')\n        event['subject'] = msg['Subject']\n        event['body'] = body\n\n        return event\n"
  },
  {
    "path": "python/nav/mailin/plugins/whatsup.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"\nForward alerts from Whatsup.\n\nThis just forwards the message directly using two variables: $subject\nand $body. The formatting of the message is done in WhatsUp.\n\"\"\"\n\nimport nav.mailin\n\n\nclass Plugin(nav.mailin.Plugin):\n    def init(self):\n        nav.event.create_type_hierarchy(\n            {\n                ('whatsup', 'Alert from WhatsUp', False): [\n                    ('whatsup', 'Alert from WhatUp')\n                ]\n            }\n        )\n\n    def accept(self, msg):\n        return msg['From'] == '<ita_wu@asp.uit.no>'\n\n    def authorize(self, msg):\n        return msg['Received'].endswith('.uit.no')\n\n    def process(self, msg):\n        body = msg.get_payload()\n        body = body.decode('iso-8859-1').encode('utf-8')  # Temporary fix\n\n        event = nav.mailin.make_event(eventtypeid='mailinWhatsup')\n        event['subject'] = msg['Subject']\n        event['body'] = body\n\n        return event\n"
  },
  {
    "path": "python/nav/maintengine.py",
    "content": "# -*- coding: utf-8 -*-\n# Copyright (C) 2012-2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nNAV Maintenance Engine.\n\nThis module deals with enforcing the maintenance schedule by transitioning\nthe state of registered maintenance tasks and dispatching maintenance events\nto the event queue.\n\n\"\"\"\n\nimport datetime\nimport logging\n\nfrom django.db import transaction\nfrom django.db.models import Q\n\nfrom nav.models import manage, service\nfrom nav.models.event import EventQueue as Event, AlertHistory\nfrom nav.models.msgmaint import MaintenanceTask\n\nINFINITY = datetime.datetime.max\n\n# The devices must have been up for at least this time before\n# ending a maintenance task without a specified end.\nMINIMUM_UPTIME = datetime.timedelta(minutes=60)\n\n_logger = logging.getLogger('nav.maintengine')\n\n\n@transaction.atomic()\ndef schedule():\n    \"\"\"Changes invalid task states to 'scheduled'\"\"\"\n    tasks = MaintenanceTask.objects.filter(\n        Q(state__isnull=True) | ~Q(state__in=[s[0] for s in MaintenanceTask.STATES])\n    )\n    tasks.update(state=MaintenanceTask.STATE_SCHEDULED)\n\n\n@transaction.atomic()\ndef check_tasks_without_end():\n    \"\"\"\n    Ends all endless maintenance tasks whose event subjects have all been up\n    for longer than the set minimum time.\n    \"\"\"\n    for task in MaintenanceTask.objects.endless().filter(\n        state=MaintenanceTask.STATE_ACTIVE\n    ):\n        currently_or_too_recently_down = []\n        threshold = datetime.datetime.now() - MINIMUM_UPTIME\n        for subject in task.get_event_subjects():\n            end_time = subject.last_downtime_ended() if subject else None\n            if end_time and end_time > threshold:\n                currently_or_too_recently_down.append(subject)\n\n        if currently_or_too_recently_down:\n            _logger.debug(\n                \"Endless maintenance task %d: Things that haven't been up \"\n                \"longer than the threshold: %r\",\n                task.id,\n                currently_or_too_recently_down,\n            )\n        else:\n            now = datetime.datetime.now()\n            _logger.debug(\n                \"Endless maintenance task %d: All components have been up \"\n                \"longer than the threshold, setting end time to %s\",\n                task.id,\n                now,\n            )\n            task.end_time = now\n            task.save()\n\n\n@transaction.atomic()\ndef do_state_transitions():\n    \"\"\"Finds active or scheduled tasks that have run out and sets them as passed,\n    and finds scheduled tasks in the current window and sets them as active.\n    \"\"\"\n    tasks = MaintenanceTask.objects.past().filter(\n        state__in=[MaintenanceTask.STATE_ACTIVE, MaintenanceTask.STATE_SCHEDULED]\n    )\n    tasks.update(state=MaintenanceTask.STATE_PASSED)\n\n    _logger.debug(\"Tasks transitioned to passed state: %r\", tasks)\n\n    tasks = MaintenanceTask.objects.current().filter(\n        state=MaintenanceTask.STATE_SCHEDULED\n    )\n    tasks.update(state=MaintenanceTask.STATE_ACTIVE)\n\n    _logger.debug(\"Tasks transitioned to active state: %r\", tasks)\n\n    cancel_tasks_without_components()\n\n\ndef cancel_tasks_without_components():\n    \"\"\"Cancels active tasks where all components are missing\"\"\"\n    tasks = MaintenanceTask.objects.filter(\n        state=MaintenanceTask.STATE_ACTIVE\n    ).prefetch_related('maintenance_components')\n    for task in tasks:\n        if not any(task.get_components()):\n            task.state = MaintenanceTask.STATE_CANCELED\n            task.save()\n            _logger.debug(\"Task %r canceled because all components were missing\", task)\n\n\ndef check_state_differences():\n    \"\"\"\n    Checks what should have been on maintenance from MaintenanceTask against\n    what actually is on maintenance from AlertHistory, then creates events\n    based on this.\n    \"\"\"\n    # Find out what should have been on maintenance\n    should_be_on_maintenance = set()\n    task_subject_mapper = {}\n\n    for task in MaintenanceTask.objects.filter(state=MaintenanceTask.STATE_ACTIVE):\n        for subject in task.get_event_subjects():\n            task_subject_mapper[subject] = task.id\n            should_be_on_maintenance.add(subject)\n\n    # Find out what is on maintenance\n    is_on_maintenance = set()\n\n    for alert in AlertHistory.objects.unresolved('maintenanceState'):\n        subject = alert.get_subject()\n        is_on_maintenance.add(subject)\n\n    # Set on maintenance that which is not and should be\n    to_be_put_on_maintenance = should_be_on_maintenance - is_on_maintenance\n    _logger.debug(\n        \"Subjects that should be on maintenance but weren't: %r\",\n        to_be_put_on_maintenance,\n    )\n\n    for subject in to_be_put_on_maintenance:\n        create_event(\n            subject,\n            state=Event.STATE_START,\n            value=100,\n            taskid=task_subject_mapper[subject],\n        )\n\n    # Set off maintenance that which is and should not be\n    to_be_taken_off_maintenance = is_on_maintenance - should_be_on_maintenance\n    _logger.debug(\n        \"Subjects that should not be on maintenance but were: %r\",\n        to_be_taken_off_maintenance,\n    )\n\n    for subject in to_be_taken_off_maintenance:\n        create_event(subject, state=Event.STATE_END, value=0)\n\n\n@transaction.atomic()\ndef create_event(subject, state, value, taskid=None):\n    \"\"\"\n    Adds events to the EventQueue that starts or ends maintenance tasks based\n    on a given subject and state.\n    \"\"\"\n    target = 'eventEngine'\n    subsystem = 'maintenance'\n    source = subsystem\n    severity = 5\n    eventtype = 'maintenanceState'\n\n    event = Event(state=state, value=value, severity=severity)\n\n    varmap = {}\n\n    event.event_type_id = eventtype\n    event.target_id = target\n    event.source_id = source\n\n    if isinstance(subject, manage.Netbox):\n        event.netbox = subject\n        event.device = subject.device\n\n        varmap['netbox'] = subject.sysname\n\n    elif isinstance(subject, service.Service):\n        event.subid = subject.id\n        event.netbox = subject.netbox\n        event.device = subject.netbox.device\n\n        varmap['service'] = subject.handler\n        varmap['servicename'] = subject.handler\n\n    if taskid:\n        varmap['maint_taskid'] = taskid\n\n    event.save()\n    event.varmap = varmap\n\n    _logger.debug(\"Event posted: %r\", event)\n\n\ndef check_devices_on_maintenance():\n    \"\"\"Start the main logic for checking maintenance tasks.\"\"\"\n    schedule()\n    check_tasks_without_end()\n    do_state_transitions()\n    check_state_differences()\n"
  },
  {
    "path": "python/nav/metrics/__init__.py",
    "content": "# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThis package encompasses all NAV APIs to send and retrieve metrics and\ngraphs from Graphite.\n\"\"\"\n\nfrom nav.config import NAVConfigParser\n\n\nclass GraphiteConfigParser(NAVConfigParser):\n    \"\"\"Parser for NAV's graphite related configuration\"\"\"\n\n    DEFAULT_CONFIG_FILES = ['graphite.conf']\n    DEFAULT_CONFIG = \"\"\"\n[carbon]\nhost = 127.0.0.1\nport = 2003\n\n[graphiteweb]\nbase=http://localhost:8000/\nformat=png\n\"\"\"\n\n\nCONFIG = GraphiteConfigParser()\nCONFIG.read_all()\n"
  },
  {
    "path": "python/nav/metrics/carbon.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThis module implements various common API to send metrics to a\nGraphite/Carbon backend. It currently only supports the UDP line protocol,\nas it's the easiest to implement, and will also work without vodoo in\nasynchronous programs (i .e. such as ipdevpoll, which is implemented using\nTwisted).\n\"\"\"\n\nimport logging\nimport socket\nimport time\nimport warnings\nfrom nav.metrics import CONFIG\n\n_logger = logging.getLogger(__name__)\n_error_timestamp = 0\n\n# Maximum payload to allow for a UDP packet containing metrics destined for\n# Graphite. A value of 1472 should be ok to stay within the standard ethernet\n# MTU of 1500 bytes using IPv4. Larger values will cause packet\n# fragmentation, but should still work.\nMAX_UDP_PAYLOAD = 1400\n\n# Minimum interval between socket error log entries, in seconds\nSOCKET_ERROR_MESSAGE_INTERVAL = 1\n\n\nclass CarbonWarning(UserWarning):\n    \"\"\"Custom warning class for Carbon connection related warnings\"\"\"\n\n    pass\n\n\ndef send_metrics_to(metric_tuples, host, port=2003):\n    \"\"\"\n    Sends a list of metric tuples to a carbon backend.\n\n    :param metric_tuples: A list of metric tuples in the form\n                          [(path, (timestamp, value)), ...]\n    :param host: IP address of the carbon backend\n    :param port: The carbon backend UDP port\n\n    \"\"\"\n    global carbon\n    try:\n        carbon\n    except NameError:\n        carbon = socket.socket(_socktype_from_addr(host), socket.SOCK_DGRAM)\n        carbon.connect((host, port))\n\n    _logger.debug(\"sending carbon metrics to [%s]:%s: %r\", host, port, metric_tuples)\n    try:\n        for packet in metrics_to_packets(metric_tuples):\n            carbon.send(packet)\n    except socket.error as error:\n        _handle_error(error, host, port)\n\n\ndef _handle_error(error, host, port):\n    \"\"\"\n    Logs Carbon connection errors, but never more frequently than\n    SOCKET_ERROR_MESSAGE_INTERVAL seconds.\n    \"\"\"\n    global _error_timestamp\n    root = logging.getLogger('')\n    msg = \"unable to send metrics to carbon ([%s]:%s): %s\" % (host, port, error)\n\n    if _error_timestamp < time.time() - SOCKET_ERROR_MESSAGE_INTERVAL:\n        # Reset the timestamp of the last logged socket error\n        _error_timestamp = time.time()\n\n        _logger.error(msg)\n\n        if not root.handlers:\n            # When logging appears disabled, use the warnings system\n            _reset_warning_registry()\n            warnings.warn(msg, CarbonWarning)\n\n\n# The __warningregistry__ global is only available after the first warning has\n# been issued.\ndef _reset_warning_registry():\n    try:\n        __warningregistry__\n    except NameError:\n        pass\n    else:\n        for key in __warningregistry__.keys():  # noqa\n            _, cls, _ = key\n            if cls is CarbonWarning:\n                del __warningregistry__[key]  # noqa\n\n\ndef send_metrics(metric_tuples):\n    \"\"\"Sends a list of metric tuples to the pre-configured carbon backend.\n\n    :param metric_tuples: A list of metric tuples in the form\n                          [(path, (timestamp, value)), ...]\n\n    \"\"\"\n    host = CONFIG.get(\"carbon\", \"host\")\n    port = CONFIG.getint(\"carbon\", \"port\")\n    return send_metrics_to(metric_tuples, host, port)\n\n\ndef _socktype_from_addr(addr):\n    info = socket.getaddrinfo(addr, 0)\n    socktype = info[0][0]\n    return socktype\n\n\ndef _metric_to_line(metric_tuple):\n    path, (timestamp, value) = metric_tuple\n    line = \"%s %s %s\\n\" % (path, value, int(timestamp))\n    return line.encode('utf-8')\n\n\ndef metrics_to_packets(metric_tuples):\n    \"\"\"\n    Converts a list of metric tuples to a series of Graphite/Carbon\n    protocol packets ready to transmit over the wire (UDP) to a Carbon backend.\n\n    :param metric_tuples: A list of metric tuples in the form\n                          [(path, (timestamp, value)), ...]\n\n    :return: A generator that yields a series of payload packets to send to a\n             Carbon backend.\n\n    \"\"\"\n    output = bytearray()\n    for metric in metric_tuples:\n        line = _metric_to_line(metric)\n        if len(output) + len(line) > MAX_UDP_PAYLOAD:\n            packet = bytes(output)\n            yield packet\n            del output[:]\n\n        output.extend(line)\n\n    if output:\n        packet = bytes(output)\n        yield packet\n"
  },
  {
    "path": "python/nav/metrics/data.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Retrieval and calculations on raw numbers from Graphite metrics\"\"\"\n\nimport codecs\nfrom datetime import datetime\nimport json\nimport logging\nfrom urllib.parse import urlencode, urljoin\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError, URLError\n\nfrom nav.metrics import CONFIG, errors\nfrom nav.metrics.templates import (\n    metric_path_for_packet_loss,\n    metric_path_for_roundtrip_time,\n)\nfrom nav.util import chunks\n\n_logger = logging.getLogger(__name__)\n\nMAX_TARGETS_PER_REQUEST = 100\nGRAPHITE_TIME_FORMAT = \"%H:%M_%Y%m%d\"\n\n\ndef get_metric_average(target, start=\"-5min\", end=\"now\", ignore_unknown=True):\n    \"\"\"Calculates the average value of a metric over a given period of time\n\n    :param target: A metric path string or a list of multiple metric paths\n    :param start: A start time specification that Graphite will accept.\n    :param end: An end time specification that Graphite will accept.\n    :param ignore_unknown: Ignore unknown values when calculating the average.\n                           Unless True, any unknown data in the series will\n                           result in an average value of None.\n    :returns: A dict of {target: average_value} items. Targets that weren't\n              found in Graphite will not be present in the dict.\n\n    \"\"\"\n    start_time = datetime.now()\n\n    data = get_metric_data(target, start, end)\n    result = {}\n    for target in data:\n        dpoints = [\n            d[0] for d in target['datapoints'] if not (ignore_unknown and d[0] is None)\n        ]\n        if dpoints:\n            if None in dpoints:\n                avg = None\n            else:\n                avg = sum(dpoints) / len(dpoints)\n            result[target['target']] = avg\n\n    _logger.debug(\n        'Got metric average for %s targets in %s seconds',\n        len(data),\n        datetime.now() - start_time,\n    )\n    return result\n\n\ndef get_metric_max(target, start=\"-5min\", end=\"now\"):\n    data = get_metric_data(target, start, end)\n    result = {}\n    for target in data:\n        dpoints = [d[0] for d in target['datapoints'] if d[0] is not None]\n        if dpoints:\n            if None in dpoints:\n                maximum = None\n            else:\n                maximum = max(dpoints)\n            result[target['target']] = maximum\n    return result\n\n\ndef get_metric_data(target, start=\"-5min\", end=\"now\"):\n    \"\"\"\n    Retrieves raw datapoints from a graphite target for a given period of time.\n\n    :param target: A metric path string or a list of multiple metric paths\n    :param start: A start time specification that Graphite will accept.\n    :param end: An end time specification that Graphite will accept.\n\n    :returns: A raw, response from Graphite. Normally a list of dicts that\n              represent the names and datapoints of each matched target,\n              like so::\n\n                  [{'target': 'x', 'datapoints': [(value, timestamp), ...]}]\n\n    \"\"\"\n    if not target:\n        return []  # no point in wasting time on http requests for no data\n\n    base = CONFIG.get(\"graphiteweb\", \"base\")\n    url = urljoin(base, \"/render/\")\n\n    # What does Graphite accept of formats? Lets check if the parameters are\n    # datetime objects and try to force a format then\n    if isinstance(start, datetime):\n        start = start.strftime(GRAPHITE_TIME_FORMAT)\n    if isinstance(end, datetime):\n        end = end.strftime(GRAPHITE_TIME_FORMAT)\n\n    query = {\n        'target': target,\n        'from': start,\n        'until': end,\n        'format': 'json',\n    }\n    query = urlencode(query, True)\n\n    _logger.debug(\"get_metric_data%r\", (target, start, end))\n    req = Request(url, data=query.encode('utf-8'))\n    try:\n        response = urlopen(req)\n        json_data = json.load(codecs.getreader('utf-8')(response))\n        _logger.debug(\"get_metric_data: returning %d results\", len(json_data))\n        return json_data\n    except HTTPError as err:\n        _logger.error(\n            \"Got a 500 error from graphite-web when fetching %swith data %s\",\n            err.url,\n            query,\n        )\n        _logger.error(\"Graphite output: %s\", err.fp.read())\n        raise errors.GraphiteUnreachableError(\"{0} is unreachable\".format(base), err)\n    except URLError as err:\n        raise errors.GraphiteUnreachableError(\"{0} is unreachable\".format(base), err)\n    except ValueError:\n        # response could not be decoded\n        return []\n    finally:\n        try:\n            response.close()\n        except NameError:\n            pass\n\n\nDEFAULT_TIME_FRAMES = ('day', 'week', 'month')\nDEFAULT_DATA_SOURCES = ('availability', 'response_time')\nMETRIC_PATH_LOOKUP = {\n    'availability': metric_path_for_packet_loss,\n    'response_time': metric_path_for_roundtrip_time,\n}\n\n\ndef get_netboxes_availability(\n    netboxes,\n    data_sources=DEFAULT_DATA_SOURCES,\n    time_frames=DEFAULT_TIME_FRAMES,\n    start_time=None,\n    end_time=None,\n):\n    \"\"\"Calculates and returns an availability data structure for a list of\n    netboxes.\n\n    :type netboxes: list[Netbox] | QuerySet[Netbox]\n    :type data_sources: list[str]\n    :type time_frames: list[str]\n    \"\"\"\n    if not netboxes:\n        return {}\n\n    assert all(x in DEFAULT_TIME_FRAMES for x in time_frames)\n    assert all(x in DEFAULT_DATA_SOURCES for x in data_sources)\n\n    result = {}\n    targets = []\n\n    for netbox in netboxes:\n        result[netbox.id] = {}\n        for data_source in data_sources:\n            metric_resolver = METRIC_PATH_LOOKUP[data_source]\n            data_source_id = metric_resolver(netbox.sysname)\n            targets.append(data_source_id)\n\n            result[netbox.id][data_source] = {\n                'data_source': data_source_id,\n            }\n\n    if start_time:\n        populate_for_interval(result, targets, netboxes, start_time, end_time)\n    else:\n        populate_for_time_frame(result, targets, netboxes, time_frames)\n\n    return result\n\n\ndef populate_for_interval(result, targets, netboxes, start_time, end_time):\n    \"\"\"Populate results based on a time interval\"\"\"\n    avg = {}\n    for request in chunks(targets, MAX_TARGETS_PER_REQUEST):\n        avg.update(get_metric_average(request, start=start_time, end=end_time))\n\n    for netbox in netboxes:\n        root = result[netbox.id]\n\n        # Availability\n        if 'availability' in root:\n            pktloss = avg.get(root['availability']['data_source'])\n            if pktloss is not None:\n                pktloss = 100 - (pktloss * 100)\n            root['availability'] = pktloss\n\n        # Response time\n        if 'response_time' in root:\n            root['response_time'] = avg.get(root['response_time']['data_source'])\n\n\ndef populate_for_time_frame(result, targets, netboxes, time_frames):\n    \"\"\"Populate results based on a list of time frames\"\"\"\n    for time_frame in time_frames:\n        avg = {}\n        for request in chunks(targets, MAX_TARGETS_PER_REQUEST):\n            avg.update(get_metric_average(request, start=\"-1%s\" % time_frame))\n\n        for netbox in netboxes:\n            root = result[netbox.id]\n\n            # Availability\n            if 'availability' in root:\n                pktloss = avg.get(root['availability']['data_source'])\n                if pktloss is not None:\n                    pktloss = 100 - (pktloss * 100)\n                root['availability'][time_frame] = pktloss\n\n            # Response time\n            if 'response_time' in root:\n                root['response_time'][time_frame] = avg.get(\n                    root['response_time']['data_source']\n                )\n"
  },
  {
    "path": "python/nav/metrics/errors.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Graphite related exception classes\"\"\"\n\n\nclass GraphiteUnreachableError(Exception):\n    \"\"\"The graphite-web API is unreachable\"\"\"\n\n    def __init__(self, msg, cause=None):\n        super(GraphiteUnreachableError, self).__init__(msg + \" (%s)\" % cause)\n        self.cause = cause\n"
  },
  {
    "path": "python/nav/metrics/graphs.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Getting graphs of NAV-collected data from Graphite\"\"\"\n\nimport re\n\nfrom django.urls import reverse\nfrom urllib.parse import urlencode\n\n\nTIMETICKS_IN_DAY = 100 * 3600 * 24\nTARGET_TOKENS = re.compile(r'[\\w\\-*?]+|[(){}\\[\\]]|,|\\.')\n\n\ndef get_sensor_meta(metric_path):\n    \"\"\"\n    Returns meta information for drawing a Sensor metric graph annotated with\n    the correct yUnits, among other things.\n    \"\"\"\n\n    from nav.models.manage import Sensor\n    from nav.metrics.lookup import lookup\n\n    sensor = lookup(metric_path)\n    if not sensor:\n        return dict()\n    assert isinstance(sensor, Sensor)\n\n    alias = (\n        sensor.human_readable.replace(\"\\n\", \" \")\n        if sensor.human_readable\n        else sensor.name\n    )\n    meta = dict(alias=alias)\n    scale = (\n        sensor.get_data_scale_display()\n        if sensor.data_scale != sensor.SCALE_UNITS\n        else None\n    ) or ''\n    uom = (\n        sensor.unit_of_measurement\n        if sensor.unit_of_measurement != sensor.UNIT_OTHER\n        else None\n    ) or ''\n    meta['unit'] = scale + uom\n    return meta\n\n\nMETA_LOOKUPS = (\n    # Various counter type values\n    (\n        re.compile(r'\\.ports\\.(?P<ifname>[^\\.]+)\\.(?P<counter>[^\\.,\\)]+)$'),\n        dict(alias='{ifname} {counter}'),\n    ),\n    (\n        re.compile(r'\\.if[^.()]+Octets(IPv6)?$'),\n        dict(\n            transform=\"scaleToSeconds(nonNegativeDerivative(scale({id},8)),1)\",\n            unit=\"bits/s\",\n        ),\n    ),\n    (\n        re.compile(r'\\.if(In|Out)Errors$'),\n        dict(\n            transform=\"scaleToSeconds(nonNegativeDerivative({id}),1)\", unit=\"errors/s\"\n        ),\n    ),\n    (\n        re.compile(r'\\.if(In|Out)[^\\.]*(Pkts|Discards)$'),\n        dict(\n            transform=\"scaleToSeconds(nonNegativeDerivative({id}),1)\", unit=\"packets/s\"\n        ),\n    ),\n    (\n        re.compile(r'\\.sysuptime$'),\n        dict(transform=\"scale({id},%.20f)\" % (1.0 / TIMETICKS_IN_DAY), unit=\"days\"),\n    ),\n    (re.compile(r'\\.sensors\\.'), get_sensor_meta),\n    (re.compile(r'\\.loadavg[0-9]+min$'), dict(unit=\"%\")),\n    (re.compile(r'_percent$'), dict(unit=\"%\")),\n    # Memory\n    (\n        re.compile(r'devices\\.(?P<sysname>[^_]+)[^.]+\\.memory\\..*\\.used$'),\n        dict(\n            unit=\"bytes\", yUnitSystem=\"binary\", title=\"Used memory\", alias=\"{sysname}\"\n        ),\n    ),\n    (\n        re.compile(r'devices\\.(?P<sysname>[^_]+)[^.]+\\.memory\\..*\\.free$'),\n        dict(\n            unit=\"bytes\", yUnitSystem=\"binary\", title=\"Free memory\", alias=\"{sysname}\"\n        ),\n    ),\n    (re.compile(r'\\.(roundTripTime|responseTime)$'), dict(unit=\"seconds\")),\n    (\n        re.compile(r'devices\\.(?P<sysname>[^_]+)[^.]+\\.ping\\.roundTripTime$'),\n        dict(alias=\"{sysname}\", title=\"Ping packet round trip time\"),\n    ),\n    (\n        re.compile(r'devices\\.(?P<sysname>[^_]+)[^.]+\\.ping\\.packetLoss$'),\n        dict(alias=\"{sysname}\", title=\"Ping packet loss\", unit=\"packets\"),\n    ),\n    # Sysuptime\n    (\n        re.compile(r'devices\\.(?P<sysname>[^_]+)[^.]+\\..*\\.sysuptime$'),\n        dict(alias=\"{sysname}\", title=\"Uptime\", unit=\"days\"),\n    ),\n    (re.compile(r'\\.ipdevpoll\\..*\\.runtime$'), dict(transform=\"keepLastValue({id})\")),\n)\n\n\nclass Graph(object):\n    \"\"\"Builds a Graphite render URL for a graph.\n\n    Instances of this class can be manipulated to produce the desired graph,\n    whereas the URL to the currently represented graph can be retrieved by\n    coercing the instances to a string or unicode object.\n\n    \"\"\"\n\n    def __init__(\n        self,\n        title='',\n        width=480,\n        height=250,\n        targets=None,\n        magic_targets=None,\n        **kwargs,\n    ):\n        self.args = dict(template='nav', width=width, height=height)\n        self.args.update(kwargs)\n        if title:\n            self.args['title'] = title\n\n        if targets:\n            for target in targets:\n                self.add_target(target)\n\n        if magic_targets:\n            for target in magic_targets:\n                self.add_magic_target(target)\n\n    def __str__(self):\n        return reverse(\"graphite-render\") + \"?\" + urlencode(self.args, True)\n\n    def __repr__(self):\n        return '<{cls} {args!r}>'.format(cls=self.__class__.__name__, args=self.args)\n\n    def set_timeframe(self, timeframe):\n        \"\"\"Sets the graph timeframe in terms relative to the current time.\n\n        :param timeframe: An interval that matches Graphite syntax,\n                          e.g. '1min', '1day', '24h'. The Graph's 'from'\n                          argument will be set to a negative version of this,\n                          while the graph's 'until' argument will be set to\n                          'now'.\n        :type timeframe: basestring\n        \"\"\"\n        self.args['from'] = '-%s' % timeframe\n        self.args['until'] = 'now'\n\n    def add_target(self, target):\n        \"\"\"Adds a raw target to the graph\"\"\"\n        self.args.setdefault('target', []).append(target)\n\n    def add_magic_target(self, target):\n        \"\"\"\n        Adds a target to the graph, but uses the magic lookups in\n        META_LOOKUPS to possibly transform the target using Graphite\n        functions and to possibly change some parameters of the graph itself.\n\n        :type target: basestrng\n        :returns: The (possibly) modified target.\n\n        \"\"\"\n        meta = get_metric_meta(target)\n        target = meta['target']\n        if meta['alias']:\n            # turns out graphite-web cannot handle non-ascii characters in\n            # aliases. we replace them here so we at least get a graph.\n            #\n            # https://github.com/graphite-project/graphite-web/issues/238\n            # https://github.com/graphite-project/graphite-web/pull/480\n            alias = meta['alias'].encode('ascii', 'replace').decode(\"ascii\")\n            target = 'alias({target}, \"{alias}\")'.format(target=target, alias=alias)\n\n        self.args.setdefault('target', []).append(target)\n        if meta['unit']:\n            self.args['vtitle'] = meta['unit']\n        if meta['yUnitSystem']:\n            self.args['yUnitSystem'] = meta['yUnitSystem']\n        if 'title' in meta:\n            self.args['title'] = meta['title']\n\n        return target\n\n\ndef get_simple_graph_url(\n    metric_paths,\n    time_frame=\"1day\",\n    title=None,\n    width=480,\n    height=250,\n    magic=True,\n    **kwargs,\n):\n    \"\"\"\n    Returns an URL, fetchable by an end user, to render a simple graph,\n    given a Graphite metric known to NAV\n\n    :param metric_paths: One or more graphite metric paths.\n    :param time_frame: A time frame for the graph, expressed in units that\n                       Graphite can understand, e.g. \"6 hours\", \"1 day\" or\n                       \"2 weeks\"\n    :param title: A caption to print above the graph.\n    :param width: The graph width in pixels.\n    :param height: The graph height in pixels.\n    :param magic: Use magic targets\n    :return: The URL that will generate the requested graph.\n\n    \"\"\"\n    if isinstance(metric_paths, str):\n        metric_paths = [metric_paths]\n\n    target_spec = (\n        {'magic_targets': metric_paths} if magic else {'targets': metric_paths}\n    )\n    graph = Graph(title=title, width=width, height=height, **target_spec)\n    graph.set_timeframe(time_frame)\n\n    if kwargs:\n        graph.args.update(kwargs)\n\n    return str(graph)\n\n\ndef get_metric_meta(metric_path):\n    \"\"\"\n    Returns a dict with meta information about a given metric path,\n    retrieved from various sources.\n\n    :returns: A dict(id=..., transform=..., target=,..., unit=..., alias=...)\n              where `id` equals the given metric path, `transform` is a string\n              template that can be used to transform the metric using graphite\n              functions, `target` is the transformed metric path that will\n              can be used as a graph target, `unit` is the unit specification\n              for the resulting target, and `alias` is an alias to use for\n              the metric in a graph legend.\n\n    \"\"\"\n    result = dict(\n        id=metric_path,\n        transform=None,\n        target=metric_path,\n        unit=None,\n        description=None,\n        alias=None,\n        yUnitSystem=None,\n    )\n    for pattern, meta in META_LOOKUPS:\n        match = pattern.search(metric_path)\n        if match:\n            result.update(match.groupdict())\n            if callable(meta):\n                meta = meta(metric_path)\n            result.update(meta)\n\n    if result['transform']:\n        result['target'] = result['transform'].format(**result)\n    if result['alias']:\n        result['alias'] = result['alias'].format(**result)\n    return result\n\n\ndef extract_series_name(series):\n    \"\"\"\n    Extracts a series name from a graphite target expression,\n    wildcards included verbatim.\n\n    This is best-effort and is by no means 100% accurate.\n\n    \"\"\"\n    inwild = False\n    buffer = \"\"\n\n    def bufferok(buffer):\n        return len(buffer) > 3 and '.' in buffer\n\n    for tok in TARGET_TOKENS.finditer(series):\n        tok = tok.group()\n        if tok == '(':\n            buffer = \"\"\n        elif tok == ')':\n            if bufferok(buffer):\n                return buffer\n            else:\n                buffer = \"\"\n        elif tok in ('{', '['):\n            inwild = True\n            buffer += tok\n        elif tok == ',':\n            if inwild:\n                buffer += tok\n            elif bufferok(buffer):\n                return buffer\n            else:\n                buffer = \"\"\n        elif tok in ('}', ']'):\n            inwild = False\n            buffer += tok\n        else:\n            buffer += tok\n    return buffer if bufferok(buffer) else series\n\n\ndef translate_serieslist_to_regex(series):\n    \"\"\"Translates a Graphite seriesList expression into a regexp pattern\"\"\"\n\n    def _convert_char(char):\n        if char == '*':\n            return r'[^\\.]*'\n        if char == '?':\n            return '.'\n        elif char == '.':\n            return r'\\.'\n        elif char == '{':\n            return '('\n        elif char == '}':\n            return ')'\n        elif char == ',':\n            return '|'\n        else:\n            return char\n\n    pat = \"\".join(_convert_char(c) for c in series)\n    return re.compile(pat)\n\n\ndef aliased_series(series_list: str, name: str, **meta: str) -> str:\n    \"\"\"\n    Add a name to the supplied series_list.\n    https://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.alias\n\n    Supported keyword arguments:\n    :param color: the css color of the graph\n    :param renderer: Rickshaw graph renderer to use; one of \"area\", \"stack\",\n                     \"bar\", \"line\", or \"scatterplot\"\n    \"\"\"\n    tmpl = \"alias({series_list}, '{name}')\"\n    if len(meta) > 0:\n        # note how key-value pairs from the meta-dict is added in a quite\n        # special way to the resulting name; NAV's custom JavaScript Rickshaw\n        # graph constructor reconstructs the meta-dict and strips it away from\n        # the resulting name before it is displayed. It then uses the meta-dict\n        # to customize the graph, such as adding a specific color attribute\n        name = \";;\".join(f\"{key}={val}\" for key, val in meta.items()) + \";;\" + name\n    return tmpl.format(series_list=series_list, name=name)\n\n\ndef summed_series(*series_list: str) -> str:\n    \"\"\"\n    Sum each series in all supplied series_lists and return as a single series_list.\n    https://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.sumSeries\n    \"\"\"\n    tmpl = \"sumSeries({series_lists})\"\n    return tmpl.format(series_lists=\",\".join(series_list))\n\n\ndef nonempty_series(series_list: str, x_files_factor: float = 0.0) -> str:\n    \"\"\"\n    Out of all metrics in series_list, draw only the metrics with not\n    empty data.\n\n    (A rule of thumb is to use this function if you're dealing with transient\n    metrics, so that they only will be shown in the requested timeframes where\n    they matter.)\n\n    https://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.removeEmptySeries\n    \"\"\"\n    tmpl = \"removeEmptySeries({series_list}, {x_files_factor})\"\n    return tmpl.format(series_list=series_list, x_files_factor=x_files_factor)\n\n\ndef json_graph_url(*series_list: str, title: str) -> str:\n    \"\"\"\n    Create a url for fetching the JSON data necessary to graph the supplied\n    series_lists.\n    \"\"\"\n    return get_simple_graph_url(series_list, format=\"json\", title=title)\n"
  },
  {
    "path": "python/nav/metrics/lookup.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Functions for reverse-mapping metric names to NAV objects\"\"\"\n\nfrom functools import lru_cache\nimport re\n\nfrom nav.models.manage import Netbox, Interface, Prefix, Sensor\n\n\n__all__ = ['reverses', 'lookup']\n_reverse_handlers = []\n\n\n@lru_cache(maxsize=200)\ndef lookup(metric):\n    \"\"\"\n    Looks up a NAV object from a metric path.\n\n    :param metric: A Graphite metric path.\n    :type metric: str\n    :return: If a match was found, a Model instance from any model in the\n             nav.models package.\n\n    \"\"\"\n    for pattern, func in _reverse_handlers:\n        match = pattern.search(metric)\n        if match:\n            return func(**match.groupdict())\n\n\ndef reverses(pattern):\n    \"\"\"Decorator to map regex patterns to reverse lookup functions\"\"\"\n    try:\n        pattern.pattern\n    except AttributeError:\n        pattern = re.compile(pattern)\n\n    def _decorator(func):\n        _reverse_handlers.append((pattern, func))\n        return func\n\n    return _decorator\n\n\n### Reverse lookup functions\n\n\n@reverses(r'\\.devices\\.(?P<sysname>[^.]+)\\.ports\\.(?P<ifname>[^\\.]+)')\ndef _reverse_interface(sysname, ifname):\n    return _single_like_match(\n        Interface, related=['netbox'], sysname=sysname, ifname=ifname\n    ) or _single_like_match(\n        Interface, related=['netbox'], sysname=sysname, ifdescr=ifname\n    )\n\n\n@reverses(r'\\.devices\\.(?P<sysname>[^.]+)\\.sensors\\.(?P<name>[^\\.]+)')\ndef _reverse_sensor(sysname, name):\n    return _single_like_match(\n        Sensor, related=['netbox'], sysname=sysname, internal_name=name\n    )\n\n\n@reverses(r'\\.devices\\.(?P<sysname>[^.]+)\\.cpu\\.(?P<cpuname>[^.]+)')\ndef _reverse_device_cpu(sysname, cpuname):\n    netbox = _single_like_match(Netbox, sysname=sysname)\n    sysname = getattr(netbox, 'sysname', sysname)\n    return \"%s: %s\" % (sysname, cpuname)\n\n\n@reverses(r'\\.devices\\.(?P<sysname>[^.]+)\\.system\\.')\ndef _reverse_uptime(sysname):\n    netbox = _single_like_match(Netbox, sysname=sysname)\n    if hasattr(netbox, 'sysname'):\n        return netbox\n    else:\n        return sysname\n\n\n@reverses(r'\\.devices\\.(?P<sysname>[^.]+)$')\ndef _reverse_device(sysname):\n    return _single_like_match(Netbox, sysname=sysname)\n\n\n@reverses(r'\\.prefixes\\.(?P<netaddr>[^.]+)')\ndef _reverse_prefix(netaddr):\n    return _single_like_match(Prefix, netaddr=netaddr)\n\n\n### Helper functions\n\n\ndef _single_like_match(model, related=None, **kwargs):\n    args = [\n        (\"{field}::TEXT LIKE %s\".format(field=key), value)\n        for key, value in kwargs.items()\n    ]\n    where, params = zip(*args)\n    qset = model.objects.extra(where=where, params=params)\n    if related:\n        qset = qset.select_related(*related)\n    if len(qset) == 1:\n        return qset[0]\n"
  },
  {
    "path": "python/nav/metrics/names.py",
    "content": "#\n# Copyright (C) 2013-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Search & discovery functions for Graphite metric names and hierarchies\"\"\"\n\nfrom collections import OrderedDict\nimport itertools\nimport json\nfrom urllib.parse import urlencode, urljoin\nfrom urllib.request import Request, urlopen\nfrom urllib.error import URLError\nfrom nav.metrics import CONFIG, errors\nimport string\n\nLEGAL_METRIC_CHARACTERS = string.ascii_letters + string.digits + \"-_\"\n\n\nclass safe_name(str):\n    \"\"\"\n    Marks a string as not needing to be escaped by :func escape_metric_name:\n    \"\"\"\n\n    def __str__(self):\n        # This assures that safe_name strings aren't weakened to normal\n        # strings on calls to str()\n        return self\n\n\ndef escape_metric_name(name):\n    \"\"\"\n    Escapes any character of `name` that may not be used in graphite metric\n    names.\n    \"\"\"\n    if name is None:\n        return name\n    if isinstance(name, safe_name):\n        return name\n    name = name.replace('\\x00', '')  # some devices have crazy responses!\n    name = ''.join([c if c in LEGAL_METRIC_CHARACTERS else \"_\" for c in name])\n    return name\n\n\ndef join_series(names):\n    \"\"\"Joins a list of metric names to a single series list.\n\n    :param names: A list of series/metric names.\n    \"\"\"\n    splitnames = [n.split('.') for n in names]\n    series = []\n    for names in zip(*splitnames):\n        uniq = OrderedDict.fromkeys(names)\n        if len(uniq) > 1:\n            name = '{%s}' % \",\".join(uniq)\n        else:\n            name = \"\".join(uniq)\n        series.append(name)\n    return \".\".join(series)\n\n\ndef get_all_leaves_below(top, ignored=None):\n    \"\"\"Gets a list of all leaf nodes in the metric hierarchy below top\"\"\"\n    walker = nodewalk(top, ignored)\n    paths = (leaves for (name, nonleaves, leaves) in walker)\n    return list(itertools.chain(*paths))\n\n\ndef get_expanded_nodes(path):\n    \"\"\"\n    Expands any wildcard in path and returns a list of all matching paths.\n\n    :param path: A search string, e.g. \"nav.{a,b}.*.*\"\n    :returns: A list of expanded metric paths,\n              e.g. [\"nav.a.1.1\", \"nav.a.2.1\", \"nav.b.1.1\", \"nav.b.1.2\"]\n    \"\"\"\n    data = raw_metric_query(path, operation=\"expand\")\n    if not isinstance(data, dict):\n        return []\n    result = data.get(\"results\", [])\n    if not isinstance(result, list):\n        return []\n    return result\n\n\ndef get_metric_leaf_children(path):\n    \"\"\"Returns a list of available graphite leaf nodes just below path.\n\n    :param path: A path to a Graphite metric.\n    :returns: A list of metric paths.\n\n    \"\"\"\n    query = path + \".*\"\n    data = raw_metric_query(query)\n    result = [node['id'] for node in data if node.get('leaf', False)]\n    return result\n\n\ndef get_metric_nonleaf_children(path):\n    \"\"\"Returns a list of available graphite non-leaf nodes just below path.\n\n    :param path: A path to a Graphite metric.\n    :returns: A list of metric paths.\n\n    \"\"\"\n    query = path + \".*\"\n    data = raw_metric_query(query)\n    result = [node['id'] for node in data if not node.get('leaf', False)]\n    return result\n\n\ndef nodewalk(top, ignored=None):\n    \"\"\"Walks through a graphite metric hierarchy.\n\n    Basically works like os.walk()\n\n    :param top: Path to the node to walk from.\n    :param ignored: A list of node IDs to completely ignore.\n    :returns: A generator that generates three-tuples of\n              (name, nonleaves, leaves)\n\n    \"\"\"\n    ignored = ignored or []\n    nodes = raw_metric_query(top + '.*')\n    nonleaves, leaves = [], []\n    for node in nodes:\n        if node['id'] in ignored:\n            continue\n        if node.get('leaf', False):\n            leaves.append(node['id'])\n        else:\n            nonleaves.append(node['id'])\n\n    yield top, nonleaves, leaves\n\n    for name in nonleaves:\n        for x in nodewalk(name):\n            yield x\n\n\ndef raw_metric_query(query, operation=\"find\"):\n    \"\"\"Runs a query for metric information against Graphite's REST API.\n\n    :param query: A search string, e.g. \"nav.devices.some-gw_example_org.*\"\n    :param operation: One of \"find\" or \"expand\",\n                      see https://graphite.readthedocs.io/en/1.1.10/metrics_api.html\n    :returns: The JSON response from Graphite, or an empty list if response\n              could not be decoded.\n\n    \"\"\"\n    base = CONFIG.get(\"graphiteweb\", \"base\")\n    url = urljoin(base, \"/metrics/\" + operation)\n    query = urlencode({'query': query})\n    url = \"%s?%s\" % (url, query)\n\n    req = Request(url)\n    try:\n        response_data = urlopen(req).read().decode('utf-8')\n        return json.loads(response_data)\n    except URLError as err:\n        raise errors.GraphiteUnreachableError(\"{0} is unreachable\".format(base), err)\n    except ValueError:\n        # response could not be decoded\n        return []\n    finally:\n        try:\n            response.close()\n        except NameError:\n            pass\n"
  },
  {
    "path": "python/nav/metrics/templates.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nMetric naming templates for various things that NAV sends/retrieves from\nGraphite.\n\"\"\"\n\nfrom nav.metrics.names import escape_metric_name\n\n\ndef metric_prefix_for_ipdevpoll_job(sysname, job_name):\n    tmpl = \"{device}.ipdevpoll.{job_name}\"\n    return tmpl.format(\n        device=metric_prefix_for_device(sysname), job_name=escape_metric_name(job_name)\n    )\n\n\ndef metric_path_for_bandwith(sysname, is_percent):\n    tmpl = \"{system}.bandwidth{percent}\"\n    return tmpl.format(\n        system=metric_prefix_for_system(sysname),\n        percent=\"_percent\" if is_percent else \"\",\n    )\n\n\ndef metric_path_for_bandwith_peak(sysname, is_percent):\n    tmpl = \"{system}.bandwidth_peak{percent}\"\n    return tmpl.format(\n        system=metric_prefix_for_system(sysname),\n        percent=\"_percent\" if is_percent else \"\",\n    )\n\n\ndef metric_path_for_cpu_load(sysname, cpu_name, interval):\n    tmpl = \"{cpu}.{cpu_name}.loadavg{interval}min\"\n    return tmpl.format(\n        cpu=metric_prefix_for_cpu(sysname),\n        cpu_name=escape_metric_name(cpu_name),\n        interval=escape_metric_name(str(interval)),\n    )\n\n\ndef metric_path_for_cpu_utilization(sysname, cpu_name):\n    tmpl = \"{cpu}.{cpu_name}.utilization\"\n    return tmpl.format(\n        cpu=metric_prefix_for_cpu(sysname), cpu_name=escape_metric_name(cpu_name)\n    )\n\n\ndef metric_path_for_interface(sysname, ifname, counter):\n    tmpl = \"{interface}.{counter}\"\n    return tmpl.format(\n        interface=metric_prefix_for_interface(sysname, ifname),\n        counter=escape_metric_name(counter),\n    )\n\n\ndef metric_path_for_packet_loss(sysname):\n    tmpl = \"{device}.ping.packetLoss\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_path_for_prefix(netaddr, metric_name):\n    tmpl = \"{prefix}.{metric_name}\"\n    return tmpl.format(\n        prefix=metric_prefix_for_prefix(netaddr),\n        metric_name=escape_metric_name(metric_name),\n    )\n\n\ndef metric_path_for_roundtrip_time(sysname):\n    tmpl = \"{device}.ping.roundTripTime\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_prefix_for_sensors(sysname):\n    tmpl = \"{device}.sensors\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_path_for_sensor(sysname, sensor):\n    tmpl = \"{prefix}.{sensor}\"\n    return tmpl.format(\n        prefix=metric_prefix_for_sensors(sysname), sensor=escape_metric_name(sensor)\n    )\n\n\ndef metric_path_for_service_availability(sysname, handler, service_id):\n    tmpl = \"{service}.availability\"\n    return tmpl.format(service=metric_prefix_for_service(sysname, handler, service_id))\n\n\ndef metric_path_for_service_response_time(sysname, handler, service_id):\n    tmpl = \"{service}.responseTime\"\n    return tmpl.format(service=metric_prefix_for_service(sysname, handler, service_id))\n\n\ndef metric_path_for_sysuptime(sysname):\n    tmpl = \"{system}.sysuptime\"\n    return tmpl.format(system=metric_prefix_for_system(sysname))\n\n\ndef metric_path_for_power(sysname, index):\n    tmpl = \"{system}.power.{index}\"\n    return tmpl.format(system=metric_prefix_for_system(sysname), index=index)\n\n\ndef metric_prefix_for_cpu(sysname):\n    tmpl = \"{device}.cpu\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_prefix_for_device(sysname):\n    tmpl = \"nav.devices.{sysname}\"\n    if hasattr(sysname, 'sysname'):\n        sysname = sysname.sysname\n    return tmpl.format(sysname=escape_metric_name(sysname))\n\n\ndef metric_prefix_for_interface(sysname, ifname):\n    tmpl = \"{ports}.{ifname}\"\n    return tmpl.format(\n        ports=metric_prefix_for_ports(sysname), ifname=escape_metric_name(ifname)\n    )\n\n\ndef metric_prefix_for_memory(sysname, memory_name):\n    tmpl = \"{device}.memory.{memname}\"\n    return tmpl.format(\n        device=metric_prefix_for_device(sysname),\n        memname=escape_metric_name(memory_name),\n    )\n\n\ndef metric_prefix_for_ports(sysname):\n    tmpl = \"{device}.ports\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_prefix_for_prefix(netaddr):\n    tmpl = \"nav.prefixes.{netaddr}\"\n    if hasattr(netaddr, 'net_address'):\n        netaddr = netaddr.net_address\n    return tmpl.format(netaddr=escape_metric_name(netaddr))\n\n\ndef metric_prefix_for_service(sysname, handler, service_id):\n    tmpl = \"{device}.services.{handler}_{service_id}\"\n    return tmpl.format(\n        device=metric_prefix_for_device(sysname), handler=handler, service_id=service_id\n    )\n\n\ndef metric_prefix_for_system(sysname):\n    tmpl = \"{device}.system\"\n    return tmpl.format(device=metric_prefix_for_device(sysname))\n\n\ndef metric_prefix_for_multicast_group(group):\n    tmpl = \"nav.multicast.groups.{group}\"\n    return tmpl.format(group=escape_metric_name(str(group)))\n\n\ndef metric_path_for_multicast_usage(group, sysname):\n    tmpl = \"{group}.igmp_usage.{sysname}\"\n    if hasattr(sysname, 'sysname'):\n        sysname = sysname.sysname\n    return tmpl.format(\n        group=metric_prefix_for_multicast_group(group),\n        sysname=escape_metric_name(sysname),\n    )\n\n\ndef metric_path_for_dhcp(\n    ip_version,\n    server_name,\n    allocation_type,\n    group_name_source,\n    group_name,\n    first_ip,\n    last_ip,\n    metric_name,\n):\n    tmpl = (\n        \"nav.dhcp.servers.{server_name}.{allocation_type}.{group_name_source}\"\n        \".{group_name}.{ip_version}.{first_ip}.{last_ip}.{metric_name}\"\n    )\n    return tmpl.format(\n        ip_version=escape_metric_name(str(ip_version)),\n        server_name=escape_metric_name(server_name),\n        allocation_type=escape_metric_name(allocation_type),\n        group_name_source=escape_metric_name(group_name_source),\n        group_name=escape_metric_name(group_name),\n        first_ip=escape_metric_name(str(first_ip)),\n        last_ip=escape_metric_name(str(last_ip)),\n        metric_name=escape_metric_name(metric_name),\n    )\n"
  },
  {
    "path": "python/nav/metrics/thresholds.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Metric threshold evaluation utilities.\n\nPseudo-rule example:\n\n    dict(\n        target='nav.devices.*.ports.if{In,Out}Octets',\n        alert='>90%',\n        clear='<80%',\n\n        raw=False,\n        period='-10min',\n    )\n\nSome ideas on how this should function:\n\nTarget is a seriesList expression. If raw=True, its raw value is used when\nquerying Graphite-web, otherwise it will be transformed according to NAV's\nrules before querying (such as deriving traffic rates from counter values).\nWe query data from 'period' until now, and calculate the average value for that\nperiod for each retrieved metric (possibly ignoring None values).\n\nEach retrieved metric must then be mapped to a NAV object, if at all possible.\nThis is necessary for two purposes:\n\n1. It may be necessary to calculate the threshold expression,\n   e.g. when a relative threshold value is used (such as '>90%').\n2. If a threshold alert needs to be generated, it must be associated with a\n   NAV object to make it clear to the user what the subject of the alert is.\n\nIf there is an active threshold alert for an object, the clear expression\nshould be evaluated to see if the alert can be resolved. Otherwise,\nthe alert expression should be evaluated to see if a threshold alert must be\nopened.\n\nOther feedback received:\n\n* It should be possible to evaluate thresholds by comparing against other\n  metrics. E.g. if a maximum value of an object is logged somewhere,\n  one should be able to compare the current value to this.\n* The datapoint consolidation method should be customizable. Right now,\n  average is used, but maximum/minimum may be interesting values as well.\n\nThis module should provide an API for evaluating threshold expressions.\nAlerting is outside of the scope of this module.\n\n\"\"\"\n\nfrom datetime import timedelta\nfrom functools import partial\nimport logging\nimport re\n\nfrom nav.metrics.data import get_metric_average\nfrom nav.metrics.graphs import get_metric_meta, extract_series_name\n\n\n# Pattern to extract the ID of a metric from a series name returned in a\n# Graphite render response.\nfrom nav.metrics.lookup import lookup\nfrom nav.models.manage import Interface\n\n\nEXPRESSION_PATTERN = re.compile(\n    r'^ \\s* (?P<operator> [<>] ) \\s* '\n    r'(?P<value> ([+-])? [0-9]+(\\.[0-9]+)? ) \\s*'\n    r'(?P<percent>%)? \\s* $',\n    re.VERBOSE,\n)\n\nDEFAULT_INTERVAL = timedelta(minutes=10)\nMINUTE = timedelta(minutes=1).total_seconds()\nDAY = timedelta(days=1).total_seconds()\nYEAR = timedelta(days=365).total_seconds()\n\nMEGA = 1e6\n\n_logger = logging.getLogger(__name__)\n\n\nclass ThresholdEvaluator(object):\n    \"\"\"Threshold evaluator class.\n\n    Usage example:\n\n    >>> t = ThresholdEvaluator('nav.devices.*.ports.*.if{In,Out}Octets')\n    >>> t.get_values()\n    >>> t.evaluate('>50%')\n    [('nav.devices.test-sw_example_org.ports.Gi1/1.ifOutOctets',\n      989982359.3691884),\n     ('nav.devices.test-sw_example_org.ports.Gi1/1.ifInOctets',\n      824604510.7694222)]\n    >>>\n\n    \"\"\"\n\n    def __init__(self, target, period=DEFAULT_INTERVAL, raw=False):\n        \"\"\"\n        :param target: A graphite target/seriesList to look at.\n        :param period: How far back in historic data to look.\n        :type period: datetime.timedelta\n        :param raw: If True, the target is fed raw to Graphite, otherwise it is\n                    evaluated and possibly transformed by NAV's rules first.\n        \"\"\"\n        self.target = self.orig_target = target\n        self.period = period\n        self.raw = raw\n        self.result = {}\n\n        if not raw:\n            meta = get_metric_meta(target)\n            if meta:\n                self.target = meta['target']\n\n    def __repr__(self):\n        return \"{cls}({orig_target!r}, {period!r}, {raw!r})\".format(\n            cls=self.__class__.__name__, **vars(self)\n        )\n\n    def get_values(self):\n        \"\"\"\n        Retrieves actual values from Graphite based on the evaluators target.\n        \"\"\"\n        start = \"-{0}\".format(interval_to_graphite(self.period))\n        averages = get_metric_average(\n            self.target, start=start, end='now', ignore_unknown=True\n        )\n        _logger.debug(\n            \"retrieved %d values from graphite for %r, period %s: %r\",\n            len(averages),\n            self.target,\n            self.period,\n            averages,\n        )\n        self.result = dict(\n            (extract_series_name(key), dict(value=value))\n            for key, value in averages.items()\n        )\n        return self.result\n\n    def evaluate(self, expression, invert=False):\n        \"\"\"\n        Evaluates expression for each of the retrieved values from the last\n        call to get_values().\n\n        :param expression: A comparison expression to evaluate against the\n                           collected data. Example: '>20%'.\n        :type expression: basestring\n        :param invert: Invert the expression logic if True.\n\n        :returns: A list of (metric, current_value) tuples for metrics whose\n                  last retrieved current value matches the expression.\n        \"\"\"\n        matcher = self._get_matcher(expression)\n        result = [\n            (metric, self.result[metric]['value'])\n            for metric in self.result.keys()\n            if bool(matcher(metric)) ^ bool(invert)\n        ]\n        return result\n\n    def _get_matcher(self, expression):\n        match = EXPRESSION_PATTERN.match(expression)\n        if not match:\n            raise InvalidExpressionError(expression)\n        value = float(match.group('value'))\n        percent = bool(match.group('percent'))\n        oper = match.group('operator')\n        if oper == '<':\n            matcher = partial(self._lt, value, percent)\n        else:\n            matcher = partial(self._gt, value, percent)\n        return matcher\n\n    def _gt(self, value, percent, metric):\n        current = self._calculate_current(percent, metric)\n        if current is not None:\n            return current > value\n\n    def _lt(self, value, percent, metric):\n        current = self._calculate_current(percent, metric)\n        if current is not None:\n            return current < value\n\n    def _calculate_current(self, percent, metric):\n        if metric in self.result:\n            current = self.result[metric]['value']\n            if percent:\n                maximum = get_metric_maximum(metric)\n                if not maximum:\n                    return None  # cannot relatively match a maximum=0\n                self.result[metric]['max'] = maximum\n                current = (current / maximum) * 100.0\n            return current\n\n\ndef get_metric_maximum(metric):\n    \"\"\"\n    Returns the maximum value of a metric, if one can be determined.\n    Otherwise returns None.\n    \"\"\"\n    obj = lookup(metric)\n    if isinstance(obj, Interface):\n        counter = metric.split('.')[-1]\n        if 'octets' in counter.lower():\n            # Making an unsafe assumption that interface traffic\n            # numbers are always retrieved in bits/s\n            maximum = obj.speed * MEGA\n            if maximum:\n                return maximum\n\n\nclass InvalidExpressionError(Exception):\n    \"\"\"Invalid threshold match expression\"\"\"\n\n    pass\n\n\ndef interval_to_graphite(delta):\n    \"\"\"Converts a timedelta to a usable Graphite time specification.\n\n    :type delta: datetime.timedelta\n\n    \"\"\"\n    secs = delta.total_seconds()\n    if secs % YEAR == 0:\n        return \"{0}year\".format(int(secs / YEAR))\n    elif secs % DAY == 0:\n        return \"{0}day\".format(int(secs / DAY))\n    elif secs % MINUTE == 0:\n        return \"{0}min\".format(int(secs / MINUTE))\n    else:\n        return \"{0}s\".format(int(secs))\n"
  },
  {
    "path": "python/nav/mibs/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MIB parsing and MIB-aware data retrieval.\"\"\"\n\nfrom . import mibretriever\n\nmodules = mibretriever.MibRetrieverMaker.modules\n\n\ndef reduce_index(result):\n    \"\"\"Reduce a MIB table result dictionary's keys.\n\n    Given that the keys (table indexes) of the result dictionary are\n    single-element tuples, this function will replace the tuples with\n    the single element in them.\n\n    A convenient translator to add to the callback chain of many table\n    retrievals.  Notes: This will alter the original result dictionary\n    instance.\n\n    \"\"\"\n    for key, value in list(result.items()):\n        if len(key) == 1:\n            del result[key]\n            key = key[0]\n            result[key] = value\n    return result\n"
  },
  {
    "path": "python/nav/mibs/alcatel_ind1_port_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2019 Pär Stolpe, Linköpings universitet\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"A class for getting DDM values for ALE equipment\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nCOLUMNS = {\n    \"ddmPortTemperature\": {\n        \"unit_of_measurement\": Sensor.UNIT_CELSIUS,\n        \"precision\": 3,\n        \"scale\": Sensor.SCALE_MILLI,\n        \"name\": \"{ifc} Module Temperature\",\n        \"description\": \"{ifc} Module Temperature\",\n    },\n    \"ddmPortTxBiasCurrent\": {\n        \"unit_of_measurement\": Sensor.UNIT_AMPERES,\n        \"precision\": 3,\n        \"scale\": Sensor.SCALE_MILLI,\n        \"name\": \"{ifc} TX Laser Bias Current\",\n        \"description\": \"{ifc} TX Laser Bias Current\",\n    },\n    \"ddmPortTxOutputPower\": {\n        \"unit_of_measurement\": Sensor.UNIT_DBM,\n        \"precision\": 3,\n        \"scale\": Sensor.SCALE_MILLI,\n        \"name\": \"{ifc} TX Laser Output Power\",\n        \"description\": \"{ifc} TX Laser Output Power\",\n    },\n    \"ddmPortRxOpticalPower\": {\n        \"unit_of_measurement\": Sensor.UNIT_DBM,\n        \"precision\": 3,\n        \"scale\": Sensor.SCALE_MILLI,\n        \"name\": \"{ifc} RX Laser Input Power\",\n        \"description\": \"{ifc} RX Laser Input Power\",\n    },\n}\n\n\nclass AlcatelInd1PortMib(MibRetriever):\n    \"\"\"MibRetriever for Alcatel Port Sensors\"\"\"\n\n    mib = get_mib('ALCATEL-IND1-PORT-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible dom sensors from this\n        device.\n        \"\"\"\n        sensors = []\n        for column, config in COLUMNS.items():\n            sensors += yield self.handle_column(column, config)\n        return sensors\n\n    @defer.inlineCallbacks\n    def handle_column(self, column, config):\n        \"\"\"Returns the sensors of the given type\"\"\"\n        result = []\n        value_oid = self.nodes[column].oid\n        rows = yield self.retrieve_column(column)\n        for row in rows:\n            sensor = dict(\n                oid=str(value_oid + row),\n                scale=None,\n                mib=self.get_module_name(),\n                internal_name=\"{ifc}.\" + column,\n                ifindex=row[-2],\n            )\n            print(\"SENSOR:\")\n            print(sensor)\n            sensor.update(config)\n            result.append(sensor)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/arista_vrf_mib.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet.defer import inlineCallbacks, Deferred\n\nfrom nav.mibs import mibretriever\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\n\n\nclass AristaVrfMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever implementation for ARISTA-VRF-MIB\"\"\"\n\n    mib = get_mib('ARISTA-VRF-MIB')\n\n    @inlineCallbacks\n    def get_vrf_states(self, only: str = None) -> Deferred:\n        \"\"\"Returns a Deferred whose result is a dict mapping VRF names to their states.\n\n        :param only: If set, only VRFs that match this state will be returned.\n        \"\"\"\n        states = yield self.retrieve_columns(['aristaVrfState']).addCallback(\n            self.translate_result\n        )\n\n        states = {\n            _vrf_index_to_string(k): v['aristaVrfState']\n            for k, v in states.items()\n            if only is None or v['aristaVrfState'] == only\n        }\n        return states\n\n\ndef _vrf_index_to_string(index: OID) -> str:\n    \"\"\"Translates a aristaVrfTable index OID to a string\"\"\"\n    return \"\".join(chr(i) for i in index[1:])\n"
  },
  {
    "path": "python/nav/mibs/bgp4_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a BGP4-MIB MibRetriever and associated functionality.\"\"\"\n\nfrom collections import namedtuple\nfrom pprint import pformat\nimport logging\n\nfrom twisted.internet import defer\n\nfrom nav.oidparsers import oid_to_ipv4\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\nBgpPeerState = namedtuple('BgpPeerState', 'peer state adminstatus local_as remote_as')\n\n\nclass BGP4Mib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever implementation for BGP4-MIB\"\"\"\n\n    mib = get_mib('BGP4-MIB')\n    SUPPORTED_ROOT = 'bgp'\n    PEERSTATE_COLUMN = 'bgpPeerState'\n    ADMINSTATUS_COLUMN = 'bgpPeerAdminStatus'\n    LOCAL_AS_COLUMN = None\n    REMOTE_AS_COLUMN = 'bgpPeerRemoteAs'\n    GLOBAL_LOCAL_AS = 'bgpLocalAs'\n\n    @defer.inlineCallbacks\n    def is_supported(self):\n        \"\"\"Verifies whether any part of this MIB is supported by this device.\n\n        :returns: A Deferred containing a boolean result.\n\n        \"\"\"\n        reply = yield self.get_next(self.SUPPORTED_ROOT)\n        return bool(reply)\n\n    @defer.inlineCallbacks\n    def get_bgp_peer_states(self):\n        \"\"\"Collects the table of BGP peering sessions.\n\n        :returns: A Deferred whose positive result is a list of BgpPeerState\n                  namedtuples.\n\n        \"\"\"\n        if self.LOCAL_AS_COLUMN:\n            columns = (\n                self.PEERSTATE_COLUMN,\n                self.ADMINSTATUS_COLUMN,\n                self.LOCAL_AS_COLUMN,\n                self.REMOTE_AS_COLUMN,\n            )\n            local_as = None\n        else:\n            columns = (\n                self.PEERSTATE_COLUMN,\n                self.ADMINSTATUS_COLUMN,\n                self.REMOTE_AS_COLUMN,\n            )\n            local_as = yield self.get_next(self.GLOBAL_LOCAL_AS)\n            self._logger.debug(\"local AS number: %r\", local_as)\n\n        rows = yield self.retrieve_columns(columns).addCallback(self.translate_result)\n        result = {\n            self._bgp_row_to_remote_ip(key): BgpPeerState(\n                self._bgp_row_to_remote_ip(key),\n                row[self.PEERSTATE_COLUMN],\n                row[self.ADMINSTATUS_COLUMN],\n                (row[self.LOCAL_AS_COLUMN] if self.LOCAL_AS_COLUMN else local_as),\n                row[self.REMOTE_AS_COLUMN],\n            )\n            for key, row in rows.items()\n        }\n\n        if self._logger.isEnabledFor(logging.DEBUG):\n            self._logger.debug(\"Found BGP peers:\\n%s\", pformat(result))\n        return result\n\n    @staticmethod\n    def _bgp_row_to_remote_ip(row_index):\n        return oid_to_ipv4(row_index)\n"
  },
  {
    "path": "python/nav/mibs/bgp4_v2_mib_juniper.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n#\n\"\"\"Implements a BGP4-V2-MIB-JUNIPER MibRetriever w/associated functionality.\"\"\"\n\nfrom nav.oidparsers import consume, TypedFixedInetAddress, Unsigned32\nfrom nav.smidumps import get_mib\nfrom .bgp4_mib import BGP4Mib\n\n\nclass BGP4V2JuniperMib(BGP4Mib):\n    \"\"\"MibRetriever implementation for BGP4-V2-MIB-JUNIPER\"\"\"\n\n    mib = get_mib('BGP4-V2-MIB-JUNIPER')\n    SUPPORTED_ROOT = 'jnxBgpM2'\n    PEERSTATE_COLUMN = 'jnxBgpM2PeerState'\n    ADMINSTATUS_COLUMN = 'jnxBgpM2PeerStatus'\n    LOCAL_AS_COLUMN = 'jnxBgpM2PeerLocalAs'\n    REMOTE_AS_COLUMN = 'jnxBgpM2PeerRemoteAs'\n    GLOBAL_LOCAL_AS = 'jnxBgpM2LocalAs'\n\n    @staticmethod\n    def _bgp_row_to_remote_ip(row_index):\n        _routing_instance, _local_addr, remote_addr = consume(\n            row_index, Unsigned32, TypedFixedInetAddress, TypedFixedInetAddress\n        )\n        return remote_addr\n"
  },
  {
    "path": "python/nav/mibs/bridge_mib.py",
    "content": "#\n# Copyright (C) 2009, 2011, 2012, 2017, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a BRIDGE-MIB MibRetriever and associated functionality.\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom . import mibretriever, reduce_index\n\n\nclass BridgeMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever implementation for BRIDGE-MIB\"\"\"\n\n    mib = get_mib('BRIDGE-MIB')\n\n    def get_baseport_ifindex_map(self):\n        \"\"\"Retrieves the mapping between baseport numbers and ifindexes.\n\n        :returns: A dict of the form { baseportnum: ifIndex }\n\n        \"\"\"\n        df = self.retrieve_column('dot1dBasePortIfIndex')\n        return df.addCallback(reduce_index)\n\n    @defer.inlineCallbacks\n    def get_base_bridge_address(self):\n        addr = yield self.get_next('dot1dBaseBridgeAddress')\n        return addr\n\n    @defer.inlineCallbacks\n    def get_forwarding_database(self):\n        \"\"\"Retrieves the forwarding database of the device.\"\"\"\n        columns = yield self.retrieve_columns(['dot1dTpFdbPort', 'dot1dTpFdbStatus'])\n        columns = self.translate_result(columns)\n        valid = (\n            row\n            for row in columns.values()\n            if row['dot1dTpFdbStatus'] not in ('self', 'invalid')\n        )\n        result = []\n        for row in valid:\n            mac = row[0]\n            mac = ':'.join(\"%02x\" % o for o in mac[-6:])\n            port = row['dot1dTpFdbPort']\n            result.append((mac, port))\n        return result\n\n    @defer.inlineCallbacks\n    def get_stp_blocking_ports(self):\n        \"\"\"Retrieves a list of numbers of STP blocking ports\"\"\"\n        states = yield self.__get_stp_port_states()\n        blocked = [port for port, state in states if state == 'blocking']\n        return blocked\n\n    @defer.inlineCallbacks\n    def get_stp_port_states(self):\n        \"\"\"Retrieves the spanning tree port states of the device.\"\"\"\n        states = yield self.retrieve_columns(['dot1dStpPortState'])\n        states = reduce_index(self.translate_result(states))\n        result = [(k, v['dot1dStpPortState']) for k, v in states.items()]\n        return result\n\n    __get_stp_port_states = get_stp_port_states\n\n\nclass MultiBridgeMib(BridgeMib, mibretriever.MultiMibMixIn):\n    def get_baseport_ifindex_map(self):\n        method = super(MultiBridgeMib, self).get_baseport_ifindex_map\n        return self._multiquery(method)\n\n    def get_forwarding_database(self):\n        method = super(MultiBridgeMib, self).get_forwarding_database\n        return self._multiquery(method)\n\n    def get_stp_blocking_ports(self):\n        def _integrator(results):\n            endresult = []\n            for descr, ports in results:\n                if ports is not None:\n                    for port in ports:\n                        endresult.append((port, descr))\n            return endresult\n\n        method = super(MultiBridgeMib, self).get_stp_blocking_ports\n        return self._multiquery(method, integrator=_integrator)\n\n    def get_stp_port_states(self):\n        def _integrator(results):\n            endresult = []\n            for descr, result in results:\n                if result is not None:\n                    for port, state in result:\n                        endresult.append((port, descr, state))\n            return endresult\n\n        method = super(MultiBridgeMib, self).get_stp_port_states\n        return self._multiquery(method, integrator=_integrator)\n"
  },
  {
    "path": "python/nav/mibs/cd6c_mib.py",
    "content": "from twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\n\nclass CD6CMib(MibRetriever):\n    mib = get_mib('CD6C')\n    sensors = {\n        'uptime': 'cduStatusUpTime',  # Number of minutes since CDU power-up\n        'temp': [\n            ('cduStatusPrimaryTempT1', 'Primary temperature (T1) sensor value.'),\n            ('cduStatusSecondaryTempT2a', 'Secondary temperature (T2a) sensor value.'),\n            ('cduStatusSecondaryTempT2b', 'Secondary temperature (T2b) sensor value.'),\n            (\n                'cduStatusSecondaryReturnTempT4',\n                'Secondary return temperature (T3) sensor value.',\n            ),\n        ],\n        'pressure': [\n            ('cduStatusPS1', 'Secondary Pressure PS1 sensor value.'),\n            ('cduStatusPS2', 'Secondary Pressure PS2 sensor value.'),\n            ('cduStatusPS3', 'Filter Inlet Pressure (PS3) sensor value.'),\n            ('cduStatusPS4', 'Filter Outlet Pressure (PS4) sensor value.'),\n        ],\n        'flow': [\n            ('cduStatusPrimaryFlowRate', 'Primary Chilled Water Flow Rate'),\n            ('cduStatusSecondaryFlowRate', 'Secondary Flow Rate'),\n        ],\n    }\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        supported = yield self.get_next('main')\n        if not supported:\n            self._logger.debug('CD6C mib not supported - returned %s', supported)\n            return []\n\n        self._logger.debug('CD6C mib supported because main returned %s', supported)\n\n        temp_sensors = [\n            self.create_sensor(s, precision=1, uom=Sensor.UNIT_CELSIUS)\n            for s in self.sensors['temp']\n        ]\n        pressure_sensors = [\n            self.create_sensor(s, precision=2, uom=Sensor.UNIT_BAR)\n            for s in self.sensors['pressure']\n        ]\n        flow_sensors = [\n            self.create_sensor(s, uom=Sensor.UNIT_LPM) for s in self.sensors['flow']\n        ]\n\n        all_sensors = temp_sensors + pressure_sensors + flow_sensors\n\n        return all_sensors\n\n    def create_sensor(self, sensor, precision=0, uom=''):\n        \"\"\"Creates sensor object based on name\"\"\"\n        name, descr = sensor\n\n        return {\n            'oid': self.mib['nodes'][name]['oid'] + '.0',\n            'unit_of_measurement': uom,\n            'precision': precision,\n            'scale': None,\n            'description': descr,\n            'name': name,\n            'internal_name': name,\n            'mib': 'CD6C-MIB',\n        }\n"
  },
  {
    "path": "python/nav/mibs/cisco_auth_framework_mib.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details. You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"CISCO-AUTH-FRAMEWORK-MIB handling\n\nThis module provides a MibRetriever for querying authentication sessions\non Cisco devices using the CISCO-AUTH-FRAMEWORK-MIB.\n\"\"\"\n\nfrom typing import Any\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass CiscoAuthFrameworkMib(mibretriever.MibRetriever):\n    \"\"\"MIB retriever for CISCO-AUTH-FRAMEWORK-MIB\"\"\"\n\n    mib = get_mib('CISCO-AUTH-FRAMEWORK-MIB')\n\n    async def get_auth_session_vlans(self) -> dict[tuple[int, ...], dict[str, Any]]:\n        \"\"\"Retrieves VLAN information for authentication sessions.\n\n        Queries cafSessionAuthVlan to get active authentication sessions\n        and their assigned VLANs. This is useful for investigating 802.1X\n        and MAC Authentication Bypass (MAB) behavior.\n\n        Returns:\n            A dictionary mapping (ifIndex, sessionId, ...) tuples to session\n            data dictionaries containing cafSessionAuthVlan values.\n            Example: {(10101, 'sessionid'...): {'cafSessionAuthVlan': 10}}\n        \"\"\"\n        sessions = await self.retrieve_columns(['cafSessionAuthVlan'])\n        return sessions\n"
  },
  {
    "path": "python/nav/mibs/cisco_bgp4_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n#\n\"\"\"Implements a CISCO-BGP4-MIB MibRetriever w/associated functionality.\"\"\"\n\nfrom nav.oidparsers import consume, TypedInetAddress\nfrom nav.smidumps import get_mib\nfrom .bgp4_mib import BGP4Mib\n\n\nclass CiscoBGP4Mib(BGP4Mib):\n    \"\"\"MibRetriever implementation for CISCO-BGP4-MIB\"\"\"\n\n    mib = get_mib('CISCO-BGP4-MIB')\n    SUPPORTED_ROOT = 'cbgpPeer2Table'\n    PEERSTATE_COLUMN = 'cbgpPeer2State'\n    ADMINSTATUS_COLUMN = 'cbgpPeer2AdminStatus'\n    LOCAL_AS_COLUMN = 'cbgpPeer2LocalAs'\n    REMOTE_AS_COLUMN = 'cbgpPeer2RemoteAs'\n    LOCAL_AS_OBJECT = 'cbgpLocalAs'\n\n    @staticmethod\n    def _bgp_row_to_remote_ip(row_index):\n        (remote_addr,) = consume(row_index, TypedInetAddress)\n        return remote_addr\n"
  },
  {
    "path": "python/nav/mibs/cisco_c2900_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav.smidumps import get_mib\nfrom nav.mibs import esswitch_mib\n\n\nclass CiscoC2900Mib(esswitch_mib.ESSwitchMib):\n    mib = get_mib('CISCO-C2900-MIB')\n\n    BANDWIDTH_USAGE_CURRENT = 'c2900BandwidthUsageCurrent'\n    BANDWIDTH_USAGE_CURRENT_PEAK_ENTRY = 'c2900BandwidthUsageCurrentPeakEntry'\n    BANDWIDTH_USAGE_CURRENT_PEAK = 'c2900BandwidthUsagePeak'\n"
  },
  {
    "path": "python/nav/mibs/cisco_cdp_mib.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"CISCO-CDP-MIB handling\"\"\"\n\nimport socket\nfrom collections import namedtuple\n\nfrom twisted.internet import defer\n\nfrom nav.ip import IP\nfrom nav.mibs import reduce_index\n\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\nADDRESS_TYPE_IP = 1\n\n\nclass CiscoCDPMib(mibretriever.MibRetriever):\n    \"A MibRetriever for handling CISCO-CDP-MIB\"\n\n    mib = get_mib('CISCO-CDP-MIB')\n\n    def get_neighbors_last_change(self):\n        \"\"\"Retrieves the sysUpTime value of the last time the cdp neighbors\n        table was changed.\n\n        \"\"\"\n        return self.get_next('cdpGlobalLastChange')\n\n    @defer.inlineCallbacks\n    def get_cdp_neighbors(self):\n        \"Returns a list of CDPNeighbor objects from the device's cdpCacheTable\"\n        cache = yield self._get_cdp_cache_table()\n        neighbors = []\n        for index, row in cache.items():\n            neighbor = self._make_cache_tuple(index, row)\n            if neighbor:\n                neighbors.append(neighbor)\n        return neighbors\n\n    @defer.inlineCallbacks\n    def _get_cdp_cache_table(self):\n        cache = yield self.retrieve_columns(\n            [\n                'cdpCacheAddressType',\n                'cdpCacheAddress',\n                'cdpCacheDeviceId',\n                'cdpCacheDevicePort',\n            ]\n        )\n        return reduce_index(cache)\n\n    @staticmethod\n    def _make_cache_tuple(index, row):\n        if row['cdpCacheAddressType'] != ADDRESS_TYPE_IP:\n            return\n        ifindex, _deviceindex = index\n        if row['cdpCacheAddress']:\n            try:\n                ipstring = socket.inet_ntoa(row['cdpCacheAddress'])\n                ip = IP(ipstring)\n            except (socket.error, ValueError):\n                ip = None\n        else:\n            ip = None\n        deviceid = row['cdpCacheDeviceId'] or None\n        deviceport = row['cdpCacheDevicePort'] or None\n\n        if not (ip or deviceid):\n            # we have no idea how to identify this record, ignore it\n            return\n        return CDPNeighbor(ifindex, ip, deviceid, deviceport)\n\n\nCDPNeighbor = namedtuple('CDPNeighbor', 'ifindex ip deviceid deviceport')\n"
  },
  {
    "path": "python/nav/mibs/cisco_enhanced_memory_pool_mib.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\nNAME = 'cempMemPoolName'\nFREE = 'cempMemPoolFree'\nUSED = 'cempMemPoolUsed'\nVALID = 'cempMemPoolValid'\n\n\nclass CiscoEnhancedMemoryPoolMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-ENHANCED-MEMPOOL-MIB')\n\n    @defer.inlineCallbacks\n    def get_memory_usage(self):\n        \"\"\"Retrieves memory usage stats from a Cisco device.\n        :returns: A deferred whose result is a dict\n                  {pool_name: (used_bytes, free_bytes)}\n        \"\"\"\n        pools = yield self.retrieve_columns([NAME, VALID, USED, FREE])\n        result = dict(\n            (row[NAME], (row[USED], row[FREE])) for row in pools.values() if row[VALID]\n        )\n        return result\n"
  },
  {
    "path": "python/nav/mibs/cisco_entity_fru_control_mib.py",
    "content": "#\n# Copyright 2008 - 2011, 2019 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that collects the oids for fan- and psu-sensors,- and their\ncorresponding fan- and psu-statuses.\n\nThe class is specific for CISCO netboxes and use the\nCISCO-ENTITY-FRU-CONTROL-MIB to collect sensor-oids and read statuses.\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\n\nfrom nav.models.manage import PowerSupplyOrFan\n\n\nFAN_STATUS_MAP = {\n    \"unknown\": PowerSupplyOrFan.STATE_UNKNOWN,\n    \"up\": PowerSupplyOrFan.STATE_UP,\n    \"down\": PowerSupplyOrFan.STATE_DOWN,\n    \"warning\": PowerSupplyOrFan.STATE_WARNING,\n}\n\n\nPSU_STATUS_MAP = {\n    \"offEnvOther\": PowerSupplyOrFan.STATE_DOWN,\n    \"on\": PowerSupplyOrFan.STATE_UP,\n    \"offAdmin\": PowerSupplyOrFan.STATE_DOWN,\n    \"offDenied\": PowerSupplyOrFan.STATE_DOWN,\n    \"offEnvPower\": PowerSupplyOrFan.STATE_DOWN,\n    \"offEnvTemp\": PowerSupplyOrFan.STATE_DOWN,\n    \"offEnvFan\": PowerSupplyOrFan.STATE_DOWN,\n    \"failed\": PowerSupplyOrFan.STATE_DOWN,\n    \"onButFanFail\": PowerSupplyOrFan.STATE_WARNING,\n    \"offCooling\": PowerSupplyOrFan.STATE_DOWN,\n    \"offConnectorRating\": PowerSupplyOrFan.STATE_DOWN,\n    \"onButInlinePowerFail\": PowerSupplyOrFan.STATE_DOWN,\n}\n\n\nclass CiscoEntityFruControlMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever to collect inventory and status information for\n    field-replaceable units (such as power supplies and fans) on Cisco netboxes.\n\n    \"\"\"\n\n    mib = get_mib(\"CISCO-ENTITY-FRU-CONTROL-MIB\")\n\n    def __init__(self, agent_proxy):\n        super(CiscoEntityFruControlMib, self).__init__(agent_proxy)\n        self.entity_mib = EntityMib(self.agent_proxy)\n        self.fan_status_table = None\n        self.psu_status_table = None\n\n    def _get_fantray_status_table(self):\n        \"\"\"Retrieve the whole table of fan-sensors.\"\"\"\n        return self.retrieve_table(\"cefcFanTrayStatusTable\").addCallback(reduce_index)\n\n    def _get_power_status_table(self):\n        \"\"\"Retrieve the whole table of PSU-sensors.\"\"\"\n        self.retrieve_table(\"cefcFRUPowerStatusTable\").addCallback(reduce_index)\n\n    @staticmethod\n    def _translate_fan_status(oper_status):\n        \"\"\"Translates the fan status value from the MIB to a NAV PSU status value.\n\n        :returns: A state value from nav.models.manage.PowerSupplyOrFan.STATE_CHOICES\n\n        \"\"\"\n        return FAN_STATUS_MAP.get(oper_status, PowerSupplyOrFan.STATE_UNKNOWN)\n\n    @staticmethod\n    def _translate_power_supply_status_value(oper_status):\n        \"\"\"Translates the PSU status value from the MIB to a NAV PSU status value.\n\n        :returns: A state value from nav.models.manage.PowerSupplyOrFan.STATE_CHOICES\n\n        \"\"\"\n        return PSU_STATUS_MAP.get(oper_status, PowerSupplyOrFan.STATE_UNKNOWN)\n\n    @defer.inlineCallbacks\n    def get_fan_status(self, internal_id):\n        \"\"\"Returns the operational status for a fan with the given internal id.\"\"\"\n        oper_status = yield self.retrieve_column_by_index(\n            \"cefcFanTrayOperStatus\", (int(internal_id),)\n        )\n        self._logger.debug(\"cefcFanTrayOperStatus.%s = %r\", internal_id, oper_status)\n        return self._translate_fan_status(oper_status)\n\n    @defer.inlineCallbacks\n    def get_power_supply_status(self, internal_id):\n        \"\"\"Returns the operational status for a PSU with the given internal id.\"\"\"\n        oper_status = yield self.retrieve_column_by_index(\n            \"cefcFRUPowerOperStatus\", (int(internal_id),)\n        )\n        self._logger.debug(\"cefcFRUPowerOperStatus.%s = %r\", internal_id, oper_status)\n        return self._translate_power_supply_status_value(oper_status)\n\n    @defer.inlineCallbacks\n    def get_fan_status_table(self):\n        \"\"\"Retrieve the whole table of fan-sensors and cache the result.\"\"\"\n        if not self.fan_status_table:\n            self.fan_status_table = yield self._get_fantray_status_table()\n        return self.fan_status_table\n\n    @defer.inlineCallbacks\n    def get_psu_status_table(self):\n        \"\"\"Retrieve the whole table of PSU-sensors and cache the result.\"\"\"\n        if not self.psu_status_table:\n            self.psu_status_table = yield self._get_power_status_table()\n        return self.psu_status_table\n\n    def get_power_supplies(self):\n        \"\"\"Retrieves a list of power supply objects\"\"\"\n        return self.entity_mib.get_power_supplies()\n\n    @defer.inlineCallbacks\n    def get_fans(self):\n        \"\"\"Retrieves a list of fan objects.\n\n        A Cisco device reports fan trays and individual fans in entPhysicalTable,\n        but only the status of entire fan trays can be queried from this MIB,\n        so this filters away any non-FRU units.\n        \"\"\"\n        fans = yield self.entity_mib.get_fans()\n        status = yield self.get_fan_status_table()\n        self._logger.debug(\n            \"found %d/%d field-replaceable fan entities\", len(status), len(fans)\n        )\n        fans = [fan for fan in fans if fan.internal_id in status]\n        return fans\n"
  },
  {
    "path": "python/nav/mibs/cisco_entity_sensor_mib.py",
    "content": "#\n# Copyright (C) 2009-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav.smidumps import get_mib\nfrom nav.mibs.entity_sensor_mib import EntitySensorMib\n\n\nclass CiscoEntitySensorMib(EntitySensorMib):\n    \"\"\"This MIB should collect all present sensors from Cisco NEXUS boxes.\"\"\"\n\n    mib = get_mib('CISCO-ENTITY-SENSOR-MIB')\n    TYPE_COLUMN = 'entSensorType'\n    SCALE_COLUMN = 'entSensorScale'\n    PRECISION_COLUMN = 'entSensorPrecision'\n    VALUE_COLUMN = 'entSensorValue'\n    STATUS_COLUMN = 'entSensorStatus'\n"
  },
  {
    "path": "python/nav/mibs/cisco_envmon_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport re\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.models.manage import Sensor\n\n\nPOWER_SENSOR_TYPE = {\n    1: 'Power supply source unknown',\n    2: 'AC power supply',\n    3: 'DC power supply',\n    4: 'External power supply',\n    5: 'Internal redundant power supply',\n}\n\n\nclass CiscoEnvMonMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-ENVMON-MIB')\n\n    def _get_voltage_sensors(self):\n        df = self.retrieve_columns(\n            [\n                'ciscoEnvMonVoltageStatusDescr',\n                'ciscoEnvMonVoltageStatusValue',\n                'ciscoEnvMonVoltageState',\n            ]\n        )\n        df.addCallback(reduce_index)\n        return df\n\n    def _get_temperature_sensors(self):\n        df = self.retrieve_columns(\n            [\n                'ciscoEnvMonTemperatureStatusIndex',\n                'ciscoEnvMonTemperatureStatusDescr',\n                'ciscoEnvMonTemperatureStatusValue',\n                'ciscoEnvMonTemperatureState',\n            ]\n        )\n        df.addCallback(reduce_index)\n        return df\n\n    def _get_fanstate_sensors(self):\n        df = self.retrieve_columns(\n            [\n                'ciscoEnvMonFanStatusIndex',\n                'ciscoEnvMonFanStatusDescr',\n                'ciscoEnvMonFanState',\n            ]\n        )\n        df.addCallback(reduce_index)\n        return df\n\n    def _get_powersupply_sensors(self):\n        df = self.retrieve_columns(\n            [\n                'ciscoEnvMonSupplyStatusIndex',\n                'ciscoEnvMonSupplyStatusDescr',\n                'ciscoEnvMonSupplyState',\n                'ciscoEnvMonSupplySource',\n            ]\n        )\n        df.addCallback(reduce_index)\n        return df\n\n    def _get_voltage_sensor_params(self, voltage_sensors):\n        sensors = []\n        for idx, voltage_sensor in voltage_sensors.items():\n            voltage_sensor_oid = voltage_sensor.get(0, None)\n            voltage_mib = self.nodes.get('ciscoEnvMonVoltageStatusValue', None)\n            oid = str(voltage_mib.oid) + str(voltage_sensor_oid)\n            unit_of_measurement = Sensor.UNIT_VOLTS_DC\n            precision = 0\n            scale = (\n                self.mib.get('nodes')\n                .get('ciscoEnvMonVoltageStatusValue')\n                .get('units')\n                .strip()\n            )\n            scale = re.sub('volts$', '', scale)\n            description = voltage_sensor.get('ciscoEnvMonVoltageStatusDescr').strip()\n            name = description\n            internal_name = description\n            sensors.append(\n                {\n                    'oid': oid,\n                    'unit_of_measurement': unit_of_measurement,\n                    'precision': precision,\n                    'scale': scale,\n                    'description': description,\n                    'name': name,\n                    'internal_name': internal_name,\n                    'mib': self.get_module_name(),\n                }\n            )\n        return sensors\n\n    def _get_temperature_sensor_params(self, temperature_sensors):\n        sensors = []\n        for idx, temp_sensor in temperature_sensors.items():\n            temp_sensor_oid = temp_sensor.get(0, None)\n            temp_mib = self.nodes.get('ciscoEnvMonTemperatureStatusValue', None)\n            oid = str(temp_mib.oid) + str(temp_sensor_oid)\n            unit_of_measurement = Sensor.UNIT_CELSIUS\n            precision = 0\n            scale = None\n            description = temp_sensor.get('ciscoEnvMonTemperatureStatusDescr').strip()\n            name = description\n            internal_name = description\n            sensors.append(\n                {\n                    'oid': oid,\n                    'unit_of_measurement': unit_of_measurement,\n                    'precision': precision,\n                    'scale': scale,\n                    'description': description,\n                    'name': name,\n                    'internal_name': internal_name,\n                    'mib': self.get_module_name(),\n                }\n            )\n        return sensors\n\n    def _get_fanstate_sensor_params(self, fanstate_sensors):\n        sensors = []\n        for idx, fanstate_sensor in fanstate_sensors.items():\n            fanstate_sensor_oid = fanstate_sensor.get(0, None)\n            fanstate_mib = self.nodes.get('ciscoEnvMonFanState', None)\n            oid = str(fanstate_mib.oid) + str(fanstate_sensor_oid)\n            unit_of_measurement = Sensor.UNIT_TRUTHVALUE\n            precision = 0\n            scale = None\n            description = fanstate_sensor.get('ciscoEnvMonFanStatusDescr').strip()\n            name = description\n            internal_name = description\n            sensors.append(\n                {\n                    'oid': oid,\n                    'unit_of_measurement': unit_of_measurement,\n                    'precision': precision,\n                    'scale': scale,\n                    'description': description,\n                    'name': name,\n                    'internal_name': internal_name,\n                    'mib': self.get_module_name(),\n                }\n            )\n        return sensors\n\n    def _get_powersupply_sensor_params(self, powersupply_sensors):\n        sensors = []\n        for idx, power_sensor in powersupply_sensors.items():\n            power_sensor_oid = power_sensor.get(0, None)\n            power_mib = self.nodes.get('ciscoEnvMonSupplyState', None)\n            oid = str(power_mib.oid) + str(power_sensor_oid)\n            unit_of_measurement = Sensor.UNIT_TRUTHVALUE\n            precision = 0\n            scale = None\n            power_source = power_sensor.get('ciscoEnvMonSupplySource', None)\n            description = POWER_SENSOR_TYPE.get(power_source)\n            name = power_sensor.get('ciscoEnvMonSupplyStatusDescr').strip()\n            # Sometimes we do get a source\n            if not description:\n                description = name\n            internal_name = name\n            sensors.append(\n                {\n                    'oid': oid,\n                    'unit_of_measurement': unit_of_measurement,\n                    'precision': precision,\n                    'scale': scale,\n                    'description': description,\n                    'name': name,\n                    'internal_name': internal_name,\n                    'mib': self.get_module_name(),\n                }\n            )\n        return sensors\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        voltage_sensors = yield self._get_voltage_sensors()\n        temperature_sensors = yield self._get_temperature_sensors()\n        fanstate_sensors = yield self._get_fanstate_sensors()\n        powersupply_sensors = yield self._get_powersupply_sensors()\n\n        result = self._get_voltage_sensor_params(voltage_sensors)\n        result.extend(self._get_temperature_sensor_params(temperature_sensors))\n        result.extend(self._get_fanstate_sensor_params(fanstate_sensors))\n        result.extend(self._get_powersupply_sensor_params(powersupply_sensors))\n\n        self._logger.debug('get_all_sensors: result=%s', result)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/cisco_hsrp_mib.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"CISCO-HSRP-MIB handling\"\"\"\n\nfrom IPy import IP\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass CiscoHSRPMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for handling CISCO-HSRP-MIB\"\"\"\n\n    mib = get_mib('CISCO-HSRP-MIB')\n\n    @defer.inlineCallbacks\n    def get_virtual_addresses(self):\n        \"\"\"Retrieves a map of virtual HSRP addresses->ifindex\"\"\"\n        index_addrs = yield self.retrieve_column('cHsrpGrpVirtualIpAddr')\n        addr_map = dict(\n            (IP(ip), ifindex) for (ifindex, group), ip in index_addrs.items()\n        )\n        return addr_map\n"
  },
  {
    "path": "python/nav/mibs/cisco_ietf_ip_mib.py",
    "content": "#\n# Copyright (C) 2009-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a MibRetriever for the CISCO-IETF-IP-MIB.\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom nav.oids import OID\nfrom .ip_mib import IpMib\n\n\nclass CiscoIetfIpMib(IpMib):\n    \"\"\"CISCO-IETF-IP-MIB is based on a a draft version of IETF's\n    revised IP-MIB (with address type agnostic extensions).  Its\n    structure is basically the same, with altered object names and\n    ids.\n\n    We try to avoid code redundancies by inheriting from the IpMib\n    MibRetriever implementation, which was written using the revised\n    IP-MIB.\n\n    \"\"\"\n\n    mib = get_mib('CISCO-IETF-IP-MIB')\n\n    @classmethod\n    def address_index_to_ip(cls, index):\n        \"\"\"Convert a row index from cIpAddressTable to an IP object.\"\"\"\n\n        entry = cls.nodes['cIpAddressPfxOrigin']\n        index = OID(index)\n        if entry.oid.is_a_prefix_of(index):\n            # Chop off the entry OID+column prefix\n            index = OID(index.strip_prefix(entry.oid)[1:])\n\n        return super(CiscoIetfIpMib, cls).address_index_to_ip(index)\n\n    @classmethod\n    def prefix_index_to_ip(cls, index, prefix_entry=None):\n        \"\"\"Convert a row index from cIpAddressPfxTable to an IP object.\"\"\"\n\n        entry = cls.nodes['cIpAddressPfxOrigin']\n        stripped_index = OID(index).strip_prefix(entry.oid)\n\n        return super(CiscoIetfIpMib, cls).prefix_index_to_ip(stripped_index)\n\n    @defer.inlineCallbacks\n    def get_ifindex_ip_mac_mappings(self):\n        \"\"\"Retrieve the layer 3->layer 2 address mappings of this device.\n\n        Return value:\n          A set of tuples: set([(ifindex, ip_address, mac_address), ...])\n          ifindex will be an integer, ip_address will be an IPy.IP object and\n          mac_address will be a string with a colon-separated hex representation\n          of a MAC address.\n\n        \"\"\"\n        mappings = yield self._get_ifindex_ip_mac_mappings(\n            column='cInetNetToMediaPhysAddress'\n        )\n\n        return mappings\n\n    @defer.inlineCallbacks\n    def get_interface_addresses(self):\n        \"\"\"Retrieve the IP addresses and prefixes of interfaces.\n\n        Return value:\n          A set of tuples: set([(ifindex, ip_address, prefix_address), ...])\n          ifindex will be an integer, ip_address and prefix_address will be\n          IPy.IP objects.\n\n        \"\"\"\n        addresses = yield self._get_interface_addresses(\n            ifindex_column='cIpAddressIfIndex',\n            prefix_column='cIpAddressPrefix',\n            prefix_entry='cIpAddressPfxOrigin',\n        )\n\n        return addresses\n\n    @staticmethod\n    def _binary_mac_to_hex(mac):\n        \"\"\"Overrides parent implementation to work around a Cisco IOS issue\n        with lengths of reported MAC addresses.\n\n        \"\"\"\n        if mac and len(mac) > 6:\n            mac = mac[:6]\n        return IpMib._binary_mac_to_hex(mac)\n"
  },
  {
    "path": "python/nav/mibs/cisco_memory_pool_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\nNAME = 'ciscoMemoryPoolName'\nFREE = 'ciscoMemoryPoolFree'\nUSED = 'ciscoMemoryPoolUsed'\nVALID = 'ciscoMemoryPoolValid'\n\n\nclass CiscoMemoryPoolMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-MEMORY-POOL-MIB')\n\n    @defer.inlineCallbacks\n    def get_memory_usage(self):\n        \"\"\"Retrieves memory usage stats from a Cisco device.\n\n        :returns: A deferred whose result is a dict\n                  {pool_name: (used_bytes, free_bytes)}\n\n        \"\"\"\n        pools = yield self.retrieve_columns([NAME, VALID, USED, FREE])\n        result = dict(\n            (row[NAME], (row[USED], row[FREE])) for row in pools.values() if row[VALID]\n        )\n        return result\n"
  },
  {
    "path": "python/nav/mibs/cisco_power_ethernet_ext_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass CiscoPowerEthernetExtMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-POWER-ETHERNET-EXT-MIB')\n"
  },
  {
    "path": "python/nav/mibs/cisco_process_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\n\nfrom django.utils.encoding import smart_str\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.oids import OID\n\nPHYSICAL_INDEX = 'cpmCPUTotalPhysicalIndex'\nTOTAL_5_MIN_REV = 'cpmCPUTotal5minRev'\nTOTAL_1_MIN_REV = 'cpmCPUTotal1minRev'\n\n\nclass CiscoProcessMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-PROCESS-MIB')\n\n    @defer.inlineCallbacks\n    def get_cpu_loadavg(self):\n        load = yield self.retrieve_columns(\n            [\n                PHYSICAL_INDEX,\n                TOTAL_5_MIN_REV,\n                TOTAL_1_MIN_REV,\n            ]\n        )\n        self._logger.debug(\"cpu load results: %r\", load)\n        physindexes = [\n            row[PHYSICAL_INDEX] for row in load.values() if row[PHYSICAL_INDEX]\n        ]\n        names = yield self._get_cpu_names(physindexes)\n\n        result = {}\n        for index, row in load.items():\n            name = names.get(row[PHYSICAL_INDEX], str(index[-1]))\n            result[name] = [(5, row[TOTAL_5_MIN_REV]), (1, row[TOTAL_1_MIN_REV])]\n        return result\n\n    @defer.inlineCallbacks\n    def _get_cpu_names(self, indexes):\n        if not indexes:\n            return {}\n        self._logger.debug(\"getting cpu names from ENTITY-MIB\")\n        base_oid = EntityMib.nodes['entPhysicalName'].oid\n        oids = [str(base_oid + (index,)) for index in indexes]\n        names = yield self.agent_proxy.get(oids)\n        self._logger.debug(\"cpu name result: %r\", names)\n        names = {\n            OID(oid)[-1]: smart_str(value) for oid, value in names.items() if value\n        }\n        return names\n\n    def get_cpu_utilization(self):\n        return defer.succeed(None)\n"
  },
  {
    "path": "python/nav/mibs/cisco_stack_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass CiscoStackMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-STACK-MIB')\n\n    def get_bandwidth_percent(self):\n        return self.get_next('sysTraffic')\n\n    def get_bandwidth_percent_peak(self):\n        return self.get_next('sysTrafficPeak')\n"
  },
  {
    "path": "python/nav/mibs/cisco_vlan_iftable_relationship_mib.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"handling of CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\"\"\"\n\nfrom collections import namedtuple\n\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass CiscoVlanIftableRelationshipMib(mibretriever.MibRetriever):\n    \"\"\"A CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB MibRetriever\"\"\"\n\n    mib = get_mib('CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB')\n\n    @defer.inlineCallbacks\n    def get_routed_vlan_ifindexes(self):\n        \"\"\"Retrieves a list of RoutedVlan named tuples.\n\n        A physical_ifindex of 0, indicates that the vlan is not routed through\n        a physical interface.\n\n        \"\"\"\n        routed_vlans = yield self.retrieve_column('cviRoutedVlanIfIndex')\n        result = [\n            RoutedVlan(vlan, physical, virtual)\n            for (vlan, physical), virtual in routed_vlans.items()\n        ]\n        return result\n\n\nRoutedVlan = namedtuple('RoutedVlan', 'vlan physical virtual')\n"
  },
  {
    "path": "python/nav/mibs/cisco_vlan_membership_mib.py",
    "content": "#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MibRetriever for CISCO-VLAN-MEMBERSHIP-MIB\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass CiscoVlanMembershipMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever for CISCO-VLAN-MEMBERSHIP-MIB\"\"\"\n\n    mib = get_mib('CISCO-VLAN-MEMBERSHIP-MIB')\n\n    @defer.inlineCallbacks\n    def get_vlan_membership(self):\n        \"\"\"Get a mapping of access port ifindexes->VLAN\"\"\"\n        vlans = yield self.retrieve_column('vmVlan')\n\n        result = {index[0]: vlan for index, vlan in vlans.items()}\n        return result\n"
  },
  {
    "path": "python/nav/mibs/cisco_vtp_mib.py",
    "content": "#\n# Copyright (C) 2009, 2012, 2013, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\n\nfrom nav.bitvector import BitVector\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\nfrom .types import LogicalMibInstance\n\nCHARS_IN_1024_BITS = 128\n\n\nclass CiscoVTPMib(mibretriever.MibRetriever):\n    mib = get_mib('CISCO-VTP-MIB')\n\n    @defer.inlineCallbacks\n    def get_trunk_native_vlans(self):\n        \"\"\"Get a mapping of the native VLANs of trunk ports.\"\"\"\n        trunkports = yield self.retrieve_columns(\n            ('vlanTrunkPortNativeVlan', 'vlanTrunkPortDynamicState')\n        ).addCallback(self.translate_result)\n\n        result = {\n            index[0]: row['vlanTrunkPortNativeVlan']\n            for index, row in trunkports.items()\n            if row['vlanTrunkPortDynamicState'] in ('on', 'onNoNegotiate')\n        }\n        return result\n\n    @defer.inlineCallbacks\n    def get_trunk_enabled_vlans(self, as_bitvector=False):\n        \"\"\"Get a list of enabled VLANs for each trunk port.\n\n        If as_bitvector=True, the result will be a raw BitVector object.\n\n        \"\"\"\n\n        def get_vlan_list(row):\n            concatenated_bits = b''\n            for column in (\n                'vlanTrunkPortVlansEnabled',\n                'vlanTrunkPortVlansEnabled2k',\n                'vlanTrunkPortVlansEnabled3k',\n                'vlanTrunkPortVlansEnabled4k',\n            ):\n                value = row[column] or b''\n                concatenated_bits += value.ljust(CHARS_IN_1024_BITS, b'\\x00')\n\n            enabled = BitVector(concatenated_bits)\n            return as_bitvector and enabled or enabled.get_set_bits()\n\n        trunkports = yield self.retrieve_columns(\n            (\n                'vlanTrunkPortVlansEnabled',\n                'vlanTrunkPortDynamicState',\n                'vlanTrunkPortVlansEnabled2k',\n                'vlanTrunkPortVlansEnabled3k',\n                'vlanTrunkPortVlansEnabled4k',\n            )\n        ).addCallback(self.translate_result)\n\n        result = {\n            index[0]: get_vlan_list(row)\n            for index, row in trunkports.items()\n            if row['vlanTrunkPortDynamicState'] in ('on', 'onNoNegotiate')\n        }\n        return result\n\n    @defer.inlineCallbacks\n    def get_ethernet_vlan_states(self):\n        \"\"\"Retrieves the state of each ethernet VLAN on the device\"\"\"\n        states = yield self.retrieve_columns(\n            ['vtpVlanState', 'vtpVlanType']\n        ).addCallback(self.translate_result)\n\n        result = {\n            vlan: row['vtpVlanState']\n            for (_domain, vlan), row in states.items()\n            if row['vtpVlanType'] == 'ethernet'\n        }\n        return result\n\n    @defer.inlineCallbacks\n    def get_operational_vlans(self):\n        \"\"\"Retrieves a set of operational ethernet VLANs on this device\"\"\"\n        states = yield self.get_ethernet_vlan_states()\n        return set(vlan for vlan, state in states.items() if state == 'operational')\n\n    async def retrieve_alternate_bridge_mibs(self) -> list[LogicalMibInstance]:\n        \"\"\"Retrieve a list of alternate bridge mib instances.\n\n        :returns: A list of LogicalMibInstance for each operational VLAN on this device.\n\n        \"\"\"\n        vlans = await self.get_operational_vlans()\n        community = self.agent_proxy.community\n        return [\n            LogicalMibInstance(\n                description=f\"vlan{vlan}\", community=f\"{community}@{vlan}\"\n            )\n            for vlan in vlans\n        ]\n"
  },
  {
    "path": "python/nav/mibs/comet.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for getting temperature sensors/channels from a Comet P8541.\n\nComet's MIBs are highly disorganized and illogical, so any other model will\nneed a separate implementation, or a workaround to make a more generic\nimplementation for multiple MIBs must be implemented.\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.Snmp import safestring\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nDEGREES_CELSIUS = \"\\xb0C\"\nDEGREES_FAHRENHEIT = \"\\xb0F\"\nUNIT_MAP = {\n    DEGREES_CELSIUS: Sensor.UNIT_CELSIUS,\n    DEGREES_FAHRENHEIT: Sensor.UNIT_FAHRENHEIT,\n}\n\n\nclass Comet(MibRetriever):\n    \"\"\"MibRetriever for Comet Web Sensors\"\"\"\n\n    mib = get_mib('P8652-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible sensors from the Comet MIB on this\n        device.\n        \"\"\"\n        channels = yield self.get_channels()\n        bin_inputs = yield self.get_binary_inputs()\n        return channels + bin_inputs\n\n    @defer.inlineCallbacks\n    def get_channels(self):\n        \"\"\"Returns the temperature sensor channels for this probe.\"\"\"\n        self._logger.debug(\"collecting Comet channels\")\n        result = []\n        for channel in range(1, 5):\n            o_name = \"ch%dName\" % channel\n            o_unit = \"ch%dUnit\" % channel\n            o_value = \"ch%dIntVal\" % channel\n            value_oid = self.nodes[o_value].oid\n\n            name = yield self.get_next(o_name).addCallback(safestring)\n            unit = yield self.get_next(o_unit).addCallback(safestring)\n            if not name and not unit:\n                continue\n            unit = UNIT_MAP.get(unit, unit)\n            self._logger.debug(\"channel %s name/unit: %r/%r\", channel, name, unit)\n\n            result.append(\n                dict(\n                    oid=str(value_oid) + '.0',\n                    unit_of_measurement=unit,\n                    precision=1,\n                    scale=None,\n                    description=name,\n                    name=\"Channel %s\" % channel,\n                    internal_name=\"channel%s\" % channel,\n                    mib=self.get_module_name(),\n                )\n            )\n        return result\n\n    @defer.inlineCallbacks\n    def get_binary_inputs(self):\n        \"\"\"Returns the binary inputs of this probe, also their alarm status\"\"\"\n        self._logger.debug(\"collecting Comet binary sensors\")\n        result = []\n        for binary in range(1, 4):\n            o_name = \"bin%dName\" % binary\n            o_value = \"bin%dIntVal\" % binary\n            o_alarm = \"bin%dAlarm\" % binary\n            value_oid = self.nodes[o_value].oid\n            alarm_oid = self.nodes[o_alarm].oid\n\n            name = yield self.get_next(o_name).addCallback(safestring)\n            value = yield self.get_next(o_value)\n            if value is None:\n                self._logger.debug(\n                    \"Ignoring BIN input %s (%s), it has no value\", binary, name\n                )\n                continue\n            self._logger.debug(\"BIN input %s name: %r\", binary, name)\n\n            result.append(\n                dict(\n                    oid=str(value_oid) + '.0',\n                    unit_of_measurement=Sensor.UNIT_TRUTHVALUE,\n                    precision=0,\n                    scale=None,\n                    description=name,\n                    name=\"BIN %s\" % binary,\n                    internal_name=\"bin%s\" % binary,\n                    mib=self.get_module_name(),\n                )\n            )\n            result.append(\n                dict(\n                    oid=str(alarm_oid) + '.0',\n                    unit_of_measurement=Sensor.UNIT_TRUTHVALUE,\n                    precision=0,\n                    scale=None,\n                    description=\"%s alarm\" % name,\n                    name=\"BIN %s Alarm\" % binary,\n                    internal_name=\"bin%sAlarm\" % binary,\n                    mib=self.get_module_name(),\n                    on_message='%s alarm triggered' % name,\n                    off_message='%s alarm not triggered' % name,\n                    on_state=1,\n                )\n            )\n        return result\n\n\nclass CometMS(MibRetriever):\n    \"\"\"MibRetriever for Comet Web Sensors\"\"\"\n\n    mib = get_mib('COMETMS-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible sensors from the Comet MIB on this\n        device.\n        \"\"\"\n        channels = yield self.get_channels()\n        return channels\n\n    @defer.inlineCallbacks\n    def get_channels(self):\n        \"\"\"Returns the temperature sensor channels for this probe.\"\"\"\n        value_oid = self.nodes['channelInt100'].oid\n\n        result = []\n        channels = yield self.retrieve_table('chTable')\n        channels = self.translate_result(channels)\n        for index, row in channels.items():\n            self._logger.debug(\"Got channel {}: {}\".format(index, row))\n            unit = row['channelUnit']\n            unit = UNIT_MAP.get(unit, unit)\n            name = row['channelName']\n            result.append(\n                dict(\n                    oid=str(value_oid + index),\n                    unit_of_measurement=unit,\n                    precision=2,\n                    scale=None,\n                    description=name,\n                    name=name,\n                    internal_name=\"channel%s\" % index,\n                    mib=self.get_module_name(),\n                )\n            )\n        return result\n"
  },
  {
    "path": "python/nav/mibs/comet_t3611.py",
    "content": "#\n# Copyright (C) 2025 University of Tromsø and Heimonen Solutions\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"A class for retrieving temperature and humidity data from a Comet T3611\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\nfrom nav.models.manage import Sensor\n\nfrom nav.mibs.comet import UNIT_MAP, DEGREES_CELSIUS\n\n\nclass CometT3611(mibretriever.MibRetriever):\n    \"\"\"MibRetriever for the Comet T3611\"\"\"\n\n    mib = get_mib(\"T3611-MIB\")\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Fetches temperature and humidity sensors from the Comet T3611 MIB.\"\"\"\n        result = (\n            yield self.retrieve_columns(\n                [\"temp\", \"hum\", \"tempUnit\", \"humUnit\", \"sensorName\"]\n            )\n            .addCallback(self.translate_result)\n            .addCallback(reduce_index)\n        )\n\n        if not result:\n            return []\n\n        return self._data_to_sensor(result)\n\n    def _data_to_sensor(self, result):\n        \"\"\"Processes MIB data and returns a humidity and temperature sensor pair\"\"\"\n        temp_internal_name = \"temperature %s\" % result[0][\"sensorName\"]\n        temp_name = \"temperature\"\n        temp_unit = UNIT_MAP[result.get(\"tempUnit\", DEGREES_CELSIUS)]\n        temp_mibobject = self.nodes.get(\"temp\")\n        temp_readout_oid = str(temp_mibobject.oid + str(0))\n\n        hum_internal_name = \"humidity %s\" % result[0][\"sensorName\"]\n        hum_name = \"humidity\"\n        hum_mibobject = self.nodes.get(\"hum\")\n        hum_readout_oid = str(hum_mibobject.oid + str(0))\n\n        return [\n            dict(\n                oid=temp_readout_oid,\n                unit_of_measurement=temp_unit,\n                precision=0,\n                scale=None,\n                description=temp_name,\n                name=temp_name,\n                internal_name=temp_internal_name,\n                mib=\"T3611-MIB\",\n            ),\n            dict(\n                oid=hum_readout_oid,\n                unit_of_measurement=Sensor.UNIT_PERCENT_RELATIVE_HUMIDITY,\n                precision=0,\n                scale=None,\n                description=hum_name,\n                name=hum_name,\n                internal_name=hum_internal_name,\n                mib=\"T3611-MIB\",\n            ),\n        ]\n"
  },
  {
    "path": "python/nav/mibs/coriant_groove_mib.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for getting DOM values from Coriant Groove equipment\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nUNIT_DECIBEL = \"dB\"  # This is actually not defined in Sensor\nUNIT_PS = \"ps\"\nUNIT_PS_PER_NM = \"ps/nm\"\n\n\ndef filter_port_by_adminstatus(index, _, filter_data):\n    \"\"\"Filters a port sensor based on admin state of said port\"\"\"\n    port_index = index[:4]\n    if port_index in filter_data:\n        return filter_data[port_index].get(\"portAdminStatus\") == \"up\"\n    return True\n\n\nSENSOR_GROUPS = [\n    {\n        \"name_from\": \"ochOsAliasName\",\n        \"alias_from\": \"ochOsServiceLabel\",\n        \"columns\": {\n            \"ochOsActualTxOpticalPower\": {\n                \"unit_of_measurement\": Sensor.UNIT_DBM,\n                \"type\": \"string\",\n                \"name\": \"{name} TX Optical Power\",\n            },\n            \"ochOsActualFrequency\": {\n                \"unit_of_measurement\": Sensor.UNIT_HERTZ,\n                \"scale\": Sensor.SCALE_MEGA,\n                \"type\": \"string\",\n                \"name\": \"{name} actual laser frequency\",\n            },\n            \"ochOsDGD\": {\n                \"unit_of_measurement\": Sensor.UNIT_SECONDS,\n                \"scale\": Sensor.SCALE_PICO,\n                \"name\": \"{name} differential group delay\",\n            },\n            \"ochOsCD\": {\n                \"unit_of_measurement\": UNIT_PS_PER_NM,\n                \"name\": \"{name} chromatic dispersion\",\n            },\n            \"ochOsOSNR\": {\n                \"unit_of_measurement\": UNIT_DECIBEL,\n                \"type\": \"string\",\n                \"name\": \"{name} OSNR\",\n            },\n            \"ochOsQFactor\": {\n                \"unit_of_measurement\": UNIT_DECIBEL,\n                \"type\": \"string\",\n                \"name\": \"{name} Q-factor\",\n            },\n            \"ochOsPreFecBer\": {\n                \"unit_of_measurement\": Sensor.UNIT_OTHER,\n                \"type\": \"string\",\n                \"name\": \"{name} PreFEC bit error ratio\",\n            },\n        },\n    },\n    {\n        \"name_from\": \"portName\",\n        \"alias_from\": \"portServiceLabel\",\n        # lookup portName using the first 4 items of the oid index\n        \"index_translation\": lambda x: x[:4],\n        \"filter_function\": filter_port_by_adminstatus,\n        \"filter_columns\": [\"portAdminStatus\"],\n        \"columns\": {\n            \"inOpticalPowerInstant\": {\n                \"unit_of_measurement\": Sensor.UNIT_DBM,\n                \"type\": \"string\",\n                \"name\": \"{name} RX instant optical power\",\n                \"description\": \"{name} RX optical power\",\n            },\n            \"outOpticalPowerInstant\": {\n                \"unit_of_measurement\": Sensor.UNIT_DBM,\n                \"type\": \"string\",\n                \"name\": \"{name} TX instant optical power\",\n                \"description\": \"{name} TX optical power\",\n            },\n        },\n    },\n    {\n        \"name_from\": \"portName\",\n        \"alias_from\": \"portServiceLabel\",\n        \"filter_function\": filter_port_by_adminstatus,\n        \"filter_columns\": [\"portAdminStatus\"],\n        \"columns\": {\n            \"inOpticalPowerLaneTotalInstant\": {\n                \"unit_of_measurement\": Sensor.UNIT_DBM,\n                \"type\": \"string\",\n                \"name\": \"{name} RX Lane total optical power\",\n                \"description\": \"{name}{alias} total value of RX lane optical power\",\n            },\n            \"outOpticalPowerLaneTotalInstant\": {\n                \"unit_of_measurement\": Sensor.UNIT_DBM,\n                \"type\": \"string\",\n                \"name\": \"{name} TX Lane total optical power\",\n                \"description\": \"{name}{alias} total value of TX lane optical power\",\n            },\n        },\n    },\n    {\n        \"name_from\": \"oduAliasName\",\n        \"alias_from\": \"oduServiceLabel\",\n        \"columns\": {\n            \"oduDelayInstant\": {\n                \"unit_of_measurement\": Sensor.UNIT_SECONDS,\n                \"scale\": Sensor.SCALE_MICRO,\n                \"type\": \"string\",\n                \"name\": \"{name} odu signal delay\",\n                \"description\": \"{name}{alias} ODU signal delay\",\n            }\n        },\n    },\n]\n\n\nclass CoriantGrooveMib(MibRetriever):\n    \"\"\"MibRetriever for Coriant Groove DOM Sensors\"\"\"\n\n    mib = get_mib(\"CORIANT-GROOVE-MIB\")\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible optical channel sensors\"\"\"\n        sensors = []\n        for group in SENSOR_GROUPS:\n            response = yield self._discover_sensors(\n                group[\"columns\"],\n                group[\"name_from\"],\n                group.get(\"alias_from\"),\n                index_translator=group.get(\"index_translation\", lambda x: x),\n                filter_function=group.get(\"filter_function\"),\n                filter_columns=group.get(\"filter_columns\"),\n            )\n            sensors.extend(response)\n        return sensors\n\n    @defer.inlineCallbacks\n    def _discover_sensors(\n        self,\n        config,\n        subject_names_from,\n        subject_aliases_from,\n        index_translator,\n        filter_columns=None,\n        filter_function=None,\n    ):\n        \"\"\"Returns sensor definitions for a given set of statistics values.\n\n        :param config: A dict of measurement columns to produce sensors from.\n        :param subject_names_from: The OID object from which to get a name for the\n                                   subjects referred to in the collected stats rows.\n        :param subject_aliases_from: The OID object from which to get a an alias for the\n                                     subjects referred to in the collected stats rows.\n        :param index_translator: A function to translate column indexes into a index\n                                 that can be used to look up the subject name from the\n                                 subject_names_from object.\n        :param filter_function: An optional function that will filter the returned\n                                sensor records. If provided, only records that cause\n                                this filter to return a True value will be included in\n                                the result.\n        :type filter_function: func(index:OID, columns:dict, filter_columns:dict)\n        :param filter_columns: Extra table columns to fetch and feed as an argument to\n                               the filter function.\n\n        \"\"\"\n        name_map = yield self.retrieve_column(subject_names_from)\n        self._logger.debug(\"name map %s: %r\", subject_names_from, name_map)\n        if subject_aliases_from:\n            alias_map = yield self.retrieve_column(subject_aliases_from)\n            self._logger.debug(\"alias map %s: %r\", subject_aliases_from, alias_map)\n        else:\n            alias_map = {}\n        filter_data = None\n        if filter_columns:\n            filter_data = yield self.retrieve_columns(filter_columns).addCallback(\n                self.translate_result\n            )\n\n        response = yield self.retrieve_columns(list(config.keys()))\n        self._logger.debug(\"Found columns: %r\", response)\n\n        sensors = []\n        for index, columns in response.items():\n            _index = index_translator(index)\n            name = name_map.get(_index, str(index))\n            alias = alias_map.get(_index)\n            alias = \" ({})\".format(alias) if alias else \"\"\n            if filter_function and not filter_function(index, columns, filter_data):\n                self._logger.debug(\n                    \"ignoring %s based on %s\", name, filter_function.__name__\n                )\n                continue\n\n            sensors.extend(\n                [\n                    self._make_sensor(\n                        index=index,\n                        name=name,\n                        alias=alias,\n                        column=column,\n                        config=config.get(column),\n                    )\n                    for column in config\n                    if column in columns\n                ]\n            )\n        self._logger.debug(\"Returning sensor list: %r\", sensors)\n        return sensors\n\n    def _make_sensor(self, index, name, alias, column, config):\n        value_oid = self.nodes[column].oid\n        sensor = dict(\n            oid=str(value_oid + index),\n            scale=None,\n            mib=self.get_module_name(),\n            internal_name=\"{name}.{column}\".format(name=name, column=column),\n            description=\"{name}{alias} \" + self._get_sensor_description(column),\n        )\n        sensor.update(config)\n        sensor[\"name\"] = sensor[\"name\"].format(name=name)\n        sensor[\"description\"] = sensor[\"description\"].format(name=name, alias=alias)\n        return sensor\n\n    def _get_sensor_description(self, column):\n        \"\"\"Returns the first line of the mib object's description\"\"\"\n        mib_object = self.nodes[column].raw_mib_data\n        description = mib_object.get(\"description\", \"\").strip()\n        return description.split(\"\\n\")[0]\n\n\ndef _fix_text_columns():\n    \"\"\"Updates CoriantGrooveMib.text_columns to include all known text columns.\n\n    The text_columns attribute cannot be modified directly in the class definition\n    because of the way the metaclass generates the text_columns attribute during the\n    construction of the CoriantGrooveMib class.\n\n    The MIB modules itself marks most of these up as OctetString, rather than\n    DisplayString, causing the SNMP library to return them all as bytes objects\n    rather than strings.\n    \"\"\"\n    # TODO Find a way to let the metaclass make a union w/the class' own text_columns\n    CoriantGrooveMib.text_columns.update(grp[\"name_from\"] for grp in SENSOR_GROUPS)\n    CoriantGrooveMib.text_columns.update(grp[\"alias_from\"] for grp in SENSOR_GROUPS)\n    CoriantGrooveMib.text_columns.update(\n        column_name\n        for group in SENSOR_GROUPS\n        for column_name, column in group[\"columns\"].items()\n        if column.get(\"type\") == \"string\"\n    )\n\n\n_fix_text_columns()\n"
  },
  {
    "path": "python/nav/mibs/cpqpower_mib.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for extracting information from HPE power devices devices\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import reduce_index\nfrom nav.models.manage import Sensor\nfrom . import mibretriever\n\nSENSORS = [\n    {\n        'extra_columns': [\n            'pdu3GroupName',\n            'pdu3GroupVoltageMeasType',\n            'pdu3groupCurrentRating',\n        ],\n        'filter': lambda x: x.get('pdu3GroupName') is not None\n        and x.get('pdu3GroupVoltageMeasType'),\n        'sensors': {\n            'pdu3GroupVoltage': {\n                'description': '{pdu3GroupName} Voltage ({pdu3GroupVoltageMeasType})',\n                'unit_of_measurement': Sensor.UNIT_VOLTS_AC,\n                'precision': 1,\n                'name': 'Group {pdu3GroupName} Voltage',\n            },\n            'pdu3GroupCurrent': {\n                'unit_of_measurement': Sensor.UNIT_AMPERES,\n                'precision': 2,\n                'name': 'Group {pdu3GroupName} Current',\n                'minimum': 0,\n                'maximum': lambda x: (\n                    x.get('pdu3groupCurrentRating') / 100\n                    if x.get('pdu3groupCurrentRating') > 0\n                    else None\n                ),\n            },\n            'pdu3GroupPowerVA': {\n                'unit_of_measurement': Sensor.UNIT_VOLTAMPERES,\n                'name': 'Group {pdu3GroupName} Apperant Power',\n            },\n            'pdu3GroupPowerWatts': {\n                'unit_of_measurement': Sensor.UNIT_WATTS,\n                'name': 'Group {pdu3GroupName} Real Power',\n            },\n            \"pdu3GroupPowerWattHour\": {\n                'unit_of_measurement': Sensor.UNIT_WATTHOURS,\n                'name': 'Group {pdu3GroupName} Energy usage',\n                'scale': Sensor.SCALE_KILO,\n            },\n            \"pdu3GroupPowerFactor\": {\n                'unit_of_measurement': Sensor.UNIT_PERCENT,\n                'name': 'Group {pdu3GroupName} Power Factor',\n            },\n            \"pdu3GroupPowerVAR\": {\n                'unit_of_measurement': Sensor.UNIT_VAR,\n                'name': 'Group {pdu3GroupName} Reactive Power',\n            },\n        },\n    },\n    {\n        'extra_columns': [\n            'pdu3InputPhaseVoltageMeasType',\n            'pdu3InputPhaseCurrentRating',\n            'pdu3InputPhaseCurrentMeasType',\n            'pdu3InputPhasePowerMeasType',\n        ],\n        'sensors': {\n            'pdu3InputPhaseVoltage': {\n                'name': 'Input {pdu3InputPhaseVoltageMeasType} Voltage',\n                'unit_of_measurement': Sensor.UNIT_VOLTS_AC,\n                'precision': 1,\n            },\n            'pdu3InputPhaseCurrent': {\n                'unit_of_measurement': Sensor.UNIT_AMPERES,\n                'precision': 2,\n                'name': 'Input {pdu3InputPhaseCurrentMeasType} Current',\n                'minimum': 0,\n                'maximum': lambda x: (\n                    x.get('pdu3InputPhaseCurrentRating') / 100\n                    if x.get('pdu3InputPhaseCurrentRating') > 0\n                    else None\n                ),\n            },\n            'pdu3InputPhasePowerVA': {\n                'unit_of_measurement': Sensor.UNIT_VOLTAMPERES,\n                'name': 'Input {pdu3InputPhasePowerMeasType} Apperant Power',\n            },\n            'pdu3InputPhasePowerWatts': {\n                'unit_of_measurement': Sensor.UNIT_WATTS,\n                'name': 'Input {pdu3InputPhasePowerMeasType} Real Power',\n            },\n            \"pdu3InputPhasePowerWattHour\": {\n                'unit_of_measurement': Sensor.UNIT_WATTHOURS,\n                'name': 'Input {pdu3InputPhasePowerMeasType} Energy usage',\n                'scale': Sensor.SCALE_KILO,\n            },\n            \"pdu3InputPhasePowerFactor\": {\n                'unit_of_measurement': Sensor.UNIT_PERCENT,\n                'name': 'Input {pdu3InputPhasePowerMeasType} Power Factor',\n            },\n            \"pdu3InputPhasePowerVAR\": {\n                'unit_of_measurement': Sensor.UNIT_VAR,\n                'name': 'Input {pdu3InputPhasePowerMeasType} Reactive Power',\n            },\n        },\n    },\n    {\n        'sensors': {\n            'pdu3InputPowerVA': {\n                'unit_of_measurement': Sensor.UNIT_VOLTAMPERES,\n                'name': 'Total Input Apperant Power',\n            },\n            'pdu3InputPowerWatts': {\n                'unit_of_measurement': Sensor.UNIT_WATTS,\n                'name': 'Total Input Real Power',\n            },\n            \"pdu3InputTotalEnergy\": {\n                'unit_of_measurement': Sensor.UNIT_WATTHOURS,\n                'name': 'Total Input Energy usage',\n                'scale': Sensor.SCALE_KILO,\n            },\n            \"pdu3InputPowerFactor\": {\n                'unit_of_measurement': Sensor.UNIT_PERCENT,\n                'name': 'Total Input Power Factor',\n            },\n            \"pdu3InputPowerVAR\": {\n                'unit_of_measurement': Sensor.UNIT_VAR,\n                'name': 'Total Input Reactive Power',\n            },\n        }\n    },\n    {\n        'extra_columns': ['pdu3TemperatureProbeStatus'],\n        'filter': lambda x: x.get('pdu3TemperatureProbeStatus') == 'connected',\n        'sensors': {\n            'pdu3TemperatureValue': {\n                # Get from pdu3TemperatureScale to support F\n                'unit_of_measurement': Sensor.UNIT_CELSIUS,\n                'name': '{pdu3TemperatureName} Temperature',\n                'precision': 1,\n            },\n        },\n    },\n    {\n        'extra_columns': ['pdu3HumidityProbeStatus'],\n        'filter': lambda x: x.get('pdu3HumidityProbeStatus') == 'connected',\n        'sensors': {\n            'pdu3HumidityValue': {\n                'unit_of_measurement': Sensor.UNIT_PERCENT_RELATIVE_HUMIDITY,\n                'name': '{pdu3HumidityName} Humidity',\n                'precision': 1,\n            },\n        },\n    },\n]\n\n\nclass CPQPowerMib(mibretriever.MibRetriever):\n    \"\"\"Custom class for retrieveing sensors from APC UPSes.\"\"\"\n\n    mib = get_mib('CPQPOWER-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Gets all the interesting sensors for this device.\"\"\"\n        names = yield self._get_names()\n        result = []\n        for config in SENSORS:\n            r = yield self._get_sensors(names, **config)\n            result.extend(r)\n        return result\n\n    def _get_oid(self, column, index):\n        return self.mib['nodes'][column]['oid'] + index\n\n    @defer.inlineCallbacks\n    def _get_names(self):\n        result = {}\n        names = yield self.retrieve_columns(['pdu3Name'])\n        names = reduce_index(names)\n        for index, row in names.items():\n            name = row.get('pdu3Name')\n            if name is None:\n                name = ''\n            name = name.strip()\n            name = name.replace('\\0', '')\n            result[index] = name\n        return result\n\n    @defer.inlineCallbacks\n    def _get_sensors(self, names, sensors, extra_columns=None, filter=lambda x: True):\n        if extra_columns is None:\n            extra_columns = []\n        entries = yield self.retrieve_columns(extra_columns + list(sensors.keys()))\n        entries = self.translate_result(entries)\n\n        result = []\n        for index, row in entries.items():\n            if not filter(row):\n                continue\n            result.extend(self._mksensors(index, row, sensors, names))\n        return result\n\n    def _mksensors(self, index, row, table, names):\n        result = []\n        for col, config in table.items():\n            if row.get(col) < 0:\n                continue\n            sensor = dict(\n                oid=self._get_oid(col, index),\n                internal_name='{}{}'.format(col, index),\n                mib=self.get_module_name(),\n            )\n            for key, value in config.items():\n                if callable(value):\n                    value = value(row)\n                elif isinstance(value, str):\n                    value = value.format(**row)\n                sensor[key] = value\n            name = names.get(index[0])\n            if name:\n                sensor['name'] = \"{} {}\".format(name, sensor['name'])\n            if 'description' not in sensor:\n                sensor['description'] = sensor['name']\n            result.append(sensor)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/eltek_distributed_mib.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MibRetriever implementation for Eltek 48V rectifier devices\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\nfrom nav.oids import OID\n\nDESIRED_SENSORS = (\n    'batteryVoltage',\n    'batteryTemp',\n    'loadDistributionCurrent',\n    'acVoltage1',\n    'acVoltage2',\n    'acVoltage3',\n    'batteryQuality',\n    'batteryTimeToDisconnect',\n    'loadDistributionBreakerStatus',\n)\n\nUNIT_TRANSLATION = {\n    '1/100 Volt': {'unit_of_measurement': Sensor.UNIT_VOLTS_DC, 'precision': 2},\n    'Volts AC': {'unit_of_measurement': Sensor.UNIT_VOLTS_AC, 'precision': 0},\n    'Deg. C/F': {'unit_of_measurement': 'degrees', 'precision': 0},\n    'Minutes': {'unit_of_measurement': Sensor.UNIT_MINUTES, 'precision': 0},\n}\n\n\nclass EltekDistributedMib(MibRetriever):\n    \"\"\"MibRetriever for ELTEK-DISTRIBUTED-MIB\"\"\"\n\n    mib = get_mib('ELTEK-DISTRIBUTED-MIB')\n\n    @inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Retrieves list of desired and available sensors from the MIB\"\"\"\n        sensors = []\n        for obj in DESIRED_SENSORS:\n            sensor = yield self._verify_sensor(obj)\n            if sensor:\n                sensors.append(sensor)\n\n        return sensors\n\n    @inlineCallbacks\n    def _verify_sensor(self, object_name):\n        result = yield self.get_next(object_name)\n        if result:\n            node = self.nodes[object_name]\n            oid = node.oid + OID('.0')\n            description = node.raw_mib_data.get('description', object_name)\n            sensor = {\n                'oid': str(oid),\n                'internal_name': object_name,\n                'name': object_name,\n                'description': description,\n                'mib': self.mib['moduleName'],\n                'scale': None,\n            }\n            units = node.raw_mib_data.get('units', '')\n            sensor['unit_of_measurement'] = units\n            for mibunits, navunits in UNIT_TRANSLATION.items():\n                if units.lower().startswith(mibunits.lower()):\n                    sensor.update(navunits)\n            if object_name == 'loadDistributionBreakerStatus':\n                sensor['unit_of_measurement'] = Sensor.UNIT_TRUTHVALUE\n                sensor['on_state'] = 1\n                sensor['on_message'] = \"{} alarm\".format(description)\n                sensor['off_message'] = \"{} normal\".format(description)\n            return sensor\n"
  },
  {
    "path": "python/nav/mibs/entity_mib.py",
    "content": "#\n# Copyright (C) 2009-2011, 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a MibRetriever for the ENTITY-MIB, as well as helper classes.\"\"\"\n\nfrom collections import defaultdict\nfrom itertools import chain\nfrom operator import itemgetter\nimport logging\nfrom datetime import datetime\nimport struct\nfrom twisted.internet import defer\n\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.mibs.types import LogicalMibInstance\nfrom nav.ipdevpoll.shadows import PowerSupplyOrFan, Device\n\n_logger = logging.getLogger(__name__)\n\n\nclass EntityMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever for the ENTITY-MIB\"\"\"\n\n    mib = get_mib('ENTITY-MIB')\n\n    async def retrieve_alternate_bridge_mibs(self) -> list[LogicalMibInstance]:\n        \"\"\"Retrieves a list of alternate bridge mib instances.\n\n        This is accomplished by looking at entLogicalTable.\n\n        :NOTE: Some devices will return entities with the same community.\n               These should effectively be filtered out for polling purposes.\n               A Cisco WS-C3560CG-8PC-S running IOS 15.0(2)SE has also been\n               shown to return communities with null bytes,\n               which are unusable and will be filtered.\n\n        \"\"\"\n        # Define this locally to avoid external overhead\n        bridge_mib_oid = OID('.1.3.6.1.2.1.17')\n\n        def _is_bridge_mib_instance_with_valid_community(row):\n            return (\n                row['entLogicalType']\n                and OID(row['entLogicalType']) == bridge_mib_oid\n                and b'\\x00' not in row['entLogicalCommunity']\n            )\n\n        result = await self.retrieve_columns(\n            [\n                'entLogicalDescr',\n                'entLogicalType',\n                'entLogicalCommunity',\n                'entLogicalContextEngineID',\n                'entLogicalContextName',\n            ]\n        )\n        return [\n            LogicalMibInstance(\n                description=r[\"entLogicalDescr\"],\n                community=r[\"entLogicalCommunity\"].decode(\"utf-8\"),\n                context=r[\"entLogicalContextName\"],\n                context_engine_id=r[\"entLogicalContextEngineID\"],\n            )\n            for r in result.values()\n            if _is_bridge_mib_instance_with_valid_community(r)\n        ]\n\n    def get_last_change_time(self):\n        \"\"\"Retrieves the sysUpTime value of the last time any of the\n        ENTITY-MIB tables changed.\n\n        \"\"\"\n        return self.get_next('entLastChangeTime')\n\n    @defer.inlineCallbacks\n    def _get_named_table(self, table_name):\n        df = self.retrieve_table(table_name)\n        df.addCallback(self.translate_result)\n        ret_table = yield df\n        named_table = EntityTable(ret_table)\n        return named_table\n\n    @defer.inlineCallbacks\n    def get_entity_physical_table(self):\n        \"\"\"Retrieves the full entPhysicalTable contents\"\"\"\n        phy_sensor_table = yield self._get_named_table('entPhysicalTable')\n        return phy_sensor_table\n\n    @defer.inlineCallbacks\n    def get_useful_physical_table_columns(self):\n        \"\"\"Retrieves the most useful columns of the entPhysicalTable\"\"\"\n        columns = yield self.retrieve_columns(\n            [\n                'entPhysicalDescr',\n                'entPhysicalContainedIn',\n                'entPhysicalClass',\n                'entPhysicalParentRelPos',\n                'entPhysicalName',\n                'entPhysicalHardwareRev',\n                'entPhysicalFirmwareRev',\n                'entPhysicalSoftwareRev',\n                'entPhysicalSerialNum',\n                'entPhysicalModelName',\n                'entPhysicalIsFRU',\n            ]\n        )\n        return self.translate_result(columns)\n\n    @defer.inlineCallbacks\n    def get_alias_mapping(self):\n        alias_mapping = yield self.retrieve_column('entAliasMappingIdentifier')\n        return self._process_alias_mapping(alias_mapping)\n\n    def _process_alias_mapping(self, alias_mapping):\n        mapping = defaultdict(list)\n        try:\n            for (phys_index, _logical), rowpointer in alias_mapping.items():\n                # Last element is ifindex. Preceding elements is an OID.\n                ifindex = OID(rowpointer)[-1]\n\n                mapping[phys_index].append(ifindex)\n        except ValueError:\n            self._logger.warning(\n                \"device has broken entAliasMappingTable implementation\"\n            )\n        self._logger.debug(\"alias mapping: %r\", mapping)\n        return mapping\n\n    def get_power_supplies(self):\n        \"\"\"Retrieves a list of power supply objects\"\"\"\n        return self.__filter_psu_or_fan(EntityTable.is_power_supply)\n\n    def get_fans(self):\n        \"\"\"Retrieves a list of fan objects\"\"\"\n        return self.__filter_psu_or_fan(EntityTable.is_fan)\n\n    @defer.inlineCallbacks\n    def __filter_psu_or_fan(self, filter_function):\n        response = yield self.get_useful_physical_table_columns()\n        table = EntityTable(response)\n        objects = [\n            _entity_to_powersupply_or_fan(e)\n            for e in table.values()\n            if filter_function(e)\n        ]\n        return objects\n\n\nclass EntityTable(dict):\n    \"\"\"Represent the contents of the entPhysicalTable as a dictionary\"\"\"\n\n    def __init__(self, mibresult):\n        # want single integers, not oid tuples as keys/indexes\n        super(EntityTable, self).__init__()\n        for row in mibresult.values():\n            try:\n                index = row[0][0]\n                row[0] = index\n            except TypeError:\n                # likely the tuple was already reduced to a single int\n                index = row[0]\n            self[index] = row\n\n        self.clean()\n\n    def is_module(self, entity):\n        return (\n            entity['entPhysicalClass'] == 'module'\n            and entity['entPhysicalIsFRU']\n            and entity['entPhysicalSerialNum']\n            and not self.is_transceiver(entity)\n        )\n\n    @staticmethod\n    def is_port(entity):\n        return entity['entPhysicalClass'] == 'port'\n\n    @staticmethod\n    def is_chassis(entity):\n        return entity['entPhysicalClass'] == 'chassis'\n\n    @staticmethod\n    def is_power_supply(entity):\n        return entity[\"entPhysicalClass\"] == \"powerSupply\"\n\n    @staticmethod\n    def is_fan(entity):\n        return entity[\"entPhysicalClass\"] == \"fan\"\n\n    def is_transceiver(self, entity):\n        transceiver_in_name = \"transceiver\" in entity['entPhysicalDescr'].lower()\n        return transceiver_in_name and self.get_nearest_port_parent(entity)\n\n    def get_modules(self):\n        \"\"\"Return the subset of entities that are modules.\n\n        A module is defined as an entity with class=module, being a\n        field replaceable unit and having a non-empty serial number.\n\n        Return value is a list of table rows.\n\n        \"\"\"\n\n        modules = [entity for entity in self.values() if self.is_module(entity)]\n        return modules\n\n    def get_ports(self):\n        \"\"\"Return the subset of entities that are physical ports.\n\n        A port is defined as en entity class=port.\n\n        Return value is a list of table rows.\n\n        \"\"\"\n        ports = [entity for entity in self.values() if self.is_port(entity)]\n        return ports\n\n    def get_chassis(self):\n        \"\"\"Return the subset of entities that are chassis.\n\n        There will normally be only one chassis in a system, unless\n        there is some sort of stcking involved.\n\n        Return value is a list of table rows.\n\n        \"\"\"\n        chassis = [entity for entity in self.values() if self.is_chassis(entity)]\n        return chassis\n\n    def get_nearest_module_parent(self, entity):\n        \"\"\"Traverse the entity hierarchy to find a suitable parent module.\n\n        Returns a module row if a parent is found, else None is returned.\n\n        \"\"\"\n        parent_index = entity['entPhysicalContainedIn']\n        if parent_index in self:\n            parent = self[parent_index]\n            if self.is_module(parent):\n                return parent\n            else:\n                return self.get_nearest_module_parent(parent)\n\n    def get_nearest_port_parent(self, entity):\n        \"\"\"Traverse the entity hierarchy to find a suitable parent port.\n\n        Returns a port row if a parent is found, else None is returned.\n\n        \"\"\"\n        parent_index = entity['entPhysicalContainedIn']\n        if parent_index in self:\n            parent = self[parent_index]\n            if self.is_port(parent):\n                return parent\n            else:\n                return self.get_nearest_port_parent(parent)\n\n    def get_chassis_of(self, entity):\n        \"\"\"Returns the nearest parent chassis of an entity.\n\n        Normally, all entities will resolve to the same chassis. In a stack,\n        however, there may be multiple chassis.\n        \"\"\"\n        while entity and not self.is_chassis(entity):\n            parent_idx = entity['entPhysicalContainedIn']\n            entity = self.get(parent_idx, None)\n        return entity if entity and self.is_chassis(entity) else None\n\n    def clean(self):\n        \"\"\"Cleans the table data\"\"\"\n\n        self._parse_mfg_date()\n        self._strip_whitespace()\n        self._fix_broken_chassis_relative_positions()\n        self._rename_stack_duplicates()\n\n    def _parse_mfg_date(self):\n        for entity in self.values():\n            mfg_date = entity.get('entPhysicalMfgDate')\n            if mfg_date:\n                mfg_date = parse_dateandtime_tc(mfg_date)\n            else:\n                mfg_date = None  # protect against potential empty bytestrings\n            entity['entPhysicalMfgDate'] = mfg_date\n\n    def _strip_whitespace(self):\n        \"\"\"Strips leading/trailing whitespace from all string data within\"\"\"\n        for entity in self.values():\n            for key, value in entity.items():\n                if hasattr(value, 'strip'):\n                    entity[key] = value.strip()\n\n    def _fix_broken_chassis_relative_positions(self):\n        \"\"\"\n        Some devices claim all chassis in a stack occupy the same relative\n        position. If this is so, renumber their relative positions according to\n        their position in the entPhysicalTable.\n        \"\"\"\n        chassis = self.get_chassis()\n        distinct_pos = set(c['entPhysicalParentRelPos'] for c in chassis)\n        if len(distinct_pos) == len(chassis):\n            return\n\n        chassis.sort(key=itemgetter(0))\n        for relpos, ent in enumerate(chassis, start=1):\n            ent['_entPhysicalParentRelPos'] = ent['entPhysicalParentRelPos']\n            ent['entPhysicalParentRelPos'] = relpos\n\n    def _rename_stack_duplicates(self):\n        \"\"\"\n        Renames entities with duplicate names by inserting the stack-relative\n        positions of their owning chassis into their entPhysicalNames\n        \"\"\"\n        if len(self.get_chassis()) < 2:\n            return\n\n        dupes = self._get_non_chassis_duplicates()\n        for ent in chain(*dupes.values()):\n            chassis = self.get_chassis_of(ent)\n            name = ent.get('_entPhysicalName', ent.get('entPhysicalName'))\n            ent['_entPhysicalName'] = name\n            if chassis:\n                relpos = chassis['entPhysicalParentRelPos']\n                ent['entPhysicalName'] = \"{0} [chassis {1}]\".format(name, relpos)\n\n    def _get_non_chassis_duplicates(self):\n        \"\"\"\n        Returns a dict of all entities that have non-unique names.\n\n        :returns: dict(name=[list of at least 2 entities with this name], ...)\n\n        \"\"\"\n        dupes = defaultdict(list)\n        for ent in self.values():\n            if not self.is_chassis(ent):\n                dupes[ent['entPhysicalName']].append(ent)\n        dupes = dict((key, value) for key, value in dupes.items() if len(value) > 1)\n        return dupes\n\n\nEIGHT_OCTET_DATEANDTIME = struct.Struct(\"HBBBBBB\")\nELEVEN_OCTET_DATEANDTIME = struct.Struct(\"HBBBBBBcBB\")\nUNDEFINED_DATETIME = \"\\x00\" * 8\n\n\ndef parse_dateandtime_tc(value):\n    \"\"\"Parses an SNMPv2-TC::DateAndTime Textual Convention into a datetime\n    object. Timezone information is ignored by this function.\n\n    Reference: https://tools.ietf.org/html/rfc2579#page-18\n\n    :returns: A datetime.datetime object on success, or None on failure.\n    \"\"\"\n    if value == UNDEFINED_DATETIME:\n        return\n\n    try:\n        (\n            year,\n            month,\n            day,\n            hours,\n            minutes,\n            seconds,\n            deciseconds,\n        ) = EIGHT_OCTET_DATEANDTIME.unpack(value[:8])\n    except struct.error as err:\n        _logger.debug(\"could not parse %r as DateAndTime TC: %s\", value, err)\n        return\n    except TypeError as err:\n        _logger.debug(\"value %r wrong type: %s\", value, err)\n        return\n\n    microseconds = deciseconds * 100000\n    try:\n        return datetime(year, month, day, hours, minutes, seconds, microseconds)\n    except ValueError as err:\n        _logger.debug(\"invalid value parsed from DateAndTime TC %r: %s\", value, err)\n        return\n\n\ndef _entity_to_powersupply_or_fan(entity):\n    psu_or_fan = PowerSupplyOrFan(\n        name=entity.get(\"entPhysicalName\"),\n        model=entity.get(\"entPhysicalModelName\"),\n        descr=entity.get(\"entPhysicalDescr\"),\n        physical_class=entity.get(\"entPhysicalClass\"),\n        internal_id=entity.get(0),\n    )\n    serial = entity.get(\"entPhysicalSerialNum\")\n    if serial:\n        device = Device(\n            serial=serial,\n            hardware_version=entity.get(\"entPhysicalHardwareRev\"),\n            firmware_version=entity.get(\"entPhysicalFirmwareRev\"),\n            software_version=entity.get(\"entPhysicalSoftwareRev\"),\n        )\n        psu_or_fan.device = device\n    return psu_or_fan\n"
  },
  {
    "path": "python/nav/mibs/entity_sensor_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.models.manage import Sensor\n\nUNITS_OF_MEASUREMENTS = {\n    1: Sensor.UNIT_OTHER,\n    2: Sensor.UNIT_UNKNOWN,\n    3: Sensor.UNIT_VOLTS_AC,\n    4: Sensor.UNIT_VOLTS_DC,\n    5: Sensor.UNIT_AMPERES,\n    6: Sensor.UNIT_WATTS,\n    7: Sensor.UNIT_HERTZ,\n    8: Sensor.UNIT_CELSIUS,\n    9: Sensor.UNIT_PERCENT_RELATIVE_HUMIDITY,\n    10: Sensor.UNIT_RPM,\n    11: Sensor.UNIT_CMM,\n    12: Sensor.UNIT_TRUTHVALUE,\n    13: 'specialEnum',  # cisco extension\n    14: Sensor.UNIT_DBM,  # cisco extension\n}\n\nDATA_SCALE = {\n    1: 'yocto',\n    2: 'zepto',\n    3: 'atto',\n    4: 'femto',\n    5: 'pico',\n    6: 'nano',\n    7: 'micro',\n    8: 'milli',\n    9: None,\n    10: 'kilo',\n    11: 'mega',\n    12: 'giga',\n    13: 'tera',\n    14: 'exa',\n    15: 'peta',\n    16: 'zetta',\n    17: 'yotta',\n}\n\n\nclass EntitySensorMib(mibretriever.MibRetriever):\n    mib = get_mib('ENTITY-SENSOR-MIB')\n    TYPE_COLUMN = 'entPhySensorType'\n    SCALE_COLUMN = 'entPhySensorScale'\n    PRECISION_COLUMN = 'entPhySensorPrecision'\n    VALUE_COLUMN = 'entPhySensorValue'\n    STATUS_COLUMN = 'entPhySensorOperStatus'\n\n    def __init__(self, agent_proxy):\n        \"\"\"Good old constructor...\"\"\"\n        super(EntitySensorMib, self).__init__(agent_proxy)\n        self.entity_mib = EntityMib(self.agent_proxy)\n\n    def _get_sensors(self):\n        \"\"\"Collect all sensors from the box.\"\"\"\n        df = self.retrieve_columns(\n            [\n                self.TYPE_COLUMN,\n                self.SCALE_COLUMN,\n                self.PRECISION_COLUMN,\n                self.VALUE_COLUMN,\n                self.STATUS_COLUMN,\n            ]\n        )\n        df.addCallback(reduce_index)\n        return df\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Collect all sensors and names on a netbox, and match\n        sensors with names.\n\n        Return a list with dictionaries, each dictionary\n        represent a sensor.\"\"\"\n        sensors = yield self._get_sensors()\n        entities = yield self.entity_mib.get_entity_physical_table()\n        aliases = yield self.entity_mib.get_alias_mapping()\n        for idx, row in entities.items():\n            if idx in sensors:\n                sensors[idx]['entPhysicalDescr'] = row.get('entPhysicalDescr')\n                sensors[idx]['entPhysicalName'] = row.get('entPhysicalName')\n                port = entities.get_nearest_port_parent(row)\n                if port and port.index[-1] in aliases:\n                    ifindices = aliases[port.index[-1]]\n                    if len(ifindices) == 1:\n                        sensors[idx]['ifindex'] = ifindices[0]\n        result = []\n        for row_id, row in sensors.items():\n            row_oid = row.get(0)\n            mibobject = self.nodes.get(self.VALUE_COLUMN)\n            oid = str(mibobject.oid) + str(row_oid)\n            unit_of_measurement = row.get(self.TYPE_COLUMN, 2)\n            precision = row.get(self.PRECISION_COLUMN, 0)\n            scale = row.get(self.SCALE_COLUMN)\n            op_status = row.get(self.STATUS_COLUMN)\n            description = row.get('entPhysicalDescr')\n            name = row.get('entPhysicalName') or description\n            ifindex = row.get('ifindex')\n            internal_name = name\n            if op_status == 1:\n                result.append(\n                    {\n                        'oid': oid,\n                        'unit_of_measurement': UNITS_OF_MEASUREMENTS.get(\n                            unit_of_measurement\n                        ),\n                        'precision': precision,\n                        'scale': DATA_SCALE.get(scale),\n                        'description': description,\n                        'name': name,\n                        'internal_name': internal_name,\n                        'mib': self.get_module_name(),\n                        'ifindex': ifindex,\n                    }\n                )\n        self._logger.debug('get_all_sensors: result=%s', result)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/esswitch_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"STANDALONE-ETHERNET-SWITCH-MIB to get data from Cisco 1900 (originally by\nGrand Junction Networks)\n\n\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass ESSwitchMib(mibretriever.MibRetriever):\n    mib = get_mib('STAND-ALONE-ETHERNET-SWITCH-MIB')\n\n    BANDWIDTH_USAGE_CURRENT = 'bandwidthUsageCurrent'\n    BANDWIDTH_USAGE_CURRENT_PEAK_ENTRY = 'bandwidthUsageCurrentPeakEntry'\n    BANDWIDTH_USAGE_CURRENT_PEAK = 'bandwidthUsagePeak'\n\n    def get_bandwidth(self):\n        \"\"\"Retrieves the current bandwidth usage in Mbit/s\"\"\"\n        return self.get_next(self.BANDWIDTH_USAGE_CURRENT)\n\n    @defer.inlineCallbacks\n    def get_bandwidth_peak(self):\n        \"\"\"Retrieves the peak bandwidth usage (in Mbit/s) within the\n        device-configured measuering interval.\n\n        \"\"\"\n        peak_index = yield self.get_next(self.BANDWIDTH_USAGE_CURRENT_PEAK_ENTRY)\n\n        if peak_index:\n            peak_oid = str(\n                self.nodes[self.BANDWIDTH_USAGE_CURRENT_PEAK].oid + (peak_index,)\n            )\n            rsp = yield self.agent_proxy.get([peak_oid])\n            return rsp.get(peak_oid, None)\n"
  },
  {
    "path": "python/nav/mibs/etherlike_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a EtherLike-MIB MibRetriever and associated functionality.\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass EtherLikeMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever for EtherLike-MIB\"\"\"\n\n    mib = get_mib('EtherLike-MIB')\n\n    @defer.inlineCallbacks\n    def get_duplex(self):\n        \"\"\"Get a mapping of ifindexes->duplex status.\"\"\"\n        data = yield self.retrieve_columns(('dot3StatsDuplexStatus',))\n        duplex = self.translate_result(data)\n\n        result = {\n            index[0]: row['dot3StatsDuplexStatus'] for index, row in duplex.items()\n        }\n        return result\n"
  },
  {
    "path": "python/nav/mibs/extreme_vlan_mib.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements an EXTREME-VLAN-MIB MibRetriever\"\"\"\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs.qbridge_mib import portlist\nfrom nav.mibs import reduce_index\nfrom . import mibretriever\n\n\nclass ExtremeVlanMib(mibretriever.MibRetriever):\n    \"\"\"Gets data from the EXTREME-VLAN-MIB\"\"\"\n\n    mib = get_mib('EXTREME-VLAN-MIB')\n\n    def get_vlan_ports(self):\n        \"\"\"Retrieves the VLAN port configurations.\n\n        :returns: A dict of the form\n                  { extremeVlanIfIndex: (tagged_portlist, untagged_portlist) }\n\n        \"\"\"\n        df = self.retrieve_table('extremeVlanOpaqueTable')\n        df.addCallback(_strip_slot_numbers_from_index)\n        df.addCallback(_convert_columns_to_portlists)\n        return df\n\n    def get_ifindex_vlan_map(self):\n        \"\"\"Retrieves a mapping of ifIndexes to VLAN IDs.\n\n        The Extreme switch will have a virtual interface for each active VLAN,\n        this maps those interfaces' ifIndexes to their corresponding VLAN id.\n\n        :returns: A dict of the form { ifindex: vlan_id }\n        \"\"\"\n        df = self.retrieve_column('extremeVlanIfVlanId')\n        return df.addCallback(reduce_index)\n\n\ndef _strip_slot_numbers_from_index(table):\n    return dict((if_index, row) for (if_index, slot_number), row in table.items())\n\n\ndef _convert_columns_to_portlists(table):\n    return dict(\n        (\n            key,\n            (\n                portlist(row['extremeVlanOpaqueTaggedPorts']),\n                portlist(row['extremeVlanOpaqueUntaggedPorts']),\n            ),\n        )\n        for key, row in table.items()\n    )\n"
  },
  {
    "path": "python/nav/mibs/geist_mibv3.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-20011, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that tries to retrieve all sensors from Geist-branded WeatherGoose\nproducts.\n\nUses the vendor-specific GEIST-MIB-V3 (derived from the IT-WATCHDOGS-MIB-V3)\nto detect and collect sensor-information.\n\n\"\"\"\n\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\nfrom .itw_mibv3 import ItWatchDogsMibV3\n\n\nclass GeistMibV3(ItWatchDogsMibV3):\n    \"\"\"\n    A MibRetriever for retrieving information from Geist branded\n    WeatherGoose products.\n\n    Based on the GEIST-MIB-V3, which is more or less derived from the\n    IT-WATCHDOGS-MIB-V3. Objects names in the derived MIB are mostly the\n    same, except for a `cm` prefix on notification objects, which has changed\n    to the `gst` prefix. This implementation does not use the notification\n    objects for anything, so we don't need to care about this name change here.\n\n    \"\"\"\n\n    mib = get_mib('GEIST-MIB-V3')\n\n    oid_name_map = {OID(attrs['oid']): name for name, attrs in mib['nodes'].items()}\n\n    lowercase_nodes = {key.lower(): key for key in mib['nodes']}\n"
  },
  {
    "path": "python/nav/mibs/geist_mibv4.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that tries to retrieve all internal sensors from Geist-branded WeatherGoose\nproducts.\n\nUses the vendor-specific GEIST-V4-MIB (derived from the IT-WATCHDOGS-V4-MIB)\nto detect and collect sensor-information.\n\nPlease note:\nThis is NOT a full implementaion of the GEIST-V4-MIB. Only the internal\nsensors of the box are implemented. The box can be extended with additional\nexternal sensors, but these are not implemented because we did not have any\nexternal sensors available at the time of this implementation.\n\"\"\"\n\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\nfrom .itw_mibv4 import ItWatchDogsMibV4\n\n\nclass GeistMibV4(ItWatchDogsMibV4):\n    \"\"\"\n    A MibRetriever for retrieving information from Geist branded\n    WeatherGoose products.\n\n    Based on the GEIST-V4-MIB, which is more or less derived from the\n    IT-WATCHDOGS-V4-MIB. Objects names in the derived MIB seems to be the\n    same.\n\n    \"\"\"\n\n    mib = get_mib('GEIST-V4-MIB')\n\n    oid_name_map = {OID(attrs['oid']): name for name, attrs in mib['nodes'].items()}\n\n    lowercase_nodes = {key.lower(): key for key in mib['nodes']}\n"
  },
  {
    "path": "python/nav/mibs/hp_httpmanageable_mib.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\n\n\nclass HPHTTPManageableMib(MibRetriever):\n    \"\"\"HP-httpManageable-MIB (SEMI-MIB) MibRetriever\"\"\"\n\n    mib = get_mib('SEMI-MIB')\n\n    @defer.inlineCallbacks\n    def get_serial_number(self):\n        \"\"\"Tries to get a chassis serial number from old HP switches\"\"\"\n        serial = yield self.get_next('hpHttpMgSerialNumber')\n        if serial:\n            if isinstance(serial, bytes):\n                serial = serial.decode(\"utf-8\")\n            return serial\n"
  },
  {
    "path": "python/nav/mibs/hpicf_fan_mib.py",
    "content": "# Copyright 2008 - 2011, 2019 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a MibRetriever for Hewlett Packard's FAN-MIB.\"\"\"\n\nfrom operator import attrgetter\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\nfrom nav.models.manage import PowerSupplyOrFan as FAN\nfrom .hpicf_powersupply_mib import (\n    _psu_index_from_internal_id as _fan_index_from_internal_id,\n)\n\n\nFAN_STATUS_MAP = {\n    \"failed\": FAN.STATE_DOWN,\n    \"removed\": FAN.STATE_UNKNOWN,\n    \"off\": FAN.STATE_UNKNOWN,\n    \"underspeed\": FAN.STATE_WARNING,\n    \"overspeed\": FAN.STATE_WARNING,\n    \"ok\": FAN.STATE_UP,\n    \"maxstate\": FAN.STATE_WARNING,\n}\n\n\nclass HpIcfFanMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for collecting fan states from HP netboxes.\"\"\"\n\n    mib = get_mib(\"FAN-MIB\")\n\n    def __init__(self, agent_proxy):\n        super(HpIcfFanMib, self).__init__(agent_proxy)\n        self.entity_mib = EntityMib(agent_proxy)\n        self.fan_status_table = None\n\n    @defer.inlineCallbacks\n    def _get_fan_status_table(self):\n        \"\"\"Returns the fan status from this netbox.\"\"\"\n        df = self.retrieve_table(\"hpicfFanTable\")\n        df.addCallback(self.translate_result)\n        df.addCallback(reduce_index)\n        fan_table = yield df\n        self._logger.debug(\"fan_table: %r\", fan_table)\n        return fan_table\n\n    @staticmethod\n    def _translate_fan_status(psu_status):\n        \"\"\"Translates the PSU status value from the MIB to a NAV PSU status value.\n\n        :returns: A state value from nav.models.manage.PowerSupplyOrFan.STATE_CHOICES\n\n        \"\"\"\n        return FAN_STATUS_MAP.get(psu_status, FAN.STATE_UNKNOWN)\n\n    @defer.inlineCallbacks\n    def get_fan_status(self, internal_id):\n        \"\"\"Returns the status of the fan with the given internal id.\"\"\"\n        if not self.fan_status_table:\n            self.fan_status_table = yield self._get_fan_status_table()\n\n        index = _fan_index_from_internal_id(internal_id)\n        fan_status_row = self.fan_status_table.get(index, {})\n        fan_status = fan_status_row.get(\"hpicfFanState\")\n\n        self._logger.debug(\"hpicfFanState.%s = %r\", index, fan_status)\n        return self._translate_fan_status(fan_status)\n\n    @defer.inlineCallbacks\n    def get_fans(self):\n        \"\"\"Retrieves a list of fan objects\"\"\"\n        hp_fans = yield self._get_fan_status_table()\n        entities = yield self.entity_mib.get_fans()\n        if len(hp_fans) != len(entities):\n            self._logger.warning(\n                \"Number of fans in ENTITY-MIB (%d) and FAN-MIB (%d) do not match\",\n                len(entities),\n                len(hp_fans),\n            )\n\n        # Fans always numbered from 1 and up in FAN-MIB,\n        # and there is no official way to map their IDs to\n        # ENTITY-MIB::entPhysicalTable - therefore, this code naively assumes they at\n        # least appear in the same order in the two MIBS\n        for index, ent in enumerate(\n            sorted(entities, key=attrgetter(\"internal_id\")), start=1\n        ):\n            ent.internal_id = \"{}:{}\".format(ent.internal_id, index)\n\n        return entities\n"
  },
  {
    "path": "python/nav/mibs/hpicf_powersupply_mib.py",
    "content": "#\n# Copyright 2008 - 2011, 2014, 2019 (C) Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a MibRetriever for Hewlett Packard's POWERSUPPLY-MIB.\"\"\"\n\nfrom operator import attrgetter\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.mibs.entity_mib import EntityMib\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\nfrom nav.models.manage import PowerSupplyOrFan as PSU\n\n\nPSU_STATUS_MAP = {\n    \"psPowered\": PSU.STATE_UP,\n    \"psNotPlugged\": PSU.STATE_DOWN,\n    \"psFailed\": PSU.STATE_DOWN,\n    \"psPermFailure\": PSU.STATE_DOWN,\n    \"psMax\": PSU.STATE_WARNING,\n}\n\n\nclass HpIcfPowerSupplyMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for collecting power supply states from HP netboxes.\"\"\"\n\n    mib = get_mib(\"POWERSUPPLY-MIB\")\n\n    def __init__(self, agent_proxy):\n        super(HpIcfPowerSupplyMib, self).__init__(agent_proxy)\n        self.entity_mib = EntityMib(agent_proxy)\n        self.psu_status_table = None\n\n    @defer.inlineCallbacks\n    def _get_psu_status_table(self):\n        \"\"\"Returns the power supply status table from this netbox.\"\"\"\n        df = self.retrieve_table(\"hpicfPsTable\")\n        df.addCallback(self.translate_result)\n        df.addCallback(reduce_index)\n        psu_table = yield df\n        self._logger.debug(\"psu_table: %r\", psu_table)\n        return psu_table\n\n    @staticmethod\n    def _translate_psu_status(psu_status):\n        \"\"\"Translates the PSU status value from the MIB to a NAV PSU status value.\n\n        :returns: A state value from nav.models.manage.PowerSupplyOrFan.STATE_CHOICES\n\n        \"\"\"\n        return PSU_STATUS_MAP.get(psu_status, PSU.STATE_UNKNOWN)\n\n    @defer.inlineCallbacks\n    def get_power_supply_status(self, internal_id):\n        \"\"\"Returns the status of the powersupply with the given internal id.\"\"\"\n        if not self.psu_status_table:\n            self.psu_status_table = yield self._get_psu_status_table()\n\n        index = _psu_index_from_internal_id(internal_id)\n        psu_status_row = self.psu_status_table.get(index, {})\n        psu_status = psu_status_row.get(\"hpicfPsState\")\n\n        self._logger.debug(\"hpicfPsState.%s = %r\", index, psu_status)\n        return self._translate_psu_status(psu_status)\n\n    @defer.inlineCallbacks\n    def get_power_supplies(self):\n        \"\"\"Retrieves a list of power supply objects\"\"\"\n        hp_psus = yield self._get_psu_status_table()\n        entities = yield self.entity_mib.get_power_supplies()\n        if len(hp_psus) != len(entities):\n            self._logger.warning(\n                \"Number of power supplies in ENTITY-MIB (%d) and POWERSUPPLY-MIB (%d) \"\n                \"do not match\",\n                len(entities),\n                len(hp_psus),\n            )\n\n        # Power supplies are always numbered from 1 and up in POWERSUPPLY-MIB,\n        # and there is no official way to map their IDs to\n        # ENTITY-MIB::entPhysicalTable - therefore, this code naively assumes they at\n        # least appear in the same order in the two MIBS\n        for index, ent in enumerate(\n            sorted(entities, key=attrgetter(\"internal_id\")), start=1\n        ):\n            ent.internal_id = \"{}:{}\".format(ent.internal_id, index)\n\n        return entities\n\n\ndef _psu_index_from_internal_id(internal_id):\n    if isinstance(internal_id, str):\n        return int(internal_id.split(\":\")[1] if \":\" in internal_id else internal_id)\n    else:\n        return internal_id\n"
  },
  {
    "path": "python/nav/mibs/ibm_pdu_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MibRetriever implementation for IBM-PDU-MIB\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nPHASE_LAST_POWER_READING = 'ibmPduPhaseLastPowerReading'\n\nOUTLET_NAME = 'ibmPduOutletName'\nOUTLET_DESCRIPTION = 'ibmPduOutletDescription'\nOUTLET_VOLTAGE = 'ibmPduOutletVoltage'\nOUTLET_CURRENT = 'ibmPduOutletCurrent'\nOUTLET_MAX_CAPACITY = 'ibmPduOutletMaxCapacity'\nOUTLET_LAST_POWER_READING = 'ibmPduOutletLastPowerReading'\n\n\nclass IbmPduMib(MibRetriever):\n    \"\"\"MibRetriever implementation for IBM-PDU-MIB, as used by IBM/Lenovo Power\n    Distribution Units.\n    \"\"\"\n\n    mib = get_mib('IBM-PDU-MIB')\n\n    @inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Retrieves various phase and outlet power usage objects as sensor\n        records.\n        \"\"\"\n        phases = yield self._get_phase_sensors()\n        outlets = yield self._get_outlet_sensors()\n        return phases + outlets\n\n    @inlineCallbacks\n    def _get_phase_sensors(self):\n        phases = yield self.retrieve_columns([PHASE_LAST_POWER_READING]).addCallback(\n            reduce_index\n        )\n        if phases:\n            self._logger.debug(\"Got phase power readings: %r\", phases)\n\n        result = []\n        column = self.nodes.get(PHASE_LAST_POWER_READING)\n        for index, _row in phases.items():\n            value_oid = str(column.oid + str(index))\n            if len(index) == 2:\n                index = index[0]  # PDU agent breaks the MIB definition :P\n\n            name = \"Phase %d\" % index\n\n            result.append(\n                dict(\n                    oid=value_oid,\n                    unit_of_measurement=Sensor.UNIT_WATTS,\n                    precision=0,\n                    scale=None,\n                    description='%s power reading' % name,\n                    name=name,\n                    internal_name='%s_%s' % (PHASE_LAST_POWER_READING, index),\n                    mib=self.get_module_name(),\n                )\n            )\n\n        return result\n\n    @inlineCallbacks\n    def _get_outlet_sensors(self):\n        outlets = yield self.retrieve_columns(\n            [\n                OUTLET_NAME,\n                OUTLET_DESCRIPTION,\n                OUTLET_VOLTAGE,\n                OUTLET_CURRENT,\n                OUTLET_MAX_CAPACITY,\n                OUTLET_LAST_POWER_READING,\n            ]\n        ).addCallback(reduce_index)\n        if outlets:\n            self._logger.debug(\"Got outlet power readings: %r\", outlets)\n\n        result = []\n        for index, row in outlets.items():\n            result.extend(self._outlet_row_to_sensors(index, row))\n\n        return result\n\n    def _outlet_row_to_sensors(self, index, row):\n        name = row.get(OUTLET_NAME)\n        description = row.get(OUTLET_DESCRIPTION)\n\n        voltage = dict(\n            oid=str(self.nodes.get(OUTLET_VOLTAGE).oid + str(index)),\n            unit_of_measurement=Sensor.UNIT_VOLTS_AC,\n            precision=3,\n            scale=None,\n            description='%s voltage' % description,\n            name='%s voltage' % name,\n            internal_name='%s_%s' % (OUTLET_VOLTAGE, index),\n            mib=self.get_module_name(),\n        )\n        yield voltage\n\n        current = dict(\n            oid=str(self.nodes.get(OUTLET_CURRENT).oid + str(index)),\n            unit_of_measurement=Sensor.UNIT_AMPERES,\n            precision=3,\n            scale=None,\n            description='%s current' % description,\n            name='%s current' % name,\n            internal_name='%s_%s' % (OUTLET_CURRENT, index),\n            mib=self.get_module_name(),\n        )\n        yield current\n\n        power = dict(\n            oid=str(self.nodes.get(OUTLET_LAST_POWER_READING).oid + str(index)),\n            unit_of_measurement=Sensor.UNIT_WATTS,\n            precision=0,\n            scale=None,\n            description='%s power reading' % description,\n            name='%s power reading' % name,\n            internal_name='%s_%s' % (OUTLET_LAST_POWER_READING, index),\n            mib=self.get_module_name(),\n        )\n        yield power\n"
  },
  {
    "path": "python/nav/mibs/ieee8023_lag_mib.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"A MibRetriever to retrieve IEEE 802.3ad info from the IEEE8023-LAG-MIB\"\"\"\n\nfrom collections import defaultdict\nfrom twisted.internet.defer import inlineCallbacks\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\n\n\nclass IEEE8023LagMib(mibretriever.MibRetriever):\n    \"\"\" \"A MibRetriever for handling IEEE8023-LAG-MIB\"\"\"\n\n    mib = get_mib('IEEE8023-LAG-MIB')\n\n    @inlineCallbacks\n    def retrieve_selected_aggregators(self):\n        \"\"\"\n        Retrieves a dict of ifIndexes of aggregation ports and the ifIndex of\n        their selected aggregation port, if one is selected.\n\n        :returns: { aggregation_ifindex: aggregator_ifindex, ... }\n        \"\"\"\n        result = yield self.retrieve_column('dot3adAggPortSelectedAggID').addCallback(\n            reduce_index\n        )\n        return {\n            port: aggregator for port, aggregator in result.items() if aggregator != 0\n        }\n\n    @inlineCallbacks\n    def retrieve_attached_aggregators(self):\n        \"\"\"\n        Retrieves a dict of ifIndexes of aggregation ports and the ifIndex of\n        their attached aggregation port, if one is attached.\n\n        :returns: { aggregation_ifindex: aggregator_ifindex, ... }\n        \"\"\"\n        result = yield self.retrieve_column('dot3adAggPortAttachedAggID').addCallback(\n            reduce_index\n        )\n        return {\n            port: aggregator for port, aggregator in result.items() if aggregator != 0\n        }\n\n    @inlineCallbacks\n    def retrieve_aggregations_by_operational_key(self):\n        \"\"\"\n        Retrieves a dict where the keys are the ifIndexes of aggregators,\n        and the values are lists of ifIndexes of aggregation ports with the\n        corresponding operational key (regardless of their current status).\n\n        :returns: { aggregation_ifindex: aggregator_ifindex, ... }\n        \"\"\"\n        aggregators = yield self.retrieve_column('dot3adAggActorOperKey').addCallback(\n            reduce_index\n        )\n        aggregations = yield self.retrieve_column(\n            'dot3adAggPortActorOperKey'\n        ).addCallback(reduce_index)\n\n        by_opervalue = defaultdict(list)\n        for ifindex, opervalue in aggregations.items():\n            by_opervalue[opervalue].append(ifindex)\n\n        result = {\n            ifindex: by_opervalue[opervalue]\n            for ifindex, opervalue in aggregators.items()\n            if opervalue in by_opervalue\n        }\n\n        return result\n"
  },
  {
    "path": "python/nav/mibs/if_mib.py",
    "content": "#\n# Copyright (C) 2008-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass IfMib(mibretriever.MibRetriever):\n    mib = get_mib('IF-MIB')\n\n    def get_if_table_last_change(self):\n        \"Retrieves the sysUpTime value of the last time ifTable changed\"\n        return self.get_next('ifTableLastChange')\n\n    @defer.inlineCallbacks\n    def get_if_table(self):\n        df = self.retrieve_table('ifTable')\n        df.addCallback(self.translate_result)\n        df.addCallback(reduce_index)\n        if_table = yield df\n        return if_table\n\n    @defer.inlineCallbacks\n    def get_ifnames(self):\n        \"\"\"Retrieves ifName and ifDescr for all interfaces.\n\n        :returns: A dictionary like { ifindex: (ifName, ifDescr), ...}\n\n        \"\"\"\n        table = yield self.retrieve_columns(['ifName', 'ifDescr']).addCallback(\n            reduce_index\n        )\n        result = dict(\n            (index, (row['ifName'], row['ifDescr'])) for index, row in table.items()\n        )\n        return result\n\n    @defer.inlineCallbacks\n    def get_ifaliases(self):\n        \"\"\"Retrieves ifAlias value for all interfaces.\n\n        :returns: A dictionary like { ifindex: ifAlias, ... }\n\n        \"\"\"\n        aliases = yield self.retrieve_column('ifAlias').addCallback(reduce_index)\n        return aliases\n\n    @defer.inlineCallbacks\n    def get_ifindexes(self):\n        \"Retrieves a list of current ifIndexes\"\n        indexes = yield self.retrieve_column('ifIndex')\n        return indexes.values()\n\n    @defer.inlineCallbacks\n    def get_admin_status(self):\n        \"\"\"Retrieves ifAdminStatus for all interfaces.\n\n        :returns: A dictionary like { ifindex: ifAdminStatusfName, ...}\n\n        \"\"\"\n        df = self.retrieve_columns(['ifAdminStatus'])\n        df.addCallback(self.translate_result)\n        df.addCallback(reduce_index)\n        status = yield df\n\n        result = dict((index, row['ifAdminStatus']) for index, row in status.items())\n        return result\n\n    @defer.inlineCallbacks\n    def get_stack_status(self):\n        \"\"\"Gets the interface stacking status of the device.\n\n        :returns: A deferred whose result is a list of (higher, lower) tuples of\n                  ifindexes. Entries that don't indicate stacking are removed\n                  from the result.\n\n        \"\"\"\n        status = yield self.retrieve_columns(['ifStackStatus'])\n        result = [\n            (higher, lower)\n            for higher, lower in status.keys()\n            if higher > 0 and lower > 0\n        ]\n        return result\n"
  },
  {
    "path": "python/nav/mibs/ip_forward_mib.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A MibRetriever implementation for IP-FORWARD-MIB\"\"\"\n\nfrom collections import defaultdict\nfrom itertools import chain\nfrom collections import namedtuple\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.smidumps import get_mib\nfrom nav.oidparsers import consume\nfrom nav.oidparsers import InetPrefix, ObjectIdentifier, TypedInetAddress\nfrom . import mibretriever\n\n# Extracted from IANA-RPROTO-MIB::IANAipRouteProtocol, revision 200009260000Z\nIANA_IP_ROUTE_PROTOCOLS = {\n    1: 'other',\n    2: 'local',\n    3: 'netmgmt',\n    4: 'icmp',\n    5: 'egp',\n    6: 'ggp',\n    7: 'hello',\n    8: 'rip',\n    9: 'isIs',\n    10: 'esIs',\n    11: 'ciscoIgrp',\n    12: 'bbnSpfIgp',\n    13: 'ospf',\n    14: 'bgp',\n    15: 'idpr',\n    16: 'ciscoEigrp',\n    17: 'dvmrp',\n}\n\nCidrRouteEntry = namedtuple(\n    'CidrRouteEntry', ('index', 'destination', 'policy', 'nexthop')\n)\n\n\nclass IpForwardMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever implementation for IP-FORWARD-MIB\"\"\"\n\n    mib = get_mib('IP-FORWARD-MIB')\n\n    @inlineCallbacks\n    def get_routes(self, protocols=None):\n        \"\"\"\n        Returns the index of every entry in the routing table that matches any\n        of the specific protocols. If the protocols argument is omitted, a\n        dictionary of routes by protocols, {proto: [route1, route2, ...], ...}\n        is returned.\n\n        :param protocols: A list of protocol names.\n\n        \"\"\"\n        protos = yield self.retrieve_column('inetCidrRouteProto')\n\n        by_proto = defaultdict(list)\n        for index, proto in protos.items():\n            name = IANA_IP_ROUTE_PROTOCOLS.get(proto, proto)\n            by_proto[name].append(index)\n\n        if protocols:\n            result = chain(*[by_proto.get(proto, []) for proto in protocols])\n            return list(result)\n        else:\n            return dict(by_proto)\n\n    @inlineCallbacks\n    def get_decoded_routes(self, protocols=None):\n        \"\"\"\n        Returns a CidrRouteEntry tuple from every parseable entry in the routing\n        table that matches any of the specific protocols. If the protocols\n        argument is omitted, a dictionary of routes by protocols, {proto:\n        [route1, route2, ...], ...} is returned.\n\n        Non-parseable routes are ignored and removed.\n\n        :param protocols: A list of protocol names.\n\n        \"\"\"\n\n        def decode(index):\n            try:\n                return decode_route_entry(index)\n            except ValueError as error:\n                self._logger.debug(\"Route index was unparseable (%s): %r\", error, index)\n                return None\n\n        result = yield self.get_routes(protocols)\n        if protocols:\n            result = [\n                entry for entry in (decode_route_entry(r) for r in result) if entry\n            ]\n        else:\n            for proto in result:\n                result[proto] = [\n                    entry\n                    for entry in (decode_route_entry(r) for r in result[proto])\n                    if entry\n                ]\n        return result\n\n    def get_cidr_route_column(self, column, index):\n        \"\"\"Retrieves the value of a specific column for a given route index\"\"\"\n        if not column.startswith('inetCidrRoute'):\n            column = 'inetCidrRoute' + column\n        return self.retrieve_column_by_index(column, index)\n\n\ndef decode_route_entry(index):\n    \"\"\"Decodes the important bits of an inetCidrRouteTable row index.\n\n    :rtype: CidrRouteEntry\n\n    \"\"\"\n    destination, policy, nexthop = consume(\n        index, InetPrefix, ObjectIdentifier, TypedInetAddress\n    )\n    return CidrRouteEntry(index, destination, policy, nexthop)\n"
  },
  {
    "path": "python/nav/mibs/ip_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"MibRetriever implementation for IP-MIB\"\"\"\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.oids import OID\nfrom nav.oidparsers import IPV4_ID, IPV6_ID, oid_to_ipv6, oid_to_ipv4\nfrom nav.ipdevpoll.utils import binary_mac_to_hex\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\nIP_IN_OCTETS = 'ipIfStatsHCInOctets'\nIP_OUT_OCTETS = 'ipIfStatsHCOutOctets'\n\n\nclass IpMib(mibretriever.MibRetriever):\n    \"\"\"MibRetriever implementation for IP-MIB\"\"\"\n\n    mib = get_mib('IP-MIB')\n\n    @staticmethod\n    def inetaddress_to_ip(oid):\n        \"\"\"Convert an OID tuple to an IPy.IP object.\n\n        The OID is interpreted as a combination of the textual\n        conventions InetAddressType and InetAddress defined in\n        INET-ADDRESS-MIB.\n\n        Only the ipv4 and ipv6 address types are understood.  Any\n        other type encountered will result in a None value returned.\n\n        Example:\n\n        >>> oid = (2,16,254,128,0,0,0,0,0,0,2,28,46,255,254,233,228,0)\n        >>> inetaddress_to_ip(oid)\n        IP('fe80::21c:2eff:fee9:e400')\n        >>>\n\n\n        TODO: as the mibretriever system evolves to allow\n        interdependencies, the parsing of the InetAddress TC should be\n        in a separate inet_address_mib module.\n\n        \"\"\"\n        addr_type = oid[0]\n        addr = oid[1:]\n\n        if addr_type == IPV4_ID:\n            expected_len = 4\n            converter = oid_to_ipv4\n        elif addr_type == IPV6_ID:\n            expected_len = 16\n            converter = oid_to_ipv6\n        else:\n            # Unknown address type\n            return\n\n        # this mucking about with address lengths are due to the technical\n        # issue described in LP#777821\n        if len(addr) != expected_len:\n            addr_len, addr = addr[0], addr[1:]\n            if addr_len != expected_len or len(addr) != expected_len:\n                raise IndexToIpException(\n                    \"IPv%d address length is not %d: %r\"\n                    % (\n                        4 if addr_type == IPV4_ID else 6,\n                        expected_len,\n                        oid,\n                    )\n                )\n\n        return converter(addr)\n\n    @classmethod\n    def _chop_index(cls, index, entry):\n        \"\"\"\n        Chops a prefix OID off an index OID, based on a table entry object.\n\n        If the index is prefixed by the entry object itself, or by any of its\n        descendants (columnar objects) in the MIB, that prefix is chopped off\n        and the suffix is returned. Non-matches will return the index unchanged.\n\n        :param index: An OID object or equivalent tuple\n        :param entry: The name of an object in this MIB, preferable a table\n                      entry object.\n        :returns: An OID hobject.\n\n        \"\"\"\n        index = OID(index)\n        root = cls.nodes.get(entry, None)\n        if not root or not root.oid.is_a_prefix_of(index):\n            return index\n\n        children = (c.oid for c in cls.nodes.values() if root.oid.is_a_prefix_of(c.oid))\n        matched_prefixes = [c for c in children if c.is_a_prefix_of(index)] + [root.oid]\n        if matched_prefixes:\n            index = index.strip_prefix(matched_prefixes[0])\n\n        return index\n\n    @classmethod\n    def address_index_to_ip(cls, index):\n        \"\"\"Convert a row index from ipAddressTable to an IP object.\"\"\"\n\n        index = cls._chop_index(index, 'ipAddressEntry')\n        ip = cls.inetaddress_to_ip(index)\n        return ip\n\n    @classmethod\n    def prefix_index_to_ip(cls, index, prefix_entry='ipAddressPrefixEntry'):\n        \"\"\"Convert a row index from ipAddressPrefixTable to an IP object.\"\"\"\n\n        index = cls._chop_index(index, prefix_entry)\n\n        if len(index) < 4:\n            cls._logger.debug(\"prefix_index_to_ip: index too short: %r\", index)\n            return None\n\n        addr_oid = index[1:-1]\n        prefix_length = index[-1]\n\n        ip = cls.inetaddress_to_ip(addr_oid)\n        if ip:\n            prefix = ip.make_net(prefix_length)\n            return prefix\n\n    @inlineCallbacks\n    def _get_ifindex_ip_mac_mappings(self, column='ipNetToPhysicalPhysAddress'):\n        \"\"\"Get IP/MAC mappings from a table indexed by IfIndex+InetAddressType+\n        InetAddress.\n        \"\"\"\n        all_phys_addrs = yield self.retrieve_column(column)\n\n        mappings = set()\n\n        for row_index, phys_address in all_phys_addrs.items():\n            ifindex = row_index[0]\n            inet_address = row_index[1:]\n            ip = self.inetaddress_to_ip(inet_address)\n            mac = self._binary_mac_to_hex(phys_address)\n\n            row = (ifindex, ip, mac)\n            mappings.add(row)\n        self._logger.debug(\n            \"ip/mac pairs: Got %d rows from %s\", len(all_phys_addrs), column\n        )\n        return mappings\n\n    @inlineCallbacks\n    def _get_ifindex_ipv4_mac_mappings(self, column='ipNetToMediaPhysAddress'):\n        \"\"\"Get IP/MAC mappings from a table indexed by IfIndex+IpAddress.\"\"\"\n        ipv4_phys_addrs = yield self.retrieve_column(column)\n\n        mappings = set()\n        ignore_count = 0\n\n        for row_index, phys_address in ipv4_phys_addrs.items():\n            ifindex = row_index[0]\n            ip_address = row_index[1:]\n            if len(ip_address) != 4:\n                ignore_count += 1\n                continue\n\n            ip = oid_to_ipv4(ip_address)\n            mac = self._binary_mac_to_hex(phys_address)\n\n            row = (ifindex, ip, mac)\n            mappings.add(row)\n\n        if ignore_count:\n            self._logger.warning(\n                \"ignored %d/%d invalid IPv4 addresses from %s\",\n                ignore_count,\n                len(ipv4_phys_addrs),\n                column,\n            )\n        self._logger.debug(\n            \"ip/mac pairs: Got %d rows from %s\", len(ipv4_phys_addrs), column\n        )\n        return mappings\n\n    @staticmethod\n    def _binary_mac_to_hex(mac):\n        \"Converts a binary MAC address representation to a hexstring\"\n        return binary_mac_to_hex(mac)\n\n    @inlineCallbacks\n    def get_ifindex_ip_mac_mappings(self):\n        \"\"\"Retrieve the layer 3->layer 2 address mappings of this device.\n\n        Will retrieve results from the new IP-version-agnostic table of IP-MIB,\n        if there are no results it will retrieve from the deprecated IPv4-only\n        table.\n\n        Return value:\n          A set of tuples: set([(ifindex, ip_address, mac_address), ...])\n          ifindex will be an integer, ip_address will be an IPy.IP object and\n          mac_address will be a string with a colon-separated hex representation\n          of a MAC address.\n\n        \"\"\"\n        mappings_new = yield self._get_ifindex_ip_mac_mappings()\n        mappings_deprecated = yield self._get_ifindex_ipv4_mac_mappings()\n\n        return mappings_new | mappings_deprecated\n\n    @inlineCallbacks\n    def _get_interface_ipv4_addresses(\n        self, ifindex_column='ipAdEntIfIndex', netmask_column='ipAdEntNetMask'\n    ):\n        \"\"\"Get IPv4 address information for interfaces from a table\n        indexed by IpAddress.  Default is the ipAddrTable.\n\n        \"\"\"\n        address_rows = yield self.retrieve_columns((ifindex_column, netmask_column))\n\n        addresses = set()\n        ignore_count = 0\n\n        for row_index, row in address_rows.items():\n            if len(row_index) != 4:\n                ignore_count += 1\n                continue\n\n            ip = oid_to_ipv4(row_index)\n            ifindex = row[ifindex_column]\n            netmask = row[netmask_column]\n            try:\n                prefix = ip.make_net(netmask)\n            except ValueError as err:\n                self._logger.warning(\n                    \"ignoring IP address %s due to invalid netmask %s (%s)\",\n                    ip,\n                    netmask,\n                    err,\n                )\n            else:\n                new_row = (ifindex, ip, prefix)\n                addresses.add(new_row)\n\n        if ignore_count:\n            self._logger.warning(\n                \"ignored %d/%d invalid IPv4 addresses from %s\",\n                ignore_count,\n                len(address_rows),\n                ifindex_column,\n            )\n        self._logger.debug(\n            \"interface addresses: Got %d rows from %s\",\n            len(address_rows),\n            ifindex_column,\n        )\n        return addresses\n\n    @inlineCallbacks\n    def _get_interface_addresses(\n        self,\n        ifindex_column='ipAddressIfIndex',\n        prefix_column='ipAddressPrefix',\n        prefix_entry='ipAddressPrefixEntry',\n    ):\n        \"\"\"Get IP address information for interfaces from a table\n        indexed by InetAddressType+InetAddress.  Default is the ipAddressTable.\n\n        \"\"\"\n        address_rows = yield self.retrieve_columns((ifindex_column, prefix_column))\n\n        addresses = set()\n        unparseable_addrs = set()\n\n        for row_index, row in address_rows.items():\n            ip = self.inetaddress_to_ip(row_index)\n            if not ip:\n                unparseable_addrs.add(row_index)\n                continue\n\n            ifindex = row[ifindex_column]\n            prefix_pointer = row[prefix_column]\n\n            prefix = self.prefix_index_to_ip(prefix_pointer, prefix_entry)\n\n            new_row = (ifindex, ip, prefix)\n            addresses.add(new_row)\n\n        if unparseable_addrs:\n            self._logger.warning(\n                \"ignored %d invalid or unsupported addresses from %s: %r\",\n                len(unparseable_addrs),\n                ifindex_column,\n                unparseable_addrs,\n            )\n        self._logger.debug(\n            \"interface addresses: Got %d rows from %s\",\n            len(address_rows),\n            ifindex_column,\n        )\n        return addresses\n\n    @inlineCallbacks\n    def get_interface_addresses(self):\n        \"\"\"Retrieve the IP addresses and prefixes of interfaces.\n\n        Will retrieve results from the new IP-version-agnostic table of IP-MIB,\n        then from the deprecated IPv4-only table.\n\n        :returns: A set of tuples:\n                  set([(ifindex, ip_address, prefix_address), ...])\n                  ifindex will be an integer, ip_address and\n                  prefix_address will be IPy.IP objects.\n\n        \"\"\"\n        addrs_from_new_table = yield self._get_interface_addresses()\n        addrs_from_deprecated_table = yield self._get_interface_ipv4_addresses()\n\n        return addrs_from_new_table | addrs_from_deprecated_table\n\n    @inlineCallbacks\n    def get_ipv6_octet_counters(self):\n        \"\"\"For each applicable interface retrieves IPv6 octet in/out counters.\n\n        :returns: A deferred with a dict {ifindex: (in_octets, out_octets)}\n\n        \"\"\"\n        octets = yield self.retrieve_columns([IP_IN_OCTETS, IP_OUT_OCTETS])\n        result = dict(\n            (index[-1], (row[IP_IN_OCTETS], row[IP_OUT_OCTETS]))\n            for index, row in octets.items()\n            if index[-2] == IPV6_ID\n        )\n        return result\n\n\nclass MultiIpMib(IpMib, mibretriever.MultiMibMixIn):\n    \"\"\"A version of IpMib that supports collection of ip/mac mappings from multiple\n    logical instances.\n    \"\"\"\n\n    def get_ifindex_ip_mac_mappings(self):\n        method = super().get_ifindex_ip_mac_mappings\n        return self._multiquery(method, integrator=_set_integrator)\n\n\ndef _set_integrator(results):\n    return set().union(*(result_set for vrf, result_set in results))\n\n\nclass IndexToIpException(Exception):\n    \"\"\"A collected OID row index could not be converted to an IP address\"\"\"\n\n    pass\n"
  },
  {
    "path": "python/nav/mibs/ipv6_mib.py",
    "content": "#\n# Copyright (C) 2009-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"An IPV6-MIB MibRetriever.\n\nAlthough IPV6-MIB has been obsoleted by a revised version of IP-MIB,\nsome vendors still only provide IPv6 data in this MIB.\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll.utils import binary_mac_to_hex\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\nfrom . import ip_mib\n\n\nclass Ipv6Mib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for the deprecated IPv6-MIB\"\"\"\n\n    mib = get_mib('IPV6-MIB')\n\n    @staticmethod\n    def ipv6address_to_ip(oid):\n        \"\"\"Convert an OID tuple to an IPy.IP object.\n\n        The OID tuple syntex is expected to follow the Ipv6Address\n        textual convention defined in IPV6-TC.\n\n        Example:\n\n        >>> oid = (254,128,0,0,0,0,0,0,2,28,46,255,254,233,228,0)\n        >>> inetaddress_to_ip(oid)\n        IP('fe80::21c:2eff:fee9:e400')\n        >>>\n\n        \"\"\"\n        # We convert the oid's syntax into\n        # InetAddressType+InetAdddress and push it through the already\n        # working mechanism in the ip_mib module.\n        ipv6_type = 2\n        length = 16\n        if len(oid) == 17 and oid[0] == length:\n            # need to work around some devices that don't implement the\n            # IPV6-TC properly\n            converted_oid = (ipv6_type,) + oid\n        else:\n            converted_oid = (ipv6_type, length) + oid\n        return ip_mib.IpMib.inetaddress_to_ip(converted_oid)\n\n    @defer.inlineCallbacks\n    def get_ifindex_ip_mac_mappings(self):\n        \"\"\"Retrieve the IPv6->MAC address mappings of this device.\n\n        Return value:\n          A set of tuples: set([(ifindex, ip_address, mac_address), ...])\n          ifindex will be an integer, ip_address will be an IPy.IP object and\n          mac_address will be a string with a colon-separated hex representation\n          of a MAC address.\n\n        \"\"\"\n        column = 'ipv6NetToMediaPhysAddress'\n        ipv6_phys_addrs = yield self.retrieve_column(column)\n\n        mappings = set()\n\n        for row_index, phys_address in ipv6_phys_addrs.items():\n            ifindex = row_index[0]\n            ipv6_address = row_index[1:]\n            ip = Ipv6Mib.ipv6address_to_ip(ipv6_address)\n            mac = binary_mac_to_hex(phys_address)\n\n            row = (ifindex, ip, mac)\n            mappings.add(row)\n        self._logger.debug(\n            \"ip/mac pairs: Got %d rows from %s\", len(ipv6_phys_addrs), column\n        )\n        return mappings\n\n    @defer.inlineCallbacks\n    def get_interface_addresses(self):\n        \"\"\"Retrieve the IPv6 addresses and prefixes of interfaces.\n\n        Return value:\n          A set of tuples: set([(ifindex, ip_address, prefix_address), ...])\n          ifindex will be an integer, ip_address and prefix_address will be\n          IPy.IP objects.\n\n        \"\"\"\n        prefixlen_column = 'ipv6AddrPfxLength'\n        ipv6_addrs = yield self.retrieve_column(prefixlen_column)\n\n        addresses = set()\n\n        for row_index, prefixlen in ipv6_addrs.items():\n            ifindex = row_index[0]\n            ipv6_address = row_index[1:]\n            ip = Ipv6Mib.ipv6address_to_ip(ipv6_address)\n\n            prefix = ip.make_net(prefixlen)\n\n            row = (ifindex, ip, prefix)\n            addresses.add(row)\n        self._logger.debug(\n            \"interface addresses: Got %d rows from %s\",\n            len(ipv6_addrs),\n            prefixlen_column,\n        )\n\n        return addresses\n"
  },
  {
    "path": "python/nav/mibs/itw_mib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n#\n\"\"\"\nA class that tries to retrieve all sensors from WeatherGoose I.\n\nUses the vendor-specifica IT-WATCHDOGS-MIB to detect and collect\nsensor-information.\n\"\"\"\n\nfrom django.utils.encoding import smart_str\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.models.manage import Sensor\nfrom nav.oids import OID\n\n\nTABLES = {\n    'climateTable': [\n        {\n            'avail': 'climateAvail',\n            'serial': 'climateSerial',\n            'name': 'climateName',\n            'sensors': {\n                'climateTempC',\n                'climateHumidity',\n                'climateAirflow',\n                'climateLight',\n                'climateSound',\n                'climateIO1',\n                'climateIO2',\n                'climateIO3',\n            },\n        }\n    ],\n    'tempSensorTable': [\n        {\n            'avail': 'tempSensorAvail',\n            'serial': 'tempSensorSerial',\n            'name': 'tempSensorName',\n            'sensors': {\n                'tempSensorTempC',\n            },\n        }\n    ],\n    'airFlowSensorTable': [\n        {\n            'avail': 'airFlowSensorAvail',\n            'serial': 'airFlowSensorSerial',\n            'name': 'airFlowSensorName',\n            'sensors': {\n                'airFlowSensorTempC',\n                'airFlowSensorFlow',\n                'airFlowSensorHumidity',\n            },\n        }\n    ],\n    'doorSensorTable': [\n        {\n            'avail': 'doorSensorAvail',\n            'serial': 'doorSensorSerial',\n            'name': 'doorSensorName',\n            'sensors': {\n                'doorSensorStatus',\n            },\n        }\n    ],\n    'waterSensorTable': [\n        {\n            'avail': 'waterSensorAvail',\n            'serial': 'waterSensorSerial',\n            'name': 'waterSensorName',\n            'sensors': {\n                'waterSensorDampness',\n            },\n        }\n    ],\n    'currentMonitorTable': [\n        {\n            'avail': 'currentMonitorAvail',\n            'serial': 'currentMonitorSerial',\n            'name': 'currentMonitorName',\n            'sensors': {\n                'currentMonitorAmps',\n            },\n        }\n    ],\n    'millivoltMonitorTable': [\n        {\n            'avail': 'millivoltMonitorAvail',\n            'serial': 'millivoltMonitorSerial',\n            'name': 'millivoltMonitorName',\n            'sensors': {\n                'millivoltMonitorMV',\n            },\n        }\n    ],\n    'dewPointSensorTable': [\n        {\n            'avail': 'dewPointSensorAvail',\n            'serial': 'dewPointSensorSerial',\n            'name': 'dewPointSensorName',\n            'sensors': {\n                'dewPointSensorDewPoint',\n                'dewPointSensorTempC',\n                'dewPointSensorHumidity',\n            },\n        }\n    ],\n    'digitalSensorTable': [\n        {\n            'avail': 'digitalSensorAvail',\n            'serial': 'digitalSensorSerial',\n            'name': 'digitalSensorName',\n            'sensors': {\n                'digitalSensorDigital',\n            },\n        }\n    ],\n    'cpmSensorTable': [\n        {\n            'avail': 'cpmSensorAvail',\n            'serial': 'cpmSensorSerial',\n            'name': 'cpmSensorName',\n            'sensors': {\n                'cpmSensorStatus',\n            },\n        }\n    ],\n    'smokeAlarmTable': [\n        {\n            'avail': 'smokeAlarmAvail',\n            'serial': 'smokeAlarmSerial',\n            'name': 'smokeAlarmName',\n            'sensors': {\n                'smokeAlarmStatus',\n            },\n        }\n    ],\n    'neg48VdcSensorTable': [\n        {\n            'avail': 'neg48VdcSensorAvail',\n            'serial': 'neg48VdcSensorSerial',\n            'name': 'neg48VdcSensorName',\n            'sensors': {\n                'neg48VdcSensorVoltage',\n            },\n        }\n    ],\n    'pos30VdcSensorTable': [\n        {\n            'avail': 'pos30VdcSensorAvail',\n            'serial': 'pos30VdcSensorSerial',\n            'name': 'pos30VdcSensorName',\n            'sensors': {\n                'pos30VdcSensorVoltage',\n            },\n        }\n    ],\n    'analogSensorTable': [\n        {\n            'avail': 'analogSensorAvail',\n            'serial': 'analogSensorSerial',\n            'name': 'analogSensorName',\n            'sensors': {\n                'analogSensorAnalog',\n            },\n        }\n    ],\n    'powerMonitorTable': [\n        {\n            'avail': 'powMonAvail',\n            'serial': 'powMonSerial',\n            'name': 'powMonName',\n            'sensors': {\n                'powMonKWattHrs',\n                'powMonVolts',\n                'powMonVoltMax',\n                'powMonVoltMin',\n                'powMonVoltPk',\n                'powMonAmpsX10',\n                'powMonRealPow',\n                'powMonAppPow',\n                'powMonPwrFact',\n                'powMonOutlet1',\n                'powMonOutlet2',\n            },\n        }\n    ],\n    'powerOnlyTable': [\n        {\n            'avail': 'powerAvail',\n            'serial': 'powerSerial',\n            'name': 'powerName',\n            'sensors': {\n                'powerVolts',\n                'powerAmps',\n                'powerRealPow',\n                'powerAppPow',\n                'powerPwrFactor',\n            },\n        }\n    ],\n    'power3ChTable': [\n        {\n            'avail': 'pow3ChAvail',\n            'serial': 'pow3ChSerial',\n            'name': 'pow3ChName',\n            'sensors': {\n                'pow3ChKWattHrs' + ch,\n                'pow3ChVolts' + ch,\n                'pow3ChVoltMax' + ch,\n                'pow3ChVoltMin' + ch,\n                'pow3ChVoltMin' + ch,\n                'pow3ChVoltPk' + ch,\n                'pow3ChAmpsX10' + ch,\n                'pow3ChRealPow' + ch,\n                'pow3ChAppPow' + ch,\n                'pow3ChPwrFact' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C')\n    ],\n    'outletTable': [\n        {\n            'avail': 'outletAvail',\n            'serial': 'outletSerial',\n            'name': 'outletName',\n            'sensors': {\n                'outlet1Status',\n                'outlet2Status',\n            },\n        }\n    ],\n    'vsfcTable': [\n        {\n            'avail': 'vsfcAvail',\n            'serial': 'vsfcSerial',\n            'name': 'vsfcName',\n            'sensors': {\n                'vsfcSetPointC',\n                'vsfcFanSpeed',\n                'vsfcIntTempC',\n                'vsfcExt1TempC',\n                'vsfcExt2TempC',\n                'vsfcExt3TempC',\n                'vsfcExt4TempC',\n            },\n        }\n    ],\n    'ctrl3ChTable': [\n        {\n            'avail': 'ctrl3ChAvail',\n            'serial': 'ctrl3ChSerial',\n            'name': 'ctrl3ChName',\n            'sensors': {\n                'ctrl3ChVolts' + ch,\n                'ctrl3ChVoltPk' + ch,\n                'ctrl3ChAmps' + ch,\n                'ctrl3ChAmpPk' + ch,\n                'ctrl3ChRealPow' + ch,\n                'ctrl3ChAppPow' + ch,\n                'ctrl3ChPwrFact' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C')\n    ],\n    'ctrlGrpAmpsTable': [\n        {\n            'avail': 'ctrlGrpAmpsAvail',\n            'serial': 'ctrlGrpAmpsSerial',\n            'name': 'ctrlGrpAmpsName',\n            'sensors': {\n                'ctrlGrpAmps' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C', 'D', 'E', 'F')\n    ],\n    'ctrlOutletTable': [\n        {\n            'serial': 'ctrlOutletGroup',  # and serial\n            'name': 'ctrlOutletName',\n            'sensors': {\n                'ctrlOutletStatus',\n                'ctrlOutletFeedback',\n                'ctrlOutletPending',\n                'ctrlOutletAmps',\n                'ctrlOutletUpDelay',\n                'ctrlOutletDwnDelay',\n                'ctrlOutletRbtDelay',\n            },\n        }\n    ],\n    'dstsTable': [\n        {\n            'avail': 'dstsAvail',\n            'serial': 'dstsSerial',\n            'name': 'dstsName',\n            'sensors': {\n                'dstsVolts' + ch,\n                'dstsAmps' + ch,\n                'dstsSource' + ch + 'Active',\n                'dstsPowerStatus' + ch,\n                'dstsSource' + ch + 'TempC',\n            },\n        }\n        for ch in ('A', 'B')\n    ],\n}\n\n\nclass BaseITWatchDogsMib(mibretriever.MibRetriever):\n    def _get_oid_for_sensor(self, sensor_name):\n        \"\"\"Return the OID for the given sensor-name as a string; Return\n        None if sensor-name is not found.\n        \"\"\"\n        oid_str = None\n        nodes = self.mib.get('nodes')\n        if nodes:\n            sensor_def = nodes.get(sensor_name)\n            if sensor_def:\n                oid_str = sensor_def.get('oid')\n        return oid_str\n\n    def _make_result_dict(\n        self, sensor_oid, base_oid, serial, desc, u_o_m=None, **kwargs\n    ):\n        \"\"\"Make a simple dictionary to return to plugin\"\"\"\n        if not sensor_oid or not base_oid or not serial or not desc:\n            return {}\n        oid = OID(base_oid) + OID(sensor_oid)\n        internal_name = smart_str(serial) + desc\n        res = {\n            'oid': oid,\n            'unit_of_measurement': u_o_m,\n            'description': desc,\n            'internal_name': internal_name,\n            'mib': self.get_module_name(),\n        }\n        res.update(kwargs)\n        return res\n\n    def _handle_sensor_group(self, sensor_group, table_data):\n        result = []\n        avail_col = sensor_group.get('avail')\n        name_col = sensor_group['name']\n        serial_col = sensor_group['serial']\n        sensors = sensor_group['sensors']\n\n        for row in table_data.values():\n            if not avail_col or row.get(avail_col):\n                oid = row.get(0)\n                serial = row.get(serial_col)\n                name = row.get(name_col)\n                for sensor in sensors:\n                    conf = convert_units(self.mib, sensor)\n                    conf.update(get_range(self.mib, sensor))\n                    result.append(\n                        self._make_result_dict(\n                            oid,\n                            self._get_oid_for_sensor(sensor),\n                            serial,\n                            sensor,\n                            name=name,\n                            **conf,\n                        )\n                    )\n\n        return result\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Try to retrieve all internal available sensors in this WxGoose\"\"\"\n\n        result = []\n        for table, sensor_groups in self.TABLES.items():\n            self._logger.debug('get_all_sensors: table = %s', table)\n            sensors = yield self.retrieve_table(table).addCallback(reduce_index)\n            self._logger.debug('get_all_sensors: %s = %s', table, sensors)\n            for sensor_group in sensor_groups:\n                result.extend(self._handle_sensor_group(sensor_group, sensors))\n\n        return result\n\n\nUNITS = {\n    '%': {'u_o_m': Sensor.UNIT_PERCENT},\n    '0.1 Amps': {\n        'u_o_m': Sensor.UNIT_AMPERES,\n        'precision': 1,\n    },\n    '0.1 Amps (rms)': {\n        'u_o_m': Sensor.UNIT_AMPERES,\n        'precision': 1,\n    },\n    '0.1 Degrees': {\n        'u_o_m': Sensor.UNIT_CELSIUS,\n        'precision': 1,\n    },\n    'Degrees Celsius': {\n        'u_o_m': Sensor.UNIT_CELSIUS,\n    },\n    'kWh': {\n        'u_o_m': Sensor.UNIT_WATTHOURS,\n        'scale': Sensor.SCALE_KILO,\n    },\n    'millivolts': {\n        'u_o_m': Sensor.UNIT_VOLTS_DC,\n        'scale': Sensor.SCALE_MILLI,\n    },\n    'Volt-Amps': {\n        'u_o_m': Sensor.UNIT_VOLTAMPERES,\n    },\n    'Volts': {\n        'u_o_m': Sensor.UNIT_VOLTS_DC,\n    },\n    'Volts (rms)': {\n        'u_o_m': Sensor.UNIT_VOLTS_AC,\n    },\n    'Watts': {\n        'u_o_m': Sensor.UNIT_WATTS,\n    },\n}\n\n\ndef get_range(mib, node):\n    res = {}\n    range_ = mib['nodes'][node].get('syntax', {}).get('type', {}).get('range')\n    if not range_:\n        return res\n    if 'min' not in range_ or 'max' not in range_:\n        return res\n    res['minimum'] = range_['min']\n    res['maximum'] = range_['max']\n    return res\n\n\ndef convert_units(mib, node):\n    unit = mib['nodes'][node].get(\"units\")\n    if unit:\n        if unit in UNITS:\n            res = UNITS[unit].copy()\n            if res['u_o_m'] == Sensor.UNIT_PERCENT and \"Humid\" in node:\n                res['u_o_m'] = Sensor.UNIT_PERCENT_RELATIVE_HUMIDITY\n            return res\n    if 'syntax' not in mib['nodes'][node]:\n        return {'u_o_m': Sensor.UNIT_TRUTHVALUE}\n    return {'u_o_m': Sensor.UNIT_UNKNOWN}\n\n\nclass ItWatchDogsMib(BaseITWatchDogsMib):\n    \"\"\"A class that tries to retrieve all sensors from WeatherGoose I\"\"\"\n\n    mib = get_mib('IT-WATCHDOGS-MIB')\n    TABLES = TABLES\n"
  },
  {
    "path": "python/nav/mibs/itw_mibv3.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that tries to retrieve all sensors from WeatherGoose II.\n\nUses the vendor-specifica IT-WATCHDOGS-MIB-V3 to detect and collect\nsensor-information.\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\n\nfrom .itw_mib import BaseITWatchDogsMib, convert_units\n\n\nTABLES = {\n    'climateTable': [\n        {\n            'avail': 'climateAvail',\n            'serial': 'climateSerial',\n            'name': 'climateName',\n            'sensors': {\n                'climateTempC',\n                'climateHumidity',\n                'climateAirflow',\n                'climateLight',\n                'climateSound',\n                'climateIO1',\n                'climateIO2',\n                'climateIO3',\n                'climateDewPointC',\n            },\n        }\n    ],\n    'tempSensorTable': [\n        {\n            'avail': 'tempSensorAvail',\n            'serial': 'tempSensorSerial',\n            'name': 'tempSensorName',\n            'sensors': {\n                'tempSensorTempC',\n            },\n        }\n    ],\n    'airFlowSensorTable': [\n        {\n            'avail': 'airFlowSensorAvail',\n            'serial': 'airFlowSensorSerial',\n            'name': 'airFlowSensorName',\n            'sensors': {\n                'airFlowSensorTempC',\n                'airFlowSensorFlow',\n                'airFlowSensorHumidity',\n                'airFlowSensorDewPointC',\n            },\n        }\n    ],\n    'doorSensorTable': [\n        {\n            'avail': 'doorSensorAvail',\n            'serial': 'doorSensorSerial',\n            'name': 'doorSensorName',\n            'sensors': {\n                'doorSensorStatus',\n            },\n        }\n    ],\n    'waterSensorTable': [\n        {\n            'avail': 'waterSensorAvail',\n            'serial': 'waterSensorSerial',\n            'name': 'waterSensorName',\n            'sensors': {\n                'waterSensorDampness',\n            },\n        }\n    ],\n    'currentMonitorTable': [\n        {\n            'avail': 'currentMonitorAvail',\n            'serial': 'currentMonitorSerial',\n            'name': 'currentMonitorName',\n            'sensors': {\n                'currentMonitorDeciAmps',\n            },\n        }\n    ],\n    'millivoltMonitorTable': [\n        {\n            'avail': 'millivoltMonitorAvail',\n            'serial': 'millivoltMonitorSerial',\n            'name': 'millivoltMonitorName',\n            'sensors': {\n                'millivoltMonitorMV',\n            },\n        }\n    ],\n    'dewPointSensorTable': [\n        {\n            'avail': 'dewPointSensorAvail',\n            'serial': 'dewPointSensorSerial',\n            'name': 'dewPointSensorName',\n            'sensors': {\n                'dewPointSensorDewPointC',\n                'dewPointSensorTempC',\n                'dewPointSensorHumidity',\n            },\n        }\n    ],\n    'digitalSensorTable': [\n        {\n            'avail': 'digitalSensorAvail',\n            'serial': 'digitalSensorSerial',\n            'name': 'digitalSensorName',\n            'sensors': {\n                'digitalSensorDigital',\n            },\n        }\n    ],\n    'cpmSensorTable': [\n        {\n            'avail': 'cpmSensorAvail',\n            'serial': 'cpmSensorSerial',\n            'name': 'cpmSensorName',\n            'sensors': {\n                'cpmSensorStatus',\n            },\n        }\n    ],\n    'smokeAlarmTable': [\n        {\n            'avail': 'smokeAlarmAvail',\n            'serial': 'smokeAlarmSerial',\n            'name': 'smokeAlarmName',\n            'sensors': {\n                'smokeAlarmStatus',\n            },\n        }\n    ],\n    'neg48VdcSensorTable': [\n        {\n            'avail': 'neg48VdcSensorAvail',\n            'serial': 'neg48VdcSensorSerial',\n            'name': 'neg48VdcSensorName',\n            'sensors': {\n                'neg48VdcSensorVoltage',\n            },\n        }\n    ],\n    'pos30VdcSensorTable': [\n        {\n            'avail': 'pos30VdcSensorAvail',\n            'serial': 'pos30VdcSensorSerial',\n            'name': 'pos30VdcSensorName',\n            'sensors': {\n                'pos30VdcSensorVoltage',\n            },\n        }\n    ],\n    'analogSensorTable': [\n        {\n            'avail': 'analogSensorAvail',\n            'serial': 'analogSensorSerial',\n            'name': 'analogSensorName',\n            'sensors': {\n                'analogSensorAnalog',\n            },\n        }\n    ],\n    'powMonTable': [\n        {\n            'avail': 'powMonAvail',\n            'serial': 'powMonSerial',\n            'name': 'powMonName',\n            'sensors': {\n                'powMonkWattHrs',\n                'powMonVolts',\n                'powMonVoltMax',\n                'powMonVoltMin',\n                'powMonVoltPeak',\n                'powMonDeciAmps',\n                'powMonRealPower',\n                'powMonApparentPower',\n                'powMonPowerFactor',\n                'powMonOutlet1',\n                'powMonOutlet2',\n            },\n        }\n    ],\n    # 'powerTable': [\n    #     {\n    #         'avail': 'powerAvail',\n    #         'serial': 'powerSerial',\n    #         'name': 'powerName',\n    #         'sensors': {\n    #             'powerVolts',\n    #             'powerDeciAmps',\n    #             'powerRealPower',\n    #             'powerApparentPower',\n    #             'powerPowerFactor',\n    #         }\n    #     }\n    # ],\n    'pow3ChTable': [\n        {\n            'avail': 'pow3ChAvail',\n            'serial': 'pow3ChSerial',\n            'name': 'pow3ChName',\n            'sensors': {\n                'pow3ChkWattHrs' + ch,\n                'pow3ChVolts' + ch,\n                'pow3ChVoltMax' + ch,\n                'pow3ChVoltMin' + ch,\n                'pow3ChVoltMin' + ch,\n                'pow3ChVoltPeak' + ch,\n                'pow3ChDeciAmps' + ch,\n                'pow3ChRealPower' + ch,\n                'pow3ChApparentPower' + ch,\n                'pow3ChPowerFactor' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C')\n    ],\n    'outletTable': [\n        {\n            'avail': 'outletAvail',\n            'serial': 'outletSerial',\n            'name': 'outletName',\n            'sensors': {\n                'outlet1Status',\n                'outlet2Status',\n            },\n        }\n    ],\n    'vsfcTable': [\n        {\n            'avail': 'vsfcAvail',\n            'serial': 'vsfcSerial',\n            'name': 'vsfcName',\n            'sensors': {\n                'vsfcSetPointC',\n                'vsfcFanSpeed',\n                'vsfcIntTempC',\n                'vsfcExt1TempC',\n                'vsfcExt2TempC',\n                'vsfcExt3TempC',\n                'vsfcExt4TempC',\n            },\n        }\n    ],\n    'ctrl3ChTable': [\n        {\n            'avail': 'ctrl3ChAvail',\n            'serial': 'ctrl3ChSerial',\n            'name': 'ctrl3ChName',\n            'sensors': {\n                'ctrl3ChVolts' + ch,\n                'ctrl3ChVoltPeak' + ch,\n                'ctrl3ChDeciAmps' + ch,\n                'ctrl3ChDeciAmpsPeak' + ch,\n                'ctrl3ChRealPower' + ch,\n                'ctrl3ChApparentPower' + ch,\n                'ctrl3ChPowerFactor' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C')\n    ],\n    'ctrlGrpAmpsTable': [\n        {\n            'avail': 'ctrlGrpAmpsAvail',\n            'serial': 'ctrlGrpAmpsSerial',\n            'name': 'ctrlGrpAmpsName',\n            'sensors': {\n                'ctrlGrpAmps' + ch,\n                'ctrlGrpAmps' + ch + 'Volts',\n            },\n        }\n        for ch in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H')\n    ],\n    'ctrlOutletTable': [\n        {\n            'serial': 'ctrlOutletIndex',  # and serial\n            'name': 'ctrlOutletName',  # FIXME name does not match previous implementation\n            'sensors': {\n                'ctrlOutletStatus',\n                'ctrlOutletFeedback',\n                'ctrlOutletPending',\n                'ctrlOutletDeciAmps',\n                'ctrlOutletUpDelay',\n                'ctrlOutletDwnDelay',\n                'ctrlOutletRbtDelay',\n                'ctrlOutletPOAAction',\n                'ctrlOutletPOADelay',\n                'ctrlOutletkWattHrs',\n                'ctrlOutletPower',\n            },\n        }\n    ],\n    'dstsTable': [\n        {\n            'avail': 'dstsAvail',\n            'serial': 'dstsSerial',\n            'name': 'dstsName',\n            'sensors': {\n                'dstsVolts' + ch,\n                'dstsDeciAmps' + ch,\n                'dstsSource' + ch + 'Active',\n                'dstsPowerStatus' + ch,\n                'dstsSource' + ch + 'TempC',\n            },\n        }\n        for ch in ('A', 'B')\n    ],\n    'ctrlRelayTable': [\n        {\n            'serial': 'ctrlRelayIndex',\n            'name': 'ctrlRelayName',\n            'sensors': {\n                'ctrlRelayState',\n                'ctrlRelayLatchingMode',\n                'ctrlRelayOverride',\n                'ctrlRelayAcknowledge',\n            },\n        }\n    ],\n    'climateRelayTable': [\n        {\n            'avail': 'climateRelayAvail',\n            'serial': 'climateRelaySerial',\n            'name': 'climateRelayName',\n            'sensors': {\n                'climateRelayTempC',\n                'climateRelayIO1',\n                'climateRelayIO2',\n                'climateRelayIO3',\n                'climateRelayIO4',\n                'climateRelayIO5',\n                'climateRelayIO6',\n            },\n        }\n    ],\n    'airSpeedSwitchSensorTable': [\n        {\n            'avail': 'airSpeedSwitchSensorAvail',\n            'serial': 'airSpeedSwitchSensorSerial',\n            'name': 'airSpeedSwitchSensorName',\n            'sensors': {\n                'airSpeedSwitchSensorAirSpeed',\n            },\n        }\n    ],\n    'ctrl3ChIECTable': [\n        {\n            'avail': 'ctrl3ChIECAvail',\n            'serial': 'ctrl3ChIECSerial',\n            'name': 'ctrl3ChIECName',\n            'sensors': {\n                'ctrl3ChIECkWattHrs' + ch,\n                'ctrl3ChIECVolts' + ch,\n                'ctrl3ChIECVoltPeak' + ch,\n                'ctrl3ChIECDeciAmps' + ch,\n                'ctrl3ChIECDeciAmpsPeak' + ch,\n                'ctrl3ChIECRealPower' + ch,\n                'ctrl3ChIECApparentPower' + ch,\n                'ctrl3ChIECPowerFactor' + ch,\n            },\n        }\n        for ch in ('A', 'B', 'C')\n    ],\n}\n\n\nclass ItWatchDogsMibV3(BaseITWatchDogsMib):\n    \"\"\"A class that tries to retrieve all sensors from WeatherGoose II\"\"\"\n\n    mib = get_mib('IT-WATCHDOGS-MIB-V3')\n    TABLES = TABLES\n\n    def _get_power_dms_params(self, power_dms):\n        sensors = []\n        for power_dm in power_dms.values():\n            power_dm_avail = power_dm.get('powerDMAvail')\n            if power_dm_avail:\n                power_dm_oid = power_dm.get(0)\n                serial = power_dm.get('powerDMSerial')\n                name = power_dm.get('powerDMName')\n                aux_count = power_dm.get('powerDMUnitInfoAuxCount')\n                for i in range(1, (aux_count + 1)):\n                    aux_numb = str(i)\n                    aux_name = (\n                        name + ' ' + power_dm.get('powerDMChannelGroup' + aux_numb)\n                    )\n                    aux_name += ': ' + power_dm_oid.get('powerDMChannelName' + aux_numb)\n                    aux_name += ' - ' + power_dm_oid.get(\n                        'powerDMChannelFriendly' + aux_numb\n                    )\n                    sensor = 'powerDMDeciAmps' + aux_numb\n                    conf = convert_units(self.mib, sensor)\n                    sensors.append(\n                        self._make_result_dict(\n                            power_dm_oid,\n                            self._get_oid_for_sensor(sensor),\n                            serial,\n                            sensor,\n                            name=aux_name,\n                            **conf,\n                        )\n                    )\n        return sensors\n\n    def _get_io_expanders_params(self, io_expanders):\n        sensors = []\n        for io_expander in io_expanders.values():\n            io_expander_avail = io_expander.get('ioExpanderAvail', 0)\n            if io_expander_avail:\n                io_expander_oid = io_expander.get(0)\n                serial = io_expander.get('ioExpanderSerial')\n                name = io_expander.get('ioExpanderName')\n                for i in range(1, 33):\n                    exp_numb = str(i)\n                    exp_name = (\n                        name\n                        + ': '\n                        + io_expander.get('ioExpanderFriendlyName' + exp_numb)\n                    )\n                    sensors.append(\n                        self._make_result_dict(\n                            io_expander_oid,\n                            self._get_oid_for_sensor('ioExpanderIO' + exp_numb),\n                            serial,\n                            'ioExpanderIO' + exp_numb,\n                            name=exp_name,\n                        )\n                    )\n                for i in range(1, 4):\n                    relay_numb = str(i)\n                    relay_name = (\n                        name\n                        + ': '\n                        + io_expander.get('ioExpanderRelayName' + relay_numb)\n                    )\n                    sensors.append(\n                        self._make_result_dict(\n                            io_expander_oid,\n                            self._get_oid_for_sensor(\n                                'ioExpanderRelayState' + relay_numb\n                            ),\n                            serial,\n                            'ioExpanderRelayState' + relay_numb,\n                            name=relay_name,\n                        )\n                    )\n                    sensors.append(\n                        self._make_result_dict(\n                            io_expander_oid,\n                            self._get_oid_for_sensor(\n                                'ioExpanderRelayLatchingMode' + relay_numb\n                            ),\n                            serial,\n                            'ioExpanderRelayLatchingMode' + relay_numb,\n                            name=relay_name,\n                        )\n                    )\n                    sensors.append(\n                        self._make_result_dict(\n                            io_expander_oid,\n                            self._get_oid_for_sensor(\n                                'ioExpanderRelayOverride' + relay_numb\n                            ),\n                            serial,\n                            'ioExpanderRelayOverride' + relay_numb,\n                            name=relay_name,\n                        )\n                    )\n                    sensors.append(\n                        self._make_result_dict(\n                            io_expander_oid,\n                            self._get_oid_for_sensor(\n                                'ioExpanderRelayAcknowledge' + relay_numb\n                            ),\n                            serial,\n                            'ioExpanderRelayAcknowledge' + relay_numb,\n                            name=relay_name,\n                        )\n                    )\n        return sensors\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Try to retrieve all available sensors in this WxGoose\"\"\"\n        result = yield super(ItWatchDogsMibV3, self).get_all_sensors()\n\n        custom_tables = {\n            'powerDMTable': self._get_power_dms_params,\n            'ioExpanderTable': self._get_io_expanders_params,\n        }\n        for table, handler in custom_tables.items():\n            self._logger.debug('get_all_sensors: table = %s', table)\n            sensors = yield self.retrieve_table(table).addCallback(reduce_index)\n            self._logger.debug('get_all_sensors: %s = %s', table, sensors)\n            result.extend(handler(sensors))\n\n        return result\n"
  },
  {
    "path": "python/nav/mibs/itw_mibv4.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that tries to retrieve all internal sensors from WeatherGoose II.\n\nUses the vendor-specifica IT-WATCHDOGS-V4-MIB to detect and collect\nsensor-information.\n\"\"\"\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs.itw_mib import BaseITWatchDogsMib\n\nTABLES = {\n    'internalTable': [\n        {\n            'avail': 'internalAvail',\n            'serial': 'internalSerial',\n            'name': 'internalName',\n            'sensors': {\n                'internalTemp',\n                'internalHumidity',\n                'internalDewPoint',\n                'internalIO1',\n                'internalIO2',\n                'internalIO3',\n                'internalIO4',\n            },\n        }\n    ],\n    'tempSensorTable': [\n        {\n            'avail': 'tempSensorAvail',\n            'serial': 'tempSensorSerial',\n            'name': 'tempSensorName',\n            'sensors': {\n                'tempSensorTemp',\n            },\n        }\n    ],\n    'airFlowSensorTable': [\n        {\n            'avail': 'airFlowSensorAvail',\n            'serial': 'airFlowSensorSerial',\n            'name': 'airFlowSensorName',\n            'sensors': {\n                'airFlowSensorTemp',\n                'airFlowSensorFlow',\n                'airFlowSensorHumidity',\n                'airFlowSensorDewPoint',\n            },\n        }\n    ],\n    'dewPointSensorTable': [\n        {\n            'avail': 'dewPointSensorAvail',\n            'serial': 'dewPointSensorSerial',\n            'name': 'dewPointSensorName',\n            'sensors': {\n                'dewPointSensorTemp',\n                'dewPointSensorHumidity',\n                'dewPointSensorDewPoint',\n            },\n        }\n    ],\n    't3hdSensorTable': [\n        {\n            'avail': 't3hdSensorAvail',\n            'serial': 't3hdSensorSerial',\n            'name': 't3hdSensorIntName',\n            'sensors': {\n                't3hdSensorIntTemp',\n                't3hdSensorIntHumidity',\n                't3hdSensorIntDewPoint',\n            },\n        },\n        {\n            'avail': 't3hdSensorExtAAvail',\n            'serial': 't3hdSensorSerial',\n            'name': 't3hdSensorExtAName',\n            'sensors': {\n                't3hdSensorExtATemp',\n            },\n        },\n        {\n            'avail': 't3hdSensorExtBAvail',\n            'serial': 't3hdSensorSerial',\n            'name': 't3hdSensorExtBName',\n            'sensors': {\n                't3hdSensorExtBTemp',\n            },\n        },\n    ],\n    'thdSensorTable': [\n        {\n            'avail': 'thdSensorAvail',\n            'serial': 'thdSensorSerial',\n            'name': 'thdSensorName',\n            'sensors': {\n                'thdSensorTemp',\n                'thdSensorHumidity',\n                'thdSensorDewPoint',\n            },\n        }\n    ],\n    'rpmSensorTable': [\n        {\n            'avail': 'rpmSensorAvail',\n            'serial': 'rpmSensorSerial',\n            'name': 'rpmSensorName',\n            'sensors': {\n                'rpmSensorEnergy',\n                'rpmSensorVoltage',\n                'rpmSensorCurrent',\n                'rpmSensorRealPower',\n                'rpmSensorApparentPower',\n                'rpmSensorPowerFactor',\n                'rpmSensorOutlet1',\n                'rpmSensorOutlet2',\n            },\n        }\n    ],\n}\n\n\nclass ItWatchDogsMibV4(BaseITWatchDogsMib):\n    \"\"\"A class that tries to retrieve all sensors from Watchdog 100\"\"\"\n\n    mib = get_mib('IT-WATCHDOGS-V4-MIB')\n    TABLES = TABLES\n"
  },
  {
    "path": "python/nav/mibs/juniper_alarm_mib.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"JUNIPER-ALARM-MIB MibRetriever\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\n\n\nclass JuniperAlarmMib(MibRetriever):\n    \"\"\"JUNIPER-ALARM-MIB MibRetriever\"\"\"\n\n    mib = get_mib(\"JUNIPER-ALARM-MIB\")\n\n    def get_yellow_alarm_count(self):\n        \"\"\"Tries to get a yellow alarm count from a Juniper device\"\"\"\n        return self._get_alarm_count(\"jnxYellowAlarmCount\")\n\n    def get_red_alarm_count(self):\n        \"\"\"Tries to get a red alarm count from a Juniper device\"\"\"\n        return self._get_alarm_count(\"jnxRedAlarmCount\")\n\n    @defer.inlineCallbacks\n    def _get_alarm_count(self, oid):\n        count = yield self.get_next(oid)\n        try:\n            count = int(count) or 0\n        except (ValueError, TypeError):\n            count = 0\n        return count\n"
  },
  {
    "path": "python/nav/mibs/juniper_dom_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for getting DOM values for juniper equipment\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nCOLUMNS = {\n    \"jnxDomCurrentRxLaserPower\": {\n        \"unit_of_measurement\": Sensor.UNIT_DBM,\n        \"precision\": 2,\n        \"name\": \"{ifc} RX Laser Power\",\n        \"description\": \"{ifc} RX Laser Power\",\n    },\n    \"jnxDomCurrentTxLaserBiasCurrent\": {\n        \"unit_of_measurement\": Sensor.UNIT_AMPERES,\n        \"precision\": 3,\n        \"scale\": Sensor.SCALE_MILLI,\n        \"name\": \"{ifc} TX Laser Bias Current\",\n        \"description\": \"{ifc} TX Laser Bias Current\",\n    },\n    \"jnxDomCurrentTxLaserOutputPower\": {\n        \"unit_of_measurement\": Sensor.UNIT_DBM,\n        \"precision\": 2,\n        \"name\": \"{ifc} TX Laser Output Power\",\n        \"description\": \"{ifc} TX Laser Output Power\",\n    },\n    \"jnxDomCurrentModuleTemperature\": {\n        \"unit_of_measurement\": Sensor.UNIT_CELSIUS,\n        \"precision\": 0,\n        \"name\": \"{ifc} Module Temperature\",\n        \"description\": \"{ifc} Module Temperature\",\n    },\n}\n\n\nclass JuniperDomMib(MibRetriever):\n    \"\"\"MibRetriever for Juniper DOM Sensors\"\"\"\n\n    mib = get_mib('JUNIPER-DOM-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible dom sensors from this\n        device.\n        \"\"\"\n        sensors = []\n        for column, config in COLUMNS.items():\n            sensors += yield self.handle_column(column, config)\n        return sensors\n\n    @defer.inlineCallbacks\n    def handle_column(self, column, config):\n        \"\"\"Returns the sensors of the given type\"\"\"\n        result = []\n        value_oid = self.nodes[column].oid\n        rows = yield self.retrieve_column(column)\n        for row in rows:\n            sensor = dict(\n                oid=str(value_oid + row),\n                scale=None,\n                mib=self.get_module_name(),\n                internal_name=\"{ifc}.\" + column,\n                ifindex=row[-1],\n            )\n            sensor.update(config)\n            result.append(sensor)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/juniper_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"JUNIPER-MIB MibRetriever\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.mibs import reduce_index\nfrom nav.models.manage import PowerSupplyOrFan as FRU\nfrom nav.ipdevpoll.shadows import PowerSupplyOrFan, Device\nfrom nav.models.manage import Sensor\n\nMEGABYTE = 1024**2\n\nOPERATING_DESCR = \"jnxOperatingDescr\"\nOPERATING_CPU = \"jnxOperatingCPU\"\nLOAD_AVG_1MIN = \"jnxOperating1MinLoadAvg\"\nLOAD_AVG_5MIN = \"jnxOperating5MinLoadAvg\"\nLOAD_AVG_15MIN = \"jnxOperating15MinLoadAvg\"\nOPERATING_MEM = \"jnxOperatingMemory\"\nOPERATING_BUF = \"jnxOperatingBuffer\"\n\nFRU_STATUS_MAP = {\n    \"unknown\": FRU.STATE_UNKNOWN,\n    \"empty\": FRU.STATE_UNKNOWN,\n    \"present\": FRU.STATE_UNKNOWN,\n    \"ready\": FRU.STATE_UNKNOWN,\n    \"announceOnline\": FRU.STATE_UNKNOWN,\n    \"online\": FRU.STATE_UP,\n    \"anounceOffline\": FRU.STATE_WARNING,\n    \"offline\": FRU.STATE_DOWN,\n    \"diagnostic\": FRU.STATE_WARNING,\n    \"standby\": FRU.STATE_WARNING,\n}\n\nSENSOR_TABLES = {\n    'jnxOperatingTable': {\n        'descr': 'jnxOperatingDescr',\n        'unit': Sensor.UNIT_CELSIUS,\n        'readout': 'jnxOperatingTemp',\n        'internal_prefix': 'temperature',\n    },\n}\n\n\nclass JuniperMib(MibRetriever):\n    \"\"\"JUNIPER-MIB MibRetriever\"\"\"\n\n    mib = get_mib(\"JUNIPER-MIB\")\n\n    @defer.inlineCallbacks\n    def get_serial_number(self):\n        \"\"\"Tries to get a serial number from a Juniper device\"\"\"\n        serial = yield self.get_next(\"jnxBoxSerialNo\")\n        if serial:\n            if isinstance(serial, bytes):\n                serial = serial.decode(\"utf-8\")\n            return serial\n\n    @defer.inlineCallbacks\n    def get_cpu_loadavg(self):\n        \"\"\"Retrieves load averages for various operating subjects in a Juniper\n        device.\n\n        BUGS: Juniper's MIB definition is b0rked, as it says that a load\n        value of 0 means that the load value is either unavailable or\n        not applicable, which makes it indistinguishable from an actual value\n        of 0.\n\n        \"\"\"\n        load = yield self.retrieve_columns(\n            [OPERATING_DESCR, LOAD_AVG_1MIN, LOAD_AVG_5MIN, LOAD_AVG_15MIN]\n        )\n\n        if load:\n            result = dict()\n            for row in load.values():\n                if row[LOAD_AVG_15MIN] or row[LOAD_AVG_5MIN] or row[LOAD_AVG_1MIN]:\n                    name = row[OPERATING_DESCR]\n                    values = [\n                        (15, row[LOAD_AVG_15MIN]),\n                        (5, row[LOAD_AVG_5MIN]),\n                        (1, row[LOAD_AVG_1MIN]),\n                    ]\n                    result[name] = values\n            return result\n\n    @defer.inlineCallbacks\n    def get_cpu_utilization(self):\n        \"\"\"Retrieves CPU utilization values for various operating subjects in\n        a Juniper device.\n\n        BUGS: Juniper's MIB definition is b0rked, as it says that a CPU\n        utilization value of 0 means that the value is either unavailable or\n        not applicable, which makes it indistinguishable from an actual value\n        of 0.\n\n        \"\"\"\n        util = yield self.retrieve_columns([OPERATING_DESCR, OPERATING_CPU])\n\n        if util:\n            result = dict()\n            for row in util.values():\n                if row[OPERATING_CPU]:\n                    name = row[OPERATING_DESCR]\n                    result[name] = row[OPERATING_CPU]\n            return result\n\n    def get_power_supplies(self):\n        \"\"\"Retrieves a list of field-replaceable power supply units\"\"\"\n        return self._get_fru_by_type(\"powerEntryModule\")\n\n    def get_fans(self):\n        \"\"\"Retrieves a list of field-replaceable fan units\"\"\"\n        return self._get_fru_by_type(\"fan\")\n\n    @defer.inlineCallbacks\n    def _get_fru_by_type(self, fru_type):\n        # Columns from two different, but related tables:\n        response = yield self.retrieve_columns(\n            [\n                \"jnxFruName\",\n                \"jnxFruType\",\n                \"jnxFruState\",\n                \"jnxContentsSerialNo\",\n                \"jnxContentsModel\",\n            ]\n        ).addCallback(self.translate_result)\n        self._logger.debug(\"jnxFru results: %r\", response)\n        units = [\n            _fru_row_to_powersupply_or_fan(row)\n            for row in response.values()\n            if row.get(\"jnxFruState\") != \"empty\" and row.get(\"jnxFruType\") == fru_type\n        ]\n        return units\n\n    @defer.inlineCallbacks\n    def get_fru_status(self, internal_id):\n        \"\"\"Returns the operational status for a FRU with the given internal id.\"\"\"\n        oper_status = yield self.retrieve_column_by_index(\n            \"jnxFruState\", OID(internal_id)\n        )\n        self._logger.debug(\"jnxFruState.%s = %r\", internal_id, oper_status)\n        return self._translate_fru_status_value(oper_status)\n\n    get_fan_status = get_fru_status\n    get_power_supply_status = get_fru_status\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Returns a Deferred whose result is a list of sensor dictionaries\"\"\"\n        result = []\n        for table, config in SENSOR_TABLES.items():\n            sensors = yield self._get_sensors(config)\n            result.extend(sensors)\n        return result\n\n    @defer.inlineCallbacks\n    def _get_sensors(self, config):\n        \"\"\"\n        Collects sensor columns according to the config dict, and translates\n        the results into sensor dicts.\n\n        \"\"\"\n        columns = [config['descr'], config['readout']]\n\n        result = (\n            yield self.retrieve_columns(columns)\n            .addCallback(self.translate_result)\n            .addCallback(reduce_index)\n        )\n\n        sensors = (\n            self._row_to_sensor(config, index, row) for index, row in result.items()\n        )\n\n        return [s for s in sensors if s]\n\n    def _row_to_sensor(self, config, index, row):\n        \"\"\"\n        Converts a collect SNMP table row into a sensor dict, using the\n        options defined in the config dict.\n\n        \"\"\"\n        # Dont include sensor if temperature not set\n        readout = row.get(config['readout'], 0)\n        if not readout:\n            return\n\n        internal_name = config['internal_prefix'] + str(index)\n        descr = row.get(config['descr'], internal_name) + \" Temperature\"\n\n        mibobject = self.nodes.get(config['readout'])\n        readout_oid = str(mibobject.oid + str(index))\n\n        return {\n            'oid': readout_oid,\n            'unit_of_measurement': config['unit'],\n            'precision': 0,\n            'scale': None,\n            'description': descr,\n            'name': descr,\n            'internal_name': internal_name,\n            'mib': self.get_module_name(),\n        }\n\n    @staticmethod\n    def _translate_fru_status_value(oper_status):\n        \"\"\"Translates the FRU status value from the MIB to a NAV PSU status value.\n\n        :returns: A state value from nav.models.manage.PowerSupplyOrFan.STATE_CHOICES\n\n        \"\"\"\n        return FRU_STATUS_MAP.get(oper_status, FRU.STATE_UNKNOWN)\n\n    @defer.inlineCallbacks\n    def get_memory_usage(self):\n        \"\"\"Retrieves memory usage stats from a Juniper device.\n\n        :returns: A deferred whose result is a dict\n                  {slot_type: (used_bytes, free_bytes)}\n\n        \"\"\"\n        result = dict()\n        slots = yield self.retrieve_columns(\n            [OPERATING_DESCR, OPERATING_MEM, OPERATING_BUF]\n        )\n        for row in slots.values():\n            total = row[OPERATING_MEM] * MEGABYTE\n            if total:\n                used = (row[OPERATING_BUF] / 100) * total\n                free = total - used\n                result[row[OPERATING_DESCR]] = (used, free)\n        return result\n\n\ndef _fru_row_to_powersupply_or_fan(fru_row):\n    model = fru_row.get(\"jnxContentsModel\")\n    psu_or_fan = PowerSupplyOrFan(\n        name=fru_row.get(\"jnxFruName\"),\n        physical_class=(\n            \"powerSupply\" if fru_row.get(\"jnxFruType\") == \"powerEntryModule\" else \"fan\"\n        ),\n        descr=model,\n        internal_id=fru_row.get(0),\n    )\n    serial = fru_row.get(\"jnxContentsSerialNo\")\n    if serial:\n        device = Device(serial=serial)\n        if model:\n            device.model = model\n        psu_or_fan.device = device\n    return psu_or_fan\n"
  },
  {
    "path": "python/nav/mibs/lldp_mib.py",
    "content": "#\n# Copyright (C) 2012, 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\" \"LLDP-MIB handling\"\"\"\n\nimport socket\nfrom collections import namedtuple\n\nfrom twisted.internet.defer import inlineCallbacks\n\nfrom nav.ip import IP\nfrom nav.mibs.if_mib import IfMib\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\nfrom nav import macaddress\n\n\nclass LLDPMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for handling LLDP-MIB\"\"\"\n\n    mib = get_mib('LLDP-MIB')\n\n    def get_remote_last_change(self):\n        \"\"\"Retrieves the sysUpTime value of the last time the lldpRemTable was\n        changed.\n\n        \"\"\"\n        return self.get_next('lldpStatsRemTablesLastChangeTime')\n\n    @inlineCallbacks\n    def get_remote_table(self):\n        \"\"\"Returns the contents of the lldpRemTable\"\"\"\n        table = yield self._retrieve_rem_table()\n        if table:\n            rows = yield self._translate_port_numbers(table)\n            result = [self._remote_entry_to_neighbor(row) for row in rows]\n        else:\n            result = []\n\n        return result\n\n    def _retrieve_rem_table(self):\n        return self.retrieve_columns(\n            [\n                'lldpRemChassisIdSubtype',\n                'lldpRemChassisId',\n                'lldpRemPortIdSubtype',\n                'lldpRemPortId',\n                'lldpRemPortDesc',\n                'lldpRemSysName',\n            ]\n        ).addCallback(self.translate_result)\n\n    @staticmethod\n    def _remote_entry_to_neighbor(row):\n        ifindex = row[0]\n\n        chassis_id = IdSubtypes.get(\n            row['lldpRemChassisIdSubtype'], row['lldpRemChassisId']\n        )\n        port_id = IdSubtypes.get(row['lldpRemPortIdSubtype'], row['lldpRemPortId'])\n\n        return LLDPNeighbor(\n            ifindex, chassis_id, port_id, row['lldpRemPortDesc'], row['lldpRemSysName']\n        )\n\n    @inlineCallbacks\n    def _translate_port_numbers(self, remote_table):\n        \"\"\"\n        Translates local port number references to ifIndexes in lldpRemTable\n        result, if necessary.\n\n        Ideally, we want all port references to be ifIndexes, but some devices'\n        LLDP-MIB implementations will use dot1dBasePort references or something\n        altogether different. In our experience, ifIndex is most common,\n        dot1dBasePort is the second most common, while sometimes (such as in\n        the case with Alcatel), some arbitrary internal number is used, but\n        translateable into an ifIndex via the lldpLocPortTable.\n\n        \"\"\"\n        if self._is_remote_table_index_broken(remote_table):\n            self._logger.warning(\"lldpRemTable has broken row indexes on this device\")\n            return []\n\n        remotes = remote_table.values()\n        local_ports = yield self._retrieve_local_ports()\n\n        # Use SNMP queries to make lookup tables, if necessary\n        idtypes = set(type(port) for port in local_ports.values())\n        if idtypes:\n            self._logger.debug(\n                \"local port id types in use: %s\", [t.__name__ for t in idtypes]\n            )\n        uses_ifnames = IdSubtypes.interfaceName in idtypes\n        if uses_ifnames:\n            self._logger.debug(\n                \"translation of local port numbers by ifName is necessary\"\n            )\n            name_to_ifindex = yield self._make_interface_lookup_dict()\n        else:\n            name_to_ifindex = {}\n\n        # Do the actual translations\n        lookup = {}\n        for local_portnum, port in local_ports.items():\n            if isinstance(port, IdSubtypes.interfaceName):\n                ifindex = name_to_ifindex.get(port, None)\n                if ifindex:\n                    self._logger.debug(\n                        \"translating local port num %s via %r to ifindex %s\",\n                        local_portnum,\n                        port,\n                        ifindex,\n                    )\n                    lookup[local_portnum] = ifindex\n            elif (\n                isinstance(port, IdSubtypes.local)\n                and port.isdigit()\n                and local_portnum != int(port)\n            ):\n                self._logger.debug(\n                    \"translating local port num %s to ifindex %s\",\n                    local_portnum,\n                    port,\n                )\n                lookup[local_portnum] = int(port)\n\n        for remote in remotes:\n            _timemark, local_portnum, _index = remote[0]\n            remote[0] = lookup.get(local_portnum, local_portnum)\n\n        return remotes\n\n    @staticmethod\n    def _is_remote_table_index_broken(remote_table):\n        \"\"\"Returns True if an lldpRemTable response has a broken row index\"\"\"\n        return any(len(row[0]) != 3 for row in remote_table.values())\n\n    @inlineCallbacks\n    def _retrieve_local_ports(self):\n        ports = (\n            yield self.retrieve_columns(\n                [\n                    'lldpLocPortIdSubtype',\n                    'lldpLocPortId',\n                ]\n            )\n            .addCallback(self.translate_result)\n            .addCallback(reduce_index)\n        )\n        result = {\n            index: IdSubtypes.get(row['lldpLocPortIdSubtype'], row['lldpLocPortId'])\n            for index, row in ports.items()\n        }\n        return result\n\n    @inlineCallbacks\n    def _make_interface_lookup_dict(self):\n        ifmib = IfMib(self.agent_proxy)\n        ifnames = yield ifmib.get_ifnames()\n        lookup = {}\n        for ifindex, (ifname, ifdescr) in ifnames.items():\n            lookup[ifdescr] = ifindex\n            lookup[ifname] = ifindex\n        return lookup\n\n\nLLDPNeighbor = namedtuple(\n    \"LLDPNeighbor\", \"ifindex chassis_id port_id port_desc sysname\"\n)\n\n#\n# A bunch of classes to define and help parse the various subtypes of remote\n# chassis and port identifiers that may be used in the lldpRemTable.\n#\n\n\nclass IdType(str):\n    def __repr__(self):\n        return \"%s(%r)\" % (self.__class__.__name__, str(self))\n\n    def isdigit(self):\n        \"\"\"Returns True if self can be successfully cast to an integer\"\"\"\n        try:\n            int(self)\n            return True\n        except ValueError:\n            return False\n\n\nclass BinaryOrString(IdType):\n    def __new__(cls, *args, **_kwargs):\n        arg = args[0]\n        if isinstance(arg, bytes):\n            try:\n                arg = arg.decode('utf-8')\n            except (ValueError, UnicodeDecodeError):\n                pass\n        elif isinstance(arg, cls):\n            return arg\n        return IdType.__new__(cls, arg)\n\n\nclass MacAddress(IdType):\n    def __new__(cls, *args, **_kwargs):\n        arg = args[0]\n        if isinstance(arg, bytes):\n            try:\n                arg = macaddress.MacAddress.from_octets(arg)\n            except ValueError:\n                arg = macaddress.MacAddress(arg.decode('utf-8'))\n        elif isinstance(arg, cls):\n            return arg\n        return IdType.__new__(cls, arg)\n\n\nclass NetworkAddress(IdType):\n    IPV4 = 1\n    IPV6 = 2\n    ADDR_FAMILY = {\n        IPV4: socket.AF_INET,\n        IPV6: socket.AF_INET6,\n        bytes(IPV4): socket.AF_INET,\n        bytes(IPV6): socket.AF_INET6,\n    }\n\n    def __new__(cls, *args, **_kwargs):\n        arg = args[0]\n        if arg and isinstance(arg, bytes):\n            addr_type = arg[0]\n            addr_string = arg[1:]\n            if addr_type in cls.ADDR_FAMILY:\n                try:\n                    ipstring = socket.inet_ntop(cls.ADDR_FAMILY[addr_type], addr_string)\n                    arg = IP(ipstring)\n                except (socket.error, ValueError):\n                    pass\n        elif arg and isinstance(arg, cls):\n            return arg\n        return IdType.__new__(cls, arg)\n\n\nclass IdSubtypes(object):\n    @classmethod\n    def get(cls, typename, value):\n        if typename:\n            typeclass = getattr(cls, typename, str)\n            return typeclass(value)\n        else:\n            return value\n\n    class chassisComponent(IdType):\n        pass\n\n    class interfaceAlias(BinaryOrString):\n        pass\n\n    class portComponent(IdType):\n        pass\n\n    class macAddress(MacAddress):\n        pass\n\n    class networkAddress(NetworkAddress):\n        pass\n\n    class interfaceName(BinaryOrString):\n        pass\n\n    class local(BinaryOrString):\n        pass\n\n    class agentCircuitId(IdType):\n        pass\n"
  },
  {
    "path": "python/nav/mibs/mg_snmp_ups_mib.py",
    "content": "#\n# Copyright 2008 - 2011 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for extracting sensors from MGE UPSes.\"\"\"\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs.ups_mib import UpsMib\nfrom nav.models.manage import Sensor\n\n\nclass MgSnmpUpsMib(UpsMib):\n    \"\"\"A custom class for retrieving sensors from MGE UPSes.\"\"\"\n\n    mib = get_mib('MG-SNMP-UPS-MIB')\n\n    sensor_columns = {\n        'mginputVoltage': {\n            'u_o_m': Sensor.UNIT_VOLTS_AC,\n            'precision': 1,\n        },\n        'mginputFrequency': {\n            'u_o_m': Sensor.UNIT_HERTZ,\n            'precision': 1,\n        },\n        'mgoutputLoadPerPhase': {\n            'u_o_m': Sensor.UNIT_PERCENT,\n        },\n        'mgoutputCurrent': {\n            'u_o_m': Sensor.UNIT_AMPERES,\n        },\n        'upsmgEnvironAmbientTemp': {\n            'u_o_m': Sensor.UNIT_CELSIUS,\n        },\n        'upsmgBatteryLevel': {\n            'u_o_m': Sensor.UNIT_PERCENT,\n        },\n        'upsmgBatteryRemainingTime': {\n            'u_o_m': Sensor.UNIT_SECONDS,\n        },\n    }\n"
  },
  {
    "path": "python/nav/mibs/mibretriever.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2012, 2014, 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"APIs to create MIB-aware retriever classes for asynchronous SNMP polling.\n\nlibsmi provides a command line tool (smidump) which can parse MIB\ndefinitions and dump them as Python data structures.\n\nTo create a new MIB-aware retriever class, inherit from the\nMibRetriever class and set the class-variable \"mib\" to point to a MIB\ndata structure as dumped by libsmi's smidump command.\n\nThe class will be imbued with knowledge of the MIB in question, and\nseveral convenience methods to work with data retrieval.  An instance\nof a MibRetriever class is tied to a TwistedSNMP AgentProxy and uses\nthis to allow asynchronous data retrieval.\n\n\"\"\"\n\nimport dataclasses\nimport logging\nfrom typing import Awaitable, Iterator\n\nfrom pynetsnmp.netsnmp import SnmpTimeoutError\nfrom twisted.internet import defer, reactor\nfrom twisted.internet.error import TimeoutError\nfrom twisted.python.failure import Failure\n\nfrom nav.Snmp import safestring\nfrom nav.ipdevpoll import ContextLogger\nfrom nav.ipdevpoll.utils import fire_eventually\nfrom nav.errors import GeneralException\nfrom nav.mibs.types import LogicalMibInstance\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\n\n_logger = logging.getLogger(__name__)\nTEXT_TYPES = (\"DisplayString\", \"SnmpAdminString\")\n\n\nclass MibRetrieverError(GeneralException):\n    \"\"\"MIB retriever error\"\"\"\n\n    pass\n\n\nclass MIBObject(object):\n    \"\"\"Representation of a MIB object.\n\n    Member attributes:\n\n    module\n      The name of the MIB module where the object originated.\n    name\n      The object's textual name.\n    oid\n      The full object identifier\n    enum\n      If the object's syntax indicates it is an enumerated value,\n      this dictionary will hold mappings between the enumerations textual\n      names and integer values.  As a simplifying case,\n      SNMPv2-TC::TruthValues will be deciphered as enums of boolean values.\n\n    \"\"\"\n\n    def __init__(self, mib, name):\n        self._mib = mib\n        self.raw_mib_data = mib['nodes'][name]\n        self.module = mib['moduleName']\n        self.name = name\n        self.oid = self.raw_mib_data['oid']\n        self.enum = {}\n\n        try:\n            mib['nodes'][name]['syntax']['type']\n        except KeyError:\n            pass\n        else:\n            self._build_type()\n\n    def _build_type(self):\n        typ = self._mib['nodes'][self.name]['syntax']['type']\n        if 'module' in typ and 'name' in typ:\n            # the typedef is separate to the node\n            # FIXME: Build typedef'ed enumerations only once for a mib\n            typename = typ['name']\n            module = get_mib(typ['module'])\n            if module and typename in module['typedefs']:\n                typ = module['typedefs'][typename]\n            elif typ['module'] == 'SNMPv2-TC' and typename == 'TruthValue':\n                self.enum = {1: True, 2: False}\n                return\n\n        if 'basetype' in typ and typ['basetype'] == 'Enumeration':\n            # Build a two-way dictionary mapping enumerated names\n            enums = [\n                (k, int(val['number']))\n                for k, val in typ.items()\n                if isinstance(val, dict)\n                and 'nodetype' in val\n                and val['nodetype'] == 'namednumber'\n            ]\n            self.enum = dict(enums)\n            self.enum.update((y, x) for (x, y) in enums)\n\n    def to_python(self, value):\n        \"\"\"Translate an SNMP value into something python-like.\n\n        If the syntax of this object is an Enumeration, value will be\n        translated from and int to a str object.  If it is an\n        SNMPv2-TC::TruthValue, it will be translated from int to bool.\n\n        \"\"\"\n        if self.enum and isinstance(value, int) and value in self.enum:\n            value = self.enum[value]\n        return value\n\n    def __lt__(self, other):\n        \"\"\"Compare to other based on OID.\"\"\"\n        if isinstance(other, self.__class__):\n            return self.oid < other.oid\n        else:\n            return self.oid < other\n\n    def __eq__(self, other):\n        \"\"\"Compare to other based on OID.\"\"\"\n        if isinstance(other, self.__class__):\n            return self.oid == other.oid\n        else:\n            return self.oid == other\n\n    def __repr__(self):\n        return '<MibObject %r: %r from %r)' % (self.oid, self.name, self.module)\n\n\nclass MibTableDescriptor(object):\n    \"\"\"Description of a MIB table structure.\"\"\"\n\n    def __init__(self, table_object, row_object, column_objects):\n        self.table = table_object\n        self.row = row_object\n        self.columns = column_objects\n\n        # column numbers indexed by name\n        self.column_index = dict((c.name, c.oid[-1]) for c in self.columns.values())\n        # column names indexed by column numbers\n        self.reverse_column_index = dict(\n            (c.oid[-1], c.name) for c in self.columns.values()\n        )\n\n    def __repr__(self):\n        return \"%s(%r, %r, %r)\" % (\n            self.__class__.__name__,\n            self.table,\n            self.row,\n            self.columns,\n        )\n\n    @classmethod\n    def build(cls, mib, table_name):\n        \"\"\"Build and return a MibTableDescriptor for a MIB table.\n\n        mib -- a MibRetriever instance.\n        table_name -- the name of the table from the mib.\n\n        \"\"\"\n        if (\n            table_name not in mib.nodes\n            or mib.nodes[table_name].raw_mib_data['nodetype'] != 'table'\n        ):\n            raise MibRetrieverError(\"%s is not a table\" % table_name)\n\n        table_object = mib.nodes[table_name]\n        for node in mib.nodes.values():\n            if (\n                table_object.oid.is_a_prefix_of(node.oid)\n                and node.raw_mib_data['nodetype'] == 'row'\n            ):\n                row_object = mib.nodes[node.name]\n                # Only one row node type per table\n                break\n\n        columns = {}\n        for node in mib.nodes.values():\n            if (\n                row_object.oid.is_a_prefix_of(node.oid)\n                and node.raw_mib_data['nodetype'] == 'column'\n            ):\n                columns[node.name] = mib.nodes[node.name]\n\n        return cls(table_object, row_object, columns)\n\n    @classmethod\n    def build_all(cls, mib):\n        \"\"\"Build table descriptors for all tables in a mib.\n\n        mib -- MibRetriever instance\"\"\"\n        table_descriptors = []\n        for node in mib.nodes.values():\n            if node.raw_mib_data['nodetype'] == 'table':\n                table_descriptors.append(MibTableDescriptor.build(mib, node.name))\n        return table_descriptors\n\n\nclass MibTableResultRow(dict):\n    \"\"\"A result row from a MIB table.\n\n    Acts as a dictionary.  The row index is available through the\n    integer key 0, or as the member attribute 'index'.\n    \"\"\"\n\n    def __init__(self, index, columns=None):\n        \"\"\"Initialize with the row index of this row.\n\n        :param index: index OID\n        :param columns: optional list of column names to pre-allocate with None values.\n\n        \"\"\"\n        if columns is None:\n            columns = []\n        dict.__init__(self, [(c, None) for c in columns])\n        self.index = index\n        self[0] = index\n\n\nclass MibRetrieverMaker(type):\n    \"\"\"Metaclass to create new functional MIB retriever classes.\n\n    The MibRetriever base class uses this as its metaclass.  All new\n    MIB retrievers should inherit inherit directly from the\n    MibRetriever class.\n\n    \"\"\"\n\n    # TODO: extract enumerations from mib typedefs and add as useful\n    #       data structures.\n\n    # MIB module registry.  Maps MIB module names to classes created\n    # from this metaclass.\n    modules = {}\n\n    def __init__(cls, name, bases, dct):\n        try:\n            mib = dct['mib']\n        except KeyError:\n            try:\n                mib = bases[0].mib\n            except AttributeError:\n                raise AttributeError(\"No mib attribute in class %s\" % name)\n\n        super(MibRetrieverMaker, cls).__init__(name, bases, dct)\n\n        if mib is None:\n            # This may be the MibRetriever base class or a MixIn of some sort\n            return\n\n        MibRetrieverMaker.__make_node_objects(cls)\n        cls.tables = dict((t.table.name, t) for t in MibTableDescriptor.build_all(cls))\n\n        MibRetrieverMaker.__make_scalar_getters(cls)\n        MibRetrieverMaker.__make_table_getters(cls)\n        MibRetrieverMaker.__prepopulate_text_columns(cls)\n\n        MibRetrieverMaker.modules[mib['moduleName']] = cls\n\n    # following is a collection of helper methods to modify the\n    # MIB-aware retriever class that is being created.\n\n    @staticmethod\n    def __make_scalar_getters(cls):\n        \"\"\"Make a get_* method for every scalar MIB node.\"\"\"\n        for node in cls.nodes.values():\n            if node.raw_mib_data['nodetype'] == 'scalar':\n                method_name = 'get_%s' % node.name\n                # Only create method if a custom one was not present\n                if not hasattr(cls, method_name):\n                    setattr(\n                        cls, method_name, MibRetrieverMaker.__scalar_getter(node.name)\n                    )\n\n    @staticmethod\n    def __scalar_getter(node_name):\n        \"\"\"Return a single get_* method for a scalar MIB node.\n\n        node_name -- The name of the scalar node, e.g. ifDescr.\n\n        \"\"\"\n\n        def result_formatter(result, the_oid, self):\n            if the_oid in result or str(the_oid) in result:\n                self._logger.debug(\"%s query result: %r\", node_name, result)\n                return result.get(the_oid, result.get(str(the_oid), None))\n            else:\n                self._logger.debug(\"%s was not in the result: %r\", node_name, result)\n                return None\n\n        def getter(self):\n            self._logger.debug(\"Retrieving scalar value %s\", node_name)\n            the_oid = self.nodes[node_name].oid\n            df = self.agent_proxy.get([str(the_oid)])\n            df.addCallback(result_formatter, the_oid, self)\n            return df\n\n        getter.__name__ = node_name\n        return getter\n\n    @staticmethod\n    def __make_table_getters(cls):\n        \"\"\"Make a get_* method for all table MIB node.\"\"\"\n        for node_name in cls.tables.keys():\n            setattr(\n                cls, 'get_%s' % node_name, MibRetrieverMaker.__table_getter(node_name)\n            )\n\n    @staticmethod\n    def __table_getter(node_name):\n        \"\"\"Return a single get_* method for a table MIB node.\n\n        node_name -- The name of the table node, e.g. ifTable.\n\n        \"\"\"\n\n        def getter(self):\n            return self.retrieve_table(node_name)\n\n        getter.__name__ = node_name\n        return getter\n\n    @staticmethod\n    def __make_node_objects(cls):\n        cls.nodes = dict(\n            (node_name, MIBObject(cls.mib, node_name))\n            for node_name in cls.mib['nodes'].keys()\n        )\n\n    @staticmethod\n    def __prepopulate_text_columns(cls):\n        \"\"\"Prepopulates the new MibRetriever class' text_columns attribute\n        with a set of names of contained MIB objects that can be considered as\n        text types.\n\n        \"\"\"\n        nodes = {\n            node_name\n            for node_name in cls.mib['nodes']\n            if is_text_object(cls.mib, node_name)\n        }\n        cls.text_columns = nodes\n\n\nclass MibRetriever(object, metaclass=MibRetrieverMaker):\n    \"\"\"Base class for functioning MIB retriever classes.\"\"\"\n\n    mib = None\n    nodes = None\n    _logger = ContextLogger()\n\n    def __init__(self, agent_proxy):\n        \"\"\"Create a new instance tied to an AgentProxy instance.\"\"\"\n        super(MibRetriever, self).__init__()\n        self.agent_proxy = agent_proxy\n        # touch _logger to initialize logging context right away\n        self._logger\n\n    def get_module_name(self):\n        \"\"\"Returns the MIB module\"\"\"\n        return self.mib.get('moduleName', None)\n\n    @defer.inlineCallbacks\n    def get_next(self, object_name, translate_result=False):\n        \"\"\"Gets next sub-object of the named object\"\"\"\n        oid = self.nodes[object_name].oid\n        result = yield self.agent_proxy.walk(str(oid))\n        if hasattr(result, 'items'):\n            result = result.items()\n        for key, value in result:\n            if oid.is_a_prefix_of(key):\n                if translate_result:\n                    value = self.nodes[object_name].to_python(value)\n                return value\n\n    def retrieve_column(self, column_name):\n        \"\"\"Retrieve the contents of a single MIB table column.\n\n        Returns a deferred whose result is a dictionary:\n\n          { row_index: column_value }\n\n        \"\"\"\n        node = self.nodes[column_name]\n        if node.raw_mib_data['nodetype'] != 'column':\n            self._logger.debug(\"%s is not a table column\", column_name)\n\n        def _result_formatter(result):\n            formatted_result = {}\n            # result keys may be OID objects/tuples or strings, depending on\n            # snmp library used\n            if node.oid not in result and str(node.oid) not in result:\n                self._logger.debug(\n                    \"%s (%s) seems to be unsupported, result keys were: %r\",\n                    column_name,\n                    node.oid,\n                    result.keys(),\n                )\n                return {}\n            varlist = result.get(node.oid, result.get(str(node.oid), None))\n\n            for oid, value in varlist.items():\n                # Extract index information from oid\n                row_index = OID(oid).strip_prefix(node.oid)\n                if column_name in self.text_columns:\n                    value = safestring(value)\n                formatted_result[row_index] = value\n\n            return formatted_result\n\n        def _snmp_timeout_handler(failure: Failure):\n            \"\"\"Transforms SnmpTimeoutErrors into \"regular\" TimeoutErrors\"\"\"\n            failure.trap(SnmpTimeoutError)\n            raise TimeoutError(failure.value)\n\n        def _valueerror_handler(failure):\n            failure.trap(ValueError)\n            self._logger.warning(\n                \"got a possibly strange response from device \"\n                \"when asking for %s::%s, ignoring: %s\",\n                self.mib.get('moduleName', ''),\n                column_name,\n                failure.getErrorMessage(),\n            )\n            return {}  # alternative is to retry or raise a Timeout exception\n\n        deferred = self.agent_proxy.getTable([str(node.oid)])\n        deferred.addErrback(_snmp_timeout_handler)\n        deferred.addCallbacks(_result_formatter, _valueerror_handler)\n        return deferred\n\n    def retrieve_columns(self, column_names) -> Awaitable:\n        \"\"\"Retrieve a set of table columns.\n\n        The table columns may come from different tables, as long as\n        the table rows are indexed the same way.\n\n        Returns a deferred whose result is a dictionary:\n\n          { row_index: MibTableResultRow instance }\n\n        \"\"\"\n\n        def _sortkey(col):\n            return self.nodes[col].oid\n\n        columns = iter(sorted(column_names, key=_sortkey))\n\n        final_result = {}\n        my_deferred = defer.Deferred()\n\n        def _result_aggregate(result, column):\n            for row_index, value in result.items():\n                if row_index not in final_result:\n                    final_result[row_index] = MibTableResultRow(row_index, column_names)\n                final_result[row_index][column] = value\n            return True\n\n        # schedule the next iteration (i.e. collect next column)\n        def _schedule_next(_result=None):\n            try:\n                column = next(columns)\n            except StopIteration:\n                my_deferred.callback(final_result)\n                return\n            deferred = self.retrieve_column(column)\n            deferred.addCallback(_result_aggregate, column)\n            deferred.addCallback(_schedule_next)\n            deferred.addErrback(my_deferred.errback)\n\n        reactor.callLater(0, _schedule_next)\n        return my_deferred\n\n    def retrieve_table(self, table_name):\n        \"\"\"Table retriever and formatter.\n\n        Retrieves an entire MIB table.  Returns a deferred whose\n        result is a dictionary:\n\n          { row_index: MibTableResultRow instance }\n\n        Each dictionary key is a row index (an oid suffix tuple).  Each\n        dictionary value is a MibTableResultRow instance, which can be accessed\n        as both a dictionary and a list.\n\n        \"\"\"\n        table = self.tables[table_name]\n\n        def _result_formatter(result):\n            formatted_result = {}\n            for varlist in result.values():\n                # Build a table structure\n                for oid in sorted(varlist.keys()):\n                    if not table.table.oid.is_a_prefix_of(oid):\n                        _msg = \"Received wrong response from client, %s is not in %s\"\n                        raise MibRetrieverError(_msg % (oid, table.table.oid))\n\n                    # Extract table position of value\n                    oid_suffix = OID(oid).strip_prefix(table.row.oid)\n                    column_no = oid_suffix[0]\n                    row_index = oid_suffix[1:]\n                    if column_no not in table.reverse_column_index:\n                        self._logger.warning(\n                            \"device response has bad table index %s in %s::%s, \"\n                            \"ignoring\",\n                            oid_suffix,\n                            self.mib['moduleName'],\n                            table_name,\n                        )\n                        continue\n                    column_name = table.reverse_column_index[column_no]\n\n                    if row_index not in formatted_result:\n                        formatted_result[row_index] = MibTableResultRow(\n                            row_index,\n                            table.columns.keys(),\n                        )\n\n                    value = varlist[oid]\n                    if column_name in self.text_columns:\n                        value = safestring(value)\n                    formatted_result[row_index][column_name] = value\n\n            return formatted_result\n\n        deferred = self.agent_proxy.getTable([str(table.table.oid)])\n        deferred.addCallback(_result_formatter)\n        return deferred\n\n    @classmethod\n    def translate_result(cls, result):\n        \"\"\"Translate result values to pythonic values according to object\n        syntax.\n\n        Given a table result from one of this object's retrievers,\n        every column object will have it's to_python translation rules\n        applied.  This is useful to insert into a callback chain for\n        result formatting.\n\n        \"\"\"\n        for row in result.values():\n            for column in row.keys():\n                if column in cls.nodes:\n                    row[column] = cls.nodes[column].to_python(row[column])\n        return result\n\n    @defer.inlineCallbacks\n    def retrieve_column_by_index(self, column, index):\n        \"\"\"Retrieves the value of a specific column for a given row index\"\"\"\n        if column not in self.nodes:\n            raise ValueError(\"No such object in %s: %s\", self.mib['moduleName'], column)\n\n        node = self.nodes[column]\n        oid = node.oid + index\n        result = yield self.agent_proxy._get([oid])\n        for obj, value in result:\n            assert obj == oid\n            return node.to_python(value)\n\n\nclass MultiMibMixIn(MibRetriever):\n    \"\"\"Queries and chains the results of multiple logical MIB instances, using\n    either community indexing or SNMPv3 contexts.\n\n    Useful for Cisco devices, whose SNMP agents employ multiple BRIDGE-MIB\n    instances, one for each active VLAN.\n\n    Add the mixin to the list of base classes of a MibRetriever descendant\n    class, and override any querying method that should work across multiple\n    instances.  The overriden method should use a call to self._multiquery().\n\n    \"\"\"\n\n    def __init__(self, agent_proxy, instances: list[LogicalMibInstance]):\n        \"\"\"Initializes a MultiBridgeQuery to perform SNMP requests on multiple\n        logical MIB instances on the same host/IP.\n\n        :param agent_proxy: The base AgentProxy to use for communication. An\n                            AgentProxy for each additional MIB instance\n                            will be created based on the properties of this\n                            one.\n\n        :param instances: A list of LogicalMibInstance objects that describe the\n                          logical instances to query.\n\n        \"\"\"\n        super(MultiMibMixIn, self).__init__(agent_proxy)\n        self._base_agent = agent_proxy\n        self.instances: list[LogicalMibInstance] = instances\n\n    @defer.inlineCallbacks\n    def _multiquery(self, method, *args, **kwargs):\n        \"\"\"Runs method once for each known MIB instance.\n\n        The internal AgentProxy will be temporarily replaced with one\n        representing the current MIB instance for each iteration.\n\n        :param integrator: A function that can take a list of (description,\n                           result) tuples. description is the object\n                           associated with an instance, as supplied to the\n                           class constructor; result is the actual result\n                           value of the call to method.\n\n                           If omitted, the default integrator function is\n                           self._dictintegrator().\n\n        :returns: A deferred whose result is the return value of the\n                  integrator.\n\n        \"\"\"\n        agents = self._make_agents()\n        if 'integrator' in kwargs:\n            integrator = kwargs['integrator']\n            del kwargs['integrator']\n        else:\n            integrator = self._dictintegrator\n        results = []\n\n        for agent, descr in agents:\n            self._logger.debug(\"now querying %r\", descr)\n            if agent is not self._base_agent:\n                agent.open()\n            self.agent_proxy = agent\n            try:\n                one_result = yield method(*args, **kwargs).addErrback(\n                    self.__timeout_handler, descr\n                )\n            finally:\n                if agent is not self._base_agent:\n                    agent.close()\n                self.agent_proxy = self._base_agent\n            if agent is not self._base_agent:\n                self._logger.debug(\"got result from %r: %r\", descr, one_result)\n            results.append((descr, one_result))\n            yield lambda thing: fire_eventually(thing)\n        return integrator(results)\n\n    def __timeout_handler(self, failure, descr):\n        \"\"\"Handles timeouts while processing alternate MIB instances.\n\n        Under the premise that we may have an incorrect community string for a\n        MIB instance, we don't want to derail the entire process of collecting\n        from all instances, so we ignore timeouts for anything but the primary\n        (base) instance.\n\n        \"\"\"\n        if self.agent_proxy is not self._base_agent:\n            failure.trap(TimeoutError, defer.TimeoutError)\n            self._logger.debug(\"ignoring timeout from %r\", descr)\n            return None\n        return failure\n\n    @staticmethod\n    def _dictintegrator(results):\n        \"\"\"Merges dictionary results from a _multiquery() call.\n\n        If a key appears in multiple result dictionaries, the value from the\n        last procesed dictionary will overwrite the value from any previous\n        result dictionaries with the same key.  If this is not desirable you\n        need to write a custom result integrator.\n\n        \"\"\"\n        merged_dict = {}\n        for _instance, result in results:\n            if result is not None:\n                merged_dict.update(result)\n        return merged_dict\n\n    def _make_agents(self):\n        \"\"\"Generates a series of alternate AgentProxy instances\"\"\"\n        instances = list(self._prune_instances())\n        if not instances:\n            # The un-indexed BRIDGE-MIB instance represents the default\n            # VLAN. We only check this un-indexed instance if no alternate\n            # instances were found, otherwise some results will be duplicated.\n            yield self._base_agent, None\n        for instance in instances:\n            agent = self._get_alternate_agent(instance)\n            yield agent, instance.description\n\n    def _prune_instances(self) -> Iterator[LogicalMibInstance]:\n        \"\"\"Prunes instances with duplicate community strings from the\n        instance list, as these cannot possibly represent individual MIB\n        instances in the queried devices.\n\n        \"\"\"\n        seen_communities = set(self._base_agent.community)\n\n        for instance in self.instances:\n            if not instance.community:\n                continue\n            if instance.community not in seen_communities:\n                seen_communities.add(instance.community)\n                yield instance\n\n    def _get_alternate_agent(self, instance: LogicalMibInstance):\n        \"\"\"Create an alternate AgentProxy using the settings for a logical MIB instance.\n\n        :returns: An instance of the same class as the AgentProxy object given\n                  to __init__().  Every main attribute will be copied from the\n                  original AgentProxy, except for the alternative attributes\n                  described by a LogicalMibInstance object.\n        \"\"\"\n        agent = self._base_agent\n        if agent.snmp_parameters.version == 3:\n            changes = {\"context_name\": instance.context}\n            if instance.context_engine_id:\n                changes[\"context_engine_id\"] = instance.context_engine_id.hex()\n        else:\n            changes = {\"community\": instance.community}\n        new_parameters = dataclasses.replace(agent.snmp_parameters, **changes)\n\n        alt_agent = agent.__class__(\n            agent.ip,\n            agent.port,\n            snmp_parameters=new_parameters,\n        )\n        if hasattr(agent, 'protocol'):\n            alt_agent.protocol = agent.protocol\n\n        return alt_agent\n\n\ndef is_text_object(mib_dict, obj_name):\n    \"\"\"Verifies whether a given MIB object has a syntax that can be considered\n    a text type.\n    \"\"\"\n    if not mib_dict or \"nodes\" not in mib_dict:\n        return False\n    syntax_type = mib_dict[\"nodes\"][obj_name].get(\"syntax\", {}).get(\"type\", {})\n    type_name = syntax_type.get(\"name\", \"\")\n    parent_type_name = syntax_type.get(\"parent module\", {}).get(\"type\", \"\")\n\n    return type_name in TEXT_TYPES or parent_type_name in TEXT_TYPES\n"
  },
  {
    "path": "python/nav/mibs/netswitch_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\nLOCAL_SLOT = 'hpLocalMemSlotIndex'\nLOCAL_FREE = 'hpLocalMemFreeBytes'\nLOCAL_USED = 'hpLocalMemAllocBytes'\n\nGLOBAL_SLOT = 'hpGlobalMemSlotIndex'\nGLOBAL_FREE = 'hpGlobalMemFreeBytes'\nGLOBAL_USED = 'hpGlobalMemAllocBytes'\n\nMEMORY_OIDS = {\n    'local': [LOCAL_SLOT, LOCAL_FREE, LOCAL_USED],\n    'global': [GLOBAL_SLOT, GLOBAL_FREE, GLOBAL_USED],\n}\n\n\nclass NetswitchMib(mibretriever.MibRetriever):\n    mib = get_mib('NETSWITCH-MIB')\n\n    @defer.inlineCallbacks\n    def get_memory_usage(self):\n        \"\"\"Retrieves memory usage stats from a HP device.\n\n        :returns: A deferred whose result is a dict\n                  {slot_type: (used_bytes, free_bytes)}\n\n        \"\"\"\n        result = dict()\n        for kind, (slot_oid, free_oid, used_oid) in MEMORY_OIDS.items():\n            slots = yield self.retrieve_columns([slot_oid, free_oid, used_oid])\n            for row in slots.values():\n                result[kind + str(row[slot_oid])] = (row[used_oid], row[free_oid])\n        return result\n"
  },
  {
    "path": "python/nav/mibs/old_cisco_cpu_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass OldCiscoCpuMib(mibretriever.MibRetriever):\n    mib = get_mib('OLD-CISCO-CPU-MIB')\n\n    @defer.inlineCallbacks\n    def get_cpu_loadavg(self):\n        avgbusy5 = yield self.get_next('avgBusy5')\n        avgbusy1 = yield self.get_next('avgBusy1')\n        if avgbusy5 or avgbusy1:\n            result = dict(cpu=[(5, avgbusy5), (1, avgbusy1)])\n            return result\n\n    def get_cpu_utilization(self):\n        return defer.succeed(None)\n"
  },
  {
    "path": "python/nav/mibs/pdu2_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for getting sensor information from Raritan PDU2 devices\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nUNIT_MAP = {\n    'none': Sensor.UNIT_UNKNOWN,\n    'other': Sensor.UNIT_OTHER,\n    'volt': Sensor.UNIT_VOLTS_AC,\n    'amp': Sensor.UNIT_AMPERES,\n    'watt': Sensor.UNIT_WATTS,\n    'voltamp': Sensor.UNIT_VOLTAMPERES,\n    'wattHour': Sensor.UNIT_WATTHOURS,\n    'voltampHour': Sensor.UNIT_VOLTAMPEREHOURS,\n    'degreeC': Sensor.UNIT_CELSIUS,\n    'hertz': Sensor.UNIT_HERTZ,\n    'percent': Sensor.UNIT_PERCENT,\n    'meterpersec': Sensor.UNIT_MPS,\n    'pascal': Sensor.UNIT_PASCAL,\n    'psi': Sensor.UNIT_PSI,\n    'g': Sensor.UNIT_GRAMS,\n    'degreeF': Sensor.UNIT_FAHRENHEIT,\n    'feet': Sensor.UNIT_FEET,\n    'inches': Sensor.UNIT_INCHES,\n    'cm': Sensor.UNIT_METERS,\n    'meters': Sensor.UNIT_METERS,\n    'rpm': Sensor.UNIT_RPM,\n    'degrees': Sensor.UNIT_DEGREES,\n    'lux': Sensor.UNIT_LUX,\n    'grampercubicmeter': Sensor.UNIT_GPCM,\n    'var': Sensor.UNIT_UNKNOWN,\n}\n\nUNIT_SCALE = {\n    'cm': -2,\n}\n\nSENSOR_COLUMNS = [\n    \"{table}Units\",\n    \"{table}DecimalDigits\",\n    \"{table}Maximum\",\n    \"{table}Minimum\",\n]\n\n\nclass PDU2Mib(MibRetriever):\n    \"\"\"MibRetriever for Raritan PDU2\"\"\"\n\n    mib = get_mib('PDU2-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible sensors.\"\"\"\n        result = []\n        sensors, inlets = yield self.get_inlet_sensors()\n        result += sensors\n        result += yield self.get_inlet_pole_sensors(inlets)\n        result += yield self.get_over_current_protection_sensors()\n        return result\n\n    def retrieve_sensor_columns(self, table):\n        columns = [fmt.format(table=table) for fmt in SENSOR_COLUMNS]\n        return self.retrieve_columns(columns)\n\n    def get_sensor(self, table, index, row, name, description, internal_name):\n        unit = row['{table}Units'.format(table=table)]\n        scale = UNIT_SCALE.get(unit, 0)\n        unit = UNIT_MAP.get(unit, unit)\n        captable = table.replace(table[0], table[0].capitalize(), 1)\n        value_oid = self.nodes['measurements{table}Value'.format(table=captable)].oid\n        precision = row['{table}DecimalDigits'.format(table=table)] + scale\n        minimum = row['{table}Minimum'.format(table=table)] / (10.0**precision)\n        maximum = row['{table}Maximum'.format(table=table)]\n        if maximum == 4294967295:\n            maximum = None\n        else:\n            maximum = maximum / (10.0**precision)\n        sensor = dict(\n            oid=str(value_oid + index),\n            unit_of_measurement=unit,\n            precision=precision,\n            scale=None,\n            description=description,\n            name=name,\n            internal_name=internal_name,\n            mib=self.get_module_name(),\n            minimum=minimum,\n            maximum=maximum,\n        )\n        return sensor\n\n    @defer.inlineCallbacks\n    def get_inlet_sensors(self):\n        \"\"\"Discovers and returns sensors from the inletSensorConfigurationTable.\"\"\"\n        result = []\n        table = 'inletSensor'\n        inlets = yield self.retrieve_column('inletLabel')\n        channels = yield self.retrieve_sensor_columns(table)\n        channels = self.translate_result(channels)\n        for index, row in channels.items():\n            pdu_id, inlet_id, sensor_type = index\n            inlet = inlets.get(index[:2], inlet_id)\n            sensor_type = self.nodes['sensorType'].to_python(sensor_type)\n            name = \"pdu {pdu} inlet {inlet} {sensor}\".format(\n                pdu=pdu_id, inlet=inlet, sensor=sensor_type\n            )\n            internal_name = \"pdu{pdu}_{inlet}_{sensor}\".format(\n                pdu=pdu_id, inlet=inlet, sensor=sensor_type\n            )\n            sensor = self.get_sensor(table, index, row, name, name, internal_name)\n            result.append(sensor)\n        return (result, inlets)\n\n    @defer.inlineCallbacks\n    def get_inlet_pole_sensors(self, inlets):\n        \"\"\"Discovers and returns sensors from the inletPoleSensorConfigurationTable.\"\"\"\n        result = []\n        table = 'inletPoleSensor'\n        channels = yield self.retrieve_sensor_columns(table)\n        channels = self.translate_result(channels)\n        pole_lines = yield self.retrieve_column('inletPoleLine')\n        pole_lines = {\n            index: self.nodes['inletPoleLine'].to_python(value)\n            for index, value in pole_lines.items()\n        }\n        for index, row in channels.items():\n            pdu_id, inlet_id, inlet_pole_index, sensor_type = index\n            inlet = inlets.get(index[:2], inlet_id)\n            sensor_type = self.nodes['sensorType'].to_python(sensor_type)\n            pole_line = pole_lines.get(index[:3], \"Unknown lines %s\" % inlet_pole_index)\n            name = \"pdu {pdu} inlet {inlet} {pole} {sensor}\".format(\n                pdu=pdu_id, inlet=inlet, sensor=sensor_type, pole=pole_line\n            )\n            internal_name = \"pdu{pdu}_{inlet}_{line}_{sensor}\".format(\n                pdu=pdu_id, inlet=inlet, line=pole_line, sensor=sensor_type\n            )\n            sensor = self.get_sensor(table, index, row, name, name, internal_name)\n            result.append(sensor)\n        return result\n\n    @defer.inlineCallbacks\n    def get_over_current_protection_sensors(self):\n        \"\"\"Discovers and returns sensors from the\n        overCurrentProtectorSensorConfigurationTable.\n        \"\"\"\n        result = []\n        table = 'overCurrentProtectorSensor'\n        channels = yield self.retrieve_sensor_columns(table)\n        channels = self.translate_result(channels)\n        labels = yield self.retrieve_column('overCurrentProtectorLabel')\n        for index, row in channels.items():\n            pdu_id, protector_index, sensor_type = index\n            sensor_type = self.nodes['sensorType'].to_python(sensor_type)\n            label = labels.get(\n                index[:2], \"unlabeled protector {}\".format(protector_index)\n            )\n            name = \"pdu {pdu} overCurrentProtector {protector} {sensor}\".format(\n                pdu=pdu_id, protector=label, sensor=sensor_type\n            )\n            internal_name = \"pdu{pdu}_ocp{label}_{sensor}\".format(\n                pdu=pdu_id, label=label, sensor=sensor_type\n            )\n            sensor = self.get_sensor(table, index, row, name, name, internal_name)\n            if sensor_type == 'trip':\n                sensor['unit_of_measurement'] = Sensor.UNIT_TRUTHVALUE\n            result.append(sensor)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/power_ethernet_mib.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\n\n\nclass PowerEthernetMib(mibretriever.MibRetriever):\n    mib = get_mib('POWER-ETHERNET-MIB')\n\n    @defer.inlineCallbacks\n    def get_groups_table(self):\n        \"\"\"Retrieves PoE group information\"\"\"\n        cols = yield self.retrieve_columns(\n            [\"pethMainPsePower\", \"pethMainPseOperStatus\", \"pethMainPseConsumptionPower\"]\n        )\n        return cols\n\n    @defer.inlineCallbacks\n    def get_ports_table(self):\n        \"\"\"Retrieves PoE port information\"\"\"\n        cols = yield self.retrieve_table(\"pethPsePortTable\")\n        return cols\n"
  },
  {
    "path": "python/nav/mibs/powernet_mib.py",
    "content": "#\n# Copyright (C) 2008-2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for extracting information from APC devices\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs import reduce_index\nfrom nav.mibs.ups_mib import UpsMib\nfrom nav.models.manage import Sensor\n\nR_PDU_LOAD_STATUS_LOAD = 'rPDULoadStatusLoad'\nR_PDU_LOAD_STATUS_BANK_NUMBER = 'rPDULoadStatusBankNumber'\nR_PDU_LOAD_STATUS_PHASE_NUMBER = 'rPDULoadStatusPhaseNumber'\n\nU_VOLT = dict(u_o_m=Sensor.UNIT_VOLTS_AC)\nU_DECIVOLT = dict(u_o_m=Sensor.UNIT_VOLTS_AC, precision=1)\nU_AMPERE = dict(u_o_m=Sensor.UNIT_AMPERES)\nU_DECIAMPERE = dict(u_o_m=Sensor.UNIT_AMPERES, precision=1)\nU_HZ = dict(u_o_m=Sensor.UNIT_HERTZ)\nU_DECIHZ = dict(u_o_m=Sensor.UNIT_HERTZ, precision=1)\nU_PERCENT = dict(u_o_m=Sensor.UNIT_PERCENT)\nU_DECIPERCENT = dict(u_o_m=Sensor.UNIT_PERCENT, precision=1)\nU_CELSIUS = dict(u_o_m=Sensor.UNIT_CELSIUS)\nU_DECICELSIUS = dict(u_o_m=Sensor.UNIT_CELSIUS, precision=1)\nU_TIMETICKS = dict(u_o_m=Sensor.UNIT_SECONDS, precision=2)\n\n\nclass PowerNetMib(UpsMib):\n    \"\"\"Custom class for retrieveing sensors from APC UPSes.\"\"\"\n\n    mib = get_mib('PowerNet-MIB')\n\n    sensor_columns = {\n        'atsInputVoltage': U_VOLT,\n        'mUpsEnvironAmbientTemperature': U_CELSIUS,\n        'upsAdvBatteryActualVoltage': U_VOLT,\n        'upsAdvBatteryCapacity': U_PERCENT,\n        'upsAdvBatteryCurrent': U_AMPERE,\n        'upsAdvBatteryNominalVoltage': U_VOLT,\n        'upsAdvBatteryNumOfBadBattPacks': dict(u_o_m='batteries'),\n        'upsAdvBatteryNumOfBattPacks': dict(u_o_m='batteries'),\n        'upsAdvBatteryRunTimeRemaining': U_TIMETICKS,\n        'upsAdvBatteryTemperature': U_CELSIUS,\n        'upsAdvInputFrequency': U_HZ,\n        'upsAdvInputLineVoltage': U_VOLT,\n        'upsAdvInputMaxLineVoltage': U_VOLT,\n        'upsAdvInputMinLineVoltage': U_VOLT,\n        'upsAdvOutputCurrent': U_AMPERE,\n        'upsAdvOutputFrequency': U_HZ,\n        'upsAdvOutputLoad': U_PERCENT,\n        'upsAdvOutputVoltage': U_VOLT,\n        'upsAdvTotalDCCurrent': U_AMPERE,\n        'upsBasicBatteryTimeOnBattery': U_TIMETICKS,\n        'upsBasicOutputPhase': dict(u_o_m='Phase'),\n        'upsHighPrecBatteryActualVoltage': U_DECIVOLT,\n        'upsHighPrecBatteryCapacity': U_DECIPERCENT,\n        'upsHighPrecBatteryTemperature': U_DECICELSIUS,\n        'upsHighPrecInputFrequency': U_DECIHZ,\n        'upsHighPrecInputLineVoltage': U_DECIVOLT,\n        'upsHighPrecInputMaxLineVoltage': U_DECIVOLT,\n        'upsHighPrecInputMinLineVoltage': U_DECIVOLT,\n        'upsHighPrecOutputCurrent': U_DECIAMPERE,\n        'upsHighPrecOutputFrequency': U_DECIHZ,\n        'upsHighPrecOutputLoad': U_DECIPERCENT,\n        'upsHighPrecOutputVoltage': U_DECIVOLT,\n    }\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Gets all the interesting sensors for this device.\"\"\"\n        ups_sensors = yield super(PowerNetMib, self).get_all_sensors()\n        pdu_sensors = yield self._get_pdu_bank_load_sensors()\n        result = ups_sensors + pdu_sensors\n        return result\n\n    @defer.inlineCallbacks\n    def _get_pdu_bank_load_sensors(self):\n        banks = yield self.retrieve_columns(\n            [\n                R_PDU_LOAD_STATUS_LOAD,\n                R_PDU_LOAD_STATUS_PHASE_NUMBER,\n                R_PDU_LOAD_STATUS_BANK_NUMBER,\n            ]\n        )\n        banks = reduce_index(banks)\n        if banks:\n            self._logger.debug(\"Got pdu load status: %r\", banks)\n\n        result = []\n        column = self.nodes.get(R_PDU_LOAD_STATUS_LOAD, None)\n        for index, row in banks.items():\n            oid = str(column.oid + str(index))\n\n            bank_number = row.get(R_PDU_LOAD_STATUS_BANK_NUMBER, None)\n            phase_number = row.get(R_PDU_LOAD_STATUS_PHASE_NUMBER, None)\n            if bank_number != 0:\n                name = \"PDU Bank %s\" % bank_number\n            else:\n                name = \"PDU Phase %s\" % phase_number\n\n            result.append(\n                dict(\n                    oid=oid,\n                    unit_of_measurement=Sensor.UNIT_AMPERES,\n                    precision=1,\n                    scale=None,\n                    description='%s ampere load' % name,\n                    name=name,\n                    internal_name='%s%s' % (R_PDU_LOAD_STATUS_LOAD, index),\n                    mib=self.get_module_name(),\n                )\n            )\n        return result\n\n    @defer.inlineCallbacks\n    def get_serial_number(self):\n        \"\"\"Tries to get a serial number from an APC device\"\"\"\n        candidates = [k for k in self.nodes.keys() if 'IdentSerialNumber' in k]\n        for c in candidates:\n            serial = yield self.get_next(c)\n            if serial:\n                if isinstance(serial, bytes):\n                    serial = serial.decode(\"utf-8\")\n                return serial\n"
  },
  {
    "path": "python/nav/mibs/pwt_3phase_mibv1.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nA class that tries to retrieve the most relevant sensors from Powertek PDU.\n\nUses the vendor-specifica PWT_3Phase_MIBv1_v2.10-MIB to detect and collect\nsensor-information.\n\nPlease note!\n-- not a complete implementation of the mib --\n\n\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.models.manage import Sensor\nfrom nav.oids import OID\n\n# from .itw_mib import for_table\n\n\ndef for_table(table_name):\n    \"\"\"Used for annotating functions to process the returned\n    tables\"\"\"\n    if not hasattr(for_table, 'map'):\n        for_table.map = {}\n\n    def decorate(method):\n        \"\"\"Setup link between table and function\"\"\"\n        for_table.map[table_name] = method.__name__\n        return method\n\n    return decorate\n\n\nclass Pwt3PhaseV1Mib(mibretriever.MibRetriever):\n    \"\"\"A class that tries to retrieve all sensors from Powertek PDU\"\"\"\n\n    mib = get_mib('PWTv1-MIB')\n\n    def _get_oid_for_sensor(self, sensor_name):\n        \"\"\"Return the OID for the given sensor-name as a string; Return\n        None if sensor-name is not found.\n        \"\"\"\n        oid_str = None\n        nodes = self.mib.get('nodes', None)\n        if nodes:\n            sensor_def = nodes.get(sensor_name, None)\n            if sensor_def:\n                oid_str = sensor_def.get('oid', None)\n        return oid_str\n\n    def _make_result_dict(\n        self,\n        sensor_oid,\n        base_oid,\n        serial,\n        desc,\n        u_o_m=None,\n        precision=0,\n        scale=None,\n        name=None,\n    ):\n        \"\"\"Make a simple dictionary to return to plugin\"\"\"\n\n        oid = OID(base_oid) + OID(sensor_oid)\n\n        internal_name = str(serial) + desc\n        return {\n            'oid': oid,\n            'unit_of_measurement': u_o_m,\n            'precision': precision,\n            'scale': scale,\n            'description': desc,\n            'name': name,\n            'internal_name': internal_name,\n            'mib': self.get_module_name(),\n        }\n\n    @for_table('pduPwrMonitoringInletStatusTable')\n    def _get_internal_sensors_params(self, internal_sensors):\n        sensors = []\n\n        for sensor in internal_sensors.values():\n            serial = sensor.get('inletIndex', None)\n            # The spesification says the value can be 0 - 3 but I am\n            # seeing 0 - 7 and only 0 has value\n            if serial != 0:\n                continue\n\n            sensor_oid = sensor.get(0, None)\n            name = 'PWT'  # sensor.get('internalName', None)\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletCurrPhase1'),\n                    serial,\n                    'inletCurrPhase1',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_AMPERES,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletCurrPhase2'),\n                    serial,\n                    'inletCurrPhase2',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_AMPERES,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletCurrPhase3'),\n                    serial,\n                    'inletCurrPhase3',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_AMPERES,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletPowerPhase1'),\n                    serial,\n                    'inletPowerPhase1',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_WATTS,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletPowerPhase2'),\n                    serial,\n                    'inletPowerPhase2',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_WATTS,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletPowerPhase3'),\n                    serial,\n                    'inletPowerPhase3',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_WATTS,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletVoltPhase1'),\n                    serial,\n                    'inletVoltPhase1',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_VOLTS_AC,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletVoltPhase2'),\n                    serial,\n                    'inletVoltPhase2',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_VOLTS_AC,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletVoltPhase3'),\n                    serial,\n                    'inletVoltPhase3',\n                    precision=1,\n                    u_o_m=Sensor.UNIT_VOLTS_AC,\n                    name=name,\n                )\n            )\n            sensors.append(\n                self._make_result_dict(\n                    sensor_oid,\n                    self._get_oid_for_sensor('inletLoadBalance'),\n                    serial,\n                    'inletLoadBalance',\n                    u_o_m=Sensor.UNIT_PERCENT,\n                    name=name,\n                )\n            )\n\n        return sensors\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Try to retrieve some of the available sensors in this PDU\"\"\"\n        # We only implement pduPwrMonitoringInletStatusTable for now\n        tables = ['pduPwrMonitoringInletStatusTable']\n\n        result = []\n        for table in tables:\n            self._logger.debug('get_all_sensors: table = %s', table)\n            sensors = yield self.retrieve_table(table).addCallback(reduce_index)\n            self._logger.debug('get_all_sensors: %s = %s', table, sensors)\n            handler = for_table.map.get(table, None)\n            if not handler:\n                self._logger.error(\"There is not data handler for %s\", table)\n            else:\n                method = getattr(self, handler)\n                result.extend(method(sensors))\n\n        return result\n"
  },
  {
    "path": "python/nav/mibs/qbridge_mib.py",
    "content": "#\n# Copyright (C) 2009, 2011, 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a Q-BRIDGE-MIB MibRetriever and associated functionality.\"\"\"\n\nimport re\n\nfrom twisted.internet import defer\n\nimport nav.bitvector\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\n\n\nclass QBridgeMib(mibretriever.MibRetriever):\n    mib = get_mib('Q-BRIDGE-MIB')\n\n    juniper_hack = False\n\n    def get_baseport_pvid_map(self):\n        \"\"\"Retrieves the mapping between baseport numbers and VLAN tag numbers.\n\n        :returns: A Deferred whose result is a dict of the form\n                  { baseportnum: PVID }\n\n        \"\"\"\n        df = self.retrieve_column('dot1qPvid')\n        return df.addCallback(reduce_index)\n\n    def get_vlan_current_egress_ports(self):\n        \"\"\"Retrieves, for each VLAN, a list of ports that can currently\n        transmit frames for the VLAN.\n\n        :returns: A Deferred, whose result is a dict of the form\n                  { PVID: <PortList instance> }\n\n        \"\"\"\n        df = self.retrieve_column('dot1qVlanCurrentEgressPorts')\n        df.addCallback(filter_newest_current_entries)\n        return df.addCallback(convert_data_to_portlist, self.juniper_hack)\n\n    def get_vlan_current_untagged_ports(self):\n        \"\"\"Retrieves, for each VLAN, a list of ports that can currently\n        transmit untagged frames for the VLAN.\n\n        :returns: A Deferred, whose result is a dict of the form\n                  { PVID: <PortList instance> }\n\n        \"\"\"\n        df = self.retrieve_column('dot1qVlanCurrentUntaggedPorts')\n        df.addCallback(filter_newest_current_entries)\n        return df.addCallback(convert_data_to_portlist, self.juniper_hack)\n\n    def get_vlan_static_egress_ports(self):\n        \"\"\"Retrieves, for each VLAN, a list of ports that are configured to\n        transmit frames for the VLAN.\n\n        :returns: A Deferred, whose result is a dict of the form\n                  { PVID: <PortList instance> }\n\n        \"\"\"\n        df = self.retrieve_column('dot1qVlanStaticEgressPorts')\n        df.addCallback(reduce_index)\n        return df.addCallback(convert_data_to_portlist, self.juniper_hack)\n\n    def get_vlan_static_untagged_ports(self):\n        \"\"\"Retrieves, for each VLAN, a list of ports that are configured to\n        transmit untagged frames for the VLAN.\n\n        :returns: A Deferred, whose result is a dict of the form\n                  { PVID: <PortList instance> }\n\n        \"\"\"\n        df = self.retrieve_column('dot1qVlanStaticUntaggedPorts')\n        df.addCallback(reduce_index)\n        return df.addCallback(convert_data_to_portlist, self.juniper_hack)\n\n    @defer.inlineCallbacks\n    def get_forwarding_database(self):\n        \"Retrieves the forwarding databases of the device\"\n        columns = yield self.retrieve_columns(['dot1qTpFdbPort', 'dot1qTpFdbStatus'])\n        columns = self.translate_result(columns)\n        valid = (\n            row\n            for row in columns.values()\n            if row['dot1qTpFdbStatus'] not in ('self', 'invalid')\n        )\n        result = []\n        for row in valid:\n            index = row[0]\n            mac = index[1:]\n            mac = ':'.join(\"%02x\" % o for o in mac[-6:])\n            port = row['dot1qTpFdbPort']\n            result.append((mac, port))\n        return result\n\n    @defer.inlineCallbacks\n    def get_vlan_static_names(self):\n        names = yield self.retrieve_column('dot1qVlanStaticName').addCallback(\n            reduce_index\n        )\n        # Workaround for faulty SNMP agents: strip null bytes\n        for key, value in names.items():\n            if isinstance(value, str) and \"\\x00\" in value:\n                names[key] = value.replace(\"\\x00\", \"\")\n        return names\n\n\ndef filter_newest_current_entries(dot1qvlancurrenttable):\n    \"\"\"Filters a result from the dot1qVlanCurrentTable, removing the\n    TimeFilter element of the table index and returning only the newest entry\n    for each VLAN.\n\n    \"\"\"\n    return dict(\n        (vlan_index, data)\n        for (time_index, vlan_index), data in sorted(dot1qvlancurrenttable.items())\n    )\n\n\ndef convert_data_to_portlist(result, juniper_hack):\n    return {key: portlist(data, juniper_hack) for key, data in result.items()}\n\n\ndef portlist_spec(data):\n    \"\"\"Return a set of port numbers represented by this PortList.\"\"\"\n    vector = nav.bitvector.BitVector(data)\n    # a bitvector is indexed from 0, but ports are indexed from 1\n    return {b + 1 for b in vector.get_set_bits()}\n\n\ndef portlist_juniper(data):\n    \"\"\"Return a set of port numbers represented by this PortList\n    interpreted in junipers strange notion of the spec or None if data\n    does not match this format\n    \"\"\"\n    # data would normally be binary, but since Juniper ignores the spec, it's a comma\n    # separated ASCII string:\n    if isinstance(data, bytes):\n        try:\n            data = data.decode('ascii')\n        except UnicodeDecodeError:\n            return None\n    if re.match(\"^[0-9,]+$\", data):\n        return {int(x) for x in data.split(\",\")}\n    return None\n\n\ndef portlist(data, juniper_hack=False):\n    \"\"\"Return a set of port numbers represented by this PortList.\n\n    If juniper_hack is true and it is formatted according to junipers\n    formatting, interpret it that way, otherwise follow the spec\n    \"\"\"\n    if not juniper_hack:\n        return portlist_spec(data)\n    juniper_list = portlist_juniper(data)\n    if not juniper_list:\n        return portlist_spec(data)\n    return juniper_list\n"
  },
  {
    "path": "python/nav/mibs/rittal_cmc_iii.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for getting sensor readings from Rittal CMC III devices\"\"\"\n\nfrom collections import defaultdict\nimport math\n\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nDEGREES_CELSIUS = \"\\xb0C\"\nDEGREES_FAHRENHEIT = \"\\xb0F\"\nUNIT_MAP = {\n    DEGREES_CELSIUS: Sensor.UNIT_CELSIUS,\n    DEGREES_FAHRENHEIT: Sensor.UNIT_FAHRENHEIT,\n    'mA': Sensor.UNIT_AMPERES,\n    'A': Sensor.UNIT_AMPERES,\n    'W': Sensor.UNIT_WATTS,\n    'V': Sensor.UNIT_VOLTS_DC,\n    's': Sensor.UNIT_SECONDS,\n    'l/min': Sensor.UNIT_LPM,\n    '%': Sensor.UNIT_PERCENT,\n    '': Sensor.UNIT_UNKNOWN,\n    'VA': Sensor.UNIT_VOLTAMPERES,\n    'var': Sensor.UNIT_VAR,\n    'kWh': Sensor.UNIT_WATTHOURS,\n    'kVAh': Sensor.UNIT_VOLTAMPEREHOURS,\n    'Hz': Sensor.UNIT_HERTZ,\n}\n\nUNIT_SCALE = {\n    'mA': 'milli',\n    'kWh': 'kilo',\n    'kVAh': 'kilo',\n}\n\nSENSOR_COLUMNS = [\n    'cmcIIIVarType',\n    'cmcIIIVarName',\n    'cmcIIIVarUnit',\n    'cmcIIIVarDatatype',\n    'cmcIIIVarScale',\n    'cmcIIIVarValueStr',\n]\n\nIGNORED_STATUSES = {\n    'n.a.',\n    'Inactive',\n}\n\n\nclass RittalCMCIIIMib(MibRetriever):\n    \"\"\"MibRetriever for Rittal CMC III devices\"\"\"\n\n    mib = get_mib('RITTAL-CMC-III-MIB')\n\n    def get_module_name(self):\n        \"\"\"Returns the MIB module name\"\"\"\n        return self.mib.get('moduleName', None)\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Discovers and returns all eligible sensors from the device.\"\"\"\n        devices = yield self.get_devices()\n        sensors = yield self.get_sensors(devices)\n        return sensors\n\n    @defer.inlineCallbacks\n    def get_devices(self):\n        devices = yield self.retrieve_columns(\n            ['cmcIIIDevName', 'cmcIIIDevAlias', 'cmcIIIDevNumberOfVars']\n        )\n        devices = self.translate_result(devices)\n        return devices\n\n    @defer.inlineCallbacks\n    def get_sensors(self, devices):\n        dev_names = {oid: dev['cmcIIIDevName'] for oid, dev in devices.items()}\n        dev_aliases = {oid: dev['cmcIIIDevAlias'] for oid, dev in devices.items()}\n        sensors = yield self.retrieve_columns(SENSOR_COLUMNS)\n        sensors = self.translate_result(sensors)\n        result = []\n        mapping = defaultdict(dict)\n        for oid, values in sensors.items():\n            name = values['cmcIIIVarName']\n            name_parts = name.split(\".\")\n            suffix = name_parts[-1]\n            sensor = \".\".join(name_parts[:-1])\n            mapping[sensor][suffix] = values\n        for sname, data in mapping.items():\n            description = data.get('DescName', {}).get('cmcIIIVarValueStr', sname)\n            status = data.get('Status', {}).get('cmcIIIVarValueStr', 'OK')\n            if status in IGNORED_STATUSES:\n                self._logger.debug('Ignoring sensor %s due to status %s', sname, status)\n                continue\n            for var_name, values in data.items():\n                oid = values[0]\n                if values['cmcIIIVarType'] != 'value':\n                    continue\n                if values['cmcIIIVarDatatype'] != 'int':\n                    self._logger.warning(\n                        \"Found sensor %s with datatype %s\",\n                        values['cmcIIIVarName'],\n                        values['cmcIIIVarDatatype'],\n                    )\n                    continue\n                raw_unit = values['cmcIIIVarUnit']\n                scale = UNIT_SCALE.get(raw_unit, None)\n                unit = UNIT_MAP.get(raw_unit, raw_unit)\n                name = values['cmcIIIVarName']\n                raw_precision = values['cmcIIIVarScale']\n                if raw_precision < 0:\n                    precision = math.log10(-raw_precision)\n                elif raw_precision == 0:\n                    precision = 0\n                else:\n                    precision = -math.log10(raw_precision)\n                var_descr = '{}: {}'.format(dev_aliases[oid[:-1]], description)\n                if var_name != 'Value':\n                    var_descr += \" {}\".format(var_name)\n                sensor = dict(\n                    oid=str(self.nodes['cmcIIIVarValueInt'].oid + oid),\n                    unit_of_measurement=unit,\n                    precision=precision,\n                    scale=scale,\n                    description=var_descr,\n                    name=name,\n                    internal_name='{dev}_{var}'.format(\n                        dev=dev_names[oid[:-1]], var=name\n                    ),\n                    mib=self.get_module_name(),\n                )\n                result.append(sensor)\n        return result\n"
  },
  {
    "path": "python/nav/mibs/snmpv2_mib.py",
    "content": "#\n# Copyright (C) 2009-2012, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements a MibRetriever for the SNMPV2-MIB\"\"\"\n\nimport time\n\nfrom twisted.internet import defer\n\nfrom nav.Snmp import safestring\nfrom nav.oids import OID\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass Snmpv2Mib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for SNMPv2-MIB\"\"\"\n\n    mib = get_mib('SNMPv2-MIB')\n\n    @defer.inlineCallbacks\n    def _get_sysvariable(self, var):\n        \"\"\"Retrieves a system variable of the first agent instance.\n\n        Will first try get-next on {var}, then fall back to getting {var}.0 on\n        failure.  This is a workaround for a faulty SNMP agent implementation\n        observed in Weathergoose devices, where e.g. a GET-NEXT on sysObjectID\n        would consistently return sysUpTime.0 instead.\n\n        \"\"\"\n        oid = self.nodes[var].oid\n        result = yield self.get_next(var)\n        if result:\n            return result\n        else:\n            oid = oid + OID('0')\n            result = yield self.agent_proxy.get([str(oid)])\n            for key, value in result.items():\n                if oid == OID(key):\n                    return value\n\n    def get_sysObjectID(self):\n        \"\"\"Retrieves the sysObjectID of the first agent instance.\"\"\"\n        return self._get_sysvariable('sysObjectID')\n\n    def get_sysDescr(self):\n        \"\"\"Retrieves the sysDescr of the first agent instance.\"\"\"\n        dfr = self._get_sysvariable('sysDescr')\n        dfr.addCallback(safestring)\n        return dfr\n\n    def get_sysUpTime(self):\n        \"\"\"Retrieves the sysUpTime of the first agent instance.\"\"\"\n        return self._get_sysvariable('sysUpTime')\n\n    @defer.inlineCallbacks\n    def get_timestamp_and_uptime(self):\n        \"\"\"Retrieves the agent's current sysUpTime and gets the current system\n        time.\n\n        :returns: A tuple of (timestamp, collected_sysuptime)\n\n        \"\"\"\n        sysuptime = yield self._get_sysvariable('sysUpTime')\n        timestamp = time.mktime(time.localtime())\n        return (timestamp, sysuptime)\n\n    @staticmethod\n    def get_uptime_deviation(first_uptime, second_uptime):\n        \"\"\"Calculates the deviation between two collected sysUpTime values and\n        the expected delta of the two, based on the collection timestamp delta\n        between the two.\n\n        The calculation will take into account the fact that sysUpTime is a\n        32-bit unsigned value measuring centiseconds, and will wrap around\n        every ~497.10 days.\n\n        :argument first_uptime: A (timestamp, sysUpTime) tuple. The timestamp\n                                should be the wall clock of the NAV server\n                                when the sysUpTime value was collected.\n\n        :argument second_uptime: A (timestamp, sysUpTime) tuple. The\n                                 timestamp should be the wall clock of the NAV\n                                 server when the sysUpTime value was\n                                 collected.\n\n        :returns: The deviation, in seconds, between the collected uptime\n        delta and the expected uptime delta.\n\n        \"\"\"\n        tstamp1, uptime1 = first_uptime\n        tstamp2, uptime2 = second_uptime\n\n        if any(x is None for x in (tstamp1, tstamp2, uptime1, uptime2)):\n            return\n\n        expected_delta = (tstamp2 - tstamp1) * 100.0\n        expected_uptime2 = (uptime1 + expected_delta) % 2**32\n        deviation = (uptime2 - expected_uptime2) / 100.0\n        return deviation\n"
  },
  {
    "path": "python/nav/mibs/spagent_mib.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nAKCP SPAGENT-MIB MibRetriever.\n\nNot all sensor types of the sensorProbe product range are supported by this\nimplementation. sensorProbes support a multitude of switch sensors and virtual\nsensors, whose readouts aren't suitable for graphing over time.\n\nThis implementation sticks with the easily graphable sensors,\nlike temperature, humidity, voltages and currents.\n\n\"\"\"\n\nfrom twisted.internet import defer\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\nfrom nav.models.manage import Sensor\n\nPRODUCT_TYPE = \"sensorProbeProductType\"\n\nAKCP_SENSOR_PROBE_8_TABLES = {\n    'sensorProbeTempTable': {\n        'descr': 'sensorProbeTempDescription',\n        'online': 'sensorProbeTempOnline',\n        'unit': 'sensorProbeTempDegreeType',\n        'readout': 'sensorProbeTempDegreeRaw',\n        'precision': 1,\n        'internal_prefix': 'temperature',\n    },\n    'sensorProbeHumidityTable': {\n        'descr': 'sensorProbeHumidityDescription',\n        'online': 'sensorProbeHumidityOnline',\n        '_unit': Sensor.UNIT_PERCENT,\n        'readout': 'sensorProbeHumidityPercent',\n        'precision': 0,\n        'internal_prefix': 'humidity',\n    },\n    # 'sensorProbeSwitchTable': {},  # wouldn't know how to graph this\n    'sensorProbeIRMSSensorTable': {\n        'descr': 'sensorProbeIRMSDescription',\n        'online': 'sensorProbeIRMSOnline',\n        '_unit': Sensor.UNIT_PERCENT,\n        'readout': 'sensorProbeIRMSPercent',\n        'precision': 0,\n        'internal_prefix': 'IRMSsensor',\n    },\n    'sensorProbeVRMSSensorTable': {\n        'descr': 'sensorProbeVRMSDescription',\n        'online': 'sensorProbeVRMSOnline',\n        '_unit': Sensor.UNIT_PERCENT,\n        'readout': 'sensorProbeVRMSPercent',\n        'precision': 0,\n        'internal_prefix': 'VRMSsensor',\n    },\n    'sensorProbeEnergySensorTable': {\n        'descr': 'sensorProbeEnergyDescription',\n        'online': 'sensorProbeEnergyOnline',\n        '_unit': Sensor.UNIT_PERCENT,\n        'readout': 'sensorProbeEnergyPercent',\n        'precision': 0,\n        'internal_prefix': 'energysensor',\n    },\n}\n\nAKCP_SENSOR_PROBE_PLUS_TABLES = {\n    'commonTable': {\n        'descr': 'commonDescription',\n        'readout': 'commonValue',\n        'unit': 'commonUnit',\n        'precision': 0,\n        'internal_prefix': 'common',\n    }\n}\n\n\n# maps PRODUCT_TYPE to relevant tables\nTABLES = {\n    2: AKCP_SENSOR_PROBE_8_TABLES,\n    16: AKCP_SENSOR_PROBE_PLUS_TABLES,\n}\n\n\nclass SPAgentMib(MibRetriever):\n    \"\"\"SPAGENT-MIB MibRetriever\"\"\"\n\n    mib = get_mib('SPAGENT-MIB')\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Returns a Deferred whose result is a list of sensor dictionaries\"\"\"\n        result = []\n        model_id = yield self.get_next(PRODUCT_TYPE)\n        if model_id not in TABLES.keys():\n            # default to the older version\n            model_id = 2\n        for table, config in TABLES[model_id].items():\n            sensors = yield self._get_sensors(config)\n            result.extend(sensors)\n        return result\n\n    @defer.inlineCallbacks\n    def _get_sensors(self, config):\n        \"\"\"\n        Collects sensor columns according to the config dict, and translates\n        the results into sensor dicts.\n\n        \"\"\"\n        columns = [config['descr']]\n        for field in ['unit', 'online']:\n            if field in config:\n                columns.append(config[field])\n\n        result = (\n            yield self.retrieve_columns(columns)\n            .addCallback(self.translate_result)\n            .addCallback(reduce_index)\n        )\n\n        sensors = (\n            self._row_to_sensor(config, index, row) for index, row in result.items()\n        )\n\n        return [s for s in sensors if s]\n\n    def _row_to_sensor(self, config, index, row):\n        \"\"\"\n        Converts a collect SNMP table row into a sensor dict, using the\n        options defined in the config dict.\n\n        \"\"\"\n        if 'online' in config:\n            online = row.get(config['online'], 'offline')\n            if online == 'offline':\n                return\n\n        internal_name = config['internal_prefix'] + str(index)\n        descr = row.get(config['descr'], internal_name)\n\n        mibobject = self.nodes.get(config['readout'])\n        readout_oid = str(mibobject.oid + str(index))\n\n        if 'unit' in config:\n            unit = row.get(config['unit'], None)\n            if unit == 'fahr':\n                unit = Sensor.UNIT_FAHRENHEIT\n            if unit == 'C':\n                unit = Sensor.UNIT_CELSIUS\n        else:\n            unit = config['_unit']\n\n        return {\n            'oid': readout_oid,\n            'unit_of_measurement': unit,\n            'precision': config['precision'],\n            'scale': None,\n            'description': descr,\n            'name': descr,\n            'internal_name': internal_name,\n            'mib': 'SPAGENT-MIB',\n        }\n"
  },
  {
    "path": "python/nav/mibs/statistics_mib.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"HP STATISTICS-MIB\"\"\"\n\nfrom collections import namedtuple\nfrom IPy import IP\nfrom twisted.internet import defer\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever, reduce_index\n\nMulticastStat = namedtuple(\"MulticastStat\", \"group ifindex vlan access\")\n\n\nclass StatisticsMib(mibretriever.MibRetriever):\n    \"\"\"HP STATISTICS-MIB\"\"\"\n\n    mib = get_mib('STATISTICS-MIB')\n\n    @defer.inlineCallbacks\n    def get_cpu_utilization(self):\n        \"\"\"Returns the current switch CPU utilization in percent\"\"\"\n        util = yield self.get_next('hpSwitchCpuStat')\n        if util is not None:\n            return dict(cpu=util)\n\n    def get_cpu_loadavg(self):\n        return defer.succeed(None)\n\n    @defer.inlineCallbacks\n    def get_ipv4_multicast_groups_per_port(self):\n        \"\"\"\n        Returns IGMP snooping information from ports.\n\n        :returns: A Deferred whose result is a list of MulticastStat tuples\n        \"\"\"\n        column = \"hpIgmpStatsPortAccess2\"\n        ports = (\n            yield self.retrieve_columns([column])\n            .addCallback(self.translate_result)\n            .addCallback(reduce_index)\n        )\n\n        def _split(item):\n            index, columns = item\n            vlan = index[0]\n            group = index[1:5]\n            ifindex = index[5]\n            access = columns[column]\n            return MulticastStat(\n                IP('.'.join(str(i) for i in group)), ifindex, vlan, access\n            )\n\n        return [_split(i) for i in ports.items()]\n"
  },
  {
    "path": "python/nav/mibs/types.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Type definitions for nav.mibs package.\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\n\n@dataclass(frozen=True)\nclass LogicalMibInstance:\n    \"\"\"A MIB instance identifier.\n\n    Some devices (like Cisco switches) provide multiple logical instances of a MIB (such\n    as BRIDGE-MIB) within a single physical device, and we need a way to reference them\n    and the settings needed to collect data from a specific logical instance.\n    \"\"\"\n\n    description: str\n    community: Optional[str]\n    context: Optional[str] = None\n    context_engine_id: Optional[bytes] = None\n"
  },
  {
    "path": "python/nav/mibs/ups_mib.py",
    "content": "#\n# Copyright 2008 - 2011, 2014 (C) Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for extracting sensors from RFC1628 compatible UPSes\"\"\"\n\nfrom twisted.internet import defer\n\nfrom nav.mibs import reduce_index\nfrom nav.smidumps import get_mib\nfrom nav.mibs import mibretriever\nfrom nav.models.manage import Sensor\n\n\nclass UpsMib(mibretriever.MibRetriever):\n    \"\"\"A class for retrieveing sensors from RFC1628-compatible UPSes.\"\"\"\n\n    mib = get_mib('UPS-MIB')\n\n    sensor_columns = {\n        # battery group\n        'upsBatteryTemperature': {\n            'u_o_m': Sensor.UNIT_CELSIUS,\n        },\n        'upsEstimatedChargeRemaining': {\n            'u_o_m': Sensor.UNIT_PERCENT,\n        },\n        'upsEstimatedMinutesRemaining': {\n            'u_o_m': Sensor.UNIT_MINUTES,\n        },\n        # input group\n        'upsInputNumLines': {},\n        'upsInputFrequency': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_HERTZ,\n            'precision': 1,\n        },\n        'upsInputVoltage': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_VOLTS_AC,\n        },\n        'upsInputCurrent': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_AMPERES,\n            'precision': 1,\n        },\n        'upsInputTruePower': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_WATTS,\n        },\n        # output group\n        'upsOutputFrequency': {\n            'u_o_m': Sensor.UNIT_HERTZ,\n            'precision': 1,\n        },\n        'upsOutputNumLines': {},\n        'upsOutputVoltage': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_VOLTS_AC,\n        },\n        'upsOutputCurrent': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_AMPERES,\n            'precision': 1,\n        },\n        'upsOutputPower': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_WATTS,\n        },\n        'upsOutputPercentLoad': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_PERCENT,\n        },\n        # bypass group\n        'upsBypassFrequency': {'u_o_m': Sensor.UNIT_HERTZ, 'precision': 1},\n        'upsBypassNumLines': {},\n        'upsBypassVoltage': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_VOLTS_AC,\n        },\n        'upsBypassCurrent': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_AMPERES,\n            'precision': 1,\n        },\n        'upsBypassPower': {\n            'is_column': True,\n            'u_o_m': Sensor.UNIT_WATTS,\n        },\n    }\n\n    def _get_named_column(self, column):\n        \"\"\"Retrieves the contents of the named column from this MIB\"\"\"\n        df = self.retrieve_columns([column])\n        df.addCallback(reduce_index)\n        return df\n\n    @defer.inlineCallbacks\n    def get_all_sensors(self):\n        \"\"\"Returns a list of all the interesting sensors on this UPS.\"\"\"\n        result = []\n\n        for sensor in self.sensor_columns:\n            sensor_params = yield self._get_named_column(sensor)\n            result.extend(self._get_sensors(sensor, sensor_params))\n\n        return result\n\n    def _get_sensors(self, object_name, sensor_params):\n        result = []\n        meta = self.sensor_columns[object_name]\n        self._logger.debug(\n            '_get_sensors: %s; %s = %s', self.agent_proxy.ip, object_name, sensor_params\n        )\n\n        for row in sensor_params.values():\n            row_oid = row.get(0, None)\n            mibobject = self.nodes.get(object_name, None)\n            oid = str(mibobject.oid) + str(row_oid)\n            unit_of_measurement = meta.get('u_o_m', None)\n            precision = meta.get('precision', None)\n            scale = meta.get('scale', None)\n            description = (\n                self.mib.get('nodes').get(object_name).get('description', None)\n            )\n            if meta.get('is_column', False):\n                name = object_name + str(row_oid)\n            else:\n                name = object_name\n            internal_name = name\n\n            result.append(\n                {\n                    'oid': oid,\n                    'unit_of_measurement': unit_of_measurement,\n                    'precision': precision,\n                    'scale': scale,\n                    'description': description,\n                    'name': name,\n                    'internal_name': internal_name,\n                    'mib': self.get_module_name(),\n                }\n            )\n\n        return result\n"
  },
  {
    "path": "python/nav/mibs/vrrp_mib.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"VRRP-MIB handling\"\"\"\n\nfrom IPy import IP\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom . import mibretriever\n\n\nclass VRRPMib(mibretriever.MibRetriever):\n    \"\"\"A MibRetriever for handling VRRP-MIB\"\"\"\n\n    mib = get_mib('VRRP-MIB')\n\n    @defer.inlineCallbacks\n    def get_virtual_addresses(self):\n        \"\"\"Retrieves a map of virtual VRRP addresses->ifindex\"\"\"\n        vrrp_ips = yield self.retrieve_column('vrrpAssoIpAddrRowStatus')\n        addr_map = {}\n        for index, status in vrrp_ips.items():\n            ifindex, vrrp_id = index[:2]\n            ipaddr = IP(\".\".join(str(o) for o in index[2:]))\n            addr_map[ipaddr] = ifindex\n        return addr_map\n"
  },
  {
    "path": "python/nav/mibs/wlsx_systemext_mib.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom twisted.internet import defer\nfrom nav.smidumps import get_mib\nfrom nav.mibs.mibretriever import MibRetriever\n\n\nclass WLSXSystemextMib(MibRetriever):\n    \"\"\"WLSX-SYSTEMEXT-MIB (ArubaOS) MibRetriever\"\"\"\n\n    mib = get_mib('WLSX-SYSTEMEXT-MIB')\n\n    @defer.inlineCallbacks\n    def get_serial_number(self):\n        \"\"\"Tries to get a serial number from an Aruba Wi-Fi controller\"\"\"\n        serial = yield self.get_next(\"wlsxSysExtSerialNumber\")\n        if serial:\n            if isinstance(serial, bytes):\n                serial = serial.decode(\"utf-8\")\n            return serial\n"
  },
  {
    "path": "python/nav/mibs/xups_mib.py",
    "content": "#\n# Copyright 2008 - 2011 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A class for extracting sensors from EATON UPSes.\"\"\"\n\nfrom nav.smidumps import get_mib\nfrom nav.mibs.ups_mib import UpsMib\nfrom nav.models.manage import Sensor\n\n\nclass XupsMib(UpsMib):\n    \"\"\"A custom class for retrieving sensors from EATON UPSes.\"\"\"\n\n    mib = get_mib('XUPS-MIB')\n\n    sensor_columns = {\n        'xupsInputVoltage': {\n            'u_o_m': Sensor.UNIT_VOLTS_AC,\n        },\n        'xupsInputFrequency': {\n            'u_o_m': Sensor.UNIT_HERTZ,\n        },\n        'xupsOutputCurrent': {\n            'u_o_m': Sensor.UNIT_AMPERES,\n        },\n        'xupsEnvAmbientTemp': {\n            'u_o_m': Sensor.UNIT_CELSIUS,\n        },\n        'xupsBatCapacity': {\n            'u_o_m': Sensor.UNIT_PERCENT,\n        },\n        'xupsBatTimeRemaining': {\n            'u_o_m': Sensor.UNIT_SECONDS,\n        },\n    }\n"
  },
  {
    "path": "python/nav/models/__init__.py",
    "content": "#\n# Copyright (C) 2007, 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\n# from nav.bootstrap import bootstrap_django\n#\n# bootstrap_django(__file__)\n"
  },
  {
    "path": "python/nav/models/api.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Models for the NAV API\"\"\"\n\nfrom datetime import datetime\n\nfrom django.contrib.postgres.fields import HStoreField\nfrom django.db import models\nfrom django.urls import reverse\nfrom django.utils.text import Truncator\n\nfrom nav.models.fields import VarcharField\nfrom nav.models.profiles import Account\nfrom nav.web.jwtgen import is_active\n\n\nclass APIToken(models.Model):\n    \"\"\"APItokens are used for authenticating to the api\n\n    Endpoints may be connected to the token in which case the token also works\n    as an authorization token.\n    \"\"\"\n\n    permission_choices = (('read', 'Read'), ('write', 'Write'))\n    permission_help_text = (\n        \"Read means that this token can be used for reading only. Write means that \"\n        \"this token can be used to create new, update and delete objects as well as \"\n        \"reading.\"\n    )\n\n    token = VarcharField()\n    expires = models.DateTimeField()\n    created = models.DateTimeField(auto_now_add=True)\n    client = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='client',\n        related_name=\"api_tokens\",\n    )\n    scope = models.IntegerField(null=True, default=0)\n    comment = models.TextField(null=True, blank=True)\n    revoked = models.BooleanField(default=False)\n    last_used = models.DateTimeField(null=True)\n    endpoints = HStoreField(null=True, blank=True, default=dict)\n    permission = VarcharField(\n        choices=permission_choices, help_text=permission_help_text, default='read'\n    )\n\n    def __str__(self):\n        descr = f\" ({Truncator(self.comment).chars(25)})\" if self.comment else \"\"\n        return f\"token #{self.id}{descr}\"\n\n    def is_expired(self):\n        \"\"\"Check is I am expired\"\"\"\n        return self.expires < datetime.now()\n\n    def get_absolute_url(self):\n        \"\"\"Special method that Django uses as default url for an object\"\"\"\n        return reverse('useradmin-token_detail', args=[self.pk])\n\n    class Meta(object):\n        db_table = 'apitoken'\n\n\nclass JWTRefreshToken(models.Model):\n    \"\"\"Model representing a JWT refresh token. This model does not\n    contain the token itself, but a hash of the token that can be used\n    to validate the authenticity of the actual token when it is used to\n    generate an access token.\n    \"\"\"\n\n    permission_choices = (('read', 'Read'), ('write', 'Write'))\n    permission_help_text = (\n        \"Read means that this token can be used for reading only. Write means that \"\n        \"this token can be used to create new, update and delete objects as well as \"\n        \"reading.\"\n    )\n\n    name = VarcharField(unique=True)\n    description = models.TextField(null=True, blank=True)\n    expires = models.DateTimeField()\n    activates = models.DateTimeField()\n    created = models.DateTimeField(auto_now_add=True)\n    last_used = models.DateTimeField(null=True, blank=True)\n    revoked = models.BooleanField(default=False)\n    endpoints = HStoreField(null=True, blank=True, default=dict)\n    permission = VarcharField(\n        choices=permission_choices, help_text=permission_help_text, default='read'\n    )\n    hash = VarcharField()\n\n    def __str__(self):\n        return self.name\n\n    def is_active(self) -> bool:\n        \"\"\"Returns True if the token is active. A token is considered active when\n        `expires` is in the future and `activates` is in the past or matches\n        the current time.\n        \"\"\"\n        return is_active(self.expires.timestamp(), self.activates.timestamp())\n\n    def get_absolute_url(self):\n        \"\"\"Special method that Django uses as default url for an object\"\"\"\n        return reverse('useradmin-jwt_detail', args=[self.pk])\n\n    class Meta(object):\n        \"\"\"Meta class\"\"\"\n\n        db_table = 'jwtrefreshtoken'\n"
  },
  {
    "path": "python/nav/models/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass NavModelsConfig(AppConfig):\n    name = 'nav.models'\n    label = 'nav_models'\n    verbose_name = 'NAV models'\n"
  },
  {
    "path": "python/nav/models/arnold.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Model definitions for arnold\"\"\"\n\nfrom django.db import models\n\nfrom nav.models.fields import VarcharField\nfrom nav.models.manage import Interface\n\nSTATUSES = [\n    ('enabled', 'Enabled'),\n    ('disabled', 'Disabled'),\n    ('quarantined', 'Quarantined'),\n]\n\nDETENTION_TYPE_CHOICES = [('disable', 'Block'), ('quarantine', 'Quarantine')]\n\nKEEP_CLOSED_CHOICES = [('n', 'Open on move'), ('y', 'All closed')]\n\n\nclass Identity(models.Model):\n    \"\"\"\n    The table contains a listing for each computer,interface combo Arnold\n    has blocked.\n    \"\"\"\n\n    id = models.AutoField(db_column='identityid', primary_key=True)\n    mac = models.CharField(db_column='mac', max_length=17)\n    status = VarcharField(db_column='blocked_status', choices=STATUSES)\n    justification = models.ForeignKey(\n        'Justification',\n        on_delete=models.CASCADE,\n        db_column='blocked_reasonid',\n        related_name=\"identities\",\n    )\n    interface = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='swportid',\n        related_name=\"arnold_identities\",\n    )\n    ip = models.GenericIPAddressField(null=True, default='0.0.0.0')\n    dns = VarcharField(blank=True)\n    netbios = VarcharField(blank=True)\n    first_offence = models.DateTimeField(db_column='starttime', auto_now_add=True)\n    last_changed = models.DateTimeField(db_column='lastchanged', auto_now=True)\n    autoenable = models.DateTimeField(null=True)\n    autoenablestep = models.IntegerField(null=True, default=2)\n    mail = VarcharField(blank=True)\n    organization = models.ForeignKey(\n        'Organization',\n        on_delete=models.CASCADE,\n        db_column='orgid',\n        null=True,\n        related_name=\"arnold_identities\",\n    )\n    keep_closed = models.CharField(\n        db_column='determined', default='n', choices=KEEP_CLOSED_CHOICES, max_length=1\n    )\n    fromvlan = models.IntegerField(null=True)\n    tovlan = models.ForeignKey(\n        'QuarantineVlan',\n        on_delete=models.CASCADE,\n        db_column='tovlan',\n        to_field='vlan',\n        null=True,\n        default=None,\n        related_name=\"identities\",\n    )\n    # If the interface does not exist any longer in the database, the user\n    # needs a hint of what interface was blocked as information as ifname\n    # and netbox naturally no longer exists based on interfaceid.\n    # This fields solves this by storing the textual representation of the\n    # interface, that can be displayed if the situation occurs.\n    # The format is \"interface.ifname at interface.netbox.sysname\"\n    textual_interface = VarcharField(default='')\n\n    def __str__(self):\n        try:\n            interface = self.interface\n        except Interface.DoesNotExist:\n            interface = \"N/A\"\n        return \"%s/%s %s\" % (self.ip, self.mac, interface)\n\n    class Meta(object):\n        db_table = 'identity'\n        ordering = ('last_changed',)\n        verbose_name = 'identity'\n        verbose_name_plural = 'identities'\n        unique_together = ('mac', 'interface')\n\n\nclass Event(models.Model):\n    \"\"\"A class representing an action taken\"\"\"\n\n    id = models.AutoField(db_column='eventid', primary_key=True)\n    identity = models.ForeignKey(\n        'Identity',\n        on_delete=models.CASCADE,\n        db_column='identityid',\n        related_name=\"events\",\n    )\n    comment = VarcharField(db_column='event_comment', blank=True)\n    action = VarcharField(db_column='blocked_status', choices=STATUSES)\n    justification = models.ForeignKey(\n        'Justification',\n        on_delete=models.CASCADE,\n        db_column='blocked_reasonid',\n        related_name=\"events\",\n    )\n    event_time = models.DateTimeField(db_column='eventtime', auto_now_add=True)\n    autoenablestep = models.IntegerField(null=True)\n    executor = VarcharField(db_column='username')\n\n    def __str__(self):\n        return \"%s: %s\" % (self.action, self.event_time)\n\n    class Meta(object):\n        db_table = 'event'\n        ordering = ('event_time',)\n\n\nclass Justification(models.Model):\n    \"\"\"Represents the justification for an event\"\"\"\n\n    id = models.AutoField(db_column='blocked_reasonid', primary_key=True)\n    name = VarcharField()\n    description = VarcharField(db_column='comment', blank=True)\n\n    def __str__(self):\n        return self.name\n\n    class Meta(object):\n        db_table = 'blocked_reason'\n        ordering = ('name',)\n\n\nclass QuarantineVlan(models.Model):\n    \"\"\"A quarantine vlan is a vlan where offenders are placed\"\"\"\n\n    id = models.AutoField(db_column='quarantineid', primary_key=True)\n    vlan = models.IntegerField(unique=True)\n    description = VarcharField(blank=True)\n\n    def __str__(self):\n        return \"%s - %s\" % (self.vlan, self.description)\n\n    class Meta(object):\n        db_table = 'quarantine_vlans'\n        ordering = ('vlan',)\n\n\nclass DetentionProfile(models.Model):\n    \"\"\"A detention profile is a configuration used by an automatic detention\"\"\"\n\n    id = models.AutoField(db_column='blockid', primary_key=True)\n    name = VarcharField(db_column='blocktitle')\n    description = VarcharField(db_column='blockdesc', blank=True)\n    mailfile = VarcharField(blank=True)\n    justification = models.ForeignKey(\n        'Justification',\n        on_delete=models.CASCADE,\n        db_column='reasonid',\n        related_name=\"detention_profiles\",\n    )\n    keep_closed = models.CharField(\n        db_column='determined', default='n', choices=KEEP_CLOSED_CHOICES, max_length=1\n    )\n    incremental = models.CharField(default='n', max_length=1)\n    duration = models.IntegerField(db_column='blocktime')\n    active = models.CharField(default='n', max_length=1)\n    last_edited = models.DateTimeField(db_column='lastedited', auto_now_add=True)\n    edited_by = VarcharField(db_column='lastedituser')\n    inputfile = VarcharField(blank=True)\n    active_on_vlans = VarcharField(db_column='activeonvlans')\n    detention_type = VarcharField(\n        db_column='detainmenttype', choices=DETENTION_TYPE_CHOICES\n    )\n    quarantine_vlan = models.ForeignKey(\n        'QuarantineVlan',\n        on_delete=models.CASCADE,\n        db_column='quarantineid',\n        null=True,\n        related_name=\"detention_profiles\",\n    )\n\n    def __str__(self):\n        return self.name\n\n    class Meta(object):\n        db_table = 'block'\n        ordering = ('name',)\n"
  },
  {
    "path": "python/nav/models/cabling.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\nfrom django.db import models\n\nfrom nav.models.manage import Room, Interface\nfrom nav.models.fields import VarcharField\n\n\nclass Cabling(models.Model):\n    \"\"\"From NAV Wiki: The cabling table documents the cabling from the wiring\n    closet's jack number to the end user's room number.\"\"\"\n\n    id = models.AutoField(db_column='cablingid', primary_key=True)\n    room = models.ForeignKey(\n        Room,\n        on_delete=models.CASCADE,\n        db_column='roomid',\n        related_name=\"cabling_set\",\n    )\n    jack = VarcharField()\n    building = VarcharField(blank=True)\n    target_room = VarcharField(db_column='targetroom', blank=True)\n    description = VarcharField(db_column='descr', blank=True)\n    category = VarcharField(blank=True)\n\n    class Meta(object):\n        db_table = 'cabling'\n        unique_together = (('room', 'jack'),)\n\n    def __str__(self):\n        return 'jack %s, in room %s' % (self.jack, self.room.id)\n\n    def verbose(self):\n        \"\"\"Returns a more verbose description of this cable\"\"\"\n        return 'jack {}'.format(\n            \", \".join(\n                [\n                    x\n                    for x in [\n                        self.jack,\n                        self.building,\n                        self.target_room,\n                        self.description,\n                    ]\n                    if x\n                ]\n            )\n        )\n\n\nclass Patch(models.Model):\n    \"\"\"From NAV Wiki: The patch table documents the cross connect from switch\n    port to jack.\"\"\"\n\n    id = models.AutoField(db_column='patchid', primary_key=True)\n    interface = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name='patches',\n    )\n    cabling = models.ForeignKey(\n        Cabling,\n        on_delete=models.CASCADE,\n        db_column='cablingid',\n        related_name='patches',\n    )\n    split = VarcharField(default='no')\n\n    class Meta(object):\n        db_table = 'patch'\n        unique_together = (('interface', 'cabling'),)\n\n    def __str__(self):\n        return '%s, patched to %s' % (self.interface, self.cabling)\n"
  },
  {
    "path": "python/nav/models/event.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\nfrom collections import defaultdict\nimport logging\nimport datetime as dt\n\nfrom django.db import models, transaction\nfrom django.db.models import Q\nfrom django.core.validators import MaxValueValidator, MinValueValidator\n\nfrom nav.models.fields import VarcharField, DateTimeInfinityField, UNRESOLVED\n\n_logger = logging.getLogger(__name__)\n\n# Choices used in multiple models, \"imported\" into the models which use them\nSTATE_STATELESS = 'x'\nSTATE_START = 's'\nSTATE_END = 'e'\nSTATE_CHOICES = (\n    (STATE_STATELESS, 'stateless'),\n    (STATE_START, 'start'),\n    (STATE_END, 'end'),\n)\n\n\nclass Subsystem(models.Model):\n    \"\"\"From NAV Wiki: Defines the subsystems that post or receives an event.\"\"\"\n\n    name = VarcharField(primary_key=True)\n    description = VarcharField(db_column='descr')\n\n    class Meta(object):\n        db_table = 'subsystem'\n\n    def __str__(self):\n        return self.name\n\n\n#######################################################################\n### Event system\n\n\nclass VariableMapBase(object):\n    \"\"\"Descriptor for simplified dict-like access to the variable map tables\n    associated with EventQueue and AlertQueue.\n\n    NOTE: Updating the dictionary will not save it, the attribute must be\n    assigned a dict value for a db update to take place.\n\n    \"\"\"\n\n    def __init__(self):\n        self.cachename = \"_cached_variables\"\n\n    def __get__(self, obj, obj_type=None):\n        if obj is None:\n            return self\n\n        if hasattr(obj, self.cachename):\n            return getattr(obj, self.cachename)\n        elif obj.pk:\n            varmap = self._as_dict(obj)\n            setattr(obj, self.cachename, varmap)\n            return varmap\n        else:\n            return {}\n\n    def __set__(self, obj, vardict):\n        if obj is None:\n            raise AttributeError(\"can only be set on instances\")\n\n        if not hasattr(vardict, 'items'):\n            raise ValueError(\"value must be a dict\")\n\n        if obj.pk:\n            variables = obj.variables\n            if vardict:\n                self._delete_missing_variables(vardict, variables)\n\n            self._update_variables(obj, vardict)\n\n        setattr(obj, self.cachename, vardict)\n\n    def _as_dict(self, obj):\n        raise NotImplementedError\n\n    def _delete_missing_variables(self, vardict, variables):\n        raise NotImplementedError\n\n    def _update_variables(self, obj, vardict):\n        raise NotImplementedError\n\n\nclass VariableMap(VariableMapBase):\n    def _as_dict(self, obj):\n        variables = obj.variables\n        return {var.variable: var.value for var in variables.all()}\n\n    def _delete_missing_variables(self, vardict, variables):\n        removed = variables.exclude(variable__in=vardict.keys())\n        removed.delete()\n\n    def _update_variables(self, obj, vardict):\n        varmap = {var.variable: var for var in obj.variables.all()}\n\n        for key, value in vardict.items():\n            if key in varmap:\n                if varmap[key].value != value:\n                    varmap[key].value = value\n                    varmap[key].save()\n            else:\n                obj.variables.create(\n                    variable=key,\n                    value=value,\n                )\n\n\nclass StateVariableMap(VariableMapBase):\n    \"\"\"Descriptor for simplified dict-like access to the AlertHistory\n    stateful variable map.\n\n    NOTE: Updating the dictionary will not save it, the attribute must be\n    assigned a dict value for a db update to take place.\n\n    \"\"\"\n\n    def _as_dict(self, obj):\n        variables = obj.variables\n        varmap = defaultdict(dict)\n        for var in variables.all():\n            varmap[var.state][var.variable] = var.value\n        return dict(varmap)\n\n    def _delete_missing_variables(self, vardict, variables):\n        for state, _descr in STATE_CHOICES:\n            removed = variables.filter(state=state)\n            if state in vardict:\n                removed.exclude(variable__in=vardict[state].keys())\n            removed.delete()\n\n    def _update_variables(self, obj, vardict):\n        varmap = self._as_dict(obj)\n\n        for state, vars in vardict.items():\n            for key, value in vars.items():\n                if state in varmap and key in varmap[state]:\n                    if varmap[state][key].value != value:\n                        varmap[state][key] = value\n                        varmap[state][key].save()\n                else:\n                    obj.variables.create(\n                        state=state,\n                        variable=key,\n                        value=value,\n                    )\n\n\nclass UnknownEventSubject(object):\n    \"\"\"Representation of unknown alert/event subjects\"\"\"\n\n    def __init__(self, alert):\n        self._alert = alert\n        self.netbox = alert.netbox\n        self.subid = alert.subid\n\n    def get_absolute_url(self):\n        \"\"\"Returns a fall-back canonical URL to the netbox, if attached\"\"\"\n        if self.netbox:\n            return self.netbox.get_absolute_url()\n\n    def __str__(self):\n        descr = self._get_description_from_message()\n        if descr:\n            return descr\n        else:\n            fmt = \"{0} ({1})\"\n            return fmt.format(self.netbox or \"N/A\", self.subid)\n\n    def _get_description_from_message(self):\n        if not hasattr(self._alert, 'messages'):\n            return\n\n        m = self._alert.messages.filter(type='sms', language='en')\n        if m:\n            return m[0].message\n\n\nclass EventMixIn(object):\n    \"\"\"MixIn for methods common to multiple event/alert/alerthistory models\"\"\"\n\n    def get_key(self):\n        \"\"\"Returns an identifying key for this event.\n\n        The key is a tuple of identity attribute values and can be used as a\n        dictionary key to keep track of events that reference the same\n        problem.\n\n        \"\"\"\n        id_keys = ('netbox_id', 'subid', 'event_type_id')\n        values = (getattr(self, key) for key in id_keys)\n        return tuple(values)\n\n    # This dict encodes knowledge of what the subid attribute represents in\n    # various event types, in lieu of a more generic mechanism\n    SUBID_MAP = {\n        'linkState': 'Interface',\n        'aggregateLinkState': 'Interface',\n        'moduleState': 'Module',\n        'serviceState': 'Service',\n        'psuState': 'PowerSupplyOrFan',\n        'fanState': 'PowerSupplyOrFan',\n        'chassisState': 'NetboxEntity',\n        'bgpState': 'GatewayPeerSession',\n    }\n\n    def get_subject(self):\n        \"\"\"\n        Returns the subject of a given event/alert.\n\n        Sometimes, the subject is just a Netbox objects. Other times, it may\n        be some physical or logical subcomponents of a Netbox.\n\n        \"\"\"\n        subject = getattr(self, \"_cached_subject\", None)\n        subid = getattr(self, \"_cached_subid\", None)\n        if not subid or subid != self.subid:\n            subject = self._fetch_subject()\n            subid = self.subid\n            setattr(self, \"_cached_subject\", subject)\n            setattr(self, \"_cached_subid\", subid)\n\n        return subject\n\n    def _fetch_subject(self):\n        if self.subid:\n            from django.apps import apps\n\n            subid = self.subid\n            if self.event_type_id in self.SUBID_MAP:\n                model = apps.get_model('nav_models', self.SUBID_MAP[self.event_type_id])\n            elif (\n                self.event_type_id == 'maintenanceState'\n                and 'service' in self.varmap.get(EventQueue.STATE_START, {})\n            ):\n                model = apps.get_model('nav_models', 'Service')\n            elif self.event_type_id == 'thresholdState':\n                return ThresholdEvent(self)\n            else:\n                return UnknownEventSubject(self)\n\n            if model:\n                try:\n                    return model.objects.get(pk=subid)\n                except model.DoesNotExist:\n                    timestamp = getattr(self, \"start_time\", None) or getattr(\n                        self, \"time\", None\n                    )\n                    _logger.debug(\n                        \"alert %r subid %s points to non-existent %s,\"\n                        \" maybe it was deleted after %s\",\n                        self,\n                        subid,\n                        model,\n                        timestamp,\n                    )\n                    return UnknownEventSubject(self)\n\n        # catch-all\n        return self.netbox or self.device or UnknownEventSubject(self)\n\n\nclass ThresholdEvent(object):\n    \"\"\"\n    Magic class to act as a threshold event subject that produces useful\n    descriptions and relations to the event.\n    \"\"\"\n\n    def __init__(self, event):\n        from django.apps import apps\n\n        self.event = event\n        try:\n            ruleid, self.metric = event.subid.split(':', 1)\n        except ValueError:\n            ruleid = event.subid\n            self.metric = None\n\n        klass = apps.get_model('nav_models', 'ThresholdRule')\n        try:\n            self.rule = klass.objects.get(pk=ruleid)\n        except (klass.DoesNotExist, ValueError):\n            self.rule = None\n\n        if self.metric:\n            from nav.metrics.lookup import lookup\n\n            self.subject = lookup(self.metric)\n        else:\n            self.subject = None\n\n    def __str__(self):\n        subject = self.subject or self.metric\n        if self.rule:\n            descr = self.rule.description or self.rule.alert\n        else:\n            descr = 'Unknown rule'\n\n        if subject:\n            return \"{} ({})\".format(subject, descr)\n        else:\n            return \"{} ({})\".format(descr, subject)\n\n    def get_absolute_url(self):\n        \"\"\"Returns a URL to the metric subject, if one was found\"\"\"\n        if self.subject:\n            if hasattr(self.subject, 'get_absolute_url'):\n                return self.subject.get_absolute_url()\n            elif hasattr(self.subject, 'netbox') and hasattr(\n                self.subject.netbox, 'get_absolute_url'\n            ):\n                return self.subject.netbox.get_absolute_url()\n\n\nclass EventQueue(models.Model, EventMixIn):\n    \"\"\"From NAV Wiki: The event queue. Additional data in eventqvar. Different\n    subsystem (specified in source) post events on the event queue. Normally\n    event engine is the target and will take the event off the event queue and\n    process it.  getDeviceData are in some cases the target.\"\"\"\n\n    STATE_STATELESS = STATE_STATELESS\n    STATE_START = STATE_START\n    STATE_END = STATE_END\n    STATE_CHOICES = STATE_CHOICES\n\n    id = models.AutoField(db_column='eventqid', primary_key=True)\n    source = models.ForeignKey(\n        'Subsystem',\n        on_delete=models.CASCADE,\n        db_column='source',\n        related_name='source_of_events',\n    )\n    target = models.ForeignKey(\n        'Subsystem',\n        on_delete=models.CASCADE,\n        db_column='target',\n        related_name='target_of_events',\n    )\n    device = models.ForeignKey(\n        'nav_models.Device',\n        on_delete=models.CASCADE,\n        db_column='deviceid',\n        null=True,\n        related_name=\"events\",\n    )\n    netbox = models.ForeignKey(\n        'nav_models.Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=True,\n        related_name=\"events\",\n    )\n    subid = VarcharField(default='')\n    time = models.DateTimeField(default=dt.datetime.now)\n    event_type = models.ForeignKey(\n        'EventType',\n        on_delete=models.CASCADE,\n        db_column='eventtypeid',\n        related_name=\"events\",\n    )\n    state = models.CharField(\n        max_length=1, choices=STATE_CHOICES, default=STATE_STATELESS\n    )\n    value = models.IntegerField(default=100)\n    severity = models.IntegerField(\n        default=3,\n        validators=[MaxValueValidator(5), MinValueValidator(1)],\n    )\n\n    varmap = VariableMap()\n\n    class Meta(object):\n        db_table = 'eventq'\n\n    def __repr__(self):\n        return \"<EventQueue: %s>\" % \", \".join(\n            \"%s=%r\" % (attr, getattr(self, attr))\n            for attr in (\n                'id',\n                'event_type_id',\n                'source_id',\n                'target_id',\n                'netbox',\n                'subid',\n                'state',\n                'time',\n            )\n        )\n\n    def __str__(self):\n        string = (\n            \"{self.event_type} {state} event for {self.netbox} \"\n            \"(subid={self.subid}) from {self.source} to {self.target} \"\n            \"at {self.time}\"\n        )\n        return string.format(self=self, state=dict(self.STATE_CHOICES)[self.state])\n\n    @transaction.atomic\n    def save(self, *args, **kwargs):\n        new_object = self.pk is None\n        super(EventQueue, self).save(*args, **kwargs)\n        if new_object:\n            assert self.pk\n            self.varmap = self.varmap\n\n\nclass EventType(models.Model):\n    \"\"\"From NAV Wiki: Defines event types.\"\"\"\n\n    STATEFUL_TRUE = 'y'\n    STATEFUL_FALSE = 'n'\n    STATEFUL_CHOICES = (\n        (STATEFUL_TRUE, 'stateful'),\n        (STATEFUL_FALSE, 'stateless'),\n    )\n\n    id = models.CharField(db_column='eventtypeid', max_length=32, primary_key=True)\n    description = VarcharField(db_column='eventtypedesc')\n    stateful = models.CharField(max_length=1, choices=STATEFUL_CHOICES)\n\n    class Meta(object):\n        db_table = 'eventtype'\n\n    def __str__(self):\n        return self.id\n\n\nclass EventQueueVar(models.Model):\n    \"\"\"From NAV Wiki: Defines additional (key,value) tuples that follow\n    events.\"\"\"\n\n    event_queue = models.ForeignKey(\n        'EventQueue',\n        on_delete=models.CASCADE,\n        db_column='eventqid',\n        related_name='variables',\n    )\n    variable = VarcharField(db_column='var')\n    value = models.TextField(db_column='val')\n\n    class Meta(object):\n        db_table = 'eventqvar'\n        unique_together = (('event_queue', 'variable'),)\n\n    def __str__(self):\n        return '%s=%s' % (self.variable, self.value)\n\n\n#######################################################################\n### Alert system\n\n\nclass AlertQueue(models.Model, EventMixIn):\n    \"\"\"From NAV Wiki: The alert queue. Additional data in alertqvar and\n    alertmsg. Event engine posts alerts on the alert queue (and in addition on\n    the alerthist table). Alert engine will process the data on the alert queue\n    and send alerts to users based on their alert profiles. When all signed up\n    users have received the alert, alert engine will delete the alert from\n    alertq (but not from alert history).\"\"\"\n\n    STATE_STATELESS = STATE_STATELESS\n    STATE_START = STATE_START\n    STATE_END = STATE_END\n    STATE_CHOICES = STATE_CHOICES\n\n    id = models.AutoField(db_column='alertqid', primary_key=True)\n    source = models.ForeignKey(\n        'Subsystem',\n        on_delete=models.CASCADE,\n        db_column='source',\n        related_name=\"alerts\",\n    )\n    device = models.ForeignKey(\n        'nav_models.Device',\n        on_delete=models.CASCADE,\n        db_column='deviceid',\n        null=True,\n        related_name=\"alerts\",\n    )\n    netbox = models.ForeignKey(\n        'nav_models.Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=True,\n        related_name=\"alerts\",\n    )\n    subid = VarcharField(default='')\n    time = models.DateTimeField()\n    event_type = models.ForeignKey(\n        'EventType',\n        on_delete=models.CASCADE,\n        db_column='eventtypeid',\n        related_name=\"alerts\",\n    )\n    alert_type = models.ForeignKey(\n        'AlertType',\n        on_delete=models.CASCADE,\n        db_column='alerttypeid',\n        null=True,\n        related_name=\"alerts\",\n    )\n    state = models.CharField(\n        max_length=1, choices=STATE_CHOICES, default=STATE_STATELESS\n    )\n    value = models.IntegerField()\n    severity = models.IntegerField(\n        default=3,\n        validators=[MaxValueValidator(5), MinValueValidator(1)],\n    )\n\n    history = models.ForeignKey(\n        'AlertHistory',\n        on_delete=models.CASCADE,\n        null=True,\n        blank=True,\n        db_column='alerthistid',\n        related_name=\"alerts\",\n    )\n\n    varmap = VariableMap()\n\n    class Meta(object):\n        db_table = 'alertq'\n\n    def __str__(self):\n        return 'Source %s, state %s, severity %d' % (\n            self.source,\n            self.get_state_display(),\n            self.severity,\n        )\n\n    @transaction.atomic\n    def save(self, *args, **kwargs):\n        new_object = self.pk is None\n        super(AlertQueue, self).save(*args, **kwargs)\n        if new_object:\n            assert self.pk\n            self.varmap = self.varmap\n\n\nclass AlertType(models.Model):\n    \"\"\"From NAV Wiki: Defines the alert types. An event type may have many alert\n    types.\"\"\"\n\n    id = models.AutoField(db_column='alerttypeid', primary_key=True)\n    event_type = models.ForeignKey(\n        'EventType',\n        on_delete=models.CASCADE,\n        db_column='eventtypeid',\n        related_name=\"alert_types\",\n    )\n    name = VarcharField(db_column='alerttype')\n    description = VarcharField(db_column='alerttypedesc')\n\n    class Meta(object):\n        db_table = 'alerttype'\n        unique_together = (('event_type', 'name'),)\n\n    def __str__(self):\n        return '%s, of event type %s' % (self.name, self.event_type)\n\n\nclass AlertQueueMessage(models.Model):\n    \"\"\"From NAV Wiki: Event engine will, based on alertmsg.conf, preformat the\n    alarm messages, one message for each configured alert channel (email, sms),\n    one message for each configured language. The data are stored in the\n    alertmsg table.\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    alert_queue = models.ForeignKey(\n        'AlertQueue',\n        on_delete=models.CASCADE,\n        db_column='alertqid',\n        related_name='messages',\n    )\n    type = VarcharField(db_column='msgtype')\n    language = VarcharField()\n    message = models.TextField(db_column='msg')\n\n    class Meta(object):\n        db_table = 'alertqmsg'\n        unique_together = (('alert_queue', 'type', 'language'),)\n\n    def __str__(self):\n        return '%s message in language %s' % (self.type, self.language)\n\n\nclass AlertQueueVariable(models.Model):\n    \"\"\"From NAV Wiki: Defines additional (key,value) tuples that follow alert.\n    Note: the eventqvar tuples are passed along to the alertqvar table so that\n    the variables may be used in alert profiles.\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    alert_queue = models.ForeignKey(\n        'AlertQueue',\n        on_delete=models.CASCADE,\n        db_column='alertqid',\n        related_name='variables',\n    )\n    variable = VarcharField(db_column='var')\n    value = models.TextField(db_column='val')\n\n    class Meta(object):\n        db_table = 'alertqvar'\n        unique_together = (('alert_queue', 'variable'),)\n\n    def __str__(self):\n        return '%s=%s' % (self.variable, self.value)\n\n\nclass AlertHistoryQuerySet(models.QuerySet):\n    \"\"\"Custom QuerySet for the AlertHistory model\"\"\"\n\n    def unresolved(self, event_type_id=None):\n        \"\"\"\n        Gets only unresolved entries.\n\n        :param event_type_id: An optional event type id string to filter on\n        :rtype: django.db.models.query.QuerySet\n        \"\"\"\n        if event_type_id:\n            filtr = UNRESOLVED & Q(event_type__id=event_type_id)\n        else:\n            filtr = UNRESOLVED\n        return self.filter(filtr)\n\n\nclass AlertHistory(models.Model, EventMixIn):\n    \"\"\"From NAV Wiki: The alert history. Simular to the alert queue with one\n    important distinction; alert history stores stateful events as one row,\n    with the start and end time of the event.\"\"\"\n\n    objects = AlertHistoryQuerySet.as_manager()\n\n    id = models.AutoField(db_column='alerthistid', primary_key=True)\n    source = models.ForeignKey(\n        'Subsystem',\n        on_delete=models.CASCADE,\n        db_column='source',\n        related_name=\"alert_history_set\",\n    )\n    device = models.ForeignKey(\n        'nav_models.Device',\n        on_delete=models.CASCADE,\n        db_column='deviceid',\n        null=True,\n        related_name=\"alert_history_set\",\n    )\n    netbox = models.ForeignKey(\n        'nav_models.Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=True,\n        related_name=\"alert_history_set\",\n    )\n    subid = VarcharField(default='')\n    start_time = models.DateTimeField()\n    end_time = DateTimeInfinityField(null=True)\n    event_type = models.ForeignKey(\n        'EventType',\n        on_delete=models.CASCADE,\n        db_column='eventtypeid',\n        related_name=\"alert_history_set\",\n    )\n    alert_type = models.ForeignKey(\n        'AlertType',\n        on_delete=models.CASCADE,\n        db_column='alerttypeid',\n        null=True,\n        related_name=\"alert_history_set\",\n    )\n    value = models.IntegerField()\n    severity = models.IntegerField(\n        default=3,\n        validators=[MaxValueValidator(5), MinValueValidator(1)],\n    )\n\n    varmap = StateVariableMap()\n\n    class Meta(object):\n        db_table = 'alerthist'\n\n    def __str__(self):\n        return 'Id %s Source %s, severity %d' % (self.id, self.source, self.severity)\n\n    def is_stateful(self):\n        \"\"\"Returns true if the alert is stateful.\"\"\"\n\n        return self.end_time is not None\n\n    def is_open(self):\n        \"\"\"Returns true if stateful and open.\"\"\"\n\n        return self.is_stateful() and self.end_time == dt.datetime.max\n\n    def get_downtime(self):\n        \"\"\"Returns the difference between start_time and end_time, the current\n        downtime if the alert is still open, and None if the alert is\n        stateless.\"\"\"\n\n        if self.is_stateful():\n            if self.is_open():\n                # Open alert\n                return dt.datetime.now() - self.start_time\n            else:\n                # Closed alert\n                return self.end_time - self.start_time\n        else:\n            # Stateless alert\n            return None\n\n    def is_acknowledged(self):\n        \"\"\"\n        Returns an Acknowledgement instance if this alert has been\n        acknowledged, otherwise None.\n        \"\"\"\n        try:\n            return self.acknowledgement\n        except Acknowledgement.DoesNotExist:\n            return\n\n    def acknowledge(self, account, comment):\n        \"\"\"\n        Acknowledges this alert using a given account and comment.\n\n        Any pre-existing acknowledgement will be overwritten.\n        \"\"\"\n        try:\n            ack = self.acknowledgement\n        except Acknowledgement.DoesNotExist:\n            ack = Acknowledgement(alert=self, account=account, comment=comment)\n        else:\n            ack.account = account\n            ack.comment = comment\n            ack.date = dt.datetime.now()\n\n        ack.save()\n\n    @transaction.atomic\n    def save(self, *args, **kwargs):\n        new_object = self.pk is None\n        super(AlertHistory, self).save(*args, **kwargs)\n        if new_object:\n            assert self.pk\n            self.varmap = self.varmap\n\n\nclass AlertHistoryMessage(models.Model):\n    \"\"\"From NAV Wiki: To have a history of the formatted messages too, they are\n    stored in alerthistmsg.\"\"\"\n\n    STATE_STATELESS = STATE_STATELESS\n    STATE_START = STATE_START\n    STATE_END = STATE_END\n    STATE_CHOICES = STATE_CHOICES\n\n    id = models.AutoField(primary_key=True)\n    alert_history = models.ForeignKey(\n        'AlertHistory',\n        on_delete=models.CASCADE,\n        db_column='alerthistid',\n        related_name='messages',\n    )\n    state = models.CharField(\n        max_length=1, choices=STATE_CHOICES, default=STATE_STATELESS\n    )\n    type = VarcharField(db_column='msgtype')\n    language = VarcharField()\n    message = models.TextField(db_column='msg')\n\n    class Meta(object):\n        db_table = 'alerthistmsg'\n        unique_together = (('alert_history', 'state', 'type', 'language'),)\n\n    def __str__(self):\n        return '%s message in language %s' % (self.type, self.language)\n\n\nclass AlertHistoryVariable(models.Model):\n    \"\"\"From NAV Wiki: Defines additional (key,value) tuples that follow the\n    alerthist record.\"\"\"\n\n    STATE_STATELESS = STATE_STATELESS\n    STATE_START = STATE_START\n    STATE_END = STATE_END\n    STATE_CHOICES = STATE_CHOICES\n\n    id = models.AutoField(primary_key=True)\n    alert_history = models.ForeignKey(\n        'AlertHistory',\n        on_delete=models.CASCADE,\n        db_column='alerthistid',\n        related_name='variables',\n    )\n    state = models.CharField(\n        max_length=1, choices=STATE_CHOICES, default=STATE_STATELESS\n    )\n    variable = VarcharField(db_column='var')\n    value = models.TextField(db_column='val')\n\n    class Meta(object):\n        db_table = 'alerthistvar'\n        unique_together = (('alert_history', 'state', 'variable'),)\n\n    def __str__(self):\n        return '%s=%s' % (self.variable, self.value)\n\n\nclass Acknowledgement(models.Model):\n    \"\"\"Alert acknowledgements\"\"\"\n\n    alert = models.OneToOneField(\n        'AlertHistory',\n        on_delete=models.CASCADE,\n        null=False,\n        blank=False,\n        primary_key=True,\n        related_name=\"acknowledgement\",\n    )\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        null=False,\n        blank=False,\n        related_name=\"acknowledgements\",\n    )\n    comment = VarcharField(blank=True)\n    date = models.DateTimeField(null=False, default=dt.datetime.now)\n\n    class Meta(object):\n        db_table = 'alerthist_ack'\n\n    def __str__(self):\n        return \"%r acknowledged by %s at %s\" % (self.alert, self.account, self.date)\n"
  },
  {
    "path": "python/nav/models/fields.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport pickle\nimport json\nfrom datetime import datetime\nfrom decimal import Decimal\nfrom typing import Optional\n\nfrom django import forms\nfrom django.db import models\nfrom django.db.models import signals\nfrom django.db.models.fields.mixins import FieldCacheMixin\nfrom django.core import exceptions\nfrom django.db.models import Q\nfrom django.apps import apps\n\nfrom nav.util import is_valid_cidr, is_valid_ip\nfrom nav.django import validators, forms as navforms\n\nINFINITY = datetime.max\nUNRESOLVED = Q(end_time__gte=INFINITY)\n\n\nclass DateTimeInfinityField(models.DateTimeField):\n    def get_db_prep_value(self, value, connection, prepared=False):\n        if value == datetime.max:\n            value = 'infinity'\n        elif value == datetime.min:\n            value = '-infinity'\n        else:\n            return super(DateTimeInfinityField, self).get_db_prep_value(\n                value, connection, prepared=prepared\n            )\n        return connection.ops.adapt_datetimefield_value(value)\n\n\nclass VarcharField(models.TextField):\n    def db_type(self, connection):\n        return 'varchar'\n\n    def formfield(self, **kwargs):\n        defaults = {\n            'widget': forms.TextInput,\n        }\n        defaults.update(kwargs)\n        return super(VarcharField, self).formfield(**defaults)\n\n\nclass DictAsJsonField(models.TextField):\n    \"\"\"Serializes value to and from json. Has a fallback to pickle for\n    historical reasons\"\"\"\n\n    description = \"Field for storing json structure\"\n\n    def db_type(self, connection):\n        return 'varchar'\n\n    def from_db_value(self, value, expression, connection):\n        return self.to_python(value)\n\n    def to_python(self, value):\n        if value:\n            if isinstance(value, dict):\n                return value\n            try:\n                # Needs str\n                return json.loads(\n                    str(value, encoding=\"utf-8\") if isinstance(value, bytes) else value\n                )\n            except ValueError:\n                try:\n                    # Needs bytes\n                    return pickle.loads(\n                        bytes(value, encoding=\"utf-8\")\n                        if isinstance(value, str)\n                        else value\n                    )\n                except ValueError:\n                    return value\n        return {}\n\n    def get_prep_value(self, value):\n        if value:\n            return json.dumps(value)\n\n\nclass CIDRField(VarcharField):\n    def to_python(self, value):\n        \"\"\"Verifies that the value is a string with a valid CIDR IP address\"\"\"\n        if value:\n            if isinstance(value, bytes):\n                value = str(value, encoding='utf-8')\n            if not is_valid_cidr(value) and not is_valid_ip(value):\n                raise exceptions.ValidationError(\"Value must be a valid CIDR address\")\n        return value\n\n\nclass PointField(models.CharField):\n    def __init__(self, *args, **kwargs):\n        kwargs['max_length'] = 100\n        super(PointField, self).__init__(*args, **kwargs)\n\n    def db_type(self, connection):\n        return 'point'\n\n    def from_db_value(self, value, expression, connection):\n        return self.to_python(value)\n\n    def to_python(self, value):\n        if not value or isinstance(value, tuple):\n            return value\n        if isinstance(value, str) and validators.is_valid_point_string(value):\n            noparens = value.removeprefix(\"(\").removesuffix(\")\")\n            latitude, longitude = noparens.split(',')\n            return (Decimal(latitude.strip()), Decimal(longitude.strip()))\n        raise exceptions.ValidationError(\"This value must be a point-string.\")\n\n    def get_db_prep_value(self, value, connection, prepared=False):\n        if value is None:\n            return None\n        if isinstance(value, tuple):\n            return '(%s,%s)' % value\n\n    def formfield(self, **kwargs):\n        defaults = {'form_class': navforms.PointField}\n        defaults.update(kwargs)\n        return super(PointField, self).formfield(**defaults)\n\n\nclass LegacyGenericForeignKey(FieldCacheMixin):\n    \"\"\"Generic foreign key for legacy NAV database.\n\n    Some legacy tables in NAV have generic foreign keys that look very much\n    like Django's generic foreign keys, except the foreign table name is\n    stored directly in the field name.\n\n    \"\"\"\n\n    # Field flags\n    auto_created = False\n    concrete = False\n    editable = False\n    hidden = False\n\n    is_relation = True\n    many_to_many = False\n    many_to_one = True\n    one_to_one = False\n    related_model = None\n    remote_field = None\n\n    def __init__(self, model_name_field, model_fk_field, for_concrete_model=True):\n        self.mn_field = model_name_field\n        self.fk_field = model_fk_field\n        self.one_to_many = True\n        self.editable = False\n        self.for_concrete_model = for_concrete_model\n\n    def __str__(self):\n        modelname = getattr(self, 'mn_field')\n        fk = getattr(self, 'fk_field')\n        return '{}={}'.format(modelname, fk)\n\n    def contribute_to_class(self, cls, name):\n        \"\"\"Add things to the model class using this descriptor\"\"\"\n        self.name = name\n        self.model = cls\n        cls._meta.private_fields.append(self)\n\n        if not cls._meta.abstract:\n            signals.pre_init.connect(self.instance_pre_init, sender=cls)\n\n        setattr(cls, name, self)\n\n    def get_cache_name(self):\n        return self.name\n\n    def instance_pre_init(self, signal, sender, args, kwargs, **_kwargs):\n        \"\"\"\n        Handles initializing an object with the generic FK instead of\n        content-type/object-id fields.\n        \"\"\"\n        if self.name in kwargs:\n            value = kwargs.pop(self.name)\n            if value is not None:\n                kwargs[self.mn_field] = self.get_model_name(value)\n                kwargs[self.fk_field] = value._get_pk_val()\n            else:\n                kwargs[self.mn_field] = None\n                kwargs[self.fk_field] = None\n\n    def __get__(self, instance, instance_type=None):\n        if instance is None:\n            return self\n\n        rel_obj = self.get_cached_value(instance, default=None)\n\n        field = self.model._meta.get_field(self.mn_field)\n        table_name = getattr(instance, field.get_attname(), None)\n        rel_model = self.get_model_class(table_name)\n        if rel_model:\n            try:\n                rel_obj = rel_model.objects.get(id=getattr(instance, self.fk_field))\n            except exceptions.ObjectDoesNotExist:\n                pass\n        self.set_cached_value(instance, rel_obj)\n        return rel_obj\n\n    def __set__(self, instance, value):\n        if instance is None:\n            raise AttributeError(\"%s must be accessed via instance\" % self.name)\n\n        table_name = None\n        fkey = None\n        if value is not None:\n            table_name = self.get_model_name(value)\n            fkey = value._get_pk_val()\n\n        setattr(instance, self.mn_field, table_name)\n        setattr(instance, self.fk_field, fkey)\n        self.set_cached_value(instance, value)\n\n    @staticmethod\n    def get_model_name(obj) -> str:\n        return obj._meta.db_table\n\n    @staticmethod\n    def get_model_class(table_name) -> Optional[models.Model]:\n        \"\"\"Returns a Model class based on a database table name\"\"\"\n        classmap = {model._meta.db_table: model for model in apps.get_models()}\n        if table_name in classmap:\n            return classmap[table_name]\n"
  },
  {
    "path": "python/nav/models/images.py",
    "content": "\"\"\"Models for uploaded image information\"\"\"\n\nimport os\nfrom os.path import exists, join\n\nfrom django.conf import settings\nfrom django.db import models\n\nfrom nav.models.profiles import Account\nfrom nav.models.manage import Location, Room\nfrom nav.models.fields import VarcharField\n\n\nclass Image(models.Model):\n    \"\"\"Model representing an uploaded image\"\"\"\n\n    id = models.AutoField(db_column='imageid', primary_key=True)\n    room = models.ForeignKey(\n        Room,\n        on_delete=models.CASCADE,\n        db_column='roomid',\n        null=True,\n        related_name=\"images\",\n    )\n    location = models.ForeignKey(\n        Location,\n        on_delete=models.CASCADE,\n        db_column='locationid',\n        null=True,\n        related_name=\"images\",\n    )\n    title = VarcharField()\n    path = VarcharField()\n    name = VarcharField()\n    created = models.DateTimeField(auto_now_add=True)\n    uploader = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='uploader',\n        related_name=\"images\",\n    )\n    priority = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'image'\n        ordering = ['priority']\n\n    def _check_image_existance(self):\n        return exists(self.fullpath)\n\n    def _check_thumb_existance(self):\n        \"\"\"Relies on static thumb directory\"\"\"\n        return exists(self.thumbpath)\n\n    def _check_readable(self):\n        return os.access(self.fullpath, os.R_OK)\n\n    def _get_url(self):\n        return '/uploads/images/{itype}/{path}/{name}'.format(\n            itype=self._type(), path=self.path, name=self.name\n        )\n\n    def _get_thumb_url(self):\n        return '/uploads/images/{itype}/{path}/thumbs/{name}'.format(\n            itype=self._type(), path=self.path, name=self.name\n        )\n\n    def _type(self):\n        if self.room:\n            return 'rooms'\n        return 'locations'\n\n    def _get_basepath(self):\n        return join(settings.UPLOAD_DIR, 'images', self._type())\n\n    def _get_fullpath(self):\n        return join(self.basepath, self.path, self.name)\n\n    def _get_thumb_path(self):\n        return join(self.basepath, self.path, 'thumbs', self.name)\n\n    image_exists = property(_check_image_existance)\n    thumb_exists = property(_check_thumb_existance)\n    is_readable = property(_check_readable)\n    url = property(_get_url)\n    thumb_url = property(_get_thumb_url)\n    basepath = property(_get_basepath)\n    fullpath = property(_get_fullpath)\n    thumbpath = property(_get_thumb_path)\n"
  },
  {
    "path": "python/nav/models/logger.py",
    "content": "#\n# Copyright (C) 2007-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nDjango ORM wrapper for the NAV logger database\n\"\"\"\n\nfrom django.db import models\n\nfrom nav.models.fields import VarcharField\n\n\nclass LoggerCategory(models.Model):\n    \"\"\"\n    Model for the logger.category-table\n    \"\"\"\n\n    category = VarcharField(db_column='category', unique=True, primary_key=True)\n\n    def __str__(self):\n        return self.category\n\n    class Meta(object):\n        db_table = '\"logger\".\"category\"'\n\n\nclass Origin(models.Model):\n    \"\"\"\n    Model for the logger.origin-table\n    \"\"\"\n\n    origin = models.AutoField(db_column='origin', primary_key=True)\n    name = VarcharField(db_column='name')\n    category = models.ForeignKey(\n        LoggerCategory,\n        on_delete=models.CASCADE,\n        db_column='category',\n        related_name=\"origins\",\n    )\n\n    def __str__(self):\n        return self.name\n\n    class Meta(object):\n        db_table = '\"logger\".\"origin\"'\n\n\nclass Priority(models.Model):\n    \"\"\"\n    Model for the logger.priority-table\n    \"\"\"\n\n    priority = models.AutoField(db_column='priority', primary_key=True)\n    keyword = VarcharField(db_column='keyword', unique=True)\n    description = VarcharField(db_column='description')\n\n    def __str__(self):\n        return self.keyword\n\n    class Meta(object):\n        db_table = '\"logger\".\"priority\"'\n\n\nclass LogMessageType(models.Model):\n    \"\"\"\n    Model for the logger.log_message_type-table\n    \"\"\"\n\n    type = models.AutoField(db_column='type', primary_key=True)\n    priority = models.ForeignKey(\n        Priority,\n        on_delete=models.CASCADE,\n        db_column='priority',\n        related_name=\"log_message_types\",\n    )\n    facility = VarcharField(db_column='facility')\n    mnemonic = VarcharField(db_column='mnemonic')\n\n    def __str__(self):\n        return \"{0}-{1}-{2}\".format(self.facility, self.priority, self.mnemonic).upper()\n\n    class Meta(object):\n        db_table = '\"logger\".\"log_message_type\"'\n        unique_together = (('priority', 'facility', 'mnemonic'),)\n\n\nclass LogMessage(models.Model):\n    \"\"\"\n    Model for the logger.log_message-table\n    \"\"\"\n\n    id = models.AutoField(db_column='id', primary_key=True)\n    time = models.DateTimeField(db_column='time', auto_now=True)\n    origin = models.ForeignKey(\n        Origin,\n        on_delete=models.CASCADE,\n        db_column='origin',\n        related_name=\"log_messages\",\n    )\n    newpriority = models.ForeignKey(\n        Priority,\n        on_delete=models.CASCADE,\n        db_column='newpriority',\n        related_name=\"log_messages\",\n    )\n    type = models.ForeignKey(\n        LogMessageType,\n        on_delete=models.CASCADE,\n        db_column='type',\n        related_name=\"log_messages\",\n    )\n    message = VarcharField(db_column='message')\n\n    class Meta(object):\n        db_table = '\"logger\".\"log_message\"'\n\n\nclass ErrorError(models.Model):\n    \"\"\"\n    Model for the logger.errorerror-table\n    \"\"\"\n\n    id = models.AutoField(db_column='id', primary_key=True)\n    message = VarcharField(db_column='message')\n\n    class Meta(object):\n        db_table = '\"logger\".\"errorerror\"'\n\n\nclass MessageView(models.Model):\n    \"\"\"\n    This is actually a class for a database-view 'message_view'.\n\n    Do not change attributes unless You know what You are doing!\n    Check: https://docs.djangoproject.com/en/dev/ref/models/options/\n    \"\"\"\n\n    origin = models.ForeignKey(\n        Origin,\n        on_delete=models.CASCADE,\n        db_column='origin',\n        primary_key=True,\n        related_name=\"message_views\",\n    )\n    type = models.ForeignKey(\n        LogMessageType,\n        on_delete=models.CASCADE,\n        db_column='type',\n        related_name=\"message_views\",\n    )\n    newpriority = models.ForeignKey(\n        Priority,\n        on_delete=models.CASCADE,\n        db_column='newpriority',\n        related_name=\"message_views\",\n    )\n    category = models.ForeignKey(\n        LoggerCategory,\n        on_delete=models.CASCADE,\n        db_column='category',\n        related_name=\"message_views\",\n    )\n    time = models.DateTimeField(db_column='time')\n\n    class Meta(object):\n        db_table = '\"logger\".\"message_view\"'\n        # Models for database-views must set this option.\n        managed = False\n"
  },
  {
    "path": "python/nav/models/manage.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\n# pylint: disable=R0903\n\nimport base64\nimport datetime as dt\nimport pickle\nfrom functools import partial\nfrom itertools import count, groupby\nimport logging\nimport math\nimport re\nfrom typing import Optional\n\nimport IPy\nfrom django.conf import settings\nfrom django.contrib.postgres.fields import HStoreField\nfrom django.core.exceptions import ValidationError\nfrom django.db import models\nfrom django.db.models import JSONField, Q\nfrom django.db.models.expressions import RawSQL\nfrom django.urls import reverse\n\nfrom nav import util\nfrom nav.bitvector import BitVector\nfrom nav.metrics.data import get_netboxes_availability\nfrom nav.metrics.graphs import get_simple_graph_url, Graph\nfrom nav.metrics.names import get_all_leaves_below\nfrom nav.metrics.templates import (\n    metric_prefix_for_interface,\n    metric_prefix_for_ports,\n    metric_prefix_for_device,\n    metric_prefix_for_sensors,\n    metric_path_for_sensor,\n    metric_path_for_prefix,\n    metric_path_for_power,\n)\nimport nav.natsort\nfrom nav.models.fields import DateTimeInfinityField, VarcharField, PointField\nfrom nav.models.fields import CIDRField\nimport nav.models.event\nfrom nav.oids import get_enterprise_id\nimport nav.dhcpstats.common\n\n\n_logger = logging.getLogger(__name__)\n\n#######################################################################\n### Netbox-related models\n\n\nclass UpsManager(models.Manager):\n    \"\"\"Manager for finding UPS netboxes\"\"\"\n\n    def get_queryset(self):\n        \"\"\"Filter out UPSes\"\"\"\n        return (\n            super(UpsManager, self)\n            .get_queryset()\n            .filter(category='POWER', sensors__internal_name__startswith='ups')\n            .distinct()\n        )\n\n\nclass NetboxQuerySet(models.QuerySet):\n    chassis_serialnum_sql = (\n        \"SELECT device.serial FROM device \"\n        \"JOIN netboxentity ne USING (deviceid) \"\n        \"WHERE ne.netboxid=netbox.netboxid AND ne.physical_class=%s \"\n        \"ORDER BY index ASC \"\n        \"LIMIT 1\"\n    )\n\n    def on_maintenance(self, on_maintenance):\n        \"\"\"Filter on whether a netbox is in maintenance mode or not\"\"\"\n        on_maintenance = bool(on_maintenance)\n        alerts = nav.models.event.AlertHistory.objects.unresolved(\n            'maintenanceState'\n        ).filter(variables__variable='netbox')\n        netboxes = self.filter(\n            id__in=(\n                alerts.filter(netbox__isnull=False).values_list('netbox_id', flat=True)\n            )\n        )\n        if on_maintenance:\n            return netboxes\n        return self.difference(netboxes)\n\n    def with_chassis_serials(self):\n        \"\"\"Annotates every Netbox with the serial number of its chassis,\n        if applicable. Stacked netboxes will typically have multiple chassis - in\n        this case, the one with the lowest index is considered the \"master\", and its\n        serial number is used.\n\n        Each object will be annotated with the attribute `chassis_serial`\n        \"\"\"\n        return self.annotate(\n            chassis_serial=RawSQL(\n                self.chassis_serialnum_sql, (NetboxEntity.CLASS_CHASSIS,)\n            )\n        )\n\n\nclass ManagementProfile(models.Model):\n    \"\"\"Management connection profiles shared between multiple netboxes. These\n    may include protocols, credentials etc.\n\n    \"\"\"\n\n    id = models.AutoField(db_column='management_profileid', primary_key=True)\n    name = VarcharField(unique=True)\n    description = VarcharField(blank=True, null=True)\n\n    PROTOCOL_DEBUG = 0\n    PROTOCOL_SNMP = 1\n    PROTOCOL_NAPALM = 2\n    PROTOCOL_SNMPV3 = 3\n    PROTOCOL_HTTP_API = 4\n    PROTOCOL_CHOICES = [\n        (PROTOCOL_SNMP, \"SNMP\"),\n        (PROTOCOL_NAPALM, \"NAPALM\"),\n        (PROTOCOL_SNMPV3, \"SNMPv3\"),\n        (PROTOCOL_HTTP_API, \"HTTP API\"),\n    ]\n    if settings.DEBUG:\n        PROTOCOL_CHOICES.insert(0, (PROTOCOL_DEBUG, 'debug'))\n\n    protocol = models.IntegerField(choices=PROTOCOL_CHOICES)\n    configuration = JSONField(default=dict)\n\n    class Meta(object):\n        db_table = 'management_profile'\n        verbose_name = 'management profile'\n        verbose_name_plural = 'management profiles'\n        ordering = ('protocol', 'name')\n\n    def __str__(self):\n        return self.name\n\n    @property\n    def is_snmp(self):\n        return self.protocol in (self.PROTOCOL_SNMP, self.PROTOCOL_SNMPV3)\n\n    @property\n    def snmp_version(self):\n        \"\"\"Returns the configured SNMP version as an integer\"\"\"\n        if self.protocol == self.PROTOCOL_SNMP:\n            value = self.configuration.get(\"version\")\n            if value == \"2c\":\n                return 2\n            if value:\n                return int(value)\n            else:\n                _logger.error(\n                    \"Broken management profile %s has no SNMP version\", self.name\n                )\n                return None\n\n        elif self.protocol == self.PROTOCOL_SNMPV3:\n            return 3\n\n        raise ValueError(\n            \"Getting snmp protocol version for non-snmp management profile\"\n        )\n\n    @property\n    def snmp_community(self):\n        if self.is_snmp:\n            return self.configuration['community']\n\n        raise ValueError(\"Getting snmp community for non-snmp management profile\")\n\n\nclass NetboxProfile(models.Model):\n    \"\"\"Stores the relation between Netboxes and their management profiles\"\"\"\n\n    id = models.AutoField(primary_key=True, db_column='netbox_profileid')\n    netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')\n    profile = models.ForeignKey(\n        'ManagementProfile', on_delete=models.CASCADE, db_column='profileid'\n    )\n\n    class Meta(object):\n        db_table = 'netbox_profile'\n        unique_together = (('netbox', 'profile'),)\n\n    def __str__(self):\n        return self.netbox.sysname\n\n\nclass Netbox(models.Model):\n    \"\"\"From NAV Wiki: The netbox table is the heart of the heart so to speak,\n    the most central table of them all. The netbox tables contains information\n    on all IP devices that NAV manages with adhering information and\n    relations.\"\"\"\n\n    UP_UP = 'y'\n    UP_DOWN = 'n'\n    UP_SHADOW = 's'\n    UP_CHOICES = (\n        (UP_UP, 'up'),\n        (UP_DOWN, 'down'),\n        (UP_SHADOW, 'shadow'),\n    )\n\n    id = models.AutoField(db_column='netboxid', primary_key=True)\n    ip = models.GenericIPAddressField(unique=True)\n    room = models.ForeignKey(\n        'Room',\n        on_delete=models.CASCADE,\n        db_column='roomid',\n        related_name=\"netboxes\",\n    )\n    type = models.ForeignKey(\n        'NetboxType',\n        on_delete=models.CASCADE,\n        db_column='typeid',\n        blank=True,\n        null=True,\n        related_name=\"netboxes\",\n    )\n    sysname = VarcharField(unique=True, blank=False)\n    category = models.ForeignKey(\n        'Category',\n        on_delete=models.CASCADE,\n        db_column='catid',\n        related_name=\"netboxes\",\n    )\n    groups = models.ManyToManyField(\n        'NetboxGroup',\n        through='NetboxCategory',\n        blank=True,\n        related_name=\"netboxes\",\n    )\n    groups.help_text = ''\n    organization = models.ForeignKey(\n        'Organization',\n        on_delete=models.CASCADE,\n        db_column='orgid',\n        related_name=\"netboxes\",\n    )\n\n    profiles = models.ManyToManyField(\n        'ManagementProfile',\n        through='NetboxProfile',\n        blank=True,\n        related_name=\"netboxes\",\n    )\n\n    up = models.CharField(max_length=1, choices=UP_CHOICES, default=UP_UP)\n    up_since = models.DateTimeField(db_column='upsince', auto_now_add=True)\n    up_to_date = models.BooleanField(db_column='uptodate', default=False)\n    discovered = models.DateTimeField(auto_now_add=True)\n    deleted_at = models.DateTimeField(blank=True, null=True, default=None)\n    master = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='masterid',\n        null=True,\n        blank=True,\n        default=None,\n        related_name='instances',\n    )\n    data = HStoreField(blank=True, null=True, default=dict)\n\n    objects = NetboxQuerySet.as_manager()\n    ups_objects = UpsManager()\n\n    class Meta(object):\n        db_table = 'netbox'\n        verbose_name = 'IP Device'\n        verbose_name_plural = 'IP Devices'\n        ordering = ('sysname',)\n\n    def __str__(self):\n        return self.get_short_sysname()\n\n    def clean(self):\n        \"\"\"Custom validation\"\"\"\n\n        # Make sure master cannot be set to self\n        if self.master and self.pk == self.master.pk:\n            raise ValidationError('You cannot be your own master')\n\n        # Make sure sysname is set\n        if not self.sysname:\n            self.sysname = str(self.ip)\n\n    @property\n    def device(self):\n        \"\"\"Property to access the former device-field\n\n        Returns the first chassis device if any\n        \"\"\"\n        for chassis in self.get_chassis().order_by('index'):\n            return chassis.device\n\n    def get_preferred_snmp_management_profile(\n        self, require_write=False\n    ) -> Optional[ManagementProfile]:\n        \"\"\"Returns the snmp management profile with the highest available SNMP version.\n\n        :param require_write: If True, only write-enabled profiles will be\n                              considered.  If false, read-only profiles will be\n                              preferred, unless a write-enabled profile is the only\n                              available alternative.\n        \"\"\"\n        query = Q(\n            protocol__in=(\n                ManagementProfile.PROTOCOL_SNMP,\n                ManagementProfile.PROTOCOL_SNMPV3,\n            )\n        )\n        if require_write:\n            query = query & Q(configuration__write=True)\n\n        profiles = self.profiles.filter(query)\n\n        if not require_write:\n            # Sort read-only profiles first\n            profiles = sorted(\n                profiles, key=lambda p: p.configuration.get(\"write\", False)\n            )\n\n        profiles = sorted(profiles, key=lambda p: p.snmp_version or 0, reverse=True)\n        if profiles:\n            return profiles[0]\n\n    def is_up(self):\n        \"\"\"Returns True if the Netbox isn't known to be down or in shadow\"\"\"\n        return self.up == self.UP_UP\n\n    def is_snmp_down(self):\n        \"\"\"\n        Returns True if this netbox has any unresolved snmp agent state alerts\n        \"\"\"\n        return self.get_unresolved_alerts('snmpAgentState').count() > 0\n\n    def get_absolute_url(self):\n        kwargs = {\n            'name': self.sysname,\n        }\n        return reverse('ipdevinfo-details-by-name', kwargs=kwargs)\n\n    def last_updated(self, job='inventory'):\n        \"\"\"Returns the last updated timestamp of a particular job as a\n        datetime object.\n\n        \"\"\"\n        try:\n            log = self.job_log.filter(success=True, job_name=job).order_by('-end_time')[\n                0\n            ]\n            return log.end_time\n        except IndexError:\n            return None\n\n    def get_last_jobs(self):\n        \"\"\"Returns the last log entry for all jobs\"\"\"\n        query = \"\"\"\n            SELECT\n              ijl.*\n            FROM ipdevpoll_job_log AS ijl\n            JOIN (\n                SELECT\n                  netboxid,\n                  job_name,\n                  MAX(end_time) AS end_time\n                FROM\n                  ipdevpoll_job_log\n                GROUP BY netboxid, job_name\n              ) AS foo USING (netboxid, job_name, end_time)\n            JOIN netbox ON (ijl.netboxid = netbox.netboxid)\n            WHERE ijl.netboxid = %s\n            ORDER BY end_time\n        \"\"\"\n        logs = IpdevpollJobLog.objects.raw(query, [self.id])\n        return list(logs)\n\n    def get_gwport_count(self):\n        \"\"\"Returns the number of all interfaces that have IP addresses.\"\"\"\n        return self.get_gwports().count()\n\n    def get_gwports(self):\n        \"\"\"Returns all interfaces that have IP addresses.\"\"\"\n        return Interface.objects.filter(\n            netbox=self, gwport_prefixes__isnull=False\n        ).distinct()\n\n    def get_gwports_sorted(self):\n        \"\"\"Returns gwports naturally sorted by interface name\"\"\"\n\n        ports = self.get_gwports().select_related('module', 'netbox')\n        return Interface.sort_ports_by_ifname(ports)\n\n    def get_swport_count(self):\n        \"\"\"Returns the number of all interfaces that are switch ports.\"\"\"\n        return self.get_swports().count()\n\n    def get_swports(self):\n        \"\"\"Returns all interfaces that are switch ports.\"\"\"\n        return Interface.objects.filter(netbox=self, baseport__isnull=False).distinct()\n\n    def get_swports_sorted(self):\n        \"\"\"Returns swports naturally sorted by interface name\"\"\"\n        ports = self.get_swports().select_related('module', 'netbox')\n        return Interface.sort_ports_by_ifname(ports)\n\n    def get_physical_ports(self):\n        \"\"\"Return all ports that are present.\"\"\"\n        return Interface.objects.filter(netbox=self, ifconnectorpresent=True).distinct()\n\n    def get_physical_ports_sorted(self):\n        \"\"\"Return all ports that are present sorted by interface name.\"\"\"\n        ports = self.get_physical_ports().select_related('module', 'netbox')\n        return Interface.sort_ports_by_ifname(ports)\n\n    def get_sensors(self):\n        \"\"\"Returns sensors associated with this netbox\"\"\"\n\n        return Sensor.objects.filter(netbox=self)\n\n    def get_availability(self):\n        \"\"\"Calculates and returns an availability data structure.\"\"\"\n        result = get_netboxes_availability([self])\n        return result.get(self.pk)\n\n    def get_week_availability(self):\n        \"\"\"Gets the availability for this netbox for the last week\"\"\"\n        avail = self.get_availability()\n        try:\n            return \"%.2f%%\" % avail[\"availability\"][\"week\"]\n        except (KeyError, TypeError):\n            return \"N/A\"\n\n    def get_uplinks(self):\n        \"\"\"Returns a list of uplinks on this netbox. Requires valid vlan.\"\"\"\n        result = []\n\n        for iface in self.connected_to_interface.all():\n            if iface.swport_vlans.filter(direction=SwPortVlan.DIRECTION_DOWN).count():\n                result.append(\n                    {\n                        'other': iface,\n                        'this': iface.to_interface,\n                    }\n                )\n\n        return result\n\n    def get_uplinks_regarding_of_vlan(self):\n        result = []\n\n        for iface in self.connected_to_interface.all():\n            result.append(\n                {\n                    'other': iface,\n                    'this': iface.to_interface,\n                }\n            )\n\n        return result\n\n    def get_function(self):\n        \"\"\"Returns the function description of this netbox.\"\"\"\n        try:\n            return self.info_set.get(variable='function').value\n        except NetboxInfo.DoesNotExist:\n            return None\n\n    def get_prefix(self):\n        \"\"\"Returns the prefix address for this netbox' IP address.\"\"\"\n        try:\n            return self.netboxprefix.prefix\n        except models.ObjectDoesNotExist:\n            return None\n\n    def get_filtered_prefix(self):\n        \"\"\"Returns the netbox' prefix address only when the prefix is not a\n        scope, private or reserved prefix.\n\n        \"\"\"\n        prefix = self.get_prefix()\n        if prefix and prefix.vlan.net_type.description in (\n            'scope',\n            'private',\n            'reserved',\n        ):\n            return None\n        else:\n            return prefix\n\n    def get_short_sysname(self):\n        \"\"\"Returns sysname without the domain suffix if specified in the\n        DOMAIN_SUFFIX setting in nav.conf\"\"\"\n\n        if settings.DOMAIN_SUFFIX is not None:\n            return self.sysname.removesuffix(settings.DOMAIN_SUFFIX)\n        return self.sysname or self.ip\n\n    def is_on_maintenance(self):\n        \"\"\"Returns True if this netbox is currently on maintenance\"\"\"\n        states = self.get_unresolved_alerts('maintenanceState').filter(\n            variables__variable='netbox'\n        )\n        return states.count() > 0\n\n    def last_downtime_ended(self):\n        \"\"\"\n        Returns the end_time of the last known boxState alert.\n\n        :returns: A datetime object if a serviceState alert was found,\n                  otherwise None\n        \"\"\"\n        try:\n            lastdown = self.alert_history_set.filter(\n                event_type__id='boxState', end_time__isnull=False\n            ).order_by(\"-end_time\")[0]\n        except IndexError:\n            return\n        else:\n            return lastdown.end_time\n\n    def get_unresolved_alerts(self, kind=None):\n        \"\"\"Returns a queryset of unresolved alert states\"\"\"\n        return self.alert_history_set.unresolved(kind)\n\n    def get_powersupplies(self):\n        return self.power_supplies_or_fans.filter(\n            physical_class='powerSupply'\n        ).order_by('name')\n\n    def get_fans(self):\n        return self.power_supplies_or_fans.filter(physical_class='fan').order_by('name')\n\n    def get_system_metrics(self):\n        \"\"\"Gets a list of available Graphite metrics related to this Netbox,\n        except for ports and sensors, which are seen as separate.\n\n        :returns: A list of dicts describing the metrics, e.g.:\n                  {id:\"nav.devices.some-gw.cpu.cpu1.loadavg1min\",\n                   group=\"cpu\",\n                   suffix=\"cpu1.loadavg1min\"}\n\n        \"\"\"\n        ports_exclude = metric_prefix_for_ports(self.sysname)\n        sensors_exclude = metric_prefix_for_sensors(self.sysname)\n        base = metric_prefix_for_device(self.sysname)\n\n        nodes = get_all_leaves_below(base, [ports_exclude, sensors_exclude])\n        result = []\n        for node in nodes:\n            suffix = node.replace(base + '.', '')\n            elements = suffix.split('.')\n            group = elements[0]\n            suffix = '.'.join(elements[1:])\n            result.append(dict(id=node, group=group, suffix=suffix))\n\n        return result\n\n    def has_unignored_unrecognized_neighbors(self):\n        \"\"\"Returns true if this netbox has unignored unrecognized neighbors\"\"\"\n        return self.unrecognized_neighbors.filter(ignored_since=None).count() > 0\n\n    def get_chassis(self):\n        \"\"\"Returns a QuerySet of chassis devices seen on this netbox\"\"\"\n        return self.entities.filter(\n            device__isnull=False,\n            physical_class=NetboxEntity.CLASS_CHASSIS,\n        ).select_related('device')\n\n    def get_environment_sensors(self):\n        \"\"\"Returns the sensors to be displayed on the Environment Sensor tab\"\"\"\n        return self.sensors.filter(\n            Q(unit_of_measurement__icontains='celsius')\n            | Q(unit_of_measurement__icontains='percent')\n        )\n\n    @property\n    def mac_addresses(self) -> set[str]:\n        \"\"\"Returns a set of collected chassis MAC addresses for this Netbox\"\"\"\n        macinfo_match = (Q(key=\"bridge_info\") & Q(variable=\"base_address\")) | (\n            Q(key=\"lldp\") & Q(variable=\"chassis_mac\")\n        )\n        macs = self.info_set.filter(macinfo_match).distinct(\"value\").only(\"value\")\n        return set(mac.value for mac in macs)\n\n\nclass NetboxInfo(models.Model):\n    \"\"\"From NAV Wiki: The netboxinfo table is the place\n    to store additional info on a netbox.\"\"\"\n\n    id = models.AutoField(db_column='netboxinfoid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name='info_set',\n    )\n    key = VarcharField()\n    variable = VarcharField(db_column='var')\n    value = models.TextField(db_column='val')\n\n    class Meta(object):\n        db_table = 'netboxinfo'\n        unique_together = (('netbox', 'key', 'variable', 'value'),)\n\n    def __str__(self):\n        return '%s=\"%s\"' % (self.variable, self.value)\n\n    @classmethod\n    def cache_set(cls, netbox, key, variable, value):\n        \"\"\"Attempts to cache a serialized Python value as a NetboxInfo record\"\"\"\n        cache, _ = cls.objects.get_or_create(\n            netbox_id=netbox.id, key=key, variable=variable\n        )\n        cache.value = base64.encodebytes(pickle.dumps(value))\n        cache.save()\n\n    @classmethod\n    def cache_get(cls, netbox, key, variable):\n        \"\"\"Attempts to fetch and unserialize a cached Python value from a NetboxInfo\n        record. Returns None if unsucessful for any reason.\n        \"\"\"\n        try:\n            cache = cls.objects.get(netbox_id=netbox.id, key=key, variable=variable)\n        except cls.DoesNotExist:\n            return None\n        try:\n            value = cache.value.encode(\"utf-8\")\n            remote_table = pickle.loads(base64.decodebytes(value))\n            return remote_table\n        except Exception as error:  # noqa: BLE001\n            _logger.debug(\n                \"Unable to unpickle cache value for (%r, %r, %r): %s\",\n                netbox.sysname,\n                key,\n                variable,\n                error,\n            )\n            # Broken cache values don't matter, just re-calculate\n            return None\n\n\nclass NetboxEntity(models.Model):\n    \"\"\"\n    Represents a physical Entity within a Netbox. Largely modeled after\n    ENTITY-MIB::entPhysicalTable. See RFC 4133 (and RFC 6933), but may be\n    filled from other sources where applicable.\n\n    \"\"\"\n\n    # Class choices, extracted from RFC 6933\n\n    CLASS_OTHER = 1\n    CLASS_UNKNOWN = 2\n    CLASS_CHASSIS = 3\n    CLASS_BACKPLANE = 4\n    CLASS_CONTAINER = 5  # e.g., chassis slot or daughter-card holder\n    CLASS_POWERSUPPLY = 6\n    CLASS_FAN = 7\n    CLASS_SENSOR = 8\n    CLASS_MODULE = 9  # e.g., plug-in card or daughter-card\n    CLASS_PORT = 10\n    CLASS_STACK = 11  # e.g., stack of multiple chassis entities\n    CLASS_CPU = 12\n    CLASS_ENERGYOBJECT = 13\n    CLASS_BATTERY = 14\n\n    CLASS_CHOICES = (\n        (CLASS_OTHER, 'other'),\n        (CLASS_UNKNOWN, 'unknown'),\n        (CLASS_CHASSIS, 'chassis'),\n        (CLASS_BACKPLANE, 'backplane'),\n        (CLASS_CONTAINER, 'container'),\n        (CLASS_POWERSUPPLY, 'powerSupply'),\n        (CLASS_FAN, 'fan'),\n        (CLASS_SENSOR, 'sensor'),\n        (CLASS_MODULE, 'module'),\n        (CLASS_PORT, 'port'),\n        (CLASS_STACK, 'stack'),\n        (CLASS_CPU, 'cpu'),\n        (CLASS_ENERGYOBJECT, 'energyObject'),\n        (CLASS_BATTERY, 'battery'),\n    )\n\n    id = models.AutoField(db_column='netboxentityid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name='entities',\n    )\n    index = models.IntegerField()\n    source = VarcharField(default='ENTITY-MIB')\n    descr = VarcharField(null=True)\n    vendor_type = VarcharField(null=True)\n    contained_in = models.ForeignKey(\n        'NetboxEntity',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"contained_entities\",\n    )\n    physical_class = models.IntegerField(choices=CLASS_CHOICES, null=True)\n    parent_relpos = models.IntegerField(null=True)\n    name = VarcharField(null=True)\n    hardware_revision = VarcharField(null=True)\n    firmware_revision = VarcharField(null=True)\n    software_revision = VarcharField(null=True)\n    device = models.ForeignKey(\n        'Device',\n        on_delete=models.CASCADE,\n        null=True,\n        db_column='deviceid',\n        related_name=\"entities\",\n    )\n    mfg_name = VarcharField(null=True)\n    model_name = VarcharField(null=True)\n    alias = VarcharField(null=True)\n    asset_id = VarcharField(null=True)\n    fru = models.BooleanField(null=True, verbose_name='Is a field replaceable unit')\n    mfg_date = models.DateTimeField(null=True)\n    uris = VarcharField(null=True)\n    gone_since = models.DateTimeField(null=True)\n    data = HStoreField(default=dict)\n\n    class Meta:\n        db_table = 'netboxentity'\n        unique_together = (('netbox', 'index'),)\n\n    def __str__(self):\n        klass = (self.get_physical_class_display() or '').capitalize()\n        title = self.name or '(Unnamed entity)'\n        if klass and not title.strip().lower().startswith(klass.lower()):\n            title = \"%s %s\" % (klass, title)\n\n        try:\n            netbox = self.netbox\n        except Netbox.DoesNotExist:\n            netbox = '(Unknown netbox)'\n        return \"{title} at {netbox}\".format(title=title, netbox=netbox)\n\n    def is_chassis(self):\n        \"\"\"Returns True if this is a chassis type entity\"\"\"\n        return self.physical_class == self.CLASS_CHASSIS\n\n    def get_software_revision(self):\n        \"\"\"Returns the software revision applicable to this entity\"\"\"\n        if not self.is_chassis():\n            return\n\n        if not self.software_revision:\n            return self._get_applicable_software_revision()\n        return self.software_revision\n\n    def _get_applicable_software_revision(self):\n        \"\"\"Gets an aggregated software revision for this entity\"\"\"\n        from nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\n\n        if (\n            self.netbox.type\n            and self.netbox.type.get_enterprise_id() == VENDOR_ID_CISCOSYSTEMS\n        ):\n            return self._get_cisco_sup_software_version()\n\n    def _get_cisco_sup_software_version(self):\n        \"\"\"Returns the supervisors software version\n\n        Finds all modules in the netbox that matches supervisor patterns and has\n        this entity as a parent. Returns the software version of the first one\n        in that list.\n        \"\"\"\n        supervisor_patterns = [\n            re.compile(r'supervisor', re.I),\n            re.compile('\\bSup\\b'),\n            re.compile(r'WS-SUP'),\n        ]\n\n        sup_candidates = []\n        modules = NetboxEntity.objects.filter(\n            physical_class=NetboxEntity.CLASS_MODULE, netbox=self.netbox\n        )\n\n        for pattern in supervisor_patterns:\n            for module in modules:\n                if pattern.search(module.model_name):\n                    sup_candidates.append(module)\n\n        for sup in sup_candidates:\n            parents = sup.get_parents()\n            if self in parents and sup.software_revision:\n                return sup.software_revision\n\n    def get_parents(self):\n        \"\"\"Gets the parents of this entity\n\n        :rtype: list<NetboxEntity>\n        \"\"\"\n        parents = []\n        if self.contained_in:\n            parents.append(self.contained_in)\n            parents += self.contained_in.get_parents()\n        return parents\n\n\nclass NetboxPrefix(models.Model):\n    \"\"\"Which prefix a netbox is connected to.\n\n    This models the read-only netboxprefix view.\n\n    \"\"\"\n\n    netbox = models.OneToOneField(\n        'Netbox', on_delete=models.CASCADE, db_column='netboxid', primary_key=True\n    )\n    prefix = models.ForeignKey(\n        'Prefix',\n        on_delete=models.CASCADE,\n        db_column='prefixid',\n        related_name='netbox_set',\n    )\n\n    class Meta(object):\n        db_table = 'netboxprefix'\n        unique_together = (('netbox', 'prefix'),)\n\n    def __str__(self):\n        return '%s at %s' % (self.netbox.sysname, self.prefix.net_address)\n\n    def save(self, *_args, **_kwargs):\n        \"\"\"Does nothing, since this models a database view.\"\"\"\n        raise Exception(\"Cannot save to a view.\")\n\n\nclass Device(models.Model):\n    \"\"\"From NAV Wiki: The device table contains all physical devices in the\n    network. As opposed to the netbox table, the device table focuses on the\n    physical box with its serial number. The device may appear as different net\n    boxes or may appear in different modules throughout its lifetime.\"\"\"\n\n    id = models.AutoField(db_column='deviceid', primary_key=True)\n    serial = VarcharField(unique=True, null=True)\n    hardware_version = VarcharField(db_column='hw_ver', null=True)\n    firmware_version = VarcharField(db_column='fw_ver', null=True)\n    software_version = VarcharField(db_column='sw_ver', null=True)\n    discovered = models.DateTimeField(default=dt.datetime.now)\n\n    class Meta(object):\n        db_table = 'device'\n\n    def __str__(self):\n        return self.serial or ''\n\n    def get_related_objects(self):\n        \"\"\"\n        Returns the related modules/power supplies/fans/netbox\n        entities of a device.\n        \"\"\"\n        modules = self.modules.all()\n        power_supplies_or_fans = self.power_supplies_or_fans.all()\n        netbox_entities = self.entities.all()\n        return modules or power_supplies_or_fans or netbox_entities\n\n    def get_preferred_related_object(self):\n        \"\"\"\n        Returns the first related module/power supply/fan/netbox\n        entity of a device.\n        \"\"\"\n        related_objects = self.get_related_objects()\n        if not related_objects:\n            return None\n        if len(related_objects) > 1:\n            _logger.info(\n                \"Device.get_related_objects(): %s weirdly appears to have \"\n                \"duplicate related objects, returning just one\",\n                self,\n            )\n        return related_objects[0]\n\n    def get_extended_description(self):\n        \"\"\"\n        Returns the extended description of a device. This is usually\n        the string representation of an related object.\n        \"\"\"\n        related_object = self.get_preferred_related_object()\n        if related_object:\n            return str(related_object)\n        return str(self)\n\n\nclass Module(models.Model):\n    \"\"\"From NAV Wiki: The module table defines modules. A module is a part of a\n    netbox of category GW, SW and GSW. A module has ports; i.e router ports\n    and/or switch ports. A module is also a physical device with a serial\n    number.\"\"\"\n\n    UP_UP = 'y'\n    UP_DOWN = 'n'\n    UP_CHOICES = (\n        (UP_UP, 'up'),\n        (UP_DOWN, 'down'),\n    )\n\n    id = models.AutoField(db_column='moduleid', primary_key=True)\n    device = models.ForeignKey(\n        'Device',\n        on_delete=models.CASCADE,\n        db_column='deviceid',\n        related_name=\"modules\",\n    )\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"modules\",\n    )\n    module_number = models.IntegerField(db_column='module')\n    name = VarcharField()\n    model = VarcharField()\n    description = VarcharField(db_column='descr')\n    up = models.CharField(max_length=1, choices=UP_CHOICES, default=UP_UP)\n    down_since = models.DateTimeField(db_column='downsince')\n\n    class Meta(object):\n        db_table = 'module'\n        verbose_name = 'module'\n        ordering = ('netbox', 'module_number', 'name')\n        unique_together = (('netbox', 'name'),)\n\n    def __str__(self):\n        return '{name} at {netbox}'.format(\n            name=self.name or self.module_number, netbox=self.netbox\n        )\n\n    def get_absolute_url(self):\n        kwargs = {\n            'netbox_sysname': self.netbox.sysname,\n            'module_name': self.name,\n        }\n        return reverse('ipdevinfo-module-details', kwargs=kwargs)\n\n    def get_gwports(self):\n        \"\"\"Returns all interfaces that have IP addresses.\"\"\"\n        return Interface.objects.filter(\n            module=self, gwport_prefixes__isnull=False\n        ).distinct()\n\n    def get_gwports_sorted(self):\n        \"\"\"Returns gwports naturally sorted by interface name\"\"\"\n\n        ports = self.get_gwports()\n        return Interface.sort_ports_by_ifname(ports)\n\n    def get_swports(self):\n        \"\"\"Returns all interfaces that are switch ports.\"\"\"\n        return Interface.objects.select_related().filter(\n            module=self, baseport__isnull=False\n        )\n\n    def get_swports_sorted(self):\n        \"\"\"Returns swports naturally sorted by interface name\"\"\"\n\n        ports = self.get_swports()\n        return Interface.sort_ports_by_ifname(ports)\n\n    def get_physical_ports(self):\n        \"\"\"Return all ports that are present.\"\"\"\n        return Interface.objects.filter(module=self, ifconnectorpresent=True).distinct()\n\n    def get_physical_ports_sorted(self):\n        \"\"\"Return all ports that are present sorted by interface name.\"\"\"\n        ports = self.get_physical_ports()\n        return Interface.sort_ports_by_ifname(ports)\n\n    def is_on_maintenace(self):\n        \"\"\"Returns True if the owning Netbox is on maintenance\"\"\"\n        return self.netbox.is_on_maintenance()\n\n    def get_entity(self):\n        \"\"\"\n        Attempts to find the NetboxEntity entry that corresponds to this module.\n\n        :returns: Either a NetboxEntity object or None.\n        \"\"\"\n        entities = NetboxEntity.objects.filter(netbox=self.netbox, device=self.device)\n        if entities:\n            if len(entities) > 1:\n                _logger.info(\n                    \"Module.get_entity(): %s weirdly appears to have \"\n                    \"duplicate entities, returning just one\",\n                    self,\n                )\n            return entities[0]\n\n    def get_chassis(self):\n        \"\"\"\n        Attempts to find the NetboxEntity that corresponds to the chassis that\n        contains this module.\n\n        :return:\n        \"\"\"\n        me = self.get_entity()\n        if not me:\n            return\n\n        entities = {e.id: e for e in NetboxEntity.objects.filter(netbox=self.netbox)}\n        visited = set()\n        current = entities.get(me.id)\n        while current is not None and not current.is_chassis():\n            visited.add(current)\n            current = entities.get(current.contained_in_id)\n            if current in visited:\n                # there's a loop here, exit now\n                return\n        return current\n\n\nclass Memory(models.Model):\n    \"\"\"From NAV Wiki: The mem table describes the memory\n    (memory and nvram) of a netbox.\"\"\"\n\n    id = models.AutoField(db_column='memid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"memory_set\",\n    )\n    type = VarcharField(db_column='memtype')\n    device = VarcharField()\n    size = models.IntegerField()\n    used = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'mem'\n        unique_together = (('netbox', 'type', 'device'),)\n\n    def __str__(self):\n        if self.used is not None and self.size is not None and self.size != 0:\n            return '%s, %d%% used' % (self.type, self.used * 100 // self.size)\n        else:\n            return self.type\n\n\nclass AliasQuerySet(models.QuerySet):\n    \"\"\"Generic QuerySet for looking up models that has aliases stored\"\"\"\n\n    def aka(self, partial_alias: str):\n        \"\"\"\n        Returns a filtered queryset for partial case insensitive matches for id and\n        aliases\n        \"\"\"\n        return self.filter(\n            Q(aliases__icontains=partial_alias) | Q(id__icontains=partial_alias)\n        )\n\n    def aka_or_description(self, query: str):\n        \"\"\"\n        Returns a filtered queryset for partial case insensitive matches for id,\n        aliases and description\n        \"\"\"\n        return self.filter(\n            Q(aliases__icontains=query)\n            | Q(id__icontains=query)\n            | Q(description__icontains=query)\n        )\n\n\nclass AliasesMixin:\n    \"\"\"A mixin that provides methods and properties for models that use aliases\"\"\"\n\n    @property\n    def aliases_string(self) -> str:\n        return \", \".join(self.aliases)\n\n    @property\n    def verbose_string(self):\n        rep = '%s' % (self.id)\n        if self.description:\n            rep += ': %s' % (self.description)\n        if self.aliases:\n            rep += ' (%s)' % (self.aliases_string)\n        return rep\n\n    def get_all_aliases(self):\n        aliases = [self.id] + list(self.aliases)\n        return aliases\n\n\nclass Room(models.Model, AliasesMixin):\n    \"\"\"From NAV Wiki: The room table defines a wiring closes / network room /\n    server room.\"\"\"\n\n    id = models.CharField(db_column='roomid', max_length=30, primary_key=True)\n    location = models.ForeignKey(\n        'Location',\n        on_delete=models.CASCADE,\n        db_column='locationid',\n        related_name=\"rooms\",\n    )\n    description = VarcharField(db_column='descr', blank=True)\n    position = PointField(null=True, blank=True, default=None)\n    data = HStoreField(blank=True, default=dict)\n    aliases = JSONField(default=list)\n\n    objects = AliasQuerySet.as_manager()\n\n    class Meta(object):\n        db_table = 'room'\n        verbose_name = 'room'\n        ordering = ('id',)\n\n    def __str__(self):\n        rep = '%s' % (self.id)\n        if self.description:\n            rep += ': %s' % (self.description)\n        return rep\n\n    def get_absolute_url(self):\n        return reverse('room-info', kwargs={'roomid': self.pk})\n\n    @property\n    def latitude(self):\n        if self.position:\n            return self.position[0]\n\n    @property\n    def longitude(self):\n        if self.position:\n            return self.position[1]\n\n\nclass TreeMixin(object):\n    \"\"\"A mixin that provides methods for models that use parenting hierarchy\"\"\"\n\n    def num_ancestors(self):\n        \"\"\"The number of ancestors, how deep am I?\"\"\"\n        if self.parent:\n            return 1 + self.parent.num_ancestors()\n        return 0\n\n    def has_children(self):\n        \"\"\"Returns true if this instance has children\"\"\"\n        return self.get_children().exists()\n\n    def get_children(self):\n        \"\"\"Gets all children\"\"\"\n        return self.__class__.objects.filter(parent=self)\n\n    def get_descendants(self, include_self=False):\n        \"\"\"Gets all descendants of this instance\"\"\"\n        descendants = []\n        if include_self:\n            descendants.append(self)\n        for child in self.get_children():\n            descendants.extend(child.get_descendants(include_self=True))\n        return descendants\n\n\nclass Location(models.Model, TreeMixin, AliasesMixin):\n    \"\"\"The location table defines a group of rooms; i.e. a campus.\"\"\"\n\n    id = models.CharField(db_column='locationid', max_length=30, primary_key=True)\n    parent = models.ForeignKey(\n        'self',\n        on_delete=models.CASCADE,\n        db_column='parent',\n        blank=True,\n        null=True,\n        related_name=\"child_locations\",\n    )\n    description = VarcharField(db_column='descr', blank=True)\n    data = HStoreField(default=dict)\n    aliases = JSONField(default=list)\n\n    objects = AliasQuerySet.as_manager()\n\n    class Meta(object):\n        db_table = 'location'\n        verbose_name = 'location'\n        ordering = ['id']\n\n    def __str__(self):\n        rep = '%s' % (self.id)\n        if self.description:\n            rep += ': %s' % (self.description)\n        return rep\n\n    def get_all_rooms(self):\n        \"\"\"Return a queryset returning all rooms in this location and\n        sublocations\"\"\"\n        locations = self.get_descendants(True)\n        return Room.objects.filter(location__in=locations)\n\n    def get_absolute_url(self):\n        return reverse('location-info', kwargs={'locationid': self.pk})\n\n\nclass Organization(models.Model, TreeMixin):\n    \"\"\"From NAV Wiki: The org table defines an organization which is in charge\n    of a given netbox and is the user of a given prefix.\"\"\"\n\n    id = models.CharField(db_column='orgid', max_length=30, primary_key=True)\n    parent = models.ForeignKey(\n        'self',\n        on_delete=models.CASCADE,\n        db_column='parent',\n        blank=True,\n        null=True,\n        related_name=\"child_organizations\",\n    )\n    description = VarcharField(db_column='descr', blank=True)\n    contact = VarcharField(db_column='contact', blank=True)\n    data = HStoreField(default=dict)\n\n    class Meta(object):\n        db_table = 'org'\n        verbose_name = 'organization'\n        ordering = ['id']\n\n    def __str__(self):\n        if self.description:\n            return '{o.id} ({o.description})'.format(o=self)\n        else:\n            return '{o.id}'.format(o=self)\n\n    def get_absolute_url(self):\n        \"\"\"Returns the URL to this organization's edit page\"\"\"\n        return reverse('seeddb-organization-edit', kwargs={'organization_id': self.id})\n\n    def extract_emails(self):\n        \"\"\"Naively extract email addresses from the contact string\"\"\"\n        contact = self.contact if self.contact else \"\"\n        return re.findall(r'(\\b[\\w.]+@[\\w.]+\\b)', contact)\n\n\nclass Category(models.Model):\n    \"\"\"From NAV Wiki: The cat table defines the categories of a netbox\n    (GW,GSW,SW,EDGE,WLAN,SRV,OTHER).\"\"\"\n\n    id = models.CharField(db_column='catid', max_length=8, primary_key=True)\n    description = VarcharField(db_column='descr')\n    req_mgmt = models.BooleanField(default=False)\n\n    class Meta(object):\n        db_table = 'cat'\n        verbose_name = 'category'\n        verbose_name_plural = 'categories'\n\n    def __str__(self):\n        return '%s (%s)' % (self.id, self.description)\n\n    def is_gw(self):\n        \"\"\"Is this a router?\"\"\"\n        return self.id == 'GW'\n\n    def is_gsw(self):\n        \"\"\"Is this a routing switch?\"\"\"\n        return self.id == 'GSW'\n\n    def is_sw(self):\n        \"\"\"Is this a core switch?\"\"\"\n        return self.id == 'SW'\n\n    def is_edge(self):\n        \"\"\"Is this an edge switch?\"\"\"\n        return self.id == 'EDGE'\n\n    def is_srv(self):\n        \"\"\"Is this a server?\"\"\"\n        return self.id == 'SRV'\n\n    def is_other(self):\n        \"\"\"Is this an uncategorized device?\"\"\"\n        return self.id == 'OTHER'\n\n\nclass NetboxGroup(models.Model):\n    \"\"\"A group that one or more netboxes belong to\n\n    A group is a tag of sorts for grouping netboxes. You can put two netboxes\n    in the same group and then use that metainfo in reports and alert profiles.\n\n    This was formerly known as subcat but was altered to netboxgroup because\n    the same subcategory could not exist on different categories.\n\n    \"\"\"\n\n    id = VarcharField(db_column='netboxgroupid', primary_key=True)\n    description = VarcharField(db_column='descr')\n\n    class Meta(object):\n        db_table = 'netboxgroup'\n        ordering = ('id',)\n        verbose_name = 'device group'\n\n    def __str__(self):\n        return self.id\n\n    def get_absolute_url(self):\n        return reverse('netbox-group-detail', kwargs={'groupid': self.pk})\n\n\nclass NetboxCategory(models.Model):\n    \"\"\"Store the relation between a netbox and its groups\"\"\"\n\n    # TODO: This should be a ManyToMany-field in Netbox, but at this time\n    # Django only supports specifying the name of the M2M-table, and not the\n    # column names.\n    id = models.AutoField(primary_key=True)  # Serial for faking a primary key\n    netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')\n    category = models.ForeignKey(\n        'NetboxGroup', on_delete=models.CASCADE, db_column='category'\n    )\n\n    class Meta(object):\n        db_table = 'netboxcategory'\n        unique_together = (('netbox', 'category'),)  # Primary key\n\n    def __str__(self):\n        return '%s in category %s' % (self.netbox, self.category)\n\n\nclass NetboxType(models.Model):\n    \"\"\"From NAV Wiki: The type table defines the type of a netbox, the\n    sysobjectid being the unique identifier.\"\"\"\n\n    id = models.AutoField(db_column='typeid', primary_key=True)\n    vendor = models.ForeignKey(\n        'Vendor',\n        on_delete=models.CASCADE,\n        db_column='vendorid',\n        related_name=\"netbox_types\",\n    )\n    name = VarcharField(db_column='typename', verbose_name=\"type name\")\n    sysobjectid = VarcharField(unique=True)\n    description = VarcharField(db_column='descr')\n\n    class Meta(object):\n        db_table = 'type'\n        unique_together = (('vendor', 'name'),)\n\n    def __str__(self):\n        return '%s (%s from %s)' % (self.name, self.description, self.vendor)\n\n    def get_enterprise_id(self):\n        \"\"\"Returns the type's enterprise ID as an integer.\n\n        The type's sysobjectid should always start with\n        SNMPv2-SMI::enterprises (1.3.6.1.4.1).  The next OID element will be\n        an enterprise ID, while the remaining elements will describe the type\n        specific to the vendor.\n\n        \"\"\"\n        try:\n            return get_enterprise_id(self.sysobjectid)\n        except ValueError:\n            return None\n\n\n#######################################################################\n### Device management\n\n\nclass Vendor(models.Model):\n    \"\"\"From NAV Wiki: The vendor table defines vendors. A\n    type is of a vendor. A product is of a vendor.\"\"\"\n\n    id = models.CharField(db_column='vendorid', max_length=15, primary_key=True)\n\n    class Meta(object):\n        db_table = 'vendor'\n        ordering = ('id',)\n\n    def __str__(self):\n        return self.id\n\n\n#######################################################################\n### Router/topology\n\n\nclass GwPortPrefix(models.Model):\n    \"\"\"Defines IP addresses assigned to Interfaces, with a relation to the\n    associated Prefix.\n\n    \"\"\"\n\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"gwport_prefixes\",\n    )\n    prefix = models.ForeignKey(\n        'Prefix',\n        on_delete=models.CASCADE,\n        db_column='prefixid',\n        related_name=\"gwport_prefixes\",\n    )\n    gw_ip = CIDRField(db_column='gwip', primary_key=True)\n    virtual = models.BooleanField(default=False)\n\n    class Meta(object):\n        db_table = 'gwportprefix'\n\n    def __str__(self):\n        return self.gw_ip\n\n\nclass PrefixManager(models.Manager):\n    def contains_ip(self, ipaddr):\n        \"\"\"Gets all prefixes that contain the given IP address,\n        ordered by descending network mask length.\n\n        \"\"\"\n        return (\n            self.get_queryset()\n            .exclude(vlan__net_type=\"loopback\")\n            .extra(\n                select={'mlen': 'masklen(netaddr)'},\n                where=[\"%s <<= netaddr\"],\n                params=[ipaddr],\n                order_by=[\"-mlen\"],\n            )\n            .select_related('vlan')\n        )\n\n    def within(self, scope):\n        \"\"\"Gets all prefixes that are within this scope\"\"\"\n        return (\n            self.get_queryset()\n            .extra(where=[\"%s >> netaddr\"], params=[scope])\n            .select_related('vlan')\n        )\n\n    def private(self):\n        \"\"\"Gets all the prefixes that is a private network\"\"\"\n        return (\n            self.get_queryset()\n            .extra(\n                where=[\"netaddr <<= %s or netaddr <<= %s or netaddr <<= %s\"],\n                params=['172.16.0.0/12', '10.0.0.0/8', '192.168.0.0/16'],\n            )\n            .select_related('vlan')\n        )\n\n\nclass Prefix(models.Model):\n    \"\"\"From NAV Wiki: The prefix table stores IP prefixes.\"\"\"\n\n    objects = PrefixManager()\n\n    id = models.AutoField(db_column='prefixid', primary_key=True)\n    net_address = CIDRField(db_column='netaddr', unique=True)\n    vlan = models.ForeignKey(\n        'Vlan',\n        on_delete=models.CASCADE,\n        db_column='vlanid',\n        related_name=\"prefixes\",\n    )\n    usages = models.ManyToManyField(\n        'Usage',\n        through='PrefixUsage',\n        through_fields=('prefix', 'usage'),\n        related_name=\"prefixes\",\n    )\n\n    class Meta(object):\n        db_table = 'prefix'\n\n    def __str__(self):\n        if self.vlan:\n            return '%s (vlan %s)' % (self.net_address, self.vlan)\n        else:\n            return self.net_address\n\n    def get_prefix_length(self):\n        \"\"\"Returns the prefix mask length.\"\"\"\n        ip = IPy.IP(self.net_address)\n        return ip.prefixlen()\n\n    def get_prefix_size(self):\n        ip = IPy.IP(self.net_address)\n        return ip.len()\n\n    def get_router_ports(self):\n        \"\"\"Returns a ordered list of GwPortPrefix objects on this prefix\"\"\"\n        return (\n            self.gwport_prefixes.filter(\n                interface__netbox__category__id__in=('GSW', 'GW')\n            )\n            .select_related('interface', 'interface__netbox')\n            .order_by('-virtual', 'gw_ip')\n        )\n\n    def get_graph_url(self):\n        \"\"\"Creates the graph url used for graphing this prefix\"\"\"\n        path = partial(metric_path_for_prefix, self.net_address)\n        ip_count = 'alias({0}, \"IP addresses \")'.format(path('ip_count'))\n        ip_range = 'alias({0}, \"Max addresses\")'.format(path('ip_range'))\n        mac_count = 'alias({0}, \"MAC addresses\")'.format(path('mac_count'))\n        metrics = [ip_count, mac_count]\n        if IPy.IP(self.net_address).version() == 4:\n            metrics.append(ip_range)\n        return get_simple_graph_url(metrics, title=str(self), format='json')\n\n    def get_absolute_url(self):\n        return reverse('prefix-details', args=[self.pk])\n\n    def get_dhcp_graph_urls(self):\n        \"\"\"\n        Creates urls to graphs showing range/pool/subnet utilization, with one\n        url (and one graph) per set of ranges/pools/subnets in graphite with the\n        same ip_version, server_name and group where at least one\n        range/pool/subnet intersects this prefix.\n        \"\"\"\n        prefix = IPy.IP(self.net_address)\n        return nav.dhcpstats.common.fetch_graph_urls_for_prefixes([prefix])\n\n\nclass Vlan(models.Model):\n    \"\"\"From NAV Wiki: The vlan table defines the IP broadcast domain / vlan. A\n    broadcast domain often has a vlan value, it may consist of many IP\n    prefixes, it is of a network type, it is used by an organization (org) and\n    has a user group (usage) within the org.\"\"\"\n\n    id = models.AutoField(db_column='vlanid', primary_key=True)\n    vlan = models.IntegerField(null=True, blank=True)\n    net_type = models.ForeignKey(\n        'NetType',\n        on_delete=models.CASCADE,\n        db_column='nettype',\n        related_name=\"vlans\",\n    )\n    organization = models.ForeignKey(\n        'Organization',\n        on_delete=models.CASCADE,\n        db_column='orgid',\n        null=True,\n        blank=True,\n        related_name=\"vlans\",\n    )\n    usage = models.ForeignKey(\n        'Usage',\n        on_delete=models.CASCADE,\n        db_column='usageid',\n        null=True,\n        blank=True,\n        related_name=\"vlans\",\n    )\n    net_ident = VarcharField(db_column='netident', null=True, blank=True)\n    description = VarcharField(null=True, blank=True)\n    netbox = models.ForeignKey(\n        'NetBox',\n        on_delete=models.SET_NULL,\n        db_column='netboxid',\n        null=True,\n        blank=True,\n        related_name=\"vlans\",\n    )\n\n    class Meta(object):\n        db_table = 'vlan'\n\n    def __str__(self):\n        result = ''\n        if self.vlan:\n            result += '%d' % self.vlan\n        else:\n            result += 'N/A'\n        if self.net_ident:\n            result += ' (%s)' % self.net_ident\n        return result\n\n    def has_meaningful_net_ident(self):\n        if not self.net_ident:\n            return False\n        if self.net_ident.upper() == \"VLAN{}\".format(self.vlan):\n            return False\n        return True\n\n    def get_graph_urls(self):\n        \"\"\"Fetches the graph urls for graphing this vlan\"\"\"\n        return [url for url in [self.get_graph_url(f) for f in [4, 6]] if url]\n\n    def get_graph_url(self, family=4):\n        \"\"\"Creates a graph url for the given family with all prefixes stacked\"\"\"\n        assert family in [4, 6]\n        prefixes = self.prefixes.extra(where=[\"family(netaddr)=%s\" % family])\n        # Put metainformation in the alias so that Rickshaw can pick it up and\n        # know how to draw the series.\n        series = [\n            \"alias({}, 'renderer=area;;{}')\".format(\n                metric_path_for_prefix(prefix.net_address, 'ip_count'),\n                prefix.net_address,\n            )\n            for prefix in prefixes\n        ]\n        if series:\n            if family == 4:\n                series.append(\n                    \"alias(sumSeries(%s), 'Max addresses')\"\n                    % \",\".join(\n                        [\n                            metric_path_for_prefix(prefix.net_address, 'ip_range')\n                            for prefix in prefixes\n                        ]\n                    )\n                )\n            return get_simple_graph_url(\n                series,\n                title=\"Total IPv{} addresses on vlan {} - stacked\".format(\n                    family, str(self)\n                ),\n                format='json',\n            )\n\n    def get_dhcp_graph_urls(self):\n        \"\"\"\n        Creates urls to graphs showing range/pool/subnet utilization, with one\n        url (and one graph) per set of ranges/pools/subnets in graphite with the\n        same ip_version, server_name and group where at least one\n        range/pool/subnet intersects this vlan.\n        \"\"\"\n        prefixes = [IPy.IP(prefix.net_address) for prefix in self.prefixes.all()]\n        return nav.dhcpstats.common.fetch_graph_urls_for_prefixes(prefixes)\n\n\nclass NetType(models.Model):\n    \"\"\"From NAV Wiki: The nettype table defines network type;lan, core, link,\n    elink, loopback, closed, static, reserved, scope. The network types are\n    predefined in NAV and may not be altered.\"\"\"\n\n    id = VarcharField(db_column='nettypeid', primary_key=True)\n    description = VarcharField(db_column='descr')\n    edit = models.BooleanField(default=False)\n\n    class Meta(object):\n        db_table = 'nettype'\n\n    def __str__(self):\n        return self.id\n\n\nclass PrefixUsage(models.Model):\n    \"\"\"Combines prefixes and usages for tagging of prefixes\"\"\"\n\n    id = models.AutoField(db_column='prefix_usage_id', primary_key=True)\n    prefix = models.ForeignKey('Prefix', on_delete=models.CASCADE, db_column='prefixid')\n    usage = models.ForeignKey('Usage', on_delete=models.CASCADE, db_column='usageid')\n\n    class Meta(object):\n        db_table = 'prefix_usage'\n\n    def __str__(self):\n        return \"{}:{}\".format(self.prefix.net_address, self.usage.id)\n\n\nclass Usage(models.Model):\n    \"\"\"From NAV Wiki: The usage table defines the user group (student, staff\n    etc). Usage categories are maintained in the edit database tool.\"\"\"\n\n    id = models.CharField(db_column='usageid', max_length=30, primary_key=True)\n    description = VarcharField(db_column='descr')\n\n    class Meta(object):\n        db_table = 'usage'\n        verbose_name = 'usage'\n        ordering = ['id']\n\n    def __str__(self):\n        return '%s (%s)' % (self.id, self.description)\n\n\nclass Arp(models.Model):\n    \"\"\"From NAV Wiki: The arp table contains (ip, mac, time\n    start, time end).\"\"\"\n\n    id = models.AutoField(db_column='arpid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=True,\n        related_name=\"arp_set\",\n    )\n    prefix = models.ForeignKey(\n        'Prefix',\n        on_delete=models.CASCADE,\n        db_column='prefixid',\n        null=True,\n        related_name=\"arp_set\",\n    )\n    sysname = VarcharField()\n    ip = models.GenericIPAddressField()\n    # TODO: Create MACAddressField in Django\n    mac = models.CharField(max_length=17)\n    start_time = models.DateTimeField(auto_now_add=True)\n    end_time = DateTimeInfinityField()\n\n    class Meta(object):\n        db_table = 'arp'\n\n    def __str__(self):\n        return '%s to %s' % (self.ip, self.mac)\n\n\n#######################################################################\n### Switch/topology\n\n\nclass SwPortVlan(models.Model):\n    \"\"\"From NAV Wiki: The swportvlan table defines the\n    vlan values on all switch ports. dot1q trunk ports\n    typically have several rows in this table.\"\"\"\n\n    DIRECTION_UNDEFINED = 'x'\n    DIRECTION_UP = 'o'\n    DIRECTION_DOWN = 'n'\n    DIRECTION_BLOCKED = 'b'\n    DIRECTION_CHOICES = (\n        (DIRECTION_UNDEFINED, 'undefined'),\n        (DIRECTION_UP, 'up'),\n        (DIRECTION_DOWN, 'down'),\n        (DIRECTION_BLOCKED, 'blocked'),\n    )\n\n    id = models.AutoField(db_column='swportvlanid', primary_key=True)\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"swport_vlans\",\n    )\n    vlan = models.ForeignKey(\n        'Vlan',\n        on_delete=models.CASCADE,\n        db_column='vlanid',\n        related_name=\"swport_vlans\",\n    )\n    direction = models.CharField(\n        max_length=1, choices=DIRECTION_CHOICES, default=DIRECTION_UNDEFINED\n    )\n\n    class Meta(object):\n        db_table = 'swportvlan'\n        unique_together = (('interface', 'vlan'),)\n\n    def __str__(self):\n        return '%s, on vlan %s' % (self.interface, self.vlan)\n\n\nclass SwPortAllowedVlan(models.Model):\n    \"\"\"Stores a hexstring that encodes the list of VLANs that are allowed to\n    traverse a trunk port.\n\n    \"\"\"\n\n    interface = models.OneToOneField(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        primary_key=True,\n        related_name=\"swport_allowed_vlan\",\n    )\n    hex_string = VarcharField(db_column='hexstring')\n    _cached_hex_string = ''\n    _cached_vlan_set = None\n\n    class Meta(object):\n        db_table = 'swportallowedvlan'\n\n    def __contains__(self, item):\n        vlans = self.get_allowed_vlans()\n        return item in vlans\n\n    def get_allowed_vlans(self):\n        \"\"\"Converts the plaintext formatted hex_string attribute to a list of\n        VLAN numbers.\n\n        :returns: A set of integers.\n        \"\"\"\n        if self._cached_hex_string != self.hex_string:\n            self._cached_hex_string = self.hex_string\n            self._cached_vlan_set = self._calculate_allowed_vlans()\n\n        return self._cached_vlan_set or set()\n\n    @staticmethod\n    def vlan_list_to_hex(vlans):\n        \"\"\"Convert a list of VLAN numbers to a hexadecimal string.\"\"\"\n        # Make sure there are at least 256 digits (128 octets) in the\n        # resulting hex string.  This is necessary for parts of NAV to\n        # parse the hexstring correctly.\n        max_vlan = max(vlans)\n        needed_octets = int(math.ceil((max_vlan + 1) / 8.0))\n        bits = BitVector(b'\\x00' * max(needed_octets, 128))\n        for vlan in vlans:\n            bits[vlan] = True\n        return bits.to_hex()\n\n    def set_allowed_vlans(self, vlans):\n        self.hex_string = self.vlan_list_to_hex(vlans)\n\n    def _calculate_allowed_vlans(self):\n        bits = BitVector(bytes.fromhex(self.hex_string))\n        return set(bits.get_set_bits())\n\n    def __str__(self):\n        return 'Allowed vlans for swport %s' % self.interface\n\n\nclass SwPortBlocked(models.Model):\n    \"\"\"This table defines the spanning tree blocked ports for a given vlan for\n    a given switch port.\"\"\"\n\n    id = models.AutoField(db_column='swportblockedid', primary_key=True)\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"blocked_swports\",\n    )\n    vlan = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'swportblocked'\n        unique_together = (('interface', 'vlan'),)  # Primary key\n\n    def __str__(self):\n        return '%d, at %s' % (self.vlan, self.interface)\n\n\nclass AdjacencyCandidate(models.Model):\n    \"\"\"A candidate for netbox/interface adjacency.\n\n    Used in the process of building the physical topology of the\n    network. AdjacencyCandidate defines a candidate for next hop physical\n    neighbor.\n\n    \"\"\"\n\n    id = models.AutoField(db_column='adjacency_candidateid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"from_adjancency_candidates\",\n    )\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"from_adjancency_candidates\",\n    )\n    to_netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='to_netboxid',\n        related_name='to_adjacency_candidates',\n    )\n    to_interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='to_interfaceid',\n        null=True,\n        related_name='to_adjacency_candidates',\n    )\n    source = VarcharField()\n    miss_count = models.IntegerField(db_column='misscnt', default=0)\n\n    class Meta(object):\n        db_table = 'adjacency_candidate'\n        unique_together = (\n            ('netbox', 'interface', 'to_netbox', 'to_interface', 'source'),\n        )\n\n    def __str__(self):\n        return '%s:%s %s candidate %s:%s' % (\n            self.netbox,\n            self.interface,\n            self.source,\n            self.to_netbox,\n            self.to_interface,\n        )\n\n\nclass NetboxVtpVlan(models.Model):\n    \"\"\"From NAV Wiki: A help table that contains the vtp vlan database of a\n    switch. For certain cisco switches cam information is gathered using a\n    community@vlan string. It is then necessary to know all vlans that are\n    active on a switch. The vtp vlan table is an extra source of\n    information.\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking a primary key\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"netbox_vtp_vlans\",\n    )\n    vtp_vlan = models.IntegerField(db_column='vtpvlan')\n\n    class Meta(object):\n        db_table = 'netbox_vtpvlan'\n        unique_together = (('netbox', 'vtp_vlan'),)\n\n    def __str__(self):\n        return '%d, at %s' % (self.vtp_vlan, self.netbox)\n\n\nclass Cam(models.Model):\n    \"\"\"From NAV Wiki: The cam table defines (swport, mac, time start, time\n    end)\"\"\"\n\n    id = models.AutoField(db_column='camid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=True,\n        related_name=\"cam_set\",\n    )\n    sysname = VarcharField()\n    ifindex = models.IntegerField()\n    module = models.CharField(max_length=4)\n    port = VarcharField()\n    start_time = models.DateTimeField(auto_now_add=True)\n    end_time = DateTimeInfinityField()\n    miss_count = models.IntegerField(db_column='misscnt', default=0)\n    # TODO: Create MACAddressField in Django\n    mac = models.CharField(max_length=17)\n\n    class Meta(object):\n        db_table = 'cam'\n        unique_together = (\n            ('netbox', 'sysname', 'module', 'port', 'mac', 'start_time'),\n        )\n\n    def __str__(self):\n        return '%s, %s' % (self.mac, self.netbox)\n\n\n#######################################################################\n### Interfaces and related attributes\n\n\nclass Interface(models.Model):\n    \"\"\"The network interfaces, both physical and virtual, of a Netbox.\"\"\"\n\n    OPER_UP = 1\n    OPER_DOWN = 2\n    OPER_TESTING = 3\n    OPER_UNKNOWN = 4\n    OPER_DORMANT = 5\n    OPER_NOTPRESENT = 6\n    OPER_LOWERLAYERDOWN = 7\n\n    OPER_STATUS_CHOICES = (\n        (OPER_UP, 'up'),\n        (OPER_DOWN, 'down'),\n        (OPER_TESTING, 'testing'),\n        (OPER_UNKNOWN, 'unknown'),\n        (OPER_DORMANT, 'dormant'),\n        (OPER_NOTPRESENT, 'not present'),\n        (OPER_LOWERLAYERDOWN, 'lower layer down'),\n    )\n\n    ADM_UP = 1\n    ADM_DOWN = 2\n    ADM_TESTING = 3\n\n    ADM_STATUS_CHOICES = (\n        (ADM_UP, 'up'),\n        (ADM_DOWN, 'down'),\n        (ADM_TESTING, 'testing'),\n    )\n\n    DUPLEX_FULL = 'f'\n    DUPLEX_HALF = 'h'\n    DUPLEX_CHOICES = (\n        (DUPLEX_FULL, 'full duplex'),\n        (DUPLEX_HALF, 'half duplex'),\n    )\n\n    # These are the subset of IF-MIB::ifType values NAV considers to be\n    # ethernet interfaces. See section 3.2.4 of RFC 3635 for the full list of\n    # ifType values:\n    ETHERNET_INTERFACE_TYPES = (\n        6,  # ethernetCsmacd\n        62,  # fastEther\n        69,  # fastEtherFX\n        117,  # gigabitEthernet\n    )\n\n    id = models.AutoField(db_column='interfaceid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"interfaces\",\n    )\n    module = models.ForeignKey(\n        'Module',\n        on_delete=models.CASCADE,\n        db_column='moduleid',\n        null=True,\n        related_name=\"interfaces\",\n    )\n    ifindex = models.IntegerField()\n    ifname = VarcharField()\n    ifdescr = VarcharField()\n    iftype = models.IntegerField()\n    speed = models.FloatField()\n    ifphysaddress = models.CharField(max_length=17, null=True)\n    ifadminstatus = models.IntegerField(choices=ADM_STATUS_CHOICES)\n    ifoperstatus = models.IntegerField(choices=OPER_STATUS_CHOICES)\n    iflastchange = models.IntegerField()\n    ifconnectorpresent = models.BooleanField(default=False)\n    ifpromiscuousmode = models.BooleanField(default=False)\n    ifalias = VarcharField()\n\n    baseport = models.IntegerField()\n    media = VarcharField(null=True)\n    vlan = models.IntegerField()\n    trunk = models.BooleanField(default=False)\n    duplex = models.CharField(max_length=1, choices=DUPLEX_CHOICES, null=True)\n\n    to_netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='to_netboxid',\n        null=True,\n        related_name='connected_to_interface',\n    )\n    to_interface = models.ForeignKey(\n        'self',\n        on_delete=models.CASCADE,\n        db_column='to_interfaceid',\n        null=True,\n        related_name='connected_to_interface',\n    )\n\n    gone_since = models.DateTimeField()\n\n    class Meta(object):\n        db_table = 'interface'\n        ordering = ('baseport', 'ifname')\n\n    def __init__(self, *args, **kwargs):\n        super(Interface, self).__init__(*args, **kwargs)\n        # Create cache dictionary\n        # FIXME: Replace with real Django caching\n        self.time_since_activity_cache = {}\n\n    def __str__(self):\n        return '{ifname} at {netbox}'.format(ifname=self.ifname, netbox=self.netbox)\n\n    @property\n    def audit_logname(self):\n        template = '{netbox}:{ifname}'\n        return template.format(\n            ifname=self.ifname, netbox=self.netbox.get_short_sysname()\n        )\n\n    @property\n    def vlan_netident(self):\n        \"\"\"Returns the netident of the VLAN assigned to this port.\n        Returns None if the port is a trunk port or has no VLAN assigned.\n        \"\"\"\n        if self.trunk:\n            return None\n        swportvlan = self.swport_vlans.first()\n        return swportvlan.vlan.net_ident if swportvlan else None\n\n    @classmethod\n    def sort_ports_by_ifname(cls, ports):\n        return sorted(ports, key=lambda p: nav.natsort.split(p.ifname))\n\n    def get_absolute_url(self):\n        kwargs = {\n            'netbox_sysname': self.netbox.sysname,\n            'port_id': self.id,\n        }\n        return reverse('ipdevinfo-interface-details', kwargs=kwargs)\n\n    def get_vlan_numbers(self):\n        \"\"\"List of VLAN numbers related to the port\"\"\"\n\n        # XXX: This causes a DB query per port\n        vlans = [\n            swpv.vlan.vlan\n            for swpv in self.swport_vlans.select_related('vlan', 'interface')\n        ]\n        if self.vlan is not None and self.vlan not in vlans:\n            vlans.append(self.vlan)\n        vlans.sort()\n        return vlans\n\n    def get_allowed_vlan_ranges(self):\n        \"\"\"Returns the set of allowed vlans as a list of ranges\n\n        :rtype: nav.util.NumberRange\n        \"\"\"\n        try:\n            allowed = self.swport_allowed_vlan.get_allowed_vlans()\n        except SwPortAllowedVlan.DoesNotExist:\n            pass\n        else:\n            return util.NumberRange(allowed)\n\n    def get_last_cam_record(self):\n        \"\"\"Returns the newest cam record gotten from this switch port.\"\"\"\n        try:\n            return self.netbox.cam_set.filter(ifindex=self.ifindex).latest('end_time')\n        except Cam.DoesNotExist:\n            return None\n\n    def get_active_time(self, interval=600):\n        \"\"\"\n        Time since last CAM activity on port, looking at CAM entries\n        for the last ``interval`` days.\n\n        Returns None if no activity is found, else number of days since last\n        activity as a datetime.timedelta object.\n        \"\"\"\n\n        # Check cache for result\n        if interval in self.time_since_activity_cache:\n            return self.time_since_activity_cache[interval]\n\n        min_time = dt.datetime.now() - dt.timedelta(days=interval)\n        try:\n            # XXX: This causes a DB query per port\n            # Use .values() to avoid creating additional objects we do not need\n            last_cam_entry_end_time = (\n                self.netbox.cam_set.filter(ifindex=self.ifindex, end_time__gt=min_time)\n                .order_by('-end_time')\n                .values('end_time')[0]['end_time']\n            )\n        except (Cam.DoesNotExist, IndexError):\n            # Inactive/not in use\n            return None\n\n        if last_cam_entry_end_time == dt.datetime.max:\n            # Active now\n            self.time_since_activity_cache[interval] = dt.timedelta(days=0)\n        else:\n            # Active some time inside the given interval\n            self.time_since_activity_cache[interval] = (\n                dt.datetime.now() - last_cam_entry_end_time\n            )\n\n        return self.time_since_activity_cache[interval]\n\n    def get_port_metrics(self):\n        \"\"\"Gets a list of available Graphite metrics related to this Interface.\n\n        :returns: A list of dicts describing the metrics, e.g.:\n                  {id:\"nav.devices.some-gw.ports.gi1_1.ifInOctets\",\n                   suffix:\"ifInOctets\"}\n\n        \"\"\"\n        base = metric_prefix_for_interface(self.netbox, self.ifname)\n\n        nodes = get_all_leaves_below(base)\n        result = [\n            dict(\n                id=n,\n                suffix=n.replace(base + '.', ''),\n                url=get_simple_graph_url(n, '1day'),\n            )\n            for n in nodes\n        ]\n        return result\n\n    def get_link_display(self):\n        \"\"\"Returns a display value for this interface's link status.\"\"\"\n        if self.ifoperstatus == self.OPER_UP:\n            return \"Active\"\n        elif self.ifadminstatus == self.ADM_DOWN:\n            return \"Disabled\"\n        return \"Inactive\"\n\n    def get_trunkvlans_as_range(self):\n        \"\"\"\n        Converts the list of allowed vlans on trunk to a string of ranges.\n        Ex: [1, 2, 3, 4, 7, 8, 10] -> \"1-4,7-8,10\"\n        \"\"\"\n\n        def as_range(iterable):\n            list_ = list(iterable)\n            if len(list_) > 1:\n                return '{0}-{1}'.format(list_[0], list_[-1])\n            else:\n                return '{0}'.format(list_[0])\n\n        if self.trunk:\n            return \",\".join(\n                as_range(y)\n                for x, y in groupby(\n                    sorted(self.swport_allowed_vlan.get_allowed_vlans()),\n                    lambda n, c=count(): n - next(c),\n                )\n            )\n        else:\n            return \"\"\n\n    def is_swport(self):\n        \"\"\"Returns True if the interface is configured as a switch-port\"\"\"\n        return self.baseport is not None\n\n    def is_gwport(self):\n        \"\"\"Returns True if the interface has an IP address.\n\n        NOTE: This doesn't necessarily mean the port forwards packets for\n        other hosts.\n\n        \"\"\"\n        return self.gwport_prefixes.count() > 0\n\n    def is_physical_port(self):\n        \"\"\"Returns true if this interface has a physical connector present\"\"\"\n        return self.ifconnectorpresent\n\n    def is_admin_up(self):\n        \"\"\"Returns True if interface is administratively up\"\"\"\n        return self.ifadminstatus == self.ADM_UP\n\n    def is_oper_up(self):\n        \"\"\"Returns True if interface is operationally up\"\"\"\n        return self.ifoperstatus == self.OPER_UP\n\n    def below_me(self):\n        \"\"\"Returns interfaces stacked with this one on a layer below\"\"\"\n        return Interface.objects.filter(lower_layer__higher=self)\n\n    def above_me(self):\n        \"\"\"Returns interfaces stacked with this one on a layer above\"\"\"\n        return Interface.objects.filter(higher_layer__lower=self)\n\n    def get_aggregator(self):\n        \"\"\"Returns the interface that is selected as an aggregator for me.\n\n        Naively selects the aggregator with the lowest ifIndex in cases where\n        there are multiple aggregators (may happen on e.g. Juniper devices,\n        due to stacking of logical units)\n        \"\"\"\n        return (\n            Interface.objects.filter(aggregators__interface=self)\n            .order_by('ifindex')\n            .first()\n        )\n\n    def get_bundled_interfaces(self):\n        \"\"\"Returns the interfaces that are bundled on this interface\"\"\"\n        return Interface.objects.filter(bundled__aggregator=self)\n\n    def is_degraded(self):\n        \"\"\"\n        Returns True if this aggregator has been degraded, False if it has\n        not, None if this interface is not a known aggregator.\n        \"\"\"\n        aggregates = self.get_bundled_interfaces()\n        if aggregates:\n            return any(not agg.is_oper_up() for agg in aggregates)\n\n    def get_sorted_vlans(self):\n        \"\"\"Returns a queryset of sorted swportvlans\"\"\"\n        return self.swport_vlans.select_related('vlan').order_by('vlan__vlan')\n\n    def is_on_maintenace(self):\n        \"\"\"Returns True if the owning Netbox is on maintenance\"\"\"\n        return self.netbox.is_on_maintenance()\n\n    def has_unignored_unrecognized_neighbors(self):\n        \"\"\"Returns True if this interface has unrecognized neighbors that are\n        not ignored\n        \"\"\"\n        return (\n            self.unrecognized_neighbors.filter(ignored_since__isnull=True).count() > 0\n        )\n\n\nclass InterfaceStack(models.Model):\n    \"\"\"Interface layered stacking relationships\"\"\"\n\n    higher = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='higher',\n        related_name='higher_layer',\n    )\n    lower = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='lower',\n        related_name='lower_layer',\n    )\n\n    class Meta(object):\n        db_table = 'interface_stack'\n\n\nclass InterfaceAggregate(models.Model):\n    \"\"\"Interface aggregation relationships\"\"\"\n\n    aggregator = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='aggregator',\n        related_name='aggregators',\n    )\n    interface = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='interface',\n        related_name='bundled',\n    )\n\n    class Meta(object):\n        db_table = 'interface_aggregate'\n\n\nclass IanaIftype(models.Model):\n    \"\"\"IANA-registered iftype values\"\"\"\n\n    iftype = models.IntegerField(primary_key=True)\n    name = VarcharField()\n    descr = VarcharField()\n\n    class Meta(object):\n        db_table = 'iana_iftype'\n\n\nclass RoutingProtocolAttribute(models.Model):\n    \"\"\"Routing protocol metric as configured on a routing interface\"\"\"\n\n    id = models.IntegerField(primary_key=True)\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"routing_protocol_attributes\",\n    )\n    name = VarcharField(db_column='protoname')\n    metric = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'rproto_attr'\n\n\nclass GatewayPeerSession(models.Model):\n    \"\"\"Gateway protocol session decriptor\"\"\"\n\n    PROTOCOL_BGP = 1\n    PROTOCOL_OSPF = 2\n    PROTOCOL_ISIS = 3\n\n    PROTOCOL_CHOICES = (\n        (PROTOCOL_BGP, 'BGP'),\n        (PROTOCOL_OSPF, 'OSPF'),\n        (PROTOCOL_ISIS, 'IS-IS'),\n    )\n\n    id = models.AutoField(primary_key=True, db_column='peersessionid')\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"gateway_peer_sessions\",\n    )\n    protocol = models.IntegerField(choices=PROTOCOL_CHOICES)\n    peer = models.GenericIPAddressField()\n    state = VarcharField()\n    local_as = models.BigIntegerField(null=True)\n    remote_as = models.BigIntegerField(null=True)\n    adminstatus = VarcharField()\n\n    class Meta(object):\n        db_table = 'peersession'\n\n    def get_peer_as_netbox(self):\n        \"\"\"If the peer of this partner is a known Netbox, it is returned.\n\n        :rtype: Netbox\n\n        \"\"\"\n        expr = Q(ip=self.peer) | Q(interfaces__gwport_prefixes__gw_ip=self.peer)\n        netboxes = Netbox.objects.filter(expr)\n        if netboxes:\n            return netboxes[0]\n\n    def get_peer_display(self):\n        \"\"\"Returns a display name for the peer.\n\n        Will access the database to see if the peer is a known Netbox.\n\n        \"\"\"\n        peer = self.get_peer_as_netbox()\n        return \"{} ({})\".format(peer, self.peer) if peer else str(self.peer)\n\n    def __repr__(self):\n        return (\n            \"<GatewayPeerSession: protocol={protocol} netbox={netbox}\"\n            \" peer={peer} state={state} adminstatus={adminstatus}>\"\n        ).format(\n            protocol=self.get_protocol_display(),\n            netbox=self.netbox,\n            peer=self.peer,\n            state=self.state,\n            adminstatus=self.adminstatus,\n        )\n\n    def __str__(self):\n        tmpl = \"{netbox} {proto} session with {peer}\"\n        return tmpl.format(\n            netbox=self.netbox,\n            proto=self.get_protocol_display(),\n            peer=self.get_peer_display(),\n        )\n\n\nclass Sensor(models.Model):\n    \"\"\"\n    This table contains meta-data about available sensors in\n    network equipment.\n\n    Information from this table is used to poll metrics and display graphs for\n    sensor data.\n    \"\"\"\n\n    UNIT_OTHER = 'other'  # Other than those listed\n    UNIT_UNKNOWN = 'unknown'  # unknown measurement, or arbitrary,\n    # relative numbers\n    UNIT_VOLTS_AC = 'voltsAC'  # electric potential\n    UNIT_VOLTS_DC = 'voltsDC'  # electric potential\n    UNIT_AMPERES = 'amperes'  # electric current\n    UNIT_WATTS = 'watts'  # power\n    UNIT_DBM = 'dBm'  # power (optics)\n    UNIT_HERTZ = 'hertz'  # frequency\n    UNIT_CELSIUS = 'celsius'  # temperature\n    UNIT_FAHRENHEIT = 'fahrenheit'  # temperature\n    UNIT_PERCENT_RELATIVE_HUMIDITY = 'percentRH'  # percent relative humidity\n    UNIT_RPM = 'rpm'  # shaft revolutions per minute\n    UNIT_CMM = 'cmm'  # cubic meters per minute (airflow)\n    UNIT_LPM = 'l/min'  # liters per minute (waterflow)\n    UNIT_TRUTHVALUE = 'boolean'  # value takes { true(1), false(2) }\n    UNIT_VOLTAMPERES = 'voltsamperes'  # apparent power\n    UNIT_VAR = 'var'  # Volt-ampere reactive\n    UNIT_WATTHOURS = 'watthours'  # electric energy consumed\n    UNIT_VOLTAMPEREHOURS = 'voltamperehours'  # apperant consumed energy\n    UNIT_PERCENT = '%'  # relative values\n    UNIT_MPS = 'm/s'  # speed\n    UNIT_PASCAL = 'pascal'  # pressure\n    UNIT_PSI = 'psi'  # pressure\n    UNIT_BAR = 'bar'  # pressure\n    UNIT_GRAMS = 'grams'  # weight\n    UNIT_FEET = 'feet'  # distance\n    UNIT_INCHES = 'inches'  # distance\n    UNIT_METERS = 'meters'  # distance\n    UNIT_DEGREES = 'degrees'  # angle\n    UNIT_LUX = 'lux'  # illuminance\n    UNIT_GPCM = 'grams/m3'  # gass density?\n    UNIT_SECONDS = 'seconds'  # time\n    UNIT_MINUTES = 'minutes'  # time\n\n    UNIT_OF_MEASUREMENTS_CHOICES = (\n        (UNIT_OTHER, 'Other'),\n        (UNIT_UNKNOWN, 'Unknown'),\n        (UNIT_VOLTS_AC, 'VoltsAC'),\n        (UNIT_VOLTS_DC, 'VoltsDC'),\n        (UNIT_AMPERES, 'Amperes'),\n        (UNIT_WATTS, 'Watts'),\n        (UNIT_DBM, 'dBm'),\n        (UNIT_HERTZ, 'Hertz'),\n        (UNIT_CELSIUS, 'Celsius'),\n        (UNIT_FAHRENHEIT, 'Fahrenheit'),\n        (UNIT_PERCENT_RELATIVE_HUMIDITY, 'Relative humidity'),\n        (UNIT_RPM, 'Revolutions per minute'),\n        (UNIT_CMM, 'Cubic meters per minute'),\n        (UNIT_LPM, 'Liters per minute'),\n        (UNIT_TRUTHVALUE, 'Boolean'),\n        (UNIT_VOLTAMPERES, 'Volt-ampere'),\n        (UNIT_VAR, 'Volt-ampere reactive'),\n        (UNIT_VOLTAMPEREHOURS, 'Volt-ampere hours'),\n        (UNIT_WATTHOURS, 'Watt hours'),\n        (UNIT_PERCENT, '%'),\n        (UNIT_MPS, 'meters per second'),\n        (UNIT_PASCAL, 'pascal'),\n        (UNIT_PSI, 'psi'),\n        (UNIT_BAR, 'bar'),\n        (UNIT_GRAMS, 'gram'),\n        (UNIT_FEET, 'Feet'),\n        (UNIT_INCHES, 'Inches'),\n        (UNIT_METERS, 'Meters'),\n        (UNIT_DEGREES, 'Degrees'),\n        (UNIT_LUX, 'Lux'),\n        (UNIT_GPCM, 'Grams per cubic meter'),\n        (UNIT_SECONDS, 'Seconds'),\n        (UNIT_MINUTES, 'Minutes'),\n    )\n\n    SCALE_YOCTO = 'yocto'  # 10^-24\n    SCALE_ZEPTO = 'zepto'  # 10^-21\n    SCALE_ATTO = 'atto'  # 10^-18\n    SCALE_FEMTO = 'femto'  # 10^-15\n    SCALE_PICO = 'pico'  # 10^-12\n    SCALE_NANO = 'nano'  # 10^-9\n    SCALE_MICRO = 'micro'  # 10^-6\n    SCALE_MILLI = 'milli'  # 10^-3\n    SCALE_UNITS = 'units'  # 10^0\n    SCALE_KILO = 'kilo'  # 10^3\n    SCALE_MEGA = 'mega'  # 10^6\n    SCALE_GIGA = 'giga'  # 10^9\n    SCALE_TERA = 'tera'  # 10^12\n    SCALE_EXA = 'exa'  # 10^15\n    SCALE_PETA = 'peta'  # 10^18\n    SCALE_ZETTA = 'zetta'  # 10^21\n    SCALE_YOTTA = 'yotta'  # 10^24\n\n    DATA_SCALE_CHOICES = (\n        (SCALE_YOCTO, 'Yocto'),\n        (SCALE_ZEPTO, 'Zepto'),\n        (SCALE_ATTO, 'Atto'),\n        (SCALE_FEMTO, 'Femto'),\n        (SCALE_PICO, 'Pico'),\n        (SCALE_NANO, 'Nano'),\n        (SCALE_MICRO, 'Micro'),\n        (SCALE_MILLI, 'Milli'),\n        (SCALE_UNITS, 'No unit scaling'),\n        (SCALE_KILO, 'Kilo'),\n        (SCALE_MEGA, 'Mega'),\n        (SCALE_GIGA, 'Giga'),\n        (SCALE_TERA, 'Tera'),\n        (SCALE_EXA, 'Exa'),\n        (SCALE_PETA, 'Peta'),\n        (SCALE_ZETTA, 'Zetta'),\n        (SCALE_YOTTA, 'Yotta'),\n    )\n    ALERT_TYPE_WARNING = 1\n    ALERT_TYPE_ALERT = 2\n    ALERT_TYPE_CHOICES = (\n        (ALERT_TYPE_ALERT, 'A red alert'),\n        (ALERT_TYPE_WARNING, 'An orange warning'),\n    )\n\n    id = models.AutoField(db_column='sensorid', primary_key=True)\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"sensors\",\n    )\n    interface = models.ForeignKey(\n        Interface,\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        null=True,\n        related_name=\"sensors\",\n    )\n    oid = VarcharField(db_column=\"oid\")\n    unit_of_measurement = VarcharField(\n        db_column=\"unit_of_measurement\", choices=UNIT_OF_MEASUREMENTS_CHOICES\n    )\n    data_scale = VarcharField(db_column=\"data_scale\", choices=DATA_SCALE_CHOICES)\n    precision = models.IntegerField(db_column=\"precision\")\n    human_readable = VarcharField(db_column=\"human_readable\")\n    name = VarcharField(db_column=\"name\")\n    internal_name = VarcharField(db_column=\"internal_name\")\n    mib = VarcharField(db_column=\"mib\")\n    # Gauges\n    display_minimum_user = models.FloatField(\n        db_column=\"display_minimum_user\", null=True\n    )\n    display_maximum_user = models.FloatField(\n        db_column=\"display_maximum_user\", null=True\n    )\n    display_minimum_sys = models.FloatField(db_column=\"display_minimum_sys\", null=True)\n    display_maximum_sys = models.FloatField(db_column=\"display_maximum_sys\", null=True)\n    # Boolean sensors\n    on_message_user = VarcharField(db_column='on_message_user', null=True)\n    on_message_sys = VarcharField(db_column='on_message_sys', null=True)\n    off_message_user = VarcharField(db_column='off_message_user', null=True)\n    off_message_sys = VarcharField(db_column='off_message_sys', null=True)\n    on_state_user = models.IntegerField(db_column='on_state_user', null=True)\n    on_state_sys = models.IntegerField(db_column='on_state_sys', null=True)\n    alert_type = models.IntegerField(\n        db_column='alert_type', choices=ALERT_TYPE_CHOICES, null=True\n    )\n\n    class Meta(object):\n        db_table = 'sensor'\n        ordering = ('name',)\n\n    def __str__(self):\n        return \"Sensor '{}' on {}\".format(\n            self.human_readable or self.internal_name, self.netbox\n        )\n\n    def get_absolute_url(self):\n        return reverse('sensor-details', kwargs={'identifier': self.pk})\n\n    def get_metric_name(self):\n        return metric_path_for_sensor(self.netbox.sysname, self.internal_name)\n\n    def get_graph_url(self, time_frame='1day'):\n        return get_simple_graph_url([self.get_metric_name()], time_frame=time_frame)\n\n    def get_graph(self, format=\"png\"):\n        \"\"\"Returns a Graph object describing a simple Graphite graph URL for this\n        sensor.\n\n        :param format: The format of the desired graph, e.g. `png` or `json`\n        :rtype: Graph\n        \"\"\"\n        alias = (\n            self.human_readable.replace(\"\\n\", \" \") if self.human_readable else self.name\n        )\n        # turns out graphite-web cannot handle non-ascii characters in\n        # aliases. we replace them here so we at least get a graph.\n        #\n        # https://github.com/graphite-project/graphite-web/issues/238\n        # https://github.com/graphite-project/graphite-web/pull/480\n        alias = alias.encode(\"ascii\", errors=\"replace\").decode(\"ascii\")\n\n        scale = (\n            self.get_data_scale_display()\n            if self.data_scale != self.SCALE_UNITS\n            else None\n        )\n        uom = (\n            self.unit_of_measurement\n            if self.unit_of_measurement != self.UNIT_OTHER\n            else None\n        )\n        unit = (scale or \"\") + (uom or \"\")\n\n        metric = self.get_metric_name()\n        target = 'alias({metric}, \"{alias}\")'.format(metric=metric, alias=alias)\n\n        return Graph(targets=[target], format=format, vtitle=unit)\n\n    def get_display_range(self):\n        minimum = 0\n        if self.display_minimum_user is not None:\n            minimum = self.display_minimum_user\n        elif self.display_minimum_sys is not None:\n            minimum = self.display_minimum_sys\n\n        maximum = 100\n        if self.display_maximum_user is not None:\n            maximum = self.display_maximum_user\n        elif self.display_maximum_sys is not None:\n            maximum = self.display_maximum_sys\n        elif self.unit_of_measurement == self.UNIT_CELSIUS:\n            maximum = 50\n\n        return [minimum, maximum]\n\n    @property\n    def on_message(self):\n        return self.on_message_user or self.on_message_sys or 'The alert is active'\n\n    @property\n    def off_message(self):\n        return self.off_message_user or self.off_message_sys or 'No alert'\n\n    @property\n    def on_state(self):\n        if self.on_state_user is not None:\n            return int(self.on_state_user)\n        if self.on_state_sys is not None:\n            return int(self.on_state_sys)\n        return 1\n\n    @property\n    def alert_type_class(self):\n        if self.alert_type == self.ALERT_TYPE_ALERT:\n            return \"error\"\n        return \"warning\"\n\n    @property\n    def normalized_unit(self):\n        \"\"\"Try to normalize the unit of measurement.\n\n        The unit_of_measurement is the value reported by the device, and is\n        all sorts of stuff like percentRH, Celcius. Here we try to normalize\n        those units (in a very basic way).\n        \"\"\"\n        if not self.unit_of_measurement:\n            return \"\"\n\n        units = ['celsius', 'percent']\n        for unit in units:\n            if unit in self.unit_of_measurement.lower():\n                return unit\n        return self.unit_of_measurement\n\n    def get_display_configuration(self):\n        if self.unit_of_measurement == Sensor.UNIT_TRUTHVALUE:\n            return {\n                'on_message': self.on_message,\n                'off_message': self.off_message,\n                'on_state': self.on_state,\n                'alert_type': self.alert_type_class,\n            }\n        return {}\n\n\nclass PowerSupplyOrFan(models.Model):\n    STATE_UP = 'y'\n    STATE_DOWN = 'n'\n    STATE_UNKNOWN = 'u'\n    STATE_WARNING = 'w'\n\n    STATE_CHOICES = (\n        (STATE_UP, \"Up\"),\n        (STATE_DOWN, \"Down\"),\n        (STATE_UNKNOWN, \"Unknown\"),\n        (STATE_WARNING, \"Warning\"),\n    )\n\n    PHYSICAL_CLASS_FAN = \"fan\"\n    PHYSICAL_CLASS_PSU = \"powerSupply\"\n\n    id = models.AutoField(db_column='powersupplyid', primary_key=True)\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"power_supplies_or_fans\",\n    )\n    device = models.ForeignKey(\n        Device,\n        on_delete=models.CASCADE,\n        db_column='deviceid',\n        related_name=\"power_supplies_or_fans\",\n    )\n    name = VarcharField(db_column='name')\n    model = VarcharField(db_column='model', null=True)\n    descr = VarcharField(db_column='descr', null=True)\n    downsince = models.DateTimeField(db_column='downsince', null=True)\n    physical_class = VarcharField(db_column='physical_class')\n    internal_id = VarcharField(db_column='internal_id', null=True)\n    up = VarcharField(db_column='up', choices=STATE_CHOICES)\n\n    class Meta(object):\n        db_table = 'powersupply_or_fan'\n\n    def get_unresolved_alerts(self):\n        \"\"\"Returns a queryset of unresolved psuState alerts for this unit\"\"\"\n        return self.netbox.get_unresolved_alerts().filter(\n            event_type__id__in=['psuState', 'fanState'], subid=self.id\n        )\n\n    def is_on_maintenance(self):\n        \"\"\"Returns True if the owning Netbox is on maintenance\"\"\"\n        return self.netbox.is_on_maintenance()\n\n    def __str__(self):\n        return \"{name} at {netbox}\".format(\n            name=self.name or self.descr, netbox=self.netbox\n        )\n\n    def get_absolute_url(self):\n        \"\"\"Returns a canonical URL to view fan/psu status\"\"\"\n        base = self.netbox.get_absolute_url()\n        return base + \"#!sensors\"\n\n    def is_psu(self):\n        return self.physical_class == self.PHYSICAL_CLASS_PSU\n\n    def is_fan(self):\n        return self.physical_class == self.PHYSICAL_CLASS_FAN\n\n\nclass UnrecognizedNeighbor(models.Model):\n    id = models.AutoField(primary_key=True)\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"unrecognized_neighbors\",\n    )\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        related_name=\"unrecognized_neighbors\",\n    )\n    remote_id = VarcharField()\n    remote_name = VarcharField()\n    source = VarcharField()\n    since = models.DateTimeField(auto_now_add=True)\n    ignored_since = models.DateTimeField()\n\n    class Meta(object):\n        db_table = 'unrecognized_neighbor'\n        ordering = ('remote_id',)\n\n    def __str__(self):\n        return '%s:%s %s neighbor %s (%s)' % (\n            self.netbox.sysname,\n            self.interface.ifname,\n            self.source,\n            self.remote_id,\n            self.remote_name,\n        )\n\n\nclass IpdevpollJobLog(models.Model):\n    id = models.AutoField(primary_key=True)\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        null=False,\n        related_name='job_log',\n    )\n    job_name = VarcharField(null=False, blank=False)\n    end_time = models.DateTimeField(auto_now_add=True, null=False)\n    duration = models.FloatField(null=True)\n    success = models.BooleanField(default=False, null=True)\n    interval = models.IntegerField(null=True)\n\n    class Meta(object):\n        db_table = 'ipdevpoll_job_log'\n\n    def __str__(self):\n        return \"Job %s for %s ended in %s at %s, after %s seconds\" % (\n            self.job_name,\n            self.netbox.sysname,\n            'success' if self.success else 'failure',\n            self.end_time,\n            self.duration,\n        )\n\n    def is_overdue(self):\n        \"\"\"Returns True if the next run if this job is overdue.\n\n        Does _NOT_ check whether the next job has actually run or not,\n        just that it should have been run.  If the interval of this job is\n        unknown, None is returned.\n\n        \"\"\"\n        if self.interval is not None:\n            next_run = self.end_time + dt.timedelta(seconds=self.interval)\n            return next_run < dt.datetime.now()\n\n    def previous(self):\n        \"\"\"Returns the log entry of the previous job of the same name for the\n        same netbox.\n\n        \"\"\"\n        try:\n            prev = IpdevpollJobLog.objects.filter(\n                netbox=self.netbox, job_name=self.job_name, end_time__lt=self.end_time\n            ).order_by('-end_time')[0]\n            return prev\n        except IndexError:\n            return None\n\n    def has_result(self):\n        \"\"\"Returns True if this job ran and had an actual result\"\"\"\n        return self.success is not None\n\n    def get_last_runtimes(self, job_count=30):\n        \"\"\"Get the last runtimes for these jobs on this netbox\n\n        Does not verify that the jobs are sequential, there may be large gaps\n        between the actual runs.\n\n        :returns: A list of lists where the first element is local seconds since\n                  epoch and second element is the runtime\n        \"\"\"\n        jobs = IpdevpollJobLog.objects.filter(\n            job_name=self.job_name, netbox=self.netbox\n        ).order_by('-end_time')[:job_count]\n        runtimes = [\n            [int((j.end_time - dt.datetime(1970, 1, 1)).total_seconds()), j.duration]\n            for j in jobs\n        ]\n        runtimes.reverse()\n        return runtimes\n\n    def get_absolute_url(self):\n        \"\"\"Returns the Netbox' URL\"\"\"\n        return self.netbox.get_absolute_url()\n\n\nclass Netbios(models.Model):\n    \"\"\"Model representing netbios names collected by the netbios tracker\"\"\"\n\n    id = models.AutoField(db_column='netbiosid', primary_key=True)\n    ip = models.GenericIPAddressField()\n    mac = models.CharField(max_length=17, blank=False, null=True)\n    name = VarcharField()\n    server = VarcharField()\n    username = VarcharField()\n    start_time = models.DateTimeField(auto_now_add=True)\n    end_time = DateTimeInfinityField(default=dt.datetime.max)\n\n    class Meta(object):\n        db_table = 'netbios'\n\n\nclass POEGroup(models.Model):\n    \"\"\"Model representing a group of power over ethernet ports\"\"\"\n\n    id = models.AutoField(db_column='poegroupid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"poe_groups\",\n    )\n    module = models.ForeignKey(\n        'Module',\n        on_delete=models.CASCADE,\n        db_column='moduleid',\n        null=True,\n        related_name=\"poe_groups\",\n    )\n    index = models.IntegerField()\n\n    STATUS_ON = 1\n    STATUS_OFF = 2\n    STATUS_FAULTY = 3\n    STATUS_CHOICES = (\n        (STATUS_ON, 'on'),\n        (STATUS_OFF, 'off'),\n        (STATUS_FAULTY, 'faulty'),\n    )\n    status = models.IntegerField(choices=STATUS_CHOICES)\n    power = models.IntegerField()\n\n    def get_graph_url(self, time_frame='1day'):\n        metric = metric_path_for_power(self.netbox, self.index)\n        return get_simple_graph_url([metric], time_frame=time_frame)\n\n    def get_active_ports(self):\n        return self.poe_ports.filter(\n            admin_enable=True, detection_status=POEPort.STATUS_DELIVERING_POWER\n        )\n\n    @property\n    def name(self):\n        if self.module:\n            return \"Module {}\".format(self.module.name)\n        else:\n            return \"PoE Group {}\".format(self.index)\n\n    class Meta(object):\n        db_table = 'poegroup'\n        unique_together = (('netbox', 'index'),)\n        ordering = ('index',)\n\n\nclass POEPort(models.Model):\n    \"\"\"Model representing a PoE port\"\"\"\n\n    id = models.AutoField(db_column='poeportid', primary_key=True)\n    netbox = models.ForeignKey(\n        'Netbox',\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"poe_ports\",\n    )\n    poegroup = models.ForeignKey(\n        'POEGroup',\n        on_delete=models.CASCADE,\n        db_column='poegroupid',\n        related_name=\"poe_ports\",\n    )\n    interface = models.ForeignKey(\n        'Interface',\n        on_delete=models.CASCADE,\n        db_column='interfaceid',\n        null=True,\n        related_name=\"poe_ports\",\n    )\n    admin_enable = models.BooleanField(default=False)\n    index = models.IntegerField()\n\n    STATUS_DISABLED = 1\n    STATUS_SEARCHING = 2\n    STATUS_DELIVERING_POWER = 3\n    STATUS_FAULT = 4\n    STATUS_TEST = 5\n    STATUS_OTHER_FAULT = 6\n    STATUS_CHOICES = (\n        (STATUS_DISABLED, 'disabled'),\n        (STATUS_SEARCHING, 'searching'),\n        (STATUS_DELIVERING_POWER, 'delivering power'),\n        (STATUS_FAULT, 'fault'),\n        (STATUS_TEST, 'test'),\n        (STATUS_OTHER_FAULT, 'other fault'),\n    )\n    detection_status = models.IntegerField(choices=STATUS_CHOICES)\n\n    PRIORITY_LOW = 3\n    PRIORITY_HIGH = 2\n    PRIORITY_CRITICAL = 1\n    PRIORITY_CHOICES = (\n        (PRIORITY_LOW, 'low'),\n        (PRIORITY_HIGH, 'high'),\n        (PRIORITY_CRITICAL, 'critical'),\n    )\n    priority = models.IntegerField(choices=PRIORITY_CHOICES)\n\n    CLASSIFICATION_CHOICES = (\n        (1, 'class0'),\n        (2, 'class1'),\n        (3, 'class2'),\n        (4, 'class3'),\n        (5, 'class4'),\n    )\n    classification = models.IntegerField(choices=CLASSIFICATION_CHOICES)\n\n    class Meta(object):\n        db_table = 'poeport'\n        unique_together = (('poegroup', 'index'),)\n        ordering = ('index',)\n"
  },
  {
    "path": "python/nav/models/models.py",
    "content": "# Empty models.py tricks Django>=1.3? 1.4 system which are expecting\n# to find models.py (module) from an app in INSTALLED_APPS.\n#\n# 'models' need to be listed as it expects to find model_name under\n# app_label 'nav_models', hence we add this empty placeholder and add 'models' to\n# INSTALLED_APPS to make sure 'nav_models.ModelName' is valid lookup on django\n# form app_label.model_name\n\nfrom .manage import *\nfrom .api import *\nfrom .arnold import *\nfrom .cabling import *\nfrom .event import *\nfrom .logger import *\nfrom .msgmaint import *\nfrom .profiles import *\nfrom .images import *\nfrom .service import *\nfrom .thresholds import *\n"
  },
  {
    "path": "python/nav/models/msgmaint.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\nfrom datetime import datetime, timedelta\n\nfrom django.db import models\nfrom django.utils import timezone\n\nfrom nav.models.fields import (\n    VarcharField,\n    LegacyGenericForeignKey,\n    DateTimeInfinityField,\n    INFINITY,\n)\nfrom nav.models import manage\n\n\nclass Message(models.Model):\n    \"\"\"From NAV Wiki: The table contains the messages registered\n    in the messages tool. Each message has a timeframe for when\n    it is published on the NAV main page.\"\"\"\n\n    id = models.AutoField(db_column='messageid', primary_key=True)\n    title = VarcharField()\n    description = models.TextField()\n    tech_description = models.TextField(null=True, blank=True)\n    publish_start = models.DateTimeField(default=timezone.now)\n    publish_end = models.DateTimeField(default=datetime.now() + timedelta(days=7))\n    author = VarcharField()\n    last_changed = models.DateTimeField()\n    replaces_message = models.ForeignKey(\n        'self',\n        on_delete=models.CASCADE,\n        db_column='replaces_message',\n        related_name='replaced_by',\n        null=True,\n    )\n    maintenance_tasks = models.ManyToManyField(\n        'MaintenanceTask',\n        through='MessageToMaintenanceTask',\n        blank=True,\n        related_name=\"messages\",\n    )\n\n    class Meta(object):\n        db_table = 'message'\n\n    def __str__(self):\n        return '\"%s\" by %s' % (self.title, self.author)\n\n\nclass MaintenanceTaskQuerySet(models.QuerySet):\n    \"\"\"Custom QuerySet for the MaintenanceTask model\"\"\"\n\n    def current(self, relative_to=None):\n        \"\"\"Retrieves current maintenancen tasks\n\n        Those are tasks whose time window matches the current time and that are\n        not cancelled\n        \"\"\"\n        now = relative_to or datetime.now()\n        return self.exclude(state=MaintenanceTask.STATE_CANCELED).filter(\n            start_time__lte=now, end_time__gte=now\n        )\n\n    def past(self, relative_to=None):\n        \"\"\"Retrieves past maintenance tasks\"\"\"\n        now = relative_to or datetime.now()\n        return self.filter(end_time__lt=now)\n\n    def future(self, relative_to=None):\n        \"\"\"Retrieves future maintenance tasks\"\"\"\n        now = relative_to or datetime.now()\n        return self.filter(start_time__gt=now)\n\n    def endless(self):\n        \"\"\"Retrieves tasks with an unspecified end time\"\"\"\n        return self.filter(end_time__gte=INFINITY)\n\n\nclass MaintenanceTask(models.Model):\n    \"\"\"From NAV Wiki: The maintenance task created in the maintenance task\n    tool.\"\"\"\n\n    objects = MaintenanceTaskQuerySet.as_manager()\n\n    STATE_SCHEDULED = 'scheduled'\n    STATE_ACTIVE = 'active'\n    STATE_PASSED = 'passed'\n    STATE_CANCELED = 'canceled'\n    STATES = (\n        (STATE_SCHEDULED, 'Scheduled'),\n        (STATE_ACTIVE, 'Active'),\n        (STATE_PASSED, 'Passed'),\n        (STATE_CANCELED, 'Canceled'),\n    )\n\n    id = models.AutoField(db_column='maint_taskid', primary_key=True)\n    start_time = models.DateTimeField(db_column='maint_start')\n    end_time = DateTimeInfinityField(db_column='maint_end', blank=True)\n    description = models.TextField()\n    author = VarcharField()\n    state = VarcharField(choices=STATES)\n\n    class Meta(object):\n        db_table = 'maint_task'\n\n    def __str__(self):\n        return '\"%s\" by %s' % (self.description, self.author)\n\n    def full_representation(self):\n        \"\"\"\n        Help function to represent a task with desc, start and end.\n        \"\"\"\n        return '%s (%s - %s)' % (\n            self.description,\n            self.start_time,\n            ('No end time' if self.is_endless() else self.end_time),\n        )\n\n    def get_components(self):\n        \"\"\"\n        Returns the list of model objects involved in this task\n        \"\"\"\n        return [c.component for c in self.maintenance_components.all()]\n\n    def get_event_subjects(self):\n        \"\"\"\n        Returns a list of the model objects, represented by this task,\n        that can be the subjects of actual maintenanceState events.\n        \"\"\"\n        subjects = []\n        for component in self.get_components():\n            if isinstance(component, (manage.Room, manage.NetboxGroup)):\n                subjects.extend(component.netboxes.all())\n            elif isinstance(component, manage.Location):\n                for location in component.get_descendants(include_self=True):\n                    subjects.extend(\n                        manage.Netbox.objects.filter(room__location=location)\n                    )\n            elif component is None:\n                continue  # no use in including deleted components\n            else:\n                subjects.append(component)\n\n        return list(set(subjects))\n\n    def is_endless(self):\n        \"\"\"Returns true if the task is endless\"\"\"\n        return self.end_time >= INFINITY\n\n\nclass MaintenanceComponent(models.Model):\n    \"\"\"From NAV Wiki: The components that are put on maintenance in the\n    maintenance tool.\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking primary key\n    maintenance_task = models.ForeignKey(\n        MaintenanceTask,\n        on_delete=models.CASCADE,\n        db_column='maint_taskid',\n        related_name=\"maintenance_components\",\n    )\n    key = VarcharField()\n    value = VarcharField()\n    description = VarcharField(null=True, blank=True)\n    component = LegacyGenericForeignKey('key', 'value')\n\n    class Meta(object):\n        db_table = 'maint_component'\n        unique_together = (('maintenance_task', 'key', 'value'),)  # Primary key\n\n    def __str__(self):\n        return '%s=%s' % (self.key, self.value)\n\n    def get_component_class(self) -> models.Model:\n        \"\"\"Returns a Model class based on the database table name stored in key\"\"\"\n        return LegacyGenericForeignKey.get_model_class(self.key)\n\n\nclass MessageToMaintenanceTask(models.Model):\n    \"\"\"From NAV Wiki: The connection between messages and related maintenance\n    tasks.\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking primary key\n    message = models.ForeignKey(\n        Message, on_delete=models.CASCADE, db_column='messageid'\n    )\n    maintenance_task = models.ForeignKey(\n        MaintenanceTask, on_delete=models.CASCADE, db_column='maint_taskid'\n    )\n\n    class Meta(object):\n        db_table = 'message_to_maint_task'\n        unique_together = (('message', 'maintenance_task'),)  # Primary key\n\n    def __str__(self):\n        return 'Message %s, connected to task %s' % (\n            self.message,\n            self.maintenance_task,\n        )\n"
  },
  {
    "path": "python/nav/models/oui.py",
    "content": "from django.db import models\n\nfrom nav.models.fields import VarcharField\n\n\nclass OUI(models.Model):\n    \"\"\"Defines an OUI and the name of the vendor the OUI belongs to\"\"\"\n\n    oui = models.CharField(max_length=17, primary_key=True)\n    vendor = VarcharField()\n\n    def __str__(self):\n        return self.oui\n\n    class Meta(object):\n        db_table = 'oui'\n"
  },
  {
    "path": "python/nav/models/profiles.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for profiles in NAV\"\"\"\n\nfrom hashlib import md5\nimport itertools\nimport logging\nfrom datetime import datetime\nimport re\nimport json\n\nfrom django.contrib.auth.base_user import AbstractBaseUser\nfrom django.contrib.postgres.fields import HStoreField\nfrom django.core.cache import cache\nfrom django.db import models, transaction\nfrom django.forms.models import model_to_dict\nfrom django.urls import reverse\nfrom django.views.decorators.debug import sensitive_variables\n\nimport nav.buildconf\nimport nav.pwhash\nfrom nav.config import getconfig as get_alertengine_config\nfrom nav.alertengine.dispatchers import (\n    DispatcherException,\n    FatalDispatcherException,\n    InvalidAlertAddressError,\n)\n\nfrom nav.models.event import AlertQueue, AlertType, EventType\nfrom nav.models.manage import Arp, Cam, Category, Device, Location\nfrom nav.models.manage import Memory, Netbox, NetboxInfo, NetboxType\nfrom nav.models.manage import Organization, Prefix, Room, NetboxGroup\nfrom nav.models.manage import Interface, Usage, Vlan, Vendor\nfrom nav.models.fields import VarcharField, DictAsJsonField\n\n\n# This should be the authorative source as to which models alertengine\n# supports.  The acctuall mapping from alerts to data in these models is done\n# the MatchField model.\nSUPPORTED_MODELS = [\n    # event models\n    AlertQueue,\n    AlertType,\n    EventType,\n    # manage models\n    Arp,\n    Cam,\n    Category,\n    Device,\n    Location,\n    Memory,\n    Netbox,\n    NetboxInfo,\n    NetboxType,\n    Organization,\n    Prefix,\n    Room,\n    NetboxGroup,\n    Interface,\n    Vendor,\n    Vlan,\n    Usage,\n]\n\n_ = lambda a: a\n\n#######################################################################\n### Account models\n\n\nclass AccountManager(models.Manager):\n    \"\"\"Custom manager for Account objects\"\"\"\n\n    def get_by_natural_key(self, login):\n        \"\"\"Gets Account object by its 'natural' key: Its login name.\"\"\"\n        return self.get(login=login)\n\n\nclass Account(AbstractBaseUser):\n    \"\"\"NAV's basic account model\"\"\"\n\n    USERNAME_FIELD = 'login'\n    EMAIL_FIELD = 'email'\n    DEFAULT_ACCOUNT = 0\n    ADMIN_ACCOUNT = 1\n\n    # An overview of current preferences.\n    # They should start with PREFERENCE_KEY\n    PREFERENCE_KEY_LANGUAGE = 'language'  # AlertProfiles\n    PREFERENCE_KEY_STATUS = 'status-preferences'\n    PREFERENCE_KEY_REPORT_PAGE_SIZE = 'report_page_size'\n    PREFERENCE_KEY_WIDGET_DISPLAY_DENSITY = 'widget_display_density'\n    PREFERENCE_KEY_IPDEVINFO_PORT_LAYOUT = 'ipdevinfo_port_layout'\n\n    # FIXME get this from setting.\n    MIN_PASSWD_LENGTH = 8\n\n    login = VarcharField(unique=True)\n    name = VarcharField()\n    email = models.EmailField(null=True, blank=True)  # Not currently used by NAV\n    password = VarcharField()\n    ext_sync = VarcharField(blank=True)\n    preferences = HStoreField(default=dict)\n\n    organizations = models.ManyToManyField(\n        Organization,\n        db_table='accountorg',\n        blank=True,\n        related_name=\"accounts\",\n    )\n\n    # Set this in order to provide a link to the actual operator when Account\n    # objects are retrieved from session data\n    sudo_operator = None\n\n    objects = AccountManager()\n\n    class Meta(object):\n        db_table = 'account'\n        ordering = ('login',)\n\n    def __str__(self):\n        if self.sudo_operator and self.sudo_operator != self:\n            return '{} (operated by {})'.format(self.login, self.sudo_operator)\n        else:\n            return self.login\n\n    def natural_key(self) -> tuple[str]:\n        \"\"\"Returns the natural key for an account as a tuple\"\"\"\n        return (self.login,)\n\n    def get_absolute_url(self):\n        \"\"\"Returns the URL to this account's detail page\"\"\"\n        return reverse('useradmin-account_detail', kwargs={'account_id': self.id})\n\n    def get_active_profile(self):\n        \"\"\"Returns the account's active alert profile\"\"\"\n        try:\n            return self.alert_preference.active_profile\n        except (AlertPreference.DoesNotExist, AlertProfile.DoesNotExist):\n            pass\n\n    def get_groups(self):\n        \"\"\"Fetches and returns this users groups.\n        Also stores groups in this object for later use.\n        \"\"\"\n        try:\n            return self._cached_groups\n        except AttributeError:\n            self._cached_groups = self.groups.values_list('id', flat=True)\n            return self._cached_groups\n\n    def get_privileges(self):\n        \"\"\"Fetches privileges for this users groups.\n        Also stores privileges in this object for later use.\n        \"\"\"\n        try:\n            return self._cached_privileges\n        except AttributeError:\n            self._cached_privileges = Privilege.objects.filter(\n                group__in=self.get_groups()\n            )\n            return self._cached_privileges\n\n    def get_tools(self):\n        \"\"\"Get the tool list for this account\"\"\"\n        return [\n            tool\n            for tool in self.account_tools.all().order_by('priority')\n            if self.has_perm('web_access', tool.tool.uri)\n        ]\n\n    def has_perm(self, action, target):\n        \"\"\"Checks if user has permission to do action on target.\"\"\"\n        groups = self.get_groups()\n        privileges = self.get_privileges()\n\n        if AccountGroup.ADMIN_GROUP in groups:\n            return True\n        elif privileges.count() == 0:\n            return False\n        elif action == 'web_access':\n            for privilege in privileges:\n                regexp = re.compile(privilege.target)\n                if regexp.search(target):\n                    return True\n            return False\n        else:\n            return privileges.filter(target=target).count() > 0\n\n    def is_system_account(self):\n        \"\"\"Is this system (undeleteable) account?\"\"\"\n        return self.id < 1000\n\n    def is_default_account(self):\n        \"\"\"Is this the anonymous user account?\"\"\"\n        return self.id == self.DEFAULT_ACCOUNT\n\n    def is_admin_account(self):\n        \"\"\"Is this the admin account?\"\"\"\n        return self.id == self.ADMIN_ACCOUNT\n\n    def is_admin(self):\n        \"\"\"Has this user administrator rights?\"\"\"\n        return self.has_perm(None, None)\n\n    @property\n    def is_anonymous(self):\n        \"\"\"Returns True if this user represents NAV's anonymous user\"\"\"\n        return self.id == self.DEFAULT_ACCOUNT\n\n    @property\n    def is_authenticated(self):\n        \"\"\"Returns True if this represents an authenticated (non-anonymous) user\"\"\"\n        return self.id != self.DEFAULT_ACCOUNT\n\n    @property\n    def is_staff(self):\n        \"\"\"Returns True if this user is a staff member.\n\n        This is only here for compatibility with Django libraries that may expect this\n        to be a django.contrib.auth user model.  NAV has no concept of staff vs\n        superuser.  Either the user is an admin, or they're not.\n        \"\"\"\n        return self.is_admin()\n\n    @property\n    def is_superuser(self):\n        \"\"\"Returns True if this user is a superuser.\n\n        This is only here for compatibility with Django libraries that may expect this\n        to be a django.contrib.auth user model.  NAV has no concept of staff vs\n        superuser.  Either the user is an admin, or they're not.\n        \"\"\"\n        return self.is_admin()\n\n    @property\n    def username(self):\n        \"Workaround 3rd party Django apps that poorly support custom users\"\n        return self.login\n\n    @sensitive_variables('password')\n    def set_password(self, password):\n        \"\"\"Sets user password. Copied from nav.db.navprofiles\"\"\"\n        from nav.web.auth.utils import PASSWORD_ISSUES_CACHE_KEY\n\n        if password.strip():\n            pw_hash = nav.pwhash.Hash(password=password)\n            self.password = str(pw_hash)\n        else:\n            self.password = ''\n\n        # Delete cache entry of how many accounts have password issues\n        cache.delete(PASSWORD_ISSUES_CACHE_KEY)\n\n    @sensitive_variables('password')\n    def check_password(self, password):\n        \"\"\"\n        Return True if the submitted authentication tokens are valid\n        for this Account.  In simpler terms; when password\n        authentication is used, this method compares the given\n        password with the one stored for this account and returns true\n        if they are equal.  If the stored password is blank, we\n        interpret this as: 'The user is not allowed to log in'\n\n        In the future, this could be extended to accept other types of\n        authentication tokens, such as personal certificates or\n        whatever.\n\n        Copied from nav.db.navprofiles\n        \"\"\"\n        if not self.locked:\n            try:\n                stored_hash = self.password_hash\n            except nav.pwhash.InvalidHashStringError:\n                # Probably an old style NAV password hash, get out\n                # of here and check it the old way\n                pass\n            else:\n                return stored_hash.verify(password)\n\n            if self.has_old_style_password_hash():\n                return self._verify_old_password_hash_and_rehash(password)\n            else:\n                return password == self.password\n        else:\n            return False\n\n    def has_old_style_password_hash(self):\n        \"\"\"Returns True if this account has an old-style, insecure password hash\"\"\"\n        return self.unlocked_password.startswith(\"md5\")\n\n    def has_plaintext_password(self):\n        \"\"\"Returns True if this account appears to contain a plain-text password\"\"\"\n        if not self.has_old_style_password_hash():\n            try:\n                self.password_hash\n            except nav.pwhash.InvalidHashStringError:\n                return True\n        return False\n\n    def has_deprecated_password_hash_method(self):\n        \"\"\"Returns True if this account's password is salted hash, but using a\n        deprecated hashing method.\n        \"\"\"\n        if not (self.has_plaintext_password() or self.has_old_style_password_hash()):\n            return self.password_hash.method != nav.pwhash.DEFAULT_METHOD\n        return False\n\n    def has_password_issues(self):\n        \"\"\"Returns True if this account has password issues\n\n        Problems can be an old style password hash, a plaintext password or a deprecated\n        password hash method\n        \"\"\"\n        return self.is_authenticated and (\n            self.has_plaintext_password()\n            or self.has_old_style_password_hash()\n            or self.has_deprecated_password_hash_method()\n        )\n\n    @sensitive_variables('password')\n    def _verify_old_password_hash_and_rehash(self, password):\n        \"\"\"Verifies an old-style MD5 password hash, and if there is a match,\n        the password is re-hashed using the modern and more secure method.\n        \"\"\"\n        pw_hash = md5(password.encode(\"utf-8\"))\n        verified = pw_hash.hexdigest() == self.password[3:]\n        if verified:\n            self.set_password(password)\n            if self.pk:\n                Account.objects.filter(pk=self.pk).update(password=self.password)\n\n        return verified\n\n    @property\n    def locked(self):\n        return not self.password or self.password.startswith('!')\n\n    @property\n    def is_active(self):\n        \"\"\"Returns True if this account is active (i.e. not locked)\"\"\"\n        return not self.locked\n\n    @locked.setter\n    def locked(self, value):\n        if not value:\n            self.password = self.password.removeprefix(\"!\")\n        elif not self.password.startswith('!'):\n            self.password = '!' + self.password\n\n    @property\n    def password_hash(self):\n        \"\"\"Returns the Account's password as a Hash object\"\"\"\n        stored_hash = nav.pwhash.Hash()\n        stored_hash.set_hash(self.unlocked_password)\n        return stored_hash\n\n    @property\n    def unlocked_password(self):\n        \"\"\"Returns the raw password value, but with any lock status stripped\"\"\"\n        if not self.locked:\n            return self.password or ''\n        else:\n            return self.password[1:] if self.password else ''\n\n    def get_email_addresses(self):\n        return self.alert_addresses.filter(type__name=AlertSender.EMAIL)\n\n    @property\n    def has_default_dashboard(self):\n        \"\"\"Returns True if the user has a default dashboard preference set.\"\"\"\n        return AccountDefaultDashboard.objects.filter(account_id=self.id).exists()\n\n    @property\n    def default_dashboard(self):\n        \"\"\"Returns the user's default dashboard, or None if not set.\"\"\"\n        try:\n            mapping = AccountDefaultDashboard.objects.get(account_id=self.id)\n            return mapping.dashboard\n        except AccountDefaultDashboard.DoesNotExist:\n            return None\n\n    def set_default_dashboard(self, dashboard_id: int):\n        \"\"\"Sets the user's default dashboard preference.\n\n        If the dashboard is shared and owned by another user, it will also\n        be subscribed to, so it remains visible if the default is changed later.\n        \"\"\"\n        AccountDefaultDashboard.objects.update_or_create(\n            account_id=self.id, defaults={'dashboard_id': dashboard_id}\n        )\n        # Subscribe to shared dashboards owned by others\n        dashboard = AccountDashboard.objects.filter(pk=dashboard_id).first()\n        if dashboard and dashboard.is_shared and dashboard.account_id != self.id:\n            AccountDashboardSubscription.objects.get_or_create(\n                account_id=self.id, dashboard_id=dashboard_id\n            )\n\n\nclass AccountGroup(models.Model):\n    \"\"\"NAV account groups\"\"\"\n\n    # FIXME other places in code that use similiar definitions should switch to\n    # using this one.\n    ADMIN_GROUP = 1\n    EVERYONE_GROUP = 2\n    AUTHENTICATED_GROUP = 3\n\n    name = VarcharField()\n    description = VarcharField(db_column='descr')\n    # FIXME this uses a view hack, was AccountInGroup\n    accounts = models.ManyToManyField(\n        'Account',\n        related_name=\"groups\",\n    )\n\n    class Meta(object):\n        db_table = 'accountgroup'\n        ordering = ('name',)\n\n    def __str__(self):\n        return self.name\n\n    def is_system_group(self):\n        \"\"\"Is this a system (undeleteable) group?\"\"\"\n        return self.id < 1000\n\n    def is_protected_group(self):\n        \"\"\"Is this a protected group?\n\n        Users cannot be removed from protected groups.\n\n        \"\"\"\n        return self.id in [self.EVERYONE_GROUP, self.AUTHENTICATED_GROUP]\n\n    def is_admin_group(self):\n        \"\"\"Is this the administrators group?\"\"\"\n        return self.id == self.ADMIN_GROUP\n\n\nclass NavbarLink(models.Model):\n    \"\"\"A hyperlink on a user's navigation bar.\"\"\"\n\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        related_name=\"navbar_links\",\n    )\n    name = models.CharField('Link text', blank=False, max_length=100)\n    uri = models.CharField('URL', blank=False, max_length=100)\n\n    class Meta(object):\n        db_table = 'navbarlink'\n        ordering = ('id',)\n\n    def __str__(self):\n        return '%s=%s' % (self.name, self.uri)\n\n\nclass Privilege(models.Model):\n    \"\"\"A privilege granted to an AccountGroup.\"\"\"\n\n    group = models.ForeignKey(\n        'AccountGroup',\n        on_delete=models.CASCADE,\n        db_column='accountgroupid',\n        related_name=\"privileges\",\n    )\n    type = models.ForeignKey(\n        'PrivilegeType',\n        on_delete=models.CASCADE,\n        db_column='privilegeid',\n        related_name=\"privileges\",\n    )\n    target = VarcharField()\n\n    class Meta(object):\n        db_table = 'accountgroupprivilege'\n\n    def __str__(self):\n        return '%s for %s' % (self.type, self.target)\n\n\nclass PrivilegeType(models.Model):\n    \"\"\"A registered privilege type.\"\"\"\n\n    id = models.AutoField(db_column='privilegeid', primary_key=True)\n    name = models.CharField(max_length=30, db_column='privilegename')\n\n    class Meta(object):\n        db_table = 'privilege'\n\n    def __str__(self):\n        return self.name\n\n\nclass AlertAddress(models.Model):\n    \"\"\"Accounts alert addresses, valid types are retrived from\n    alertengine.conf\n\n    \"\"\"\n\n    DEBUG_MODE = False\n\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        related_name=\"alert_addresses\",\n    )\n    type = models.ForeignKey(\n        'AlertSender',\n        on_delete=models.CASCADE,\n        db_column='type',\n        related_name=\"alert_addresses\",\n    )\n    address = VarcharField()\n\n    class Meta(object):\n        db_table = 'alertaddress'\n\n    def __str__(self):\n        return self.type.scheme() + self.address\n\n    def has_valid_address(self):\n        if not self.type.supported or not self.address:\n            return False\n        dispatcher = self.type.load_dispatcher_class()\n        return dispatcher.is_valid_address(self.address)\n\n    @transaction.atomic\n    def send(self, alert, subscription):\n        \"\"\"Handles sending of alerts to with defined alert notification types\n\n        Return value should indicate if message was sent\"\"\"\n\n        _logger = logging.getLogger('nav.alertengine.alertaddress.send')\n\n        # Determine the right language for the user.\n        lang = self.account.preferences.get(Account.PREFERENCE_KEY_LANGUAGE, 'en')\n\n        if not self.has_valid_address():\n            _logger.error(\n                'Ignoring alert %d (%s: %s)! Account %s does not have a '\n                'valid address for the alertaddress with id %d, this needs '\n                'to be fixed before the user will recieve any alerts.',\n                alert.id,\n                alert,\n                alert.netbox,\n                self.account,\n                self.id,\n            )\n\n            raise InvalidAlertAddressError\n\n        if self.type.blacklisted_reason:\n            _logger.debug(\n                'Not sending alert %s to %s as handler %s is blacklisted: %s',\n                alert.id,\n                self.address,\n                self.type,\n                self.type.blacklisted_reason,\n            )\n            return False\n\n        try:\n            self.type.send(self, alert, language=lang)\n            _logger.info(\n                'alert %d sent by %s to %s due to %s subscription %d',\n                alert.id,\n                self.type,\n                self.address,\n                subscription.get_type_display(),\n                subscription.id,\n            )\n\n        except FatalDispatcherException as error:\n            _logger.error(\n                '%s raised a FatalDispatcherException indicating that the '\n                'alert never will be sent: %s',\n                self.type,\n                error,\n            )\n            raise\n\n        except DispatcherException as error:\n            _logger.error(\n                '%s raised a DispatcherException indicating that an alert '\n                'could not be sent at this time: %s',\n                self.type,\n                error,\n            )\n            return False\n\n        except Exception as error:  # noqa: BLE001\n            _logger.exception(\n                'Unhandled error from %s (the handler has been blacklisted)', self.type\n            )\n            self.type.blacklist(str(error))\n            return False\n\n        return True\n\n\nclass AlertSender(models.Model):\n    \"\"\"A registered alert sender/medium.\"\"\"\n\n    name = models.CharField(max_length=100)\n    handler = models.CharField(max_length=100)\n    supported = models.BooleanField(default=True)\n    blacklisted_reason = models.CharField(max_length=100, blank=True)\n\n    _handlers = {}\n\n    EMAIL = 'Email'\n    SMS = 'SMS'\n    SLACK = 'Slack'\n\n    SCHEMES = {EMAIL: 'mailto:', SMS: 'sms:', SLACK: 'slack:'}\n\n    def __str__(self):\n        return self.name\n\n    @transaction.atomic\n    def send(self, *args, **kwargs):\n        \"\"\"Sends an alert via this medium.\"\"\"\n        if not self.supported:\n            raise FatalDispatcherException(\"{} is not supported\".format(self.name))\n        if self.handler not in self._handlers:\n            dispatcher_class = self.load_dispatcher_class()\n            dispatcher = dispatcher_class(\n                config=AlertSender.config.get(self.handler, {})\n            )\n            self._handlers[self.handler] = dispatcher\n        else:\n            dispatcher = self._handlers[self.handler]\n\n        # Delegate sending of message\n        return dispatcher.send(*args, **kwargs)\n\n    def load_dispatcher_class(self):\n        # Get config\n        if not hasattr(AlertSender, 'config'):\n            AlertSender.config = get_alertengine_config('alertengine.conf')\n\n        # Load module\n        module = __import__(\n            'nav.alertengine.dispatchers.%s_dispatcher' % self.handler,\n            globals(),\n            locals(),\n            [self.handler],\n        )\n\n        # Return matching object from module based on case-insensitive match\n        namemap = {name.lower(): obj for name, obj in vars(module).items()}\n        return namemap[self.handler.lower()]\n\n    def blacklist(self, reason=None):\n        \"\"\"Blacklists this sender/medium from further alert dispatch.\"\"\"\n        self.blacklisted_reason = reason\n        self.save()\n\n    def scheme(self):\n        return self.SCHEMES.get(self.name, '')\n\n    class Meta(object):\n        db_table = 'alertsender'\n\n\nclass AlertPreference(models.Model):\n    \"\"\"AlertProfile account preferences\"\"\"\n\n    account = models.OneToOneField(\n        'Account',\n        primary_key=True,\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        related_name=\"alert_preference\",\n    )\n    active_profile = models.OneToOneField(\n        'AlertProfile',\n        on_delete=models.CASCADE,\n        db_column='activeprofile',\n        null=True,\n        related_name=\"alert_preference\",\n    )\n    last_sent_day = models.DateTimeField(db_column='lastsentday')\n    last_sent_week = models.DateTimeField(db_column='lastsentweek')\n\n    class Meta(object):\n        db_table = 'alertpreference'\n\n    def __str__(self):\n        return 'preferences for %s' % self.account\n\n\n#######################################################################\n### Profile models\n\n\nclass AlertProfile(models.Model):\n    \"\"\"Account AlertProfiles\"\"\"\n\n    # Weekday numbers follows date.weekday(), not day.isoweekday().\n    MONDAY = 0\n    TUESDAY = 1\n    WEDNESDAY = 2\n    THURSDAY = 3\n    FRIDAY = 4\n    SATURDAY = 5\n    SUNDAY = 6\n\n    VALID_WEEKDAYS = (\n        (MONDAY, _('monday')),\n        (TUESDAY, _('tuesday')),\n        (WEDNESDAY, _('wednesday')),\n        (THURSDAY, _('thursday')),\n        (FRIDAY, _('friday')),\n        (SATURDAY, _('saturday')),\n        (SUNDAY, _('sunday')),\n    )\n\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        related_name=\"alert_profiles\",\n    )\n    name = VarcharField()\n    daily_dispatch_time = models.TimeField(default='08:00')\n    weekly_dispatch_day = models.IntegerField(choices=VALID_WEEKDAYS, default=MONDAY)\n    weekly_dispatch_time = models.TimeField(default='08:00')\n\n    class Meta(object):\n        db_table = 'alertprofile'\n\n    def __str__(self):\n        return self.name\n\n    def get_active_timeperiod(self):\n        \"\"\"Gets the currently active timeperiod for this profile\"\"\"\n        # Could have been done with a ModelManager, but the logic\n        # is somewhat tricky to do with the django ORM.\n\n        _logger = logging.getLogger(\n            'nav.alertengine.alertprofile.get_active_timeperiod'\n        )\n\n        now = datetime.now()\n\n        # Limit our query to the correct type of time periods\n        if now.isoweekday() in [6, 7]:\n            valid_during = [TimePeriod.ALL_WEEK, TimePeriod.WEEKENDS]\n        else:\n            valid_during = [TimePeriod.ALL_WEEK, TimePeriod.WEEKDAYS]\n\n        # The following code should get the currently active timeperiod.\n        active_timeperiod = None\n        timeperiods = list(\n            self.time_periods.filter(valid_during__in=valid_during).order_by('start')\n        )\n        # If the current time is before the start of the first time\n        # period, the active time period is the last one (i.e. from\n        # the day before)\n        if timeperiods and timeperiods[0].start > now.time():\n            active_timeperiod = timeperiods[-1]\n        else:\n            for period in timeperiods:\n                if period.start <= now.time():\n                    active_timeperiod = period\n\n        if active_timeperiod:\n            _logger.debug(\n                \"Active timeperiod for alertprofile %d is %s (%d)\",\n                self.id,\n                active_timeperiod,\n                active_timeperiod.id,\n            )\n        else:\n            _logger.debug(\"No active timeperiod for alertprofile %d\", self.id)\n\n        return active_timeperiod\n\n\nclass TimePeriod(models.Model):\n    \"\"\"Defines TimerPeriods and which part of the week they are valid\"\"\"\n\n    ALL_WEEK = 1\n    WEEKDAYS = 2\n    WEEKENDS = 3\n\n    VALID_DURING_CHOICES = (\n        (ALL_WEEK, _('all days')),\n        (WEEKDAYS, _('weekdays')),\n        (WEEKENDS, _('weekends')),\n    )\n\n    profile = models.ForeignKey(\n        'AlertProfile',\n        on_delete=models.CASCADE,\n        db_column='alert_profile_id',\n        related_name=\"time_periods\",\n    )\n    start = models.TimeField(db_column='start_time', default='08:00')\n    valid_during = models.IntegerField(choices=VALID_DURING_CHOICES, default=ALL_WEEK)\n\n    class Meta(object):\n        db_table = 'timeperiod'\n\n    def __str__(self):\n        return 'from %s for %s profile on %s' % (\n            self.start,\n            self.profile,\n            self.get_valid_during_display(),\n        )\n\n\nclass AlertSubscription(models.Model):\n    \"\"\"Links an address and timeperiod to a filtergroup with a given\n    subscription type.\n\n    \"\"\"\n\n    NOW = 0\n    DAILY = 1\n    WEEKLY = 2\n    NEXT = 3\n\n    SUBSCRIPTION_TYPES = (\n        (NOW, _('immediately')),\n        (DAILY, _('daily at predefined time')),\n        (WEEKLY, _('weekly at predefined time')),\n        (NEXT, _('at end of timeperiod')),\n    )\n\n    alert_address = models.ForeignKey(\n        'AlertAddress',\n        on_delete=models.CASCADE,\n        related_name=\"alert_subscriptions\",\n    )\n    time_period = models.ForeignKey(\n        'TimePeriod',\n        on_delete=models.CASCADE,\n        related_name=\"alert_subscriptions\",\n    )\n    filter_group = models.ForeignKey(\n        'FilterGroup',\n        on_delete=models.CASCADE,\n        related_name=\"alert_subscriptions\",\n    )\n    type = models.IntegerField(\n        db_column='subscription_type', choices=SUBSCRIPTION_TYPES, default=NOW\n    )\n    ignore_resolved_alerts = models.BooleanField(default=False)\n\n    class Meta(object):\n        db_table = 'alertsubscription'\n\n    def delete(self):\n        for a in self.queued_alerts.all():\n            a.delete()\n        super(AlertSubscription, self).delete()\n\n    def __str__(self):\n        return 'alerts received %s should be sent %s to %s' % (\n            self.time_period,\n            self.get_type_display(),\n            self.alert_address,\n        )\n\n\n#######################################################################\n### Equipment models\n\n\nclass FilterGroupContent(models.Model):\n    \"\"\"Defines how a given filter should be used in a filtergroup\"\"\"\n\n    #            inc   pos\n    # Add      |  1  |  1  | union in set theory\n    # Sub      |  0  |  1  | exclusion\n    # And      |  0  |  0  | intersection in set theory\n    # Add inv. |  1  |  0  | complement of set\n\n    # include and positive are used to decide how the match result of the\n    # filter should be applied. the table above is an attempt at showing how\n    # this should work. Add inv is really the only tricky one, basicly it is\n    # nothing more that a negated add, ie if we have a filter  that checks\n    # severity < 4 using a add inv on it is equivilent til severity >= 4.\n\n    # The actual checking of the FilterGroup is done in the alertengine\n    # subsystem in an attempt to keep most of the alerteninge code simple and\n    # in one place.\n\n    include = models.BooleanField(default=False)\n    positive = models.BooleanField(default=False)\n    priority = models.IntegerField()\n\n    filter = models.ForeignKey(\n        'Filter',\n        on_delete=models.CASCADE,\n        related_name=\"filter_group_contents\",\n    )\n    filter_group = models.ForeignKey(\n        'FilterGroup',\n        on_delete=models.CASCADE,\n        related_name=\"filter_group_contents\",\n    )\n\n    class Meta(object):\n        db_table = 'filtergroupcontent'\n        ordering = ['priority']\n\n    def __str__(self):\n        if self.include:\n            type_ = 'inclusive'\n        else:\n            type_ = 'exclusive'\n\n        if not self.positive:\n            type_ = 'inverted %s' % type_\n\n        return '%s filter on %s' % (type_, self.filter)\n\n\nclass Operator(models.Model):\n    \"\"\"Defines valid operators for a given matchfield.\"\"\"\n\n    EQUALS = 0\n    GREATER = 1\n    GREATER_EQ = 2\n    LESS = 3\n    LESS_EQ = 4\n    NOT_EQUAL = 5\n    STARTSWITH = 6\n    ENDSWITH = 7\n    CONTAINS = 8\n    REGEXP = 9\n    WILDCARD = 10\n    IN = 11\n\n    # This list designates which operators are supported for any field. The\n    # only major special case is IP's which are matched with special pg ip\n    # operators where it makes sense, the rest of the operators are handeled\n    # with plain text comaparisons against the result of text(ip)\n    OPERATOR_TYPES = (\n        (EQUALS, _('equals')),\n        (GREATER, _('is greater')),\n        (GREATER_EQ, _('is greater or equal')),\n        (LESS, _('is less')),\n        (LESS_EQ, _('is less or equal')),\n        (NOT_EQUAL, _('not equals')),\n        (STARTSWITH, _('starts with')),\n        (ENDSWITH, _('ends with')),\n        (CONTAINS, _('contains')),\n        (REGEXP, _('regexp')),\n        (WILDCARD, _('wildcard (? og *)')),\n        (IN, _('in')),\n    )\n\n    # This is the mapping that is jused when we try querying the ORM to se if\n    # filtes match. Note that wildcard is not here as it neeeds to be special\n    # cased.\n    OPERATOR_MAPPING = {\n        EQUALS: '__exact',\n        NOT_EQUAL: '',  # exclusion is special-cased by Filter.check()\n        GREATER: '__gt',\n        GREATER_EQ: '__gte',\n        LESS: '__lt',\n        LESS_EQ: '__lte',\n        STARTSWITH: '__istartswith',\n        ENDSWITH: '__iendswith',\n        CONTAINS: '__icontains',\n        REGEXP: '__iregex',\n        IN: '__in',\n    }\n\n    # The IpAddressField in django does not support ipv6 yet so the IP\n    # datatype needs to be completly special cased. The following operator\n    # mapping is used to achive this and expects that it will get '% field'\n    IP_OPERATOR_MAPPING = {\n        EQUALS: '%s = %%s',\n        GREATER: '%s > %%s',\n        GREATER_EQ: '%s >= %%s',\n        LESS: '%s < %%s',\n        LESS_EQ: '%s <= %%s',\n        NOT_EQUAL: '%s <> %%s',\n        CONTAINS: '%s >>= %%s',\n        IN: '%s <<= %%s',\n        WILDCARD: \"host(%s) LIKE %%s\",\n        REGEXP: \"host(%s) ~* %%s\",\n        STARTSWITH: \"host(%s) ILIKE '%%%%' + %%s\",\n        ENDSWITH: \"host(%s) ILIKE %%s + '%%%%'\",\n    }\n    type = models.IntegerField(choices=OPERATOR_TYPES, db_column='operator_id')\n    match_field = models.ForeignKey(\n        'MatchField',\n        on_delete=models.CASCADE,\n        related_name=\"operators\",\n    )\n\n    class Meta(object):\n        db_table = 'operator'\n        unique_together = (('type', 'match_field'),)\n\n    def __str__(self):\n        return '%s match on %s' % (self.get_type_display(), self.match_field)\n\n    def get_operator_mapping(self):\n        \"\"\"Returns the Django query operator represented by this instance.\"\"\"\n        return self.OPERATOR_MAPPING[self.type]\n\n    def get_ip_operator_mapping(self):\n        \"\"\"Returns the SQL query IP operator represented by this instance.\"\"\"\n        return self.IP_OPERATOR_MAPPING[self.type]\n\n\nclass Expression(models.Model):\n    \"\"\"Combines filer, operator, matchfield and value into an expression that\n    can be evaluated.\n\n    \"\"\"\n\n    filter = models.ForeignKey(\n        'Filter',\n        on_delete=models.CASCADE,\n        related_name=\"expressions\",\n    )\n    match_field = models.ForeignKey(\n        'MatchField',\n        on_delete=models.CASCADE,\n        related_name=\"expressions\",\n    )\n    operator = models.IntegerField(choices=Operator.OPERATOR_TYPES)\n    value = VarcharField()\n\n    class Meta(object):\n        db_table = 'expression'\n\n    def __str__(self):\n        return '%s match on %s against %s' % (\n            self.get_operator_display(),\n            self.match_field,\n            self.value,\n        )\n\n    def get_operator_mapping(self):\n        \"\"\"Returns the Django query operator represented by this expression.\"\"\"\n        return Operator(type=self.operator).get_operator_mapping()\n\n\nclass Filter(models.Model):\n    \"\"\"One or more expressions that are combined with an and operation.\n\n    Handles the actual construction of queries to be run taking into account\n    special cases like the IP datatype and WILDCARD lookups.\"\"\"\n\n    owner = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"filters\",\n    )\n    name = VarcharField()\n\n    class Meta(object):\n        db_table = 'filter'\n\n    def __str__(self):\n        return self.name\n\n    def verify(self, alert):\n        \"\"\"Combines expressions to an ORM query that will tell us if an alert\n        matched.\n\n        This function builds three dicts that are used in the ORM .filter()\n        .exclude() and .extra() methods which finally gets a .count() as we\n        only need to know if something matched.\n\n        Running alertengine in debug mode will print the dicts to the logs.\n\n        :type alert: nav.models.event.AlertQueue\n        \"\"\"\n        _logger = logging.getLogger('nav.alertengine.filter.check')\n\n        filtr = {}\n        exclude = {}\n        extra = {'where': [], 'params': []}\n\n        for expression in self.expressions.all():\n            # Handle IP datatypes:\n            if expression.match_field.data_type == MatchField.IP:\n                # Trick the ORM into joining the tables we want\n                lookup = '%s__isnull' % expression.match_field.get_lookup_mapping()\n                filtr[lookup] = False\n\n                where = Operator(type=expression.operator).get_ip_operator_mapping()\n\n                if expression.operator in [Operator.IN, Operator.CONTAINS]:\n                    values = expression.value.split('|')\n                    where = ' OR '.join(\n                        [where % expression.match_field.value_id] * len(values)\n                    )\n\n                    extra['where'].append('(%s)' % where)\n                    extra['params'].extend(values)\n\n                else:\n                    # Get the IP mapping and put in the field before adding it\n                    # to our where clause.\n                    extra['where'].append(where % expression.match_field.value_id)\n                    extra['params'].append(expression.value)\n\n            # Include all sublocations when matching on location\n            elif expression.match_field.name == 'Location':\n                lookup = \"{}__in\".format(MatchField.FOREIGN_MAP[MatchField.LOCATION])\n                # Location only have two Operators (in and exact) so we handle\n                # both with a split\n                locations = Location.objects.filter(pk__in=expression.value.split('|'))\n\n                # Find all descendants for locations in a totally readable way\n                filtr[lookup] = list(\n                    set(\n                        itertools.chain(\n                            *[\n                                location.get_descendants(include_self=True)\n                                for location in locations\n                            ]\n                        )\n                    )\n                )\n\n            # Handle wildcard lookups which are not directly supported by\n            # django (as far as i know)\n            elif expression.operator == Operator.WILDCARD:\n                # Trick the ORM into joining the tables we want\n                lookup = '%s__isnull' % expression.match_field.get_lookup_mapping()\n                filtr[lookup] = False\n\n                extra['where'].append('%s ILIKE %%s' % expression.match_field.value_id)\n                extra['params'].append(expression.value)\n\n            # Handle the plain lookups that we can do directly in ORM\n            else:\n                lookup = (\n                    expression.match_field.get_lookup_mapping()\n                    + expression.get_operator_mapping()\n                )\n\n                # Ensure that in and not equal are handeled correctly\n                if expression.operator == Operator.IN:\n                    filtr[lookup] = expression.value.split('|')\n                elif expression.operator == Operator.NOT_EQUAL:\n                    exclude[lookup] = expression.value\n                else:\n                    filtr[lookup] = expression.value\n\n        # Limit ourselves to our alert\n        filtr['id'] = alert.id\n\n        if not extra['where']:\n            extra = {}\n\n        _logger.debug(\n            'alert %d: checking against filter %d with filter: %s, exclude: '\n            '%s and extra: %s',\n            alert.id,\n            self.id,\n            filtr,\n            exclude,\n            extra,\n        )\n\n        # Check the alert maches whith a SELECT COUNT(*) FROM .... so that the\n        # db doesn't have to work as much.\n        if AlertQueue.objects.filter(**filtr).exclude(**exclude).extra(**extra).count():\n            _logger.debug('alert %d: matches filter %d', alert.id, self.id)\n            return True\n\n        _logger.debug('alert %d: did not match filter %d', alert.id, self.id)\n        return False\n\n\nclass FilterGroup(models.Model):\n    \"\"\"A set of filters group contents that an account can subscribe to or be\n    given permission to.\n\n    \"\"\"\n\n    owner = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"filter_groups\",\n    )\n    name = VarcharField()\n    description = VarcharField()\n\n    group_permissions = models.ManyToManyField(\n        'AccountGroup',\n        db_table='filtergroup_group_permission',\n        related_name=\"filter_groups\",\n    )\n\n    class Meta(object):\n        db_table = 'filtergroup'\n\n    def __str__(self):\n        return self.name\n\n\nclass MatchField(models.Model):\n    \"\"\"Defines which fields can be matched upon and how\"\"\"\n\n    STRING = 0\n    INTEGER = 1\n    IP = 2\n\n    # Due to the way alertengine has been reimpleneted the code only really\n    # does stuff diffrently if datatype is set to IP, however setting datatype\n    # still makes alot of sense in alertprofiles so that we can verify\n    # userinput\n    DATA_TYPES = (\n        (STRING, _('string')),\n        (INTEGER, _('integer')),\n        (IP, _('ip')),\n    )\n\n    # This is a manualy mainted mapping between our model concepts and the\n    # actual db tables that are in use. This is needed as our value_id is base\n    # on this value.\n    ALERT = 'alertq'\n    ALERTTYPE = 'alerttype'\n    ARP = 'arp'\n    CAM = 'cam'\n    CATEGORY = 'cat'\n    NETBOXGROUP = 'netboxgroup'\n    DEVICE = 'device'\n    EVENT_TYPE = 'eventtype'\n    LOCATION = 'location'\n    MEMORY = 'mem'\n    MODULE = 'module'\n    NETBOX = 'netbox'\n    NETBOXINFO = 'netboxinfo'\n    ORGANIZATION = 'org'\n    PREFIX = 'prefix'\n    ROOM = 'room'\n    SERVICE = 'service'\n    INTERFACE = 'interface'\n    TYPE = 'type'\n    VENDOR = 'vendor'\n    VLAN = 'vlan'\n    USAGE = 'usage'\n\n    LOOKUP_FIELDS = (\n        (ALERT, _('alert')),\n        (ALERTTYPE, _('alert type')),\n        (ARP, _('arp')),\n        (CAM, _('cam')),\n        (CATEGORY, _('category')),\n        (NETBOXGROUP, _('netboxgroup')),\n        (DEVICE, _('device')),\n        (EVENT_TYPE, _('event type')),\n        (LOCATION, _('location')),\n        (MEMORY, _('memeroy')),\n        (MODULE, _('module')),\n        (NETBOX, _('netbox')),\n        (NETBOXINFO, _('netbox info')),\n        (ORGANIZATION, _('organization')),\n        (PREFIX, _('prefix')),\n        (ROOM, _('room')),\n        (SERVICE, _('service')),\n        (INTERFACE, _('Interface')),\n        (TYPE, _('type')),\n        (VENDOR, _('vendor')),\n        (VLAN, _('vlan')),\n        (USAGE, _('usage')),\n    )\n\n    # This mapping designates how a MatchField relates to an alert. (yes the\n    # formating is not PEP8, but it wouldn't be very readable otherwise)\n    # Since we need to know how things are connected this has been done manualy\n    FOREIGN_MAP = {\n        ARP: 'netbox__arp_set',\n        CAM: 'netbox__cam_set',\n        CATEGORY: 'netbox__category',\n        NETBOXGROUP: 'netbox__netboxcategory__category',\n        DEVICE: 'netbox__device',\n        EVENT_TYPE: 'event_type',\n        LOCATION: 'netbox__room__location',\n        MEMORY: 'netbox__memory_set',\n        MODULE: 'netbox__modules',\n        NETBOX: 'netbox',\n        NETBOXINFO: 'netbox__info',\n        ORGANIZATION: 'netbox__organization',\n        PREFIX: 'netbox__prefix',\n        ROOM: 'netbox__room',\n        SERVICE: 'netbox__service',\n        INTERFACE: 'netbox__connected_to_interface',\n        TYPE: 'netbox__type',\n        USAGE: 'netbox__organization__vlans__usage',\n        VENDOR: 'netbox__type__vendor',\n        VLAN: 'netbox__organization__vlans',\n        ALERT: '',  # Checks alert object itself\n        ALERTTYPE: 'alert_type',\n    }\n\n    # Build the mapping we need to be able to do checks.\n    VALUE_MAP = {}\n    CHOICES = []\n    MODEL_MAP = {}\n\n    # This code loops over all the SUPPORTED_MODELS and gets the db_table and\n    # db_column so that we can translate them into the correspinding attributes\n    # on our django models. (field and model need to be set to None to avoid an\n    # ugly side effect of field becoming an acctuall field on MatchField)\n    for model in SUPPORTED_MODELS:\n        for field in model._meta.fields:\n            key = '%s.%s' % (model._meta.db_table, field.db_column or field.attname)\n            value = '%s__%s' % (FOREIGN_MAP[model._meta.db_table], field.attname)\n\n            VALUE_MAP[key] = field.attname\n            CHOICES.append((key, value.lstrip('_')))\n            MODEL_MAP[key] = (model, field.attname)\n        field = None\n    model = None\n\n    name = VarcharField()\n    description = VarcharField(blank=True)\n    value_help = VarcharField(\n        blank=True,\n        help_text=_(\n            'Help text for the match field. Displayed by the value '\n            'input box in the GUI to help users enter sane values.'\n        ),\n    )\n    value_id = VarcharField(\n        choices=CHOICES,\n        help_text=_(\n            'The \"match field\". This is the actual database field '\n            'alert engine will watch.'\n        ),\n    )\n    value_name = VarcharField(\n        choices=CHOICES,\n        blank=True,\n        help_text=_(\n            'When \"show list\" is checked, the list will be populated '\n            'with data from this column as well as the \"value id\" '\n            'field. Does nothing else than provide a little more '\n            'info for the users in the GUI.'\n        ),\n    )\n    value_sort = VarcharField(\n        choices=CHOICES,\n        blank=True,\n        help_text=_(\n            'Options in the list will be ordered by this field (if '\n            'not set, options will be ordered by primary key). Only '\n            'does something when \"Show list\" is checked.'\n        ),\n    )\n    list_limit = models.IntegerField(\n        blank=True,\n        help_text=_(\n            'Only this many options will be available in the list. '\n            'Only does something when \"Show list\" is checked.'\n        ),\n    )\n    data_type = models.IntegerField(\n        choices=DATA_TYPES, help_text=_('The data type of the match field.')\n    )\n    show_list = models.BooleanField(\n        blank=True,\n        default=False,\n        help_text=_(\n            'If unchecked values can be entered into a text input. '\n            'If checked values must be selected from a list '\n            'populated by data from the match field selected above.'\n        ),\n    )\n\n    class Meta(object):\n        db_table = 'matchfield'\n\n    def __str__(self):\n        return self.name\n\n    def get_lookup_mapping(self):\n        \"\"\"Returns the field lookup represented by this MatchField.\"\"\"\n        _logger = logging.getLogger('nav.alertengine.matchfield.get_lookup_mapping')\n\n        try:\n            foreign_lookup = self.FOREIGN_MAP[self.value_id.split('.')[0]]\n            value = self.VALUE_MAP[self.value_id]\n\n            if foreign_lookup:\n                return '%s__%s' % (foreign_lookup, value)\n            return value\n\n        except KeyError:\n            _logger.error(\n                \"Tried to lookup mapping for %s which is not supported\", self.value_id\n            )\n        return None\n\n\n#######################################################################\n### AlertEngine models\n\n\nclass SMSQueue(models.Model):\n    \"\"\"Queue of messages that should be sent or have been sent by SMSd\"\"\"\n\n    SENT = 'Y'\n    NOT_SENT = 'N'\n    IGNORED = 'I'\n\n    SENT_CHOICES = (\n        (SENT, _('sent')),\n        (NOT_SENT, _('not sent yet')),\n        (IGNORED, _('ignored')),\n    )\n\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        null=True,\n        related_name=\"sms_queues\",\n    )\n    time = models.DateTimeField(auto_now_add=True)\n    phone = models.CharField(max_length=15)\n    message = models.CharField(max_length=145, db_column='msg')\n    sent = models.CharField(max_length=1, default=NOT_SENT, choices=SENT_CHOICES)\n    sms_id = models.IntegerField(db_column='smsid')\n    time_sent = models.DateTimeField(db_column='timesent')\n    severity = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'smsq'\n\n    def __str__(self):\n        return '\"%s\" to %s, sent: %s' % (self.message, self.phone, self.sent)\n\n    def save(self, *args, **kwargs):\n        \"\"\"Overrides save to truncate long messages (max is 145)\"\"\"\n        if len(self.message) > 142:\n            self.message = self.message[:142] + '...'\n\n        return super(SMSQueue, self).save(*args, **kwargs)\n\n\nclass AccountAlertQueue(models.Model):\n    \"\"\"Defines which alerts should be keept around and sent at a later time\"\"\"\n\n    account = models.ForeignKey(\n        'Account',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"queued_alerts\",\n    )\n    subscription = models.ForeignKey(\n        'AlertSubscription',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"queued_alerts\",\n    )\n    alert = models.ForeignKey(\n        'AlertQueue',\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"queued_alerts\",\n    )\n    insertion_time = models.DateTimeField(auto_now_add=True)\n\n    class Meta(object):\n        db_table = 'accountalertqueue'\n\n    def delete(self, *args, **kwargs):\n        \"\"\"Deletes the alert from the user's alert queue.\n\n        Also deletes the alert globally if not queued for anyone else.\n\n        \"\"\"\n        # TODO deleting items with the manager will not trigger this behaviour\n        # cleaning up related messages.\n\n        super(AccountAlertQueue, self).delete(*args, **kwargs)\n\n        # Remove the alert from the AlertQueue if we are the last item\n        # depending upon it.\n        if self.alert.queued_alerts.count() == 0:\n            self.alert.delete()\n\n    def send(self):\n        \"\"\"Sends the alert in question to the address in the subscription\"\"\"\n        try:\n            sent = self.subscription.alert_address.send(self.alert, self.subscription)\n        except AlertSender.DoesNotExist:\n            address = self.subscription.alert_address\n            sender = address.type_id\n\n            if sender is not None:\n                raise Exception(\n                    \"Invalid sender set for address %s, \"\n                    \"please check that %s is in profiles.alertsender\"\n                    % (address, sender)\n                )\n            else:\n                raise Exception(\n                    \"No sender set for address %s, this might be due to a \"\n                    \"failed db upgrade from 3.4 to 3.5\" % address\n                )\n\n        except AlertQueue.DoesNotExist:\n            _logger = logging.getLogger('nav.alertengine.accountalertqueue.send')\n            _logger.error(\n                (\n                    'Inconsistent database state, alertqueue entry %d '\n                    + 'missing for account-alert. If you know how the '\n                    + 'database got into this state please update '\n                    + 'LP#494036'\n                ),\n                self.alert_id,\n            )\n\n            super(AccountAlertQueue, self).delete()\n            return False\n        except (FatalDispatcherException, InvalidAlertAddressError):\n            self.delete()\n            return False\n\n        if sent:\n            self.delete()\n\n        return sent\n\n\n# Make sure you update netmap-extras.js too if you change this! ;-)\nLINK_TYPES = (2, 'Layer 2'), (3, 'Layer 3')\n\n\nclass NetmapView(models.Model):\n    \"\"\"Properties for a specific view in Netmap\"\"\"\n\n    viewid = models.AutoField(primary_key=True)\n    owner = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='owner',\n        related_name=\"netmap_views\",\n    )\n    title = models.TextField()\n    description = models.TextField(null=True, blank=True)\n    topology = models.IntegerField(choices=LINK_TYPES)\n    # picke x,y,scale (translate(x,y) , scale(scale)\n    zoom = models.CharField(max_length=255)\n    last_modified = models.DateTimeField(auto_now_add=True)\n    is_public = models.BooleanField(default=False)\n    display_elinks = models.BooleanField(default=False)\n    display_orphans = models.BooleanField(default=False)\n    location_room_filter = models.CharField(max_length=255, blank=True)\n    categories = models.ManyToManyField(\n        Category, through='NetmapViewCategories', related_name='netmap_views'\n    )\n\n    def __str__(self):\n        return '%s (%s)' % (self.viewid, self.title)\n\n    def topology_unicode(self):\n        return dict(LINK_TYPES).get(self.topology)\n\n    def get_absolute_url(self):\n        return \"%s#/netmap/%s\" % (reverse('netmap-index'), self.viewid)\n\n    def get_set_defaultview_url(self):\n        \"\"\"URL for admin django view to set a default view\"\"\"\n        return reverse('netmap-api-netmap-defaultview-global')\n\n    class Meta(object):\n        db_table = 'netmap_view'\n\n\nclass NetmapViewDefaultView(models.Model):\n    \"\"\"Default view for each user\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    view = models.ForeignKey(\n        NetmapView,\n        on_delete=models.CASCADE,\n        db_column='viewid',\n        related_name=\"default_views\",\n    )\n    owner = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='ownerid',\n        related_name=\"default_views\",\n    )\n\n    class Meta(object):\n        db_table = 'netmap_view_defaultview'\n\n    def __repr__(self):\n        return \"{name}{args!r}\".format(\n            name=self.__class__.__name__, args=(self.id, self.view, self.owner)\n        )\n\n\nclass NetmapViewCategories(models.Model):\n    \"\"\"Saved categories for a selected view in Netmap\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking a primary key\n    view = models.ForeignKey(\n        NetmapView,\n        on_delete=models.CASCADE,\n        db_column='viewid',\n        related_name='netmap_view_categories',\n    )\n    category = models.ForeignKey(\n        Category,\n        on_delete=models.CASCADE,\n        db_column='catid',\n        related_name='netmap_view_categories',\n    )\n\n    def __str__(self):\n        return '%s in category %s' % (self.view, self.category)\n\n    class Meta(object):\n        db_table = 'netmap_view_categories'\n        unique_together = (('view', 'category'),)  # Primary key\n\n\nclass NetmapViewNodePosition(models.Model):\n    \"\"\"Saved positions for nodes for a selected view in Netmap\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking a primary key\n    viewid = models.ForeignKey(\n        NetmapView,\n        on_delete=models.CASCADE,\n        db_column='viewid',\n        related_name='node_positions',\n    )\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name='node_positions',\n    )\n    x = models.IntegerField()\n    y = models.IntegerField()\n\n    class Meta(object):\n        db_table = 'netmap_view_nodeposition'\n\n\nclass AccountTool(models.Model):\n    \"\"\"Link between tool and account\"\"\"\n\n    id = models.AutoField(primary_key=True, db_column='account_tool_id')\n    toolname = VarcharField()\n    account = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='accountid',\n        related_name=\"account_tools\",\n    )\n    display = models.BooleanField(default=True)\n    priority = models.IntegerField(default=0)\n\n    def __str__(self):\n        return \"%s - %s\" % (self.toolname, self.account)\n\n    class Meta(object):\n        db_table = 'accounttool'\n\n\nclass AccountDashboard(models.Model):\n    \"\"\"Stores dashboards for each user\"\"\"\n\n    name = VarcharField()\n    num_columns = models.IntegerField(default=3)\n    account = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        related_name=\"account_dashboards\",\n    )\n    is_shared = models.BooleanField(default=False)\n    subscriptions = models.ManyToManyField(\n        Account,\n        through='AccountDashboardSubscription',\n        related_name=\"account_dashboard_subscriptions\",\n    )\n\n    def __str__(self):\n        return self.name\n\n    def get_absolute_url(self):\n        return reverse('dashboard-index-id', kwargs={'did': self.id})\n\n    def to_json_dict(self):\n        data = {\n            'name': self.name,\n            'num_columns': self.num_columns,\n            'account': self.account_id,\n            'widgets': [],\n            'version': 1,\n        }\n        for widget in self.widgets.all():\n            data['widgets'].append(widget.to_json_dict())\n        return data\n\n    def can_access(self, account):\n        return self.account_id == account.id or self.is_shared\n\n    def can_edit(self, account):\n        if account.is_anonymous:\n            return False\n        return self.account_id == account.id\n\n    def is_subscribed(self, account):\n        return self.subscribers.filter(account=account).exists()\n\n    def is_default_for_account(self, account):\n        default = account.default_dashboard\n        return default and default.id == self.id\n\n    class Meta(object):\n        db_table = 'account_dashboard'\n        ordering = ('name',)\n\n\nclass AccountDefaultDashboard(models.Model):\n    account = models.OneToOneField(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='account_id',\n        primary_key=True,\n        related_name='default_dashboard_mapping',\n    )\n    dashboard = models.ForeignKey(\n        AccountDashboard,\n        on_delete=models.CASCADE,\n        db_column='dashboard_id',\n        related_name='default_for_accounts',\n    )\n\n    class Meta:\n        db_table = 'account_default_dashboard'\n\n\nclass AccountDashboardSubscription(models.Model):\n    \"\"\"Subscriptions for dashboards shared between users\"\"\"\n\n    account = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        related_name=\"dashboard_subscriptions\",\n    )\n    dashboard = models.ForeignKey(\n        AccountDashboard,\n        on_delete=models.CASCADE,\n        related_name=\"subscribers\",\n    )\n\n    class Meta(object):\n        db_table = 'account_dashboard_subscription'\n        unique_together = (('account', 'dashboard'),)\n\n\nclass AccountNavlet(models.Model):\n    \"\"\"Store information about a users navlets\"\"\"\n\n    navlet = VarcharField()\n    order = models.IntegerField(default=0, db_column='displayorder')\n    account = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='account',\n        related_name=\"widgets\",\n    )\n    preferences = DictAsJsonField(null=True)\n    column = models.IntegerField(db_column='col')\n    dashboard = models.ForeignKey(\n        AccountDashboard,\n        on_delete=models.CASCADE,\n        related_name='widgets',\n    )\n\n    def __str__(self):\n        return \"%s - %s\" % (self.navlet, self.account)\n\n    def to_json_dict(self):\n        return {\n            'navlet': self.navlet,\n            'preferences': self.preferences,\n            'column': self.column,\n            'order': self.order,\n        }\n\n    class Meta(object):\n        db_table = 'account_navlet'\n        ordering = ['order']\n\n\nclass ReportSubscription(models.Model):\n    \"\"\"Subscriptions for availability reports\"\"\"\n\n    MONTH = 'month'\n    WEEK = 'week'\n    DAY = 'day'\n    PERIODS = ((MONTH, 'monthly'), (WEEK, 'weekly'), (DAY, 'daily'))\n\n    DEVICE = 'device'\n    LINK = 'link'\n    TYPES = ((DEVICE, 'device availability'), (LINK, 'link availability'))\n\n    account = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        related_name=\"report_subscriptions\",\n    )\n    address = models.ForeignKey(\n        AlertAddress,\n        on_delete=models.CASCADE,\n    )\n    period = VarcharField(choices=PERIODS)\n    report_type = VarcharField(choices=TYPES)\n    exclude_maintenance = models.BooleanField()\n\n    class Meta(object):\n        db_table = 'report_subscription'\n\n    def __str__(self):\n        if self.report_type == self.LINK:\n            return \"{} report for {} sent to {}\".format(\n                self.get_period_description(self.period),\n                self.get_type_description(self.report_type),\n                self.address.address,\n            )\n\n        return \"{} report for {} ({} time in maintenance) sent to {}\".format(\n            self.get_period_description(self.period),\n            self.get_type_description(self.report_type),\n            'excluding' if self.exclude_maintenance else 'including',\n            self.address.address,\n        )\n\n    def serialize(self):\n        keys = ['report_type', 'period', 'address']\n        filtered = {k: v for k, v in model_to_dict(self).items() if k in keys}\n        return json.dumps(filtered)\n\n    @staticmethod\n    def get_period_description(period):\n        return next(v for k, v in ReportSubscription.PERIODS if k == period)\n\n    @staticmethod\n    def get_type_description(report_type):\n        return next(v for k, v in ReportSubscription.TYPES if k == report_type)\n"
  },
  {
    "path": "python/nav/models/rack.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Models for racks and rack items\"\"\"\n\nimport json\nfrom itertools import chain\n\nfrom django.db import models\n\nfrom nav.models.fields import VarcharField\nfrom nav.models.manage import Room, Sensor\n\n\nclass RackManager(models.Manager):\n    \"\"\"A manager for the rack model\"\"\"\n\n    def get_all_sensor_pks_in_room(self, room):\n        \"\"\"Returns an exhaustive list of the primary keys of sensors added to\n        all racks in the given room.\n\n        :type room: nav.models.manage.Room\n\n        \"\"\"\n        sensor_pks = (rack.get_all_sensor_pks() for rack in self.filter(room=room))\n        return set(chain(*sensor_pks))\n\n\nclass RackEncoder(json.JSONEncoder):\n    \"\"\"JSON encoder for rack items\"\"\"\n\n    def default(self, obj):\n        if isinstance(obj, BaseRackItem):\n            return obj.to_json()\n        # Let the base class default method raise the TypeError\n        return json.JSONEncoder.default(self, obj)\n\n\nclass Rack(models.Model):\n    \"\"\"A physical rack placed in a room.\"\"\"\n\n    objects = RackManager()\n\n    id = models.AutoField(primary_key=True, db_column='rackid')\n    room = models.ForeignKey(\n        Room, on_delete=models.CASCADE, db_column='roomid', related_name=\"racks\"\n    )\n    rackname = VarcharField(blank=True)\n    ordering = models.IntegerField()\n    _configuration = models.JSONField(\n        default=None, db_column='configuration', encoder=RackEncoder\n    )\n    __configuration = None\n    item_counter = models.IntegerField(default=0, null=False, db_column='item_counter')\n\n    class Meta(object):\n        db_table = 'rack'\n\n    def __str__(self):\n        return \"'{}' in {}\".format(self.rackname or self.id, self.room.pk)\n\n    @property\n    def configuration(self):\n        \"\"\"Gets (and sets) the rackitem configuration for this rack\n\n        The rack item configuration is stored as JSONB, and is returned as a\n        dict by psycopg.\n        \"\"\"\n        if self.__configuration is None:\n            if self._configuration is None:\n                self._configuration = {}\n            self._configuration.setdefault('left', [])\n            self._configuration.setdefault('center', [])\n            self._configuration.setdefault('right', [])\n            self._configuration['left'] = [\n                rack_decoder(x) for x in self._configuration['left']\n            ]\n            self._configuration['right'] = [\n                rack_decoder(x) for x in self._configuration['right']\n            ]\n            self._configuration['center'] = [\n                rack_decoder(x) for x in self._configuration['center']\n            ]\n            self.__configuration = self._configuration\n\n        return self.__configuration\n\n    def _column(self, column):\n        return self.configuration[column]\n\n    @property\n    def left_column(self):\n        \"\"\"Gets all rackitems in the left column\"\"\"\n        return self._column('left')\n\n    @property\n    def right_column(self):\n        \"\"\"Gets all rackitems in the right column\"\"\"\n        return self._column('right')\n\n    @property\n    def center_column(self):\n        \"\"\"Gets all rackitems in the center column\"\"\"\n        return self._column('center')\n\n    def add_left_item(self, item):\n        \"\"\"\n        :type item: RackItem\n        \"\"\"\n        self.item_counter += 1\n        item.id = self.item_counter\n        self.left_column.append(item)\n\n    def add_center_item(self, item):\n        \"\"\"\n        :type item: RackItem\n        \"\"\"\n        self.item_counter += 1\n        item.id = self.item_counter\n        self.center_column.append(item)\n\n    def add_right_item(self, item):\n        \"\"\"\n        :type item: RackItem\n        \"\"\"\n        self.item_counter += 1\n        item.id = self.item_counter\n        self.right_column.append(item)\n\n    def remove_left_item(self, index):\n        \"\"\"\n        :type index: int\n        \"\"\"\n        self.left_column.pop(index)\n\n    def remove_center_item(self, index):\n        \"\"\"\n        :type index: int\n        \"\"\"\n        self.center_column.pop(index)\n\n    def remove_right_item(self, index):\n        \"\"\"\n        :type index: int\n        \"\"\"\n        self.right_column.pop(index)\n\n    def get_all_sensor_pks(self):\n        \"\"\"Returns an exhaustive list of the primary keys of sensors in this\n        rack\n        \"\"\"\n        return []\n\n\ndef rack_decoder(obj):\n    \"\"\"Instantiates the correct object based on __type__ internal\"\"\"\n    if '__type__' in obj:\n        if obj['__type__'] == 'SensorRackItem':\n            return SensorRackItem(**obj)\n        if obj['__type__'] == 'SensorsDiffRackItem':\n            return SensorsDiffRackItem(**obj)\n        if obj['__type__'] == 'SensorsSumRackItem':\n            return SensorsSumRackItem(**obj)\n    return obj\n\n\nclass BaseRackItem(object):\n    \"\"\"The super class for rack items\n\n    This class should never be used directly\n    \"\"\"\n\n    def __init__(self, id=None, **kwargs):\n        self.id = id\n\n    def to_json(self):\n        \"\"\"TODO: Not really to_json is it?\"\"\"\n        return {\n            '__type__': self.__class__.__name__,\n            'id': self.id,\n        }\n\n    def title(self):\n        \"\"\"A possible long description\"\"\"\n        return self.human_readable\n\n    def get_metric(self):\n        \"\"\"Returns the metric used for getting the values\"\"\"\n        raise NotImplementedError\n\n    def unit_of_measurement(self):\n        \"\"\"Returns the unit of measurement\n\n        :rtype: str\n        \"\"\"\n        raise NotImplementedError\n\n    def get_absolute_url(self):\n        \"\"\"Returns the linktarget\"\"\"\n        pass\n\n    def human_readable(self):\n        \"\"\"A short and consise description\"\"\"\n        raise NotImplementedError\n\n    def get_display_range(self):\n        \"\"\"Gets the range of values for this sensor\n\n        Is a list to simplify front-end usage\n        \"\"\"\n        raise NotImplementedError\n\n    def get_display_configuration(self):\n        \"\"\"Return any other configuration required to display this rack item\"\"\"\n        return {}\n\n\nclass SensorRackItem(BaseRackItem):\n    \"\"\"A rackitem that display the value of a sensor\"\"\"\n\n    def __init__(self, sensor, **kwargs):\n        super(SensorRackItem, self).__init__(**kwargs)\n        self.sensor = sensor\n        if isinstance(sensor, int):\n            try:\n                self.sensor = Sensor.objects.get(pk=sensor)\n            except Sensor.DoesNotExist:\n                pass\n\n    def to_json(self):\n        data = super(SensorRackItem, self).to_json()\n        data['sensor'] = self.sensor.pk if self.sensor_exists() else self.sensor\n        return data\n\n    def title(self):\n        if self.sensor_exists():\n            return str(self.sensor)\n        else:\n            return \"Sensor {} no longer exists\".format(self.sensor)\n\n    def get_metric(self):\n        if self.sensor_exists():\n            return self.sensor.get_metric_name()\n\n    def unit_of_measurement(self):\n        if self.sensor_exists():\n            return self.sensor.unit_of_measurement\n\n    def get_absolute_url(self):\n        if self.sensor_exists():\n            return self.sensor.get_absolute_url()\n\n    def human_readable(self):\n        if self.sensor_exists():\n            return self.sensor.human_readable\n\n    def get_display_range(self):\n        if self.sensor_exists():\n            return list(self.sensor.get_display_range())\n        else:\n            return []\n\n    def get_display_configuration(self):\n        if self.sensor_exists():\n            return self.sensor.get_display_configuration()\n        return {}\n\n    def sensor_exists(self):\n        return isinstance(self.sensor, Sensor)\n\n\nclass SensorsDiffRackItem(BaseRackItem):\n    \"\"\"A rackitem that display the difference of two sensors\"\"\"\n\n    def __init__(self, minuend, subtrahend, **kwargs):\n        super(SensorsDiffRackItem, self).__init__(**kwargs)\n        self.minuend = minuend\n        self.subtrahend = subtrahend\n        if isinstance(minuend, int):\n            try:\n                self.minuend = Sensor.objects.get(pk=minuend)\n            except Sensor.DoesNotExist:\n                pass\n        if isinstance(subtrahend, int):\n            try:\n                self.subtrahend = Sensor.objects.get(pk=subtrahend)\n            except Sensor.DoesNotExist:\n                pass\n\n    def to_json(self):\n        data = super(SensorsDiffRackItem, self).to_json()\n        data['minuend'] = self.minuend.pk\n        data['subtrahend'] = self.subtrahend.pk\n        return data\n\n    def title(self):\n        return \"Difference between {} and {}\".format(self.minuend, self.subtrahend)\n\n    def get_metric(self):\n        return \"diffSeries({minuend},{subtrahend})\".format(\n            minuend=self.minuend.get_metric_name(),\n            subtrahend=self.subtrahend.get_metric_name(),\n        )\n\n    def unit_of_measurement(self):\n        return self.minuend.unit_of_measurement\n\n    def get_absolute_url(self):\n        return \"\"\n\n    def human_readable(self):\n        return \"{} - {}\".format(\n            self.minuend.human_readable, self.subtrahend.human_readable\n        )\n\n    def get_display_range(self):\n        return list(self.minuend.get_display_range())\n\n\nclass SensorsSumRackItem(BaseRackItem):\n    \"\"\"A rackitem that display the sum of several sensors\"\"\"\n\n    def __init__(self, title, sensors, **kwargs):\n        super(SensorsSumRackItem, self).__init__(**kwargs)\n        self.sensors = sensors\n        self._title = title\n        for i, sensor in enumerate(self.sensors):\n            if isinstance(sensor, int):\n                try:\n                    self.sensors[i] = Sensor.objects.get(pk=sensor)\n                except Sensor.DoesNotExist:\n                    pass\n\n    def to_json(self):\n        data = super(SensorsSumRackItem, self).to_json()\n        data['sensors'] = [sensor.pk for sensor in self.sensors]\n        data['title'] = self._title\n        return data\n\n    def title(self):\n        return \", \".join([s.human_readable for s in self.sensors])\n\n    def get_metric(self):\n        return \"sumSeries({})\".format(\n            \",\".join((s.get_metric_name() for s in self.sensors))\n        )\n\n    def unit_of_measurement(self):\n        if self.sensors:\n            return self.sensors[0].unit_of_measurement\n        return 'N/A'\n\n    def get_absolute_url(self):\n        return \"\"\n\n    def human_readable(self):\n        return self._title\n\n    def get_display_range(self):\n        return [sum(r) for r in zip(*[s.get_display_range() for s in self.sensors])]\n"
  },
  {
    "path": "python/nav/models/service.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2011-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django ORM wrapper for the NAV manage database\"\"\"\n\nfrom django.db import models\n\nfrom nav.metrics.data import get_metric_average\nfrom nav.metrics.templates import (\n    metric_path_for_service_availability,\n    metric_path_for_service_response_time,\n)\n\nfrom nav.models.manage import Netbox\nfrom nav.models.fields import VarcharField\n\n\nclass Service(models.Model):\n    \"\"\"From NAV Wiki: The service table defines the services on a netbox that\n    serviceMon monitors.\"\"\"\n\n    UP_UP = 'y'\n    UP_DOWN = 'n'\n    UP_SHADOW = 's'\n    UP_CHOICES = (\n        (UP_UP, 'up'),\n        (UP_DOWN, 'down'),\n        (UP_SHADOW, 'shadow'),\n    )\n    TIME_FRAMES = ('day', 'week', 'month')\n\n    id = models.AutoField(db_column='serviceid', primary_key=True)\n    netbox = models.ForeignKey(\n        Netbox,\n        on_delete=models.CASCADE,\n        db_column='netboxid',\n        related_name=\"services\",\n    )\n    active = models.BooleanField(default=True)\n    handler = VarcharField(verbose_name='service')\n    version = VarcharField()\n    up = models.CharField(max_length=1, choices=UP_CHOICES, default=UP_UP)\n\n    class Meta(object):\n        db_table = 'service'\n        ordering = ('handler',)\n\n    def __str__(self):\n        return \"{handler} at {netbox}\".format(handler=self.handler, netbox=self.netbox)\n\n    def get_statistics(self):\n        args = (self.netbox.sysname, self.handler, self.id)\n        avail_id = metric_path_for_service_availability(*args)\n        rtime_id = metric_path_for_service_response_time(*args)\n\n        result = {\n            'availability': {\n                'data_source': avail_id,\n            },\n            'response_time': {\n                'data_source': rtime_id,\n            },\n        }\n\n        for time_frame in self.TIME_FRAMES:\n            avg = get_metric_average([avail_id, rtime_id], start=\"-1%s\" % time_frame)\n\n            # Availability\n            pktloss = avg.get(avail_id, None)\n            if pktloss is not None:\n                pktloss = 100 - (pktloss * 100)\n            result['availability'][time_frame] = pktloss\n\n            # Response time\n            result['response_time'][time_frame] = avg.get(rtime_id, None)\n\n        return result\n\n    def is_on_maintenance(self):\n        \"\"\"\n        Returns True if this service, or its owning Netbox, is currently on\n        maintenance.\n        \"\"\"\n        states = self.netbox.get_unresolved_alerts('maintenanceState').filter(\n            variables__variable='service', subid=self.id\n        )\n        if states.count() < 1:\n            return self.netbox.is_on_maintenance()\n        else:\n            return True\n\n    def last_downtime_ended(self):\n        \"\"\"\n        Returns the end_time of the last known serviceState alert.\n\n        :returns: A datetime object if a serviceState alert was found,\n                  otherwise None\n        \"\"\"\n        try:\n            lastdown = self.netbox.alert_history_set.filter(\n                event_type__id='serviceState', end_time__isnull=False\n            ).order_by(\"-end_time\")[0]\n        except IndexError:\n            return\n        else:\n            return lastdown.end_time\n\n    def get_handler_description(self):\n        \"\"\"Returns the description of the handler\n\n        The description is defined in the service checker\n        \"\"\"\n        classname = \"{}Checker\".format(str(self.handler).capitalize())\n        modulename = \"nav.statemon.checker.{}\".format(classname)\n        checker = __import__(modulename, globals(), locals(), [classname], 0)\n        klass = getattr(checker, classname)\n        return getattr(klass, 'DESCRIPTION', '')\n\n    description = property(get_handler_description)\n\n\nclass ServiceProperty(models.Model):\n    \"\"\"From NAV Wiki: Each service may have an additional set of attributes.\n    They are defined here.\"\"\"\n\n    id = models.AutoField(primary_key=True)  # Serial for faking a primary key\n    service = models.ForeignKey(\n        Service,\n        on_delete=models.CASCADE,\n        db_column='serviceid',\n        related_name=\"properties\",\n    )\n    property = models.CharField(max_length=64)\n    value = VarcharField()\n\n    class Meta(object):\n        db_table = 'serviceproperty'\n        unique_together = (('service', 'property'),)  # Primary key\n\n    def __str__(self):\n        return '%s=%s, for %s' % (self.property, self.value, self.service)\n"
  },
  {
    "path": "python/nav/models/sql/README",
    "content": "What?\n=====\nThis directory contains programs and SQL scripts to create, initialize and\nupgrade the NAV PostgreSQL database.\n\n\nFiles and directories\n=====================\n\nbaseline/\n  This directory contains all the SQL scripts that define the baseline NAV\n  database schema.\n\nchanges/\n  This directory contains schema change scripts that will be automatically\n  applied when running `navsyncdb`.\n\nCreating the database from scratch\n==================================\nIn a typical setup with PostgreSQL installed on the same host as NAV, choose a\npassword for the NAV database user and set this in the `userpw_nav` option of\nthe `db.conf` config file.  Then, as the postgres user (typically via sudo),\nrun::\n\n  navsyncdb -c\n\nThe -c option will create the database user 'nav' and a database named 'nav',\nbefore initializing the NAV schema in this database.\n\n.. note:: If you are a developer wanting to install the schema files from your\n          checked out source code, you may want to use the `syncdb.py` script\n          provided in this same directory; the `navsyncdb` command will only\n          look in the current working directory and in the install location\n          for the schema files.\n\n\nAdvanced setup\n--------------\nIf you can't access the PostgreSQL server passwordlessly using the PostgreSQL\ncommand line tools from the local postgres shell account (ident\nauthentication), or you wish to create the database using a different\nsuperuser account, set the appropriate environment variables before running\n`navsyncdb`::\n\n  export PGUSER=postgres PGPASSWORD=<postgres_password>\n\nIf your PostgreSQL setup otherwise differs from the options in `db.conf`, just\nchange your `db.conf` accordingly before running `navsyncdb`.\n\nPlease be aware that `navsyncdb` requires the PostgreSQL client binaries to be\navailable on the search PATH.\n\n\nUpdating the database schema when upgrading NAV\n===============================================\n\n1. Stop nav with `nav stop`.\n2. Run `navsyncdb`.\n3. Restart Apache.\n4. Start NAV with `nav start`.\n\n\nUpdating the database from NAV versions older than 3.7.1\n--------------------------------------------------------\n\nThe `navsyncdb` system was first introduced in NAV 3.8. Prior to this, one had\nto run database upgrade scripts manually using `psql`.\n\nThe historic upgrade scripts are located in the `historic-updates` directory.\nFind all the ones that have version numbers higher than the NAV version you\nare upgrading from.  Run them manually in version number order, more or less\nlike this::\n\n  sudo -u postgres psql -f x.y.z.sql\n\nFor more details about historic updates, please refer to the\n`historic-updates/README` file.\n"
  },
  {
    "path": "python/nav/models/sql/baseline/arnold.sql",
    "content": "CREATE TABLE blocked_reason (\nblocked_reasonid SERIAL PRIMARY KEY,\nname VARCHAR,\ncomment VARCHAR\n);\n\nCREATE TABLE identity (\nidentityid SERIAL PRIMARY KEY,\nmac MACADDR NOT NULL, -- MAC-address of computer\nblocked_status VARCHAR CHECK (blocked_status='enabled' OR blocked_status='disabled' or blocked_status='quarantined'),\nblocked_reasonid INT REFERENCES blocked_reason ON UPDATE CASCADE ON DELETE SET NULL, -- reason of block\nswportid INT NOT NULL, -- FK to swport-table. We find sysname,ip,module and port from this\nip INET, -- current ip of computer\ndns VARCHAR, -- current dns-name of computer\nnetbios VARCHAR, -- current netbios-name of computer\nstarttime TIMESTAMP NOT NULL, -- time of first event on this computer-swport combo\nlastchanged TIMESTAMP NOT NULL, -- time of last current event on this computer-swport combo\nautoenable TIMESTAMP, -- time for autoenable\nautoenablestep INT, -- number of days to wait for autoenable\nmail VARCHAR, -- the mail address the warning was sent to\norgid VARCHAR,\ndetermined CHAR(1), -- set to y if this is mac/port combo is blocked with the -d option.\nfromvlan INT, -- original vlan on port before change (only on vlanchange)\ntovlan INT, -- vlan on port after change (only on vlanchange)\ntextual_interface VARCHAR DEFAULT '', -- for storing textual representation of the interface when detaining\n\nUNIQUE (mac,swportid)\n);\n\nCREATE TABLE event (\neventid SERIAL PRIMARY KEY,\nidentityid INT REFERENCES identity ON UPDATE CASCADE ON DELETE CASCADE,\nevent_comment VARCHAR,\nblocked_status VARCHAR CHECK (blocked_status='enabled' OR blocked_status='disabled' OR blocked_status='quarantined'),\nblocked_reasonid INT REFERENCES blocked_reason ON UPDATE CASCADE ON DELETE SET NULL, -- reason of block\neventtime TIMESTAMP NOT NULL,\nautoenablestep INT,\nusername VARCHAR NOT NULL\n);\n\n-- quarantine_vlans keeps track of the defined quaratine vlans that\n-- the users have defined\nCREATE TABLE quarantine_vlans (\nquarantineid SERIAL PRIMARY KEY,\nvlan INT,\ndescription VARCHAR,\n\nCONSTRAINT quarantine_vlan_unique UNIQUE (vlan)\n);\n\n-- A block, of lack of better name, is a run where we do automatic blocking \n-- of computers based on input ip-list.\nCREATE TABLE block (\nblockid SERIAL PRIMARY KEY,\nblocktitle VARCHAR NOT NULL, -- title of block\nblockdesc VARCHAR, -- description of block\nmailfile VARCHAR, -- path to mailfile to use to send mail when blocking\nreasonid INT REFERENCES blocked_reason ON UPDATE CASCADE ON DELETE CASCADE,\ndetermined CHAR(1), -- if set: keep old ports blocked when pursuing\nincremental CHAR(1), -- if set: increase number of days to block incrementally\nblocktime INT NOT NULL, -- days from block to autoenable\nactive CHAR(1) CHECK (active='y' OR active='n'), -- if set to n will not do blocking of this kind\nlastedited TIMESTAMP NOT NULL, -- timestamp of last time this block was edited\nlastedituser VARCHAR NOT NULL, -- username of user who last edited this block\ninputfile VARCHAR, -- path to file where list of ip-adresses is, if applicable\nactiveonvlans VARCHAR, -- a string with comma-separated vlan-numbers\ndetainmenttype VARCHAR CHECK (detainmenttype='disable' OR detainmenttype='quarantine'), -- type of detainment to try\nquarantineid INT REFERENCES quarantine_vlans ON UPDATE CASCADE ON DELETE CASCADE\n);\n"
  },
  {
    "path": "python/nav/models/sql/baseline/indexes.sql",
    "content": "/*\n * This script defines auxiliary indexes for NAV tables.\n */\n\n\n--------------------------------------------\n-- Create lookup indexes on manage tables --\n--------------------------------------------\nSET search_path TO manage;\n\nCREATE INDEX vlan_vlan_btree ON vlan USING btree (vlan);\n\nCREATE INDEX prefix_vlanid_btree ON prefix USING btree (vlanid);\n\nCREATE INDEX interface_to_interfaceid_btree ON interface USING btree (to_interfaceid);\n\nCREATE INDEX gwportprefix_interfaceid_btree ON gwportprefix USING btree (interfaceid);\nCREATE INDEX gwportprefix_prefixid_btree ON gwportprefix USING btree (prefixid);\n\nCREATE INDEX swportvlan_interfaceid_btree ON swportvlan USING btree (interfaceid);\nCREATE INDEX swportvlan_vlanid_btree ON swportvlan USING btree (vlanid);\n\nCREATE INDEX arp_netboxid_btree ON arp USING btree (netboxid);\nCREATE INDEX arp_mac_btree ON arp USING btree (mac);\nCREATE INDEX arp_ip_btree ON arp USING btree (ip);\nCREATE INDEX arp_start_time_btree ON arp USING btree (start_time);\nCREATE INDEX arp_end_time_btree ON arp USING btree (end_time);\nCREATE INDEX arp_prefixid_btree ON arp USING btree (prefixid);\n\nCREATE INDEX cam_mac_btree ON cam USING btree (mac);\nCREATE INDEX cam_end_time_btree ON cam USING btree (end_time);\nCREATE INDEX cam_misscnt_btree ON cam USING btree (misscnt);\nCREATE INDEX cam_netboxid_ifindex_end_time_btree ON cam USING btree (netboxid, ifindex, end_time);\n-- Index to speed up ipdevinfo queries for the first cam entry from a box\nCREATE INDEX cam_netboxid_start_time_btree ON cam USING btree (netboxid, start_time);\n\nCREATE INDEX eventq_target_btree ON eventq USING btree (target);\n\nCREATE INDEX eventqvar_eventqid_btree ON eventqvar USING btree (eventqid);\n\nCREATE INDEX alertqmsg_alertqid_btree ON alertqmsg USING btree (alertqid);\n\nCREATE INDEX alertqvar_alertqid_btree ON alertqvar USING btree (alertqid);\n\nCREATE INDEX alerthist_start_time_btree ON alerthist USING btree (start_time);\nCREATE INDEX alerthist_end_time_btree ON alerthist USING btree (end_time);\n\nCREATE INDEX alerthistmsg_alerthistid_btree ON alerthistmsg USING btree (alerthistid);\n\nCREATE INDEX alerthistvar_alerthistid_btree ON alerthistvar USING btree (alerthistid);\n\nCREATE INDEX alerthist_open_states_by_eventtype ON alerthist USING btree (netboxid, eventtypeid) WHERE end_time >= 'infinity';\n\nCREATE INDEX cam_open_records_by_netbox ON cam USING btree (netboxid) WHERE end_time >= 'infinity' OR misscnt >= 0;\n\nCREATE INDEX ipdevpoll_job_log_netboxjob_btree ON ipdevpoll_job_log (netboxid, job_name);\n\nCREATE INDEX interface_stack_higher ON interface_stack (higher);\nCREATE INDEX interface_stack_lower ON interface_stack (lower);\n-- Create index for ip column on manage.netbios to make lookups faster\n\nCREATE INDEX netbios_ip ON manage.netbios (ip);\n\nCREATE INDEX interface_aggregate_aggregator ON interface_aggregate (aggregator);\nCREATE INDEX interface_aggregate_interface ON interface_aggregate (interface);\n\n\n----------------------------------------------\n-- Create lookup indexes on profiles tables --\n----------------------------------------------\nSET search_path TO profiles;\n\nCREATE INDEX account_idx ON Account(login);\n\n\n--------------------------------------------\n-- Create lookup indexes on logger tables --\n--------------------------------------------\nSET search_path TO logger;\n\nCREATE INDEX log_message_type_btree ON log_message USING btree (type);\nCREATE INDEX log_message_origin_btree ON log_message USING btree (origin);\nCREATE INDEX log_message_time_btree ON log_message USING btree (time);\n\n-- combined index for quick lookups when expiring old records.\nCREATE INDEX log_message_expiration_btree ON log_message USING btree(newpriority, time);\n--------------------------------------------\n-- Create lookup indexes on radius tables --\n--------------------------------------------\nSET search_path TO radius;\n\n-- For use by onoff-, update-, stop- and simul_* queries\nCREATE INDEX radiusacct_active_user_idx ON radiusacct (UserName) WHERE AcctStopTime IS NULL;\n-- and for common statistic queries:\nCREATE INDEX radiusacct_start_user_index ON radiusacct (AcctStartTime, lower(UserName));\nCREATE INDEX radiusacct_stop_user_index ON radiusacct (AcctStopTime, lower(UserName));\n\nCREATE INDEX radiuslog_time_index ON radiuslog(time);\nCREATE INDEX radiuslog_username_index ON radiuslog(lower(UserName));\n\n-- Reset the search path\nRESET search_path;\n"
  },
  {
    "path": "python/nav/models/sql/baseline/logger.sql",
    "content": "--------------------------------------------------------\n-- priority\n-- Priority levels and descriptions\n--------------------------------------------------------\n\nCREATE TABLE priority (\n  priority INTEGER PRIMARY KEY,\n  keyword VARCHAR UNIQUE NOT NULL,\n  description VARCHAR\n);\n\n--------------------------------------------------------\n-- log_message_type\n-- Types of messages, ala syslog\n--------------------------------------------------------\n\nCREATE TABLE log_message_type (\n  type SERIAL PRIMARY KEY NOT NULL,\n  priority INTEGER REFERENCES priority (priority) ON DELETE SET NULL ON UPDATE CASCADE,\n  facility VARCHAR NOT NULL,\n  mnemonic VARCHAR NOT NULL,\n  UNIQUE (priority, facility, mnemonic)\n);\n\n--------------------------------------------------------\n-- category\n-- Categorising of origins\n--------------------------------------------------------\n\nCREATE TABLE category (\n  category VARCHAR PRIMARY KEY NOT NULL\n);\n\n--------------------------------------------------------\n-- origin\n-- Origins, senders of messages\n--------------------------------------------------------\n\nCREATE TABLE origin (\n  origin SERIAL PRIMARY KEY NOT NULL,\n  name VARCHAR NOT NULL,\n  category VARCHAR REFERENCES category(category) ON DELETE SET NULL ON UPDATE CASCADE\n);\n\n--------------------------------------------------------\n-- log_message\n-- The log messages \n-- time, origin, priority, type and message text.\n--------------------------------------------------------\n\nCREATE TABLE log_message (\n  id SERIAL PRIMARY KEY,\n  time TIMESTAMP WITHOUT TIME ZONE NOT NULL,\n  origin INTEGER NOT NULL REFERENCES origin (origin) ON UPDATE CASCADE ON DELETE SET NULL,\n  newpriority INTEGER REFERENCES priority (priority) ON UPDATE CASCADE ON DELETE SET NULL, -- for overlagring av defaultverdier\n  type INTEGER NOT NULL REFERENCES log_message_type (type) ON UPDATE CASCADE ON DELETE SET NULL,\n  message VARCHAR\n);\n\n--------------------------------------------------------\n-- errorerror\n-- Error messages that couldn't be parsed correctly are\n-- put here.  Other stuff also.\n--------------------------------------------------------\n\nCREATE TABLE errorerror (\n  id SERIAL PRIMARY KEY,\n  message VARCHAR\n);\n\n--------------------------------------------------------\n-- Create a view (wow, really?)\n--------------------------------------------------------\n\nCREATE VIEW message_view AS\nSELECT origin,type,newpriority,category,time \nFROM origin INNER JOIN log_message USING (origin);\n\n--------------------------------------------------------\n-- Insert default priority levels\n--------------------------------------------------------\n\ninsert into priority(priority, keyword, description) values (0,'emergencies','System unusable');\ninsert into priority(priority, keyword, description) values (1,'alerts','Immediate action needed');\ninsert into priority(priority, keyword, description) values (2,'critical','Critical conditions');\ninsert into priority(priority, keyword, description) values (3,'errors','Error conditions');\ninsert into priority(priority, keyword, description) values (4,'warnings','Warning conditions');\ninsert into priority(priority, keyword, description) values (5,'notifications','Normal but significant condition');\ninsert into priority(priority, keyword, description) values (6,'informational','Informational messages only');\ninsert into priority(priority, keyword, description) values (7,'debugging','Debugging messages');\n\n\n"
  },
  {
    "path": "python/nav/models/sql/baseline/manage.sql",
    "content": "/*\n=============================================\n        manage\n    SQL Initialization script for NAV's\n    manage database.  Read the README file\n    for more info.\n\n    Run the command:\n    psql manage -f manage.sql\n\n\t!! WARNING !!\n\n\tThis SQL script is encoded as unicode (UTF-8), before you do make\n\tchanges and commit, be 100% sure that your editor does not mess it up.\n\n    Check 1 : These norwegian letters looks nice:\n    ! æøåÆØÅ !\n    Check 2 : This is the Euro currency sign:\n    ! € !\n=============================================\n*/\n\nCREATE TABLE org (\n  orgid VARCHAR(30) PRIMARY KEY,\n  parent VARCHAR(30),\n  descr VARCHAR,\n  contact VARCHAR,\n  data hstore NOT NULL DEFAULT hstore(''),\n  CONSTRAINT org_parent_fkey FOREIGN KEY (parent) REFERENCES org (orgid)\n             ON UPDATE CASCADE\n);\nINSERT INTO org (orgid, descr, contact) VALUES ('myorg', 'Example organization unit', 'nobody');\n\nCREATE TABLE usage (\n  usageid VARCHAR(30) PRIMARY KEY,\n  descr VARCHAR NOT NULL\n);\n\n\nCREATE TABLE location (\n  locationid VARCHAR(30) PRIMARY KEY,\n  descr VARCHAR DEFAULT '',\n  data hstore DEFAULT hstore('') NOT NULL,\n  parent VARCHAR REFERENCES location(locationid) ON UPDATE CASCADE\n);\nINSERT INTO location (locationid, descr) VALUES ('mylocation', 'Example location');\n\nCREATE TABLE room (\n  roomid VARCHAR(30) PRIMARY KEY,\n  locationid VARCHAR(30) REFERENCES location,\n  descr VARCHAR,\n  position POINT,\n  data hstore NOT NULL DEFAULT hstore('')\n);\nINSERT INTO room (roomid, locationid, descr) VALUES ('myroom', 'mylocation', 'Example wiring closet');\n\nCREATE TABLE nettype (\n  nettypeid VARCHAR PRIMARY KEY,\n  descr VARCHAR,\n  edit BOOLEAN DEFAULT FALSE\n);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('core','core',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('dummy','dummy',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('elink','elink',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('lan','lan',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('link','link',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('loopback','loopbcak',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('reserved','reserved',TRUE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('private','private',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('scope','scope',TRUE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('static','static',FALSE);\nINSERT INTO nettype (nettypeid,descr,edit) VALUES ('unknown','unknow',FALSE);\n\nCREATE TABLE vlan (\n  vlanid SERIAL PRIMARY KEY,\n  vlan INT4,\n  nettype VARCHAR NOT NULL REFERENCES nettype(nettypeid) ON UPDATE CASCADE ON DELETE CASCADE,\n  orgid VARCHAR(30) REFERENCES org,\n  usageid VARCHAR(30) REFERENCES usage,\n  netident VARCHAR,\n  description VARCHAR\n);\n\nCREATE TABLE prefix (\n  prefixid SERIAL PRIMARY KEY,\n  netaddr CIDR NOT NULL,\n  vlanid INT4 REFERENCES vlan ON UPDATE CASCADE ON DELETE CASCADE,\n  UNIQUE(netaddr)\n);\n\nCREATE TABLE vendor (\n  vendorid VARCHAR(15) PRIMARY KEY\n);\n\nCREATE TABLE cat (\n  catid VARCHAR(8) PRIMARY KEY,\n  descr VARCHAR,\n  req_snmp BOOLEAN NOT NULL\n);\n\nINSERT INTO cat values ('GW','Routers (layer 3 device)','t');\nINSERT INTO cat values ('GSW','A layer 2 and layer 3 device','t');\nINSERT INTO cat values ('SW','Core switches (layer 2), typically with many vlans','t');\nINSERT INTO cat values ('EDGE','Edge switch without vlans (layer 2)','t');\nINSERT INTO cat values ('WLAN','Wireless equipment','t');\nINSERT INTO cat values ('SRV','Server','f');\nINSERT INTO cat values ('OTHER','Other equipment','f');\nINSERT INTO cat VALUES ('ENV', 'Environmental probes', true);\nINSERT INTO cat VALUES ('POWER', 'Power distribution equipment', true);\n\n\nCREATE TABLE device (\n  deviceid SERIAL PRIMARY KEY,\n  serial VARCHAR,\n  hw_ver VARCHAR,\n  fw_ver VARCHAR,\n  sw_ver VARCHAR,\n  discovered TIMESTAMP NULL DEFAULT NOW(),\n  UNIQUE(serial)\n);\n\nCREATE TABLE type (\n  typeid SERIAL PRIMARY KEY,\n  vendorid VARCHAR(15) NOT NULL REFERENCES vendor ON UPDATE CASCADE ON DELETE CASCADE,\n  typename VARCHAR NOT NULL,\n  sysObjectID VARCHAR NOT NULL,\n  descr VARCHAR,\n  UNIQUE (vendorid, typename),\n  UNIQUE (sysObjectID)\n);\n\nCREATE TABLE netbox (\n  netboxid SERIAL PRIMARY KEY,\n  ip INET NOT NULL,\n  roomid VARCHAR(30) NOT NULL CONSTRAINT netbox_roomid_fkey REFERENCES room ON UPDATE CASCADE,\n  typeid INT4 CONSTRAINT netbox_typeid_fkey REFERENCES type ON UPDATE CASCADE ON DELETE CASCADE,\n  sysname VARCHAR UNIQUE NOT NULL,\n  catid VARCHAR(8) NOT NULL CONSTRAINT netbox_catid_fkey REFERENCES cat ON UPDATE CASCADE ON DELETE CASCADE,\n  orgid VARCHAR(30) NOT NULL CONSTRAINT netbox_orgid_fkey REFERENCES org ON UPDATE CASCADE,\n  ro VARCHAR,\n  rw VARCHAR,\n  up CHAR(1) NOT NULL DEFAULT 'y' CHECK (up='y' OR up='n' OR up='s'), -- y=up, n=down, s=shadow\n  snmp_version INT4 NOT NULL DEFAULT 2,\n  upsince TIMESTAMP NOT NULL DEFAULT NOW(),\n  uptodate BOOLEAN NOT NULL DEFAULT false,\n  discovered TIMESTAMP NULL DEFAULT NOW(),\n  data hstore DEFAULT hstore('') NOT NULL,\n  UNIQUE(ip)\n);\n\n-- View to match each netbox with a prefix\n-- Multiple prefixes may match netbox.ip, but only the one with the longest\n-- mask is interesting.\nCREATE VIEW netboxprefix AS\n  SELECT netbox.netboxid,\n         (SELECT prefix.prefixid\n          FROM prefix\n          WHERE netbox.ip << prefix.netaddr::inet\n          ORDER BY masklen(prefix.netaddr::inet) DESC\n          LIMIT 1) AS prefixid\n  FROM netbox;\n\nCREATE TABLE netbox_vtpvlan (\n  id SERIAL,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  vtpvlan INT4,\n  PRIMARY KEY(id),\n  UNIQUE(netboxid, vtpvlan)\n);\n\nCREATE TABLE netboxgroup (\n    netboxgroupid VARCHAR,\n    descr VARCHAR NOT NULL,\n\n    PRIMARY KEY (netboxgroupid)\n);\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('AD','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('ADC','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('BACKUP','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('DNS','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('FS','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('LDAP','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('MAIL','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('NOTES','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('STORE','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('TEST','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('UNIX','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('UNIX-STUD','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('WEB','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('WIN','Description');\nINSERT INTO netboxgroup (netboxgroupid,descr) VALUES ('WIN-STUD','Description');\n\nCREATE TABLE netboxcategory (\n  id SERIAL,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  category VARCHAR NOT NULL REFERENCES netboxgroup ON UPDATE CASCADE ON DELETE CASCADE,\n  PRIMARY KEY(netboxid, category)\n);\n\n\nCREATE TABLE netboxinfo (\n  netboxinfoid SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  key VARCHAR,\n  var VARCHAR NOT NULL,\n  val TEXT NOT NULL,\n  UNIQUE(netboxid, key, var, val)\n);\n\nCREATE TABLE module (\n  moduleid SERIAL PRIMARY KEY,\n  deviceid INT4 NOT NULL REFERENCES device ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  module INT4,\n  name VARCHAR NOT NULL,\n  model VARCHAR,\n  descr VARCHAR,\n  up CHAR(1) NOT NULL DEFAULT 'y' CHECK (up='y' OR up='n'), -- y=up, n=down\n  downsince TIMESTAMP,\n\n  CONSTRAINT module_netboxid_key UNIQUE (netboxid, name)\n);\n\nCREATE TABLE mem (\n  memid SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  memtype VARCHAR NOT NULL,\n  device VARCHAR NOT NULL,\n  size INT4 NOT NULL,\n  used INT4,\n  UNIQUE(netboxid, memtype, device)\n);\n\n\n-- New consolidated interface table\n-- See MIB-II, IF-MIB, RFC 1229\nCREATE TABLE interface (\n  interfaceid SERIAL NOT NULL,\n  netboxid INT4 NOT NULL,\n  moduleid INT4,\n  ifindex INT4,\n  ifname VARCHAR,\n  ifdescr VARCHAR,\n  iftype INT4,\n  speed DOUBLE PRECISION,\n  ifphysaddress MACADDR,\n  ifadminstatus INT4, -- 1=up, 2=down, 3=testing\n  ifoperstatus INT4,  -- 1=up, 2=down, 3=testing, 4=unknown, 5=dormant, 6=notPresent, 7=lowerLayerDown\n  iflastchange INT4,\n  ifconnectorpresent BOOLEAN,\n  ifpromiscuousmode BOOLEAN,\n  ifalias VARCHAR,\n\n  -- non IF-MIB values\n  baseport INT4,  -- baseport number from BRIDGE-MIB, if any.\n                  -- A non-null value should be a good indicator that this is a switch port.\n  media VARCHAR,\n  vlan INT4,\n  trunk BOOLEAN,\n  duplex CHAR(1) CHECK (duplex='f' OR duplex='h'), -- f=full, h=half\n\n  to_netboxid INT4,\n  to_interfaceid INT4,\n\n  gone_since TIMESTAMP,\n\n  CONSTRAINT interface_pkey PRIMARY KEY (interfaceid),\n  CONSTRAINT interface_netboxid_fkey\n             FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT interface_moduleid_fkey\n             FOREIGN KEY (moduleid)\n             REFERENCES module (moduleid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_to_netboxid_fkey\n             FOREIGN KEY (to_netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_to_interfaceid_fkey\n             FOREIGN KEY (to_interfaceid)\n             REFERENCES interface (interfaceid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_netboxid_ifindex_unique\n             UNIQUE (netboxid, ifindex)\n);\n\n-- this should be populated with entries parsed from\n-- http://www.iana.org/assignments/ianaiftype-mib\nCREATE TABLE iana_iftype (\n  iftype INT4 NOT NULL,\n  name VARCHAR NOT NULL,\n  descr VARCHAR,\n\n  CONSTRAINT iftype_pkey PRIMARY KEY (iftype)\n);\n\nCREATE TABLE gwportprefix (\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  prefixid INT4 NOT NULL REFERENCES prefix ON UPDATE CASCADE ON DELETE CASCADE,\n  gwip INET NOT NULL,\n  virtual BOOL NOT NULL DEFAULT false,\n  UNIQUE(gwip)\n);\n\n-- Routing protocol attributes\nCREATE TABLE rproto_attr (\n  id SERIAL NOT NULL,\n  interfaceid INT4 NOT NULL,\n  protoname VARCHAR NOT NULL, -- bgp/ospf/isis\n  metric INT4,\n\n  CONSTRAINT rproto_attr_pkey\n             PRIMARY KEY (id),\n  CONSTRAINT rproto_attr_interfaceid_fkey\n             FOREIGN KEY (interfaceid)\n             REFERENCES interface (interfaceid)\n             ON UPDATE CASCADE ON DELETE CASCADE\n);\n\nCREATE TABLE swportvlan (\n  swportvlanid SERIAL PRIMARY KEY,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  vlanid INT4 NOT NULL REFERENCES vlan ON UPDATE CASCADE ON DELETE CASCADE,\n  direction CHAR(1) NOT NULL DEFAULT 'x', -- u=up, n=down, x=undefined?\n  UNIQUE (interfaceid, vlanid)\n);\n\nCREATE TABLE swportallowedvlan (\n  interfaceid INT4 NOT NULL PRIMARY KEY REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  hexstring VARCHAR\n);\n\n\nCREATE TABLE swportblocked (\n  swportblockedid SERIAL PRIMARY KEY,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  vlan INT4 NOT NULL,\n\n  CONSTRAINT swportblocked_uniq UNIQUE (interfaceid, vlan)\n);\n\n-- View to mimic old swport table\nCREATE VIEW swport AS (\n  SELECT\n    interfaceid AS swportid,\n    moduleid,\n    ifindex,\n    baseport AS port,\n    ifdescr AS interface,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link,\n    speed,\n    duplex,\n    media,\n    vlan,\n    trunk,\n    ifalias AS portname,\n    to_netboxid,\n    to_interfaceid AS to_swportid\n  FROM interface\n  WHERE interfaceid NOT IN (SELECT interfaceid FROM gwportprefix)\n);\n\n-- View to mimic old gwport table\nCREATE VIEW gwport AS (\n  SELECT\n    i.interfaceid AS gwportid,\n    moduleid,\n    ifindex,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link,\n    NULL::INT4 AS masterindex,\n    ifdescr AS interface,\n    speed,\n    metric,\n    ifalias AS portname,\n    to_netboxid,\n    to_interfaceid AS to_swportid\n  FROM interface i\n  JOIN gwportprefix gwpfx ON (i.interfaceid=gwpfx.interfaceid)\n  LEFT JOIN rproto_attr ra ON (i.interfaceid=ra.interfaceid AND ra.protoname='ospf')\n);\n\n-- View to see only switch ports\nCREATE VIEW interface_swport AS (\n  SELECT\n    interface.*,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link\n  FROM\n    interface\n  WHERE\n    baseport IS NOT NULL\n);\n\n-- View to see only router ports\nCREATE VIEW interface_gwport AS (\n  SELECT\n    interface.*,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link\n  FROM\n    interface\n  JOIN\n    (SELECT interfaceid FROM gwportprefix GROUP BY interfaceid) routerports USING (interfaceid)\n);\n\nCREATE TABLE cabling (\n  cablingid SERIAL PRIMARY KEY,\n  roomid VARCHAR(30) NOT NULL REFERENCES room ON UPDATE CASCADE ON DELETE CASCADE,\n  jack VARCHAR NOT NULL,\n  building VARCHAR NOT NULL,\n  targetroom VARCHAR NOT NULL,\n  descr VARCHAR,\n  category VARCHAR NOT NULL,\nUNIQUE(roomid,jack));\n\nCREATE TABLE patch (\n  patchid SERIAL PRIMARY KEY,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  cablingid INT4 NOT NULL REFERENCES cabling ON UPDATE CASCADE ON DELETE CASCADE,\n  split VARCHAR NOT NULL DEFAULT 'no',\nUNIQUE(interfaceid,cablingid));\n\n-- Remove floating devices.\n-- Devices that don't have a serial and no connected modules or netboxes.\n-- Triggers on delete on module and netbox.\nCREATE OR REPLACE FUNCTION remove_floating_devices() RETURNS TRIGGER AS '\n    BEGIN\n        DELETE FROM device WHERE\n            deviceid NOT IN (SELECT deviceid FROM netbox) AND\n            deviceid NOT IN (SELECT deviceid FROM module) AND\n            serial IS NULL;\n        RETURN NULL;\n        END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_module_delete_prune_devices\n    AFTER DELETE ON module\n    FOR EACH STATEMENT\n    EXECUTE PROCEDURE remove_floating_devices();\n\nCREATE TRIGGER trig_netbox_delete_prune_devices\n    AFTER DELETE ON netbox\n    FOR EACH STATEMENT\n    EXECUTE PROCEDURE remove_floating_devices();\n\n\n------------------------------------------------------------------\n------------------------------------------------------------------\n\n\nCREATE TABLE arp (\n  arpid SERIAL PRIMARY KEY,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL,\n  prefixid INT4 REFERENCES prefix ON UPDATE CASCADE ON DELETE SET NULL,\n  sysname VARCHAR NOT NULL,\n  ip INET NOT NULL,\n  mac MACADDR NOT NULL,\n  start_time TIMESTAMP NOT NULL,\n  end_time TIMESTAMP NOT NULL DEFAULT 'infinity'\n);\n\n-- Rule to automatically close open arp entries related to a given prefix\nCREATE OR REPLACE RULE close_arp_prefices AS ON DELETE TO prefix\n  DO UPDATE arp SET end_time=NOW(), prefixid=NULL\n     WHERE prefixid=OLD.prefixid AND end_time='infinity';\n\n-- View for listing all IP addresses that appear to be alive at the moment.\nCREATE OR REPLACE VIEW manage.live_clients AS\n  SELECT arp.ip, arp.mac\n    FROM arp\n   WHERE arp.end_time = 'infinity';\n\nCREATE TABLE cam (\n  camid SERIAL PRIMARY KEY,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL,\n  sysname VARCHAR NOT NULL,\n  ifindex INT4 NOT NULL,\n  module VARCHAR(4),\n  port VARCHAR,\n  mac MACADDR NOT NULL,\n  start_time TIMESTAMP NOT NULL,\n  end_time TIMESTAMP NOT NULL DEFAULT 'infinity',\n  misscnt INT4 DEFAULT '0'\n);\n\n\n-- Rules to automatically close open cam and arp entries related to a given netbox\nCREATE OR REPLACE RULE netbox_close_arp AS ON DELETE TO netbox\n  DO UPDATE arp SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\nCREATE OR REPLACE RULE netbox_close_cam AS ON DELETE TO netbox\n  DO UPDATE cam SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\n\n-- VIEWs -----------------------\n\nCREATE VIEW prefix_active_ip_cnt AS\n(SELECT prefix.prefixid, COUNT(arp.ip) AS active_ip_cnt\n FROM prefix\n LEFT JOIN arp ON arp.ip << prefix.netaddr\n WHERE arp.end_time = 'infinity'\n GROUP BY prefix.prefixid);\n\nCREATE VIEW prefix_max_ip_cnt AS\n(SELECT prefixid,\n  CASE POW(2,32-MASKLEN(netaddr))-2 WHEN -1 THEN 0\n   ELSE\n  POW(2,32-MASKLEN(netaddr))-2 END AS max_ip_cnt\n FROM prefix);\n\n-- This view gives the allowed vlan for a given hexstring i swportallowedvlan\nCREATE VIEW allowedvlan AS (\n  SELECT\n    interfaceid, vlan AS allowedvlan\n  FROM\n    (SELECT interfaceid, decode(hexstring, 'hex') AS octetstring\n     FROM swportallowedvlan) AS allowed_octets\n  CROSS JOIN\n    generate_series(0, 4095) AS vlan\n  WHERE\n    vlan < length(octetstring)*8 AND\n    (CASE\n       WHEN length(octetstring)>=128\n         THEN get_bit(octetstring, (vlan/8)*8+7-(vlan%8))\n       ELSE get_bit(octetstring,(length(octetstring)*8-vlan+7>>3<<3)-8+(vlan%8))\n     END) = 1\n);\n\nCREATE VIEW allowedvlan_both AS\n  (select interfaceid,interfaceid as interfaceid2,allowedvlan from allowedvlan ORDER BY allowedvlan) union\n  (select  interface.interfaceid,to_interfaceid as interfaceid2,allowedvlan from interface join allowedvlan\n    on (interface.to_interfaceid=allowedvlan.interfaceid) ORDER BY allowedvlan);\n\n------------------------------------------------------------------------------\n-- rrd metadb tables\n------------------------------------------------------------------------------\n\n-- This table contains the different systems that has rrd-data.\n-- Replaces table eventprocess\nCREATE TABLE subsystem (\n  name      VARCHAR PRIMARY KEY, -- name of the system, e.g. Cricket\n  descr     VARCHAR  -- description of the system\n);\n\nINSERT INTO subsystem (name) VALUES ('eventEngine');\nINSERT INTO subsystem (name) VALUES ('pping');\nINSERT INTO subsystem (name) VALUES ('serviceping');\nINSERT INTO subsystem (name) VALUES ('moduleMon');\nINSERT INTO subsystem (name) VALUES ('thresholdMon');\nINSERT INTO subsystem (name) VALUES ('trapParser');\nINSERT INTO subsystem (name) VALUES ('cricket');\nINSERT INTO subsystem (name) VALUES ('deviceManagement');\nINSERT INTO subsystem (name) VALUES ('getDeviceData');\nINSERT INTO subsystem (name) VALUES ('devBrowse');\nINSERT INTO subsystem (name) VALUES ('maintenance');\nINSERT INTO subsystem (name) VALUES ('snmptrapd');\nINSERT INTO subsystem (name) VALUES ('powersupplywatch');\nINSERT INTO subsystem (name) VALUES ('ipdevpoll');\nINSERT INTO subsystem (name) VALUES ('macwatch');\n\n\n\n------------------------------------------------------------------------------------------\n-- event system tables\n------------------------------------------------------------------------------------------\n\n-- event tables\nCREATE TABLE eventtype (\n  eventtypeid VARCHAR(32) PRIMARY KEY,\n  eventtypedesc VARCHAR,\n  stateful CHAR(1) NOT NULL CHECK (stateful='y' OR stateful='n')\n);\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('boxState','Tells us whether a network-unit is down or up.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('serviceState','Tells us whether a service on a server is up or down.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('moduleState','Tells us whether a module in a device is working or not.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('thresholdState','Tells us whether the load has passed a certain threshold.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('linkState','Tells us whether a link is up or down.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('boxRestart','Tells us that a network-unit has done a restart','n');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('info','Basic information','n');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('notification','Notification event, typically between NAV systems','n');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n    ('deviceActive','Lifetime event for a device','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n    ('deviceState','Registers the state of a device','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n    ('deviceNotice','Registers a notice on a device','n');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n    ('maintenanceState','Tells us if something is set on maintenance','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n    ('apState','Tells us whether an access point has disassociated or associated from the controller','y');\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('snmpAgentState', 'Tells us whether the SNMP agent on a device is down or up.', 'y');\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('chassisState', 'The state of this chassis has changed', 'y');\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('aggregateLinkState', 'The state of this aggregated link changed', 'y');\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('psuState', 'Reports state changes in power supply units', 'y');\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('fanState', 'Reports state changes in fan units', 'y');\n\n\n\nCREATE TABLE eventq (\n  eventqid SERIAL PRIMARY KEY,\n  source VARCHAR(32) NOT NULL REFERENCES subsystem (name) ON UPDATE CASCADE ON DELETE CASCADE,\n  target VARCHAR(32) NOT NULL REFERENCES subsystem (name) ON UPDATE CASCADE ON DELETE CASCADE,\n  deviceid INT4 REFERENCES device ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  subid VARCHAR NOT NULL DEFAULT '',\n  time TIMESTAMP NOT NULL DEFAULT NOW (),\n  eventtypeid VARCHAR(32) NOT NULL REFERENCES eventtype ON UPDATE CASCADE ON DELETE CASCADE,\n  state CHAR(1) NOT NULL DEFAULT 'x' CHECK (state='x' OR state='s' OR state='e'), -- x = stateless, s = start, e = end\n  value INT4 NOT NULL DEFAULT '100',\n  severity INT4 NOT NULL DEFAULT '50'\n);\n\nCREATE SEQUENCE eventqvar_id_seq;\nCREATE TABLE eventqvar (\n  id integer NOT NULL DEFAULT nextval('eventqvar_id_seq'),\n  eventqid INT4 REFERENCES eventq ON UPDATE CASCADE ON DELETE CASCADE,\n  var VARCHAR NOT NULL,\n  val TEXT NOT NULL,\n\n  CONSTRAINT eventqvar_pkey PRIMARY KEY(id),\n  CONSTRAINT eventqvar_eventqid_key UNIQUE(eventqid, var) -- only one val per var per event\n);\nALTER SEQUENCE eventqvar_id_seq OWNED BY eventqvar.id;\n\n\n\n-- alert tables\n\nCREATE TABLE alerttype (\n  alerttypeid SERIAL PRIMARY KEY,\n  eventtypeid VARCHAR(32) NOT NULL REFERENCES eventtype ON UPDATE CASCADE ON DELETE CASCADE,\n  alerttype VARCHAR,\n  alerttypedesc VARCHAR,\n  CONSTRAINT alerttype_eventalert_unique UNIQUE (eventtypeid, alerttype)\n);\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxDownWarning','Warning sent before declaring the box down.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxShadowWarning','Warning sent before declaring the box in shadow.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxDown','Box declared down.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxUp','Box declared up.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxShadow','Box declared down, but is in shadow.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxState','boxSunny','Box declared up from a previous shadow state.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('moduleState','moduleDownWarning','Warning sent before declaring the module down.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('moduleState','moduleDown','Module declared down.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('moduleState','moduleUp','Module declared up.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('serviceState','httpDown','http service not responding.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('serviceState','httpUp','http service responding.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('maintenanceState','onMaintenance','Box put on maintenance.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('maintenanceState','offMaintenance','Box taken off maintenance.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('thresholdState','exceededThreshold','Threshold exceeded.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('thresholdState','belowThreshold','Value below threshold.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('info','dnsMismatch','Mismatch between sysname and dnsname.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('info','serialChanged','Serial number for the device has changed.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxRestart','coldStart','The IP device has coldstarted');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('boxRestart','warmStart','The IP device has warmstarted');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceInIPOperation','The device is now in operation with an active IP address');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceInStack','The device is now in operation as a chassis module');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceRMA','RMA event for device.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceNotice','deviceError','Error situation on device.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceNotice','deviceSwUpgrade','Software upgrade on device.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceNotice','deviceHwUpgrade','Hardware upgrade on device.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('apState','apUp','AP associated with controller');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('apState','apDown','AP disassociated from controller');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('snmpAgentState', 'snmpAgentDown', 'SNMP agent is down or unreachable due to misconfiguration.');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('snmpAgentState', 'snmpAgentUp', 'SNMP agent is up.');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('chassisState', 'chassisDown', 'This chassis is no longer visible in the stack');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('chassisState', 'chassisUp', 'This chassis is visible in the stack again');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('aggregateLinkState', 'linkDegraded', 'This aggregate link has been degraded');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('aggregateLinkState', 'linkRestored', 'This aggregate link has been restored');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('info','macWarning','Mac appeared on port');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('psuState', 'psuNotOK', 'A PSU has entered a non-OK state');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('psuState', 'psuOK', 'A PSU has returned to an OK state');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('fanState', 'fanNotOK', 'A fan unit has entered a non-OK state');\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('fanState', 'fanOK', 'A fan unit has returned to an OK state');\n\n\n\nCREATE TABLE alerthist (\n  alerthistid SERIAL PRIMARY KEY,\n  source VARCHAR(32) NOT NULL REFERENCES subsystem (name) ON UPDATE CASCADE ON DELETE CASCADE,\n  deviceid INT4 REFERENCES device ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL,\n  subid VARCHAR NOT NULL DEFAULT '',\n  start_time TIMESTAMP NOT NULL,\n  end_time TIMESTAMP DEFAULT 'infinity',\n  eventtypeid VARCHAR(32) NOT NULL REFERENCES eventtype ON UPDATE CASCADE ON DELETE CASCADE,\n  alerttypeid INT4 REFERENCES alerttype ON UPDATE CASCADE ON DELETE CASCADE,\n  value INT4 NOT NULL,\n  severity INT4 NOT NULL\n);\n\n-- Rule to automatically close module related alert states when modules are\n-- deleted.\nCREATE OR REPLACE RULE close_alerthist_modules AS ON DELETE TO module\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE eventtypeid IN ('moduleState', 'linkState')\n       AND end_time='infinity'\n       AND deviceid=OLD.deviceid;\n\nCREATE TABLE alerthistmsg (\n  id SERIAL,\n  alerthistid INT4 REFERENCES alerthist ON UPDATE CASCADE ON DELETE CASCADE,\n  state CHAR(1) NOT NULL,\n  msgtype VARCHAR NOT NULL,\n  language VARCHAR NOT NULL,\n  msg TEXT NOT NULL,\n  PRIMARY KEY(id),\n  UNIQUE(alerthistid, state, msgtype, language)\n);\n\nCREATE TABLE alerthistvar (\n  id SERIAL,\n  alerthistid INT4 REFERENCES alerthist ON UPDATE CASCADE ON DELETE CASCADE,\n  state CHAR(1) NOT NULL,\n  var VARCHAR NOT NULL,\n  val TEXT NOT NULL,\n  PRIMARY KEY(id),\n  UNIQUE(alerthistid, state, var) -- only one val per var per state per alert\n);\n\n\nCREATE TABLE alertq (\n  alertqid SERIAL PRIMARY KEY,\n  source VARCHAR(32) NOT NULL REFERENCES subsystem (name) ON UPDATE CASCADE ON DELETE CASCADE,\n  deviceid INT4 REFERENCES device ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  subid VARCHAR NOT NULL DEFAULT '',\n  time TIMESTAMP NOT NULL,\n  eventtypeid VARCHAR(32) REFERENCES eventtype ON UPDATE CASCADE ON DELETE CASCADE,\n  alerttypeid INT4 REFERENCES alerttype ON UPDATE CASCADE ON DELETE CASCADE,\n  state CHAR(1) NOT NULL,\n  value INT4 NOT NULL,\n  severity INT4 NOT NULL,\n  alerthistid INTEGER NULL,\n  CONSTRAINT alertq_alerthistid_fkey FOREIGN KEY (alerthistid) REFERENCES alerthist (alerthistid)\n             ON UPDATE CASCADE ON DELETE SET NULL\n);\n\nCREATE TABLE alertqmsg (\n  id SERIAL,\n  alertqid INT4 REFERENCES alertq ON UPDATE CASCADE ON DELETE CASCADE,\n  msgtype VARCHAR NOT NULL,\n  language VARCHAR NOT NULL,\n  msg TEXT NOT NULL,\n  PRIMARY KEY(id),\n  UNIQUE(alertqid, msgtype, language)\n);\n\nCREATE TABLE alertqvar (\n  id SERIAL,\n  alertqid INT4 REFERENCES alertq ON UPDATE CASCADE ON DELETE CASCADE,\n  var VARCHAR NOT NULL,\n  val TEXT NOT NULL,\n  PRIMARY KEY(id),\n  UNIQUE(alertqid, var) -- only one val per var per event\n);\n\n\n------------------------------------------------------------------------------\n-- servicemon tables\n------------------------------------------------------------------------------\n\nCREATE TABLE service (\n  serviceid SERIAL PRIMARY KEY,\n  netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  active BOOL DEFAULT true,\n  handler VARCHAR,\n  version VARCHAR,\n  up CHAR(1) NOT NULL DEFAULT 'y' CHECK (up='y' OR up='n' OR up='s') -- y=up, n=down, s=shadow\n);\n\nCREATE TABLE serviceproperty (\n  id SERIAL,\n  serviceid INT4 NOT NULL REFERENCES service ON UPDATE CASCADE ON DELETE CASCADE,\n  property VARCHAR(64) NOT NULL,\n  value VARCHAR,\n  PRIMARY KEY(serviceid, property)\n);\n\n------------------------------------------------------------------------------\n-- messages/maintenance v2 tables\n------------------------------------------------------------------------------\n\nCREATE TABLE message (\n    messageid SERIAL PRIMARY KEY,\n    title VARCHAR NOT NULL,\n    description TEXT NOT NULL,\n    tech_description TEXT,\n    publish_start TIMESTAMP,\n    publish_end TIMESTAMP,\n    author VARCHAR NOT NULL,\n    last_changed TIMESTAMP,\n    replaces_message INT REFERENCES message,\n    replaced_by INT REFERENCES message\n);\n\nCREATE OR REPLACE FUNCTION message_replace() RETURNS TRIGGER AS '\n    DECLARE\n        -- Old replaced_by value of the message beeing replaced\n        old_replaced_by INTEGER;\n    BEGIN\n        -- Remove references that are no longer correct\n        IF TG_OP = ''UPDATE'' THEN\n            IF OLD.replaces_message <> NEW.replaces_message OR\n                (OLD.replaces_message IS NOT NULL AND NEW.replaces_message IS NULL) THEN\n                EXECUTE ''UPDATE message SET replaced_by = NULL WHERE messageid = ''\n                || quote_literal(OLD.replaces_message);\n            END IF;\n        END IF;\n\n        -- It does not replace any message, exit\n        IF NEW.replaces_message IS NULL THEN\n            RETURN NEW;\n        END IF;\n\n        -- Update the replaced_by field of the replaced message with a\n        -- reference to the replacer\n        SELECT INTO old_replaced_by replaced_by FROM message\n            WHERE messageid = NEW.replaces_message;\n        IF old_replaced_by <> NEW.messageid OR old_replaced_by IS NULL THEN\n            EXECUTE ''UPDATE message SET replaced_by = ''\n            || quote_literal(NEW.messageid)\n            || '' WHERE messageid = ''\n            || quote_literal(NEW.replaces_message);\n        END IF;\n\n        RETURN NEW;\n        END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_message_replace\n\tAFTER INSERT OR UPDATE ON message\n\tFOR EACH ROW\n\tEXECUTE PROCEDURE message_replace();\n\nCREATE OR REPLACE VIEW message_with_replaced AS\n    SELECT\n        m.messageid, m.title,\n\tm.description, m.tech_description,\n        m.publish_start, m.publish_end, m.author, m.last_changed,\n        m.replaces_message, m.replaced_by,\n        rm.title AS replaces_message_title,\n        rm.description AS replaces_message_description,\n        rm.tech_description AS replaces_message_tech_description,\n        rm.publish_start AS replaces_message_publish_start,\n        rm.publish_end AS replaces_message_publish_end,\n        rm.author AS replaces_message_author,\n        rm.last_changed AS replaces_message_last_changed,\n        rb.title AS replaced_by_title,\n        rb.description AS replaced_by_description,\n        rb.tech_description AS replaced_by_tech_description,\n        rb.publish_start AS replaced_by_publish_start,\n        rb.publish_end AS replaced_by_publish_end,\n        rb.author AS replaced_by_author,\n        rb.last_changed AS replaced_by_last_changed\n    FROM\n    \tmessage m LEFT JOIN message rm ON (m.replaces_message = rm.messageid)\n    \tLEFT JOIN message rb ON (m.replaced_by = rb.messageid);\n\nCREATE TABLE maint_task (\n    maint_taskid SERIAL PRIMARY KEY,\n    maint_start TIMESTAMP NOT NULL,\n    maint_end TIMESTAMP NOT NULL,\n    description TEXT NOT NULL,\n    author VARCHAR NOT NULL,\n    state VARCHAR NOT NULL\n);\n\nCREATE TABLE maint_component (\n    id SERIAL,\n    maint_taskid INT NOT NULL REFERENCES maint_task ON UPDATE CASCADE ON DELETE CASCADE,\n    key VARCHAR NOT NULL,\n    value VARCHAR NOT NULL,\n    PRIMARY KEY (maint_taskid, key, value)\n);\n\nCREATE TABLE message_to_maint_task (\n    id SERIAL,\n    messageid INT NOT NULL REFERENCES message ON UPDATE CASCADE ON DELETE CASCADE,\n    maint_taskid INT NOT NULL REFERENCES maint_task ON UPDATE CASCADE ON DELETE CASCADE,\n    PRIMARY KEY (messageid, maint_taskid)\n);\n\nCREATE OR REPLACE VIEW maint AS\n    SELECT * FROM maint_task NATURAL JOIN maint_component;\n\n------------------------------------------------------------------------------\n-- log of schema changes\n------------------------------------------------------------------------------\nCREATE TABLE schema_change_log (\n    id SERIAL PRIMARY KEY,\n    major INTEGER NOT NULL,\n    minor INTEGER NOT NULL,\n    point INTEGER NOT NULL,\n    script_name VARCHAR NOT NULL,\n    date_applied TIMESTAMP NOT NULL DEFAULT NOW()\n);\n\n\nCREATE OR REPLACE RULE netbox_status_close_arp AS ON UPDATE TO netbox\n   WHERE NEW.up='n'\n   DO UPDATE arp SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\n\nCREATE TABLE manage.sensor (\n  sensorid SERIAL PRIMARY KEY,\n  netboxid INT REFERENCES netbox(netboxid) ON DELETE CASCADE ON UPDATE CASCADE,\n  oid VARCHAR,\n  unit_of_measurement VARCHAR,\n  precision integer default 0,\n  data_scale VARCHAR,\n  human_readable VARCHAR,\n  name VARCHAR,\n  internal_name VARCHAR,\n  mib VARCHAR\n);\n\nCREATE TABLE manage.powersupply_or_fan (\n    powersupplyid SERIAL PRIMARY KEY,\n    netboxid INT REFERENCES netbox(netboxid) ON DELETE CASCADE ON UPDATE CASCADE,\n    deviceid INT REFERENCES device(deviceid) ON DELETE CASCADE ON UPDATE CASCADE,\n    name VARCHAR NOT NULL,\n    model VARCHAR,\n    descr VARCHAR,\n    physical_class VARCHAR not null,\n    downsince TIMESTAMP default null,\n    sensor_oid VARCHAR,\n    up CHAR(1) NOT NULL DEFAULT 'u' CHECK (up='y' OR up='n' or up='u' or up='w')\n);\n\n\n-- Ensure any associated service alerts are closed when a service is deleted\nCREATE RULE close_alerthist_services\n  AS ON DELETE TO service DO\n  UPDATE alerthist SET end_time=NOW()\n  WHERE\n    eventtypeid='serviceState'\n    AND end_time='infinity'\n    AND subid = old.serviceid::text;\n\n-- Rule to automatically resolve netbox related alert states when netboxes are\n-- deleted.\nCREATE OR REPLACE RULE close_alerthist_netboxes AS ON DELETE TO netbox\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid\n       AND end_time='infinity';\n\n-- swp_netbox replacement table\nCREATE TABLE manage.adjacency_candidate (\n  adjacency_candidateid SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  to_netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  to_interfaceid INT4 REFERENCES interface ON UPDATE CASCADE ON DELETE SET NULL,\n  source VARCHAR NOT NULL,\n  misscnt INT4 NOT NULL DEFAULT 0,\n  CONSTRAINT adjacency_candidate_uniq UNIQUE(netboxid, interfaceid, to_netboxid, source)\n);\n\nDELETE FROM netboxinfo WHERE key='unrecognizedCDP';\n\n-- new unrecognized neighbors table\nCREATE TABLE manage.unrecognized_neighbor (\n  id SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  remote_id VARCHAR NOT NULL,\n  remote_name VARCHAR NOT NULL,\n  source VARCHAR NOT NULL,\n  since TIMESTAMP NOT NULL DEFAULT NOW(),\n  ignored_since TIMESTAMP DEFAULT NULL\n);\n\nCOMMENT ON TABLE unrecognized_neighbor IS 'Unrecognized neighboring devices reported by support discovery protocols';\n\n\n\n\n-- Create a log table for ipdevpoll job runs\nCREATE TABLE manage.ipdevpoll_job_log (\n  id BIGSERIAL NOT NULL PRIMARY KEY,\n  netboxid INTEGER NOT NULL,\n  job_name VARCHAR NOT NULL,\n  end_time TIMESTAMP NOT NULL,\n  duration DOUBLE PRECISION,\n  success BOOLEAN,\n  \"interval\" INTEGER,\n\n  CONSTRAINT ipdevpoll_job_log_netbox_fkey FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE\n);\n\n\n-- automatically close snmpAgentStates when community is removed.\n\nCREATE OR REPLACE FUNCTION close_snmpagentstates_on_community_clear()\nRETURNS TRIGGER AS E'\n    BEGIN\n        IF COALESCE(OLD.ro, \\'\\') IS DISTINCT FROM COALESCE(NEW.ro, \\'\\')\n           AND COALESCE(NEW.ro, \\'\\') = \\'\\' THEN\n            UPDATE alerthist\n            SET end_time=NOW()\n            WHERE netboxid=NEW.netboxid\n              AND eventtypeid=\\'snmpAgentState\\'\n              AND end_time >= \\'infinity\\';\n        END IF;\n        RETURN NULL;\n    END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_close_snmpagentstates_on_community_clear\n    AFTER UPDATE ON netbox\n    FOR EACH ROW\n    EXECUTE PROCEDURE close_snmpagentstates_on_community_clear();\n\n\n-- Notify the eventEngine immediately as new events are inserted in the queue\nCREATE OR REPLACE RULE eventq_notify AS ON INSERT TO eventq DO ALSO NOTIFY new_event;\n\n\n-- Create table for netbios names\n\nCREATE TABLE netbios (\n  netbiosid SERIAL PRIMARY KEY,\n  ip INET NOT NULL,\n  mac MACADDR,\n  name VARCHAR NOT NULL,\n  server VARCHAR NOT NULL,\n  username VARCHAR NOT NULL,\n  start_time TIMESTAMP NOT NULL,\n  end_time TIMESTAMP NOT NULL DEFAULT 'infinity'\n);\n\n-- fix view that gives wrong ip count in VRRP/HSRP environments\nCREATE OR REPLACE VIEW manage.prefix_active_ip_cnt AS\n(SELECT prefix.prefixid, COUNT(DISTINCT arp.ip) AS active_ip_cnt\n FROM prefix\n LEFT JOIN arp ON arp.ip << prefix.netaddr\n WHERE arp.end_time = 'infinity'\n GROUP BY prefix.prefixid);\n\n-- Create a table for interface stacking information\nCREATE TABLE manage.interface_stack (\n  id SERIAL PRIMARY KEY, -- dummy primary key for Django\n  higher INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  lower INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  UNIQUE (higher, lower)\n);\n\n\nCREATE OR REPLACE VIEW manage.netboxmac AS\n\nSELECT DISTINCT ON (mac) netboxid, mac FROM (\n(\n\n -- Attempt to get MAC for netbox' monitored IP\n SELECT DISTINCT netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.ip = netbox.ip AND arp.end_time = 'infinity')\n\n) UNION (\n\n -- Attempt to get MAC for router's interface addresses and virtual addresses\n SELECT interface.netboxid, arp.mac\n FROM arp\n JOIN gwportprefix gwp ON arp.ip = gwp.gwip\n LEFT JOIN (SELECT prefixid, COUNT(*) > 0 AS has_virtual\n            FROM gwportprefix\n            WHERE virtual=true\n            GROUP BY prefixid) AS prefix_virtual_ports ON (gwp.prefixid = prefix_virtual_ports.prefixid)\n JOIN interface USING (interfaceid)\n WHERE arp.end_time = 'infinity'\n   AND (gwp.virtual = true OR has_virtual IS NULL)\n\n) UNION (\n\n -- Get MAC directly from interface physical addresses\n SELECT DISTINCT ON (interface.ifphysaddress) interface.netboxid, interface.ifphysaddress AS mac\n   FROM interface\n   -- physical ethernet interfaces are assumed to be iftype=6\n  WHERE interface.iftype = 6 AND interface.ifphysaddress IS NOT NULL\n\n)\n\n) AS foo\nWHERE mac <> '00:00:00:00:00:00' -- exclude invalid MACs\nORDER BY mac, netboxid;\n\nCREATE OR REPLACE FUNCTION never_use_null_subid()\nRETURNS trigger AS $$\n  BEGIN\n    NEW.subid = COALESCE(NEW.subid, '');\n    RETURN NEW;\n  END;\n$$ language plpgsql;\n\nCREATE TRIGGER eventq_subid_fix BEFORE INSERT OR UPDATE ON eventq\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n\nCREATE TRIGGER alertq_subid_fix BEFORE INSERT OR UPDATE ON alertq\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n\nCREATE TRIGGER alerthist_subid_fix BEFORE INSERT OR UPDATE ON alerthist\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n\nCREATE TABLE netboxentity (\n  netboxentityid SERIAL NOT NULL,\n  netboxid INTEGER NOT NULL,\n\n  index INTEGER NOT NULL,\n  source VARCHAR NOT NULL,\n  descr VARCHAR,\n  vendor_type VARCHAR,\n  contained_in_id INTEGER,\n  physical_class INTEGER,\n  parent_relpos INTEGER,\n  name VARCHAR,\n  hardware_revision VARCHAR,\n  firmware_revision VARCHAR,\n  software_revision VARCHAR,\n  deviceid INTEGER,\n  mfg_name VARCHAR,\n  model_name VARCHAR,\n  alias VARCHAR,\n  asset_id VARCHAR,\n  fru BOOLEAN,\n  mfg_date TIMESTAMP WITH TIME ZONE,\n  uris VARCHAR,\n  data hstore NOT NULL DEFAULT hstore(''),\n  gone_since TIMESTAMP,\n\n  CONSTRAINT netboxentity_pkey PRIMARY KEY (netboxentityid),\n  CONSTRAINT netboxentity_netboxid_fkey\n             FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_contained_in_id_fkey\n             FOREIGN KEY (contained_in_id)\n             REFERENCES netboxentity (netboxentityid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_deviceid_fkey\n             FOREIGN KEY (deviceid)\n             REFERENCES device (deviceid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_netboxid_source_index_unique\n             UNIQUE (netboxid, source, index) INITIALLY DEFERRED\n\n);\n\n-- Modernize existing close_alerthist_modules rule\n\nCREATE OR REPLACE RULE close_alerthist_modules AS ON DELETE TO module\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE eventtypeid = 'moduleState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.moduleid::text;\n\n-- Make similar rule for chassis devices\n\nCREATE OR REPLACE RULE close_alerthist_chassis AS ON DELETE TO netboxentity\n  WHERE OLD.physical_class = 3  -- chassis class magic number\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE eventtypeid = 'chassisState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.netboxentityid::text;\n\n-- Make similar rule for interface devices\n\nCREATE OR REPLACE RULE close_alerthist_interface AS ON DELETE TO interface\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE eventtypeid = 'linkState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.interfaceid::text;\n\nCREATE VIEW enterprise_number AS\n\nWITH enterprise AS (\n  SELECT vendorid,\n         (string_to_array(sysobjectid, '.'))[7]::INTEGER AS enterprise\n  FROM manage.type)\nSELECT vendorid, enterprise, count(*)\nFROM enterprise\nGROUP BY vendorid, enterprise\nORDER BY enterprise, count DESC, vendorid;\n\nCOMMENT ON VIEW enterprise_number IS\n'Shows the most common enterprise numbers associated with each vendorid, based on the type table';\n\n-- Create a table for interface aggregation information\nCREATE TABLE manage.interface_aggregate (\n  id SERIAL PRIMARY KEY, -- dummy primary key for Django\n  aggregator INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  interface INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  UNIQUE (aggregator, interface)\n);\n\n\n-- Create table for storing prefix tags\nCREATE TABLE prefix_usage (\n    prefix_usage_id SERIAL PRIMARY KEY,\n    prefixid        INTEGER REFERENCES prefix (prefixid)\n                    ON UPDATE CASCADE ON DELETE CASCADE,\n    usageid         VARCHAR REFERENCES usage (usageid)\n                    ON UPDATE CASCADE ON DELETE CASCADE,\n    UNIQUE (prefixid, usageid)\n);\n\nINSERT INTO schema_change_log (major, minor, point, script_name)\n    VALUES (4, 6, 56, 'initial install');\n"
  },
  {
    "path": "python/nav/models/sql/baseline/manage2.sql",
    "content": "/*\n\n  manage2.sql\n\n  This file is used for defining objects in the `manage` namespace that depend\n  on objects in the `profiles` namespace. This is necessary because\n  `manage.sql` is run before `profiles.sql`, and objects in `profiles.sql`\n  depend on objects in `manage.sql`, and dependency cycles are bad.\n\n*/\n\n------------------------------------------------------------------------------\n-- mac watch table for storing watched mac addresses\n------------------------------------------------------------------------------\nCREATE TABLE manage.macwatch (\n  id SERIAL PRIMARY KEY,\n  mac MACADDR NOT NULL,\n  userid INT REFERENCES profiles.account(id) ON DELETE SET NULL ON UPDATE CASCADE,\n  description VARCHAR,\n  created TIMESTAMP DEFAULT NOW(),\n  prefix_length INT DEFAULT NULL,\n\n  CONSTRAINT macwatch_unique_mac UNIQUE (mac)\n);\n\n\n-- Registry of macwatch matches\n-- (since watch rules may have wildcards and/or mac prefixes)\nCREATE TABLE macwatch_match (\n  id SERIAL PRIMARY KEY,\n  macwatch INT NOT NULL REFERENCES macwatch(id) ON DELETE CASCADE ON UPDATE CASCADE,\n  cam INT NOT NULL REFERENCES cam(camid) ON DELETE CASCADE ON UPDATE CASCADE,\n  posted TIMESTAMP DEFAULT NOW()\n);\n\n\n------------------------------------------------------------------------------\n-- Create table for room images\n------------------------------------------------------------------------------\nCREATE TABLE image (\n  imageid SERIAL PRIMARY KEY,\n  roomid VARCHAR REFERENCES room(roomid) NOT NULL,\n  title VARCHAR NOT NULL,\n  path VARCHAR NOT NULL,\n  name VARCHAR NOT NULL,\n  created TIMESTAMP NOT NULL,\n  uploader INT REFERENCES profiles.account(id),\n  priority INT\n);\n\n------------------------------------------------------------------------------\n-- Create basic token storage for api tokens\n------------------------------------------------------------------------------\nCREATE TABLE apitoken (\n  id SERIAL PRIMARY KEY,\n  token VARCHAR not null,\n  expires TIMESTAMP not null,\n  client INT REFERENCES profiles.account(id),\n  scope INT DEFAULT 0,\n  created TIMESTAMP DEFAULT now(),\n  last_used TIMESTAMP,\n  comment TEXT,\n  revoked BOOLEAN default FALSE,\n  endpoints hstore\n);\n\n\n------------------------------------------------------------------------------\n-- Threshold rules and related functions\n------------------------------------------------------------------------------\nCREATE TABLE manage.thresholdrule (\n  id SERIAL PRIMARY KEY,\n  target VARCHAR NOT NULL,\n  alert VARCHAR NOT NULL,\n  clear VARCHAR,\n  raw BOOLEAN NOT NULL DEFAULT FALSE,\n  description VARCHAR,\n  creator_id INTEGER DEFAULT NULL,\n  created TIMESTAMP DEFAULT NOW(),\n  period INTEGER DEFAULT NULL,\n\n  CONSTRAINT thresholdrule_creator_fkey FOREIGN KEY (creator_id)\n             REFERENCES profiles.account (id)\n             ON UPDATE CASCADE ON DELETE SET NULL\n\n);\n\n-- automatically close thresholdState when threshold rules are removed\nCREATE OR REPLACE FUNCTION close_thresholdstate_on_thresholdrule_delete()\nRETURNS TRIGGER AS $$\n  BEGIN\n    IF TG_OP = 'DELETE'\n      OR (TG_OP = 'UPDATE' AND\n          (OLD.alert <> NEW.alert OR OLD.target <> NEW.target))\n    THEN\n      UPDATE alerthist\n      SET end_time = NOW()\n      WHERE subid LIKE (CAST(OLD.id AS text) || ':%')\n            AND eventtypeid = 'thresholdState'\n            AND end_time >= 'infinity';\n    END IF;\n    RETURN NULL;\n  END;\n$$ language 'plpgsql';\n\nCREATE TRIGGER trig_close_thresholdstate_on_thresholdrule_delete\n    AFTER UPDATE OR DELETE ON manage.thresholdrule\n    FOR EACH ROW\n    EXECUTE PROCEDURE close_thresholdstate_on_thresholdrule_delete();\n\n\n------------------------------------------------------------------------------\n-- Alerthist acknowledgements\n------------------------------------------------------------------------------\nCREATE TABLE manage.alerthist_ack (\n  alert_id INTEGER PRIMARY KEY NOT NULL,\n  account_id INTEGER NOT NULL,\n  comment VARCHAR DEFAULT NULL,\n  date TIMESTAMPTZ DEFAULT NOW(),\n\n  CONSTRAINT alerthistory_ack_alert FOREIGN KEY (alert_id)\n             REFERENCES manage.alerthist (alerthistid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n\n  CONSTRAINT alerthistory_ack_user FOREIGN KEY (account_id)\n             REFERENCES profiles.account (id)\n             ON UPDATE CASCADE ON DELETE CASCADE\n\n);\n"
  },
  {
    "path": "python/nav/models/sql/baseline/navprofiles.sql",
    "content": "/*\n=============================================\n        NAVprofiles\n    SQL Initialization script\n\n    Run the command:\n    psql navprofiles -f navprofiles.sql\n\n\n\t!! WARNING !!\n\tThis SQL script is encoded as unicode (UTF-8),\n\tbefore you do changes and commit, be 100% sure\n\tthat your editor do not mess it up.\n\n    Check 1 : These norwegian letters looks nice:\n    ! æøåÆØÅ !\n    Check 2 : This is the Euro currency sign:\n    ! € !\n=============================================\n*/\n\n\n/*\n------------------------------------------------------\n TABLE DEFINITIONS\n------------------------------------------------------\n*/\n\n-- FIXME\nCREATE SEQUENCE alertsender_id_seq START 1000;\nCREATE TABLE alertsender (\n\tid integer NOT NULL DEFAULT nextval('alertsender_id_seq'),\n\tname varchar(100) NOT NULL,\n\thandler varchar(100) NOT NULL,\n\n\tCONSTRAINT alertsender_unique_name UNIQUE(name),\n\tCONSTRAINT alertsender_unique_handler UNIQUE(handler),\n\tCONSTRAINT alertsender_pkey  PRIMARY KEY(id)\n);\nALTER SEQUENCE alertsender_id_seq OWNED BY alertsender.id;\n\n/*\n-- 1 ACCOUNT\n\nTable for users\n\nlogin\t\tusally 3-8 characters\nname\t\tReal name of user\npassword\tpassword for local authentication\next_sync\texternal syncronization, reserved for future use,\n            null means local authentication\n*/\nCREATE SEQUENCE account_id_seq START 1000;\nCREATE TABLE Account (\n    id integer NOT NULL DEFAULT nextval('account_id_seq'),\n    login varchar NOT NULL,\n    name varchar DEFAULT 'Noname',\n    password varchar,\n    ext_sync varchar,\n    preferences manage.hstore DEFAULT manage.hstore(''),\n\n    CONSTRAINT account_pkey PRIMARY KEY(id),\n    CONSTRAINT account_login_key UNIQUE(login)\n);\nALTER SEQUENCE account_id_seq OWNED BY account.id;\n\n-- Trigger that ensures that users are a part of the groups everyone and authenticated users\nCREATE OR REPLACE FUNCTION group_membership() RETURNS trigger AS $group_membership$\n        BEGIN\n                IF NEW.id >= 1000 THEN\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (2, NEW.id);\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (3, NEW.id);\n                END IF; RETURN NULL;\n        END;\n$group_membership$ LANGUAGE plpgsql;\n\nCREATE TRIGGER group_membership AFTER INSERT ON account\n        FOR EACH ROW EXECUTE PROCEDURE group_membership();\n\n\n/*\n-- 2 ACCOUNTGROUP\n\nTable for usergroup\n\nname\t\tName of usergroup\ndescr\t\tLonger description\n*/\nCREATE SEQUENCE accountgroup_id_seq START 1000;\nCREATE TABLE AccountGroup (\n    id integer NOT NULL DEFAULT nextval('accountgroup_id_seq'),\n    name varchar DEFAULT 'Noname',\n    descr varchar,\n\n    CONSTRAINT accountgroup_pkey PRIMARY KEY(id)\n);\nALTER SEQUENCE accountgroup_id_seq OWNED BY accountgroup.id;\n\n\n-- 3 ACCOUNTGROUP_ACCOUNTS\nCREATE SEQUENCE accountgroup_accounts_id_seq;\nCREATE TABLE accountgroup_accounts (\n    id integer NOT NULL DEFAULT nextval('accountgroup_accounts_id_seq'),\n    account_id integer NOT NULL,\n    accountgroup_id integer NOT NULL,\n\n    CONSTRAINT accountgroup_accounts_pkey PRIMARY KEY(id),\n    CONSTRAINT accountgroup_accounts_account_id_key UNIQUE(account_id, accountgroup_id),\n    CONSTRAINT accountgroup_accounts_account_id_fkey\n        FOREIGN KEY(account_id) REFERENCES account(id)\n        ON UPDATE CASCADE\n        ON DELETE CASCADE,\n    CONSTRAINT accountgroup_accounts_accountgroup_id_fkey\n        FOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n        ON UPDATE CASCADE\n        ON DELETE CASCADE\n);\nALTER SEQUENCE accountgroup_accounts_id_seq OWNED BY accountgroup_accounts.id;\n\n-- ACCOUNTINGROUP\n-- View for compability with older code that thinks accountgroup_accounts is\n-- still called accountingroup.\nCREATE VIEW accountingroup AS (\n    SELECT\n        accountgroup_accounts.account_id AS accountid,\n        accountgroup_accounts.accountgroup_id AS groupid\n    FROM\n        accountgroup_accounts\n);\n\n\n/*\n-- 4 ACCOUNTPROPERTY\n\nA general table related to a single user. An user can have many account properties.\nThis is a general way that allows applications to add key-value pairs to a user.\n\nIn example NAVprofile web frontend use key 'language' to save language preferences for an user.\n*/\nCREATE SEQUENCE accountproperty_id_seq;\nCREATE TABLE AccountProperty (\n    id integer NOT NULL DEFAULT nextval('accountproperty_id_seq'),\n    accountid integer,\n    property varchar,\n    value varchar,\n\n    CONSTRAINT accountproperty_pkey PRIMARY KEY(id),\n    CONSTRAINT accountproperty_accountid_fkey\n        FOREIGN KEY(accountid) REFERENCES Account(id)\n        ON DELETE CASCADE\n        ON UPDATE CASCADE\n);\nALTER SEQUENCE accountproperty_id_seq OWNED BY accountproperty.id;\n\n/*\n-- 5 ALERTADDRESS\n\nAddresses related to a user. A user can have arbitrary many addresses.\n\ntype\t\tSpecifies what kind of address this is.\n                Predefined values:\n                    1 e-mail user@domain.com\n                    2 sms 99887766\n                    3 irc nick!userid@irc.server.com\n                    4 icq 123456789\naddress\t\tThe address\n*/\nCREATE SEQUENCE alertaddress_id_seq START 1000;\nCREATE TABLE alertaddress (\n       id integer NOT NULL DEFAULT nextval('alertaddress_id_seq'),\n       accountid integer NOT NULL,\n       type integer NOT NULL,\n       address varchar,\n\n       CONSTRAINT alertaddress_pkey PRIMARY KEY(id),\n       CONSTRAINT alertaddress_accountid_fkey\n\t\t  FOREIGN KEY(accountid) REFERENCES Account(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE,\n       CONSTRAINT alertaddress_type_fkey\n                  FOREIGN KEY(type) REFERENCES alertsender(id)\n                  ON DELETE CASCADE\n                  ON UPDATE CASCADE\n\n);\nALTER SEQUENCE alertaddress_id_seq OWNED BY alertaddress.id;\n\n\n/*\n-- 6 ALERTPROFILE\n\nA table for alertprofile. Only one profile can be active simultanously. It is possible that zero profiles are active. One user may have arbitrary many profiles. A profile is a composistion of a set of timeperiods which define a timetable.\n\nname\t\tThe name of the profile\ndaily_dispatch_time\t\tRelated to queueing. When daily queueing is selected, this attrubute specify when on a day\n            enqueued alerts will be sent.\nweekly_dispatch_day\t\tRelated to queueing. When weekly queueing is selected, this attribute specify which\n            weekday enqueued alerts will be sent on. 0 is monday, 6 is sunday.\nweekly_dispatch_time\t\tRelated to queueing. When weekly queueing is selected, this attribute specify which time\n            on the day enqueued alerts will be sent.\n\n*/\nCREATE SEQUENCE alertprofile_id_seq START 1000;\nCREATE TABLE alertprofile (\n       id integer NOT NULL DEFAULT nextval('alertprofile_id_seq'),\n       accountid integer NOT NULL,\n       name varchar,\n       daily_dispatch_time time NOT NULL DEFAULT '08:00:00',\n       weekly_dispatch_day integer NOT NULL DEFAULT 0,\n       weekly_dispatch_time time NOT NULL DEFAULT '08:30:00',\n\n       CONSTRAINT alertprofile_pkey PRIMARY KEY(id),\n       CONSTRAINT alertprofile_accountid_fkey\n\t\t  FOREIGN KEY(accountid) REFERENCES Account(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE alertprofile_id_seq OWNED BY alertprofile.id;\n\n\n/*\n-- 7 ALERTPREFERENCE\n\nadmin\t\tan integer specifying wether the user is administrator or not.\n            Defined values are (0 disabled, 1 normal user, 100 administrator)\n\nactiveprofile\tDefines the active profile at the moment. null means no profiles is active.\n*/\nCREATE TABLE alertpreference (\n    accountid integer NOT NULL,\n    activeprofile integer,\n    lastsentday timestamp,\n    lastsentweek timestamp,\n\n    CONSTRAINT alertpreference_pkey PRIMARY KEY(accountid),\n\n    CONSTRAINT alertpreference_accountid_fkey\n        FOREIGN KEY(accountid) REFERENCES Account(id)\n        ON DELETE CASCADE\n        ON UPDATE CASCADE,\n\n    CONSTRAINT alertpreference_activeprofile_fkey\n        FOREIGN KEY(activeprofile) REFERENCES alertprofile(id)\n        ON DELETE SET NULL\n        ON UPDATE CASCADE\n);\n\n/*\n-- 8 TIMEPERIOD\n\nA table specifying a time period. This could be though of as an element in a timetable. A time period is related to a set of relation between equipmentgroups and alertaddresses.\n\nstart_time\tthis attribute speficies the start time of this time period. The time period end time is\n            implicit given by the start time by the next time period.\n\nvalid_during\t\tSpeficies wether this time period is for weekdays or weekend or both.\n\t\t\t\t1 all week\n\t\t\t\t2 weekdays Monday-Friday\n\t\t\t\t3 weekend Saturday-Sunday\n*/\nCREATE SEQUENCE timeperiod_id_seq START 1000;\nCREATE TABLE timeperiod (\n       id integer NOT NULL DEFAULT nextval('timeperiod_id_seq'),\n       alert_profile_id integer NOT NULL,\n       start_time time NOT NULL,\n       valid_during integer NOT NULL,\n\n       CONSTRAINT timeperiod_pkey PRIMARY KEY(id),\n       CONSTRAINT timeperiod_alert_profile_id_fkey\n\t\t  FOREIGN KEY(alert_profile_id) REFERENCES alertprofile(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE timeperiod_id_seq OWNED BY timeperiod.id;\n\n/*\n-- 9 FILTERGROUP\n\nEquipment group. An equipment is a composite of equipment filters. Equipment group is specified by a\nennumerated (by priority) list of equipment filters. An equipment group could either be owned by an user, or shared among administrators.\n\nname\tThe name of the equipment group\ndescription\tLonger description\n\n*/\nCREATE SEQUENCE filtergroup_id_seq START 1000;\nCREATE TABLE filtergroup (\n    id integer NOT NULL DEFAULT nextval('filtergroup_id_seq'),\n    owner_id integer,\n    name varchar,\n    description varchar,\n\n    CONSTRAINT filtergroup_pkey PRIMARY KEY(id),\n    CONSTRAINT filtergroup_owner_id_fkey\n        FOREIGN KEY(owner_id) REFERENCES Account(id)\n        ON DELETE CASCADE\n        ON UPDATE CASCADE\n);\nALTER SEQUENCE filtergroup_id_seq OWNED BY filtergroup.id;\n\n/*\n-- 10 ALERTSUBSCRIPTION\n\nAlertSubscription is the relation between alert address, time period and equipment group.\n\nsubscription_type\t\tan integer specifying the queueing settings on this alert.\n                    0 No queue, imediate delivery of alert\n                    1 Enqueued (daily), daily delivery of alert digest\n                    2 Enqueued (weekly), weekly delivery of alert digest\n                    3 Enqueued (profile switch), alert is enqueued, and every time alertengine detects that\n                a new time period is entered, this queue will be checked and delivered to the user or another\n                queue if it match the new time periods alert settings.\n*/\nCREATE SEQUENCE alertsubscription_id_seq;\nCREATE TABLE alertsubscription (\n\tid integer NOT NULL DEFAULT nextval('alertsubscription_id_seq'),\n\talert_address_id integer NOT NULL,\n\ttime_period_id integer NOT NULL,\n\tfilter_group_id integer NOT NULL,\n\tsubscription_type integer,\n\tignore_resolved_alerts boolean,\n\n\tCONSTRAINT alertsubscription_pkey PRIMARY KEY(id),\n\tCONSTRAINT alertsubscription_alert_address_id_key\n\t\tUNIQUE(alert_address_id, time_period_id, filter_group_id),\n\n\tCONSTRAINT alertsubscription_alert_address_id_fkey\n\t\tFOREIGN KEY (alert_address_id) REFERENCES alertaddress(id)\n\t\t\tON DELETE CASCADE\n\t\t\tON UPDATE CASCADE,\n\tCONSTRAINT alertsubscription_time_period_id_fkey\n\t\tFOREIGN KEY(time_period_id) REFERENCES timeperiod(id)\n\t\t\tON DELETE CASCADE\n\t\t\tON UPDATE CASCADE,\n\tCONSTRAINT alertsubscription_filter_group_id_fkey\n\t\tFOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\t\t\tON DELETE CASCADE\n\t\t\tON UPDATE CASCADE\n);\nALTER SEQUENCE alertsubscription_id_seq OWNED BY alertsubscription.id;\n\n/*\n-- 11 FILTERGROUP_GROUP_PERMISSION\n\nPermissions.\n\nThis table contatins a relation from a user group to an equipment group. It gives all members of the\nactual user group permission to set up notofication for alerts matching this filter. The relation\nusergroup <-> equipment group is many to many.\n*/\nCREATE SEQUENCE filtergroup_group_permission_id_seq;\nCREATE TABLE filtergroup_group_permission (\n       id integer NOT NULL DEFAULT nextval('filtergroup_group_permission_id_seq'),\n       accountgroup_id integer NOT NULL,\n       filtergroup_id integer NOT NULL,\n\n       CONSTRAINT filtergroup_group_permission_pkey PRIMARY KEY(id),\n       CONSTRAINT filtergroup_group_permission_accountgroup_id_key\n       \t\tUNIQUE(accountgroup_id, filtergroup_id),\n       CONSTRAINT filtergroup_group_permission_accountgroup_id_fkey\n\t\t  FOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE,\n       CONSTRAINT filtergroup_group_permission_filtergroup_id_fkey\n\t\t  FOREIGN KEY(filtergroup_id) REFERENCES filtergroup(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE filtergroup_group_permission_id_seq OWNED BY filtergroup_group_permission.id;\n\n/*\n-- 14 FILTER\n\nEquipment filter, is a list of matches. An equipment filter will for a given alarm evaluate to either true\nor false. For a filter to evaluate as true, all related filter matches has to evaluate to true.\n\nThe equipment filter could either be owned by an user, or shared among administrators. When accountid is null, the filter is shared among adminstrators.\n\nname\t\tThe name of the equipmentfilter\n*/\nCREATE SEQUENCE filter_id_seq START 1000;\nCREATE TABLE filter (\n       id integer NOT NULL DEFAULT nextval('filter_id_seq'),\n       owner_id integer,\n       name varchar,\n\n       CONSTRAINT filter_pkey PRIMARY KEY(id),\n       CONSTRAINT filter_owner_id_fkey\n\t\t  FOREIGN KEY(owner_id) REFERENCES Account(id)\n\t\t  ON DELETE SET NULL\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE filter_id_seq OWNED BY filter.id;\n\n/*\n-- 15 FILTERGROUPCONTENT\n\nThis table is an realtion from equipment group to eqipment filter. It is an enumerated relation, which\nmeans that each row has a priority.\n\ninclude.    If true the related filter is included in the group.\npositive.   If this is false, the filter is inverted, which implies that true is false, and\n            false is true.\npriority.   The list will be traversed in ascending priority order. Which means that the higher\n            number, the higher priority.\n*/\nCREATE SEQUENCE filtergroupcontent_id_seq;\nCREATE TABLE filtergroupcontent (\n       id integer NOT NULL DEFAULT nextval('filtergroupcontent_id_seq'),\n       include boolean NOT NULL DEFAULT true,\n       positive boolean NOT NULL DEFAULT true,\n       priority integer NOT NULL,\n       filter_id integer NOT NULL,\n       filter_group_id integer NOT NULL,\n\n       CONSTRAINT filtergroupcontent_pkey PRIMARY KEY(id),\n       CONSTRAINT filtergroupcontent_filter_id_key UNIQUE(filter_id, filter_group_id),\n       CONSTRAINT filtergroupcontent_filter_group_id_fkey\n\t\t  FOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE,\n       CONSTRAINT filtergroupcontent_filter_id_fkey\n\t\t  FOREIGN KEY(filter_id) REFERENCES filter(id)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE filtergroupcontent_id_seq OWNED BY filtergroupcontent.id;\n\n/*\n-- 16 MATCHFIELD\n\nMatchfield, is a relation to the Manage database. Each filtermatch could be related to a single matchfield.\n\nname\t\tThe name of the filter\ndescr\t\tLonger description\nvalue_help\tHelp text in html about how to choose values.\nvalue_id\t\tRealtion to manage: table.field that defines the id\nvalue_name\tRealtion to manage: table.field describing the attribute name\nvalue_sort\tRealtion to manage: table.field by which the values will be sorted in the option list.\nlist_limit\tMax number of values shown in the drop down list.\ndata_type\tDefining the datatype, this is a helper attribute for the alertengine.\nshow_list\tboolean, true: show list of values from manage. false: show html input field.\n*/\nCREATE SEQUENCE matchfield_id_seq START 1000;\nCREATE TABLE MatchField (\n    id integer NOT NULL DEFAULT nextval('matchfield_id_seq'),\n    name varchar,\n    description varchar,\n    value_help varchar,\n    value_id varchar,\n    value_name varchar,\n    value_sort varchar,\n    list_limit integer DEFAULT 1000,\n    data_type integer NOT NULL DEFAULT 0,\n    show_list boolean,\n\n    CONSTRAINT matchfield_pkey PRIMARY KEY(id)\n);\nALTER SEQUENCE matchfield_id_seq OWNED BY matchfield.id;\n\n/*\n-- 17 EXPRESSION\n\nExpression is a single condition. It consist of a matchfield, a operator and a value.\n\nmatch_field_id\tThis is a relation to matchfield\noperator\tThis specifies the operator used. This a static list.\nvalue\t\tThe value\n*/\nCREATE SEQUENCE expression_id_seq START 1000;\nCREATE TABLE expression (\n       id integer NOT NULL DEFAULT nextval('expression_id_seq'),\n       filter_id integer NOT NULL,\n       match_field_id integer NOT NULL,\n       operator integer,\n       value varchar,\n\n    CONSTRAINT expression_pkey PRIMARY KEY(id),\n    CONSTRAINT expression_match_field_id_fkey\n        FOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n        ON DELETE CASCADE\n        ON UPDATE CASCADE,\n    CONSTRAINT expression_filter_id_fkey\n        FOREIGN KEY(filter_id) REFERENCES filter(id)\n        ON DELETE CASCADE\n        ON UPDATE CASCADE\n);\nALTER SEQUENCE expression_id_seq OWNED BY expression.id;\n\n\n/*\n-- 18 OPERATOR\n\nOperator, this is a list related to each matchfield, specifying which operator should be availbale to\nchoose from, form the given matchfield.\n\n*/\nCREATE SEQUENCE operator_id_seq;\nCREATE SEQUENCE operator_operator_id_seq;\nCREATE TABLE Operator (\n    id integer NOT NULL DEFAULT nextval('operator_id_seq'),\n    operator_id integer NOT NULL DEFAULT nextval('operator_operator_id_seq'),\n    match_field_id integer NOT NULL,\n\n    CONSTRAINT operator_pkey PRIMARY KEY(id),\n    CONSTRAINT operator_operator_id_key UNIQUE(operator_id, match_field_id),\n    CONSTRAINT operator_match_field_id_fkey\n\tFOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n            ON DELETE CASCADE\n            ON UPDATE CASCADE\n);\nALTER SEQUENCE operator_id_seq OWNED BY operator.id;\nALTER SEQUENCE operator_operator_id_seq OWNED BY operator.operator_id;\n\n/*\n-- 20 SMSQ\n\nSMSQ Description\n\n*/\nCREATE TABLE smsq (\n    id serial,\n    accountid integer,\n    time timestamp NOT NULL,\n    phone varchar(15) NOT NULL,\n    msg varchar(145) NOT NULL,\n    sent char(1) NOT NULL DEFAULT 'N'\n        CHECK (sent='Y' or sent='N' or sent='I'),\n    smsid integer,\n    timesent timestamp,\n    severity integer,\n\n    CONSTRAINT smsq_pkey PRIMARY KEY(id),\n    CONSTRAINT smsq_accountid_fkey\n    \tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE\n);\n\n\n/*\n-- 21 ACCOUNTALERTQUEUE\n\nQUEUE Description\n\n*/\nCREATE TABLE accountalertqueue (\n    id serial,\n    account_id integer,\n    alert_id integer,\n    subscription_id integer,\n    insertion_time timestamp NOT NULL,\n\n    CONSTRAINT accountalertqueue_alert_id_fkey\n        FOREIGN KEY(alert_id) REFERENCES manage.alertq(alertqid)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE,\n    CONSTRAINT accountalertqueue_pkey PRIMARY KEY(id),\n    CONSTRAINT accountalertqueue_account_id_fkey\n    \tFOREIGN KEY(account_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE,\n    CONSTRAINT accountalertqueue_subscription_id_fkey\n\tFOREIGN KEY (subscription_id) REFERENCES alertsubscription(id)\n\t-- ON UPDATE CASCADE -- FIXME is CASCADE right here?\n\t-- ON DELETE CASCADE -- FIXME\n);\n\n/*\n-- 20 NAVBARLINK\n\nTable for links in the navigation bar and dropdown menus. Links with\naccountid 0 is shared by all.\n\naccountid          owner of the link, id 0 means link is shared by all\nname               one or two words describing the link, eg. Network\nExplorer\nuri                address of the link, eg. /vlanplot/index.html\n\n*/\nCREATE SEQUENCE navbarlink_id_seq START 1000;\nCREATE TABLE NavbarLink (\n    id integer NOT NULL DEFAULT nextval('navbarlink_id_seq'),\n    accountid integer NOT NULL DEFAULT 0,\n    name varchar,\n    uri varchar,\n\n    CONSTRAINT navbarlink_pkey PRIMARY KEY(id),\n    CONSTRAINT navbarlink_accountid_fkey\n               FOREIGN KEY (accountid) REFERENCES Account(id)\n               ON DELETE CASCADE\n               ON UPDATE CASCADE\n);\nALTER SEQUENCE navbarlink_id_seq OWNED BY navbarlink.id;\n\n/*\n-- AccountOrg\n\nThis table associates accounts with organizations.  Unfortunately, the\nentity describing organizations is contained in the manage database,\nso referential integrity must be enforced outside of the database\nserver.\n\n*/\nCREATE SEQUENCE accountorg_id_seq;\nCREATE TABLE AccountOrg (\n       id integer NOT NULL DEFAULT nextval('accountorg_id_seq'),\n       account_id integer NOT NULL,\n       organization_id varchar(30) NOT NULL,\n\n       CONSTRAINT accountorg_pkey PRIMARY KEY(id),\n       CONSTRAINT accountorg_accountid_key UNIQUE(account_id, organization_id),\n       CONSTRAINT accountorg_account_id_fkey\n                  FOREIGN KEY(account_id) REFERENCES Account(id)\n                  ON DELETE CASCADE\n                  ON UPDATE CASCADE,\n       CONSTRAINT accountorg_organization_id_fkey\n                  FOREIGN KEY (organization_id) REFERENCES manage.org(orgid)\n\t\t  ON DELETE CASCADE\n\t\t  ON UPDATE CASCADE\n);\nALTER SEQUENCE accountorg_id_seq OWNED BY accountorg.id;\n\n/*\n-- Privilege\n\nThis table contains valid privilege names and their id numbers for\nreference from the AccountGroupPrivilege table\n\n*/\nCREATE SEQUENCE privilege_id_seq START 10000;\nCREATE TABLE Privilege (\n       privilegeid integer NOT NULL DEFAULT nextval('privilege_id_seq'),\n       privilegename varchar(30) NOT NULL,\n\n       CONSTRAINT privilege_pkey PRIMARY KEY (privilegeid),\n       CONSTRAINT privilege_privilegename_key UNIQUE(privilegename)\n);\nALTER SEQUENCE privilege_id_seq OWNED BY privilege.privilegeid;\n\n/*\n-- AccountGroupPrivilege\n\nThis table defines privileges granted to AccountGroups.\n\n*/\nCREATE SEQUENCE accountgroupprivilege_id_seq;\nCREATE TABLE AccountGroupPrivilege (\n       id integer NOT NULL DEFAULT nextval('accountgroupprivilege_id_seq'),\n       accountgroupid integer NOT NULL,\n       privilegeid integer NOT NULL,\n       target varchar NOT NULL,\n\n       CONSTRAINT accountgroupprivilege_pkey PRIMARY KEY(id),\n       CONSTRAINT accountgroupprivilege_accountgroupid_key UNIQUE(accountgroupid, privilegeid, target),\n       CONSTRAINT accountgroupprivilege_accountgroupid_fkey\n                  FOREIGN KEY(accountgroupid) REFERENCES AccountGroup(id)\n                  ON DELETE CASCADE\n                  ON UPDATE CASCADE,\n       CONSTRAINT accountgroupprivilege_privilegeid_fkey\n                  FOREIGN KEY(privilegeid) REFERENCES Privilege\n                  ON DELETE CASCADE\n                  ON UPDATE CASCADE\n);\nALTER SEQUENCE accountgroupprivilege_id_seq OWNED BY accountgroupprivilege.id;\n\n/*\n-- PrivilegeByGroup\n\nThis is a view that is similar to AccountGroupPrivilege, except that privilege names have been resolved from the privilege id\n*/\nCREATE VIEW PrivilegeByGroup AS (\n       SELECT a.accountgroupid, b.privilegename AS action, a.target\n       FROM AccountgroupPrivilege AS a NATURAL JOIN Privilege AS b\n);\n\n\n/*\n-- statuspref\n\nStores preferences for the status tool.\n*/\nCREATE SEQUENCE statuspreference_id_seq START 1000;\nCREATE TABLE statuspreference (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_id_seq'),\n\tname varchar NOT NULL,\n\tposition integer NOT NULL,\n\ttype varchar NOT NULL,\n\taccountid integer NOT NULL,\n\n\tservices varchar NOT NULL DEFAULT '',\n\tstates varchar NOT NULL DEFAULT 'n,s',\n\n\tCONSTRAINT statuspreference_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_accountid_fkey\n\t\tFOREIGN KEY (accountid) REFERENCES Account(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\nALTER SEQUENCE statuspreference_id_seq OWNED BY statuspreference.id;\n\nCREATE SEQUENCE statuspreference_organization_id_seq;\nCREATE TABLE statuspreference_organization (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_organization_id_seq'),\n\tstatuspreference_id integer NOT NULL,\n\torganization_id varchar NOT NULL,\n\n\tCONSTRAINT statuspreference_organization_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_organization_statuspreference_id_key\n\t\tUNIQUE(statuspreference_id, organization_id),\n\tCONSTRAINT statuspreference_organization_statuspreference_id_fkey\n\t\tFOREIGN KEY (statuspreference_id) REFERENCES statuspreference(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE,\n\tCONSTRAINT statuspreference_organization_organization_id_fkey\n\t\tFOREIGN KEY (organization_id) REFERENCES manage.org(orgid)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\nALTER SEQUENCE statuspreference_organization_id_seq OWNED BY statuspreference_organization.id;\n\nCREATE SEQUENCE statuspreference_category_id_seq;\nCREATE TABLE statuspreference_category (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_category_id_seq'),\n\tstatuspreference_id integer NOT NULL,\n\tcategory_id varchar NOT NULL,\n\n\tCONSTRAINT statuspreference_category_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_category_statuspreference_id_key\n\t\tUNIQUE(statuspreference_id, category_id),\n\tCONSTRAINT statuspreference_category_statuspreference_id_fkey\n\t\tFOREIGN KEY (statuspreference_id) REFERENCES statuspreference(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE,\n\tCONSTRAINT statuspreference_category_category_id_fkey\n\t\tFOREIGN KEY (category_id) REFERENCES manage.cat(catid)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\nALTER SEQUENCE statuspreference_category_id_seq OWNED BY statuspreference_category.id;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n------------------------------------------------------\n INSERT INITIAL DATA\n------------------------------------------------------\n*/\n\n\n-- Accounts and Accountgroups\n\nINSERT INTO AccountGroup (id, name, descr) VALUES (1, 'NAV Administrators', 'Full access to everything');\nINSERT INTO AccountGroup (id, name, descr) VALUES (2, 'Everyone', 'Unauthenticated and authenticated users');\nINSERT INTO AccountGroup (id, name, descr) VALUES (3, 'Authenticated users', 'Any authenticated user (logged in)');\n\n-- Some default example groups\nINSERT INTO AccountGroup (name, descr) VALUES ('SMS', 'Allowed to receive SMS alerts');\n\n-- Default system accounts\nINSERT INTO Account (id, login, name, password) VALUES (0, 'default', 'Default User', '');\nINSERT INTO Account (id, login, name, password) VALUES (1, 'admin', 'NAV Administrator', '{sha1}s3F6XX/D$L3vU8Rs2bTJ4zArBLVIPbh7cN9Q=');\n\nINSERT INTO accountgroup_accounts (account_id, accountgroup_id) VALUES (0,2); -- add default to Everyone\nINSERT INTO accountgroup_accounts (account_id, accountgroup_id) VALUES (1,1); -- add admin to Administrators\nINSERT INTO accountgroup_accounts (account_id, accountgroup_id) VALUES (1,2); -- add admin to Everyone\nINSERT INTO accountgroup_accounts (account_id, accountgroup_id) VALUES (1,3); -- add admin to Authenticated users\n\n-- Privileges\n\n-- INSERT INTO Privilege VALUES (1, 'empty_privilege');\nINSERT INTO Privilege VALUES (2, 'web_access');\nINSERT INTO Privilege VALUES (3, 'alert_by');\n\n/*\n  Set some default web_access privileges\n*/\n-- Anonymous users need access to a few things, like the login page and images\n-- and soforth\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/about/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/images/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/js/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/style/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/alertprofiles/wap/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/$');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/toolbox\\\\b');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/index(.py)?/(index|login|logout|passwd)\\\\b');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/userinfo/?');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/messages/(active|historic|planned|view|rss)\\\\b');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/maintenance/(calendar|active|historic|planned|view)\\\\b');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/geomap$');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, E'^/geomap/open');\n-- Grant web access to unauthorized ajax requests\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/ajax/open/?');\n-- Grant web access to osm map redirects\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/search/osm_map_redirect/?');\n-- Give everyone access to navlets\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/navlets/.*');\n\n\n-- Define minimum privileges for authenticated users\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (3, 2, '^/(report|status|alertprofiles|machinetracker|browse|preferences|cricket|stats|ipinfo|l2trace|logger|ipdevinfo|geomap|info|netmap|graphite|search|index/dashboard)/?');\n\n\n-- Give alert_by privilege to SMS group\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n       VALUES ((SELECT id FROM AccountGroup WHERE name='SMS'), 3, 'sms');\n\n-- Alert senders\nINSERT INTO alertsender VALUES (1, 'Email', 'email');\nINSERT INTO alertsender VALUES (2, 'SMS', 'sms');\nINSERT INTO alertsender VALUES (3, 'Jabber', 'jabber');\nINSERT INTO alertsender VALUES (4, 'Slack', 'slack');\n\n\n-- Matchfields\n/*\nMatchfield.Datatype\n\tstring:  0\n\tinteger: 1\n\tip adr:  2\n*/\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(10, 0, 'Event type', 'eventtype.eventtypeid', 'eventtype.eventtypedesc', 'eventtype.eventtypeid', true,\n'Event type: An event type describes a category of alarms. (Please note that alarm type is a more refined attribute. There are a set of alarm types within an event type.)');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 10);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 10);\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(11, 0, 'Alert type', 'alerttype.alerttype', 'alerttype.alerttypedesc', 'alerttype.alerttype', true,\n'Alert type: An alert type describes the various values an event type may take.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 11);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 11);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description, value_help) VALUES\n(12, 1, 'Severity', 'alertq.severity', null, null, false,\n'Severity: Limit your alarms based on severity.',\n'Range: Severities are in the range 0-100, where 100 is most severe.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 12);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (1, 12);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (2, 12);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (3, 12);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (4, 12);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (5, 12);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(13, 0, 'Category', 'cat.catid', 'cat.descr', 'cat.catid', true,\n'Category: All equipment is categorized in 7 main categories.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 13);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 13);\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(14, 0, 'Group', 'netboxgroup.netboxgroupid', 'netboxgroup.descr', 'netboxgroup.descr', true,\n'Group: netboxes may belong to a group that is independent of type and category');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 14);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 14);\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description, value_help) VALUES\n(15, 0, 'Sysname', 'netbox.sysname', null, null, false,\n'Sysname: Limit your alarms based on sysname.',\nE'Sysname examples:<blockquote>\n<b>Starts with:</b> samson.<br>\n<b>Ends with:</b> .stud.ntnu.no<br>\n<b>Contains:</b> .studby.<br>\n<b>Regexp:</b> [sbm][0-2][0-9]{2}[a-z]\\\\.studby\\\\.ntnu\\\\.no</blockquote>');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 15);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (5, 15);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (6, 15);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (7, 15);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (8, 15);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (9, 15);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description, value_help) VALUES\n(16, 2, 'IP address', 'netbox.ip', null, null, false,\n'Limit your alarms based on an IP address/range (prefix)',\n'examples:<blockquote>\n129.241.190.190<br>\n129.241.190.0/24</br>\n129.241.0.0/16</blockquote>');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 16);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 16);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(17, 0, 'Room', 'room.roomid', 'room.descr', 'room.roomid', true,\n'Room: Limit your alarms based on room.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 17);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 17);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(18, 0, 'Location', 'location.locationid', 'location.descr', 'location.descr', true,\n'Location: Limit your alarms based on location (a location contains a set of rooms) ');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 18);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 18);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(19, 0, 'Organization', 'org.orgid', 'org.descr', 'org.descr', true,\n'Organization: Limit your alarms based on the organization ownership of the alarm in question.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 19);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 19);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(20, 0, 'Usage', 'usage.usageid', 'usage.descr', 'usage.descr', true,\n'Usage: Different network prefixes are mapped to usage areas.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 20);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 20);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(21, 0, 'Type', 'type.typename', 'type.descr', 'type.descr', true,\n'Type: Limit your alarms equipment type');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 21);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 21);\n\n\nINSERT INTO MatchField (id, data_type, name, value_id, value_name, value_sort, show_list, description) VALUES\n(22, 0, 'Equipment vendor', 'vendor.vendorid', 'vendor.vendorid', 'vendor.vendorid', true,\n'Equipment vendor: Limit alert by the vendor of the netbox.');\nINSERT INTO Operator (operator_id, match_field_id) VALUES (0, 22);\nINSERT INTO Operator (operator_id, match_field_id) VALUES (11, 22);\n\n\n\n\n\n\n\n\n\n-- INSERT DEFAULT FILTERS AND FILTER GROUPS\n\n-- Table:filtergroup\n\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (71, NULL, 'G01: All alerts', 'This filter group matches every alert. The group can i.e. be used to give a group permission to receive all alerts.');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (62, NULL, 'G02: All router alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (63, NULL, 'G03: All switch (core and edge) alerts', '');\n\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (64, NULL, 'G04: All core switch alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (65, NULL, 'G05: All edge switch alert', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (68, NULL, 'G06: All alerts from wireless boxes', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (69, NULL, 'G07: All alerts from servers', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (70, NULL, 'G08: All alerts from OTHER equipment', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (72, NULL, 'G09: All boxState alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (73, NULL, 'G10: All box up/down alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (74, NULL, 'G11: All box sunny/shadow alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (75, NULL, 'G12: All boxState early warnings', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (76, NULL, 'G13: All module outage alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (77, NULL, 'G14: All services alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (78, NULL, 'G15: All threshold alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (79, NULL, 'G16: All device change alerts', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (81, NULL, 'G17: All alerts with severity >= Warning', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (82, NULL, 'G18: All alerts with severity >= Errors', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (83, NULL, 'G19: All alerts with severity >= Critical', '');\nINSERT INTO filtergroup (id, owner_id, name, description) VALUES (84, NULL, 'G20: All alerts with severity = Emergency', '');\n\n-- Table:filter\n\nINSERT INTO filter (id, owner_id, name) VALUES (13, NULL, 'F01: All alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (29, NULL, 'F02: All router alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (30, NULL, 'F03: All switch (core and edge) alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (31, NULL, 'F04: All core switch alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (32, NULL, 'F05: All edge switch alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (33, NULL, 'F06: All alerts from wireless boxes');\nINSERT INTO filter (id, owner_id, name) VALUES (34, NULL, 'F07: All alerts from servers');\nINSERT INTO filter (id, owner_id, name) VALUES (35, NULL, 'F08: All alerts from OTHER equipment');\nINSERT INTO filter (id, owner_id, name) VALUES (36, NULL, 'F09: All boxState alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (14, NULL, 'F10: All box up/down alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (15, NULL, 'F11: All box sunny/shadow alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (25, NULL, 'F12: All boxState early warnings');\nINSERT INTO filter (id, owner_id, name) VALUES (16, NULL, 'F13: All module outage alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (26, NULL, 'F14: All services alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (27, NULL, 'F15: All threshold alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (28, NULL, 'F16: All device change alerts');\nINSERT INTO filter (id, owner_id, name) VALUES (20, NULL, 'F17: All alerts with severity >= Warning');\nINSERT INTO filter (id, owner_id, name) VALUES (21, NULL, 'F18: All alerts with severity >= Errors');\nINSERT INTO filter (id, owner_id, name) VALUES (23, NULL, 'F19: All alerts with severity >= Critical');\nINSERT INTO filter (id, owner_id, name) VALUES (24, NULL, 'F20: All alerts with severity = Emergency');\n\n\n\n\n-- Table: filtergroupcontent\n\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 29, 62);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 30, 63);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 2, 31, 64);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 32, 65);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 33, 68);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 34, 69);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 13, 71);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 35, 70);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 36, 72);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 14, 73);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 15, 74);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 25, 75);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 16, 76);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 26, 77);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 27, 78);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 28, 79);\n--INSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 19, 80);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 20, 81);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 21, 82);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 23, 83);\nINSERT INTO filtergroupcontent (include, positive, priority, filter_id, filter_group_id) VALUES (true, true, 1, 24, 84);\n\n-- Table: expression\n\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (26, 29, 13, 11, 'GSW|GW');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (27, 13, 12, 4, '100');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (25, 30, 13, 11, 'EDGE|GSW|SW');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (28, 31, 13, 11, 'GSW|SW');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (29, 14, 11, 11, 'boxDown|boxUp');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (30, 15, 11, 11, 'boxShadow|boxSunny');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (31, 25, 11, 11, 'boxDownWarning|boxShadowWarning');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (32, 16, 10, 0, 'moduleState');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (43, 32, 13, 0, 'EDGE');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (44, 33, 13, 0, 'WLAN');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (45, 34, 13, 0, 'SRV');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (46, 35, 13, 0, 'OTHER');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (47, 36, 10, 0, 'boxState');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (52, 26, 10, 0, 'serviceState');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (53, 27, 10, 0, 'thresholdState');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (55, 20, 12, 2, '20');\n--INSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (56, 19, 12, 2, '0');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (57, 21, 12, 2, '40');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (58, 28, 10, 0, 'deviceChanged');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (59, 23, 12, 2, '60');\nINSERT INTO expression (id, filter_id, match_field_id, operator, value) VALUES (61, 24, 12, 2, '80');\n\n\n-- Table: filtergroup_group_permission\n\nINSERT INTO filtergroup_group_permission (accountgroup_id, filtergroup_id) VALUES (1, 71);\n\n\n-- StatusPreferences for Default user\n\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (1, 'IP devices down', 1, 'netbox', 0, 'n');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (2, 'IP devices in shadow', 2, 'netbox', 0, 's');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (3, 'IP devices on maintenance', 3, 'netbox_maintenance', 0, 'y,n,s');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (4, 'Modules down/in shadow', 4, 'module', 0, 'n,s');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (5, 'Services down', 5, 'service', 0, 'n,s');\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (6, 'Thresholds exceeded', 6, 'threshold', 0);\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (7, 'SNMP agents down', 7, 'snmpagent', 0);\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (8, 'Links down', 8, 'linkstate', 0);\n\n\n-- netmap_view\nCREATE TABLE profiles.netmap_view (\n  viewid SERIAL,\n  owner INT4 NOT NULL REFERENCES account ON UPDATE CASCADE ON DELETE CASCADE,\n  title VARCHAR NOT NULL,\n  zoom VARCHAR NOT NULL,\n  is_public BOOLEAN NOT NULL DEFAULT FALSE,\n  last_modified TIMESTAMP NOT NULL DEFAULT NOW(),\n  topology INT4 NOT NULL,\n  display_elinks BOOLEAN NOT NULL DEFAULT false,\n  display_orphans BOOLEAN NOT NULL DEFAULT false,\n  description TEXT DEFAULT null,\n  location_room_filter varchar NOT NULL DEFAULT '',\n\n  PRIMARY KEY (viewid)\n);\nCOMMENT ON TABLE netmap_view IS 'Stored views with settings for NetMap';\n\nCREATE TABLE profiles.netmap_view_categories (\n  id SERIAL,\n  viewid INT4 CONSTRAINT netmapview_fkey REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  catid VARCHAR(8) CONSTRAINT netmapview_category_fkey REFERENCES manage.cat ON UPDATE CASCADE ON DELETE CASCADE,\n  PRIMARY KEY (viewid, catid)\n);\n\nCREATE TABLE profiles.netmap_view_nodeposition (\n  id SERIAL,\n  viewid INT4 NOT NULL REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 NOT NULL REFERENCES manage.netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  x INT4 NOT NULL,\n  y INT4 NOT NULL,\n  PRIMARY KEY (viewid, netboxid)\n);\n\n-- netmap_view_defaultview\nCREATE TABLE profiles.netmap_view_defaultview (\n  id SERIAL,\n  viewid INT4 NOT NULL REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  ownerid INT4 NOT NULL REFERENCES account ON UPDATE CASCADE ON DELETE CASCADE,\n  PRIMARY KEY (viewid, ownerid)\n);\nCOMMENT ON TABLE netmap_view_defaultview IS 'Stores default views for users in Netmap';\n\nCREATE TABLE profiles.accounttool(\n  account_tool_id SERIAL PRIMARY KEY,\n  toolname VARCHAR,\n  accountid INTEGER NOT NULL,\n  display BOOLEAN DEFAULT TRUE,\n  priority INTEGER DEFAULT 0,\n\n  FOREIGN KEY (accountid) REFERENCES account(id) ON DELETE CASCADE ON UPDATE CASCADE\n);\n\n-- Django database-backed sessions are now being used by NAV.\nCREATE TABLE profiles.django_session (\n    \"session_key\" varchar(40) NOT NULL PRIMARY KEY,\n    \"session_data\" text NOT NULL,\n    \"expire_date\" timestamp with time zone NOT NULL\n);\n\n--- Create table for storing multiple dashboards\nCREATE TABLE profiles.account_dashboard (\n  id SERIAL PRIMARY KEY,\n  name VARCHAR DEFAULT 'My dashboard',\n  is_default BOOLEAN DEFAULT FALSE,\n  num_columns INT,\n  account_id INT REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE\n);\n\n-- Create table for storing navlet information for a user\n\nCREATE TABLE IF NOT EXISTS profiles.account_navlet (\n  id SERIAL PRIMARY KEY,\n  dashboard_id INT REFERENCES account_dashboard(id) ON UPDATE CASCADE ON DELETE CASCADE,\n  navlet VARCHAR NOT NULL,\n  account INT,\n  col INT,\n  displayorder INT NOT NULL,\n  preferences VARCHAR,\n\n  CONSTRAINT account_navlet_account_fkey\n    FOREIGN KEY (account) REFERENCES account(id)\n    ON DELETE CASCADE ON UPDATE CASCADE\n);\n\n\n---\n-- Insert default widgets for every existing user\n---\nCREATE OR REPLACE FUNCTION insert_default_navlets_for_existing_users() RETURNS void AS $$\nDECLARE\n  account RECORD;\nBEGIN\n  FOR account IN SELECT * FROM account LOOP\n    RAISE NOTICE 'Adding default navlets for %s', quote_ident(account.login);\n    INSERT INTO account_navlet (navlet, account, displayorder, col, preferences) VALUES\n      ('nav.web.navlets.gettingstarted.GettingStartedWidget', account.id, 0, 1, NULL),\n      ('nav.web.navlets.status2.Status2Widget', account.id, 1, 1, '{\"status_filter\": \"event_type=boxState&stateless_threshold=24\", \"refresh_interval\": 60000}'),\n      ('nav.web.navlets.messages.MessagesNavlet', account.id, 2, 1, NULL),\n      ('nav.web.navlets.navblog.NavBlogNavlet', account.id, 0, 2, NULL),\n      ('nav.web.navlets.linklist.LinkListNavlet', account.id, 1, 2, NULL);\n  END LOOP;\nEND;\n$$ LANGUAGE plpgsql;\n\nSELECT insert_default_navlets_for_existing_users();\n\n---\n-- Remove GettingStartedWidget for default user.\n---\nDELETE FROM account_navlet WHERE account=0 AND navlet='nav.web.navlets.gettingstarted.GettingStartedWidget';\n\n\n--- Create a dashboard for each user and move all widgets there\nDO $$DECLARE thisaccount RECORD;\nBEGIN\n  FOR thisaccount IN SELECT * FROM account LOOP\n    RAISE NOTICE 'Creating dashboard for %s', quote_ident(thisaccount.login);\n    WITH inserted AS (\n      INSERT INTO account_dashboard (account_id, is_default, num_columns)\n      VALUES (thisaccount.id, TRUE, 3) RETURNING id\n    )\n    UPDATE account_navlet\n      SET dashboard_id=inserted.id\n      FROM inserted\n      WHERE account=thisaccount.id;\n  END LOOP;\nEND$$;\n\n--\n-- Function and trigger to ensure the default account's dashboard setup is\n-- copied to every new account that is created\n--\n\n-- Create a new dashboard and copy all the widgets from the default user to\n-- the dashboard\nCREATE OR REPLACE FUNCTION create_new_dashboard() RETURNS trigger AS $$\n  BEGIN\n    WITH inserted AS (\n      INSERT INTO account_dashboard (account_id, is_default, num_columns)\n      VALUES (NEW.id, TRUE, 3) RETURNING id\n    )\n    INSERT INTO account_navlet (account, navlet, displayorder, col, preferences, dashboard_id)\n      SELECT NEW.id, navlet, displayorder, col, preferences, (SELECT id from inserted)\n        FROM account_navlet WHERE account=0;\n\n    RETURN NULL;\n  END\n$$ LANGUAGE plpgsql;\n\n\n-- Creates a dashboard with default widgets for a new user\nCREATE TRIGGER add_default_dashboard_on_account_create AFTER INSERT ON account\n  FOR EACH ROW\n  EXECUTE PROCEDURE create_new_dashboard();\n\n\n/*\n------------------------------------------------------\n EOF\n------------------------------------------------------\n*/\n"
  },
  {
    "path": "python/nav/models/sql/baseline/radius.sql",
    "content": "/*\n=============================================\n\n    SQL Initialization script for NAV's radius accounting tables.\n    Read the README file for more info.\n    \n\t!! WARNING !!\n\n\tThis SQL script is encoded as unicode (UTF-8), before you do make\n\tchanges and commit, be 100% sure that your editor does not mess it up.\n    \n    Check 1 : These norwegian letters looks nice:\n    ! æøåÆØÅ !\n    Check 2 : This is the Euro currency sign: \n    ! € !\n\n    These table definitions are grabbed from wiki.freeradius.org and have been \n    slightly modified for use with the radius-module.\n\n=============================================\n*/\n\nCREATE TABLE radiusacct (\n        RadAcctId               BIGSERIAL PRIMARY KEY,\n        AcctSessionId           VARCHAR(96) NOT NULL,\n        AcctUniqueId            VARCHAR(32) NOT NULL,\n        UserName                VARCHAR(70),\n        Realm                   VARCHAR(24),\n        NASIPAddress            INET NOT NULL,\n        NASPortType             VARCHAR(32),\n        CiscoNASPort            VARCHAR(32),\n        AcctStartTime           TIMESTAMP,\n        AcctStopTime            TIMESTAMP,\n        AcctSessionTime         BIGINT,\n        AcctInputOctets         BIGINT,\n        AcctOutputOctets        BIGINT,\n        CalledStationId         VARCHAR(50),\n        CallingStationId        VARCHAR(50),\n        AcctTerminateCause      VARCHAR(32),\n        FramedProtocol          VARCHAR(32),\n        FramedIPAddress         INET,\n        AcctStartDelay          BIGINT,\n        AcctStopDelay           BIGINT\n);\n\nCREATE TABLE radiuslog (\n        ID                      BIGSERIAL PRIMARY KEY,\n        Time                    TIMESTAMP with time zone,\n        Type                    VARCHAR(10),\n        Message                 VARCHAR(200),\n        Status                  VARCHAR(65),\n        UserName                VARCHAR(70),\n        Client                  VARCHAR(65),\n        Port                    VARCHAR(8)\n        );\n\n"
  },
  {
    "path": "python/nav/models/sql/baseline/types.sql",
    "content": "-- This SQL script inserts initial equipment vendors and types in the NAV\n-- manage database.\n--\n-- It is not necessary to run this script in a transaction.  If executed on a\n-- running installation, types and vendors that already exist will generate\n-- errors, while the rest will be inserted as new records.\n\n\n-- First, vendors\nINSERT INTO vendor (vendorid) VALUES ('unknown');\nINSERT INTO vendor (vendorid) VALUES ('alcatel');\nINSERT INTO vendor (vendorid) VALUES ('allied');\nINSERT INTO vendor (vendorid) VALUES ('avaya');\nINSERT INTO vendor (vendorid) VALUES ('breezecom');\nINSERT INTO vendor (vendorid) VALUES ('cisco');\nINSERT INTO vendor (vendorid) VALUES ('dlink');\nINSERT INTO vendor (vendorid) VALUES ('hp');\nINSERT INTO vendor (vendorid) VALUES ('symbol');\nINSERT INTO vendor (vendorid) VALUES ('3com');\nINSERT INTO vendor (vendorid) VALUES ('nortel');\nINSERT INTO vendor (vendorid) VALUES ('juniper');\n\n\n-- Then types\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('3com', 'PS40', '1.3.6.1.4.1.43.10.27.4.1', 'Portstack 40 hub');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('3com', 'SW1100', '1.3.6.1.4.1.43.10.27.4.1.2.1', 'Portswitch 1100');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('3com', 'SW3300', '1.3.6.1.4.1.43.10.27.4.1.2.2', 'Portswitch 3300');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('3com', 'SW9300', '1.3.6.1.4.1.43.1.16.2.2.2.1', 'Portswitch 9300');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('alcatel', 'alcatel6200', '1.3.6.1.4.1.6486.800.1.1.2.2.4.1.4', 'OmniStack LS 6200');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('alcatel', 'alcatel6200-X', '1.3.6.1.4.1.6486.800.1.1.2.2.4.1.3', 'Alcatel Omnistack LS 6200 (seems to be multiple IDs for this model)');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('alcatel', 'alcatel6800', '1.3.6.1.4.1.6486.800.1.1.2.1.6.1.1', 'Alcatel Omniswitch 6800');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cat3560G', '1.3.6.1.4.1.9.1.617', 'Catalyst 3560G');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cat6504', '1.3.6.1.4.1.9.1.657', 'Catalyst');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst2924XL', '1.3.6.1.4.1.9.1.183', 'Catalyst 2924 XL switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst2924XLv', '1.3.6.1.4.1.9.1.217', 'Catalyst 2924 XLv switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst295024', '1.3.6.1.4.1.9.1.324', 'Catalyst 2950-24');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst295024G', '1.3.6.1.4.1.9.1.428', 'Catalyst 2950G-24-E1 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst295048G', '1.3.6.1.4.1.9.1.429', 'Catalyst 295048G');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst297024TS', '1.3.6.1.4.1.9.1.561', 'Catalyst 2970');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst3508GXL', '1.3.6.1.4.1.9.1.246', 'Catalyst 3508 GXL switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst3524XL', '1.3.6.1.4.1.9.1.248', 'Catalyst 3524 XL switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst3524tXLEn', '1.3.6.1.4.1.9.1.287', 'Catalyst 3524tXLEn');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst375024ME', '1.3.6.1.4.1.9.1.574', 'Catalyst 3750 Metro');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst37xxStack', '1.3.6.1.4.1.9.1.516', 'Catalyst 3750');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst4003', '1.3.6.1.4.1.9.5.40', 'Catalyst 4003');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst4006', '1.3.6.1.4.1.9.1.448', 'Catalyst 4006 sup 2 L3 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst4506', '1.3.6.1.4.1.9.1.502', 'Catalyst 4506 sup4 L3 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst4510', '1.3.6.1.4.1.9.1.537', 'Catalyst 4510');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'catalyst6509', '1.3.6.1.4.1.9.1.283', 'Catalyst 6509');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1000', '1.3.6.1.4.1.9.1.40', 'Cisco 1000 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1003', '1.3.6.1.4.1.9.1.41', 'Cisco 1003 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1005', '1.3.6.1.4.1.9.1.49', 'Cisco 1005 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco10720', '1.3.6.1.4.1.9.1.397', 'Cisco 10720 (YB) Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco12016', '1.3.6.1.4.1.9.1.273', 'Cisco 12016 (GSR) Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco12404', '1.3.6.1.4.1.9.1.423', 'Cisco 12404 (GSR) Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco12416', '1.3.6.1.4.1.9.1.385', 'Cisco 12416 (GSR) Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1601', '1.3.6.1.4.1.9.1.113', 'Cisco 1601 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1602', '1.3.6.1.4.1.9.1.114', 'Cisco 1602 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1603', '1.3.6.1.4.1.9.1.115', 'Cisco 1603 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1604', '1.3.6.1.4.1.9.1.116', 'Cisco 1604 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1721', '1.3.6.1.4.1.9.1.444', 'Cisco 1721 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco1751', '1.3.6.1.4.1.9.1.326', 'Cisco 1751 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2500', '1.3.6.1.4.1.9.1.13', 'Cisco 2500 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2501', '1.3.6.1.4.1.9.1.17', 'Cisco 2501 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2502', '1.3.6.1.4.1.9.1.18', 'Cisco 2502 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2503', '1.3.6.1.4.1.9.1.19', 'Cisco 2503 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2511', '1.3.6.1.4.1.9.1.27', 'Cisco 2511 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2514', '1.3.6.1.4.1.9.1.30', 'Cisco 2514 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco2821', '1.3.6.1.4.1.9.1.577', 'Cisco 2821 router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco3620', '1.3.6.1.4.1.9.1.122', 'Cisco 3620 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco3640', '1.3.6.1.4.1.9.1.110', 'Cisco 3640 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco4000', '1.3.6.1.4.1.9.1.7', 'Cisco 4000 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco4500', '1.3.6.1.4.1.9.1.14', 'Cisco 4500 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco4700', '1.3.6.1.4.1.9.1.50', 'Cisco 4700 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7010', '1.3.6.1.4.1.9.1.12', 'Cisco 7010 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7204', '1.3.6.1.4.1.9.1.125', 'Cisco 7204 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7204VXR', '1.3.6.1.4.1.9.1.223', 'Cisco 7204VXR Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7206', '1.3.6.1.4.1.9.1.108', 'Cisco 7206 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7206VXR', '1.3.6.1.4.1.9.1.222', 'Cisco 7206VXR Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7505', '1.3.6.1.4.1.9.1.48', 'Cisco 7505 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7507', '1.3.6.1.4.1.9.1.45', 'Cisco 7507 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'cisco7513', '1.3.6.1.4.1.9.1.46', 'Cisco 7513 Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoAIRAP1130', '1.3.6.1.4.1.9.1.618', 'Cisco AP 1130');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoAIRAP1210', '1.3.6.1.4.1.9.1.525', 'Cisco AP 1200');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoAIRAP350IOS', '1.3.6.1.4.1.9.1.552', 'Cisco AP 350');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoAS5200', '1.3.6.1.4.1.9.1.109', 'Cisco AS5200');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoVPN3030', '1.3.6.1.4.1.3076.1.2.1.1.1.2', 'Cisco 3030 VPN concentrator');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'ciscoWSX5302', '1.3.6.1.4.1.9.1.168', 'Cisco RSM Router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc2926', '1.3.6.1.4.1.9.5.35', 'Catalyst 2926 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc2980g', '1.3.6.1.4.1.9.5.49', 'Catalyst 2980g');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc2980ga', '1.3.6.1.4.1.9.5.51', 'Catalyst 2980ga');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc4006', '1.3.6.1.4.1.9.5.46', 'Catalyst 4006 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc5000', '1.3.6.1.4.1.9.5.7', 'Catalyst 5000 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc5500', '1.3.6.1.4.1.9.5.17', 'Catalyst 5500 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('cisco', 'wsc5505', '1.3.6.1.4.1.9.5.34', 'Catalyst 5505 switch');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('hp', 'hp2524', '1.3.6.1.4.1.11.2.3.7.11.19', 'ProCurve Switch 2524');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('hp', 'hp2626A', '1.3.6.1.4.1.11.2.3.7.11.34', 'ProCurve Switch 2626 (J4900A)');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('hp', 'hp2626B', '1.3.6.1.4.1.11.2.3.7.11.45', 'ProCurve Switch 2626 (J4900B)');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('hp', 'hp2650A', '1.3.6.1.4.1.11.2.3.7.11.29', 'ProCurve Switch 2650 (J4899A)');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('hp', 'hp2650B', '1.3.6.1.4.1.11.2.3.7.11.44', 'ProCurve Switch 2650 (J4899B)');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('juniper', 'T640', '1.3.6.1.4.1.2636.1.1.1.2.6', 'Juniper T640');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('juniper', 'juniperM7i', '1.3.6.1.4.1.2636.1.1.1.2.10', 'Juniper Networks, Inc. m7i internet router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('juniper', 'm320', '1.3.6.1.4.1.2636.1.1.1.2.9', 'Juniper Networks, Inc. m320 internet router');\nINSERT INTO \"type\" (vendorid, typename, sysobjectid, descr) VALUES ('nortel', 'nortel5510', '1.3.6.1.4.1.45.3.53.1', 'Nortel Baystack 5510-48T Switch');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.08.0000.sql",
    "content": "DROP TABLE nav_schema_version;\n\nCREATE TABLE manage.schema_change_log (\n    id SERIAL PRIMARY KEY,\n    major INTEGER NOT NULL,\n    minor INTEGER NOT NULL,\n    point INTEGER NOT NULL,\n    script_name VARCHAR NOT NULL,\n    date_applied TIMESTAMP NOT NULL DEFAULT NOW()\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.08.0001.sql",
    "content": "-- Include up boxes in the default netbox_maintenance settings\nUPDATE statuspreference SET states = 'y,n,s' WHERE id = 3;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0001.sql",
    "content": "-- Changes necessary to implement the macwatch system\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('info','macWarning','Mac appeared on port');\n\n------------------------------------------------------------------------------\n-- mac watch table for storing watched mac addresses\n------------------------------------------------------------------------------\nCREATE TABLE manage.macwatch (\n  id SERIAL PRIMARY KEY,\n  camid INT REFERENCES cam(camid) ON DELETE CASCADE ON UPDATE CASCADE,\n  mac MACADDR NOT NULL,\n  posted TIMESTAMP,\n  userid INT REFERENCES account(id) ON DELETE SET NULL ON UPDATE CASCADE,\n  login VARCHAR,\n  description VARCHAR,\n  created TIMESTAMP DEFAULT NOW()\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0002.sql",
    "content": "-- get macwatch into event system's subsystem list\nINSERT INTO subsystem (\n  SELECT 'macwatch' AS name \n  WHERE NOT EXISTS (\n    SELECT name FROM subsystem WHERE name='macwatch'));\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0003.sql",
    "content": "-- Make sure to close active ARP entries if the source netbox goes down\nCREATE OR REPLACE RULE netbox_status_close_arp AS ON UPDATE TO netbox\n   WHERE NEW.up='n'\n   DO UPDATE arp SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0004.sql",
    "content": "-- Force re-profiling of all devices using the fixed code for issue LP#862208\nUPDATE snmpoid SET uptodate=FALSE WHERE oidsource ILIKE 'cricket';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0005.sql",
    "content": "-- Force re-profiling of all devices AGAIN, using the fixed AGAIN code for issue LP#862208\nUPDATE snmpoid SET uptodate=FALSE WHERE oidsource ILIKE 'cricket';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.09.0006.sql",
    "content": "-- Fix broken constraint on rrd_file\nDELETE FROM rrd_file WHERE netboxid IS NULL;\nALTER TABLE rrd_file DROP CONSTRAINT rrd_file_netboxid_fkey;\nALTER TABLE rrd_file ADD CONSTRAINT rrd_file_netboxid_fkey\n  FOREIGN KEY (netboxid) REFERENCES netbox(netboxid)\n  ON UPDATE CASCADE ON DELETE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0001.sql",
    "content": "CREATE TABLE manage.sensor (\n  sensorid SERIAL PRIMARY KEY,\n  netboxid INT REFERENCES netbox(netboxid) ON DELETE CASCADE ON UPDATE CASCADE,\n  oid VARCHAR,\n  unit_of_measurement VARCHAR,\n  precision integer default 0,\n  data_scale VARCHAR,\n  human_readable VARCHAR,\n  name VARCHAR,\n  internal_name VARCHAR,\n  mib VARCHAR\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0002.sql",
    "content": "CREATE TABLE manage.powersupply_or_fan (\n    powersupplyid SERIAL PRIMARY KEY,\n    netboxid INT REFERENCES netbox(netboxid) ON DELETE CASCADE ON UPDATE CASCADE,\n    deviceid INT REFERENCES device(deviceid) ON DELETE CASCADE ON UPDATE CASCADE,\n    name VARCHAR NOT NULL,\n    model VARCHAR,\n    descr VARCHAR,\n    physical_class VARCHAR not null,\n    downsince TIMESTAMP default null,\n    sensor_oid VARCHAR,\n    up CHAR(1) NOT NULL DEFAULT 'u' CHECK (up='y' OR up='n' or up='u' or up='w')\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0003.sql",
    "content": "INSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('snmpAgentState', 'Tells us whether the SNMP agent on a device is down or up.', 'y');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('snmpAgentState', 'snmpAgentDown', 'SNMP agent is down or unreachable due to misconfiguration.');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('snmpAgentState', 'snmpAgentUp', 'SNMP agent is up.');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0004.sql",
    "content": "-- 'bout time ipdevpoll was known as an eventful subsystem :)\nINSERT INTO subsystem (name) VALUES ('ipdevpoll');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0005.sql",
    "content": "-- Fix sequence owners to account for problems encountered in Django 1.3:\nALTER SEQUENCE eventqvar_id_seq OWNED BY manage.eventqvar.id;\nALTER SEQUENCE accountgroup_accounts_id_seq OWNED BY profiles.accountgroup_accounts.id;\nALTER SEQUENCE accountproperty_id_seq OWNED BY profiles.accountproperty.id;\nALTER SEQUENCE alertsender_id_seq OWNED BY profiles.alertsender.id;\nALTER SEQUENCE alertprofile_id_seq OWNED BY profiles.alertprofile.id;\nALTER SEQUENCE alertaddress_id_seq OWNED BY profiles.alertaddress.id;\nALTER SEQUENCE timeperiod_id_seq OWNED BY profiles.timeperiod.id;\nALTER SEQUENCE filtergroup_group_permission_id_seq OWNED BY profiles.filtergroup_group_permission.id;\nALTER SEQUENCE filtergroup_id_seq OWNED BY profiles.filtergroup.id;\nALTER SEQUENCE filtergroupcontent_id_seq OWNED BY profiles.filtergroupcontent.id;\nALTER SEQUENCE expression_id_seq OWNED BY profiles.expression.id;\nALTER SEQUENCE filter_id_seq OWNED BY profiles.filter.id;\nALTER SEQUENCE operator_operator_id_seq OWNED BY profiles.operator.operator_id;\nALTER SEQUENCE operator_id_seq OWNED BY profiles.operator.id;\nALTER SEQUENCE matchfield_id_seq OWNED BY profiles.matchfield.id;\nALTER SEQUENCE alertsubscription_id_seq OWNED BY profiles.alertsubscription.id;\nALTER SEQUENCE accountnavbar_id_seq OWNED BY profiles.accountnavbar.id;\nALTER SEQUENCE navbarlink_id_seq OWNED BY profiles.navbarlink.id;\nALTER SEQUENCE accountorg_id_seq OWNED BY profiles.accountorg.id;\nALTER SEQUENCE account_id_seq OWNED BY profiles.account.id;\nALTER SEQUENCE accountgroup_id_seq OWNED BY profiles.accountgroup.id;\nALTER SEQUENCE accountgroupprivilege_id_seq OWNED BY profiles.accountgroupprivilege.id;\nALTER SEQUENCE privilege_id_seq OWNED BY profiles.privilege.privilegeid;\nALTER SEQUENCE statuspreference_organization_id_seq OWNED BY profiles.statuspreference_organization.id;\nALTER SEQUENCE statuspreference_id_seq OWNED BY profiles.statuspreference.id;\nALTER SEQUENCE statuspreference_category_id_seq OWNED BY profiles.statuspreference_category.id;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0006.sql",
    "content": "-- Delete unresolved service alerts for services that have been removed\nUPDATE alerthist SET end_time=NOW()\nWHERE\n  eventtypeid='serviceState'\n  AND end_time='infinity'\n  AND subid SIMILAR TO '[0-9]+'\n  AND subid::integer NOT IN (SELECT serviceid FROM service);\n\n-- Ensure any associated service alerts are closed when a service is deleted\nCREATE RULE close_alerthist_services\n  AS ON DELETE TO service DO\n  UPDATE alerthist SET end_time=NOW()\n  WHERE\n    eventtypeid='serviceState'\n    AND end_time='infinity'\n    AND subid = old.serviceid::text;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.10.0007.sql",
    "content": "-- Resolve alert states for deleted netboxes\nUPDATE alerthist\nSET end_time=NOW()\nWHERE netboxid IS NULL AND end_time = 'infinity';\n\n-- Rule to automatically resolve netbox related alert states when netboxes are\n-- deleted.\nCREATE OR REPLACE RULE close_alerthist_netboxes AS ON DELETE TO netbox\n  DO UPDATE alerthist SET end_time=NOW() \n     WHERE netboxid=OLD.netboxid\n       AND end_time='infinity';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0001.sql",
    "content": "-- Modify netboxmac view to include mac addresses collected from physical\n-- interfaces and to run a lot faster.\nCREATE OR REPLACE VIEW manage.netboxmac AS\n\nSELECT DISTINCT ON (mac) netboxid, mac FROM (\n(\n\n -- Attempt to get MAC for netbox' monitored IP\n SELECT DISTINCT netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.ip = netbox.ip AND arp.end_time = 'infinity')\n\n) UNION (\n\n -- Attempt to get MAC for router's interface addresses and HSRP addresses\n SELECT interface.netboxid, arp.mac                      \n FROM arp\n JOIN gwportprefix gwp ON arp.ip = gwp.gwip\n LEFT JOIN (SELECT prefixid, COUNT(*) > 0 AS has_hsrp\n            FROM gwportprefix\n            WHERE hsrp=true\n            GROUP BY prefixid) AS prefix_hsrp_ports ON (gwp.prefixid = prefix_hsrp_ports.prefixid)\n JOIN interface USING (interfaceid)\n WHERE arp.end_time = 'infinity'\n   AND (gwp.hsrp = true OR has_hsrp IS NULL)\n\n) UNION (\n\n -- Get MAC directly from interface physical addresses\n SELECT DISTINCT ON (interface.ifphysaddress) interface.netboxid, interface.ifphysaddress AS mac\n   FROM interface\n   -- physical ethernet interfaces are assumed to be iftype=6\n  WHERE interface.iftype = 6 AND interface.ifphysaddress IS NOT NULL\n\n)\n\n) AS foo\nORDER BY mac, netboxid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0002.sql",
    "content": "-- Change swportblocked primary key to a simple integer, since Django requires it.\nALTER TABLE swportblocked\n  DROP CONSTRAINT swportblocked_pkey;\n\nALTER TABLE swportblocked\n  ADD CONSTRAINT swportblocked_uniq UNIQUE (interfaceid, vlan);\n\nALTER TABLE swportblocked\n  ADD COLUMN swportblockedid SERIAL PRIMARY KEY;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0003.sql",
    "content": "-- swp_netbox replacement table\nCREATE TABLE manage.adjacency_candidate (\n  adjacency_candidateid SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  to_netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  to_interfaceid INT4 REFERENCES interface ON UPDATE CASCADE ON DELETE SET NULL,\n  source VARCHAR NOT NULL,\n  misscnt INT4 NOT NULL DEFAULT 0,\n  UNIQUE(netboxid, interfaceid, to_netboxid, to_interfaceid, source)\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0004.sql",
    "content": "-- Fix improper unique constraint on adjacency_candidate. Unfortunately, the\n-- constraint name is different on different versions of PostgreSQL, so we\n-- might as well drop the table and re-create it.  Don't worry, its contents\n-- will be re-populated as soon as NAV is restarted.\nDROP TABLE adjacency_candidate;\n\nCREATE TABLE manage.adjacency_candidate (\n  adjacency_candidateid SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  to_netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  to_interfaceid INT4 REFERENCES interface ON UPDATE CASCADE ON DELETE SET NULL,\n  source VARCHAR NOT NULL,\n  misscnt INT4 NOT NULL DEFAULT 0,\n  CONSTRAINT adjacency_candidate_uniq UNIQUE(netboxid, interfaceid, to_netboxid, source)\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0005.sql",
    "content": "-- drop the now obsolete swp_netbox table\nDROP TABLE swp_netbox;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0006.sql",
    "content": "-- delete the now obsolete uncrecognizedCDP entries, since getBoksMacs is gone.\nDELETE FROM netboxinfo WHERE key='unrecognizedCDP';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0007.sql",
    "content": "-- new unrecognized neighbors table\nCREATE TABLE manage.unrecognized_neighbor (\n  id SERIAL PRIMARY KEY,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  interfaceid INT4 NOT NULL REFERENCES interface ON UPDATE CASCADE ON DELETE CASCADE,\n  remote_id VARCHAR NOT NULL,\n  remote_name VARCHAR NOT NULL,\n  source VARCHAR NOT NULL,\n  since TIMESTAMP NOT NULL DEFAULT NOW()\n);\n\nCOMMENT ON TABLE unrecognized_neighbor IS 'Unrecognized neighboring devices reported by support discovery protocols';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0008.sql",
    "content": "-- Add newly available status sections to default user's sections.\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (6, 'Thresholds exceeded', 6, 'threshold', 0);\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (7, 'SNMP agents down', 7, 'snmpagent', 0);\nINSERT INTO statuspreference (id, name, position, type, accountid) VALUES (8, 'Links down', 8, 'linkstate', 0);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0009.sql",
    "content": "-- increase the artificial list limits of alert profile filter match fields\nUPDATE matchfield SET list_limit=1000 WHERE list_limit < 1000;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0010.sql",
    "content": "-- Add index to speed up things when looking for open alert states for specific netboxes.\nCREATE INDEX alerthist_open_states_by_eventtype ON alerthist USING btree (netboxid, eventtypeid) WHERE end_time >= 'infinity';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0011.sql",
    "content": "-- Add index to speed up lookups for open cam records for specific netboxes\nCREATE INDEX cam_open_records_by_netbox ON cam USING btree (netboxid) WHERE end_time >= 'infinity' OR misscnt >= 0;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0012.sql",
    "content": "-- force re-collection of module/serial number data to fix data mangled by LP#1034864\nDELETE FROM netboxinfo WHERE key='poll_times' AND var='modules';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.11.0013.sql",
    "content": "-- force re-collection of cdp/lldp data to fix data mangled by LP#1037059\n-- but only on installs that may be affected by the bug\n\nDELETE FROM netboxinfo\nWHERE key='poll_times' AND var IN ('cdp', 'lldp') AND\n      EXISTS (SELECT * FROM gwportprefix WHERE gwip='0.0.0.0');\n\nDELETE FROM adjacency_candidate\nWHERE source IN  ('cdp', 'lldp') AND\n      EXISTS (SELECT * FROM gwportprefix WHERE gwip='0.0.0.0');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0001.sql",
    "content": "-- netmap_view\nCREATE TABLE profiles.netmap_view (\n  viewid SERIAL,\n  owner INT4 NOT NULL REFERENCES account ON UPDATE CASCADE ON DELETE CASCADE,\n  title VARCHAR NOT NULL,\n  link_types VARCHAR NOT NULL,\n  zoom VARCHAR NOT NULL,\n  is_public BOOLEAN NOT NULL DEFAULT FALSE,\n  last_modified TIMESTAMP NOT NULL DEFAULT NOW(),\n  PRIMARY KEY (viewid)\n);\nCOMMENT ON TABLE netmap_view IS 'Stored views with settings for NetMap';\n\nCREATE TABLE profiles.netmap_view_categories (\n  id SERIAL,\n  viewid INT4 CONSTRAINT netmapview_fkey REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  catid VARCHAR(8) CONSTRAINT netmapview_category_fkey REFERENCES cat ON UPDATE CASCADE ON DELETE CASCADE,\n  PRIMARY KEY (viewid, catid)\n);\n\nCREATE TABLE profiles.netmap_view_nodeposition (\n  id SERIAL,\n  viewid INT4 NOT NULL REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE,\n  x INT4 NOT NULL,\n  y INT4 NOT NULL,\n  PRIMARY KEY (viewid, netboxid)\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0002.sql",
    "content": "TRUNCATE TABLE netmap_view CASCADE;\nALTER TABLE netmap_view ADD COLUMN topology INT4 NOT NULL;\nALTER TABLE netmap_view DROP COLUMN link_types;"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0003.sql",
    "content": "ALTER TABLE netmap_view ADD COLUMN display_elinks BOOLEAN NOT NULL DEFAULT false;\nALTER TABLE netmap_view ADD COLUMN display_orphans BOOLEAN NOT NULL DEFAULT false;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0004.sql",
    "content": "ALTER TABLE netmap_view ADD COLUMN description TEXT DEFAULT null;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0005.sql",
    "content": "-- netmap_view_defaultview\nCREATE TABLE profiles.netmap_view_defaultview (\n  id SERIAL,\n  viewid INT4 NOT NULL REFERENCES netmap_view ON UPDATE CASCADE ON DELETE CASCADE,\n  ownerid INT4 NOT NULL REFERENCES account ON UPDATE CASCADE ON DELETE CASCADE,\n  PRIMARY KEY (viewid, ownerid)\n);\nCOMMENT ON TABLE netmap_view_defaultview IS 'Stores default views for users in Netmap';"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0025.sql",
    "content": "-- Rename hsrp to virtual to indicate that \"some router redundancy protocol\n-- tells us this is a virtual router address\"\nALTER TABLE gwportprefix RENAME COLUMN hsrp TO virtual;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0026.sql",
    "content": "-- Create a log table for ipdevpoll job runs\n\nCREATE TABLE manage.ipdevpoll_job_log (\n  id BIGSERIAL NOT NULL PRIMARY KEY,\n  netboxid INTEGER NOT NULL,\n  job_name VARCHAR NOT NULL,\n  end_time TIMESTAMP NOT NULL,\n  duration DOUBLE PRECISION,\n  success BOOLEAN NOT NULL,\n  \"interval\" INTEGER,\n\n  CONSTRAINT ipdevpoll_job_log_netbox_fkey FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE\n);\n\nCREATE INDEX ipdevpoll_job_log_netboxjob_btree\n  ON ipdevpoll_job_log (netboxid, job_name);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0027.sql",
    "content": "-- Never keep more than 100 ipdevpoll_job_log entries per job per netbox\nCREATE OR REPLACE FUNCTION trim_old_ipdevpoll_job_log_entries()\nRETURNS TRIGGER AS '\n    BEGIN\n        DELETE FROM ipdevpoll_job_log\n        WHERE id IN (SELECT id FROM ipdevpoll_job_log\n                     WHERE job_name=NEW.job_name AND netboxid=NEW.netboxid\n                     ORDER BY end_time ASC\n                     OFFSET 100);\n        RETURN NULL;\n    END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_trim_old_ipdevpoll_job_log_entries_on_insert\n    AFTER INSERT ON ipdevpoll_job_log\n    FOR EACH ROW\n    EXECUTE PROCEDURE trim_old_ipdevpoll_job_log_entries();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0028.sql",
    "content": "-- remove disused position table used by the deprecated netmap applet\nDROP TABLE manage.netmap_position;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0050.sql",
    "content": "-- Grant web access to unauthorized ajax requests\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 2, 2, '^/ajax/open/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid=2 AND privilegeid=2 AND target='^/ajax/open/?'\n  )\n;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0051.sql",
    "content": "-- Add column for storing rrd-file category\nALTER TABLE rrd_file ADD category VARCHAR\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0052.sql",
    "content": "-- Insert oids used to check for ipv6 interface counters\nINSERT INTO snmpoid (oidkey, snmpoid, oidsource, mib)\n  SELECT 'ipIfStatsHCInOctets.ipv4', '1.3.6.1.2.1.4.31.3.1.6.1', 'Cricket', 'IP-MIB' WHERE NOT EXISTS (\n    SELECT * FROM snmpoid WHERE oidkey = 'ipIfStatsHCInOctets.ipv4'\n  )\n;\n\nINSERT INTO snmpoid (oidkey, snmpoid, oidsource, mib)\n  SELECT 'ipIfStatsHCInOctets.ipv6', '1.3.6.1.2.1.4.31.3.1.6.2', 'Cricket', 'IP-MIB' WHERE NOT EXISTS (\n    SELECT * FROM snmpoid WHERE oidkey = 'ipIfStatsHCInOctets.ipv6'\n  )\n;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0053.sql",
    "content": "-- Grant web access to osm map redirects\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 2, 2, '^/info/osm_map_redirect/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid=2 AND privilegeid=2 AND target = '^/info/osm_map_redirect/?'\n  )\n;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0054.sql",
    "content": "-- Grant web access to /info for authenticated users\nUPDATE AccountGroupPrivilege SET\n        target = '^/(report|status|alertprofiles|machinetracker|browse|preferences|cricket|stats|ipinfo|l2trace|logger|ipdevinfo|geomap|info|netmap)/?'\n  WHERE target = '^/(report|status|alertprofiles|machinetracker|browse|preferences|cricket|stats|ipinfo|l2trace|logger|ipdevinfo|geomap)/?'\n;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0100.sql",
    "content": "-- Fix broken log-trimming trigger (LP#1053866)\nCREATE OR REPLACE FUNCTION trim_old_ipdevpoll_job_log_entries()\nRETURNS TRIGGER AS '\n    BEGIN\n        DELETE FROM ipdevpoll_job_log\n        WHERE id IN (SELECT id FROM ipdevpoll_job_log\n                     WHERE job_name=NEW.job_name AND netboxid=NEW.netboxid\n                     ORDER BY end_time DESC\n                     OFFSET 100);\n        RETURN NULL;\n    END;\n    ' language 'plpgsql';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0101.sql",
    "content": "UPDATE snmpoid SET oidsource = 'IP-MIB' WHERE oidkey ~* 'ipIfStatsHCInOctets';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0102.sql",
    "content": "-- automatically close snmpAgentStates when community is removed.\n\nCREATE OR REPLACE FUNCTION close_snmpagentstates_on_community_clear()\nRETURNS TRIGGER AS E'\n    BEGIN\n        IF COALESCE(OLD.ro, \\'\\') IS DISTINCT FROM COALESCE(NEW.ro, \\'\\')\n           AND COALESCE(NEW.ro, \\'\\') = \\'\\' THEN\n            UPDATE alerthist\n            SET end_time=NOW()\n            WHERE netboxid=NEW.netboxid\n              AND eventtypeid=\\'snmpAgentState\\'\n              AND end_time >= \\'infinity\\';\n        END IF;\n        RETURN NULL;\n    END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_close_snmpagentstates_on_community_clear\n    AFTER UPDATE ON netbox\n    FOR EACH ROW\n    EXECUTE PROCEDURE close_snmpagentstates_on_community_clear();\n\n-- also close any currently wrongfully open SNMP states\nUPDATE alerthist\nSET end_time=NOW()\nFROM netbox\nWHERE eventtypeid='snmpAgentState'\n  AND end_time >= 'infinity'\n  AND alerthist.netboxid = netbox.netboxid\n  AND COALESCE(netbox.ro, '') = '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0103.sql",
    "content": "INSERT INTO subsystem VALUES ('powersupplywatch');"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0104.sql",
    "content": "-- create new event and alert types for fan and psu alerts\n\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('psuState', 'Reports state changes in power supply units', 'y');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('psuState', 'psuNotOK', 'A PSU has entered a non-OK state');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('psuState', 'psuOK', 'A PSU has returned to an OK state');\n\n\nINSERT INTO eventtype (eventtypeid, eventtypedesc, stateful) VALUES\n  ('fanState', 'Reports state changes in fan units', 'y');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('fanState', 'fanNotOK', 'A fan unit has entered a non-OK state');\n\nINSERT INTO alerttype (eventtypeid, alerttype, alerttypedesc) VALUES\n  ('fanState', 'fanOK', 'A fan unit has returned to an OK state');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0105.sql",
    "content": "-- rename logging jobs to ip2mac in ipdevpoll job log table\nUPDATE ipdevpoll_job_log SET job_name = 'ip2mac' WHERE job_name = 'logging';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0106.sql",
    "content": "-- Add unit column to snmpoid table for storing of units\nALTER TABLE snmpoid ADD unit VARCHAR;\n\n\n-- Insert some default units\nUPDATE snmpoid SET unit = 'Mbit/s' WHERE oidkey = 'c1900Bandwidth';\nUPDATE snmpoid SET unit = 'Mbit/s' WHERE oidkey = 'c1900BandwidthMax';\nUPDATE snmpoid SET unit = 'Mbit/s' WHERE oidkey = 'c2900Bandwidth';\nUPDATE snmpoid SET unit = 'Mbit/s' WHERE oidkey = 'c5000Bandwidth';\nUPDATE snmpoid SET unit = 'Mbit/s' WHERE oidkey = 'c5000BandwidthMax';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'cpu1min';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'cpu5min';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'hpcpu';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'hpmem5minFree';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'hpmem5minUsed';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'mem5minFree';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'mem5minUsed';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'ucd_cpuIdle';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'ucd_cpuSystem';\nUPDATE snmpoid SET unit = '%' WHERE oidkey = 'ucd_cpuUser';\nUPDATE snmpoid SET unit = 'load' WHERE oidkey = 'ucd_load15min';\nUPDATE snmpoid SET unit = 'load' WHERE oidkey = 'ucd_load1min';\nUPDATE snmpoid SET unit = 'load' WHERE oidkey = 'ucd_load5min';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ucd_memrealAvail';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ucd_memswapAvail';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ucd_memtotalAvail';\nUPDATE snmpoid SET unit = 'timeticks' WHERE oidkey = 'sysUpTime';\n\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ipIfStatsHCInOctets.ipv6';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ipIfStatsHCInOctets.ipv4';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ifHCInOctets';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifHCInUcastPkts';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ifHCOutOctets';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifHCOutUcastPkts';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifInDiscards';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifInErrors';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifInNUcastPkts';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ifInOctets';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifInUcastPkts';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifInUnknownProtos';\nUPDATE snmpoid SET unit = 'timeticks' WHERE oidkey = 'ifLastChange';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifOutDiscards';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifOutErrors';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifOutNUcastPkts';\nUPDATE snmpoid SET unit = 'bytes' WHERE oidkey = 'ifOutOctets';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifOutQLen';\nUPDATE snmpoid SET unit = 'packets' WHERE oidkey = 'ifOutUcastPkts';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0107.sql",
    "content": "-- automatically close thresholdState when threshold in rrd_datasource is removed.\nCREATE OR REPLACE FUNCTION close_thresholdstate_on_threshold_delete()\nRETURNS TRIGGER AS E'\n  BEGIN\n    IF TG_OP = \\'DELETE\\' THEN\n      UPDATE alerthist\n        SET end_time = NOW()\n          WHERE subid = CAST(OLD.rrd_datasourceid AS text)\n            AND eventtypeid = \\'thresholdState\\'\n              AND end_time >= \\'infinity\\';\n    END IF;\n    IF TG_OP = \\'UPDATE\\' THEN\n        IF COALESCE(OLD.threshold, \\'\\') IS \n            DISTINCT FROM COALESCE(NEW.threshold, \\'\\')\n                AND COALESCE(NEW.threshold, \\'\\') = \\'\\' THEN\n            UPDATE alerthist\n                SET end_time = NOW()\n                    WHERE subid = CAST(NEW.rrd_datasourceid AS text)\n                        AND eventtypeid = \\'thresholdState\\'\n                            AND end_time >= \\'infinity\\';\n        END IF;\n    END IF;\n    RETURN NULL;\n  END;\n  'language 'plpgsql';\n\nCREATE TRIGGER trig_close_thresholdstate_on_threshold_delete\n    AFTER UPDATE OR DELETE ON rrd_datasource\n    FOR EACH ROW\n    EXECUTE PROCEDURE close_thresholdstate_on_threshold_delete();\n\n-- also close any currently wrongfully open threshold states\nUPDATE alerthist\n    SET end_time = NOW()\n    FROM rrd_datasource\n        WHERE eventtypeid = 'thresholdState'\n            AND end_time >= 'infinity'\n            AND subid NOT IN \n                (SELECT CAST(rrd_datasource.rrd_datasourceid AS text)\n                    FROM rrd_datasource);\n\nUPDATE alerthist\n    SET end_time = NOW()\n    FROM rrd_datasource\n        WHERE eventtypeid = 'thresholdState'\n            AND end_time >= 'infinity'\n            AND alerthist.subid = CAST(rrd_datasource.rrd_datasourceid AS text)\n            AND COALESCE(rrd_datasource.threshold, '') = '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0110.sql",
    "content": "-- ensure CDP records are collected freshly after upgrade,\n-- to quickly facilitate the fix for LP#1068097\nDELETE FROM netboxinfo WHERE key='poll_times' AND var='cdp';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.12.0111.sql",
    "content": "-- Alter unit on octets\n\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ipIfStatsHCInOctets.ipv6';\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ipIfStatsHCInOctets.ipv4';\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ifHCInOctets';\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ifHCOutOctets';\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ifInOctets';\nUPDATE snmpoid SET unit = 'bytes/s' WHERE oidkey = 'ifOutOctets';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0001.sql",
    "content": "-- Added because macwatch may use mac-address prefixes\nCREATE TABLE manage.macwatch_match(\n  id SERIAL PRIMARY KEY,\n  macwatch INT NOT NULL REFERENCES macwatch(id) ON DELETE CASCADE ON UPDATE CASCADE,\n  cam INT NOT NULL REFERENCES cam(camid) ON DELETE CASCADE ON UPDATE CASCADE,\n  posted TIMESTAMP DEFAULT NOW()\n);\n\nINSERT INTO macwatch_match (macwatch, cam, posted)\n  SELECT id, camid, posted\n    FROM macwatch\n  WHERE camid IS NOT NULL;\n\nALTER TABLE macwatch ADD COLUMN prefix_length INT DEFAULT NULL;\nALTER TABLE macwatch ADD CONSTRAINT macwatch_unique_mac UNIQUE (mac);\nALTER TABLE macwatch DROP COLUMN camid;\nALTER TABLE macwatch DROP COLUMN posted;\nALTER TABLE macwatch DROP COLUMN login;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0002.sql",
    "content": "-- Notify the eventEngine immediately as new events are inserted in the queue\nCREATE OR REPLACE RULE eventq_notify AS ON INSERT TO eventq DO ALSO NOTIFY new_event;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0010.sql",
    "content": "-- Create index on foreign key\nCREATE INDEX rrd_datasource_rrd_fileid_btree ON rrd_datasource(rrd_fileid);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0011.sql",
    "content": "-- remove useless cam constraints/indexes to prevent index bloat\n-- On some installs, the index may already have been manually removed. \"DROP\n-- CONSTRAINT IF EXISTS\" wasn't introduced until PostgreSQL 9,\n-- so we make a conditional drop function to accomplish this without errors\n-- here:\n\nCREATE OR REPLACE FUNCTION manage.drop_constraint(tbl_schema VARCHAR, tbl_name VARCHAR, const_name VARCHAR) RETURNS void AS $$\nDECLARE\n    exec_string TEXT;\nBEGIN\n    exec_string := 'ALTER TABLE ';\n    IF tbl_schema != NULL THEN\n        exec_string := exec_string || quote_ident(tbl_schema) || '.';\n    END IF;\n    exec_string := exec_string || quote_ident(tb_name)\n        || ' DROP CONSTRAINT '\n        || quote_ident(const_name);\n    EXECUTE exec_string;\nEXCEPTION\n    WHEN OTHERS THEN\n        NULL;\nEND;\n$$ LANGUAGE plpgsql;\n\nSELECT drop_constraint('manage', 'cam', 'cam_netboxid_key');\nDROP INDEX IF EXISTS cam_start_time_btree;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0012.sql",
    "content": "-- reset any invalid netbox.up values (those that don't correspond with any\n-- unresolved alerthist states - ref: LP#1103929)\n\nUPDATE netbox\nSET up='y'\nWHERE\n  netboxid NOT IN (SELECT netboxid\n                   FROM alerthist\n                   WHERE\n                     eventtypeid = 'boxState'\n                     AND end_time >= 'infinity')\n  AND up <> 'y';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0013.sql",
    "content": "-- Delete all tuples related to collect_active_ip because trigger did not exist in early beta\n-- The data will be restored on next run of collect_active_ip\nDELETE FROM rrd_file\n  WHERE category = 'activeip' AND key = 'prefix';\n\n-- Create trigger to delete rrd_file tuples regarding deleted prefix\nCREATE OR REPLACE RULE prefix_on_delete_do_clean_rrd_file AS ON DELETE TO prefix\n  DO DELETE FROM rrd_file\n      WHERE category = 'activeip'\n          AND key = 'prefix' AND CAST(value AS int) = OLD.prefixid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0014.sql",
    "content": "-- close old, invalid moduleState alerts that may be lingering from NAV\n-- versions prior to 3.6 (!)\nUPDATE alerthist SET end_time=now()\nWHERE\n  eventtypeid='moduleState'\n  AND end_time >= 'infinity'\n  AND COALESCE(subid, '') = '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.13.0015.sql",
    "content": "-- Fix uniqueness on quarantine vlans\n\nDELETE FROM quarantine_vlans WHERE quarantineid in (\n  SELECT q2.quarantineid\n  FROM quarantine_vlans q1\n  JOIN quarantine_vlans q2\n    ON (q1.vlan = q2.vlan AND q1.quarantineid < q2.quarantineid)\n    ORDER BY q1.quarantineid);\n\nALTER TABLE quarantine_vlans ADD CONSTRAINT quarantine_vlan_unique UNIQUE (vlan);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0001.sql",
    "content": "-- Create table for netbios names\n\nCREATE TABLE manage.netbios (\n  netbiosid SERIAL PRIMARY KEY,\n  ip INET NOT NULL,\n  mac MACADDR NOT NULL,\n  name VARCHAR NOT NULL,\n  server VARCHAR NOT NULL,\n  username VARCHAR NOT NULL,\n  start_time TIMESTAMP NOT NULL,\n  end_time TIMESTAMP NOT NULL DEFAULT 'infinity'\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0002.sql",
    "content": "-- Use the migrate_tools.py script to fill the tools table with tools from the tool files\nCREATE TABLE profiles.tool(\n  toolid SERIAL PRIMARY KEY,\n  toolname VARCHAR NOT NULL UNIQUE,\n  uri VARCHAR NOT NULL,\n  icon VARCHAR,\n  description VARCHAR,\n  priority integer DEFAULT 0\n);\n\nCREATE TABLE profiles.accounttool(\n  accounttoolid SERIAL PRIMARY KEY,\n  toolid INTEGER NOT NULL REFERENCES tool ON UPDATE CASCADE ON DELETE CASCADE,\n  accountid INTEGER NOT NULL REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE,\n  display BOOLEAN DEFAULT TRUE,\n  priority INTEGER DEFAULT 0\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0003.sql",
    "content": "-- create accounttool table for storing personal tool setup\nDROP TABLE IF EXISTS accounttool;\nDROP TABLE IF EXISTS tool;\n\nCREATE TABLE profiles.accounttool(\n  account_tool_id SERIAL PRIMARY KEY,\n  toolname VARCHAR,\n  accountid INTEGER NOT NULL REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE,\n  display BOOLEAN DEFAULT TRUE,\n  priority INTEGER DEFAULT 0\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0004.sql",
    "content": "-- Make MAC addresses optional for netbios entries\nALTER TABLE netbios ALTER COLUMN mac DROP NOT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0005.sql",
    "content": "-- fix view that gives wrong ip count in VRRP/HSRP environments\nCREATE OR REPLACE VIEW manage.prefix_active_ip_cnt AS\n(SELECT prefix.prefixid, COUNT(DISTINCT arp.ip) AS active_ip_cnt\n FROM prefix\n LEFT JOIN arp ON arp.ip << prefix.netaddr\n WHERE arp.end_time = 'infinity'\n GROUP BY prefix.prefixid);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0006.sql",
    "content": "-- fix wrong categories in rrd_file table\nUPDATE rrd_file SET category='port-counters'\n  WHERE category IN ('router-interfaces-counters', 'switch-port-counters');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.14.0007.sql",
    "content": "-- Create field for storing textual representation of the interface when detaining\n\nALTER table arnold.identity ADD textual_interface VARCHAR DEFAULT '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0001.sql",
    "content": "-- Django database-backed sessions are now being used by NAV.\nCREATE TABLE profiles.django_session (\n    \"session_key\" varchar(40) NOT NULL PRIMARY KEY,\n    \"session_data\" text NOT NULL,\n    \"expire_date\" timestamp with time zone NOT NULL\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0002.sql",
    "content": "-- Create table for images\n\nCREATE TABLE manage.image (\n  imageid SERIAL PRIMARY KEY,\n  roomid VARCHAR REFERENCES room(roomid) NOT NULL,\n  title VARCHAR NOT NULL,\n  path VARCHAR NOT NULL,\n  name VARCHAR NOT NULL,\n  created TIMESTAMP NOT NULL,\n  uploader INT REFERENCES account(id),\n  priority INT\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0003.sql",
    "content": "-- Create a table for interface stacking information\nCREATE TABLE manage.interface_stack (\n  id SERIAL PRIMARY KEY, -- dummy primary key for Django\n  higher INTEGER REFERENCES interface(interfaceid),\n  lower INTEGER REFERENCES interface(interfaceid),\n  UNIQUE (higher, lower)\n);\n\nCREATE INDEX interface_stack_higher ON interface_stack (higher);\nCREATE INDEX interface_stack_lower ON interface_stack (lower);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0004.sql",
    "content": "-- Do the needed changes to migrate subcat to netboxgroup and remove\n-- category limitation.\n\nALTER TABLE subcat DROP catid;\nALTER TABLE subcat RENAME TO netboxgroup;\nALTER TABLE netboxgroup RENAME subcatid TO netboxgroupid;\n\nUPDATE matchfield SET\n  name='Group',\n  value_id='netboxgroup.netboxgroupid',\n  value_name='netboxgroup.descr',\n  value_sort='netboxgroup.descr',\n  description='Group: netboxes may belong to a group that is independent of type and category'\n  WHERE id=14;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0050.sql",
    "content": "-- Map topology id to match OSI layer number\nUPDATE profiles.netmap_view SET topology = 3 where topology = 2;\nUPDATE profiles.netmap_view SET topology = 2 where topology = 1;"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0070.sql",
    "content": "-- Create basic token storage for api tokens\n\nCREATE TABLE manage.apitoken (\n  id SERIAL PRIMARY KEY,\n  token VARCHAR not null,\n  expires TIMESTAMP not null,\n  client INT REFERENCES profiles.account(id),\n  scope INT DEFAULT 0\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0071.sql",
    "content": "-- Create index for ip column on manage.netbios to make lookups faster\n\nCREATE INDEX netbios_ip ON manage.netbios (ip);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0072.sql",
    "content": "-- Fix cascading deletes in interface_stack foreign keys (LP#1246226)\n\nALTER TABLE interface_stack DROP CONSTRAINT interface_stack_higher_fkey;\nALTER TABLE interface_stack ADD CONSTRAINT interface_stack_higher_fkey\n  FOREIGN KEY (higher)\n  REFERENCES interface(interfaceid)\n  ON DELETE CASCADE ON UPDATE CASCADE;\n\nALTER TABLE interface_stack DROP CONSTRAINT interface_stack_lower_fkey;\nALTER TABLE interface_stack ADD CONSTRAINT interface_stack_lower_fkey\n  FOREIGN KEY (lower)\n  REFERENCES interface(interfaceid)\n  ON DELETE CASCADE ON UPDATE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0100.sql",
    "content": "-- Create table for storing navlet information for a user\n\nCREATE TABLE IF NOT EXISTS profiles.account_navlet (\n  id SERIAL PRIMARY KEY,\n  navlet VARCHAR NOT NULL,\n  account INT REFERENCES profiles.account(id),\n  col INT,\n  displayorder INT NOT NULL,\n  preferences VARCHAR\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0101.sql",
    "content": "---\n-- Give everyone access to navlets\n---\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 2, 2, '^/navlets/.*' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid = 2 AND privilegeid = 2 AND target = '^/navlets/.*'\n  );\n\n\n---\n-- Insert default navlets for every existing user\n---\nCREATE OR REPLACE FUNCTION insert_default_navlets_for_existing_users() RETURNS void AS $$\nDECLARE\n  account RECORD;\nBEGIN\n  FOR account IN SELECT * FROM account LOOP\n    RAISE NOTICE 'Adding default navlets for %s', quote_ident(account.login);\n    INSERT INTO account_navlet (navlet, account, displayorder, col) VALUES\n      ('nav.web.navlets.welcome.WelcomeNavlet', account.id, 0, 1),\n      ('nav.web.navlets.linklist.LinkListNavlet', account.id, 0, 2),\n      ('nav.web.navlets.messages.MessagesNavlet', account.id, 1, 2);\n  END LOOP;\nEND;\n$$ LANGUAGE plpgsql;\n\nSELECT insert_default_navlets_for_existing_users();\n\n\n---\n-- Create trigger that inserts default navlets for new users\n---\nCREATE OR REPLACE FUNCTION insert_default_navlets_for_new_users() RETURNS trigger AS $$\n    BEGIN\n      INSERT INTO account_navlet (account, navlet, displayorder, col, preferences)\n        SELECT NEW.id, navlet, displayorder, col, preferences FROM account_navlet WHERE account=0;\n      RETURN NULL;\n    END\n$$ LANGUAGE plpgsql;\n\nCREATE TRIGGER add_default_navlets_on_account_create AFTER INSERT ON account\n  FOR EACH ROW\n  EXECUTE PROCEDURE insert_default_navlets_for_new_users();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0102.sql",
    "content": "-- clean up remnants of LP#1269714\n-- (Physically replacing a device may cause all further SNMP polling of it to\n--  stop)\n\nUPDATE alerthist\nSET end_time=NOW()\nWHERE alerthistid IN (SELECT alerthistid\n                      FROM alerthist ah\n                      JOIN netbox n USING (netboxid)\n                      WHERE eventtypeid = 'snmpAgentState'\n                            AND end_time >= 'infinity'\n                            AND ah.deviceid <> n.deviceid);\n\nINSERT INTO vendor (\n  SELECT 'unknown' AS vendorid\n  WHERE NOT EXISTS (\n    SELECT vendorid FROM vendor WHERE vendorid='unknown'));\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0103.sql",
    "content": "-- Fix maintenance tasks that are open \"until the end of time\" (LP#1273706)\nUPDATE maint_task\nSET maint_end = 'infinity'\nWHERE extract(year from maint_end) = 9999;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0104.sql",
    "content": "-- Modify netboxmac view to exclude invalid MAC addresses\nCREATE OR REPLACE VIEW manage.netboxmac AS\n\nSELECT DISTINCT ON (mac) netboxid, mac FROM (\n(\n\n -- Attempt to get MAC for netbox' monitored IP\n SELECT DISTINCT netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.ip = netbox.ip AND arp.end_time = 'infinity')\n\n) UNION (\n\n -- Attempt to get MAC for router's interface addresses and virtual addresses\n SELECT interface.netboxid, arp.mac\n FROM arp\n JOIN gwportprefix gwp ON arp.ip = gwp.gwip\n LEFT JOIN (SELECT prefixid, COUNT(*) > 0 AS has_virtual\n            FROM gwportprefix\n            WHERE virtual=true\n            GROUP BY prefixid) AS prefix_virtual_ports ON (gwp.prefixid = prefix_virtual_ports.prefixid)\n JOIN interface USING (interfaceid)\n WHERE arp.end_time = 'infinity'\n   AND (gwp.virtual = true OR has_virtual IS NULL)\n\n) UNION (\n\n -- Get MAC directly from interface physical addresses\n SELECT DISTINCT ON (interface.ifphysaddress) interface.netboxid, interface.ifphysaddress AS mac\n   FROM interface\n   -- physical ethernet interfaces are assumed to be iftype=6\n  WHERE interface.iftype = 6 AND interface.ifphysaddress IS NOT NULL\n\n)\n\n) AS foo\nWHERE mac <> '00:00:00:00:00:00' -- exclude invalid MACs\nORDER BY mac, netboxid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0105.sql",
    "content": "-- Fix cascading deletes in accounttool foreign keys (LP#1293621)\n\nALTER TABLE accounttool DROP CONSTRAINT accounttool_accountid_fkey;\nALTER TABLE accounttool ADD CONSTRAINT accounttool_accountid_fkey\n  FOREIGN KEY (accountid)\n  REFERENCES account(id)\n  ON DELETE CASCADE ON UPDATE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0200.sql",
    "content": "-- force reset of all poll times due to problems mentioned in LP#1301343\nDELETE FROM netboxinfo WHERE key='poll_times';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.03.15.0201.sql",
    "content": "-- For some reason, the subid 0 has been used for years when posting boxState\n-- events. This makes no sense, and complicates matching of events to form\n-- coherent states. Remove usages of this subid.\nUPDATE eventq SET subid = NULL WHERE eventtypeid = 'boxState' AND subid = '0';\nUPDATE alertq SET subid = NULL WHERE eventtypeid = 'boxState' AND subid = '0';\nUPDATE alerthist SET subid = NULL WHERE eventtypeid = 'boxState' AND subid = '0';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0001.sql",
    "content": "-- Remove profiling log entries, the job no longer exists\nDELETE FROM ipdevpoll_job_log WHERE job_name='profiling';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0002.sql",
    "content": "CREATE TABLE manage.thresholdrule (\n  id SERIAL PRIMARY KEY,\n  target VARCHAR NOT NULL,\n  alert VARCHAR NOT NULL,\n  clear VARCHAR,\n  raw BOOLEAN NOT NULL DEFAULT FALSE,\n  period VARCHAR,\n  description VARCHAR,\n  creator_id INTEGER DEFAULT NULL,\n  created TIMESTAMP DEFAULT NOW(),\n\n  CONSTRAINT thresholdrule_creator_fkey FOREIGN KEY (creator_id)\n             REFERENCES profiles.account (id)\n             ON UPDATE CASCADE ON DELETE SET NULL\n\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0003.sql",
    "content": "-- automatically close thresholdState when threshold rules are removed\nCREATE OR REPLACE FUNCTION close_thresholdstate_on_thresholdrule_delete()\nRETURNS TRIGGER AS $$\n  BEGIN\n    IF TG_OP = 'DELETE'\n      OR (TG_OP = 'UPDATE' AND\n          (OLD.alert <> NEW.alert OR OLD.target <> NEW.target))\n    THEN\n      UPDATE alerthist\n      SET end_time = NOW()\n      WHERE subid LIKE (CAST(OLD.id AS text) || ':%')\n            AND eventtypeid = 'thresholdState'\n            AND end_time >= 'infinity';\n    END IF;\n    RETURN NULL;\n  END;\n$$ language 'plpgsql';\n\nCREATE TRIGGER trig_close_thresholdstate_on_thresholdrule_delete\n    AFTER UPDATE OR DELETE ON manage.thresholdrule\n    FOR EACH ROW\n    EXECUTE PROCEDURE close_thresholdstate_on_thresholdrule_delete();\n\n-- also close any currently open thresholdStates from old NAV versions, since\n-- these cannot be evaluated any more.\nUPDATE alerthist\nSET end_time = NOW()\nWHERE eventtypeid = 'thresholdState' AND end_time >= 'infinity';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0004.sql",
    "content": "-- period should be a number of seconds instead, to avoid ambiguities in\n-- parsing\nALTER TABLE thresholdrule DROP COLUMN period;\nALTER TABLE thresholdrule ADD COLUMN period INTEGER DEFAULT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0010.sql",
    "content": "-- Add FeedReader widget with blog.nav.uninett.no/rss as feed to all users.\n\nDO $$DECLARE account RECORD;\nBEGIN\n  FOR account IN SELECT * FROM account LOOP\n    INSERT INTO account_navlet (navlet, account, col, displayorder, preferences) VALUES\n    ('nav.web.navlets.feedreader.FeedReaderNavlet', account.id, 2, 0, '(dp0\nS''blogurl''\np1\nVhttp://blog.nav.uninett.no/rss\np2\nsS''maxposts''\np3\nV5\np4\nsS''refresh_interval''\np5\nI600000\ns.');\n  END LOOP;\nEND$$;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0011.sql",
    "content": "-- Clean up scale/precision problems of already known APC sensors (LP#1270095)\n\nUPDATE sensor\nSET precision=1, data_scale=NULL\nWHERE mib = 'PowerNet-MIB'\n      AND data_scale = 'deci';\n\nUPDATE sensor\nSET precision=2, data_scale=NULL\nWHERE mib = 'PowerNet-MIB'\n      AND data_scale = 'centi';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0012.sql",
    "content": "-- Due to changes in requirements, remove all feedreaders with nav blog as source\nDELETE FROM account_navlet WHERE preferences LIKE '%http://blog.nav.uninett.no/rss%';\n\n-- Add new blog navlet to all users. Exclude those that have already activated it.\nDO $$DECLARE account_record RECORD;\nBEGIN\n  FOR account_record IN SELECT * FROM account WHERE id NOT IN (SELECT account FROM account_navlet WHERE navlet = 'nav.web.navlets.navblog.NavBlogNavlet') LOOP\n    INSERT INTO account_navlet (navlet, account, col, displayorder, preferences) VALUES\n    ('nav.web.navlets.navblog.NavBlogNavlet', account_record.id, 2, 0, '(dp0\nS''refresh_interval''\np1\nI600000\ns.');\n  END LOOP;\nEND$$;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0013.sql",
    "content": "--\n-- Drop the accountnavbar table, we don't need it anymore\n--\nDROP TABLE accountnavbar;\n\n\n--\n-- Delete all link rows with initial links. They are no longer needed.\n--\nDELETE FROM navbarlink WHERE name='Preferences' AND uri='/preferences';\nDELETE FROM navbarlink WHERE name='Toolbox' AND uri='/toolbox';\nDELETE FROM navbarlink WHERE name='Useradmin' AND uri='/useradmin/';\nDELETE FROM navbarlink WHERE name='Userinfo' AND uri='/userinfo/';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0014.sql",
    "content": "--\n-- Url to info has changed to search. Replace privileges for that\n--\n\nUPDATE accountgroupprivilege SET target = '^/search/osm_map_redirect/?' WHERE target = '^/info/osm_map_redirect/?';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0015.sql",
    "content": "-- Create two new main device categories\nINSERT INTO manage.cat (catid, descr, req_snmp) VALUES ('ENV', 'Environmental probes', true);\nINSERT INTO manage.cat (catid, descr, req_snmp) VALUES ('POWER', 'Power distribution equipment', true);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0016.sql",
    "content": "-- Fix cascading deletes in account_navlet foreign keys (LP#1293616)\n\nALTER TABLE account_navlet DROP CONSTRAINT account_navlet_account_fkey;\nALTER TABLE account_navlet ADD CONSTRAINT account_navlet_account_fkey\n  FOREIGN KEY (account)\n  REFERENCES account(id)\n  ON DELETE CASCADE ON UPDATE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0017.sql",
    "content": "---\n-- Delete all widgets from all users\n---\nDELETE FROM account_navlet;\n\n---\n-- Insert default widgets for every existing user\n---\nCREATE OR REPLACE FUNCTION insert_default_navlets_for_existing_users() RETURNS void AS $$\nDECLARE\n  account RECORD;\nBEGIN\n  FOR account IN SELECT * FROM account LOOP\n    RAISE NOTICE 'Adding default navlets for %s', quote_ident(account.login);\n    INSERT INTO account_navlet (navlet, account, displayorder, col) VALUES\n      ('nav.web.navlets.gettingstarted.GettingStartedWidget', account.id, 0, 1),\n      ('nav.web.navlets.status.StatusNavlet', account.id, 1, 1),\n      ('nav.web.navlets.messages.MessagesNavlet', account.id, 2, 1),\n      ('nav.web.navlets.navblog.NavBlogNavlet', account.id, 0, 2),\n      ('nav.web.navlets.linklist.LinkListNavlet', account.id, 1, 2);\n  END LOOP;\nEND;\n$$ LANGUAGE plpgsql;\n\nSELECT insert_default_navlets_for_existing_users();\n\n---\n-- Remove GettingStartedWidget for default user.\n---\nDELETE FROM account_navlet WHERE account=0 AND navlet='nav.web.navlets.gettingstarted.GettingStartedWidget';\n\n---\n-- Create trigger that inserts default navlets for new users\n---\nCREATE OR REPLACE FUNCTION insert_default_navlets_for_new_users() RETURNS trigger AS $$\n    BEGIN\n      INSERT INTO account_navlet (account, navlet, displayorder, col, preferences)\n        SELECT NEW.id, navlet, displayorder, col, preferences FROM account_navlet WHERE account=0;\n      INSERT INTO account_navlet (account, navlet, displayorder, col) VALUES\n        (NEW.id, 'nav.web.navlets.gettingstarted.GettingStartedWidget', -1, 1);\n      RETURN NULL;\n    END\n$$ LANGUAGE plpgsql;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0018.sql",
    "content": "---\n-- Give authenticated users access to Graphite graphs and stuffz\n---\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 3, 2, '^/graphite/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid = 3 AND privilegeid = 2 AND target = '^/graphite/?'\n  );\n\n\n---\n-- Give authenticated users access to search\n---\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 3, 2, '^/search/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid = 3 AND privilegeid = 2 AND target = '^/search/?'\n  );\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0019.sql",
    "content": "-- Drop fields that have been obsolete for many NAV versions.\nALTER TABLE manage.type\n    DROP COLUMN cdp,\n    DROP COLUMN tftp,\n    DROP COLUMN cs_at_vlan,\n    DROP COLUMN chassis;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.00.0020.sql",
    "content": "-- Drop ancient, obsolete table\nDROP TABLE manage.status;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.01.0001.sql",
    "content": "-- Tested: Should not do anything bad other than print errors if run several times.\n\n-- Add field data to room - requires the hstore extension to be installed.\nALTER TABLE room ADD COLUMN data hstore;\n\n-- Copy all information from opt-fields to hstore\nUPDATE room SET data = hstore('opt1', opt1) WHERE COALESCE(opt1, '') <> '';\nUPDATE room SET data = data || hstore('opt2', opt2) WHERE COALESCE(opt2, '') <> '';\nUPDATE room SET data = data || hstore('opt3', opt3) WHERE COALESCE(opt3, '') <> '';\nUPDATE room SET data = data || hstore('opt4', opt4) WHERE COALESCE(opt4, '') <> '';\n\n-- Drop useless opt columns\nALTER TABLE room DROP COLUMN opt1, DROP COLUMN opt2, DROP COLUMN opt3, DROP COLUMN opt4;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.01.0002.sql",
    "content": "-- Tested: Should not do anything bad other than print errors if run several times.\n\n-- Add field data to org\nALTER TABLE org ADD COLUMN data hstore;\n\n-- Copy all information from opt-fields to hstore\nUPDATE org SET data = hstore('opt1', opt1) WHERE COALESCE(opt1, '') <> '';\nUPDATE org SET data = data || hstore('opt2', opt2) WHERE COALESCE(opt2, '') <> '';\nUPDATE org SET data = data || hstore('opt3', opt3) WHERE COALESCE(opt3, '') <> '';\n\n-- Drop useless opt columns\nALTER TABLE org DROP COLUMN opt1, DROP COLUMN opt2, DROP COLUMN opt3;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.01.0003.sql",
    "content": "-- Ensure the data field of org and room can't be a NULL value. An empty\n-- hstore value is acceptable.\nUPDATE org SET data = hstore('') WHERE data IS NULL;\nALTER TABLE org ALTER COLUMN data SET NOT NULL;\nALTER TABLE org ALTER COLUMN data SET DEFAULT hstore('');\n\nUPDATE room SET data = hstore('') WHERE data IS NULL;\nALTER TABLE room ALTER COLUMN data SET NOT NULL;\nALTER TABLE room ALTER COLUMN data SET DEFAULT hstore('');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0001.sql",
    "content": "CREATE TABLE manage.alerthist_ack (\n  alert_id INTEGER PRIMARY KEY NOT NULL,\n  account_id INTEGER NOT NULL,\n  comment VARCHAR DEFAULT NULL,\n  date TIMESTAMPTZ DEFAULT NOW(),\n\n  CONSTRAINT alerthistory_ack_alert FOREIGN KEY (alert_id)\n             REFERENCES manage.alerthist (alerthistid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n\n  CONSTRAINT alerthistory_ack_user FOREIGN KEY (account_id)\n             REFERENCES profiles.account (id)\n             ON UPDATE CASCADE ON DELETE CASCADE\n\n);"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0010.sql",
    "content": "-- Add field location_room_filter to netmap_view\nALTER TABLE netmap_view ADD COLUMN location_room_filter varchar NOT NULL DEFAULT '';"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0020.sql",
    "content": "-- clean up some alert- and event-type descriptions\nUPDATE alerttype SET alerttypedesc = 'The IP device has coldstarted'\nWHERE alerttype='coldStart';\n\nUPDATE alerttype SET alerttypedesc = 'The IP device has warmstarted'\nWHERE alerttype='warmStart';\n\nUPDATE alerttype SET alerttypedesc = 'The device is now in operation with an active IP address'\nWHERE alerttype='deviceInIPOperation';\n\nUPDATE alerttype SET alerttypedesc = 'The device is now in operation as a chassis module'\nWHERE alerttype='deviceInStack';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0050.sql",
    "content": "ALTER TABLE manage.netbox ADD data hstore DEFAULT hstore('') NOT NULL;\nALTER TABLE manage.location ADD data hstore DEFAULT hstore('') NOT NULL;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0055.sql",
    "content": "---\n-- Replace old status widget with new one.\n---\nUPDATE account_navlet\n  SET navlet='nav.web.navlets.status2.Status2Widget',\n      preferences = '{\"status_filter\": \"event_type=boxState&stateless_threshold=24\", \"refresh_interval\": 60000}'\n  WHERE navlet='nav.web.navlets.status.StatusNavlet';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0100.sql",
    "content": "-- fix ambiguity in the subid field of alert and event tables\n-- as a result of LP#1403365\nUPDATE eventq SET subid='' WHERE subid IS NULL;\nUPDATE alertq SET subid='' WHERE subid IS NULL;\nUPDATE alerthist SET subid='' WHERE subid IS NULL;\n\nALTER TABLE eventq ALTER COLUMN subid SET NOT NULL;\nALTER TABLE eventq ALTER COLUMN subid SET DEFAULT '';\n\nALTER TABLE alertq ALTER COLUMN subid SET NOT NULL;\nALTER TABLE alertq ALTER COLUMN subid SET DEFAULT '';\n\nALTER TABLE alerthist ALTER COLUMN subid SET NOT NULL;\nALTER TABLE alerthist ALTER COLUMN subid SET DEFAULT '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0101.sql",
    "content": "-- allow jobs to be logged with no success indicator, i.e. the job was\n-- checked but nothing ran.\nALTER TABLE ipdevpoll_job_log ALTER COLUMN success DROP NOT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0102.sql",
    "content": "-- Clean up only sometimes, not every time\n\nDROP TRIGGER trig_trim_old_ipdevpoll_job_log_entries_on_insert ON ipdevpoll_job_log;\n\nCREATE OR REPLACE FUNCTION trim_old_ipdevpoll_job_log_entries()\nRETURNS TRIGGER AS $$\nBEGIN\n    -- We clean up only about 20% of the time\n    IF RANDOM() >= 0.8 THEN\n      WITH ranked AS (SELECT id, rank()\n                      OVER (PARTITION BY netboxid, job_name ORDER BY end_time DESC)\n                      FROM ipdevpoll_job_log)\n      DELETE FROM ipdevpoll_job_log USING ranked\n            WHERE ipdevpoll_job_log.id=ranked.id AND rank>100;\n    END IF;\n    RETURN NULL;\nEND;\n$$ language plpgsql;\n\nCREATE TRIGGER trig_trim_old_ipdevpoll_job_log_entries_on_insert\n    AFTER INSERT ON ipdevpoll_job_log\n    FOR EACH STATEMENT\n    EXECUTE PROCEDURE trim_old_ipdevpoll_job_log_entries();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0103.sql",
    "content": "CREATE OR REPLACE FUNCTION never_use_null_subid()\nRETURNS trigger AS $$\n  BEGIN\n    NEW.subid = COALESCE(NEW.subid, '');\n    RETURN NEW;\n  END;\n$$ language plpgsql;\n\nCREATE TRIGGER eventq_subid_fix BEFORE INSERT OR UPDATE ON eventq\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n\nCREATE TRIGGER alertq_subid_fix BEFORE INSERT OR UPDATE ON alertq\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n\nCREATE TRIGGER alerthist_subid_fix BEFORE INSERT OR UPDATE ON alerthist\n    FOR EACH ROW EXECUTE PROCEDURE never_use_null_subid();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.02.0104.sql",
    "content": "-- Fix LP#1437318. Prune old log entries outside the db\nDROP TRIGGER IF EXISTS\n   trig_trim_old_ipdevpoll_job_log_entries_on_insert\n   ON ipdevpoll_job_log;\n\nDROP FUNCTION IF EXISTS trim_old_ipdevpoll_job_log_entries();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0001.sql",
    "content": "-- drop the mandatory netbox relation to device\nALTER TABLE netbox\n    ALTER COLUMN deviceid DROP NOT NULL,\n    DROP CONSTRAINT netbox_deviceid_key;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0002.sql",
    "content": "CREATE TABLE manage.netboxentity (\n  netboxentityid SERIAL NOT NULL,\n  netboxid INTEGER NOT NULL,\n\n  index VARCHAR NOT NULL,\n  source VARCHAR NOT NULL,\n  descr VARCHAR,\n  vendor_type VARCHAR,\n  contained_in_id INTEGER,\n  physical_class INTEGER,\n  parent_relpos INTEGER,\n  name VARCHAR,\n  hardware_revision VARCHAR,\n  firmware_revision VARCHAR,\n  software_revision VARCHAR,\n  deviceid INTEGER,\n  mfg_name VARCHAR,\n  model_name VARCHAR,\n  alias VARCHAR,\n  asset_id VARCHAR,\n  fru BOOLEAN,\n  mfg_date TIMESTAMP WITH TIME ZONE,\n  uris VARCHAR,\n  data hstore NOT NULL DEFAULT hstore(''),\n\n  CONSTRAINT netboxentity_pkey PRIMARY KEY (netboxentityid),\n  CONSTRAINT netboxentity_netboxid_fkey\n             FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_contained_in_id_fkey\n             FOREIGN KEY (contained_in_id)\n             REFERENCES netboxentity (netboxentityid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_deviceid_fkey\n             FOREIGN KEY (deviceid)\n             REFERENCES device (deviceid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT netboxentity_netboxid_source_index_unique\n             UNIQUE (netboxid, source, index) INITIALLY DEFERRED\n\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0003.sql",
    "content": "-- Cry 'Havoc!', and let slip the dogs of war!\nALTER TABLE netbox DROP COLUMN deviceid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0004.sql",
    "content": "ALTER TABLE netboxentity\n    ADD COLUMN gone_since TIMESTAMP;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0005.sql",
    "content": "---\n-- Insert new event and alert types for stack state events\n---\nINSERT INTO eventtype (\n  SELECT 'chassisState', 'The state of this chassis has changed', 'y'\n  WHERE NOT EXISTS (SELECT * FROM eventtype WHERE eventtypeid = 'chassisState'));\n\n---\n-- Insert new alerttypes for chassie state alerts\n---\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'chassisState', 'chassisDown',\n         'This chassis is no longer visible in the stack'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'chassisDown'));\n\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'chassisState', 'chassisUp',\n         'This chassis is visible in the stack again'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'chassisUp'));\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0006.sql",
    "content": "-- Modernize existing close_alerthist_modules rule\n\nCREATE OR REPLACE RULE close_alerthist_modules AS ON DELETE TO module\n  DO UPDATE alerthist SET end_time=NOW() \n     WHERE eventtypeid = 'moduleState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.moduleid::text;\n\n-- Make similar rule for chassis devices\n\nCREATE OR REPLACE RULE close_alerthist_chassis AS ON DELETE TO netboxentity\n  WHERE OLD.physical_class = 3  -- chassis class magic number\n  DO UPDATE alerthist SET end_time=NOW() \n     WHERE eventtypeid = 'chassisState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.netboxentityid::text;\n\n-- Make similar rule for interface devices\n\nCREATE OR REPLACE RULE close_alerthist_interface AS ON DELETE TO interface\n  DO UPDATE alerthist SET end_time=NOW() \n     WHERE eventtypeid = 'linkState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.interfaceid::text;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0050.sql",
    "content": "---\n-- Add field to unrecognized_neighbor indicating ignored state\n---\nALTER TABLE unrecognized_neighbor ADD ignored_since TIMESTAMP DEFAULT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0051.sql",
    "content": "--- Remove unique constraints for devices in module table\n\nALTER TABLE module DROP CONSTRAINT IF EXISTS module_deviceid_key;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0060.sql",
    "content": "-- Force re-collection of various data where collection code may have changed in 4.3.\nDELETE FROM netboxinfo WHERE key='poll_times';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0061.sql",
    "content": "-- linkcheck job was renamed to statuscheck - update existing log entries.\nUPDATE ipdevpoll_job_log SET job_name = 'statuscheck' WHERE job_name = 'linkcheck';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.03.0070.sql",
    "content": "-- Fix data type of netboxentity.index, which, for mysterious reasons, was\n-- defined as varchar in 4.3.0\nALTER TABLE netboxentity\n    ALTER COLUMN index TYPE INTEGER\n    USING index::INT;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.04.0001.sql",
    "content": "\nCREATE VIEW enterprise_number AS\n\nWITH enterprise AS (\n  SELECT vendorid,\n         (string_to_array(sysobjectid, '.'))[7]::INTEGER AS enterprise\n  FROM manage.type)\nSELECT vendorid, enterprise, count(*)\nFROM enterprise\nGROUP BY vendorid, enterprise\nORDER BY enterprise, count DESC, vendorid;\n\nCOMMENT ON VIEW enterprise_number IS\n'Shows the most common enterprise numbers associated with each vendorid, based on the type table';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.04.0050.sql",
    "content": "-- Insert Slack alertsender\nINSERT INTO alertsender (id, name, handler) VALUES (4, 'Slack', 'slack');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.04.0051.sql",
    "content": "-- Create hstore field on account table\nALTER TABLE account ADD COLUMN preferences hstore DEFAULT hstore('');\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.04.0052.sql",
    "content": "-- Save all properties from accountproperty as preferences in account table.\nDO $$DECLARE accountproperty RECORD;\nBEGIN\n  FOR accountproperty IN SELECT * FROM accountproperty LOOP\n    UPDATE account\n      SET preferences = preferences || hstore(accountproperty.property, accountproperty.value)\n      WHERE account.id = accountproperty.accountid;\n  END LOOP;\nEND$$;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.04.0053.sql",
    "content": "-- Set refresh interval on existing message widgets\nUPDATE account_navlet\nSET preferences = '{\"refresh_interval\": 60000}'\nWHERE navlet = 'nav.web.navlets.messages.MessagesNavlet';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.05.0050.sql",
    "content": "-- Add fields to apitoken\nALTER TABLE apitoken ADD COLUMN created TIMESTAMP DEFAULT now();\nALTER TABLE apitoken ADD COLUMN last_used TIMESTAMP;\nALTER TABLE apitoken ADD COLUMN comment TEXT;\nALTER TABLE apitoken ADD COLUMN revoked BOOLEAN default FALSE;\nALTER TABLE apitoken ADD COLUMN endpoints hstore;\n\nUPDATE apitoken SET created = NULL;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0001.sql",
    "content": "-- Create a table for interface aggregation information\nCREATE TABLE manage.interface_aggregate (\n  id SERIAL PRIMARY KEY, -- dummy primary key for Django\n  aggregator INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  interface INTEGER REFERENCES interface(interfaceid) ON DELETE CASCADE ON UPDATE CASCADE,\n  UNIQUE (aggregator, interface)\n);\n\nCREATE INDEX interface_aggregate_aggregator ON interface_aggregate (aggregator);\nCREATE INDEX interface_aggregate_interface ON interface_aggregate (interface);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0002.sql",
    "content": "---\n-- Insert new event and alert types for degraded link events\n---\nINSERT INTO eventtype (\n  SELECT 'aggregateLinkState', 'The state of this aggregated link changed', 'y'\n  WHERE NOT EXISTS (SELECT * FROM eventtype WHERE eventtypeid = 'aggregateLinkState'));\n\n---\n-- Insert new alerttypes for degradation and restoration of aggregated links\n---\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'aggregateLinkState', 'linkDegraded',\n         'This aggregate link has been degraded'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'linkDegraded'));\n\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'aggregateLinkState', 'linkRestored',\n         'This aggregate link has been restored'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'linkRestored'));\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0003.sql",
    "content": "---\n-- Drop tables that have not been in use for many NAV versions\n---\nDROP VIEW rrddatasourcenetbox;\nDROP RULE prefix_on_delete_do_clean_rrd_file ON prefix;\nDROP RULE rrdfile_deleter ON service;\nDROP TABLE rrd_datasource;\nDROP TABLE rrd_file;\nDROP TABLE netboxsnmpoid;\nDROP TABLE snmpoid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0004.sql",
    "content": "-- Always default new devices to SNMP v2c\nALTER TABLE netbox\nALTER COLUMN snmp_version SET DEFAULT 2;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0050.sql",
    "content": "-- Add parent field to location table\nALTER TABLE location ADD parent VARCHAR REFERENCES location(locationid) ON UPDATE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0051.sql",
    "content": "--- Create table for storing multiple dashboards\nCREATE TABLE profiles.account_dashboard (\n  id SERIAL PRIMARY KEY,\n  name VARCHAR DEFAULT 'My dashboard',\n  is_default BOOLEAN DEFAULT FALSE,\n  num_columns INT,\n  account_id INT REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE\n);\n\n\n--- Widgets should now be a part of a dashboard\nALTER TABLE account_navlet\n  ADD dashboard_id INT\n    REFERENCES account_dashboard(id)\n    ON UPDATE CASCADE ON DELETE CASCADE;\n\n\n--- Create a dashboard for each user and move all widgets there\nDO $$DECLARE thisaccount RECORD;\nBEGIN\n  FOR thisaccount IN SELECT * FROM account LOOP\n    RAISE NOTICE 'Creating dashboard for %s', quote_ident(thisaccount.login);\n    WITH inserted AS (\n      INSERT INTO account_dashboard (account_id, is_default, num_columns)\n      VALUES (thisaccount.id, TRUE, 3) RETURNING id\n    )\n    UPDATE account_navlet\n      SET dashboard_id=inserted.id\n      FROM inserted\n      WHERE account=thisaccount.id;\n  END LOOP;\nEND$$;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0052.sql",
    "content": "-- Create table for storing prefix tags\nCREATE TABLE IF NOT EXISTS manage.prefix_usage (\n    prefix_usage_id SERIAL PRIMARY KEY,\n    prefixid        INTEGER REFERENCES prefix (prefixid)\n                    ON UPDATE CASCADE ON DELETE CASCADE,\n    usageid         VARCHAR REFERENCES usage (usageid)\n                    ON UPDATE CASCADE ON DELETE CASCADE,\n    UNIQUE (prefixid, usageid)\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0053.sql",
    "content": "-- Set description to be optional for Locations and set default value to be an\n-- empty string as that is what is used in Django for empty char-fields\nALTER TABLE manage.location ALTER descr DROP NOT NULL,\n                            ALTER descr SET DEFAULT '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0054.sql",
    "content": "-- Remove the function (and the trigger that uses it) that inserts default\n-- navlets. This is now done in the function below - create_new_dashboard()\nDROP FUNCTION insert_default_navlets_for_new_users() CASCADE;\n\n\n-- Create a new dashboard and copy all the widgets from the default user to\n-- the dashboard\nCREATE OR REPLACE FUNCTION create_new_dashboard() RETURNS trigger AS $$\n  BEGIN\n    WITH inserted AS (\n      INSERT INTO account_dashboard (account_id, is_default, num_columns)\n      VALUES (NEW.id, TRUE, 3) RETURNING id\n    )\n    INSERT INTO account_navlet (account, navlet, displayorder, col, preferences, dashboard_id)\n      SELECT NEW.id, navlet, displayorder, col, preferences, (SELECT id from inserted)\n        FROM account_navlet WHERE account=0;\n\n    RETURN NULL;\n  END\n$$ LANGUAGE plpgsql;\n\n\n-- Creates a dashboard with default widgets for a new user\nCREATE TRIGGER add_default_dashboard_on_account_create AFTER INSERT ON account\n  FOR EACH ROW\n  EXECUTE PROCEDURE create_new_dashboard();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0055.sql",
    "content": "---\n-- Give authenticated users access to dashboard urls\n---\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 3, 2, '^/index/dashboard/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid = 3 AND privilegeid = 2 AND target = '^/index/dashboard/?'\n  );\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.06.0056.sql",
    "content": "---\n-- Sort Alert Types when modifying Alert Profiles\n---\nUPDATE MatchField SET value_sort='alerttype.alerttype' WHERE id=11 AND value_sort='alerttype.alerttypeid';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0001.sql",
    "content": "CREATE TABLE manage.peersession (\n  peersessionid SERIAL NOT NULL,\n  netboxid INTEGER NOT NULL,\n  protocol INTEGER NOT NULL,\n  peer INET NOT NULL,\n  state VARCHAR,\n  adminstatus VARCHAR,\n  local_as INTEGER,\n  remote_as INTEGER,\n  last_state_change TIMESTAMP NOT NULL DEFAULT NOW(),\n\n  CONSTRAINT peersession_pkey PRIMARY KEY (peersessionid),\n  CONSTRAINT peersession_netboxid_fkey\n             FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT peersession_uniq\n             UNIQUE (netboxid, protocol, peer)\n\n);\n\nCOMMENT ON TABLE peersession IS 'Stores the state of gateway protocol peering sessions';\n\nCREATE OR REPLACE FUNCTION peersession_update_timestamp()\nRETURNS TRIGGER AS $$\nBEGIN\n    IF OLD.state <> NEW.state THEN\n        NEW.last_state_change = now();\n    END IF;\n    RETURN NEW;\nEND;\n$$ language 'plpgsql';\n\nCREATE TRIGGER peersession_state_change\n  BEFORE UPDATE ON peersession\n  FOR EACH ROW EXECUTE PROCEDURE peersession_update_timestamp();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0002.sql",
    "content": "---\n-- Insert new event and alert types for bgpPeerStates\n---\nINSERT INTO eventtype (\n  SELECT 'bgpState', 'The state of this BGP peering session changed', 'y'\n  WHERE NOT EXISTS (SELECT * FROM eventtype WHERE eventtypeid = 'bgpState'));\n\n---\n-- Insert new alerttypes for degraded and established bgp peering sessions\n---\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'bgpState', 'bgpDown',\n         'This BGP peering session is down'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'bgpDown'));\n\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'bgpState', 'bgpEstablished',\n         'This BGP peering session has been established'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'bgpEstablished'));\n\nINSERT INTO alerttype (\n  SELECT nextval('alerttype_alerttypeid_seq'), 'bgpState', 'bgpAdmDown',\n         'This BGP peering session is administratively down'\n  WHERE NOT EXISTS (SELECT * FROM alerttype WHERE alerttype = 'bgpAdmDown'));\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0003.sql",
    "content": "-- Add rule to resolve open alerts for bgp sessions that are deleted\nCREATE OR REPLACE RULE close_alerthist_peersession AS ON DELETE TO peersession\n  DO UPDATE alerthist SET end_time=NOW()\n     WHERE eventtypeid = 'bgpState'\n       AND end_time >= 'infinity'\n       AND netboxid = OLD.netboxid\n       AND subid = OLD.peersessionid::text;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0010.sql",
    "content": "ALTER TABLE netbox\n  ADD COLUMN deleted_at TIMESTAMP DEFAULT NULL;\n\nCOMMENT ON COLUMN netbox.deleted_at IS\n  'A timestamp in this column indicates that a delete operation against this record has been requested';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0011.sql",
    "content": "ALTER TABLE netbox\n  ADD COLUMN masterid INTEGER DEFAULT NULL,\n  ADD CONSTRAINT netbox_masterid_fkey\n    FOREIGN KEY (masterid)\n    REFERENCES netbox(netboxid)\n    ON DELETE CASCADE ON UPDATE CASCADE;\n\nCOMMENT ON COLUMN netbox.masterid IS\n  'In the case of virtual sub-units, this field references the physical master unit';\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0050.sql",
    "content": "-- Remove everything related to the obsolete status web tools\nDROP TABLE profiles.statuspreference_organization;\nDROP TABLE profiles.statuspreference_category;\nDROP TABLE profiles.statuspreference;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0060.sql",
    "content": "-- Definition of a rack with environment sensors\n\nCREATE TABLE IF NOT EXISTS manage.rack (\n  rackid SERIAL PRIMARY KEY,\n  roomid VARCHAR REFERENCES room ON DELETE CASCADE,\n  rackname VARCHAR,\n  ordering INTEGER,\n  configuration JSONB DEFAULT NULL,\n  item_counter INTEGER NOT NULL DEFAULT 0\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0070.sql",
    "content": "-- Add new fields to sensor table\nALTER TABLE sensor ADD COLUMN display_minimum_user FLOAT DEFAULT null;\nALTER TABLE sensor ADD COLUMN display_maximum_user FLOAT DEFAULT null;\nALTER TABLE sensor ADD COLUMN display_minimum_sys FLOAT DEFAULT null;\nALTER TABLE sensor ADD COLUMN display_maximum_sys FLOAT DEFAULT null;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0100.sql",
    "content": "CREATE TABLE \"manage\".\"auditlog_logentry\" (\n  \"id\" serial NOT NULL PRIMARY KEY,\n  \"actor_model\" VARCHAR NOT NULL,\n  \"actor_pk\" VARCHAR NOT NULL,\n  \"object_model\" VARCHAR NULL,\n  \"object_pk\" VARCHAR NULL,\n  \"target_model\" VARCHAR NULL,\n  \"target_pk\" VARCHAR NULL,\n  \"timestamp\" TIMESTAMP WITH TIME ZONE NOT NULL,\n  \"verb\" VARCHAR(50) NOT NULL,\n  \"summary\" TEXT NOT NULL,\n  \"subsystem\" VARCHAR NULL,\n  \"before\" TEXT NULL,\n  \"after\" TEXT NULL\n);\n\nCREATE INDEX \"auditlog_logentry_b512ddf1\" ON \"manage\".\"auditlog_logentry\" (\"verb\");\nCREATE INDEX \"auditlog_logentry_verb_210dd763c4f184d9_like\" ON \"manage\".\"auditlog_logentry\" (\"verb\" varchar_pattern_ops);\nINSERT INTO subsystem (name) VALUES ('auditlog');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.07.0110.sql",
    "content": "INSERT INTO subsystem (name) VALUES ('portadmin');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0001.sql",
    "content": "-- delete obsolete function used as trigger on removed rrd tables\nDROP FUNCTION IF EXISTS close_thresholdstate_on_threshold_delete();\n\n\n-- Ensure functions are in correct schema, in a roundabout way:\n-- Since bootstrapping from a new baseline already puts it in the correct\n-- schema, and moving it to the schema it already is in raises an error, we\n-- move it around a bit first :-D\nALTER FUNCTION create_new_dashboard() SET SCHEMA arnold;\nALTER FUNCTION arnold.create_new_dashboard() SET SCHEMA profiles;\n\nALTER FUNCTION insert_default_navlets_for_existing_users() SET SCHEMA arnold;\nALTER FUNCTION arnold.insert_default_navlets_for_existing_users() SET SCHEMA profiles;\n\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0010.sql",
    "content": "ALTER TABLE adjacency_candidate DROP CONSTRAINT adjacency_candidate_uniq;\nALTER TABLE adjacency_candidate ADD CONSTRAINT adjacency_candidate_uniq UNIQUE(netboxid, interfaceid, to_netboxid, to_interfaceid, source);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0020.sql",
    "content": "CREATE OR REPLACE VIEW manage.netboxmac as\n SELECT DISTINCT ON (foo.mac) foo.netboxid,\n    foo.mac\n   FROM ( SELECT DISTINCT netbox.netboxid,\n            arp.mac\n           FROM netbox\n             JOIN arp ON arp.ip = netbox.ip AND arp.end_time = 'infinity'::timestamp without time zone\n        UNION\n         SELECT interface.netboxid,\n            arp.mac\n           FROM arp\n             JOIN gwportprefix gwp ON arp.ip = gwp.gwip\n             LEFT JOIN ( SELECT gwportprefix.prefixid,\n                    count(*) > 0 AS has_virtual\n                   FROM gwportprefix\n                  WHERE gwportprefix.virtual = true\n                  GROUP BY gwportprefix.prefixid) prefix_virtual_ports ON gwp.prefixid = prefix_virtual_ports.prefixid\n             JOIN interface USING (interfaceid)\n          WHERE arp.end_time = 'infinity'::timestamp without time zone AND (gwp.virtual = true OR prefix_virtual_ports.has_virtual IS NULL)\n        UNION\n         SELECT DISTINCT ON (interface.ifphysaddress) interface.netboxid,\n            interface.ifphysaddress AS mac\n           FROM interface\n           WHERE interface.iftype = 6 AND interface.ifphysaddress IS NOT NULL\n        UNION\n         SELECT DISTINCT ON (netboxinfo.val) netboxinfo.netboxid, netboxinfo.val::macaddr\n           FROM netboxinfo\n           WHERE netboxinfo.key = 'bridge_info' AND netboxinfo.var = 'base_address') foo\n  WHERE foo.mac <> '00:00:00:00:00:00'::macaddr\n  ORDER BY foo.mac, foo.netboxid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0050.sql",
    "content": "CREATE TABLE IF NOT EXISTS profiles.report_subscription (\n    id SERIAL PRIMARY KEY,\n    account_id INT REFERENCES account ON DELETE CASCADE ON UPDATE CASCADE,\n    address_id INT REFERENCES alertaddress ON DELETE CASCADE ON UPDATE CASCADE,\n    period VARCHAR NOT NULL,\n    report_type VARCHAR NOT NULL\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0080.sql",
    "content": "-- Add field for read/write to APIToken\n\nALTER TABLE apitoken ADD permission VARCHAR DEFAULT 'read';\nALTER TABLE apitoken\n      ADD CONSTRAINT check_permissions\n      CHECK (permission in ('read', 'write'));\nUPDATE apitoken SET permission = 'read';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0210.sql",
    "content": "ALTER TABLE vlan ADD COLUMN netboxid INT4 REFERENCES netbox ON DELETE SET NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0310.sql",
    "content": "ALTER TABLE image ALTER COLUMN roomid DROP NOT NULL;\nALTER TABLE image ADD COLUMN locationid VARCHAR(30) REFERENCES location;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0410.sql",
    "content": "CREATE TABLE manage.poegroup (\n       poegroupid SERIAL PRIMARY KEY,\n       netboxid INTEGER NOT NULL REFERENCES netbox ON DELETE CASCADE,\n       moduleid INTEGER REFERENCES module ON DELETE CASCADE,\n       index INTEGER NOT NULL,\n       status INTEGER NOT NULL,\n       power INTEGER NOT NULL,\n       UNIQUE (netboxid, index)\n);\n\nCREATE TABLE manage.poeport (\n       poeportid SERIAL PRIMARY KEY,\n       netboxid INTEGER NOT NULL REFERENCES netbox ON DELETE CASCADE,\n       poegroupid INTEGER NOT NULL REFERENCES poegroup ON DELETE CASCADE,\n       interfaceid INTEGER REFERENCES interface ON DELETE CASCADE,\n       index INTEGER NOT NULL,\n       admin_enable BOOLEAN NOT NULL,\n       detection_status INTEGER NOT NULL,\n       priority INTEGER NOT NULL,\n       classification INTEGER NOT NULL,\n       UNIQUE (poegroupid, index)\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.0510.sql",
    "content": "ALTER TABLE sensor ADD COLUMN interfaceid INTEGER REFERENCES interface ON DELETE SET NULL ON UPDATE CASCADE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.1000.sql",
    "content": "-- Some objects may have been installed in the wrong schema over time, due to\n-- changes in how navsyncdb handles changes to the PostgreSQL search path.\n--\n-- We attempt to move potentially affected objects to the correct schema here.\n-- However, it is a PostgreSQL error move an object to a schema it is already\n-- in, so we move objects back and forth to ensure this changescript works no\n-- matter whether the object had been installed originally in the correct\n-- schema.\n\nALTER VIEW enterprise_number SET SCHEMA arnold;\nALTER VIEW arnold.enterprise_number SET SCHEMA manage;\n\nALTER VIEW netboxmac SET SCHEMA arnold;\nALTER VIEW arnold.netboxmac SET SCHEMA manage;\n\nALTER TABLE poeport SET SCHEMA arnold;\nALTER TABLE arnold.poeport SET SCHEMA manage;\n\nALTER TABLE poegroup SET SCHEMA arnold;\nALTER TABLE arnold.poegroup SET SCHEMA manage;\n\nALTER TABLE report_subscription SET SCHEMA arnold;\nALTER TABLE arnold.report_subscription SET SCHEMA profiles;\n\nALTER FUNCTION close_snmpagentstates_on_community_clear() SET SCHEMA arnold;\nALTER FUNCTION arnold.close_snmpagentstates_on_community_clear() SET SCHEMA manage;\n\nALTER FUNCTION close_thresholdstate_on_thresholdrule_delete() SET SCHEMA arnold;\nALTER FUNCTION arnold.close_thresholdstate_on_thresholdrule_delete() SET SCHEMA manage;\n\nALTER FUNCTION never_use_null_subid() SET SCHEMA arnold;\nALTER FUNCTION arnold.never_use_null_subid() SET SCHEMA manage;\n\nALTER FUNCTION peersession_update_timestamp() SET SCHEMA arnold;\nALTER FUNCTION arnold.peersession_update_timestamp() SET SCHEMA manage;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.1001.sql",
    "content": "-- remove obsolete things that seem to hang around on some, but not all,\n-- upgraded installations (i.e. these things are just fine in the baseline,\n-- but may have become issues for those who have been upgrading NAV versions\n-- repeatedly for a long time).\n\nDROP FUNCTION IF EXISTS drop_constraint();\n\nALTER TABLE cam\n  DROP CONSTRAINT IF EXISTS cam_netboxid_sysname_module_port_mac_start_time_key,\n  DROP CONSTRAINT IF EXISTS cam_netboxid_key;\n\nALTER INDEX IF EXISTS subcat_pkey RENAME TO netboxgroup_pkey;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.08.3685.sql",
    "content": "UPDATE auditlog_logentry SET verb='change-status-to-up' WHERE verb='change status to up';\nUPDATE auditlog_logentry SET verb='change-status-to-down' WHERE verb='change status to down';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.09.0001.sql",
    "content": "-- django_hstore's implementation of hstore always sets the field to something,\n-- so that whether the field is null or not is irrelevant. This is bad django,\n-- bad sql, and bad python.\n--\n-- django.contrib.postgres's implementation does not do this, but we send in\n-- nothing all the time. Alter behavior so that those columns are never NULL\n-- regardless, to be sure we never end up with some fields \"empty\" and some\n-- NULL in the same column.\n--\n-- DEFAULT '' is the same as DEFAULT {} is the same as DEAULT [] as fra as\n-- hstore is concerned.\n\nALTER TABLE account ALTER COLUMN preferences SET DEFAULT '';\nALTER TABLE apitoken ALTER COLUMN endpoints SET DEFAULT '';\nALTER TABLE location ALTER COLUMN data SET DEFAULT '';\nALTER TABLE netbox ALTER COLUMN data SET DEFAULT '';\nALTER TABLE netboxentity ALTER COLUMN data SET DEFAULT '';\nALTER TABLE org ALTER COLUMN data SET DEFAULT '';\nALTER TABLE room ALTER COLUMN data SET DEFAULT '';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.09.0050.sql",
    "content": "-- Add field for storing user preference for subtracting maintenance\n-- downtime from report\nALTER TABLE report_subscription ADD COLUMN exclude_maintenance BOOLEAN;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.09.0100.sql",
    "content": "-- Make sure refresh session is open for all.\n--\n-- Do this by adding web_access for the refresh_session url to the group\n-- \"Everyone\"\n\nINSERT INTO accountgroupprivilege\n    (accountgroupid, privilegeid, target)\nSELECT 2, 2, '^/refresh_session'\nWHERE\n    NOT EXISTS (\n        SELECT * FROM accountgroupprivilege WHERE target='^/refresh_session'\n    );\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.09.0110.sql",
    "content": "-- Rename verbs in audit log entries\nUPDATE auditlog_logentry SET verb='enable-interface' WHERE verb='change-status-to-up';\nUPDATE auditlog_logentry SET verb='disable-interface' WHERE verb='change-status-to-down';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.04.09.0200.sql",
    "content": "-- These unique constraints never had explicit names in the NAV schema, causing\n-- their names to become inconsistent between PostgreSQL versions.  This\n-- explicitly renames those constraints that still have the implicit names given\n-- by old PostgreSQL versions, to match those implicit names given by newer\n-- versions:\n\nALTER INDEX IF EXISTS alerthistmsg_alerthistid_key RENAME TO alerthistmsg_alerthistid_state_msgtype_language_key;\nALTER INDEX IF EXISTS alerthistvar_alerthistid_key RENAME TO alerthistvar_alerthistid_state_var_key;\nALTER INDEX IF EXISTS alertqmsg_alertqid_key RENAME TO alertqmsg_alertqid_msgtype_language_key;\nALTER INDEX IF EXISTS alertqvar_alertqid_key RENAME TO alertqvar_alertqid_var_key;\nALTER INDEX IF EXISTS cabling_roomid_key RENAME TO cabling_roomid_jack_key;\nALTER INDEX IF EXISTS identity_mac_key RENAME TO identity_mac_swportid_key;\nALTER INDEX IF EXISTS log_message_type_priority_key RENAME TO log_message_type_priority_facility_mnemonic_key;\nALTER INDEX IF EXISTS mem_netboxid_key RENAME TO mem_netboxid_memtype_device_key;\nALTER INDEX IF EXISTS netboxinfo_netboxid_key RENAME TO netboxinfo_netboxid_key_var_val_key;\nALTER INDEX IF EXISTS netbox_vtpvlan_netboxid_key RENAME TO netbox_vtpvlan_netboxid_vtpvlan_key;\nALTER INDEX IF EXISTS patch_interfaceid_key RENAME TO patch_interfaceid_cablingid_key;\nALTER INDEX IF EXISTS swportvlan_interfaceid_key RENAME TO swportvlan_interfaceid_vlanid_key;\nALTER INDEX IF EXISTS type_vendorid_key RENAME TO type_vendorid_typename_key;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0001.sql",
    "content": "-- Remove obsolete and non-functioning trigger\nDROP TRIGGER IF EXISTS\n   trig_module_delete_prune_devices\n   ON module;\n\nDROP TRIGGER IF EXISTS\n   trig_netbox_delete_prune_devices\n   ON netbox;\n\nDROP FUNCTION IF EXISTS remove_floating_devices();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0010.sql",
    "content": "CREATE TABLE \"manage\".management_profile(\n  management_profileid SERIAL PRIMARY KEY,\n  name VARCHAR NOT NULL UNIQUE,\n  description VARCHAR,\n  protocol INTEGER NOT NULL,  -- 1=SNMP\n  configuration JSONB NOT NULL DEFAULT '{}'\n);\n\nCREATE TABLE \"manage\".netbox_profile\n(\n  netbox_profileid SERIAL PRIMARY KEY,\n  netboxid         INTEGER REFERENCES manage.netbox (netboxid)\n                   ON UPDATE CASCADE ON DELETE CASCADE,\n  profileid        INTEGER REFERENCES manage.management_profile (management_profileid)\n                   ON UPDATE CASCADE ON DELETE CASCADE,\n\n  UNIQUE (netboxid, profileid)\n\n);\n\n-- Now, create SNMP profiles from the distinct communities configured in the\n-- netbox table\n\n-- First, read profiles\nINSERT INTO management_profile\n  (protocol, name, description, configuration)\nSELECT\n  1 AS protocol,\n  'SNMP v' || snmp_version::TEXT || ' read profile #' || row::TEXT AS name,\n  'Autogenerated profile from migrated NAV database' AS description,\n  ('{\"version\": ' || snmp_version || ', \"community\": \"' || snmp_community || '\", \"write\": false}')::JSONB AS configuration\nFROM\n  (SELECT row_number() OVER (ORDER BY snmp_community) as row, snmp_community, snmp_version FROM (\n     SELECT\n       ro AS snmp_community,\n       snmp_version\n     FROM netbox\n     WHERE COALESCE(ro, '') != ''\n     GROUP BY ro, snmp_version\n   ) AS snmp\n  ) AS snmp2;\n\n-- Then read/write profiles\nINSERT INTO management_profile\n  (protocol, name, description, configuration)\nSELECT\n  1 AS protocol,\n  'SNMP v' || snmp_version || ' write profile #' || row AS name,\n  'Autogenerated profile from migrated NAV database' AS description,\n  ('{\"version\": ' || snmp_version || ', \"community\": \"' || snmp_community || '\", \"write\": true}')::JSONB AS configuration\nFROM\n  (SELECT row_number() OVER (ORDER BY snmp_community) as row, snmp_community, snmp_version FROM (\n     SELECT\n       rw AS snmp_community,\n       snmp_version\n     FROM netbox\n     WHERE COALESCE(rw, '') != ''\n     GROUP BY rw, snmp_version\n   ) AS snmp\n  ) AS snmp2;\n\n\n-- Now, match the generated profiles to the netboxes based on their\n-- existing SNMP management details\n\nINSERT INTO netbox_profile (netboxid, profileid)\n\n  WITH snmp_profile AS (\n    SELECT management_profileid,\n           (configuration ->> 'version')::INTEGER AS version,\n           configuration ->> 'community'          AS community,\n           (configuration ->> 'write')::BOOLEAN   AS write\n    FROM management_profile\n  )\n  -- read profiles\n  SELECT netboxid, management_profileid\n  FROM netbox n\n  JOIN snmp_profile s ON (\n      NOT s.write\n      AND n.ro = s.community\n      AND n.snmp_version = s.version\n  )\n\n  UNION\n\n  -- write profiles\n  SELECT netboxid, management_profileid\n  FROM netbox n\n  JOIN snmp_profile s ON (\n      s.write\n      AND n.rw = s.community\n      AND n.snmp_version = s.version\n  );\n\n\n-- Then, finally, drop the old SNMP attributes from netbox\nALTER TABLE netbox DROP COLUMN ro;\nALTER TABLE netbox DROP COLUMN rw;\nALTER TABLE netbox DROP COLUMN snmp_version;\n\n-- Remove these now obsolete triggers, which would prevent updates to the netbox\n-- table when the above columns are removed. It is not immediately clear how to\n-- replace them with something that watches management profile changes instead,\n-- this will need to come later.\nDROP TRIGGER trig_close_snmpagentstates_on_community_clear ON netbox;\nDROP FUNCTION close_snmpagentstates_on_community_clear();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0011.sql",
    "content": "-- Insert an example SNMP v2c management profile if no profiles exist.\n-- Typically helpful to get started more easily with a new NAV installation.\nINSERT INTO management_profile\n  (protocol, name, description, configuration)\nSELECT\n  1,\n  'SNMP v2c read-only',\n  'Example SNMP v2c read-only profile with the standard community',\n  '{\"version\": \"2c\", \"community\": \"public\"}'::JSONB\nWHERE NOT EXISTS (\n  SELECT * FROM management_profile\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0012.sql",
    "content": "ALTER TABLE cat\n  RENAME COLUMN req_snmp TO req_mgmt;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0020.sql",
    "content": "CREATE OR REPLACE VIEW manage.netboxmac as\n SELECT DISTINCT ON (foo.mac) foo.netboxid,\n    foo.mac\n   FROM ( SELECT DISTINCT netbox.netboxid,\n            arp.mac\n           FROM netbox\n             JOIN arp ON arp.ip = netbox.ip AND arp.end_time = 'infinity'::timestamp without time zone\n        UNION\n         SELECT interface.netboxid,\n            arp.mac\n           FROM arp\n             JOIN gwportprefix gwp ON arp.ip = gwp.gwip\n             LEFT JOIN ( SELECT gwportprefix.prefixid,\n                    count(*) > 0 AS has_virtual\n                   FROM gwportprefix\n                  WHERE gwportprefix.virtual = true\n                  GROUP BY gwportprefix.prefixid) prefix_virtual_ports ON gwp.prefixid = prefix_virtual_ports.prefixid\n             JOIN interface USING (interfaceid)\n          WHERE arp.end_time = 'infinity'::timestamp without time zone AND (gwp.virtual = true OR prefix_virtual_ports.has_virtual IS NULL)\n        UNION\n         SELECT DISTINCT ON (interface.ifphysaddress) interface.netboxid,\n            interface.ifphysaddress AS mac\n           FROM interface\n           WHERE interface.iftype = 6 AND interface.ifphysaddress IS NOT NULL\n        UNION\n         SELECT DISTINCT ON (netboxinfo.val) netboxinfo.netboxid, netboxinfo.val::macaddr\n           FROM netboxinfo\n           WHERE (netboxinfo.key = 'bridge_info' AND netboxinfo.var = 'base_address') or\n                 (netboxinfo.key = 'lldp' AND netboxinfo.var = 'chassis_mac')) foo\n  WHERE foo.mac <> '00:00:00:00:00:00'::macaddr\n  ORDER BY foo.mac, foo.netboxid;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0030.sql",
    "content": "-- Ensure no sysnames are blank, and enforce it as a constraint\nUPDATE netbox\n  SET sysname=ip::TEXT\n  WHERE LENGTH(TRIM(BOTH FROM sysname)) = 0;\n\nALTER TABLE netbox\n  ADD CONSTRAINT netbox_sysname_notblank CHECK (LENGTH(TRIM(BOTH FROM sysname)) > 0);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0050.sql",
    "content": "ALTER TABLE sensor ADD COLUMN on_message_user VARCHAR;\nALTER TABLE sensor ADD COLUMN on_message_sys VARCHAR;\nALTER TABLE sensor ADD COLUMN off_message_user VARCHAR;\nALTER TABLE sensor ADD COLUMN off_message_sys VARCHAR;\nALTER TABLE sensor ADD COLUMN on_state_user INT;\nALTER TABLE sensor ADD COLUMN on_state_sys INT;\nALTER TABLE sensor ADD COLUMN alert_type INT;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0060.sql",
    "content": "ALTER TABLE powersupply_or_fan\n  RENAME COLUMN sensor_oid TO internal_id;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0070.sql",
    "content": "ALTER TABLE alertsender\n  ADD COLUMN supported BOOLEAN DEFAULT true;\n\nUPDATE alertsender\n  SET supported=false WHERE handler='jabber';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0080.sql",
    "content": "-- Ensure that the location \"mylocation\" exists, works on pg9.4\nINSERT INTO location (locationid, descr)\n    SELECT 'mylocation', 'Example location' WHERE\n        NOT EXISTS (SELECT * FROM location WHERE locationid = 'mylocation');\n\n-- Add \"mylocation\" to all rooms missing a location\nUPDATE room SET locationid = 'mylocation' WHERE locationid IS NULL;\n\n-- Ensure that location must alwayus exist for a room\nALTER TABLE room ALTER COLUMN locationid SET NOT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.00.0100.sql",
    "content": "-- fix majorly broken constraint in netboxinfo\n\n-- first, delete duplicates, which might happen on old installations\nDELETE FROM netboxinfo WHERE netboxinfoid IN (\n    SELECT a.netboxinfoid FROM netboxinfo a JOIN netboxinfo b\n    ON (a.netboxid  = b.netboxid AND COALESCE(a.key, '') = COALESCE(b.key, '') AND a.var = b.var AND b.netboxinfoid > a.netboxinfoid)\n);\n\n-- THEN, fix the broken constraints\nALTER TABLE netboxinfo DROP CONSTRAINT IF EXISTS netboxinfo_netboxid_key_var_val_key;\nALTER TABLE netboxinfo DROP CONSTRAINT IF EXISTS netboxinfo_uniq;\nALTER TABLE netboxinfo ADD CONSTRAINT netboxinfo_uniq UNIQUE (netboxid, key, var);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.01.0001.sql",
    "content": "-- Make it so AS numbers can be really big,\nALTER TABLE peersession\n  ALTER COLUMN local_as TYPE BIGINT,\n  ALTER COLUMN remote_as TYPE BIGINT\n;"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.02.0001.sql",
    "content": "-- Rewrite severity values of existing NAV alert history\n\n-- This function will map any severity value in the interval 0-100 to the new 5-1 interval. The current schema\n-- allows any integer value in the field, so we map any existing values outside the 0-100 interval to either end of the\n-- interval before conversion.\nCREATE FUNCTION pg_temp.severitymap(numeric) RETURNS numeric AS\n$$ SELECT ROUND(((1.0-(GREATEST(0, LEAST($1, 100.0)) / 100.0)) * 4) + 1)  $$\nLANGUAGE sql;\n\nUPDATE eventq SET severity = pg_temp.severitymap(severity);\nUPDATE alertq SET severity = pg_temp.severitymap(severity);\nUPDATE alerthist SET severity = pg_temp.severitymap(severity);\n\nCREATE DOMAIN severity_value AS INTEGER CHECK(VALUE BETWEEN 1 AND 5) DEFAULT 3;\n\nALTER TABLE eventq ALTER COLUMN severity TYPE severity_value;\nALTER TABLE alertq ALTER COLUMN severity TYPE severity_value;\nALTER TABLE alerthist ALTER COLUMN severity TYPE severity_value;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.02.0002.sql",
    "content": "-- Update obsolete Alert Profile filter groups and filters related to severity values\n-- These definitions are supplied with NAV. They may have been changed locally, but we don't care ;-)\n\n-- refs:\n-- match_field_id for the severity field is 12.\n-- operator 2 means \">=\", operator 4 means \"<=\"\n\n-- Update the value help text of the matchable severity field\nUPDATE MatchField\n   SET value_help = 'Range: Severities are in the range 1-5, where 1 is most severe.'\n WHERE id=12;\n\n-- Update F17/G17: All alerts with severity >= Warning\nUPDATE filtergroup SET description = 'G17: All alerts with severity <= 4' WHERE id=81;\nUPDATE filter SET name = 'F17: All alerts with severity <= 4 ' WHERE id=20;\nUPDATE expression SET operator=4, value='4' WHERE id=55;\n\n-- Update F18/G18: All alerts with severity >= Errors\nUPDATE filtergroup SET description = 'G18: All alerts with severity <= 3' WHERE id=82;\nUPDATE filter SET name = 'F18: All alerts with severity <= 3' WHERE id=21;\nUPDATE expression SET operator=4, value='3' WHERE id=57;\n\n-- Update F19/G19: All alerts with severity >= Critical\nUPDATE filtergroup SET description = 'G19: All alerts with severity <= 2' WHERE id=83;\nUPDATE filter SET name = 'F19: All alerts with severity <= 2' WHERE id=23;\nUPDATE expression SET operator=4, value='2' WHERE id=59;\n\n-- Update F20/G20: All alerts with severity = Emergency\nUPDATE filtergroup SET description = 'G20: All alerts with severity = 1' WHERE id=84;\nUPDATE filter SET name = 'F20: All alerts with severity = 1' WHERE id=24;\nUPDATE expression SET operator=4, value='1' WHERE id=61;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.04.0001.sql",
    "content": "-- force re-collection of module data to not classify transceivers as modules anymore\nDELETE FROM netboxinfo WHERE key='poll_times' AND var='modules';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.04.0002.sql",
    "content": "INSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceNotice','deviceFwUpgrade','Firmware upgrade on device.');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.04.0003.sql",
    "content": "-- Add new deviceState alerts\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceNewModule','The device has been found as a module.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceNewChassis','The device has been found as a chassis.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceNewPsu','The device has been found as a power supply.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceNewFan','The device has been found as a fan.');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.05.0001.sql",
    "content": "-- Delete crazy Juniper devices/modules that cause duplicates all over\nDELETE FROM device WHERE serial = 'BUILTIN';\n\n-- force re-collection of module data to ensure things come up-to-date after upgrade\nDELETE FROM netboxinfo WHERE key='poll_times' AND var='modules';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.05.0002.sql",
    "content": "-- Add new deviceState alert\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceDeletedFan','The device has been removed as a fan.');\n  INSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceDeletedPsu','The device has been removed as a power supply.');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.07.0001.sql",
    "content": "INSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('juniperYellowAlarmState','Tells us if a Juniper device has any open yellow alarms.','y');\nINSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES\n  ('juniperRedAlarmState','Tells us if a Juniper device has any open red alarms.','y');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('juniperYellowAlarmState','juniperYellowAlarmOn','The Juniper device has some yellow alarms.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('juniperYellowAlarmState','juniperYellowAlarmOff','The Juniper device has no yellow alarms.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('juniperRedAlarmState','juniperRedAlarmOn','The Juniper device has some red alarms.');\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('juniperRedAlarmState','juniperRedAlarmOff','The Juniper device has no red alarms.');"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.07.0002.sql",
    "content": "ALTER TABLE alertsender ADD COLUMN blacklisted_reason VARCHAR; \n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.10.0001.sql",
    "content": "-- Remove malfunctioning ARP record closing rule, see #2910\nDROP RULE IF EXISTS netbox_close_arp ON netbox;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.10.0002.sql",
    "content": "-- Reinstate rule that closes ARP records on netbox deletion, see #2910\nCREATE OR REPLACE RULE netbox_close_arp AS ON DELETE TO netbox\n  DO UPDATE arp SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\n-- Close all open ARP records that have no associated netbox (those that may have been kept open in error due to\n-- deletions between 5.10.1 and 5.10.2)\nUPDATE arp SET end_time=NOW()\n  WHERE end_time>='infinity' AND netboxid IS NULL;\n\n-- Remove actually malfunctioning ARP record closing rule, see #2910\nDROP RULE IF EXISTS netbox_status_close_arp ON netbox;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.11.0001.sql",
    "content": "CREATE TABLE manage.oui (\n    oui MACADDR PRIMARY KEY,\n    vendor VARCHAR NOT NULL,\n    CHECK (oui=trunc(oui))\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.11.0002.sql",
    "content": "-- Add new deviceState alert\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceDeletedChassis','The device has been removed as a chassis.');\n  INSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('deviceState','deviceDeletedModule','The device has been removed as a module.');\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.12.0001.sql",
    "content": "-- This migration is to ensure that for accounts that don't have a default\n-- dashboard we set a default dashboard\n\n-- This part finds the row with the lowest id for any account that does not\n-- have a default dashboard\nWITH CTE AS (\n  SELECT MIN(id) as id\n  FROM account_dashboard a\n  WHERE NOT EXISTS (\n    SELECT 1 \n    FROM account_dashboard b \n    WHERE a.account_id = b.account_id \n    AND b.is_default = TRUE\n  )\n  GROUP BY account_id\n)\n-- And this part sets is_default for that row to true\nUPDATE account_dashboard\nSET is_default = TRUE\nWHERE id IN (SELECT id FROM CTE);"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.12.0002.sql",
    "content": "-- This migration is to ensure that for accounts that have more than one\n-- default dashboard we set is_default to false for all except for one\n\nUPDATE account_dashboard\nSET is_default = FALSE\nWHERE id NOT IN (\n  -- This part finds the lowest id of the default dashboards for each\n  -- account_id \n  SELECT MIN(id)\n  FROM account_dashboard\n  WHERE is_default = TRUE\n  GROUP BY account_id\n)\nAND account_id IN (\n  -- This part finds all account_ids that have more than one default dashboard\n  SELECT account_id\n  FROM account_dashboard\n  WHERE is_default = TRUE\n  GROUP BY account_id\n  HAVING COUNT(account_id) > 1\n)"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.12.0010.sql",
    "content": "-- Add column to maint_component table to keep descriptions of components that can no longer referenced\nALTER TABLE maint_component ADD COLUMN description VARCHAR;\n\nUPDATE maint_component c\nSET description = n.sysname\nFROM netbox n\nWHERE c.key = 'netbox' AND c.value = n.netboxid::text;\n\nUPDATE maint_component c\nSET description = s.handler || ' at ' || n.sysname\nFROM service s\nJOIN netbox n ON s.netboxid = n.netboxid\nWHERE c.key = 'service' AND c.value = s.serviceid::text;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.12.0100.sql",
    "content": "-- Increase alertprofiles dropdown list limits\nUPDATE matchfield\nSET list_limit = 10000\nWHERE show_list\n  AND list_limit = 1000;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0001.sql",
    "content": "CREATE TABLE manage.jwtrefreshtoken (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR NOT NULL UNIQUE,\n    description VARCHAR,\n    expires TIMESTAMP NOT NULL,\n    activates TIMESTAMP NOT NULL,\n    last_used TIMESTAMP,\n    revoked BOOLEAN NOT NULL DEFAULT FALSE,\n    hash VARCHAR NOT NULL\n);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0002.sql",
    "content": "-- Delete widget_columns key from account preferences\nUPDATE account\nSET preferences = delete(preferences, 'widget_columns')\nWHERE preferences ? 'widget_columns';\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0003.sql",
    "content": "ALTER TABLE manage.jwtrefreshtoken ADD permission VARCHAR DEFAULT 'read';\nALTER TABLE manage.jwtrefreshtoken\n      ADD CONSTRAINT check_permissions\n      CHECK (permission in ('read', 'write'));\nUPDATE manage.jwtrefreshtoken SET permission = 'read' WHERE permission IS NULL;\n\nALTER TABLE manage.jwtrefreshtoken ADD COLUMN endpoints hstore;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0004.sql",
    "content": "ALTER TABLE manage.jwtrefreshtoken ADD COLUMN created TIMESTAMP DEFAULT now();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0101.sql",
    "content": "-- Add missing field required when switching to Django's AbstractBaseUser\nALTER TABLE account\nADD COLUMN last_login TIMESTAMP WITH TIME ZONE;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0102.sql",
    "content": "-- Add email column to account table just to be more compatible with Django user models\nALTER TABLE account ADD COLUMN email VARCHAR(254) DEFAULT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.14.0103.sql",
    "content": "-- Change notification rule to include target subsystem as payload\nCREATE OR REPLACE RULE eventq_notify AS\n  ON INSERT TO eventq\n  DO ALSO SELECT pg_notify('new_event', NEW.target);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.15.0001.sql",
    "content": "ALTER TABLE account_dashboard\nADD COLUMN is_shared BOOLEAN NOT NULL DEFAULT FALSE;\n\nCREATE TABLE profiles.account_dashboard_subscription (\n    id SERIAL PRIMARY KEY,\n    account_id INT REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE,\n    dashboard_id INT REFERENCES account_dashboard(id) ON UPDATE CASCADE ON DELETE CASCADE,\n    CONSTRAINT unique_account_dashboard_subscription UNIQUE(account_id, dashboard_id)\n)\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.15.0502.sql",
    "content": "-- Create Django auth models needed to satisfy tests/integration/models/model_test.py\n\nBEGIN;\n--\n-- Create model ContentType\n--\nCREATE TABLE profiles.django_content_type (id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, app_label varchar(100) NOT NULL, model varchar(100) NOT NULL);\n--\n-- Alter unique_together for contenttype (1 constraint(s))\n--\nALTER TABLE profiles.django_content_type ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);\n\n--\n-- Create model Permission\n--\nCREATE TABLE profiles.auth_permission (id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, name varchar(255) NOT NULL, content_type_id integer NOT NULL, codename varchar(100) NOT NULL);\n\n--\n-- Create model Group\n--\nCREATE TABLE profiles.auth_group (id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, name varchar(150) NOT NULL UNIQUE);\nCREATE TABLE profiles.auth_group_permissions (id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, group_id integer NOT NULL, permission_id integer NOT NULL);\n\nALTER TABLE profiles.auth_permission ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);\nALTER TABLE profiles.auth_permission ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES django_content_type (id) DEFERRABLE INITIALLY DEFERRED;\nCREATE INDEX auth_permission_content_type_id_2f476e4b ON auth_permission (content_type_id);\nCREATE INDEX auth_group_name_a6ea08ec_like ON auth_group (name varchar_pattern_ops);\nALTER TABLE profiles.auth_group_permissions ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);\nALTER TABLE profiles.auth_group_permissions ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES auth_group (id) DEFERRABLE INITIALLY DEFERRED;\nALTER TABLE profiles.auth_group_permissions ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES auth_permission (id) DEFERRABLE INITIALLY DEFERRED;\nCREATE INDEX auth_group_permissions_group_id_b120cbf9 ON auth_group_permissions (group_id);\nCREATE INDEX auth_group_permissions_permission_id_84c5c92e ON auth_group_permissions (permission_id);\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.16.0001.sql",
    "content": "-- Redact API token secrets from audit log entries (for currently existing tokens,\n-- not deleted ones). Related to issue #3683.\n--\n-- This migration replaces actual API token strings in audit log entries\n-- with the new safe format \"token #<id> (<comment>)\"\n\nDO $$\nDECLARE\n    token_rec RECORD;\n    new_token_str TEXT;\n    truncated_comment TEXT;\nBEGIN\n    -- Iterate through all API tokens and replace their actual token strings\n    -- in audit log entries with the safe identifier format\n    FOR token_rec IN\n        SELECT id, token, comment FROM apitoken\n    LOOP\n        -- Build the new token string in the same format as APIToken.__str__()\n        IF token_rec.comment IS NOT NULL AND token_rec.comment != '' THEN\n            -- Truncate comment to 25 characters total (approximating Python's Truncator(comment).chars(25))\n            -- Django's Truncator includes the ellipsis in the total count\n            IF LENGTH(token_rec.comment) > 25 THEN\n                -- Reserve 1 character for ellipsis, truncate content to 24 chars\n                truncated_comment := SUBSTRING(token_rec.comment FROM 1 FOR 24) || '…';\n            ELSE\n                truncated_comment := token_rec.comment;\n            END IF;\n            new_token_str := 'token #' || token_rec.id::TEXT || ' (' || truncated_comment || ')';\n        ELSE\n            new_token_str := 'token #' || token_rec.id::TEXT;\n        END IF;\n\n        -- Update summary field (only for entries that reference this specific token)\n        UPDATE auditlog_logentry\n        SET summary = REPLACE(summary, token_rec.token, new_token_str)\n        WHERE object_model = 'apitoken'\n          AND object_pk = token_rec.id::TEXT\n          AND summary LIKE '%' || token_rec.token || '%';\n\n        -- Update before field (only for entries that reference this specific token)\n        UPDATE auditlog_logentry\n        SET before = REPLACE(before, token_rec.token, new_token_str)\n        WHERE object_model = 'apitoken'\n          AND object_pk = token_rec.id::TEXT\n          AND before LIKE '%' || token_rec.token || '%';\n\n        -- Update after field (only for entries that reference this specific token)\n        UPDATE auditlog_logentry\n        SET after = REPLACE(after, token_rec.token, new_token_str)\n        WHERE object_model = 'apitoken'\n          AND object_pk = token_rec.id::TEXT\n          AND after LIKE '%' || token_rec.token || '%';\n    END LOOP;\nEND $$;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.17.0002.sql",
    "content": "CREATE TABLE profiles.account_default_dashboard (\n    account_id INT PRIMARY KEY REFERENCES profiles.account(id) ON UPDATE CASCADE ON DELETE CASCADE,\n    dashboard_id INT NOT NULL REFERENCES profiles.account_dashboard(id) ON UPDATE CASCADE ON DELETE CASCADE\n);\n\nINSERT INTO profiles.account_default_dashboard (account_id, dashboard_id)\nSELECT d.account_id, d.id\nFROM profiles.account_dashboard AS d\nWHERE d.is_default = true\nON CONFLICT (account_id) DO UPDATE\nSET dashboard_id = EXCLUDED.dashboard_id;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.17.0003.sql",
    "content": "-- Create a new dashboard, copy all the widgets from the default user to\n-- the dashboard, and set the new dashboard as the default dashboard\n-- for the newly created account.\nCREATE OR REPLACE FUNCTION create_new_dashboard() RETURNS trigger AS $$\n  DECLARE\n    new_dashboard_id INTEGER;\n  BEGIN\n    -- Insert dashboard\n    INSERT INTO profiles.account_dashboard (account_id, is_default, num_columns)\n      VALUES (NEW.id, TRUE, 3)\n      RETURNING id INTO new_dashboard_id;\n\n    -- Copy navlets from default user\n    INSERT INTO profiles.account_navlet (account, navlet, displayorder, col, preferences, dashboard_id)\n      SELECT NEW.id, navlet, displayorder, col, preferences, new_dashboard_id\n        FROM profiles.account_navlet WHERE account=0;\n\n    -- Insert into account_default_dashboard\n    INSERT INTO profiles.account_default_dashboard (account_id, dashboard_id)\n      VALUES (NEW.id, new_dashboard_id);\n\n    RETURN NULL;\n  END\n$$ LANGUAGE plpgsql;\n\n-- Drop the trigger to allow re-creation with updated create_new_dashboard function\nDROP TRIGGER IF EXISTS add_default_dashboard_on_account_create ON profiles.account;\n\n-- Create the trigger\nCREATE TRIGGER add_default_dashboard_on_account_create\n  AFTER INSERT ON profiles.account\n  FOR EACH ROW\n  EXECUTE PROCEDURE create_new_dashboard();\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.17.0005.sql",
    "content": "-- Add missing index on netboxentity.deviceid to speed up lookups by device\nDROP INDEX IF EXISTS netboxentity_deviceid_btree;\nCREATE INDEX netboxentity_deviceid_btree ON netboxentity (deviceid) WHERE deviceid IS NOT NULL;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.18.0501.sql",
    "content": "BEGIN;\n--\n-- Add field aliases to room and location\n--\nALTER TABLE \"room\" ADD COLUMN \"aliases\" jsonb DEFAULT '[]'::jsonb NOT NULL;\nALTER TABLE \"location\" ADD COLUMN \"aliases\" jsonb DEFAULT '[]'::jsonb NOT NULL;\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.18.0502.sql",
    "content": "-- Tables for django-allauth[mfa,socialaccount]\n\n-- account_emailaddress\n\nCREATE TABLE profiles.account_emailaddress (\n    id integer NOT NULL,\n    email character varying(254) NOT NULL,\n    verified boolean NOT NULL,\n    \"primary\" boolean NOT NULL,\n    user_id integer NOT NULL\n);\n\n\nALTER TABLE profiles.account_emailaddress ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.account_emailaddress_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.account_emailaddress\n    ADD CONSTRAINT account_emailaddress_pkey PRIMARY KEY (id);\n\n\nALTER TABLE ONLY profiles.account_emailaddress\n    ADD CONSTRAINT account_emailaddress_user_id_email_987c8728_uniq UNIQUE (user_id, email);\n\n\nCREATE INDEX account_emailaddress_email_03be32b2 ON profiles.account_emailaddress USING btree (email);\n\n\nCREATE INDEX account_emailaddress_email_03be32b2_like ON profiles.account_emailaddress USING btree (email varchar_pattern_ops);\n\n\nCREATE INDEX account_emailaddress_user_id_2c513194 ON profiles.account_emailaddress USING btree (user_id);\n\n\nCREATE UNIQUE INDEX unique_primary_email ON profiles.account_emailaddress USING btree (user_id, \"primary\") WHERE \"primary\";\n\n\nCREATE UNIQUE INDEX unique_verified_email ON profiles.account_emailaddress USING btree (email) WHERE verified;\n\n\nALTER TABLE ONLY profiles.account_emailaddress\n    ADD CONSTRAINT account_emailaddress_user_id_2c513194_fk_account_id FOREIGN KEY (user_id) REFERENCES profiles.account(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n\n-- account_emailconfirmation\n\nCREATE TABLE profiles.account_emailconfirmation (\n    id integer NOT NULL,\n    created timestamp with time zone NOT NULL,\n    sent timestamp with time zone,\n    key character varying(64) NOT NULL,\n    email_address_id integer NOT NULL\n);\n\n\nALTER TABLE profiles.account_emailconfirmation ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.account_emailconfirmation_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.account_emailconfirmation\n    ADD CONSTRAINT account_emailconfirmation_key_key UNIQUE (key);\n\n\nALTER TABLE ONLY profiles.account_emailconfirmation\n    ADD CONSTRAINT account_emailconfirmation_pkey PRIMARY KEY (id);\n\n\nCREATE INDEX account_emailconfirmation_email_address_id_5b7f8c58 ON profiles.account_emailconfirmation USING btree (email_address_id);\n\n\nCREATE INDEX account_emailconfirmation_key_f43612bd_like ON profiles.account_emailconfirmation USING btree (key varchar_pattern_ops);\n\n\nALTER TABLE ONLY profiles.account_emailconfirmation\n    ADD CONSTRAINT account_emailconfirm_email_address_id_5b7f8c58_fk_account_e FOREIGN KEY (email_address_id) REFERENCES profiles.account_emailaddress(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n\n-- mfa_authenticator\n\nCREATE TABLE profiles.mfa_authenticator (\n    id bigint NOT NULL,\n    type character varying(20) NOT NULL,\n    data jsonb NOT NULL,\n    user_id integer NOT NULL,\n    created_at timestamp with time zone NOT NULL,\n    last_used_at timestamp with time zone\n);\n\n\nALTER TABLE profiles.mfa_authenticator ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.mfa_authenticator_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.mfa_authenticator\n    ADD CONSTRAINT mfa_authenticator_pkey PRIMARY KEY (id);\n\n\nCREATE INDEX mfa_authenticator_user_id_0c3a50c0 ON profiles.mfa_authenticator USING btree (user_id);\n\n\nCREATE UNIQUE INDEX unique_authenticator_type ON profiles.mfa_authenticator USING btree (user_id, type) WHERE ((type)::text = ANY ((ARRAY['totp'::character varying, 'recovery_codes'::character varying])::text[]));\n\n\nALTER TABLE ONLY profiles.mfa_authenticator\n    ADD CONSTRAINT mfa_authenticator_user_id_0c3a50c0_fk_account_id FOREIGN KEY (user_id) REFERENCES profiles.account(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n\n-- socialaccount_socialaccount\n\nCREATE TABLE profiles.socialaccount_socialaccount (\n    id integer NOT NULL,\n    provider character varying(200) NOT NULL,\n    uid character varying(191) NOT NULL,\n    last_login timestamp with time zone NOT NULL,\n    date_joined timestamp with time zone NOT NULL,\n    extra_data jsonb NOT NULL,\n    user_id integer NOT NULL\n);\n\n\nALTER TABLE profiles.socialaccount_socialaccount ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.socialaccount_socialaccount_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialaccount\n    ADD CONSTRAINT socialaccount_socialaccount_pkey PRIMARY KEY (id);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialaccount\n    ADD CONSTRAINT socialaccount_socialaccount_provider_uid_fc810c6e_uniq UNIQUE (provider, uid);\n\n\nCREATE INDEX socialaccount_socialaccount_user_id_8146e70c ON profiles.socialaccount_socialaccount USING btree (user_id);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialaccount\n    ADD CONSTRAINT socialaccount_social_user_id_8146e70c_fk_account FOREIGN KEY (user_id) REFERENCES profiles.account(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n\n-- socialaccount_socialapp\n\nCREATE TABLE profiles.socialaccount_socialapp (\n    id integer NOT NULL,\n    provider character varying(30) NOT NULL,\n    name character varying(40) NOT NULL,\n    client_id character varying(191) NOT NULL,\n    secret character varying(191) NOT NULL,\n    key character varying(191) NOT NULL,\n    provider_id character varying(200) NOT NULL,\n    settings jsonb NOT NULL\n);\n\n\nALTER TABLE profiles.socialaccount_socialapp ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.socialaccount_socialapp_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialapp\n    ADD CONSTRAINT socialaccount_socialapp_pkey PRIMARY KEY (id);\n\n-- socialaccount_socialapp\n\n\nCREATE TABLE profiles.socialaccount_socialtoken (\n    id integer NOT NULL,\n    token text NOT NULL,\n    token_secret text NOT NULL,\n    expires_at timestamp with time zone,\n    account_id integer NOT NULL,\n    app_id integer\n);\n\n\nALTER TABLE profiles.socialaccount_socialtoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (\n    SEQUENCE NAME profiles.socialaccount_socialtoken_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1\n);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialtoken\n    ADD CONSTRAINT socialaccount_socialtoken_app_id_account_id_fca4e0ac_uniq UNIQUE (app_id, account_id);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialtoken\n    ADD CONSTRAINT socialaccount_socialtoken_pkey PRIMARY KEY (id);\n\n\nCREATE INDEX socialaccount_socialtoken_account_id_951f210e ON profiles.socialaccount_socialtoken USING btree (account_id);\n\n\nCREATE INDEX socialaccount_socialtoken_app_id_636a42d7 ON profiles.socialaccount_socialtoken USING btree (app_id);\n\n\nALTER TABLE ONLY profiles.socialaccount_socialtoken\n    ADD CONSTRAINT socialaccount_social_account_id_951f210e_fk_socialacc FOREIGN KEY (account_id) REFERENCES profiles.socialaccount_socialaccount(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n\n\nALTER TABLE ONLY profiles.socialaccount_socialtoken\n    ADD CONSTRAINT socialaccount_social_app_id_636a42d7_fk_socialacc FOREIGN KEY (app_id) REFERENCES profiles.socialaccount_socialapp(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.18.0503.sql",
    "content": "-- Grant web access to /account/ for authenticated users\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target)\n  SELECT 3, 2, '^/account/?' WHERE NOT EXISTS (\n    SELECT * FROM AccountGroupPrivilege WHERE accountgroupid = 3 AND privilegeid = 2 AND target = '^/account/?'\n  );\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.18.0505.sql",
    "content": "ALTER TABLE manage.auditlog_logentry ADD COLUMN actor_sortkey VARCHAR;\nALTER TABLE manage.auditlog_logentry ADD COLUMN object_sortkey VARCHAR;\nALTER TABLE manage.auditlog_logentry ADD COLUMN target_sortkey VARCHAR;\n\nCREATE INDEX auditlog_logentry_actor_sortkey ON manage.auditlog_logentry (actor_sortkey);\nCREATE INDEX auditlog_logentry_object_sortkey ON manage.auditlog_logentry (object_sortkey);\nCREATE INDEX auditlog_logentry_target_sortkey ON manage.auditlog_logentry (target_sortkey);\n"
  },
  {
    "path": "python/nav/models/sql/changes/sc.05.18.0506.sql",
    "content": "-- Backfill actor_sortkey from account\nUPDATE manage.auditlog_logentry le\nSET actor_sortkey = a.login\nFROM profiles.account a\nWHERE le.actor_model = 'account'\n  AND le.actor_pk = a.id::text\n  AND le.actor_sortkey IS NULL;\n\n-- Backfill object/target sortkeys from account\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = a.login\nFROM profiles.account a\nWHERE le.object_model = 'account'\n  AND le.object_pk = a.id::text\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = a.login\nFROM profiles.account a\nWHERE le.target_model = 'account'\n  AND le.target_pk = a.id::text\n  AND le.target_sortkey IS NULL;\n\n-- Backfill from netbox (sysname)\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = n.sysname\nFROM manage.netbox n\nWHERE le.object_model = 'netbox'\n  AND le.object_pk = n.netboxid::text\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = n.sysname\nFROM manage.netbox n\nWHERE le.target_model = 'netbox'\n  AND le.target_pk = n.netboxid::text\n  AND le.target_sortkey IS NULL;\n\n-- Backfill from interface (sysname:ifname, matching audit_logname format)\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = n.sysname || ':' || i.ifname\nFROM manage.interface i\nJOIN manage.netbox n ON i.netboxid = n.netboxid\nWHERE le.object_model = 'interface'\n  AND le.object_pk = i.interfaceid::text\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = n.sysname || ':' || i.ifname\nFROM manage.interface i\nJOIN manage.netbox n ON i.netboxid = n.netboxid\nWHERE le.target_model = 'interface'\n  AND le.target_pk = i.interfaceid::text\n  AND le.target_sortkey IS NULL;\n\n-- Backfill from room (id with optional description)\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = CASE WHEN r.descr != '' THEN r.roomid || ' (' || r.descr || ')' ELSE r.roomid END\nFROM manage.room r\nWHERE le.object_model = 'room'\n  AND le.object_pk = r.roomid\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = CASE WHEN r.descr != '' THEN r.roomid || ' (' || r.descr || ')' ELSE r.roomid END\nFROM manage.room r\nWHERE le.target_model = 'room'\n  AND le.target_pk = r.roomid\n  AND le.target_sortkey IS NULL;\n\n-- Backfill from location (id with optional description)\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = CASE WHEN l.descr != '' THEN l.locationid || ' (' || l.descr || ')' ELSE l.locationid END\nFROM manage.location l\nWHERE le.object_model = 'location'\n  AND le.object_pk = l.locationid\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = CASE WHEN l.descr != '' THEN l.locationid || ' (' || l.descr || ')' ELSE l.locationid END\nFROM manage.location l\nWHERE le.target_model = 'location'\n  AND le.target_pk = l.locationid\n  AND le.target_sortkey IS NULL;\n\n-- Backfill from org (id with optional description)\nUPDATE manage.auditlog_logentry le\nSET object_sortkey = CASE WHEN o.descr != '' THEN o.orgid || ' (' || o.descr || ')' ELSE o.orgid END\nFROM manage.org o\nWHERE le.object_model = 'org'\n  AND le.object_pk = o.orgid\n  AND le.object_sortkey IS NULL;\n\nUPDATE manage.auditlog_logentry le\nSET target_sortkey = CASE WHEN o.descr != '' THEN o.orgid || ' (' || o.descr || ')' ELSE o.orgid END\nFROM manage.org o\nWHERE le.target_model = 'org'\n  AND le.target_pk = o.orgid\n  AND le.target_sortkey IS NULL;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.0_beta10.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.0_beta9 to 3.0_beta10.\n *\n * The collection of memory information from devices has remained\n * unimplemented in NAV 3 until now, which prompted the addition of a\n * UNIQUE contraint to the mem table\n *\n * Connect to PostgreSQL as the postgres superuser and run this script\n * like this:\n *\n * psql -f 3.0_beta8.sql manage postgres\n *\n * Please, also run the updated snmpoid.sql script over again, like\n * this:\n *\n * psql -f snmpoid.sql manage postgres\n *\n*/\n\nBEGIN;\n-- Make sure the table is empty before we proceed\nDELETE FROM mem;\nALTER TABLE mem ADD CONSTRAINT mem_netboxid_key UNIQUE(netboxid, memtype, device);\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.0_beta7.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.0_beta6 to 3.0_beta7.  Connect to PostgreSQL as the\n * postgres superuser and run this script like this:\n *\n * psql -f 3.0_beta7.sql manage postgres\n *\n * Please, also run the updated snmpoid.sql script over again, like\n * this:\n *\n * psql -f snmpoid.sql manage postgres\n *\n * *!IMPORTANT!* The Syslog Analyzer has been reimplemented in this\n * release, and you must follow the procedure from the doc/sql/README\n * file to create the logger database, or you new NAV version will not\n * work.\n *\n*/\n\n\\c manage\n\nBEGIN;\nDROP TABLE port2off;\n\nCREATE TABLE cabling (\n  cablingid SERIAL PRIMARY KEY,\n  roomid VARCHAR(30) NOT NULL REFERENCES room ON UPDATE CASCADE ON DELETE CASCADE,\n  jack VARCHAR NOT NULL,\n  building VARCHAR NOT NULL,\n  targetroom VARCHAR NOT NULL,\n  descr VARCHAR,\n  category VARCHAR NOT NULL,\nUNIQUE(roomid,jack));\n\nCREATE TABLE patch (\n  patchid SERIAL PRIMARY KEY,\n  swportid INT4 NOT NULL REFERENCES swport ON UPDATE CASCADE ON DELETE CASCADE,\n  cablingid INT4 NOT NULL REFERENCES cabling ON UPDATE CASCADE ON DELETE CASCADE,\n  split VARCHAR NOT NULL DEFAULT 'no',\nUNIQUE(swportid,cablingid));\n\nALTER TABLE vp_netbox_grp_info ADD COLUMN hideicons BOOL;\nALTER TABLE vp_netbox_grp_info ALTER COLUMN hideicons SET DEFAULT false;\nUPDATE vp_netbox_grp_info SET hideicons=false where hideicons IS NULL;\nALTER TABLE vp_netbox_grp_info ALTER COLUMN hideicons SET NOT NULL;\nALTER TABLE vp_netbox_grp_info ADD COLUMN iconname VARCHAR;\n\n-- Typenames were wrong for two types, fix those here\nUPDATE type SET typename='catalyst297024TS' WHERE typename='c2970';\nUPDATE type SET typename='catalyst37xxStack' WHERE typename='c3750';\n\nCOMMIT;\n\n\n\\c navprofiles\n-- Fix previous typos in privilege assignment for the messages subsystem\nBEGIN;\nUPDATE AccountGroupPrivilege \n  SET   target='^/messages/(main\\\\.py|rss|historic|active|planned|view|maintenance)\\\\b' \n  WHERE target='^/messages/(rss|historic|active|planned|view|maintenance)\\\\b';\n\nUPDATE AccountGroupPrivilege \n  SET   target='^/messages/?$'\n  WHERE target='^/messages\\\\b';\nCOMMIT;\n\n\n\n\\echo **********************************************************\n\\echo * Have you remembered to create the new logger database? *\n\\echo **********************************************************\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.0_beta8.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.0_beta7 to 3.0_beta8.  \n *\n * A design fault and a programming error made it possible to assign\n * multiple netboxes to the same physical device (serial number), and\n * also multiple modules to the same physical device.  In the real\n * world, it is (or at least should be!) impossible for two physical\n * devices to have the same serial number.  We try to fix any\n * occurences of this problem in an existing NAV installation by\n * creating new, empty devices for each of the existing netbox entries\n * that refer to the same deviceids, and then reassigning the netboxes\n * to these new devices.  The same goes for modules.  When restarted,\n * the new getDeviceData should find the serial numbers of these\n * netboxes/modules and update the device entries appropriately.\n *\n * Please be aware, though, that this may have adverse side effects on\n * the device histories recorded in the NAV database - you are advised\n * to re-seed your NAV database for production purposes.\n *\n * Connect to PostgreSQL as the postgres superuser and run this script\n * like this:\n *\n * psql -f 3.0_beta8.sql manage postgres\n *\n * Please, also run the updated snmpoid.sql script over again, like\n * this:\n *\n * psql -f snmpoid.sql manage postgres\n *\n *\n*/\n\nBEGIN;\n-- First, we must eliminate all instances of duplicate device\n-- references in the netbox table.  We create new, empty device\n-- entries for the netboxes having duplicates.  Then we do the same\n-- for the module table.\n\\echo Finding duplicate device references in netbox\nSELECT netboxid, nextval ('public.device_deviceid_seq'::text) AS newdevid\nINTO TEMP TABLE netbox_reassignment\nFROM netbox\nWHERE deviceid IN (SELECT deviceid\n                   FROM netbox\n                   GROUP BY deviceid HAVING count(netboxid) > 1);\n\\echo Creating new devices\nINSERT INTO device SELECT newdevid FROM netbox_reassignment;\n\\echo Reassigning the netboxes to the new devices and adding the UNIQUE(deviceid) constraint to the netbox table\nUPDATE netbox SET deviceid = newdevid FROM netbox_reassignment d\nWHERE netbox.netboxid = d.netboxid;\nALTER TABLE netbox ADD CONSTRAINT netbox_deviceid_key UNIQUE(deviceid);\n\n\n\\echo Finding duplicate device references in module\nSELECT moduleid, nextval ('public.device_deviceid_seq'::text) AS newdevid\nINTO TEMP TABLE module_reassignment\nFROM module\nWHERE deviceid IN (SELECT deviceid\n                   FROM module\n                   GROUP BY deviceid HAVING count(moduleid) > 1);\n\\echo Creating new devices\nINSERT INTO device SELECT newdevid FROM module_reassignment;\n\\echo Reassigning the modules to the new devices and adding the UNIQUE(deviceid) constraint to the module table\nUPDATE module SET deviceid = newdevid FROM module_reassignment d\nWHERE module.moduleid = d.moduleid;\nALTER TABLE module ADD CONSTRAINT module_deviceid_key UNIQUE(deviceid);\n\n\n-- Fix poorly named column\nALTER TABLE gwport RENAME COLUMN ospf TO metric;\n\n-- subid field changes type\nALTER TABLE eventq RENAME COLUMN subid TO subid_old;\nALTER TABLE eventq ADD COLUMN subid VARCHAR;\nUPDATE eventq SET subid=subid_old;\nALTER TABLE eventq DROP COLUMN subid_old;\n\nALTER TABLE alertq RENAME COLUMN subid TO subid_old;\nALTER TABLE alertq ADD COLUMN subid VARCHAR;\nUPDATE alertq SET subid=subid_old;\nALTER TABLE alertq DROP COLUMN subid_old;\n\nALTER TABLE alerthist RENAME COLUMN subid TO subid_old;\nALTER TABLE alerthist ADD COLUMN subid VARCHAR;\nUPDATE alerthist SET subid=subid_old;\nALTER TABLE alerthist DROP COLUMN subid_old;\n\n-- Fix bug in default value (all events were set to table creation\n-- time)\nALTER TABLE eventq ALTER COLUMN time SET DEFAULT NOW ();\n\nINSERT INTO alerttype (eventtypeid,alerttype,alerttypedesc) VALUES\n  ('moduleState','moduleDownWarning','Warning sent before declaring the module down.');\n\nUPDATE alerttype \nSET alerttype='serialChanged', \n    alerttypedesc='Serial number for the device has changed.'\nWHERE eventtypeid='info' AND alerttype='deviceRecreated';\n\n-- New table\nCREATE TABLE alertqvar (\n  alertqid INT4 REFERENCES alertq ON UPDATE CASCADE ON DELETE CASCADE,\n  var VARCHAR NOT NULL,\n  val TEXT NOT NULL,\n  UNIQUE(alertqid, var) -- only one val per var per event\n);\nCREATE INDEX alertqvar_alertqid_btree ON alertqvar USING btree (alertqid);\n\n\n-- Redo the vlanPlot groups\nDELETE FROM vp_netbox_grp_info WHERE name IN ('Bynett', 'Kjernenett', 'Testnett');\nINSERT INTO vp_netbox_grp_info (vp_netbox_grp_infoid,name,hideicons) VALUES (0,'_Top',true);\n\n-- Reset table privileges, since we created a new table\nSELECT nav_grant('navread', false);\nSELECT nav_grant('navwrite', true);\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.0_rc1.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.0_beta9 to 3.0_beta10.\n *\n * The collection of memory information from devices has remained\n * unimplemented in NAV 3 until now, which prompted the addition of a\n * UNIQUE contraint to the mem table\n *\n * Connect to PostgreSQL as the postgres superuser and run this script\n * like this:\n *\n * psql -f 3.0_beta8.sql manage postgres\n *\n * Please, also run the updated snmpoid.sql script over again, like\n * this:\n *\n * psql -f snmpoid.sql manage postgres\n *\n * We also recommend to let Postgre clean and optimize the database\n *\n * vacuumdb --analyze --full -a\n *\n*/\n\nBEGIN;\n\nCREATE INDEX vlan_vlan_btree ON vlan USING btree (vlan);\nCREATE INDEX prefix_vlanid_btree ON prefix USING btree (vlanid);\nCREATE INDEX netbox_prefixid_btree ON netbox USING btree (prefixid);\nCREATE INDEX netboxsnmpoid_snmpoidid_btree ON netboxsnmpoid USING btree (snmpoidid);\nCREATE INDEX gwportprefix_gwportid_btree ON gwportprefix USING btree (gwportid);\nCREATE INDEX gwportprefix_prefixid_btree ON gwportprefix USING btree (prefixid);\nCREATE INDEX swportvlan_swportid_btree ON swportvlan USING btree (swportid);\nCREATE INDEX swportvlan_vlanid_btree ON swportvlan USING btree (vlanid);\nCREATE INDEX arp_prefixid_btree ON arp USING btree (prefixid);\n\nDROP VIEW netboxmac;\nCREATE VIEW netboxmac AS\n(SELECT DISTINCT ON (mac) netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.arpid = (SELECT arp.arpid FROM arp WHERE arp.ip=netbox.ip AND end_time='infinity' LIMIT 1)))\nUNION DISTINCT\n(SELECT DISTINCT ON (mac) module.netboxid,mac\n FROM arp\n JOIN gwportprefix gwp ON\n  (arp.ip=gwp.gwip AND (hsrp=true OR (SELECT COUNT(*) FROM gwportprefix WHERE gwp.prefixid=gwportprefix.prefixid AND hsrp=true) = 0))\n JOIN gwport USING(gwportid)\n JOIN module USING (moduleid)\n WHERE arp.end_time='infinity');\n\nCREATE VIEW prefixreport AS (\nSELECT host(netaddr),masklen(netaddr) as m,\n   vlan,count(gwip) as antgw,nettype,netaddr,netident,orgid,usageid,description,\n   (select active_ip_cnt from prefix_active_ip_cnt where prefix_active_ip_cnt .prefixid=prefix.prefixid) AS act,\n   prefix.prefixid,vlan.vlanid\n    FROM prefix\n    JOIN vlan USING(vlanid)\n    JOIN gwportprefix USING (prefixid)\n    JOIN gwport USING (gwportid)\n    GROUP BY netaddr,vlan,nettype,netident,vlan.orgid,usageid,description,act,prefix.prefixid,vlan.vlanid\n);\n\nCREATE VIEW netboxreport AS (\nSELECT roomid,sysname,ip,catid,\n  (select count(*) from netboxcategory where netboxcategory.netboxid=netbox.netboxid) AS sub,typename,orgid,up,\n  (select count(*) from module where module.netboxid=netbox.netboxid) AS modules,\n  (select count(*) from swport join module using(moduleid) where module.netboxid=netbox.netboxid) AS swport,\n  (select count(*) from gwport join module using(moduleid) where module.netboxid=netbox.netboxid) AS gwport,\n  'Mem'::varchar AS Mem,\n  (select count(*) from netboxsnmpoid where netboxsnmpoid.netboxid=netbox.netboxid) AS snmp,\n  val AS Function,netbox.netboxid,prefixid,typeid\n  FROM netbox join type using(typeid)\n  LEFT JOIN netboxinfo ON (netbox.netboxid=netboxinfo.netboxid AND var='function')\n);\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.1.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.0 to 3.1\n *\n * Connect to PostgreSQL as the postgres superuser or the nav database user\n * like this:\n *\n *  psql -f 3.1.0.sql manage <username>\n *\n * The new subsystem Arnold also needs a new database, while some vendors,\n * types and snmpoids have been added and/or updated.  Therefore you must read\n * doc/sql/README over again and make sure to follow its instructions on how\n * to create the arnold database and run the following scripts:\n *\n *   - arnold.sql\n *   - types.sql\n *   - snmpoid.sql\n *\n*/\n\n\\c manage\n\nBEGIN;\n\\echo Changing manage schema\n\nALTER TABLE snmpoid ADD COLUMN defaultfreq INT4;\nALTER TABLE snmpoid ALTER COLUMN defaultfreq SET DEFAULT 21600;\nUPDATE snmpoid SET defaultfreq=21600;\nALTER TABLE snmpoid ALTER COLUMN defaultfreq SET NOT NULL;\n\n-- This view gives the allowed vlan for a given hexstring i swportallowedvlan\nCREATE TABLE range (\n  num INT NOT NULL PRIMARY KEY\n);\nINSERT INTO range VALUES (0);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nINSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);\nDELETE FROM range WHERE num >= 1000;\n\nCREATE VIEW allowedvlan AS\n  (SELECT swportid,num AS allowedvlan FROM swportallowedvlan CROSS JOIN range\n    WHERE num < length(decode(hexstring,'hex'))*8 AND (CASE WHEN length(hexstring)=256\n    THEN get_bit(decode(hexstring,'hex'),(num/8)*8+7-(num%8))\n    ELSE get_bit(decode(hexstring,'hex'),(length(decode(hexstring,'hex'))*8-num+7>>3<<3)-8+(num%8))\n    END)=1);\n\nCREATE VIEW allowedvlan_both AS\n  (select swportid,swportid as swportid2,allowedvlan from allowedvlan ORDER BY allowedvlan) union\n  (select  swport.swportid,to_swportid as swportid2,allowedvlan from swport join allowedvlan\n    on (swport.to_swportid=allowedvlan.swportid) ORDER BY allowedvlan);\n\n\\echo Adding devBrowse as a subsystem to the event system\nINSERT INTO subsystem (name) VALUES ('devBrowse');\n\n\\echo Updating existing equipment types in your database\nUPDATE \"type\" SET vendorid='cisco', typename='cisco12416', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 12416 (GSR) Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.385';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1751', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Cisco 1751 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.326';\nUPDATE \"type\" SET vendorid='3com', typename='PS40', cdp='0', tftp='0', cs_at_vlan='0', chassis='1', frequency='3600', descr='Portstack 40 hub' WHERE sysobjectid='1.3.6.1.4.1.43.10.27.4.1';\nUPDATE \"type\" SET vendorid='3com', typename='SW1100', cdp=NULL, tftp=NULL, cs_at_vlan='0', chassis='1', frequency='3600', descr='Portswitch 1100' WHERE sysobjectid='1.3.6.1.4.1.43.10.27.4.1.2.1';\nUPDATE \"type\" SET vendorid='3com', typename='SW3300', cdp=NULL, tftp=NULL, cs_at_vlan='0', chassis='1', frequency='3600', descr='Portswitch 3300' WHERE sysobjectid='1.3.6.1.4.1.43.10.27.4.1.2.2';\nUPDATE \"type\" SET vendorid='3com', typename='SW9300', cdp=NULL, tftp=NULL, cs_at_vlan='0', chassis='1', frequency='3600', descr='Portswitch 9300' WHERE sysobjectid='1.3.6.1.4.1.43.1.16.2.2.2.1';\nUPDATE \"type\" SET vendorid='alcatel', typename='alcatel6800', cdp=NULL, tftp=NULL, cs_at_vlan='0', chassis='0', frequency='3600', descr='Alcatel Omniswitch 6800' WHERE sysobjectid='1.3.6.1.4.1.6486.800.1.1.2.1.6.1.1';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst2924XL', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 2924 XL switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.183';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst2924XLv', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 2924 XLv switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.217';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst295024G', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 2950G-24-E1 switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.428';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst295048G', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 295048G' WHERE sysobjectid='1.3.6.1.4.1.9.1.429';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst297024TS', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 2970' WHERE sysobjectid='1.3.6.1.4.1.9.1.561';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst3508GXL', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 3508 GXL switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.246';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst3524XL', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 3524 XL switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.248';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst3524tXLEn', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 3524tXLEn' WHERE sysobjectid='1.3.6.1.4.1.9.1.287';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst375024ME', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 3750 Metro' WHERE sysobjectid='1.3.6.1.4.1.9.1.574';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst37xxStack', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 3750' WHERE sysobjectid='1.3.6.1.4.1.9.1.516';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst4003', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 4003' WHERE sysobjectid='1.3.6.1.4.1.9.5.40';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst4006', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 4006 sup 2 L3 switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.448';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst4506', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 4506 sup4 L3 switch' WHERE sysobjectid='1.3.6.1.4.1.9.1.502';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst4510', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Catalyst 4510' WHERE sysobjectid='1.3.6.1.4.1.9.1.537';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst6509', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 6509' WHERE sysobjectid='1.3.6.1.4.1.9.1.283';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1000', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1000 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.40';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1003', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1003 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.41';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1005', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco 1005 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.49';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco10720', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 10720 (YB) Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.397';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco12016', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 12016 (GSR) Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.273';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco12404', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 12404 (GSR) Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.423';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1601', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1601 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.113';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1602', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1602 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.114';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1603', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1603 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.115';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1604', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1604 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.116';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco1721', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 1721 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.444';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2500', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 2500 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.13';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2501', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 2501 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.17';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2502', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 2502 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.18';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2503', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 2503 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.19';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2511', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 2511 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.27';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco4500', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 4500 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.14';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco3620', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 3620 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.122';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco3640', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco 3640 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.110';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco4000', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco 4000 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.7';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco4700', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco 4700 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.50';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7010', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 7010 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.12';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7204', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 7204 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.125';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7204VXR', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 7204VXR Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.223';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7206', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco 7206 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.108';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7206VXR', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 7206VXR Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.222';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7505', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 7505 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.48';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7507', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Cisco 7507 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.45';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco7513', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 7513 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.46';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoAIRAP1130', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Cisco AP 1130' WHERE sysobjectid='1.3.6.1.4.1.9.1.618';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc2980g', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 2980g' WHERE sysobjectid='1.3.6.1.4.1.9.5.49';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoAIRAP1210', cdp='1', tftp=NULL, cs_at_vlan='0', chassis='1', frequency='3600', descr='Cisco AP 1200' WHERE sysobjectid='1.3.6.1.4.1.9.1.525';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoAIRAP350IOS', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco AP 350' WHERE sysobjectid='1.3.6.1.4.1.9.1.552';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoAS5200', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco AS5200' WHERE sysobjectid='1.3.6.1.4.1.9.1.109';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoVPN3030', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco 3030 VPN concentrator' WHERE sysobjectid='1.3.6.1.4.1.3076.1.2.1.1.1.2';\nUPDATE \"type\" SET vendorid='cisco', typename='ciscoWSX5302', cdp='1', tftp='1', cs_at_vlan=NULL, chassis='1', frequency='3600', descr='Cisco RSM Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.168';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc2926', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 2926 switch' WHERE sysobjectid='1.3.6.1.4.1.9.5.35';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc2980ga', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 2980ga' WHERE sysobjectid='1.3.6.1.4.1.9.5.51';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc4006', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 4006 switch' WHERE sysobjectid='1.3.6.1.4.1.9.5.46';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc5000', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 5000 switch' WHERE sysobjectid='1.3.6.1.4.1.9.5.7';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc5500', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 5500 switch' WHERE sysobjectid='1.3.6.1.4.1.9.5.17';\nUPDATE \"type\" SET vendorid='cisco', typename='wsc5505', cdp='1', tftp='1', cs_at_vlan='1', chassis='1', frequency='3600', descr='Catalyst 5505 switch' WHERE sysobjectid='1.3.6.1.4.1.9.5.34';\nUPDATE \"type\" SET vendorid='cisco', typename='cisco2514', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Cisco 2514 Router' WHERE sysobjectid='1.3.6.1.4.1.9.1.30';\nUPDATE \"type\" SET vendorid='cisco', typename='catalyst295024', cdp='1', tftp='1', cs_at_vlan='1', chassis='0', frequency='3600', descr='Catalyst 2950-24' WHERE sysobjectid='1.3.6.1.4.1.9.1.324';\nUPDATE \"type\" SET vendorid='hp', typename='hp2524', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='ProCurve Switch 2524' WHERE sysobjectid='1.3.6.1.4.1.11.2.3.7.11.19';\nUPDATE \"type\" SET vendorid='hp', typename='hp2626A', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='ProCurve Switch 2626 (J4900A)' WHERE sysobjectid='1.3.6.1.4.1.11.2.3.7.11.34';\nUPDATE \"type\" SET vendorid='hp', typename='hp2626B', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='ProCurve Switch 2626 (J4900B)' WHERE sysobjectid='1.3.6.1.4.1.11.2.3.7.11.45';\nUPDATE \"type\" SET vendorid='hp', typename='hp2650A', cdp='1', tftp='1', cs_at_vlan='0', chassis='1', frequency='3600', descr='ProCurve Switch 2650 (J4899A)' WHERE sysobjectid='1.3.6.1.4.1.11.2.3.7.11.29';\nUPDATE \"type\" SET vendorid='hp', typename='hp2650B', cdp='1', tftp='1', cs_at_vlan='0', chassis='0', frequency='3600', descr='ProCurve Switch 2650 (J4899B)' WHERE sysobjectid='1.3.6.1.4.1.11.2.3.7.11.44';\nUPDATE \"type\" SET vendorid='nortel', typename='nortel5510', cdp='0', tftp='0', cs_at_vlan='0', chassis='0', frequency='3600', descr='Nortel Baystack 5510-48T Switch' WHERE sysobjectid='1.3.6.1.4.1.45.3.53.1';\n\\echo Don't forget to run types.sql and snmpoid.sql to insert new vendors, types and snmp OIDs into your database\nCOMMIT;\n\n\\echo Granting rights to navread and navwrite for new tables.\n\\echo If you're running a setup without these users, you can safely ignore \n\\echo errors about their non-existance.\nSELECT nav_grant('navread', false);\nSELECT nav_grant('navwrite', true);\n\n\\c navprofiles\nBEGIN;\n\\echo Adding new system account groups to the navprofiles database\nINSERT INTO AccountGroup (id, name, descr) VALUES (3, 'Authenticated users', 'Any authenticated user (logged in)');\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.2.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.1 to 3.2\n *\n * Run the script as the nav database user like this:\n *\n *  psql -f 3.2.0.sql manage nav\n *\n * Also make sure to run types.sql and snmpoid.sql to make sure your type and\n * snmpoid tables are up-to-date:\n *\n *  psql -f types.sql manage nav\n *  psql -f snmpoid.sql manage nav\n *\n*/\n\n\\c manage\n------------------------------------------------------------------------------\n-- Tables for the rewritten messages/maintenance subsystems\n------------------------------------------------------------------------------\nBEGIN;\n\nCREATE TABLE message (\n    messageid SERIAL PRIMARY KEY,\n    title VARCHAR NOT NULL,\n    description TEXT NOT NULL,\n    tech_description TEXT,\n    publish_start TIMESTAMP,\n    publish_end TIMESTAMP,\n    author VARCHAR NOT NULL,\n    last_changed TIMESTAMP,\n    replaces_message INT REFERENCES message,\n    replaced_by INT REFERENCES message\n);\n\nCREATE OR REPLACE FUNCTION message_replace() RETURNS TRIGGER AS '\n    DECLARE\n        -- Old replaced_by value of the message beeing replaced\n        old_replaced_by INTEGER;\n    BEGIN\n        -- Remove references that are no longer correct\n        IF TG_OP = ''UPDATE'' THEN\n            IF OLD.replaces_message <> NEW.replaces_message OR\n                (OLD.replaces_message IS NOT NULL AND NEW.replaces_message IS NULL) THEN\n                EXECUTE ''UPDATE message SET replaced_by = NULL WHERE messageid = ''\n                || quote_literal(OLD.replaces_message);\n            END IF;\n        END IF;\n\n        -- It does not replace any message, exit\n        IF NEW.replaces_message IS NULL THEN\n            RETURN NEW;\n        END IF;\n\n        -- Update the replaced_by field of the replaced message with a\n        -- reference to the replacer\n        SELECT INTO old_replaced_by replaced_by FROM message\n            WHERE messageid = NEW.replaces_message;\n        IF old_replaced_by <> NEW.messageid OR old_replaced_by IS NULL THEN\n            EXECUTE ''UPDATE message SET replaced_by = ''\n            || quote_literal(NEW.messageid)\n            || '' WHERE messageid = ''\n            || quote_literal(NEW.replaces_message);\n        END IF;\n\n        RETURN NEW;\n        END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_message_replace\n\tAFTER INSERT OR UPDATE ON message\n\tFOR EACH ROW\n\tEXECUTE PROCEDURE message_replace();\n\nCREATE OR REPLACE VIEW message_with_replaced AS\n    SELECT\n        m.messageid, m.title,\n\tm.description, m.tech_description,\n        m.publish_start, m.publish_end, m.author, m.last_changed,\n        m.replaces_message, m.replaced_by,\n        rm.title AS replaces_message_title,\n        rm.description AS replaces_message_description,\n        rm.tech_description AS replaces_message_tech_description,\n        rm.publish_start AS replaces_message_publish_start,\n        rm.publish_end AS replaces_message_publish_end,\n        rm.author AS replaces_message_author,\n        rm.last_changed AS replaces_message_last_changed,\n        rb.title AS replaced_by_title,\n        rb.description AS replaced_by_description,\n        rb.tech_description AS replaced_by_tech_description,\n        rb.publish_start AS replaced_by_publish_start,\n        rb.publish_end AS replaced_by_publish_end,\n        rb.author AS replaced_by_author,\n        rb.last_changed AS replaced_by_last_changed\n    FROM\n    \tmessage m LEFT JOIN message rm ON (m.replaces_message = rm.messageid)\n    \tLEFT JOIN message rb ON (m.replaced_by = rb.messageid);\n\nCREATE TABLE maint_task (\n    maint_taskid SERIAL PRIMARY KEY,\n    maint_start TIMESTAMP NOT NULL,\n    maint_end TIMESTAMP NOT NULL,\n    description TEXT NOT NULL,\n    author VARCHAR NOT NULL,\n    state VARCHAR NOT NULL\n);\n\nCREATE TABLE maint_component (\n    maint_taskid INT NOT NULL REFERENCES maint_task ON UPDATE CASCADE ON DELETE CASCADE,\n    key VARCHAR NOT NULL,\n    value VARCHAR NOT NULL,\n    PRIMARY KEY (maint_taskid, key, value)\n);\n\nCREATE TABLE message_to_maint_task (\n    messageid INT NOT NULL REFERENCES message ON UPDATE CASCADE ON DELETE CASCADE,\n    maint_taskid INT NOT NULL REFERENCES maint_task ON UPDATE CASCADE ON DELETE CASCADE,\n    PRIMARY KEY (messageid, maint_taskid)\n);\n\nCREATE OR REPLACE VIEW maint AS\n    SELECT * FROM maint_task NATURAL JOIN maint_component;\n\n-- Drop the tables and view of the old messages system.\nDROP VIEW maintenance_view;\nDROP TABLE maintenance;\nDROP TABLE emotd_related;\nDROP TABLE emotd;\n\n-- Other schema changes:\nALTER TABLE gwport ADD COLUMN portname VARCHAR;\n\nALTER TABLE device ADD COLUMN discovered TIMESTAMP;\nALTER TABLE device ALTER COLUMN discovered SET DEFAULT NOW();\nALTER TABLE netbox ADD COLUMN discovered TIMESTAMP;\nALTER TABLE netbox ALTER COLUMN discovered SET DEFAULT NOW();\n\n-- Drop obsolete views, the report system has supported the complex SQL\n-- queries they represent for a long time.\nDROP VIEW prefixreport;\nDROP VIEW netboxreport;\n\n-- Redefine the prefix_active_ip_cnt view, as the prefix foreign key of the\n-- arp table may not always be reliably set.  Unfortunately, this is slower.\nCREATE OR REPLACE VIEW prefix_active_ip_cnt AS\n(SELECT prefix.prefixid, COUNT(arp.ip) AS active_ip_cnt\n FROM prefix\n LEFT JOIN arp ON arp.ip << prefix.netaddr\n WHERE arp.end_time = 'infinity'\n GROUP BY prefix.prefixid);\n\n-- Give proper names to netbox foreign keys (and add cascading to a couple of them)\nALTER TABLE netbox DROP CONSTRAINT \"$1\";\nALTER TABLE netbox DROP CONSTRAINT \"$2\";\nALTER TABLE netbox DROP CONSTRAINT \"$3\";\nALTER TABLE netbox DROP CONSTRAINT \"$4\";\nALTER TABLE netbox DROP CONSTRAINT \"$5\";\nALTER TABLE netbox DROP CONSTRAINT \"$6\";\n\nALTER TABLE netbox ADD CONSTRAINT netbox_room_fkey   FOREIGN KEY (roomid)   REFERENCES room ON UPDATE CASCADE;\nALTER TABLE netbox ADD CONSTRAINT netbox_type_fkey   FOREIGN KEY (typeid)   REFERENCES type ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE netbox ADD CONSTRAINT netbox_device_fkey FOREIGN KEY (deviceid) REFERENCES device ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE netbox ADD CONSTRAINT netbox_cat_fkey    FOREIGN KEY (catid)    REFERENCES cat ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE netbox ADD CONSTRAINT netbox_org_fkey    FOREIGN KEY (orgid)    REFERENCES org ON UPDATE CASCADE;\nALTER TABLE netbox ADD CONSTRAINT netbox_prefix_fkey FOREIGN KEY (prefixid) REFERENCES prefix ON UPDATE CASCADE ON DELETE SET null;\n\n---------------------------\n--- manage Data changes ---\n---------------------------\nUPDATE nettype SET edit=FALSE WHERE nettypeid='static';\n\nUPDATE snmpoid \nSET oidkey='hpFwVer', descr='Firmware revision number' \nWHERE snmpoid = '1.3.6.1.4.1.11.2.14.11.5.1.1.4.0'\n  AND oidkey='hpHwVer';\n\nINSERT INTO subsystem (name) VALUES ('maintenance');\nDELETE FROM subsystem WHERE name = 'emotd';\n\nCOMMIT;\n\n----------------------------\n--- logger Index changes ---\n----------------------------\n\\c logger\nBEGIN;\nDROP INDEX message_type_hash;\nDROP INDEX message_origin_hash;\nCREATE INDEX message_type_btree ON message USING btree (type);\nCREATE INDEX message_origin_btree ON message USING btree (origin);\nCOMMIT;\n\n--------------------------------\n--- navprofiles Data changes ---\n--------------------------------\n\\c navprofiles\nBEGIN;\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/about/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/js/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/style/.*');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/messages/(active|historic|planned|view|rss)\\\\b');\nINSERT INTO AccountGroupPrivilege (accountgroupid, privilegeid, target) VALUES (2, 2, '^/maintenance/(calendar|active|historic|planned|view)\\\\b');\n-- Remove old message subsystem ACL-s\nDELETE FROM AccountGroupPrivilege WHERE accountgroupid = 2 AND privilegeid = 2 AND target = '^/messages/?$';\nDELETE FROM AccountGroupPrivilege WHERE accountgroupid = 2 AND privilegeid = 2 AND target = '^/messages/(main\\\\.py|rss|historic|active|planned|view|maintenance)\\\\b';\nCOMMIT;\n\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.3.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.2 to 3.3.  THIS SCRIPT WILL NOT WORK ON POSTGRESQL\n * VERSIONS PRIOR TO 8.0.\n *\n * Run the script as the nav database user like this:\n *\n *  psql -f 3.3.0.sql manage nav\n *\n * Also make sure to run types.sql and snmpoid.sql to make sure your type and\n * snmpoid tables are up-to-date:\n *\n *  psql -f types.sql manage nav\n *  psql -f snmpoid.sql manage nav\n *\n*/\n\n\\c manage\nBEGIN;\nLOCK TABLE arp IN ACCESS EXCLUSIVE MODE;\nLOCK TABLE cam IN ACCESS EXCLUSIVE MODE;\n\n-- Close invalid moduleState states in alerthist.\nUPDATE alerthist SET end_time=now()\nWHERE eventtypeid = 'moduleState' \n  AND subid IS NOT NULL\n  AND subid NOT IN (SELECT moduleid FROM module) \n  AND end_time = 'infinity';\n\n-- New rule to automatically close module related alert states when modules\n-- are deleted.\nCREATE OR REPLACE RULE close_alerthist_modules AS ON DELETE TO module\n  DO UPDATE alerthist SET end_time=NOW() \n     WHERE eventtypeid IN ('moduleState', 'linkState')\n       AND end_time='infinity'\n       AND deviceid=OLD.deviceid;\n\n-- Added constraint to prevent accidental duplicates in the alerttype table.\nALTER TABLE alerttype ADD CONSTRAINT alerttype_eventalert_unique UNIQUE\n(eventtypeid, alerttype);\n\n-- Renamed eventengine source from deviceTracker to deviceManagement\nUPDATE subsystem SET name = 'deviceManagement' WHERE name = 'deviceTracker';\n-- Add snmptrapd subsystem\nINSERT INTO subsystem (SELECT 'snmptrapd' \n                       WHERE NOT EXISTS (SELECT * \n                                         FROM subsystem\n                                         WHERE name='snmptrapd'));\n\n-- Create index on alerthist.start_time\nCREATE INDEX alerthist_start_time_btree ON alerthist USING btree (start_time);\n\n\n-- Now, change the datatype of cam.mac and arp.mac from CHAR(12) to MACADDR.\n-- Also change the datatype of cam.port from INT to VARCHAR.\n-- This operation will only work on PostgreSQL 8 and newer.  An alternative\n-- way to convert the tables, suitable for PostgreSQL 7.4, can be found in the\n-- comments below (NOTE however, that using this method on PostgreSQL 7.4 may\n-- take several hours to complete, depending on the size of your cam/arp\n-- tables!)\n\n-- First, the cam table\nALTER TABLE cam ALTER COLUMN mac TYPE macaddr USING mac::macaddr;\nALTER TABLE cam ALTER COLUMN port TYPE varchar;\n\n-- -- Alternative method for PostgreSQL 7.4:\n-- BEGIN;\n-- LOCK TABLE cam IN ACCESS EXCLUSIVE MODE;\n-- ALTER TABLE cam ADD COLUMN mac2 macaddr;\n-- ALTER TABLE cam ADD COLUMN port2 VARCHAR;\n-- UPDATE cam SET mac2 = mac::text::macaddr, port2 = port::VARCHAR;\n-- ALTER TABLE cam DROP COLUMN mac;\n-- ALTER TABLE cam DROP COLUMN port;\n-- ALTER TABLE cam RENAME COLUMN mac2 TO mac;\n-- ALTER TABLE cam RENAME COLUMN port2 TO port;\n-- ALTER TABLE cam ALTER COLUMN mac SET NOT NULL;\n-- CREATE INDEX cam_mac_btree ON cam USING btree (mac);\n-- ALTER TABLE cam ADD CONSTRAINT cam_unique UNIQUE (netboxid,sysname,module,port,mac,start_time);\n-- END;\n\n-- Alter the port value for all open cam entries, set it to be the interface name.\nUPDATE cam SET port=interface FROM swport JOIN module USING (moduleid) WHERE cam.netboxid=module.netboxid AND swport.ifindex=cam.ifindex AND end_time='infinity';\n\n-- Then the arp table, but we need to drop the netboxmac view first, since it\n-- depends on the mac column\nDROP VIEW netboxmac;\nALTER TABLE arp ALTER COLUMN mac TYPE macaddr USING mac::macaddr;\n\n\n-- -- Alternative method for PostgreSQL 7.4 (still need to drop netboxmac first!)\n-- BEGIN;\n-- LOCK TABLE arp IN ACCESS EXCLUSIVE MODE;\n-- ALTER TABLE arp ADD COLUMN mac2 macaddr;\n-- UPDATE arp SET mac2 = mac::text::macaddr;\n-- ALTER TABLE arp DROP COLUMN mac;\n-- ALTER TABLE arp RENAME COLUMN mac2 TO mac;\n-- ALTER TABLE arp ALTER COLUMN mac SET NOT NULL;\n-- CREATE INDEX arp_mac_btree ON arp USING btree (mac);\n-- END;\n\n-- Recreate the netboxmac view.\nCREATE VIEW netboxmac AS  \n(SELECT DISTINCT ON (mac) netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.arpid = (SELECT arp.arpid FROM arp WHERE arp.ip=netbox.ip AND end_time='infinity' LIMIT 1)))\nUNION DISTINCT\n(SELECT DISTINCT ON (mac) module.netboxid,mac\n FROM arp\n JOIN gwportprefix gwp ON\n  (arp.ip=gwp.gwip AND (hsrp=true OR (SELECT COUNT(*) FROM gwportprefix WHERE gwp.prefixid=gwportprefix.prefixid AND hsrp=true) = 0))\n JOIN gwport USING(gwportid)\n JOIN module USING (moduleid)\n WHERE arp.end_time='infinity');\n\n-- Performed the following unscientific timings on a AMD Athlon 64 X2 Dual\n-- Core Processor 3800+ with 1GB RAM and a single SATA disk, converting\n-- arp.mac and cam.mac from char(12) to macaddr data type.  The cam table\n-- contained 1,432,162 rows, the arp table 753,499 rows:\n--\n-- The acrobatic PostgreSQL 7.4 method: 2h39m16s\n-- The simpler PostgreSQL 8.x method:   0h04m48s\n\n\n-- Rule to automatically close arp entries related to a given prefix\nCREATE RULE close_arp_prefices AS ON DELETE TO prefix\n  DO UPDATE arp SET end_time=NOW(), prefixid=NULL \n     WHERE prefixid=OLD.prefixid;\n\nEND;\n\n\\c navprofiles\nBEGIN;\n\n-- Fix error in sysname matching\nUPDATE matchfield SET valueid='netbox.sysname' WHERE matchfieldid=15;\n\nEND;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.4.0.sql",
    "content": "/*\n *\n * This preliminary SQL script is designed to upgrade your NAV database from\n * version 3.3 to the current trunk revision.  Please update this with every\n * change you make to the database initialization scripts.  It will eventually\n * become the update script for the next release.\n *\n * Also, if you are keeping your installation in sync with trunk, you should\n * watch this file for changes and run them when updating (check the diffs!)\n *\n * Connect to PostgreSQL as the postgres superuser or the nav database user\n * like this:\n *\n *  psql -f trunk.sql manage <username>\n *\n*/\n\n-- Clean install of 3.3.0 caused this rule never to be created.  Recreate it\n-- here for those who started out with clean 3.3.0 installs.\n-- NAV 3.3.1 also contained bug SF#1899431 in this rule, which has\n-- been fixed here, and should be applied when upgrading.\nCREATE OR REPLACE RULE close_arp_prefices AS ON DELETE TO prefix\n  DO UPDATE arp SET end_time=NOW(), prefixid=NULL \n     WHERE prefixid=OLD.prefixid AND end_time='infinity';\n\n-- Replace the netboxid_null_upd_end_time trigger, which has been\n-- faulty the last six years.\nCREATE OR REPLACE FUNCTION netboxid_null_upd_end_time () RETURNS trigger AS\n  'BEGIN\n     IF old.netboxid IS NOT NULL AND new.netboxid IS NULL \n        AND new.end_time = ''infinity'' THEN\n       new.end_time = current_timestamp;\n     END IF;\n     RETURN new;\n   end' LANGUAGE plpgsql;\n\n-- Django needs a single column it can treat as primary key :-(\nALTER TABLE netboxcategory ADD COLUMN id SERIAL;\nALTER TABLE netbox_vtpvlan ADD COLUMN id SERIAL PRIMARY KEY;\nALTER TABLE netboxsnmpoid ADD COLUMN id SERIAL PRIMARY KEY;\nALTER TABLE serviceproperty ADD COLUMN id SERIAL;\nALTER TABLE maint_component ADD COLUMN id SERIAL;\nALTER TABLE message_to_maint_task ADD COLUMN id SERIAL;\nALTER TABLE alertqmsg ADD COLUMN id SERIAL PRIMARY KEY;\nALTER TABLE alertqvar ADD COLUMN id SERIAL PRIMARY KEY;\nALTER TABLE alerthistmsg ADD COLUMN id SERIAL PRIMARY KEY;\nALTER TABLE alerthistvar ADD COLUMN id SERIAL PRIMARY KEY;\n\n-- Both old IP Device Center and new IP Device Info does lots of selects on cam\n-- with netboxid and ifindex in the where clause\nCREATE INDEX cam_netboxid_ifindex_end_time_btree ON cam USING btree (netboxid, ifindex, end_time);\n\n-- Allow authenticated users access to the ipdevinfo tool\nUPDATE accountgroupprivilege SET target = '^/(preferences|status|navAdmin|report|browse|stats|cricket|machinetracker|ipinfo|l2trace|logger|alertprofiles|ipdevinfo)/?' WHERE target = '^/(preferences|status|navAdmin|report|browse|stats|cricket|machinetracker|ipinfo|l2trace|logger|alertprofiles)/?';\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.4.2.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.4.0 or 3.4.1 to 3.4.2.  \n *\n * This script is only necessary if either:\n *\n * 1. You installed NAV 3.4 from scratch, creating a new database.\n *\n *  or\n *\n * 2. You installed NAV on a PostgreSQL version 8.3 database.\n *\n *\n * NAV 3.4.1 and 3.4.1 were shipped with a manage.sql containing a\n * couple of errors in the order of which relations and rules were\n * created, and also a small typecasting error only present on\n * PostgreSQL 8.3 and newer (See SF#2023345 for more details).\n *\n *\n * Run the script as the nav database user like this:\n *\n *  psql -f 3.4.2.sql manage nav\n *\n*/\n\nBEGIN;\n\n-- Redefine these two rules to make sure that they actually are\n-- present.\nCREATE OR REPLACE RULE netbox_close_arp AS ON DELETE TO netbox\n  DO UPDATE arp SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\nCREATE OR REPLACE RULE netbox_close_cam AS ON DELETE TO netbox\n  DO UPDATE cam SET end_time=NOW()\n     WHERE netboxid=OLD.netboxid AND end_time='infinity';\n\n\n-- Redefine this rule to make sure it is present also on a PostgreSQL\n-- 8.3 database.\nCREATE OR REPLACE RULE rrdfile_deleter AS\n    ON DELETE TO service\n    DO DELETE FROM rrd_file\n        WHERE key='serviceid' AND value=old.serviceid::text;\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.5.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.4 to NAV 3.5.0.\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n *\n * This upgrade script assumes you have merged your NAV databases into\n * a single, multi-namespaced database.  If you haven't, please read\n * the release notes for NAV 3.5 and the instructions in\n * doc/sql/upgrades/README .\n *\n * This script merges the upgrade scripts of all the 3.5 beta\n * releases.  If you were beta testing 3.5, use those scripts\n * separately instead.\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * Connect to PostgreSQL and run this script as the nav database owner\n * like this:\n *\n *  psql -f 3.5.0.sql <db_name> <username>\n *\n * When you are done, make sure the database search path is correct,\n * by running the new program navschema.py.  Otherwise your radius\n * module might not work.\n*/\n\nBEGIN;\nSET client_min_messages TO warning;\n\n-- Rename logger tables to avoid naming confusion with manage schema.\nALTER TABLE logger.message RENAME TO log_message;\n\nALTER TABLE logger.message_id_seq RENAME TO log_message_id_seq;\nALTER INDEX logger.message_pkey RENAME TO log_message_pkey;\nALTER INDEX logger.message_origin_btree RENAME TO log_message_origin_btree;\nALTER INDEX logger.message_time_btree RENAME TO log_message_time_btree;\nALTER INDEX logger.message_type_btree RENAME TO log_message_type_btree;\n\nALTER TABLE logger.type RENAME TO log_message_type;\nALTER TABLE logger.type_type_seq RENAME TO log_message_type_type_seq;\nALTER INDEX logger.type_pkey RENAME TO log_message_type_pkey;\nALTER INDEX logger.type_priority_key RENAME TO log_message_type_priority_key;\n\n-- In lack of an ALTER TABLE RENAME CONSTRAINT in pg8.1 we drop and\n-- re-create constraints.  Do this to make sure constraints are named\n-- according to the table name changes above.\nALTER TABLE logger.log_message DROP CONSTRAINT message_newpriority_fkey;\nALTER TABLE logger.log_message DROP CONSTRAINT message_origin_fkey;\nALTER TABLE logger.log_message DROP CONSTRAINT message_type_fkey;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_newpriority_fkey\n  FOREIGN KEY (newpriority) REFERENCES priority (priority) ON UPDATE CASCADE ON DELETE SET NULL;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_origin_fkey\n  FOREIGN KEY (origin) REFERENCES origin (origin) ON UPDATE CASCADE ON DELETE SET NULL;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_type_fkey\n  FOREIGN KEY (type) REFERENCES log_message_type (type) ON UPDATE CASCADE ON DELETE SET NULL;\n\nALTER TABLE logger.log_message_type DROP CONSTRAINT type_priority_fkey;\nALTER TABLE logger.log_message_type ADD CONSTRAINT type_priority_fkey\n  FOREIGN KEY (priority) REFERENCES priority(priority) ON UPDATE CASCADE ON DELETE SET NULL;\n\n-- combined index for quick lookups when expiring old records.\nCREATE INDEX log_message_expiration_btree ON logger.log_message USING btree(newpriority, time);\n\n-- Drop obsolete vlanPlot tables\nDROP TABLE vp_netbox_xy;\nDROP TABLE vp_netbox_grp;\nDROP TABLE vp_netbox_grp_info;\n\n-- Add closed flag to alertq\nALTER TABLE alertq ADD closed BOOLEAN;\n\n--------------------------------------------------------------------------------\n-- profiles clean-up:\n-- * Rename tables in profiles so they all are english.\n-- * Rename indexes.\n-- * Add id column to tables that django can use as primary key.\n-- * Drop keys and re-add them with new name.\n-- * Explicitly name keys/indexes/sequences. Use what Postgres would have named\n--   them by default\n-- * Delete \"old\" alerts that where keept for debuging\n\nDELETE FROM alertq WHERE alertqid <= (SELECT lastalertqid FROM alertengine LIMIT 1);\n\n-- Drop some unused tables\nDROP TABLE defaultutstyr;\nDROP TABLE defaultfilter;\nDROP TABLE brukerrettighet;\nDROP TABLE logg;\nDROP TABLE alertengine;\nDROP SEQUENCE logg_id_seq;\n\n-- Remove copy_default_preferences trigger\nDROP TRIGGER insert_account ON account;\nDROP FUNCTION copy_default_preferences();\n\n-- We wan't english names for everything so here goes:\nALTER TABLE accountingroup RENAME TO accountgroup_accounts;\nALTER TABLE accountgroup_accounts RENAME accountid TO account_id;\nALTER TABLE accountgroup_accounts RENAME groupid TO accountgroup_id;\n\nALTER TABLE rettighet RENAME TO filtergroup_group_permission;\nALTER TABLE filtergroup_group_permission RENAME utstyrgruppeid TO filtergroup_id;\nALTER TABLE filtergroup_group_permission RENAME accountgroupid TO accountgroup_id;\n\nALTER TABLE alarmadresse RENAME TO alertaddress;\nALTER TABLE alertaddress RENAME adresse TO address;\n\nALTER TABLE preference RENAME TO alertpreference;\nALTER TABLE alertpreference DROP COLUMN queuelength;\n\nALTER TABLE brukerprofil RENAME TO alertprofile;\nALTER TABLE alertprofile RENAME navn TO name;\nALTER TABLE alertprofile RENAME tid TO daily_dispatch_time;\nALTER TABLE alertprofile RENAME ukedag TO weekly_dispatch_day;\nALTER TABLE alertprofile RENAME uketid TO weekly_dispatch_time;\n\nALTER TABLE tidsperiode RENAME TO timeperiod;\nALTER TABLE timeperiod RENAME brukerprofilid TO alert_profile_id;\nALTER TABLE timeperiod RENAME starttid TO start_time;\nALTER TABLE timeperiod RENAME helg TO valid_during;\n\nALTER TABLE varsle RENAME TO alertsubscription;\nALTER TABLE alertsubscription RENAME alarmadresseid TO alert_address_id;\nALTER TABLE alertsubscription RENAME tidsperiodeid TO time_period_id;\nALTER TABLE alertsubscription RENAME utstyrgruppeid TO filter_group_id;\nALTER TABLE alertsubscription RENAME vent TO subscription_type;\nALTER TABLE alertsubscription ADD ignore_closed_alerts BOOLEAN DEFAULT false;\n\nALTER TABLE gruppetilfilter RENAME TO filtergroupcontent;\nALTER TABLE filtergroupcontent RENAME inkluder TO include;\nALTER TABLE filtergroupcontent RENAME positiv TO positive;\nALTER TABLE filtergroupcontent RENAME prioritet TO priority;\nALTER TABLE filtergroupcontent RENAME utstyrfilterid TO filter_id;\nALTER TABLE filtergroupcontent RENAME utstyrgruppeid TO filter_group_id;\n\nALTER TABLE operator RENAME operatorid TO operator_id;\nALTER TABLE operator RENAME matchfieldid TO match_field_id;\n\nALTER TABLE filtermatch RENAME TO expression;\nALTER TABLE expression RENAME utstyrfilterid TO filter_id;\nALTER TABLE expression RENAME matchfelt TO match_field_id;\nALTER TABLE expression RENAME matchtype TO operator;\nALTER TABLE expression RENAME verdi TO value;\n\nALTER TABLE utstyrfilter RENAME TO filter;\nALTER TABLE filter RENAME accountid TO owner_id;\nALTER TABLE filter RENAME navn TO name;\n\nALTER TABLE utstyrgruppe RENAME TO filtergroup;\nALTER TABLE filtergroup RENAME accountid TO owner_id;\nALTER TABLE filtergroup RENAME navn TO name;\n\n-- Make matchfields/expressions simpler:\n--  * Remove value_category\n--  * Remove template portion of value_name\nALTER TABLE matchfield RENAME matchfieldid TO id;\nALTER TABLE matchfield RENAME valueid TO value_id;\nALTER TABLE matchfield RENAME valuename TO value_name;\nALTER TABLE matchfield RENAME valuehelp TO value_help;\nALTER TABLE matchfield RENAME valuecategory TO value_category;\nALTER TABLE matchfield RENAME valuesort TO value_sort;\nALTER TABLE matchfield RENAME listlimit TO list_limit;\nALTER TABLE matchfield RENAME datatype TO data_type;\nALTER TABLE matchfield RENAME showlist TO show_list;\nALTER TABLE matchfield DROP COLUMN value_category;\nUPDATE matchfield SET value_name = regexp_replace(value_name, E'\\\\|.*$', '');\n\nALTER TABLE queue RENAME TO accountalertqueue;\nALTER TABLE accountalertqueue RENAME accountid TO account_id;\nALTER TABLE accountalertqueue RENAME alertid TO alert_id;\nALTER TABLE accountalertqueue RENAME time TO insertion_time;\n\nALTER TABLE filtergroup RENAME descr TO description;\nALTER TABLE matchfield RENAME descr TO description;\n\nALTER TABLE accountorg RENAME orgid TO organization_id;\nALTER TABLE accountorg RENAME accountid TO account_id;\n\n-- Rename sequences so they match with the new english table names\n-- NOTE Internally a sequence has a column named 'sequence_name' which keeps\n-- the name of the sequence. This value will not be changed when renaming\n-- sequences, and you can not use UPDATE to set it either.\nALTER TABLE alarmadresse_id_seq RENAME TO alertaddress_id_seq;\nALTER TABLE alertaddress ALTER COLUMN id SET DEFAULT nextval('alertaddress_id_seq');\n\nALTER TABLE brukerprofil_id_seq RENAME TO alertprofile_id_seq;\nALTER TABLE alertprofile ALTER COLUMN id SET DEFAULT nextval('alertprofile_id_seq');\n\nALTER TABLE tidsperiode_id_seq RENAME TO timeperiod_id_seq;\nALTER TABLE timeperiod ALTER COLUMN id SET DEFAULT nextval('timeperiod_id_seq');\n\nALTER TABLE filtermatch_id_seq RENAME TO expression_id_seq;\nALTER TABLE expression ALTER COLUMN id SET DEFAULT nextval('expression_id_seq');\n\nALTER TABLE utstyrfilter_id_seq RENAME TO filter_id_seq;\nALTER TABLE filter ALTER COLUMN id SET DEFAULT nextval('filter_id_seq');\n\nALTER TABLE utstyrgruppe_id_seq RENAME TO filtergroup_id_seq;\nALTER TABLE filtergroup ALTER COLUMN id SET DEFAULT nextval('filtergroup_id_seq');\n\nALTER TABLE queue_id_seq RENAME TO accountalertqueue_id_seq;\nALTER TABLE accountalertqueue ALTER COLUMN id SET DEFAULT nextval('accountalertqueue_id_seq');\n\n-- operator_id_seq should really be called operator_operator_id_seq as it is a\n-- sequence for the column operator_id in the table operator.\nALTER TABLE operator_id_seq RENAME TO operator_operator_id_seq;\nALTER TABLE operator ALTER COLUMN operator_id SET DEFAULT nextval('operator_operator_id_seq');\n\n\n-- Django needs a single column it can treat as primary key :-(\nALTER TABLE accountgroup_accounts DROP CONSTRAINT accountingroup_pk;\nCREATE SEQUENCE profiles.accountgroup_accounts_id_seq;\nALTER TABLE accountgroup_accounts ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountgroup_accounts_id_seq')\n\tCONSTRAINT accountgroup_accounts_pkey PRIMARY KEY;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_account_id_key UNIQUE(account_id, accountgroup_id);\n\nALTER TABLE accountgroupprivilege DROP CONSTRAINT agprivilege_pk;\nCREATE SEQUENCE profiles.accountgroupprivilege_id_seq;\nALTER TABLE accountgroupprivilege ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountgroupprivilege_id_seq')\n\tCONSTRAINT accountgroupprivilege_pkey PRIMARY KEY;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_accountgroupid_key UNIQUE(accountgroupid, privilegeid, target);\n\nALTER TABLE accountorg DROP CONSTRAINT accountorg_pk;\nCREATE SEQUENCE profiles.accountorg_id_seq;\nALTER TABLE accountorg ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountorg_id_seq')\n\tCONSTRAINT accountorg_pkey PRIMARY KEY;\nALTER TABLE accountorg ADD CONSTRAINT accountorg_accountid_key UNIQUE(account_id, organization_id);\nALTER TABLE accountorg DROP CONSTRAINT account_exists;\nALTER TABLE accountorg ADD CONSTRAINT accountorg_account_id_fkey\n\tFOREIGN KEY(account_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\n-- Delete bougs accountorg entries before adding foreign key constraint\nDELETE FROM accountorg WHERE organization_id NOT IN (SELECT orgid FROM org);\n\nALTER TABLE accountorg ADD CONSTRAINT accountorg_organization_id_fkey\n\tFOREIGN KEY (organization_id) REFERENCES manage.org(orgid)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nCREATE SEQUENCE profiles.accountproperty_id_seq;\nALTER TABLE accountproperty ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountproperty_id_seq')\n\tCONSTRAINT accountproperty_pkey PRIMARY KEY;\n\nALTER TABLE filtergroupcontent DROP CONSTRAINT gruppetilfilter_pk;\nCREATE SEQUENCE profiles.filtergroupcontent_id_seq;\nALTER TABLE filtergroupcontent ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('filtergroupcontent_id_seq')\n\tCONSTRAINT filtergroupcontent_pkey PRIMARY KEY;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_id_key UNIQUE(filter_id, filter_group_id);\n\nALTER TABLE operator DROP CONSTRAINT operator_pk;\nCREATE SEQUENCE profiles.operator_id_seq;\nALTER TABLE operator ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('operator_id_seq')\n\tCONSTRAINT operator_pkey PRIMARY KEY;\nALTER TABLE operator ADD CONSTRAINT operator_operator_id_key UNIQUE(operator_id, match_field_id);\n\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT rettighet_pk;\nCREATE SEQUENCE profiles.filtergroup_group_permission_id_seq;\nALTER TABLE filtergroup_group_permission ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('filtergroup_group_permission_id_seq')\n\tCONSTRAINT filtergroup_group_permission_pkey PRIMARY KEY;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_accountgroup_id_key UNIQUE(accountgroup_id, filtergroup_id);\n\nALTER TABLE alertsubscription DROP CONSTRAINT varsleadresse_pk;\nCREATE SEQUENCE profiles.alertsubscription_id_seq;\nALTER TABLE alertsubscription ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('alertsubscription_id_seq')\n\tCONSTRAINT alertsubscription_pkey PRIMARY KEY;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_alert_address_id_key UNIQUE(alert_address_id, time_period_id, filter_group_id);\n\n-- Fix alertqueue\nALTER TABLE accountalertqueue ADD subscription_id integer;\nALTER TABLE accountalertqueue ADD CONSTRAINT accountalertqueue_subscription_fkey\n\tFOREIGN KEY (subscription_id) REFERENCES alertsubscription(id)\n\t-- ON UPDATE CASCADE -- FIXME is CASCADE right here?\n\t-- ON DELETE CASCADE -- FIXME\n\t;\n-- Try to upgrade accountalertqueue.addrid to subscription_id, this will not\n-- guarantee a correct upgrade due to the db design issue we are fixing here.\n-- We can only we sure that the alert is delivered to the correct address, not\n-- necessarily at the correct time.\nUPDATE accountalertqueue SET subscription_id = (SELECT id FROM alertsubscription WHERE alert_address_id = addrid LIMIT 1);\nALTER TABLE accountalertqueue DROP addrid;\n\n\n-- Rename indexes so they match with the new english table names\nALTER INDEX account_pk RENAME TO account_pkey;\nALTER INDEX brukernavn_uniq RENAME TO account_login_key;\nALTER INDEX accountgroup_pk RENAME TO accountgroup_pkey;\nALTER INDEX alarmadresse_pk RENAME TO alertaddress_pkey;\nALTER INDEX brukerprofil_pk RENAME TO alertprofile_pkey;\nALTER INDEX preference_pk RENAME TO alertpreference_pkey;\nALTER INDEX tidsperiode_pk RENAME TO timeperiod_pkey;\nALTER INDEX utstyrgruppe_pk RENAME TO filtergroup_pkey;\nALTER INDEX utstyrfilter_pk RENAME TO filter_pkey;\nALTER INDEX matchfield_pk RENAME TO matchfield_pkey;\nALTER INDEX filtermatch_pk RENAME TO expression_pkey;\nALTER INDEX queue_pkey RENAME TO accountalertqueue_pkey;\nALTER INDEX navbarlink_pk RENAME TO navbarlink_pkey;\nALTER INDEX accountnavbar_pk RENAME TO accountnavbar_pkey;\nALTER INDEX privilege_pk RENAME TO privilege_pkey;\nALTER INDEX privilegename_uniq RENAME TO privilege_privilegename_key;\n\n\n-- Rename foreign keys so they match with the new english names.\n-- Not done so easy. One can't simply rename foreign keys, so we drop them, and\n-- then re-add them.\nALTER TABLE accountgroup_accounts DROP CONSTRAINT account_exist;\nALTER TABLE accountgroup_accounts DROP CONSTRAINT group_exist;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_account_id_fkey\n\tFOREIGN KEY(account_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_accountgroup_id_fkey\n\tFOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountproperty DROP CONSTRAINT account_exist;\nALTER TABLE accountproperty ADD CONSTRAINT accountproperty_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertaddress DROP CONSTRAINT account_exist;\nALTER TABLE alertaddress ADD CONSTRAINT alertaddress_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertprofile DROP CONSTRAINT bruker_eksisterer;\nALTER TABLE alertprofile ADD CONSTRAINT alertprofile_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertpreference DROP CONSTRAINT account_exist;\nALTER TABLE alertpreference DROP CONSTRAINT brukerprofil_eksisterer;\nALTER TABLE alertpreference ADD CONSTRAINT alertpreference_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertpreference ADD CONSTRAINT alertpreference_activeprofile_fkey\n\tFOREIGN KEY(activeprofile) REFERENCES alertprofile(id)\n\tON DELETE SET NULL\n\tON UPDATE CASCADE;\n\nALTER TABLE timeperiod DROP CONSTRAINT brukerprofil_eksisterer;\nALTER TABLE timeperiod ADD CONSTRAINT timeperiod_alert_profile_id_fkey\n\tFOREIGN KEY(alert_profile_id) REFERENCES alertprofile(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroup DROP CONSTRAINT account_exist;\nALTER TABLE filtergroup ADD CONSTRAINT filtergroup_owner_id_fkey\n\tFOREIGN KEY(owner_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertsubscription DROP CONSTRAINT alarmadresse_eksisterer;\nALTER TABLE alertsubscription DROP CONSTRAINT tidsperiode_eksisterer;\nALTER TABLE alertsubscription DROP CONSTRAINT utstyrgruppe_eksisterer;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_alert_address_id_fkey\n\tFOREIGN KEY(alert_address_id) REFERENCES alertaddress(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_time_period_id_fkey\n\tFOREIGN KEY(time_period_id) REFERENCES timeperiod(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_filter_group_id_fkey\n\tFOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT accountgroup_exist;\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT utstyrgruppe_eksisterer;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_accountgroup_id_fkey\n\tFOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_filtergroup_id_fkey\n\tFOREIGN KEY(filtergroup_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filter DROP CONSTRAINT user_exist;\nALTER TABLE filter ADD CONSTRAINT filter_owner_id_fkey\n\tFOREIGN KEY(owner_id) REFERENCES account(id)\n\tON DELETE SET NULL\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroupcontent DROP CONSTRAINT utstyrgruppeid_eksisterer;\nALTER TABLE filtergroupcontent DROP CONSTRAINT utstyrfilter_eksisterer;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_group_id_fkey\n\tFOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_id_fkey\n\tFOREIGN KEY(filter_id) REFERENCES filter(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE expression DROP CONSTRAINT matchfield_exist;\nALTER TABLE expression DROP CONSTRAINT utstyrfilter_eksisterer;\nALTER TABLE expression ADD CONSTRAINT expression_match_field_id_fkey\n\tFOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE expression ADD CONSTRAINT expression_filter_id_fkey\n\tFOREIGN KEY(filter_id) REFERENCES filter(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE operator DROP CONSTRAINT matchfield_eksisterer;\nALTER TABLE operator ADD CONSTRAINT operator_match_field_id_fkey\n\tFOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE navbarlink DROP CONSTRAINT account_exists;\nALTER TABLE navbarlink ADD CONSTRAINT navbarlink_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountnavbar DROP CONSTRAINT account_exists;\nALTER TABLE accountnavbar DROP CONSTRAINT navbarlink_exists;\nALTER TABLE accountnavbar ADD CONSTRAINT accountnavbar_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountnavbar ADD CONSTRAINT accountnavbar_navbarlinkid_fkey\n\tFOREIGN KEY(navbarlinkid) REFERENCES navbarlink(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountgroupprivilege DROP CONSTRAINT accountgroup_exists;\nALTER TABLE accountgroupprivilege DROP CONSTRAINT privilege_exists;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_accountgroupid_fkey\n\tFOREIGN KEY (accountgroupid) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_privilegeid_fkey\n\tFOREIGN KEY (privilegeid) REFERENCES privilege\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\n-- FIXME\nCREATE SEQUENCE profiles.alertsender_id_seq START 1000;\nCREATE TABLE profiles.alertsender (\n\tid integer NOT NULL DEFAULT nextval('alertsender_id_seq'),\n\tname varchar(100) NOT NULL,\n\thandler varchar(100) NOT NULL,\n\n\tCONSTRAINT alertsender_unique_name UNIQUE(name),\n\tCONSTRAINT alertsender_unique_handler UNIQUE(handler),\n\tCONSTRAINT alertsender_pkey  PRIMARY KEY(id)\n);\n\n-- ACCOUNTINGROUP\n-- View for compability with older code that thinks accountgroup_accounts is\n-- still called accountingroup.\nCREATE VIEW profiles.accountingroup AS (\n    SELECT\n        accountgroup_accounts.account_id AS accountid,\n        accountgroup_accounts.accountgroup_id AS groupid\n    FROM\n        accountgroup_accounts\n);\n\n\n-- report_access is not used by any systems so time to purge it from the db.\nDELETE FROM privilege WHERE privilegename = 'report_access';\n\n-- Ensure that users are part of everyone and authenticated groups\nCREATE OR REPLACE FUNCTION profiles.group_membership() RETURNS trigger AS $group_membership$\n        BEGIN\n                IF NEW.id >= 1000 THEN\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (2, NEW.id);\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (3, NEW.id);\n                END IF; RETURN NULL;\n        END;\n$group_membership$ LANGUAGE plpgsql;\n\nCREATE TRIGGER group_membership AFTER INSERT ON account\n        FOR EACH ROW EXECUTE PROCEDURE group_membership();\n\n-- Add all users to \"Everyone\" and \"Authenticated users\" \nINSERT INTO accountgroup_accounts SELECT account.id, 2 FROM account WHERE account.id >= 1000 AND account.id NOT IN (SELECT account.id FROM accountgroup_accounts WHERE accountgroup_id = 2);\nINSERT INTO accountgroup_accounts SELECT account.id, 3 FROM account WHERE account.id >= 1000 AND account.id NOT IN (SELECT account.id FROM accountgroup_accounts WHERE accountgroup_id = 3);\n\nINSERT INTO accountgroup_accounts VALUES (0,2); -- add default to Everyone\nINSERT INTO accountgroup_accounts VALUES (1,2); -- add admin to Everyone\nINSERT INTO accountgroup_accounts VALUES (1,3); -- add admin to Authenticated users\n\n-- Update navbar links\nUPDATE navbarlink SET uri = '/userinfo/' WHERE uri = '/index/userinfo';\nUPDATE navbarlink SET uri = '/useradmin/' WHERE uri = '/useradmin/index';\n\n-- Allow authenticated users to visit ipdevinfo\nINSERT INTO accountgroupprivilege (accountgroupid, privilegeid, target)\nVALUES (3, 2, '^/ipdevinfo/?');\n\n-- Allow anonymous users to visit the new /userinfo tool.\nINSERT INTO accountgroupprivilege (accountgroupid, privilegeid, target)\nVALUES (2, 2, E'^/userinfo/?');\n\n\n------------------------------------------------------------------------------\n-- netmap helper tables\n------------------------------------------------------------------------------\n\nCREATE TABLE netmap_position(\nsysname VARCHAR PRIMARY KEY NOT NULL,\nxpos double precision NOT NULL,\nypos double precision NOT NULL\n);\n\n\n-- Insert alert senders.\n-- Conditional, in case someone already fixed their install manually.\nINSERT INTO alertsender (id, name, handler) SELECT 1, 'Email', 'email'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=1);\n\nINSERT INTO alertsender (id, name, handler) SELECT 2, 'SMS', 'sms'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=2);\n\nINSERT INTO alertsender (id, name, handler) SELECT 3, 'Jabber', 'jabber'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=3);\n\n-- Fix for LP#285331 Duplicate RRD file references\n-- Delete oldest entries if there are duplicate rrd file references\nDELETE FROM rrd_file \nWHERE rrd_fileid IN (SELECT b.rrd_fileid\n                     FROM rrd_file a\n                     JOIN rrd_file b ON (a.path = b.path AND \n                                         a.filename=b.filename AND \n                                         a.rrd_fileid > b.rrd_fileid)\n                     );\n\n-- Modify rrd_file to prevent duplicate path/filename entries\nALTER TABLE rrd_file ADD CONSTRAINT rrd_file_path_filename_key UNIQUE (path, filename);\n\n-- Tables and indices for new radius accounting subsystem\nSET search_path TO radius;\n\nCREATE TABLE radiusacct (\n        RadAcctId               BIGSERIAL PRIMARY KEY,\n        AcctSessionId           VARCHAR(96) NOT NULL,\n        AcctUniqueId            VARCHAR(32) NOT NULL,\n        UserName                VARCHAR(70),\n        Realm                   VARCHAR(24),\n        NASIPAddress            INET NOT NULL,\n        NASPortType             VARCHAR(32),\n        CiscoNASPort            VARCHAR(32),\n        AcctStartTime           TIMESTAMP,\n        AcctStopTime            TIMESTAMP,\n        AcctSessionTime         BIGINT,\n        AcctInputOctets         BIGINT,\n        AcctOutputOctets        BIGINT,\n        CalledStationId         VARCHAR(50),\n        CallingStationId        VARCHAR(50),\n        AcctTerminateCause      VARCHAR(32),\n        FramedProtocol          VARCHAR(32),\n        FramedIPAddress         INET,\n        AcctStartDelay          BIGINT,\n        AcctStopDelay           BIGINT\n);\n\nCREATE TABLE radiuslog (\n        ID                      BIGSERIAL PRIMARY KEY,\n        Time                    TIMESTAMP with time zone,\n        Type                    VARCHAR(10),\n        Message                 VARCHAR(200),\n        Status                  VARCHAR(65),\n        UserName                VARCHAR(70),\n        Client                  VARCHAR(65),\n        Port                    VARCHAR(8)\n        );\n\n\n-- For use by onoff-, update-, stop- and simul_* queries\nCREATE INDEX radiusacct_active_user_idx ON radiusacct (UserName) WHERE AcctStopTime IS NULL;\n-- and for common statistic queries:\nCREATE INDEX radiusacct_start_user_index ON radiusacct (AcctStartTime, lower(UserName));\nCREATE INDEX radiusacct_stop_user_index ON radiusacct (AcctStopTime, UserName);\n\nCREATE INDEX radiuslog_time_index ON radiuslog(time);\nCREATE INDEX radiuslog_username_index ON radiuslog(UserName);\n\nRESET search_path;\n\n------------------------------------------------------------------------------\n-- simple schema version check table\n------------------------------------------------------------------------------\nCREATE TABLE manage.nav_schema_version (\n    version VARCHAR NOT NULL,\n    time TIMESTAMP NOT NULL DEFAULT NOW()\n);\n\n-- FIXME: Insert default as version name.  This should be updated on\n-- each NAV release branch.\nINSERT INTO nav_schema_version (version) VALUES ('3.5.0b2');\n\n-- Ensure only a single row will ever exist in this table.\nCREATE OR REPLACE RULE nav_schema_version_insert AS ON INSERT TO nav_schema_version\n    DO INSTEAD UPDATE nav_schema_version SET version=NEW.version, time=NOW();\n\n\n-- Add alerthistid foreign key so that we can use alerthistory in\n-- alertengine at a latter point in time.\nALTER TABLE manage.alertq ADD alerthistid integer NULL;\nALTER TABLE manage.alertq ADD CONSTRAINT alertq_alerthistid_fkey\n  FOREIGN KEY (alerthistid)\n  REFERENCES manage.alerthist (alerthistid)\n  ON UPDATE CASCADE\n  ON DELETE SET NULL;\n\n-- Remove this field which was added in an earlier 3.5 beta.\nALTER TABLE manage.alertq DROP closed;\n\n-- Update two radius indexes\nDROP INDEX radiusacct_stop_user_index;\nCREATE INDEX radiusacct_stop_user_index ON radiusacct (AcctStopTime, lower(UserName));\n\nDROP INDEX radiuslog_username_index;\nCREATE INDEX radiuslog_username_index ON radiuslog(lower(UserName));\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.5.0');\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.5.0b1.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.4 to 3.5.\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * This upgrade scripts assumes you have merged your NAV databases\n * into a single, multi-namespaced database.  If you haven't, please\n * read the instructions in doc/sql/upgrades/README .  A helper script\n * exists to help you merge your databases: doc/sql/mergedb.sh .\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * Connect to PostgreSQL and run this script as the nav database owner\n * like this:\n *\n *  psql -f 3.5.0b1.sql <db_name> <username>\n *\n*/\n\nBEGIN;\nSET client_min_messages TO warning;\n\n-- Rename logger tables to avoid naming confusion with manage schema.\nALTER TABLE logger.message RENAME TO log_message;\n\nALTER TABLE logger.message_id_seq RENAME TO log_message_id_seq;\nALTER INDEX logger.message_pkey RENAME TO log_message_pkey;\nALTER INDEX logger.message_origin_btree RENAME TO log_message_origin_btree;\nALTER INDEX logger.message_time_btree RENAME TO log_message_time_btree;\nALTER INDEX logger.message_type_btree RENAME TO log_message_type_btree;\n\nALTER TABLE logger.type RENAME TO log_message_type;\nALTER TABLE logger.type_type_seq RENAME TO log_message_type_type_seq;\nALTER INDEX logger.type_pkey RENAME TO log_message_type_pkey;\nALTER INDEX logger.type_priority_key RENAME TO log_message_type_priority_key;\n\n-- In lack of an ALTER TABLE RENAME CONSTRAINT in pg8.1 we drop and\n-- re-create constraints.  Do this to make sure constraints are named\n-- according to the table name changes above.\nALTER TABLE logger.log_message DROP CONSTRAINT message_newpriority_fkey;\nALTER TABLE logger.log_message DROP CONSTRAINT message_origin_fkey;\nALTER TABLE logger.log_message DROP CONSTRAINT message_type_fkey;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_newpriority_fkey\n  FOREIGN KEY (newpriority) REFERENCES priority (priority) ON UPDATE CASCADE ON DELETE SET NULL;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_origin_fkey\n  FOREIGN KEY (origin) REFERENCES origin (origin) ON UPDATE CASCADE ON DELETE SET NULL;\nALTER TABLE logger.log_message ADD CONSTRAINT log_message_type_fkey\n  FOREIGN KEY (type) REFERENCES log_message_type (type) ON UPDATE CASCADE ON DELETE SET NULL;\n\nALTER TABLE logger.log_message_type DROP CONSTRAINT type_priority_fkey;\nALTER TABLE logger.log_message_type ADD CONSTRAINT type_priority_fkey\n  FOREIGN KEY (priority) REFERENCES priority(priority) ON UPDATE CASCADE ON DELETE SET NULL;\n\n-- combined index for quick lookups when expiring old records.\nCREATE INDEX log_message_expiration_btree ON logger.log_message USING btree(newpriority, time);\n\n-- Drop obsolete vlanPlot tables\nDROP TABLE vp_netbox_xy;\nDROP TABLE vp_netbox_grp;\nDROP TABLE vp_netbox_grp_info;\n\n-- Add closed flag to alertq\nALTER TABLE alertq ADD closed BOOLEAN;\n\n--------------------------------------------------------------------------------\n-- profiles clean-up:\n-- * Rename tables in profiles so they all are english.\n-- * Rename indexes.\n-- * Add id column to tables that django can use as primary key.\n-- * Drop keys and re-add them with new name.\n-- * Explicitly name keys/indexes/sequences. Use what Postgres would have named\n--   them by default\n-- * Delete \"old\" alerts that where keept for debuging\n\nDELETE FROM alertq WHERE alertqid <= (SELECT lastalertqid FROM alertengine LIMIT 1);\n\n-- Drop some unused tables\nDROP TABLE defaultutstyr;\nDROP TABLE defaultfilter;\nDROP TABLE brukerrettighet;\nDROP TABLE logg;\nDROP TABLE alertengine;\nDROP SEQUENCE logg_id_seq;\n\n-- Remove copy_default_preferences trigger\nDROP TRIGGER insert_account ON account;\nDROP FUNCTION copy_default_preferences();\n\n-- We wan't english names for everything so here goes:\nALTER TABLE accountingroup RENAME TO accountgroup_accounts;\nALTER TABLE accountgroup_accounts RENAME accountid TO account_id;\nALTER TABLE accountgroup_accounts RENAME groupid TO accountgroup_id;\n\nALTER TABLE rettighet RENAME TO filtergroup_group_permission;\nALTER TABLE filtergroup_group_permission RENAME utstyrgruppeid TO filtergroup_id;\nALTER TABLE filtergroup_group_permission RENAME accountgroupid TO accountgroup_id;\n\nALTER TABLE alarmadresse RENAME TO alertaddress;\nALTER TABLE alertaddress RENAME adresse TO address;\n\nALTER TABLE preference RENAME TO alertpreference;\nALTER TABLE alertpreference DROP COLUMN queuelength;\n\nALTER TABLE brukerprofil RENAME TO alertprofile;\nALTER TABLE alertprofile RENAME navn TO name;\nALTER TABLE alertprofile RENAME tid TO daily_dispatch_time;\nALTER TABLE alertprofile RENAME ukedag TO weekly_dispatch_day;\nALTER TABLE alertprofile RENAME uketid TO weekly_dispatch_time;\n\nALTER TABLE tidsperiode RENAME TO timeperiod;\nALTER TABLE timeperiod RENAME brukerprofilid TO alert_profile_id;\nALTER TABLE timeperiod RENAME starttid TO start_time;\nALTER TABLE timeperiod RENAME helg TO valid_during;\n\nALTER TABLE varsle RENAME TO alertsubscription;\nALTER TABLE alertsubscription RENAME alarmadresseid TO alert_address_id;\nALTER TABLE alertsubscription RENAME tidsperiodeid TO time_period_id;\nALTER TABLE alertsubscription RENAME utstyrgruppeid TO filter_group_id;\nALTER TABLE alertsubscription RENAME vent TO subscription_type;\nALTER TABLE alertsubscription ADD ignore_closed_alerts BOOLEAN DEFAULT false;\n\nALTER TABLE gruppetilfilter RENAME TO filtergroupcontent;\nALTER TABLE filtergroupcontent RENAME inkluder TO include;\nALTER TABLE filtergroupcontent RENAME positiv TO positive;\nALTER TABLE filtergroupcontent RENAME prioritet TO priority;\nALTER TABLE filtergroupcontent RENAME utstyrfilterid TO filter_id;\nALTER TABLE filtergroupcontent RENAME utstyrgruppeid TO filter_group_id;\n\nALTER TABLE operator RENAME operatorid TO operator_id;\nALTER TABLE operator RENAME matchfieldid TO match_field_id;\n\nALTER TABLE filtermatch RENAME TO expression;\nALTER TABLE expression RENAME utstyrfilterid TO filter_id;\nALTER TABLE expression RENAME matchfelt TO match_field_id;\nALTER TABLE expression RENAME matchtype TO operator;\nALTER TABLE expression RENAME verdi TO value;\n\nALTER TABLE utstyrfilter RENAME TO filter;\nALTER TABLE filter RENAME accountid TO owner_id;\nALTER TABLE filter RENAME navn TO name;\n\nALTER TABLE utstyrgruppe RENAME TO filtergroup;\nALTER TABLE filtergroup RENAME accountid TO owner_id;\nALTER TABLE filtergroup RENAME navn TO name;\n\n-- Make matchfields/expressions simpler:\n--  * Remove value_category\n--  * Remove template portion of value_name\nALTER TABLE matchfield RENAME matchfieldid TO id;\nALTER TABLE matchfield RENAME valueid TO value_id;\nALTER TABLE matchfield RENAME valuename TO value_name;\nALTER TABLE matchfield RENAME valuehelp TO value_help;\nALTER TABLE matchfield RENAME valuecategory TO value_category;\nALTER TABLE matchfield RENAME valuesort TO value_sort;\nALTER TABLE matchfield RENAME listlimit TO list_limit;\nALTER TABLE matchfield RENAME datatype TO data_type;\nALTER TABLE matchfield RENAME showlist TO show_list;\nALTER TABLE matchfield DROP COLUMN value_category;\nUPDATE matchfield SET value_name = regexp_replace(value_name, E'\\\\|.*$', '');\n\nALTER TABLE queue RENAME TO accountalertqueue;\nALTER TABLE accountalertqueue RENAME accountid TO account_id;\nALTER TABLE accountalertqueue RENAME alertid TO alert_id;\nALTER TABLE accountalertqueue RENAME time TO insertion_time;\n\nALTER TABLE filtergroup RENAME descr TO description;\nALTER TABLE matchfield RENAME descr TO description;\n\nALTER TABLE accountorg RENAME orgid TO organization_id;\nALTER TABLE accountorg RENAME accountid TO account_id;\n\n-- Rename sequences so they match with the new english table names\n-- NOTE Internally a sequence has a column named 'sequence_name' which keeps\n-- the name of the sequence. This value will not be changed when renaming\n-- sequences, and you can not use UPDATE to set it either.\nALTER TABLE alarmadresse_id_seq RENAME TO alertaddress_id_seq;\nALTER TABLE alertaddress ALTER COLUMN id SET DEFAULT nextval('alertaddress_id_seq');\n\nALTER TABLE brukerprofil_id_seq RENAME TO alertprofile_id_seq;\nALTER TABLE alertprofile ALTER COLUMN id SET DEFAULT nextval('alertprofile_id_seq');\n\nALTER TABLE tidsperiode_id_seq RENAME TO timeperiod_id_seq;\nALTER TABLE timeperiod ALTER COLUMN id SET DEFAULT nextval('timeperiod_id_seq');\n\nALTER TABLE filtermatch_id_seq RENAME TO expression_id_seq;\nALTER TABLE expression ALTER COLUMN id SET DEFAULT nextval('expression_id_seq');\n\nALTER TABLE utstyrfilter_id_seq RENAME TO filter_id_seq;\nALTER TABLE filter ALTER COLUMN id SET DEFAULT nextval('filter_id_seq');\n\nALTER TABLE utstyrgruppe_id_seq RENAME TO filtergroup_id_seq;\nALTER TABLE filtergroup ALTER COLUMN id SET DEFAULT nextval('filtergroup_id_seq');\n\nALTER TABLE queue_id_seq RENAME TO accountalertqueue_id_seq;\nALTER TABLE accountalertqueue ALTER COLUMN id SET DEFAULT nextval('accountalertqueue_id_seq');\n\n-- operator_id_seq should really be called operator_operator_id_seq as it is a\n-- sequence for the column operator_id in the table operator.\nALTER TABLE operator_id_seq RENAME TO operator_operator_id_seq;\nALTER TABLE operator ALTER COLUMN operator_id SET DEFAULT nextval('operator_operator_id_seq');\n\n\n-- Django needs a single column it can treat as primary key :-(\nALTER TABLE accountgroup_accounts DROP CONSTRAINT accountingroup_pk;\nCREATE SEQUENCE profiles.accountgroup_accounts_id_seq;\nALTER TABLE accountgroup_accounts ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountgroup_accounts_id_seq')\n\tCONSTRAINT accountgroup_accounts_pkey PRIMARY KEY;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_account_id_key UNIQUE(account_id, accountgroup_id);\n\nALTER TABLE accountgroupprivilege DROP CONSTRAINT agprivilege_pk;\nCREATE SEQUENCE profiles.accountgroupprivilege_id_seq;\nALTER TABLE accountgroupprivilege ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountgroupprivilege_id_seq')\n\tCONSTRAINT accountgroupprivilege_pkey PRIMARY KEY;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_accountgroupid_key UNIQUE(accountgroupid, privilegeid, target);\n\nALTER TABLE accountorg DROP CONSTRAINT accountorg_pk;\nCREATE SEQUENCE profiles.accountorg_id_seq;\nALTER TABLE accountorg ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountorg_id_seq')\n\tCONSTRAINT accountorg_pkey PRIMARY KEY;\nALTER TABLE accountorg ADD CONSTRAINT accountorg_accountid_key UNIQUE(account_id, organization_id);\nALTER TABLE accountorg DROP CONSTRAINT account_exists;\nALTER TABLE accountorg ADD CONSTRAINT accountorg_account_id_fkey\n\tFOREIGN KEY(account_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\n-- Delete bougs accountorg entries before adding foreign key constraint\nDELETE FROM accountorg WHERE organization_id NOT IN (SELECT orgid FROM org);\n\nALTER TABLE accountorg ADD CONSTRAINT accountorg_organization_id_fkey\n\tFOREIGN KEY (organization_id) REFERENCES manage.org(orgid)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nCREATE SEQUENCE profiles.accountproperty_id_seq;\nALTER TABLE accountproperty ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('accountproperty_id_seq')\n\tCONSTRAINT accountproperty_pkey PRIMARY KEY;\n\nALTER TABLE filtergroupcontent DROP CONSTRAINT gruppetilfilter_pk;\nCREATE SEQUENCE profiles.filtergroupcontent_id_seq;\nALTER TABLE filtergroupcontent ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('filtergroupcontent_id_seq')\n\tCONSTRAINT filtergroupcontent_pkey PRIMARY KEY;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_id_key UNIQUE(filter_id, filter_group_id);\n\nALTER TABLE operator DROP CONSTRAINT operator_pk;\nCREATE SEQUENCE profiles.operator_id_seq;\nALTER TABLE operator ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('operator_id_seq')\n\tCONSTRAINT operator_pkey PRIMARY KEY;\nALTER TABLE operator ADD CONSTRAINT operator_operator_id_key UNIQUE(operator_id, match_field_id);\n\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT rettighet_pk;\nCREATE SEQUENCE profiles.filtergroup_group_permission_id_seq;\nALTER TABLE filtergroup_group_permission ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('filtergroup_group_permission_id_seq')\n\tCONSTRAINT filtergroup_group_permission_pkey PRIMARY KEY;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_accountgroup_id_key UNIQUE(accountgroup_id, filtergroup_id);\n\nALTER TABLE alertsubscription DROP CONSTRAINT varsleadresse_pk;\nCREATE SEQUENCE profiles.alertsubscription_id_seq;\nALTER TABLE alertsubscription ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('alertsubscription_id_seq')\n\tCONSTRAINT alertsubscription_pkey PRIMARY KEY;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_alert_address_id_key UNIQUE(alert_address_id, time_period_id, filter_group_id);\n\n-- Fix alertqueue\nALTER TABLE accountalertqueue ADD subscription_id integer;\nALTER TABLE accountalertqueue ADD CONSTRAINT accountalertqueue_subscription_fkey\n\tFOREIGN KEY (subscription_id) REFERENCES alertsubscription(id)\n\t-- ON UPDATE CASCADE -- FIXME is CASCADE right here?\n\t-- ON DELETE CASCADE -- FIXME\n\t;\n-- Try to upgrade accountalertqueue.addrid to subscription_id, this will not\n-- guarantee a correct upgrade due to the db design issue we are fixing here.\n-- We can only we sure that the alert is delivered to the correct address, not\n-- necessarily at the correct time.\nUPDATE accountalertqueue SET subscription_id = (SELECT id FROM alertsubscription WHERE alert_address_id = addrid LIMIT 1);\nALTER TABLE accountalertqueue DROP addrid;\n\n\n-- Rename indexes so they match with the new english table names\nALTER INDEX account_pk RENAME TO account_pkey;\nALTER INDEX brukernavn_uniq RENAME TO account_login_key;\nALTER INDEX accountgroup_pk RENAME TO accountgroup_pkey;\nALTER INDEX alarmadresse_pk RENAME TO alertaddress_pkey;\nALTER INDEX brukerprofil_pk RENAME TO alertprofile_pkey;\nALTER INDEX preference_pk RENAME TO alertpreference_pkey;\nALTER INDEX tidsperiode_pk RENAME TO timeperiod_pkey;\nALTER INDEX utstyrgruppe_pk RENAME TO filtergroup_pkey;\nALTER INDEX utstyrfilter_pk RENAME TO filter_pkey;\nALTER INDEX matchfield_pk RENAME TO matchfield_pkey;\nALTER INDEX filtermatch_pk RENAME TO expression_pkey;\nALTER INDEX queue_pkey RENAME TO accountalertqueue_pkey;\nALTER INDEX navbarlink_pk RENAME TO navbarlink_pkey;\nALTER INDEX accountnavbar_pk RENAME TO accountnavbar_pkey;\nALTER INDEX privilege_pk RENAME TO privilege_pkey;\nALTER INDEX privilegename_uniq RENAME TO privilege_privilegename_key;\n\n\n-- Rename foreign keys so they match with the new english names.\n-- Not done so easy. One can't simply rename foreign keys, so we drop them, and\n-- then re-add them.\nALTER TABLE accountgroup_accounts DROP CONSTRAINT account_exist;\nALTER TABLE accountgroup_accounts DROP CONSTRAINT group_exist;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_account_id_fkey\n\tFOREIGN KEY(account_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountgroup_accounts ADD CONSTRAINT accountgroup_accounts_accountgroup_id_fkey\n\tFOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountproperty DROP CONSTRAINT account_exist;\nALTER TABLE accountproperty ADD CONSTRAINT accountproperty_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertaddress DROP CONSTRAINT account_exist;\nALTER TABLE alertaddress ADD CONSTRAINT alertaddress_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertprofile DROP CONSTRAINT bruker_eksisterer;\nALTER TABLE alertprofile ADD CONSTRAINT alertprofile_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertpreference DROP CONSTRAINT account_exist;\nALTER TABLE alertpreference DROP CONSTRAINT brukerprofil_eksisterer;\nALTER TABLE alertpreference ADD CONSTRAINT alertpreference_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertpreference ADD CONSTRAINT alertpreference_activeprofile_fkey\n\tFOREIGN KEY(activeprofile) REFERENCES alertprofile(id)\n\tON DELETE SET NULL\n\tON UPDATE CASCADE;\n\nALTER TABLE timeperiod DROP CONSTRAINT brukerprofil_eksisterer;\nALTER TABLE timeperiod ADD CONSTRAINT timeperiod_alert_profile_id_fkey\n\tFOREIGN KEY(alert_profile_id) REFERENCES alertprofile(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroup DROP CONSTRAINT account_exist;\nALTER TABLE filtergroup ADD CONSTRAINT filtergroup_owner_id_fkey\n\tFOREIGN KEY(owner_id) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE alertsubscription DROP CONSTRAINT alarmadresse_eksisterer;\nALTER TABLE alertsubscription DROP CONSTRAINT tidsperiode_eksisterer;\nALTER TABLE alertsubscription DROP CONSTRAINT utstyrgruppe_eksisterer;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_alert_address_id_fkey\n\tFOREIGN KEY(alert_address_id) REFERENCES alertaddress(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_time_period_id_fkey\n\tFOREIGN KEY(time_period_id) REFERENCES timeperiod(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE alertsubscription ADD CONSTRAINT alertsubscription_filter_group_id_fkey\n\tFOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT accountgroup_exist;\nALTER TABLE filtergroup_group_permission DROP CONSTRAINT utstyrgruppe_eksisterer;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_accountgroup_id_fkey\n\tFOREIGN KEY(accountgroup_id) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE filtergroup_group_permission ADD CONSTRAINT filtergroup_group_permission_filtergroup_id_fkey\n\tFOREIGN KEY(filtergroup_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE filter DROP CONSTRAINT user_exist;\nALTER TABLE filter ADD CONSTRAINT filter_owner_id_fkey\n\tFOREIGN KEY(owner_id) REFERENCES account(id)\n\tON DELETE SET NULL\n\tON UPDATE CASCADE;\n\nALTER TABLE filtergroupcontent DROP CONSTRAINT utstyrgruppeid_eksisterer;\nALTER TABLE filtergroupcontent DROP CONSTRAINT utstyrfilter_eksisterer;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_group_id_fkey\n\tFOREIGN KEY(filter_group_id) REFERENCES filtergroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE filtergroupcontent ADD CONSTRAINT filtergroupcontent_filter_id_fkey\n\tFOREIGN KEY(filter_id) REFERENCES filter(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE expression DROP CONSTRAINT matchfield_exist;\nALTER TABLE expression DROP CONSTRAINT utstyrfilter_eksisterer;\nALTER TABLE expression ADD CONSTRAINT expression_match_field_id_fkey\n\tFOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE expression ADD CONSTRAINT expression_filter_id_fkey\n\tFOREIGN KEY(filter_id) REFERENCES filter(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE operator DROP CONSTRAINT matchfield_eksisterer;\nALTER TABLE operator ADD CONSTRAINT operator_match_field_id_fkey\n\tFOREIGN KEY(match_field_id) REFERENCES matchfield(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE navbarlink DROP CONSTRAINT account_exists;\nALTER TABLE navbarlink ADD CONSTRAINT navbarlink_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountnavbar DROP CONSTRAINT account_exists;\nALTER TABLE accountnavbar DROP CONSTRAINT navbarlink_exists;\nALTER TABLE accountnavbar ADD CONSTRAINT accountnavbar_accountid_fkey\n\tFOREIGN KEY(accountid) REFERENCES account(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountnavbar ADD CONSTRAINT accountnavbar_navbarlinkid_fkey\n\tFOREIGN KEY(navbarlinkid) REFERENCES navbarlink(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\nALTER TABLE accountgroupprivilege DROP CONSTRAINT accountgroup_exists;\nALTER TABLE accountgroupprivilege DROP CONSTRAINT privilege_exists;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_accountgroupid_fkey\n\tFOREIGN KEY (accountgroupid) REFERENCES accountgroup(id)\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\nALTER TABLE accountgroupprivilege ADD CONSTRAINT accountgroupprivilege_privilegeid_fkey\n\tFOREIGN KEY (privilegeid) REFERENCES privilege\n\tON DELETE CASCADE\n\tON UPDATE CASCADE;\n\n-- FIXME\nCREATE SEQUENCE profiles.alertsender_id_seq START 1000;\nCREATE TABLE profiles.alertsender (\n\tid integer NOT NULL DEFAULT nextval('alertsender_id_seq'),\n\tname varchar(100) NOT NULL,\n\thandler varchar(100) NOT NULL,\n\n\tCONSTRAINT alertsender_unique_name UNIQUE(name),\n\tCONSTRAINT alertsender_unique_handler UNIQUE(handler),\n\tCONSTRAINT alertsender_pkey  PRIMARY KEY(id)\n);\n\n-- ACCOUNTINGROUP\n-- View for compability with older code that thinks accountgroup_accounts is\n-- still called accountingroup.\nCREATE VIEW profiles.accountingroup AS (\n    SELECT\n        accountgroup_accounts.account_id AS accountid,\n        accountgroup_accounts.accountgroup_id AS groupid\n    FROM\n        accountgroup_accounts\n);\n\n\n-- report_access is not used by any systems so time to purge it from the db.\nDELETE FROM privilege WHERE privilegename = 'report_access';\n\n-- Ensure that users are part of everyone and authenticated groups\nCREATE OR REPLACE FUNCTION profiles.group_membership() RETURNS trigger AS $group_membership$\n        BEGIN\n                IF NEW.id >= 1000 THEN\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (2, NEW.id);\n                        INSERT INTO accountgroup_accounts (accountgroup_id, account_id) VALUES (3, NEW.id);\n                END IF; RETURN NULL;\n        END;\n$group_membership$ LANGUAGE plpgsql;\n\nCREATE TRIGGER group_membership AFTER INSERT ON account\n        FOR EACH ROW EXECUTE PROCEDURE group_membership();\n\n-- Add all users to \"Everyone\" and \"Authenticated users\" \nINSERT INTO accountgroup_accounts SELECT account.id, 2 FROM account WHERE account.id >= 1000 AND account.id NOT IN (SELECT account.id FROM accountgroup_accounts WHERE accountgroup_id = 2);\nINSERT INTO accountgroup_accounts SELECT account.id, 3 FROM account WHERE account.id >= 1000 AND account.id NOT IN (SELECT account.id FROM accountgroup_accounts WHERE accountgroup_id = 3);\n\nINSERT INTO accountgroup_accounts VALUES (0,2); -- add default to Everyone\nINSERT INTO accountgroup_accounts VALUES (1,2); -- add admin to Everyone\nINSERT INTO accountgroup_accounts VALUES (1,3); -- add admin to Authenticated users\n\n-- Update navbar links\nUPDATE navbarlink SET uri = '/userinfo/' WHERE uri = '/index/userinfo';\nUPDATE navbarlink SET uri = '/useradmin/' WHERE uri = '/useradmin/index';\n\n-- Allow authenticated users to visit ipdevinfo\nINSERT INTO accountgroupprivilege (accountgroupid, privilegeid, target)\nVALUES (3, 2, '^/ipdevinfo/?');\n\n-- Allow anonymous users to visit the new /userinfo tool.\nINSERT INTO accountgroupprivilege (accountgroupid, privilegeid, target)\nVALUES (2, 2, E'^/userinfo/?');\n\n\n------------------------------------------------------------------------------\n-- netmap helper tables\n------------------------------------------------------------------------------\n\nCREATE TABLE netmap_position(\nsysname VARCHAR PRIMARY KEY NOT NULL,\nxpos double precision NOT NULL,\nypos double precision NOT NULL\n);\n\nCOMMIT;\n\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.5.0b2-hpfix.sql",
    "content": "/*\n * This SQL script removes all modules from devices from the HP\n * vendor, and triggers getDeviceData to re-profile the SNMP OID\n * compatibility of the same devices.\n *\n * This may possibly be necessary to remove lingering side-effects\n * from the HP SwitchStack support that was removed in NAV 3.5.0b2.\n * \n * If you are experiencing problems related to HP modules, ports and\n * topology after an upgrade to NAV 3.5, stop getDeviceData and run\n * this script as the nav database owner like this:\n *\n * psql -f 3.5.0b2-hpfix.sql <db_name> <username>\n * \n * You can then start getDeviceData again.\n*/\n\nBEGIN;\n\n-- Delete modules from HP devices.  This will cascade to all ports on\n-- HP devices as well.  getDeviceData will rediscover the ports when\n-- restarted.\nDELETE FROM module \nWHERE netboxid IN (SELECT netboxid\n                   FROM netbox\n                   JOIN type USING (typeid) \n                   WHERE vendorid = 'hp');\n\n-- Tell getDeviceData to re-profile the OID compatibility of HP\n-- devices.\nUPDATE netbox\nSET uptodate = FALSE\nFROM type\nWHERE \n  netbox.typeid = type.typeid AND\n  vendorid = 'hp';\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.5.0b2.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.5.0b1 to 3.5.0b2\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * This upgrade script assumes you have merged your NAV databases\n * into a single, multi-namespaced database and run 3.5.0b1.sql.  If\n * you haven't, please read the release notes for NAV 3.5 and the\n * instructions in doc/sql/upgrades/README .  \n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * Connect to PostgreSQL and run this script as the nav database owner\n * like this:\n *\n *  psql -f 3.5.0b2.sql <db_name> <username>\n *\n * When you are done, make sure the database search path is correct,\n * by running the new program navschema.py.  Otherwise your radius\n * module might not work.\n*/\n\nBEGIN;\n\n-- Insert alert senders.\n-- Conditional, in case someone already fixed their install manually.\nINSERT INTO alertsender (id, name, handler) SELECT 1, 'Email', 'email'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=1);\n\nINSERT INTO alertsender (id, name, handler) SELECT 2, 'SMS', 'sms'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=2);\n\nINSERT INTO alertsender (id, name, handler) SELECT 3, 'Jabber', 'jabber'\n  WHERE NOT EXISTS (SELECT id FROM alertsender WHERE id=3);\n\n-- Fix for LP#285331 Duplicate RRD file references\n-- Delete oldest entries if there are duplicate rrd file references\nDELETE FROM rrd_file \nWHERE rrd_fileid IN (SELECT b.rrd_fileid\n                     FROM rrd_file a\n                     JOIN rrd_file b ON (a.path = b.path AND \n                                         a.filename=b.filename AND \n                                         a.rrd_fileid > b.rrd_fileid)\n                     );\n\n-- Modify rrd_file to prevent duplicate path/filename entries\nALTER TABLE rrd_file ADD CONSTRAINT rrd_file_path_filename_key UNIQUE (path, filename);\n\n-- Tables and indices for new radius accounting subsystem\nCREATE SCHEMA radius;\nSET search_path TO radius;\n\nCREATE TABLE radiusacct (\n        RadAcctId               BIGSERIAL PRIMARY KEY,\n        AcctSessionId           VARCHAR(96) NOT NULL,\n        AcctUniqueId            VARCHAR(32) NOT NULL,\n        UserName                VARCHAR(70),\n        Realm                   VARCHAR(24),\n        NASIPAddress            INET NOT NULL,\n        NASPortType             VARCHAR(32),\n        CiscoNASPort            VARCHAR(32),\n        AcctStartTime           TIMESTAMP,\n        AcctStopTime            TIMESTAMP,\n        AcctSessionTime         BIGINT,\n        AcctInputOctets         BIGINT,\n        AcctOutputOctets        BIGINT,\n        CalledStationId         VARCHAR(50),\n        CallingStationId        VARCHAR(50),\n        AcctTerminateCause      VARCHAR(32),\n        FramedProtocol          VARCHAR(32),\n        FramedIPAddress         INET,\n        AcctStartDelay          BIGINT,\n        AcctStopDelay           BIGINT\n);\n\nCREATE TABLE radiuslog (\n        ID                      BIGSERIAL PRIMARY KEY,\n        Time                    TIMESTAMP with time zone,\n        Type                    VARCHAR(10),\n        Message                 VARCHAR(200),\n        Status                  VARCHAR(65),\n        UserName                VARCHAR(70),\n        Client                  VARCHAR(65),\n        Port                    VARCHAR(8)\n        );\n\n\n-- For use by onoff-, update-, stop- and simul_* queries\nCREATE INDEX radiusacct_active_user_idx ON radiusacct (UserName) WHERE AcctStopTime IS NULL;\n-- and for common statistic queries:\nCREATE INDEX radiusacct_start_user_index ON radiusacct (AcctStartTime, lower(UserName));\nCREATE INDEX radiusacct_stop_user_index ON radiusacct (AcctStopTime, UserName);\n\nCREATE INDEX radiuslog_time_index ON radiuslog(time);\nCREATE INDEX radiuslog_username_index ON radiuslog(UserName);\n\nRESET search_path;\n\n------------------------------------------------------------------------------\n-- simple schema version check table\n------------------------------------------------------------------------------\nCREATE TABLE manage.nav_schema_version (\n    version VARCHAR NOT NULL,\n    time TIMESTAMP NOT NULL DEFAULT NOW()\n);\n\n-- FIXME: Insert default as version name.  This should be updated on\n-- each NAV release branch.\nINSERT INTO nav_schema_version (version) VALUES ('3.5.0b2');\n\n-- Ensure only a single row will ever exist in this table.\nCREATE OR REPLACE RULE nav_schema_version_insert AS ON INSERT TO nav_schema_version\n    DO INSTEAD UPDATE nav_schema_version SET version=NEW.version, time=NOW();\n\nCOMMIT;"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.5.0b3.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.5.0b2 to 3.5.0b3\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * This upgrade script assumes you have merged your NAV databases into\n * a single, multi-namespaced database and run 3.5.0b1.sql and\n * 3.5.0b2.sql.  If you haven't, please read the release notes for NAV\n * 3.5 and the instructions in doc/sql/upgrades/README .\n *\n * *************** NB NB NB NB NB NB NB ***************\n *\n * Connect to PostgreSQL and run this script as the nav database owner\n * like this:\n *\n *  psql -f 3.5.0b3.sql <db_name> <username>\n *\n * When you are done, make sure the database search path is correct,\n * by running the new program navschema.py.  Otherwise your radius\n * module might not work.\n*/\n\nBEGIN;\n\n-- Add alerthistid foreign key so that we can use alerthistory in\n-- alertengine at a latter point in time.\nALTER TABLE manage.alertq ADD alerthistid integer NULL;\nALTER TABLE manage.alertq ADD CONSTRAINT alertq_alerthistid_fkey\n  FOREIGN KEY (alerthistid)\n  REFERENCES manage.alerthist (alerthistid)\n  ON UPDATE CASCADE\n  ON DELETE SET NULL;\n\n-- Remove this field which was added in an earlier 3.5 beta.\nALTER TABLE manage.alertq DROP closed;\n\n-- Update two radius indexes\nDROP INDEX radiusacct_stop_user_index;\nCREATE INDEX radiusacct_stop_user_index ON radiusacct (AcctStopTime, lower(UserName));\n\nDROP INDEX radiuslog_username_index;\nCREATE INDEX radiuslog_username_index ON radiuslog(lower(UserName));\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.5.0b3');\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.0b6 to 3.6.0 (final).\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.0.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.0.sql nav\n *\n*/\n\nBEGIN;\n-- Insert schema changes here.\n\nALTER TABLE rproto_attr\n  DROP CONSTRAINT rproto_attr_interfaceid_fkey;\n\nALTER TABLE rproto_attr\n  ADD CONSTRAINT rproto_attr_interfaceid_fkey FOREIGN KEY (interfaceid) REFERENCES interface\n  ON UPDATE CASCADE ON DELETE CASCADE;\n\n-- getDeviceData may have left duplicate interfaces hanging around in\n-- the database, so we try to resolve them here.  Let ipdevpoll fix\n-- the rest.\nDELETE FROM interface\nWHERE interfaceid IN (\n  SELECT\n    i2.interfaceid AS dupe_id\n  FROM\n    interface i1\n  JOIN\n    interface i2 ON (i1.netboxid = i2.netboxid AND\n                     i1.ifindex = i2.ifindex AND\n                     i1.interfaceid > i2.interfaceid)\n);\n\nALTER TABLE interface\n  DROP CONSTRAINT interface_interfaceid_netboxid_unique;\n\nALTER TABLE interface\n  ADD CONSTRAINT interface_netboxid_ifindex_unique UNIQUE (netboxid, ifindex);\n\nCREATE INDEX arp_netboxid_btree ON arp USING btree (netboxid);\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.0');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.0b1.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.5 to 3.6.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.0b1.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.0b1.sql nav\n *\n*/\n\nBEGIN;\n-- Insert schema changes here.\n\n-- Force all foreign key constraints to follow the exact same naming\n-- pattern: <tablename>_<column_name>_fkey \n--\n-- This should change about 7 \"wrongly\" named foreign keys on the\n-- netbox, accountalertqueue and log_message_type tables, and any\n-- foreign key whose name has been automatically set to '$<number>' by\n-- older versions of PostgreSQL.\nSET SESSION AUTHORIZATION postgres; -- This requires superuser access!\nUPDATE pg_constraint\nSET conname=cl.relname || '_' || pa.attname || '_fkey'\nFROM pg_class cl, pg_attribute pa, pg_namespace nsp\nWHERE\n  contype = 'f' AND\n  conname <> (cl.relname || '_' || pa.attname || '_fkey') AND\n  connamespace = nsp.oid AND\n  nspname IN ('manage', 'profiles', 'arnold', 'logger', 'radius') AND\n  conrelid = cl.oid AND\n  pa.attrelid = cl.oid AND\n  conkey[1] = pa.attnum\n;\n\nALTER TABLE org DROP CONSTRAINT \"org_parent_fkey\";\nALTER TABLE org ADD CONSTRAINT org_parent_fkey \n                               FOREIGN KEY (parent) REFERENCES org (orgid)\n                               ON UPDATE CASCADE;\n\n-- Index to speed up ipdevinfo queries for the first cam entry from a box\nCREATE INDEX cam_netboxid_start_time_btree ON cam USING btree (netboxid, start_time);\n\n-- Try to provide consistency between code and db names.\nALTER TABLE alertsubscription RENAME ignore_closed_alerts TO ignore_resolved_alerts;\n\n-- New consolidated interface table\n-- See MIB-II, IF-MIB, RFC 1229\nCREATE TABLE manage.interface (\n  interfaceid SERIAL NOT NULL,\n  netboxid INT4 NOT NULL,\n  moduleid INT4,\n  ifindex INT4 NOT NULL,\n  ifname VARCHAR,\n  ifdescr VARCHAR,\n  iftype INT4,\n  speed DOUBLE PRECISION,\n  ifphysaddress MACADDR,\n  ifadminstatus INT4, \n  ifoperstatus INT4,\n  iflastchange INT4,\n  ifconnectorpresent BOOLEAN,\n  ifpromiscuousmode BOOLEAN,\n  ifalias VARCHAR,\n\n  -- non IF-MIB values\n  baseport INT4,\n  media VARCHAR,\n  vlan INT4,\n  trunk BOOLEAN,\n  duplex CHAR(1) CHECK (duplex='f' OR duplex='h'), -- f=full, h=half\n\n  to_netboxid INT4, \n  to_interfaceid INT4, \n\n  gone_since TIMESTAMP,\n  \n  CONSTRAINT interface_pkey PRIMARY KEY (interfaceid),\n  CONSTRAINT interface_netboxid_fkey \n             FOREIGN KEY (netboxid)\n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE CASCADE,\n  CONSTRAINT interface_moduleid_fkey \n             FOREIGN KEY (moduleid)\n             REFERENCES module (moduleid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_to_netboxid_fkey \n             FOREIGN KEY (to_netboxid) \n             REFERENCES netbox (netboxid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_to_interfaceid_fkey \n             FOREIGN KEY (to_interfaceid) \n             REFERENCES interface (interfaceid)\n             ON UPDATE CASCADE ON DELETE SET NULL,\n  CONSTRAINT interface_interfaceid_netboxid_unique\n             UNIQUE (interfaceid, netboxid)\n);\n\nCREATE INDEX interface_to_interfaceid_btree ON interface USING btree (to_interfaceid);\n\n-- this should be populated with entries parsed from \n-- http://www.iana.org/assignments/ianaiftype-mib\nCREATE TABLE manage.iana_iftype (\n  iftype INT4 NOT NULL,\n  name VARCHAR NOT NULL,\n  descr VARCHAR,\n\n  CONSTRAINT iftype_pkey PRIMARY KEY (iftype)\n);\n\n-- ---------------------------------------------------------------- --\n-- Convert existing swport and gwport records to interface records. --\n-- ---------------------------------------------------------------- --\n\n-- First, map old primary keys to new ones. Prime the interfaceid\n-- sequence with the max value of the two existing sequences+1000, so\n-- we don't create duplicates.\nSELECT setval('interface_interfaceid_seq',  GREATEST( nextval('swport_swportid_seq'), nextval('gwport_gwportid_seq'))+1000);\n\nCREATE TEMPORARY TABLE swport_map AS\n  SELECT swportid, nextval('interface_interfaceid_seq') AS new_id FROM swport ORDER BY swportid;\n\nCREATE TEMPORARY TABLE gwport_map AS\n  SELECT gwportid, nextval('interface_interfaceid_seq') AS new_id FROM gwport ORDER BY gwportid;\n\nUPDATE swport SET swportid=map.new_id FROM swport_map AS map WHERE map.swportid = swport.swportid;\nUPDATE gwport SET gwportid=map.new_id FROM gwport_map AS map WHERE map.gwportid = gwport.gwportid;\n\n-- convert swport records\nINSERT INTO interface\n  SELECT \n    swportid AS interfaceid,\n    netboxid, \n    moduleid, \n    ifindex, \n    interface AS ifname,\n    interface AS ifdescr, \n    NULL AS iftype,\n    speed,\n    NULL AS ifphysaddress,\n    CASE link WHEN 'd' THEN 2 ELSE 1 END AS ifadminstatus,\n    CASE link WHEN 'y' THEN 1 ELSE 2 END AS ifoperstatus,\n    NULL AS iflastchange,\n    NULL AS ifconnectorpresent,\n    NULL AS ifpromiscuousmode,\n    portname AS ifalias,\n    port AS baseport,\n    media,\n    vlan,\n    trunk,\n    duplex,\n    to_netboxid,\n    to_swportid AS to_interfaceid\n  FROM swport \n  JOIN module USING (moduleid);\n\n-- convert gwport records\nINSERT INTO interface\n  SELECT \n    gwportid AS interfaceid,\n    netboxid, \n    moduleid, \n    ifindex, \n    interface AS ifname, \n    interface AS ifdescr, \n    NULL AS iftype,\n    speed,\n    NULL AS ifphysaddress,\n    CASE link WHEN 'd' THEN 2 ELSE 1 END AS ifadminstatus,\n    CASE link WHEN 'y' THEN 1 ELSE 2 END AS ifoperstatus,\n    NULL AS iflastchange,\n    NULL AS ifconnectorpresent,\n    NULL AS ifpromiscuousmode,\n    portname AS ifalias,\n    NULL AS baseport,\n    NULL AS media,\n    NULL AS vlan,\n    NULL AS trunk,\n    NULL AS duplex,\n    to_netboxid,\n    to_swportid AS to_interfaceid\n  FROM gwport \n  JOIN module USING (moduleid);\n\n\n-- Routing protocol attributes\nCREATE TABLE manage.rproto_attr (\n  id SERIAL NOT NULL,\n  interfaceid INT4 NOT NULL,\n  protoname VARCHAR NOT NULL, -- bgp/ospf/isis\n  metric INT4,\n\n  CONSTRAINT rproto_attr_pkey \n             PRIMARY KEY (id),\n  CONSTRAINT rproto_attr_interfaceid_fkey\n             FOREIGN KEY (interfaceid)\n             REFERENCES interface (interfaceid)\n);\n\n-- Insert any existing OSPF metric values into the new table\nINSERT INTO rproto_attr\n  SELECT \n    nextval('rproto_attr_id_seq') AS id,\n    gwportid AS interfaceid,\n    'ospf' AS protoname,\n    metric\n  FROM gwport WHERE metric IS NOT NULL;\n\n-- Now begins the arduous task of replacing all foreign keys referring\n-- to gwport and swport\nALTER TABLE swp_netbox RENAME COLUMN to_swportid TO to_interfaceid;\nALTER TABLE swp_netbox DROP CONSTRAINT swp_netbox_to_swportid_fkey;\nALTER TABLE swp_netbox ADD CONSTRAINT swp_netbox_to_interfaceid_fkey \n                                      FOREIGN KEY (to_interfaceid) REFERENCES interface(interfaceid)\n                                      ON UPDATE CASCADE ON DELETE SET NULL;\n               \nALTER TABLE gwportprefix RENAME COLUMN gwportid TO interfaceid;\nALTER TABLE gwportprefix DROP CONSTRAINT gwportprefix_gwportid_fkey;\nALTER TABLE gwportprefix ADD CONSTRAINT gwportprefix_interfaceid_fkey \n                                        FOREIGN KEY (interfaceid) REFERENCES interface(interfaceid)\n                                        ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE gwportprefix_gwportid_btree RENAME TO gwportprefix_interfaceid_btree;\n\nALTER TABLE swportvlan RENAME COLUMN swportid TO interfaceid;\nALTER TABLE swportvlan DROP CONSTRAINT swportvlan_swportid_fkey;\nALTER TABLE swportvlan ADD CONSTRAINT swportvlan_interfaceid_fkey \n                                      FOREIGN KEY (interfaceid) REFERENCES interface(interfaceid)\n                                      ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE swportvlan_swportid_key RENAME TO swportvlan_interfaceid_key;\nALTER TABLE swportvlan_swportid_btree RENAME TO swportvlan_interfaceid_btree;\n\nALTER TABLE swportallowedvlan RENAME COLUMN swportid TO interfaceid;\nALTER TABLE swportallowedvlan DROP CONSTRAINT swportallowedvlan_swportid_fkey;\nALTER TABLE swportallowedvlan ADD CONSTRAINT swportallowedvlan_interfaceid_fkey\n                                             FOREIGN KEY (interfaceid) REFERENCES interface(interfaceid)\n                                             ON UPDATE CASCADE ON DELETE CASCADE;\n\nALTER TABLE swportblocked RENAME COLUMN swportid TO interfaceid;\nALTER TABLE swportblocked DROP CONSTRAINT swportblocked_swportid_fkey;\nALTER TABLE swportblocked ADD CONSTRAINT swportblocked_interfaceid_fkey\n                                         FOREIGN KEY (interfaceid) REFERENCES interface(interfaceid)\n                                         ON UPDATE CASCADE ON DELETE CASCADE;\n\nALTER TABLE patch RENAME COLUMN swportid TO interfaceid;\nALTER TABLE patch DROP CONSTRAINT patch_swportid_fkey;\nALTER TABLE patch ADD CONSTRAINT patch_interfaceid_fkey \n\t                         FOREIGN KEY (interfaceid) REFERENCES interface(interfaceid)\n                                 ON UPDATE CASCADE ON DELETE CASCADE;\nALTER TABLE patch_swportid_key RENAME TO patch_interfaceid_key;\n\n-- Update tables that may reference swport/gwport without proper referential integrity\nUPDATE rrd_file\nSET key='interface', value=map.new_id::text \nFROM swport_map AS map\nWHERE rrd_file.key = 'swport' AND rrd_file.value::integer = map.swportid;\n\nUPDATE rrd_file\nSET key='interface', value=map.new_id::text \nFROM gwport_map AS map\nWHERE rrd_file.key = 'gwport' AND rrd_file.value::integer = map.gwportid;\n\n-- Recreate views that depend on swport or gwport\nCREATE OR REPLACE VIEW manage.netboxmac AS  \n(SELECT DISTINCT ON (mac) netbox.netboxid, arp.mac\n FROM netbox\n JOIN arp ON (arp.arpid = (SELECT arp.arpid FROM arp WHERE arp.ip=netbox.ip AND end_time='infinity' LIMIT 1)))\nUNION DISTINCT\n(SELECT DISTINCT ON (mac) module.netboxid,mac\n FROM arp\n JOIN gwportprefix gwp ON\n  (arp.ip=gwp.gwip AND (hsrp=true OR (SELECT COUNT(*) FROM gwportprefix WHERE gwp.prefixid=gwportprefix.prefixid AND hsrp=true) = 0))\n JOIN interface USING (interfaceid)\n JOIN module USING (moduleid)\n WHERE arp.end_time='infinity');\n\nDROP VIEW allowedvlan_both;\nDROP VIEW allowedvlan;\n\n-- Drop unnecessary table and update the corresponding allowedvlan view\nDROP TABLE manage.range;\nCREATE OR REPLACE VIEW allowedvlan AS (\n  SELECT \n    interfaceid, vlan AS allowedvlan \n  FROM \n    (SELECT interfaceid, decode(hexstring, 'hex') AS octetstring \n     FROM swportallowedvlan) AS allowed_octets\n  CROSS JOIN\n    generate_series(0, 4095) AS vlan\n  WHERE\n    vlan < length(octetstring)*8 AND\n    (CASE \n       WHEN length(octetstring)>=128 \n         THEN get_bit(octetstring, (vlan/8)*8+7-(vlan%8))\n       ELSE get_bit(octetstring,(length(octetstring)*8-vlan+7>>3<<3)-8+(vlan%8))\n     END) = 1\n);\n\n\nCREATE OR REPLACE VIEW manage.allowedvlan_both AS\n  (select interfaceid,interfaceid as interfaceid2,allowedvlan from allowedvlan ORDER BY allowedvlan) union\n  (select  interface.interfaceid,to_interfaceid as interfaceid2,allowedvlan from interface join allowedvlan\n    on (interface.to_interfaceid=allowedvlan.interfaceid) ORDER BY allowedvlan);\n\n-- Then, finally, get rid of the old tables\nDROP TABLE gwport;\nDROP TABLE swport;\n\n-- View to mimic old swport table\nCREATE OR REPLACE VIEW manage.swport AS (\n  SELECT \n    interfaceid AS swportid,\n    moduleid,\n    ifindex,\n    baseport AS port,\n    ifdescr AS interface,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link,\n    speed,\n    duplex,\n    media,\n    vlan,\n    trunk,\n    ifalias AS portname,\n    to_netboxid,\n    to_interfaceid AS to_swportid\n  FROM interface\n  WHERE interfaceid NOT IN (SELECT interfaceid FROM gwportprefix)\n);\n\n-- View to mimic old gwport table\nCREATE OR REPLACE VIEW manage.gwport AS (\n  SELECT \n    i.interfaceid AS gwportid,\n    moduleid,\n    ifindex,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link,\n    NULL::INT4 AS masterindex,\n    ifdescr AS interface,\n    speed,\n    metric,\n    ifalias AS portname,\n    to_netboxid,\n    to_interfaceid AS to_swportid\n  FROM interface i\n  JOIN gwportprefix gwpfx ON (i.interfaceid=gwpfx.interfaceid)\n  LEFT JOIN rproto_attr ra ON (i.interfaceid=ra.interfaceid AND ra.protoname='ospf')\n);\n\n-- View to see only switch ports\nCREATE OR REPLACE VIEW manage.interface_swport AS (\n  SELECT\n    interface.*,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link\n  FROM\n    interface\n  WHERE\n    baseport IS NOT NULL\n);\n\n-- View to see only router ports\nCREATE OR REPLACE VIEW manage.interface_gwport AS (\n  SELECT\n    interface.*,\n    CASE ifadminstatus\n      WHEN 1 THEN CASE ifoperstatus\n                    WHEN 1 THEN 'y'::CHAR\n                    ELSE 'n'::char\n                  END\n      ELSE 'd'::char\n    END AS link\n  FROM\n    interface\n  JOIN\n    (SELECT interfaceid FROM gwportprefix GROUP BY interfaceid) routerports USING (interfaceid)\n);\n\n\n-- Modules aren't necessarily identified using integers, so we add names.\nALTER TABLE module ALTER COLUMN module DROP NOT NULL;\nALTER TABLE module ADD COLUMN name VARCHAR;\nALTER TABLE module DROP CONSTRAINT module_netboxid_key;\nUPDATE module SET name = module::text;\nALTER TABLE module ALTER COLUMN name SET NOT NULL;\nALTER TABLE module ADD CONSTRAINT module_netboxid_key UNIQUE (netboxid, name);\n\n\n-- Add netbox updating rules to snmpoid\nCREATE RULE reprofile_netboxes_on_snmpoid_insert\n  AS ON INSERT TO snmpoid\n  DO ALSO\n    UPDATE netbox SET uptodate=false;\n\nCREATE RULE reprofile_netboxes_on_snmpoid_update\n  AS ON UPDATE TO snmpoid\n  DO ALSO\n    UPDATE netbox SET uptodate=false;\n\nDELETE FROM netboxsnmpoid;\nALTER TABLE netboxsnmpoid ALTER COLUMN netboxid SET NOT NULL;\nALTER TABLE netboxsnmpoid ALTER COLUMN snmpoidid SET NOT NULL;\n\n\n-- Remove product and deviceorder\nALTER TABLE device DROP COLUMN productid;\nALTER TABLE device DROP COLUMN deviceorderid;\nALTER TABLE device DROP COLUMN active;\n\nDROP TABLE deviceorder;\nDROP TABLE product;\n\n-- Django needs a simple integer primary key in accountnavbar\nALTER TABLE accountnavbar DROP CONSTRAINT accountnavbar_pkey;\nCREATE SEQUENCE profiles.accountnavbar_id_seq;\nALTER TABLE accountnavbar ADD COLUMN id integer NOT NULL PRIMARY KEY DEFAULT nextval('accountnavbar_id_seq');\n\n-- Status preference tables\nCREATE SEQUENCE profiles.statuspreference_id_seq START 1000;\nCREATE TABLE profiles.statuspreference (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_id_seq'),\n\tname varchar NOT NULL,\n\tposition integer NOT NULL,\n\ttype varchar NOT NULL,\n\taccountid integer NOT NULL,\n\n\tservices varchar NOT NULL DEFAULT '',\n\tstates varchar NOT NULL DEFAULT 'n,s',\n\n\tCONSTRAINT statuspreference_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_accountid_fkey\n\t\tFOREIGN KEY (accountid) REFERENCES Account(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\n-- Only compatible with PostgreSQL >= 8.2:\n-- ALTER SEQUENCE statuspref_id_seq OWNED BY statuspref.id;\n\nCREATE SEQUENCE profiles.statuspreference_organization_id_seq;\nCREATE TABLE profiles.statuspreference_organization (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_organization_id_seq'),\n\tstatuspreference_id integer NOT NULL,\n\torganization_id varchar NOT NULL,\n\n\tCONSTRAINT statuspreference_organization_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_organization_statuspreference_id_key\n\t\tUNIQUE(statuspreference_id, organization_id),\n\tCONSTRAINT statuspreference_organization_statuspreference_id_fkey\n\t\tFOREIGN KEY (statuspreference_id) REFERENCES statuspreference(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE,\n\tCONSTRAINT statuspreference_organization_organization_id_fkey\n\t\tFOREIGN KEY (organization_id) REFERENCES manage.org(orgid)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\n-- Only compatible with PostgreSQL >= 8.2:\n-- ALTER SEQUENCE statuspref_org_id_seq OWNED BY statuspref_org.id;\n\nCREATE SEQUENCE profiles.statuspreference_category_id_seq;\nCREATE TABLE profiles.statuspreference_category (\n\tid integer NOT NULL DEFAULT nextval('statuspreference_category_id_seq'),\n\tstatuspreference_id integer NOT NULL,\n\tcategory_id varchar NOT NULL,\n\n\tCONSTRAINT statuspreference_category_pkey PRIMARY KEY(id),\n\tCONSTRAINT statuspreference_category_statuspreference_id_key\n\t\tUNIQUE(statuspreference_id, category_id),\n\tCONSTRAINT statuspreference_category_statuspreference_id_fkey\n\t\tFOREIGN KEY (statuspreference_id) REFERENCES statuspreference(id)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE,\n\tCONSTRAINT statuspreference_category_category_id_fkey\n\t\tFOREIGN KEY (category_id) REFERENCES manage.cat(catid)\n\t\tON UPDATE CASCADE\n\t\tON DELETE CASCADE\n);\n-- Only compatible with PostgreSQL >= 8.2:\n-- ALTER SEQUENCE statuspreference_category_id_seq OWNED BY statuspreference_category.id;\n\n-- StatusPreferences for Default user\n\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (1, 'IP devices down', 1, 'netbox', 0, 'n');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (2, 'IP devices in shadow', 2, 'netbox', 0, 's');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (3, 'IP devices on maintenance', 3, 'netbox_maintenance', 0, 'n,s');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (4, 'Modules down/in shadow', 4, 'module', 0, 'n,s');\nINSERT INTO statuspreference (id, name, position, type, accountid, states) VALUES (5, 'Services down', 5, 'service', 0, 'n,s');\n\n\n-- DeviceHistory rewrite \n-- Django needs an id field for every table.\n--\nCREATE SEQUENCE manage.eventqvar_id_seq;\nALTER TABLE eventqvar ADD COLUMN id integer NOT NULL\n\tDEFAULT nextval('eventqvar_id_seq')\n\tCONSTRAINT eventqvar_pkey PRIMARY KEY;\n\n\n-- Remove floating devices.\n-- Devices that don't have a serial and no connected modules or netboxes.\n-- Triggers on delete on module and netbox.\nCREATE OR REPLACE FUNCTION manage.remove_floating_devices() RETURNS TRIGGER AS '\n    BEGIN\n        DELETE FROM device WHERE\n            deviceid NOT IN (SELECT deviceid FROM netbox) AND\n            deviceid NOT IN (SELECT deviceid FROM module) AND\n            serial IS NULL;\n        RETURN NULL;\n        END;\n    ' language 'plpgsql';\n\nCREATE TRIGGER trig_module_delete_prune_devices\n    AFTER DELETE ON module\n    FOR EACH STATEMENT\n    EXECUTE PROCEDURE remove_floating_devices();\n\nCREATE TRIGGER trig_netbox_delete_prune_devices\n    AFTER DELETE ON netbox\n    FOR EACH STATEMENT\n    EXECUTE PROCEDURE remove_floating_devices();\n\n-- Change type on arnold.identity.mac from varchar to macaddr\nALTER TABLE identity ALTER mac TYPE macaddr USING mac::macaddr;\n\n-- Add foreign key to accountalertqueue.alert_id LP#494036\nALTER TABLE accountalertqueue ADD CONSTRAINT accountalertqueue_alert_id_fkey\n    FOREIGN KEY(alert_id) REFERENCES alertq(alertqid);\n\n-- View to match each netbox with a prefix\n-- Multiple prefixes may match netbox.ip, but only the one with the longest\n-- mask is interesting.\nCREATE VIEW netboxprefix AS\n  SELECT netbox.netboxid,\n         (SELECT prefix.prefixid\n          FROM prefix\n          WHERE netbox.ip << prefix.netaddr::inet\n          ORDER BY masklen(prefix.netaddr::inet) DESC\n          LIMIT 1) AS prefixid\n  FROM netbox;\n\n-- Function to update prefix of all netbox records\nCREATE OR REPLACE FUNCTION update_netbox_prefixes() RETURNS TRIGGER AS'\n  BEGIN\n    UPDATE NETBOX n\n    SET prefixid=np.prefixid\n    FROM netboxprefix np\n    WHERE n.netboxid=np.netboxid;\n\n    RETURN NULL;\n  END;\n  ' language 'plpgsql';\n\n-- Trigger to update netbox prefixid's on all changes to the prefix table\nCREATE TRIGGER update_netbox_on_prefix_changes\n  AFTER INSERT OR DELETE OR UPDATE ON prefix FOR EACH STATEMENT EXECUTE PROCEDURE update_netbox_prefixes();\n\n\n-- Since we are running as the postgres superuser, we've just created a bunch\n-- of new relations owned by postgres, and not by the current database owner.\n-- This finds any relation in the NAV namespaces that is owned by the postgres\n-- superuser, and resets their ownership to the database owner.\nUPDATE pg_class\n   SET relowner = (SELECT datdba FROM pg_database  WHERE datname=current_database())\n WHERE relowner = (SELECT usesysid\n                   FROM pg_user\n\t\t   WHERE usename='postgres' AND \n\t\t         relnamespace IN (SELECT oid \n\t\t\t                  FROM pg_namespace \n\t\t\t\t\t  WHERE nspname IN ('manage', 'arnold', 'logger', 'radius', 'profiles')));\n\n-- Insert event and alerttypes for airespace traphandler\nINSERT INTO eventtype (\nSELECT 'apState','Tells us whether an access point has disassociated or associated from the controller','y' WHERE NOT EXISTS (\nSELECT * FROM eventtype WHERE eventtypeid = 'apState'));\n\nINSERT INTO alertType (\nSELECT nextval('alerttype_alerttypeid_seq'), 'apState', 'apUp', 'AP associated with controller' WHERE NOT EXISTS (\nSELECT * FROM alerttype WHERE alerttype = 'apUp'));\n\nINSERT INTO alertType (\nSELECT nextval('alerttype_alerttypeid_seq'), 'apState', 'apDown', 'AP disassociated from controller' WHERE NOT EXISTS (\nSELECT * FROM alerttype WHERE alerttype = 'apDown'));\n\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.0b1');\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.0b3.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.0b1 or 3.6.0b2 to 3.6.0b3.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.0b3.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.0b3.sql nav\n *\n*/\n\nBEGIN;\n-- Insert schema changes here.\n\n-- View for listing all IP addresses that appear to be alive at the moment.\nCREATE OR REPLACE VIEW manage.live_clients AS\n  SELECT arp.ip, arp.mac\n    FROM arp\n   WHERE arp.end_time = 'infinity';\n\n-- Drop trigger that causes spurious deadlocks\nDROP TRIGGER update_netbox_on_prefix_changes ON prefix;\nDROP FUNCTION update_netbox_prefixes();\n\n-- Since we are running as the postgres superuser, we've just created a bunch\n-- of new relations owned by postgres, and not by the current database owner.\n-- This finds any relation in the NAV namespaces that is owned by the postgres\n-- superuser, and resets their ownership to the database owner.\nUPDATE pg_class\n   SET relowner = (SELECT datdba FROM pg_database  WHERE datname=current_database())\n WHERE relowner = (SELECT usesysid\n                   FROM pg_user\n\t\t   WHERE usename='postgres' AND \n\t\t         relnamespace IN (SELECT oid \n\t\t\t                  FROM pg_namespace \n\t\t\t\t\t  WHERE nspname IN ('manage', 'arnold', 'logger', 'radius', 'profiles')));\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.0b3');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.0b5.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.0b3 or 3.6.0b4 to 3.6.0b5.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.0b5.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.0b5.sql nav\n *\n*/\nBEGIN;\n-- Insert schema changes here.\n\nALTER TABLE netbox DROP COLUMN subcat;\nALTER TABLE netbox DROP COLUMN snmp_agent;\nALTER TABLE device DROP COLUMN auto;\nALTER TABLE \"type\" DROP COLUMN frequency;\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.0b5');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.0b6.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.0b5 to 3.6.0b6.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.0b6.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.0b6.sql nav\n *\n*/\nBEGIN;\n-- Insert schema changes here.\n\nALTER TABLE netbox DROP COLUMN prefixid;\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.0b6');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.6.1.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.0 to 3.6.1.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.6.1.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.6.1.sql nav\n *\n*/\n\nBEGIN;\n-- Insert schema changes here.\n\nALTER TABLE interface ALTER COLUMN ifindex DROP NOT NULL;\n\n-- ipdevpoll may have set null values in sysname, fix this before\n-- adding a constraint\nUPDATE netbox SET sysname=host(ip) WHERE sysname IS NULL;\nALTER TABLE netbox ALTER COLUMN sysname SET NOT NULL;\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.6.1');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.7.0.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.6.1 to 3.7.0.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.7.0.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.7.0.sql nav\n *\n*/\nBEGIN;\n-- Insert schema changes here.\n\nALTER TABLE room ADD COLUMN position POINT;\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.7.0');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/3.7.1.sql",
    "content": "/*\n *\n * This SQL script is designed to upgrade your NAV database from\n * version 3.7.0 to 3.7.1.\n *\n * Connect to PostgreSQL as the postgres superuser like this:\n *\n *  psql -f 3.7.1.sql nav postgres\n *\n * Or more likely, like this:\n *\n *  sudo -u postgres psql -f 3.7.1.sql nav\n *\n*/\n\nBEGIN;\n-- Insert schema changes here.\n\n-- Ensure that deletes/updates cascades to accountalertqueue, or some\n-- netboxes can't be deleted until the alert queues have been purged.\nALTER TABLE accountalertqueue DROP CONSTRAINT accountalertqueue_alert_id_fkey;\nALTER TABLE accountalertqueue ADD CONSTRAINT accountalertqueue_alert_id_fkey\n    FOREIGN KEY(alert_id) REFERENCES alertq(alertqid)\n    ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- Insert the new version number if we got this far.\nINSERT INTO nav_schema_version (version) VALUES ('3.7.1');\n\nCOMMIT;\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/README",
    "content": "Historic upgrade scripts\n------------------------\nThis directory (`historic-upgrades`) contains historic PostgreSQL scripts to\nconvert your database schema when a new NAV release has updated it.  Each file\nwill be named after the release version it came with, meaning that if version\n3.7.1 has updates to the database schema, there will be a file called\n3.7.1.sql here.\n\nEach of these upgrade scripts only upgrade changes that were made since the\nprevious release.  If several releases have been made since the version you\nare already running, you must apply every upgrade script since then in\nchronological order.\n\nSince NAV version 3.8, schema upgrades can be be applied automatically.\nPlease see the sql/README for updated instructions.\n\nPerforming the schema upgrade\n-----------------------------\n1. Stop your NAV background processes completely, using `nav stop`.  Then stop\n   your Apache web server process (as the NAV web interface will be busy using\n   the database). Sometimes it is necessary to also restart the PostgreSQL\n   server to make sure that all database connections from NAV were properly\n   closed.  Of course, you should already have done all this before upgrading\n   the NAV software.\n\n2. Upgrade your NAV software if you haven't already.\n\n3. Find the appropriate upgrade script(s) from this directory.  Read the\n   comments at the top of the file to find more information about the upgrade.\n   After following any instructions in the comments, run the upgrade script as\n   the PostgreSQL superuser (usually named postgres), or as the NAV database\n   owner::\n \n     psql -f <upgrade-script.sql> nav <username>\n\n4. If everything looks OK, start NAV again by issuing the command `nav start`\n   and then start the Apache web server.\n\n\nIf something fails during the schema upgrade and you don't know why, consult\nthe nav-users mailing list.\n\n\nMerging databases on upgrade from older versions than 3.5\n---------------------------------------------------------\nPrior to NAV 3.5, four separate PostgreSQL databases were used to\nstore NAV's data.  In NAV 3.5, everything is assumed to be located in\na single database with multiple namespaces.\n\nIf you are upgrading from NAV 3.4 to NAV 3.5, you MUST merge your\ndatabases BEFORE you attempt to run any 3.5.*.sql script from this\ndirectory.\n\nThe `mergedb.sh` shell script will help you with this.  This script will\nattempt to create a new database called 'nav' (configurable by command line\noption), then use `pg_dump` to dump the contents of the four old databases\n(`manage`, `navprofiles`, `logger` and `arnold`).  Each of these database\ndumps are then loaded into separate namespaces in the new database.\n\nOn most systems, the script should be run by the postgres shell account (via\nsu or sudo) to achieve superuser access in PostgreSQL.  For detailed info on\nusage of the script, run it with the -h option.\n"
  },
  {
    "path": "python/nav/models/sql/historic-upgrades/mergedb.sh",
    "content": "#!/bin/sh\n# Copyright 2008 Uninett AS\n# License: GPLv3\n# Author: Morten Brekkevold <morten.brekkevold@uninett.no>\n#\nnewnavdb=nav\nnavdbuser=nav\nnocreatedb=\nnocreateuser=\nnodump=\ndumplocation=.\n\nwhile getopts 'd:u:Dhnl:' OPTION\ndo\n  case $OPTION in\n      d) newnavdb=\"$OPTARG\"\n          ;;\n      u) navdbuser=\"$OPTARG\"\n          ;;\n      D) nocreatedb=1\n          ;;\n      n) nodump=1\n          ;;\n      l) dumplocation=\"$OPTARG\"\n\t  ;;\n\n      ?) cat <<EOF >&2\nCopyright 2008 Uninett AS\n\nThis script automates the task of merging the four NAV 3.4 databases\ninto a single multi-namespaced NAV 3.5 database.\n\nUsage: $(basename $0): [-d dbname] [-u dbuser] [-D] [-n]\n\nOptions:\n  -d dbname      specify the name of the database to create and merge to, \n                 default value is nav\n  -u dbuser      specify the name of the database user to own the database\n                 and the relations therein, default value is nav\n  -D             don't create a database, assume dbname already exists\n  -l path        path to the directory where dump files will be created,\n                 default is the current working directory\n  -n             do not create dump files, assume they already exist in \n                 the dump path (manage-dump.sql, navprofiles-dump.sql,\n                 logger-dump.sql arnold-dump.sql)\n\nEnvironment variables:\n  PGHOST         the postgresql host to connect to\n  PGPORT         the port postgresql listens to\n  PGUSER         the postgresql user to connect as when creating the\n                 database and dumping/loading data from the old ones,\n                 should be a superuser\n  PGPASSWORD     the password to use when connecting as \\$PGUSER\n \nEOF\n          exit 1\n          ;;\n  esac\ndone\n\nif [ ! -d \"$dumplocation\" ]; then\n    echo directory \"$dumplocation\" does not exist\n    exit 1\nfi\n\nif [ ! \"$nocreatedb\" ]; then\n    echo Creating database $newnavdb, owned by $navdbuser\n    createdb --owner=$navdbuser --encoding=utf-8 $newnavdb || exit 1\n\n    echo Installing PL/PgSQL language to database $newnavdb\n    createlang plpgsql $newnavdb || exit 1\nfi\n\nif [ ! \"$nodump\" ]; then\n    cat <<EOF\nDumping existing NAV databases to current directory.\n\nWARNING: This will only dump the public namespace of each database.\nIt will not dump table privileges.  If you have locally added\nnamespaces/schemas and/or privileges to any of the databases, you're\non your own.\nEOF\n\n    for db in manage navprofiles logger arnold; do\n        echo Dumping $db...\n        pg_dump -f \"$dumplocation/$db-dump.sql\" --schema=public \\\n\t    --no-owner --verbose --no-acl $db || exit 1\n    done\nfi\n\necho \"Loading dumps into database $newnavdb\"\necho \"---\"\ncat <<EOF | psql --quiet $newnavdb || exit 1\n-- Make nav own the public schema.  We do this so the nav user has access to\n-- alter the public namespace.\nALTER SCHEMA public OWNER TO $navdbuser;\n\n-- Work as the nav user\nSET SESSION AUTHORIZATION '$navdbuser';\nSET client_min_messages = warning;\n\n-- Restore the manage dump into the 'public' schema, rename it to 'manage' and\n-- create a new 'public' schema\n\\i $dumplocation/manage-dump.sql\nALTER SCHEMA public RENAME TO manage;\nCREATE SCHEMA public;\n\n-- Restore the navprofiles dump into the 'public' schema, rename it to\n-- 'profiles' and create a new 'public' schema\n\\i $dumplocation/navprofiles-dump.sql\nALTER SCHEMA public RENAME TO profiles;\nCREATE SCHEMA public;\n\n-- Restore the logger dump into the 'public' schema, rename it to 'logger' and\n-- create a new 'public' schema\n\\i $dumplocation/logger-dump.sql\nALTER SCHEMA public RENAME TO logger;\nCREATE SCHEMA public;\n\n-- Restore the arnold dump into the 'public' schema, rename it to 'arnold' and\n-- create a new 'public' schema\n\\i $dumplocation/arnold-dump.sql\nALTER SCHEMA public RENAME TO arnold;\nCREATE SCHEMA public;\n\nCREATE SCHEMA radius;\nALTER DATABASE $newnavdb SET search_path = manage,profiles,logger,arnold,radius;\nEOF\n\necho \"---\"\n\ncat <<EOF\nSUCCESS! Databases manage, navprofiles, logger and arnold were\n(apparently) merged into the new $newnavdb database.\n\nYour old NAV databases were not dropped, in case you still want them\nfor something.  You can delete them manually when they are no longer\nneeded, by issuing this command as the postgres superuser:\n\n  for db in manage navprofiles logger arnold; do dropdb \\$db; done\n\nEOF\n"
  },
  {
    "path": "python/nav/models/sql/syncdb.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nThis helper script is here for backwards compatibility; it lets the the\ncurrent development schema be installed from anywhere within the NAV source\ncode tree.\n\"\"\"\n\nimport sys\nimport os\n\n_mydir = os.path.dirname(sys.argv[0])\n_top_srcdir = os.path.abspath(os.path.join(_mydir, '..'))\nsys.path.insert(0, os.path.join(_top_srcdir, 'python'))\nos.chdir(_mydir)\n\nfrom nav.pgsync import main\n\nmain()\n"
  },
  {
    "path": "python/nav/models/thresholds.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Metric threshold related models\"\"\"\n\nfrom datetime import timedelta\nfrom django.db import models\nfrom nav.metrics.graphs import extract_series_name, translate_serieslist_to_regex\nfrom nav.models.profiles import Account\nfrom nav.models.fields import VarcharField\nfrom nav.metrics.thresholds import ThresholdEvaluator, DEFAULT_INTERVAL\n\n\nclass ThresholdRule(models.Model):\n    \"\"\"A threshold rule\"\"\"\n\n    alert_help_text = \"\"\"\n    Examples: >20, <10. Percent (>20%) can only be used on interface octet\n    counters.\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = VarcharField()\n    alert = VarcharField(help_text=alert_help_text)\n    clear = VarcharField(\n        null=True,\n        blank=True,\n        help_text='The threshold for cancelling an alert. '\n        'Uses same format as the threshold field',\n    )\n    raw = models.BooleanField(default=False)\n    period = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text=\"Inspection interval when calculating values. \"\n        \"For interface counters this should be set to 15 minutes\",\n    )\n    description = VarcharField(null=True, blank=True)\n    creator = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        null=True,\n        related_name=\"treshold_rules\",\n    )\n    created = models.DateTimeField(auto_now=True)\n\n    class Meta(object):\n        db_table = 'thresholdrule'\n\n    def __repr__(self):\n        var = [\n            \"{k}={v!r}\".format(k=k, v=v)\n            for k, v in vars(self).items()\n            if not k.startswith('_') and v is not None\n        ]\n        return \"{cls}({var})\".format(cls=self.__class__.__name__, var=\", \".join(var))\n\n    def get_evaluator(self):\n        \"\"\"\n        Returns a ThresholdEvaluator instance pre-filled with the details of\n        this rule.\n        \"\"\"\n        period = timedelta(seconds=self.period) if self.period else DEFAULT_INTERVAL\n        return ThresholdEvaluator(self.target, period=period, raw=self.raw)\n\n    def get_pattern(self):\n        \"\"\"\n        Returns a compiled regexp pattern that represents the target metrics\n        of this rule.\n        \"\"\"\n        series = extract_series_name(self.target)\n        pat = translate_serieslist_to_regex(series)\n        return pat\n"
  },
  {
    "path": "python/nav/napalm.py",
    "content": "#\n# Copyright (C) 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This module contains NAPALM connectivity interfaces for NAV\"\"\"\n\nimport weakref\nfrom tempfile import NamedTemporaryFile\nfrom typing import TypeVar\nimport logging\nimport napalm\nfrom napalm.base import NetworkDriver\n\nfrom nav.models import manage\n\nDEFAULT_TIMEOUT_SECONDS = 60\n\nHost = TypeVar(\"Host\", str, manage.Netbox)\n_logger = logging.getLogger(__name__)\n\n\ndef connect(host: Host, profile: manage.ManagementProfile) -> NetworkDriver:\n    \"\"\"Opens and returns a NAPALM connection\"\"\"\n    driver = get_driver(profile)\n    config = profile.configuration\n    hostname = host if not isinstance(host, manage.Netbox) else host.ip\n    optional_args = {\n        \"config_lock\": True,\n        \"lock_disable\": True,\n    }\n    key_file = _write_key_to_temporary_file(config, optional_args)\n\n    try:\n        device = driver(\n            hostname=hostname,\n            username=config.get(\"username\"),\n            password=config.get(\"password\"),\n            timeout=config.get(\"timeout\") or DEFAULT_TIMEOUT_SECONDS,\n            optional_args=optional_args,\n        )\n        # Let temporary file live as long as the device connection exists\n        if key_file:\n            weakref.finalize(device, key_file.close)\n        device.open()\n        return device\n    except Exception:  # noqa: BLE001\n        # but remove it immediately if device was never created\n        if key_file:\n            key_file.close()\n        raise\n\n\ndef _write_key_to_temporary_file(config: dict, optional_args: dict):\n    if config.get(\"private_key\"):\n        key_file = NamedTemporaryFile(mode=\"w+\")\n        key_file.write(config[\"private_key\"])\n        key_file.flush()\n        optional_args[\"key_file\"] = key_file.name\n        return key_file\n\n\ndef get_driver(\n    profile: manage.ManagementProfile,\n) -> type[napalm.base.base.NetworkDriver]:\n    \"\"\"Returns a NAPALM NetworkDriver based on a management profile config\"\"\"\n    if profile.protocol != profile.PROTOCOL_NAPALM:\n        raise NapalmError(\"Management profile is not a NAPALM profile\")\n    driver = profile.configuration.get(\"driver\")\n    if not driver:\n        raise NapalmError(\"Management profile has no configured driver\")\n    return napalm.get_network_driver(driver)\n\n\nclass NapalmError(Exception):\n    \"\"\"Raised when there is a problem with NAPALM management profiles\"\"\"\n"
  },
  {
    "path": "python/nav/natsort.py",
    "content": "#\n# Copyright (C) 2007, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Implements natural string sorting.\n\nNatural sorting of strings implies that e.g. the string 'foo20bar' will sort\nafter 'foo3bar' instead of before.\n\nAn example of how to naturally sort a directory listing:\n\n  import os, natsort\n  foo = os.listdir('/path/to/bar')\n  foo.sort(key=natsort.split)\n\"\"\"\n\nimport re\nfrom functools import total_ordering\n\n_split_pattern = re.compile(r'(\\d+|\\D+)')\n\n\ndef split(string):\n    \"\"\"Split a string into digit- and non-digit components.\"\"\"\n    return [ComparableThing(x) for x in _split_pattern.findall(string)]\n\n\n@total_ordering\nclass ComparableThing(object):\n    \"\"\"Wrapper class for comparing both strings and integers.\n\n    This exists to impose a stable sort order for strings split by natsort.split, even\n    on Python 3, which doesn't want to compare objects of different types.\n\n    \"\"\"\n\n    def __init__(self, value):\n        if isinstance(value, str) and value.isdigit():\n            self.value = int(value)\n        else:\n            self.value = value\n\n    def __eq__(self, other):\n        if isinstance(other, ComparableThing):\n            return self.value == other.value\n        return self.value == other\n\n    def __lt__(self, other):\n        if not isinstance(other, ComparableThing):\n            return self.value < other\n\n        if isinstance(self.value, int) and not isinstance(other.value, int):\n            return True\n        if isinstance(self.value, str) and not isinstance(other.value, str):\n            return False\n\n        return self.value < other.value\n\n    def __repr__(self):\n        return repr(self.value)\n\n    def __str__(self):\n        return str(self.value)\n"
  },
  {
    "path": "python/nav/netbiostracker/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/netbiostracker/config.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Configparser for Netbiostracker\"\"\"\n\nimport logging\nfrom configparser import NoSectionError, NoOptionError\nfrom IPy import IP\nfrom nav.config import NAVConfigParser\n\n_logger = logging.getLogger('netbiostrackerconfig')\n\n\nclass NetbiosTrackerConfig(NAVConfigParser):\n    \"\"\"Configparser for Netbiostracker\"\"\"\n\n    DEFAULT_CONFIG_FILES = ('netbiostracker.conf',)\n    DEFAULT_CONFIG = \"\"\"\n[main]\nencoding = cp850\n\"\"\"\n\n    def get_exceptions(self):\n        \"\"\"Get list of ip-addresses not to scan\"\"\"\n        try:\n            exception_list = self.get('main', 'exceptions')\n        except (NoSectionError, NoOptionError):\n            return []\n        else:\n            return create_list(exception_list)\n\n    def get_encoding(self):\n        \"\"\"Get the encoding option\"\"\"\n        return self.get('main', 'encoding')\n\n\ndef create_list(exceptions):\n    \"\"\"Create a list of single ip-adresses from a list of IP instances\"\"\"\n    addresses = []\n    for element in [x.strip() for x in exceptions.splitlines() if x]:\n        try:\n            address = IP(element)\n        except ValueError as error:\n            _logger.error('Skipping exception %s: %s', element, error)\n            continue\n        else:\n            addresses.append(address)\n\n    return list(set(addresses))\n"
  },
  {
    "path": "python/nav/netbiostracker/tracker.py",
    "content": "#! /usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module for doing netbios scans\"\"\"\n\nimport logging\nfrom collections import namedtuple\nfrom datetime import datetime\nfrom functools import wraps\nfrom time import time\nfrom subprocess import Popen, PIPE\n\nfrom django.db import transaction\n\nfrom nav.models.manage import Arp, Netbios\nfrom nav.macaddress import MacAddress\n\nSPLITCHAR = '!'\n\nNetbiosResult = namedtuple('NetbiosResult', 'ip name server username mac')\n\n_logger = logging.getLogger(__name__)\n\n\ndef timed(f):\n    \"\"\"Decorator to time execution of functions\"\"\"\n\n    @wraps(f)\n    def wrapper(*args, **kwds):\n        \"\"\"Decorator\"\"\"\n        start = time()\n        result = f(*args, **kwds)\n        elapsed = time() - start\n        _logger.debug(\"%s took %f seconds to finish\", f.__name__, elapsed)\n        return result\n\n    return wrapper\n\n\n@timed\ndef get_addresses_to_scan(exclude_list=None):\n    \"\"\"Get ip-addresses to scan\n\n    This function should return a list of the active ip-addresses in the\n    database excluding the ip-addresses from the exclude list.\n\n    \"\"\"\n    _logger.debug('Getting addresses to scan')\n    if not exclude_list:\n        exclude_list = []\n\n    def _is_excluded(ip):\n        for excluded_addr in exclude_list:\n            if ip in excluded_addr:\n                return True\n        return False\n\n    addresses = (\n        Arp.objects.filter(end_time__gte=datetime.max)\n        .extra(where=['family(ip)=4'])\n        .distinct('ip')\n        .values_list('ip', flat=True)\n    )\n    return [str(ip) for ip in addresses if not _is_excluded(ip)]\n\n\n@timed\ndef scan(addresses, ignore_failed_sendto=True, encoding=\"cp850\", verbose=False):\n    \"\"\"Scan a list of ip-addresses for netbios names\n\n    :param addresses: A list of IP address strings.\n    :param ignore_failed_sendto: Whether to ignore \"sendto\" failures, which may\n                                 sometimes be a low-level OS error reported for\n                                 individual addresses.\n    :param: encoding: Encoding to use when communicating with nbtscan\n    \"\"\"\n\n    command = ['nbtscan', '-f-', '-s', SPLITCHAR]\n    if verbose:\n        command.append('-v')\n\n    _logger.debug('Scanning %s addresses', len(addresses))\n    proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)\n    stdout, stderr = proc.communicate('\\n'.join(addresses).encode(encoding))\n\n    if isinstance(stderr, bytes):\n        stderr = stderr.decode(encoding)\n    if isinstance(stdout, bytes):\n        stdout = stdout.decode(encoding)\n\n    if ignore_failed_sendto:\n        stderr = _filter_failed_sendto(stderr)\n    if stderr:\n        raise Exception(stderr)\n\n    _logger.debug('Result from scan:\\n%s', stdout)\n    return stdout\n\n\ndef _filter_failed_sendto(data):\n    lines = data.splitlines()\n    return '\\n'.join(line for line in lines if 'sendto failed' not in line.lower())\n\n\n@timed\ndef parse(nbtscan_output, encoding=None):\n    \"\"\"Parse the results from a netbios scan\"\"\"\n\n    results = nbtscan_output.split('\\n')\n    parsed_results = []\n    for result in results:\n        if result:\n            try:\n                args = [x.strip() for x in result.split(SPLITCHAR)]\n                netbiosresult = NetbiosResult(*args)\n                # Handle mac address with \"-\" separator (FreeBSD nbtscan).\n                netbiosresult = netbiosresult._replace(\n                    mac=str(MacAddress(netbiosresult.mac))\n                )\n            except (TypeError, ValueError):\n                _logger.error('Error parsing %s', result)\n            else:\n                parsed_results.append(netbiosresult)\n\n    return parsed_results\n\n\n@timed\ndef parse_get_workstations(verbose_nbtscan_output):\n    \"\"\"Parse the results from a verbose netbios scan, get only workstations\"\"\"\n\n    results = verbose_nbtscan_output.split('\\n')\n    parsed_results = {}\n    for result in results:\n        if result:\n            if result[-4:] not in (':00U', ':00G'):\n                continue\n            ip, name, _ = [p.strip() for p in result.split(SPLITCHAR, 2)]\n            parsed_results[ip] = name\n            break\n    return result\n\n\n@timed\ndef update_database(netbiosresults):\n    \"\"\"Update database with results from a scan\n\n    3 scenarios:\n\n    1: If a similar entry with end_time = infinity exists in the database\n       and in the result set, do nothing.\n    2: If a similar entry with end_time = infinity exists in the database\n       but not in the result set, set end_time = now\n    3: If a similar entry does not exist, create a new entry\n\n    \"\"\"\n\n    scan_set = set(netbiosresults)\n    database_entries = fetch_database_entries()\n    database_set = set(database_entries)\n\n    entries_to_end = database_set - scan_set\n    entries_to_create = scan_set - database_set\n\n    set_end_time(database_entries, entries_to_end)\n    create_entries(entries_to_create)\n\n\n@timed\ndef fetch_database_entries():\n    \"\"\"Fetch current active entries from netbios table\n\n    Create a structure that is suitable for comparing as a set with other\n    structures\n\n    \"\"\"\n    database_entries = {}\n    for entry in Netbios.objects.filter(end_time=datetime.max):\n        database_entries[\n            (entry.ip, entry.name, entry.server, entry.username, entry.mac)\n        ] = entry\n    return database_entries\n\n\n@timed\n@transaction.atomic()\ndef set_end_time(database_entries, entries_to_end):\n    \"\"\"End the entries given\"\"\"\n    _logger.debug('Ending %s entries', len(entries_to_end))\n    for key in entries_to_end:\n        entry = database_entries[key]\n        entry.end_time = datetime.now()\n        entry.save()\n\n\n@timed\n@transaction.atomic()\ndef create_entries(entries_to_create):\n    \"\"\"Create new netbios entries for the data given\"\"\"\n    _logger.debug('Creating %s new entries', len(entries_to_create))\n    for entry in entries_to_create:\n        netbios = Netbios(\n            ip=entry.ip,\n            mac=entry.mac or None,\n            name=entry.name,\n            server=entry.server,\n            username=entry.username,\n        )\n        netbios.save()\n"
  },
  {
    "path": "python/nav/netmap/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/netmap/config.py",
    "content": "from nav.config import NavConfigParserDefaultSection\n\n\nclass NetmapConfig(NavConfigParserDefaultSection):\n    \"\"\"NetmapConfig\"\"\"\n\n    DEFAULT_CONFIG_FILES = ('netmap.conf',)\n    DEFAULT_CONFIG = \"\"\"\n[netmap]\nAPI_DEBUG=False\n\"\"\"\n\n\nNETMAP_CONFIG = NetmapConfig(\"netmap\")\n"
  },
  {
    "path": "python/nav/netmap/metadata.py",
    "content": "#\n# Copyright (C) 2012-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Handles attaching and converting metadata in a netmap networkx toplogy\ngraph\"\"\"\n\nfrom collections import defaultdict\nfrom django.urls import reverse, NoReverseMatch\n\nfrom IPy import IP\nfrom nav.netmap.config import NETMAP_CONFIG\nfrom nav.errors import GeneralException\nfrom nav.models.manage import GwPortPrefix, Interface\nfrom nav.netmap import stubs\nfrom nav.web.netmap.common import get_status_image_link\n\n\nclass NetmapException(GeneralException):\n    \"\"\"Generic Netmap Exception\"\"\"\n\n    pass\n\n\nclass GraphException(NetmapException):\n    \"\"\"Graph Exception\n\n    This exception is normally thrown if it finds something odd in the graph\n     from nav.topology or the metadata contains known errors.\n    \"\"\"\n\n    pass\n\n\nclass Node(object):\n    \"\"\"Node object represent a node in the netmap_graph\n\n    Makes it easier to validate data and convert node to valid json.\n    \"\"\"\n\n    def __init__(self, node, nx_node_metadata=None):\n        self.node = node\n        if nx_node_metadata and 'metadata' in nx_node_metadata:\n            self.metadata = nx_node_metadata['metadata']\n        else:\n            self.metadata = None\n\n    def __repr__(self):\n        return \"netmap.Node(metadata={0!r})\".format(self.metadata)\n\n    def to_json(self):\n        \"\"\"json presentation of Node\"\"\"\n        json = {}\n\n        if self.metadata:\n            if 'position' in self.metadata:\n                json.update(\n                    {\n                        'position': {\n                            'x': self.metadata['position'].x,\n                            'y': self.metadata['position'].y,\n                        }\n                    }\n                )\n            if 'vlans' in self.metadata:  # Layer2 metadata\n                json.update(\n                    {\n                        'vlans': [\n                            nav_vlan_id for nav_vlan_id, _ in self.metadata['vlans']\n                        ]\n                    }\n                )\n                if NETMAP_CONFIG.getboolean('API_DEBUG'):\n                    json.update(\n                        {\n                            'd_vlans': [\n                                vlan_to_json(swpv.vlan)\n                                for _, swpv in self.metadata['vlans']\n                            ]\n                        }\n                    )\n\n        if isinstance(self.node, stubs.Netbox):\n            json.update(\n                {\n                    'id': str(self.node.id),\n                    'sysname': self.node.sysname,\n                    'category': str(self.node.category_id),\n                    'is_elink_node': True,\n                }\n            )\n        else:\n            try:\n                location = self.node.room.location\n                locationid = location.id\n                location_descr = location.verbose_string\n            except AttributeError:\n                locationid = ''\n                location_descr = ''\n            json.update(\n                {\n                    'id': str(self.node.id),\n                    'sysname': str(self.node.sysname),\n                    'category': str(self.node.category_id),\n                    'ip': self.node.ip,\n                    'ipdevinfo_link': reverse(\n                        'ipdevinfo-details-by-name', args=[self.node.sysname]\n                    ),\n                    'up': str(self.node.up),\n                    'up_image': get_status_image_link(self.node.up),\n                    'roomid': self.node.room.id,\n                    'locationid': str(locationid),\n                    'location': location_descr,\n                    'room': self.node.room.verbose_string,\n                    'is_elink_node': False,\n                }\n            )\n        return {str(self.node.id): json}\n\n\nclass Group(object):\n    \"\"\"Grouping object for representing a Netbox and Interface in a Edge\"\"\"\n\n    def __init__(self, netbox=None, interface=None):\n        self.netbox = netbox\n        self.interface = interface\n        self.gw_ip = None\n        self.virtual = None\n        self.vlans = None\n\n    def __repr__(self):\n        return (\n            \"netmap.Group(netbox={0!r}, interface={1!r}, gw_ip={2!r}\"\n            \", virtual={3!r}, vlans={4!r})\"\n        ).format(self.netbox, self.interface, self.gw_ip, self.virtual, self.vlans)\n\n    def __hash__(self):\n        return hash(self.netbox) + hash(self.interface)\n\n    def __eq__(self, other):\n        if not isinstance(other, type(self)):\n            return False\n        else:\n            return self.netbox == other.netbox and self.interface == other.interface\n\n    def to_json(self):\n        \"\"\"json presentation of Group\"\"\"\n        json = {\n            'netbox': str(self.netbox.id),\n        }\n        if self.interface is not None:\n            ipdevinfo_link = None\n            if (\n                self.netbox.sysname\n                and self.interface.ifname\n                and self.interface.ifname != '?'\n            ):\n                kwargs = dict(\n                    netbox_sysname=str(self.netbox.sysname),\n                    port_name=str(self.interface.ifname),\n                )\n                try:\n                    ipdevinfo_link = reverse(\n                        'ipdevinfo-interface-details-by-name', kwargs=kwargs\n                    )\n                except NoReverseMatch:\n                    ipdevinfo_link = None\n\n            json['interface'] = {\n                'ifname': str(self.interface.ifname),\n                'ipdevinfo_link': ipdevinfo_link,\n            }\n\n        if self.gw_ip is not None:\n            json['gw_ip'] = self.gw_ip\n        if self.virtual is not None:\n            json['virtual'] = self.virtual\n        if self.vlans is not None:\n            json['vlans'] = [swpv.vlan.id for swpv in self.vlans]\n        if NETMAP_CONFIG.getboolean('API_DEBUG'):\n            json['d_netbox_sysname'] = str(self.netbox.sysname)\n            json['d_vlans'] = [vlan_to_json(swpv.vlan) for swpv in self.vlans]\n\n        return json\n\n\nclass Edge(object):\n    \"\"\"Represent either a edge pair in Layer2 or Layer3\"\"\"\n\n    link_speed = None\n    vlans = None\n    layer = None\n\n    @staticmethod\n    def _valid_layer2(edge):\n        return isinstance(edge, Interface) or isinstance(edge, stubs.Interface)\n\n    @staticmethod\n    def _valid_layer3(edge):\n        return isinstance(edge, GwPortPrefix) or isinstance(edge, stubs.GwPortPrefix)\n\n    def _get_layer(self, u, v):\n        if (self._valid_layer2(u) or u is None) and (\n            self._valid_layer2(v) or v is None\n        ):\n            return 2\n\n        elif (self._valid_layer3(u) or u is None) and (\n            self._valid_layer3(v) or v is None\n        ):\n            return 3\n        else:\n            raise NetmapException(\n                \"Could not determine layer for this edge. This should _not_ happend\"\n            )\n\n    def _same_layer(self, source, target):\n        return (self._valid_layer2(source) and self._valid_layer2(target)) or (\n            self._valid_layer3(source) and self._valid_layer3(target)\n        )\n\n    def __init__(self, nx_edge, meta_edge, traffic=None):\n        \"\"\"\n\n        :param nx_edge: NetworkX edge representing (u,v) in a tuple\n                        (they be nav.models.Netbox or nav.netmap.stubs.Netbox).\n        :param meta_edge: An edge tuple representing the edge as a pair of\n                          either Interface or GwPortPrefix objects.\n        :return:\n        \"\"\"\n        meta_u, meta_v = meta_edge\n        if meta_u is not None and meta_v is not None:\n            if not self._same_layer(meta_u, meta_v):\n                raise GraphException(\n                    \"meta_u and meta_v have to be of same type, typically \"\n                    \"Interfaces in layer2 graph or\"\n                    \"GwPortPrefixes in layer3 graph\"\n                )\n        elif meta_u is None and meta_v is None:\n            raise GraphException(\"meta_u and meta_v can't both be None! Bailing!\")\n\n        self.errors = []\n        self.u = self.v = self.vlan = self.prefix = None\n        nx_u, nx_v = nx_edge\n\n        if self._valid_layer2(meta_u):\n            self.u = Group(meta_u.netbox, meta_u)\n        elif self._valid_layer3(meta_u):\n            self.u = Group(meta_u.interface.netbox, meta_u.interface)\n            self.u.gw_ip = meta_u.gw_ip\n            self.u.virtual = meta_u.virtual\n\n        if self._valid_layer2(meta_v):\n            self.v = Group(meta_v.netbox, meta_v)\n        elif self._valid_layer3(meta_v):\n            self.v = Group(meta_v.interface.netbox, meta_v.interface)\n            self.v.gw_ip = meta_v.gw_ip\n            self.v.virtual = meta_v.virtual\n\n        # Basic metadata validation, lets copy over Netbox data which is valid\n        # as metadata if metadata building didn't manage to fetch it's data.\n        # (this is due to Metadata in L2 is built on Interface<->Interface,\n        # both sides is not necessary known in the topology graph when building\n        # it)\n        # This could also be the case for L3, but since the topology method\n        # stubs.Netbox and stubs.Interface, we don't really have the same issue\n        # in an L3 graph.\n        if self.u is None:\n            self.u = Group(nx_u)\n        if self.v is None:\n            self.v = Group(nx_v)\n\n        self.layer = self._get_layer(meta_u, meta_v)\n\n        if self.layer == 3:\n            assert meta_u.prefix.vlan.id == meta_v.prefix.vlan.id, (\n                \"Source and target GwPortPrefix must reside in same VLan for \"\n                \"Prefix! Bailing\"\n            )\n\n            self.prefix = meta_u.prefix\n            self.vlan = meta_u.prefix.vlan\n\n        self.traffic = traffic\n\n        if (self.u and self.u.interface is not None) and (\n            self.v and self.v.interface is not None\n        ):\n            if self.u.interface.speed == self.v.interface.speed:\n                self.link_speed = self.u.interface.speed\n            else:\n                self.errors.append(\"Mismatch between interface speed\")\n                if (self.u.interface.speed or 0) < (self.v.interface.speed or 0):\n                    self.link_speed = self.u.interface.speed\n                else:\n                    self.link_speed = self.v.interface.speed\n        elif self.u and self.u.interface is not None:\n            self.link_speed = self.u.interface.speed\n        elif self.v and self.v.interface is not None:\n            self.link_speed = self.v.interface.speed\n\n        self.vlans = []\n\n    def __hash__(self):\n        return hash(frozenset((self.u, self.v)))\n\n    def __eq__(self, other):\n        if not isinstance(other, type(self)):\n            return False\n        else:\n            return frozenset((self.u, self.v)) == frozenset((other.u, other.v))\n\n    def __ne__(self, other):\n        return not self.__eq__(other)\n\n    def __repr__(self):\n        return (\n            \"netmap.Edge(layer={0!r}, u={1!r}, v={2!r}, \"\n            \"link_speed={3!r}, vlans={4!r}, vlan={5!r}, \"\n            \"prefix={6!r})\"\n        ).format(\n            self.layer,\n            self.u,\n            self.v,\n            self.link_speed,\n            self.vlans,\n            self.vlan,\n            self.prefix,\n        )\n\n    def to_json(self):\n        \"\"\"json presentation of Edge\"\"\"\n        json = {\n            'source': self.u.to_json() or 'null',\n            'target': self.v.to_json() or 'null',\n        }\n        if self.layer == 3:\n            json.update(\n                {\n                    'prefix': {\n                        'net_address': str(self.prefix.net_address),\n                        'report_link': self.prefix.get_absolute_url(),\n                    }\n                }\n            )\n            json.update({'vlan': self.prefix.vlan.id})\n        elif self.layer == 2:\n            json.update({'vlans': [swpv.vlan.id for swpv in self.vlans]})\n\n        json.update({'link_speed': self.link_speed or 'N/A'})\n        json.update({'traffic': self.traffic and self.traffic.to_json() or None})\n\n        return json\n\n\ndef vlan_to_json(vlan):\n    return {\n        'vlan': vlan.vlan,\n        'nav_vlan': vlan.id,\n        'net_ident': vlan.net_ident,\n        'description': vlan.description,\n    }\n\n\ndef get_vlan_lookup_json(vlan_by_interface):\n    vlan_lookup = {}\n    for list_of_swpv in vlan_by_interface.values():\n        for swpv in list_of_swpv:\n            vlan_lookup[swpv.vlan.id] = vlan_to_json(swpv.vlan)\n    return vlan_lookup\n\n\ndef node_to_json_layer2(node, nx_metadata=None):\n    \"\"\"Convert a node to json, for use in a netmap layer2 graph\n\n    :param node A Netbox model\n    :param nx_metadata Metadata from networkx graph.\n    :return json presentation of a node.\n    \"\"\"\n    return Node(node, nx_metadata).to_json()\n\n\ndef node_to_json_layer3(node, nx_metadata=None):\n    \"\"\"Convert a node to json, for use in a netmap layer3 graph\n\n    :param node A Netbox model\n    :param nx_metadata Metadata from networkx graph.\n    :return json presentation of a node.\n    \"\"\"\n    return Node(node, nx_metadata).to_json()\n\n\ndef edge_to_json_layer2(nx_edge, metadata):\n    \"\"\"Convert a edge between A and B in a netmap layer2 graph to JSON\n\n    :param nx_edge: Metadata from netmap networkx graph\n    :returns: edge representation in JSON\n    \"\"\"\n    source, target = nx_edge\n    edges = metadata['metadata']\n    metadata_for_edges = []\n    all_vlans = set()\n    for edge in edges:\n        all_vlans = all_vlans | edge.vlans\n        metadata_for_edges.append(edge.to_json())\n\n    json = {\n        'source': str(source.id),\n        'target': str(target.id),\n        'vlans': [swpv.vlan.id for swpv in all_vlans],\n        'edges': metadata_for_edges,\n    }\n\n    if NETMAP_CONFIG.getboolean('API_DEBUG'):\n        json.update(\n            {\n                'd_source_sysname': str(source.sysname),\n                'd_target_sysname': str(target.sysname),\n                'd_vlans': [vlan_to_json(swpv.vlan) for swpv in all_vlans],\n            }\n        )\n    return json\n\n\ndef edge_to_json_layer3(nx_edge, nx_metadata):\n    \"\"\"Convert a edge between A and B in a netmap layer 3 graph to JSON\n\n    :param nx_metadata: Metadata from netmap networkx graph\n    :type nx_metadata: dict\n    :return edge representation in JSON\n    \"\"\"\n    source, target = nx_edge\n\n    metadata_collection = defaultdict(list)\n    for vlan_id, edges in nx_metadata['metadata'].items():\n        for edge in edges:\n            metadata_collection[vlan_id].append(edge.to_json())\n\n    def prefixaddress(item):\n        addr = item.get('prefix', {}).get('net_address')\n        return IP(addr) if addr else addr\n\n    # sorting the output based on prefix address\n    for value in metadata_collection.values():\n        value.sort(key=prefixaddress)\n\n    json = {\n        'source': str(source.id),\n        'target': str(target.id),\n        'edges': metadata_collection,\n    }\n    if NETMAP_CONFIG.getboolean('API_DEBUG'):\n        json.update(\n            {\n                'd_source_sysname': str(source.sysname),\n                'd_target_sysname': str(target.sysname),\n            }\n        )\n    return json\n\n\ndef edge_metadata_layer3(nx_edge, gwportprefix_u, gwportprefix_v, traffic):\n    \"\"\"\n\n    :param nx_edge: tuple describing the edge between two netboxes\n      (nav.models.manage.Netbox or nav.netmap.stubs.Netbox)\n    :param gwportprefix_u: nav.models.manage.GwPortPrefix\n    :param gwportprefix_v: nav.models.manage.GwPortPrefix\n    :param traffic: A Traffic() instance for this edge\n    :returns: metadata to attach to netmap graph\n    \"\"\"\n\n    # Note about GwPortPrefix and L3 graph: We always have interface.netbox\n    # avaiable under L3 topology graph due to stubbing Netboxes etc for\n    # elinks.\n    edge = Edge(nx_edge, (gwportprefix_u, gwportprefix_v), traffic)\n    return edge\n\n\ndef edge_metadata_layer2(nx_edge, meta_u, meta_v, vlans_by_interface, traffic):\n    \"\"\"\n    Adds edge meta data with python types for given edge (layer2)\n\n    :param nx_edge tuple containing source and target\n      (nav.models.manage.Netbox or nav.netmap.stubs.Netbox)\n    :param meta_u nav.models.manage.Interface (from port_pairs nx metadata)\n    :param meta_v nav.models.manage.Interface (from port_pairs nx metadata)\n    :param vlans_by_interface VLAN dict access for fetching SwPortVlan list\n\n    :returns metadata to attach to netmap graph as metadata.\n    \"\"\"\n    edge = Edge(nx_edge, (meta_u, meta_v), traffic)\n\n    source_vlans = target_vlans = []\n    if vlans_by_interface and meta_u in vlans_by_interface:\n        source_vlans = tuple(vlans_by_interface.get(meta_u))\n\n    if vlans_by_interface and meta_v in vlans_by_interface:\n        target_vlans = tuple(vlans_by_interface.get(meta_v))\n\n    edge.u.vlans = set(source_vlans) - set(target_vlans)\n    edge.v.vlans = set(target_vlans) - set(source_vlans)\n    edge.vlans = set(source_vlans) | set(target_vlans)\n    return edge\n"
  },
  {
    "path": "python/nav/netmap/stubs/__init__.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Stubs for use in Netmap\"\"\"\n\n\nclass Netbox(object):\n    \"\"\"Netbox stub\"\"\"\n\n    id = None  # we need this, but it should always be empty\n\n    def __str__(self):\n        return str(self.sysname)\n\n    def __unicode__(self):\n        return '%s' % self.sysname\n\n    def __repr__(self):\n        return \"<stubs.Netbox: %r>\" % vars(self)\n\n    def __key(self):\n        return self.sysname\n\n    def __eq__(self, value):\n        return self.sysname == getattr(value, \"sysname\", None)\n\n    def __hash__(self):\n        return hash(self.__key())\n\n    @classmethod\n    def get_absolute_url(cls):\n        return None\n\n\nclass GwPortPrefix(object):\n    \"\"\"Gwport stub\"\"\"\n\n    def __init__(self):\n        self.virtual = None\n\n    def __str__(self):\n        return str(self.gw_ip)\n\n    def __unicode__(self):\n        return '%s' % self.gw_ip\n\n    def __key(self):\n        return self.gw_ip, self.interface\n\n    def __eq__(self, i):\n        return self.__key() == i.__key()\n\n    def __hash__(self):\n        return hash(self.__key())\n\n    def __repr__(self):\n        return \"<stubs.GwPortPrefix: %r>\" % vars(self)\n\n\nclass Interface(object):\n    \"\"\"Interface stub\"\"\"\n\n    def __str__(self):\n        return \"{0} ({1})\".format(str(self.ifname), str(self.netbox))\n\n    def __unicode__(self):\n        return '%s' % self.ifname, self.netbox\n\n    def __key(self):\n        return self.netbox, self.ifname\n\n    def __eq__(self, i):\n        return self.__key() == i.__key()\n\n    def __hash__(self):\n        return hash(self.__key())\n\n    @classmethod\n    def get_absolute_url(cls):\n        return None\n"
  },
  {
    "path": "python/nav/netmap/topology.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"netmap's topology functions\"\"\"\n\nfrom collections import defaultdict\nimport logging\n\nimport networkx as nx\n\nfrom nav.models.manage import SwPortVlan\nfrom nav.netmap.metadata import edge_metadata_layer3, edge_metadata_layer2\nfrom nav.netmap.traffic import get_traffic_data, Traffic\n\n\n_logger = logging.getLogger(__name__)\n\n\ndef _get_vlans_map_layer2(graph):\n    \"\"\"Builds two dictionaries to lookup VLAN information for layer2\n    :param a networkx NAV topology graph\n    :returns a tuple to look up vlans by interface and/or netbox\"\"\"\n    interface_id_list = [x[2].id for x in graph.edges(keys=True)]\n\n    vlan_by_interface = defaultdict(list)\n    vlan_by_netbox = defaultdict(dict)\n    for swpv in SwPortVlan.objects.filter(\n        interface__in=list(interface_id_list)\n    ).select_related():\n        vlan_by_interface[swpv.interface].append(swpv)\n\n        # unique storing on internal nav vlan id\n        vlan_by_netbox[swpv.interface.netbox].update({swpv.vlan.id: swpv})\n\n    return vlan_by_interface, vlan_by_netbox\n\n\ndef _get_vlans_map_layer3(graph):\n    vlans = set()\n    for _, _, swpv in graph.edges(keys=True):\n        vlans.add(swpv)\n    return vlans\n\n\ndef build_netmap_layer2_graph(\n    topology_without_metadata,\n    vlan_by_interface,\n    vlan_by_netbox,\n    load_traffic=False,\n    view=None,\n):\n    \"\"\"\n    Builds a netmap layer 2 graph, based on nav's build_layer2_graph method.\n    Reduces a topology graph from nav.topology.vlan, but retains it's\n     directional (MultiDiGraph) properties as metadata under the key 'metadata'\n\n    This is done as the visualization in Netmap won't ever be drawing multiple\n    spines between edges as it will turn into a mess, instead we want to access\n    such data as metadata.\n\n    :param topology_without_metadata: nav.topology.vlan.build*_graph networkx\n     graph\n    :param vlan_by_interface: dictionary to lookup up vlan's attached to given\n     interface\n    :param vlan_by_netbox: dictonary to lookup up vlan's, keyed by netbox.\n    :param view A NetMapView for getting node positions according to saved\n     netmap view.\n    :type topology_without_metadata: networkx.MultiDiGraph\n    :type vlan_by_interface: dict\n    :type vlan_by_netbox: dict\n    :type view: nav.modeles.profiles.NetmapView\n    :return NetworkX Graph with attached metadata for edges and nodes\n    \"\"\"\n    _logger.debug(\"_build_netmap_layer2_graph()\")\n    netmap_graph = nx.Graph()\n\n    # basically loops over the whole MultiDiGraph from nav.topology and make\n    # sure we fetch all 'loose' ends and makes sure they get attached as\n    # metadata into netmap_graph\n    for source, neighbors_dict in topology_without_metadata.adjacency():\n        for target, connected_interfaces_at_source_for_target in neighbors_dict.items():\n            for interface in connected_interfaces_at_source_for_target:\n                # fetch existing metadata that might have been added already\n                existing_metadata = netmap_graph.get_edge_data(source, target) or {}\n                port_pairs = existing_metadata.setdefault('port_pairs', set())\n                port_pair = frozenset((interface, interface.to_interface))\n                if len(port_pair) < 2:\n                    _logger.warning(\"Wonky self-loop at %r\", port_pair)\n                    continue  # ignore wonk!\n                port_pairs.add(port_pair)\n\n                netmap_graph.add_edge(target, source, **existing_metadata)\n\n    _logger.debug(\n        \"build_netmap_layer2_graph() graph reduced.Port_pair metadata attached\"\n    )\n\n    empty_traffic = Traffic()\n    for source, target, metadata_dict in netmap_graph.edges(data=True):\n        for interface_a, interface_b in metadata_dict.get('port_pairs'):\n            traffic = (\n                get_traffic_data((interface_a, interface_b))\n                if load_traffic\n                else empty_traffic\n            )\n            additional_metadata = edge_metadata_layer2(\n                (source, target), interface_a, interface_b, vlan_by_interface, traffic\n            )\n\n            metadata = metadata_dict.setdefault('metadata', list())\n            metadata.append(additional_metadata)\n\n    _logger.debug(\"build_netmap_layer2_graph() netmap metadata built\")\n\n    for node, data in netmap_graph.nodes(data=True):\n        if node in vlan_by_netbox:\n            data['metadata'] = {\n                'vlans': sorted(\n                    vlan_by_netbox[node].items(), key=lambda x: x[1].vlan.vlan\n                )\n            }\n\n    _logger.debug(\"build_netmap_layer2_graph() vlan metadata for _nodes_ done\")\n\n    if view:\n        saved_views = view.node_positions.all()\n        netmap_graph = _attach_node_positions(netmap_graph, saved_views)\n    _logger.debug(\"build_netmap_layer2_graph() view positions and graph done\")\n\n    return netmap_graph\n\n\ndef build_netmap_layer3_graph(topology_without_metadata, load_traffic=False, view=None):\n    \"\"\"\n    Builds a netmap layer 3 graph, based on nav's build_layer3_graph method.\n\n    :param load_traffic: set to true for fetching Traffic statistics data\n                         for your network topology.\n    :param view: A NetMapView for getting node positions according to saved\n                 netmap view.\n    :type load_traffic: bool\n    :type view: nav.models.profiles.NetmapView\n\n    :return NetworkX Graph with attached metadata for edges and nodes\n            (obs! metadata has direction metadata added!)\n    \"\"\"\n\n    # Make a copy of the graph, and add edge meta data\n    graph = nx.Graph()\n    for gwpp_u, gwpp_v, prefix in topology_without_metadata.edges(keys=True):\n        netbox_u = gwpp_u.interface.netbox\n        netbox_v = gwpp_v.interface.netbox\n\n        existing_metadata = graph.get_edge_data(netbox_u, netbox_v) or {}\n        gwportprefix_pairs = existing_metadata.setdefault('gwportprefix_pairs', set())\n        existing_metadata['key'] = prefix.vlan\n        gwportprefix = frozenset((gwpp_u, gwpp_v))\n        gwportprefix_pairs.add(gwportprefix)\n\n        graph.add_edge(netbox_v, netbox_u, **existing_metadata)\n\n    _logger.debug(\"build_netmap_layer3_graph() graph copy with metadata done\")\n\n    empty_traffic = Traffic()\n    for u, v, metadata_dict in graph.edges.data():\n        for gwpp_u, gwpp_v in metadata_dict.get('gwportprefix_pairs'):\n            traffic = (\n                get_traffic_data((gwpp_u.interface, gwpp_v.interface))\n                if load_traffic\n                else empty_traffic\n            )\n            additional_metadata = edge_metadata_layer3((u, v), gwpp_u, gwpp_v, traffic)\n            assert gwpp_u.prefix.vlan.id == gwpp_v.prefix.vlan.id, (\n                \"GwPortPrefix must reside inside VLan for given Prefix, bailing!\"\n            )\n            metadata = metadata_dict.setdefault('metadata', defaultdict(list))\n            metadata[gwpp_u.prefix.vlan.id].append(additional_metadata)\n\n    if view:\n        graph = _attach_node_positions(graph, view.node_positions.all())\n    _logger.debug(\"build_netmap_layer3_graph() view positions and graph done\")\n    return graph\n\n\ndef _attach_node_positions(graph, node_set):\n    \"\"\"Attaches node positions from a set of nodes which is extracted from a\n    given map view earlier in the call stack.\n\n    :param graph graph to modify metadata on\n    :param node_set NetmapViewNodePosition collection for a given map view\n    \"\"\"\n\n    # node is a tuple(netbox, networkx_graph_node_meta_dict)\n    # Traversing our generated graph which misses node positions..\n    for node, metadata in graph.nodes(data=True):\n        # Find node metadata in saved map view if it has any.\n        node_meta_dict = [x for x in node_set if x.netbox == node]\n\n        # Attached position meta data if map view has meta data on node in graph\n        if node_meta_dict:\n            if 'metadata' in metadata:\n                # has vlan meta data, need to just update position data\n                metadata['metadata'].update({'position': node_meta_dict[0]})\n            else:\n                metadata['metadata'] = {'position': node_meta_dict[0]}\n    return graph\n"
  },
  {
    "path": "python/nav/netmap/traffic.py",
    "content": "#\n# Copyright (C) 2012, 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Functions for attaching traffic metadata to netmap\"\"\"\n\nimport logging\nfrom collections import defaultdict\n\nfrom nav.metrics.data import get_metric_average\nfrom nav.metrics.graphs import get_metric_meta\nfrom nav.metrics.templates import metric_path_for_interface\nfrom nav.models.manage import Interface\nfrom nav.util import chunks\nfrom nav.web.netmap.common import get_traffic_rgb, get_traffic_load_in_percent\n\nTRAFFIC_TIMEPERIOD = '-15min'\nINOCTETS = 'ifInOctets'\nOUTOCTETS = 'ifOutOctets'\nMAX_TARGETS_PER_REQUEST = 500\n\n_logger = logging.getLogger(__name__)\n\n\nclass InterfaceLoad(object):\n    \"\"\"Represents link load for an Interface\"\"\"\n\n    def __init__(self, in_bps, out_bps, link_speed):\n        self.in_bps = in_bps\n        self.out_bps = out_bps\n        self.link_speed = link_speed\n\n        self.load_in_percent = get_traffic_load_in_percent(in_bps, link_speed)\n        self.rgb = get_traffic_rgb(self.load_in_percent)\n        if self.load_in_percent is not None:\n            self.formatted_load_in_percent = \"{0:.2f}\".format(self.load_in_percent)\n        else:\n            self.formatted_load_in_percent = None\n\n    def __repr__(self):\n        return (\n            \"<InterfaceLoad in_bps={0!r} out_bps={1!r} load_in_percent={2!r} css={3!r}>\"\n        ).format(self.in_bps, self.out_bps, self.load_in_percent, self.rgb)\n\n    def reversed(self):\n        \"\"\"Returns a copy of this InterfaceLoad for the reverse direction\"\"\"\n        return InterfaceLoad(self.out_bps, self.in_bps, self.link_speed)\n\n    def to_json(self):\n        return {\n            'css': self.rgb,\n            'in_bps': self.in_bps,\n            'out_bps': self.out_bps,\n            'percent_by_speed': self.formatted_load_in_percent,\n            'load_in_percent': self.load_in_percent,\n        }\n\n\nclass Traffic(object):\n    \"\"\"Represents traffic for a given edge from source to target\"\"\"\n\n    def __init__(self):\n        self.source = None\n        self.target = None\n\n    def __repr__(self):\n        return \"<Traffic source={0!r} target={1!r}>\".format(self.source, self.target)\n\n    def to_json(self):\n        \"\"\"to_json presentation for given Traffic in an edge\"\"\"\n        return {\n            'source': self.source and self.source.to_json() or None,\n            'target': self.target and self.target.to_json() or None,\n        }\n\n\ndef get_traffic_for(interfaces):\n    \"\"\"Get traffic average for the given interfaces using one request\n\n    :param QueryDict interfaces: interfaces to fetch data for\n    :returns: A dict of {interface: { suffix: value, suffix: value}}\n    \"\"\"\n    metric_mapping = {}  # Store metric_name -> interface\n    metrics = []\n    traffic = defaultdict(dict)\n\n    _logger.debug(\"preparing to get traffic data for %d interfaces\", len(interfaces))\n\n    # assume transform is the same for all octet counters\n    transform = get_metric_meta(\".\" + INOCTETS)[\"transform\"]\n\n    for interface in interfaces:\n        # what we need\n        ifc_metrics = _get_traffic_counter_metrics_for(interface)\n        metrics.extend(ifc_metrics)\n        # what to look for in the response\n        transformed = [transform.format(id=m) for m in ifc_metrics]\n        metric_mapping.update({target: interface for target in transformed})\n\n    targets = [transform.format(id=m) for m in _merge_metrics(sorted(metrics))]\n\n    _logger.debug(\n        \"getting data for %d targets in chunks of %d\",\n        len(targets),\n        MAX_TARGETS_PER_REQUEST,\n    )\n\n    data = {}\n    for request in chunks(targets, MAX_TARGETS_PER_REQUEST):\n        data.update(get_metric_average(request, start=TRAFFIC_TIMEPERIOD))\n\n    _logger.debug(\"received %d metrics in response\", len(data))\n\n    for metric, value in data.items():\n        interface = metric_mapping[metric]\n        if INOCTETS in metric:\n            traffic[interface].update({INOCTETS: value})\n        elif OUTOCTETS in metric:\n            traffic[interface].update({OUTOCTETS: value})\n\n    return traffic\n\n\ndef _get_traffic_counter_metrics_for(interface):\n    return [\n        metric_path_for_interface(interface.netbox, interface.ifname, counter)\n        for counter in (INOCTETS, OUTOCTETS)\n    ]\n\n\ndef _merge_metrics(metrics):\n    \"\"\"Merge a pre-sorted list of metrics using Graphite wildcard expressions, to\n    enable the smallest possible list of targets to ask for in a single request.\n    \"\"\"\n    current_prefix = None\n    interfaces = set()\n\n    for metric, remaining in zip(metrics, reversed(range(len(metrics)))):\n        items = metric.split(\".\")\n        prefix = items[:-2]\n        if current_prefix is None:\n            current_prefix = prefix\n\n        if prefix == current_prefix:\n            interface = items[-2]\n            interfaces.add(interface)\n        if prefix != current_prefix or remaining == 0:\n            emit = \"%s.{%s}.{%s}\" % (\n                \".\".join(current_prefix),\n                \",\".join(interfaces),\n                \",\".join((INOCTETS, OUTOCTETS)),\n            )\n            current_prefix = prefix\n            interfaces.clear()\n            yield emit\n\n\ndef get_traffic_data(port_pair, cache=None):\n    \"\"\"Gets a Traffic instance for the link described by the port pair.\n\n    :param port_pair: tuple containing (source, target)\n    :type port_pair: tuple(Interface, Interface)\n    :returns: A Traffic instance.\n    \"\"\"\n    traffic = Traffic()\n    source_port, target_port = port_pair\n\n    traffic.source = _fetch_data(source_port, cache)\n    if None in (traffic.source.in_bps, traffic.source.out_bps):\n        traffic.target = _fetch_data(target_port, cache)\n        traffic.source = traffic.target.reversed()\n    else:\n        traffic.target = traffic.source.reversed()\n\n    return traffic\n\n\ndef _fetch_data(interface, cache=None):\n    in_bps = out_bps = speed = None\n    if isinstance(interface, Interface):\n        speed = interface.speed\n        if cache is not None:\n            interface_data = cache[interface]\n            if interface_data:\n                in_bps = interface_data.get(INOCTETS)\n                out_bps = interface_data.get(OUTOCTETS)\n        else:\n            in_bps, out_bps = get_interface_data(interface)\n\n    return InterfaceLoad(in_bps, out_bps, speed)\n\n\ndef get_interface_data(interface):\n    \"\"\"Get ifin/outoctets for an interface using a single request\"\"\"\n    _logger.debug(\"getting traffic data for single interface %r\", interface)\n    data = get_traffic_for([interface])[interface]\n    in_bps, out_bps = data.get(INOCTETS), data.get(OUTOCTETS)\n    return in_bps, out_bps\n"
  },
  {
    "path": "python/nav/oidparsers.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nVarious functions that can be used to parse the contents of compound SNMP table\nrow indexes.\n\nMost of the functions here do not follow the correct naming pattern,\nas defined by PEP-8, because their names are derived directly from SNMP MIB\nobjects.\n\n\"\"\"\n\nimport array\nfrom functools import partial\nfrom itertools import islice\nfrom struct import unpack\n\nfrom IPy import IP\n\nfrom .oids import OID\n\nIPV4_ID = 1\nIPV6_ID = 2\n\n\ndef consume(sequence, *consumers):\n    \"\"\"\n    Consumes an OID sequence, using a list of provided consumer functions,\n    yielding the consumer results as they are returned.\n\n    :param sequence: An iterable OID sequence\n    :param consumers: A list of functions that each will consume parts of the\n                      sequence.\n    :return: A generator yielding one element for each of the supplied consumer\n             functions - unless the sequence isn't long enough to feed to all\n             the consumers, in which case things will probably error out.\n\n    \"\"\"\n    iterator = iter(sequence)\n    for consumer in consumers:\n        yield consumer(iterator)\n\n\n####################\n# Helper functions #\n####################\n\n\ndef oid_to_ipv6(oid):\n    \"\"\"Converts a sequence of 16 numbers to an IPv6 object in the fastest\n    known way.\n\n    :param oid: Any list or tuple of 16 integers\n\n    \"\"\"\n    if len(oid) != 16:\n        raise ValueError(\"IPv6 address must be 16 octets, not %d\" % len(oid))\n    try:\n        high, low = unpack(\"!QQ\", array.array(\"B\", oid).tobytes())\n    except OverflowError as error:\n        raise ValueError(error)\n    addr = (high << 64) + low\n    return IP(addr, ipversion=6)\n\n\ndef oid_to_ipv4(oid):\n    \"\"\"Converts a sequence of 4 numbers to an IPv4 object in the fastest\n    known way.\n\n    :param oid: Any list or tuple of 4 integers.\n\n    \"\"\"\n    if len(oid) != 4:\n        raise ValueError(\"IPv4 address must be 4 octets, not %d\" % len(oid))\n    try:\n        (addr,) = unpack(\"!I\", array.array(\"B\", oid).tobytes())\n    except OverflowError as error:\n        raise ValueError(error)\n    return IP(addr, ipversion=4)\n\n\n#############################################################################\n# Varios OID consumer functions, which can be fed to the consume() function #\n#############################################################################\n\n\ndef Unsigned32(iterator):\n    \"\"\"Consume a single element\"\"\"\n    return next(iterator)\n\n\ndef String(iterator, length=None):\n    \"\"\"Consume a string of a length specified by the next iteration\"\"\"\n    if length is None:\n        length = next(iterator)\n    return OID(islice(iterator, length))\n\n\nObjectIdentifier = String\nInetAddressType = Unsigned32\nInetAddress = String\nInetAddressIPv4 = partial(String, length=4)\nInetAddressIPv6 = partial(String, length=16)\nInetAddressPrefixLength = Unsigned32\n\n\ndef TypedInetAddress(iterator):\n    \"\"\"\n    Consumes and parses a InetAddressType.InetAddress combo into an IPy.IP host\n    address.\n    \"\"\"\n    addr_type, addr = consume(iterator, InetAddressType, InetAddress)\n    if addr_type == IPV4_ID:\n        return oid_to_ipv4(addr)\n    elif addr_type == IPV6_ID:\n        return oid_to_ipv6(addr)\n\n\ndef TypedFixedInetAddress(iterator):\n    \"\"\"\n    Consumes and parses a InetAddressType.InetAddress combo, where there is\n    no length specifier in the InetAddress string, into an IPy.IP host address.\n    \"\"\"\n    addr_type = next(iterator)\n    if addr_type == IPV4_ID:\n        (addr,) = consume(iterator, InetAddressIPv4)\n        return oid_to_ipv4(addr)\n    elif addr_type == IPV6_ID:\n        (addr,) = consume(iterator, InetAddressIPv6)\n        return oid_to_ipv6(addr)\n    else:\n        raise ValueError(\"unsupported address type %s\", addr_type)\n\n\ndef InetPrefix(iterator):\n    \"\"\"\n    Consumes and parses a InetAddressType.InetAddress.InetAddressPrefixLength\n    combo into an IPy.IP network prefix address\n    \"\"\"\n    addr, mask = consume(iterator, TypedInetAddress, InetAddressPrefixLength)\n    if addr:\n        return addr.make_net(mask)\n"
  },
  {
    "path": "python/nav/oids.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"OID manipulation\"\"\"\n\nSEPARATOR = '.'\nSEPARATOR_B = b'.'\n\n\nclass OID(tuple):\n    \"\"\"Object IDentifier represented in tuple form.\n\n    Example usages:\n\n      >>> ifXTable = OID('.1.3.6.1.2.1.31.1.1')\n      >>> ifXTable\n      OID('.1.3.6.1.2.1.31.1.1')\n      >>> ifName = ifXTable + '1.1'\n      >>> ifName\n      OID('.1.3.6.1.2.1.31.1.1.1.1')\n      >>> ifXTable.is_a_prefix_of(ifName)\n      True\n      >>> ifName.strip_prefix(ifXTable)\n      OID('.1.1')\n      >>> str(ifXTable)\n      '.1.3.6.1.2.1.31.1.1'\n      >>> ifXTable[:3]\n      (1, 3, 6)\n\n    \"\"\"\n\n    def __new__(cls, oid):\n        if isinstance(oid, str):\n            oid = map(int, oid.strip(SEPARATOR).split(SEPARATOR))\n        elif isinstance(oid, bytes):\n            oid = map(int, oid.strip(SEPARATOR_B).split(SEPARATOR_B))\n        elif isinstance(oid, OID):\n            return oid\n        return tuple.__new__(cls, oid)\n\n    def __str__(self):\n        return SEPARATOR + SEPARATOR.join([str(i) for i in self])\n\n    def __repr__(self):\n        return \"OID(%s)\" % repr(str(self))\n\n    def __add__(self, other):\n        return OID(super(OID, self).__add__(OID(other)))\n\n    def is_a_prefix_of(self, other):\n        \"\"\"Returns True if this OID is a prefix of other\"\"\"\n        other = OID(other)\n        return len(other) > len(self) and other[: len(self)] == self\n\n    def strip_prefix(self, prefix):\n        \"\"\"Returns this OID with prefix stripped.\n\n        If prefix isn't an actual prefix of this OID, this OID is returned\n        unchanged.\n\n        \"\"\"\n        prefix = OID(prefix)\n        if prefix.is_a_prefix_of(self):\n            return OID(self[len(prefix) :])\n        else:\n            return self\n\n\ndef get_enterprise_id(sysobjectid):\n    \"Returns the enterprise ID number from a sysObjectID\"\n    if not sysobjectid:\n        return\n    enterprises = OID('.1.3.6.1.4.1')\n    sysobj = OID(sysobjectid)\n    if enterprises.is_a_prefix_of(sysobj):\n        return sysobj[len(enterprises)]\n\n\ndef _test():\n    import doctest\n\n    doctest.testmod()\n\n\nif __name__ == \"__main__\":\n    _test()\n"
  },
  {
    "path": "python/nav/pgdump.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nProgram to dump the raw contents of the NAV PostgreSQL database,\nwith optional data filtering.\n\"\"\"\n\nimport sys\nimport os\nimport subprocess\nimport socket\nfrom optparse import OptionParser\nfrom datetime import datetime\n\nfrom nav import buildconf\nfrom nav.db import ConnectionParameters\nfrom nav import pgsync\n\nSTD_DUMP_ARGS = [\"--no-privileges\", \"--disable-triggers\"]\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    opts, _args = parse_args()\n\n    export_pgvars()\n    writeln(\"-- navpgdump invoked on %s at %s\" % (socket.gethostname(), datetime.now()))\n\n    if opts.exclude or opts.filters:\n        writeln(\"-- args: %r\" % sys.argv)\n\n        pg_dump(STD_DUMP_ARGS + [\"--schema-only\"])\n        excluded = set(opts.exclude).union(opts.filters.keys())\n        pg_dump(\n            STD_DUMP_ARGS\n            + [\"--data-only\"]\n            + [\"--exclude-table=%s\" % tbl for tbl in excluded]\n        )\n\n        if opts.filters:\n            for table, where in opts.filters.items():\n                filtered_dump(table, where)\n    else:\n        pg_dump(STD_DUMP_ARGS)\n\n    msg(\n        \"\"\"\nNAV database dump completed.\nUse NAV's navsyncdb command with the -r option to roll back the dump.\n\"\"\"\n    )\n\n\ndef parse_args():\n    \"\"\"Parses program arguments\"\"\"\n    parser = _make_optparser()\n    (opts, args) = parser.parse_args()\n\n    if opts.only_open_cam and \"cam\" in opts.exclude:\n        parser.error(\"--exclude cam and --only-open-cam are mutually exclusive\")\n    if opts.only_open_cam and \"cam\" in opts.filters:\n        parser.error(\"cam filter and --only-open-cam are mutually exclusive\")\n    if opts.only_open_arp and \"arp\" in opts.exclude:\n        parser.error(\"--exclude arp and --only-open-arp are mutually exclusive\")\n    if opts.only_open_cam and \"arp\" in opts.filters:\n        parser.error(\"arp filter and --only-open-arp are mutually exclusive\")\n\n    if opts.only_open_cam:\n        opts.filters[\"cam\"] = \"end_time >= 'infinity'\"\n    if opts.only_open_arp:\n        opts.filters[\"arp\"] = \"end_time >= 'infinity'\"\n\n    return opts, args\n\n\ndef _make_optparser():\n    parser = OptionParser(\n        description=\"Dumps the NAV PostgreSQL database as plain-text SQL to \"\n        \"stdout, with optional data filtering.\",\n        version=buildconf.VERSION,\n        epilog=\"The output of the program can be inserted into an empty \"\n        \"PostgreSQL database using the psql program.\",\n    )\n    parser.set_defaults(\n        filters={},\n        exclude=[],\n    )\n\n    opt = parser.add_option\n    opt(\n        \"-e\",\n        \"--exclude\",\n        action=\"append\",\n        type=\"string\",\n        dest=\"exclude\",\n        metavar=\"TABLE\",\n        help=\"Exclude TABLE data from dump\",\n    )\n    opt(\n        \"-c\",\n        \"--only-open-cam\",\n        action=\"store_true\",\n        dest=\"only_open_cam\",\n        help=\"Only dump open CAM records\",\n    )\n    opt(\n        \"-a\",\n        \"--only-open-arp\",\n        action=\"store_true\",\n        dest=\"only_open_arp\",\n        help=\"Only dump open ARP records\",\n    )\n    opt(\n        \"-f\",\n        \"--filter\",\n        type=\"string\",\n        action=\"callback\",\n        callback=_add_filter,\n        metavar=\"FILTER\",\n        help=\"Filter a table's contents. \"\n        \"FILTER must match \"\n        \"<tablename>=<SQL where clause>\",\n    )\n    return parser\n\n\ndef _add_filter(_option, _opt, value, parser):\n    \"\"\"Callback to parse a table filter value and add it to the filters dict\"\"\"\n    try:\n        table, where = value.split(\"=\", 1)\n        parser.values.filters[table.strip()] = where.strip()\n    except ValueError as err:\n        parser.error(\"invalid filter %r: %s\" % (value, err))\n\n\ndef export_pgvars():\n    \"\"\"Exports NAV's db config as PG* environment variables\"\"\"\n    params = ConnectionParameters.from_config()\n    params.export(os.environ)\n\n\ndef filtered_dump(table, where):\n    \"\"\"Dumps table data using specific WHERE clause for filtering\"\"\"\n    kwargs = dict(table=table, where=where)\n    search_path = \",\".join(pgsync.Synchronizer.required_namespaces)\n    writeln(\"SET search_path TO %s;\" % search_path)\n    writeln(\"ALTER TABLE {table} DISABLE TRIGGER ALL;\".format(**kwargs))\n    writeln(\"COPY {table} FROM stdin;\".format(**kwargs))\n    psql(\n        [\"-c\", \"COPY (SELECT * FROM {table} WHERE {where}) TO STDOUT\".format(**kwargs)]\n    )\n    writeln(\"\\\\.\\n\")\n    writeln(\"ALTER TABLE {table} ENABLE TRIGGER ALL;\".format(**kwargs))\n\n\ndef pg_dump(args):\n    \"\"\"Runs pg_dump in a subprocess\"\"\"\n    return pgcmd('pg_dump', args)\n\n\ndef psql(args):\n    \"\"\"Runs psql in a subprocess\"\"\"\n    return pgcmd('psql', args, False)\n\n\ndef pgcmd(cmd, args, comment=True):\n    \"\"\"Runs a given PostgreSQL related command, sending its output to stdout\"\"\"\n    cmd = [cmd]\n    cmd.extend(args)\n    if comment:\n        writeln(\"-- pgcmd: %r\" % cmd)\n    subprocess.check_call(cmd)\n\n\ndef writeln(string):\n    \"\"\"Flushes stdout and writes a string + a newline to it\"\"\"\n    sys.stdout.flush()\n    sys.stdout.write(string + \"\\n\")\n    sys.stdout.flush()\n\n\ndef msg(message):\n    \"\"\"Writes a message to stderr\"\"\"\n    strings = [s for s in message.split(\"\\n\") if s]\n    for string in strings:\n        sys.stderr.write(\"navpgdump: \" + string + \"\\n\")\n    sys.stderr.flush()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/pgsync.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2008, 2011-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Program to synchronize NAV database schema changes\"\"\"\n\nimport sys\nimport os\nimport re\nfrom optparse import OptionParser\nimport subprocess\nfrom textwrap import wrap\nfrom errno import ENOENT, EACCES\nfrom pathlib import Path\nimport psycopg2\n\nfrom nav.db import ConnectionParameters\nfrom nav.colors import colorize, print_color\nfrom nav.colors import COLOR_CYAN, COLOR_YELLOW, COLOR_RED, COLOR_GREEN\nfrom nav.util import resource_files, resource_bytes\n\n\ndef main():\n    \"\"\"Main program\"\"\"\n    (options, _args) = parse_args()\n\n    verify_password_is_configured()\n\n    if options.drop_database:\n        drop_database()\n    if options.create_database:\n        create_database()\n    if options.restore_file:\n        restore_from_dump(options.restore_file)\n\n    sync = Synchronizer('nav.models', options.apply_out_of_order_changes)\n    try:\n        sync.connect()\n    except psycopg2.OperationalError as err:\n        die(err)\n\n    sync.synchronize()\n\n\ndef parse_args():\n    \"\"\"Builds an OptionParser and returns parsed program arguments\"\"\"\n    parser = OptionParser(\n        description=\"Synchronizes your NAV database schema with the latest changes.\",\n        epilog=\"To create the database, this program assumes it can access the \"\n        \"PostgreSQL client binaries as the postgres superuser.  Either run \"\n        \"this program under the postgres shell account, or set the environment \"\n        \"variables required to connect as the superuser to your PostgreSQL \"\n        \"server (PGHOST, PGPASSWORD, and if necessary, PGPORT)\",\n    )\n    parser.add_option(\n        \"-c\",\n        \"--create\",\n        action=\"store_true\",\n        dest=\"create_database\",\n        help=\"Create NAV database\",\n    )\n    parser.add_option(\n        \"-r\",\n        \"--restore\",\n        metavar=\"FILE\",\n        action=\"store\",\n        type=\"string\",\n        dest=\"restore_file\",\n        help=\"Restore a database from the SQL dump in FILE. To \"\n        \"use input from stdin, specify - as the filename.\",\n    )\n    parser.add_option(\n        \"--drop-database\",\n        action=\"store_true\",\n        dest=\"drop_database\",\n        help=\"Drops the NAV database if it already exists. THIS \"\n        \"IS A DESTRUCTIVE OPERATION!\",\n    )\n    parser.add_option(\n        \"-o\",\n        \"--out-of-order\",\n        default=False,\n        action=\"store_true\",\n        dest=\"apply_out_of_order_changes\",\n        help=\"Apply missing schema changes even when they are \"\n        \"older than the newest applied change\",\n    )\n    return parser.parse_args()\n\n\ndef verify_password_is_configured():\n    \"\"\"Verifies that a password has been configured in db.conf\"\"\"\n    opts = ConnectionParameters.from_config()\n    if not opts.password:\n        die(\"No password configured for %s user in db.conf\" % opts.user)\n\n\ndef create_database():\n    \"\"\"Create a database using PostgreSQL command line clients\"\"\"\n    nav_opts = ConnectionParameters.from_config()\n    postgres_opts = ConnectionParameters.for_postgres_user()\n    postgres_opts.export(os.environ)\n\n    if not user_exists(nav_opts.user):\n        create_user(nav_opts.user, nav_opts.password)\n\n    print(\"Creating database %s owned by %s\" % (nav_opts.dbname, nav_opts.user))\n    trap_and_die(\n        subprocess.CalledProcessError,\n        \"Failed creating database %s\" % nav_opts.dbname,\n        check_call,\n        [\"createdb\", \"--owner=%s\" % nav_opts.user, \"--encoding=utf-8\", nav_opts.dbname],\n    )\n\n\ndef drop_database():\n    \"\"\"Drops an existing database using PostgreSQL command line clients\"\"\"\n    nav_opts = ConnectionParameters.from_config()\n    postgres_opts = ConnectionParameters.for_postgres_user()\n    postgres_opts.export(os.environ)\n\n    print(\"Dropping database %s\" % nav_opts.dbname)\n    trap_and_die(\n        subprocess.CalledProcessError,\n        \"Failed to drop database %s\" % nav_opts.dbname,\n        check_call,\n        [\"dropdb\", \"--if-exists\", nav_opts.dbname],\n    )\n\n\ndef restore_from_dump(filename):\n    \"\"\"Restores a NAV database from an SQL dump produced by pg_dump\"\"\"\n    postgres_opts = ConnectionParameters.for_postgres_user()\n    postgres_opts.export(os.environ)\n    nav_opts = ConnectionParameters.from_config()\n\n    print(\"Restoring database %s from file %s\" % (nav_opts.dbname, filename))\n    trap_and_die(\n        subprocess.CalledProcessError,\n        \"Failed to restore database %s from file %s\" % (nav_opts.dbname, filename),\n        check_call,\n        [\"psql\", \"--quiet\", \"-f\", filename, nav_opts.dbname],\n    )\n\n\ndef user_exists(username):\n    \"\"\"Returns True if a database user exists.\n\n    Uses the psql command client, so environment should be set.\n\n    \"\"\"\n    try:\n        output = popen(\n            [\n                \"psql\",\n                \"-P\",\n                \"tuples_only\",\n                \"--no-align\",\n                \"-c\",\n                \"SELECT rolname FROM pg_roles WHERE rolname='%s'\" % username,\n                \"template1\",\n            ],\n            stdout=subprocess.PIPE,\n        ).communicate()[0]\n    except subprocess.CalledProcessError:\n        die(\"Failed checking for the existence of user %s\" % username)\n\n    return username in output.decode('UTF-8')\n\n\ndef create_user(username, password):\n    \"\"\"Creates a database user,\n\n    Uses the createdb and psql command line clients, so environment should be\n    set.\n\n    \"\"\"\n    print(\"Creating database user %s\" % username)\n    trap_and_die(\n        subprocess.CalledProcessError,\n        \"Failed creating user %s\" % username,\n        check_call,\n        [\"createuser\", \"--no-superuser\", \"--no-createdb\", \"--no-createrole\", username],\n    )\n    trap_and_die(\n        subprocess.CalledProcessError,\n        \"Failed setting %s user's password\",\n        check_call,\n        [\n            \"psql\",\n            \"--quiet\",\n            \"-c\",\n            \"ALTER USER %s WITH PASSWORD '%s';\" % (username, password),\n            \"template1\",\n        ],\n    )\n\n\ndef handle_missing_binaries(func):\n    \"\"\"Decorates func to handle errors from the subprocess module.\"\"\"\n    messages = {\n        ENOENT: \"Cannot find PostgreSQL client program\",\n        EACCES: \"No permission to run PostgreSQL client program\",\n    }\n\n    def _decorator(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except OSError as err:\n            program = args[0][0]\n            if err.errno in messages:\n                die(\"%s: %s\" % (messages[err.errno], program))\n            else:\n                raise\n\n    return _decorator\n\n\n@handle_missing_binaries\n@colorize(COLOR_YELLOW)\ndef check_call(*args, **kwargs):\n    \"\"\"subprocess.check_call with OSError handling\"\"\"\n    return subprocess.check_call(*args, **kwargs)\n\n\n@handle_missing_binaries\ndef popen(*args, **kwargs):\n    \"\"\"subprocess.Popen with OSError handling\"\"\"\n    return subprocess.Popen(*args, **kwargs)\n\n\ndef trap_and_die(exception, message, func, *args, **kwargs):\n    \"\"\"Traps exception and dies during call to func with *args and **kwargs.\n\n    If exception is caught, message is printed and the process is terminated.\n\n    \"\"\"\n    try:\n        return func(*args, **kwargs)\n    except exception:  # noqa: BLE001\n        die(message)\n\n\ndef die(errormsg, exit_code=1):\n    \"\"\"Print errormsg to stderr and terminates process with exit_code\"\"\"\n    print(errormsg, file=sys.stderr)\n    sys.exit(exit_code)\n\n\nclass Synchronizer(object):\n    \"\"\"Handles schema synchronization for a database.\"\"\"\n\n    required_namespaces = (\n        'manage',\n        'profiles',\n        'logger',\n        'arnold',\n        'radius',\n    )\n\n    schemas = [\n        ('manage', 'manage.sql', 'types.sql'),\n        ('profiles', 'navprofiles.sql'),\n        ('logger', 'logger.sql'),\n        ('arnold', 'arnold.sql'),\n        ('radius', 'radius.sql'),\n        ('manage', 'manage2.sql'),\n        (None, 'indexes.sql'),\n    ]\n\n    def __init__(self, resource_module, apply_out_of_order_changes=False, config=None):\n        self.resource_module = resource_module\n        self.connection = None\n        self.cursor = None\n        self.apply_out_of_order_changes = apply_out_of_order_changes\n        self.finder = ChangeScriptFinder(self.resource_module)\n        if config:\n            self.connect_options = config\n        else:\n            self.connect_options = ConnectionParameters.from_config()\n\n    def connect(self):\n        \"\"\"Connects the synchronizer to the NAV configured database.\"\"\"\n        dsn = str(self.connect_options)\n        self.connection = psycopg2.connect(dsn)\n        read_committed = 1\n        self.connection.set_isolation_level(read_committed)\n        self.cursor = self.connection.cursor()\n\n    def synchronize(self):\n        \"\"\"Begins the synchronization process.\"\"\"\n        self.verify_namespaces()\n        self.verify_search_path()\n        self.verify_hstore_extension()\n\n        if self.is_empty_database():\n            print(\"Your database appears empty\")\n            self.install_baseline()\n\n        self.apply_changes()\n\n    def verify_search_path(self):\n        \"\"\"Verifies that the database's search_path contains the namespaces\n        NAV needs.\n\n        \"\"\"\n        self.cursor.execute('SHOW search_path')\n        search_path = self.cursor.fetchone()[0]\n        schemas = [s.strip() for s in search_path.split(',')]\n\n        add_schemas = [\n            wanted for wanted in self.required_namespaces if wanted not in schemas\n        ]\n\n        if add_schemas:\n            print(\n                (\n                    \"Existing namespaces in %s search path: %s. Adding %s.\"\n                    % (\n                        self.connect_options.dbname,\n                        \", \".join(schemas),\n                        \", \".join(add_schemas),\n                    )\n                )\n            )\n            schemas.extend(add_schemas)\n            sql = 'ALTER DATABASE \"%s\" SET search_path TO %s' % (\n                self.connect_options.dbname,\n                \", \".join(schemas),\n            )\n            self.cursor.execute(sql)\n        self.connection.commit()\n        self.connect()  # must reconnect to activate the new search path\n\n    def verify_namespaces(self):\n        \"\"\"Verifies that the database has the namespaces NAV needs\"\"\"\n        self.cursor.execute('SELECT nspname FROM pg_namespace')\n        namespaces = [r[0] for r in self.cursor.fetchall()]\n\n        add_namespaces = [\n            wanted for wanted in self.required_namespaces if wanted not in namespaces\n        ]\n\n        if add_namespaces:\n            print(\n                (\n                    \"Adding namespaces to database %s: %s\"\n                    % (self.connect_options.dbname, \", \".join(add_namespaces))\n                )\n            )\n            for namespace in add_namespaces:\n                self.cursor.execute(\"CREATE SCHEMA %s\" % namespace)\n        self.connection.commit()\n\n    def is_empty_database(self):\n        \"\"\"Returns True if the database appears to be empty\"\"\"\n        return not self.is_legacy_database() and not self.is_schema_logged()\n\n    def is_legacy_database(self):\n        \"\"\"Returns True if the legacy nav_schema_version table is present\"\"\"\n        self.cursor.execute(\n            \"SELECT COUNT(*) FROM pg_tables WHERE tablename = 'nav_schema_version'\"\n        )\n        count = self.cursor.fetchone()[0]\n        return count == 1\n\n    def is_schema_logged(self):\n        \"\"\"Returns True if the schema_change_log table is present\"\"\"\n        self.cursor.execute(\n            \"SELECT COUNT(*) FROM pg_tables WHERE tablename = 'schema_change_log'\"\n        )\n        count = self.cursor.fetchone()[0]\n        return count == 1\n\n    def verify_hstore_extension(self):\n        \"\"\"\n        Installs the hstore extension to dbname if not already present.\n\n        Installation takes place in the namespace mentioned first in the\n        search path, which should be the manage namespace in NAV's case.\n\n        \"\"\"\n        postgres_opts = ConnectionParameters.for_postgres_user()\n        postgres_opts.export(os.environ)\n\n        self.cursor.execute(\"SELECT COUNT(*) FROM pg_extension WHERE extname='hstore'\")\n        (count,) = self.cursor.fetchone()\n        if count > 0:\n            return\n\n        print(\n            \"Creating hstore extension in database {0}\".format(\n                self.connect_options.dbname\n            )\n        )\n\n        trap_and_die(\n            subprocess.CalledProcessError,\n            \"Failed to install the hstore extension, maybe you need \"\n            \"to run as the postgres superuser?\",\n            check_call,\n            [\n                \"psql\",\n                \"--quiet\",\n                \"-c\",\n                \"CREATE EXTENSION hstore WITH SCHEMA manage;\",\n                self.connect_options.dbname,\n            ],\n        )\n\n    def install_baseline(self):\n        \"\"\"Installs the baseline NAV schema\"\"\"\n        print(\"Installing baseline schema\")\n        for schema in self.schemas:\n            namespace = schema[0]\n            files = schema[1:]\n            if namespace:\n                self.cursor.execute('SET search_path TO %s' % namespace)\n            for filename in files:\n                self.execute_sql_file(os.path.join(\"sql/baseline\", filename))\n\n            self.cursor.execute('RESET search_path')\n        self.connection.commit()\n\n    def apply_changes(self):\n        \"\"\"Finds and applies outstanding schema change scripts.\"\"\"\n        applied = self.get_all_applied_changes()\n        newest = applied[-1]\n        missing = self.finder.get_missing_changes(applied)\n\n        old_versions = [m for m in missing if m < newest]\n        new_versions = [m for m in missing if m > newest]\n\n        if old_versions:\n            if self.apply_out_of_order_changes:\n                print(\"Applying outstanding schema changes out of order\")\n                self.apply_versions(old_versions)\n            else:\n                print(\n                    \"\\n\".join(\n                        wrap(\n                            \"There are outstanding schema changes older than the \"\n                            \"newest applied one.  The ordering of schema changes \"\n                            \"may be significant, so I'm not applying these changes \"\n                            \"unless you force me with the -o option:\"\n                        )\n                    )\n                )\n                print()\n                self.print_script_list(old_versions)\n                if new_versions:\n                    print(\"\\nOutstanding new schema changes:\\n\")\n                    self.print_script_list(new_versions)\n                sys.exit(2)\n\n        if new_versions:\n            print(\"Applying outstanding schema changes\")\n            self.apply_versions(new_versions)\n\n        if not old_versions and not new_versions:\n            print(\"No outstanding schema changes.\")\n\n    def print_script_list(self, versions):\n        \"\"\"Prints a list of found change scripts based on a list of versions\"\"\"\n        available = self.finder.as_dict()\n        for version in versions:\n            print(available.get(version, version))\n\n    def apply_versions(self, versions):\n        \"\"\"Applies the change scripts for a list of versions\"\"\"\n        available = self.finder.as_dict()\n        for version in versions:\n            script = available[version]\n            self.apply_change_script(version, script)\n\n    def get_newest_applied_change(self):\n        \"\"\"Returns the (major, minor, point) of the newest logged change\"\"\"\n        return self.get_all_applied_changes()[-1]\n\n    def get_first_applied_change(self):\n        \"\"\"Returns the (major, minor, point) of the first logged change\"\"\"\n        return self.get_all_applied_changes()[0]\n\n    def get_all_applied_changes(self):\n        \"\"\"Returns a list of the (major, minor, point) of all logged changes,\n        ordered from oldest to newest.\n\n        \"\"\"\n        if self.is_legacy_database():\n            return [(-1, -1, -1)]\n\n        self.cursor.execute(\n            \"\"\"\n            SELECT major, minor, point\n            FROM schema_change_log\n            ORDER BY major ASC, minor ASC, point ASC\n            \"\"\"\n        )\n        return self.cursor.fetchall()\n\n    def apply_change_script(self, version, script):\n        \"\"\"Applies a specific change script.\"\"\"\n        self.execute_sql_file(script)\n        self.log_schema_change(version, script)\n        self.connection.commit()\n\n    def log_schema_change(self, version, script):\n        \"\"\"Logs a successful schema change\"\"\"\n        major, minor, point = version\n        basename = os.path.basename(script)\n        self.cursor.execute(\n            \"\"\"\n            INSERT INTO schema_change_log (major, minor, point, script_name)\n            VALUES (%s, %s, %s, %s)\n            \"\"\",\n            (major, minor, point, basename),\n        )\n\n    def execute_sql_file(self, filename):\n        \"\"\"Executes a single SQL file.\n\n        Terminates the process if there are errors.\n\n        \"\"\"\n        sql = self._read_sql_file(filename)\n        print_color(\"%-20s \" % (filename + \":\"), COLOR_CYAN, newline=False)\n        try:\n            self.cursor.execute(sql)\n        except (psycopg2.DataError, psycopg2.ProgrammingError) as err:\n            print_color(str(err) or type(err).__name__, COLOR_RED)\n            sys.exit(2)\n        else:\n            print_color(\"OK\", COLOR_GREEN)\n\n    def _read_sql_file(self, filename):\n        return resource_bytes(self.resource_module, filename)\n\n\nclass ChangeScriptFinder(list):\n    \"\"\"Handles locating change scripts\"\"\"\n\n    script_pattern = re.compile(\n        r\"^sc\\.(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<point>\\d+)\\.(?P<type>sql)$\"\n    )\n\n    def __init__(self, resource_module):\n        super(ChangeScriptFinder, self).__init__()\n        self.resource_module = resource_module\n        self._find_change_scripts()\n\n    def _find_change_scripts(self):\n        changes_dir = Path('sql/changes')\n        scripts = []\n        sql_path = resource_files(self.resource_module).joinpath(changes_dir)\n        for path in sql_path.iterdir():\n            filename = path.name\n            if self.script_pattern.match(str(filename)):\n                scripts.append(str(changes_dir / filename))\n        self[:] = scripts\n\n    def get_missing_changes(self, versions):\n        \"\"\"Returns a list of available schema changes that are missing from\n        the versions list.\n\n        Version scripts older than the oldest version in the versions lists\n        will not be considered.\n\n        \"\"\"\n        applied = sorted(versions)\n        oldest = applied[0]\n        scripts = self.as_dict()\n        available = sorted(ver for ver in scripts.keys() if ver >= oldest)\n\n        return sorted(set(available).difference(applied))\n\n    def as_dict(self):\n        \"\"\"Returns the contents of the script list as a dictionary.\n\n        :returns: {(major, minor, point): 'scriptfile'}\n\n        \"\"\"\n        return dict((self.script_to_version(script), script) for script in self)\n\n    @classmethod\n    def script_to_version(cls, filename):\n        \"\"\"Converts a change script filename to a (major,minor,point) version\n        number.\n\n        \"\"\"\n        filename = os.path.basename(filename)\n        match = cls.script_pattern.match(filename)\n        return (\n            int(match.group('major')),\n            int(match.group('minor')),\n            int(match.group('point')),\n        )\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/portadmin/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/portadmin/config.py",
    "content": "#\n# Copyright (C) 2011-2015, 2017, 2019 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tools to handle PortAdmin configuration database/file\"\"\"\n\nfrom os.path import join\n\nfrom nav.config import NAVConfigParser\nfrom nav.portadmin.vlan import FantasyVlan\n\n\nclass PortAdminConfig(NAVConfigParser):\n    \"\"\" \"PortAdmin config parser\"\"\"\n\n    DEFAULT_CONFIG_FILES = (join(\"portadmin\", \"portadmin.conf\"),)\n    DEFAULT_CONFIG = \"\"\"\n[general]\ncisco_voice_vlans = false\ncisco_voice_cdp = false\nrestart_interface = on\ncommit = on\ntimeout = 3\nretries = 3\ntrunk_edit = true\nlink_edit = true\n\n[authorization]\nvlan_auth = off\n\n[defaultvlan]\n[ifaliasformat]\n\n[dot1x]\nenabled = false\n\"\"\"\n\n    def is_vlan_authorization_enabled(self):\n        \"\"\"Check config to see if authorization is to be done\"\"\"\n        return self.getboolean(\"authorization\", \"vlan_auth\")\n\n    def is_commit_enabled(self):\n        \"\"\"Checks if configuration commit is turned on or off. Default is on\"\"\"\n        return self.getboolean(\"general\", \"commit\")\n\n    def is_restart_interface_enabled(self):\n        \"\"\"Checks if restart interface is turned on or off. Default is on\"\"\"\n        return self.getboolean(\"general\", \"restart_interface\")\n\n    def get_dot1x_external_url(self):\n        \"\"\"Returns url for external config of dot1x for a interface\"\"\"\n        return self.get(\"dot1x\", \"port_url_template\", fallback=None)\n\n    def get_ifaliasformat(self):\n        \"\"\"Get format for ifalias defined in config file\"\"\"\n        return self.get(\"ifaliasformat\", \"format\", fallback=None)\n\n    def find_default_vlan(self, include_netident=False):\n        \"\"\"Check config to see if a default vlan is set\n\n        :rtype: FantasyVlan\n        \"\"\"\n        defaultvlan = self.getint(\"defaultvlan\", \"vlan\", fallback=None)\n        netident = self.get(\"defaultvlan\", \"netident\", fallback=\"\")\n\n        if defaultvlan:\n            if include_netident:\n                return FantasyVlan(defaultvlan, netident)\n            else:\n                return FantasyVlan(defaultvlan)\n\n    def fetch_voice_vlans(self):\n        \"\"\"Fetch the voice vlans (if any) from the config file\"\"\"\n        voice_vlans = self.get(\"general\", \"voice_vlans\", fallback=\"\")\n        try:\n            return [int(v) for v in voice_vlans.split(\",\")]\n        except ValueError:\n            return []\n\n    def get_trunk_edit(self):\n        \"\"\"Gets config option for trunk edit\n\n        Default is to allow trunk edit\n        \"\"\"\n        return self.getboolean(\"general\", \"trunk_edit\", fallback=True)\n\n    def get_link_edit(self):\n        \"\"\"Gets config option for link edit\"\"\"\n        return self.getboolean(\"general\", \"link_edit\", fallback=True)\n\n    def is_dot1x_enabled(self):\n        \"\"\"Checks if dot1x config option is true\"\"\"\n        return self.getboolean(\"dot1x\", \"enabled\", fallback=False)\n\n    def is_cisco_voice_enabled(self):\n        \"\"\"Checks if the Cisco config option is enabled\"\"\"\n        return self.getboolean(\"general\", \"cisco_voice_vlan\", fallback=False)\n\n    def is_cisco_voice_cdp_enabled(self):\n        \"\"\"Checks if the CDP config option is enabled\"\"\"\n        return self.getboolean(\"general\", \"cisco_voice_cdp\", fallback=False)\n\n\nCONFIG = PortAdminConfig()\n"
  },
  {
    "path": "python/nav/portadmin/handlers.py",
    "content": "#\n# Copyright (C) 2011-2015, 2020 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Interface definition for PortAdmin management handlers\"\"\"\n\nimport time\nfrom typing import Any, Optional, Sequence, Union\nimport logging\nfrom dataclasses import dataclass\n\nfrom nav.models import manage\nfrom nav.portadmin.vlan import FantasyVlan\n\n\n_logger = logging.getLogger(__name__)\n\n\n@dataclass\nclass PoeState:\n    \"\"\"Class for defining PoE states.\n    `state` is the value used on the device itself.\n    `name` is a human readable name for the state\n    \"\"\"\n\n    state: Union[str, int]\n    name: str\n\n\nclass ManagementHandler:\n    \"\"\"Defines a common interface for all types of PortAdmin management handlers.\n\n    This defines the set of methods that a handler class may be expected by PortAdmin\n    to provide, regardless of the underlying management protocol implemented by such\n    a class.\n    \"\"\"\n\n    VENDOR = None\n\n    def __init__(self, netbox: manage.Netbox, **kwargs):\n        self.netbox = netbox\n\n    @classmethod\n    def can_handle(cls, netbox: manage.Netbox) -> bool:\n        \"\"\"Returns True if this handler can handle the given netbox\"\"\"\n        return netbox.type and netbox.type.get_enterprise_id() == cls.VENDOR\n\n    def set_interface_description(self, interface: manage.Interface, description: str):\n        \"\"\"Configures a single interface's description, AKA the ifalias value\"\"\"\n        raise NotImplementedError\n\n    def get_interface_native_vlan(self, interface: manage.Interface) -> int:\n        \"\"\"Retrieves the native/untagged VLAN configured on interface\"\"\"\n        raise NotImplementedError\n\n    def get_interfaces(\n        self, interfaces: Sequence[manage.Interface] = None\n    ) -> list[dict[str, Any]]:\n        \"\"\"Retrieves running configuration switch ports on the device.\n\n        :param interfaces: Optional list of interfaces to filter for, as fetching\n                           data for all interfaces may be a waste of time if only a\n                           single interface is needed. The implementing\n                           handler/protocol may not support this filter, so do not rely\n                           on it.\n        :returns: A list of dicts with members `name`, `description`, `oper`, `admin`\n                  and `vlan` (the latter being the access/untagged/native vlan ID.\n        \"\"\"\n        raise NotImplementedError\n\n    def set_vlan(self, interface, vlan):\n        \"\"\"Set a new vlan on the given interface and remove the previous vlan\"\"\"\n        raise NotImplementedError\n\n    def set_native_vlan(self, interface: manage.Interface, vlan: int):\n        \"\"\"Set native vlan on a trunk interface\"\"\"\n        raise NotImplementedError\n\n    def set_interface_up(self, interface: manage.Interface):\n        \"\"\"Enables a previously shutdown interface\"\"\"\n        raise NotImplementedError\n\n    def set_interface_down(self, interface: manage.Interface):\n        \"\"\"Shuts down/disables an enabled interface\"\"\"\n        raise NotImplementedError\n\n    def cycle_interfaces(\n        self,\n        interfaces: Sequence[manage.Interface],\n        wait: float = 5.0,\n        commit: bool = False,\n    ):\n        \"\"\"Link cycles a set of interfaces, with an optional delay in between.\n\n        Mostly used for configuration changes where any client connected to an\n        interface needs to be notified about a network change. Typically,\n        if an interface is suddenly placed on a new VLAN, cycling the link status of\n        the interface will prompt any connected machine to ask for a new DHCP lease,\n        which may be necessary now that the machine is potentially on a different IP\n        subnet.\n\n        :param interfaces: The list of interfaces to cycle.\n        :param wait: number of seconds to wait between down and up operations.\n        :param commit: If True, issues a config commit when the interface have been\n                       disabled, and issues a new commit when they have been enabled\n                       again.\n        \"\"\"\n        if not interfaces:\n            return\n\n        netbox = set(ifc.netbox for ifc in interfaces)\n        assert len(netbox) == 1, \"Interfaces belong to multiple netboxes\"\n        netbox = list(netbox)[0]\n        assert netbox == self.netbox, \"Interfaces belong to wrong netbox\"\n\n        to_cycle = self._filter_oper_up_interfaces(interfaces)\n        if not to_cycle:\n            _logger.debug(\"No interfaces to cycle on %s\", netbox.sysname)\n            return\n\n        _logger.debug(\"Taking interfaces administratively down\")\n        for ifc in to_cycle:\n            self.set_interface_down(ifc)\n            _logger.debug(ifc.ifname)\n        if commit:\n            self.commit_configuration()\n\n        if wait:\n            time.sleep(wait)\n\n        _logger.debug(\"Taking interfaces administratively up again\")\n        for ifc in to_cycle:\n            self.set_interface_up(ifc)\n            _logger.debug(ifc.ifname)\n        if commit:\n            self.commit_configuration()\n\n    def _filter_oper_up_interfaces(\n        self, interfaces: Sequence[manage.Interface]\n    ) -> list[manage.Interface]:\n        \"\"\"Filters a list of Interface objects, returning only those that are\n        currently operationally up.\n\n        \"\"\"\n        oper_up = set(\n            ifc[\"name\"]\n            for ifc in self.get_interfaces(interfaces)\n            if ifc[\"oper\"] == manage.Interface.OPER_UP\n        )\n        to_cycle = [ifc for ifc in interfaces if ifc.ifname in oper_up]\n        if len(to_cycle) < len(interfaces):\n            _logger.debug(\n                \"Link cycling on %s: Asked to cycle %r, but only %r is oper up\",\n                self.netbox.sysname,\n                [ifc.ifname for ifc in interfaces],\n                [ifc.ifname for ifc in to_cycle],\n            )\n        return to_cycle\n\n    def commit_configuration(self):\n        \"\"\"Commit running configuration or pending configuration changes to the\n        device's startup configuration.\n\n        This operation has different implications depending on the underlying\n        platform and management protocol, and may in some instances be a no-op.\n\n        This would map more or less one-to-one when using NETCONF and related protocols,\n        whereas when using SNMP on Cisco, this may consist of a \"write mem\" operation.\n        \"\"\"\n        raise NotImplementedError\n\n    def get_interface_admin_status(self, interface: manage.Interface) -> int:\n        \"\"\"Query administrative status of an individual interface.\n\n        :returns: A integer to be interpreted as an RFC 2863 ifAdminStatus value, also\n                  defined in `manage.Interface.ADMIN_STATUS_CHOICES`:\n                  > up(1),       -- ready to pass packets\n                  > down(2),\n                  > testing(3)   -- in some test mode\n        \"\"\"\n        raise NotImplementedError\n\n    def get_netbox_vlans(self) -> list[FantasyVlan]:\n        \"\"\"Returns a list of FantasyVlan objects representing the enabled VLANs on\n        this netbox.\n\n        The FantasyVlan objects represent NAV VLAN objects where a VLAN tag can be\n        correlated with a NAV VLAN entry, but can also be used to represent VLAN tags\n        that are unknown to NAV.\n        \"\"\"\n        raise NotImplementedError\n\n    def get_netbox_vlan_tags(self) -> list[int]:\n        \"\"\"Returns a list of enabled VLANs on this netbox.\n\n        :returns: A list of VLAN tags (integers)\n        \"\"\"\n        raise NotImplementedError\n\n    def set_interface_voice_vlan(self, interface: manage.Interface, voice_vlan: int):\n        \"\"\"Activates the voice vlan on this interface.\n\n        The default implementation is to employ PortAdmin's generic trunk-based voice\n        VLAN concept. This entails setting the interface to trunk mode, keeping the\n        untagged VLAN as its native VLAN and trunking/tagging the voice VLAN.\n\n        A vendor-specific implementation in an inheriting class may opt to use a more\n        appropriate vendor-specific implementation (one example is Cisco voice VLAN).\n        \"\"\"\n        self.set_trunk(interface, interface.vlan, [voice_vlan])\n\n    def get_cisco_voice_vlans(self):\n        \"\"\"Should not be implemented on anything else than Cisco\"\"\"\n        raise NotImplementedError\n\n    def set_cisco_voice_vlan(self, interface, voice_vlan):\n        \"\"\"Should not be implemented on anything else than Cisco\"\"\"\n        raise NotImplementedError\n\n    def enable_cisco_cdp(self, interface):\n        \"\"\"Should not be implemented on anything else than Cisco\"\"\"\n        raise NotImplementedError\n\n    def disable_cisco_voice_vlan(self, interface):\n        \"\"\"Should not be implemented on anything else than Cisco\"\"\"\n        raise NotImplementedError\n\n    def disable_cisco_cdp(self, interface):\n        \"\"\"Should not be implemented on anything else than Cisco\"\"\"\n        raise NotImplementedError\n\n    def get_native_and_trunked_vlans(self, interface) -> tuple[int, list[int]]:\n        \"\"\"Get the trunked vlans on this interface\n\n        :returns: (native_vlan_tag, list_of_trunked_vlan_tags)\n        \"\"\"\n        raise NotImplementedError\n\n    def set_access(self, interface: manage.Interface, access_vlan: int):\n        \"\"\"Puts a port in access mode and sets its access/native/untagged VLAN.\n\n        An implementation must also update the Interface object in the NAVdb.\n        \"\"\"\n        raise NotImplementedError\n\n    def set_trunk(\n        self, interface: manage.Interface, native_vlan: int, trunk_vlans: Sequence[int]\n    ):\n        \"\"\"Puts a port in trunk mode, setting its native/untagged VLAN and tagged\n        trunk VLANs as well.\n\n        An implementation must also update the Interface object in the NAVdb.\n\n        :param interface: The interface to set to trunk mode.\n        :param native_vlan: The native VLAN for untagged packets on this interface.\n        :param trunk_vlans: A list of VLAN tags to allow on this trunk.\n        \"\"\"\n        raise NotImplementedError\n\n    def is_dot1x_enabled(self, interface: manage.Interface) -> bool:\n        \"\"\"Returns True if 802.1X authentication is is enabled on interface\"\"\"\n        raise NotImplementedError\n\n    def get_dot1x_enabled_interfaces(self) -> dict[str, bool]:\n        \"\"\"Fetches the 802.1X enabled state of every interface.\n\n        :returns: A dict mapping each interface name to a \"802.1X enabled\" value\n        \"\"\"\n        raise NotImplementedError\n\n    def is_port_access_control_enabled(self) -> bool:\n        \"\"\"Returns True if port access control is enabled on this netbox\"\"\"\n        raise NotImplementedError\n\n    def raise_if_not_configurable(self):\n        \"\"\"Raises an exception if this netbox cannot be configured through PortAdmin.\n\n        The exception message will contain a human-readable explanation as to why not.\n        \"\"\"\n        raise NotImplementedError\n\n    def is_configurable(self) -> bool:\n        \"\"\"Returns True if this netbox is configurable using this handler\"\"\"\n        try:\n            self.raise_if_not_configurable()\n        except Exception:  # noqa: BLE001\n            return False\n        return True\n\n    def get_poe_state_options(self) -> Sequence[PoeState]:\n        \"\"\"Returns the available options for enabling/disabling PoE on this netbox\"\"\"\n        raise NotImplementedError\n\n    def set_poe_state(self, interface: manage.Interface, state: PoeState):\n        \"\"\"Set state for enabling/disabling PoE on this interface.\n        Available options should be retrieved using `get_poe_state_options`\n        \"\"\"\n        raise NotImplementedError\n\n    def get_poe_states(\n        self, interfaces: Optional[Sequence[manage.Interface]] = None\n    ) -> dict[str, Optional[PoeState]]:\n        \"\"\"Retrieves current PoE state for interfaces on this device.\n\n        :param interfaces: Optional sequence of interfaces to filter for, as fetching\n                           data for all interfaces may be a waste of time if only a\n                           single interface is needed. If this parameter is omitted,\n                           the default behavior is to filter on all Interface objects\n                           registered for this device.\n        :returns: A dict mapping interfaces to their discovered PoE state.\n                  The key matches the `ifname` attribute for the related\n                  Interface object.\n                  The value will be None if the interface does not support PoE.\n        \"\"\"\n        raise NotImplementedError\n\n\nclass ManagementError(Exception):\n    \"\"\"Base exception class for device management errors\"\"\"\n\n\nclass DeviceNotConfigurableError(ManagementError):\n    \"\"\"Raised when a device is not configurable by PortAdmin for some reason\"\"\"\n\n\nclass NoResponseError(ManagementError):\n    \"\"\"Raised whenever there is no response when talking to the remote device\"\"\"\n\n\nclass AuthenticationError(ManagementError):\n    \"\"\"Raised where the remote device indicated the wrong credentials were used\"\"\"\n\n\nclass ProtocolError(ManagementError):\n    \"\"\"Raised when some non-categorized error in the underlying protocol occurred\n    during communication\n    \"\"\"\n\n\nclass POENotSupportedError(ManagementError):\n    \"\"\"Raised when an interface that does not support PoE is used in a context\n    where PoE support is expected\n    \"\"\"\n\n\nclass POEStateNotSupportedError(ManagementError):\n    \"\"\"Raised when a PoE state is detected in a context where it is not supported\"\"\"\n\n\nclass XMLParseError(ManagementError):\n    \"\"\"Raised when failing to parse XML\"\"\"\n"
  },
  {
    "path": "python/nav/portadmin/management.py",
    "content": "#\n# Copyright (C) 2011-2015, 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This is a utility library made especially for PortAdmin.\"\"\"\n\nfrom nav.errors import NoNetboxTypeError\nfrom nav.models import manage\nfrom nav.portadmin.handlers import ManagementHandler\nfrom nav.portadmin.snmp.base import SNMPHandler\nfrom nav.portadmin.snmp.cisco import Cisco\nfrom nav.portadmin.snmp.dell import Dell\nfrom nav.portadmin.snmp.h3c import H3C\nfrom nav.portadmin.snmp.hp import HP\nfrom nav.portadmin.napalm.juniper import Juniper\n\nSUPPORTED_HANDLERS = (Cisco, Dell, H3C, HP, Juniper)\nFALLBACK_HANDLER = SNMPHandler\n\n\nclass ManagementFactory(object):\n    \"\"\"Factory class for returning management handles, depending\n    on a netbox' vendor identification and its management configuration.\"\"\"\n\n    @classmethod\n    def get_instance(cls, netbox: manage.Netbox, **kwargs) -> ManagementHandler:\n        \"\"\"Get and SNMP-handle depending on vendor type\"\"\"\n        if not netbox.type:\n            raise NoNetboxTypeError()\n\n        matched_handlers = (h for h in SUPPORTED_HANDLERS if h.can_handle(netbox))\n        chosen_handler = next(matched_handlers, FALLBACK_HANDLER)\n        return chosen_handler(netbox, **kwargs)\n\n    def __init__(self):\n        pass\n"
  },
  {
    "path": "python/nav/portadmin/napalm/__init__.py",
    "content": "\"\"\"This package contains PortAdmin management handlers that employ the NAPALM\nframework.\n\"\"\"\n"
  },
  {
    "path": "python/nav/portadmin/napalm/juniper.py",
    "content": "#\n# Copyright (C) 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Juniper specific PortAdmin functionality.\n\nSome references:\n- https://www.juniper.net/documentation/en_US/junos-pyez/information-products/pathway-pages/junos-pyez-developer-guide.html\n- https://www.juniper.net/documentation/en_US/junos-pyez/topics/reference/general/junos-pyez-tables-op-predefined.html\n\nNAPALM is used as the base framework for fetching and setting configuration here,\nbut many of the operations PortAdmin needs are not directly supported by the NAPALM API,\nso the underlying Juniper PyEZ library is utilized directly in most cases.\n\n\"\"\"\n\nfrom operator import attrgetter\nfrom typing import Any, Optional, Sequence\n\nfrom django.template.loader import get_template\nfrom napalm.base.exceptions import ConnectAuthError, ConnectionException\nfrom jnpr.junos.op.vlan import VlanTable\nfrom jnpr.junos.exception import RpcError\nfrom lxml.etree import ElementTree\n\nfrom nav.napalm import connect as napalm_connect\nfrom nav.enterprise.ids import VENDOR_ID_JUNIPER_NETWORKS_INC\nfrom nav.models import manage\nfrom nav.portadmin.handlers import (\n    ManagementHandler,\n    DeviceNotConfigurableError,\n    AuthenticationError,\n    NoResponseError,\n    ProtocolError,\n    PoeState,\n    POEStateNotSupportedError,\n    POENotSupportedError,\n    XMLParseError,\n)\nfrom nav.junos.nav_views import (\n    EthernetSwitchingInterfaceTable,\n    ElsEthernetSwitchingInterfaceTable,\n    ElsEthernetSwitchingInterfaceTableJunOS20,\n    InterfaceConfigTable,\n    ElsVlanTable,\n)\n\nfrom nav.portadmin.vlan import FantasyVlan\nfrom nav.util import first_true\n\n__all__ = [\"Juniper\"]\n\n# This maps interface oper/admin status values to SNMP values as used in NAV's data\n# model. See IF-MIB::ifOperStatus and IF-MIB::ifAdminStatus from RFC 2863 for details.\nSNMP_STATUS_MAP = {\"up\": 1, \"down\": 2, True: 1, False: 2}\n\n\ndef wrap_unhandled_rpc_errors(func):\n    \"\"\"Decorates RPC-enabled handler function to ensure unhandled RpcErrors are\n    translated into ProtocolErrors, which can be reported nicely to the end user by\n    the PortAdmin framework\n    \"\"\"\n\n    def wrap_rpc_errors(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except RpcError as error:\n            raise ProtocolError(f\"Device raised RpcError: {error.message}\") from error\n\n    return wrap_rpc_errors\n\n\nclass Juniper(ManagementHandler):\n    \"\"\"Juniper specific version of a Napalm PortAdmin handler.\n\n    Juniper switches do things a bit differently from the standard model supported by\n    NAV. VLAN config is put on logical sub-units of the physical ports. SNMP-wise,\n    sub-units are presented as interfaces on a conceptually higher level than their\n    \"parent\" interface. NAV doesn't really understand or care about this unusual\n    relationship between pairs of interfaces - it will only see that the interfaces\n    are somehow related.\n\n    On non-ELS switches, the sub-interfaces are reported in the BRIDGE-MIB and\n    Q-BRIDGE-MIB, causing NAV to view these units as the actual switch ports. On ELS\n    switches, the parent interfaces are reported as the switch ports - yet, VLAN config\n    still belongs on unit 0 when uploading config changes outside of SNMP.\n\n    This implementation will therefore always consider any given switch port\n    reference to be a pair of master/unit interfaces, regardless of whether the\n    reference is to the master or the unit. When building new configuration, it will\n    split configuration options appropriatelt between the master and the unit before\n    uploading and merging config changes using NAPALM/PyEZ.\n    \"\"\"\n\n    VENDOR = VENDOR_ID_JUNIPER_NETWORKS_INC\n    PROTOCOL = manage.ManagementProfile.PROTOCOL_NAPALM\n    POE_ENABLED = PoeState(state=1, name=\"ENABLED\")\n    POE_DISABLED = PoeState(state=2, name=\"DISABLED\")\n    POE_OPTIONS = [POE_ENABLED, POE_DISABLED]\n\n    def __init__(self, netbox: manage.Netbox, **kwargs):\n        super().__init__(netbox, **kwargs)\n        self._device = None\n        self._profile = None\n        self._interfaces = {}\n        self._vlans = None\n        self._is_els = None\n\n    @property\n    def profile(self) -> manage.ManagementProfile:\n        \"\"\"Returns the selected NAPALM profile for this netbox\"\"\"\n        if not self._profile:\n            self._profile = self.netbox.profiles.filter(protocol=self.PROTOCOL).first()\n        return self._profile\n\n    @property\n    def device(self):\n        \"\"\"Opens a device connection or returns an existing one\"\"\"\n        if not self._device:\n            self.raise_if_not_configurable()\n            try:\n                self._device = napalm_connect(self.netbox, self.profile)\n            except ConnectAuthError as err:\n                raise AuthenticationError(\"Authentication failed\") from err\n            except ConnectionException as err:\n                raise NoResponseError(\"Device did not respond within timeout\") from err\n\n        return self._device\n\n    @property\n    def is_els(self) -> bool:\n        \"\"\"Returns True if this is an ELS config style Juniper switch\"\"\"\n        if self._is_els is None:\n            self._is_els = self.device.device.facts.get(\"switch_style\") == \"VLAN_L2NG\"\n        return self._is_els\n\n    @property\n    def _els_ethernet_switching_interface_table(self):\n        return (\n            ElsEthernetSwitchingInterfaceTable\n            if self.junos_major_version < 20\n            else ElsEthernetSwitchingInterfaceTableJunOS20\n        )\n\n    @property\n    def junos_major_version(self) -> int:\n        \"\"\"Returns the major JunOS version running on the switch\"\"\"\n        version = self.device.device.facts.get(\"version\")\n        if version:\n            major, _ = version.split(\".\", maxsplit=1)\n            return int(major)\n\n    def get_interfaces(\n        self, interfaces: Sequence[manage.Interface] = None\n    ) -> list[dict[str, Any]]:\n        vlan_map = self._get_untagged_vlans()\n        if interfaces and len(interfaces) == 1:\n            # we can use a filter if only a single interface was specified\n            interfaces = self.get_interface_information(interfaces[0].ifname)\n        else:\n            interfaces = self.get_interface_information()\n\n        def _convert(name, ifc):\n            oper = ifc.get(\"is_up\")\n            admin = ifc.get(\"is_enabled\")\n\n            # fake a description from master interface if necessary\n            descr = ifc[\"description\"]\n            if not descr and is_unit(name):\n                master, _ = split_master_unit(name)\n                if master in interfaces:\n                    descr = interfaces[master][\"description\"]\n\n            return {\n                \"name\": name,\n                \"description\": descr,\n                \"oper\": SNMP_STATUS_MAP[oper],\n                \"admin\": SNMP_STATUS_MAP[admin],\n                \"vlan\": vlan_map.get(name),\n            }\n\n        return [_convert(name, ifc) for name, ifc in interfaces.items()]\n\n    def _get_untagged_vlans(self):\n        if not self.is_els:\n            # This table gets us tagged/untagged VLANs for each interface\n            switching = EthernetSwitchingInterfaceTable(self.device.device)\n            switching.get()\n\n            return {\n                port.ifname: vlan.tag\n                for port in switching\n                for vlan in port.vlans\n                if not vlan.tagged\n            }\n        else:\n            switching = self._els_ethernet_switching_interface_table(self.device.device)\n            switching.get()\n            return {port.ifname: port.tag for port in switching if not port.tagged}\n\n    def get_netbox_vlans(self) -> list[FantasyVlan]:\n        vlan_objects = manage.Vlan.objects.filter(\n            swport_vlans__interface__netbox=self.netbox\n        ).distinct()\n\n        def _make_vlan(vlan):\n            tag = int(vlan.tag)\n            try:\n                vlan_object = vlan_objects.get(vlan=tag)\n            except (manage.Vlan.DoesNotExist, manage.Vlan.MultipleObjectsReturned):\n                return FantasyVlan(tag, netident=vlan.name)\n            else:\n                return FantasyVlan(\n                    tag, netident=vlan_object.net_ident, descr=vlan_object.description\n                )\n\n        result = {\n            _make_vlan(vlan)\n            for vlan in self.vlans\n            if isinstance(vlan.tag, int) or vlan.tag.isdigit()\n        }\n        return sorted(result, key=attrgetter(\"vlan\"))\n\n    def get_netbox_vlan_tags(self) -> list[int]:\n        return [vlan.tag for vlan in self.vlans]\n\n    def get_interface_native_vlan(self, interface: manage.Interface) -> int:\n        untagged, _ = self.get_native_and_trunked_vlans(interface)\n        return untagged\n\n    def set_native_vlan(self, interface: manage.Interface, vlan: int):\n        raise NotImplementedError  # This is in fact never used on Juniper!\n\n    def get_native_and_trunked_vlans(self, interface) -> tuple[int, list[int]]:\n        if not self.is_els:\n            switching = EthernetSwitchingInterfaceTable(self.device.device)\n            switching.get(interface_name=interface.ifname)\n            vlans = switching[interface.ifname].vlans\n        else:\n            switching = self._els_ethernet_switching_interface_table(self.device.device)\n            switching.get(interface_name=interface.ifname)\n            vlans = [vlan for vlan in switching if vlan.tagged is not None]\n\n        tagged = [vlan.tag for vlan in vlans if vlan.tagged]\n        untagged = first_true(vlans, pred=lambda vlan: not vlan.tagged)\n        return (untagged.tag if untagged else None), tagged\n\n    @wrap_unhandled_rpc_errors\n    def set_interface_description(self, interface: manage.Interface, description: str):\n        # never set description on units but on master interface\n        master, _ = split_master_unit(interface.ifname)\n        context = {\n            \"is_els\": self.is_els,\n            \"ifname\": master,\n            \"description\": description.replace('\"', r\"\\\"\"),  # escape quotes\n        }\n        template = get_template(\"portadmin/junos-set-interface-description.djt\")\n        config = template.render(context)\n        self.device.load_merge_candidate(config=config)\n\n    @wrap_unhandled_rpc_errors\n    def set_vlan(self, interface: manage.Interface, vlan: int):\n        self.set_access(interface, vlan)\n\n    @wrap_unhandled_rpc_errors\n    def set_access(self, interface: manage.Interface, access_vlan: int):\n        master, unit = split_master_unit(interface.ifname)\n        current = InterfaceConfigTable(self.device.device).get(master)[master]\n        template = get_template(\"portadmin/junos-set-access-port-vlan.djt\")\n        context = {\n            \"is_els\": self.is_els,\n            \"delete_native_vlan\": bool(current[\"native_vlan\"]),\n            \"ifname\": master,\n            \"unit\": unit,\n            \"members\": access_vlan,\n        }\n        config = template.render(context)\n        self.device.load_merge_candidate(config=config)\n        self._save_access_interface(interface, access_vlan)\n\n    @staticmethod\n    def _save_access_interface(interface: manage.Interface, access_vlan: int):\n        \"\"\"Updates the Interface entry in the database with access config\"\"\"\n        interface.trunk = False\n        interface.vlan = access_vlan\n        try:\n            allowedvlans = interface.swport_allowed_vlan\n            allowedvlans.save()\n        except manage.SwPortAllowedVlan.DoesNotExist:\n            pass\n        interface.save()\n\n    @wrap_unhandled_rpc_errors\n    def set_trunk(\n        self, interface: manage.Interface, native_vlan: int, trunk_vlans: Sequence[int]\n    ):\n        master, unit = split_master_unit(interface.ifname)\n        template = get_template(\"portadmin/junos-set-trunk-port-vlans.djt\")\n        members = \" \".join(str(tag) for tag in trunk_vlans)\n        context = {\n            \"is_els\": self.is_els,\n            \"ifname\": master,\n            \"unit\": unit,\n            \"native_vlan\": native_vlan,\n            \"members\": members,\n        }\n        config = template.render(context)\n        self.device.load_merge_candidate(config=config)\n        self._save_trunk_interface(interface, native_vlan, trunk_vlans)\n\n    @staticmethod\n    def _save_trunk_interface(\n        interface: manage.Interface, native_vlan: int, trunk_vlans: Sequence[int]\n    ):\n        \"\"\"Updates the Interface entry in the database with trunk config\"\"\"\n        interface.trunk = True\n        interface.vlan = native_vlan\n        allowedvlan, _ = manage.SwPortAllowedVlan.objects.get_or_create(\n            interface=interface\n        )\n        allowedvlan.set_allowed_vlans(trunk_vlans)\n        allowedvlan.save()\n        interface.save()\n\n    def get_interface_admin_status(self, interface: manage.Interface) -> int:\n        info = self.get_interface_information(interface.ifname)\n        ifc = info[interface.ifname]\n        admin = ifc.get(\"is_enabled\")\n        if admin and not isinstance(admin, bool) and iter(admin):\n            admin = admin[0]  # sometimes, crazy multiple values are returned\n\n        return SNMP_STATUS_MAP[admin]\n\n    def cycle_interfaces(\n        self,\n        interfaces: Sequence[manage.Interface],\n        wait: float = 0,\n        commit: bool = False,\n    ):\n        # There is no need for waiting on Juniper; there is a need to commit,\n        # and that operation will likely delay at least as much as the wait would have\n        return super().cycle_interfaces(interfaces=interfaces, wait=0, commit=True)\n\n    @wrap_unhandled_rpc_errors\n    def set_interface_down(self, interface: manage.Interface):\n        # does not set oper on logical units, only on physical masters\n        master, _unit = split_master_unit(interface.ifname)\n        template = get_template(\"portadmin/junos-disable-interface.djt\")\n        config = template.render({\"ifname\": master, \"disable\": True})\n        self.device.load_merge_candidate(config=config)\n\n        self._save_interface_oper(interface, interface.OPER_DOWN)\n\n    @wrap_unhandled_rpc_errors\n    def set_interface_up(self, interface: manage.Interface):\n        # does not set oper on logical units, only on physical masters\n        master, _unit = split_master_unit(interface.ifname)\n        template = get_template(\"portadmin/junos-disable-interface.djt\")\n        config = template.render({\"ifname\": master, \"disable\": False})\n        self.device.load_merge_candidate(config=config)\n\n        self._save_interface_oper(interface, interface.OPER_UP)\n\n    @staticmethod\n    def _save_interface_oper(interface: manage.Interface, ifoperstatus: int):\n        master, unit = split_master_unit(interface.ifname)\n        interface.ifoperstatus = ifoperstatus\n        if unit:  # this was a logical unit, also set the state of the master ifc\n            master_interface = manage.Interface.objects.filter(\n                netbox=interface.netbox, ifname=master\n            )\n            master_interface.update(ifoperstatus=ifoperstatus)\n\n    @wrap_unhandled_rpc_errors\n    def commit_configuration(self):\n        # Only take our sweet time to commit if there are pending changes\n        if self.device.compare_config():\n            self.device.commit_config(message=\"Committed from NAV/PortAdmin\")\n\n    @property\n    def vlans(self):\n        \"\"\"A cached representation of Juniper VLAN table\"\"\"\n        if not self._vlans:\n            self._vlans = (\n                ElsVlanTable(self.device.device)\n                if self.is_els\n                else VlanTable(self.device.device)\n            )\n            self._vlans.get()\n        return self._vlans\n\n    def get_interface_information(self, interface_name: str = None):\n        \"\"\"Retrieves operational information about ethernet interfaces.\n\n        Getting the full interface table can be slow, especially on stacked switches,\n        so this method will use internal caching.\n\n        :param interface_name: Optional interface name to fetch. If specified,\n                               only data for matching interface names are retrieved\n                               (however, the result may contain data for more interfaces\n                               if old data is in the cache).\n        \"\"\"\n        # Unable to get PyEZ tables to set a proper key if matching both physical and\n        # logical interfaces in a single table, so doing this rpc manually\n        if not self._interfaces or (\n            interface_name and interface_name not in self._interfaces\n        ):\n            tree = self.device.device.rpc.get_interface_information(\n                terse=True,\n                interface_name=interface_name if interface_name else \"[afgxe][et]-*\",\n            )\n            self._interfaces.update(self._parse_interface_tree(tree))\n        return self._interfaces\n\n    @staticmethod\n    def _parse_interface_tree(tree):\n        def findtext(elem, text):\n            found = elem.findtext(text)\n            return found.strip() if found else None\n\n        return {\n            findtext(elem, \"name\"): {\n                \"name\": findtext(elem, \"name\"),\n                \"description\": findtext(elem, \"description\"),\n                \"is_up\": findtext(elem, \"oper-status\") == \"up\",\n                \"is_enabled\": findtext(elem, \"admin-status\") == \"up\",\n            }\n            for elem in tree.xpath(\n                \"physical-interface | physical-interface/logical-interface\"\n            )\n        }\n\n    def raise_if_not_configurable(self):\n        if self.netbox.type.get_enterprise_id() != VENDOR_ID_JUNIPER_NETWORKS_INC:\n            raise DeviceNotConfigurableError(\"Can only configure JunOS devices\")\n        if not self.profile:\n            raise DeviceNotConfigurableError(\"Device has no NAPALM profile\")\n\n    def get_poe_state_options(self) -> Sequence[PoeState]:\n        \"\"\"Returns the available options for enabling/disabling PoE on this netbox\"\"\"\n        return self.POE_OPTIONS\n\n    @wrap_unhandled_rpc_errors\n    def set_poe_state(self, interface: manage.Interface, state: PoeState):\n        \"\"\"Set state for enabling/disabling PoE on this interface.\n        Available options should be retrieved using `get_poe_state_options`\n        \"\"\"\n        if not isinstance(state, PoeState):\n            raise TypeError(\"state must be a PoeState object\")\n        if state == self.POE_ENABLED:\n            template = get_template(\"portadmin/junos-enable-poe.djt\")\n        elif state == self.POE_DISABLED:\n            template = get_template(\"portadmin/junos-disable-poe.djt\")\n        else:\n            raise POEStateNotSupportedError(f\"state {state} is not a valid state\")\n        master, _ = split_master_unit(interface.ifname)\n        config = template.render({\"ifname\": master})\n        self.device.load_merge_candidate(config=config)\n\n    def get_poe_states(\n        self, interfaces: Optional[Sequence[manage.Interface]] = None\n    ) -> dict[str, Optional[PoeState]]:\n        \"\"\"Retrieves current PoE state for interfaces on this device.\n\n        :param interfaces: Optional sequence of interfaces to filter for, as fetching\n                           data for all interfaces may be a waste of time if only a\n                           single interface is needed. If this parameter is omitted,\n                           the default behavior is to filter on all Interface objects\n                           registered for this device.\n        :returns: A dict mapping interfaces to their discovered PoE state.\n                  The key matches the `ifname` attribute for the related\n                  Interface object.\n                  The value will be None if the interface does not support PoE.\n        \"\"\"\n        if not interfaces:\n            if self.netbox.interfaces:\n                interfaces = self.netbox.interfaces\n            else:\n                return {}\n        if len(interfaces) == 1:\n            interface = interfaces[0]\n            try:\n                state = self._get_single_poe_state(interface)\n            except POENotSupportedError:\n                state = None\n            return {interface.ifname: state}\n        else:\n            return self._get_poe_states_bulk(interfaces)\n\n    def _get_single_poe_state(self, interface: manage.Interface) -> PoeState:\n        tree = self._get_poe_interface_information(ifname=interface.ifname)\n        matching_elements = tree.xpath(\n            \"//poe/interface-information-detail/interface-enabled-detail\"\n        )\n        # Interfaces that do not support PoE will not have this element\n        if not matching_elements:\n            raise POENotSupportedError(\n                f\"Interface {interface.ifname} does not support PoE\"\n            )\n        if len(matching_elements) != 1:\n            raise XMLParseError(\n                f\"Expected 1 matching element in xml response, \"\n                f\"{len(matching_elements)} found\"\n            )\n        ifenabled = matching_elements[0].text.lower()\n        return self._poe_string_to_state(ifenabled)\n\n    def _get_poe_states_bulk(\n        self, interfaces: Sequence[manage.Interface]\n    ) -> dict[str, Optional[PoeState]]:\n        tree = self._get_all_poe_interface_information()\n        interface_information_elements = tree.findall(\".//interface-information\")\n        ifname_to_state_dict = {}\n        for element in interface_information_elements:\n            ifname = element.findall(\".//interface-name\")[0].text.strip().lower()\n            ifenabled = element.findall(\".//interface-enabled\")[0].text.strip().lower()\n            ifname_to_state_dict[ifname] = self._poe_string_to_state(ifenabled)\n        ifindex_to_state_dict = {\n            interface.ifname: ifname_to_state_dict.get(interface.ifname.lower())\n            for interface in interfaces\n        }\n        return ifindex_to_state_dict\n\n    @wrap_unhandled_rpc_errors\n    def _get_all_poe_interface_information(self) -> ElementTree:\n        return self.device.device.rpc.get_poe_interface_information()\n\n    @wrap_unhandled_rpc_errors\n    def _get_poe_interface_information(self, ifname: str) -> ElementTree:\n        return self.device.device.rpc.get_poe_interface_information(ifname=ifname)\n\n    def _poe_string_to_state(self, state_str: str) -> PoeState:\n        \"\"\"Converts from internal juniper state names to\n        corresponding PoeState objects\n        \"\"\"\n        state_cleaned = state_str.strip().lower()\n        if state_cleaned == \"enabled\":\n            return self.POE_ENABLED\n        elif state_cleaned == \"disabled\":\n            return self.POE_DISABLED\n        else:\n            raise POEStateNotSupportedError(f\"Unknown PoE state {state_str}\")\n\n    # FIXME Implement dot1x fetcher methods\n    # dot1x authentication configuration fetchers aren't implemented yet, for lack\n    # of configured devices to test on\n    # def is_dot1x_enabled(self, interface: manage.Interface) -> bool:\n    # def get_dot1x_enabled_interfaces(self) -> dict[str, bool]:\n    # def is_port_access_control_enabled(self) -> bool:\n\n    # These are not relevant for Juniper\n    get_cisco_voice_vlans = None\n    set_cisco_voice_vlan = None\n    enable_cisco_cdp = None\n    disable_cisco_voice_vlan = None\n    disable_cisco_cdp = None\n\n\n# Helper functions\n\n\ndef is_unit(name: str) -> bool:\n    \"\"\"Returns True if name is the name of an interface sub-unit\"\"\"\n    names = name.split(\".\")\n    return len(names) == 2\n\n\ndef split_master_unit(name: str) -> tuple[str, str]:\n    \"\"\"Splits an interface name into master and unit parts. If the name doesn't\n    already refer to a unit, unit 0 will be assumed.\n    \"\"\"\n    names = name.split(\".\")\n    if len(names) == 2:\n        return names\n    else:\n        return name, \"0\"\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-disable-interface.djt",
    "content": "{% if disable %}\nset interfaces {{ ifname }} disable\n{% else %}\ndelete interfaces {{ ifname }} disable\n{% endif %}\n\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-disable-poe.djt",
    "content": "set poe interface {{ ifname }} disable\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-enable-poe.djt",
    "content": "delete poe interface {{ ifname }} disable\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-set-access-port-vlan.djt",
    "content": "{% if is_els %}\n    {% if delete_native_vlan %}\ndelete interfaces {{ ifname }} native-vlan-id\n    {% endif %}\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching interface-mode access\n\n{% else %}\n    {% if delete_native_vlan %}\ndelete interfaces {{ ifname }} unit {{ unit }} family ethernet-switching native-vlan-id\n    {% endif %}\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching port-mode access\n{% endif %}\n\ndelete interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members [ {{ members }} ]\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-set-interface-description.djt",
    "content": "{% autoescape off %}\n{% if description %}\nset interfaces {{ ifname }} description \"{{ description }}\"\n{% else %}\ndelete interfaces {{ ifname }} description\n{% endif %}\n{% endautoescape %}\n"
  },
  {
    "path": "python/nav/portadmin/napalm/templates/portadmin/junos-set-trunk-port-vlans.djt",
    "content": "{% if is_els %}\n\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching interface-mode trunk\n    {% if native_vlan %}\n        {# DELETE NATIVE VLAN IF NECESSARY? #}\nset interfaces {{ ifname }} native-vlan-id {{ native_vlan }}\ndelete interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members [ {{ native_vlan }} {{ members }} ]\n    {% else %}\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members [ {{ members }} ]\n    {% endif %}\n\n{% else %}\n\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching port-mode trunk\n    {% if native_vlan %}\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching native-vlan-id {{ native_vlan }}\n    {% endif %}\ndelete interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members\nset interfaces {{ ifname }} unit {{ unit }} family ethernet-switching vlan members [ {{ members }} ]\n\n{% endif %}\n\n"
  },
  {
    "path": "python/nav/portadmin/snmp/__init__.py",
    "content": "#\n# Copyright (C) 2020 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This package contains generic and vendor-specific SNMP handlers for PortAdmin\"\"\"\n"
  },
  {
    "path": "python/nav/portadmin/snmp/base.py",
    "content": "#\n# Copyright (C) 2011-2015, 2020, 2021 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom functools import wraps\nfrom operator import attrgetter\nimport logging\nfrom typing import Any, Sequence\n\nfrom nav.Snmp.profile import get_snmp_session_for_profile\nfrom nav.Snmp import safestring, OID\nfrom nav.Snmp.errors import (\n    UnsupportedSnmpVersionError,\n    SnmpError,\n    NoSuchObjectError,\n    TimeOutException,\n)\nfrom nav.bitvector import BitVector\nfrom nav.models import manage\n\nfrom nav.models.manage import Vlan, SwPortAllowedVlan, Interface\nfrom nav.portadmin.handlers import (\n    ManagementError,\n    ManagementHandler,\n    DeviceNotConfigurableError,\n    NoResponseError,\n    ProtocolError,\n)\nfrom nav.portadmin.vlan import FantasyVlan\nfrom nav.smidumps import get_mib\n\n\n_logger = logging.getLogger(__name__)\n\n\ndef translate_protocol_errors(func):\n    \"\"\"Decorator that translates SNMPErrors into PortAdmin ProtocolErrors.\n\n    The PortAdmin API will handle ProtocolErrors gracefully, but other exceptions\n    will bleed through and be handled by Django's 500 handler.\n    \"\"\"\n\n    @wraps(func)\n    def _wrapper(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except SnmpError as error:\n            logmsg = \"An SnmpError was raised:\"\n            if args and isinstance(args[0], SNMPHandler):\n                sysname = args[0].netbox.sysname\n                logmsg = f\"{sysname}: {logmsg}\"\n            _logger.exception(logmsg)\n            raise ProtocolError(error)\n\n    return _wrapper\n\n\nclass NoReadWriteManagementProfileError(ManagementError):\n    \"\"\"No read-write management profile set on switch\"\"\"\n\n    pass\n\n\nclass NoReadOnlyManagementProfileError(ManagementError):\n    \"\"\"No read-only management profile set on switch\"\"\"\n\n    pass\n\n\nclass InvalidManagementProfileError(ManagementError):\n    \"\"\"Some attribute of management profile is incorrectly set\"\"\"\n\n    pass\n\n\nclass SNMPHandler(ManagementHandler):\n    \"\"\"Implements PortAdmin management functions for SNMP-enabled switches\"\"\"\n\n    QBRIDGENODES = get_mib('Q-BRIDGE-MIB')['nodes']\n\n    SYSOBJECTID = '.1.3.6.1.2.1.1.2.0'\n    SYSLOCATION = '1.3.6.1.2.1.1.6.0'\n    IF_ALIAS_OID = '1.3.6.1.2.1.31.1.1.1.18'  # From IF-MIB\n    IF_NAME_OID = '1.3.6.1.2.1.31.1.1.1.1'\n    IF_ADMIN_STATUS = '1.3.6.1.2.1.2.2.1.7'\n    IF_ADMIN_STATUS_UP = 1\n    IF_ADMIN_STATUS_DOWN = 2\n    IF_OPER_STATUS = '1.3.6.1.2.1.2.2.1.8'\n\n    # The VLAN ID assigned to untagged frames\n    VlAN_OID = QBRIDGENODES['dot1qPvid']['oid']\n\n    # List of all available vlans on this netbox as by the command \"show vlans\"\n    VLAN_ROW_STATUS = QBRIDGENODES['dot1qVlanStaticRowStatus']['oid']\n\n    # List of all ports on a vlan as a hexstring (including native vlan)\n    VLAN_EGRESS_PORTS = QBRIDGENODES['dot1qVlanStaticEgressPorts']['oid']\n\n    # The .0 is the timefilter that we set to 0 to (hopefully) deactivate the filter\n    CURRENT_VLAN_EGRESS_PORTS = (\n        QBRIDGENODES['dot1qVlanCurrentEgressPorts']['oid'] + '.0'\n    )\n\n    # dot1x\n\n    # dot1xPaeSystemAuthControl: The administrative enable/ disable state for\n    # Port Access Control in a System.\n    dot1xPaeSystemAuthControl = '1.0.8802.1.1.1.1.1.1.0'\n\n    def __init__(self, netbox, **kwargs):\n        super().__init__(netbox, **kwargs)\n        self.read_only_handle = None\n        self.read_write_handle = None\n        self.available_vlans = None\n        self.timeout = kwargs.get('timeout', 3)\n        self.retries = kwargs.get('retries', 3)\n\n    def _bulkwalk(self, oid: str):\n        \"\"\"Performs a GETBULK walk operation on `oid`, downgrading to a regular\n        GETNEXT-based walk if the active SNMP version doesn't support the GETBULK\n        operation.\n\n        \"\"\"\n        handle = self._get_read_only_handle()\n        result = []\n        try:\n            result = handle.bulkwalk(oid)\n        except UnsupportedSnmpVersionError as unsup_ex:\n            _logger.info(\"_bulkwalk: UnsupportedSnmpVersionError = %s\", unsup_ex)\n            try:\n                result = handle.walk(oid)\n            except SnmpError as ex:\n                _logger.error(\"_bulkwalk: Exception = %s\", ex)\n        except TimeOutException as error:\n            raise NoResponseError(\"Timed out\") from error\n        return result\n\n    def _jog(self, oid):\n        \"\"\"Do a jog\"\"\"\n        handle = self._get_read_only_handle()\n        try:\n            return handle.jog(oid)\n        except SnmpError as _error:\n            return []\n\n    @staticmethod\n    def _get_legal_if_index(if_index):\n        \"\"\"Check if the given index is a legal interface-index.\"\"\"\n        return str(int(if_index))\n\n    def _get_query(self, oid, if_index):\n        \"\"\"Concat given oid and interface-index.\"\"\"\n        return oid + (\".\" + self._get_legal_if_index(if_index))\n\n    def _get_read_only_handle(self):\n        \"\"\"Get a read only SNMP-handle.\"\"\"\n        if self.read_only_handle is None:\n            profile = self.netbox.get_preferred_snmp_management_profile()\n\n            if not profile:\n                raise NoReadOnlyManagementProfileError\n\n            self.read_only_handle = get_snmp_session_for_profile(profile)(\n                host=self.netbox.ip,\n                retries=self.retries,\n                timeout=self.timeout,\n            )\n        return self.read_only_handle\n\n    def _query_netbox(self, oid, if_index):\n        \"\"\"Query the given interface.\"\"\"\n        handle = self._get_read_only_handle()\n        result = None\n        try:\n            result = handle.get(self._get_query(oid, if_index))\n        except NoSuchObjectError as no_such_ex:\n            _logger.debug(\"_query_netbox: NoSuchObjectError = %s\", no_such_ex)\n        except TimeoutError as error:\n            raise NoResponseError(\"Timed out\") from error\n        except SnmpError as error:\n            raise ProtocolError(\"SNMP error\") from error\n        return result\n\n    def _get_read_write_handle(self):\n        \"\"\"Get a read and write SNMP-handle.\n\n        :rtype: nav.Snmp.Snmp\n        \"\"\"\n        if self.read_write_handle is None:\n            profile = self.netbox.get_preferred_snmp_management_profile(\n                require_write=True\n            )\n            self.read_write_handle = get_snmp_session_for_profile(profile)(\n                host=self.netbox.ip,\n                retries=self.retries,\n                timeout=self.timeout,\n            )\n        return self.read_write_handle\n\n    def _set_netbox_value(self, oid, if_index, value_type, value):\n        \"\"\"Set a value for the given interface.\"\"\"\n        handle = self._get_read_write_handle()\n        return handle.set(self._get_query(oid, if_index), value_type, value)\n\n    @staticmethod\n    def _chunkify(bitvector, chunks):\n        \"\"\"Divide bitvector into chunks number of chunks\n\n        :returns a new bitvector instance with the chunk\n\n        \"\"\"\n        hexes = bitvector.to_hex()\n        chunksize = len(bitvector.to_hex()) // chunks\n        for i in range(0, len(hexes), chunksize):\n            yield BitVector.from_hex(hexes[i : i + chunksize])\n\n    def test_read(self):\n        \"\"\"Test if SNMP read works\"\"\"\n        handle = self._get_read_only_handle()\n        try:\n            handle.get(self.SYSOBJECTID)\n            return True\n        except SnmpError:\n            return False\n\n    def test_write(self):\n        \"\"\"Test if SNMP write works\"\"\"\n        handle = self._get_read_write_handle()\n        try:\n            value = handle.get(self.SYSLOCATION)\n            handle.set(self.SYSLOCATION, 's', value)\n            return True\n        except SnmpError:\n            return False\n\n    @translate_protocol_errors\n    def get_interfaces(\n        self, interfaces: Sequence[manage.Interface] = None\n    ) -> list[dict[str, Any]]:\n        names = self._get_interface_names()\n        aliases = self._get_all_ifaliases()\n        oper = dict(self._get_all_interfaces_oper_status())\n        admin = dict(self._get_all_interfaces_admin_status())\n        vlans = self._get_all_interfaces_vlan()\n\n        result = [\n            {\n                \"snmp-index\": index,\n                \"name\": names.get(index),\n                \"description\": aliases.get(index),\n                \"oper\": oper.get(index),\n                \"admin\": admin.get(index),\n                \"vlan\": vlans.get(index),\n            }\n            for index in names\n        ]\n        return result\n\n    def _get_interface_names(self) -> dict[int, str]:\n        \"\"\"Returns a mapping of interface indexes to ifName values\"\"\"\n        return {\n            OID(index)[-1]: safestring(value)\n            for index, value in self._bulkwalk(self.IF_NAME_OID)\n        }\n\n    def _get_all_ifaliases(self):\n        \"\"\"Get all aliases for all interfaces.\n\n        :returns: A dict describing {ifIndex: ifAlias}\n        \"\"\"\n        return {\n            OID(oid)[-1]: safestring(value)\n            for oid, value in self._bulkwalk(self.IF_ALIAS_OID)\n        }\n\n    @translate_protocol_errors\n    def set_interface_description(self, interface, description):\n        if isinstance(description, str):\n            description = description.encode(\"utf8\")\n        return self._set_netbox_value(\n            self.IF_ALIAS_OID, interface.ifindex, \"s\", description\n        )\n\n    @translate_protocol_errors\n    def get_interface_native_vlan(self, interface):\n        return self._query_netbox(self.VlAN_OID, interface.baseport)\n\n    def _get_all_interfaces_vlan(self):\n        \"\"\"Retrieves the untagged VLAN value for every interface.\n\n        :returns: A dict describing {ifIndex: VLAN_TAG}\n        \"\"\"\n        return {OID(index)[-1]: value for index, value in self._bulkwalk(self.VlAN_OID)}\n\n    @staticmethod\n    def _compute_octet_string(hexstring, port, action='enable'):\n        \"\"\"\n        hexstring: the returnvalue of the snmpquery\n        port: the number of the port to add\n        \"\"\"\n        bit = BitVector(hexstring)\n        # Add port to string\n        port -= 1\n        if action == 'enable':\n            bit[port] = 1\n        else:\n            bit[port] = 0\n        return bit.to_bytes()\n\n    @translate_protocol_errors\n    def set_vlan(self, interface, vlan):\n        base_port = interface.baseport\n        try:\n            vlan = int(vlan)\n        except ValueError:\n            raise TypeError('Not a valid vlan %s' % vlan)\n        # Fetch current vlan\n        fromvlan = self.get_interface_native_vlan(interface)\n        # fromvlan and vlan is the same, there's nothing to do\n        if fromvlan == vlan:\n            _logger.debug('fromvlan and vlan is the same - skip')\n            return None\n        # Add port to vlan. This makes the port active on both old and new vlan\n        _logger.debug('Enabling port %s on vlan %s', base_port, vlan)\n        self._set_netbox_value(self.VlAN_OID, base_port, \"u\", vlan)\n        # Remove port from list of ports on old vlan\n        hexstring = self._query_netbox(self.VLAN_EGRESS_PORTS, fromvlan)\n        modified_hexport = self._compute_octet_string(hexstring, base_port, 'disable')\n        _logger.debug('Disabling port %s on old vlan %s', base_port, fromvlan)\n        return self._set_netbox_value(\n            self.VLAN_EGRESS_PORTS, fromvlan, 's', modified_hexport\n        )\n\n    @translate_protocol_errors\n    def set_native_vlan(self, interface, vlan):\n        self.set_vlan(interface, vlan)\n\n    @translate_protocol_errors\n    def set_interface_up(self, interface):\n        return self._set_netbox_value(\n            self.IF_ADMIN_STATUS, interface.ifindex, \"i\", self.IF_ADMIN_STATUS_UP\n        )\n\n    @translate_protocol_errors\n    def set_interface_down(self, interface):\n        return self._set_netbox_value(\n            self.IF_ADMIN_STATUS, interface.ifindex, \"i\", self.IF_ADMIN_STATUS_DOWN\n        )\n\n    def commit_configuration(self):\n        pass\n\n    @translate_protocol_errors\n    def get_interface_admin_status(self, interface):\n        return self._query_netbox(self.IF_ADMIN_STATUS, interface.ifindex)\n\n    def _get_if_stats(self, stats):\n        \"\"\"Make a list with tuples.  Each tuple contain\n        interface-index and corresponding status-value\"\"\"\n        available_stats = []\n        for if_index, stat in stats:\n            if_index = OID(if_index)[-1]\n            if isinstance(if_index, int):\n                available_stats.append((if_index, stat))\n        return available_stats\n\n    def _get_all_interfaces_admin_status(self):\n        \"\"\"Walk all ports and get their administration status.\"\"\"\n        if_admin_stats = self._bulkwalk(self.IF_ADMIN_STATUS)\n        return self._get_if_stats(if_admin_stats)\n\n    def _get_all_interfaces_oper_status(self):\n        \"\"\"Walk all ports and get their operational status.\"\"\"\n        if_oper_stats = self._bulkwalk(self.IF_OPER_STATUS)\n        return self._get_if_stats(if_oper_stats)\n\n    @translate_protocol_errors\n    def get_netbox_vlans(self):\n        numerical_vlans = self.get_netbox_vlan_tags()\n        vlan_objects = Vlan.objects.filter(\n            swport_vlans__interface__netbox=self.netbox\n        ).distinct()\n        vlans = []\n        for numerical_vlan in numerical_vlans:\n            try:\n                vlan_object = vlan_objects.get(vlan=numerical_vlan)\n            except (Vlan.DoesNotExist, Vlan.MultipleObjectsReturned):\n                fantasy_vlan = FantasyVlan(numerical_vlan)\n            else:\n                fantasy_vlan = FantasyVlan(\n                    numerical_vlan,\n                    netident=vlan_object.net_ident,\n                    descr=vlan_object.description,\n                )\n            vlans.append(fantasy_vlan)\n\n        return sorted(list(set(vlans)), key=attrgetter('vlan'))\n\n    @translate_protocol_errors\n    def get_netbox_vlan_tags(self):\n        if self.available_vlans is None:\n            self.available_vlans = [\n                OID(oid)[-1]\n                for oid, status in self._bulkwalk(self.VLAN_ROW_STATUS)\n                if status == 1\n            ]\n        return self.available_vlans\n\n    @translate_protocol_errors\n    def get_native_and_trunked_vlans(self, interface):\n        native_vlan = self.get_interface_native_vlan(interface)\n\n        bitvector_index = interface.baseport - 1\n        vlans = []\n        for vlan in self.get_netbox_vlan_tags():\n            if vlan == native_vlan:\n                continue\n            octet_string = (\n                self._query_netbox(self.CURRENT_VLAN_EGRESS_PORTS, vlan) or b''\n            )\n            bitvector = BitVector(octet_string)\n\n            try:\n                if bitvector[bitvector_index]:\n                    vlans.append(vlan)\n            except IndexError:\n                _logger.error('Baseport index was out of bounds for StaticEgressPorts')\n\n        return native_vlan, vlans\n\n    def _get_egress_interfaces_as_bitvector(self, vlan):\n        octet_string = self._query_netbox(self.CURRENT_VLAN_EGRESS_PORTS, vlan)\n        return BitVector(octet_string)\n\n    @translate_protocol_errors\n    def set_trunk_vlans(self, interface: Interface, vlans: Sequence[int]):\n        \"\"\"Trunk vlans on this interface.\n\n        :param interface: The interface to set to trunk mode.\n        :param vlans: The list of VLAN tags to allow on this trunk.\n        \"\"\"\n        # This procedure is somewhat complex using the Q-BRIDGE-MIB. For each\n        # configured VLAN there is a list of ports (encoded as an octet string where\n        # each bit represents a port) with an active egress on this VLAN, so making\n        # this configuration change on a single port means updating the egress port\n        # list on every VLAN to remove from the port, and for every VLAN to add.\n        #\n        # Note that the egress port list contains both tagged and untagged/native vlans.\n        #\n        base_port = interface.baseport\n        native_vlan = self.get_interface_native_vlan(interface)\n        bitvector_index = base_port - 1\n\n        _logger.debug(\n            'base_port: %s, native_vlan: %s, trunk_vlans: %s',\n            base_port,\n            native_vlan,\n            vlans,\n        )\n\n        vlans = [int(vlan) for vlan in vlans]\n\n        for available_vlan in self.get_netbox_vlan_tags():\n            if native_vlan == available_vlan:\n                _logger.debug(\n                    'native vlan (%s) == available vlan (%s) - skip',\n                    native_vlan,\n                    available_vlan,\n                )\n                continue\n\n            bitvector = self._get_egress_interfaces_as_bitvector(available_vlan)\n\n            original_value = bitvector[bitvector_index]\n            if available_vlan in vlans:\n                bitvector[bitvector_index] = 1\n            else:\n                bitvector[bitvector_index] = 0\n\n            if bitvector[bitvector_index] != original_value:\n                _logger.debug(\n                    'vlan %(vlan)s: state for port %(port)s changed',\n                    {'port': base_port, 'vlan': available_vlan},\n                )\n                self._set_egress_interfaces(available_vlan, bitvector)\n\n    def _set_egress_interfaces(self, vlan, bitvector):\n        try:\n            _logger.debug(\n                'Setting egress ports for vlan %s, set bits: %s',\n                vlan,\n                bitvector.get_set_bits(),\n            )\n            self._set_netbox_value(\n                self.VLAN_EGRESS_PORTS, vlan, 's', bitvector.to_bytes()\n            )\n        except SnmpError as error:\n            _logger.error(\"Error setting egress ports: %s\", error)\n            raise error\n\n    @translate_protocol_errors\n    def set_access(self, interface, access_vlan):\n        _logger.debug(\n            'Setting access mode vlan %s on interface %s', access_vlan, interface\n        )\n        self.set_vlan(interface, access_vlan)\n        self.set_trunk_vlans(interface, [])\n        interface.vlan = access_vlan\n        interface.trunk = False\n        interface.save()\n\n    @translate_protocol_errors\n    def set_trunk(self, interface, native_vlan, trunk_vlans):\n        self.set_vlan(interface, native_vlan)\n        self.set_trunk_vlans(interface, trunk_vlans)\n        self._save_trunk_interface(interface, native_vlan, trunk_vlans)\n\n    @translate_protocol_errors\n    def _save_trunk_interface(self, interface, native_vlan, trunk_vlans):\n        interface.vlan = native_vlan\n        interface.trunk = True\n        self._set_interface_hex(interface, trunk_vlans)\n        interface.save()\n\n    @staticmethod\n    def _set_interface_hex(interface, trunk_vlans):\n        try:\n            allowedvlan = interface.swport_allowed_vlan\n        except SwPortAllowedVlan.DoesNotExist:\n            allowedvlan = SwPortAllowedVlan(interface=interface)\n\n        allowedvlan.set_allowed_vlans(trunk_vlans)\n        allowedvlan.save()\n\n    def is_dot1x_enabled(self, interfaces):\n        \"\"\"Explicitly returns None as we do not know on a SNMP-generic basis\"\"\"\n        return None\n\n    def get_dot1x_enabled_interfaces(self):\n        return {}\n\n    def is_port_access_control_enabled(self):\n        handle = self._get_read_only_handle()\n        try:\n            return int(handle.get(self.dot1xPaeSystemAuthControl)) == 1\n        except TimeOutException as error:\n            raise NoResponseError(\"Timed out\") from error\n        except SnmpError as error:\n            raise ProtocolError(\"SNMP error\") from error\n\n    def raise_if_not_configurable(self):\n        if not self.netbox.get_preferred_snmp_management_profile(require_write=True):\n            raise DeviceNotConfigurableError(\n                \"No writeable SNMP management profile set for this device, \"\n                \"changes cannot be saved\"\n            )\n\n    # These are not relevant for this generic subclass\n    get_cisco_voice_vlans = None\n    set_cisco_voice_vlan = None\n    enable_cisco_cdp = None\n    disable_cisco_voice_vlan = None\n    disable_cisco_cdp = None\n"
  },
  {
    "path": "python/nav/portadmin/snmp/cisco.py",
    "content": "#\n# Copyright (C) 2011-2015, 2020, 2021 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Cisco specific PortAdmin SNMP handling\"\"\"\n\nimport logging\nfrom typing import Optional, Sequence\n\nfrom nav.Snmp.errors import SnmpError\nfrom nav.bitvector import BitVector\nfrom nav.oids import OID\nfrom nav.portadmin.snmp.base import SNMPHandler, translate_protocol_errors\nfrom nav.smidumps import get_mib\nfrom nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\nfrom nav.portadmin.handlers import (\n    PoeState,\n    POEStateNotSupportedError,\n    POENotSupportedError,\n)\nfrom nav.models import manage\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass Cisco(SNMPHandler):\n    \"\"\"A specialized class for handling ports in CISCO switches.\"\"\"\n\n    # Cisco sysObjectIDs under this tree are not normal Cisco products and should\n    # probably not be handled by this handler\n    OTHER_ENTERPRISES = OID('.1.3.6.1.4.1.9.6')\n\n    VENDOR = VENDOR_ID_CISCOSYSTEMS\n\n    VTPNODES = get_mib('CISCO-VTP-MIB')['nodes']\n    PAENODES = get_mib('CISCO-PAE-MIB')['nodes']\n    POENODES = get_mib('CISCO-POWER-ETHERNET-EXT-MIB')['nodes']\n\n    VTPVLANSTATE = VTPNODES['vtpVlanState']['oid']\n    VTPVLANTYPE = VTPNODES['vtpVlanType']['oid']\n    TRUNKPORTNATIVEVLAN = VTPNODES['vlanTrunkPortNativeVlan']['oid']\n    TRUNKPORTVLANSENABLED = VTPNODES['vlanTrunkPortVlansEnabled']['oid']\n    TRUNKPORTVLANSENABLED2K = VTPNODES['vlanTrunkPortVlansEnabled2k']['oid']\n    TRUNKPORTVLANSENABLED3K = VTPNODES['vlanTrunkPortVlansEnabled3k']['oid']\n    TRUNKPORTVLANSENABLED4K = VTPNODES['vlanTrunkPortVlansEnabled4k']['oid']\n\n    TRUNKPORTSTATE = VTPNODES['vlanTrunkPortDynamicState']['oid']\n    TRUNKSTATE_ON = 1\n    TRUNKSTATE_OFF = 2\n    TRUNKSTATE_AUTO = 4\n\n    TRUNKPORTENCAPSULATION = VTPNODES['vlanTrunkPortEncapsulationType']['oid']\n    ENCAPSULATION_DOT1Q = 4\n    ENCAPSULATION_NEGOTIATE = 5\n\n    dot1xPortAuth = PAENODES['cpaePortCapabilitiesEnabled']['oid']\n    DOT1X_AUTHENTICATOR = 0b10000000\n    DOT1X_SUPPLICANT = 0b01000000\n\n    POEENABLE = POENODES['cpeExtPsePortEnable']['oid']\n    POE_AUTO = PoeState(state=1, name=\"AUTO\")\n    POE_STATIC = PoeState(state=2, name=\"STATIC\")\n    POE_LIMIT = PoeState(state=3, name=\"LIMIT\")\n    POE_DISABLE = PoeState(state=4, name=\"DISABLE\")\n\n    POE_OPTIONS = [\n        POE_AUTO,\n        POE_STATIC,\n        POE_LIMIT,\n        POE_DISABLE,\n    ]\n\n    def __init__(self, netbox, **kwargs):\n        super(Cisco, self).__init__(netbox, **kwargs)\n        self.vlan_oid = '1.3.6.1.4.1.9.9.68.1.2.2.1.2'\n        self.write_mem_oid = '1.3.6.1.4.1.9.2.1.54.0'\n        self.voice_vlan_oid = '1.3.6.1.4.1.9.9.68.1.5.1.1.1'\n        self.cdp_oid = '1.3.6.1.4.1.9.9.23.1.1.1.1.2'\n\n    @classmethod\n    def can_handle(cls, netbox: manage.Netbox) -> bool:\n        \"\"\"Returns True if this handler can handle this netbox\"\"\"\n        if netbox.type and cls.OTHER_ENTERPRISES.is_a_prefix_of(\n            netbox.type.sysobjectid\n        ):\n            return False\n        return super().can_handle(netbox)\n\n    @translate_protocol_errors\n    def get_interface_native_vlan(self, interface):\n        return self._query_netbox(self.vlan_oid, interface.ifindex)\n\n    @translate_protocol_errors\n    def set_vlan(self, interface, vlan):\n        \"\"\"Set a new vlan for a specified interface,- and\n        remove the previous vlan.\"\"\"\n        if_index = interface.ifindex\n        try:\n            vlan = int(vlan)\n        except ValueError:\n            raise TypeError('Not a valid vlan %s' % vlan)\n        # Fetch current vlan\n        fromvlan = self.get_interface_native_vlan(interface)\n        # fromvlan and vlan is the same, there's nothing to do\n        if fromvlan == vlan:\n            return None\n        # Add port to vlan. This makes the port active on both old and new vlan\n        status = None\n        try:\n            _logger.debug(\"setting vlan: if_index: %s i %s\", if_index, vlan)\n            status = self._set_netbox_value(self.vlan_oid, if_index, \"i\", vlan)\n        except SnmpError as ex:\n            # Ignore this exception,- some boxes want signed integer and\n            # we do not know this beforehand.\n            # If unsigned fail,- try with signed integer.\n            _logger.debug(\"set_vlan with integer failed: Exception = %s\", ex)\n            _logger.debug(\"setting vlan: if_index: %s u %s\", if_index, vlan)\n            status = self._set_netbox_value(self.vlan_oid, if_index, \"u\", vlan)\n        return status\n\n    @translate_protocol_errors\n    def set_native_vlan(self, interface, vlan):\n        \"\"\"Set native vlan on a trunk interface\"\"\"\n        if_index = interface.ifindex\n        try:\n            self._set_netbox_value(self.TRUNKPORTNATIVEVLAN, if_index, 'i', vlan)\n        except SnmpError:\n            try:\n                self._set_netbox_value(self.TRUNKPORTNATIVEVLAN, if_index, 'u', vlan)\n            except SnmpError:\n                _logger.error(\n                    'Setting native vlan on %s ifindex %s failed', self.netbox, if_index\n                )\n                raise\n\n    @translate_protocol_errors\n    def get_cisco_voice_vlans(self):\n        \"\"\"Returns a dict of ifIndex:vmVoiceVlanId entries\"\"\"\n        return {int(x): y for x, y in self._jog(self.voice_vlan_oid)}\n\n    @translate_protocol_errors\n    def set_cisco_voice_vlan(self, interface, voice_vlan):\n        \"\"\"Set a voice vlan using Cisco specific oid\"\"\"\n        status = None\n        try:\n            voice_vlan = int(voice_vlan)\n            status = self._set_netbox_value(\n                self.voice_vlan_oid, interface.ifindex, 'i', voice_vlan\n            )\n        except SnmpError as error:\n            _logger.error('Error setting voice vlan: %s', error)\n        except ValueError:\n            _logger.error('%s is not a valid voice vlan', voice_vlan)\n            raise\n\n        return status\n\n    @translate_protocol_errors\n    def enable_cisco_cdp(self, interface):\n        \"\"\"Enable CDP using Cisco specific oid\"\"\"\n        try:\n            return self._set_netbox_value(self.cdp_oid, interface.ifindex, 'i', 1)\n        except ValueError:\n            _logger.error('%s is not a valid option for cdp', 1)\n            raise\n\n    @translate_protocol_errors\n    def disable_cisco_voice_vlan(self, interface):\n        \"\"\"Disable the Cisco Voice vlan on this interface\"\"\"\n        return self._set_netbox_value(self.voice_vlan_oid, interface.ifindex, 'i', 4096)\n\n    @translate_protocol_errors\n    def disable_cisco_cdp(self, interface):\n        \"\"\"Disable CDP using Cisco specific oid\"\"\"\n        try:\n            return self._set_netbox_value(self.cdp_oid, interface.ifindex, 'i', 2)\n        except ValueError:\n            _logger.error('%s is not a valid option for cdp', 2)\n            raise\n\n    @translate_protocol_errors\n    def commit_configuration(self):\n        \"\"\"Use OLD-CISCO-SYS-MIB (v1) writeMem to write tomemory.\n        Write configuration into non-volatile memory / erase config\n        memory if 0.\"\"\"\n        handle = self._get_read_write_handle()\n        return handle.set(self.write_mem_oid, 'i', 1)\n\n    @translate_protocol_errors\n    def get_netbox_vlan_tags(self):\n        \"\"\"Fetch all vlans. Filter on operational and of type ethernet.\"\"\"\n        vlan_states = [\n            OID(oid)[-1]\n            for oid, status in self._bulkwalk(self.VTPVLANSTATE)\n            if status == 1\n        ]\n        vlan_types = [\n            OID(oid)[-1]\n            for oid, vlantype in self._bulkwalk(self.VTPVLANTYPE)\n            if vlantype == 1\n        ]\n\n        return list(set(vlan_states) & set(vlan_types))\n\n    @translate_protocol_errors\n    def get_native_and_trunked_vlans(self, interface):\n        ifindex = interface.ifindex\n        native_vlan = self._query_netbox(self.TRUNKPORTNATIVEVLAN, ifindex)\n\n        blocks = [\n            self._query_netbox(oid, ifindex) or b''\n            for oid in (\n                self.TRUNKPORTVLANSENABLED,\n                self.TRUNKPORTVLANSENABLED2K,\n                self.TRUNKPORTVLANSENABLED3K,\n                self.TRUNKPORTVLANSENABLED4K,\n            )\n        ]\n        bitstring = b\"\".join(\n            value.ljust(CHARS_IN_1024_BITS, b'\\x00') for value in blocks\n        )\n\n        bitvector = BitVector(bitstring)\n        return native_vlan, bitvector.get_set_bits()\n\n    @translate_protocol_errors\n    def set_access(self, interface, access_vlan):\n        \"\"\"Set interface trunking to off and set encapsulation to negotiate\"\"\"\n        _logger.debug(\"set_access: %s %s\", interface, access_vlan)\n        if self._is_trunk(interface):\n            self._set_access_mode(interface)\n        self.set_trunk_vlans(interface, [])\n        self.set_native_vlan(interface, access_vlan)\n        self.set_vlan(interface, access_vlan)\n        interface.trunk = False  # Make sure database is updated\n        interface.vlan = access_vlan\n        interface.save()\n\n    def _set_access_mode(self, interface):\n        _logger.debug(\"set_access_mode: %s\", interface)\n        self._set_netbox_value(\n            self.TRUNKPORTSTATE, interface.ifindex, 'i', self.TRUNKSTATE_OFF\n        )\n        interface.trunk = False\n        interface.save()\n\n    @translate_protocol_errors\n    def set_trunk(self, interface, native_vlan, trunk_vlans):\n        \"\"\"Check for trunk, set native vlan, set trunk vlans\"\"\"\n        _logger.debug(\"set_trunk: %s (%s, %s)\", interface, native_vlan, trunk_vlans)\n        if not self._is_trunk(interface):\n            self._set_trunk_mode(interface)\n\n        self.set_trunk_vlans(interface, trunk_vlans)\n        self.set_native_vlan(interface, native_vlan)\n        self._save_trunk_interface(interface, native_vlan, trunk_vlans)\n\n    def _set_trunk_mode(self, interface):\n        _logger.debug(\"_set_trunk_mode %s\", interface)\n        ifindex = interface.ifindex\n        self._set_netbox_value(self.TRUNKPORTSTATE, ifindex, 'i', self.TRUNKSTATE_ON)\n        # Set encapsulation to dot1Q TODO: Support other encapsulations\n        self._set_netbox_value(\n            self.TRUNKPORTENCAPSULATION, ifindex, 'i', self.ENCAPSULATION_DOT1Q\n        )\n        interface.trunk = True\n        interface.save()\n\n    @translate_protocol_errors\n    def set_trunk_vlans(self, interface, vlans):\n        \"\"\"Set trunk vlans\n\n        Initialize a BitVector with all 4096 vlans set to 0. Then fill in all\n        vlans. As Cisco has 4 different oids to set all vlans on the trunk,\n        we divide this bitvector into one bitvector for each oid, and set\n        each of those.\n\n        \"\"\"\n        ifindex = interface.ifindex\n        bitvector = BitVector(512 * b'\\x00')  # initialize all-zero bitstring\n        for vlan in vlans:\n            bitvector[int(vlan)] = 1\n\n        chunks = self._chunkify(bitvector, 4)\n\n        for oid in [\n            self.TRUNKPORTVLANSENABLED,\n            self.TRUNKPORTVLANSENABLED2K,\n            self.TRUNKPORTVLANSENABLED3K,\n            self.TRUNKPORTVLANSENABLED4K,\n        ]:\n            bitvector_chunk = next(chunks)\n            try:\n                self._set_netbox_value(oid, ifindex, 's', bitvector_chunk.to_bytes())\n            except SnmpError as error:\n                _logger.error(\n                    'Error setting trunk vlans on %s ifindex %s: %s',\n                    self.netbox,\n                    ifindex,\n                    error,\n                )\n                raise\n\n    def _is_trunk(self, interface):\n        state = int(self._query_netbox(self.TRUNKPORTSTATE, interface.ifindex))\n        return state in [1, 5]\n\n    @translate_protocol_errors\n    def is_dot1x_enabled(self, interface):\n        \"\"\"Returns True or False based on state of dot1x\"\"\"\n        return (\n            self._query_netbox(self.dot1xPortAuth, interface.ifindex)[0]\n            & self.DOT1X_AUTHENTICATOR\n        )\n\n    @translate_protocol_errors\n    def get_dot1x_enabled_interfaces(self):\n        _logger.error(\"Querying for dot1x enabled interfaces on Cisco\")\n        names = self._get_interface_names()\n        return {\n            names.get(OID(oid)[-1]): state[0] & self.DOT1X_AUTHENTICATOR\n            for oid, state in self._bulkwalk(self.dot1xPortAuth)\n        }\n\n    def get_poe_state_options(self) -> Sequence[PoeState]:\n        \"\"\"Returns the available options for enabling/disabling PoE on this netbox\"\"\"\n        return self.POE_OPTIONS\n\n    @translate_protocol_errors\n    def set_poe_state(self, interface: manage.Interface, state: PoeState):\n        \"\"\"Set state for enabling/disabling PoE on this interface.\n        Available options should be retrieved using `get_poe_state_options`\n        \"\"\"\n        unit_number, interface_number = self._get_poe_indexes_for_interface(interface)\n        oid_with_unit_number = self.POEENABLE + OID((unit_number,))\n        try:\n            self._set_netbox_value(\n                oid_with_unit_number, interface_number, 'i', state.state\n            )\n        except SnmpError as error:\n            _logger.error('Error setting poe state: %s', error)\n            raise\n        except ValueError:\n            _logger.error('%s is not a valid option for poe state', state)\n            raise\n\n    def _get_poe_indexes_for_interface(\n        self, interface: manage.Interface\n    ) -> tuple[int, int]:\n        \"\"\"Returns the unit number and interface number for the given interface\"\"\"\n        try:\n            poeport = manage.POEPort.objects.get(interface=interface)\n        except manage.POEPort.DoesNotExist:\n            raise POENotSupportedError(\n                \"This interface does not have PoE indexes defined\"\n            )\n        unit_number = poeport.poegroup.index\n        interface_number = poeport.index\n        return unit_number, interface_number\n\n    def get_poe_states(\n        self, interfaces: Optional[Sequence[manage.Interface]] = None\n    ) -> dict[str, Optional[PoeState]]:\n        \"\"\"Retrieves current PoE state for interfaces on this device.\n\n        :param interfaces: Optional sequence of interfaces to filter for, as fetching\n                           data for all interfaces may be a waste of time if only a\n                           single interface is needed. If this parameter is omitted,\n                           the default behavior is to filter on all Interface objects\n                           registered for this device.\n        :returns: A dict mapping interfaces to their discovered PoE state.\n                  The key matches the `ifname` attribute for the related\n                  Interface object.\n                  The value will be None if the interface does not support PoE.\n        \"\"\"\n        if not interfaces:\n            interfaces = self.netbox.interfaces\n        states_dict = {}\n        for interface in interfaces:\n            try:\n                state = self._get_poe_state_for_single_interface(interface)\n            except POENotSupportedError:\n                state = None\n            states_dict[interface.ifname] = state\n        return states_dict\n\n    @translate_protocol_errors\n    def _get_poe_state_for_single_interface(\n        self, interface: manage.Interface\n    ) -> PoeState:\n        \"\"\"Retrieves current PoE state for given the given interface\"\"\"\n        unit_number, interface_number = self._get_poe_indexes_for_interface(interface)\n        oid_with_unit_number = self.POEENABLE + OID((unit_number,))\n        state_value = self._query_netbox(oid_with_unit_number, interface_number)\n        if state_value is None:\n            raise POENotSupportedError(\"This interface does not support PoE\")\n        for state in self.get_poe_state_options():\n            if state.state == state_value:\n                return state\n        raise POEStateNotSupportedError(f\"Unknown PoE state {state_value}\")\n\n\nCHARS_IN_1024_BITS = 128\n"
  },
  {
    "path": "python/nav/portadmin/snmp/dell.py",
    "content": "#\n# Copyright (C) 2017, 2019 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dell specific PortAdmin SNMP handling\"\"\"\n\nimport logging\n\nfrom nav.portadmin.snmp.base import SNMPHandler, translate_protocol_errors\nfrom nav.smidumps import get_mib\nfrom nav.enterprise.ids import VENDOR_ID_DELL_INC\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass Dell(SNMPHandler):\n    \"\"\"Dell INC handler\n\n    Uses DNOS-SWITCHING-MIB\n    \"\"\"\n\n    VENDOR = VENDOR_ID_DELL_INC\n\n    DNOSNODES = get_mib('DNOS-SWITCHING-MIB')['nodes']\n\n    PORT_MODE_ACCESS = 1\n    PORT_MODE_TRUNK = 2\n    PORT_MODE_GENERAL = 3\n\n    PORT_MODE_OID = DNOSNODES['agentPortSwitchportMode']['oid']\n    NATIVE_VLAN_ID = DNOSNODES['agentPortNativeVlanID']['oid']\n    # Overriding members\n    VlAN_OID = DNOSNODES['agentPortAccessVlanID']['oid']\n    VLAN_EGRESS_PORTS = DNOSNODES['agentVlanSwitchportTrunkStaticEgressPorts']['oid']\n    WRITE_MEM_OID = DNOSNODES['agentSaveConfig']['oid'] + '.0'\n\n    def __init__(self, netbox, **kwargs):\n        super(Dell, self).__init__(netbox, **kwargs)\n\n    @translate_protocol_errors\n    def commit_configuration(self):\n        \"\"\"Use DNOS-SWITCHING-MIB agentSaveConfig to write to memory.\n        Write configuration into non-volatile memory.\"\"\"\n        handle = self._get_read_write_handle()\n        return handle.set(self.WRITE_MEM_OID, 'i', 1)\n\n    @translate_protocol_errors\n    def set_vlan(self, interface, vlan):\n        baseport = interface.baseport\n        try:\n            vlan = int(vlan)\n        except ValueError:\n            raise TypeError('Not a valid vlan %s' % vlan)\n        # Fetch current vlan\n        fromvlan = self.get_interface_native_vlan(interface)\n        # fromvlan and vlan is the same, there's nothing to do\n        if fromvlan == vlan:\n            _logger.debug('fromvlan and vlan is the same - skip')\n            return None\n\n        self._set_netbox_value(self.VlAN_OID, baseport, \"i\", vlan)\n\n    @translate_protocol_errors\n    def set_access(self, interface, access_vlan):\n        self._set_swport_mode(interface, self.PORT_MODE_ACCESS)\n        self.set_vlan(interface, access_vlan)\n        interface.vlan = access_vlan\n        interface.trunk = False\n        interface.save()\n\n    @translate_protocol_errors\n    def set_trunk(self, interface, native_vlan, trunk_vlans):\n        self._set_swport_mode(interface, self.PORT_MODE_TRUNK)\n        self.set_trunk_vlans(interface, trunk_vlans)\n        self.set_native_vlan(interface, native_vlan)\n        interface.vlan = native_vlan\n        interface.trunk = True\n        interface.save()\n\n    def _set_swport_mode(self, interface, mode):\n        baseport = interface.baseport\n        self._set_netbox_value(self.PORT_MODE_OID, baseport, 'i', mode)\n\n    @translate_protocol_errors\n    def get_interface_native_vlan(self, interface):\n        # FIXME This override is potentially only applicable for trunk ports\n        baseport = interface.baseport\n        return self._query_netbox(self.NATIVE_VLAN_ID, baseport)\n\n    @translate_protocol_errors\n    def set_native_vlan(self, interface, vlan):\n        \"\"\"Set native vlan on a trunk interface\"\"\"\n        baseport = interface.baseport\n        self._set_netbox_value(self.NATIVE_VLAN_ID, baseport, \"i\", vlan)\n"
  },
  {
    "path": "python/nav/portadmin/snmp/h3c.py",
    "content": "#\n# Copyright (C) 2017 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"H3C specific PortAdmin SNMP handling\"\"\"\n\nfrom nav import Snmp\nfrom nav.oids import OID\nfrom nav.portadmin.snmp.base import SNMPHandler, translate_protocol_errors\nfrom nav.enterprise.ids import VENDOR_ID_H3C\n\n\nclass H3C(SNMPHandler):\n    \"\"\"HP Comware Platform Software handler\"\"\"\n\n    VENDOR = VENDOR_ID_H3C\n\n    hh3cCfgOperateType = '1.3.6.1.4.1.25506.2.4.1.2.4.1.2'\n    hh3cCfgOperateRowStatus = '1.3.6.1.4.1.25506.2.4.1.2.4.1.9'\n\n    def __init__(self, netbox, **kwargs):\n        super(H3C, self).__init__(netbox, **kwargs)\n\n    @translate_protocol_errors\n    def commit_configuration(self):\n        \"\"\"Use hh3c-config-man-mib to save running config to startup\"\"\"\n\n        running_to_startup = 1\n        create_and_go = 4\n\n        # Find the next available row for configuring and store it as a suffix\n        active_rows = [\n            OID(o[0])[-1] for o in self._bulkwalk(self.hh3cCfgOperateRowStatus)\n        ]\n        try:\n            suffix = str(max(active_rows) + 1)\n        except ValueError:\n            suffix = '1'\n\n        operation_type_oid = '.'.join([self.hh3cCfgOperateType, suffix])\n        operation_status_oid = '.'.join([self.hh3cCfgOperateRowStatus, suffix])\n\n        handle = self._get_read_write_handle()\n        handle.multi_set(\n            [\n                Snmp.PDUVarbind(operation_type_oid, 'i', running_to_startup),\n                Snmp.PDUVarbind(operation_status_oid, 'i', create_and_go),\n            ]\n        )\n"
  },
  {
    "path": "python/nav/portadmin/snmp/hp.py",
    "content": "#\n# Copyright (C) 2011-2015, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Hewlett-Packard specific PortAdmin SNMP handling\"\"\"\n\nfrom nav.oids import OID\nfrom nav.portadmin.snmp.base import SNMPHandler, translate_protocol_errors\nfrom nav.enterprise.ids import VENDOR_ID_HEWLETT_PACKARD\n\n\nclass HP(SNMPHandler):\n    \"\"\"A specialized class for handling ports in HP switches.\"\"\"\n\n    VENDOR = VENDOR_ID_HEWLETT_PACKARD\n\n    # From HP-DOT1X-EXTENSIONS-MIB\n    # hpicfDot1xPaePortAuth return INTEGER { true(1), false(2) }\n    dot1xPortAuth = '1.3.6.1.4.1.11.2.14.11.5.1.25.1.1.1.1.1'\n\n    def __init__(self, netbox, **kwargs):\n        super(HP, self).__init__(netbox, **kwargs)\n\n    @translate_protocol_errors\n    def is_dot1x_enabled(self, interface):\n        \"\"\"Returns True or False based on state of dot1x\"\"\"\n        return int(self._query_netbox(self.dot1xPortAuth, interface.ifindex)) == 1\n\n    @translate_protocol_errors\n    def get_dot1x_enabled_interfaces(self):\n        names = self._get_interface_names()\n        return {\n            names.get(OID(oid)[-1]): state == 1\n            for oid, state in self._bulkwalk(self.dot1xPortAuth)\n        }\n"
  },
  {
    "path": "python/nav/portadmin/vlan.py",
    "content": "#\n# Copyright (C) 2012, 2013, 2017 UNINETT\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"VLAN specific data structures for use in PortAdmin\"\"\"\n\n\nclass FantasyVlan(object):\n    \"\"\"A container object for storing vlans for a netbox\n\n    This object is needed because we mix \"real\" vlans that NAV know about\n    and \"fake\" vlan that NAV does not know about but exists on the switch.\n    They need to be compared and sorted, and this class does that.\n\n    \"\"\"\n\n    def __init__(self, vlan, netident=None, descr=None):\n        self.vlan = vlan\n        self.net_ident = netident\n        self.descr = descr\n\n    def __str__(self):\n        if self.net_ident:\n            return \"%s (%s)\" % (self.vlan, self.net_ident)\n        else:\n            return str(self.vlan)\n\n    def __hash__(self):\n        return hash(self.vlan)\n\n    def __lt__(self, other):\n        return self.vlan < other.vlan\n\n    def __eq__(self, other):\n        return self.vlan == other.vlan\n\n    def __repr__(self):\n        return (\n            \"{self.__class__.__name__}(vlan={self.vlan!r}, \"\n            \"netident={self.net_ident!r}, descr={self.descr!r})\"\n        ).format(self=self)\n"
  },
  {
    "path": "python/nav/pwhash.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Provides password hashing algorithms for NAV.\"\"\"\n\nimport os\nimport random\nimport hashlib\nimport base64\nimport re\n\nfrom django.utils import crypto\nfrom django.views.decorators.debug import sensitive_variables\n\nfrom nav import errors\n\n\n@sensitive_variables('password')\ndef sha1(password, salt):\n    return hashlib.sha1(password + salt).digest()\n\n\n@sensitive_variables('password')\ndef md5(password, salt):\n    return hashlib.md5(password + salt).digest()\n\n\n@sensitive_variables('password')\ndef pbkdf2(password, salt):\n    return crypto.pbkdf2(password, salt, iterations=10000)\n\n\nKNOWN_METHODS = {\n    'sha1': sha1,\n    'md5': md5,\n    'pbkdf2': pbkdf2,\n}\nDEFAULT_METHOD = 'pbkdf2'\n\n\ndef generate_salt():\n    \"\"\" \"Generate and return a salt string\"\"\"\n    saltlen = 8\n    if hasattr(os, 'urandom') and callable(os.urandom):\n        raw_salt = os.urandom(saltlen)\n    else:\n        raw_salt = \"\".join(\n            [chr(x) for x in [random.randint(0, 255) for x in range(saltlen)]]\n        )\n\n    return base64.b64encode(raw_salt).strip().decode('ASCII')\n\n\nclass Hash(object):\n    \"\"\"Class to represent a password hash.\n\n    Use str() to extract a string representation of a hash, suitable\n    for storage.\n    \"\"\"\n\n    _hashmatch = re.compile(r'\\{([^\\}]+)\\}([^\\$]+)\\$(.+)$')\n\n    @sensitive_variables('password')\n    def __init__(self, method=DEFAULT_METHOD, salt=None, password=None):\n        \"\"\"Create a hash object.\n\n        method -- The digest method to use. sha1 and md5 are supported.\n        salt -- The salt to use. Will be auto-generated if omitted.\n        password -- Password to hash\n        \"\"\"\n        if method not in KNOWN_METHODS:\n            raise UnknownHashMethodError(method)\n        self.method = method\n        if not salt:\n            self.salt = generate_salt()\n        else:\n            self.salt = salt\n        self.digest = None\n        if password is not None:\n            self.update(password)\n\n    def __lt__(self, other):\n        return str(self) < str(other)\n\n    def __eq__(self, other):\n        return str(self) == str(other)\n\n    def __str__(self):\n        digest64 = base64.b64encode(self.digest).strip().decode('ASCII')\n        return \"{%s}%s$%s\" % (self.method, self.salt, digest64)\n\n    @sensitive_variables('password')\n    def update(self, password):\n        \"\"\"Update the hash with a new password.\"\"\"\n\n        salt = self.salt\n        if isinstance(salt, str):\n            salt = salt.encode('utf-8')\n        if isinstance(password, str):\n            password = password.encode('utf-8')\n\n        hasher = KNOWN_METHODS[self.method]\n        self.digest = hasher(password, salt)\n\n    def set_hash(self, hash):\n        \"\"\"Set the hash directly from a previously stored hash string.\"\"\"\n        match = self._hashmatch.match(hash)\n        if not match:\n            raise InvalidHashStringError(hash)\n        else:\n            method = match.group(1)\n            if method not in KNOWN_METHODS:\n                raise UnknownHashMethodError(method)\n            else:\n                self.method = method\n            self.salt = match.group(2)\n            self.digest = base64.b64decode(match.group(3).encode('ASCII'))\n\n    @sensitive_variables('password')\n    def verify(self, password):\n        \"\"\"Verify a password against this hash.\"\"\"\n        otherhash = self.__class__(\n            method=self.method, salt=self.salt, password=password\n        )\n        return self == otherhash\n\n\nclass InvalidHashStringError(errors.GeneralException):\n    \"\"\"Invalid hash string\"\"\"\n\n\nclass UnknownHashMethodError(errors.GeneralException):\n    \"\"\"Unknown hash method\"\"\"\n"
  },
  {
    "path": "python/nav/report/IPtools.py",
    "content": "#\n# Copyright (C) 2007-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Sorts and does calculations on IP addresses/nets.\"\"\"\n\nimport logging\n\nfrom IPy import IP\n\n_logger = logging.getLogger(__name__)\n\n\nclass UnknownIpVersionError(Exception):\n    pass\n\n\ndef sort_nets_by_address(list):\n    \"\"\"Sorts a list of IPy.IP instances on hexlets/octets based on\n    IP.version().\"\"\"\n    return sorted(list, key=lambda x: x.int())\n\n\ndef sort_nets_by_prefixlength(nets):\n    \"\"\"Sorts a list with IPy.IP instances on prefix length.\"\"\"\n    nets.sort(key=lambda x: x.prefixlen())\n    return nets\n\n\ndef getLastbitsIpMap(ip_list):\n    \"\"\"Returns a mapping between the last nybble and\n    the whole IP address.\n\n    Assumes:\n        Unique end nybbles\n        Fixed prefix length\n\n    Arguemnts:\n        ``ip_list'': list of IPy.IP instances\n\n    Used by the presentation logic for Column-to-IP mapping\n    \"\"\"\n    if not ip_list:\n        return None\n\n    version = ip_list[0].version()\n\n    if version == 6:\n        return _ipv6_getNybblesMap(ip_list)\n    elif version == 4:\n        return _ipv4_getLastbitsMap(ip_list)\n    else:\n        raise UnknownIpVersionError(str(version))\n\n\ndef _ipv4_getLastbitsMap(ip_list):\n    return dict(\n        zip(\n            [\n                i.net().strNormal()[i.net().strNormal().rfind('.') + 1 :]\n                for i in ip_list\n            ],\n            ip_list,\n        )\n    )\n\n\ndef _ipv6_getNybblesMap(ip_list):\n    \"\"\"Finds the column where the IPs in the list should be displayed\"\"\"\n    nybble_index = (ip_list[0].prefixlen() // 4) - 1\n    return dict(\n        zip(\n            [i.net().strFullsize().replace(':', '')[nybble_index] for i in ip_list],\n            ip_list,\n        )\n    )\n\n\ndef andIpMask(ip, mask):\n    \"\"\"Logical AND between ip and mask.\n\n    Arguments:\n        ``ip'': IPy.IP\n        ``mask'': IPy.IP\n    \"\"\"\n    base = IP(ip.net().int() & mask.net().int())\n    return IP(\"{}/{}\".format(base, mask.prefixlen()))\n\n\ndef getMask(ip_version, bit_count):\n    \"\"\"Generates a network mask with prefix length = bit_count.\n    Returns IPy.IP instance.\n    \"\"\"\n    if ip_version == 6:\n        return _ipv6_getMask(bit_count)\n    elif ip_version == 4:\n        return _ipv4_getMask(bit_count)\n    else:\n        raise UnknownIpVersionError(str(ip_version))\n\n\ndef _ipv6_getMask(bit_count):\n    result = IP(\"::/{}\".format(bit_count)).netmask()\n    return IP(\"{}/{}\".format(result, bit_count))\n\n\ndef _ipv4_getMask(bit_count):\n    result = IP(\"0.0.0.0/{}\".format(bit_count)).netmask()\n    return IP(\"{}/{}\".format(result, bit_count))\n\n\ndef getLastSubnet(network, last_network_prefix_len=None):\n    \"\"\"\n    Retrieves the last _possible_ subnet of the argument ``network''.\n    Does not consider whether the subnet exists or not.\n\n    Arguments:\n        ``network'': The network in question\n\n        ``last_network_prefix_len'': An optional specification of the prefix\n                                     length of the last network. Defaults to\n                                     32 for IPv6 and 128 for IPv6\n\n    \"\"\"\n    if last_network_prefix_len is None:\n        last_network_prefix_len = network.netmask().prefixlen()\n    return IP(''.join([network.net().strNormal(), \"/\", str(last_network_prefix_len)]))\n\n\ndef get_next_subnet(net):\n    \"\"\"Returns the next subnet of the same size as net\"\"\"\n    return IP(net.int() + net.len()).make_net(net.prefixlen())\n\n\ndef create_subnet_range(net, prefixlen):\n    \"\"\"Creates all subnets of the given size inside the net\"\"\"\n    assert prefixlen >= net.prefixlen(), '{} < than {}'.format(net, prefixlen)\n    # Return self as the net cannot be divided further\n    if net.prefixlen() == prefixlen:\n        return [net]\n    subnet = IP(\"{}/{}\".format(net.net().strNormal(), prefixlen))\n    subnet_range = []\n    while net.overlaps(subnet):\n        subnet_range.append(subnet)\n        subnet = get_next_subnet(subnet)\n    return subnet_range\n"
  },
  {
    "path": "python/nav/report/IPtree.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Builds and represents IP nets in a tree structure.\"\"\"\n\nfrom copy import deepcopy\nfrom nav import db\nfrom nav.ip import IP\nfrom nav.report.IPtools import getMask, sort_nets_by_prefixlength, andIpMask\n\n\ndef build_tree(start_net, end_net=None, bits_in_matrix=0, add_missing_nets=False):\n    \"\"\"Builds a tree from start_net to (and included) end_net.\n\n    Arguments:\n        start_net: IPy.IP instance of the starting point\n\n    Returns: A tree (using a hash map)\n\n    This module was originally implemented for the prefix matrix which\n    needed three additional options:\n        end_net: The last net to be shown in the matrix\n        bits_in_matrix: Number of bits to exclude from the end_net IP,\n            defaults to 0\n        add_missing_nets: If a leaf nodes' parent does not have prefix\n            length == (end_net - bits_in_matrix) such a parent will be added\n            in between the leaf and the original parent. The extra parent\n            will serve as a 'foreign key' later on when the prefix matrix\n            splits the tree on all nodes with prefix length =\n            end_net.prefixlen() - bits_in_matrix.\n\n            defaults to False\n    \"\"\"\n\n    result = {start_net: {}}\n    subnets = get_subnets(start_net)\n    sorted_subnets = sort_nets_by_prefixlength(subnets)\n\n    # TODO: Reimplement this to respect that the list is allready sorted,\n    #       that way we won't have to sort the list again.\n    if add_missing_nets and bits_in_matrix > 0:\n        mask = getMask(start_net.version(), end_net.prefixlen() - bits_in_matrix)\n        for ip in sorted_subnets:\n            if ip.prefixlen() <= mask.prefixlen():\n                continue\n            supernet = andIpMask(ip, mask)\n            if supernet not in sorted_subnets:\n                sorted_subnets.append(supernet)\n\n        sorted_subnets = sort_nets_by_prefixlength(sorted_subnets)\n\n    # build the tree\n    for ip in sorted_subnets:\n        _insert_into_tree(result, ip)\n\n    return result\n\n\ndef _insert_into_tree(tree, ip):\n    for ip_item in tree:\n        if ip_item.overlaps(ip):\n            _insert_into_tree(tree[ip_item], ip)\n            return\n    tree[ip] = {}\n\n\ndef get_subnets(network, min_length=None):\n    \"\"\"Retrieves all the subnets of the argument ``network''.\n\n    Arguments:\n        ``min_length'': minimum subnet mask length, defaults to\n                        network.prefixlen().\n\n    Returns:\n        List with IPy.IP objects\n\n    \"\"\"\n    max_length = 128 if network.version() == 6 else 32\n    if min_length is None:\n        min_length = network.prefixlen()\n    assert min_length < max_length\n    sql = \"\"\"\n        SELECT netaddr\n        FROM prefix\n        WHERE family(netaddr)=%s\n          AND netaddr << %s\n          AND masklen(netaddr) >= %s\n          AND masklen(netaddr) < %s\n    \"\"\"\n    args = (network.version(), str(network), min_length, max_length)\n    db_cursor = db.getConnection('default').cursor()\n    db_cursor.execute(sql.strip(), args)\n    db_result = db_cursor.fetchall()\n    return [IP(i[0]) for i in db_result]\n\n\ndef remove_subnets_with_prefixlength(tree, prefixlen):\n    \"\"\"Generates a new tree from tree, but without subnets with\n    prefix length >= prefixlen.\"\"\"\n\n    def _delete_subnets(tree, limit):\n        old_tree = deepcopy(tree)\n        for ip in old_tree.keys():\n            if ip.prefixlen() >= limit:\n                del tree[ip]\n        for ip in tree.keys():\n            _delete_subnets(tree[ip], limit)\n\n    tree_nets = deepcopy(tree)\n    _delete_subnets(tree_nets, prefixlen)\n    return tree_nets\n\n\ndef get_subtree(tree, ip):\n    \"\"\"Returns the subtree identified by the arguments ``ip''.\n    None if not found.\"\"\"\n\n    def search_tree(tree, goal):\n        \"\"\"DFS in tree for goal.\"\"\"\n        for node in tree.keys():\n            if node == goal:\n                return tree[node]\n            else:\n                result = search_tree(tree[node], goal)\n                if result is not None:\n                    return result\n\n    return search_tree(tree, ip)\n\n\ndef _is_leaf_node(node):\n    if not node.keys():\n        return True\n    else:\n        return False\n\n\ndef get_max_leaf(tree, max_prefix_length=128):\n    \"\"\"Returns the leaf node with highest prefix length.\n    If several found; returns the first hit.\"\"\"\n\n    def _dfs(tree, maxval):\n        for node in tree.keys():\n            if _is_leaf_node(tree[node]):\n                if maxval.prefixlen() < node.prefixlen() <= max_prefix_length:\n                    maxval = node\n            else:\n                result = _dfs(tree[node], maxval)\n                if maxval.prefixlen() < result.prefixlen() <= max_prefix_length:\n                    maxval = result\n        return maxval\n\n    root = next(iter(tree.keys()))\n    return _dfs(tree, root)\n\n\ndef extract_subtrees_with_prefix_length(tree, prefixlen):\n    \"\"\"Returns a map of subtrees with length prefixlen. Generated from\n    tree\"\"\"\n    keys = extract_subnets_with_prefix_length(tree, prefixlen)\n    result = {}\n    for key in keys:\n        result[key] = get_subtree(tree, key)\n    return result\n\n\ndef extract_subnets_with_prefix_length(tree, prefixlen):\n    \"\"\"Returns a list of subtrees with length prefix lehgth.\n\n    Note: Use extract_subtrees_with_prefix_length if you want the trees\n    and not the IPs.\n\n    \"\"\"\n\n    def _iterator(tree, prefixlen, acc):\n        for net in tree.keys():\n            if net.prefixlen() == prefixlen:\n                acc.append(net)\n            if net.prefixlen() < prefixlen:\n                _iterator(tree[net], prefixlen, acc)\n\n    acc = []\n    _iterator(tree, prefixlen, acc)\n    return acc\n"
  },
  {
    "path": "python/nav/report/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV Report subsystem package placeholder.\"\"\"\n"
  },
  {
    "path": "python/nav/report/dbresult.py",
    "content": "#\n# Copyright (C) 2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Represents the meta information and result from a database query.\"\"\"\n\nimport psycopg2\n\nfrom nav import db\n\n\nclass DatabaseResult(object):\n    \"\"\"The results obtained from the database\"\"\"\n\n    def __init__(self, report_config):\n        \"\"\"Does everything in the constructor. queries and returns the values\n        from the database, according to the configuration\n\n        :param report_config: a ReportConfig object containing the SQL query.\n\n        \"\"\"\n        self.sql = \"\"\n        self.result = []\n        self.rowcount = 0\n        self.sums = {}\n        self.error = \"\"\n        self.hidden = []\n\n        connection = db.getConnection('default')\n        cursor = connection.cursor()\n\n        self.sql, self.parameters = report_config.make_sql()\n\n        # Make a dictionary of which columns to summarize\n        self.sums = {sum_key: '' for sum_key in report_config.sum}\n\n        try:\n            cursor.execute(self.sql, self.parameters or None)\n            self.result = cursor.fetchall()\n\n            # A list of the column headers.\n            report_config.sql_select = [col.name for col in cursor.description]\n\n            # Total count of the rows returned.\n            self.rowcount = len(self.result)\n\n        except psycopg2.ProgrammingError as error:\n            self.error = (\n                \"There was an unhandled SQL error! There may be \"\n                \"something wrong with the definition of the '{}' \"\n                \"report: {}\".format(report_config.title, error)\n            )\n\n        except psycopg2.DataError as error:\n            self.error = (\n                \"Data error! Some of your input data is of an invalid type: {}\".format(\n                    error\n                )\n            )\n        else:\n            self.error = report_config.error\n\n    def __repr__(self):\n        return \"<{} sql={!r} parameters={!r}>\".format(\n            self.__class__.__name__,\n            self.sql,\n            self.parameters,\n        )\n"
  },
  {
    "path": "python/nav/report/generator.py",
    "content": "#\n# Copyright (C) 2008-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\"\"\"Generates the query and makes the report.\"\"\"\n\nimport io\nimport re\nfrom collections import namedtuple\nfrom operator import attrgetter\nfrom os.path import basename\n\nfrom nav.report.dbresult import DatabaseResult\nfrom nav.report.report import Report\n\nReportTuple = namedtuple('ReportTuple', 'id title description report_files')\n\n\nclass Generator(object):\n    \"\"\"The maker and controller of the generating of a report\"\"\"\n\n    sql = None\n\n    def make_report(self, report_name, config_files, query_dict, config, dbresult):\n        \"\"\"Makes a report\n\n        :param report_name: the name of the report that will be represented\n        :param config_files: a list of all configuration files, sorted\n        :param queryDict: mutable QueryDict\n        :param config: the parsed configuration object, if cached\n        :param dbresult: the database result, if cached\n\n        :returns: a formatted report object and search parameters. Also returns\n                  a parsed ReportConfig object and a DatabaseResult object to\n                  be cached.\n\n        \"\"\"\n        args = dict(query_dict.items())\n        advanced = 0\n\n        if not config:\n            conf_parser = ConfigParser(config_files)\n            parse_ok = conf_parser.parse_report(report_name)\n            config = conf_parser.configuration\n            if not parse_ok:\n                return None, None, None, None, None, None, None\n\n        arg_parser = ArgumentParser(config)\n\n        # Remove non-query arguments\n        to_remove = [\"export\", \"page_size\", \"page_number\"]\n        for arg in to_remove:\n            if arg in args:\n                del args[arg]\n\n        # Special cases\n        if \"exportcsv\" in args:\n            del args[\"exportcsv\"]\n            # Export *everything* in CSV file\n            args[\"offset\"] = 0\n            args[\"limit\"] = 0\n\n        if \"adv\" in args:\n            if args[\"adv\"]:\n                advanced = 1\n            del args[\"adv\"]\n\n        (contents, neg, operator) = arg_parser.parse_query(args)\n\n        # Check if there exists a cached database result for this query\n        if dbresult:  # Cached\n            report = Report(config, dbresult, query_dict)\n            report.titlebar = report_name + \" - report - NAV\"\n\n            return report, contents, neg, operator, advanced\n\n        else:  # Not cached\n            dbresult = DatabaseResult(config)\n            self.sql = dbresult.sql\n\n            report = Report(config, dbresult, query_dict)\n            report.titlebar = report_name + \" - report - NAV\"\n\n            return report, contents, neg, operator, advanced, config, dbresult\n\n\nclass ReportList(object):\n    def __init__(self, config_files):\n        self.reports = []\n        report_dict = {}\n\n        report_pattern = re.compile(r\"^\\s*(\\S+)\\s*\\{(.*?)\\}$\", re.M | re.S | re.I)\n        for config_file in config_files:\n            contents = io.open(config_file, encoding='utf-8').read()\n            for report in report_pattern.findall(contents):\n                if report[0] in report_dict:\n                    # overwrite configtext, but add config_file to list\n                    report_dict[report[0]][0] = report[1]\n                    report_dict[report[0]][1].append(basename(config_file))\n                else:\n                    report_dict[report[0]] = [\n                        report[1],\n                        [basename(config_file)],\n                    ]\n\n        parser = ConfigParser(config_files)\n\n        for report_id, [configtext, report_files] in report_dict.items():\n            parser.parse_configuration(configtext)\n            report = parser.configuration\n\n            self.reports.append(\n                ReportTuple(\n                    report_id,\n                    report.title or report_id,\n                    report.description or \"\",\n                    report_files,\n                )\n            )\n\n        self.reports.sort(key=attrgetter(\"id\"))\n\n    def get_report_list(self):\n        return self.reports\n\n\nclass ConfigParser(object):\n    \"\"\"\n    Loads the configuration files, parses the contents, and returns the results as a\n    ReportConfig object instance\n    \"\"\"\n\n    def __init__(self, config_files):\n        \"\"\"Loads the configuration files\"\"\"\n        self.config_files = config_files\n        self.config_list = []\n        self.configuration = ReportConfig()\n\n    def parse_report(self, report_name):\n        \"\"\"Parses the configuration files and returns a Report object according\n        to the report_name.\n\n        :param report_name: the name of the report, tells which part of\n                            configuration files to use when making a\n                            ReportConfig\n\n        :returns: 1 when there was a report with that name, 0 otherwise\n\n        the access methods will probably fit here\n        \"\"\"\n\n        if not self.config_list:\n            self.config_list = [\n                io.open(config_file, encoding=\"utf-8\").read()\n                for config_file in self.config_files\n            ]\n        report_pattern = re.compile(\n            r\"^\\s*\" + report_name + r\"\\s*\\{(.*?)\\}$\", re.M | re.S | re.I\n        )\n        matches = (report_pattern.search(config) for config in self.config_list)\n        matches = [m for m in matches if m]\n\n        for match in matches:\n            # Later matches will override earlier matches:\n            self.parse_configuration(match.group(1))\n\n        if matches:\n            self.configuration.report_id = report_name\n            return True\n        else:\n            return False\n\n    def parse_configuration(self, report_config):\n        \"\"\"Parses the right portion of the configuration and builds a\n        ReportConfig object, stone by stone.\n\n        :param report_config: the part of the configuration to build the\n                             configuration from\n\n        \"\"\"\n\n        conf_pattern = re.compile(r'^\\s*\\$(\\S*)\\s*\\=\\s*\"(.*?)\"\\;?', re.M | re.S)\n        conf_match = conf_pattern.findall(report_config)\n\n        config = self.configuration\n\n        for line in conf_match:\n            key = line[0]\n            value = line[1].replace('\\n', ' ').strip()\n\n            if key == \"sql\" or key == \"query\":\n                config.sql = value\n            elif key == \"title\":\n                config.title = value\n            elif key == \"order_by\" or key == \"sort\":\n                config.order_by = value.split(\",\") + config.order_by\n            elif key == \"skjul\" or key == \"hidden\" or key == \"hide\":\n                config.hidden.extend(value.split(\",\"))\n            elif key == \"ekstra\" or key == \"extra\":\n                config.extra.extend(value.split(\",\"))\n            elif key == \"sum\" or key == \"total\":\n                config.sum.extend(value.split(\",\"))\n            elif key == \"description\":\n                config.description = value\n            else:\n                group_pattern = re.compile(r'^(?P<group>\\S+?)_(?P<groupkey>\\S+?)$')\n                match = group_pattern.search(key)\n\n                if match:\n                    if match.group('group') == \"navn\" or match.group('group') == \"name\":\n                        config.name[match.group('groupkey')] = value\n                    elif match.group('group') == \"url\" or match.group('group') == \"uri\":\n                        config.uri[match.group('groupkey')] = value\n                    elif (\n                        match.group('group') == \"forklar\"\n                        or match.group('group') == \"explain\"\n                        or match.group('group') == \"description\"\n                    ):\n                        config.explain[match.group('groupkey')] = value\n\n                else:\n                    config.where.append(key + \"=\" + value)\n\n\nclass ArgumentParser(object):\n    \"\"\"Handler of the uri arguments\"\"\"\n\n    GROUP_PATTERN = re.compile(r\"^(?P<group>\\S+?)_(?P<groupkey>\\S+?)$\")\n\n    def __init__(self, configuration):\n        \"\"\"Initializes the configuration\"\"\"\n        # config is the config obtained from the config file\n        self.config = configuration\n        self.fields = {}\n        self.negated = {}\n        self.operator = {}\n\n    def parse_query(self, query):\n        \"\"\"Parses the arguments of the uri, and modifies the\n        ReportConfig-object configuration.\n\n        :param query: a dict representing the argument-part of the uri\n\n        \"\"\"\n        self._parse_arguments(query)\n        self._parse_fields()\n\n        return self.fields, self.negated, self.operator\n\n    def _parse_arguments(self, query):\n        for argument, value in query.items():\n            self._parse_single_argument(argument, value)\n\n    def _parse_single_argument(self, arg, value):\n        if arg == \"title\":\n            self.config.title = value\n        elif arg in (\"order_by\", \"sort\"):\n            self.config.order_by = value.split(\",\") + self.config.order_by\n        elif arg in (\"skjul\", \"hidden\", \"hide\"):\n            self.config.hidden.extend(value.split(\",\"))\n        elif arg in (\"ekstra\", \"extra\"):\n            self.config.extra.extend(value.split(\",\"))\n        elif arg in (\"sum\", \"total\"):\n            self.config.sum.extend(value.split(\",\"))\n        elif arg == \"offset\":\n            self.config.offset = value\n        elif arg == \"limit\":\n            self.config.limit = value\n        else:\n            if not self._parse_argument_as_group(arg, value) and value:\n                self.fields[arg] = value\n\n    def _parse_argument_as_group(self, arg, value):\n        match = self.GROUP_PATTERN.search(arg)\n        if not match:\n            return False\n\n        group = match.group('group')\n        group_key = match.group('groupkey')\n        if group in (\"navn\", \"name\"):\n            self.config.name[group_key] = value\n        elif group in (\"url\", \"uri\"):\n            self.config.uri[group_key] = value\n        elif group in (\"forklar\", \"explain\", \"description\"):\n            self.config.explain[group_key] = value\n        elif group == \"not\":\n            self.negated[group_key] = value\n        elif group == \"op\":\n            self.operator[group_key] = value\n        else:\n            return False\n\n        return True\n\n    def _parse_fields(self):\n        for field, value in self.fields.items():\n            self._parse_single_field(field, value)\n\n    def _parse_single_field(self, field, value):\n        if field not in self.operator:\n            self.operator[field] = \"eq\"\n        # Set a default operator\n        operat = \"=\"\n        negate = \"not \" if field in self.negated else \"\"\n        multi = False\n\n        if value == \"null\":\n            operat, negate = (\"is not\", \"\") if negate else (\"is\", negate)\n            value = None\n        else:\n            fieldoper = self.operator[field]\n            if fieldoper == \"eq\":\n                operat, negate = (\"<>\", \"\") if negate else (\"=\", negate)\n            elif fieldoper == \"like\":\n                operat = \"ilike\"\n                value = value.replace(\"*\", \"%\")\n            elif fieldoper == \"gt\":\n                operat, negate = (\"<=\", \"\") if negate else (\">\", negate)\n\n            elif fieldoper == \"geq\":\n                operat, negate = (\"<\", \"\") if negate else (\">=\", negate)\n            elif fieldoper == \"lt\":\n                operat, negate = (\">=\", \"\") if negate else (\"<\", negate)\n            elif fieldoper == \"leq\":\n                operat, negate = (\">\", \"\") if negate else (\"<=\", negate)\n            elif fieldoper == \"in\":\n                if \"*\" in value:\n                    operat = \"ilike\"\n                    value = [elem.replace(\"*\", \"%\") for elem in value.split(\",\")]\n                    multi = True\n                else:\n                    operat = \"in\"\n                    value = tuple(value.split(\",\"))\n\n            elif fieldoper == \"between\":\n                operat = \"between %s and\"\n                between = value.split(\",\")\n                if not len(between) == 2:\n                    between = value.split(\":\")\n                if len(between) == 2:\n                    value = between\n                else:\n                    self.config.error = (\n                        \"The arguments to 'between' must be comma- or colon-separated\"\n                    )\n                    value = [None, None]\n\n        where_string = f\"{field} {negate}{operat} %s\"\n        if multi:\n            _combinator = \" and \" if negate else \" or \"\n            where_string = f\"({_combinator.join(where_string for _ in value)})\"\n        self.config.where.append(where_string)\n        if isinstance(value, list):\n            self.config.parameters.extend(value)\n        else:\n            self.config.parameters.append(value)\n\n\nclass ReportConfig(object):\n    def __init__(self):\n        self.description = \"\"\n        self.explain = {}\n        self.extra = []\n        self.hidden = []\n        self.limit = \"\"\n        self.name = {}\n        self.offset = \"\"\n        self.order_by = []\n        self.sql = None\n        self.sql_select = []\n        self.sum = []\n        self.title = \"\"\n        self.uri = {}\n        self.where = []\n        self.parameters = []\n        self.report_id = ''\n        self.error = None\n\n    def __repr__(self):\n        template = (\n            \"<ReportConfig sql={0!r}, sql_select={1!r}, where={2!r}, \"\n            \"parameters={3!r}, order_by={4!r} >\"\n        )\n        return template.format(\n            self.sql, self.sql_select, self.where, self.parameters, self.order_by\n        )\n\n    def make_sql(self):\n        sql = \"SELECT * FROM (%s) AS foo %s%s\" % (\n            self.escaped_sql,\n            self.wherestring(),\n            self.orderstring(),\n        )\n        return sql, self.parameters\n\n    def wherestring(self):\n        where = self.where\n        if where:\n            alias_remover = re.compile(r\"(.+)\\s+AS\\s+\\S+\", re.I)\n            where = [alias_remover.sub(r\"\\g<1>\", word) for word in where]\n            return \" WHERE \" + \" AND \".join(where)\n        else:\n            return \"\"\n\n    def orderstring(self):\n        def _transform(arg):\n            if arg.startswith(\"-\"):\n                arg = \"%s DESC\" % arg.replace(\"-\", \"\")\n            return arg\n\n        sort = [_transform(s) for s in self.order_by]\n        return \" ORDER BY %s\" % \",\".join(sort) if sort else \"\"\n\n    @property\n    def escaped_sql(self):\n        \"\"\"Returns an 'escaped' version of the configured SQL statement.\n        Wildcard signs, '%' are doubles, as to not interfer with parameter\n        references when feeding the psycopg2 driver.\n\n        \"\"\"\n        if self.sql:\n            return self.sql.replace(\"%\", \"%%\")\n"
  },
  {
    "path": "python/nav/report/matrix.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Builds the prefix matrix.\"\"\"\n\nfrom collections import namedtuple\nimport logging\nimport math\n\nimport IPy\n\nfrom django.urls import reverse\n\nfrom nav.metrics.templates import metric_path_for_prefix\nfrom nav.metrics.graphs import get_simple_graph_url\nfrom nav.report import metaIP, IPtools, IPtree\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass Cell(object):\n    \"\"\"Represents a table cell in subnet matrix\"\"\"\n\n    def __init__(self, **kwargs):\n        self.prefixid = kwargs.get('prefixid', '')\n        self.colspan = kwargs.get('colspan', 1)\n        self.rowspan = kwargs.get('rowspan', 1)\n        self.content = kwargs.get('content', '&nbsp;')\n        self.is_empty = kwargs.get('is_empty', False)\n        self.netaddr = kwargs.get('netaddr')\n        self.dataurl = kwargs.get('dataurl')\n        self.link = kwargs.get('link')\n\n\nLink = namedtuple('Link', ('href', 'text', 'title'))\n\n\nclass Matrix(object):\n    \"\"\"This class is \"abstract\" and should not be instansiated directly.\n\n    Superclass with usefull methods for IP matrices.\n\n    Direct known subclasses:\n            nav.report.matrixIPv6\n            nav.report.matrixIPv4\n    \"\"\"\n\n    Node = namedtuple('Node', 'net subnets')\n\n    def __init__(self, start_net, end_net=None, bits_in_matrix=3):\n        if end_net is None:\n            end_net = IPtools.getLastSubnet(start_net)\n        self.start_net = start_net\n        self.end_net = end_net\n        self.bits_in_matrix = bits_in_matrix\n        self.tree = IPtree.build_tree(\n            start_net, end_net, bits_in_matrix=bits_in_matrix, add_missing_nets=True\n        )\n        self.tree_nets = self.extract_tree_nets()\n        self.matrix_nets = self.extract_matrix_nets()\n        self.heading_colspan = 1\n        self.nodes = None\n        self.num_columns = None\n        self.column_headings = None\n\n    def build(self):\n        \"\"\"Builds the datastructure for the template to render\n\n        Must be overriden and implemented by subclasses\n        \"\"\"\n        raise NotImplementedError('Must be implemented in subclass')\n\n    def has_too_small_nets(self, net):\n        \"\"\"\n        Returns True if argument ``net'' has too many small subnets for the\n        matrix.\n        \"\"\"\n        for net in IPtree.get_subtree(self.tree, net):\n            if net.prefixlen() > self.end_net.prefixlen():\n                return True\n        return False\n\n    def extract_matrix_nets(self):\n        \"\"\"These should be shown as horizontal rows in the matrix.\"\"\"\n        return IPtree.extract_subtrees_with_prefix_length(\n            self.tree, self.end_net.prefixlen() - self.bits_in_matrix\n        )\n\n    def extract_tree_nets(self):\n        \"\"\"These should be listed vertically in the leftmost column.\"\"\"\n        return IPtree.remove_subnets_with_prefixlength(\n            self.tree, self.end_net.prefixlen() - self.bits_in_matrix + 1\n        )\n\n    def _colspan(self, ip):\n        return min(\n            self.num_columns,\n            int(math.pow(2, self.end_net.prefixlen() - ip.prefixlen())),\n        )\n\n    def _get_row_size(self):\n        \"\"\"Gets the prefixlength for a row\"\"\"\n        return self.end_net.prefixlen() - self.bits_in_matrix\n\n    def _create_data_row(self, subnet):\n        \"\"\"Create a data row containing a list of cells\n\n        :rtype: list[Cell]\n        \"\"\"\n        if self.has_too_small_nets(subnet):\n            return [self._create_too_small_subnets_cell()]\n\n        elif self.matrix_nets[subnet]:\n            # this subnet is divided into parts\n            host_nybbles_map = IPtools.getLastbitsIpMap(\n                list(self.matrix_nets[subnet].keys())\n            )\n            return self._add_child_nets(host_nybbles_map)\n\n        else:\n            # this subnet spans the whole row\n            meta = metaIP.MetaIP(subnet)\n            return [self._create_cell(subnet, meta)]\n\n    def _add_child_nets(self, host_nybbles_map):\n        next_header_idx = -1\n        cells = []\n        for i in self.column_headings:\n            if self.column_headings.index(i) < next_header_idx:\n                continue\n\n            key = i.lower()\n            if key in host_nybbles_map:\n                ip = host_nybbles_map[key]\n                meta = metaIP.MetaIP(ip)\n                matrix_cell = self._create_cell(ip, meta, key=key)\n                next_header_idx = self.column_headings.index(i) + int(self._colspan(ip))\n            else:\n                matrix_cell = Cell(is_empty=True)\n            cells.append(matrix_cell)\n\n        return cells\n\n    def _create_cell(self, ip, meta, rowspan=1, key=0):\n        \"\"\"Creates a table cell based on ip\"\"\"\n        return Cell(\n            prefixid=meta.prefixid,\n            colspan=self._colspan(ip),\n            rowspan=rowspan,\n            content=self._get_content(key, ip),\n            dataurl=self._get_prefix_url(ip),\n            netaddr=ip,\n        )\n\n    @staticmethod\n    def _create_empty_cell():\n        return Cell(colspan=80, color=None, is_empty=True)\n\n    def _create_index_cell(self, subnet, link=True):\n        \"\"\"Creates the cell for the first column in the matrix\n\n        This cell typically displays the subnet\n\n        :param link: If the cell should contain a link to subnet or not\n        \"\"\"\n        if link:\n            return Cell(link=self._netlink(subnet))\n        else:\n            return Cell(content=metaIP.MetaIP(subnet).getTreeNet())\n\n    def _create_too_small_subnets_cell(self):\n        return Cell(\n            colspan=self.num_columns,\n            color=self._get_color('large'),\n            link=self._get_too_small_net_link(),\n        )\n\n    def _add_large_subnet(self, subnet, matrix_row):\n        \"\"\"Adds correct rowspan to cell for large nets\"\"\"\n        meta = metaIP.MetaIP(subnet)\n        rowspan = 2 ** (self._get_row_size() - subnet.prefixlen())\n        matrix_row.append(self._create_cell(subnet, meta, rowspan=rowspan))\n\n        # Return the number of extra rows that need to be made\n        return rowspan - 1\n\n    def _create_extra_rows(self, num_extra_rows, subnet):\n        extra_nets = []\n        row_net = IPy.IP('{}/{}'.format(subnet.net(), self._get_row_size()))\n        for _ in range(num_extra_rows):\n            row_net = IPtools.get_next_subnet(row_net)\n            extra_nets.append([self._create_index_cell(row_net, link=False)])\n        return extra_nets\n\n    @staticmethod\n    def _get_content(key, ip):\n        raise NotImplementedError\n\n    @staticmethod\n    def _netlink(ip, append_term_and_prefix=False):\n        raise NotImplementedError\n\n    def _get_too_small_net_link(self):\n        \"\"\"Creates a link to the next drill down net\"\"\"\n        link = reverse('report-matrix-scope', args=[self.end_net])\n        return Link(link, 'Too many small nets', 'Go to matrix for smaller prefix')\n\n    @staticmethod\n    def _get_color(nettype):\n        \"\"\"Gets the css-class name added to the cell based on usage\"\"\"\n\n        if nettype == 'static' or nettype == 'scope' or nettype == 'reserved':\n            return 'subnet_other'\n        elif nettype == 'large':\n            return 'subnet_large'\n\n    @staticmethod\n    def _get_prefix_url(prefix):\n        return get_simple_graph_url(\n            [metric_path_for_prefix(prefix.strCompressed(), 'ip_count')], format='json'\n        )\n"
  },
  {
    "path": "python/nav/report/matrixIPv4.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This class serves as an interface for the prefix matrix.\"\"\"\n\nimport logging\n\nfrom django.urls import reverse\n\nfrom nav.django.templatetags.report import report\nfrom nav.report import IPtools, metaIP\nfrom nav.report.matrix import Matrix, Link, Cell\n\n_logger = logging.getLogger(__name__)\n\n\nclass MatrixIPv4(Matrix):\n    \"\"\"This class serves as an interface for the prefix matrix.\"\"\"\n\n    def __init__(\n        self, start_net, show_unused_addresses, end_net=None, bits_in_matrix=3\n    ):\n        Matrix.__init__(self, start_net, end_net=end_net, bits_in_matrix=bits_in_matrix)\n        self.column_headings = self._get_column_headers()\n        self.visible_column_headings = self.column_headings[::4]\n        self.num_columns = len(self.column_headings)\n        self.show_unused_addresses = show_unused_addresses\n        self.heading_colspan = 4\n\n    def build(self):\n        nets = IPtools.sort_nets_by_address(self.tree_nets.keys())\n        self.nodes = [\n            self.Node(net, self._write_subnets(net, self.tree_nets[net]))\n            for net in nets\n        ]\n\n    def _write_subnets(self, net, nets):\n        \"\"\"Create a subnet structure\n\n        :param net: IP instance of prefix to display\n        :param nets: List of nets (rows) that have subnets. The subnets are\n                     located in self.matrix_nets\n        \"\"\"\n\n        large_subnets = []  # When displaying unused addresses, we need to know\n        # about the subnets that span more than one row\n        subnet_matrix = []  # The resulting list of rows to display\n\n        # Initially, create the rows (subnets) we're going to display\n        if self.show_unused_addresses:\n            row_size = self._get_row_size()\n            subnets = IPtools.create_subnet_range(net, row_size)\n            large_subnets = [x for x in nets.keys() if x.prefixlen() < row_size]\n        else:\n            subnets = IPtools.sort_nets_by_address(nets.keys())\n\n        while subnets:\n            subnet = subnets.pop(0)\n\n            matrix_row = []  # contains all cells in the row\n            extra_rows = []  # For large nets\n\n            matrix_row.append(self._create_index_cell(subnet))\n\n            if subnet in self.matrix_nets:\n                # We have data for this subnet, create cells for that data\n                matrix_row.extend(self._create_data_row(subnet))\n            else:\n                # Either this subnet is bigger then a row or no subnet\n                # exists here - we need to find out\n\n                if self.show_unused_addresses:\n                    # Find out if this subnet is part of a bigger subnet that\n                    # should be displayed here\n                    index = self._find_large_net(subnet, large_subnets)\n                    if index is not None:\n                        num_extra_rows = self._add_large_subnet(\n                            large_subnets.pop(index), matrix_row\n                        )\n                        extra_rows = self._get_extra_rows(num_extra_rows, subnets)\n                    else:\n                        matrix_row.append(self._create_empty_cell())\n                else:\n                    # This net spans more then one row\n                    num_extra_rows = self._add_large_subnet(subnet, matrix_row)\n                    extra_rows = self._get_extra_rows(num_extra_rows, subnet)\n\n            subnet_matrix.append(matrix_row)\n\n            # These rows needs to be added after the main row is created for\n            # nets that span more then one row\n            subnet_matrix.extend(extra_rows)\n\n        return subnet_matrix\n\n    @staticmethod\n    def _find_large_net(subnet, large_subnets):\n        \"\"\"Returns the index of the first large_subnet that overlaps subnet\"\"\"\n        for index, large_net in enumerate(large_subnets):\n            if large_net.overlaps(subnet):\n                return index\n\n    def _get_extra_rows(self, num_extra_rows, thing):\n        \"\"\"Returns the extra rows when dealing with large subnets\n\n        Two cases (thing is different in these two cases):\n        1: if we display unused address rows, we need to pop from the generated\n           subnets.\n        2: when displaying only used, we need to create new rows\n\n        A row consists of a list containing one index cell\n        \"\"\"\n        if self.show_unused_addresses:\n            assert isinstance(thing, list)\n            return [\n                [self._create_index_cell(thing.pop(0), link=False)]\n                for _ in range(num_extra_rows)\n            ]\n        else:\n            return self._create_extra_rows(num_extra_rows, thing)\n\n    def _get_row_size(self):\n        \"\"\"Gets the prefixlength for a row\"\"\"\n        return self.end_net.prefixlen() - self.bits_in_matrix\n\n    def _get_column_headers(self):\n        netsize = self.end_net.len()\n        factor = 32 - self.end_net.prefixlen()\n        return [str((2**factor) * i) for i in range(0, 256 // netsize)]\n        # return [str((2**lsb)*i) for i in range(0, msb)]\n\n    def __repr__(self):\n        return \"%s(%r, %r, %r, %r)\" % (\n            self.__class__.__name__,\n            self.start_net,\n            self.show_unused_addresses,\n            self.end_net,\n            self.bits_in_matrix,\n        )\n\n    @staticmethod\n    def _get_content(nybble, ip):\n        return \".{}/{}\".format(nybble, ip.prefixlen())\n\n    @staticmethod\n    def _netlink(ip, append_term_and_prefix=False):\n        nip = metaIP.MetaIP(ip).getTreeNet()\n        if append_term_and_prefix:\n            url = reverse(\n                'report-matrix-scope',\n                kwargs={'scope': ip.strNormal().replace('/', '%2F')},\n            )\n            text = ip.strNormal()\n        else:\n            url = report(\"prefix\", netaddr=nip + \".*\", op_netaddr=\"like\")\n            text = nip\n        return Link(url, text, 'Go to prefix report')\n\n    def _create_too_small_subnets_cell(self):\n        return Cell(\n            colspan=self.num_columns,\n            color=self._get_color('large'),\n            content='Too many small nets',\n        )\n"
  },
  {
    "path": "python/nav/report/matrixIPv6.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This class serves as an interface for the prefix matrix.\"\"\"\n\nimport logging\n\nfrom nav.django.templatetags.report import report\nfrom nav.report import IPtools, metaIP\nfrom nav.report.matrix import Matrix, Link\n\n_logger = logging.getLogger(__name__)\n\n\nclass MatrixIPv6(Matrix):\n    \"\"\"This class serves as an interface for the prefix matrix.\"\"\"\n\n    def __init__(self, start_net, end_net=None):\n        Matrix.__init__(self, start_net, end_net=end_net, bits_in_matrix=4)\n        self.column_headings = [\"%X\" % i for i in range(0, 16)]\n        self.visible_column_headings = self.column_headings\n        self.num_columns = len(self.column_headings)\n\n    def build(self):\n        nets = IPtools.sort_nets_by_address(self.tree_nets.keys())\n        self.nodes = [\n            self.Node(net, self._write_subnets(self.tree_nets[net])) for net in nets\n        ]\n\n    def _write_subnets(self, net):\n        nodes = IPtools.sort_nets_by_address(net.keys())\n        subnet_matrix = []  # The resulting list of rows to display\n\n        for subnet in nodes:\n            matrix_row = []  # contains all cells in the row\n            extra_rows = []  # For large nets\n\n            matrix_row.append(self._create_index_cell(subnet))\n\n            if subnet in self.matrix_nets:\n                # We have data for this subnet, create cells for that data\n                matrix_row.extend(self._create_data_row(subnet))\n            else:\n                # subnet is larger than row size\n                num_extra_rows = self._add_large_subnet(subnet, matrix_row)\n                extra_rows = self._create_extra_rows(num_extra_rows, subnet)\n\n            subnet_matrix.append(matrix_row)\n            subnet_matrix.extend(extra_rows)\n\n        return subnet_matrix\n\n    @staticmethod\n    def _get_content(nybble, ip):\n        return '{}::/{}'.format(nybble, ip.prefixlen())\n\n    @staticmethod\n    def _netlink(ip, append_term_and_prefix=False):\n        \"\"\"Creates the content for the index row\"\"\"\n        ip = metaIP.MetaIP(ip).getTreeNet()\n        url = report(\"prefix\", netaddr=ip + '*', op_netaddr=\"like\")\n        text = ip + 'x'\n        return Link(url, text, 'Go to prefix report')\n"
  },
  {
    "path": "python/nav/report/metaIP.py",
    "content": "#\n# Copyright (C) 2007-2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Holds meta information on one IPy.IP address.\"\"\"\n\nimport re\nfrom IPy import IP\nfrom nav import db\n\n\nclass MetaIP:\n    \"\"\"Class for holding meta information on one IPy.IP address\"\"\"\n\n    # Class variables for caching\n    MetaMap = None\n\n    def __init__(self, ip):\n        self.netaddr = ip\n        self.prefixid = None\n        self.nettype = None\n\n        if MetaIP.MetaMap is None:\n            MetaIP.MetaMap = self._createMetaMap(ip.version())\n        self._setup()\n\n    @classmethod\n    def invalidateCache(cls):\n        \"\"\"Class method for invalidating the cache between calls from the\n        handler.\"\"\"\n        cls.MetaMap = None\n\n    def getTreeNet(self):\n        \"\"\"This method is used to get the string representation of the IP\n        shown in the tree to left of the prefix matrix.\"\"\"\n\n        # IPv6: Whole address\n        # IPv4: Not whole address\n        if self.netaddr.version() == 6:\n            return self._getTreeNetIpv6()\n        elif self.netaddr.version() == 4:\n            return self._getTreeNetIpv4()\n\n    def _getTreeNetIpv4(self):\n        \"\"\"Remove host octet.\"\"\"\n        netaddr_string = self.netaddr.net().strNormal()\n        return netaddr_string[: netaddr_string.rfind(\".\")]\n\n    def _getTreeNetIpv6(self):\n        netaddr = self.netaddr\n        index = self.netaddr.prefixlen() // 4  # Index for where the addresses start\n        address_part = netaddr.strFullsize().replace(':', '')[:index]\n        ipstr = \":\".join(\n            [\n                address_part[i : i + 4].lstrip('0')\n                for i in range(0, len(address_part), 4)\n            ]\n        )\n        return re.sub(':{3,}', '::', ipstr)  # remove superfluous colon\n\n    @staticmethod\n    def _createMetaMap(family):\n        sql = (\n            \"\"\"SELECT prefixid, nettype, netaddr\n                 FROM prefix LEFT JOIN vlan USING (vlanid)\n                 WHERE family(netaddr) = %s\"\"\"\n            % family\n        )\n        cursor = db.getConnection('default', 'manage').cursor()\n        cursor.execute(sql)\n        rows = cursor.fetchall()\n        result = {}\n        for row in rows:\n            result[IP(row[2])] = {\n                \"prefixid\": row[0],\n                \"nettype\": row[1],\n            }\n\n        return result\n\n    def _setup(self):\n        if self.netaddr in MetaIP.MetaMap:\n            metainfo = MetaIP.MetaMap[self.netaddr]\n            self.prefixid = metainfo[\"prefixid\"]\n            self.nettype = metainfo[\"nettype\"]\n\n\nclass UnexpectedRowCountError(Exception):\n    pass\n"
  },
  {
    "path": "python/nav/report/report.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\"\"\"Representing a report object.\"\"\"\n\nimport re\nfrom urllib.parse import quote\n\n\nclass Field(object):\n    def __init__(self):\n        self.title = \"\"\n        self.raw = \"\"\n\n    def __repr__(self):\n        return \"<Field %s = %s>\" % (self.title, self.raw)\n\n\nclass Report(object):\n    \"\"\"A nice formatted Report object, ready for presentation\"\"\"\n\n    def __init__(self, configuration, database, query_dict):\n        \"\"\"The constructor of the Report class\n\n        :param configuration: a ReportConfig object containing all the\n                              configuration\n        :param database: a DatabaseResult object that will be modified\n                         according to the configuration\n        :param query_dict: mutable Query Dict\n\n        \"\"\"\n\n        self.rowcount = database.rowcount\n        self.sums = database.sums\n        self.report_id = configuration.report_id\n\n        self.limit = int(str((self.set_limit(configuration.limit))))\n        self.offset = int(str(self.set_offset(configuration.offset)))\n\n        # oh, the smell, it kills me!\n        if self.limit:\n            self.formatted = database.result[self.offset : self.limit + self.offset]\n        else:\n            self.formatted = database.result\n        self.dbresult = database.result\n\n        self.query_args = self.strip_pagination_arguments(query_dict)\n\n        self.title = configuration.title\n        self.hide = configuration.hidden\n        self.extra = configuration.extra\n\n        self.name = configuration.name\n        self.explain = configuration.explain\n        self.uri = configuration.uri\n\n        self.fields = configuration.sql_select + self.extra\n        self.sql_fields = configuration.sql_select\n        (self.field_name_map, self.field_num_map) = self.build_field_maps(self.fields)\n        self.fields_count = len(self.fields)\n        self.shown = self.hide_index()\n\n        self.uri = self.remake_uri(self.uri)\n\n        self.table = self.make_table_contents()\n        footers = self.make_table_footers(self.sums)\n        self.table.set_footers(footers)\n        headers = self.make_table_headers(\n            self.name, self.explain, configuration.order_by\n        )\n        self.table.set_headers(headers)\n\n        self.form = self.make_form(self.name)\n        self.database_error = database.error\n\n    def set_limit(self, limit):\n        \"\"\"Returns the limit according to the configuration, or the default.\n\n        :param limit: the configured limit or None\n        :returns: the configured limit or 1000\n\n        \"\"\"\n        if limit or limit == 0:\n            return limit\n        else:\n            return 100000\n\n    def set_offset(self, offset):\n        \"\"\"Returns the offset according to the configuration, or the default.\n\n        :param offset: the configured offset or None\n        :returns: the configured offset or 0\n        \"\"\"\n        if offset:\n            return offset\n        else:\n            return 0\n\n    def strip_pagination_arguments(self, query_dict):\n        \"\"\"removes the 'limit' and 'offset' arguments from the query_dict\n\n        :param query_dict: a dict-like object.\n        :returns: the modified query_dict instance.\n\n        \"\"\"\n        strippable = ('limit', 'offset')\n        for field in strippable:\n            if field in query_dict:\n                del query_dict[field]\n        return query_dict\n\n    def build_field_maps(self, fields):\n        \"\"\"Returns two dicts mapping field numbers and names to each other.a\n\n        :param fields: a list containing the field names\n        :returns: (dict(fields_by_name), dict(fields_by_number)\n\n        \"\"\"\n        fields_by_name = {}\n        fields_by_number = {}\n\n        for number, name in enumerate(fields):\n            fields_by_name[name] = number\n            fields_by_number[number] = name\n\n        return fields_by_name, fields_by_number\n\n    def remake_uri(self, uri):\n        \"\"\"takes a dict of uris associated to their names, and returns a dict\n        of uris associated to their field numbers. this is a more effective\n        approach than doing queries to a dictionary.\n\n        :param uri: a dict of fieldnames and their uris\n        :returns: a dict of fieldnumbers and their uris\n\n        \"\"\"\n        uri_hash = uri\n        uri_new = {}\n\n        for key, value in uri_hash.items():\n            if self.fields.count(key):\n                key_index = self.fields.index(key)\n\n                if self.shown.count(key_index):\n                    uri_new[key_index] = value\n\n        return uri_new\n\n    def make_table_headers(self, names, explain, sort_fields=None):\n        \"\"\"Makes the table headers.\n\n        :param names: a dict mapping field names to field numbers\n        :param explain: a dict mapping field names to their explanations\n\n        :returns: a list of cells that later will represent the headers of the\n                  table\n\n        \"\"\"\n        headers = Headers()\n        sorted_field = sort_fields[0] if sort_fields else None\n\n        # for each of the cols that will be displayed\n        for header in self.shown:\n            # get the names of it\n            title = self.fields[header]\n\n            if sorted_field == title:\n                self.query_args['sort'] = '-' + title\n                self.query_args['order_by'] = '-' + title\n            else:\n                self.query_args['sort'] = title\n                self.query_args['order_by'] = title\n\n            uri = \"?{0}\".format(self.query_args.urlencode())\n\n            # look up explanation before overriding title with display name,\n            # since the explain dict is keyed by the original SQL field name\n            explanation = explain.get(title, \"\")\n            title = names.get(title, title)\n\n            field = Cell(title, uri, explanation)\n            headers.append(field)\n\n        return headers\n\n    def make_table_footers(self, sums):\n        \"\"\"Makes the table footers. ie. the sums of the columns if specified.\n\n        :param sums: a list containing the numbers of the fields that will be\n                     summed.\n\n        :returns: a list of cells that later will represent the footers of the\n                  table\n\n        \"\"\"\n        footers = Footers()\n\n        # for each of the cols that will be displayed\n        for footer in self.shown:\n            # get the name of it\n            title = self.fields[footer]\n\n            this_sum = Cell()\n\n            # change if the name exist in the overrider hash\n            if title in sums:\n                # Sum the results for a given title\n                part_sum = 0\n                for fmt in self.formatted:\n                    if fmt[footer] is not None:\n                        part_sum += int(str(fmt[footer]))\n\n                total_sum = 0\n                for res in self.dbresult:\n                    if res[footer] is not None:\n                        total_sum += int(str(res[footer]))\n\n                if part_sum == total_sum:\n                    this_sum.set_sum(str(part_sum))\n\n                elif sums[title] == 0:\n                    this_sum.set_sum(\"0\")\n\n                else:\n                    this_sum.set_sum(str(part_sum) + \"/\" + str(total_sum))\n\n            footers.append(this_sum)\n\n        return footers\n\n    def hide_index(self):\n        \"\"\"Makes a copy of the list of all fields where those that will be\n        hidden is ignored\n\n        :returns: the list of fields that will be displayed in the report.\n\n        \"\"\"\n        shown = []\n        for field in range(0, self.fields_count):\n            if not self.hide.count(self.fields[field]):\n                shown.append(field)\n\n        return shown\n\n    def make_table_contents(self):\n        \"\"\"Makes the contents of the table of the report.\n\n        :returns: a table containing the data of the report (without header\n                  and footer etc)\n\n        \"\"\"\n        link_pattern = re.compile(r\"\\$(.+?)(?:$|\\$|&|\\\"|\\'|\\s|;|/)\", re.M)\n\n        newtable = Table()\n        for line in self.formatted:\n            newline = Row()\n            for field in self.shown:\n                newfield = Cell()\n\n                # the number of fields shown may be larger than the size\n                # of the tuple returned from the database\n                try:\n                    if self.extra.count(self.field_num_map[field]):\n                        text = self.fields[field]\n                    else:\n                        text = line[field]\n\n                except KeyError:\n                    text = \"feil\"\n\n                newfield.set_text(text)\n\n                if field in self.uri:\n                    uri = self.uri[field]\n\n                    links = link_pattern.findall(uri)\n                    if links:\n                        for column_ref in links:\n                            value = str(line[self.field_name_map[column_ref]]) or \"\"\n                            pattern = '$' + column_ref\n                            uri = uri.replace(pattern, quote(value))\n                    newfield.set_hyperlink(uri)\n\n                newline.append(newfield)\n\n            newtable.append(newline)\n\n        return newtable\n\n    def make_form(self, name):\n        form = []\n\n        for num, field_name in self.field_num_map.items():\n            field = None\n            # does not use aggregate function elements\n            if not self.extra.count(field_name) and not self.sql_fields[num].count(\"(\"):\n                field = Field()\n                field.raw = self.sql_fields[num]\n                if field_name in name:\n                    field.title = name[field_name]\n                else:\n                    field.title = field_name\n\n                form.append(field)\n\n        return form\n\n\nclass Table(object):\n    \"\"\"A table that will contain the results of the report\"\"\"\n\n    def __init__(self):\n        self.rows = []\n        self.header = []\n        self.footer = []\n\n    def append(self, row):\n        \"\"\"Appends a row to the table\n\n        :param row: the row to be appended to the table\n\n        \"\"\"\n        self.rows.append(row)\n\n    def extend(self, rows):\n        \"\"\"Extends the table with a list of rows\n\n        :param rows: the list of rows to append to the table\n\n        \"\"\"\n        self.rows.extend(rows)\n\n    def set_headers(self, headers):\n        \"\"\"Sets the headers of the table\n\n        :param headers: the list of cells that represents the headers\n\n        \"\"\"\n        self.header = headers\n\n    def set_footers(self, footers):\n        \"\"\"Sets the footers of the table\n\n        :param footers: the list of cells that represents the footers (the\n                        bottom line)\n\n        \"\"\"\n        self.footer = footers\n\n    def set_contents(self, contents):\n        \"\"\"Sets the contents of the table\n\n        :param contents: the new contents of the table\n\n        \"\"\"\n        self.rows = contents\n\n\nclass Row(object):\n    \"\"\"A row of a table\"\"\"\n\n    def __init__(self):\n        self.cells = []\n\n    def append(self, cell):\n        \"\"\"Appends a cell to the row\n\n        :param cell : the cell to be appended\n\n        \"\"\"\n        self.cells.append(cell)\n\n\nclass Cell(object):\n    \"\"\"One cell of the table\"\"\"\n\n    text = uri = explanation = sum = None\n\n    def __init__(self, text=\"\", uri=\"\", explanation=\"\"):\n        self.set_text(text)\n        self.set_hyperlink(uri)\n        self.set_explanation(explanation)\n        self.sum = \"\"\n\n    def set_text(self, text):\n        \"\"\"Sets the contents of the cell to the text specified\n\n        :param text : the text to be used\n\n        \"\"\"\n        self.text = unicode_utf8(text)\n\n    def set_hyperlink(self, url):\n        \"\"\"Sets an URL to use as a hyperlink from the cell\n\n        :param url: the text to be used as the url\n\n        \"\"\"\n        self.uri = unicode_utf8(url)\n\n    def set_explanation(self, explanation):\n        \"\"\"Sets the explanation of the column to the text specified\n\n        :param explanation : the text to be used as the explanation\n\n        \"\"\"\n        self.explanation = unicode_utf8(explanation)\n\n    def set_sum(self, colsum):\n        \"\"\"Sets the colsum of the column to the text specified\n\n        :param colsum: the text to be used as the colsum of the column\n\n        \"\"\"\n        self.sum = unicode_utf8(colsum)\n\n\nclass Headers(object):\n    \"\"\"The top row of the report table. Where the titles and descriptions\n    etc, is displayed.\n\n    \"\"\"\n\n    def __init__(self):\n        self.cells = []\n\n    def append(self, cell):\n        \"\"\"Appends a cell to the list of headers\n\n        :param cell: the cell to be appended\n\n        \"\"\"\n        self.cells.append(cell)\n\n\nclass Footers(object):\n    \"\"\"The bottom row of the report table, where the sum of some columns is\n    displayed\n\n    \"\"\"\n\n    def __init__(self):\n        self.cells = []\n\n    def append(self, cell):\n        \"\"\"Appends a cell to the list of footers\n\n        :param cell: the cell to be appended\n\n        \"\"\"\n        self.cells.append(cell)\n\n\ndef unicode_utf8(thing):\n    \"\"\"Casts thing to unicode, assuming utf-8 encoding if a binary string.\n\n    If the argument is None, it is returned unchanged.\n\n    \"\"\"\n    if isinstance(thing, bytes):\n        return thing.decode('utf-8')\n    elif thing is not None:\n        return str(thing)\n"
  },
  {
    "path": "python/nav/smidumps/AIRESPACE-WIRELESS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.5:\n#\n#   smidump -f python AIRESPACE-WIRELESS-MIB\n\nFILENAME = \"AIRESPACE-WIRELESS-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n\n    \"AIRESPACE-WIRELESS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"Airespace, Inc.\"\"\",\n        \"contact\" :\n            \"\"\"        Cisco Systems,\nCustomer Service\nPostal: 170 West Tasman Drive\nSan Jose, CA  95134\nUSA\nTel: +1 800 553-NETS\n\nEmail: cs-wnbu-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB is intended to be implemented on all those\ndevices operating as Central Controllers (CC) that\nterminate the Light Weight Access Point Protocol\ntunnel from Light-weight LWAPP Access Points.\n\nThis MIB provides configuration and status information\nfor 802.11 Access Points, LAN configuration, AAA,\nMobility, IpSec, Radio Rescouce Management and 802.11 \nglobal parameters.  \n\nThe relationship between controller and the LWAPP \nAPs can be depicted as follows:\n\n+......+     +......+     +......+           +......+\n+      +     +      +     +      +           +      +\n+  CC  +     +  CC  +     +  CC  +           +  CC  +\n+      +     +      +     +      +           +      +\n+......+     +......+     +......+           +......+\n..            .             .                 .\n..            .             .                 .\n.  .            .             .                 .\n.    .            .             .                 .\n.      .            .             .                 .\n.        .            .             .                 .\n+......+ +......+     +......+      +......+          +......+\n+      + +      +     +      +      +      +          +      +\n+  AP  + +  AP  +     +  AP  +      +  AP  +          +  AP  +\n+      + +      +     +      +      +      +          +      +\n+......+ +......+     +......+      +......+          +......+\n.              .             .                 .\n.  .              .             .                 .\n.    .              .             .                 .\n.      .              .             .                 .\n.        .              .             .                 .\n+......+ +......+     +......+      +......+          +......+\n+      + +      +     +      +      +      +          +      +\n+  MN  + +  MN  +     +  MN  +      +  MN  +          +  MN  +\n+      + +      +     +      +      +      +          +      +\n+......+ +......+     +......+      +......+          +......+\n\n\nThe LWAPP tunnel exists between the controller and\nthe APs.  The MNs communicate with the APs through\nthe protocol defined by the 802.11 standard.\n\nLWAPP APs, upon bootup, discover and join one of the\ncontrollers and the controller pushes the configuration,\nthat includes the WLAN parameters, to the LWAPP APs.\nThe APs then encapsulate all the 802.11 frames from\nwireless clients inside LWAPP frames and forward\nthe LWAPP frames to the controller.\n\n                   GLOSSARY\n\nAccess Point ( AP )\n\nAn entity that contains an 802.11 medium access\ncontrol ( MAC ) and physical layer ( PHY ) interface\nand provides access to the distribution services via\nthe wireless medium for associated clients.  \n\nLWAPP APs encapsulate all the 802.11 frames in\nLWAPP frames and sends it to the controller to which\nit is logically connected.\n\nBasic Service Set Identifier (BSSID)\n\nThe identifier for the service set comprising of\nall the 802.11 stations under the control of\none coordinating Access Point.  This identifier\nhappens to be the MAC address of the dot11 radio\ninterface of the Access Point.  The wireless\nclients that associate with the Access Point\nget the wired uplink through this particular \ndot11 interface. \n\nCentral Controller ( CC )\n\nThe central entity that terminates the LWAPP protocol\ntunnel from the LWAPP APs.  Throughout this MIB,\nthis entity also referred to as 'controller'. \n\nLight Weight Access Point Protocol ( LWAPP ) \n\nThis is a generic protocol that defines the \ncommunication between the Access Points and the\nCentral Controller. \n\nMobile Node ( MN )\n\nA roaming 802.11 wireless device in a wireless\nnetwork associated with an access point. \n\nStation Management (SMT)\n\nThis term refers to the internal management of the\n802.11 protocol operations by the AP to work\ncooperatively with the other APs and 802.11\ndevices in the network.\n\nREFERENCE\n\n[1] Part 11 Wireless LAN Medium Access Control ( MAC )\nand Physical Layer ( PHY ) Specifications.\n\n[2] Draft-obara-capwap-lwapp-00.txt, IETF Light \nWeight Access Point Protocol. \"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2006-04-10 00:00\",\n                \"description\" :\n                    \"\"\"Updated MIB with description and format\"\"\",\n            },\n            {\n                \"date\" : \"2005-10-30 00:00\",\n                \"description\" :\n                    \"\"\"Airespace MIB\"\"\",\n            },\n        ),\n        \"identity node\" : \"bsnWireless\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n        {\"module\" : \"AIRESPACE-REF-MIB\", \"name\" : \"airespace\"},\n    ),\n\n    \"typedefs\" : {\n        \"WEPKeytype\" : {\n            \"basetype\" : \"OctetString\",\n            \"range\" : {\n                \"min\" : \"4\",\n                \"max\" : \"32\"\n            },\n        },\n        \"ProfileState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"fail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"pass\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n        },\n        \"BsnTxtSignatureMacInfo\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"bsnSignatureMacAll\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"bsnSignatureMacIndividual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"bsnSignatureMacBoth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"This textual convention defines the pattern followed\nby the LWAPP APs to perform signature analysis with\nthe signature and report the results to the\nController.\n\nThe semantics are described as follows.\n\nbsnSignatureMacAll - The Controller would set the\n'Mac Info' parameter of the 'Signature Add LWAPP\nMessage' to this value to indicate the LWAPP AP that\nthe signature analysis and pattern matching should\nbe tracked and reported on a per-signature and\nper-channel basis.\n\nbsnSignatureMacIndividual - The Controller would set\nthe 'Mac Info' parameter of the 'Signature Add LWAPP\nMessage' to this value to indicate the LWAPP AP that\nthe signature analysis and pattern matching should\nbe tracked and reported separately for individual\nMAC addresses, that are the sources of the received\n802.11 data and/or management frames.\n\nbsnStandardSigMacBoth - The Controller would set the\n'Mac Info' parameter of the 'Signature Add LWAPP\nMessage' to this value to indicate the LWAPP AP that\nthe signature analysis and pattern matching should\nbe tracked on a per signature as well as per-MAC\naddress basis. \"\"\",\n        },\n        \"BsnSignaturePatternOffSetStart\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"sigPattStartFrm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"sigPattStartFrmBody\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"This object indicates how an offset should be applied\nwhile doing signature analysis for QOS and non-QOS\ndata frames.  This is introduced since 802.11e QOS\nframes have an additional 2-byte QOS header which\nresults in the current implementation not being\nable to find the start of the date frames for\nsignature analysis.  The semantics of the values are\nas follows.\n\nsigPattStartFrm - This indicates that the\nrequired offset should be applied to the start of\nthe data frame, before performing pattern matching\nof the signature on the data frame.\n\nsigPattStartFrmBody - This value indicates\nthat the required offset should be applied to the\nstart of the frame body, after the header, before\nperforming pattern matching of the signature on the\ndata frame. \"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"bsnWireless\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2\",\n            \"status\" : \"current\",\n        }, # node\n        \"bsnEss\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1\",\n        }, # node\n        \"bsnDot11EssTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Ess(WLAN) Configuration Table indexed by bsnDot11EssIndex.\nMaximum of 17 WLANs can be created on Airespace Switch. \nbsnDot11EssIndex of 17 is reserved for WLAN for Third Party \nAPs(non-Airespace APs).\"\"\",\n        }, # table\n        \"bsnDot11EssEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnDot11EssIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnDot11EssTable\"\"\",\n        }, # row\n        \"bsnDot11EssIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Index of the Ess(WLAN) within Airespace Switch.\nAirespace Switch supports 17 ESS(Wlans) so index\nwill be from 1 to 17. 17 is to be used for ESS(WLAN)\ncreated for support of Third Party APs(non-Airespace APs)\"\"\",\n        }, # column\n        \"bsnDot11EssSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SSID assigned to ESS(WLAN)\"\"\",\n        }, # column\n        \"bsnDot11EssSessionTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"86400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Maximum time of a Mobile Station session.\nValue of 0 means infinite time(no timeout set).\"\"\",\n        }, # column\n        \"bsnDot11EssMacFiltering\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"A type of security policy for Mobile Stations \n(Clients). Select to filter clients by MAC address. \nBy selecting this Security, you need to create \nMacFilters in bsnUsersTable or have MacFilters \nconfigured on Radius Servers specified in \nbsnRadiusAuthenticationTable\"\"\",\n        }, # column\n        \"bsnDot11EssAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Administrative Status of ESS(WLAN). By disabling an \nESS the corresponding SSID is no longer broadcasted \nin AP beacons.\"\"\",\n        }, # column\n        \"bsnDot11EssSecurityAuthType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"authOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"authSharedKey\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"authCiscoLeap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"authOpen\",\n            \"description\" :\n                \"\"\"Type of 802.11 Authentication.\"\"\",\n        }, # column\n        \"bsnDot11EssStaticWEPSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of Static WEP Security policy. If enabled, WEP \nEncryption WEP Default Key, Key Index and Key Format should \nalso be specified.\"\"\",\n        }, # column\n        \"bsnDot11EssStaticWEPEncryptionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"wep104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"wep40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wep128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"wep104\",\n            \"description\" :\n                \"\"\"Type of Static WEP Encryption. Length of key specified in\nDefault Key depends on this attribute.\"\"\",\n        }, # column\n        \"bsnDot11EssStaticWEPDefaultKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"WEPKeytype\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Static WEP Default Key. For wep104 encryption either \n26 bit hex key or 13 bit ascii key should be \nspecified.  For wep40 encryption 10 bit hex key or 5 \nbit ascii key should be specified. For wep128\nencryption 32 bit hex key or 16 bit ascii key should \nbe specified.\"\"\",\n        }, # column\n        \"bsnDot11EssStaticWEPKeyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"According to 802.11 standard 4 keys are supported.\nSo 802.11 Mobile Stations(Client) can have upto 4 \nkeys.  This index is for informing Mobile Station \nwhich key it should use for Static WEP Authentication\"\"\",\n        }, # column\n        \"bsnDot11EssStaticWEPKeyFormat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"hex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ascii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is not persistant.Reading this attribute will\nalways return default. The format of the key specified\nin Airespace switch keeps record of the Index.\"\"\",\n        }, # column\n        \"bsnDot11Ess8021xSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Status of 802.1X security policy.\"\"\",\n        }, # column\n        \"bsnDot11Ess8021xEncryptionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"wep104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"wep40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wep128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"wep104\",\n            \"description\" :\n                \"\"\"Type of 802.1X Encryption. This applies if \nbsnDot11Ess8021xSecurity is in enabled state.\"\"\",\n        }, # column\n        \"bsnDot11EssWPASecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.16\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of WPA security policy.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssWPAEncryptionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.17\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"wep104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"wep40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wep128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"tkipmic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"tkipmic\",\n            \"description\" :\n                \"\"\"Type of WPA Encryption. This applies when \nbsnDot11EssWPASecurity is in enable state.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssIpsecSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of IpSec (VPN) security policy. Note that this \ncannot be applied with Web security policy.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnEncrTransform\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tripleDes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"des\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aesCbc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"tripleDes\",\n            \"description\" :\n                \"\"\"The Encryption algorithm employed by this Vpn(IpSec) \nEncryption.  This applies only when \nbsnDot11EssIpsecSecurity is in enable state.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnAuthTransform\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"hmacSha1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hmacMd5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"hmacSha1\",\n            \"description\" :\n                \"\"\"The Hash algorithm employed by the Vpn Encrpytion.\nThis applies only when bsnDot11EssIpsecSecurity is in \nenable state.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnIkeAuthMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"xauthEnablePsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"certificate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"presharedKey\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"presharedKey\",\n            \"description\" :\n                \"\"\"The authentication type of the SA. It could be a \ncertificate or a pre-shared key or xauthEnablePsk.\nThis applies only when bsnDot11EssIpsecSecurity is \nin enable state.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnSharedKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"VPN Shared Key. This applies only when \nbsnDot11EssVpnSharedKey is in enable state and \nbsnDot11EssVpnIkeAuthMode is xauthEnablePsk or \npresharedKey.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnSharedKeySize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"VPN Shared Key size. This applies only when \nbsnDot11EssVpnSharedKey is in enable state\nand bsnDot11EssVpnIkeAuthMode is xauthEnablePsk or \npresharedKey.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnIkePhase1Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"agressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"main\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"main\",\n            \"description\" :\n                \"\"\"VPN IKE Phase 1 Mode type as per the IpSec standards.\nThis applies only when bsnDot11EssIpsecSecurity is in \nenable state.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnIkeLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1800\",\n                        \"max\" : \"345600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"57600\",\n            \"description\" :\n                \"\"\"Vpn IKE's Lifetime.\nThis applies only when bsnDot11EssIpsecSecurity is in\nenable state.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnIkeDHGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"group2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"group1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"group5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"group2\",\n            \"description\" :\n                \"\"\"IKE's Diffie-Hellman Group.\nThis applies only when bsnDot11EssIpsecSecurity is in \nenable state.\"\"\",\n        }, # column\n        \"bsnDot11EssIpsecPassthruSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of IpSec Passthru security policy.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnPassthruGateway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Ip address of VpnPassthru Gateway.\nThis applies only when bsnDot11EssIpsecPassthruSecurity \nis in enable state.\"\"\",\n        }, # column\n        \"bsnDot11EssWebSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of Web security policy. Note this policy cannot be \napplied with IpSec security policy.\"\"\",\n        }, # column\n        \"bsnDot11EssRadioPolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11bOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11aOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot11gOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dot11bgOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dot11agOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"dot11abOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"all\",\n            \"description\" :\n                \"\"\"Radio Policy for a WLAN. It can either be All where it\nwill be applicable to ALL types of protocols or it can be\nset to apply to combinations of 802.11a, 802.11b, 802.11g.\"\"\",\n        }, # column\n        \"bsnDot11EssQualityOfService\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"bronze\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"silver\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gold\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"platinum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"bronze\",\n            \"description\" :\n                \"\"\"Quality of Service for a WLAN.Services such as VoIP should \nbe set to Gold while non-discriminating services such as \nmessaging can be set to Bronze.\"\"\",\n        }, # column\n        \"bsnDot11EssDhcpRequired\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"DHCP required for all clients on this WLAN\"\"\",\n        }, # column\n        \"bsnDot11EssDhcpServerIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"IP Address of the DHCP Server. Make it 0.0.0.0 to disable\nDHCP Relay. Any value other than 0.0.0.0, it will be \nassumed that DHCP Relay is turned on.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnContivityMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Specifies if contivity mode for the IpSec is enabled.\nIf enabled, user needs to specify the Quote of the Day \nServer's IPAddress in bsnDot11EssVpnQotdServerAddress.\"\"\",\n        }, # column\n        \"bsnDot11EssVpnQotdServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"IP Address of the Quote of the Day Server.\"\"\",\n        }, # column\n        \"bsnDot11EssBlacklistTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"description\" :\n                \"\"\"Set the timeout for blacklisted Mobile Stations after \nwhich the mobile station will be automatically \nde-authenticated. Mobile Station are blacklisted by MAC \naddress and their status can be obtained from \nbsnMobileStationStatus.\nA timeout setting of 0 indicates no blacklist timeout is \nset and administrative control \n(bsnMobileStationDeleteAction ) is required to \ndeauthenticate the station.\"\"\",\n        }, # column\n        \"bsnDot11EssNumberOfMobileStations\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of Mobile Stations currently associated with the \nWLAN.\"\"\",\n        }, # column\n        \"bsnDot11EssWebPassthru\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"For switches with version before 2.0: This is applicable \nonly when the Web Security Type is enabled. When this \nattribute is enabled, it allows a client's NetBIOS packets\nto go through the switch before web auth is completed.\n\n(This is obsolete for Switch versions 2.0 to 2.2).\n\nFor switch verions 3.0 and above: This is reintroduced as \nthe web policy where the client is connected\nthrough the web without authentication that is there is no\nusername/password input required.  Moreover, if the \nbsnDot11EssWebPassthroughEmail is enabled, the user will \nbe asked to enter an email address.\"\"\",\n        }, # column\n        \"bsnDot11EssCraniteSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of Cranite Passthrough Security policy. If enabled,\nno other security can be enabled.\"\"\",\n        }, # column\n        \"bsnDot11EssBlacklistingCapability\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This is the flag that can enable or disable the \nclient backlisting feature for a WLAN. If enabled, \nthe clients can be blacklisted by the Switch in case\nof repetitive auth failure and other reasons like it.\nIf disabled, the clients cannot be blacklisted by \nthe switch. The blacklist timeout value will only \nbe effective if this feature is turned on.\"\"\",\n        }, # column\n        \"bsnDot11EssInterfaceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of the interface used by this WLAN. By default it \nis set to be the management interface.\"\"\",\n        }, # column\n        \"bsnDot11EssAclName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of ACL for the WLAN. This is applicable only when \nWeb Authentication is enabled as a security.\nAn empty string value indicates that no ACL has been \nset (which is a valid option)\"\"\",\n        }, # column\n        \"bsnDot11EssAAAOverride\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Enable or Disable AAA override for the global WLAN \nparameters.\"\"\",\n        }, # column\n        \"bsnDot11EssWPAAuthKeyMgmtMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.45\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Enable or Disable WPA Pre-shared Key Mode. If enabled, a \npreshared key should be set for WPA authentication.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssWPAAuthPresharedKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.46\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"WPA Authentication Preshared Key. This applies only \nwhen bsnDot11EssWPAAuthKeyMgmtMode is in enable state.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssFortressSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of Fortress Passthrough Security policy. If \nenabled, no other security can be enabled.\"\"\",\n        }, # column\n        \"bsnDot11EssWepAllowSharedKeyAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Enable this flag to allow Shared Key Authentication when \nStatic WEP is enabled.\"\"\",\n        }, # column\n        \"bsnDot11EssL2tpSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Status of L2TP security policy. Note that this cannot be \napplied with Web security policy, Cranite or Fortress \npolicy.\"\"\",\n        }, # column\n        \"bsnDot11EssWPAAuthPresharedKeyHex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.50\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"WPA Authentication Preshared Key in the hex format.\nThis applies only when bsnDot11EssWPAAuthKeyMgmtMode \nis in enable state.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssBroadcastSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"This attribute when enabled allows the switch to \nbroadcast this SSID.\"\"\",\n        }, # column\n        \"bsnDot11EssExternalPolicyValidation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"This attribute specifies if external policy servers will \nbe used for validation. If no servers are configured in \nbsnExternalPolicyServerTable then it cannot be enabled.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.53\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This attribute specifies status of RSN Security Policy.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNWPACompatibilityMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.54\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This attribute specifies RSN security's compatibility \nmode with WPA.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNAllowTKIPClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.55\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"no\",\n            \"description\" :\n                \"\"\"This attribute specifies whether TKIP clients are allowed \nby RSN Policy.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNAuthKeyMgmtMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.56\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This attribute specifies whether Preshared key is used or\nnot. If used user should specify a key between 8 and 63 \ncharacters in bsnDot11EssRSNAuthPresharedKey attribute.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNAuthPresharedKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.57\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"RSN Authentication Preshared Key. This applies only \nwhen bsnDot11EssRSNAuthKeyMgmtMode is in enable state.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssRSNAuthPresharedKeyHex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.58\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"RSN Authentication Preshared Key in the hex format.\nThis applies only when bsnDot11EssWPAAuthKeyMgmtMode \nis in enable state.\nThis has been deprecated for cLWSecDot11EssCckmTable.\"\"\",\n        }, # column\n        \"bsnDot11EssIPv6Bridging\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When enabled, IPv6 bridging is applied on the packets.\"\"\",\n        }, # column\n        \"bsnDot11EssRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A row status type for the bsnDot11EssEntry\"\"\",\n        }, # column\n        \"bsnDot11EssWmePolicySetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"required\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When enabled, WME Policy is applied on the packets.\"\"\",\n        }, # column\n        \"bsnDot11Ess80211ePolicySetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"required\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When enabled, 802.11e Policy is applied on the packets.\"\"\",\n        }, # column\n        \"bsnDot11EssWebPassthroughEmail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When enabled, along with the bsnDot11EssWebPassthru attribute,\nthe client is allowed to connect by entering his/her email \naddress on the web connection page. There is no further \nauthentication required.\"\"\",\n        }, # column\n        \"bsnDot11Ess7920PhoneSupport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"clientCacLimit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"apCacLimit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"both\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When client cac limit is enabled, the 7920 Phones with old \nsoftware where the Call Admission Control (CAC) Limit is \nSpecified on the client will be supported on the WLAN. The \nsupport for clientCacLimit (by setting to value 1 or 3) cannot\nbe enabled when the bsnDot11EssWmePolicySetting is set to \nallowed or required. When ap cac limit is enabled, the 7920 \nPhones with new software where the Call Admission Control \n(CAC) Limit is advertised by the AP, will be supported on the \nWLAN.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAuthPrimaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Primary Radius Authentication Server for this wlan.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAuthSecondaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Secondary Radius Authentication Server for this wlan.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAuthTertiaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.97\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tertiary Radius Authentication Server for this wlan.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAcctPrimaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Primary Radius Accounting Server for this wlan.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAcctSecondaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Secondary Radius Accounting Server for this wlan.\"\"\",\n        }, # column\n        \"bsnDot11EssRadiusAcctTertiaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.1.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tertiary Radius Accounting Server for this wlan.\"\"\",\n        }, # column\n        \"bsnMobileStationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Table indexed by bsnMobileStationMacAddress.\n(Mobile Station is better referred to as Client in the current\n releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationTable.\"\"\",\n        }, # row\n        \"bsnMobileStationMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 MAC Address of the Mobile Station.\"\"\",\n        }, # column\n        \"bsnMobileStationIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP Address of the Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User Name,if any, of the Mobile Station. This would   \nbe non empty in case of Web Authentication and IPSec.\"\"\",\n        }, # column\n        \"bsnMobileStationAPMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 Mac Address of the AP to which the\nMobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationAPIfSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Slot ID of AP Interface to which the mobile station\nis associated. The value 15 is used to indicate that \nthe slot Id is invalid.\"\"\",\n        }, # column\n        \"bsnMobileStationEssIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Ess Index of the Wlan(SSID) that is being used by Mobile \nStation to connect to AP\"\"\",\n        }, # column\n        \"bsnMobileStationSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The SSID Advertised by Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationAID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AID for the mobile station\"\"\",\n        }, # column\n        \"bsnMobileStationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"aaaPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"authenticated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"associated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"powersave\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disassociated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tobedeleted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"probing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"blacklisted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the mobile station\"\"\",\n        }, # column\n        \"bsnMobileStationReasonCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unspecified\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"previousAuthNotValid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"deauthenticationLeaving\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disassociationDueToInactivity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disassociationAPBusy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"class2FrameFromNonAuthStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"class2FrameFromNonAssStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"disassociationStaHasLeft\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"staReqAssociationWithoutAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"missingReasonCode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Reason Code as defined by 802.11 standards\"\"\",\n        }, # column\n        \"bsnMobileStationMobilityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unassociated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"anchor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"foreign\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"handoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"exportanchor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"exportforeign\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mobility Role of the Mobile Station.\"\"\",\n        }, # column\n        \"bsnMobileStationAnchorAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the Mobility Status of the Mobile Station is \nAnchor then it will have Peer Ip Address and will \nhave Anchor IP if the Role is Foreign\"\"\",\n        }, # column\n        \"bsnMobileStationCFPollable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When this attribute is true, it shall indicate that the \nMobile Station is able to respond to a CF-Poll with a \ndata frame within a SIFS time. This attribute shall be \nfalse if the Mobile Station is not able to respond to a \nCF-Poll with a data frame within a SIFS time.\"\"\",\n        }, # column\n        \"bsnMobileStationCFPollRequest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies whether CFP is requested by Mobile\nStation or not\"\"\",\n        }, # column\n        \"bsnMobileStationChannelAgilityEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute indicates that the PHY channel agility\nfunctionality is enabled.\"\"\",\n        }, # column\n        \"bsnMobileStationPBCCOptionImplemented\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when true, shall indicate that the PBCC\nmodulation option as defined in subclause 18.4.6.6 is\nimplemented.  The default value of this attribute shall\nbe false.\"\"\",\n        }, # column\n        \"bsnMobileStationShortPreambleOptionImplemented\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when true, shall indicate that the\nshort preamble option as defined in subclause 18.2.2.2\nis implemented.  The default value of this attribute\nshall be false.\"\"\",\n        }, # column\n        \"bsnMobileStationSessionTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Session Timeout of Mobile station\"\"\",\n        }, # column\n        \"bsnMobileStationAuthenticationAlgorithm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"openSystem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sharedKey\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"openAndEap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Authentication Algorithm of Mobile Station \"\"\",\n        }, # column\n        \"bsnMobileStationWepState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"WEP State of Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Port Number of this Airespace Switch on which the\ntraffic of the Mobile Station is coming through.\"\"\",\n        }, # column\n        \"bsnMobileStationDeleteAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"delete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Action to Deauthenticate the Mobile Station. Set the \nState to delete.\"\"\",\n        }, # column\n        \"bsnMobileStationPolicyManagerState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Policy Manager State of the mobile station.\"\"\",\n        }, # column\n        \"bsnMobileStationSecurityPolicyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"completed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notcompleted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When this attribute has value completed, it shall\nindicate that the Mobile Station has completed the \nsecurity policy checks. Otherwise the checks are yet\nto be completed.\"\"\",\n        }, # column\n        \"bsnMobileStationProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot11g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mobile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The 802.11 protocol type of the client. The protocol \nis mobile when this client detail is seen on the \nanchor i.e it's mobility status is anchor.\"\"\",\n        }, # column\n        \"bsnMobileStationMirrorMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, then mirroring for this client will be statically\nconfigured irrespective of the AP and the port this client \nis on.\"\"\",\n        }, # column\n        \"bsnMobileStationInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the Interface of the mobile client to the switch.\"\"\",\n        }, # column\n        \"bsnMobileStationApMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"monitor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"roguedetector\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mode of the AP to which the Mobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vlan ID of the Interface to which the client is \nassociated.\"\"\",\n        }, # column\n        \"bsnMobileStationPolicyType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot1x\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"wpa1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wpa2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wpa2vff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mode of the AP to which the Mobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationEncryptionCypher\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ccmpAes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tkipMic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wep40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wep104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wep128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mode of the AP to which the Mobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationEapType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"eapTls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ttls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"peap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"leap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"speke\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"eapFast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mode of the AP to which the Mobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationCcxVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ccxv1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ccxv2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ccxv3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ccxv4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ccxv5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"notSupported\",\n            \"description\" :\n                \"\"\"Represents the Cisco Compatible Extensions (CCX)\nVersion the client is using for communication\nwith the AP.\"\"\",\n        }, # column\n        \"bsnMobileStationE2eVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"e2ev1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"e2ev2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"notSupported\",\n            \"description\" :\n                \"\"\"Represents the End-2-End Version the client is\nusing for communication with the AP.\"\"\",\n        }, # column\n        \"bsnMobileStationStatusCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.4.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Status Code of the Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationPerRadioPerVapTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Per Radio Per VAP(WLAN) Table. This table \nlists all Mobile Stations on a particular Airespace AP \nInterface for a particular ESS(Wlan). It only lists MAC \nAddresses. Further details for a Mobile Station can be found \nfrom bsnMobileStationTable once the MAC Address is knonwn.\n(Mobile Station is better referred to as Client in the \n current releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationPerRadioPerVapEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnDot11EssIndex\",\n                \"bsnMobileStationPerRadioPerVapIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in MobileStationPerRadioPerVapTable.\"\"\",\n        }, # row\n        \"bsnMobileStationPerRadioPerVapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The index of  Mobile Station. The index starts from \n1 and goes upto the total number of Mobile Stations \non Airespace Radio Interface for a specific \nESS (Wlan).\"\"\",\n        }, # column\n        \"bsnMobileStationMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC Address of Mobile Station.\"\"\",\n        }, # column\n        \"bsnMobileStationStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Statistics Table.\n(Mobile Station is better referred to as Client in the current \n releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationStatsTable.\"\"\",\n        }, # row\n        \"bsnMobileStationRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Average packet RSSI for the Mobile Station.\"\"\",\n        }, # column\n        \"bsnMobileStationBytesReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Bytes received from Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationBytesSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Bytes sent to Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationPolicyErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Policy Errors for Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationPacketsReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Packets received from Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationPacketsSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Packets sent to Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Signal to noise Ratio of the Mobile Station.\"\"\",\n        }, # column\n        \"bsnRogueAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Rogue Table. This table lists all the Rogue APs detected by \nAirespace APs.\"\"\",\n        }, # table\n        \"bsnRogueAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRogueAPDot11MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An Entry in bsnRogueAPTable.\"\"\",\n        }, # row\n        \"bsnRogueAPDot11MacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC Address of Rogue Station.\"\"\",\n        }, # column\n        \"bsnRogueAPTotalDetectingAPs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of Airespace APs that detected this rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPFirstReported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time Stamp when this Rogue was First Detected.\"\"\",\n        }, # column\n        \"bsnRogueAPLastReported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time Stamp when this Rogue was Last Detected.\"\"\",\n        }, # column\n        \"bsnRogueAPContainmentLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unassigned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"level1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"level2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"level3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"level4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If the state of the rogue is contained, this specifies\nthe level of containment. Higher the level, more the \nnumber of detecting APs that are used to contain it.\nThe value must be between 1 to 4 for 'contained' state.\"\"\",\n        }, # column\n        \"bsnRogueAPType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"adhoc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies if the Rogue is of ad-hoc type\nor is an AP.\"\"\",\n        }, # column\n        \"bsnRogueAPOnNetwork\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies if the Rogue is on Wired \nNetwork or not.\"\"\",\n        }, # column\n        \"bsnRogueAPTotalClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Total number of Clients detected on this rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnRogueAPMaxDetectedRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the max RSSI value of all the detctecting APs,\nwhich have detected this rogue. \"\"\",\n        }, # column\n        \"bsnRogueAPSSID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the SSID of the rogue detected by Access \nPoint, which has max RSSI value of all the \ndetectecting APs of this rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.7.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"pending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"detectedLrad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"known\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"acknowledge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"contained\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"threat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"containedPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"knownContained\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"trustedMissing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute is use to specify the state in which \nthe Rogue AP is user can set the Rogue AP in alert, \nknown or acknowledge state.\nAlert state means Rogue AP can be a potential threat.\nTrap will be sent out to trap recipients. \nKnown state means its just internal AP which is not \non the same Switch.  \nAcknowledge state means an external AP whose\nexistence is acceptable and not a threat (probably \nsome other company's AP).\nContained means containement is initiated and ongoing.\nThreat is usually the state when the rogue is found \non wired network.\nknown(4), knownContained(9) and trustedMissing(10) \nwill appear in known rogue list.\nknown rogues can be pre provisioned and known rogues \nstate can be changed to alert(2)\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Rogue Station Table. This table lists all the Airespace AP \nInterfaces that detected a particular Rogue.\"\"\",\n        }, # table\n        \"bsnRogueAPAirespaceAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRogueAPDot11MacAddress\",\n                \"bsnRogueAPAirespaceAPMacAddress\",\n                \"bsnRogueAPAirespaceAPSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnRogueAPAirespaceAPEntry.\"\"\",\n        }, # row\n        \"bsnRogueAPAirespaceAPMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC Address of Airespace AP Interface that Detected \nthe Rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot ID of the Airespace AP Interface that detected the \nRogue.\"\"\",\n        }, # column\n        \"bsnRogueAPRadioType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Airespace AP Interface type that detected the Rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of Airespace AP Interface that detected the Rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The advertised Channel Number of the Airespace AP \nInterface picked up from the Rogue.\"\"\",\n        }, # column\n        \"bsnRogueAPSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The SSID Advertised by Rogue Station.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rogue RSSI as seen by Airespace AP Interface.\"\"\",\n        }, # column\n        \"bsnRogueAPContainmentMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"deauthBroadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"max\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the rogue is in 'contained' state, this attribute\nshows the containment mode used by the AP.\"\"\",\n        }, # column\n        \"bsnRogueAPContainmentChannelCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of channels used for rogue containment.\"\"\",\n        }, # column\n        \"bsnRogueAPContainmentChannels\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the comma separated string of channels used for \nrogue containment.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of seconds ago when this Rogue was last heard by \nthis AP. \"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPWepMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The WEP mode on this detecting AP.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPPreamble\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"long\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"short\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Preamble on this detecting AP.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPWpaMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The WPA mode on this detecting AP.\"\"\",\n        }, # column\n        \"bsnRogueAPAirespaceAPSNR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.8.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SNR seen by Airespace AP Interface from Rogue\"\"\",\n        }, # column\n        \"bsnThirdPartyAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"Third Party Access Point Table. An entry needs to be \nconfigured in this table for a third party access point \nthat needs to be supported by the Switch. Note: A third\nparty ESS (Wlan) with ID 17 should be created in \nbsnDot11EssTable before adding entries here.\nPlease also note that ACS currently supports only \nAironet 350, 1200 and Orinoco 2000 Access Points as \nthird party APs.\"\"\",\n        }, # table\n        \"bsnThirdPartyAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1\",\n            \"create\" : \"true\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"bsnThirdPartyAPMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnThirdPartyAPTable.\"\"\",\n        }, # row\n        \"bsnThirdPartyAPMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC Address of Third Party Access Point which is \nconnected directly to this Airespace Switch.\"\"\",\n        }, # column\n        \"bsnThirdPartyAPInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface(Port Number) to which the Third Party AP is \nconnected.\"\"\",\n        }, # column\n        \"bsnThirdPartyAPIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Static IP address of the 3rd Party AP, 0.0.0.0 indicating\nx its using DHCP\"\"\",\n        }, # column\n        \"bsnThirdPartyAP802Dot1XRequired\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"If 802.1X is required for the 3rd Party AP\"\"\",\n        }, # column\n        \"bsnThirdPartyAPMirrorMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, then data from all the foreign AP users and all \nthe foreign APs on this APs port will be mirrored. These \nclients are dynamically added to the switch's mirrored MAC \nlist.\"\"\",\n        }, # column\n        \"bsnThirdPartyAPRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.9.1.24\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status in the ThirdPartyAPEntry.\"\"\",\n        }, # column\n        \"bsnMobileStationByIpTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Table indexed by bsnMobileStationByIpAddress. \nNOTE: This is just to facilitate the search of mobile \nstations based on IP Address. Doing a get without the index \ndoesn't return anything.  (Mobile Station is better referred \nto as Client in the current releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationByIpEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationByIpAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationByIpTable.\"\"\",\n        }, # row\n        \"bsnMobileStationByIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP Address of the Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationByIpMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 Mac Address of the Mobile Station.\"\"\",\n        }, # column\n        \"bsnMobileStationRssiDataTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station RSSI data Table indexed by \nbsnMobileStationMacAddress, \nbsnMobileStationRssiDataApMacAddress, \nbsnMobileStationRssiDataApIfSlotId.\n(Mobile Station is better referred to as Client in the \n current releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationRssiDataEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationMacAddress\",\n                \"bsnMobileStationRssiDataApMacAddress\",\n                \"bsnMobileStationRssiDataApIfSlotId\",\n                \"bsnAPIfPhyAntennaIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationRssiDataTable.\"\"\",\n        }, # row\n        \"bsnMobileStationRssiDataApMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 Mac Address of the AP on which\nMobile Station is associated.\"\"\",\n        }, # column\n        \"bsnMobileStationRssiDataApIfSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SlotId of APIf on which mobile station is\nassociated\"\"\",\n        }, # column\n        \"bsnMobileStationRssiDataApIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11bg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The interface type of the radio that sensed the \nrssi data.\"\"\",\n        }, # column\n        \"bsnMobileStationRssiDataApName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Name of the AP that sensed the rssi data.\"\"\",\n        }, # column\n        \"bsnMobileStationRssiData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" RSSI seen by Airespace AP Interface for the Mobile Station\"\"\",\n        }, # column\n        \"bsnAPIfPhyAntennaIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Antenna which recived the probe request from client.\nThe antenna which reported the RSSI value for the client.\nFor now value will be 0 to 1, in future it may change.\"\"\",\n        }, # column\n        \"bsnMobileStationRssiDataLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of seconds ago when this RSSI data was recorded.\"\"\",\n        }, # column\n        \"bsnWatchListClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.12\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"Table of watch listed clients. When clients are added to this \ntable by username or MAC address, ACS collects data for them \nto show trend reports. The switch generates Client\nAssociation and Client Authentication traps for the watch \nlisted clients.The watch list feature can be enbaled or \ndiabled by the bsnWatchListFeatureEnable flag on the switch.\"\"\",\n        }, # table\n        \"bsnWatchListClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.12.1\",\n            \"create\" : \"true\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"bsnWatchListClientKey\",\n                \"bsnWatchListClientType\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnWatchListClientTable.\"\"\",\n        }, # row\n        \"bsnWatchListClientKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.12.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" MAC Address or User Name of Client that is to be \nadded to the watch list.\"\"\",\n        }, # column\n        \"bsnWatchListClientType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.12.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"byMac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"byUserName\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of the watch list client entry. The entry can\nbe created by Client MAC Address or by Username.\"\"\",\n        }, # column\n        \"bsnWatchListClientRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.12.1.20\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A row status type for the bsnWatchListClientEntry\"\"\",\n        }, # column\n        \"bsnMobileStationByUsernameTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Table indexed by the Mobile Station Username \nand MAC Address. NOTE: This is just to facilitate the search \nof mobile stations based on User Name. Doing a get without \nthe username doesn't return anything. (Mobile Station is \nbetter referred to as Client in the current releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationByUsernameEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationByUserName\",\n                \"bsnMobileStationByUserMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationByUsernameTable.\"\"\",\n        }, # row\n        \"bsnMobileStationByUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Username of the Mobile Station\"\"\",\n        }, # column\n        \"bsnMobileStationByUserMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 Mac Address of the Mobile Station.\"\"\",\n        }, # column\n        \"bsnRogueClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Rogue Client Table. This table lists all the Rogue Clients \ndetected by Airespace APs.\"\"\",\n        }, # table\n        \"bsnRogueClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRogueClientDot11MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An Entry in bsnRogueClientTable.\"\"\",\n        }, # row\n        \"bsnRogueClientDot11MacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Mac Address of Rogue Station.\"\"\",\n        }, # column\n        \"bsnRogueClientTotalDetectingAPs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of Airespace APs that detected this \nrogue.\"\"\",\n        }, # column\n        \"bsnRogueClientFirstReported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time Stamp when this Rogue was First Detected.\"\"\",\n        }, # column\n        \"bsnRogueClientLastReported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time Stamp when this Rogue was Last Detected.\"\"\",\n        }, # column\n        \"bsnRogueClientBSSID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies BSSID of the Rogue Client.\"\"\",\n        }, # column\n        \"bsnRogueClientContainmentLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unassigned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"level1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"level2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"level3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"level4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If the state of the rogue is contained, this specifies\nthe level of containment.  Higher the level, more the\nnumber of detecting APs that are used to contain it.\nThe value must be between 1 to 4 for 'contained' \nstate.\"\"\",\n        }, # column\n        \"bsnRogueClientLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of seconds ago this rogue client was detected.\"\"\",\n        }, # column\n        \"bsnRogueClientState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.14.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"pending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"contained\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"threat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"containedpending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute is use to specify the state in which \nthe Rogue AP is. User can set the Rogue Client in \nalert,known or acknowledge state.\nAlert state means Rogue Client can be a potential i\nthreat.Trap will be sent out to trap recipients. \nKnown state means its just internal Client which is \nnot on the same Switch. \nAcknowledge state means an external Client whose\nexistence is acceptable and not a threat\n(probably some other company's AP).\nContained means containement is initiated and \nongoing\"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Rogue Station Table. This table lists all the Airespace AP \nInterface that detected a particular Rogue.\"\"\",\n        }, # table\n        \"bsnRogueClientAirespaceAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRogueClientDot11MacAddress\",\n                \"bsnRogueClientAirespaceAPMacAddress\",\n                \"bsnRogueClientAirespaceAPSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnRogueClientAirespaceAPEntry.\"\"\",\n        }, # row\n        \"bsnRogueClientAirespaceAPMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mac Address of Airespace AP Interface that Detected \nthe Rogue.\"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slotId of the Airespace AP Interface that detected the \nRogue.\"\"\",\n        }, # column\n        \"bsnRogueClientRadioType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The advertised SSID that the Airespace AP Interface \npicked up from the Rogue.\"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of Airespace AP Interface that detected the \nRogue.\"\"\",\n        }, # column\n        \"bsnRogueClientChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The advertised Channel Number of that the Airespace \nAP Interface picked up from the Rogue.\"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" RSSI seen by Airespace AP Interface from the Rogue\"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of seconds ago when this Rogue was last heard by \nthis AP. \"\"\",\n        }, # column\n        \"bsnRogueClientAirespaceAPSNR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.15.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SNR seen by Airespace AP Interface from Rogue\"\"\",\n        }, # column\n        \"bsnRogueClientPerRogueAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Rogue Clients for each rogue. This table lists all Rogue \nClients on a particular Rogue.\"\"\",\n        }, # table\n        \"bsnRogueClientPerRogueAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRogueAPDot11MacAddr\",\n                \"bsnRogueClientDot11MacAddr\",\n            ],\n            \"description\" :\n                \"\"\"An entry in RogueClientPerRogueAPTable.\"\"\",\n        }, # row\n        \"bsnRogueAPDot11MacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC Address of the Rogue AP.\"\"\",\n        }, # column\n        \"bsnRogueClientDot11MacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.16.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC Address of the Rogue Client.\"\"\",\n        }, # column\n        \"bsnDot11QosProfileTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"QOS Profiles specified in bsnDot11EssTable can be customized \nin this table. This is a lookup table for auto created \nprofiles\"\"\",\n        }, # table\n        \"bsnDot11QosProfileEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnDot11QosProfileName\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnDot11QosProfileTable.\"\"\",\n        }, # row\n        \"bsnDot11QosProfileName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"QOS Profile Name. This will be one of bronze,gold,\nplatinum,silver,uranium.\"\"\",\n        }, # column\n        \"bsnDot11QosProfileDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"QOS Profile Description.\"\"\",\n        }, # column\n        \"bsnDot11QosAverageDataRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the per user bandwidth contracts(k).\nSpecifies Average Data Rate per user. Value of 0 \nindicates the feature is disabled.\"\"\",\n        }, # column\n        \"bsnDot11QosBurstDataRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the per user bandwidth contracts(k).\nSpecifies Average Burst Data Rate per user. Value of \n0 indicates the feature is disabled.\"\"\",\n        }, # column\n        \"bsnDot11QosAvgRealTimeDataRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the per user bandwidth contracts(k).\nSpecifies Average Real Time Data Rate per user. \nValue of 0 indicates the feature is disabled.\"\"\",\n        }, # column\n        \"bsnDot11QosBurstRealTimeDataRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the per user bandwidth contracts(k).\nSpecifies Burst Real Time Data Rate per user. Value \nof 0 indicates the feature is disabled.\"\"\",\n        }, # column\n        \"bsnDot11QosMaxRFUsagePerAP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the over the Air QOS parameter.\nSpecifies maximum RF Usage per AP in percentage.\"\"\",\n        }, # column\n        \"bsnDot11QosProfileQueueDepth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the over the Air QOS parameter.\nSpecifies Queue depth for the current profile.\"\"\",\n        }, # column\n        \"bsnDot11WiredQosProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot1p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is one of the over the Air QOS parameter.\nSpecifies Queue depth for the current profile.\"\"\",\n        }, # column\n        \"bsnDot11802Dot1PTag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the type of wired QOS protocol for the \ncurrent profile. Value of 0 indicates the feature is \ndisabled.\"\"\",\n        }, # column\n        \"bsnDot11ResetProfileToDefault\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.17.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set this attribute to reset to restore the factory default\nvalue for the profile.\"\"\",\n        }, # column\n        \"bsnTagTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"RF ID Tag Table indexed by bsnTagDot11MacAddress.\"\"\",\n        }, # table\n        \"bsnTagEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnTagDot11MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnTagTable.\"\"\",\n        }, # row\n        \"bsnTagDot11MacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 MAC Address of the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"type1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagTimeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time Interval after which the tag transmits data.\"\"\",\n        }, # column\n        \"bsnTagBatteryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Status of the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagLastReported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.18.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of seconds ago when this tag was heard by any AP.\"\"\",\n        }, # column\n        \"bsnTagRssiDataTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"RF ID Tag Detecting AP Table indexed by bsnTagDot11MacAddress,\nbsnTagRssiDataApMacAddress and bsnTagRssiDataApIfSlotId.\"\"\",\n        }, # table\n        \"bsnTagRssiDataEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnTagDot11MacAddress\",\n                \"bsnTagRssiDataApMacAddress\",\n                \"bsnTagRssiDataApIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnTagRssiDataTable.\"\"\",\n        }, # row\n        \"bsnTagRssiDataApMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"802.11 MAC Address of the AP detecting the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagRssiDataApIfSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Slot Id of the radio on AP detecting the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagRssiDataApIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uwb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface Type of the radio on AP detecting the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagRssiDataApName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the AP detecting the RF ID Tag.\"\"\",\n        }, # column\n        \"bsnTagRssiDataLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of seconds ago when this tag was heard by this detecting \nAP.\"\"\",\n        }, # column\n        \"bsnTagRssiData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RSSI of the RF ID Tag as seen by the radio on this \ndetecting AP.\"\"\",\n        }, # column\n        \"bsnTagRssiDataSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.19.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SNR of the RF ID tag as seen by the radio on this \ndetecting AP.\"\"\",\n        }, # column\n        \"bsnTagStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"RF ID Tag Statistics Table.\"\"\",\n        }, # table\n        \"bsnTagStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnTagDot11MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnTagStatsTable.\"\"\",\n        }, # row\n        \"bsnTagBytesReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Bytes received from an RF ID Tag\"\"\",\n        }, # column\n        \"bsnTagPacketsReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.20.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Packets received from an RF ID Tag\"\"\",\n        }, # column\n        \"bsnMobileStationExtStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Mobile Station Extended Statistics Table.\n(Mobile Station is better referred to as Client in the \n current releases.)\"\"\",\n        }, # table\n        \"bsnMobileStationExtStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobileStationMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnMobileStationExtStatsTable.\"\"\",\n        }, # row\n        \"bsnMobileStationSampleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time stats were sampled as seconds since the epoch.\"\"\",\n        }, # column\n        \"bsnMobileStationTxExcessiveRetries\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tx packets dropped due to excessive retries.\"\"\",\n        }, # column\n        \"bsnMobileStationTxRetries\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tx packets retransmitted.\"\"\",\n        }, # column\n        \"bsnMobileStationTxFiltered\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.1.21.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tx packets dropped by the built-in Tx filter\"\"\",\n        }, # column\n        \"bsnAP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2\",\n        }, # node\n        \"bsnAPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of Airespace APs managed by this Airespace Switch.\"\"\",\n        }, # table\n        \"bsnAPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the bsnAPTable.\"\"\",\n        }, # row\n        \"bsnAPDot3MacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of an AP.\"\"\",\n        }, # column\n        \"bsnAPNumOfSlots\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Radio Interfaces on the Airespace AP.\nCurrently maximum two interfaces are supported.\nOne would be of type 802.11a and other of type\n802.11b/g.\"\"\",\n        }, # column\n        \"bsnAPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name assigned to this AP. If an AP is not configured its\nfactory default name will be ap:<last three byte of \nMACAddress> eg. ap:af:12:be\"\"\",\n        }, # column\n        \"bsnAPLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User specified location of this AP.\nWhile configuring AP, user should specify a location for\nthe AP so that its easy to figure out for some one where\nthe AP is located.\"\"\",\n        }, # column\n        \"bsnAPMonitorOnlyMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"monitor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"roguedetector\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sniffer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bridge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Monitor Only Mode Setting.\"\"\",\n        }, # column\n        \"bsnAPOperationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"associated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disassociating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"downloading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operation State of the AP. When AP associates with the \nAirespace Switch its state will be associated. When Airespace\nAP is disassociated from the Switch, its state will be \ndisassociating. The state is downloading when the AP is \ndownloading its firmware.\"\"\",\n        }, # column\n        \"bsnAPSoftwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Major Minor Software Version of AP\"\"\",\n        }, # column\n        \"bsnAPBootVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Major Minor Boot Version of AP\"\"\",\n        }, # column\n        \"bsnAPPrimaryMwarName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"sysName of the Airespace Switch which is suppose to be the\nPrimary MWAR(switch) of the AP with which AP should associate.\nThis work when AP is not directly connected to Airespace Switch,\nit tries to find Primary Switch and associates with it. If\nthis attribute is left empty or AP is not able to find the \nAirespace Switch with this name, then it will associate with \nSecondary Switch.\"\"\",\n        }, # column\n        \"bsnAPReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set this attribute to reset the AP.\nWhen it comes up it will try to associate with the\nPrimary Switch if that is set, else it will associate with the\nMaster Switch. Reading this attribute will always return 0\"\"\",\n        }, # column\n        \"bsnAPStatsTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the time interval in secs after which \nbsnAPDot11Counters Stats is sent from AP to Switch. If not \nconfigured this value is 0 which means never send the stats.\"\"\",\n        }, # column\n        \"bsnAPPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Port on the Switch on which this APs traffic is coming \nthrough.\"\"\",\n        }, # column\n        \"bsnAPModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AP Model\"\"\",\n        }, # column\n        \"bsnAPSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AP Serial Number.\"\"\",\n        }, # column\n        \"bsnAPClearConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"clear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set this attribute to clear AP configuration\nand reset it to factory defaults.\nReading this attribute will always return 0\"\"\",\n        }, # column\n        \"bsnApIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the AP. This will not be available when \nthe switch is operating in the Layer2 mode. In this case,\nthe attribute will return 0 as value.\"\"\",\n        }, # column\n        \"bsnAPMirrorMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, then this AP's Client's Data is mirrored and this \nAP's clients are dynamically added to the switch's mirrored \nMAC list.\"\"\",\n        }, # column\n        \"bsnAPRemoteModeSupport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies if the the Remote Mode is supported on this \nAP or not. If supported user can set bsnAPMonitorOnlyMode to \nremote. Otherwise not.\"\"\",\n        }, # column\n        \"bsnAPType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ap1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ap1030\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mimo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ap1100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ap1130\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ap1240\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ap1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"ap1310\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"ap1500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ap1250\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"ap1505\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the model of the AP in enumeration.\"\"\",\n        }, # column\n        \"bsnAPSecondaryMwarName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"sysName of the Airespace Switch which is suppose to be the\nSecondary MWAR(switch) of the AP with which AP should associate\nif Primary Switch(configured through bsnAPPrimaryMwarName)  \nis not available. If primary and secondary switches are not \navailable then AP will associate with the tertiary switch.\"\"\",\n        }, # column\n        \"bsnAPTertiaryMwarName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"sysName of the Airespace Switch which is suppose to be the\nTertiary MWAR(switch) of the AP with which AP should associate.\nIf primary,secondary and tertiary switch are not available \nthen it will associate with Master Switch.\"\"\",\n        }, # column\n        \"bsnAPIsStaticIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag when disabled implies that  AP will use DHCP to get \nthe IP address.  However, if it is enabled, then user should \nenter the IPAddress, Netmask and Gateway.\"\"\",\n        }, # column\n        \"bsnAPNetmask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Netmask of the IP address of the AP.\"\"\",\n        }, # column\n        \"bsnAPGateway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Gateway for the AP.\"\"\",\n        }, # column\n        \"bsnAPStaticIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Static IP-Address configuration for the AP.\nThis can only be changed when the LWAPP mode is in Layer-3.\"\"\",\n        }, # column\n        \"bsnAPBridgingSupport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies if this AP is a Bridging AP. Bridging APs \ncan be used in Bridging or Mesh network configurations.\"\"\",\n        }, # column\n        \"bsnAPGroupVlanName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The AP Group to which this AP has been associated with. \nIf it is empty, then no AP Group overriding has been set.\"\"\",\n        }, # column\n        \"bsnAPIOSVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IOS Version of IOS Cisco AP. Zero length string will be \nreturned for other APs\"\"\",\n        }, # column\n        \"bsnAPCertificateType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"manufactureinstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"selfsigned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"localsignificance\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enum values denoting AP Certificate Type.\n1 : manufactureinstalled : Manufacture Installed Certificate \n    type (MIC).\n2 : selfsigned : Self Signed Certificate type (SSC).\n3 : localsignificance : Local Significance.\"\"\",\n        }, # column\n        \"bsnAPEthernetMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Ethernet MAC address of the AP.\"\"\",\n        }, # column\n        \"bsnAPAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Admin State of the AP\"\"\",\n        }, # column\n        \"bsnAPIfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each entry represents an 802.11 interface in an Airespace \nAP.\"\"\",\n        }, # table\n        \"bsnAPIfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnAPIfTable.\"\"\",\n        }, # row\n        \"bsnAPIfSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slotId of this interface.\"\"\",\n        }, # column\n        \"bsnAPIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uwb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of this interface. dot11b also implies 802.11b/g.\"\"\",\n        }, # column\n        \"bsnAPIfPhyChannelAssignment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"customized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this value is true, then bsnAPDot11CurrentChannel  in\nbsnAPIfDot11PhyDSSSTable is assigned by dynamic\nalgorithm and is read-only.\"\"\",\n        }, # column\n        \"bsnAPIfPhyChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ch1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ch2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ch3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ch4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ch5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ch6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ch7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ch8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"ch9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"ch10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ch11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"ch12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"ch13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"ch14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"ch34\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"ch36\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"ch38\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"ch40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"ch42\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"ch44\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"ch46\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"ch48\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"ch52\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"ch56\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"ch60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"ch64\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"ch100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"ch104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"ch108\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"108\"\n                    },\n                    \"ch112\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"112\"\n                    },\n                    \"ch116\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"116\"\n                    },\n                    \"ch120\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"120\"\n                    },\n                    \"ch124\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"124\"\n                    },\n                    \"ch128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"ch132\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"ch136\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"136\"\n                    },\n                    \"ch140\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"140\"\n                    },\n                    \"ch149\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"149\"\n                    },\n                    \"ch153\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"153\"\n                    },\n                    \"ch157\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"157\"\n                    },\n                    \"ch161\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"161\"\n                    },\n                    \"ch165\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"165\"\n                    },\n                    \"ch169\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"169\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Current channel number of the AP Interface.\nChannel numbers will be from 1 to 14 for 802.11b interface type.\nChannel numbers will be from 34 to 169 for 802.11a interface \ntype.  Allowed channel numbers also depends on the current \nCountry Code set in the Switch. This attribute cannot be set \nunless bsnAPIfPhyChannelAssignment is set to customized else \nthis attribute gets assigned by dynamic algorithm.\"\"\",\n        }, # column\n        \"bsnAPIfPhyTxPowerControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"customized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this value is true, then bsnAPIfPhyTxPowerLevel\nis assigned by dynamic algorithm and is read-only.\"\"\",\n        }, # column\n        \"bsnAPIfPhyTxPowerLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The TxPowerLevel currently being used to transmit data.\nSome PHYs also use this value to determine the receiver\nsensitivity requirements for CCA. Valid values are between\n1 to 8,depnding on what radio, and this attribute can be \nset only if bsnAPIfPhyTxPowerControl is set to customized.\"\"\",\n        }, # column\n        \"bsnAPIfPhyAntennaMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sectorA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sectorB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"omni\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notapplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Antenna Mode of the AP Interface.\nFor 802.11a this attribute will always be omni for now.\nThis attribute doesn't apply to interface of type 802.11b.\"\"\",\n        }, # column\n        \"bsnAPIfPhyAntennaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"internal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"external\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specified if the Antenna currently used by AP \nRadio is internal or external. For 802.11a the antenna is always \ninternal. For 802.11b you can set antenna type to be external or \ninternal.\"\"\",\n        }, # column\n        \"bsnAPIfPhyAntennaDiversity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"connectorA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"connectorB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Diversity doesn't apply to AP Radio of type 802.11a.\nFor 802.11b you can set it to connectorA, connectorB or enabled.\"\"\",\n        }, # column\n        \"bsnAPIfCellSiteConfigId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"In a cell site configuration, this would be the cell Id of\nthis AP Interface\"\"\",\n        }, # column\n        \"bsnAPIfNumberOfVaps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of WLANs currently active on this AP Interface.\"\"\",\n        }, # column\n        \"bsnAPIfOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operational status of the interface.\"\"\",\n        }, # column\n        \"bsnAPIfPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Port number on Airespace Switch on which the traffic from this AP\ninterface is received.\"\"\",\n        }, # column\n        \"bsnAPIfPhyAntennaOptions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"internalAndExternal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"internal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"siacAp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"external\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ext11bInt11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the Antenna types supported by the AP \nRadio whether it is internal or external or both. \ninternalAndExternal(0)- internal and external antenna for both \n11a and 11b\ninternal(1) - only internal antenna is allowed.\nsiacAp- 11b internal and 11a external\nexternal - only external antenna is allowed for 11a and 11b\next11bInt11a - external antenna for 11b and internal antenna for \n               11a.\"\"\",\n        }, # column\n        \"bsnApIfNoOfUsers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"No of Users associated with this radio.\"\"\",\n        }, # column\n        \"bsnAPIfWlanOverride\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag when disabled implies that all WLANs are available \nfrom this radio.\nHowever, if this is enabled, then only those WLANs that appear\nin the bsnApIfWlanOverrideTable will be available from this \nradio.\"\"\",\n        }, # column\n        \"bsnAPIfPacketsSniffingFeature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag when enabled implies that  AP will sniff the 802.11a/bg\npackets.  However, if it is enabled, then user should enter the \nserver-ip-address on which Airopeek is running and the \n802.11a/bg-channel-number to be sniffed.\nThe above feature will work only when AP is in 'Sniffer' mode.\"\"\",\n        }, # column\n        \"bsnAPIfSniffChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ch0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ch1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ch2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ch3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ch4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ch5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ch6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ch7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ch8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"ch9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"ch10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ch11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"ch12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"ch13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"ch14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"ch34\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"ch36\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"ch38\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"ch40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"ch42\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"ch44\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"ch46\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"ch48\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"ch52\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"ch56\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"ch60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"ch64\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"ch100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"ch104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"ch108\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"108\"\n                    },\n                    \"ch112\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"112\"\n                    },\n                    \"ch116\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"116\"\n                    },\n                    \"ch120\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"120\"\n                    },\n                    \"ch124\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"124\"\n                    },\n                    \"ch128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"ch132\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"ch136\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"136\"\n                    },\n                    \"ch140\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"140\"\n                    },\n                    \"ch149\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"149\"\n                    },\n                    \"ch153\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"153\"\n                    },\n                    \"ch157\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"157\"\n                    },\n                    \"ch161\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"161\"\n                    },\n                    \"ch165\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"165\"\n                    },\n                    \"ch169\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"169\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This the 802.11a/bg-channel-number on which AP will sniff \nthe packets.\"\"\",\n        }, # column\n        \"bsnAPIfSniffServerIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The machine ip address on which Airopeek application is running.\"\"\",\n        }, # column\n        \"bsnAPIfAntennaGain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Represents antenna gain in multiple of 0.5 dBm. An interger \nvalue 4 means 4 x 0.5 = 2 dBm of gain\"\"\",\n        }, # column\n        \"bsnAPIfChannelList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"List of comma separated channels supported by this radio.\"\"\",\n        }, # column\n        \"bsnAPIfAbsolutePowerList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"List of comma separated absolute power levels supported by this \nradio.\"\"\",\n        }, # column\n        \"bsnAPIfRegulatoryDomainSupport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the regulatory domain on radio is supported or notSupported \non the controller\"\"\",\n        }, # column\n        \"bsnAPIfAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Admin status of the interface.\"\"\",\n        }, # column\n        \"bsnAPIfSmtParamTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each entry represents SMT parameters on an 802.11 interface \nof an Airespace AP.\"\"\",\n        }, # table\n        \"bsnAPIfSmtParamEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnAPIfSmtParamTable\"\"\",\n        }, # row\n        \"bsnAPIfDot11BeaconPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"20\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of TU that a\nAP Interface shall use for scheduling Beacon tranmissions.\nThis value is transmitted in Beacon and Probe Response\nframes.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MediumOccupancyLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum amount of time,\nin TU, that a point coordinator may control the usage of\nthe wireless medium without relinquishing control for long\nenough to allow at least one instance of DCF access to the\nmedium.  The default value of this attribute shall be 100,\nand the maximum value shall be 1000.\"\"\",\n        }, # column\n        \"bsnAPIfDot11CFPPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the number of DTIM intervals\nbetween the start of CFPs.  It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # column\n        \"bsnAPIfDot11CFPMaxDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the maximum duration of the CFP\nin TU that may be generated by the PCF. It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # column\n        \"bsnAPIfDot11OperationalRateSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"126\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall specify the set of data rates\nat which the AP Interface may transmit data.  Each octet\ncontains a value representing a rate.  Each rate\nshall be within the range from 2 to 127,\ncorresponding to data rates in increments of\n500 kb/s from 1 Mb/s to 63.5 Mb/s, and shall be\nsupported (as indicated in the supported rates\ntable) for receiving data. This value is reported in\ntransmitted Beacon, Probe Request, Probe Response,\nAssociation Request, Association Response,\nReassociation Request, and Reassociation Response\nframes, and is used to determine whether a BSS\nwith which the AP Interface desires to synchronize is\nsuitable. It is also used when starting a BSS,\nas specified in  10.3.\"\"\",\n        }, # column\n        \"bsnAPIfDot11DTIMPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of beacon\nintervals that shall elapse between transmission of\nBeacons frames containing a TIM element whose DTIM\nCount field is 0. This value is transmitted in\nthe DTIM Period field of Beacon frames.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MultiDomainCapabilityImplemented\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when TRUE, indicates that the\nAP Interface implementation is capable of supporting\nmultiple regulatory domains.  The capability is\ndisabled, otherwise.  The default value of this\nattribute is FALSE.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MultiDomainCapabilityEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when TRUE, indicates that the\ncapability of the AP Interface to operate in \nmultiple regulatory domains is enabled.  The \ncapability is disabled, otherwise.  The default\nvalue of this attribute is FALSE.\"\"\",\n        }, # column\n        \"bsnAPIfDot11CountryString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute identifies the country in which the\nAP Interface is operating. The first two octets of \nthis string is the two character country code as \ndescribed in document ISO/IEC 3166-1.  The third octet\nshall be one of the following:\n\n1. an ASCII space character, if the regulations under\nwhich the AP Interface is operating encompass all\nenvironments in the country,\n\n2. an ASCII 'O' character, if the regulations under\nwhich the AP Interface is operating are for an Outdoor\nenvironment only, or\n\n3. an ASCII 'I' character, if the regulations under\nwhich the AP Interface is operating are for an Indoor\nenvironment only.\"\"\",\n        }, # column\n        \"bsnAPIfDot11SmtParamsConfigType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"customized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute suggests if the Station parameters for\nthis radio are automatically set or have been \ncustomized.\"\"\",\n        }, # column\n        \"bsnAPIfDot11BSSID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BSSID of this AP config which would be the MAC Address of AP\"\"\",\n        }, # column\n        \"bsnAPIfMultiDomainCapabilityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each entry represents an 803.2 or an 802.11 interface in an \nAirespace AP.\"\"\",\n        }, # table\n        \"bsnAPIfMultiDomainCapabilityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"Each entry represents an 803.2 or an 802.11 interface in an \nAirespace AP.\"\"\",\n        }, # row\n        \"bsnAPIfDot11MaximumTransmitPowerLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum transmit power, \nin dBm, allowed in the subband for the associated domain \ncountry string. The default value of this attribute shall\nbe zero.\"\"\",\n        }, # column\n        \"bsnAPIfDot11FirstChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the lowest \nchannel number in the subband for the associated domain \ncountry string. The default value of this attribute shall\nbe zero.\"\"\",\n        }, # column\n        \"bsnAPIfDot11NumberofChannels\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.4.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the total \nnumber of channels allowed in the subband for the \nassociated domain country string. The default value \nof this attribute shall be zero.\"\"\",\n        }, # column\n        \"bsnAPIfMacOperationParamTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Group contains MAC attributes pertaining to the operation\nof the MAC. These would be read only attributes as they \nwould be updated by RRM Dynamic Algorithm. If user needs \nto configure them then they can only be configured \nglobally\"\"\",\n        }, # table\n        \"bsnAPIfMacOperationParamEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the bsnAPIfMacOperationParamEntry Table.\nInterface tables in this MIB module are indexed\nby bsnAPDot3MacAddress, bsnAPIfSlotId.\"\"\",\n        }, # row\n        \"bsnAPIfDot11MacRTSThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2347\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is \nread only parameter updated by RRM dynamic algorithm\"\"\",\n        }, # column\n        \"bsnAPIfDot11MacShortRetryLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is\nread only parameter updated by RRM dynamic algorithm\"\"\",\n        }, # column\n        \"bsnAPIfDot11MacLongRetryLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is\nread only parameter updated by RRM dynamic algorithm\"\"\",\n        }, # column\n        \"bsnAPIfDot11MacFragmentationThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"256\",\n                        \"max\" : \"2346\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is\nread only parameter updated by RRM dynamic algorithm \"\"\",\n        }, # column\n        \"bsnAPIfDot11MacMaxTransmitMSDULifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is\nread only parameter updated by RRM dynamic algorithm\"\"\",\n        }, # column\n        \"bsnAPIfDot11MacParamsConfigType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"customized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute suggests if the MAC parameters for this\nradio are automatically set or have been customized.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MacMaxReceiveLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.5.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If bsnAPIfMacParamsAutomaticOn is true then this is\nread only parameter updated by RRM dynamic algorithm\"\"\",\n        }, # column\n        \"bsnAPIfDot11CountersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Group containing attributes that are MAC counters.\nEach instance represents counters on a AP dot11 interface\"\"\",\n        }, # table\n        \"bsnAPIfDot11CountersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the dot11CountersEntry Table.\nInterface tables in this MIB module are indexed\nby bsnAPDot3MacAddress and bsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfDot11TransmittedFragmentCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall be incremented for an acknowledged MPDU\nwith an individual address in the address 1 field or an MPDU\nwith a multicast address in the address 1 field of type Data\nor Management.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MulticastTransmittedFrameCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment only when the multicast bit\nis set in the destination MAC address of a successfully\ntransmitted MSDU.  When operating as a STA in an ESS, where\nthese frames are directed to the AP, this implies having\nreceived an acknowledgment to all associated MPDUs.\"\"\",\n        }, # column\n        \"bsnAPIfDot11RetryCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when an MSDU is successfully\ntransmitted after one or more retransmissions.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MultipleRetryCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when an MSDU is successfully\ntransmitted after more than one retransmission.\"\"\",\n        }, # column\n        \"bsnAPIfDot11FrameDuplicateCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when a frame is received\nthat the Sequence Control field indicates is a\nduplicate.\"\"\",\n        }, # column\n        \"bsnAPIfDot11RTSSuccessCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when a CTS is received in\nresponse to an RTS.\"\"\",\n        }, # column\n        \"bsnAPIfDot11RTSFailureCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when a CTS is not received in\nresponse to an RTS.\"\"\",\n        }, # column\n        \"bsnAPIfDot11ACKFailureCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when an ACK is not received\nwhen expected.\"\"\",\n        }, # column\n        \"bsnAPIfDot11ReceivedFragmentCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall be incremented for each successfully\nreceived MPDU of type Data or Management.\"\"\",\n        }, # column\n        \"bsnAPIfDot11MulticastReceivedFrameCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when a MSDU is received\nwith the multicast bit set in the destination\nMAC address.\"\"\",\n        }, # column\n        \"bsnAPIfDot11FCSErrorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when an FCS error is\ndetected in a received MPDU.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TransmittedFrameCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment for each successfully\ntransmitted MSDU.\"\"\",\n        }, # column\n        \"bsnAPIfDot11WEPUndecryptableCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when a frame is received with\nthe WEP subfield of the Frame Control field set to one and the\nWEPOn value for the key mapped to the TA's MAC address\nindicates that the frame should not have been encrypted or\nthat frame is discarded due to the receiving STA not\nimplementing the privacy option.\"\"\",\n        }, # column\n        \"bsnAPIfDot11FailedCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.6.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter shall increment when an MSDU is not transmitted\nsuccessfully due to the number of transmit attempts exceeding\neither the  bsnAPIfDot11ShortRetryLimit or dot11LongRetryLimit.\"\"\",\n        }, # column\n        \"bsnAPIfDot11PhyTxPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"Group of attributes for bsnAPIfDot11PhyTxPowerTable.\nImplemented as a table indexed on STA ID to allow for \nmultiple instances on an Agent. This table has been\ndeprecated. The level and power can be obtained from\nbsnAPIfTable(bsnAPIfAbsolutePowerList).\"\"\",\n        }, # table\n        \"bsnAPIfDot11PhyTxPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the bsnAPIfDot11PhyTxPower Table.\nInterface tables in this MIB module are indexed\nby bsnAPDot3MacAddress, bsnAPIfSlotId.\"\"\",\n        }, # row\n        \"bsnAPIfDot11NumberSupportedPowerLevels\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of power levels supported by the PMD.\nThis attribute can have a value of 1 to 8.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL1 in mW.\nThis is also the default power level. It is same as the \nMaximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL2 in mW. It is 1/2 of \nthe Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL3 in mW. It is 1/4th \nof the Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL4 in mW. It is 1/8th of\nthe Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL5 in mW. It is 1/16th \nof the Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL6 in mW. It is 1/32th \nof the Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL7 in mW. It is 1/64th \nof the Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TxPowerLevel8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.8.1.28\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmit output power for LEVEL8 in mW. It is 1/128th\nof the Maximum power level available on an AP interface.\"\"\",\n        }, # column\n        \"bsnAPIfDot11PhyChannelTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Entry of attributes for bsnAPIfDot11PhyChannelEntry.\nImplemented as a table indexed on bsnAPDot3MacAddress,\nbsnAPIfSlotId allow for multiple instances on an Agent\"\"\",\n        }, # table\n        \"bsnAPIfDot11PhyChannelEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the bsnAPIfDot11PhyChannelEntry Table.\nInterface tables in this MIB module are indexed\nby bsnAPDot3MacAddress, bsnAPIfSlotId.\"\"\",\n        }, # row\n        \"bsnAPIfDot11CurrentCCAMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"edonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"csonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"edandcs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cswithtimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hrcsanded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current CCA method in operation.Valid values are:\nenergy detect only (edonly) = 01,\ncarrier sense only (csonly) = 02,\ncarrier sense and energy detect (edandcs)= 04\ncarrier sense with timer (cswithtimer)= 08\nhigh rate carrier sense and energy detect \n(hrcsanded)=16.\"\"\",\n        }, # column\n        \"bsnAPIfDot11EDThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current Energy Detect Threshold being used by the \nChannel PHY.\"\"\",\n        }, # column\n        \"bsnAPIfDot11TIThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.9.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Threshold being used to detect a busy medium (frequency).\nCCA shall report a busy medium upon detecting the RSSI above \nthis threshold.\"\"\",\n        }, # column\n        \"bsnAPIfProfileThresholdConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of attributes for various thresholds to be\nset on each Airespace AP Interface for Load \nperformance profile , interference performance \nprofile and Noise performance profile.\"\"\",\n        }, # table\n        \"bsnAPIfProfileThresholdConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Phy Thresholds \nTable. Entries in this MIB are indexed by \nbsnAPDot3MacAddress and bsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfProfileParamAssignment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"customized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this value is automatic then Profile Parameters in \nbsnRrmDot11aAPProfile at the global level will be used.\nIf this value is customized then Profile Parameters in \nbsnAPIfProfileThresholdConfig\nTable will be used and user can customize them per AP.\"\"\",\n        }, # column\n        \"bsnAPIfForeignInterferenceThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"foreign interference threshold between 0 and 100 percent.\"\"\",\n        }, # column\n        \"bsnAPIfForeignNoiseThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-127\",\n                        \"max\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"foreign noise threshold between -100 and -50 dBm.\"\"\",\n        }, # column\n        \"bsnAPIfRFUtilizationThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"RF utlization threshold between 0 and 100 percent.\"\"\",\n        }, # column\n        \"bsnAPIfThroughputThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1000\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Airespace AP data-rate threshold between 1000 and 100000\"\"\",\n        }, # column\n        \"bsnAPIfMobilesThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Airespace AP mobiles threshold between 1 and 75\"\"\",\n        }, # column\n        \"bsnAPIfCoverageThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"  Airespace AP coverage threshold between 3 and 50\"\"\",\n        }, # column\n        \"bsnAPIfMobileMinExceptionLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"  Airespace AP mobile minimum exception level between 1 and 1000\"\"\",\n        }, # column\n        \"bsnAPIfCoverageExceptionLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.12.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Airespace AP coverage exception level between 0 and 100 percent.\"\"\",\n        }, # column\n        \"bsnAPIfLoadParametersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"These are RRM performance related read only parameters\nper Airespace AP\"\"\",\n        }, # table\n        \"bsnAPIfLoadParametersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by \nbsnAPDot3MacAddress and bsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfLoadRxUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the percentage of time the Airespace AP \nreceiver is busy operating on packets. It is a number \nfrom 0-100 representing a load from 0 to 1.\"\"\",\n        }, # column\n        \"bsnAPIfLoadTxUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the percentage of time the Airespace AP \ntransmitter is busy operating on packets. It is a \nnumber from 0-100 representing a load from 0 to 1.\"\"\",\n        }, # column\n        \"bsnAPIfLoadChannelUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel Utilization\"\"\",\n        }, # column\n        \"bsnAPIfLoadNumOfClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the number of clients attached to this Airespace \nAP at the last measurement interval(This comes from \nAPF)\"\"\",\n        }, # column\n        \"bsnAPIfPoorSNRClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.13.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the number of clients with poor SNR attached to \nthis Airespace AP at the last measurement interval \n( This comes from APF ).\"\"\",\n        }, # column\n        \"bsnAPIfChannelInterferenceInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of channel information like interference\nand noise from other 802.11 networks on each channel.\"\"\",\n        }, # table\n        \"bsnAPIfChannelInterferenceInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfInterferenceChannelNo\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by \nbsnAPDot3MacAddress, bsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfInterferenceChannelNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel Number on AP\"\"\",\n        }, # column\n        \"bsnAPIfInterferencePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power of Interference from other 802.11 networks on \nthis channel\"\"\",\n        }, # column\n        \"bsnAPIfInterferenceUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.14.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interference from other 802.11 networks on this \nchannel\"\"\",\n        }, # column\n        \"bsnAPIfChannelNoiseInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of channel information like \ninterference and noise from other 802.11 networks on \neach channel.\"\"\",\n        }, # table\n        \"bsnAPIfChannelNoiseInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfNoiseChannelNo\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfNoiseChannelNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel Number on AP\"\"\",\n        }, # column\n        \"bsnAPIfDBNoisePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.15.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the average noise power in dBm on \neach channel that is available to Airespace AP\"\"\",\n        }, # column\n        \"bsnAPIfProfileStateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of state of interference monitor\non each Airespace AP\"\"\",\n        }, # table\n        \"bsnAPIfProfileStateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfLoadProfileState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"ProfileState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This field represents the current state of the LOAD\nmonitor. This is a total measurement of the business of\nthis Airespace AP. PASS indicates that this Airespace \nAP is performing adequately compared to the Airespace \nAP profile. FAIL indicates the Airespace AP is not\nperforming adequately against the LOAD profile.\"\"\",\n        }, # column\n        \"bsnAPIfInterferenceProfileState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"ProfileState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This field represents the current state of Interference\nmonitor. This is a total measurement of the interference\npresent at this Airespace AP. PASS indicates that this \nAirespace AP is performing adequately compared to the \nInterference profile.  FAIL indicates the Airespace AP \nis not performing adequately against the Interference \nprofile.\"\"\",\n        }, # column\n        \"bsnAPIfNoiseProfileState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"ProfileState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This field represents the current state of Noise\nmonitor. This is a total measurement of the noise\npresent at this Airespace AP. PASS indicates that this \nAirespace AP is performing adequately compared to the \nnoise profile.\nFAIL indicates the Airespace AP is not performing \nadequately against the noise profile.\"\"\",\n        }, # column\n        \"bsnAPIfCoverageProfileState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.16.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"ProfileState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This field represents the current state of coverage\nmonitor. This is a total measurement of the client \ncoverage at this Airespace AP. PASS indicates that \nthis  Airespace AP is performing adequately compared \nto the  coverage profile. FAIL indicates the Airespace\nAP is not performing adequately against the coverage \nprofile.\"\"\",\n        }, # column\n        \"bsnAPIfRxNeighborsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of Rx Neighbors for each Airespace AP\nwith their RSSI value.\"\"\",\n        }, # table\n        \"bsnAPIfRxNeighborsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfRxNeighborMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress\nbsnAPIfSlotId, bsnAPIfRxNeighborMacAddress\"\"\",\n        }, # row\n        \"bsnAPIfRxNeighborMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC Address of Rx Neighbor of the Airespace AP\"\"\",\n        }, # column\n        \"bsnAPIfRxNeighborIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP Address of Rx Neighbor of the Airespace AP\"\"\",\n        }, # column\n        \"bsnAPIfRxNeighborRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RSSI value of the Rx Neighbor\"\"\",\n        }, # column\n        \"bsnAPIfRxNeighborSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.17.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Slot value of the Rx Neighbor\"\"\",\n        }, # column\n        \"bsnAPIfStationRSSICoverageInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of channel information like interference\nand noise from other 802.11 networks on each channel.\"\"\",\n        }, # table\n        \"bsnAPIfStationRSSICoverageInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfStationRSSICoverageIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfStationRSSICoverageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RSSI Coverage Index on AP\"\"\",\n        }, # column\n        \"bsnAPIfRSSILevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RSSI Level\"\"\",\n        }, # column\n        \"bsnAPIfStationCountOnRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.18.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of stations on this RSSI Level\"\"\",\n        }, # column\n        \"bsnAPIfStationSNRCoverageInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of Signal to Noise ratio Coverage \ninformation on an AP Interface.\"\"\",\n        }, # table\n        \"bsnAPIfStationSNRCoverageInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfStationSNRCoverageIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfStationSNRCoverageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SNR Coverage Index on AP\"\"\",\n        }, # column\n        \"bsnAPIfSNRLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SNR Level\"\"\",\n        }, # column\n        \"bsnAPIfStationCountOnSNR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.19.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of stations on this SNR Level\"\"\",\n        }, # column\n        \"bsnAPIfRecommendedRFParametersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\" This table list Best Channel,Best TxPowerLevel,\nBest RTSThreshold,Best FragmentationThreshold etc\nfor this AP Interface as determined by RRM.\"\"\",\n        }, # table\n        \"bsnAPIfRecommendedRFParametersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId\"\"\",\n        }, # row\n        \"bsnAPIfRecommendedChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Recommended ChannelNumber by RRM for this APIf\"\"\",\n        }, # column\n        \"bsnAPIfRecommendedTxPowerLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Recommended TxPowerLevel by RRM for this APIf\"\"\",\n        }, # column\n        \"bsnAPIfRecommendedRTSThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Recommended RTSThreshold by RRM for this APIf\"\"\",\n        }, # column\n        \"bsnAPIfRecommendedFragmentationThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.20.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Recommended Fragmentation Threshold by RRM for this \nAPIf\"\"\",\n        }, # column\n        \"bsnAPIfWlanOverrideTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each entry represents an SSID added to the AP when the \nattribute bsnAPIfWlanOverride on the radio is enabled.\nThis means only those WLANs on the switch that are added to \nthis table will be available on such a radio.\"\"\",\n        }, # table\n        \"bsnAPIfWlanOverrideEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.21.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfWlanOverrideId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnAPIfWlanOverrideTable\"\"\",\n        }, # row\n        \"bsnAPIfWlanOverrideId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Index of the WLAN (bsnDot11EssIndex) added to the radio.\nAirespace Switch supports 16 Airespace WLANs so index\nwill be from 1 to 16.\"\"\",\n        }, # column\n        \"bsnAPIfWlanOverrideSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SSID assigned to the override WLAN.\"\"\",\n        }, # column\n        \"bsnAPIfWlanOverrideRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.21.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A row status type for the bsnAPIfWlanOverrideEntry\"\"\",\n        }, # column\n        \"bsnMeshNodeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of mesh nodes.\"\"\",\n        }, # table\n        \"bsnMeshNodeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress\"\"\",\n        }, # row\n        \"bsnMeshNodeRole\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the role of this AP\"\"\",\n        }, # column\n        \"bsnMeshNodeGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the bridge group name of this AP\"\"\",\n        }, # column\n        \"bsnMeshNodeBackhaul\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the backhaul radio device for this AP\"\"\",\n        }, # column\n        \"bsnMeshNodeBackhaulPAP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot11g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the backhaul \"\"\",\n        }, # column\n        \"bsnMeshNodeBackhaulRAP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"the backhaul radio device for this AP\"\"\",\n        }, # column\n        \"bsnMeshNodeDataRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"this nodes backhaul data rate\"\"\",\n        }, # column\n        \"bsnMeshNodeChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"this nodes backhaul channel\"\"\",\n        }, # column\n        \"bsnMeshNodeRoutingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"seek\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"auth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"maint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"routing state\"\"\",\n        }, # column\n        \"bsnMeshNodeMalformedNeighPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the number of malformed neighbor packets.\"\"\",\n        }, # column\n        \"bsnMeshNodePoorNeighSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"poor neighbor snr\"\"\",\n        }, # column\n        \"bsnMeshNodeBlacklistPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the number of blacklist packets received\"\"\",\n        }, # column\n        \"bsnMeshNodeInsufficientMemory\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"occurences of insufficient memory conditions\"\"\",\n        }, # column\n        \"bsnMeshNodeRxNeighReq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rx neighbor requests\"\"\",\n        }, # column\n        \"bsnMeshNodeRxNeighRsp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rx neighbor responses\"\"\",\n        }, # column\n        \"bsnMeshNodeTxNeighReq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tx neighbor requests\"\"\",\n        }, # column\n        \"bsnMeshNodeTxNeighRsp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tx neighbor responses\"\"\",\n        }, # column\n        \"bsnMeshNodeParentChanges\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"number of parent changes\"\"\",\n        }, # column\n        \"bsnMeshNodeNeighTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"number of neighbor timeouts\"\"\",\n        }, # column\n        \"bsnMeshNodeParentMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"parents mac addressed\"\"\",\n        }, # column\n        \"bsnMeshNodeAPType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"indoorBridge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"outdoorBridge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the type of AP\"\"\",\n        }, # column\n        \"bsnMeshNodeEthernetBridge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"enable  : Enables ethernet bridging on the AP.\ndisable : Disables ethernet bridging on the AP.\nChanges are only applicable when AP is in 'Bridge' \nmode. \"\"\",\n        }, # column\n        \"bsnMeshNodeHops\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.22.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"number of hops to rap\"\"\",\n        }, # column\n        \"bsnMeshNeighsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of mesh neighbors.\"\"\",\n        }, # table\n        \"bsnMeshNeighsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnMeshNeighMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress\nand bsnMeshNeighNeighMacAddress\"\"\",\n        }, # row\n        \"bsnMeshNeighMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC Address of neighbor\"\"\",\n        }, # column\n        \"bsnMeshNeighType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"parent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tentparent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"blacklisted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"child\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"neighbor type\"\"\",\n        }, # column\n        \"bsnMeshNeighState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"updated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"needupdate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"neighbor state\"\"\",\n        }, # column\n        \"bsnMeshNeighSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"explicitly set SNR\"\"\",\n        }, # column\n        \"bsnMeshNeighSnrUp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"snr up\"\"\",\n        }, # column\n        \"bsnMeshNeighSnrDown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"snr down\"\"\",\n        }, # column\n        \"bsnMeshNeighLinkSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"link snr\"\"\",\n        }, # column\n        \"bsnMeshNeighAdjustedEase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"hops adjusted ease\"\"\",\n        }, # column\n        \"bsnMeshNeighUnadjustedEase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ease to root AP from this AP\"\"\",\n        }, # column\n        \"bsnMeshNeighRapEase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"unadjusted ease received in last hello\"\"\",\n        }, # column\n        \"bsnMeshNeighTxParent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"tx packets to this node while a parent\"\"\",\n        }, # column\n        \"bsnMeshNeighRxParent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"rx packets from this node while a parent\"\"\",\n        }, # column\n        \"bsnMeshNeighPoorSnr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"packets with poor snr received from this node\"\"\",\n        }, # column\n        \"bsnMeshNeighLastUpdate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"last received hello from this neighbor\"\"\",\n        }, # column\n        \"bsnMeshNeighParentChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.23.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"when this node last became parent\"\"\",\n        }, # column\n        \"bsnAPIfRadarChannelStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of channel information on which radar \nsignal were detected. This will give the list of \nchannels and last heard timestamp. Radar signals are \ndetected only on 5Ghz range. \nSo this will be detected for 802.11a interface.\"\"\",\n        }, # table\n        \"bsnAPIfRadarChannelStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPDot3MacAddress\",\n                \"bsnAPIfSlotId\",\n                \"bsnAPIfRadarDetectedChannelNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the Table.\nEntries in this MIB are indexed by bsnAPDot3MacAddress,\nbsnAPIfSlotId, bsnAPIfRadarDetectedCannelNumber.\"\"\",\n        }, # row\n        \"bsnAPIfRadarDetectedChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel Number on which radar signals were detected.\"\"\",\n        }, # column\n        \"bsnAPIfRadarSignalLastHeard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.2.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This tells how many seconds ago radar signal was heard \non the channel.\"\"\",\n        }, # column\n        \"bsnGlobalDot11\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3\",\n        }, # node\n        \"bsnGlobalDot11Config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1\",\n        }, # node\n        \"bsnGlobalDot11PrivacyOptionImplemented\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notimplemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"implemented\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when true, shall indicate that the IEEE\n802.11 WEP option is implemented.  The default value of\nthis attribute shall be false.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11AuthenticationResponseTimeOut\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of TU that a\nresponding STA should wait for the next frame in the\nauthentication sequence.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11MultiDomainCapabilityImplemented\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when TRUE, indicates that the\nstation implementation is capable of supporting\nmultiple regulatory domains.  The capability is\ndisabled, otherwise.  The default value of this\nattribute is FALSE.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11MultiDomainCapabilityEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when TRUE, indicates that the\ncapability of the station to operate in multiple\nregulatory domains is enabled.  The capability is\ndisabled, otherwise.  The default value of this\nattribute is FALSE.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11CountryIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"usa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"canada\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"france\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"japan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mexico\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"spain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"usalegacy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"korearepublic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"australia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"austria\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"belgium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"denmark\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"finland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"germany\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"greece\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"ireland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"italy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"luxembourg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"netherlands\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"portugal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"sweden\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"unitedkingdom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"india\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"hongkong\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"switzerland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"iceland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"norway\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"singapore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"thailand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"taiwan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"cyprus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"czechrepublic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"estonia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"hungary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"lithuania\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"latvia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"malaysia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"newzealand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"poland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"slovenia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"slovakrepublic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"southafrica\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"usachan165\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"israel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"israelOutdoor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"argentina\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"brazil\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"saudiArabia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"turkey\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"indonesia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"china\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"koreaExtended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"japan2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"gibraltar\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"liechtenstein\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"malta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"monaco\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"romania\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"russianfederation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"chile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"colombia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"panama\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"peru\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"venezuela\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"philippines\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute identifies the country in which the\nstation is operating.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11LoadBalancing\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies if load balancing of clients is \nenabled on disabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11RogueTimer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"120\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies in seconds, the time interval after \nwhich a Rogue Entry in Rogue Table will expire if no beacon \nis heard from a Rogue.\"\"\",\n        }, # scalar\n        \"bsnPrimaryMwarForAPs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies if this Switch acts a Master Switch \nfor the Airespace APs.\nSo if an Airespace AP doesn't find its Primary Switch, it will\nassociate with this Switch.\"\"\",\n        }, # scalar\n        \"bsnRtpProtocolPriority\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nopriority\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"highpriority\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Real Time Protocol Priority.\"\"\",\n        }, # scalar\n        \"bsnSystemCurrentTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute will display the Current System time on the \nSwitch.\"\"\",\n        }, # scalar\n        \"bsnUpdateSystemTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Use this attribute to change the System time on the Switch.\nSpecify the new time in this Format MM/DD/YYYY HH:MM:SS\"\"\",\n        }, # scalar\n        \"bsnOperatingTemperatureEnvironment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"commercial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"industrial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating Environment of the Airespace Switch.\ncommercial is Commercial (0 to 40 C) and\nindustrial is Industrial (-10 to 70 C)\"\"\",\n        }, # scalar\n        \"bsnSensorTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Internal Temperature of the unit in Centigrade\"\"\",\n        }, # scalar\n        \"bsnTemperatureAlarmLowLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Internal Temperature Alarm Low Limit in Centigrade. If the \nbsnSensorTemperature goes below this limit \nbsnSensedTemperatureTooLow Alarm will be sent out\"\"\",\n        }, # scalar\n        \"bsnTemperatureAlarmHighLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Internal Temperature Alarm High Limit in Centigrade. If the \nbsnSensorTemperature goes above this limit \nbsnSensedTemperatureTooHigh Alarm will be sent out\"\"\",\n        }, # scalar\n        \"bsnVirtualGatewayAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Virtual Gateway Address of the Switch. This is used by web \nauth and Ipsec. If the virtual IP Address is changed, the \nSwitch has to be rebooted for the new Address to take effect. \nThis is now replaced by the Virtual Interface in bsnswitching\nMIB.\"\"\",\n        }, # scalar\n        \"bsnRFMobilityDomainName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"RF Mobility Group Name to which this Airespace Switch belongs.\nAirespace Switches on a network form a RF Group as well as a\nMobility Group. RF Groups does the channel and power \nmanagement of AP while Mobility Group does load balancing and \nhand off for clients.\"\"\",\n        }, # scalar\n        \"bsnClientWatchListFeature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag should be turned on for the client watch lists \nto be enabled on the switch. When enabled, the switch \ngenerates Client Association and Authentication traps for\nthe watchlisted clients.\"\"\",\n        }, # scalar\n        \"bsnRogueLocationDiscoveryProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag should be turned on to enable the Rogue \nLocation Discovery Protocol feature on the switch.\"\"\",\n        }, # scalar\n        \"bsnRogueAutoContainFeature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow the switch to \ncontain the rogues automatically if detected\non the wired network.\"\"\",\n        }, # scalar\n        \"bsnOverAirProvisionApMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Over the Air Provisioning Mode for APs\"\"\",\n        }, # scalar\n        \"bsnMaximumNumberOfConcurrentLogins\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies the maximum number of \nconcurrent logins that the switch will allow for a \nsingle user. A value 0 implies that there is \nno restriction on the number of concurrent logins \nwith a single username.\"\"\",\n        }, # scalar\n        \"bsnAutoContainRoguesAdvertisingSsid\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"alarmOnly\",\n            \"description\" :\n                \"\"\"This flag should be set to 1 to allow the switch to \ncontain automatically those rogues that are \nadvertising our SSID. If value is 0, only an alarm \nwill be generated when such a rogue is detected.\"\"\",\n        }, # scalar\n        \"bsnAutoContainAdhocNetworks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"alarmOnly\",\n            \"description\" :\n                \"\"\"This flag should be set to 1 to allow the switch to \ncontain automatically the adhoc networks\ndetected by the switch. If value is 0, only an alarm \nwill be generated when such a network is detected.\"\"\",\n        }, # scalar\n        \"bsnAutoContainTrustedClientsOnRogueAps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"alarmOnly\",\n            \"description\" :\n                \"\"\"This flag should be set to 1 to allow the switch to \ncontain automatically those trusted clients that\nare associated to rogue APs. If value is 0, only an \nalarm will be generated when such a client is \ndetected.\"\"\",\n        }, # scalar\n        \"bsnValidateRogueClientsAgainstAAA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow the switch to\nvalidate 'valid' mobiles associating with rogue APs.\nFor example, if a client's MAC Address is found in \nthe local MAC filter table, that client can be \nvalidated.\"\"\",\n        }, # scalar\n        \"bsnSystemTimezoneDelta\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delta (difference) between the local time and the \nUniversal Coordinated Time in hours.\nFor example, it is -8 for the PST and +1 for France. If \nthe delta is -5.30 then this attribute will store -5 and \nbsnSystemTimezoneDeltaMinutes will store 30. This value i\nshould be between -23 to +23 \"\"\",\n        }, # scalar\n        \"bsnSystemTimezoneDaylightSavings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if daylight savings are enabled for \nthe current timezone.\"\"\",\n        }, # scalar\n        \"bsnAllowAuthorizeApAgainstAAA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if LWAPP is allowed to get \nauthorization via RADIUS or local database for an AP.\"\"\",\n        }, # scalar\n        \"bsnSystemTimezoneDeltaMinutes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minutes component of delta (difference) between the \nlocal time and the Universal Coordinated Time.\"\"\",\n        }, # scalar\n        \"bsnApFallbackEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if the APs should continue LWAPP \ndiscoveries to fallback to the primary switch\nin case they are not already associated with it i.e they \nare associated with their respective secondary or \ntertiary switch instead.\"\"\",\n        }, # scalar\n        \"bsnAppleTalkEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag turns on the appletalk bridging in the switch \nsuch that the packets from Apple clients that use\nappletalk format can be processed by the switch. When \nthis flag is off, these packets are dropped.\"\"\",\n        }, # scalar\n        \"bsnTrustedApPolicyConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40\",\n        }, # node\n        \"bsnPolicyForMisconfiguredAps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"alarmOnly\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow the switch to \ncontain misconfigured APs.\"\"\",\n        }, # scalar\n        \"bsnEncryptionPolicyEnforced\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wpa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"The encryption policy that is enforced on the \ntrusted APs.\"\"\",\n        }, # scalar\n        \"bsnPreamblePolicyEnforced\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"short\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"long\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"The preamble policy that is enforced on the trusted \nAPs.\"\"\",\n        }, # scalar\n        \"bsnDot11ModePolicyEnforced\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dcfOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pcfOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"The 802.11 Mode policy that is enforced on the \ntrusted APs.\"\"\",\n        }, # scalar\n        \"bsnRadioTypePolicyEnforced\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"aOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bgOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"The radio type policy that is enforced on the \ntrusted\n APs.\"\"\",\n        }, # scalar\n        \"bsnValidateSsidForTrustedAp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"If enabled, the SSID of trusted APs will be \nvalidated\n by the switch.\"\"\",\n        }, # scalar\n        \"bsnAlertIfTrustedApMissing\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"If enabled, an alert will be generated when a \ntrusted AP is missing.\"\"\",\n        }, # scalar\n        \"bsnTrustedApEntryExpirationTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.40.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"120\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"120\",\n            \"description\" :\n                \"\"\"This attribute specifies in seconds, the time interval after \nwhich a Trusted AP Entry will expire if no beacon is heard \nfrom that AP.\"\"\",\n        }, # scalar\n        \"bsnClientExclusionPolicyConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41\",\n        }, # node\n        \"bsnExcessive80211AssocFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if repeated 802.11 Association \nFailures occurs with a client.\"\"\",\n        }, # scalar\n        \"bsnExcessive80211AuthFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if repeated 802.11 Authentication \nFailures occurs with a client.\"\"\",\n        }, # scalar\n        \"bsnExcessive8021xAuthFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if repeated 802.1x Authentication \nFailures occurs with a client.\"\"\",\n        }, # scalar\n        \"bsnExternalPolicyServerFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if repeated external policy server \nfailures occurs with a client.\"\"\",\n        }, # scalar\n        \"bsnExcessiveWebAuthFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if repeated Web Authentication Failures\noccurs with a client.\"\"\",\n        }, # scalar\n        \"bsnIPTheftORReuse\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.41.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if client should be excluded\n(blacklisted) if it appears to be reusing an IP \nAddress.(Possible IP Theft)\"\"\",\n        }, # scalar\n        \"bsnSignatureConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42\",\n        }, # node\n        \"bsnStandardSignatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing Standard Signatures configured on the \nswitch. The standard signatures are provided with the \nreleased product. The standard signatures can be updated\nvia file download to the switch. The table is indexed by \nthe precedence of the signatures.\"\"\",\n        }, # table\n        \"bsnStandardSignatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnStandardSignaturePrecedence\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnStandardSignaturePrecedence\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Precedence of the signature. This specifies the order in\nwhich the signature is applied to a packet.\"\"\",\n        }, # column\n        \"bsnStandardSignatureName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is used to configure the name on a \nsignature.\"\"\",\n        }, # column\n        \"bsnStandardSignatureDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is used to configure the description of a\nsignature.\"\"\",\n        }, # column\n        \"bsnStandardSignatureFrameType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"management\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"data\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the type of frame that needs to\nmatch a signature.\"\"\",\n        }, # column\n        \"bsnStandardSignatureAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"report\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"exclude\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the action to be taken once a \npacket is found to match a signature.\"\"\",\n        }, # column\n        \"bsnStandardSignatureState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the state of a signature. It \nis used to match packets only if the state is enabled.\"\"\",\n        }, # column\n        \"bsnStandardSignatureFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the frequency of the matching packets \nafter which the specified action is taken.\"\"\",\n        }, # column\n        \"bsnStandardSignatureQuietTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the quiet time in seconds during which no\nmatching packets are found after which the attack is \nconsidered stopped.\"\"\",\n        }, # column\n        \"bsnStandardSignatureVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the signature version.\"\"\",\n        }, # column\n        \"bsnStandardSignatureConfigType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pattern\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"protocol\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the type of Signature \nconfiguration. It's protocol when the protocol format is\nused in the UI to configure this. Pattern is the config \ntype for all signatures in the released signature file \nand when signatures are configured using pattern\nformat. Note: the signatures will be allowed to be i\nconfigured in later releases.\"\"\",\n        }, # column\n        \"bsnStandardSignatureEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object configures the status of a particular\nstandard signature on LWAPP APs, for use in performing\nsignature analysis on the received 802.11 data and/or\nmanagement frames.\n\nA value of 'true' makes the Controller send the\n'Signature Add LWAPP Message' to all the joined APs\nwith the status field set to 'enable'.  This makes\nthe joined APs perform signature analysis on the\nreceived 802.11 data and/or management frames and\nreport the discrepancies observed, if any, to the\nController.\n\nA value of 'false' makes the Controller send the\n'Signature Add LWAPP Message' to all the joined APs\nwith the status field set to 'disable'.  The joined\nAPs doesn't perform the signature analysis on the\nreceived 802.11 data and/or management frames for\nthis particular signature, till the signature is\nenabled. \"\"\",\n        }, # column\n        \"bsnStandardSignatureMacInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"BsnTxtSignatureMacInfo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object defines the pattern followed by the\nLWAPP APs to perform signature analysis with this\nStandard signature and report the results to the\nController. \"\"\",\n        }, # column\n        \"bsnStandardSignatureMacFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object specifies the frequency of matching\npackets from a particular source after which the\nspecified action is taken. \"\"\",\n        }, # column\n        \"bsnStandardSignatureRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Row Status for creation/deletion. Signature will allowed to\nbe created, deleted and edited in later releases.\"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing the matching patterns specified for a i\nStandard Signature. These are instrumental in\nmatching the signature with a packet. A maximum of 5 i\npatterns may be specifed for a signature.\nThese are used for matching in the order of their index.\"\"\",\n        }, # table\n        \"bsnStandardSignaturePatternEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnStandardSignaturePrecedence\",\n                \"bsnStandardSignaturePatternIndex\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnStandardSignaturePatternIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of the pattern. This specifies the order in which \nthe pattern is checked against the packet contents.\"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Offset from the start of the packet where the AP looks \nfor a match to the pattern.\"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the pattern string that the AP uses to match at \nthe offset. Example: 0x616c7068615f3178\"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the pattern mask. This is the bit mask that the \nAP uses to mask out the bits in the packet at the given \noffset. Example: 0xffffffffffffffff\"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternOffSetStart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"BsnSignaturePatternOffSetStart\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates how an offset should be applied\nwhile doing signature analysis for QOS and non-QOS\ndata frames with this standard signature. \"\"\",\n        }, # column\n        \"bsnStandardSignaturePatternRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Row Status for creation/deletion. Signature Pattern will allowed\nto be created, deleted and edited in later releases.\"\"\",\n        }, # column\n        \"bsnCustomSignatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing Standard Signatures configured on the \nswitch. The standard signatures are provided\nwith the released product. The standard signatures can be\nupdated via file download to the switch. The table\nis indexed by the precedence of the signatures.\"\"\",\n        }, # table\n        \"bsnCustomSignatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnCustomSignaturePrecedence\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnCustomSignaturePrecedence\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Precedence of the signature. This specifies the order in \nwhich the signature is applied to a packet.\"\"\",\n        }, # column\n        \"bsnCustomSignatureName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is used to configure the name on a \nsignature.\"\"\",\n        }, # column\n        \"bsnCustomSignatureDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is used to configure the description of a\nsignature.\"\"\",\n        }, # column\n        \"bsnCustomSignatureFrameType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"management\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"data\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the type of frame that needs to \nmatch a signature.\"\"\",\n        }, # column\n        \"bsnCustomSignatureAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"report\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"exclude\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the action to be taken once a \npacket is found to match a signature.\"\"\",\n        }, # column\n        \"bsnCustomSignatureState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the state of a signature. It is \nused to match packets only if the state is enabled.\"\"\",\n        }, # column\n        \"bsnCustomSignatureFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the frequency of the matching packets \nafter which the specified action is taken.\"\"\",\n        }, # column\n        \"bsnCustomSignatureQuietTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the quiet time in seconds during which no\nmatching packets are found after which the\nattack is considered stopped.\"\"\",\n        }, # column\n        \"bsnCustomSignatureVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the signature version.\"\"\",\n        }, # column\n        \"bsnCustomSignatureConfigType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pattern\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"protocol\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the type of Signature \nconfiguration. It's protocol when the protocol format is\nused in the UI to configure this. Pattern is the config \ntype for all signatures in the released signature file \nand when signatures are configured using pattern\nformat. Note: the signatures will be allowed to be \nconfigured in later releases.\"\"\",\n        }, # column\n        \"bsnCustomSignatureEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object configures the status of a particular\nCustom signature on LWAPP APs, for use in performing\nsignature analysis on the received 802.11 data and/or\nmanagement frames.\n\nA value of 'true' makes the Controller send the\n'Signature Add LWAPP Message' to all the joined APs\nwith the status field set to 'enable'.  This makes\nthe joined APs perform signature analysis on the\nreceived 802.11 data and/or management frames and\nreport the discrepancies observed, if any, to the\nController.\n\nA value of 'false' makes the Controller send the\n'Signature Add LWAPP Message' to all the joined APs\nwith the status field set to 'disable'.  The joined\nAPs doesn't perform the signature analysis on the\nreceived 802.11 data and/or management frames for\nthis particular signature, till the signature is\nenabled. \"\"\",\n        }, # column\n        \"bsnCustomSignatureMacInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"BsnTxtSignatureMacInfo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object defines the pattern followed by the\nLWAPP APs to perform signature analysis with this\nCustom signature and report the results to the\nController. \"\"\",\n        }, # column\n        \"bsnCustomSignatureMacFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object specifies the frequency of matching\npackets from a particular source after which the\nspecified action is taken. \"\"\",\n        }, # column\n        \"bsnCustomSignatureRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Row Status for creation/deletion. Signature will allowed to be\ncreated, deleted and edited in later releases.\"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing the matching patterns specified for a \nStandard Signature. These are instrumental in\nmatching the signature with a packet. A maximum of 5 \npatterns may be specifed for a signature.\nThese are used for matching in the order of their index.\"\"\",\n        }, # table\n        \"bsnCustomSignaturePatternEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnCustomSignaturePrecedence\",\n                \"bsnCustomSignaturePatternIndex\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnCustomSignaturePatternIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of the pattern. This specifies the order in which \nthe pattern is checked against the packet contents.\"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Offset from the start of the packet where the AP looks \nfor a match to the pattern.\"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the pattern string that the AP uses to match at \nthe offset. Example: 0x616c7068615f3178\"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the pattern mask. This is the bit mask that the \nAP uses to mask out the bits in the packet at the given \noffset. Example: 0xffffffffffffffff\"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternOffSetStart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"BsnSignaturePatternOffSetStart\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates how an offset should be applied\nwhile doing signature analysis for QOS and non-QOS\ndata frames with this custom signature. \"\"\",\n        }, # column\n        \"bsnCustomSignaturePatternRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.4.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Row Status for creation/deletion. Signature Pattern will \nallowed to be created, deleted and edited in later releases.\"\"\",\n        }, # column\n        \"bsnSignatureCheckState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.42.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This flag should be enabled to enforce check of all standard \nand custom signatures.  If disabled, there will be no check \nfor signatures, both custom and standard, by the switch.\"\"\",\n        }, # scalar\n        \"bsnRfIdTagConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.43\",\n        }, # node\n        \"bsnRfIdTagStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.43.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow the switch to collect \ndata for tags.\"\"\",\n        }, # scalar\n        \"bsnRfIdTagDataTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.43.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the number of seconds after which the tag data is \ndeleted by the switch from its database if it didn't hear \nfrom the tag again.\"\"\",\n        }, # scalar\n        \"bsnRfIdTagAutoTimeoutStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.43.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow auto deletion of tag \ndata in the switch after expiration of Tag Data Timeout\"\"\",\n        }, # scalar\n        \"bsnAPNeighborAuthConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.44\",\n        }, # node\n        \"bsnAPNeighborAuthStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.44.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag should be turned on to allow the AP-Neighbor \nAuthentication feature.\"\"\",\n        }, # scalar\n        \"bsnAPNeighborAuthAlarmThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.44.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication alarm trigger threshold.\"\"\",\n        }, # scalar\n        \"bsnRFNetworkName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"RF Network Group Name to which this Airespace Switch belongs.\nAirespace Switches on a network form a RF Network Group as \nwell as a Mobility Group. RF Network Groups does the channel \nand power management of AP while Mobility Group does load \nbalancing and hand off for clients.\"\"\",\n        }, # scalar\n        \"bsnFastSSIDChangeFeature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures Fast SSID changing feature for mobile-stations. \nWhen enabled, permits mobile-stations to change SSIDs without \nhaving to block and wait for SSID-cleanup on the switch to \noccur.\"\"\",\n        }, # scalar\n        \"bsnBridgingPolicyConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.47\",\n        }, # node\n        \"bsnBridgingZeroTouchConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.47.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"If enabled, allows new bridging APs to negotiate with the \nswitch to acquire the shared secret key.\"\"\",\n        }, # scalar\n        \"bsnBridgingSharedSecretKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.47.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Key that is used to negotiate a secure LWAPP connection\nbetween a switch and a bridging or mesh AP.\"\"\",\n        }, # scalar\n        \"bsnAcceptSelfSignedCertificate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This flag specifies if controller will accept Self Signed\nCertificate from AP as part of authorization.\"\"\",\n        }, # scalar\n        \"bsnSystemClockTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This object represents the current clock time \nof the controller and expressed as the number of \nseconds elapsed since 00:00:00 on \nJanuary 1, 1970, Coordinated Universal Time (UTC). \"\"\",\n        }, # scalar\n        \"bsnGlobalDot11b\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2\",\n        }, # node\n        \"bsnGlobalDot11bConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1\",\n        }, # node\n        \"bsnGlobalDot11bNetworkStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11b Network Admin Status.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bBeaconPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"20\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of TU that a\nAP Radio shall use for scheduling Beacon tranmissions.\nThis value is transmitted in Beacon and Probe Response\nframes.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDynamicChannelAssignment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"runOnce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic channel assignment(DCA) has three modes. When the mode\nis auto, the channel assignment will be periodically updated for\nall Airespace APs that permit this operation. When the DCA is \nrunOnce, channel assignments are updated based on the UPDATE_CMD \nreceived from the management. When the DCA is static, no dynamic \nchannel assignments occurs and value are set to their global \ndefault.  Default is auto.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCurrentChannel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current operating frequency channel of the DSSS\nPHY. Valid channel numbers are as defined in 15.4.6.2.\nThis attribute will be read-only if \nbsnAPIfPhyChannelAutomaticOn is true.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDynamicChannelUpdateInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"600\",\n            \"description\" :\n                \"\"\"When Channel dynamic alogirthm is running, this interval (in \nsecs) specifies how often Channel assignement updates are \nattempted on an Airespace AP. NOTE: hysteresis is built into \nthe algorithms so we will not have uproductive changes\noccuring. Default value is 600 secs\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bInputsForDCA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"This attribute is a bit mask specifying what to include in\nDCA optimization.Below is a list of parameters and their \ncorresponding bits identifiers.\n       options                         bit\n       --------------------------------------\n       none                             0\n       SIGNAL STRENGTH                  1\n       NOISE                            2\n       FOREIGN INTERFERENCE             4\n       LOAD                             8\nDefault value is 15( all bits on).\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bChannelUpdateCmdInvoke\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate this starts a DCA calculation regardless\nof the dynamic update interval. This command should be invoke\non Group Leader Airespace Switch.Invoking on a Airespace \nSwitch which is not a Group leader has no effect.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bChannelUpdateCmdStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"After setting bsnGlobalDot11bChannelUpdateCmdInvoke to \nactivate, the result of action can be monitored from here. It\ntakes 5 minutes for the command to complete.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDynamicTransmitPowerControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"runOnce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic transmit power (DTP) has three modes. When the mode\nis auto, the transmit power of each Airespace AP will be \nperiodically updated for all Airespace APs that permit this \noperation. When the DTP is runOnce,transmit power update will\noccur based on the UPDATE_CMD received from the management. \nWhen the DTP is static, no dynamic transmit power updates \noccur and their global defaults are used.  Default is auto.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDynamicTxPowerControlInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"600\",\n            \"description\" :\n                \"\"\"When Tx PowerControl dynamic alogirthm is running, this \ninterval(in secs) specifies how often TxPower control updates\nare attempted on an Airespace AP. NOTE: hysteresis is\nbuild into the algorithms so we will not have uproductive \nchanges occuring. Default value is 600 secs\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCurrentTxPowerLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The TxPowerLevel N currently being used to transmit data.\nSome PHYs also use this value to determine the receiver\nsensitivity requirements for CCA.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bInputsForDTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"This attribute is a bit mask specifying what to include in\nDCA optimization.Below is a list of parameters and their \ncorresponding bits identifiers.\n       options                         bit\n       --------------------------------------\n       none                             0\n       LOAD                             1\n       SIGNAL STRENGTH                  2\n       FOREIGN INTERFERENCE             4\n       NOISE                            8\nDefault value is 15( all bits on).\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bPowerUpdateCmdInvoke\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate this starts a DTP calculation regardless\nof the dynamic update interval. This command should be \ninvoke on Group Leader Airespace Switch.Invoking on a \nAirespace Switch which is not a Group leader has no effect.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bPowerUpdateCmdStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"After setting bsnGlobalDot11aChannelUpdateCmdInvoke to \nactivate, the result of action can be monitored from here. It\ntakes 5 minutes for the command to complete.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate1Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate2Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate5AndHalfMhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate11Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bShortPreamble\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11b Short Preamble.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDot11gSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute is enabled to also support 802.11g protocol on the\n802.11b network. Enabling 802.11g allows additional data \nrates: 6, 9, 12, 18, 24, 36, 48, 54 Mbps.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate6Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate9Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate12Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate18Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate24Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate36Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate48Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDataRate54Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify if this rate is supported or mandatory or disabled. This \nis configurable only if 802.11g support is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bPicoCellMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the 802.11b pico-cell mode. This cannot be enabled \nwhen the Fast Roaming Mode is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bFastRoamingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the 802.11b fast-roaming mode. This cannot be enabled \nwhen the Pico Cell Mode is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bFastRoamingVoipMinRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rate1Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rate2Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rate5andHalfMbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rate11Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the minimum transmission rate allowed for VoIP on any \n802.11b radio.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bFastRoamingVoipPercentage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"zero\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"twentyfive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fifty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"seventyfive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hundred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the percentage of effective bandwidth for the minimum \nrate reserved for VoIP.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11b80211eMaxBandwidth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This represents the maximum bandwidth allocated to 802.11e \nclients.  It is expressed as percentage of the total bandwidth of\n802.11b network.  The value of this attribute can vary from 0 to \n100.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDTPCSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute may be used to enable the DTPC support on all \n802.11b/g radios. DTPC or Dynamic Transmit Power Control support \nmeans that the radio's transmit power will be advertised in the \nbeacons and probe responses.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bPhy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2\",\n        }, # node\n        \"bsnGlobalDot11bMediumOccupancyLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum amount of time,\nin TU, that a point coordinator may control the usage of\nthe wireless medium without relinquishing control for long\nenough to allow at least one instance of DCF access to the\nmedium.  The default value of this attribute shall be 100,\nand the maximum value shall be 1000.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCFPPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the number of DTIM intervals\nbetween the start of CFPs.  It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCFPMaxDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the maximum duration of the CFP\nin TU that may be generated by the PCF. It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCFPollable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When this attribute is true, it shall indicate that the STA\nis able to respond to a CF-Poll with a data frame within a\nSIFS time. This attribute shall be false if the STA is not\nable to respond to a CF-Poll with a data frame within a SIFS\ntime.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bCFPollRequest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies wheather CFP\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bDTIMPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of beacon\nintervals that shall elapse between transmission of\nBeacons frames containing a TIM element whose DTIM\nCount field is 0. This value is transmitted in\nthe DTIM Period field of Beacon frames.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bMaximumTransmitPowerLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum transmit power,\nin dBm, allowed in the subband for the associated domain \ncountry string.  The default value of this attribute shall\nbe zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bFirstChannelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the lowest \nchannel number in the subband for the associated domain \ncountry string. The default value of this attribute shall\nbe zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bNumberofChannels\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the total \nnumber of channels allowed in the subband for the \nassociated domain country string. The default value of \nthis attribute shall be zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bRTSThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2347\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the number of octets in an MPDU,\nbelow which an RTS/CTS handshake shall not be performed. An\nRTS/CTS handshake shall be performed at the beginning of any\nframe exchange sequence where the MPDU is of type Data or\nManagement, the MPDU has an individual address in the Address1\nfield, and the length of the MPDU is greater than\nthis threshold. (For additional details, refer to Table 21 in\n9.7.) Setting this attribute to be larger than the maximum\nMSDU size shall have the effect of turning off the RTS/CTS\nhandshake for frames of Data or Management type transmitted by\nthis STA. Setting this attribute to zero shall have the effect\nof turning on the RTS/CTS handshake for all frames of Data or\nManagement type transmitted by this STA. The default value of\nthis attribute shall be 2347.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bShortRetryLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum number of\ntransmission attempts of a frame, the length of which is less\nthan or equal to bsnGlobalDot11RTSThreshold, that shall be made\nbefore a failure condition is indicated. The default value of \nthis attribute shall be 7.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bLongRetryLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum number of\ntransmission attempts of a frame, the length of which is\ngreater than bsnGlobalDot11RTSThreshold, that shall be made \nbefore a failure condition is indicated. The default value of \nthis attribute shall be 4.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bFragmentationThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"256\",\n                        \"max\" : \"2346\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the current maximum size, in\noctets, of the MPDU that may be delivered to the PHY. An MSDU\nshall be broken into fragments if its size exceeds the value\nof this attribute after adding MAC headers and trailers. An \nMSDU or MMPDU shall be fragmented when the resulting frame has \nindividual address in the Address1 field, and the length of the\nframe is larger than this threshold. The default value for this\nattribute shall be the lesser of 2346 or the aMPDUMaxLength of\nthe attached PHY and shall never exceed the lesser of 2346 or\nthe  aMPDUMaxLength of the attached PHY. The value of this\nattribute shall never be less than 256. \"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bMaxTransmitMSDULifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MaxTransmitMSDULifetime shall be the elapsed time in TU,\nafter the initial transmission of an MSDU, after which further\nattempts to transmit the MSDU shall be terminated. The default\nvalue of this attribute shall be 512.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bMaxReceiveLifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MaxReceiveLifetime shall be the elapsed time in TU,\nafter the initial reception of a fragmented MMPDU or MSDU,\nafter which further attempts to reassemble the MMPDU or\nMSDU shall be terminated. The default value shall be\n512.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bEDThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current Energy Detect Threshold being used by the \nDSSS PHY.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bChannelAgilityEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute indicates that the PHY channel agility\nfunctionality is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bPBCCOptionImplemented\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when true, shall indicate that the PBCC\nmodulation option as defined in subclause 18.4.6.6 is\nimplemented.  The default value of this attribute shall\nbe false.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11bShortPreambleOptionImplemented\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.2.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute, when true, shall indicate that the\nshort preamble option as defined in subclause 18.2.2.2\nis implemented.  The default value of this attribute\nshall be false.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11a\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3\",\n        }, # node\n        \"bsnGlobalDot11aConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1\",\n        }, # node\n        \"bsnGlobalDot11aNetworkStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dot11a Network Status\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aLowBandNetwork\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dot11a Low Band Network Status\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aMediumBandNetwork\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dot11a Mid Band Network Status\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aHighBandNetwork\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dot11a High Band Network Status\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aBeaconPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"20\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of TU that a\nAP Radio shall use for scheduling Beacon tranmissions.\nThis value is transmitted in Beacon and Probe Response \nframes.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDynamicChannelAssignment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"runOnce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic channel assignment(DCA) has three modes. When the mode\nis auto, the channel assignment will be periodically updated \nfor all Airespace APs that permit this operation. When the DCA\nis runOnce, channel assignments are updated based on the \nUPDATE_CMD received from the management. When the DCA is \nstatic, no dynamic channel assignments occurs and value are \nset to their global default.  Default is auto.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCurrentChannel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of the current operating frequency channel of the\nOFDM PHY.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDynamicChannelUpdateInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"600\",\n            \"description\" :\n                \"\"\"When Channel dynamic alogirthm is running, this interval(in \nsecs) specifies how often Channel assignement updates are \nattempted on an Airespace AP. NOTE: hysteresis is\nbuild into the algorithms so we will not have uproductive \nchanges occuring. Default value is 600 secs\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aInputsForDCA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"This attribute is a bit mask specifying what to include in\nDCA optimization.Below is a list of parameters and their \ncorresponding bits identifiers.\n       options                         bit\n       --------------------------------------\n       none                             0\n       SIGNAL STRENGTH                  1\n       NOISE                            2\n       FOREIGN INTERFERENCE             4\n       LOAD                             8\nDefault value is 15( all bits on).\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aChannelUpdateCmdInvoke\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate this starts a DCA calculation regardless\nof the dynamic update interval. This command should be invoke\non Group Leader Airespace Switch.Invoking on a Airespace \nSwitch which is not a Group leader has no effect.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aChannelUpdateCmdStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"After setting bsnGlobalDot11aChannelUpdateCmdInvoke to \nactivate, the result of action can be monitored from here. It \ntakes 5 minutes for the command to complete.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDynamicTransmitPowerControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"runOnce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic transmit power (DTP) has three modes. When the mode\nis auto, the transmit power of each Airespace AP will be \nperiodically updated for all Airespace APs that permit this \noperation. When the DTP is runOnce,transmit power update will\noccur based on the UPDATE_CMD received from the management. \nWhen the DTP is static, no dynamic transmit power updates \noccur and their global defaults are used.  Default is auto.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCurrentTxPowerLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The TxPowerLevel N currently being used to transmit data.\nSome PHYs also use this value to determine the receiver\nsensitivity requirements for CCA.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDynamicTxPowerControlInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"600\",\n            \"description\" :\n                \"\"\"When Tx PowerControl dynamic alogirthm is running, this \ninterval(in secs) specifies how often TxPower control updates\nare attempted on an Airespace AP. NOTE: hysteresis is\nbuild into the algorithms so we will not have uproductive \nchanges occuring. Default value is 600 secs\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aInputsForDTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"This attribute is a bit mask specifying what to include in\nDCA optimization.Below is a list of parameters and their \ncorresponding bits identifiers.\n       options                         bit\n       --------------------------------------\n       none                             0\n       LOAD                             1\n       SIGNAL STRENGTH                  2\n       FOREIGN INTERFERENCE             4\n       NOISE                            8\nDefault value is 15( all bits on).\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aPowerUpdateCmdInvoke\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate this starts a DTP calculation regardless\nof the dynamic update interval. This command should be invoke\non Group Leader Airespace Switch.Invoking on a Airespace \nSwitch which is not a Group leader has no effect.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aPowerUpdateCmdStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"After setting bsnGlobalDot11aChannelUpdateCmdInvoke to \nactivate, the result of action can be monitored from here. It\ntakes 5 minutes for the command to complete.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate6Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate9Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate12Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate18Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate24Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate36Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate48Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDataRate54Mhz\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mandatory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Specify if this rate is supported or mandatory or disabled\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aPicoCellMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the 802.11a pico-cell mode. This cannot be enabled \nwhen the Fast Roaming Mode is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aFastRoamingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the 802.11a fast-roaming mode. This cannot be enabled \nwhen the Pico Cell Mode is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aFastRoamingVoipMinRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rate1Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rate2Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rate5andHalfMbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rate11Mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the minimum transmission rate allowed for VoIP on any \n802.11a radio.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aFastRoamingVoipPercentage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"zero\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"twentyfive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fifty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"seventyfive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hundred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the percentage of effective bandwidth for the minimum \nrate reserved for VoIP.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11a80211eMaxBandwidth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This represents the maximum bandwidth allocated to 802.11e \nclients.  It is expressed as percentage of the total bandwidth\nof 802.11a network.  The value of this attribute can vary from\n0 to 100.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDTPCSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute may be used to enable the DTPC support on all \n802.11a radios. DTPC or Dynamic Transmit Power Control support \nmeans that the radio's transmit power will be advertised in the \nbeacons and probe responses.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aPhy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2\",\n        }, # node\n        \"bsnGlobalDot11aMediumOccupancyLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum amount of time,\nin TU, that a point coordinator may control the usage of\nthe wireless medium without relinquishing control for long\nenough to allow at least one instance of DCF access to the\nmedium.  The default value of this attribute shall be 100,\nand the maximum value shall be 1000.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCFPPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the number of DTIM intervals\nbetween the start of CFPs.  It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCFPMaxDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute shall describe the maximum duration of the CFP\nin TU that may be generated by the PCF. It is modified by\nMLME-START.request primitive.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCFPollable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When this attribute is true, it shall indicate that the STA\nis able to respond to a CF-Poll with a data frame within a\nSIFS time. This attribute shall be false if the STA is not\nable to respond to a CF-Poll with a data frame within a SIFS\ntime.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aCFPollRequest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies whether CFP\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aDTIMPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the number of beacon\nintervals that shall elapse between transmission of\nBeacons frames containing a TIM element whose DTIM\nCount field is 0. This value is transmitted in\nthe DTIM Period field of Beacon frames.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aMaximumTransmitPowerLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum transmit power,\nin dBm, allowed in the subband for the associated domain \ncountry string. The default value of this attribute shall\nbe zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aFirstChannelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the lowest \nchannel number in the subband for the associated domain \ncountry string. \nThe default value of this attribute shall be zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aNumberofChannels\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the value of the total \nnumber of channels allowed in the subband for the \nassociated domain country string. The default value of \nthis attribute shall be zero.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aRTSThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2347\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the number of octets in an MPDU,\nbelow which an RTS/CTS handshake shall not be performed. An\nRTS/CTS handshake shall be performed at the beginning of any\nframe exchange sequence where the MPDU is of type Data or\nManagement, the MPDU has an individual address in the Address1\nfield, and the length of the MPDU is greater than\nthis threshold. (For additional details, refer to Table 21 in\n9.7.) Setting this attribute to be larger than the maximum\nMSDU size shall have the effect of turning off the RTS/CTS\nhandshake for frames of Data or Management type transmitted by\nthis STA. Setting this attribute to zero shall have the effect\nof turning on the RTS/CTS handshake for all frames of Data or\nManagement type transmitted by this STA. The default value of\nthis attribute shall be 2347.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aShortRetryLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum number of\ntransmission attempts of a frame, the length of which is less\nthan or equal to bsnGlobalDot11RTSThreshold, that shall be \nmade before a failure condition is indicated. The default \nvalue of this attribute shall be 7.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aLongRetryLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shall indicate the maximum number of\ntransmission attempts of a frame, the length of which is\ngreater than bsnGlobalDot11RTSThreshold, that shall be made \nbefore a failure condition is indicated. The default value of \nthis attribute shall be 4.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aFragmentationThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"256\",\n                        \"max\" : \"2346\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute shall specify the current maximum size, in\noctets, of the MPDU that may be delivered to the PHY. An MSDU\nshall be broken into fragments if its size exceeds the value\nof this attribute after adding MAC headers and trailers. MSDU\nor MMPDU shall be fragmented when the resulting frame has an\nindividual address in the Address1 field, and the length of the\nframe is larger than this threshold. The default value for this\nattribute shall be the lesser of 2346 or the aMPDUMaxLength of\nthe attached PHY and shall never exceed the lesser of 2346 or\nthe  aMPDUMaxLength of the attached PHY. The value of this\nattribute shall never be less than 256. \"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aMaxTransmitMSDULifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MaxTransmitMSDULifetime shall be the elapsed time in TU,\nafter the initial transmission of an MSDU, after which further\nattempts to transmit the MSDU shall be terminated. The default\nvalue of this attribute shall be 512.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aMaxReceiveLifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MaxReceiveLifetime shall be the elapsed time in TU,\nafter the initial reception of a fragmented MMPDU or MSDU,\nafter which further attempts to reassemble the MMPDU or\nMSDU shall be terminated. The default value shall be\n512.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aTIThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Threshold being used to detect a busy medium (frequency).\nCCA shall report a busy medium upon detecting the RSSI above \nthis threshold.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11aChannelAgilityEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.3.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute indicates that the PHY channel agility\nfunctionality is enabled.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11h\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.4\",\n        }, # node\n        \"bsnGlobalDot11hConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.4.1\",\n        }, # node\n        \"bsnGlobalDot11hPowerConstraint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"decibels\",\n            \"description\" :\n                \"\"\"Local maximum transmit power for a channel is defined as\nmaximum transmit power level specified for the channel \nin the Country element minus the local power constraint\nspecified for the channel in the Power Constraint \nelement.The power constraint is coded as an unsigned \ninteger in units of decibels. To disable \npower constraint set Power Constraint to 0.\"\"\",\n        }, # scalar\n        \"bsnGlobalDot11hChannelSwitchEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To enable or disable  channel switch. When disabling \nChannel Switch no need to pass mode and count \"\"\",\n        }, # scalar\n        \"bsnGlobalDot11hChannelSwitchMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The Channel Switch Mode indicates any restriction on \ntransmission until a channel switch. An Channel mode \nset to 1 means that the STA in a BSS to which the \nframe containing the element is addressed shall \ntranmit no further frames with in the BSS until the \nscheduled channel switch. A Channel switch mode set \nto 0 does not impose any requirement on the receiving\nSTA.\"\"\",\n        }, # scalar\n        \"bsnRrm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4\",\n        }, # node\n        \"bsnRrmDot11a\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1\",\n        }, # node\n        \"bsnRrmDot11aGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1\",\n        }, # node\n        \"bsnRrmDot11aGlobalAutomaticGrouping\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic grouping has two modes: on and off. When the grouping\nis off, no dynamic grouping occurs. Each Airespace Switch \noptimizes only its own Airespace APs' parameters. When \ngrouping is on, the Airespace Switches form groups and\nelect leaders to perform better dynamic parameter \noptimization.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aGroupLeaderMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the MAC address of the group leader for the dot11a \ngroup containing this Airespace Switch.\"\"\",\n        }, # scalar\n        \"bsnRrmIsDot11aGroupLeader\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Airespace Switch is a Dot11a Group Leader then this \nattribute will be true else it will be false.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aGroupLastUpdateTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last time the dot11a grouping was updated on this Airespace \nSwitch. This is valid only if the Airespace Switch is a \ngroup leader.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aGlobalGroupInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"3600\",\n            \"description\" :\n                \"\"\"When grouping is on, this interval(in secs) represents the \nperiod with which the grouping algorithm is run. Grouping \nalgorithm will also run when the group contents changes and \nthe automatic grouping is enabled. A dynamic grouping can be \nstarted upon request from the system administrator. Default \nvalue is 3600 secs.\"\"\",\n        }, # scalar\n        \"bsnWrasDot11aGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of Airespace Switch addresses that identifies \nthe members of the Dot11a RF group containing this Airespace \nSwitch. Max size is 20 entries.\"\"\",\n        }, # table\n        \"bsnWrasDot11aGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnWrasDot11aPeerMacAddress\",\n            ],\n            \"description\" :\n                \"\"\" ... \"\"\",\n        }, # row\n        \"bsnWrasDot11aPeerMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of the member Switch.\"\"\",\n        }, # column\n        \"bsnWrasDot11aPeerIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.1.9.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the Airespace Switch.\"\"\",\n        }, # column\n        \"bsnRrmDot11aAPDefault\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6\",\n        }, # node\n        \"bsnRrmDot11aForeignInterferenceThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"foreign 802.11A interference threshold between 0 and 100 percent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aForeignNoiseThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-127\",\n                        \"max\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A foreign noise threshold between -127 and 0 dBm.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aRFUtilizationThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A RF utlization threshold between 0 and 100 percent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aThroughputThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1000\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A throughput threshold between 1000 and 100000\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aMobilesThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A mobiles threshold between 1 and 75\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aCoverageThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A coverage threshold between 3 and 50.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aMobileMinExceptionLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A mobile minimum exception level between 1 and 75\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aCoverageExceptionLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A coverage exception level between 0 and 100 percent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aSignalMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval (in secs) specifies how often do we get new \nsignal strength measurements at each Airespace AP. Default is \n300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aNoiseMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new \nnoise and interference measurements at each Airespace AP. \nDefault is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aLoadMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new\nload measurements at each Airespace AP. Default is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aCoverageMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new\ncoverage measurements at each Airespace AP. Default is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aChannelMonitorList\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.6.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"country\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dca\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies the channels on which the switch monitors\nnoise, interference and rogues.  The first option allows \nmonitoring on all channels while the second one on only those \nthat are supported by the country of operation. the option dca \nimplies that the monitor channel list will include those channels\nthat are used by automatic channel assignment.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11aSetFactoryDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate all rrm parameters are reset to factory \ndefaults\"\"\",\n        }, # scalar\n        \"bsnRrmDot11b\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2\",\n        }, # node\n        \"bsnRrmDot11bGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1\",\n        }, # node\n        \"bsnRrmDot11bGlobalAutomaticGrouping\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"automatic\",\n            \"description\" :\n                \"\"\"Dynamic grouping has two modes: on and off. When the grouping\nis off, no dynamic grouping occurs. Each Airespace Switch \noptimizes only its own Airespace APs' parameters. When \ngrouping is on, the Airespace Switchs form groups and\nelect leaders to perform better dynamic parameter \noptimization.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bGroupLeaderMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the MAC address of the group leader for the dot11b \ngroup containing this Airespace Switch.\"\"\",\n        }, # scalar\n        \"bsnRrmIsDot11bGroupLeader\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Airespace Switch is a Dot11b Group Leader then this \nattribute will be true else it will be false.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bGroupLastUpdateTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last time the dot11b grouping was updated on this Airespace \nSwitch. This is valid only if the Airespace Switch is a group\nleader.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bGlobalGroupInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"3600\",\n            \"description\" :\n                \"\"\"When grouping is on, this interval(in secs) represents the \nperiod with which the grouping algorithm is run. Grouping \nalgorithm will also run when the group contents changes and \nthe automatic grouping is enabled. A dynamic grouping can be \nstarted upon request from the system administrator. Default \nvalue is 3600 secs.\"\"\",\n        }, # scalar\n        \"bsnWrasDot11bGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a table of Airespace Switch addresses that identifies \nthe members of the Dot11b RF group containing this Airespace \nSwitch. Max size is 20 entries.\"\"\",\n        }, # table\n        \"bsnWrasDot11bGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnWrasDot11bPeerMacAddress\",\n            ],\n            \"description\" :\n                \"\"\" ... \"\"\",\n        }, # row\n        \"bsnWrasDot11bPeerMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of the GIGE interface.\"\"\",\n        }, # column\n        \"bsnWrasDot11bPeerIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.1.9.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the Airespace Switch.\"\"\",\n        }, # column\n        \"bsnRrmDot11bAPDefault\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6\",\n        }, # node\n        \"bsnRrmDot11bForeignInterferenceThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Foreign 802.11A interference threshold between 0 and 100 \npercent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bForeignNoiseThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-127\",\n                        \"max\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A foreign noise threshold between -127 and 0 dBm.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bRFUtilizationThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A RF utlization threshold between 0 and 100 percent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bThroughputThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1000\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A Airespace AP data-rate threshold between 1000 and 100000\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bMobilesThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A Airespace AP mobiles threshold between 1 and 75\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bCoverageThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" 802.11A Airespace AP coverage threshold between 3 and 50.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bMobileMinExceptionLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"75\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A Airespace AP mobile minimum exception level between 1 and \n75\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bCoverageExceptionLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"802.11A Airespace AP coverage exception level between 0 and 100 \npercent.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bSignalMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new signal\nstrength measurements at each Airespace AP. Default is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bNoiseMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new \nnoise and interference measurements at each Airespace AP. \nDefault is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bLoadMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new\nload measurements at each Airespace AP. Default is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bCoverageMeasurementInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"This interval( in secs) specifies how often do we get new\ncoverage measurements at each Airespace AP. Default is 300 secs\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bChannelMonitorList\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.6.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"country\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dca\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute specifies the channels on which the switch \nmonitors noise, interference and rogues.\nThe first option allows monitoring on all channels while the \nsecond one on only those that are supported\nby the country of operation. the option dca implies that the \nmonitor channel list will include those channels\nthat are used by automatic channel assignment.\"\"\",\n        }, # scalar\n        \"bsnRrmDot11bSetFactoryDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.4.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to activate all rrm parameters are reset to factory \ndefaults\"\"\",\n        }, # scalar\n        \"bsnAAA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5\",\n        }, # node\n        \"bsnRadiusAuthServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the RADIUS authentication\nservers with which the client shares a secret.\"\"\",\n        }, # table\n        \"bsnRadiusAuthServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRadiusAuthServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) representing a RADIUS\nauthentication server with which the client shares\na secret.\"\"\",\n        }, # row\n        \"bsnRadiusAuthServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A number uniquely identifying each RADIUS\nAuthentication server with which this client\ncommunicates.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the RADIUS authentication server\nreferred to in this table entry.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientServerPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UDP port the client is using to send requests to\nthis server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"The authentication and encryption key shared between\nthe Radius client and this Radius Server.\nWhen the bsnRadiusAuthServerKeyFormat is hex it\ncan have max length of 128 bytes. If the \nbsnRadiusAuthServerKeyFormat is Ascii it can have\nmax length of 64 bytes.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Server enable or disable status.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerKeyFormat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"hex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ascii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Format of the server key. When hex, the number of \ncharacters in the key should be even.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerRFC3576\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Support for Dynamic Authorization Extensions to RADIUS.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"IPSec over RADIUS\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSecAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"hmacMd5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hmacSha1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"hmacSha1\",\n            \"description\" :\n                \"\"\"The Hash algorithm employed by the IPSec Encrpytion.\nThis applies only when bsnRadiusAuthServerIPSec is in\nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSecEncryption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"des\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"tripleDes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aesCbc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"tripleDes\",\n            \"description\" :\n                \"\"\"The Encryption algorithm employed by this IpSec \nEncryption.  This applies only when \nbsnRadiusAuthServerIPSec is in enable state.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSecIKEPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"main\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"agressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"main\",\n            \"description\" :\n                \"\"\"VPN IKE Phase 1 Mode type as per the IpSec standards.\nThis applies only when bsnRadiusAuthServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSecIKELifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1800\",\n                        \"max\" : \"345600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"28800\",\n            \"description\" :\n                \"\"\"IPSec IKE's Lifetime.\nThis applies only when bsnRadiusAuthServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerIPSecDHGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"group1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"group2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"group5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"group2\",\n            \"description\" :\n                \"\"\"IKE's Diffie-Hellman Group.\nThis applies only when bsnRadiusAuthServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerNetworkUserConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When enabled, this entry is considered as network user \nradius authenticating server entry.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerMgmtUserConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When enabled, this entry is considered as management user\nradius authenticating server entry.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerRetransmitTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after which a radius authentication \nrequest will timeout and a retransmission will be taken \nup by the switch.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerKeyWrapKEKkey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Key-encryption-key (KEK) used as the key for the 128 bit\nAES Key Wrap algorithm to encrypt the PMK in the key \nattribute. If the key is present in request, it should be \ntaken as a hint by the server that the sender prefers this \nmethod of encryption over others. \nTo maintain security actual keys after configuration are never\nreturned in get request. If keys are configured then '***' \nis returned. If keys are not configured then empty string is \nretunred. \nbsnRadiusAuthServerKeyFormat is used this key. \nif the format chosen is ascii then it should be 16 bytes in \nlength.  if the format chosen is hex then it should be 32 \nbytes in length.\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerKeyWrapMACKkey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Message-authenticator-code-key ( MACK) - used as the key for \nthe HMAC-SHA-1 algorithm to sign the RADIUS message to prevent \nspoofing. MACK must be configured when KEK is configured. \nTo maintain security actual keys after configuration are never\nreturned in get request. If keys are configured then '***' \nis returned. If keys are not configured then empty string is \nreturned. \nbsnRadiusAuthServerKeyFormat is used this key. \nif the format chosen is ascii then it should be 20 bytes in \nlength. If the format chosen is hex then it should be 40 bytes \nin length. \"\"\",\n        }, # column\n        \"bsnRadiusAuthServerKeyWrapFormat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"hex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ascii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Format for the Key Wrap keys. This object is mandatory  \nfor manager to send if the key Wrap keys are being \nconfigured. Get on this object will always return hex(1)\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Row Status for creation/deletion\"\"\",\n        }, # column\n        \"bsnRadiusAccServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the RADIUS accounting\nservers with which the client shares a secret.\"\"\",\n        }, # table\n        \"bsnRadiusAccServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRadiusAccServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) representing a RADIUS\naccounting server with which the client shares a secret.\"\"\",\n        }, # row\n        \"bsnRadiusAccServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A number uniquely identifying each RADIUS\nAccounting server with which this client\ncommunicates.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the RADIUS accounting server\nreferred to in this table entry.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientServerPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UDP port the client is using to send requests to\nthis server.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"The authentication and encryption key shared between\nthe Radius client and this Radius Server.\nWhen the bsnRadiusAccServerKeyFormat is hex it\ncan have max length of 128 bytes. If the \nbsnRadiusAccServerKeyFormat  is Ascii it can have\nmax length of 64 bytes.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Server enable or disable status.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerKeyFormat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"hex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ascii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Format of the server key. When hex, the number of \ncharacters in the key should be even.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"IPSec over RADIUS\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSecAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"hmacMd5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hmacSha1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"hmacSha1\",\n            \"description\" :\n                \"\"\"The Hash algorithm employed by the IPSec Encrpytion.\nThis applies only when bsnRadiusAccServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSecEncryption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"des\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"tripleDes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aesCbc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"tripleDes\",\n            \"description\" :\n                \"\"\"The Encryption algorithm employed by this IpSec \nEncryption. This applies only when \nbsnRadiusAccServerIPSec is in enable state.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSecIKEPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"main\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"agressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"main\",\n            \"description\" :\n                \"\"\"VPN IKE Phase 1 Mode type as per the IpSec standards.\nThis applies only when bsnRadiusAccServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSecIKELifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1800\",\n                        \"max\" : \"345600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"28800\",\n            \"description\" :\n                \"\"\"IPSec IKE's Lifetime.\nThis applies only when bsnRadiusAccServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerIPSecDHGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"group1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"group2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"group5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"group2\",\n            \"description\" :\n                \"\"\"IKE's Diffie-Hellman Group.\nThis applies only when bsnRadiusAccServerIPSec is in \nenable state.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerNetworkUserConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When enabled, this entry is considered as network user \nradius accounting server entry.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerRetransmitTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after which a radius accounting request \nwill timeout and a retransmission will be taken up by \nthe switch.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Row Status for creation/deletion\"\"\",\n        }, # column\n        \"bsnRadiusAuthServerStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The listing the Statistics of RADIUS authentication\nservers.\"\"\",\n        }, # table\n        \"bsnRadiusAuthServerStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRadiusAuthServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry representing statistics a RADIUS\nauthentication server with which the client shares\na secret.\"\"\",\n        }, # row\n        \"bsnRadiusAuthClientRoundTripTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time interval (in hundredths of a second) between\nthe most recent Access-Reply/Access-Challenge and the\nAccess-Request that matched it from this RADIUS\nauthentication server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientAccessRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Request packets sent\nto this server. This does not include retransmissions.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientAccessRetransmissions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Request packets\nretransmitted to this RADIUS authentication server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientAccessAccepts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Accept packets\n(valid or invalid) received from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientAccessRejects\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Reject packets\n(valid or invalid) received from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientAccessChallenges\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Challenge packets\n(valid or invalid) received from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientMalformedAccessResponses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of malformed RADIUS Access-Response\npackets received from this server.\nMalformed packets include packets with\nan invalid length. Bad authenticators or\nSignature attributes or unknown types are not\nincluded as malformed access responses.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientBadAuthenticators\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Response packets\ncontaining invalid authenticators or Signature\nattributes received from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientPendingRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Access-Request packets\ndestined for this server that have not yet timed out\nor received a response. This variable is incremented\nwhen an Access-Request is sent and decremented due to\nreceipt of an Acess-Accept, Access-Reject or\nAccess-Challenge, a timeout or retransmission.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientTimeouts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of authentication timeouts to this server.\nAfter a timeout the client may retry to the same\nserver, send to a different server, or\ngive up. A retry to the same server is counted as a\nretransmit as well as a timeout. A send to a different\nserver is counted as a Request as well as a timeout.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientUnknownTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS packets of unknown type which\nwere received from this server on the authentication port.\"\"\",\n        }, # column\n        \"bsnRadiusAuthClientPacketsDropped\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS packets of which were\nreceived from this server on the authentication port\nand dropped for some other reason.\"\"\",\n        }, # column\n        \"bsnRadiusAccServerStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the RADIUS accounting\nservers with which the client shares a secret.\"\"\",\n        }, # table\n        \"bsnRadiusAccServerStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnRadiusAccServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) representing a RADIUS\naccounting server with which the client shares a secret.\"\"\",\n        }, # row\n        \"bsnRadiusAccClientRoundTripTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time interval between the most recent\nAccounting-Response and the Accounting-Request that\nmatched it from this RADIUS accounting server.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Accounting-Request packets\nsent. This does not include retransmissions.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientRetransmissions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Accounting-Request packets\nretransmitted to this RADIUS accounting server.\nRetransmissions include retries where the\nIdentifier and Acct-Delay have been updated, as\nwell as those in which they remain the same.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientResponses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS packets received on the\naccounting port from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientMalformedResponses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of malformed RADIUS Accounting-Response\npackets received from this server. Malformed packets\ninclude packets with an invalid length. Bad\nauthenticators and unknown types are not included as\nmalformed accounting responses.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientBadAuthenticators\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Accounting-Response\npackets which contained invalid authenticators\nreceived from this server.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientPendingRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS Accounting-Request packets\nsent to this server that have not yet timed out or\nreceived a response. This variable is incremented when an\nAccounting-Request is sent and decremented due to\nreceipt of an Accounting-Response, a timeout or\na retransmission.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientTimeouts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of accounting timeouts to this server.\nAfter a timeout the client may retry to the same\nserver, send to a different server, or give up.\nA retry to the same server is counted as a\nretransmit as well as a timeout. A send to a different\nserver is counted as an Accounting-Request as well as\na timeout.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientUnknownTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS packets of unknown type which\nwere received from this server on the accounting port.\"\"\",\n        }, # column\n        \"bsnRadiusAccClientPacketsDropped\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.4.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of RADIUS packets which were received from\nthis server on the accounting port and dropped for some\nother reason.\"\"\",\n        }, # column\n        \"bsnUsersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing Wlan Users\"\"\",\n        }, # table\n        \"bsnUsersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1\",\n            \"create\" : \"true\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"bsnUserName\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Name\"\"\",\n        }, # column\n        \"bsnUserPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Password\"\"\",\n        }, # column\n        \"bsnUserEssIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User WLAN ID. Value 0 implies that this applies to any \nWLAN ID.\"\"\",\n        }, # column\n        \"bsnUserAccessMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"readOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"readWrite\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Access Mode.\"\"\",\n        }, # column\n        \"bsnUserType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"management\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"macFilter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Type.\"\"\",\n        }, # column\n        \"bsnUserInterfaceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.7\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface Name.\"\"\",\n        }, # column\n        \"bsnUserRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.5.1.26\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnBlackListClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing Wlan Black Listed Clients\"\"\",\n        }, # table\n        \"bsnBlackListClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.6.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnBlackListClientMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnBlackListClientMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Black Listed Client MAC Address\"\"\",\n        }, # column\n        \"bsnBlackListClientDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Black Listed Client Description \"\"\",\n        }, # column\n        \"bsnBlackListClientRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnAclTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing ACLs (Access Control Lists) on the \nSwitch.\"\"\",\n        }, # table\n        \"bsnAclEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAclName\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnAclName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of the Access Control List.\"\"\",\n        }, # column\n        \"bsnAclApplyMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notapplied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"applied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The apply mode of the ACL on the switch. Mode value \n'applied' means the ACL has been applied on the switch.\"\"\",\n        }, # column\n        \"bsnAclRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.7.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status of the ACL.\"\"\",\n        }, # column\n        \"bsnAclRuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing Acl Rules(Access Control List Entries) \non the ACL with name bsnAclName.\"\"\",\n        }, # table\n        \"bsnAclRuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAclName\",\n                \"bsnAclRuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnAclRuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Index of the ACL rule. This can be updated to reset the \nsequence of the rules of an ACL.\"\"\",\n        }, # column\n        \"bsnAclRuleAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"permit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"deny\",\n            \"description\" :\n                \"\"\"The permission mode of a rule.\"\"\",\n        }, # column\n        \"bsnAclRuleDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inbound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"outbound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"any\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"any\",\n            \"description\" :\n                \"\"\"The direction of the packet to which the rule may be \napplied.\"\"\",\n        }, # column\n        \"bsnAclRuleSourceIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Source IP Address of the ACL rule. A value 0 implies \nany source address.\"\"\",\n        }, # column\n        \"bsnAclRuleSourceIpNetmask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Source IP Netmask of the ACL rule.  A value 0 \nimplies any source mask.\"\"\",\n        }, # column\n        \"bsnAclRuleDestinationIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Destination IP Address of the ACL rule. A value 0 \nimplies any destination address.\"\"\",\n        }, # column\n        \"bsnAclRuleDestinationIpNetmask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Destination Netmask of the ACL rule. A value 0 \nimplies any destination mask.\"\"\",\n        }, # column\n        \"bsnAclRuleProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"256\",\n            \"description\" :\n                \"\"\"Protocol of the packet. It can be either of the pre \nspecified protocols like TCP, UDP, ICMP, ESP, AH, GRE,\nIP, Ethernet Over IP, OSPF or any number between 0 \nand 255. A value 256 implies that this rule applies \nto 'Any' protocol.\"\"\",\n        }, # column\n        \"bsnAclRuleStartSourcePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Source Port of the packet. It can be either of the \npre specified ports like HTTP, HTTPS, Telnet, RADIUS \netc or any number between 0 and 65535. A value 65536 \nimplies that this rule applies to 'Any' source port.\nThis value can be set only if the protocol is set to \nTCP or UDP.  Otherwise the value is set to Any(65536)\"\"\",\n        }, # column\n        \"bsnAclRuleEndSourcePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"65535\",\n            \"description\" :\n                \"\"\"Source Port of the packet. It can be either of the \npre specified ports like HTTP, HTTPS, Telnet, RADIUS \netc or any number between 0 and 65535.\nA value 65536 implies that this rule applies to 'Any'\nsource port.  This value can be set only if the \nprotocol is set to TCP or UDP.\nOtherwise the value is set to Any(65536)\"\"\",\n        }, # column\n        \"bsnAclRuleStartDestinationPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Destination Port of the packet. It can be either of \nthe pre specified ports like HTTP, HTTPS, Telnet, \nRADIUS etc or any number between 0 and 65535.\nA value 65536 implies that this rule aplpies to 'Any'\nDestination port. This value can be set only if the \nprotocol is set to TCP or UDP.  Otherwise the value is\nset to Any(65536)\"\"\",\n        }, # column\n        \"bsnAclRuleEndDestinationPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"65535\",\n            \"description\" :\n                \"\"\"Destination Port of the packet. It can be either of \nthe pre specified ports like HTTP, HTTPS, Telnet, \nRADIUS etc or any number between 0 and 65535.\nA value 65536 implies that this rule aplpies to 'Any'\nDestination port. This value can be set only if the \nprotocol is set to TCP or UDP.  Otherwise the value is\nset to Any(65536)\"\"\",\n        }, # column\n        \"bsnAclRuleDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"256\",\n            \"description\" :\n                \"\"\"DSCP value of the rule. A value 256 implies Any\"\"\",\n        }, # column\n        \"bsnAclNewRuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"New Index of the ACL rule. This attribute should be \nupdated if the requirement is to reset the sequence of \nthe rules of an ACL. A read on this will not yield \nanything.\"\"\",\n        }, # column\n        \"bsnAclRuleRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.8.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status of the ACL Rule.\"\"\",\n        }, # column\n        \"bsnMacFilterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing MAC Filter entries\"\"\",\n        }, # table\n        \"bsnMacFilterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMacFilterAddress\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnMacFilterAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC Address of the entry\"\"\",\n        }, # column\n        \"bsnMacFilterWlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"WLAN ID of the WLAN that the user can connect to. 0 \nmeans any WLAN ID.\"\"\",\n        }, # column\n        \"bsnMacFilterInterfaceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface Name.\"\"\",\n        }, # column\n        \"bsnMacFilterDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of the MAC Filter entry.\"\"\",\n        }, # column\n        \"bsnMacFilterRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.9.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnLocalNetUserTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing Local Net User entries.\"\"\",\n        }, # table\n        \"bsnLocalNetUserEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnLocalNetUserName\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnLocalNetUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of the net user.\"\"\",\n        }, # column\n        \"bsnLocalNetUserWlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"WLAN ID of the WLAN that the user can connect to. 0 \nmeans any WLAN ID.\"\"\",\n        }, # column\n        \"bsnLocalNetUserPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Password.\"\"\",\n        }, # column\n        \"bsnLocalNetUserDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of the Net User entry.\"\"\",\n        }, # column\n        \"bsnLocalNetUserLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"TimeInterval\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    \"range\" : {\n                        \"min\" : \"6000\",\n                        \"max\" : \"259200000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"8640000\",\n            \"description\" :\n                \"\"\"This object indicates the lifetime of an\nuser account expressed in hundredths of a second.\n\nLifetime period other than 0 will make it a guest-user.\nMinimum value for guest user is 60 seconds (6000).\n\nOnce configured as non-guest user can not be change \nto guest user and vice-versa. Default value is for  \na day and max lifetime is 259200000(30 days). WLANIds, \nwhich have webauth policy are valid for guest access\nuser. \"\"\",\n        }, # column\n        \"bsnLocalNetUserStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the time when the guest user\naccount was created and expressed as the number of\nseconds elapsed since 1st Jan, 1970. \"\"\",\n        }, # column\n        \"bsnLocalNetUserRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the remaining session time\nfor the guest user in hundredths of a second. \"\"\",\n        }, # column\n        \"bsnLocalNetUserRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.10.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnLocalManagementUserTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing Local Management Users\"\"\",\n        }, # table\n        \"bsnLocalManagementUserEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnLocalManagementUserName\",\n            ],\n            \"description\" :\n                \"\"\"....\"\"\",\n        }, # row\n        \"bsnLocalManagementUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Name\"\"\",\n        }, # column\n        \"bsnLocalManagementUserPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Password\"\"\",\n        }, # column\n        \"bsnLocalManagementUserAccessMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"readOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"readWrite\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Access Mode.\"\"\",\n        }, # column\n        \"bsnLocalManagementUserRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.11.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnRadiusAuthKeyWrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\" When keyWrap is enable then for 801.1X and 802.11i \nclient Authentication, request is sent to those \nradius servers which has KEK and MACK keys are configured.\n\nRadius servers are widely used for user authentications.\nIn 802.11i and 802.1X type authentication, the controller\nrecives Pairwise Master KEy(PMK) from RADIUS sever using\nvendor specific RADIUS attributes, which uses MPPE RFC3078.\nSince MPPE uses RC4 algorithm to provide data \nconfidentiality, it is not FIPS approved. For this RADIUS \nkey WRAP attributes, bsnRadiusAuthServerKeyWrap \nand bsnRadiusAuthServerKeyWrapMACKkey have been added, \nwhich are used to securely transfer encryption keys using \nnon-proprietary techniques.\"\"\",\n        }, # scalar\n        \"bsnRadiusAuthCacheCredentialsLocally\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable caching of credentials locally for \nRADIUS Auth servers.  This is used when a client uses a \none time password authentication scheme.\"\"\",\n        }, # scalar\n        \"bsnAAAMacDelimiter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noDelimiter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"colon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hyphen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"singleHyphen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delimiter to be used for mac filtering. It can be \ncolon as in xx:xx:xx:xx:xx:xx or hyphen as in \nxx-xx-xx-xx-xx-xx or single hyphen as in \nxxxxxx-xxxxxx or no delimiter as in xxxxxxxxxxxx.\"\"\",\n        }, # scalar\n        \"bsnAAARadiusCompatibilityMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ciscoACS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"orinocoRadius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The required compatibility mode for MAC filtering. For \nciscoACS, the expected MAC delimiter setting is colon and\nfor orinocoRadius, it is singleHyphen.\"\"\",\n        }, # scalar\n        \"bsnAAARadiusCallStationIdType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ipAddr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"macAddr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"apMacAddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute configures the call station ID information\nsent in RADIUS messages. The value undefined cannot be \nset during the write operation.\"\"\",\n        }, # scalar\n        \"bsnExternalPolicyServerAclName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute configures the ACL Name for External \nPolicy Servers\"\"\",\n        }, # scalar\n        \"bsnExternalPolicyServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the External Policy\nservers with which client share a secret.\"\"\",\n        }, # table\n        \"bsnExternalPolicyServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1\",\n            \"create\" : \"true\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"bsnExternalPolicyServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) representing an External \npolicy server with which the client shares\na secret.\"\"\",\n        }, # row\n        \"bsnExternalPolicyServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A number uniquely identifying each External\nPolicy server with which this client\ncommunicates.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the External Policy server\nreferred to in this table entry.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UDP port the client is using to send requests to\nthis server.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"The authentication and encryption key shared between\nthe client and this External Policy Server.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Server enable or disable status.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerConnectionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Server enable or disable status.\"\"\",\n        }, # column\n        \"bsnExternalPolicyServerRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.19.1.26\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Row Status for creation/deletion\"\"\",\n        }, # column\n        \"bsnAAALocalDatabaseSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"512\",\n                        \"max\" : \"2048\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This attribute is the total number of entries permitted \nin the local users database. This is the combined total \nof entries for Local Management Users, Local Net Users, \nDisabled Clients (previously known as blacklistclients \nand the MAC Filters. If the database size limit is \nreached, no more entries in any of these user lists are \nallowed to be created. To continue creating more entries,\none should increase the size of the database. This value \nis applied on reboot and then matches the \nbsnAACurrentLocalDatabaseSize.\"\"\",\n        }, # scalar\n        \"bsnAAACurrentLocalDatabaseSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"512\",\n                        \"max\" : \"2048\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is the maximum number of entries in the \nlocal users database that is effective currently.\nThis is the combined total of entries for Local \nManagement Users, Local Net Users, Disabled Clients\n(previously known as blacklist clients) and the MAC \nFilters.\"\"\",\n        }, # scalar\n        \"bsnAPAuthorizationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing AP Authorization entries\"\"\",\n        }, # table\n        \"bsnAPAuthorizationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPAuthMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"BsnAPAuthorizationEntry\"\"\",\n        }, # row\n        \"bsnAPAuthMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC Address of the AP entry\"\"\",\n        }, # column\n        \"bsnAPAuthCertificateType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"mic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ssc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Supported certificate types are MIC and SSC \n(Self-Signed-Certificate).\"\"\",\n        }, # column\n        \"bsnAPAuthHashKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SHA1 hash key for SSC certificate validation. \nIt has to be 40 hexa-decimal characters. \nThis is considered when certificate type is SSC.\"\"\",\n        }, # column\n        \"bsnAPAuthRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.5.22.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6\",\n        }, # node\n        \"bsnTrapControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1\",\n        }, # node\n        \"bsnDot11StationTrapControlMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"This mask describes what events merit traps to network \nmanagement. If the bit for a particular event is turned on\nthen notification will be generated on event occurence.\n    Event                    corresponding bit\n    -----                    -----------------\n    bsnDot11StationDisassociate           1\n    bsnDot11StationDeauthenticate         2\n    bsnDot11StationAuthenticateFail       4\n    bsnDot11StationAssociateFail          8\n    bsnDot11StationBlacklisted            16\nBy Default all bits are off.\"\"\",\n        }, # scalar\n        \"bsnAPTrapControlMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"63\",\n            \"description\" :\n                \"\"\"This mask describes what events merit traps to network \nmanagement. If the bit for a particular event is turned on\nthen notification will be generated on event occurance.\n    Event                       corresponding bit\n    -----                       -----------------\n    bsnAPAssociate/Disassociate      1\n    bsnAPIfUp/Down                   4\n\nBy Default all bits are on.\"\"\",\n        }, # scalar\n        \"bsnAPProfileTrapControlMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This mask describes what events merit traps to network \nmanagement. If the bit for a particular event is turned \non then notification will be generated on event occurance.\n    Event                    corresponding bit\n    -----                    -----------------\n    LoadProfileFail                  1\n    NoiseProfileFail                 2\n    InterferenceProfileFail          4\n    CoverageProfileFailed            8\"\"\",\n        }, # scalar\n        \"bsnAPParamUpdateTrapControlMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Mac Parameters are updated for a Airespace AP interface \nwhenever Dynamic Algorithm are run. This mask describes \nwhat update events merit traps to network management. If \nthe bit for a particular event is turned on then \nnotification will be generated on event occurance.\n    Event                    corresponding bit\n    -----                    -----------------\n    TxPowerChange                  1\n    ChannelChange                  2\n    AntennaChange                  4\n    RTSCTSThresholdChange          8\n    EDThresholdChange              16\n    FragmentationThresholdChange   32\"\"\",\n        }, # scalar\n        \"bsnIpsecTrapsMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This mask describes what events merit traps to network \nmanagement.  If the bit for a particular event is turned \non then notification will be generated on event occurance.\n    Event                    corresponding bit\n    -----                    -----------------\n    bsnIpsecEspAuthFailureTrap          1\n    bsnIpsecEspReplayFailureTrap        2\n    bsnIpsecEspPolicyFailureTrap        4\n    bsnIpsecEspInvalidSpiTrap           8\n    bsnIpsecOtherPolicyFailureTrap     16\n    bsnIpsecIkeNegFailure              32\n    bsnIpsecSuiteNegFailure            64   \n    bsnIpsecInvalidCookieTrap         128\"\"\",\n        }, # scalar\n        \"bsnRogueAPTrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If Rogue AP Detection and Removed Traps need to be sent \"\"\",\n        }, # scalar\n        \"bsnRADIUSServerTrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"if RADIUS Server Traps need to be sent \"\"\",\n        }, # scalar\n        \"bsnAuthenticationFailureTrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If Authentication Failure Traps need to be sent \"\"\",\n        }, # scalar\n        \"bsnConfigSaveTrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If Rogue AP Detection and Removed Traps need to be sent \"\"\",\n        }, # scalar\n        \"bsn80211SecurityTrapControlMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"This mask is for Security related trap controls.\n\nEvent                    corresponding bit\n-----                    -----------------\nbsnWepKeyDecryptError           1\n\nBy Default all bits are off.\"\"\",\n        }, # scalar\n        \"bsnWpsTrapControlEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This control is for WPS(Wireless Intrusion Protection \nSystem) related traps.\"\"\",\n        }, # scalar\n        \"bsnTrapVariable\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2\",\n        }, # node\n        \"bsnAuthFailureUserName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAuthFailureUserType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mgmtUser\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wlanUser\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"macFilter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnRemoteIPv4Address\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIpsecErrorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIpsecSPI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnRemoteUdpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIkeAuthMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIkeTotalInitFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIkeTotalInitNoResponses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnIkeTotalRespFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnNotifiesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnNotifiesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnSuiteInitFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnSuiteRespondFailures\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnInitiatorCookie\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The initiator cookie used in an ISAKMP message, to be\nassociated with a trap.\"\"\",\n        }, # scalar\n        \"bsnResponderCookie\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The responder cookie used in an ISAKMP message, to be\nassociated with a trap.\"\"\",\n        }, # scalar\n        \"bsnIsakmpInvalidCookies\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnCurrentRadiosCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnLicenseRadioCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPMacAddrTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPNameTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPSlotIdTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Number of Radio Interfaces on the Airespace AP.\"\"\",\n        }, # scalar\n        \"bsnAPChannelNumberTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPCoverageThresholdTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPCoverageFailedClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPCoverageTotalClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnClientMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnClientRssi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnClientSnr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnInterferenceEnergyBeforeChannelUpdate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnInterferenceEnergyAfterChannelUpdate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnAPPortNumberTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnMaxRogueCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationAPMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationAPIfSlotId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationReasonCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unspecified\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"previousAuthNotValid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"deauthenticationLeaving\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disassociationDueToInactivity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disassociationAPBusy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"class2FrameFromNonAuthStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"class2FrameFromNonAssStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"disassociationStaHasLeft\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"staReqAssociationWithoutAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"missingReasonCode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationBlacklistingReasonCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"failed80211Auth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failedAssociation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipTheft\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"failed8021xAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"failedWebAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnStationUserName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The user name of a client. This is used for the Client \nAssociated trap. It may be null when not known.\"\"\",\n        }, # scalar\n        \"bsnRogueAPOnWiredNetwork\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the flag used on the bsnRogueAPDetected trap to \nstate if the rogue is found on the wired network.\nTypically, after a rogue is found, there may be another \nbsnRogueAPDetected trap that will have the value\nof this flag 1 if the rogue is detected on the wired \nnetwork.\"\"\",\n        }, # scalar\n        \"bsnNavDosAttackSourceMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"MAC address generating the attack.\"\"\",\n        }, # scalar\n        \"bsnWlanIdTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"WLAN ID used by the client when the WPA MIC error \ncounter measure was activated.\"\"\",\n        }, # scalar\n        \"bsnUserIpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnRogueAdhocMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the flag used on the bsnRogueAPDetected trap to \nstate if the rogue found is an Adhoc rogue or it is an AP.\"\"\",\n        }, # scalar\n        \"bsnClearTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the flag is used to indicate if this is a clear \ntrap for the original alert or not.\"\"\",\n        }, # scalar\n        \"bsnDuplicateIpTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This field is used on the bsnDuplicateIpAddressReported \ntrap to contain the IP Address in question when switch \nor an AP detected a duplicate IP Address on another \nmachine.\"\"\",\n        }, # scalar\n        \"bsnDuplicateIpTrapClear\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the flag used to indicate clear state for the \nbsnDuplicateIpAddressReported trap.\"\"\",\n        }, # scalar\n        \"bsnDuplicateIpReportedByAP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the flag used on the bsnDuplicateIpAddressReported\ntrap to indicate whether the switch or an AP detected a \nduplicate IP Address on another machine.\"\"\",\n        }, # scalar\n        \"bsnTrustedApRadioPolicyRequired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot11bg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the radio policy required by a trusted Rogue.\"\"\",\n        }, # scalar\n        \"bsnTrustedApEncryptionUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wpa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the encryption type used by a trusted Rogue.\"\"\",\n        }, # scalar\n        \"bsnTrustedApEncryptionRequired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wpa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the encryption type required by a trusted Rogue.\"\"\",\n        }, # scalar\n        \"bsnTrustedApRadioPolicyUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot11bg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the radio policy used by a trusted Rogue.\"\"\",\n        }, # scalar\n        \"bsnNetworkType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot11b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot11a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnNetworkState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnSignatureType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Type of Signature whose attack is detected by the switch.\"\"\",\n        }, # scalar\n        \"bsnSignatureName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Name of the Signature whose attack is detected by the \nswitch.\"\"\",\n        }, # scalar\n        \"bsnSignatureDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Description of the Signature whose attack is detected by \nthe switch.\"\"\",\n        }, # scalar\n        \"bsnImpersonatedAPMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"MAC Address of the AP impersonated by another AP.\"\"\",\n        }, # scalar\n        \"bsnTrustedApPreambleUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"short\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"long\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The Preamble on this detecting AP.\"\"\",\n        }, # scalar\n        \"bsnTrustedApPreambleRequired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"short\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"long\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The Preamble on this detecting AP.\"\"\",\n        }, # scalar\n        \"bsnSignatureAttackPreced\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The preced in the standard/custom signature list.\"\"\",\n        }, # scalar\n        \"bsnSignatureAttackFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The preced in the standard/custom signature list.\"\"\",\n        }, # scalar\n        \"bsnSignatureAttackChannel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The preced in the standard/custom signature list.\"\"\",\n        }, # scalar\n        \"bsnSignatureAttackerMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The MAC address of the Attacker's mac-interface.\"\"\",\n        }, # scalar\n        \"bsnLicenseKeyTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the license key that has been found to be deleted,\nexpired or is mismatched causing AP\nfunctionality to be disabled on the switch.\"\"\",\n        }, # scalar\n        \"bsnApFunctionalityDisableReasonCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"licenseKeyExpired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"licenseKeyDeleted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"licenseKeyFeatureMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the reason why the AP functionality was disabled \non the switch. It could be either expiry or deletion or \nmismatch found of the license key.\"\"\",\n        }, # scalar\n        \"bsnLicenseKeyFeatureSetTrapVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"wps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the switch feature set whose license key has \nexpired or is deleted or is mismatched.\nTo enable the AP functionality again, the license key for\nthis feature set should be re-configured.\"\"\",\n        }, # scalar\n        \"bsnApRegulatoryDomain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"i\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"j\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"n\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"k\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"t\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"r\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"notavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The regulatory domain configured on an AP.\"\"\",\n        }, # scalar\n        \"bsnAPAuthorizationFailureCause\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"keymismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"entrydoesnotexist\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalidCertifcate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"entryIsMIC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This denotes the reason for AP authorization failure.\n[entrydoesnotexist]:  \n                The AP has not been added to Controller's\n                AP Authorization List.\n[keymismatch]:  The key entry in Controller's AP Authorization \n                list does not match the SHA1 key received from \n                the AP.\n[invalidCert]:  Could not verify the self signed Certificate.\n[entryIsMIC]:   AP has Self Signed Certificate where as in \n                Controller AP Authorization list has \n                Manufactured Installed Certificate\n[unknown]:      Default.\"\"\",\n        }, # scalar\n        \"bsnAPIfUpDownCause\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"radioFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radioLowPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"maxRetransmission\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"echoTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"configAP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"configRadio\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"configNetwork\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This denotes the reason for AP If up or down\nnormal - \nradio Failure - radio failed\nradioLowPower - AP is not able draw enough power.\nmaxRetransmission - max retransmission of AP Reached.\nechoTimeout - heartbeat timeout.\nconfigAP - admin enable/disable AP\nconfigRadio - admin enable/disable config radio\nconfigNetwork - admin enable/disable network\"\"\",\n        }, # scalar\n        \"bsnAPInvalidRadioType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unsupportedRadio\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Radio types which are not supported by controller.\"\"\",\n        }, # scalar\n        \"locationNotifyContent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This is the content of the notification.\"\"\",\n        }, # scalar\n        \"bsnSignatureMacInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.2.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"AIRESPACE-WIRELESS-MIB\", \"name\" : \"BsnTxtSignatureMacInfo\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This object defines the pattern followed by the\nLWAPP APs to perform signature analysis with this\nsignature and report the results to the\nController. \"\"\",\n        }, # scalar\n        \"bsnTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3\",\n        }, # node\n        \"bsnUtility\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7\",\n        }, # node\n        \"bsnSyslog\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.1\",\n        }, # node\n        \"bsnSyslogEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnSyslogRemoteAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This would be the IP Address or host name\"\"\",\n        }, # scalar\n        \"bsnPing\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2\",\n        }, # node\n        \"bsnPingTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\" PingTest Table\"\"\",\n        }, # table\n        \"bsnPingTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnPingTestId\",\n            ],\n            \"description\" :\n                \"\"\"An Entry (conceptual row) in the bsnPingTest\nTable.\"\"\",\n        }, # row\n        \"bsnPingTestId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Test ID\"\"\",\n        }, # column\n        \"bsnPingTestIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Ip Address to ping\"\"\",\n        }, # column\n        \"bsnPingTestSendCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Number of bytes sent\"\"\",\n        }, # column\n        \"bsnPingTestReceivedCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of bytes received.\"\"\",\n        }, # column\n        \"bsnPingTestStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inprogress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"complete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the ping test\"\"\",\n        }, # column\n        \"bsnPingTestRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.2.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnLinkTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3\",\n        }, # node\n        \"bsnLinkTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\" LinkTest Table\"\"\",\n        }, # table\n        \"bsnLinkTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"bsnLinkTestId\",\n            ],\n            \"description\" :\n                \"\"\"An Entry (conceptual row) in the bsnLinkTest\nTable.\"\"\",\n        }, # row\n        \"bsnLinkTestId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Link Test ID\"\"\",\n        }, # column\n        \"bsnLinkTestMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC Address of link to test\"\"\",\n        }, # column\n        \"bsnLinkTestSendPktCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3\",\n            \"description\" :\n                \"\"\"Number of packets sent.\"\"\",\n        }, # column\n        \"bsnLinkTestSendPktLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"500\",\n            \"description\" :\n                \"\"\"Length of sent packet\"\"\",\n        }, # column\n        \"bsnLinkTestReceivedPktCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of received packets.\"\"\",\n        }, # column\n        \"bsnLinkTestClientRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Client RSSI value of link.\"\"\",\n        }, # column\n        \"bsnLinkTestLocalSNR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Local SNR of the link\"\"\",\n        }, # column\n        \"bsnLinkTestLocalRSSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Local RSSI of the link.\"\"\",\n        }, # column\n        \"bsnLinkTestStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inprogress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"complete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the link test.\"\"\",\n        }, # column\n        \"bsnLinkTestRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.7.3.1.1.30\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnMobility\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8\",\n        }, # node\n        \"bsnMobilityConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1\",\n        }, # node\n        \"bsnMobilityProtocolPortNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Port Number on which mobility Protocol runs\"\"\",\n        }, # scalar\n        \"bsnMobilityDynamicDiscovery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Statically Configured is always enabled if members are \ndefined. To further enable rrm discovery, learned \ndiscovery, broadcast discovery, enable/disable this \nattribute.\"\"\",\n        }, # scalar\n        \"bsnMobilityStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"resetNow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset mobility statistics by setting this atribute to \nresetNow. If you try to read this attribute value will \nalways be 0.\"\"\",\n        }, # scalar\n        \"bsnMobilityGroupMembersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MWAR List (statically configured members of the mobility \ngroup)\"\"\",\n        }, # table\n        \"bsnMobilityGroupMembersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobilityGroupMemberMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An Entry (conceptual row) in the bsnMobilityGroupMembers\nTable.\"\"\",\n        }, # row\n        \"bsnMobilityGroupMemberMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Member switch MAC Address\"\"\",\n        }, # column\n        \"bsnMobilityGroupMemberIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Member switch IP Address\"\"\",\n        }, # column\n        \"bsnMobilityGroupMemberGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Member's group name. If left empty while adding a new group \nmember, this assumes the default mobility group name of the \nswitch.\"\"\",\n        }, # column\n        \"bsnMobilityGroupMemberRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.10.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnMobilityAnchorsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Statically configured mobility anchors\"\"\",\n        }, # table\n        \"bsnMobilityAnchorsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.11.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnMobilityAnchorWlanSsid\",\n                \"bsnMobilityAnchorSwitchIPAddress\",\n            ],\n            \"description\" :\n                \"\"\"An Entry (conceptual row) in the bsnMobilityAnchorsTable\nTable.\"\"\",\n        }, # row\n        \"bsnMobilityAnchorWlanSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Local wlan-ssid to connect to Guest/Anchor switch\"\"\",\n        }, # column\n        \"bsnMobilityAnchorSwitchIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Guest/Anchor switch IP Address\"\"\",\n        }, # column\n        \"bsnMobilityAnchorRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.1.11.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status\"\"\",\n        }, # column\n        \"bsnMobilityStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2\",\n        }, # node\n        \"bsnTotalHandoffRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total handoff requests\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total handoffs\"\"\",\n        }, # scalar\n        \"bsnCurrentExportedClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current exported client count\"\"\",\n        }, # scalar\n        \"bsnTotalExportedClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total exported client count\"\"\",\n        }, # scalar\n        \"bsnCurrentImportedClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Imported client count\"\"\",\n        }, # scalar\n        \"bsnTotalImportedClients\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Imported client count\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total handoff errors\"\"\",\n        }, # scalar\n        \"bsnTotalCommunicationErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total communication errors\"\"\",\n        }, # scalar\n        \"bsnMobilityGroupDirectoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MWAR List (statically configured members of the mobility \ngroup)\"\"\",\n        }, # table\n        \"bsnMobilityGroupDirectoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnGroupDirectoryMemberMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"An Entry (conceptual row) in the bsnMobilityGroupDirectory\nTable.\"\"\",\n        }, # row\n        \"bsnGroupDirectoryMemberIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mwar Ip Address\"\"\",\n        }, # column\n        \"bsnGroupDirectoryMemberMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mwar Mac Address\"\"\",\n        }, # column\n        \"bsnGroupDirectoryDicoveryType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rrm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"learned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Discovery type of the Group Directory.\"\"\",\n        }, # column\n        \"bsnMemberCurrentAnchoredClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current anchored client count\"\"\",\n        }, # column\n        \"bsnMemberTotalAnchoredClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total anchored client count\"\"\",\n        }, # column\n        \"bsnMemberCurrentExportedClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current exported client count\"\"\",\n        }, # column\n        \"bsnMemberTotalExportedClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total exported client count\"\"\",\n        }, # column\n        \"bsnMemberCurrentImportedClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Imported client count\"\"\",\n        }, # column\n        \"bsnMemberTotalImportedClients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Imported client count\"\"\",\n        }, # column\n        \"bsnMemberTotalHandoffErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total handoff errors\"\"\",\n        }, # column\n        \"bsnMemberTotalCommunicationErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.9.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Communication errors\"\"\",\n        }, # column\n        \"bsnTotalReceiveErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total receive errors\"\"\",\n        }, # scalar\n        \"bsnTotalTransmitErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Transmit errors\"\"\",\n        }, # scalar\n        \"bsnTotalResponsesRetransmitted\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Responses Retransmitted\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffEndRequestsReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff End Requests Received\"\"\",\n        }, # scalar\n        \"bsnTotalStateTransitionsDisallowed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total State Transitions Disallowed\"\"\",\n        }, # scalar\n        \"bsnTotalResourceErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Resource Errors\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRequestsSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Requests Sent\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRepliesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Replies Received\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffAsLocalReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoffs As Local Received\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffAsForeignReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoffs As Foreign Received\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffDeniesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Denies Received\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorRequestsSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Requests Sent\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorDenyReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Deny Received\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorGrantReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Grant Received\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorTransferReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Transfer Received\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRequestsIgnored\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Requests Ignored\"\"\",\n        }, # scalar\n        \"bsnTotalPingPongHandoffRequestsDropped\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Ping Pong Handoff Requests Dropped\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRequestsDropped\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Requests Dropped\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRequestsDenied\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Requests Denied\"\"\",\n        }, # scalar\n        \"bsnTotalClientHandoffAsLocal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Client Handoffs As Local\"\"\",\n        }, # scalar\n        \"bsnTotalClientHandoffAsForeign\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Client Handoffs As Foreign\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorRequestsReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Requests Received\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorRequestsDenied\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Requests Denied\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorRequestsGranted\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Requests Granted\"\"\",\n        }, # scalar\n        \"bsnTotalAnchorTransferred\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Anchor Transferred\"\"\",\n        }, # scalar\n        \"bsnTotalHandoffRequestsReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.8.2.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total Handoff Requests Received\"\"\",\n        }, # scalar\n        \"bsnIpsec\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9\",\n        }, # node\n        \"bsnWrasIpsecCACertificate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"bsnWrasIpsecCACertificateUpdate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"Note this attribute is for updating the certificate\nIf you try to read it, it will always be ***\"\"\",\n        }, # scalar\n        \"bsnWrasIpsecCertTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Certificates.\"\"\",\n        }, # table\n        \"bsnWrasIpsecCertEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnWrasIpsecCertName\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains a specific certificate.\"\"\",\n        }, # row\n        \"bsnWrasIpsecCertName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name assigned to this set of IKE Certificates.\"\"\",\n        }, # column\n        \"bsnWrasIpsecCertificateUpdate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"If you try to read this it will always be ***\"\"\",\n        }, # column\n        \"bsnWrasIpsecCertificate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"bsnWrasIpsecCertPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"bsnWrasIpsecCertStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.9.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A row status type for the IKE Cert Entry.\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10\",\n        }, # node\n        \"bsnAPGroupsVlanFeature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When enabled, Site Specific WLAN feature is enforced.\"\"\",\n        }, # scalar\n        \"bsnAPGroupsVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Wireless Sites Table.\"\"\",\n        }, # table\n        \"bsnAPGroupsVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPGroupsVlanName\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnAPGroupsVlanTable.\"\"\",\n        }, # row\n        \"bsnAPGroupsVlanName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string is an unique identifier/name assigned to a site.\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description about the site.\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status for creation/deletion of entries in \nbsnAPGroupsVlanTable\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for the WLAN-interace-mappings allowed for each \nconfigured site. Each site can have a set of WLANs associated\nwith it.\"\"\",\n        }, # table\n        \"bsnAPGroupsVlanMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bsnAPGroupsVlanName\",\n                \"bsnAPGroupsVlanMappingSsid\",\n            ],\n            \"description\" :\n                \"\"\"An entry in bsnAPGroupsVlanMappingTable.\"\"\",\n        }, # row\n        \"bsnAPGroupsVlanMappingSsid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When an AP is associated with a site, and the site\nhas an associated set of WLANs, then only those WLANs are\nbeamed by the AP. Here 'bsnAPGroupsVlanMappingSsid'\nis the wlan to be used when a client connects on this AP.\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanMappingInterfaceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When an AP is associated with a site, and the site \nhas an associated set of WLANs, then only those WLANs are \nbeamed by the AP. Here 'bsnAPGroupsVlanMappingInterfaceName'\nis the interface to be used when a client connects to the\n'bsnAPGroupsVlanMappingSsid' WLAN on this AP.\"\"\",\n        }, # column\n        \"bsnAPGroupsVlanMappingRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.10.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status for creation/deletion of WLAN-interface-mappings\nasscoiated with sites.\"\"\",\n        }, # column\n        \"bsnWrasGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50\",\n        }, # node\n        \"bsnWrasCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.51\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"bsnDot11StationDisassociate\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The disassociate notification shall be sent when the Station\nsends a Disassociation frame. The value of the notification\nshall include the MAC address of the MAC to which the \nDisassociation frame was sent and the reason for the \ndisassociation\"\"\",\n        }, # notification\n        \"bsnDot11StationDeauthenticate\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The deauthenticate notification shall be sent when the Station\nsends a Deauthentication frame. The value of the notification\nshall include the MAC address of the MAC to which the\nDeauthentication frame was sent and the reason for the\ndeauthentication.\"\"\",\n        }, # notification\n        \"bsnDot11StationAuthenticateFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The authenticate failure notification shall be sent when the \nStation sends an Authentication frame with a status code other\nthan 'successful'. The value of the notification shall include\nthe MAC address of the MAC to which the Authentication\nframe was sent and the reason for the authentication failure.\"\"\",\n        }, # notification\n        \"bsnDot11StationAssociateFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The associate failure notification shall be sent when the \nStation sends an Association frame with a status code other \nthan 'successful'. The value of the notification\nshall include the MAC address of the MAC to which the \nAuthentication frame was sent and the reason for the \nauthentication failure.\"\"\",\n        }, # notification\n        \"bsnAPUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP operation status goes up this trap will be \nsent\"\"\",\n        }, # notification\n        \"bsnAPDown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP operation status goes down this trap will be\nsent\"\"\",\n        }, # notification\n        \"bsnAPAssociated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPPortNumberTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP Associates to a Airespace Switch, AP \nassociated notification will be sent with dot3 MAC address of \nAirespace AP.This will help management system to discover \nAirespace AP and add to system.\"\"\",\n        }, # notification\n        \"bsnAPDisassociated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP disassociates from Airespace Switch, AP \ndisassociated notification will be sent with dot3 MAC address\nof Airespace AP management system to remove Airespace AP from\nthis Airespace Switch\"\"\",\n        }, # notification\n        \"bsnAPIfUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfUpDownCause\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP's interface's operation status goes up this\ntrap will be sent\"\"\",\n        }, # notification\n        \"bsnAPIfDown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAdminStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfAdminStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfUpDownCause\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Airespace AP's interface's operation status goes down \nthis trap will be sent.\"\"\",\n        }, # notification\n        \"bsnAPLoadProfileFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When LOAD Profile state changes from PASS to FAIL, \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPNoiseProfileFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Noise Profile state changes from PASS to FAIL, \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPInterferenceProfileFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Interference Profile state changes from PASS to FAIL,\nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPCoverageProfileFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNameTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSlotIdTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageThresholdTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageFailedClients\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageTotalClients\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientRssi\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientSnr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Coverage Profile state changes from PASS to FAIL, \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPCurrentTxPowerChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyTxPowerLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever dynamic algorithms are running and \nbsnAPIfPhyPowerAutomaticOn is true, Airespace AP Interface's \nCurrentTxPower might get updated by algorithm. When\nthis occurs notification will be sent with Dot3 MAC address of\nAirespace AP and slot ID of Airespace AP IF along with the \ncurrentTxPower for this Airespace AP IF\"\"\",\n        }, # notification\n        \"bsnAPCurrentChannelChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSlotIdTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPChannelNumberTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInterferenceEnergyBeforeChannelUpdate\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInterferenceEnergyAfterChannelUpdate\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever dynamic algorithms are running and \nbsnAPIfPhyChannelAutomaticOn is true, Airespace AP \nInterface's CurrentChannel might get updated by algorithm. \nWhen this occurs notification will be sent with Dot3 MAC \naddress of Airespace AP and slot ID of Airespace AP IF along \nwith the currentChannel for this Airespace AP IF\"\"\",\n        }, # notification\n        \"bsnRrmDot11aGroupingDone\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRrmDot11aGroupLeaderMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Grouping is done, this notification will be sent from the\nprevious Group Leader where grouping algorithm was run. It has\nMAC address of the new Group Leader.\"\"\",\n        }, # notification\n        \"bsnRrmDot11bGroupingDone\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRrmDot11bGroupLeaderMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Grouping is done, this notification will be sent from the\nprevious Group Leader where grouping algorithm was run. It has\nMAC address of the new Group Leader.\"\"\",\n        }, # notification\n        \"bsnConfigSaved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"When configuration is save either from CLI or web interface\nThis trap will be sent to inform NMS to do refresh\"\"\",\n        }, # notification\n        \"bsnDot11EssCreated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnDot11EssIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever a new Ess (WLAN) is created, this notification will \nbe sent along with EssIndex\"\"\",\n        }, # notification\n        \"bsnDot11EssDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnDot11EssIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever a Ess (WLAN)is deleted, this notification will be \nsent along with EssIndex\"\"\",\n        }, # notification\n        \"bsnRADIUSServerNotResponding\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap is to indicate that no RADIUS server(s) are responding\nto authentication requests sent by the RADIUS client within the\nMWAR device(Switch).\"\"\",\n        }, # notification\n        \"bsnAuthenticationFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAuthFailureUserType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAuthFailureUserName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is to inform that client authentication failure has\noccured at MWAR(Switch). This could be cli/web user, wlan user, \nor Mac Authorized user. ServiceType will indicate which type of \nuser it is and userName will be cli/web/wlan userName or \nMacAddress of Mac Authorized User\"\"\",\n        }, # notification\n        \"bsnIpsecEspAuthFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecErrorCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IPsec packets with invalid hashes were found in an inbound\nESP SA. The total number of authentication errors\naccumulated is sent for the specific row of the\nipsecSaEspInTable table for the SA; this provides the\nidentity of the SA in which the error occurred.\n\nImplementations SHOULD send one trap per SA (within a\nreasonable time period), rather than sending one trap per\npacket.\"\"\",\n        }, # notification\n        \"bsnIpsecEspReplayFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecErrorCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IPsec packets with invalid sequence numbers were found in\nan inbound ESP SA. The total number of replay errors\naccumulated is sent for the specific row of the\nipsecSaEspInTable table for the SA; this provides the\nidentity of the SA in which the error occurred.\n\nImplementations SHOULD send one trap per SA (within a\nreasonable time period), rather than sending one trap per\npacket.\"\"\",\n        }, # notification\n        \"bsnIpsecEspInvalidSpiTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecSPI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A packet with an unknown SPI was detected from the\nspecified peer with the specified SPI using the specified\nprotocol. The destination address of the received packet is\nspecified by ipsecLocalAddress.\n\nThe value ifIndex may be 0 if this optional linkage is\nunsupported.\n\nIf the object ipsecSecurityProtocol has the value for\nIPcomp, then the ipsecSPI object is the CPI of the packet.\n\nImplementations SHOULD send one trap per peer (within a\nreasonable time period), rather than sending one trap per\npacket.\"\"\",\n        }, # notification\n        \"bsnIpsecIkeNegFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRemoteUdpPort\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeAuthMethod\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalInitFailures\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalInitNoResponses\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalRespFailures\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesSent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesReceived\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An attempt to negotiate a phase 1 IKE SA failed.\nThe notification counts are also sent as part of the trap,\nalong with the current value of the total negotiation error\ncounters for ISAKMP.\"\"\",\n        }, # notification\n        \"bsnIpsecSuiteNegFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSuiteInitFailures\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSuiteRespondFailures\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesSent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesReceived\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An attempt to negotiate a phase 2 SA suite for the\nspecified selector failed.\nThe current total failure counts are passed as well as the\nnotification type counts for the notify involved in the\nfailure.\"\"\",\n        }, # notification\n        \"bsnIpsecInvalidCookieTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRemoteUdpPort\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInitiatorCookie\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnResponderCookie\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIsakmpInvalidCookies\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"ISAKMP packets with invalid cookies were detected from the\nspecified source, intended for the specified destination.\n\nThe initiator and responder cookies are also sent with the\ntrap.\n\nThe current count is sent to allow the trap to accurately\nrelfect dropped and throttled traps.\n\nImplementations SHOULD send one trap per peer (within a\nreasonable time period, rather than sending one trap per\npacket.\"\"\",\n        }, # notification\n        \"bsnRogueAPDetected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPSsid\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPChannelNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPRSSI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPSNR\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPOnWiredNetwork\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAdhocMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPRadioType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When a Rogue AP is detected this Trap will be sent out along\nwith APMacAddress on which its detected\"\"\",\n        }, # notification\n        \"bsnAPLoadProfileUpdatedToPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When LOAD Profile state changes from FAIL to PASSt this \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPNoiseProfileUpdatedToPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Noise Profile state changes from FAIL tp PASS, \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPInterferenceProfileUpdatedToPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Interference Profile state changes from FAIL tp PASS,\nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable /disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnAPCoverageProfileUpdatedToPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When Coverage Profile state changes from FAIL tp PASS, \nnotification will be sent with Dot3 MAC address of Airespace \nAP and slot ID of Airespace AP IF. This trap sending can be \nenable/disable using bsnRrmProfileTrapControlFlag \"\"\",\n        }, # notification\n        \"bsnRogueAPRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPRadioType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When a Rogue AP that was detected earlier no longer exists\nthis Trap will be sent out along\nwith APMacAddress on which its detected\"\"\",\n        }, # notification\n        \"bsnRadiosExceedLicenseCount\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnCurrentRadiosCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseRadioCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever the currently associated Radios exceed the License Count\nThis trap will be sent to annoy the Customer\"\"\",\n        }, # notification\n        \"bsnSensedTemperatureTooHigh\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnSensorTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor temp too High - temp is too high on the unit.  \nImmediate action should be taken\"\"\",\n        }, # notification\n        \"bsnSensedTemperatureTooLow\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnSensorTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor temp too Low  - temp is too high on the unit. \nImmediate action should be taken\"\"\",\n        }, # notification\n        \"bsnTemperatureSensorFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Temperature sensor hw failure - temp sensor has failed.  \nTemperature is unknown\"\"\",\n        }, # notification\n        \"bsnTemperatureSensorClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnSensorTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor clear -- temp sensor alarm condition is over.  \nsensor is operating within proper temp range\"\"\",\n        }, # notification\n        \"bsnPOEControllerFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"POE Controller has failed. Its a very critical trap.\nUser intervention is required.\"\"\",\n        }, # notification\n        \"bsnMaxRogueCountExceeded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnMaxRogueCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The number of rogues has exceeded the maximum Rogues allowed\"\"\",\n        }, # notification\n        \"bsnMaxRogueCountClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnMaxRogueCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The number of rogues is within the maximum Rogues allowed\"\"\",\n        }, # notification\n        \"bsnApMaxRogueCountExceeded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaxRogueCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The number of rogues has exceeded the maximum Rogues allowed on \nthe AP\"\"\",\n        }, # notification\n        \"bsnApMaxRogueCountClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaxRogueCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The number of rogues is within the maximum Rogues allowed on the \nAP\"\"\",\n        }, # notification\n        \"bsnDot11StationBlacklisted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.52\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationBlacklistingReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The station blacklisted notification shall be sent when the \nclient is blacklisted.  The reason could be repeated auth or \nassociation failures or IP Address theft.\nThe value of the notification shall include the MAC address \nof the MAC to which the Authentication frame was sent, the \nMAC and Slot Id of AP that client was associated to and the \nreason for black listing.\"\"\",\n        }, # notification\n        \"bsnDot11StationAssociate\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.53\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationUserName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The associate notification shall be sent when any of the \nwatchlisted clients(present on at least one watch list)\nassociates with an AP. The value of the notification\nshall include the MAC address and the Slot ID of the radio \nto which the station Associated.\"\"\",\n        }, # notification\n        \"bsnApBigNavDosAttack\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.55\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSlotIdTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNavDosAttackSourceMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The AP sent a string of messages with large NAV field and all \n802.11 traffic on that channel was suspended.\"\"\",\n        }, # notification\n        \"bsnTooManyUnsuccessLoginAttempts\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.56\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnUserIpAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationUserName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Management User made too many unsuccessful login attempts.\"\"\",\n        }, # notification\n        \"bsnWepKeyDecryptError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.57\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a decrypt error occurrs. The WEP Key configured at \nthe station may be wrong.\"\"\",\n        }, # notification\n        \"bsnWpaMicErrorCounterActivated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.58\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWlanIdTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a WPA MIC error occurs and a counter measure is \nactivated at the AP.\"\"\",\n        }, # notification\n        \"bsnRogueAPDetectedOnWiredNetwork\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.59\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPOnWiredNetwork\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When a Rogue is detected on the wired network this trap will \nbe sent out.\nThe same trap with bsnRogueAPOnWiredNetwork set to no will \nclear the previous trap.\"\"\",\n        }, # notification\n        \"bsnApHasNoRadioCards\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.60\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When an AP has no radio cards present on it, the switch \nsends this trap.\"\"\",\n        }, # notification\n        \"bsnDuplicateIpAddressReported\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.61\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnDuplicateIpReportedByAP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpTrapClear\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is issued when the switch or an AP detects another \nmachine using its IP Address. The first variable has value \nyes if the duplicate IP is reported by an AP. In that case, \nthe second attribute will carry the AP MAC Address. The third\nvariable is the duplicate IP address in question and the last \nattribute is the MAC Address of the machine that is found to\nbe using the duplicate IP.\"\"\",\n        }, # notification\n        \"bsnAPContainedAsARogue\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.62\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When our AP detects that it is being contained by another AP,\nthis trap is issued. The clear flag is true if the AP is no \nlonger being contained.\"\"\",\n        }, # notification\n        \"bsnTrustedApHasInvalidSsid\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.63\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Trusted Rogue AP is auto contained for advertising \ninvalid SSID.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnTrustedApIsMissing\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.64\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Trusted Rogue AP is missing or has failed.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnAdhocRogueAutoContained\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.65\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when an Adhoc Rogue is auto contained.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnRogueApAutoContained\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.66\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Rogue AP is auto contained for advertising our SSID.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnTrustedApHasInvalidEncryption\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.67\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApEncryptionUsed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApEncryptionRequired\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Trusted Rogue AP is auto contained for using \ninvalid encryption. The second param is for the encryption used \nand the third param is for encryption required.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnTrustedApHasInvalidRadioPolicy\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.68\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApRadioPolicyUsed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApRadioPolicyRequired\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Trusted Rogue AP is auto contained for using \ninvalid radio policy.  The second param is for the radio policy \nused and the third param is for radio policy required.\nIf the clear variable has value true, then the trap clears the \nearlier alert.\"\"\",\n        }, # notification\n        \"bsnNetworkStateChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.69\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnNetworkType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNetworkState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When the 802.11a or b/g network state is changed this trap \nis issued.\"\"\",\n        }, # notification\n        \"bsnSignatureAttackDetected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.70\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackPreced\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackFrequency\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackChannel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackerMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureMacInfo\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent out when a signature attack is detected by \nthe switch. The standard and custom signatures are predefined\non the switch (see bsnSignatureConfig group). The signatures \nalso defines if its detection should be reported. The trap \nvariables bsnSignatureName and bsnSignatureDescription are \nretrieved from the detected signature definition. Clear Trap \nVariable is turned on when the signature attack stops. The \nsignature's quiet time configuration speicifes the time after\nwhich the clear trap would be sent. bsnSignatureMacInfo \nindicates whether the signature is used to track \npattern matches for all source MAC addresses together or \nseperately for individual source MAC addresses.  \nbsnSignatureAttackFrequency will carry the value for a \nspecific MAC address or for all MAC addresses depending on \nbsnSignatureMacInfo. \"\"\",\n        }, # notification\n        \"bsnAPRadioCardTxFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.71\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent by the switch when a radio card on an AP \nstops transmitting.\"\"\",\n        }, # notification\n        \"bsnAPRadioCardTxFailureClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.72\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent by the switch when a radio card on an AP \nstarts transmitting again after a prior failure.\"\"\",\n        }, # notification\n        \"bsnAPRadioCardRxFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.73\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent by the switch when a radio card on an AP \nstops receiving.\"\"\",\n        }, # notification\n        \"bsnAPRadioCardRxFailureClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.74\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent by the switch when a radio card on an AP \nstarts receiving again after a prior failure.\"\"\",\n        }, # notification\n        \"bsnAPImpersonationDetected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.75\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnImpersonatedAPMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent by the switch when a radio of an \nauthenticated AP hears from another AP whose MAC Address\nneither matches that of a rogue's and nor is it an \nauthenticated neighbor of the detecting AP.\"\"\",\n        }, # notification\n        \"bsnTrustedApHasInvalidPreamble\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.76\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApPreambleUsed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApPreambleRequired\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Issued when a Trusted Rogue AP is auto contained for using invalid\npreamble. The second param is for the preamble used and the third\nparam is for preamble required. If the clear variable has value \ntrue, then the trap clears the earlier alert.\"\"\",\n        }, # notification\n        \"bsnAPIPAddressFallback\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.77\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApIpAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPStaticIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent out when an AP, with the configured static \nip-address, fails to establish connection with outside world \nand starts using DHCP as a fallback option.\"\"\",\n        }, # notification\n        \"bsnAPFunctionalityDisabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.78\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnApFunctionalityDisableReasonCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseKeyTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseKeyFeatureSetTrapVariable\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent out when AP functionality on the switch is \ndisabled because the License key has expired\nor has been deleted or doesn't match the switch image.\"\"\",\n        }, # notification\n        \"bsnAPRegulatoryDomainMismatch\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.79\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApRegulatoryDomain\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11CountryIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is generated if an AP's regulatory domain doesn't \nmatch the country the switch is configured for.  Due to the \nmismatch, the AP will fail to associate with the Switch.\"\"\",\n        }, # notification\n        \"bsnRxMulticastQueueFull\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.80\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap indicates that the CPU's Receive Multicast Queue is\nFull.\"\"\",\n        }, # notification\n        \"bsnRadarChannelDetected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.81\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyChannelNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent when radar signals are detected on the \ncurrent channel\"\"\",\n        }, # notification\n        \"bsnRadarChannelCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.82\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyChannelNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap will be generated, if a radar trap has been \ngenerated earlier, after the expiry of Non-Occupancy Period.\"\"\",\n        }, # notification\n        \"bsnAPAuthorizationFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.83\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthCertificateType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthorizationFailureCause\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent out in case of authorization failure while \nattempting to associate the AP to the controller.\nbsnAPDot3MacAddress represents the mac-address of that AP.\nbsnAPName is name of AP\"\"\",\n        }, # notification\n        \"radioCoreDumpTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.84\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When radio module in AP dumps core, it informs controller and \ncontroller generates this trap. The core file can be retrieved\non demand.\"\"\",\n        }, # notification\n        \"invalidRadioTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.85\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPInvalidRadioType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap will be generated when an AP has joined is using \nunsupported radio or a radio slot not currently not being \nused.\"\"\",\n        }, # notification\n        \"countryChangeTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.86\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnGlobalDot11CountryIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap will be generated when an operator changes the\ncountry of operation. New country code will be sent in trap.\"\"\",\n        }, # notification\n        \"unsupportedAPTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.87\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap will be generated when unsupported AP try to join\n40xx/410x or 3500 with 64MB flash.\"\"\",\n        }, # notification\n        \"heartbeatLossTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.88\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap will be generated when controller loses \nconnection with the Supervisor Switch in which it\nis physically embedded and doesn't hear the\nheartbeat keepalives from the Supervisor. \"\"\",\n        }, # notification\n        \"locationNotifyTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.6.3.89\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"locationNotifyContent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap will be generated by the location server \nfor notifications of location events.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"bsnEssGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnDot11EssIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssSessionTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssMacFiltering\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssSecurityAuthType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssStaticWEPSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssStaticWEPEncryptionType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssStaticWEPDefaultKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssStaticWEPKeyIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssStaticWEPKeyFormat\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11Ess8021xSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11Ess8021xEncryptionType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssIpsecSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnEncrTransform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnAuthTransform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnIkeAuthMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnSharedKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnSharedKeySize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnIkePhase1Mode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnIkeLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnIkeDHGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssIpsecPassthruSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnPassthruGateway\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWebSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadioPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssQualityOfService\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssDhcpRequired\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssDhcpServerIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnContivityMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssVpnQotdServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssBlacklistTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssNumberOfMobileStations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWebPassthru\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssCraniteSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssBlacklistingCapability\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssInterfaceName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssAclName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssAAAOverride\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWepAllowSharedKeyAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssFortressSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssL2tpSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssBroadcastSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssExternalPolicyValidation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssIPv6Bridging\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWmePolicySetting\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11Ess80211ePolicySetting\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWebPassthroughEmail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11Ess7920PhoneSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAuthPrimaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAuthSecondaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAuthTertiaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAcctPrimaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAcctSecondaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRadiusAcctTertiaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationAPMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationAPIfSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationEssIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationReasonCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationMobilityStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationAID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationAnchorAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationCFPollable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationCFPollRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationChannelAgilityEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPBCCOptionImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationShortPreambleOptionImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationSessionTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationAuthenticationAlgorithm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationWepState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationDeleteAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPolicyManagerState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationSecurityPolicyStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationMirrorMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationInterface\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationApMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPolicyType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationEncryptionCypher\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationEapType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationCcxVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationE2eVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationStatusCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPerRadioPerVapIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationBytesReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationBytesSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPolicyErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPacketsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationPacketsSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPDot11MacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPTotalDetectingAPs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPFirstReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPLastReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPContainmentLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPOnNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPTotalClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPMaxDetectedRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPSSID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPRadioType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPContainmentMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPContainmentChannelCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPContainmentChannels\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPWepMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPPreamble\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPWpaMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPAirespaceAPSNR\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationByIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationByIpMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiDataApMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiDataApIfSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiDataApIfType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiDataApName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiData\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyAntennaIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationRssiDataLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationByUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationByUserMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientRadioType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientAirespaceAPSNR\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientTotalDetectingAPs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientFirstReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientLastReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientBSSID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientContainmentLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPDot11MacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueClientDot11MacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosProfileName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosProfileDesc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosAverageDataRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosBurstDataRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosAvgRealTimeDataRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosBurstRealTimeDataRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosMaxRFUsagePerAP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11QosProfileQueueDepth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11WiredQosProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11802Dot1PTag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11ResetProfileToDefault\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagDot11MacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagTimeInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagBatteryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagLastReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataApMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataApIfSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataApIfType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataApName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiData\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagRssiDataSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagBytesReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTagPacketsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationSampleTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationTxExcessiveRetries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationTxRetries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobileStationTxFiltered\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provides information\nabout Airespace Wireless LAN Configuration Attributes\nThese objects are defined under bsnEss object.\"\"\",\n        }, # group\n        \"bsnApGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnAPDot3MacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNumOfSlots\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPMonitorOnlyMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPOperationStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPBootVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPPrimaryMwarName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPStatsTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPClearConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPMirrorMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRemoteModeSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSecondaryMwarName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPTertiaryMwarName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIsStaticIP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNetmask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGateway\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPStaticIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPBridgingSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupVlanName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIOSVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCertificateType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPEthernetMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyChannelAssignment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyTxPowerControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyTxPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyAntennaMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyAntennaType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyAntennaDiversity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfCellSiteConfigId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfNumberOfVaps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPhyAntennaOptions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApIfNoOfUsers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfWlanOverride\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPacketsSniffingFeature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSniffChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSniffServerIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfAntennaGain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfChannelList\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfAbsolutePowerList\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRegulatoryDomainSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11BeaconPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MediumOccupancyLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11CFPPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11CFPMaxDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11OperationalRateSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11DTIMPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MultiDomainCapabilityImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MultiDomainCapabilityEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11CountryString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11SmtParamsConfigType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11BSSID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MaximumTransmitPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11FirstChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11NumberofChannels\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacRTSThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacShortRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacLongRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacFragmentationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacMaxTransmitMSDULifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacParamsConfigType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MacMaxReceiveLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TransmittedFragmentCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MulticastTransmittedFrameCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11RetryCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MultipleRetryCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11FrameDuplicateCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11RTSSuccessCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11RTSFailureCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11ACKFailureCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11ReceivedFragmentCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11MulticastReceivedFrameCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11FCSErrorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TransmittedFrameCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11WEPUndecryptableCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11FailedCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11EDThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TIThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfProfileParamAssignment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfForeignInterferenceThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfForeignNoiseThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRFUtilizationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfThroughputThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfMobilesThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfCoverageThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfMobileMinExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfCoverageExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfLoadRxUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfLoadTxUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfLoadChannelUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfLoadNumOfClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfPoorSNRClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfInterferenceChannelNo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfInterferencePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfInterferenceUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfNoiseChannelNo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDBNoisePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfLoadProfileState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfInterferenceProfileState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfNoiseProfileState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfCoverageProfileState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRxNeighborMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRxNeighborIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRxNeighborRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRxNeighborSlot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfStationRSSICoverageIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRSSILevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfStationCountOnRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfStationSNRCoverageIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfSNRLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfStationCountOnSNR\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRecommendedChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRecommendedTxPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRecommendedRTSThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRecommendedFragmentationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfWlanOverrideId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfWlanOverrideSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfWlanOverrideRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeRole\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeBackhaul\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeBackhaulPAP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeBackhaulRAP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeDataRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeRoutingState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeMalformedNeighPackets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodePoorNeighSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeBlacklistPackets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeInsufficientMemory\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeRxNeighReq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeRxNeighRsp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeTxNeighReq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeTxNeighRsp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeParentChanges\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeNeighTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeParentMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeAPType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeEthernetBridge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNodeHops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighSnrUp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighSnrDown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighLinkSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighAdjustedEase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighUnadjustedEase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighRapEase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighTxParent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighRxParent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighPoorSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighLastUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMeshNeighParentChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRadarDetectedChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfRadarSignalLastHeard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace APs that are associated with the Switch.\nThese objects are defined under bsnAP object.\"\"\",\n        }, # group\n        \"bsnGlobalDot11Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnGlobalDot11PrivacyOptionImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11AuthenticationResponseTimeOut\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11MultiDomainCapabilityImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11MultiDomainCapabilityEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11CountryIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11LoadBalancing\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11RogueTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPrimaryMwarForAPs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRtpProtocolPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSystemCurrentTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUpdateSystemTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnOperatingTemperatureEnvironment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSensorTemperature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTemperatureAlarmLowLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTemperatureAlarmHighLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnVirtualGatewayAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRFMobilityDomainName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientWatchListFeature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueLocationDiscoveryProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAutoContainFeature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnOverAirProvisionApMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaximumNumberOfConcurrentLogins\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAutoContainRoguesAdvertisingSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAutoContainAdhocNetworks\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAutoContainTrustedClientsOnRogueAps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnValidateRogueClientsAgainstAAA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSystemTimezoneDelta\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSystemTimezoneDeltaMinutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSystemTimezoneDaylightSavings\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAllowAuthorizeApAgainstAAA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApFallbackEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAppleTalkEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPolicyForMisconfiguredAps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnEncryptionPolicyEnforced\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPreamblePolicyEnforced\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11ModePolicyEnforced\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadioTypePolicyEnforced\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnValidateSsidForTrustedAp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAlertIfTrustedApMissing\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApEntryExpirationTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExcessive80211AssocFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExcessive80211AuthFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExcessive8021xAuthFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExcessiveWebAuthFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIPTheftORReuse\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePrecedence\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureFrameType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureQuietTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureConfigType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureMacInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureMacFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignatureRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternOffset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternOffSetStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStandardSignaturePatternRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePrecedence\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureFrameType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureQuietTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureConfigType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureMacInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureMacFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignatureRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternOffset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternOffSetStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCustomSignaturePatternRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureCheckState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRfIdTagStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRfIdTagDataTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRfIdTagAutoTimeoutStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNeighborAuthStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNeighborAuthAlarmThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRFNetworkName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnFastSSIDChangeFeature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnBridgingZeroTouchConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnBridgingSharedSecretKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bNetworkStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bBeaconPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDynamicChannelAssignment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCurrentChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDynamicChannelUpdateInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bInputsForDCA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bChannelUpdateCmdInvoke\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bChannelUpdateCmdStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDynamicTransmitPowerControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDynamicTxPowerControlInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCurrentTxPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bInputsForDTP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bPowerUpdateCmdInvoke\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bPowerUpdateCmdStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate1Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate2Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate5AndHalfMhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate11Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bShortPreamble\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDot11gSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate6Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate9Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate12Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate18Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate24Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate36Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate48Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDataRate54Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bPicoCellMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bFastRoamingMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bFastRoamingVoipMinRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bFastRoamingVoipPercentage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11b80211eMaxBandwidth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDTPCSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bMediumOccupancyLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCFPPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCFPMaxDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCFPollable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bCFPollRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bDTIMPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bMaximumTransmitPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bFirstChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bNumberofChannels\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bRTSThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bShortRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bLongRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bFragmentationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bMaxTransmitMSDULifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bMaxReceiveLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bEDThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bChannelAgilityEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bPBCCOptionImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11bShortPreambleOptionImplemented\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aNetworkStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aLowBandNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aMediumBandNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aHighBandNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aBeaconPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDynamicChannelAssignment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCurrentChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDynamicChannelUpdateInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aInputsForDCA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aChannelUpdateCmdInvoke\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aChannelUpdateCmdStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDynamicTransmitPowerControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCurrentTxPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDynamicTxPowerControlInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aInputsForDTP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aPowerUpdateCmdInvoke\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aPowerUpdateCmdStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate6Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate9Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate12Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate18Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate24Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate36Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate48Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDataRate54Mhz\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aPicoCellMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aFastRoamingMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aFastRoamingVoipMinRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aFastRoamingVoipPercentage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11a80211eMaxBandwidth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDTPCSupport\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aMediumOccupancyLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCFPPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCFPMaxDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCFPollable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aCFPollRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aDTIMPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aMaximumTransmitPowerLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aFirstChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aNumberofChannels\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aRTSThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aShortRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aLongRetryLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aFragmentationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aMaxTransmitMSDULifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aMaxReceiveLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aTIThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11aChannelAgilityEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11hPowerConstraint\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11hChannelSwitchEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11hChannelSwitchMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aGlobalAutomaticGrouping\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace 802.11 standard attributes applied globally. \nThese objects are defined under bsnGlobalDot11 object.\"\"\",\n        }, # group\n        \"bsnRrmGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnRrmDot11aGroupLeaderMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmIsDot11aGroupLeader\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aGroupLastUpdateTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aGlobalGroupInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasDot11aPeerMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasDot11aPeerIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aForeignInterferenceThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aForeignNoiseThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aRFUtilizationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aThroughputThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aMobilesThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aCoverageThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aMobileMinExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aCoverageExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aSignalMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aNoiseMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aLoadMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aCoverageMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aChannelMonitorList\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aSetFactoryDefault\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bGlobalAutomaticGrouping\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bGroupLeaderMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmIsDot11bGroupLeader\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bGroupLastUpdateTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bGlobalGroupInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasDot11bPeerMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasDot11bPeerIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bForeignInterferenceThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bForeignNoiseThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bRFUtilizationThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bThroughputThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bMobilesThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bCoverageThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bMobileMinExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bCoverageExceptionLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bSignalMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bNoiseMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bLoadMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bCoverageMeasurementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bChannelMonitorList\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bSetFactoryDefault\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace Radio Resource Management Configuration \nParameters. These objects are defined under bsnRrm object.\"\"\",\n        }, # group\n        \"bsnAAAGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnRadiusAuthServerIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientServerPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerKeyFormat\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerRFC3576\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSecAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSecEncryption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSecIKEPhase1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSecIKELifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerIPSecDHGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerNetworkUserConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerMgmtUserConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerRetransmitTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerKeyWrapKEKkey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerKeyWrapMACKkey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerKeyWrapFormat\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthServerRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientServerPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerKeyFormat\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSecAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSecEncryption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSecIKEPhase1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSecIKELifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerIPSecDHGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerNetworkUserConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerRetransmitTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccServerRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientRoundTripTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientAccessRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientAccessRetransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientAccessAccepts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientAccessRejects\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientAccessChallenges\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientMalformedAccessResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientBadAuthenticators\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientPendingRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientTimeouts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientUnknownTypes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthClientPacketsDropped\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientRoundTripTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientRetransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientMalformedResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientBadAuthenticators\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientPendingRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientTimeouts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientUnknownTypes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAccClientPacketsDropped\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclApplyMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleSourceIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleSourceIpNetmask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleDestinationIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleDestinationIpNetmask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleStartSourcePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleEndSourcePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleStartDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleEndDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclNewRuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAclRuleRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMacFilterAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMacFilterWlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMacFilterInterfaceName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMacFilterDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMacFilterRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserWlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserRemainingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalNetUserRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalManagementUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalManagementUserPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalManagementUserAccessMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLocalManagementUserRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnBlackListClientMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnBlackListClientDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnBlackListClientRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthKeyWrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiusAuthCacheCredentialsLocally\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAAMacDelimiter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAARadiusCompatibilityMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAARadiusCallStationIdType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAALocalDatabaseSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAACurrentLocalDatabaseSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerAclName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAcceptSelfSignedCertificate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSystemClockTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthCertificateType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthHashKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace Authentication, Authorization, and \nAccounting Attributes. These objects are defined under\nbsnAAA object.\"\"\",\n        }, # group\n        \"bsnTrapsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnDot11StationTrapControlMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPTrapControlMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPProfileTrapControlMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPMacAddrTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNameTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPSlotIdTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPChannelNumberTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageThresholdTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageFailedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageTotalClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientRssi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClientSnr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInterferenceEnergyBeforeChannelUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInterferenceEnergyAfterChannelUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPPortNumberTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPParamUpdateTrapControlMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnConfigSaveTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRADIUSServerTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAuthenticationFailureTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsn80211SecurityTrapControlMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWpsTrapControlEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAuthFailureUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAuthFailureUserType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRemoteIPv4Address\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecErrorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecSPI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRemoteUdpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeAuthMethod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalInitFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalInitNoResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIkeTotalRespFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNotifiesReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSuiteInitFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSuiteRespondFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnInitiatorCookie\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnResponderCookie\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIsakmpInvalidCookies\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecTrapsMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCurrentRadiosCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseRadioCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaxRogueCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationAPIfSlotId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationReasonCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationBlacklistingReasonCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnStationUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPOnWiredNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAdhocMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpReportedByAP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpTrapClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNavDosAttackSourceMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWlanIdTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnClearTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApEncryptionUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApEncryptionRequired\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApRadioPolicyUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNetworkType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNetworkState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackPreced\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackerMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApRegulatoryDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnImpersonatedAPMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApPreambleUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApPreambleRequired\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApRadioPolicyRequired\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGroupDirectoryMemberIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGroupDirectoryMemberMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGroupDirectoryDicoveryType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberCurrentAnchoredClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberTotalAnchoredClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberCurrentExportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberTotalExportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberCurrentImportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberTotalImportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberTotalHandoffErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMemberTotalCommunicationErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanFeature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanMappingSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanMappingInterfaceName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPGroupsVlanMappingRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseKeyTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApFunctionalityDisableReasonCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLicenseKeyFeatureSetTrapVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthorizationFailureCause\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfUpDownCause\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPInvalidRadioType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"locationNotifyContent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureMacInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace Trap Configuration and Trap definition.\nThese objects are defined under bsnTrap.\"\"\",\n        }, # group\n        \"bsnUtilityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnSyslogEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSyslogRemoteAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestSendCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestReceivedCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPingTestRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace General Utilities such as ping, syslog.\nThese objects are defined under bsnUtility.\"\"\",\n        }, # group\n        \"bsnMobilityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnMobilityProtocolPortNum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityDynamicDiscovery\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityStatsReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityGroupMemberMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityGroupMemberIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityGroupMemberGroupName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityGroupMemberRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityAnchorWlanSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityAnchorSwitchIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityAnchorRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCurrentExportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalExportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnCurrentImportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalImportedClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalCommunicationErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalResponsesRetransmitted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffEndRequestsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalStateTransitionsDisallowed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalResourceErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequestsSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRepliesReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffAsLocalReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffAsForeignReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffDeniesReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorRequestsSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorDenyReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorGrantReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorTransferReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequestsIgnored\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalPingPongHandoffRequestsDropped\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequestsDropped\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequestsDenied\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalClientHandoffAsLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalClientHandoffAsForeign\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorRequestsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorRequestsDenied\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorRequestsGranted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalAnchorTransferred\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTotalHandoffRequestsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace Mobility Group Parameters and ststistics.\nThese are objects defined under bsnMobility.\"\"\",\n        }, # group\n        \"bsnIpsecGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnWrasIpsecCACertificate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCACertificateUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCertName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCertificateUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCertificate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCertPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWrasIpsecCertStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects provide the information\nabout Airespace Global IpSec Group. These objects are defined\nunder bsnIpsec.\"\"\",\n        }, # group\n        \"bsnWrasDepGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.10\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"bsnDot11EssWPASecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWPAEncryptionType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWPAAuthKeyMgmtMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWPAAuthPresharedKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssWPAAuthPresharedKeyHex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNWPACompatibilityMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNAllowTKIPClients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNAuthKeyMgmtMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNAuthPresharedKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssRSNAuthPresharedKeyHex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11NumberSupportedPowerLevels\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel4\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel5\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel6\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel7\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11TxPowerLevel8\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDot11CurrentCCAMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestSendPktCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestSendPktLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestReceivedPktCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestClientRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestLocalSNR\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestLocalRSSI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnLinkTestRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects are  derprecated in bsnWireless \nmodule.\"\"\",\n        }, # group\n        \"bsnWrasObsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.11\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"bsnUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserEssIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserAccessMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserInterfaceName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUserRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerConnectionStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnExternalPolicyServerRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAPMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAPInterface\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAPIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAP802Dot1XRequired\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAPMirrorMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnThirdPartyAPRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWatchListClientKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWatchListClientType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWatchListClientRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This collection of objects are  obsoleted in bsnWireless \nmodule.\"\"\",\n        }, # group\n        \"bsnWrasTrap\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.50.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bsnDot11StationDisassociate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11StationDeauthenticate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11StationAuthenticateFail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11StationAssociateFail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11StationBlacklisted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11StationAssociate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPUp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPDown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAssociated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPDisassociated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfUp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIfDown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPLoadProfileFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNoiseProfileFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPInterferenceProfileFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageProfileFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPLoadProfileUpdatedToPass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPNoiseProfileUpdatedToPass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPInterferenceProfileUpdatedToPass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCoverageProfileUpdatedToPass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCurrentTxPowerChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPCurrentChannelChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11aGroupingDone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmDot11bGroupingDone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnConfigSaved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDot11EssDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRADIUSServerNotResponding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAuthenticationFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecEspAuthFailureTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecEspReplayFailureTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecEspInvalidSpiTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecIkeNegFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecSuiteNegFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecInvalidCookieTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPRemoved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueAPDetectedOnWiredNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApHasNoRadioCards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnDuplicateIpAddressReported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPContainedAsARogue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnNetworkStateChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSignatureAttackDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRadioCardTxFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRadioCardTxFailureClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRadioCardRxFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRadioCardRxFailureClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPImpersonationDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPRegulatoryDomainMismatch\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApHasInvalidPreamble\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadiosExceedLicenseCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSensedTemperatureTooHigh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnSensedTemperatureTooLow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTemperatureSensorFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTemperatureSensorClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnPOEControllerFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaxRogueCountExceeded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMaxRogueCountClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApMaxRogueCountExceeded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApMaxRogueCountClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApBigNavDosAttack\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTooManyUnsuccessLoginAttempts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWepKeyDecryptError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnWpaMicErrorCounterActivated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAdhocRogueAutoContained\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRogueApAutoContained\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApHasInvalidEncryption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApHasInvalidRadioPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApHasInvalidSsid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrustedApIsMissing\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPIPAddressFallback\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPFunctionalityDisabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRxMulticastQueueFull\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadarChannelDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRadarChannelCleared\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAPAuthorizationFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"radioCoreDumpTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"invalidRadioTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"countryChangeTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"unsupportedAPTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"heartbeatLossTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"locationNotifyTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This  collection of objects provides all notification \nthat Switch need to generate to the Management System.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"bsnWrasCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"AIRESPACE-WIRELESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14179.2.51.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the SNMP entities that\nimplement the bsnWireless module.\"\"\",\n            \"requires\" : {\n                \"bsnEssGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnApGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnGlobalDot11Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnRrmGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnAAAGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnTrapsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnUtilityGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnMobilityGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n                \"bsnIpsecGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"AIRESPACE-WIRELESS-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/ALCATEL-IND1-PORT-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ALCATEL-IND1-PORT-MIB\n\nFILENAME = \"SNMP/ALCATEL-IND1-PORT-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n\n    \"ALCATEL-IND1-PORT-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Alcatel-Lucent\"\"\",\n        \"contact\" : \n            \"\"\"Please consult with Customer Service to ensure the most appropriate\nversion of this document is used with the products in question:\n\n           Alcatel-Lucent, Enterprise Solutions Division\n          (Formerly Alcatel Internetworking, Incorporated)\n                  26801 West Agoura Road\n               Agoura Hills, CA  91301-5122\n                 United States Of America\n\nTelephone:               North America  +1 800 995 2696\n                        Latin America  +1 877 919 9526\n                        Europe         +31 23 556 0100\n                        Asia           +65 394 7933\n                        All Other      +1 818 878 4507\n\nElectronic Mail:         support@ind.alcatel.com\nWorld Wide Web:          http://alcatel-lucent.com/wps/portal/enterprise\nFile Transfer Protocol:  ftp://ftp.ind.alcatel.com/pub/products/mibs\"\"\",\n        \"description\" :\n            \"\"\"This module describes an authoritative enterprise-specific Simple\nNetwork Management Protocol (SNMP) Management Information Base (MIB):\n\n    This group contains the configuration information data\n               for the Ethernet and Fiber Channel Switching Module.\n\nThe right to make changes in specification and other information\ncontained in this document without prior notice is reserved.\n\nNo liability shall be assumed for any incidental, indirect, special, or\nconsequential damages whatsoever arising from or related to this\ndocument or the information contained herein.\n\nVendors, end-users, and other interested parties are granted\nnon-exclusive license to use this specification in connection with\nmanagement of the products for which it is intended to be used.\n\n            Copyright (C) 1995-2013 Alcatel-Lucent\n                ALL RIGHTS RESERVED WORLDWIDE\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2013-11-22 00:00\",\n                \"description\" :\n                    \"\"\"Add support for Fiber Channel interface statistics\"\"\",\n            },\n            {\n                \"date\" : \"2010-05-13 00:00\",\n                \"description\" :\n                    \"\"\"Fixed the Notifications to use MIB Module OID.0 as Notifications root.\"\"\",\n            },\n            {\n                \"date\" : \"2007-04-03 00:00\",\n                \"description\" :\n                    \"\"\"The latest version of this MIB Module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"alcatelIND1PortMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifInErrors\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifOutErrors\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifEntry\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"\", \"name\" : \"softentIND1Port\"},\n        {\"module\" : \"\", \"name\" : \"alclnkaggAggIndex\"},\n        {\"module\" : \"\", \"name\" : \"VirtualOperChassisId\"},\n    ),\n\n    \"typedefs\" : {\n        \"CableState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"open\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"short\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"openShort\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"crossTalk\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"an enumerated value used to indicate the status of a cable\npair\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"alcatelIND1PortMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"alcatelIND1PortNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0\",\n        }, # node\n        \"alcatelIND1PortMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1\",\n        }, # node\n        \"esmConfTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.1\",\n        }, # node\n        \"esmDrvTrapDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Partitioned port (separated due to errors).\"\"\",\n        }, # scalar\n        \"physicalPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2\",\n        }, # node\n        \"esmConfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of ESM Physical Port instances.\"\"\",\n        }, # table\n        \"esmConfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A ESM Physical Port entry.\"\"\",\n        }, # row\n        \"esmPortSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The physical Slot number for this Ethernet Port.\nSlot number has been added to be used by the private Trap.\"\"\",\n        }, # column\n        \"esmPortIF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The on-board interface number for this Ethernet Port.\nPort Number has been added to be used by the private Trap.\"\"\",\n        }, # column\n        \"esmPortAutoSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"speed100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"speed10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"speedAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"speed1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"speed10000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"speed40000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"speed20000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"speed21000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"speed2000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"speed4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"speed8000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"speed2500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"speed5000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"speed25000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"speed50000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"speed100000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The automatically detected port line speed\nof this ESM port.\"\"\",\n        }, # column\n        \"esmPortAutoDuplexMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fullDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"autoDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The automatically detected port duplex mode\nof this ESM port.\n\nNote: GigaEthernet supports only Full duplex mode.\n      Default value for 10/100 = Half duplex mode.\"\"\",\n        }, # column\n        \"esmPortCfgSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"speed100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"speed10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"speedAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"speed1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"speed10000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"speed40000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"speedMax100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"speedMax1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"speed2000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"speed4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"speed8000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"speedMax4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"speedMax8000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"speed2500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"speed5000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"speedMax2500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"speedMax5000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"speed25000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"speed50000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"speed100000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured port line speed of this ESM port.\"\"\",\n        }, # column\n        \"esmPortCfgDuplexMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fullDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"autoDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured port duplex mode of this ESM port.\nNote: GigaEthernet support only full-duplex.\"\"\",\n        }, # column\n        \"esmPortAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired state of the interface.  The testing(3) state\nindicates that no operational packets can be passed.  When a\nmanaged system initializes, all interfaces start with\nifAdminStatus in the down(2) state.  As a result of either\nexplicit management action or per configuration information\nretained by the managed system, ifAdminStatus is then\nchanged to either the up(1) or testing(3) states (or remains\nin the down(2) state).\"\"\",\n        }, # column\n        \"esmPortLinkUpDownTrapEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether linkUp/linkDown traps should be generated\nfor this interface.\n\n                By default, this object should have the value enable(1) for\ninterfaces which do not operate on 'top' of any other\ninterface (as defined in the ifStackTable), and disable(2)\notherwise.\"\"\",\n        }, # column\n        \"esmPortCfgMaxFrameSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the value of the maximum frame\nsize allow.\n               For 10Mbps the range is upto 1518 bytes.\n       For ports with speed > 10Mbps the value can extend upto 9216 bytes.\"\"\",\n        }, # column\n        \"esmPortAlias\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is an 'alias' name for the interface as\nspecified by a network manager, and provides a non-volatile\n'handle' for the interface.\n\nOn the first instantiation of an interface, the value of\nifAlias associated with that interface is the zero-length\nstring.  As and when a value is written into an instance of\nifAlias through a network management set operation, then the\nagent must retain the supplied value in the ifAlias instance\nassociated with the same interface for as long as that\ninterface remains instantiated, including across all re-\ninitializations/reboots of the network management system,\nincluding those which result in a change of the interface's\nifIndex value.\n\nAn example of the value which a network manager might store\n                in this object for a WAN interface is the (Telco's) circuit\nnumber/identifier of the interface.\n\nSome agents may support write-access only for interfaces\nhaving particular values of ifType.  An agent which supports\nwrite access to this object is required to keep the value in\nnon-volatile storage, but it may limit the length of new\nvalues depending on how much storage is already occupied by\nthe current values for other interfaces.\"\"\",\n        }, # column\n        \"esmPortCfgPause\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledXmit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledXmitAndRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to configure the default\nadministrative PAUSE mode for this interface.\n\nThis object represents the\nadministratively-configured PAUSE mode for this\ninterface.  If auto-negotiation is not enabled\nor is not implemented for the active MAU\nattached to this interface, the value of this\nobject determines the operational PAUSE mode\nof the interface whenever it is operating in\nfull-duplex mode.  In this case, a set to this\nobject will force the interface into the\nspecified mode.\n\nIf auto-negotiation is implemented and enabled\nfor the MAU attached to this interface, the\nPAUSE mode for this interface is determined by\nauto-negotiation, and the value of this object\ndenotes the mode to which the interface will\nautomatically revert if/when auto-negotiation is\nlater disabled. For more information on what\npause values will be autonegotiated based on\nsettings on this object, please refer to the\ntruth table in the users manual.\n\nNote that the value of this object is ignored\nwhen the interface is not operating in\nfull-duplex mode.\"\"\",\n        }, # column\n        \"esmPortCfgAutoNegotiation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Allow the user to enable or disable the port auto negotiation.\"\"\",\n        }, # column\n        \"esmPortCfgCrossover\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mdi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mdix\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notapplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"auto\",\n            \"description\" :\n                \"\"\"Allow the user to configure port crossover.\nThis object is applicable only to copper ports.\nFor fiber ports notapplicable is returned as a status.\"\"\",\n        }, # column\n        \"esmPortCfgHybridActiveType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notapplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"fiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"copper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is only applicable to hybrid ports .\nIt indicates configured active media type.(the operational media\ntype may be different if esmPortCfgHybridMode is configured to be\npreferredFiber or preferredCopper)\nFor non hybrid ports notapplicable is returned as a status.\"\"\",\n        }, # column\n        \"esmPortCfgHybridMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notapplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"preferredCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"forcedCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"preferredFiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"forcedFiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"preferredFiber\",\n            \"description\" :\n                \"\"\"This object is only applicable to hybrid ports.\nThis allows the user the user to configure the media type\nwith which the port should come up.\nThe user can configure the port to come as copper only\nor fiber only or either fiber/copper\n(with preference to one of them).\"\"\",\n        }, # column\n        \"esmPortOperationalHybridType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"fiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"copper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is only applicable to hybrid ports .\nIt indicates  the actual media type that has link up and is or will be\npassing traffic. If link is not present the object will return none(0) value.\"\"\",\n        }, # column\n        \"esmPortBcastRateLimitEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Enable/disable per port broadcast traffic rate limit. When 'enable' value from\nesmPortBcastRateLimit object will be applicable to the ingressing broadcast traffic if\nthe speed is greater than the limit else the default limit for the speed will be\napplied. When it is 'disable' no limit is applied to incoming broadcast traffic which\nis limited by the port speed.\"\"\",\n        }, # column\n        \"esmPortBcastRateLimitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"percentage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"mbps\",\n            \"description\" :\n                \"\"\"The unit applicable to the value in esmPortBcastRateLimit object.\"\"\",\n        }, # column\n        \"esmPortBcastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the maximum broadcast traffic that can flow\nthrough the port. The actual value depends on the port speed\nif the configured values is greater than the current port speed.\nIt is mandatory to set esmPortBcastRateLimitType object along with \n esmPortBcastRateLimit object to set the broadcast rate limit.\"\"\",\n        }, # column\n        \"esmPortMcastRateLimitEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Enable/disable per port multicast traffic rate limit. When 'enable' value from\nesmPortMcastRateLimit object will be applicable to the ingressing multicast traffic if\nthe speed is greater than the limit else the default limit for the speed will be\napplied. When it is 'disable' no limit is applied to incoming multicast traffic which\nis limited by the port speed.\"\"\",\n        }, # column\n        \"esmPortMcastRateLimitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"percentage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"mbps\",\n            \"description\" :\n                \"\"\"The unit applicable to the value in esmPortMcastRateLimit object.\"\"\",\n        }, # column\n        \"esmPortMcastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the maximum multicast traffic that can flow\nthrough the port. The actual value depends on the port speed\nif the configured values is greater than the current port speed.\nIt is mandatory to set esmPortMcastRateLimitType object along with \n esmPortMcastRateLimit object to set the multicast rate limit.\"\"\",\n        }, # column\n        \"esmPortUucastRateLimitEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Enable/disable per port unknown unicast traffic rate limit. When 'enable' value from\nesmPortUucastRateLimit object will be applicable to the ingressing unknown unicast traffic if\nthe speed is greater than the limit else the default limit for the speed will be\napplied. When it is 'disable' no limit is applied to incoming unknown unicast traffic which\nis limited by the port speed.\"\"\",\n        }, # column\n        \"esmPortUucastRateLimitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mbps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"percentage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"mbps\",\n            \"description\" :\n                \"\"\"The unit applicable to the value in esmPortUucastRate object.\"\"\",\n        }, # column\n        \"esmPortUucastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the maximum unknown unicast traffic that can flow\nthrough the port. The actual value depends on the port speed\nif the configured values is greater than the current port speed. \nIt is mandatory to set esmPortUucastRateLimitType object along with \n esmPortUucastRateLimit object to set the unknown unicast rate limit.\"\"\",\n        }, # column\n        \"esmPortIngressRateLimitEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Enable/disable per port ingress traffic rate limit. When 'enable' value from\nesmPortIngressRate object will be applicable to the ingressing traffic (BC, MC, UUC) if\nthe speed is greater than the limit else the default limit for the speed will be\napplied. When it is 'disable' no limit is applied to incoming traffic which\nis limited by the port speed.\"\"\",\n        }, # column\n        \"esmPortIngressRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the maximum ingress traffic that can flow\nthrough the port. The actual value depends on the port speed\nif the configured value is greater than the current port speed.\"\"\",\n        }, # column\n        \"esmPortIngressRateLimitBurst\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of ingress traffic burst size in Mbits.\"\"\",\n        }, # column\n        \"esmPortEPPEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"use for port diagnostics\"\"\",\n        }, # column\n        \"esmPortEEEEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"10Gbase-T Energy Efficent Ethernet port parameter.\"\"\",\n        }, # column\n        \"esmPortIsFiberChannelCapable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"no\",\n            \"description\" :\n                \"\"\"The port can be configured as Fiber Channel interface (yes) or can \nnot be configured as Fiber Channel interface.\"\"\",\n        }, # column\n        \"esmPortBcastThresholdAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"default\",\n            \"description\" :\n                \"\"\"The port can be configured to send trap/shutdown if \nthe threshold limit is crossed for Bcast Frames\"\"\",\n        }, # column\n        \"esmPortMcastThresholdAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"default\",\n            \"description\" :\n                \"\"\"The port can be configured to send trap/shutdown if \nthe threshold limit is crossed for Mcast Frames\"\"\",\n        }, # column\n        \"esmPortUucastThresholdAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"default\",\n            \"description\" :\n                \"\"\"The port can be configured to send trap/shutdown if \nthe threshold limit is crossed Unknown Unicast Frames\"\"\",\n        }, # column\n        \"esmPortMinBcastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of low threshold for bcast.\"\"\",\n        }, # column\n        \"esmPortMinMcastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of low threshold for mcast.\"\"\",\n        }, # column\n        \"esmPortMinUucastRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of low threshold for uucast.\"\"\",\n        }, # column\n        \"esmPortBcastStormState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"storm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"normal\",\n            \"description\" :\n                \"\"\"The state of the port for broadcast Storm Control.\"\"\",\n        }, # column\n        \"esmPortMcastStormState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"storm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"normal\",\n            \"description\" :\n                \"\"\"The state of the port for multi-cast Storm Control.\"\"\",\n        }, # column\n        \"esmPortUucastStormState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"storm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"normal\",\n            \"description\" :\n                \"\"\"The state of the port for uucast Storm Control.\"\"\",\n        }, # column\n        \"esmLinkStateChangeTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time when  the link status changed last.\"\"\",\n        }, # column\n        \"esmLinkStateChangeCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Counter to represent the number of times the link status changed.\"\"\",\n        }, # column\n        \"esmPortIfg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"12\",\n            \"description\" :\n                \"\"\"The value of inter packet gap in bytes.\"\"\",\n        }, # column\n        \"esmPortFecMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"auto\",\n            \"description\" :\n                \"\"\"Allow the user to enable or disable the port fec mode.\nAuto mode will select the appropiate mode based on cable capabilities.\"\"\",\n        }, # column\n        \"esmPortFecOperMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Access operational fec mode.\"\"\",\n        }, # column\n        \"esmPortGbicType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"gbicLh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gbicLx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sfpPlusLr1G10G\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"gbicSx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sfpPlusSr1G10G\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"sfp10GigBaseT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sfpGigBxU\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"sfpGigBxD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"sfpGigBxU20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"sfpGigBxD20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"sfpGigBxU40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"sfpGigBxD40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"isfpGigBxU\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"isfpGigBxD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"gicBx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"baseT1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"baseFx100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"baseX1001000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"baseX101001000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"sfpPlusEr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"sfpPlusZr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"sfpPlusZrDwDm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"sfpPlusZrCwDm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"sfpPlusZrTdm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"sfpPlusLr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"sfpPlusLrm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"sfpPlusSr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"sfpPlusCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"qsfpPlusLr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"qsfpPlusBd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"qsfpPlusSr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"qsfpPlusCr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"qsfpPlusCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"stackingQsfpPlusCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"stackingQsfpPlusSr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"stackingQsfpPlusAoc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"sfpFc248G\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"qsfpPlus4X10GCopper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"na\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"qsfpPlus4X10GSr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"qsfpPlus4X10GLr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"qsfpPlusAoc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"sfp25GBaseSr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"sfp25GBaseLr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"sfp25GBaseCr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"sfp25GBaseCAoc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"sfb50GBaseSr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"sfp25GBaseLr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"sfp25GBaseCr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"sfp100GBaseSr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"sfp100GBaseLr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"sfp100GBaseCr4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"sfp100GBaseCwDm4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"sfp100GBaseAoc4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"sfp4X25GBaseSr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"sfp4X25GBaseLr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"sfp4X25GBaseCr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"sfp4X25GBaseCwDm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"sfp4X25GBaseAoc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"sfp2X50GBaseSr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"sfp2X50GBaseLr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"sfp2X50GBaseCr2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"sfp2X50GBaseCwDm2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"sfp2X50GBaseAoc2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"information about Port Speed connected with SFP\"\"\",\n        }, # column\n        \"alcetherStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Ethernet statistics entries.\"\"\",\n        }, # table\n        \"alcetherStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A collection of statistics kept for a particular\nEthernet interface.  As an example, an instance of the\netherStatsPkts object might be named alcetherStatsPkts.1\"\"\",\n        }, # row\n        \"alcetherClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Used to Clear all Statistics counters.\nBy default, this object contains zero value.\"\"\",\n        }, # column\n        \"alcetherLastClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of SysUpTime at the time of all\nthe statistics counters are cleared.\nBy default, this object contains a zero value.\"\"\",\n        }, # column\n        \"alcetherStatsCRCAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received that\nhad a length (excluding framing bits, but\nincluding FCS octets) of between 64 and 1518\noctets, inclusive, but but had either a bad\nFrame Check Sequence (FCS) with an integral\nnumber of octets (FCS Error) or a bad FCS with\na non-integral number of octets (Alignment Error).\"\"\",\n        }, # column\n        \"alcetherStatsRxUndersizePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received that were\nless than 64 octets long (excluding framing bits,\nbut including FCS octets) and were otherwise well\nformed.\"\"\",\n        }, # column\n        \"alcetherStatsTxUndersizePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets transmitted that were\nless than 64 octets long (excluding framing bits,\nbut including FCS octets) and were otherwise well\nformed.\"\"\",\n        }, # column\n        \"alcetherStatsTxOversizePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets transmitted that were\nlonger than 1518 octets long (excluding framing bits,\nbut including FCS octets) and were otherwise well\nformed.\"\"\",\n        }, # column\n        \"alcetherStatsRxJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received that were\nlonger than 1518 octets (excluding framing bits,\nbut including FCS octets), and had either a bad\nFrame Check Sequence (FCS) with an integral number\nof octets (FCS Error) or a bad FCS with a\nnon-integral number of octets (Alignment Error).\n\nNote that this definition of jabber is different\nthan the definition in IEEE-802.3 section 8.2.1.5\n(10BASE5) and section 10.3.1.4 (10BASE2).  These\ndocuments define jabber as the condition where any\npacket exceeds 20 ms.  The allowed range to detect\njabber is between 20 ms and 150 ms.\"\"\",\n        }, # column\n        \"alcetherStatsRxCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The best estimate of the total number of collisions\non this Ethernet segment (in reception).\nOnly for Ethernet Interfaces.\n\nThe value returned will depend on the location of\nthe RMON probe. Section 8.2.1.3 (10BASE-5) and\nsection 10.3.1.3 (10BASE-2) of IEEE standard 802.3\nstates that a station must detect a collision, in\nthe receive mode, if three or more stations are\ntransmitting simultaneously.  A repeater port must\ndetect a collision when two or more stations are\ntransmitting simultaneously.  Thus a probe placed on\na repeater port could record more collisions than a\nprobe connected to a station on the same segment\nwould.\n\nProbe location plays a much smaller role when\nconsidering 10BASE-T.  14.2.1.4 (10BASE-T) of IEEE\nstandard 802.3 defines a collision as the\nsimultaneous presence of signals on the DO and RD\ncircuits (transmitting and receiving at the same\ntime).  A 10BASE-T station can only detect\ncollisions when it is transmitting.  Thus probes\nplaced on a station and a repeater, should report\nthe same number of collisions.\n\nNote also that an RMON probe inside a repeater\nshould ideally report collisions between the\nrepeater and one or more other hosts (transmit\ncollisions as defined by IEEE 802.3k) plus receiver\ncollisions observed on any coax segments to which\nthe repeater is connected.\"\"\",\n        }, # column\n        \"alcetherStatsTxCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The best estimate of the total number of collisions\non this Ethernet segment (in transmition).\nOnly for Ethernet Interfaces.\n\nThe value returned will depend on the location of\nthe RMON probe. Section 8.2.1.3 (10BASE-5) and\nsection 10.3.1.3 (10BASE-2) of IEEE standard 802.3\nstates that a station must detect a collision, in\nthe receive mode, if three or more stations are\ntransmitting simultaneously.  A repeater port must\ndetect a collision when two or more stations are\ntransmitting simultaneously.  Thus a probe placed on\na repeater port could record more collisions than a\nprobe connected to a station on the same segment\nwould.\n\nProbe location plays a much smaller role when\nconsidering 10BASE-T.  14.2.1.4 (10BASE-T) of IEEE\nstandard 802.3 defines a collision as the\nsimultaneous presence of signals on the DO and RD\ncircuits (transmitting and receiving at the same\ntime).  A 10BASE-T station can only detect\ncollisions when it is transmitting.  Thus probes\nplaced on a station and a repeater, should report\nthe same number of collisions.\n\nNote also that an RMON probe inside a repeater\nshould ideally report collisions between the\nrepeater and one or more other hosts (transmit\ncollisions as defined by IEEE 802.3k) plus receiver\ncollisions observed on any coax segments to which\nthe repeater is connected.\"\"\",\n        }, # column\n        \"alcetherStatsPkts64Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were 64 octets in length\n(excluding framing bits but including FCS octets).\"\"\",\n        }, # column\n        \"alcetherStatsPkts65to127Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n65 and 127 octets in length inclusive\n(excluding framing bits but including FCS octets).\"\"\",\n        }, # column\n        \"alcetherStatsPkts128to255Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n128 and 255 octets in length inclusive\n(excluding framing bits but including FCS octets).\"\"\",\n        }, # column\n        \"alcetherStatsPkts256to511Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n256 and 511 octets in length inclusive\n(excluding framing bits but including FCS octets).\"\"\",\n        }, # column\n        \"alcetherStatsPkts512to1023Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n512 and 1023 octets in length inclusive\n(excluding framing bits but including FCS octets).\"\"\",\n        }, # column\n        \"alcetherStatsPkts1024to1518Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n1024 and 1518 octets in length inclusive\n(excluding framing bits but including FCS octets).\nFor both Ethernet and GigaEthernet.\"\"\",\n        }, # column\n        \"gigaEtherStatsPkts1519to4095Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n1519 and 4095 octets in length inclusive\n(excluding framing bits but including FCS octets).\nOnly for GigaEthernet interfaces\"\"\",\n        }, # column\n        \"gigaEtherStatsPkts4096to9215Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets (including bad\npackets) received that were between\n4096 and 9215 octets in length inclusive\n(excluding framing bits but including FCS octets).\nOnly for GigaEthernet interfaces\"\"\",\n        }, # column\n        \"alcetherStatsPkts1519to2047Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames(including error packets) received\nthat were between 1519 and 2047 bytes in length inclusive\n(excluding framing bits but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsPkts2048to4095Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames(including error packets) received\nthat were between 2048 and 4095 bytes in length inclusive\n(excluding framing bits but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsPkts4096Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames(including error packets) received\nthat were greater than or equal to 4096 bytes in length inclusive\n(excluding framing bits but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsRxGiantPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames that are greater than the specified\nMax length value, with a valid CRC, dropped because too long.\"\"\",\n        }, # column\n        \"alcetherStatsRxDribbleNibblePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which a dribble nibble has been\nreceived and CRC is correct.\"\"\",\n        }, # column\n        \"alcetherStatsRxLongEventPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which the Carrier sense exceeds\n50000 bit times for 10 Mbits/sec or 80000 bit times for\n100 Mbits/sec.\"\"\",\n        }, # column\n        \"alcetherStatsRxVlanTagPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which Type/Length field\ncontains the VLAN protocol identifier (0x8100). \"\"\",\n        }, # column\n        \"alcetherStatsRxControlPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames that were recognized as control frames.\"\"\",\n        }, # column\n        \"alcetherStatsRxLenChkErrPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which the frame length field value\nin the Type/Length field does not match the actual data bytes\n length and is NOT a type field.\"\"\",\n        }, # column\n        \"alcetherStatsRxCodeErrPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which one or more nibbles were\nsignaled as errors during reception of the frame.\"\"\",\n        }, # column\n        \"alcetherStatsRxDvEventPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which a RX_DV event (packet not\ntoo long enough to be valid packet) has been seen before the\n correct frame.\"\"\",\n        }, # column\n        \"alcetherStatsRxPrevPktDropped\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames for which a packet has been dropped\n(because of too small IFG) before the correct frame.\"\"\",\n        }, # column\n        \"alcetherStatsTx64Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames of 64 bytes.\"\"\",\n        }, # column\n        \"alcetherStatsTx65to127Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n65 and 127 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx128to255Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n128 and 255 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx256to511Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n256 and 511 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx512to1023Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n512 and 1023 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx1024to1518Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n1024 and 1518 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx1519to2047Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n1519 and 2047 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx2048to4095Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were between\n2048 and 4095 bytes in length inclusive (excluding framing bits\n but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTx4096Octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were greater than\nor equal to 4096 bytes in length and less than Max frame length\n(excluding framing bits but including FCS bytes).\"\"\",\n        }, # column\n        \"alcetherStatsTxRetryCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of collisions that the frames faced during\ntransmission attempts.\"\"\",\n        }, # column\n        \"alcetherStatsTxVlanTagPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames for which Type/Length field contains the\nVLAN protocol identifier (0x8100).\"\"\",\n        }, # column\n        \"alcetherStatsTxControlPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames that were recognised as control frames.\"\"\",\n        }, # column\n        \"alcetherStatsTxLatePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of late collisions that occured beyond the collision window.\"\"\",\n        }, # column\n        \"alcetherStatsTxTotalBytesOnWire\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of bytes transmitted on wire, including all bytes from collided\nattempts.\"\"\",\n        }, # column\n        \"alcetherStatsTxLenChkErrPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of transmitted frames for which the frame length field value\nin the Type/Length field does not match the actual data bytes length and\n is NOT a Type field.\"\"\",\n        }, # column\n        \"alcetherStatsTxExcDeferPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames that were deferred in excess of 6071 nibble-times\nin 100 Mbps, 24287 bit-times in 10 Mbps mode. These frames are dropped.(This\nstat is only in case of Half duplex and excessive defer bit reset).\"\"\",\n        }, # column\n        \"esmHybridConfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inactive hybrid port instances.\"\"\",\n        }, # table\n        \"esmHybridConfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A ESM Physical Port entry.\"\"\",\n        }, # row\n        \"esmHybridPortCfgSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"speed100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"speed10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"speedAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"speed1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"speed10000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"speedMax100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"speedMax1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured port line speed of this ESM port.\"\"\",\n        }, # column\n        \"esmHybridPortCfgDuplexMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fullDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"autoDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured port duplex mode of this ESM port.\nNote: GigaEthernet support only full-duplex.\"\"\",\n        }, # column\n        \"esmHybridPortCfgAutoNegotiation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Allow the user to enable or disable the port auto negotiation.\"\"\",\n        }, # column\n        \"esmHybridPortCfgCrossover\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mdi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mdix\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"auto\",\n            \"description\" :\n                \"\"\"Allow the user to configure port crossover.\"\"\",\n        }, # column\n        \"esmHybridPortCfgFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledXmit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledXmitAndRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This object is used for flow control of hybrid ports. It is similar to the dot3PauseAdminMode\nobject in dot3PauseTable. It is used to configure pause for fiber media.\"\"\",\n        }, # column\n        \"esmHybridPortCfgInactiveType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"copper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is only applicable to hybrid ports .\nIt indicates the configured inactive media type.\"\"\",\n        }, # column\n        \"ddmInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The ddmInfoTable has an entry for each SFP/XFP in the\nsystem that supports Digital Diagnostic Monitoring (DDM). The table is\nindexed by ifIndex. Each row in this table is dynamically added\nand removed internally by the system based on the presence or absence\nof DDM capable SFP/XFP components.\"\"\",\n        }, # table\n        \"ddmInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each row represents a particular SFP/XFP that supports Digital\nDiagnostic Monitoring.\nEntries are created and deleted internally by the system.\"\"\",\n        }, # row\n        \"ddmTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTemperature indicates the current temperature\nof the SFP/XFP in 1000s of degrees Celsius.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTempLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempLowWarning indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTempLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempLowAlarm indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTempHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempHiWarning indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a hi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTempHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempHiAlarm indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmSupplyVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltage indicates the current supply\nvoltage of the SFP/XFP in 1000s of Volts (V).\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmSupplyVoltageLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageLowWarning indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmSupplyVoltageLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageLowAlarm indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmSupplyVoltageHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageHiWarning indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a hi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmSupplyVoltageHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageHiAlarm indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxBiasCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrent indicates the current Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA).\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxBiasCurrentLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentLowWarning indicates the Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA) that triggers a\nlow-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxBiasCurrentLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentLowAlarm indicates the Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA) that triggers a\nlow-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxBiasCurrentHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentHiWarning indicates the Transmit\nBias Current of the SFP/XFP in 1000s milli-Amperes (mA) that triggers a\nhi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxBiasCurrentHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentHiAlarm indicates the Transmit\nBias Current of the SFP/XFP in 1000s milli-Amperes (mA) that triggers a\nhi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPower indicates the current Output\nPower of the SFP/XFP in 1000s of dBm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxOutputPowerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerLowWarning indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxOutputPowerLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerLowAlarm indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxOutputPowerHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerHiWarning indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmTxOutputPowerHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerHiAlarm indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPower indicates the current Received\nOptical Power of the SFP/XFP in 1000s of dBm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmRxOpticalPowerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerLowWarning indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nlow-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmRxOpticalPowerLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerLowAlarm indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nlow-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmRxOpticalPowerHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerHiWarning indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nhi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmRxOpticalPowerHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.5.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerHiAlarm indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nhi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ddmPortInfoTable has an entry for each SFP/XFP in the\nsystem that supports Digital Diagnostic Monitoring (DDM). The table is\nindexed by ifIndex and port channel. Each row in this table is \ndynamically added\nand removed internally by the system based on the presence or absence\nof DDM capable SFP/XFP components.\"\"\",\n        }, # table\n        \"ddmPortInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"ddmPortChannel\",\n            ],\n            \"description\" :\n                \"\"\"Each row represents a particular SFP/XFP that supports Digital\nDiagnostic Monitoring.\nEntries are created and deleted internally by the system.\"\"\",\n        }, # row\n        \"ddmPortChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"QSFP/SFP channel number\",\n            \"description\" :\n                \"\"\"The channel number of the data that is being read. In the case\nof a QSFP there will be 4 10 gigabyte channels, for SFP/XFP there \n\t will only be one.\"\"\",\n        }, # column\n        \"ddmPortTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTemperature indicates the current temperature\nof the SFP/XFP in 1000s of degrees Celsius.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTempLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempLowWarning indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTempLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempLowAlarm indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTempHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempHiWarning indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a hi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTempHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-150000\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a degree celcius\",\n            \"description\" :\n                \"\"\"The value of ddmTempHiAlarm indicates the temperature\nof the SFP/XFP in 1000s of degrees Celsius that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortSupplyVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltage indicates the current supply\nvoltage of the SFP/XFP in 1000s of Volts (V).\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortSupplyVoltageLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageLowWarning indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortSupplyVoltageLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageLowAlarm indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortSupplyVoltageHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageHiWarning indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a hi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortSupplyVoltageHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a volt\",\n            \"description\" :\n                \"\"\"The value of ddmSupplyVoltageHiAlarm indicates the supply\nvoltage of the SFP/XFP in 1000s of Volts (V) that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxBiasCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrent indicates the current Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA).\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxBiasCurrentLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentLowWarning indicates the Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA) that triggers a\nlow-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxBiasCurrentLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentLowAlarm indicates the Transmit\nBias Current of the SFP/XFP in 1000s of milli-Amperes (mA) that triggers a\nlow-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxBiasCurrentHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentHiWarning indicates the Transmit\nBias Current of the SFP/XFP in 1000s milli-Amperes (mA) that triggers a\nhi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxBiasCurrentHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a milli-Ampere\",\n            \"description\" :\n                \"\"\"The value of ddmTxBiasCurrentHiAlarm indicates the Transmit\nBias Current of the SFP/XFP in 1000s milli-Amperes (mA) that triggers a\nhi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPower indicates the current Output\nPower of the SFP/XFP in 1000s of dBm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxOutputPowerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerLowWarning indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a low-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxOutputPowerLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerLowAlarm indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a low-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxOutputPowerHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerHiWarning indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortTxOutputPowerHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmTxOutputPowerHiAlarm indicates the Output Power\nof the SFP/XFP in 1000s of dBm that triggers a hi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPower indicates the current Received\nOptical Power of the SFP/XFP in 1000s of dBm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortRxOpticalPowerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerLowWarning indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nlow-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortRxOpticalPowerLowAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerLowAlarm indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nlow-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortRxOpticalPowerHiWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerHiWarning indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nhi-warning.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"ddmPortRxOpticalPowerHiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"-200000\"\n                    },\n                    {\n                        \"min\" : \"-40000\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-200000\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"thousandth of a dBm\",\n            \"description\" :\n                \"\"\"The value of ddmRxOpticalPowerHiAlarm indicates the Received\nOptical Power of the SFP/XFP in 1000s of dBm that triggers a\nhi-alarm.\n\t A value of -200000 indicates this object is not applicable.\"\"\",\n        }, # column\n        \"alcfcStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Fiber Channel statistics entries.\"\"\",\n        }, # table\n        \"alcfcStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A collection of statistics kept for a particular\nFiber Channel interface.  As an example, an instance of the\nfcStatsPkts object might be named alcfcStatsPkts.1\"\"\",\n        }, # row\n        \"alcfcClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Used to Clear all Statistics counters.\nBy default, this object contains zero value.\"\"\",\n        }, # column\n        \"alcfcLastClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of SysUpTime at the time of all\nthe statistics counters are cleared.\nBy default, this object contains a zero value.\"\"\",\n        }, # column\n        \"alcfcStatsRxUndersizePkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received that were\nless than 36 octets long (excluding framing bits,\nbut including FCS octets) and were otherwise well\nformed.\"\"\",\n        }, # column\n        \"alcfcStatsTxBBCreditZeros\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of transitions in/out of the buffer-to-buffer\ncredit zero state.\"\"\",\n        }, # column\n        \"alcfcStatsRxBBCreditZeros\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times RX BBCredit drops to zero.\"\"\",\n        }, # column\n        \"alcfcStatsLinkFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of link failures.\"\"\",\n        }, # column\n        \"alcfcStatsLossofSynchs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of loss of word-sync detected.\"\"\",\n        }, # column\n        \"alcfcStatsLossofSignals\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of loss of signals detected.\"\"\",\n        }, # column\n        \"alcfcStatsPrimSeqProtocolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of primitive sequence protocol errors detected.\"\"\",\n        }, # column\n        \"alcfcStatsInvalidTxWords\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of invalid transmission words. This includes \ninvalid ordered sets and invalid data words.\"\"\",\n        }, # column\n        \"alcfcStatsInvalidCRCs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames received with an invalid CRC.\"\"\",\n        }, # column\n        \"alcfcStatsInvalidOrderedSets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of invalid ordered sets received at this port.\"\"\",\n        }, # column\n        \"alcfcStatsFrameTooLongs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames received at this port for which the\nframe length was greater than what was agreed to in\nFLOGI/PLOGI.\"\"\",\n        }, # column\n        \"alcfcStatsDelimiterErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of invalid delimiters received\"\"\",\n        }, # column\n        \"alcfcStatsEncodingDisparityErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of detected running disparity at 10b/8b level.\"\"\",\n        }, # column\n        \"alcfcStatsOtherErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.7.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of errors detected but not counted by any other\nerror counter. This only includes RX frames drops due to zero\nRX BBCredits\"\"\",\n        }, # column\n        \"esmTdrPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table lists the results of cable diagnostics.\"\"\",\n        }, # table\n        \"esmTdrPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry corresponding to each port.\"\"\",\n        }, # row\n        \"esmTdrPortCableState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ALCATEL-IND1-PORT-MIB\", \"name\" : \"CableState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"State of a cable as returned by the TDR test.\"\"\",\n        }, # column\n        \"esmTdrPortValidPairs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of wire pairs in the cable for which the results of this test are valid.\"\"\",\n        }, # column\n        \"esmTdrPortPair1State\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ALCATEL-IND1-PORT-MIB\", \"name\" : \"CableState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state for wire pair-1 of the cable as returned by the TDR test.\"\"\",\n        }, # column\n        \"esmTdrPortPair1Length\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length for wire pair-1 of the cable at which the fault is detected if the pair is faulty, complete length of the cable otherwise.\"\"\",\n        }, # column\n        \"esmTdrPortPair2State\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ALCATEL-IND1-PORT-MIB\", \"name\" : \"CableState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state for wire pair-2 of the cable as returned by the TDR test.\"\"\",\n        }, # column\n        \"esmTdrPortPair2Length\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length for wire pair-2 of the cable at which the fault is detected if the pair is faulty, complete length of the cable otherwise.\"\"\",\n        }, # column\n        \"esmTdrPortPair3State\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ALCATEL-IND1-PORT-MIB\", \"name\" : \"CableState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state for wire pair-3 of the cable as returned by the TDR test.\"\"\",\n        }, # column\n        \"esmTdrPortPair3Length\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length for wire pair-3 of the cable at which the fault is detected if the pair is faulty, complete length of the cable otherwise.\"\"\",\n        }, # column\n        \"esmTdrPortPair4State\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ALCATEL-IND1-PORT-MIB\", \"name\" : \"CableState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state for wire pair-4 of the cable as returned by the TDR test.\"\"\",\n        }, # column\n        \"esmTdrPortPair4Length\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length for wire pair-4 of the cable at which the fault is detected if the pair is faulty, complete length of the cable otherwise.\"\"\",\n        }, # column\n        \"esmTdrPortFuzzLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The error in the estimated length of the cable (as returned by TDR test).\"\"\",\n        }, # column\n        \"esmTdrPortTest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Object used to start a TDR test on the port. When configured as on, it initiates a TDR test on the port. A read operation on this object always returns the value off.\"\"\",\n        }, # column\n        \"esmTdrPortClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Used to Clear TDR stats.\nBy default, this object contains zero value.\"\"\",\n        }, # column\n        \"esmTdrPortResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Used to give the status of BCM API,whether API able to execute TDR test successfully or failed to executethe TDR test.\"\"\",\n        }, # column\n        \"esmPortModeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of interface entries.  This table contains\nConfigured Port mode and operational port mode\"\"\",\n        }, # table\n        \"esmPortModeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular interface with respect to port mode\"\"\",\n        }, # row\n        \"esmConfiguredMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mode40Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mode4X10Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"modeAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mode100Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mode4X25Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"mode2X50Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"modeAuto\",\n            \"description\" :\n                \"\"\"The desired mode of the interface. When a\nmanaged system initializes, all interfaces start with\nifConfiguredMode in the Auto state.  \nUser is not allowed to configure this parameter for subport\"\"\",\n        }, # column\n        \"esmOperationalMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mode40Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mode4X10Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mode100Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mode4X25Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mode2X50Gig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Operational mode of the port \"\"\",\n        }, # column\n        \"startPortModeIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start IfIndex of the port that is part of same Port Mode group\"\"\",\n        }, # column\n        \"endPortModeIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The end IfIndex of the port that is part of same Port Mode group\"\"\",\n        }, # column\n        \"esmPortBeaconTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of interface entries.  This table contains\nBeacon Admin State Beacon Led Color and Beacon Led mode\"\"\",\n        }, # table\n        \"esmPortBeaconEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular interface with respect to Beacon\"\"\",\n        }, # row\n        \"esmBeaconAdminState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"The beacon admin state of the interface. When a\nmanaged system initializes, all interfaces start with\nesmBeaconAdminState in disable state\"\"\",\n        }, # column\n        \"esmBeaconLedColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ledOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ledBlue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ledGreen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ledAqua\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ledRed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ledMagenta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ledYellow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ledWhite\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"ledMagenta\",\n            \"description\" :\n                \"\"\" Beacon Led Color of the port \"\"\",\n        }, # column\n        \"esmBeaconLedMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ledModeSolid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ledModeActivity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"ledModeActivity\",\n            \"description\" :\n                \"\"\" Beacon Led Mode of the port \"\"\",\n        }, # column\n        \"esmBeaconRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row status to control creation/deletion of the Beacon\"\"\",\n        }, # column\n        \"ddmConfiguration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.4\",\n        }, # node\n        \"ddmConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This object enables/disables DDM software feature in the system.\"\"\",\n        }, # scalar\n        \"ddmTrapConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This objects enables/disables traps for DDM warning/alarm threshold violations.\"\"\",\n        }, # scalar\n        \"ddmNotificationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"clearViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This object defines the trap type for monitored DDM parameters.\"\"\",\n        }, # scalar\n        \"portViolations\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5\",\n        }, # node\n        \"portViolationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the port Violations per port.\"\"\",\n        }, # table\n        \"portViolationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portViolationIfIndex\",\n                \"portViolationSource\",\n                \"portViolationReason\",\n            ],\n            \"description\" :\n                \"\"\"Port Violation Entry. The entries in this table are indexed\nby 3 units,\n1. ifIndex of the port for which the violation is set\n2. source of the violation, the feature or module\n3. reason for the violation (sub reason under each source).\"\"\",\n        }, # row\n        \"portViolationIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IfIndex of the port that has a violation.\"\"\",\n        }, # column\n        \"portViolationSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ag\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"qos\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"netsec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"udld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"nisup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"oam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"lm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"lbd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"spb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"storm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"stormuucast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"lldp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Indicates the source of the port violation.\nThe source is the feature or module that has\ncaused the violation. The list is given below\n1. Initiated by Access Guardian\n2. Initiated by QOS Policy\n3. Initiated by Net Sec\n4. Initiated by UDLD\n5. Initiated by NI supervison (Fabric Stability).\n6. initiated by OAM\n8. initiated by LFP\n9. initiated by Link Monitor\n10. initiated by LBD\n11. initiated by SPB\n12. initiated by ESM\n13. initiated by ESM \n14. initiated by LLDP\nWhen there is no value the value of this will be 0\"\"\",\n        }, # column\n        \"portViolationReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pvSLLpsShutDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pvSLLpsRestrict\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pvQosPolicy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pvQosSpoofed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"pvQosBpdu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"pvQosBgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"pvQosOspf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"pvQosRip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"pvQosVrrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"pvQosDhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"pvQosPim\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"pvQosIsis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"pvQosDnsReply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"pvUdld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"pvOamRfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"pvAgLpsDiscard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"pvLfpShutDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"pvLmThreshold\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"pvLbd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"pvQosDvmrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"pvSpbRfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"pvEsmStorm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"pvEsmStormUucast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"pvLldpShutDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"pvRemoteLbd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Reason for the port violation. This will be application\nspecific. The Reason indicate the violation for the 1st Violation\nthat happened on this port.\"\"\",\n        }, # column\n        \"portViolationAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portAdminDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"portTimerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"portTimerAdminDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The action determines on violation, what action will\ntaken. Either the port would be shutdown or Admin Down\nor wait for the timer to expire and the timerAction\nwill determine what needs to be done.  \"\"\",\n        }, # column\n        \"portViolationTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If any timer is associated with the violation\nThis is Zero if no timer is associated.\"\"\",\n        }, # column\n        \"portViolationTimerAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portNoTimerAction\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"portDownAfterTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portUpAfterTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Timer related action.\nIf set to portDownAfterTimer, no operation will be performed on\nthe port and the port will be shutdown after timer expiry.\n\nIf set to portUpAfterTimer the port will be shutdown immediately\nand after the timer expiry the port will brought up..\"\"\",\n        }, # column\n        \"portViolationClearPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"set\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this MIB object is set all violation on the\ngiven port will be cleared. The Indices portViolationSource and\nportViolationReason should be set to 0\"\"\",\n        }, # column\n        \"portViolationCfgRecoveryMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum attempts for auto-recovery as configured for the ifindex in alaPvrRecoveryMax. \nValue 0 means auto recovery is disabled for this port.\nValue -1 means auto recovery will retry infinitely.\"\"\",\n        }, # column\n        \"portViolationCfgRetryTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The time (in seconds) between auto-recovery attempts as configured for the ifindex in alaPvrRetryTime.\"\"\",\n        }, # column\n        \"portViolationRetryRemain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of remaining auto-recovery attempts.\nValue -1 means there are infinite retries remaining.\"\"\",\n        }, # column\n        \"alaLinkMonConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Link Monitoring Configuration Parameters\"\"\",\n        }, # table\n        \"alaLinkMonConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A collection of Link Monitoring configurations kept for a                particular\nEthernet interface.\"\"\",\n        }, # row\n        \"alaLinkMonStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Allows the user to enable or disable Link Monitoring on                the port.\"\"\",\n        }, # column\n        \"alaLinkMonTimeWindow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"Indicates the number of seconds the Link will be                       monitored for a port.\"\"\",\n        }, # column\n        \"alaLinkMonLinkFlapThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"Indicaes the number of link flaps allowed for the                      specified port during the time window before the port is                shutdown.\"\"\",\n        }, # column\n        \"alaLinkMonLinkErrorThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"Indicates the number of link errors allowed on Rx for the             specified port during the time window before the port is                shutdown. The errors are the MAC errors that include CRC,               lost frames, error frames, alignment frames.\"\"\",\n        }, # column\n        \"alaLinkMonWaitToRestoreTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Indicates the number of seconds after which the link up                   event is notified to other applications. The timer is started whenever a Link Up is detected on a                   port being monitored.\"\"\",\n        }, # column\n        \"alaLinkMonWaitToShutdownTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"300000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"300000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Indicates the number of milli seconds after which the link down                   event is notified to other applications. The timer is started whenever a Link down is detected on a                   port being monitored.\"\"\",\n        }, # column\n        \"alaLinkMonStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Link Monitoring Statistics\"\"\",\n        }, # table\n        \"alaLinkMonStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A collection of Link Monitoring statistics for a                        particular Ethernet interface.\"\"\",\n        }, # row\n        \"alaLinkMonStatsClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"default\",\n            \"description\" :\n                \"\"\"Used to Clear all Statistics counters.\nThe value reset (1) indicates that Link Monitoring shuold all           statistic counters related to the particular port.\nBy default, this object contains zero value.\"\"\",\n        }, # column\n        \"alaLinkMonStatsPortState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the status of the port.\nup(1) means the port is physically up,\ndown(2) means the port is physically down, \nshutdown(3) means the interface is shutdown because of                      excessive link flaps or link errors.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentLinkFlaps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of Link flaps in the current time                 window.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentErrorFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of error frames in the current time                  window.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentCRCErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of CRC errors in the current time                   window.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentLostFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of Rx Lost frames in the current                   time window.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of Rx alignment frames in the                     current time window.\"\"\",\n        }, # column\n        \"alaLinkMonStatsCurrentLinkErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the sum of all the MAC Errors within the                    current time window.\ni.e., the sum of alaLinkMonStatsCurrentErrorFrames,                 alaLinkMonStatsCurrentCRCErrors,\nalaLinkMonCurrentLosFrames,                                  alaLinkMonStatsCurrentAlignErrors.\"\"\",\n        }, # column\n        \"alaLinkMonStatsTotalLinkFlaps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total number of link flaps across all the                 time windows.\"\"\",\n        }, # column\n        \"alaLinkMonStatsTotalLinkErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total number of link errors across all the                   time windows.\"\"\",\n        }, # column\n        \"alaLFPGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Link Fault Propagation Grooups and their status\"\"\",\n        }, # table\n        \"alaLFPGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alaLFPGroupId\",\n            ],\n            \"description\" :\n                \"\"\"The list of Link Fault Propagation group id and status for each group\"\"\",\n        }, # row\n        \"alaLFPGroupId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Indicates the unique group id for Link Fault Propagation (LFP).\"\"\",\n        }, # column\n        \"alaLFPGroupAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Indicates the admin status of the group. disable(2) means link fault propagation,\nis disbaled. enable(1) means link fault propagation is enabled\"\"\",\n        }, # column\n        \"alaLFPGroupOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the operational status of the group. down(2) means all the source ports are down,\nup(1) means atleast one source port in the group is up.\"\"\",\n        }, # column\n        \"alaLFPGroupWaitToShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"0 - Disable wait to shutdown timer\n5 - 300 - after expiry of this timer all destination ports will be shutdown\"\"\",\n        }, # column\n        \"alaLFPGroupRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status for initiating a MIB retrieval request.\"\"\",\n        }, # column\n        \"alaLFPConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Link Fault Propagation port and port type of each LFP group\"\"\",\n        }, # table\n        \"alaLFPConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.5.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alaLFPGroupId\",\n                \"alaLFPConfigPort\",\n            ],\n            \"description\" :\n                \"\"\"A list of Link Fault Propagation port and port type of each LFP group\"\"\",\n        }, # row\n        \"alaLFPConfigPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Indicates ifindex of source/destination port for a LFP Group.\"\"\",\n        }, # column\n        \"alaLFPConfigPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"destination\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"source\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the type of port, (1) means the port is destination port and\n(2) means the port is a destination port for a LFP Group.\"\"\",\n        }, # column\n        \"alaLFPConfigRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row Status for initiating a MIB retrieval request.\"\"\",\n        }, # column\n        \"alaPvrGlobalConfigObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.6\",\n        }, # node\n        \"alaPvrGlobalRecoveryMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"10\",\n            \"description\" :\n                \"\"\"Auto violation recovery maximum attempts.\nValue 0 means auto recovery is disabled for any ports using this global value.\nValue -1 means auto recovery will retry infinitely for any ports using this global value.\"\"\",\n        }, # scalar\n        \"alaPvrGlobalRetryTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time (in seconds) between auto violation recovery attempts for any ports using this global value.\"\"\",\n        }, # scalar\n        \"alaPvrGlobalTrapEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Auto violation recovery global trap configuration\"\"\",\n        }, # scalar\n        \"alaPvrConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of auto violation recovery configuration parameters\"\"\",\n        }, # table\n        \"alaPvrConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Auto violation recovery configuration parameters\"\"\",\n        }, # row\n        \"alaPvrRecoveryMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-2\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-2\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-2\",\n            \"description\" :\n                \"\"\"Per port maximum auto violation recovery maximum attempts.\nValue -2 means use value from alaPvrGlobalRecoveryMax \nValue -1 means retry infinitely.\nValue 0 means disable this port.\nValues 1 to 50 mean 1 to 50 auto violation recovery attempts.\"\"\",\n        }, # column\n        \"alaPvrRetryTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-2\",\n                        \"max\" : \"-2\"\n                    },\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-2\",\n                        \"max\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-2\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Per port time (in seconds) between auto violation recovery attempts.\nValue -2 means use value from alaPvrGlobalRetryTime.\"\"\",\n        }, # column\n        \"alaPortViolationTrapObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.8\",\n        }, # node\n        \"portViolationRecoveryReason\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.5.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clearViolationCmd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"recoveryTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"adminUpDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"nativeRecoveryTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The reason for the recovery from port violation. It can be \nnone (1): none.\nclearViolationCmd (2): Indicates that the port is recovered from \n    clear violation command.\nrecoveryTimer (3): Indicates that the port is recovered by \n    Recovery Timer mechanism.\nadminUpDown (4): Indicates that the port is recovered from\n    admin Up/Down.\nnativeRecoveryTimer (5): Indicates that the port is recovered \n    from the feature that shutdown the interface.\"\"\",\n        }, # scalar\n        \"csmConfTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.6\",\n        }, # node\n        \"alaDyingGaspChassisId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This object specifies the chassis id of the chassis whose NI is going down.\"\"\",\n        }, # scalar\n        \"alaDyingGaspPowerSupplyType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"saps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This object specifies the type of the power supply.\"\"\",\n        }, # scalar\n        \"alaDyingGaspTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This object specifies the time of power failure.\"\"\",\n        }, # scalar\n        \"interfaceCounters\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7\",\n        }, # node\n        \"interfaceStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Expansion for ifEntry.\"\"\",\n        }, # table\n        \"interfaceStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"IF-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"ifEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry of interfaceStatsTable\"\"\",\n        }, # row\n        \"inBitsPerSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Bits Received per second\"\"\",\n        }, # column\n        \"outBitsPerSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Bits Transmitted per second\"\"\",\n        }, # column\n        \"ifInPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Pause Frames Received per second\"\"\",\n        }, # column\n        \"ifOutPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Pause Frames Transmitted per second\"\"\",\n        }, # column\n        \"ifInPktsPerSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Packet Received per second\"\"\",\n        }, # column\n        \"ifOutPktsPerSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average number of Packets Transmitted per second\"\"\",\n        }, # column\n        \"esmStormTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.8\",\n        }, # node\n        \"esmStormViolationThresholdNotificationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"clearViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This type defines the trap genrated by storm control feature for high or low threshold.\"\"\",\n        }, # scalar\n        \"esmStormViolationThresholdTrafficType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"multicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uunicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"This type defines the traffic for which the trap genrated by storm control feature for high or low threshold.\"\"\",\n        }, # scalar\n        \"linkAggPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.9\",\n        }, # node\n        \"alcLagStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Link Aggregation statistics entries.\"\"\",\n        }, # table\n        \"alcLagStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alclnkaggAggIndex\",\n            ],\n            \"description\" :\n                \"\"\"A collection of statistics kept for a particular\nLink Aggregation interface. alclnkaggAggIndex is defined\nin alclnkaggAggTable; it is of SYNTAX InterfaceIndex\n(aka ifIndex) starting at value 40000001 for link agg 1.\nIndex values received outside of the range for link aggregation\ninterfaces will return an error.\"\"\",\n        }, # row\n        \"alcLagClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Used to Clear all Link Aggregation Statistics counters. New stats collection starts immediately.\nNo meaningful read on this object.\"\"\",\n        }, # column\n        \"alaPtpConfiguration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10\",\n        }, # node\n        \"alaPtpConfigAdminStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This object enables/disables PTP software feature in the system.\"\"\",\n        }, # scalar\n        \"alaPtpConfigPriority\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"7\",\n            \"description\" :\n                \"\"\"This object use for configure PTP priority.\"\"\",\n        }, # scalar\n        \"alaPtpConfigMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object denotes the current PTP mode.\"\"\",\n        }, # scalar\n        \"alaPtpPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table manages PTP port's admin-state.\"\"\",\n        }, # table\n        \"alaPtpPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular interface with respect to ptp.\"\"\",\n        }, # row\n        \"alaPtpPortAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"this object enables/disables PTP port's admin-state.\"\"\",\n        }, # column\n        \"alaPtpLoopBackPort1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort4\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort5\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort6\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort7\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alaPtpLoopBackPort8\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.1.10.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contain PTP loopback portlist interface index.\"\"\",\n        }, # scalar\n        \"alcatelIND1PortMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2\",\n        }, # node\n        \"alcatelIND1PortMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.1\",\n        }, # node\n        \"alcatelIND1PortMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"esmDrvTrapDropsLink\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"esmPortSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"esmDrvTrapDrops\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When the Ethernet code drops the link because of\nexcessive errors, a Trap is sent.\"\"\",\n        }, # notification\n        \"ddmTemperatureThresholdViolated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if an SFP/XFP/SFP+ temperature has crossed any\nthreshold or reverted from previous threshold violation for a port represented by ifIndex.\nIt also provides the current realtime value of SFP/XFP/SFP+ temperature.\"\"\",\n        }, # notification\n        \"ddmVoltageThresholdViolated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if an SFP/XFP/SFP+ supply voltage has crossed any\nthreshold or reverted from previous threshold violation for a port represented by ifIndex.\nIt also provides the current realtime value of SFP/XFP/SFP+ supply voltage.\"\"\",\n        }, # notification\n        \"ddmCurrentThresholdViolated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if an SFP/XFP/SFP+ Tx bias current has crossed any\nthreshold or reverted from previous threshold violation for a port represented by ifIndex.\nIt also provides the current realtime value of SFP/XFP/SFP+ Tx bias current.\"\"\",\n        }, # notification\n        \"ddmTxPowerThresholdViolated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if an SFP/XFP/SFP+ Tx output power has crossed any\nthreshold or reverted from previous threshold violation for a port represented by ifIndex.\nIt also provides the current realtime value of SFP/XFP/SFP+ Tx output power.\"\"\",\n        }, # notification\n        \"ddmRxPowerThresholdViolated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if an SFP/XFP/SFP+ Rx optical power has crossed any\nthreshold or reverted from previous threshold violation for a port represented by ifIndex.\nIt also provides the current realtime value of SFP/XFP/SFP+ Rx optical power.\"\"\",\n        }, # notification\n        \"portViolationTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"portViolationSource\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Trap will be generated when a port violation occurs. The port\nviolation trap will indicate the source of the violation and the\nreason for the violation.\"\"\",\n        }, # notification\n        \"portViolationNotificationTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"portViolationRecoveryReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Trap will be generated when a port violation is cleared. This trap \nwill indicate the reason for the recovery from violation.\"\"\",\n        }, # notification\n        \"alaDyingGaspTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alaDyingGaspChassisId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspPowerSupplyType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Dying Gasp trap.\"\"\",\n        }, # notification\n        \"esmStormThresholdViolationStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"esmStormViolationThresholdNotificationType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmStormViolationThresholdTrafficType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This object notifies management station if User-Port ports gets the ingress traffic inflow\nabove the configured value.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"esmConfMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmPortCfgSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgDuplexMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgMaxFrameSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgAutoNegotiation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgCrossover\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgPause\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortBcastRateLimitEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortBcastRateLimitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortBcastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMcastRateLimitEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMcastRateLimitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMcastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortUucastRateLimitEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortUucastRateLimitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortUucastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIngressRateLimitEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIngressRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIngressRateLimitBurst\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortEPPEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortEEEEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortBcastThresholdAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMcastThresholdAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortUucastThresholdAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMinBcastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMinMcastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMinUucastRateLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortBcastStormState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortMcastStormState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortUucastStormState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmLinkStateChangeTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmLinkStateChangeCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIfg\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortFecMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortFecOperMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortGbicType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to support the management of global\nconfiguration parameters of the Ethernet ports.\"\"\",\n        }, # group\n        \"esmDetectedConfMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmPortAutoSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortAutoDuplexMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to support the Detected\nconfiguration parameters of the Ethernet ports.\"\"\",\n        }, # group\n        \"alcEtherStatsMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alcetherClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherLastClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsCRCAlignErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxUndersizePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxUndersizePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxOversizePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxJabbers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts64Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts65to127Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts128to255Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts256to511Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts512to1023Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts1024to1518Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"gigaEtherStatsPkts1519to4095Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"gigaEtherStatsPkts4096to9215Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts1519to2047Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts2048to4095Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsPkts4096Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxGiantPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxDribbleNibblePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxLongEventPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxVlanTagPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxControlPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxLenChkErrPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxCodeErrPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxDvEventPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsRxPrevPktDropped\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx64Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx65to127Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx128to255Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx256to511Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx512to1023Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx1024to1518Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx1519to2047Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx2048to4095Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTx4096Octets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxRetryCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxVlanTagPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxControlPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxLatePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxTotalBytesOnWire\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxLenChkErrPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcetherStatsTxExcDeferPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to provide all the statistics related\nto the Ethernet and GigaEthernert ports.\"\"\",\n        }, # group\n        \"alcPortNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmDrvTrapDropsLink\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationNotificationTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmStormThresholdViolationStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The Port MIB Notification Group.\"\"\",\n        }, # group\n        \"ddmInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ddmTemperature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTempLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTempLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTempHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTempHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltageLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltageLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltageHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmSupplyVoltageHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrentLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrentLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrentHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxBiasCurrentHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPowerLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPowerLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPowerHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxOutputPowerHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPowerLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPowerLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPowerHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxOpticalPowerHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to provide digital diagnostics information\nrelated to SFPs, XFPs, and SFP+s.\"\"\",\n        }, # group\n        \"ddmConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ddmConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTrapConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmNotificationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to allow configuration of DDM and DDM traps.\"\"\",\n        }, # group\n        \"ddmNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ddmTemperatureThresholdViolated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmVoltageThresholdViolated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmCurrentThresholdViolated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmTxPowerThresholdViolated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmRxPowerThresholdViolated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications used to indicate DDM threshold violations.\"\"\",\n        }, # group\n        \"esmConfTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmDrvTrapDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspChassisId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspPowerSupplyType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmStormViolationThresholdNotificationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmStormViolationThresholdTrafficType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Partitioned port (separated due to errors).\"\"\",\n        }, # group\n        \"esmHybridConfEntryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmHybridPortCfgSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridPortCfgDuplexMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridPortCfgAutoNegotiation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridPortCfgCrossover\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridPortCfgFlow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridPortCfgInactiveType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A list of inactive hybrid port instances.\"\"\",\n        }, # group\n        \"esmConfEntryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmPortAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortAlias\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgHybridActiveType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortCfgHybridMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortIF\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortLinkUpDownTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortOperationalHybridType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortSlot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A list of ESM Physical Port instances.\"\"\",\n        }, # group\n        \"portViolationEntryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationTimerAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationClearPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationCfgRecoveryMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationCfgRetryTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationRetryRemain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This table contains the port Violations per port.\"\"\",\n        }, # group\n        \"ddmPortInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ddmPortTemperature\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTempLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTempLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTempHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTempHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortSupplyVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortSupplyVoltageLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortSupplyVoltageLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortSupplyVoltageHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortSupplyVoltageHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxBiasCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxBiasCurrentLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxBiasCurrentLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxBiasCurrentHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxBiasCurrentHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxOutputPowerLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxOutputPowerLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxOutputPowerHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortTxOutputPowerHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortRxOpticalPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortRxOpticalPowerLowWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortRxOpticalPowerLowAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortRxOpticalPowerHiWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortRxOpticalPowerHiAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to provide digital diagnostics information\nrelated to SFPs, XFPs, and SFP+s.\"\"\",\n        }, # group\n        \"alaLinkMonConfigMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaLinkMonStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonTimeWindow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonLinkFlapThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonLinkErrorThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonWaitToRestoreTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonWaitToShutdownTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to support the Link Monitoring Configurations on the ports.\"\"\",\n        }, # group\n        \"alaLinkMonStatsMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaLinkMonStatsClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsPortState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentLinkFlaps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentErrorFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentCRCErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentLostFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentAlignErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsCurrentLinkErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsTotalLinkFlaps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonStatsTotalLinkErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to provide all the statistics related\nto the Link Monitoring on the ports.\"\"\",\n        }, # group\n        \"alaLFPGroupMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaLFPGroupId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPGroupAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPGroupOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPGroupWaitToShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPGroupRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to configure Link Fault Propagation Group,\nWait to shutdown timer and admin staus of group.\"\"\",\n        }, # group\n        \"alaLFPConfigMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.17\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaLFPConfigPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPConfigPortType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPConfigRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to configure a port and port type for a Link Fault Propagation Group.\"\"\",\n        }, # group\n        \"csmConfTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaDyingGaspChassisId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspPowerSupplyType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaDyingGaspTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for chassis supervision traps\"\"\",\n        }, # group\n        \"esmTdrPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmTdrPortCableState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortValidPairs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair1State\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair1Length\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair2State\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair2Length\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair3State\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair3Length\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair4State\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortPair4Length\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortFuzzLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortTest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to provide TDR information\"\"\",\n        }, # group\n        \"alcfcStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alcfcClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcLastClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsDelimiterErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsEncodingDisparityErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsInvalidCRCs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsInvalidOrderedSets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsInvalidTxWords\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsLinkFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsLossofSignals\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsRxUndersizePkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsTxBBCreditZeros\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsLossofSynchs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsOtherErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsPrimSeqProtocolErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsRxBBCreditZeros\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for chassis supervision traps\"\"\",\n        }, # group\n        \"esmPortFiberstatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmPortIsFiberChannelCapable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for chassis supervision traps\"\"\",\n        }, # group\n        \"alaPvrGlobalConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.22\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaPvrGlobalRecoveryMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPvrGlobalRetryTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPvrGlobalTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of global pvr objects\"\"\",\n        }, # group\n        \"esmPortModeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmConfiguredMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmOperationalMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"startPortModeIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"endPortModeIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for port splitter mode\"\"\",\n        }, # group\n        \"esmPortBeaconGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"esmBeaconAdminState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmBeaconLedColor\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmBeaconLedMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmBeaconRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for port Beacon \"\"\",\n        }, # group\n        \"alaPvrConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.25\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaPvrRecoveryMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPvrRetryTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of pvr objects\"\"\",\n        }, # group\n        \"interfaceStatsMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.26\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"inBitsPerSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"outBitsPerSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ifInPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ifOutPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ifInPktsPerSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ifOutPktsPerSec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to display the interface counters details of the ports\"\"\",\n        }, # group\n        \"alaPortViolationTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.27\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portViolationRecoveryReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of global pvr objects\"\"\",\n        }, # group\n        \"alcLagStatsMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.28\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alcLagClearStats\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of link aggregation objects\"\"\",\n        }, # group\n        \"alaPtpConfigurationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.29\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaPtpConfigAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpConfigPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpConfigMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort4\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort5\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort6\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort7\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpLoopBackPort8\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to allow configuration of PTP.\"\"\",\n        }, # group\n        \"alaPtpPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.2.30\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alaPtpPortAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to allow configuration of PTP.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"esmConfPortCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the configuration of Ethernet\nports.\"\"\",\n            \"requires\" : {\n                \"esmConfMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmDetectedConfMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcPortNotificationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmConfTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmHybridConfEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmConfEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"csmConfTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmTdrPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"portViolationEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"ddmPortInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLinkMonConfigMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPGroupMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPvrGlobalConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPvrConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"interfaceStatsMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPortViolationTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaPtpPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"alcEtherStatsCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the Statistics of the Ethernet\nports.\"\"\",\n            \"requires\" : {\n                \"alaLinkMonStatsMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alaLFPConfigMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcEtherStatsMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"alcfcStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n                \"esmPortFiberstatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"alcLagStatsCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ALCATEL-IND1-PORT-MIB\",\n            \"oid\" : \".1.3.6.1.4.1.6486.801.1.2.1.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the Statistics of the Link Aggregation\nports.\"\"\",\n            \"requires\" : {\n                \"alcLagStatsMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ALCATEL-IND1-PORT-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/ARISTA-VRF-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ARISTA-SMI-MIB\n\nFILENAME = \"ARISTA-SMI-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"ARISTA-SMI-MIB\",\n\n    \"ARISTA-SMI-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Arista Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Arista Networks, Inc.\n\nPostal: 5453 Great America Parkway\n        Santa Clara, CA 95054\n\nTel: +1 408 547-5500\n\nE-mail: snmp@arista.com\"\"\",\n        \"description\" :\n            \"\"\"The Structure of Management Information for the\nArista Networks enterprise.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2014-08-15 00:00\",\n                \"description\" :\n                    \"\"\"Updated postal and e-mail addresses\"\"\",\n            },\n            {\n                \"date\" : \"2011-03-31 13:00\",\n                \"description\" :\n                    \"\"\"Updated postal address and telephone\"\"\",\n            },\n            {\n                \"date\" : \"2008-10-27 18:30\",\n                \"description\" :\n                    \"\"\"Initial version.\"\"\",\n            },\n        ),\n        \"identity node\" : \"arista\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n    ),\n\n    \"nodes\" : {\n        \"arista\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-SMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065\",\n            \"status\" : \"current\",\n        }, # node\n        \"aristaProducts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-SMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"aristaProducts is the root object identifier from\nwhich sysObjectID values are assigned.  Values are\ndefined in ARISTA-PRODUCTS-MIB.\"\"\",\n        }, # node\n        \"aristaModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-SMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"aristaModules provides a root object identifier\nfrom which MODULE-IDENTITY values may be assigned.\"\"\",\n        }, # node\n        \"aristaMibs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-SMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"aristaMibs provides a root object identifier\nfor management-related MIBs.\"\"\",\n        }, # node\n        \"aristaExperiment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-SMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"aristaExperiment provides a root object identifier\nfor experimental MIBs.  The structure of information\nfor these MIBs can not be guaranteed between releases.\"\"\",\n        }, # node\n    }, # nodes\n\n}\n# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ARISTA-VRF-MIB\n\nFILENAME = \"ARISTA-VRF-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"ARISTA-VRF-MIB\",\n\n    \"ARISTA-VRF-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Arista Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Arista Networks, Inc.\n\nPostal: 5453 Great America Parkway\n        Santa Clara, CA 95054\n\nTel: +1 408 547-5500\n\nE-mail: snmp@arista.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB contains information related to Virtual \nRouting and Forwarding (VRF).\n\nVRF is a mechanism by which a single device can provide\nindependent routing instances. This allows customers to \nvirtually isolate network traffic, and also use overlapping\nIP addresses.\n\nLayer3 or routed interfaces in the system will belong to\none VRF at a time. The datapath forwarding logic uses the\nVRF membership of the input interface to determine a\nspecific forwarding table to use for routing the traffic.\n\nVRF can also be used to isolate management traffic from\nthe rest of the data plane traffic.\n\nThis MIB module provides the following pieces of\ninformation:\n    * A table of all VRFs configured in the system\n    * A table that contains the VRF membership information\n    for all routed interfaces in the system by sparsely\n    augmenting the ifTable.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2015-01-11 00:00\",\n                \"description\" :\n                    \"\"\"Initial revision of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"aristaVrfMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"ARISTA-SMI-MIB\", \"name\" : \"aristaMibs\"},\n    ),\n\n    \"typedefs\" : {\n        \"VrfName\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            \"format\" : \"100t\",\n            \"description\" :\n                \"\"\"A human-readable identifier assigned to every VRF. The\nidentifier is unique across all VRFs in the system.\"\"\",\n        },\n        \"VrfRouteDistinguisher\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"256\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"256\"\n            },\n            \"format\" : \"256a\",\n            \"description\" :\n                \"\"\"A route distinguisher as defined in [RFC4364], in the form\n'<admin>:<local>', where <admin> is the administrator ID\n(e.g., an AS number) and <local> is the locally assigned\nnumber.\"\"\",\n            \"reference>\" :\n                \"\"\"[RFC4364]\"\"\",\n        },\n        \"VrfState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"active\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"inactive\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The state of a specific VRF. When the administrator\nconfigures a VRF on the system, it stays inactive until a\nroute distinguisher is assigned to it. Also, when the\nadministrator deletes a VRF, there can be a small delay\nbefore the VRF is completely unconfigured from the system,\nduring which time its status becomes inactive.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"aristaVrfMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18\",\n            \"status\" : \"current\",\n        }, # node\n        \"aristaVrfMibObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1\",\n        }, # node\n        \"aristaVrfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information about VRFs currently\nconfigured in the system.\"\"\",\n        }, # table\n        \"aristaVrfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"aristaVrfName\",\n            ],\n            \"description\" :\n                \"\"\"A single row containing information for one VRF that is\nconfigured in the system.\"\"\",\n        }, # row\n        \"aristaVrfName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARISTA-VRF-MIB\", \"name\" : \"VrfName\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The name of the VRF that is represented by this row.\"\"\",\n        }, # column\n        \"aristaVrfRoutingStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"ipv4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ipv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of data path routing in this VRF.\nRouting for IPv4 and IPv6 packets can be independently\nenabled by the administrator for a given VRF. This object\ncarries the routing status for both the protocol versions.\nIf data path routing is enabled for a protocol, the bit\nfor the protocol is 1.\"\"\",\n        }, # column\n        \"aristaVrfRouteDistinguisher\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARISTA-VRF-MIB\", \"name\" : \"VrfRouteDistinguisher\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The route distinguisher for this VRF.\"\"\",\n        }, # column\n        \"aristaVrfState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARISTA-VRF-MIB\", \"name\" : \"VrfState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the VRF.\"\"\",\n        }, # column\n        \"aristaVrfIfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table augments the ifTable and contains the \nVRF membership information for every routed interface\nin the system. A row is present only for each active\nrouted (or layer3) interface.\"\"\",\n        }, # table\n        \"aristaVrfIfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"VRF membership information for a single routed interface.\"\"\",\n        }, # row\n        \"aristaVrfIfMembership\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARISTA-VRF-MIB\", \"name\" : \"VrfName\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the VRF that this routed interface is currently\npart of.\"\"\",\n        }, # column\n        \"aristaVrfMibConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.2\",\n        }, # node\n        \"aristaVrfMibCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.2.1\",\n        }, # node\n        \"aristaVrfMibGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"aristaVrfInformationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"aristaVrfRoutingStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ARISTA-VRF-MIB\"\n                },\n                \"aristaVrfRouteDistinguisher\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ARISTA-VRF-MIB\"\n                },\n                \"aristaVrfState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ARISTA-VRF-MIB\"\n                },\n                \"aristaVrfIfMembership\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ARISTA-VRF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects that provide VRF information in the\nsystem.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"aristaVrfMibCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ARISTA-VRF-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.30065.3.18.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for Arista switches that implement\nthe ARISTA-VRF-MIB.\"\"\",\n            \"requires\" : {\n                \"aristaVrfInformationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ARISTA-VRF-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/BGP4-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python BGP4-MIB\n\nFILENAME = \"/var/lib/mibs/ietf/BGP4-MIB\"\n\nMIB = {\n    \"moduleName\" : \"BGP4-MIB\",\n\n    \"BGP4-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"IETF IDR Working Group\"\"\",\n        \"contact\" :\n            \"\"\"E-mail:  idr@ietf.org\n\nJeffrey Haas, Susan Hares  (Editors)\nNextHop Technologies\n825 Victors Way\nSuite 100\nAnn Arbor, MI 48108-2738\nTel: +1 734 222-1600\nFax: +1 734 222-1602\nE-mail: jhaas@nexthop.com\n        skh@nexthop.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for the BGP-4 protocol.\n\nCopyright (C) The Internet Society (2006).  This\nversion of this MIB module is part of RFC 4273;\nsee the RFC itself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2006-01-11 00:00\",\n                \"description\" :\n                    \"\"\"Changes from RFC 1657:\n\n1) Fixed the definitions of the notifications\n   to make them equivalent to their initial\n   definition in RFC 1269.\n2) Added compliance and conformance info.\n3) Updated information for the values of\n   bgpPeerNegotiatedVersion, bgp4PathAttrLocalPref,\n   bgp4PathAttrCalcLocalPref,\n   bgp4PathAttrMultiExitDisc,\n   bgp4PathAttrASPathSegement.\n4) Added additional clarification comments where\n   needed.\n\n5) Noted where objects do not fully reflect\n   the protocol as Known Issues.\n6) Updated the DESCRIPTION for the\n   bgp4PathAttrAtomicAggregate object.\n7) The following objects have had their DESCRIPTION\n   clause modified to remove the text that suggested\n   (using 'should' verb) initializing the counter\n   to zero on a transition to the established state:\n     bgpPeerInUpdates, bgpPeerOutUpdates,\n     bgpPeerInTotalMessages, bgpPeerOutTotalMessages\n   Those implementations that still do this are\n   still compliant with this new wording.\n   Applications should not assume counters have\n   started at zero.\n\n Published as RFC 4273.\"\"\",\n            },\n            {\n                \"date\" : \"1994-05-05 00:00\",\n                \"description\" :\n                    \"\"\"Translated to SMIv2 and published as RFC 1657.\"\"\",\n            },\n            {\n                \"date\" : \"1991-10-26 18:39\",\n                \"description\" :\n                    \"\"\"Initial version, published as RFC 1269.\"\"\",\n            },\n        ),\n        \"identity node\" : \"bgp\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n    ),\n\n    \"nodes\" : {\n        \"bgp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15\",\n            \"status\" : \"current\",\n        }, # node\n        \"bgpNotification\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.0\",\n        }, # node\n        \"bgpVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vector of supported BGP protocol version\nnumbers.  Each peer negotiates the version\nfrom this vector.  Versions are identified\nvia the string of bits contained within this\nobject.  The first octet contains bits 0 to\n7, the second octet contains bits 8 to 15,\nand so on, with the most significant bit\nreferring to the lowest bit number in the\noctet (e.g., the MSB of the first octet\nrefers to bit 0).  If a bit, i, is present\nand set, then the version (i+1) of the BGP\nis supported.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # scalar\n        \"bgpLocalAs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local autonomous system number.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2, 'My Autonomous System'.\"\"\",\n        }, # scalar\n        \"bgpPeerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP peer table.  This table contains,\none entry per BGP peer, information about the\nconnections with BGP peers.\"\"\",\n        }, # table\n        \"bgpPeerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bgpPeerRemoteAddr\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about the\nconnection with a BGP peer.\"\"\",\n        }, # row\n        \"bgpPeerIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of this entry's BGP peer.\nThis entry MUST be 0.0.0.0 unless the\nbgpPeerState is in the openconfirm or the\nestablished state.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2, 'BGP Identifier'.\"\"\",\n        }, # column\n        \"bgpPeerState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"opensent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"openconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP peer connection state.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.2.2.\"\"\",\n        }, # column\n        \"bgpPeerAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired state of the BGP connection.\nA transition from 'stop' to 'start' will cause\nthe BGP Manual Start Event to be generated.\nA transition from 'start' to 'stop' will cause\nthe BGP Manual Stop Event to be generated.\nThis parameter can be used to restart BGP peer\nconnections.  Care should be used in providing\nwrite access to this object without adequate\nauthentication.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.1.2.\"\"\",\n        }, # column\n        \"bgpPeerNegotiatedVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The negotiated version of BGP running between\nthe two peers.\n\nThis entry MUST be zero (0) unless the\nbgpPeerState is in the openconfirm or the\n\nestablished state.\n\nNote that legal values for this object are\nbetween 0 and 255.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\nRFC 4271, Section 7.\"\"\",\n        }, # column\n        \"bgpPeerLocalAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local IP address of this entry's BGP\nconnection.\"\"\",\n        }, # column\n        \"bgpPeerLocalPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local port for the TCP connection between\nthe BGP peers.\"\"\",\n        }, # column\n        \"bgpPeerRemoteAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote IP address of this entry's BGP\npeer.\"\"\",\n        }, # column\n        \"bgpPeerRemotePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote port for the TCP connection\nbetween the BGP peers.  Note that the\nobjects bgpPeerLocalAddr,\nbgpPeerLocalPort, bgpPeerRemoteAddr, and\nbgpPeerRemotePort provide the appropriate\nreference to the standard MIB TCP\nconnection table.\"\"\",\n        }, # column\n        \"bgpPeerRemoteAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote autonomous system number received in\nthe BGP OPEN message.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # column\n        \"bgpPeerInUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages\nreceived on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\"\"\",\n        }, # column\n        \"bgpPeerOutUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages\ntransmitted on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\"\"\",\n        }, # column\n        \"bgpPeerInTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages received\nfrom the remote peer on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.\"\"\",\n        }, # column\n        \"bgpPeerOutTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages transmitted to\nthe remote peer on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.\"\"\",\n        }, # column\n        \"bgpPeerLastError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code and subcode seen by this\npeer on this connection.  If no error has\noccurred, this field is zero.  Otherwise, the\nfirst byte of this two byte OCTET STRING\ncontains the error code, and the second byte\ncontains the subcode.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.5.\"\"\",\n        }, # column\n        \"bgpPeerFsmEstablishedTransitions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of times the BGP FSM\ntransitioned into the established state\nfor this peer.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.\"\"\",\n        }, # column\n        \"bgpPeerFsmEstablishedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This timer indicates how long (in\nseconds) this peer has been in the\nestablished state or how long\nsince this peer was last in the\nestablished state.  It is set to zero when\na new peer is configured or when the router is\n\nbooted.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.\"\"\",\n        }, # column\n        \"bgpPeerConnectRetryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nConnectRetry timer.  The suggested value\nfor this timer is 120 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.2.2.  This is the value used\nto initialize the 'ConnectRetryTimer'.\"\"\",\n        }, # column\n        \"bgpPeerHoldTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the Hold\nTimer established with the peer.  The\nvalue of this object is calculated by this\nBGP speaker, using the smaller of the\nvalues in bgpPeerHoldTimeConfigured and the\nHold Time received in the OPEN message.\n\nThis value must be at least three seconds\nif it is not zero (0).\n\nIf the Hold Timer has not been established\nwith the peer this object MUST have a value\nof zero (0).\n\nIf the bgpPeerHoldTimeConfigured object has\na value of (0), then this object MUST have a\nvalue of (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # column\n        \"bgpPeerKeepAlive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the KeepAlive\ntimer established with the peer.  The value\nof this object is calculated by this BGP\nspeaker such that, when compared with\nbgpPeerHoldTime, it has the same proportion\nthat bgpPeerKeepAliveConfigured has,\ncompared with bgpPeerHoldTimeConfigured.\n\nIf the KeepAlive timer has not been established\nwith the peer, this object MUST have a value\nof zero (0).\n\nIf the of bgpPeerKeepAliveConfigured object\nhas a value of (0), then this object MUST have\na value of (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.4.\"\"\",\n        }, # column\n        \"bgpPeerHoldTimeConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the Hold Time\nconfigured for this BGP speaker with this\npeer.  This value is placed in an OPEN\nmessage sent to this peer by this BGP\nspeaker, and is compared with the Hold\nTime field in an OPEN message received\nfrom the peer when determining the Hold\nTime (bgpPeerHoldTime) with the peer.\nThis value must not be less than three\nseconds if it is not zero (0).  If it is\nzero (0), the Hold Time is NOT to be\nestablished with the peer.  The suggested\nvalue for this timer is 90 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"bgpPeerKeepAliveConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nKeepAlive timer configured for this BGP\nspeaker with this peer.  The value of this\nobject will only determine the\nKEEPALIVE messages' frequency relative to\nthe value specified in\nbgpPeerHoldTimeConfigured; the actual\ntime interval for the KEEPALIVE messages is\nindicated by bgpPeerKeepAlive.  A\nreasonable maximum value for this timer\nwould be one third of that of\nbgpPeerHoldTimeConfigured.\nIf the value of this object is zero (0),\nno periodical KEEPALIVE messages are sent\nto the peer after the BGP connection has\nbeen established.  The suggested value for\nthis timer is 30 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.4.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"bgpPeerMinASOriginationInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nMinASOriginationInterval timer.\nThe suggested value for this timer is 15\nseconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.2.1.2.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"bgpPeerMinRouteAdvertisementInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nMinRouteAdvertisementInterval timer.\nThe suggested value for this timer is 30\nseconds for EBGP connections and 5\nseconds for IBGP connections.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.2.1.1.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"bgpPeerInUpdateElapsedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Elapsed time (in seconds) since the last BGP\nUPDATE message was received from the peer.\nEach time bgpPeerInUpdates is incremented,\nthe value of this object is set to zero (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 8.2.2, Established state.\"\"\",\n        }, # column\n        \"bgpIdentifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # scalar\n        \"bgpRcvdPathAttrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The BGP Received Path Attribute Table\ncontains information about paths to\n\ndestination networks, received from all\npeers running BGP version 3 or less.\"\"\",\n        }, # table\n        \"bgpPathAttrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"bgpPathAttrDestNetwork\",\n                \"bgpPathAttrPeer\",\n            ],\n            \"description\" :\n                \"\"\"Information about a path to a network.\"\"\",\n        }, # row\n        \"bgpPathAttrPeer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the peer where the path\ninformation was learned.\"\"\",\n        }, # column\n        \"bgpPathAttrDestNetwork\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the destination network.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1267, Section 4.3.\"\"\",\n        }, # column\n        \"bgpPathAttrOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"igp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ultimate origin of the path information.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1267, Section 4.3.\nRFC 1267, Section 5.\"\"\",\n        }, # column\n        \"bgpPathAttrASPath\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of ASes that must be traversed to reach\nthe network.  This object is probably best\nrepresented as SEQUENCE OF INTEGER.  For SMI\ncompatibility, though, it is represented as\nOCTET STRING.  Each AS is represented as a pair\nof octets according to the following algorithm:\n\n   first-byte-of-pair = ASNumber / 256;\n   second-byte-of-pair = ASNumber & 255;\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1267, Section 4.3.\nRFC 1267, Section 5.\"\"\",\n        }, # column\n        \"bgpPathAttrNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the border router that should\nbe used for the destination network.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1267, Section 4.3.\nRFC 1267, Section 5.\"\"\",\n        }, # column\n        \"bgpPathAttrInterASMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.5.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The optional inter-AS metric.  If this\nattribute has not been provided for this route,\nthe value for this object is 0.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1267, Section 4.3.\nRFC 1267, Section 5.\"\"\",\n        }, # column\n        \"bgp4PathAttrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Received Path Attribute Table\ncontains information about paths to\ndestination networks, received from all\nBGP4 peers.\"\"\",\n        }, # table\n        \"bgp4PathAttrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bgp4PathAttrIpAddrPrefix\",\n                \"bgp4PathAttrIpAddrPrefixLen\",\n                \"bgp4PathAttrPeer\",\n            ],\n            \"description\" :\n                \"\"\"Information about a path to a network.\"\"\",\n        }, # row\n        \"bgp4PathAttrPeer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the peer where the path\ninformation was learned.\"\"\",\n        }, # column\n        \"bgp4PathAttrIpAddrPrefixLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length in bits of the IP address prefix in\nthe Network Layer Reachability\nInformation field.\"\"\",\n        }, # column\n        \"bgp4PathAttrIpAddrPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An IP address prefix in the Network Layer\nReachability Information field.  This object\n\nis an IP address containing the prefix with\nlength specified by\nbgp4PathAttrIpAddrPrefixLen.\nAny bits beyond the length specified by\nbgp4PathAttrIpAddrPrefixLen are zeroed.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\"\"\",\n        }, # column\n        \"bgp4PathAttrOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"igp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ultimate origin of the path\ninformation.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 5.1.1.\"\"\",\n        }, # column\n        \"bgp4PathAttrASPathSegment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sequence of AS path segments.  Each AS\npath segment is represented by a triple\n<type, length, value>.\n\nThe type is a 1-octet field that has two\npossible values:\n    1      AS_SET: unordered set of ASes that a\n                route in the UPDATE message\n                has traversed\n\n    2      AS_SEQUENCE: ordered set of ASes that\n                a route in the UPDATE message\n                has traversed.\n\nThe length is a 1-octet field containing the\n\nnumber of ASes in the value field.\n\nThe value field contains one or more AS\nnumbers.  Each AS is represented in the octet\nstring as a pair of octets according to the\nfollowing algorithm:\n\n   first-byte-of-pair = ASNumber / 256;\n   second-byte-of-pair = ASNumber & 255;\n\nKnown Issues:\no BGP Confederations will result in\n  a type of either 3 or 4.\no An AS Path may be longer than 255 octets.\n  This may result in this object containing\n  a truncated AS Path.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 5.1.2.\"\"\",\n        }, # column\n        \"bgp4PathAttrNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the border router that\nshould be used for the destination\nnetwork.  This address is the NEXT_HOP\naddress received in the UPDATE packet.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 5.1.3.\"\"\",\n        }, # column\n        \"bgp4PathAttrMultiExitDisc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This metric is used to discriminate\nbetween multiple exit points to an\nadjacent autonomous system.  A value of -1\nindicates the absence of this attribute.\n\nKnown Issues:\no The BGP-4 specification uses an\n  unsigned 32 bit number.  Thus, this\n\n  object cannot represent the full\n  range of the protocol.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 5.1.4.\"\"\",\n        }, # column\n        \"bgp4PathAttrLocalPref\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The originating BGP4 speaker's degree of\npreference for an advertised route.  A\nvalue of -1 indicates the absence of this\nattribute.\n\nKnown Issues:\no The BGP-4 specification uses an\n  unsigned 32 bit number and thus this\n  object cannot represent the full\n  range of the protocol.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 5.1.5.\"\"\",\n        }, # column\n        \"bgp4PathAttrAtomicAggregate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lessSpecificRouteNotSelected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lessSpecificRouteSelected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the ATOMIC_AGGREGATE attribute is present\nin the Path Attributes then this object MUST\nhave a value of 'lessSpecificRouteNotSelected'.\n\nIf the ATOMIC_AGGREGATE attribute is missing\nin the Path Attributes then this object MUST\nhave a value of 'lessSpecificRouteSelected'.\n\nNote that ATOMIC_AGGREGATE is now a primarily\ninformational attribute.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Sections 5.1.6 and 9.1.4.\"\"\",\n        }, # column\n        \"bgp4PathAttrAggregatorAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The AS number of the last BGP4 speaker that\nperformed route aggregation.  A value of\nzero (0) indicates the absence of this\nattribute.\n\nNote that propagation of AS of zero is illegal\nin the Internet.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 5.1.7.\nRFC 4271, Section 9.2.2.2.\"\"\",\n        }, # column\n        \"bgp4PathAttrAggregatorAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the last BGP4 speaker\nthat performed route aggregation.  A\nvalue of 0.0.0.0 indicates the absence\nof this attribute.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 5.1.7.\nRFC 4271, Section 9.2.2.2.\"\"\",\n        }, # column\n        \"bgp4PathAttrCalcLocalPref\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degree of preference calculated by the\nreceiving BGP4 speaker for an advertised\nroute.  A value of -1 indicates the\nabsence of this attribute.\n\nKnown Issues:\no The BGP-4 specification uses an\n  unsigned 32 bit number and thus this\n  object cannot represent the full\n  range of the protocol.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.1.1.\"\"\",\n        }, # column\n        \"bgp4PathAttrBest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of whether this route\nwas chosen as the best BGP4 route for this\ndestination.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.1.2.\"\"\",\n        }, # column\n        \"bgp4PathAttrUnknown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"One or more path attributes not understood by\nthis BGP4 speaker.\n\nPath attributes are recorded in the Update Path\nattribute format of type, length, value.\n\nSize zero (0) indicates the absence of such\nattributes.\n\nOctets beyond the maximum size, if any, are not\nrecorded by this object.\n\nKnown Issues:\no Attributes understood by this speaker, but not\n  represented in this MIB, are unavailable to\n  the agent.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 5.\"\"\",\n        }, # column\n        \"bgpTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.7\",\n        }, # node\n        \"bgp4MIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8\",\n        }, # node\n        \"bgp4MIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.1\",\n        }, # node\n        \"bgp4MIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"bgpEstablishedNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bgpPeerRemoteAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The bgpEstablishedNotification event is generated\nwhen the BGP FSM enters the established state.\n\nThis Notification replaces the bgpEstablished\nNotification.\"\"\",\n        }, # notification\n        \"bgpBackwardTransNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bgpPeerRemoteAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The bgpBackwardTransNotification event is\ngenerated when the BGP FSM moves from a higher\nnumbered state to a lower numbered state.\n\nThis Notification replaces the\nbgpBackwardsTransition Notification.\"\"\",\n        }, # notification\n        \"bgpEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.7.1\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The bgpEstablished event is generated when\nthe BGP FSM enters the established state.\n\nThis Notification has been replaced by the\nbgpEstablishedNotification Notification.\"\"\",\n        }, # notification\n        \"bgpBackwardTransition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.7.2\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The bgpBackwardTransition event is generated\nwhen the BGP FSM moves from a higher numbered\nstate to a lower numbered state.\n\nThis Notification has been replaced by the\nbgpBackwardTransNotification Notification.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"bgp4MIBGlobalsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bgpVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpLocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing\ninformation on global BGP state.\"\"\",\n        }, # group\n        \"bgp4MIBPeerGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bgpPeerIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerNegotiatedVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerLocalAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerLocalPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerRemoteAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerRemotePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerRemoteAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerInUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerOutUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerInTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerOutTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerFsmEstablishedTransitions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerFsmEstablishedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerConnectRetryInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerKeepAlive\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerHoldTimeConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerKeepAliveConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerMinASOriginationInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerMinRouteAdvertisementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerInUpdateElapsedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for managing\nBGP peers.\"\"\",\n        }, # group\n        \"bgpRcvdPathAttrGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.3\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"bgpPathAttrPeer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPathAttrDestNetwork\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPathAttrOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPathAttrASPath\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPathAttrNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPathAttrInterASMetric\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for managing BGP-3 and\nearlier path entries.\n\nThis conformance group, like BGP-3, is obsolete.\"\"\",\n        }, # group\n        \"bgp4MIBPathAttrGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bgp4PathAttrPeer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrIpAddrPrefixLen\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrIpAddrPrefix\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrASPathSegment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrMultiExitDisc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrLocalPref\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrAtomicAggregate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrAggregatorAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrAggregatorAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrCalcLocalPref\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrBest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4PathAttrUnknown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for managing\nBGP path entries.\"\"\",\n        }, # group\n        \"bgp4MIBTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.5\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"bgpEstablished\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpBackwardTransition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications for signaling\nchanges in BGP peer relationships.\n\nObsoleted by bgp4MIBNotificationGroup\"\"\",\n        }, # group\n        \"bgp4MIBNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"bgpEstablishedNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpBackwardTransNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications for signaling\nchanges in BGP peer relationships.\n\nObsoletes bgp4MIBTrapGroup.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"bgp4MIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the BGP4 mib.\"\"\",\n            \"requires\" : {\n                \"bgp4MIBGlobalsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4MIBPeerGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4MIBPathAttrGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgp4MIBNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of BGP Notifications are\ncompletely optional in this MIB.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"bgp4MIBDeprecatedCompliances\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement documenting deprecated\nobjects in the BGP4 mib.\"\"\",\n            \"requires\" : {\n                \"bgp4MIBTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-MIB\",\n                    \"description\" :\n                        \"\"\"Group containing TRAP objects that were\nimproperly converted from SMIv1 in RFC 1657.\nThe proper semantics have been restored\nwith the objects in bgp4MIBNotificationGroup.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"bgp4MIBObsoleteCompliances\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.15.8.1.3\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement documenting obsolete\nobjects in the BGP4 mib.\"\"\",\n            \"requires\" : {\n                \"bgpRcvdPathAttrGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-MIB\",\n                    \"description\" :\n                        \"\"\"Group containing objects relevant to BGP-3\nand earlier objects.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/BGP4-V2-MIB-JUNIPER.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python BGP4-V2-MIB-JUNIPER\n\nFILENAME = \"mib-jnx-bgpmib2.txt\"\n\nMIB = {\n    \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n\n    \"BGP4-V2-MIB-JUNIPER\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"IETF IDR Working Group\"\"\",\n        \"contact\" :\n            \"\"\"E-mail:  idr@merit.net\n\nJeffrey Haas  (Editor)\n825 Victors Way, Suite 100\nAnn Arbor, MI  48108\nTel: +1 734 222-1600\nFax: +1 734 222-1602\nE-mail: jhaas@nexthop.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB module defines management objects for\nthe Border Gateway Protocol, Version 4.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2012-12-17 00:00\",\n                \"description\" :\n                    \"\"\"This change redefines the value returned for the     -- *** JNX ***\nvariable jnxBgpM2PrefixesInPrefixesRejected so that   -- *** JNX ***\nit conforms to the definition.                        -- *** JNX ***\nIt also adds a new counter in the same sequence to    -- *** JNX ***\nreturn the number of active prefixes received from    -- *** JNX ***\nthe peer:  jnxBgpM2PrefixInPrefixesActive\"\"\",\n            },\n            {\n                \"date\" : \"2003-09-09 15:08\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"2003-09-09 15:08\",\n                \"description\" :\n                    \"\"\"This is a proprietary implementation of the          -- *** JNX ***\ndraft-ietf-idr-bgp4-mibv2-03.txt MIB as written by    -- *** JNX ***\nthe IETF Inter-Domain Routing Working Group.          -- *** JNX ***\nThis Juniper experimental MIB will be retired when a  -- *** JNX ***\nvalid oid branch is assigned.\"\"\",\n            },\n            {\n                \"date\" : \"2002-11-04 00:00\",\n                \"description\" :\n                    \"\"\"draft-ietf-idr-bgp4-mibv2-03.txt version written by  -- *** JNX ***\nthe IETF Inter-Domain Routing Working Group.\"\"\",\n            },\n        ),\n        \"identity node\" : \"jnxBgpM2\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n        {\"module\" : \"JUNIPER-EXPERIMENT-MIB\", \"name\" : \"jnxBgpM2Experiment\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"StorageType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n    ),\n\n    \"typedefs\" : {\n        \"JnxBgpM2Identifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"4\",\n                \"max\" : \"4\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"4\",\n                \"max\" : \"4\"\n            },\n            \"format\" : \"1d.\",\n            \"description\" :\n                \"\"\"The representation of a BGP Identifier.  The BGP\nIdentifier should be represented in the OCTET STRING\nas with the first OCTET of the string containing\nthe first OCTET of the BGP Identifier received or sent\nin the OPEN packet and so on.\n\nEven though the BGP Identifier is trending away from\nan IP address it is still displayed as if it was one,\neven when it would be an illegal IP address.\"\"\",\n        },\n        \"JnxBgpM2Safi\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"The representation of a BGP Safi\"\"\",\n        },\n        \"JnxBgpM2Community\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"4\",\n                \"max\" : \"4\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"4\",\n                \"max\" : \"4\"\n            },\n            \"format\" : \"2d:\",\n            \"description\" :\n                \"\"\"The representation of a BGP Community.\"\"\",\n        },\n        \"JnxBgpM2ExtendedCommunity\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            \"format\" : \"1x:\",\n            \"description\" :\n                \"\"\"The representation of a BGP Extended Community.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"jnxBgpM2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"jnxBgpM2BaseScalars\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1\",\n        }, # node\n        \"jnxBgpM2BaseNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.0\",\n        }, # node\n        \"jnxBgpM2Version\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.1\",\n        }, # node\n        \"jnxBgpM2VersionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of supported BGP versions.\"\"\",\n        }, # table\n        \"jnxBgpM2VersionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2VersionIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing data on a given supported version\nof the Border Gateway Protocol and the level of\nsupport provided.  It is expected that any agent\nimplementation supporting this MIB module will\nreport support for Version 4 of the Border Gateway\nProtocol at the very minimum.\"\"\",\n        }, # row\n        \"jnxBgpM2VersionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The version number of the BGP Protocol.\"\"\",\n        }, # column\n        \"jnxBgpM2VersionSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if this version of the BGP protocol\nidentified in 'jnxBgpM2VersionIndex' is supported.  The absence\nof a row for a particular jnxBgpM2VersionIndex indicates that\nthat jnxBgpM2VersionIndex protocol version number is not\nsupported.\"\"\",\n        }, # column\n        \"jnxBgpM2SupportedAuthentication\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.2\",\n        }, # node\n        \"jnxBgpM2SupportedAuthTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The supported BGP authentication mechanisms.\"\"\",\n        }, # table\n        \"jnxBgpM2SupportedAuthEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2SupportedAuthCode\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information whether a given BGP\nauthentication mechanism is supported by this\nimplementation.\"\"\",\n        }, # row\n        \"jnxBgpM2SupportedAuthCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP authentication code.\"\"\",\n        }, # column\n        \"jnxBgpM2SupportedAuthValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if a given authentication method\nis supported by the local implementation.\"\"\",\n        }, # column\n        \"jnxBgpM2SupportedCapabilities\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3\",\n        }, # node\n        \"jnxBgpM2CapabilitySupportAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if capability support is\navailable and is enabled.\"\"\",\n        }, # scalar\n        \"jnxBgpM2SupportedCapabilitiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of supported BGP-4 capabilities.\"\"\",\n        }, # table\n        \"jnxBgpM2SupportedCapabilitiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2SupportedCapabilityCode\",\n            ],\n            \"description\" :\n                \"\"\"Information about supported capabilities indexed\nby capability number.\"\"\",\n        }, # row\n        \"jnxBgpM2SupportedCapabilityCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of supported capability.  The index directly\ncorresponds with the BGP-4 Capability Advertisement\nCapability Code.\"\"\",\n        }, # column\n        \"jnxBgpM2SupportedCapability\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is True if this capability is supported,\nFalse otherwise.\"\"\",\n        }, # column\n        \"jnxBgpM2AsSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"twoOctet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourOctet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the AS value in this implementation.\n\nThe semantics of this are determined as per the\nas-4bytes draft.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-as4bytes-04\"\"\",\n        }, # scalar\n        \"jnxBgpM2LocalAs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local autonomous system number.\n\nIf the jnxBgpM2AsSize is twoOctet, then the range is\nconstrained to be 0-65535.\"\"\",\n        }, # scalar\n        \"jnxBgpM2LocalIdentifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of local system.\n\nCurrent practice is trending away from this value being\ntreated as an IP address and more as a generic\nidentifier.\"\"\",\n        }, # scalar\n        \"jnxBgpM2BaseScalarExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7\",\n        }, # node\n        \"jnxBgpM2BaseScalarNonCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1\",\n        }, # node\n        \"jnxBgpM2BaseScalarRouteReflectExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.2796\",\n        }, # node\n        \"jnxBgpM2RouteReflector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.2796.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if this implementation supports the\nBGP Route Reflection Extension and is enabled as a\nroute reflector.  If the BGP Route Reflection extension\nis not supported this value must be FALSE.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # scalar\n        \"jnxBgpM2ClusterId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.2796.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The configured Cluster-ID of the BGP Speaker.  This will\ndefault to the BGP Speaker's JnxBgpM2Identifier if this\nspeaker is functioning as a route reflector and an\nexplicit Cluster-ID has not been configured.\n\nA value of 0.0.0.0 will be present if Route Reflection is\nnot enabled.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # scalar\n        \"jnxBgpM2BaseScalarASConfedExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.3065\",\n        }, # node\n        \"jnxBgpM2ConfederationRouter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.3065.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if this implementation supports the\nBGP AS Confederations Extension and this router is\nconfigured to be in a confederation.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - Autonomous System Confederations for BGP\"\"\",\n        }, # scalar\n        \"jnxBgpM2ConfederationId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.1.3065.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local Confederation Identification Number.\n\nThis value will be zero (0) if this BGP Speaker is not\na confederation router.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - Autonomous System Confederations for BGP\"\"\",\n        }, # scalar\n        \"jnxBgpM2BaseScalarCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.7.2\",\n        }, # node\n        \"jnxBgpM2BaseScalarConfiguration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8\",\n        }, # node\n        \"jnxBgpM2CfgBaseScalarStorageType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"StorageType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the intended storage type for\nall configurable base scalars.\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgLocalAs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The local autonomous system number.\n\nIf the jnxBgpM2AsSize is twoOctet, then the range is\nconstrained to be 0-65535.\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgLocalIdentifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The BGP Identifier of local system.\n\nCurrent practice is trending away from this value being\ntreated as an IP address and more as a generic\nidentifier.\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgBaseScalarExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4\",\n        }, # node\n        \"jnxBgpM2CfgBaseScalarNonCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1\",\n        }, # node\n        \"jnxBgpM2CfgBaseScalarReflectorExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.2796\",\n        }, # node\n        \"jnxBgpM2CfgRouteReflector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.2796.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value is set to true if this implementation will\nbe supporting route reflection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgClusterId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.2796.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured Cluster-ID of the BGP Speaker.  This will\ndefault to the BGP Speaker's JnxBgpM2Identifier if this\nspeaker is functioning as a route reflector and an\nexplicit Cluster-ID has not been configured.\n\nA value of 0.0.0.0 will be present if Route Reflection is\nnot enabled.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgBaseScalarASConfedExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.3065\",\n        }, # node\n        \"jnxBgpM2CfgConfederationRouter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.3065.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value is set to true if this implementation will be\nsupporting BGP AS Confederations.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - Autonomous System Confederations for BGP\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgConfederationId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.1.3065.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The local Confederation Identification Number.\n\nThis value will be zero (0) if this BGP Speaker is not\na confederation router.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - Autonomous System Confederations for BGP\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgBaseScalarCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.8.4.2\",\n        }, # node\n        \"jnxBgpM2Peer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2\",\n        }, # node\n        \"jnxBgpM2PeerData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1\",\n        }, # node\n        \"jnxBgpM2PeerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP peer table.\n\nThis table contains, one entry per remote BGP peer,\nany information about the connections with the remote\nBGP peers.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerRoutingInstance\",\n                \"jnxBgpM2PeerLocalAddrType\",\n                \"jnxBgpM2PeerLocalAddr\",\n                \"jnxBgpM2PeerRemoteAddrType\",\n                \"jnxBgpM2PeerRemoteAddr\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about the connection with\na remote BGP peer.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of this entry's remote BGP peer.\n\nThis entry should be 0.0.0.0 unless the jnxBgpM2PeerState is\nin the OpenConfirm or the Established state.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 4.2\"\"\",\n        }, # column\n        \"jnxBgpM2PeerState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"opensent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"openconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote BGP peer's FSM state.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 8\"\"\",\n        }, # column\n        \"jnxBgpM2PeerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"halted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether or not the BGP FSM for this remote peer is halted\nor running.  The BGP FSM for a remote peer is halted after\nprocessing a Stop event.  Likewise, it is in the running\nstate after a Start event.\n\nThe jnxBgpM2PeerState will generally be in the idle state when\nthe FSM is halted, although some extensions such as\nGraceful Restart will leave the peer in the Idle state\nbut with the FSM running.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerConfiguredVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The configured version to originally start with this\nremote peer.  The BGP speaker may permit negotiation to a\nlower version number of the protocol.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerNegotiatedVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The negotiated version of BGP running between the two\npeers.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLocalAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address family of the local end of the peering\nsession.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLocalAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the local end of the peering session.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLocalPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local port for the TCP connection between the BGP\npeers.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLocalAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Some implementations of BGP can represent themselves\nas multiple ASs.  This is the AS that this peering\nsession is representing itself as to the remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerRemoteAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address family of the remote end of the peering\nsession.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerRemoteAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the remote end of the peering session.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerRemotePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote port for the TCP connection between the BGP\npeers.  In the case of a transport for which the notion\nof 'port' is irrelevant, an instance value of -1\nshould be returned by the agent for this object.\n\nNote that the objects jnxBgpM2PeerLocalAddr,\njnxBgpM2PeerLocalPort, jnxBgpM2PeerRemoteAddr and\njnxBgpM2PeerRemotePort provide the appropriate reference to\nthe standard MIB TCP connection table. or even the ipv6\nTCP MIB as in rfc2452.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2012 - SNMPv2 Management Information Base for the\nTransmission Control Protocol using SMIv2.\nRFC 2542 - IP Version 6 Management Information Base\nfor the Transmission Control Protocol.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerRemoteAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote autonomous system number.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is a unique index for the remote peer entry\nin the jnxBgpM2PeerTable.  It is assigned by the agent\nat the point of creation of the jnxBgpM2PeerTable row\nentry.  While its value is guaranteed to be unique at\nany time, it is otherwise opaque to the management\napplication with respect to its value or the contiguity\nof jnxBgpM2PeerIndex row instance values across rows of\nthe jnxBgpM2PeerTable.  It is used to provide an index\nstructure for other tables whose data is logically\nper-peer.\n\nFor explicitly configured peers, this value will remain\nconsistent until this row is deleted by deleting the\nconfigured peers.  Unconfigured peers will generate\na monotonically increasing number when a BGP FSM is\nbuilt to process the peering session.  Values in the\njnxBgpM2PeerTable and other tables utilizing jnxBgpM2PeerIndex\nare expected to remain in existence for an arbitrary\ntime after the unconfigured peer has been deleted\nin order to allow management applications to extract\nuseful management information for those peers.  Thus,\nan unconfigured peer using the same indices as the\njnxBgpM2PeerTable that comes up while this row still\nexists will re-utilize the same row.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerRoutingInstance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Routing instance index.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerErrors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2\",\n        }, # node\n        \"jnxBgpM2PeerErrorsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"On a per peer basis, this table reflects the last\nprotocol-defined error encountered and reported on\nthe peer session.  If no entry for a given peer,\nby its jnxBgpM2PeerIndex, exists in this table, then no\nsuch errors have been observed, reported, and\nrecorded on the  session.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerErrorsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each entry contains information about errors sent\nand received for a particular BGP peer.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerLastErrorReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code and subcode received by this BGP\nSpeaker via a NOTIFICATION message for this peer.\nIf no error has occurred, this field is zero.\nOtherwise, the first byte of this two byte\nOCTET STRING contains the error code, and the second\nbyte contains the subcode.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code and subcode sent by this BGP\nSpeaker via a NOTIFICATION message to this peer.\nIf no error has occurred, this field is zero.\nOtherwise, the first byte of this two byte\nOCTET STRING contains the error code, and the second\nbyte contains the subcode.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorReceivedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp that the last NOTIFICATION was received from\nthis peer.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorSentTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp that the last NOTIFICATION was sent to\nthis peer.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorReceivedText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains an implementation specific\nexplanation of the error that was reported.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorSentText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains an implementation specific\nexplanation of the error that is being reported.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorReceivedData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4075\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4075\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code's data seen by this peer.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerLastErrorSentData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4075\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4075\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code's data sent to this peer.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-15.txt, Sec. 4.5\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthentication\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3\",\n        }, # node\n        \"jnxBgpM2PeerAuthTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP peer authentication table.\n\nThis table contains, one entry per BGP peer,\ninformation about the authentication with BGP peers.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerAuthEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about the authentication\nwith a BGP peer.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerAuthSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local peer has sent authentication information\nto the remote peer in the BGP Authentication field.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthSentCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The code of the authentication information sent to\nthe remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthSentValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The payload of the authentication information\nfrom the remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthRcvd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local peer has received authentication information\nfrom the remote peer in the BGP Authentication field.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthRcvdCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The code of the authentication information received from\nthe remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerAuthRcvdValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The payload of the authentication information from\nthe remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerTimers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4\",\n        }, # node\n        \"jnxBgpM2PeerEventTimesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table reporting the per-peering session amount\nof time elapsed and update events since the peering\nsession advanced into the Established state.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerEventTimesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each row contains a set of statistics about time\nspent and events encountered in the peer session\nEstablished state.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerFsmEstablishedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This timer indicates how long (in seconds) this\npeer has been in the Established state or how long\nsince this peer was last in the Established state.\nIt is set to zero when a new peer is configured or\nthe router is booted.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerInUpdatesElapsedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Elapsed time in seconds since the last BGP UPDATE\nmessage was received from the peer.  Each time\njnxBgpM2PeerInUpdates is incremented, the value of this\nobject is set to zero (0).  This value shall also be\nzero (0) when the peer is not in the Established state\"\"\",\n        }, # column\n        \"jnxBgpM2PeerConfiguredTimersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Per peer management data on BGP session timers.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerConfiguredTimersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each entry corresponds to the current state of\nBGP timers on a given peering session.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerConnectRetryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the ConnectRetry\ntimer.  The suggested value for this timer is 120\nseconds.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerHoldTimeConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the Hold Time configured\nfor this BGP speaker with this peer.  This value\nis placed in an OPEN message sent to this peer by\nthis BGP speaker, and is compared with the Hold\nTime field in an OPEN message received from the\npeer when determining the Hold Time (jnxBgpM2PeerHoldTime)\nwith the peer.  This value must not be less than\nthree seconds if it is not zero (0) in which case\nthe Hold Time is NOT to be established with the\npeer.  The suggested value for this timer is 90\nseconds.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Appendix 6.4\"\"\",\n        }, # column\n        \"jnxBgpM2PeerKeepAliveConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the KeepAlive timer\nconfigured for this BGP speaker with this peer.\nThe value of this object will only determine the\nKEEPALIVE messages frequency relative to the value\nspecified in jnxBgpM2PeerHoldTimeConfigured; the actual\ntime interval for the KEEPALIVE messages is indicated\nby jnxBgpM2PeerKeepAlive.  A reasonable maximum value\nfor this timer would be configured to be one third\nof that of jnxBgpM2PeerHoldTimeConfigured.\n\nIf the value of this object is zero (0), no\nperiodical KEEPALIVE messages are sent to the peer\nafter the BGP connection has been established.\nThe suggested value for this timer is 30 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Appendix 6.4\"\"\",\n        }, # column\n        \"jnxBgpM2PeerMinASOrigInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the MinASOriginationInterval\ntimer.  The suggested value for this timer is 15\nseconds.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerMinRouteAdverInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the\nMinRouteAdvertisementInterval timer.  The suggested\nvalue for this timer is 30 seconds.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerNegotiatedTimersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Current values of per-peer timers which can be\ndynamically set in the jnxBgpM2PeerConfiguredTimersTable.\nValues reflected in this table are the current\noperational values, after negotiation from values\nderived from initial configuration or last set from\njnxBgpM2PeerConfiguredTimersTable row instances.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerNegotiatedTimersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each entry reflects a value of the currently\noperational, negotiated timers as reflected in the\nJnxBgpM2PeerNegotiatedTimersEntry.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerHoldTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of this object is calculated by this BGP\nSpeaker as being;\n\nzero (0) - if this was the value sent by the peer and\nthis value is permitted by this BGP Speaker.  In this\ncase, no keepalive messages are sent and the Hold Timer\nis not set.\n\nAt least three (3).  This value is the smaller of\nthe value sent by this peer in the OPEN message and\njnxBgpM2PeerHoldTimeConfigured for this peer.\n\nThis value is only defined when the peering session is\nin the Established state.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 4.2\"\"\",\n        }, # column\n        \"jnxBgpM2PeerKeepAlive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the KeepAlive timer\nestablished with the peer.  The value of this object\nis calculated by this BGP speaker such that, when\ncompared with jnxBgpM2PeerHoldTime, it has the same\nproportion as what jnxBgpM2PeerKeepAliveConfigured has\nwhen compared with jnxBgpM2PeerHoldTimeConfigured.  If\nthe value of this object is zero (0), it indicates\nthat the KeepAlive timer has not been established\nwith the peer, or, the value of\njnxBgpM2PeerKeepAliveConfigured is zero (0).\n\nThis value is only defined when the peering session is\nin the Established state.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17, Sec. 4.4\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapabilities\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5\",\n        }, # node\n        \"jnxBgpM2PeerCapsAnnouncedTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the capabilities\nthat are supported for a given peer.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerCapsAnnouncedEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n                \"jnxBgpM2PeerCapAnnouncedCode\",\n                \"jnxBgpM2PeerCapAnnouncedIndex\",\n            ],\n            \"description\" :\n                \"\"\"These entries are keyed by a BGP-4 peer remote\naddress and the BGP Capability Code\"\"\",\n        }, # row\n        \"jnxBgpM2PeerCapAnnouncedCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Capability Advertisement Capability Code.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapAnnouncedIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Multiple instances of a given capability may be sent\nbgp a BGP speaker.  This variable is used to index them.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapAnnouncedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the announced capability.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapsReceivedTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the capabilities\nthat are supported for a given peer.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerCapsReceivedEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n                \"jnxBgpM2PeerCapReceivedCode\",\n                \"jnxBgpM2PeerCapReceivedIndex\",\n            ],\n            \"description\" :\n                \"\"\"These entries are keyed by a BGP-4 peer remote\naddress and the BGP Capability Code\"\"\",\n        }, # row\n        \"jnxBgpM2PeerCapReceivedCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Capability Advertisement Capability Code.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapReceivedIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Multiple instances of a given capability may be sent\nbgp a BGP speaker.  This variable is used to index them.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapReceivedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the announced capability.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCounters\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6\",\n        }, # node\n        \"jnxBgpM2PeerCountersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The counters associated with a BGP Peer.\"\"\",\n        }, # table\n        \"jnxBgpM2PeerCountersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each entry contains counters of message transmissions\nand FSM transitions for a given BGP Peering session.\"\"\",\n        }, # row\n        \"jnxBgpM2PeerInUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages received on this\nconnection.  This object should be initialized to zero\n(0) when the connection is established.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerOutUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages transmitted on this\nconnection.  This object should be initialized to zero\n(0) when the connection is established.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerInTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages received from the remote\npeer on this connection.  This object should be\ninitialized to zero when the connection is established.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerOutTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages transmitted to the remote\npeer on this connection.  This object should be\ninitialized to zero when the connection is established.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerFsmEstablishedTrans\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of times the BGP FSM\ntransitioned into the established state\nfor this peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixCountersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Additional per-peer, per AFI SAFI counters for prefixes\"\"\",\n        }, # table\n        \"jnxBgpM2PrefixCountersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n                \"jnxBgpM2PrefixCountersAfi\",\n                \"jnxBgpM2PrefixCountersSafi\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about a bgp-peers prefix\ncounters.\"\"\",\n        }, # row\n        \"jnxBgpM2PrefixCountersAfi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The AFI index of the per-peer, per prefix counters\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixCountersSafi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Safi\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The SAFI index of the per-peer, per prefix counters\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixInPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of prefixes received from a peer and are\nstored in the Adj-Ribs-In for that peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixInPrefixesAccepted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of prefixes for a peer that are installed\nin the Adj-Ribs-In and are eligible to become active\nin the Loc-Rib.\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixInPrefixesRejected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of prefixes for a peer that are installed\nin the Adj-Ribs-In and are NOT eligible to become active\nin the Loc-Rib.\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixOutPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of prefixes for a peer that are installed\nin that peers Adj-Ribs-Out.\"\"\",\n        }, # column\n        \"jnxBgpM2PrefixInPrefixesActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.6.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of prefixes for a peer that are installed\nin the Adj-Ribs-In and are the active route\nin the Loc-Rib.\"\"\",\n        }, # column\n        \"jnxBgpM2PeerExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7\",\n        }, # node\n        \"jnxBgpM2PeerNonCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1\",\n        }, # node\n        \"jnxBgpM2PeerRouteReflectionExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.2796\",\n        }, # node\n        \"jnxBgpM2PeerReflectorClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.2796.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of route reflection client settings on a per-peer\nbasis.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # table\n        \"jnxBgpM2PeerReflectorClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.2796.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing data on a per-peer basis on whether\nthe peer is configured as a route reflector client.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # row\n        \"jnxBgpM2PeerReflectorClient\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.2796.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nonClient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"meshedClient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates whether the given peer is a\nreflector client of this router, or not.  A value of\nnonClient indicates that this peer is not a reflector\nclient.  A value of client indicates that this peer is a\nreflector client that is not fully meshed with other\nreflector clients.  A value of meshedClient indicates\nthat the peer is a reflector client and is fully meshed\nwith all other reflector clients.\n\nThis value must be nonClient (0) for BGP external peers.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # column\n        \"jnxBgpM2PeerASConfederationExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.3065\",\n        }, # node\n        \"jnxBgpM2PeerConfedMemberTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.3065.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of confederation member settings on a per-peer\nbasis.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # table\n        \"jnxBgpM2PeerConfedMemberEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.3065.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing data on a per-peer basis on whether\nthe peer is configured as a BGP confederation member.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # row\n        \"jnxBgpM2PeerConfedMember\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.1.3065.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates whether the given peer is in our\nconfederation or not.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # column\n        \"jnxBgpM2PeerCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.7.2\",\n        }, # node\n        \"jnxBgpM2PeerConfiguration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8\",\n        }, # node\n        \"jnxBgpM2CfgPeerAdminStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table containing rows for administratively starting and\nstopping peering sessions.\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerAdminStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing row for administratively starting and\nstopping peers.\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object allows the Manual Stop and Manual Start\nevents to be sent to an activated peering session.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerNextIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains the next appropriate value to\nuse as an index for creation of a row instance in\nin the jnxBgpM2CfgPeerTable.  If the number of available\nentries in the jnxBgpM2CfgPeerTable is exhausted, a\nretrieval value of this object instance will return\n0.  A value of 0 may also be returned if the agent\nis otherwise incapable of jnxBgpM2CfgPeerTable row creation\nat the time of jnxBgpM2CfgPeerNextIndex retrieval.\"\"\",\n        }, # scalar\n        \"jnxBgpM2CfgPeerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP configuration peer table.\n\nThis table allows the configuration of the parameters\nfor a session with a BGP peer.\n\n+++wayne provide description of how config should be done\nfor a peer per table.\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2CfgPeerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information set up by a management\nentity to configure a connection with a BGP peer.\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerConfiguredVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"4\",\n            \"description\" :\n                \"\"\"The configured version to originally start with\nthis peer.  The BGP speaker may permit negotiation\nto a lower version number of the protocol depending on the\nset value of jnxBgpM2CfgAllowVersionNegotiation.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgAllowVersionNegotiation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"If set to true, during session establishment with this\npeer, negotiation to a version lower than that specified\nin jnxBgpM2CfgPeerConfiguredVersion will be allowed.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerLocalAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address family of the speakers of this BGP\nsession.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerLocalAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address of the local end of the peering session.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerLocalAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Autonomous system represented to peer on peering\nsession initialization.  Some implementations of\nBGP can represent themselves as multiple ASes.\nThese implementations can set this to an alternate\nautonomous system.  If this object is set to zero\n(0) at the point this row instance is set to active,\nthen the implementation will initialize this session\nrepresenting itself as the value of jnxBgpM2CfgLocalAs.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRemoteAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address family of the speakers of the remote BGP\nsession.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRemoteAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address of the remote end (destination address\nof peer) for peering session.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRemotePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"This is the remote port for the transport connection\nbetween the BGP peers.  In the case of a transport for\nwhich the notion of port is irrelevant, the value of\n-1 can be defaulted or set.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRemoteAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Autonomous system number of the remote peer.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerEntryStorageType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"StorageType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object type specifies the intended storage\ntype for the jnxBgpM2CfgPeerEntry row instance.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notActivated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"errDuplicatePeeringSession\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"activated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current error status of\nthe row denoting the configured error status.\n\nIf this row is still under creation (has not been activated\njnxBgpM2CfgPeerRowEntryStatus), then this instance will be set to\nnot-activated (1).\n\nAt the point that the row is activated, jnxBgpM2CfgPeerError\nwill reflect the error status of the row data itself.  If\nthere is another session already activated with the same\nlocal and remote addresses as denoted by\n{jnxBgpM2CfgPeerLocalAddrType, jnxBgpM2CfgPeerLocalAddr,\njnxBgpM2CfgPeerRemoteAddr, jnxBgpM2CfgPeerRemotePort}, then\nthe value of this will be set to\nerr-duplicate-peering-session (2).\n\nIf this row is associated with a peer session whose\ninitialization has been attempted, the value will be\nset to activated (3) (and, jnxBgpM2PeerCfgPeerEntry will\nbe set to the row instance of the entry in the\njnxBgpM2PeerTable which reflects the state of the peering\nsession).\n\nNote that this object only reflects the error as a\nfunction of the attempted activation of this row as\ncontaining data for a bgp peering session.  The actual\nstate of the session at the point of any protocol exchange\nor session state machine initiation is reflected in the\njnxBgpM2PeerTable row instance (as reflected through\njnxBgpM2CfgPeerPeerEntry) associated with this row instance.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerBgpPeerEntry\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upon activation of the session data contained in this\nrow instance, this object points to an instance of a row\nwithin the jnxBgpM2PeerTable reflecting the session in its\ninitializing or operational state.  Retrieval of this\ncolumn instance will always yield a value of {0.0} unless\nthe session has successfully been activated (via\njnxBgpM2CfgPeerRowEntryStatus).  Such row instances will always\nhave a value of jnxBgpM2CfgPeerError which is activated (3).\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRowEntryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object type is used to control creation,\nactivation, and deletion of this row instance.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Uniquely identifies an instance of a peer row, as\nan element of configuration.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"halted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies the state of the peering session upon\nactivation.  If disabled, the FSM is in the halted\nstate and no Automatic Start events are generated.\nIf enabled, the FSM is in the running state and\nAutomatic Start events may be generated.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerRoutingInstance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Routing instance index.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerAuthTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table contain per peer configuration for BGP Authentication.\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerAuthEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2CfgPeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about a peer's BGP Authentication\nconfiguration.\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerAuthEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This value is true if BGP Authentication is enabled for\nthis peer.  This is the authentication mechanism\ndocumented in the base BGP specification, not the MD5\nsession protection mechanism.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerAuthCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The authentication code for the BGP Authentication\nmechanism.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 4.1.a\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerAuthValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"252\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The authentication payload for the BGP authentication\nmechanism.  This value has semantic meaning within\nthe context of the authentication code.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 4.1.a\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerTimersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table for configuration of per-peer timers.\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerTimersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2CfgPeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing per-peer timer configuration.\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerConnectRetryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"120\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the ConnectRetry\ntimer.  The suggested value for this timer is 120\nseconds.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerHoldTimeConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"90\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the Hold Time configured\nfor this BGP speaker with this peer.  This value\nis placed in an OPEN message sent to this peer by\nthis BGP speaker, and is compared with the Hold\nTime field in an OPEN message received from the\npeer when determining the Hold Time (jnxBgpM2PeerHoldTime)\nwith the peer.  This value must not be less than\nthree seconds if it is not zero (0) in which case\nthe Hold Time is NOT to be established with the\npeer.  The suggested value for this timer is 90\nseconds.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Appendix 6.4\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerKeepAliveConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"30\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the KeepAlive timer\nconfigured for this BGP speaker with this peer.\nThe value of this object will only determine the\nKEEPALIVE messages frequency relative to the value\nspecified in jnxBgpM2PeerHoldTimeConfigured; the actual\ntime interval for the KEEPALIVE messages is indicated\nby jnxBgpM2PeerKeepAlive.  A reasonable maximum value\nfor this timer would be configured to be one third\nof that of jnxBgpM2PeerHoldTimeConfigured.\n\nIf the value of this object is zero (0), no\nperiodical KEEPALIVE messages are sent to the peer\nafter the BGP connection has been established.\nThe suggested value for this timer is 30 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Appendix 6.4\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerMinASOrigInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the MinASOriginationInterval\ntimer.  The suggested value for this timer is 15\nseconds.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerMinRouteAdverInter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"30\",\n            \"description\" :\n                \"\"\"Time interval in seconds for the\nMinRouteAdvertisementInterval timer.  The suggested\nvalue for this timer is 30 seconds.\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6\",\n        }, # node\n        \"jnxBgpM2CfgPeerNonCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1\",\n        }, # node\n        \"jnxBgpM2CfgPeerRouteReflectionExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.2796\",\n        }, # node\n        \"jnxBgpM2CfgPeerReflectorClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.2796.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of route reflection client settings on a per-peer\nbasis.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerReflectorClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.2796.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2CfgPeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing data on a per-peer basis on whether\nthe peer is configured as a route reflector client.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerReflectorClient\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.2796.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nonClient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"meshedClient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value indicates whether the given peer is a\nreflector client of this router, or not.  A value of\nnonClient indicates that this peer is not a reflector\nclient.  A value of client indicates that this peer is a\nreflector client that is not fully meshed with other\nreflector clients.  A value of meshedClient indicates\nthat the peer is a reflector client and is fully meshed\nwith all other reflector clients.\n\nThis value must be nonClient (0) for BGP external peers.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerASConfederationExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.3065\",\n        }, # node\n        \"jnxBgpM2CfgPeerConfedMemberTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.3065.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of confederation member settings on a per-peer\nbasis.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # table\n        \"jnxBgpM2CfgPeerConfedMemberEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.3065.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2CfgPeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing data on a per-peer basis on whether\nthe peer is configured as a BGP confederation member.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # row\n        \"jnxBgpM2CfgPeerConfedMember\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.1.3065.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value indicates whether the given peer is in our\nconfederation or not.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3065 - BGP Confederations\"\"\",\n        }, # column\n        \"jnxBgpM2CfgPeerCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.2.8.6.2\",\n        }, # node\n        \"jnxBgpM2Rib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3\",\n        }, # node\n        \"jnxBgpM2NlriTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Received Path Attribute Table contains\ninformation about paths to destination networks\nreceived from all BGP4 peers.  Collectively, this\nrepresents the Adj-Ribs-In.  The route where\njnxBgpM2NlriBest is TRUE represents, for this NLRI,\nthe route that is installed in the LocRib from the\nAdj-Ribs-In.\"\"\",\n        }, # table\n        \"jnxBgpM2NlriEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n                \"jnxBgpM2NlriAfi\",\n                \"jnxBgpM2NlriSafi\",\n                \"jnxBgpM2NlriPrefix\",\n                \"jnxBgpM2NlriPrefixLen\",\n                \"jnxBgpM2NlriIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a path to a network.\"\"\",\n        }, # row\n        \"jnxBgpM2NlriIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This index allows for multiple instances of a base\nprefix for a certain AFI SAFI from a given peer.\nThis is currently useful for two things:\n1. Allowing for a peer in future implementations to\n   send more than a single route instance.\n2. Allow for extensions which extend the NLRI field\n   to send the same prefix while utilizing other\n   extension specific information.  An example of\n   this is RFC 3107 - Carrying MPLS labels in BGP.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3107 - Carrying Label Information in BGP-4\"\"\",\n        }, # column\n        \"jnxBgpM2NlriAfi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address family of the prefix for this NLRI.\"\"\",\n        }, # column\n        \"jnxBgpM2NlriSafi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Safi\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The subsequent address family of the prefix for\nthis NLRI\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2858 - Multiprotocol Extensions for BGP-4\"\"\",\n        }, # column\n        \"jnxBgpM2NlriPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An IP address prefix in the Network Layer\nReachability Information field.  This object\nis an IP address containing the prefix with\nlength specified by\njnxBgpM2PathAttrAddrPrefixLen.\nAny bits beyond the length specified by\njnxBgpM2PathAttrAddrPrefixLen are zeroed.\"\"\",\n        }, # column\n        \"jnxBgpM2NlriPrefixLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length in bits of the address prefix in\nthe Network Layer Reachability Information field.\"\"\",\n        }, # column\n        \"jnxBgpM2NlriBest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of whether or not this route\nwas chosen as the best BGP4 route.\"\"\",\n        }, # column\n        \"jnxBgpM2NlriCalcLocalPref\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degree of preference calculated by the\nreceiving BGP4 speaker for an advertised\nroute.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is a unique index for the per-NLRI entry\nin the jnxBgpM2PeerAttrTable.  It is assigned by the\nagent at the point of creation of the jnxBgpM2PeerAttrTable\nrow entry.  While its value is guaranteed to be unique\nat any time, it is otherwise opaque to the management\napplication with respect to its value or the contiguity\nof jnxBgpM2PeerAttrIndex row instance values across rows\nof the jnxBgpM2PeerAttrTable.  It is used to provide an\nindex structure for other tables whose data is logically\nper-peer, per-NLRI.\"\"\",\n        }, # column\n        \"jnxBgpM2NlriOpaqueType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"bgpMplsLabelStack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object enumerates the type of the row that is\npointed to in the table row jnxBgpM2NlriOpaquePointer\ninstance, if jnxBgpM2NlriOpaquePointer is in fact not\na zero length.  jnxBgpM2NlriOpaqueType is necessary since\nthe data referenced by jnxBgpM2NlriOpaquePointer is\nopaque to BGP.  For example, in the case of RFC 3107,\nthe label stack that is pointed to may occur in the\nmplsLabelStackTable from the MPLS-LSR-MIB, and the\ninstance value of jnxBgpM2NlriOpaqueType would be\nbgpMplsLabelStack(1).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3107 - Carrying Label Information in BGP-4\ndraft-ietf-mpls-lsr-mib-08.txt\"\"\",\n        }, # column\n        \"jnxBgpM2NlriOpaquePointer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pointer to a row that decomposes the data that is\nopaque to the BGP MIB but is sent in the NLRI.\nThis RowPointer has zero (0) length data instance\nif jnxBgpM2NlriOpaqueType is none.\"\"\",\n        }, # column\n        \"jnxBgpM2AdjRibsOutTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains on a per-peer basis one or more\nroutes from the jnxBgpM2NlriTable that have been\nplaced in this peer's Adj-Ribs-Out.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 3.2\"\"\",\n        }, # table\n        \"jnxBgpM2AdjRibsOutEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PeerIndex\",\n                \"jnxBgpM2NlriAfi\",\n                \"jnxBgpM2NlriSafi\",\n                \"jnxBgpM2NlriPrefix\",\n                \"jnxBgpM2NlriPrefixLen\",\n                \"jnxBgpM2AdjRibsOutIndex\",\n            ],\n            \"description\" :\n                \"\"\"List of BGP routes that have been placed into a\npeer's Adj-Ribs-Out.\"\"\",\n        }, # row\n        \"jnxBgpM2AdjRibsOutIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Certain extensions to BGP permit multiple instance of\na per afi, per safi prefix to be advertised to a peer.\nThis object allows the enumeration of them.\"\"\",\n        }, # column\n        \"jnxBgpM2AdjRibsOutRoute\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object points to the route in the jnxBgpM2NlriTable\nthat corresponds to the entry in the peer's\nAdj-Rib-Out.  Outgoing route maps are not\nreflected at this point as those are part of the\nUpdate-Send process.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 9.2\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the jnxBgpM2PathAttrTable.\"\"\",\n        }, # scalar\n        \"jnxBgpM2PathAttrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Provides per advertised network-prefix attribute data,\nas advertised over a peering session.\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains data about a given network\nprefix, per-prefix and per-advertising peer.\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"igp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ultimate origin of the path information.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrNextHopAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address family of the address for\nthe border router that should be used\nto access the destination network.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the border router that\nshould be used to access the destination\nnetwork.  This address is the nexthop\naddress received in the UPDATE packet.\nThe address family of this object will be the\nsame as that of the prefix in this row.\n\nNote that for RFC2545 style double nexthops,\nthis object will always contain the global scope\nnexthop.  jnxBgpM2LinkLocalNextHopTable will contain\nthe linklocal scope nexthop.\n\nIn the case that the mechanism documented in\ndraft-kato-bgp-ipv6-link-local-00.txt is used and\nonly a link local nexthop has been sent, ,\njnxBgpM2LinkLocalNextHopPresent will be false\nand jnxBgpM2PathAttrNextHop will contain the link local\nnexthop.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrMedPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether or not the MED value is present.\nIf it is not present, the jnxBgpM2PathAttrMed\nobject has no useful value and should be set to 0.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrMed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This metric is used to discriminate\nbetween multiple exit points to an\nadjacent autonomous system.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrLocalPrefPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether or not the LocalPref value is present.\nIf it is not present, the jnxBgpM2PathAttrLocalPref\nobject has no useful value and should be set to 0.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrLocalPref\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The originating BGP4 speakers degree of\npreference for an advertised route.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrAtomicAggregate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atomicAggregatePresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atomicAggregateMissing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When this object is set to atomicAggregatePresent,\nthe ATOMIC_AGGREGATE Path Attribute is present\nand indicates that the NLRI MUST NOT be made\nmore specific.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrAggregatorAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The AS number of the last BGP4 speaker that\nperformed route aggregation.  A value of\nzero (0) indicates the absence of this\nattribute.\n\nNote propagation of AS of zero is illegal in\nthe Internet.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrAggregatorAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the last BGP4 speaker\nthat performed route aggregation.  A\nvalue of 0.0.0.0 indicates the absence\nof this attribute.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathCalcLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value represents the calculated length of the\nAS Path according to the rules of the BGP specification.\nThis value is used in route selection.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 9.1.2.2.a\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a string depicting the autonomous system\npath to this network which was received from the\npeer which advertised it.  The format of the string\nis implementation-dependent, and should be designed\nfor operator readability.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is a unique index for the decomposed AS Path\nin the jnxBgpM2AsPathTable.  It is assigned by the\nagent at the point of creation of the jnxBgpM2AsPathTable\nrow entry.  While its value is guaranteed to be unique\nat any time, it is otherwise opaque to the management\napplication with respect to its value or the contiguity\nof jnxBgpM2AsPathIndex row instance values across rows\nof the jnxBgpM2AsPathTable.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPath4byteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table is present for BGP speakers that support\nthe AS 4byte specification and are functioning as\na router between 2-byte and 4-byte AS space.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-as4bytes-04.txt - BGP support for\nfour-octet AS number space\"\"\",\n        }, # table\n        \"jnxBgpM2AsPath4byteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-V2-MIB-JUNIPER\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"jnxBgpM2PathAttrEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Each row contains the information for the AS 4-byte\nextension's NEW_AS_PATH and NEW_AGGREGATOR attributes.\"\"\",\n        }, # row\n        \"jnxBgpM2AsPath4bytePathPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value may only be true if this BGP Speaker\nis functioning as a router between ASs that\nare in 2-byte and 4-byte AS space.  If this\nvalue is true, then the NEW_AS_PATH attributes\nare present and the 4-byte versions of the\nappropriate path attributes are in this row.\n\nIf this value is false, then the following values\nwill be present in the row:\n\njnxBgpM2PathAttrAggregatorAS - zero (0).\njnxBgpM2AsPathCalcLength - zero (0).\njnxBgpM2AsPathString - zero (0) length string.\njnxBgpM2AsPathIndex - zero (0).\"\"\",\n        }, # column\n        \"jnxBgpM2AsPath4byteAggregatorAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The NEW_AGGREGATOR AS number of the last BGP4 speaker\nthat performed route aggregation.  A value of\nzero (0) indicates the absence of this\nattribute.\n\nNote propagation of AS of zero is illegal in\nthe Internet.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPath4byteCalcLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value represents the calculated length of the\nNEW_AS_PATH according to the rules of the BGP specification.\nThis value is used in route selection.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-17.txt, Sec. 9.1.2.2.a\"\"\",\n        }, # column\n        \"jnxBgpM2AsPath4byteString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a string depicting the autonomous system\npath to this network which was received from the\npeer which advertised it.  The format of the string\nis implementation-dependent, and should be designed\nfor operator readability.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPath4byteIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is a unique index for the decomposed AS Path\nin the jnxBgpM2AsPathTable.  It is assigned by the\nagent at the point of creation of the jnxBgpM2AsPathTable\nrow entry.  While its value is guaranteed to be unique\nat any time, it is otherwise opaque to the management\napplication with respect to its value or the contiguity\nof jnxBgpM2AsPathIndex row instance values across rows\nof the jnxBgpM2AsPathTable. \"\"\",\n        }, # column\n        \"jnxBgpM2AsPathTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Path Attribute AS Path Table\ncontains the per network path (NLRI)\nAS PATH data received from the\nadvertising BGP peer.\"\"\",\n        }, # table\n        \"jnxBgpM2AsPathEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n                \"jnxBgpM2AsPathSegmentIndex\",\n                \"jnxBgpM2AsPathElementIndex\",\n                \"jnxBgpM2AsPathElementValue\",\n            ],\n            \"description\" :\n                \"\"\"Information about an AS path provided with a path to\na network.\"\"\",\n        }, # row\n        \"jnxBgpM2AsPathSegmentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A per-AS path segment index.  This will index a set of\nautonomous systems in an AS path which are part\nof the same sequence or set (as determined by\nthe row value of jnxBgpM2AsPathType, which\nshould be the same value for each jnxBgpM2AsPathTable\nentry indexed by the same (jnxBgpM2PathAttrIndex,\njnxBgpM2AsPathIndex) pair).\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathElementIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A per-AS element index.  This will index a particular\nAS within a sequence or set of autonomous systems in\nan AS path.\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"asSet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"asSequence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"confedSequence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"confedSet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of sequence in which this asPath\nwas advertised as an attribute.  Note that\nall asPath row instances for a given (jnxBgpM2PathAttrIndex,\njnxBgpM2AsPathIndex) index pair will have their\njnxBgpM2AsPathType set to the same value.\nThe values for jnxBgpM2AsPathType are\ninterpreted as defined in the base BGP document\nand the BGP AS Confederations document.\"\"\",\n            \"reference>\" :\n                \"\"\"draft-ietf-idr-bgp4-16\nRFC 3065 - BGP AS Confederations\"\"\",\n        }, # column\n        \"jnxBgpM2AsPathElementValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An AS value for an AS the related NLRI traversed\nin the propagation of its advertisement.  This\nvalue is to be interpreted in the context of the\nsequence implied by jnxBgpM2AsPathIndex and\njnxBgpM2AsPathType (and, in sequence of the\nother table rows with the same value of\njnxBgpM2PathAttrIndex and jnxBgpM2AsPathIndex).\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrUnknownTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Path Attribute Unknown Table\ncontains the per network path (NLRI)\ndata on the path attributes advertised\nwith a route but not known to the local BGP implementation\nor not otherwise capable of being returned from this agent.\n\nThe absence of row data for a given index value for\njnxBgpM2PathAttrIndex indicates a lack of such unknown\nattribute information for the indicated network path\n(as indexed by that jnxBgpM2PathAttrIndex value in the\njnxBgpM2PathAttrTable).\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrUnknownEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n                \"jnxBgpM2PathAttrUnknownIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about an unknown attribute\nprovided with a path to a network.\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrUnknownIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integer index for a row in this table.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrUnknownType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute type advertised with this unknown\nattribute by the peer.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrUnknownValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4070\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4070\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value of path attribute not understood\nby the base BGP-4 document.\n\nOctets beyond the maximum size, if any,\nare not recorded by this row object. \"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8\",\n        }, # node\n        \"jnxBgpM2PathAttrNonCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1\",\n        }, # node\n        \"jnxBgpM2PathAttrCommunityExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.1997\",\n        }, # node\n        \"jnxBgpM2PathAttrCommTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.1997.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Path Attribute Community Table\ncontains the per network path (NLRI)\ndata on the community membership advertised\nwith a route.  The absence of row\ndata for a given index value for jnxBgpM2PathAttrIndex\nindicates a lack of this attribute information\nfor the indicated network path (as indexed by\nthat jnxBgpM2PathAttrIndex value in the jnxBgpM2PathAttrTable).\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrCommEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.1997.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n                \"jnxBgpM2PathAttrCommIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a community association\nprovided with a path to a network.\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrCommIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.1997.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integer index for a row in this table.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrCommValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.1997.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Community\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value representing a community.   There are certain\n4-octet long values which could be returned in this\ncolumnar row data that carry additional semantics.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1997 - BGP Communities Attribute\"\"\",\n        }, # column\n        \"jnxBgpM2LinkLocalNextHopTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2545\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of link local nexthops as sent by RFC 2545\nfor IPv6 BGP Speakers.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2545 - Use of BGP-4 Multiprotocol Extensions\nfor IPv6 Inter-Domain Routing\"\"\",\n        }, # table\n        \"jnxBgpM2LinkLocalNextHopEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2545.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing the link-local nexthops as sent\nby a BGP speaker running RFC 2545 extensions for\ndouble-nexthops.\"\"\",\n        }, # row\n        \"jnxBgpM2LinkLocalNextHopPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2545.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is TRUE if and only if the BGP\nspeaker is receiving IPv6 NLRI using the\nRFC 2545 double nexthop convention and it\nhas received a link local scope nexthop in\naddition to the global scope nexthop.\"\"\",\n        }, # column\n        \"jnxBgpM2LinkLocalNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2545.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"20\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"20\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value contains an IPv6 link local address of\nInetAddressType of type ipv6z.  This value is only\npresent if jnxBgpM2LinkLocalNextHopPresent is true.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrRouteReflectionExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796\",\n        }, # node\n        \"jnxBgpM2PathAttrOriginatorIdTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Per prefix data pertinent to advertisement of a\nnetwork prefix through an originator.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrOriginatorIdEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains data pertinent to a network\nprefix as received through its originating BGP\nroute reflector.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2796 - BGP Route Reflection\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrOriginatorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Originator-ID identifying the router that initially\nadvertised this destination to a Route Reflector.  A\nvalue of 0.0.0.0 indicates the absence of this attribute.\"\"\",\n            \"reference>\" :\n                \"\"\"This attribute is defined in [RFC2796].\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrClusterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Path Attribute Cluster Table\ncontains the per network path (NLRI)\ndata on the reflection path which a\nroute has traversed.  The absence of row\ndata for a given index value for jnxBgpM2PathAttrIndex\nindicates a lack of this attribute information\nfor the indicated network path (as indexed by\nthat jnxBgpM2PathAttrIndex value in the jnxBgpM2PathAttrTable).\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrClusterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n                \"jnxBgpM2PathAttrClusterIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a cluster traversal\nprovided with a path to a network.\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrClusterIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integral index for a row in this table.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrClusterValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.2796.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2Identifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A four octet long value representing a part of the\nreflection path that the route has passed.  Each such four\noctet long value represents the ID of a cluster that\nthe route has traversed.  The sequence of this path as\nreceived in the route advertisement will be preserved in\nthe sequence of jnxBgpM2PathAttrClusterTable rows (and the\njnxBgpM2PathAttrClusterValues in each row) as returned for\na given jnxBgpM2PathAttrIndex value, and the monotonically\nincreasing sequence of jnxBgpM2PathAttrClusterIndex values\nfor that jnxBgpM2PathAttrIndex.\"\"\",\n            \"reference>\" :\n                \"\"\"This attribute is defined in [RFC2796].\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrExtCommTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.65001\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The BGP-4 Path Attribute Community Table\ncontains the per network path (NLRI)\ndata on the extended community membership advertised\nwith a route.  The absence of row\ndata for a given index value for jnxBgpM2PathAttrIndex\nindicates a lack of this attribute information\nfor the indicated network path (as indexed by\nthat jnxBgpM2PathAttrIndex value in the jnxBgpM2PathAttrTable).\n\nXXX JMH - can not assign the OID until an RFC is published.\"\"\",\n        }, # table\n        \"jnxBgpM2PathAttrExtCommEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.65001.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxBgpM2PathAttrIndex\",\n                \"jnxBgpM2PathAttrExtCommIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about an extended community association\nprovided with a path to a network.\"\"\",\n        }, # row\n        \"jnxBgpM2PathAttrExtCommIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.65001.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integral index for a row in this table.\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrExtCommValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.1.65001.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BGP4-V2-MIB-JUNIPER\", \"name\" : \"JnxBgpM2ExtendedCommunity\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value representing an extended community which was\nreceived with the route implied by the jnxBgpM2PathAttr\nIndex value of this row data.   There are certain\n8-octet long values which could be returned in this\ncolumnar row data that carry additional semantics.\"\"\",\n            \"reference>\" :\n                \"\"\"BGP-EXTCOMM - BGP Extended Communities Attribute\"\"\",\n        }, # column\n        \"jnxBgpM2PathAttrCapExts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.3.8.2\",\n        }, # node\n        \"jnxBgpM2Conformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4\",\n        }, # node\n        \"jnxBgpM2MIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.1\",\n        }, # node\n        \"jnxBgpM2MIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"jnxBgpM2Established\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxBgpM2PeerLocalAddrType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddrType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceived\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            },\n            \"description\" :\n                \"\"\"The BGP Established event is generated when\nthe BGP FSM enters the ESTABLISHED state.\"\"\",\n        }, # notification\n        \"jnxBgpM2BackwardTransition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.1.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxBgpM2PeerLocalAddrType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddrType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceived\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceivedText\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            },\n            \"description\" :\n                \"\"\"The BGPBackwardTransition Event is generated\nwhen the BGP FSM moves from a higher numbered\nstate to a lower numbered state.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"jnxBgpM2AuthenticationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2SupportedAuthCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2SupportedAuthValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthSentCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthSentValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthRcvd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthRcvdCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerAuthRcvdValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP authentication.\"\"\",\n        }, # group\n        \"jnxBgpM2CommunitiesGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PathAttrCommIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrCommValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP communities.\"\"\",\n        }, # group\n        \"jnxBgpM2ExtCommunitiesGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PathAttrExtCommIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrExtCommValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP extended communities.\"\"\",\n        }, # group\n        \"jnxBgpM2RouteReflectionGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2RouteReflector\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2ClusterId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerReflectorClient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrOriginatorId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrClusterIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrClusterValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP route reflection.\"\"\",\n        }, # group\n        \"jnxBgpM2AsConfederationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2ConfederationRouter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2ConfederationId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerConfedMember\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP confederation membership.\"\"\",\n        }, # group\n        \"jnxBgpM2TimersGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PeerFsmEstablishedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerInUpdatesElapsedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerConnectRetryInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerHoldTimeConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerKeepAliveConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerMinASOrigInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerMinRouteAdverInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerKeepAlive\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects associated with BGP peering timers.\"\"\",\n        }, # group\n        \"jnxBgpM2CountersGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PeerInUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerOutUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerInTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerOutTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerFsmEstablishedTrans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixCountersAfi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixCountersSafi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixInPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixInPrefixesAccepted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixInPrefixesRejected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PrefixOutPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects to count discrete events and exchanges on BGP\nsessions.\"\"\",\n        }, # group\n        \"jnxBgpM2CapabilitiesGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2CapabilitySupportAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2SupportedCapabilityCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2SupportedCapability\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapAnnouncedCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapAnnouncedIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapAnnouncedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapReceivedCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapReceivedIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerCapReceivedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects to report capabilities as received on BGP\nsessions.\"\"\",\n        }, # group\n        \"jnxBgpM2AsPathGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2AsPathSegmentIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathElementIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathElementValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Objects to report AS paths received on BGP NLRIs.\"\"\",\n        }, # group\n        \"jnxBgpM2As4byteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2AsSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPath4bytePathPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPath4byteAggregatorAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPath4byteCalcLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPath4byteString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPath4byteIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"AS Size objects.\"\"\",\n        }, # group\n        \"jnxBgpM2BaseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2LocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2LocalIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2VersionIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2VersionSupported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Basic objects in local BGP implementation.\"\"\",\n        }, # group\n        \"jnxBgpM2ErrorsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PeerLastErrorReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceivedData\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceivedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorReceivedText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorSentData\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorSentTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLastErrorSentText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Errors received on BGP peering sessions.\"\"\",\n        }, # group\n        \"jnxBgpM2PeerGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PeerIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerConfiguredVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerNegotiatedVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerLocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemotePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRemoteAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerRoutingInstance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Core object types on BGP peering sessions.\"\"\",\n        }, # group\n        \"jnxBgpM2PathAttributesGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2PathAttrCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathCalcLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathElementValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriAfi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriBest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriPrefix\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriPrefixLen\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriSafi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriOpaqueType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriOpaquePointer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2NlriCalcLocalPref\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AdjRibsOutIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AdjRibsOutRoute\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrAggregatorAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrAggregatorAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrAtomicAggregate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrLocalPref\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrLocalPrefPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrMed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrMedPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrNextHopAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrUnknownIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrUnknownType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttrUnknownValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Attributes received on BGP peering sessions.\"\"\",\n        }, # group\n        \"jnxBgpM2PeerConfigurationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2CfgBaseScalarStorageType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgLocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgLocalIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerNextIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerConfiguredVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgAllowVersionNegotiation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerLocalAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerLocalAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerLocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerRemoteAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerRemoteAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerRemotePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerRemoteAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerEntryStorageType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerBgpPeerEntry\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerRowEntryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerConnectRetryInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerHoldTimeConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerKeepAliveConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerMinASOrigInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerMinRouteAdverInter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Configuration objects for BGP peers.\"\"\",\n        }, # group\n        \"jnxBgpM2PeerAuthConfigurationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2CfgPeerAuthEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerAuthCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerAuthValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Configuration objects for BGP peers that support\nauthentication.\"\"\",\n        }, # group\n        \"jnxBgpM2PeerRouteReflectorCfgGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.17\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2CfgRouteReflector\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgClusterId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerReflectorClient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Configuration objects for BGP peers that support route\nreflection.\"\"\",\n        }, # group\n        \"jnxBgpM2PeerAsConfederationCfgGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2CfgConfederationRouter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgConfederationId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CfgPeerConfedMember\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Configuration objects for BGP peers that support BGP\nconfederations.\"\"\",\n        }, # group\n        \"jnxBgpM2MIBNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2Established\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2BackwardTransition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This group contains objects for notifications\nsupported by this mib module.\"\"\",\n        }, # group\n        \"jnxBgpM2Rfc2545Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"jnxBgpM2LinkLocalNextHopPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2LinkLocalNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This group is required for peers that support exchanging\nof IPv6 NLRI per RFC 2545.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"jnxBgpM2MIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BGP4-V2-MIB-JUNIPER\",\n            \"oid\" : \"1.3.6.1.4.1.2636.5.1.1.4.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the BGP4 mib.\"\"\",\n            \"requires\" : {\n                \"jnxBgpM2TimersGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CountersGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2CapabilitiesGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2AsPathGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2As4byteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2BaseGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2ErrorsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PeerGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2PathAttributesGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\"\n                },\n                \"jnxBgpM2MIBNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The notifications group is completely optional,\nbut highly recommended.\"\"\",\n                },\n                \"jnxBgpM2AuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The authentication group is\nmandatory only for those implementations which\nsupport sending and receiving authentication\ninformation with peers in the BGP Authentication\nField.\"\"\",\n                },\n                \"jnxBgpM2CommunitiesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The communities group is mandatory only for those\nwhich support the BGP community attribute.\"\"\",\n                },\n                \"jnxBgpM2ExtCommunitiesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The communities group is mandatory only for those\nwhich support the BGP extended community attribute.\"\"\",\n                },\n                \"jnxBgpM2RouteReflectionGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The communities group is mandatory only for those\nwhich support the BGP route reflection relationships.\"\"\",\n                },\n                \"jnxBgpM2AsConfederationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"The communities group is mandatory only for those\nwhich support the BGP confederation membership.\"\"\",\n                },\n                \"jnxBgpM2PeerConfigurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"This group is optional for implementations that wish to\nsupport configuration via SNMP.\"\"\",\n                },\n                \"jnxBgpM2PeerAuthConfigurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"This group is optional for implementations that wish to\nsupport configuration of BGP authentication via SNMP.\nImplementation of this feature requires support of the\njnxBgpM2PeerConfigurationGroup.\"\"\",\n                },\n                \"jnxBgpM2PeerRouteReflectorCfgGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"This group is optional for implementations that wish to\nsupport configuration of route reflection via SNMP.\nImplementation of this feature requires support of the\njnxBgpM2PeerConfigurationGroup.\"\"\",\n                },\n                \"jnxBgpM2PeerAsConfederationCfgGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"This group is optional for implementations that wish to\nsupport configuration of BGP AS Confederations via SNMP.\nImplementation of this feature requires support of the\njnxBgpM2PeerConfigurationGroup.\"\"\",\n                },\n                \"jnxBgpM2Rfc2545Group\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BGP4-V2-MIB-JUNIPER\",\n                    \"description\" :\n                        \"\"\"This group is required for peers that support exchanging\nof IPv6 NLRI per RFC 2545.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/BRIDGE-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python BRIDGE-MIB\n\nFILENAME = \"/home/klette/mibs/v2/BRIDGE-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"BRIDGE-MIB\",\n\n    \"BRIDGE-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Bridge MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"Email: bridge-mib@ietf.org\n\nK.C. Norseth (Editor)\nL-3 Communications\nTel: +1 801-594-2809\nEmail: kenyon.c.norseth@L-3com.com\nPostal: 640 N. 2200 West.\nSalt Lake City, Utah 84116-0850\nLes Bell (Editor)\n3Com Europe Limited\nPhone: +44 1442 438025\nEmail: elbell@ntlworld.com\nPostal: 3Com Centre, Boundary Way\nHemel Hempstead\nHerts.  HP2 7YU\nUK\n\nSend comments to <bridge-mib@ietf.org>\"\"\",\n        \"description\" :\n            \"\"\"The Bridge MIB module for managing devices that support\nIEEE 802.1D.\n\nCopyright (C) The Internet Society (2005).  This version of\nthis MIB module is part of RFC 4188; see the RFC itself for\nfull legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2005-09-19 00:00\",\n                \"description\" :\n                    \"\"\"Third revision, published as part of RFC 4188.\n\nThe MIB module has been converted to SMIv2 format.\nConformance statements have been added and some\ndescription and reference clauses have been updated.\n\nThe object dot1dStpPortPathCost32 was added to\nsupport IEEE 802.1t and the permissible values of\ndot1dStpPriority and dot1dStpPortPriority have been\nclarified for bridges supporting IEEE 802.1t or\nIEEE 802.1w.\n\nThe interpretation of dot1dStpTimeSinceTopologyChange\nhas been clarified for bridges supporting the Rapid\nSpanning Tree Protocol (RSTP).\"\"\",\n            },\n            {\n                \"date\" : \"1993-07-31 00:00\",\n                \"description\" :\n                    \"\"\"Second revision, published as part of RFC 1493.\"\"\",\n            },\n            {\n                \"date\" : \"1991-12-31 00:00\",\n                \"description\" :\n                    \"\"\"Initial revision, published as part of RFC 1286.\"\"\",\n            },\n        ),\n        \"identity node\" : \"dot1dBridge\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n    ),\n\n    \"typedefs\" : {\n        \"BridgeId\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"The Bridge-Identifier, as used in the Spanning Tree\nProtocol, to uniquely identify a bridge.  Its first two\noctets (in network byte order) contain a priority value,\nand its last 6 octets contain the MAC address used to\nrefer to a bridge in a unique fashion (typically, the\nnumerically smallest MAC address of all ports on the\nbridge).\"\"\",\n        },\n        \"Timeout\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"A Spanning Tree Protocol (STP) timer in units of 1/100\nseconds.  Several objects in this MIB module represent\nvalues of timers used by the Spanning Tree Protocol.\nIn this MIB, these timers have values in units of\nhundredths of a second (i.e., 1/100 secs).\n\nThese timers, when stored in a Spanning Tree Protocol's\nBPDU, are in units of 1/256 seconds.  Note, however, that\n802.1D-1998 specifies a settable granularity of no more\nthan one second for these timers.  To avoid ambiguity,\na conversion algorithm is defined below for converting\nbetween the different units, which ensures a timer's\nvalue is not distorted by multiple conversions.\n\nTo convert a Timeout value into a value in units of\n1/256 seconds, the following algorithm should be used:\n\n    b = floor( (n * 256) / 100)\n\nwhere:\n    floor   =  quotient [ignore remainder]\n    n is the value in 1/100 second units\n    b is the value in 1/256 second units\n\nTo convert the value from 1/256 second units back to\n1/100 seconds, the following algorithm should be used:\n\n    n = ceiling( (b * 100) / 256)\n\nwhere:\n    ceiling = quotient [if remainder is 0], or\n              quotient + 1 [if remainder is nonzero]\n    n is the value in 1/100 second units\n    b is the value in 1/256 second units\n\nNote: it is important that the arithmetic operations are\ndone in the order specified (i.e., multiply first,\ndivide second).\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"dot1dBridge\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17\",\n            \"status\" : \"current\",\n        }, # node\n        \"dot1dNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.0\",\n        }, # node\n        \"dot1dBase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1\",\n        }, # node\n        \"dot1dBaseBridgeAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address used by this bridge when it must be\nreferred to in a unique fashion.  It is recommended\nthat this be the numerically smallest MAC address of\nall ports that belong to this bridge.  However, it is only\nrequired to be unique.  When concatenated with\ndot1dStpPriority, a unique BridgeIdentifier is formed,\nwhich is used in the Spanning Tree Protocol.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clauses 14.4.1.1.3 and 7.12.5\"\"\",\n        }, # scalar\n        \"dot1dBaseNumPorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"ports\",\n            \"description\" :\n                \"\"\"The number of ports controlled by this bridging\nentity.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.4.1.1.3\"\"\",\n        }, # scalar\n        \"dot1dBaseType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"transparent-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sourceroute-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"srt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates what type of bridging this bridge can\nperform.  If a bridge is actually performing a\ncertain type of bridging, this will be indicated by\nentries in the port table for the given type.\"\"\",\n        }, # scalar\n        \"dot1dBasePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains generic information about every\nport that is associated with this bridge.  Transparent,\nsource-route, and srt ports are included.\"\"\",\n        }, # table\n        \"dot1dBasePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dBasePort\",\n            ],\n            \"description\" :\n                \"\"\"A list of information for each port of the bridge.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.4.2, 14.6.1\"\"\",\n        }, # row\n        \"dot1dBasePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port for which this entry\ncontains bridge management information.\"\"\",\n        }, # column\n        \"dot1dBasePortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the ifIndex object,\ndefined in IF-MIB, for the interface corresponding\nto this port.\"\"\",\n        }, # column\n        \"dot1dBasePortCircuit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For a port that (potentially) has the same value of\ndot1dBasePortIfIndex as another port on the same bridge.\nThis object contains the name of an object instance\nunique to this port.  For example, in the case where\nmultiple ports correspond one-to-one with multiple X.25\nvirtual circuits, this value might identify an (e.g.,\nthe first) object instance associated with the X.25\nvirtual circuit corresponding to this port.\n\nFor a port which has a unique value of\ndot1dBasePortIfIndex, this object can have the value\n{ 0 0 }.\"\"\",\n        }, # column\n        \"dot1dBasePortDelayExceededDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames discarded by this port due\nto excessive transit delay through the bridge.  It\nis incremented by both transparent and source\nroute bridges.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1dBasePortMtuExceededDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames discarded by this port due\nto an excessive size.  It is incremented by both\ntransparent and source route bridges.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1dStp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2\",\n        }, # node\n        \"dot1dStpProtocolSpecification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"decLb100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ieee8021d\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of what version of the Spanning Tree\nProtocol is being run.  The value 'decLb100(2)'\nindicates the DEC LANbridge 100 Spanning Tree protocol.\nIEEE 802.1D implementations will return 'ieee8021d(3)'.\nIf future versions of the IEEE Spanning Tree Protocol\nthat are incompatible with the current version\nare released a new value will be defined.\"\"\",\n        }, # scalar\n        \"dot1dStpPriority\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the write-able portion of the Bridge ID\n(i.e., the first two octets of the (8 octet long) Bridge\nID).  The other (last) 6 octets of the Bridge ID are\ngiven by the value of dot1dBaseBridgeAddress.\nOn bridges supporting IEEE 802.1t or IEEE 802.1w,\npermissible values are 0-61440, in steps of 4096.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998 clause 8.10.2, Table 8-4,\nIEEE 802.1t clause 8.10.2, Table 8-4, clause 14.3.\"\"\",\n        }, # scalar\n        \"dot1dStpTimeSinceTopologyChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the\nlast time a topology change was detected by the\nbridge entity.\nFor RSTP, this reports the time since the tcWhile\ntimer for any port on this Bridge was nonzero.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998 clause 14.8.1.1.,\nIEEE 802.1w clause 14.8.1.1.\"\"\",\n        }, # scalar\n        \"dot1dStpTopChanges\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of topology changes detected by\nthis bridge since the management entity was last\nreset or initialized.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998 clause 14.8.1.1.\"\"\",\n        }, # scalar\n        \"dot1dStpDesignatedRoot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"BridgeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bridge identifier of the root of the spanning\ntree, as determined by the Spanning Tree Protocol,\nas executed by this node.  This value is used as\nthe Root Identifier parameter in all Configuration\nBridge PDUs originated by this node.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.1\"\"\",\n        }, # scalar\n        \"dot1dStpRootCost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cost of the path to the root as seen from\nthis bridge.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.2\"\"\",\n        }, # scalar\n        \"dot1dStpRootPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port that offers the lowest\ncost path from this bridge to the root bridge.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.3\"\"\",\n        }, # scalar\n        \"dot1dStpMaxAge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The maximum age of Spanning Tree Protocol information\nlearned from the network on any port before it is\ndiscarded, in units of hundredths of a second.  This is\nthe actual value that this bridge is currently using.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.4\"\"\",\n        }, # scalar\n        \"dot1dStpHelloTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The amount of time between the transmission of\nConfiguration bridge PDUs by this node on any port when\nit is the root of the spanning tree, or trying to become\nso, in units of hundredths of a second.  This is the\nactual value that this bridge is currently using.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.5\"\"\",\n        }, # scalar\n        \"dot1dStpHoldTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"This time value determines the interval length\nduring which no more than two Configuration bridge\nPDUs shall be transmitted by this node, in units\nof hundredths of a second.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.14\"\"\",\n        }, # scalar\n        \"dot1dStpForwardDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"This time value, measured in units of hundredths of a\nsecond, controls how fast a port changes its spanning\nstate when moving towards the Forwarding state.  The\nvalue determines how long the port stays in each of the\nListening and Learning states, which precede the\nForwarding state.  This value is also used when a\ntopology change has been detected and is underway, to\nage all dynamic entries in the Forwarding Database.\n[Note that this value is the one that this bridge is\ncurrently using, in contrast to\ndot1dStpBridgeForwardDelay, which is the value that this\nbridge and all others would start using if/when this\nbridge were to become the root.]\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.6\"\"\",\n        }, # scalar\n        \"dot1dStpBridgeMaxAge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"parent module\" : {\n                        \"name\" : \"BRIDGE-MIB\",\n                        \"type\" : \"Timeout\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"600\",\n                        \"max\" : \"4000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"600\",\n                        \"max\" : \"4000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The value that all bridges use for MaxAge when this\nbridge is acting as the root.  Note that 802.1D-1998\nspecifies that the range for this parameter is related\nto the value of dot1dStpBridgeHelloTime.  The\ngranularity of this timer is specified by 802.1D-1998 to\nbe 1 second.  An agent may return a badValue error if a\nset is attempted to a value that is not a whole number\nof seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.8\"\"\",\n        }, # scalar\n        \"dot1dStpBridgeHelloTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"parent module\" : {\n                        \"name\" : \"BRIDGE-MIB\",\n                        \"type\" : \"Timeout\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"100\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"100\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The value that all bridges use for HelloTime when this\nbridge is acting as the root.  The granularity of this\ntimer is specified by 802.1D-1998 to be 1 second.  An\nagent may return a badValue error if a set is attempted\nto a value that is not a whole number of seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.9\"\"\",\n        }, # scalar\n        \"dot1dStpBridgeForwardDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"parent module\" : {\n                        \"name\" : \"BRIDGE-MIB\",\n                        \"type\" : \"Timeout\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"400\",\n                        \"max\" : \"3000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"400\",\n                        \"max\" : \"3000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"centi-seconds\",\n            \"description\" :\n                \"\"\"The value that all bridges use for ForwardDelay when\nthis bridge is acting as the root.  Note that\n802.1D-1998 specifies that the range for this parameter\nis related to the value of dot1dStpBridgeMaxAge.  The\ngranularity of this timer is specified by 802.1D-1998 to\nbe 1 second.  An agent may return a badValue error if a\nset is attempted to a value that is not a whole number\nof seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.3.10\"\"\",\n        }, # scalar\n        \"dot1dStpPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains port-specific information\nfor the Spanning Tree Protocol.\"\"\",\n        }, # table\n        \"dot1dStpPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dStpPort\",\n            ],\n            \"description\" :\n                \"\"\"A list of information maintained by every port about\nthe Spanning Tree Protocol state for that port.\"\"\",\n        }, # row\n        \"dot1dStpPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port for which this entry\ncontains Spanning Tree Protocol management information.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.8.2.1.2\"\"\",\n        }, # column\n        \"dot1dStpPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the priority field that is contained in\nthe first (in network byte order) octet of the (2 octet\nlong) Port ID.  The other octet of the Port ID is given\nby the value of dot1dStpPort.\nOn bridges supporting IEEE 802.1t or IEEE 802.1w,\npermissible values are 0-240, in steps of 16.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998 clause 8.10.2, Table 8-4,\nIEEE 802.1t clause 8.10.2, Table 8-4, clause 14.3.\"\"\",\n        }, # column\n        \"dot1dStpPortState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"blocking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"listening\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"learning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"broken\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port's current state, as defined by application of\nthe Spanning Tree Protocol.  This state controls what\naction a port takes on reception of a frame.  If the\nbridge has detected a port that is malfunctioning, it\nwill place that port into the broken(6) state.  For\nports that are disabled (see dot1dStpPortEnable), this\nobject will have a value of disabled(1).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.2\"\"\",\n        }, # column\n        \"dot1dStpPortEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The enabled/disabled status of the port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.2\"\"\",\n        }, # column\n        \"dot1dStpPortPathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contribution of this port to the path cost of\npaths towards the spanning tree root which include\nthis port.  802.1D-1998 recommends that the default\nvalue of this parameter be in inverse proportion to\nthe speed of the attached LAN.\n\nNew implementations should support dot1dStpPortPathCost32.\nIf the port path costs exceeds the maximum value of this\nobject then this object should report the maximum value,\nnamely 65535.  Applications should try to read the\ndot1dStpPortPathCost32 object if this object reports\nthe maximum value.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.3\"\"\",\n        }, # column\n        \"dot1dStpPortDesignatedRoot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"BridgeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique Bridge Identifier of the Bridge\nrecorded as the Root in the Configuration BPDUs\ntransmitted by the Designated Bridge for the\nsegment to which the port is attached.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.4\"\"\",\n        }, # column\n        \"dot1dStpPortDesignatedCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The path cost of the Designated Port of the segment\nconnected to this port.  This value is compared to the\nRoot Path Cost field in received bridge PDUs.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.5\"\"\",\n        }, # column\n        \"dot1dStpPortDesignatedBridge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"BridgeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Bridge Identifier of the bridge that this\nport considers to be the Designated Bridge for\nthis port's segment.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.6\"\"\",\n        }, # column\n        \"dot1dStpPortDesignatedPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Port Identifier of the port on the Designated\nBridge for this port's segment.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 8.5.5.7\"\"\",\n        }, # column\n        \"dot1dStpPortForwardTransitions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times this port has transitioned\nfrom the Learning state to the Forwarding state.\"\"\",\n        }, # column\n        \"dot1dStpPortPathCost32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.2.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"200000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"200000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contribution of this port to the path cost of\npaths towards the spanning tree root which include\nthis port.  802.1D-1998 recommends that the default\nvalue of this parameter be in inverse proportion to\nthe speed of the attached LAN.\n\nThis object replaces dot1dStpPortPathCost to support\nIEEE 802.1t.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1t clause 8.10.2, Table 8-5.\"\"\",\n        }, # column\n        \"dot1dSr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.3\",\n        }, # node\n        \"dot1dTp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4\",\n        }, # node\n        \"dot1dTpLearnedEntryDiscards\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Forwarding Database entries that\nhave been or would have been learned, but have been\ndiscarded due to a lack of storage space in the\nForwarding Database.  If this counter is increasing, it\nindicates that the Forwarding Database is regularly\nbecoming full (a condition that has unpleasant\nperformance effects on the subnetwork).  If this counter\nhas a significant value but is not presently increasing,\nit indicates that the problem has been occurring but is\nnot persistent.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.7.1.1.3\"\"\",\n        }, # scalar\n        \"dot1dTpAgingTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The timeout period in seconds for aging out\ndynamically-learned forwarding information.\n802.1D-1998 recommends a default of 300 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.7.1.1.3\"\"\",\n        }, # scalar\n        \"dot1dTpFdbTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about unicast\nentries for which the bridge has forwarding and/or\nfiltering information.  This information is used\nby the transparent bridging function in\ndetermining how to propagate a received frame.\"\"\",\n        }, # table\n        \"dot1dTpFdbEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dTpFdbAddress\",\n            ],\n            \"description\" :\n                \"\"\"Information about a specific unicast MAC address\nfor which the bridge has some forwarding and/or\nfiltering information.\"\"\",\n        }, # row\n        \"dot1dTpFdbAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unicast MAC address for which the bridge has\nforwarding and/or filtering information.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 7.9.1, 7.9.2\"\"\",\n        }, # column\n        \"dot1dTpFdbPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Either the value '0', or the port number of the port on\nwhich a frame having a source address equal to the value\nof the corresponding instance of dot1dTpFdbAddress has\nbeen seen.  A value of '0' indicates that the port\nnumber has not been learned, but that the bridge does\nhave some forwarding/filtering information about this\naddress (e.g., in the dot1dStaticTable).  Implementors\nare encouraged to assign the port value to this object\nwhenever it is learned, even for addresses for which the\ncorresponding value of dot1dTpFdbStatus is not\nlearned(3).\"\"\",\n        }, # column\n        \"dot1dTpFdbStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"learned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"self\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of this entry.  The meanings of the\nvalues are:\n    other(1) - none of the following.  This would\n        include the case where some other MIB object\n        (not the corresponding instance of\n        dot1dTpFdbPort, nor an entry in the\n        dot1dStaticTable) is being used to determine if\n        and how frames addressed to the value of the\n        corresponding instance of dot1dTpFdbAddress are\n        being forwarded.\n    invalid(2) - this entry is no longer valid (e.g.,\n        it was learned but has since aged out), but has\n        not yet been flushed from the table.\n    learned(3) - the value of the corresponding instance\n        of dot1dTpFdbPort was learned, and is being\n        used.\n    self(4) - the value of the corresponding instance of\n        dot1dTpFdbAddress represents one of the bridge's\n        addresses.  The corresponding instance of\n        dot1dTpFdbPort indicates which of the bridge's\n        ports has this address.\n    mgmt(5) - the value of the corresponding instance of\n        dot1dTpFdbAddress is also the value of an\n        existing instance of dot1dStaticAddress.\"\"\",\n        }, # column\n        \"dot1dTpPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about every port that\nis associated with this transparent bridge.\"\"\",\n        }, # table\n        \"dot1dTpPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dTpPort\",\n            ],\n            \"description\" :\n                \"\"\"A list of information for each port of a transparent\nbridge.\"\"\",\n        }, # row\n        \"dot1dTpPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port for which this entry\ncontains Transparent bridging management information.\"\"\",\n        }, # column\n        \"dot1dTpPortMaxInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The maximum size of the INFO (non-MAC) field that\nthis port will receive or transmit.\"\"\",\n        }, # column\n        \"dot1dTpPortInFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"The number of frames that have been received by this\nport from its segment.  Note that a frame received on the\ninterface corresponding to this port is only counted by\nthis object if and only if it is for a protocol being\nprocessed by the local bridging function, including\nbridge management frames.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1dTpPortOutFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"The number of frames that have been transmitted by this\nport to its segment.  Note that a frame transmitted on\nthe interface corresponding to this port is only counted\nby this object if and only if it is for a protocol being\nprocessed by the local bridging function, including\nbridge management frames.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1dTpPortInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"Count of received valid frames that were discarded\n(i.e., filtered) by the Forwarding Process.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1dStatic\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5\",\n        }, # node\n        \"dot1dStaticTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing filtering information configured\ninto the bridge by (local or network) management\nspecifying the set of ports to which frames received\nfrom specific ports and containing specific destination\naddresses are allowed to be forwarded.  The value of\nzero in this table, as the port number from which frames\nwith a specific destination address are received, is\nused to specify all ports for which there is no specific\nentry in this table for that particular destination\naddress.  Entries are valid for unicast and for\ngroup/broadcast addresses.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.7.2\"\"\",\n        }, # table\n        \"dot1dStaticEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dStaticAddress\",\n                \"dot1dStaticReceivePort\",\n            ],\n            \"description\" :\n                \"\"\"Filtering information configured into the bridge by\n(local or network) management specifying the set of\nports to which frames received from a specific port and\ncontaining a specific destination address are allowed to\nbe forwarded.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 14.7.2\"\"\",\n        }, # row\n        \"dot1dStaticAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The destination MAC address in a frame to which this\nentry's filtering information applies.  This object can\ntake the value of a unicast address, a group address, or\nthe broadcast address.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1998: clause 7.9.1, 7.9.2\"\"\",\n        }, # column\n        \"dot1dStaticReceivePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Either the value '0', or the port number of the port\nfrom which a frame must be received in order for this\nentry's filtering information to apply.  A value of zero\nindicates that this entry applies on all ports of the\nbridge for which there is no other applicable entry.\"\"\",\n        }, # column\n        \"dot1dStaticAllowedToGoTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports to which frames received from a\nspecific port and destined for a specific MAC address,\nare allowed to be forwarded.  Each octet within the\nvalue of this object specifies a set of eight ports,\nwith the first octet specifying ports 1 through 8, the\nsecond octet specifying ports 9 through 16, etc.  Within\neach octet, the most significant bit represents the\nlowest numbered port, and the least significant bit\nrepresents the highest numbered port.  Thus, each port\nof the bridge is represented by a single bit within the\nvalue of this object.  If that bit has a value of '1',\nthen that port is included in the set of ports; the port\nis not included if its bit has a value of '0'.  (Note\nthat the setting of the bit corresponding to the port\nfrom which a frame is received is irrelevant.)  The\ndefault value of this object is a string of ones of\nappropriate length.\n\nThe value of this object may exceed the required minimum\nmaximum message size of some SNMP transport (484 bytes,\nin the case of SNMP over UDP, see RFC 3417, section 3.2).\nSNMP engines on bridges supporting a large number of\nports must support appropriate maximum message sizes.\"\"\",\n        }, # column\n        \"dot1dStaticStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"deleteOnReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"deleteOnTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the status of this entry.\nThe default value is permanent(3).\n    other(1) - this entry is currently in use but the\n        conditions under which it will remain so are\n        different from each of the following values.\n    invalid(2) - writing this value to the object\n        removes the corresponding entry.\n    permanent(3) - this entry is currently in use and\n        will remain so after the next reset of the\n        bridge.\n    deleteOnReset(4) - this entry is currently in use\n        and will remain so until the next reset of the\n        bridge.\n    deleteOnTimeout(5) - this entry is currently in use\n        and will remain so until it is aged out.\"\"\",\n        }, # column\n        \"dot1dConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8\",\n        }, # node\n        \"dot1dGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1\",\n        }, # node\n        \"dot1dCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"newRoot\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"The newRoot trap indicates that the sending agent has\nbecome the new root of the Spanning Tree; the trap is\nsent by a bridge soon after its election as the new\nroot, e.g., upon expiration of the Topology Change Timer,\nimmediately subsequent to its election.  Implementation\nof this trap is optional.\"\"\",\n        }, # notification\n        \"topologyChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"A topologyChange trap is sent by a bridge when any of\nits configured ports transitions from the Learning state\nto the Forwarding state, or from the Forwarding state to\nthe Blocking state.  The trap is not sent if a newRoot\ntrap is sent for the same transition.  Implementation of\nthis trap is optional.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"dot1dBaseBridgeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dBaseBridgeAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBaseNumPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBaseType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Bridge level information for this device.\"\"\",\n        }, # group\n        \"dot1dBasePortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dBasePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortCircuit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortDelayExceededDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortMtuExceededDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Information for each port on this device.\"\"\",\n        }, # group\n        \"dot1dStpBridgeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dStpProtocolSpecification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpTimeSinceTopologyChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpTopChanges\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpDesignatedRoot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpRootCost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpRootPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpMaxAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpHelloTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpForwardDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpBridgeMaxAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpBridgeHelloTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpBridgeForwardDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Bridge level Spanning Tree data for this device.\"\"\",\n        }, # group\n        \"dot1dStpPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dStpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortPathCost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedRoot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedCost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedBridge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortForwardTransitions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Spanning Tree data for each port on this device.\"\"\",\n        }, # group\n        \"dot1dStpPortGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dStpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedRoot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedCost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedBridge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortDesignatedPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortForwardTransitions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpPortPathCost32\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Spanning Tree data for each port on this device.\"\"\",\n        }, # group\n        \"dot1dStpPortGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dStpPortPathCost32\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Spanning Tree data for devices supporting 32-bit\npath costs.\"\"\",\n        }, # group\n        \"dot1dTpBridgeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dTpLearnedEntryDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Bridge level Transparent Bridging data.\"\"\",\n        }, # group\n        \"dot1dTpFdbGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dTpFdbAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpFdbPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpFdbStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Filtering Database information for the Bridge.\"\"\",\n        }, # group\n        \"dot1dTpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dTpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpPortMaxInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpPortInFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpPortOutFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dTpPortInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Dynamic Filtering Database information for each port of\nthe Bridge.\"\"\",\n        }, # group\n        \"dot1dStaticGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1dStaticAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStaticReceivePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStaticAllowedToGoTo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStaticStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Static Filtering Database information for each port of\nthe Bridge.\"\"\",\n        }, # group\n        \"dot1dNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.1.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"newRoot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"topologyChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Group of objects describing notifications (traps).\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"bridgeCompliance1493\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for device support of bridging\nservices, as per RFC1493.\"\"\",\n            \"requires\" : {\n                \"dot1dBaseBridgeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpBridgeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the Spanning Tree Protocol.\"\"\",\n                },\n                \"dot1dStpPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the Spanning Tree Protocol.\"\"\",\n                },\n                \"dot1dTpBridgeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the transparent bridging mode.  A\ntransparent or SRT bridge will implement this group.\"\"\",\n                },\n                \"dot1dTpFdbGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the transparent bridging mode.  A\ntransparent or SRT bridge will implement this group.\"\"\",\n                },\n                \"dot1dTpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the transparent bridging mode.  A\ntransparent or SRT bridge will implement this group.\"\"\",\n                },\n                \"dot1dStaticGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"dot1dNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"bridgeCompliance4188\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.8.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for device support of bridging\nservices.  This supports 32-bit Path Cost values and the\nmore restricted bridge and port priorities, as per IEEE\n802.1t.\n\nFull support for the 802.1D management objects requires that\nthe SNMPv2-MIB [RFC3418] objects sysDescr, and sysUpTime, as\nwell as the IF-MIB [RFC2863] objects ifIndex, ifType,\nifDescr, ifPhysAddress, and ifLastChange are implemented.\"\"\",\n            \"requires\" : {\n                \"dot1dBaseBridgeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dBasePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"BRIDGE-MIB\"\n                },\n                \"dot1dStpBridgeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for\nbridges that support the Spanning Tree Protocol.\"\"\",\n                },\n                \"dot1dStpPortGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for\nbridges that support the Spanning Tree Protocol.\"\"\",\n                },\n                \"dot1dStpPortGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for bridges\nthat support the Spanning Tree Protocol and 32-bit path\ncosts.  In particular, this includes devices supporting\nIEEE 802.1t and IEEE 802.1w.\"\"\",\n                },\n                \"dot1dTpBridgeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for\nbridges that support the transparent bridging\nmode.  A transparent or SRT bridge will implement\nthis group.\"\"\",\n                },\n                \"dot1dTpFdbGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for\nbridges that support the transparent bridging\nmode.  A transparent or SRT bridge will implement\nthis group.\"\"\",\n                },\n                \"dot1dTpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is mandatory for\nbridges that support the transparent bridging\nmode.  A transparent or SRT bridge will implement\nthis group.\"\"\",\n                },\n                \"dot1dStaticGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"dot1dNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"dot1dStpPriority\" : {\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Integer32\",\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"0\",\n                                \"max\" : \"0\"\n                            },\n                            {\n                                \"min\" : \"4096\",\n                                \"max\" : \"4096\"\n                            },\n                            {\n                                \"min\" : \"8192\",\n                                \"max\" : \"8192\"\n                            },\n                            {\n                                \"min\" : \"12288\",\n                                \"max\" : \"12288\"\n                            },\n                            {\n                                \"min\" : \"16384\",\n                                \"max\" : \"16384\"\n                            },\n                            {\n                                \"min\" : \"20480\",\n                                \"max\" : \"20480\"\n                            },\n                            {\n                                \"min\" : \"24576\",\n                                \"max\" : \"24576\"\n                            },\n                            {\n                                \"min\" : \"28672\",\n                                \"max\" : \"28672\"\n                            },\n                            {\n                                \"min\" : \"32768\",\n                                \"max\" : \"32768\"\n                            },\n                            {\n                                \"min\" : \"36864\",\n                                \"max\" : \"36864\"\n                            },\n                            {\n                                \"min\" : \"40960\",\n                                \"max\" : \"40960\"\n                            },\n                            {\n                                \"min\" : \"45056\",\n                                \"max\" : \"45056\"\n                            },\n                            {\n                                \"min\" : \"49152\",\n                                \"max\" : \"49152\"\n                            },\n                            {\n                                \"min\" : \"53248\",\n                                \"max\" : \"53248\"\n                            },\n                            {\n                                \"min\" : \"57344\",\n                                \"max\" : \"57344\"\n                            },\n                            {\n                                \"min\" : \"61440\",\n                                \"max\" : \"61440\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"0\",\n                                \"max\" : \"61440\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"The possible values defined by IEEE 802.1t.\"\"\",\n                },\n                \"dot1dStpPortPriority\" : {\n                    \"module\" : \"BRIDGE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Integer32\",\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"0\",\n                                \"max\" : \"0\"\n                            },\n                            {\n                                \"min\" : \"16\",\n                                \"max\" : \"16\"\n                            },\n                            {\n                                \"min\" : \"32\",\n                                \"max\" : \"32\"\n                            },\n                            {\n                                \"min\" : \"48\",\n                                \"max\" : \"48\"\n                            },\n                            {\n                                \"min\" : \"64\",\n                                \"max\" : \"64\"\n                            },\n                            {\n                                \"min\" : \"80\",\n                                \"max\" : \"80\"\n                            },\n                            {\n                                \"min\" : \"96\",\n                                \"max\" : \"96\"\n                            },\n                            {\n                                \"min\" : \"112\",\n                                \"max\" : \"112\"\n                            },\n                            {\n                                \"min\" : \"128\",\n                                \"max\" : \"128\"\n                            },\n                            {\n                                \"min\" : \"144\",\n                                \"max\" : \"144\"\n                            },\n                            {\n                                \"min\" : \"160\",\n                                \"max\" : \"160\"\n                            },\n                            {\n                                \"min\" : \"176\",\n                                \"max\" : \"176\"\n                            },\n                            {\n                                \"min\" : \"192\",\n                                \"max\" : \"192\"\n                            },\n                            {\n                                \"min\" : \"208\",\n                                \"max\" : \"208\"\n                            },\n                            {\n                                \"min\" : \"224\",\n                                \"max\" : \"224\"\n                            },\n                            {\n                                \"min\" : \"240\",\n                                \"max\" : \"240\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"0\",\n                                \"max\" : \"240\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"The possible values defined by IEEE 802.1t.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CD6C.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CD6C\n\nFILENAME = \"EWCD6Cv3.mib\"\n\nMIB = {\n    \"moduleName\" : \"CD6C\",\n\n    \"CD6C\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Eaton-Williams Limited\"\"\",\n        \"contact\" : \n            \"\"\"\nFircroft Way\nEdenbridge\nKent\nTN8 6EZ\nPhone: +44 (0)1732 866055\nE-mail: support@eaton-williams.com\"\"\",\n        \"description\" :\n            \"\"\"\nMIB for CD6C Version 3.0\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2015-05-27 16:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"main\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n    ),\n\n    \"typedefs\" : {\n        \"DisplayString\" : {\n            \"basetype\" : \"OctetString\",\n        },\n        \"AbsoluteCounter32\" : {\n            \"basetype\" : \"Unsigned32\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ewltd\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657\",\n        }, # node\n        \"cd6c\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2\",\n        }, # node\n        \"main\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"system\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1\",\n        }, # node\n        \"cduStatusMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeNotConfigured\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeShutdownRemoteSwitch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"modeShutdownNetwork\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"modeShutdownManualOverrideSwitch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"modeFullManualControl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"modeStandby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"modeOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"modeFilling\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"modeFaultShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current operating mode of CDU\"\"\",\n        }, # scalar\n        \"cduStatusPrimaryTempT1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Primary temperature (T1) sensor value in 10th of degree Cel\nsius. Example 126 = 12.6 degree C\"\"\",\n        }, # scalar\n        \"cduStatusPrimaryTempT1US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Primary temperature (T1) sensor value in 10th of degree Fah\nrenheit. Example 584 = 54.8 degree F\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2a\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2a) sensor value in 10th of degree\nCelsius. Example 178 = 178 degree C\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2aUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2a) sensor value in 10th of degree\nFahrenheit. Example 641 = 64.1 degree F\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2b\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2b) sensor value in 10th of degree\nCelsius. Example 178 = 178 degree C\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2bUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2b) sensor value in 10th of degree\nFahrenheit. Example 641 = 64.1 degree F\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2) value in 10th of degree Celsius.\nThis value is the average of T2a and T2b sensor values. Exa\nmple 178 = 178 degree C\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryTempT2US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary temperature (T2) value in 10th of degree Fahrenhe\nit. This value is the average of T2a and T2b sensor values.\nExample 641 = 64.1 degree F\"\"\",\n        }, # scalar\n        \"cduStatusRoomTempT3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Room temperature (T3) sensor value in 10th of degree Celsiu\ns. Example 178 = 178 degree C\"\"\",\n        }, # scalar\n        \"cduStatusRoomTempT3US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Room temperature (T3) sensor value in 100th of degree Fahren\nheit. Example 641 = 64.1 degree F\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryReturnTempT4\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary return temperature (T3) sensor value in 10th of degree Celsiu\ns. Example 178 = 178 degree C\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryReturnTempT4US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary return temperature (T3) sensor value in 100th of degree Fahren\nheit. Example 641 = 64.1 degree F\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryFlowRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Flow Rate in litres/minute\"\"\",\n        }, # scalar\n        \"cduStatusSecondaryFlowRateUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Flow Rate in US gallons/minute\"\"\",\n        }, # scalar\n        \"cduStatusPS1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Pressure PS1 sensor value in 100th of bar. Example\n120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusPS1US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Pressure PS1 sensor value in 100th of psi. Example\n1740 = 17.40bar\"\"\",\n        }, # scalar\n        \"cduStatusPS2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Pressure PS2 sensor value in 100th of bar. Example\n120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusPS2US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Pressure PS2 sensor value in 100th of psi. Example\n1740 = 17.40psi\"\"\",\n        }, # scalar\n        \"cduStatusSecDiffPress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Differential Pressure (PS2 - PS1)  value in 100th\nof bar. Example 120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusSecDiffPressUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Secondary Differential Pressure (PS2 - PS1) sensor value in\n100th of psi. Example 1740 = 17.40psi\"\"\",\n        }, # scalar\n        \"cduStatusPS3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Inlet Pressure (PS3) sensor value in 100th of bar. Ex\nample 120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusPS3US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Inlet Pressure PS3 sensor value in 100th of psi. Exam\nple 1740 = 17.40psi\"\"\",\n        }, # scalar\n        \"cduStatusPS4\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Outlet Pressure (PS4) sensor value in 100th of bar. E\nxample 120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusPS4US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Outlet Pressure PS4 sensor value in 100th of psi. Exa\nmple 1740 = 17.40psi\"\"\",\n        }, # scalar\n        \"cduStatusFilterPressDiff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Differential Pressure (PS3 - PS4)  value in 100th of\nbar. Example 120 = 1.20bar\"\"\",\n        }, # scalar\n        \"cduStatusFilterDiffPressUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter Differential Pressure (PS3 - PS4) sensor value in 100\nth of psi. Example 1740 = 17.40psi\"\"\",\n        }, # scalar\n        \"cduStatusDewpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dewpoint value in 10th of degree Celsius. Example 126 = 12\n.6 degree C\"\"\",\n        }, # scalar\n        \"cduStatusDewpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dewpoint value in 10th of degree Fahrenheit. Example 584 =\n54.8 degree F\"\"\",\n        }, # scalar\n        \"cduStatusCurrentSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating setpoint value in 10th of degree Celsius. Example\n180 = 18.0 degree C\"\"\",\n        }, # scalar\n        \"cduStatusCurrentSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating setpoint value in 10th of degree Fahrenheit. Exam\nple 655 = 65.5 degree F\"\"\",\n        }, # scalar\n        \"cduStatusPrimaryFlowRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Primary Chilled Water Flow Rate in litres/minute\"\"\",\n        }, # scalar\n        \"cduStatusPrimaryFlowRateUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Primary Chilled Water Flow Rate in US gallons/minute\"\"\",\n        }, # scalar\n        \"cduStatusUnitDuty\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit Duty in kW\"\"\",\n        }, # scalar\n        \"cduStatusRoomRH\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Room Relative Humidity in 10th of %RH. Example 514 = 51.4 %R\nH\"\"\",\n        }, # scalar\n        \"cduStatusPumpSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump Speed\"\"\",\n        }, # scalar\n        \"cduStatusValveDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Valve Demand\"\"\",\n        }, # scalar\n        \"cduStatusPumpRuntimeP1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 Runtime in hours\"\"\",\n        }, # scalar\n        \"cduStatusPumpRuntimeP2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 Runtime in hours\"\"\",\n        }, # scalar\n        \"cduStatusValveRuntime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Valve 1 Runtime in hours\"\"\",\n        }, # scalar\n        \"cduStatusUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of minutes since CDU power-up\"\"\",\n        }, # scalar\n        \"cduFlowSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Secondary Flow Set point in l/m\"\"\",\n        }, # scalar\n        \"cduSecTempSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Secondary Temperature Set point in 1/10th deg Celsius\"\"\",\n        }, # scalar\n        \"cduSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CD6C Controller Software Version. Format Major * 100 + Minor, e.g Version 1.5 reported as 105\"\"\",\n        }, # scalar\n        \"traps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2\",\n        }, # node\n        \"mtrapargs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.3\",\n        }, # node\n        \"mtrapargsString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CD6C\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This allows our traps to be sent with an octet string argument\nthat may not be defined in the MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"notifications\" : {\n        \"cduPrimaryTempSensorT1OORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a02 - Primary Temperature T1 OOR\"\"\",\n        }, # notification\n        \"cduPrimaryTempSensorT1OORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a02 - Primary Temperature T1 OOR Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT2aOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a03 - Secondary Temperature T2a OOR\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT2aOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a03 - Secondary Temperature T2a OOR Cleared\"\"\",\n        }, # notification\n        \"cduRoomTempSensorT3OORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a04 - Room Temperature T3 OOR\"\"\",\n        }, # notification\n        \"cduRoomTempSensorT3OORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a04 - Room Temperature T3 OOR Cleared\"\"\",\n        }, # notification\n        \"cduPS1PressureSensorOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a05 - PS1 Pressure Sensor OOR\"\"\",\n        }, # notification\n        \"cduPS1PressureSensorOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a05 - PS1 Pressure Sensor OOR Cleared\"\"\",\n        }, # notification\n        \"cduPS3PressureSensorOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a07 - PS3 Pressure Sensor OOR\"\"\",\n        }, # notification\n        \"cduPS3PressureSensorOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a07 - PS3 Pressure Sensor OOR Cleared\"\"\",\n        }, # notification\n        \"cduPS4PressureSensorOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a08 - PS4 Pressure Sensor OOR\"\"\",\n        }, # notification\n        \"cduPS4PressureSensorOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a08 - PS4 Pressure Sensor OOR Cleared\"\"\",\n        }, # notification\n        \"cduWaterMakeUpEmptyAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w09 - Water Make-up Empty\"\"\",\n        }, # notification\n        \"cduWaterMakeUpEmptyCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w09 - Water Make-up Empty Cleared\"\"\",\n        }, # notification\n        \"cduInsufficientWaterLevelAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a10 - Insufficient Water Level\"\"\",\n        }, # notification\n        \"cduInsufficientWaterLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a10 - Insufficient Water Level Cleared\"\"\",\n        }, # notification\n        \"cduPump1InverterFaultAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a11 - Pump 1 Inverter Fault\"\"\",\n        }, # notification\n        \"cduPump1InverterFaultAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a11 - Pump 1 Inverter Fault Cleared\"\"\",\n        }, # notification\n        \"cduPump1InverterLowFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a12 - Pump 1 Inverter Low Flow\"\"\",\n        }, # notification\n        \"cduPump1InverterLowFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a12 - Pump 1 Inverter Low Flow Cleared\"\"\",\n        }, # notification\n        \"cduPump2InverterFaultAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a13 - Pump 2 Inverter Fault\"\"\",\n        }, # notification\n        \"cduPump2InverterFaultAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a13 - Pump 2 Inverter Fault Cleared\"\"\",\n        }, # notification\n        \"cduPump2InverterLowFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a14 - Pump 2 Inverter Low Flow\"\"\",\n        }, # notification\n        \"cduPump2InverterLowFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a14 - Pump 2 Inverter Low Flow Cleared\"\"\",\n        }, # notification\n        \"cduPump1DOLOverloadAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a15 - Pump 1 DOL Overload\"\"\",\n        }, # notification\n        \"cduPump1DOLOverloadAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a15 - Pump 1 DOL Overload Cleared\"\"\",\n        }, # notification\n        \"cduPump1DOLLowFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a16 - Pump 1 DOL Low Flow\"\"\",\n        }, # notification\n        \"cduPump1DOLLowFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a16 - Pump 1 DOL Low Flow Cleared\"\"\",\n        }, # notification\n        \"cduPump2DOLOverloadAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a17 - Pump 2 DOL Overload\"\"\",\n        }, # notification\n        \"cduPump2DOLOverloadAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a17 - Pump 2 DOL Overload Cleared\"\"\",\n        }, # notification\n        \"cduPump2DOLLowFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a18 - Pump 2 DOL Low Flow\"\"\",\n        }, # notification\n        \"cduPump2DOLLowFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a18 - Pump 2 DOL Low Flow Cleared\"\"\",\n        }, # notification\n        \"cduPumpShutdownAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a19 - Pump Shutdown\"\"\",\n        }, # notification\n        \"cduPumpShutdownAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a19 - Pump Shutdown Cleared\"\"\",\n        }, # notification\n        \"cduValveFaultAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w20 - Valve 1 Fault\"\"\",\n        }, # notification\n        \"cduValveFaultAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w20 - Valve 1 Fault Cleared\"\"\",\n        }, # notification\n        \"cduPrimaryWaterLowFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w22 - Primary Water Low Flow\"\"\",\n        }, # notification\n        \"cduPrimaryWaterLowFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w22 - Primary Water Low Flow Cleared\"\"\",\n        }, # notification\n        \"cduFilterDirtyAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n23 - Filter Dirty\"\"\",\n        }, # notification\n        \"cduFilterDirtyAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n23 - Filter Dirty Cleared\"\"\",\n        }, # notification\n        \"cduPrimaryWaterLowTemperatureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n24 - Primary Water Low Temperature\"\"\",\n        }, # notification\n        \"cduPrimaryWaterLowTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n24 - Primary Water Low Temperature Cleared\"\"\",\n        }, # notification\n        \"cduPrimaryWaterHighTemperatureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n25 - Primary Water High Temperature\"\"\",\n        }, # notification\n        \"cduPrimaryWaterHighTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n25 - Primary Water High Temperature Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryWaterLowTemperatureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w26 - Secondary Water Low Temperature\"\"\",\n        }, # notification\n        \"cduSecondaryWaterLowTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.52\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w26 - Secondary Water Low Temperature Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryWaterHighTemperatureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.53\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w27 - Secondary Water High Temperature\"\"\",\n        }, # notification\n        \"cduSecondaryWaterHighTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.54\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w27 - Secondary Water High Temperature Cleared\"\"\",\n        }, # notification\n        \"cduFloodUnitAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.55\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a28 - Flood - Unit\"\"\",\n        }, # notification\n        \"cduFloodUnitAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.56\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a28 - Flood - Unit Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT2bOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.57\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a29 - Secondary Temperature T2b OOR\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT2bOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.58\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a29 - Secondary Temperature T2b OOR Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryTemperatureDiffErrorAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.59\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a30 - Secondary Temp Diff Error\"\"\",\n        }, # notification\n        \"cduSecondaryTemperatureDiffErrorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.60\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a30 - Secondary Temp Diff Error Cleared\"\"\",\n        }, # notification\n        \"cduRoomRHSensorOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.61\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a31 - Room RH OOR\"\"\",\n        }, # notification\n        \"cduRoomRHSensorOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.62\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a31 - Room RH OOR Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryOverPressureShutdownAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.63\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a32 - Secondary Overpressure Shutdown\"\"\",\n        }, # notification\n        \"cduSecondaryOverPressureShutdownAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.64\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a32 - Secondary Overpressure Shutdown Cleared\"\"\",\n        }, # notification\n        \"cduFloodUnderfloorAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.67\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a34 - Flood - Underfloor\"\"\",\n        }, # notification\n        \"cduFloodUnderfloorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.68\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a34 - Flood - Underfloor Cleared\"\"\",\n        }, # notification\n        \"cduCheckWaterMakeUpLevelAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.69\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n35 - Check Water Make-up Level\"\"\",\n        }, # notification\n        \"cduCheckWaterMakeUpLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.70\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n35 - Check Water Make-up Level Cleared\"\"\",\n        }, # notification\n        \"cduSystemLowPressureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.71\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a36 - System Low Pressure\"\"\",\n        }, # notification\n        \"cduSystemLowPressureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.72\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a36 - System Low Pressure Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryOverpressureAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.73\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w37 - Secondary Overpresssure\"\"\",\n        }, # notification\n        \"cduSecondaryOverpressureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.74\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w37 - Secondary Overpresssure Cleared\"\"\",\n        }, # notification\n        \"cduPrimaryWaterNoFlowAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.75\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a38 - Primary No Flow\"\"\",\n        }, # notification\n        \"cduPrimaryWaterNoFlowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.76\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a38 - Primary No Flow Cleared\"\"\",\n        }, # notification\n        \"cduPrimaryFlowMeterOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.83\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a42 - Primary Flow Meter OOR\"\"\",\n        }, # notification\n        \"cduPrimaryFlowMeterOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.84\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a42 - Primary Flow Meter OOR Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryFlowMeterOORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.85\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a43 - Secondary Flow Meter OOR\"\"\",\n        }, # notification\n        \"cduSecondaryFlowMeterOORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.86\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a43 - Secondary Flow Meter OOR Cleared\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT4OORAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.87\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a44 - Secondary Temperature T4 OOR\"\"\",\n        }, # notification\n        \"cduSecondaryTempSensorT4OORAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.88\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a44 - Secondary Temperature T4 OOR Cleared\"\"\",\n        }, # notification\n        \"cduManualPumpSwitchAlarmACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.89\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a45 - Manual Pump Switch Active\"\"\",\n        }, # notification\n        \"cduManualPumpSwitchAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.90\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a45 - Manual Pump Switch Active Cleared\"\"\",\n        }, # notification\n        \"cduCDUPowerUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.91\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"n46 - Power Up\"\"\",\n        }, # notification\n        \"cduDWSecWaterLowTemperatureACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.93\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w47 - DW Sec. Water Low Temperature Active\"\"\",\n        }, # notification\n        \"cduDWSecWaterLowTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.94\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w47 - DW Sec. Water Low Temperature Cleared\"\"\",\n        }, # notification\n        \"cduDWPumpShutdownACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.95\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a48 - DW Pump Shutdown Active\"\"\",\n        }, # notification\n        \"cduPumpShutdownCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.96\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a48 - DW Pump Shutdown Cleared\"\"\",\n        }, # notification\n        \"cduDisplayControllerCommsFailureACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.97\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a49 - Display/Controller Comms Failure Active\"\"\",\n        }, # notification\n        \"cduDisplayControllerCommsFailureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.98\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"a49 - Display/Controller Comms Failure Cleared\"\"\",\n        }, # notification\n        \"cduSDCardFaultACTIVE\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.99\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w50 - SD Card Fault Active\"\"\",\n        }, # notification\n        \"cduSDCardFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CD6C\",\n            \"oid\" : \"1.3.6.1.4.1.30657.2.1.2.100\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CD6C\"\n                },\n            },\n            \"description\" :\n                \"\"\"w50 - SD Card Fault Cleared\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-AUTH-FRAMEWORK-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# This python file has been generated by smidump version 0.5.0:\n#\n#   smidump -f python CISCO-AUTH-FRAMEWORK-MIB\n\nFILENAME = \"CISCO-AUTH-FRAMEWORK-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n\n    \"CISCO-AUTH-FRAMEWORK-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\nTel: +1 800 553 -NETS\nE-mail: cs-ibns@cisco.com,\n        cs-lan-switch-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"MIB module for Authentication Framework in the system.\n\nAuthentication Framework provides generic configurations\nfor authentication methods in the system and manage the\nfailover sequence of these methods in a flexible manner.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2010-11-17 00:00\",\n                \"description\" :\n                    \"\"\"Added cafMacMoveConfigGroup and cafCoACommandConfigGroup\ngroups.\"\"\",\n            },\n            {\n                \"date\" : \"2010-04-01 00:00\",\n                \"description\" :\n                    \"\"\"Added value 'replace' to cafPortViolationAction.\"\"\",\n            },\n            {\n                \"date\" : \"2009-04-20 00:00\",\n                \"description\" :\n                    \"\"\"Added cafSessionVlanGroupNameGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2008-10-24 00:00\",\n                \"description\" :\n                    \"\"\"Added value 'protect' to cafPortViolationAction.\"\"\",\n            },\n            {\n                \"date\" : \"2008-08-25 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoAuthFrameworkMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifName\"},\n        {\"module\" : \"CISCO-PRIVATE-VLAN-MIB\", \"name\" : \"VlanIndexOrZero\"},\n        {\"module\" : \"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureTokenString\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"CiscoAuthControlledDirections\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"both\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"in\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"The controlled direction values for capable ports in\nAuthentication Framework.\n\nboth: control is required to be exerted over both\n      incoming and outgoing traffic through the\n      controlled port.\n\nin  : control is required to be exerted over the\n      incoming traffic through the controlled port.\"\"\",\n        },\n        \"CiscoAuthControlledPortControl\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"forceUnauthorized\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"auto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"forceAuthorized\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The authorization control values of Authentication\nFramework on a controlled port.\n\nforceUnauthorized: the controlled port is forced to\n                 be unauthorized unconditionally.\n\nauto             : authorization of the controlled\n                 port will be determined by an\n                 authentication process.\n\nforceAuthorized  : The controlled port is forced to\n                 be authorized unconditionally.\"\"\",\n        },\n        \"CiscoAuthMethod\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"dot1x\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"macAuthBypass\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"webAuth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The authentication methods and protocols supported in\nAuthentication Framework.\n\nother        : none of the below.\n\ndot1x        : 802.1x Protocol.\n\nmacAuthBypass: MAC Authentication Bypass. \n\nwebAuth      : Web-Proxy Authentication.\n\n'other' is a read only value which can not be used in\nset operation.\"\"\",\n        },\n        \"CiscoAuthMethodList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of authentication methods provided within\nAuthentication Framework.\n\nEach octet represents an authentication method which\nis defined in CiscoAuthMethod.\n\nThe DESCRIPTION clause of CiscoAuthMethodList objects\nmust fully describe the relationship between methods.\"\"\",\n        },\n        \"CiscoAuthHostMode\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"singleHost\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"multiHost\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"multiAuth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"multiDomain\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The authentication mode of a controlled port.\n\nsingleHost: port allows one host to connect and authenticate\n            in a single domain.\n\nmultiHost : port allows multiple hosts to connect. Once\n          a host is authenticated, all remaining hosts are\n          also authenticated in a single domain.\n\nmultiAuth : port allows multiple hosts to connect. Each host\n          is authenticated separately in a single domain.\n\nmultiDomain: port allows multiple domains to be authenticated.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoAuthFrameworkMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoAuthFrameworkMIBNotifs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.0\",\n        }, # node\n        \"ciscoAuthFrameworkMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1\",\n        }, # node\n        \"ciscoAuthFrameworkSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1\",\n        }, # node\n        \"cafAaaNoRespRecoveryDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"Specifies the AAA recovery delay for authentication methods\nregistered in Authentication Framework when AAA server becomes\nactive again after being inactive. A value of zero indicates\nthat AAA recovery delay is disabled in the system.\"\"\",\n        }, # scalar\n        \"cafAuthMethodRegTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of authentication methods which are currrently\nregistered with Authentication Framework. \n\nAn entry is created by the agent when an authentication method \nhas successfully registered with Authentication Framework. \n\nAn entry is deleted by the agent upon de-registration of the \nauthentication method.\"\"\",\n        }, # table\n        \"cafAuthMethodRegEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cafAuthMethod\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing registration information of a particular\nauthentication method with Authentication Framework.\"\"\",\n        }, # row\n        \"cafAuthMethod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethod\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The authentication method registered with Authentication\nFramework.\"\"\",\n        }, # column\n        \"cafAuthMethodDefaultPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique number which indicates the default priority of a\nauthentication method.\n\nThe default priority is assigned by Authentication Framework \nduring method registration.  The method with smallest value \nhas highest priority.\"\"\",\n        }, # column\n        \"cafAuthMethodDefaultExecOrder\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique number which indicates the default execution order\nof a authentication method. \n\nThe default execution order is assigned by Authentication\nFramework during method registration.  The method with\nsmallest value will be execute first.\"\"\",\n        }, # column\n        \"cafMacMoveMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"permit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the MAC Move configuration for\nAuthentication Framework. \n\ndeny : When a host is authenticated on one port, \n      that address is not allowed on another \n      authenticated manager-enabled port of the device. \n\npermit: Authenticated hosts are allowed to move from one \n       port to another on the same device. When a host moves to \n       a new port, the authenticated session on the original \n       port is deleted, and the host is reauthenticated on the \n       new port.\"\"\",\n        }, # scalar\n        \"cafCoABouncePortCommandIgnoreEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the device ignores the bounce\nport command that sent from RADIUS via Change-of-Authorization\n(CoA) packets.\"\"\",\n        }, # scalar\n        \"cafCoADisablePortCommandIgnoreEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the device ingores the\ndisable port command that sent from RADIUS via\nChange-of-Authorization (CoA) packets.\"\"\",\n        }, # scalar\n        \"ciscoAuthFrwkAuthenticator\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2\",\n        }, # node\n        \"cafPortConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port entries.  An entry will exist for each\ninterface which support Authentication Framework feature.\"\"\",\n        }, # table\n        \"cafPortConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing management information of Authentication\nFramework applicable to a particular port.\"\"\",\n        }, # row\n        \"cafPortControlledDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthControlledDirections\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the controlled direction of this port.\"\"\",\n        }, # column\n        \"cafPortFallBackProfile\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the name of the fallback profile to be used when\nfailing over to Web Proxy Authentication.  A zero length\nstring indicates that fallback mechanism to Web Proxy\nAuthentication is disabled in Authentication Framework.\"\"\",\n        }, # column\n        \"cafPortAuthHostMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthHostMode\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the authentication host mode for this port.\"\"\",\n        }, # column\n        \"cafPortPreAuthOpenAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if the Pre-Authentication Open Access feature\nallows clients/devices to gain network access before \nauthentication is performed. \n\nA value of 'true' for this object indicates that client/device \nis able to gain network access before authentication is \nperformed.\"\"\",\n        }, # column\n        \"cafPortAuthorizeControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthControlledPortControl\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the authorization control for this port.\"\"\",\n        }, # column\n        \"cafPortReauthEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if reauthentication is enabled for this port.\"\"\",\n        }, # column\n        \"cafPortReauthInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the reauthentication interval, after which the port\nwill be reauthenticated if value of the corresponding instance\nof cafPortReauthEnabled is 'true'.\n\nA value of zero indicates that the reauthentication interval\nis downloaded from AAA server when this port is authenticated.\"\"\",\n        }, # column\n        \"cafPortRestartInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the interval after which a further authentication\nattempt should be made to this port if it is not authorized.\n\nA value of zero indicates that no further authentication attempt\nwill be made if this port is unauthorized.\"\"\",\n        }, # column\n        \"cafPortInactivityTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the period of time that a client associating with\nthis\nport is allowed to be inactive before being terminated.\n\nA value of zero indicates that inactivity timeout is disabled on\n\nthis port.\n\nA value of -1 indicates that inactivity timeout is downloaded\nfrom the AAA server when this port is authenticated.\"\"\",\n        }, # column\n        \"cafPortViolationAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"restrict\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"protect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"replace\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the action to be taken due to a security violation\noccurs on this port.\n\n      restrict: This port will be moved to restricted state.\n\n      shutdown: This port will be shutdown from Authentication\n                Framework perspective.\n\n      protect : This port will be moved to protected state.\n\n      replace : The current authentication session on this\n                port will be terminated and replaced by a new\n                authentication session, upon the detection of\n                security violation on the current authentication\n                session on the port.\"\"\",\n        }, # column\n        \"cafPortMethodTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of port entries.  An entry will exist\nfor each port which supports Authentication Framework feature.\"\"\",\n        }, # table\n        \"cafPortMethodEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing configuration and information of\nauthentication methods for a particular port.\"\"\",\n        }, # row\n        \"cafPortMethodAdminExecOrder\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethodList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the administrative execution order of\nauthentication methods on the port.  Methods are executed in\nthe order as specified in the method list.\n\nMethod which is at the beginning of the method list will be\nexecuted first.  Method which is at the end of method list\nwill be executed last.\n\nA zero length string of this object indicates that no per\nport execution order configuration has been specified on\nthis port. The actual execution order is based on the value\nof cafAuthMethodDefaultExecOrder in cafAuthMethodRegTable.\"\"\",\n        }, # column\n        \"cafPortMethodAdminPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethodList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the administrative priority of\nauthentication methods on the port.  The priority of\neach method is assigned based on the method list.\n\nMethod which is at the beginning of the method list has\nhighest priority.  Method which is at the end of method list\nhas lowest priority.\n\nA zero length string of this object indicates that no per\nport method priority configuration has been specified on\nthis port.  The actual execution order is based on the value \nof cafAuthMethodDefaultExecOrder in cafAuthMethodRegTable.\"\"\",\n        }, # column\n        \"cafPortMethodAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethodList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the authentication methods currently\navailable on this port.\"\"\",\n        }, # column\n        \"cafPortMethodOperExecOrder\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethodList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the operational execution order of\nauthentication methods on this port.  Methods are executed in\nthe order as specified in the method list.\n\nMethod which is at the beginning of the method list will be\nexecuted first.  Method which is at the end of method list\nwill be executed last.\"\"\",\n        }, # column\n        \"cafPortMethodOperPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethodList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the operational priority of\nauthentication methods on this port.  Methods have the\npriority as specified in the method list.\n\nMethod which is at the beginning of the method list has\nhighest priority.  Method which is at the end of method list\nhas lowest priority.\"\"\",\n        }, # column\n        \"ciscoAuthFrameworkEvent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3\",\n        }, # node\n        \"cafAuthFailedEventPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of port entries.\n\nAn entry will exist for each port which supports Authentication\nFail event within the Authentication Framework.\"\"\",\n        }, # table\n        \"cafAuthFailedEventPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing management information of Authentication\nFail event for a particular port.\"\"\",\n        }, # row\n        \"cafAuthFailedMaxRetry\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the maximum number of retry should be\nperformed before generating Authentication Fail event.\n\nA value of zero indicates that Authentication Fail event will\nbe generated upon authentication fail without any retry.\"\"\",\n        }, # column\n        \"cafAuthFailedNoActionEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether no action will be performed\nwhen an Authentication Fail event occurs.\n\nSetting 'true' on this object indicates that no action will\nbe performed when Authentication Fail event occurs.\n\nThe read-only value 'false' indicates that an action will\nbe performed when an Authentication Fail event occurs.\"\"\",\n        }, # column\n        \"cafAuthFailedAuthorizedVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the Authentication Failed VLAN number.\n\nThe read-only value of -1 indicates that this object is not\napplicable on this port.\n\nThe read-only value of zero indicates that this port will not be\nauthorized to any VLAN when Authentication Failed event occurs.\n\nSetting a non-zero value on this object indicates that this port\nwill be authorized to the VLAN as specified by this object\nvalue, when Authentication Fail event occurs.\"\"\",\n        }, # column\n        \"cafAuthFailedNextMethodEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the next authentication method\nwill be used if an Authentication Fail event is generated by the\ncurrent authentication method.\n\nSetting this object to 'true' indicates that the next available\nauthentication method will be used when Authentication Fail \nevent occurs.\n\nThe read-only value 'false' indicates that the next available\nauthentication method will not be used when Authentication Fail\nevent occurs.\"\"\",\n        }, # column\n        \"cafClientNoRespEventPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of port entries.\n\nAn entry exists for each port which supports No Response\nevent within the Authentication Framework.\"\"\",\n        }, # table\n        \"cafClientNoRespEventPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing management information of No Response\nevent for a particular port.\"\"\",\n        }, # row\n        \"cafClientNoRespNoActionEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether an action is performed when No\nResponse event occurs.\n\nSetting 'true' on this object indicates that no action will\nbe performed when No Response event occurs.\n\nThe read-only value 'false' of this object indicates that an\naction will be performed when No Response event occurs.\"\"\",\n        }, # column\n        \"cafClientNoRespAuthorizedVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the No Response Authorized VLAN number.\n\nThe read-only value of -1 indicates that this object is not\napplicable on this port.\n\nThe read-only value of zero indicates that this port will not be\nauthorized to any VLAN when No Response event occurs.\n\nSetting a non-zero value on this object indicates that this port\nwill be authorized to the VLAN as specified by this object\nvalue, when No Response event occurs.\"\"\",\n        }, # column\n        \"cafServerEventPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of port entries.\n\nAn entry exists for each port which supports AAA Server\nReachability event within the Authentication Framework.\"\"\",\n        }, # table\n        \"cafServerEventPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing management information of AAA Server\nReachability event for a particular port.\"\"\",\n        }, # row\n        \"cafServerDeadNoActionEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates whether an action is performed if an\nAAA Server Reachability event occurs.\n\nSetting 'true' on this object indicates that no action\nwill be performed when AAA Server Reachability event occurs.\n\nThe read-only value 'false' indicates that an action will\nbe performed when AAA Server Reachability event occurs.\"\"\",\n        }, # column\n        \"cafServerDeadRemainAuthorized\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies if current authorization will remain\nunchanged for the port when AAA Server Reachability event\noccurs.\n\nSetting 'true' on this object indicates that current\nauthorization will remain unchanged for the port when AAA\nServer Reachability event occurs.\n\nThe read-only value 'false' indicates that the current\nauthorization will not be retained for the port when\nAAA Server Reachability event occurs.\"\"\",\n        }, # column\n        \"cafServerDeadAuthorizedVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the AAA Server Reachability\nAuthorized VLAN number.\n\nThe read-only value of -1 indicates that this object is not\napplicable on this port.\n\nThe read-only value of zero indicates that this port will not\nbe authorized to any VLAN when AAA Server Reachability event\noccurs.\n\nSetting a non-zero value on this object indicates that this port\nwill be authorized to the VLAN as specified by this object\nvalue, when AAA Server Reachability event occurs.\"\"\",\n        }, # column\n        \"cafServerAliveAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reinitialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the action applied to the port upon AAA\nrecovery.\n\nnone        : no action will be applied.\nreinitialize: the port will be reinitialized with the current\n             authentication method.\"\"\",\n        }, # column\n        \"ciscoAuthFrameworkSession\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4\",\n        }, # node\n        \"cafSessionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of authentication session.\n\nAn entry is created when an authentication session has\nsuccessfully created within Authentication Framework.\n\nAn entry is deleted when an authentication session has been\nremoved.\"\"\",\n        }, # table\n        \"cafSessionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1\",\n            \"status\" : \"current\",\n            \"implied\" : \"true\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"cafSessionId\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing management information for a particular\nauthentication session.\"\"\",\n        }, # row\n        \"cafSessionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique identifier of the authentication session.\"\"\",\n        }, # column\n        \"cafSessionClientMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the MAC address of the device associates with the\nauthentication session.\"\"\",\n        }, # column\n        \"cafSessionClientAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the type of Internet address of the client\nassociates with the authentication session.\"\"\",\n        }, # column\n        \"cafSessionClientAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Internet address of the client associates with\nthe authentication session. The type of this address is\ndetermined by the value of cafSessionClientAddrType object.\"\"\",\n        }, # column\n        \"cafSessionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noMethod\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authenticationSuccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"authenticationFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"authorizationSuccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"authorizationFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current status of the authentication session.\n\nidle        : the session has been initialized and no\n            method has run yet.\n\nrunning     : an authentication method is running for\n            this session.\n\nnoMethod    : no authentication method has provided a\n            result for this session.\n\nauthenticationSuccess: an authentication method has resulted\n            in authentication success for this session.\n\nauthenticationFailed: an authentication method has resulted\n            in authentication failed for this session.\n\nauthorizationSuccess: authorization is successful for this\n            session.\n\nauthorizationFailed : authorization is failed for this\n            session.\"\"\",\n        }, # column\n        \"cafSessionDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"data\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"voice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the type of domain that the authentication session\nbelongs to.\n\nother  : none of the below.\n\ndata : indicates the data domain.\n\nvoice: indicates the voice domain.\"\"\",\n        }, # column\n        \"cafSessionAuthHostMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthHostMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the authentication host mode of the port in the\nauthentication session.\"\"\",\n        }, # column\n        \"cafSessionControlledDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthControlledDirections\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the operational controlled directions parameter\nfor this port in the authentication session.\"\"\",\n        }, # column\n        \"cafSessionPostureToken\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureTokenString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the posture token associates with the authentication\nsession.\"\"\",\n        }, # column\n        \"cafSessionAuthUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the name of the authenticated user for the\nauthentication session.\"\"\",\n        }, # column\n        \"cafSessionClientFramedIpPool\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the name of the address pool from which the\nsession's client IP address is assigned.\"\"\",\n        }, # column\n        \"cafSessionAuthorizedBy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the name of the feature which authorizes the\nauthentication session.\"\"\",\n        }, # column\n        \"cafSessionCriticalTimeLeft\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time before the next authentication\nattempt for the authentication session after Server Reachability\nevent occurred.  Value zero indicates that this session is\ncurrently being authenticated or it is not applicable.\"\"\",\n        }, # column\n        \"cafSessionAuthVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-PRIVATE-VLAN-MIB\", \"name\" : \"VlanIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the authorized VLAN applied to the authentication\nsession. Value zero indicates that no authorized VLAN has been\napplied, or it is not applicable.\"\"\",\n        }, # column\n        \"cafSessionTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the session timeout used by Authentication\nFramework in the authentication session.\"\"\",\n        }, # column\n        \"cafSessionTimeLeft\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time of the current authentication\nsession.\"\"\",\n        }, # column\n        \"cafSessionTimeoutAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"terminate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reauthenticate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the timeout action on the authentication session,\nwhen value of the corresponding instance of cafSessionTimeLeft\nreaches zero. \n\n unknown       : None of the below.\n\n terminate     : Session will be terminated.\n\n reauthenticate: Session will be reauthenticated.\"\"\",\n        }, # column\n        \"cafSessionInactivityTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the inactivity timeout used by Authentication\nFramework in the authentication session.\"\"\",\n        }, # column\n        \"cafSessionInactivityTimeLeft\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time of the inactivity timer of\nthe authentication session.\"\"\",\n        }, # column\n        \"cafSessionReauth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The reauthentication control for the authentication session.\nSetting this object to 'true' cause the current authenticated\nsession to reauthenticate the authenticated client. Setting\nthis object to 'false' has no effect.\n\nThis object always returns 'false' when being read.\"\"\",\n        }, # column\n        \"cafSessionTerminate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The termination request control for the authentication session.\nSetting this object to 'true' terminates the current session.\nSetting this object to 'false' has no effect.\n\nThis object always returns 'false' when being read.\"\"\",\n        }, # column\n        \"cafSessionVlanGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the VLAN group that has been used during VLAN\nassignment for this session. \n\nA zero length string indicates that there is no VLAN group been\nused during VLAN assignment.\"\"\",\n        }, # column\n        \"cafSessionMethodsInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains a list of authentication method for every\nauthentication session.\n\nAn entry exists for each authentication method that can\nauthenticate an authentication session within\nAuthentication Framework.\"\"\",\n        }, # table\n        \"cafSessionMethodsInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"cafSessionId\",\n                \"cafSessionMethod\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing method information for a particular runnable\nauthentication methods which is associated with a session for \nan Authentication Framework managed port.\"\"\",\n        }, # row\n        \"cafSessionMethod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-AUTH-FRAMEWORK-MIB\", \"name\" : \"CiscoAuthMethod\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Indicates this authentication method.\"\"\",\n        }, # column\n        \"cafSessionMethodState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notRun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failedOver\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authcSuccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"authcFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the state of this authentication method.\n\nnotRun      : The method has not run for this session.\n\nrunning     : The method is running for this session.\n\nfailedOver  : The method has failed and the next method is\n            expected to provide a result.\n\nauthcSuccess: The method has provided a successful\n             authentication result for this session.\n\nauthcFailed : The method has provided a failed authentication\n             result for this session.\"\"\",\n        }, # column\n        \"ciscoAuthFrwkNotifControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.5\",\n        }, # node\n        \"cafSecurityViolationNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable indicates whether the system produces\nthe cafSecurityViolationNotif.\n\nA 'false' value will prevent cafSecurityViolationNotif \nfrom being generated by this system.\"\"\",\n        }, # scalar\n        \"ciscoAuthFrwkNotifInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.6\",\n        }, # node\n        \"cafSecurityViolationClient\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The MAC address included in the notification currently being\nsent, indicating the client who triggered the security violation\nnotification.\"\"\",\n        }, # scalar\n        \"ciscoAuthFrameworkMIBConform\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2\",\n        }, # node\n        \"ciscoAuthFrameworkMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.1\",\n        }, # node\n        \"ciscoAuthFrameworkMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cafSecurityViolationNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"cafSecurityViolationClient\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cafSecurityViolationNotif is sent if a security violation\nis detected on a port, and the instance value of \ncafSecurityViolationNotifEnable is 'true'.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cafAuthMethodRegGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafAuthMethodDefaultPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthMethodDefaultExecOrder\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides registration\ninformation of authentication methods in Authentication\nFramework.\"\"\",\n        }, # group\n        \"cafAaaNoRespRecoveryDelayGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafAaaNoRespRecoveryDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides AAA recovery delay\nconfiguration for Authentication Framework in the system.\"\"\",\n        }, # group\n        \"cafAuthPortConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafPortControlledDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortFallBackProfile\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortAuthHostMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortPreAuthOpenAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortAuthorizeControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortReauthEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortReauthInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortRestartInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortInactivityTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides configuration of\nAuthentication Framework for capable ports in the system.\"\"\",\n        }, # group\n        \"cafPortMethodGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafPortMethodAdminExecOrder\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodAdminPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodOperExecOrder\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodOperPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides configuration and\ninformation of authentication methods within Authentication\nFramework for capable ports in the system.\"\"\",\n        }, # group\n        \"cafAuthFailedEventGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafAuthFailedMaxRetry\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthFailedNoActionEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthFailedAuthorizedVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthFailedNextMethodEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides configuration of\nAuth-Failed behaviour of Authentication Framework for\nports in the system.\"\"\",\n        }, # group\n        \"cafClientNoRespEventGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafClientNoRespNoActionEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafClientNoRespAuthorizedVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides configuration of\nAuthentication Framework when no-responsive client is detected\non a port in the system.\"\"\",\n        }, # group\n        \"cafServerEventGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafServerDeadNoActionEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafServerDeadRemainAuthorized\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafServerDeadAuthorizedVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafServerAliveAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides configuration of\nAuthentication Framework when AAA Server Reachability event\noccurs.\"\"\",\n        }, # group\n        \"cafSessionGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSessionClientMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionClientAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionClientAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionAuthHostMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionControlledDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionPostureToken\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionAuthUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionClientFramedIpPool\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionAuthorizedBy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionCriticalTimeLeft\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionAuthVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionTimeLeft\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionTimeoutAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionInactivityTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionInactivityTimeLeft\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionReauth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionTerminate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides authentication session\nmanagement information for Authentication Framework.\"\"\",\n        }, # group\n        \"cafSessionMethodInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSessionMethodState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides information about\nauthentication methods associate with Authentication Framework\n's authentication sessions in the system.\"\"\",\n        }, # group\n        \"cafSecViolationNotifEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSecurityViolationNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides control over\nsecurity violation notification for Authentication\nFramework in the system.\"\"\",\n        }, # group\n        \"cafSecurityViolationNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSecurityViolationNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notification providing information\nabout port's security violation in Authentication\nFramework.\"\"\",\n        }, # group\n        \"cafSecurityViolationClientGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSecurityViolationClient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing MAC address of the offending\nclient in the security violation notification.\"\"\",\n        }, # group\n        \"cafSessionVlanGroupNameGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafSessionVlanGroupName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing VLAN group information of\nauthenticated session in Authentication Framework.\"\"\",\n        }, # group\n        \"cafMacMoveConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafMacMoveMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing MAC move cofiguration\ninformation for Authentication Framework on the device.\"\"\",\n        }, # group\n        \"cafCoACommandConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cafCoABouncePortCommandIgnoreEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafCoADisablePortCommandIgnoreEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing configuration information\nfor the device's behaviour on CoA commands.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoAuthFrameworkMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nCISCO-AUTH-FRAMEWORK-MIB.\"\"\",\n            \"requires\" : {\n                \"cafAuthMethodRegGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthPortConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionMethodInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAaaNoRespRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide AAA recovery delay configuration for Authentication\nFramework.\"\"\",\n                },\n                \"cafAuthFailedEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide  configuration for Authentication Framework on its\ncapable ports, when Authentication Fail event occurs.\"\"\",\n                },\n                \"cafClientNoRespEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework to authorize\nports in a special VLAN when non-capable clients are\ndetected.\"\"\",\n                },\n                \"cafServerEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework on\nauthenticated ports when AAA Server Reachability event occurs.\"\"\",\n                },\n                \"cafSecViolationNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cafAaaNoRespRecoveryDelay\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortControlledDirection\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortFallBackProfile\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthHostMode\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortPreAuthOpenAccess\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthorizeControl\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortRestartInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortInactivityTimeout\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortViolationAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminExecOrder\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminPriority\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedMaxRetry\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNextMethodEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadRemainAuthorized\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerAliveAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionReauth\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionTerminate\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSecurityViolationNotifEnable\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ciscoAuthFrameworkMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nCISCO-AUTH-FRAMEWORK-MIB.\"\"\",\n            \"requires\" : {\n                \"cafAuthMethodRegGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthPortConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionMethodInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAaaNoRespRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide AAA recovery delay configuration for Authentication\nFramework.\"\"\",\n                },\n                \"cafAuthFailedEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide  configuration for Authentication Framework on its\ncapable ports, when Authentication Fail event occurs.\"\"\",\n                },\n                \"cafClientNoRespEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework to authorize\nports in a special VLAN when non-capable clients are\ndetected.\"\"\",\n                },\n                \"cafServerEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework on\nauthenticated ports when AAA Server Reachability event occurs.\"\"\",\n                },\n                \"cafSecViolationNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSessionVlanGroupNameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide VLAN group information for Authentication\nFramework.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cafAaaNoRespRecoveryDelay\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortControlledDirection\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortFallBackProfile\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthHostMode\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortPreAuthOpenAccess\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthorizeControl\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortRestartInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortInactivityTimeout\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortViolationAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminExecOrder\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminPriority\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedMaxRetry\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNextMethodEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadRemainAuthorized\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerAliveAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionReauth\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionTerminate\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSecurityViolationNotifEnable\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ciscoAuthFrameworkMIBCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.656.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nCISCO-AUTH-FRAMEWORK-MIB.\"\"\",\n            \"requires\" : {\n                \"cafAuthMethodRegGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAuthPortConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafPortMethodGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafSessionMethodInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\"\n                },\n                \"cafAaaNoRespRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide AAA recovery delay configuration for Authentication\nFramework.\"\"\",\n                },\n                \"cafAuthFailedEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide  configuration for Authentication Framework on its\ncapable ports, when Authentication Fail event occurs.\"\"\",\n                },\n                \"cafClientNoRespEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework to authorize\nports in a special VLAN when non-capable clients are\ndetected.\"\"\",\n                },\n                \"cafServerEventGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for Authentication Framework on\nauthenticated ports when AAA Server Reachability event occurs.\"\"\",\n                },\n                \"cafSecViolationNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSecurityViolationClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupport security violation notification for Authentication\nFramework.\"\"\",\n                },\n                \"cafSessionVlanGroupNameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide VLAN group information for Authentication\nFramework.\"\"\",\n                },\n                \"cafMacMoveConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide MAC move configuration for Authentication Framework.\"\"\",\n                },\n                \"cafCoACommandConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nprovide configuration for behavor for CoA commands for\nAuthentication Framework.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cafAaaNoRespRecoveryDelay\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortControlledDirection\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortFallBackProfile\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthHostMode\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortPreAuthOpenAccess\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortAuthorizeControl\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortReauthInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortRestartInterval\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortInactivityTimeout\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortViolationAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminExecOrder\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafPortMethodAdminPriority\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedMaxRetry\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafAuthFailedNextMethodEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafClientNoRespAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadNoActionEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadRemainAuthorized\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerDeadAuthorizedVlan\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafServerAliveAction\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionReauth\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSessionTerminate\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafSecurityViolationNotifEnable\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafMacMoveMode\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafCoABouncePortCommandIgnoreEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cafCoADisablePortCommandIgnoreEnabled\" : {\n                    \"module\" : \"CISCO-AUTH-FRAMEWORK-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-BGP4-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-BGP4-MIB\n\nFILENAME = \"CISCO-BGP4-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-BGP4-MIB\",\n\n    \"CISCO-BGP4-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" :\n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-iprouting-bgp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"An extension to the IETF BGP4 MIB module defined in\nRFC 1657.\n\nFollowing is the terminology associated with Border\nGateway Protocol(BGP).\n\nUPDATE message\n    UPDATE messages are used to transfer routing\n    information between BGP peers. An UPDATE message\n    is used to advertise a single feasible route to a\n    peer, or to withdraw multiple unfeasible routes\n    from service.\n\nAdj-RIBs-In\n   The Adj-RIBs-In store routing information that has\n   been learned from inbound UPDATE messages. Their\n   contents represent routes that are available as an\n   input to the Decision Process.\n\nLoc-RIB(BGP table)\n   The Loc-RIB contains the local routing information\n   that the BGP speaker has selected by applying its\n   local policies to the routing information contained\n   in its Adj-RIBs-In.\n\nAdj-RIBs-Out\n   The Adj-RIBs-Out store the information that the\n   local BGP speaker has selected for advertisement to\n   its peers. The routing information stored in the\n   Adj-RIBs-Out will be carried in the local BGP\n   speaker's UPDATE messages and advertised to its\n   peers.\n\nPath Attributes\n   A variable length sequence of path attributes is\n   present in every UPDATE. Each path attribute is a\n   triple <attribute type, attribute length,\n   attribute value> of variable length.\n\nNetwork Layer Reachability Information(NLRI)\n   A variable length field present in UPDATE messages\n   which contains a list of Network Layer address\n   prefixes.\n\nAddress Family Identifier(AFI)\n   Primary identifier to indicate the type of the\n   Network Layer Reachability Information(NLRI) being\n   carried.\n\nSubsequent Address Family Identifier(SAFI)\n   Secondary identifier to indicate the type of the\n   Network Layer Reachability Information(NLRI) being\n   carried.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2010-09-30 00:00\",\n                \"description\" :\n                    \"\"\"+Added cbgpNotifsEnable and cbgpLocalAs\n+Modified CbgpNetworkAddress TC\n+Added cbgpPeer2Table\n+Added cbgpPeer2CapsTable\n+Added cbgpPeer2AddrFamilyTable\n+Added cbgpPeer2AddrFamilyPrefixTable\n+Added notification cbgpPeer2EstablishedNotification\n+Added notification cbgpPeer2BackwardTransNotification\n+Added notification cbgpPeer2FsmStateChange\n+Added notification cbgpPeer2BackwardTransition\n+Added notification cbgpPeer2PrefixThresholdExceeded\n+Added notification cbgpPeer2PrefixThresholdClear\"\"\",\n            },\n            {\n                \"date\" : \"2003-02-24 00:00\",\n                \"description\" :\n                    \"\"\"+Added cbgpPeerCapsTable\n+Added cbgpPeerAddrFamilyTable\n+Added cbgpPeerAddrFamilyPrefixTable\n+Added notification event cbgpBackwardTransition\n+Added notification event cbgpPrefixThresholdExceeded\n+Added notification event cbgpPrefixThresholdClear\"\"\",\n            },\n            {\n                \"date\" : \"2002-12-19 00:00\",\n                \"description\" :\n                    \"\"\"+Added cbgpPeerPrefixTable\n+Added notification event cbgpFsmStateChange\"\"\",\n            },\n            {\n                \"date\" : \"2001-08-13 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of the MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoBgp4MIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"BGP4-MIB\", \"name\" : \"bgpPeerEntry\"},\n        {\"module\" : \"BGP4-MIB\", \"name\" : \"bgpPeerRemoteAddr\"},\n        {\"module\" : \"BGP4-MIB\", \"name\" : \"bgpPeerLastError\"},\n        {\"module\" : \"BGP4-MIB\", \"name\" : \"bgpPeerState\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"CbgpSafi\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unicast\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"multicast\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"unicastAndMulticast\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"vpn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"128\"\n            },\n            \"description\" :\n                \"\"\"Subsequent Address Family Identifier(SAFI) is used\nby BGP speaker to indicate the type of the the Network\nLayer Reachability Information(NLRI) being carried.\nRFC-2858 has defined the following values for SAFI.\n1 - Network Layer Reachability Information used for\n    unicast forwarding\n2 - Network Layer Reachability Information used for\n    multicast forwarding\n3 - Network Layer Reachability Information used for\n    both unicast and multicast forwarding.\nSAFI values 128 through 255 are for private use.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC-2858: Multiprotocol Extensions for BGP-4,\nRFC-2547: BGP/MPLS VPNs\"\"\",\n        },\n        \"CbgpNetworkAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"Represents the Network Address prefix carried in the\nBGP UPDATE messages.  In the following table, column\n'Type' gives the kind of Network Layer address which\nwill be stored in the object of this type based on the\nvalues of Address Family Identifier(AFI) and SAFI.\n\n AFI          SAFI                   Type\n\nipv4(1)      unicast(1)            IPv4 address\nipv4(1)      multicast(2)          IPv4 address\nipv4(1)      vpn(128)              VPN-IPv4 address\nipv6(2)      unicast(1)            IPv6 address\nipv6(2)      multicast(2)          IPv6 address\nipv6(2)      vpn(128)              VPN-IPv6 address\n\nA VPN-IPv4 address is a 12-byte quantity, beginning\nwith an 8-byte 'Route Distinguisher (RD)' and ending\nwith a 4-byte IPv4 address.\n\nA VPN-IPv6 address is a 24-byte quantity, beginning\nwith an 8-byte 'Route Distinguisher (RD)' and ending\nwith a 16-byte IPv6 address.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2858, Multiprotocol Extensions for BGP-4.\nRFC 2547, Section 4.1, BGP/MPLS VPNs.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoBgp4MIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoBgp4NotifyPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0\",\n        }, # node\n        \"ciscoBgp4MIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1\",\n        }, # node\n        \"cbgpRoute\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1\",\n        }, # node\n        \"cbgpRouteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information about routes to\ndestination networks from all BGP4 peers.  Since\nBGP4 can carry routes for multiple Network Layer\nprotocols, this table has the Address Family\nIdentifier(AFI) of the Network Layer protocol as the\nfirst index. Further for a given AFI, routes carried\nby BGP4 are distinguished based on Subsequent Address\nFamily Identifiers(SAFI).  Hence that is used as the\nsecond index.  Conceptually there is a separate Loc-RIB\nmaintained by the BGP speaker for each combination of\nAFI and SAFI supported by it.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC-1771: A Border Gateway Protocol 4 (BGP-4),\nRFC-2858: Multiprotocol Extensions for BGP-4,\nRFC-2547: BGP/MPLS VPNs\"\"\",\n        }, # table\n        \"cbgpRouteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cbgpRouteAfi\",\n                \"cbgpRouteSafi\",\n                \"cbgpRoutePeerType\",\n                \"cbgpRoutePeer\",\n                \"cbgpRouteAddrPrefix\",\n                \"cbgpRouteAddrPrefixLen\",\n            ],\n            \"description\" :\n                \"\"\"Information about a path to a network received from\na peer.\"\"\",\n        }, # row\n        \"cbgpRouteAfi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Represents Address Family Identifier(AFI) of the\nNetwork Layer protocol associated with the route.\nAn implementation is only required to support IPv4\nunicast and VPNv4 (Value - 1) address families.\"\"\",\n        }, # column\n        \"cbgpRouteSafi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-BGP4-MIB\", \"name\" : \"CbgpSafi\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Represents Subsequent Address Family Identifier(SAFI)\nof the route. It gives additional information about\nthe type of the route. An implementation is only\nrequired to support IPv4 unicast(Value - 1) and VPNv4(\nValue - 128) address families.\"\"\",\n        }, # column\n        \"cbgpRoutePeerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Represents the type of Network Layer address stored\nin cbgpRoutePeer. An implementation is only required\nto support IPv4 address type(Value - 1).\"\"\",\n        }, # column\n        \"cbgpRoutePeer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Network Layer address of the peer where the route\ninformation was learned. An implementation is only\nrequired to support an IPv4 peer.\"\"\",\n        }, # column\n        \"cbgpRouteAddrPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-BGP4-MIB\", \"name\" : \"CbgpNetworkAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A Network Address prefix in the Network Layer\nReachability Information field of BGP UPDATE message.\nThis object is a Network Address containing the prefix\nwith length specified by cbgpRouteAddrPrefixLen. Any\nbits beyond the length specified by\ncbgpRouteAddrPrefixLen are zeroed.\"\"\",\n        }, # column\n        \"cbgpRouteAddrPrefixLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2040\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2040\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Length in bits of the Network Address prefix in the\nNetwork Layer Reachability Information field.\"\"\",\n        }, # column\n        \"cbgpRouteOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"igp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ultimate origin of the route information.\"\"\",\n        }, # column\n        \"cbgpRouteASPathSegment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sequence of AS path segments.  Each AS\npath segment is represented by a triple\n<type, length, value>.\n\nThe type is a 1-octet field which has two\npossible values:\n1  AS_SET: unordered set of ASs a route in the\n          UPDATE message has traversed\n2  AS_SEQUENCE: ordered set of ASs a route in the\n               UPDATE message has traversed.\n\nThe length is a 1-octet field containing the\nnumber of ASs in the value field.\n\nThe value field contains one or more AS\nnumbers, each AS is represented in the octet\nstring as a pair of octets according to the\nfollowing algorithm:\n\nfirst-byte-of-pair = ASNumber / 256;\nsecond-byte-of-pair = ASNumber & 255;\"\"\",\n        }, # column\n        \"cbgpRouteNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-BGP4-MIB\", \"name\" : \"CbgpNetworkAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Network Layer address of the border router\nthat should be used for the destination network.\"\"\",\n        }, # column\n        \"cbgpRouteMedPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence/absence of MULTI_EXIT_DISC\nattribute for the route.\"\"\",\n        }, # column\n        \"cbgpRouteMultiExitDisc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This metric is used to discriminate between multiple\nexit points to an adjacent autonomous system.  The\nvalue of this object is irrelevant if the value of\nof cbgpRouteMedPresent is false(2).\"\"\",\n        }, # column\n        \"cbgpRouteLocalPrefPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence/absence of LOCAL_PREF\nattribute for the route.\"\"\",\n        }, # column\n        \"cbgpRouteLocalPref\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degree of preference calculated by the local BGP4\nspeaker for the route. The value of this object is\nirrelevant if the value of cbgpRouteLocalPrefPresent\nis false(2).\"\"\",\n        }, # column\n        \"cbgpRouteAtomicAggregate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lessSpecificRouteNotSelected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lessSpecificRouteSelected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether or not the local system has selected a less\nspecific route without selecting a more specific\nroute.\"\"\",\n        }, # column\n        \"cbgpRouteAggregatorAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The AS number of the last BGP4 speaker that performed\nroute aggregation.  A value of zero (0) indicates the\nabsence of this attribute.\"\"\",\n        }, # column\n        \"cbgpRouteAggregatorAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Represents the type of Network Layer address stored\nin cbgpRouteAggregatorAddr.\"\"\",\n        }, # column\n        \"cbgpRouteAggregatorAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Network Layer address of the last BGP4 speaker\nthat performed route aggregation.  A value of all zeros\nindicates the absence of this attribute.\"\"\",\n        }, # column\n        \"cbgpRouteBest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of whether or not this route was chosen\nas the best BGP4 route.\"\"\",\n        }, # column\n        \"cbgpRouteUnknownAttr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"One or more path attributes not understood by this\nBGP4 speaker.  Size zero (0) indicates the absence of\nsuch attribute(s).  Octets beyond the maximum size, if\nany, are not recorded by this object.\n\nEach path attribute is a triple <attribute type,\nattribute length, attribute value> of variable length.\nAttribute Type is a two-octet field that consists of\nthe Attribute Flags octet followed by the Attribute\nType Code octet.  If the Extended Length bit of the\nAttribute Flags octet is set to 0, the third octet of\nthe Path Attribute contains the length of the\nattribute data in octets.  If the Extended Length bit\nof the Attribute Flags octet is set to 1, then the\nthird and the fourth octets of the path attribute\ncontain the length of the attribute data in octets.\nThe remaining octets of the Path Attribute represent\nthe attribute value and are interpreted according to\nthe Attribute Flags and the Attribute Type Code.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC-1771: A Border Gateway Protocol 4 (BGP-4),\nsection 4.3\"\"\",\n        }, # column\n        \"cbgpPeer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2\",\n        }, # node\n        \"cbgpPeerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP peer table.  This table contains,\none entry per BGP peer, information about\nthe connections with BGP peers.\"\"\",\n        }, # table\n        \"cbgpPeerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BGP4-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"bgpPeerEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about the\nconnection with a BGP peer.\"\"\",\n        }, # row\n        \"cbgpPeerPrefixAccepted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Route prefixes received on this connnection,\nwhich are accepted after applying filters. Possible\nfilters are route maps, prefix lists, distributed\nlists, etc.\"\"\",\n        }, # column\n        \"cbgpPeerPrefixDenied\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Counter which gets incremented when a route prefix\nreceived on this connection is denied  or when a route\nprefix is denied during soft reset of this connection\nif 'soft-reconfiguration' is on . This object is\ninitialized to zero when the peer is  configured or\nthe router is rebooted\"\"\",\n        }, # column\n        \"cbgpPeerPrefixLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Max number of route prefixes accepted on this\nconnection\"\"\",\n        }, # column\n        \"cbgpPeerPrefixAdvertised\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Counter which gets incremented when a route prefix\nis advertised on this connection. This object is\ninitialized to zero when the peer is configured or\nthe router is rebooted\"\"\",\n        }, # column\n        \"cbgpPeerPrefixSuppressed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Counter which gets incremented when a route prefix\nis suppressed from being sent on this connection. This\nobject is initialized to zero when the peer is\nconfigured or the router is rebooted\"\"\",\n        }, # column\n        \"cbgpPeerPrefixWithdrawn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Counter which gets incremented when a route prefix\nis withdrawn on this connection. This object is\ninitialized to zero when the peer is configured or\nthe router is rebooted\"\"\",\n        }, # column\n        \"cbgpPeerLastErrorTxt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Implementation specific error description for\nbgpPeerLastErrorReceived.\"\"\",\n        }, # column\n        \"cbgpPeerPrevState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"opensent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"openconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP peer connection previous state.\"\"\",\n            \"reference>\" :\n                \"\"\"Section 8, RFC 1771, A Border Gateway Protocol 4\n(BGP-4).\"\"\",\n        }, # column\n        \"cbgpPeerCapsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the capabilities that are\nsupported by a peer. Capabilities of a peer are\nreceived during BGP connection establishment.\nValues corresponding to each received capability\nare stored in this table. When a new capability\nis received, this table is updated with a new\nentry. When an existing capability is not received\nduring the latest connection establishment, the\ncorresponding entry is deleted from the table.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\n\nRFC2818, Route Refresh Capability for BGP-4.\n\nRFC2858, Multiprotocol Extensions for BGP-4.\n\ndraft-ietf-idr-restart-05.txt, Graceful Restart\nMechanism for BGP\"\"\",\n        }, # table\n        \"cbgpPeerCapsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bgpPeerRemoteAddr\",\n                \"cbgpPeerCapCode\",\n                \"cbgpPeerCapIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry represents a capability received from a\npeer with a particular code and an index. When a\ncapability is received multiple times with different\nvalues during a BGP connection establishment,\ncorresponding entries are differentiated with indices.\"\"\",\n        }, # row\n        \"cbgpPeerCapCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"multiProtocol\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"routeRefresh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"gracefulRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"routeRefreshOld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The BGP Capability Advertisement Capability Code.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\n\nRFC2818, Route Refresh Capability for BGP-4.\n\nRFC2858, Multiprotocol Extensions for BGP-4.\n\ndraft-ietf-idr-restart-05.txt, Graceful Restart\nMechanism for BGP\"\"\",\n        }, # column\n        \"cbgpPeerCapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Multiple instances of a given capability may be\nsent by a BGP speaker.  This variable is used\nto index them.\"\"\",\n        }, # column\n        \"cbgpPeerCapValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the announced capability. This\nMIB object value is organized as given below,\n    Capability : Route Refresh Capability\n                 Null string\n    Capability : Multiprotocol Extensions\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n    Capability : Graceful Restart\n      +----------------------------------+\n      | Restart Flags (4 bits)           |\n      +----------------------------------+\n      | Restart Time in seconds (12 bits)|\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n      | Flags for Address Family (8 bits)|\n      +----------------------------------+\n      | ...                              |\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n      | Flags for Address Family (8 bits)|\n      +----------------------------------+\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\n\nRFC2818, Route Refresh Capability for BGP-4.\n\nRFC2858, Multiprotocol Extensions for BGP-4.\n\ndraft-ietf-idr-restart-05.txt, Graceful Restart\nMechanism for BGP\"\"\",\n        }, # column\n        \"cbgpPeerAddrFamilyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information related to\naddress families supported by a peer. Supported\naddress families of a peer are known during BGP\nconnection establishment. When a new supported\naddress family is known, this table is updated\nwith a new entry. When an address family is not\nsupported any more, corresponding entry is deleted\nfrom the table.\"\"\",\n        }, # table\n        \"cbgpPeerAddrFamilyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bgpPeerRemoteAddr\",\n                \"cbgpPeerAddrFamilyAfi\",\n                \"cbgpPeerAddrFamilySafi\",\n            ],\n            \"description\" :\n                \"\"\"An entry is identified by an AFI/SAFI pair and\npeer address. It contains names associated with\nan address family.\"\"\",\n        }, # row\n        \"cbgpPeerAddrFamilyAfi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The AFI index of the entry. An implementation\nis only required to support IPv4 unicast and\nVPNv4 (Value - 1) address families.\"\"\",\n        }, # column\n        \"cbgpPeerAddrFamilySafi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-BGP4-MIB\", \"name\" : \"CbgpSafi\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The SAFI index of the entry. An implementation\nis only required to support IPv4 unicast(Value\n- 1) and VPNv4( Value - 128) address families.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC-2858: Multiprotocol Extensions for BGP-4,\nRFC-2547: BGP/MPLS VPNs\"\"\",\n        }, # column\n        \"cbgpPeerAddrFamilyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Implementation specific Address Family name.\"\"\",\n        }, # column\n        \"cbgpPeerAddrFamilyPrefixTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains prefix related information\nrelated to address families supported by a peer.\nSupported address families of a peer are known\nduring BGP connection establishment. When a new\nsupported address family is known, this table\nis updated with a new entry. When an address\nfamily is not supported any more, corresponding\nentry is deleted from the table.\"\"\",\n        }, # table\n        \"cbgpPeerAddrFamilyPrefixEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bgpPeerRemoteAddr\",\n                \"cbgpPeerAddrFamilyAfi\",\n                \"cbgpPeerAddrFamilySafi\",\n            ],\n            \"description\" :\n                \"\"\"An entry is identified by an AFI/SAFI pair and\npeer address. It contains information associated\nwith route prefixes belonging to an address family.\"\"\",\n        }, # row\n        \"cbgpPeerAcceptedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of accepted route prefixes on this connection,\nwhich belong to an address family.\"\"\",\n        }, # column\n        \"cbgpPeerDeniedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix, which\nbelongs to an address family, received on this\nconnection is denied. It is initialized to zero when\nthe connection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpPeerPrefixAdminLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Max number of route prefixes accepted for an address\nfamily on this connection.\"\"\",\n        }, # column\n        \"cbgpPeerPrefixThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Prefix threshold value (%) for an address family\non this connection at which warning message stating\nthe prefix count is crossed the threshold or\ncorresponding SNMP notification is generated.\"\"\",\n        }, # column\n        \"cbgpPeerPrefixClearThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Prefix threshold value (%) for an address family\non this connection at which SNMP clear notification\nis generated if prefix threshold notification is\nalready generated.\"\"\",\n        }, # column\n        \"cbgpPeerAdvertisedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family is advertised\non this connection. It is initialized to zero when\nthe connection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpPeerSuppressedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family is suppressed\nfrom being sent on this connection. It is\ninitialized to zero when the connection is undergone\na hard reset.\"\"\",\n        }, # column\n        \"cbgpPeerWithdrawnPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family, is withdrawn on\nthis connection. It is initialized to zero when the\nconnection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpPeer2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"BGP peer table.  This table contains,\none entry per BGP peer, information about\nthe connections with BGP peers.\"\"\",\n        }, # table\n        \"cbgpPeer2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cbgpPeer2Type\",\n                \"cbgpPeer2RemoteAddr\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about the\nconnection with a BGP peer.\"\"\",\n        }, # row\n        \"cbgpPeer2Type\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Represents the type of Peer address stored\nin cbgpPeer2Entry.\"\"\",\n        }, # column\n        \"cbgpPeer2RemoteAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The remote IP address of this entry's BGP\npeer.\"\"\",\n        }, # column\n        \"cbgpPeer2State\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"opensent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"openconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP peer connection state.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.2.2.\"\"\",\n        }, # column\n        \"cbgpPeer2AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired state of the BGP connection.\nA transition from 'stop' to 'start' will cause\nthe BGP Manual Start Event to be generated.\nA transition from 'start' to 'stop' will cause\nthe BGP Manual Stop Event to be generated.\nThis parameter can be used to restart BGP peer\nconnections.  Care should be used in providing\nwrite access to this object without adequate\nauthentication.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.1.2.\"\"\",\n        }, # column\n        \"cbgpPeer2NegotiatedVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The negotiated version of BGP running between\nthe two peers.\n\nThis entry MUST be zero (0) unless the\ncbgpPeer2State is in the openconfirm or the\nestablished state.\n\nNote that legal values for this object are\nbetween 0 and 255.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\nRFC 4271, Section 7.\"\"\",\n        }, # column\n        \"cbgpPeer2LocalAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local IP address of this entry's BGP\nconnection.\"\"\",\n        }, # column\n        \"cbgpPeer2LocalPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local port for the TCP connection between\nthe BGP peers.\"\"\",\n        }, # column\n        \"cbgpPeer2LocalAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local AS number for this session.\"\"\",\n        }, # column\n        \"cbgpPeer2LocalIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of this entry's BGP peer.\"\"\",\n        }, # column\n        \"cbgpPeer2RemotePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote port for the TCP connection\nbetween the BGP peers.  Note that the\nobjects cbgpPeer2LocalAddr,\ncbgpPeer2LocalPort, cbgpPeer2RemoteAddr, and\ncbgpPeer2RemotePort provide the appropriate\nreference to the standard MIB TCP\nconnection table.\"\"\",\n        }, # column\n        \"cbgpPeer2RemoteAs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote autonomous system number received in\nthe BGP OPEN message.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # column\n        \"cbgpPeer2RemoteIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP Identifier of this entry's BGP peer.\nThis entry MUST be 0.0.0.0 unless the\ncbgpPeer2State is in the openconfirm or the\nestablished state.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2, 'BGP Identifier'.\"\"\",\n        }, # column\n        \"cbgpPeer2InUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages\nreceived on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\"\"\",\n        }, # column\n        \"cbgpPeer2OutUpdates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of BGP UPDATE messages\ntransmitted on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\"\"\",\n        }, # column\n        \"cbgpPeer2InTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages received\nfrom the remote peer on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.\"\"\",\n        }, # column\n        \"cbgpPeer2OutTotalMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages transmitted to\nthe remote peer on this connection.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.\"\"\",\n        }, # column\n        \"cbgpPeer2LastError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last error code and subcode seen by this\npeer on this connection.  If no error has\noccurred, this field is zero.  Otherwise, the\nfirst byte of this two byte OCTET STRING\ncontains the error code, and the second byte\ncontains the subcode.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.5.\"\"\",\n        }, # column\n        \"cbgpPeer2FsmEstablishedTransitions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of times the BGP FSM\ntransitioned into the established state\nfor this peer.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.\"\"\",\n        }, # column\n        \"cbgpPeer2FsmEstablishedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This timer indicates how long (in\nseconds) this peer has been in the\nestablished state or how long\nsince this peer was last in the\nestablished state.  It is set to zero when\na new peer is configured or when the router is\nbooted.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.\"\"\",\n        }, # column\n        \"cbgpPeer2ConnectRetryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nConnectRetry timer.  The suggested value\nfor this timer is 120 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 8.2.2.  This is the value used\nto initialize the 'ConnectRetryTimer'.\"\"\",\n        }, # column\n        \"cbgpPeer2HoldTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the Hold\nTimer established with the peer.  The\nvalue of this object is calculated by this\nBGP speaker, using the smaller of the\nvalues in cbgpPeer2HoldTimeConfigured and the\nHold Time received in the OPEN message.\n\nThis value must be at least three seconds\nif it is not zero (0).\n\nIf the Hold Timer has not been established\nwith the peer this object MUST have a value\nof zero (0).\n\nIf the cbgpPeer2HoldTimeConfigured object has\na value of (0), then this object MUST have a\nvalue of (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\"\"\",\n        }, # column\n        \"cbgpPeer2KeepAlive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the KeepAlive\ntimer established with the peer.  The value\nof this object is calculated by this BGP\nspeaker such that, when compared with\ncbgpPeer2HoldTime, it has the same proportion\nthat cbgpPeer2KeepAliveConfigured has,\ncompared with cbgpPeer2HoldTimeConfigured.\n\nIf the KeepAlive timer has not been established\nwith the peer, this object MUST have a value\nof zero (0).\n\nIf the of cbgpPeer2KeepAliveConfigured object\nhas a value of (0), then this object MUST have\na value of (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.4.\"\"\",\n        }, # column\n        \"cbgpPeer2HoldTimeConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the Hold Time\nconfigured for this BGP speaker with this\npeer.  This value is placed in an OPEN\nmessage sent to this peer by this BGP\nspeaker, and is compared with the Hold\nTime field in an OPEN message received\nfrom the peer when determining the Hold\nTime (cbgpPeer2HoldTime) with the peer.\nThis value must not be less than three\nseconds if it is not zero (0).  If it is\nzero (0), the Hold Time is NOT to be\nestablished with the peer.  The suggested\nvalue for this timer is 90 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"cbgpPeer2KeepAliveConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"21845\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nKeepAlive timer configured for this BGP\nspeaker with this peer.  The value of this\nobject will only determine the\nKEEPALIVE messages' frequency relative to\nthe value specified in\ncbgpPeer2HoldTimeConfigured; the actual\ntime interval for the KEEPALIVE messages is\nindicated by cbgpPeer2KeepAlive.  A\nreasonable maximum value for this timer\nwould be one third of that of\ncbgpPeer2HoldTimeConfigured.\nIf the value of this object is zero (0),\nno periodical KEEPALIVE messages are sent\nto the peer after the BGP connection has\nbeen established.  The suggested value for\nthis timer is 30 seconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.4.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"cbgpPeer2MinASOriginationInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nMinASOriginationInterval timer.\nThe suggested value for this timer is 15\nseconds.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.2.1.2.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"cbgpPeer2MinRouteAdvertisementInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Time interval (in seconds) for the\nMinRouteAdvertisementInterval timer.\nThe suggested value for this timer is 30\nseconds for EBGP connections and 5\nseconds for IBGP connections.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 9.2.1.1.\nRFC 4271, Section 10.\"\"\",\n        }, # column\n        \"cbgpPeer2InUpdateElapsedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Elapsed time (in seconds) since the last BGP\nUPDATE message was received from the peer.\nEach time cbgpPeer2InUpdates is incremented,\nthe value of this object is set to zero (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.3.\nRFC 4271, Section 8.2.2, Established state.\"\"\",\n        }, # column\n        \"cbgpPeer2LastErrorTxt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Implementation specific error description for\nbgpPeerLastErrorReceived.\"\"\",\n        }, # column\n        \"cbgpPeer2PrevState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.5.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"opensent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"openconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The BGP peer connection previous state.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1771, Section 8, A Border Gateway Protocol 4\n(BGP-4).\"\"\",\n        }, # column\n        \"cbgpPeer2CapsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the capabilities that are\nsupported by a peer. Capabilities of a peer are\nreceived during BGP connection establishment.\nValues corresponding to each received capability\nare stored in this table. When a new capability\nis received, this table is updated with a new\nentry. When an existing capability is not received\nduring the latest connection establishment, the\ncorresponding entry is deleted from the table.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\nRFC 2818, Route Refresh Capability for BGP-4.\nRFC 2858, Multiprotocol Extensions for BGP-4.\nRFC 4724, Graceful Restart Mechanism for BGP.\nRFC 4893, BGP Support for Four-octet AS\nNumber Space.\ndraft-ietf-idr-add-paths-04.txt, Advertisement\nof Multiple Paths in BGP.\"\"\",\n        }, # table\n        \"cbgpPeer2CapsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cbgpPeer2Type\",\n                \"cbgpPeer2RemoteAddr\",\n                \"cbgpPeer2CapCode\",\n                \"cbgpPeer2CapIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry represents a capability received from a\npeer with a particular code and an index. When a\ncapability is received multiple times with different\nvalues during a BGP connection establishment,\ncorresponding entries are differentiated with indices.\"\"\",\n        }, # row\n        \"cbgpPeer2CapCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"multiProtocol\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"routeRefresh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"gracefulRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"fourByteAs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"addPath\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"routeRefreshOld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The BGP Capability Advertisement Capability Code.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\nRFC 2818, Route Refresh Capability for BGP-4.\nRFC 2858, Multiprotocol Extensions for BGP-4.\nRFC 4724, Graceful Restart Mechanism for BGP.\nRFC 4893, BGP Support for Four-octet AS\nNumber Space.\ndraft-ietf-idr-add-paths-04.txt, Advertisement\nof Multiple Paths in BGP.\"\"\",\n        }, # column\n        \"cbgpPeer2CapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Multiple instances of a given capability may be\nsent by a BGP speaker.  This variable is used\nto index them.\"\"\",\n        }, # column\n        \"cbgpPeer2CapValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the announced capability. This\nMIB object value is organized as given below,\n    Capability : Route Refresh Capability\n                 4-Byte AS Capability\n                 Null string\n    Capability : Multiprotocol Extensions\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n    Capability : Graceful Restart\n      +----------------------------------+\n      | Restart Flags (4 bits)           |\n      +----------------------------------+\n      | Restart Time in seconds (12 bits)|\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n      | Flags for Address Family (8 bits)|\n      +----------------------------------+\n      | ...                              |\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n      | Flags for Address Family (8 bits)|\n      +----------------------------------+\n    Capability : Additional Paths\n      +----------------------------------+\n      | AFI(16 bits)                     |\n      +----------------------------------+\n      | SAFI (8 bits)                    |\n      +----------------------------------+\n      | Send/Receive (8 bits)            |\n      +----------------------------------+\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2842, Capabilities Advertisement with\nBGP-4.\nRFC 2818, Route Refresh Capability for BGP-4.\nRFC 2858, Multiprotocol Extensions for BGP-4.\nRFC 4724, Graceful Restart Mechanism for BGP.\nRFC 4893, BGP Support for Four-octet AS\nNumber Space.\ndraft-ietf-idr-add-paths-04.txt, Advertisement\nof Multiple Paths in BGP.\"\"\",\n        }, # column\n        \"cbgpPeer2AddrFamilyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information related to\naddress families supported by a peer. Supported\naddress families of a peer are known during BGP\nconnection establishment. When a new supported\naddress family is known, this table is updated\nwith a new entry. When an address family is not\nsupported any more, corresponding entry is deleted\nfrom the table.\"\"\",\n        }, # table\n        \"cbgpPeer2AddrFamilyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cbgpPeer2Type\",\n                \"cbgpPeer2RemoteAddr\",\n                \"cbgpPeer2AddrFamilyAfi\",\n                \"cbgpPeer2AddrFamilySafi\",\n            ],\n            \"description\" :\n                \"\"\"An entry is identified by an AFI/SAFI pair and\npeer address. It contains names associated with\nan address family.\"\"\",\n        }, # row\n        \"cbgpPeer2AddrFamilyAfi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The AFI index of the entry. An implementation\nis only required to support IPv4 unicast and\nVPNv4 (Value - 1) address families.\"\"\",\n        }, # column\n        \"cbgpPeer2AddrFamilySafi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-BGP4-MIB\", \"name\" : \"CbgpSafi\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The SAFI index of the entry. An implementation\nis only required to support IPv4 unicast(Value\n- 1) and VPNv4( Value - 128) address families.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2858, Multiprotocol Extensions for BGP-4.\nRFC 2547, BGP/MPLS VPNs.\"\"\",\n        }, # column\n        \"cbgpPeer2AddrFamilyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Implementation specific Address Family name.\"\"\",\n        }, # column\n        \"cbgpPeer2AddrFamilyPrefixTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains prefix related information\nrelated to address families supported by a peer.\nSupported address families of a peer are known\nduring BGP connection establishment. When a new\nsupported address family is known, this table\nis updated with a new entry. When an address\nfamily is not supported any more, corresponding\nentry is deleted from the table.\"\"\",\n        }, # table\n        \"cbgpPeer2AddrFamilyPrefixEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cbgpPeer2Type\",\n                \"cbgpPeer2RemoteAddr\",\n                \"cbgpPeer2AddrFamilyAfi\",\n                \"cbgpPeer2AddrFamilySafi\",\n            ],\n            \"description\" :\n                \"\"\"An entry is identified by an AFI/SAFI pair and\npeer address. It contains information associated\nwith route prefixes belonging to an address family.\"\"\",\n        }, # row\n        \"cbgpPeer2AcceptedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of accepted route prefixes on this connection,\nwhich belong to an address family.\"\"\",\n        }, # column\n        \"cbgpPeer2DeniedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix, which\nbelongs to an address family, received on this\nconnection is denied. It is initialized to zero when\nthe connection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpPeer2PrefixAdminLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Max number of route prefixes accepted for an address\nfamily on this connection.\"\"\",\n        }, # column\n        \"cbgpPeer2PrefixThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Prefix threshold value (%) for an address family\non this connection at which warning message stating\nthe prefix count is crossed the threshold or\ncorresponding SNMP notification is generated.\"\"\",\n        }, # column\n        \"cbgpPeer2PrefixClearThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Prefix threshold value (%) for an address family\non this connection at which SNMP clear notification\nis generated if prefix threshold notification is\nalready generated.\"\"\",\n        }, # column\n        \"cbgpPeer2AdvertisedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family is advertised\non this connection. It is initialized to zero when\nthe connection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpPeer2SuppressedPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family is suppressed\nfrom being sent on this connection. It is\ninitialized to zero when the connection is undergone\na hard reset.\"\"\",\n        }, # column\n        \"cbgpPeer2WithdrawnPrefixes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.2.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when a route prefix,\nwhich belongs to an address family, is withdrawn on\nthis connection. It is initialized to zero when the\nconnection is undergone a hard reset.\"\"\",\n        }, # column\n        \"cbgpGlobal\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.3\",\n        }, # node\n        \"cbgpNotifsEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"notifsEnable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notifsPeer2Enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the specific notifications are\nenabled.\nIf notifsEnable(0) bit is set to 1,\nthen the notifications defined in\nciscoBgp4NotificationsGroup1 are enabled;\nIf notifsPeer2Enable(1) bit is set to 1,\nthen the notifications defined in\nciscoBgp4Peer2NotificationsGroup are enabled.\"\"\",\n        }, # scalar\n        \"cbgpLocalAs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The local autonomous system (AS) number.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4271, Section 4.2, 'My Autonomous System'.\nRFC 4893, BGP Support for Four-octet AS\nNumber Space.\"\"\",\n        }, # scalar\n        \"ciscoBgp4NotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.2\",\n        }, # node\n        \"ciscoBgp4MIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3\",\n        }, # node\n        \"ciscoBgp4MIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.1\",\n        }, # node\n        \"ciscoBgp4MIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cbgpFsmStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"cbgpPeerLastErrorTxt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrevState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The BGP cbgpFsmStateChange notification is generated\nfor every BGP FSM state change. The bgpPeerRemoteAddr\nvalue is attached to the notification object ID.\"\"\",\n        }, # notification\n        \"cbgpBackwardTransition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"bgpPeerLastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"bgpPeerState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"BGP4-MIB\"\n                },\n                \"cbgpPeerLastErrorTxt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrevState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpBackwardTransition Event is generated when the\nBGP FSM moves from a higher numbered state to a lower\nnumbered state. The bgpPeerRemoteAddr value is attached\nto the notification object ID.\"\"\",\n        }, # notification\n        \"cbgpPrefixThresholdExceeded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeerPrefixAdminLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPrefixThresholdExceeded notification is\ngenerated when prefix count exceeds the configured\nwarning threshold on a session for an address\nfamily. The bgpPeerRemoteAddr, cbgpPeerAddrFamilyAfi\nand cbgpPeerAddrFamilySafi values are attached to the\nnotification object ID.\"\"\",\n        }, # notification\n        \"cbgpPrefixThresholdClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeerPrefixAdminLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixClearThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPrefixThresholdClear notification is\ngenerated when prefix count drops below the configured\nclear threshold on a session for an address family once\ncbgpPrefixThresholdExceeded is generated. This won't\nbe generated if the peer session goes down after the\ngeneration of cbgpPrefixThresholdExceeded.\nThe bgpPeerRemoteAddr, cbgpPeerAddrFamilyAfi and\ncbgpPeerAddrFamilySafi values are attached to the\nnotification object ID.\"\"\",\n        }, # notification\n        \"cbgpPeer2EstablishedNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2LastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2State\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2EstablishedNotification notification\nis generated when the BGP FSM enters the established\nstate.\"\"\",\n        }, # notification\n        \"cbgpPeer2BackwardTransNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2LastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2State\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2BackwardTransNotification notification\nis generated when the BGP FSM moves from a higher\nnumbered state to a lower numbered state.\"\"\",\n        }, # notification\n        \"cbgpPeer2FsmStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2LastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2State\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LastErrorTxt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrevState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2FsmStateChange notification is generated\nfor every BGP FSM state change.\"\"\",\n        }, # notification\n        \"cbgpPeer2BackwardTransition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2LastError\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2State\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LastErrorTxt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrevState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2BackwardTransition notification is\ngenerated when the BGP FSM moves from a higher numbered\nstate to a lower numbered state.\"\"\",\n        }, # notification\n        \"cbgpPeer2PrefixThresholdExceeded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2PrefixAdminLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2PrefixThresholdExceeded notification is\ngenerated when prefix count exceeds the configured\nwarning threshold on a session for an address\nfamily.\"\"\",\n        }, # notification\n        \"cbgpPeer2PrefixThresholdClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cbgpPeer2PrefixAdminLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixClearThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cbgpPeer2PrefixThresholdClear notification is\ngenerated when prefix count drops below the configured\nclear threshold on a session for an address family once\ncbgpPeer2PrefixThresholdExceeded is generated.\nThis will not be generated if the peer session goes down\nafter the generation of cbgpPrefixThresholdExceeded.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"ciscoBgp4RouteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpRouteOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteASPathSegment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteMedPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteMultiExitDisc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteLocalPrefPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteLocalPref\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteAtomicAggregate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteAggregatorAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteAggregatorAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteAggregatorAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteBest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpRouteUnknownAttr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout routes received by BGP speaker.\"\"\",\n        }, # group\n        \"ciscoBgp4PeerGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cbgpPeerPrefixAccepted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixDenied\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixAdvertised\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixSuppressed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixWithdrawn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout routes received by BGP speaker.\"\"\",\n        }, # group\n        \"ciscoBgp4NotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cbgpFsmStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of notifications related to BGP.\"\"\",\n        }, # group\n        \"ciscoBgp4PeerGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpPeerPrevState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerLastErrorTxt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerCapValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerAddrFamilyName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerAcceptedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerDeniedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixAdminLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerPrefixClearThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerAdvertisedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerSuppressedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeerWithdrawnPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout a BGP peer.\"\"\",\n        }, # group\n        \"ciscoBgp4NotificationsGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpFsmStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpBackwardTransition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPrefixThresholdExceeded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPrefixThresholdClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of notifications related to BGP.\"\"\",\n        }, # group\n        \"ciscoBgp4Peer2Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpPeer2State\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2AdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2NegotiatedVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LocalAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LocalPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LocalIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2RemotePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2RemoteAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2RemoteIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2InUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2OutUpdates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2InTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2OutTotalMessages\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LastError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2FsmEstablishedTransitions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2FsmEstablishedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2ConnectRetryInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2HoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2KeepAlive\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2HoldTimeConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2KeepAliveConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2MinASOriginationInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2MinRouteAdvertisementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2InUpdateElapsedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2LastErrorTxt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrevState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2CapValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2AddrFamilyName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2AcceptedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2DeniedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixAdminLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixClearThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2AdvertisedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2SuppressedPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2WithdrawnPrefixes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout a BGP peer.\"\"\",\n        }, # group\n        \"ciscoBgp4Peer2NotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpPeer2EstablishedNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2BackwardTransNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2FsmStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2BackwardTransition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixThresholdExceeded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpPeer2PrefixThresholdClear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications related to BGP.\"\"\",\n        }, # group\n        \"ciscoBgp4GlobalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cbgpNotifsEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"cbgpLocalAs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of global objects related to BGP.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoBgp4MIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco BGP4 MIB\"\"\",\n            \"requires\" : {\n                \"ciscoBgp4RouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoBgp4MIBComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco BGP4 MIB\"\"\",\n            \"requires\" : {\n                \"ciscoBgp4RouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4PeerGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4NotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cbgpRouteAggregatorAddrType\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type for aggregator address.\"\"\",\n                },\n                \"cbgpRouteAggregatorAddr\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"OctetString\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddress\",\n                            },\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"4\",\n                                \"max\" : \"4\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"4\",\n                                \"max\" : \"4\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type for aggregator address.\"\"\",\n                },\n                \"cbgpPeerPrefixLimit\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Unsigned32\",\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"1\",\n                                \"max\" : \"4294967295\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"1\",\n                                \"max\" : \"4294967295\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"SET operation is not supported on this object\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ciscoBgp4MIBComplianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco BGP4 MIB\"\"\",\n            \"requires\" : {\n                \"ciscoBgp4RouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4PeerGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4NotificationsGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cbgpRouteAggregatorAddrType\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type.\"\"\",\n                },\n                \"cbgpRouteAggregatorAddr\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"OctetString\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddress\",\n                            },\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type.\"\"\",\n                },\n                \"cbgpPeerPrefixAdminLimit\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"SET operation is not supported on this object\"\"\",\n                },\n                \"cbgpPeerPrefixThreshold\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"SET operation is not supported on this object\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ciscoBgp4MIBComplianceRev3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-BGP4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.187.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco BGP4 MIB\"\"\",\n            \"requires\" : {\n                \"ciscoBgp4RouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4PeerGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4GlobalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4NotificationsGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-BGP4-MIB\"\n                },\n                \"ciscoBgp4Peer2Group\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"description\" :\n                        \"\"\"This group is unconditionally optional.\"\"\",\n                },\n                \"ciscoBgp4Peer2NotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"description\" :\n                        \"\"\"This group is unconditionally optional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cbgpRouteAggregatorAddrType\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type.\"\"\",\n                },\n                \"cbgpRouteAggregatorAddr\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"OctetString\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddress\",\n                            },\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type.\"\"\",\n                },\n                \"cbgpPeerPrefixAdminLimit\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cbgpPeerPrefixThreshold\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cbgpPeer2LocalAddr\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"OctetString\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddress\",\n                            },\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"0\",\n                                \"max\" : \"4\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to support\nIPv4 address type.\"\"\",\n                },\n                \"cbgpNotifsEnable\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cbgpPeer2PrefixAdminLimit\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cbgpPeer2PrefixThreshold\" : {\n                    \"module\" : \"CISCO-BGP4-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-C2900-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-C2900-MIB\n\nFILENAME = \"/home/voldsminde/mvold/Desktop/netdisco-mibs-0.7/cisco/CISCO-C2900-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-C2900-MIB\",\n\n    \"CISCO-C2900-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Postal: Cisco Systems, Inc.\n170 West Tasman Drive\nSan Jose, CA 95134-1706\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: switchsnmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for Catalyst 2900 enterprise specific information\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2002-05-30 00:00\",\n                \"description\" :\n                    \"\"\"Added the c2900PortAddrSecureAgingTime,\nc2900PortAddrSecureAgingType and \nc2900PortAddrSecureAgingStatic\nMIB objects to port entry and port group;\nAlso added c2900NotificationsGroup and \nc2900PortStatsGroupRev1 object.\"\"\",\n            },\n            {\n                \"date\" : \"2001-07-25 13:45\",\n                \"description\" :\n                    \"\"\"Added the c2900PortVoiceVlanId\nMIB object to port group.\"\"\",\n            },\n            {\n                \"date\" : \"1999-09-24 00:00\",\n                \"description\" :\n                    \"\"\"Modified the description for the c2900InfoSelfTestFailed object\nso that the bits of the self-test bit array are explained.\"\"\",\n            },\n            {\n                \"date\" : \"1999-08-24 00:00\",\n                \"description\" :\n                    \"\"\"Modified the description for the c2900InfoSelfTestFailed object\nso that the bits of the self-test bit array are explained.\"\"\",\n            },\n            {\n                \"date\" : \"1999-05-20 00:00\",\n                \"description\" :\n                    \"\"\"Added enumerated values to c2900ModuleType for:\nATM modules\nVLAN-trunking 10/100 Ethernet modules\nGigabit Ethernet module\n\nAdded one enumerated value to c2900PortAdminSpeed\nto describe ATM 155.52 Mbps speed.\"\"\",\n            },\n            {\n                \"date\" : \"1998-06-08 00:00\",\n                \"description\" :\n                    \"\"\"Added the c2900PortSpantreeFast MIB object to port group.\"\"\",\n            },\n            {\n                \"date\" : \"1998-04-30 00:00\",\n                \"description\" :\n                    \"\"\"Added the c2900PortNoMonitorDestinationPort MIB object\nto remove a port from the monitored list.\n\nAdded c2900Portdot1dBasePort to C2900PortEntry.\n\nRemoved enumerated value securityDynamic(3) from the\nMIB object c2900PortUsageApplication\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoC2900MIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysName\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoC2900MIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87\",\n            \"status\" : \"current\",\n        }, # node\n        \"c2900MIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1\",\n        }, # node\n        \"c2900SysInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1\",\n        }, # node\n        \"c2900InfoBoardRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the revision number of the main board\non which the FastSwitch firmware resides.\"\"\",\n        }, # scalar\n        \"c2900InfoPeakBuffersUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"buffers\",\n            \"description\" :\n                \"\"\"The maximum number of 64-byte buffers used in the\nmain switch buffer pool.\"\"\",\n        }, # scalar\n        \"c2900InfoTotalBufferDepth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"buffers\",\n            \"description\" :\n                \"\"\"It represents the total number of 64-byte buffers\nin the Ethernet Controller.\"\"\",\n        }, # scalar\n        \"c2900InfoAddrCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system-wide maximum number of MAC addresses\nsupported in the address table, a primary\nresource when forwarding frames through a bridge.\nThe address table is dynamically updated with new\nlearned addresses inserted and aged addresses removed.\nThe address capacity represented by this object includes\ndynamic, secure, and static address types.\n\nTo ensure optimal performance, the number of MAC addresses\nin the bridged local area network to which this bridge is\nconnected should be less than the value of this object.\n\nThe system administrator can refer to this object\nfor the number of MAC addresses suppored by this box.\"\"\",\n        }, # scalar\n        \"c2900InfoRestrictedStaticAddrCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system-wide maximum number of static addresses\nsupported.  A static address is one that has explicit\nsource port filtering information assigned.\n\nThis number limits the static table's entries configured by user.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1D-1990: Section 6.7.2\"\"\",\n        }, # scalar\n        \"c2900InfoSelfTestFailed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit array where the presence of a particular bit\nindicates a failure of a specific Power On Self Test.\nBit 0 - System Board Failure\nBit 1 - CPU Buffer Failure\nBit 2 - Notify RAM Failure\nBit 3 - Supervisor ASIC Failure\nBit 4 - Data Buffer Failure\nBit 5 - Buffer Table Failure\nBit 6 - Satellite ASIC Failure\nBit 7 - Front End  Failure\"\"\",\n        }, # scalar\n        \"c2900InfoUtilDisplay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of utilization meter LEDs currently\nlit on the front panel, if the value of\nc2900InfoVisualIndicatorMode is selected as\nutilization(4).  More LEDs are lit\nas more total bandwidth through the switch\nis being utilized.\n\nThe percentage of the utilization is calculated as follows:\n   the number of LEDs lit/the total number of LEDs.\n\nThe total number of the LEDs is twenty four for c2900 switch.\n\nc2900InfoVisualIndicatorMode is utilization(4). If the value of\nc2900InfoVisualIndicatorMode is not utilization(4), the value of\nthe object will be zero.\"\"\",\n        }, # scalar\n        \"c2900InfoVisualIndicatorMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fullDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"linkRate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"utilization\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects what is currently selected\nas the visual indication mode, selected by the\nmode button.\n\nThe portStatus(1) mode uses the visual LEDS\nto indicate port link status.\n\nThe fullDuplex(2) mode uses the visual LEDS\nto indicate that a port is running with full\nduplex or half duplex or no link status.\n\nThe linkRate(3) mode uses the visual LEDS to\nindicate the rate of operation on a port:\n100 MBPS or 10 MBPS or no link.\n\nThe utilization(4) mode uses the visual LEDS to\nindicate the utiliztion of the system as more total\nbandwidth through the switch is being utilized,\nmore LED's are lit.\"\"\",\n        }, # scalar\n        \"c2900InfoRedunantPowerSupplyInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"absent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connectedFunctional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"connectedNotFunctional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"functionalPrimaryFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch allows a redundant power supply in addition\nto its local power supply. Only one power source can be\nsupplying power to a unit.\n\nabsent(1) :the redundant power supply is not connected\n           to the switch.\n\nconnectedFunctional(2) : the redundant power supply is\n          connected to the switch and operational.\n\nconnectedNotFunctional(3): the redundant power supply\n          is connected to the switch, but cannot supply\n          power to the system.\n\nfunctionalPrimaryFailed(4): the redundant power supply\n          is installed, powered on, and operational,\n          but a failure exists in the local power\n          supply system.\"\"\",\n        }, # scalar\n        \"c2900InfoBoardIdentifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the identifier of the main board\non which the FastSwitch firmware resides.\"\"\",\n        }, # scalar\n        \"c2900SysConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.2\",\n        }, # node\n        \"c2900ConfigAddressViolationAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.2.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"doNothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disablePort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sendNotify\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disablePortAndNotify\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates what action to take when an address violation\n(an address mismatch or duplication) occurs on a\nsecure port.  The default action is to do nothing.\n\n doNothing(1)       : do nothing\n disablePort(2)     : disable port; the port can only be reenabled\n                      by an explicit management action.\n sendNotify(3)        : generate address violation notification.\n disablePortAndNotify(4): disable port and send notification.\n\n Default value: doNothing(1).\n\n This object is deprecated. A separate object\n c2900PortAddressViolationAction is defined for each port.\"\"\",\n        }, # scalar\n        \"c2900ConfigBroadcastStormAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.2.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to true(1), the switch will generate\na broadcastStorm notification upon detecting a port is\nreceiving broadcast packets at a rate higher than\nor equal to the specified broadcast threshold.\nWhen set to false(2), no such trap will be issued.\nDefault value: false(2).\n\nThis object is deprecated. A separate object\nc2900PortBroadcastStormAlarm is defined for each port.\"\"\",\n        }, # scalar\n        \"c2900ModuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of module entries.\"\"\",\n        }, # table\n        \"c2900ModuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"c2900ModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing status information about one module in\nthe c2900 chassis.\"\"\",\n        }, # row\n        \"c2900ModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Module index into c2900ModuleTable .\"\"\",\n        }, # column\n        \"c2900ModuleStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"moduleNotInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"moduleInTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"moduleHealthy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"moduleFaulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of of the module.\"\"\",\n        }, # column\n        \"c2900ModuleType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsx2914xl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsx2922xl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"atm155SMLRFiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"atm155SMMRFiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"atm155MMFiber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"atm155UTP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsx2914xlv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"wsx2922xlv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsx2924xlv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsx2931xl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"wsx2932xl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of module installed in malibu switch.\"\"\",\n        }, # column\n        \"c2900ModuleHwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of the module. The format\nof the version string x.y.z where x,y, and z\nare hardware register field values.\"\"\",\n        }, # column\n        \"c2900ModuleSwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The software version of the module.\"\"\",\n        }, # column\n        \"c2900Port\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4\",\n        }, # node\n        \"c2900PortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port entries.  The number of entries is\ndetermined by the number of modules in the chassis\nand the number of ports on each module.\"\"\",\n        }, # table\n        \"c2900PortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"c2900PortModuleIndex\",\n                \"c2900PortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information for a particular\nswitched port on a module installed. The entries\nare not created or deleted by management commands.\"\"\",\n        }, # row\n        \"c2900PortModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the module\nwhere this port is located. The value is determined\nby the chassis slot number into which the module is\nplugged.\"\"\",\n        }, # column\n        \"c2900PortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module.\"\"\",\n        }, # column\n        \"c2900PortUsageApplication\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"monitor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"portGrouping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"network\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"networkGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"portGroupDest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"protected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"standard\",\n            \"description\" :\n                \"\"\"This object indicates how the port is to be used.\nThe variable usage applications are shown above.\nThese applications are defined such that they\nare mutually exclusive. In other words, a port\nusing the security(2) application cannot also\nuse the monitor(3) application at the same time.\n\nThe default usage is standard(1), or no special\nbehavior (the port behaves as normal\nswitched port).\n\nThe security(2) usage adds addressing security\nto the port, whereby all learned addresses are \nsecure address.\n\nThe monitor(3) usage provides network diagnosis\nby reflecting traffic on other ports to this port.\n\nThe portGrouping(4) application treats this and other ports in\nthe same group as one(inter-switch) connection for more\nbandwidth potential. When the c2900PortUsageApplication is\nportGrouping, the c2900PortGroupIndex is set to the index\nvalue of the port group.  The source address of a received frame\nis used to determine on which port within the group the frame\nshould be transmitted.\n\nThe network(5) usage saves address table space when the port\nis used as the link to a large network with many MAC addresses\nby disabling address learning on  the port and allowing\nunknown unicasts packets received on other ports of the vlan\nthe port associated with to be forwarded only to the port.\n\nThe networkGroup(6) usage treates this and other\nports in the same group as a network port group. All ports in\nport are network ports in the sense that address learning is\ndisabled on them and unknown unicast packets received on other\nports of the vlan are forwarded to the group.\n\nThe portGroupDest(7) application treats this and other ports in\nthe same group as one(inter-switch) connection for more\nbandwidth potential. When the c2900PortUsageApplication is\nportGroupDest, the c2900PortGroupIndex is set to the index\nvalue of the port group.  The destination address of a received\nframe is used to determine on which port within the group the\nframe should be transmitted.\n\nThe protected(8) application does not forward any traffic to other\nprotected ports. It does not forward all kinds of unicast, multicast\nand broadcast traffic to any other protected port. The protected \nports, however, forward traffic normally to non-protected ports and \nvice versa.\"\"\",\n        }, # column\n        \"c2900PortGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is meaningful only when the\ncorresponding c2900PortUsageApplication is portGrouping.\nPorts assigned with the same value of c2900PortGroupIndex\nbelong to the same connection channel.\"\"\",\n        }, # column\n        \"c2900PortMayLearnAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"This object reflects an internal state of the port\nwith regard to its ability to learn new addresses.\nCertain port configurations such as learning time\nlimit, security usage, etc., and some Spanning\nTree Protocol states can temporarily prohibit the\nport from learning.  This object is true(1) if the\nport is allowed to learn. It is false(2) otherwise.\n\nSetting this object to true(1) will fail,\nif the port is not in normal state.\n\nThis object is deprecated.\"\"\",\n        }, # column\n        \"c2900PortMayForwardFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"This object reflects an internal state of the port\nwith regard to its ability to forward frames.\nA port sometimes stops forwarding frames when it\nis blocked by the Spanning Tree Protocol, or\nwhile it is undergoing temporary load balancing\nas part of the port grouping usage.\nThis object is true(1) if the port is allowed to\nforward frames. It is false(2) otherwise.\n\nSetting this object to true(1) will fail,\nif the port is in the middle of being blocked by the Spanning Tree\nProtocol, or while it is undergoing temporary load balancing\nas part of the port grouping usage.\n\nThis object is only supported for static VLAN access ports.\"\"\",\n        }, # column\n        \"c2900PortBufferCongestionControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Seting this object to true(1) allows the switch\nto run its buffer congestion control algorithm on the\nport.  Setting the object to false(2) disallows\nsuch control. The buffer congestion control algorithm\nis summarized in the description of\nthe c2900PortBufferCongestionThresholdPercent below.\n\nThis object is deprecated\"\"\",\n        }, # column\n        \"c2900PortBufferCongestionThreshholdPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"99\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port buffer congestion threshold provides an early\nwarning to the switch that the port is about to\nexhaust all its guaranteed buffers, leading to congestion.\nThis threshold is expressed as a percentage of the port's\ntotal guaranteed buffer depth.  Once this threshold has\nbeen crossed, the switch begins colliding with frames\nreceived on the port for a fixed period of time.\nAfter this time has expired, the switch determines\nwhether the port's buffer congestion has been alleviated.\nIf this situation has not changed, the switch resumes\nthis congestion control algorithm on the port.\"\"\",\n        }, # column\n        \"c2900PortFrameAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"50\",\n                        \"max\" : \"4000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"50\",\n                        \"max\" : \"4000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"1000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The aging interval in milliseconds after\nwhich old frames queued for transmission on this\nport are discarded.\"\"\",\n            \"reference>\" :\n                \"\"\"Section 4.2 IEEE802.1D-1993\"\"\",\n        }, # column\n        \"c2900PortAddrSecureMaxAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"132\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"132\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum number of secure addresses that can\nbe learned on this port when it is a secure port.\nThis number should be always higher than\nc2900PortAddrSecureCurrentAddresses\"\"\",\n        }, # column\n        \"c2900PortAddrSecureCurrentAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of statically assigned\nunicast addresses on the port.\"\"\",\n        }, # column\n        \"c2900PortAddrSecureAddrViolations\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times a source address was\nseen on this port which duplicates a secured\naddress configured on another port,\nplus the number of times a source address was\nseen on this port which does not match any\naddresses secured for the port.\"\"\",\n        }, # column\n        \"c2900PortNumberOfLearnedAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of dynamically learned\naddresses on the port.\"\"\",\n        }, # column\n        \"c2900PortNumberOfDroppedAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times an address could not be learned\nor assigned for the port because its address table\nwas full at one time.\"\"\",\n        }, # column\n        \"c2900PortClearAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to true(1) to delete all learned and assigned\ndynamic, static and secure unicast addresses the\nport currently has. Setting the object to false(2)\nhas no effect. This object always returns false(2)\nwhen read.\"\"\",\n        }, # column\n        \"c2900PortFloodUnknownMulticasts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"Set to true(1) to allow forwarding to this\nport frames addressed to multicast addresses\nthat have not been configured for the port.\nSet to false(2) to filter and discard such frames.\"\"\",\n        }, # column\n        \"c2900PortFloodUnknownUnicasts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object controls the forwarding of unknown\nunicast frames to this port. When set to true(1),\nthe switch will, upon receiving a frame with an\nunknown unicast destination address from\nanother port, transmit the frame to this port.\nWhen set to false(2), switch will filter\nand not transmit said frames to this port.\nDefault value: false(2) for ports  using\nthe security or monitor application;\ntrue(1) for all other usage applications.\"\"\",\n        }, # column\n        \"c2900PortLinkbeatStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"linkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nolinkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object depends on the physical layer in use\nand indicates the current port linkbeat status:\nif the physical link between two devices is\nproperly connected or not.\nIf the value is linkbeat(1), there is linkbeat.\nIf the value is nolinkbeat(2), there is no linkbeat.\nIf the value is unknown(3), the information is not\navailable.\"\"\",\n        }, # column\n        \"c2900PortBroadcastStormAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stopBroadcastForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"forwardBroadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disablePort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"forwardBroadcast\",\n            \"description\" :\n                \"\"\"Indicates what action to take when the broadcast\nrising threshold for a port is reached.\nThe default action is to forwardBroadcast(2) as usual\nfor all broadcast frames received from the port. The\nother action is to stopBroadcastForwarding(1) frames\nuntil the broadcast reception rate falls to\nor below the falling threshold.\nThe port can also be shutdown in the event of a \nbroadcast storm with the action disablePort(3).\"\"\",\n        }, # column\n        \"c2900PortBroadcastRisingThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"500\",\n            \"description\" :\n                \"\"\"The broadcast rising threshold is measured in the number\nof broadcast frames received on a port in a second.\n\nWhen the number of broadcast frames received per\nsecond on this port crosses this threshold,\nthe appropriate action as specified by the object\nc2900PortBroadcastStormAction will take place.\nSee the description of c2900PortBroadcastStormAction.\"\"\",\n        }, # column\n        \"c2900PortBroadcastFallingThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"250\",\n            \"description\" :\n                \"\"\"The broadcast falling threshold is measured in number of\nbroadcast frames received on a port in a second.\n\nWhen the falling threshold is crossed and the\nc2900PortBroadcastStormAction was stopBroadcastForwarding(1)\nthen broadcast forwarding will be re-enabled on the port.\nFor the other values of c2900PortBroadcastStormAction,\ncrossing the falling threshold has no affect.\"\"\",\n        }, # column\n        \"c2900PortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"blocking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"listening\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"learning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"preforwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"secureforwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"suspended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"broken\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"blocking\",\n            \"description\" :\n                \"\"\"The port's current state as defined by application\nof the Spanning Tree Protocol. This state controls\nwhat action a port takes on reception of a frame.\nIf the switch has detected a port that is\nmalfunctioning it will place that port into the\nbroken(10) state.  For ports which are\ndisabled(see dot1dStpPortEnable), this object will\nhave a value of disabled(2).\nSince the switch implements three\nadditional states which are not part of IEEE Standard,\nthese additional states are possible values for\nc2900PortStaus.  The additional states are preforwarding(6),\nsecureforwarding(8), and suspended(9).  Note: except\nfor these additional states, this object is the same\nas the dot1dStpPortState object.\nDefault value: blocking(2).\n\nThis object is only supported for static VLAN access ports.\"\"\",\n            \"reference>\" :\n                \"\"\"Section 4.5.5.2 IEEE802.1D-1990\"\"\",\n        }, # column\n        \"c2900PortTestResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates if the port passed power on self test or not.\nIf the value of this object is true(1), the port passed test.\nIf the value of this object is false(2), the port failed test.\"\"\",\n        }, # column\n        \"c2900PortVisualIndicator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notused\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"black\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"amber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"green\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is used to indicate the current color of\na LED. If a LED is flashing, the value of this object will\nrepresent the color of the LED at that instant in time.\nThe following conventions indicate port status:\n    Link healthy    returns green(4)\n    Link activity   usually green(4), but may return black(2).\n    Link faulty     alternating green(4)/amber(3)\n    Port disabled   returns amber(3)\"\"\",\n        }, # column\n        \"c2900PortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"parent module\" : {\n                        \"name\" : \"IF-MIB\",\n                        \"type\" : \"InterfaceIndex\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the ifIndex object,\ndefined in MIB-II, for the interface corresponding\nto this port.\"\"\",\n        }, # column\n        \"c2900PortAddressViolationAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"doNothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disablePort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sendNotify\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disablePortAndNotify\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"doNothing\",\n            \"description\" :\n                \"\"\"Indicates what action to take when an address violation\n(an address mismatch or duplication) occurs on a\nsecure port.  The default action is to do nothing.\n\n doNothing(1)       : do nothing\n disablePort(2)     : disable port; the port can only be reenabled\n                      by an explicit management action.\n sendNotify(3)        : generate address violation notification.\n disablePortAndNotify(4): disable port and send notification.\"\"\",\n        }, # column\n        \"c2900PortBroadcastStormAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"When set to true(1), the switch will generate\na broadcastStorm notification upon detecting a port is\nreceiving broadcast packets at a rate higher than\nor equal to the threshold specified by\nc2900PortBroadcastRisingThreshold.\nWhen set to false(2), no such trap will be issued.\nDefault value: false(2).\nc2900PortBroadcastStormAlarm is defined for each port.\"\"\",\n        }, # column\n        \"c2900PortMonitorDestinationPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Switch Port (c2900PortSwitchPortIndex) index value of the port\nthat is to be monitored by this port. A value of zero can't be\nused to do set, it is used to return when this object is read.\n\nTo remove a port from the monitored list use the object\nc2900PortNoMonitorDestinationPort.\"\"\",\n        }, # column\n        \"c2900PortSwitchPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Switch port index of a port is a value that uniquely\nidentifies the port within a switch. This is obtained\nfrom the port index (c2900PortIndex) and the module\nindex (c2900PortModuleIndex).\"\"\",\n        }, # column\n        \"c2900PortMonitoredPortMap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates which ports are actually being monitored.\nThe octet string contains one bit per port. Each bit\nwithin the octet string represents one port of the device.\nThe ordering of ports represented within the octet string\nis in the same order as in the RFC 1493 dot1dStaticAllowedToGoTo\nin the dot1dStaticTable.\n\nThe bit value interpretation is as follows:\n                     1 = being monitored\n                     0 = not being monitored\"\"\",\n        }, # column\n        \"c2900PortDuplexState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fullduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"autoNegotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"autoNegotiate\",\n            \"description\" :\n                \"\"\"Set to fullduplex(1) to operate in full duplex mode, port\nwill allow simultaneous transmit and receive which can\ndouble its bandwidth.\n\nSet to halfduplex(2) to operate in half duplex mode.\n\nSet to autoNegotiate(3) to allow the switch to negoti-\nate with the other end of the connection.\n\nThe status of duplex mode on a port is available with\nc2900PortDuplexStatus object.\"\"\",\n        }, # column\n        \"c2900PortDuplexStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fullduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of duplex mode on this port.\n\nWhen linkbeat is not present, halfduplex is always\nreported.\n\nWhen linkbeat is present, the result of full duplex\nauto-negotiation is reported if c2900PortDuplexState is\nset to auto-negotiate, otherwise it reports fullduplex\nif c2900PortDuplexState is set to fullduplex or\nhalfduplex if c2900PortDuplexState is set to\nhalfduplex.\"\"\",\n        }, # column\n        \"c2900PortAdminSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"autoDetect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"s10000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10000000\"\n                    },\n                    \"s100000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100000000\"\n                    },\n                    \"s155520000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"155520000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"autoDetect\",\n            \"description\" :\n                \"\"\"The object controls the speed of the port.\nThe current operational speed of the port can be\ndetermined from ifSpeed.\"\"\",\n        }, # column\n        \"c2900PortNoMonitorDestinationPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Switch Port (c2900PortSwitchPortIndex) index value of the port\nthat is to be removed from the monitored list. A value of zero\ncan't be used to do set, it is used to return when this object\nis read.\n\nTo add a port to the monitored list use the object\nc2900PortMonitorDestinationPort.\"\"\",\n        }, # column\n        \"c2900Portdot1dBasePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the dot1dBasePort associated with this port.\"\"\",\n        }, # column\n        \"c2900PortSpantreeFastStart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the port is operating in spantree\nfast start mode.  A port with fast start enabled is\nimmediately put in spanning tree forwarding state on\nlink up, rather than starting in blocking state which\nis the normal operation.  This is useful when the port\nis known to be connected to a single station which\nhas problems waiting for the normal spanning tree\noperation to put the port in forwarding state.\"\"\",\n        }, # column\n        \"c2900PortVoiceVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    {\n                        \"min\" : \"4095\",\n                        \"max\" : \"4096\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Voice Virtual Vlan ID (VVID) to which this\nport belongs to.\nIf the VVID is not supported on the port, this MIB\nobject will not be configurable and will return\n4096.\n\nSetting this MIB object to 4096, the CDP packets\ntransmitting through this port would not include\nAppliance VLAN-ID TLV.\n\nSetting this MIB object to 4095, the CDP packets\ntransmitting through this port would contain\nAppliance VLAN-ID TLV with value of 4095 - VoIP\nand related packets are expected to be sent and\nreceived untagged without an 802.1p priority.\n\nSetting this MIB object to 0, the CDP packets\ntransmitting through this port would contain\nAppliance VLAN-ID TLV with value of 0 - VoIP\nand related packets are expected to be sent and\nreceived with VLAN-id=0 and an 802.1p priority.\n\nSetting this MIB object to N (1..1000), the CDP\npackets transmitting through this port would\ncontain Appliance VLAN-ID TLV with N - VoIP and\nrelated packets are expected to be sent and received\nwith VLAN-id=N and an 802.1p priority.\"\"\",\n        }, # column\n        \"c2900PortAddrSecureAgingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The aging interval in minutes for each secure address\nentry on a given port. Depending on the type of aging\nthe secure address will age out after the expiration \nof the aging time and will be removed from the \nsecure address list.\n\nAny change in the value of this object will restart\nthe aging for all the secure addresses on this port.\n\nIf the value of this object is 0 for a given\nport, the aging mechanism is disabled for this \nport.\"\"\",\n        }, # column\n        \"c2900PortAddrSecureAgingType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"absolute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactivity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"absolute\",\n            \"description\" :\n                \"\"\"If the value of this object on a given port is \n\nabsolute - all the secure addresses on this\n    port will age out exactly after the aging\n    time configured for this port.\n\ninactivity - the secure addresses on this port \n    will age out only if there is no data traffic\n    from the given secure source address for a \n    time period specified by aging time.\n\nAny change in the value of this object will restart\nthe aging for all the secure addresses on this port.\n\nThe value of this object is not effective when the \nvalue of c2900PortAddrSecureAgingTime is 0.\"\"\",\n        }, # column\n        \"c2900PortAddrSecureAgingStatic\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"Set to true(1) to enable aging for statically\nconfigured secure addresses on one port. Disable\nthe aging for statically configured secure \naddresses if set to false(2).\n\nAny change in the value of this object will restart\nthe aging for all the configured secure addresses on\nthis port.\n\nThe value of this object is not effective when the \nvalue of c2900PortAddrSecureAgingTime is 0.\"\"\",\n        }, # column\n        \"c2900PortStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port entries.  The number of entries is\ndetermined by the number of modules in the chassis\nand the number of ports on each module.\"\"\",\n        }, # table\n        \"c2900PortStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"c2900PortModuleIndex\",\n                \"c2900PortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information for a particular\nswitched port on a module installed. The entry\ncannot be created or deleted.\"\"\",\n        }, # row\n        \"c2900PortRxNoBwFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of frames received on this port that were discarded\ndue to a lack of bandwidth resources in the Catalyst Switch\nforwarding engine.\"\"\",\n        }, # column\n        \"c2900PortRxNoBufferFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of frames received that were discarded due\nto a lack of frame buffer resources in the Catalyst Switch\nforwarding engine.\"\"\",\n        }, # column\n        \"c2900PortRxNoDestUniFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of unicast frames received that were discarded,\nbecause the forwarding rules stipulate that they are\nnot be forwarded.\"\"\",\n        }, # column\n        \"c2900PortRxNoDestMultiFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of multicast frames received that were discarded,\nbecause they have not been configured for the port.\"\"\",\n        }, # column\n        \"c2900PortRxSuppressBcastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of broadcast frames received that were discarded\nbecause of the threshold-based broadcast suppression.\n\nThis object is deprecated, because there is no way that the\nMalibu system to give the brodcast_supress frames\"\"\",\n        }, # column\n        \"c2900PortRxFcsErrFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"The total number of frames received with FCS errors.\nThis total includes all frames received with an FCS\nerror and an integral number of bytes.\nUnlike RFC1650's dot3StatsFCSErrors,\nthis object does not include frames which are less\nthan the minimum packet size (such as collision fragments).\"\"\",\n        }, # column\n        \"c2900PortCollFragFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"The total number of frames whose lengths are less than\n64 and have bad FCS values.\nThe preamble and sfd fields are excluded from the byte\ncount of a frame while the FCS field is included.\"\"\",\n        }, # column\n        \"c2900PortTxMulticastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully transmitted and\nare directed to a multicast address.\nUnlike RFC1573's ifOutMulticastPkts, this object does not\ninclude those that were discarded or not sent.\"\"\",\n        }, # column\n        \"c2900PortTxBroadcastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"frames\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully transmitted and\nare directed to the broadcast address.\nUnlike RFC1573's ifOutBroadcastPkts, this object does\nnot include those that were discarded or not sent.\"\"\",\n        }, # column\n        \"c2900BandwidthUsage\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5\",\n        }, # node\n        \"c2900BandwidthUsageCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"megabits per second\",\n            \"description\" :\n                \"\"\"The current bandwidth consumed.  The measurement unit is\nin megabits per second (1,000,000 bits/second).\nThis value gives a reasonable estimate of the amount of\ntraffic currently flowing through the switch.\n\nIt is calculated as follows:\n\nOctets*8 + Frames*(96 + 64)\n---------------------------\nMeasurement Interval * 1,000,000 * 2\n\nWhere:\n Measurement Interval is the amount of time over which\n the Octets and Frames were collected, in seconds.\n\n Measurement Interval is always one second in current\n implementation.\n\n Octets is the total number of octets transmitted\n or received by all network interfaces, excluding\n framing data but including FCS. This includes octets\n in frames which were partially transmitted or\n received (due to collisions, for example).\n\n Frames is the total number of frames transmitted\n or received by all network interfaces, including\n frames with errors.\n\nThe number of frames is multiplied by 96 plus 64 in\norder to estimate the delay between each frame for\nEthernet's IPG and preamble/SFD.\n\nThe '2' in the divisor makes this a forwarding bandwidth\ncounter. A frame received on one interface is typically\nforwarded out another interface. In order to avoid double-\ncounting this frame's bandwidth, once on the receiving\ninterface and once on the transmitting interface, the\ntotal bandwidth is divided by two.\nSince multicast and broadcast frames can be sent to multiple\nports, the above is at best a lower bound.\"\"\",\n        }, # scalar\n        \"c2900BandwidthUsageMaxPeakEntries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of entries c2900BandwidthUsagePeakTable\ncan have.\"\"\",\n        }, # scalar\n        \"c2900BandwidthUsagePeakInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"onehour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"threehours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sixhours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"twelvehours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"oneday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"twodays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"threedays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"fourdays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"96\"\n                    },\n                    \"fivedays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"120\"\n                    },\n                    \"sixdays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"144\"\n                    },\n                    \"oneweek\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"168\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"oneday\",\n            \"description\" :\n                \"\"\"This object specifies the length of time\nwhich forms a peak bandwidth measurement interval.\n\nA write to this object with any new value\nrestarts the peak bandwidth recording interval used\nby bandwidthUsagePeakTable.\n\nIn other words, the bandwidthUsagePeakTable\nwill be cleared and entry number one will record\nthe peak with a new measurement interval.\"\"\",\n        }, # scalar\n        \"c2900BandwidthUsagePeakRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to true(1) to clear the c2900BandwidthUsagePeakTable\nand restart the peak bandwidth recording.\nNo action will be taken if this object is set\nto false(2).  This object returns false(2)\nwhen read.\"\"\",\n        }, # scalar\n        \"c2900BandwidthUsageCurrentPeakEntry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value identifying an instance of the\nc2900BandwidthUsagePeakIndex where the\npeak bandwidth estimation is most recent.\"\"\",\n        }, # scalar\n        \"c2900BandwidthUsagePeakTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries containing peak bandwidth usages in\na number of recording interval.\n\nAfter being cleared, entries are added to the\nbandwidthUsagePeakTable with ascending values of\nc2900BandwidthUsagePeakIndex starting at 1.  When the number of\nentries reaches c2900BandwidthUsageMaxPeakEntries,\neach new recording interval is assigned the value of\nc2900BandwidthUsagePeakIndex corresponding to the oldest entry,\noverwriting the previous contents of that entry.\"\"\",\n        }, # table\n        \"c2900BandwidthUsagePeakEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"c2900BandwidthUsagePeakIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about peak bandwidth usage in a recording interval.\"\"\",\n        }, # row\n        \"c2900BandwidthUsagePeakIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from one to c2900BandwidthUsageMaxPeakEntries\nidentifying a particular c2900BandwithUsagePeakEntry.\"\"\",\n        }, # column\n        \"c2900BandwidthUsageStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time that marks the start of this recording interval.\"\"\",\n        }, # column\n        \"c2900BandwidthUsagePeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"megabits per second\",\n            \"description\" :\n                \"\"\"The maximum bandwidth usage of any measurement interval\nwithin this recording interval.\n\nThis value is an estimate of the highest amount of\ntraffic flowing through the switch during this\nrecording interval.\n\nIt is calculated as follows:\n\nOctets*8 + Frames*(96 + 64)\n---------------------------\nMeasurement Interval * 1,000,000 * 2\n\nWhere:\n Measurement Interval is the amount of time over which\n the Octets and Frames were collected, in seconds.\n\n Measurement Interval is always one second in c2900's\n implementation.\n\n Octets is the total number of octets transmitted\n or received by all network interfaces, excluding\n framing data but including FCS. This includes octets\n in frames which were partially transmitted or\n received (due to collisions, for example).\n\n Frames is the total number of frames transmitted\n or received by all network interfaces, including\n frames with errors.\n\nThe number of frames is multiplied by 96 plus 64 in\norder to estimate the delay between each frame for\nEthernet's IPG and preamble/SFD.\n\nThe '2' in the divisor makes this a forwarding bandwidth\ncounter. A frame received on one interface is typically\nforwarded out another interface. In order to avoid double-\ncounting this frame's bandwidth, once on the receiving\ninterface and once on the transmitting interface, the\ntotal bandwidth is divided by two.\nSince multicast and broadcast frames can be sent to multiple\nports, the above is at best a lower bound.\"\"\",\n        }, # column\n        \"c2900BandwidthUsagePeakTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.1.5.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of the measurement interval.\"\"\",\n        }, # column\n        \"c2900MibNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.2\",\n        }, # node\n        \"c2900MibNotificationsPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.2.0\",\n        }, # node\n        \"c2900MIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3\",\n        }, # node\n        \"c2900MIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1\",\n        }, # node\n        \"c2900MIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"c2900AddressViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The addressViolation notification is generated\nwhen an address violation is detected\non a secured port. The generation of the\naddressViolation notification can be enabled\nor suppressed using the object\nc2900ConfigAddressViolationAction.\nThe particular secured port is indicated by\nthe value of c2900PortIfIndex.\"\"\",\n        }, # notification\n        \"c2900BroadcastStorm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.2.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The broadcastStorm notification is generated\nupon detecting a port is receiving\nbroadcast packets at a rate crossing\nthe specified broadcast threshold.\nThis trap is only for the rising threshold.\nThe particular port is indicated by the values of\nc2900PortModuleIndex and c2900PortIndex, and the\nvalue of the threshold is given by\nc2900PortBroadcastRisingThreshold.\"\"\",\n        }, # notification\n        \"c2900RpsFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.2.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A redundant power system (RPS) is connected to the\nswitch. The RpsFailed notification is generated\nupon detecting RPS failure.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"c2900SysInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900InfoBoardRevision\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoPeakBuffersUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoTotalBufferDepth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoAddrCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoRestrictedStaticAddrCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoSelfTestFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoUtilDisplay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoVisualIndicatorMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoRedunantPowerSupplyInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900InfoBoardIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to provide\nthe general switch information.\"\"\",\n        }, # group\n        \"c2900SysConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900ConfigAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ConfigBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to configure\nthe switch.\"\"\",\n        }, # group\n        \"c2900ModuleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900ModuleStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleHwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleSwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The object is used to provide the module status.\"\"\",\n        }, # group\n        \"c2900PortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayLearnAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration.\"\"\",\n        }, # group\n        \"c2900PortStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.5\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortRxNoBwFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoBufferFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestUniFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestMultiFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxSuppressBcastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxFcsErrFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortCollFragFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxMulticastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxBroadcastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port stats.\"\"\",\n        }, # group\n        \"c2900BandwidthUsageGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900BandwidthUsageCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageMaxPeakEntries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsagePeakInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsagePeakRestart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsagePeakIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsagePeak\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsagePeakTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageCurrentPeakEntry\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide the bandwidth information.\"\"\",\n        }, # group\n        \"c2900PortGroupSA3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.7\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayLearnAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration.\"\"\",\n        }, # group\n        \"c2900PortStatsGroupSA3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.8\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortRxNoBwFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoBufferFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestUniFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestMultiFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxFcsErrFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortCollFragFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxMulticastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxBroadcastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port stats.\"\"\",\n        }, # group\n        \"c2900PortGroupSA5\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.9\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900Portdot1dBasePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration.\"\"\",\n        }, # group\n        \"c2900PortGroupSA7\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.10\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900Portdot1dBasePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSpantreeFastStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration.\"\"\",\n        }, # group\n        \"c2900PortGroupWC2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.11\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900Portdot1dBasePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSpantreeFastStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVoiceVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration, includes \nvoice vlan id.\"\"\",\n        }, # group\n        \"c2900PortGroupWC4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900PortUsageApplication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMayForwardFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBufferCongestionThreshholdPercent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFrameAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureMaxAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureCurrentAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAddrViolations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfLearnedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNumberOfDroppedAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortClearAddresses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownMulticasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortFloodUnknownUnicasts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortLinkbeatStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastRisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVisualIndicator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddressViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortBroadcastStormAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSwitchPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortMonitoredPortMap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortNoMonitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900Portdot1dBasePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortSpantreeFastStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortVoiceVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAgingType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortAddrSecureAgingStatic\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port status and configuration, includes \nvoice vlan id and port-security aging.\"\"\",\n        }, # group\n        \"c2900NotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900AddressViolation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BroadcastStorm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900RpsFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The set of  notifications provided by c2900 device.\"\"\",\n        }, # group\n        \"c2900PortStatsGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"c2900PortRxNoBwFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoBufferFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestUniFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxNoDestMultiFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortRxFcsErrFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortCollFragFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxMulticastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortTxBroadcastFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nprovide port stats.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"c2900MIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900SysConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"c2900MIBComplianceSA5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupSA5\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"c2900MIBComplianceSA3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupSA3\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatsGroupSA3\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"c2900MIBComplianceSA7\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupSA7\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"c2900MIBComplianceWC2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupWC2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"c2900MIBComplianceWC4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-C2900-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.87.3.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The  compliance statement for all c2900 switch.\"\"\",\n            \"requires\" : {\n                \"c2900SysInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900ModuleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900BandwidthUsageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortGroupWC4\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900NotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-C2900-MIB\"\n                },\n                \"c2900PortStatsGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-C2900-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-CDP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-CDP-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/CISCO-CDP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-CDP-MIB\",\n\n    \"CISCO-CDP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco System Inc.\"\"\",\n        \"contact\" : \n            \"\"\"\tCisco Systems\nCustomer Service\n\nPostal: 170 West Tasman Drive,\nSan Jose CA 95134-1706.\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for management of the Cisco Discovery\nProtocol in Cisco devices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2001-11-23 00:00\",\n                \"description\" :\n                    \"\"\"Added cdpInterfaceExtTable which contains the following\nobjects:\ncdpInterfaceExtendedTrust, \ncdpInterfaceCosForUntrustedPort.\"\"\",\n            },\n            {\n                \"date\" : \"2001-04-23 00:00\",\n                \"description\" :\n                    \"\"\"Added the following objects:\ncdpGlobalDeviceIdFormatCpb, \ncdpGlobalDeviceIdFormat.\"\"\",\n            },\n            {\n                \"date\" : \"2000-11-22 00:00\",\n                \"description\" :\n                    \"\"\"Added the following objects: \ncdpCacheApplianceID,\ncdpCacheVlanID, \ncdpCachePowerConsumption,\ncdpCacheMTU,\ncdpCachePrimaryMgmtAddrType,\ncdpCachePrimaryMgmtAddr,\ncdpCacheSecondaryMgmtAddrType,\ncdpCacheSecondaryMgmtAddr,\ncdpCacheLastChange,\ncdpCachePhysLocation,\ncdpCacheSysName, \ncdpCacheSysObjectID,\ncdpGlobalLastChange\"\"\",\n            },\n            {\n                \"date\" : \"1998-12-10 00:00\",\n                \"description\" :\n                    \"\"\"Added cdpGlobalDeviceId object.\"\"\",\n            },\n            {\n                \"date\" : \"1998-09-16 00:00\",\n                \"description\" :\n                    \"\"\"added these objects to cdpCacheTable:  \ncdpCacheVTPMgmtDomain, \ncdpCacheNativeVLAN, \ncdpCacheDuplex.\"\"\",\n            },\n            {\n                \"date\" : \"1996-07-08 00:00\",\n                \"description\" :\n                    \"\"\"Obsolete cdpInterfaceMessageInterval and newly\ndefine cdpGlobal object.\"\"\",\n            },\n            {\n                \"date\" : \"1995-08-15 00:00\",\n                \"description\" :\n                    \"\"\"Specify a correct (non-negative) range for several\nindex objects.\"\"\",\n            },\n            {\n                \"date\" : \"1995-07-27 00:00\",\n                \"description\" :\n                    \"\"\"Correct range of cdpInterfaceMessageInterval.\"\"\",\n            },\n            {\n                \"date\" : \"1995-01-25 00:00\",\n                \"description\" :\n                    \"\"\"Move from ciscoExperiment to ciscoMgmt oid subtree.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoCdpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"CiscoNetworkProtocol\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"CiscoNetworkAddress\"},\n        {\"module\" : \"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoCdpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoCdpMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1\",\n        }, # node\n        \"cdpInterface\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1\",\n        }, # node\n        \"cdpInterfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table containing the status of CDP on\nthe device's interfaces.\"\"\",\n        }, # table\n        \"cdpInterfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cdpInterfaceIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the cdpInterfaceTable,\ncontaining the status of CDP on an interface.\"\"\",\n        }, # row\n        \"cdpInterfaceIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ifIndex value of the local interface.\n\nFor 802.3 Repeaters on which the repeater ports do not\nhave ifIndex values assigned, this value is a unique\nvalue for the port, and greater than any ifIndex value\nsupported by the repeater; in this case, the specific\nport is indicated by corresponding values of\ncdpInterfaceGroup and cdpInterfacePort, where these\nvalues correspond to the group number and port number\nvalues of RFC 1516.\"\"\",\n        }, # column\n        \"cdpInterfaceEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether the Cisco Discovery Protocol\nis currently running on this interface.  This variable\nhas no effect when CDP is disabled (cdpGlobalRun = FALSE).\"\"\",\n        }, # column\n        \"cdpInterfaceMessageInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"254\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"254\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The interval at which CDP messages are to be generated\non this interface.  The default value is 60 seconds.\"\"\",\n        }, # column\n        \"cdpInterfaceGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is only relevant to interfaces which are\nrepeater ports on 802.3 repeaters.  In this situation,\nit indicates the RFC1516 group number of the repeater\nport which corresponds to this interface.\"\"\",\n        }, # column\n        \"cdpInterfacePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is only relevant to interfaces which are\nrepeater ports on 802.3 repeaters.  In this situation,\nit indicates the RFC1516 port number of the repeater\nport which corresponds to this interface.\"\"\",\n        }, # column\n        \"cdpInterfaceExtTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the additional CDP configuration on\nthe device's interfaces.\"\"\",\n        }, # table\n        \"cdpInterfaceExtEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the cdpInterfaceExtTable contains the values\nconfigured for Extented Trust TLV and COS (Class of Service)\nfor Untrusted Ports TLV on an interface which supports the\nsending of these TLVs.\"\"\",\n        }, # row\n        \"cdpInterfaceExtendedTrust\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trusted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noTrust\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the value to be sent by Extended Trust TLV.\n\nIf trusted(1) is configured, the value of Extended Trust TLV\nis one byte in length with its least significant bit equal to\n1 to indicate extended trust. All other bits are 0.\n\nIf noTrust(2) is configured, the value of Extended Trust TLV\nis one byte in length with its least significant bit equal to\n0 to indicate no extended trust. All other bits are 0.\"\"\",\n        }, # column\n        \"cdpInterfaceCosForUntrustedPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the value to be sent by COS for Untrusted Ports TLV.\"\"\",\n        }, # column\n        \"cdpCache\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2\",\n        }, # node\n        \"cdpCacheTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table containing the cached\ninformation obtained via receiving CDP messages.\"\"\",\n        }, # table\n        \"cdpCacheEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cdpCacheIfIndex\",\n                \"cdpCacheDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the cdpCacheTable,\ncontaining the information received via CDP on one\ninterface from one device.  Entries appear when\na CDP advertisement is received from a neighbor\ndevice.  Entries disappear when CDP is disabled\non the interface, or globally.\"\"\",\n        }, # row\n        \"cdpCacheIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Normally, the ifIndex value of the local interface.\nFor 802.3 Repeaters for which the repeater ports do not\nhave ifIndex values assigned, this value is a unique\nvalue for the port, and greater than any ifIndex value\nsupported by the repeater; the specific port number in\nthis case, is given by the corresponding value of\ncdpInterfacePort.\"\"\",\n        }, # column\n        \"cdpCacheDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each device from which CDP messages\nare being received.\"\"\",\n        }, # column\n        \"cdpCacheAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkProtocol\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the type of address contained in the\ncorresponding instance of cdpCacheAddress.\"\"\",\n        }, # column\n        \"cdpCacheAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The (first) network-layer address of the device's\nSNMP-agent as reported in the Address TLV of the most recently\nreceived CDP message.  For example, if the corresponding\ninstance of cacheAddressType had the value 'ip(1)', then\nthis object would be an IP-address.\"\"\",\n        }, # column\n        \"cdpCacheVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Version string as reported in the most recent CDP\nmessage.  The zero-length string indicates no Version\nfield (TLV) was reported in the most recent CDP\nmessage.\"\"\",\n        }, # column\n        \"cdpCacheDeviceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device-ID string as reported in the most recent CDP\nmessage.  The zero-length string indicates no Device-ID\nfield (TLV) was reported in the most recent CDP\nmessage.\"\"\",\n        }, # column\n        \"cdpCacheDevicePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Port-ID string as reported in the most recent CDP\nmessage.  This will typically be the value of the ifName\nobject (e.g., 'Ethernet0').  The zero-length string\nindicates no Port-ID field (TLV) was reported in the\nmost recent CDP message.\"\"\",\n        }, # column\n        \"cdpCachePlatform\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device's Hardware Platform as reported in the most\nrecent CDP message.  The zero-length string indicates\nthat no Platform field (TLV) was reported in the most\nrecent CDP message.\"\"\",\n        }, # column\n        \"cdpCacheCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device's Functional Capabilities as reported in the\nmost recent CDP message.  For latest set of specific\nvalues, see the latest version of the CDP specification.\nThe zero-length string indicates no Capabilities field\n(TLV) was reported in the most recent CDP message.\"\"\",\n            \"reference>\" :\n                \"\"\"Cisco Discovery Protocol Specification, 10/19/94.\"\"\",\n        }, # column\n        \"cdpCacheVTPMgmtDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VTP Management Domain for the remote device's interface, \nas reported in the most recently received CDP message.\nThis object is not instantiated if no VTP Management Domain field\n(TLV) was reported in the most recently received CDP message.\"\"\",\n            \"reference>\" :\n                \"\"\"managementDomainName in CISCO-VTP-MIB\"\"\",\n        }, # column\n        \"cdpCacheNativeVLAN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote device's interface's native VLAN, as reported in the \nmost recent CDP message.  The value 0 indicates\nno native VLAN field (TLV) was reported in the most\nrecent CDP message.\"\"\",\n        }, # column\n        \"cdpCacheDuplex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fullduplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote device's interface's duplex mode, as reported in the \nmost recent CDP message.  The value unknown(1) indicates\nno duplex mode field (TLV) was reported in the most\nrecent CDP message.\"\"\",\n        }, # column\n        \"cdpCacheApplianceID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote device's Appliance ID, as reported in the \nmost recent CDP message. This object is not instantiated if\nno Appliance VLAN-ID field (TLV) was reported in the most\nrecently received CDP message.\"\"\",\n        }, # column\n        \"cdpCacheVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote device's VoIP VLAN ID, as reported in the \nmost recent CDP message. This object is not instantiated if\nno Appliance VLAN-ID field (TLV) was reported in the most\nrecently received CDP message.\"\"\",\n        }, # column\n        \"cdpCachePowerConsumption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"The amount of power consumed by remote device, as reported\nin the most recent CDP message. This object is not instantiated\nif no Power Consumption field (TLV) was reported in the most\nrecently received CDP message.\"\"\",\n        }, # column\n        \"cdpCacheMTU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the size of the largest datagram that can be\nsent/received by remote device, as reported in the most recent\nCDP message. This object is not instantiated if no MTU field\n(TLV) was reported in the most recently received CDP message.\"\"\",\n        }, # column\n        \"cdpCacheSysName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the value of the remote device's sysName MIB object.\nBy convention, it is the device's fully qualified domain name.\nThis object is not instantiated if no sysName field (TLV) was\nreported in the most recently received CDP message.\"\"\",\n        }, # column\n        \"cdpCacheSysObjectID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the value of the remote device's sysObjectID MIB\nobject. This object is not instantiated if no sysObjectID field\n(TLV) was reported in the most recently received CDP message.\"\"\",\n        }, # column\n        \"cdpCachePrimaryMgmtAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkProtocol\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the type of address contained in the\ncorresponding instance of cdpCachePrimaryMgmtAddress.\"\"\",\n        }, # column\n        \"cdpCachePrimaryMgmtAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the (first) network layer address at\nwhich the device will accept SNMP messages as reported in the\nmost recently received CDP message. If the corresponding\ninstance of cdpCachePrimaryMgmtAddrType has the value 'ip(1)',\nthen this object would be an IP-address. If the remote device\nis not currently manageable via any network protocol, this\nobject has the special value of the IPv4 address 0.0.0.0.\nIf the most recently received CDP message did not contain any\nprimary address at which the device prefers to receive\nSNMP messages, then this object is not instanstiated.\"\"\",\n        }, # column\n        \"cdpCacheSecondaryMgmtAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkProtocol\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the type of address contained in the\ncorresponding instance of cdpCacheSecondaryMgmtAddress.\"\"\",\n        }, # column\n        \"cdpCacheSecondaryMgmtAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoNetworkAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the alternate network layer address\n(other than the one indicated by cdpCachePrimaryMgmtAddr) at\nwhich the device will accept SNMP messages as reported in the\nmost recently received CDP message. If the corresponding\ninstance of cdpCacheSecondaryMgmtAddrType has the value 'ip(1)',\nthen this object would be an IP-address. If the most recently\nreceived CDP message did not contain such an alternate network\nlayer address, then this object is not instanstiated.\"\"\",\n        }, # column\n        \"cdpCachePhysLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the physical location, as reported by the most recent\nCDP message, of a connector which is on, or physically connected\nto, the remote device's interface over which the CDP packet is\nsent. This object is not instantiated if no Physical Location\nfield (TLV) was reported by the most recently received CDP\nmessage.\"\"\",\n        }, # column\n        \"cdpCacheLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the time when this cache entry was last changed.\nThis object is initialised to the current time when the entry\ngets created and updated to the current time whenever the value\nof any (other) object instance in the corresponding row is\nmodified.\"\"\",\n        }, # column\n        \"cdpGlobal\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3\",\n        }, # node\n        \"cdpGlobalRun\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"An indication of whether the Cisco Discovery Protocol\nis currently running.  Entries in cdpCacheTable are\ndeleted when CDP is disabled.\"\"\",\n        }, # scalar\n        \"cdpGlobalMessageInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"254\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"254\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The interval at which CDP messages are to be generated.\nThe default value is 60 seconds.\"\"\",\n        }, # scalar\n        \"cdpGlobalHoldTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"180\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The time for the receiving device holds CDP message.\nThe default value is 180 seconds.\"\"\",\n        }, # scalar\n        \"cdpGlobalDeviceId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device ID advertised by this device. The format of this\ndevice id is characterized by the value of \ncdpGlobalDeviceIdFormat object.\"\"\",\n        }, # scalar\n        \"cdpGlobalLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the time when the cache table was last changed. It\nis the most recent time at which any row was last created,\nmodified or deleted.\"\"\",\n        }, # scalar\n        \"cdpGlobalDeviceIdFormatCpb\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"serialNumber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"macAddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the Device-Id format capability of the device.\n\nserialNumber(0) indicates that the device supports using\nserial number as the format for its DeviceId.\n\nmacAddress(1) indicates that the device supports using\nlayer 2 MAC address as the format for its DeviceId.\n\nother(2) indicates that the device supports using its\nplatform specific format as the format for its DeviceId.\"\"\",\n        }, # scalar\n        \"cdpGlobalDeviceIdFormat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"serialNumber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"macAddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of the format of Device-Id contained in the\ncorresponding instance of cdpGlobalDeviceId. User can only\nspecify the formats that the device is capable of as\ndenoted in cdpGlobalDeviceIdFormatCpb object.\n\nserialNumber(1) indicates that the value of cdpGlobalDeviceId \nobject is in the form of an ASCII string contain the device\nserial number. \n\nmacAddress(2) indicates that the value of cdpGlobalDeviceId \nobject is in the form of Layer 2 MAC address.\n\nother(3) indicates that the value of cdpGlobalDeviceId object\nis in the form of a platform specific ASCII string contain\ninfo that identifies the device. For example: ASCII string\ncontains serialNumber appended/prepened with system name.\"\"\",\n        }, # scalar\n        \"ciscoCdpMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2\",\n        }, # node\n        \"ciscoCdpMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.1\",\n        }, # node\n        \"ciscoCdpMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"ciscoCdpMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.1\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"cdpInterfaceEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceMessageInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDevicePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePlatform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol.\"\"\",\n        }, # group\n        \"ciscoCdpMIBGroupV11R01\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.2\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"cdpInterfaceEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceMessageInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfacePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDevicePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePlatform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol.\"\"\",\n        }, # group\n        \"ciscoCdpMIBGroupV11R02\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.3\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"cdpInterfaceEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfacePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDevicePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePlatform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalRun\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalMessageInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol.\"\"\",\n        }, # group\n        \"ciscoCdpMIBGroupV12R02\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cdpInterfaceEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceGroup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfacePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDevicePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePlatform\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVTPMgmtDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheNativeVLAN\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheDuplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalRun\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalMessageInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol.\"\"\",\n        }, # group\n        \"ciscoCdpV2MIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cdpCacheApplianceID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheVlanID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePowerConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheMTU\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheSysName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheSysObjectID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePhysLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePrimaryMgmtAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCachePrimaryMgmtAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheSecondaryMgmtAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpCacheSecondaryMgmtAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalDeviceIdFormatCpb\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpGlobalDeviceIdFormat\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol version 2.\"\"\",\n        }, # group\n        \"ciscoCdpV2IfExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cdpInterfaceExtendedTrust\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n                \"cdpInterfaceCosForUntrustedPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for use with the Cisco\nDiscovery Protocol version 2 to configure the value\nfor Extended Trust TLV and COS for Untrusted Port TLV.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoCdpMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.1.1\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement for the CDP MIB.\"\"\",\n            \"requires\" : {\n                \"ciscoCdpMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoCdpMIBComplianceV11R01\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.1.2\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement for the CDP MIB.\"\"\",\n            \"requires\" : {\n                \"ciscoCdpMIBGroupV11R01\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoCdpMIBComplianceV11R02\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.1.3\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement for the CDP MIB.\"\"\",\n            \"requires\" : {\n                \"ciscoCdpMIBGroupV11R02\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoCdpMIBComplianceV12R02\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-CDP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.23.2.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the CDP MIB.\"\"\",\n            \"requires\" : {\n                \"ciscoCdpMIBGroupV12R02\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-CDP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-ENHANCED-MEMPOOL-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-ENHANCED-MEMPOOL-MIB\n\nFILENAME = \"CISCO-ENHANCED-MEMPOOL-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n\n    \"CISCO-ENHANCED-MEMPOOL-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-memory@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"New MIB module for monitoring the memory pools\nof all physical entities on a managed system.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2008-12-05 00:00\",\n                \"description\" :\n                    \"\"\"Added the following High Capacity and Overflow objects\nin cempMemPoolTable.\ncempMemPoolUsedOvrflw, cempMemPoolHCUsed,\ncempMemPoolFreeOvrflw, cempMemPoolHCFree,\ncempMemPoolLargestFreeOvrflw, cempMemPoolHCLargestFree,\ncempMemPoolLowestFreeOvrflw, cempMemPoolHCLowestFree,\ncempMemPoolUsedLowWaterMarkOvrflw,\ncempMemPoolHCUsedLowWaterMark,\ncempMemPoolSharedOvrflw, cempMemPoolHCShared.\nAdded couple of new groups cempMemPoolHCGroup and\ncempMemPoolOvrflwGroup.\nAdded a new compliance cempMIBComplianceRev3 which deprecates\ncempMIBComplianceRev2.\"\"\",\n            },\n            {\n                \"date\" : \"2008-05-07 00:00\",\n                \"description\" :\n                    \"\"\"Added a new object cempMemPoolShared in cempMemPoolTable.\nDeprecated cempMemPoolGroup OBJECT-GROUP. \nAdded cempMemPoolGroupRev1 OBJECT-GROUP.  \nDeprecated cempMIBComplianceRev1 MODULE-COMPLIANCE. \nAdded cempMIBComplianceRev2 MODULE-COMPLIANCE.\"\"\",\n            },\n            {\n                \"date\" : \"2003-02-24 00:00\",\n                \"description\" :\n                    \"\"\"Revised version of this MIB,added Objects\nto the existing cempMemPoolTable, added buffer pools.\n   Different types of memory buffer pools\n   may be present in a managed device. For example:\n   1. Public buffers, these are standard pools of packets \n      of different sizes (eg: 104B, 600B, 1536B, 4520B,\n      5024B, 18024B ...). \n   2. Private [Interface] buffers (eg. ipc, channel ...).\n   3. Header pool. \n      Pool of dynamic packet headers. Header buffers \n      have no associated data blocks or particles.\n      (Particles are a mechanism for representing a \n      data packet as a collection of discontigious \n      buffers.).\n      The new objects added are\n      cempMemPoolUsedLowWaterMark, cempMemPoolAllocHit,\n      cempMemPoolAllocMiss, cempMemPoolFreeHit, \n      cempMemPoolFreeMiss, cempMemBufferPoolTable\n      & cempMemBufferCachePoolTable.\"\"\",\n            },\n            {\n                \"date\" : \"2001-06-05 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoEnhancedMemPoolMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalIndex\"},\n        {\"module\" : \"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"CempMemPoolIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each memory\npool in a particular physical entity. It is recommended \nthat values are assigned contiguously starting from 1 \nsuch that the index will be unique within a particular \nphysical entity.\"\"\",\n        },\n        \"CempMemPoolIndexOrNone\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            \"description\" :\n                \"\"\"This textual convention is an extension of the\nCempMemPoolIndex. The latter defines a value greater \nthan zero to identify a memory pool in a particular \nphysical entity. This extension permits the additional \nvalue of zero. The value zero is object-specific and \nmust therefore be defined as part of the description \nof any object which uses this syntax. Examples of the \nusage of zero might include situations where memory\npool was unknown, or when none or all memory pools \nneed to be referenced.\"\"\",\n        },\n        \"CempMemPoolTypes\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"processorMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ioMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"pciMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"fastMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"multibusMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"interruptStackMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"processStackMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"localExceptionMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"virtualMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"reservedMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"imageMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"asicMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"posixMemory\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"description\" :\n                \"\"\"Represents the different types of memory pools that\nmay be present in a managed device. \nNote that only the processor pool is required to be\nsupported by all devices.  Support for other pool types\nis dependent on the device being managed.\n\nprocessorMemory -\n         processor associated heap memory.\nioMemory - \n         shared memory for buffer data and\n         controller descriptor blocks.\npciMemory - \n         Peripheral Component Interconnect bus\n         memory which is visible to all devices on \n         the PCI buses in a platform.\nfastMemory - \n         memory defined by the particular platform \n         for speed critical applications.\nmultibusMemory - \n         memory present on some platforms that\n         is used as a fallback pool.\ninterruptStackMemory - \n         memory for allocating interrupt stacks. \n         It is usually allocated from heap.\nprocessStackMemory - \n         memory for allocating process stacks. \n         It is usually allocated from heap.\nlocalExceptionMemory - \n         memory reserved for processing \n         a system core dump.\nvirtualMemory - \n         memory used to increase available RAM.\nreservedMemory - \n         memory used for packet headers, \n         particle headers and particles. \nimageMemory - \n         memory which corresponds to the image \n         file system.\nasicMemory - \n         Application Specific Integrated Circuit\n         memory.\nposixMemory -\n          Heap memory associated with posix style\n          processes in ion.\"\"\",\n        },\n        \"CempMemBufferPoolIndex\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"4294967295\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"4294967295\"\n            },\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each buffer\npool in the memory pool on a physical entity. It is \nrecommended that values are assigned contiguously \nstarting from 1 such that the index will be unique\nwithin a physical entity. Note that the index does \nnot overlap among different memory pools.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoEnhancedMemPoolMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221\",\n            \"status\" : \"current\",\n        }, # node\n        \"cempMIBNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.0\",\n        }, # node\n        \"cempMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1\",\n        }, # node\n        \"cempMemPool\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1\",\n        }, # node\n        \"cempMemPoolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of memory pool monitoring entries for all\nphysical entities on a managed system.\"\"\",\n        }, # table\n        \"cempMemPoolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cempMemPoolIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the memory pool monitoring table.\"\"\",\n        }, # row\n        \"cempMemPoolIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENHANCED-MEMPOOL-MIB\", \"name\" : \"CempMemPoolIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Within each physical entity, the unique value\ngreater than zero, used to represent each memory pool.  \nIt is recommended that values are assigned\ncontiguously starting from 1.\"\"\",\n        }, # column\n        \"cempMemPoolType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENHANCED-MEMPOOL-MIB\", \"name\" : \"CempMemPoolTypes\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of memory pool for which this entry\ncontains information.\"\"\",\n        }, # column\n        \"cempMemPoolName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual name assigned to the memory pool. This\nobject is suitable for output to a human operator,\nand may also be used to distinguish among the various\npool types.\"\"\",\n        }, # column\n        \"cempMemPoolPlatformMemory\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the platform-specific memory\npool type. The associated instance of cempMemPoolType\nis used to indicate the general type of memory pool.\n\nIf no platform specific memory hardware type\nidentifier exists for this physical entity, or the\nvalue is unknown by this agent, then the value { 0 0 }\nis returned.\"\"\",\n        }, # column\n        \"cempMemPoolAlternate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENHANCED-MEMPOOL-MIB\", \"name\" : \"CempMemPoolIndexOrNone\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not this memory pool has an\nalternate pool configured.  Alternate pools are\nused for fallback when the current pool runs out\nof memory.\n\nIf an instance of this object has a value of zero,\nthen this pool does not have an alternate.  Otherwise\nthe value of this object is the same as the value of\ncempMemPoolType of the alternate pool.\"\"\",\n        }, # column\n        \"cempMemPoolValid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not cempMemPoolUsed,\ncempMemPoolFree, cempMemPoolLargestFree and \ncempMemPoolLowestFree in this entry contain accurate \ndata. If an instance of this object has the value \nfalse (which in and of itself indicates an internal \nerror condition), the values of these objects\nin the conceptual row may contain inaccurate \ninformation (specifically, the reported values may be \nless than the actual values).\"\"\",\n        }, # column\n        \"cempMemPoolUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently in use by applications on the\nphysical entity.\"\"\",\n        }, # column\n        \"cempMemPoolFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently unused on the physical entity.\n\nNote that the sum of cempMemPoolUsed and cempMemPoolFree \nis the total amount of memory in the pool\"\"\",\n        }, # column\n        \"cempMemPoolLargestFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the largest number of contiguous bytes\nfrom the memory pool that are currently unused on\nthe physical entity.\"\"\",\n        }, # column\n        \"cempMemPoolLowestFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The lowest amount of available memory in the memory pool\nrecorded at any time during the operation of the system.\"\"\",\n        }, # column\n        \"cempMemPoolUsedLowWaterMark\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the lowest number of bytes from the memory pool\nthat have been used by applications on the physical entity\nsince sysUpTime.Similarly,the Used High\nWatermark indicates the largest number of bytes from\nthe memory pool that have been used by applications on\nthe physical entity since sysUpTime.This can be\nderived as follows:\nUsed High Watermark = cempMemPoolUsed +\ncempMemPoolFree  - cempMemPoolLowestFree.\"\"\",\n        }, # column\n        \"cempMemPoolAllocHit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of successful allocations from\nthe memory pool\"\"\",\n        }, # column\n        \"cempMemPoolAllocMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of unsuccessful allocations from\nthe memory pool\"\"\",\n        }, # column\n        \"cempMemPoolFreeHit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of successful frees/\ndeallocations from the memory pool\"\"\",\n        }, # column\n        \"cempMemPoolFreeMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of unsuccessful attempts\nto free/deallocate memory from the memory pool.\nFor example, this could be due to ownership errors \nwhere the application that did not assign the \nmemory is trying to free it.\"\"\",\n        }, # column\n        \"cempMemPoolShared\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently shared on the physical entity.\"\"\",\n        }, # column\n        \"cempMemPoolUsedOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of cempMemPoolUsed.\nThis object needs to be supported only if the used bytes in the\nmemory pool exceeds 32-bits, otherwise this object value would\nbe set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently in use by applications on the\nphysical entity. This object is a 64-bit version of\ncempMemPoolUsed.\"\"\",\n        }, # column\n        \"cempMemPoolFreeOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of cempMemPoolFree.\nThis object needs to be supported only if the unused bytes in\nthe memory pool exceeds 32-bits, otherwise this object value\nwould be set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently unused on the physical entity.\nThis object is a 64-bit version of cempMemPoolFree.\"\"\",\n        }, # column\n        \"cempMemPoolLargestFreeOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of\ncempMemPoolLargestFree. This object needs to \nbe supported only if the value of \ncempMemPoolLargestFree exceeds 32-bits, otherwise\nthis object value would be set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCLargestFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the largest number of contiguous bytes from the\nmemory pool that are currently unused on the physical entity.\nThis object is a 64-bit version of cempMemPoolLargestFree.\"\"\",\n        }, # column\n        \"cempMemPoolLowestFreeOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of\ncempMemPoolLowestFree. This object needs to\nbe supported only if the value of\ncempMemPoolLowestFree exceeds 32-bits, otherwise\nthis object value would be set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCLowestFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The lowest amount of available memory in the memory pool\nrecorded at any time during the operation of the system.\nThis object is a 64-bit version of cempMemPoolLowestFree.\"\"\",\n        }, # column\n        \"cempMemPoolUsedLowWaterMarkOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of\ncempMemPoolUsedLowWaterMark. This object\nneeds to be supported only if the value of\ncempMemPoolUsedLowWaterMark exceeds 32-bits,\notherwise this object value would be set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCUsedLowWaterMark\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the lowest number of bytes from the memory\npool that have been used by applications on the physical\nentity since sysUpTime. This object is a 64-bit version\nof cempMemPoolUsedLowWaterMark.\"\"\",\n        }, # column\n        \"cempMemPoolSharedOvrflw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object represents the upper 32-bits of cempMemPoolShared.\nThis object needs to be supported only if the value of\ncempMemPoolShared exceeds 32-bits, otherwise this object value\nwould be set to 0.\"\"\",\n        }, # column\n        \"cempMemPoolHCShared\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HCNUM-TC\", \"name\" : \"CounterBasedGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool that are\ncurrently shared on the physical entity. This object is a\n64-bit version of cempMemPoolShared.\"\"\",\n        }, # column\n        \"cempMemBufferPoolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Entries in this table define entities (buffer pools\nin this case) which are contained in an entity \n(memory pool) defined by an entry from\ncempMemPoolTable.\n-- Basic Pool Architecture --\n1)Pools are classified as being either Static or \n  Dynamic. Static pools make no attempt to increase \n  the number of buffers contained within them if the \n  number of free buffers (cempMemBufferFree) are less\n  than the number of minimum buffers (cempMemBufferMin).\n  With Dynamic pools, the pool attempts to meet the \n  demands of its users.\n2)Buffers in a pool are classified as being either \n  Permanent or Temporary. Permanent buffers, as their\n  name suggests, are always in the pool and are never\n  destroyed unless the number of permanent buffers \n  (cempMemBufferPermanent) is changed. Temporary\n  buffers are transient buffers that are created in\n  dynamic pools whenever the free count \n  (cempMemBufferFree) of buffers in the pool drops \n  below the minimum (cempMemBufferMin).\n3)Buffers pools are classified as either Public or \n  Private. Public pools are available for all users \n  to allocate buffers from. Private pools are\n  primarily used by interface drivers.\"\"\",\n        }, # table\n        \"cempMemBufferPoolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cempMemBufferPoolIndex\",\n            ],\n            \"description\" :\n                \"\"\"This contains all the memory buffer pool\nconfigurations object values. The \nentPhysicalIndex identifies the entity on which\nmemory buffer pools are present.\"\"\",\n        }, # row\n        \"cempMemBufferPoolIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENHANCED-MEMPOOL-MIB\", \"name\" : \"CempMemBufferPoolIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Within a physical entity, a unique value used\nto represent each buffer pool.\"\"\",\n        }, # column\n        \"cempMemBufferMemPoolIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENHANCED-MEMPOOL-MIB\", \"name\" : \"CempMemPoolIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This index corresponds to the memory pool (with\ncemMemPoolIndex as index in cempMemPoolTable) \nfrom which buffers are allocated.\"\"\",\n        }, # column\n        \"cempMemBufferName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual name assigned to the buffer pool. This\nobject is suitable for output to a human operator,\nand may also be used to distinguish among the various\nbuffer types.\nFor example: 'Small', 'Big', 'Serial0/1' etc.\"\"\",\n        }, # column\n        \"cempMemBufferDynamic\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Boolean poolDynamic; if TRUE, the number of buffers\nin the pool is adjusted (adding more packet buffers \nor deleting excesses) dynamically by the background \nprocess. If FALSE, the number of buffers in the pool \nis never adjusted, even if it falls below the minimum,\nor to zero.\"\"\",\n        }, # column\n        \"cempMemBufferSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the size of buffer element in number of bytes\non the physical entity.\"\"\",\n        }, # column\n        \"cempMemBufferMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the minimum number of free buffers\nallowed in the buffer pool or low-water mark (lwm). \nFor example of its usage :\nIf cempMemBufferFree < cempMemBufferMin & pool is \ndynamic, then signal for growth of particular buffer\npool.\"\"\",\n        }, # column\n        \"cempMemBufferMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the maximum number of free buffers\nallowed in the buffer pool or high-water mark (hwm).\nFor example of its usage :\nIf cempMemBufferFree > cempMemBufferMax & pool is \ndynamic, then signal for trim of particular buffer\npool.\"\"\",\n        }, # column\n        \"cempMemBufferPermanent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the total number of permanent buffers in the\npool on the physical entity.\"\"\",\n        }, # column\n        \"cempMemBufferTransient\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the initial number of temporary buffers\nin the pool on the physical entity. This object \ninstructs the system to create this many number of\ntemporary extra buffers, just after a system restart. \nA change in this object will be effective only after\na system restart.\"\"\",\n        }, # column\n        \"cempMemBufferTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total number of buffers\n(include allocated and free buffers) in the\nbuffer pool on the physical entity.\"\"\",\n        }, # column\n        \"cempMemBufferFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current number of free buffers in\nthe buffer pool on the physical entity.\nNote that the cempMemBufferFree is less than or equal \nto cempMemBufferTotal.\"\"\",\n        }, # column\n        \"cempMemBufferHit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of buffers successfully\nallocated from the buffer pool.\"\"\",\n        }, # column\n        \"cempMemBufferMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of times a buffer has been\nrequested, but no buffers were available in the\nbuffer pool, or when there were fewer than min \nbuffers(cempMemBufferMin) in the buffer pool.\nNote : For interface pools, a miss is actually \na fall back to its corresponding public buffer pool.\"\"\",\n        }, # column\n        \"cempMemBufferFreeHit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of successful frees/deallocations\nfrom the buffer pool.\"\"\",\n        }, # column\n        \"cempMemBufferFreeMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of unsuccessful attempts\nto free/deallocate a buffer from the buffer pool. \nFor example, this could be due to ownership errors\nwhere the application that did not assign the \nbuffer is trying to free it.\"\"\",\n        }, # column\n        \"cempMemBufferPermChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is the difference of the desired number\nof permanent buffer & total number of permanent \nbuffers present in the pool. A positive value of \nthis object tells the number of buffers needed & a \nnegative value of the object tells the extra number \nof buffers in the pool.\"\"\",\n        }, # column\n        \"cempMemBufferPeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the peak number of buffers in pool on the\nphysical entity.\"\"\",\n        }, # column\n        \"cempMemBufferPeakTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the time of most recent change in the peak\nnumber of buffers (cempMemBufferPeak object) in the pool.\"\"\",\n        }, # column\n        \"cempMemBufferTrim\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of buffers that have been trimmed from the\npool when the number of free buffers \n(cempMemBufferFree) exceeded the number of max\nallowed buffers(cempMemBufferMax).\"\"\",\n        }, # column\n        \"cempMemBufferGrow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of buffers that have been created in the\npool when the number of free buffers(cempMemBufferFree)\nwas less than minimum(cempMemBufferMix).\"\"\",\n        }, # column\n        \"cempMemBufferFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failures to grant a buffer to a\nrequester due to reasons other than insufficient \nmemory. For example, in systems where there are \ndifferent execution contexts, it may be too\nexpensive to create new buffers when running in\ncertain contexts. In those cases it may be \npreferable to fail the request.\"\"\",\n        }, # column\n        \"cempMemBufferNoStorage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the system tried to create new\nbuffers, but could not due to insufficient free \nmemory in the system.\"\"\",\n        }, # column\n        \"cempMemBufferCachePoolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that lists the cache buffer pools\nconfigured on a managed system. \n1)To provide a noticeable performance boost, \n  Cache Pool can be used. A Cache Pool is effectively\n  a lookaside list of free buffers that can be \n  accessed quickly. Cache Pool is tied to Buffer Pool. \n2)Cache pools can optionally have a threshold value\n  on the number of cache buffers used in a pool. This\n  can provide flow control management by having a \n  implementation specific approach such as invoking a\n  vector when pool cache rises above the optional \n  threshold set for it on creation.\"\"\",\n        }, # table\n        \"cempMemBufferCachePoolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cempMemBufferPoolIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry represents one of the cache buffer pools\navailable in the system and it contains the\nparameters configured for it.\nNote : cempMemBufferCachePoolTable has a sparse\ndependency with cempMemBufferPoolTable (i.e all the\nentires in cempMemBufferPoolTable need not have an\nentry in cempMemBufferCachePoolTable.\"\"\",\n        }, # row\n        \"cempMemBufferCacheSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of buffers in the cache pool\non the physical entity.\"\"\",\n        }, # column\n        \"cempMemBufferCacheTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the maximum number of free buffers\nallowed in the cache pool.\"\"\",\n        }, # column\n        \"cempMemBufferCacheUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of cache buffers from the\npool that are currently used on the physical entity.\nNote that the cempMemBufferCacheUsed is less than or \nequal to cempMemBufferCacheTotal.\"\"\",\n        }, # column\n        \"cempMemBufferCacheHit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of buffers successfully\nallocated from the cache pool.\"\"\",\n        }, # column\n        \"cempMemBufferCacheMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of times a buffer has been\nrequested, but no buffers were available in the\ncache pool.\"\"\",\n        }, # column\n        \"cempMemBufferCacheThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the threshold limit for number of cache\nbuffers used(cempMemBufferCacheUsed).\"\"\",\n        }, # column\n        \"cempMemBufferCacheThresholdCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates how many times the number of cache\nbuffers used(cempMemBufferCacheUsed) has crossed the\nthreshold value(cempMemBufferCacheThreshold).\"\"\",\n        }, # column\n        \"cempNotificationConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.2\",\n        }, # node\n        \"cempMemBufferNotifyEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable controls generation of the\ncempMemBufferNotify.\n\nWhen this variable is 'true', generation of\ncempMemBufferNotify is enabled.  When this variable\nis 'false', generation of cempMemBufferNotify\nis disabled.\"\"\",\n        }, # scalar\n        \"cempMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3\",\n        }, # node\n        \"cempMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.1\",\n        }, # node\n        \"cempMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cempMemBufferNotify\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cempMemBufferName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPeakTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Whenever cempMemBufferPeak object is updated in the\nbuffer pool, a cempMemBufferNotify notification\nis sent. The sending of these notifications can be \nenabled/disabled via the cempMemBufferNotifyEnabled object.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cempMemPoolGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cempMemPoolType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolValid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing memory pool\nmonitoring.\"\"\",\n        }, # group\n        \"cempMemPoolExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cempMemPoolPlatformMemory\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolAlternate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLargestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLowestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional memory\npool information. This group is deprecated as new \nobjects cempMemPoolUsedLowWaterMark,\ncempMemPoolAllocHit, cempMemPoolAllocMiss, \ncempMemPoolFreeHit, cempMemPool are being added.\nA new group cempMemPoolExtGroupRev1 is being added in\nit's place.\"\"\",\n        }, # group\n        \"cempMemBufferGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemBufferMemPoolIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferDynamic\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferMin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPermanent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferTransient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferHit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferMiss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferFreeHit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferFreeMiss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPermChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPeak\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferPeakTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferTrim\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferGrow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferNoStorage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing memory buffer pool\nmonitoring.\"\"\",\n        }, # group\n        \"cempMemBufferExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemBufferCacheSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheHit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheMiss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferCacheThresholdCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional memory\nbuffer pool monitoring.\"\"\",\n        }, # group\n        \"cempMemBufferNotifyEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemBufferNotifyEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects related to enabling notifications.\"\"\",\n        }, # group\n        \"cempMemBufferNotifyGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemBufferNotify\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of notifications providing additional\nmemory buffer pool monitoring.\"\"\",\n        }, # group\n        \"cempMemPoolExtGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemPoolPlatformMemory\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolAlternate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLargestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLowestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolUsedLowWaterMark\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolAllocHit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolAllocMiss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolFreeHit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolFreeMiss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects providing additional memory\npool information.This group deprecates \ncempMemPoolExtGroup.\"\"\",\n        }, # group\n        \"cempMemPoolGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemPoolType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolValid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolShared\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing memory pool\nmonitoring. This group deprecates \ncempMemPoolGroup.\"\"\",\n        }, # group\n        \"cempMemPoolHCGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemPoolHCUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolHCFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolHCLargestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolHCLowestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolHCUsedLowWaterMark\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolHCShared\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of High Capacity(HC) objects providing memory pool\nmonitoring.\"\"\",\n        }, # group\n        \"cempMemPoolOvrflwGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cempMemPoolUsedOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolFreeOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLargestFreeOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolLowestFreeOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolUsedLowWaterMarkOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolSharedOvrflw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of Overflow (Ovrflw) objects providing memory pool\nmonitoring.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cempMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco Enhanced MemPool MIB.\"\"\",\n            \"requires\" : {\n                \"cempMemPoolGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cempMIBComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco Enhanced MemPool MIB.\nThis compliance module deprecates \ncempMIBCompliance.\"\"\",\n            \"requires\" : {\n                \"cempMemPoolGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolExtGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif mempool statistics is required.This group\nis defined after deprecating cempMemPoolExtGroup.\"\"\",\n                },\n                \"cempMemBufferExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cempMIBComplianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco Enhanced MemPool MIB.\nThis compliance module deprecates \ncempMIBComplianceRev1.\"\"\",\n            \"requires\" : {\n                \"cempMemPoolGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolExtGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif mempool statistics is required.This group\nis defined after deprecating cempMemPoolExtGroup.\"\"\",\n                },\n                \"cempMemBufferExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cempMIBComplianceRev3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.221.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco Enhanced MemPool MIB.\nThis compliance module deprecates \ncempMIBComplianceRev2.\"\"\",\n            \"requires\" : {\n                \"cempMemPoolGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemBufferGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\"\n                },\n                \"cempMemPoolExtGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif mempool statistics is required.This group\nis defined after deprecating cempMemPoolExtGroup.\"\"\",\n                },\n                \"cempMemBufferExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required.\"\"\",\n                },\n                \"cempMemBufferNotifyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all entities.\nSupport for these objects is mandatory\nif bufferpool statistics is required\"\"\",\n                },\n                \"cempMemPoolHCGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for the entities which do not\nsupport memory pools greater than 32bits in size.\"\"\",\n                },\n                \"cempMemPoolOvrflwGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENHANCED-MEMPOOL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for the entities which do not\nsupport memory pools greater than 32bits in size.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-ENTITY-FRU-CONTROL-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-ENTITY-FRU-CONTROL-MIB\n\nFILENAME = \"CISCO-ENTITY-FRU-CONTROL-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n\n    \"CISCO-ENTITY-FRU-CONTROL-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Postal: Cisco Systems, Inc.\n170 West Tasman Drive\nSan Jose, CA 95134-1706\nUSA\n\nTel: +1 408 526 4000\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The CISCO-ENTITY-FRU-CONTROL-MIB is used to monitor\nand configure operational status of \nField Replaceable Units (FRUs) and other managable \nphysical entities of the system listed in the \nEntity-MIB (RFC 2737) entPhysicalTable. \n\nFRUs include assemblies such as power supplies, fans, \nprocessor modules, interface modules, etc.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2011-03-18 00:00\",\n                \"description\" :\n                    \"\"\"Added FRUCoolingUnit Textual Convention.\nAdded psRedundantSingleInput(7) to Textual\nConvention PowerRedundancyType.\n\nAdded the following groups:\n    cefcFRUPowerRealTimeStatusGroup\n    cefcFRUPowerCapabilityGroup\n    cefcFRUCoolingUnitGroup\n    cefcFRUFanCoolingUnitGroup\n\nDeprecated cefcCoolingGroup and replaced with\ncefcCoolingGroup2 and cefcFanCoolingGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-10 00:00\",\n                \"description\" :\n                    \"\"\"Added cefcMIBModuleLocalSwitchingGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2008-10-08 00:00\",\n                \"description\" :\n                    \"\"\"Added two new enumeration values\nupgrading(22) and okButAuthFailed(23) to\nModuleOperType Textual Convention.\"\"\",\n            },\n            {\n                \"date\" : \"2007-06-21 00:00\",\n                \"description\" :\n                    \"\"\"* Added two new enumeration values :\npsRedundant(5) and inPwrSrcRedundant(6) to \nPowerRedundancyType Textual Convention.\"\"\",\n            },\n            {\n                \"date\" : \"2007-03-14 00:00\",\n                \"description\" :\n                    \"\"\"* Added cefcTotalDrawnInlineCurrent and\ncefcMIBInLinePowerCurrentGroup.\n* Added cefcPowerNonRedundantReason and \ncefcMIBPowerRedundancyInfoGroup. \n* Added cefcFanCoolingCapTable and \ncefcFanCoolingCapGroup.\n* Added cefcMIBPowerCompliance8.\"\"\",\n            },\n            {\n                \"date\" : \"2006-06-23 00:00\",\n                \"description\" :\n                    \"\"\"* Added new value 'onButInlinePowerFail(12)' to PowerOperType.\"\"\",\n            },\n            {\n                \"date\" : \"2005-09-06 00:00\",\n                \"description\" :\n                    \"\"\"* Added cefcPowerCapacityGroup,\ncefcCoolingGroup and cefcConnectorRatingGroup.\n* Added new enumerator 'powerCycle' to the TC \nPowerAdminType. \n* Added two new enumerators 'offCooling'\nand 'offConnectorRating' to the TC PowerOperType.\n* Added cefcMIBNotificationEnablesGroup2 \nand cefcMgmtNotificationsGroup3.\"\"\",\n            },\n            {\n                \"date\" : \"2004-12-09 00:00\",\n                \"description\" :\n                    \"\"\"Removed the additional varbind 'entPhysicalDescr' added\nin 'cefcFRUInserted' & 'cefcFRURemoved' notifications.\"\"\",\n            },\n            {\n                \"date\" : \"2004-10-19 00:00\",\n                \"description\" :\n                    \"\"\"* Added the enumeration 'syncInProgress' to\nModuleOperType Textual Convention.\nAdded an additional varbind 'entPhysicalDescr' in\n'cefcFRUInserted' & 'cefcFRURemoved' notifications.\"\"\",\n            },\n            {\n                \"date\" : \"2003-11-24 00:00\",\n                \"description\" :\n                    \"\"\"* Added the enumerations okButPowerOverWarning\nand okButPowerOverCritical to ModuleOperType\nTextual Convention.\"\"\",\n            },\n            {\n                \"date\" : \"2003-10-27 00:00\",\n                \"description\" :\n                    \"\"\"Added poweredDown,poweredUp, powerDenied,powerCycled\nto ModuleOperType.\"\"\",\n            },\n            {\n                \"date\" : \"2003-10-23 00:00\",\n                \"description\" :\n                    \"\"\"* Added cefcModuleStateChangeReasonDescr and\ncefcModuleUpTime in the cefcModuleTable.\n* Added cefcIntelliModuleTable to provide the\nIP address information for intelligent\nmodules.\"\"\",\n            },\n            {\n                \"date\" : \"2003-07-22 00:00\",\n                \"description\" :\n                    \"\"\"* Modified the description for cefcPowerRedudancyMode to\nindicate that this object reflects the administrative\npower supply redundancy mode.\n* Added cefcPowerRedundancyOperMode to reflect the \noperational status of the power supply redundancy mode.\n* Deprecated cefcMaxDefaultInLinePower and added\ncefcMaxDefaultHighInLinePower to replace it.\n* Modified the DESCRIPTION for cefcFanTrayStatusTable\nand cefcFanTrayStatusEntry to reflect the right \nsituation.\"\"\",\n            },\n            {\n                \"date\" : \"2002-10-16 00:00\",\n                \"description\" :\n                    \"\"\"Added:\n* Added cefcFanTrayStatusChange notification\n* Added cefcFanTrayStatusChange to \n  cefcMgmtNotificationsGroup2\"\"\",\n            },\n            {\n                \"date\" : \"2002-10-03 00:00\",\n                \"description\" :\n                    \"\"\"Added:\n* cefcFanTrayStatus table containing fan tray status \n  information.\n* added cefcPhysical table containing status information\n  of the physical entity.\n* added cefcUnrecognizedFRU notification.\n* added cefcMIBFanTrayStatusGroup.\n* added cefcMIBPhysicalGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2002-09-15 00:00\",\n                \"description\" :\n                    \"\"\"Added:\n* powerSupplyValue table containing information such \n  as, total and used inline and data power, for variable \n  power supplies.\n\n* added following object group\n  cefcMIBPowerFRUValueGroup\"\"\",\n            },\n            {\n                \"date\" : \"2002-07-12 00:00\",\n                \"description\" :\n                    \"\"\"Added:\ncefcModuleLastClearConfigTime  \ncefcModuleResetReasonDescription\ncefcModuleGroupRev1\nModified:\nAdded enumerations watchDogTimeoutReset,\nresourceOverflowReset, missingTaskReset,\nlowVoltageReset, controllerReset, systemReset,\nswitchoverReset, upgradeReset, downgradeReset,\ncacheErrorReset, deviceDriverReset, \nsoftwareExceptionReset, restoreConfigReset,\nabortRevReset, burnBootReset,\nstandbyCdHealthierReset, nonNativeConfigClearReset,\nand memoryProtectionErrorReset to \nModuleResetReasonType TC.\"\"\",\n            },\n            {\n                \"date\" : \"2001-05-22 00:00\",\n                \"description\" :\n                    \"\"\"Modified the description for cefcTotalAvailableCurrent.\nChanged 'cefcPowerRedundancy' in the description to\n'cefcPowerRedundancyMode'\nAlso made the file conform to the 72 char line limit.\nImported NOTIFICATION-GROUP\nAdded cefcMgmtNotificationsGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2000-01-13 00:00\",\n                \"description\" :\n                    \"\"\"Following changes are made in this revision\n\n* added following enumerations to ModuleOperType TC:\n  dormant, outOfServiceAdmin, outOfServiceEnvTemp\n\n* added outOfServiceAdmin to ModuleAdminType TC\n\n* added following notifications:\n  cefcMIBNotificationEnables\n  cefcMIBEnableStatusNotification\n  cefcPowerStatusChange\n  cefcFRUInserted\n  cefcFRURemoved\n\n* added following object groups:\n  cefcMIBInLinePowerControlGroup\n  cefcMIBNotificationEnablesGroup\"\"\",\n            },\n            {\n                \"date\" : \"1999-04-05 00:00\",\n                \"description\" :\n                    \"\"\"Added module table containing the status information.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoEntityFRUControlMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalIndex\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalContainedIn\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalModelName\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalClass\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalVendorType\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalName\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"PowerRedundancyType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notsupported\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"redundant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"combined\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"nonRedundant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"psRedundant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"inPwrSrcRedundant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"psRedundantSingleInput\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"power supply redundancy modes.  valid values are:\n\nnotsupported(1): Read-only operational state, indicates\n    that the requested administrative state (redundant(2),\n    combined(3), psRedundant(5), inPwrSrcRedundant(6)\n    or psRedundantSingleInput(7)) is not supported\n    by the system.\n\nredundant(2): A single power supply output can power\n    the entire system, although there are more than\n    one matched supply in the system.\n\n    In the systems which support multiple level of\n    redundancy, such as input power redundancy, this\n    state indicates that redundancy is enabled on\n    all levels.\n\ncombined(3): The combined output of the power supplies\n    are available to operate the system when there are\n    more than one matched power supply in the system.\n\n    In the platforms which support multiple level of\n    redundancy, such as input redundancy, this state\n    indicates that no redundancy on all levels.\n\nnonRedundant(4): Read-only operational state, indicates\n    that there is only one power supply or there are\n    unmatched power supplies in the system.\n\npsRedundant(5): Only the power output redundancy\n    is enabled in the systems which support multiple\n    levels of redundancy.  All other types of redundancy,\n    such as input power redundancy, are disabled.\n\n    This value is only supported by the systems which\n    support multiple levels of redundancy.\n\ninPwrSrcRedundant(6): Only the input power redundancy\n    is enabled in the systems which support multiple\n    levels of redundancy.  All other types of redundancy,\n    such as output power redundancy, are disabled.\n\n    This value is only supported by the systems which\n    support input power redundancy.\n\n psRedundantSingleInput(7): Only the power redundancy with\n    single input is enabled in the systems which support\n    multiple levels of redundancy.  All other types of\n    redundancy, such as output power redundancy, are disabled.\n\n    This value is only supported by the systems which\n    support power redundancy with single input.\"\"\",\n        },\n        \"PowerAdminType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"inlineAuto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"inlineOn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"powerCycle\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"description\" :\n                \"\"\"Administratively desired FRU power state types.  valid values\nare:\non(1):  Turn FRU on.\noff(2): Turn FRU off.\n\nThe inline power means that the FRU itself won't cost any power,\nbut the external device connecting to the FRU will drain the\npower from FRU.  For example, the IP phone device.  The FRU is a\nport of a switch with voice ability and IP phone will cost power\nfrom the port once it connects to the port.\n\ninlineAuto(3): Turn FRU inline power to auto mode. It means that\nthe FRU will try to detect whether the connecting device needs\npower or not.  If it needs power, the FRU will supply power.  If\nit doesn't, the FRU will treat the device as a regular network\ndevice.\n\ninlineOn(4): Turn FRU inline power to on mode.  It means that\nonce the device connects to the FRU, the FRU will always supply\npower to the device no matter the device needs the power or not.\n\npowerCycle(5): Power cycle the FRU.  This value may be specified\nin a management protocol set operation, it will not be returned \nin response to a management protocol retrieval operation.\"\"\",\n        },\n        \"PowerOperType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"offEnvOther\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"offAdmin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"offDenied\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"offEnvPower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"offEnvTemp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"offEnvFan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"failed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"onButFanFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"offCooling\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"offConnectorRating\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"onButInlinePowerFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"description\" :\n                \"\"\"Operational FRU Status types.  valid values are:\n\noffEnvOther(1)   FRU is powered off because of a problem not\n                 listed below.\n\non(2):           FRU is powered on.\n\noffAdmin(3):     Administratively off.\n\noffDenied(4):    FRU is powered off because available\n                 system power is insufficient.\n\noffEnvPower(5):  FRU is powered off because of power problem in\n                 the FRU.  for example, the FRU's power\n                 translation (DC-DC converter) or distribution\n                 failed.\n\noffEnvTemp(6):   FRU is powered off because of temperature\n                 problem.\n\noffEnvFan(7):    FRU is powered off because of fan problems.\n\nfailed(8):       FRU is in failed state. \n\nonButFanFail(9): FRU is on, but fan has failed.\n\noffCooling(10):  FRU is powered off because of the system's \n                 insufficient cooling capacity.\n\noffConnectorRating(11): FRU is powered off because of the \n                        system's connector rating exceeded.\n\nonButInlinePowerFail(12): The FRU on, but no inline power\n                          is being delivered as the\n                          data/inline power component of the\n                          FRU has failed.\"\"\",\n        },\n        \"FRUCurrentType\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            \"description\" :\n                \"\"\"a current measurement, on the system power supply\nprimary output, expressed in cefcPowerUnits.  Range is \nfrom negative 1 million to positive one million\namperes.  \n\nA negative value expresses current used by the FRU.\nA positive value expresses current supplied by the FRU.\"\"\",\n        },\n        \"ModuleAdminType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"enabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"disabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"reset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"outOfServiceAdmin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"Administratively desired module states.  Valid values are:\n\nenabled(1)     module is operational.\ndisabled(2)    module is not operational.\nreset(3)       module is reset. This value may be specified\n               in a management protocol set operation, it will\n               not be returned in response to a management \n               protocol retrieval operation. \noutOfServiceAdmin(4)   module is powered on but out of \n                       service, set by CLI.\"\"\",\n        },\n        \"ModuleOperType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"disabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"okButDiagFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"boot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"selfTest\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"failed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"missing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"mismatchWithParent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"mismatchConfig\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"diagFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"dormant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"outOfServiceAdmin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"outOfServiceEnvTemp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"poweredDown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"poweredUp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"powerDenied\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"powerCycled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"okButPowerOverWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"okButPowerOverCritical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"syncInProgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"upgrading\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"okButAuthFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"description\" :\n                \"\"\"Operational module states.  Valid values are :\n\nunknown(1)           Module is not in one of other states\n\n normal operational states:\n\nok(2)                 Module is operational.\n\ndisabled(3)           Module is administratively disabled.\n\nokButDiagFailed(4)    Module is operational but there is some\n                     diagnostic information available.\n\n transitional states:\n\nboot(5)               Module is currently in the process of\n                     bringing up image.  After boot, it starts\n                     its operational software and transitions\n                     to the appropriate state.\n\nselfTest(6)           Module is performing selfTest.\n\n\n failure states:\n\nfailed(7)              Module has failed due to some condition\n                      not stated above.\n\nmissing(8)             Module has been provisioned, but it is\n                      missing\n\nmismatchWithParent(9)  Module is not compatible with parent\n                      entity. Module has not been provisioned\n                      and wrong type of module is plugged in.\n                      This state can be cleared by plugging\n                      in the appropriate module.\n\nmismatchConfig(10)     Module is not compatible with the current\n                      configuration. Module was correctly\n                      provisioned earlier, however the module\n                      was replaced by an incompatible module.\n                      This state can be resolved by clearing\n                      the configuration, or replacing with the\n                      appropriate module.\n\ndiagFailed(11)         Module diagnostic test failed due to some\n                      hardware failure.\n\ndormant(12)            Module is waiting for an external or\n                      internal event to become operational.\n\noutOfServiceAdmin(13)  module is administratively set to be\n                      powered on but out of service.\n\noutOfServiceEnvTemp(14)Module is powered on but out of service,\n                      due to environmental temperature problem.\n                      An out-o-service module consumes less\n                      power thus will cool down the board.\n\npoweredDown(15)       Module is in powered down state.\n\npoweredUp(16)         Module is in powered up state.\n\npowerDenied(17)       System does not have enough power in\n                      power budget to power on this module.\n\npowerCycled(18)       Module is being power cycled.\n\nokButPowerOverWarning(19) Module is drawing more power than \n                      allocated to this module. The module\n                      is still operational but may go into\n                      a failure state. This state may be\n                      caused by misconfiguration of power \n                      requirements (especially for inline \n                      power). \n\nokButPowerOverCritical(20) Module is drawing more power\n                      than this module is designed to \n                      handle. The module is still \n                      operational but may go into a \n                      failure state and could potentially\n                      take the system down. This state\n                      may be caused by gross misconfi-\n                      guration of power requirements      \n                      (especially for inline power). \n\nsyncInProgress(21)    Synchronization in progress.\n                      In a high availability system there \n                      will be 2 control modules, active and \n                      standby. \n                      This transitional state specifies the\n                      synchronization of data between the\n                      active and standby modules.\n\nupgrading(22)         Module is upgrading.\n\nokButAuthFailed(23)   Module is operational but did not pass \n                      hardware integrity verification.\"\"\",\n        },\n        \"ModuleResetReasonType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"powerUp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"parityError\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"clearConfigReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"manualReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"watchDogTimeoutReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"resourceOverflowReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"missingTaskReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"lowVoltageReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"controllerReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"systemReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"switchoverReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"upgradeReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"downgradeReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"cacheErrorReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"deviceDriverReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"softwareExceptionReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"restoreConfigReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"abortRevReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"burnBootReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"standbyCdHealthierReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"nonNativeConfigClearReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"memoryProtectionErrorReset\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"description\" :\n                \"\"\"Describes the reason for the last module reset operation.\n\nunknown(1)                      source of the reset is not \n                                identified\n\npowerUp(2)                      system power up operation\n\nparityError(3)                  parity error during system \n                                bring up operation\n\nclearConfigReset(4)             reset due to clear \n                                configuration operation\n\nmanualReset(5)                  reset due to administrative \n                                request\n\nwatchDogTimeoutReset(6)         reset due to watchdog timeout\n\nresourceOverflowReset(7)        reset due to resource overflow\n\nmissingTaskReset(8)             reset due to missing task\n\nlowVoltageReset(9)              reset due to low voltage\n\ncontrollerReset(10)             reset by controller\n\nsystemReset(11)                 system reset\n\nswitchoverReset(12)             reset due to user initiated \n                                graceful switchover\n\nupgradeReset(13)                reset due to upgrade\n\ndowngradeReset(14)              reset due to downgrade\n\ncacheErrorReset(15)             reset due to cache error\n\ndeviceDriverReset(16)           reset due to device driver \n                                error\n\nsoftwareExceptionReset(17)      reset due to software \n                                exception\n\nrestoreConfigReset(18)          reset due to configuration\n                                restoration\n\nabortRevReset(19)               reset due to revision change \n                                abort\n\nburnBootReset(20)               reset due to boot image \n                                change\n\nstandbyCdHealthierReset(21)     reset to switch to healthier \n                                standby card\n\nnonNativeConfigClearReset(22)   reset due clearing of \n                                non-native configuration\n\nmemoryProtectionErrorReset(23)  reset due to memory protection \n                                violation.\"\"\",\n        },\n        \"FRUTimeSeconds\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is a non-negative integer which represents\nthe time in second between two epochs.\n\nSince time is not discrete, it is rounded up to\nthe nearest second. For example, if the elapsed\ntime is greater than zero and less or equal to\none second, then one second is returned, etc.\n\nWhen objects are defined which use this type, the\ndescription of the object identifies both of the\nreference epochs.\"\"\",\n        },\n        \"FRUCoolingUnit\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"cfm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"watts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The unit for the cooling capacity and requirement.\n\ncfm(1)    Cubic feet per minute\nwatts(2)  Watts\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoEntityFRUControlMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117\",\n            \"status\" : \"current\",\n        }, # node\n        \"cefcMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1\",\n        }, # node\n        \"cefcFRUPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1\",\n        }, # node\n        \"cefcFRUPowerSupplyGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the redundancy mode and the\noperational status of the power supply groups\nin the system.\"\"\",\n        }, # table\n        \"cefcFRUPowerSupplyGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"An cefcFRUPowerSupplyGroupTable entry lists the desired\nredundancy mode, the units of the power outputs and the \navailable and drawn current for the power supply group.\n\nEntries are created by the agent when a power supply group\nis added to the entPhysicalTable. Entries are deleted by \nthe agent at power supply group removal.\"\"\",\n        }, # row\n        \"cefcPowerRedundancyMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"PowerRedundancyType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The administratively desired power supply redundancy\nmode.\"\"\",\n        }, # column\n        \"cefcPowerUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The units of primary supply to interpret\ncefcTotalAvailableCurrent and cefcTotalDrawnCurrent\nas power.\n\nFor example, one 1000-watt power supply could \ndeliver 100 amperes at 10 volts DC.  So the value\nof cefcPowerUnits would be 'at 10 volts DC'.\n\ncefcPowerUnits is for display purposes only.\"\"\",\n        }, # column\n        \"cefcTotalAvailableCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total current available for FRU usage.\"\"\",\n        }, # column\n        \"cefcTotalDrawnCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total current drawn by powered-on FRUs.\"\"\",\n        }, # column\n        \"cefcPowerRedundancyOperMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"PowerRedundancyType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power supply redundancy operational mode.\"\"\",\n        }, # column\n        \"cefcPowerNonRedundantReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"singleSupply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mismatchedSupplies\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"supplyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value of notApplicable(1) when\ncefcPowerRedundancyOperMode of the instance does not\nhave the value of nonRedundant(4).\n\nThe other values explain the reason why \ncefcPowerRedundancyOperMode is nonRedundant(4), e.g.\n\nunknown(2)             the reason is not identified.\n\nsingleSupply(3)        There is only one power supply\n                       in the group.\n\nmismatchedSupplies(4)  There are more than one power\n                       supplies in the groups. However\n                       they are mismatched and can not\n                       work redundantly.\n\nsupplyError(5)         Some power supply or supplies\n                       does or do not working properly.\"\"\",\n        }, # column\n        \"cefcTotalDrawnInlineCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total inline current drawn for inline operation.\"\"\",\n        }, # column\n        \"cefcFRUPowerStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the power-related administrative status\nand operational status of the manageable components\nin the system.\"\"\",\n        }, # table\n        \"cefcFRUPowerStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"An cefcFRUPowerStatusTable entry lists the desired\nadministrative status, the operational status of the \npower manageable component, and the current required by \nthe component for operation.\n\nEntries are created by the agent at system power-up or \nthe insertion of the component.  Entries are deleted by\nthe agent at the removal of the component.\n\nOnly components with power control are listed in the \ntable.\"\"\",\n        }, # row\n        \"cefcFRUPowerAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"PowerAdminType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Administratively desired FRU power state.\"\"\",\n        }, # column\n        \"cefcFRUPowerOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"PowerOperType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operational FRU power state.\"\"\",\n        }, # column\n        \"cefcFRUCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current supplied by the FRU (positive values)\nor current required to operate the FRU (negative values).\"\"\",\n        }, # column\n        \"cefcFRUPowerCapability\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"realTimeCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the set of supported power capabilities\nof the FRU.\n\nrealTimeCurrent(0) -\n    cefcFRURealTimeCurrent is supported by the FRU.\"\"\",\n        }, # column\n        \"cefcFRURealTimeCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the realtime value of current supplied\nby the FRU (positive values) or the realtime value of current\ndrawn by the FRU (negative values).\"\"\",\n        }, # column\n        \"cefcMaxDefaultInLinePower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"12500\",\n            \"units\" : \"miliwatts\",\n            \"description\" :\n                \"\"\"The system will provide power to the device connecting\nto the FRU if the device needs power, like an IP Phone.\nWe call the providing power inline power.\n\nThis MIB object controls the maximum default inline power\nfor the device connecting to the FRU in the system. If the\nmaximum default inline power of the device is greater than\nthe maximum value reportable by this object, then this\nobject should report its maximum reportable value (12500)\nand cefcMaxDefaultHighInLinePower must be used to report\nthe actual maximum default inline power.\"\"\",\n        }, # scalar\n        \"cefcFRUPowerSupplyValueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the power capacity of a power FRU in the\nsystem if it provides variable power. Power supplies usually\nprovide either system or inline power. They cannot be \ncontrolled by software to dictate how they distribute power.\nWe can also have what are known as variable power supplies.\nThey can provide both system and inline power and can be \nvaried within hardware defined ranges for system and inline\nlimited by a total maximum combined output. They could be\nconfigured by the user via CLI or SNMP or be controlled by\nsoftware internally.\nThis table supplements the information in the\ncefcFRUPowerStatusTable for power supply FRUs. The \ncefcFRUCurrent attribute in that table provides the overall\ncurrent the power supply FRU can provide while this table \ngives us the individual contribution towards system and \ninline power.\"\"\",\n        }, # table\n        \"cefcFRUPowerSupplyValueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"An cefcFRUPowerSupplyValueTable entry lists the current\nprovided by the FRU for operation.\n\nEntries are created by the agent at system power-up or \nFRU insertion.  Entries are deleted by the agent at FRU\nremoval.\n\nOnly power supply FRUs are listed in the table.\"\"\",\n        }, # row\n        \"cefcFRUTotalSystemCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Total current that could be supplied by the FRU (positive\nvalues) for system operations.\"\"\",\n        }, # column\n        \"cefcFRUDrawnSystemCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Amount of current drawn by the FRU's in the system towards\nsystem operations from this FRU\"\"\",\n        }, # column\n        \"cefcFRUTotalInlineCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Total current supplied by the FRU (positive values) for\ninline operations.\"\"\",\n        }, # column\n        \"cefcFRUDrawnInlineCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Amount of current that is being drawn from this FRU for inline\noperation.\"\"\",\n        }, # column\n        \"cefcMaxDefaultHighInLinePower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"miliwatts\",\n            \"description\" :\n                \"\"\"The system will provide power to the device connecting\nto the FRU if the device needs power, like an IP Phone.\nWe call the providing power inline power.\n\nThis MIB object controls the maximum default inline power\nfor the device connecting to the FRU in the system.\"\"\",\n        }, # scalar\n        \"cefcModule\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2\",\n        }, # node\n        \"cefcModuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A cefcModuleTable entry lists the operational and\nadministrative status information for ENTITY-MIB\nentPhysicalTable entries for manageable components\nof type PhysicalClass module(9).\"\"\",\n        }, # table\n        \"cefcModuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcModuleStatusTable entry lists the operational and\nadministrative status information for ENTITY-MIB\nentPhysicalTable entries for manageable components \nof type PhysicalClass module(9).\n\nEntries are created by the agent at the system power-up or\nmodule insertion.\n\nEntries are deleted by the agent upon module removal.\"\"\",\n        }, # row\n        \"cefcModuleAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"ModuleAdminType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object provides administrative control of the\nmodule.\"\"\",\n        }, # column\n        \"cefcModuleOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"ModuleOperType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object shows the module's operational state.\"\"\",\n        }, # column\n        \"cefcModuleResetReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"ModuleResetReasonType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the reason for the last reset performed\non the module.\"\"\",\n        }, # column\n        \"cefcModuleStatusLastChangeTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time the cefcModuleOperStatus\nis changed.\"\"\",\n        }, # column\n        \"cefcModuleLastClearConfigTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the\nconfiguration was most recently cleared.\"\"\",\n        }, # column\n        \"cefcModuleResetReasonDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A description qualifying the module reset reason\nspecified in cefcModuleResetReason. \n\nExamples:\n  command xyz              \n  missing task\n  switch over\n  watchdog timeout    \n  etc.\n\ncefcModuleResetReasonDescription is for display purposes only.\nNMS applications must not parse.\"\"\",\n        }, # column\n        \"cefcModuleStateChangeReasonDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object displays human-readable textual string which\ndescribes the cause of the last state change of the\nmodule. This object contains zero length string\nif no meaningful reason could be provided.\n\nExamples:\n'Invalid software version'\n'Software download failed'\n'Software version mismatch'\n'Module is in standby state'\netc.\n\nThis object is for display purposes only.\nNMS applications must not parse this object\nand take any decision based on its value.\"\"\",\n        }, # column\n        \"cefcModuleUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUTimeSeconds\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object provides the up time for the module\nsince it was last re-initialized.\n\nThis object is not persistent; if a module reset,\nrestart, power off, the up time starts from zero.\"\"\",\n        }, # column\n        \"cefcIntelliModuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table sparsely augments the\ncefcModuleTable (i.e., every row in\nthis table corresponds to a row in\nthe cefcModuleTable but not necessarily\nvice-versa).\n\nA cefcIntelliModuleTable entry lists the\ninformation specific to intelligent\nmodules which cannot be provided by the\ncefcModuleTable.\"\"\",\n        }, # table\n        \"cefcIntelliModuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcIntelliModuleTable entry lists the\ninformation specific to an intelligent\nmodule which cannot be provided by\nthis module's corresponding instance in\nthe cefcModuleTable. Only an intelligent\nmodule with Internet address configured has\nits entry here.\n\nAn entry of this table is created if an \nintelligent module is detected by the \nmanaged system and its management Internet\naddress is configured on the intelligent \nmodule.\n\nAn entry of this table is deleted if the \nremoval of Internet address configuration of \nthis module or the module itself.\"\"\",\n        }, # row\n        \"cefcIntelliModuleIPAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of Internet address by which the\nintelligent module is reachable.\"\"\",\n        }, # column\n        \"cefcIntelliModuleIPAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Internet address configured\nfor the intelligent module.\nThe type of this address is \ndetermined by the value of the object \ncefcIntelliModuleIPAddrType.\"\"\",\n        }, # column\n        \"cefcModuleLocalSwitchingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table sparsely augments the cefcModuleTable\n(i.e., every row in this table corresponds to a row in\nthe cefcModuleTable but not necessarily vice-versa).\n\nA cefcModuleLocalSwitchingTable entry lists the\ninformation specific to local switching capable\nmodules which cannot be provided by the\ncefcModuleTable.\"\"\",\n        }, # table\n        \"cefcModuleLocalSwitchingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcModuleLocalSwitchingTable entry lists the\ninformation specific to a local switching capable\nmodule which cannot be provided by this module's\ncorresponding instance in the cefcModuleTable.\nOnly a module which is capable of local switching\nhas its entry here.\n\nAn entry of this table is created if a module which\nis capable of local switching is detected by the\nmanaged system.\n\nAn entry of this table is deleted if the\nremoval of this module.\"\"\",\n        }, # row\n        \"cefcModuleLocalSwitchingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the mode of local switching.\n\nenabled(1)  - local switching is enabled.\ndisabled(2) - local switching is disabled.\"\"\",\n        }, # column\n        \"cefcMIBNotificationEnables\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.3\",\n        }, # node\n        \"cefcMIBEnableStatusNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable indicates whether the system\nproduces the following notifications:\ncefcModuleStatusChange, cefcPowerStatusChange, \ncefcFRUInserted, cefcFRURemoved, \ncefcUnrecognizedFRU and cefcFanTrayStatusChange.\n\nA false value will prevent these notifications\nfrom being generated.\"\"\",\n        }, # scalar\n        \"cefcEnablePSOutputChangeNotif\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable indicates whether the system\nproduces the cefcPowerSupplyOutputChange \nnotifications when the output capacity of \na power supply has changed. A false value \nwill prevent this notification to generated.\"\"\",\n        }, # scalar\n        \"cefcFRUFan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.4\",\n        }, # node\n        \"cefcFanTrayStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the operational status information\nfor all ENTITY-MIB entPhysicalTable entries which have \nan entPhysicalClass of 'fan'; specifically, all  \nentPhysicalTable entries which represent either: one \nphysical fan, or a single physical 'fan tray' which is a\nmanufactured (inseparable in the field) combination of \nmultiple fans.\"\"\",\n        }, # table\n        \"cefcFanTrayStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"An cefcFanTrayStatusTable entry lists the operational\nstatus information for the ENTITY-MIB entPhysicalTable \nentry which is identified by the value of entPhysicalIndex.\nThe value of entPhysicalClass for the identified entry will\nbe 'fan', and the represented physical entity will be \neither: one physical fan, or a single physical 'fan tray' \nwhich is a manufactured (inseparable in the field) \ncombination of multiple fans.\n\nEntries are created by the agent at system power-up or \nfan or fan tray insertion.  Entries are deleted \nby the agent at the fan or fan tray removal.\"\"\",\n        }, # row\n        \"cefcFanTrayOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational state of the fan or fan tray.\nunknown(1) - unknown.\nup(2) - powered on.\ndown(3) - powered down.\nwarning(4) - partial failure, needs replacement \n             as soon as possible.\"\"\",\n        }, # column\n        \"cefcPhysical\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.5\",\n        }, # node\n        \"cefcPhysicalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row per physical entity.\"\"\",\n        }, # table\n        \"cefcPhysicalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular physical entity.\"\"\",\n        }, # row\n        \"cefcPhysicalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unsupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"incompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of this physical entity.\nother(1) - the status is not any of the listed below.\nsupported(2) - this entity is supported.\nunsupported(3) - this entity is unsupported.\nincompatible(4) - this entity is incompatible.\nIt would be unsupported(3), if the ID read from Serial\nEPROM is not supported. It would be incompatible(4), if\nin the present configuration this FRU is not supported.\"\"\",\n        }, # column\n        \"cefcPowerCapacity\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6\",\n        }, # node\n        \"cefcPowerSupplyInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the power input information\nfor all the power supplies that have entPhysicalTable\nentries with 'powerSupply' in the entPhysicalClass. \n\nThe entries are created by the agent at the system\npower-up or power supply insertion.\n\nEntries are deleted by the agent upon power supply\nremoval.\n\nThe number of entries is determined by the number of\npower supplies and number of power inputs on the power \nsupply.\"\"\",\n        }, # table\n        \"cefcPowerSupplyInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cefcPowerSupplyInputIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing power input management information\napplicable to a particular power supply and input.\"\"\",\n        }, # row\n        \"cefcPowerSupplyInputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each input on\na power supply.\"\"\",\n        }, # column\n        \"cefcPowerSupplyInputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"acLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"acHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dcLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dcHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of an input power detected on the power\nsupply.\n\nunknown(1): No input power is detected.\n\nacLow(2): Lower rating AC input power is detected.\n\nacHigh(3): Higher rating AC input power is detected.\n\ndcLow(4): Lower rating DC input power is detected.\n\ndcHigh(5): Higher rating DC input power is detected.\"\"\",\n        }, # column\n        \"cefcPowerSupplyOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains a list of possible output\nmode for the power supplies, whose ENTITY-MIB\nentPhysicalTable entries have an entPhysicalClass\nof 'powerSupply'. It also indicate which mode\nis the operational mode within the system.\"\"\",\n        }, # table\n        \"cefcPowerSupplyOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cefcPSOutputModeIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcPowerSupplyOutputTable entry lists the\npower output capacity and its operational status\nfor manageable components of type PhysicalClass\n'powerSupply'.\n\nEntries are created by the agent at the system\npower-up or power supply insertion.\n\nEntries are deleted by the agent upon power supply\nremoval.\n\nThe number of entries of a power supply is determined\nby the power supply.\"\"\",\n        }, # row\n        \"cefcPSOutputModeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each\npossible output mode on a power supply.\"\"\",\n        }, # column\n        \"cefcPSOutputModeCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output capacity of the power supply.\"\"\",\n        }, # column\n        \"cefcPSOutputModeInOperation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value of 'true' indicates that this mode is the\noperational mode of the power supply output\ncapacity.\n\nA value of 'false' indicates that this mode is not\nthe operational mode of the power supply output\ncapacity.\n\nFor a given power supply's entPhysicalIndex, \nat most one instance of this object can have the\nvalue of true(1).\"\"\",\n        }, # column\n        \"cefcCooling\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7\",\n        }, # node\n        \"cefcChassisCoolingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the cooling capacity\ninformation of the chassis whose ENTITY-MIB\nentPhysicalTable entries have an\nentPhysicalClass of 'chassis'.\"\"\",\n        }, # table\n        \"cefcChassisCoolingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcChassisCoolingEntry lists the maximum\ncooling capacity that could be provided \nfor one slot on the manageable components of type\nPhysicalClass 'chassis'.\n\nEntries are created by the agent if the corresponding\nentry is created in ENTITY-MIB entPhysicalTable.\n\nEntries are deleted by the agent if the corresponding\nentry is deleted in ENTITY-MIB entPhysicalTable.\"\"\",\n        }, # row\n        \"cefcChassisPerSlotCoolingCap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum cooling capacity that could be provided\nfor any slot in this chassis.\n\nThe default unit of the cooling capacity is 'cfm', if\ncefcChassisPerSlotCoolingUnit is not supported.\"\"\",\n        }, # column\n        \"cefcChassisPerSlotCoolingUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCoolingUnit\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit of the maximum cooling capacity for any slot\nin this chassis.\"\"\",\n        }, # column\n        \"cefcFanCoolingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the cooling capacity\ninformation of the fans whose ENTITY-MIB\nentPhysicalTable entries have an\nentPhysicalClass of 'fan'.\"\"\",\n        }, # table\n        \"cefcFanCoolingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcFanCoolingEntry lists the cooling\ncapacity that is provided by the \nmanageable components of type PhysicalClass \n'fan'.\n\nEntries are created by the agent if the corresponding\nentry is created in ENTITY-MIB entPhysicalTable.\n\nEntries are deleted by the agent if the corresponding\nentry is deleted in ENTITY-MIB entPhysicalTable.\"\"\",\n        }, # row\n        \"cefcFanCoolingCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling capacity that is provided by this fan.\n\nThe default unit of the fan cooling capacity is 'cfm',\nif cefcFanCoolingCapacityUnit is not supported.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapacityUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCoolingUnit\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit of the fan cooling capacity.\"\"\",\n        }, # column\n        \"cefcModuleCoolingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the cooling requirement for\nall the manageable components of type entPhysicalClass\n'module'.\"\"\",\n        }, # table\n        \"cefcModuleCoolingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcModuleCoolingEntry lists the cooling\nrequirement for a manageable components of type\nentPhysicalClass 'module'.\n\nEntries are created by the agent at the system\npower-up or module insertion.\n\nEntries are deleted by the agent upon module\nremoval.\"\"\",\n        }, # row\n        \"cefcModuleCooling\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling requirement of the module and its daughter\ncards.\n\nThe default unit of the module cooling requirement is\n'cfm', if cefcModuleCoolingUnit is not supported.\"\"\",\n        }, # column\n        \"cefcModuleCoolingUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCoolingUnit\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit of the cooling requirement of the module and its\ndaughter cards.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains a list of the possible cooling\ncapacity modes and properties of the fans, whose \nENTITY-MIB entPhysicalTable entries have an \nentPhysicalClass of 'fan'.\"\"\",\n        }, # table\n        \"cefcFanCoolingCapEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"cefcFanCoolingCapIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcFanCoolingCapacityEntry lists the cooling\ncapacity mode of a manageable components of type\nentPhysicalClass 'fan'. It also lists the corresponding\ncooling capacity provided and the power consumed\nby the fan on this mode.\n\n\nEntries are created by the agent if the corresponding\nentry is created in ENTITY-MIB entPhysicalTable.\n\nEntries are deleted by the agent if the corresponding\nentry is deleted in ENTITY-MIB entPhysicalTable.\"\"\",\n        }, # row\n        \"cefcFanCoolingCapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An arbitrary value that uniquely identifies a\ncooling capacity mode for a fan.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapModeDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the cooling capacity\nmode of the fan.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling capacity that could be provided\nwhen the fan is operating in this mode.\n\nThe default unit of the cooling capacity is 'cfm',\nif cefcFanCoolingCapCapacityUnit is not supported.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power consumption of the fan when operating in\nin this mode.\"\"\",\n        }, # column\n        \"cefcFanCoolingCapCapacityUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.7.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCoolingUnit\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit of the fan cooling capacity when operating\nin this mode.\"\"\",\n        }, # column\n        \"cefcConnector\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8\",\n        }, # node\n        \"cefcConnectorRatingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the connector power\nratings of FRUs. \n\nOnly components with power connector rating \nmanagement are listed in this table.\"\"\",\n        }, # table\n        \"cefcConnectorRatingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcConnectorRatingEntry lists the\npower connector rating information of a \ncomponent in the system.\n\nAn entry or entries are created by the agent\nwhen an physical entity with connector rating \nmanagement is added to the ENTITY-MIB \nentPhysicalTable. An entry is deleted \nby the agent at the entity removal.\"\"\",\n        }, # row\n        \"cefcConnectorRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum power that the component's\nconnector can withdraw.\"\"\",\n        }, # column\n        \"cefcModulePowerConsumptionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the total power consumption\ninformation for modules whose ENTITY-MIB \nentPhysicalTable entries have an entPhysicalClass \nof 'module'.\"\"\",\n        }, # table\n        \"cefcModulePowerConsumptionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cefcModulePowerConsumptionEntry lists the total\npower consumption of a manageable components of type\nentPhysicalClass 'module'.\n\nEntries are created by the agent at the system\npower-up or module insertion.\n\nEntries are deleted by the agent upon module\nremoval.\"\"\",\n        }, # row\n        \"cefcModulePowerConsumption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.1.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-FRU-CONTROL-MIB\", \"name\" : \"FRUCurrentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The combined power consumption to operate the module\nand its submodule(s) and inline-power device(s).\"\"\",\n        }, # column\n        \"cefcFRUMIBNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2\",\n        }, # node\n        \"cefcMIBNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0\",\n        }, # node\n        \"cefcMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3\",\n        }, # node\n        \"cefcMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1\",\n        }, # node\n        \"cefcMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cefcModuleStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cefcModuleOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleStatusLastChangeTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This notification is generated when the value of\ncefcModuleOperStatus changes. It can be utilized by \nan NMS to update the status of the module it is\nmanaging.\"\"\",\n        }, # notification\n        \"cefcPowerStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cefcFRUPowerOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUPowerAdminStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cefcFRUPowerStatusChange notification indicates that\nthe power status of a FRU has changed. The varbind for this\nnotification indicates the entPhysicalIndex of the FRU,\nand the new operational-status of the FRU.\"\"\",\n        }, # notification\n        \"cefcFRUInserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"entPhysicalContainedIn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cecfFRUInserted notification indicates that a FRU was\ninserted. The varbind for this notification indicates the\nentPhysicalIndex of the inserted FRU, and the entPhysicalIndex\nof the FRU's container.\"\"\",\n        }, # notification\n        \"cefcFRURemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"entPhysicalContainedIn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cefcFRURemoved notification indicates that a FRU was\nremoved. The varbind for this notification indicates the\nentPhysicalIndex of the removed FRU, and the entPhysicalIndex\nof the FRU's container.\"\"\",\n        }, # notification\n        \"cefcUnrecognizedFRU\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"entPhysicalClass\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalVendorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalModelName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"cefcPhysicalStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The cefcUnrecognizedFRU notification indicates that a FRU was\ninserted whose product ID is not supported. The varbind for\nthis notification indicates the entPhysicalIndex of the \ninserted FRU, the entPhysicalClass this FRU belongs to, the\nentPhysicalVendorType of this FRU, the entPhysicalName\nof the FRU, the entPhysicalModelName of the inserted FRU, and\nthe cefcPhysicalStatus telling the reason code for sending this\nnotification.\"\"\",\n        }, # notification\n        \"cefcFanTrayStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cefcFanTrayOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This notification is generated when the value of\ncefcFanTrayOperStatus changes.\"\"\",\n        }, # notification\n        \"cefcPowerSupplyOutputChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.2.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"entPhysicalName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalModelName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"cefcPSOutputModeCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The notification indicates that the power\nsupply's output capacity has changed.\n\nThis notification is triggered whenever one instance \nof the power supply's cefcPSOutputModeInOperation \nhas transitioned from 'false' to 'true'.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cefcMIBPowerModeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPowerRedundancyMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcPowerUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcTotalAvailableCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcTotalDrawnCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used\nto configure and monitor power-control for\nFRUs.\"\"\",\n        }, # group\n        \"cefcMIBPowerFRUControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFRUPowerAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUPowerOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used\nto configure and monitor power-control for\nFRUs.\"\"\",\n        }, # group\n        \"cefcMIBModuleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcModuleAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleResetReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleStatusLastChangeTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\noperational state and redundancy state of the modules\"\"\",\n        }, # group\n        \"cefcMIBInLinePowerControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cefcMaxDefaultInLinePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nconfigure and monitor inline power control for\nFRUs.\"\"\",\n        }, # group\n        \"cefcMIBNotificationEnablesGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcMIBEnableStatusNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nenable notification.\"\"\",\n        }, # group\n        \"cefcMgmtNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcModuleStatusChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcPowerStatusChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUInserted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRURemoved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications which a FRU Management entity is\nrequired to implement.\"\"\",\n        }, # group\n        \"cefcModuleGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcModuleLastClearConfigTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleResetReasonDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\noperational state and redundancy state of the modules\"\"\",\n        }, # group\n        \"cefcMIBPowerFRUValueGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to retrieve\nthe total and used capacity of a power supply for both\nsystem and inline power.\"\"\",\n        }, # group\n        \"cefcMIBFanTrayStatusGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFanTrayOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which show information of the\nstatus of Fan Tray FRUs.\"\"\",\n        }, # group\n        \"cefcMIBPhysicalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPhysicalStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which show information of the\nPhysical Entity.\"\"\",\n        }, # group\n        \"cefcMgmtNotificationsGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcUnrecognizedFRU\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFanTrayStatusChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The additional notifications for FRU status.\"\"\",\n        }, # group\n        \"cefcMIBPowerOperModeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPowerRedundancyOperMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used\nto monitor the device's power supply operational\nredundancy mode.\"\"\",\n        }, # group\n        \"cefcMIBInLinePowerControlGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcMaxDefaultHighInLinePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nconfigure and monitor inline power control for\nFRUs.\"\"\",\n        }, # group\n        \"cefcModuleExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcModuleStateChangeReasonDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleUpTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\nstate change reason and up time of the modules.\"\"\",\n        }, # group\n        \"cefcIntelliModuleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcIntelliModuleIPAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcIntelliModuleIPAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\ninformation specific to intelligent modules.\"\"\",\n        }, # group\n        \"cefcPowerCapacityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPowerSupplyInputType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcPSOutputModeCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcPSOutputModeInOperation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\npower capacity information\"\"\",\n        }, # group\n        \"cefcCoolingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.17\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cefcChassisPerSlotCoolingCap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFanCoolingCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleCooling\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\ncooling capacity information.\"\"\",\n        }, # group\n        \"cefcConnectorRatingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcConnectorRating\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModulePowerConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\npower connector rating and module power total \nconsumption information.\"\"\",\n        }, # group\n        \"cefcMIBNotificationEnablesGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcEnablePSOutputChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nenable additional group of notifications.\"\"\",\n        }, # group\n        \"cefcMgmtNotificationsGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPowerSupplyOutputChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The additional notification for notify the\npower capacity mode change.\"\"\",\n        }, # group\n        \"cefcMIBInLinePowerCurrentGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcTotalDrawnInlineCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to\nmonitor inline power usage for FRUs.\"\"\",\n        }, # group\n        \"cefcMIBPowerRedundancyInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.22\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcPowerNonRedundantReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide additional\ninformation about the device's power supply \nredundancy.\"\"\",\n        }, # group\n        \"cefcFanCoolingCapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFanCoolingCapModeDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFanCoolingCapCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFanCoolingCapCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the cooling\ncapacity modes and properties of the fans.\"\"\",\n        }, # group\n        \"cefcMIBModuleLocalSwitchingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcModuleLocalSwitchingMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which show information of the\nlocal switching status of modules.\"\"\",\n        }, # group\n        \"cefcFRUPowerRealTimeStatusGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.25\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFRURealTimeCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the power-related\nrealtime information of the manageable entities.\"\"\",\n        }, # group\n        \"cefcFRUPowerCapabilityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.26\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFRUPowerCapability\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the power-related\ncapability information of the manageable entities.\"\"\",\n        }, # group\n        \"cefcFRUCoolingUnitGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.27\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcChassisPerSlotCoolingUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleCoolingUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the cooling unit\ninformation of the manageable entities.\"\"\",\n        }, # group\n        \"cefcFRUFanCoolingUnitGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.28\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFanCoolingCapacityUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcFanCoolingCapCapacityUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the cooling unit\ninformation of the manageable fan entities.\"\"\",\n        }, # group\n        \"cefcCoolingGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.29\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcChassisPerSlotCoolingCap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcModuleCooling\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to get the\ncooling capacity or requirement information.\"\"\",\n        }, # group\n        \"cefcFanCoolingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.2.30\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cefcFanCoolingCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects provide the cooling\ncapacity modes and properties of the fans.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cefcMIBPowerCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.1\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cefcMIBPowerCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be implemented\nfor FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cefcMIBPowerCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cefcMIBPowerCompliance4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cefcMIBPowerCompliance5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n                \"cefcMIBFanTrayStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBFanTrayStatusGroup must be implemented\nin all systems which can detect the status of Fan\nTray FRUs.\"\"\",\n                },\n                \"cefcMIBPhysicalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The collection of objects which show information of\nthe Physical Entity.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cefcMIBPowerCompliance6\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n                \"cefcMIBFanTrayStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBFanTrayStatusGroup must be implemented\nin all systems which can detect the status of Fan\nTray FRUs.\"\"\",\n                },\n                \"cefcMIBPhysicalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The collection of objects which show information of\nthe Physical Entity.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The implementation of this group of notifications\nis optional.\"\"\",\n                },\n                \"cefcMIBPowerOperModeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerOperModeGroup must be\nimplemented for the device which supports\npower supply operational modes.\"\"\",\n                },\n                \"cefcModuleExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleExtGroup is\noptional.\"\"\",\n                },\n                \"cefcIntelliModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleAddrGroup is\noptional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcIntelliModuleIPAddrType\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to\nsupport IPv4 addresses.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cefcMIBPowerCompliance7\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.7\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n                \"cefcMIBFanTrayStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBFanTrayStatusGroup must be implemented\nin all systems which can detect the status of Fan\nTray FRUs.\"\"\",\n                },\n                \"cefcMIBPhysicalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The collection of objects which show information of\nthe Physical Entity.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The implementation of this group of notifications\nis optional.\"\"\",\n                },\n                \"cefcMIBPowerOperModeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerOperModeGroup must be\nimplemented for the device which supports\npower supply operational modes.\"\"\",\n                },\n                \"cefcModuleExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleExtGroup is\noptional.\"\"\",\n                },\n                \"cefcIntelliModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleAddrGroup is\noptional.\"\"\",\n                },\n                \"cefcPowerCapacityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power capacity \ninformation.\"\"\",\n                },\n                \"cefcCoolingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate cooling \ncapacity information.\"\"\",\n                },\n                \"cefcConnectorRatingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power \nconnector rating and module power total \nconsumption information.\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcIntelliModuleIPAddrType\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to\nsupport IPv4 addresses.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cefcMIBPowerCompliance8\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.8\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n                \"cefcMIBFanTrayStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBFanTrayStatusGroup must be implemented\nin all systems which can detect the status of Fan\nTray FRUs.\"\"\",\n                },\n                \"cefcMIBPhysicalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The collection of objects which show information of\nthe Physical Entity.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The implementation of this group of notifications\nis optional.\"\"\",\n                },\n                \"cefcMIBPowerOperModeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerOperModeGroup must be\nimplemented for the device which supports\npower supply operational modes.\"\"\",\n                },\n                \"cefcModuleExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleExtGroup is\noptional.\"\"\",\n                },\n                \"cefcIntelliModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleAddrGroup is\noptional.\"\"\",\n                },\n                \"cefcPowerCapacityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power capacity\ninformation.\"\"\",\n                },\n                \"cefcCoolingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate cooling\ncapacity information.\"\"\",\n                },\n                \"cefcConnectorRatingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power\nconnector rating and module power total\nconsumption information.\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n                \"cefcMIBInLinePowerCurrentGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate inline power\nusage information.\"\"\",\n                },\n                \"cefcMIBPowerRedundancyInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate the reason\nwhy the redundancy of the power supplies cannot\nbe achieved.\"\"\",\n                },\n                \"cefcFanCoolingCapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\ncan provide the cooling capacity modes \nand properties of the fans in the system.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcIntelliModuleIPAddrType\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to\nsupport IPv4 addresses.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cefcMIBPowerCompliance9\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.117.3.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation can implement this group to\nprovide FRU power status and control.\"\"\",\n            \"requires\" : {\n                \"cefcMIBPowerModeGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMgmtNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\"\n                },\n                \"cefcMIBPowerFRUControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUControlGroup must be implemented\nfor FRUs that have power control\"\"\",\n                },\n                \"cefcMIBModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBModuleGroup must be implemented for\nFRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBInLinePowerControlGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBInLinePowerControlGroup must be\nimplemented for FRUs that have inline power control\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBNotificationEnablesGroup must be\nimplemented for FRUs that have notification\"\"\",\n                },\n                \"cefcModuleGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcModuleGroupRev1 is not mandatory for\nagents with FRUs that are of module type.\"\"\",\n                },\n                \"cefcMIBPowerFRUValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerFRUValueGroup must be implemented for\npower supply FRUs that have variable output\"\"\",\n                },\n                \"cefcMIBFanTrayStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBFanTrayStatusGroup must be implemented\nin all systems which can detect the status of Fan\nTray FRUs.\"\"\",\n                },\n                \"cefcMIBPhysicalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The collection of objects which show information of\nthe Physical Entity.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The implementation of this group of notifications\nis optional.\"\"\",\n                },\n                \"cefcMIBPowerOperModeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"The cefcMIBPowerOperModeGroup must be\nimplemented for the device which supports\npower supply operational modes.\"\"\",\n                },\n                \"cefcModuleExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleExtGroup is\noptional.\"\"\",\n                },\n                \"cefcIntelliModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of cefcModuleAddrGroup is\noptional.\"\"\",\n                },\n                \"cefcPowerCapacityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power capacity\ninformation.\"\"\",\n                },\n                \"cefcConnectorRatingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate power\nconnector rating and module power total\nconsumption information.\"\"\",\n                },\n                \"cefcMIBNotificationEnablesGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n                \"cefcMgmtNotificationsGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the SNMP notification to notify\nthe power supply output capacity changes.\"\"\",\n                },\n                \"cefcMIBInLinePowerCurrentGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate inline power\nusage information.\"\"\",\n                },\n                \"cefcMIBPowerRedundancyInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nhave the capability to populate the reason\nwhy the redundancy of the power supplies cannot\nbe achived.\"\"\",\n                },\n                \"cefcFanCoolingCapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\ncan provide the cooling capacity modes \nand properties of the fans in the system.\"\"\",\n                },\n                \"cefcMIBModuleLocalSwitchingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport modules with local switching\nfunctionality.\"\"\",\n                },\n                \"cefcFRUPowerRealTimeStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport power related realtime status.\"\"\",\n                },\n                \"cefcFRUPowerCapabilityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport power related capability information.\"\"\",\n                },\n                \"cefcFRUCoolingUnitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the cooling unit information.\"\"\",\n                },\n                \"cefcFRUFanCoolingUnitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the fan capacity cooling unit information.\"\"\",\n                },\n                \"cefcCoolingGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the chassis cooling capacity and module\ncooling requirement.\"\"\",\n                },\n                \"cefcFanCoolingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which\nsupport the fan cooling capacity information.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cefcFRUTotalSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnSystemCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUTotalInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcFRUDrawnInlineCurrent\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcModuleLocalSwitchingMode\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cefcIntelliModuleIPAddrType\" : {\n                    \"module\" : \"CISCO-ENTITY-FRU-CONTROL-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"INET-ADDRESS-MIB\",\n                                \"type\" : \"InetAddressType\",\n                            },\n                            \"ipv4\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"An implementation is only required to\nsupport IPv4 addresses.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-ENTITY-SENSOR-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-ENTITY-SENSOR-MIB\n\nFILENAME = \"./CISCO-ENTITY-SENSOR-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n\n    \"CISCO-ENTITY-SENSOR-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Postal: Cisco Systems, Inc.\n170 West Tasman Drive\nSan Jose, CA 95134-1706\nUSA\n\nTel: +1 408 526 4000\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The CISCO-ENTITY-SENSOR-MIB is used to monitor \nthe values of sensors in the Entity-MIB (RFC 2037) \nentPhysicalTable.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2007-11-12 00:00\",\n                \"description\" :\n                    \"\"\"Added entitySensorNotifCtrlGlobalGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2006-01-01 00:00\",\n                \"description\" :\n                    \"\"\"Add new object entSensorMeasuredEntity to\nentSensorValueTable.\"\"\",\n            },\n            {\n                \"date\" : \"2005-09-08 00:00\",\n                \"description\" :\n                    \"\"\"Change the module descriptor name from entitySensorMIB\nto ciscoEntitySensorMIB since ENTITY-SENSOR-MIB also\nuses the same name and there is a conflict.\"\"\",\n            },\n            {\n                \"date\" : \"2003-01-07 00:00\",\n                \"description\" :\n                    \"\"\"[1] Add dBm(14) in SensorDataType.\"\"\",\n            },\n            {\n                \"date\" : \"2002-10-16 00:00\",\n                \"description\" :\n                    \"\"\"[1] Add critical(30) in CSensorThresholdSeverity.\n[2] Change to MAX-ACCESS read-write for 3 objects.\n[3] Add entitySensorMIBComplianceV02.\"\"\",\n            },\n            {\n                \"date\" : \"2000-06-20 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoEntitySensorMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalIndex\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"SensorDataType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"voltsAC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"voltsDC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"amperes\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"watts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"hertz\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"celsius\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"percentRH\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"rpm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"cmm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"truthvalue\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"specialEnum\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"dBm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"description\" :\n                \"\"\"sensor measurement data types.  valid values are:\nother(1):        a measure other than those listed below\nunknown(2):      unknown measurement, or \n                 arbitrary, relative numbers    \nvoltsAC(3):      electric potential\nvoltsDC(4):      electric potential\namperes(5):      electric current\nwatts(6):        power\nhertz(7):        frequency\ncelsius(8):      temperature\npercentRH(9):    percent relative humidity\nrpm(10):         shaft revolutions per minute\ncmm(11),:        cubic meters per minute (airflow)\ntruthvalue(12):  value takes { true(1), false(2) }\nspecialEnum(13): value takes user defined enumerated values\ndBm(14):         dB relative to 1mW of power\"\"\",\n        },\n        \"SensorDataScale\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"yocto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"zepto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"atto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"femto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"pico\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"nano\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"micro\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"milli\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"units\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"kilo\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"mega\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"giga\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"tera\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"exa\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"peta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"zetta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"yotta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"description\" :\n                \"\"\"International System of Units (SI) prefixes.\"\"\",\n        },\n        \"SensorPrecision\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"-8\",\n                \"max\" : \"9\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"-8\",\n                \"max\" : \"9\"\n            },\n            \"description\" :\n                \"\"\"When in the range 1 to 9, SensorPrecision is the number \nof decimal places in the fractional part of \na SensorValue fixed-point number.  When in the range -8 to\n-1, SensorPrecision is the number of accurate digits in \na SensorValue fixed-point number.\n\nSensorPrecision is 0 for non-fixed-point numbers.\n\nAgent implementors must choose a value for SensorPrecision \nso that the precision and accuracy of a SensorValue is \ncorrectly indicated.\n\nFor example, a temperature sensor that can measure 0o to \n100o C in 0.1o increments, +/- 0.05o, would have a \nSensorPrecision of 1, a SensorDataScale of units(0), and a \nSensorValue ranging from 0 to 1000.  \nThe SensorValue would be interpreted as (degrees C * 10).\n\nIf that temperature sensor's precision were 0.1o but its \naccuracy were only +/- 0.5o, then the SensorPrecision would \nbe 0. The SensorValue would be interpreted as degrees C.\n\nAnother example: a fan rotation speed sensor that measures RPM \nfrom 0 to 10,000 in 100 RPM increments, with an accuracy of \n+50/-37 RPM, would have a SensorPrecision of -2, a \nSensorDataScale of units(9), and a SensorValue ranging from 0 \nto 10000. The 10s and 1s digits of SensorValue would always \nbe 0.\"\"\",\n        },\n        \"SensorValue\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            \"description\" :\n                \"\"\"For sensors that measure voltsAC, voltsDC, \namperes, watts, hertz, celsius, cmm\nthis item is a fixed point number ranging from \n-999,999,999 to +999,999,999.  Use the value \n-1000000000 to indicate underflow. Use the value \n+1000000000 to indicate overflow.  Use SensorPrecision\nto indicate how many fractional digits the SensorValue\nhas.\n\n\nFor sensors that measure percentRH, this item\nis a number ranging from 0 to 100.\n\nFor sensors that measure rpm, this item\ncan take only nonnegative values, 0..999999999.\n\nFor sensors of type truthvalue, this item \ncan take only two values: true(1), false(2).\n\nFor sensors of type specialEnum, this item\ncan take any value in the range (-1000000000..1000000000),\nbut the meaning of each value is specific to the \nsensor.\n\nFor sensors of type other and unknown, \nthis item can take any value in the range \n(-1000000000..1000000000), but the meaning of the values \nare specific to the sensor.\n\nUse Entity-MIB entPhysicalTable.entPhysicalVendorType\nto learn about the sensor type.\"\"\",\n        },\n        \"SensorStatus\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unavailable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"nonoperational\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"Indicates the operational status of the sensor.\n\nok(1) means the agent can read the sensor \nvalue.\n\nunavailable(2) means that the agent presently \ncan not report the sensor value.\n\nnonoperational(3) means that the agent believes\nthe sensor is broken.  The sensor could have a \nhard failure (disconnected wire), or a soft failure\nsuch as out-of-range, jittery, or wildly fluctuating\nreadings.\"\"\",\n        },\n        \"SensorValueUpdateRate\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"999999999\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"999999999\"\n            },\n            \"description\" :\n                \"\"\"Indicates the interval in seconds between updates to the\nsensor's value.  \n\nThe value zero indicates:\n- the sensor value is updated on demand (when polled by the \n  agent for a get-request), \n- or when the sensor value changes (event-driven), \n- or the agent does not know the rate\"\"\",\n        },\n        \"SensorThresholdSeverity\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"minor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"major\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"critical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"description\" :\n                \"\"\"sensor threshold severity.  Valid values are:\n\nother(1)    : a severity other than those listed below.\nminor(10)   : Minor Problem threshold.\nmajor(20)   : Major Problem threshold.\ncritical(30): Critical problem threshold. A system might shut\n              down the sensor associated FRU automatically if\n              the sensor value reach the critical problem\n              threshold.\"\"\",\n        },\n        \"SensorThresholdRelation\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"lessThan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"lessOrEqual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"greaterThan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"greaterOrEqual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"equalTo\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"notEqualTo\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"sensor threshold relational operator types.  valid values are:\n\nlessThan(1):        if the sensor value is less than\n                    the threshold value\nlessOrEqual(2):     if the sensor value is less than or equal to\n                    the threshold value\ngreaterThan(3):     if the sensor value is greater than \n                    the threshold value\ngreaterOrEqual(4):  if the sensor value is greater than or equal\n                    to the threshold value\nequalTo(5):         if the sensor value is equal to\n                    the threshold value\nnotEqualTo(6):      if the sensor value is not equal to\n                    the threshold value\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoEntitySensorMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91\",\n            \"status\" : \"current\",\n        }, # node\n        \"entitySensorMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1\",\n        }, # node\n        \"entSensorValues\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1\",\n        }, # node\n        \"entSensorValueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the type, scale, and present value\nof a sensor listed in the Entity-MIB entPhysicalTable.\"\"\",\n        }, # table\n        \"entSensorValueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entSensorValueTable entry describes the \npresent reading of a sensor, the measurement units\nand scale, and sensor operational status.\"\"\",\n        }, # row\n        \"entSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorDataType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the type of data \nreported by the entSensorValue.\n\nThis variable is set by the agent at start-up\nand the value does not change during operation.\"\"\",\n        }, # column\n        \"entSensorScale\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorDataScale\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the exponent to apply\nto sensor values reported by entSensorValue.\n\nThis variable is set by the agent at start-up\nand the value does not change during operation.\"\"\",\n        }, # column\n        \"entSensorPrecision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorPrecision\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the number of decimal\nplaces of precision in fixed-point\nsensor values reported by entSensorValue.\n\nThis variable is set to 0 when entSensorType\nis not a fixed-point type:  voltsAC(1), voltsDC(2), \namperes(3), watts(4), hertz(5), celsius(6), or cmm(9).\n\nThis variable is set by the agent at start-up\nand the value does not change during operation.\"\"\",\n        }, # column\n        \"entSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable reports the most recent measurement seen\nby the sensor.\n\nTo correctly display or interpret this variable's value, \nyou must also know entSensorType, entSensorScale, and \nentSensorPrecision.\n\nHowever, you can compare entSensorValue with the threshold\nvalues given in entSensorThresholdTable without any semantic\nknowledge.\"\"\",\n        }, # column\n        \"entSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the present operational status\nof the sensor.\"\"\",\n        }, # column\n        \"entSensorValueTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the age of the value reported by \nentSensorValue\"\"\",\n        }, # column\n        \"entSensorValueUpdateRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorValueUpdateRate\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This variable indicates the rate that the agent\nupdates entSensorValue.\"\"\",\n        }, # column\n        \"entSensorMeasuredEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the physical entity for which the\nsensor is taking measurements.  For example, for a sensor\nmeasuring the voltage output of a power-supply, this object\nwould be the entPhysicalIndex of that power-supply; for a sensor\nmeasuring the temperature inside one chassis of a multi-chassis\nsystem, this object would be the enPhysicalIndex of that\nchassis.\n\nThis object has a value of zero when the physical entity\nfor which the sensor is taking measurements can not be\nrepresented by any one row in the entPhysicalTable, or that\nthere is no such physical entity.\"\"\",\n        }, # column\n        \"entSensorThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2\",\n        }, # node\n        \"entSensorThresholdTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the threshold severity, relation, and\ncomparison value, for a sensor listed in the Entity-MIB \nentPhysicalTable.\"\"\",\n        }, # table\n        \"entSensorThresholdEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"entSensorThresholdIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entSensorThresholdTable entry describes the \nthresholds for a sensor: the threshold severity,\nthe threshold value, the relation, and the \nevaluation of the threshold.\n\nOnly entities of type sensor(8) are listed in this table.\nOnly pre-configured thresholds are listed in this table.\n\nUsers can create sensor-value monitoring instruments\nin different ways, such as RMON alarms, Expression-MIB, etc.\n\nEntries are created by the agent at system startup and\nFRU insertion.  Entries are deleted by the agent at\nFRU removal.\"\"\",\n        }, # row\n        \"entSensorThresholdIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"99999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"99999999\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies an entry\nin the entSensorThresholdTable. This index\npermits the same sensor to have several \ndifferent thresholds.\"\"\",\n        }, # column\n        \"entSensorThresholdSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorThresholdSeverity\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable indicates the severity of this threshold.\"\"\",\n        }, # column\n        \"entSensorThresholdRelation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorThresholdRelation\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable indicates the relation between sensor value \n(entSensorValue) and threshold value (entSensorThresholdValue), \nrequired to trigger the alarm.  when evaluating the relation, \nentSensorValue is on the left of entSensorThresholdRelation, \nentSensorThresholdValue is on the right. \n\nin pseudo-code, the evaluation-alarm mechanism is:\n\n...\nif (entSensorStatus == ok) then\n    if (evaluate(entSensorValue, entSensorThresholdRelation,  \n        entSensorThresholdValue)) \n    then\n        if (entSensorThresholdNotificationEnable == true)) \n        then\n            raise_alarm(sensor's entPhysicalIndex);\n        endif\n    endif\nendif\n...\"\"\",\n        }, # column\n        \"entSensorThresholdValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENTITY-SENSOR-MIB\", \"name\" : \"SensorValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable indicates the value of the threshold.\n\nTo correctly display or interpret this variable's value, \nyou must also know entSensorType, entSensorScale, and \nentSensorPrecision.\n\nHowever, you can directly compare entSensorValue \nwith the threshold values given in entSensorThresholdTable \nwithout any semantic knowledge.\"\"\",\n        }, # column\n        \"entSensorThresholdEvaluation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable indicates the result of the most\nrecent evaluation of the threshold.  If the threshold\ncondition is true, entSensorThresholdEvaluation \nis true(1).  If the threshold condition is false, \nentSensorThresholdEvaluation is false(2).\n\nThresholds are evaluated at the rate indicated by \nentSensorValueUpdateRate.        \"\"\",\n        }, # column\n        \"entSensorThresholdNotificationEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable controls generation of \nentSensorThresholdNotification for this threshold.\n\nWhen this variable is 'true', generation of \nentSensorThresholdNotification is enabled for this\nthreshold. When this variable is 'false', \ngeneration of entSensorThresholdNotification is\ndisabled for this threshold.\"\"\",\n        }, # column\n        \"entSensorGlobalObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.3\",\n        }, # node\n        \"entSensorThreshNotifGlobalEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable enables the generation of\nentSensorThresholdNotification globally\non the device. If this object value is\n'false', then no entSensorThresholdNotification\nwill be generated on this device. If this object\nvalue is 'true', then whether a \nentSensorThresholdNotification for a threshold will\nbe generated or not depends on the instance value of\nentSensorThresholdNotificationEnable for that\nthreshold.\"\"\",\n        }, # scalar\n        \"entitySensorMIBNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.2\",\n        }, # node\n        \"entitySensorMIBNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.2.0\",\n        }, # node\n        \"entitySensorMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3\",\n        }, # node\n        \"entitySensorMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.1\",\n        }, # node\n        \"entitySensorMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"entSensorThresholdNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"entSensorThresholdValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The sensor value crossed the threshold \nlisted in entSensorThresholdTable.\n\nThis notification is generated once each time\nthe sensor value crosses the threshold.\n\nThe agent implementation guarantees prompt, timely\nevaluation of threshold and generation of this\nnotification.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"entitySensorValueGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entSensorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorScale\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorPrecision\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorValueTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorValueUpdateRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used\nto describe and monitor values of Entity-MIB \nentPhysicalTable entries of sensors.\"\"\",\n        }, # group\n        \"entitySensorThresholdGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entSensorThresholdSeverity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorThresholdRelation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorThresholdValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorThresholdEvaluation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entSensorThresholdNotificationEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used\nto describe and monitor thresholds for\nsensors.\"\"\",\n        }, # group\n        \"entitySensorThresholdNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entSensorThresholdNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"the collection of notifications used for\nmonitoring sensor threshold activity.\"\"\",\n        }, # group\n        \"entitySensorValueGroupSup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entSensorMeasuredEntity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to describe and track \nthe measured entities of ENTITY-MIB entPhysicalTable.\"\"\",\n        }, # group\n        \"entitySensorNotifCtrlGlobalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entSensorThreshNotifGlobalEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which provide the global\nnotification control on entSensorThresholdNotification.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"entitySensorMIBComplianceV01\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation that lists\nsensors in its entPhysicalTable must implement\nthis group.\"\"\",\n            \"requires\" : {\n                \"entitySensorValueGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entitySensorThresholdGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entitySensorThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"entitySensorMIBComplianceV02\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation that lists \nsensors in its entPhysicalTable must implement\nthis group.\"\"\",\n            \"requires\" : {\n                \"entitySensorThresholdGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entitySensorValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which don't\nsupport IETF version of ENTITY-SENSOR-MIB.\"\"\",\n                },\n                \"entitySensorThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which support\nentitySensorValueGroup group.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entSensorThresholdSeverity\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdRelation\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdValue\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"entitySensorMIBComplianceV03\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation that lists \nsensors in its entPhysicalTable must implement\nthis group.\"\"\",\n            \"requires\" : {\n                \"entitySensorThresholdGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entitySensorValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which don't\nsupport IETF version of ENTITY-SENSOR-MIB.\"\"\",\n                },\n                \"entitySensorThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which support\nentitySensorValueGroup group.\"\"\",\n                },\n                \"entitySensorValueGroupSup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which support\nthe correlation between sensor and its measured\nphysical entity.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entSensorThresholdSeverity\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdRelation\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdValue\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"entitySensorMIBComplianceV04\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.91.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An Entity-MIB implementation that lists \nsensors in its entPhysicalTable must implement\nthis group.\"\"\",\n            \"requires\" : {\n                \"entitySensorThresholdGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\"\n                },\n                \"entitySensorValueGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which don't\nsupport IETF version of ENTITY-SENSOR-MIB.\"\"\",\n                },\n                \"entitySensorThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which support\nentitySensorValueGroup group.\"\"\",\n                },\n                \"entitySensorValueGroupSup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the systems which support\nthe correlation between sensor and its measured\nphysical entity.\"\"\",\n                },\n                \"entitySensorNotifCtrlGlobalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the platforms which support\nglobal notification control on \nentSensorThresholdNotification.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entSensorThresholdSeverity\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdRelation\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n                \"entSensorThresholdValue\" : {\n                    \"module\" : \"CISCO-ENTITY-SENSOR-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\" Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-ENVMON-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-ENVMON-MIB\n\nFILENAME = \"./CISCO-ENVMON-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-ENVMON-MIB\",\n\n    \"CISCO-ENVMON-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"       Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module to describe the status of the Environmental\nMonitor on those devices which support one.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2003-12-01 00:00\",\n                \"description\" :\n                    \"\"\"Added c37xx (13) and other (14) as values for \nciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2003-11-25 00:00\",\n                \"description\" :\n                    \"\"\"Added ciscoEnvMonMIBMiscNotifGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2002-10-15 00:00\",\n                \"description\" :\n                    \"\"\"Added c7600(12) as values for ciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2002-07-17 00:00\",\n                \"description\" :\n                    \"\"\"Added optional groups ciscoEnvMonEnableStatChangeGroup\nand ciscoEnvMonStatChangeNotifGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2002-02-04 00:00\",\n                \"description\" :\n                    \"\"\"Added osr7600(11) as values \nfor ciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2001-08-30 00:00\",\n                \"description\" :\n                    \"\"\"Added c10000(10) as values for ciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2001-08-16 00:00\",\n                \"description\" :\n                    \"\"\"Added cat4000(9) as values for ciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2001-05-07 00:00\",\n                \"description\" :\n                    \"\"\"Added cat6000(7),ubr7200(8) \nas values for ciscoEnvMonPresent\"\"\",\n            },\n            {\n                \"date\" : \"2000-01-31 00:00\",\n                \"description\" :\n                    \"\"\"Add notFunctioning to CiscoEnvMonState.\"\"\",\n            },\n            {\n                \"date\" : \"1998-10-22 00:00\",\n                \"description\" :\n                    \"\"\"Renamed enumerated value internalRPS(5) as \ninternalRedundant(5) and added description for\nciscoEnvMonSupplySource enumerated values.\"\"\",\n            },\n            {\n                \"date\" : \"1998-08-05 00:00\",\n                \"description\" :\n                    \"\"\"Add enumerated value internalRPS(5) to \nciscoEnvMonSupplySource.\"\"\",\n            },\n            {\n                \"date\" : \"1996-11-12 00:00\",\n                \"description\" :\n                    \"\"\"Add monitoring support for c3600 series router\"\"\",\n            },\n            {\n                \"date\" : \"1995-08-15 00:00\",\n                \"description\" :\n                    \"\"\"Specify a correct (non-negative) range for several\nindex objects.\"\"\",\n            },\n            {\n                \"date\" : \"1995-03-13 00:00\",\n                \"description\" :\n                    \"\"\"Miscellaneous changes including monitoring support\nfor c7000 series redundant power supplies.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoEnvMonMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"CiscoEnvMonState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"normal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"warning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"critical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"shutdown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"notPresent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"notFunctioning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"Represents the state of a device being monitored.\nValid values are:\n\nnormal(1):         the environment is good, such as low\n                   temperature.\n\nwarning(2):        the environment is bad, such as temperature\n                   above normal operation range but not too\n                   high.\n\ncritical(3):       the environment is very bad, such as\n                   temperature much higher than normal\n                   operation limit.\n\nshutdown(4):       the environment is the worst, the system\n                   should be shutdown immediately.\n\nnotPresent(5):     the environmental monitor is not present,\n                   such as temperature sensors do not exist.\n\nnotFunctioning(6): the environmental monitor does not \n                   function properly, such as a temperature\n                   sensor generates a abnormal data like\n                   1000 C.\"\"\",\n        },\n        \"CiscoSignedGauge\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the current value of an entity, as a signed \ninteger.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoEnvMonMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoEnvMonObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1\",\n        }, # node\n        \"ciscoEnvMonPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"oldAgs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ags\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"c7000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ci\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cAccessMon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"cat6000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ubr7200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"cat4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"c10000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"osr7600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"c7600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"c37xx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of environmental monitor located in the chassis.\nAn oldAgs environmental monitor card is identical to an ags\nenvironmental card except that it is not capable of supplying\ndata, and hence no instance of the remaining objects in this\nMIB will be returned in response to an SNMP query.  Note that\nonly a firmware upgrade is required to convert an oldAgs into\nan ags card.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonVoltageStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of voltage status maintained by the environmental\nmonitor.\"\"\",\n        }, # table\n        \"ciscoEnvMonVoltageStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ciscoEnvMonVoltageStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the voltage status table, representing the status\nof the associated testpoint maintained by the environmental\nmonitor.\"\"\",\n        }, # row\n        \"ciscoEnvMonVoltageStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index for the testpoint being instrumented.\nThis index is for SNMP purposes only, and has no\nintrinsic meaning.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageStatusDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the testpoint being instrumented.\nThis description is a short textual label, suitable as a\nhuman-sensible identification for the rest of the\ninformation in the entry.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageStatusValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENVMON-MIB\", \"name\" : \"CiscoSignedGauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"The current measurement of the testpoint being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageThresholdLow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"The lowest value that the associated instance of the object\nciscoEnvMonVoltageStatusValue may obtain before an emergency\nshutdown of the managed device is initiated.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageThresholdHigh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"The highest value that the associated instance of the object\nciscoEnvMonVoltageStatusValue may obtain before an emergency\nshutdown of the managed device is initiated.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageLastShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"The value of the associated instance of the object\nciscoEnvMonVoltageStatusValue at the time an emergency\nshutdown of the managed device was last initiated.  This\nvalue is stored in non-volatile RAM and hence is able to\nsurvive the shutdown.\"\"\",\n        }, # column\n        \"ciscoEnvMonVoltageState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENVMON-MIB\", \"name\" : \"CiscoEnvMonState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the testpoint being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of ambient temperature status maintained by the\nenvironmental monitor.\"\"\",\n        }, # table\n        \"ciscoEnvMonTemperatureStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ciscoEnvMonTemperatureStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the ambient temperature status table, representing\nthe status of the associated testpoint maintained by the\nenvironmental monitor.\"\"\",\n        }, # row\n        \"ciscoEnvMonTemperatureStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index for the testpoint being instrumented.\nThis index is for SNMP purposes only, and has no\nintrinsic meaning.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureStatusDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the testpoint being instrumented.\nThis description is a short textual label, suitable as a\nhuman-sensible identification for the rest of the\ninformation in the entry.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureStatusValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"degrees Celsius\",\n            \"description\" :\n                \"\"\"The current measurement of the testpoint being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"degrees Celsius\",\n            \"description\" :\n                \"\"\"The highest value that the associated instance of the\nobject ciscoEnvMonTemperatureStatusValue may obtain\nbefore an emergency shutdown of the managed device is\ninitiated.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureLastShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"degrees Celsius\",\n            \"description\" :\n                \"\"\"The value of the associated instance of the object\nciscoEnvMonTemperatureStatusValue at the time an emergency\nshutdown of the managed device was last initiated.  This\nvalue is stored in non-volatile RAM and hence is able to\nsurvive the shutdown.\"\"\",\n        }, # column\n        \"ciscoEnvMonTemperatureState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENVMON-MIB\", \"name\" : \"CiscoEnvMonState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the testpoint being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonFanStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of fan status maintained by the environmental\nmonitor.\"\"\",\n        }, # table\n        \"ciscoEnvMonFanStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ciscoEnvMonFanStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the fan status table, representing the status of\nthe associated fan maintained by the environmental monitor.\"\"\",\n        }, # row\n        \"ciscoEnvMonFanStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index for the fan being instrumented.\nThis index is for SNMP purposes only, and has no\nintrinsic meaning.\"\"\",\n        }, # column\n        \"ciscoEnvMonFanStatusDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the fan being instrumented.\nThis description is a short textual label, suitable as a\nhuman-sensible identification for the rest of the\ninformation in the entry.\"\"\",\n        }, # column\n        \"ciscoEnvMonFanState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENVMON-MIB\", \"name\" : \"CiscoEnvMonState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the fan being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonSupplyStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of power supply status maintained by the\nenvironmental monitor card.\"\"\",\n        }, # table\n        \"ciscoEnvMonSupplyStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ciscoEnvMonSupplyStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the power supply status table, representing the\nstatus of the associated power supply maintained by the\nenvironmental monitor card.\"\"\",\n        }, # row\n        \"ciscoEnvMonSupplyStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index for the power supply being instrumented.\nThis index is for SNMP purposes only, and has no\nintrinsic meaning.\"\"\",\n        }, # column\n        \"ciscoEnvMonSupplyStatusDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the power supply being instrumented.\nThis description is a short textual label, suitable as a\nhuman-sensible identification for the rest of the\ninformation in the entry.\"\"\",\n        }, # column\n        \"ciscoEnvMonSupplyState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-ENVMON-MIB\", \"name\" : \"CiscoEnvMonState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the power supply being instrumented.\"\"\",\n        }, # column\n        \"ciscoEnvMonSupplySource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"externalPowerSupply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"internalRedundant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power supply source.\nunknown - Power supply source unknown\nac      - AC power supply\ndc      - DC power supply\nexternalPowerSupply - External power supply\ninternalRedundant - Internal redundant power supply \"\"\",\n        }, # column\n        \"ciscoEnvMonAlarmContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"minorVisual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"majorVisual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalVisual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorAudible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorAudible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"criticalAudible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Each bit is set to reflect the respective\nalarm being set.  The bit will be cleared\nwhen the respective alarm is cleared.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonMIBNotificationEnables\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2\",\n        }, # node\n        \"ciscoEnvMonEnableShutdownNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable  indicates  whether  the  system\nproduces the ciscoEnvMonShutdownNotification.  A false \nvalue will prevent shutdown notifications \nfrom being generated by this system.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonEnableVoltageNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable  indicates  whether  the  system\nproduces the ciscoEnvMonVoltageNotification. A false \nvalue will prevent voltage notifications from being \ngenerated by this system. This object is deprecated\nin favour of ciscoEnvMonEnableStatChangeNotif.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonEnableTemperatureNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable  indicates  whether  the  system\nproduces the ciscoEnvMonTemperatureNotification.\nA false value prevents temperature notifications \nfrom being sent by  this entity. This object is \ndeprecated in favour of \nciscoEnvMonEnableStatChangeNotif.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonEnableFanNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable  indicates  whether  the  system\nproduces the ciscoEnvMonFanNotification.\nA false value prevents fan notifications \nfrom being sent by  this entity. This object is \ndeprecated in favour of \nciscoEnvMonEnableStatChangeNotif.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonEnableRedundantSupplyNotification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable  indicates  whether  the  system\nproduces the ciscoEnvMonRedundantSupplyNotification. \nA false value prevents redundant supply notifications\nfrom being generated by this system. This object is\ndeprecated in favour of \nciscoEnvMonEnableStatChangeNotif.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonEnableStatChangeNotif\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This variable indicates whether the system\nproduces the ciscoEnvMonVoltStatusChangeNotif,\nciscoEnvMonTempStatusChangeNotif, \nciscoEnvMonFanStatusChangeNotif and  \nciscoEnvMonSuppStatusChangeNotif. A false value will \nprevent these notifications from being generated by \nthis system.\"\"\",\n        }, # scalar\n        \"ciscoEnvMonMIBNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3\",\n        }, # node\n        \"ciscoEnvMonMIBNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0\",\n        }, # node\n        \"ciscoEnvMonMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4\",\n        }, # node\n        \"ciscoEnvMonMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.1\",\n        }, # node\n        \"ciscoEnvMonMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"ciscoEnvMonShutdownNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonShutdownNotification is sent if the environmental\nmonitor detects a testpoint reaching a critical state\nand is about to initiate a shutdown.  This notification \ncontains no objects so that it may be encoded and sent in the\nshortest amount of time possible.  Even so, management\napplications should not rely on receiving such a notification\nas it may not be sent before the shutdown completes.\"\"\",\n        }, # notification\n        \"ciscoEnvMonVoltageNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.2\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"ciscoEnvMonVoltageStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonVoltageNotification is sent if the voltage \nmeasured at a given testpoint is outside the normal range \nfor the testpoint (i.e. is at the warning, critical, or\nshutdown stage).  Since such a notification is usually \ngenerated before the shutdown state is reached, it can \nconvey more data and has a better chance of being sent \nthan does the ciscoEnvMonShutdownNotification.\nThis notification is deprecated in favour of\nciscoEnvMonVoltStatusChangeNotif.\"\"\",\n        }, # notification\n        \"ciscoEnvMonTemperatureNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.3\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"ciscoEnvMonTemperatureStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonTemperatureNotification is sent if the \ntemperature measured at a given testpoint is outside \nthe normal range for the testpoint (i.e. is at the warning, \ncritical, or shutdown stage).  Since such a Notification \nis usually generated before the shutdown state is reached,\nit can convey more data and has a better chance of being\nsent than does the ciscoEnvMonShutdownNotification.\nThis notification is deprecated in favour of \nciscoEnvMonTempStatusChangeNotif.\"\"\",\n        }, # notification\n        \"ciscoEnvMonFanNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.4\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"ciscoEnvMonFanStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonFanNotification is sent if any one of\nthe fans in the fan array (where extant) fails. \nSince such a notification is usually generated before \nthe shutdown state is reached, it can convey more \ndata and has a better chance of being sent\nthan does the ciscoEnvMonShutdownNotification.\nThis notification is deprecated in favour of\nciscoEnvMonFanStatusChangeNotif.\"\"\",\n        }, # notification\n        \"ciscoEnvMonRedundantSupplyNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.5\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"ciscoEnvMonSupplyStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonRedundantSupplyNotification is sent if\nthe redundant power supply (where extant) fails. \nSince such a notification is usually generated before \nthe shutdown state is reached, it can convey more \ndata and has a better chance of being sent\nthan does the ciscoEnvMonShutdownNotification.\nThis notification is deprecated in favour of \nciscoEnvMonSuppStatusChangeNotif.\"\"\",\n        }, # notification\n        \"ciscoEnvMonVoltStatusChangeNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ciscoEnvMonVoltageStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonVoltStatusChangeNotif is sent if there is \nchange in the state of a device being monitored\nby ciscoEnvMonVoltageState.\"\"\",\n        }, # notification\n        \"ciscoEnvMonTempStatusChangeNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ciscoEnvMonTemperatureStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonTempStatusChangeNotif is sent if there \nis change in the state of a device being monitored\nby ciscoEnvMonTemperatureState.\"\"\",\n        }, # notification\n        \"ciscoEnvMonFanStatusChangeNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ciscoEnvMonFanStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonFanStatusChangeNotif is sent if there \nis change in the state of a device being monitored\nby ciscoEnvMonFanState.\"\"\",\n        }, # notification\n        \"ciscoEnvMonSuppStatusChangeNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.3.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ciscoEnvMonSupplyStatusDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ciscoEnvMonSupplyStatChangeNotif is sent if there \nis change in the state of a device being monitored\nby ciscoEnvMonSupplyState.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"ciscoEnvMonMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ciscoEnvMonPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageThresholdLow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageThresholdHigh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageLastShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureLastShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplySource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonAlarmContacts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableShutdownNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableVoltageNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableTemperatureNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableFanNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableRedundantSupplyNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing environmental \nmonitoring capability to a cisco chassis. This group \nis deprecated in favour of ciscoEnvMonMIBGroupRev.\"\"\",\n        }, # group\n        \"ciscoEnvMonMIBGroupRev\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoEnvMonPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageStatusValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageThresholdLow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageThresholdHigh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageLastShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonVoltageState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureStatusValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureLastShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyStatusDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplyState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSupplySource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonAlarmContacts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableShutdownNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing environmental \nmonitoring capability to a cisco chassis.\"\"\",\n        }, # group\n        \"ciscoEnvMonEnableStatChangeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoEnvMonEnableStatChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing enabling/disabling\nof the status change notifications for environmental \nmonitoring.\"\"\",\n        }, # group\n        \"ciscoEnvMonMIBNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoEnvMonShutdownNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A notification group providing shutdown notification\nfor environmental monitoring. \"\"\",\n        }, # group\n        \"ciscoEnvMonStatChangeNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoEnvMonVoltStatusChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTempStatusChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanStatusChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonSuppStatusChangeNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications providing the status \nchange for environmental monitoring.\"\"\",\n        }, # group\n        \"ciscoEnvMonMIBMiscNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.2.6\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ciscoEnvMonVoltageNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonTemperatureNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonFanNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonRedundantSupplyNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of various notifications for the \nenviromental monitoring mib module. The notifications\nthe group and the group are both in deprecated state.\nThe notifications in the group were deprecated in \nfavour of notifications in\nciscoEnvMonStatChangeNotifGroup.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoEnvMonMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Environmental Monitor MIB. This is\ndeprecated and new compliance\nciscoEnvMonMIBComplianceRev1 is added.\"\"\",\n            \"requires\" : {\n                \"ciscoEnvMonMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoEnvMonMIBComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-ENVMON-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.13.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Environmental Monitor MIB.\"\"\",\n            \"requires\" : {\n                \"ciscoEnvMonMIBGroupRev\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonMIBNotifGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-ENVMON-MIB\"\n                },\n                \"ciscoEnvMonEnableStatChangeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENVMON-MIB\",\n                    \"description\" :\n                        \"\"\"The ciscoEnvMonEnableStatChangeGroup is optional. \nThis group is applicable for implementations which\nneed status change notifications for environmental\nmonitoring.\"\"\",\n                },\n                \"ciscoEnvMonStatChangeNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-ENVMON-MIB\",\n                    \"description\" :\n                        \"\"\"The ciscoEnvMonStatChangeNotifGroup is optional. \nThis group is applicable for implementations which\nneed status change notifications for environmental\nmonitoring.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-HSRP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-HSRP-MIB\n\nFILENAME = \"CISCO-HSRP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-HSRP-MIB\",\n\n    \"CISCO-HSRP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-hsrp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module provides a means to monitor and configure\nthe Cisco IOS proprietary Hot Standby Router Protocol\n(HSRP). Cisco HSRP protocol is defined in RFC2281.\n\nTerminology:\n\nHSRP is a protocol used amoung a group of routers for the\npurpose of selecting an 'active router' and a 'standby\nrouter'.\n\nAn 'active router' is the router of choice for routing\npackets.\n\nA 'standby router' is a router that takes over the routing\nduties when an active router fails, or when preset\nconditions have been met.\n\nAn 'HSRP group' or a 'standby group' is a set of routers\nwhich communicate using HSRP. An HSRP group has a group MAC\naddress and a group Virtual IP address. These are the\ndesignated addresses. The active router assumes (i.e.\ninherits) these group addresses.\n\n'Hello' messages are sent to indicate that a router is\nrunning and is capable of becoming the active or standby\nrouter.\n\n'Hellotime' is the interval between successive HSRP Hello\nmessages from a given router.\n\n'Holdtime' is the interval between the receipt of a Hello\nmessage and the presumption that the sending router has\nfailed.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2010-09-06 00:00\",\n                \"description\" :\n                    \"\"\"The following changes have been made.\n\n[1] Objects cHsrpGrpIpNone has been added to the\n     cHsrpGrpTable.\n\n[2] Added new object group cHsrpGrpGroupSup\n\n\n[3] Added new compliance cHsrpComplianceRev2, which\n    deprecates cHsrpComplianceRev1.\"\"\",\n            },\n            {\n                \"date\" : \"2005-12-20 00:00\",\n                \"description\" :\n                    \"\"\"Deprecated cHsrpCompliance and added cHsrpComplianceRev1\nto include cHsrpNotificationsGroup; Updated the imports\nsuch that Unsigned32 is imported from SNMPv2-SMI instead\nof CISCO-TC, and other clean-up.\"\"\",\n            },\n            {\n                \"date\" : \"1998-08-03 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoHsrpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"HsrpState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"initial\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"learn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"listen\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"speak\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"standby\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"active\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"The current state of the HSRP protocol for a given\nHSRP group entry.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoHsrpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoHsrpMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1\",\n        }, # node\n        \"cHsrpGlobalConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.1\",\n        }, # node\n        \"cHsrpConfigTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The amount of time in minutes a row in cHsrpGrpTable can\nremain in a state other than active before being timed out.\"\"\",\n        }, # scalar\n        \"cHsrpGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2\",\n        }, # node\n        \"cHsrpGrpTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing information on each HSRP group\nfor each interface.\"\"\",\n        }, # table\n        \"cHsrpGrpEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"cHsrpGrpNumber\",\n            ],\n            \"description\" :\n                \"\"\"Information about an HSRP group. Management applications\nuse cHsrpGrpRowStatus to control entry modification,\ncreation and deletion.\n\nSetting cHsrpGrpRowStatus to 'active' causes the router to\ncommunicate using HSRP.\n\nThe value of cHsrpGrpRowStatus may be set to 'destroy' at\nany time.\n\nEntries may not be created via SNMP without explicitly \nsetting cHsrpGrpRowStatus to either 'createAndGo' or \n'createAndWait'.\n\nEntries can be created and modified via the management \nprotocol or by the device's local management interface.\n\nA management application wishing to create an entry should\nchoose the ifIndex of the interface which is to be added\nas part of an HSRP group. Also, a cHsrpGrpNumber should\nbe chosen. A group number is unique only amongst the groups \non a particular interface. The value of the group number\nappears in packets which are transmitted and received on a \nLAN segment to which the router is connected. The application\nmust select the group number as explained in the description\nfor cHsrpGrpNumber.\n\nIf the row is not active, and a local management interface\ncommand modifies that row, the row may transition to active\nstate.\n\nA row which is not in active state will timeout after a\nconfigurable period (five minutes by default). This timeout \nperiod can be changed by setting cHsrpConfigTimeout.\"\"\",\n        }, # row\n        \"cHsrpGrpNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object along with the ifIndex of a particular interface\nuniquely identifies an HSRP group.\n\nGroup numbers 0,1 and 2 are the only valid group numbers\nfor TokenRing interfaces. For other media types, numbers\nrange from 0 to 255. Each interface has its own set of group\nnumbers. There's no relationship between the groups\nconfigured on different interfaces. Using a group number\non one interface doesn't preclude using the same group\nnumber on a different interface. For example, there can be\na group 1 on an Ethernet and a group 1 on Token Ring. More\ndetails can be found from RFC 2281.\"\"\",\n        }, # column\n        \"cHsrpGrpAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"cisco\",\n            \"description\" :\n                \"\"\"This is an unencrypted authentication string which is\ncarried in all HSRP messages. An authentication string\nmismatch prevents a router interface from learning the\ndesignated IP address or HSRP timer values from\nother HSRP-enabled routers with the same group number.\n\nThe function of this object is not to supply any sort of\nsecurity-like authentication but rather to confirm that\nwhat's happening is what's intended. In other words, this\nis meant for sanity checking only.\"\"\",\n        }, # column\n        \"cHsrpGrpPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"100\",\n            \"description\" :\n                \"\"\"The cHsrpGrpPriority helps to select the active and the\nstandby routers. The router with the highest priority is\nselected as the active router. In the priority range of 0\nto 255, 0 is the lowest priority and 255 is the highest\npriority.\n\nIf two (or more) routers in a group have the same priority,\nthe one with the highest ip address of the interface is the\nactive router. When the active router fails to send a Hello\nmessage within a configurable period of time, the standby\nrouter with the highest priority becomes the active\nrouter.\n\nA router with highest priority will only attempt to\noverthrow a lower priority active router if it is\nconfigured to preempt.  But, if there is more than one\nrouter which is not active, the highest priority non-active\nrouter becomes the standby router.\"\"\",\n        }, # column\n        \"cHsrpGrpPreempt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object, if TRUE, indicates that the current router\nshould attempt to overthrow a lower priority active router\nand attempt to become the active router. If this object is\nFALSE, the router will become the active router only if\nthere is no such router (or if an active router fails).\"\"\",\n        }, # column\n        \"cHsrpGrpPreemptDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This delay is the time difference between a router power\nup and the time it can actually start preempting the\ncurrently active router.\n\nWhen a router first comes up, it doesn't have a complete\nrouting table. If it's configured to preempt, then it will\nbecome the Active router, but it will not be able to\nprovide adequate routing services. The solution to this is\nto allow for a configurable delay before the router\nactually preempts the currently active router.\"\"\",\n        }, # column\n        \"cHsrpGrpUseConfiguredTimers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"HSRP routers learn a group's Hellotime or Holdtime from\nhello messages.\n\nThe Hellotime is used to determine the frequency of\ngenerating hello messages when this router becomes the\nactive or standby router. The Holdtime is the interval\nbetween the receipt of a Hello message and the presumption\nthat the sending router has failed.\n\nIf this object is TRUE, the cHsrpGrpConfiguredHelloTime and\ncHsrpGrpConfiguredHoldTime will be used. If it is FALSE,\nthe Hellotime and Holdtime values are learned.\"\"\",\n        }, # column\n        \"cHsrpGrpConfiguredHelloTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"If cHsrpGrpUseConfiguredTimers is true,\ncHsrpGrpConfiguredHelloTime is used when this router is an\nactive router. Otherwise, the Hellotime learned from the\ncurrent active router is used. All routers on a particular\nLAN segment must use the same Hellotime.\"\"\",\n        }, # column\n        \"cHsrpGrpConfiguredHoldTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"10000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"If cHsrpGrpUseConfiguredTimers is true,\ncHsrpGrpConfiguredHoldTime is used when this router is an\nactive router. Otherwise, the Holdtime learned from the\ncurrent active router is used. All routers on a particular\nLAN segment should use the same Holdtime. Also, the\nHoldtime should be at least three times the value of the\nHellotime and must be greater than the Hellotime.\"\"\",\n        }, # column\n        \"cHsrpGrpLearnedHelloTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"3000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"If the Hellotime is not configured on a router, it can be\nlearned from the Hello messages from active router,\nprovided the Hello message is authenticated. If the\nHellotime is not learned from a Hello message from the\nactive router and it is not manually configured, a default\nvalue of 3 seconds is recommended.\"\"\",\n        }, # column\n        \"cHsrpGrpLearnedHoldTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"10000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"If the Holdtime is not configured on a router, it can be\nlearned from the Hello message from the active router.\nHoldtime should be learned only if the Hello message is\nauthenticated. If the Holdtime is not learned and it is\nnot manually configured, a default value of 10 seconds is \nrecommended.\"\"\",\n        }, # column\n        \"cHsrpGrpVirtualIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"This is the primary virtual IP address used by this\ngroup.  If this address is configured (i.e a non zero ip\naddress), this value is used. Otherwise, the agent will\nattempt to discover the virtual address through a discovery\nprocess (which scans the hello messages).\"\"\",\n        }, # column\n        \"cHsrpGrpUseConfigVirtualIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this object is TRUE, cHsrpGrpVirtualIpAddr was a\nconfigured one. Otherwise, it indicates that \ncHsrpGrpVirtualIpAddr was a learned one.\"\"\",\n        }, # column\n        \"cHsrpGrpActiveRouter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Ip Address of the currently active router for this group.\"\"\",\n        }, # column\n        \"cHsrpGrpStandbyRouter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Ip Address of the currently standby router for this\ngroup.\"\"\",\n        }, # column\n        \"cHsrpGrpStandbyState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-HSRP-MIB\", \"name\" : \"HsrpState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current HSRP state of this group on this interface.\"\"\",\n        }, # column\n        \"cHsrpGrpVirtualMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mac Addresses used are as specified in RFC 2281. For\nethernet and fddi interfaces, a MAC address will be in the\nrange 00:00:0c:07:ac:00 through 00:00:0c:07:ac:ff. The last\noctet is the hexadecimal equivalent of cHsrpGrpNumber\n(0-255).\n\nSome Ethernet and FDDI interfaces allow a unicast MAC\naddress for each HSRP group. Certain Ethernet\nchipsets(LANCE Ethernet, VGANYLAN and QUICC Ethernet) only\nsupport a single Unicast Mac Address. In this case, only\none HSRP group is allowed.\n\nFor TokenRing interfaces, the following three MAC \naddresses are permitted (functional addresses):\n             C0:00:00:01:00:00\n             C0:00:00:02:00:00\n             C0:00:00:04:00:00.\"\"\",\n        }, # column\n        \"cHsrpGrpEntryRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control that allows modification, creation, and\ndeletion of entries.  For detailed rules see the\nDESCRIPTION for cHsrpGrpEntry.\"\"\",\n        }, # column\n        \"cHsrpGrpIpNone\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.1.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object specifies the disable HSRP IPv4 virtual\nIP address.\"\"\",\n        }, # column\n        \"cHsrpMIBNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.2\",\n        }, # node\n        \"cHsrpMIBNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.2.0\",\n        }, # node\n        \"cHsrpConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3\",\n        }, # node\n        \"cHsrpCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.1\",\n        }, # node\n        \"cHsrpComplianceGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cHsrpStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cHsrpGrpStandbyState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cHsrpStateChange notification is sent when a\ncHsrpGrpStandbyState transitions to either active or\nstandby state, or leaves active or standby state. There\nwill be only one notification issued when the state change\nis from standby to active and vice versa.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cHsrpConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cHsrpConfigTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to set global\nconfiguration objects for the HSRP MIB.\"\"\",\n        }, # group\n        \"cHsrpGrpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cHsrpGrpAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpPreempt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpPreemptDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpUseConfiguredTimers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpConfiguredHelloTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpConfiguredHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpLearnedHelloTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpLearnedHoldTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpVirtualIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpUseConfigVirtualIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpActiveRouter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpStandbyRouter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpStandbyState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpVirtualMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpEntryRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to add, delete and retrieve\ninformation about HSRP groups.\"\"\",\n        }, # group\n        \"cHsrpNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cHsrpStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of notifications used to indicate HSRP\nstate information.\"\"\",\n        }, # group\n        \"cHsrpGrpGroupSup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cHsrpGrpIpNone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to add, delete and retrieve\ninformation about HSRP groups.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cHsrpCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for all hosts implementing\nthe CISCO-HSRP-MIB.\"\"\",\n            \"requires\" : {\n                \"cHsrpConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"cHsrpComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The object group is deprecated by the cHsrpComplianceRev2\"\"\",\n            \"requires\" : {\n                \"cHsrpConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"cHsrpComplianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-HSRP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.106.3.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for all hosts implementing\nthe CISCO-HSRP-MIB.\"\"\",\n            \"requires\" : {\n                \"cHsrpConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpGrpGroupSup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n                \"cHsrpNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-HSRP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-IETF-IP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python CISCO-IETF-IP-MIB\n\nFILENAME = \"/home/magnusme/mibs/v2/CISCO-IETF-IP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n\n    \"CISCO-IETF-IP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"        Cisco Systems\nCustomer Service\n\nPostal: 170 West Tasman Drive\nSan Jose, CA 95134\nUSA\n\nPhone: +1 800 553-NETS\n\nEmail: cs-ipv6@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for managing IP and ICMP implementations,\nbut excluding the management of IP routes.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2002-03-04 00:00\",\n                \"description\" :\n                    \"\"\"The initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoIetfIpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoExperiment\"},\n    ),\n\n    \"typedefs\" : {\n        \"Ipv6AddrIfIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model IPv6 address\ninterface identifiers. This is a binary string\nof up to 8 octets in network byte-order.\"\"\",\n        },\n        \"ScopeId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A Scope Identifier identifies an instance of a specific\nscope.\n\nThe scope identifier MUST disambiguate identical address\nvalues. For link-local addresses, the scope identifier\nwill typically be the interface index (ifIndex as\ndefined in the IF-MIB) of the interface on which the\naddress is configured.\n\nThe scope identifier may contain the special value 0\nwhich refers to the default scope. The default scope\nmay be used in cases where the valid scope identifier\nis not known (e.g., a management application needs to\nwrite a site-local InetAddressIPv6 address without\nknowing the site identifier value). The default scope\nSHOULD NOT be used as an easy way out in cases where\nthe scope identifier for a non-global IPv6 address is\nknown.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoIetfIpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoIetfIpMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1\",\n        }, # node\n        \"cIp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1\",\n        }, # node\n        \"cIpAddressPfxTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Inet prefix table.\"\"\",\n        }, # table\n        \"cIpAddressPfxEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cIpAddressPfxIfIndex\",\n                \"cIpAddressPfxType\",\n                \"cIpAddressPfxPfx\",\n                \"cIpAddressPfxLength\",\n            ],\n            \"description\" :\n                \"\"\"Inet prefix entry.\"\"\",\n        }, # row\n        \"cIpAddressPfxIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The interface on which this prefix is configured.\"\"\",\n        }, # column\n        \"cIpAddressPfxType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of cIpAddressPfxPfx.  Only IPv4 and IPv6\naddresses are expected.\"\"\",\n        }, # column\n        \"cIpAddressPfxPfx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address prefix.  Bits after cIpAddressPfxLength\nmust be zero.\"\"\",\n        }, # column\n        \"cIpAddressPfxLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The prefix length associated with this prefix.\"\"\",\n        }, # column\n        \"cIpAddressPfxOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wellknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"routeradv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The origin of this prefix.  manual(2) indicates a prefix\nthat was manually configured.  wellknown(3) indicates a\nwell-known prefix, e.g. 169.254/16 for IPv4\nautoconfiguration or fe80::/10 for IPv6 link-local\naddresses.  dhcp(4) indicates a prefix that was assigned\nby a DHCP server.  routeradv(5) indicates a prefix\nlearned from a router advertisement.\"\"\",\n        }, # column\n        \"cIpAddressPfxOnLinkFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value 'true(1)', if this prefix\ncan be used  for on-link determination and the value\n'false(2)' otherwise.\"\"\",\n        }, # column\n        \"cIpAddressPfxAutonomousFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Autonomous address configuration flag. When true(1),\nindicates that this prefix can be used for autonomous\naddress configuration (i.e. can be used to form a local\ninterface address).  If false(2), it is not used to\nautoconfigure a local interface address.\"\"\",\n        }, # column\n        \"cIpAddressPfxAdvPfdLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The length of time in seconds that this prefix will\nremain preferred, i.e. time until deprecation.  A\nvalue of 4,294,967,295 represents infinity.\n\nThe address generated from a deprecated prefix should no\nlonger be used as a source address in new communications,\nbut packets received on such an interface are processed\nas expected.\"\"\",\n        }, # column\n        \"cIpAddressPfxAdvValidLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The length of time in seconds that this prefix will\nremain valid, i.e. time until invalidation.  A value of\n4,294,967,295 represents infinity.\n\nThe address generated from an invalidated prefix should\nnot appear as the destination or source address of a\npacket.\"\"\",\n        }, # column\n        \"cIpAddressTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Inet address table.\"\"\",\n        }, # table\n        \"cIpAddressEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cIpAddressAddrType\",\n                \"cIpAddressAddr\",\n            ],\n            \"description\" :\n                \"\"\"Inet addr entry.\"\"\",\n        }, # row\n        \"cIpAddressAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of cIpAddressAddr.\"\"\",\n        }, # column\n        \"cIpAddressAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP address to which this entry's addressing\ninformation pertains.\"\"\",\n        }, # column\n        \"cIpAddressIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index value which uniquely identifies the interface\nto which this entry is applicable.  The interface\nidentified by a particular value of this index is the\nsame interface as identified by the same value of the\nIF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"cIpAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"anycast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of address.  broadcast(3) is not a valid value\nfor IPv6 addresses.\"\"\",\n        }, # column\n        \"cIpAddressPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A pointer to the row in the prefix table to which this\naddress belongs.  May be { 0 0 } if there is no such\nrow.\"\"\",\n        }, # column\n        \"cIpAddressOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wellknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"linklayer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"random\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The origin of the address.  manual(2) indicates that the\naddress was manually configured.  wellknown(3) indicates\nan address constructed from a well-known value, e.g. an\nIANA-assigned anycast address.  dhcp(4) indicates an\naddress that was assigned to this system by a DHCP\nserver.  linklayer(5) indicates an address created by\nIPv6 stateless autoconfiguration.  random(6) indicates\nan address chosen by random, e.g. an IPv4 address within\n169.254/16, or an RFC 3041 privacy address.\"\"\",\n        }, # column\n        \"cIpAddressStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"preferred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"deprecated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inaccessible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tentative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"duplicate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Address status.  The preferred(1) state indicates that\nthis is a valid address that can appear as the\ndestination or source address of a packet. The\ndeprecated(2) state indicates that this is a valid but\ndeprecated address that should no longer be used as a\nsource address in new communications, but packets\naddressed to such an address are processed as expected.\nThe invalid(3) state indicates that this is not valid\naddress which should not appear as the destination or\nsource address of a packet. The inaccessible(4) state\nindicates that the address is not accessible because\nthe interface to which this address is assigned is not\noperational. The tentative(6) state indicates the\nuniqueness of the address on the link is being verified.\nThe duplicate(7) state indicates the address has been\ndetermined to be non-unique on the link and so must not\nbe used.\n\nIn the absence of other information, an IPv4 address is\nalways preferred(1).\"\"\",\n        }, # column\n        \"cInetNetToMediaTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IP Address Translation table used for mapping from IP\naddresses to physical addresses.\n\nThe Address Translation tables contain the IP address to\n'physical' address equivalences.  Some interfaces do not\nuse translation tables for determining address\nequivalences (e.g., DDN-X.25 has an algorithmic method);\nif all interfaces are of this type, then the Address\nTranslation table is empty, i.e., has zero entries.\"\"\",\n        }, # table\n        \"cInetNetToMediaEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"cInetNetToMediaNetAddressType\",\n                \"cInetNetToMediaNetAddress\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains one IP address to `physical' address\nequivalence.\"\"\",\n        }, # row\n        \"cInetNetToMediaNetAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of cInetNetToMediaNetAddress.\"\"\",\n        }, # column\n        \"cInetNetToMediaNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"36\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP Address corresponding to the media-dependent\n`physical' address.\"\"\",\n        }, # column\n        \"cInetNetToMediaPhysAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The media-dependent `physical' address.\"\"\",\n        }, # column\n        \"cInetNetToMediaLastUpdated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this entry was last\nupdated.  If this entry was updated prior to the last re-\ninitialization of the local network management subsystem,\nthen this object contains a zero value.\"\"\",\n        }, # column\n        \"cInetNetToMediaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of mapping.\n\nSetting this object to the value invalid(2) has the\neffect of invalidating the corresponding entry in the\ncInetNetToMediaTable.  That is, it effectively\ndisassociates the interface identified with said entry\nfrom the mapping identified with said entry.  It is an\nimplementation-specific matter as to whether the agent\nremoves an invalidated entry from the table. \nAccordingly, management stations must be prepared to\nreceive tabular information from agents that corresponds\nto entries not currently in use.  Proper interpretation\nof such entries requires examination of the relevant\ncInetNetToMediaType object.\n\nThe 'dynamic(3)' type indicates that the IP address to\nphysical addresses mapping has been dynamically resolved\nusing e.g. IPv4 ARP or the IPv6 Neighbor Discovery\nprotocol.\n\nThe 'static(4)' type indicates that the mapping has been\nstatically configured.  The 'local(5)' type indicates\nthat the mapping is provided for an entity's own\ninterface address.\"\"\",\n        }, # column\n        \"cInetNetToMediaState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reachable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stale\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"probe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Neighbor Unreachability Detection [3] state for the\ninterface when the address mapping in this entry is used.\nIf Neighbor Unreachability Detection is not in use (e.g.\nfor IPv4), this object is always unknown(6).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC2461\"\"\",\n        }, # column\n        \"cIpv6ScopeIdTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table used to describe IPv6 unicast and multicast\nscope zones.\"\"\",\n        }, # table\n        \"cIpv6ScopeIdEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cIpv6ScopeIdIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains the list of scope identifiers on a\ngiven interface.\"\"\",\n        }, # row\n        \"cIpv6ScopeIdIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The interface to which these scopes belong.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdLinkLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for the link-local scope on this\ninterface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdSubnetLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for the subnet-local scope on this\ninterface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdAdminLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for the admin-local scope on this\ninterface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdSiteLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for the site-local scope on this\ninterface.\"\"\",\n        }, # column\n        \"cIpv6ScopeId6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope 6 on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeId7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope 7 on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdOrganizationLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for the orgainzation-local scope on\nthis interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeId9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope 9 on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope A on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope B on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope C on this interface.\"\"\",\n        }, # column\n        \"cIpv6ScopeIdD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.1.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"ScopeId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Scope Identifier for scope D on this interface.\"\"\",\n        }, # column\n        \"cIpv6\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2\",\n        }, # node\n        \"cIpv6Forwarding\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether this entity is acting as an\nIPv6 router in respect to the forwarding of datagrams\nreceived by, but not addressed to, this entity.  IPv6\nrouters forward datagrams.  IPv6 hosts do not (except\nthose source-routed via the host).\"\"\",\n        }, # scalar\n        \"cIpv6DefaultHopLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default value inserted into the Hop Limit field of\nthe IPv6 header of datagrams originated at this entity,\nwhenever a Hop Limit value is not supplied by the\ntransport layer protocol.\"\"\",\n        }, # scalar\n        \"cIpv6InterfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing per-interface IPv6-specific\ninformation.\"\"\",\n        }, # table\n        \"cIpv6InterfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cIpv6InterfaceIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing IPv6-specific information for a given\ninterface.\"\"\",\n        }, # row\n        \"cIpv6InterfaceIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The interface for which this row contains IPv6-specific\ninformation.\"\"\",\n        }, # column\n        \"cIpv6InterfaceEffectiveMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"octets\",\n            \"description\" :\n                \"\"\"The size of the largest IPv6 packet which can be\nsent/received on the interface, specified in octets.\"\"\",\n        }, # column\n        \"cIpv6InterfaceReasmMaxSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"octets\",\n            \"description\" :\n                \"\"\"The size of the largest IPv6 datagram which this entity\ncan re-assemble from incoming IPv6 fragmented datagrams\nreceived on this interface.\"\"\",\n        }, # column\n        \"cIpv6InterfaceIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-IETF-IP-MIB\", \"name\" : \"Ipv6AddrIfIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Interface Identifier for this interface that is (at\nleast) unique on the link this interface is attached to.\nThe Interface Identifier is combined with an address\nprefix to form an interface address. \n\nBy default, the Interface Identifier is autoconfigured\naccording to the rules of the link type this interface is\nattached to.\"\"\",\n        }, # column\n        \"cIpv6InterfaceIdentifierLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The length of the Interface Identifier in bits.\"\"\",\n        }, # column\n        \"cIpv6InterfacePhysicalAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface's physical address. For example, for an\nIPv6 interface attached to an 802.x link, this object\nnormally contains a MAC address. Note that in some\ncases this address may differ from the address of the\ninterface's protocol sub-layer.  The interface's\nmedia-specific MIB must define the bit and byte\nordering and the format of the value of this object.\nFor interfaces which do not have such an address\n(e.g., a serial line), this object should contain\nan octet string of zero length.\"\"\",\n        }, # column\n        \"cIcmp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3\",\n        }, # node\n        \"cInetIcmpTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of generic ICMP counters.  These counters may\nbe kept per-interface and/or system-wide.\"\"\",\n        }, # table\n        \"cInetIcmpEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cInetIcmpAFType\",\n                \"cInetIcmpIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row in the inetIcmpTable.\n\nA row with an inetIcmpIfIndex value of zero indicates a\nsystem-wide value; a row with a non-zero inetIcmpIfIndex\nindicates an interface-specific value.  A system may\nprovide both system-wide and interface-specific values,\nin which case it is important to note that the\nsystem-wide value may not be equal to the sum of the\ninterface-specific value across all interfaces due to\ne.g. dynamic interface creation/deletion.\"\"\",\n        }, # row\n        \"cInetIcmpAFType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP address family of the statistics.\"\"\",\n        }, # column\n        \"cInetIcmpIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ifindex of the interface, or zero for system-wide\nstats.\"\"\",\n        }, # column\n        \"cInetIcmpInMsgs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages which the entity\nreceived. Note that this counter includes all those\ncounted by cInetIcmpInErrors.\"\"\",\n        }, # column\n        \"cInetIcmpInErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages which the entity received but\ndetermined as having ICMP-specific errors (bad ICMP\nchecksums, bad length, etc.).\"\"\",\n        }, # column\n        \"cInetIcmpOutMsgs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages which the entity\nreceived. Note that this counter includes all those\ncounted by inetIcmpOutErrors.\"\"\",\n        }, # column\n        \"cInetIcmpOutErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages which this entity did not\nsend due to problems discovered within ICMP such as a\nlack of buffers.  This value should not include errors\ndiscovered  outside the ICMP layer such as the inability\nof IP to route the resultant datagram.  In some\nimplementations there may be no types of error which\ncontribute to this counter's value.\"\"\",\n        }, # column\n        \"cInetIcmpMsgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of per-message ICMP counters.  These counters\nmay be kept per-interface and/or system-wide.\"\"\",\n        }, # table\n        \"cInetIcmpMsgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cInetIcmpMsgAFType\",\n                \"cInetIcmpMsgIfIndex\",\n                \"cInetIcmpMsgType\",\n                \"cInetIcmpMsgCode\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row in the inetIcmpMsgTable.\n\nA row with an inetIcmpMsgIfIndex value of zero indicates\na system-wide value; a row with a non-zero\ncInetIcmpMsgIfIndex indicates an interface-specific\nvalue.  A system may provide both system-wide and\ninterface-specific values, in which case it is important\nto note that the system-wide value may not be equal to\nthe sum of the interface-specific values across all\ninterfaces due to e.g. dynamic interface\ncreation/deletion.\n\nIf the system keeps track of individual ICMP code values\n(e.g.  destination unreachable, code administratively\nprohibited), it creates several rows for each\ninetIcmpMsgType, each with an appropriate value of\ncInetIcmpMsgCode.  A row with the special value of\ncInetIcmpMsgCode, 256, counts all packets with type\ncInetIcmpMsgType that aren't counted in rows with a value\nof cInetIcmpMsgCode other than 256.\"\"\",\n        }, # row\n        \"cInetIcmpMsgAFType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP address family of the statistics.\"\"\",\n        }, # column\n        \"cInetIcmpMsgIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ifindex of the interface, or zero for system-wide\nstats.\"\"\",\n        }, # column\n        \"cInetIcmpMsgType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ICMP type field of the message type being counted by\nthis row.\"\"\",\n        }, # column\n        \"cInetIcmpMsgCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ICMP code field of the message type being counted by\nthis row, or the special value 256 if no specific ICMP\ncode is counted by this row.\"\"\",\n        }, # column\n        \"cInetIcmpMsgInPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input packets for this AF, ifindex, type,\ncode.\"\"\",\n        }, # column\n        \"cInetIcmpMsgOutPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.1.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output packets for this AF, ifindex, type,\ncode.\"\"\",\n        }, # column\n        \"ciscoIpMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2\",\n        }, # node\n        \"ciscoIpMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.1\",\n        }, # node\n        \"ciscoIpMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"ciscoIpAddressPfxGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cIpAddressPfxOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressPfxOnLinkFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressPfxAutonomousFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressPfxAdvPfdLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressPfxAdvValidLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The ip version independent address prefix group of entries\nproviding for basic management of IP prefixes.\"\"\",\n        }, # group\n        \"ciscoIpAddressGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cIpAddressIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressPrefix\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpAddressStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The ip version independent address group of entries\nproviding for basic management of IP addresses.\"\"\",\n        }, # group\n        \"ciscoInetNetToMediaGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cInetNetToMediaPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetNetToMediaLastUpdated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetNetToMediaType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetNetToMediaState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of entries providing IP address to physical\naddress mapping.\"\"\",\n        }, # group\n        \"ciscoInetIcmpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cInetIcmpInMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetIcmpInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetIcmpOutMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetIcmpOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of entries providing version independent\nper-interface ICMP specific counters.\"\"\",\n        }, # group\n        \"ciscoInetIcmpMsgGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cInetIcmpMsgInPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cInetIcmpMsgOutPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of entries providing version independent\nper-interface ICMP msg type specific counters.\"\"\",\n        }, # group\n        \"ciscoIpv6GeneralGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cIpv6Forwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6DefaultHopLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The IPv6 group of objects providing for basic\nmanagement of IPv6 entities.\"\"\",\n        }, # group\n        \"ciscoIpv6InterfaceGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cIpv6InterfaceEffectiveMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6InterfaceReasmMaxSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6InterfaceIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6InterfaceIdentifierLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6InterfacePhysicalAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The IPv6 group of objects providing IPv6 interface\nspecific statistics.\"\"\",\n        }, # group\n        \"ciscoIpv6ScopeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cIpv6ScopeIdLinkLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdSubnetLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdAdminLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdSiteLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeId6\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeId7\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdOrganizationLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeId9\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdB\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdC\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"cIpv6ScopeIdD\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for managing IPv6 scope zones.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoIpMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-IETF-IP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.10.86.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for systems which implement\nIPv6 OR IPv4.\"\"\",\n            \"requires\" : {\n                \"ciscoIpAddressPfxGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"ciscoIpAddressGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"ciscoInetNetToMediaGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"ciscoInetIcmpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"ciscoInetIcmpMsgGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\"\n                },\n                \"ciscoIpv6GeneralGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only when IPv6 is implemented\non the system.\"\"\",\n                },\n                \"ciscoIpv6InterfaceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only when IPv6 is implemented\non the system.\"\"\",\n                },\n                \"ciscoIpv6ScopeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-IETF-IP-MIB\",\n                    \"description\" :\n                        \"\"\"The group is mandatory onle when IPv6 scoped architecture\nhas been implemented on the system.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-MEMORY-POOL-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-QOS-PIB-MIB\n\nFILENAME = \"CISCO-QOS-PIB-MIB\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n\n    \"CISCO-QOS-PIB-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\n    San Jose, CA 95134\n    USA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-wbu@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The Cisco QOS Policy PIB for provisioning QOS policy.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2007-08-29 00:00\",\n                \"description\" :\n                    \"\"\"Add new enum values in QosInterfaceQueueType\ntextual convention for various queue type.\"\"\",\n            },\n            {\n                \"date\" : \"2004-05-03 00:00\",\n                \"description\" :\n                    \"\"\"Add new enum value in QosInterfaceQueueType\ntextual convention for 1p3q8t queue type.\"\"\",\n            },\n            {\n                \"date\" : \"2003-02-21 00:00\",\n                \"description\" :\n                    \"\"\"Add new enum values in QosInterfaceQueueType\ntextual convention to indicate queue types\ncontaining priority queue. Add new enum value\nin ThresholdSetRange textual convention for\nzero threshold.\"\"\",\n            },\n            {\n                \"date\" : \"2002-05-02 00:00\",\n                \"description\" :\n                    \"\"\"Fix the SYNTAX of Role and RoleCombination.\"\"\",\n            },\n            {\n                \"date\" : \"2000-06-16 00:00\",\n                \"description\" :\n                    \"\"\"Added QosInterfaceTypeCapabilities textual convention.\"\"\",\n            },\n            {\n                \"date\" : \"2000-05-11 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this PIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoQosPIBMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoPibToMib\"},\n    ),\n\n    \"typedefs\" : {\n        \"Dscp\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"63\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"63\"\n            },\n            \"description\" :\n                \"\"\"An integer that is in the range of the DiffServ codepoint\nvalues.\"\"\",\n        },\n        \"QosLayer2Cos\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"7\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"An integer that is in the range of the layer 2 CoS values.\nThis corresponds to the 802.1p and ISL CoS values.\"\"\",\n        },\n        \"QueueRange\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"oneQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"twoQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"threeQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"fourQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"eightQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"sixteenQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"thirtyTwoQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"sixtyFourQ\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"64\"\n            },\n            \"description\" :\n                \"\"\"An integer that is limited to the number of queues per\ninterface supported by the PIB.  Limited to 64 which is the\nnumber of codepoints.\"\"\",\n        },\n        \"ThresholdSetRange\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"zeroT\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"oneT\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"twoT\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"fourT\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"eightT\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"An integer that is limited to the number of threshold sets\nper queue supported by the PIB. A threshold set is a\ncollection of parameters describing queue threshold.  The\nparameters of a threshold set depend on the drop mechanism the\nqueue implements.  For example, the threshold set for\ntail-drop  comprises a single parameter, the percentage of\nqueue size at which dropping occurs.  The threshold set for\nWRED comprises two parameters; within the range of the two\nparameters packets are randomly dropped.\"\"\",\n        },\n        \"Percent\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            \"description\" :\n                \"\"\"An integer that is in the range of a percent value.\"\"\",\n        },\n        \"QosInterfaceQueueType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"oneQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"oneQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"oneQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"oneQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"twoQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"twoQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"twoQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"twoQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"threeQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"threeQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"threeQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"threeQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"fourQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"fourQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"fourQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"fourQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"eightQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"eightQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"eightQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"eightQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"sixteenQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"sixteenQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"sixteenQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"sixtyfourQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"sixtyfourQ2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"sixtyfourQ4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"oneP1Q0t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"oneP1Q4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"oneP1Q8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"oneP2Q1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"oneP2Q2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"oneP3Q1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"oneP7Q8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"oneP3Q8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"sixteenQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"oneP15Q8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"oneP15Q1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"oneP7Q1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"oneP31Q1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"thirtytwoQ1t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"thirtytwoQ8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"oneP31Q8t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"oneP7Q4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"oneP3Q4t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"oneP7Q2t\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"description\" :\n                \"\"\"An enumerated type for all the known interface types.  The\ninterface types are currently limited to a predefined\ncombination of queues and thresholds such that the product of\nqueues and thresholds does not exceed 64 (i.e., the total\nnumber of DSCPs.\"\"\",\n        },\n        \"QosInterfaceTypeCapabilities\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"unspecified\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"inputL2Classification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"inputIpClassification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"outputL2Classification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"outputIpClassification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"inputUflowPolicing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"inputAggregatePolicing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"outputUflowPolicing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"outputAggregatePolicing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"policeByMarkingDown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"policeByDropping\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"fifo\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"wrr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"wfq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"cq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"pq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"cbwfq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"tailDrop\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"wred\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"inputPortClassification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"outputPortClassification\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"inputUflowShaping\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"inputAggregateShaping\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"outputUflowShaping\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"outputAggregateShaping\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"pqWrr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"pqCbwfq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"description\" :\n                \"\"\"An enumeration of interface capabilities.  Used by the PDP to\nselect policies and configuration to push to the PEP.\"\"\",\n        },\n        \"RoleCombination\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"A Display string consisting of a set of roles concatenated\nwith a '+' character where the roles are in lexicographic\norder from minimum to maximum.\"\"\",\n        },\n        \"PolicyInstanceId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A textual convention for an attribute that is an an\nunsigned integer index attribute of class.  It is used for\nattributes that exist for the purpose of providing an integer\nindex of an instance.\n\nFor any integer index that refers to another policy instance,\nthat other policy instance must exist. Furthermore, it is an\nerror to try to delete a policy instance that is referred to by\nanother instance without first deleting the referring\ninstance.\"\"\",\n        },\n        \"Unsigned64\" : {\n            \"basetype\" : \"Unsigned64\",\n            \"status\" : \"current\",\n            \"parent module\" : {\n                \"name\" : \"SNMPv2-SMI\",\n                \"type\" : \"Counter64\",\n            },\n            \"description\" :\n                \"\"\"An unsigned 64 bit integer. We use SYNTAX Counter64 for the\nenconding rules.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoQosPIBMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"qosPIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1\",\n        }, # node\n        \"qosPIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.1\",\n        }, # node\n        \"qosPIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2\",\n        }, # node\n        \"qosDeviceConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2\",\n        }, # node\n        \"qosDevicePibIncarnationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This class contains a single policy instance that identifies\nthe current incarnation of the PIB and the PDP that installed\nthis incarnation.  The instance of this class is reported to\nthe PDP at client connect time so that the PDP can (attempt\nto) ascertain the current state of the PIB.\"\"\",\n        }, # table\n        \"qosDevicePibIncarnationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosDeviceIncarnationId\",\n            ],\n            \"description\" :\n                \"\"\"The single policy instance of this class identifies the\ncurrent incarnation of the PIB and the PDP that installed\nthis incarnation.\"\"\",\n        }, # row\n        \"qosDeviceIncarnationId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosDevicePdpName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the PDP that installed the current incarnation of\nthe PIB into the device.  By default it is the zero length\nstring.\"\"\",\n        }, # column\n        \"qosDevicePibIncarnation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An octet string to identify the current incarnation.  It has\nmeaning to the PDP that installed the PIB and perhaps its\nstandby PDPs. By default the empty string.\"\"\",\n        }, # column\n        \"qosDevicePibTtl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of seconds after a client close or TCP timeout for\nwhich the PEP continues to enforce the policy in the PIB.\nAfter this interval, the PIB is consired expired and the\ndevice no longer enforces the policy installed in the PIB.\"\"\",\n        }, # column\n        \"qosDeviceAttributeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The single instance of this class indicates specific\nattributes of the device.  These include configuration values\nsuch as the configured PDP addresses, the maximum message\nsize, and specific device capabilities.  The latter include\ninput port-based and output port-based classification and/or\npolicing, support for flow based policing, aggregate based\npolicing, traffic shaping capabilities, etc.\"\"\",\n        }, # table\n        \"qosDeviceAttributeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosDeviceAttributeId\",\n            ],\n            \"description\" :\n                \"\"\"The single instance of this class indicates specific\nattributes of the device.\"\"\",\n        }, # row\n        \"qosDeviceAttributeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosDevicePepDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The QoS domain that this device belongs to.  This is\nconfigured locally on the device (perhaps by some management\nprotocol such as SNMP).  By default, it is the zero-length\nstring.\"\"\",\n        }, # column\n        \"qosDevicePrimaryPdp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the PDP configured to be the primary PDP for\nthe device.\"\"\",\n        }, # column\n        \"qosDeviceSecondaryPdp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the PDP configured to be the secondary PDP for\nthe device.  An address of zero indicates no secondary is\nconfigured.\"\"\",\n        }, # column\n        \"qosDeviceMaxMessageSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum size message that this PEP is capable of\nreceiving in bytes.  A value of zero means that the maximum\nmessage size is unspecified (but does not mean it is\nunlimited).  A message greater than this maximum results in a\nMessageTooBig error on a 'no commit' REP.\"\"\",\n        }, # column\n        \"qosDeviceCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"unspecified\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"layer2Cos\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ipPrecedence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dscp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An enumeration of device capabilities.  Used by the PDP to\nselect policies and configuration to push to the PEP.\"\"\",\n        }, # column\n        \"qosInterfaceTypeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This class describes the interface types of the interfaces\nthat exist on the device.  It includes the queue type, role\ncombination and capabilities of interfaces.  The PEP does not\nreport which specific interfaces have which characteristics.\"\"\",\n        }, # table\n        \"qosInterfaceTypeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosInterfaceTypeId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class describes a role combination for\nan interface type of an interface that exists on the device.\"\"\",\n        }, # row\n        \"qosInterfaceTypeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosInterfaceQueueType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosInterfaceQueueType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface type in terms of number of queues and\nthresholds.\"\"\",\n        }, # column\n        \"qosInterfaceTypeRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A combination of roles on at least one interface of type\nqosInterfaceType.\"\"\",\n        }, # column\n        \"qosInterfaceTypeCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosInterfaceTypeCapabilities\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An enumeration of interface capabilities.  Used by the PDP to\nselect policies and configuration to push to the PEP.\"\"\",\n        }, # column\n        \"qosDomainConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3\",\n        }, # node\n        \"qosDiffServMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Maps each DSCP to a marked-down DSCP.  Also maps each DSCP to\nan IP precedence and QosLayer2Cos.  When configured for the\nfirst time, all 64 entries of the table must be\nspecified. Thereafter, instances may be modified (with a\ndelete and install in a single decision) but not deleted\nunless all instances are deleted.\"\"\",\n        }, # table\n        \"qosDiffServMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosDscp\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class represents mappings from a DSCP.\"\"\",\n        }, # row\n        \"qosDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A DSCP for which this entry contains mappings.\"\"\",\n        }, # column\n        \"qosMarkedDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DSCP to use instead of the qosDscp when the packet is out\nof profile and hence marked as such.\"\"\",\n        }, # column\n        \"qosL2Cos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosLayer2Cos\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The L2 CoS value to use when mapping this DSCP to layer 2\nCoS.\"\"\",\n        }, # column\n        \"qosCosToDscpTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Maps each of eight CoS values to a DSCP.  When configured for\nthe first time, all 8 entries of the table must be\nspecified. Thereafter, instances may be modified (with a\ndelete and install in a single decision) but not deleted\nunless all instances are deleted.\"\"\",\n        }, # table\n        \"qosCosToDscpEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosCosToDscpCos\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class maps a CoS value to a DSCP.\"\"\",\n        }, # row\n        \"qosCosToDscpCos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosLayer2Cos\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The L2 CoS value that is being mapped.\"\"\",\n        }, # column\n        \"qosCosToDscpDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DSCP value to use when mapping the L2 CoS to a DSCP.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4\",\n        }, # node\n        \"qosUnmatchedPolicyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A policy class that specifies what QoS to apply to a packet\nthat does not match any other policy configured for this role\ncombination for a particular direction of traffic.\"\"\",\n        }, # table\n        \"qosUnmatchedPolicyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosUnmatchedPolicyId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the unmatched policy\nfor a particular role combination for incoming or outgoing\ntraffic.\"\"\",\n        }, # row\n        \"qosUnmatchedPolicyId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicyRole\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Role combination for which this instance applies.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicyDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"in\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"out\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The direction of packet flow at the interface in question to\nwhich this instance applies.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicyDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DSCP to classify the unmatched packet with.  This must be\nspecified even if qosUnmatchedPolicyDscpTrusted is true.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicyDscpTrusted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this attribute is true, then the Dscp associated with the\npacket is trusted, i.e., it is assumed to have already been\nset.  In this case, the Dscp is not rewritten with\nqosUnmatchedPolicyDscp (qosUnmatchedPolicyDscp is ignored)\nunless this is a non-IP packet and arrives untagged.  The\npacket is still policed as part of its micro flow and its\naggregate flow.\n\nWhen a trusted action is applied to an input interface, the\nDscp (for an IP packet) or CoS (for a non-IP packet)\nassociated with the packet is the one contained in the packet.\nWhen a trusted action is applied to an output interface, the\nDscp associated with the packet is the one that is the result\nof the input classification and policing.\"\"\",\n        }, # column\n        \"qosUnmatchPolMicroFlowPolicerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the instance of policer to apply to\nunmatched packets.  It must correspond to the integer index of\nan instance of class qosPolicerTable or be zero.  If zero, the\nmicroflow is not policed.\"\"\",\n        }, # column\n        \"qosUnmatchedPolicyAggregateId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the aggregate that the packet belongs\nto.  It must correspond to the integer index of an instance of\nclass qosAggregateTable or be zero.  If zero, the microflow\ndoes not belong to any aggregate and is not policed as part of\nany aggregate.\"\"\",\n        }, # column\n        \"qosPolicer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5\",\n        }, # node\n        \"qosPolicerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class specifying policing parameters for both microflows\nand aggregate flows.  This table is designed for policing\naccording to a token bucket scheme where an average rate and\nburst size is specified.\"\"\",\n        }, # table\n        \"qosPolicerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosPolicerId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies a set of policing\nparameters.\"\"\",\n        }, # row\n        \"qosPolicerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosPolicerRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Unsigned64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The token rate.  It is specified in units of bit/s. A rate of\nzero means that all packets will be out of profile.  If the\nqosPolicerAction is set to drop then this effectively\ndenies any service to packets policed by this policer.\"\"\",\n        }, # column\n        \"qosPolicerNormalBurst\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The normal size of a burst in terms of bits.\"\"\",\n        }, # column\n        \"qosPolicerExcessBurst\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The excess size of a burst in terms of bits.\"\"\",\n        }, # column\n        \"qosPolicerAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"drop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"mark\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shape\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of how to handle out of profile packets.  When\nthe shape action is chosen then traffic is shaped to the rate\nspecified by qosPolicerRate.\"\"\",\n        }, # column\n        \"qosAggregateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Instances of this class identify aggregate flows and the\npolicer to apply to each.\"\"\",\n        }, # table\n        \"qosAggregateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosAggregateId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the policer to apply to\nan aggregate flow.\"\"\",\n        }, # row\n        \"qosAggregateId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosAggregatePolicerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the instance of policer to apply to the\naggregate.  It must correspond to the integer index of an\ninstance of class qosPolicerTable.\"\"\",\n        }, # column\n        \"qosMacQos\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6\",\n        }, # node\n        \"qosMacClassificationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class of MAC/Vlan tuples and their associated CoS values.\"\"\",\n        }, # table\n        \"qosMacClassificationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosMacClassificationId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the mapping of a VLAN\nand a MAC address to a CoS value.\"\"\",\n        }, # row\n        \"qosMacClassificationId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosDstMacVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VLAN of the destination MAC address of the L2 frame.\"\"\",\n        }, # column\n        \"qosDstMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The destination MAC address of the L2 frame.\"\"\",\n        }, # column\n        \"qosDstMacCos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosLayer2Cos\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CoS to assign the packet with the associated MAC/VLAN\ntuple.  Note that this CoS is overridden by the policies to\nclassify the frame at layer 3 if there are any.\"\"\",\n        }, # column\n        \"qosIpQos\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7\",\n        }, # node\n        \"qosIpAceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"ACE definitions.\"\"\",\n        }, # table\n        \"qosIpAceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIpAceId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies an ACE.\"\"\",\n        }, # row\n        \"qosIpAceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIpAceDstAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address to match against the packet's destination IP\naddress.\"\"\",\n        }, # column\n        \"qosIpAceDstAddrMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A mask for the matching of the destination IP address.\"\"\",\n        }, # column\n        \"qosIpAceSrcAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address to match against the packet's source IP\naddress.\"\"\",\n        }, # column\n        \"qosIpAceSrcAddrMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A mask for the matching of the source IP address.\"\"\",\n        }, # column\n        \"qosIpAceDscpMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum value that the DSCP in the packet can have and\nmatch this ACE.\"\"\",\n        }, # column\n        \"qosIpAceDscpMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum value that the DSCP in the packet can have and\nmatch this ACE.\"\"\",\n        }, # column\n        \"qosIpAceProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP protocol to match against the packet's protocol.\nA value of zero means match all.\"\"\",\n        }, # column\n        \"qosIpAceDstL4PortMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum value that the packet's layer 4 dest port number\ncan have and match this ACE.\"\"\",\n        }, # column\n        \"qosIpAceDstL4PortMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum value that the packet's layer 4 dest port number\ncan have and match this ACE.\"\"\",\n        }, # column\n        \"qosIpAceSrcL4PortMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum value that the packet's layer 4 source port\nnumber can have and match this ACE.\"\"\",\n        }, # column\n        \"qosIpAceSrcL4PortMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum value that the packet's layer 4 source port\nnumber can have and match this ACE.\"\"\",\n        }, # column\n        \"qosIpAcePermit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the packet matches this ACE and the value of this attribute\nis true, then the matching process terminates and the QoS\nassociated with this ACE (indirectly through the ACL) is\napplied to the packet.  If the value of this attribute is false,\nthen no more ACEs in this ACL are compared to this packet and\nmatching continues with the first ACE of the next ACL.\"\"\",\n        }, # column\n        \"qosIpAclDefinitionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class that defines a set of ACLs each being an ordered list\nof ACEs.\"\"\",\n        }, # table\n        \"qosIpAclDefinitionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIpAclDefinitionId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies an ACE in an ACL and its\norder with respect to other ACEs in the same ACL.\"\"\",\n        }, # row\n        \"qosIpAclDefinitionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIpAclId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index for this ACL.  There will be one instance of\npolicy class qosIpAclDefinition with this integer index for\neach ACE in the ACL per role combination.\"\"\",\n        }, # column\n        \"qosIpAceOrder\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integer that determines the position of this ACE in the ACL.\nAn ACE with a given order is positioned in the access contol\nlist before one with a higher order.\"\"\",\n        }, # column\n        \"qosIpAclDefAceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the ACE in the qosIpAceTable that is\nin the ACL specified by qosIpAclId at the position specified\nby qosIpAceOrder.\"\"\",\n        }, # column\n        \"qosIpAclActionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class that applies a set of ACLs to interfaces specifying,\nfor each interface the order of the ACL with respect to other\nACLs applied to the same interface and, for each ACL the\naction to take for a packet that matches a permit ACE in that\nACL.  Interfaces are specified abstractly in terms of\ninterface role combinations.\"\"\",\n        }, # table\n        \"qosIpAclActionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIpAclActionId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class applies an ACL to traffic in a\nparticular direction on an interface with a particular role\ncombination, and specifies the action for packets which match\nthe ACL.\"\"\",\n        }, # row\n        \"qosIpAclActionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIpAclActAclId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ACL associated with this action.\"\"\",\n        }, # column\n        \"qosIpAclInterfaceRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interfaces to which this ACL applies specified in terms\nof a set of roles.\"\"\",\n        }, # column\n        \"qosIpAclInterfaceDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"in\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"out\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The direction of packet flow at the interface in question to\nwhich this ACL applies.\"\"\",\n        }, # column\n        \"qosIpAclOrder\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An integer that determines the order of this ACL in the list\nof ACLs applied to interfaces of the specified role\ncombination. An ACL with a given order is positioned in the\nlist before one with a higher order.\"\"\",\n        }, # column\n        \"qosIpAclDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DSCP to classify the packet with in the event that the\npacket matches an ACE in this ACL and the ACE is a permit.\"\"\",\n        }, # column\n        \"qosIpAclDscpTrusted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this attribute is true, then the Dscp associated with\nthe packet is trusted, i.e., it is assumed to have already\nbeen set.  In this case, the Dscp is not rewritten with\nqosIpAclDscp (qosIpAclDscp is ignored).  The packet is still\npoliced as part of its micro flow and its aggregate flow.\n\nWhen a trusted action is applied to an input interface, the\nDscp associated with the packet is the one contained in the\npacket.  When a trusted action is applied to an output\ninterface, the Dscp associated with the packet is the one that\nis the result of the input classification and policing.\"\"\",\n        }, # column\n        \"qosIpAclMicroFlowPolicerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the instance of policer to apply to the\nmicroflow.  It must correspond to the integer index of an\ninstance of class qosPolicerTableor be zero.  If zero, the\nmicroflow is not policed.\"\"\",\n        }, # column\n        \"qosIpAclAggregateId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.7.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the aggregate that the packet belongs\nto.  It must correspond to the integer index of an instance of\nclass qosAggregateTable or be zero.  If zero, the microflow\ndoes not belong to any aggregate and is not policed as part of\nany aggregate.\"\"\",\n        }, # column\n        \"qosIfParameters\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8\",\n        }, # node\n        \"qosIfSchedulingPreferencesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This class specifies the scheduling preference an interface\nchooses if it supports multiple scheduling types.  Higher\nvalues are preferred over lower values.\"\"\",\n        }, # table\n        \"qosIfSchedulingPreferenceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfSchedulingPreferenceId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies a scheduling preference\nfor a queue-type on an interface with a particular role\ncombination.\"\"\",\n        }, # row\n        \"qosIfSchedulingPreferenceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfSchedulingRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The combination of roles the interface must have for this\npolicy instance to apply to that interface.\"\"\",\n        }, # column\n        \"qosIfSchedulingPreference\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The preference to use this scheduling discipline and queue\ntype.  A higher value means a higher preference.  If two\ndisciplines have the same preference the choice is a local\ndecision.\"\"\",\n        }, # column\n        \"qosIfSchedulingDiscipline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"weightedFairQueueing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"weightedRoundRobin\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"customQueueing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"priorityQueueing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"classBasedWFQ\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fifo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"pqWrr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"pqCbwfq\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An enumerate type for all the known scheduling disciplines.\"\"\",\n        }, # column\n        \"qosIfSchedulingQueueType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosInterfaceQueueType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The queue type of this preference.\"\"\",\n        }, # column\n        \"qosIfDropPreferenceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This class specifies the preference of the drop mechanism an\ninterface chooses if it supports multiple drop mechanisms.\nHigher values are preferred over lower values.\"\"\",\n        }, # table\n        \"qosIfDropPreferenceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfDropPreferenceId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies a drop preference for\na drop mechanism on an interface with a particular role\ncombination.\"\"\",\n        }, # row\n        \"qosIfDropPreferenceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfDropRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The combination of roles the interface must have for this\npolicy instance to apply to that interface.\"\"\",\n        }, # column\n        \"qosIfDropPreference\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The preference to use this drop mechanism.  A higher value\nmeans a higher preference.  If two mechanisms have the same\npreference the choice is a local decision.\"\"\",\n        }, # column\n        \"qosIfDropDiscipline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"qosIfDropWRED\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"qosIfDropTailDrop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An enumerate type for all the known drop mechanisms.\"\"\",\n        }, # column\n        \"qosIfDscpAssignmentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The assignment of each DSCP to a queue and threshold for each\ninterface queue type.\"\"\",\n        }, # table\n        \"qosIfDscpAssignmentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfDscpAssignmentId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the queue and threshold\nset for a packet with a particular DSCP on an interface of\na particular type with a particular role combination.\"\"\",\n        }, # row\n        \"qosIfDscpAssignmentId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfDscpRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role combination the interface must be configured with.\"\"\",\n        }, # column\n        \"qosIfQueueType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QosInterfaceQueueType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface queue type to which this row applies.\"\"\",\n        }, # column\n        \"qosIfDscp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Dscp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DSCP to which this row applies.\"\"\",\n        }, # column\n        \"qosIfQueue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The queue to which the DSCP applies for the given interface\ntype.\"\"\",\n        }, # column\n        \"qosIfThresholdSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold set of the specified queue to which the DSCP\napplies for the given interface type.\"\"\",\n        }, # column\n        \"qosIfRedTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class of lower and upper values for each threshold set in a\nqueue supporting WRED.  If the size of the queue for a given\nthreshold is below the lower value then packets assigned to\nthat threshold are always accepted into the queue.  If the\nsize of the queue is above upper value then packets are always\ndropped.  If the size of the queue is between the lower and\nthe upper then packets are randomly dropped.\"\"\",\n        }, # table\n        \"qosIfRedEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfRedId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies threshold limits for a\nparticular RED threshold of a given threshold set on an\ninterface and with a particular role combination.\"\"\",\n        }, # row\n        \"qosIfRedId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfRedRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role combination the interface must be configured with.\"\"\",\n        }, # column\n        \"qosIfRedNumThresholdSets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"ThresholdSetRange\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The values in this entry apply only to queues with the number\nof thresholds specified by this attribute.\"\"\",\n        }, # column\n        \"qosIfRedThresholdSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold set to which the lower and upper values apply.\nIt must be in the range 1 through qosIfRedNumThresholdSets.\nThere must be exactly one PRI for each value in this range.\"\"\",\n        }, # column\n        \"qosIfRedThresholdSetLower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold value below which no packets are dropped.\"\"\",\n        }, # column\n        \"qosIfRedThresholdSetUpper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold value above which all packets are dropped.\"\"\",\n        }, # column\n        \"qosIfTailDropTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class for threshold sets in a queue supporting tail drop.\nIf the size of the queue for a given threshold set is at or\nbelow the specified value then packets assigned to that\nthreshold set are always accepted into the queue.  If the size\nof the queue is above the specified value then packets are\nalways dropped.\"\"\",\n        }, # table\n        \"qosIfTailDropEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfTailDropId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the queue depth for a\nparticular tail-drop threshold set on an interface with a\nparticular role combination.\"\"\",\n        }, # row\n        \"qosIfTailDropId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfTailDropRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role combination the interface must be configured with.\"\"\",\n        }, # column\n        \"qosIfTailDropNumThresholdSets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"ThresholdSetRange\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this entry applies only to queues with the\nnumber of thresholds specified by this attribute.\"\"\",\n        }, # column\n        \"qosIfTailDropThresholdSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold set to which the threshold value applies\"\"\",\n        }, # column\n        \"qosIfTailDropThresholdSetValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold value above which packets are dropped.\"\"\",\n        }, # column\n        \"qosIfWeightsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A class of scheduling weights for each queue of an interface\nthat supports weighted round robin scheduling or a mix of\npriority queueing and weighted round robin.  For a queue with\nN priority queues, the N highest queue numbers are the\npriority queues with the highest queue number having the\nhighest priority.  WRR is applied to the non-priority queues.\"\"\",\n        }, # table\n        \"qosIfWeightsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"qosIfWeightsId\",\n            ],\n            \"description\" :\n                \"\"\"An instance of this class specifies the scheduling weight for\na particular queue of an interface with a particular number\nof queues and with a particular role combination.\"\"\",\n        }, # row\n        \"qosIfWeightsId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"PolicyInstanceId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An integer index to identify the instance of the policy class.\"\"\",\n        }, # column\n        \"qosIfWeightsRoles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"RoleCombination\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role combination the interface must be configured with.\"\"\",\n        }, # column\n        \"qosIfWeightsNumQueues\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"QueueRange\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the weight in this instance applies only to\ninterfaces with the number of queues specified by this\nattribute.\"\"\",\n        }, # column\n        \"qosIfWeightsQueue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The queue to which the weight applies.\"\"\",\n        }, # column\n        \"qosIfWeightsDrainSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of bytes that may be drained from the\nqueue in one cycle.  The percentage of the bandwith allocated\nto this queue can be calculated from this attribute and the\nsum of the drain sizes of all the non-priority queues of the\ninterface.\"\"\",\n        }, # column\n        \"qosIfWeightsQueueSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.8.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the queue in bytes.  Some devices set queue size\nin terms of packets.  These devices must calculate the queue\nsize in packets by assuming an average packet size suitable\nfor the particular interface.\n\nSome devices have a fixed size buffer to be shared among all\nqueues.  These devices must allocate a fraction of the\ntotal buffer space to this queue calculated as the the ratio\nof the queue size to the sum of the queue sizes for the\ninterface.\"\"\",\n        }, # column\n    }, # nodes\n\n    \"groups\" : {\n        \"qosDevicePibIncarnationTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosDevicePdpName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDevicePibIncarnation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDevicePibTtl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosDeviceAttributeTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosDevicePepDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDevicePrimaryPdp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDeviceSecondaryPdp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDeviceMaxMessageSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDeviceCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosInterfaceTypeTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosInterfaceQueueType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosInterfaceTypeRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosInterfaceTypeCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosDiffServMappingTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosMarkedDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosL2Cos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosCosToDscpTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosCosToDscpDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosUnmatchedPolicyTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosUnmatchedPolicyRole\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosUnmatchedPolicyDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosUnmatchedPolicyDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosUnmatchedPolicyDscpTrusted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosUnmatchPolMicroFlowPolicerId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosUnmatchedPolicyAggregateId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosPolicerTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosPolicerRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosPolicerNormalBurst\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosPolicerExcessBurst\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosPolicerAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosAggregateTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosAggregatePolicerId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosMacClassificationTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosDstMacVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDstMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDstMacCos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIpAceTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIpAceDstAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceDstAddrMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceSrcAddrMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceDscpMin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceDscpMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceDstL4PortMin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceDstL4PortMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceSrcL4PortMin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceSrcL4PortMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAcePermit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIpAclDefinitionTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIpAclId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAceOrder\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclDefAceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIpAclActionTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIpAclActAclId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclInterfaceRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclInterfaceDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclOrder\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclDscpTrusted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclMicroFlowPolicerId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIpAclAggregateId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfSchedulingPreferencesTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfSchedulingRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfSchedulingPreference\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfSchedulingDiscipline\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfSchedulingQueueType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfDropPreferenceTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfDropRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfDropPreference\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfDropDiscipline\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfDscpAssignmentTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfDscpRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfQueueType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfDscp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfQueue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfThresholdSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfRedTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfRedRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfRedNumThresholdSets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfRedThresholdSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfRedThresholdSetLower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfRedThresholdSetUpper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfTailDropTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.17\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfTailDropRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfTailDropNumThresholdSets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfTailDropThresholdSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfTailDropThresholdSetValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n        \"qosIfWeightsTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"qosIfWeightsRoles\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfWeightsNumQueues\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfWeightsQueue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfWeightsDrainSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosIfWeightsQueueSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"qosPIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-QOS-PIB-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.18.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the QOS Policy Derived MIB.\"\"\",\n            \"requires\" : {\n                \"qosDevicePibIncarnationTableGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosDeviceAttributeTableGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n                \"qosInterfaceTypeTableGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-QOS-PIB-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-MEMORY-POOL-MIB\n\nFILENAME = \"/home/voldsminde/mvold/src/observium/mibs/CISCO-MEMORY-POOL-MIB\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n\n    \"CISCO-MEMORY-POOL-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Postal: Cisco Systems, Inc.\n170 West Tasman Drive\nSan Jose, CA 95134-1706\nUSA\n\nTel: +1 408 526 4000\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"MIB module for monitoring memory pools\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2001-07-31 00:00\",\n                \"description\" :\n                    \"\"\"Added a new table, ciscoMemoryPoolUtilizationTable, which\nprovides information about memory utilization.\"\"\",\n            },\n            {\n                \"date\" : \"1996-02-01 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoMemoryPoolMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n    ),\n\n    \"typedefs\" : {\n        \"CiscoMemoryPoolTypes\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"Represents the different types of memory pools that\nmay be present in a managed device.  Memory pools can\nbe roughly categorized into two groups, predefined\npools and dynamic pools.  The following pool types\nare currently predefined:\n    1:  processor memory\n    2:  i/o memory\n    3:  pci memory\n    4:  fast memory\n    5:  multibus memory\n\nDynamic pools will have a pool type value greater than\nany of the predefined types listed above.\n\nNote that only the processor pool is required to be\nsupported by all devices.  Support for other pool types\nis dependent on the device being managed.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoMemoryPoolMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoMemoryPoolObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1\",\n        }, # node\n        \"ciscoMemoryPoolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of memory pool monitoring entries.\"\"\",\n        }, # table\n        \"ciscoMemoryPoolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ciscoMemoryPoolType\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the memory pool monitoring table.\"\"\",\n        }, # row\n        \"ciscoMemoryPoolType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-MEMORY-POOL-MIB\", \"name\" : \"CiscoMemoryPoolTypes\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of memory pool for which this entry\ncontains information.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual name assigned to the memory pool.  This\nobject is suitable for output to a human operator,\nand may also be used to distinguish among the various\npool types, especially among dynamic pools.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolAlternate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not this memory pool has an\nalternate pool configured.  Alternate pools are\nused for fallback when the current pool runs out\nof memory.\n\nIf an instance of this object has a value of zero,\nthen this pool does not have an alternate.  Otherwise\nthe value of this object is the same as the value of\nciscoMemoryPoolType of the alternate pool.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolValid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the remaining objects in\nthis entry contain accurate data.  If an instance\nof this object has the value false (which in and of\nitself indicates an internal error condition), the\nvalues of the remaining objects in the conceptual row\nmay contain inaccurate information (specifically, the\nreported values may be less than the actual values).\"\"\",\n        }, # column\n        \"ciscoMemoryPoolUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently in use by applications on the\nmanaged device.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the number of bytes from the memory pool\nthat are currently unused on the managed device.\n\nNote that the sum of ciscoMemoryPoolUsed and\nciscoMemoryPoolFree is the total amount of memory\nin the pool\"\"\",\n        }, # column\n        \"ciscoMemoryPoolLargestFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"Indicates the largest number of contiguous bytes\nfrom the memory pool that are currently unused on\nthe managed device.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolUtilizationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of memory pool utilization entries. Each of the\nobjects provides a general idea of how much of the memory\npool has been used over a given period of time. It is\ndetermined as a weighted decaying average.\"\"\",\n        }, # table\n        \"ciscoMemoryPoolUtilizationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"CISCO-MEMORY-POOL-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"ciscoMemoryPoolEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry in the memory pool utilization table.\"\"\",\n        }, # row\n        \"ciscoMemoryPoolUtilization1Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the memory pool utilization for 1 minute.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolUtilization5Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the memory pool utilization for 5 minutes.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolUtilization10Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-QOS-PIB-MIB\", \"name\" : \"Percent\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the memory pool utilization for 10 minutes.\"\"\",\n        }, # column\n        \"ciscoMemoryPoolNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.2\",\n        }, # node\n        \"ciscoMemoryPoolConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3\",\n        }, # node\n        \"ciscoMemoryPoolCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.1\",\n        }, # node\n        \"ciscoMemoryPoolGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"ciscoMemoryPoolGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoMemoryPoolName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolAlternate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolValid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolLargestFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing memory pool monitoring.\"\"\",\n        }, # group\n        \"ciscoMemoryPoolUtilizationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ciscoMemoryPoolUtilization1Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolUtilization5Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolUtilization10Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"An optional group providing a collection of memory pool\nutilization objects.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoMemoryPoolCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Memory Pool MIB\"\"\",\n            \"requires\" : {\n                \"ciscoMemoryPoolGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoMemoryPoolComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-MEMORY-POOL-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.48.3.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Memory Pool MIB\"\"\",\n            \"requires\" : {\n                \"ciscoMemoryPoolGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\"\n                },\n                \"ciscoMemoryPoolUtilizationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-MEMORY-POOL-MIB\",\n                    \"description\" :\n                        \"\"\"Per memory pool utilization statistics is mandatory for\nthe managed system that supports memory pool utilization.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-PAE-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-PAE-MIB\n\nFILENAME = \"CISCO-PAE-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-PAE-MIB\",\n\n    \"CISCO-PAE-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco System, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-ibns@cisco.com,\n        cs-lan-switch-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"Cisco Port Access Entity (PAE) module for managing\nIEEE Std 802.1x.\n\nThis MIB provides Port Access Entity information\nthat are either excluded by IEEE8021-PAE-MIB or\nspecific to Cisco products.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2009-12-10 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeSuppPortProfileGroup,\nand cpaeSuppHostInfoGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2008-07-07 00:00\",\n                \"description\" :\n                    \"\"\"Added TEXTUAL-CONVENTION CpaeAuthState.\nAdded enumerated value other(4) to cpaePortMode.\n\nAdded cpaeHostSessionIdGroup,\ncpaeGuestVlanNotifEnableGroup,\ncpaeGuestVlanNotifGroup,\ncpaeAuthFailVlanNotifEnableGrp,\ncpaeAuthFailVlanNotifGroup,\ncpaeHostAuthInfoGroup,\ncpaePortCapabilitiesConfigGroup,\ncpaeDot1xSuppToGuestVlanGroup.\n\nDeprecated cpaePortAuthFailVlanGroup, replaced by\ncpaePortAuthFailVlanConfigGroup and\ncpaePortAuthFailUserInfoGroup.\n\nDeprecated cpaeCompliance8, replaced by cpaeCompliance9.\"\"\",\n            },\n            {\n                \"date\" : \"2008-04-09 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeMabAuditInfoGroup,\ncpaeHostUrlRedirectGroup,\ncpaeMabPortIpDevTrackConfGroup,\ncpaePortIpDevTrackConfGroup,\ncpaeWebAuthIpDevTrackingGroup,\ncpaeWebAuthUnAuthTimeoutGroup,\ncpaeGlobalAuthFailVlanGroup,\ncpaeGlobalSecViolationGroup,\ncpaeCriticalEapolConfigGroup.\n\nDeprecated cpaeMacAuthBypassGroup and replace\nit by cpaeMacAuthBypassPortEnableGroup, and\ncpaeMacAuthBypassGroup4;\n\nDeprecated cpaeAuthConfigGroup and replace it by\ncpaeAuthIabConfigGroup, cpaeAuthConfigGroup3 and\ncpaeAuthConfigGroup4.\n\nModified cpaeMacAuthBypassPortAuthState to add 'ipAwaiting'\nand 'policyConfig' enum values.\"\"\",\n            },\n            {\n                \"date\" : \"2007-04-25 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeMacAuthBypassGroup3,\nand cpaeHostPostureTokenGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2007-04-16 00:00\",\n                \"description\" :\n                    \"\"\"Add cpaeHostInfoGroup3.\"\"\",\n            },\n            {\n                \"date\" : \"2007-01-27 00:00\",\n                \"description\" :\n                    \"\"\"Added 'aaaFail' state to\ncpaeMacAuthBypassPortAuthState and\ncpaeWebAuthHostState.\n\nAdded cpaePortAuthFailVlanGroup2,\ncpaeWebAuthAaaFailGroup,\ncpaeMacAuthBypassGroup2,\ncpaePortEapolTestGroup,\ncpaeHostInfoGroup2,\ncpaeAuthConfigGroup2,\ncpaeCriticalRecoveryDelayGroup,\ncpaeMacAuthBypassCriticalGroup, and\ncpaeWebAuthCriticalGroup.\n\nObsoleted cpaeHostInfoPostureToken object.\"\"\",\n            },\n            {\n                \"date\" : \"2005-09-22 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeGuestVlanGroup3, cpaePortAuthFailVlanGroup,\ncpaePortOperVlanGroup, cpaeNoGuestVlanNotifEnableGrp,\ncpaeNoAuthFailVlanNotifEnableGrp,\ncpaeNoGuestVlanNotifGroup,\ncpaeNoAuthFailVlanNotifGroup, cpaeMacAuthBypassGroup,\ncpaeWebAuthGroup, cpaeAuthConfigGroup and\ncpaeHostInfoGroup.\n\nDeprecated cpaeInGuestVlan, cpaeGuestVlanGroup2.\"\"\",\n            },\n            {\n                \"date\" : \"2004-04-23 00:00\",\n                \"description\" :\n                    \"\"\"Modified the DESCRIPTION clauses of cpaeGuestVlanNumber\nand cpaeGuestVlanId.\"\"\",\n            },\n            {\n                \"date\" : \"2004-04-01 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeUserGroupGroup and cpaeRadiusConfigGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2003-04-08 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaeGuestVlanGroup2 and cpaeShutdownTimeoutGroup.\nDeprecated cpaeGuestVlanGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2002-10-16 00:00\",\n                \"description\" :\n                    \"\"\"Added cpaePortEntryGroup and cpaeGuestVlanGroup.\nDeprecated cpaeMultipleHostGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2001-05-24 10:16\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoPaeMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"IEEE8021-PAE-MIB\", \"name\" : \"dot1xPaePortEntry\"},\n        {\"module\" : \"IEEE8021-PAE-MIB\", \"name\" : \"dot1xPaePortNumber\"},\n        {\"module\" : \"IEEE8021-PAE-MIB\", \"name\" : \"dot1xAuthPaeState\"},\n        {\"module\" : \"IEEE8021-PAE-MIB\", \"name\" : \"dot1xAuthConfigEntry\"},\n        {\"module\" : \"IEEE8021-PAE-MIB\", \"name\" : \"PaeControlledPortStatus\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"CiscoURLString\"},\n        {\"module\" : \"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureToken\"},\n        {\"module\" : \"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureTokenString\"},\n        {\"module\" : \"CISCO-POLICY-GROUP-MIB\", \"name\" : \"CpgPolicyNameOrEmpty\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"typedefs\" : {\n        \"ReAuthPeriodSource\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"local\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"server\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"auto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"Source of the reAuthPeriod constant, used by the\n802.1x Reauthentication Timer state machine.\n\nlocal : local configured reauthentication period\n        specified by the object dot1xAuthReAuthPeriod\n        will be used.\n\nserver: the reauthentication period will be received\n        from the Authentication server.\n\nauto  : source of reauthentication period will be\n        decided by the system.\"\"\",\n        },\n        \"CpaeAuthState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"initialize\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"disconnected\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"connecting\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"authenticating\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"authenticated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"aborting\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"held\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"forceAuth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"forceUnauth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"guestVlan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"authFailVlan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"criticalAuth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"ipAwaiting\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"policyConfig\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"authFinished\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"restart\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"authFallback\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"authCResult\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"authZSuccess\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"description\" :\n                \"\"\"The Authenticator PAE state machine value.\n\nother         :None of the following states.\n\ninitialize    :The PAE state machine is being initialized.\n\ndisconnected  :An explicit logoff request is received from\n               the Supplicant, or the number of permissible\n               reauthentication attempts has been exceeded.\n\nconnecting    :Attempting to establish a communication\n               with a Supplicant.\n\nauthenticating:A Supplicant is being authenticated.\n\nauthenticated :The Authenticator has successfully\n               authenticated the Supplicant.\n\naborting      :The authentication process is\n               prematurely aborted due to receipt of\n               a reauthentication request, or an\n               EAPOL-Start frame, or an EAPOL-Logoff\n               frame, or an authTimeout.\n\nheld          :The state machine ignores and discards all\n               EAPOL packets, so as to discourage brute\n               force attacks. This state is entered from\n               the 'authenticating' state following an\n               authentication failure.  At the expiration\n               of the quietWhile timer, the state machine\n               transitions to the 'connecting' state.\n\nforceAuth     :The port is set to Authorized, and a canned\n               EAP Success packet is sent to the Supplicant.\n\nforceUnauth   :The port is set to Unauthorized, and a\n               canned EAP Failure packet is sent to the\n               Supplicant.  If EAP-Start messages\n               are received from the Supplicant, the\n               state is re-entered and further EAP Failure\n               messages are sent.\n\nguestVlan     :The port has been moved to a configured\n               Guest VLAN.\n\nauthFailVlan  :The port has been moved to a configured\n               Authentication Failed VLAN.\n\ncriticalAuth  :The port has been authorized by Critical\n               Authentication because RADIUS server is\n               not reachable, or does not response.\n\nipAwaiting    :The port is waiting for an IP address from\n               DHCP server.\n\npolicyConfig  :This state is entered from 'ipAwaiting'\n               state if an IP address is received and\n               the corresponding policies are being\n               installed.\n\nauthFinished  :The port is set to Authorized by MAC\n               Authentication Bypass feature.\n\nrestart       :The PAE state machine has been restarted.\n\nauthFallback  :Fallback mechanism is applied to the\n               authentication process.\n\nauthCResult   :Authentication completed and the validity\n               of the authorization features is checked.\n\nauthZSuccess  :Authorization policies based on the\n               authentication result are applied. If the\n               policies are applied successfully then the\n               port is authorized otherwise unauthorized.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoPaeMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220\",\n            \"status\" : \"current\",\n        }, # node\n        \"cpaeMIBNotification\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.0\",\n        }, # node\n        \"cpaeMIBObject\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1\",\n        }, # node\n        \"cpaePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of system level information for each port\nsupported by the Port Access Entity.  An entry\nappears in this table for each PAE port of this system.\nThis table contains additional objects for the\ndot1xPaePortTable.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2001 9.6.1,\n802.1X-2004 9.6.1\"\"\",\n        }, # table\n        \"cpaePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"IEEE8021-PAE-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"dot1xPaePortEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular PAE port.\"\"\",\n        }, # row\n        \"cpaeMultipleHost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the port allows multiple-host\nconnection or not.\"\"\",\n        }, # column\n        \"cpaePortMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"multiHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"multiAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the current mode of dot1x operation on\nthe port.\n    singleHost(1): port allows one host to connect\n                   and authenticate.\n    multiHost(2) : port allows multiple hosts to\n                   connect.  Once a host is\n                   authenticated, all remaining hosts\n                   are also authorized.\n    multiAuth(3) : port allows multiple hosts to\n                   connect and each host is\n                   authenticated.\n\n    other(4)     : none of the above. This is a\n                   read-only value which can not\n                   be used in set operation.\n\nIf the port security feature is enabled on the\ninterface, the configuration of the port security\n(such as the number of the hosts allowed, the security\nviolation action, etc) will apply to the interface.\"\"\",\n        }, # column\n        \"cpaeGuestVlanNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the Guest Vlan of the interface.\nAn interface with cpaePortMode value of 'singleHost'\nwill be moved to its Guest Vlan if the supplicant on\nthe interface is not capable of IEEE-802.1x\nauthentication.\n\nA value of zero for this object indicates no Guest\nVlan configured for the interface.\"\"\",\n        }, # column\n        \"cpaeInGuestVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether the interface is in its Guest Vlan\nor not.\n\nThe object is deprecated in favor of newly added\nobject cpaePortOperVlanType.\"\"\",\n        }, # column\n        \"cpaeShutdownTimeoutEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether shutdown timeout feature is enabled\non the interface.\"\"\",\n        }, # column\n        \"cpaePortAuthFailVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the Auth-Fail (Authentication Fail) Vlan of\nthe port.  A port is moved to Auth-Fail Vlan if the\nsupplicant which support IEEE-802.1x authentication is\nunsuccessfully authenticated.\n\nA value of zero for this object indicates no Auth-Fail\nVlan configured for the port.\"\"\",\n        }, # column\n        \"cpaePortOperVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VlanIndex of the Vlan which is assigned to this\nport via IEEE-802.1x and related methods of\nauthentication supported by the system.\n\nA value of zero for this object indicates that no\nVlan is assigned to this port via IEEE-802.1x\nauthentication.\"\"\",\n        }, # column\n        \"cpaePortOperVlanType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"guest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the Vlan which is assigned to this port\nvia IEEE-802.1x and related methods of authentication\nsupported by the system.\n\nA value of 'other' for this object indicates type of\nVlan assigned to this port; via IEEE-802.1x\nauthentication; is other than the ones specified by\nlisted enumerations for this object.\n\nA value of 'none' for this object indicates that there\nis no Vlan assigned to this port via IEEE-802.1x\nauthentication.  For such a case, corresponding value\nof cpaePortOperVlan object will be zero.\n\nA value of 'guest' for this object indicates that Vlan\nassigned to this port; via IEEE-802.1x authentication;\nis of type Guest Vlan and specified by the object\ncpaeGuestVlanNumber for this entry.\n\nA value of 'authFail' for this object indicates that\nVlan assigned to this port; via IEEE-802.1x\nauthentication; is of type Auth-Fail Vlan and\nspecified by the object cpaePortAuthFailVlan for\nthis entry.\"\"\",\n        }, # column\n        \"cpaeAuthFailVlanMaxAttempts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the maximum number of authentication attempts\nshould be made before the port is moved into the\nAuth-Fail Vlan.\"\"\",\n        }, # column\n        \"cpaePortCapabilitiesEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"authenticator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"supplicant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the type of PAE functionality of the port\nwhich are enabled.\n\nauthenticator: PAE Authenticator functions are enabled.\n\nsupplicant   : PAE Supplicant functions are enabled.\n\nOnly those supported PAE functions which are listed\nin the corresponding instance of dot1xPaePortCapabilities\ncan be enabled.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2001 9.6.1, PAE Capabilities,\n802.1X-2004 9.6.1, PAE Capabilities\"\"\",\n        }, # column\n        \"cpaeGuestVlanId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the Guest Vlan of the system.\nAn interface with cpaePortMode value of 'singleHost'\nwill be moved to Guest Vlan if the supplicant on the\ninterface is not IEEE-802.1x capable.\n\nA value of zero indicates no Guest Vlan configured in\nthe system.\n\nIf the platform supports per-port guest Vlan ID\nconfiguration, this object is not instantiated.\"\"\",\n        }, # scalar\n        \"cpaeShutdownTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the shutdown timeout interval to enable the\ninterface automatically in case it is shutdown due to\nsecurity violation.\n\nIf the value of this object is 0, the interfaces\nshutdown due to the security violation will not be\nenabled automatically.\n\nThe value of this object is applicable to the\ninterface only when cpaeShutdownTimeoutEnabled is\n'true', and port security feature is disabled on the\ninterface.\"\"\",\n        }, # scalar\n        \"cpaeRadiusAccountingEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if RADIUS accounting is enabled for 802.1x\non this devices.\"\"\",\n        }, # scalar\n        \"cpaeUserGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Group Manager and authenticated users\ninformation on the device.\"\"\",\n        }, # table\n        \"cpaeUserGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpaeUserGroupName\",\n                \"cpaeUserGroupUserIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about an 802.1x authenticated user on the\ndevices.\"\"\",\n        }, # row\n        \"cpaeUserGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Specifies the name of the group that the user\nbelongs to.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index of an user within a group.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the name of the user authenticated on a\nport of the device.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the type of address used to determine\nthe address of the user.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the address of the host that the user\nlogging from.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the interface index that the user is\nauthenticated on.\"\"\",\n        }, # column\n        \"cpaeUserGroupUserVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the vlan that the user belongs to.\"\"\",\n        }, # column\n        \"cpaeAuthFailUserTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table to list user information for each port on\nthe system supported by the Port Access Entity and\nassigned to Auth-Fail Vlan.\"\"\",\n        }, # table\n        \"cpaeAuthFailUserEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry appears in this table for each PAE port on\nthe system which is assigned to Vlan of type\n'authFail' via IEEE-802.1x authentication.\"\"\",\n        }, # row\n        \"cpaeAuthFailUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the name of the user who failed IEEE-802.1x\nauthentication and hence now assigned to Auth-Fail\nVlan.\n\nThe Auth-Fail Vlan to which the user belongs is\ndetermined by the value of object cpaePortAuthFailVlan\nfor this port.\"\"\",\n        }, # column\n        \"cpaeNotificationControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.7\",\n        }, # node\n        \"cpaeNoGuestVlanNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the system produces\nthe cpaeNoGuestVlanNotif.\n\nA 'false' value will prevent cpaeNoGuestVlanNotif from\nbeing generated by this system.\"\"\",\n        }, # scalar\n        \"cpaeNoAuthFailVlanNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the system produces\nthe cpaeNoAuthFailVlanNotif.\n\nA 'false' value will prevent cpaeNoAuthFailVlanNotif\nfrom being generated by this system.\"\"\",\n        }, # scalar\n        \"cpaeGuestVlanNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the system produces\nthe cpaeGuestVlanNotif.\n\nA 'false' value will prevent cpaeGuestVlanNotif from\nbeing generated by this system.\"\"\",\n        }, # scalar\n        \"cpaeAuthFailVlanNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the system produces\nthe cpaeAuthFailVlanNotif.\n\nA 'false' value will prevent cpaeAuthFailVlanNotif from\nbeing generated by this system.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8\",\n        }, # node\n        \"cpaeMacAuthBypassReAuthTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the waiting time before reauthentication is\ntriggered on all MAC Auth-bypass authenticated ports.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypassReAuthEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The reauthentication control for all MAC Auth-bypass\nports. Setting this object to 'true' causes every MAC\nAuth-Bypass authenticated port to reauthenticate the\ndevice connecting to the port, after every period of\ntime specified by the object\ncpaeMacAuthBypassReAuthTimeout. Setting this object\nto 'false' will disable the MAC Auth-Bypass global\nreauthentication.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypassViolation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"restrict\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the action upon reception of a security\nviolation  event.\n\n     restrict(1): Packets from MAC address of the\n                  device causing security violation\n                  will be dropped.\n\n     shutdown(2): The port that causes security\n                  violation will be shutdown.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypassShutdownTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies time before a port is auto-enabled after\nbeing shutdown due to a MAC Auth-bypass security\nviolation.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypassAuthFailTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the time a MAC Auth-bypass unauthenticated\nport waits before trying the authentication process\nagain.\"\"\",\n        }, # scalar\n        \"cpaeMacAuthBypassPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of MAC Authentication Bypass (MAC\nAuth-Bypass) configuration and information for\nports in the device.\"\"\",\n        }, # table\n        \"cpaeMacAuthBypassPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing management information for\nMAC Auth-Bypass feature on a port.\"\"\",\n        }, # row\n        \"cpaeMacAuthBypassPortEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether MAC Auth-Bypass is enabled\non the port.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortInitialize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The initialization control for this port. Setting\nthis object to 'true' causes the MAC Auth-bypass\nstate machine to be initialized on the port. Setting\nthis object to  'false' has no effect.\n\nThis object always returns 'false' when it is read.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortReAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The reauthentication control for this port. Setting\nthis object to 'true' causes the MAC address of the\ndevice connecting to the port to be reauthenticated.\nSetting this object to 'false' has no effect.\n\nThis object always returns 'false' when it is read.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the MAC address of the device connecting\nto the port.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortAuthState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"waiting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"authenticating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authenticated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"finished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"aaaFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ipAwaiting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"policyConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current state of the MAC Auth-Bypass\nstate machine.\n\nother(1)         : An unknown state.\n\nwaiting(2)       : Waiting to receive the MAC address\n                   that needs to be authenticated.\n\nauthenticating(3): In authentication process.\n\nauthenticated(4) : MAC address of the device connecting\n                   to the port is authenticated.\n\nfail(5)          : MAC Auth-bypass authentication\n                   failed. Port waits for a period of\n                   time before moving to the 'waiting'\n                   state, if there is no other\n                   authentication features available\n                   in the system.\n\nfinished(6)      : MAC Auth-bypass authentication\n                   failed. Port is authenticated by\n                   another authentication feature.\n\naaaFail(7)       : AAA server is not reachable after\n                   sending the authentication request\n                   or after the expiration of\n                   re-authentication timeout, with IAB\n                   (Inaccessible Authentication Bypass)\n                   enabled on the port.\n\nipAwaiting(8)    : Corresponding QoS/Security ACLs and other\n                   Vendor Specific Attributes are being\n                   configured on the port, after which IP\n                   address will be obtained via DHCP snooping\n                   or ARP inspection.\n\npolicyConfig(9)  : Policy Groups or downloaded ACLs are being\n                   configured on the port.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortTermAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"init\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reauth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the termination action received from RADIUS\nserver that will be applied on the port when the\ncurrent session timeout expired.\n\nother : none of the following.\ninit  : current session will be terminated and a new\n        authentication process will be initiated.\nreauth: reauthentication will be applied without\n        terminating the current session.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassSessionTimeLeft\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time of the current MAC\nAuth-Bypass session on this port.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortAuthMethod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"eap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the authentication method used by\nMAC Authentication Bypass.\n\nradius(1) : communication with authentication server\n            is performed via RADIUS messages.\n\neap(2)    : communication with authentication server\n            is performed via EAP messages.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortSessionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the session ID of the MAC Auth-Bypass\nAudit session on the port. A zero length string will be\nreturned for this object if value of the corresponding instance\nof cpaeMacAuthBypassPortEnabled is 'false'.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortUrlRedirect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the URL of an Audit server, provided by AAA\nserver, to which a MAC auth-Bypass host will be\nredirected to when an Audit session starts off. A\nzero-length string indicates that the audit process will\nbe performed via port scan instead, or value of the\ncorresponding instance of cpaeMacAuthBypassPortEnabled is\n'false'.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassPortPostureTok\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CISCO-NAC-TC-MIB\",\n                        \"type\" : \"CnnEouPostureTokenString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Posture Token assigned to the MAC\nAuth-Bypass host connected to this port. A zero length string\nwill be returned for this object if value of the corresponding\ninstance of cpaeMacAuthBypassPortEnabled is 'false'.\"\"\",\n        }, # column\n        \"cpaeMacAuthBypassAcctEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if accounting is enabled for Mac\nAuthentication Bypass feature on this device.\"\"\",\n        }, # scalar\n        \"cpaeMabCriticalRecoveryDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milli-seconds\",\n            \"description\" :\n                \"\"\"This object specifies the critical recovery delay\ntime for Mac Authentication Bypass in the system. A\nvalue of zero indicates that critical recovery delay\nfor MAC Authentication Bypass is disabled.\"\"\",\n        }, # scalar\n        \"cpaeMabPortIpDevTrackConfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of IP Device Tracking configuration for MAC\nAuth-Bypass interfaces in the system.\"\"\",\n        }, # table\n        \"cpaeMabPortIpDevTrackConfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry of MAC Auth-Bypass configuration for IP Device\nTracking on an MAC Auth-Bypass capable interface.\"\"\",\n        }, # row\n        \"cpaeMabPortIpDevTrackEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.8.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether IP Device Tracking is enabled or not on this\nport for the corresponding MAC Auth-bypass authenticated host.\"\"\",\n        }, # column\n        \"cpaeWebAuth\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9\",\n        }, # node\n        \"cpaeWebAuthEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether Web Proxy Authentication is enabled\nin the system.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthSessionPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the Web Proxy Authentication session period\nfor the system. Session period is the time after which\nan Web Proxy Authenticated session is terminated.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthLoginPage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoURLString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the customized login page for Web Proxy\nAuthentication, in the format of an URL.\n\nA customized login page is required to support the same\ninput fields as the default login page for users to\ninput credentials.\n\nIf this object contains a zero length string, the\ndefault login page will be used.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthLoginFailedPage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoURLString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the customized login-failed page for Web\nProxy Authentication, in the format of an URL.\n\nLogin-failed page is sent back to the client upon an\nauthentication failure. A login-failed page requires to\nhave all the input fields of the login page, in\naddition to the authentication failure information.\n\nIf this object contains a zero length string, the\ndefault login-failed page will be used.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthQuietPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Specifies the time a Web Proxy Authentication state\nmachine will be held in 'blackListed' state after\nmaximum authentication attempts.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthMaxRetries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the maximum number of unsuccessful login\nattempts a user is allowed to make.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Web Proxy Authentication configuration and\ninformation for the feature capable ports in the\ndevice.\"\"\",\n        }, # table\n        \"cpaeWebAuthPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing management information for Web\nProxy Authentication feature on a port.\"\"\",\n        }, # row\n        \"cpaeWebAuthPortEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether Web Proxy Authentication is\nenabled on the port.\"\"\",\n        }, # column\n        \"cpaeWebAuthPortInitialize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The initialization control for this port. Setting this\nobject to 'true' causes Web Proxy Authentication state\nmachine to be initialized for all the hosts connecting\nto the port. Setting this object to 'false' has no\neffect.\n\nThis object always returns 'false' when it is read.\"\"\",\n        }, # column\n        \"cpaeWebAuthPortAaaFailPolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-POLICY-GROUP-MIB\", \"name\" : \"CpgPolicyNameOrEmpty\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the policy name to be applied on the port\nwhen the corresponding cpaeWebAuthHostState is\n'aaaFail'. The specified policy name must either be\nan existing entry in cpgPolicyTable defined in\nCISCO-POLICY-GROUP-MIB, or an empty string which\nindicates that there will be no policy name\napplied on the port when the corresponding\ncpaeWebAuthHostState is 'aaaFail'.\"\"\",\n        }, # column\n        \"cpaeWebAuthPortIpDevTrackEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether IP Device Tracking is enabled or not on this\nport for the corresponding Web Proxy authenticated host.\"\"\",\n        }, # column\n        \"cpaeWebAuthHostTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Web Proxy Authentication information for\nhosts currently managed by the feature. An entry is\nadded to the table when a host is detected and Web\nProxy Authentication state machine is initiated for\nthe host.\"\"\",\n        }, # table\n        \"cpaeWebAuthHostEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n                \"cpaeWebAuthHostAddrType\",\n                \"cpaeWebAuthHostAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing management information for Web\nProxy Authentication feature on a host.\"\"\",\n        }, # row\n        \"cpaeWebAuthHostAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Indicates the Internet address type for the host.\"\"\",\n        }, # column\n        \"cpaeWebAuthHostAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Indicates the Internet address for the host. The type\nof this address is determined by the value of\ncpaeWebAuthHostAddrType.\"\"\",\n        }, # column\n        \"cpaeWebAuthAaaSessionPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the session period for a Web Proxy\nAuthenticated session on this host, supplied by the\nAAA server. If value of this object is none zero,\nit will take precedence over the period specified\nby cpaeWebAuthPortSessionPeriod.\"\"\",\n        }, # column\n        \"cpaeWebAuthHostSessionTimeLeft\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time of the current Web Proxy\nAuthenticated session for this host.\"\"\",\n        }, # column\n        \"cpaeWebAuthHostState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connecting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"authenticating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authenticated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"authFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"parseError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sessionTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"blackListed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"aaaFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current state of the Web Proxy\nAuthentication state machine.\n\ninitialize    : Initial state of the Web Proxy\n                Authentication state machine.\n\nconnecting    : Login page is sent to the client,\n                waiting for response from the client.\n\nauthenticating: Credentials are extracted from client's\n                response and authenticating with the\n                AAA server.\n\nauthenticated : Web Proxy Authentication succeeded.\n                Session timer is started, policies are\n                applied, and  success page is sent back\n                to client.\n\nauthFailed    : Web Proxy Authentication failed. Login\n                page is resent with authentication\n                failure information embedded, if retry\n                count has not exceeded the maximum\n                number of retry attempts. Otherwise,\n                move to 'blackListed' state.\n\nparseError    : Failed to extract user's credentials\n                from the client's response.\n\nsessionTimeout: Session timer expired, user's policies\n                are removed, state machine will moves\n                to 'initialize' state after that.\n\nblackListed   : Web Proxy Authentication retry count\n                has exceeded the maximum number of\n                retry attempts. Only setting the state\n                machine to 'initialize' will take it\n                out of this state.\n\naaaFail       : AAA server is not reachable after\n                sending the authentication request, or\n                after host has been in 'blackListed'\n                state for the period of time specified\n                by cpaeWebAuthQuietPeriod, with IAB\n                (Inaccessible Authentication Bypass)\n                enabled on the corresponding port\n                connected to the host.\"\"\",\n        }, # column\n        \"cpaeWebAuthHostInitialize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The initialization control for this host. Setting this\nobject to 'true' causes Web Proxy Authentication state\nmachine to be initialized for the host. Setting this\nobject to 'false' has no effect.\n\nThis object always returns 'false' when it is read.\"\"\",\n        }, # column\n        \"cpaeWebAuthCriticalRecoveryDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milli-seconds\",\n            \"description\" :\n                \"\"\"This object specifies the critical recovery delay\ntime for Web Proxy Authentication in the system. A value\nof zero indicates that critical recovery delay for Web\nProxy Authentication is disabled.\"\"\",\n        }, # scalar\n        \"cpaeWebAuthUnAuthStateTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.9.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The authentication timeout period for Web Proxy\nAuthentication. Once a host enters 'initialize' state as\nindicated by its corresponding cpaeWebAuthHostState,\nsuch host will be removed if it can not be authenticated\nwithin the timeout period.\"\"\",\n        }, # scalar\n        \"cpaeAuthConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing the configuration objects for the\nAuthenticator PAE associated with each port. An entry\nappears in this table for each PAE port that may\nauthenticate access to itself. This table contain\nadditional objects for the dot1xAuthConfigTable.\"\"\",\n        }, # table\n        \"cpaeAuthConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"IEEE8021-PAE-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"dot1xAuthConfigEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular Authenticator PAE.\"\"\",\n        }, # row\n        \"cpaeAuthReAuthPeriodSrcAdmin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-PAE-MIB\", \"name\" : \"ReAuthPeriodSource\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the source of the reAuthPeriod constant to\nbe used by the Reauthentication Timer state machine.\"\"\",\n        }, # column\n        \"cpaeAuthReAuthPeriodSrcOper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-PAE-MIB\", \"name\" : \"ReAuthPeriodSource\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the source of the reAuthPeriod constant\ncurrently in use by the Reauthentication Timer state\nmachine.\"\"\",\n        }, # column\n        \"cpaeAuthReAuthPeriodOper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the operational reauthentication period\nfor this port.\"\"\",\n        }, # column\n        \"cpaeAuthTimeToNextReAuth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the leftover time of the current session\nfor this port.\"\"\",\n        }, # column\n        \"cpaeAuthReAuthAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"terminate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noReAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the reauthentication action for this port.\n\nterminate: Session will be terminated, with the\n           corresponding Authenticator PAE state\n           machine transits to 'disconnected'.\n\nreAuth   : The port will be reauthenticated.\n\nnoReAuth : The port will not be reauthenticated.\"\"\",\n        }, # column\n        \"cpaeAuthReAuthMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the number of reauthentication\nattempts that are permitted before the port becomes\nunauthorized.\n\nThe value of this object is used as the reAuthMax\nconstant by the Authenticator PAE state machine.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.1X-2004, 8.2.4.1.2, reAuthMax\"\"\",\n        }, # column\n        \"cpaeAuthIabEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the PAE port is declared as\nInaccessible Authentication Bypass (IAB). IAB ports\nwill be granted network access via the administrative\nconfigured VLAN if it failed to connect to the\nAuthentication server. The only way to bring an IAB\nport back to the Backend Authentication state machine\nis through setting dot1xPaePortInitialize in the\ncorresponding entry in dot1xPaePortTable to 'true'.\n\n802.1x reauthentication will be temporary disabled on\nan authenticated IAB port if the connection to\nthe Authentication server is broken, and enable again\nwhen the connection is resumed.\"\"\",\n        }, # column\n        \"cpaeAuthPaeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-PAE-MIB\", \"name\" : \"CpaeAuthState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current value of the Authenticator PAE\nstate machine on the port.\"\"\",\n        }, # column\n        \"cpaeHostInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing 802.1x authentication information\nfor hosts connecting to PAE ports in the system.\"\"\",\n        }, # table\n        \"cpaeHostInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n                \"cpaeHostInfoHostIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry appears in the table for each 802.1x capable\nhost connecting to an PAE port, providing its\nauthentication information.\"\"\",\n        }, # row\n        \"cpaeHostInfoHostIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An arbitrary index assigned by the agent to identify\nthe host.\"\"\",\n        }, # column\n        \"cpaeHostInfoMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Mac Address of the host.\"\"\",\n        }, # column\n        \"cpaeHostInfoPostureToken\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureToken\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the posture token assigned to the host.\nThis object has been obsoleted and replaced by\ncpaeHostPostureTokenStr.\"\"\",\n        }, # column\n        \"cpaeHostInfoUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the name of the authenticated user on\nthe host.\"\"\",\n        }, # column\n        \"cpaeHostInfoAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the type of Internet address of the host.\"\"\",\n        }, # column\n        \"cpaeHostInfoAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Internet address of the host. The type\nof this address is determined by the value of\ncpaeHostInfoAddrType object.\"\"\",\n        }, # column\n        \"cpaeHostPostureTokenStr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-NAC-TC-MIB\", \"name\" : \"CnnEouPostureTokenString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the posture token assigned to the host.\"\"\",\n        }, # column\n        \"cpaeHostUrlRedirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the URL-redirection assigned for this host\nby AAA server.\"\"\",\n        }, # column\n        \"cpaeHostAuthPaeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-PAE-MIB\", \"name\" : \"CpaeAuthState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current value of the Authenticator PAE\nstate machine for the host.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2001 9.4.1, Authenticator PAE state, \n802.1X-2004 9.4.1, Authenticator PAE state\"\"\",\n        }, # column\n        \"cpaeHostBackendState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"request\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"response\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"timeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"initialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ignore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current state of the Backend Authentication\nstate machine of the host.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2001 9.4.1, Backend Authentication state,\n802.1X-2004 9.4.1, Backend Authentication state.\"\"\",\n        }, # column\n        \"cpaeHostSessionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.11.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique identifier of the 802.1x session.\"\"\",\n        }, # column\n        \"cpaePortEapolTestLimits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the maximum number of entries allowed in\ncpaePortEapolTestTable.\"\"\",\n        }, # scalar\n        \"cpaePortEapolTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for testing EAPOL (Extensible Authentication\nProtocol Over LAN) capable information of hosts\nconnecting to PAE ports in the device.\"\"\",\n        }, # table\n        \"cpaePortEapolTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.13.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing EAPOL capable information for\nhosts connecting to a PAE port.\"\"\",\n        }, # row\n        \"cpaePortEapolTestResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notCapable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"capable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the test result of whether there is\nEAPOL supporting host connecting to the port.\n\ninProgress: the test is in progress.\nnotCapable: there is no EAPOL supporting host\n            connecting to the port.\ncapable   : there is EAPOL supporting host connecting\n            to the port.\"\"\",\n        }, # column\n        \"cpaePortEapolTestStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to manage the creation,\nand deletion of rows in the table.\n\nAn entry can be created by setting the instance\nvalue of this object to 'createAndGo', and deleted\nby setting the instance value of this object to\n'destroy'.\"\"\",\n        }, # column\n        \"cpaeCriticalConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.14\",\n        }, # node\n        \"cpaeCriticalEapolEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.14.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if the device will send an EAPOL-Success\nmessage on successful Critical Authentication for a\nsupplicant.\"\"\",\n        }, # scalar\n        \"cpaeCriticalRecoveryDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.14.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milli-seconds\",\n            \"description\" :\n                \"\"\"This object specifies the critical recovery delay time\nfor 802.1x in the system. A value of zero indicates\nthat Critical Authentication recovery delay for\n802.1x is disabled.\"\"\",\n        }, # scalar\n        \"cpaePortIpDevTrackConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of IP Device Tracking configuration for PAE\nports in the system.\"\"\",\n        }, # table\n        \"cpaePortIpDevTrackConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry of IP Device Tracking configuration on a\nPAE port.\"\"\",\n        }, # row\n        \"cpaePortIpDevTrackEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if IP Device Tracking is enabled on this port\nfor the corresponding 802.1x authenticated host.\"\"\",\n        }, # column\n        \"cpaeGlobalAuthFailMaxAttempts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A global configuration to specify the maximum number\nof authentication attempts that should be made before a port\nis moved into its Auth-Fail VLAN.\"\"\",\n        }, # scalar\n        \"cpaeGlobalSecViolationAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"restrict\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A global configuration to specify the action that will be\napplied to a PAE port upon reception of a security violation\nevent.\n\n     restrict: Packets from MAC address of the device\n               causing security violation will be dropped.\n\n     shutdown: The port that causes security violation\n               will be shutdown.\"\"\",\n        }, # scalar\n        \"cpaeDot1xSuppToGuestVlanAllowed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether ports associated with 802.1x supplicants are\nallowed to move to Guest Vlan when they stop responding to EAPOL\ninquiries.\"\"\",\n        }, # scalar\n        \"cpaeSupplicantObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19\",\n        }, # node\n        \"cpaeSuppPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of objects providing information and configuration\nfor the Supplicant PAE associated with each port.  This\ntable provides additional objects for the dot1xSuppConfigTable.\"\"\",\n        }, # table\n        \"cpaeSuppPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing supplicant configuration information for a\nparticular PAE port.\"\"\",\n        }, # row\n        \"cpaeSuppPortCredentialProfileName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the credentials profile of the Supplicant PAE.\nA zero length string for this object indicates that the\nSupplicant PAE does not have credential profile.\"\"\",\n        }, # column\n        \"cpaeSuppPortEapProfileName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the EAP profile of the Supplicant PAE.  A zero\nlength string for this object indicates that the\nSupplicant PAE does not have EAP profile.\"\"\",\n        }, # column\n        \"cpaeSuppHostInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of dot1x supplicants in the system.\"\"\",\n        }, # table\n        \"cpaeSuppHostInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1xPaePortNumber\",\n                \"cpaeSuppHostInfoSuppIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing dot1x supplicant information for a\nsupplicant on a particular PAE port in the system.\"\"\",\n        }, # row\n        \"cpaeSuppHostInfoSuppIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An arbitrary index assigned by the agent to identify the\nsupplicant.\"\"\",\n        }, # column\n        \"cpaeSuppHostAuthMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the MAC address of the authenticator, which\nauthenticates the supplicant.\"\"\",\n        }, # column\n        \"cpaeSuppHostPaeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"logoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"connecting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authenticating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"authenticated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"acquired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"held\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"restart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"sForceAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"sForceUnauth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current state of the Supplicant PAE State\nmachine.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2004 9.5.1, Supplicant PAE State\"\"\",\n        }, # column\n        \"cpaeSuppHostBackendState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"request\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"response\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"receive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"timeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current state of the Supplicant Backend state\nmachine.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2004 9.5.1, Backend Supplicant state\"\"\",\n        }, # column\n        \"cpaeSuppHostStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.1.19.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8021-PAE-MIB\", \"name\" : \"PaeControlledPortStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the status of the supplicant.\"\"\",\n            \"reference>\" :\n                \"\"\"802.1X-2004 9.5.1, SuppControlledPortStatus\"\"\",\n        }, # column\n        \"cpaeMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2\",\n        }, # node\n        \"cpaeMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1\",\n        }, # node\n        \"cpaeMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cpaeNoGuestVlanNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dot1xAuthPaeState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IEEE8021-PAE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpaeNoGuestVlanNotif is sent if a non-802.1x\nsupplicant is detected on a PAE port for which the\nvalue of corresponding instance of\ndot1xAuthAuthControlledPortControl is 'auto' and the\nvalue of corresponding instance of cpaeGuestVlanNumber\nis zero.\"\"\",\n        }, # notification\n        \"cpaeNoAuthFailVlanNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dot1xAuthPaeState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IEEE8021-PAE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpaeNoAuthFailVlanNotif is sent if a 802.1x\nsupplicant fails to authenticate on a PAE port for\nwhich the value of corresponding instance of\ndot1xAuthAuthControlledPortControl is 'auto' and the\nvalue of corresponding instance of cpaePortAuthFailVlan\nis zero.\"\"\",\n        }, # notification\n        \"cpaeGuestVlanNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpaeGuestVlanNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"dot1xAuthPaeState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IEEE8021-PAE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpaeGuestVlanNotif is sent if value of the instance\nof cpaeGuestVlanNotifEnable is set to 'true', and a PAE\nport is being moved to the VLAN specified by value of\nthe corresponding instance of cpaeGuestVlanNumber.\"\"\",\n        }, # notification\n        \"cpaeAuthFailVlanNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpaePortAuthFailVlan\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"dot1xAuthPaeState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IEEE8021-PAE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpaeAuthFailVlanNotif is sent if value of the instance\nof cpaeAuthFailVlanNotifEnable is set to 'true', and a PAE\nport is being moved to the VLAN specified by value of\nthe corresponding instance of cpaePortAuthFailVlan.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cpaeMultipleHostGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaeMultipleHost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provide the multiple\nhost configuration information for a PAE port.\nThese are additional to the IEEE Std 802.1x PAE MIB.\"\"\",\n        }, # group\n        \"cpaePortEntryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the port-mode\nconfiguration for a PAE port.\"\"\",\n        }, # group\n        \"cpaeGuestVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaeGuestVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the Guest Vlan\nconfiguration information for the system.\"\"\",\n        }, # group\n        \"cpaeGuestVlanGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaeGuestVlanNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeInGuestVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the per-interface\nGuest Vlan configuration information for the system.\"\"\",\n        }, # group\n        \"cpaeShutdownTimeoutGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeShutdownTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeShutdownTimeoutEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the dot1x\nshutdown timeout configuration information for\nthe system.\"\"\",\n        }, # group\n        \"cpaeRadiusConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeRadiusAccountingEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the RADIUS\nconfiguration information for the system.\"\"\",\n        }, # group\n        \"cpaeUserGroupGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeUserGroupUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeUserGroupUserAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeUserGroupUserAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeUserGroupUserInterface\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeUserGroupUserVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the group manager\ninformation of authenticated users in the system.\"\"\",\n        }, # group\n        \"cpaeGuestVlanGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeGuestVlanNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that provides the per-interface\nGuest Vlan configuration information for the system.\"\"\",\n        }, # group\n        \"cpaePortOperVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortOperVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaePortOperVlanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the\ninformation about Operational Vlan for each PAE port.\"\"\",\n        }, # group\n        \"cpaePortAuthFailVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.10\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaePortAuthFailVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthFailUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the\nAuth-Fail (Authentication Fail) Vlan configuration\nand Auth-Fail user information for the system.\"\"\",\n        }, # group\n        \"cpaeNoGuestVlanNotifEnableGrp\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeNoGuestVlanNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\nGuest Vlan related notification(s).\"\"\",\n        }, # group\n        \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeNoAuthFailVlanNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\nAuth-Fail related notification(s).\"\"\",\n        }, # group\n        \"cpaeNoGuestVlanNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeNoGuestVlanNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notification(s) providing the\ninformation for unconfigured Guest Vlan.\"\"\",\n        }, # group\n        \"cpaeNoAuthFailVlanNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeNoAuthFailVlanNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications providing the\ninformation for unconfigured Auth-Fail Vlan.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.15\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaeMacAuthBypassReAuthTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassReAuthEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassViolation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassShutdownTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassAuthFailTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortInitialize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortReAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortAuthState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassAcctEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the\nMAC Auth-Bypass configuration and information\nfor the system.\"\"\",\n        }, # group\n        \"cpaeWebAuthGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeWebAuthEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthSessionPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthLoginPage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthLoginFailedPage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthQuietPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthMaxRetries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthPortEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthPortInitialize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthAaaSessionPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthHostSessionTimeLeft\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthHostState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeWebAuthHostInitialize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the\nWeb Proxy Authentication configuration and\ninformation for the system.\"\"\",\n        }, # group\n        \"cpaeAuthConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.17\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpaeAuthReAuthPeriodSrcAdmin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthPeriodSrcOper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthPeriodOper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthTimeToNextReAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthIabEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides additional\nconfiguration information about an Authenticator PAE.\"\"\",\n        }, # group\n        \"cpaeHostInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.18\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"cpaeHostInfoMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeHostInfoPostureToken\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information\nabout an host connecting to a PAE port.\"\"\",\n        }, # group\n        \"cpaeWebAuthAaaFailGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeWebAuthPortAaaFailPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides Inaccessible\nAuthentication Bypass configuration and information\nfor Web Proxy Authentication in the system.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMacAuthBypassPortTermAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassSessionTimeLeft\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides additional\ninformation of MAC Auth-bypass feature in the system.\"\"\",\n        }, # group\n        \"cpaePortEapolTestGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortEapolTestLimits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaePortEapolTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaePortEapolTestStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information\nabout if connecting hosts are EAPOL capable.\"\"\",\n        }, # group\n        \"cpaeHostInfoGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.22\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostInfoMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information\nabout an host connecting to a PAE port.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMacAuthBypassPortAuthMethod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration\nfor authentication method for MAC Auth-bypass feature\nin the system.\"\"\",\n        }, # group\n        \"cpaePortAuthFailVlanGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthFailVlanMaxAttempts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration\nfor maximum authentication attempts for Auth-Fail Vlan\nfeature in the system.\"\"\",\n        }, # group\n        \"cpaeAuthConfigGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.25\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthPaeState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides additional\nstates in the PAE state machine.\"\"\",\n        }, # group\n        \"cpaeCriticalRecoveryDelayGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.26\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeCriticalRecoveryDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides recovery delay\nconfiguration for 802.1x Critical Authentication\nin the system.\"\"\",\n        }, # group\n        \"cpaeAuthConfigGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.27\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthReAuthPeriodSrcAdmin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthPeriodSrcOper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthPeriodOper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthTimeToNextReAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeAuthReAuthAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration\nand information related to re-authentication of 802.1x\nports in the system.\"\"\",\n        }, # group\n        \"cpaeAuthConfigGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.28\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthReAuthMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration\nof maximum reauthentication attempts of 802.1x\nports in the system.\"\"\",\n        }, # group\n        \"cpaeAuthIabConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.29\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthIabEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) to enable/disable IAB feature\non capable interface for the system.\"\"\",\n        }, # group\n        \"cpaeGlobalAuthFailVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.30\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeGlobalAuthFailMaxAttempts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides global configuration\nand information about  maximum authentication attempts for\nAuth-Fail Vlan feature in the system.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassCriticalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.31\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMabCriticalRecoveryDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\ncritical configuration for Mac Authentication Bypass.\"\"\",\n        }, # group\n        \"cpaeWebAuthCriticalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.32\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeWebAuthCriticalRecoveryDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\ncritical configuration for Web Proxy Authentication.\"\"\",\n        }, # group\n        \"cpaeCriticalEapolConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.33\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeCriticalEapolEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides EAPOL\nconfiguration for 802.1x Critical Authentication\nin the system.\"\"\",\n        }, # group\n        \"cpaeHostPostureTokenGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.34\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostPostureTokenStr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information\nabout Posture Token of an host connecting to a PAE port.\"\"\",\n        }, # group\n        \"cpaeMabAuditInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.35\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMacAuthBypassPortSessionId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortUrlRedirect\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortPostureTok\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information about\nMAC Auth-Bypass Audit sessions.\"\"\",\n        }, # group\n        \"cpaeMabPortIpDevTrackConfGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.36\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMabPortIpDevTrackEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration and\ninformation about MAC Auth-Bypass IP Device Tracking\nfeature.\"\"\",\n        }, # group\n        \"cpaePortIpDevTrackConfGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.37\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortIpDevTrackEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration and\ninformation about 802.1x IP Device Tracking feature.\"\"\",\n        }, # group\n        \"cpaeHostUrlRedirectGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.38\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostUrlRedirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information about\nURL-redirection of 802.1x authenticated hosts.\"\"\",\n        }, # group\n        \"cpaeWebAuthIpDevTrackingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.39\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeWebAuthPortIpDevTrackEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration and\ninformation about Web Proxy Authentication IP Device\nTracking feature.\"\"\",\n        }, # group\n        \"cpaeWebAuthUnAuthTimeoutGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.40\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeWebAuthUnAuthStateTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration and\ninformation about Init State Timeout of Web Proxy\nAuthentication.\"\"\",\n        }, # group\n        \"cpaeHostInfoGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.41\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostInfoUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeHostInfoAddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeHostInfoAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides user and the\naddress information for 802.1x authenticated host.\"\"\",\n        }, # group\n        \"cpaeGlobalSecViolationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.42\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeGlobalSecViolationAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides global configuration\nand information about security violation action on PAE ports\nin the system.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassPortEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.43\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMacAuthBypassPortEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) to enable/disable Mac Auth-Bypass\non capable interfaces for the system.\"\"\",\n        }, # group\n        \"cpaeMacAuthBypassGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.44\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeMacAuthBypassReAuthEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassReAuthTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassViolation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassShutdownTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassAuthFailTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortInitialize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortReAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassPortAuthState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeMacAuthBypassAcctEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the\nMAC Auth-Bypass configuration and information\nfor the system.\"\"\",\n        }, # group\n        \"cpaeHostSessionIdGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.45\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostSessionId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides session\nidentification information for 802.1x hosts in the system.\"\"\",\n        }, # group\n        \"cpaeHostAuthInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.46\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeHostAuthPaeState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeHostBackendState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides state machines and\nauthentication information for 802.1x authenticated hosts\nin the system.\"\"\",\n        }, # group\n        \"cpaePortCapabilitiesConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.47\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortCapabilitiesEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration and\ninformation about PAE functionalities of ports in the systems.\"\"\",\n        }, # group\n        \"cpaeDot1xSuppToGuestVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.48\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeDot1xSuppToGuestVlanAllowed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides configuration that\nallows moving ports with 802.1x supplicants to Guest Vlan.\"\"\",\n        }, # group\n        \"cpaeGuestVlanNotifEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.49\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeGuestVlanNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\nGuest Vlan related notification(s).\"\"\",\n        }, # group\n        \"cpaeGuestVlanNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.50\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeGuestVlanNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications providing information\nfor Guest Vlan.\"\"\",\n        }, # group\n        \"cpaeAuthFailVlanNotifEnableGrp\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.51\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthFailVlanNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides control over\nAuth-Fail Vlan related notification(s).\"\"\",\n        }, # group\n        \"cpaeAuthFailVlanNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.52\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthFailVlanNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications providing information\nfor Auth-Fail Vlan.\"\"\",\n        }, # group\n        \"cpaePortAuthFailVlanConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.53\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaePortAuthFailVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the Auth-Fail\n(Authentication Fail) Vlan configuration for the system.\"\"\",\n        }, # group\n        \"cpaePortAuthFailUserInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.54\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeAuthFailUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides the Auth-Fail user\ninformation for the system.\"\"\",\n        }, # group\n        \"cpaeSuppPortProfileGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.55\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeSuppPortCredentialProfileName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeSuppPortEapProfileName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides Credential and\nEAP profiles configuration for a Supplicant PAE.\"\"\",\n        }, # group\n        \"cpaeSuppHostInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.2.56\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpaeSuppHostAuthMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeSuppHostPaeState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeSuppHostBackendState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeSuppHostStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object(s) that provides information about\nsupplicants in the system.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cpaeCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaeMultipleHostGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"cpaeCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Guest Vlan feature.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpaeCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout feature.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpaeCompliance4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout feature.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support RADIUS configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Group Manager for 802.1x feature.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpaeCompliance5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.5\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout feature.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support RADIUS configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Group Manager for 802.1x feature.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support MAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Web Proxy Authentication feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support remote reauthentication timer.\"\"\",\n                },\n                \"cpaeHostInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpaeCompliance6\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.6\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout feature.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support RADIUS configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Group Manager for 802.1x feature.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support MAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides additional information of\nMAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Web Proxy Authentication feature.\"\"\",\n                },\n                \"cpaeWebAuthAaaFailGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Inaccessible Authentication Bypass\nfor Web Proxy Authentication feature.\"\"\",\n                },\n                \"cpaeHostInfoGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortEapolTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for maximum authentication\nattempts for Auth-Fail Vlan feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support remote reauthentication timer,\nre-authentication action, maximum re-authentication\nattempts and critical configuration for PAE ports.\"\"\",\n                },\n                \"cpaeAuthConfigGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides additional states in the PAE state\nmachines.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides recovery delay configuration for 802.1x\nCritical Authentication.\"\"\",\n                },\n                \"cpaeMacAuthBypassCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support critical recovery delay configuration for\nMAC Authentication Bypass.\"\"\",\n                },\n                \"cpaeWebAuthCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support critical recovery delay configuration for\nWeb Proxy Authentication.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpaePortEapolTestStatus\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Only 'active', 'createAndGo' and 'destroy' are\nneeded to be supported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cpaeCompliance7\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.7\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout feature.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support RADIUS configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Group Manager for 802.1x feature.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support MAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides additional information of\nMAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for authentication\nmethod for MAC Authentication Bypass feature.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Web Proxy Authentication feature.\"\"\",\n                },\n                \"cpaeWebAuthAaaFailGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Inaccessible Authentication Bypass\nfor Web Proxy Authentication feature.\"\"\",\n                },\n                \"cpaeHostInfoGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostInfoGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortEapolTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for maximum authentication\nattempts for Auth-Fail Vlan feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support remote reauthentication timer,\nre-authentication action, maximum re-authentication\nattempts and critical configuration for PAE ports.\"\"\",\n                },\n                \"cpaeAuthConfigGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides additional states in the PAE state\nmachines.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides recovery delay configuration for 802.1x\nCritical Authentication.\"\"\",\n                },\n                \"cpaeMacAuthBypassCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support critical recovery delay configuration for\nMAC Authentication Bypass.\"\"\",\n                },\n                \"cpaeWebAuthCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support critical recovery delay configuration for\nWeb Proxy Authentication.\"\"\",\n                },\n                \"cpaeHostPostureTokenGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about Posture Token of\nhost(s) connecting to a PAE port.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpaePortEapolTestStatus\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Only 'active', 'createAndGo' and 'destroy' are\nneeded to be supported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cpaeCompliance8\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.8\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the devices which assign\ninterfaces to specific VLANs based on 802.1x authentication.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthAaaFailGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostInfoGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostInfoGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortEapolTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for maximum authentication\nattempts for Auth-Fail Vlan feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostPostureTokenGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMabAuditInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMabPortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostUrlRedirectGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthIpDevTrackingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthUnAuthTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGlobalAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGlobalSecViolationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeCriticalEapolConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides EAPOL configuration for 802.1x\nCritical Authentication.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthIabConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthConfigGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information related\nto re-authentication of 802.1x ports in the system.\"\"\",\n                },\n                \"cpaeAuthConfigGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpaePortEapolTestStatus\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Only 'active', 'createAndGo' and 'destroy' are\nneeded to be supported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cpaeCompliance9\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.9\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the devices which assign\ninterfaces to specific VLANs based on 802.1x authentication.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthAaaFailGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostInfoGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostInfoGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortEapolTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for maximum authentication\nattempts for Auth-Fail Vlan feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostPostureTokenGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMabAuditInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMabPortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostUrlRedirectGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthIpDevTrackingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeWebAuthUnAuthTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGlobalAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGlobalSecViolationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeCriticalEapolConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides EAPOL configuration for 802.1x\nCritical Authentication.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthIabConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthConfigGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information related\nto re-authentication of 802.1x ports in the system.\"\"\",\n                },\n                \"cpaeAuthConfigGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostSessionIdGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeHostAuthInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortCapabilitiesConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeDot1xSuppToGuestVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGuestVlanNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaeAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n                \"cpaePortAuthFailVlanConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupports Auth-Fail Vlan configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaePortAuthFailUserInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpaePortEapolTestStatus\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Only 'active', 'createAndGo' and 'destroy' are\nneeded to be supported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cpaeCompliance10\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PAE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.220.2.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for devices that implement\nthe CISCO-PAE-MIB.\"\"\",\n            \"requires\" : {\n                \"cpaePortEntryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PAE-MIB\"\n                },\n                \"cpaeGuestVlanGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeShutdownTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Shutdown Timeout for 802.1x.\"\"\",\n                },\n                \"cpaeRadiusConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support RADIUS accounting configuration for 802.1x.\"\"\",\n                },\n                \"cpaeUserGroupGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich support Group Manager for 802.1x.\"\"\",\n                },\n                \"cpaePortOperVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for the devices which assign\ninterfaces to specific VLANs based on 802.1x authentication.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports per-interface Guest Vlan feature.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich supports Auth-Fail Vlan configuration for\n802.1x feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about termination action and\nsession time left for Mac Authentication Bypass via\n802.1x feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration of authentication method\nfor Mac Authentication Bypass via 802.1x feature.\"\"\",\n                },\n                \"cpaeWebAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for Web Proxy Authentication\nvia 802.1x feature.\"\"\",\n                },\n                \"cpaeWebAuthAaaFailGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration of Inaccessible Authentication\nBypass for Web Proxy Authentication via 802.1x feature.\"\"\",\n                },\n                \"cpaeHostInfoGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides MAC address information of hosts connecting\nto PAE ports in the system.\"\"\",\n                },\n                \"cpaeHostInfoGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides user and IP address information for 802.1x\nauthenticated host in the system.\"\"\",\n                },\n                \"cpaePortEapolTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides EAPOL capable information of hosts connecting\nto PAE ports in the system.\"\"\",\n                },\n                \"cpaePortAuthFailVlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration for maximum authentication\nattempts for Auth-Fail Vlan feature.\"\"\",\n                },\n                \"cpaeAuthConfigGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides additional states in the PAE state machine.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides recovery delay configuration for 802.1x\nCritical Authentication in the system.\"\"\",\n                },\n                \"cpaeMacAuthBypassCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides control over critical configuration for Mac\nAuthentication Bypass via 802.1x feature.\"\"\",\n                },\n                \"cpaeWebAuthCriticalGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides control over critical configuration for Web\nProxy Authentication via 802.1x feature.\"\"\",\n                },\n                \"cpaeHostPostureTokenGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about Posture Token of hosts\nconnecting to  PAE ports.\"\"\",\n                },\n                \"cpaeMabAuditInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about MAC Auth-Bypass Audit\nsessions via 802.1x feature.\"\"\",\n                },\n                \"cpaeMabPortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information about MAC\nAuth-Bypass IP Device Tracking via 802.1x feature.\"\"\",\n                },\n                \"cpaePortIpDevTrackConfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information about\n802.1x IP Device Tracking feature.\"\"\",\n                },\n                \"cpaeHostUrlRedirectGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about URL-redirection of 802.1x\nauthenticated hosts.\"\"\",\n                },\n                \"cpaeWebAuthIpDevTrackingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information about Web\nProxy Authentication IP Device Tracking via 802.1x feature.\"\"\",\n                },\n                \"cpaeWebAuthUnAuthTimeoutGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information about Init State\nTimeout of Web Proxy Authentication via 802.1x feature.\"\"\",\n                },\n                \"cpaeGlobalAuthFailVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides global configuration and information about\nmaximum authentication attempts for Auth-Fail Vlan feature\nin the system.\"\"\",\n                },\n                \"cpaeGlobalSecViolationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides global configuration and information about\nsecurity violation action on PAE ports in the system.\"\"\",\n                },\n                \"cpaeCriticalEapolConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides EAPOL configuration for 802.1x\nCritical Authentication.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration to enable or disable MAC\nAuth-Bypass on capable ports via 802.1x feature.\"\"\",\n                },\n                \"cpaeMacAuthBypassGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information of MAC\nAuth-Bypass parameters via 802.1x feature.\"\"\",\n                },\n                \"cpaeAuthIabConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration to enable or disable IAB\nfeature on capable ports in the system.\"\"\",\n                },\n                \"cpaeAuthConfigGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information related\nto re-authentication of 802.1x ports in the system.\"\"\",\n                },\n                \"cpaeAuthConfigGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration of maximum reauthentication\nattempts of 802.1x ports in the system.\"\"\",\n                },\n                \"cpaeHostSessionIdGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides session identification information for 802.1x\nhosts in the system.\"\"\",\n                },\n                \"cpaeHostAuthInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides information about state machines and\nauthentication information for 802.1x authenticated hosts in\nthe system.\"\"\",\n                },\n                \"cpaePortCapabilitiesConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration and information about PAE\nfunctionalities of ports in the systems.\"\"\",\n                },\n                \"cpaeDot1xSuppToGuestVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides configuration that allows moving ports with\n802.1x supplicants to Guest Vlan.\"\"\",\n                },\n                \"cpaeGuestVlanNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides control over Guest Vlan related notification(s).\"\"\",\n                },\n                \"cpaeGuestVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides Guest-Vlan notification.\"\"\",\n                },\n                \"cpaeAuthFailVlanNotifEnableGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides control over Auth-Fail Vlan related\nnotification(s).\"\"\",\n                },\n                \"cpaeAuthFailVlanNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides Auth-Fail Vlan notification.\"\"\",\n                },\n                \"cpaePortAuthFailVlanConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupports Auth-Fail Vlan configuration for 802.1x feature.\"\"\",\n                },\n                \"cpaePortAuthFailUserInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software\nwhich provides the Auth-Fail user information in the system.\"\"\",\n                },\n                \"cpaeSuppPortProfileGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupports PAE supplicant credential and EAP profiles feature.\"\"\",\n                },\n                \"cpaeSuppHostInfoGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory in devices running software which\nsupports per-host supplicant feature.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpaePortMode\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeGuestVlanNumber\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeShutdownTimeoutEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaePortAuthFailVlan\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeAuthFailVlanMaxAttempts\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaePortCapabilitiesEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeShutdownTimeout\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeRadiusAccountingEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeNoGuestVlanNotifEnable\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeNoAuthFailVlanNotifEnable\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeGuestVlanNotifEnable\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeAuthFailVlanNotifEnable\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassReAuthTimeout\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassReAuthEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassViolation\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassShutdownTimeout\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassAuthFailTimeout\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortInitialize\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortReAuth\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassPortAuthMethod\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMacAuthBypassAcctEnable\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMabCriticalRecoveryDelay\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeMabPortIpDevTrackEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthSessionPeriod\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthLoginPage\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthLoginFailedPage\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthQuietPeriod\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthMaxRetries\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthPortEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthPortInitialize\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthPortAaaFailPolicy\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthPortIpDevTrackEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthHostInitialize\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthCriticalRecoveryDelay\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeWebAuthUnAuthStateTimeout\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeAuthReAuthPeriodSrcAdmin\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeAuthReAuthMax\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeAuthIabEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeCriticalEapolEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeCriticalRecoveryDelay\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaePortIpDevTrackEnabled\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeGlobalAuthFailMaxAttempts\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeGlobalSecViolationAction\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeDot1xSuppToGuestVlanAllowed\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeSuppPortCredentialProfileName\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaeSuppPortEapProfileName\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"cpaePortEapolTestStatus\" : {\n                    \"module\" : \"CISCO-PAE-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"writesyntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # writesyntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\n\nSupport for createAndWait and notInService is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-POWER-ETHERNET-EXT-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-POWER-ETHERNET-EXT-MIB\n\nFILENAME = \"/home/sigmunda/.snmp/mibs/CISCO-POWER-ETHERNET-EXT-MIB.txt\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n\n    \"CISCO-POWER-ETHERNET-EXT-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA 95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-lan-switch-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"A MIB module for extending the POWER-ETHERNET-MIB\n(RFC3621) to add objects which provide additional\nmanagement information about Power Sourcing Equipment\n(PSE) not available in POWER-ETHERNET-MIB.\n\nGlossary\n\nPower Sourcing Equipment (PSE)\n    These are devices supplying electrical power to\n    other equipment. They are, for example, inline power\n    switches, inline power daughterboards and power patch\n    panels.\n\nPowered Device (PD)\n    These are devices receiving their electrical power\n    supply from Power Sourcing Equipment. They are, for\n    example, IP telephones and wireless access points\n    or bridges.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2009-12-04 00:00\",\n                \"description\" :\n                    \"\"\"Updated the DESCRIPTION of cpeExtPolicingNotif.\"\"\",\n            },\n            {\n                \"date\" : \"2007-04-12 00:00\",\n                \"description\" :\n                    \"\"\"Added 'overdrawLog' value to cpeExtPsePortAdditionalStatus.\nAdded cpeExtPortPolicingActionGroup, cpeExtPortPwrManAllocGroup\ncpeExtPolicingNotifEnableGroup, and cpeExtPolicingNotifGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2007-02-02 00:00\",\n                \"description\" :\n                    \"\"\"Added cpeExtPsePortEntPhyIndex,\ncpeExtPsePortPolicingCapable and \ncpeExtPsePortPolicingEnable to cpeExtPsePortTable.\nAdded cpeExtPdStatsTotalDevices and cpeExtPdStatsTable.\nAdded enumerated value disable(5) to cpeExtPsePortEnable.\"\"\",\n            },\n            {\n                \"date\" : \"2005-06-10 00:00\",\n                \"description\" :\n                    \"\"\"Added 'limit' to cpeExtPsePortEnable, 'overdraw' to\ncpeExtPsePortAdditionalStatus and the groups\ncpeExtPsePortPwrMonitorGroup and\ncpeExtMainPseGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2004-04-12 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoPowerEthernetExtMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"POWER-ETHERNET-MIB\", \"name\" : \"pethPsePortEntry\"},\n        {\"module\" : \"POWER-ETHERNET-MIB\", \"name\" : \"pethMainPseGroupIndex\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoPowerEthernetExtMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402\",\n            \"status\" : \"current\",\n        }, # node\n        \"cpeExtMIBNotifs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.0\",\n        }, # node\n        \"cpeExtMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1\",\n        }, # node\n        \"cpeExtDefaultAllocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This object indicates the default inline power allocation per\nport. This is a global configuration parameter that applies\nto all inline power capable ports in the system.\n\nThe system must consider this object as well as the per port\nconfiguration object, cpeExtPsePortPwrMax, when determining\nhow much power to allocate to a port. The system will use the\nlower of the two numbers.\"\"\",\n        }, # scalar\n        \"cpeExtPsePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table extends the POWER-ETHERNET-MIB pethPsePortTable\nfor power Ethernet ports on a Powered Sourcing Equipment\n(PSE) device.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC3621\"\"\",\n        }, # table\n        \"cpeExtPsePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"POWER-ETHERNET-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"pethPsePortEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"A cpeExtPsePortEntry extends a corresponding\npethPsePortTable entry. This entry displays and\ncontrols more characteristics of a power Ethernet\nport on a PSE device.\"\"\",\n        }, # row\n        \"cpeExtPsePortEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"limit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is an extension of the pethPsePortAdminEnable\nobject from RFC3621. It allows the user to be more specific\nwhen enabling the PSE functions. The states, 'auto', 'static'\nand 'limit' correspond to a value of 'true' for the\npethPsePortAdminEnable object. The state 'disable' corresponds\nto a value of 'false' for the pethPsePortAdminEnable object.\n\nSetting this value to 'auto' enables Powered Device discovery\non the interface and the amount of power allocated depends on\nthe Powered Device discovered. If pethPsePortAdminEnable was\n'false' prior to this set operation, then it will become\n'true'.\n\nSetting this value to 'static' will also enable Powered\nDevice discovery. However, this is different from 'auto'\nin that the amount of power is pre-allocated based on the\nconfiguration on the Power Sourcing Equipment. If\npethPsePortAdminEnable was 'false' prior to this set\noperation, then it will become 'true'.\n\nSetting this value to 'limit' enables Powered Device\ndiscovery on the interface. The amount of power allocated\ndepends on the Powered Device discovered and the value\nof cpeExtPsePortPwrMax. The lower value will be used.\nIf pethPsePortAdminEnable was 'false' prior to this set\noperation, then it will become 'true'.\n\nSetting this value to 'disable' disables the PSE functions.\nThe pethPsePortAdminEnable object will adopt the value of\n'false' if it was 'true' prior to this set operation. When\nsetting the pethPsePortAdminEnable object to 'false' this\nobject cpeExtPsePortEnable will adopt the value of 'disable'.\n\nIf cpeExtPsePortPolicingCapable of the PSE port, or\ncpeExtMainPsePwrMonitorCapable of the PSE port's\nmain group, has the value of 'false', this object\ncan only be set to 'auto', 'static' or 'disable'.\nOtherwise, this object can be set to 'auto', 'static',\n'limit' or 'disable'.\"\"\",\n        }, # column\n        \"cpeExtPsePortDiscoverMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ieee\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"cisco\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ieeeAndCisco\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the discover mode used by the system to\ndiscover the PD.\n\nA value of 'unknown' indicates that the discover mode on the\ninterface is unknown.\n\nA value of 'off' indicates that discovery is disabled on the\ninterface.\n\nA value of 'ieee' indicates that the discover mode on the\ninterface is IEEE based.\n\nA value of 'cisco' indicates that the discover mode on the\ninterface is Cisco based.\n\nA value of 'ieeeAndCisco' indicates that the discover mode on\nthe interface is both IEEE and Cisco based.\"\"\",\n        }, # column\n        \"cpeExtPsePortDeviceDetected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates if a Powered Device (PD) has been\ndetected on the interface.\n\nA value of 'true' indicates that a PD has been detected on\nthe interface.\n\nA value of 'false' indicates that no PD has been detected on\nthe interface.\"\"\",\n        }, # column\n        \"cpeExtPsePortIeeePd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether the Powered Device attached\nto the interface is an IEEE compliant Powered Device or not.\n\nA value of 'true' indicates the attached Powered Device is\nan IEEE compliant Powered Device.\n\nA value of 'false' indicates the attached Powered Device\nis not an IEEE compliant Powered Device. This also means\nthat the value of the corresponding object from the\npethPsePortTable, pethPsePortPowerClassifications is\nirrelevant.\"\"\",\n        }, # column\n        \"cpeExtPsePortAdditionalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"overdraw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"overdrawLog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object is an extension of the pethPsePortDetectionStatus\nobject from RFC3621 and provides additional status\ninformation.\n\ndeny: When set, the PD attached to the interface is being\n      denied power due to insufficient power resources on\n      the Power Sourcing Equipment.\n\noverdraw: When set, the PD attached to the interface is \n          being denied power because the PD is trying \n          to consume more power than it has been \n          configured to consume.\n\noverdrawLog: When set, the PD attached to the interface \n             is trying to consume more power than it has \n             been configured to consume, but is not being \n             denied power.\"\"\",\n        }, # column\n        \"cpeExtPsePortPwrMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This indicates the maximum amount of power that the PSE will\nmake available to the PD connected to this interface.\"\"\",\n        }, # column\n        \"cpeExtPsePortPwrAllocated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This object indicates the amount of power allocated from the\nPSE for the PD.\"\"\",\n        }, # column\n        \"cpeExtPsePortPwrAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This object indicates the amount of power available for\nthe PD to use. This value may differ from the value\ncpeExtPsePortPwrAllocated due to the efficiency issues\nof delivering the power from the PSE to the PD.\n\nWhen sufficient power is available to power a PD, this\nvalue should be equal to the lower of the two objects,\ncpeExtDefaultAllocation and cpeExtPsePortPwrMax.\"\"\",\n        }, # column\n        \"cpeExtPsePortPwrConsumption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This indicates the actual power consumption of the PD\nconnected to this interface. It may not necessarily\nbe equal to the value of cpeExtPsePortPwrAvailable.\"\"\",\n        }, # column\n        \"cpeExtPsePortMaxPwrDrawn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This indicates the maximum amount of power drawn by the PD\nconnected to this interface, since it was powered on.\"\"\",\n        }, # column\n        \"cpeExtPsePortEntPhyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The entPhysicalIndex value that uniquely identifies the\nPSE port. If the PSE port does not have a corresponding \nphysical entry in entPhysicalTable or if the \nentPhysicalTable is not supported by the management\nsystem, this object has the value of zero.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2737, entPhysicalIndex.\"\"\",\n        }, # column\n        \"cpeExtPsePortPolicingCapable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether the PSE port hardware is\ncapable of policing the port for proper power consumption \nbased on the allocated value.\"\"\",\n        }, # column\n        \"cpeExtPsePortPolicingEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object allows the user to turn on or turn off the\npower policing of the PSE port. If the instance value of \ncpeExtPsePortPolicingCapable is 'TRUE', the user is allowed\nto set this object to 'on' or 'off'. Otherwise, this\nobject is read-only and always has the value of 'off'.\"\"\",\n        }, # column\n        \"cpeExtPsePortPolicingAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"logOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the power policing action that\nthe device will take on this PSE port when the real-time \npower consumption exceeds its max power allocation if \nthe value of cpeExtPsePortPolicingEnable is 'on'. \n     'deny'          - the device will deny the power to \n                       the PSE port \n     'logOnly'       - the device will not deny the power \n                       to the PSE port\"\"\",\n        }, # column\n        \"cpeExtPsePortPwrManAlloc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"milliwatts\",\n            \"description\" :\n                \"\"\"This object specifies the manual power allocation that\nthe PSE will allocate to the PD connected to this \ninterface regardless of the amount requested via CDP \nor IEEE. \n\nSetting this object value to zero disables the manual \npower allocation. \n\nWarning: Misconfiguring this manual power allocation may \ncause demage to the system and void the warranty. Take \nprecautions not to oversubscribe the power supply.\"\"\",\n        }, # column\n        \"cpeExtMainPseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the additional information for the\nmain PSE group in pethMainPseTable.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC3621, pethMainPseTable\"\"\",\n        }, # table\n        \"cpeExtMainPseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pethMainPseGroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"A cpeExtMainPseEntry contains information about\na particular pethMainPseGroupIndex. An entry is\ncreated by the agent when a main PSE group is added\nto the pethMainPseTable. An entry is deleted by the\nagent when a main PSE group is removed from the\npethMainPseTable.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC3621, pethMainPseTable\"\"\",\n        }, # row\n        \"cpeExtMainPseEntPhyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The entPhysicalIndex value that uniquely identifies the\nmain PSE group. If the main PSE group does not have a\ncorresponding physical entry in entPhysicalTable or if\nthe entPhysicalTable is not supported by the management\nsystem, then this object has the value of zero.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2737, entPhysicalIndex.\"\"\",\n        }, # column\n        \"cpeExtMainPseDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual string containing information about the Power\nSource Equipment (PSE) group.\"\"\",\n        }, # column\n        \"cpeExtMainPsePwrMonitorCapable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates if the given group is capable of\nmonitoring the power consumption of the interfaces that\nbelong to the group. The value 'true' means that the\ngroup is capable. The value 'false' means that the group\nin not capable.\"\"\",\n        }, # column\n        \"cpeExtPdStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4\",\n        }, # node\n        \"cpeExtPdStatsTotalDevices\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the total number of the\npowered devices with any power classifications\nin the system.\n\nClassification is a way to tag different terminals\non the Power over LAN network according to their\npower consumption. Devices such as IP telephones,\nWLAN access points and others, will be classified\naccording to their power requirements.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.6\naPSEPowerClassification\"\"\",\n        }, # scalar\n        \"cpeExtPdStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the statistics information\nof the powered devices fallen into different power\nclassifications in the system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.6\naPSEPowerClassification\"\"\",\n        }, # table\n        \"cpeExtPdStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpeExtPdStatsClass\",\n            ],\n            \"description\" :\n                \"\"\"A cpeExtPdStatsEntry contains the statistics\ninformation about a particular power classification\ndefined in cpeExtPdStatsIndex.\"\"\",\n        }, # row\n        \"cpeExtPdStatsClass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cisco\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"class0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"class1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"class2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"class3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The power classification as the index for the\nstatistics information for powered devices.\n\nA value of 'cisco' indicates that the powered\ndevices are CISCO proprietary and their power \nclassification does not fall into any class\nin IEEE specifications.\n\nA value of 'class0' indicates that the power \nclassification of the powered devices falls into\nclass 0 in IEEE specifications.\n\nA value of 'class1' indicates that the power\nclassification of the powered devices falls into\nclass 1 in IEEE specifications.\n\nA value of 'class2' indicates that the power\nclassification of the powered devices falls into\nclass 2 in IEEE specifications.\n\nA value of 'class3' indicates that the power\nclassification of the powered devices falls into\nclass 3 in IEEE specifications.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.6\naPSEPowerClassification\"\"\",\n        }, # column\n        \"cpeExtPdStatsDeviceCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the count of the powered\ndevices whose power classification falls into \na specific value of cpeExtPdStatsIndex.\"\"\",\n        }, # column\n        \"cpeExtPolicingNotifEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to enable/disable the\nthe cpeExtPolicingNotif notification.\"\"\",\n        }, # scalar\n        \"cpeExtMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2\",\n        }, # node\n        \"cpeExtMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.1\",\n        }, # node\n        \"cpeExtMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cpeExtPolicingNotif\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpeExtPsePortPolicingAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortAdditionalStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPwrAllocated\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortMaxPwrDrawn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This notification is generated when the 'overdraw' or\n'overdrawLog' bit in value of cpeExtPsePortAdditionalStatus\nis set or cleared.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cpeExtPsePortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortDiscoverMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortDeviceDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortIeeePd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortAdditionalStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPwrMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPwrAllocated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPwrAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPwrConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This group provides information and configuration objects\nin addition to those provided in the POWER-ETHERNET-MIB\n(RFC3621).\"\"\",\n        }, # group\n        \"cpeExtPsePortGlobalConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtDefaultAllocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide global\nconfiguration of the PSE interfaces.\"\"\",\n        }, # group\n        \"cpeExtPsePortPwrMonitorGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortMaxPwrDrawn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide power\nmonitoring on PD's connected to the PSE interfaces.\"\"\",\n        }, # group\n        \"cpeExtMainPseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpeExtMainPseEntPhyIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtMainPseDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtMainPsePwrMonitorCapable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\nadditional information for the PSE group.\"\"\",\n        }, # group\n        \"cpeExtPortEntityIndexGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortEntPhyIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\nentity physical index information for PSE port.\"\"\",\n        }, # group\n        \"cpeExtPortPolicingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortPolicingCapable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortPolicingEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\nthe hardware power consumption policing information \nfor PSE port.\"\"\",\n        }, # group\n        \"cpeExtPdStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPdStatsTotalDevices\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPdStatsDeviceCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\nthe statistics information for powered devices.\"\"\",\n        }, # group\n        \"cpeExtMainPseGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtMainPseEntPhyIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtMainPseDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\nadditional information to identify the PSE group.\"\"\",\n        }, # group\n        \"cpeExtPseGrpPwrGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtMainPsePwrMonitorCapable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide\npower monitoring information for the PSE group.\"\"\",\n        }, # group\n        \"cpeExtPortPolicingActionGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortPolicingAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide control\nof the power policing action of the PSE port.\"\"\",\n        }, # group\n        \"cpeExtPortPwrManAllocGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPsePortPwrManAlloc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of objects which provide manual\npower allocation for the PSE port.\"\"\",\n        }, # group\n        \"cpeExtPolicingNotifEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPolicingNotifEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object that provides control over\npower consumption policing status notification.\"\"\",\n        }, # group\n        \"cpeExtPolicingNotifGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpeExtPolicingNotif\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"This is a collection of notifications related to\npower consumption policing information for PSE ports.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cpeExtMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for the\nCISCO-POWER-ETHERNET-EXT-MIB.\"\"\",\n            \"requires\" : {\n                \"cpeExtPsePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortGlobalConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPsePortGlobalConfigGroup is mandatory for agents\nthat support global configurations on the PSE interfaces.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpeExtMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for the\nCISCO-POWER-ETHERNET-EXT-MIB.\"\"\",\n            \"requires\" : {\n                \"cpeExtPsePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortGlobalConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPsePortGlobalConfigGroup is mandatory for agents\nthat support global configurations on the PSE interfaces.\"\"\",\n                },\n                \"cpeExtPsePortPwrMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPsePortPwrMonitorGroup is mandatory for agents\nthat provide power monitoring on PD's connected to the\nPSE interfaces.\"\"\",\n                },\n                \"cpeExtMainPseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtMainPseGroup is mandatory for agents\nthat support the interface power consumption\nmonitoring, or need additional info to identify\nthe PSE group.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cpeExtMIBCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.402.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for the\nCISCO-POWER-ETHERNET-EXT-MIB.\"\"\",\n            \"requires\" : {\n                \"cpeExtPsePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\"\n                },\n                \"cpeExtPsePortGlobalConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPsePortGlobalConfigGroup is mandatory for agents\nthat support global configurations on the PSE interfaces.\"\"\",\n                },\n                \"cpeExtPsePortPwrMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPsePortPwrMonitorGroup is mandatory for agents\nthat provide power monitoring on PD's connected to the\nPSE interfaces.\"\"\",\n                },\n                \"cpeExtMainPseGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtMainPseGroup2 is mandatory for agents\nthat need additional information to identify the PSE \ngroup.\"\"\",\n                },\n                \"cpeExtPseGrpPwrGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPseGrpPwrGroup is mandatory for agents\nthat support the power consumption monitoring for\nPSE groups.\"\"\",\n                },\n                \"cpeExtPortEntityIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPortEntityIndexGroup is mandatory for agents\nthat needs additional info to identify the interfaces \nof the PSE port.\"\"\",\n                },\n                \"cpeExtPortPolicingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPortPolicingGroup is mandatory for agents\nthat provide power consumption policing for the PSE \nports.\"\"\",\n                },\n                \"cpeExtPdStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPdStatsGroup is mandatory for agents\nthat provide the statistics information for powered \ndevices.\"\"\",\n                },\n                \"cpeExtPortPolicingActionGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPortPolicingActionGroup is mandatory\nfor agents that provide control of the power policing\naction.\"\"\",\n                },\n                \"cpeExtPortPwrManAllocGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPortPolicingActionGroup is mandatory\nfor agents that provide manual power allocation.\"\"\",\n                },\n                \"cpeExtPolicingNotifEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPolicingNotifEnableGroup is mandatory for agents\nthat provide notifications of power consumption policing\nstatus for the PSE ports.\"\"\",\n                },\n                \"cpeExtPolicingNotifGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-POWER-ETHERNET-EXT-MIB\",\n                    \"description\" :\n                        \"\"\"The cpeExtPolicingNotifGroup is mandatory for agents\nthat provide notifications of power consumption policing\nstatus for the PSE ports.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-PROCESS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-PROCESS-MIB\n\nFILENAME = \"CISCO-PROCESS-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-PROCESS-MIB\",\n\n    \"CISCO-PROCESS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module to describe active system processes.\nVirtual Machine refers to those OS which can run the \ncode or process of a different executional model OS.\nVirtual Process assume the executional model \nof a OS which is different from Native OS. Virtual\nProcesses are also referred as Tasks.\nThread is a sequence of instructions to be executed\nwithin a program. Thread which adhere to POSIX standard\nis referred as a POSIX thread.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2007-03-23 00:00\",\n                \"description\" :\n                    \"\"\"Added new objects to support POSIX compliant OS. Added\ncpmThread, cpmThreadTable, cpmVirtualProcess, \ncpmVirtualProcessTable and updated cpmCPUTotalTable, \ncpmProcessExtRevTable. Added cProcessMIBComplianceRev2\nby deprecating cProcessMIBComplianceRev1. Added \ncpmCPUPosixMemoryGroup, cpmPosixProcessGroup, \ncpmThreadGroup, cpmVirtualProcessGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2003-01-22 00:00\",\n                \"description\" :\n                    \"\"\"cpmCPUThresholdTable, cpmCPUHistoryTable,\ncpmCPUProcessHistoryTable are added for CPU thresholding \nfeature.\"\"\",\n            },\n            {\n                \"date\" : \"2001-05-18 00:00\",\n                \"description\" :\n                    \"\"\"The objects cpmProcExtUtil5Sec, cpmProcExtUtil1Min,\ncpmProcExtUtil5Min,cpmCPUTotal5sec, cpmCPUTotal1min \nand cpmCPUTotal5min are deprecated to increase the\nvalue range as 0..100. The table cpmProcessExtTable\nis deprecated. The new objects added are \ncpmProcessExtRevTable, cpmProcExtMemAllocatedRev,\ncpmProcExtMemFreedRev, cpmProcExtInvokedRev, \ncpmProcExtRuntimeRev, cpmProcExtUtil5SecRev,\ncpmProcExtUtil1MinRev, cpmCPUTotal5MinRev, \ncpmCPUTotal5secRev, cpmCPUTotal1minRev and \ncpmCPUTotal5minRev.\"\"\",\n            },\n            {\n                \"date\" : \"1998-04-15 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoProcessMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoProcessMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoProcessMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1\",\n        }, # node\n        \"cpmCPU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1\",\n        }, # node\n        \"cpmCPUTotalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of overall CPU statistics.\"\"\",\n        }, # table\n        \"cpmCPUTotalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Overall information about the CPU load. Entries in this\ntable come and go as CPUs are added and removed from the\nsystem.\"\"\",\n        }, # row\n        \"cpmCPUTotalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index that uniquely represents a CPU (or group of CPUs)\nwhose CPU load information is reported by a row in this table.\nThis index is assigned arbitrarily by the engine\nand is not saved over reboots.\"\"\",\n        }, # column\n        \"cpmCPUTotalPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"EntPhysicalIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The entPhysicalIndex of the physical entity for which\nthe CPU statistics in this entry are maintained.\nThe physical entity can be a CPU chip, a group of CPUs,\na CPU card etc. The exact type of this entity is described by\nits entPhysicalVendorType value. If the CPU statistics\nin this entry correspond to more than one physical entity\n(or to no physical entity), or if the entPhysicalTable is\nnot supported on the SNMP agent, the value of this object\nmust be zero.\"\"\",\n        }, # column\n        \"cpmCPUTotal5sec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 5 second\nperiod. This object obsoletes the busyPer object from \nthe OLD-CISCO-SYSTEM-MIB. This object is deprecated\nby cpmCPUTotal5secRev which has the changed range of\nvalue (0..100).\"\"\",\n        }, # column\n        \"cpmCPUTotal1min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 1 minute\nperiod. This object obsoletes the avgBusy1 object from \nthe OLD-CISCO-SYSTEM-MIB. This object is deprecated\nby cpmCPUTotal1minRev which has the changed range\nof value (0..100).\"\"\",\n        }, # column\n        \"cpmCPUTotal5min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 5 minute\nperiod. This object deprecates the avgBusy5 object from \nthe OLD-CISCO-SYSTEM-MIB. This object is deprecated\nby cpmCPUTotal5minRev which has the changed range \nof value (0..100).\"\"\",\n        }, # column\n        \"cpmCPUTotal5secRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 5 second\nperiod. This object deprecates the object cpmCPUTotal5sec \nand increases the value range to (0..100). This object\nis deprecated by cpmCPUTotalMonIntervalValue\"\"\",\n        }, # column\n        \"cpmCPUTotal1minRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 1 minute\nperiod. This object deprecates the object cpmCPUTotal1min \nand increases the value range to (0..100).\"\"\",\n        }, # column\n        \"cpmCPUTotal5minRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last 5 minute\nperiod. This object deprecates the object cpmCPUTotal5min \nand increases the value range to (0..100).\"\"\",\n        }, # column\n        \"cpmCPUMonInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"CPU usage monitoring interval. The value of this\nobject in seconds indicates the how often the \nCPU utilization is calculated and monitored.\"\"\",\n        }, # column\n        \"cpmCPUTotalMonIntervalValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the last\ncpmCPUMonInterval period. \nThis object deprecates the object cpmCPUTotal5secRev.\"\"\",\n        }, # column\n        \"cpmCPUInterruptMonIntervalValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The overall CPU busy percentage in the\ninterrupt context in the last cpmCPUMonInterval\nperiod.\"\"\",\n        }, # column\n        \"cpmCPUMemoryUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"The overall CPU wide system memory which is currently\nunder use.\"\"\",\n        }, # column\n        \"cpmCPUMemoryFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"The overall CPU wide system memory which is currently\nfree.\"\"\",\n        }, # column\n        \"cpmCPUMemoryKernelReserved\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"The overall CPU wide system memory which is reserved\nfor kernel usage.\"\"\",\n        }, # column\n        \"cpmCPUMemoryLowest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The lowest free memory that has been recorded since\ndevice has booted.\"\"\",\n        }, # column\n        \"cpmProcess\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2\",\n        }, # node\n        \"cpmProcessTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of generic information on all active\nprocesses on this device.\"\"\",\n        }, # table\n        \"cpmProcessEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmProcessPID\",\n            ],\n            \"description\" :\n                \"\"\"Generic information about an active process on this\ndevice. Entries in this table come and go as processes are \ncreated and destroyed by the device.\"\"\",\n        }, # row\n        \"cpmProcessPID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains the process ID. cpmTimeCreated\nshould be checked against the last time it was polled,\nand if it has changed the PID has been reused and the\nentire entry should be polled again.\"\"\",\n        }, # column\n        \"cpmProcessName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name associated with this process. If the name is\nlonger than 32 characters, it will be truncated to the first\n31 characters, and a `*' will be appended as the last\ncharacter to imply this is a truncated process name.\"\"\",\n        }, # column\n        \"cpmProcessuSecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"microseconds\",\n            \"description\" :\n                \"\"\"Average elapsed CPU time in microseconds when the\nprocess was active. This object is deprecated\nby cpmProcessAverageUSecs.\"\"\",\n        }, # column\n        \"cpmProcessTimeCreated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time when the process was created. The process ID\nand the time when the process was created, uniquely \nidentifies a process.\"\"\",\n        }, # column\n        \"cpmProcessAverageUSecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"microseconds\",\n            \"description\" :\n                \"\"\"Average elapsed CPU time in microseconds when the\nprocess was active. This object deprecates the\nobject cpmProcessuSecs.\"\"\",\n        }, # column\n        \"cpmProcessExtTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"This table contains information that may or may\nnot be available on all cisco devices. It contains\nadditional objects for the more general\ncpmProcessTable. This object is deprecated by\ncpmProcessExtRevTable.\"\"\",\n        }, # table\n        \"cpmProcessExtEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                { \"CISCO-PROCESS-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"cpmProcessEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional information for\na particular process. This object is deprecated by\ncpmProcessExtRevEntry.\"\"\",\n        }, # row\n        \"cpmProcExtMemAllocated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The sum of all the dynamically allocated memory that\nthis process has received from the system. This includes\nmemory that may have been returned. The sum of freed\nmemory is provided by cpmProcExtMemFreed. This object\nis deprecated by cpmProcExtMemAllocatedRev.\"\"\",\n        }, # column\n        \"cpmProcExtMemFreed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The sum of all memory that this process has returned\nto the system. This object is deprecated by \ncpmProcExtMemFreedRev.\"\"\",\n        }, # column\n        \"cpmProcExtInvoked\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times since cpmTimeCreated that\nthe process has been invoked. This object is\ndeprecated by cpmProcExtInvokedRev.\"\"\",\n        }, # column\n        \"cpmProcExtRuntime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"microseconds\",\n            \"description\" :\n                \"\"\"The amount of CPU time the process has used, in\nmicroseconds. This object is deprecated by\ncpmProcExtRuntimeRev.\"\"\",\n        }, # column\n        \"cpmProcExtUtil5Sec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 5 \nsecond period. It is determined as a weighted \ndecaying average of the current idle time over \nthe longest idle time. Note that this information \nshould be used as an estimate only. This object is \ndeprecated by cpmProcExtUtil5SecRev which has the \nchanged range of value (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtUtil1Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 1 \nminute period. It is determined as a weighted \ndecaying average of the current idle time over the \nlongest idle time. Note that this information \nshould be used as an estimate only. This object is \ndeprecated by cpmProcExtUtil1MinRev which has\nthe changed range of value (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtUtil5Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 5 \nminute period. It is determined as a weighted \ndecaying average of the current idle time over \nthe longest idle time. Note that this information \nshould be used as an estimate only. This object\nis deprecated by cpmProcExtUtil5MinRev which\nhas the changed range of value (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.2.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notAssigned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The priority level at which the process is\nrunning. This object is deprecated by\ncpmProcExtPriorityRev.\"\"\",\n        }, # column\n        \"cpmProcessExtRevTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information that may or may\nnot be available on all cisco devices. It contains\nadditional objects for the more general\ncpmProcessTable. This object deprecates \ncpmProcessExtTable.\"\"\",\n        }, # table\n        \"cpmProcessExtRevEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmProcessPID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional information for\na particular process. This object deprecates \ncpmProcessExtEntry.\"\"\",\n        }, # row\n        \"cpmProcExtMemAllocatedRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The sum of all the dynamically allocated memory that\nthis process has received from the system. This includes\nmemory that may have been returned. The sum of freed\nmemory is provided by cpmProcExtMemFreedRev. This object\ndeprecates cpmProcExtMemAllocated.\"\"\",\n        }, # column\n        \"cpmProcExtMemFreedRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"The sum of all memory that this process has returned\nto the system. This object  deprecates \ncpmProcExtMemFreed.\"\"\",\n        }, # column\n        \"cpmProcExtInvokedRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times since cpmTimeCreated that\nthe process has been invoked. This object \ndeprecates cpmProcExtInvoked.\"\"\",\n        }, # column\n        \"cpmProcExtRuntimeRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"microseconds\",\n            \"description\" :\n                \"\"\"The amount of CPU time the process has used, in\nmicroseconds. This object deprecates\ncpmProcExtRuntime.\"\"\",\n        }, # column\n        \"cpmProcExtUtil5SecRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 5 \nsecond period. It is determined as a weighted \ndecaying average of the current idle time over \nthe longest idle time. Note that this information \nshould be used as an estimate only. This object\ndeprecates cpmProcExtUtil5Sec and increases the \nvalue range to (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtUtil1MinRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 1 \nminute period. It is determined as a weighted \ndecaying average of the current idle time over the \nlongest idle time. Note that this information \nshould be used as an estimate only. This object \ndeprecates cpmProcExtUtil1Min and increases the value\nrange to (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtUtil5MinRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This object provides a general idea of how busy\na process caused the processor to be over a 5 \nminute period. It is determined as a weighted \ndecaying average of the current idle time over \nthe longest idle time. Note that this information \nshould be used as an estimate only. This object\ndeprecates cpmProcExtUtil5Min and increases the\nvalue range to (0..100).\"\"\",\n        }, # column\n        \"cpmProcExtPriorityRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notAssigned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The priority level at  which the process is\nrunning. This object deprecates \ncpmProcExtPriority.\"\"\",\n        }, # column\n        \"cpmProcessType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"posix\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ios\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates the kind of process in context.\"\"\",\n        }, # column\n        \"cpmProcessRespawn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates whether respawn of a process is enabled\nor not. If enabled the process in context repawns after\nit has crashed/stopped.\"\"\",\n        }, # column\n        \"cpmProcessRespawnCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates the number of times the process has\nrespawned/restarted.\"\"\",\n        }, # column\n        \"cpmProcessRespawnAfterLastPatch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates the number of times a process has\nrestarted after the last patch is applied. This is to \ndetermine the stability of the last patch.\"\"\",\n        }, # column\n        \"cpmProcessMemoryCore\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mainmem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mainmemSharedmem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mainmemText\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mainmemTextSharedmem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"sharedmem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sparse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates the part of process memory to be\ndumped when a process crashes. The process \nmemory is used for debugging purposes to trace the \nroot cause of the crash.\nsparse        - Some operating systems support minimal\n                dump of process core like register\n                info, partial stack, partial memory\n                pages especially for critical process\n                to facilitate faster process restart.\"\"\",\n        }, # column\n        \"cpmProcessLastRestartUser\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicate the user that has last restarted the\nprocess or has taken running coredump of the process.\"\"\",\n        }, # column\n        \"cpmProcessTextSegmentSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"This indicates the text memory of a process and all\nits shared objects.\"\"\",\n        }, # column\n        \"cpmProcessDataSegmentSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"This indicates the data segment of a process and\nall its shared objects.\"\"\",\n        }, # column\n        \"cpmProcessStackSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"This indicates the amount of stack memory used by the\nprocess.\"\"\",\n        }, # column\n        \"cpmProcessDynamicMemorySize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kilo-bytes\",\n            \"description\" :\n                \"\"\"This indicates the amount of dynamic memory being used\nby the process.\"\"\",\n        }, # column\n        \"cpmCPUThresholdTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the information about the\nthresholding values for CPU , configured by the user.\"\"\",\n        }, # table\n        \"cpmCPUThresholdEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmCPUThresholdClass\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about\nCPU thresholding parameters. cpmCPUTotalIndex\nidentifies the CPU (or group of CPUs) for which this\nconfiguration applies.\"\"\",\n        }, # row\n        \"cpmCPUThresholdClass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"total\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"interrupt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"process\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Value of this object indicates the type of\nutilization, which is monitored. The total(1) indicates\nthe total CPU utilization, interrupt(2) indicates the\nthe CPU utilization in interrupt context and process(3)\nindicates the CPU utilization in the process level\nexecution context.\"\"\",\n        }, # column\n        \"cpmCPURisingThresholdValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percentage rising threshold value configured by\nthe user. The value indicates, \nif the percentage CPU utilization is equal to or above\nthis value for cpmCPURisingThresholdPeriod duration \nthen send a cpmCPURisingThreshold notification to\nthe NMS.\"\"\",\n        }, # column\n        \"cpmCPURisingThresholdPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This is an observation interval.\nThe value of this object indicates that \nthe CPU utilization should be above\ncpmCPURisingThresholdValue for this duration to send a \ncpmCPURisingThreshold notification to the NMS.\"\"\",\n        }, # column\n        \"cpmCPUFallingThresholdValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percentage falling threshold value configured by\nthe user. The value indicates, if the percentage \nCPU utilization is equal to or below this value for \ncpmCPUFallingThresholdPeriod duration\nthen send a cpmCPUFallingThreshold notification \nto the NMS.\"\"\",\n        }, # column\n        \"cpmCPUFallingThresholdPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This is an observation interval. The value of this\nobject indicates that CPU utilization should be below\ncpmCPUFallingThresholdValue for this duration to send a \ncpmCPURisingThreshold notification to the NMS.\"\"\",\n        }, # column\n        \"cpmCPUThresholdEntryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this table entry.\"\"\",\n        }, # column\n        \"cpmCPUHistory\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5\",\n        }, # node\n        \"cpmCPUHistoryThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user  configured value of this object gives\nthe minimum percent CPU utilization of a process\nin the last cpmCPUMonInterval duration required to be a \nmember of history table. When this object is changed\nthe new value will have effect in the next interval.\"\"\",\n        }, # scalar\n        \"cpmCPUHistorySize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A value configured by the user which specifies the\nnumber of reports in the history table. \nA report contains set of processes which crossed\nthe cpmCPUHistoryThreshold \nin the last cpmCPUMonInterval along with \nthe time at which this report is\ncreated, total and interrupt CPU utilizations. \nWhen this object is changed\nthe new value will have effect in the next interval.\"\"\",\n        }, # scalar\n        \"cpmCPUHistoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of CPU utilization history entries.\"\"\",\n        }, # table\n        \"cpmCPUHistoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmCPUHistoryReportId\",\n            ],\n            \"description\" :\n                \"\"\"A historical sample of CPU utilization statistics.\ncpmCPUTotalIndex identifies the CPU (or group of CPUs)\nfor which this history is collected. \nWhen the cpmCPUHistorySize is\nreached the least recent entry is lost.\"\"\",\n        }, # row\n        \"cpmCPUHistoryReportId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"All the entries which are created at the same time\nwill have same value for this object. When the\nconfigured threshold for being a part of History table\nis reached then the qualified processes become the\npart of history table. The entries which became the \npart of history table at one instant will have\nthe same value for this object. When this object\nreaches the max index value then it will wrap around.\"\"\",\n        }, # column\n        \"cpmCPUHistoryReportSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of process entries in a report.\nThis object gives information about how many processes \nbecame a part of history table at one instant.\"\"\",\n        }, # column\n        \"cpmCPUHistoryTotalUtil\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Total percentage of CPU utilization\nat cpmCPUHistoryCreated.\"\"\",\n        }, # column\n        \"cpmCPUHistoryInterruptUtil\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Percentage of CPU utilization in the interrupt context\nat cpmCPUHistoryCreated.\"\"\",\n        }, # column\n        \"cpmCPUHistoryCreatedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time stamp with respect to sysUpTime indicating\nthe time at which this report is created.\"\"\",\n        }, # column\n        \"cpmCPUProcessHistoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of process history entries. This table contains\nCPU utilization of processes which crossed the \ncpmCPUHistoryThreshold.\"\"\",\n        }, # table\n        \"cpmCPUProcessHistoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmCPUHistoryReportId\",\n                \"cpmCPUProcessHistoryIndex\",\n            ],\n            \"description\" :\n                \"\"\"A historical sample of process utilization\nstatistics. The entries in this table will have\ncorresponding entires in the cpmCPUHistoryTable.\nThe entries in this table get deleted when the entry\nassociated with this entry in the cpmCPUHistoryTable \ngets deleted.\"\"\",\n        }, # row\n        \"cpmCPUProcessHistoryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4294967295\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies an entry in\nthe cmpCPUProcessHistory table among those in the \nsame report. This index is between 1 to N, \nwhere N is the cpmCPUHistoryReportSize.\"\"\",\n        }, # column\n        \"cpmCPUHistoryProcId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The process Id associated with this entry.\"\"\",\n        }, # column\n        \"cpmCPUHistoryProcName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The process name associated with this entry.\"\"\",\n        }, # column\n        \"cpmCPUHistoryProcCreated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time when the process was created. The process ID\nand the time when the process was created, uniquely \nidentifies a process.\"\"\",\n        }, # column\n        \"cpmCPUHistoryProcUtil\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.2.5.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The percentage CPU utilization of a process at\ncpmCPUHistoryCreatedTime.\"\"\",\n        }, # column\n        \"cpmThread\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3\",\n        }, # node\n        \"cpmThreadTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains generic information about\nPOSIX threads in the device.\"\"\",\n        }, # table\n        \"cpmThreadEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmProcessPID\",\n                \"cpmThreadID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing the general statistics\nof a POSIX thread.\"\"\",\n        }, # row\n        \"cpmThreadID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object contains the thread ID. ThreadID is\nUnique per process.\"\"\",\n        }, # column\n        \"cpmThreadName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object represents the name of the thread.\nThread names need not be unique. Hence statistics \nshould be analyzed against thread ID.\"\"\",\n        }, # column\n        \"cpmThreadPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the priority of a POSIX thread.\nThe higher the number, the higher the priority of the \nthread over other threads.\"\"\",\n        }, # column\n        \"cpmThreadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dead\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"stopped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"send\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"receive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"reply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"stack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"waitpage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"sigsuspend\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"sigwaitinfo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"nanosleep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"mutex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"condvar\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"join\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"intr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"sem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the current state of a thread.\nRunning state means that the thread is actively \nconsumig CPU. All the other states are just waiting \nstates. The valid states are:\nother         - Any other state apart from the listed \n                ones.\ndead          - Kernel is waiting to release the \n                thread's resources.\nrunning       - Actively running on a CPU.\nready         - Not running on a CPU, but is ready to \n                run (one or more higher or equal \n                priority threads are running).\nstopped       - Suspended (SIGSTOP signal).\nsend          - Waiting for a server to receive \n                a message.\nreceive       - Waiting for a client to send a message.\nreply         - Waiting for a server to reply to a \n                message.\nstack         - Waiting for more stack to be allocated.\nwaitpage      - Waiting for process manager to \n                resolve a fault on a page.\nsigsuspend    - Suspended for a signal.\nsigwaitinfo   - Waiting for a signal.\nnanosleep     - Sleeping for a period of time.\nmutex         - Waiting to acquire a mutex\ncondvar       - Waiting for a condition variable to be \n                signalled.\njoin          - Waiting for the completion of another \n                thread.\nintr          - Waiting for an interrupt.\nsem           - Waiting to acquire a semaphore.\"\"\",\n        }, # column\n        \"cpmThreadBlockingProcess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the process on which the\ncurrent thread is blocked on. This points to the \ncpmProcessTable of the process on which the thread \nin context is blocked. This is valid only to threads\nwhich are either in send/reply states. For the \nrest of the threads it is returned as 0.0\"\"\",\n        }, # column\n        \"cpmThreadCpuUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"This object provides a general idea on how busy\nthe thread in context caused the processor to be.\"\"\",\n        }, # column\n        \"cpmThreadStackSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object indicates the stack size allocated to\nthe thread in context.\"\"\",\n        }, # column\n        \"cpmVirtualProcess\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4\",\n        }, # node\n        \"cpmVirtualProcessTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information about virtual\nprocesses in a virtual machine.\"\"\",\n        }, # table\n        \"cpmVirtualProcessEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmCPUTotalIndex\",\n                \"cpmProcessPID\",\n                \"cpmVirtualProcessID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing the general statistics of a\nvirtual process in a virtual machine.\"\"\",\n        }, # row\n        \"cpmVirtualProcessID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the process ID of a virtual\nprocess. PID is unique only inside one address space.\nVirtual process PID should be considered along with \nParent process cpmProcessPID.\"\"\",\n        }, # column\n        \"cpmVirtualProcessName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the name of a virtual process.\nIf the name is longer than 32 characters, it will be\ntruncated to the first 31 characters, and a `*' will be\nappended as the last character to imply this is a\ntruncated process name.\"\"\",\n        }, # column\n        \"cpmVirtualProcessUtil5Sec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This indicates an estimated CPU utilization by\na virtual process over the last 5 seconds.\"\"\",\n        }, # column\n        \"cpmVirtualProcessUtil1Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This indicates an estimated CPU utilization by\na virtual process over the last one minute.\"\"\",\n        }, # column\n        \"cpmVirtualProcessUtil5Min\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"This indicates an estimated CPU utilization by\na virtual process over the last 5 minutes.\"\"\",\n        }, # column\n        \"cpmVirtualProcessMemAllocated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object indicates the memory allocated by the\nvirtual process inside the address space of a \nprocess running on Native OS.\"\"\",\n        }, # column\n        \"cpmVirtualProcessMemFreed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bytes\",\n            \"description\" :\n                \"\"\"This object indicates the memory freed by the virtual\nprocess inside the address space of a process running \non Native OS.\"\"\",\n        }, # column\n        \"cpmVirtualProcessInvokeCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times a virtual process is invoked.\"\"\",\n        }, # column\n        \"cpmVirtualProcessRuntime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.1.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"microseconds\",\n            \"description\" :\n                \"\"\"The amount of CPU time a virtual process has used in\nmicroseconds.\"\"\",\n        }, # column\n        \"ciscoProcessMIBNotifPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.2\",\n        }, # node\n        \"ciscoProcessMIBNotifs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.2.0\",\n        }, # node\n        \"ciscoProcessMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3\",\n        }, # node\n        \"cpmCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.1\",\n        }, # node\n        \"cpmGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cpmCPURisingThreshold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmCPURisingThresholdValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotalMonIntervalValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUInterruptMonIntervalValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil5SecRev\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessTimeCreated\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpmCPURisingThreshold notification is sent\nwhen configured rising CPU utilization threshold\n(cpmCPURisingThresholdValue) is reached and\nCPU utilization remained above the threshold \nfor configured interval(cpmCPURisingThresholdPeriod)\nand such a notification is requested. \nThe cpmProcExtUtil5SecRev and cpmProcessTimeCreated \nobjects can be repeated multiple times\nin a notification indicating the top users of CPU.\"\"\",\n        }, # notification\n        \"cpmCPUFallingThreshold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.2.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmCPUFallingThresholdValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotalMonIntervalValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUInterruptMonIntervalValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A cpmCPUFallingThresholdTrap is sent when the\nconfigured falling threshold\n(cpmCPURisingThresholdValue) \nis reached and CPU utilization remained under \nthreshold for configured \ninterval (cpmCPUFallingThresholdPeriod) \nand such a notification is requested.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cpmCPUTotalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpmCPUTotalPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal5sec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal1min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal5min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing CPU load monitoring\ninformation. This group is mandatory for all cisco devices.\nThis group is deprecated since the objects cpmCPUTotal5sec,\ncpmCPUTotal1min and cpmCPUTotal5min are\ndeprecated. A new object cpmCPUTotalGroupRev is\nadded in place of it.\"\"\",\n        }, # group\n        \"cpmProcessGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpmProcessPID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessuSecs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessTimeCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing common process\nmonitoring information. This group is mandatory for \nall cisco devices. This object is deprecated\nby cpmProcessGroupRev.\"\"\",\n        }, # group\n        \"cpmProcessExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpmProcExtMemAllocated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtMemFreed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtInvoked\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtRuntime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil5Sec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil1Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil5Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional and\nmore detailed process monitoring information. This \ngroup is mandatory for all cisco devices that have \nthe internal capability to keep this information. \nThis group is deprecated and new group\ncpmProcessExtGroupRev is added.\"\"\",\n        }, # group\n        \"cpmCPUTotalGroupRev\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"cpmCPUTotalPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal5secRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal1minRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal5minRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing CPU load monitoring\ninformation. This group is mandatory for all cisco\ndevices. This group deprecates cpmCPUTotalGroup.\nThis group is deprecated since the object\ncpmCPUTotal5secRev is deprecated.\nA new object cpmCPUTotalGroupRev1 is\nadded in place of it.\"\"\",\n        }, # group\n        \"cpmProcessExtGroupRev\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmProcExtMemAllocatedRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtMemFreedRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtInvokedRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtRuntimeRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil5SecRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil1MinRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtUtil5MinRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcExtPriorityRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional and\nmore detailed process monitoring information. This \ngroup is mandatory for all cisco devices that have \nthe internal capability to keep this information.\nThis group is formed after deprecating cpmProcessExtGroup.\ncpmProcExtMemAllocatedRev, cpmProcExtMemFreedRev,\ncpmProcExtInvokedRev, cpmProcExtRuntimeRev,\ncpmProcExtUtil5SecRev, cpmProcExtUtil1MinRev and \ncpmProcExtUtil5MinRev are the new objects added.\"\"\",\n        }, # group\n        \"cpmProcessGroupRev\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmProcessPID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessAverageUSecs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessTimeCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing common process\nmonitoring information. This group is mandatory for \nall cisco devices. This object deprecates\ncpmProcessGroup.\"\"\",\n        }, # group\n        \"cpmCPUTotalGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmCPUTotalPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal1minRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotal5minRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUMonInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotalMonIntervalValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUInterruptMonIntervalValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing CPU load monitoring\ninformation. This group is mandatory for all cisco\ndevices. This group deprecates cpmCPUTotalGroupRev.\"\"\",\n        }, # group\n        \"cpmCPUThresholdGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmCPURisingThresholdValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPURisingThresholdPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUFallingThresholdValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUFallingThresholdPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUThresholdEntryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects used for configuration\nof thresholding.\"\"\",\n        }, # group\n        \"cpmCPUHistoryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmCPUHistorySize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryTotalUtil\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryInterruptUtil\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryCreatedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryReportSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryProcId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryProcName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryProcCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryProcUtil\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout CPU utilization history.\"\"\",\n        }, # group\n        \"cpmCPUThresholdNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmCPURisingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUFallingThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of notifications.\"\"\",\n        }, # group\n        \"cpmCPUPosixMemoryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmCPUMemoryUsed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUMemoryFree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUMemoryKernelReserved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUMemoryLowest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of common objects providing\nCPU wide System memory information running\nPOSIX compliant OS.\"\"\",\n        }, # group\n        \"cpmPosixProcessGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmProcessType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessRespawn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessRespawnCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessRespawnAfterLastPatch\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessMemoryCore\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessLastRestartUser\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessTextSegmentSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessDataSegmentSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessStackSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessDynamicMemorySize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of common objects providing Process\ninformation on devices running POSIX compliant OS.\"\"\",\n        }, # group\n        \"cpmThreadGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmThreadName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmThreadPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmThreadState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmThreadBlockingProcess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmThreadCpuUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmThreadStackSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing thread information\ninformation on devices running POSIX compliant OS.\"\"\",\n        }, # group\n        \"cpmVirtualProcessGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cpmVirtualProcessName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessUtil5Sec\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessUtil1Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessUtil5Min\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessMemAllocated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessMemFreed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessInvokeCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmVirtualProcessRuntime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing virtual process\ninformation on devices that can run virtual machines.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cProcessMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Process MIB. This is deprecated and new \ncompliance cProcessMIBComplianceRev is added.\"\"\",\n            \"requires\" : {\n                \"cpmCPUTotalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmProcessExtGroup is optional for all entities.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"cpmProcExtPriority\" : {\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"cProcessMIBComplianceRev\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Process MIB. This compliance module\ndeprecates cProcessMIBCompliance.\"\"\",\n            \"requires\" : {\n                \"cpmCPUTotalGroupRev\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessGroupRev\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmProcessExtGroupRev\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmProcessExtGroupRev is optional for all\nentities. This object is defined after deprecating\ncpmProcessExtGroup.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cProcessMIBComplianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Process MIB. This compliance module\ndeprecates cProcessMIBComplianceRev.\"\"\",\n            \"requires\" : {\n                \"cpmCPUThresholdGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUTotalGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUHistoryGroup is optional and gives\nthe information about process CPU utilization history.\"\"\",\n                },\n                \"cpmCPUThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUThresholdNotificationGroup is optional and\nthese traps indicates that \nconfigured threshold is reached.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"cProcessMIBComplianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-PROCESS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.109.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe Cisco Process MIB. This compliance module\ndeprecates cProcessMIBComplianceRev1.\"\"\",\n            \"requires\" : {\n                \"cpmCPUTotalGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-PROCESS-MIB\"\n                },\n                \"cpmCPUHistoryGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUHistoryGroup is optional and gives\nthe information about process CPU utilization history.\"\"\",\n                },\n                \"cpmCPUThresholdNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUThresholdNotificationGroup is optional and\nthese traps indicates that configured threshold \nis reached.\"\"\",\n                },\n                \"cpmProcessExtGroupRev\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmProcessExtGroupRev is optional and gives\ndetailed process monitoring information.\"\"\",\n                },\n                \"cpmCPUThresholdGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUThresholdGroup is optional and provides\ninformation on configuring threshold values.\"\"\",\n                },\n                \"cpmProcessGroupRev\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmProcessGroupRev is optional and provides common\nprocess monitoring information.\"\"\",\n                },\n                \"cpmCPUPosixMemoryGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmCPUPosixMemoryGroup gives information about\nCPU wide system memory of POSIX OS.\ncpmCPUPosixMemoryGroup is mandatory if the Operating\nSystem of the managed system supports Posix standard\nkernel.\"\"\",\n                },\n                \"cpmPosixProcessGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmPosixProcessGroup gives information about\nPOSIX process. cpmPosixProcessGroup is mandatory if\nthe Operating System of the managed system\nsupports Posix standard kernel.\"\"\",\n                },\n                \"cpmThreadGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmThreadGroup gives information about POSIX\nthreads. cpmThreadGroup is mandatory if the Operating\nSystem of the managed system supports Posix standard\nkernel.\"\"\",\n                },\n                \"cpmVirtualProcessGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-PROCESS-MIB\",\n                    \"description\" :\n                        \"\"\"The cpmVirtualProcessGroup gives information about\nvirtual process. cpmVirtualProcessGroup is mandatory\nOperating System of the managed system supports\nPosix standard kernel.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-STACK-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-STACK-MIB\n\nFILENAME = \"CISCO-STACK-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-STACK-MIB\",\n\n    \"CISCO-STACK-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"       Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-wbu@cisco.com,\ncs-lan-switch-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB provides configuration and runtime status for\nchassis, modules, ports, etc. on the Catalyst systems.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2007-12-12 00:00\",\n                \"description\" :\n                    \"\"\"Modified chassisSysType for new hardwares:\n'wsc6509ve'.\n\nModified chassisComponentType for new hardwares:\n'wsc6509veFan'.\n\nModified chassisPs1Type and chassisPs2Type to include:\n'pwr6000dc', 'pwr4500dc'.\n\nModified moduleType to include:\n'wssup32pge', 'wssup32p10ge', 'wssvcpisa32', 'wsf6kmsfc2a',\n'wsSvcMwam1', 'wsSvcPsd1', 'wsSvcSamiBb', 'vss72010g',\n'wsx671610ge'.\n\nModified moduleSubType to include new hardwares:\n'vsf6kpfc3cxl', 'vsf6kpfc3c'.\n\nModified moduleSubType2 to include new hardwares:\n'vsf6kmsfc3', 'me6524msfc2a', 'wssvcpisa32'.\n\nModified portType to include:\n'intrusionProtect', 'e1000BaseSvc', 'e10GBaseSvc',\n'e10GBaseLRM', 'e10GBaseT'.\n\nModified syslogMessageFacility to include:\n'dom', 'mvrp'.\n\nAdded ipPermitGroup3.\"\"\",\n            },\n            {\n                \"date\" : \"2007-05-29 00:00\",\n                \"description\" :\n                    \"\"\"Modified moduleType to include 'wsx6066SlbSk9'.\"\"\",\n            },\n            {\n                \"date\" : \"2007-05-25 00:00\",\n                \"description\" :\n                    \"\"\"Updated chassisPs1Type and chassisPs2Type to include:\n'pwr1500dc'.\n\nModified moduleType to include:\n'osm12t3e3', 'osm4GeWanGbicPlus', 'm7600Sip600',\n'm7600Sip200', 'm7600Sip400', 'c7600ssc400',\n'c7600ssc600', 'esm2x10ge', 'rsp720', 'rsp720base', \n'c7600msfc4'.\n\nUpdated moduleSubType to include new hardwares:\n'm7600pfc3c', 'sip600earl', 'c7600esmdfc3cxl',\n'c7600esmdfc3c'.\n\nUpdated moduleSubType2 to include new hardwares:\n'esm2x10ge', 'c7600msfc4'.\"\"\",\n            },\n            {\n                \"date\" : \"2007-03-30 00:00\",\n                \"description\" :\n                    \"\"\"Modified chassisSysType to include:\n'mec6524gs8s', 'mec6524gt8s', 'cisco7603s'.\n\nUpdated chassisPs1Type and chassisPs2Type to include:\n'pwr400dc', 'pwr400ac'.\n\nUpdated chassisComponentType for new hardwares:\n'fan6524', 'fanMod6Shs', 'fanMod9Shs', 'fanMod9St',\n'fanMod3Hs'.\n\nModified moduleType to include:\n'mec6524gs8s', 'mec6524gt8s', 'me6524msfc2a',\n'wsx670810ge'.\n\nUpdated moduleSubType to include new hardwares:\n'mec6524pfc3c', 'wsf6700dfc3c', 'wsf6700dfc3cxl'.\n\nModified VendorIdType to compliance with SNMP v2\nformat\"\"\",\n            },\n            {\n                \"date\" : \"2005-10-28 00:00\",\n                \"description\" :\n                    \"\"\"Modified chassisComponentType to include:\n'fanMod4Hs'.\n\nModified syslogMessageFacility to include:\n'eou', 'backup', 'eoam', 'webauth'.\n\nModified sysErrDisableTimeoutEnable to include:\n'ethernetOam', 'gl2ptEoamThresholdExceed'.\n\nUpdated chassisPs1Type and chassisPs2Type to include:\n'pwr2700dc', 'pwr2700ac4', 'pwr2700dc4', and\n'wscac8700we'.\n\nModified moduleType to include:\n'osm4oc3PosMM', 'wsx6196rj21', \n'wssup32ge3b', 'wsSvcIpSec1',\n'wsx6148arj45', 'wsSvcWebVpnk9',\n'ace106500k9', 'ace046500k9',\n'wsSvcAdm1k9', 'wsSvcAgm1k9',\n'wssup3210ge3b', 'osm2choc12T3SI',\n'wsf6700cfc', 'osm8choc3DS0SI'.\n\nUpdated portType to include:\n'e10GBaseEdc1310', 'e10GBaseSW',\n'sslVpn', 'adsm',\n'agsm', 'aces',\n'e10GBaseZR', 'e100BaseEX',\n'e100BaseZX'.\"\"\",\n            },\n            {\n                \"date\" : \"2005-04-27 00:00\",\n                \"description\" :\n                    \"\"\"Added support of the following objects:\ncisco7604sysID, wsc6504esysID\n\nModified sysEnableStpxTrap to include:\n'enabledForInconOnly', 'enabledForRootOnly',\n'enabledForLoopOnly', 'enabledForInconRootOnly',\n'enabledForInconLoopOnly', 'enabledForRootLoopOnly'\n\nModified sysErrDisableTimeoutEnable to include:\n'camMonitor', 'gl2ptCdpThresholdExceed',\n'gl2ptStpThresholdExceed', 'gl2ptVtpThresholdExceed',\n'linkRxCrc', 'linkTxCrc',\n'linkInErrors', 'packetBufferError'\n\nUpdated chassisSysType for new hardwares:\ncisco7604 and wsc6504e\n\nUpdated chassisPs1Type and chassisPs2Type for new\nhardwares:\nwscac6000w and pwr2700ac\n\nUpdated chassisComponentType for new hardwares:\nwsc6506eFan, wsc6509eFan, wsc6503eFan, wsc6000vtte.\n\nUpdated moduleType for hardware:\nosm2oc48OneDptSSDual, osm2oc48OneDptSIDual,\nosm2oc48OneDptSLDual, osm4choc12T3MM,\nosm4choc12T3SI, osm8choc12T3MM,\nosm8choc12T3SI, osm2choc48T3SS,\nosm1choc48T3SI, osm2choc48T3SI,\nosm4choc3DS0SI, osm1choc12T1SI,\nosm12ct3T1, osm24t3e3,\nosm2oc12AtmMMPlus, osm2oc12AtmSIPlus,\nosm8oc3PosSLPlus, wsx6516aGbic,\nwsx6148getx, wsSvcWlan1k9,\nwsSvcAon1k9, wsx6148FeSfp,\nwsx65822pa\n\nUpdated moduleType for name changed:\nwsx61821pa changed to wsx61822pa\n\nUpdated moduleSubType to include new hardwares:\nwsf6700dfc3a, wsf6kdfc3bxl,\nwsf6kpfc3bxl, wsf6700dfc3bxl,\nwsf6700dfc3b, wsf6kdfc3b\n\nUpdated moduleSubType to include new hardwares:\nwssvccmm6e1, wssvccmm6t1,\nwssvccmm24fxs, wssvccmmact\n\nUpdated portType to include:\ne10GBaseWdm1550, e10GBaseLW,\ne10GBaseEW, lwa,\naons, e100BaseEmpty,\ne100BaseUnknown, e100BaseUnapproved,\ne100BaseSX, e100BaseBX10D,\ne100BaseBX10U, e1000BaseBX10D,\ne1000BaseBX10U, e10GBaseBad\n\nUpdated portType for name changed:\nposOc48mm changed to posOc48sms\n\nModified ipPermitAccessType, ipPermitDeniedAccess,\nipPermitAccessTypeEnable to include:\nhttp\n\nModified syslogMessageFacility to include:\ndiags\n\nModified portCpbInlinePower to include:\nstatic\n\nDeprecated sysEnableStpxTrap, replaced by\n      stpxNotificationEnable in\n      CISCO-STP-EXTENSIONS-MIB.my\n\nDeprecated radiusServerTable, replaced by\n      crRadiusServerTable in CISCO-RADIUS-MIB.my\n\nAdded new conformance Groups:\noptionalSystemTrapGroup1,\nauthenticationGroup2,\nsystemTrapGroup2,\nnotificationGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2004-05-14 00:00\",\n                \"description\" :\n                    \"\"\"Modified sysEnableBridgeTraps to include:\n'enabledForNewRootOnly' and 'enabledForTopoChangeOnly'\n\nUpdated moduleType for new hardwares:\nwsx2948ggetx, wsx2948ggetxgbrj and wsx6748sfp\n\nUpdated moduleSubType for the new harware:\nwsf6kpfc3b\n\nUpdated moduleSubType2 for the new harware:\nwsf6kVpwrGe\n\nUpdated portType to include:\ne10GBaseSR, e10GBaseCX4,\ne1000BaseUnknown and e10GBaseUnknown,\ne10GBaseUnapproved, e1000BaseWdmRxOnly,\ne1000BaseDwdm3033,e1000BaseDwdm3112,\ne1000BaseDwdm3190,e1000BaseDwdm3268,\ne1000BaseDwdm3425,e1000BaseDwdm3504,\ne1000BaseDwdm3582,e1000BaseDwdm3661,\ne1000BaseDwdm3819,e1000BaseDwdm3898,\ne1000BaseDwdm3977,e1000BaseDwdm4056,\ne1000BaseDwdm4214,e1000BaseDwdm4294,\ne1000BaseDwdm4373,e1000BaseDwdm4453,\ne1000BaseDwdm4612,e1000BaseDwdm4692,\ne1000BaseDwdm4772,e1000BaseDwdm4851,\ne1000BaseDwdm5012,e1000BaseDwdm5092,\ne1000BaseDwdm5172,e1000BaseDwdm5252,\ne1000BaseDwdm5413,e1000BaseDwdm5494,\ne1000BaseDwdm5575,e1000BaseDwdm5655,\ne1000BaseDwdm5817,e1000BaseDwdm5898,\ne1000BaseDwdm5979,e1000BaseDwdm6061,\ne10GBaseWdmRxOnly, e10GBaseDwdm3033,\ne10GBaseDwdm3112, e10GBaseDwdm3190\ne10GBaseDwdm3268, e10GBaseDwdm3425,\ne10GBaseDwdm3504, e10GBaseDwdm3582,\ne10GBaseDwdm3661, e10GBaseDwdm3819,\ne10GBaseDwdm3898, e10GBaseDwdm3977,\ne10GBaseDwdm4056, e10GBaseDwdm4214,\ne10GBaseDwdm4294, e10GBaseDwdm4373,\ne10GBaseDwdm4453, e10GBaseDwdm4612,\ne10GBaseDwdm4692, e10GBaseDwdm4772,\ne10GBaseDwdm4851, e10GBaseDwdm5012,\ne10GBaseDwdm5092, e10GBaseDwdm5172,\ne10GBaseDwdm5252, e10GBaseDwdm5413,\ne10GBaseDwdm5494, e10GBaseDwdm5575,\ne10GBaseDwdm5655, e10GBaseDwdm5817,\ne10GBaseDwdm5898, e10GBaseDwdm5979 and\ne10GBaseDwdm6061\n\nModified portAdminSpeed to include:\n'autoDetect10100'\n\nModified syslogMessageFacility to include:\n'dhcpsnooping'.\"\"\",\n            },\n            {\n                \"date\" : \"2004-01-15 00:00\",\n                \"description\" :\n                    \"\"\"Updated workgroup for new hardware:\nwsc2948ggetxsysID\n\nUpdated chassisSysType for new hardware:\nwsc2948ggetx\n\nUpdated chassisPs1Type for new hardware:\nw156\n\nUpdated moduleType for new hardwares:\nwsx4148lxmt, wsx4548gbrj45, wsx4548gbrj45v\nwsx4248rj21v, wsx4302gb, wsx4248rj45v, wsx6748getx,\nwsx670410ge, wsx6724sfp and wsx6148x2rj45\n\nUpdated moduleSubType2 for new hardwares:\nwsf6kmsfc, wsf6kmsfc2, wsf6kmsfc2a,\nwsf6kFe48af, wsf6kGe48af and wsf6kFe48x2af,\n\nUpdated moduleType for new hardwares:\ne1000BaseUnknown and e10GBaseUnknown.\n\nModified syslogMessageFacility to include 'callhome'.\n\nModified sysErrDisableTimeoutEnable to include\n'arpInspectionRate' and 'noStaticInlinePwr'.\n\nModified Description clause for deprecated objects:\nsysIpAddr, sysNetMask, sysBroadcast, sysReset,\nsysConsolePrimaryLoginAuthentication,\nsysConsolePrimaryEnableAuthentication,\nsysTelnetPrimaryLoginAuthentication,\nsysTelnetPrimaryEnableAuthentication,\nsysPortFastBpduGuard, chassisSerialNumber,\nchassisComponentTable, moduleSerialNumber,\nmoduleHwHiVersion, moduleHwLoVersion,\nmoduleFwHiVersion, moduleFwLoVersion,\nmoduleSwHiVersion, moduleSwLoVersion,\nportSpantreeFastStart, monitorGrp and\nvlanSpantreeEnable.\n\nAdded new conformance Groups:\nsystemMiscGroup1,\nsystemTrapGroup1,\noptionalSystemMiscGroup6,\noptionalChassisGroup1,\nportGroup4,\nvlanGroup2,\nipPermitGroup2 and\noptionalPortGroup1.\"\"\",\n            },\n            {\n                \"date\" : \"2003-05-29 00:00\",\n                \"description\" :\n                    \"\"\"Change the ORGANIZATION clause. Deprecated\nsysClearMacTime object.\"\"\",\n            },\n            {\n                \"date\" : \"2003-05-05 00:00\",\n                \"description\" :\n                    \"\"\"Add support of the following objects: cisco7613sysID,\nwsc6509nebasysID. ChassisType: wsc4507, wsc6509NEBA,\nwsc65509, cisco7613. chassisPs1Type: pwr950dc,\npwr1900ac, pwr1900dc, wscac3000w,\npwrc451400dcp, wscdc3000w, pwr1400ac.\nchassisPs2Type: pwr950dc, pwr1900ac, pwr1900dc,\nwscac3000w,  wscdc3000w, pwr1400ac.\nmoduleTable: wsSvcIdsm2, wsSvcFwm1, wsSvcCe1,\nwssvcSsl1, osm2oc12PosMMPlus, osm2oc12PosSIPlus,\nosm16oc3PosSIPlus, osm1oc48PosSSPlus,osm1oc48PosSIPlus,\nosm1oc48PosSLPlus, osm4oc3PosSIPlus, osm8oc3PosSIPlus,\nosm4oc12PosSIPlus, wsx6548getx, wssup720, wssup720base.\nmoduleSubType: wsf6kpfc2a, wsf6kdfca, vsp300dfc,\nwsf6kpfc3a, wsf6kdfc3a. moduleSubType2: wsg6489,\nwsg6485, wsu4502gb, wssvcidsupg, wssup720.\nportType: e100BaseLX.\n\nDeprecate the following objects: sysIpAddr, sysNetMask,\nsysBroadcast, sysTrapReceiverTable, sysReset,\nsysClearPortTime, sysClearMacTime,\nsysPortFastBpduGuard, chassisComponentTable,\nportSpantreeFastStart, vlanTable, portChannelTable.\n\nRemove the TC MacAddressType, and replaced other uses\nby MacAddress.\"\"\",\n            },\n            {\n                \"date\" : \"2002-09-24 00:00\",\n                \"description\" :\n                    \"\"\"Added more HW models.\"\"\",\n            },\n            {\n                \"date\" : \"2001-06-11 00:00\",\n                \"description\" :\n                    \"\"\"Added cat6000 new HW chassis & modules.\"\"\",\n            },\n            {\n                \"date\" : \"2001-04-11 00:00\",\n                \"description\" :\n                    \"\"\"Added more HW modules;\nAdded the following MIB objects under systemGrp:\n       sysMaxRmonMemory\n       sysMacReductionAdminEnable\n       sysMacReductionOperEnable\nAdded the following MIB object under fileCopyGrp:\n       fileCopyRuntimeConfigPart\nAdded the following MIB object under filterPortTable:\n       filterPortSuppressionOption\nAdded the following MIB object under syslogGrp:\n       syslogTelnetEnable\"\"\",\n            },\n            {\n                \"date\" : \"2000-10-10 00:00\",\n                \"description\" :\n                    \"\"\"Added more HW modules;\nAdded the following objects in systemGrp\n    sshPublicKeySize\nAdded the vlanTrunkMappingTable in vlanGrp\nAdded portJumboFrameGrp\nAdded the following objects in portCpbTable:\n       portCpbCosRewrite\n       portCpbTosRewrite\n       portCpbCopsGrouping\nAdded copyTechReportFromRuntimeToHost in fileCopyAction\nAdded ssh(2) in ipPermitAccessType &\nipPermitDeniedAccess.\"\"\",\n            },\n            {\n                \"date\" : \"2000-05-16 00:00\",\n                \"description\" :\n                    \"\"\"Added more HW models;\nAdded the following objects:\n       portInlinePowerDetect\n       vlanPortAuxiliaryVlan\n       portCpbInlinePower\n       portCpbAuxiliaryVlan\n       moduleAdditionalStatus\n       sysExtendedRmonNetflowModuleMask\nAdded the voiceGrp\nAdded the switchAccelerationGrp\"\"\",\n            },\n            {\n                \"date\" : \"2000-02-02 00:00\",\n                \"description\" :\n                    \"\"\"Added the following objects:\nsysPortFastBpduGuard\nsysErrDisableTimeoutEnable\nsysErrDisableTimeoutInterval\nsysTrafficMonitorHighWaterMark\nchassisPs3Type\nchassisPs3Status\nchassisPs3TestResult\nchassisPEMInstalled\nmoduleEntPhysicalIndex\nportAdditionalOperStatus\nportEntPhysicalIndex\nfilterPortBroadcastThresholdFraction\nmcastEnableRgmp\nportCpbSpan.\nmodified ipPermitGrp for supporting IP Permit\nEnhancement. Added more HW models.\"\"\",\n            },\n            {\n                \"date\" : \"1999-09-30 00:00\",\n                \"description\" :\n                    \"\"\"Added more HW models.\"\"\",\n            },\n            {\n                \"date\" : \"1999-03-26 00:00\",\n                \"description\" :\n                    \"\"\"Added traceRouteGrp.\"\"\",\n            },\n            {\n                \"date\" : \"1999-02-12 00:00\",\n                \"description\" :\n                    \"\"\"Initial v2 version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoStackMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"FDDI-SMT73-MIB\", \"name\" : \"fddimibPORTSMTIndex\"},\n        {\"module\" : \"FDDI-SMT73-MIB\", \"name\" : \"fddimibPORTIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"OwnerString\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifName\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"workgroup\"},\n        {\"module\" : \"TOKEN-RING-RMON-MIB\", \"name\" : \"ringStationMacAddress\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n        {\"module\" : \"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n    ),\n\n    \"typedefs\" : {\n        \"VendorIdType\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"3\",\n                \"max\" : \"3\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"3\",\n                \"max\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"Vendor ID Type\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoStackNotificationsPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0\",\n        }, # node\n        \"ciscoStackMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"systemGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1\",\n        }, # node\n        \"sysMgmtType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"snmpV1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"smux\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"snmpV2V1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"snmpV2cV1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"snmpV3V2cV1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of network management running on this\nentity.\"\"\",\n        }, # scalar\n        \"sysIpAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This entity's IP address.\n\nThis object is deprecated and replaced by\nciiIPAddressType and ciiIPAddress in\nCISCO-IP-IF-MIB.\"\"\",\n        }, # scalar\n        \"sysNetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This entity's subnet mask.\n\nThis object is deprecated and replaced by\nciiIPAddressPrefixLength in CISCO-IP-IF-MIB.\"\"\",\n        }, # scalar\n        \"sysBroadcast\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This entity's broadcast address.\n\nThis object is deprecated and replaced by\nciiIPAddressBroadcast in CISCO-IP-IF-MIB.\"\"\",\n        }, # scalar\n        \"sysTrapReceiverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The trap receiver table (0 to 20 entries). This\ntable lists the addresses of Network Management\nStations that should receive trap messages from\nthis entity when an exception condition occurs.\n\nThis table is deprecated and replaced by\ntrapDestTable and other tables in SNMP-TARGET-\nMIB and SNMP-NOTIFICATION-MIB.\"\"\",\n        }, # table\n        \"sysTrapReceiverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.5.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"sysTrapReceiverAddr\",\n            ],\n            \"description\" :\n                \"\"\"A trap receiver table entry.\"\"\",\n        }, # row\n        \"sysTrapReceiverType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.5.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2) removes the\ncorresponding entry from the sysTrapReceiverTable.\nTo add a new entry to the sysTrapReceiverTable,\nset this object to valid(1) for an IpAddress which\nis not already in the table.\"\"\",\n        }, # column\n        \"sysTrapReceiverAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.5.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP address for trap receiver.\"\"\",\n        }, # column\n        \"sysTrapReceiverComm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.5.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Community string used for trap messages to this\ntrap receiver.\"\"\",\n        }, # column\n        \"sysCommunityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The community table (4 entries). This table lists\ncommunity strings and their access levels. When an\nSNMP message is received by this entity, the\ncommunity string in the message is compared with\nthis table to determine access rights of the\nsender.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # table\n        \"sysCommunityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.6.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"sysCommunityAccess\",\n            ],\n            \"description\" :\n                \"\"\"A community table entry.\"\"\",\n        }, # row\n        \"sysCommunityAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.6.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"readOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"readWrite\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"readWriteAll\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value of readWriteAll(4) allows the community\nto read and write all objects in the MIB. A\nvalue of readWrite(3) allows the community to\nread and write all objects except restricted\nitems such as community strings, which cannot\nbe accessed at all. A value of readOnly(2) allows\nthe community to read all objects except\nrestricted items. A value of other(1) allows no\naccess.\"\"\",\n        }, # column\n        \"sysCommunityString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.6.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configurable community string with access rights\ndefined by the value of sysCommunityAccess.\"\"\",\n        }, # column\n        \"sysAttachType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualAttach\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"singleAttach\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"nullAttach\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dualPrio\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"dualAttach\",\n            \"description\" :\n                \"\"\"The requested concentrator attachment type. For a\ndual attachment concentrator which can be\nconnected to the trunk ring, the first FDDI port\nis configured as A and the second FDDI port is\nconfigured as B.\nFor a single attachment concentrator which can be\nconnected beneath another concentrator, the first\nFDDI port is configured as M and the second FDDI\nport is configured as S. For a null attachment\nconcentrator which can be located at the root of\nthe tree, the first two FDDI ports are configured\nas M.\nThis object does not take effect until the\nconcentrator is reset. The current attachment\ntype can be determined from snmpFddiPORTPCType\nfor ports 1 and 2.\"\"\",\n        }, # scalar\n        \"sysTraffic\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Traffic meter value, i.e. the percentage of\nbandwidth utilization for the previous polling\ninterval.\"\"\",\n        }, # scalar\n        \"sysReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"resetMinDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing reset(2) to this object resets the\ncontrol logic of all modules in the system.\nWriting resetMinDown(3) to this object resets the\nsystem with the minimal system down time. The\nresetMinDown(3) is only supported in systems with\nredundant supervisors.\n\nThis object is deprecated and replaced by\ncsyScheduledReset in CISCO-SYSTEM-MIB.\"\"\",\n        }, # scalar\n        \"sysBaudRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"b600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                    \"b1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1200\"\n                    },\n                    \"b2400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2400\"\n                    },\n                    \"b4800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4800\"\n                    },\n                    \"b9600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9600\"\n                    },\n                    \"b19200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19200\"\n                    },\n                    \"b38400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"b9600\",\n            \"description\" :\n                \"\"\"The baud rate in bits per second of the RS-232\nport.\"\"\",\n        }, # scalar\n        \"sysInsertMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"scheduled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"graceful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The mode for inserting M-ports into the\nconcentrator ring.\"\"\",\n        }, # scalar\n        \"sysClearMacTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since mac\ncounters were last cleared. Writing a 0 to this\nobject causes the mac counters to be cleared.\"\"\",\n        }, # scalar\n        \"sysClearPortTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.13\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since port\ncounters were last cleared. Writing a 0 to this\nobject causes the port counters to be cleared.\"\"\",\n        }, # scalar\n        \"sysFddiRingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The fddi ring map table. This table lists the\nnodes in the FDDI ring(s) to which the system\nbelongs.\"\"\",\n        }, # table\n        \"sysFddiRingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysFddiRingSMTIndex\",\n                \"sysFddiRingAddress\",\n            ],\n            \"description\" :\n                \"\"\"A FDDI Ring table entry.\"\"\",\n        }, # row\n        \"sysFddiRingSMTIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the SMT index associated with this\nring.\"\"\",\n        }, # column\n        \"sysFddiRingAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of this node in the FDDI ring.\"\"\",\n        }, # column\n        \"sysFddiRingNext\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of the next node in the FDDI\nring.\"\"\",\n        }, # column\n        \"sysEnableModem\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the RS-232 port modem control\nlines are enabled.\"\"\",\n        }, # scalar\n        \"sysEnableRedirects\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether ICMP redirect messages are sent\nor received by the system.\"\"\",\n        }, # scalar\n        \"sysEnableRmon\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the SNMP agent supports the\nRMON MIB.\"\"\",\n        }, # scalar\n        \"sysArpAgingTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1200\",\n            \"description\" :\n                \"\"\"The aging time for the ARP table.\"\"\",\n        }, # scalar\n        \"sysTrafficPeak\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Peak traffic meter value since the last time port\ncounters were cleared or the system started (see\nsysClearPortTime).\"\"\",\n        }, # scalar\n        \"sysTrafficPeakTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the\npeak traffic meter value occurred.\"\"\",\n        }, # scalar\n        \"sysCommunityRwa\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When an SNMP message is received by this entity,\nthe community string in the message is compared\nwith this string first. If it matches, read-write\naccess is granted to all items in the MIB. If it\ndoesn't match, the sysCommunityRw string is\ncompared next.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # scalar\n        \"sysCommunityRw\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When an SNMP message is received by this entity,\nthe community string in the message is compared\nwith this string second. If it matches, read-write\naccess is granted to all items in the MIB except\nrestricted items such as community strings.\n(Restricted items appear empty when read and\nreturn a no such name error when an attempt is\nmade to write them.)  If it doesn't match, the\nsysCommunityRo string is compared next.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # scalar\n        \"sysCommunityRo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When an SNMP message is received by this entity,\nthe community string in the message is compared\nwith this string third. If it matches, read-only\naccess is granted to all items in the MIB except\nrestricted items such as community strings.\n(Restricted items appear empty when read.) If it\ndoesn't match, no access is granted, no response\nis sent back to the SNMP requester, and an SNMP\nis sent to the SNMP trap receivers if configured.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # scalar\n        \"sysEnableChassisTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether chassisAlarmOn and\nchassisAlarmOff traps in this MIB should be\ngenerated.\"\"\",\n        }, # scalar\n        \"sysEnableModuleTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether moduleUp and moduleDown traps\nin this MIB should be generated.\"\"\",\n        }, # scalar\n        \"sysEnableBridgeTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.26\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForNewRootOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForTopoChangeOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether newRoot and topologyChange\ntraps in the BRIDGE-MIB (RFC 1493) should be\ngenerated.\n\nenabled -- both newRoot and topologyChange\n           traps are enabled.\n\ndisabled -- both of the newRoot and\n           topologyChange traps are disabled.\n\nenabledForNewRootOnly -- only the newRoot trap is\n           enabled. This value is read-only.\n\nenabledForTopoChangeOnly -- only the\n           topologyChange trap is enabled. This\n           value is read-only.\n\nThis object is deprecated and replaced by\nstpxNotificationEnable in\nCISCO-STP-EXTENSIONS-MIB.\"\"\",\n        }, # scalar\n        \"sysIpVlan\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"This entity's IP address Virtual LAN\nassociation.\"\"\",\n        }, # scalar\n        \"sysConfigChangeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the\nconfiguration of the system was last changed.\"\"\",\n        }, # scalar\n        \"sysEnableRepeaterTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the traps in the REPEATER-MIB\n(RFC1516) should be generated.\"\"\",\n        }, # scalar\n        \"sysBannerMotd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Message of the day banner which is displayed on\nthe Command Line Interface before log in.\"\"\",\n        }, # scalar\n        \"sysEnableIpPermitTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the IP permit traps in this MIB\nshould be generated.\"\"\",\n        }, # scalar\n        \"sysTrafficMeterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The system traffic meter table. This table\nlists the traffic meters available in the\nsystem.\"\"\",\n        }, # table\n        \"sysTrafficMeterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysTrafficMeterType\",\n            ],\n            \"description\" :\n                \"\"\"A traffic meter table entry.\"\"\",\n        }, # row\n        \"sysTrafficMeterType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"systemSwitchingBus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"switchingBusA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"switchingBusB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"switchingBusC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of traffic meter.\"\"\",\n        }, # column\n        \"sysTrafficMeter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Traffic meter value, i.e. the percentage of\nbandwidth utilization for the previous polling\ninterval.\"\"\",\n        }, # column\n        \"sysTrafficMeterPeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Peak traffic meter value since the system\nstarted.\"\"\",\n        }, # column\n        \"sysTrafficMeterPeakTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.32.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the\npeak traffic meter value occurred.\"\"\",\n        }, # column\n        \"sysEnableVmpsTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the vmVmpsChange trap defined\nin CISCO-VLAN-MEMBERSHIP-MIB should be generated.\"\"\",\n        }, # scalar\n        \"sysConfigChangeInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates which NVRAM block is changed by whom.\"\"\",\n        }, # scalar\n        \"sysEnableConfigTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether sysConfigChange trap in this\nMIB should be generated.\"\"\",\n        }, # scalar\n        \"sysConfigRegister\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x010f\",\n            \"description\" :\n                \"\"\"The value of configuration register that will be\nused by the supervisor module when the system is\nrestarted.\nThis MIB object is only supported in systems with\nsupervisor modules having ROMMON support.\n\nThe lowest four bits of the configuration register\n(bits 3,2,1, and 0) form the boot field and the\nboot field determines whether the system boots\nfrom as the following:\n0000  -- stay in ROM monitor\n0001  -- boot from the first bootable system\n         images on the bootflash\n0010 to 1111\n      -- boot from the first bootable system\n         images specified in the sysBootVariable\n\nThe bit 5(0x0020) indicates whether the\nconfiguration file specified in\nsysStartupConfigSourceFile will beused recurringly\nor not whenever the system resets. If this bit is\nnot set, the configuration file(s) specified in\nsysStartupConfigSourceFile will only be used once\nand the value of sysStartupConfigSourceFile will\nbe reset to empty string automatically during the\nnext system reset.\n\nIf the bit 6(0x0040) is set, the system will start\nwith default configuration.\n\nThe bits 11,12 (0x0800, 0x1000) are used to\nspecify the console line speed in ROM monitor mode\nas the following:\n00   -- 9600\n01   -- 1200\n10   -- 4800\n11   -- 2400\n\nThe unspecified bits are not used.\"\"\",\n        }, # scalar\n        \"sysBootVariable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A list of the system boot images in the BOOT\nenvironment variable on supervisor modules with\nROMMON. The format of sysBootVariable should be:\n<device>:[<fileName>],1;{<device>:[<fileName>],1;...}\nIf the [fileName] is not specified, the first file\non the <device> will be used.\n\nThis MIB object is only supported in systems\nhaving supervisor modules with ROMMON.\"\"\",\n        }, # scalar\n        \"sysBootedImage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the system boot image which the\nsystem booted from.\nThis MIB object is only supported in the system\nwith Supervisor module 3 present.\"\"\",\n        }, # scalar\n        \"sysEnableEntityTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether entConfigChange trap in the\nENTITY-MIB should be generated.\"\"\",\n        }, # scalar\n        \"sysEnableStpxTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.40\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForInconOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForRootOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"enabledForLoopOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"enabledForInconRootOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"enabledForInconLoopOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"enabledForRootLoopOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether stpxInconsistencyUpdate,\nstpxRootInconsistencyUpdate and\nstpxLoopInconsistencyUpdate notifications in\nCISCO-STP-EXTENSIONS-MIB should be generated.\n\nenabled -- the stpxInconsistencyUpdate,\n           stpxRootInconsistencyUpdate and\n           stpxLoopInconsistencyUpdate traps are\n           all enabled.\n\ndisabled -- the stpxInconsistencyUpdate,\n           stpxRootInconsistencyUpdate and\n           stpxLoopInconsistencyUpdate traps\n           are all disabled.\n\nenabledForInconOnly -- only the\n           stpxInconsistencyUpdate trap is\n           enabled. This value is read-only.\n\nenabledForRootOnly -- only the\n           stpxRootInconsistencyUpdate trap is\n           enabled. This value is read-only.\n\nenabledForLoopOnly -- only the\n           stpxLoopInconsistencyUpdate trap is\n           enabled. This value is read-only.\n\nenabledForInconRootOnly -- only the\n           stpxInconsistencyUpdate and\n           stpxRootInconsistencyUpdate traps are\n           enabled. This value is read-only.\n\nenabledForInconLoopOnly -- only the\n           stpxInconsistencyUpdate and\n           stpxLoopInconsistencyUpdate traps are\n           enabled. This value is read-only.\n\nenabledForRootLoopOnly -- only the\n           stpxRootInconsistencyUpdate and\n           stpxLoopInconsistencyUpdate traps are\n           enabled. This value is read-only.\n\nThis object is deprecated and replaced by\nstpxNotificationEnable in\nCISCO-STP-EXTENSIONS-MIB.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonVlanModeEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the Extended RMON VlanMode\nfeature is enabled or not. If it is set to\nenabled(1), hostTable (rmon 4) will provide the\ninformation of a list of VLANs instead of a list\nof MAC addresses for a monitored trunking port.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonNetflowPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The password for enabling the Extended RMON\nNetflow feature and this object has to be set\nbefore setting sysExtendedRmonNetflowEnable to\nenabled(1). When reading this object, it will\nreturn empty string.\n\nIf the platform supports\nsysExtendedRmonNetflowModuleMask object, this\nobject will be not be supported.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonNetflowEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the Extended RMON Netflow\nfeature is enabled or not. Setting this object to\ndisabled(2), will clear\nsysExtendedRmonNetflowPassword automatically.\nSetting this object to enabled(1) will be rejected\nif sysExtendedRmonNetflowPassword does not contain\na valid password.\n\nIf the platform supports\nsysExtendedRmonNetflowModuleMask object, this\nobject will not be supported.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonVlanAgentEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the Extended RMON VlanAgent\nfeature is enabled or not. If it is set to\nenabled(1), the extended RMON will also provide\nthe information on VLAN based interface in\naddition to the port based interface for the\nmonitored traffic.\nSetting this object to enabled(1), it will consume\nmore CPU for processing each monitored frame and\naffect Extended RMON performance.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noNAMPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the SNMP agent supports the\nextended RMON feature. noNAMPresent(3) is a\nread-only value and the agent will return this\nvalue when the sysEnableExtendedRmon is set to\nenabled(1), but Network Analysis module is not\npresent in the system.\"\"\",\n        }, # scalar\n        \"sysConsolePrimaryLoginAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.46\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether TACACS+ or RADIUS is the\nprimary login authentication, i.e which method\nwill be tried first for a console session. If\ntacacsLoginAuthentication and\nradiusLoginAuthentication are set to disabled\nthen sysConsolePrimaryLoginAuthentication will\nhave a value of local(3).\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"sysConsolePrimaryEnableAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.47\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether TACACS+ or RADIUS is the\nprimary enable authentication, i.e which method\nwill be  tried first for a console session. If\ntacacsEnableAuthentication and\nradiusEnableAuthentication are set to disabled\nthen sysConsolePrimaryEnableAuthentication will\nhave a value of local(3).\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"sysTelnetPrimaryLoginAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.48\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether TACACS+ or RADIUS is the\nprimary login authentication, i.e which method\nwill be  tried first for a telnet session. If\ntacacsLoginAuthentication and\nradiusLoginAuthentication are set to disabled then\nsysTelnetPrimaryLoginAuthentication will have a\nvalue of local(3).\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"sysTelnetPrimaryEnableAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.49\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether TACACS+ or RADIUS is the\nprimary enable authentication, i.e which method\nwill be tried first for a telnet session. If\ntacacsEnableAuthentication and\nradiusEnableAuthentication are set to disabled\nthen sysTelnetPrimaryEnableAuthentication will\nhave a value of local(3).\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"sysStartupConfigSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"flashFileRecurring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"flashFileNonRecurring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the configuration file(s)\nspecified in sysStartupConfigSourceFile will be\nused recurringly or not whenever the system\nresets.\nSetting this object to flashFileNonRecurring(2),\nthe configuration file(s) specified in\nsysStartupConfigSourceFile will only be used once\nand the value of sysStartupConfigSourceFile will\nbe reset to empty string automatically during the\nnext system reset.\n\nThis MIB object is only supported in systems with\nSupG supervisor models or supervisor models that\nhave flash file system support.\"\"\",\n        }, # scalar\n        \"sysStartupConfigSourceFile\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates which configuration file(s) on the\nflash device will be used during the next system\nstartup.\nIf the value of this MIB object contains one or\nmultiple valid configuration file(s), then the\nvalid configuration file(s) will reconfigure the\nsystem during the next system startup one by one\nin the order specified. If the value of this MIB\nobject does not contain the valid configuration\nfile(s) on the device, the NVRAM configuration\nwill be used instead.\n\nFor supervisor models wsx5540 and wsx5550, only\n'cfg1' and 'cfg2' are valid file names.\n\nFor supervisor models with the flash file system\nsupport, the valid file name has the format of\n'<device:><file>[;<device:><file>...]'.\n\nThis MIB object is only supported in systems with\nsupervisor models wsx5540 and wsx5550 or\nsupervisor models with the flash file system\nsupport.\"\"\",\n        }, # scalar\n        \"sysConfigSupervisorModuleNo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the supervisor module (active or\nstandby, if applicable) that the MIB objects\nsysConfigRegister, sysBootVariable,\nsysStartupConfigSource, and\nsysStartupConfigSourceFile are specified for.\n\nThis MIB object is only supported by the\nsupervisor modules with the flash file system\nfeature support. The default value for this MIB\nobject is set to the active supervisor module\nnumber.\"\"\",\n        }, # scalar\n        \"sysStandbyPortEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the standby port feature is\nenabled or not. If this object is set to\nenabled(1), the uplink ports on the standby\nsupervisor module are activated; otherwise, the\nuplink ports on the standby supervisor remain\ninactive.\"\"\",\n        }, # scalar\n        \"sysPortFastBpduGuard\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.54\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether BPDU Guard for Spanning Tree\nPort Fast Start feature is enabled or not. If the\nvalue of this object is set to enabled(1), then\nwhen the switch receives a BPDU from a port with\nthe value of portSpantreeFastStart object set to\nenabled(1), that port is immediately disabled.\n\nThis object is deprecated and replaced by\nstpxFastStartBpduGuardEnable in\nCISCO-STP-EXTENSIONS-MIB.\"\"\",\n        }, # scalar\n        \"sysErrDisableTimeoutEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"udld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"duplexMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bpduPortGuard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"channelMisconfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"crossBarFallBack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"gl2ptIngressLoop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"gl2ptThresholdExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"bcastSuppression\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"arpInspectionRate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"noStaticInlinePwr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"camMonitor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"gl2ptCdpThresholdExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"gl2ptStpThresholdExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"gl2ptVtpThresholdExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"linkRxCrc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"linkTxCrc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"linkInErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"packetBufferError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"ethernetOam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"gl2ptEoamThresholdExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"()\",\n            \"description\" :\n                \"\"\"Indicates whether errdisable timeout feature is\nenabled for each of the causes or not. The\nother(0) is for all causes other than:\nudld(1),\nduplexMismatch(2),\nbpduPortGuard(3),\nchannelMisconfig(4),\ncrossBarFallBack(5), (only supported on platforms\n                      that support this errdisable\n                      reason.)\ngl2ptIngressLoop(6), (only supported on platforms\n                      that support this errdisable\n                      reason.)\ngl2ptThresholdExceed(7), (only supported on\n                      platforms that support this\n                      errdisable reason.)\nbcastSuppression(8), (only supported on platforms\n                      that support this errdisable\n                      reason.)\narpInspectionRate(9), (only supported on platforms\n                      that support this errdisable\n                      reason.)\nnoStaticInlinePwr(10), (only supported on\n                       platforms that support this\n                       errdisable reason.)\ncamMonitor(11),       (only supported on\n                       platforms that support this\n                       errdisable reason.)\ngl2ptCdpThresholdExceed(12), (only supported on\n                       platforms that support this\n                       errdisable reason.)\ngl2ptStpThresholdExceed(13), (only supported on\n                       platforms that support this\n                       errdisable reason.)\ngl2ptVtpThresholdExceed(14), (only supported on\n                       platforms that support this\n                       errdisable reason.)\nlinkRxCrc(15),        (only supported on\n                       platforms that support this\n                       errdisable reason.)\nlinkTxCrc(16),        (only supported on\n                       platforms that support this\n                       errdisable reason.)\nlinkInErrors(17),     (only supported on\n                       platforms that support this\n                       errdisable reason.)\npacketBufferError(18), (only supported on\n                       platforms that support this\n                       errdisable reason.)\nethernetOam(19),       (only supported on\n                       platforms that support this\n                       errdisable reason.)\ngl2ptEoamThresholdExceed(20), (only supported on\n                       platforms that support this\n                       errdisable reason.)\n\nA port is in errdisable state if ifAdminStatus of\nthe port in the ifTable is up(1) while the port is\nshutdown during runtime by the system due to error\ndetection. If the value of object\nportAdditionalOperStatus for the port is\nerrdisable(11) then that port is in errdisable\nstate.\n\nBy setting the bit corresponding to a cause to\n'1', this errdisable timeout feature is enabled\non the system for the ports that are put into\nerrdisable state by that cause, then those ports\ncan be re-enabled automatically during the timeout\ninterval as specified by\nsysErrDisableTimeoutInterval object after they\nare put into errdisable state by that cause;\notherwise, by setting the bit corresponding to a\ncause to '0', this errdisable timeout feature is\ndisabled on the system for the ports that are put\ninto errdisable state by that cause, then those\nports will remain shutdown until the user\nre-enable it manually.\"\"\",\n        }, # scalar\n        \"sysErrDisableTimeoutInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"86400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"86400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Indicates the timeout interval in seconds for\nerrdisable timeout feature.\"\"\",\n        }, # scalar\n        \"sysTrafficMonitorHighWaterMark\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"100\",\n            \"description\" :\n                \"\"\"Indicates the high watermark for the switching\nbus traffic in percentage. Syslog messages will be\ngenerated if the switching bus traffic goes over\nthis object value during the polling interval.\nSetting this object value to 100 would mean no\nsyslog message would be generated. For systems\nwith 3 switching buses, high watermark and syslog\nwill be for each switching bus.\"\"\",\n        }, # scalar\n        \"sysHighAvailabilityEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"Indicates whether High System Availability\nfeature is enabled or not. If this feature is\nenabled, the active supervisor's layer-2 protocol\nstate will be synched to the standby supervisor\nmodule, thus maintaining an up-to-date protocol\ndata on the standby supervisor whenever possible.\n\nThis object is supported in systems with High\nSystem Availability feature support.\"\"\",\n        }, # scalar\n        \"sysHighAvailabilityVersioningEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"Indicates whether support for supervisor software\nimage versioning (i.e., the capability to run\ndifferent images on the active and standby\nsupervisors) for the High System Availability\nfeature is enabled or not.\n\nThis object is supported in systems with High\nSystem Availability feature support.\"\"\",\n        }, # scalar\n        \"sysHighAvailabilityOperStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notRunning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the operational status of High System\nAvailability feature. If the value of this object\nis notRunning(2), then the reason why this feature\nis actually not running is specified by the object\nsysHighAvailabilityNotRunningReason. If the value\nof this object is running(1), then the value of\nobject sysHighAvailabilityOperReason is empty\nstring.\n\nThis object is supported in systems with High\nSystem Availability feature support.\"\"\",\n        }, # scalar\n        \"sysHighAvailabilityNotRunningReason\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the reason why High System Availability\nfeature is not running when the value of\nsysHighAvailabilityOperStatus is notRunning(2).\n The value of this object is empty string when\nthe value of sysHighAvailabilityOperStatus is\nrunning(1).\n\nThis object is supported in systems with High\nSystem Availability feature support.\"\"\",\n        }, # scalar\n        \"sysExtendedRmonNetflowModuleMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"module1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"module2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"module3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"module4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"module5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"module6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"module7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"module8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"module9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"module10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"module11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"module12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"module13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"module14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"module15\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"module16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates Netflow Export Data (NDE) to be sent to\nwhich Network Analysis Modules (NAM) in the same\nchassis.\n\nIf users set a bit from off to on, the system will\ncheck the corresponding module is a NAM or not.\nIf it is not, the system should return error.\n\nThis mib object will only be supported by the\nsystem that can support the multiple NAM modules.\"\"\",\n        }, # scalar\n        \"sshPublicKeySize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"512\",\n                        \"max\" : \"2048\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2048\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates public key size in bits. In write, if\na key does not exist, a value between 512 and 2048\nwill generate a RSA public key with the value as\nits key size for secured shell access. If a key\nexists a value other than 0 is valid, indicating a\nclear key operation. In read, the current key size\nis returned if a key exists. If not,a 0 is\nreturned.\"\"\",\n        }, # scalar\n        \"sysMaxRmonMemory\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the maximum percentage of the memory\nusage for RMON.\"\"\",\n        }, # scalar\n        \"sysMacReductionAdminEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether Mac Reduction feature (to\nreduce the number of MAC addresses used in\nbridge identifier) is administratively enabled\non the device or not.\"\"\",\n        }, # scalar\n        \"sysMacReductionOperEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether Mac Reduction feature (to\nreduce the number of MAC addresses used in\nbridge identifier) is operationaly enabled\non the device or not.\n\nIf the value of this object is true(1), then\nthe accepted values for dot1dStpPriority\nin BRIDGE-MIB should be multiples of 4096 plus\nbridge instance ID, such as VlanIndex. Changing\nthis object value might cause the values of\ndot1dBaseBridgeAddress and dot1dStpPriority\nin BRIDGE-MIB to be changed also.\"\"\",\n        }, # scalar\n        \"sysStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the system.\"\"\",\n        }, # scalar\n        \"chassisGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2\",\n        }, # node\n        \"chassisSysType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wsc1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsc1001\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"wsc1100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"wsc5000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"wsc2900\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"wsc5500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsc5002\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"wsc5505\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsc1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsc1400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"wsc2926\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"wsc5509\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"wsc6006\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"wsc6009\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"wsc4003\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"wsc5500e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"wsc4912g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"wsc2948g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"wsc6509\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"wsc6506\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"wsc4006\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"wsc6509NEB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"wsc2980g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"wsc6513\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"wsc2980ga\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"cisco7603\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"cisco7606\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"cisco7609\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"wsc6503\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"wsc6509NEBA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"wsc4507\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"wsc4503\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"wsc4506\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"wsc65509\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"cisco7613\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"wsc2948ggetx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"cisco7604\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"wsc6504e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"mec6524gs8s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"mec6524gt8s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"wsc6509ve\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"cisco7603s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The chassis system type.\"\"\",\n        }, # scalar\n        \"chassisBkplType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fddiEthernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"giga\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"giga3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"giga3E\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"giga12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"giga16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"giga40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The chassis backplane type.\"\"\",\n        }, # scalar\n        \"chassisPs1Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"w50\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"w200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"w600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"w80\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"w130\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"wsc5008\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsc5008a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"w175\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsc5068\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsc5508\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"wsc5568\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"wsc5508a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"w155\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"w175pfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"w175dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"wsc5008b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"wsc5008c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"wsc5068b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"wscac1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"wscac1300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"wscdc1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"wscdc1360\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"wsx4008\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"wsc5518\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"wsc5598\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"w120\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"externalPS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"wscac2500w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"wscdc2500w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"wsx4008dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"wscac4000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"pwr4000dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"pwr950ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"pwr950dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"pwr1900ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"pwr1900dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"pwr1900ac6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"wsx4008ac650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"wsx4008dc650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"wscac3000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"pwrc451000ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"pwrc452800acv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"pwrc451300acv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"pwrc451400dcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"wscdc3000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"pwr1400ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"w156\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"wscac6000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"pwr2700ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"pwr2700dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"wscac8700we\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"pwr2700ac4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"pwr2700dc4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"pwr400dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"pwr400ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"pwr6000dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"pwr1500dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of power supply number 1.\"\"\",\n        }, # scalar\n        \"chassisPs1Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of power supply number 1. If the status is\nnot ok, the value of chassisPs1TestResult gives\nmore detailed information about the power supply's\nfailure condition(s).\"\"\",\n        }, # scalar\n        \"chassisPs1TestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Test result for power supply number 1. A zero\nindicates that the supply passed all tests. Bits\nset in the result indicate error conditions.\"\"\",\n        }, # scalar\n        \"chassisPs2Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"w50\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"w200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"w600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"w80\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"w130\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"wsc5008\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsc5008a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"w175\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsc5068\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsc5508\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"wsc5568\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"wsc5508a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"w155\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"w175pfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"w175dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"wsc5008b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"wsc5008c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"wsc5068b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"wscac1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"wscac1300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"wscdc1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"wscdc1360\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"wsx4008\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"wsc5518\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"wsc5598\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"w120\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"externalPS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"wscac2500w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"wscdc2500w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"wsx4008dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"wscac4000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"pwr4000dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"pwr950ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"pwr950dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"pwr1900ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"pwr1900dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"pwr1900ac6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"wsx4008ac650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"wsx4008dc650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"wscac3000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"pwrc451000ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"pwrc452800acv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"pwrc451300acv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"pwrc451400dcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"wscdc3000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"pwr1400ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"w156\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"wscac6000w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"pwr2700ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"pwr2700dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"wscac8700we\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"pwr2700ac4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"pwr2700dc4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"pwr400dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"pwr400ac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"pwr6000dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"pwr1500dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of power supply number 2.\"\"\",\n        }, # scalar\n        \"chassisPs2Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of power supply number 2. If the status is\nnot ok, the value of chassisPs2TestResult gives\nmore detailed information about the power supply's\nfailure condition(s).\"\"\",\n        }, # scalar\n        \"chassisPs2TestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Test result for power supply number 2. A zero\nindicates that the supply passed all tests. Bits\nset in the result indicate error conditions.\"\"\",\n        }, # scalar\n        \"chassisFanStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the chassis fan. If the status is not\nok, the value of chassisFanTestResult gives more\ndetailed information about the fan's failure\ncondition(s).\"\"\",\n        }, # scalar\n        \"chassisFanTestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Test result for the chassis fan. A zero indicates\nthat the fan passed all tests. Bits set in the\nresult indicate error conditions.\"\"\",\n        }, # scalar\n        \"chassisMinorAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The chassis minor alarm status.\"\"\",\n        }, # scalar\n        \"chassisMajorAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The chassis major alarm status.\"\"\",\n        }, # scalar\n        \"chassisTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The chassis temperature alarm status.\"\"\",\n        }, # scalar\n        \"chassisNumSlots\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of slots in the chassis available for\nplug-in modules.\"\"\",\n        }, # scalar\n        \"chassisSlotConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of which slots in the chassis have\nmodules inserted. This is an integer value with\nbits set to indicate configured modules. It can be\ninterpreted as a sum of f(x) as x goes from 1 to\nthe number of slots, where f(x) = 0 for no module\ninserted and f(x) = exp(2, x-1) for a module\ninserted.\"\"\",\n        }, # scalar\n        \"chassisModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacturer's model number for the chassis.\"\"\",\n        }, # scalar\n        \"chassisSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.17\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"999999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"999999999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the chassis in a numeric\nformat. If the chassis uses an alphanumeric\nserial number, this MIB object will return 0.\n\nThis object is deprecated and replaced by\nentPhysicalSerialNum in ENTITY-MIB.\"\"\",\n        }, # scalar\n        \"chassisComponentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of the chassis related components in the\nchassis.\n\nThis table is deprecated and replaced by\nentPhysicalTable in ENTITY-MIB.\"\"\",\n        }, # table\n        \"chassisComponentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"chassisComponentIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about one component\nin the chassis.\"\"\",\n        }, # row\n        \"chassisComponentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each chassis related component\nwithin the chassis.\"\"\",\n        }, # column\n        \"chassisComponentType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wsc6000cl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsc6000vtt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsc6000tempSensor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"wsc6513Clock\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"clk7600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ws9SlotFan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"fanMod9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsc6506eFan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsc6509eFan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsc6503eFan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"wsc6000vtte\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"fanMod4Hs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"fan6524\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"fanMod6Shs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"fanMod9Shs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"fanMod9St\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"wsc6509veFan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"fanMod3Hs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the chassis component.\"\"\",\n        }, # column\n        \"chassisComponentSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the chassis component.\"\"\",\n        }, # column\n        \"chassisComponentHwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of the chassis component.\"\"\",\n        }, # column\n        \"chassisComponentModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.18.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacturer's model number for the chassis\ncomponent.\"\"\",\n        }, # column\n        \"chassisSerialNumberString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the chassis. This MIB object\nwill return the chassis serial number for any\nchassis that either a numeric or an alphanumeric\nserial number is being used.\"\"\",\n        }, # scalar\n        \"chassisPs3Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsx4008\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"wsx4008dc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"wsx4008ac650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"wsx4008dc650w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of power supply number 3. This object is\nonly supported by systems that can have 3 or more\npower supplies.\"\"\",\n        }, # scalar\n        \"chassisPs3Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of power supply number 3. If the status is\nnot ok, the value of chassisPs3TestResult gives\nmore detailed information about the power supply's\nfailure condition(s). This object is only\nsupported by systems that can have 3 or more\npower supplies.\"\"\",\n        }, # scalar\n        \"chassisPs3TestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Test result for power supply number 3. A zero\nindicates that the supply passed all tests. Bits\nset in the result indicate error conditions. This\nobject is only supported by systems that can\nhave 3 or more power supplies.\"\"\",\n        }, # scalar\n        \"chassisPEMInstalled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether Power Entry Module is installed\ninto the Chassis or not. Power Entry Module is a\nconnection into the system for an external\npower supply of -48 Volts. This object is only\nsupported by systems that can have 3 or more power\nsupplies.\"\"\",\n        }, # scalar\n        \"moduleGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3\",\n        }, # node\n        \"moduleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of module entries. The number of entries\nis the number of modules in the chassis.\"\"\",\n        }, # table\n        \"moduleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"moduleIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information about one module in\nthe chassis.\"\"\",\n        }, # row\n        \"moduleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each module within the\nchassis.\"\"\",\n        }, # column\n        \"moduleType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsc1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsc1001\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"wsc1100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"wsc1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsc1400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"wsx1441\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"wsx1444\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"wsx1450\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"wsx1483\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"wsx1454\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"wsx1455\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"wsx1431\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"wsx1465\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"wsx1436\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"wsx1434\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"wsx5009\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"wsx5013\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"wsx5011\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"wsx5010\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"wsx5113\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"wsx5101\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"wsx5103\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"wsx5104\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"wsx5155\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"wsx5154\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"wsx5153\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"wsx5111\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"wsx5213\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"wsx5020\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"wsx5006\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"wsx5005\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"wsx5509\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"wsx5506\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"wsx5505\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"wsx5156\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"wsx5157\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"wsx5158\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"wsx5030\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"wsx5114\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"wsx5223\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"wsx5224\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"wsx5012\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"wsx5302\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"wsx5213a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"wsx5380\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"wsx5201\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"wsx5203\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"wsx5530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"wsx5161\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"wsx5162\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"wsx5165\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"wsx5166\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"wsx5031\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"wsx5410\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                    \"wsx5403\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"wsx5201r\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"73\"\n                    },\n                    \"wsx5225r\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"74\"\n                    },\n                    \"wsx5014\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"75\"\n                    },\n                    \"wsx5015\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"76\"\n                    },\n                    \"wsx5236\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"77\"\n                    },\n                    \"wsx5540\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"78\"\n                    },\n                    \"wsx5234\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"79\"\n                    },\n                    \"wsx5012a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"81\"\n                    },\n                    \"wsx5167\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"82\"\n                    },\n                    \"wsx5239\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"83\"\n                    },\n                    \"wsx5168\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"84\"\n                    },\n                    \"wsx5305\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"85\"\n                    },\n                    \"wsx5550\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"87\"\n                    },\n                    \"wsf5541\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"88\"\n                    },\n                    \"wsx5534\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"91\"\n                    },\n                    \"wsx5536\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"92\"\n                    },\n                    \"wsx5237\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"96\"\n                    },\n                    \"wsx6ksup12ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"wsx6408gbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"201\"\n                    },\n                    \"wsx6224mmmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"202\"\n                    },\n                    \"wsx6248rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"203\"\n                    },\n                    \"wsx6248tel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"204\"\n                    },\n                    \"wsx6302msm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"206\"\n                    },\n                    \"wsf6kmsfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"207\"\n                    },\n                    \"wsx6024flmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"208\"\n                    },\n                    \"wsx6101oc12mmf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"209\"\n                    },\n                    \"wsx6101oc12smf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"210\"\n                    },\n                    \"wsx6416gemt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"211\"\n                    },\n                    \"wsx61822pa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"212\"\n                    },\n                    \"osm2oc12AtmMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"213\"\n                    },\n                    \"osm2oc12AtmSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"214\"\n                    },\n                    \"osm4oc12PosMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"216\"\n                    },\n                    \"osm4oc12PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"217\"\n                    },\n                    \"osm4oc12PosSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"218\"\n                    },\n                    \"wsx6ksup1a2ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"219\"\n                    },\n                    \"wsx6302amsm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"220\"\n                    },\n                    \"wsx6416gbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"221\"\n                    },\n                    \"wsx6224ammmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"222\"\n                    },\n                    \"wsx6380nam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"223\"\n                    },\n                    \"wsx6248arj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"224\"\n                    },\n                    \"wsx6248atel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"225\"\n                    },\n                    \"wsx6408agbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"226\"\n                    },\n                    \"wsx6608t1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"229\"\n                    },\n                    \"wsx6608e1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"230\"\n                    },\n                    \"wsx6624fxs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"231\"\n                    },\n                    \"wsx6316getx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"233\"\n                    },\n                    \"wsf6kmsfc2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"234\"\n                    },\n                    \"wsx6324mmmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"235\"\n                    },\n                    \"wsx6348rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"236\"\n                    },\n                    \"wsx6ksup22ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"237\"\n                    },\n                    \"wsx6324sm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"238\"\n                    },\n                    \"wsx6516gbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"239\"\n                    },\n                    \"osm4geWanGbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"240\"\n                    },\n                    \"osm1oc48PosSS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"241\"\n                    },\n                    \"osm1oc48PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"242\"\n                    },\n                    \"osm1oc48PosSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"243\"\n                    },\n                    \"wsx6381ids\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"244\"\n                    },\n                    \"wsc6500sfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"245\"\n                    },\n                    \"osm16oc3PosMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"246\"\n                    },\n                    \"osm16oc3PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"247\"\n                    },\n                    \"osm16oc3PosSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"248\"\n                    },\n                    \"osm2oc12PosMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"249\"\n                    },\n                    \"osm2oc12PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"250\"\n                    },\n                    \"osm2oc12PosSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"251\"\n                    },\n                    \"wsx650210ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"252\"\n                    },\n                    \"osm8oc3PosMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"253\"\n                    },\n                    \"osm8oc3PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"254\"\n                    },\n                    \"osm8oc3PosSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                    \"wsx6548rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"258\"\n                    },\n                    \"wsx6524mmmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"259\"\n                    },\n                    \"wsx6066SlbApc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"260\"\n                    },\n                    \"wsx6516getx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"261\"\n                    },\n                    \"osm2oc48OneDptSS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"265\"\n                    },\n                    \"osm2oc48OneDptSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"266\"\n                    },\n                    \"osm2oc48OneDptSL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"267\"\n                    },\n                    \"osm2oc48OneDptSSDual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"268\"\n                    },\n                    \"osm2oc48OneDptSIDual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"269\"\n                    },\n                    \"osm2oc48OneDptSLDual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"270\"\n                    },\n                    \"wsx6816gbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"271\"\n                    },\n                    \"osm4choc12T3MM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"272\"\n                    },\n                    \"osm4choc12T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"273\"\n                    },\n                    \"osm8choc12T3MM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"274\"\n                    },\n                    \"osm8choc12T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"275\"\n                    },\n                    \"osm1choc48T3SS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"276\"\n                    },\n                    \"osm2choc48T3SS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"277\"\n                    },\n                    \"wsx6500sfm2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"278\"\n                    },\n                    \"osm1choc48T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"279\"\n                    },\n                    \"osm2choc48T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"280\"\n                    },\n                    \"wsx6348rj21\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"281\"\n                    },\n                    \"wsx6548rj21\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"282\"\n                    },\n                    \"wsSvcCmm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"284\"\n                    },\n                    \"wsx650110gex4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"285\"\n                    },\n                    \"osm4oc3PosSI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"286\"\n                    },\n                    \"osm4oc3PosMM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"289\"\n                    },\n                    \"wsSvcIdsm2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"290\"\n                    },\n                    \"wsSvcNam2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"291\"\n                    },\n                    \"wsSvcFwm1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"292\"\n                    },\n                    \"wsSvcCe1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"293\"\n                    },\n                    \"wsSvcSsl1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"294\"\n                    },\n                    \"osm8choc3DS0SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"295\"\n                    },\n                    \"osm4choc3DS0SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"296\"\n                    },\n                    \"osm1choc12T1SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"297\"\n                    },\n                    \"wsx4012\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"300\"\n                    },\n                    \"wsx4148rj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"301\"\n                    },\n                    \"wsx4232gbrj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"302\"\n                    },\n                    \"wsx4306gb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"303\"\n                    },\n                    \"wsx4418gb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"304\"\n                    },\n                    \"wsx44162gbtx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"305\"\n                    },\n                    \"wsx4912gb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"306\"\n                    },\n                    \"wsx2948gbrj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"307\"\n                    },\n                    \"wsx2948\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"309\"\n                    },\n                    \"wsx4912\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"310\"\n                    },\n                    \"wsx4424sxmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"311\"\n                    },\n                    \"wsx4232rjxx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"312\"\n                    },\n                    \"wsx4148rj21\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"313\"\n                    },\n                    \"wsx4124fxmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"317\"\n                    },\n                    \"wsx4013\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"318\"\n                    },\n                    \"wsx4232l3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"319\"\n                    },\n                    \"wsx4604gwy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"320\"\n                    },\n                    \"wsx44122Gbtx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"321\"\n                    },\n                    \"wsx2980\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"322\"\n                    },\n                    \"wsx2980rj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"323\"\n                    },\n                    \"wsx2980gbrj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"324\"\n                    },\n                    \"wsx4019\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"325\"\n                    },\n                    \"wsx4148rj45v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"326\"\n                    },\n                    \"wsx4424gbrj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"330\"\n                    },\n                    \"wsx4148fxmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"331\"\n                    },\n                    \"wsx4448gblx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"332\"\n                    },\n                    \"wsx4448gbrj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"334\"\n                    },\n                    \"wsx4148lxmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"337\"\n                    },\n                    \"wsx4548gbrj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"339\"\n                    },\n                    \"wsx4548gbrj45v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"340\"\n                    },\n                    \"wsx4248rj21v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"341\"\n                    },\n                    \"wsx4302gb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"342\"\n                    },\n                    \"wsx4248rj45v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"343\"\n                    },\n                    \"wsx2948ggetx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"345\"\n                    },\n                    \"wsx2948ggetxgbrj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"346\"\n                    },\n                    \"wsx6516aGbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"502\"\n                    },\n                    \"wsx6148getx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"503\"\n                    },\n                    \"wsx6148x2rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"506\"\n                    },\n                    \"wsx6196rj21\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"507\"\n                    },\n                    \"wssup32ge3b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"509\"\n                    },\n                    \"wssup3210ge3b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"510\"\n                    },\n                    \"mec6524gs8s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"511\"\n                    },\n                    \"mec6524gt8s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"512\"\n                    },\n                    \"wssup32pge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"515\"\n                    },\n                    \"wssup32p10ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"516\"\n                    },\n                    \"wssvcpisa32\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"597\"\n                    },\n                    \"me6524msfc2a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"598\"\n                    },\n                    \"wsf6kmsfc2a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"599\"\n                    },\n                    \"osm12ct3T1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                    \"osm12t3e3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"601\"\n                    },\n                    \"osm24t3e3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"602\"\n                    },\n                    \"osm4GeWanGbicPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"603\"\n                    },\n                    \"osm1choc12T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"604\"\n                    },\n                    \"osm2choc12T3SI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"605\"\n                    },\n                    \"osm2oc12AtmMMPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"606\"\n                    },\n                    \"osm2oc12AtmSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"607\"\n                    },\n                    \"osm2oc12PosMMPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"608\"\n                    },\n                    \"osm2oc12PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"609\"\n                    },\n                    \"osm16oc3PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"610\"\n                    },\n                    \"osm1oc48PosSSPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"611\"\n                    },\n                    \"osm1oc48PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"612\"\n                    },\n                    \"osm1oc48PosSLPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"613\"\n                    },\n                    \"osm4oc3PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"614\"\n                    },\n                    \"osm8oc3PosSLPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"615\"\n                    },\n                    \"osm8oc3PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"616\"\n                    },\n                    \"osm4oc12PosSIPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"617\"\n                    },\n                    \"wsSvcIpSec1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"903\"\n                    },\n                    \"wsSvcMwam1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"910\"\n                    },\n                    \"wsSvcCsg1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"911\"\n                    },\n                    \"wsx6148rj45v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"912\"\n                    },\n                    \"wsx6148rj21v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"913\"\n                    },\n                    \"wsSvcNam1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"914\"\n                    },\n                    \"wsx6548getx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"915\"\n                    },\n                    \"wsSvcPsd1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"919\"\n                    },\n                    \"wsx6066SlbSk9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"920\"\n                    },\n                    \"wsx6148agetx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"921\"\n                    },\n                    \"wsx6148arj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"923\"\n                    },\n                    \"wsSvcWlan1k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"924\"\n                    },\n                    \"wsSvcAon1k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"925\"\n                    },\n                    \"ace106500k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"926\"\n                    },\n                    \"wsSvcWebVpnk9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"927\"\n                    },\n                    \"wsx6148FeSfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"928\"\n                    },\n                    \"wsSvcAdm1k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"929\"\n                    },\n                    \"wsSvcAgm1k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"930\"\n                    },\n                    \"ace046500k9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"936\"\n                    },\n                    \"wsSvcSamiBb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"940\"\n                    },\n                    \"wssup720\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1001\"\n                    },\n                    \"wssup720base\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1002\"\n                    },\n                    \"m7600Sip600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1004\"\n                    },\n                    \"wsx6748getx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1007\"\n                    },\n                    \"wsx670410ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1008\"\n                    },\n                    \"wsx6748sfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1009\"\n                    },\n                    \"wsx6724sfp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1010\"\n                    },\n                    \"wsx670810ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1016\"\n                    },\n                    \"vss72010g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1021\"\n                    },\n                    \"wsx671610ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1027\"\n                    },\n                    \"wsx65822pa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1101\"\n                    },\n                    \"m7600Sip200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1102\"\n                    },\n                    \"m7600Sip400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1103\"\n                    },\n                    \"c7600ssc400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1104\"\n                    },\n                    \"c7600ssc600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1105\"\n                    },\n                    \"esm2x10ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1106\"\n                    },\n                    \"rsp720\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1800\"\n                    },\n                    \"rsp720base\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1801\"\n                    },\n                    \"c7600msfc4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1805\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of module.\"\"\",\n        }, # column\n        \"moduleSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"999999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"999999999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the module in a numeric\nformat. If the module uses an alphanumeric serial\nnumber, this MIB object will return 0.\n\nThis object is deprecated and replaced by\nentPhysicalSerialNum in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleHwHiVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high part of the hardware version of the\nmodule.\nFor example, if the hardware version is 3.1, the\nvalue of moduleHwHiVersion is 3.\n\nThis object is deprecated and replaced by\nentPhysicalHardwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleHwLoVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The low part of the hardware version of the\nmodule.\nFor example, if the hardware version is 3.1, the\nvalue of moduleHwLoVersion is 1.\n\nThis object is deprecated and replaced by\nentPhysicalHardwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleFwHiVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high part of the firmware version number. For\nexample, if the firmware version is 3.1, the value\nof moduleFwHiVersion is 3.\n\nThis object is deprecated and replaced by\nentPhysicalFirmwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleFwLoVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The low part of the firmware version number. For\nexample, if the firmware version is 3.1, the value\nof moduleFwLoVersion is 1.\n\nThis object is deprecated and replaced by\nentPhysicalFirmwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleSwHiVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high part of the software version number. For\nexample, if the software version is 3.1, the value\nof moduleSwHiVersion is 3.\n\nThis object is deprecated and replaced by\nentPhysicalSoftwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleSwLoVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The low part of the software version number. For\nexample, if the software version is 3.1, the value\nof moduleSwLoVersion is 1.\n\nThis object is deprecated and replaced by\nentPhysicalSoftwareRev in ENTITY-MIB.\"\"\",\n        }, # column\n        \"moduleStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the module. If the\nstatus is not ok, the value of moduleTestResult\ngives more detailed information about the\nmodule's failure condition(s).\"\"\",\n        }, # column\n        \"moduleTestResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The result of the module's self test. A zero\nindicates that the module passed all tests. Bits\nset in the result indicate error conditions.\"\"\",\n        }, # column\n        \"moduleAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object, when read, returns one of the\nfollowing results:\n    other(1):   module permanently enabled\n    enable(3):  module currently enabled\n    disable(4): module currently disabled\nSetting this object to one of the acceptable\nvalues gives the following results:\n  other(1):  gives an error\n  reset(2):  resets the module's control logic\n  enable(3): if the module status is configurable,\n              enables the module, else gives error\n  disable(4): if the module status is\n             configurable, disables the module,\n             else gives error.\nSetting this object to any other values results in\nan error.\"\"\",\n        }, # column\n        \"moduleName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive string used by the network\nadministrator to name the module.\"\"\",\n        }, # column\n        \"moduleNumPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ports supported by the module.\"\"\",\n        }, # column\n        \"modulePortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A series of bytes containing status information\nabout the module and each of the ports on the\nmodule.\nThe first byte contains the status for the module\n(same value as moduleStatus), and subsequent bytes\ncontain status for the first through the last\nports on the module (same value as\nportOperStatus).\"\"\",\n        }, # column\n        \"moduleSubType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsf5510\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsf5511\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"wsx5304\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"wsf5520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"wsf5521\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsf5531\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"wsf6020\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"wsf6020a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"101\"\n                    },\n                    \"wsf6kpfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"102\"\n                    },\n                    \"wsf6kpfc2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"103\"\n                    },\n                    \"wsf6kvpwr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"wsf6kdfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"wsf6kpfc2a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                    \"wsf6kdfca\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"107\"\n                    },\n                    \"vsp300dfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"wsf6kpfc3a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"201\"\n                    },\n                    \"wsf6kdfc3a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"202\"\n                    },\n                    \"wsf6700dfc3a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"203\"\n                    },\n                    \"wsf6kdfc3bxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"205\"\n                    },\n                    \"wsf6kpfc3bxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"206\"\n                    },\n                    \"wsf6700dfc3bxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"207\"\n                    },\n                    \"wsf6700cfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"208\"\n                    },\n                    \"m7600pfc3c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"213\"\n                    },\n                    \"wsf6kpfc3b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"216\"\n                    },\n                    \"wsf6700dfc3b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"217\"\n                    },\n                    \"wsf6700dfc3c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"218\"\n                    },\n                    \"wsf6700dfc3cxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"221\"\n                    },\n                    \"wsf6kdfc3b\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"223\"\n                    },\n                    \"mec6524pfc3c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"224\"\n                    },\n                    \"sip600earl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"225\"\n                    },\n                    \"vsf6kpfc3cxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"226\"\n                    },\n                    \"vsf6kpfc3c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"227\"\n                    },\n                    \"c7600esmdfc3cxl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"228\"\n                    },\n                    \"c7600esmdfc3c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"230\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of daughterboard attached to this\nmodule.\"\"\",\n        }, # column\n        \"moduleModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacturer's model number for the module.\"\"\",\n        }, # column\n        \"moduleHwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of the module.\"\"\",\n        }, # column\n        \"moduleFwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware version of the module.\"\"\",\n        }, # column\n        \"moduleSwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The software version of the module.\"\"\",\n        }, # column\n        \"moduleStandbyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Redundant status of a module that supports\nredundancy.\"\"\",\n        }, # column\n        \"moduleIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the module has a separate IP address to\nreach it by, then it is reported here.\nOtherwise, this object has a value of\n'00000000H'.\"\"\",\n        }, # column\n        \"moduleIPAddressVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If the moduleIPAddress is valid then this\nobject reports the VLAN to access that IP\naddress on. Otherwise this object has a value\nof zero.\"\"\",\n        }, # column\n        \"moduleSubType2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wsu5531\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wsu5533\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"wsu5534\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"wsu5535\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"wsu5536\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"wsu5537\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"wsu5538\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"wsu5539\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wsg6488\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"102\"\n                    },\n                    \"wsg6489\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"103\"\n                    },\n                    \"wsg6483\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"wsg6485\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"wsf6kFe48af\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                    \"wsf6kGe48af\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"107\"\n                    },\n                    \"wsf6kVpwrGe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"108\"\n                    },\n                    \"wsf6kFe48x2af\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"109\"\n                    },\n                    \"wsf6kmsfc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"207\"\n                    },\n                    \"wsf6kmsfc2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"234\"\n                    },\n                    \"wsu4504fxmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"314\"\n                    },\n                    \"wsu4502gb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"315\"\n                    },\n                    \"wssvcidsupg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"402\"\n                    },\n                    \"wssvccmm6e1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"403\"\n                    },\n                    \"wssvccmm6t1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"404\"\n                    },\n                    \"wssvccmm24fxs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"405\"\n                    },\n                    \"wssvccmmact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"406\"\n                    },\n                    \"wssvcpisa32\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"597\"\n                    },\n                    \"me6524msfc2a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"598\"\n                    },\n                    \"wsf6kmsfc2a\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"599\"\n                    },\n                    \"wssup720\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1001\"\n                    },\n                    \"vsf6kmsfc3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1026\"\n                    },\n                    \"esm2x10ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1701\"\n                    },\n                    \"c7600msfc4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1805\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of daughterboard attached to this\nmodule.\"\"\",\n        }, # column\n        \"moduleSlotNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value is determined by the chassis slot\nnumber where the module is located. Valid entries\nare 1 to the value of chassisNumSlots\"\"\",\n        }, # column\n        \"moduleSerialNumberString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the module. This MIB object\nwill return the module serial number for any\nmodule that either a numeric or an alphanumeric\nserial number is being used.\"\"\",\n        }, # column\n        \"moduleEntPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the entPhysicalIndex\nobject, defined in ENTITY-MIB, for the entity\nphysical index corresponding to this module.\"\"\",\n        }, # column\n        \"moduleAdditionalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.3.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"fruInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"powerDenied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"faulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The additional status of the module.\n\nfruInstalled(0) indicates that whether or not\nFRU is installed on the module.\n\npowerDenied(1) indicates that whether phones\nconnected to the ports of this module are\ndenied of power.\n\nfaulty(2) indicates hardware faulty.\"\"\",\n        }, # column\n        \"portGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4\",\n        }, # node\n        \"portTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port entries. The number of entries is\ndetermined by the number of modules in the chassis\nand the number of ports on each module.\"\"\",\n        }, # table\n        \"portEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portModuleIndex\",\n                \"portIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information for a particular\nport on a module.\"\"\",\n        }, # row\n        \"portModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"portIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module. The value is determined by the\nlocation of the port on the module. Valid entries\nare 1 to the value of moduleNumPorts for this\nmodule.\"\"\",\n        }, # column\n        \"portCrossIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4080\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4080\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A cross-reference to the port's index within\nanother mib group. The value is dependent on the\ntype of port. For an FDDI port, this corresponds\nto the snmpFddiPORTIndex.\"\"\",\n        }, # column\n        \"portName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive string used by the network\nadministrator to name the port.\"\"\",\n        }, # column\n        \"portType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"tppmd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mlt3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"sddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"smf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"e10BaseT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"e10BaseF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"scf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"e100BaseTX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"e100BaseT4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"e100BaseF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"atmOc3mmf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"atmOc3smf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"atmOc3utp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"e100BaseFsm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"e10a100BaseTX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"mii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"vlanRouter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"remoteRouter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"tokenring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"atmOc12mmf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"atmOc12smf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"atmDs3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"tokenringMmf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"e1000BaseLX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"e1000BaseSX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"e1000BaseCX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"networkAnalysis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"e1000Empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"e1000BaseLH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"e1000BaseT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"e1000UnsupportedGbic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"e1000BaseZX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"depi2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"t1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"e1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"fxs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"fxo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"transcoding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"conferencing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"atmOc12mm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"atmOc12smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"atmOc12sml\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"posOc12mm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"posOc12smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"posOc12sml\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"posOc48sms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"posOc48smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"posOc48sml\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"posOc3mm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"posOc3smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"posOc3sml\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"intrusionDetect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"e10GBaseCPX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"e10GBaseLX4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"e10GBaseEX4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"e10GEmpty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"e10a100a1000BaseT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"dptOc48mm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"dptOc48smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"dptOc48sml\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"e10GBaseLR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"chOc12smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"chOc12mm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"chOc48ss\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                    \"chOc48smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"e10GBaseSX4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"70\"\n                    },\n                    \"e10GBaseER\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"71\"\n                    },\n                    \"contentEngine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"ssl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"73\"\n                    },\n                    \"firewall\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"74\"\n                    },\n                    \"vpnIpSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"75\"\n                    },\n                    \"ct3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"76\"\n                    },\n                    \"e1000BaseCwdm1470\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"77\"\n                    },\n                    \"e1000BaseCwdm1490\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"78\"\n                    },\n                    \"e1000BaseCwdm1510\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"79\"\n                    },\n                    \"e1000BaseCwdm1530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"80\"\n                    },\n                    \"e1000BaseCwdm1550\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"81\"\n                    },\n                    \"e1000BaseCwdm1570\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"82\"\n                    },\n                    \"e1000BaseCwdm1590\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"83\"\n                    },\n                    \"e1000BaseCwdm1610\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"84\"\n                    },\n                    \"e1000BaseBT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"85\"\n                    },\n                    \"e1000BaseUnapproved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"86\"\n                    },\n                    \"chOc3smi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"87\"\n                    },\n                    \"mcr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"88\"\n                    },\n                    \"coe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"89\"\n                    },\n                    \"mwa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"90\"\n                    },\n                    \"psd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"91\"\n                    },\n                    \"e100BaseLX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"92\"\n                    },\n                    \"e10GBaseSR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"93\"\n                    },\n                    \"e10GBaseCX4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"94\"\n                    },\n                    \"e10GBaseWdm1550\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"95\"\n                    },\n                    \"e10GBaseEdc1310\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"96\"\n                    },\n                    \"e10GBaseSW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"97\"\n                    },\n                    \"e10GBaseLW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"98\"\n                    },\n                    \"e10GBaseEW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                    \"lwa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"aons\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"101\"\n                    },\n                    \"sslVpn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"102\"\n                    },\n                    \"e100BaseEmpty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"103\"\n                    },\n                    \"adsm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"agsm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"aces\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                    \"intrusionProtect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"109\"\n                    },\n                    \"e1000BaseSvc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"110\"\n                    },\n                    \"e10GBaseSvc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"111\"\n                    },\n                    \"e1000BaseUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1000\"\n                    },\n                    \"e10GBaseUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1001\"\n                    },\n                    \"e10GBaseUnapproved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1002\"\n                    },\n                    \"e1000BaseWdmRxOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1003\"\n                    },\n                    \"e1000BaseDwdm3033\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1004\"\n                    },\n                    \"e1000BaseDwdm3112\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1005\"\n                    },\n                    \"e1000BaseDwdm3190\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1006\"\n                    },\n                    \"e1000BaseDwdm3268\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1007\"\n                    },\n                    \"e1000BaseDwdm3425\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1008\"\n                    },\n                    \"e1000BaseDwdm3504\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1009\"\n                    },\n                    \"e1000BaseDwdm3582\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1010\"\n                    },\n                    \"e1000BaseDwdm3661\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1011\"\n                    },\n                    \"e1000BaseDwdm3819\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1012\"\n                    },\n                    \"e1000BaseDwdm3898\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1013\"\n                    },\n                    \"e1000BaseDwdm3977\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1014\"\n                    },\n                    \"e1000BaseDwdm4056\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1015\"\n                    },\n                    \"e1000BaseDwdm4214\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1016\"\n                    },\n                    \"e1000BaseDwdm4294\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1017\"\n                    },\n                    \"e1000BaseDwdm4373\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1018\"\n                    },\n                    \"e1000BaseDwdm4453\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1019\"\n                    },\n                    \"e1000BaseDwdm4612\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1020\"\n                    },\n                    \"e1000BaseDwdm4692\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1021\"\n                    },\n                    \"e1000BaseDwdm4772\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1022\"\n                    },\n                    \"e1000BaseDwdm4851\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1023\"\n                    },\n                    \"e1000BaseDwdm5012\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1024\"\n                    },\n                    \"e1000BaseDwdm5092\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1025\"\n                    },\n                    \"e1000BaseDwdm5172\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1026\"\n                    },\n                    \"e1000BaseDwdm5252\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1027\"\n                    },\n                    \"e1000BaseDwdm5413\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1028\"\n                    },\n                    \"e1000BaseDwdm5494\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1029\"\n                    },\n                    \"e1000BaseDwdm5575\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1030\"\n                    },\n                    \"e1000BaseDwdm5655\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1031\"\n                    },\n                    \"e1000BaseDwdm5817\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1032\"\n                    },\n                    \"e1000BaseDwdm5898\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1033\"\n                    },\n                    \"e1000BaseDwdm5979\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1034\"\n                    },\n                    \"e1000BaseDwdm6061\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1035\"\n                    },\n                    \"e10GBaseWdmRxOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1036\"\n                    },\n                    \"e10GBaseDwdm3033\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1037\"\n                    },\n                    \"e10GBaseDwdm3112\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1038\"\n                    },\n                    \"e10GBaseDwdm3190\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1039\"\n                    },\n                    \"e10GBaseDwdm3268\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1040\"\n                    },\n                    \"e10GBaseDwdm3425\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1041\"\n                    },\n                    \"e10GBaseDwdm3504\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1042\"\n                    },\n                    \"e10GBaseDwdm3582\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1043\"\n                    },\n                    \"e10GBaseDwdm3661\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1044\"\n                    },\n                    \"e10GBaseDwdm3819\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1045\"\n                    },\n                    \"e10GBaseDwdm3898\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1046\"\n                    },\n                    \"e10GBaseDwdm3977\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1047\"\n                    },\n                    \"e10GBaseDwdm4056\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1048\"\n                    },\n                    \"e10GBaseDwdm4214\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1049\"\n                    },\n                    \"e10GBaseDwdm4294\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1050\"\n                    },\n                    \"e10GBaseDwdm4373\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1051\"\n                    },\n                    \"e10GBaseDwdm4453\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1052\"\n                    },\n                    \"e10GBaseDwdm4612\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1053\"\n                    },\n                    \"e10GBaseDwdm4692\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1054\"\n                    },\n                    \"e10GBaseDwdm4772\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1055\"\n                    },\n                    \"e10GBaseDwdm4851\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1056\"\n                    },\n                    \"e10GBaseDwdm5012\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1057\"\n                    },\n                    \"e10GBaseDwdm5092\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1058\"\n                    },\n                    \"e10GBaseDwdm5172\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1059\"\n                    },\n                    \"e10GBaseDwdm5252\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1060\"\n                    },\n                    \"e10GBaseDwdm5413\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1061\"\n                    },\n                    \"e10GBaseDwdm5494\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1062\"\n                    },\n                    \"e10GBaseDwdm5575\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1063\"\n                    },\n                    \"e10GBaseDwdm5655\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1064\"\n                    },\n                    \"e10GBaseDwdm5817\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1065\"\n                    },\n                    \"e10GBaseDwdm5898\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1066\"\n                    },\n                    \"e10GBaseDwdm5979\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1067\"\n                    },\n                    \"e10GBaseDwdm6061\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1068\"\n                    },\n                    \"e1000BaseBX10D\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1069\"\n                    },\n                    \"e1000BaseBX10U\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1070\"\n                    },\n                    \"e100BaseUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1071\"\n                    },\n                    \"e100BaseUnapproved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1072\"\n                    },\n                    \"e100BaseSX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1073\"\n                    },\n                    \"e100BaseBX10D\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1074\"\n                    },\n                    \"e100BaseBX10U\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1075\"\n                    },\n                    \"e10GBaseBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1076\"\n                    },\n                    \"e10GBaseZR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1077\"\n                    },\n                    \"e100BaseEX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1078\"\n                    },\n                    \"e100BaseZX\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1079\"\n                    },\n                    \"e10GBaseLRM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1080\"\n                    },\n                    \"e10GBaseT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1081\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of physical layer medium dependent\ninterface on the port.\"\"\",\n        }, # column\n        \"portOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"minorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"majorFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational status of the port.\"\"\",\n        }, # column\n        \"portCrossGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A cross-reference to another mib group for this\nport. The value is dependent on the type of port.\nFor an FDDI port this corresponds to the\nsnmpFddiPORTSMTIndex.\"\"\",\n        }, # column\n        \"portAdditionalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Additional status information for the port. The\nvalue is a sum. It initially takes the value zero,\nthen for each state that is true, 2 raised to a\npower is added to the sum. The powers are\naccording to the following table:\n         State    Power\n      Transmit    0\n       Receive    1\n     Collision    2\nTransmit state indicates that at least one packet\nwas transmitted by the port in the last polling\nperiod. Receive state indicates that at least one\npacket was received by the port in the last\npolling period. Collision state indicates that\nat least one collision was detected on the port\nin the last polling period.\nNote that if a state is not applicable to a\nparticular port or additional status is not\nsupported on a particular port, its value is\nalways false for that port.\"\"\",\n        }, # column\n        \"portAdminSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"autoDetect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"autoDetect10100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"s10G\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"s64000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64000\"\n                    },\n                    \"s1544000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1544000\"\n                    },\n                    \"s2000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2000000\"\n                    },\n                    \"s2048000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2048000\"\n                    },\n                    \"s4000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4000000\"\n                    },\n                    \"s10000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10000000\"\n                    },\n                    \"s16000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16000000\"\n                    },\n                    \"s45000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45000000\"\n                    },\n                    \"s64000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64000000\"\n                    },\n                    \"s100000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100000000\"\n                    },\n                    \"s155000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"155000000\"\n                    },\n                    \"s400000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"400000000\"\n                    },\n                    \"s622000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"622000000\"\n                    },\n                    \"s1000000000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1000000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired speed of the port.\nThe current operational speed of the port can be\ndetermined from ifSpeed.\"\"\",\n        }, # column\n        \"portDuplex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"half\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"full\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disagree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the port is operating in half-\nduplex, full-duplex, disagree or auto negotiation\nmode. If the port could not agree with the far end\non port duplex, the port will be in disagree(3)\nmode.\"\"\",\n        }, # column\n        \"portIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the ifIndex object,\ndefined in MIB-II, for the interface corresponding\nto this port.\"\"\",\n        }, # column\n        \"portSpantreeFastStart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the port is operating in\nspantree fast start mode. A port with fast start\nenabled is immediately put in spanning tree\nforwarding state on link up, rather than starting\nin blocking state which is the normal operation.\nThis is useful when the port is known to be\nconnected to a single station which has problems\nwaiting for the normal spanning tree operation to\nput the port in forwarding state.\n\nThis object is deprecated and replaced by\nstpxFastStartPortTable in\nCISCO-STP-EXTENSIONS-MIB.\"\"\",\n        }, # column\n        \"portAdminRxFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"desired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"off\",\n            \"description\" :\n                \"\"\"Indicates the receive flow control administrative\nstatus set on the port. If the status is set to\non(1), the port will require the far end to send\nflow control. If the status is set to off(2), the\nport will not allow far end to send flow control.\nIf the status is set to desired(3), the port will\nallow the far end to send the flow control.\"\"\",\n        }, # column\n        \"portOperRxFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disagree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the receive flow control operational\nstatus of the port. If the port could not agree\nwith the far end on a link protocol, its\noperational status will be disagree(3).\"\"\",\n        }, # column\n        \"portAdminTxFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"desired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the transmit flow control\nadministrative status set on the port.\nIf the status is set to on(1), the port will send\nflow control to the far end.\nIf the status is set to off(2), the port will not\nsend flow control to the far end. If the status is\nset to desired(3), the port will send flow control\nto the far end if the far end supports it.\"\"\",\n        }, # column\n        \"portOperTxFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disagree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the transmit flow control operational\nstatus of the port. If the port could not agree\nwith the far end on a link protocol, its\noperational status will be disagree(3).\"\"\",\n        }, # column\n        \"portMacControlTransmitFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of MAC control frames passed to\nthe MAC sublayer for transmission.\"\"\",\n        }, # column\n        \"portMacControlReceiveFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of MAC control frames passed by\nthe MAC sublayer to the MAC Control sublayer on\nreceive.\"\"\",\n        }, # column\n        \"portMacControlPauseTransmitFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of PAUSE frames passed to\nthe MAC sublayer for transmission.\"\"\",\n        }, # column\n        \"portMacControlPauseReceiveFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of PAUSE frames passed by\nthe MAC sublayer to the MAC Control sublayer\non receive.\"\"\",\n        }, # column\n        \"portMacControlUnknownProtocolFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of MAC Control frames received\nwith an opcode that is not supported by the\ndevice.\"\"\",\n        }, # column\n        \"portLinkFaultStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nearEndFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearEndConfigFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"farEndDisable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"farEndFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"farEndConfigFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies additional link fault status on a\ngigabit link.\n\nnoFault:\n        Link is up and operational.\nnearEndFault:\n        The port is enabled but there is no GBIC\n        present or the local port cannot\n        synchronize with the remote end.\nnearEndConfigFail:\n        The local port has detected a\n        configuration mismatch with the remote\n        end.\nfarEndDisable:\n        The far end is in the disabled state.\nfarEndFault:\n        The remote port is cannot synchronize.\nfarEndConfigFail:\n        The remote port has detected a\n        configuration mismatch with the local end.\nnotApplicable:\n        Link fault status is not applicable on\n        this port.\"\"\",\n        }, # column\n        \"portAdditionalOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"faulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notConnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"dripDis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"monitor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"errdisable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"linkFaulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"onHook\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"offHook\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"reflector\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational status of the port which\nis showing additional detailed information of the\nport.\"\"\",\n        }, # column\n        \"portInlinePowerDetect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate if the port detects an inline power capable\ndevice connected to it.\"\"\",\n        }, # column\n        \"portEntPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the entPhysicalIndex\nobject, defined in ENTITY-MIB, for the\nentity physical index corresponding to this port.\"\"\",\n        }, # column\n        \"portErrDisableTimeOutEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.4.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether a port that is put into\nerrdisable state by a cause as specified by\nsysErrDisableTimeoutEnable will be re-enabled\nautomatically during the timeout interval as\nspecified by sysErrDisableTimeoutInterval.\"\"\",\n        }, # column\n        \"tftpGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5\",\n        }, # node\n        \"tftpHost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of source/destination host for the TFTP\ntransfer or storage device transfer. If the name\nis for the TFTP transfer, it can be the IP\naddress or the host name. If the name for the\nstorage device transfer, it will be in the format\nof deviceName: (e.g. slot0:, slot1:).\"\"\",\n        }, # scalar\n        \"tftpFile\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of file for the TFTP transfer or for storage\ndevice transfer.\"\"\",\n        }, # scalar\n        \"tftpModule\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Which module's code/configuration is being\ntransferred.\"\"\",\n        }, # scalar\n        \"tftpAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"downloadConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uploadConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"downloadSw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"uploadSw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"downloadFw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"uploadFw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to one of the acceptable\nvalues initiates the requested action using the\ninformation given in tftpHost, tftpFile,\ntftpModule.\n\n    downloadConfig(2): receive configuration from\n                       host/file\n    uploadConfig(3)  : send configuration to\n                       host/file\n    downloadSw(4)    : receive software image from\n                       host/file\n    uploadSw(5)      : send software image to\n                       host/file\n    downloadFw(6)    : receive firmware image from\n                       host/file\n    uploadFw(7)      : send firmware image to\n                       host/file\nSetting this object to any other value results in\nan error.\"\"\",\n        }, # scalar\n        \"tftpResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noResponse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"tooManyRetries\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"noBuffers\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noProcesses\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"badChecksum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"badLength\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"badFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"serverError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"userCanceled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wrongCode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"fileNotFound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"invalidTftpHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"invalidTftpModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"accessViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"unknownStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"invalidStorageDevice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"insufficientSpaceOnStorageDevice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"insufficientDramSize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"incompatibleImage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains result of the last tftp action request.\"\"\",\n        }, # scalar\n        \"brouterGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6\",\n        }, # node\n        \"brouterEnableRip\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the RIP protocol is enabled.\"\"\",\n        }, # scalar\n        \"brouterEnableSpantree\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates if Spanning Tree protocol is enabled.\"\"\",\n        }, # scalar\n        \"brouterEnableGiantCheck\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether special handling of giant\npackets is enabled.\"\"\",\n        }, # scalar\n        \"brouterEnableIpFragmentation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether IP fragmentation is enabled.\"\"\",\n        }, # scalar\n        \"brouterEnableUnreachables\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether ICMP unreachable messages are\nsent by the system.\"\"\",\n        }, # scalar\n        \"brouterCamAgingTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"The aging time for the CAM table. This duplicate\nitem is the same value as dot1dTpAgingTime.\"\"\",\n        }, # scalar\n        \"brouterCamMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"filtering\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"filtering\",\n            \"description\" :\n                \"\"\"Mode in which the CAM module is operating.\"\"\",\n        }, # scalar\n        \"brouterIpxSnapToEther\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"snap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ethernetII\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"iso8023\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"raw8023\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"raw8023\",\n            \"description\" :\n                \"\"\"The default translation for IPX packets when\nbridging from FDDI SNAP to Ethernet.\"\"\",\n        }, # scalar\n        \"brouterIpx8023RawToFddi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"snap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"iso8022\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fddiRaw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"snap\",\n            \"description\" :\n                \"\"\"The default translation for IPX packets when\nbridging from Ethernet 802.3 Raw to FDDI.\"\"\",\n        }, # scalar\n        \"brouterEthernetReceiveMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"64\",\n            \"description\" :\n                \"\"\"Maximum number of Ethernet receive buffers\nprocessed at one time per port.\"\"\",\n        }, # scalar\n        \"brouterEthernetTransmitMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"64\",\n            \"description\" :\n                \"\"\"Maximum number of Ethernet transmit buffers\nprocessed at one time per port.\"\"\",\n        }, # scalar\n        \"brouterFddiReceiveMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"512\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"256\",\n            \"description\" :\n                \"\"\"Maximum number of FDDI receive buffers processed\nat one time per port.\"\"\",\n        }, # scalar\n        \"brouterFddiTransmitMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"512\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"256\",\n            \"description\" :\n                \"\"\"Maximum number of FDDI transmit buffers processed\nat one time per port.\"\"\",\n        }, # scalar\n        \"brouterPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of brouter port entries. The number of\nentries is determined by the number of modules in\nthe chassis and the number of ports on each\nmodule.\"\"\",\n        }, # table\n        \"brouterPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"brouterPortModule\",\n                \"brouterPort\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing bridge/router information for a\nparticular port on a module.\"\"\",\n        }, # row\n        \"brouterPortModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule index where this port is located.\"\"\",\n        }, # column\n        \"brouterPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"brouterPortIpVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP Virtual LAN to which this port belongs.\"\"\",\n        }, # column\n        \"brouterPortIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's IP address.\"\"\",\n        }, # column\n        \"brouterPortNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's subnet mask.\"\"\",\n        }, # column\n        \"brouterPortBroadcast\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's broadcast address.\"\"\",\n        }, # column\n        \"brouterPortBridgeVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1023\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1023\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The bridge Virtual LAN to which this port\nbelongs.\"\"\",\n        }, # column\n        \"brouterPortIpHelpers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of which other Virtual LANs UDP/IP\nbroadcasts received on this port will be forwarded\nto. The normal situation is broadcasts NOT\nforwarded beyond the originating VLAN, but it can\nbe useful in certain circumstances. This is an\noctet string value with bits set to indicate\nforwarded to VLANs. It can be interpreted as a sum\nof f(x) as x goes from 0 to 1023, where f(x) = 0\nfor no forwarding to VLAN x and f(x) = exp(2, x)\nfor VLAN x forwarded to. If all bits are 0 or the\noctet string is zero length, then UDP/IP\nbroadcasts are not being forwarded to other\nVLANs.\"\"\",\n        }, # column\n        \"brouterIpx8022ToEther\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"snap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ethernetII\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"iso8023\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"raw8023\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"iso8023\",\n            \"description\" :\n                \"\"\"The default translation for IPX packets when\nbridging from FDDI 802.2 to Ethernet.\"\"\",\n        }, # scalar\n        \"brouterEnableTransitEncapsulation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether Ethernet packets are\nencapsulated on FDDI via transit encapsulation\nprotocol. Normally this option would be disabled\nto allow translational bridging between Ethernet\nand FDDI to take place.\"\"\",\n        }, # scalar\n        \"brouterEnableFddiCheck\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether MAC addresses learned one side\nof a translational bridge should not be allowed to\nbe learned on the other side of the bridge. The\npresence certain misbehaving devices on the\nnetwork may require this option to be enabled.\"\"\",\n        }, # scalar\n        \"brouterEnableAPaRT\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.6.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the Automatic Packet\nRecognition and Translation feature is enabled on\ntranslational bridge(s) in the box. If APaRT is\ndisabled, the default translations as defined by\nthe objects brouterIpx8022ToEther,\nbrouterIpx8023RawToFddi, brouterIpxSnapToEther,\netc, are used on all packets and no automatic\nlearning of translation information is performed.\"\"\",\n        }, # scalar\n        \"filterGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7\",\n        }, # node\n        \"filterMacTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filter mac entries.\"\"\",\n        }, # table\n        \"filterMacEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"filterMacModule\",\n                \"filterMacPort\",\n                \"filterMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing MAC address filter information.\"\"\",\n        }, # row\n        \"filterMacModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"filterMacPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"filterMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A MAC address. If the source or destination MAC\naddress equals this value, a match occurs. The\npacket is dropped if a match occurs and deny(1)\nwas specified. The packet is dropped if a match\ndoesn't occur and at least one MAC address filter\nwas specified with permit(3).\"\"\",\n        }, # column\n        \"filterMacType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"permitSrc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"permitDst\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"denySrc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"denyDst\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"denySrcLearn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2) removes the\ncorresponding entry from the filterMacTable.\nTo add a new entry to the filterMacTable, set this\nobject to deny(1) or any value from permit(3) to\ndenySrcLearn(8) for a module, port, and MAC\naddress not already in the table.\"\"\",\n        }, # column\n        \"filterVendorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filter vendor ID entries.\"\"\",\n        }, # table\n        \"filterVendorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"filterVendorModule\",\n                \"filterVendorPort\",\n                \"filterVendorId\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing vendor ID filter information.\"\"\",\n        }, # row\n        \"filterVendorModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"filterVendorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"filterVendorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-STACK-MIB\", \"name\" : \"VendorIdType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor ID portion of a MAC address. If the\nsource or destination MAC address has the same\nvendor ID, a match occurs. The packet is dropped\nif a match occurs and deny(1) was specified. The\npacket is dropped if a match doesn't occur and at\nleast one Vendor ID filter was specified with\npermit(3).\"\"\",\n        }, # column\n        \"filterVendorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2) removes the\ncorresponding entry from the filterVendorTable.\nTo add a new entry to the filterVendorTable, set\nthis object to deny(1) or permit(3) for a module,\nport, and vendor ID not already in the table.\"\"\",\n        }, # column\n        \"filterProtocolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filter protocol entries.\"\"\",\n        }, # table\n        \"filterProtocolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"filterProtocolModule\",\n                \"filterProtocolPort\",\n                \"filterProtocolValue\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing PROTOCOL address filter\ninformation.\"\"\",\n        }, # row\n        \"filterProtocolModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"filterProtocolPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"filterProtocolValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 16-bit protocol value. If the packet's type\nfield or the packet's DSAP/SSAP field is equal to\nthis value, a match occurs. The packet is dropped\nif a match occurs and deny(1) was specified. The\npacket is dropped if a match doesn't occur and at\nleast one protocol type filter was specified with\npermit(3).\"\"\",\n        }, # column\n        \"filterProtocolType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deny\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2) removes the\ncorresponding entry from the filterProtocolTable.\nTo add a new entry to the filterProtocolTable, set\nthis object to deny(1) or permit(3) for a module,\nport, and protocol value not already in the\ntable.\"\"\",\n        }, # column\n        \"filterTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filter test entries.\"\"\",\n        }, # table\n        \"filterTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"filterTestModule\",\n                \"filterTestPort\",\n                \"filterTestIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing test filter information.\"\"\",\n        }, # row\n        \"filterTestModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"filterTestPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"filterTestIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies a test\nfor a particular module/port.\"\"\",\n        }, # column\n        \"filterTestType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2) removes the\ncorresponding entry from the filterTestTable. To\nadd a new entry to the filterTestTable, set this\nobject to valid(1) for a module, port, and test\nindex not already in the table.\"\"\",\n        }, # column\n        \"filterTestOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A byte offset into packet. Must be a 32-bit word\naligned offset, i.e. 0, 4, 8, etc.\"\"\",\n        }, # column\n        \"filterTestValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 32-bit value to be compared against the packet\nlocation specified by filterTestOffset.\"\"\",\n        }, # column\n        \"filterTestMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 32-bit value to be bitwise ANDed with the\npacket location specified by filterTestOffset\nbefore  being compared to filterTestValue.\"\"\",\n        }, # column\n        \"filterPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filter port entries. The number of\nentries is determined by the number of modules in\nthe chassis and the number of ports on each\nmodule.\"\"\",\n        }, # table\n        \"filterPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"filterPortModule\",\n                \"filterPort\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing filter information for a\nparticular port on a module.\"\"\",\n        }, # row\n        \"filterPortModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"filterPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"filterPortComplex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A complex expression made up of the numbers 1\nthrough 8 indicating test results from\nfilterTestIndex and using logical operators '&'\n(and), '|' (or), '!' (not), and parenthesis. For\nexample: ((1 & 2) | !3). If this complex filter\nmatches a packet, it is dropped.\"\"\",\n        }, # column\n        \"filterPortBroadcastThrottle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The maximum number of broadcast packets per\nsecond allowed on this port. If the number of\nincoming broadcast packets in a one second\ninterval exceeds this amount, packets are\ndropped for the rest of the interval. If the\ncapability exists, only broadcast packets should\nbe dropped. Otherwise, all packets are dropped\nduring the suppression interval.\n\nA value of 0 indicates broadcast packets should\nnot be limited.\n\nThe ability to suppress broadcast packets in this\nmanner exists only on certain ports. If it does\nnot exist on this port, attempts to write a value\nother than 0 are rejected.\n\nThis object also applies to multicast (and/or)\nunicast suppression when\nfilterPortSuppressionOption is enabled.\"\"\",\n        }, # column\n        \"filterPortBroadcastThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"100\",\n            \"description\" :\n                \"\"\"Indicates the integer part of the maximum\npercentage of available bandwidth allowed for\nincoming traffic of the specific traffic types on\nthis port. The associated object\nfilterPortBroadcastThresholdFraction indicates the\nfraction part of the maximum percentage of\navailable bandwidth allowed for incoming traffic\nof the specific traffic types on this port. Either\npackets of the specific traffic types are dropped\nof the port is put into errdisable state depending\non the value of filterPortSuppressionViolation on\nthis port if the percentage of incoming traffic of\nthe specific traffic types would exceed this\nlimit. The traffic types that are enabled for\nthis traffic suppression feature is indicated by\nfilterPortBroadcastOption.\n\nThe maximum percentage for the combination of this\nobject value and the object value of\nfilterPortBroadcastThresholdFraction is 100.00\nwhich indicates traffic of all traffic types\nshould not be limited.\n\nThe ability to suppress traffic in this manner\nexists only on certain ports. If it does not\nexist on this port, attempts to write a value of\nthis object other than 100 are rejected.\n\nOn platforms where filterPortSuppressionOption\nobject is not supported, this object only applies\nto broadcast suppression.\"\"\",\n        }, # column\n        \"filterPortBroadcastDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets discarded due to traffic\nsuppression on this port.\"\"\",\n        }, # column\n        \"filterPortBroadcastThresholdFraction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"one-hundredths\",\n            \"description\" :\n                \"\"\"Indicates the fraction part of the maximum\npercentage of available bandwidth allowed for\nincoming traffic of the specific traffic types on\nthis port. The associated object\nfilterPortBroadcastThreshold indicates the integer\npart of the maximum percentage of available\nbandwidth allowed for incoming traffic of the\nspecific traffic types on this port. Either\npackets of the specific traffic types are dropped\nor the port is put into errdisable state\ndepending on the value of\nfilterPortSuppressionViolation on this port if the\npercentage of incoming traffic of the specific\ntraffic type would exceed this limit. The\ntraffic types that are enabled for this traffic\nsuppression feature is indicated by\nfilterPortBroadcastOption.\n\nThe maximum percentage for the combination\nof this object value and the object value of\nfilterPortBroadcastThreshold is 100.00 which\nindicates traffic of all traffic types should not\nbe limited.\n\nThe ability to suppress traffic in this manner\nexists only on certain ports. If it does not exist\non this port, attempts to write a value of this\nobject other than 100 are rejected.\n\nOn platforms where filterPortSuppressionOption\nobject is not supported, this object only applies\nto broadcast suppression.\"\"\",\n        }, # column\n        \"filterPortSuppressionOption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"multicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"unicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the traffic types that traffic\nsuppression feature is enabled for.\n\nmulticast(0) is set when multicast suppression is\nenabled. unicast(1) is set when unicast\nsuppression is enabled. broadcast(2) is set when\nbroadcast suppression is enabled.\"\"\",\n        }, # column\n        \"filterPortSuppressionViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.7.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dropPackets\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"errdisable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the action that will be taken on this\nport when the percentage of either broadcast,\nmulticast or unicast traffic exceeds the limit as\nindicated by filterPortBroadcastThreshold and\nfilterPortBroadcastThresholdFraction.\n\n\ndropPackets - the excessive packets will be\n            - dropped on this port.\n\nerrdisable - the port will be put into errdisable\n           - state.\n\nThe object is only supported on platforms that\nsupport this suppression violation action\nfeature.\"\"\",\n        }, # column\n        \"monitorGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8\",\n        }, # node\n        \"monitorSourceModule\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where the monitoring source port is\nlocated. A value of 0 indicates that the\nmonitorSourcePort is really a source Virtual LAN\nnumber. To monitor multiple source ports, this\nobject should be set to 0 and\nmonitorAdminSourcePorts should be configured.\"\"\",\n        }, # scalar\n        \"monitorSourcePort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1023\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1023\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmonitoring source port within a module or the\nmonitoring source Virtual LAN. To monitor multiple\nsource ports, this object should be set to 0 and\nmonitorAdminSourcePorts should be configured\"\"\",\n        }, # scalar\n        \"monitorDestinationModule\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where the monitoring destination port is\nlocated.\"\"\",\n        }, # scalar\n        \"monitorDestinationPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmonitoring destination port within a module.\"\"\",\n        }, # scalar\n        \"monitorDirection\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"transmit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"receive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"transmitAndReceive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"transmitAndReceive\",\n            \"description\" :\n                \"\"\"The type of packets to be monitored at the source\nport.\"\"\",\n        }, # scalar\n        \"monitorEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether port monitoring is in\nprogress.\"\"\",\n        }, # scalar\n        \"monitorAdminSourcePorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the administrative status of which\nports are monitored. All the monitored ports have\nto be non-trunking port and belong to the same\nVirtual LAN. The octet string contains one bit\nper port. Each bit within the octet string\nrepresents one port of the device. The ordering\nof ports represented within the octet string is\nin the same order as in the RFC 1493\ndot1dStpPortTable.\n\nThe bit value interpretation is as follows:\n        1 = being monitored\n        0 = not being monitored\"\"\",\n        }, # scalar\n        \"monitorOperSourcePorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.8.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates which ports are actually being\nmonitored. All the monitored ports have to be\nnon-trunking port and belong to the same Virtual\nLAN. The octet string contains one bit per port.\nEach bit within the octet string represents one\nport of the device. The ordering of ports\nrepresented within the octet string is in the same\norder as in the RFC 1493 dot1dStpPortTable.\n\nThe bit value interpretation is as follows:\n        1 = being monitored\n        0 = not being monitored\"\"\",\n        }, # scalar\n        \"vlanGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9\",\n        }, # node\n        \"vlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of Virtual LAN entries. The number of\nentries is determined by the number of VLANs\nsupported by the system.\"\"\",\n        }, # table\n        \"vlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.2.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"vlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information for a particular\nVirtual LAN.\"\"\",\n        }, # row\n        \"vlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nVirtual LAN associated with this information.\"\"\",\n        }, # column\n        \"vlanSpantreeEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether Spanning Tree protocol is\nenabled for this Virtual LAN.\n\nIf the device only supports a single global\nSpanning Tree PVST+ Protocol enable/disable\nfor all the existing VLANs, then the object\nvalue assigned to this VLAN will be applied\nto the object values of all the instances\nin this table which do not have the value\nof notApplicable(3).\n\nThis object is deprecated and replaced by\nstpxPVSTVlanEnable in\nCISCO-STP-EXTENSIONS-MIB.\"\"\",\n        }, # column\n        \"vlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.2.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the ifIndex object defined in\nMIB-II, for the interface corresponding to this\nVLAN.\n\nThis object is deprecated and replaced by\nvtpVlanIfIndex in CISCO-VTP-MIB.\"\"\",\n        }, # column\n        \"vlanPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Virtual LAN port entries. The number of\nentries is determined by the number of modules in\nthe chassis and the number of ports on each\nmodule.\"\"\",\n        }, # table\n        \"vlanPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vlanPortModule\",\n                \"vlanPort\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing Virtual LAN information for a\nparticular port on a module.\"\"\",\n        }, # row\n        \"vlanPortModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"vlanPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"vlanPortVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Virtual LAN to which this port belongs.\"\"\",\n        }, # column\n        \"vlanPortIslVlansAllowed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of which Virtual LANs are allowed\non this Inter-Switch Link. This is an octet string\nvalue with bits set to indicate allowed VLANs. It\ncan be interpreted as a sum of f(x) as x goes from\n0 to 1023, where f(x) = 0 for VLAN x not allowed\nand f(x) = exp(2, x) for VLAN x allowed.\"\"\",\n        }, # column\n        \"vlanPortSwitchLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"normal\",\n            \"description\" :\n                \"\"\"Indicates the priority level the port uses to\naccess the switching media. If vlanPortSwitchLevel\nis not applicable to the port, notApplicable(3)\nwill be returned by the device.\"\"\",\n        }, # column\n        \"vlanPortIslAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"desirable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"onNoNegotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the administrative status set on the\ntrunk port while the operational status is the one\nthat indicates whether the port is actually\ntrunking or not. If the status is set to off(2),\nthe port is permanently set to be a non-trunk. If\nthe status is set to onNoNegotiate(5), the port is\npermanently set to be a trunk and no negotiation\ntakes place with the far end to try to ensure\nconsistent operation. If the status is set to\non(1), the port initiates a request to become a\ntrunk and will become a trunk regardless of the\nresponse from the far end. If the status is set to\ndesirable(3), the port initiates a request to\nbecome a trunk and will become a trunk if the far\nend agrees. If the status is set to auto(4), the\nport does not initiate a request to become a trunk\nbut will do so if it receives a request to become\na trunk from the far end.\"\"\",\n        }, # column\n        \"vlanPortIslOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trunking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notTrunking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if the port is actually trunking or\nnot. In the case of ISL capable ports, the status\ndepends on the success or failure of the\nnegotiation process initiated by the port to\nbecome a trunk or non trunk.\nIn the case of 802.10 capable ports, it is\ndirectly related to the on/off administrative\nstatus.\"\"\",\n        }, # column\n        \"vlanPortIslPriorityVlans\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of which Virtual LANs have a better\ndot1dStpPortPriority value. This object can be\nused to perform load balancing on Inter-Switch\nLinks via spanning tree. An Inter-Switch Link has\ntwo dot1dStpPortPriority values which are shared\nby all the Virtual LANs on the link. The Virtual\nLANs indicated by this object have priority\nover the other Virtual LANs on the link.\n\nThis is an octet string value with bits set to\nindicate priority VLANs. It can be interpreted as\na sum of f(x) as x goes from 0 to 1023, where\nf(x) = 0 for a VLAN x which does not have priority\nand f(x) = exp(2, x) for a VLAN x which has\npriority.\n\nSetting the dot1dStpPortPriority value for any of\nthe Virtual LANs indicated by this object causes\nthe dot1dStpPortPriority value for all the Virtual\nLANs indicated by this object to be set to the\nsame value.\n\nSetting the dot1dStpPortPriority value for any\nother Virtual LAN causes the dot1dStpPortPriority\nvalue for all other Virtual LANs to be set to the\nsame value.\"\"\",\n        }, # column\n        \"vlanPortAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"static\",\n            \"description\" :\n                \"\"\"Indicates whether the port will get assigned to a\nVLAN statically or dynamically. When it is set to\ndynamic, the needed information will be accessed\nfrom one of the Vlan Membership Policy Servers\nspecified in the vmpsTable. Default value is\nstatic(1).\nNote that vlanPortAdminStatus cannot be set to\ndynamic(2) for a port which has\nportSecurityAdminStatus set to enabled(1) or for a\nport which currently has a vlanPortIslOperStatus\nof trunking(1).\"\"\",\n        }, # column\n        \"vlanPortOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"vlanActiveFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the current VLAN status of the\nport.\nA status of inactive(1) indicates that a dynamic\nport does not yet have a VLAN assigned or that a\nstatic or dynamic port has been assigned a VLAN\nthat is not currently active. A status of\nactive(2) indicates that the currently assigned\nVLAN is active. A status of shutdown(3) indicates\nthat the port has been shutdown as a result of a\nVMPS response on a dynamic port.\nA status of vlanActiveFault(4) only applies to\ntokenring ports and indicates that the port is\noperationally disabled because the TR-CRF VLAN of\nwhich the port is a member has active ports on\nanother device and only ports on that remote\ndevice may participate in that TR-CRF VLAN.\"\"\",\n        }, # column\n        \"vlanPortAuxiliaryVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.3.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    {\n                        \"min\" : \"1025\",\n                        \"max\" : \"4096\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Voice Virtual Vlan ID (VVID) to which this\nport belongs to.\nIf the VVID is not supported on the port, this MIB\nobject will not be configurable and will return\n4096.\n\nSetting this MIB object to 4096, the CDP packets\ntransmitting through this port would not include\nAppliance VLAN-ID TLV.\n\nSetting this MIB object to 4095, the CDP packets\ntransmitting through this port would contain\nAppliance VLAN-ID TLV with value of 4095 - VoIP\nand related packets are expected to be sent and\nreceived untagged without an 802.1p priority.\n\nSetting this MIB object to 0, the CDP packets\ntransmitting through this port would contain\nAppliance VLAN-ID TLV with value of 0 - VoIP\nand related packets are expected to be sent and\nreceived with VLAN-id=0 and an 802.1p priority.\n\nSetting this MIB object to N (1..1000|1025..4094),\nthe CDP packets transmitting through this port\nwould contain Appliance VLAN-ID TLV with N - VoIP\nand related packets are expected to be sent and\nreceived with VLAN-id=N and an 802.1p priority.\n\nThis object is deprecated and replaced by\nvmVoiceVlanId in CISCO-VLAN-MEMBERSHIP-MIB.\"\"\",\n        }, # column\n        \"vmpsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 IP addresses of\nVlan Membership Policy Servers.\"\"\",\n        }, # table\n        \"vmpsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vmpsAddr\",\n            ],\n            \"description\" :\n                \"\"\"A VMPS table entry.\"\"\",\n        }, # row\n        \"vmpsAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a Vlan Membership Policy\nServer. To configure the internal VMPS, use the\nsame IP address as specified in sysIpAddr.\"\"\",\n        }, # column\n        \"vmpsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add a new entry to the vmpsTable, set this\nobject to primary(2) or other(3) for an IP address\nwhich is not already in the table. The primary\nentry will be used first, if it is reachable.\nOtherwise one of the other entries will be used.\nSetting one entry to primary(2) causes any\nprevious primary entry to change to other(3).\nTo remove an entry from the table, set this\nobject to invalid(1).\"\"\",\n        }, # column\n        \"vmpsAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"noResponse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"noPrimaryVmps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noDynamicPort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"noHostConnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"reconfirm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object, when read, returns the result of the\nlast action requested: other(1), inProgress(2),\nsuccess(3), noResponse(3), noPrimaryVmps(5),\nnoDynamicPort(6), or noHostConnected(7).\n\nSetting this object to reconfirm(8) causes the\nswitch to contact the Vlan Membership Policy\nServer immediately to reconfirm the current VLAN\nassignments for all dynamic ports on the switch.\nNormally VLAN assignments for dynamic ports are\nreconfirmed once an hour.\"\"\",\n        }, # scalar\n        \"vmpsAccessed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the last Vlan Membership Policy\nServer accessed. If there was no response from the\nlast VMPS request, the value returned is 0.\"\"\",\n        }, # scalar\n        \"vlanTrunkMappingMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"entries\",\n            \"description\" :\n                \"\"\"Maximum number of active configurable trunk VLAN\nmapping entries allowed. A value of zero indicates\nno limitation on the number of active configurable\ntrunk VLAN mapping.\"\"\",\n        }, # scalar\n        \"vlanTrunkMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains zero or more rows of trunk\nVLAN to VLAN associations. The maximum number of\nactive entries is determined by\nvlanTrunkMappingMax.\n\nVLAN above 1k can not be created if the value of\ncorresponding instance of vlanTrunkMappingType is\ndot1qToisl(2).\"\"\",\n        }, # table\n        \"vlanTrunkMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vlanTrunkMappingFromVlan\",\n            ],\n            \"description\" :\n                \"\"\"Information about the VLAN mapping of a\nparticular trunk VLAN to another VLAN.\"\"\",\n        }, # row\n        \"vlanTrunkMappingFromVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN with this VLAN ID will be mapped to the\nVLAN in the corresponding instance of\nvlanTrunkMappingToVlan in the device.\n\nAgent returns inconsistentValue if this VLAN\nexists in the device.\n\nAgent returns inconsistentValue if this VLAN is\nnot a reserved VLAN and the value of corresponding\ninstance of vlanTrunkMappingType is\nreservedToNonReserved(1).\n\nAgent returns wrongValue if this VLAN is not a\nvalid 802.1Q VLAN and the value of corresponding\ninstance of vlanTrunkMappingType is\ndot1qToisl(2).\"\"\",\n        }, # column\n        \"vlanTrunkMappingToVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN which the corresponding instance of\nvlanTrunkMappingFromVlan will be mapped to.\n\nAgent returns inconsistentValue if this VLAN\nexists in the device.\n\nAgent returns inconsistentValue if this VLAN is a\nreserved VLAN and the value of corresponding\ninstance of vlanTrunkMappingType is\nreservedToNonReserved(1).\n\nAgent returns inconsistentValue if this VLAN is\nnot a valid ISL VLAN and the value of\ncorresponding instance of vlanTrunkMappingType\nis dot1qToisl(2).\"\"\",\n        }, # column\n        \"vlanTrunkMappingType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reservedToNonReserved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot1qToisl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of this trunk VLAN mapping.\n\nreservedToNonReserved(1)\n    An user defined association which maps a\n    reserved VLAN to a non-reserved VLAN.\n\ndot1qToisl(2)\n    An user defined association which maps a VLAN\n    in 802.1q trunk to a VLAN in ISL trunk.\n\nImplementations are allowed to restrict the\navailable types for this object.\n\nFor devices which support the range of VlanIndex\nbetween 1024 and 4095, the default value is\nreservedToNonReserved(1).  The default value is\ndot1qToisl(2) for devices which do not support the\nrange of VlanIndex between 1024 and 4095.\"\"\",\n        }, # column\n        \"vlanTrunkMappingOper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether this VLAN mapping is effective\nor not.\"\"\",\n        }, # column\n        \"vlanTrunkMappingStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.9.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this trunk VLAN mapping.\n\nOnce a row becomes active, value in any other\ncolumn within such row cannot be modified except\nby setting vlanTrunkMappingStatus to\nnotInService(2) for such row.\"\"\",\n        }, # column\n        \"securityGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10\",\n        }, # node\n        \"portSecurityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port security entries. The number of\nentries is determined by the number of ports in\nthe system which support the Security feature.\"\"\",\n        }, # table\n        \"portSecurityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portSecurityModuleIndex\",\n                \"portSecurityPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing security information for a\nparticular port.\"\"\",\n        }, # row\n        \"portSecurityModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"portSecurityPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"portSecurityAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"When security is enabled, source MAC addresses\nare monitored for all packets received on the\nport. If an address is detected that does not\nmatch the portSecuritySecureSrcAddr and any\ncorresponding portSecurityExtSecureSrcAddr, of\nwhich portSecurityExtModuleIndex and\nportSecurityExtPortIndex in the\nportSecurityExtTable is the same as the\nportSecurityModuleIndex and portSecurityPortIndex,\nand the number of MAC address learned or\nconfigured for this port is equal to\nportSecurityMaxSrcAddr, the port will shutdown or\ndrop packets. If the\nportSecurityViolationPolicy is set to shutdown(2),\nthe port is shutdown and a linkDown trap is sent;\notherwise the port drops the invalid packets.\"\"\",\n        }, # column\n        \"portSecurityOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of whether the port has been shut\ndown as a result of an insecure address being\ndetected on a secure port.\"\"\",\n        }, # column\n        \"portSecurityLastSrcAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last source MAC address in a receive packet\nseen on the port.\"\"\",\n        }, # column\n        \"portSecuritySecureSrcAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address to be compared with source MAC\naddresses of received packets when the\nportSecurityAdminStatus is enabled(1). Setting\nthis value to 0.0.0.0.0.0 puts the port in\nlearning mode so that the next source MAC\naddress received by the port becomes the\nportSecuritySecureSrcAddr.\"\"\",\n        }, # column\n        \"portSecurityMaxSrcAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1025\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1025\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"The maximum number (N) of MAC address to be\nsecured on the port. The first N MAC addresses\nlearned or configured are made secured. If the\nuser wants to make the port secured for more than\none MAC address, the portSecurityExtTable is used\nin addition to portSecuritySecureSrcAddr. If\nchanging the maximum number N of Mac address to M,\nwhich is smaller than N, some MAC addresses are\nremoved. Setting this value to 1,\nthe portSecurityExtTable will not be used for this\nport and the corresponding entries for this port\nwill also be removed from portSecurityExtTable.\"\"\",\n        }, # column\n        \"portSecurityAgingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The interval in which the port is secured. After\nthe expiration of the time, the corresponding\nportSecuritySecureSrcAddr or\nportSecurityExtSecureSrcAddr will be removed from\nthe secure address list. If the value of this\nobject is 0, the aging mechanism is disabled.\"\"\",\n        }, # column\n        \"portSecurityShutdownTimeOut\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The interval in which the port is shutdown due to\nthe violation of security. After the expiration\nof the time all the security configuration of this\nport is re-installed and the port is enabled. If\nthe value of this object is 0, the port is shut\ndown permanently.\"\"\",\n        }, # column\n        \"portSecurityViolationPolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"restrict\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"shutdown\",\n            \"description\" :\n                \"\"\"If the value of this object is\nrestrict(1)  - the port drops all packets with\n               insecured addresses.\nshutdown(2)  - the port is forced to shut down\n               if there is a violation of\n               security.\"\"\",\n        }, # column\n        \"portSecurityExtTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port security entries. The number of\nentries is determined by the number of ports in\nthe system which support the Security feature and\nthe number of MAC addresses learned/configured to\nbe secured per port.\"\"\",\n        }, # table\n        \"portSecurityExtEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portSecurityExtModuleIndex\",\n                \"portSecurityExtPortIndex\",\n                \"portSecurityExtSecureSrcAddr\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing security information for a\nparticular port and a particular MAC address. The\nentry can be configured by the user and can be\nadded by the agent when the device learns a new\nsecured MAC address.\"\"\",\n        }, # row\n        \"portSecurityExtModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"portSecurityExtPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"portSecurityExtSecureSrcAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the  MAC\naddress, which is to be secured.\"\"\",\n        }, # column\n        \"portSecurityExtControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object used to add or remove a secured\nMAC address of the corresponding port in\nthe row. If setting this object to valid(1), the\nportSecurityExtSecureSrcAddr is made to be secured\nfor the port. If setting this object to\ninvalid(2), the portSecurityExtSecureSrcAddr is\nno longer to be secured for the current port.\"\"\",\n        }, # column\n        \"tokenRingGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11\",\n        }, # node\n        \"tokenRingPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table containing token ring configuration\ninformation.\"\"\",\n        }, # table\n        \"tokenRingPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tokenRingModuleIndex\",\n                \"tokenRingPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing token ring configuration\ninformation for a particular port.\"\"\",\n        }, # row\n        \"tokenRingModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"tokenRingPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"tokenRingPortSetACbits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Specifies if the AC bits shall be set\nunconditionally when a port forwards certain LLC\nframes.\"\"\",\n        }, # column\n        \"tokenRingPortMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fdxCport\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fdxStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"hdxCport\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hdxStation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"riro\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"auto\",\n            \"description\" :\n                \"\"\"Specifies the port's mode of operation.\n\nauto:       Automatically detect the port mode\n            upon insertion.\n\nfdxCport:   Transmit Immediate (full-duplex)\n            Concentrator Port\n\nfdxStation: Transmit Immediate (full-duplex)\n            Station emulation\n\nhdxCport:   Token Passing Protocol (half-duplex)\n            Concentrator Port\n\nhdxStation: Token Passing Protocol (half-duplex)\n            Station emulation\n\nriro:       RingIn/RingOut mode. (wsx5031 only)\"\"\",\n        }, # column\n        \"tokenRingPortEarlyTokenRel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object provides the ability to enable or\ndisable early token release for a particular port.\n\nEarly token release only applies to ports\noperating at 16 Mbps. If ifSpeed reflects 4 Mbps\nfor a particular port, then the corresponding\ninstance of this object will have a value of\ndisabled(2) regardless of attempts to set the\nobject to enabled(1).\n\nWhenever a port is opened with a ring speed of\n16 Mbps, by default, early token release will be\nenabled.\"\"\",\n        }, # column\n        \"tokenRingPortPriorityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3\",\n            \"description\" :\n                \"\"\"The highest token ring frame priority that shall\ngo to the low-priority transmit queue.\"\"\",\n        }, # column\n        \"tokenRingPortPriorityMinXmit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"4\",\n            \"description\" :\n                \"\"\"The minimum token priority that will be used for\ntransmit.\"\"\",\n        }, # column\n        \"tokenRingPortCfgLossThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"8\",\n            \"description\" :\n                \"\"\"Number of configuration loss events during the\nsample interval which, if exceeded, should cause\nthe port to be disabled. If the port is disabled\nby this function the port must be administratively\nre-enabled.\"\"\",\n        }, # column\n        \"tokenRingPortCfgLossInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"10\",\n            \"description\" :\n                \"\"\"The sampling interval, in minutes, for which the\nport monitors to see if the configuration loss\nthreshold has been exceeded.\"\"\",\n        }, # column\n        \"tokenRingDripDistCrfMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"This object reflects whether TR-CRFs can be\ndistributed across ISL topologies. Setting\nthis object to enabled(1) allows TR-CRFs to be\ndistributed. Setting this object to disabled(2)\nprevents TR-CRFs from being distributed across\nISL topologies. When this object is set to\ndisabled(2), the system will disable ports\ninvolved in the distributed TR-CRF.\"\"\",\n        }, # scalar\n        \"tokenRingDripAreReductionMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"This object reflects whether or not All\nRoutes Explorer (ARE) reduction capabilities are\nenabled or disabled on this system. Setting\nthis object to enabled(1) will permit DRiP to\nparticipate in the configuration of Token Ring\nports ARE reduction capabilities on the system.\nSetting this object to disabled(2) will prevent\nDRiP from participating in the configuration\nof Token Ring port ARE reduction capabilities.\"\"\",\n        }, # scalar\n        \"tokenRingDripLocalNodeID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique system identifier that will be sent\nin all advertisements generated by this system.\nIt uniquely identifies this system from other\nDRiP capable systems.\"\"\",\n        }, # scalar\n        \"tokenRingDripLastRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The revision number transmitted in the most\nrecent advertisement. That advertisement may\nor may not have contained changed data.\"\"\",\n        }, # scalar\n        \"tokenRingDripLastChangedRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The revision number transmitted in the most\nrecent advertisement containing changed data.\"\"\",\n        }, # scalar\n        \"tokenRingDripAdvertsReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DRiP advertisements received\nby this system.\"\"\",\n        }, # scalar\n        \"tokenRingDripAdvertsTransmitted\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DRiP advertisements transmitted\nby this system.\"\"\",\n        }, # scalar\n        \"tokenRingDripAdvertsProcessed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DRiP advertisements processed\nby this system.\"\"\",\n        }, # scalar\n        \"tokenRingDripInputQueueDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DRiP advertisements dropped\nfrom this system's input queue.\"\"\",\n        }, # scalar\n        \"tokenRingDripOutputQueueDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DRiP advertisements dropped\nfrom this system's output queue.\"\"\",\n        }, # scalar\n        \"tokenRingDripLocalVlanStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing DRiP VLAN status information\nlocal to this system. The existence of an\nentry indicates that at least one local port\nis assigned to the associated TR-CRF VLAN.\"\"\",\n        }, # table\n        \"tokenRingDripLocalVlanStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tokenRingDripVlan\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing DRiP related information for\na particular TR-CRF VLAN.\"\"\",\n        }, # row\n        \"tokenRingDripVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A TR-CRF VLAN ID.\"\"\",\n        }, # column\n        \"tokenRingDripLocalPortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects DRiP's status regarding\nthe overall set of local ports assigned to\nthe TR-CRF VLAN associated with this entry.\nA value of active(1) indicates that at least\none local port is inserted/connected (i.e.,\nactive on the Token Ring). A value of inactive(2)\nindicates that none of the local ports are\ninserted/connected. All local ports are either\ndisabled or are simply not connected.\"\"\",\n        }, # column\n        \"tokenRingDripRemotePortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects DRiP's status regarding\nany ports on remote systems. A value of\nactive(1) indicates that at least one remote\nport is inserted/connected (i.e., active on\nthe Token Ring). A value of inactive(2) indicates\nthat none of the remote ports are\ninserted/connected. All remote ports are either\ndisabled or are simply not connected.\"\"\",\n        }, # column\n        \"tokenRingDripRemotePortConfigured\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects whether or not DRiP has\ndetected remote ports assigned to the TR-CRF\nVLAN associated with this entry. A value of\ntrue(1) indicates there is at least one port\non a remote system assigned to this TR-CRF VLAN.\nA value of false(2) indicates no remote ports\nare assigned to this TR-CRF VLAN.\"\"\",\n        }, # column\n        \"tokenRingDripDistributedCrf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects whether DRiP considers the\nTR-CRF VLAN associated with this entry to be\ndistributed across systems. A value of true(1)\nindicates the TR-CRF is distributed. A value\nof false(2) indicates the TR-CRF is not\ndistributed.\"\"\",\n        }, # column\n        \"tokenRingDripBackupCrf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects whether or not the TR-CRF\nVLAN associated with this entry is configured\nas a backup TR-CRF. A value of true(1) indicates\nthe TR-CRF is a configured as a backup. A value\nof false(2) indicates the TR-CRF is not configured\nas a backup.\"\"\",\n        }, # column\n        \"tokenRingDripOwnerNodeID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.12.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique identifier  of the system that has\nadvertised that it has local ports assigned to the\nTR-CRF VLAN associated with this entry.\"\"\",\n        }, # column\n        \"tokenRingPortSoftErrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table containing token ring soft error monitoring\nconfiguration information.\"\"\",\n        }, # table\n        \"tokenRingPortSoftErrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"CISCO-STACK-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"tokenRingPortEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Entry containing token ring soft error monitoring\nconfiguration information for a particular port.\"\"\",\n        }, # row\n        \"tokenRingPortSoftErrThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"100\",\n            \"description\" :\n                \"\"\"The number of soft errors reported from a station\nconnected to this port which, if exceeded, should\ncause a soft error exceeded trap to be issued.\nThe error counters being monitored and compared to\nthis threshold value are all of the error counters\nin the ringStationTable (see RFC 1513).\"\"\",\n        }, # column\n        \"tokenRingPortSoftErrReportInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"description\" :\n                \"\"\"The sampling period, in seconds, in which each\nstation connected to this port will be monitored\nfor excessive soft error reports. If a station\nreports more than tokenRingPortSoftErrThreshold\nerrors within the sampling period a trap will be\nissued to the management station(s). Setting a\nvalue of 0 will cause no traps to be sent for\nthis port.\"\"\",\n        }, # column\n        \"tokenRingPortSoftErrResetCounters\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this object is set to reset(2), all Soft\nError Monitoring related counters on this port\nwill be set to 0.\"\"\",\n        }, # column\n        \"tokenRingPortSoftErrLastCounterReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since Soft\nError Monitoring counters for this port were last\ncleared.\"\"\",\n        }, # column\n        \"tokenRingPortSoftErrEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.11.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the Token Ring Soft Error\nMonitoring feature is enabled on this port or not.\nThe detailed soft error statistics are provided\nby Token Ring RMON SNMP objects. Thus, if RMON\n(sysEnableRmon) is disabled(2) then the soft error\nstatistics will only be available from the CLI.\"\"\",\n        }, # column\n        \"multicastGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12\",\n        }, # node\n        \"mcastRouterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of multicast router port entries. The\nnumber of entries is determined by the number of\nports in the system.\"\"\",\n        }, # table\n        \"mcastRouterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mcastRouterModuleIndex\",\n                \"mcastRouterPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing multicast router information for\na particular port.\"\"\",\n        }, # row\n        \"mcastRouterModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located\n(see portModuleIndex).\"\"\",\n        }, # column\n        \"mcastRouterPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"mcastRouterAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"routerPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"dynamic\",\n            \"description\" :\n                \"\"\"And indication of whether the presence of an IP\nmulticast router on this port is to be determined\nstatically or dynamically. The value\nrouterPresent(1) indicates that the presence of a\nrouter is statically configured to be present.\nThe value dynamic(3) indicates the presence is to\nbe learned dynamically.\"\"\",\n        }, # column\n        \"mcastRouterOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"routerPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noRouter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of whether an IP multicast router\nis present on this port.\"\"\",\n        }, # column\n        \"mcastEnableCgmp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether Cisco Group Management Protocol\nis enabled on the device or not. When CGMP is\nenabled in conjunction with Cisco routers running\nCGMP, only the required ports will participate in\nIP multicast groups.\"\"\",\n        }, # scalar\n        \"mcastEnableIgmp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether Internet Group Management\nProtocol is enabled on the device or not. When\nIGMP is enabled in conjunction with Cisco routers\nrunning CGMP, only the required ports will\nparticipate in IP multicast groups.\"\"\",\n        }, # scalar\n        \"mcastEnableRgmp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether Router Group Management\nProtocol is enabled on the device or not. When\nRGMP is enabled in conjunction with Cisco routers\nrunning RGMP, multicast data traffic is forwarded\nonly to those multicast routers that are\ninterested to receive that data traffic. IGMP\nsnooping feature must be enabled on the system\nto make RGMP feature operational.\"\"\",\n        }, # scalar\n        \"dnsGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13\",\n        }, # node\n        \"dnsEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates if the DNS feature is enabled or\ndisabled.\"\"\",\n        }, # scalar\n        \"dnsServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 DNS servers.\"\"\",\n        }, # table\n        \"dnsServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dnsServerAddr\",\n            ],\n            \"description\" :\n                \"\"\"A DNS server table entry.\"\"\",\n        }, # row\n        \"dnsServerAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a DNS server.\"\"\",\n        }, # column\n        \"dnsServerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add a new entry to the dnsServerTable, set\nthis object to primary(2) or other(3) for an IP\naddress which is not already in the table. The\nprimary entry will be used first, if it is\nreachable. Otherwise, one of the other entries\nwill be used. Setting one entry to primary(2)\ncauses any previous primary entry to change to\nother(3). To remove an entry from the table, set\nthis object to invalid(1).\"\"\",\n        }, # column\n        \"dnsDomainName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.13.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"127\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"127\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DNS domain name.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC1035, section 2.3.1 Preferred name syntax.\"\"\",\n        }, # scalar\n        \"syslogGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14\",\n        }, # node\n        \"syslogServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 system log\nservers.\"\"\",\n        }, # table\n        \"syslogServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"syslogServerAddr\",\n            ],\n            \"description\" :\n                \"\"\"A system log server table entry.\"\"\",\n        }, # row\n        \"syslogServerAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a system log Server.\"\"\",\n        }, # column\n        \"syslogServerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add/remove a new entry to the\nsyslogServerTable, setting to invalid(2) removes\nthe corresponding entry from the\nsyslogServerTable. To add a new entry into\nsyslogServerTable, set this object to valid(1)\nfor an IP address which is not already in the\ntable.\"\"\",\n        }, # column\n        \"syslogConsoleEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicate whether the system log messages should\nbe sent to console.\"\"\",\n        }, # scalar\n        \"syslogHostEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicate whether the system log messages should\nbe sent to syslog servers.\"\"\",\n        }, # scalar\n        \"syslogMessageControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the information about what\nsystem log messages should be sent to syslog host,\nconsole, login session, and/or logged into the\ninternal buffer.\"\"\",\n        }, # table\n        \"syslogMessageControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"syslogMessageFacility\",\n            ],\n            \"description\" :\n                \"\"\"A system log message control table entry.\"\"\",\n        }, # row\n        \"syslogMessageFacility\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cdp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dtp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dvlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"earl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"pruning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"snmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"spantree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"system\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"tac\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"tcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"tftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"vtp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"vmps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"kernel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"filesys\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"drip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"pagp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"mls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"protfilt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"udld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"gvrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"cops\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"qos\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"acl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"rsvp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"ld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"privatevlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"ethc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"gl2pt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"callhome\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"dhcpsnooping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"diags\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"eou\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"eoam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"webauth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"dom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"mvrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System log message facility.\"\"\",\n        }, # column\n        \"syslogMessageSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"emergencies\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alerts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"errors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"warnings\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notification\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"debugging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System log message severity.\"\"\",\n        }, # column\n        \"syslogTimeStampOption\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether syslog Time Stamp Option is\nenabled or not. If it is set to enabled(1), the\nTime Stamp will be in the beginning of each\nsyslog message.\"\"\",\n        }, # scalar\n        \"syslogTelnetEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.14.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicate whether the system log messages should\nbe sent to telnet sessions.\"\"\",\n        }, # scalar\n        \"ntpGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15\",\n        }, # node\n        \"ntpBcastClient\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Entry which tells if Cat5000 should act as a\nBroadcast client or not.\"\"\",\n        }, # scalar\n        \"ntpBcastDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"999999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"999999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3000\",\n            \"description\" :\n                \"\"\"Estimated Round trip time (in micro seconds) for\nNTP broadcasts. The range is from 1 to 999999.\"\"\",\n        }, # scalar\n        \"ntpClient\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Entry which tells if the device can act as a NTP\nclient (in a client-server configuration type).\"\"\",\n        }, # scalar\n        \"ntpServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of NTP Server entries. This table lists a\nmaximum of 10 Entries.\"\"\",\n        }, # table\n        \"ntpServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ntpServerAddress\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing NTP information for a particular\nentry.\"\"\",\n        }, # row\n        \"ntpServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Entry containing NTP Server's IP address.\"\"\",\n        }, # column\n        \"ntpServerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add or remove an entry to ntpServerTable.\nSetting to 1 adds the entry and setting to 2\nclears the entry.\"\"\",\n        }, # column\n        \"ntpServerPublicKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The key to be used when communicating with this\nserver.\nA key with a value of zero indicates an invalid\nntpServerPublicKey. When the authentication\nfeature is enabled the system will not sync with\nthis server when ntpAuthenticationPublicKey\ndoesn't match with NTP Packet's public key.\n  or\nIf the ntpAuthenticationTrustedMode is trusted but\nencrypted message of ntpAuthenticationSecretKey\nwith NTP packet's data doesn't match with NTP\npacket's crypto checksum in the message\nauthentication mode (MAC).\n  or\nIf the ntpAuthenticationTrustedMode is untrusted.\n\nIn client mode NMP will not send request NTP\nPacket to the server when ntpServerPublicKey\ndoesn't match with any of the\nntpAuthenticationPublicKey in\nntpAuthenticationTable.\n  or\nIf the ntpAuthenticationTrustedMode is untrusted.\"\"\",\n        }, # column\n        \"ntpSummertimeStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Enabling or Disabling will set the clock ahead or\nbehind 1 hour respectively.(daylight savings time\nin USA). This command gets active only in Summer\ntime.\"\"\",\n        }, # scalar\n        \"ntpSummerTimezoneName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Summertime time zone name for display purposes.\"\"\",\n        }, # scalar\n        \"ntpTimezoneName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time zone name for display purposes.\"\"\",\n        }, # scalar\n        \"ntpTimezoneOffsetHour\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-12\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-12\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time offset (Hour) from Greenwich Mean Time.\"\"\",\n        }, # scalar\n        \"ntpTimezoneOffsetMinute\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"59\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"59\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time offset (Minutes) from Greenwich Mean Time.\"\"\",\n        }, # scalar\n        \"ntpAuthenticationEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Specifies if authentication feature is enabled or\ndisabled in the system.\"\"\",\n        }, # scalar\n        \"ntpAuthenticationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of NTP Authentication Key entries.\nThis table lists a maximum of 10 Entries\"\"\",\n        }, # table\n        \"ntpAuthenticationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ntpAuthenticationPublicKey\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the ntpAuthenticationTable,\ncontaining values of an NTP authentication key\npair.\"\"\",\n        }, # row\n        \"ntpAuthenticationPublicKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value to identify the authentication\nkey. When the authentication feature is enabled\nand the ntpAuthenticationPublicKey matches with\nthe NTP packet's public key then this entry is\nused.\"\"\",\n        }, # column\n        \"ntpAuthenticationSecretKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An arbitrary string known as the secret key used\nfor encrypting of the NTP packet. This key is\nuseful when the ntpAuthenticationTrustedMode is\nset to trusted(1).\nThis key has to be specified when this\nntpAuthenticationEntry is created. When reading\nthis object, it will return empty string.\"\"\",\n        }, # column\n        \"ntpAuthenticationTrustedMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trusted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"untrusted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A flag indicates whether the\nntpAuthenticationSecretKey is trusted or\nuntrusted. Setting a ntpAuthenticationSecretKey\nto trusted(1) allows authentication on NTP\npackets containing this key, and setting a\nntpAuthenticationSecretKey to untrusted(2) drops\nall NTP packets containing this key.\"\"\",\n        }, # column\n        \"ntpAuthenticationType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.15.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add or remove an entry to\nntpAuthenticationTable. Setting to 1 adds the\nentry and setting to 2 clears the entry.\"\"\",\n        }, # column\n        \"tacacsGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16\",\n        }, # node\n        \"tacacsLoginAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the login authentication using\nthe TACACS+ feature is enabled or disabled for\nconsole sessions and/or telnet sessions.\n\nSetting this object to enabled(1), the login\nauthentication using the TACACS+ feature is\nenabled for both telnet and console sessions.\n\nSetting this object to disabled(2), the login\nauthentication using the TACACS+ feature is\ndisabled for both telnet and console sessions.\n\nSetting this object to enabledForTelnetOnly(3),\nthe login authentication using the TACACS+\nfeature is enabled only for telnet sessions, but\ndisabled for console sessions.\n\nSetting this object to enabledForConsoleOnly(4),\nthe login authentication using the TACACS+\nfeature is enabled only for console sessions,\nbut disabled for telnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsEnableAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the enable authentication using\nthe TACACS+ feature is enabled or disabled for\nconsole sessions and/or telnet sessions based on\nthe value.\n\nSetting this object to enabled(1), the enable\nauthentication using the TACACS+ feature is\nenabled for both telnet and console sessions.\n\nSetting this object to disabled(2), the enable\nauthentication using the TACACS+ feature is\ndisabled for both telnet and console sessions.\n\nSetting this object to enabledForTelnetOnly(3),\nthe enable authentication using the TACACS+\nfeature is enabled only for telnet sessions, but\ndisabled for console sessions.\n\nSetting this object to enabledForConsoleOnly(4),\nthe enable authentication using the TACACS+\nfeature is enabled only for console sessions,\nbut disabled for telnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsLocalLoginAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the login authentication using\nlocal password is enabled or disabled for Console\nsession and/or Telnet session based on the value.\n\nSetting this object to enabled(1),the login\nauthentication using local password is enabled for\nboth telnet and console sessions.\n\nSetting this object to disabled(2), the login\nauthentication using local password is disabled\nfor both telnet and console sessions.\n\nSetting this object to enabledForTelnetOnly(3),\nthe login authentication using local password is\nenabled only for telnet sessions, but disabled for\nconsole session.\n\nSetting this object to enabledForConsoleOnly(4),\nthe login authentication using local password is\nenabled only for console session, but disabled for\ntelnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsLocalEnableAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the enable authentication using\nlocal password is enabled or disabled for Console\nsession and/or Telnet sessions.\n\nSetting this object to enabled(1),the enable\nauthentication using local password is enabled for\nboth telnet and console sessions.\n\nSetting this object to disabled(2), the enable\nauthentication using local password is disabled\nfor both telnet and console sessions.\n\nSetting this object to enabledForTelnetOnly(3),\nthe enable authentication using local password is\nenabled only for telnet sessions, but disabled for\nconsole sessions.\n\nSetting this object to enabledForConsoleOnly(4),\nthe enable authentication using local password is\nenabled only for console sessions, but disabled\nfor telnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsNumLoginAttempts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3\",\n            \"description\" :\n                \"\"\"The number of login attempts allowed.\n\nThis object is deprecated and replaced by\ncacMaxLoginAttempt in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsDirectedRequest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the directed-request feature of\nTACACS+ is enabled or disabled.\"\"\",\n        }, # scalar\n        \"tacacsTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"The duration in seconds to wait for a response\nfrom the TACACS+ server host.\n\nThis object is deprecated and replaced by\ncacLockoutPeriodExt in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"tacacsAuthKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The key used in encrypting the packets passed\nbetween the TACACS+ server and the client. This\nkey must match the one configured on the server.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # scalar\n        \"tacacsServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 TACACS+ servers.\"\"\",\n        }, # table\n        \"tacacsServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.9.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tacacsServerAddr\",\n            ],\n            \"description\" :\n                \"\"\"A TACACS+ server table entry.\"\"\",\n        }, # row\n        \"tacacsServerAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a TACACS+ Server.\"\"\",\n        }, # column\n        \"tacacsServerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.16.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add a new entry to the tacacsServerTable, set\nthis object to primary(2) or other(3) for an IP\naddress which is not already in the table. The\nprimary entry will be used first, if it is\nreachable. Otherwise, one of the other entries\nwill be used. Setting one entry to primary(2)\ncauses any previous primary entry to change to\nother(3). To remove an entry from the table, set\nthis object to invalid(1).\"\"\",\n        }, # column\n        \"ipPermitListGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17\",\n        }, # node\n        \"ipPermitEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForSnmpOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"This is deprecated and replaced by\nipPermitAccessTypeEnable.\n\nIndicate whether the IP permit feature is enabled\nor disabled for Telnet and/or SNMP.\n\nSetting this object to enabled(1), the IP permit\nfeature is enabled for both telnet and SNMP.\n\nSetting this object to disabled(2), the IP permit\nfeature is disabled for both telnet and SNMP.\n\nSetting this object to enabledForTelnetOnly(3),\nthe IP permit feature is enabled for Telnet, but\ndisabled for the rest.\n\nSetting this object to enabledForSnmpOnly(4), the\nIP permit feature is enabled for SNMP, but\ndisabled for the rest.\"\"\",\n        }, # scalar\n        \"ipPermitListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 100 IP Addresses\nwith net masks of IP permit hosts. If\nipPermitEnable is set to enabled(1), the system\nwill only accept inbound accesses which come from\nthe configured hosts with their permit access\ntypes in this table.\"\"\",\n        }, # table\n        \"ipPermitListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipPermitAddress\",\n                \"ipPermitMask\",\n            ],\n            \"description\" :\n                \"\"\"A IP permit list table entry.\"\"\",\n        }, # row\n        \"ipPermitAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a IP permit host.\"\"\",\n        }, # column\n        \"ipPermitMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP net mask of a IP permit host.\"\"\",\n        }, # column\n        \"ipPermitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to invalid(2), removes the\ncorresponding entry from the ipPermitListTable. To\nadd a new entry into ipPermitListTable, set this\nobject to valid(1), for an IP address and IP net\nmask which are not already in the table.\"\"\",\n        }, # column\n        \"ipPermitAccessType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"snmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ssh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"http\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"(telnet, snmp, ssh, http)\",\n            \"description\" :\n                \"\"\"The IP access type of a IP permit host.\nAt least one access type has to be set.\"\"\",\n        }, # column\n        \"ipPermitTelnetConnectLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Indicates the telnet connection limit that \nwill be applied when accepting new telnet \nconnections for a specific host. A value of \nzero means no limit will be applied for telnet \nconnections.\n\n\tSetting this object to a non-zero value will\n turn on the 'telnet' bit in the corresponding \n ipPermitAccessType. Turnning off the 'telnet' \n bit in the corresponding ipPermitAccessType will\n reset this ipPermitTelnetConnectLimit value to\n zero.\"\"\",\n        }, # column\n        \"ipPermitSshConnectLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Indicates the ssh connection limit that will \nbe applied when accepting new ssh connections \nfor a specific host. A value of zero means no \nlimit will be applied for ssh connections.\n\nSetting this object to a non-zero value will\nturn on the 'ssh' bit in the corresponding \nipPermitAccessType. Turnning off the 'ssh' bit \nin the corresponding ipPermitAccessType will\nreset this ipPermitSshConnectLimit value to\nzero.\"\"\",\n        }, # column\n        \"ipPermitDeniedListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists up to 10 the most recently\ndenied IP addresses with the access type.\"\"\",\n        }, # table\n        \"ipPermitDeniedListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipPermitDeniedAddress\",\n            ],\n            \"description\" :\n                \"\"\"A IP permit denied list table entry.\"\"\",\n        }, # row\n        \"ipPermitDeniedAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a IP permit denied access.\"\"\",\n        }, # column\n        \"ipPermitDeniedAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"snmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ssh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"http\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The denied access type.\"\"\",\n        }, # column\n        \"ipPermitDeniedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the IP\npermit denied access happens.\"\"\",\n        }, # column\n        \"ipPermitAccessTypeEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.17.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"snmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ssh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"http\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"()\",\n            \"description\" :\n                \"\"\"This is to replace ipPermitEnable.\nIndicates whether the IP permit feature is\nenabled or disabled for Telnet, SNMP, ssh and\nhttp. If a bit is set the coresponding feature is\nenabled. If a bit is not set the coresponding\nfeature is disabled.\"\"\",\n        }, # scalar\n        \"portChannelGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18\",\n        }, # node\n        \"portChannelTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of port channel entries. The number of\nentries is determined by the number of ports in\nthe system which support the Ethernet Channelling\nfeature.\n\nThis table is deprecated and replaced by\npagpEtherChannelTable in CISCO-PAGP-MIB and\ndot3adAggTable in IEEE8023-LAG-MIB.\"\"\",\n        }, # table\n        \"portChannelEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"portChannelModuleIndex\",\n                \"portChannelPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing information for a particular\nport on a module.\"\"\",\n        }, # row\n        \"portChannelModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"portChannelPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"portChannelPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports on a module channelling\ntogether. Each Octet within the value of this\nobject specifies a set of eight ports, with the\nfirst octet specifying ports 1 through 8, the\nsecond octet specifying ports 9 through 16, etc.\nWithin each octet, the most significant bit\nrepresents the lowest numbered port, and the\nleast significant bit rep resents the highest\nnumbered port. Thus, each port is represented by\na single bit within the value of this object. If\nthat bit has a value of `1' then that port is\nincluded in the set of channel ports. The default\nvalue of this object is a string which only has a\nvalue of `1' on its own port.\"\"\",\n        }, # column\n        \"portChannelAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"desirable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"desirableSilent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"autoSilent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"auto\",\n            \"description\" :\n                \"\"\"Indicates the administrative status set on the\nchannel ports. If the status is set to on(1), the\nchannelling is enabled. If the status is set to\noff(2), the channelling is disabled. If the status\nis set to desirable(3), the port initiates a pagp\nnegotiation request to become a channel and will\nbecome a channel if the far end agrees. If the\nstatus is set to auto(4), the port does not\ninitiate a request to become a channel but will do\nso if it receives a request to become a channel\nfrom the far end. If the status is set to\ndesirableSilent(5), the port initiates a pagp\nnegotiation request to become a channel and will\nbecome a channel if the far end agrees. If the\nport doesn't receive any packets from far end,\nthen  after some timeout period the port forms a\nchannel by itself. If the status is set to\nautoSilent(6), the port does not initiate a\nrequest to become a channel, but will do so if it\nreceives a request to become a channel from the\nfar end. If the port doesn't receive any request,\nthen after some timeout period the port forms a\nchannel by itself.\"\"\",\n        }, # column\n        \"portChannelOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"channelling\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notChannelling\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether the ports current channelling\noperational status is channel or not.\"\"\",\n        }, # column\n        \"portChannelNeighbourDeviceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the neighbors device id.\"\"\",\n        }, # column\n        \"portChannelNeighbourPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the neighbor ports' Id.\"\"\",\n        }, # column\n        \"portChannelProtInPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of protocol packets received\non the ports.\"\"\",\n        }, # column\n        \"portChannelProtOutPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the number of protocol packets\ntransmitted on the ports.\"\"\",\n        }, # column\n        \"portChannelIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.18.1.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the instance of the ifIndex object\ndefined in MIB-II, for the interface corresponding\nto the channel which the port belongs to. This\nobject will have a non zero value if its\nportChannelOperStatus is channelling and the link\nof this port is up.\"\"\",\n        }, # column\n        \"portCpbGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19\",\n        }, # node\n        \"portCpbTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port capability entries. The number of\nentries is determined by the number of modules in\nthe chassis and the number of ports on each\nmodule.\"\"\",\n        }, # table\n        \"portCpbEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portCpbModuleIndex\",\n                \"portCpbPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing port capability information for\na particular port on a module.\"\"\",\n        }, # row\n        \"portCpbModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located (see\nportModuleIndex).\"\"\",\n        }, # column\n        \"portCpbPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module (see portIndex).\"\"\",\n        }, # column\n        \"portCpbSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"mbps4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mbps10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mbps16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mbps45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mbps100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"mbps155\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"mbps400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"mbps622\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"mbps1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"mbps1dot544\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"mbps2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"mbps2dot048\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"kps64\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"mbps10000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the port speed capability of a port.\"\"\",\n        }, # column\n        \"portCpbDuplex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"half\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"full\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"hdx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fdx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the duplex capability of a port.\nThe fdx(4) is specially for tokenring full-duplex\nand hdx(3) is specially for tokenring\nhalf-duplex.\"\"\",\n        }, # column\n        \"portCpbTrunkEncapsulationType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lane\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dot10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot1Q\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"isl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"negotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the VLAN encapsulation capability of a\nport, The dot10(1) is for 801.10 and dot1q(2) is\nfor 801.1Q.\"\"\",\n        }, # column\n        \"portCpbTrunkMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"desirable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onNoNegotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the trunk capability of a port.\"\"\",\n        }, # column\n        \"portCpbChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the channelling capability of a port.\"\"\",\n        }, # column\n        \"portCpbBroadcastSuppression\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"percentage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the broadcast suppression capability of\na port. The pps(0) is for ports capable of\nspecifying suppression in packets per second and\npercentage(1) is for ports capable of specifying\nsuppression in terms of percentage of bandwidth.\"\"\",\n        }, # column\n        \"portCpbFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"receiveOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"receiveOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"receiveDesired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sendOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sendOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sendDesired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the flow control capability of a port.\"\"\",\n        }, # column\n        \"portCpbSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a port supports security.\"\"\",\n        }, # column\n        \"portCpbVlanMembership\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the vlan membership capability of a\nport.\"\"\",\n        }, # column\n        \"portCpbPortfast\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a port supports portfast.\"\"\",\n        }, # column\n        \"portCpbUdld\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether the port is capable of UDLD\n(UniDirectional Link Detection) or not.\"\"\",\n        }, # column\n        \"portCpbInlinePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the inline power capability of a port.\n'auto' denotes the ability that the switch\nautomatically determines whether or not power\nshould be provided. 'on' denotes the ability to\nmanually turn on inline power.\n'off' denotes the ability to manually turn off\ninline power. 'static' denotes the ability to\npreallocate power for a port.\"\"\",\n        }, # column\n        \"portCpbAuxiliaryVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"vlanNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"untagged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot1p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the voice vlan capability of a port.\"\"\",\n        }, # column\n        \"portCpbSpan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"source\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"destination\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reflector\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates port span capabilities.\nsource(0) denotes the capability of being SPAN\nsource destination(1) denotes the capability of\nbeing SPAN destination, reflector(2) denotes the\ncapability of being SPAN reflector.\"\"\",\n        }, # column\n        \"portCpbCosRewrite\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a port supports CoS rewrite.\"\"\",\n        }, # column\n        \"portCpbTosRewrite\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"dscp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ipPrecedence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the ToS rewrite capability of a port.\ndscp(0) denotes the port capability to classify\npackets according to the DSCP.\nipPrecedence(1) denotes the port capability to\nclassify packets according to the IP Precedence.\"\"\",\n        }, # column\n        \"portCpbCopsGrouping\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of ports on a module that are configured\ntogether as far as the Differentiated Services\nCops feature is concerned. Each Octet within the\nvalue of this object specifies a set of eight\nports, with the first octet specifying ports 1\nthrough 8, the second octet specifying ports 9\nthrough 16, etc. Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents\nthe highest numbered port. Thus, each port is\nrepresented by a single bit within the value of\nthis object. If that bit has a value of `1' then\nthat port is included in the set of Cops\ngrouping.\"\"\",\n        }, # column\n        \"portCpbDot1x\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a port supports 802.1x.\"\"\",\n        }, # column\n        \"portCpbIgmpFilter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.19.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a port supports IGMP filter.\"\"\",\n        }, # column\n        \"portTopNGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20\",\n        }, # node\n        \"portTopNControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of top N port control entries.\"\"\",\n        }, # table\n        \"portTopNControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portTopNControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"A set of parameters that control the creation of\na report of the top N ports according to several\nmetrics.\nFor example, an instance of the portTopNDuration\nobject might be named portTopNDuration.3\"\"\",\n        }, # row\n        \"portTopNControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies an entry\nin the portTopNControl table. Each such\nentry defines one top N report.\"\"\",\n        }, # column\n        \"portTopNRateBase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portTopNUtilization\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portTopNIOOctets\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"portTopNIOPkts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"portTopNIOBroadcastPkts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"portTopNIOMulticastPkts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"portTopNInErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"portTopNBufferOverflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"portTopNUtilization\",\n            \"description\" :\n                \"\"\"The variable for all ports in this system\nbased on which portTopNTable/report is ordered.\n\nThis object may not be modified if the associated\nportTopNStatus object is equal to active(1).\"\"\",\n        }, # column\n        \"portTopNType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portTopNAllPorts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portTopNEthernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"portTopNFastEthernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"portTopNGigaEthernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"portTopNTokenRing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"portTopNFDDI\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"portTopNAllEthernetPorts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"portTopN10GigaEthernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"portTopNAllPorts\",\n            \"description\" :\n                \"\"\"The sampling port type.\n\nThis object may not be modified if the associated\nportTopNStatus object is equal to active(1).\"\"\",\n        }, # column\n        \"portTopNMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portTopNForeground\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portTopNBackground\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"portTopNBackground\",\n            \"description\" :\n                \"\"\"The running mode of this portTopN control entry.\nportTopNForeground (1) means when\nportTopNTimeRemaining reaches to 0, the report\nwill show on the CLI at once and it won't be kept\nin the portTopNTable. portTopNBackground (2) means\nthe report will not show on the CLI it will be\nkept in the portTopNTable.\n\nThis object may not be modified if the associated\nportTopNStatus object is equal to active(1).\"\"\",\n        }, # column\n        \"portTopNReportStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"progressing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The report status of this portTopN control entry.\nProgressing (1) means that the report of this\nportTopN control entry is still in progress. The\nmanagement station can poll this mib object to\ncheck the report data is available or not.\nReady (2) means the report is available.\"\"\",\n        }, # column\n        \"portTopNDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"30\",\n            \"description\" :\n                \"\"\"The sampling interval in seconds during which\nstatistics are collected for this report.\n\nWhen this is set a value and the corresponding\nportTopNControlEntry is valid, the\nportTopNTimeRemaining object shall be set to the\nsame value.\nportTopNTimeRemaining starts at the same value as\nportTopNDuration and counts down as the collection\ngoes on.\n\nIf this object is set to be zero, it will do the\ncollection immediately. And the collecting report\nvalue should be the absolute counter value.\"\"\",\n        }, # column\n        \"portTopNTimeRemaining\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of seconds left in the report\ncurrently being collected. When portTopNDuration\nobject is modified by the management station, a\nnew collection is started, possibly aborting a\ncurrently running report. The new value is used as\nthe requested duration of this report, which is\nloaded from the associated portTopNDuration\nobject.\n\nWhen this object is a non-zero value, any\nassociated portTopNEntries shall be made\ninaccessible by the monitor.\n\nWhile the value of this object is non-zero and the\ncorresponding portTopNControlENtry is valid, it\ndecrements by one per second until it reaches\nzero. During this time, all associated\nportTopNEntries shall remain inaccessible. At\nthe time that this object decrements to zero, the\nreport is made accessible in the portTopNTable.\nThus, the portTopN table is to be created only at\nthe end of the collection interval.\"\"\",\n        }, # column\n        \"portTopNStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when this top N report was\nlast started. In other words, this is the time\nthat the associated portTopNTimeRemaining object\nwas modified to start the requested report.\"\"\",\n        }, # column\n        \"portTopNRequestedSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"20\",\n            \"description\" :\n                \"\"\"The maximum number of ports requested for the top\nN entry.\n\nWhen this object is created or modified, the value\nof portTopNGrantedSize is set as closely to this\nobject as is possible for the particular\nimplementation and available resources.\nValid value for this object is 1 to maximum number\nof physical ports. The default value is 20 ports.\"\"\",\n        }, # column\n        \"portTopNGrantedSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of ports in the top N table.\nWhen the associated portTopNRequestedSize object\nis created or modified, the value of this object\nshould be set as closely to the requested value as\nis possible for the particular implementation and\navailable resources. The value must not be lowered\nexcept as a result of a set to the associated\nportTopNRequestedSize object.\nPorts with the highest value of portTopNRateBase\nshall be placed in this table in decreasing order\nof this rate until there is no more room or until\nthere are no more ports.\"\"\",\n        }, # column\n        \"portTopNOwner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"OwnerString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The entity that configured this entry and is\ntherefore using the resources assigned to it.\"\"\",\n        }, # column\n        \"portTopNStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this portTopNControl entry.\nThe Management station sends the user set values\nwith a portTopNStatus value of createAndGo(4).\nWhen the agent receives it the collection of the\nreport starts.\nWhen the portTopNReportStatus is ready(2) the user\ncan get the reports (portTopNTable).\nFor the current implementation createAndWait(5)\nwill not be supported.\nThere can be only 5 rows in the control table.\"\"\",\n        }, # column\n        \"portTopNTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of top N port entries.\"\"\",\n        }, # table\n        \"portTopNEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portTopNControlIndex\",\n                \"portTopNIndex\",\n            ],\n            \"description\" :\n                \"\"\"A set of statistics for a port that is part of a\ntop N report. For example, an instance of the\nportTopNRateBase object might be named\nportTopNUtilization.3.10\"\"\",\n        }, # row\n        \"portTopNIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies an entry in\nthe portTopN table among those in the same report.\nThis index is between 1 and N, where N is the\nportTopNGrantedSize of ports with the highest\nportTopNRateBase. Increasing values of\nportTopNIndex shall be assigned to entries with\ndecreasing values of portTopNRateBase until index\nN is assigned to the entry with the lowest value\nof portTopNRateBase or there are no more\nportTopNEntries.\"\"\",\n        }, # column\n        \"portTopNModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module number of the port counter data\nentry.\"\"\",\n        }, # column\n        \"portTopNPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port counter data entry.\"\"\",\n        }, # column\n        \"portTopNUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utilization of the port in the system.\nThe utilization is computed in the following\nmethods:\n\nEthernet Utilization: (If Full Duplex, multiply by 2)\n\n10 Mbps         I/O-pkts * (9.6 + 6.4) + (0.8 * I/O-Bytes)\nEthernet Util = -----------------------------------------\n        Interval * 10,000\n\n        where 9.6 is interframe gap of Ethernet\n        6.4 is preamble of Ethernet\n        10,000 is 10Mbps\n\n100 Mbps        I/O-pkts * (96 + 64) + (8 * I/O-Bytes)\nEthernet Util = --------------------------------------\n        Interval * 1,000,000\n\n1000 Mbps       I/O-pkts * (96 + 64) + (8 * I/O-Bytes)\nEthernet Util = --------------------------------------\n        Interval * 10,000,000\n\nAll other       I/O-pkts * (9.6 + 6.4) + (0.8 * I/O-Bytes)\nEthernet Util = ------------------------------------------\n        Interval * N * 1,000\n        (where N is N Mbps)\n\nToken Ring Utilization:\n(Assuming that Octets is from AC byte through FCS)\n\n\n4 Mbps                  Pkts * 32 + (8 * Octets)\nToken Ring Util = 100 * ------------------------\n                Interval * 4,000,000\n           where 32 is bits in SD, ED, FS and IFG\n\n16 Mbps                 Pkts * 64 + (8 * Octets)\nToken Ring Util = 100 * ------------------------\n                Interval * 16,000,000\n          where 64 is bits in SD, ED, FS and IFG\n\nFDDI Utilization:\n\n   I/O-Pkts * (64 + 8 + 32 + 16) + (8 * I/O-Bytes)\nFDDI Util = ----------------------------------------------\n   Interval * 100,000,000\n\n   where 64 is Preamble of FDDI,\n   8 is the Start Delimiter (SD) of FDDI,\n   32 is the CRC, and\n   16 is the End of Frame Sequence (EFS) of FDDI.\"\"\",\n        }, # column\n        \"portTopNIOOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input and Output octets of the port in the\nsystem.\"\"\",\n        }, # column\n        \"portTopNIOPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input and Output packets of the port in the\nsystem.\"\"\",\n        }, # column\n        \"portTopNIOBroadcast\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input and Output broadcast packets of the\nport in the system.\"\"\",\n        }, # column\n        \"portTopNIOMulticast\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input and Output multicast packets of the\nport in the system.\"\"\",\n        }, # column\n        \"portTopNInErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input error packets of the port in the\nsystem.\"\"\",\n        }, # column\n        \"portTopNBufferOverFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.20.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of buffer overflow of the port in\nthe system.\"\"\",\n        }, # column\n        \"mdgGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.21\",\n        }, # node\n        \"mdgGatewayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.21.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 MDG gateways.\"\"\",\n        }, # table\n        \"mdgGatewayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.21.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mdgGatewayAddr\",\n            ],\n            \"description\" :\n                \"\"\"A MDG gateway table entry.\"\"\",\n        }, # row\n        \"mdgGatewayAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.21.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a default gateway.\"\"\",\n        }, # column\n        \"mdgGatewayType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.21.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add a new entry to the mdgGatewayTable, set\nthis object to primary(2) or other(3) for an IP\naddress which is not already in the table. The\nprimary entry will be used first, if it is\nreachable. Otherwise, one of the other entries\nwill be used. Setting one entry to primary(2)\ncauses any previous primary entry to change to\nother(3). To remove an entry from the table, set\nthis object to invalid(1). Changing an existing\nentry from primary(2) to other(3) is not allowed.\nIf the value of this object is updated, the\ncorresponding entry of the ipRouteTable (mibII)\nwill be updated and vice versa.\"\"\",\n        }, # column\n        \"radiusGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22\",\n        }, # node\n        \"radiusLoginAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the login authentication using\nRADIUS feature is enabled or disabled for console\nand/or telnet sessions.\n\nSetting this object to enabled(1), the login\nauthentication using RADIUS feature is enabled for\nboth console and telnet sessions.\n\nSetting this object to disabled(2), the login\nauthentication using RADIUS feature is disabled\nfor both console and telnet sessions.\n\nSetting this object to enabledForTelnetOnly(3),the\nlogin authentication using RADIUS feature is\nenabled only for telnet sessions, but disabled\nfor console session.\n\nSetting this object to enabledForConsoleOnly(4),\nthe login authentication using RADIUS feature is\nenabled only for console sessions, but disabled\nfor telnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"radiusEnableAuthentication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledForTelnetOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledForConsoleOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates whether the enable authentication using\nthe RADIUS feature is enabled or disabled for\nConsole and telnet sessions.\n\nSetting this object to enabled(1), the enable\nauthentication using RADIUS feature is enabled for\nboth console and telnet sessions.\n\nSetting this object to disabled(2), the enable\nauthentication using RADIUS feature is disabled\nfor both console and telnet sessions.\n\nSetting this object to enabledForTelnetOnly(3),\nthe enable authentication using RADIUS feature is\nenabled only for telnet sessions, but disabled for\nconsole sessions.\n\nSetting this object to enabledForConsoleOnly(4),\nthe enable authentication using RADIUS feature is\nenabled only for console sessions, but disabled\nfor telnet sessions.\n\nThis object is deprecated and replaced by\ncacPriorityTable in CISCO-AAA-CLIENT-MIB.\"\"\",\n        }, # scalar\n        \"radiusDeadtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Indicates the length of time in minutes that\nthe system will mark the server dead when a RADIUS\nserver does not respond to an authentication\nrequest. During the interval of the dead time, any\nauthentication request that comes up would not be\nsent to that RADIUS server that was marked as\ndead. The default value of 0 means that the\nRADIUS servers will not be marked dead if they\ndo not respond.\"\"\",\n        }, # scalar\n        \"radiusAuthKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The key used in encrypting the packets passed\nbetween the RADIUS server and the client. This key\nmust match the one configured on the server.\n\nNote that this item is only accessible when using\nthe community string defined in sysCommunityRwa.\"\"\",\n        }, # scalar\n        \"radiusTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"This is the time in seconds between\nretransmissions to the RADIUS server.\"\"\",\n        }, # scalar\n        \"radiusRetransmits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"2\",\n            \"description\" :\n                \"\"\"Indicates number of times the RADIUS server\nshould be tried before giving up on the server.\"\"\",\n        }, # scalar\n        \"radiusServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.7\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"This table lists a maximum of 3 RADIUS servers.\n\nThis object is deprecated and replaced by\ncrRadiusServerTable in CISCO-RADIUS-MIB.\"\"\",\n        }, # table\n        \"radiusServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"radiusServerAddr\",\n            ],\n            \"description\" :\n                \"\"\"A RADIUS server table entry.\"\"\",\n        }, # row\n        \"radiusServerAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.7.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of a RADIUS Server.\"\"\",\n        }, # column\n        \"radiusServerAuthPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.7.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1812\",\n            \"description\" :\n                \"\"\"This is the destination UDP port number to which\nRADIUS messages should be sent. The RADIUS server\nwill not be used for authentication if this port\nnumber is 0.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC2138, Implementation Note.\"\"\",\n        }, # column\n        \"radiusServerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.22.7.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To add a new entry to the radiusServerTable, set\nthis object to primary(2) or other(3) for an IP\naddress which is not already in the table. The\nprimary entry will be used first, if it is\nreachable. Otherwise, one of the other entries\nwill be used. Setting one entry to primary(2)\ncauses any previous primary entry to change to\nother(3). To remove an entry from the table,\nset this object to invalid(1).\"\"\",\n        }, # column\n        \"traceRouteGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24\",\n        }, # node\n        \"traceRouteMaxQueries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximum number of query entries allowed to be\noutstanding at any time, in the\ntraceRouteQueryTable.\nThe typical value for this object is 5.\"\"\",\n        }, # scalar\n        \"traceRouteQueryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A control table used to query the information\nabout each gateway along the path to a host by\nspecifying retrieval criteria for the host. The\nresulting data for each instance of a query in\nthis table is returned in the traceRouteDataTable.\nThe maximum number of entries (rows) in this table\ncannot exceed the value returned by\ntraceRouteMaxQueries.\"\"\",\n        }, # table\n        \"traceRouteQueryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"traceRouteQueryIndex\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row of the traceRouteQueryTable used\nto setup retrieval criteria to search for gateways\nbelongs to the path to a particular host\nidentified by its IP address. The actual search\nis started by setting the value of\ntraceRouteQueryStatus to valid(1).\"\"\",\n        }, # row\n        \"traceRouteQueryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Object which specifies an unique entry in the\ntraceRouteQueryTable.\"\"\",\n        }, # column\n        \"traceRouteHost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Network(IP) address in dotted decimal format or\nthe DNS hostname of the host which is tracerouted.\"\"\",\n        }, # column\n        \"traceRouteQueryDNSEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"If this value of this object is true, the\ntraceroute operation will do a DNS lookup for each\nhop on the path, so the corresponding instance of\nthe traceRouteDataTable will contain the host name\nand the ip address; otherwise, that instance only\ncontains the ip address.\"\"\",\n        }, # column\n        \"traceRouteQueryWaitingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The trace route waiting time in seconds for an\nICMP response message.\"\"\",\n        }, # column\n        \"traceRouteQueryInitTTL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"If this value of this object is set, it allows\nusers skip processing for gateways that are less\nthan traceRouteQueryInitTTL away by sending\ndatagram with the value of this object instead of\nthe default value of one.\"\"\",\n        }, # column\n        \"traceRouteQueryMaxTTL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"30\",\n            \"description\" :\n                \"\"\"The maximum TTL value used in outgoing packets.\"\"\",\n        }, # column\n        \"traceRouteQueryUDPPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"33434\",\n            \"description\" :\n                \"\"\"The base UDP destination port is used in the\ntraceroute datagrams. This value of this object is\noften larger than 30,000 to make it improbable\nthat this port is used (this causes the\ndestination host's UDP module to generate an ICMP\nport unreachable so the traceroute operation\nknows when the operation is accomplished).\nThe traceroute operation will increment this value\nof this object each time it sends a datagram. This\nobject should be used in the unlikely event that\nthe destination port is listening to a port in the\ndefault traceroute port range.\"\"\",\n        }, # column\n        \"traceRouteQueryPacketCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3\",\n            \"description\" :\n                \"\"\"Specifies the number of traceroute packets to\nsend to the target host in this sequence.\"\"\",\n        }, # column\n        \"traceRouteQueryPacketSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1420\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1420\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Specifies the size of traceroute packets to send\nto the target host in this sequence. \"\"\",\n        }, # column\n        \"traceRouteQueryTOS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The type of service to be set in the IP header of\nthe outgoing packets.This value can set to see if\ndifferent types-of-service result in different\npaths. Not all values of TOS are legal or\nmeaningful (see the IP spec for definitions.\nUseful values are probably 16 (low delay) and 8\n(high throughput).\"\"\",\n        }, # column\n        \"traceRouteQueryResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The result status of the query. Possible values\nare:\n\n-1 -Either the query has not been initiated or the\nagent is busy processing this query instance. Time\nto completion of the query processing depends on\nthe complexity of the query and the number of\nmatches that satisfy this query.\n\n0..2147483647 - The search has ended and this is\nthe number of rows in the traceRouteDataTable,\nresulting from this query.\"\"\",\n        }, # column\n        \"traceRouteQueryTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time when the query\nis configured.\"\"\",\n        }, # column\n        \"traceRouteQueryOwner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manager entity that configured this entry and\nis therefore using the resources assigned to it.\"\"\",\n        }, # column\n        \"traceRouteQueryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"valid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status object used to manage rows in this\ntable.\nWhen set this object to valid(1), the query is\ninitiated. Once initiated, all the read-write\nobjects of this table can't be modified. To remove\nan entry from the  table, set this object to\ninvalid(2).\"\"\",\n        }, # column\n        \"traceRouteDataTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing information about the gateway\nbelongs to the path to the host corresponding to\nall the completed queries setup in the\ntraceRouteQueryTable.\"\"\",\n        }, # table\n        \"traceRouteDataEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"traceRouteQueryIndex\",\n                \"traceRouteDataIndex\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row of the traceRouteDataTable used\nto return information about all the gateway\nbelongs to the host of which search criteria is\ncorresponding instance of the\ntraceRouteQueryTable.\"\"\",\n        }, # row\n        \"traceRouteDataIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Object which specifies an unique entry in the\ntraceRouteDataTable.\"\"\",\n        }, # column\n        \"traceRouteDataGatewayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DNS name of the gateway if available.\"\"\",\n        }, # column\n        \"traceRouteDataGatewayIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ip address of the gateway. If the traceroute\npacket was sent and timed-out, the ip address is\nset to 0.0.0.0.\"\"\",\n        }, # column\n        \"traceRouteDataRtt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The  round trip time of the current packet that\nhave been sent in this sequence.\"\"\",\n        }, # column\n        \"traceRouteDataHopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of hop starting from the place where\nthe traceroute operation is initialized to the\ngateway which has the traceRouteDataGatewayIp.\"\"\",\n        }, # column\n        \"traceRouteDataErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.24.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"icmpUnreachNet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"icmpUnreachHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"icmpUnreachProtocol\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"icmpUnreachPort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"icmpUnreachNeedFrag\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"icmpUnreachSrcFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"icmpUnreachNoNet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"icmpUnreachNoHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"icmpUnreachHostIsolated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"icmpUnreachNetProhib\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"icmpUnreachProhib\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"icmpUnreachNetTos\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"icmpUnreachHostTos\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"icmpUnreachAdmin\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"icmpUnreachHostPrec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"icmpUnreachPrecedence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"icmpUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"icmpTimeOut\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"icmpTTLExpired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The error of the traceroute operation.\"\"\",\n        }, # column\n        \"fileCopyGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25\",\n        }, # node\n        \"fileCopyProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"tftp\",\n            \"description\" :\n                \"\"\"The protocol to be used for any remote copy.\nIf the config file transfer is to occur locally on\nthe SNMP agent, the method of transfer is left up\nto the implementation, and is not restricted to\nthe protocols above.\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopyRemoteServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address  or the host name of the tftp/rcp\nremote server from (or to) which to copy the file.\nIf the copy operation  is local on the SNMP agent,\nthis object is not applicable.\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopySrcFileName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source file name (including the path, if\napplicable) of the file. The accepted value of\nthis object is 'cfg1' or 'cfg2' when the requested\naction is one of the following:\n\ncopyConfigFromFlashToRuntime(8), and\ncopyConfigFileFromFlashToHost(11).\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopyDstFileName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The destination file name (including the path, if\napplicable) of the file. The accepted value of\nthis object is 'cfg1' or 'cfg2' when the requested\naction is one of the following:\n\ncopyConfigFromRuntimeToFlash(9),\ncopyConfigFileFromHostToFlash(10).\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopyModuleNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The module number specified in the copy\noperation.\n\nIf the value of this object is 0 and the\nfileCopyAction object has the value of\ncopyImageFromHostToFlash(4), the switch will do\nmultiple download to the modules with matching\nimage type. It is left to the SNMP agent to allow\nthe individual modules to be reset with the\ndownloaded images or not.\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopyUserName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Remote user name for copy via rcp protocol. This\nobject must be specified when the\nfileCopyProtocol is rcp.\"\"\",\n        }, # scalar\n        \"fileCopyAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"copyConfigFromHostToRuntime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"copyConfigFromRuntimeToHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"copyImageFromHostToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"copyImageFromFlashToHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"copyConfigFromFlashToRuntime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"copyConfigFromRuntimeToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"copyConfigFileFromHostToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"copyConfigFileFromFlashToHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"copyTechReportFromRuntimeToHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to one of the acceptable\nvalues will initiate the requested action using\nthe information provided by fileCopyProtocol,\nfileCopyRemoteServer, fileCopySrcFileName,\nfileCopyDstFileName,fileCopyModuleNumber and\nfileCopyUserName.\n\ncopyConfigFromHostToRuntime(2):\n   Copy the configuration file from host to\n   runtime configuration over the network through\n   tftp/rcp. This action will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopySrcFileName, fileCopyModuleNumber,\n   and fileCopyUserName (if applicable).\n\ncopyConfigFromRuntimeToHost(3):\n   Copy the runtime configuration to host over the\n   network through tftp/rcp. This action will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopyModuleNumber, fileCopyDstFileName,\n   fileCopyUserName (if applicable), and\n   fileCopyRuntimeConfigPart.\n\ncopyImageFromHostToFlash(4):\n   Copy the image from host to the flash over the\n   network through tftp/rcp. It is up to the\n   SNMP agent to reset and run the downloaded\n   image after copying. This action will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopySrcFileName, fileCopyModuleNumber,\n   and fileCopyUserName (if applicable).\n\ncopyImageFromFlashToHost(5):\n   Copy the image from flash to host over the\n   switch through tftp/rcp. This action will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopyDstFileName, fileCopyModuleNumber,\n   and fileCopyUserName (if applicable).\n\ncopyConfigFromFlashToRuntime(8):\n   Copy the configuration file to the runtime\n   configuration locally. This action can perform\n   only on the SUPG supervisor model and will\n   use fileCopySrcFileName ('cfg1' or 'cfg2').\n\ncopyConfigFromRuntimeToFlash(9):\n   Copy  the runtime configuration to a\n   configuration file on the flash locally. This\n   action can perform only on the SUPG supervisor\n   model and will use fileCopyDstFileName ('cfg1'\n   or 'cfg2'), and fileCopyRuntimeConfigPart.\n\ncopyConfigFileFromHostToFlash(10):\n   Copy the configuration file from host to the\n   runtime configuration over the network through\n   tftp/rcp. This action can perform only on the\n   SUPG  supervisor model and will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopySrcFileName, fileCopyDstFileName,\n   fileCopyModuleNumber and fileCopyUserName\n   (if applicable).\n\ncopyConfigFileFromFlashToHost(11):\n   Copy the configuration file on the flash to\n   host over the network through tftp/rcp.\n   This action can perform only on the\n   SUPG supervisor model and will use\n   fileCopyProtocol, fileCopyRemoteServer,\n   fileCopySrcFileName, fileCopyDstFileName,\n   fileCopyModuleNumber and fileCopyUserName\n   (if applicable).\n\ncopyTechReportFromRuntimeToHost(12):\n   Copy the technical report of the system to\n   host over the network through tftp only. This\n   action will use fileCopyProtocol,\n   fileCopyRemoteServer, fileCopyModuleNumber,\n   and fileCopyDstFileName.\n\nSetting this object to any other value results in\nan error.\n\nThe value of this object can not be changed when\nthe fileCopyResult object has the value of\ninProgress(1).\"\"\",\n        }, # scalar\n        \"fileCopyResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noResponse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"tooManyRetries\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"noBuffers\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noProcesses\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"badChecksum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"badLength\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"badFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"serverError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"userCanceled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"wrongCode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"fileNotFound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"invalidHost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"invalidModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"accessViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"unknownStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"invalidStorageDevice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"insufficientSpaceOnStorageDevice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"insufficientDramSize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"incompatibleImage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"rcpError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the result of the last copy action\nrequest.\nIf the value of fileCopyResult is rcpError(22),\nthen the detailed rcp error messages are contained\nin fileCopyResultRcpErrorMessage.\"\"\",\n        }, # scalar\n        \"fileCopyResultRcpErrorMessage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the detailed rcp error messages if the\nvalue of fileCopyResult is rcpError(22) for the\nlast copy action request; otherwise, this MIB\nobject contains the empty string.\"\"\",\n        }, # scalar\n        \"fileCopyRuntimeConfigPart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.25.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nonDefault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"all\",\n            \"description\" :\n                \"\"\"Indicates the part of runtime configuration to be\ncopied. This object will only take effect when the\nobject value of fileCopyAction is one of the\nfollowing:\n\ncopyConfigFromRuntimeToHost(3),\ncopyConfigFromRuntimeToFlash(9).\n\nall -- copy all the runtime configuration.\n\nnonDefault --copy only the part of the runtime\n             configuration which is different from\n             the default configuration.\"\"\",\n        }, # scalar\n        \"voiceGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26\",\n        }, # node\n        \"voicePortIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port entries. The number of entries is\ndetermined by the number of modules in the chassis\nand the number of ports with the voice port\ninterface configuration capability in the system.\"\"\",\n        }, # table\n        \"voicePortIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"voicePortIfConfigModuleIndex\",\n                \"voicePortIfConfigPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing voice interface configuration\nfor a particular port.\"\"\",\n        }, # row\n        \"voicePortIfConfigModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"voicePortIfConfigPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module. The value is determined by the\nlocation of the port on the module.\"\"\",\n        }, # column\n        \"voicePortIfDHCPEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"Indicate whether DHCP service is enabled.\"\"\",\n        }, # column\n        \"voicePortIfIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's IP address. This object\nis configurable only if voicePortIfDHCPEnabled\nis false. When the value of voicePortIfDHCPEnabled\nis false, this object should be configured.\"\"\",\n        }, # column\n        \"voicePortIfIpNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's subnet mask. This object\nis configurable only if voicePortIfDHCPEnabled\nis false. When the value of voicePortIfDHCPEnabled\nis false, this object should be configured.\"\"\",\n        }, # column\n        \"voicePortIfTftpServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's TFTP Server address. This object\nis configurable only if voicePortIfDHCPEnabled\nis false. When the value of voicePortIfDHCPEnabled\nis false, this object should be configured.\"\"\",\n        }, # column\n        \"voicePortIfGatewayAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's router address. This object\nis configurable only if voicePortIfDHCPEnabled\nis false.\"\"\",\n        }, # column\n        \"voicePortIfDnsServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's DNS Server address. This object\nis configurable only if voicePortIfDHCPEnabled\nis false.\"\"\",\n        }, # column\n        \"voicePortIfDnsDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This port's DNS domain name. This object\nis configurable only if voicePortIfDHCPEnabled\nis false.\"\"\",\n        }, # column\n        \"voicePortIfOperDnsDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This port's operational DNS domain name. If\nvoicePortIfDHCPEnabled is true, this object\nindicates the domain name taken from the\nDHCP server. If voicePortIfDHCPEnabled is false,\nthis object indicates the domain name configured\nby users for this voice port or the domain name\ntaken from DNS configuration for the system\notherwise.\"\"\",\n        }, # column\n        \"voicePortCallManagerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of call manager entries. The number of\nentries is determined by the number of modules in\nthe chassis and the number of ports with the\nvoice port interface configuration capability\nin the system.\"\"\",\n        }, # table\n        \"voicePortCallManagerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"voicePortModuleIndex\",\n                \"voicePortIndex\",\n                \"voicePortCallManagerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing voice interface configuration\nfor a particular port.\"\"\",\n        }, # row\n        \"voicePortModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"voicePortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module.\"\"\",\n        }, # column\n        \"voicePortCallManagerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this\nCallManager within a module/port. A port can\nregister up to 5 CallManager.\"\"\",\n        }, # column\n        \"voicePortCallManagerIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Call Manager IP Address of this port. A port\ncan register up to 5 call managers.\"\"\",\n        }, # column\n        \"voicePortOperDnsServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of operational DNS entries used by the\nvoice ports.\"\"\",\n        }, # table\n        \"voicePortOperDnsServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"voicePortDnsModuleIndex\",\n                \"voicePortDnsPortIndex\",\n                \"voicePortOperDnsServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing infomation on DNS servers may be\nused for a particular voice port.\n\nIf DHCP is enabled on a port, the DNS server IP\naddress will come from the DHCP server. If DHCP\nis disabled, the DNS server IP address can be\nconfigured by users through the mib object\nvoicePortIfDnsServerAddress for a port, otherwise\nit will be taken from DNS configuration in the\nsystem.\"\"\",\n        }, # row\n        \"voicePortDnsModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"voicePortDnsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module.\"\"\",\n        }, # column\n        \"voicePortOperDnsServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this DNS\nserver within a module/port. This value indicates\nthe priority order among these DNS servers.\"\"\",\n        }, # column\n        \"voicePortOperDnsServerIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational DNS Server IP Address of this\nport. \"\"\",\n        }, # column\n        \"voicePortOperDnsServerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.26.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fromDhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fromPortConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fromSystemConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The source of the Dns Server IP Address of this\nport.\n\nfromDhcp(1) indicates that the DNS server IP\naddress comes from the DHCP server.\n\nfromPortConfig(2) indicates that the DNS server IP\naddress comes from the object\nvoicePorfIfDnsServerAdress.\n\nfromSystemConfig(3) indicates that the DNS server\nIP address comes from DNS configuration for the\nsystem.\"\"\",\n        }, # column\n        \"portJumboFrameGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27\",\n        }, # node\n        \"portJumboFrameTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port jumbo frame entries. The number of\nentries is determined by the number of ports in\nthe system which support the Jumbo frame feature.\"\"\",\n        }, # table\n        \"portJumboFrameEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"portJumboFrameModuleIndex\",\n                \"portJumboFramePortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry containing the jumbo frame configuration\nfor a particular port.\"\"\",\n        }, # row\n        \"portJumboFrameModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies the\nmodule where this port is located.\"\"\",\n        }, # column\n        \"portJumboFramePortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies this port\nwithin a module. The value is determined by the\nlocation of the port on the module. Valid entries\nare 1 to the value of moduleNumPorts for this\nmodule.\"\"\",\n        }, # column\n        \"portJumboFrameEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.27.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the jumbo frame status of the port. If\nenabled, the port supports frame size greater than\nthe standard ethernet frame size of 1518 bytes.\"\"\",\n        }, # column\n        \"switchAccelerationGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.28\",\n        }, # node\n        \"switchAccelerationModuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.28.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains a list of the modules for\nwhich the switch acceleration capability can be\nconfigured.\"\"\",\n        }, # table\n        \"switchAccelerationModuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.28.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"switchAccelerationModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"A module for which switch acceleration can be\nconfigured.\"\"\",\n        }, # row\n        \"switchAccelerationModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.28.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of moduleIndex for the module where\nswitch acceleration feature can be configured.\"\"\",\n        }, # column\n        \"switchAccelerationModuleEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.28.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"Indicates whether switch acceleration is enabled\non  this module or not.\n\n When this feature is enabled, the system will\n increase the switching bandwidth, but the\n ifAdminStatus of any port on this module can not\n be set to 'up'.\n\n If the ifAdminStatus of any port on this module is\n 'up', this feature can not be enabled until\n ifAdminStatus of all ports on the module is set\n to 'down'.\"\"\",\n        }, # column\n        \"configGrp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.29\",\n        }, # node\n        \"configMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.29.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"binary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"text\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"binary\",\n            \"description\" :\n                \"\"\"Configuration mode to store the configuration\ninformation.\"\"\",\n        }, # scalar\n        \"configTextFileLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.29.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"The location of the text configuration file\nwhich can be either NVRAM or a file in the\nFLASH file system. If the location is NVRAM,\nthis object is a zero length octet string.\nOtherwise, the FLASH file should be specified\nin <device>:<filename> format. This object\nis only instantiated when configMode has\nthe value of of text(2). \"\"\",\n        }, # scalar\n        \"configWriteMem\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.29.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this object is set to true(1), the current\nconfiguration is saved in text format in the\nlocation specified by configTextFileLocation.\nThis object is only instantiated when configMode\nhas the value of text(2). When read,\nthis object always returns false(2). \"\"\",\n        }, # scalar\n        \"configWriteMemStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.29.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"succeeded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"resourceUnavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"badFileName\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"someOtherError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the current or the most recently\ncompleted 'write memory' operation. The possible\nvalues are:\n\n  inProgress - 'write' operation in progress;\n\n  succeeded - the 'write' was successful (this\n  value is also used when no write has been\n  invoked since the last time the local system\n  restarted);\n\n  resourceUnavailable, -the 'write' failed because\n  insufficeient resource was available.\n\n  badFileName - the 'write' failed because the\n  specified destination file was not found.\n  This might be due to invalid FLASH device\n  name or invalid file name.\n\n  someOtherError - the 'write' failed for some\n  other reason.\n\nThis object is only instantiated when configMode\nhas the value of text(2). \"\"\",\n        }, # scalar\n        \"ciscoStackMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31\",\n        }, # node\n        \"ciscoStackMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1\",\n        }, # node\n        \"ciscoStackMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2\",\n        }, # node\n        \"adapterCard\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.2\",\n        }, # node\n        \"wsc1000sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.3\",\n        }, # node\n        \"wsc1100sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.4\",\n        }, # node\n        \"wsc1200sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.5\",\n        }, # node\n        \"wsc1400sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.6\",\n        }, # node\n        \"wsc5000sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.7\",\n        }, # node\n        \"wsc1600sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.8\",\n        }, # node\n        \"cpw1600sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.9\",\n        }, # node\n        \"wsc3000sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.10\",\n        }, # node\n        \"wsc2900sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.12\",\n        }, # node\n        \"cpw2200sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.13\",\n        }, # node\n        \"esStack\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.14\",\n        }, # node\n        \"wsc3200sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.15\",\n        }, # node\n        \"cpw1900sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.16\",\n        }, # node\n        \"wsc5500sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.17\",\n        }, # node\n        \"wsc1900sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.18\",\n        }, # node\n        \"cpw1220sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.19\",\n        }, # node\n        \"wsc2820sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.20\",\n        }, # node\n        \"cpw1420sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.21\",\n        }, # node\n        \"dcd\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.22\",\n        }, # node\n        \"wsc3100sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.23\",\n        }, # node\n        \"cpw1800sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.24\",\n        }, # node\n        \"cpw1601sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.25\",\n        }, # node\n        \"wsc3001sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.26\",\n        }, # node\n        \"cpw1220csysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.27\",\n        }, # node\n        \"wsc1900csysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.28\",\n        }, # node\n        \"wsc5002sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.29\",\n        }, # node\n        \"cpw1220isysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.30\",\n        }, # node\n        \"wsc1900isysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.31\",\n        }, # node\n        \"tsStack\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.32\",\n        }, # node\n        \"wsc3900sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.33\",\n        }, # node\n        \"wsc5505sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.34\",\n        }, # node\n        \"wsc2926sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.35\",\n        }, # node\n        \"wsc5509sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.36\",\n        }, # node\n        \"wsc3920sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.37\",\n        }, # node\n        \"wsc6006sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.38\",\n        }, # node\n        \"wsc6009sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.39\",\n        }, # node\n        \"wsc4003sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.40\",\n        }, # node\n        \"wsc4912gsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.41\",\n        }, # node\n        \"wsc2948gsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.42\",\n        }, # node\n        \"wsc6509sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.44\",\n        }, # node\n        \"wsc6506sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.45\",\n        }, # node\n        \"wsc4006sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.46\",\n        }, # node\n        \"wsc6509nebsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.47\",\n        }, # node\n        \"wsc6knamsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.48\",\n        }, # node\n        \"wsc2980gsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.49\",\n        }, # node\n        \"wsc6513sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.50\",\n        }, # node\n        \"wsc2980gasysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.51\",\n        }, # node\n        \"cisco7603sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.53\",\n        }, # node\n        \"cisco7606sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.54\",\n        }, # node\n        \"cisco7609sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.55\",\n        }, # node\n        \"wsc6503sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.56\",\n        }, # node\n        \"wsc4503sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.58\",\n        }, # node\n        \"wsc4506sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.59\",\n        }, # node\n        \"cisco7613sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.60\",\n        }, # node\n        \"wsc6509nebasysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.61\",\n        }, # node\n        \"wsc2948ggetxsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.62\",\n        }, # node\n        \"cisco7604sysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.63\",\n        }, # node\n        \"wsc6504esysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.64\",\n        }, # node\n        \"wsc1900LiteFxsysID\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.175\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"lerAlarmOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"fddimibPORTSMTIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"FDDI-SMT73-MIB\"\n                },\n                \"fddimibPORTIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"FDDI-SMT73-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A lerAlarmOn trap signifies that the agent entity\nhas detected that the fddimibPORTLerFlag object in\nthe FDDI-SMT73-MIB (RFC 1512) has transitioned to\nthe true(1) state for one of its ports.\nThe generation of this trap can be controlled by\nthe fddimibPORTLerAlarm object in the\nFDDI-SMT73-MIB for each port.\"\"\",\n        }, # notification\n        \"lerAlarmOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"fddimibPORTSMTIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"FDDI-SMT73-MIB\"\n                },\n                \"fddimibPORTIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"FDDI-SMT73-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A lerAlarmOff trap signifies that the agent\nentity has detected that the fddimibPORTLerFlag\nobject in the FDDI-SMT73-MIB (RFC 1512) has\ntransitioned to the false(2) state for one of\nits ports. The generation of this trap can be\ncontrolled by the fddimibPORTLerAlarm object in\nthe FDDI-SMT73-MIB for each port.\"\"\",\n        }, # notification\n        \"moduleUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"moduleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A moduleUp trap signifies that the agent entity\nhas detected that the moduleStatus object in this\nMIB has transitioned to the ok(2) state for one of\nits modules.\nThe generation of this trap can be controlled by\nthe sysEnableModuleTraps object in this MIB.\"\"\",\n        }, # notification\n        \"moduleDown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"moduleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A moduleDown trap signifies that the agent entity\nhas detected that the moduleStatus object in this\nMIB has transitioned out of the ok(2) state for\none of its modules.\nThe generation of this trap can be controlled by\nthe sysEnableModuleTraps object in this MIB.\"\"\",\n        }, # notification\n        \"chassisAlarmOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"chassisTempAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMinorAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMajorAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A chassisAlarmOn trap signifies that the agent\nentity has detected the chassisTempAlarm,\nchassisMinorAlarm, or chassisMajorAlarm object in\nthis MIB has transitioned to the on(2) state.\nThe generation of this trap can be controlled by\nthe sysEnableChassisTraps object in this MIB.\"\"\",\n        }, # notification\n        \"chassisAlarmOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"chassisTempAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMinorAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMajorAlarm\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A chassisAlarmOff trap signifies that the agent\nentity has detected the chassisTempAlarm,\nchassisMinorAlarm, or chassisMajorAlarm object in\nthis MIB has transitioned to the off(1) state.\nThe generation of this trap can be controlled by\nthe sysEnableChassisTraps object in this MIB.\"\"\",\n        }, # notification\n        \"ipPermitDeniedTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ipPermitDeniedAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedAccess\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"ipPermitDeniedTrap indicates that IP permit\ndenied access happens. The generation of this\ntrap can be controlled by the\nsysEnableIpPermitTraps object in this MIB.\"\"\",\n        }, # notification\n        \"sysConfigChangeTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysConfigChangeTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConfigChangeInfo\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A sysConfigChange trap signifies that the system\nconfiguration in NVRAM is changed. The generation\nof this trap can be controlled by the\nsysEnableConfigTraps object in this MIB.\"\"\",\n        }, # notification\n        \"tokenRingSoftErrExceededTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ringStationMacAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"TOKEN-RING-RMON-MIB\"\n                },\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is generated when a station local to a\ntoken ring port exceeds its Soft Error Threshold\nwithin the configured interval.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"systemMiscGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysMgmtType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysNetMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBroadcast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysAttachType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBaudRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysInsertMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysClearMacTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysClearPortTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableModem\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableRedirects\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysArpAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRwa\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysIpVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\"\"\",\n        }, # group\n        \"systemTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysTrapReceiverAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrapReceiverType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrapReceiverComm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableChassisTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableModuleTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableBridgeTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableRepeaterTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the SNMP traps feature.\"\"\",\n        }, # group\n        \"chassisGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"chassisSysType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisBkplType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs1Type\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs1Status\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs1TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs2Type\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs2Status\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs2TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisFanStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisFanTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMinorAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisMajorAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisTempAlarm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisNumSlots\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the chassis of the device.\n\nImplementation of this group is mandatory.\"\"\",\n        }, # group\n        \"moduleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"moduleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleNumPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"modulePortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSubType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSerialNumberString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the modules on the device.\n\nImplementation of this group is mandatory.\"\"\",\n        }, # group\n        \"portGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.5\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"portModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCrossIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCrossGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdditionalStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portDuplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSpantreeFastStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminRxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperRxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminTxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperTxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlTransmitFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlReceiveFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlPauseTransmitFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlPauseReceiveFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlUnknownProtocolFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portLinkFaultStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysConfigChangeTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBannerMotd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConfigChangeInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConfigRegister\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBootVariable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBootedImage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"optionalSystemTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.7\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysEnableIpPermitTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableVmpsTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableConfigTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableEntityTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableStpxTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the SNMP traps feature.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"optionalChassisGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.8\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"chassisPs1TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs2TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisFanTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisSlotConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisComponentIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisComponentType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisComponentSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisComponentHwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisComponentModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisSerialNumberString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the chassis of the device.\"\"\",\n        }, # group\n        \"optionalModuleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"moduleTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleHwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleFwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSwVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleStandbyStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleIPAddressVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSubType2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSlotNum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the modules on the device.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"optionalPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.10\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"portSecurityModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityLastSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecuritySecureSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelNeighbourDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelNeighbourPortId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelProtInPackets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelProtOutPackets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portChannelIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbDuplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbTrunkEncapsulationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbTrunkMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbBroadcastSuppression\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbVlanMembership\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbPortfast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNControlIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNRateBase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNReportStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNTimeRemaining\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNRequestedSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNGrantedSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNModuleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOBroadcast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOMulticast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNBufferOverFlow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"systemTrafficGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysTrafficMeterType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTraffic\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficPeak\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficPeakTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficMeter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficMeterPeak\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficMeterPeakTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the traffic meter feature.\n\nImplementation of this group is optional. If the\ntraffic meter feature is supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"systemFddiGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysFddiRingSMTIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysFddiRingAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysFddiRingNext\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the FDDI ring feature.\n\nImplementation of this group is optional. If the\nFDDI ring feature is supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"systemRmonGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysEnableRmon\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysExtendedRmonVlanModeEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysExtendedRmonNetflowPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysExtendedRmonNetflowEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysExtendedRmonVlanAgentEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysExtendedRmonEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the extended RMON feature.\n\nImplementation of this group is optional. If the\nextended RMON feature is supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"authenticationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.14\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysConsolePrimaryLoginAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConsolePrimaryEnableAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTelnetPrimaryLoginAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTelnetPrimaryEnableAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsLoginAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsEnableAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsLocalLoginAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsLocalEnableAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsNumLoginAttempts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsDirectedRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusLoginAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusEnableAuthentication\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusDeadtime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusRetransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerAuthPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the authentication features.\n\nImplementation of this group is optional. If the\nauthentication features are supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"tftpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"tftpHost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tftpFile\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tftpModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tftpAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tftpResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the tftp upload/download features.\n\nImplementation of this group is optional. If the\ntftp upload/download features are supported, the\nentire group should be implemented.\"\"\",\n        }, # group\n        \"brouteEnableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"brouterPortModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableRip\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableSpantree\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableGiantCheck\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableIpFragmentation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableUnreachables\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterCamMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterIpxSnapToEther\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterIpx8023RawToFddi\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEthernetReceiveMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEthernetTransmitMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterFddiReceiveMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterFddiTransmitMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortIpVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortNetMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortBroadcast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortBridgeVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterPortIpHelpers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterIpx8022ToEther\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableTransitEncapsulation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableFddiCheck\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterEnableAPaRT\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the combined bridging/routing feature.\n\nImplementation of this group is optional. If the\ncombined bridging/routing feature is supported,\nthe group should be implemented.\"\"\",\n        }, # group\n        \"filterGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.17\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"filterMacModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterMacPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterMacAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterMacType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterVendorModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterVendorPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterVendorId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterVendorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterProtocolModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterProtocolPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterProtocolValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterProtocolType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestOffset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterTestMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPortModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPortComplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPortBroadcastThrottle\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPortBroadcastThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"filterPortBroadcastDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the port filtering feature.\n\nImplementation of this group is optional. If the\nport filtering feature is supported, parts or all\nof this group should be implemented.\"\"\",\n        }, # group\n        \"monitorGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.18\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"monitorSourceModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorSourcePort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorDestinationModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorDestinationPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorAdminSourcePorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"monitorOperSourcePorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of deprecated objects for\nmanaging the Switched Port Analyzer (SPAN)\nfeatures.\"\"\",\n        }, # group\n        \"vlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.19\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vlanIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanSpantreeEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslVlansAllowed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortSwitchLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslPriorityVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the Virtual LAN features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"vmpsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmpsAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vmpsType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vmpsAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vmpsAccessed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the Vlan Membership Policy Server feature.\n\nImplementation of this group is optional. If the\nVlan Membership Policy Server feature is\nsupported, the entire group should be\nimplemented.\"\"\",\n        }, # group\n        \"tokenRingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"tokenRingModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortSetACbits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortEarlyTokenRel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortPriorityThresh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortPriorityMinXmit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortCfgLossThresh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortCfgLossInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripDistCrfMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripAreReductionMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripLocalNodeID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripLastRevision\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripLastChangedRevision\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripAdvertsReceived\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripAdvertsTransmitted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripAdvertsProcessed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripInputQueueDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripOutputQueueDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripLocalPortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripRemotePortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripRemotePortConfigured\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripDistributedCrf\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripBackupCrf\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingDripOwnerNodeID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the token ring features.\n\nImplementation of this group is optional. If the\ntoken ring features are supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"mcastGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.22\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"mcastRouterModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mcastRouterPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mcastRouterAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mcastRouterOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mcastEnableCgmp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mcastEnableIgmp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the multicast features.\n\nImplementation of this group is optional. If the\nmulticast features are supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"dnsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dnsEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"dnsServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"dnsServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"dnsDomainName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the DNS feature.\n\nImplementation of this group is optional. If the\nDNS feature is supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"syslogGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"syslogServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogConsoleEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogHostEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogMessageFacility\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogMessageSeverity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"syslogTimeStampOption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the system log feature.\n\nImplementation of this group is optional. If the\nsystem log feature is supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"ntpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.25\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ntpBcastClient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpBcastDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpClient\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpSummertimeStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpSummerTimezoneName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpTimezoneName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpTimezoneOffsetHour\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpTimezoneOffsetMinute\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the network time protocol feature.\n\nImplementation of this group is optional. If the\nnetwork time protocol feature is supported, the\nentire group should be implemented.\"\"\",\n        }, # group\n        \"ipPermitGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.26\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ipPermitAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ip permit list feature.\n\nImplementation of this group is optional. If the\nip permit list feature is supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"mdgGatewayGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.27\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"mdgGatewayAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"mdgGatewayType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the multiple default gateway feature.\n\nImplementation of this group is optional. If the\nmultiple default gateway feature is supported,\nthe entire group should be implemented.\"\"\",\n        }, # group\n        \"traceRouteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.28\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"traceRouteMaxQueries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteHost\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryDNSEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryWaitingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryInitTTL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryMaxTTL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryUDPPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryPacketCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryPacketSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryTOS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteQueryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataGatewayName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataGatewayIp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataRtt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataHopCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"traceRouteDataErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the trace route feature.\n\nImplementation of this group is optional. If the\ntrace route feature is supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"deprecatedObjectGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.29\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysCommunityAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityString\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleHwHiVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleHwLoVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleFwHiVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleFwLoVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSwHiVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSwLoVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"brouterCamAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects that have been\ndeprecated.\"\"\",\n        }, # group\n        \"ntpAuthenticationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.30\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ntpServerPublicKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpAuthenticationEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpAuthenticationPublicKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpAuthenticationSecretKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpAuthenticationTrustedMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ntpAuthenticationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the network time protocol authentication\nfeature.\n\nImplementation of this group is optional. If the\nnetwork time protocol authentication feature is\nsupported, the entire group should be\nimplemented.\"\"\",\n        }, # group\n        \"tokenRingSoftErrorMonitorGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.31\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"tokenRingPortSoftErrThresh\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortSoftErrReportInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortSoftErrResetCounters\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortSoftErrLastCounterReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingPortSoftErrEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the token ring port soft error monitoring\nfeature.\n\nImplementation of this group is optional. If the\ntoken ring features are supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"portCpbGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.32\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portCpbUdld\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the port capabilities on the\ndevice.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"portSecurityGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.33\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portSecurityMaxSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityShutdownTimeOut\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityViolationPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityExtModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityExtPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityExtSecureSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityExtControlStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"fileCopyGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.34\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"fileCopyProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyRemoteServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopySrcFileName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyDstFileName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyModuleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyUserName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"fileCopyResultRcpErrorMessage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the tftp/rcp or local file upload/download\nfeatures.\n\nImplementation of this group is optional. If the\ntftp upload/download features are supported, the\nentire group should be implemented.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.35\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysStartupConfigSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysStartupConfigSourceFile\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConfigSupervisorModuleNo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysStandbyPortEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"ipPermitGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.36\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipPermitAccessType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation for allowing the ip permit host with\nthe specified access type.\n\nImplementation of this group is optional. If the\nip permit list enhancement feature is supported,\nthis group should be implemented.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.37\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysPortFastBpduGuard\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysErrDisableTimeoutEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysErrDisableTimeoutInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficMonitorHighWaterMark\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityVersioningEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityNotRunningReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"filterGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.38\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"filterPortBroadcastThresholdFraction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the port filtering feature.\n\nImplementation of this group is optional. If the\nport filtering feature is supported, parts or all\nof this group should be implemented.\"\"\",\n        }, # group\n        \"mcastGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.39\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"mcastEnableRgmp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the multicast features.\n\nImplementation of this group is optional. If the\nmulticast features are supported, the entire group\nshould be implemented.\"\"\",\n        }, # group\n        \"portGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.40\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portAdditionalOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portEntPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"chassisGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.41\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"chassisPs3Type\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs3Status\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs3TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPEMInstalled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the chassis of the device.\n\nThis group must be implemented by systems that can\nhave 3 or more power supplies.\"\"\",\n        }, # group\n        \"moduleGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.42\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"moduleEntPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the modules on the device.\n\nImplementation of this group is mandatory.\"\"\",\n        }, # group\n        \"portCpbGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.43\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portCpbSpan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the port capabilities on the\ndevice.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"voiceGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.44\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"voicePortIfDHCPEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfIpNetMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfTftpServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfGatewayAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfDnsServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfDnsDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortIfOperDnsDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortCallManagerIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortOperDnsServerIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"voicePortOperDnsServerSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the voice ports on the device.\n\nImplemetation of this group is Optional\"\"\",\n        }, # group\n        \"portGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.45\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portInlinePowerDetect\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"vlanGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.46\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vlanPortAuxiliaryVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the Virtual LAN features.\n\nImplementation of this group is optional. If the\nVirtual LAN features are supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"portCpbGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.47\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portCpbInlinePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbAuxiliaryVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the port capabilities on the\ndevice.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"moduleGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.48\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"moduleAdditionalStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the modules on the device.\n\nImplementation of this group is mandatory.\"\"\",\n        }, # group\n        \"switchAccelerationModuleGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.49\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"switchAccelerationModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"switchAccelerationModuleEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the modules switch acceleration\nconfiguration.\n\nImplementation of this group is mandatory if the\nmodule switch acceleration feature is supported.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.50\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysExtendedRmonNetflowModuleMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\nThe sysExtendedRmonNetflowModuleMask object is\noptional object and it will only be supported in\nthe platform supporting multiple NAM (Network\nAnalysis Module) cards.\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.51\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sshPublicKeySize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\"\"\",\n        }, # group\n        \"vlanTrunkMappingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.52\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanTrunkMappingMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanTrunkMappingToVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanTrunkMappingType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanTrunkMappingOper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanTrunkMappingStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the trunk VLAN to VLAN associations.\n\nImplementation of this group is mandatory if the\ntrunk VLAN to VLAN association feature is\nsupported on the device.\"\"\",\n        }, # group\n        \"portJumboFrameGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.53\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portJumboFrameModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portJumboFramePortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portJumboFrameEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the port jumbo frame feature on the device.\n\nImplementation of this group is mandatory if the\nport jumbo frame feature is supported on the\ndevice.\"\"\",\n        }, # group\n        \"portCpbGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.54\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portCpbCosRewrite\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbTosRewrite\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbCopsGrouping\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the port capabilities on the\ndevice.\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"fileCopyGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.55\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"fileCopyRuntimeConfigPart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about tftp/rcp or local file\nupload/download features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"systemRmonGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.56\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysMaxRmonMemory\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object providing RMON max memory\nusage control.\"\"\",\n        }, # group\n        \"filterGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.57\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"filterPortSuppressionOption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the unicast/multicast port filtering\nfeature.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup5\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.58\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysMacReductionAdminEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysMacReductionOperEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\"\"\",\n        }, # group\n        \"syslogGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.59\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"syslogTelnetEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object providing control about\nwhether the syslog messages should be sent to\ntelnet sessions.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"systemStatusGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.60\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object providing the system\nLED status.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"configurationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.61\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"configMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"configTextFileLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"configWriteMem\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"configWriteMemStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object providing the information\nabout the configuration mode to store the\nconfiguration information.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"filterGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.62\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"filterPortSuppressionViolation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about  about the Broadcast\nSuppression Violation for port filtering feature.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"portGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.63\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portErrDisableTimeOutEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the ports on the device.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"portCpbGroup5\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.64\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portCpbDot1x\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbIgmpFilter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing additional\ninformation about the port capabilities on the\ndevice.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"authenticationGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.65\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"tacacsDirectedRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusDeadtime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusRetransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerAuthPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the authentication features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"systemMiscGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.66\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysMgmtType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysAttachType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysBaudRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysInsertMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableModem\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableRedirects\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysArpAgingTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRwa\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRw\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysCommunityRo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysIpVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\"\"\",\n        }, # group\n        \"systemTrapGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.67\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"sysEnableChassisTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableModuleTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableBridgeTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableRepeaterTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the SNMP traps feature.\"\"\",\n        }, # group\n        \"optionalSystemMiscGroup6\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.68\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysErrDisableTimeoutEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysErrDisableTimeoutInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysTrafficMonitorHighWaterMark\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityVersioningEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysHighAvailabilityNotRunningReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the miscellaneous system features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"optionalChassisGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.69\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"chassisPs1TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisPs2TestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisFanTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisSlotConfig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the chassis of the device.\"\"\",\n        }, # group\n        \"portGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.70\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCrossIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCrossGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdditionalStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portDuplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminRxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperRxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portAdminTxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portOperTxFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlTransmitFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlReceiveFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlPauseTransmitFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlPauseReceiveFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portMacControlUnknownProtocolFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portLinkFaultStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\"\"\",\n        }, # group\n        \"vlanGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.71\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanPortModule\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslVlansAllowed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortSwitchLevel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortIslPriorityVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"vlanPortOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the Virtual LAN features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"ipPermitGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.72\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipPermitAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitAccessTypeEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ip permit list feature.\n\nImplementation of this group is optional. If the\nip permit list feature is supported, the entire\ngroup should be implemented.\"\"\",\n        }, # group\n        \"optionalPortGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.73\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"portSecurityModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecurityLastSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portSecuritySecureSrcAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbModuleIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbPortIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbDuplex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbTrunkEncapsulationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbTrunkMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbChannel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbBroadcastSuppression\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbFlowControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbSecurity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbVlanMembership\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portCpbPortfast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNControlIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNRateBase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNReportStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNTimeRemaining\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNRequestedSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNGrantedSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNModuleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNUtilization\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOBroadcast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNIOMulticast\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portTopNBufferOverFlow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the ports on the device.\n\nImplementation of this group is Optional.\"\"\",\n        }, # group\n        \"optionalSystemTrapGroup1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.74\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysEnableIpPermitTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableVmpsTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableConfigTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableEntityTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the SNMP traps feature.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"authenticationGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.75\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"tacacsDirectedRequest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tacacsServerType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusDeadtime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"radiusRetransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the authentication features.\n\nImplementation of this group is optional.\"\"\",\n        }, # group\n        \"systemTrapGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.76\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysEnableChassisTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableModuleTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysEnableRepeaterTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the SNMP traps feature.\"\"\",\n        }, # group\n        \"notificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.77\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lerAlarmOn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"lerAlarmOff\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleUp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleDown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisAlarmOn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisAlarmOff\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitDeniedTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"sysConfigChangeTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"tokenRingSoftErrExceededTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of notifications supported on the device.\"\"\",\n        }, # group\n        \"ipPermitGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.2.78\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipPermitTelnetConnectLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"ipPermitSshConnectLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing configuration \ninformation on ip permit connection limit for a \nspecific host.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ciscoStackgMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about\nthe SNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"authenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup is an optional group\ncontaining objects providing information about\nthe authentication features.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"monitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The monitorGroup is an optional group containing\nobjects providing information about the port\nmonitoring feature, also known as the Switched\nPort ANalyzer (SPAN) feature.\"\"\",\n                },\n                \"vlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup is an optional group containing\nobjects providing information about the ip permit\nlist feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about\nthe extended RMON feature.\"\"\",\n                },\n                \"authenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup is an optional group\ncontaining objects providing information about\nthe authentication features.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about\nthe combined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"monitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The monitorGroup is an optional group containing\nobjects providing information about the port\nmonitoring feature, also known as the Switched\nPort ANalyzer (SPAN) feature.\"\"\",\n                },\n                \"vlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup is an optional group containing\nobjects providing information about the ip permit\nlist feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup2 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about\nthe traffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about\nthe FDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"authenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup is an optional group\ncontaining objects providing information about the\nauthentication features.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"monitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The monitorGroup is an optional group containing\nobjects providing information about the port\nmonitoring feature, also known as the Switched\nPort ANalyzer (SPAN) feature.\"\"\",\n                },\n                \"vlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup is an optional group containing\nobjects providing information about the ip permit\nlist feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup2 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group\ncontaining objects providing information about\nthe modules on the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"vlanGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup1 is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"authenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup is an optional group\ncontaining objects providing information about the\n authentication features.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"monitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The monitorGroup is an optional group containing\nobjects providing information about the port\nmonitoring feature, also known as the Switched\nPort ANalyzer (SPAN) feature.\"\"\",\n                },\n                \"vlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup2 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\n on the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"vlanGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup1 is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"optionalSystemMiscGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"vlanTrunkMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\ntrunk VLAN to VLAN association feature on the\ndevice.\"\"\",\n                },\n                \"portJumboFrameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nport jumbo frame feature on the device.\"\"\",\n                },\n                \"portCpbGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup4 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"vlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup is an optional group containing\nobjects providing information about the ip permit\nlist feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup2 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group\ncontaining objects providing information about\nthe modules on the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"optionalSystemMiscGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"vlanTrunkMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\ntrunk VLAN to VLAN association feature on the\ndevice.\"\"\",\n                },\n                \"portJumboFrameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nport jumbo frame feature on the device.\"\"\",\n                },\n                \"portCpbGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup4 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"fileCopyGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup2 is an optional group\ncontaining objects providing additional\ninformation about tftp/rcp or local file\nupload/download features.\"\"\",\n                },\n                \"systemRmonGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup2 is an optional group\ncontaining objects providing information about\nRMON max memory usage control.\"\"\",\n                },\n                \"filterGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup2 is an optional group containing\nobjects providing information about the\nunicast/multicast port filtering feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup5 is an optional group\ncontaining objects providing information about\nmiscellaneous system features.\"\"\",\n                },\n                \"syslogGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup2 is an optional group containing\nobjects providing information about whether the\nsyslog messages should be sent to telnet\nsessions.\"\"\",\n                },\n                \"systemStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemStatusGroup is an optional group\ncontaining objects providing information about\nsystem LED status.\"\"\",\n                },\n                \"configurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The configurationGroup is an optional group\ncontaining objects providing information about\nthe configuration mode to store the configuration\ninformation.\"\"\",\n                },\n                \"filterGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup3 is an optional group containing\nobjects providing information about Broadcast\nSuppression Violation for port filtering\nfeature.\"\"\",\n                },\n                \"portGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup3 is an optional group containing\nobjects providing information about additional\ninformation about the ports on the device.\"\"\",\n                },\n                \"portCpbGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup5 is an optional group containing\nobjects providing additional information about\nthe port capabilities on the device.\"\"\",\n                },\n                \"authenticationGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup1 is an optional group\ncontaining objects providing information about the\nauthentication features.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance6\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.6\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup4\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalSystemTrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"optionalChassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup1 is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup1 is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"vlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup2 is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup2 is an optional group\ncontaining objects providing information\nabout the ip permit list feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup6\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup6 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup1 is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group\ncontaining objects providing information about\nthe modules on the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"optionalSystemMiscGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"vlanTrunkMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\ntrunk VLAN to VLAN association feature on the\ndevice.\"\"\",\n                },\n                \"portJumboFrameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nport jumbo frame feature on the device.\"\"\",\n                },\n                \"portCpbGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup4 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"fileCopyGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup2 is an optional group\ncontaining objects providing additional\ninformation about tftp/rcp or local file\nupload/download features.\"\"\",\n                },\n                \"systemRmonGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup2 is an optional group\ncontaining objects providing information about\nRMON max memory usage control.\"\"\",\n                },\n                \"filterGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup2 is an optional group containing\nobjects providing information about the\nunicast/multicast port filtering feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup5 is an optional group\ncontaining objects providing information about\nmiscellaneous system features.\"\"\",\n                },\n                \"syslogGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup2 is an optional group containing\nobjects providing information about whether the\nsyslog messages should be sent to telnet\nsessions.\"\"\",\n                },\n                \"systemStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemStatusGroup is an optional group\ncontaining objects providing information about\nsystem LED status.\"\"\",\n                },\n                \"configurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The configurationGroup is an optional group\ncontaining objects providing information about\nthe configuration mode to store the configuration\ninformation.\"\"\",\n                },\n                \"filterGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup3 is an optional group containing\nobjects providing information about Broadcast\nSuppression Violation for port filtering\nfeature.\"\"\",\n                },\n                \"portGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup3 is an optional group containing\nobjects providing information about additional\ninformation about the ports on the device.\"\"\",\n                },\n                \"portCpbGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup5 is an optional group containing\nobjects providing additional information about\nthe port capabilities on the device.\"\"\",\n                },\n                \"authenticationGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup1 is an optional group\ncontaining objects providing information about the\nauthentication features.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance7\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.7\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup4\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalChassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup1 is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup1 is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"vlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup2 is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup2 is an optional group\ncontaining objects providing information\nabout the ip permit list feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup6\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup6 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup1 is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group\ncontaining objects providing information about\nthe modules on the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"optionalSystemMiscGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"vlanTrunkMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\ntrunk VLAN to VLAN association feature on the\ndevice.\"\"\",\n                },\n                \"portJumboFrameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nport jumbo frame feature on the device.\"\"\",\n                },\n                \"portCpbGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup4 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"fileCopyGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup2 is an optional group\ncontaining objects providing additional\ninformation about tftp/rcp or local file\nupload/download features.\"\"\",\n                },\n                \"systemRmonGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup2 is an optional group\ncontaining objects providing information about\nRMON max memory usage control.\"\"\",\n                },\n                \"filterGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup2 is an optional group containing\nobjects providing information about the\nunicast/multicast port filtering feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup5 is an optional group\ncontaining objects providing information about\nmiscellaneous system features.\"\"\",\n                },\n                \"syslogGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup2 is an optional group containing\nobjects providing information about whether the\nsyslog messages should be sent to telnet\nsessions.\"\"\",\n                },\n                \"systemStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemStatusGroup is an optional group\ncontaining objects providing information about\nsystem LED status.\"\"\",\n                },\n                \"configurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The configurationGroup is an optional group\ncontaining objects providing information about\nthe configuration mode to store the configuration\ninformation.\"\"\",\n                },\n                \"filterGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup3 is an optional group containing\nobjects providing information about Broadcast\nSuppression Violation for port filtering\nfeature.\"\"\",\n                },\n                \"portGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup3 is an optional group containing\nobjects providing information about additional\ninformation about the ports on the device.\"\"\",\n                },\n                \"portCpbGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup5 is an optional group containing\nobjects providing additional information about\nthe port capabilities on the device.\"\"\",\n                },\n                \"optionalSystemTrapGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup1 is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"authenticationGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup2 is an optional group\ncontaining objects providing information about the\nauthentication features.\"\"\",\n                },\n                \"notificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The notificationGroup is an optional group\ncontaining notifications supported on the device.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ciscoStackgMIBCompliance8\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-STACK-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.5.1.31.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the Cisco stack MIB.\"\"\",\n            \"requires\" : {\n                \"systemMiscGroup1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"systemTrapGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"chassisGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"moduleGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"portGroup4\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-STACK-MIB\"\n                },\n                \"optionalSystemMiscGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemMiscGroup is an optional group\ncontaining objects  providing information about\nthe miscellaneous system features.\"\"\",\n                },\n                \"optionalChassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalChassisGroup1 is an optional group\ncontaining objects providing information about the\nchassis of the device.\"\"\",\n                },\n                \"optionalModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalMooduleGroup is an optional group\ncontaining objects providing information about the\nmodules on the device.\"\"\",\n                },\n                \"optionalPortGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalPortGroup1 is an optional group\ncontaining objects providing information about the\nports on the device.\"\"\",\n                },\n                \"systemTrafficGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemTrafficGroup is an optional group\ncontaining objects providing information about the\ntraffic meter feature.\"\"\",\n                },\n                \"systemFddiGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemFddiGroup is an optional group\ncontaining objects providing information about the\nFDDI ring feature.\"\"\",\n                },\n                \"systemRmonGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup is an optional group\ncontaining objects providing information about the\nextended RMON feature.\"\"\",\n                },\n                \"tftpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tftpGroup is an optional group containing\nobjects providing information about the tftp\nupload/download features.\"\"\",\n                },\n                \"brouteEnableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The brouteEnableGroup is an optional group\ncontaining objects providing information about the\ncombined bridging/routing feature.\"\"\",\n                },\n                \"filterGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"vlanGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vlanGroup2 is an optional group containing\nobjects providing information about the Virtual\nLAN features.\"\"\",\n                },\n                \"vmpsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The vmps is an optional group containing objects\nproviding information about the Vlan Membership\nPolicy Server feature.\"\"\",\n                },\n                \"tokenRingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingGroup is an optional group\ncontaining objects  providing information about\nthe tokenring features.\"\"\",\n                },\n                \"mcastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup is an optional group containing\nobjects providing information about the multicast\nfeatures.\"\"\",\n                },\n                \"dnsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The dnsGroup is an optional group containing\nobjects providing information about the DNS\nfeature.\"\"\",\n                },\n                \"syslogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup is an optional group containing\nobjects providing information about the system log\nfeature.\"\"\",\n                },\n                \"ntpGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpGroup is an optional group containing\nobjects providing information about the network\ntime protocol feature.\"\"\",\n                },\n                \"ipPermitGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup2 is an optional group\ncontaining objects providing information\nabout the ip permit list feature.\"\"\",\n                },\n                \"mdgGatewayGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mdgGatewayGroup is an optional group\ncontaining objects  providing information about\nthe multiple default gateway feature.\"\"\",\n                },\n                \"traceRouteGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The traceRouteGroup is an optional group\ncontaining objects  providing information about\nthe trace route feature.\"\"\",\n                },\n                \"ntpAuthenticationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ntpAuthenticationGroup is an optional group\ncontaining objects providing information about the\nnetwork time protocol authentication feature.\"\"\",\n                },\n                \"tokenRingSoftErrorMonitorGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The tokenRingSoftErrorMonitorGroup is an optional\ngroup containing objects providing information\nabout the token ring port soft error monitoring\nfeature.\"\"\",\n                },\n                \"portCpbGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup1 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portSecurityGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portSecurityGroup1 is an optional group\ncontaining objects providing additional\ninformation for supporting port security feature\nwith the multiple secured source MAC addresses.\"\"\",\n                },\n                \"fileCopyGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup is an optional group containing\nobjects providing information about the tftp/rcp\nor local file upload/download features.\"\"\",\n                },\n                \"optionalSystemMiscGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup1 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"ipPermitGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup1 is an optional group\ncontaining objects providing information about\nthe ip permit list feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup6\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup6 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"filterGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup1 is an optional group containing\nobjects providing information about the port\nfiltering feature.\"\"\",\n                },\n                \"mcastGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The mcastGroup1 is an optional group containing\nobjects providing information about the\nmulticast features.\"\"\",\n                },\n                \"portGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup1 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"chassisGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The chassisGroup1 is a group containing objects\nproviding information about the chassis of the\ndevice. This group must be implemented by systems\nthat can have 3 or more power supplies.\"\"\",\n                },\n                \"moduleGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup1 is an optional group containing\nobjects providing information about the modules\non the device.\"\"\",\n                },\n                \"portCpbGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup2 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"voiceGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The voiceGroup is an optional group containing\nobjects providing information about the voice port\non the device.\"\"\",\n                },\n                \"moduleGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The moduleGroup2 is an mandatory group\ncontaining objects providing information about\nthe modules on the device.\"\"\",\n                },\n                \"portCpbGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup3 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"portGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup2 is an optional group containing\nobjects providing information about the ports on\nthe device.\"\"\",\n                },\n                \"switchAccelerationModuleGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nswitch acceleration capability.\"\"\",\n                },\n                \"optionalSystemMiscGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup3 is an optional group\ncontaining objects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"optionalSystemMiscGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the\nmiscellaneous system features.\"\"\",\n                },\n                \"vlanTrunkMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\ntrunk VLAN to VLAN association feature on the\ndevice.\"\"\",\n                },\n                \"portJumboFrameGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for implementations of\nport jumbo frame feature on the device.\"\"\",\n                },\n                \"portCpbGroup4\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup4 is an optional group containing\nobjects providing additional information about the\nport capabilities on the device.\"\"\",\n                },\n                \"fileCopyGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The fileCopyGroup2 is an optional group\ncontaining objects providing additional\ninformation about tftp/rcp or local file\nupload/download features.\"\"\",\n                },\n                \"systemRmonGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemRmonGroup2 is an optional group\ncontaining objects providing information about\nRMON max memory usage control.\"\"\",\n                },\n                \"filterGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup2 is an optional group containing\nobjects providing information about the\nunicast/multicast port filtering feature.\"\"\",\n                },\n                \"optionalSystemMiscGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The optionalSystemMiscGroup5 is an optional group\ncontaining objects providing information about\nmiscellaneous system features.\"\"\",\n                },\n                \"syslogGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The syslogGroup2 is an optional group containing\nobjects providing information about whether the\nsyslog messages should be sent to telnet\nsessions.\"\"\",\n                },\n                \"systemStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The systemStatusGroup is an optional group\ncontaining objects providing information about\nsystem LED status.\"\"\",\n                },\n                \"configurationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The configurationGroup is an optional group\ncontaining objects providing information about\nthe configuration mode to store the configuration\ninformation.\"\"\",\n                },\n                \"filterGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The filterGroup3 is an optional group containing\nobjects providing information about Broadcast\nSuppression Violation for port filtering\nfeature.\"\"\",\n                },\n                \"portGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portGroup3 is an optional group containing\nobjects providing information about additional\ninformation about the ports on the device.\"\"\",\n                },\n                \"portCpbGroup5\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The portCpbGroup5 is an optional group containing\nobjects providing additional information about\nthe port capabilities on the device.\"\"\",\n                },\n                \"optionalSystemTrapGroup1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The OptionalSystemTrapGroup1 is an optional group\ncontaining objects providing information about the\nSNMP traps feature.\"\"\",\n                },\n                \"authenticationGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The authenticationGroup2 is an optional group\ncontaining objects providing information about the\nauthentication features.\"\"\",\n                },\n                \"notificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The notificationGroup is an optional group\ncontaining notifications supported on the device.\"\"\",\n                },\n                \"ipPermitGroup3\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-STACK-MIB\",\n                    \"description\" :\n                        \"\"\"The ipPermitGroup3 is an optional group containing \nobjects providing information about the ip permit \nconnection limit for a specific host.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n\n    \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\n        San Jose, CA  95134\n        USA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"Cisco VLAN ifTable Relationship MIB lists VLAN-id and ifIndex \ninformation for routed VLAN interfaces.  \n\nA routed VLAN interface is the router interface or sub-interface \nto which the router's IP address on the VLAN is attached.  \nFor example, an ISL, SDE, or 802.1Q encapsulated\nsubinterface, or Switched Virtual Interface (SVI).\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"1999-04-01 05:30\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoVlanIfTableRelationshipMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"InterfaceIndexOrZero\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoVlanIfTableRelationshipMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128\",\n            \"status\" : \"current\",\n        }, # node\n        \"cviMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1\",\n        }, # node\n        \"cviGlobals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1\",\n        }, # node\n        \"cviVlanInterfaceIndexTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The cviVlanInterfaceIndexTable provides a way to \ntranslate a VLAN-id in to an ifIndex, so that \nthe routed VLAN interface's routing configuration \ncan be obtained from interface entry in ipRouteTable.\n\nNote that some routers can have interfaces to multiple\nVLAN management domains, and therefore can have multiple \nrouted VLAN interfaces which connect to different VLANs \nhaving the same VLAN-id.  Thus, it is possible to have \nmultiple rows in this table for the same VLAN-id.\n\nThe cviVlanInterfaceIndexTable also provides a way\nto find the VLAN-id from an ifTable VLAN's ifIndex.\"\"\",\n        }, # table\n        \"cviVlanInterfaceIndexEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cviVlanId\",\n                \"cviPhysicalIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry represents a routed VLAN interface, its\ncorresponding physical port if any, and the ifTable entry\nfor the routed VLAN interface.\n\nEntries are created by the agent when the routed VLAN interface\nis created.  Operational status of routing does not affect\nthe entries listed here.  For routing configuration please refer\nto ipRouteTable.\n\nEntries are deleted by the agent when the routed VLAN interface\nis removed from the system configuration.\"\"\",\n        }, # row\n        \"cviVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN-id number of the routed VLAN interface.\"\"\",\n        }, # column\n        \"cviPhysicalIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"For subinterfaces, this object is the ifIndex of the \nphysical interface for the subinterface.\n\nFor Switch Virtual Interfaces (SVIs), this object is zero.\"\"\",\n        }, # column\n        \"cviRoutedVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index for the ifTable entry associated with \nthis routed VLAN interface.\"\"\",\n        }, # column\n        \"cviMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.3\",\n        }, # node\n        \"cviMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.3.1\",\n        }, # node\n        \"cviMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.3.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"cviMIBGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cviRoutedVlanIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A set of objects to obtain VLAN-ID and ifIndex\ninformation for routed VLAN interfaces.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cviMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.128.1.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which implement\nthe CISCO-VLAN-INTERFACE-MIB\"\"\",\n            \"requires\" : {\n                \"cviMIBGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-VLAN-MEMBERSHIP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python CISCO-VLAN-MEMBERSHIP-MIB\n\nFILENAME = \"CISCO-VLAN-MEMBERSHIP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n\n    \"CISCO-VLAN-MEMBERSHIP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-vlans@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for the management of the VLAN\nMembership within the frame  work of Cisco\nVLAN Architecture, v 2.0 by Keith McCloghrie. The MIB\nprovides information on VLAN Membership Policy Servers\nused by a device and VLAN membership assignments of\nnon-trunk bridge ports of the device.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2004-07-16 00:00\",\n                \"description\" :\n                    \"\"\"Add vmMembershipSummaryExtTable.\"\"\",\n            },\n            {\n                \"date\" : \"2004-04-07 00:00\",\n                \"description\" :\n                    \"\"\"Change the SYNTAX of vmMembershipSummaryMember2kPorts\nfrom PortList to CiscoPortList.\"\"\",\n            },\n            {\n                \"date\" : \"2003-10-10 00:00\",\n                \"description\" :\n                    \"\"\"Add vmVoiceVlanCdpVerifyEnable to support the feature\nof voice VLANs' detection through CDP packets.\"\"\",\n            },\n            {\n                \"date\" : \"2003-06-05 00:00\",\n                \"description\" :\n                    \"\"\"Deprecate vmMembershipSummaryMemberPorts and define\nvmMembershipSummaryMember2kPorts to support up to 2k \nbridge ports.\"\"\",\n            },\n            {\n                \"date\" : \"2002-03-28 00:00\",\n                \"description\" :\n                    \"\"\"Add vmVoiceVlanTable to support VVID feature\"\"\",\n            },\n            {\n                \"date\" : \"2001-05-01 00:00\",\n                \"description\" :\n                    \"\"\"Import VlanIndex from CISCO-VTP-MIB\"\"\",\n            },\n            {\n                \"date\" : \"2001-01-30 00:00\",\n                \"description\" :\n                    \"\"\"Corrected description of vmVmpsReconfirmResult\"\"\",\n            },\n            {\n                \"date\" : \"2000-01-06 00:00\",\n                \"description\" :\n                    \"\"\"Added 4k VLAN support\"\"\",\n            },\n            {\n                \"date\" : \"1999-01-18 00:00\",\n                \"description\" :\n                    \"\"\"Add vmNotificationsEnabled.\nAdd support for multi-vlan ports.\n            Other minor edits.\"\"\",\n            },\n            {\n                \"date\" : \"1996-12-06 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoVlanMembershipMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"CiscoPortList\"},\n        {\"module\" : \"CISCO-TC\", \"name\" : \"CiscoPortListRange\"},\n    ),\n\n    \"nodes\" : {\n        \"ciscoVlanMembershipMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68\",\n            \"status\" : \"current\",\n        }, # node\n        \"ciscoVlanMembershipMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1\",\n        }, # node\n        \"vmVmps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1\",\n        }, # node\n        \"vmVmpsVQPVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VLAN Query Protocol (VQP) version supported on\nthe device. VQP is the protocol used to query\nVLAN Membership Policy Server (VMPS) for VLAN\nmembership assignments of dynamic VLAN ports.\nA VMPS provides VLAN membership policy\nassignments based on the content of the packets\nreceived on a port.\"\"\",\n        }, # scalar\n        \"vmVmpsRetries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of retries for VQP requests to a VMPS before\nusing the next available VMPS.\"\"\",\n        }, # scalar\n        \"vmVmpsReconfirmInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"120\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"120\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"units\" : \"Minutes\",\n            \"description\" :\n                \"\"\"The switch will reconfirm membership of addresses on\neach port with VMPS periodically. This object specifies\nthe interval to perform reconfirmation. If the value is\nset to 0, the switch does not reconfirm membership with\nVMPS.\"\"\",\n        }, # scalar\n        \"vmVmpsReconfirm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"execute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to execute(2) causes the switch\nto reconfirm membership of every dynamic port.\nReading this object always return ready(1).\"\"\",\n        }, # scalar\n        \"vmVmpsReconfirmResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"noResponse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"noVmps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noDynamicPort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"noHostConnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object returns the result of the last request\nthat sets vmVmpsReconfirm to execute(2). The\nsemantics of the possible results are as follows:\n\n     other(1)           - none of following\n     inProgress(2)      - reconfirm in progress\n     success(3)         - reconfirm completed successfully\n     noResponse(4)      - reconfirm failed because no\n                          VMPS responded\n     noVmps(5)          - No VMPS configured\n     noDynamicPort(6)   - No dynamic ports configured\n     noHostConnected(7) - No hosts on dynamic ports\"\"\",\n        }, # scalar\n        \"vmVmpsCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the IpAddress of the current VMPS used.\"\"\",\n        }, # scalar\n        \"vmVmpsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of VMPS to use. The device will use\nthe the primary VMPS by default. If the\ndevice is unable to reach the primary server\nafter vmVmpsRetries retries, it uses the first\nsecondary server in the table until it runs out\nof secondary servers, in which case it will return\nto using the primary server. Entries in this table\nmay be created and deleted via this MIB or\nthe management console on a device.\"\"\",\n        }, # table\n        \"vmVmpsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vmVmpsIpAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the vmVmpsTable.\"\"\",\n        }, # row\n        \"vmVmpsIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Ip Address of the VMPS.\"\"\",\n        }, # column\n        \"vmVmpsPrimary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the VMPS. Setting this value\nto true will make this VMPS the primary server\nand make the switch use this as the current server.\nSetting this entry to true causes other rows\nto transition to false. Attempting to write\na value of false after creation will result in\na return of bad value. Deleting an entry whose\nvalue is true will result in the first entry\nin the table being set to true.\"\"\",\n        }, # column\n        \"vmVmpsRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\"\"\",\n        }, # column\n        \"vmMembership\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2\",\n        }, # node\n        \"vmMembershipSummaryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A summary of VLAN membership of non-trunk\nbridge ports. This is a convenience table\nfor retrieving VLAN membership information.\n\nA row is created for a VLAN if:\na) the VLAN exists, or\nb) a port is assigned to a non-existent VLAN.\n\nVLAN membership can only be modified via the\nvmMembershipTable.\"\"\",\n        }, # table\n        \"vmMembershipSummaryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vmMembershipSummaryVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the\nvmMembershipSummaryTable.\"\"\",\n        }, # row\n        \"vmMembershipSummaryVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN id of the VLAN.\"\"\",\n        }, # column\n        \"vmMembershipSummaryMemberPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.1.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of the device's member ports that belong\nto the VLAN.\n\nEach octet within the value of this object specifies a\nset of eight ports, with the first octet specifying ports\n1 through 8, the second octet specifying ports 9\nthrough 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents the\nhighest numbered port.  Thus, each port of the\nVLAN is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that port is included in the set of\nports; the port is not included if its bit has a\nvalue of '0'.\n\nA port number is the value of dot1dBasePort for\nthe port in the BRIDGE-MIB (RFC 1493).\"\"\",\n        }, # column\n        \"vmMembershipSummaryMember2kPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoPortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of the device's member ports that belong\nto the VLAN. It has the VLAN membership information\nof up to 2048 ports with the port number from 1 to \n2048.\n\nEach octet within the value of this object specifies a\nset of eight ports, with the first octet specifying \nports 1 through 8, the second octet specifying ports 9\nthrough 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents the\nhighest numbered port.  Thus, each port of the\nVLAN is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that port is included in the set of\nports; the port is not included if its bit has a\nvalue of '0'.\n\nA port number is the value of dot1dBasePort for\nthe port in the BRIDGE-MIB (RFC 1493).\"\"\",\n        }, # column\n        \"vmMembershipTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for configuring VLAN port membership.\nThere is one row for each bridge port that is\nassigned to a static or dynamic access port. Trunk\nports are not  represented in this table.  An entry\nmay be created and deleted when ports are created or\ndeleted via SNMP or the management console on a \ndevice.\"\"\",\n        }, # table\n        \"vmMembershipEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the vmMembershipTable.\"\"\",\n        }, # row\n        \"vmVlanType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"multiVlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of VLAN membership assigned to this port.\nA port with static vlan membership is assigned to a\nsingle VLAN directly. A port with dynamic membership\nis assigned a single VLAN based on content of packets\nreceived on the port and via VQP queries to VMPS.\nA port with multiVlan membership may be assigned to\none or more VLANs directly.\n\nA static or dynamic port membership is specified\nby the value of vmVlan. A multiVlan port membership is\nspecified by the value of vmVlans.\"\"\",\n        }, # column\n        \"vmVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN id of the VLAN the port is assigned to\nwhen vmVlanType is set to static or dynamic.\nThis object is not instantiated if not applicable.\n\nThe value may be 0 if the port is not assigned\nto a VLAN.\n\nIf vmVlanType is static, the port is always\nassigned to a VLAN and the object may not be\nset to 0.\n\nIf vmVlanType is dynamic the object's value is\n0 if the port is currently not assigned to a VLAN.\nIn addition, the object may be set to 0 only.\"\"\",\n        }, # column\n        \"vmPortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the current VLAN status of the port.\nA status of inactive(1) indicates that a dynamic port\ndoes not yet have a VLAN assigned, or a port is \nassigned to a VLAN that is currently not active. A \nstatus of active(2) indicates that the currently \nassigned VLAN is active. A status of shutdown(3) \nindicates that the port has been disabled as a result\nof VQP shutdown response.\"\"\",\n        }, # column\n        \"vmVlans\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN(s) the port is assigned to when the\nport's vmVlanType is set to multiVlan.\nThis object is not instantiated if not applicable.\n\nThe port is always assigned to one or more VLANs\nand the object may not be set so that there are\nno vlans assigned.\n\nEach octet within the value of this object specifies a\nset of eight VLANs, with the first octet specifying\nVLAN id 1 through 8, the second octet specifying VLAN\nids 9 through 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nVLAN id, and the least significant bit represents the\nhighest numbered VLAN id.  Thus, each VLAN of the\nport is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that VLAN is included in the set of\nVLANs; the VLAN is not included if its bit has a\nvalue of '0'.\"\"\",\n        }, # column\n        \"vmVlans2k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN(s) the port is assigned to when the\nport's vmVlanType is set to multiVlan.\nThis object is not instantiated if not applicable.\n\nThe port is always assigned to one or more VLANs\nand the object may not be set so that there are\nno vlans assigned.\n\nEach octet within the value of this object specifies a\nset of eight VLANs, with the first octet specifying\nVLAN id 1024 through 1031, the second octet specifying \nVLAN ids 1032 through 1039, etc.  Within each octet, \nthe most significant bit represents the lowest \nnumbered VLAN id, and the least significant bit \nrepresents the highest numbered VLAN id.  Thus, each \nVLAN of the port is represented by a single bit within\nthe value of this object.  If that bit has a value of\n'1' then that VLAN is included in the set of\nVLANs; the VLAN is not included if its bit has a\nvalue of '0'.\"\"\",\n        }, # column\n        \"vmVlans3k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN(s) the port is assigned to when the\nport's vmVlanType is set to multiVlan.\nThis object is not instantiated if not applicable.\n\nThe port is always assigned to one or more VLANs\nand the object may not be set so that there are\nno vlans assigned.\n\nEach octet within the value of this object specifies a\nset of eight VLANs, with the first octet specifying\nVLAN id 2048 through 2055, the second octet specifying \nVLAN ids 2056 through 2063, etc.   Within each octet, \nthe most significant bit represents the lowest \nnumbered VLAN id, and the least significant bit \nrepresents the highest numbered VLAN id.  Thus, each\nVLAN of the port is represented by a single bit within\nthe value of this object.  If that bit has a value of\n'1' then that VLAN is included in the set of\nVLANs; the VLAN is not included if its bit has a\nvalue of '0'.\"\"\",\n        }, # column\n        \"vmVlans4k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN(s) the port is assigned to when the\nport's vmVlanType is set to multiVlan.\nThis object is not instantiated if not applicable.\n\nThe port is always assigned to one or more VLANs\nand the object may not be set so that there are\nno vlans assigned.\n\nEach octet within the value of this object specifies a\nset of eight VLANs, with the first octet specifying\nVLAN id 3072 through 3079, the second octet specifying \nVLAN ids 3040 through 3047, etc.   Within each octet, \nthe most significant bit represents the lowest \nnumbered VLAN id, and the least significant bit \nrepresents the highest numbered VLAN id.  Thus, each\nVLAN of the port is represented by a single bit within\nthe value of this object.  If that bit has a value of\n'1' then that VLAN is included in the set of\nVLANs; the VLAN is not included if its bit has a\nvalue of '0'.\"\"\",\n        }, # column\n        \"vmMembershipSummaryExtTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A summary of VLAN membership of non-trunk\nbridge ports. This table is used for \nretrieving VLAN membership information\nfor the device which supports dot1dBasePort \nwith value greater than 2048.\n\nA row is created for a VLAN and a particular\nbridge port range, where at least one port \nin the range is assigned to this VLAN.\n\nVLAN membership can only be modified via the\nvmMembershipTable.\"\"\",\n        }, # table\n        \"vmMembershipSummaryExtEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vmMembershipSummaryVlanIndex\",\n                \"vmMembershipPortRangeIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the\nvmMembershipSummaryExtTable.\"\"\",\n        }, # row\n        \"vmMembershipPortRangeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoPortListRange\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The bridge port range index of this row.\"\"\",\n        }, # column\n        \"vmMembershipSummaryExtPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-TC\", \"name\" : \"CiscoPortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of the device's member ports that belong\nto the VLAN. It has the VLAN membership information\nof up to 2k ports with the port number starting from\nthe information indicated in vmMembershipPortRangeIndex\nobject of the same row. For example, if the value\nof vmMembershipPortRangeIndex is 'twoKto4K', the\nport number indicated in this object starting from\n2049 and ending to 4096. \n\nA port number is the value of dot1dBasePort for\nthe port in the BRIDGE-MIB (RFC 1493).\"\"\",\n        }, # column\n        \"vmStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3\",\n        }, # node\n        \"vmVQPQueries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VQP requests sent by this device\nto all VMPS since last system re-initialization.\"\"\",\n        }, # scalar\n        \"vmVQPResponses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of VQP responses received by this device\nfrom all VMPS since last system re-initialization.\"\"\",\n        }, # scalar\n        \"vmVmpsChanges\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, the current VMPS was changed. The\ncurrent VMPS is changed whenever the VMPS fails to \nresponse after vmVmpsRetries of a VQP request.\"\"\",\n        }, # scalar\n        \"vmVQPShutdown\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, a VQP response indicates \n'shutdown'. A 'shutdown' response is a result of \nthe membership policy configured at a VMPS\nby the administrator.\"\"\",\n        }, # scalar\n        \"vmVQPDenied\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, a VQP response indicates \n'denied'. A 'denied' response is a result of \nthe membership policy configured at a VMPS\nby the administrator.\"\"\",\n        }, # scalar\n        \"vmVQPWrongDomain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, a VQP response indicates wrong \nmanagement domain. A wrong management domain \nresponse indicates that the VMPS used serves a \nmanagement domain that is different\nfrom the device's management domain.\"\"\",\n        }, # scalar\n        \"vmVQPWrongVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, a VQP response indicates wrong \nVQP version. A wrong VQP version response \nindicates that the VMPS used supports a VQP \nversion that is different from the device's \nVQP version.\"\"\",\n        }, # scalar\n        \"vmInsufficientResources\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times, since last system\nre-initialization, a VQP response indicates \ninsufficient resources. An insufficient resources \nresponse indicates that the VMPS used does not \nhave the required resources to verify the\nmembership assignment requested.\"\"\",\n        }, # scalar\n        \"vmStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.4\",\n        }, # node\n        \"vmNotificationsEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether the notifications/traps\ndefined in this MIB are enabled.\"\"\",\n        }, # scalar\n        \"vmVoiceVlan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.5\",\n        }, # node\n        \"vmVoiceVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for configuring the Voice VLAN-ID\nfor the ports. An entry will exist for each\ninterface which supports Voice Vlan feature.\"\"\",\n        }, # table\n        \"vmVoiceVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the vmVoiceVlanTable.\nOnly interfaces which support Voice Vlan feature\nare shown.\"\"\",\n        }, # row\n        \"vmVoiceVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Voice Vlan ID (VVID) to which this\nport belongs to.\n\n0    -    The CDP packets transmitting \n          through this port would contain\n          Appliance VLAN-ID TLV with value \n          of 0. VoIP and related packets \n          are expected to be sent and \n          received with VLAN-id=0 and an \n          802.1p priority. \n\n1..4094 - The CDP packets transmitting\n          through this port would contain\n          Appliance VLAN-ID TLV with N.\n          VoIP and related packets are\n          expected to be sent and received\n          with VLAN-id=N and an 802.1p\n          priority.\n\n4095  -   The CDP packets transmitting\n          through this port would contain\n          Appliance VLAN-ID TLV with value\n          of 4095. VoIP and related packets\n          are expected to be sent and \n          received untagged without an \n          802.1p priority.\n\n4096  -   The CDP packets transmitting \n          through this port would not \n          include Appliance VLAN-ID TLV; \n          or, if the VVID is not supported \n          on the port, this MIB object will\n          not be configurable and will \n          return 4096.\"\"\",\n        }, # column\n        \"vmVoiceVlanCdpVerifyEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or Disable the feature of CDP message\nverification of voice VLANs.\n\ntrue   - The voice VLAN vmVoiceVlan is enabled \n         only after CDP messages are received \n         from the IP phone.\n\nfalse -  The voice VLAN vmVoiceVlan is enabled\n         as soon as the IP phone interface is\n         up. There is no verification needed \n         from CDP messages from the IP phone.\"\"\",\n        }, # column\n        \"vmNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.2\",\n        }, # node\n        \"vmNotificationsPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.2.0\",\n        }, # node\n        \"vmMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3\",\n        }, # node\n        \"vmMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1\",\n        }, # node\n        \"vmMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"vmVmpsChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vmVmpsIpAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A VMPS change notification is generated whenever\nvmVmpsChanges is incremented. The IP address\nof the new VMPS is sent.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"vmMembershipGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vmMembershipSummaryMemberPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmPortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for displaying and\nconfiguring VLAN membership.\"\"\",\n        }, # group\n        \"vmVQPClientGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVmpsVQPVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsRetries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsReconfirm\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsReconfirmInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsReconfirmResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsPrimary\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPQueries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVmpsChanges\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPDenied\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPWrongDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPWrongVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmInsufficientResources\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for the managing a VQP\nclient.\"\"\",\n        }, # group\n        \"vmVQPNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVmpsChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notification group for a VQP client.\"\"\",\n        }, # group\n        \"vmStatusGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmNotificationsEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for conveying general\nstatus information.\"\"\",\n        }, # group\n        \"vmMembershipGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.5\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vmMembershipSummaryMemberPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmPortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for displaying and\nconfiguring VLAN membership.\"\"\",\n        }, # group\n        \"vm4kVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVlans2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlans3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlans4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing multiVlan\ninformation for VLANS with VlanIndex from \n1024 to 4095 which are assigned to one port.\"\"\",\n        }, # group\n        \"vmVoiceVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVoiceVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nof Voice Vlan feature.\"\"\",\n        }, # group\n        \"vm1kVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing multiVlan\ninformation for VLANS with VlanIndex from \n0 to 1023 which are assigned to one port.\"\"\",\n        }, # group\n        \"vmMembershipGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmMembershipSummaryMember2kPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVlanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmPortStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for displaying and\nconfiguring VLAN membership.\"\"\",\n        }, # group\n        \"vmVoiceVlanExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmVoiceVlanCdpVerifyEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing the\ninformation of CDP verification \nof Voice Vlan feature.\"\"\",\n        }, # group\n        \"vmMembershipExtGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vmMembershipSummaryExtPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing\ninformation for VLAN membership with \nbridge port ID greater than 2048.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"vmMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.1\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The   compliance   statement for   entities    which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"vmMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The   compliance   statement for   entities    which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"vmMIBCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The   compliance   statement for   entities    which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vm4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the range of VlanIndex\nbetween 1024 and 4095.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"vmMIBCompliance4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The   compliance   statement for   entities    which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup3\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vm1kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the multiVlan\nmembership.\"\"\",\n                },\n                \"vm4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the range of VlanIndex\nbetween 1024 and 4095 and multiVlan\nmembership.\"\"\",\n                },\n                \"vmStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the \ntraps/notifications defined in this\nMIB.\"\"\",\n                },\n                \"vmVoiceVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the Voice VLAN\nfeature.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"vmVlanType\" : {\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"static\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required. Only static(1)\nis required to be implemented.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vmMIBCompliance5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup3\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vm1kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the multiVlan\nmembership.\"\"\",\n                },\n                \"vm4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the range of VlanIndex\nbetween 1024 and 4095 and multiVlan\nmembership.\"\"\",\n                },\n                \"vmStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the\ntraps/notifications defined in this\nMIB.\"\"\",\n                },\n                \"vmVoiceVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the Voice VLAN\nfeature.\"\"\",\n                },\n                \"vmVoiceVlanExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the CDP only\nverification of Voice VLAN feature.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"vmVlanType\" : {\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"static\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required. Only static(1)\nis required to be implemented.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vmMIBCompliance6\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.68.3.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entities which\nimplement the VLANs.\"\"\",\n            \"requires\" : {\n                \"vmMembershipGroup3\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\"\n                },\n                \"vmVQPClientGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vmVQPNotificationsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"A VQP client must implement this group.\"\"\",\n                },\n                \"vm1kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the multiVlan\nmembership.\"\"\",\n                },\n                \"vm4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the range of VlanIndex\nbetween 1024 and 4095 and multiVlan\nmembership.\"\"\",\n                },\n                \"vmStatusGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the\ntraps/notifications defined in this\nMIB.\"\"\",\n                },\n                \"vmVoiceVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the Voice VLAN\nfeature.\"\"\",\n                },\n                \"vmVoiceVlanExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the CDP only\nverification of Voice VLAN feature.\"\"\",\n                },\n                \"vmMembershipExtGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the\nentities which support the VLAN \nmembership feature with bridge port \nID greater than 2048.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"vmVlanType\" : {\n                    \"module\" : \"CISCO-VLAN-MEMBERSHIP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"static\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required. Only static(1)\nis required to be implemented.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CISCO-VTP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python CISCO-VTP-MIB\n\nFILENAME = \"CISCO-VTP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"CISCO-VTP-MIB\",\n\n    \"CISCO-VTP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Cisco Systems, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"Cisco Systems\nCustomer Service\n\nPostal: 170 W Tasman Drive\nSan Jose, CA  95134\nUSA\n\nTel: +1 800 553-NETS\n\nE-mail: cs-wbu@cisco.com, \n        cs-lan-switch-snmp@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for entities implementing the VTP\nprotocol and Vlan management.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2006-02-17 00:00\",\n                \"description\" :\n                    \"\"\"Removed the OwnerString TEXTUAL-CONVENTION and\nimported the same from RMON-MIB.\"\"\",\n            },\n            {\n                \"date\" : \"2004-02-11 00:00\",\n                \"description\" :\n                    \"\"\"Added 'dynamicGvrp(4)' for the TC VlanTypeExt.\"\"\",\n            },\n            {\n                \"date\" : \"2003-11-21 00:00\",\n                \"description\" :\n                    \"\"\"Add vtpInternalVlanGrp to configure internal \nVLANs' allocation policy and show the owner \napplication names.\"\"\",\n            },\n            {\n                \"date\" : \"2003-08-08 00:00\",\n                \"description\" :\n                    \"\"\"Split vtpConfigNotificationsGroup into two groups:\nvtpConfigNotificationsGroupRev1 and \nvtpConfigNotificationsGroup5. Write a new compliance\nstatement to list vtpConfigNotificationsGroupRev1 in\ninstead of vtpConfigNotificationsGroup in the \nMANDATORY-GROUPS.\"\"\",\n            },\n            {\n                \"date\" : \"2003-07-11 00:00\",\n                \"description\" :\n                    \"\"\"Modify the description of the TC VlanIndex.\"\"\",\n            },\n            {\n                \"date\" : \"2003-04-16 00:00\",\n                \"description\" :\n                    \"\"\"Add support for VTP version 3 features.\n-- Add enumerators and modify the 'DESCRIPTION' of 6 \n   existing objects: \n   vtpVersion, managementDomainLocalMode,\n   managementDomainConfigRevNumber, \n   managementDomainLastUpdater,\n   managementDomainLastChange,  \n   managementDomainVersionInUse.\n-- Add 3 new groups: vtpAuthGroup, \n   vtpDiscoverGroup, vtpDatabaseGroup.\"\"\",\n            },\n            {\n                \"date\" : \"2002-04-10 00:00\",\n                \"description\" :\n                    \"\"\"-- Add 4 new notifications/traps vtpLocalModeChanged, \nvtpVersionInUseChanged, vtpVlanCreated and \nvtpVlanDeleted. \n-- Add 2 new objects vtpVlanCreatedNotifEnabled and \nvtpVlanDeletedNotifEnabled to control the\ngeneration of vtpVlanCreated and vtpVlanDeleted.\n-- Use vtpNotificationsEnabled to control the\ngeneration of vtpLocalModeChanged and\nvtpVersionInUseChanged by grouping them in a\nnew group vtpConfigNotificationsGroup2.  \n-- Deprecate the object vlanTrunkPortsDot1qTag and\nits related group. \"\"\",\n            },\n            {\n                \"date\" : \"2002-02-28 00:00\",\n                \"description\" :\n                    \"\"\"Deprecate the object, vlanTrunkPortDot1qTunnel.\"\"\",\n            },\n            {\n                \"date\" : \"2001-08-03 00:00\",\n                \"description\" :\n                    \"\"\"Add a new off(4) mode to managementDomainLocalMode.\"\"\",\n            },\n            {\n                \"date\" : \"2001-02-26 00:00\",\n                \"description\" :\n                    \"\"\"Deprecate read-only object vtpVlanEditTypeExt and\nadd a new read-create object vtpVlanEditTypeExt2.\nEnable Notification groups.\"\"\",\n            },\n            {\n                \"date\" : \"2001-02-12 00:00\",\n                \"description\" :\n                    \"\"\"Added Remote SPAN (RSPAN) VLAN feature, VLAN \nmanagement features without supporting VTP protocol\nand a new object to handle one-VLAN-editing.\"\"\",\n            },\n            {\n                \"date\" : \"2000-09-19 00:00\",\n                \"description\" :\n                    \"\"\"Added the mapping from VLAN ID to its corresponding\nifIndex\"\"\",\n            },\n            {\n                \"date\" : \"2000-04-10 00:00\",\n                \"description\" :\n                    \"\"\"Added 4k VLAN editing and Dot1qTunnel support\"\"\",\n            },\n            {\n                \"date\" : \"2000-01-06 00:00\",\n                \"description\" :\n                    \"\"\"Added 4k VLAN support\"\"\",\n            },\n            {\n                \"date\" : \"1999-02-25 11:30\",\n                \"description\" :\n                    \"\"\"Added import of NOTIFICATION-GROUP\"\"\",\n            },\n            {\n                \"date\" : \"1999-01-05 11:30\",\n                \"description\" :\n                    \"\"\"Added support for encapsulation type notApplicable\"\"\",\n            },\n            {\n                \"date\" : \"1998-05-19 11:30\",\n                \"description\" :\n                    \"\"\"Added support for encapsulation type negotiation\"\"\",\n            },\n            {\n                \"date\" : \"1997-08-08 11:38\",\n                \"description\" :\n                    \"\"\"Added Backup CRF object\"\"\",\n            },\n            {\n                \"date\" : \"1997-05-09 11:30\",\n                \"description\" :\n                    \"\"\"Added ARE and STE hop counts.\"\"\",\n            },\n            {\n                \"date\" : \"1997-02-24 11:15\",\n                \"description\" :\n                    \"\"\"Added support for turning on VTP for Trunk cards.\"\"\",\n            },\n            {\n                \"date\" : \"1997-01-27 17:30\",\n                \"description\" :\n                    \"\"\"Added support for version 2 features.\"\"\",\n            },\n            {\n                \"date\" : \"1996-09-16 12:30\",\n                \"description\" :\n                    \"\"\"Updated the Token-Ring support.\"\"\",\n            },\n            {\n                \"date\" : \"1996-07-17 12:30\",\n                \"description\" :\n                    \"\"\"Updated to include objects in support of VTP pruning.\"\"\",\n            },\n            {\n                \"date\" : \"1996-01-18 18:20\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB module.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ciscoVtpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n        {\"module\" : \"RMON-MIB\", \"name\" : \"OwnerString\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"ciscoMgmt\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n    ),\n\n    \"typedefs\" : {\n        \"VlanIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"4095\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"4095\"\n            },\n            \"description\" :\n                \"\"\"The VLAN-id of a VLAN on ISL or 802.1q trunks.\n\nModification of default parameters is allowed.\nImplementations are allowed to restrict\nthe range of VLANs.\n\nFor entities support up to 1024 VLANS.\nVLANs above 1000 are reserved for default VLANs and\nfuture use. Modification of default parameters is\nallowed. Creation or deletion of VLANs above 1000 is not\nallowed.\n\nFor a new object which needs the vlan-id of a VLAN as\nits SYNTAX, it is suggested to import VlanIndex from\nQ-BRIDGE-MIB instead of importing this TC here in \nCISCO-VTP-MIB.\"\"\",\n        },\n        \"ManagementDomainIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"An arbitrary integer-value to uniquely identify a\nmanagement domain on the local system.\"\"\",\n        },\n        \"VlanType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ethernet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"fddi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"tokenRing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"fddiNet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"trNet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"deprecated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"The type of a VLAN.\n\nNote that the 'ethernet' type, is used for any ethernet or\n802.3 VLAN, including an ATM Ethernet ELAN; and the\n'tokenRing' ('trCrf') type is used for each VLAN\nrepresenting a single logical 802.5 ring including an ATM\nToken-Ring ELAN.\n\nThe 'trCrf' type is used for token ring VLANs made up of\n(at most) one transparently bridged LAN segment.\n\nThe 'trBrf' type is used for VLANs which represent the\nscope of many 'trCrf' VLANs all connected together via\nsource route bridging.  The token ring 'trBrf' can be said\nto represent the bridged broadcast domain.\"\"\",\n        },\n        \"VlanTypeExt\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"vtpmanageable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"internal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"reserved\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"rspan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"dynamicGvrp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The additional type information of VLAN.\nvtpmanageable(0)    An user defined VLAN which is \n                    manageable through VTP protocol.\n                    The value of this bit cannot be \n                    changed.\ninternal(1)         An internal VLAN created by the device.\n                    Internal VLANs cannot be created or\n                    deleted. The value of this bit cannot\n                    be changed.\nreserved(2)         A VLAN reserved by the device.\n                    Reserved VLANs cannot be created or\n                    deleted. The value of this bit cannot\n                    be changed.\nrspan(3)            A VLAN created to exclusively carry\n                    the traffic for a Remote Switched\n                    Port Analyzer (RSPAN). This bit can\n                    only be set or cleared during the\n                    VLAN creation. Once the VLAN is\n                    created, the value of this bit cannot\n                    be modified.\ndynamicGvrp(4)      A VLAN dynamically created by GVRP\n                    (GARP VLAN Registration Protocol)\n                    propagation. The value of this bit \n                    cannot be changed.  \"\"\",\n            \"reference>\" :\n                \"\"\"RFC2674.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ciscoVtpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46\",\n            \"status\" : \"current\",\n        }, # node\n        \"vtpMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1\",\n        }, # node\n        \"vtpStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1\",\n        }, # node\n        \"vtpVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The version of VTP in use on the local system.  A device\nwill report its version capability and not any particular\nversion in use on the device. If the device does not support\nvtp, the version is none(3).\"\"\",\n        }, # scalar\n        \"vtpMaxVlanStorage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1023\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1023\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An estimate of the maximum number of VLANs about which the\nlocal system can recover complete VTP information after a\nreboot.  If the number of defined VLANs is greater than this\nvalue, then the system can not act as a VTP Server. For a\ndevice which has no means to calculate the estimated number,\nthis value is -1.\"\"\",\n        }, # scalar\n        \"vtpNotificationsEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether the notifications/traps defined by\nthe vtpConfigNotificationsGroup and \nvtpConfigNotificationsGroup2 are enabled.\"\"\",\n        }, # scalar\n        \"vtpVlanCreatedNotifEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether the notification should \nbe generated when a VLAN is created. \n\nIf the value of this object is 'true' then the\nvtpVlanCreated notification will be generated.\n\nIf the value of this object is 'false' then the\nvtpVlanCreated notification will not be generated.\"\"\",\n        }, # scalar\n        \"vtpVlanDeletedNotifEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether the notification should  \nbe generated when a VLAN is deleted.  \n\nIf the value of this object is 'true' then the\nvtpVlanDeleted notification will be generated.\n\nIf the value of this object is 'false' then the\nvtpVlanDeleted notification will not be generated.\"\"\",\n        }, # scalar\n        \"vlanManagementDomains\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2\",\n        }, # node\n        \"managementDomainTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing information on the management domains\nin which the local system is participating.  Devices which\nsupport only one management domain will support just one row\nin this table, and will not let it be deleted nor let other\nrows be created.  Devices which support multiple management\ndomains will allow rows to be created and deleted, but will\nnot allow the last row to be deleted. If the device does \nnot support VTP, the table is read-only.\"\"\",\n        }, # table\n        \"managementDomainEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the status of one management domain.\"\"\",\n        }, # row\n        \"managementDomainIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"ManagementDomainIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An arbitrary value to uniquely identify the management\ndomain on the local system.\"\"\",\n        }, # column\n        \"managementDomainName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The management name of a domain in which the local system\nis participating.  The zero-length name corresponds to the\n'no management-domain' state which is the initial value at\ninstallation-time if not configured otherwise.  Note that\nthe zero-length name does not correspond to an operational\nmanagement domain, and a device does not send VTP\nadvertisements while in the 'no management-domain' state.  A\ndevice leaves the 'no management-domain' state when it\nobtains a management-domain name, either through\nconfiguration or through inheriting the management-domain\nname from a received VTP advertisement.\n\nWhen the value of an existing instance of this object is\nmodified by network management, the local system should re-\ninitialize its VLAN information (for the given management\ndomain) as if it had just been configured with a management\ndomain name at installation time.\"\"\",\n        }, # column\n        \"managementDomainLocalMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"server\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"transparent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The local VTP mode in this management domain when\nmanagementDomainVersionInUse is version1(1) or\nversion2(2).\n\nIf managementDomainVersionInUse is version3(4), this \nobject has the same value with vtpDatabaseLocalMode \nof VLAN database type.\n\n- 'client' indicates that the local system is acting\n  as a VTP client.\n\n- 'server' indicates that the local system is acting\n  as a VTP server.\n\n- 'transparent' indicates that the local system does\n  not generate or listen to VTP messages, but forwards\n  messages. This mode can also be set by the device\n  itself when the amount of VLAN information is too\n  large for it to hold in DRAM.\n\n- 'off' indicates that the local system does not\n  generate, listen to or forward any VTP messages.\"\"\",\n        }, # column\n        \"managementDomainConfigRevNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current Configuration Revision Number as known by \nthe local device for this management domain when \nmanagementDomainVersionInUse is version1(1) or \nversion2(2).\n\nIf managementDomainVersionInUse is version3(4), this \nobject has the same value with vtpDatabaseRevisionNumber \nof VLAN database type.\n\nThis value is updated (if necessary) whenever a VTP\nadvertisement is received or generated. When in the\n'no management-domain' state, this value is 0.\"\"\",\n        }, # column\n        \"managementDomainLastUpdater\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP-address (or one of them) of the VTP Server which\nlast updated the Configuration Revision Number, as indicated\nin the most recently received VTP advertisement for this\nmanagement domain, when managementDomainVersionInUse is\nversion1(1) or version2(2). \n\nIf managementDomainVersionInUse is version3(4), this object\nhas the value of 0.0.0.0.\n \nBefore an advertisement has been received, this value is\n0.0.0.0.\"\"\",\n        }, # column\n        \"managementDomainLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time at which the Configuration Revision Number was\n(last) increased to its current value, as indicated in the\nmost recently received VTP advertisement for this management\ndomain when managementDomainVersionInUse is not version3(4)\nor in the most recently received VTP VLAN database \nadvertisement for this management domain when \nmanagementDomainVersionInUse is version3(4).\n\nThe value 0x0000010100000000 indicates that the device which\nlast increased the Configuration Revision Number had no idea\nof the date/time, or that no advertisement has been\nreceived.\"\"\",\n        }, # column\n        \"managementDomainRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\"\"\",\n        }, # column\n        \"managementDomainTftpServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of a TFTP Server in/from which VTP VLAN\ninformation for this management domain is to be\nstored/retrieved.  If the information is being locally\nstored in NVRAM, this object should take the value 0.0.0.0.\"\"\",\n        }, # column\n        \"managementDomainTftpPathname\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The complete pathname of the file at the TFTP Server\nidentified by the value of managementDomainTftpServer\nin/from which VTP VLAN information for this management\ndomain is to be stored/retrieved.  If the value of\ncorresponding instance of managementDomainTftpServer is\n0.0.0.0, the value of this object is ignored.\"\"\",\n        }, # column\n        \"managementDomainPruningState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An indication of whether VTP pruning is enabled or disabled\nin this managament domain.  This value can only be modified\nby local/network management when the value of the\ncorresponding instance of managementDomainLocalMode is\n'server'.\"\"\",\n        }, # column\n        \"managementDomainVersionInUse\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"version1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"version2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"version3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current version of the VTP that is in use by the\ndesignated management domain. \n\nThis object can be set to none(3) only when \nvtpVersion is none(3).\"\"\",\n        }, # column\n        \"vlanInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3\",\n        }, # node\n        \"vtpVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information on the VLANs which\ncurrently exist.  The creation, deletion or modification of\nentries occurs through: a) the receipt of VTP messages in\nVTP Clients and in VTP Servers, or, b) in VTP Servers (or in\nVTP transparent mode), through management operations acting\nupon entries in the vtpVlanEditTable and then issuing an\n'apply' command via the vtpVlanEditOperation object.\"\"\",\n        }, # table\n        \"vtpVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n                \"vtpVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about one current VLAN.  The\nmanagementDomainIndex value in the INDEX clause indicates\nwhich management domain the VLAN is in.\"\"\",\n        }, # row\n        \"vtpVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN-id of this VLAN on ISL or 802.1q trunks.\"\"\",\n        }, # column\n        \"vtpVlanState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"operational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"suspended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mtuTooBigForDevice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mtuTooBigForTrunk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of this VLAN.\n\nThe state 'mtuTooBigForDevice' indicates that this device\ncannot participate in this VLAN because the VLAN's MTU is\nlarger than the device can support.\n\nThe state 'mtuTooBigForTrunk' indicates that while this\nVLAN's MTU is supported by this device, it is too large for\none or more of the device's trunk ports.\"\"\",\n        }, # column\n        \"vtpVlanType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of this VLAN.  This name is used as the ELAN-name\nfor an ATM LAN-Emulation segment of this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1500\",\n                        \"max\" : \"18190\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1500\",\n                        \"max\" : \"18190\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MTU size on this VLAN, defined as the size of largest\nMAC-layer (information field portion of the) data frame\nwhich can be transmitted on the VLAN.\"\"\",\n        }, # column\n        \"vtpVlanDot10Said\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the 802.10 SAID field for this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanRingNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ring number of this VLAN.  This object is only\ninstantiated when the value of the corresponding instance of\nvtpVlanType has a value of 'fddi' or 'tokenRing' and Source\nRouting is in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanBridgeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bridge number of the VTP-capable switches for this\nVLAN.  This object is only instantiated for VLANs that are\ninvolved with emulating token ring segments.\"\"\",\n        }, # column\n        \"vtpVlanStpType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ieee\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ibm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"hybrid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The type of the Spanning Tree Protocol (STP) running on\nthis VLAN.  This object is only instanciated when the\nvalue of the corresponding instance of vtpVlanType has a\nvalue of 'fddiNet' or 'trNet'.\n\nThe value returned by this object depends upon the value\nof the corresponding instance of vtpVlanEditStpType.\n\n- 'ieee' indicates IEEE STP is running exclusively.\n\n- 'ibm' indicates IBM STP is running exclusively.\n\n- 'hybrid' indicates a STP that allows a combination of\n  IEEE and IBM is running.\n\nThe 'hybrid' STP type results from tokenRing/fddi VLANs\nthat are children of this trNet/fddiNet parent VLAN being\nconfigured in a combination of SRT and SRB\nvtpVlanBridgeTypes while the instance of\nvtpVlanEditStpType that corresponds to this object is set\nto 'auto'.\"\"\",\n        }, # column\n        \"vtpVlanParentVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The parent VLAN for this VLAN.  This object is only\ninstantiated when the value of the corresponding instance of\nvtpVlanType has a value of 'fddi' or 'tokenRing' and Source\nRouting is in use on this VLAN.  The parent VLAN must have \na vtpVlanType value of fddiNet(4) or trNet(5), \nrespectively.\"\"\",\n        }, # column\n        \"vtpVlanTranslationalVlan1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A VLAN to which this VLAN is being translational-bridged.\nIf this value and the corresponding instance of\nvtpVlanTranslationalVlan2 are both zero, then this VLAN is\nnot being translational-bridged.\"\"\",\n        }, # column\n        \"vtpVlanTranslationalVlan2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Another VLAN, i.e., other than that indicated by\nvtpVlanTranslationalVlan1, to which this VLAN is being\ntranslational-bridged.  If this value and the corresponding\ninstance of vtpVlanTranslationalVlan1 are both zero, then\nthis VLAN is not being translational-bridged.\"\"\",\n        }, # column\n        \"vtpVlanBridgeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"srt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"srb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the Source Route bridging mode in use on this \nVLAN.  This object is only instantiated when the value of \nthe corresponding instance of vtpVlanType has a value of \nfddi(2) or tokenRing(3) and Source Routing is in use on\nthis VLAN.\"\"\",\n        }, # column\n        \"vtpVlanAreHopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of bridge hops allowed in\nAll Routes Explorer frames on this VLAN.  This\nobject is only instantiated when the value of the\ncorresponding instance of vtpVlanType has a value of fddi(2)\nor tokenRing(3) and Source Routing is in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanSteHopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of bridge hops allowed in\nSpanning Tree Explorer frames on this VLAN.  This\nobject is only instantiated when the value of the\ncorresponding instance of vtpVlanType has a value of fddi(2)\nor tokenRing(3) and Source Routing is in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanIsCRFBackup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" True if this VLAN is of type trCrf and also is acting as\na backup trCrf for the ISL distributed BRF\"\"\",\n        }, # column\n        \"vtpVlanTypeExt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanTypeExt\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The additional type information of this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the ifIndex corresponding to this VLAN ID. \nIf the VLAN ID does not have its corresponding interface, \nthis object has the value of zero.\"\"\",\n        }, # column\n        \"internalVlanInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.2\",\n        }, # node\n        \"vtpInternalVlanAllocPolicy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ascending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"descending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The internal VLAN allocation policy.\n\n'ascending'  - internal VLANs are allocated\n               starting from a lowwer VLAN ID and \n               upwards.\n'descending' - internal VLANs are allocated\n               starting from a higher VLAN ID and\n               downwards.\"\"\",\n        }, # scalar\n        \"vtpInternalVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table sparsely augments the \nvtpVlanTable (i.e., every row in this \ntable corresponds to a row in the \nvtpVlanTable but not necessarily \nvice versa).\n\nA vtpInternalVlanTable entry contains \ninformation on an existing internal \nVLAN with the bit 'internal' turned on \nfor the object vtpVlanTypeExt. It is\ninternally created by the device for \na specific application program and \nhence owned by the application.\nIt cannot be modified or deleted through \nmanagement operations acting upon entries \nin the vtpVlanEditTable.\"\"\",\n        }, # table\n        \"vtpInternalVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n                \"vtpVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about one current internal \nVLAN.\"\"\",\n        }, # row\n        \"vtpInternalVlanOwner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.3.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The program name of the internal VLAN's \nowner application. This internal VLAN\nis allocated by the device specifically\nfor this application and no one else\ncould create, modify or delete this \nVLAN.\"\"\",\n        }, # column\n        \"vlanEdit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4\",\n        }, # node\n        \"vtpEditControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table provides the means to control the editing of the\nVLANs for a particular management domain.  Each and every\nentry in this table augments its corresponding entry in the\nmanagementDomainTable; thus, an entry in this table is\ncreated/deleted only as a by-product of creating/deleting an\nentry in the managementDomainTable.\"\"\",\n        }, # table\n        \"vtpEditControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"CISCO-VTP-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"managementDomainEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Control information for editing the VLANs in one management\ndomain.\"\"\",\n        }, # row\n        \"vtpVlanEditOperation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"copy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"apply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"release\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"restartTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object always has the value 'none' when read.  When\nwritten, each value causes the appropriate action:\n\n 'copy' - causes the creation of rows in the\nvtpVlanEditTable exactly corresponding to the current global\nVLAN information for this management domain.  If the Edit\nBuffer (for this management domain) is not currently empty,\na copy operation fails.  A successful copy operation starts\nthe deadman-timer.\n\n 'apply' - first performs a consistent check on the the\nmodified information contained in the Edit Buffer, and if\nconsistent, then tries to instanciate the modified\ninformation as the new global VLAN information.  Note that\nan empty Edit Buffer (for the management domain) would\nalways result in an inconsistency since the default VLANs\nare required to be present.\n\n 'release' - flushes the Edit Buffer (for this management\ndomain), clears the Owner information, and aborts the\ndeadman-timer.  A release is generated automatically if the\ndeadman-timer ever expires.\n\n 'restartTimer' - restarts the deadman-timer.\n\n 'none' - no operation is performed.\"\"\",\n        }, # column\n        \"vtpVlanApplyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"succeeded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"configNumberError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inconsistentEdit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"tooBig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"localNVStoreFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"remoteNVStoreFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"editBufferEmpty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"someOtherError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"notPrimaryServer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of an 'apply' operation to instanciate\nthe Edit Buffer as the new global VLAN information (for this\nmanagement domain).  If no apply is currently active, the\nstatus represented is that of the most recently completed\napply.  The possible values are:\n\n   inProgress - 'apply' operation in progress;\n\n   succeeded - the 'apply' was successful (this value is\n          also used when no apply has been invoked since the\n          last time the local system restarted);\n\n   configNumberError - the apply failed because the value of\n          vtpVlanEditConfigRevNumber was less or equal to\n          the value of current value of \n          managementDomainConfigRevNumber;\n\n   inconsistentEdit - the apply failed because the modified\n          information was not self-consistent;\n\n   tooBig - the apply failed because the modified\n          information was too large to fit in this VTP\n          Server's non-volatile storage location;\n\n   localNVStoreFail - the apply failed in trying to store\n          the new information in a local non-volatile\n          storage location;\n\n   remoteNVStoreFail - the apply failed in trying to store\n          the new information in a remote non-volatile\n          storage location;\n\n   editBufferEmpty - the apply failed because the Edit\n          Buffer was empty (for this management domain).\n\n   someOtherError - the apply failed for some other reason\n          (e.g., insufficient memory).\n\n   notPrimaryServer - the apply failed because the local \n          device is not a VTP primary server for VLAN \n          database type when managementDomainVersionInUse\n          is version3(4). \"\"\",\n        }, # column\n        \"vtpVlanEditBufferOwner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON-MIB\", \"name\" : \"OwnerString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The management station which is currently using the Edit\nBuffer for this management domain.  When the Edit Buffer for\na management domain is not currently in use, the value of\nthis object is the zero-length string.  Note that it is also\nthe zero-length string if a manager fails to set this object\nwhen invoking a copy operation.\"\"\",\n        }, # column\n        \"vtpVlanEditConfigRevNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Configuration Revision Number to be used for the next\napply operation.  This value is initialized (by the agent)\non a copy operation to be one greater than the value of\nmanagementDomainConfigRevNumber. On an apply, if the \nnumber is less or equal to the value of \nmanagementDomainConfigRevNumber, then the apply fails.\nThe value can be modified (increased) by network management\nbefore an apply to ensure that an apply does not fail for \nthis reason.\n\nThis object is used to allow management control over whether\na configuration revision received via a VTP advertisement\nafter a copy operation but before the succeeding apply\noperation is lost by being overwritten by the (local) edit\noperation.  By default, the apply operation will fail in\nthis situation.  By increasing this object's value after the\ncopy but before the apply, management can control whether\nthe apply is to succeed (with the update via VTP\nadvertisement being lost).\"\"\",\n        }, # column\n        \"vtpVlanEditModifiedVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VLAN-id of the modified VLAN in the Edit Buffer.\nIf the object has the value of zero, any VLAN can \nbe edited. If the value of the object is not zero,\nonly this VLAN can be edited.\n\nThe object's value is reset to zero after a successful\n'apply' operation or a 'release' operation. \n\nThis object is only supported for devices which allow \nonly one VLAN editing for each 'apply' operation. For\ndevices which allow multiple VLAN editing for each\n'apply' operation, this object is not supported.\"\"\",\n        }, # column\n        \"vtpVlanEditTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table which contains the information in the Edit\nBuffers, one Edit Buffer per management domain.  The\ninformation for a particular management domain is\ninitialized, by a 'copy' operation, to be the current global\nVLAN information for that management domain.  After\ninitialization, editing can be performed to add VLANs,\ndelete VLANs, or modify their global parameters.  The\ninformation as modified through editing is local to this\nEdit Buffer.  An apply operation using the\nvtpVlanEditOperation object is necessary to instanciate the\nmodified information as the new global VLAN information for\nthat management domain.\n\nTo use the Edit Buffer, a manager acts as follows:\n\n1. ensures the Edit Buffer for a management domain is empty,\ni.e., there are no rows in this table for this management\ndomain.\n\n2. issues a SNMP set operation which sets\nvtpVlanEditOperation to 'copy', and vtpVlanEditBufferOwner\nto its own identifier (e.g., its own IP address).\n\n3. if this set operation is successful, proceeds to edit the\ninformation in the vtpVlanEditTable.\n\n4. if and when the edited information is to be instantiated,\nissues a SNMP set operation which sets vtpVlanEditOperation\nto 'apply'.\n\n5. issues retrieval requests to obtain the value of\nvtpVlanApplyStatus, until the result of the apply is\ndetermined.\n\n6. releases the Edit Buffer by issuing a SNMP set operation\nwhich sets vtpVlanEditOperation to 'release'.\n\nNote that the information contained in this table is not\nsaved across agent reboots.\"\"\",\n        }, # table\n        \"vtpVlanEditEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n                \"vtpVlanEditIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about one VLAN in the Edit Buffer for a\nparticular management domain.\"\"\",\n        }, # row\n        \"vtpVlanEditIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN-id which this VLAN would have on ISL or\n802.1q trunks.\"\"\",\n        }, # column\n        \"vtpVlanEditState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"operational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"suspended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"operational\",\n            \"description\" :\n                \"\"\"The state which this VLAN would have.\"\"\",\n        }, # column\n        \"vtpVlanEditType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"ethernet\",\n            \"description\" :\n                \"\"\"The type which this VLAN would have.\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name which this VLAN would have.  This name would be\nused as the ELAN-name for an ATM LAN-Emulation segment of\nthis VLAN.\n\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1500\",\n                        \"max\" : \"18190\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1500\",\n                        \"max\" : \"18190\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1500\",\n            \"description\" :\n                \"\"\"The MTU size which this VLAN would have, defined as the\nsize of largest MAC-layer (information field portion of the)\ndata frame which can be transmitted on the VLAN.\n\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditDot10Said\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the 802.10 SAID field which would be used for\nthis VLAN.\n\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditRingNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The ring number which would be used for this VLAN.  This\nobject is only instantiated when the value of the\ncorresponding instance of vtpVlanEditType has a value of\n'fddi' or 'tokenRing' and Source Routing is in use on \nthis VLAN.\"\"\",\n        }, # column\n        \"vtpVlanEditBridgeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The bridge number of the VTP-capable switches which would\nbe used for this VLAN.  This object is only instantiated\nwhen the value of the corresponding instance of\nvtpVlanEditType has a value of fddiNet(4) or trNet(5).\"\"\",\n        }, # column\n        \"vtpVlanEditStpType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ieee\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ibm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of the Spanning Tree Protocol which would be\nrunning on this VLAN.  This object is only instantiated\nwhen the value of the corresponding instance of\nvtpVlanEditType has a value of fddiNet(4) or trNet(5).\n\nIf 'ieee' is selected, the STP that runs will be IEEE.\n\nIf 'ibm' is selected, the STP that runs will be IBM.\n\nIf 'auto' is selected, the STP that runs will be\ndependant on the values of vtpVlanEditBridgeType for all\nchildren tokenRing/fddi type VLANs.  This will result in\na 'hybrid' STP (see vtpVlanStpType).\"\"\",\n        }, # column\n        \"vtpVlanEditParentVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN index of the VLAN which would be the parent for\nthis VLAN.  This object is only instantiated when the value\nof the corresponding instance of vtpVlanEditType has a value\nof 'fddi' or 'tokenRing' and Source Routing is in use on\nthis VLAN.  The parent VLAN must have a vtpVlanEditType \nvalue of fddiNet(4) or trNet(5), respectively.\"\"\",\n        }, # column\n        \"vtpVlanEditRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this row.  Any and all columnar objects in an\nexisting row can be modified irrespective of the status of\nthe row.\n\nA row is not qualified for activation until instances of at\nleast its vtpVlanEditType, vtpVlanEditName and\nvtpVlanEditDot10Said columns have appropriate values.\n\nThe management station should endeavor to make all rows\nconsistent in the table before 'apply'ing the buffer.  An\ninconsistent entry in the table will cause the entire\nbuffer to be rejected with the vtpVlanApplyStatus object\nset to the appropriate error value.\"\"\",\n        }, # column\n        \"vtpVlanEditTranslationalVlan1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"A VLAN to which this VLAN would be translational-bridged.\nIf this value and the corresponding instance of\nvtpVlanTranslationalVlan2 are both zero, then this VLAN\nwould not be translational-bridged.\n\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditTranslationalVlan2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Another VLAN, i.e., other than that indicated by\nvtpVlanEditTranslationalVlan1, to which this VLAN would be\ntranslational-bridged.  If this value and the corresponding\ninstance of vtpVlanTranslationalVlan1 are both zero, then\nthis VLAN would not be translational-bridged.\n\nAn implementation may restrict access to this object.\"\"\",\n        }, # column\n        \"vtpVlanEditBridgeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"srt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"srb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of Source Route bridging mode which would be in \nuse on this VLAN.  This object is only instantiated when \nthe value of  the corresponding instance of vtpVlanEditType\nhas a value of fddi(2) or tokenRing(3) and Source Routing \nis in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanEditAreHopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum number of bridge hops allowed in\nAll Routes Explorer frames on this VLAN.  This\nobject is only instantiated when the value of the\ncorresponding instance of vtpVlanType has a value of fddi(2)\nor tokenRing(3) and Source Routing is in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanEditSteHopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum number of bridge hops allowed in\nSpanning Tree Explorer frames on this VLAN.  This\nobject is only instantiated when the value of the\ncorresponding instance of vtpVlanType has a value of fddi(2)\nor tokenRing(3) and Source Routing is in use on this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanEditIsCRFBackup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" True if this VLAN is of type trCrf and also is acting as\na backup trCrf for the ISL distributed BRF.  This object is\nonly instantiated when the value of the corresponding\ninstance of vtpVlanEditType has a value of tokenRing(3).\"\"\",\n        }, # column\n        \"vtpVlanEditTypeExt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanTypeExt\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The additional type information of this VLAN.\"\"\",\n        }, # column\n        \"vtpVlanEditTypeExt2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.4.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanTypeExt\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The additional type information of this VLAN.\nThe VlanTypeExt TC specifies which bits may\nbe written by a management application.\nThe agent should provide a default value.\"\"\",\n        }, # column\n        \"vtpStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5\",\n        }, # node\n        \"vtpStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of VTP statistics.\"\"\",\n        }, # table\n        \"vtpStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"CISCO-VTP-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"managementDomainEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"VTP statistics for one management domain.\"\"\",\n        }, # row\n        \"vtpInSummaryAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Summary Adverts received for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpInSubsetAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Subset Adverts received for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpInAdvertRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Advert Requests received for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpOutSummaryAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Summary Adverts sent for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpOutSubsetAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Subset Adverts sent for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpOutAdvertRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VTP Advert Requests sent for this\nmanagement domain.\"\"\",\n        }, # column\n        \"vtpConfigRevNumberErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of occurrences of configuration revision number\nerrors for this management domain.  A configuration revision\nnumber error occurs when a device receives a VTP\nadvertisement for which:\n\n- the advertisement's Configuration Revision Number is the\n  same as the current locally-held value, and\n\n- the advertisement's digest value is different from the\n  current locally-held value.\"\"\",\n        }, # column\n        \"vtpConfigDigestErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of occurrences of configuration digest errors\nfor this management domain.  A configuration digest error\noccurs when a device receives a VTP advertisement for which:\n\n- the advertisement's Configuration Revision Number is\n  greater than the current locally-held value, and\n\n- the advertisement's digest value does not match the VLAN\n  information assumed by the receiver of the advertisement,\n  where the infomation assumed is the combination of the\n  information explicitly contained in the advertisement plus\n  any omitted information as currently known by the\n  receiving device.\"\"\",\n        }, # column\n        \"vlanTrunkPorts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6\",\n        }, # node\n        \"vlanTrunkPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing information on the local system's VLAN\ntrunk ports.\"\"\",\n        }, # table\n        \"vlanTrunkPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vlanTrunkPortIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about one trunk port.\"\"\",\n        }, # row\n        \"vlanTrunkPortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value of ifIndex for the interface corresponding to\nthis trunk port.\"\"\",\n        }, # column\n        \"vlanTrunkPortManagementDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"ManagementDomainIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of managementDomainIndex for the management\ndomain on this trunk port.  Devices which support only one\nmanagement domain will support this object read-only.\"\"\",\n        }, # column\n        \"vlanTrunkPortEncapsulationType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"isl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lane\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dot1Q\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"negotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of VLAN encapsulation desired to be used on this\ntrunk port. It is either a particular type, or 'negotiate'\nmeaning whatever type results from the negotiation.\nnegotiate(5) is not allowed if the port does not support\nnegotiation or if its vlanTrunkPortDynamicState is set to\non(1) or onNoNegotiate(5). Whether writing to this object\nin order to modify the encapsulation is supported is both\ndevice and interface specific.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN in the\nmanagement domain on this trunk port.  The first octet\ncorresponds to VLANs with VlanIndex values of 0 through 7;\nthe second octet to VLANs 8 through 15; etc.  The most\nsignificant bit of each octet corresponds to the lowest\nvalue VlanIndex in that octet.  If the bit corresponding to\na VLAN is set to '1', then the local system is enabled for\nsending and receiving frames on that VLAN; if the bit is set\nto '0', then the system is disabled from sending and\nreceiving frames on that VLAN.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vlanTrunkPortNativeVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CISCO-VTP-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VlanIndex of the VLAN which is represented by native\nframes on this trunk port.  For trunk ports not supporting\nthe sending and receiving of native frames, this value\nshould be set to zero.\"\"\",\n        }, # column\n        \"vlanTrunkPortRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this row.  In some circumstances, the\ncreation of a row in this table is needed to enable the\nappropriate trunking/tagging protocol on the port, to enable\nthe use of VTP on the port, and to assign the port to the\nappropriate management domain.  In other circumstances, rows\nin this table will be created as a by-product of other\noperations.\"\"\",\n        }, # column\n        \"vlanTrunkPortInJoins\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of VTP Join messages received on this trunk\nport.\"\"\",\n        }, # column\n        \"vlanTrunkPortOutJoins\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of VTP Join messages sent on this trunk port.\"\"\",\n        }, # column\n        \"vlanTrunkPortOldAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of VTP Advertisement messages which indicated\nthe sender does not support VLAN-pruning received on this\ntrunk port.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansPruningEligible\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN in the\nmanagement domain on this trunk port.  The first octet\ncorresponds to VLANs with VlanIndex values of 0 through 7;\nthe second octet to VLANs 8 through 15; etc.  The most\nsignificant bit of each octet corresponds to the lowest\nvalue VlanIndex in that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal system is permitted to prune that VLAN on this trunk\nport; if the bit is set to '0', then the system must not\nprune that VLAN on this trunk port.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansXmitJoined\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN in the\nmanagement domain on this trunk port.  The first octet\ncorresponds to VLANs with VlanIndex values of 0 through 7;\nthe second octet to VLANs 8 through 15; etc.  The most\nsignificant bit of each octet corresponds to the lowest\nvalue VlanIndex in that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then this\nVLAN is presently being forwarded on this trunk port, i.e.,\nit is not pruned; if the bit is set to '0', then this VLAN\nis presently not being forwarded on this trunk port, either\nbecause it is pruned or for some other reason.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansRcvJoined\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"128\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN in the\nmanagement domain on this trunk port.  The first octet\ncorresponds to VLANs with VlanIndex values of 0 through 7;\nthe second octet to VLANs 8 through 15; etc.  The most\nsignificant bit of each octet corresponds to the lowest\nvalue VlanIndex in that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal switch is currently sending joins for this VLAN on\nthis trunk port, i.e., it is asking to receive frames for\nthis VLAN; if the bit is set to '0', then the local switch\nis not currently sending joins for this VLAN on this trunk\nport.\"\"\",\n        }, # column\n        \"vlanTrunkPortDynamicState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"desirable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"onNoNegotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For devices that allows dynamic determination of whether\na link between two switches should be a trunk or not, this\nobject allows the operator to mandate the behavior of that\ndynamic mechanism.\n\non(1) dictates that the interface will always be a\ntrunk. This is the value for static entries (those that\nshow no dynamic behavior). If the negotiation is supported\non this port, negotiation will take place with the far end\nto attempt to bring the far end into trunking state.\n\noff(2) allows an operator to specify that the specified\ninterface is never to be trunk, regardless of any dynamic\nmechanisms to the contrary.  This value is useful for\noverriding the default behavior of some switches. If the\nnegotiation is supported on this port, negotiation will take\nplace with the far end to attempt on the link to bring the\nfar end into non-trunking state.\n\ndesirable(3) is used to indicate that it is desirable for\nthe interface to become a trunk.  The device will initiate\nany negotiation necessary to become a trunk but will not\nbecome a trunk unless it receives confirmation from the far\nend on the link.\n\nauto(4) is used to indicate that the interface is capable\nand willing to become a trunk but will not initiate\ntrunking negotiations.  The far end on the link are\nrequired to either start negotiations or start sending\nencapsulated packets, on which event the specified\ninterface will become a trunk.\n\nonNoNegotiate(5) is used to indicate that the interface is\npermanently set to be a trunk, and no negotiation takes\nplace with the far end on the link to ensure consistent\noperation. This is similar to on(1) except no negotiation\ntakes place with the far end.\n\nIf the port does not support negotiation or its\nvlanTrunkPortEncapsulationType is set to negotiate(5),\nonNoNegotiate(5) is not allowed.\n\nDevices that do no support dynamic determination (for just\na particular interface, encapsulation or for the whole\ndevice) need only support the 'on', and 'off' values.\"\"\",\n        }, # column\n        \"vlanTrunkPortDynamicStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trunking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notTrunking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Indicates whether the specified interface is either\nacting as a trunk or not. This is a result of the\nvlanTrunkPortDynamicState and the ifOperStatus of the\ntrunk port itself.\"\"\",\n        }, # column\n        \"vlanTrunkPortVtpEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Some trunk interface modules allow VTP to be\nenabled/disabled seperately from that of the central\ndevice.  In such a case this object provides management a\nway to remotely enable VTP on that module.  If a module\ndoes not support a seperate VTP enabled state then this\nobject shall always return 'true' and will accept no other\nvalue during a SET operation.\"\"\",\n        }, # column\n        \"vlanTrunkPortEncapsulationOperType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"isl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lane\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dot1Q\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"negotiating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of VLAN encapsulation in use on this trunk port.\nFor intefaces with vlanTrunkPortDynamicStatus of\nnotTrunking(2) the vlanTrunkPortEncapsulationOperType shall\nbe notApplicable(6). \"\"\",\n        }, # column\n        \"vlanTrunkPortVlansEnabled2k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 1024 through 2047 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 1024 through 1031; the second\noctet to VLANs 1032 through 1039; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet. If the bit corresponding to a VLAN is set to\n'1', then the local system is enabled for sending and\nreceiving frames on that VLAN; if the bit is set to '0',\nthen the system is disabled from sending and receiving\nframes on that VLAN. The default value is zero length\nstring.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansEnabled3k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 2048 through 3071 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 2048 through 2055; the second\noctet to VLANs 2056 through 2063; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet. If the bit corresponding to a VLAN is set to\n'1', then the local system is enabled for sending and\nreceiving frames on that VLAN; if the bit is set to '0',\nthen the system is disabled from sending and receiving\nframes on that VLAN. The default value is zero length\nstring.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansEnabled4k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 3072 through 4095 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 3072 through 3079; the second\noctet to VLANs 3080 through 3087; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet. If the bit corresponding to a VLAN is set to\n'1', then the local system is enabled for sending and\nreceiving frames on that VLAN; if the bit is set to '0',\nthen the system is disabled from sending and receiving\nframes on that VLAN. The default value is zero length\nstring.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vtpVlansPruningEligible2k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 1024 through 2047 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 1024 through 1031; the second\noctet to VLANs 1032 through 1039; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal system is permitted to prune that VLAN on this trunk\nport; if the bit is set to '0', then the system must not\nprune that VLAN on this trunk port.\nThe default value is zero length string.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vtpVlansPruningEligible3k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 2048 through 3071 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 2048 through 2055; the second\noctet to VLANs 2056 through 2063; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal system is permitted to prune that VLAN on this trunk\nport; if the bit is set to '0', then the system must not\nprune that VLAN on this trunk port.\nThe default value is zero length string.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vtpVlansPruningEligible4k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 3072 through 4095 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 3072 through 3079; the second\noctet to VLANs 3080 through 3087; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal system is permitted to prune that VLAN on this trunk\nport; if the bit is set to '0', then the system must not\nprune that VLAN on this trunk port.\nThe default value is zero length string.\n\nTo avoid conflicts between overlapping partial updates by\nmultiple managers, i.e., updates which modify only a portion\nof an instance of this object (e.g., enable/disable a single\nVLAN on the trunk port), any SNMP Set operation accessing an\ninstance of this object should also write the value of\nvlanTrunkPortSetSerialNo.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansXmitJoined2k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 1024 through 2047 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 1024 through 1031; the second\noctet to VLANs 1032 through 1039; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then this\nVLAN is presently being forwarded on this trunk port, i.e.,\nit is not pruned; if the bit is set to '0', then this VLAN\nis presently not being forwarded on this trunk port, either\nbecause it is pruned or for some other reason.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansXmitJoined3k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 2048 through 3071 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 2048 through 2055; the second\noctet to VLANs 2056 through 2063; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then this\nVLAN is presently being forwarded on this trunk port, i.e.,\nit is not pruned; if the bit is set to '0', then this VLAN\nis presently not being forwarded on this trunk port, either\nbecause it is pruned or for some other reason.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansXmitJoined4k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 3072 through 4095 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 3072 through 3079; the second\noctet to VLANs 3080 through 3087; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then this\nVLAN is presently being forwarded on this trunk port, i.e.,\nit is not pruned; if the bit is set to '0', then this VLAN\nis presently not being forwarded on this trunk port, either\nbecause it is pruned or for some other reason.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansRcvJoined2k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 1024 through 2047 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 1024 through 1031; the second\noctet to VLANs 1032 through 1039; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal switch is currently sending joins for this VLAN on\nthis trunk port, i.e., it is asking to receive frames for\nthis VLAN; if the bit is set to '0', then the local switch\nis not currently sending joins for this VLAN on this trunk\nport.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansRcvJoined3k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 2048 through 3071 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 2048 through 2055; the second\noctet to VLANs 2056 through 2063; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal switch is currently sending joins for this VLAN on\nthis trunk port, i.e., it is asking to receive frames for\nthis VLAN; if the bit is set to '0', then the local switch\nis not currently sending joins for this VLAN on this trunk\nport.\"\"\",\n        }, # column\n        \"vlanTrunkPortVlansRcvJoined4k\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of octets containing one bit per VLAN for VLANS\nwith VlanIndex values of 3072 through 4095 in the management\ndomain on this trunk port.  The first octet corresponds to\nVLANs with VlanIndex values of 3072 through 3079; the second\noctet to VLANs 3080 through 3087; etc.  The most significant\nbit of each octet corresponds to the lowest value VlanIndex\nin that octet.\n\nIf the bit corresponding to a VLAN is set to '1', then the\nlocal switch is currently sending joins for this VLAN on\nthis trunk port, i.e., it is asking to receive frames for\nthis VLAN; if the bit is set to '0', then the local switch\nis not currently sending joins for this VLAN on this trunk\nport.\"\"\",\n        }, # column\n        \"vlanTrunkPortDot1qTunnel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.1.1.29\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trunk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"access\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"Indicates dot1qtunnel mode of the port.\n\nIf the portDot1qTunnel  is set to 'trunk' mode, the port's\nvlanTrunkPortDynamicState will be changed to 'onNoNegotiate'\nand the vlanTrunkPortEncapsulationType will be set to\n'dot1Q'. These values cannot be changed unless dot1q tunnel\nis disabled on this port.\n\nIf the portDot1qTunnel mode is set to 'access' mode, the\nport's vlanTrunkPortDynamicState will be set to 'off'.And\nthe value of vlanTrunkPortDynamicState cannot be changed\nunless dot1q tunnel is disabled on this port. 1Q packets\nreceived on this access port will remain.\n\nSetting the port to dot1q tunnel 'disabled' mode causes the\ndot1q tunnel feature to be disabled on this port.  This\nobject can't be set to 'trunk' or 'access' mode, when\nvlanTrunkPortsDot1qTag  object is set to 'false'.\n\nThis object has been deprecated and is replaced by the\nobject 'cltcDot1qTunnelMode' in the\nCISCO-L2-TUNNEL-CONFIG-MIB\"\"\",\n        }, # column\n        \"vlanTrunkPortSetSerialNo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An advisory lock used to allow several cooperating SNMPv2\nmanagers to coordinate their use of the SNMPv2 set operation\nacting upon any instance of vlanTrunkPortVlansEnabled.\"\"\",\n        }, # scalar\n        \"vlanTrunkPortsDot1qTag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.6.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"An indication of whether the tagging on all VLANs including\nnative VLAN for all 802.1q trunks is enabled.\n\nIf this object has a value of true(1) then all VLANs\nincluding native VLAN are tagged.  If the value is false(2)\nthen all VLANs excluding native VLAN are tagged.\n\nThis object has been deprecated and is replaced by the\nobject 'cltcDot1qAllTaggedEnabled' in the\nCISCO-L2-TUNNEL-CONFIG-MIB\"\"\",\n        }, # scalar\n        \"vtpDiscover\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7\",\n        }, # node\n        \"vtpDiscoverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information related to the discovery \nof the VTP members in the designated management\ndomain. This table is not instantiated when \nmanagementDomainVersionInUse is version1(1), version2(3)\nor none(3). \"\"\",\n        }, # table\n        \"vtpDiscoverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information related to the discovery of the \nVTP members in one management domain.\"\"\",\n        }, # row\n        \"vtpDiscoverAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"discover\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"purgeResult\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this object is set to discover(1), all the\nentries in vtpDiscoverResultTable for the\ncorresponding management domain will be removed \nand the local device will begin to discover all\nVTP members in the management domain. Upon the\nsuccessful completion of discovery, the discovered\nresult will be stored in the vtpDiscoverResultTable.\n\nIf vtpDiscoverStatus is inProgress(1), setting \nvtpDiscoverAction to discover(1) will fail. \n\nWhen this object is set to purgeResult(3), \nall the entries of vtpDiscoverResultTable for \nthe corresponding management domain will be\nremoved from vtpDiscoverResultTable.\n\nWhen this object is set to noOperation(2), no\naction will be taken. When read, this object\nalways returns noOperation(2).\"\"\",\n        }, # column\n        \"vtpDiscoverStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"succeeded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"resourceUnavailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"someOtherError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of VTP discovery. \n\ninProgress - a discovery is in progress;\n\nsucceeded - the discovery was completed successfully\n            (this value is also used when \n            no discover has been invoked since the\n            last time the local system restarted);\n\nresourceUnavailable - the discovery failed because\n            the required allocation of a resource is\n            presently unavailable.\n\nsomeOtherError - 'the discovery failed due to a\n            reason no listed.\"\"\",\n        }, # column\n        \"vtpLastDiscoverTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at which the last discovery \nwas completed.\n\nA value of zero indicates that no discovery has been\ninvoked since last time the local system restarted. \"\"\",\n        }, # column\n        \"vtpDiscoverResultTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing information of discovered VTP members\nin the management domain in which the local system is\nparticipating. This table is not instantiated when \nmanagementDomainVersionInUse is version1(1), version2(2) or\nnone(3). \"\"\",\n        }, # table\n        \"vtpDiscoverResultEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n                \"vtpDiscoverResultIndex\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row is created for each VTP member which\nis found through successful discovery.\"\"\",\n        }, # row\n        \"vtpDiscoverResultIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value assigned by the system which identifies\na VTP member and the associated database in the \nmanagement domain.\"\"\",\n        }, # column\n        \"vtpDiscoverResultDatabaseName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The database name associated with the \ndiscovered VTP member.\"\"\",\n        }, # column\n        \"vtpDiscoverResultConflicting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether this VTP member contains \nconflicting information.\n\ntrue(1) indicates that this member has conflicting \ninformation of the database type in the management domain.\n \nfalse(2) indicates that there is no conflicting information\nof the database type in the management domain.\"\"\",\n        }, # column\n        \"vtpDiscoverResultDeviceId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique identifier of the device for this VTP member.\"\"\",\n        }, # column\n        \"vtpDiscoverResultPrimaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique identifier of the primary server for this VTP \nmember and the associated database type.\n\nThere are two different VTP servers, the primary server\nand the secondary server.  When a local device is\nconfigured as a server for a certain database type,\nit becomes secondary server by default. \nPrimary server is an operational role under which a\nserver can initiate or change the VTP configuration of the\ndatabase type.\n\nIf this VTP member itself is the primary server, the   \nvalue of this object is the same as the value of \nvtpDiscoverResultDeviceId of the instance.\"\"\",\n        }, # column\n        \"vtpDiscoverResultRevNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current configuration revision number as known by the\nVTP member. When the database type is unknown for\nthe VTP member, this value is 0.\"\"\",\n        }, # column\n        \"vtpDiscoverResultSystemName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"sysName of the VTP member.\"\"\",\n        }, # column\n        \"vtpDatabase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8\",\n        }, # node\n        \"vtpDatabaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information of the VTP \ndatabases. It is not instantiated when\nmanagementDomainVersionInUse is version1(1), \nversion2(3) or none(3).\"\"\",\n        }, # table\n        \"vtpDatabaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n                \"vtpDatabaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the status of the VTP database\nin the domain.  Each VTP database type known to the\nlocal device type has an entry in this table.\nAn entry is also created for unknown database which is\nnotified through VTP advertisements from other VTP\nservers.\"\"\",\n        }, # row\n        \"vtpDatabaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A value assigned by the system which uniquely identifies\na VTP database in the local system.\"\"\",\n        }, # column\n        \"vtpDatabaseName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the database.\"\"\",\n        }, # column\n        \"vtpDatabaseLocalMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"server\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"transparent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The local VTP mode for a particular database type\nin this administrative domain.\n\n- 'client' indicates that the local system is acting\n  as a VTP client of the database type.\n\n- 'server' indicates that the local system is acting\n  as a VTP server of the database type.\n\n- 'transparent' indicates that the local system does\n  not generate or listen to VTP messages of this \n  database type, but forwards\n  messages. This mode can also be set by the device\n  itself when the size of database is too large for it\n  to hold in DRAM.\n\n- 'off' indicates that the local system does not\n  generate, listen to or forward any VTP messages\n  of this database type.\n\nThe default mode is 'client' for the database type \nknown to the local device and 'transparent' for the\nunknown database type. \"\"\",\n        }, # column\n        \"vtpDatabaseRevNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current configuration revision number as known by the\nlocal device for this VTP 3 database type in the management\ndomain.  This value is updated (if necessary) whenever a \nVTP advertisement for the database type is received \nor generated. When the database type is unknown to the \nlocal device or no VTP advertisement for the database\ntype is received or generated, its value is 0.\"\"\",\n        }, # column\n        \"vtpDatabasePrimaryServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"There are two kinds of VTP version 3 servers for a certain\ndatabase type - the primary server and the secondary server.\nWhen a local device is configured as a server for a certain\ndatabase type, it becomes secondary server by default.\nPrimary server is an operational role under which a\nserver can initiate or change the VTP configuration of the\ndatabase type.\n\nA true(1) value indicates that the local device is the \nprimary server of the database type in the management\ndomain. A false(2) value indicates that the local device\nis not the primary server, or the database type is unknown\nto the local device.\"\"\",\n        }, # column\n        \"vtpDatabasePrimaryServerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique identifier of the primary server in the \nmanagement domain for the database type. \n\nIf no primary server is discovered for the database\ntype, the object has a value of zero length string.\"\"\",\n        }, # column\n        \"vtpDatabaseTakeOverPrimary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"There are two kinds of VTP version 3 servers for a certain\ndatabase type - the primary server and the secondary server.\nWhen a local device is configured as a server for a certain\ndatabase type, it becomes secondary server by default.\nPrimary server is an operational role under which a\nserver can initiate or change the VTP configuration of the\ndatabase type.\n\nSetting this object to a true(1) value will advertise the\nconfiguration of this database type to the whole domain.\n\nIn order to successfully setting this object to true(1),\nthe value of vtpDatabaseLocalMode must be server(2). Besides\nthat, when the VTP password is hidden from the configuration\nfile, the password (vtpDatabaseTakeOverPassword) which \nmatches  the secret key (vtpAuthSecretKey) must be provided\nin the same data packet. \n\nWhen read, the object always returns false(2).\"\"\",\n        }, # column\n        \"vtpDatabaseTakeOverPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.8.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When read, this object always returns the value of a \nzero-length octet string.\n\nIn the case that the VTP password is hidden from the \nconfiguration and the local device intends\nto take over the whole domain, this object must be \nset to the matching password with the secret key \n(vtpAuthSecretKey) in the same data packet as which \nthe vtpDatabaseTakeOverPrimary is in. In all the \nother situations, setting a valid value to this object \nhas no impact on the system.\"\"\",\n        }, # column\n        \"vtpAuthentication\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9\",\n        }, # node\n        \"vtpAuthenticationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table contains the authentication information of VTP\nin which the local system participates.\n\nThe security mechanism of VTP relies on a secret key\nthat is used to alter the MD5 digest of the packets\ntransmitted on the wire.  The secret value is\ncreated from a password that may be saved in plain text\nin the configuration or hidden from the configuration.\n\nThe device creating or modifying the VTP configuration\nsigns it using the MD5 digest generated from the secret\nkey before advertising it. Other devices in the domain\nreceive this configuration use the same secret key\nto accept it if correctly signed or drop it otherwise.\n\nThe user has the option to hide the password from the\nconfiguration. Once the password is hidden, the secret\nkey generated from the password is shown in the \nconfiguration instead, and there is no other way to \nshow the password in plain text again but clearing \nit or resetting it. \n\nIn an un-trusted area, the password on a device can \nbe configured without being unveiled. After that,\nit has to be provided again by setting the same \nvalue to vtpDatabaseTakeOverPassword if the user \nwants to take over the whole VTP management domain\nof the database type.\n\nWhen managementDomainVersionInUse is version3(4), the \nauthentication mechanism is common to all VTP\ndatabase type.\"\"\",\n        }, # table\n        \"vtpAuthEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"managementDomainIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the status of the VTP\nauthentication information in one domain.\"\"\",\n        }, # row\n        \"vtpAuthPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"By default, this object has a value of a zero-length\ncharacter string and is considered to be not\nconfigured.\n\nThe device uses the password to generate the \nsecret key. It can be stored in the configuration in \nplain text or hidden from the configuration. If a VTP \nserver intends to modify the database's configuration\nin the domain but the password was hidden from the\nconfiguration, the same password\n(vtpDatabaseTakeOverPassword) as the hidden one\nhas to be provided.\n\nWhen this object is set alone, vtpAuthPasswordType is\nset to plaintext(1) automatically by the system.\nSetting this object to a zero length character string\nresets the password to its default value and the\npassword is considered as not configured.\n\nThis object is not allowed to be set at the same time\nwhen  vtpAuthSecretKey is set.\n\nWhen the vtpAuthPasswordType is hidden(2), this object \nwill return a zero-length character string when read.\"\"\",\n        }, # column\n        \"vtpAuthPasswordType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"plaintext\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hidden\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"By default this object has the value as plaintext(1) \nand the VTP password is stored in the configuration\nfile in plain text.\n\nSetting this object to hidden(2) will hide the\npassword from the configuration.\n\nOnce this object is set to hidden(2), it cannot\nbe set to plaintext(1) alone. However, it may\nbe set to plaintext(1) at the same time the\npassword is set.\"\"\",\n        }, # column\n        \"vtpAuthSecretKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.1.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device creating or modifying the VTP configuration\nsigns it using the MD5 digest generated from the secret\nkey before advertising it. Other devices in the domain\nreceiving this configuration use the same secret key\nto accept it if it was correctly signed or drop it \notherwise.\n\nBy default, the object has the value as a zero-length\nstring and this value is read only. It is set \nto this value automatically when the password \n(vtpAuthPassword) is set to a zero-length octet string.\n\nThe secret key can be either generated using\nthe password or configured by the user. Once\nthe secret key is configured by the user, it is\nstored as a hexadecimal string in the device's\nconfiguration and the password is considered to be\nthe secret key's matching password and hidden\nfrom the configuration automatically.\n\nThis object is not allowed to be set at the same\ntime when vtpAuthPassword is set.\n\nThe secret key is overwritten by a newly generated\nsecret key when the password is re-configured.\"\"\",\n        }, # column\n        \"vtpNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2\",\n        }, # node\n        \"vtpNotificationsPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0\",\n        }, # node\n        \"vtpNotificationsObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.1\",\n        }, # node\n        \"vtpVlanPortLocalSegment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The ring (segment) number in use on a 802.5 ring.  For\nbridges supporting RFC 1525, this value is the same as given\nby dot1dSrPortLocalSegment for the bridge port attached to\nthat ring.  When tokenRing VLANs are in use, each 'trNet'\nVLAN can/does have a different instance of\ndot1dSrPortLocalSegment for each physical port.  Note that\naccess to the particuler instance of dot1dSrPortLocalSegment\nrequires knowledge of how the agent supports the multiple\n'contexts' required to implement RFC 1525 for multiple\nVLANs; also note that the assignment of ifIndex values may\nbe different in different 'contexts'.\"\"\",\n        }, # scalar\n        \"vtpMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3\",\n        }, # node\n        \"vtpMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1\",\n        }, # node\n        \"vtpMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"vtpConfigRevNumberError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"managementDomainConfigRevNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A configuration revision number error notification\nsignifies that a device has incremented its\nvtpConfigRevNumberErrors counter.\n\nGeneration of this notification is suppressed if the\nvtpNotificationsEnabled has the value 'false'.\n\nThe device must throttle the generation of consecutive\nvtpConfigRevNumberError notifications so that there is at\nleast a five-second gap between notification of this type.\nWhen notification are throttled, they are dropped, not\nqueued for sending at a future time.  (Note that\n'generating' a notification means sending to all configured\nrecipients.)\"\"\",\n        }, # notification\n        \"vtpConfigDigestError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"managementDomainConfigRevNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A configuration digest error notification signifies that a\ndevice has incremented its vtpConfigDigestErrors counter.\n\nGeneration of this notification is suppressed if the\nvtpNotificationsEnabled has the value 'false'.\n\nThe device must throttle the generation of consecutive\nvtpConfigDigestError notifications so that there is at least\na five-second gap between notification of this type.  When\nnotification are throttled, they are dropped, not queued for\nsending at a future time.  (Note that 'generating' a\nnotification means sending to all configured recipients.)\"\"\",\n        }, # notification\n        \"vtpServerDisabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"managementDomainConfigRevNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpMaxVlanStorage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A VTP Server disabled notification is generated when the\nlocal system is no longer able to function as a VTP Server\nbecause the number of defined VLANs is greater than\nvtpMaxVlanStorage.\n\nGeneration of this notification is suppressed if the\nvtpNotificationsEnabled has the value 'false'.\"\"\",\n        }, # notification\n        \"vtpMtuTooBig\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A VTP MTU tooBig notification is generated when a VLAN's\nMTU size is larger than can be supported either:\n\n- by one or more of its trunk ports:\n  the included vtpVlanState has the value\n  'mtuTooBigForTrunk' and the included\n  vlanTrunkPortManagementDomain is for the first (or only)\n  trunk port,\n  or\n\n- by the device itself:\n  vtpVlanState has the value 'mtuTooBigForDevice' and any\n  instance of vlanTrunkPortManagementDomain is included.\n\nDevices which have no trunk ports do not send vtpMtuTooBig\nnotifications.\n\nGeneration of this notification is suppressed if the\nvtpNotificationsEnabled has the value 'false'.\"\"\",\n        }, # notification\n        \"vtpVersionOneDeviceDetected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A VTP version one device detected notification is\ngenerated by a device when:\n\na) a management domain has been put into version 2 mode\n   (as accessed by managementDomainVersionInUse).\nb) 15 minutes has passed since a).\nc) a version 1 PDU is detected on a trunk on the device\n   that is in that management domain which has a lower\n   revision number than the current configuration.\"\"\",\n        }, # notification\n        \"vlanTrunkPortDynamicStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vlanTrunkPortDynamicStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vlanTrunkPortDynamicStatusChange notification is\ngenerated by a device when the value of\nvlanTrunkPortDynamicStatus object has been changed.\"\"\",\n        }, # notification\n        \"vtpLocalModeChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"managementDomainLocalMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vtpLocalModeChanged notification is generated \nby a device when the value of the object \nmanagementDomainLocalMode is changed.\"\"\",\n        }, # notification\n        \"vtpVersionInUseChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"managementDomainVersionInUse\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vtpVersionInUseChanged notification is  \ngenerated by a device when the value of the  \nobject managementDomainVersionInUse is \nchanged.\"\"\",\n        }, # notification\n        \"vtpVlanCreated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vtpVlanName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vtpVlanCreated notification is generated by a \ndevice when a VLAN is created. \"\"\",\n        }, # notification\n        \"vtpVlanDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vtpVlanName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vtpVlanDeleted notification is generated by a\ndevice when a VLAN is deleted. \"\"\",\n        }, # notification\n        \"vtpVlanRingNumberConflict\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.2.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vtpVlanRingNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"vtpVlanPortLocalSegment\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A VTP ring number configuration conflict notification is\ngenerated if, and only at the time when, a device learns of\na conflict between:\n\na) the ring number (vtpVlanPortLocalSegment) being used on a\n   token ring segment attached to the port identified by\n   ifIndex, and\n\nb) the VTP-obtained ring number (vtpVlanRingNumber) for the\n   VLAN identified by vtpVlanIndex.\n\nWhen such a conflict occurs, the bridge port is put into an\nadministrative down position until the conflict is resolved\nthrough local/network management intervention.\n\nThis notification is only applicable to VLANs of type\n'tokenRing'.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"vtpBasicGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpMaxVlanStorage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationsEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainLocalMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainConfigRevNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainLastUpdater\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainTftpServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"managementDomainRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing basic status and control\nof a VTP implementation.\"\"\",\n        }, # group\n        \"vtpStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpInSummaryAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpInSubsetAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpInAdvertRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpOutSummaryAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpOutSubsetAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpOutAdvertRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigRevNumberErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigDigestErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing VTP statistics.\"\"\",\n        }, # group\n        \"vtpTrunkPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortSetSerialNo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information on trunk\nports.\"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.6\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vtpConfigDigestError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigRevNumberError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpServerDisabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpMtuTooBig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersionOneDeviceDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortDynamicStatusChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications which a VTP implementation is\nrequired to implement.\"\"\",\n        }, # group\n        \"vtpTrunkPruningGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanTrunkPortInJoins\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortOutJoins\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortOldAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansPruningEligible\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information on VLAN\npruning.\"\"\",\n        }, # group\n        \"vtpTrunkPruningGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"managementDomainPruningState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of object providing information on whether\nVLAN pruning is enabled.\"\"\",\n        }, # group\n        \"vtpTrunkPortGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanTrunkPortDynamicState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortDynamicStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVtpEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\" Additional functionality added to the\nvlanTrunkPortTable. \"\"\",\n        }, # group\n        \"vtpVersion2BasicGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"managementDomainVersionInUse\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\" The object required to indicate the version of VTP in\nuse by a management domain.\"\"\",\n        }, # group\n        \"vtpVlanInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanDot10Said\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanRingNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanBridgeNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanStpType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanParentVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanTranslationalVlan1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanTranslationalVlan2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanBridgeType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanAreHopCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanSteHopCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanIsCRFBackup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for monitoring VLAN information.\"\"\",\n        }, # group\n        \"vtpVlanInfoEditGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanEditOperation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanApplyStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditBufferOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditConfigRevNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditDot10Said\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditRingNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditBridgeNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditStpType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditParentVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditTranslationalVlan1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditTranslationalVlan2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditBridgeType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditAreHopCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditSteHopCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditIsCRFBackup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for editing VLAN information in VTP\nServers.\"\"\",\n        }, # group\n        \"vtpTrunkPortGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vlanTrunkPortEncapsulationOperType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\" Additional functionality added to the\nvlanTrunkPortTable. \"\"\",\n        }, # group\n        \"vtp4kVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.16\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vtpVlanTypeExt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditTypeExt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nfor VLANS with VlanIndex from 1024 to 4095.\"\"\",\n        }, # group\n        \"vtpDot1qTunnelGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.17\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vlanTrunkPortsDot1qTag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nfor dot1qtunnel feature.\"\"\",\n        }, # group\n        \"vtpVlanIfIndexGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nfor mapping of VLAN ID to its corresponding\nifIndex.\"\"\",\n        }, # group\n        \"vtpVlanInfoEditGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanEditModifiedVlan\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects for editing VLAN information when \nonly one VLAN is allowed to be edited for each 'apply'\noperation.\"\"\",\n        }, # group\n        \"vtp4kVlanGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanTypeExt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansEnabled4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlansPruningEligible4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansXmitJoined4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined2k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined3k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortVlansRcvJoined4k\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nfor VLANS with VlanIndex from 1024 to 4095.\"\"\",\n        }, # group\n        \"vtpNotificationObjectsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanPortLocalSegment\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects included in VTP notifications.\"\"\",\n        }, # group\n        \"vtpDot1qTunnelGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.22\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"vlanTrunkPortsDot1qTag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nfor dot1qtunnel feature.\"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpLocalModeChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersionInUseChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications which a VTP implementation is\nrequired to implement.\"\"\",\n        }, # group\n        \"vtpVlanNotifEnabledGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanCreatedNotifEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanDeletedNotifEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects to indicate whether a\ncertain group of notifications are enabled. \"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroup3\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.25\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications implemented by a device which \nsupports these features. \"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroup4\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.26\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpVlanRingNumberConflict\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications implemented by a device which\nsupports these features. \"\"\",\n        }, # group\n        \"vtpDiscoverGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.27\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpDiscoverAction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpLastDiscoverTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultDatabaseName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultConflicting\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultDeviceId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultPrimaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultRevNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDiscoverResultSystemName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information of \nVTP discovery.\"\"\",\n        }, # group\n        \"vtpDatabaseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.28\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpDatabaseName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabaseLocalMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabaseRevNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabasePrimaryServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabasePrimaryServerId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabaseTakeOverPrimary\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpDatabaseTakeOverPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information of\nVTP databases. \"\"\",\n        }, # group\n        \"vtpAuthGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.29\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpAuthPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpAuthPasswordType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpAuthSecretKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information of\nVTP authentication mechanism. \"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroupRev1\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.30\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpConfigDigestError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigRevNumberError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersionOneDeviceDetected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vlanTrunkPortDynamicStatusChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications which a VTP implementation is\nrequired to implement.\"\"\",\n        }, # group\n        \"vtpConfigNotificationsGroup5\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.31\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpServerDisabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpMtuTooBig\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The additional notifications that may be \nrelated to a VTP implementation.\"\"\",\n        }, # group\n        \"vtpInternalVlanGrp\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.2.32\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vtpInternalVlanAllocPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpInternalVlanOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information of\ninternal VLANs. \"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"vtpMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only for interface which doesn't\nsupport dot1q tunnel feature.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance4\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only for interface which doesn't\nsupport dot1q tunnel feature.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance5\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only for interface which doesn't\nsupport dot1q tunnel feature.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance6\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.6\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only for interface which doesn't\nsupport dot1q tunnel feature.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance7\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.7\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3). Write access for transparent(3)\nis not required.\"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortDot1qTunnel\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only for interface which doesn't\nsupport dot1q tunnel feature.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance8\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.8\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpDot1qTunnelGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all the ports which\nimplement dot1qtunnel feature.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3). Write access for transparent(3)\nis not required.\"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion \nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance9\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.9\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n                \"vtpVlanNotifEnabledGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nnotifications/traps in vtpConfigNotificationsGroup3. \"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3). Write access for transparent(3)\nis not required.\"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance10\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.10\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n                \"vtpVlanNotifEnabledGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nnotifications/traps in vtpConfigNotificationsGroup3. \"\"\",\n                },\n                \"vtpDiscoverGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP discovery.\"\"\",\n                },\n                \"vtpDatabaseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP distribution of different database types.\"\"\",\n                },\n                \"vtpAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support \nasymmetric keys authentication mechanism for VTP.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3). \"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance11\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.11\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n                \"vtpVlanNotifEnabledGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nnotifications/traps in vtpConfigNotificationsGroup3. \"\"\",\n                },\n                \"vtpDiscoverGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP discovery.\"\"\",\n                },\n                \"vtpDatabaseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP distribution of different database types.\"\"\",\n                },\n                \"vtpAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support \nasymmetric keys authentication mechanism for VTP.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3). \"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"vtpMIBCompliance12\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"CISCO-VTP-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.9.46.3.1.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for VTP implementations.\"\"\",\n            \"requires\" : {\n                \"vtpBasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpConfigNotificationsGroupRev1\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpTrunkPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVersion2BasicGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpNotificationObjectsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"CISCO-VTP-MIB\"\n                },\n                \"vtpVlanInfoEditGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by VTP Servers.\nVTP Clients need not implement these objects, and\nmust not allow VLANs to be created, modified, or\ndestroyed using these objects.\"\"\",\n                },\n                \"vtp4kVlanGroupRev1\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group must be implemented by the VTP Servers\nwhich support the range of VlanIndex between 1024\nand 4095.\"\"\",\n                },\n                \"vtpVlanIfIndexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is an optional group containing\nobjects providing information about the mapping\nof VLAN ID to its corresponding IfIndex.\"\"\",\n                },\n                \"vtpVlanInfoEditGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which only support\none VLAN editing for each 'apply' operation.\"\"\",\n                },\n                \"vtpVlanNotifEnabledGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nnotifications/traps in vtpConfigNotificationsGroup3. \"\"\",\n                },\n                \"vtpDiscoverGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP discovery.\"\"\",\n                },\n                \"vtpDatabaseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support the\nVTP distribution of different database types.\"\"\",\n                },\n                \"vtpAuthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices which support \nasymmetric keys authentication mechanism for VTP.\"\"\",\n                },\n                \"vtpInternalVlanGrp\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is optional.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"managementDomainRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"vlanTrunkPortRowStatus\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one\nof the six enumerated values for the\nRowStatus textual convention need be\nsupported, specifically: active(1).\"\"\",\n                },\n                \"managementDomainName\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainLocalMode\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"client\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"server\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"transparent\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3). \"\"\",\n                },\n                \"managementDomainTftpServer\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainTftpPathname\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"managementDomainVersionInUse\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"This object is read-only if vtpVersion\nis none(3).\"\"\",\n                },\n                \"vlanTrunkPortManagementDomain\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortEncapsulationType\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vlanTrunkPortNativeVlan\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"vtpVlanEditTypeExt2\" : {\n                    \"module\" : \"CISCO-VTP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/COMETMS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python COMETMS-MIB\n\nFILENAME = \"ms.mib\"\n\nMIB = {\n    \"moduleName\" : \"COMETMS-MIB\",\n\n    \"COMETMS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"RFC-1212\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n    ),\n\n    \"nodes\" : {\n        \"comet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1\",\n        }, # node\n        \"ms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4\",\n        }, # node\n        \"settings\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1\",\n        }, # node\n        \"messageString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Message giving more detailed information on alarms\"\"\",\n        }, # scalar\n        \"msName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device name\"\"\",\n        }, # scalar\n        \"serialNo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device serial number\"\"\",\n        }, # scalar\n        \"msType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MS type\"\"\",\n        }, # scalar\n        \"selfTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System selftest status\"\"\",\n        }, # scalar\n        \"intAcc\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Internal acoustic alarm\"\"\",\n        }, # scalar\n        \"extAcc\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm out acoustic signalization\"\"\",\n        }, # scalar\n        \"memUsg\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Memory usage\"\"\",\n        }, # scalar\n        \"channels\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2\",\n        }, # node\n        \"chTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Channels information table\"\"\",\n        }, # table\n        \"chEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"channelName\",\n            ],\n            \"description\" :\n                \"\"\"Channels values entries\"\"\",\n        }, # row\n        \"channelName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel name\"\"\",\n        }, # column\n        \"channelValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel value\"\"\",\n        }, # column\n        \"channelInt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel int value (only real part, -2147483648 = error)\"\"\",\n        }, # column\n        \"channelUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel unit\"\"\",\n        }, # column\n        \"channelAlarm1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm 1 state\"\"\",\n        }, # column\n        \"channelAlarm2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm 2 state\"\"\",\n        }, # column\n        \"channelProces\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Proces name\"\"\",\n        }, # column\n        \"channelInt10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel int*10 value (22 = 2.2, -2147483648 = error)\"\"\",\n        }, # column\n        \"channelInt100\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel int*100 value (225 = 2.25, -2147483648 = error)\"\"\",\n        }, # column\n        \"relay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.3\",\n        }, # node\n        \"rTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Relay board information table\"\"\",\n        }, # table\n        \"rEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"relayStateInt\",\n            ],\n            \"description\" :\n                \"\"\"Relay board states entries\"\"\",\n        }, # row\n        \"relayStateInt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay state Integer (0 = open, 1 = closed)\"\"\",\n        }, # column\n        \"relayStateStr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"COMETMS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.4.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"17\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay state String (open/closed)\"\"\",\n        }, # column\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CORIANT-GROOVE-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CORIANT-GROOVE-MIB\n\nFILENAME = \"./CORIANT-GROOVE-MIB\"\n\nMIB = {\n    \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n\n    \"CORIANT-GROOVE-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Coriant R&D\"\"\",\n        \"contact\" : \n            \"\"\"Contact Coriant Customer Service at http://www.coriant.com/services_support\"\"\",\n        \"description\" :\n            \"\"\"SNMP MIB for Groove G30 release 2.1.0\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2018-07-10 07:22\",\n                \"description\" :\n                    \"\"\"Auto-build version at 201807100722Z\"\"\",\n            },\n        ),\n        \"identity node\" : \"groove\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n    ),\n\n    \"typedefs\" : {\n        \"CoriantCommonOtnEncryStatusEnum\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"notAvailable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"handshake\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"keyInitializing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"keyInSync\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"unreachable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"mismatch\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"connectFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"disabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"encryptFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"encryptNormal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"authenticationFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"trafficSquelched\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantCommonOtnKeySyncSession\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indicate the associated session for the ODU channel to synchronize keys.\"\"\",\n        },\n        \"CoriantCommonpmThresholdValue\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantCommonpmUnitOfValue\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"dbm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"microseconds\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ps\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"psNm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"db\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"seconds\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"packets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"events\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"bits\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"bitsS\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"blocks\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"times\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"percentage\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"bitRatio\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"mhz\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"degreec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"frames\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFileSwTypesDeviceFwVersion\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"64\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"64\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFileSwTypesDeviceName\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"64\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"64\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFileSwTypesSwVersion\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"20\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"20\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFileSwTypesSwloadProduct\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFileSwTypesSwloadVendor\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFmtypesConditionType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"idp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"rupDeg\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"rupFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"meaHwvm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"mea\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"pwra\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"pwrb\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"rupMiss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"sbanr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"sdf\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"thermal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"sdcardmiss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"sdcardfail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"mgmtrst\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"progflt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"ntppu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"linkdown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"los\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"lol\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"lofOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"lomOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"timOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"bdiOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"bersdOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"aisOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"bersdOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"lckOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"ociOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"aisOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"bdiOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"timOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"plmOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"loomfi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"msim\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"loflom\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"csfOpu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"losync\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"lf\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"rf\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"csfLosGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"csfLosyncGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"csfFdiGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"csfRdiGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"lofdGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"plmGfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"lpbkfacility\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"lpbkfterm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"contcom\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"latchOpen\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"49\"\n            },\n            \"lof\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"50\"\n            },\n            \"aisL\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"51\"\n            },\n            \"msAis\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"52\"\n            },\n            \"timR\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"53\"\n            },\n            \"rsTim\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"54\"\n            },\n            \"rfiL\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"55\"\n            },\n            \"msRfi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"56\"\n            },\n            \"cabs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"99\"\n            },\n            \"oog\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"100\"\n            },\n            \"connectFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"101\"\n            },\n            \"encryptFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"102\"\n            },\n            \"keyexFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"103\"\n            },\n            \"bdi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"104\"\n            },\n            \"bdiO\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"105\"\n            },\n            \"autoshutoff\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"106\"\n            },\n            \"fibrconnMiss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"107\"\n            },\n            \"bdiP\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"108\"\n            },\n            \"losMsa\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"109\"\n            },\n            \"protna\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"110\"\n            },\n            \"switchThres\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"111\"\n            },\n            \"losyncCd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"112\"\n            },\n            \"updatePskFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"113\"\n            },\n            \"encTrafficSquelch\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"114\"\n            },\n            \"tSe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10001\"\n            },\n            \"tDropevents\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10002\"\n            },\n            \"tOctets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10003\"\n            },\n            \"tPkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10004\"\n            },\n            \"tBroadcastpkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10005\"\n            },\n            \"tMulticastpkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10006\"\n            },\n            \"tCrcalignerrors\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10007\"\n            },\n            \"tUndersizepkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10008\"\n            },\n            \"tOversizepkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10009\"\n            },\n            \"tFragments\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10010\"\n            },\n            \"tJabbers\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10011\"\n            },\n            \"tPkts64octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10012\"\n            },\n            \"tPkts65to127octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10013\"\n            },\n            \"tPkts128to255octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10014\"\n            },\n            \"tPkts256to511octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10015\"\n            },\n            \"tPkts512to1023octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10016\"\n            },\n            \"tPkts1024to1518octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10017\"\n            },\n            \"tUtilHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10018\"\n            },\n            \"tBeFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10019\"\n            },\n            \"tUbeFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10020\"\n            },\n            \"tBerFecHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10021\"\n            },\n            \"tEbOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10022\"\n            },\n            \"tEsOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10023\"\n            },\n            \"tSesOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10024\"\n            },\n            \"tUasOtu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10025\"\n            },\n            \"tEbOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10026\"\n            },\n            \"tEsOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10027\"\n            },\n            \"tSesOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10028\"\n            },\n            \"tUasOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10029\"\n            },\n            \"tDelayOduHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10030\"\n            },\n            \"tDelayOduLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10031\"\n            },\n            \"tDgdHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10032\"\n            },\n            \"tCdLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10033\"\n            },\n            \"tCdHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10034\"\n            },\n            \"tOsnrLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10035\"\n            },\n            \"tLoss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10036\"\n            },\n            \"tOprHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10037\"\n            },\n            \"tOprLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10038\"\n            },\n            \"tQfactorLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10039\"\n            },\n            \"tOptHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10040\"\n            },\n            \"tOptLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10041\"\n            },\n            \"tPdlHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10042\"\n            },\n            \"tOftHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10043\"\n            },\n            \"tOftLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10044\"\n            },\n            \"tOfrHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10045\"\n            },\n            \"tOfrLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10046\"\n            },\n            \"tCvS\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10047\"\n            },\n            \"tEsS\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10048\"\n            },\n            \"tSesS\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10049\"\n            },\n            \"tUasS\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10050\"\n            },\n            \"tSefs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10051\"\n            },\n            \"tBbeRs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10052\"\n            },\n            \"tEsRs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10053\"\n            },\n            \"tSesRs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10054\"\n            },\n            \"tUasRs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10055\"\n            },\n            \"tOfs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10056\"\n            },\n            \"tOprLaneHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10057\"\n            },\n            \"tOprLaneLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10058\"\n            },\n            \"tOprTotalHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10059\"\n            },\n            \"tOprTotalLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10060\"\n            },\n            \"tOptLaneHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10061\"\n            },\n            \"tOptLaneLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10062\"\n            },\n            \"tOptTotalHt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10063\"\n            },\n            \"tOptTotalLt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10064\"\n            },\n            \"tLossTx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10065\"\n            },\n            \"tLossRx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10066\"\n            },\n            \"init\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11001\"\n            },\n            \"swupgCompld\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11002\"\n            },\n            \"swupgFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11003\"\n            },\n            \"swupgRollback\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11004\"\n            },\n            \"upgCompld\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11005\"\n            },\n            \"upgFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11006\"\n            },\n            \"intrusion\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11007\"\n            },\n            \"userlock\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11008\"\n            },\n            \"swupgIp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11009\"\n            },\n            \"ztcFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11010\"\n            },\n            \"ztcComplete\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11011\"\n            },\n            \"dbactFail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11012\"\n            },\n            \"inactive\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11013\"\n            },\n            \"restart\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11014\"\n            },\n            \"fstoprot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11015\"\n            },\n            \"fstowkg\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11016\"\n            },\n            \"lockout\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11017\"\n            },\n            \"mantoprot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11018\"\n            },\n            \"mantowkg\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11019\"\n            },\n            \"noreq\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11020\"\n            },\n            \"sdonprot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11021\"\n            },\n            \"sdonwkg\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11022\"\n            },\n            \"sfonprot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11023\"\n            },\n            \"sfonwkg\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11024\"\n            },\n            \"wkswpr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11025\"\n            },\n            \"prswwk\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11026\"\n            },\n            \"wtr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11027\"\n            },\n            \"dnr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11028\"\n            },\n            \"authnFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11029\"\n            },\n            \"loginFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11030\"\n            },\n            \"candidatePskMismatch\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11031\"\n            },\n            \"updatePskCompld\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11032\"\n            },\n            \"candidatePskAuthenticated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11033\"\n            },\n            \"updatePskReqRcv\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11034\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFmtypesEntityTypeFm\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"t10gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"t40gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"t100gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"ochOs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"otu4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"otuc2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"otuc3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"oduc2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"oduc3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"odu4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"odu3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"odu2e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"odu2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"shelf\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"slot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"port\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"fan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"chm1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"chm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"bfm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"mgteth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"ntppeer\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"db\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"sw\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"log\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"security\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"psu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"cfp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"qsfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"time\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"user\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"ztc\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"ppp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"fc8g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"fc16g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"oduflex\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"otu2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"otu2e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"oc192\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"stm64\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"oms\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"gopt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"paoscofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"pabaofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"pairofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"palrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"paerofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"bahofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"subslot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"50\"\n            },\n            \"occ2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"51\"\n            },\n            \"omd96\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"52\"\n            },\n            \"amplifier\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"53\"\n            },\n            \"omd48S\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"54\"\n            },\n            \"omd48O\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"55\"\n            },\n            \"chm1g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"56\"\n            },\n            \"tdcmofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"57\"\n            },\n            \"bauofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"58\"\n            },\n            \"paulrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"59\"\n            },\n            \"osc\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"60\"\n            },\n            \"ots\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"61\"\n            },\n            \"sfpplus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"62\"\n            },\n            \"xtm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"63\"\n            },\n            \"omd8b1ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"64\"\n            },\n            \"omd8b2ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"65\"\n            },\n            \"opsofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"66\"\n            },\n            \"ops\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"67\"\n            },\n            \"chm1lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"68\"\n            },\n            \"chm2lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"69\"\n            },\n            \"t10gwanSonet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"70\"\n            },\n            \"t10gwanSdh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"71\"\n            },\n            \"otdrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"72\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantFmtypesServiceAffectFm\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"sa\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"nsa\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"\nSA: service affecting\nNSA: non-service affecting\n\n\t\"\"\",\n        },\n        \"CoriantFmtypesSeverityLevel\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"critical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"major\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"minor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"notAlarmed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"notReported\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"cleared\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"\nalarm severity\n\n\t\"\"\",\n        },\n        \"CoriantPmtypesPmParameter\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"all\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"eb\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"es\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ses\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"uas\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"delay\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"delayMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"delayMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"dgd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"dgdMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"dgdMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"cd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"cdMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"cdMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"osnr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"osnrMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"osnrMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"qFactor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"qFactorMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"qFactorMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"opr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"oprMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"oprMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"loss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"se\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"dropevents\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"pkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"broadcastpkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"multicastpkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"crcalignerrors\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"undersizepkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"oversizepkts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"fragments\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"jabbers\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"pkts64octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"pkts65to127octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"pkts128to255octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"pkts256to511octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"pkts512to1023octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"pkts1024to1518octets\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"utilization\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"utilizationMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"utilizationMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"beFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"ubeFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"berFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"berFecMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"berFecMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"opt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"49\"\n            },\n            \"optMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"50\"\n            },\n            \"optMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"51\"\n            },\n            \"pdl\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"52\"\n            },\n            \"pdlMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"53\"\n            },\n            \"pdlMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"54\"\n            },\n            \"oft\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"55\"\n            },\n            \"oftMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"56\"\n            },\n            \"oftMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"57\"\n            },\n            \"ofr\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"58\"\n            },\n            \"ofrMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"59\"\n            },\n            \"ofrMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"60\"\n            },\n            \"bbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"61\"\n            },\n            \"ofs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"65\"\n            },\n            \"cv\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"66\"\n            },\n            \"sefs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"67\"\n            },\n            \"oprLaneHigh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"68\"\n            },\n            \"oprLaneHighMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"69\"\n            },\n            \"oprLaneHighMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"70\"\n            },\n            \"oprLaneLow\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"71\"\n            },\n            \"oprLaneLowMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"72\"\n            },\n            \"oprLaneLowMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"73\"\n            },\n            \"oprTotal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"74\"\n            },\n            \"oprTotalMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"75\"\n            },\n            \"oprTotalMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"76\"\n            },\n            \"optLaneHigh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"77\"\n            },\n            \"optLaneHighMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"78\"\n            },\n            \"optLaneHighMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"79\"\n            },\n            \"optLaneLow\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"80\"\n            },\n            \"optLaneLowMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"81\"\n            },\n            \"optLaneLowMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"82\"\n            },\n            \"optTotal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"83\"\n            },\n            \"optTotalMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"84\"\n            },\n            \"optTotalMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"85\"\n            },\n            \"tmodule\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"86\"\n            },\n            \"tinlet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"87\"\n            },\n            \"toutlet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"88\"\n            },\n            \"tmoduleMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"89\"\n            },\n            \"tmoduleMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"90\"\n            },\n            \"tinletMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"91\"\n            },\n            \"tinletMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"92\"\n            },\n            \"toutletMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"93\"\n            },\n            \"toutletMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"94\"\n            },\n            \"berPostFec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"95\"\n            },\n            \"berPostFecMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"96\"\n            },\n            \"berPostFecMin\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"97\"\n            },\n            \"psd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"98\"\n            },\n            \"psc\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"99\"\n            },\n            \"lossTx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"100\"\n            },\n            \"lossRx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"101\"\n            },\n            \"encryptionFailRx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"102\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantPmtypesPmpType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"oduNendEgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"oduNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"otuNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"delayMeasurementOdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"coherentOpticalInterface\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"opticalPower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"loss\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"ethernetNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"ethernetNendEgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"fec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"fcNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"sonetSNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"sdhRsNendIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"sonetSNendEgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"sdhRsNendEgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"shelfTemperature\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"equipmentTemperature\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"opticalPowerLane\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"protectionSwitch\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"lossTxrx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"opticalPowerIngress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"opticalPowerEgress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"oduEncryption\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"all\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"100\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantPmtypesValidityType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"complete\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"partial\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"notAvailable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantRpcConfigurableLedTypes\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ledTest\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"locationLed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"Types of LEDs that can be enabled/disabled by the user.\"\"\",\n        },\n        \"CoriantTypesCardType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"fan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"psu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"chm1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"chm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"xtm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"chm1g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"chm1lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"chm2lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"occ2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"100\"\n            },\n            \"omd96\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"101\"\n            },\n            \"paoscofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"102\"\n            },\n            \"pabaofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"103\"\n            },\n            \"pairofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"104\"\n            },\n            \"palrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"105\"\n            },\n            \"paerofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"106\"\n            },\n            \"bahofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"107\"\n            },\n            \"omd48S\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"109\"\n            },\n            \"omd48O\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"110\"\n            },\n            \"tdcmofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"111\"\n            },\n            \"bauofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"112\"\n            },\n            \"paulrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"113\"\n            },\n            \"omd8b1ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"114\"\n            },\n            \"omd8b2ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"115\"\n            },\n            \"opsofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"116\"\n            },\n            \"otdrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"117\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesCreationscope\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"systemCreated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"userCreated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesDBPrecision1\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"dB for 0.1 precision\nUNITS:dB\"\"\",\n        },\n        \"CoriantTypesDate\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"0\"\n            },\n            {\n                \"min\" : \"10\",\n                \"max\" : \"10\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"10\"\n            },\n            \"description\" :\n                \"\"\"The type of date show the mm/dd/year. The date type does not allow negative years\"\"\",\n        },\n        \"CoriantTypesDecimalFract1\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesDuplexMode\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"na\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"full\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"half\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesEnableSwitch\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"enabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"disabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesEquipmentType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"empty\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"filled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"reserved\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"unrecognized\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"fan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"psu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"chm1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"chm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"bfm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"xtm2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"chm1g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"chm1lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"chm2lh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"qsfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"cfp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"sfpplus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"occ2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"100\"\n            },\n            \"omd96\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"101\"\n            },\n            \"paoscofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"102\"\n            },\n            \"pabaofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"103\"\n            },\n            \"pairofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"104\"\n            },\n            \"palrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"105\"\n            },\n            \"paerofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"106\"\n            },\n            \"bahofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"107\"\n            },\n            \"omd48S\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"109\"\n            },\n            \"omd48O\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"110\"\n            },\n            \"tdcmofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"111\"\n            },\n            \"bauofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"112\"\n            },\n            \"paulrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"113\"\n            },\n            \"omd8b1ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"114\"\n            },\n            \"omd8b2ofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"115\"\n            },\n            \"opsofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"116\"\n            },\n            \"otdrofp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"117\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesEthFec\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"enabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"disabled\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"auto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesEthernetRate\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"na\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"t10\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"t100\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"t1000\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"maxRate\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"NULL\nUNITS:Mbit/s\"\"\",\n        },\n        \"CoriantTypesFilename\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"128\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"128\"\n            },\n            \"description\" :\n                \"\"\"String representing a filename\"\"\",\n        },\n        \"CoriantTypesFlowControl\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"na\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"txRx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"tx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"rx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesFreq\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"0\"\n            },\n            {\n                \"min\" : \"191300000\",\n                \"max\" : \"196111250\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"196111250\"\n            },\n            \"description\" :\n                \"\"\"Supported Frequency Range.\nUNITS:MHz\"\"\",\n        },\n        \"CoriantTypesFtpPath\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"1024\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"1024\"\n            },\n            \"description\" :\n                \"\"\"Representation of a FTP/STPF/FTPS/SCP path 'ftp://user@hostname/directorypath/filename'\nor an HTTP URL 'http://domain.com/filename'\n\t\"\"\",\n        },\n        \"CoriantTypesManagementDirection\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"ingress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"egress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesManagementLocation\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"nearEnd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"farEnd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesManagementTimePeriod\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"t15min\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"t24h\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"all\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"t1min\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"t1h\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesNameIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesNumberList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"List of numbers using ',' as separator and '..' to represent ranges. \nExamples: '12' , '1..4' , '1,5,10..12,20' \n\t\"\"\",\n        },\n        \"CoriantTypesOduType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unused\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"odu0\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"odu1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"odu2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"odu2e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"odu3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"odu3e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"odu4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"oduflex\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"oduc2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"oduc3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesOnOff\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesOpticalDB\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Optical Attribute value with Unit dB\nUNITS:dB\"\"\",\n        },\n        \"CoriantTypesOpticalPower\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Optical Power value in dBm\nUNITS:dBm\"\"\",\n        },\n        \"CoriantTypesOtukFec\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"sdfec15\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"sdfec25\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"g709\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"i4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"i7\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"nofec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"staircase7\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"sdfec15nd\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesPassword\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"8\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"8\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"Any ASCII values between 32 and 126 decimal\"\"\",\n        },\n        \"CoriantTypesPercentage\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"100\"\n            },\n            \"description\" :\n                \"\"\"NULL\nUNITS:%\"\"\",\n        },\n        \"CoriantTypesPluggableFormFactor\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"unrecognized\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"qsfpplus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"qsfp28\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"cfp2Aco\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"sfpplus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"sfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"xfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"Indicating the exact form factor of the pluggable.\"\"\",\n        },\n        \"CoriantTypesPluggableType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"qsfp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"cfp2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"sfpplus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesPortId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesPortMode\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"t10gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"t40gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"t100gbe\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"subport\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"qpsk100g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"t8qam300g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"t16qam200g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"fc16g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"fc8g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"otu4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"otu2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"otu2e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"oc192\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"stm64\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"ochosOtu2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"ochosOtu2e\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"t8qam200g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"t10gwanSonet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"t10gwanSdh\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesPower\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Power consumption value in W(WAT)\nUNITS:W\"\"\",\n        },\n        \"CoriantTypesRtpType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"direct\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"static\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ospfv2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"Type of the routing protocol.\"\"\",\n        },\n        \"CoriantTypesSessionId\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"21\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"21\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesShelfId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesSlotId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesSnmpString\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesSourceProtocol\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"direct\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"static\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ospfv2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesSubslotId\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesTemperature\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Temperature value in degree Celsius.\nUNITS:Celsius\"\"\",\n        },\n        \"CoriantTypesTemperaturePrecision3\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Temperature value in Celsius with 0.001 precision\nUNITS:Celsius\"\"\",\n        },\n        \"CoriantTypesTestSignalConfig\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"none\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"rxtx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesTestSignalType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"none\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"prbs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"idle\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesTimMode\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"none\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"sapi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"dapi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"oper\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"sapiDapi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"sapiOper\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"dapiOper\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"sapiDapiOper\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesTimePeriod\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"8\",\n                \"max\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"Representation of a time period in 'hh:mm:ss'\"\"\",\n        },\n        \"CoriantTypesTypeOfDirection\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"notApplicable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"tx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"rx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"rxtx\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"CoriantTypesUserName\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"20\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"20\"\n            },\n            \"description\" :\n                \"\"\"According with Linux user-name pattern\"\"\",\n        },\n        \"CoriantTypesYesNo\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"yes\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"no\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"IetfInetTypesAsNumber\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The as-number type represents autonomous system numbers\nwhich identify an Autonomous System (AS).  An AS is a set\nof routers under a single technical administration, using\nan interior gateway protocol and common metrics to route\npackets within the AS, and using an exterior gateway\nprotocol to route packets to other ASes.  IANA maintains\nthe AS number space and has delegated large parts to the\nregional registries. \n\nAutonomous system numbers were originally limited to 16\nbits.  BGP extensions have enlarged the autonomous system\nnumber space to 32 bits.  This type therefore uses an uint32\nbase type without a range restriction in order to support\na larger autonomous system number space.\n\nIn the value set and its semantics, this type is equivalent\nto the InetAutonomousSystemNumber textual convention of\nthe SMIv2.\n\t\"\"\",\n        },\n        \"IetfInetTypesDomainName\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"253\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"253\"\n            },\n            \"description\" :\n                \"\"\"The domain-name type represents a DNS domain name.  The\nname SHOULD be fully qualified whenever possible. \n\nInternet domain names are only loosely specified.  Section\n3.5 of RFC 1034 recommends a syntax (modified in Section\n2.1 of RFC 1123).  The pattern above is intended to allow\nfor current practice in domain name use, and some possible\nfuture expansion.  It is designed to hold various types of\ndomain names, including names used for A or AAAA records\n(host names) and other records, such as SRV records.  Note\nthat Internet host names have a stricter syntax (described\nin RFC 952) than the DNS recommendations in RFCs 1034 and\n1123, and that systems that want to store host names in\nschema nodes using the domain-name type are recommended to\nadhere to this stricter standard to ensure interoperability.\n\nThe encoding of DNS names in the DNS protocol is limited\nto 255 characters.  Since the encoding consists of labels\nprefixed by a length bytes and there is a trailing NULL\nbyte, only 253 characters can appear in the textual dotted\nnotation.\n\nThe description clause of schema nodes using the domain-name\ntype MUST describe when and how these names are resolved to\nIP addresses.  Note that the resolution of a domain-name value\nmay require to query multiple DNS records (e.g., A for IPv4\nand AAAA for IPv6).  The order of the resolution process and\nwhich DNS record takes precedence can either be defined\nexplicitly or may depend on the configuration of the\nresolver.\n\nDomain-name values use the US-ASCII encoding.  Their canonical\nformat uses lowercase US-ASCII characters.  Internationalized\ndomain names MUST be A-labels as per RFC 5890.\n\t\"\"\",\n        },\n        \"IetfInetTypesDscp\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"63\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"63\"\n            },\n            \"description\" :\n                \"\"\"The dscp type represents a Differentiated Services Code Point\nthat may be used for marking packets in a traffic stream. \nIn the value set and its semantics, this type is equivalent\nto the Dscp textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfInetTypesHost\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The host type represents either an IP address or a DNS\ndomain name.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ip-address type represents an IP address and is IP\nversion neutral.  The format of the textual representation\nimplies the IP version.  This type supports scoped addresses\nby allowing zone identifiers in the address format.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpAddressNoZone\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ip-address-no-zone type represents an IP address and is\nIP version neutral.  The format of the textual representation\nimplies the IP version.  This type does not support scoped\naddresses since it does not allow zone identifiers in the\naddress format.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpPrefix\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ip-prefix type represents an IP prefix and is IP\nversion neutral.  The format of the textual representations\nimplies the IP version.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpVersion\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"ipv4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"ipv6\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"This value represents the version of the IP protocol. \n\nIn the value set and its semantics, this type is equivalent\nto the InetVersion textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv4Address\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ipv4-address type represents an IPv4 address in\ndotted-quad notation.  The IPv4 address may include a zone\nindex, separated by a % sign.\n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\nThe canonical format for the zone index is the numerical\nformat\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv4AddressNoZone\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An IPv4 address without a zone index.  This type, derived from\nipv4-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv4Prefix\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ipv4-prefix type represents an IPv4 address prefix. \nThe prefix length is given by the number following the\nslash character and must be less than or equal to 32. \n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe canonical format of an IPv4 prefix has all bits of\nthe IPv4 address set to zero that are not part of the\nIPv4 prefix.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv6Address\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ipv6-address type represents an IPv6 address in full,\nmixed, shortened, and shortened-mixed notation.  The IPv6\naddress may include a zone index, separated by a % sign. \n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\n\n\nThe canonical format of IPv6 addresses uses the textual\nrepresentation defined in Section 4 of RFC 5952.  The\ncanonical format for the zone index is the numerical\nformat as described in Section 11.2 of RFC 4007.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv6AddressNoZone\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An IPv6 address without a zone index.  This type, derived from\nipv6-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv6FlowLabel\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"1048575\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"1048575\"\n            },\n            \"description\" :\n                \"\"\"The ipv6-flow-label type represents the flow identifier or Flow\nLabel in an IPv6 packet header that may be used to\ndiscriminate traffic flows. \n\nIn the value set and its semantics, this type is equivalent\nto the IPv6FlowLabel textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfInetTypesIpv6Prefix\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The ipv6-prefix type represents an IPv6 address prefix. \nThe prefix length is given by the number following the\nslash character and must be less than or equal to 128. \n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe IPv6 address should have all bits that do not belong\nto the prefix set to zero.\n\nThe canonical format of an IPv6 prefix has all bits of\nthe IPv6 address set to zero that are not part of the\nIPv6 prefix.  Furthermore, the IPv6 address is represented\nas defined in Section 4 of RFC 5952.\n\t\"\"\",\n        },\n        \"IetfInetTypesPortNumber\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"The port-number type represents a 16-bit port number of an\nInternet transport-layer protocol such as UDP, TCP, DCCP, or\nSCTP.  Port numbers are assigned by IANA.  A current list of\nall assignments is available from <http://www.iana.org/>.  \n\nNote that the port number value zero is reserved by IANA.  In\nsituations where the value zero does not make sense, it can\nbe excluded by subtyping the port-number type.\nIn the value set and its semantics, this type is equivalent\nto the InetPortNumber textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfInetTypesUri\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The uri type represents a Uniform Resource Identifier\n(URI) as defined by STD 66. \n\nObjects using the uri type MUST be in US-ASCII encoding,\nand MUST be normalized as described by RFC 3986 Sections\n6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary\npercent-encoding is removed, and all case-insensitive\ncharacters are set to lowercase except for hexadecimal\ndigits, which are normalized to uppercase as described in\nSection 6.2.2.1.\n\nThe purpose of this normalization is to help provide\nunique URIs.  Note that this normalization is not\nsufficient to provide uniqueness.  Two URIs that are\ntextually distinct after this normalization may still be\nequivalent. \n\nObjects using the uri type may restrict the schemes that\nthey permit.  For example, 'data:' and 'urn:' schemes\nmight not be appropriate.\n\nA zero-length URI is not a valid URI.  This can be used to\nexpress 'URI absent' where required.\n\nIn the value set and its semantics, this type is equivalent\nto the Uri SMIv2 textual convention defined in RFC 5017.\n\t\"\"\",\n        },\n        \"IetfNetconfAcmAccessOperationsType\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"create\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"read\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"update\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"delete\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"exec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"NETCONF Access Operation.\"\"\",\n        },\n        \"IetfNetconfAcmActionType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"permit\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"deny\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"Action taken by the server when a particular\nrule matches.\n\t\"\"\",\n        },\n        \"IetfNetconfAcmGroupNameType\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"Name of administrative group to which\nusers can be assigned.\n\t\"\"\",\n        },\n        \"IetfNetconfAcmMatchallStringType\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The string containing a single asterisk '*' is used\nto conceptually represent all possible values\nfor the particular leaf using this data type.\n\t\"\"\",\n        },\n        \"IetfNetconfAcmNodeInstanceIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Path expression used to represent a special\ndata node instance identifier string. \n\nA node-instance-identifier value is an\nunrestricted YANG instance-identifier expression.\nAll the same rules as an instance-identifier apply\nexcept predicates for keys are optional.  If a key\npredicate is missing, then the node-instance-identifier\nrepresents all possible server instances for that key.\n\nThis XPath expression is evaluated in the following context:\n\n o  The set of namespace declarations are those in scope on\n    the leaf element where this type is used.\n\n o  The set of variable bindings contains one variable,\n    'USER', which contains the name of the user of the current\n     session.\n\n o  The function library is the core function library, but\n    note that due to the syntax restrictions of an\n    instance-identifier, no functions are allowed.\n\n o  The context node is the root node in the data tree.\n\t\"\"\",\n        },\n        \"IetfNetconfAcmUserNameType\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"General Purpose Username string.\"\"\",\n        },\n        \"IetfNetconfEditOperationType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"merge\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"replace\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"create\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"delete\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"remove\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"NETCONF 'operation' attribute values\"\"\",\n        },\n        \"IetfNetconfErrorSeverityType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"error\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"warning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"NETCONF Error Severity\"\"\",\n        },\n        \"IetfNetconfErrorTagType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"inUse\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"invalidValue\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"tooBig\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"missingAttribute\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"badAttribute\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"unknownAttribute\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"missingElement\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"badElement\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"unknownElement\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"unknownNamespace\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"accessDenied\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"lockDenied\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"resourceDenied\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"rollbackFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"dataExists\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"dataMissing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"operationNotSupported\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"operationFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"partialOperation\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"malformedMessage\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"description\" :\n                \"\"\"NETCONF Error Tag\"\"\",\n        },\n        \"IetfNetconfSessionIdOrZeroType\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NETCONF Session Id or Zero to indicate none\"\"\",\n        },\n        \"IetfNetconfSessionIdType\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"4294967295\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"4294967295\"\n            },\n            \"description\" :\n                \"\"\"NETCONF Session Id\"\"\",\n        },\n        \"IetfNetconfWithDefaultsWithDefaultsMode\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"reportAll\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"reportAllTagged\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"trim\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"explicit\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"Possible modes to report default data.\"\"\",\n        },\n        \"IetfYangTypesCounter32\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The counter32 type represents a non-negative integer\nthat monotonically increases until it reaches a\nmaximum value of 2^32-1 (4294967295 decimal), when it\nwraps around and starts increasing again from zero. \n\nCounters have no defined 'initial' value, and thus, a\nsingle value of a counter has (in general) no information\ncontent.  Discontinuities in the monotonically increasing\nvalue normally occur at re-initialization of the\nmanagement system, and at other times as specified in the\ndescription of a schema node using this type.  If such\nother times can occur, for example, the creation of\na schema node of type counter32 at times other than\nre-initialization, then a corresponding schema node\nshould be defined, with an appropriate type, to indicate\nthe last discontinuity.\n\nThe counter32 type should not be used for configuration\nschema nodes.  A default statement SHOULD NOT be used in\ncombination with the type counter32.\n\nIn the value set and its semantics, this type is equivalent\nto the Counter32 type of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesCounter64\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The counter64 type represents a non-negative integer\nthat monotonically increases until it reaches a\nmaximum value of 2^64-1 (18446744073709551615 decimal),\nwhen it wraps around and starts increasing again from zero. \n\nCounters have no defined 'initial' value, and thus, a\nsingle value of a counter has (in general) no information\ncontent.  Discontinuities in the monotonically increasing\nvalue normally occur at re-initialization of the\nmanagement system, and at other times as specified in the\ndescription of a schema node using this type.  If such\nother times can occur, for example, the creation of\na schema node of type counter64 at times other than\nre-initialization, then a corresponding schema node\nshould be defined, with an appropriate type, to indicate\nthe last discontinuity.\n\nThe counter64 type should not be used for configuration\nschema nodes.  A default statement SHOULD NOT be used in\ncombination with the type counter64.\n\nIn the value set and its semantics, this type is equivalent\nto the Counter64 type of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesDateAndTime\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The date-and-time type is a profile of the ISO 8601\nstandard for representation of dates and times using the\nGregorian calendar.  The profile is defined by the\ndate-time production in Section 5.6 of RFC 3339.\n\nThe date-and-time type is compatible with the dateTime XML\nschema type with the following notable exceptions:\n\n(a) The date-and-time type does not allow negative years.\n\n(b) The date-and-time time-offset -00:00 indicates an unknown\n    time zone (see RFC 3339) while -00:00 and +00:00 and Z\n    all represent the same time zone in dateTime.\n\n(c) The canonical format (see below) of data-and-time values\n    differs from the canonical format used by the dateTime XML\n    schema type, which requires all times to be in UTC using\n    the time-offset 'Z'.\n\nThis type is not equivalent to the DateAndTime textual\nconvention of the SMIv2 since RFC 3339 uses a different\nseparator between full-date and full-time and provides\nhigher resolution of time-secfrac.\n\nThe canonical format for date-and-time values with a known time\nzone uses a numeric time zone offset that is calculated using\nthe device's configured known offset to UTC time.  A change of\nthe device's offset to UTC time will cause date-and-time values\nto change accordingly.  Such changes might happen periodically\nin case a server follows automatically daylight saving time\n(DST) time zone offset changes.  The canonical format for\ndate-and-time values with an unknown time zone (usually\nreferring to the notion of local time) uses the time-offset\n-00:00.\n\t\"\"\",\n        },\n        \"IetfYangTypesDottedQuad\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An unsigned 32-bit number expressed in the dotted-quad\nnotation, i.e., four octets written as decimal numbers\nand separated with the '.' (full stop) character.\n\t\"\"\",\n        },\n        \"IetfYangTypesGauge32\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The gauge32 type represents a non-negative integer, which\nmay increase or decrease, but shall never exceed a maximum\nvalue, nor fall below a minimum value.  The maximum value\ncannot be greater than 2^32-1 (4294967295 decimal), and\nthe minimum value cannot be smaller than 0.  The value of\na gauge32 has its maximum value whenever the information\nbeing modeled is greater than or equal to its maximum\nvalue, and has its minimum value whenever the information\nbeing modeled is smaller than or equal to its minimum value.\nIf the information being modeled subsequently decreases\nbelow (increases above) the maximum (minimum) value, the\ngauge32 also decreases (increases).\n\nIn the value set and its semantics, this type is equivalent\nto the Gauge32 type of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesGauge64\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The gauge64 type represents a non-negative integer, which\nmay increase or decrease, but shall never exceed a maximum\nvalue, nor fall below a minimum value.  The maximum value\ncannot be greater than 2^64-1 (18446744073709551615), and\nthe minimum value cannot be smaller than 0.  The value of\na gauge64 has its maximum value whenever the information\nbeing modeled is greater than or equal to its maximum\nvalue, and has its minimum value whenever the information\nbeing modeled is smaller than or equal to its minimum value.\nIf the information being modeled subsequently decreases\nbelow (increases above) the maximum (minimum) value, the\ngauge64 also decreases (increases).\n\nIn the value set and its semantics, this type is equivalent\nto the CounterBasedGauge64 SMIv2 textual convention defined\nin RFC 2856\n\t\"\"\",\n        },\n        \"IetfYangTypesHexString\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A hexadecimal string with octets represented as hex digits\nseparated by colons.  The canonical representation uses\nlowercase characters.\n\t\"\"\",\n        },\n        \"IetfYangTypesMacAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The mac-address type represents an IEEE 802 MAC address. \nThe canonical representation uses lowercase characters.\n\nIn the value set and its semantics, this type is equivalent\nto the MacAddress textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesObjectIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The object-identifier type represents administratively\nassigned names in a registration-hierarchical-name tree. \n\nValues of this type are denoted as a sequence of numerical\nnon-negative sub-identifier values.  Each sub-identifier\nvalue MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers\nare separated by single dots and without any intermediate\nwhitespace.\n\nThe ASN.1 standard restricts the value space of the first\nsub-identifier to 0, 1, or 2.  Furthermore, the value space\nof the second sub-identifier is restricted to the range\n0 to 39 if the first sub-identifier is 0 or 1.  Finally,\nthe ASN.1 standard requires that an object identifier\nhas always at least two sub-identifiers.  The pattern\ncaptures these restrictions.\n\nAlthough the number of sub-identifiers is not limited,\nmodule designers should realize that there may be\nimplementations that stick with the SMIv2 limit of 128\nsub-identifiers.\n\nThis type is a superset of the SMIv2 OBJECT IDENTIFIER type\nsince it is not restricted to 128 sub-identifiers.  Hence,\nthis type SHOULD NOT be used to represent the SMIv2 OBJECT\nIDENTIFIER type; the object-identifier-128 type SHOULD be\nused instead.\n\t\"\"\",\n        },\n        \"IetfYangTypesObjectIdentifier128\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This type represents object-identifiers restricted to 128\nsub-identifiers. \n\nIn the value set and its semantics, this type is equivalent\nto the OBJECT IDENTIFIER type of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesPhysAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents media- or physical-level addresses represented\nas a sequence octets, each octet represented by two hexadecimal\nnumbers.  Octets are separated by colons.  The canonical\nrepresentation uses lowercase characters.\n\nIn the value set and its semantics, this type is equivalent\nto the PhysAddress textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesTimestamp\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The timestamp type represents the value of an associated\ntimeticks schema node at which a specific occurrence\nhappened.  The specific occurrence must be defined in the\ndescription of any schema node defined using this type.  When\nthe specific occurrence occurred prior to the last time the\nassociated timeticks attribute was zero, then the timestamp\nvalue is zero.  Note that this requires all timestamp values\nto be reset to zero when the value of the associated timeticks\nattribute reaches 497+ days and wraps around to zero.\n\nThe associated timeticks schema node must be specified\nin the description of any schema node using this type.\n\nIn the value set and its semantics, this type is equivalent\nto the TimeStamp textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesTimeticks\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The timeticks type represents a non-negative integer that\nrepresents the time, modulo 2^32 (4294967296 decimal), in\nhundredths of a second between two epochs.  When a schema\nnode is defined that uses this type, the description of\nthe schema node identifies both of the reference epochs.\n\nIn the value set and its semantics, this type is equivalent\nto the TimeTicks type of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesUuid\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A Universally Unique IDentifier in the string representation\ndefined in RFC 4122.  The canonical representation uses\nlowercase characters.\n\nThe following is an example of a UUID in string representation:\nf81d4fae-7dec-11d0-a765-00a0c91e6bf6\n\n\t\"\"\",\n        },\n        \"IetfYangTypesXpath10\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This type represents an XPATH 1.0 expression. \n\nWhen a schema node is defined that uses this type, the\ndescription of the schema node MUST specify the XPath\ncontext in which the XPath expression is evaluated.\n\t\"\"\",\n        },\n        \"IetfYangTypesYangIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"A YANG identifier string as defined by the 'identifier'\nrule in Section 12 of RFC 6020.  An identifier must\nstart with an alphabetic character or an underscore\nfollowed by an arbitrary sequence of alphabetic or\nnumeric characters, underscores, hyphens, or dots.\n\nA YANG identifier MUST NOT start with any possible\ncombination of the lowercase or uppercase character\nsequence 'xml'.\n\t\"\"\",\n        },\n        \"IetfYangTypesZeroBasedCounter32\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The zero-based-counter32 type represents a counter32\nthat has the defined 'initial' value zero.\n\nA schema node of this type will be set to zero (0) on creation\nand will thereafter increase monotonically until it reaches\na maximum value of 2^32-1 (4294967295 decimal), when it\nwraps around and starts increasing again from zero.\n\nProvided that an application discovers a new schema node\nof this type within the minimum time to wrap, it can use the\n'initial' value as a delta.  It is important for a management\nstation to be aware of this minimum time and the actual time\nbetween polls, and to discard data if the actual time is too\nlong or there is no defined minimum time.\n\nIn the value set and its semantics, this type is equivalent\nto the ZeroBasedCounter32 textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"IetfYangTypesZeroBasedCounter64\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The zero-based-counter64 type represents a counter64 that\nhas the defined 'initial' value zero. \n\n\n\n\nA schema node of this type will be set to zero (0) on creation\nand will thereafter increase monotonically until it reaches\na maximum value of 2^64-1 (18446744073709551615 decimal),\nwhen it wraps around and starts increasing again from zero.\n\nProvided that an application discovers a new schema node\nof this type within the minimum time to wrap, it can use the\n'initial' value as a delta.  It is important for a management\nstation to be aware of this minimum time and the actual time\nbetween polls, and to discard data if the actual time is too\nlong or there is no defined minimum time.\n\nIn the value set and its semantics, this type is equivalent\nto the ZeroBasedCounter64 textual convention of the SMIv2.\n\t\"\"\",\n        },\n        \"KeySyncSessionCertificateRef\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"certificate to be referred to.\"\"\",\n        },\n        \"KeySyncSessionInterfaceRef\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Interface to be referred to.\"\"\",\n        },\n        \"LldpLldpSysCap\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"repeater\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"bridge\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"wlanaccesspoint\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"router\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"telephone\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"docsiscabledevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"stationonly\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"cvlancomponent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"svlancomponent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"twoportmacrelay\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"OpticalCommonSupportingPort\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"References one individual port, or no port at all\"\"\",\n        },\n        \"OtdrOtdrIor\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"OtdrOtdrPulseWidth\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n        \"OtdrOtdrRange\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"coriant\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1\",\n        }, # node\n        \"groove\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2\",\n            \"status\" : \"current\",\n        }, # node\n        \"fault\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1\",\n        }, # node\n        \"notificationInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1\",\n        }, # node\n        \"notificationObject\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1\",\n        }, # node\n        \"notificationFmEntity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The management object instance which the alarm or condition is reported against.\"\"\",\n        }, # scalar\n        \"notificationConditionType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesConditionType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the current standing conditions which cause alarms and/or events.\"\"\",\n        }, # scalar\n        \"notificationLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementLocation\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates if the alarm or event location is near end or far end.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationDirection\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementDirection\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the direction of an event/occurrence in the system, Ingress, Egress, NA.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationTimePeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementTimePeriod\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the time-period increments during which PM data is collected.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationServiceAffect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesServiceAffectFm\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates if an alarm is service affecting or non-service affecting.\nNSA indicates non-service affecting.\nSA indicates service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationSeverityLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesSeverityLevel\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the notification code (severity level) associated with the alarm type of service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationOccurrenceDateTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the occurrence date and time of the alarm by the month of the year, the day of the month, hour of the day, the minute of the hour, and the second of the minute.\"\"\",\n        }, # scalar\n        \"notificationConditionDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDescribes the condition that caused the alarm. \n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationAlarmConditionType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"transient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm condition types, for example, standing or transient.\"\"\",\n        }, # scalar\n        \"notificationLastSeverityLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesSeverityLevel\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the last severity level associated with the alarm type,\nwhich provides the info of alarm severity declared and cleared.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationExtensionDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe description in alarm notification to provide additional information.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationFmEntityType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesEntityTypeFm\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the entity type the condition associated, which provides additional information for the object instance having the condition.\nentity type is not exactly same as MO. Entity type have smaller granularity referring to\ndifferent service functions, e.g. 100GBase-R, 40GBase-R, 100GBase-R, ODU4, ODU2, ODU3, OTU4, OTUC2...\nSeparate functions will have different entity types so that profile can be set differently for different\nservice function which is more corresponding to user application.\n\n\t\n\t\n\t\"\"\",\n        }, # scalar\n        \"notificationTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.2\",\n        }, # node\n        \"alarmProfile\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.4\",\n        }, # node\n        \"alarmProfileTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Alarm profile defines the severity profile of alarm and event.\"\"\",\n        }, # table\n        \"alarmProfileEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alarmProfileId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of alarmProfileTable\"\"\",\n        }, # row\n        \"alarmProfileId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nalarm profile identifier which uniquely specify alarm profile.\nalarm profile 1 is supported firstly and applicable to all entities implicitly.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"alarmProfileENTR\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5\",\n        }, # node\n        \"alarmProfileENTRTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list includes alarm/event entries of an alarm-profile.\"\"\",\n        }, # table\n        \"alarmProfileENTREntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alarmProfileId\",\n                \"alarmProfileENTRConditionType\",\n                \"alarmProfileENTRFmEntityType\",\n                \"alarmProfileENTRTimePeriod\",\n            ],\n            \"description\" :\n                \"\"\"Entry of alarmProfileENTRTable\"\"\",\n        }, # row\n        \"alarmProfileENTRConditionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesConditionType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifies the current standing conditions which cause conditions and/or events.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"alarmProfileENTRFmEntityType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesEntityTypeFm\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the entity type the condition associated, which provides additional information for the object instance having the condition.\nentity type is not exactly same as MO. Entity type have smaller granularity referring to \ndifferent service functions, e.g. 100GBase-R, 40GBase-R, 100GBase-R, ODU4, ODU2, ODU3, OTU4, OTUC2...\nSeparate functions will have different entity types so that profile can be set differently for different\nservice function which is more corresponding to user application.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"alarmProfileENTRTimePeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementTimePeriod\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the time-period increments during which PM data is collected.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"alarmProfileENTRSeverityLevelSa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesSeverityLevel\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the notification code (severity level) associated with the condition type of service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"alarmProfileENTRSeverityLevelNsa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesSeverityLevel\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the notification code (severity level) associated with the condition type of non-service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingCondition\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6\",\n        }, # node\n        \"standingConditionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list includes active standing alarms.\"\"\",\n        }, # table\n        \"standingConditionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"standingConditionFmEntity\",\n                \"standingConditionConditionType\",\n                \"standingConditionLocation\",\n                \"standingConditionDirection\",\n                \"standingConditionTimePeriod\",\n            ],\n            \"description\" :\n                \"\"\"Entry of standingConditionTable\"\"\",\n        }, # row\n        \"standingConditionFmEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The management object instance which the alarm or condition is reported against.\"\"\",\n        }, # column\n        \"standingConditionConditionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesConditionType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the current standing conditions which cause alarms and/or events.\"\"\",\n        }, # column\n        \"standingConditionLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementLocation\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates if the alarm or event location is near end or far end.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementDirection\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the direction of an event/occurrence in the system, Ingress, Egress, NA.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionTimePeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementTimePeriod\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the time-period increments during which PM data is collected.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionServiceAffect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesServiceAffectFm\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates if an alarm is service affecting or non-service affecting.\nNSA indicates non-service affecting.\nSA indicates service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionSeverityLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesSeverityLevel\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the notification code (severity level) associated with the alarm type of service affecting.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionOccurrenceDateTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the occurrence date and time of the alarm by the month of the year, the day of the month, hour of the day, the minute of the hour, and the second of the minute.\"\"\",\n        }, # column\n        \"standingConditionConditionDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDescribes the condition that caused the alarm. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"standingConditionFmEntityType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.6.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFmtypesEntityTypeFm\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the entity type the condition associated, which provides additional information for the object instance having the condition.\nentity type is not exactly same as MO. Entity type have smaller granularity referring to\ndifferent service functions, e.g. 100GBase-R, 40GBase-R, 100GBase-R, ODU4, ODU2, ODU3, OTU4, OTUC2...\nSeparate functions will have different entity types so that profile can be set differently for different\nservice function which is more corresponding to user application.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ne\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2\",\n        }, # node\n        \"neInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1\",\n        }, # node\n        \"neId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nNetwork Element's system identification code. \nNote that this is unique identifier for each NE.\n\n\t\n\t\n\tdefault value :\"\"\",\n        }, # scalar\n        \"neName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nName assigned to this particular NE. \nA readable name for the NE. It can be used for NE.\nBut not expected to be used by NM for unique NE identification\nThe different function from ne-id is that user can keep ne-id unchanged,\nwhich uniquely identifies the NE, and update ne-name if necessary.\n\n\t\n\t\n\tdefault value :\"\"\",\n        }, # scalar\n        \"neType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the NE\n\n\ndefault value :GROOVE_G30\"\"\",\n        }, # scalar\n        \"neLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the location of this particular NE\"\"\",\n        }, # scalar\n        \"neSite\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name or CLLI of the site where this NE is located\"\"\",\n        }, # scalar\n        \"neAltitude\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The altitude of the Network Element in meters\n\nUNITS:meters\"\"\",\n        }, # scalar\n        \"neVendor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vendor name of this NE\n\n\ndefault value :Coriant\"\"\",\n        }, # scalar\n        \"neTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Ambient temperature sensed by the primary shelf for NE level\"\"\",\n        }, # scalar\n        \"system\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.2\",\n        }, # node\n        \"systemUnknownPluggableReport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute will enable/disable the alarm reporting for unknown pluggables present on the NE.\n\n\t\n\t\n\tdefault value :enabled\"\"\",\n        }, # scalar\n        \"systemPowerConsumptionCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current power consumption of the system.\"\"\",\n        }, # scalar\n        \"systemPowerConsumptionEstimatedMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Derived maximal power consumption around room temperature.\"\"\",\n        }, # scalar\n        \"systemFactoryResetButton\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute will enable/disable factory reset button function on the NE.\n\n\t\n\t\n\tdefault value :enabled\"\"\",\n        }, # scalar\n        \"console\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.3\",\n        }, # node\n        \"consoleBaudRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"t9600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"t19200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"t38400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"t57600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"t115200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The baud rate of console port\n\n\ndefault value :9600\"\"\",\n        }, # scalar\n        \"equipment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3\",\n        }, # node\n        \"shelf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1\",\n        }, # node\n        \"shelfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"shelfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of shelfTable\"\"\",\n        }, # row\n        \"shelfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesShelfId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the shelf. \nIt shall be an integer number and assigned implicitly by the system or setting through coder on the shelf.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"shelfLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the location of this particular shelf.\"\"\",\n        }, # column\n        \"shelfInletTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"shelf inlet temperature\"\"\",\n        }, # column\n        \"shelfOutletTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"shelf outlet temperature\"\"\",\n        }, # column\n        \"shelfAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"shelfOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"shelfAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"shelfAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"slot\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2\",\n        }, # node\n        \"slotTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"slotEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of slotTable\"\"\",\n        }, # row\n        \"slotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSlotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the slot. It shall be an integer number and assigned \nimplicitly by the system. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"slotActualCardType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEquipmentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nEquipment type for each slot/subslot according to the actually equipping. \nNeeds to be re-defined in the project specific model.\n\n\t\n\t\n\tdefault value :empty\"\"\",\n        }, # column\n        \"slotPossibleCardTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDefined all the equipment types which can be installed on the slot/subslot. \nThis is a leaf list, encode by some leafs.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"slotAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"slotOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"slotAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"slotAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"card\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3\",\n        }, # node\n        \"cardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Card is a container carried by a slot.\"\"\",\n        }, # table\n        \"cardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cardTable\"\"\",\n        }, # row\n        \"cardRequiredType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesCardType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates the equipment type to identify the module. \nNeeds to be re-defined in the project specific model. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"cardEquipmentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates an additional field to identify the module. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"cardAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"cardOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"cardAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\tdefault value :unknown\"\"\",\n        }, # column\n        \"cardAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"cardFanSpeedRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fan speed of percentage.\nConditions:../required-type = 'FAN'\"\"\",\n        }, # column\n        \"cardSwitchingType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"otn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tdm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"optical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"packet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The traffic switching type of card.\nConditions:(../required-type != 'FAN') and (../required-type != 'PSU')\n\ndefault value :otn\"\"\",\n        }, # column\n        \"cardTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature at the monitoring point.\"\"\",\n        }, # column\n        \"cardMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"regen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify the card mode, e.g. normal or regen.\n\n\ndefault value :normal\"\"\",\n        }, # column\n        \"subslot\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4\",\n        }, # node\n        \"subslotTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"subslotEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of subslotTable\"\"\",\n        }, # row\n        \"subslotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSlotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the subslot. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subslotActualCardType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEquipmentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nEquipment type for each slot/subslot according to the actually equipping. \nNeeds to be re-defined in the project specific model.\n\n\t\n\t\n\tdefault value :empty\"\"\",\n        }, # column\n        \"subslotPossibleCardTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDefined all the equipment types which can be installed on the slot/subslot. \nThis is a leaf list, encode by some leafs.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subslotAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subslotOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subslotAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subslotAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"subcard\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5\",\n        }, # node\n        \"subcardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Subcard is a container carried by a subslot.\"\"\",\n        }, # table\n        \"subcardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of subcardTable\"\"\",\n        }, # row\n        \"subcardRequiredType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesCardType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates the equipment type to identify the module. \nNeeds to be re-defined in the project specific model. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subcardEquipmentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates an additional field to identify the module. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subcardAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subcardOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subcardAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\tdefault value :unknown\"\"\",\n        }, # column\n        \"subcardAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"subcardTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature at the monitoring point.\"\"\",\n        }, # column\n        \"port\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6\",\n        }, # node\n        \"portTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"portEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of portTable\"\"\",\n        }, # row\n        \"portId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The identifier is defined to uniquely identify the port.\"\"\",\n        }, # column\n        \"portPossiblePluggableTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDefined all the pluggable types which can be equipped on the port. \nNeeds to be re-defined in the project specific model.\nThis is a leaf list, encode by some leafs.\n\tConditions:(../port-type != 'optical') and (../port-type != 'otdr') and (../port-type != 'optical-nomon')\n\t\n\t\"\"\",\n        }, # column\n        \"portActualPluggableType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEquipmentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPluggable type for each port according to the actually equipping. \nNeeds to be re-defined in the project specific model.\n\n\tConditions:../port-type != 'optical'\n\t\n\tdefault value :empty\"\"\",\n        }, # column\n        \"portRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power\"\"\",\n        }, # column\n        \"portTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power\"\"\",\n        }, # column\n        \"portRxOpticalPowerSelectedChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Optical power of the selected channel on coherent receiver, \nwhich will be different from the rx-optical-power when multiple channels input simultaneously.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"portRxOpticalPowerLane1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power of lane 1.\"\"\",\n        }, # column\n        \"portRxOpticalPowerLane2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power of lane 2.\"\"\",\n        }, # column\n        \"portRxOpticalPowerLane3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power of lane 3.\"\"\",\n        }, # column\n        \"portRxOpticalPowerLane4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power of lane 4.\"\"\",\n        }, # column\n        \"portTxOpticalPowerLane1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power lane 1.\"\"\",\n        }, # column\n        \"portTxOpticalPowerLane2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power lane 2.\"\"\",\n        }, # column\n        \"portTxOpticalPowerLane3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power lane 3.\"\"\",\n        }, # column\n        \"portTxOpticalPowerLane4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power lane 4.\"\"\",\n        }, # column\n        \"portDirectionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTypeOfDirection\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supported direction of the optical port.\"\"\",\n        }, # column\n        \"portName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the port.\n\n\ndefault value :unspecified\"\"\",\n        }, # column\n        \"portType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"clientSubport\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"optical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"otdr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"opticalNomon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port. Needs to be provided upon Port creation\"\"\",\n        }, # column\n        \"portMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPortMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe working mode of port. \nFor client side:\nCHM1: applicable to port 3 to 6; possible values are: 100GBE, not-applicable.\nDefault is 100GBE when card created.\n\nCHM2: applicable to port 3 to 11; possible values are: 40GBE, subport, not-applicable;\napplicable to subport 1 to 4; possible values are: 10GBE, not-applicable.\nDefault is not-applicable.\n\t\t\t\t\t\nFor Line side:\nCHM1/CHM2: possible values are: QPSK_100G, 16QAM_200G, 8QAM_300G.\nDefault is 16QAM_200G.\n\nnon applicable : there shall not be service created on the port or subport\nsubport: the port shall create four subports under the port to support 4x10G.\n40GBE: 40GBE service shall be created on the port with default mapping GMP.\n10GBE: 10GBE service shall be created on the subport with default mapping BMP with fixed stuff.\n100GBE: 100GBE service shall be created on the subport with default mapping GMP.\nQPSK_100G: 100G OTU4 service with DP-QPSK coherent modulation format shall be created on the port.\n16QAM_200G: 200G OTUC2 service with DP-16QAM coherent modulation format shall be created on the port.\n8QAM_300G: 300G OTUC3 service with DP-8QAM coherent modulation format shall be created on the coupled two line ports.\n\nNote 4x10G is to create subport managed objects under the port. Each subport can support a 10G service.\n\t\t\t\t\t\nRestrictions:\nChanging Port mode shall be allowed only if the impacted port or subport object is administratively down.\nChanging a 'subport' port mode of a port to be other value shall only be allowed only if port-modes of all the subports under the port are 'not-applicable'.\nIf there is explicitly cross-connection is created associated with the ODU of the port, change port mode of the port shall be denied.\nIf the port mode is a coupled port mode, e.g. 8QAM_300G, port mode can only be edited on the lower number of port within the coupled ports. The other port (or ports if more than two) will have read-only port mode value same as this lowest number port.\nWhen port/subport is set to admin down, laser will be shutdown, ingress side will insert proper maintenance signal.\n\n\tConditions:(../port-type != 'optical') and (../port-type != 'otdr') and (../port-type != 'optical-nomon')\n\t\n\tdefault value :not-applicable\"\"\",\n        }, # column\n        \"portAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"portOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"portAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"portAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"portServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"portConnectedTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate neighbour port/facility entity to which the current port/facility is connected to.\"\"\",\n        }, # column\n        \"portArcConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmQi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nalm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe configurable mode of the Alarm Report Control (ARC).\n\n\t\n\t\n\tdefault value :nalm-qi\"\"\",\n        }, # column\n        \"portArcState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmQi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nalm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe current mode of the Alarm Report Control (ARC).\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"portArcSubState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"nalmCd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmNr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nAdditional information about the Alarm Report Control (ARC) when the main state is in the NALM-QI state \n\n\t\n\t\n\tdefault value :nalm-nr\"\"\",\n        }, # column\n        \"portArcTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10080\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10080\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The holdoff timer value in minutes of the ARC.\nRange is 0 - 10080 minutes \n\t\n\tUNITS:minutes\n\tdefault value :1440\"\"\",\n        }, # column\n        \"portArcRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe remaining timer value (format: xxd-xxh:xxm:xxs) before the alarm is reported.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"portExternalConnectivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.6.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the port is connected externally or not.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"subport\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7\",\n        }, # node\n        \"subportTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"subportEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of subportTable\"\"\",\n        }, # row\n        \"subportId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The identifier is defined to uniquely identify the subport.\"\"\",\n        }, # column\n        \"subportPortName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the port.\n\n\ndefault value :unspecified\"\"\",\n        }, # column\n        \"subportPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"clientSubport\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"optical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"otdr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"opticalNomon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port. Needs to be provided upon Port creation\"\"\",\n        }, # column\n        \"subportPortMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPortMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe working mode of port. \nFor client side:\nCHM1: applicable to port 3 to 6; possible values are: 100GBE, not-applicable.\nDefault is 100GBE when card created.\n\nCHM2: applicable to port 3 to 11; possible values are: 40GBE, subport, not-applicable;\napplicable to subport 1 to 4; possible values are: 10GBE, not-applicable.\nDefault is not-applicable.\n\t\t\t\t\t\nFor Line side:\nCHM1/CHM2: possible values are: QPSK_100G, 16QAM_200G, 8QAM_300G.\nDefault is 16QAM_200G.\n\nnon applicable : there shall not be service created on the port or subport\nsubport: the port shall create four subports under the port to support 4x10G.\n40GBE: 40GBE service shall be created on the port with default mapping GMP.\n10GBE: 10GBE service shall be created on the subport with default mapping BMP with fixed stuff.\n100GBE: 100GBE service shall be created on the subport with default mapping GMP.\nQPSK_100G: 100G OTU4 service with DP-QPSK coherent modulation format shall be created on the port.\n16QAM_200G: 200G OTUC2 service with DP-16QAM coherent modulation format shall be created on the port.\n8QAM_300G: 300G OTUC3 service with DP-8QAM coherent modulation format shall be created on the coupled two line ports.\n\nNote 4x10G is to create subport managed objects under the port. Each subport can support a 10G service.\n\t\t\t\t\t\nRestrictions:\nChanging Port mode shall be allowed only if the impacted port or subport object is administratively down.\nChanging a 'subport' port mode of a port to be other value shall only be allowed only if port-modes of all the subports under the port are 'not-applicable'.\nIf there is explicitly cross-connection is created associated with the ODU of the port, change port mode of the port shall be denied.\nIf the port mode is a coupled port mode, e.g. 8QAM_300G, port mode can only be edited on the lower number of port within the coupled ports. The other port (or ports if more than two) will have read-only port mode value same as this lowest number port.\nWhen port/subport is set to admin down, laser will be shutdown, ingress side will insert proper maintenance signal.\n\n\tConditions:(../port-type != 'optical') and (../port-type != 'otdr') and (../port-type != 'optical-nomon')\n\t\n\tdefault value :not-applicable\"\"\",\n        }, # column\n        \"subportAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subportOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"subportAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subportAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"subportServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"subportConnectedTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate neighbour port/facility entity to which the current port/facility is connected to.\"\"\",\n        }, # column\n        \"subportArcConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmQi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nalm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe configurable mode of the Alarm Report Control (ARC).\n\n\t\n\t\n\tdefault value :nalm-qi\"\"\",\n        }, # column\n        \"subportArcState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmQi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nalm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe current mode of the Alarm Report Control (ARC).\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subportArcSubState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"nalmCd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nalmNr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nAdditional information about the Alarm Report Control (ARC) when the main state is in the NALM-QI state \n\n\t\n\t\n\tdefault value :nalm-nr\"\"\",\n        }, # column\n        \"subportArcTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10080\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10080\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The holdoff timer value in minutes of the ARC.\nRange is 0 - 10080 minutes \n\t\n\tUNITS:minutes\n\tdefault value :1440\"\"\",\n        }, # column\n        \"subportArcRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe remaining timer value (format: xxd-xxh:xxm:xxs) before the alarm is reported.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"subportRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power\"\"\",\n        }, # column\n        \"subportTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power\"\"\",\n        }, # column\n        \"subportExternalConnectivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.7.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the port is connected externally or not.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"pluggable\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8\",\n        }, # node\n        \"pluggableTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the Pluggable object\"\"\",\n        }, # table\n        \"pluggableEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pluggableTable\"\"\",\n        }, # row\n        \"pluggableRequiredType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPluggableType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates the equipment type to identify the module. \nNeeds to be re-defined in the project specific model.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableFormFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPluggableFormFactor\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating the exact form factor of the pluggable.\n\n\ndefault value :Unrecognized\"\"\",\n        }, # column\n        \"pluggableInterfaceType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating interface type of the pluggable.\n\n\ndefault value :\"\"\",\n        }, # column\n        \"pluggableLaserSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"txLoShared\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"txLoIndependent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe type of laser frequency. Only tx-lo-independent type support och-os rx-frequency working\n\n\tConditions:../required-type = 'CFP2'\n\t\n\tdefault value :not-available\"\"\",\n        }, # column\n        \"pluggableHwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute Identifies the Hardware Version of the module that populates the slot. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableVendor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nVendor information. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis is the value of serial number stored in EEPROM of the equipment. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableFwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrent Firmware (FW) version on the equipment. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggablePartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifies the Part Number of the equipment. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableClei\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifies the CLEI code number of the equipment. \nThe CLEI code is a 10-character code that identifies\ncommunications equipment. It describes product type, features,\nsource document, and associated drawings and vintages.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableEquipmentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates an additional field to identify the module. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pluggableAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"pluggableOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"pluggableAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\tdefault value :unknown\"\"\",\n        }, # column\n        \"pluggableAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"pluggableTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.8.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature at the monitoring point.\"\"\",\n        }, # column\n        \"amplifier\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9\",\n        }, # node\n        \"amplifierTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of optical amplifier on an equipment.\"\"\",\n        }, # table\n        \"amplifierEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"amplifierName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of amplifierTable\"\"\",\n        }, # row\n        \"amplifierName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-defined name assigned to identify a specific amplifier in the device\"\"\",\n        }, # column\n        \"amplifierSupportingInputPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the supporting input port.\"\"\",\n        }, # column\n        \"amplifierSupportingOutputPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the supporting output port.\"\"\",\n        }, # column\n        \"amplifierAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"amplifierOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"amplifierAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"amplifierAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"amplifierEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Configuration for enable or disable the amplifier.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"amplifierInputLosShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enable or disable the function of automatic shutdown per input LOS.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"amplifierControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Control mode of the amplifier.\n\n\ndefault value :auto\"\"\",\n        }, # column\n        \"amplifierMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"constantPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"constantGain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operating mode of the amplifier\n\n\ndefault value :constant-gain\"\"\",\n        }, # column\n        \"amplifierType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fixedGainEdfa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"variableGainEdfa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the amplifier.\n\n\ndefault value :variable-gain-EDFA\"\"\",\n        }, # column\n        \"amplifierTargetGain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting gain to the amplifier for constant-gain mode in manual control mode.\"\"\",\n        }, # column\n        \"amplifierOperatingGain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating gain of the amplifier, which is the actually configured gain on the amplifier.\"\"\",\n        }, # column\n        \"amplifierGainAdjustment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value is used for adjustment of gain when the amplifier in automatic control mode, \nthe automatically caculated gain will include offset of this attribute.\n\t\n\t\n\tdefault value :0.0\"\"\",\n        }, # column\n        \"amplifierGainRangeMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum of settable gain.\"\"\",\n        }, # column\n        \"amplifierGainRangeMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum of settable gain.\n\nUNITS:dB\"\"\",\n        }, # column\n        \"amplifierOutputPowerMon\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitored aggregation signal output power.\n\nUNITS:dBm\"\"\",\n        }, # column\n        \"amplifierOutputPowerMonWithAse\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitored aggregation total output power including both signal and ASE.\n\nUNITS:dBm\"\"\",\n        }, # column\n        \"amplifierInputPowerMon\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitored aggregation input power.\n\nUNITS:dBm\"\"\",\n        }, # column\n        \"amplifierOutputVoa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Configurable optical attenuation at output of the amplifier.\n\n\ndefault value :0.0\"\"\",\n        }, # column\n        \"amplifierPowerBeforeOutputVoa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.9.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitored optical power after output VOA.\n\nUNITS:dBm\"\"\",\n        }, # column\n        \"tdc\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10\",\n        }, # node\n        \"tdcTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of optical tdc on an equipment.\"\"\",\n        }, # table\n        \"tdcEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"tdcName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of tdcTable\"\"\",\n        }, # row\n        \"tdcName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-defined name assigned to identify a specific tdc in the device\"\"\",\n        }, # column\n        \"tdcSupportingInputPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the supporting input port.\"\"\",\n        }, # column\n        \"tdcSupportingOutputPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the supporting output port.\"\"\",\n        }, # column\n        \"tdcAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"tdcOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"tdcAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"tdcAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"tdcMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Control mode of the tunable dispersion compensation; Manual: CD value will be decided per configured CD value; \nAuto: system will automatically decide the CD value per measured chromatic dispersion in the span.                    \n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"tdcReferenceFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFreq\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Indicating the reference wavelength of the TDC.\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"tdcActualReferenceFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Indicating the actual reference wavelength of the TDC.\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"tdcFrequencyRangeMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum of supported wavelength.\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"tdcFrequencyRangeMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum of supported wavelength.\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"tdcChromaticDispersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The setting value of Chromatic Dispersion.\n\nUNITS:ps/nm\ndefault value :0\"\"\",\n        }, # column\n        \"tdcChromaticDispersionAdjustment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value will be used to adjust target chromatic dispersion by adding the value with auto decided dispersion in auto tdc mode.\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"tdcActualChromaticDispersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual value of Chromatic Dispersion.\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"tdcCdRangeMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum of supported chromatic dispersion.\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"tdcCdRangeMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.10.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum of supported chromatic dispersion.\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"inventory\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12\",\n        }, # node\n        \"inventoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"inventoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"inventoryEquipmentType\",\n                \"inventoryShelfId\",\n                \"inventorySlotId\",\n                \"inventorySubslotId\",\n                \"inventoryPortId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inventoryTable\"\"\",\n        }, # row\n        \"inventoryEquipmentType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"shelf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"slot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"card\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"port\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"pluggable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"subslot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"subcard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The equipment type that the inventory data refers to\"\"\",\n        }, # column\n        \"inventoryShelfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesShelfId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the shelf.\"\"\",\n        }, # column\n        \"inventorySlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSlotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the slot.\"\"\",\n        }, # column\n        \"inventorySubslotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSlotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the subslot.\"\"\",\n        }, # column\n        \"inventoryPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the port.\"\"\",\n        }, # column\n        \"inventoryEquipmentVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute Identifies the Hardware Version of the module that populates the slot.\"\"\",\n        }, # column\n        \"inventoryModuleType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of module type stored in EEPROM of the equipment.\"\"\",\n        }, # column\n        \"inventoryVendor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vendor information.\"\"\",\n        }, # column\n        \"inventorySerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of serial number stored in EEPROM of the equipment.\"\"\",\n        }, # column\n        \"inventoryFwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Firmware (FW) version on the equipment.\"\"\",\n        }, # column\n        \"inventoryPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the Part Number of the equipment.\"\"\",\n        }, # column\n        \"inventoryClei\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifies the CLEI code number of the equipment.\nThe CLEI code is a 10-character code that identifies\ncommunications equipment. It describes product type, features,\nsource document, and associated drawings and vintages.\nCLEI codes have 4 data elements:\n- Characters 1 to 4: Define family or subfamily of product.\n- Characters 5 to 7: Define features.\n- Character 8: Manufacturer and System ID.\n- Characters 9 and 10: Identifies version, issue, and release #.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"inventoryInterfaceType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating interface type of the pluggable.\n\n\ndefault value :\"\"\",\n        }, # column\n        \"inventoryManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The equipment manufacture date get from equipment. \nformat is mm/dd/yyyy. When there is no date information show nothing\n\tConditions:(../equipment-type = 'shelf') or (../equipment-type = 'card') or (../equipment-type = 'subcard') or (../equipment-type = 'pluggable')\n\t\n\tdefault value :\"\"\",\n        }, # column\n        \"inventoryManufacturerNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.12.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of manufacturer number stored in EEPROM of the equipment.\"\"\",\n        }, # column\n        \"led\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14\",\n        }, # node\n        \"ledTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nAttributes related with LED\nApplicable to Shelf, FAN, PSU, CHM1, CHM2, CHM1G, OCC2 in DCI.\"\"\",\n        }, # table\n        \"ledEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ledEquipmentType\",\n                \"ledShelfId\",\n                \"ledSlotId\",\n                \"ledSubslotId\",\n                \"ledName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ledTable\"\"\",\n        }, # row\n        \"ledEquipmentType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe attribute indicates the equipment type to identify the module. \nfor example, if the card is CHM1, 'CHM1' shall be used.\nDCI supporting LEDs:\nCHM1, CHM2, SHELF, FAN\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ledShelfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesShelfId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the shelf. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ledSlotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSlotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the slot. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ledName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe functional name of LED. \nDCI NE:\nlocation_led\nport(n)_led   (CHM1: n = 1 to 6, CHM2 n = 1 to 12, e.g. Port12)\nactive_led\npower_led\nfault_led\nstatus_led\nsubslot(n)_led\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ledStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"blink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"red\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"redBlink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"green\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"greenBlink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"amber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"amberBlink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrent LED status. \nDCI NE:\nFor Location_LED: OFF, BLINK\nFor others:\nred, red-blink,green,green-blink,amber,amber-blink,off,notAvailable\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ledSubslotId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.14.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSubslotId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIdentifier of the subslot. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"temperatureDetails\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15\",\n        }, # node\n        \"temperatureDetailsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The detailed information of temperature in each monitoring-point of current module\"\"\",\n        }, # table\n        \"temperatureDetailsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"temperatureDetailsMonitoringPoint\",\n            ],\n            \"description\" :\n                \"\"\"Entry of temperatureDetailsTable\"\"\",\n        }, # row\n        \"temperatureDetailsMonitoringPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The point of temperature monitoring. It could be the sensor or chip internal.\"\"\",\n        }, # column\n        \"temperatureDetailsTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature at the monitoring point.\"\"\",\n        }, # column\n        \"temperatureDetailsTemperatureRangeLow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lowest temperature threshold of this monitoring point in working mode.\"\"\",\n        }, # column\n        \"temperatureDetailsTemperatureRangeHigh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.15.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperature\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The highest temperature threshold of this monitoring point in working mode.\"\"\",\n        }, # column\n        \"otdr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16\",\n        }, # node\n        \"otdrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Container of OTDR.\"\"\",\n        }, # table\n        \"otdrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otdrTable\"\"\",\n        }, # row\n        \"otdrState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"finished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating the current status of the OTDR. \n\n\t\n\t\n\tdefault value :not-available\"\"\",\n        }, # column\n        \"otdrMeasurementTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating the time remaining in current measurement running. \n\n\t\n\tUNITS:second\n\tdefault value :0\"\"\",\n        }, # column\n        \"otdrError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Error message produced when the measurement ends with error.\"\"\",\n        }, # column\n        \"otdrLaserStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating the current status of the OTDR laser. \n\n\t\n\t\n\tdefault value :not-available\"\"\",\n        }, # column\n        \"otdrMeasurementPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.16.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"0 indicates that the card is not measuring any port; \nnon-zero indicates the OTDR port number where a measurement is currently taking place.\n\t\n\t\n\tdefault value :0\"\"\",\n        }, # column\n        \"otdrPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18\",\n        }, # node\n        \"otdrPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Containing attributes of OTDR port.\"\"\",\n        }, # table\n        \"otdrPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otdrPortTable\"\"\",\n        }, # row\n        \"otdrPortOtdrRange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OtdrOtdrRange\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" OTDR measurement range. \n\nUNITS:km\ndefault value :auto\"\"\",\n        }, # column\n        \"otdrPortOtdrPulseWidth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OtdrOtdrPulseWidth\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates pulse width to be used in otdr measurement. \n\n\t\n\tUNITS:nano-second\n\tdefault value :auto\"\"\",\n        }, # column\n        \"otdrPortOtdrMeasurementSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"slow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"precision\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating OTDR measurement speed. \n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"otdrPortOtdrIor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OtdrOtdrIor\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the group index of refraction (IOR) of the fiber to be measured. \n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"otdrPortOtdrFiberType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ssmf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"leaf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twrs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"twc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"allwave\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"dsf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"puresilica\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"twreach\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"vistacor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"teralight\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"drakall\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"twplus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"twminus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"pslc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating fiber type to be measured. \n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"otdrPortOtdrLastMeasurement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the last otdr measurement date and time on the port.\n\n\ndefault value :0000-00-00T00:00:00Z\"\"\",\n        }, # column\n        \"otdrPortOtdrResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.18.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the OTDR data sampling resolution. \n\n\t\n\tUNITS:meter\n\tdefault value :auto\"\"\",\n        }, # column\n        \"ops\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20\",\n        }, # node\n        \"opsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of optical protection switch (ops) on an equipment.\"\"\",\n        }, # table\n        \"opsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"opsName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of opsTable\"\"\",\n        }, # row\n        \"opsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name assigned to identify a specific ops in the device\"\"\",\n        }, # column\n        \"opsWorkingEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the working port of the OPS.\"\"\",\n        }, # column\n        \"opsProtectionEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of the protection port of the OPS\"\"\",\n        }, # column\n        \"opsAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"opsOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"opsAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"opsAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"opsProtectionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"manualSwitchToProtection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manualSwitchToWorking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"forceSwitchToProtection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"forceSwitchToWorking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lockoutOfProtection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"signalFailureOnWorking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"signalFailureOnProtection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"signalDegradeOnWorking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"signalDegradeOnProtection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"doNotRevert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"noRequest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"waitToRestore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the status of the protection switch.\"\"\",\n        }, # column\n        \"opsActivePath\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"working\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"protection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating the active port of the protection switch.\n\n\n\ndefault value :unknown\"\"\",\n        }, # column\n        \"opsRevertive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Revertive behavior of the aps.\nIf True, then automatically revert after protection switch\nonce the fault is restored.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"opsWaitToRestore\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Wait To Restore, valid values: 0-3600 seconds. A value of zero will switch back immediately,\nafter expiration of the timer, the working is restored and a norequest state is transmitted.\n\t\n\tUNITS:second\n\tdefault value :300\"\"\",\n        }, # column\n        \"opsWorkingSwitchThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching threshold of the working port which indicates the optical power threshold of signal degrade.\n\n\ndefault value :-18.0\"\"\",\n        }, # column\n        \"opsProtectionSwitchThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching threshold of the protection port which indicates the optical power threshold of signal degrade.\n\n\ndefault value :-18.0\"\"\",\n        }, # column\n        \"opsWorkingLosThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching threshold of the working port, power level below it will lead to loss of signal.\n\n\ndefault value :-23.0\"\"\",\n        }, # column\n        \"opsProtectionLosThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching threshold of the protection port, power level below it will lead to loss of signal.\n\n\ndefault value :-23.0\"\"\",\n        }, # column\n        \"opsHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe hold off time of the protection switch.\n\n\t\n\tUNITS:milliseconds\n\tdefault value :0\"\"\",\n        }, # column\n        \"opsWavelengthBand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.20.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"t1550\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"t1310\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the band of the signal going through the optical protection switch unit.\n\n\nUNITS:nm\ndefault value :1550\"\"\",\n        }, # column\n        \"subportStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.25\",\n        }, # node\n        \"subportStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.25.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"subportStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.25.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of subportStatisticsTable\"\"\",\n        }, # row\n        \"subportStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.25.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"portStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.26\",\n        }, # node\n        \"portStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.26.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"portStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.26.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of portStatisticsTable\"\"\",\n        }, # row\n        \"portStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.26.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"subcardStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.27\",\n        }, # node\n        \"subcardStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.27.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"subcardStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.27.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of subcardStatisticsTable\"\"\",\n        }, # row\n        \"subcardStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.27.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"cardStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.28\",\n        }, # node\n        \"cardStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.28.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"cardStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.28.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cardStatisticsTable\"\"\",\n        }, # row\n        \"cardStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.28.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"shelfStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.29\",\n        }, # node\n        \"shelfStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.29.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"shelfStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.29.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of shelfStatisticsTable\"\"\",\n        }, # row\n        \"shelfStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.3.29.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"services\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4\",\n        }, # node\n        \"otn\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1\",\n        }, # node\n        \"eth10g\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1\",\n        }, # node\n        \"eth10gTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the 10GBE object.\"\"\",\n        }, # table\n        \"eth10gEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth10gTable\"\"\",\n        }, # row\n        \"eth10gEthFecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working type of etyn port.\n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"eth10gEthFecTypeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working state of etyn port.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth10gTransmitInterpacketgap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the minimum transmit IPG value.\n\n\t\n\t\n\tdefault value :8\"\"\",\n        }, # column\n        \"eth10gGfpPayloadFcs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nEnabled: GFP payload FCS will be used, Ethernet frame FCS will be removed; \nDisabled: GFP payload FCS will not be inserted, Ethernet frame FCS will be used.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth10gMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"eth10gAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth10gOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth10gAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"eth10gAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"eth10gClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth10gClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"eth10gNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth10gAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth10gLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth10gLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"eth10gTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth10gTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth10gServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"eth10gLldpStatusIf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rxonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPort level lldp control. \nValue of 'rxonly', then the LLDP agent will receive lldp,\nwhen lldp-status-ne is also enabled. \n                    \nValue of 'disabled', then LLDP agent will not filter and\nreceive LLDP frames on this port.  If there is remote systems\ninformation which is received on this port and stored in\nthe system before the lldp-status   becomes disabled, \nthen the information will naturally age out.    \n\nNote: txOnly and txAndRx modes are not supported.\n                    \n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth10gUpiValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"g709\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gsupp43\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe value of ODU2 upi in PREAMBLE mapping mode.\n\n\t\n\t\n\tdefault value :not-applicable\"\"\",\n        }, # column\n        \"eth10gHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.1.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"testSignalFacilityStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2\",\n        }, # node\n        \"testSignalFacilityStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Test signal status for current facility.\"\"\",\n        }, # table\n        \"testSignalFacilityStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of testSignalFacilityStatusTable\"\"\",\n        }, # row\n        \"testSignalFacilityStatusPrbsSync\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"inSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"errSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The test result of PRBS Synchronization\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"testSignalFacilityStatusTestTimeDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time duration of signal test\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"testSignalFacilityStatusPrbsBitErrorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The counting of bit error by PRBS Synchronization\"\"\",\n        }, # column\n        \"lldpRemoteSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3\",\n        }, # node\n        \"lldpRemoteSystemTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of LLDP neighbors.\"\"\",\n        }, # table\n        \"lldpRemoteSystemEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"lldpRemoteSystemLldpRemoteIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry of lldpRemoteSystemTable\"\"\",\n        }, # row\n        \"lldpRemoteSystemLldpRemoteIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute represents an arbitrary local integer value used\nby this agent to identify a particular connection instance,\nunique only for the indicated remote system. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteChassisIdSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"chassiscomponent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"interfacealias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"portcomponent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"macaddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"networkaddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"interfacename\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the source of a chassis identifier. \n\nThe enumeration 'chassisComponent(1)' represents a chassis\nidentifier based on the value of entPhysicalAlias object\n(defined in IETF RFC 2737) for a chassis component (i.e.,\nan entPhysicalClass value of 'chassis(3)').\n\nThe enumeration 'interfaceAlias(2)' represents a chassis\nidentifier based on the value of ifAlias object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\n\nThe enumeration 'portComponent(3)' represents a chassis\nidentifier based on the value of entPhysicalAlias object\n(defined in IETF RFC 2737) for a port or backplane\ncomponent (i.e., entPhysicalClass value of 'port(10)' or\n'backplane(4)'), within the containing chassis.\n\nThe enumeration 'macAddress(4)' represents a chassis\nidentifier based on the value of a unicast source address\n(encoded in network byte order and IEEE 802.3 canonical bit\norder), of a port on the containing chassis as defined in\nIEEE Std 802-2001.\n\nThe enumeration 'networkAddress(5)' represents a chassis\nidentifier based on a network address, associated with\na particular chassis.  The encoded address is actually\ncomposed of two fields.  The first field is a single octet,\nrepresenting the IANA AddressFamilyNumbers value for the\nspecific address type, and the second field is the network\naddress value.\n\nThe enumeration 'interfaceName(6)' represents a chassis\nidentifier based on the value of ifName object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\n\nThe enumeration 'local(7)' represents a chassis identifier\nbased on a locally defined value.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the format of a chassis identifier string. \nObjects of this type are always used with an associated\nLldpChassisIdSubtype object, which identifies the format of\nthe particular LldpChassisId object instance.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'chassisComponent(1)', then the octet string identifies\na particular instance of the entPhysicalAlias object\n(defined in IETF RFC 2737) for a chassis component (i.e.,\nan entPhysicalClass value of 'chassis(3)').\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'interfaceAlias(2)', then the octet string identifies\na particular instance of the ifAlias object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\nIf the particular ifAlias object does not contain any values,\nanother chassis identifier type should be used.\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'portComponent(3)', then the octet string identifies a\nparticular instance of the entPhysicalAlias object (defined\nin IETF RFC 2737) for a port or backplane component within\nthe containing chassis.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'macAddress(4)', then this string identifies a particular\nunicast source address (encoded in network byte order and\nIEEE 802.3 canonical bit order), of a port on the containing\nchassis as defined in IEEE Std 802-2001.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'networkAddress(5)', then this string identifies a particular\nnetwork address, encoded in network byte order, associated\nwith one or more ports on the containing chassis.  The first\noctet contains the IANA Address Family Numbers enumeration\nvalue for the specific address type, and octets 2 through\nN contain the network address value in network byte order.\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'interfaceName(6)', then the octet string identifies\na particular instance of the ifName object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\nIf the particular ifName object does not contain any values,\nanother chassis identifier type should be used.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'local(7)', then this string identifies a locally assigned\nChassis ID.                 \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemotePortIdSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"interfacealias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"portcomponent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"macaddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"networkaddress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"interfacename\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"agentcircuitid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the format of a port identifier string. \nObjects of this type are always used with an associated\nLldpPortIdSubtype object, which identifies the format of the\nparticular LldpPortId object instance.\n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceAlias(1)', then the octet string identifies a\nparticular instance of the ifAlias object (defined in IETF\nRFC 2863).  If the particular ifAlias object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'portComponent(2)', then the octet string identifies a\nparticular instance of the entPhysicalAlias object (defined\nin IETF RFC 2737) for a port or backplane component.\n\nIf the associated LldpPortIdSubtype object has a value of\n'macAddress(3)', then this string identifies a particular\nunicast source address (encoded in network byte order\nand IEEE 802.3 canonical bit order) associated with the port\n(IEEE Std 802-2001).\n\nIf the associated LldpPortIdSubtype object has a value of\n'networkAddress(4)', then this string identifies a network\naddress associated with the port.  The first octet contains\nthe IANA AddressFamilyNumbers enumeration value for the\nspecific address type, and octets 2 through N contain the\nnetworkAddress address value in network byte order.\n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceName(5)', then the octet string identifies a\nparticular instance of the ifName object (defined in IETF\nRFC 2863).  If the particular ifName object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'agentCircuitId(6)', then this string identifies an agent-local\nidentifier of the circuit (defined in RFC 3046).\n\nIf the associated LldpPortIdSubtype object has a value of\n'local(7)', then this string identifies a locally\nassigned port ID.   \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemotePortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the format of a port identifier string. \nObjects of this type are always used with an associated\nLldpPortIdSubtype object, which identifies the format of the\nparticular LldpPortId object instance. \n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceAlias(1)', then the octet string identifies a\nparticular instance of the ifAlias object (defined in IETF\nRFC 2863).  If the particular ifAlias object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'portComponent(2)', then the octet string identifies a\nparticular instance of the entPhysicalAlias object (defined\nin IETF RFC 2737) for a port or backplane component.\n\nIf the associated LldpPortIdSubtype object has a value of\n'macAddress(3)', then this string identifies a particular\nunicast source address (encoded in network byte order\nand IEEE 802.3 canonical bit order) associated with the port\n(IEEE Std 802-2001).\n\nIf the associated LldpPortIdSubtype object has a value of\n'networkAddress(4)', then this string identifies a network\naddress associated with the port.  The first octet contains\nthe IANA AddressFamilyNumbers enumeration value for the\nspecific address type, and octets 2 through N contain the\nnetworkAddress address value in network byte order.\n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceName(5)', then the octet string identifies a\nparticular instance of the ifName object (defined in IETF\nRFC 2863).  If the particular ifName object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'agentCircuitId(6)', then this string identifies an agent-local\nidentifier of the circuit (defined in RFC 3046).\n\nIf the associated LldpPortIdSubtype object has a value of\n'local(7)', then this string identifies a locally\nassigned port ID.               \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemotePortDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe string value used to identify the description of\nthe given port associated with the remote system.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteSysName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe string value used to identify the system name of the\nremote system. \nsys-name: system name                        \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteSysDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe string value used to identify the system description\nof the remote system. \nsys-desc: system description                         \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteSysCapSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"LldpLldpSysCap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the system capabilities. \nThe bit 'other(0)' indicates that the system has capabilities\nother than those listed below.\nThe bit 'repeater(1)' indicates that the system has repeater\ncapability.\nThe bit 'bridge(2)' indicates that the system has bridge\ncapability.\nThe bit 'wlanAccessPoint(3)' indicates that the system has \nWLAN access point capability.\nThe bit 'router(4)' indicates that the system has router\ncapability.\nThe bit 'telephone(5)' indicates that the system has telephone\ncapability.\nThe bit 'docsisCableDevice(6)' indicates that the system has\nDOCSIS Cable Device capability (IETF RFC 2669 & 2670).\nThe bit 'stationOnly(7)' indicates that the system has only\nstation capability and nothing else.\nThe bit 'cVLANComponent(8)' indicates that the system has\nC-VLAN component functionality.\nThe bit 'sVLANComponent(9)' indicates that the system  has\nS-VLAN component functionality.\nThe bit 'twoPortMACRelay(10)' indicates that the system has\nTwo-port MAC Relay (TPMR) functionality.  \nsys-cap-supported: supported system capability                        \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"lldpRemoteSystemRemoteSysCapEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"LldpLldpSysCap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute describes the system capabilities. \nThe bit 'other(0)' indicates that the system has capabilities\nother than those listed below.\nThe bit 'repeater(1)' indicates that the system has repeater\ncapability.\nThe bit 'bridge(2)' indicates that the system has bridge\ncapability.\nThe bit 'wlanAccessPoint(3)' indicates that the system has \nWLAN access point capability.\nThe bit 'router(4)' indicates that the system has router\ncapability.\nThe bit 'telephone(5)' indicates that the system has telephone\ncapability.\nThe bit 'docsisCableDevice(6)' indicates that the system has\nDOCSIS Cable Device capability (IETF RFC 2669 & 2670).\nThe bit 'stationOnly(7)' indicates that the system has only\nstation capability and nothing else.\nThe bit 'cVLANComponent(8)' indicates that the system has\nC-VLAN component functionality.\nThe bit 'sVLANComponent(9)' indicates that the system  has\nS-VLAN component functionality.\nThe bit 'twoPortMACRelay(10)' indicates that the system has\nTwo-port MAC Relay (TPMR) functionality.                        \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"remoteManAddresses\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4\",\n        }, # node\n        \"remoteManAddressesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nList of management addresses of LLDP neighbor. \nman:managment, remote management addresses\"\"\",\n        }, # table\n        \"remoteManAddressesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"lldpRemoteSystemLldpRemoteIndex\",\n                \"remoteManAddressesRemoteManAddrSubtype\",\n                \"remoteManAddressesRemoteManAddr\",\n            ],\n            \"description\" :\n                \"\"\"Entry of remoteManAddressesTable\"\"\",\n        }, # row\n        \"remoteManAddressesRemoteManAddrSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe type of management address identifier encoding used in\nthe associated 'lldpLocManagmentAddr' object. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"remoteManAddressesRemoteManAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"62\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe string value used to identify the management address\ncomponent associated with the remote system.  The purpose\nof this address is to contact the management entity. \nman: management\naddr: address                            \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"remoteManAddressesRemoteManAddrIfSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis attribute describes the basis of a particular type of\ninterface associated with the management address. \n\nThe enumeration 'unknown(1)' represents the case where the\ninterface is not known.\n\nThe enumeration 'ifIndex(2)' represents interface identifier\nbased on the ifIndex MIB object.\n\nThe enumeration 'systemPortNumber(3)' represents interface\nidentifier based on the system port numbering convention.\nman: management\naddr: address                             \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"remoteManAddressesRemoteManAddrIfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe integer value used to identify the interface number\nregarding the management address component associated with\nthe remote system.                          \nman: management\naddr: address                             \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"remoteManAddressesRemoteManAddrOid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe OID value used to identify the type of hardware component\nor protocol entity associated with the management address\nadvertised by the remote system agent. \nman: management\naddr: address\noid: object identifier                            \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"odu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5\",\n        }, # node\n        \"oduTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"oduEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"odutypeL1\",\n                \"oduidL1\",\n                \"odutypeL2\",\n                \"oduidL2\",\n                \"odutypeL3\",\n                \"oduidL3\",\n                \"odutypeL4\",\n                \"oduidL4\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oduTable\"\"\",\n        }, # row\n        \"odutypeL1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOduType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Level 1 ODU type\"\"\",\n        }, # column\n        \"oduidL1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of level 1 ODU\"\"\",\n        }, # column\n        \"odutypeL2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOduType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Level 2 ODU type\"\"\",\n        }, # column\n        \"oduidL2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of level 2 ODU\"\"\",\n        }, # column\n        \"odutypeL3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOduType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Level 3 ODU type\"\"\",\n        }, # column\n        \"oduidL3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of level 3 ODU\"\"\",\n        }, # column\n        \"odutypeL4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOduType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Level 4 ODU type\"\"\",\n        }, # column\n        \"oduidL4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifier of level 4 ODU\"\"\",\n        }, # column\n        \"oduAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oduOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oduAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"oduAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"oduServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"oduTribSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNumberList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tributary slots of ODU, range 1 to 80\"\"\",\n        }, # column\n        \"oduRxPayloadType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received payload-type of ODU\"\"\",\n        }, # column\n        \"oduTxPayloadType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitter payload-type of ODU\"\"\",\n        }, # column\n        \"oduNimEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of nim function\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"oduDelayMeasurementEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of delay-measurement function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oduOpuConfigActual\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"intact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"client\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mux\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual opu configuration type\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"oduClientSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"fc8g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fc16g\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ODUflex rate for special signal type\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"oduExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"oduExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"oduExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"oduTxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"oduTxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"oduTxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"oduTimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"oduTimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oduRxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"oduRxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"oduRxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"oduDegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"oduDegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"oduTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"oduTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"oduTerminationMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.5.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"terminated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"nonTerminated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Termination mode for ODU. It works for trace label, nim , Delay Measurement and test signal function validation\n\n\ndefault value :terminated\"\"\",\n        }, # column\n        \"oduEncryption\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6\",\n        }, # node\n        \"oduEncryptionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Encryption function for the ODU channel.\"\"\",\n        }, # table\n        \"oduEncryptionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"odutypeL1\",\n                \"oduidL1\",\n                \"odutypeL2\",\n                \"oduidL2\",\n                \"odutypeL3\",\n                \"oduidL3\",\n                \"odutypeL4\",\n                \"oduidL4\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oduEncryptionTable\"\"\",\n        }, # row\n        \"oduEncryptionEncryptionEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledNonRevertive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting AES-256 encryption on OTN\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oduEncryptionBlockCipherMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ctr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gcm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the block cipher mode of operation.\n\n\ndefault value :CTR\"\"\",\n        }, # column\n        \"oduEncryptionEncryptionInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The encryption key rotation interval (in minutes)\n\nUNITS:minutes\ndefault value :30\"\"\",\n        }, # column\n        \"oduEncryptionEncryptionTxStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonOtnEncryStatusEnum\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The encryption status at transmit side of the ODU,\nwhich reflects the status of both encryption data and communication sessions.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"oduEncryptionEncryptionRxStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonOtnEncryStatusEnum\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The encryption status at receive side of the ODU,\nwhich reflects the status of both encryption data and communication sessions.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"oduEncryptionOduKeySyncSession\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonOtnKeySyncSession\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the associated session for the ODU channel to synchronize keys.\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"oduEncryptionEncryptionTxChannelId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify channel identifier of the encrypted ODU, which shall be unique within the NE.\"\"\",\n        }, # column\n        \"oduEncryptionTimeToNextKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.6.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time left to rotate the ODU encryption key.\n\nUNITS:seconds\ndefault value :0\"\"\",\n        }, # column\n        \"testSignalStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7\",\n        }, # node\n        \"testSignalStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Test signal status on ODU\"\"\",\n        }, # table\n        \"testSignalStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"odutypeL1\",\n                \"oduidL1\",\n                \"odutypeL2\",\n                \"oduidL2\",\n                \"odutypeL3\",\n                \"oduidL3\",\n                \"odutypeL4\",\n                \"oduidL4\",\n            ],\n            \"description\" :\n                \"\"\"Entry of testSignalStatusTable\"\"\",\n        }, # row\n        \"testSignalStatusPrbsSync\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"inSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"errSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The test result of PRBS Synchronization\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"testSignalStatusTestTimeDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time duration of signal test\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"testSignalStatusPrbsBitErrorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesGauge64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The counting of bit error by PRBS Synchronization\"\"\",\n        }, # column\n        \"eth40g\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8\",\n        }, # node\n        \"eth40gTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the 40GBE object.\"\"\",\n        }, # table\n        \"eth40gEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth40gTable\"\"\",\n        }, # row\n        \"eth40gEthFecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working type of etyn port.\n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"eth40gEthFecTypeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working state of etyn port.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth40gTransmitInterpacketgap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the minimum transmit IPG value.\n\n\t\n\t\n\tdefault value :8\"\"\",\n        }, # column\n        \"eth40gGfpPayloadFcs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nEnabled: GFP payload FCS will be used, Ethernet frame FCS will be removed; \nDisabled: GFP payload FCS will not be inserted, Ethernet frame FCS will be used.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth40gMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"eth40gAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth40gOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth40gAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"eth40gAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"eth40gClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth40gClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"eth40gNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth40gAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth40gLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth40gLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"eth40gTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth40gTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth40gServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"eth40gLldpStatusIf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rxonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPort level lldp control. \nValue of 'rxonly', then the LLDP agent will receive lldp,\nwhen lldp-status-ne is also enabled. \n                    \nValue of 'disabled', then LLDP agent will not filter and\nreceive LLDP frames on this port.  If there is remote systems\ninformation which is received on this port and stored in\nthe system before the lldp-status   becomes disabled, \nthen the information will naturally age out.    \n\nNote: txOnly and txAndRx modes are not supported.\n                    \n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth40gHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.8.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"eth100g\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9\",\n        }, # node\n        \"eth100gTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the 100GBE object.\"\"\",\n        }, # table\n        \"eth100gEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth100gTable\"\"\",\n        }, # row\n        \"eth100gEthFecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working type of etyn port.\n\n\t\n\t\n\tdefault value :auto\"\"\",\n        }, # column\n        \"eth100gEthFecTypeState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC working state of etyn port.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth100gTransmitInterpacketgap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the minimum transmit IPG value.\n\n\t\n\t\n\tdefault value :8\"\"\",\n        }, # column\n        \"eth100gGfpPayloadFcs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nEnabled: GFP payload FCS will be used, Ethernet frame FCS will be removed; \nDisabled: GFP payload FCS will not be inserted, Ethernet frame FCS will be used.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth100gMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"eth100gAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth100gOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"eth100gAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"eth100gAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"eth100gClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth100gClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"eth100gNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"eth100gAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth100gLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"eth100gLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"eth100gTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth100gTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"eth100gServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"eth100gLldpStatusIf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rxonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPort level lldp control. \nValue of 'rxonly', then the LLDP agent will receive lldp,\nwhen lldp-status-ne is also enabled. \n                    \nValue of 'disabled', then LLDP agent will not filter and\nreceive LLDP frames on this port.  If there is remote systems\ninformation which is received on this port and stored in\nthe system before the lldp-status   becomes disabled, \nthen the information will naturally age out.    \n\nNote: txOnly and txAndRx modes are not supported.\n                    \n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"eth100gHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.9.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"otu4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10\",\n        }, # node\n        \"otu4Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the otu4 object\"\"\",\n        }, # table\n        \"otu4Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu4Table\"\"\",\n        }, # row\n        \"otu4FecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC type of client OTUk.\n\n\tConditions:(ancestor::port/port-type = 'client') or (ancestor::port/port-type = 'client-subport')\n\t\n\tdefault value :G709\"\"\",\n        }, # column\n        \"otu4AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu4OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu4AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otu4AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otu4ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"otu4ExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4ExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4ExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"otu4TxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4TxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4TxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"otu4TimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"otu4TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu4RxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4RxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu4RxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"otu4DegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"otu4DegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"otu4LoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu4LoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"otu4ClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"otu4ClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"otu4HoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"otu4NearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"otu4AlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.10.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11\",\n        }, # node\n        \"otu2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the otu2 object\"\"\",\n        }, # table\n        \"otu2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu2Table\"\"\",\n        }, # row\n        \"otu2FecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC type of client OTUk.\n\n\tConditions:(ancestor::port/port-type = 'client') or (ancestor::port/port-type = 'client-subport')\n\t\n\tdefault value :G709\"\"\",\n        }, # column\n        \"otu2AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu2OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu2AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otu2AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otu2ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"otu2ExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2ExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2ExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"otu2TxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2TxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2TxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"otu2TimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"otu2TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu2RxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2RxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2RxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"otu2DegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"otu2DegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"otu2LoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu2LoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.11.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"otu2e\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12\",\n        }, # node\n        \"otu2eTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the otu2e object\"\"\",\n        }, # table\n        \"otu2eEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu2eTable\"\"\",\n        }, # row\n        \"otu2eFecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC type of client OTUk.\n\n\tConditions:(ancestor::port/port-type = 'client') or (ancestor::port/port-type = 'client-subport')\n\t\n\tdefault value :G709\"\"\",\n        }, # column\n        \"otu2eAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu2eOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otu2eAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otu2eAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otu2eServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"otu2eExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"otu2eTxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eTxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eTxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"otu2eTimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"otu2eTimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu2eRxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eRxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otu2eRxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"otu2eDegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"otu2eDegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"otu2eLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otu2eLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.12.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"fc8g\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13\",\n        }, # node\n        \"fc8gTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the FC8G object.\"\"\",\n        }, # table\n        \"fc8gEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fc8gTable\"\"\",\n        }, # row\n        \"fc8gMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"fc8gAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"fc8gOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"fc8gAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"fc8gAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"fc8gClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"fc8gClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"fc8gNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"fc8gAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"fc8gLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"fc8gLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"fc8gTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"fc8gTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"fc8gServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"fc8gHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.13.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"fc16g\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14\",\n        }, # node\n        \"fc16gTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the FC16G object.\"\"\",\n        }, # table\n        \"fc16gEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fc16gTable\"\"\",\n        }, # row\n        \"fc16gMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"fc16gAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"fc16gOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"fc16gAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"fc16gAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"fc16gClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"fc16gClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"fc16gNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"fc16gAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"fc16gLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"fc16gLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"fc16gTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"fc16gTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"fc16gServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"fc16gHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.14.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"oc192\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15\",\n        }, # node\n        \"oc192Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the OC192 object.\"\"\",\n        }, # table\n        \"oc192Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oc192Table\"\"\",\n        }, # row\n        \"oc192MappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"oc192AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oc192OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oc192AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"oc192AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"oc192ClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"oc192ClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"oc192NearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"oc192AlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oc192LoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oc192LoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"oc192TestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"oc192TestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"oc192ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"oc192ExpTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected trc(trail trace identification)\"\"\",\n        }, # column\n        \"oc192TxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter trc(trail trace identification)\nConditions:ancestor::card/switching-type = 'tdm'\"\"\",\n        }, # column\n        \"oc192RxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received trc(trail trace identification)\"\"\",\n        }, # column\n        \"oc192TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oc192TimMonitor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of tim defect monitor mode\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"oc192AisType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"genericAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"msAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aisL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"NULL\n\n\ndefault value :Generic-AIS\"\"\",\n        }, # column\n        \"oc192HoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.15.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"stm64\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16\",\n        }, # node\n        \"stm64Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the STM64 object.\"\"\",\n        }, # table\n        \"stm64Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of stm64Table\"\"\",\n        }, # row\n        \"stm64MappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"stm64AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"stm64OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"stm64AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"stm64AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"stm64ClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"stm64ClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"stm64NearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"stm64AlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"stm64LoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"stm64LoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"stm64TestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"stm64TestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"stm64ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"stm64ExpTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected trc(trail trace identification)\"\"\",\n        }, # column\n        \"stm64TxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter trc(trail trace identification)\nConditions:ancestor::card/switching-type = 'tdm'\"\"\",\n        }, # column\n        \"stm64RxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received trc(trail trace identification)\"\"\",\n        }, # column\n        \"stm64TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"stm64TimMonitor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of tim defect monitor mode\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"stm64AisType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"genericAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"msAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aisL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"NULL\n\n\ndefault value :Generic-AIS\"\"\",\n        }, # column\n        \"stm64HoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.16.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"otuc2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17\",\n        }, # node\n        \"otuc2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the otuc2 object\"\"\",\n        }, # table\n        \"otuc2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otuc2Table\"\"\",\n        }, # row\n        \"otuc2FecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC type of client OTUk.\n\n\tConditions:(ancestor::port/port-type = 'client') or (ancestor::port/port-type = 'client-subport')\n\t\n\tdefault value :G709\"\"\",\n        }, # column\n        \"otuc2AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otuc2OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otuc2AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otuc2AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otuc2ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"otuc2ExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2ExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2ExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"otuc2TxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2TxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2TxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"otuc2TimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"otuc2TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otuc2RxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2RxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc2RxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"otuc2DegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"otuc2DegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.17.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"otuc3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18\",\n        }, # node\n        \"otuc3Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the otuc3 object\"\"\",\n        }, # table\n        \"otuc3Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otuc3Table\"\"\",\n        }, # row\n        \"otuc3FecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe FEC type of client OTUk.\n\n\tConditions:(ancestor::port/port-type = 'client') or (ancestor::port/port-type = 'client-subport')\n\t\n\tdefault value :G709\"\"\",\n        }, # column\n        \"otuc3AdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otuc3OperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otuc3AvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otuc3AliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otuc3ServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"otuc3ExpSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3ExpDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3ExpOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected operator TTI\"\"\",\n        }, # column\n        \"otuc3TxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3TxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3TxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter operator TTI\"\"\",\n        }, # column\n        \"otuc3TimDefectMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTimMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tim defect selection mode\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"otuc3TimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"otuc3RxSapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received sapi(Source Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3RxDapi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received dapi(Destination Access Point Identifier)\"\"\",\n        }, # column\n        \"otuc3RxOperator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received operator TTI\"\"\",\n        }, # column\n        \"otuc3DegradeInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The consecutive number of 1s intervals with the number of detected block errors exceeding the block error threshold for each of those seconds for the purposes of SDBER detection.\n\n\ndefault value :7\"\"\",\n        }, # column\n        \"otuc3DegradeThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.18.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2590845\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The threshold number of block errors at which a 1s interval will be considered degraded for the purposes of SDBER detection.\n\n\ndefault value :1\"\"\",\n        }, # column\n        \"ochOs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19\",\n        }, # node\n        \"ochOsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the och-os MO\"\"\",\n        }, # table\n        \"ochOsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ochOsTable\"\"\",\n        }, # row\n        \"ochOsModulationFormat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dpQpsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dp16qam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dp8qam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"nrz\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrently och-os modulation format\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ochOsLineEncoding\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nonDifferential\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"differential\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrently line-encoding mode\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ochOsFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFreq\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe laser frequency. For tx-lo-independent laser-type, it set the tx laser frequency only.\n\n\t\n\tUNITS:MHz\n\tdefault value :0\"\"\",\n        }, # column\n        \"ochOsActualFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFreq\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe actual laser frequency.\nIf rx-frequency is 0, it reflects both Rx and Tx frequency for coherent interface.\n\n\t\n\tUNITS:MHz\n\tdefault value :0\"\"\",\n        }, # column\n        \"ochOsRxFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFreq\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe rx laser frequency. Special for 0 means it is same as tx laser frequency.\n\n\tConditions:../../possible-pluggable-types != 'SFP+'\n\tUNITS:MHz\n\tdefault value :0\"\"\",\n        }, # column\n        \"ochOsActualRxFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFreq\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe actual rx laser frequency for coherent interface with separating Lo laser from Tx.\n0 means Lo and Tx share the same laser where 'frequency' attriute will indicate both Tx and Rx.\n\n\tConditions:../../possible-pluggable-types != 'SFP+'\n\tUNITS:MHz\n\tdefault value :0\"\"\",\n        }, # column\n        \"ochOsLaserEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe enable switching of output laser.\n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"ochOsRequiredTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis is to support adjustable optical power of Line side.\n\n\t\n\t\n\tdefault value :1.0\"\"\",\n        }, # column\n        \"ochOsActualTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis is the actual transmitting optical power of Line side.\n\n\t\n\t\n\tdefault value :-99.0\"\"\",\n        }, # column\n        \"ochOsFecType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOtukFec\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The FEC type of och-os\n\n\ndefault value :SDFEC25\"\"\",\n        }, # column\n        \"ochOsRxAttenuation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis is to support configurable optical attenuation at receiver side which is based on the hardware capability on the port.\n\n\t\n\t\n\tdefault value :0.0\"\"\",\n        }, # column\n        \"ochOsTxFilterRollOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitter filter roll off factor.\n\n\ndefault value :0.2\"\"\",\n        }, # column\n        \"ochOsPreemphasis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Preemphasis of transmitted signal.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"ochOsPreemphasisValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Preemphasis of transmitted signal.\n\n\ndefault value :1.0\"\"\",\n        }, # column\n        \"ochOsAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ochOsOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ochOsAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ochOsAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ochOsLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"ochOsLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"ochOsServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"ochOsDGD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value of Differential Group Delay\n\nUNITS:ps\"\"\",\n        }, # column\n        \"ochOsCD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value of Chromatic Dispersion\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"ochOsOSNR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrent value of OSNR.\nThe result could be OSNR value with dB\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ochOsQFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCurrent value of Q-factor\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"ochOsPreFecBer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current value of PreFEC Bit Error Ratio.\n\n\ndefault value :-99.0\"\"\",\n        }, # column\n        \"ochOsCdRangeLow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"low value of chromatic dispersion search range.\n\nUNITS:ps/nm\ndefault value :-45000\"\"\",\n        }, # column\n        \"ochOsCdRangeHigh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"high value of chromatic dispersion search range.\n\nUNITS:ps/nm\ndefault value :45000\"\"\",\n        }, # column\n        \"ochOsPropagateShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When the attribute value is set to yes, the transmit laser will\nbe shutdown if the whole service of the direction has signal failure,\nthe function mainly used in regeneration node to propagate signal failure as LOS.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"ochOsFastSopMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.19.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if enable fast SOP (state of polarization) change tracking; if enabled, the interface \nwill tolerate very fast SOP and transient.\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSonet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30\",\n        }, # node\n        \"wan10gSonetTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the 10GWAN_SONET object.\"\"\",\n        }, # table\n        \"wan10gSonetEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of wan10gSonetTable\"\"\",\n        }, # row\n        \"wan10gSonetMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"wan10gSonetAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"wan10gSonetOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"wan10gSonetAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"wan10gSonetAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"wan10gSonetClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"wan10gSonetClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"wan10gSonetHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"wan10gSonetNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"wan10gSonetAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSonetLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSonetLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"wan10gSonetTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"wan10gSonetTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"wan10gSonetServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"wan10gSonetExpTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected trc(trail trace identification)\"\"\",\n        }, # column\n        \"wan10gSonetTxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter trc(trail trace identification)\nConditions:ancestor::card/switching-type = 'tdm'\"\"\",\n        }, # column\n        \"wan10gSonetRxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received trc(trail trace identification)\"\"\",\n        }, # column\n        \"wan10gSonetTimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSonetTimMonitor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of tim defect monitor mode\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSonetAisType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.30.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"genericAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"msAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aisL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"NULL\n\n\ndefault value :Generic-AIS\"\"\",\n        }, # column\n        \"wan10gSdh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31\",\n        }, # node\n        \"wan10gSdhTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nRepresents the 10GWAN_SDH object.\"\"\",\n        }, # table\n        \"wan10gSdhEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of wan10gSdhTable\"\"\",\n        }, # row\n        \"wan10gSdhMappingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gfpF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"t40gbmpOdu2e\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"preamble\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"bmpFixedstuff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"bmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"amp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mapping mode of client port packets into ODUk.\n\n\ndefault value :not-applicable\"\"\",\n        }, # column\n        \"wan10gSdhAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"wan10gSdhOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"wan10gSdhAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"wan10gSdhAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"wan10gSdhClientShutdown\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of client-shutdown.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"wan10gSdhClientShutdownHoldoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hold off time of client shutdown or replacement siganl at egress direction.\n\nUNITS:milliseconds\ndefault value :0\"\"\",\n        }, # column\n        \"wan10gSdhHoldoffSignal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specify if specific signal will be sent out during hold off time\nwhich avoid downstream equipment consequent action in the duration.\n\t\n\t\n\tdefault value :no\"\"\",\n        }, # column\n        \"wan10gSdhNearEndAls\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesYesNo\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of near end ALS.\n\n\ndefault value :no\"\"\",\n        }, # column\n        \"wan10gSdhAlsDegradeMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switching of defect BERSD-ODU trig ALS\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSdhLoopbackEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of loopback function.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSdhLoopbackType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"terminal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"facility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of loopback function\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"wan10gSdhTestSignalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type mode of test signal.\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"wan10gSdhTestSignalEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTestSignalConfig\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of test signal function\n\n\ndefault value :NONE\"\"\",\n        }, # column\n        \"wan10gSdhServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection related facility.\"\"\",\n        }, # column\n        \"wan10gSdhExpTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The expected trc(trail trace identification)\"\"\",\n        }, # column\n        \"wan10gSdhTxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transmitter trc(trail trace identification)\nConditions:ancestor::card/switching-type = 'tdm'\"\"\",\n        }, # column\n        \"wan10gSdhRxTrc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The received trc(trail trace identification)\"\"\",\n        }, # column\n        \"wan10gSdhTimAct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of inserting AIS by tim function\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSdhTimMonitor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enable switching of tim defect monitor mode\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"wan10gSdhAisType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.31.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"genericAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"msAis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aisL\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"NULL\n\n\ndefault value :Generic-AIS\"\"\",\n        }, # column\n        \"eth10gStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32\",\n        }, # node\n        \"eth10gStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"eth10gStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth10gStatisticsTable\"\"\",\n        }, # row\n        \"eth10gStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for input signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryInPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for output signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth10gStatisticsEntryOutPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.32.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"oduStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33\",\n        }, # node\n        \"oduStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"oduStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"odutypeL1\",\n                \"oduidL1\",\n                \"odutypeL2\",\n                \"oduidL2\",\n                \"odutypeL3\",\n                \"oduidL3\",\n                \"odutypeL4\",\n                \"oduidL4\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oduStatisticsTable\"\"\",\n        }, # row\n        \"oduStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"oduStatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"oduStatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oduStatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oduStatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oduStatisticsEntryEncryptionFailRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.33.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Failed Encryption Frames of Receive side\n\nUNITS:frames\"\"\",\n        }, # column\n        \"eth40gStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34\",\n        }, # node\n        \"eth40gStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"eth40gStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth40gStatisticsTable\"\"\",\n        }, # row\n        \"eth40gStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for input signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryInPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for output signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth40gStatisticsEntryOutPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.34.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35\",\n        }, # node\n        \"eth100gStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"eth100gStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of eth100gStatisticsTable\"\"\",\n        }, # row\n        \"eth100gStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for input signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryInPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for input 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for output signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutDropEvents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal drop events\n\nUNITS:events\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal octets\n\nUNITS:octets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output signal packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutBroadcastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output broadcast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutMulticastPackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output multicast packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutCrcAlignErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output CRC error packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutUndersizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output undersize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutOversizePackets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output oversize packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutFragments\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output fragment packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output jabber packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets64octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 64 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets65to127octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 65 to 127 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets128to255octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 128 to 255 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets256to511octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 256 to 511 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets512to1023octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 512 to 1023 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"eth100gStatisticsEntryOutPackets1024to1518octets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.35.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for output 1024 to 1518 octets packets\n\nUNITS:packets\"\"\",\n        }, # column\n        \"otu4Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36\",\n        }, # node\n        \"otu4StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"otu4StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu4StatisticsTable\"\"\",\n        }, # row\n        \"otu4StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"otu4StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu4StatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"otu4StatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu4StatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu4StatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu4StatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu4StatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.36.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37\",\n        }, # node\n        \"otu2StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"otu2StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu2StatisticsTable\"\"\",\n        }, # row\n        \"otu2StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"otu2StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2StatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"otu2StatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu2StatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu2StatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2StatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2StatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.37.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2eStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38\",\n        }, # node\n        \"otu2eStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"otu2eStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otu2eStatisticsTable\"\"\",\n        }, # row\n        \"otu2eStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2eStatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otu2eStatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.38.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oc192Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39\",\n        }, # node\n        \"oc192StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"oc192StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oc192StatisticsTable\"\"\",\n        }, # row\n        \"oc192StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"oc192StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oc192StatisticsEntryInCodingViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for ingress coding violation\n\nUNITS:bits\"\"\",\n        }, # column\n        \"oc192StatisticsEntryInErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oc192StatisticsEntryInSeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oc192StatisticsEntryInUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"oc192StatisticsEntryInSeverelyErroredFrameSecond\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.39.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for ingress signal frame severely errored\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"stm64Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40\",\n        }, # node\n        \"stm64StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"stm64StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of stm64StatisticsTable\"\"\",\n        }, # row\n        \"stm64StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"stm64StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"stm64StatisticsEntryInBackgroundBlockError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for ingress errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"stm64StatisticsEntryInErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"stm64StatisticsEntryInSeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"stm64StatisticsEntryInUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"stm64StatisticsEntryInOutOfFrameSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.40.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for ingress signal lose of frame\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSonetStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41\",\n        }, # node\n        \"wan10gSonetStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"wan10gSonetStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of wan10gSonetStatisticsTable\"\"\",\n        }, # row\n        \"wan10gSonetStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryInCodingViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for ingress coding violation\n\nUNITS:bits\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryInErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryInSeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryInUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSonetStatisticsEntryInSeverelyErroredFrameSecond\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.41.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for ingress signal frame severely errored\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSdhStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42\",\n        }, # node\n        \"wan10gSdhStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"wan10gSdhStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of wan10gSdhStatisticsTable\"\"\",\n        }, # row\n        \"wan10gSdhStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryInBackgroundBlockError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for ingress errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryInErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryInSeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryInUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for RX unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"wan10gSdhStatisticsEntryInOutOfFrameSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.42.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for ingress signal lose of frame\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"fc8gStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43\",\n        }, # node\n        \"fc8gStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"fc8gStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fc8gStatisticsTable\"\"\",\n        }, # row\n        \"fc8gStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"fc8gStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"fc8gStatisticsEntryInSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.43.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"fc16gStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44\",\n        }, # node\n        \"fc16gStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"fc16gStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fc16gStatisticsTable\"\"\",\n        }, # row\n        \"fc16gStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"fc16gStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"fc16gStatisticsEntryInSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.44.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics Times counting for signal symbol errors\n\nUNITS:Events\"\"\",\n        }, # column\n        \"otuc2Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45\",\n        }, # node\n        \"otuc2StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"otuc2StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otuc2StatisticsTable\"\"\",\n        }, # row\n        \"otuc2StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc2StatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc2StatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.45.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc3Statistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46\",\n        }, # node\n        \"otuc3StatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"otuc3StatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otuc3StatisticsTable\"\"\",\n        }, # row\n        \"otuc3StatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryErroredBlocks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics counting for errored blocks\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc3StatisticsEntrySeverelyErroredSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for severely errored signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"otuc3StatisticsEntryUnavailableSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.46.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for unavailable signal\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"ochOsStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47\",\n        }, # node\n        \"ochOsStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"ochOsStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ochOsStatisticsTable\"\"\",\n        }, # row\n        \"ochOsStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"ochOsStatisticsEntryLossOfSignalSeconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics seconds counting for signal loss\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"ochOsStatisticsEntryBitErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics bits counting for error bit forward error correction\n\nUNITS:bits\"\"\",\n        }, # column\n        \"ochOsStatisticsEntryUncorrectedBlockErrorFec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.1.47.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the statistics blocks counting for uncorrected block error forward error correction\n\nUNITS:blocks\"\"\",\n        }, # column\n        \"cRS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3\",\n        }, # node\n        \"cRSTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nCross connection table. \"\"\",\n        }, # table\n        \"cRSEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cRSSrcTp\",\n                \"cRSDstTp\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cRSTable\"\"\",\n        }, # row\n        \"cRSSrcTp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSource tp of cross connection. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"cRSDstTp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDestination tp of cross connection.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"cRSServiceLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Path/service name of cross-connection.\"\"\",\n        }, # column\n        \"cRSManagedBy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"system\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"user\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Describes whether this CRS was system created or not. \nA system created CRS implies a HW cross connection, that is not \nmanageable by the user.\n\t\n\t\n\tdefault value :user\"\"\",\n        }, # column\n        \"cRSAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"fiberConnection\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4\",\n        }, # node\n        \"fiberConnectionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nFiber connection table which will be user managed and be explicitly provisioned by user. \nFiber Connection indicates the physical fiber connection between physical ports or subports.\"\"\",\n        }, # table\n        \"fiberConnectionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"fiberConnectionSrcPort\",\n                \"fiberConnectionDstPort\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fiberConnectionTable\"\"\",\n        }, # row\n        \"fiberConnectionSrcPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSource port of fiber connection. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"fiberConnectionDstPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDestination port of fiber connection.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"fiberConnectionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"twoWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"oneWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates fiber connection type.\n\n\t\n\t\n\tdefault value :two-way\"\"\",\n        }, # column\n        \"fiberConnectionFiberLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Label of fiber connection.\"\"\",\n        }, # column\n        \"fiberConnectionAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"optical\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5\",\n        }, # node\n        \"ots\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2\",\n        }, # node\n        \"otsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the Optical Transmission Section (OTS) interface entity\"\"\",\n        }, # table\n        \"otsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"otsName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of otsTable\"\"\",\n        }, # row\n        \"otsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name is defined to uniquely identify the ots optical interface.\"\"\",\n        }, # column\n        \"otsAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otsOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"otsAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"otsAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"otsSupportingRxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Rx port for the optical interface.\"\"\",\n        }, # column\n        \"otsSupportingTxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Tx port for the optical interface.\"\"\",\n        }, # column\n        \"otsMeasuredSpanLoss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalDB\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured span loss excluding offset.\"\"\",\n        }, # column\n        \"oms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3\",\n        }, # node\n        \"omsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the optical multiplex section (OMS) interface MO\"\"\",\n        }, # table\n        \"omsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"omsName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of omsTable\"\"\",\n        }, # row\n        \"omsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name is defined to uniquely identify the oms optical interface.\"\"\",\n        }, # column\n        \"omsAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"omsOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"omsAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"omsAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"omsSupportingRxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Rx port for the optical interface.\"\"\",\n        }, # column\n        \"omsSupportingTxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Tx port for the optical interface.\"\"\",\n        }, # column\n        \"omsParentOtsInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting OTS interface.\"\"\",\n        }, # column\n        \"omsRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power\"\"\",\n        }, # column\n        \"omsTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power\"\"\",\n        }, # column\n        \"osc\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4\",\n        }, # node\n        \"oscTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the Optical Supervision Channel (OSC) MO\"\"\",\n        }, # table\n        \"oscEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"oscName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oscTable\"\"\",\n        }, # row\n        \"oscName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name is defined to uniquely identify the osc optical interface.\"\"\",\n        }, # column\n        \"oscAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oscOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"oscAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"oscAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"oscSupportingRxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Rx port for the optical interface.\"\"\",\n        }, # column\n        \"oscSupportingTxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Tx port for the optical interface.\"\"\",\n        }, # column\n        \"oscParentOtsInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting OTS insterface.\"\"\",\n        }, # column\n        \"oscMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"t155m52\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicating the current OSC mode. \n\n\t\n\t\n\tdefault value :155M52\"\"\",\n        }, # column\n        \"oscWavelength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the wavelength band of the OSC channel.\n\n\t\n\tUNITS:nm\n\tdefault value :1510\"\"\",\n        }, # column\n        \"oscDataCommunication\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Configuration for enable or disable data communication network support of the OSC.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"oscRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power\"\"\",\n        }, # column\n        \"oscTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power\"\"\",\n        }, # column\n        \"gopt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5\",\n        }, # node\n        \"goptTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents the Generic Optical Section Interface (GOPT) MO\"\"\",\n        }, # table\n        \"goptEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"goptName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of goptTable\"\"\",\n        }, # row\n        \"goptName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesNameIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name is defined to uniquely identify the gopt optical interface.\"\"\",\n        }, # column\n        \"goptAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"goptOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"goptAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"goptAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"goptSupportingRxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Rx port for the optical interface.\"\"\",\n        }, # column\n        \"goptSupportingTxPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"OpticalCommonSupportingPort\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supporting Tx port for the optical interface.\"\"\",\n        }, # column\n        \"goptRxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Received optical power\"\"\",\n        }, # column\n        \"goptTxOpticalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Transmitted optical power\"\"\",\n        }, # column\n        \"omsStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.9\",\n        }, # node\n        \"omsStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"omsStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"omsName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of omsStatisticsTable\"\"\",\n        }, # row\n        \"omsStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"oscStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.10\",\n        }, # node\n        \"oscStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"oscStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"oscName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oscStatisticsTable\"\"\",\n        }, # row\n        \"oscStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"goptStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11\",\n        }, # node\n        \"goptStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"goptStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"goptName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of goptStatisticsTable\"\"\",\n        }, # row\n        \"goptStatisticsEntryProtectionSwitchDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Protection Switch Duration\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"goptStatisticsEntryProtectionSwitchCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Protection Switch Count\n\nUNITS:times\"\"\",\n        }, # column\n        \"goptStatisticsEntryLossTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Loss of Signal Seconds of Transmit side\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"goptStatisticsEntryLossRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Loss of Signal Seconds of Receive side\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"goptStatisticsEntryLastClear\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.5.11.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The start time of statistics monitor\n\n\ndefault value :0000-00-00T00:00:00.000Z\"\"\",\n        }, # column\n        \"lldp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.6\",\n        }, # node\n        \"lldpStatusNe\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.4.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nGlobal lldp control on NE level. \nValue of 'enabled', then the LLDP agent will receive,\nbut it will not transmit LLDP frames on all ports with port level lldp \nnot disabled of the NE.\n                    \nValue of 'disabled', then LLDP agent will not filter and\nreceive LLDP frames on all ports of the NE.  If there is remote systems\ninformation which is received on ports supporting LLDP and stored in\nthe system before the lldp-status becomes disabled, then the information\nwill naturally age out.                 \n                    \n\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # scalar\n        \"performance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5\",\n        }, # node\n        \"performanceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.1\",\n        }, # node\n        \"performancePmdaystart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"23\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSpecifies the hour of starting collecting 1-DAY monitoring parameters.\nTo reset the NE clock to the default value of 00:00 hours, the parameter should contain the value 0.\n\n\t\n\tUNITS:hour\n\tdefault value :0\"\"\",\n        }, # scalar\n        \"performanceStatisticsEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe global switch for all system statistics data collection. \n\n\t\n\t\n\tdefault value :enabled\"\"\",\n        }, # scalar\n        \"pmPoint\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2\",\n        }, # node\n        \"pmPointTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of performance monitoring points associated with the monitored management object.\"\"\",\n        }, # table\n        \"pmPointEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pmPointPmEntity\",\n                \"pmPointPmpType\",\n                \"pmPointPmTimePeriod\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pmPointTable\"\"\",\n        }, # row\n        \"pmPointPmEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the management object instance the performance monitoring data are collected for.\"\"\",\n        }, # column\n        \"pmPointPmpType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesPmpType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the type of performance monitoring point.\"\"\",\n        }, # column\n        \"pmPointPmTimePeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesManagementTimePeriod\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the time-period increments during which PM data are collected.\"\"\",\n        }, # column\n        \"pmPointSupervisionSwitch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enable/disable counting for all performance monitoring parameters of the given PMP.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"pmPointThresholdingSwitch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enable/disable the TCA processing and reporting for all performance monitoring parameters of the given PM point.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"pmPointHistoryRecording\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enable/disable the history data storage for all performance monitoring parameters of the given PM point.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"pmData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3\",\n        }, # node\n        \"pmDataCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Defines the get-pm output of record performance data for current time\"\"\",\n        }, # table\n        \"pmDataCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pmPointPmEntity\",\n                \"pmPointPmpType\",\n                \"pmPointPmTimePeriod\",\n                \"pmDataCurrentPmParameter\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pmDataCurrentTable\"\"\",\n        }, # row\n        \"pmDataCurrentMonitoringDateTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitoring data and time'\"\"\",\n        }, # column\n        \"pmDataCurrentPmParameter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesPmParameter\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Performance Monitoring parameter, which could be a counter or gauge parameter, the later support current, max and min values.\"\"\",\n        }, # column\n        \"pmDataCurrentPmValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPM counter or gauge value of the PM parameter.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataCurrentPmUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmUnitOfValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUnit of PM value.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataCurrentValidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesValidityType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a performance monitoring value is valid.\"\"\",\n        }, # column\n        \"pmDataLatestHistoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Defines the get-pm output of record performance data for latest history time\"\"\",\n        }, # table\n        \"pmDataLatestHistoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pmPointPmEntity\",\n                \"pmPointPmpType\",\n                \"pmPointPmTimePeriod\",\n                \"pmDataLatestHistoryPmParameter\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pmDataLatestHistoryTable\"\"\",\n        }, # row\n        \"pmDataLatestHistoryMonitoringDateTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitoring data and time'\"\"\",\n        }, # column\n        \"pmDataLatestHistoryPmParameter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesPmParameter\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Performance Monitoring parameter, which could be a counter or gauge parameter, the later support current, max and min values.\"\"\",\n        }, # column\n        \"pmDataLatestHistoryPmValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPM counter or gauge value of the PM parameter.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataLatestHistoryPmUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmUnitOfValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUnit of PM value.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataLatestHistoryValidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesValidityType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a performance monitoring value is valid.\"\"\",\n        }, # column\n        \"pmDataHistoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Defines the get-pm output of record performance data for history\"\"\",\n        }, # table\n        \"pmDataHistoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pmPointPmEntity\",\n                \"pmPointPmpType\",\n                \"pmPointPmTimePeriod\",\n                \"pmDataHistoryRecordIndex\",\n                \"pmDataHistoryPmParameter\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pmDataHistoryTable\"\"\",\n        }, # row\n        \"pmDataHistoryRecordIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index of PM data records.\"\"\",\n        }, # column\n        \"pmDataHistoryMonitoringDateTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Monitoring data and time'\"\"\",\n        }, # column\n        \"pmDataHistoryPmParameter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesPmParameter\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Performance Monitoring parameter, which could be a counter or gauge parameter, the later support current, max and min values.\"\"\",\n        }, # column\n        \"pmDataHistoryPmValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nPM counter or gauge value of the PM parameter.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataHistoryPmUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmUnitOfValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUnit of PM value.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pmDataHistoryValidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesValidityType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a performance monitoring value is valid.\"\"\",\n        }, # column\n        \"pmThresholdsValue\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4\",\n        }, # node\n        \"pmThresholdsValueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of entries of performance monitoring threshold value.\"\"\",\n        }, # table\n        \"pmThresholdsValueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pmPointPmEntity\",\n                \"pmPointPmpType\",\n                \"pmPointPmTimePeriod\",\n                \"pmThresholdsValuePmParameter\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pmThresholdsValueTable\"\"\",\n        }, # row\n        \"pmThresholdsValuePmParameter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantPmtypesPmParameter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Performance Monitoring parameter, which could be a counter or gauge parameter, the later support current, max and min values.\"\"\",\n        }, # column\n        \"pmThresholdsValuePmHighThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmThresholdValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the desired high threshold value of the selected performance monitoring parameter.\"\"\",\n        }, # column\n        \"pmThresholdsValuePmLowThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmThresholdValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the desired low threshold value of the selected performance monitoring parameter.\"\"\",\n        }, # column\n        \"pmThresholdsValuePmUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.5.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantCommonpmUnitOfValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit of the performance monitoring value.\"\"\",\n        }, # column\n        \"networking\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6\",\n        }, # node\n        \"networkingInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.1\",\n        }, # node\n        \"networkingSourceAddressSelectMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"loopbackPrefer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"linkPrefer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Select the source address for route next-hop entry.\nloopback-prefer mode select the numerically lowest address configured on loopback interfaces if exist,\nlink-prefer mode select the address configured on the outgoing interface\n\t\n\t\n\tdefault value :link-prefer\"\"\",\n        }, # scalar\n        \"interface\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2\",\n        }, # node\n        \"interfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of configured interfaces on the device.\"\"\",\n        }, # table\n        \"interfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of interfaceTable\"\"\",\n        }, # row\n        \"interfaceIfName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the interface.\"\"\",\n        }, # column\n        \"interfaceIfDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the interface.\"\"\",\n        }, # column\n        \"interfaceIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ethernetcsmacd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ppp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"softwareloopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lapd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"oscx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the interface. Refer to http://www.iana.org/assignments/smi-numbers\"\"\",\n        }, # column\n        \"interfaceAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"interfaceOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"interfaceAvailStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"busy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"hibernation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"inTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"loopback\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"softwareUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"initializing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"laserSafetyShutoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"measuring\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"firmwareLoading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nProvided to qualify the operational, usage and/or administrative status attributes. \nThe value shall be a bits, management interface shall show the string with space separator ' ' per yang definition.  \n            \nFollowing available status indication shall be supported: \nFailed,Mismatch,LowerLayerDown,NotPresent,Shutdown,Degraded,Idle,Busy,\nHibernation,In-Test,Loopback,SoftwareUpgrade,Initializing,Unknown,Incomplete\n            \nExample: an ODU can be failed without cross connection, the available status is 'Failed Idle'. \n            \nProvided to qualify the operational, usage and/or administrative state attributes. The value of each \nstatus attribute may denote the presence of one or more particular conditions applicable to the resource. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"interfaceAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ethernet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3\",\n        }, # node\n        \"ethernetTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Ethernet attributes of an Ethernet interface.\"\"\",\n        }, # table\n        \"ethernetEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ethernetTable\"\"\",\n        }, # row\n        \"ethernetAutoNegotiation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auto negotiation mode.\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"ethernetDuplexMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDuplexMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Duplex Mode; only valid if auto negotiation is disabled.\n\n\ndefault value :full\"\"\",\n        }, # column\n        \"ethernetOperationalDuplexMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDuplexMode\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operational duplex mode.\n\n\ndefault value :NA\"\"\",\n        }, # column\n        \"ethernetRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthernetRate\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Required Ethernet Rate; only valid if auto negotiation is disabled.\n\n\ndefault value :max-rate\"\"\",\n        }, # column\n        \"ethernetOperationalEthernetRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEthernetRate\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operation ethernet rate.\n\n\ndefault value :NA\"\"\",\n        }, # column\n        \"ethernetFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFlowControl\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the type of flow control to be supported.\n\n\ndefault value :tx-rx\"\"\",\n        }, # column\n        \"ethernetOperationalFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesFlowControl\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operational flow control.\n\n\ndefault value :NA\"\"\",\n        }, # column\n        \"ethernetMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesMacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC Address of the port.\n\n\ndefault value :00:00:00:00:00:00\"\"\",\n        }, # column\n        \"ethernetAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ppp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4\",\n        }, # node\n        \"pppTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"pppEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pppTable\"\"\",\n        }, # row\n        \"pppType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"gcc0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the link type associated with the ppp.\"\"\",\n        }, # column\n        \"pppPfRef\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the ppp profile.\"\"\",\n        }, # column\n        \"pppResourceRef\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the lower layer resource associated with this interface.\"\"\",\n        }, # column\n        \"pppAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ipv4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5\",\n        }, # node\n        \"ipv4Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Parameters for the IPv4 address family.\"\"\",\n        }, # table\n        \"ipv4Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ipv4Table\"\"\",\n        }, # row\n        \"ipv4Forwarding\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Controls IPv4 packet forwarding of datagrams received by,\nbut not addressed to, this interface.  IPv4 routers\nforward datagrams.  IPv4 hosts do not (except those\nsource-routed via the host).\n\t\n\t\n\tdefault value :true\"\"\",\n        }, # column\n        \"ipv4Mtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"68\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"68\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size, in octets, of the largest IPv4 packet that the\ninterface will send and receive. \n                \nThe server may restrict the allowed values for this leaf,\ndepending on the interface's type.\n                \nIf this leaf is not configured, the operationally used MTU\ndepends on the interface's type.\n\t\n\tUNITS:octets\n\t\"\"\",\n        }, # column\n        \"ipv4AddressAssignmentMethod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv4 address assignment method.\n\n\ndefault value :static\"\"\",\n        }, # column\n        \"ipAddress\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6\",\n        }, # node\n        \"ipAddressTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IPv4 address on the interface.\"\"\",\n        }, # table\n        \"ipAddressEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ipAddressTable\"\"\",\n        }, # row\n        \"ipAddressIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IPv4 address on the interface.\"\"\",\n        }, # column\n        \"ipAddressOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"linkLayer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"random\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The origin of this address.\n\n\ndefault value :static\"\"\",\n        }, # column\n        \"ipAddressPrefixLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length of the subnet prefix.\"\"\",\n        }, # column\n        \"ipUnnumbered\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.7\",\n        }, # node\n        \"ipUnnumberedTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IP unnumbered configurations.\"\"\",\n        }, # table\n        \"ipUnnumberedEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ipUnnumberedTable\"\"\",\n        }, # row\n        \"ipUnnumberedUnnumEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates that the interface is unnumbered. By default the interface is numbered, i.e., expected to have an IP address configuration.\n\n\ndefault value :false\"\"\",\n        }, # column\n        \"ipUnnumberedParentInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the parent interface of the unnumbered interface.\"\"\",\n        }, # column\n        \"routingProtocol\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9\",\n        }, # node\n        \"routingProtocolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Routing protocol instance.\"\"\",\n        }, # table\n        \"routingProtocolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of routingProtocolTable\"\"\",\n        }, # row\n        \"routingProtocolRtpType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesRtpType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the routing protocol instance.\"\"\",\n        }, # column\n        \"routingProtocolRtpName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the routing protocol instance. \n\nFor system-controlled instances this name is\npersistent, i.e., it SHOULD NOT change across\nreboots.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"routingProtocolDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the routing protocol instance.\"\"\",\n        }, # column\n        \"staticRoute\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10\",\n        }, # node\n        \"staticRouteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of static routes.\"\"\",\n        }, # table\n        \"staticRouteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n                \"staticRouteDestinationPrefix\",\n            ],\n            \"description\" :\n                \"\"\"Entry of staticRouteTable\"\"\",\n        }, # row\n        \"staticRouteDestinationPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CORIANT-GROOVE-MIB\",\n                        \"type\" : \"IetfInetTypesIpv4Prefix\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv4 destination prefix.\"\"\",\n        }, # column\n        \"staticRouteDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the static route.\"\"\",\n        }, # column\n        \"staticRouteAdvertised\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to YES, the static route is advertised in the routing\nprotocol. For OSPF, the static route will be advertised as an \nAS external route, if OSPF is configured as an ASBR.\n\t\n\t\n\tdefault value :false\"\"\",\n        }, # column\n        \"nextHop\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11\",\n        }, # node\n        \"nextHopTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Configuration of static next-hop.\"\"\",\n        }, # table\n        \"nextHopEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n                \"staticRouteDestinationPrefix\",\n                \"nextHopIndex\",\n                \"ribName\",\n                \"routeSourceProtocol\",\n                \"routeDestinationPrefix\",\n            ],\n            \"description\" :\n                \"\"\"Entry of nextHopTable\"\"\",\n        }, # row\n        \"nextHopIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An user-specified identifier utilised to uniquely reference the next-hop entry in the next-hop list. The value of this index has no semantic meaning other than for referencing the entry.\"\"\",\n        }, # column\n        \"nextHopOutgoingInterface\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the outgoing interface.\"\"\",\n        }, # column\n        \"nextHopAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv4 address of the next-hop.\"\"\",\n        }, # column\n        \"nextHopMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"metric of the next-hop.\n\n\ndefault value :0\"\"\",\n        }, # column\n        \"ospf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12\",\n        }, # node\n        \"ospfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"OSPF protocol.\"\"\",\n        }, # table\n        \"ospfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ospfTable\"\"\",\n        }, # row\n        \"ospfRouterId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDottedQuad\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF Router ID.\"\"\",\n        }, # column\n        \"ospfDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the OSPF instance.\"\"\",\n        }, # column\n        \"ospfAsbr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF Autonomous System Boundary Router.\n\n\ndefault value :true\"\"\",\n        }, # column\n        \"ospfAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ospfOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ospfAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.12.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ospfArea\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13\",\n        }, # node\n        \"ospfAreaTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Configuration of ospf area.\"\"\",\n        }, # table\n        \"ospfAreaEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n                \"ospfAreaId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ospfAreaTable\"\"\",\n        }, # row\n        \"ospfAreaId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CORIANT-GROOVE-MIB\",\n                        \"type\" : \"IetfYangTypesDottedQuad\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF Router Area ID.\"\"\",\n        }, # column\n        \"ospfAreaAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ospfAreaOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe operational state specifies whether or not a resource is able to provide service. \nThe operational state shall be visible to the operator. The user cannot modify the operational state. It provides a simple mechanism for the operator to decide whether a resource is operational or not, therefore this parameter has a read-only nature. \nThe operational state is closely coupled with the alarm status of a resource, i.e. state transitions are triggered internally by the NE software. It can have one of the following values:\nDown: The resource is totally inoperable and unable to provide service to the user(s)\nUp: The resource is partially or fully operable and available for use. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"ospfAreaAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"ospfAreaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.13.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stub\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF Router Area Type.\n\n\ndefault value :normal\"\"\",\n        }, # column\n        \"ospfInterface\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14\",\n        }, # node\n        \"ospfInterfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Configuration of interface in an ospf area.\"\"\",\n        }, # table\n        \"ospfInterfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n                \"ospfAreaId\",\n                \"ospfInterfaceOspfIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ospfInterfaceTable\"\"\",\n        }, # row\n        \"ospfInterfaceOspfIfName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the interface in OSPF area.\"\"\",\n        }, # column\n        \"ospfInterfaceOspfLinkpf\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the ospf link profile associated with the interface.\"\"\",\n        }, # column\n        \"ospfInterfaceOspfCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF link cost.\"\"\",\n        }, # column\n        \"ospfInterfaceOspfIfRouting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies if Routing is enabled and if so, if Routing is passive or active.\nACTIVE - This link is advertised and routing messages are transported over this link.\nPASSIVE - This link is advertised, routing messages are not transported over this link.\n\t\n\t\n\tdefault value :active\"\"\",\n        }, # column\n        \"ospfInterfaceOspfNetworkType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.14.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pointToPoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pointToMultipoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF Interface Network Types.\"\"\",\n        }, # column\n        \"ospfAdjacency\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15\",\n        }, # node\n        \"ospfAdjacencyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"attributes of OSPF adjacency.\"\"\",\n        }, # table\n        \"ospfAdjacencyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"routingProtocolRtpType\",\n                \"routingProtocolRtpName\",\n                \"ospfAreaId\",\n                \"ospfInterfaceOspfIfName\",\n                \"ospfAdjacencyOspfNeighborAddress\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ospfAdjacencyTable\"\"\",\n        }, # row\n        \"ospfAdjacencyOspfNeighborAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CORIANT-GROOVE-MIB\",\n                        \"type\" : \"IetfInetTypesIpv4Address\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"neighbor IP address of the OSPF adjacency.\"\"\",\n        }, # column\n        \"ospfAdjacencyNeighborRouterId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDottedQuad\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF neighbor Router ID.\"\"\",\n        }, # column\n        \"ospfAdjacencyOspfAdjStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.15.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"init\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"attempt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"twoWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"exstart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"exchange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"loading\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"full\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"OSPF adjacency status.\"\"\",\n        }, # column\n        \"rib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16\",\n        }, # node\n        \"ribTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each entry represents a RIB identified by the 'name'\nkey. All routes in a RIB MUST belong to the same address\nfamily. \n            \nFor each routing instance, an implementation SHOULD\nprovide one system-controlled default RIB for each\nsupported address family.\"\"\",\n        }, # table\n        \"ribEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ribName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ribTable\"\"\",\n        }, # row\n        \"ribName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the RIB.\"\"\",\n        }, # column\n        \"ribAddressFamily\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ipv4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ipv4Unicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Address family.\"\"\",\n        }, # column\n        \"ribDefaultRib\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This flag has the value of 'true' if and only if the\nRIB is the default RIB for the given address family. \n                \nA default RIB always receives direct routes. By\ndefault it also receives routes from all routing\nprotocols.\n\t\n\t\n\tdefault value :true\"\"\",\n        }, # column\n        \"ribDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.16.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the RIB.\"\"\",\n        }, # column\n        \"route\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17\",\n        }, # node\n        \"routeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of static routes.\"\"\",\n        }, # table\n        \"routeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ribName\",\n                \"routeSourceProtocol\",\n                \"routeDestinationPrefix\",\n            ],\n            \"description\" :\n                \"\"\"Entry of routeTable\"\"\",\n        }, # row\n        \"routeSourceProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSourceProtocol\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the routing protocol from which the route  originated.\"\"\",\n        }, # column\n        \"routeDestinationPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CORIANT-GROOVE-MIB\",\n                        \"type\" : \"IetfInetTypesIpv4Prefix\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv4 destination prefix.\"\"\",\n        }, # column\n        \"routeDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Textual description of the route.\"\"\",\n        }, # column\n        \"routePreference\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This route attribute, also known as administrative\ndistance, allows for selecting the preferred route\namong routes with the same destination prefix. A\nsmaller value means a more preferred route.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"routeActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.17.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates that the route is preferred among all routes in the same RIB that have the same destination prefix.\"\"\",\n        }, # column\n        \"profiles\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18\",\n        }, # node\n        \"pppProfile\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1\",\n        }, # node\n        \"pppProfileTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Profile for the point-to-point interface.\"\"\",\n        }, # table\n        \"pppProfileEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pppProfilePppPfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pppProfileTable\"\"\",\n        }, # row\n        \"pppProfilePppPfName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the point-to-point protocol profile.\"\"\",\n        }, # column\n        \"pppProfilePppFcsLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"t16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"t32\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies whether the frame check sequence is a 16-bit or 32-bit value.\n\n\ndefault value :16\"\"\",\n        }, # column\n        \"pppProfilePppMru\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"64\",\n                        \"max\" : \"1500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"64\",\n                        \"max\" : \"1500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the maximum number of octets in the Information and Padding fields.\n\nUNITS:octets\ndefault value :1500\"\"\",\n        }, # column\n        \"pppProfilePppRestartTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the restart timer of the PPP protocol in seconds.\n\nUNITS:seconds\ndefault value :3\"\"\",\n        }, # column\n        \"pppProfilePppMaxFailure\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the maximum failure value of the PPP protocol profile.\n\n\ndefault value :5\"\"\",\n        }, # column\n        \"ospfLinkProfile\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2\",\n        }, # node\n        \"ospfLinkProfileTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Profile for the OSPF protocol link.\"\"\",\n        }, # table\n        \"ospfLinkProfileEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ospfLinkProfileOspfLinkpfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ospfLinkProfileTable\"\"\",\n        }, # row\n        \"ospfLinkProfileOspfLinkpfName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the OSPF protocol link profile.\"\"\",\n        }, # column\n        \"ospfLinkProfileHelloInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the Hello Interval in seconds.\n\nUNITS:seconds\ndefault value :10\"\"\",\n        }, # column\n        \"ospfLinkProfileRouterDeadInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the Router Dead Interval in seconds.\n\nUNITS:seconds\ndefault value :40\"\"\",\n        }, # column\n        \"ospfLinkProfileRetransmissionInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.18.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the Retransmission Interval in seconds.\n\nUNITS:seconds\ndefault value :5\"\"\",\n        }, # column\n        \"oscx\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19\",\n        }, # node\n        \"oscxTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"OSCX (Optical Supervisory Channel Extended) interface\"\"\",\n        }, # table\n        \"oscxEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"interfaceIfName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oscxTable\"\"\",\n        }, # row\n        \"oscxChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"t1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"t2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the OSCX channel within the Optical Supervisory Channel.\"\"\",\n        }, # column\n        \"oscxResourceRef\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference of the lower layer resource associated with this interface.\"\"\",\n        }, # column\n        \"oscxAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.6.19.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined alias for this entity. Must be an alphanumeric string with dash or underscore\"\"\",\n        }, # column\n        \"security\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7\",\n        }, # node\n        \"securityInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1\",\n        }, # node\n        \"securitySshPublicKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system's public key for use with SSH or SFTP.This is a leaf list, encode by some leafs.\"\"\",\n        }, # scalar\n        \"securitySshPublicKeyFingerprint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fingerprint of the system's public key.This is a leaf list, encode by some leafs.\"\"\",\n        }, # scalar\n        \"securityPreLoginMessage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Welcome message displayed before user login\n\n\ndefault value :****************************************** Warning ******************************************\n\nThis system is restricted to authorized users for business purposes. Unauthorized access is a\nviolation of the law. This service may be monitored for administrative and security reasons.\nBy proceeding, you consent to this monitoring.\n\n*********************************************************************************************\"\"\",\n        }, # scalar\n        \"securityWarningMessage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Welcome message displayed after user login\n\n\ndefault value :****************************************** Warning ******************************************\n\nThis system is restricted to authorized users for business purposes. Unauthorized access is a\nviolation of the law. This service may be monitored for administrative and security reasons.\nBy proceeding, you consent to this monitoring.\n\n*********************************************************************************************\"\"\",\n        }, # scalar\n        \"securityAaaAuthenticationMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"localOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"localFirstThenRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remoteFirstThenLocal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"remoteUnavailableThenLocal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specify authentication method for the user login to the NE.\n\n\ndefault value :local-only\"\"\",\n        }, # scalar\n        \"securitySystemFips\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specifies whether the system security is operating in compliance with FIPS.\n\n\ndefault value :disabled\"\"\",\n        }, # scalar\n        \"securityHttpSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines whether unsecure HTTP protocol is allowed; includes file transfer, or any other application that uses HTTP\n\n\ndefault value :disabled\"\"\",\n        }, # scalar\n        \"user\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2\",\n        }, # node\n        \"userTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"userEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"userName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of userTable\"\"\",\n        }, # row\n        \"userName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesUserName\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User name.\"\"\",\n        }, # column\n        \"userPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The password of the user.\"\"\",\n        }, # column\n        \"userClass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cryptoOfficer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"administration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"configuration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"operation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"supervision\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The access class for the user.\n\n\ndefault value :supervision\"\"\",\n        }, # column\n        \"userMaxInvalidLogin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is the maximum number of consecutive and invalid login attempts\nbefore an account is suspended (lockedout).\n\t\n\t\n\tdefault value :3\"\"\",\n        }, # column\n        \"userSuspensionTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is the duration of UID suspension following consecutive invalid login attempts.\nSetting the value to 0 disables this attribute.\n\t\n\tUNITS:seconds\n\tdefault value :60\"\"\",\n        }, # column\n        \"userTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is the Session Time Out Interval. If there are no messages between the user\nand the NE over the Time Out interval, the session is logged off. Setting the value to 0 disables\nthis attribute (meaning the session will not time out).\n\t\n\tUNITS:minutes\n\tdefault value :30\"\"\",\n        }, # column\n        \"userPasswordAgingInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"365\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"365\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute is the Password Aging Interval. Setting the value to 0 disables this attribute.\n\nUNITS:days\ndefault value :0\"\"\",\n        }, # column\n        \"userPasswordExpirationDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shows the password expiration date.\"\"\",\n        }, # column\n        \"userAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The attribute allows administrators to modify the user administration status.\n\n\ndefault value :enabled\"\"\",\n        }, # column\n        \"userStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"passwordAged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lockout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute shows the user status.\nUser with status 'enabled' will have access to the system.\nUser with status 'disabled' not have access to the system.\nUser with status 'password-aged' will have access to the system but will be forced to change his password on first-time login.\nUser with status 'lockout' means the account is locked out due to unsuccessful login attempts.\n\t\n\t\n\tdefault value :disabled\"\"\",\n        }, # column\n        \"userMaxSessions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute specifies the maximum number of sessions allowed for this user.\n\n\ndefault value :6\"\"\",\n        }, # column\n        \"userLastLoginDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last login date/time of the user.\n\n\ndefault value :1970-01-01T00:00:00Z\"\"\",\n        }, # column\n        \"userAaaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the authentication method of the user.\n\n\ndefault value :local\"\"\",\n        }, # column\n        \"session\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3\",\n        }, # node\n        \"sessionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"sessionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sessionId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of sessionTable\"\"\",\n        }, # row\n        \"sessionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSessionId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies a unique identifier of the current session. It indicates the\nIP address and transport layer port number associated with this session. \nIf the session is initiated from the serial port, the value is 'NA'.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"sessionUser\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Points to a user instance.\"\"\",\n        }, # column\n        \"sessionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cli\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"snmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"netconf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"restconf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"webgui\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"gnmi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Session type.\"\"\",\n        }, # column\n        \"sessionProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"telnetRaw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"serial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ssh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sshRaw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"https\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"http\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates which protocol has been used to establish the session.\"\"\",\n        }, # column\n        \"sessionCreatedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp the user has created this session.\"\"\",\n        }, # column\n        \"aaaServer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4\",\n        }, # node\n        \"aaaServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"aaaServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"aaaServerServerName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of aaaServerTable\"\"\",\n        }, # row\n        \"aaaServerServerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specify the name of aaa server.\"\"\",\n        }, # column\n        \"aaaServerServerPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is used to sort the servers in the order of precedence.\"\"\",\n        }, # column\n        \"aaaServerProtocolSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacsplus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specify the protocol used for AAA.\n\n\ndefault value :TACACSPLUS\"\"\",\n        }, # column\n        \"aaaServerServerIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IPv4 address of AAA server.\"\"\",\n        }, # column\n        \"aaaServerServerPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AAA server port number.\n\n\ndefault value :49\"\"\",\n        }, # column\n        \"aaaServerSharedSecret\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The shared secret of the aaa server. The shared secret will be displayed as *.\n\n\ndefault value :sharedkey\"\"\",\n        }, # column\n        \"aaaServerRoleSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"authentication\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"authorization\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"accounting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specify the role of the server for AAA.\n\n\ndefault value :authentication authorization\"\"\",\n        }, # column\n        \"aaaServerAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifes the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user.\n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"aaaServerTimeOut\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the response timeout of Access-Request messages sent to a AAA server in seconds.\n\nUNITS:seconds\ndefault value :5\"\"\",\n        }, # column\n        \"aaaServerRetry\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the number of attempted Access-Request messages to a single AAA server before failing authentication.\n\n\ndefault value :3\"\"\",\n        }, # column\n        \"keySyncSession\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5\",\n        }, # node\n        \"keySyncSessionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"TLS session to synchronize ODU encryption key.\"\"\",\n        }, # table\n        \"keySyncSessionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"keySyncSessionId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of keySyncSessionTable\"\"\",\n        }, # row\n        \"keySyncSessionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies a unique identifier of the key synchronization session.\"\"\",\n        }, # column\n        \"keySyncSessionAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe administrative state specifies the permission to use or prohibition \nagainst using the resource. The administrative state can be modified by the user, and operates independently of the operability and usage of the resource. \n\n\t\n\t\n\tdefault value :up\"\"\",\n        }, # column\n        \"keySyncSessionSessionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connecting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unreachable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"failedAuth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating the status of key sync session.\"\"\",\n        }, # column\n        \"keySyncSessionRemoteIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of remote session server.\"\"\",\n        }, # column\n        \"keySyncSessionRemotePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of remote session server.\n\n\ndefault value :8443\"\"\",\n        }, # column\n        \"keySyncSessionLocalIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The source IP address of a manual session.\"\"\",\n        }, # column\n        \"keySyncSessionLocalPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The source port number of a manual session.\"\"\",\n        }, # column\n        \"keySyncSessionSourceAddressFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"specifies the interface of the source IP address of the outgoing packets.\nConditions:../key-sync-session-type = 'manual'\n\ndefault value :auto\"\"\",\n        }, # column\n        \"keySyncSessionConnectedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp the user has created this session.\"\"\",\n        }, # column\n        \"keySyncSessionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating the type of key sync session, \n'manual' is for the session user configured, and 'auto' is for the session automatically created by system.\n\t\n\t\n\tdefault value :manual\"\"\",\n        }, # column\n        \"keySyncSessionAuthType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tlsCertificate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proprietaryPsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicating the authentication type of the key sync session.\n\n\ndefault value :proprietary-psk\"\"\",\n        }, # column\n        \"keySyncSessionLocalCertificate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Previously installed certificate that authenticates the NE.\n\n\ndefault value :none\"\"\",\n        }, # column\n        \"pskMap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7\",\n        }, # node\n        \"pskMapTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"pskMapEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pskMapPskIdentity\",\n            ],\n            \"description\" :\n                \"\"\"Entry of pskMapTable\"\"\",\n        }, # row\n        \"pskMapPskIdentity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PSK identity encoded as a UTF-8 string. For\ndetails how certain common PSK identity formats can\nbe encoded in UTF-8, see section 5.1. of RFC 4279.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"pskMapKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesHexString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The key associated with the PSK identity\"\"\",\n        }, # column\n        \"pskMapPskStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"init\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"authenticate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the psk-map. psk-map can be updated only if psk-status is in init or sync status; the previous psk-map updating can be cancelled only if psk-satus is updating; psk-map cannot be updated and previous psk-map updating cannot be cancelled if psk-status is candidate-key-authenticate.\n\n\ndefault value :init\"\"\",\n        }, # column\n        \"pskMapPskInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label of the psk-map.\n\n\ndefault value :\"\"\",\n        }, # column\n        \"pskMapWarningTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"240\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"240\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Warning Time before psk-map updating completes.\n\nUNITS:minutes\ndefault value :5\"\"\",\n        }, # column\n        \"pskMapCriticalTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"480\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"480\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Critical time before psk-map updating completes.\n\nUNITS:minutes\ndefault value :30\"\"\",\n        }, # column\n        \"pskMapTrafficOffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Traffic off time before psk-map updating completes.\n\nUNITS:minutes\ndefault value :1440\"\"\",\n        }, # column\n        \"pskMapEffectiveTimestamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.7.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Time of new psk starts to take effect.\"\"\",\n        }, # column\n        \"key\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9\",\n        }, # node\n        \"keyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A key maintained by the keystore.\"\"\",\n        }, # table\n        \"keyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"keyName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of keyTable\"\"\",\n        }, # row\n        \"keyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An arbitrary name for the key.\"\"\",\n        }, # column\n        \"keyAlgorithmIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"rsa1024\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rsa2048\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rsa3072\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rsa4096\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rsa7680\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"rsa15360\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"secp192r1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"secp256r1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"secp384r1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"secp521r1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies which algorithm is to be used with the key.\nThis value determines how the 'private-key' and 'public-key' fields are interpreted.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"keyPublicKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A binary string that contains the value of the public key. \nThe interpretation of the content is defined in the registration of the key algorithm.  \nFor example, a DSA key is an INTEGER, an RSA key is represented as RSAPublicKey as defined in [RFC3447], and an Elliptic Curve Cryptography (ECC) key is represented using the 'publicKey' described in [RFC5915]\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"certificate\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10\",\n        }, # node\n        \"certificateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A certificate for this private key.\"\"\",\n        }, # table\n        \"certificateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"keyName\",\n                \"certificateName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of certificateTable\"\"\",\n        }, # row\n        \"certificateName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An arbitrary name for the certificate.  The name\nmust be a unique across all keys, not just within\nthis key.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"certificateVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"x509v1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"x509v2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"x509v3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"version of the certificate.\n\n\ndefault value :x509v1\"\"\",\n        }, # column\n        \"certificateSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"serial number of the certificate.\"\"\",\n        }, # column\n        \"certificateSignatureAlgorithm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"signature algorithm of the certificate.\"\"\",\n        }, # column\n        \"certificateIssuer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"issuer of the certificate.\"\"\",\n        }, # column\n        \"certificateValidFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"valid-from date and time of the certificate.\"\"\",\n        }, # column\n        \"certificateValidTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"valid-to date and time of the certificate.\"\"\",\n        }, # column\n        \"certificateSubject\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"subject of the certificate.\"\"\",\n        }, # column\n        \"certificatePublicKeyAlgorithm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.10.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"public-key-algorithm of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.11\",\n        }, # node\n        \"trustedCertificateGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of trusted certificates.  \nThese certificates can be used by a server to authenticate clients, or by clients to authenticate servers.  \nThe certificates may be endpoint specific or for certificate authorities, to authenticate many clients at once.  \nEach list of certificates SHOULD be specific to a purpose, as the list as a whole may be referenced by other modules.\nFor instance, a NETCONF server model might point to a list of certificates to use when authenticating client certificates.\"\"\",\n        }, # table\n        \"trustedCertificateGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"trustedCertificateGroupName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of trustedCertificateGroupTable\"\"\",\n        }, # row\n        \"trustedCertificateGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An arbitrary name for this list of trusted certificates.\"\"\",\n        }, # column\n        \"trustedCertificate\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12\",\n        }, # node\n        \"trustedCertificateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A trusted certificate for a specific use.  \nNote, this 'certificate' is a list in order to encode any associated intermediate certificates.\"\"\",\n        }, # table\n        \"trustedCertificateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"trustedCertificateGroupName\",\n                \"trustedCertificateName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of trustedCertificateTable\"\"\",\n        }, # row\n        \"trustedCertificateName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An arbitrary name for this trusted certificate. \nMust be unique across all lists of trusted certificates (not just this list) so that a leafref to it from another module can resolve to unique values.\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"trustedCertificateVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"x509v1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"x509v2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"x509v3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"version of the certificate.\n\n\ndefault value :x509v1\"\"\",\n        }, # column\n        \"trustedCertificateSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"serial number of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateSignatureAlgorithm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"signature algorithm of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateIssuer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"issuer of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateValidFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"valid-from date and time of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateValidTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"valid-to date and time of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificateSubject\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"subject of the certificate.\"\"\",\n        }, # column\n        \"trustedCertificatePublicKeyAlgorithm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.7.12.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"public-key-algorithm of the certificate.\"\"\",\n        }, # column\n        \"nbi\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8\",\n        }, # node\n        \"snmp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1\",\n        }, # node\n        \"snmpv3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1\",\n        }, # node\n        \"snmpv3Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"SNMPv3 configuration for user\"\"\",\n        }, # table\n        \"snmpv3Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"userName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of snmpv3Table\"\"\",\n        }, # row\n        \"snmpv3UserSecLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"authPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"authNoPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noAuthNoPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the SNMPv3 user security level.\n\n\ndefault value :no-auth-no-priv\"\"\",\n        }, # column\n        \"snmpv3AuthProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"md5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sha\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the authentication protocol that the SNMPv3 user being created will use.\nConditions:(../user-sec-level = 'auth-priv') or (../user-sec-level = 'auth-no-priv')\n\ndefault value :SHA\"\"\",\n        }, # column\n        \"snmpv3AuthPassphrase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the SNMPv3 authentication pass phrase.\nConditions:(../user-sec-level = 'auth-priv') or (../user-sec-level = 'auth-no-priv')\"\"\",\n        }, # column\n        \"snmpv3PrivProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"des\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the privacy protocol that the SNMPv3 user being created will use.\nConditions:../user-sec-level = 'auth-priv'\n\ndefault value :AES\"\"\",\n        }, # column\n        \"snmpv3PrivPassphrase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the SNMPv3 privacy pass phrase.\nConditions:../user-sec-level = 'auth-priv'\"\"\",\n        }, # column\n        \"snmpInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.2\",\n        }, # node\n        \"snmpEngineId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"snmp EngineID of the NE. The EngineID will follow the EngineID format 3 defined in RFC3411. The MAC address in the Engine ID will be the first MAC address of the MAC addresses Pool of the NE.\"\"\",\n        }, # scalar\n        \"snmpCommunity\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.3\",\n        }, # node\n        \"snmpCommunityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of SNMP Community Strings. Please note that the trap-community-string is located in the snmp-target MO.\"\"\",\n        }, # table\n        \"snmpCommunityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"snmpCommunityCommunityString\",\n            ],\n            \"description\" :\n                \"\"\"Entry of snmpCommunityTable\"\"\",\n        }, # row\n        \"snmpCommunityCommunityString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSnmpString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Community String.\"\"\",\n        }, # column\n        \"snmpCommunityCommunityStringAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"readOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"snmp access right of this community string.\n\n\ndefault value :read-only\"\"\",\n        }, # column\n        \"snmpTarget\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4\",\n        }, # node\n        \"snmpTargetTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of SNMP targets (trap listeners)\"\"\",\n        }, # table\n        \"snmpTargetEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"snmpTargetTargetName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of snmpTargetTable\"\"\",\n        }, # row\n        \"snmpTargetSnmpVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"v2c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"v3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"snmp version.\n\n\ndefault value :v2c\"\"\",\n        }, # column\n        \"snmpTargetSnmpv3User\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the snmpv3 user.\nConditions:../snmp-version = 'v3' \"\"\",\n        }, # column\n        \"snmpTargetTargetName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the SNMP target\"\"\",\n        }, # column\n        \"snmpTargetTargetIp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP address of the SNMP target\"\"\",\n        }, # column\n        \"snmpTargetTargetPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"UDP port number.\n\n\ndefault value :162\"\"\",\n        }, # column\n        \"snmpTargetTargetTransport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"udp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of transport for the SNMP target\n\n\ndefault value :udp\"\"\",\n        }, # column\n        \"snmpTargetTrapCommunityString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesSnmpString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Community string used for SNMP traps\nConditions:../snmp-version = 'v2c'\n\ndefault value :groove\"\"\",\n        }, # column\n        \"cli\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2\",\n        }, # node\n        \"cliConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1\",\n        }, # node\n        \"cliConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"cliConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sessionId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cliConfigTable\"\"\",\n        }, # row\n        \"cliConfigCliLines\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of rows to be used for display. This value is automatically \ndiscovered when possible\n\t\n\t\n\tdefault value :40\"\"\",\n        }, # column\n        \"cliConfigCliColumns\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"80\",\n                        \"max\" : \"4000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"80\",\n                        \"max\" : \"4000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of columns to be used for display. This value is automatically \ndiscovered when possible\n\t\n\t\n\tdefault value :140\"\"\",\n        }, # column\n        \"cliConfigMaxHistorySize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Command history maximum size for the current session\n\n\ndefault value :500\"\"\",\n        }, # column\n        \"cliConfigInteractiveMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" This determines if the CLI shall issue interactive prompt (e.g. for prompting \nadditional information, or for confirmation of user initiated actions).  \nEnabled = CLI will prompt user (default)\nDisabled = CLI will suppress any prompt to the user\nThis parameter is set per CLI session and is not persistent.\n\t\n\t\n\tdefault value :enabled\"\"\",\n        }, # column\n        \"restconf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.3\",\n        }, # node\n        \"restconfRestHttpSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines if the HTTP port (8080) is enabled for RESTCONF\n\n\ndefault value :disabled\"\"\",\n        }, # scalar\n        \"restconfRestHttpsSupport\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines if the HTTPS port (8181) is enabled for RESTCONF\n\n\ndefault value :enabled\"\"\",\n        }, # scalar\n        \"restconfRestSessionTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timeout of a cookie based RESTCONF session. \nThe cookie expiration date is reset every time there is activity on the session.\n\t\n\tUNITS:minutes\n\tdefault value :5\"\"\",\n        }, # scalar\n        \"cliAlias\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.4\",\n        }, # node\n        \"cliAliasTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of aliases used in CLI. \nCan only be accessed via 'alias/unalias' CLI commands.\"\"\",\n        }, # table\n        \"cliAliasEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cliAliasName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cliAliasTable\"\"\",\n        }, # row\n        \"cliAliasName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the alias\"\"\",\n        }, # column\n        \"cliAliasValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value of the alias\"\"\",\n        }, # column\n        \"cliScript\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.5\",\n        }, # node\n        \"cliScriptTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of available CLI scripts. \nScripts can be executed with the 'run' command\"\"\",\n        }, # table\n        \"cliScriptEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cliScriptScriptName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of cliScriptTable\"\"\",\n        }, # row\n        \"cliScriptScriptName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"File name of the CLI script\"\"\",\n        }, # column\n        \"cliScriptDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.8.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the CLI script\"\"\",\n        }, # column\n        \"filesw\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9\",\n        }, # node\n        \"softwareload\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2\",\n        }, # node\n        \"softwareloadTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of the software loads in the system.\"\"\",\n        }, # table\n        \"softwareloadEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"softwareloadSwloadId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of softwareloadTable\"\"\",\n        }, # row\n        \"softwareloadSwloadId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nsoftware load identifier which is uniquely identify specific software load.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"softwareloadSwloadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the state of the software load. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"softwareloadSwloadVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwVersion\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the software version of the software load. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"softwareloadSwloadVendor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwloadVendor\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nVendor information of the software load. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"softwareloadSwloadProduct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwloadProduct\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the network element family this software belongs to. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"softwareloadSwloadLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe label of the software load including summary information. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"database\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3\",\n        }, # node\n        \"databaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of the databases in the system.\"\"\",\n        }, # table\n        \"databaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"softwareloadSwloadId\",\n                \"databaseId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of databaseTable\"\"\",\n        }, # row\n        \"databaseId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\ndatabase identifier which is uniquely identify specific database.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"databaseState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the state of the database. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"databaseVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwVersion\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the database version. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"databaseVendor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwloadVendor\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nVendor information of the database. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"databaseProduct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesSwloadProduct\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the network element family this database belongs to. \n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"databaseBackupTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the database last backup time. \n\n\t\n\t\n\tdefault value :\"\"\",\n        }, # column\n        \"fwVersionMap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.4\",\n        }, # node\n        \"fwVersionMapTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The firmware information of the upgradable devices included in the software load.\"\"\",\n        }, # table\n        \"fwVersionMapEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"softwareloadSwloadId\",\n                \"fwVersionMapDeviceName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of fwVersionMapTable\"\"\",\n        }, # row\n        \"fwVersionMapDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesDeviceName\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the name of the device.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"fwVersionMapDeviceFwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesDeviceFwVersion\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the version of the firmware.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"currentFwVersion\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5\",\n        }, # node\n        \"currentFwVersionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The firmware information of the upgradable devices included in the software load.\"\"\",\n        }, # table\n        \"currentFwVersionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"currentFwVersionEquipmentEntity\",\n                \"currentFwVersionDeviceName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of currentFwVersionTable\"\"\",\n        }, # row\n        \"currentFwVersionEquipmentEntity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the entity of the equipment carrying the device.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"currentFwVersionFwEquipmentType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEquipmentType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the type of the equipment carrying the device.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"currentFwVersionDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesDeviceName\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the name of the device.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"currentFwVersionDeviceFwVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantFileSwTypesDeviceFwVersion\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates the version of the firmware.\n\n\t\n\t\n\t\"\"\",\n        }, # column\n        \"currentFwVersionFwState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"current\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nIndicates firmware state of the device.\nCurrent: indicates the loaded firmware is the version of current software load.\nNot-current: indicates the loaded firmware is not the version of current software load.\n\n\t\n\t\n\tdefault value :not-available\"\"\",\n        }, # column\n        \"rollbackPoint\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6\",\n        }, # node\n        \"rollbackPointTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents a rollback point stored in the system. \nA rollback point represents the system configuration of a specific point in time, that the user may create with the \n'create-rollback-point' command, visualize with the 'diff' command' and rollback to with the 'rollback' command.\nThe system is able to store up to 10 rollback-points, rolling over old instances as new ones are created.\nThe incremental IDs of 1..10 are automatically generated by the system whenever the rollback-point is created.\nRollback points can be deleted as any normal object.\nA special 'backup' rollback-point can also be created with ID 0; unlike normal rollback-points, this instance will\nbe kept even after activation with the 'rollback' RPC.\"\"\",\n        }, # table\n        \"rollbackPointEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rollbackPointId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of rollbackPointTable\"\"\",\n        }, # row\n        \"rollbackPointId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Integer ID of the rollback-point. Generated dynamically whenever a rollback-point is created, with range 1 to 100\"\"\",\n        }, # column\n        \"rollbackPointCreationTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp when this rollback-point was created\"\"\",\n        }, # column\n        \"rollbackPointCreationTrigger\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesUserName\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Describes the author user-name of this rollback-point\"\"\",\n        }, # column\n        \"rollbackPointDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User defined description of this rollback-point\"\"\",\n        }, # column\n        \"rollbackPointType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the rollback-point\n\n\ndefault value :normal\"\"\",\n        }, # column\n        \"logServer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8\",\n        }, # node\n        \"logServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Grouping the configuration parameters for log forwarding.\"\"\",\n        }, # table\n        \"logServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"logServerName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of logServerTable\"\"\",\n        }, # row\n        \"logServerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name for the endpoint to forwarding logs to.\"\"\",\n        }, # column\n        \"logServerIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The leaf uniquely specifies the ipv4 address of the remote host.\"\"\",\n        }, # column\n        \"logServerTransport\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"udp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"It is the transport protocol used when forwarding logs.\n\n\ndefault value :udp\"\"\",\n        }, # column\n        \"logServerPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesPortNumber\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This leaf specifies the port number used to deliver messages to the remote server.\n\n\ndefault value :514\"\"\",\n        }, # column\n        \"logServerDestinationFacilityType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesEnableSwitch\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Switching of the function destination-facility\n\n\ndefault value :disabled\"\"\",\n        }, # column\n        \"logServerDestinationFacility\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This leaf specifies the facility used in messages delivered to the remote server.\n\n\ndefault value :23\"\"\",\n        }, # column\n        \"logFacility\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10\",\n        }, # node\n        \"logFacilityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"logFacilityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"logServerName\",\n                \"logFacilityLogSelectorFacility\",\n            ],\n            \"description\" :\n                \"\"\"Entry of logFacilityTable\"\"\",\n        }, # row\n        \"logFacilityLogSelectorFacility\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"event\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"configuration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cryptoConfiguration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"cryptoSecurity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"cryptoEvent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cryptoAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The leaf uniquely identifies a syslog facility for forwarding. \"\"\",\n        }, # column\n        \"logFacilityLogSelectorSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"emergency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"debug\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system log selected severity level for forwarding\n\n\ndefault value :debug\"\"\",\n        }, # column\n        \"logFacilityCompareOp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.9.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"equalsOrHigher\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"equals\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notEquals\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This leaf describes the option to specify how the severity comparison is performed.\n\n\ndefault value :equals-or-higher\"\"\",\n        }, # column\n        \"timeManager\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10\",\n        }, # node\n        \"timeManagerInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1\",\n        }, # node\n        \"timeManagerTimezone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"internationalDateLineWestGmt1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"midwayIslandSamoaGmt1100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"hawaiiGmt1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alaskaGmt0900\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"pacificTimeUsAndCanadaGmt0800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"arizonaGmt0700\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"mountainTimeUsAndCanadaGmt0700\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"centralamericaGmt0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"centralTimeUsAndCanadaGmt0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"mexicoCityTegucigalpaGmt0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"saskatchewanGmt0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"bagotaLimaQuitoGmt0500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"easternTimeUsAndCanadaGmt0500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"indianaEastGmt0500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"caracasLaPazGmt0430\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"atlanticTimeCanadaGmt0400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"santiagoGmt0400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"newfoundlandGmt0330\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"brasiliaGmt0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"buenosAiresGeorgetownGmt0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"greenlandGmt0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"midAtlanticGmt0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"azoresGmt0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"capeVerdeIsGmt0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"casablancaMonroviaGmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"greenwichMeanTimeDublinEdinburghLisbonLondonGmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"amsterdamCopenhagenMadridParisvilniusGmtplus0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"belgradeSarajevoSkopjeSofijaZargrebGmtplus0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"bratislavaBudapestLjublijanaPragueWasawGmtplus0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"brusselsBerlinBernRomeStockholmViennaGmtplus0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"westCentralAfricaGmtplus0100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"athensIstanbulMinskGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"bucharestGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"cairoGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"hararePretoriaGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"helsinkiRigaTallinnGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"jerusalemGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"israelGmtplus0200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"baghdadGmtplus0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"kuwaitRiyadhGmtplus0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"moscowStPetersburgVolgogradGmtplus0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"nairobiGmtplus0300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"tehranGmtplus0330\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"abuDhabiMuscatGmtplus0400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"bakuGmtplus0400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"tbilisiGmtplus0400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"kabulGmtplus0430\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"ekaterinburgGmtplus0500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"islamabadKarachiTashkentGmtplus0500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"mumbaiCalcuttaChennaiNewDelhiGmtplus0530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"colomboGmtplus0530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"kathmanduGmtplus0545\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"dhakaGmtplus0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"almatyGmtplus0600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"rangoonGmtplus0630\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"bangkokHanoiJakartaGmtplus0700\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"beijingChongqingHongKongUrumqiGmtplus0800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"perthGmtplus0800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"singaporeKualaLumpurGmtplus0800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"taipeiGmtplus0800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"osakaSapporoTokyoGmtplus0900\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"seoulGmtplus0900\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"yakutskGmtplus0900\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"adelaideGmtplus0930\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"darwinGmtplus0930\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"brisbaneGmtplus1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"canberraMelbourneSydneyGmtplus1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"guamPortMoresbyGmtplus1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                    \"hobartGmtplus1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"vladivostokGmtplus1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"70\"\n                    },\n                    \"magadanSolomonIsNewCaledoniaGmtplus1100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"71\"\n                    },\n                    \"aucklandWellingtonGmtplus1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"fijiKamchatkaMarshallIsGmtplus1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"73\"\n                    },\n                    \"eniwetokKwajaleinGmtplus1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"74\"\n                    },\n                    \"nukuAlofaGmtplus1300\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"75\"\n                    },\n                    \"kiritimatiGmtplus1400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"76\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Name of the Time Zone of this NE.\n\n\ndefault value :Greenwich_Mean_Time:Dublin-Edinburgh-Lisbon-London[GMT]\"\"\",\n        }, # scalar\n        \"timeManagerCurrentTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current Date and Time of this NE.\"\"\",\n        }, # scalar\n        \"timeManagerLastStartTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfYangTypesDateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the time of last system boot.\"\"\",\n        }, # scalar\n        \"timeManagerUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate how long the system has been running.\"\"\",\n        }, # scalar\n        \"timeManagerTimeSourceState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"external\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"freerun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the state of the time source.\"\"\",\n        }, # scalar\n        \"ntp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.2\",\n        }, # node\n        \"ntpEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if NTP is enabled.\n\n\ndefault value :false\"\"\",\n        }, # scalar\n        \"ntpCurrentTimeSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"IetfInetTypesIpv4AddressNoZone\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current time source.\n\n\ndefault value :0.0.0.0\"\"\",\n        }, # scalar\n        \"ntpAssociation\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3\",\n        }, # node\n        \"ntpAssociationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"ntpAssociationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ntpAssociationSource\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ntpAssociationTable\"\"\",\n        }, # row\n        \"ntpAssociationSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"CORIANT-GROOVE-MIB\",\n                        \"type\" : \"IetfInetTypesIpv4AddressNoZone\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the ntp-association-source.\"\"\",\n        }, # column\n        \"ntpAssociationType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ntpServer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ntpPeer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the ntp association type.\"\"\",\n        }, # column\n        \"ntpAssociationPreferredNtpAssociation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if this is preferred.\"\"\",\n        }, # column\n        \"ntpAssociationNtpAdminState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The administrative state specifies the permission to use or prohibition against using the resource.\n\n\ndefault value :up\"\"\",\n        }, # column\n        \"ntpAssociationStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4\",\n        }, # node\n        \"ntpAssociationStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"NULL\"\"\",\n        }, # table\n        \"ntpAssociationStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ntpAssociationSource\",\n            ],\n            \"description\" :\n                \"\"\"Entry of ntpAssociationStatusTable\"\"\",\n        }, # row\n        \"ntpAssociationStatusNtpAssociationRefid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reference clock type or address for the peer.\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpStratum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute indicates the stratum of local clock. A value of 0, indicates that Stratum in Unspecified.\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpPollingInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"NTP polling interval. This is an integer number indicating the HOST polling interval between transmitted messages, in seconds.\n\nUNITS:seconds\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpPrecision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is an unsigned floating-point number indicating the precision of the various clocks, in milliseconds.\n\nUNITS:milliseconds\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpAssociationOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the offset between the local clock and the superior reference clock.\n\nUNITS:milliseconds\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpAssociationReach\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the reachability of the configured server or peer.\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpAssociationDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the delay between the local clock and the superior reference clock, in milliseconds.\n\nUNITS:milliseconds\"\"\",\n        }, # column\n        \"ntpAssociationStatusNtpAssociationDispersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.10.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the dispersion between the local clock and the peer clock, in milliseconds.\n\nUNITS:milliseconds\"\"\",\n        }, # column\n        \"ztc\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.11\",\n        }, # node\n        \"ztcInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.11.1\",\n        }, # node\n        \"ztcEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"enable/disable Zero Touch commissioning.\n\n\ndefault value :true\"\"\",\n        }, # scalar\n        \"ztcStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ongoing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"done\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the ZTC process status:\ndisabled - ZTC will not be attempted because it was disabled via configuration\nready - ZTC will be attempted when able to communicate with external ZTC server\nongoing - ZTC is ongoing\nfailed - some problems occurred during ZTC\ndone - ZTC completed successfully.\n\t\n\t\n\tdefault value :ready\"\"\",\n        }, # scalar\n        \"common\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13\",\n        }, # node\n        \"bitErrorRatePreFec\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1\",\n        }, # node\n        \"bitErrorRatePreFecTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for bit error rate before fec\"\"\",\n        }, # table\n        \"bitErrorRatePreFecEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of bitErrorRatePreFecTable\"\"\",\n        }, # row\n        \"bitErrorRatePreFecInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePreFecAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePreFecMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePreFecMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePostFec\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2\",\n        }, # node\n        \"bitErrorRatePostFecTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for bit error rate post fec\"\"\",\n        }, # table\n        \"bitErrorRatePostFecEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of bitErrorRatePostFecTable\"\"\",\n        }, # row\n        \"bitErrorRatePostFecInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePostFecAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePostFecMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"bitErrorRatePostFecMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:bit-ratio\"\"\",\n        }, # column\n        \"inUtilization\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3\",\n        }, # node\n        \"inUtilizationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for RX utilization\"\"\",\n        }, # table\n        \"inUtilizationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inUtilizationTable\"\"\",\n        }, # row\n        \"inUtilizationInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inUtilizationAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inUtilizationMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inUtilizationMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outUtilization\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4\",\n        }, # node\n        \"outUtilizationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for TX utilization\"\"\",\n        }, # table\n        \"outUtilizationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outUtilizationTable\"\"\",\n        }, # row\n        \"outUtilizationInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outUtilizationAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outUtilizationMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outUtilizationMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"oduDelay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23\",\n        }, # node\n        \"oduDelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for measured odu signal delay\"\"\",\n        }, # table\n        \"oduDelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"odutypeL1\",\n                \"oduidL1\",\n                \"odutypeL2\",\n                \"oduidL2\",\n                \"odutypeL3\",\n                \"oduidL3\",\n                \"odutypeL4\",\n                \"oduidL4\",\n            ],\n            \"description\" :\n                \"\"\"Entry of oduDelayTable\"\"\",\n        }, # row\n        \"oduDelayInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:microseconds\"\"\",\n        }, # column\n        \"oduDelayAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:microseconds\"\"\",\n        }, # column\n        \"oduDelayMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:microseconds\"\"\",\n        }, # column\n        \"oduDelayMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.23.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:microseconds\"\"\",\n        }, # column\n        \"inOpticalPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24\",\n        }, # node\n        \"inOpticalPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for RX optical power\"\"\",\n        }, # table\n        \"inOpticalPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"omsName\",\n                \"oscName\",\n                \"goptName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inOpticalPowerTable\"\"\",\n        }, # row\n        \"inOpticalPowerInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.24.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25\",\n        }, # node\n        \"outOpticalPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for TX optical power\"\"\",\n        }, # table\n        \"outOpticalPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n                \"subportId\",\n                \"omsName\",\n                \"oscName\",\n                \"goptName\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outOpticalPowerTable\"\"\",\n        }, # row\n        \"outOpticalPowerInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.25.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"differentialGroupDelay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26\",\n        }, # node\n        \"differentialGroupDelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for differential group delay\"\"\",\n        }, # table\n        \"differentialGroupDelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of differentialGroupDelayTable\"\"\",\n        }, # row\n        \"differentialGroupDelayInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:ps\"\"\",\n        }, # column\n        \"differentialGroupDelayAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:ps\"\"\",\n        }, # column\n        \"differentialGroupDelayMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:ps\"\"\",\n        }, # column\n        \"differentialGroupDelayMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.26.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:ps\"\"\",\n        }, # column\n        \"chromaticDispersion\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27\",\n        }, # node\n        \"chromaticDispersionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for chromatic dispersion\"\"\",\n        }, # table\n        \"chromaticDispersionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of chromaticDispersionTable\"\"\",\n        }, # row\n        \"chromaticDispersionInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:ps/nm\"\"\",\n        }, # column\n        \"chromaticDispersionAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:ps/pm\"\"\",\n        }, # column\n        \"chromaticDispersionMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:ps/pm\"\"\",\n        }, # column\n        \"chromaticDispersionMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.27.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:ps/pm\"\"\",\n        }, # column\n        \"osnr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28\",\n        }, # node\n        \"osnrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for osnr\"\"\",\n        }, # table\n        \"osnrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of osnrTable\"\"\",\n        }, # row\n        \"osnrInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"osnrAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"osnrMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"osnrMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.28.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"qFactor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29\",\n        }, # node\n        \"qFactorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for q-factor\"\"\",\n        }, # table\n        \"qFactorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of qFactorTable\"\"\",\n        }, # row\n        \"qFactorInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"qFactorAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"qFactorMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"qFactorMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.29.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"polarizationDependentLoss\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30\",\n        }, # node\n        \"polarizationDependentLossTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for polarization dependent loss\"\"\",\n        }, # table\n        \"polarizationDependentLossEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of polarizationDependentLossTable\"\"\",\n        }, # row\n        \"polarizationDependentLossInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"polarizationDependentLossAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"polarizationDependentLossMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"polarizationDependentLossMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.30.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesDBPrecision1\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalFrequency\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31\",\n        }, # node\n        \"inOpticalFrequencyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for RX optical frequency\"\"\",\n        }, # table\n        \"inOpticalFrequencyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inOpticalFrequencyTable\"\"\",\n        }, # row\n        \"inOpticalFrequencyInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"inOpticalFrequencyAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"inOpticalFrequencyMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"inOpticalFrequencyMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.31.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"outOpticalFrequency\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32\",\n        }, # node\n        \"outOpticalFrequencyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for TX optical frequency\"\"\",\n        }, # table\n        \"outOpticalFrequencyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outOpticalFrequencyTable\"\"\",\n        }, # row\n        \"outOpticalFrequencyInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"outOpticalFrequencyAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"outOpticalFrequencyMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"outOpticalFrequencyMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.32.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\n\nUNITS:MHz\"\"\",\n        }, # column\n        \"inOpticalPowerLaneHigh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33\",\n        }, # node\n        \"inOpticalPowerLaneHighTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for highest value of RX lane optical power\"\"\",\n        }, # table\n        \"inOpticalPowerLaneHighEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inOpticalPowerLaneHighTable\"\"\",\n        }, # row\n        \"inOpticalPowerLaneHighInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneHighAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneHighMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneHighMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.33.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneLow\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34\",\n        }, # node\n        \"inOpticalPowerLaneLowTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for lowest value of RX lane optical power\"\"\",\n        }, # table\n        \"inOpticalPowerLaneLowEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inOpticalPowerLaneLowTable\"\"\",\n        }, # row\n        \"inOpticalPowerLaneLowInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneLowAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneLowMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneLowMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.34.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneTotal\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35\",\n        }, # node\n        \"inOpticalPowerLaneTotalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for total value of RX lane optical power\"\"\",\n        }, # table\n        \"inOpticalPowerLaneTotalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inOpticalPowerLaneTotalTable\"\"\",\n        }, # row\n        \"inOpticalPowerLaneTotalInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneTotalAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneTotalMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inOpticalPowerLaneTotalMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.35.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneHigh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36\",\n        }, # node\n        \"outOpticalPowerLaneHighTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for highest value of TX lane optical power\"\"\",\n        }, # table\n        \"outOpticalPowerLaneHighEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outOpticalPowerLaneHighTable\"\"\",\n        }, # row\n        \"outOpticalPowerLaneHighInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneHighAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneHighMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneHighMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.36.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneLow\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37\",\n        }, # node\n        \"outOpticalPowerLaneLowTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for lowest value of TX lane optical power\"\"\",\n        }, # table\n        \"outOpticalPowerLaneLowEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outOpticalPowerLaneLowTable\"\"\",\n        }, # row\n        \"outOpticalPowerLaneLowInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneLowAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneLowMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneLowMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.37.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneTotal\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38\",\n        }, # node\n        \"outOpticalPowerLaneTotalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for total value of TX lane optical power\"\"\",\n        }, # table\n        \"outOpticalPowerLaneTotalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n                \"portId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outOpticalPowerLaneTotalTable\"\"\",\n        }, # row\n        \"outOpticalPowerLaneTotalInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneTotalAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneTotalMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outOpticalPowerLaneTotalMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.38.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesOpticalPower\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"moduleTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39\",\n        }, # node\n        \"moduleTemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for module temperature\"\"\",\n        }, # table\n        \"moduleTemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n                \"slotId\",\n                \"subslotId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of moduleTemperatureTable\"\"\",\n        }, # row\n        \"moduleTemperatureInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"moduleTemperatureAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"moduleTemperatureMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"moduleTemperatureMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.39.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"inletTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40\",\n        }, # node\n        \"inletTemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for inlet temperature\"\"\",\n        }, # table\n        \"inletTemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of inletTemperatureTable\"\"\",\n        }, # row\n        \"inletTemperatureInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"inletTemperatureAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"inletTemperatureMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"inletTemperatureMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.40.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n        \"outletTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41\",\n        }, # node\n        \"outletTemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"statistics value: average, minimum, maximum and instant value for outlet temperature\"\"\",\n        }, # table\n        \"outletTemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"shelfId\",\n            ],\n            \"description\" :\n                \"\"\"Entry of outletTemperatureTable\"\"\",\n        }, # row\n        \"outletTemperatureInstant\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the instant value of statistics counter\"\"\",\n        }, # column\n        \"outletTemperatureAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the average value of statistics counter\"\"\",\n        }, # column\n        \"outletTemperatureMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the minimum value of statistics counter\"\"\",\n        }, # column\n        \"outletTemperatureMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.13.41.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"CORIANT-GROOVE-MIB\", \"name\" : \"CoriantTypesTemperaturePrecision3\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"the maximum value of statistics counter\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"alarmNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"notificationFmEntity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationConditionType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationDirection\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationTimePeriod\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationServiceAffect\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationSeverityLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationOccurrenceDateTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationConditionDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationFmEntityType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationAlarmConditionType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationLastSeverityLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationExtensionDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"<description>\"\"\",\n        }, # notification\n        \"notAlarmedEventNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CORIANT-GROOVE-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42229.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"notificationFmEntity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationConditionType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationDirection\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationTimePeriod\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationServiceAffect\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationSeverityLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationOccurrenceDateTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationConditionDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationFmEntityType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationAlarmConditionType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationLastSeverityLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n                \"notificationExtensionDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CORIANT-GROOVE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"<description>\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/CPQPOWER-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python CPQPOWER-MIB\n\nFILENAME = \"./CPQPOWER-MIB\"\n\nMIB = {\n    \"moduleName\" : \"CPQPOWER-MIB\",\n\n    \"CPQPOWER-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"CPQHOST-MIB\", \"name\" : \"compaq\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"ifDescr\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysName\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysDescr\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysContact\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysLocation\"},\n        {\"module\" : \"RFC-1212\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC-1215\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"cpqPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165\",\n        }, # node\n        \"powerDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1\",\n        }, # node\n        \"trapInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1\",\n        }, # node\n        \"trapCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A number identifying the event for the trap that was sent.\nMapped unique trap code per unique event to be used by ISEE's\ndecoder ring.\"\"\",\n        }, # scalar\n        \"trapDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string identifying the event for that last trap that was sent.\"\"\",\n        }, # scalar\n        \"trapDeviceMgmtUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string contains the URL for the management software.\"\"\",\n        }, # scalar\n        \"trapDeviceDetails\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string details information about the UPS such as SN (serial number), \nPN (part number), and MN (Model Name).\"\"\",\n        }, # scalar\n        \"trapDeviceName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string contains the name of the HP Management Module.\"\"\",\n        }, # scalar\n        \"managementModuleIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2\",\n        }, # node\n        \"deviceManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's manufacturer.\"\"\",\n        }, # scalar\n        \"deviceModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's model.\"\"\",\n        }, # scalar\n        \"deviceFirmwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's firmware version(s).\"\"\",\n        }, # scalar\n        \"deviceHardwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's hardware version.\"\"\",\n        }, # scalar\n        \"deviceIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string identifying the device. it came from sysName entered by user\"\"\",\n        }, # scalar\n        \"devicePartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's part number.\"\"\",\n        }, # scalar\n        \"deviceSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's serial number.\"\"\",\n        }, # scalar\n        \"deviceMACAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's MAC address.\"\"\",\n        }, # scalar\n        \"pdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2\",\n        }, # node\n        \"pduIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1\",\n        }, # node\n        \"numOfPdu\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PDUs.\"\"\",\n        }, # scalar\n        \"pduIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumOfPdu and including the PduIdent group.\"\"\",\n        }, # table\n        \"pduIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduIdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the name,\nmodel, manufacturer, firmware version, part number, etc.\"\"\",\n        }, # row\n        \"pduIdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the PduIdentEntry table.\"\"\",\n        }, # column\n        \"pduName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string identify the device.\"\"\",\n        }, # column\n        \"pduModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Model.\"\"\",\n        }, # column\n        \"pduManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # column\n        \"pduFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level of the device.\"\"\",\n        }, # column\n        \"pduPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device part number.\"\"\",\n        }, # column\n        \"pduSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device serial number.\"\"\",\n        }, # column\n        \"pduStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device.  A value of OK(2) indicates the device is operating normally.\nA value of degraded(3) indicates the device is operating with warning indicators.  A value of\nfailed(4) indicates the device is operating with critical indicators.\"\"\",\n        }, # column\n        \"pduControllable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether or not the device is controllable.\"\"\",\n        }, # column\n        \"pduInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2\",\n        }, # node\n        \"pduInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumOfPdu and including the PduInput group.\"\"\",\n        }, # table\n        \"pduInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduInputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the voltage and \ncurrent for the PDU\"\"\",\n        }, # row\n        \"pduInputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the PduInputEntry table.\"\"\",\n        }, # column\n        \"inputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input voltage from the PDU meters in volts.\"\"\",\n        }, # column\n        \"inputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input current from the PDU meters in hundredths of Amp.\"\"\",\n        }, # column\n        \"pduOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3\",\n        }, # node\n        \"pduOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumOfPdu and including the PduInput group.\"\"\",\n        }, # table\n        \"pduOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the name,\nheat load, current load, power load, firmware, etc.\"\"\",\n        }, # row\n        \"pduOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the PduOutputEntry table.\"\"\",\n        }, # column\n        \"pduOutputLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device output load in percent of rated capacity.  A value of -1 will be\nreturned if the heat load is unable to be measured.\"\"\",\n        }, # column\n        \"pduOutputHeat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total heat load measured on the PDU in BTUs.  A value of -1 will be\nreturned if the heat load is unable to be measured.\"\"\",\n        }, # column\n        \"pduOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power load measured on the PDU in watts.  A value of -1 will be\nreturned if the power load is unable to be measured.\"\"\",\n        }, # column\n        \"pduOutputNumBreakers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of breakers for the device.  This variable indicates the number \nof rows in the breakers table.\"\"\",\n        }, # column\n        \"pduOutputBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of breaker table entries.  The number of entries is given by pduOutputNumBreakers .\"\"\",\n        }, # table\n        \"pduOutputBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduOutputIndex\",\n                \"breakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to an breaker.\"\"\",\n        }, # row\n        \"breakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The breaker identifier.\"\"\",\n        }, # column\n        \"breakerVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The breaker voltage in volts.\"\"\",\n        }, # column\n        \"breakerCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The breaker current draw in hundredths of Amp.\"\"\",\n        }, # column\n        \"breakerPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The breaker load in percent.\"\"\",\n        }, # column\n        \"breakerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.2.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"overloadWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"overloadCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"voltageRangeWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"voltageRangeCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the status of the breaker.  A value of normal(1)\nindicates the breaker is operating normally.  A value of overloadWarning(2)\nindicates the breaker has an overload warning.  A value of overloadCritical(3)\nindicates the breaker is overloaded.  A value of voltageRangeWarning(4)\nindicates the breaker voltage is out of tolerance by 10-20%.  A value of\nvoltageRangeCritical(5) indicates the breaker voltage is out of tolerance\nby more than 20%.  Note: Overload status has priority over voltage tolerance\nstatus.\"\"\",\n        }, # column\n        \"ups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3\",\n        }, # node\n        \"upsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.1\",\n        }, # node\n        \"upsIdentManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # scalar\n        \"upsIdentModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Model;Part number;Serial number (e.g. HP R5500 XR;204451-B21;B00123456W).\"\"\",\n        }, # scalar\n        \"upsIdentSoftwareVersions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level(s) of the UPS microcontroller(s).\"\"\",\n        }, # scalar\n        \"upsIdentOemCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A binary code indicating vendor. This should be a ?0x0c? for HP\"\"\",\n        }, # scalar\n        \"upsBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2\",\n        }, # node\n        \"upsBatTimeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery run time in seconds before UPS turns off due\nto low battery.\"\"\",\n        }, # scalar\n        \"upsBatVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery voltage as reported by the UPS meters.\"\"\",\n        }, # scalar\n        \"upsBatCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-2147483648\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-2147483648\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Current as reported by the UPS metering.\nCurrent is positive when discharging, negative\nwhen recharging the battery.\"\"\",\n        }, # scalar\n        \"upsBatCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery percent charge.\"\"\",\n        }, # scalar\n        \"upsBatteryAbmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"batteryCharging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryDischarging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batteryFloating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"batteryResting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Gives the status of the Advanced Battery Management;\nbatteryFloating(3) status means that the charger is temporarily \ncharging the battery to its float voltage; batteryResting(4) is the \nstate when the battery is fully charged and none of the other actions \n(charging/discharging/floating) is being done.\"\"\",\n        }, # scalar\n        \"upsInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3\",\n        }, # node\n        \"upsInputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utility line frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsInputLineBads\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the Input was out of tolerance\nin voltage or frequency.\"\"\",\n        }, # scalar\n        \"upsInputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"upsInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumPhases and including the UpsInput group.\"\"\",\n        }, # table\n        \"upsInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsInputPhase\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the current, voltage, etc.\"\"\",\n        }, # row\n        \"upsInputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the phase.  Serves as index for input table.\"\"\",\n        }, # column\n        \"upsInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input voltage from the UPS meters in volts.\"\"\",\n        }, # column\n        \"upsInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input current from the UPS meters in amps.\"\"\",\n        }, # column\n        \"upsInputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input real power in watts. Most UPSs do not report\nthis XCP data\"\"\",\n        }, # column\n        \"upsInputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"primaryUtility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bypassFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"secondaryUtility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"generator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"flywheel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"fuelcell\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present external source of input power.  The enumeration\nnone(2) indicates that there is no external source of \npower, for example, the UPS is On Battery (an internal source).\nThe bypassFeed(4) can only be used when the Bypass source is known\nto be a separate utility feed than the primaryUtility(3).\"\"\",\n        }, # scalar\n        \"upsOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4\",\n        }, # node\n        \"upsOutputLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS output load in percent of rated capacity.\"\"\",\n        }, # scalar\n        \"upsOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsOutputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered output phases, serves as the table\nindex.\"\"\",\n        }, # scalar\n        \"upsOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to NumPhases\nand including the UpsOutput group.\"\"\",\n        }, # table\n        \"upsOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsOutputPhase\",\n            ],\n            \"description\" :\n                \"\"\"Output Table Entry containing voltage, current, etc.\"\"\",\n        }, # row\n        \"upsOutputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number {1..3} of the output phase.\"\"\",\n        }, # column\n        \"upsOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output voltage from the UPS metering in volts.\"\"\",\n        }, # column\n        \"upsOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output current in amps.\"\"\",\n        }, # column\n        \"upsOutputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured real output power in watts.\"\"\",\n        }, # column\n        \"upsOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"battery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"booster\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"reducer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"parallelCapacity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"parallelRedundant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"highEfficiencyMode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present source of output power.  The enumeration\nnone(2) indicates that there is no source of output\npower (and therefore no output power), for example,\nthe system has opened the output breaker.\"\"\",\n        }, # scalar\n        \"upsBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5\",\n        }, # node\n        \"upsBypassFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bypass frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsBypassNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of lines in the UPS bypass table.\"\"\",\n        }, # scalar\n        \"upsBypassTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.3\",\n            \"status\" : \"current\",\n        }, # table\n        \"upsBypassEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsBypassPhase\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the UpsBypassTable.\"\"\",\n        }, # row\n        \"upsBypassPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Bypass Phase, index for the table.\"\"\",\n        }, # column\n        \"upsBypassVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS bypass voltage in volts.\"\"\",\n        }, # column\n        \"upsEnvironment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6\",\n        }, # node\n        \"upsEnvAmbientTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the ambient temperature in the vicinity of the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"upsEnvAmbientLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the ambient temperature; if UpsEnvAmbientTemp \nfalls below this value, the UpsAmbientTempBad alarm will occur.\"\"\",\n        }, # scalar\n        \"upsEnvAmbientUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the ambient temperature; if UpsEnvAmbientTemp \nrises above this value, the UpsAmbientTempBad alarm will occur.\nThis value should be greater than UpsEnvAmbientLowerLimit.\"\"\",\n        }, # scalar\n        \"upsEnvAmbientHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the ambient humidity in the vicinity of the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"upsEnvRemoteTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of a remote temperature sensor connected to the  \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"upsEnvRemoteHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of a remote humidity sensor connected to the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"upsEnvNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Contacts in the UpsContactsTable.\nThis object indicates the number of rows in the \nUpsContactsTable.\"\"\",\n        }, # scalar\n        \"upsContactsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Contact Sensing table entries.  \nThe number of entries is given by the value of \nUpsEnvNumContacts.\"\"\",\n        }, # table\n        \"upsContactsTableEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable \nto a particular Contact input.\"\"\",\n        }, # row\n        \"upsContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Contact identifier; identical to the Contact Number.\"\"\",\n        }, # column\n        \"upsContactType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"anyChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notUsed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state for this contact.  The 'other'\nstate is the Active state for generating the UpstdContactActiveNotice\ntrap.  If anyChange(3) is selected, then this trap is sent\nany time the contact changes to either Open or Closed.\nNo traps are sent if the Contact is set to notUsed(4).\nIn many cases, the configuration for Contacts may be done by other \nmeans, so this object may be read-only.\"\"\",\n        }, # column\n        \"upsContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"openWithNotice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closedWithNotice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the Contact input;\nthe value is based on the open/closed input state \nand the setting for UpsContactType.\nWhen entering the openWithNotice(3) and closedWithNotice(4) \nstates, no entries added to the UpsAlarmTable, but\nthe UpstdContactActiveNotice trap is sent.\"\"\",\n        }, # column\n        \"upsContactDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A label identifying the Contact.  This object should be\nset by the administrator.\"\"\",\n        }, # column\n        \"upsEnvRemoteTempLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the remote temperature; if UpsEnvRemoteTemp \nfalls below this value, the UpsRemoteTempBad alarm will occur.\"\"\",\n        }, # scalar\n        \"upsEnvRemoteTempUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the remote temperature; if UpsEnvRemoteTemp \nrises above this value, the UpsRemoteTempBad alarm will occur.\nThis value should be greater than UpsEnvRemoteTempLowerLimit.\"\"\",\n        }, # scalar\n        \"upsEnvRemoteHumidityLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the remote humidity reading; if UpsEnvRemoteHumidity\nfalls below this value, the UpsRemoteHumidityBad alarm will occur.\"\"\",\n        }, # scalar\n        \"upsEnvRemoteHumidityUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the remote humidity reading; if UpsEnvRemoteHumidity \nrises above this value, the UpsRemoteHumidityBad alarm will occur.\nThis value should be greater than UpsEnvRemoteHumidityLowerLimit.\"\"\",\n        }, # scalar\n        \"upsTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.7\",\n        }, # node\n        \"upsTestBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"startTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to startTest initiates the\nbattery test.  All other set values are invalid.\"\"\",\n        }, # scalar\n        \"upsTestBatteryStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"inhibited\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"scheduled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reading this enumerated value gives an indication of the\nUPS Battery test status.\"\"\",\n        }, # scalar\n        \"upsTestTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"startTestTrap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting startTestTrap to 1 will initiate a TrapTest\nis sent out from HPMM.  All other set values are invalid.\"\"\",\n        }, # scalar\n        \"upsControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8\",\n        }, # node\n        \"upsControlOutputOffDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to turn off after the number of seconds.\nSetting it to 0 will cause an attempt to abort a pending\nshutdown.\"\"\",\n        }, # scalar\n        \"upsControlOutputOnDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to turn on after the number of seconds.\nSetting it to 0 will cause an attempt to abort a pending\nstartup.\"\"\",\n        }, # scalar\n        \"upsControlOutputOffTrapDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When UpsControlOutputOffDelay reaches this value, a trap will\nbe sent.\"\"\",\n        }, # scalar\n        \"upsControlOutputOnTrapDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When UpsControlOutputOnDelay reaches this value, a\nUpsOutputOff trap will be sent.\"\"\",\n        }, # scalar\n        \"upsControlToBypassDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to go to Bypass after the number of seconds.\n\t If the Bypass is unavailable, this may cause the UPS\n\t to not supply power to the load.\nSetting it to 0 will cause an attempt to abort a pending\nshutdown.\"\"\",\n        }, # scalar\n        \"upsLoadShedSecsWithRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.8.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value will cause the UPS output to turn off \nafter the set number of seconds, then restart (after a UPS-defined\n'down time') when the utility is again available.  \nUnlike UpsControlOutputOffDelay, which might or might not,\nthis object always maps to the XCP 0x8A Load Dump & Restart command,\nso the desired shutdown and restart behavior is guaranteed to happen.\nOnce set, this command cannot be aborted.\nThis is the preferred Control object to use when performing an On\nBattery OS Shutdown.\"\"\",\n        }, # scalar\n        \"upsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9\",\n        }, # node\n        \"upsConfigOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS Output voltage per phase in volts.\"\"\",\n        }, # scalar\n        \"upsConfigInputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS Input voltage per phase in volts.\"\"\",\n        }, # scalar\n        \"upsConfigOutputWatts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS available real power output in watts.\"\"\",\n        }, # scalar\n        \"upsConfigOutputFreq\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal output frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsConfigDateAndTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Date and time information for the UPS.  Setting this variable\nwill initiate a set UPS date and time to this value.  Reading\nthis variable will return the UPS time and date.  This value\nis not referenced to sysUpTime.  It is simply the clock value\nfrom the UPS real time clock.\nFormat is as follows: MM/DD/YYYY:HH:MM:SS.\"\"\",\n        }, # scalar\n        \"upsConfigLowOutputVoltageLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Lower limit for acceptable Output Voltage, per the UPS\nspecifications.\"\"\",\n        }, # scalar\n        \"upsConfigHighOutputVoltageLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.9.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Upper limit for acceptable Output Voltage, per the UPS\nspecifications.\"\"\",\n        }, # scalar\n        \"upsRecep\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10\",\n        }, # node\n        \"upsNumReceptacles\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of independently controllable Receptacles, as described in the \nUpsRecepTable.\"\"\",\n        }, # scalar\n        \"upsRecepTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumReceptacles and including the UpsRecep group.\"\"\",\n        }, # table\n        \"upsRecepEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsRecepIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Recep table entry, etc.\"\"\",\n        }, # row\n        \"upsRecepIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the Receptacle. Serves as index for Receptacle table.\"\"\",\n        }, # column\n        \"upsRecepStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pendingOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pendingOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Recep Status 1=On/Close, 2=Off/Open, 3=On w/Pending Off, \n4=Off w/Pending ON, 5=Unknown.\"\"\",\n        }, # column\n        \"upsRecepOffDelaySecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay until the Receptacle is turned Off.  Setting \nthis value to other than -1 will cause the UPS output to \nturn off after the number of seconds (0 is immediately).  \nSetting it to -1 will cause an attempt to abort a pending shutdown.\nWhen this object is set while the UPS is On Battery, it is not necessary\nto set UpsRecepOnDelaySecs, since the outlet will turn back on \nautomatically when power is available again.\"\"\",\n        }, # column\n        \"upsRecepOnDelaySecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The Delay until the Receptacle is turned On.  Setting \nthis value to other than -1 will cause the UPS output to \nturn on after the number of seconds (0 is immediately).  \nSetting it to -1 will cause an attempt to abort a pending restart.\"\"\",\n        }, # column\n        \"upsRecepAutoOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay after going On Battery until the Receptacle is \nautomatically turned Off.  A value of -1 means that this Output should \nnever be turned Off automatically, but must be turned Off only by command.\nValues from 0 to 30 are valid, but probably innappropriate.\nThe AutoOffDelay can be used to prioritize loads in the event of a prolonged \npower outage; less critical loads will turn off earlier to extend battery \ntime for the more critical loads. If the utility power is restored before the \nAutoOff delay counts down to 0 on an outlet, that outlet will not turn Off.\"\"\",\n        }, # column\n        \"upsRecepAutoOnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Seconds delay after the Outlet is signaled to turn On before the Output is\nAutomatically turned ON. A value of -1 means that this Output should never\nbe turned On automatically, but only when specifically commanded to do so.\nA value of 0 means that the Receptacle should come On immediately\nat power-up or for an On command.\"\"\",\n        }, # column\n        \"upsRecepShedSecsWithRestart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.10.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value will cause the UPS output to turn off \nafter the set number of seconds, then restart (after a UPS-defined\n'down time') when the utility is again available.  \nUnlike UpsRecepOffDelaySecs, which might or might not,\nthis object always maps to the XCP 0x8A Load Dump & Restart command,\nso the desired shutdown and restart behavior is guaranteed to happen.\nOnce set, this command cannot be aborted.\"\"\",\n        }, # column\n        \"upsTopology\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.11\",\n        }, # node\n        \"upsTopologyType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value which denotes the type of UPS by its power topology.  Values are the\nsame as those described in the XCP Topology block's Overall Topology field.\"\"\",\n        }, # scalar\n        \"upsTopoMachineCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ID Value which denotes the Compaq/HP model of the UPS for software.  Values \nare the same as those described in the XCP Configuration block's Machine Code \nfield.\"\"\",\n        }, # scalar\n        \"upsTopoUnitNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.11.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies which unit and what type of data is being reported.\nA value of 0 means that this MIB information comes from the top-level system \nview (eg, manifold module or system bypass cabinet reporting total system \noutput).  Standalone units also use a value of 0, since they are the 'full \nsystem' view.\nA value of 1 or higher indicates the number of the module in the system\nwhich is reporting only its own data in the HP MIB objects.\"\"\",\n        }, # scalar\n        \"upsTopoPowerStrategy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.3.11.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highAlert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enableHighEfficiency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateHighEfficiency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Value which denotes which Power Strategy is currently set for the UPS.\nThe values are:\nhighAlert(1) - The UPS shall optimize its operating state to maximize its \n\t\tpower-protection levels.  This mode will be held for at most 24 hours.\nstandard(2) - Balanced, normal power protection strategy. UPS will not enter \n\t\tHE operating mode from this setting.\nenableHighEfficiency(3) - The UPS is enabled to enter HE operating mode to \n\t\toptimize its operating state to maximize its efficiency, when \n\t\tconditions change to permit it (as determined by the UPS).\nforceHighEfficiency(4) - If this value is permitted to be Set for this UPS,\n\t\tand if conditions permit, requires the UPS to enter High Efficiency \n\t\tmode now, without delay (for as long as utility conditions permit).\n\t\tAfter successfully set to forceHighEfficiency(4), \n\t\tUpsTopoPowerStrategy changes to value enableHighEfficiency(3).\nUpsOutputSource will indicate if the UPS status is actually operating in \nHigh Efficiency mode.\"\"\",\n        }, # scalar\n        \"pdr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4\",\n        }, # node\n        \"pdrIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1\",\n        }, # node\n        \"pdrName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string identify the device.\"\"\",\n        }, # scalar\n        \"pdrModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Model.\"\"\",\n        }, # scalar\n        \"pdrManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # scalar\n        \"pdrFirmwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level of the device.\"\"\",\n        }, # scalar\n        \"pdrPartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device part number.\"\"\",\n        }, # scalar\n        \"pdrSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDR's serial number.\"\"\",\n        }, # scalar\n        \"pdrVARating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The VA Rating of this PDR (all phases)\"\"\",\n        }, # scalar\n        \"pdrNominalOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal Output Voltage may differ from the nominal \nInput Voltage if the PDR has an input transformer\"\"\",\n        }, # scalar\n        \"pdrNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of phases for this PDR\"\"\",\n        }, # scalar\n        \"pdrNumPanels\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of panels or subfeeds in this PDR\"\"\",\n        }, # scalar\n        \"pdrNumBreakers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of breakers in this PDR\"\"\",\n        }, # scalar\n        \"pdrPanel\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2\",\n        }, # node\n        \"pdrPanelTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to\npdrNumPanels\"\"\",\n        }, # table\n        \"pdrPanelEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdrPanelIndex\",\n            ],\n            \"description\" :\n                \"\"\"The panel table entry containing all power parameters \nfor each panel.\"\"\",\n        }, # row\n        \"pdrPanelIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the pdrPanelEntry table.\"\"\",\n        }, # column\n        \"pdrPanelFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present frequency reading for the panel voltage.\"\"\",\n        }, # column\n        \"pdrPanelPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present power of the panel.\"\"\",\n        }, # column\n        \"pdrPanelRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present rated current of the panel.\"\"\",\n        }, # column\n        \"pdrPanelMonthlyKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this panel since the beginning of this \ncalendar month or since the last reset.\"\"\",\n        }, # column\n        \"pdrPanelYearlyKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this panel since the beginning of this \ncalendar year or since the last reset.\"\"\",\n        }, # column\n        \"pdrPanelTotalKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this panel since it was put into service \nor since the last reset.\"\"\",\n        }, # column\n        \"pdrPanelVoltageA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output voltage.\"\"\",\n        }, # column\n        \"pdrPanelVoltageB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output voltage.\"\"\",\n        }, # column\n        \"pdrPanelVoltageC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output voltage.\"\"\",\n        }, # column\n        \"pdrPanelCurrentA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output current.\"\"\",\n        }, # column\n        \"pdrPanelCurrentB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output current.\"\"\",\n        }, # column\n        \"pdrPanelCurrentC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured panel output current.\"\"\",\n        }, # column\n        \"pdrPanelLoadA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of load is the ratio of each output \ncurrent to the rated output current to the panel.\"\"\",\n        }, # column\n        \"pdrPanelLoadB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of load is the ratio of each output  \ncurrent to the rated output current to the panel.\"\"\",\n        }, # column\n        \"pdrPanelLoadC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of load is the ratio of each output  \ncurrent to the rated output current to the panel.\"\"\",\n        }, # column\n        \"pdrBreaker\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3\",\n        }, # node\n        \"pdrBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"List of breaker table entries.  The number of entries \nis given by pdrNumBreakers for this panel.\"\"\",\n        }, # table\n        \"pdrBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdrPanelIndex\",\n                \"pdrBreakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output breaker of a particular panel.\"\"\",\n        }, # row\n        \"pdrBreakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of breakers. 42 breakers in each panel,\narranged in odd and even columns\"\"\",\n        }, # column\n        \"pdrBreakerPanel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of panel that these breakers are installed on.\"\"\",\n        }, # column\n        \"pdrBreakerNumPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of this breaker in the panel, 1-phase breaker\nor n-m breaker for 2-phase or n-m-k breaker for 3-phase.\"\"\",\n        }, # column\n        \"pdrBreakerNumPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of phase for this particular breaker.\"\"\",\n        }, # column\n        \"pdrBreakerNumSequence\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sequence of this breaker. i.e. 1 for single phase\n1,2 for 2-phase or 1,2,3 for 3-phase.\"\"\",\n        }, # column\n        \"pdrBreakerRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rated current in Amps for this particular breaker.\"\"\",\n        }, # column\n        \"pdrBreakerMonthlyKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this breaker since the beginning of this \ncalendar month or since the last reset.\"\"\",\n        }, # column\n        \"pdrBreakerYearlyKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this breaker since the beginning of this \ncalendar year or since the last reset.\"\"\",\n        }, # column\n        \"pdrBreakerTotalKWH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accumulated KWH for this breaker since it was put into service \nor since the last reset.\"\"\",\n        }, # column\n        \"pdrBreakerCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output current for this breaker Current.\"\"\",\n        }, # column\n        \"pdrBreakerCurrentPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ratio of output current over rated \ncurrent for each breaker.\"\"\",\n        }, # column\n        \"pdrBreakerPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power for this breaker in Watts.\"\"\",\n        }, # column\n        \"pdrBreakerPercentWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of Warning set for this breaker.\"\"\",\n        }, # column\n        \"pdrBreakerPercentOverload\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.4.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of Overload set for this breaker.\"\"\",\n        }, # column\n        \"mpdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5\",\n        }, # node\n        \"mpduIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1\",\n        }, # node\n        \"mpduNumMPDU\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Modular PDUs (Core) detected.\"\"\",\n        }, # scalar\n        \"mpduIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by mpduNumMPDU. So aggregate objects for each entry equal to mpduNumMPDU \nbefore go to the next entry. i.e if 4 MPDU detected, display 4 indexes, 4 \nManufacturers, 4 Models..., start with 1.\"\"\",\n        }, # table\n        \"mpduIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mpduIdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The table entry containing the identifications of each MPDU as well \nas names of PDR panel, location of MPDU in a Data Center.\"\"\",\n        }, # row\n        \"mpduIdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the MpduIdentEntry table. Start with 1\"\"\",\n        }, # column\n        \"mpduManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The Core PDU manufacturer. StringLength=[21]\"\"\",\n        }, # column\n        \"mpduModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU model, marketing name. StringLength=[40].\"\"\",\n        }, # column\n        \"mpduName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU name, descriptive name or hostname. StringLength=[16].\"\"\",\n        }, # column\n        \"mpduFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU firmware version(s). StringLength=[12].\"\"\",\n        }, # column\n        \"mpduHardwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU hardware version. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU part number. StringLength=[21].\"\"\",\n        }, # column\n        \"mpduSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU external serial number. StringLength=[21].\"\"\",\n        }, # column\n        \"mpduUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's UUID equals PN add SN then canonical conversion. StringLength=[37].\"\"\",\n        }, # column\n        \"mpduIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's assigned IP. StringLength=[16].\"\"\",\n        }, # column\n        \"mpduMACAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU MAC address. StringLength=[18].\"\"\",\n        }, # column\n        \"mpduControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU Control Status: master or slave units.\nStringLength=[31].\"\"\",\n        }, # column\n        \"mpduRegion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Region: NA, Intl, Japan... StringLength=[7].\"\"\",\n        }, # column\n        \"mpduType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Type: Delta, Wye, single, Wye+lowline.\nStringLength=[24].\"\"\",\n        }, # column\n        \"mpduPowerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Power Rating in KVA (Name Plate). Value is presented \nin 1/100 of the KVA. i.e. 1750 means 17.50 KVA\"\"\",\n        }, # column\n        \"mpduInputRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Input Current Rating in A (Name Plate)\"\"\",\n        }, # column\n        \"mpduInputPlug\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Input Plug: IEC60309 516P6,NEMA L15-30P...\nStringLength=[16].\"\"\",\n        }, # column\n        \"mpduNumBreakers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of breakers used in each MPDU (6 by default).\"\"\",\n        }, # column\n        \"mpduNumOutlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets of each MPDU (6 by default).\"\"\",\n        }, # column\n        \"mpduUHeight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MPDU U Height 1U or 2 U (1U by default).\"\"\",\n        }, # column\n        \"mpduRedundantStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of Core PDU in paired or not: Stand-alone or Redundant.\nStringLength=[12].\"\"\",\n        }, # column\n        \"mpduNumSmartExtBar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"total number of  detected Smart Sticks connecting to each PDU.\"\"\",\n        }, # column\n        \"mpduPanelName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of Panel that was entered by customer in GUI.\nStringLength=[50].\"\"\",\n        }, # column\n        \"mpduPanelBreakerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of breakers or Panel Position entered by customer in GUI.\nStringLength=[50].\"\"\",\n        }, # column\n        \"mpduPanelBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Breaker rating of the PDR Panel.\"\"\",\n        }, # column\n        \"mpduACFeedName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"it would be A, B, Red, or White...\nStringLength=[50].\"\"\",\n        }, # column\n        \"mpduFloorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of building floor entered by customer in GUI.\nStringLength=[50].\"\"\",\n        }, # column\n        \"mpduRoomName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the room entered by customer in GUI. StringLength=[50].\"\"\",\n        }, # column\n        \"mpduRow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Data Center Row entered by customer in GUI.\nStringLength=[11].\"\"\",\n        }, # column\n        \"mpduRowPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Position in Row entered by customer in GUI. Null will be returned \nif not detected. StringLength=[11].\"\"\",\n        }, # column\n        \"mpduRackName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the Rack entered by customer in GUI. Null will be returned \nif not detected. StringLength=[50].\"\"\",\n        }, # column\n        \"mpduRackHeight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rack Type (22U, 42U, 50U...). Null will be returned if not detected.\nStringLength=[3].\"\"\",\n        }, # column\n        \"mpduRackID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An unique ID to identify a rack, i.e. Rack SN. Null will be returned if \nnot detected. StringLength=[50].\"\"\",\n        }, # column\n        \"mpduUPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PDU Rack bottom U Start position, core U position. Null will be returned if not detected.\"\"\",\n        }, # column\n        \"mpduPairedPDUUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"UUID of the PDU paired with this one. Null will be returned if not detected.\nStringLength=[50].\"\"\",\n        }, # column\n        \"mpduPairedPDUIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP address of the PDU paired with this one. Null will be returned if not detected.\nStringLength=[16].\"\"\",\n        }, # column\n        \"mpduInstalledLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"0=Left 0U side area or rack frame, 1= Right 0U side area or rack frame, 2= front RETMA rail, \n3=back RETMA rail) - spatial location. A value of -1 will be returned if not detected.\"\"\",\n        }, # column\n        \"mpduTotalPowerWatt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power for the whole iPDU in Watts.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"mpduTotalPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power for the whole iPDU in VA.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"mpduTotalPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The whole iPDU's load in percent of rated capacity. Value is \npresented in 1/10 of the percentage i.e. 125 is 12.5%.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"mpduRegionalNominalVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.1.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"value is either America(208V), Japan(202V) or blank for International Model\"\"\",\n        }, # column\n        \"mpduOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2\",\n        }, # node\n        \"mpduOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by mpduNumOutlet. So aggregate objects for each entry equal to (mpduNumMPDU \nmultiplies mpduNumOutlet) before go to the next entry. i.e if 4 MPDU detected, \ndisplay 6x4 indexes, 6x4 OutputStatus, 6x4 OutputBreakerRating...start with 1.\"\"\",\n        }, # table\n        \"mpduOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mpduIdentIndex\",\n                \"mpduOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output table entry containing the voltage, current, PF,\npercent load, VA, Watts for the Modular PDU.\"\"\",\n        }, # row\n        \"mpduOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the MpduOutputEntry table.\"\"\",\n        }, # column\n        \"mpduOutputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device: off, on, problem. StringLength=[7].\"\"\",\n        }, # column\n        \"mpduOutputBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of each MPDU Output in Ampere.\"\"\",\n        }, # column\n        \"mpduOutputSmartDevice\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A smart cord device detected: False, True. StringLength=[5].\"\"\",\n        }, # column\n        \"mpduOutputPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MPDU's each output load in percent of rated capacity. Value is \npresented in 1/10 of the percentage i.e. 125 is 12.5%.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"mpduOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output voltage from the PDU meters in volts. Value is \npresented in 1/10 of the Volt i.e. 2095 is 209.5 V.  A value \nof -1 will be returned if the voltage is unable to be measured.\"\"\",\n        }, # column\n        \"mpduOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output current from the PDU meters in amps. Value is \npresented in 1/100 of the Ampere i.e. 175 is 1.75 A.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"mpduOutputPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total VA load (VI) measured on the PDU in VA.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"mpduOutputPowerWatt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power load measured on the PDU in Watts.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"mpduOutputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power factor is presented in 1/100 of the unit i.e.\n98 is 0.98.  A value of -1 will be returned if the power factor is unable \nto be measured.\"\"\",\n        }, # column\n        \"mpduOutputWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-set threshhold limit for Warning in percentage\"\"\",\n        }, # column\n        \"mpduOutputCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-set threshhold limit for Critical in percentage\"\"\",\n        }, # column\n        \"mpduOutputPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Support Billing Grade Energy Metering in Watt-Hour.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"mpduDeviceIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3\",\n        }, # node\n        \"mpduDeviceIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by mpduNumOutlet. So aggregate objects for each entry equal \nto (mpduNumMPDU multiplies mpduNumOutlet) before go to the next entry. \ni.e if 4 MPDU detected, display 6x4 indexes, 6x4 mpduDeviceStatus, 6x4 \nDeviceUIDStatus...start with 1.\"\"\",\n        }, # table\n        \"mpduDeviceIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mpduIdentIndex\",\n                \"mpduDeviceIdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the name, model, \nmanufacturer, firmware version, part number... for\neach smart device, null value for unknown device.\"\"\",\n        }, # row\n        \"mpduDeviceIdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index is based on the total number of Smart Extension Bars plus\nsmart devices (with smart power cord i.e. blades) detected.\"\"\",\n        }, # column\n        \"mpduDeviceStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device: off, on, problem. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduDeviceUIDStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device UID: off, on, blink. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduDeviceNumOutlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets of detected the device.  This variable \nindicates the number of rows in the breakers table. Default is 5\"\"\",\n        }, # column\n        \"mpduDeviceUHeight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Unit height of ext bar or device. Some device supports non-integer. \nPresent value x100, when read back, divided by 100 to get 2 decimal points.\"\"\",\n        }, # column\n        \"mpduDevicePowerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's Power Rating in VA. Null will be returned if not detected.\nStringLength=[8].\"\"\",\n        }, # column\n        \"mpduDeviceManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Manufacturer Name (e.g. Hewlett-Packard).\nNull will be returned if not detected. StringLength=[16].\"\"\",\n        }, # column\n        \"mpduDeviceType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device's Type: Ext Bar, server, or network device...\nStringLength=[16].\"\"\",\n        }, # column\n        \"mpduDeviceModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Model is Managed or Non-managed Ext Bar. \nNull will be returned if not detected. StringLength=[24].\"\"\",\n        }, # column\n        \"mpduDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string identify the Device. i.e. 'BAR#1' (descriptive name)\nNull will be returned if not detected. StringLength=[32].\"\"\",\n        }, # column\n        \"mpduDeviceFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level of Sm Ext Bar. Null will be returned if \nnot detected. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduDeviceHardwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of Sm Ext Bar. Null will be returned if not \ndetected. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduDevicePartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's part number. Null will be returned if not detected.\nStringLength=[21].\"\"\",\n        }, # column\n        \"mpduDeviceSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's serial number. Null will be returned if not detected.\nStringLength=[21].\"\"\",\n        }, # column\n        \"mpduDeviceUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's UUID. Null will be returned if not detected.\nStringLength=[37].\"\"\",\n        }, # column\n        \"mpduDeviceIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's IP Address. Null will be returned if not detected.\nStringLength=[16].\"\"\",\n        }, # column\n        \"mpduDeviceMAC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device mgmt processor MAC Address. Null will be returned if \nnot detected. StringLength=[18].\"\"\",\n        }, # column\n        \"mpduDevicePSUSlotNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device power supply logical slot number.\"\"\",\n        }, # column\n        \"mpduDeviceUPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device U start position.\"\"\",\n        }, # column\n        \"mpduDeviceDetectionThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.3.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read device detection threshold between 10 and 50mA.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4\",\n        }, # node\n        \"mpduSmExtBarOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by mpduDeviceNumOutlet. So aggregate objects for each entry equal to \n(mpduNumMPDU multiplies mpduNumOutlet multiplies mpduDeviceNumOutlet) before \ngo to the next entry. i.e if 4 MPDU detected, display 5x6x4 indexes, 5x6x4\nmpduSmExtBarOutletStatus, 5x6x4 mpduSmExtBarOutletUIDStatus...start with 1.\"\"\",\n        }, # table\n        \"mpduSmExtBarOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mpduIdentIndex\",\n                \"mpduOutputIndex\",\n                \"mpduSmExtBarOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries contain status, measurements for each outlet (no PowerVA)\nDisplay null if it can't be measured or no device detected.\"\"\",\n        }, # row\n        \"mpduSmExtBarOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Index of Smart Extension Bar.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the Smart Extension Bar's outlet: off, on, problem...\nStringLength=[3].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletUIDStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the Smart Extension Bar's UID: off, on, blink...\nStringLength=[8].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sm Ext Bar Outlet's Rating in Amp.  A value of -1 will be returned \nif the stick is unable to detect. StringLength=[8].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The SM Ext Bar voltage in volts. Value is presented 1/10 of the Volt \ni.e. 2098 means 209.8 V.  A value of -1 will be returned if the voltage is unable \nto be measured.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The SM Ext Bar current draw in Amps. Value is presented in 1/100 of the Ampere\ni.e. 127 means 1.27 A.  A value of -1 will be returned if the current is unable \n to be measured.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletPowerWatt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sm Ext Bar's Power measured in Watts. A value of -1 will be returned if the \npower is unable to be measured.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet's power factor in 0.01 unit. It is presented in 1/100 of the unit. \ni.e. 98 means 0.98.  A value of -1 will be returned if the voltage is unable \n  to be measured.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) Name that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[50].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) UUID that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[37].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceProduct\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) Model that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[40].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) IP of iLO that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[16].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletAutoDiscovered\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Boolean values of 0 or 1. 1 means this Sm Ext Bar Outlet is able to get information \nfrom a blade with smart power supply (auto discovery is enabled)...\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceMAC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) MAC address that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[18].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceSN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) Serial Number that connects to this \nSm Ext Bar Outlet. Null will be returned if not detected. StringLength=[21].\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDevicePSSlotNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device (Blade/Server/Storage) Power Supply' Slot Number that connects to this \nSm Ext Bar Outlet. A value of -1 will be returned if not detected.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceUPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device U start position. A value of -1 will be returned if not detected.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceUHeight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device U height. Enter -1 if not detected. Some device supports non-integer. \nPresent value x100, when read back, divided by 100 to get 2 decimal points.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletDeviceInstalledLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"0=Left 0U side area or rack frame, 1= Right 0U side area or rack frame, 2= front RETMA rail, \n3=back RETMA rail) - spatial location. A value of -1 will be returned if not detected.\"\"\",\n        }, # column\n        \"mpduSmExtBarOutletPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.5.4.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sm Ext Bar's Power measured in Watt-Hour support Billing Grade Energy Metering. \nA value of -1 will be returned if the power is unable to be measured.\"\"\",\n        }, # column\n        \"oups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6\",\n        }, # node\n        \"oupsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1\",\n        }, # node\n        \"oupsIdentManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # scalar\n        \"oupsIdentModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Model such as R-1500 G3.\"\"\",\n        }, # scalar\n        \"oupsIdentSystemFWVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display System firmware version.\"\"\",\n        }, # scalar\n        \"oupsIdentPowerModuleFWVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display Power Module firmware version.\"\"\",\n        }, # scalar\n        \"oupsIdentOemCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A binary code indicating vendor. This should be a ?0x0c? for HP\"\"\",\n        }, # scalar\n        \"oupsIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the UPS Serial Number (i.e. B00123456W).\"\"\",\n        }, # scalar\n        \"oupsIdentPartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the UPS Part Number (i.e. 204451-B21).\"\"\",\n        }, # scalar\n        \"oupsBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2\",\n        }, # node\n        \"oupsBatTimeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery run time in seconds before UPS turns off due\nto low battery.\"\"\",\n        }, # scalar\n        \"oupsBatVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read the Total Battery voltage.\"\"\",\n        }, # scalar\n        \"oupsBatCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery percent charge.\"\"\",\n        }, # scalar\n        \"oupsBatAbmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"batteryCharging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryDischarging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batteryResting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"batteryTesting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Gives the status of the Advanced Battery Management; example:\nbatteryResting(3) is the state when the battery is fully charged and none of \nthe other actions (charging/discharging/floating) is being done.\"\"\",\n        }, # scalar\n        \"oupsBatTestStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"inhibited\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Test Status. UPS will support schedule testing only\n7, 14, 30, or 60 days. Default is 14 days.\"\"\",\n        }, # scalar\n        \"oupsBatLatestTestDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get time and date of the latest battery test.\"\"\",\n        }, # scalar\n        \"oupsBatReplacementDateBP1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the battery replacement date of BP1.\"\"\",\n        }, # scalar\n        \"oupsBatReplacementDateBP2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the battery replacement date of BP2.\"\"\",\n        }, # scalar\n        \"oupsBatToACDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"150\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"150\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get delay time switching from Battery mode to AC mode in ms.\nDefault is 0ms, unit is increased per 100ms\"\"\",\n        }, # scalar\n        \"oupsBatChargeDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get battery charge delay in second. Default is 0 (random)\nunit is increased per 10sec.\"\"\",\n        }, # scalar\n        \"oupsBatNumModules\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of battery modules detected by power unit.\"\"\",\n        }, # scalar\n        \"oupsBatModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report 1U, 2U, or 3U Battery Pack, both BPs must be the same model.\"\"\",\n        }, # scalar\n        \"oupsBatChargingPowerLevelUtility\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"3 charging power levels: 1100W, 555W, 190W.\"\"\",\n        }, # scalar\n        \"oupsBatChargingPowerLevelGenerator\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"4 charging power levels: 1100W, 555W, 190W, No Charge.\"\"\",\n        }, # scalar\n        \"oupsBatSharedConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"expect 3 values for shared BP configuration: PU single, PU master, PU slave.\"\"\",\n        }, # scalar\n        \"oupsBatPackFWVerBP1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display Battery Pack 1 FW version.\"\"\",\n        }, # scalar\n        \"oupsBatPackFWVerBP2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display Battery Pack 2 FW version.\"\"\",\n        }, # scalar\n        \"oupsInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3\",\n        }, # node\n        \"oupsInputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utility line frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"oupsInputLineBads\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the Input was out of tolerance\nin voltage or frequency.\"\"\",\n        }, # scalar\n        \"oupsInputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"oupsInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to\nNumPhases and including the UpsInput group.\"\"\",\n        }, # table\n        \"oupsInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"oupsInputPhase\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the current, voltage, etc.\"\"\",\n        }, # row\n        \"oupsInputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the phase. Serves as index for input table.\"\"\",\n        }, # column\n        \"oupsInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input voltage from the UPS meters in volts.\"\"\",\n        }, # column\n        \"oupsInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input current from the UPS meters in amps.\"\"\",\n        }, # column\n        \"oupsInputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input power in watts.\"\"\",\n        }, # column\n        \"oupsInputPowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured real Input power factor with 2 decimals.\"\"\",\n        }, # scalar\n        \"oupsInputDBType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read the input Distribution Box type: 1- 480V-Y (US-5W NEMA plugs),\n2- 480V-V (US-5W IEC plugs), 3- 415V-Y (EURO-5W IEC plugs),\n4- 415V-Y (US/INTL-5W IEC plugs), 5- 380V-Y (China-5W hardwired).\"\"\",\n        }, # scalar\n        \"oupsInputUpperVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read the upper voltage range, 5 to 10 percent above the nominal voltage.\nFactory default is 10 percent.\"\"\",\n        }, # scalar\n        \"oupsInputLowerVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read the lower voltage range, 5 to 15 percent below the nominal voltage.\nFactory default is -15 percent.\"\"\",\n        }, # scalar\n        \"oupsGeneratorDetection\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"onGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noAction\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ATS sets a value of 1 to signal UPS that a generator is started so the UPS will  \ncharge Battery Pack using a different setting while it's on generator (intent to \nsave all power to back up for the load).\"\"\",\n        }, # scalar\n        \"oupsInputWithGenerator\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"woGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"withGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value of 1 when user known for sure Input has no Generator backup; a value\nof 2 tells Input Source could be from either Utility or Generator.\"\"\",\n        }, # scalar\n        \"oupsOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4\",\n        }, # node\n        \"oupsOutputLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total UPS output load in percentage of rated capacity.\"\"\",\n        }, # scalar\n        \"oupsOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"oupsOutputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered output phases, serves as the table index.\"\"\",\n        }, # scalar\n        \"oupsOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to NumPhases\nand including the UpsOutput group.\"\"\",\n        }, # table\n        \"oupsOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"oupsOutputPhase\",\n            ],\n            \"description\" :\n                \"\"\"Output Table Entry containing voltage, current, etc.\"\"\",\n        }, # row\n        \"oupsOutputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number {1..3} of the output phase.\"\"\",\n        }, # column\n        \"oupsOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output voltage from the UPS metering in volts.\"\"\",\n        }, # column\n        \"oupsOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output current in amps.\"\"\",\n        }, # column\n        \"oupsOutputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured real output power in watts.\"\"\",\n        }, # column\n        \"oupsOutputLoadPerPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS output load per phase in percentage of rated capacity.\"\"\",\n        }, # column\n        \"oupsOutputPowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured real output power factor with 2 decimals.\"\"\",\n        }, # scalar\n        \"oupsOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acSource\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"battery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the source that UPS operating from when providing output.\"\"\",\n        }, # scalar\n        \"oupsMonitor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5\",\n        }, # node\n        \"oupsMonitorAmbientTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the internal PU Ambient temperature.\"\"\",\n        }, # scalar\n        \"oupsMonitorBypassSCRTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the internal PU Bypass SCR temperature.\"\"\",\n        }, # scalar\n        \"oupsMonitorDDTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the internal PU DD temperature.\"\"\",\n        }, # scalar\n        \"oupsMonitorInverterTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the internal PU DD temperature.\"\"\",\n        }, # scalar\n        \"oupsMonitorChargerTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the internal PU Charger temperature.\"\"\",\n        }, # scalar\n        \"oupsMonitorBP1Temp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display Battery Pack 1 Temeprature in F. If BP1 not connected the PU will\nreturn 255 and displayed as -not connect-\"\"\",\n        }, # scalar\n        \"oupsMonitorBP2Temp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display Battery Pack 2 Temperature in F. If BP2 not connected the PU will\nreturn 255 and displayed as -not connect-\"\"\",\n        }, # scalar\n        \"oupsMonitorRestartDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"150\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"150\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the AC Turn On Delay (Restart Delay). The value can be\nchanged via front LCD Menu or inserted Module GUI. Default is 0ms, unit is \nincreased per 100ms.\"\"\",\n        }, # scalar\n        \"oupsMonitorACCLoadLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Read the set load level that ACC would be active from 0 to this percentage. \nDefault is 20 percent. Select 0 to set it as Always On\"\"\",\n        }, # scalar\n        \"oupsMonitorOperatingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Check if UPS is normal op, or on bypass, on inverter or ACC Active, \"\"\",\n        }, # scalar\n        \"oupsMonitorOperationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Check if UPS is operating as an UPS or ACC (PU only, no BP).\"\"\",\n        }, # scalar\n        \"oupsTestTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"startTestTrap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting startTestTrap to 1 will initiate a TrapTest\nis sent out from Management Module.  All other set values are invalid.\"\"\",\n        }, # scalar\n        \"oupsOnGenDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"for30Min\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"for1Hr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"for2Hr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"for4Hr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When read, show the current On-Generator Duration set by user on UPS LCD or GUI .\"\"\",\n        }, # scalar\n        \"oupsRuntimeLimitation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.5.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"show the current setting for Runtime Limitation. When enable, it can last for 70sec or 3min.\"\"\",\n        }, # scalar\n        \"oupsRackDiscovery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6\",\n        }, # node\n        \"oupsRackTagVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the 1-wire contact FW version from EEPROM's Tag Version. Initial tag is 01\"\"\",\n        }, # scalar\n        \"oupsRackID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get 10-digit Serial Number from the Location Discovery Strip mount in the front of the rack\"\"\",\n        }, # scalar\n        \"oupsRackPartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get 10 or 12-digit Part Number xxxxxx-001 from the Location Discovery Strip mount in the front of the rack\"\"\",\n        }, # scalar\n        \"oupsRackProductDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get spatial data of rack: description of the Rack Name.\"\"\",\n        }, # scalar\n        \"oupsRackEncULocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Tell where the Location Discovery Strip is mounted in the rack. B for Back, F for Front, L for Left \nand R for Right.\"\"\",\n        }, # scalar\n        \"oupsRackUHeight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get spatial data of rack: U-height of the rack can be 36U, 42U, or 47U model.\"\"\",\n        }, # scalar\n        \"oupsRackPUUPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-position of the PU where it is installed in the rack. The U position range is from 1-50.\"\"\",\n        }, # scalar\n        \"oupsRackPUUHeight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-Height of the Power Unit. PU height is either 1U or 2U.\"\"\",\n        }, # scalar\n        \"oupsRackBP1UPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-Position of the Battery Pack 1, installed right below the PU.\nRange is from 1 to 50.\"\"\",\n        }, # scalar\n        \"oupsRackBP1UHeight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-Height of the BP 1. BP is either 1U, 2U, and 3U\"\"\",\n        }, # scalar\n        \"oupsRackBP2UPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-Position of the Battery Pack 2, installed right below the BP1.\nRange is from 1 to 50.\"\"\",\n        }, # scalar\n        \"oupsRackBP2UHeight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.6.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Get the U-Height of the BP 2. BP is either 1U, 2U, and 3U\"\"\",\n        }, # scalar\n        \"pdu2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7\",\n        }, # node\n        \"pdu2Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1\",\n        }, # node\n        \"pdu2NumberPDU\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PDUs detected (in its daisy chain).\"\"\",\n        }, # scalar\n        \"pdu2IdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to pdu2NumberPDU .\"\"\",\n        }, # table\n        \"pdu2IdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the name, model, manufacturer, \nfirmware version, part number, etc.\"\"\",\n        }, # row\n        \"pdu2IdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu2IdentEntry table.\"\"\",\n        }, # column\n        \"pdu2Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string identify the device in daisy chain. Example PDU A.\"\"\",\n        }, # column\n        \"pdu2Model\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Model.\"\"\",\n        }, # column\n        \"pdu2Manufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # column\n        \"pdu2FirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level of the device.\"\"\",\n        }, # column\n        \"pdu2PartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device part number. Example AF400A.\"\"\",\n        }, # column\n        \"pdu2SerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device serial number, 10- or 16-digit.\"\"\",\n        }, # column\n        \"pdu2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device.  A value of OK(2) indicates the device is operating normally.\nA value of degraded(3) indicates the device is operating with warning indicators.  A value of\nfailed(4) indicates the device is operating with critical indicators.\"\"\",\n        }, # column\n        \"pdu2Controllable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether or not the device is controllable.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input phase on this pdu 1,2,3.\"\"\",\n        }, # column\n        \"pdu2GroupCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of groups (breakers) on this pdu.\"\"\",\n        }, # column\n        \"pdu2OutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets in this PDU.\"\"\",\n        }, # column\n        \"pdu2Input\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2\",\n        }, # node\n        \"pdu2InputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to pdu2NumberPDU .\"\"\",\n        }, # table\n        \"pdu2InputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the VA, Watts, WH, etc.\"\"\",\n        }, # row\n        \"pdu2InputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"threePhaseDelta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhaseWye\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of input - single phase, split phase, three phase delta, or three\nphase wye.\"\"\",\n        }, # column\n        \"pdu2InputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input frequency from the PDU meters in tenths of Hz.\"\"\",\n        }, # column\n        \"pdu2InputFrequencyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outOfRange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input frequency relative to the nominal frequency and the admitted tolerance.\"\"\",\n        }, # column\n        \"pdu2InputPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input VA of all phases.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input Watts of all phases.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input Watt-Hour value for all phases.  Units are WH. This value can be reset to 0 \nusing GUI. In that case, the pdu2InputPowerWattHourTimer will be reset as well  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Timestamp of when the Total Input WH was last reset.\"\"\",\n        }, # column\n        \"pdu2InputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input PF value.  Units are in thousandths, for example a power factor\nof 0.958 would be returned as 958, and 0.92 would be returned as 920.  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VAR value.  Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to number of PDUs (pdu2NumberPDU) and\nnumber of input phase (pdu2InputPhaseCount).\"\"\",\n        }, # table\n        \"pdu2InputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2InputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the voltage, current, frequency, power for each phase.\nEntries are given with number of pdu and number of input phase 1, 2, or 3.\"\"\",\n        }, # row\n        \"pdu2InputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu2InputEntry table.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase1toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase2toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase3toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase1to2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase2to3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"phase3to1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value indicates what input voltage is being measured in this table row - single phase\nvoltage, phase 1 to neutral, phase 2 to neutral, phase 3 to neutral, phase 1 to phase 2,\nphase 2 to phase 3, or phase 3 to phase 1.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input voltage measurement value.  Units are millivolts.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input voltage relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseVoltageThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Which input wire is being measured in this table row - single phase, neutral, phase 1,\nphase 2, or phase 3.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of the input.  A negative value indicates that\nthe hardware current capacity is unknown.  Units are milliamps.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input current measurement value.  Units are milliamps.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input current relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentCrestFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current crest factor.  Units are in milli, for example a crest factor of\n1.414 will be returned as 1414.  A negative value indicates\n         that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhaseCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80% will be returned as 80.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Which input wire is being measured in this table row - single phase, neutral, phase 1,\nphase 2, or phase 3.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input Watts value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Watt-Hour value for each Input phase.  Units are WH. This value can be reset to 0 \nusing GUI. In that case, the pdu2InputPhasePowerWattHourTimer will be reset as well    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of when input Watt-hours (inputWh) was last reset.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input PF value.  Units are in thousandths, for example a power factor\nof 0.958 would be returned as 958, and 0.92 would be returned \n as 920.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2InputPhasePowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VAR value.  Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3\",\n        }, # node\n        \"pdu2GroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to number of PDUs\nand number of breakers (pdu2GroupCount).\"\"\",\n        }, # table\n        \"pdu2GroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2GroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the name, voltages, currents, power, etc.\"\"\",\n        }, # row\n        \"pdu2GroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu2GroupEntry table.\"\"\",\n        }, # column\n        \"pdu2GroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the group.\"\"\",\n        }, # column\n        \"pdu2GroupType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"breaker1pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"breaker2pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"breaker3pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"outletSection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the group. (5) has no breaker\"\"\",\n        }, # column\n        \"pdu2GroupVoltageMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase1toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase2toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase3toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase1to2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase2to3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"phase3to1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value indicates what input voltage is being measured in this table row - single phase\nvoltage, phase 1 to neutral, phase 2 to neutral, phase 3 to neutral, phase 1 to phase 2,\nphase 2 to phase 3, or phase 3 to phase 1.\"\"\",\n        }, # column\n        \"pdu2GroupVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Units are millivolts.\"\"\",\n        }, # column\n        \"pdu2GroupVoltageThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured group voltage relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2GroupVoltageThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupVoltageThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupVoltageThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupVoltageThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are millivolts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2groupCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of the group.  Units are milliamps.  A negative \nvalue indicates that the hardware current capacity is unknown (it\nwill always be unknown for custom groups).\"\"\",\n        }, # column\n        \"pdu2GroupCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group current measurement value.  Units are milliamps.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured group current relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentCrestFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current crest factor.  Units are in milli, for example a crest factor of\n1.414 will be returned as 1414.  A negative value indicates\n         that this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80% will be returned as 80.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupPowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group Watts value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Watt-Hour value for each section.  Units are WH. This value can be reset to 0 \nusing GUI. In that case, the pdu2GroupPowerWattHourTimer will be reset as well.    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupPowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of when group Watt-hours (groupWh) was last reset.\"\"\",\n        }, # column\n        \"pdu2GroupPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group PF value.  Units are in thousandths, for example a power factor\nof 0.958 would be returned as 958, and 0.92 would be returned as 920.  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupPowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group VAR value.  Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2GroupOutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets in each group (breaker).\"\"\",\n        }, # column\n        \"pdu2GroupBreakerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.3.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"breakerOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"breakerOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Only applicable to groups with breaker.  Indicates whether a breaker is turned\noff or on.\"\"\",\n        }, # column\n        \"pdu2Environment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4\",\n        }, # node\n        \"pdu2EnvProbeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of environment probe (1 per PDU) for temperature, humidity, and contacts.  \nThe number of entries is given by number of PDUs in daisy chain.\"\"\",\n        }, # table\n        \"pdu2EnvProbeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"Aggregate entries equal to number of PDUs.\"\"\",\n        }, # row\n        \"pdu2TemperatureScale\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Scale used to return temperature objects.\"\"\",\n        }, # column\n        \"pdu2TemperatureCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of temperature measurements (1 per probe).\"\"\",\n        }, # column\n        \"pdu2HumidityCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of humidity measurements  (1 per probe).\"\"\",\n        }, # column\n        \"pdu2ContactCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of contact sensors  (1 per probe).\"\"\",\n        }, # column\n        \"pdu2TemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of temperature probe measurements.  The number of entries are\ngiven by number of pdu and pdu2TemperatureCount.\"\"\",\n        }, # table\n        \"pdu2TemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2TemperatureIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a temperature measurement.\"\"\",\n        }, # row\n        \"pdu2TemperatureIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each temperature probe measurement.  Its value\nranges from 1 to temperatureCount.\"\"\",\n        }, # column\n        \"pdu2TemperatureName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the temperature probe.\"\"\",\n        }, # column\n        \"pdu2TemperatureProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\"\"\",\n        }, # column\n        \"pdu2TemperatureValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Units are in tenths of a degree (either Fahrenheit or Celsius). \nDivide by ten to get degrees.\"\"\",\n        }, # column\n        \"pdu2TemperatureThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured temperature relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2TemperatureThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are tenths of a degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2TemperatureThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are tenths of a degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2TemperatureThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are tenths of a degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2TemperatureThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are tenths of a degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2HumidityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of humidity probe measurements.  The number of entries are\ngiven by number of pdu and pdu2HumidityCount.\"\"\",\n        }, # table\n        \"pdu2HumidityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2HumidityIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a humidity measurement.\"\"\",\n        }, # row\n        \"pdu2HumidityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each humidity probe measurement.  Its value\nranges from 1 to pdu2HumidityCount per pdu.\"\"\",\n        }, # column\n        \"pdu2HumidityName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the humidity probe.\"\"\",\n        }, # column\n        \"pdu2HumidityProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\"\"\",\n        }, # column\n        \"pdu2HumidityValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Units are tenths of a percent relative humidity.  Divide the value by 10 to get %RH.\"\"\",\n        }, # column\n        \"pdu2HumidityThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured humidity relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2HumidityThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are 0.1 %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2HumidityThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are 0.1 %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2HumidityThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are 0.1 %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2HumidityThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are 0.1 %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2ContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contact sensors.  The number of entries are\ngiven by number of pdu and pdu2ContactCount.\"\"\",\n        }, # table\n        \"pdu2ContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2ContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a contact sensor\"\"\",\n        }, # row\n        \"pdu2ContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each contact sensor.  Its value ranges from 1 to\ncontactCount.\"\"\",\n        }, # column\n        \"pdu2ContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the contact sensor.\"\"\",\n        }, # column\n        \"pdu2ContactProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\nWill not be returned  if the contact sensor is internal to the ePDU,\nin that case only contactState should be read.\"\"\",\n        }, # column\n        \"pdu2ContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"contactOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contactClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"contactBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the contact sensor.\"\"\",\n        }, # column\n        \"pdu2Outlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5\",\n        }, # node\n        \"pdu2OutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to Number of PDU (pdu2IdentIndex)\nand Number of outlet per PDU (pdu2OutletIndex).\"\"\",\n        }, # table\n        \"pdu2OutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2OutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Outlet table entry containing the type, voltage, current etc.\"\"\",\n        }, # row\n        \"pdu2OutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for each outlet, value from 1 to the number of outlets per PDU.\"\"\",\n        }, # column\n        \"pdu2OutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the outlet.\"\"\",\n        }, # column\n        \"pdu2OutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"iecC13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"iecC19\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"french\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"schuko\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"nema515\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"nema51520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"nema520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"nemaL520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"nemaL530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"nema615\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"nema620\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"nemaL620\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"nemaL630\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"nemaL715\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"rf203p277\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of this outlet - C13, C19.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of this outlet.  Units are milliamps.  A negative \nvalue indicates that the hardware current capacity is unknown.\"\"\",\n        }, # column\n        \"pdu2OutletCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet current measurement value.  Units are milliamps.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured outlet current relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are milliamps.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentCrestFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current crest factor.  Units are in milli, for example a crest factor of\n1.414 will be returned as 1414.  A negative value indicates\n         that this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80% will be returned as 80.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet Watts value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletWh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Watt-Hour value for each outlet.  Units are WH.\nThis object is writable so that it can be reset to 0.  When it is\nwritten to, the pdu2OutletWhTimer will be reset updated as well    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletWhTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp (date and time) of outlet Watt-hours was last reset.\"\"\",\n        }, # column\n        \"pdu2OutletPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An outlet PF value.  Units are in thousandths, for example a power factor\nof 0.958 would be returned as 958, and 0.92 would be returned \n         as 920.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An outlet VAR value.  Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu2OutletControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to Number of PDU (pdu2IdentIndex) \nand Number of outlets per PDU (pdu2OutletIndex).\"\"\",\n        }, # table\n        \"pdu2OutletControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu2IdentIndex\",\n                \"pdu2OutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Outlet table entry containing the type, voltage, current etc.\"\"\",\n        }, # row\n        \"pdu2OutletControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pendingOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pendingOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"current state of a control outlet.\"\"\",\n        }, # column\n        \"pdu2OutletControlOffCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, once issued, the outlet will turn Off immediately.\n0-n: Time in seconds until the outlet command is issued\n-1: Cancel a pending outlet Off command\n When read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu2OutletControlOnCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, once issued, the outlet will turn On immediately.\n0-n: Time in seconds until the outlet command is issued\n-1: Cancel a pending outlet On command\n When read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu2OutletControlRebootCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, for outlets that are On prior to this Reboot command, they will \nswitch Off immediately when the command is issued, remain Off for \noutletControlRebootOffTime seconds, and then turn back On.\n For outlets that are Off prior to the Reboot command, they will turn On after \na delay of outletControlRebootOffTime seconds from when the command is issued.\n 0-n : Time in seconds until the Reboot command is issued\n -1 : Cancel a pending outlet Reboot command \n\nWhen read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu2OutletControlPowerOnState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lastState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Determines the outlet state when power is applied to the unit.\n1 : not restart at device startup\n2 : should sequence back ON in line with outletControlSequenceTime\n3 : should take the state the outlet had when power was lost.\nIf the state was ON, should sequence back ON in line with outletControlSequenceTime.\"\"\",\n        }, # column\n        \"pdu2OutletControlSequenceDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds from when a Global Sequence On command is issued to\nwhen the command is executed on this outlet.  This delay is also used as a power-on\ndelay. Set to -1 to exclude this outlet from Global Sequence On commands.\"\"\",\n        }, # column\n        \"pdu2OutletControlRebootOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds that the outlet should remain in the Off state when executing a Reboot command.\"\"\",\n        }, # column\n        \"pdu2OutletControlSwitchable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"switchable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notSwitchable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Determines the outlet capability to be controlled On/Off from the communication channels.\n1 : control On/Off enabled\n2 : control On/Off disabled.\"\"\",\n        }, # column\n        \"pdu2OutletControlShutoffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.7.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds that could be taken in account before shutting of the outlet.\nAn application which need to shutoff properly an outlet will read this parameter first\nthen write it to the command pdu2OutletControlOffCmd.\"\"\",\n        }, # column\n        \"hpdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9\",\n        }, # node\n        \"hpduIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1\",\n        }, # node\n        \"hpduNumPhase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"for 3 phases\"\"\",\n        }, # scalar\n        \"hpduIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by 1 Hpdu unit.\"\"\",\n        }, # table\n        \"hpduIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpduIdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The table entry containing the identifications of HPDU\"\"\",\n        }, # row\n        \"hpduIdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the MpduIdentEntry table. Start with 1\"\"\",\n        }, # column\n        \"hpduManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The Core PDU manufacturer. StringLength=[21]\"\"\",\n        }, # column\n        \"hpduModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU model, marketing name. StringLength=[40].\"\"\",\n        }, # column\n        \"hpduName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU name, descriptive name or hostname. StringLength=[16].\"\"\",\n        }, # column\n        \"hpduFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU firmware version(s). StringLength=[12].\"\"\",\n        }, # column\n        \"hpduHardwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU hardware version. StringLength=[8].\"\"\",\n        }, # column\n        \"hpduPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Core PDU part number. StringLength=[21].\"\"\",\n        }, # column\n        \"hpduSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU external serial number. StringLength=[21].\"\"\",\n        }, # column\n        \"hpduUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's UUID equals PN add SN, canonical conversion. StringLength=[37].\"\"\",\n        }, # column\n        \"hpduType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Type: Delta, Wye, single, Wye+lowline.\nStringLength=[24].\"\"\",\n        }, # column\n        \"hpduPowerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Power Rating in KVA (Name Plate). Value is presented \nin 1/100 of the KVA. i.e. 1750 means 17.50 KVA\"\"\",\n        }, # column\n        \"hpduInputRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU's Input Current Rating in A (Name Plate)\"\"\",\n        }, # column\n        \"hpduRegionalNominalVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"value is either America(208V), Japan(202V) or blank for International Model\"\"\",\n        }, # column\n        \"hpduNumOutputBreakers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets with breakers of each hpdu.\"\"\",\n        }, # column\n        \"hpduNumMonitoredOutlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of measured outlets (with CT, VT) of each hpdu.\"\"\",\n        }, # column\n        \"hpduFanStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report fan status: OK or FAIL\"\"\",\n        }, # column\n        \"hpduInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2\",\n        }, # node\n        \"hpduInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by hpduNumPhase.\"\"\",\n        }, # table\n        \"hpduInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpduInputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Input table entry containing the voltage, current, PF,\npercent load, VA, Watts for the HPDU.\"\"\",\n        }, # row\n        \"hpduInputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the hpduInputEntry table.\"\"\",\n        }, # column\n        \"hpduInputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the Input: off, on, problem. StringLength=[7].\"\"\",\n        }, # column\n        \"hpduInputBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of each hpdu Input in Ampere.\"\"\",\n        }, # column\n        \"hpduInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured Input voltage from the PDU meters in volts. Value is \npresented in 1/10 of the Volt i.e. 2095 is 209.5 V.  A value \nof -1 will be returned if the voltage is unable to be measured.\"\"\",\n        }, # column\n        \"hpduInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured Input current from the PDU meters in amps. Value is \npresented in 1/100 of the Ampere i.e. 175 is 1.75 A.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"hpduInputPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total Input Power measured in VA.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduInputPowerWatt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total Input power measured in Watts.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduInputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Input power factor is presented in 1/100 of the unit i.e.\n98 is 0.98.  A value of -1 will be returned if the power factor is unable \nto be measured.\"\"\",\n        }, # column\n        \"hpduInputWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-setting Input threshhold limit for Warning in percentage\"\"\",\n        }, # column\n        \"hpduInputCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-setting Input threshhold limit for Critical in percentage\"\"\",\n        }, # column\n        \"hpduInputPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Support Billing Grade Energy Metering in Watt-Hour.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduInputTotalEnergySince\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display the date and time that starts to accumulate the per Load segment energy in WH. \nDate and Time can be set by user on GUI.\"\"\",\n        }, # column\n        \"hpduInputEnergyMeteringTotalHours\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total hours of collecting measurement data.  A value \nof -1 will be returned if the value is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3\",\n        }, # node\n        \"hpduOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Indexed by hpduNumMonitoredOutlet and hpduNumPhase . So aggregate objects for each entry \nequal to (hpduNumMonitoredOutlet x hpduNumPhase). Start with 1.\"\"\",\n        }, # table\n        \"hpduOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpduNumMonitoredOutlet\",\n                \"hpduNumPhase\",\n                \"hpduOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Outlet table entry containing the voltage, current, PF,\npercent load, VA, Watts for the Modular PDU.\"\"\",\n        }, # row\n        \"hpduOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the hpduOutletEntry table.\"\"\",\n        }, # column\n        \"hpduOutletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the breaker: off, on, problem. StringLength=[7].\"\"\",\n        }, # column\n        \"hpduOutletBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of each hpdu Outlet in Ampere.\"\"\",\n        }, # column\n        \"hpduOutletPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hpdu's each Outlet load in percent of rated capacity. Value is \npresented in 1/10 of the percentage i.e. 125 is 12.5%.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"hpduOutletVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured Outlet voltage from the PDU meters in volts. Value is \npresented in 1/10 of the Volt i.e. 2095 is 209.5 V.  A value \nof -1 will be returned if the voltage is unable to be measured.\"\"\",\n        }, # column\n        \"hpduOutletCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured Outlet current from the PDU meters in amps. Value is \npresented in 1/100 of the Ampere i.e. 175 is 1.75 A.  A value \nof -1 will be returned if the current is unable to be measured.\"\"\",\n        }, # column\n        \"hpduOutletPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total VA load (VI) measured on the PDU in VA.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduOutletPowerWatt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power load measured on the PDU in Watts.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduOutletPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power factor is presented in 1/100 of the unit i.e.\n98 is 0.98.  A value of -1 will be returned if the power factor is unable \nto be measured.\"\"\",\n        }, # column\n        \"hpduOutletWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-set threshhold limit for Warning in percentage\"\"\",\n        }, # column\n        \"hpduOutletCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Report the User-set threshhold limit for Critical in percentage\"\"\",\n        }, # column\n        \"hpduOutletPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Support Billing Grade Energy Metering in Watt-Hour.  A value \nof -1 will be returned if the power is unable to be calculated.\"\"\",\n        }, # column\n        \"hpduOutletTotalEnergySince\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display the date and time that starts to accumulate the per Load segment energy in WH. \nDate and Time can be set by user on GUI.\"\"\",\n        }, # column\n        \"hpduOutletEnergyMeteringTotalHours\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.9.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total hours of collecting measurement data.  A value \nof -1 will be returned if the value is unable to be calculated.\"\"\",\n        }, # column\n        \"pdu3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11\",\n        }, # node\n        \"pdu3Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1\",\n        }, # node\n        \"pdu3NumberPDU\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PDUs detected (in its daisy chain).\"\"\",\n        }, # scalar\n        \"pdu3IdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to pdu3NumberPDU .\"\"\",\n        }, # table\n        \"pdu3IdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the name, model, manufacturer, \nfirmware version, part number, etc.\"\"\",\n        }, # row\n        \"pdu3IdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu3IdentEntry table.\"\"\",\n        }, # column\n        \"pdu3Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string identify the device in daisy chain. Example PDU A.\"\"\",\n        }, # column\n        \"pdu3Model\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Model.\"\"\",\n        }, # column\n        \"pdu3Manufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Device Manufacturer Name (e.g. Hewlett-Packard).\"\"\",\n        }, # column\n        \"pdu3FirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level of the device.\"\"\",\n        }, # column\n        \"pdu3FirmwareVersionTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of when the PDU firmware was last updated\"\"\",\n        }, # column\n        \"pdu3PartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device part number. Example AF400A.\"\"\",\n        }, # column\n        \"pdu3SerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device serial number, 10- or 16-digit.\"\"\",\n        }, # column\n        \"pdu3Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status of the device.  A value of OK(2) indicates the device is operating normally.\nA value of degraded(3) indicates the device is operating with warning indicators.  A value of\nfailed(4) indicates the device is operating with critical indicators.\"\"\",\n        }, # column\n        \"pdu3Controllable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether or not the device is controllable.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input phase on this pdu 1,2,3.\"\"\",\n        }, # column\n        \"pdu3GroupCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of groups (breakers) on this pdu.\"\"\",\n        }, # column\n        \"pdu3OutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets in this PDU.\"\"\",\n        }, # column\n        \"pdu3MACAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The assigned MAC address for this PDU.\"\"\",\n        }, # column\n        \"pdu3IPv4Address\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IPv4 Address. \nA value of 0.0.0.0 indicates an error or an unset option.\"\"\",\n        }, # column\n        \"pdu3IPv6Address\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IPv6 Address.\nA vale of 0.0.0.0.0.0 indicates an error or an unset option.\"\"\",\n        }, # column\n        \"pdu3ConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to pdu3NumberPDU .\"\"\",\n        }, # table\n        \"pdu3ConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3ConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Read Configuration data from the PDU being queried.\"\"\",\n        }, # row\n        \"pdu3ConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of PDU configuration entry.\"\"\",\n        }, # column\n        \"pdu3ConfigSsh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting this OID to off(0) will disable the SSH conneciton.\nSetting this OID to on(1) will enable the SSH connection.\"\"\",\n        }, # column\n        \"pdu3ConfigFtps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting this OID to off(0) will disable the FTPS connection.\nSetting this OID to on(1) will enable the FTPS connection.\"\"\",\n        }, # column\n        \"pdu3ConfigHttp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting this OID to off(0) will disable the HTTP connection.\nSetting this OID to on(1) will enable the HTTP connection.\"\"\",\n        }, # column\n        \"pdu3ConfigHttps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting this OID to off(0) will disable the HTTPS connection.\nSetting this OID to on(1) will enable the HTTPS connection.\"\"\",\n        }, # column\n        \"pdu3ConfigIPv4IPv6Switch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"iPv4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"iPv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"iPv4IPv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Setting this OID to IPv4(1) will enable the IPv4 configuration.\nSetting this OID to IPv6(2) will enable the IPv6 configuration.\nSetting this OID to IPv4&IPv6(3) will enable both IPv4 and IPv6 configuration.\"\"\",\n        }, # column\n        \"pdu3ConfigRedfishAPI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to off(0) will disable the Redfish API.\nSetting this OID to on(1) will enable the Redfish API.\"\"\",\n        }, # column\n        \"pdu3ConfigOledDispalyOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"displayNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"displayReverse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the intended physical orientation of OLED display.\ndisplayNormal(1) indicates normal orientation.\ndisplayReverse(2) indicates upside down orientation.\"\"\",\n        }, # column\n        \"pdu3ConfigEnergyReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will cause the device energy meter value \nto be reset to zero. Getting this OID in models that support this feature\nwill do nothing and return the noOperation(1) value. Models that do not\nsupported this feature will respond to this OID with a value of notSupported(3).\nAttempts to set this OID in these models will fail.\"\"\",\n        }, # column\n        \"pdu3ConfigNetworkManagementCardReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this OID will return noOperation(0).\nGetting this OID to reset(1) will reset NMC.\"\"\",\n        }, # column\n        \"pdu3ConfigDaisyChainStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.1.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"daisychain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to daisychain(0) will enable daisychain mode.\"\"\",\n        }, # column\n        \"pdu3Input\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2\",\n        }, # node\n        \"pdu3InputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to pdu3NumberPDU .\"\"\",\n        }, # table\n        \"pdu3InputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry containing the VA, Watts, WH, etc.\"\"\",\n        }, # row\n        \"pdu3InputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"threePhaseDelta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhaseWye\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of input - single phase, split phase, three phase delta, or three\nphase wye.\"\"\",\n        }, # column\n        \"pdu3InputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input frequency from the PDU meters in tenths of Hz.\"\"\",\n        }, # column\n        \"pdu3InputFrequencyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outOfRange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input frequency relative to the nominal frequency and the admitted tolerance.\"\"\",\n        }, # column\n        \"pdu3InputPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input VA of all phases.  Units are 0.001 VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input Watts of all phases.  Units are 0.001 Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputTotalEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input Watt-Hour value for all phases.  Units are KWh. This value is accumulated since PDU in service.   \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Timestamp of when the Total Input WH was last reset.\"\"\",\n        }, # column\n        \"pdu3InputResettableEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A total input Watt-Hour value for all phases.  Units are 0.001 Wh. This value can be reset to 0 \nusing GUI. In that case, the pdu3InputPowerWattHourTimer will be reset as well  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input PF value.  Units are in thousandths, for example a power factor\nof 0.958 would be returned as 958, and 0.92 would be returned as 920.  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VAR value.  Units are 0.001 VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to number of PDUs (pdu3NumberPDU) and\nnumber of input phase (pdu3InputPhaseCount).\"\"\",\n        }, # table\n        \"pdu3InputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3InputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the voltage, current, frequency, power for each phase.\nEntries are given with number of pdu and number of input phase 1, 2, or 3.\"\"\",\n        }, # row\n        \"pdu3InputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu3InputEntry table.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase1toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase2toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase3toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase1to2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase2to3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"phase3to1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value indicates what input voltage is being measured in this table row - single phase\nvoltage, phase 1 to neutral, phase 2 to neutral, phase 3 to neutral, phase 1 to phase 2,\nphase 2 to phase 3, or phase 3 to phase 1.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input voltage measurement value. Return value is divided by 10.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input voltage relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Return value is divided by 10. A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Return value is divided by 10. A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Return value is divided by 10. A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseVoltageThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Return value is divided by 10. A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Which input wire is being measured in this table row - single phase, neutral, phase 1,\nphase 2, or phase 3.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of the input.  A negative value indicates that\nthe hardware current capacity is unknown. Return value is divided by 100.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input current measurement value. Return value is divided by 100.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured input current relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Return value is divided by 100.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Return value is divided by 100.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold. Return value is divided by 100.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold. Return value is divided by 100.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhaseCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80.9 % will be returned as 809.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Which input wire is being measured in this table row - single phase, neutral, phase 1,\nphase 2, or phase 3.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input Watts value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A kWatt-Hour value for each Input phase.  Units are kWh. This value can be reset to 0 \nusing GUI. In that case, the pdu3InputPhasePowerWattHourTimer will be reset as well    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of when input phase kWatt-hours (kWh) was last reset.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input PF value.  Return value is divided by 100, for example a power factor\nof 0.95 would be returned as 95.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3InputPhasePowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An input VA Reactive value.  Units are in VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3\",\n        }, # node\n        \"pdu3GroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to number of PDUs\nand number of breakers (pdu3GroupCount).\"\"\",\n        }, # table\n        \"pdu3GroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3GroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the name, voltages, currents, power, etc.\"\"\",\n        }, # row\n        \"pdu3GroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for the Pdu3GroupEntry table.\"\"\",\n        }, # column\n        \"pdu3GroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the group.\"\"\",\n        }, # column\n        \"pdu3GroupType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"breaker1pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"breaker2pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"breaker3pole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"outletSection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the group. (5) has no breaker\"\"\",\n        }, # column\n        \"pdu3GroupVoltageMeasType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase1toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase2toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase3toN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase1to2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase2to3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"phase3to1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value indicates what input voltage is being measured in this table row - single phase\nvoltage, phase 1 to neutral, phase 2 to neutral, phase 3 to neutral, phase 1 to phase 2,\nphase 2 to phase 3, or phase 3 to phase 1.\"\"\",\n        }, # column\n        \"pdu3GroupVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return value is divided by 10 to get one decimal point, unit is in Volt.\"\"\",\n        }, # column\n        \"pdu3GroupVoltageThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured group voltage relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3GroupVoltageThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Return value is divided by 10 to get one decimal point, \nunit is in Volt.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupVoltageThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Return value is divided by 10 to get one decimal point, \nunit is in Volt.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupVoltageThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Return value is divided by 10 to get one decimal point, \nunit is in Volt.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupVoltageThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"500000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Return value is divided by 10 to get one decimal point, \nunit is in Volt.  A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3groupCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of the group.  Return value is divided by 100 to get two decimal points, \nunit is in Amps.  A negative value indicates that the hardware current capacity is unknown (it\n will always be unknown for custom groups).\"\"\",\n        }, # column\n        \"pdu3GroupCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group current measurement value. Return value is divided by 100 to get two decimal points.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured group current relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Return value is divided by 100 to get two decimal points.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Return value is divided by 100 to get two decimal points.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Return value is divided by 100 to get two decimal points.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"100000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold. Return value is divided by 100 to get two decimal points.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80.9 % will be returned as 809.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupPowerVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupPowerWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group power value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupPowerWattHour\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An energy consumption value for each load segment.  Units are kWh. This value can be reset to 0 \nusing GUI. In that case, the pdu3GroupPowerWattHourTimer will be reset as well.    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupPowerWattHourTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp when group kilo Watt-hours (group kWh) is reset.\"\"\",\n        }, # column\n        \"pdu3GroupPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A group PF value.  Return value is divided by 100, for example a power factor of 0.95 would be returned as 95.  \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupPowerVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A measurement for group/load segment power reactive. Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3GroupOutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets in each group (breaker).\"\"\",\n        }, # column\n        \"pdu3GroupBreakerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.3.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"breakerOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"breakerOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Only applicable to groups with breaker.  Indicates whether a breaker is turned\noff or on.\"\"\",\n        }, # column\n        \"pdu3Environment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4\",\n        }, # node\n        \"pdu3EnvProbeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of environment probe (1 per PDU) for temperature, humidity, and contacts.  \nThe number of entries is given by number of PDUs in daisy chain.\"\"\",\n        }, # table\n        \"pdu3EnvProbeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"Aggregate entries equal to number of PDUs.\"\"\",\n        }, # row\n        \"pdu3TemperatureScale\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Scale used to return temperature objects.\"\"\",\n        }, # column\n        \"pdu3TemperatureCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of temperature measurements (1 per probe).\"\"\",\n        }, # column\n        \"pdu3HumidityCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of humidity measurements  (1 per probe).\"\"\",\n        }, # column\n        \"pdu3ContactCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Max number of contact sensors  (1 per probe).\"\"\",\n        }, # column\n        \"pdu3TemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of temperature probe measurements.  The number of entries are\ngiven by number of pdu and pdu3TemperatureCount.\"\"\",\n        }, # table\n        \"pdu3TemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3TemperatureIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a temperature measurement.\"\"\",\n        }, # row\n        \"pdu3TemperatureIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each temperature probe measurement.  Its value\nranges from 1 to temperatureCount.\"\"\",\n        }, # column\n        \"pdu3TemperatureName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the temperature probe.\"\"\",\n        }, # column\n        \"pdu3TemperatureProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\"\"\",\n        }, # column\n        \"pdu3TemperatureValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Units are in tenths of a degree (either Fahrenheit or Celsius). \nReturn value is divided by 10 to get degrees.\"\"\",\n        }, # column\n        \"pdu3TemperatureThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured temperature relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3TemperatureThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Return value is divided by 10 to get degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3TemperatureThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold. Return value is divided by 10 to get degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3TemperatureThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold. Return value is divided by 10 to get degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3TemperatureThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"150000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold. Return value is divided by 10 to get degree.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3HumidityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of humidity probe measurements.  The number of entries are\ngiven by number of pdu and pdu3HumidityCount.\"\"\",\n        }, # table\n        \"pdu3HumidityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3HumidityIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a humidity measurement.\"\"\",\n        }, # row\n        \"pdu3HumidityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each humidity probe measurement.  Its value\nranges from 1 to pdu3HumidityCount per pdu.\"\"\",\n        }, # column\n        \"pdu3HumidityName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the humidity probe.\"\"\",\n        }, # column\n        \"pdu3HumidityProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\"\"\",\n        }, # column\n        \"pdu3HumidityValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Units are tenths of a percent relative humidity. Return value is divided by 10 to get %RH.\"\"\",\n        }, # column\n        \"pdu3HumidityThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured humidity relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3HumidityThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold. Return value is divided by 10 to get %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3HumidityThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold. Return value is divided by 10 to get %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3HumidityThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold. Return value is divided by 10 to get %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3HumidityThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold. Return value is divided by 10 to get %RH.  A negative value\nindicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3ContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contact sensors.  The number of entries are\ngiven by number of pdu and pdu3ContactCount.\"\"\",\n        }, # table\n        \"pdu3ContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3ContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry for a contact sensor\"\"\",\n        }, # row\n        \"pdu3ContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each contact sensor.  Its value ranges from 1 to\ncontactCount.\"\"\",\n        }, # column\n        \"pdu3ContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the contact sensor.\"\"\",\n        }, # column\n        \"pdu3ContactProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a probe is connected or not.\nWill not be returned  if the contact sensor is internal to the ePDU,\nin that case only contactState should be read.\"\"\",\n        }, # column\n        \"pdu3ContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"contactOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contactClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"contactBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the contact sensor.\"\"\",\n        }, # column\n        \"pdu3Outlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5\",\n        }, # node\n        \"pdu3OutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to Number of PDU (pdu3IdentIndex)\nand Number of outlet per PDU (pdu3OutletIndex).\"\"\",\n        }, # table\n        \"pdu3OutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3OutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Outlet table entry containing the type, voltage, current etc.\"\"\",\n        }, # row\n        \"pdu3OutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for each outlet, value from 1 to the number of outlets per PDU.\"\"\",\n        }, # column\n        \"pdu3OutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the outlet.\"\"\",\n        }, # column\n        \"pdu3OutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"iecC13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"iecC19\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"french\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"schuko\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"nema515\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"nema51520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"nema520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"nemaL520\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"nemaL530\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"nema615\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"nema620\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"nemaL620\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"nemaL630\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"nemaL715\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"rf203p277\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of this outlet - C13, C19.\"\"\",\n        }, # column\n        \"pdu3OutletCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated current capacity of this outlet. Return value is divided by 100 to get amps.  A negative \nvalue indicates that the hardware current capacity is unknown.\"\"\",\n        }, # column\n        \"pdu3OutletCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet current measurement value. Return value is divided by 100 to get amps.\"\"\",\n        }, # column\n        \"pdu3OutletActivePowerThStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"good\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Status of the measured outlet active power relative to the configured thresholds.\"\"\",\n        }, # column\n        \"pdu3OutletActivePowerThLowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower warning threshold.  Units are Watts(W).  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletActivePowerThLowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lower critical threshold.  Units are Watts(W).  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletActivePowerThUpperWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper warning threshold.  Units are Watts(W).  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletActivePowerThUpperCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Upper critical threshold.  Units are Watts(W).  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletCurrentPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current percent load, based on the rated current capacity.  Units are\npercentage, for example 80.5% will be returned as 805.  A negative\nvalue indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet power VA value.  Units are VA.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A outlet power in Watts value.  Units are Watts.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletWh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An energy in kWatt-Hour value for each outlet.  Units are kWh.\nThis object is writable so that it can be reset to 0.  When it is\nwritten to, the pdu3OutletWhTimer will be reset updated as well    \nA negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletWhTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp (date and time) of outlet energy in kWh is reset.\"\"\",\n        }, # column\n        \"pdu3OutletPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An outlet PF value.  Return value is divided by 100, for example a power factor\nof 0.95 would be returned as 95. A negative value indicates that this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletVAR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An outlet power reactive in VAR value.  Units are VAR.  A negative value indicates\nthat this object is not available.\"\"\",\n        }, # column\n        \"pdu3OutletControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Aggregate Object with number of entries equal to Number of PDU (pdu3IdentIndex) \nand Number of outlets per PDU (pdu3OutletIndex).\"\"\",\n        }, # table\n        \"pdu3OutletControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pdu3IdentIndex\",\n                \"pdu3OutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Outlet table entry containing the type, voltage, current etc.\"\"\",\n        }, # row\n        \"pdu3OutletControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pendingOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pendingOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"current state of a control outlet.\"\"\",\n        }, # column\n        \"pdu3OutletControlOffCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, once issued, the outlet will turn Off immediately.\n0-n: Time in seconds until the outlet command is issued\n-1: Cancel a pending outlet Off command\n When read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu3OutletControlOnCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, once issued, the outlet will turn On immediately.\n0-n: Time in seconds until the outlet command is issued\n-1: Cancel a pending outlet On command\n When read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu3OutletControlRebootCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When write, for outlets that are On prior to this Reboot command, they will \nswitch Off immediately when the command is issued, remain Off for \noutletControlRebootOffTime seconds, and then turn back On.\n For outlets that are Off prior to the Reboot command, they will turn On after \na delay of outletControlRebootOffTime seconds from when the command is issued.\n 0-n : Time in seconds until the Reboot command is issued\n -1 : Cancel a pending outlet Reboot command \n\nWhen read, returns -1 if no command is pending, or the current downcount in \nseconds of a pending command.\"\"\",\n        }, # column\n        \"pdu3OutletControlPowerOnState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lastState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Determines the outlet state when power is applied to the unit.\n1 : not restart at device startup\n2 : should sequence back ON in line with outletControlSequenceTime\n3 : should take the state the outlet had when power was lost.\nIf the state was ON, should sequence back ON in line with outletControlSequenceTime.\"\"\",\n        }, # column\n        \"pdu3OutletControlSequenceDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds from when a Global Sequence On command is issued to\nwhen the command is executed on this outlet.  This delay is also used as a power-on\ndelay. Set to -1 to exclude this outlet from Global Sequence On commands.\"\"\",\n        }, # column\n        \"pdu3OutletControlRebootOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds that the outlet should remain in the Off state when executing a Reboot command.\"\"\",\n        }, # column\n        \"pdu3OutletControlSwitchable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"switchable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notSwitchable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Determines the outlet capability to be controlled On/Off from the communication channels.\n1 : control On/Off enabled\n2 : control On/Off disabled.\"\"\",\n        }, # column\n        \"pdu3OutletControlShutoffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.11.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"99999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay in seconds that could be taken in account before shutting of the outlet.\nAn application which need to shutoff properly an outlet will read this parameter first\nthen write it to the command pdu3OutletControlOffCmd.\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"trapCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"trapCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceDetails\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceMgmtUrl\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A critical alarm has occurred. Action: Check the Trap Details for more information.\"\"\",\n        }, # notification\n        \"trapWarning\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"trapCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceDetails\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceMgmtUrl\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A warning alarm has occurred. Action: Check the Trap Details for more information.\"\"\",\n        }, # notification\n        \"trapInformation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"trapCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceDetails\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceMgmtUrl\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An informational alarm has occurred. Action: Check the Trap Details for more information.\"\"\",\n        }, # notification\n        \"trapCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"trapCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceDetails\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceMgmtUrl\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An alarm has cleared. Action: Check the Trap Details for more information.\"\"\",\n        }, # notification\n        \"trapTest\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"trapCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceDetails\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n                \"trapDeviceMgmtUrl\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Test trap sent to a trap receiver to check proper reception of traps\"\"\",\n        }, # notification\n        \"deviceTrapInitialization\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"CPQPOWER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.232.165.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"deviceIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"CPQPOWER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent each time a power device is initialized.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/DNOS-SWITCHING-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python DNOS-SWITCHING-MIB\n\nFILENAME = \"fastpathswitching.my\"\n\nMIB = {\n    \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n\n    \"DNOS-SWITCHING-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Dell, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"\"\"\",\n        \"description\" :\n            \"\"\"The Dell Networking Private MIB for Switching\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2015-12-18 00:00\",\n                \"description\" :\n                    \"\"\"Added object agentKeepalivePortLastLoopDetectedTime to\nagentKeepalivePortEntry. Made object\nagentKeepalivePortTimeSinceLastLoop as obsolete.\"\"\",\n            },\n            {\n                \"date\" : \"2015-06-29 00:00\",\n                \"description\" :\n                    \"\"\"Added below mentioned mibs for Loop protect feature.\nagentKeepalivePortEntry - includes config and state objects for loop protect\nfeature on an interface.\nagentSwitchKeepaliveGroup - includes config and state objects for loop protect\nfeature on a switch.\nAlso added loopProtectTrap trap to be sent on detection of loop.\"\"\",\n            },\n            {\n                \"date\" : \"2014-04-09 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"2014-04-09 00:00\",\n                \"description\" :\n                    \"\"\"Added group agentDynamicAuthorizationGroup to the agentConfigGroup to support\nDynamic Authorization.\"\"\",\n            },\n            {\n                \"date\" : \"2011-10-17 00:00\",\n                \"description\" :\n                    \"\"\"Revisions made for new release.\"\"\",\n            },\n            {\n                \"date\" : \"2003-11-21 00:00\",\n                \"description\" :\n                    \"\"\"Revisions made for new release.\"\"\",\n            },\n            {\n                \"date\" : \"2003-02-06 18:35\",\n                \"description\" :\n                    \"\"\"Updated for release.\"\"\",\n            },\n        ),\n        \"identity node\" : \"fastPathSwitching\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"DELL-REF-MIB\", \"name\" : \"dnOS\"},\n        {\"module\" : \"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"Q-BRIDGE-MIB\", \"name\" : \"VlanId\"},\n        {\"module\" : \"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n        {\"module\" : \"Q-BRIDGE-MIB\", \"name\" : \"dot1qVlanIndex\"},\n        {\"module\" : \"Q-BRIDGE-MIB\", \"name\" : \"dot1qFdbId\"},\n        {\"module\" : \"IANAifType-MIB\", \"name\" : \"IANAifType\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"\", \"name\" : \"AgentLogSeverity\"},\n    ),\n\n    \"typedefs\" : {\n        \"ProtectedPortList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"198\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"198\"\n            },\n            \"description\" :\n                \"\"\"Each octet within this value specifies a set of eight\nports, with the first octet specifying ports 1 through\n8, the second octet specifying ports 9 through 16, etc.\nWithin each octet, the most significant bit represents\nthe lowest numbered port, and the least significant bit\nrepresents the highest numbered port.  Thus, each port\nof the bridge is represented by a single bit within the\nvalue of this object.  If that bit has a value of '1'\nthen that port is included in the set of ports; the port\nis not included if its bit has a value of '0'.\"\"\",\n        },\n        \"VlanList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"512\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"512\"\n            },\n            \"description\" :\n                \"\"\"Each octet within this value specifies a set of eight\nvlans, with the first octet specifying vlans 1 through\n8, the second octet specifying vlans 9 through 16, etc.\nWithin each octet, the most significant bit represents\nthe lowest numbered vlan, and the least significant bit\nrepresents the highest numbered vlan.  Thus, each vlan\nsupported is represented by a single bit within the\nvalue of this object.  If that bit has a value of '1'\nthen the associated port is in that vlan; the port is\nnot included if the vlans bit has a value of '0'.\"\"\",\n        },\n        \"Ipv6Address\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"16\",\n                \"max\" : \"16\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"16\",\n                \"max\" : \"16\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model IPv6 addresses.\nThis is a binary string of 16 octets in network\nbyte-order.\"\"\",\n        },\n        \"Ipv6AddressPrefix\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"16\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"16\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model IPv6 address\nprefixes. This is a binary string of up to 16\noctets in network byte-order.\"\"\",\n        },\n        \"Ipv6AddressIfIdentifier\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model IPv6 address\ninterface identifiers. This is a binary string\n of up to 8 octets in network byte-order.\"\"\",\n        },\n        \"Ipv6IfIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"A unique value, greater than zero for each\ninternetwork-layer interface in the managed\nsystem. It is recommended that values are assigned\ncontiguously starting from 1. The value for each\ninternetwork-layer interface must remain constant\nat least from one re-initialization of the entity's\nnetwork management system to the next\n\n\n\n\nre-initialization.\"\"\",\n        },\n        \"Ipv6IfIndexOrZero\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"This textual convention is an extension of the\nIpv6IfIndex convention.  The latter defines\na greater than zero value used to identify an IPv6\ninterface in the managed system.  This extension\npermits the additional value of zero.  The value\nzero is object-specific and must therefore be\ndefined as part of the description of any object\nwhich uses this syntax.  Examples of the usage of\nzero might include situations where interface was\nunknown, or when none or all interfaces need to be\nreferenced.\"\"\",\n        },\n        \"PortId\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"2\",\n                \"max\" : \"2\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"2\",\n                \"max\" : \"2\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model port ids.\nThis is a binary string of 2 octets.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"fastPathSwitching\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"fastPathSwitchingTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0\",\n        }, # node\n        \"agentInfoGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1\",\n        }, # node\n        \"agentInventoryGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1\",\n        }, # node\n        \"agentInventorySysDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Inventory system description.  \"\"\",\n        }, # scalar\n        \"agentInventoryMachineType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the Machine used in the Switch \"\"\",\n        }, # scalar\n        \"agentInventoryMachineModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Machine Model. \"\"\",\n        }, # scalar\n        \"agentInventorySerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number of the switch.\"\"\",\n        }, # scalar\n        \"agentInventoryFRUNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"FRU Number of the switch\"\"\",\n        }, # scalar\n        \"agentInventoryMaintenanceLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Inventory Maintenance Level\"\"\",\n        }, # scalar\n        \"agentInventoryPartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Inventory Part Number\"\"\",\n        }, # scalar\n        \"agentInventoryManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the Manufacturer of this unit\"\"\",\n        }, # scalar\n        \"agentInventoryBurnedInMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Burned-In MAC Address\"\"\",\n        }, # scalar\n        \"agentInventoryOperatingSystem\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating System running on this unit\"\"\",\n        }, # scalar\n        \"agentInventoryNetworkProcessingDevice\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Network Processing Device for this unit\"\"\",\n        }, # scalar\n        \"agentInventoryAdditionalPackages\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lists additional functional packages available on this unit.\"\"\",\n        }, # scalar\n        \"agentInventorySoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Lists the version of software loaded on this unit.\"\"\",\n        }, # scalar\n        \"agentTrapLogGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2\",\n        }, # node\n        \"agentTrapLogTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of traps sent since last reset.\"\"\",\n        }, # scalar\n        \"agentTrapLogTotalSinceLastViewed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of traps sent since last viewed.\"\"\",\n        }, # scalar\n        \"agentTrapLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Agent Trap Log\"\"\",\n        }, # table\n        \"agentTrapLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentTrapLogIndex\",\n            ],\n            \"description\" :\n                \"\"\"Agent trap log entry\"\"\",\n        }, # row\n        \"agentTrapLogIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique index of trap entry\"\"\",\n        }, # column\n        \"agentTrapLogSystemTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System uptime when trap was sent.\nThis entry shows how long the system has been up when the trap occurred.\"\"\",\n        }, # column\n        \"agentTrapLogTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the trap sent.\"\"\",\n        }, # column\n        \"agentSupportedMibTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Supported MIB table\"\"\",\n        }, # table\n        \"agentSupportedMibEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSupportedMibIndex\",\n            ],\n            \"description\" :\n                \"\"\"Supported MIB entry\"\"\",\n        }, # row\n        \"agentSupportedMibIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique index of the Supported MIB entry\"\"\",\n        }, # column\n        \"agentSupportedMibName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MIB (RFC or IEEE) that is supported.\"\"\",\n        }, # column\n        \"agentSupportedMibDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"512\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the MIB (RFC or IEEE) that is supported.\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4\",\n        }, # node\n        \"agentSwitchCpuProcessMemFree\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KBytes\",\n            \"description\" :\n                \"\"\" The total memory free for utilization in KBytes.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessMemAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"2\",\n            \"units\" : \"KBytes\",\n            \"description\" :\n                \"\"\"  The total memory available in KBytes.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessRisingThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The CPU Rising utilization threshold in percentage. A zero percent\nthreshold indicates CPU Utilization Notification feature is disabled.\nA notification is triggered when the total CPU utilization exceeds this\nthreshold over the configured Rising threshold interval.\nIf the Rising threshold is configured to be less than the Falling threshold,\nthe Falling threshold is set equal to the Rising threshold.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessRisingThresholdInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"86400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"86400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CPU Rising threshold interval in seconds.\nThe time interval is configured in multiples of 5 seconds.\nA zero Rising interval indicates CPU Utilization Notification feature is disabled.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessFallingThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The CPU Falling utilization threshold in percentage. Configuration of this\nobject value is optional. Value '0' is not allowed for configuration,\nif the Rising threshold is non-zero. If the Falling threshold is configured\nto be greater than the Rising threshold, the Rising threshold is set equal\nto the Falling threshold. If the Falling threshold is not configured,\nit takes the same value as the Rising threshold.\nA notification is triggered when the total CPU utilization\nfalls below this threshold over the configured Falling threshold interval.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessFallingThresholdInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"86400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"86400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CPU Falling threshold interval in seconds. Configuration of this object\nvalue is optional. Value '0' is not allowed for configuration,\nif the Rising interval is non-zero. If the Falling interval\nis not configured, it takes the same value as the Rising interval.\nThe time interval is configured in multiples of 5 seconds.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessFreeMemoryThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The CPU Free Memory threshold in kilobytes. A zero threshold value\nindicates the CPU Free Memory Notification feature is disabled.\nNotifications are triggered when the CPU Free Memory falls below the\nconfigured threshold and when it rises to 10% above the configured threshold.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\" A table of Task and cpu utilization.\"\"\",\n        }, # table\n        \"agentSwitchCpuProcessEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchCpuProcessIndex\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a Task Table.\"\"\",\n        }, # row\n        \"agentSwitchCpuProcessIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index of process table\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the process\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessPercentageUtilization\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CPU utilization per task in Percentage over a period of 5, 60, 300 seconds,\nand the Rising threshold period also in seconds, if configured.\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessPercentageUtilizationFive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"CPU utilization per task in percentage over a period of 5 seconds.\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessPercentageUtilizationSixty\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"CPU utilization per task in percentage over a period of 60 seconds.\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessPercentageUtilizationThreeHundred\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"CPU utilization per task in percentage over a period of 300 seconds.\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Process ID\"\"\",\n        }, # column\n        \"agentSwitchCpuProcessTotalUtilization\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.9\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total CPU utilization over a period of 5, 60, 300 seconds,\nand the Rising threshold period also in seconds, if configured.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessTotalUtilizationFive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Total CPU utilization over a period of 5 seconds.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessTotalUtilizationSixty\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Total CPU utilization over a period of 60 seconds.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuProcessTotalUtilizationThreeHundred\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"Total CPU utilization over a period of 300 seconds.\"\"\",\n        }, # scalar\n        \"agentSwitchCpuCosQDropGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.6\",\n        }, # node\n        \"agentSwitchCpuCosQDropTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table lists the number of packets dropped at each CoS queue for the CPU.\"\"\",\n        }, # table\n        \"agentSwitchCpuCosQDropEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchCpuCosQIndex\",\n            ],\n            \"description\" :\n                \"\"\"Packet drop statistics for a CPU CoS queue.\"\"\",\n        }, # row\n        \"agentSwitchCpuCosQIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Unique index of a CPU CoS queue.\"\"\",\n        }, # column\n        \"agentSwitchCpuCosQDrops\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of packets dropped at this CPU CoS queue because\nthe queue was full.\"\"\",\n        }, # column\n        \"agentSwitchMbufGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7\",\n        }, # node\n        \"agentSwitchMbufsFree\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of message buffers currently available.\"\"\",\n        }, # scalar\n        \"agentSwitchMbufTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table lists information about message buffer allocation for packets arriving at the CPU.\"\"\",\n        }, # table\n        \"agentSwitchMbufEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchMbufPrio\",\n            ],\n            \"description\" :\n                \"\"\"Information on a specific class of message buffers.\"\"\",\n        }, # row\n        \"agentSwitchMbufPrio\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Message buffer priority.\"\"\",\n        }, # column\n        \"agentSwitchMbufClassName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of this class of message buffer.\"\"\",\n        }, # column\n        \"agentSwitchMbufAllocAttempts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times the system tried to allocate a message\nbuffer allocation of this class.\"\"\",\n        }, # column\n        \"agentSwitchMbufAllocFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of message buffer allocation failures for this\nclass of message buffer.\"\"\",\n        }, # column\n        \"agentSwitchMbufsTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of message buffers in the system.\"\"\",\n        }, # scalar\n        \"agentSwitchMbufsUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of message buffers currently in use.\"\"\",\n        }, # scalar\n        \"agentPortStatsRateGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8\",\n        }, # node\n        \"agentPortStatsRateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"agentPortStatsRateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"agentPortStatsRateBitsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The number of bits per second received.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRateBitsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The number of bits per second transmitted.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRatePacketsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The number of packets per second received.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRatePacketsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The number of packets per second transmitted.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRateOverflowBitsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The counter in which stored the number of times\nthe associated agentPortStatsRateBitsPerSecondRx counter\nhas overflowed.\"\"\",\n        }, # column\n        \"agentPortStatsRateOverflowBitsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The counter in which stored the number of times\nthe associated agentPortStatsRateBitsPerSecondTx counter\nhas overflowed.\"\"\",\n        }, # column\n        \"agentPortStatsRateOverflowPacketsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The counter in which stored the number of times\nthe associated agentPortStatsRatePacketsPerSecondRx counter\nhas overflowed.\"\"\",\n        }, # column\n        \"agentPortStatsRateOverflowPacketsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The counter in which stored the number of times\nthe associated agentPortStatsRatePacketsPerSecondTx counter\nhas overflowed.\"\"\",\n        }, # column\n        \"agentPortStatsRateHCBitsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The number of bits per second received.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRateHCBitsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The number of bits per second transmitted.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRateHCPacketsPerSecondRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The number of packets per second received.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentPortStatsRateHCPacketsPerSecondTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.1.8.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"packets\",\n            \"description\" :\n                \"\"\"The number of packets per second transmitted.\nThis value is an exponentially weighted average and is affected by the\nconfigured agentPortLoadStatsInterval.\"\"\",\n        }, # column\n        \"agentConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2\",\n        }, # node\n        \"agentCLIConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1\",\n        }, # node\n        \"agentLoginSessionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the switch's login session\"\"\",\n        }, # table\n        \"agentLoginSessionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentLoginSessionIndex\",\n            ],\n            \"description\" :\n                \"\"\"Login Session Entry\"\"\",\n        }, # row\n        \"agentLoginSessionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session Index of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session UserName of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session IP Address of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionConnectionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"serial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"telnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ssh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"http\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"https\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session Connection Type of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionIdleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session Idle Time of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionSessionTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent Login Session Time of the switch\"\"\",\n        }, # column\n        \"agentLoginSessionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Status of the user.\nactive(1)    - This connection is active.\ndestroy(6)   - Set to this value to disconnect this user.\"\"\",\n        }, # column\n        \"agentLoginSessionInetAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of address agentLoginSessionInetAddress is returning.\nCan be either unknown(0), ipv4(1), or ipv6 (2).  Will return\nunknown(0) in the case of a serial login.\"\"\",\n        }, # column\n        \"agentLoginSessionInetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Inet Address of the connecting the user is logging in with.\nWill return a zero-length string in the case of a serial login.\"\"\",\n        }, # column\n        \"agentTelnetConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2\",\n        }, # node\n        \"agentTelnetLoginTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3932159\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3932159\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Telnet login timeout (seconds)\n\nConfig telnet timeout  will set the telnet session timeout value.\nA session is active as long as the session has not remained idle for\nthe value set. Specify a value from 0 to 3932159.\nNote: Changing the timeout value for active\nsessions does not become effective until the session is reaccessed.\nAny keystroke will also activate the new timeout duration.\"\"\",\n        }, # scalar\n        \"agentTelnetMaxSessions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum number of Telnet Sessions\nConfig telnet maxsessions is an integer value from 0 to 4 that specifies the\nmaximum number of telnet sessions that can be established.\nIf the value is 0, no Telnet session can be established.\"\"\",\n        }, # scalar\n        \"agentTelnetAllowNewMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Allow new telnet sessions (enable or disable)\nConfig telnet disable means that no new Telnet sessions are to be\nestablished. Any already established session remains active until\nthe session is ended or an abnormal network error ends it.\"\"\",\n        }, # scalar\n        \"agentTelnetMgmtPortNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Get/Set the port no which should be used to open telnet sessions on switch.\nPort No is an integer value from 1 to 65535 and the given port should not\nbe in use by any other service.\nThe default value is 23.\"\"\",\n        }, # scalar\n        \"agentTelnetExecBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes EXEC banner state on Telnet session.\"\"\",\n        }, # scalar\n        \"agentTelnetLoginBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes login banner state on Telnet session.\"\"\",\n        }, # scalar\n        \"agentTelnetMotdBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes MOTD banner state on Telnet session.\"\"\",\n        }, # scalar\n        \"agentUserConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3\",\n        }, # node\n        \"agentUserConfigCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Create a new user.\nWhen set with a non-empty string, a new user with that name will be created.\nThis object will only return an empty string.\nThis string is limited to alpha-numeric strings (uncluding the '-' and '_' characters).\"\"\",\n        }, # scalar\n        \"agentUserConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"User Config Table\"\"\",\n        }, # table\n        \"agentUserConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentUserIndex\",\n            ],\n            \"description\" :\n                \"\"\"User Config Entry\"\"\",\n        }, # row\n        \"agentUserIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Agent User Config Index\"\"\",\n        }, # column\n        \"agentUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent User Name.\nThis string is limited to alpha-numeric strings (including the '-' and '_' characters).\"\"\",\n        }, # column\n        \"agentUserPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent User Password\nThis object will return an empty string even if a password is set.\"\"\",\n        }, # column\n        \"agentUserAccessMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"read\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"write\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"suspended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent User Access Mode\"\"\",\n        }, # column\n        \"agentUserStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent User Status.\nactive(1)  - This user account is active.\ndestroy(6) - Set to this value to remove this user account.\"\"\",\n        }, # column\n        \"agentUserLockoutStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Displays whether the user account is locked due to excessive failed login attempts.\"\"\",\n        }, # column\n        \"agentUserPasswordExpireTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date and time when the user's password expires (past or present).  Only valid when\npassword aging is enabled.\"\"\",\n        }, # column\n        \"agentSerialGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5\",\n        }, # node\n        \"agentSerialTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3932159\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3932159\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"agentSerialTimeout specifies the maximum connect time(in seconds)\nwithout console activity. A value of 0 indicates that a console can\nbe connected indefinitely. The time range is 0 to 3932159. \"\"\",\n        }, # scalar\n        \"agentSerialBaudrate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"baud-1200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"baud-2400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"baud-4800\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"baud-9600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"baud-19200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"baud-38400\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"baud-57600\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"baud-115200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" agentSerialBaudrate specifies the current baud rate at which\nthe serial port will try to connect. The available values\nare 1200, 2400, 4800, 9600, 19200, 38400,57600, and 115200 baud. \"\"\",\n        }, # scalar\n        \"agentSerialCharacterSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"agentSerialCharacterSize  specifies the number of bits in\na character. The number of bits is always 8.\"\"\",\n        }, # scalar\n        \"agentSerialHWFlowControlMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"agentSerialHardwareFlowControl specifies whether hardware\nflow-control is enabled or disabled. Hardware Flow Control is\nalways disabled.\"\"\",\n        }, # scalar\n        \"agentSerialStopBits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" agentSerialStopBits specifies the number of Stop bits per\ncharacter. The number of Stop bits is always 1.\"\"\",\n        }, # scalar\n        \"agentSerialParityType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"even\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"odd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" agentSerialParityType specifies the Parity Method used on\nthe Serial Port. The Parity Method is always None. \"\"\",\n        }, # scalar\n        \"agentSerialExecBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes EXEC banner state on console session.\"\"\",\n        }, # scalar\n        \"agentSerialLoginBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes login banner state on console session.\"\"\",\n        }, # scalar\n        \"agentSerialMotdBannerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"Shows/Changes MOTD banner state on console session.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6\",\n        }, # node\n        \"agentPasswordManagementMinLength\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum length for user passwords\nAll new local user passwords must be at least this many characters in length.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementHistory\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of previous passwords to store for prevention of password reuse.\nThis ensures that each user does not reuse passwords often.  A value of 0\nindicates that no previous passwords will be stored.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementAging\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"365\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"365\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum time that user passwords are valid, in days, from the time the\npassword is set.  Once a password expires, the user will be required to enter\na new password following the first login after password expiration.\nA value of 0 indicates that passwords never expire.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementLockAttempts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of allowable failed local authentication attempts before the user's\naccount is locked.  A value of 0 indicates that user accounts will never be locked.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementPasswordStrengthCheck\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures Password Strength Check feature.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMinUpperCase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minimum allowable uppercase letters in a\npassword. Minimum of 0 means no restriction on that set\nof characters.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMinLowerCase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minimum allowable lowercase letters in a\npassword. Minimum of 0 means no restriction on that set\nof characters.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMinNumericNumbers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minimum allowable numeric numbers in a\npassword. Minimum of 0 means no restriction on that set\nof characters.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMinSpecialCharacters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minimum allowable special characters in a\npassword. Minimum of 0 means no restriction on that set\nof characters.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMaxConsecutiveCharacters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of maximum consecutive characters can be\npresent in a password. Maximum of 0 means disabling the\nrestriction.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMaxRepeatedCharacters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of maximum repeated characters can be present\nin a password. Maximum of 0 means disabling the\nrestriction.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthMinCharacterClasses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minimum allowable character classes in a\npassword. Minimum of 0 means no restriction on that set\nof characters.\"\"\",\n        }, # scalar\n        \"agentPasswordMgmtLastPasswordSetResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Retrieves the last password set Result.\"\"\",\n        }, # scalar\n        \"agentPasswordManagementStrengthExcludeKeywordTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents Password strength restricted keywords from the configurable password.\"\"\",\n        }, # table\n        \"agentPasswordManagementStrengthExcludeKeywordEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.15.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPasswordMgmtStrengthExcludeKeyword\",\n            ],\n            \"description\" :\n                \"\"\"Represents Password strength restricted keywords from the configurable password.\"\"\",\n        }, # row\n        \"agentPasswordMgmtStrengthExcludeKeyword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the given keyword string restricted from the configurable password.\"\"\",\n        }, # column\n        \"agentPasswordMgmtStrengthExcludeKeywordStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.6.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Create the Exclude Keyword Index and configure (Create or Destroy) the keyword to it.\"\"\",\n        }, # column\n        \"agentCLIBannerConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.7\",\n        }, # node\n        \"agentCLIBannerExec\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec banner message string. \"\"\",\n        }, # scalar\n        \"agentCLIBannerLogin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Login banner message string. \"\"\",\n        }, # scalar\n        \"agentCLIBannerMOTD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MOTD banner message string. \"\"\",\n        }, # scalar\n        \"agentIASUserConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8\",\n        }, # node\n        \"agentIASUserConfigCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Create a new user.\nWhen set with a non-empty string, a new user with that name will be created.\nThis object will only return an empty string.\nThis string is limited to alpha-numeric strings (including the '-' and '_' characters).\"\"\",\n        }, # scalar\n        \"agentIASUserConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for dot1x Client details and associated functionality.\"\"\",\n        }, # table\n        \"agentIASUserConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentIASUserIndex\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for port config table.\"\"\",\n        }, # row\n        \"agentIASUserIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"IAS user config index. \"\"\",\n        }, # column\n        \"agentIASUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IAS user name.\nThis string is limited to alpha-numeric strings (including '-' and '_'\ncharacters). \"\"\",\n        }, # column\n        \"agentIASUserPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IAS user password.\"\"\",\n        }, # column\n        \"agentIASUserStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.1.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IAS User Status.\nactive(1)  - This user account is active.\ndestroy(6) - Set to this value to remove this user account.\"\"\",\n        }, # column\n        \"agentLagConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2\",\n        }, # node\n        \"agentLagConfigCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Agent LAG Create.\nWhen this object is set with a non-empty string, a new LAG will be created\nif possible with the entered string as its name.\"\"\",\n        }, # scalar\n        \"agentLagSummaryConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A summary table of the switch's LAG config entries\"\"\",\n        }, # table\n        \"agentLagSummaryConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentLagSummaryLagIndex\",\n            ],\n            \"description\" :\n                \"\"\"Switch's LAG config entry\"\"\",\n        }, # row\n        \"agentLagSummaryLagIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent LAG IfIndex.\n\nThis value corresponds with the LAG interface in the ifTable.\"\"\",\n        }, # column\n        \"agentLagSummaryName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG Name.\n\nThe associated name of the LAG used during creation.\"\"\",\n        }, # column\n        \"agentLagSummaryFlushTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG FlushTimer.\"\"\",\n        }, # column\n        \"agentLagSummaryLinkTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG LinkTrap.\n\nConfigures sending Link Up/Down traps when the LAG interface goes Up or Down.\"\"\",\n        }, # column\n        \"agentLagSummaryAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG AdminMode.\n\nAdministratively enables or disables this LAG interface.\"\"\",\n        }, # column\n        \"agentLagSummaryStpMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG StpMode\n\nAdministratively enables or disables STP on this interface.\"\"\",\n        }, # column\n        \"agentLagSummaryAddPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG AddPort.\n\nSet to a non 0 value to add a port to the LAG.  Values correspond to\nifIndex values in the ifTable.\n\nNote: agentPortType for the port to be added must be full duplex\nand the same speed as previously added port(s), if any.\"\"\",\n        }, # column\n        \"agentLagSummaryDeletePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG DeletePort.\n\nSet to a non 0 value to remove a port from the LAG.  Values correspond to\nifIndex values in the ifTable.\"\"\",\n        }, # column\n        \"agentLagSummaryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG Status.\n\nactive(1)  - This LAG is enabled.\ndestroy(6) - Set to this value to remove the LAG.\"\"\",\n        }, # column\n        \"agentLagSummaryType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Agent LAG Type.\n\nstatic(1)  - This LAG is staticly maintained.\ndynamic(2) - This LAG is dynamicly maintained.\"\"\",\n        }, # column\n        \"agentLagSummaryStaticCapability\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Agent LAG Static Capability\n\nenable(1) - Static capability is enabled for this LAG interface\ndisable(2) - Static capability is disabled for this LAG interface\"\"\",\n        }, # column\n        \"agentLagSummaryHashMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3\",\n            \"description\" :\n                \"\"\" Agent LAG Hash Mode.\n\nThis configures the hashing-mode for trunk port computation. The\nfollowing are the possible values for hashing-mode.\n\n1  - Source MAC, VLAN, EtherType, SourceModule and Port Id.\n2  - Destination MAC, VLAN, EtherType, SourceModule and Port Id.\n3  - Source IP and Source TCP/UDP Port.\n4  - Destination IP and Destination TCP/UDP Port.\n5  - Source/Destination MAC, VLAN, EtherType, source MODID/port.\n6  - Source/Destination IP and source/destination TCP/UDP Port.\n7  - Enhanced hashing mode.\"\"\",\n        }, # column\n        \"agentLagSummarySwitchportMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"access\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trunk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"general\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"agentLagSummaryMinimumActiveLinks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\" Agent LAG Threshold.\nThis configures the threshold(i.e minimum number of active ports)\nvalue for trunk port .\"\"\",\n        }, # column\n        \"agentLagSummaryAccessVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the VLAN ID of access switch port.\nA value of 0 indicates that  the switch port is not configured as\naccess port.\"\"\",\n        }, # column\n        \"agentLagSummaryNativeVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the VLAN ID of access switch port.\nConfigures  the Native VLAN ID of the port.\"\"\",\n        }, # column\n        \"agentLagSummaryLocalPreferenceMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG Local Preference Mode.\n\nEnables or disables the LAG interface's Local Preference Mode.\"\"\",\n        }, # column\n        \"agentVpcId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the port-channel (LAG) as VPC.\n0 - To unconfigure the VPC on the port-channel\n    (or) port-channel is not configured as VPC.\"\"\",\n        }, # column\n        \"agentLagSummaryPortCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG port flap counter.\"\"\",\n        }, # column\n        \"agentLagSummaryRateLoadInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The length of time for which data is used to compute load statistics.\nThe value is given in seconds, and must be a multiple of 30.  The allowable\nrange is 30 to 600 seconds.\"\"\",\n        }, # column\n        \"agentLagDetailedConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A detailed table of the switch's LAG config entries\"\"\",\n        }, # table\n        \"agentLagDetailedConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentLagDetailedLagIndex\",\n                \"agentLagDetailedIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Switch's LAG config entry\"\"\",\n        }, # row\n        \"agentLagDetailedLagIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG index\"\"\",\n        }, # column\n        \"agentLagDetailedIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG port index\"\"\",\n        }, # column\n        \"agentLagDetailedPortSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG port speed.  See agentPortType for a description and list\nof valid values.\"\"\",\n        }, # column\n        \"agentLagDetailedPortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG port status.\n\nactive(1)   - Actively participating in the LAG.\ninactive(2) - Not participating in the LAG.\"\"\",\n        }, # column\n        \"agentLagDetailedPortCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"LAG port flap counter.\"\"\",\n        }, # column\n        \"agentLagConfigStaticCapability\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Agent LAG Static Capability.\nConfigures whether Static LAGs are supported on this device.\"\"\",\n        }, # scalar\n        \"agentLagClearCounters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normalOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"clear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear LAG stats. Will always return 0 when read.\"\"\",\n        }, # scalar\n        \"agentServicePortConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4\",\n        }, # node\n        \"agentServicePortIPAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's ServicePort ip address\"\"\",\n        }, # scalar\n        \"agentServicePortSubnetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's ServicePort subnet mask\"\"\",\n        }, # scalar\n        \"agentServicePortDefaultGateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's ServicePort default gateway\"\"\",\n        }, # scalar\n        \"agentServicePortBurnedInMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's ServicePort Burned-In MAC address\"\"\",\n        }, # scalar\n        \"agentServicePortConfigProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bootp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's ServicePort config protocol\"\"\",\n        }, # scalar\n        \"agentServicePortProtocolDhcpRenew\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normalOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"renew\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's ServicePort protocol dhcp is renewed. Will always return 0 when read.\"\"\",\n        }, # scalar\n        \"agentServicePortIpv6AdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The service port IPv6 administrative state\"\"\",\n        }, # scalar\n        \"agentServicePortIpv6Gateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6AddressPrefix\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IPv6 Gateway Address configured on the Servie port.\"\"\",\n        }, # scalar\n        \"agentServicePortIpv6AddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of IPv6 address prefixes \nconfigured on the Service port.\"\"\",\n        }, # table\n        \"agentServicePortIpv6AddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentServicePortIpv6AddrPrefix\",\n            ],\n            \"description\" :\n                \"\"\"An interface entry containing objects of\na particular IPv6 address prefix\"\"\",\n        }, # row\n        \"agentServicePortIpv6AddrPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6AddressPrefix\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IPv6 Address Prefix configured on the \nServie port.\"\"\",\n        }, # column\n        \"agentServicePortIpv6AddrPrefixLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IPv6 Address Prefix Length of the \naddress configured on the Service port.\"\"\",\n        }, # column\n        \"agentServicePortIpv6AddrEuiFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The service port IPv6 Eui Flag\"\"\",\n        }, # column\n        \"agentServicePortIpv6AddrStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"agentServicePortIpv6AddressAutoConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"The ipv6 address autoconfig allows the device to perform IPv6\nstateless address auto-configuration to discover prefixes on the\nlink and then to add the eui-64 based addresses to the serviceport interface.\"\"\",\n        }, # scalar\n        \"agentServicePortIpv6ConfigProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dhcp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Service Port.s IPv6 protocol configured on the switch.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6ClientDuid\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The DHCPv6 Client unique DUID. This value cannot be modified\"\"\",\n        }, # scalar\n        \"agentServicePortStatsGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13\",\n        }, # node\n        \"agentServicePortDhcp6ADVERTISEMessagesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type ADVERTISE that have been received by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6REPLYMessagesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type REPLY that have been received by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6ADVERTISEMessagesDiscarded\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type ADVERTISE that have been discarded by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6REPLYMessagesDiscarded\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type REPLY that have been discarded by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6MalformedMessagesReceived\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages received malformed by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6SOLICITMessagesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type SOLICIT that have been sent by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6REQUESTMessagesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type REQUEST that have been sent by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6RENEWMessagesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type RENEW that have been sent by the DHCPv6\nclient on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6REBINDMessagesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type REBIND that have been sent by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6RELEASEMessagesSent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The no. of DHCPv6 messages of type RELEASE that have been sent by the DHCPv6 client on the service port.\"\"\",\n        }, # scalar\n        \"agentServicePortDhcp6StatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.4.13.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the DHCPv6 Client statistics on the service port. A value of reset(1)\nis used to reset the statistics. A read on this object will\nalways return the value none(0). The value none(0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentSnmpConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6\",\n        }, # node\n        \"agentSnmpTrapFlagsConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5\",\n        }, # node\n        \"agentSnmpAuthenticationTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication Flag - Enable/Disable authentication Flag.\"\"\",\n        }, # scalar\n        \"agentSnmpLinkUpDownTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Link Up/Down Flag - Enable/Disable Link Up/Link Down traps for the\nentire switch. When set to Enable, the Link Up/Down traps will be\nsent only if the Link Trap flag setting associated with the port\n(Port Configuration Menu) is set to Enable.\"\"\",\n        }, # scalar\n        \"agentSnmpMultipleUsersTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Multiple Users Flag - Enable/Disable Multiple User traps. When the value\nis set to Enable, a Multiple User Trap is sent whenever someone logs in\nto the terminal interface (EIA 232 or Telnet) and there is already an\nexisting terminal interface session.\"\"\",\n        }, # scalar\n        \"agentSnmpSpanningTreeTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Spanning Tree Flag - This flag enables the sending of new root traps and\ntopology change notification traps.\"\"\",\n        }, # scalar\n        \"agentSnmpBroadcastStormTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Broadcast Storm Flag - This flag enables or disables the broadcast\nstorm trap. You must also enable Broadcast Storm Recovery Mode\n(see the Switch Configuration Menu). When this\nvalue is set to Enable and Broadcast Storm Recovery mode is set to Enable,\nthe Broadcast Storm Start/End traps are sent when the switch enters and\nleaves Broadcast Storm Recovery.\"\"\",\n        }, # scalar\n        \"agentSnmpCpuTresholdTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables sending of a trap on the CPU occupancy exceeding the rising threshold.\"\"\",\n        }, # scalar\n        \"agentSnmpBuffersTrapFlag\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.6.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables sending of a trap on the internal message buffer count \nexceeding the rising threshold.\"\"\",\n        }, # scalar\n        \"agentSpanningTreeConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.7\",\n        }, # node\n        \"agentSpanningTreeMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.7.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's Spanning Tree Switch Status. This functionality is now\nhandled by agentStpAdminMode\"\"\",\n        }, # scalar\n        \"agentBpduGuardMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.7.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The spanning tree BPDU Guard Mode.\n\nenable(1)  - enables BPDU Guard Mode on the switch.\ndisable(2) - disables BPDU Guard Mode on the switch.\n\nThe default status is disabled.\nThis functionality is now handled by agentStpBpduGuardMode\"\"\",\n        }, # scalar\n        \"agentBPDUFilteringMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.7.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The spanning tree BPDU Filter Mode, it enables BPDU Filter on all\nedge ports.\n\nenable(1)  - enables BPDU Filter Mode on the switch.\ndisable(2) - disables BPDU Filter Mode on the switch.\n\nThe default status is disabled.\nThis functionality is now handled by agentStpBpduFilterDefault\"\"\",\n        }, # scalar\n        \"agentSwitchConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8\",\n        }, # node\n        \"agentSwitchFdbAddressAgingTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"The address aging timeout.\n\nSpecifies aging time in seconds (10 - 1000000) before a dynamic MAC address\nis erased from the Filtering Database. The default value is 300 seconds.\nUse '0' to disable aging time for the MAC address Table.\"\"\",\n        }, # scalar\n        \"agentSwitchAddressAgingTimeoutTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The switch's address aging timeout table\"\"\",\n        }, # table\n        \"agentSwitchAddressAgingTimeoutEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qFdbId\",\n            ],\n            \"description\" :\n                \"\"\"Aging information about a specific Filtering Database.\"\"\",\n        }, # row\n        \"agentSwitchAddressAgingTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"The FDB entry's address aging timeout (in seconds).value '0' to disable Aging Timeout feature.\"\"\",\n        }, # column\n        \"agentSwitchStaticMacFilteringTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The switch's static Mac filtering table\"\"\",\n        }, # table\n        \"agentSwitchStaticMacFilteringEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchStaticMacFilteringVlanId\",\n                \"agentSwitchStaticMacFilteringAddress\",\n            ],\n            \"description\" :\n                \"\"\"Per-port ingress/egress filter configuration based on VLAN Id and MAC address.\"\"\",\n        }, # row\n        \"agentSwitchStaticMacFilteringVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Static MAC Filter Vlan Id\"\"\",\n        }, # column\n        \"agentSwitchStaticMacFilteringAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Static MAC Filter MAC address\"\"\",\n        }, # column\n        \"agentSwitchStaticMacFilteringSourcePortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Static MAC Filter source port mask.\n\nWhen setting this value, the system will ignore configuration for ports not\nbetween the first and last valid ports.  Configuration of any port numbers\nbetween this range that are not valid ports return a failure message, but will\nstill apply configuration for valid ports.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentSwitchStaticMacFilteringDestPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Static MAC Filter destination port mask.\n\nWhen setting this value, the system will ignore configuration for ports not\nbetween the first and last valid ports.  Configuration of any port numbers\nbetween this range that are not valid ports return a failure message, but will\nstill apply configuration for valid ports.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\n\nConfiguring destination port mask for a unicast MAC filter is not supported on some platforms.\"\"\",\n        }, # column\n        \"agentSwitchStaticMacFilteringStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Static MAC Filter status.\n\nSupported values:\nactive(1)      - valid entry\ncreateAndGo(4) - used to create a new entry\ndestroy(6)     - removes the entry\"\"\",\n        }, # column\n        \"agentSwitchSnoopingGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6\",\n        }, # node\n        \"agentSwitchSnoopingCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IGMP/MLD Snooping Global configuration entries.\"\"\",\n        }, # table\n        \"agentSwitchSnoopingCfgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchSnoopingProtocol\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for Snooping switch Configuration.\"\"\",\n        }, # row\n        \"agentSwitchSnoopingProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The protocol type of network protocol in use.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"This enables or disables Snooping on the system. \"\"\",\n        }, # column\n        \"agentSwitchSnoopingPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x000000000000\",\n            \"description\" :\n                \"\"\"IGMP/MLD Snooping Port Mask.\n\nThis allows configuration of IGMP/MLD Snooping on selected ports.\nIGMP Snooping cannot be enabled on an interface that has routing\nenabled, or is a member of a LAG.  If a port which has IGMP/MLD Snooping\nenabled becomes enabled for routing, or is enlisted as a member of a\nLAG, IGMP/MLD Snooping functionality will be disabled on that port.  IGMP/MLD\nSnooping functionality will be subsequently be reenabled if routing is\ndisabled or LAG membership is removed from an interface that had previously\nhad IGMP Snooping enabled.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingMulticastControlFramesProcessed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Multicast Control Frames Processed by CPU.\nThe number of multicast control frames that have been processed by the CPU.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8\",\n        }, # node\n        \"agentSwitchSnoopingVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IGMP/MLD Snooping Vlan configuration entries.\"\"\",\n        }, # table\n        \"agentSwitchSnoopingVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n                \"agentSwitchSnoopingProtocol\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a IGMP/MLD Snooping Vlan.\"\"\",\n        }, # row\n        \"agentSwitchSnoopingVlanAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enable\",\n            \"description\" :\n                \"\"\"This enables or disables IGMP/MLD Snooping on a selected Vlan interface.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanGroupMembershipInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"260\",\n            \"description\" :\n                \"\"\"The amount of time in seconds that a switch will wait for a report\nfrom a particular group on the selected vlan before deleting the\ninterface participating in the vlan from the entry. This value must\nbe greater than agentSwitchIGMPSnoopingIntfMaxResponseTime.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanMaxResponseTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"25\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"10\",\n            \"description\" :\n                \"\"\"The amount of time in seconds a switch will wait after sending\na query on the selected vlan because it did not receive a report for\na particular group in the interface participating in the vlan.\nThis value must be less than\nagentSwitchSnoopingIntfGroupMembershipInterval.\nThe default value is 10. \nFor IGMP & MLD Snooping this value ranges from 1 to 25.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanFastLeaveAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables IGMP/MLD Snooping on the selected vlan.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanMRPExpirationTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"The amount of time in seconds that a switch will wait for a query to be\nreceived on the selected interface participating in the vlan before the\ninterface is removed from the list of interfaces with multicast routers\nattached. This parameter is configurable only for exisiting Vlans.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingVlanReportSuppMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables IGMP/MLD Snooping Report Suppression feature on the selected vlan.\"\"\",\n        }, # column\n        \"agentSwitchVlanStaticMrouterGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.9\",\n        }, # node\n        \"agentSwitchVlanStaticMrouterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IGMP/MLD Static Mrouter Configuration parameters.\"\"\",\n        }, # table\n        \"agentSwitchVlanStaticMrouterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"dot1qVlanIndex\",\n                \"agentSwitchSnoopingProtocol\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a IGMP/MLD Static Mrouter.\"\"\",\n        }, # row\n        \"agentSwitchVlanStaticMrouterAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables IGMP/MLD Mrouter on a per-interface per-vlan basis.\"\"\",\n        }, # column\n        \"agentSwitchMFDBGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10\",\n        }, # node\n        \"agentSwitchMFDBTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Multicast Forwarding Database table\"\"\",\n        }, # table\n        \"agentSwitchMFDBEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchMFDBVlanId\",\n                \"agentSwitchMFDBMacAddress\",\n                \"agentSwitchMFDBProtocolType\",\n            ],\n            \"description\" :\n                \"\"\"Contains Forwarding and Filtering information per Vlan Index, MAC Address, and\nComponent User.\"\"\",\n        }, # row\n        \"agentSwitchMFDBVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vlan Index for which this entry is associated with.\"\"\",\n        }, # column\n        \"agentSwitchMFDBMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A multicast MAC address for which the switch has forwarding and or\nfiltering information.\"\"\",\n        }, # column\n        \"agentSwitchMFDBProtocolType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gmrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"igmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The component that is responsible for this entry in the Multicast\nForwarding Database.\"\"\",\n        }, # column\n        \"agentSwitchMFDBType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This displays the type of the entry.\n\nstatic(1)  - Entries configured by the end user\ndynamic(2) - Entries added as a result of a learning process or protocol\"\"\",\n        }, # column\n        \"agentSwitchMFDBDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Text description of this multicast table entry.\"\"\",\n        }, # column\n        \"agentSwitchMFDBForwardingPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BitMask indicating which ports this entry indicates should be forwarded.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentSwitchMFDBFilteringPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BitMask indicating which ports this entry indicates should be filtered.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentSwitchMFDBSummaryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Multicast Forwarding Database Summary table\"\"\",\n        }, # table\n        \"agentSwitchMFDBSummaryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchMFDBSummaryVlanId\",\n                \"agentSwitchMFDBSummaryMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"Summarizes the forwarding ports for all components registered for all\nMFDB table entries with the same Vlan Index and MAC Address.\"\"\",\n        }, # row\n        \"agentSwitchMFDBSummaryVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Vlan Index for which this entry is associated with.\"\"\",\n        }, # column\n        \"agentSwitchMFDBSummaryMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A multicast MAC address for which the switch has forwarding and or\nfiltering information.\"\"\",\n        }, # column\n        \"agentSwitchMFDBSummaryForwardingPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Port Mask indicating which ports this entry indicates should be forwarded.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentSwitchMFDBMaxTableEntries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This displays the maximum number of entries that can possibly be in\nthe Multicast Forwarding Database table.\"\"\",\n        }, # scalar\n        \"agentSwitchMFDBMostEntriesUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This displays the largest number of entries that have been present\nin the Multicast Forwarding Database table. This value is also known\nas the MFDB high-water mark.\"\"\",\n        }, # scalar\n        \"agentSwitchMFDBCurrentEntries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.10.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This displays the current number of entries in the Multicast\nForwarding Database table.\"\"\",\n        }, # scalar\n        \"agentSwitchDVlanTagGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11\",\n        }, # node\n        \"agentSwitchDVlanTagEthertype\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the Double Vlan Tag Ethertype for the switch.\nIf this object is supported, ethertype cannot be\nconfigured per port.\nCommonly used are the Ethertypes for vman tags (34984, or 0x88A8)\nand dot1q tags (33024, or 0x8100).\"\"\",\n        }, # scalar\n        \"agentSwitchDVlanTagTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of entries specifying the ethertype (TPID) values.\nThis will let the user specify multiple ethertypes globally.\"\"\",\n        }, # table\n        \"agentSwitchDVlanTagEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchDVlanTagTPid\",\n            ],\n            \"description\" :\n                \"\"\"A table entry specifying the ethertype (TPID) values.\nCommonly used are the Ethertypes for vman tags (34984, or 0x88A8)\nand dot1q tags (33024, or 0x8100).\"\"\",\n        }, # row\n        \"agentSwitchDVlanTagTPid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Ethertype value to identify incoming double tagged frames\"\"\",\n        }, # column\n        \"agentSwitchDVlanTagPrimaryTPid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies if this TPID is primary TPID for the switch or not\"\"\",\n        }, # column\n        \"agentSwitchDVlanTagRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row status\"\"\",\n        }, # column\n        \"agentSwitchPortDVlanTagTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table entries specifying the ethertype (TPID) values per port.\"\"\",\n        }, # table\n        \"agentSwitchPortDVlanTagEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchPortDVlanTagInterfaceIfIndex\",\n                \"agentSwitchPortDVlanTagTPid\",\n            ],\n            \"description\" :\n                \"\"\"A table entry specifying the ethertype (TPID) value for a port.\"\"\",\n        }, # row\n        \"agentSwitchPortDVlanTagInterfaceIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Port Id on to which the Ethertype value is mapped\"\"\",\n        }, # column\n        \"agentSwitchPortDVlanTagTPid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Ethertype value to identify incoming double tagged frames\"\"\",\n        }, # column\n        \"agentSwitchPortDVlanTagMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Controls the Double Vlan Tag mode on this port.\"\"\",\n        }, # column\n        \"agentSwitchPortDVlanTagCustomerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the Customer ID for the Double Vlan Tag for this port.\"\"\",\n        }, # column\n        \"agentSwitchPortDVlanTagRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.11.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row status\"\"\",\n        }, # column\n        \"agentSwitchStormControlGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12\",\n        }, # node\n        \"agentSwitchDot3FlowControlMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"asymmetric\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Config switchconfig flowcontrol allows you to enable or disable\n802.3x flow control for the switch. This value applies to only\nfull-duplex mode ports. Enabling asymmetric flow control allows \nthe switch to receive pause frames but it will not transmit \npause frames.\"\"\",\n        }, # scalar\n        \"agentSwitchBroadcastControlMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"The switch config broadcast allows you to enable or disable\nbroadcast storm recovery mode. When you specify Enable for Broadcast\nStorm Recovery and the broadcast traffic on any Ethernet port exceeds\nthe configured threshold, the switch blocks (discards) the broadcast\ntraffic.\"\"\",\n        }, # scalar\n        \"agentSwitchBroadcastControlThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"Configures the broadcast storm recovery threshold for this port\nas a percentage of port speed.\"\"\",\n        }, # scalar\n        \"agentSwitchMulticastControlMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"The switch config multicast allows you to enable or disable\nmulticast storm recovery mode. When you specify Enable for multicast\nStorm Recovery and the multicast traffic on any Ethernet port exceeds\nthe configured threshold, the switch blocks (discards) the multicast\ntraffic.\"\"\",\n        }, # scalar\n        \"agentSwitchMulticastControlThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"Configures the multicast storm recovery threshold for this port\nas a percentage of port speed.\"\"\",\n        }, # scalar\n        \"agentSwitchUnicastControlMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"The switch config unicast allows you to enable or disable\nunicast storm recovery mode. When you specify Enable for unicast\nStorm Recovery and the unknown unicast traffic on any Ethernet port exceeds\nthe configured threshold, the switch blocks (discards) the unknown unicast\ntraffic.\"\"\",\n        }, # scalar\n        \"agentSwitchUnicastControlThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"description\" :\n                \"\"\"Configures the unicast storm recovery threshold for this port\nas a percentage of port speed.\"\"\",\n        }, # scalar\n        \"agentSwitchBroadcastControlThresholdUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # scalar\n        \"agentSwitchMulticastControlThresholdUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # scalar\n        \"agentSwitchUnicastControlThresholdUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # scalar\n        \"agentSwitchStormControlType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"multicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Type of storm control.\nbroadcast(1) - Broadcast storm control traffic.\nmulticast(2) - Multicast storm control traffic.\nbroadcast(3) - Unicast traffic resulted in destination lookup failure.\"\"\",\n        }, # scalar\n        \"agentSwitchStormControlAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Action to be taken when storm control rate limit is reached. \nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # scalar\n        \"agentSwitchBroadcastStormControlAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when broadcast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # scalar\n        \"agentSwitchMulticastStormControlAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when multicast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # scalar\n        \"agentSwitchUnicastStormControlAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.12.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when unicast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # scalar\n        \"agentSwitchVlanMacAssociationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17\",\n        }, # node\n        \"agentSwitchVlanMacAssociationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The switch's MAC To VLAN association table\"\"\",\n        }, # table\n        \"agentSwitchVlanMacAssociationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchVlanMacAssociationMacAddress\",\n                \"agentSwitchVlanMacAssociationVlanId\",\n            ],\n            \"description\" :\n                \"\"\"VLAN to be assigned to untagged or priority tagged\npackets based on MAC address.\"\"\",\n        }, # row\n        \"agentSwitchVlanMacAssociationMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Mac address\"\"\",\n        }, # column\n        \"agentSwitchVlanMacAssociationVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN the Mac address assigned to\"\"\",\n        }, # column\n        \"agentSwitchVlanMacAssociationRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.17.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Mac to VLAN association row status.\n\nSupported values:\nactive(1)      - valid entry\ncreateAndGo(4) - used to create a new entry\ndestroy(6)     - removes the entry\"\"\",\n        }, # column\n        \"agentSwitchProtectedPortConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18\",\n        }, # node\n        \"agentSwitchProtectedPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The switch's protected port mapping table\"\"\",\n        }, # table\n        \"agentSwitchProtectedPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchProtectedPortGroupId\",\n            ],\n            \"description\" :\n                \"\"\"Protected ports assigned to groups.\"\"\",\n        }, # row\n        \"agentSwitchProtectedPortGroupId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The group that this port belongs to\"\"\",\n        }, # column\n        \"agentSwitchProtectedPortGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the group\"\"\",\n        }, # column\n        \"agentSwitchProtectedPortPortList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"ProtectedPortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports that are protected in this group\"\"\",\n        }, # column\n        \"agentSwitchVlanSubnetAssociationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19\",\n        }, # node\n        \"agentSwitchVlanSubnetAssociationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The switch's Subnet To VLAN association table\"\"\",\n        }, # table\n        \"agentSwitchVlanSubnetAssociationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchVlanSubnetAssociationIPAddress\",\n                \"agentSwitchVlanSubnetAssociationSubnetMask\",\n                \"agentSwitchVlanSubnetAssociationVlanId\",\n            ],\n            \"description\" :\n                \"\"\"VLAN to be assigned to untagged or priority tagged\npackets based on IP address and Subnet Mask.\"\"\",\n        }, # row\n        \"agentSwitchVlanSubnetAssociationIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ip address\"\"\",\n        }, # column\n        \"agentSwitchVlanSubnetAssociationSubnetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The subnet mask\"\"\",\n        }, # column\n        \"agentSwitchVlanSubnetAssociationVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN that the IP address and subnet mask assigned to\"\"\",\n        }, # column\n        \"agentSwitchVlanSubnetAssociationRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.19.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Subnet to VLAN association row status.\n\nSupported values:\nactive(1)      - valid entry\ncreateAndGo(4) - used to create a new entry\ndestroy(6)     - removes the entry\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20\",\n        }, # node\n        \"agentSwitchSnoopingQuerierCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IGMP/MLD Snooping Querier Global configuration entries.\"\"\",\n        }, # table\n        \"agentSwitchSnoopingQuerierCfgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchSnoopingProtocol\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for Snooping Querier Configuration.\"\"\",\n        }, # row\n        \"agentSwitchSnoopingQuerierAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables Snooping Querier on the system. \"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies the multicast protocol versions that are\nsupported by the system.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies the default source ip address to be used\nwhile generating general queries.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierQueryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1800\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1800\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"description\" :\n                \"\"\"This specified the timer interval after which the system\ngenerates general queries.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierExpiryInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"60\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"60\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"60\",\n            \"description\" :\n                \"\"\"This specified the timer interval after which the detected\nother querier information is no longer valid.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the Snooping Querier Vlan configuration entries.\"\"\",\n        }, # table\n        \"agentSwitchSnoopingQuerierVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n                \"agentSwitchSnoopingProtocol\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a Snooping Querier configurable Vlan.\"\"\",\n        }, # row\n        \"agentSwitchSnoopingQuerierVlanAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables Snooping Querier on a selected Vlan interface.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierVlanOperMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"querier\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"non-querier\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"disabled\",\n            \"description\" :\n                \"\"\"This specifies the current state of the Snooping Querier on a selected vlan interface\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierElectionParticipateMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables the Snooping Querier Election Participation mode. When enabled\nsnooping querier switch will participate in querier election up on discovering another\nquerier in the specified vlan. When disabled, up on discovering another querier, snooping\nquerier moves to non-querier state.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierVlanAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies the default source ip address to be used while generating general queries on\nthe specified vlan.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierOperVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the multicast protocol version that is currently being used by the snooping\nswitch for the specified vlan while generating query messages.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierOperMaxResponseTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of time in seconds a switch will wait after sending\na query on the selected vlan because it did not receive a report for\na particular group in the interface participating in the vlan. This\nobject is valid only when agentSwitchSnoopingQuerierOperVersion object\nis valid.\n(-1) - indicates that parameter is not available;\n( 0) - indicates that response time is less then 1 second.\"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierLastQuerierAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the last querier's ip address for the specified vlan.\nIt represents the detected other multicast querier in the vlan. \"\"\",\n        }, # column\n        \"agentSwitchSnoopingQuerierLastQuerierVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.20.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the multicast protocol version that is currently being used\nby the detected other multicast querier for the specified vlan.\n(-1) - indicates that parameter is not available.\"\"\",\n        }, # column\n        \"agentSwitchVoiceVLANGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21\",\n        }, # node\n        \"agentSwitchVoiceVLANAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"This enables or disables Voice VLAN on the system.\"\"\",\n        }, # scalar\n        \"agentSwitchVoiceVlanDeviceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the Voice Vlan device entries.\"\"\",\n        }, # table\n        \"agentSwitchVoiceVlanDeviceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchVoiceVlanInterfaceNum\",\n                \"agentSwitchVoiceVlanDeviceMacAddress\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a Voice Device on the interface.\"\"\",\n        }, # row\n        \"agentSwitchVoiceVlanInterfaceNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface number of this interface.\"\"\",\n        }, # column\n        \"agentSwitchVoiceVlanDeviceMacAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.21.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Voice Device Mac address\"\"\",\n        }, # column\n        \"agentDaiConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22\",\n        }, # node\n        \"agentDaiSrcMacValidate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether Sender MAC validation in the ARP\npackets is enabled.\n\nIf this object is set to 'true', validation\nis enabled.\n\nIf this object is set to 'false', validation\nis disabled.\"\"\",\n        }, # scalar\n        \"agentDaiDstMacValidate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether Target MAC validation in the ARP\nResponse packets is enabled.\n\nIf this object is set to 'true', validation\nis enabled.\n\nIf this object is set to 'false', validation\nis disabled.\"\"\",\n        }, # scalar\n        \"agentDaiIPValidate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether IP address validation in the ARP\npackets is enabled.\n\nIf this object is set to 'true', validation\nis enabled.\n\nIf this object is set to 'false', validation\nis disabled.\"\"\",\n        }, # scalar\n        \"agentDaiVlanConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to control Dynamic ARP\nInspection per VLAN. When a VLAN is created in a device\nsupporting this table, a corresponding entry of this table\nwill be added.\"\"\",\n        }, # table\n        \"agentDaiVlanConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDaiVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for Dynamic\nARP Inspection at each existing VLAN.\"\"\",\n        }, # row\n        \"agentDaiVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN number on which Dynamic ARP\nInspection feature is configured.\"\"\",\n        }, # column\n        \"agentDaiVlanDynArpInspEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether Dynamic ARP Inspection is\nenabled in this VLAN.\n\nIf this object is set to 'true', Dynamic ARP Inspection\nis enabled.\n\nIf this object is set to 'false', Dynamic ARP Inspection\nis disabled.\"\"\",\n        }, # column\n        \"agentDaiVlanLoggingEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"This object indicates whether the Dynamic ARP Inspection\nlogging is enabled on this VlAN.\nIf this object is set to 'true', Dynamic ARP Inspection\nlogging is enabled.\nIf this object is set to 'false', Dynamic ARP Inspection\nloging is disabled.\"\"\",\n        }, # column\n        \"agentDaiVlanArpAclName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the ARP ACL name set for this VLAN.\"\"\",\n        }, # column\n        \"agentDaiVlanArpAclStaticFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the ARP ACL set for this\nVLAN has static flag set.\nIf this object is set to 'true', static flag is enabled.\nIf this object is set to 'false', static flag is disabled.\"\"\",\n        }, # column\n        \"agentDaiStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the DAI statistics on all vlans. A value of reset(1)\nis used to reset the statistics. A read on this object will\nalways return the value none(0). The value none(0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentDaiVlanStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing Dynamic ARP Inspection statistics per VLAN.\nWhen a VLAN is created in a device supporting this table,\nand Dynamic ARP Inspection is enabled on that VLAN\na corresponding entry of this table will be added.\"\"\",\n        }, # table\n        \"agentDaiVlanStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDaiVlanStatsIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the Dynamic ARP Inspection\nstatistics per VLAN.\"\"\",\n        }, # row\n        \"agentDaiVlanStatsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN number on which Dynamic ARP\nInspection statistics are retrieved.\"\"\",\n        }, # column\n        \"agentDaiVlanPktsForwarded\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of valid ARP packets forwarded by DAI.\"\"\",\n        }, # column\n        \"agentDaiVlanPktsDropped\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of invalid ARP packets dropped by DAI.\"\"\",\n        }, # column\n        \"agentDaiVlanDhcpDrops\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were dropped by DAI as\nthere is no matching DHCP Snooping binding entry found.\"\"\",\n        }, # column\n        \"agentDaiVlanDhcpPermits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were forwarded by DAI as\nthere is a matching DHCP Snooping binding entry found.\"\"\",\n        }, # column\n        \"agentDaiVlanAclDrops\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were dropped by DAI as\nthere is no matching ARP ACL rule found for this Vlan and\nthe static flag is set on this vlan.\"\"\",\n        }, # column\n        \"agentDaiVlanAclPermits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were permitted by DAI as\nthere is a matching ARP ACL rule found for this Vlan.\"\"\",\n        }, # column\n        \"agentDaiVlanSrcMacFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were dropped by DAI as the\nsender mac address in ARP packet didn't match the source\nmac in ethernet header.\"\"\",\n        }, # column\n        \"agentDaiVlanDstMacFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were dropped by DAI as the\ntarget mac address in ARP reply packet didn't match the\ndestination mac in ethernet header.\"\"\",\n        }, # column\n        \"agentDaiVlanIpValidFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of ARP packets that were dropped by DAI as the\nsender IP address in ARP packet or target IP address in\nARP reply packet is invalid. Invalid addresses include\n0.0.0.0, 255.255.255.255, IP multicast addresses,\nclass E addresses (240.0.0.0/4), loopback addresses (127.0.0.0/8).\"\"\",\n        }, # column\n        \"agentDaiIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to configure the trust\nstate for Dynamic ARP Inspection purpose at each physical\ninterface capable of this feature.\"\"\",\n        }, # table\n        \"agentDaiIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for\nDynamic ARP Inspection at each physical\ninterface capable of this feature.\"\"\",\n        }, # row\n        \"agentDaiIfTrustEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is trusted for\nDynamic ARP Inspection purpose.\n\nIf this object is set to 'true', the interface is trusted.\nARP packets coming to this interface will be forwarded\nwithout checking.\n\nIf this object is set to 'false', the interface is not\ntrusted. ARP packets coming to this interface will be\nsubjected to ARP inspection.\"\"\",\n        }, # column\n        \"agentDaiIfRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"units\" : \"packets per second\",\n            \"description\" :\n                \"\"\"This object indicates rate limit value for Dynamic ARP\nInspection purpose. If the incoming rate of ARP packets\nexceeds the value of this object for consecutively\nburst interval seconds, ARP packets will be\ndropped. Value of -1 indicates that there is no rate limit.\"\"\",\n        }, # column\n        \"agentDaiIfBurstInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.22.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"This object indicates the burst interval value\nfor rate limiting purpose on this interface.\"\"\",\n        }, # column\n        \"agentArpAclGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23\",\n        }, # node\n        \"agentArpAclTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the ARP ACL entries\"\"\",\n        }, # table\n        \"agentArpAclEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentArpAclName\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for an ARP ACL\"\"\",\n        }, # row\n        \"agentArpAclName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of the ARP ACL, which must consist of 1 to 31 alphanumeric\ncharacters and uniquely identify this ARP ACL. This object must\nbe set to complete a new ARP ACL row instance.\"\"\",\n        }, # column\n        \"agentArpAclRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row. Entries can not be deleted until all rows in\narpAclRuleTable with corresponding values of arpAclIndex have been deleted.\n\nactive(1)       - this ACL instance is active\ncreateAndGo(4)  - set to this value to create an instance\ndestroy(6)      - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentArpAclRuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the ARP ACL Rule entries\"\"\",\n        }, # table\n        \"agentArpAclRuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentArpAclName\",\n                \"agentArpAclRuleMatchSenderIpAddr\",\n                \"agentArpAclRuleMatchSenderMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a set of ARP ACL-match rules\"\"\",\n        }, # row\n        \"agentArpAclRuleMatchSenderIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sender IP address match value for the ARP ACL.\"\"\",\n        }, # column\n        \"agentArpAclRuleMatchSenderMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sender MAC address match value for the ARP ACL.\"\"\",\n        }, # column\n        \"agentArpAclRuleRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this ACL Rule is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentArpAclRemarkConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for configuration of ARP ACL remarks entries.\nCreated remarks will be associated with ARP ACL rule when the rule is created.\"\"\",\n        }, # table\n        \"agentArpAclRemarkConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentArpAclName\",\n                \"agentArpAclRemarkIndex\",\n            ],\n            \"description\" :\n                \"\"\"The row of ARP ACL remarks configuration table.\"\"\",\n        }, # row\n        \"agentArpAclRemarkIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Index of remark(not associated with a rule) instance within ARP ACL.\"\"\",\n        }, # column\n        \"agentArpAclRemarkStr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ARP ACL remark(comment) string configuration.\nEach remark line is limited to 100 characters.\nRemark may consist of characters in the range A-Z, a-z, 0-9\nand special characters like space, hyphen, underscore.\"\"\",\n        }, # column\n        \"agentArpAclRemarkStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Status of this instance.\n\nactive(1)      - this remark is configured.\ncreateAndGo(4) - set to this value to create the remark entry.\n                 agentArpAclRemarkStr should be specified.\ndestroy(6)     - set to this value to delete the remark entry.\"\"\",\n        }, # column\n        \"agentArpAclRemarkRuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table displays remarks which are associated with ARP ACL rules.\nEach rule can be uniquely identified with ARP ACL name, IP and MAC addresses.\nEach remark within each rule can be uniquely identified with remark index.\nRemarks associated with the rule can't be edited in any way.\nThey can be deleted only.\"\"\",\n        }, # table\n        \"agentArpAclRemarkRuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentArpAclName\",\n                \"agentArpAclRuleMatchSenderIpAddr\",\n                \"agentArpAclRuleMatchSenderMacAddr\",\n                \"agentArpAclRuleRemarkIndex\",\n            ],\n            \"description\" :\n                \"\"\"Row of the ARP ACL rule remarks table.\"\"\",\n        }, # row\n        \"agentArpAclRuleRemarkIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the remark instance within ARP ACL rule.\"\"\",\n        }, # column\n        \"agentArpAclRuleRemarkStr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Displays the remark string for the specified ARP ACL rule.\"\"\",\n        }, # column\n        \"agentArpAclRuleRemarkStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.23.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Status of this instance.\n\nactive(1)      - this remark is configured.\ndestroy(6)     - set to this value to delete the remark entry.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24\",\n        }, # node\n        \"agentDhcpSnoopingAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCP Snooping\nis enabled globally.\n\nIf this object is set to 'true',admin mode\nis enabled globally.\n\nIf this object is set to 'false',admin mode\nis disabled globally.\"\"\",\n        }, # scalar\n        \"agentDhcpSnoopingVerifyMac\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether source Mac address\nin the received DHCP Message needs to be verified or not.\n\nIf this object is set to 'true',verifyMac\nis enabled globally.\n\nIf this object is set to 'false',verifyMac\nis disabled globally.\"\"\",\n        }, # scalar\n        \"agentDhcpSnoopingVlanConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to control DHCP SNOOPING\nper VLAN. When a VLAN is created in a device\nsupporting this table, a corresponding entry of this table\nwill be added.\"\"\",\n        }, # table\n        \"agentDhcpSnoopingVlanConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDhcpSnoopingVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for DHCP\nSNOOPING at each existing VLAN.\"\"\",\n        }, # row\n        \"agentDhcpSnoopingVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN number on which DHCP SNOOPING\nInspection feature is configured.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingVlanEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCP SNOOPING is\nenabled in this VLAN.\n\nIf this object is set to 'true', DHCP SNOOPING\nis enabled.\n\nIf this object is set to 'false', DHCP SNOOPING\nis disabled.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to configure the trust\nstate for DHCP snooping purpose at each physical\ninterface capable of this feature.\"\"\",\n        }, # table\n        \"agentDhcpSnoopingIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for\nDHCP snooping at each physical interface capable of this feature.\"\"\",\n        }, # row\n        \"agentDhcpSnoopingIfTrustEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is trusted for\nDHCP snooping purpose.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingIfLogEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the Logging needs on DHCP snooping validations\nor not\"\"\",\n        }, # column\n        \"agentDhcpSnoopingIfRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"units\" : \"packets per second\",\n            \"description\" :\n                \"\"\"This object indicates rate limit value for DHCP\nSnooping purpose. If the incoming rate of DHCP packets\nexceeds the value of this object for consecutively\nburst interval seconds, DHCP packets will be\ndropped. Value of -1 indicates that there is no rate limit.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingIfBurstInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"-1\"\n                    },\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"This object indicates the burst interval value\nfor rate limiting purpose on this interface. Value\nof -1 indicates that there is no burst interval.\"\"\",\n        }, # column\n        \"agentIpsgIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to configure the IPSG\nat each physical interface capable of this feature.\"\"\",\n        }, # table\n        \"agentIpsgIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for\nIPSG at each physical interface capable of this feature.\"\"\",\n        }, # row\n        \"agentIpsgIfVerifySource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether IP packets received on this interface\nare filtered based on whether IP Source Guard considers the source IP address\nto be a valid client address. Setting this variable to false automatically\nsets agentIpsgIfPortSecurity to false.\"\"\",\n        }, # column\n        \"agentIpsgIfPortSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether IP packets received on this interface\nare filtered based on whether IP Source Guard considers the source MAC address\nto be a valid client address. The port security option cannot be enabled\nunless agentIpsgIfVerifySource is also enabled. That is, MAC address filtering\ncannot be done without also doing IP address filtering. But IP address filtering\ncan be done without MAC address filtering. Once the port security\noption is enabled, it can only be disabled by disabling agentIpsgIfVerifySource.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the DHCP snooping statistics on all ports. A value of reset(1)\nis used to reset the statistics. A read on this object will\nalways return the value none(0). The value none(0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentDhcpSnoopingStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism for statics of DHCP snooping.\"\"\",\n        }, # table\n        \"agentDhcpSnoopingStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the DHCP snooping statistics per VLAN.\"\"\",\n        }, # row\n        \"agentDhcpSnoopingMacVerifyFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of failure verifications of client mac address with\nsource mac address\"\"\",\n        }, # column\n        \"agentDhcpSnoopingInvalidClientMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of invalid DHCP releases and denay messages\"\"\",\n        }, # column\n        \"agentDhcpSnoopingInvalidServerMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of invalid DHCP server mesaages\"\"\",\n        }, # column\n        \"agentStaticIpsgBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IPSG static entries\"\"\",\n        }, # table\n        \"agentStaticIpsgBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStaticIpsgBindingIfIndex\",\n                \"agentStaticIpsgBindingVlanId\",\n                \"agentStaticIpsgBindingIpAddr\",\n                \"agentStaticIpsgBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in IPSG table\"\"\",\n        }, # row\n        \"agentStaticIpsgBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface on which this IPSG binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticIpsgBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" VLAN to whcig this IPSG binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticIpsgBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address match value for the IPSG Binding.\"\"\",\n        }, # column\n        \"agentStaticIpsgBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC address match value for the IPSG Binding.\"\"\",\n        }, # column\n        \"agentStaticIpsgBindingRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this IPSG Binding is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentDynamicIpsgBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IPSG dynamic entries\"\"\",\n        }, # table\n        \"agentDynamicIpsgBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDynamicIpsgBindingIfIndex\",\n                \"agentDynamicIpsgBindingVlanId\",\n                \"agentDynamicIpsgBindingIpAddr\",\n                \"agentDynamicIpsgBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in IPSG table\"\"\",\n        }, # row\n        \"agentDynamicIpsgBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface on which this IPSG binding is added.\"\"\",\n        }, # column\n        \"agentDynamicIpsgBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" VLAN to whcig this IPSG binding is going to be added.\"\"\",\n        }, # column\n        \"agentDynamicIpsgBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sender IP address match value for the IPSG Binding.\"\"\",\n        }, # column\n        \"agentDynamicIpsgBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC address match value for the IPSG Binding.\"\"\",\n        }, # column\n        \"agentStaticDsBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the DHCP SNOOPING static entries\"\"\",\n        }, # table\n        \"agentStaticDsBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStaticDsBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in DHCP SNOOPING table\"\"\",\n        }, # row\n        \"agentStaticDsBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface on which this DHCP SNOOPING binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticDsBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanId\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" VLAN to which this DHCP SNOOPING binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticDsBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC address match value for the DHCP SNOOPING Binding.\"\"\",\n        }, # column\n        \"agentStaticDsBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address match value for the DHCP SNOOPING Binding.\"\"\",\n        }, # column\n        \"agentStaticDsBindingRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this DHCP SNOOPING Binding is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentDynamicDsBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the DHCP SNOOPING Dynamic entries\"\"\",\n        }, # table\n        \"agentDynamicDsBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDynamicDsBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in DHCP SNOOPING table\"\"\",\n        }, # row\n        \"agentDynamicDsBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface on which this DHCP SNOOPING binding is going to be added.\"\"\",\n        }, # column\n        \"agentDynamicDsBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" VLAN to whcig this DHCP SNOOPING binding is going to be added.\"\"\",\n        }, # column\n        \"agentDynamicDsBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC address match value for the DHCP SNOOPING Binding.\"\"\",\n        }, # column\n        \"agentDynamicDsBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP address match value for the DHCP SNOOPING Binding.\"\"\",\n        }, # column\n        \"agentDynamicDsBindingLeaseRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the period for which the DHCP SNOOPING Binding is valid.\"\"\",\n        }, # column\n        \"agentDhcpSnoopingRemoteFileName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the file name on the remote machine\nto save the DHCP Snooping bindings. This will be set only\nwhen we have a valid remote IP.\"\"\",\n        }, # scalar\n        \"agentDhcpSnoopingRemoteIpAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the IP address of the remote machine\nto save the DHCP Snooping bindings. This will be set only\nwhen we have a valid file name.\"\"\",\n        }, # scalar\n        \"agentDhcpSnoopingStoreInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.24.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the perodic time interval\nto save the DHCP Snooping bindings.\"\"\",\n        }, # scalar\n        \"agentSwitchAddressConflictGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26\",\n        }, # node\n        \"agentSwitchAddressConflictDetectionStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Displays if an address conflict was detected on the switch\nsince the last reset of the status. Set to 'true'\nif detected, 'false' otherwise.\"\"\",\n        }, # scalar\n        \"agentSwitchAddressConflictDetectionStatusReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the last address conflict detection status in the switch.\nA value of reset(1) is used to reset the status. A read on this\nobject always returns the value none (0). The value none (0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentSwitchLastConflictingIPAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reported conflicting IP address on the switch since the last\nreset of the conflict detection status.\"\"\",\n        }, # scalar\n        \"agentSwitchLastConflictingMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of the host corresponding to the reported\nconflicting IP address on the switch since the last reset of\nthe conflict detection status.\"\"\",\n        }, # scalar\n        \"agentSwitchLastConflictReportedTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time since the last address conflict was detected. It is displayed\nin days, hours, minutes and seconds. It is set to a valid value only\nwhen the conflict detection status is 'true'.\"\"\",\n        }, # scalar\n        \"agentSwitchConflictIPAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The IP address on the switch reported to have a conflict with\nanother host's IP address.\"\"\",\n        }, # scalar\n        \"agentSwitchConflictMacAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The MAC address of the host that has an IP address conflicting\nwith the IP address on the switch.\"\"\",\n        }, # scalar\n        \"agentSwitchAddressConflictDetectionRun\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.26.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"run\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Trigger the action to run the active address conflict detection.\nA value of run(1) is used to issue the action command. A read on\nthis object always returns the value none(0). The value none (0)\ncannot be forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentSdmPreferConfigEntry\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.27\",\n        }, # node\n        \"agentSdmPreferCurrentTemplate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.27.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dualIPv4andIPv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ipv4RoutingDefault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipv4DataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dualDataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Displays the current active SDM Template.\"\"\",\n        }, # scalar\n        \"agentSdmPreferNextTemplate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.27.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dualIPv4andIPv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ipv4RoutingDefault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipv4DataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dualDataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Configures the next active template. It will be active only after the next reboot.\nTo revert to the default template after the next reboot, use the option default(0).\"\"\",\n        }, # scalar\n        \"agentSdmTemplateSummaryTable\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28\",\n        }, # node\n        \"agentSdmTemplateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Displays Switch Database Management Template Information.\"\"\",\n        }, # table\n        \"agentSdmTemplateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSdmTemplateId\",\n            ],\n            \"description\" :\n                \"\"\"Information about a SDM Template table entry.\"\"\",\n        }, # row\n        \"agentSdmTemplateId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dualIPv4andIPv6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ipv4RoutingDefault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipv4DataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dualDataCenter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The SDM Template type this instance is associated with.\"\"\",\n        }, # column\n        \"agentArpEntries\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of entries in the IPv4 Address Resolution Protocol (ARP) cache for routing interfaces.\"\"\",\n        }, # column\n        \"agentIPv4UnicastRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IPv4 unicast forwarding table entries.\"\"\",\n        }, # column\n        \"agentIPv6NdpEntries\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IPv6 Neighbor Discovery Protocol (NDP) cache entries.\"\"\",\n        }, # column\n        \"agentIPv6UnicastRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IPv6 unicast forwarding table entries.\"\"\",\n        }, # column\n        \"agentEcmpNextHops\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of Equal cost next hops that can be installed in the IPv4 and IPv6 unicast forwarding tables.\"\"\",\n        }, # column\n        \"agentIPv4MulticastRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IPv4 multicast forwarding table entries.\"\"\",\n        }, # column\n        \"agentIPv6MulticastRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.28.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IPv6 multicast forwarding table entries.\"\"\",\n        }, # column\n        \"agentSwitchCutThroughGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.29\",\n        }, # node\n        \"agentSwitchCutThroughConfigMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.29.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Mode changes are effective from the next reload of the Switch.\nThe cut-through feature may not be present on all switches. Use\n- agentSwitchCutThroughRunningModeStatus - MIB to check if the feature is\npresent on your switch.\"\"\",\n        }, # scalar\n        \"agentSwitchCutThroughRunningModeStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.29.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"not-supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This gives the current running mode of the cut-through feature on switch.\nNote that Mode changes are effective from the next reload of the Switch.\nso running mode may be different than the configured mode.\nA value of not-supported(3) means that the feature is not present on the\nswitch.\"\"\",\n        }, # scalar\n        \"agentSwitchCutThroughConfiguredModeStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.29.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"not-supported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This gives the configured mode of cut-through feature on switch.\nNote that Mode changes are effective from the next reload of the Switch.\nso running mode may be different than the configured mode.\nA value of not-supported(3) means that the feature is not present on the\nswitch.\"\"\",\n        }, # scalar\n        \"agentPortTypeGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.30\",\n        }, # node\n        \"agentPortType40GigBaseX\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.30.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"X PCS/PMA, unknown PMD. MAU MIB augmentation\"\"\",\n            \"reference>\" :\n                \"\"\"\"\"\",\n        }, # node\n        \"agentPrivateVlanGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31\",\n        }, # node\n        \"agentPrivateVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"agentPrivateVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"agentPrivateVlanType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"isolated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"community\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unconfigured\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables vlan for Private Vlan and configures private vlan type.\"\"\",\n        }, # column\n        \"agentPrivateVlanAssociate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"VlanList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This field lists all the VlanIDs which are associated with the selected vlan.\nIf the selected vlan type is not primary(1), a zero-length bitmask is returned.\"\"\",\n        }, # column\n        \"agentPrivateVlanIntfAssocTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"agentPrivateVlanIntfAssocEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"agentPrivateVlanIntfAssocHostPrimary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the primary host vlan association with the interface.\nThis must be configured along with agentPrivateVlanIntfAssocHostSecondary before\nthe association will be operational.\n\nNOTE: Both agentPrivateVlanIntfAssocHostPrimary and agentPrivateVlanIntfAssocHostSecondary \nobjects must be specified at the same time.\"\"\",\n        }, # column\n        \"agentPrivateVlanIntfAssocHostSecondary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the secondary host vlan association with the interface.\nThis must be configured along with agentPrivateVlanIntfAssocHostPrimary before\nthe association will be operational.\n\nNOTE: Both agentPrivateVlanIntfAssocHostPrimary and agentPrivateVlanIntfAssocHostSecondary \nobjects must be specified at the same time.\"\"\",\n        }, # column\n        \"agentPrivateVlanIntfAssocPromiscuousPrimary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4094\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the primary promiscuous vlan association with the interface.\nThis must be configured along with agentPrivateVlanIntfAssocPromiscuousSecondary before\nthe association will be operational.\"\"\",\n        }, # column\n        \"agentPrivateVlanIntfAssocPromiscuousSecondary\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"VlanList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the secondary promiscuous vlan association with the interface.\nThis must be configured along with agentPrivateVlanIntfAssocPromiscuousPrimary before\nthe association will be operational.\"\"\",\n        }, # column\n        \"agentPrivateVlanIntfAssocOperational\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.31.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"VlanList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the operational private vlans associated with the interface.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32\",\n        }, # node\n        \"agentDhcpL2RelayAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCP L2 Relay\nis enabled globally.\n\nIf this object is set to 'true',admin mode\nis enabled globally.\n\nIf this object is set to 'false',admin mode\nis disabled globally.\"\"\",\n        }, # scalar\n        \"agentDhcpL2RelayIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to enable/disable and configure\nthe trust state for DHCP L2Relay purpose at each physical\ninterface capable of this feature.\"\"\",\n        }, # table\n        \"agentDhcpL2RelayIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for\nDHCP L2 Relay at each physical interface capable of this feature.\"\"\",\n        }, # row\n        \"agentDhcpL2RelayIfEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the DHCP L2Relay is enabled\nor not\"\"\",\n        }, # column\n        \"agentDhcpL2RelayIfTrustEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is trusted for\nDHCP L2 Relay purpose.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayVlanConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to control DHCP L2 Relay\nper VLAN. When a VLAN is created in a device\nsupporting this table, a corresponding entry of this table\nwill be added.\"\"\",\n        }, # table\n        \"agentDhcpL2RelayVlanConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDhcpL2RelayVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for DHCP\nL2 Relay at each existing VLAN.\"\"\",\n        }, # row\n        \"agentDhcpL2RelayVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN number on which DHCP L2 Relay\nfeature is configured.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayVlanEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCP L2 Relay is\nenabled in this VLAN.\n\nIf this object is set to 'true', DHCP L2 Relay\nis enabled.\n\nIf this object is set to 'false', DHCP L2 Relay\nis disabled.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayCircuitIdVlanEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCP CircuitId is\nenabled for L2 relaying in this VLAN.\n\nIf this object is set to 'true', DHCP CircuitId\nis enabled.\n\nIf this object is set to 'false', DHCP CircuitId\nis disabled.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayRemoteIdVlanEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this object is set with a non-empty string, DHCP RemoteId is\nenabled for L2 relaying in this VLAN.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the DHCP L2Relay statistics on all ports. A value of reset(1)\nis used to reset the statistics. A read on this object will\nalways return the value none(0). The value none(0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentDhcpL2RelayStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism for statics of DHCP L2 Relay.\"\"\",\n        }, # table\n        \"agentDhcpL2RelayStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the DHCP L2Relay statistics per interface.\"\"\",\n        }, # row\n        \"agentDhcpL2RelayUntrustedSrvrMsgsWithOptn82\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of DHCP server messages received with Option-82 field\non the untrusted interface.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayUntrustedClntMsgsWithOptn82\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of DHCP client messages received with Option-82 field\non the untrusted interface.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayTrustedSrvrMsgsWithoutOptn82\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of DHCP server messages received without Option-82 field\non the trusted interface.\"\"\",\n        }, # column\n        \"agentDhcpL2RelayTrustedClntMsgsWithoutOptn82\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.32.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of DHCP client messages received without Option-82 field\non the trusted interface.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33\",\n        }, # node\n        \"agentDhcpv6SnoopingAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCPv6 snooping\nis enabled globally.\n\nIf this object is set to 'true', admin mode\nis enabled globally.\n\nIf this object is set to 'false', admin mode\nis disabled globally.\"\"\",\n        }, # scalar\n        \"agentDhcpv6SnoopingVerifyMac\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether source MAC address\nin the received DHCPv6 message needs to be verified or not.\n\nIf this object is set to 'true', verifyMac\nis enabled globally.\n\nIf this object is set to 'false', verifyMac\nis disabled globally.\"\"\",\n        }, # scalar\n        \"agentDhcpv6SnoopingVlanConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to control DHCPv6 cnooping\nper VLAN. When a VLAN is created in a device\nsupporting this table, a corresponding entry of this table\nwill be added.\"\"\",\n        }, # table\n        \"agentDhcpv6SnoopingVlanConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDhcpv6SnoopingVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for DHCPv6\nsnooping at each existing VLAN.\"\"\",\n        }, # row\n        \"agentDhcpv6SnoopingVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN number on which DHCPv6 snooping\ninspection feature is configured.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingVlanEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether DHCPv6 snooping is\nenabled in this VLAN.\n\nIf this object is set to 'true', DHCPv6 snooping\nis enabled.\n\nIf this object is set to 'false', DHCPv6 snooping\nis disabled.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to configure the trust\nstate for DHCPv6 snooping purpose at each \ninterface capable of this feature.\"\"\",\n        }, # table\n        \"agentDhcpv6SnoopingIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for\nDHCPv6 snooping at each interface capable of this feature.\"\"\",\n        }, # row\n        \"agentDhcpv6SnoopingIfTrustEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is trusted for\nDHCPv6 snooping purpose.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingIfLogEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the logging needs on DHCPv6 snooping validations\nor not.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingIfRateLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"units\" : \"packets per second\",\n            \"description\" :\n                \"\"\"This object indicates rate limit value for DHCPv6\nsnooping purpose. If the incoming rate of DHCPv6 packets\nexceeds the value of this object for consecutively\nburst interval seconds, DHCPv6 packets will be\ndropped. Value of -1 indicates that there is no rate limit.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingIfBurstInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"-1\"\n                    },\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"This object indicates the burst interval value\nfor rate limiting purpose on this interface. Value\nof -1 indicates that there is no burst interval.\"\"\",\n        }, # column\n        \"agentIpv6sgIfConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism to configure the IPv6SG\nat each physical interface capable of this feature.\"\"\",\n        }, # table\n        \"agentIpv6sgIfConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the configuration for \nIPv6SG at each physical interface capable of this feature.\"\"\",\n        }, # row\n        \"agentIpv6sgIfVerifySource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is enabled for IPv6SG\nto forward the data based up on source IP address.\"\"\",\n        }, # column\n        \"agentIpv6sgIfPortSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"This object indicates whether the interface is enabled for IPv6SG\nto forward the data based up on source mac address in snooping table.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear the DHCPv6 snooping statistics on all ports. A value of reset(1)\nis used to reset the statistics. A read on this object will\nalways return the value none(0). The value none(0) cannot\nbe forcibly set by the administrator.\"\"\",\n        }, # scalar\n        \"agentDhcpv6SnoopingStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table provides the mechanism for statics of DHCPv6 snooping.\"\"\",\n        }, # table\n        \"agentDhcpv6SnoopingStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"A row instance contains the DHCPv6 snooping statistics per interface.\"\"\",\n        }, # row\n        \"agentDhcpv6SnoopingMacVerifyFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of failure verifications of client MAC address with\nsource MAC address.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingInvalidClientMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of invalid DHCPv6 release, request and decline messages.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingInvalidServerMessages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the number of invalid DHCPv6 server mesaages.\"\"\",\n        }, # column\n        \"agentStaticIpv6sgBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IPv6SG static entries.\"\"\",\n        }, # table\n        \"agentStaticIpv6sgBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStaticIpv6sgBindingIfIndex\",\n                \"agentStaticIpv6sgBindingVlanId\",\n                \"agentStaticIpv6sgBindingIpAddr\",\n                \"agentStaticIpv6sgBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in IPv6SG table.\"\"\",\n        }, # row\n        \"agentStaticIpv6sgBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface on which this IPv6SG binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticIpv6sgBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" VLAN to which this IPv6SG binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticIpv6sgBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IPv6 address match value for the IPv6SG binding.\"\"\",\n        }, # column\n        \"agentStaticIpv6sgBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC address match value for the IPv6SG binding.\"\"\",\n        }, # column\n        \"agentStaticIpv6sgBindingRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this IPv6SG Binding is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentDynamicIpv6sgBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the IPv6SG dynamic entries.\"\"\",\n        }, # table\n        \"agentDynamicIpv6sgBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDynamicIpv6sgBindingIfIndex\",\n                \"agentDynamicIpv6sgBindingVlanId\",\n                \"agentDynamicIpv6sgBindingIpAddr\",\n                \"agentDynamicIpv6sgBindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a binding in IPSG table.\"\"\",\n        }, # row\n        \"agentDynamicIpv6sgBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface on which this IPv6SG binding is added.\"\"\",\n        }, # column\n        \"agentDynamicIpv6sgBindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" VLAN to which this IPv6SG binding is going to be added.\"\"\",\n        }, # column\n        \"agentDynamicIpv6sgBindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sender IPv6 address match value for the IPv6SG binding.\"\"\",\n        }, # column\n        \"agentDynamicIpv6sgBindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC address match value for the IPv6SG binding.\"\"\",\n        }, # column\n        \"agentStaticDsv6BindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the DHCPv6 snooping static entries.\"\"\",\n        }, # table\n        \"agentStaticDsv6BindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStaticDsv6BindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a static binding in DHCPv6 snooping table.\"\"\",\n        }, # row\n        \"agentStaticDsv6BindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Interface on which this static DHCPv6 snooping binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticDsv6BindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanId\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" VLAN to which this static DHCPv6 snooping binding is going to be added.\"\"\",\n        }, # column\n        \"agentStaticDsv6BindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"MAC address match value for the static DHCPv6 snooping binding.\"\"\",\n        }, # column\n        \"agentStaticDsv6BindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IPv6 address match value for the static DHCPv6 snopoing binding.\"\"\",\n        }, # column\n        \"agentStaticDsv6BindingRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this static DHCPv6 snooping binding is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentDynamicDsv6BindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the DHCPv6 snooping dynamic entries.\"\"\",\n        }, # table\n        \"agentDynamicDsv6BindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDynamicDsv6BindingMacAddr\",\n            ],\n            \"description\" :\n                \"\"\"Represents a dynamic binding in DHCPv6 snooping table.\"\"\",\n        }, # row\n        \"agentDynamicDsv6BindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface on which this dynamic DHCPv6 snooping binding is added.\"\"\",\n        }, # column\n        \"agentDynamicDsv6BindingVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" VLAN to which this dynamic DHCPv6 snooping binding is added.\"\"\",\n        }, # column\n        \"agentDynamicDsv6BindingMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC address match value for the dynamic DHCPv6 snooping binding.\"\"\",\n        }, # column\n        \"agentDynamicDsv6BindingIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv6 address match value for the dynamic DHCPv6 snooping binding.\"\"\",\n        }, # column\n        \"agentDynamicDsv6BindingLeaseRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This specifies the period for which the dynamic DHCPv6 snooping binding is valid.\"\"\",\n        }, # column\n        \"agentDhcpv6SnoopingRemoteFileName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the file name on the remote machine\nto save the DHCPv6 snooping bindings. This will be set only\nwhen we have a valid remote IP.\"\"\",\n        }, # scalar\n        \"agentDhcpv6SnoopingRemoteIpAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the IP address of the remote machine\nto save the DHCPv6 snooping bindings. This will be set only\nwhen we have a valid file name.\"\"\",\n        }, # scalar\n        \"agentDhcpv6SnoopingStoreInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.33.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the perodic time interval\nto save the DHCPv6 snooping bindings.\"\"\",\n        }, # scalar\n        \"agentSwitchSnoopSSMGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the IP multicast Source Specific Multicast\nGroups for which there are members on a particular interface and VLAN.\"\"\",\n        }, # table\n        \"agentSwitchSnoopSSMGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchSnoopSSMGroupAddressType\",\n                \"agentSwitchSnoopSSMGroupIfIndex\",\n                \"agentSwitchSnoopSSMGroupVlanId\",\n                \"agentSwitchSnoopSSMGroupAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the agentSwitchSnoopSSMGroupTable.\"\"\",\n        }, # row\n        \"agentSwitchSnoopSSMGroupAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of the agentSwitchSnoopSSMGroupTable entry. This\nvalue applies to both the agentSwitchSnoopSSMGroupAddress and the\nagentSwitchSnoopSSMGroupLastReporter entries.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMGroupAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP multicast group address for which this entry\ncontains information. The InetAddressType, e.g.\nIPv4 or IPv6, is identified by the\nagentSwitchSnoopSSMGroupAddressType variable in the agentSwitchSnoopSSMGroup\ntable.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMGroupIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The interface for which this entry contains information\nfor an IP multicast group address.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMGroupVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN for which this entry contains information\nfor an IP multicast group address.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMGroupLastReporter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of the source of the last membership report\nreceived for this IP Multicast group address on this\ninterface and VLAN. The InetAddressType, e.g.\nIPv4 or IPv6, is identified by the\nagentSwitchSnoopSSMGroupAddressType variable in the agentSwitchSnoopSSMGroup\ntable.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMGroupSourceFilterMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.34.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"include\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"exclude\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state in which the interface is currently set. The\nvalue indicates the relevance of the corresponding source\nlist entries in the SrcList Table (agentSwitchSnoopSSMSrcListTable).\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMSrcListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the Source List entries\ncorresponding to each VLAN, interface and SSM multicast group pair on\na MGMD Snooping switch.\"\"\",\n        }, # table\n        \"agentSwitchSnoopSSMSrcListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchSnoopSSMSrcListAddressType\",\n                \"agentSwitchSnoopSSMSrcListIfIndex\",\n                \"agentSwitchSnoopSSMSrcListVlanId\",\n                \"agentSwitchSnoopSSMSrcListHostAddress\",\n                \"agentSwitchSnoopSSMSrcListAddress\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the agentSwitchSnoopSSMSrcListTable.\"\"\",\n        }, # row\n        \"agentSwitchSnoopSSMSrcListAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of the InetAddress variables in this\ntable. This value applies to the agentSwitchSnoopSSMSrcListHostAddress\nand agentSwitchSnoopSSMSrcListAddress entries.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMSrcListAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP multicast group address for which this entry\ncontains information.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMSrcListIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The interface for which this entry contains information\nfor an IP multicast group address.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMSrcListVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN for which this entry contains information\nfor an IP multicast group address.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMSrcListHostAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.35.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"INET-ADDRESS-MIB\",\n                        \"type\" : \"InetAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The host address to which this entry\ncorresponds. The agentSwitchSnoopSSMGroupSourceFilterMode value for\nthis Group address, interface and VLAN indicates whether this\nHost address is included or excluded.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MGMD Snooping Source Specific Multicast\nForwarding database Table.\"\"\",\n        }, # table\n        \"agentSwitchSnoopSSMFDBEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentSwitchSnoopSSMFDBGroupAddressType\",\n                \"agentSwitchSnoopSSMFDBGroupAddress\",\n                \"agentSwitchSnoopSSMFDBSourceAddress\",\n                \"agentSwitchSnoopSSMFDBVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry is created by IGMP Snooping for each group learned in the VLAN.\"\"\",\n        }, # row\n        \"agentSwitchSnoopSSMFDBVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates the VLAN in which the group is learned.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBGroupAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates IP multicast address type learned by MGMD Snooping.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBGroupAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates IP multicast address learned by MGMD Snooping.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBSourceAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object indicates IP Source address learned by MGMD Snooping.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBIncludePortList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the set of ports on which MGMD\nMembership Reports are received for the group indicating\ninterest to receive traffic sent to the group.\"\"\",\n        }, # column\n        \"agentSwitchSnoopSSMFDBExcludePortList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.36.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the set of ports on which MGMD\nMembership Reports are received for the group indicating\ninterest to not to receive traffic sent to the group.\"\"\",\n        }, # column\n        \"agentSwitchKeepaliveGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.43\",\n        }, # node\n        \"agentSwitchKeepaliveState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.43.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The keepalive state for the switch.\n\nenable  (1) - enables keepalive on the switch.\ndisable (2) - disables keepalive on the switch.\n\nThe default switch keepalive state is disabled.\"\"\",\n        }, # scalar\n        \"agentSwitchKeepaliveTransmitInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.8.43.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The keepalive state for the port.\n\nenable  (1) - enables loop protect on the switch.\ndisable (2) - disables loop protect on the switch.\"\"\",\n        }, # scalar\n        \"agentTransferConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9\",\n        }, # node\n        \"agentTransferUploadGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1\",\n        }, # node\n        \"agentTransferUploadMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"xmodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ymodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"zmodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"scp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"usb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload mode configures the mode to use when uploading from the\nswitch. The mode is either X/Y/ZMODEM, TFTP, SFTP, FTP or SCP. X/Y/ZMODEM is\nvalid only when the file transfer is initiated by the serial EIA 232 port.\non the Linux platform.\nSFTP and SCP are only allowed if the SSH feature is present.\nUpload to USB is actual only if the USB feature is present.\"\"\",\n        }, # scalar\n        \"agentTransferUploadServerIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload server ip configures the IP address of the server\nwhere the file is located. It is valid only when the Transfer Mode is\nTFTP, SFTP, or SCP. The address is 4 integer bytes ranging from 0 to 255.\n\nThis object is deprecated in favour of agentTransferUploadServerAddress\nand agentTransferUploadServerAddressType.\"\"\",\n        }, # scalar\n        \"agentTransferUploadPath\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload tftppath configures the directory path where the file\nis to be uploaded to. The switch remembers the last file path used.\"\"\",\n        }, # scalar\n        \"agentTransferUploadFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload tftpfilename configures the file name for the file being\nuploaded from the switch. It can be up to 32 alphanumeric characters.\nThe switch remembers the last file name used.\nFile path can be appended to the file name if the string is less than 17\ncharacters. Otherwise, the File Path field will need to be used and the\nFile Name will be appended to the File Path as is. An example would be\nFile Path set to c:\\\\tftp\\\\code\\\\ and File Name set to e1r1v1.opr.\nNote: File Name, File Path, and TFTP Server IP Address are applicable\nonly if the Transfer Mode is TFTP.\"\"\",\n        }, # scalar\n        \"agentTransferUploadDataType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"code\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"config-script\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"operationallog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"startuplog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload datatype configures the type of file to upload from the\nswitch.\nThe types for upload are:\n   -       Code File\n   -       Configuration File\n   -       Operational log\n   -       Startup log\"\"\",\n        }, # scalar\n        \"agentTransferUploadStart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload start will start an upload transfer.\nThe agentTransferUploadMode object must not be set to xmodem(2),\n    ymodem(3), or zmodem(4) to initiate a transfer via SNMP.\"\"\",\n        }, # scalar\n        \"agentTransferUploadStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInitiated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"transferStarting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"errorStarting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wrongFileType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"updatingConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"invalidConfigFile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"writingToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"failureWritingToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"checkingCRC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"failedCRC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"unknownDirection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"transferSuccessful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"transferFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current status of an upload transfer.\"\"\",\n        }, # scalar\n        \"agentTransferUploadServerAddressType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of the tftpserverip address, as defined in the InetAddress MIB.\n\nThe agentTransferUploadServerAddress object is intepreted within the\ncontext of agentTransferUploadServerAddressType. Only ipv4(1) and\nipv6(2) is supported at present.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3291\"\"\",\n        }, # scalar\n        \"agentTransferUploadServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload tftpserverip configures the IP address of the server\nwhere the file is to be uploaded to.It is valid only when the\nTransfer Mode is TFTP, SFTP, FTP or SCP.\nThe type of this address is determined by the value of the\nagentTransferUploadServerAddressType object.\nThe values for agentTransferUploadServerAddressType and\nagentTransferUploadServerAddress must be consistent.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3291\"\"\",\n        }, # scalar\n        \"agentTransferUploadImagename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload image name. Sets the image to be uploaded as the specified\nname. Imagename cannot be set to unknown(1) option. When no name is set\nthis object returns unknown(1) by default.\nNote: Imagename, File Name, File Path, and Server IP Address are applicable\nonly if the Transfer Mode is TFTP, SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferUploadUsername\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Username applicable only to secure upload types, i.e., SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferUploadPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Password applicable only to secure upload types, i.e. SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferUploadRemoteFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer upload remote filename configures the file name for the file being\ncreated remotely. It can be up to 32 alphanumeric characters.\nNote: File Name, File Path, and Server IP Address are applicable\nonly if the Transfer Mode is TFTP, SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2\",\n        }, # node\n        \"agentTransferDownloadMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"xmodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ymodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"zmodem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"scp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"usb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download mode configures the mode to use when downloading\nto the switch. The mode is either X/Y/ZMODEM, TFTP, SFTP, FTP or SCP. X/Y/ZMODEM is valid only\nwhen the file transfer is initiated by the serial EIA 232 port. Y/ZMODEM is\nvalid only on the Linux platform.\nSFTP and SCP are only allowed if the SSH feature is present.\nDownload to USB is only allowed if the USB feature is present.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadServerIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download tftpserverip configures the IP address of the server\nwhere the file is located. It is valid only when the Transfer Mode is TFTP, SFTP or\nSCP.\nThe address is 4 integer bytes ranging from 0 to 255.\n\nThis object is deprecated in favour of agentTransferDownloadServerAddress\nand agentTransferDownloadServerAddressType.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadPath\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download tftppath configures the directory path where the\nfile is located. The switch remembers the last file path used.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download tftpfilename configures the file name for the file\nbeing downloaded to the switch. It can be up to 32 alphanumeric characters.\nThe switch remembers the last file name used.\nFile path can be appended to the file name if the string is less than 33\ncharacters. Otherwise, the File Path field will need to be used and the\nFile Name will be appended to the File Path as is. An example would be\nFile Path set to c:\\\\tftp\\\\code\\\\ and File Name set to e1r1v1.opr.\nNote: Imagename, File Name, File Path, and TFTP Server IP Address are applicable\nonly if the Transfer Mode is TFTP, SFTP, FTP or SCP and the object agentTransferDownloadDataType\ndownload type is not set to code.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadDataType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"code\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"config-script\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sshkey-rsa1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sshkey-rsa2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"sshkey-dsa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sslpem-root\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"sslpem-server\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"sslpem-dhweak\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"sslpem-dhstrong\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ias-users\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"ca-root-certificate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"client-ssl-certificate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"client-key-certificate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download datatype configures the type of file to download to\nthe switch.\nThe types for download are:\n\ncode               - Code File\nconfig-script      - Configuration File\nsshkey-rsa1        - SSH-1 RSA Key File\nsshkey-rsa2        - SSH-2 RSA Key PEM File\nsshkey-dsa         - SSH-2 DSA Key PEM File\nsslpem-root        - SSL Trusted Root Certificate PEM File\nsslpem-server      - SSL Server Certificate PEM File\nsslpem-dhweak      - SSL DH Weak Encryption Parameter PEM File\nsslpem-dhstrong    - SSL DH Strong Encryption Parameter PEM File\nias-users          - IAS user file\n\nNote: SSH Key files can only be downloaded if SSH Server is administratively\ndisabled, and there are no active SSH sessions.\nKernel file can be downloaded only on raptor platform and linux operating system.\nca-root-certificate    - SSL CA Trusted root certificate\nclient-ssl-certificate - SSL Client PEM certificate file\nclient-key-certificate - SSL Client Key File\"\"\",\n        }, # scalar\n        \"agentTransferDownloadStart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download start will start an download transfer.\nThe agentTransferDownloadMode object must not be set to xmodem(2),\n    ymodem(3), or zmodem(4) to initiate a transfer via SNMP.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInitiated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"transferStarting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"errorStarting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wrongFileType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"updatingConfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"invalidConfigFile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"writingToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"failureWritingToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"checkingCRC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"failedCRC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"unknownDirection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"transferSuccessful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"transferFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current status of an download transfer.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadServerAddressType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of the tftpserverip address, as defined in the InetAddress MIB.\n\nThe agentTransferDownloadServerAddress object is intepreted within the\ncontext of agentTransferDownloadServerAddressType. Only ipv4(1) and\nipv6(2) is supported at present.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3291\"\"\",\n        }, # scalar\n        \"agentTransferDownloadServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download tftpserverip configures the IP address of the server\nwhere the file is to be downloaded from.It is valid only when the\nTransfer Mode is TFTP, SFTP, FTP or SCP.\nThe type of this address is determined by the value of the\nagentTransferDownloadServerAddressType object.\nThe values for agentTransferDownloadServerAddressType and\nagentTransferDownloadServerAddress must be consistent.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3291\"\"\",\n        }, # scalar\n        \"agentTransferDownloadImagename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download image name. Sets the downloaded image as the specified\nname. Imagename cannot be set to unknown(1) option. When no name is set\nthis object returns unknown(1) by default.\nNote: Imagename, File Name, File Path, and Server IP Address are applicable\nonly if the Transfer Mode is TFTP, SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadUsername\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Username applicable only to secure download types, i.e., SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Password applicable only to secure download types, i.e. SFTP, FTP or SCP.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadRemoteFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Transfer download remote filename configures the file name for the file being\ntransferred from remote system. It can be up to 31 alphanumeric characters.\"\"\",\n        }, # scalar\n        \"agentTransferDownloadCertificateNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To assign the certificate number index for downloading SSL certificates\"\"\",\n        }, # scalar\n        \"agentImageConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3\",\n        }, # node\n        \"agentImage1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The image1 software version .\"\"\",\n        }, # scalar\n        \"agentImage2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The image2 software version.\"\"\",\n        }, # scalar\n        \"agentActiveImage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The active image name. image1 or image2.\"\"\",\n        }, # scalar\n        \"agentNextActiveImage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The next active image name.\nuser assigns either image1 or image2. \"\"\",\n        }, # scalar\n        \"agentActiveImageVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The software version of the active image.\"\"\",\n        }, # scalar\n        \"agentBackupImageVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The software version of the backup image if present.\"\"\",\n        }, # scalar\n        \"agentNextSelectedImage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.9.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The image selected for loading on next boot.\"\"\",\n        }, # scalar\n        \"agentPortMirroringGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10\",\n        }, # node\n        \"agentMirroredPortIfIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"IfIndex of the mirrored port\"\"\",\n        }, # scalar\n        \"agentProbePortIfIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"IfIndex of the probe port\"\"\",\n        }, # scalar\n        \"agentPortMirroringMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"Port mirroring mode:\n\nenable - enable mirroring mode\ndisable - disable mirroring mode\ndelete - clear MirroredPort and Probe Port configuration\"\"\",\n        }, # scalar\n        \"agentPortMirrorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table includes entries for each Port Mirroring session.\"\"\",\n        }, # table\n        \"agentPortMirrorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPortMirrorSessionNum\",\n            ],\n            \"description\" :\n                \"\"\"Provides configuration of a Port Mirroring session specifying the\ndestination port, and the source Port Mask, providing a many-to-one\nmapping.\"\"\",\n        }, # row\n        \"agentPortMirrorSessionNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Session number of this mirroring entry.  The number of sessions is\nfixed, and is platform dependant.\"\"\",\n        }, # column\n        \"agentPortMirrorDestinationPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port which traffic from the mirrored ports will be sent to.\"\"\",\n        }, # column\n        \"agentPortMirrorSourcePortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The ports from which traffic will be sent to the destination port.\nThe destination port can not be included in this list of ports.\"\"\",\n        }, # column\n        \"agentPortMirrorAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this port mirroring session.\n\nenable(1)  - This session is active and all traffic from the source ports\n             will be mirrored to the destination port.\ndisable(2) - This session is not active.\ndelete(3)  - Remove the configuration for this Session\"\"\",\n        }, # column\n        \"agentPortMirrorSourceVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The vlan from which traffic will be sent to the destination port.\"\"\",\n        }, # column\n        \"agentPortMirrorRemoteSourceVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The remote vlan from which traffic will be sent to the destination port.\"\"\",\n        }, # column\n        \"agentPortMirrorRemoteDestinationVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN that forwards the network traffic to the destination switch.\"\"\",\n        }, # column\n        \"agentPortMirrorReflectorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port to which traffic from the mirrored ports will be sent in case of destination being remote VLAN.\"\"\",\n        }, # column\n        \"agentPortMirrorIpAccessListNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP access-list number attached to the port mirroring session.\"\"\",\n        }, # column\n        \"agentPortMirrorMacAccessListNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MAC access-list number attached to the port mirroring session.\"\"\",\n        }, # column\n        \"agentPortMirrorTypeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table includes entries for each source port's direction of port mirroring.\"\"\",\n        }, # table\n        \"agentPortMirrorTypeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPortMirrorSessionNum\",\n                \"agentPortMirrorTypeSourcePort\",\n            ],\n            \"description\" :\n                \"\"\"Provides configuration of a Port Mirroring direction specifying the\nsession of the port mirroring and source port\"\"\",\n        }, # row\n        \"agentPortMirrorTypeSourcePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The port from which traffic will be sent to the destination port.\nThis port should be a source port in the corresponding session\"\"\",\n        }, # column\n        \"agentPortMirrorTypeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"txrx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"txrx\",\n            \"description\" :\n                \"\"\"The direction of the data to be mirrored on this source port.\n\ntx(1)  - The data that is transmitted from the source port.\nrx(2) - The data that is received on the source port.\ntxrx(3)  - The data that is transmitted/received from/on the source port\"\"\",\n        }, # column\n        \"agentPortMirrorRemoteVlan\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN configured as RSPAN VLAN.\"\"\",\n        }, # scalar\n        \"agentPortMirrorRemoteVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the RSPAN VLAN config entries\"\"\",\n        }, # table\n        \"agentPortMirrorRemoteVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPortMirrorRemoteVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"RSPAN VLAN config entry\"\"\",\n        }, # row\n        \"agentPortMirrorRemoteVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN which is configured as a remote-span VLAN.\"\"\",\n        }, # column\n        \"agentPortMirrorRemoteVlanRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.10.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\n\nactive(1)        - the VLAN is configured as a remote-span VLAN\ncreateAndGo(4)   - add the VLAN as a remote-span VLAN\ndestroy(6)       - remove the VLAN from the list of Remote-span VLAN.\n                 RSPAN VLAN cannot be removed or changed while it is used with a Monitor session.\"\"\",\n        }, # column\n        \"agentDot3adAggPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table provides 802.3ad link aggregation information for each\nphysical port that is not available through the standard MIB.\"\"\",\n        }, # table\n        \"agentDot3adAggPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDot3adAggPort\",\n            ],\n            \"description\" :\n                \"\"\"Information about a table entry.  The agentDot3adAggPort identifies\nthe external interface number of the port.\"\"\",\n        }, # row\n        \"agentDot3adAggPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ifIndex of this physical port\"\"\",\n        }, # column\n        \"agentDot3adAggPortLACPMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable 802.3ad LACP on this port\"\"\",\n        }, # column\n        \"agentPortConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the switch's physical port config entries\"\"\",\n        }, # table\n        \"agentPortConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPortDot1dBasePort\",\n            ],\n            \"description\" :\n                \"\"\"Switch's physical port config entry\"\"\",\n        }, # row\n        \"agentPortDot1dBasePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of this port.\"\"\",\n        }, # column\n        \"agentPortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Port IfIndex\"\"\",\n        }, # column\n        \"agentPortIanaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANAifType-MIB\", \"name\" : \"IANAifType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Port Type\"\"\",\n        }, # column\n        \"agentPortSTPMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot1d\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's Port Spanning Tree Protocol Mode\nSTP mode values are:\n\ndot1d (the default)\nfast, indicates you want to use the fast spanning tree mode\noff, indicates the STP mode is turned off for a particular port\nThis object is only supported when the Dot1d Protocol is enabled.\"\"\",\n        }, # column\n        \"agentPortSTPState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"blocking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"listening\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"learning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Port Spanning Tree Protocol State.\nThis object is only supported when the Dot1d Protocol is enabled.\"\"\",\n        }, # column\n        \"agentPortAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's Port Admin Mode\"\"\",\n        }, # column\n        \"agentPortPhysicalMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.7\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto-negotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"half-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"full-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"half-100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"full-100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"half-100fx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"full-100fx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"full-1000sx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"full-10gsx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's Port Speed Mode.  This is the configured physical mode.\nThis object is read-only for gigabit ports\"\"\",\n        }, # column\n        \"agentPortPhysicalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.8\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto-negotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"half-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"full-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"half-100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"full-100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"half-100fx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"full-100fx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"full-1000sx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"full-10gsx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch's Port Physical Speed Status.  This is the current actual speed.\"\"\",\n        }, # column\n        \"agentPortLinkTrapMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, link up and link down traps will be sent for this port.\"\"\",\n        }, # column\n        \"agentPortClearStats\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear stats for this port only\"\"\",\n        }, # column\n        \"agentPortDefaultType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.11\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object identifies the default administrative port type,\nto be used in conjunction with the operational port type\ndenoted by agentPortType.\n\nThe set of possible values for this object is\nthe same as the set defined for the agentPortType\nobject.\n\nThis object represents the administratively-configured type of\nthe MAU.  If auto-negotiation is not enabled or is not\nimplemented for this MAU, the value of this object determines\nthe operational type of the MAU.  In this case, a set to this\nobject will force the MAU into the specified operating mode.\n\nIf auto-negotiation is implemented and enabled for this MAU,\nthe operational type of the MAU is determined by auto-negotiation,\nand the value of this object denotes the type to which the MAU\nwill automatically revert if/when auto-negotiation is later disabled.\n\nThe valid values for this object are:\n\n     dot3MauType10BaseTHD\n     dot3MauType10BaseTFD\n     dot3MauType100BaseTXHD\n     dot3MauType100BaseTXFD\n     dot3MauType100BaseFXFD\n     dot3MauType10GBaseSX\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2668\"\"\",\n        }, # column\n        \"agentPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the port type.  An initial set of MAU types\nare defined in RFC 2668.  The assignment of OBJECT IDENTIFIERs to\nnew types of MAUs is managed by the IANA.  If the MAU type is\nunknown, the object identifier\n\n   unknownMauType OBJECT IDENTIFIER ::= { 0 0 }\n\nis returned.  Note that unknownMauType is a syntactically valid\nobject identifier, and any conformant implementation of ASN.1 and\nthe BER must be able to generate and recognize this value.\n\nThis object represents the operational type of the MAU, as determined\nby either (1) the result of the auto-negotiation function or (2) if\nauto-negotiation is not enabled or is not implemented for this MAU,\nby the value of the object agentPortDefaultType, or (3) for the GigE card\na value determined by the GBIC connected to the card.  In case (2), a\nset to the object agentPortDefaultType will force the MAU into the\nnew operating mode.\n\nThe valid values for this object are:\n\n     dot3MauType10BaseTHD\n     dot3MauType10BaseTFD\n     dot3MauType100BaseTXHD\n     dot3MauType100BaseTXFD\n     dot3MauType100BaseFXFD\n     dot3MauType1000BaseSXFD\n     dot3MauType10GBaseSX\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2668\"\"\",\n        }, # column\n        \"agentPortAutoNegAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.13\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object identifies the administration status of auto negotiation\nfor this port.\"\"\",\n        }, # column\n        \"agentPortDot3FlowControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"asymmetric\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Config flowcontrol allows you to enable or disable\n802.3x flow control for this port. This value\napplies to only full-duplex mode ports. Enabling\nasymmetric flow control allows the port to receive\npause frames but it will not transmit pause frames.\"\"\",\n        }, # column\n        \"agentPortDVlanTagMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Controls the Double Vlan Tag mode on this port.\"\"\",\n        }, # column\n        \"agentPortDVlanTagEthertype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the Double Vlan Tag Ethertype for this port.\nIf this object is supported, ethertype cannot be configured\nglobally for the switch.\n\nCommonly used are the Ethertypes for vman tags (34984, or 0x88A8)\nand dot1q tags (33024, or 0x8100).\"\"\",\n        }, # column\n        \"agentPortDVlanTagCustomerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the Customer ID for the Double Vlan Tag for this port.\"\"\",\n        }, # column\n        \"agentPortMaxFrameSizeLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the largest value that can be\nconfigured for agentPortMaxFrameSize\"\"\",\n        }, # column\n        \"agentPortMaxFrameSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object identifies the currently configured maximum frame size\nvalue for this port. The maximmum value that this object can be set\nto is the value of agentPortMaxFrameSizeLimit.  For Ethernet ports\nwhich support 802.1Q vlan tagging, the minimum value that this object\ncan be set to is 1522\"\"\",\n        }, # column\n        \"agentPortBroadcastControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, broadcast storm recovery will function on this port.\nWhen you specify Enable for Broadcast Storm Recovery and the broadcast\ntraffic on this Ethernet port exceeds the configured threshold, the\nswitch blocks (discards) the broadcast traffic.\"\"\",\n        }, # column\n        \"agentPortBroadcastControlThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the broadcast storm recovery threshold for this port.\"\"\",\n        }, # column\n        \"agentPortMulticastControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, multicast storm recovery will function on this port.\nWhen you specify Enable for Multicast Storm Recovery and the multicast\ntraffic on this Ethernet port exceeds the configured threshold, the\nswitch blocks (discards) the multicast traffic.\"\"\",\n        }, # column\n        \"agentPortMulticastControlThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the multicast storm recovery threshold for this port.\"\"\",\n        }, # column\n        \"agentPortUnicastControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, unicast storm recovery will function on this port.\nWhen you specify Enable for Unicast Storm Recovery and the unknown unicast\ntraffic on this Ethernet port exceeds the configured threshold, the\nswitch blocks (discards) the unknown unicast traffic.\"\"\",\n        }, # column\n        \"agentPortUnicastControlThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"14880000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the unicast storm recovery threshold for this port.\"\"\",\n        }, # column\n        \"agentPortSwitchportMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"access\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trunk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"general\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"agentPortVoiceVlanMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"vlanid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot1p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"untagged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN Mode.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN ID\nif the Voice Vlan Mode is Vlan ID.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    {\n                        \"min\" : \"255\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN Priority\nif the Voice Vlan Mode is dot1p.  A value of 255 indicates\nthat the priority is not configured.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanDataPriorityMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trust\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"untrust\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN Data Priority Mode.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanOperationalStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Describes the Port Voice VLAN Operational Status.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanAuthenticationMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.32\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN Authentication Mode.\nIt is enabled by default. To disable, following are the pre-requisites.\nVoice Vlan shall be enabled Globally,\nDot1x Admin Mode shall be enabled,\nDot1x port-control shall be mac-based,\nand the port is required to be in General Mode.\"\"\",\n        }, # column\n        \"agentPortDot3FlowControlOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"na\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies operational status of the flow control per port.\"\"\",\n        }, # column\n        \"agentPortTransceiverFwPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Firmware part number of 10GBASE-T transceiver.\nFor other ports, or if module is not inserted,\noctet sting will be filled with 0xFF bytes.\nSee also next field, agentPortTransceiverFwRevision.\nPN is an 8-byte field that contains ASCII characters,\nleft-aligned and padded on the right with ASCII spaces (0x20).\nA field value of all zeros indicates that PN is unspecified.\"\"\",\n        }, # column\n        \"agentPortTransceiverFwRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Firmware revision of 10GBASE-T transceiver.\nFor other ports, or if module is not inserted,\noctet sting will be filled with 0xFF bytes.\nSee also previous field, PortTransceiverFwPartNumber.\nRev is a 16-byte field that contains ASCII characters,\nleft-aligned and padded on the right with ASCII spaces (0x20).\nA field value of all zeros indicates that Rev is unspecified.\"\"\",\n        }, # column\n        \"agentPortBroadcastControlThresholdUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # column\n        \"agentPortMulticastControlThresholdUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # column\n        \"agentPortUnicastControlThresholdUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"percent\",\n            \"description\" :\n                \"\"\"Configures the units of the threshold value to percentage of\nport speed or absolute packets per second.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanUntagged\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN tagging mode.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanNoneMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN None mode.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanDSCP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN DSCP value.\"\"\",\n        }, # column\n        \"agentPortVoiceVlanAuthMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the Port Voice VLAN Authentication mode.\nDisable means authentication not required for voice devices when dot1x is enabled.\"\"\",\n        }, # column\n        \"agentPortAccessVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the VLAN ID of access switch port.\nA value of 0 indicates that  the switch port is not configured as\naccess port.\"\"\",\n        }, # column\n        \"agentPortSpeedDuplexStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"auto-duplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"half-duplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"full-duplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"speed-auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"speed-10mbit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"speed-100mbit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"speed-1gbit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"speed-10gbit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"na\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to set the speed and duplex settings for a port.\nIf auto-duplex(0) or speed-auto(3) is enabled, then auto-negotiation is\nenabled.If auto-duplex(0) is set but speed-auto(3) is not set, then the\nadmin advertisements will be limited to the speed values enabled.\nLikewise, if speed-auto(3) is set, but auto-duplex(0) is not, then the\nadvertisements will be limited to the duplex enabled.The na(8) will be\nreturned if neither a speed or duplex setting is set.\"\"\",\n        }, # column\n        \"agentPortNativeVlanID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes and Configures the VLAN ID of Trunk switch port.\nConfigures the Native VLAN Id for the port.\"\"\",\n        }, # column\n        \"agentPortDDisableAutorecoveryTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time in seconds left to port autorecovery from D-Disable state.\"\"\",\n        }, # column\n        \"agentPortDDisableComponents\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The list of components put the port to D-Disable state.\"\"\",\n        }, # column\n        \"agentPortLoadStatsInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"300\",\n            \"description\" :\n                \"\"\"The length of time for which data is used to compute load statistics.\nThe value is given in seconds, and must be a multiple of 30.  The allowable\nrange is 30 to 600 seconds.\"\"\",\n        }, # column\n        \"agentPortDDisableReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"udld\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bpduguard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bpdustorm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dhcpsnooping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"arpinspection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"broadcaststorm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"multicaststorm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"unicaststorm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"sfp-mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"sfpplus-mismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reason for which the port is set to D-Disable. Here reason is\nthe enum assigned to the particular component.\"\"\",\n        }, # column\n        \"agentPortBroadcastControlAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when broadcast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # column\n        \"agentPortMulticastControlAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when multicast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # column\n        \"agentPortUnicastControlAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"none\",\n            \"description\" :\n                \"\"\"Configures the action to be taken when unicast storm control rate limit is reached.\nnone(0) - No action is taken.\nshutdown(1) - Diag disable the interface on storm control.\ntrap(2)     - Generate trap on storm control.\"\"\",\n        }, # column\n        \"agentProtocolConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14\",\n        }, # node\n        \"agentProtocolGroupCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to non-empty string to create a Protocol-Based VLAN group.\"\"\",\n        }, # scalar\n        \"agentProtocolGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the switch's Protocol-based VLAN entries\"\"\",\n        }, # table\n        \"agentProtocolGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentProtocolGroupId\",\n            ],\n            \"description\" :\n                \"\"\"Switch's Protocol-based VLAN entry\"\"\",\n        }, # row\n        \"agentProtocolGroupId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Group identifier of the Protocol-based VLAN entry.\"\"\",\n        }, # column\n        \"agentProtocolGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group name of the Protocol-based VLAN entry.\"\"\",\n        }, # column\n        \"agentProtocolGroupVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4093\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4093\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"VLAN associated with the Protocol-based VLAN entry.  Set to 0 to remove.\"\"\",\n        }, # column\n        \"agentProtocolGroupProtocolIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the IP protocol association with the Protocol-based VLAN entry.\"\"\",\n        }, # column\n        \"agentProtocolGroupProtocolARP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the ARP protocol association with the Protocol-based VLAN entry.\"\"\",\n        }, # column\n        \"agentProtocolGroupProtocolIPX\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the IPX protocol association with the Protocol-based VLAN entry.\"\"\",\n        }, # column\n        \"agentProtocolGroupStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the Protocol-based VLAN entry.\n\nactive(1)  - this entry is active\ncreateAndGo(4) - used to create a new entry\ndestroy(6) - remove this entry\"\"\",\n        }, # column\n        \"agentProtocolGroupPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the switch's physical port config entries\"\"\",\n        }, # table\n        \"agentProtocolGroupPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentProtocolGroupId\",\n                \"agentProtocolGroupPortIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Switch's physical port config entry\"\"\",\n        }, # row\n        \"agentProtocolGroupPortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface number of this instance.\"\"\",\n        }, # column\n        \"agentProtocolGroupPortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\n\nactive(1)        - the port is associated with this group\ncreateAndGo(4)   - add the port to this group\ncreateAndWait(5) - add the port to this group\ndestroy(6)       - remove the port from this group\"\"\",\n        }, # column\n        \"agentProtocolGroupProtocolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the switch's physical port config entries\"\"\",\n        }, # table\n        \"agentProtocolGroupProtocolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentProtocolGroupId\",\n                \"agentProtocolGroupProtocolID\",\n            ],\n            \"description\" :\n                \"\"\"Switch's physical port config entry\"\"\",\n        }, # row\n        \"agentProtocolGroupProtocolID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1536\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1536\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The protocol ID of this instance. The value for IP is 2048 (0x0800), ARP is 2054 (0x0806) and IPX is 33079 (0x8137).\nOther protocol Ids in the range 1536 to 65535 can also be configured.\"\"\",\n        }, # column\n        \"agentProtocolGroupProtocolStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.14.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\n\nactive(1)        - the port is associated with this group\ncreateAndGo(4)   - add the port to this group\ncreateAndWait(5) - add the port to this group\ndestroy(6)       - remove the port from this group\"\"\",\n        }, # column\n        \"agentStpSwitchConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15\",\n        }, # node\n        \"agentStpConfigDigestKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"16\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MST configuration digest key.\"\"\",\n        }, # scalar\n        \"agentStpConfigFormatSelector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MST configuration format selector. A value other than 0 (zero)\nindicates non-support for the IEEE 802.1s standard.\"\"\",\n        }, # scalar\n        \"agentStpConfigName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MST configuration name of at most 32 characters.\"\"\",\n        }, # scalar\n        \"agentStpConfigRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The MST configuration revision. The default value is 0.\"\"\",\n        }, # scalar\n        \"agentStpForceVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"dot1d\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dot1w\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dot1s\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MST configuration force protocol version. The default version is dot1w.\"\"\",\n        }, # scalar\n        \"agentStpAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The spanning tree operational status.\n\nenable(1)  - enables spanning tree operational status on the switch.\ndisable(2) - disables spanning tree operational status on the switch.\n\nThe default status is enabled.\"\"\",\n        }, # scalar\n        \"agentStpPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"STP port table.\"\"\",\n        }, # table\n        \"agentStpPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"STP port entry.\"\"\",\n        }, # row\n        \"agentStpPortState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The administrative STP state for the port.\n\nenable(1)  - enables STP on the port.\ndisable(2) - disables STP on the port.\n\nThe default port STP state is enabled for the first 4095\nports and disabled for any ports beyond.\"\"\",\n        }, # column\n        \"agentStpPortStatsMstpBpduRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP BPDUs received on a specific port.\"\"\",\n        }, # column\n        \"agentStpPortStatsMstpBpduTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP BPDUs sent from a specific port.\"\"\",\n        }, # column\n        \"agentStpPortStatsRstpBpduRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RSTP BPDUs received on a specific port.\"\"\",\n        }, # column\n        \"agentStpPortStatsRstpBpduTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RSTP BPDUs sent from a specific port.\"\"\",\n        }, # column\n        \"agentStpPortStatsStpBpduRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The STP BPDUs received on a specific port.\"\"\",\n        }, # column\n        \"agentStpPortStatsStpBpduTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The STP BPDUs sent from a specific port.\"\"\",\n        }, # column\n        \"agentStpPortUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time since port was reset.\nIt is displayed in days, hours, minutes, and seconds.\"\"\",\n        }, # column\n        \"agentStpPortMigrationCheck\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Force the specified port to transmit RSTP or MSTP BPDU's.\n\nSupported values:\nfalse(0) - BPDUs are not to be transmitted.\ntrue(1)  - BPDUs are to be transmitted\n\nA non-zero value indicates that BPDUs are to be sent on the specified port.\"\"\",\n        }, # column\n        \"agentStpPortRootGuard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Manage root-guard on the specified interface.\n\nSupported values:\nfalse(0) - Root-guard is disabled.\ntrue(1)  - Root-guard is enabled.\"\"\",\n        }, # column\n        \"agentStpCstConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8\",\n        }, # node\n        \"agentStpCstHelloTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP root port hello time for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstMaxAge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP root port max age for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstRegionalRootId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP regional root identifier for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstRegionalRootPathCost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP regional root path cost for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstRootFwdDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP root port forward delay for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeFwdDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"15\",\n            \"description\" :\n                \"\"\"The MSTP bridge forward delay for the CIST. The default value is 15.\nThis value must be >= ((MSTP root port max age/2) + 1).\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeHelloTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"2\",\n            \"description\" :\n                \"\"\"The MSTP bridge hello time for the CIST. The default value is 2.According to IEEE 802.1Q-REV 2005 updating\nhello time is disallowed\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeHoldTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP bridge hold time for the CIST.\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeMaxAge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"20\",\n            \"description\" :\n                \"\"\"The MSTP bridge max age for the CIST. The default value is 20.\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeMaxHops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"20\",\n            \"description\" :\n                \"\"\"The MSTP bridge max hops for the CIST. The default value is 20.\"\"\",\n        }, # scalar\n        \"agentStpCstBridgePriority\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"61440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"61440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"32768\",\n            \"description\" :\n                \"\"\"The MSTP bridge priority for the CIST. The default value is 32768.\"\"\",\n        }, # scalar\n        \"agentStpCstBridgeHoldCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.8.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"6\",\n            \"description\" :\n                \"\"\"The MSTP bridge hold count for the CIST. This command sets the value of\nmaximum bpdus that a bridge is allowed to send within a hello time window.\nThe default value is 6.\"\"\",\n        }, # scalar\n        \"agentStpCstPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"CIST port table.\"\"\",\n        }, # table\n        \"agentStpCstPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"CIST port entry.\"\"\",\n        }, # row\n        \"agentStpCstPortOperEdge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP operational status of a specific port for the CIST.\"\"\",\n        }, # column\n        \"agentStpCstPortOperPointToPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP operational point to point mac of a specific port for the CIST.\"\"\",\n        }, # column\n        \"agentStpCstPortTopologyChangeAck\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP topology change acknowledge for a specific port in the CIST.\"\"\",\n        }, # column\n        \"agentStpCstPortEdge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The administrative state of a specific port in CIST.\n\nenable(1)  - enables the port.\ndisable(2) - disables the port.\n\nThe default port state is disabled. For the M6220, the default port state\nis enabled for internal ports and disabled for external ports.\"\"\",\n        }, # column\n        \"agentStpCstPortForwardingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"discarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"learning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"manualFwd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notParticipate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP forwarding state of a specific port in CIST.\"\"\",\n        }, # column\n        \"agentStpCstPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"PortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP port identifier of a specific port in CIST.\"\"\",\n        }, # column\n        \"agentStpCstPortPathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MSTP port path cost in CIST. The default value will\ncorrespond to the recommendation specified in IEEE 802.1s Table 13-2\nwhich varies depending upon link speed.\"\"\",\n        }, # column\n        \"agentStpCstPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"128\",\n            \"description\" :\n                \"\"\"The MSTP port priority in CIST. The priority is\nin the increments of 16. The default value is 128.\"\"\",\n        }, # column\n        \"agentStpCstDesignatedBridgeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated bridge ID of a specific port in CIST.\"\"\",\n        }, # column\n        \"agentStpCstDesignatedCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated cost of a specific port in CIST.\"\"\",\n        }, # column\n        \"agentStpCstDesignatedPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"PortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated port ID of a specific port in CIST.\"\"\",\n        }, # column\n        \"agentStpCstExtPortPathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MSTP external port path cost in CIST. The default value varies depending upon the link speed.\"\"\",\n        }, # column\n        \"agentStpCstPortBpduGuardEffect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BPDU Guard Mode effect on the port.\n\nenable(1)  - BPDU Guard Mode is enabled on the port.\ndisable(2) - BPDU Guard Mode is disabled on the port.\"\"\",\n        }, # column\n        \"agentStpCstPortBpduFilter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command sets BPDU Filter mode on the port.\n\nenable(1)  - BPDU Filter Mode is enabled on the port.\ndisable(2) - BPDU Filter Mode is disabled on the port.\"\"\",\n        }, # column\n        \"agentStpCstPortBpduFlood\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command sets BPDU Flood mode on the port.\n\nenable(1)  - BPDU Flood Mode is enabled on the port.\ndisable(2) - BPDU Flood Mode is disabled on the port.\"\"\",\n        }, # column\n        \"agentStpCstPortAutoEdge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command sets the auto-edge mode of the port which enables it\nto become an edge port if it does not see BPDUs for some duration.\n\nenable(1)  - enables the auto-edge mode for the port.\ndisable(2) - disables the auto-edge mode for the port.\n\nThe default auto-edge mode is disabled.\"\"\",\n        }, # column\n        \"agentStpCstPortRootGuard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command sets a port to discard any superior information\nreceived by the port and thus protect against root of the device\nfrom changing.The port gets put into discarding state and does\nnot forward any packets.\n\nenable(1)  - enables the root-guard mode for the port.\ndisable(2) - disables the root-guard mode for the port.\n\nThe default root-guard mode is disabled.\"\"\",\n        }, # column\n        \"agentStpCstPortTCNGuard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command restricts the port from propagating any topology change\ninformation received through that port.\n\nenable(1)  - enables the tcn-guard mode for the port.\ndisable(2) - disables the tcn-guard mode for the port.\n\nThe default tcn-guard mode is disabled.\"\"\",\n        }, # column\n        \"agentStpCstPortLoopGuard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.9.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This command enables loop guard on this port. This setting applies\nto all Spanning Tree instances of which this port is a member.\n\nenable(1)  - enables the loop guard mode for the port.\ndisable(2) - disables the loop guard mode for the port.\n\nThe default loop-guard mode is disabled.\"\"\",\n        }, # column\n        \"agentStpMstTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MST table.\"\"\",\n        }, # table\n        \"agentStpMstEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStpMstId\",\n            ],\n            \"description\" :\n                \"\"\"MST entry.\"\"\",\n        }, # row\n        \"agentStpMstId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP instance ID.\"\"\",\n        }, # column\n        \"agentStpMstBridgePriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"61440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"61440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MSTP bridge priority in a specific instance. The priority is\nin the increments of 4096. The recommended default value is 32768.\"\"\",\n        }, # column\n        \"agentStpMstBridgeIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP bridge identifier in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstDesignatedRootId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated root bridge identifier in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstRootPathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP root path cost in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstRootPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP root port ID in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstTimeSinceTopologyChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP time since the last topology change in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstTopologyChangeCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP count of topology changes in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstTopologyChangeParm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP topology change parameter in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.10.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MSTP instance status.\n\nSupported values:\nactive(1)      - valid instance.\ncreateAndGo(4) - used to create a new instance.\ndestroy(6)     - removes an instance.\"\"\",\n        }, # column\n        \"agentStpMstPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MST port table.\"\"\",\n        }, # table\n        \"agentStpMstPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStpMstId\",\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"MST port entry.\"\"\",\n        }, # row\n        \"agentStpMstPortForwardingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"discarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"learning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"manualFwd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notParticipate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP forwarding state of a specific port in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP port identifier of a specific port in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstPortPathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200000000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MSTP port path cost in a specific instance. The default value will\ncorrespond to the recommendation specified in IEEE 802.1s Table 13-2\nwhich varies depending upon link speed.\"\"\",\n        }, # column\n        \"agentStpMstPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"128\",\n            \"description\" :\n                \"\"\"The MSTP port priority in a specific instance. The priority is\nin the increments of 16. The default value is 128.\"\"\",\n        }, # column\n        \"agentStpMstDesignatedBridgeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated bridge ID of a specific port in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstDesignatedCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated cost of a specific port in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstDesignatedPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"PortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MSTP designated port ID of a specific port in a specific instance.\"\"\",\n        }, # column\n        \"agentStpMstPortLoopInconsistentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The loop inconsistent state of a specific port in a specific instance.\nThis value can only report as true(1) when loop guard is enabled on the port\nand the port has transitioned from blocking state in this MST instance.\"\"\",\n        }, # column\n        \"agentStpMstPortTransitionsIntoLoopInconsistentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times this interface has transitioned into loop inconsistent state.\"\"\",\n        }, # column\n        \"agentStpMstPortTransitionsOutOfLoopInconsistentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times this interface has transitioned out of loop inconsistent state.\"\"\",\n        }, # column\n        \"agentStpMstVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"MST VLAN table.\"\"\",\n        }, # table\n        \"agentStpMstVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.12.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentStpMstId\",\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"MST VLAN entry.\"\"\",\n        }, # row\n        \"agentStpMstVlanRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The association status of an MSTP instance and a VLAN.\n\nSupported values:\nactive(1)      - valid association between an MSTP instance and a VLAN.\ncreateAndGo(4) - used to create a new association between an MSTP instance and a VLAN.\ndestroy(6)     - removes the association between an MSTP instance and a VLAN.\"\"\",\n        }, # column\n        \"agentStpBpduGuardMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The spanning tree BPDU Guard Mode.\n\nenable(1)  - enables BPDU Guard Mode on the switch.\ndisable(2) - disables BPDU Guard Mode on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentStpBpduFilterDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The spanning tree BPDU Filter Mode, it enables BPDU Filter on all\nedge ports.\n\nenable(1)  - enables BPDU Filter Mode on the switch.\ndisable(2) - disables BPDU Filter Mode on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentPvrstpSwitchConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15\",\n        }, # node\n        \"agentPvstpAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The per VLAN spanning tree operational status.\n\nenable(1)  - enables PVSTP on the switch.\ndisable(2) - disables PVSTP on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentPvrstpAdminMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The per VLAN rapid spanning tree operational status.\n\nenable(1)  - enables PVRSTP on the switch.\ndisable(2) - disables PVRSTP on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentPvrstpUplinkFast\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables or disabled uplink fast feature when switch is in PVST mode.\n\nenable(1)  - enables UPLINK FAST  on the switch.\ndisable(2) - disables UPLINK FAST  on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentPvrstpBackboneFast\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables or disabled backbone fast feature when switch is in PVST mode.\n\nenable(1)  - enables BACKBONE FAST on the switch.\ndisable(2) - disables BACKBONE FAST on the switch.\n\nThe default status is disabled.\"\"\",\n        }, # scalar\n        \"agentPvrstpVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"PVRSTP table containing PVRSTP per vlan entries.\"\"\",\n        }, # table\n        \"agentPvrstpVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPvrstpVlanTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"PVRSTP vlan entry attributes.\"\"\",\n        }, # row\n        \"agentPvrstpVlanTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index to PVRSTP vlan entry in PVRSTP vlan table.\"\"\",\n        }, # column\n        \"agentPvrstpVlanRootPriSec\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"secondary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PVRSTP primary or secondary root for the VLAN instance.\"\"\",\n        }, # column\n        \"agentPvrstpVlanHelloTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PVRSTP hello time for the VLAN instance.\"\"\",\n        }, # column\n        \"agentPvrstpVlanFwdDelayTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PVRSTP forward delay for the VLAN instance.\"\"\",\n        }, # column\n        \"agentPvrstpVlanMaxAgeTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"6\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PVRSTP max age for the VLAN instance.\"\"\",\n        }, # column\n        \"agentPvrstpPortVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"PVRSTP table containing PVRSTP per port per vlan entries.\"\"\",\n        }, # table\n        \"agentPvrstpPortVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentPvrstpPortIndex\",\n                \"agentPvrstpVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"PVRSTP port entry per vlan attributes.\"\"\",\n        }, # row\n        \"agentPvrstpPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Port index to PVRSTP port entry in PVRSTP port vlan table.\"\"\",\n        }, # column\n        \"agentPvrstpVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Vlan index to PVRSTP port entry in PVRSTP port vlan table.\"\"\",\n        }, # column\n        \"agentPvrstpPortVlanPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.15.15.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"240\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PVRSTP port vlan priority is in the range of 0 to 240.\"\"\",\n        }, # column\n        \"agentAuthenticationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16\",\n        }, # node\n        \"agentAuthenticationListCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Create\nIf set to a non empty string, creates a new Authentication List for\nconfiguration.\"\"\",\n        }, # scalar\n        \"agentAuthenticationListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Authentication List table.\"\"\",\n        }, # table\n        \"agentAuthenticationListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentAuthenticationListIndex\",\n            ],\n            \"description\" :\n                \"\"\"Authentication List entry.\"\"\",\n        }, # row\n        \"agentAuthenticationListIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Authentication List Index\nUnique number used for indexing into this table.\"\"\",\n        }, # column\n        \"agentAuthenticationListName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Authentication List Name\nUnique name used to identify the Authentication List from other tables.\"\"\",\n        }, # column\n        \"agentAuthenticationListMethod1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Method 1\nConfigures the first authentication method to use when this list is\nspecified.\"\"\",\n        }, # column\n        \"agentAuthenticationListMethod2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Method 2\nConfigures the second authentication method to use when this list is\nspecified.\"\"\",\n        }, # column\n        \"agentAuthenticationListMethod3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Method 3\nConfigures the third authentication method to use when this list is\nspecified.\"\"\",\n        }, # column\n        \"agentAuthenticationListStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the Authentication List.\n\nSupported values:\nactive(1)      - indicates a valid Authenticaiton List\ndestroy(6)     - removes the Authentication List.\"\"\",\n        }, # column\n        \"agentAuthenticationListMethod4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Method 4\nConfigures the fourth authentication method to use when this list is\nspecified.\"\"\",\n        }, # column\n        \"agentAuthenticationListMethod5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"line\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ias\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication List Method 5\nConfigures the fifth authentication method to use when this list is\nspecified.\"\"\",\n        }, # column\n        \"agentUserConfigDefaultAuthenticationList\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Default Authentication List\nThis object configures which authentication list to use for users\nwhich do not have an Authentication List configured.  The list\nmust be configured before setting.\"\"\",\n        }, # scalar\n        \"agentUserAuthenticationConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"User Authentication Config Table\"\"\",\n        }, # table\n        \"agentUserAuthenticationConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"DNOS-SWITCHING-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"agentUserConfigEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"User Authentication Config Entry\"\"\",\n        }, # row\n        \"agentUserAuthenticationList\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Authentication List\nThis object configures which authentication list to use for this\nuser.  The list must be configured before setting.\"\"\",\n        }, # column\n        \"agentUserPortConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"User Port Config Table\"\"\",\n        }, # table\n        \"agentUserPortConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"DNOS-SWITCHING-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"agentUserConfigEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"User Port Config Entry\"\"\",\n        }, # row\n        \"agentUserPortSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.16.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User Port Port Security\nThis object configures which ports the user has access to.\nPorts are indexed based on dot1dBasePort entries in\ndot1dBasePortTable.\"\"\",\n        }, # column\n        \"agentClassOfServiceGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.17\",\n        }, # node\n        \"agentClassOfServicePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.17.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the 802.1p priority\nmapping to traffic class priority queue for every physical port.\"\"\",\n        }, # table\n        \"agentClassOfServicePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.17.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"agentClassOfServicePortPriority\",\n            ],\n            \"description\" :\n                \"\"\"A 802.1p priority mapped to a traffic class priority queue.\"\"\",\n        }, # row\n        \"agentClassOfServicePortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.17.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Priority value determined for the received frame.\nThis value is equivalent to the priority indicated in\nthe tagged frame received, or one of the evaluated\npriorities, determined according to the media-type.\n\nFor untagged frames received from Ethernet media, this\nvalue is equal to the dot1dPortDefaultUserPriority value\nfor the ingress port.\"\"\",\n        }, # column\n        \"agentClassOfServicePortClass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.17.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Traffic class priority queue the received frame is mapped to.\"\"\",\n        }, # column\n        \"agentLinkDependencyGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18\",\n        }, # node\n        \"agentLinkDependencyGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table for link dependencies entries.\"\"\",\n        }, # table\n        \"agentLinkDependencyGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentLinkDependencyGroupId\",\n            ],\n            \"description\" :\n                \"\"\"Link Dependency Group Entry.\"\"\",\n        }, # row\n        \"agentLinkDependencyGroupId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Group identifier of the Link Dependency entry.\nMaximum of 16 group entries exists on the switch\nbut they are not configured on the switch. Groups\nare configured only when member ports are\nadded to the group or ports dependent on member\nports are added to the group. \"\"\",\n        }, # column\n        \"agentLinkDependencyGroupStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\nactive(1)        - the group has a valid configuration\nnotReady(3)      - the group has an incomplete configuration\ndestroy(6)       - remove the group\n\ndestroy is the only RowStatus which can be set.\nThe others are read-only.\"\"\",\n        }, # column\n        \"agentLinkDependencyGroupMemberPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Member Port Mask.\n\nThis mask defines the member ports of this group.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentLinkDependencyGroupDependsOnPortMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DELL-REF-MIB\", \"name\" : \"AgentPortMask\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Depended Upon Port Mask.\n\nThis mask defines the ports upon which the members of this group depend.\n\nTo obtain port numbers from interface numbers, use the objects\nagentPortDot1dBasePort and agentPortIfIndex in the agentPortConfigTable\ntable.\"\"\",\n        }, # column\n        \"agentLinkDependencyGroupAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.18.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group action refers to action taken by the dependent ports\nwhen the member ports go down.\n    LINK-DOWN(0) members go down when dependent link goes down,\n    LINK-UP(1)   members go up when dependent link goes down\"\"\",\n        }, # column\n        \"agentOperationalModeGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.20\",\n        }, # node\n        \"agentOperationalModeSimple\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.20.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the Operational mode for the switch: Simple/Normal.\"\"\",\n        }, # scalar\n        \"agentHTTPConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.21\",\n        }, # node\n        \"agentHTTPWebMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.21.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the HTTP server admin mode\"\"\",\n        }, # scalar\n        \"agentHTTPJavaMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.21.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the use of the Java interface through Web connections.\"\"\",\n        }, # scalar\n        \"agentAutoInstallConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22\",\n        }, # node\n        \"agentAutoinstallMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Autoinstall persistent mode on device.\"\"\",\n        }, # scalar\n        \"agentAutoinstallAutosaveMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Auto Save of downloaded configuration on device.\"\"\",\n        }, # scalar\n        \"agentAutoinstallUnicastRetryCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sets number of unicast TFTP attempts for configuration file.\"\"\",\n        }, # scalar\n        \"agentAutoinstallStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Display current Autoinstall status on device.\"\"\",\n        }, # scalar\n        \"agentAutoinstallAutoRebootMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Auto Reboot after succesfull image update on device.\"\"\",\n        }, # scalar\n        \"agentAutoinstallOperationalMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.22.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Autoinstall operational mode on device.\"\"\",\n        }, # scalar\n        \"agentVlanSwitchportTrunkModeGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.23\",\n        }, # node\n        \"agentVlanSwitchportTrunkModeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.23.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing static configuration information for\neach VLAN configured for Switcgport Trunk mode.\"\"\",\n        }, # table\n        \"agentVlanSwitchportTrunkModeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.23.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\" SwitchPort Trunk Mode Membership.\"\"\",\n        }, # row\n        \"agentVlanSwitchportTrunkStaticEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.23.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"ProtectedPortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This field contains all the ports which include the VLAN for Trunk mode.\"\"\",\n        }, # column\n        \"agentVlanSwitchportTrunkForbiddenPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.23.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"DNOS-SWITCHING-MIB\", \"name\" : \"ProtectedPortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This field contains all the ports which include the VLAN for Trunk mode.\"\"\",\n        }, # column\n        \"agentDDisableAutorecoveryConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.24\",\n        }, # node\n        \"agentDDisableAutorecoveryStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.24.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Autorecovery from D-Disable state on device.\"\"\",\n        }, # scalar\n        \"agentDDisableAutorecoveryTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.24.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"30\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"30\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Timeout to autorecovery from D-Disable port state.\"\"\",\n        }, # scalar\n        \"agentExecAccountingGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25\",\n        }, # node\n        \"agentExecAccountingListCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ExecAccounting List Create\nif set to a non empty string, creates a new ExecAccounting List for\nconfiguration.\"\"\",\n        }, # scalar\n        \"agentExecAccountingListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"ExecAccounting Method List table.\"\"\",\n        }, # table\n        \"agentExecAccountingListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentExecAccountingListIndex\",\n            ],\n            \"description\" :\n                \"\"\"ExecAccounting Method List Entry.\"\"\",\n        }, # row\n        \"agentExecAccountingListIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"ExecAccounting List Index\nUnique number used for indexing into this table.\"\"\",\n        }, # column\n        \"agentExecAccountingListName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"                     Unique name used to identify the ExecAccounting List from other tables.\"\"\",\n        }, # column\n        \"agentExecAccountingMethodType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"start-stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stop-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ExecAccounting Method Type\nConfigures the method type to use when this ExecAccounting list is\nspecified.\"\"\",\n        }, # column\n        \"agentExecAccountingListMethod1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ExecAccounting List Method 1\nConfigures the authentication method to use when this list is specified.\"\"\",\n        }, # column\n        \"agentExecAccountingListMethod2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ExecAccounting List Method 2\nConfigures the authentication method to use when this list is specified.\"\"\",\n        }, # column\n        \"agentExecAccountingListStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.25.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the ExecAccounting List.\n\nSupported values:\nactive(1)      - indicates a valid ExecAccounting List\ndestroy(6)     - removes the ExecAccounting List.\"\"\",\n        }, # column\n        \"agentCmdsAccountingGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26\",\n        }, # node\n        \"agentCmdsAccountingListCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CmdsAccounting List Create\nif set to a non empty string, creates a new CmdsAccounting List for\nconfiguration.\"\"\",\n        }, # scalar\n        \"agentCmdsAccountingListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"CmdsAccounting Method List table.\"\"\",\n        }, # table\n        \"agentCmdsAccountingListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentCmdsAccountingListIndex\",\n            ],\n            \"description\" :\n                \"\"\"CmdsAccounting Method List Entry.\"\"\",\n        }, # row\n        \"agentCmdsAccountingListIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"CmdsAccounting List Index\nUnique number used for indexing into this table.\"\"\",\n        }, # column\n        \"agentCmdsAccountingListName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"                     Unique name used to identify the CmdsAccounting List from other tables.\"\"\",\n        }, # column\n        \"agentCmdsAccountingMethodType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"start-stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stop-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CmdsAccounting Method Type\nConfigures the method type to use when this CmdsAccounting list is\nspecified.\"\"\",\n        }, # column\n        \"agentCmdsAccountingListMethod1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CmdsAccounting List Method 1\nConfigures the authentication method to use when this list is specified.\"\"\",\n        }, # column\n        \"agentCmdsAccountingListStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.26.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the CmdsAccounting List.\n\nSupported values:\nactive(1)      - indicates a valid CmdsAccounting List\ndestroy(6)     - removes the CmdsAccounting List.\"\"\",\n        }, # column\n        \"agentCmdsAuthorizationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27\",\n        }, # node\n        \"agentCmdsAuthorizationListCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command Authorization List Create.\nIf set to a non empty string, creates a new\nCommand Authorization List for configuration.\nList name must contain Alphanumeric characters including\n'-', '_', ' '.\"\"\",\n        }, # scalar\n        \"agentCmdsAuthorizationListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Command Authorization Method List table.\"\"\",\n        }, # table\n        \"agentCmdsAuthorizationListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentCmdsAuthorizationListIndex\",\n            ],\n            \"description\" :\n                \"\"\"Command Authorization Method List Entry.\"\"\",\n        }, # row\n        \"agentCmdsAuthorizationListIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Command Authorization List Index\nUnique number used for indexing into this table.\"\"\",\n        }, # column\n        \"agentCmdsAuthorizationListName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Command Authorization List Name\nUnique name used to identify the Command Authorization\nList from other tables.\"\"\",\n        }, # column\n        \"agentCmdsAuthorizationListStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the CmdsAuthorization List.\n\nSupported values:\nactive(1)      - indicates a valid CmdsAuthorization List\ndestroy(6)     - removes the CmdsAuthorization List.\"\"\",\n        }, # column\n        \"agentCmdsAuthorizationListMethod1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command Authorization List Method1\nConfigures the Command Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentCmdsAuthorizationListMethod2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.27.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command Authorization List Method2\nConfigures the Command Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentExecAuthorizationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28\",\n        }, # node\n        \"agentExecAuthorizationListCreate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec Authorization List Create.\nIf set to a non empty string, creates a new\nExec Authorization List for configuration.\nList name must contain Alphanumeric characters including\n'-', '_', ' '.\"\"\",\n        }, # scalar\n        \"agentExecAuthorizationListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Exec Authorization Method List table.\"\"\",\n        }, # table\n        \"agentExecAuthorizationListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentExecAuthorizationListIndex\",\n            ],\n            \"description\" :\n                \"\"\"Exec Authorization Method List Entry.\"\"\",\n        }, # row\n        \"agentExecAuthorizationListIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Exec Authorization List Index\nUnique number used for indexing into this table.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Exec Authorization List Name\nUnique name used to identify the Exec Authorization\nList from other tables.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the ExecAuthorization List.\n\nSupported values:\nactive(1)      - indicates a valid ExecAuthorization List\ndestroy(6)     - removes the ExecAuthorization List.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListMethod1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec Authorization List Method1\nConfigures the Exec Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListMethod2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec Authorization List Method2\nConfigures the Exec Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListMethod3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec Authorization List Method3\nConfigures the Exec Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentExecAuthorizationListMethod4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.28.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tacacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"radius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec Authorization List Method4\nConfigures the Exec Authorization method to use when\nthis list is specified.\"\"\",\n        }, # column\n        \"agentSwitchMbufConfigGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.29\",\n        }, # node\n        \"agentSwitchMbufRisingThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.29.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Mbuf utilization rising threshold in percentage.\nA single notification (rising event) is generated when\nthe total Mbuf utilization exceeds this threshold.\n\nAfter a rising event is generated, another such event\nwill not be generated until the total Mbuf utilization\nfalls below the agentSwitchMbufFallingThreshold and then\nexceeds the agentSwitchMbufRisingThreshold.\"\"\",\n        }, # scalar\n        \"agentSwitchMbufFallingThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.29.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Mbuf utilization falling threshold in percentage. \nA single notification (falling event) is generated when \nthe total Mbuf utilization falls below this threshold.\n\nAfter a falling event is generated, another such event\nwill not be generated until the total Mbuf utilization\nexceeds the agentSwitchMbufRisingThreshold and then falls\nbelow the agentSwitchMbufFallingThreshold.\"\"\",\n        }, # scalar\n        \"agentSwitchMbufNotificationSeverity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.29.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Severity level while notification is generated for rising\nand falling threshold.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30\",\n        }, # node\n        \"agentDynamicAuthorizationMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures the Dynamic Authorization mode which must be \nenabled to support CoA functionality.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationServerKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures a global shared secret that is used for all\ndynamic authorization clients that do not have an \nindividual shared secret key configured.\nIf agentDynamicAuthorizationEncryptServerKey is\nset to true, then the length of this string has to be \nexactly 256 else it can be 1-128.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationEncryptServerKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the global shared secret configured\nis to be encrypted or not. Set this in conjnction with \nagentDynamicAuthorizationServerKey.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationPortNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1025\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1025\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"3799\",\n            \"description\" :\n                \"\"\"Configures UDP port on which a device listens for \nRADIUS requests from configured RADIUS clients.\nThe default port number is 3799.\nThe supported range for the port-number is 1025 to 65535.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"any\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"all\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"session-key\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"all\",\n            \"description\" :\n                \"\"\"Configures the type of authorization that the device\nmust use for RADIUS clients. The client must match \nthe configured attributes for authorization.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationIgnoreSessionKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the session-key is to be ignored or not.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationIgnoreServerKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the server-key is to be ignored or not.\"\"\",\n        }, # scalar\n        \"agentDynamicAuthorizationClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the Dynamic Authorization Client entries\"\"\",\n        }, # table\n        \"agentDynamicAuthorizationClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"agentDynamicAuthorizationClientAddress\",\n            ],\n            \"description\" :\n                \"\"\"Represents entry for a set of Dynamic Authorization Clients\"\"\",\n        }, # row\n        \"agentDynamicAuthorizationClientAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Configures a Dynamic Authorization Client IP Address or Hostname.\"\"\",\n        }, # column\n        \"agentDynamicAuthorizationClientServerKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures a Dynamic Authorization Client Server Key.\nIf agentDynamicAuthorizationClientEncryptServerKey is\nset to true, then the length of this string has to be \nexactly 256 else it can be 1-128.\"\"\",\n        }, # column\n        \"agentDynamicAuthorizationClientEncryptServerKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies whether the client server-key configured\nis to be encrypted or not.Set this in conjunction with\nagentDynamicAuthorizationClientServerKey.\"\"\",\n        }, # column\n        \"agentDynamicAuthorizationClientRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nactive(1)      - this client is active\ncreateAndGo(4) - set to this value to create an instance\ndestroy(6)     - set to this value to delete an instance\"\"\",\n        }, # column\n        \"agentDynamicAuthorizationStatsClear\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.30.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"disable\",\n            \"description\" :\n                \"\"\"When set to enable(1), all dynamic authorization statistics will be reset.\"\"\",\n        }, # scalar\n        \"agentKeepalivePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Keepalive port table.\"\"\",\n        }, # table\n        \"agentKeepalivePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Keep alive port table.\"\"\",\n        }, # row\n        \"agentKeepalivePortState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The keepalive state for the port.\n\nenable(1)  - enables keepalive on the port.\ndisable(2) - disables keepalive on the port.\n\nThe default port keepalive state is enabled.\"\"\",\n        }, # column\n        \"agentKeepalivePortLoopDetected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Keepalive status for the port.\n\nyes (1)  - loop detected on the port.\nno  (2)  - no loop detected on the port.\"\"\",\n        }, # column\n        \"agentKeepalivePortLoopCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The loop count on a specific port.\"\"\",\n        }, # column\n        \"agentKeepalivePortTimeSinceLastLoop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time since last loop detected on the port.\"\"\",\n        }, # column\n        \"agentKeepalivePortRxAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"log-msg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"log-shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Action on detecting a loop on the port.\n\nlog-msg      (1) - log a message.\nlog-shutdown (2) - log message and shutdown the port.\"\"\",\n        }, # column\n        \"agentKeepalivePortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"diag-disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Port status.\n\nenable       (1) - port is enabled.\ndisable      (2) - port is disabled.\ndiag-disable (3) - port is diagnostic disabled.\"\"\",\n        }, # column\n        \"agentKeepalivePortLastLoopDetectedTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.31.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"TimeStamp when last loop was detected on a port.\"\"\",\n        }, # column\n        \"agentSystemGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3\",\n        }, # node\n        \"agentSaveConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"enable(1) will initiate an configuration save to nvram.\n\nStatus is returned by the object agentSaveConfigStatus.\"\"\",\n        }, # scalar\n        \"agentClearConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear config to factory defaults\"\"\",\n        }, # scalar\n        \"agentClearLags\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear lag configuration\"\"\",\n        }, # scalar\n        \"agentClearLoginSessions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"close all telnet sessions\"\"\",\n        }, # scalar\n        \"agentClearPasswords\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"reset passwords\"\"\",\n        }, # scalar\n        \"agentClearPortStats\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear all port statistics\"\"\",\n        }, # scalar\n        \"agentClearSwitchStats\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear all switch statistics\"\"\",\n        }, # scalar\n        \"agentClearTrapLog\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear trap log\"\"\",\n        }, # scalar\n        \"agentClearVlan\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"clear vlan entries\"\"\",\n        }, # scalar\n        \"agentResetSystem\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Resets the switch.\n\nThis object is not valid for stacking platforms.\"\"\",\n        }, # scalar\n        \"agentSaveConfigStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInitiated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"savingInProcess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"savingComplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"savingFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current status of an save configuration request.\"\"\",\n        }, # scalar\n        \"agentStartupConfigErase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"erase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Erase the text-based configuration file stored in\nnon-volatile memory.On read returns 0.\"\"\",\n        }, # scalar\n        \"agentReloadConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reloads the text-based configuration file named startup-config\nstored in non-volatile memory.On read returns 0.\"\"\",\n        }, # scalar\n        \"agentCableTesterGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4\",\n        }, # node\n        \"agentCableTesterStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"uninitialized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"uninitialized\",\n            \"description\" :\n                \"\"\"Status of the Virtual Cable Tester\nactive(1)        - cable testing is in progress.  Set to this value\n                   to start the test.\nsuccess(2)       - A successful test was performed.  Cannot be set.\nfailure(3)       - A failure was encountered during the test.\n                   Cannot be set.\nuninitialized(4) - No test has been performed yet. Cannot be set.\"\"\",\n        }, # scalar\n        \"agentCableTesterIfIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"Determines on which port to perform the cable test.  Limited to\ncopper based ports.\"\"\",\n        }, # scalar\n        \"agentCableTesterCableStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"short\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"unknown\",\n            \"description\" :\n                \"\"\"Indicates the results of the Cable Test.\n\n\nnormal(1)        - The cable is working correctly.\nopen(2)          - The cable is disconnected or there is a faulty\n                   connector.\nshort(3)         - There is an electrical short in the cable.\nunknown(4)       - No test has been performed yet, or a test is\n                   currently in progress.\"\"\",\n        }, # scalar\n        \"agentCableTesterMinimumCableLength\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The estimated length of the cable in meters.  This value\nindicates the shortest length estimated.  This object will\nreturn 0 if agentCableTesterStatus is not success(2) or the cable\nlength is unknown.\"\"\",\n        }, # scalar\n        \"agentCableTesterMaximumCableLength\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The estimated length of the cable in meters.  This value\nindicates the longest length estimated.  This object will\nreturn 0 if agentCableTesterStatus is not success(2) or the cable\nlength is unknown.\"\"\",\n        }, # scalar\n        \"agentCableTesterCableFailureLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The estimated distance in meters from the end of the cable to\nthe failure location.  This object will return 0 if\nagentCableTesterStatus is not success(2).\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"notifications\" : {\n        \"multipleUsersTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap is sent when more than one user is logged in with\nadministrative access.  Only applies to CLI interface.\"\"\",\n        }, # notification\n        \"broadcastStormStartTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.2\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap is sent when a broadcast storm is detected.\"\"\",\n        }, # notification\n        \"broadcastStormEndTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.3\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap is sent when a broadcast storm is no longer\ndetected.\"\"\",\n        }, # notification\n        \"linkFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.4\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # notification\n        \"vlanRequestFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.5\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n                \"dot1qVlanIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # notification\n        \"vlanDeleteLastTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dot1qVlanIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when attempting to delete the last configured VLAN\nor the Default VLAN.\"\"\",\n        }, # notification\n        \"vlanDefaultCfgFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dot1qVlanIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent if there are failures in resetting VLAN\nconfiguration to defaults.\"\"\",\n        }, # notification\n        \"vlanRestoreFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.8\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n                \"dot1qVlanIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # notification\n        \"fanFailureTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.9\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # notification\n        \"stpInstanceNewRootTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentStpMstId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when this machine is a new STP Root when there is more\nthan one STP instance.\"\"\",\n        }, # notification\n        \"stpInstanceTopologyChangeTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentStpMstId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when there is a STP topology change when there is more\nthan one STP instance.\"\"\",\n        }, # notification\n        \"powerSupplyStatusChangeTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.12\",\n            \"status\" : \"obsolete\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # notification\n        \"failedUserLoginTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap is sent when a user fails to authenticate via the CLI or Web\ninterfaces.\"\"\",\n        }, # notification\n        \"userLockoutTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap is sent when a user account is locked due to consecutive failed login attempts via the CLI or Web\ninterfaces beyond the allowed limit.\"\"\",\n        }, # notification\n        \"daiIntfErrorDisabledTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent once an interface is error disabled by DAI when the\nincoming packet rate exceeded configured rate limit during a\nburst-interval.\"\"\",\n        }, # notification\n        \"stpInstanceLoopInconsistentStartTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentStpMstId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when this port in this STP instance enters\nloop inconsistent state upon failure to receive a BPDU.\"\"\",\n        }, # notification\n        \"stpInstanceLoopInconsistentEndTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentStpMstId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when this port in this STP instance exits\nloop inconsistent state upon reception of a BPDU.\"\"\",\n        }, # notification\n        \"dhcpSnoopingIntfErrorDisabledTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent once an interface is error disabled by DHCP Snooping when the\nincoming packet rate exceeded configured rate limit during a\nburst-interval.\"\"\",\n        }, # notification\n        \"agentSwitchIpAddressConflictTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchConflictIPAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchConflictMacAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IP address conflict trap signifies the reception of an ARP from\nanother host in the LAN that has conflicting IP address.\"\"\",\n        }, # notification\n        \"agentSwitchCpuRisingThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchCpuProcessRisingThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchCpuProcessName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when the total CPU utilization exceeds CPU Rising\nutilization threshold over the configured Rising threshold interval.\"\"\",\n        }, # notification\n        \"agentSwitchCpuFallingThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchCpuProcessFallingThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when the total CPU utilization falls below CPU Falling\nutilization threshold over the configured falling threshold interval.\"\"\",\n        }, # notification\n        \"agentSwitchCpuFreeMemBelowThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchCpuProcessFreeMemoryThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when CPU Free Memory falls below the configured threshold.\"\"\",\n        }, # notification\n        \"agentSwitchCpuFreeMemAboveThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchCpuProcessFreeMemoryThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when CPU Free Memory rises to 10% above the configured threshold.\"\"\",\n        }, # notification\n        \"agentSwitchStormControlTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"agentSwitchStormControlType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchStormControlAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when storm control rate limit is reached.\"\"\",\n        }, # notification\n        \"agentSwitchMbufRisingThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchMbufRisingThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsUsed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsFree\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when the Mbuf utilization exceeds rising\nutilization threshold.\"\"\",\n        }, # notification\n        \"agentSwitchMbufFallingThresholdTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentSwitchMbufFallingThreshold\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsUsed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentSwitchMbufsFree\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when the Mbuf utilization falls below falling\nutilization threshold.\"\"\",\n        }, # notification\n        \"loginSessionStartStopTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"agentLoginSessionIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentLoginSessionUserName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentLoginSessionConnectionType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentLoginSessionInetAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n                \"agentLoginSessionStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when a CLI session starts or ends.\"\"\",\n        }, # notification\n        \"agentSwitchDDisableAutoRecoveryTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"agentPortDDisableReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"DNOS-SWITCHING-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent when interface (ifIndex) is auto recovered\nfrom agentPortDDisableReason reason.\"\"\",\n        }, # notification\n        \"loopProtectTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"DNOS-SWITCHING-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap is sent on detection of loop on an interface.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/ELTEK-DISTRIBUTED-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ELTEK-DISTRIBUTED-MIB\n\nFILENAME = \"./ELTEK-DISTRIBUTED-MIB\"\n\nMIB = {\n    \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n\n    \"ELTEK-DISTRIBUTED-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"ELTEK dcSystem MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"EltekValere R&D.\nPostal: Eltek Valere AS\nP.O. Box 3043\nN-3003 Drammen\nNorway\nTel: +47-32 20 32 00\nFax: +47-32 20 31 20\nweb:  www.eltekvalere.com\"\"\",\n        \"description\" :\n            \"\"\"An ongoing effort toward a generic MIB for all ELTEK products.\nBranch overview:\nAeongold branch will be 1\nAL175 branch will be 2\nAL6000 branch will be 3\nInternal used branch will be 4\nInternal used branch will be 5\nOEM Smartpack branch will be 6\nELTEK Common branch will be 7 (SmartPack, MCU, AEON w/WebPower sw V2.x)\nELTEK Distributed branch will be 8 (SmartPack w/WebPower sw V3.x)\nELTEK Distributed V2 branch will be 9 (SmartPack w/WebPower sw V4.0)\nELTEK Distributed V3 branch will be 9 (SmartPack w/WebPower sw V4.1)\nELTEK Distributed V4 branch will be 9 (SmartPack w/WebPower sw V4.1, V4.2, V4.3 and compack 1.xx)\nELTEK Distributed V5 branch will be 9 (SmartPack w/WebPower sw V4.6)\nELTEK Distributed V6 branch will be 9 (SmartPack w/WebPower sw V4.6, Smartpack2 V1.1)\nELTEK Distributed V7 branch will be 9 (SmartPack w/WebPower sw V4.7, ComPack V1.04, Smartpack2 V1.1, V1.2)\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2011-06-05 14:44\",\n                \"description\" :\n                    \"\"\"Added RectifierCapacityTraps.\nAdded systemServiceMode.\"\"\",\n            },\n            {\n                \"date\" : \"2011-03-22 14:41\",\n                \"description\" :\n                    \"\"\"added smartpack2(7)  to systemSiteInfoControllerType\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-22 12:48\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"2010-10-29 08:29\",\n                \"description\" :\n                    \"\"\"Added traps and OID's for SolarChargers.\nAdded reading of values on programmable inputs of IO Monitor.\"\"\",\n            },\n            {\n                \"date\" : \"2009-03-12 15:15\",\n                \"description\" :\n                    \"\"\"Added support for external IO monitor and Load monitor units.\nChanges are done in the MIB to accomodate the v2c standard.\"\"\",\n            },\n            {\n                \"date\" : \"2008-01-30 11:49\",\n                \"description\" :\n                    \"\"\"Some OIDs were added to this revision. Since all new stuff are additions and no existing information was moved, this V3 revision stays in branch 9. enjoy!\"\"\",\n            },\n            {\n                \"date\" : \"2007-06-22 11:27\",\n                \"description\" :\n                    \"\"\"Branch 9, contains mainly changes in the Traps format. The traps now meets SNMP v2c specification.\"\"\",\n            },\n            {\n                \"date\" : \"2005-09-07 12:38\",\n                \"description\" :\n                    \"\"\"added battery test and boost start/stop and ac voltages\"\"\",\n            },\n            {\n                \"date\" : \"2005-06-28 11:30\",\n                \"description\" :\n                    \"\"\"First revision\"\"\",\n            },\n        ),\n        \"identity node\" : \"eltek\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n    ),\n\n    \"nodes\" : {\n        \"eltek\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148\",\n            \"status\" : \"current\",\n        }, # node\n        \"eltekDistributedPlantV7\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9\",\n        }, # node\n        \"controlSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1\",\n        }, # node\n        \"systemTime\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.1\",\n        }, # node\n        \"systemTimeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system date and time. Used for event timestamps and logging\"\"\",\n        }, # scalar\n        \"systemInfoRefresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"refreshdata\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is a push button function that will rebuild all the dynamic SNMP tables. \nWhen control units are removed or added this function must be executed to make sure\nthe tables are updated.\"\"\",\n        }, # scalar\n        \"systemTrapRepeatRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object sets the repeat rate of any active traps, in minutes.\nEntering 0 (zero) will prevent repeating traps - one trap only will be sent per alarm event.\"\"\",\n        }, # scalar\n        \"systemSendOffTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A separate off-trap will be issued when an alarm condition goes off, if this flag is set to 1.\nEntering 0 (zero) will prevent OFF traps from being transmitted.\"\"\",\n        }, # scalar\n        \"systemNumOfControlUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Control units in a distributed system.\"\"\",\n        }, # scalar\n        \"systemControlUnitIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index used for navigating in the table for configurable inputs.\"\"\",\n        }, # scalar\n        \"systemControlUnitTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the status of the programmable inputs.\nThere is one row for each Control unit.\"\"\",\n        }, # table\n        \"systemControlUnitEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"systemControlUnitIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"inputControlUnitID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of which Control unit to be read.\"\"\",\n        }, # column\n        \"inputUserConfigurable1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"inputUserConfigurable10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \nThe description of the input is found in the systemControlUnitInputTable\"\"\",\n        }, # column\n        \"systemLinkStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"linkdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"linkup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A flag showing the status of the serial port used between the HEIDI Webpower adapter \nor embedded WEB/SNMP card and the Smartpack Control system.\nIf this flag shows status linkdown, the propable cause is that the wrong baudrate is set,\nwhich again is likely to happen when booting a brand new board.\nExecute a 'systemInitiateEEPROM' command to fix.\nNot applicable for ComPack control unit\"\"\",\n        }, # scalar\n        \"systemInitiateEEPROM\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pushbutton function that initiates a forced write of default data to the SB70/SB72 eeprom. This function is used for \nproductiontest only. The 3rd party OS used in this application are not able to write  \ndefault data to EEPROM at boot time. A minimum set of configuration is thus created \nin RAM. A production test facility must therefore run this command as a part of the \nproduction test for the unit to function properly.\"\"\",\n        }, # scalar\n        \"systemLastDigInput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The last Prog.Input that generated a trap. Used by Traps only.\"\"\",\n        }, # scalar\n        \"systemTrapCounter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The number of times a trap has been repeated.. Only acessible for Traps.\"\"\",\n        }, # scalar\n        \"systemHeartBeatTrapRepeatRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1440\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The repeat rate for the systemHeartBeatTrap.\nSetting this value to zero will disable the HeartBeatTrap.\"\"\",\n        }, # scalar\n        \"systemResetManualAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"apply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A pushutton that resets all manually resettable alarms in the controlsystem. Alarms that \nis not manually resettable will not be affected by this.\"\"\",\n        }, # scalar\n        \"systemControlUnitInputIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index used for navigating in the table for configurable inputs.\"\"\",\n        }, # scalar\n        \"systemControlUnitInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the description of the programmable inputs.\nThere is one row for each Control unit.\nProgrammable input alarms will have description attached to the traps that\nexplains the alarm. Default description is: ProgInput <Control unit ID>.x\"\"\",\n        }, # table\n        \"systemControlUnitInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"systemControlUnitInputIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"inputUnitID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of which Control unit to be read.\"\"\",\n        }, # column\n        \"inputUserConfigurableText1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.1.\"\"\",\n        }, # column\n        \"inputUserConfigurableText2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.2.\"\"\",\n        }, # column\n        \"inputUserConfigurableText3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.3.\"\"\",\n        }, # column\n        \"inputUserConfigurableText4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.4.\"\"\",\n        }, # column\n        \"inputUserConfigurableText5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.5.\"\"\",\n        }, # column\n        \"inputUserConfigurableText6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.6.\"\"\",\n        }, # column\n        \"inputUserConfigurableText7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.7.\"\"\",\n        }, # column\n        \"inputUserConfigurableText8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.8.\"\"\",\n        }, # column\n        \"inputUserConfigurableText9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.9.\"\"\",\n        }, # column\n        \"inputUserConfigurableText10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.10.\"\"\",\n        }, # column\n        \"systemResetCtrlSystem\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.16\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"reboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A pushbutton function that resets the control system.\nConfiguration data will be kept.\"\"\",\n        }, # scalar\n        \"ioUnits\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17\",\n        }, # node\n        \"ioUnitNumberOfUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"ioUnitsIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"ioUnitsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"ioUnitsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ioUnitsIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"ioUnitID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"ioUnitOutDoorTemp1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"The measured value of the temperature input.\nDepending on the global setting in the Control unit, this value will be presented in Celsius\nor Fahrenheit.\"\"\",\n        }, # column\n        \"ioUnitOutDoorTemp2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"The measured value of the temperature input.\nDepending on the global setting in the Control unit, this value will be presented in Celsius\nor Fahrenheit.\"\"\",\n        }, # column\n        \"ioUnitFanSpeed1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Percent %\",\n            \"description\" :\n                \"\"\"The speed of the cooling/ circulation fan.  The speed is a percentage of max RPM.  \"\"\",\n        }, # column\n        \"ioUnitFanSpeedDeltaValue1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Percent %\",\n            \"description\" :\n                \"\"\"The deviation of the cooling/circulation fans speed set value.  Is a percentage of the desired value. \"\"\",\n        }, # column\n        \"ioUnitFanSpeed2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Percent %\",\n            \"description\" :\n                \"\"\"The speed of the cooling/ circulation fan.  The speed is a percentage of max RPM. \"\"\",\n        }, # column\n        \"ioUnitFanSpeedDeltaValue2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Percent %\",\n            \"description\" :\n                \"\"\"The deviation of the cooling/circulation fans speed set value.  Is a percentage of the desired value. \"\"\",\n        }, # column\n        \"ioUnitProgInputText1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.1\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputText2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.2\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputText3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.3\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputText4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.4\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputText5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.5\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputText6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <I/Ounit ID>.6\"\"\",\n        }, # column\n        \"ioUnitProgInputStatus6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Programmable input status. \"\"\",\n        }, # column\n        \"ioUnitProgInputValue1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"ioUnitProgInputValue2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"ioUnitProgInputValue3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"ioUnitProgInputValue4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"ioUnitProgInputValue5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"ioUnitProgInputValue6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.17.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 500 = 5.00V\",\n            \"description\" :\n                \"\"\"The value read on input.\"\"\",\n        }, # column\n        \"systemServiceMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.1.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deactivate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"activate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is a switch function to activate (1) or deactivate (0) servicemode. Status can also be read.\nServicemode prevent the system to operate relays or send traps or mail.\"\"\",\n        }, # scalar\n        \"dcSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2\",\n        }, # node\n        \"dcPlant\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1\",\n        }, # node\n        \"systemSiteInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3\",\n        }, # node\n        \"systemSiteInfoCustomer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Customer name (as stored in the Control Unit).\"\"\",\n        }, # scalar\n        \"systemSiteInfoLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system/site Location details (as stored in the Control Unit).\"\"\",\n        }, # scalar\n        \"systemSiteInfoMessage1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system/site Info Message record #1 (as stored in the Control Unit). 31 Bytes.\"\"\",\n        }, # scalar\n        \"systemSiteInfoMessage2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system/site Info Message record #2 (as stored in the Control Unit). 31 Bytes.\"\"\",\n        }, # scalar\n        \"systemSiteInfoInstalledDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system's Installed Date text string (as stored in the Control Unit) 16bytes.\"\"\",\n        }, # scalar\n        \"systemSiteInfoControllerType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"al175\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"al4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"al6000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"al175oem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mcu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"smartpack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"compack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"smartpack2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system Controller Module currently connected.\n0 = AL175\n1 = AL4000 (Aeon Gold)\n2 = AL6000\n3 = AL175OEM\n4 = MCU\n5 = SmartPack\n6 = ComPack\"\"\",\n        }, # scalar\n        \"systemSiteInfoSystemSeriaNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number for the complete system.\"\"\",\n        }, # scalar\n        \"systemSiteInfoControllerSeriaNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number for Control unit 1.\"\"\",\n        }, # scalar\n        \"systemNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"prs48v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"prs24v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"prs12v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"prs26v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"prs60v\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal voltage rating. 24V/48V/60V systems.\n0=48V\n1=24V\n2=Not used\n3=Not used\n4=60V\"\"\",\n        }, # scalar\n        \"systemOperationalStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"floatvoltreg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"floattempcomp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryboost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batterytest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A summary status showing if the system is testing, boosting, floating etc.\n0=Float, voltage regulated\n1=Float, temperature comp. regulated;\n2=boost\n3=battery test\"\"\",\n        }, # scalar\n        \"battery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3\",\n        }, # node\n        \"batteryName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name of the battery installed in the system.\"\"\",\n        }, # scalar\n        \"batteryVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The measured battery voltage.\"\"\",\n        }, # scalar\n        \"batteryCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The measured total battery current.\nThis is the sum of all the enabled shunt measurements in the system.\nNegative battery current indicates discharging of the batteries.\nPositive battery current indicates charging of the batteries.\nNote that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # scalar\n        \"batteryTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"The highest value of the enabled battery temperature measurements.\nDepending on the global setting in the Control unit, this value will be presented in Celsius\nor Fahrenheit.\"\"\",\n        }, # scalar\n        \"batteryBreakerStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the battery fuses/breakers can be either normal(0) or alarm(1).\"\"\",\n        }, # scalar\n        \"batteryChargeCurrentLimitCtrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable of the battery charge current limitation feature; 0=disable, 1=enable.\"\"\",\n        }, # scalar\n        \"batteryChargeCurrentLimitValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"Battery charging current limit value. Used only when AC source is mains feed.\nNote that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # scalar\n        \"batteryTempCompEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable (0) or Disable (1)  of Battery Temperature Compensated output regulation mode\"\"\",\n        }, # scalar\n        \"batteryFloatVoltConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4300\",\n                        \"max\" : \"6000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4300\",\n                        \"max\" : \"6000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Voltage at which the DC System float charges.\nActs as reference voltage when running temperature compensated charging.\"\"\",\n        }, # scalar\n        \"batteryBoostVoltConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4300\",\n                        \"max\" : \"6000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4300\",\n                        \"max\" : \"6000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Voltage at which the DC System boost charges the batteries.\"\"\",\n        }, # scalar\n        \"batteryHighMajorAlarmVoltageConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Major High Battery Voltage alarm limit set voltage\"\"\",\n        }, # scalar\n        \"batteryHighMinorAlarmVoltageConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Minor High Battery Voltage alarm limit set voltage\"\"\",\n        }, # scalar\n        \"batteryLowMajorAlarmVoltageConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Major Low Battery Voltage Alarm limit set voltage\"\"\",\n        }, # scalar\n        \"batteryLowMinorAlarmVoltageConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Minor Low Battery Voltage Alarm limit set voltage\"\"\",\n        }, # scalar\n        \"batteryStartManualTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"starttest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stoptest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This pushbutton will start or stop a manual battery test if the system allows it.\"\"\",\n        }, # scalar\n        \"batteryStartManualBoost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pushbutton\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"startboost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stopboost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This pushbutton will start or stop a manual battery boost if the system allows it.\"\"\",\n        }, # scalar\n        \"batteryLVD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.17\",\n        }, # node\n        \"batteryLVDStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.17.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Contactor is connected(0), disconnected(1) or disabled(2)\"\"\",\n        }, # scalar\n        \"batteryLVDDisconnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.17.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Battery Contactors Disconnect Voltage\"\"\",\n        }, # scalar\n        \"batteryLVDConnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.17.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The Battery Contactors Reconnect Voltage\"\"\",\n        }, # scalar\n        \"batteryBanksNumofBanks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Control units that is used to measure battery parameters. \"\"\",\n        }, # scalar\n        \"batteryBanks\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19\",\n        }, # node\n        \"batterySymmetryDeltaLimitVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 150 = 1.50V\",\n            \"description\" :\n                \"\"\"The allowable deviation of the symmetry voltage from the theoretical.\nExceeding this value in either direction (+/-) causes an alarm state.\"\"\",\n        }, # scalar\n        \"batteryBanksIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index used for navigating the rows 1..8  of batteryBanksTable \"\"\",\n        }, # scalar\n        \"batteryBanksTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of up to 8 battery banks. Each banks may have up to 8 symmetry measuments.\"\"\",\n        }, # table\n        \"batteryBanksEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"batteryBanksIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"batteryBankID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the selected row in the table. i.e. the battery bank.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry1enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry1status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry1deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry2enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry2status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry2deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry3enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry3status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry3deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry4enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry4status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry4deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry5enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry5status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry5deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry6enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry6status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry6deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry7enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry7status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry7deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry8enable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable the individual symmetry input. If disabled this will read 0 volts and \nthe alarm flag will be turned off.\"\"\",\n        }, # column\n        \"batteryBanksSymmetry8status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryBanksSymmetry8deltaVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 100 = 1.00V\",\n            \"description\" :\n                \"\"\"The difference between the measured value and the expected value.\nThe expected value is calculated by taking the measured total batteryvoltage and divide\nit with the number of battery blocks. You'll then have the theoretical correct value for \neach battery block.\"\"\",\n        }, # column\n        \"batteryBanksNumberOfStrings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of strings in the power system.\"\"\",\n        }, # scalar\n        \"batteryBanksExtensionIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index used for navigating the rows 1..14  of batteryBanksExtensionTable \"\"\",\n        }, # scalar\n        \"batteryBanksExtensionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table shows the measured value on the symmetry inputs.\"\"\",\n        }, # table\n        \"batteryBanksExtensionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"batteryBanksExtensionIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"batteryBanksExtensionID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the selected row in the table. i.e. the battery bank.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryBanksExtensionSymmetryInputValue8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.19.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryCapacityData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20\",\n        }, # node\n        \"batteryTimeToDisconnect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Minutes; 40 = 40 minutes\",\n            \"description\" :\n                \"\"\"Remaining time to low voltage battery disconnect.\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryTimeLeft (minutes)\"\"\",\n        }, # scalar\n        \"batteryCapacityLeft\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Ah/%;  23 = 23 Ah or in %\",\n            \"description\" :\n                \"\"\"Capacity left in the battery.\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryRemCap\"\"\",\n        }, # scalar\n        \"batteryCapacityUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Ah/%;  23 = 23 Ah or in %\",\n            \"description\" :\n                \"\"\"Capacity consumed.\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryUsedCap\"\"\",\n        }, # scalar\n        \"batteryCapacityTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Ah/%;  23 = 23 Ah or in %\",\n            \"description\" :\n                \"\"\"This is the total Capacity of the battery. This value is the installed capacity \ncompensated with the last battery tests quality level\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryTotCap\"\"\",\n        }, # scalar\n        \"batteryQuality\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.20.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"This is the battery quality (%) of the latest battery test.\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryQuality\"\"\",\n        }, # scalar\n        \"batteryMonitorUnits\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21\",\n        }, # node\n        \"battmonNumberOfUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of battery monitor units in the power system.\"\"\",\n        }, # scalar\n        \"battmonUnitsIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index used for navigating the rows 1..14  of battmonUnitsTable \"\"\",\n        }, # scalar\n        \"battmonUnitsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of up to 14 battery monitor control units.  \"\"\",\n        }, # table\n        \"battmonUnitsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"batteryBanksIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"batteryMonitorID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"14\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the selected row\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry1status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry1InputValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry2status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry2InputValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry3status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry3InputValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry4status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"minorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"majorAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the status of this battery symmetry input.\nPossible States:\n0=Normal\n1=MinorAlarm\n2=MajorAlarm\n3=Disabled\n4=Error\"\"\",\n        }, # column\n        \"batteryMonitorSymmetry4InputValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 1200 = 12.00V\",\n            \"description\" :\n                \"\"\"The measured voltage on the symmetry input.\"\"\",\n        }, # column\n        \"batteryMonitorCurrentValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The measured current to/from the battery.\nNote that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"batteryMonitorFuseStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the battery fuse/breaker can be either normal(0) or alarm(1).\"\"\",\n        }, # column\n        \"batteryMonitorTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.21.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"The battery temperature.\"\"\",\n        }, # column\n        \"batteryHighMajorTempAlarmLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"This is the Major High Temperature Alarm level.\"\"\",\n        }, # scalar\n        \"batteryHighMinorTempAlarmLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.3.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"Deg. C/F; i.e. 25 = 25 Deg.\",\n            \"description\" :\n                \"\"\"This is the Minor High Temperature Alarm level.\"\"\",\n        }, # scalar\n        \"loadDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4\",\n        }, # node\n        \"loadDistributionCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The total load current\nNote that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # scalar\n        \"loadDistributionBreakerStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # scalar\n        \"loadDistributionLVDStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3\",\n        }, # node\n        \"loadLVD1Enable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of contactors configuration. \n'enabled' means that the contactor is in use.\n'disabled' means that the contactor is disconfigured and not in use.\"\"\",\n        }, # scalar\n        \"loadLVD1Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 1 is connected(0), disconnected(1) or disabled(2)\"\"\",\n        }, # scalar\n        \"loadLVD1ConnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD1 Connect Voltage\"\"\",\n        }, # scalar\n        \"loadLVD1DisconnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD1 Disconnect Voltage\"\"\",\n        }, # scalar\n        \"loadLVD2Enable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of contactors configuration. \n'enabled' means that the contactor is in use.\n'disabled' means that the contactor is disconfigured and not in use.\"\"\",\n        }, # scalar\n        \"loadLVD2Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 2 is connected(0), disconnected(1) or disabled(2)\"\"\",\n        }, # scalar\n        \"loadLVD2ConnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD2 Connect Voltage\"\"\",\n        }, # scalar\n        \"loadLVD2DisconnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD2 Disconnect Voltage\"\"\",\n        }, # scalar\n        \"loadLVD3Enable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of contactors configuration. \n'enabled' means that the contactor is in use.\n'disabled' means that the contactor is disconfigured and not in use.\"\"\",\n        }, # scalar\n        \"loadLVD3Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 3 is connected(0), disconnected(1) or disabled(2)\"\"\",\n        }, # scalar\n        \"loadLVD3ConnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD3 Connect Voltage\"\"\",\n        }, # scalar\n        \"loadLVD3DisconnectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"LVLD3 Disconnect Voltage\"\"\",\n        }, # scalar\n        \"loadMonitorUnits\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4\",\n        }, # node\n        \"loadmonitorNumberOfUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"loadMonitorUnitsIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"13\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"13\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # scalar\n        \"loadMonitorUnitsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"loadMonitorUnitsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"loadMonitorUnitsIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"loadMonitorID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"loadMonitorFuseStatus8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the load fuses/breakers can be either normal(0) or alarm(1) \"\"\",\n        }, # column\n        \"loadMonitorCurrent8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.4.4.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Amperes or DeciAmperes\",\n            \"description\" :\n                \"\"\"The current consumed by this load branch. Note that the units measured may be i Amperes or in Deciamperes depending on global system settings\"\"\",\n        }, # column\n        \"rectifier\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5\",\n        }, # node\n        \"rectifierInstalledRectifiers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of installed rectifiers for this DC Power System.\"\"\",\n        }, # scalar\n        \"rectifierRectifiersActive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Not Used!\"\"\",\n        }, # scalar\n        \"rectifierTotalCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"DeciAmperes; i.e. 20 = 2,0 Amperes\",\n            \"description\" :\n                \"\"\"The DC system's total delivered rectifier current\"\"\",\n        }, # scalar\n        \"rectifierUtilization\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Utilization in % of available rectifier capacity\"\"\",\n            \"reference>\" :\n                \"\"\"Rect.Capacity\"\"\",\n        }, # scalar\n        \"rectifierStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5\",\n        }, # node\n        \"rectifierStatusNoIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"95\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"95\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An offset for the rectifierStatusTable array. The rectifier status table has \na fixed number of 20 rows. This OID sets the offset for the rectifier in the first row\ni.e. setting the index to 11 will give a range from rectifier ID12 to ID31.\nSetting the index to 0 will give a range from rectifier ID1 to ID20.\"\"\",\n        }, # scalar\n        \"rectifierStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table listing up to 20 recifiers, starting from the rectifier number specified by rectifierStatusNoIndex\"\"\",\n        }, # table\n        \"rectifierStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rectifierStatusID\",\n            ],\n            \"description\" :\n                \"\"\"A row of rectifier status data corresponding to the rectifierStatusNoIndex value\"\"\",\n        }, # row\n        \"rectifierStatusID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rectifier ID number of the rectifier.\"\"\",\n        }, # column\n        \"rectifierStatusStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notUsed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the rectifier record.\nNot Present (0),\nnormal (1),\nalarm (2),\nnotUsed (3),\ndisabled (4)\n      \n      \"\"\",\n        }, # column\n        \"rectifierStatusOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"DeciAmperes\",\n            \"description\" :\n                \"\"\"The output current of the rectifier.\"\"\",\n        }, # column\n        \"rectifierStatusOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The rectifier voltage of the rectifier record.\"\"\",\n        }, # column\n        \"rectifierStatusTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Deg. C/F; i.e. 35 = 35 Degrees\",\n            \"description\" :\n                \"\"\"The input air temperature of the rectifier.\"\"\",\n        }, # column\n        \"rectifierStatusType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rectifier article number string of the rectifier record.\"\"\",\n        }, # column\n        \"rectifierStatusSKU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rectifier part number.\"\"\",\n        }, # column\n        \"rectifierStatusSerialNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rectifier serial number string of the rectifier record.\"\"\",\n        }, # column\n        \"rectifierStatusRevisionLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.5.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rectifier HW revision number string of the rectifier record.\"\"\",\n        }, # column\n        \"acDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.6\",\n        }, # node\n        \"acVoltage1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts AC\",\n            \"description\" :\n                \"\"\"The AC Voltage of phase 1\"\"\",\n        }, # scalar\n        \"acVoltage2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts AC\",\n            \"description\" :\n                \"\"\"The AC Voltage of phase 2\"\"\",\n        }, # scalar\n        \"acVoltage3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts AC\",\n            \"description\" :\n                \"\"\"The AC Voltage of phase 3\"\"\",\n        }, # scalar\n        \"alarmGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7\",\n        }, # node\n        \"alarmWellknownAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1\",\n        }, # node\n        \"alarmMajorHighBattVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Major High Battery Voltage Alarm\"\"\",\n        }, # scalar\n        \"alarmMinorHighBattVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Minor High Battery Voltage alarm\"\"\",\n        }, # scalar\n        \"alarmMajorLowBattVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Major Low Battery Voltage Alarm\"\"\",\n        }, # scalar\n        \"alarmMinorLowBattVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Minor Low Battery Voltage Alarm\"\"\",\n        }, # scalar\n        \"alarmMajorBatteryHighTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Major High Battery Temperature alarm.\"\"\",\n        }, # scalar\n        \"alarmMinorBatteryHighTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Minor High Battery Temperature alarm.\"\"\",\n        }, # scalar\n        \"alarmBatteryDisconnectOpen\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Disconnect Contactor alarm\"\"\",\n        }, # scalar\n        \"alarmLVD1open\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 1 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\"\"\",\n        }, # scalar\n        \"alarmLVD2open\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 2 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\"\"\",\n        }, # scalar\n        \"alarmLVD3open\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load Contactor 3 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\n      \"\"\",\n        }, # scalar\n        \"alarmACmains\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The AC voltage has dropped below critical level, or one or more AC input phases was lost.\"\"\",\n        }, # scalar\n        \"alarmBatteryBreakerOpen\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A battery breaker/fuse alarm.\"\"\",\n        }, # scalar\n        \"alarmDistributionBreakerOpen\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Load Distribution breaker/fuse alarm.\"\"\",\n        }, # scalar\n        \"alarmMajorRectifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Major Rectifier alarm.\"\"\",\n        }, # scalar\n        \"alarmMinorRectifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Minor Rectifier alarm.\"\"\",\n        }, # scalar\n        \"alarmMajorBatterySymmetry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Symmetry Delta Voltage Major alarm.\"\"\",\n        }, # scalar\n        \"alarmMinorBatterySymmetry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Symmetry Delta Voltage Minor alarm\"\"\",\n        }, # scalar\n        \"alarmBatteryLifeEnded\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery quality has dropped below critical level. \nA battery test has measured the fully charged capacity to be too low, \nand thus probably the battery lifecycle to be near expired.\"\"\",\n            \"reference>\" :\n                \"\"\"BatteryQuality\"\"\",\n        }, # scalar\n        \"alarmBatteryTestmodeEntered\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system has lowered the battery charge voltage in order to discharge the batteries \nto a predefined level. When the criteria for stopping the battery testing is reached, the \ncharge voltage is increased to commence normal charging.\"\"\",\n        }, # scalar\n        \"alarmBatteryBoostmodeEntered\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system has increased the battery charge voltage in order to boost the \nbattery. When the criteria for stopping the battery boost is reached, \nthe charge voltage is lowered to commence normal charging.\"\"\",\n        }, # scalar\n        \"alarmIoUnitTemp1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"High or low temperature alarm 1 from any of the IO units.\"\"\",\n        }, # scalar\n        \"alarmIoUnitTemp2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"High or low temperature alarm 2 from any of the IO units.\"\"\",\n        }, # scalar\n        \"alarmIoUnitDeltaFanSpeed1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Delta fan speed 1 from any of the IO units.\"\"\",\n        }, # scalar\n        \"alarmIoUnitDeltaFanSpeed2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Delta fan speed 2 from any of the IO units.\"\"\",\n        }, # scalar\n        \"alarmMajorSolar\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Major Solar alarm.\"\"\",\n        }, # scalar\n        \"alarmMinorSolar\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Major Solar alarm.\"\"\",\n        }, # scalar\n        \"alarmMajorRectifierCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Major Rectifier Capacity alarm.\"\"\",\n        }, # scalar\n        \"alarmMinorRectifierCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.7.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a Minor Rectifier Capacity alarm.\"\"\",\n        }, # scalar\n        \"solarCharger\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9\",\n        }, # node\n        \"solarChargerInstalledsolarChargers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of installed solar chargers for this DC Power System.\"\"\",\n        }, # scalar\n        \"solarChargersActive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"101\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Not Used!\"\"\",\n        }, # scalar\n        \"solarChargerTotalCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"DeciAmperes; i.e. 20 = 2,0 Amperes\",\n            \"description\" :\n                \"\"\"The DC system's total delivered solar current\"\"\",\n        }, # scalar\n        \"solarChargerUtilization\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Utilization in % of available solar capacity\"\"\",\n            \"reference>\" :\n                \"\"\"Solar Capacity\"\"\",\n        }, # scalar\n        \"solarChargerStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5\",\n        }, # node\n        \"solarChargerStatusNoIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"95\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"95\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An offset for the solarStatusTable array. The solar status table has \na fixed number of 20 rows. This OID sets the offset for the solarcharger in the first row\ni.e. setting the index to 11 will give a range from solarcharger ID12 to ID31.\nSetting the index to 0 will give a range from solarcharger ID1 to ID20.\"\"\",\n        }, # scalar\n        \"solarChargerStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table listing up to 20 solarchargers, starting from the solarcharger number specified by solarStatusNoIndex\"\"\",\n        }, # table\n        \"solarChargerStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"solarChargerStatusID\",\n            ],\n            \"description\" :\n                \"\"\"A row of rectifier status data corresponding to the rectifierStatusNoIndex value\"\"\",\n        }, # row\n        \"solarChargerStatusID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID number of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerStatusStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notUsed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the solarcharger record.\nNot Present (0),\nnormal (1),\nalarm (2),\nnotUsed (3),\ndisabled (4)\n      \n      \"\"\",\n        }, # column\n        \"solarChargerOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"DeciAmperes; i.e. 20 = 2,0 Amperes\",\n            \"description\" :\n                \"\"\"The output current of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1/100 Volt; i.e. 5400 = 54.00V\",\n            \"description\" :\n                \"\"\"The output voltage of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input air temperature of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The article number string of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerSKU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The solarcharger part number.\"\"\",\n        }, # column\n        \"solarChargerSerialNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number string of the solarcharger.\"\"\",\n        }, # column\n        \"solarChargerRevisionLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.9.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The HW revision number string of the solarcharger.\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"alarmMajorHighBattVoltTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorHighBattVolt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Major High Battery Voltage alarm\"\"\",\n        }, # notification\n        \"alarmMinorHighBattVoltTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorHighBattVolt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Minor High Battery Voltage alarm\"\"\",\n        }, # notification\n        \"alarmMajorLowBattVoltTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorLowBattVolt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Major Low Battery Voltage Alarm\"\"\",\n        }, # notification\n        \"alarmMinorLowBattVoltTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorLowBattVolt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Minor Low Battery Voltage Alarm\"\"\",\n        }, # notification\n        \"alarmMajorBatteryHighTempTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorBatteryHighTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Major High Battery Temperature alarm.\"\"\",\n        }, # notification\n        \"alarmMinorBatteryHighTempTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorBatteryHighTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Minor High Battery Temperature alarm.\"\"\",\n        }, # notification\n        \"alarmBatteryDisconnectOpenTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmBatteryDisconnectOpen\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Battery Disconnect Contactor alarm\"\"\",\n        }, # notification\n        \"alarmLVD1openTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmLVD1open\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The load Contactor 1 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\"\"\",\n        }, # notification\n        \"alarmLVD2openTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmLVD2open\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The load Contactor 2 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\"\"\",\n        }, # notification\n        \"alarmLVD3openTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmLVD3open\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The load Contactor 3 alarm. The contactor disconnect voltage has been\nreached and the contactor has disconnected.\"\"\",\n        }, # notification\n        \"alarmACmainsTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmACmains\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The AC voltage has dropped below critical level, or one or more AC input phases was lost.\"\"\",\n        }, # notification\n        \"alarmBatteryBreakerOpenTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmBatteryBreakerOpen\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A battery breaker/fuse alarm.\"\"\",\n        }, # notification\n        \"alarmDistributionBreakerOpenTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmDistributionBreakerOpen\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Load Distribution breaker/fuse alarm.\"\"\",\n        }, # notification\n        \"alarmMajorRectifierTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorRectifier\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This is a Major Rectifier alarm.\"\"\",\n        }, # notification\n        \"alarmMinorRectifierTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorRectifier\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This is a Minor Rectifier alarm.\"\"\",\n        }, # notification\n        \"alarmMajorBatterySymmetryTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorBatterySymmetry\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Battery Symmetry Delta Voltage Major alarm\"\"\",\n        }, # notification\n        \"alarmMinorBatterySymmetryTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorBatterySymmetry\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Battery Symmetry Delta Voltage Minor alarm\"\"\",\n        }, # notification\n        \"alarmBatteryLifeEndedTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmBatteryLifeEnded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The battery quality has dropped below critical level. \nA battery test has measured the fully charged capacity to be too low, \nand thus probably the battery lifecycle to be near expired.\"\"\",\n        }, # notification\n        \"alarmBatteryTestmodeEnteredTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmBatteryTestmodeEntered\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The system has lowered the battery charge voltage in order to discharge the batteries \nto a predefined level. When the criteria for stopping the battery testing is reached, the \ncharge voltage is increased to commence normal charging.\"\"\",\n        }, # notification\n        \"alarmBatteryBoostmodeEnteredTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmBatteryBoostmodeEntered\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The system has increased the battery charge voltage in order to boost the \nbattery. When the criteria for stopping the battery boost is reached, \nthe charge voltage is lowered to commence normal charging.\"\"\",\n        }, # notification\n        \"alarmController1proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 1.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController2proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 2.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController3proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 3.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController4proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 4.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController5proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 5.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController6proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 6.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController7proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 7.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmController8proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"inputUserConfigurable8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"inputUserConfigurableText8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for Control unit 8.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <Control unit ID>.x.\"\"\",\n        }, # notification\n        \"infoHeartBeatTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"When enabled, this trap will be transmitted at regular inervals. This trap is not \nintended to be an alarm but more like some information that the system is alive and \nthe link is up.\"\"\",\n        }, # notification\n        \"alarmIoUnitTemp1Trap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmIoUnitTemp1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"High or low temperature alarm 1 from any of the IO units.\"\"\",\n        }, # notification\n        \"alarmIoUnitTemp2Trap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmIoUnitTemp2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"High or low temperature alarm 2 from any of the IO units.\"\"\",\n        }, # notification\n        \"alarmIoUnitDeltaFanSpeed1Trap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmIoUnitDeltaFanSpeed1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Delta fan speed 1 from any of the IO units.\nOccurs if the fan speed deviation is above/below the configured level. \"\"\",\n        }, # notification\n        \"alarmIoUnitDeltaFanSpeed2Trap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmIoUnitDeltaFanSpeed2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Delta fan speed 2 from any of the IO units.\nOccurs if the fan speed deviation is above/below the configured level. \"\"\",\n        }, # notification\n        \"alarmIoUnit1proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 1.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit2proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 2.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit3proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 3.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit4proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 4.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit5proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 5.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit6proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 6.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit7proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 7.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit8proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 8.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit9proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 9.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit10proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 10.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit11proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 11.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit12proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 12.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit13proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 13.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmIoUnit14proginputTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioUnitProgInputStatus6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemLastDigInput\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"ioUnitProgInputText6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Programmable input alarm for IO Unit 14.\nProgrammable input alarms will have description attached that explains the alarm.\nDefault description is: ProgInput <IO Unit ID>.x.\"\"\",\n        }, # notification\n        \"alarmMajorSolarChargerTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorSolar\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Major Solar Charger alarm\"\"\",\n        }, # notification\n        \"alarmMinorSolarChargerTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorSolar\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Minor Solar Charger alarm\"\"\",\n        }, # notification\n        \"alarmMajorRectifierCapacityTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMajorRectifierCapacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Major Rectifier Capacity alarm\"\"\",\n        }, # notification\n        \"alarmMinorRectifierCapacityTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"alarmMinorRectifierCapacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"systemTrapCounter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Minor Rectifier Capacity alarm\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"dcSystemTraps\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ELTEK-DISTRIBUTED-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.12148.9.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alarmMajorHighBattVoltTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorHighBattVoltTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorLowBattVoltTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorLowBattVoltTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorBatteryHighTempTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorBatteryHighTempTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmBatteryDisconnectOpenTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmLVD1openTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmLVD2openTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmLVD3openTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmACmainsTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmBatteryBreakerOpenTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmDistributionBreakerOpenTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorRectifierTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorRectifierTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorBatterySymmetryTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorBatterySymmetryTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmBatteryLifeEndedTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmBatteryTestmodeEnteredTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmBatteryBoostmodeEnteredTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController1proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController2proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController3proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController4proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController5proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController6proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController7proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmController8proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"infoHeartBeatTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnitTemp1Trap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnitTemp2Trap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnitDeltaFanSpeed1Trap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnitDeltaFanSpeed2Trap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit1proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit2proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit3proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit4proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit5proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit6proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit7proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit8proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit9proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit10proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit11proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit12proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit13proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmIoUnit14proginputTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorSolarChargerTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorSolarChargerTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMajorRectifierCapacityTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n                \"alarmMinorRectifierCapacityTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ELTEK-DISTRIBUTED-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\" This branch contains the Alarm Notification Traps, which duplicate the alarmGroup OIDs.\nEach alarm condition is represented by a Alarm Condition Trap and an associated OFF\nTrap, which is optionally transmitted according to the state of  OID systemSendOffTrap\"\"\",\n        }, # group\n    }, # groups\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/ENTITY-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ENTITY-MIB\n\nFILENAME = \"/usr/share/snmp/mibs/ietf/ENTITY-MIB\"\n\nMIB = {\n    \"moduleName\" : \"ENTITY-MIB\",\n\n    \"ENTITY-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Energy Management Working Group\"\"\",\n        \"contact\" : \n            \"\"\"WG Email: eman@ietf.org\nMailing list subscription info:\nhttp://www.ietf.org/mailman/listinfo/eman\n\nAndy Bierman\nYumaWorks, Inc.\n274 Redwood Shores Parkway, #133\nRedwood City, CA 94065\nUSA\nPhone: +1 408-716-0466\nEmail: andy@yumaworks.com\n\nDan Romascanu\nAvaya\nPark Atidim, Bldg. #3\nTel Aviv, 61581\nIsrael\nPhone: +972-3-6458414\nEmail: dromasca@avaya.com\n\nJuergen Quittek\nNEC Europe Ltd.\nNetwork Research Division\nKurfuersten-Anlage 36\nHeidelberg  69115\nGermany\nPhone: +49 6221 4342-115\nEmail: quittek@neclab.eu\n\nMouli Chandramouli\nCisco Systems, Inc.\nSarjapur Outer Ring Road\nBangalore 560103\nIndia\nPhone: +91 80 4429 2409\nEmail: moulchan@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for representing multiple logical\nentities supported by a single SNMP agent.\n\nCopyright (c) 2013 IETF Trust and the persons identified\nas authors of the code.  All rights reserved.\n\nRedistribution and use in source and binary forms, with\nor without modification, is permitted pursuant to, and\nsubject to the license terms contained in, the Simplified\nBSD License set forth in Section 4.c of the IETF Trust's\nLegal Provisions Relating to IETF Documents\n(http://trustee.ietf.org/license-info).\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2013-04-05 00:00\",\n                \"description\" :\n                    \"\"\"Entity MIB (Version 4).\nThis revision obsoletes RFC 4133.\n- Creation of a new MIB module, IANA-ENTITY-MIB, which\nmakes the PhysicalIndex TC an IANA-maintained TEXTUAL-\nCONVENTION.  IANAPhysicalClass is now imported\nfrom the IANA-ENTITY-MIB.\n- Addition of a new MIB object to the entPhysicalTable,\nentPhysicalUUID.  UUIDorZero is imported from the\nUUID-TC-MIB.\n- Addition of two new MODULE-COMPLIANCE modules-\nentity4Compliance and entity4CRCompliance.\nThis version is published as RFC 6933.\"\"\",\n            },\n            {\n                \"date\" : \"2005-08-10 00:00\",\n                \"description\" :\n                    \"\"\"Initial Version of Entity MIB (Version 3).\nThis revision obsoletes RFC 2737.\nAdditions:\n  - cpu(12) enumeration added to IANAPhysicalClass TC\n  - DISPLAY-HINT clause to PhysicalIndex TC\n  - PhysicalIndexOrZero TC\n  - entPhysicalMfgDate object\n  - entPhysicalUris object\nChanges:\n  - entPhysicalContainedIn SYNTAX changed from\n    INTEGER to PhysicalIndexOrZero\n\nThis version was published as RFC 4133.\"\"\",\n            },\n            {\n                \"date\" : \"1999-12-07 00:00\",\n                \"description\" :\n                    \"\"\"Initial Version of Entity MIB (Version 2).\nThis revision obsoletes RFC 2037.\nThis version was published as RFC 2737.\"\"\",\n            },\n            {\n                \"date\" : \"1996-10-31 00:00\",\n                \"description\" :\n                    \"\"\"Initial version (version 1), published as\nRFC 2037.\"\"\",\n            },\n        ),\n        \"identity node\" : \"entityMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TDomain\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"UUID-TC-MIB\", \"name\" : \"UUIDorZero\"},\n        {\"module\" : \"IANA-ENTITY-MIB\", \"name\" : \"IANAPhysicalClass\"},\n    ),\n\n    \"typedefs\" : {\n        \"PhysicalIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"An arbitrary value that uniquely identifies the physical\nentity.  The value should be a small positive integer.\nIndex values for different physical entities are not\nnecessarily contiguous.\"\"\",\n        },\n        \"PhysicalIndexOrZero\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"This TEXTUAL-CONVENTION is an extension of the\nPhysicalIndex convention, which defines a greater than zero\nvalue used to identify a physical entity.  This extension\npermits the additional value of zero.  The semantics of the\nvalue zero are object-specific and must, therefore, be\ndefined as part of the description of any object that uses\nthis syntax.  Examples of the usage of this extension are\nsituations where none or all physical entities need to be\nreferenced.\"\"\",\n        },\n        \"SnmpEngineIdOrNone\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"32\"\n            },\n            \"description\" :\n                \"\"\"A specially formatted SnmpEngineID string for use with the\nEntity MIB.\n\nIf an instance of an object of SYNTAX SnmpEngineIdOrNone has\na non-zero length, then the object encoding and semantics\nare defined by the SnmpEngineID TEXTUAL-CONVENTION (see STD\n62, RFC 3411).\n\nIf an instance of an object of SYNTAX SnmpEngineIdOrNone\ncontains a zero-length string, then no appropriate\nSnmpEngineID is associated with the logical entity (i.e.,\nSNMPv3 is not supported).\"\"\",\n        },\n        \"PhysicalClass\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"deprecated\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"chassis\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"backplane\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"container\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"powerSupply\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"fan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"sensor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"module\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"port\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"stack\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"cpu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"description\" :\n                \"\"\"Starting with version 4 of the ENTITY-MIB, this TC is\ndeprecated, and the usage of the IANAPhysicalClass TC from\nthe IANA-ENTITY-MIB is recommended instead.\n\nAn enumerated value that provides an indication of the\ngeneral hardware type of a particular physical entity.\nThere are no restrictions as to the number of\nentPhysicalEntries of each entPhysicalClass, which must be\ninstantiated by an agent.\n\nThe enumeration 'other' is applicable if the physical entity\nclass is known but does not match any of the supported\nvalues.\n\nThe enumeration 'unknown' is applicable if the physical\nentity class is unknown to the agent.\n\nThe enumeration 'chassis' is applicable if the physical\nentity class is an overall container for networking\nequipment.  Any class of physical entity, except a stack,\nmay be contained within a chassis; a chassis may only\nbe contained within a stack.\n\nThe enumeration 'backplane' is applicable if the physical\nentity class is some sort of device for aggregating and\nforwarding networking traffic, such as a shared backplane in\na modular ethernet switch.  Note that an agent may model a\nbackplane as a single physical entity, which is actually\nimplemented as multiple discrete physical components (within\na chassis or stack).\n\nThe enumeration 'container' is applicable if the physical\nentity class is capable of containing one or more removable\nphysical entities, possibly of different types.  For\nexample, each (empty or full) slot in a chassis will be\nmodeled as a container.  Note that all removable physical\nentities should be modeled within a container entity, such\n\nas field-replaceable modules, fans, or power supplies.  Note\nthat all known containers should be modeled by the agent,\nincluding empty containers.\n\nThe enumeration 'powerSupply' is applicable if the physical\nentity class is a power-supplying component.\n\nThe enumeration 'fan' is applicable if the physical entity\nclass is a fan or other heat-reduction component.\n\nThe enumeration 'sensor' is applicable if the physical\nentity class is some sort of sensor, such as a temperature\nsensor within a router chassis.\n\nThe enumeration 'module' is applicable if the physical\nentity class is some sort of self-contained sub-system.  If\nthe enumeration 'module' is removable, then it should be\nmodeled within a container entity; otherwise, it should be\nmodeled directly within another physical entity (e.g., a\nchassis or another module).\n\nThe enumeration 'port' is applicable if the physical entity\nclass is some sort of networking port capable of receiving\nand/or transmitting networking traffic.\n\nThe enumeration 'stack' is applicable if the physical entity\nclass is some sort of super-container (possibly virtual)\nintended to group together multiple chassis entities.  A\nstack may be realized by a 'virtual' cable, a real\ninterconnect cable, attached to multiple chassis, or may in\nfact be comprised of multiple interconnect cables.  A stack\nshould not be modeled within any other physical entities,\nbut a stack may be contained within another stack.  Only\nchassis entities should be contained within a stack.\n\nThe enumeration 'cpu' is applicable if the physical entity\nclass is some sort of central processing unit.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"entityMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47\",\n            \"status\" : \"current\",\n        }, # node\n        \"entityMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1\",\n        }, # node\n        \"entityPhysical\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1\",\n        }, # node\n        \"entPhysicalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row per physical entity.  There is\nalways at least one row for an 'overall' physical entity.\"\"\",\n        }, # table\n        \"entPhysicalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular physical entity.\n\nEach entry provides objects (entPhysicalDescr,\nentPhysicalVendorType, and entPhysicalClass) to help an NMS\nidentify and characterize the entry and objects\n(entPhysicalContainedIn and entPhysicalParentRelPos) to help\nan NMS relate the particular entry to other entries in this\ntable.\"\"\",\n        }, # row\n        \"entPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index for this entry.\"\"\",\n        }, # column\n        \"entPhysicalDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of physical entity.  This object\nshould contain a string that identifies the manufacturer's\nname for the physical entity and should be set to a\ndistinct value for each version or model of the physical\nentity.\"\"\",\n        }, # column\n        \"entPhysicalVendorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the vendor-specific hardware type of the\nphysical entity.  Note that this is different from the\ndefinition of MIB-II's sysObjectID.\n\nAn agent should set this object to an enterprise-specific\nregistration identifier value indicating the specific\nequipment type in detail.  The associated instance of\nentPhysicalClass is used to indicate the general type of\nhardware device.\n\nIf no vendor-specific registration identifier exists for\nthis physical entity, or the value is unknown by this agent,\nthen the value { 0 0 } is returned.\"\"\",\n        }, # column\n        \"entPhysicalContainedIn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of entPhysicalIndex for the physical entity that\n'contains' this physical entity.  A value of zero indicates\nthis physical entity is not contained in any other physical\nentity.  Note that the set of 'containment' relationships\ndefine a strict hierarchy; that is, recursion is not\nallowed.\n\nIn the event that a physical entity is contained by more\nthan one physical entity (e.g., double-wide modules), this\nobject should identify the containing entity with the lowest\nvalue of entPhysicalIndex.\"\"\",\n        }, # column\n        \"entPhysicalClass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANA-ENTITY-MIB\", \"name\" : \"IANAPhysicalClass\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the general hardware type of the physical\nentity.\n\nAn agent should set this object to the standard enumeration\nvalue that most accurately indicates the general class of\nthe physical entity, or the primary class if there is more\nthan one entity.\n\nIf no appropriate standard registration identifier exists\nfor this physical entity, then the value 'other(1)' is\nreturned.  If the value is unknown by this agent, then the\nvalue 'unknown(2)' is returned.\"\"\",\n        }, # column\n        \"entPhysicalParentRelPos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the relative position of this 'child'\ncomponent among all its 'sibling' components.  Sibling\ncomponents are defined as entPhysicalEntries that share the\nsame instance values of each of the entPhysicalContainedIn\nand entPhysicalClass objects.\n\nAn NMS can use this object to identify the relative ordering\nfor all sibling components of a particular parent\n(identified by the entPhysicalContainedIn instance in each\nsibling entry).\n\nIf possible, this value should match any external labeling\nof the physical component.  For example, for a container\n(e.g., card slot) labeled as 'slot #3',\nentPhysicalParentRelPos should have the value '3'.  Note\nthat the entPhysicalEntry for the module plugged in slot 3\nshould have an entPhysicalParentRelPos value of '1'.\n\nIf the physical position of this component does not match\nany external numbering or clearly visible ordering, then\nuser documentation or other external reference material\nshould be used to determine the parent-relative position.\nIf this is not possible, then the agent should assign a\nconsistent (but possibly arbitrary) ordering to a given set\nof 'sibling' components, perhaps based on internal\nrepresentation of the components.\n\nIf the agent cannot determine the parent-relative position\nfor some reason, or if the associated value of\nentPhysicalContainedIn is '0', then the value '-1' is\nreturned.  Otherwise, a non-negative integer is returned,\nindicating the parent-relative position of this physical\nentity.\n\nParent-relative ordering normally starts from '1' and\ncontinues to 'N', where 'N' represents the highest\npositioned child entity.  However, if the physical entities\n(e.g., slots) are labeled from a starting position of zero,\nthen the first sibling should be associated with an\nentPhysicalParentRelPos value of '0'.  Note that this\nordering may be sparse or dense, depending on agent\nimplementation.\n\nThe actual values returned are not globally meaningful, as\neach 'parent' component may use different numbering\nalgorithms.  The ordering is only meaningful among siblings\nof the same parent component.\n\nThe agent should retain parent-relative position values\nacross reboots, either through algorithmic assignment or use\nof non-volatile storage.\"\"\",\n        }, # column\n        \"entPhysicalName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The textual name of the physical entity.  The value of this\nobject should be the name of the component as assigned by\nthe local device and should be suitable for use in commands\nentered at the device's 'console'.  This might be a text\nname (e.g., 'console') or a simple component number (e.g.,\nport or module number, such as '1'), depending on the\nphysical component naming syntax of the device.\n\nIf there is no local name, or if this object is otherwise\nnot applicable, then this object contains a zero-length\nstring.\n\nNote that the value of entPhysicalName for two physical\nentities will be the same in the event that the console\ninterface does not distinguish between them, e.g., slot-1\nand the card in slot-1.\"\"\",\n        }, # column\n        \"entPhysicalHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor-specific hardware revision string for the\nphysical entity.  The preferred value is the hardware\nrevision identifier actually printed on the component itself\n(if present).\n\nNote that if revision information is stored internally in a\nnon-printable (e.g., binary) format, then the agent must\nconvert such information to a printable format in an\nimplementation-specific manner.\n\nIf no specific hardware revision string is associated with\nthe physical component, or if this information is unknown to\nthe agent, then this object will contain a zero-length\nstring.\"\"\",\n        }, # column\n        \"entPhysicalFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor-specific firmware revision string for the\nphysical entity.\n\nNote that if revision information is stored internally in a\nnon-printable (e.g., binary) format, then the agent must\nconvert such information to a printable format in an\nimplementation-specific manner.\n\nIf no specific firmware programs are associated with the\nphysical component, or if this information is unknown to the\nagent, then this object will contain a zero-length string.\"\"\",\n        }, # column\n        \"entPhysicalSoftwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor-specific software revision string for the\nphysical entity.\n\nNote that if revision information is stored internally in a\nnon-printable (e.g., binary) format, then the agent must\nconvert such information to a printable format in an\nimplementation-specific manner.\n\nIf no specific software programs are associated with the\nphysical component, or if this information is unknown to the\nagent, then this object will contain a zero-length string.\"\"\",\n        }, # column\n        \"entPhysicalSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The vendor-specific serial number string for the physical\nentity.  The preferred value is the serial number string\nactually printed on the component itself (if present).\n\nOn the first instantiation of a physical entity, the value\nof entPhysicalSerialNum associated with that entity is set\nto the correct vendor-assigned serial number, if this\ninformation is available to the agent.  If a serial number\nis unknown or non-existent, the entPhysicalSerialNum will be\nset to a zero-length string instead.\n\nNote that implementations that can correctly identify the\nserial numbers of all installed physical entities do not\nneed to provide write access to the entPhysicalSerialNum\nobject.  Agents that cannot provide non-volatile storage\nfor the entPhysicalSerialNum strings are not required to\nimplement write access for this object.\n\nNot every physical component will have a serial number, or\neven need one.  Physical entities for which the associated\nvalue of the entPhysicalIsFRU object is equal to 'false(2)'\n(e.g., the repeater ports within a repeater module) do not\nneed their own unique serial numbers.  An agent does not\nhave to provide write access for such entities and may\nreturn a zero-length string.\n\nIf write access is implemented for an instance of\nentPhysicalSerialNum and a value is written into the\ninstance, the agent must retain the supplied value in the\nentPhysicalSerialNum instance (associated with the same\nphysical entity) for as long as that entity remains\ninstantiated.  This includes instantiations across all\nre-initializations/reboots of the network management system,\nincluding those resulting in a change of the physical\nentity's entPhysicalIndex value.\"\"\",\n        }, # column\n        \"entPhysicalMfgName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the manufacturer of this physical component.\nThe preferred value is the manufacturer name string actually\nprinted on the component itself (if present).\n\nNote that comparisons between instances of the\nentPhysicalModelName, entPhysicalFirmwareRev,\nentPhysicalSoftwareRev, and the entPhysicalSerialNum\nobjects are only meaningful amongst entPhysicalEntries with\nthe same value of entPhysicalMfgName.\n\nIf the manufacturer name string associated with the physical\ncomponent is unknown to the agent, then this object will\ncontain a zero-length string.\"\"\",\n        }, # column\n        \"entPhysicalModelName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor-specific model name identifier string associated\nwith this physical component.  The preferred value is the\ncustomer-visible part number, which may be printed on the\ncomponent itself.\n\nIf the model name string associated with the physical\ncomponent is unknown to the agent, then this object will\ncontain a zero-length string.\"\"\",\n        }, # column\n        \"entPhysicalAlias\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is an 'alias' name for the physical entity, as\nspecified by a network manager, and provides a non-volatile\n'handle' for the physical entity.\n\nOn the first instantiation of a physical entity, the value\nof entPhysicalAlias associated with that entity is set to\nthe zero-length string.  However, the agent may set the\nvalue to a locally unique default value, instead of a\nzero-length string.\n\nIf write access is implemented for an instance of\nentPhysicalAlias and a value is written into the instance,\nthe agent must retain the supplied value in the\nentPhysicalAlias instance (associated with the same physical\nentity) for as long as that entity remains instantiated.\nThis includes instantiations across all\nre-initializations/reboots of the network management system,\nincluding those resulting in a change of the physical\nentity's entPhysicalIndex value.\"\"\",\n        }, # column\n        \"entPhysicalAssetID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is a user-assigned asset tracking identifier\n(as specified by a network manager) for the physical entity\nand provides non-volatile storage of this information.\n\nOn the first instantiation of a physical entity, the value\nof entPhysicalAssetID associated with that entity is set to\nthe zero-length string.\n\nNot every physical component will have an asset tracking\nidentifier or even need one.  Physical entities for which\nthe associated value of the entPhysicalIsFRU object is equal\nto 'false(2)' (e.g., the repeater ports within a repeater\nmodule) do not need their own unique asset tracking\nidentifier.  An agent does not have to provide write access\nfor such entities and may instead return a zero-length\nstring.\n\nIf write access is implemented for an instance of\nentPhysicalAssetID and a value is written into the\ninstance, the agent must retain the supplied value in the\nentPhysicalAssetID instance (associated with the same\nphysical entity) for as long as that entity remains\ninstantiated.  This includes instantiations across all\nre-initializations/reboots of the network management system,\nincluding those resulting in a change of the physical\nentity's entPhysicalIndex value.\n\nIf no asset tracking information is associated with the\nphysical component, then this object will contain a\nzero-length string.\"\"\",\n        }, # column\n        \"entPhysicalIsFRU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates whether or not this physical entity\nis considered a 'field replaceable unit' by the vendor.\nIf this object contains the value 'true(1)', then this\nentPhysicalEntry identifies a field replaceable unit.  For\nall entPhysicalEntries that represent components\npermanently contained within a field replaceable unit, the\nvalue 'false(2)' should be returned for this object.\"\"\",\n        }, # column\n        \"entPhysicalMfgDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains the date of manufacturing of the\nmanaged entity.  If the manufacturing date is unknown or\nnot supported, the object is not instantiated.  The special\nvalue '0000000000000000'H may also be returned in this\ncase.\"\"\",\n        }, # column\n        \"entPhysicalUris\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contains identification\ninformation about the physical entity.  The object\ncontains URIs; therefore, the syntax of this object\nmust conform to RFC 3986, Section 3.\n\nMultiple URIs may be present and are separated by white\nspace characters.  Leading and trailing white space\ncharacters are ignored.\n\nIf no URI identification information is known\nabout the physical entity, the object is not\ninstantiated.  A zero-length octet string may also be\nreturned in this case.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 3986, Uniform Resource Identifiers (URI): Generic\nSyntax, Section 2, August 1998.\"\"\",\n        }, # column\n        \"entPhysicalUUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UUID-TC-MIB\", \"name\" : \"UUIDorZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains identification information\nabout the physical entity.  The object contains a\nUniversally Unique Identifier, the syntax of this object\nmust conform to RFC 4122, Section 4.1.\n\nA zero-length octet string is returned if no UUID\ninformation is known.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4122, A Universally Unique IDentifier (UUID) URN\nNamespace, Section 4.1, July 2005.\"\"\",\n        }, # column\n        \"entityLogical\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2\",\n        }, # node\n        \"entLogicalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row per logical entity.  For agents\nthat implement more than one naming scope, at least one\nentry must exist.  Agents that instantiate all MIB objects\nwithin a single naming scope are not required to implement\nthis table.\"\"\",\n        }, # table\n        \"entLogicalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entLogicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular logical entity.  Entities\nmay be managed by this agent or other SNMP agents (possibly)\nin the same chassis.\"\"\",\n        }, # row\n        \"entLogicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value of this object uniquely identifies the logical\nentity.  The value should be a small positive integer; index\nvalues for different logical entities are not necessarily\ncontiguous.\"\"\",\n        }, # column\n        \"entLogicalDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the logical entity.  This object\nshould contain a string that identifies the manufacturer's\nname for the logical entity and should be set to a distinct\nvalue for each version of the logical entity.\"\"\",\n        }, # column\n        \"entLogicalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the type of logical entity.  This will\ntypically be the OBJECT IDENTIFIER name of the node in the\nSMI's naming hierarchy that represents the major MIB\nmodule, or the majority of the MIB modules, supported by the\nlogical entity.  For example:\n   a logical entity of a regular host/router -> mib-2\n   a logical entity of a 802.1d bridge -> dot1dBridge\n   a logical entity of a 802.3 repeater -> snmpDot3RptrMgmt\nIf an appropriate node in the SMI's naming hierarchy cannot\nbe identified, the value 'mib-2' should be used.\"\"\",\n        }, # column\n        \"entLogicalCommunity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An SNMPv1 or SNMPv2c community string, which can be used to\naccess detailed management information for this logical\nentity.  The agent should allow read access with this\ncommunity string (to an appropriate subset of all managed\nobjects) and may also return a community string based on the\nprivileges of the request used to read this object.  Note\nthat an agent may return a community string with read-only\nprivileges, even if this object is accessed with a\n\nread-write community string.  However, the agent must take\ncare not to return a community string that allows more\nprivileges than the community string used to access this\nobject.\n\nA compliant SNMP agent may wish to conserve naming scopes by\nrepresenting multiple logical entities in a single 'default'\nnaming scope.  This is possible when the logical entities,\nrepresented by the same value of entLogicalCommunity, have\nno object instances in common.  For example, 'bridge1' and\n'repeater1' may be part of the main naming scope, but at\nleast one additional community string is needed to represent\n'bridge2' and 'repeater2'.\n\nLogical entities 'bridge1' and 'repeater1' would be\nrepresented by sysOREntries associated with the 'default'\nnaming scope.\n\nFor agents not accessible via SNMPv1 or SNMPv2c, the value\nof this object is the empty string.  This object may also\ncontain an empty string if a community string has not yet\nbeen assigned by the agent or if no community string with\nsuitable access rights can be returned for a particular SNMP\nrequest.\n\nNote that this object is deprecated.  Agents that implement\nSNMPv3 access should use the entLogicalContextEngineID and\nentLogicalContextName objects to identify the context\nassociated with each logical entity.  SNMPv3 agents may\nreturn a zero-length string for this object or may continue\nto return a community string (e.g., tri-lingual agent\nsupport).\"\"\",\n        }, # column\n        \"entLogicalTAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The transport service address by which the logical entity\nreceives network management traffic, formatted according to\nthe corresponding value of entLogicalTDomain.\n\nFor snmpUDPDomain, a TAddress is 6 octets long: the initial\n4 octets contain the IP-address in network-byte order, and\nthe last 2 contain the UDP port in network-byte order.\nConsult RFC 3417 for further information on snmpUDPDomain.\"\"\",\n            \"reference>\" :\n                \"\"\"Transport Mappings for the Simple Network Management\nProtocol (SNMP), STD 62, RFC 3417.\"\"\",\n        }, # column\n        \"entLogicalTDomain\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TDomain\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the kind of transport service by which the\nlogical entity receives network management traffic.\nPossible values for this object are presently found in\nRFC 3417.\"\"\",\n            \"reference>\" :\n                \"\"\"Transport Mappings for the Simple Network Management\nProtocol (SNMP), STD 62, RFC 3417.\"\"\",\n        }, # column\n        \"entLogicalContextEngineID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"SnmpEngineIdOrNone\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The authoritative contextEngineID that can be used to send\nan SNMP message concerning information held by this logical\nentity to the address specified by the associated\n'entLogicalTAddress/entLogicalTDomain' pair.\n\nThis object, together with the associated\nentLogicalContextName object, defines the context associated\nwith a particular logical entity and allows access to SNMP\nengines identified by a contextEngineID and contextName\npair.\n\nIf no value has been configured by the agent, a zero-length\nstring is returned, or the agent may choose not to\ninstantiate this object at all.\"\"\",\n        }, # column\n        \"entLogicalContextName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The contextName that can be used to send an SNMP message\nconcerning information held by this logical entity to the\naddress specified by the associated\n'entLogicalTAddress/entLogicalTDomain' pair.\n\nThis object, together with the associated\nentLogicalContextEngineID object, defines the context\nassociated with a particular logical entity and allows\naccess to SNMP engines identified by a contextEngineID and\ncontextName pair.\n\nIf no value has been configured by the agent, a zero-length\nstring is returned, or the agent may choose not to\ninstantiate this object at all.\"\"\",\n        }, # column\n        \"entityMapping\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3\",\n        }, # node\n        \"entLPMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains zero or more rows of logical entity to\nphysical equipment associations.  For each logical entity\nknown by this agent, there are zero or more mappings to the\nphysical resources, which are used to realize that logical\nentity.\n\nAn agent should limit the number and nature of entries in\nthis table such that only meaningful and non-redundant\ninformation is returned.  For example, in a system that\ncontains a single power supply, mappings between logical\nentities and the power supply are not useful and should not\nbe included.\n\nAlso, only the most appropriate physical component, which is\nclosest to the root of a particular containment tree, should\nbe identified in an entLPMapping entry.\n\nFor example, suppose a bridge is realized on a particular\nmodule, and all ports on that module are ports on this\nbridge.  A mapping between the bridge and the module would\nbe useful, but additional mappings between the bridge and\neach of the ports on that module would be redundant (because\nthe entPhysicalContainedIn hierarchy can provide the same\ninformation).  On the other hand, if more than one bridge\nwere utilizing ports on this module, then mappings between\neach bridge and the ports it used would be appropriate.\n\nAlso, in the case of a single backplane repeater, a mapping\nfor the backplane to the single repeater entity is not\nnecessary.\"\"\",\n        }, # table\n        \"entLPMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entLogicalIndex\",\n                \"entLPPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular logical-entity-to-physical-\nequipment association.  Note that the nature of the\nassociation is not specifically identified in this entry.\nIt is expected that sufficient information exists in the\nMIB modules used to manage a particular logical entity to\ninfer how physical component information is utilized.\"\"\",\n        }, # row\n        \"entLPPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of this object identifies the index value of a\nparticular entPhysicalEntry associated with the indicated\nentLogicalEntity.\"\"\",\n        }, # column\n        \"entAliasMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains zero or more rows, representing\nmappings of logical entities and physical components to\nexternal MIB identifiers.  Each physical port in the system\nmay be associated with a mapping to an external identifier,\nwhich itself is associated with a particular logical\n\nentity's naming scope.  A 'wildcard' mechanism is provided\nto indicate that an identifier is associated with more than\none logical entity.\"\"\",\n        }, # table\n        \"entAliasMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"entAliasLogicalIndexOrZero\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular binding between a\nlogical entity/physical component pair and an external\nidentifier.  Each logical entity/physical component pair\nmay be associated with one alias mapping.\nThe logical entity index may also be used as\na 'wildcard' (refer to the entAliasLogicalIndexOrZero object\nDESCRIPTION clause for details.)\n\nNote that only entPhysicalIndex values that represent\nphysical ports (i.e., associated entPhysicalClass value is\n'port(10)') are permitted to exist in this table.\"\"\",\n        }, # row\n        \"entAliasLogicalIndexOrZero\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value of this object identifies the logical entity\nthat defines the naming scope for the associated instance\nof the entAliasMappingIdentifier object.\n\nIf this object has a non-zero value, then it identifies the\nlogical entity named by the same value of entLogicalIndex.\n\nIf this object has a value of zero, then the mapping between\nthe physical component and the alias identifier for this\nentAliasMapping entry is associated with all unspecified\nlogical entities.  That is, a value of zero (the default\nmapping) identifies any logical entity that does not have\nan explicit entry in this table for a particular\nentPhysicalIndex/entAliasMappingIdentifier pair.\n\nFor example, to indicate that a particular interface (e.g.,\nphysical component 33) is identified by the same value of\nifIndex for all logical entities, the following instance\nmight exist:\n\n        entAliasMappingIdentifier.33.0 = ifIndex.5\n\nIn the event an entPhysicalEntry is associated differently\nfor some logical entities, additional entAliasMapping\nentries may exist, e.g.:\n\n        entAliasMappingIdentifier.33.0 = ifIndex.6\n        entAliasMappingIdentifier.33.4 =  ifIndex.1\n        entAliasMappingIdentifier.33.5 =  ifIndex.1\n        entAliasMappingIdentifier.33.10 = ifIndex.12\n\nNote that entries with non-zero entAliasLogicalIndexOrZero\nindex values have precedence over zero-indexed entries.  In\nthis example, all logical entities except 4, 5, and 10\nassociate physical entity 33 with ifIndex.6.\"\"\",\n        }, # column\n        \"entAliasMappingIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of this object identifies a particular conceptual\nrow associated with the indicated entPhysicalIndex and\nentLogicalIndex pair.\n\nBecause only physical ports are modeled in this table, only\nentries that represent interfaces or ports are allowed.  If\nan ifEntry exists on behalf of a particular physical port,\nthen this object should identify the associated ifEntry.\nFor repeater ports, the appropriate row in the\n'rptrPortGroupTable' should be identified instead.\n\nFor example, suppose a physical port was represented by\nentPhysicalEntry.3, entLogicalEntry.15 existed for a\nrepeater, and entLogicalEntry.22 existed for a bridge.  Then\nthere might be two related instances of\nentAliasMappingIdentifier:\n\n   entAliasMappingIdentifier.3.15 == rptrPortGroupIndex.5.2\n   entAliasMappingIdentifier.3.22 == ifIndex.17\n\nIt is possible that other mappings (besides interfaces and\nrepeater ports) may be defined in the future, as required.\n\nBridge ports are identified by examining the Bridge MIB and\nappropriate ifEntries associated with each 'dot1dBasePort'\nand are thus not represented in this table.\"\"\",\n        }, # column\n        \"entPhysicalContainsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that exposes the container/'containee'\nrelationships between physical entities.  This table\nprovides all the information found by constructing the\nvirtual containment tree for a given entPhysicalTable, but\nin a more direct format.\n\nIn the event a physical entity is contained by more than one\nother physical entity (e.g., double-wide modules), this\ntable should include these additional mappings, which cannot\nbe represented in the entPhysicalTable virtual containment\ntree.\"\"\",\n        }, # table\n        \"entPhysicalContainsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n                \"entPhysicalChildIndex\",\n            ],\n            \"description\" :\n                \"\"\"A single container/'containee' relationship.\"\"\",\n        }, # row\n        \"entPhysicalChildIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-MIB\", \"name\" : \"PhysicalIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of entPhysicalIndex for the contained physical\nentity.\"\"\",\n        }, # column\n        \"entityGeneral\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.4\",\n        }, # node\n        \"entLastChangeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time a conceptual row is\ncreated, modified, or deleted in any of these tables:\n        - entPhysicalTable\n        - entLogicalTable\n        - entLPMappingTable\n        - entAliasMappingTable\n        - entPhysicalContainsTable\"\"\",\n        }, # scalar\n        \"entityMIBTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.2\",\n        }, # node\n        \"entityMIBTrapPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.2.0\",\n        }, # node\n        \"entityConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3\",\n        }, # node\n        \"entityCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1\",\n        }, # node\n        \"entityGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"entConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"An entConfigChange notification is generated when the value\nof entLastChangeTime changes.  It can be utilized by an NMS\nto trigger logical/physical entity table maintenance polls.\n\nAn agent should not generate more than one entConfigChange\n'notification-event' in a given time interval (five seconds\nis the suggested default).  A 'notification-event' is the\ntransmission of a single trap or inform PDU to a list of\nnotification destinations.\n\nIf additional configuration changes occur within the\nthrottling period, then notification-events for these\nchanges should be suppressed by the agent until the current\nthrottling period expires.  At the end of a throttling\nperiod, one notification-event should be generated if any\nconfiguration changes occurred since the start of the\nthrottling period.  In such a case, another throttling\nperiod is started right away.\n\nAn NMS should periodically check the value of\nentLastChangeTime to detect any missed entConfigChange\nnotification-events, e.g., due to throttling or transmission\nloss.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"entityPhysicalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhysicalDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalVendorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalContainedIn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalClass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalParentRelPos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent physical\nsystem components for which a single agent provides\nmanagement information.\"\"\",\n        }, # group\n        \"entityLogicalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"entLogicalDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalCommunity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalTAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalTDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent the list of\nlogical entities for which a single agent provides\nmanagement information.\"\"\",\n        }, # group\n        \"entityMappingGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entLPPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entAliasMappingIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalChildIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent the\nassociations between multiple logical entities, physical\ncomponents, interfaces, and port identifiers for which a\nsingle agent provides management information.\"\"\",\n        }, # group\n        \"entityGeneralGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entLastChangeTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent general entity\ninformation for which a single agent provides management\ninformation.\"\"\",\n        }, # group\n        \"entityNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entConfigChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of notifications used to indicate Entity MIB\ndata consistency and general status information.\"\"\",\n        }, # group\n        \"entityPhysical2Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhysicalHardwareRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalFirmwareRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalSoftwareRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalSerialNum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalMfgName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalModelName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalAlias\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalAssetID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalIsFRU\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent physical\nsystem components for which a single agent provides\nmanagement information.  This group augments the objects\ncontained in the entityPhysicalGroup.\"\"\",\n        }, # group\n        \"entityLogical2Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entLogicalDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalTAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalTDomain\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalContextEngineID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entLogicalContextName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent the\nlist of logical entities for which a single SNMP entity\nprovides management information.\"\"\",\n        }, # group\n        \"entityPhysical3Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhysicalMfgDate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalUris\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent physical\nsystem components for which a single agent provides\nmanagement information.  This group augments the objects\ncontained in the entityPhysicalGroup.\"\"\",\n        }, # group\n        \"entityPhysical4Group\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhysicalUUID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent physical\nsystem components for which a single agent provides\nmanagement information.  This group augments the objects\ncontained in the entityPhysicalGroup and\nentityPhysicalCRGroup.\"\"\",\n        }, # group\n        \"entityPhysicalCRGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhysicalClass\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entPhysicalName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects used to represent physical\nsystem components for constrained resourced devices,\nfor which a single agent provides management\ninformation.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"entityCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that implement\nversion 1 of the Entity MIB.\"\"\",\n            \"requires\" : {\n                \"entityPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityLogicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityMappingGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityGeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"entity2Compliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that implement\nversion 2 of the Entity MIB.\"\"\",\n            \"requires\" : {\n                \"entityPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical2Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityGeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityLogical2Group\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is not mandatory for agents\nthat model all MIB object instances within a single naming\nscope.\"\"\",\n                },\n                \"entityMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of the entPhysicalContainsTable is mandatory\nfor all agents.  Implementation of the entLPMappingTable and\nentAliasMappingTables are not mandatory for agents that\nmodel all MIB object instances within a single naming scope.\n\nNote that the entAliasMappingTable may be useful for all\nagents; however, implementation of the entityLogicalGroup or\nentityLogical2Group is required to support this table.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entPhysicalSerialNum\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot identify serial number information for physical\nentities and/or cannot provide non-volatile storage for\nNMS-assigned serial numbers.\n\nWrite access is not required for agents that can identify\nserial number information for physical entities but cannot\nprovide non-volatile storage for NMS-assigned serial\nnumbers.\n\nWrite access is not required for physical entities for which\nthe associated value of the entPhysicalIsFRU object is equal\nto 'false(2)'.\"\"\",\n                },\n                \"entPhysicalAlias\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is required only if the associated\nentPhysicalClass value is equal to 'chassis(3)'.\"\"\",\n                },\n                \"entPhysicalAssetID\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot provide non-volatile storage for NMS-assigned asset\nidentifiers.\n\nWrite access is not required for physical entities for which\nthe associated value of the entPhysicalIsFRU object is equal\nto 'false(2)'.\"\"\",\n                },\n                \"entPhysicalClass\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"IANA-ENTITY-MIB\",\n                                \"type\" : \"IANAPhysicalClass\",\n                            },\n                            \"other\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"unknown\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"chassis\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                            \"backplane\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"container\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"5\"\n                            },\n                            \"powerSupply\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                            \"fan\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"7\"\n                            },\n                            \"sensor\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"8\"\n                            },\n                            \"module\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"9\"\n                            },\n                            \"port\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"10\"\n                            },\n                            \"stack\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"11\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Implementation of the 'cpu(12)' enumeration is not\nrequired.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"entity3Compliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that implement\nversion 3 of the Entity MIB.\"\"\",\n            \"requires\" : {\n                \"entityPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical2Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical3Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityGeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityLogical2Group\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is not mandatory for agents\nthat model all MIB object instances within a single naming\nscope.\"\"\",\n                },\n                \"entityMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of the entPhysicalContainsTable is mandatory\nfor all agents.  Implementation of the entLPMappingTable and\nentAliasMappingTables are not mandatory for agents that\nmodel all MIB object instances within a single naming scope.\n\nNote that the entAliasMappingTable may be useful for all\nagents; however, implementation of the entityLogicalGroup or\nentityLogical2Group is required to support this table.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entPhysicalSerialNum\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot identify serial number information for physical\nentities and/or cannot provide non-volatile storage for\nNMS-assigned serial numbers.\n\nWrite access is not required for agents that can identify\nserial number information for physical entities but cannot\nprovide non-volatile storage for NMS-assigned serial\nnumbers.\n\nWrite access is not required for physical entities for\nwhich the associated value of the entPhysicalIsFRU object\nis equal to 'false(2)'.\"\"\",\n                },\n                \"entPhysicalAlias\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is required only if the associated\nentPhysicalClass value is equal to 'chassis(3)'.\"\"\",\n                },\n                \"entPhysicalAssetID\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot provide non-volatile storage for NMS-assigned asset\nidentifiers.\n\nWrite access is not required for physical entities for which\nthe associated value of entPhysicalIsFRU is equal to\n'false(2)'.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"entity4Compliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that implement\nthe full version 4 (full compliance) of the Entity MIB.\"\"\",\n            \"requires\" : {\n                \"entityPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical2Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical3Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityGeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical4Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityLogical2Group\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of this group is not mandatory for agents\nthat model all MIB object instances within a single naming\nscope.\"\"\",\n                },\n                \"entityMappingGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"ENTITY-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of the entPhysicalContainsTable is mandatory\nfor all agents.  Implementation of the entLPMappingTable and\nentAliasMappingTables are not mandatory for agents that\nmodel all MIB object instances within a single naming scope.\n\nNote that the entAliasMappingTable may be useful for all\nagents; however, implementation of the entityLogicalGroup or\nentityLogical2Group is required to support this table.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"entPhysicalSerialNum\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot identify serial number information for physical\nentities and/or cannot provide non-volatile storage for\nNMS-assigned serial numbers.\n\nWrite access is not required for agents that can identify\nserial number information for physical entities but cannot\nprovide non-volatile storage for NMS-assigned serial\nnumbers.\n\nWrite access is not required for physical entities for\nwhich the associated value of the entPhysicalIsFRU object\nis equal to 'false(2)'.\"\"\",\n                },\n                \"entPhysicalAlias\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is required only if the associated\nentPhysicalClass value is equal to 'chassis(3)'.\"\"\",\n                },\n                \"entPhysicalAssetID\" : {\n                    \"module\" : \"ENTITY-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"Read and write access is not required for agents that\ncannot provide non-volatile storage for NMS-assigned asset\nidentifiers.\n\nWrite access is not required for physical entities for which\nthe associated value of entPhysicalIsFRU is equal to\n'false(2)'.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"entity4CRCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.47.3.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that implement\nversion 4 of the Entity MIB on devices with constrained\nresources.\"\"\",\n            \"requires\" : {\n                \"entityPhysicalCRGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n                \"entityPhysical4Group\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/ENTITY-SENSOR-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python ENTITY-SENSOR-MIB\n\nFILENAME = \"./ENTITY-SENSOR-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n\n    \"ENTITY-SENSOR-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Entity MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"        Andy Bierman\nCisco Systems, Inc.\nTel: +1 408-527-3711\nE-mail: abierman@cisco.com\nPostal: 170 West Tasman Drive\nSan Jose, CA USA 95134\n\nDan Romascanu\nAvaya Inc.\nTel: +972-3-645-8414\nEmail: dromasca@avaya.com\nPostal: Atidim technology Park, Bldg. #3\nTel Aviv, Israel, 61131\n\nK.C. Norseth\nL-3 Communications\nTel: +1 801-594-2809\nEmail: kenyon.c.norseth@L-3com.com\nPostal: 640 N. 2200 West.\n\n\n\nSalt Lake City, Utah 84116-0850\n\nSend comments to <entmib@ietf.org>\nMailing list subscription info:\nhttp://www.ietf.org/mailman/listinfo/entmib \"\"\",\n        \"description\" :\n            \"\"\"This module defines Entity MIB extensions for physical\nsensors.\n\nCopyright (C) The Internet Society (2002). This version\nof this MIB module is part of RFC 3433; see the RFC\nitself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2002-12-16 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of the Entity Sensor MIB module, published\nas RFC 3433.\"\"\",\n            },\n        ),\n        \"identity node\" : \"entitySensorMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entPhysicalIndex\"},\n        {\"module\" : \"ENTITY-MIB\", \"name\" : \"entityPhysicalGroup\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n    ),\n\n    \"typedefs\" : {\n        \"EntitySensorDataType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"voltsAC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"voltsDC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"amperes\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"watts\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"hertz\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"celsius\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"percentRH\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"rpm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"cmm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"truthvalue\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"description\" :\n                \"\"\"An object using this data type represents the Entity Sensor\nmeasurement data type associated with a physical sensor\nvalue. The actual data units are determined by examining an\nobject of this type together with the associated\nEntitySensorDataScale object.\n\nAn object of this type SHOULD be defined together with\nobjects of type EntitySensorDataScale and\nEntitySensorPrecision.  Together, associated objects of\nthese three types are used to identify the semantics of an\nobject of type EntitySensorValue.\n\n\n\n\n\n\nValid values are:\n\n   other(1):        a measure other than those listed below\n   unknown(2):      unknown measurement, or arbitrary,\n                    relative numbers\n   voltsAC(3):      electric potential\n   voltsDC(4):      electric potential\n   amperes(5):      electric current\n   watts(6):        power\n   hertz(7):        frequency\n   celsius(8):      temperature\n   percentRH(9):    percent relative humidity\n   rpm(10):         shaft revolutions per minute\n   cmm(11),:        cubic meters per minute (airflow)\n   truthvalue(12):  value takes { true(1), false(2) }\"\"\",\n        },\n        \"EntitySensorDataScale\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"yocto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"zepto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"atto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"femto\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"pico\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"nano\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"micro\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"milli\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"units\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"kilo\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"mega\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"giga\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"tera\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"exa\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"peta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"zetta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"yotta\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"description\" :\n                \"\"\"An object using this data type represents a data scaling\nfactor, represented with an International System of Units\n(SI) prefix.  The actual data units are determined by\nexamining an object of this type together with the\nassociated EntitySensorDataType object.\n\nAn object of this type SHOULD be defined together with\nobjects of type EntitySensorDataType and\nEntitySensorPrecision.  Together, associated objects of\nthese three types are used to identify the semantics of an\nobject of type EntitySensorValue.\"\"\",\n            \"reference>\" :\n                \"\"\"The International System of Units (SI),\n\n\n\nNational Institute of Standards and Technology,\nSpec. Publ. 330, August 1991.\"\"\",\n        },\n        \"EntitySensorPrecision\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"-8\",\n                \"max\" : \"9\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"-8\",\n                \"max\" : \"9\"\n            },\n            \"description\" :\n                \"\"\"An object using this data type represents a sensor\nprecision range.\n\nAn object of this type SHOULD be defined together with\nobjects of type EntitySensorDataType and\nEntitySensorDataScale.  Together, associated objects of\nthese three types are used to identify the semantics of an\nobject of type EntitySensorValue.\n\nIf an object of this type contains a value in the range 1 to\n9, it represents the number of decimal places in the\nfractional part of an associated EntitySensorValue fixed-\npoint number.\n\nIf an object of this type contains a value in the range -8\nto -1, it represents the number of accurate digits in the\nassociated EntitySensorValue fixed-point number.\n\nThe value zero indicates the associated EntitySensorValue\nobject is not a fixed-point number.\n\nAgent implementors must choose a value for the associated\nEntitySensorPrecision object so that the precision and\n\n\n\naccuracy of the associated EntitySensorValue object is\ncorrectly indicated.\n\nFor example, a physical entity representing a temperature\nsensor that can measure 0 degrees to 100 degrees C in 0.1\ndegree increments, +/- 0.05 degrees, would have an\nEntitySensorPrecision value of '1', an EntitySensorDataScale\nvalue of 'units(9)', and an EntitySensorValue ranging from\n'0' to '1000'.  The EntitySensorValue would be interpreted\nas 'degrees C * 10'.\"\"\",\n        },\n        \"EntitySensorValue\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"-1000000000\",\n                \"max\" : \"1000000000\"\n            },\n            \"description\" :\n                \"\"\"An object using this data type represents an Entity Sensor\nvalue.\nAn object of this type SHOULD be defined together with\nobjects of type EntitySensorDataType, EntitySensorDataScale\nand EntitySensorPrecision.  Together, associated objects of\nthose three types are used to identify the semantics of an\nobject of this data type.\n\nThe semantics of an object using this data type are\ndetermined by the value of the associated\nEntitySensorDataType object.\n\nIf the associated EntitySensorDataType object is equal to\n'voltsAC(3)', 'voltsDC(4)', 'amperes(5)', 'watts(6),\n'hertz(7)', 'celsius(8)', or 'cmm(11)', then an object of\nthis type MUST contain a fixed point number ranging from\n-999,999,999 to +999,999,999.  The value -1000000000\nindicates an underflow error. The value +1000000000\nindicates an overflow error.  The EntitySensorPrecision\nindicates how many fractional digits are represented in the\nassociated EntitySensorValue object.\n\nIf the associated EntitySensorDataType object is equal to\n'percentRH(9)', then an object of this type MUST contain a\nnumber ranging from 0 to 100.\n\nIf the associated EntitySensorDataType object is equal to\n'rpm(10)', then an object of this type MUST contain a number\nranging from -999,999,999 to +999,999,999.\n\nIf the associated EntitySensorDataType object is equal to\n'truthvalue(12)', then an object of this type MUST contain\neither the value 'true(1)' or the value 'false(2)'.\n\n\n\nIf the associated EntitySensorDataType object is equal to\n'other(1)' or unknown(2)', then an object of this type MUST\ncontain a number ranging from -1000000000 to 1000000000.\"\"\",\n        },\n        \"EntitySensorStatus\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unavailable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"nonoperational\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"An object using this data type represents the operational\nstatus of a physical sensor.\n\nThe value 'ok(1)' indicates that the agent can obtain the\nsensor value.\n\nThe value 'unavailable(2)' indicates that the agent\npresently cannot obtain the sensor value.\n\nThe value 'nonoperational(3)' indicates that the agent\nbelieves the sensor is broken.  The sensor could have a hard\nfailure (disconnected wire), or a soft failure such as out-\nof-range, jittery, or wildly fluctuating readings.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"entitySensorMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99\",\n            \"status\" : \"current\",\n        }, # node\n        \"entitySensorObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1\",\n        }, # node\n        \"entPhySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row per physical sensor represented\nby an associated row in the entPhysicalTable.\"\"\",\n        }, # table\n        \"entPhySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"entPhysicalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular physical sensor.\n\n\n\n\n\nAn entry in this table describes the present reading of a\nsensor, the measurement units and scale, and sensor\noperational status.\n\nEntries are created in this table by the agent.  An entry\nfor each physical sensor SHOULD be created at the same time\nas the associated entPhysicalEntry.  An entry SHOULD be\ndestroyed if the associated entPhysicalEntry is destroyed.\"\"\",\n        }, # row\n        \"entPhySensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-SENSOR-MIB\", \"name\" : \"EntitySensorDataType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of data returned by the associated\nentPhySensorValue object.\n\nThis object SHOULD be set by the agent during entry\ncreation, and the value SHOULD NOT change during operation.\"\"\",\n        }, # column\n        \"entPhySensorScale\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-SENSOR-MIB\", \"name\" : \"EntitySensorDataScale\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The exponent to apply to values returned by the associated\nentPhySensorValue object.\n\nThis object SHOULD be set by the agent during entry\ncreation, and the value SHOULD NOT change during operation.\"\"\",\n        }, # column\n        \"entPhySensorPrecision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-SENSOR-MIB\", \"name\" : \"EntitySensorPrecision\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of decimal places of precision in fixed-point\nsensor values returned by the associated entPhySensorValue\nobject.\n\nThis object SHOULD be set to '0' when the associated\nentPhySensorType value is not a fixed-point type: e.g.,\n'percentRH(9)', 'rpm(10)', 'cmm(11)', or 'truthvalue(12)'.\n\nThis object SHOULD be set by the agent during entry\ncreation, and the value SHOULD NOT change during operation.\"\"\",\n        }, # column\n        \"entPhySensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-SENSOR-MIB\", \"name\" : \"EntitySensorValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The most recent measurement obtained by the agent for this\nsensor.\n\nTo correctly interpret the value of this object, the\nassociated entPhySensorType, entPhySensorScale, and\nentPhySensorPrecision objects must also be examined.\"\"\",\n        }, # column\n        \"entPhySensorOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ENTITY-SENSOR-MIB\", \"name\" : \"EntitySensorStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the sensor.\"\"\",\n        }, # column\n        \"entPhySensorUnitsDisplay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the data units that should be used\nin the display of entPhySensorValue.\"\"\",\n        }, # column\n        \"entPhySensorValueTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time the status and/or value\nof this sensor was last obtained by the agent.\"\"\",\n        }, # column\n        \"entPhySensorValueUpdateRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"An indication of the frequency that the agent updates the\nassociated entPhySensorValue object, representing in\nmilliseconds.\n\nThe value zero indicates:\n\n    - the sensor value is updated on demand (e.g.,\n      when polled by the agent for a get-request),\n    - the sensor value is updated when the sensor\n      value changes (event-driven),\n    - the agent does not know the update rate.\"\"\",\n        }, # column\n        \"entitySensorConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.3\",\n        }, # node\n        \"entitySensorCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.3.1\",\n        }, # node\n        \"entitySensorGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.3.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"entitySensorValueGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"entPhySensorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorScale\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorPrecision\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorUnitsDisplay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorValueTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entPhySensorValueUpdateRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing physical entity sensor\ninformation.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"entitySensorCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"ENTITY-SENSOR-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.99.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Describes the requirements for conformance to the Entity\nSensor MIB module.\"\"\",\n            \"requires\" : {\n                \"entitySensorValueGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-SENSOR-MIB\"\n                },\n                \"entityPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"ENTITY-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/EXTREME-VLAN-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python EXTREME-VLAN-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/extreme.mib\"\n\nMIB = {\n    \"moduleName\" : \"EXTREME-VLAN-MIB\",\n\n    \"EXTREME-VLAN-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Extreme Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"www.extremenetworks.com\"\"\",\n        \"description\" :\n            \"\"\"Extreme Virtual LAN objects\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"1905-06-24 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"extremeVlan\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"EXTREME-BASE-MIB\", \"name\" : \"extremeAgent\"},\n        {\"module\" : \"EXTREME-BASE-MIB\", \"name\" : \"PortList\"},\n        {\"module\" : \"EXTREME-SYSTEM-MIB\", \"name\" : \"extremeSlotNumber\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n    ),\n\n    \"typedefs\" : {\n        \"ExtremeVlanType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"vlanLayer2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n        },\n        \"ExtremeVlanEncapsType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"vlanEncaps8021q\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"vlanEncapsNone\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"extremeVlan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2\",\n            \"status\" : \"current\",\n        }, # node\n        \"extremeVlanGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1\",\n        }, # node\n        \"extremeVlanGlobalMappingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"This table lists VLAN interfaces that are globally\nidentified.  A single entry exists in this list for\neach VLAN interface in the system that is bound to\na global identifier.\"\"\",\n        }, # table\n        \"extremeVlanGlobalMappingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanGlobalMappingIdentifier\",\n            ],\n            \"description\" :\n                \"\"\"An individual VLAN interface global mapping entry.\nEntries in this table are created by setting the\nextremeVlanIfGlobalIdentifier object in the\nextremeVlanIfTable to a non-zero value.\"\"\",\n        }, # row\n        \"extremeVlanGlobalMappingIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index into the extremeVlanGlobalMappingTable and an\nadministratively assigned global VLAN identifier.  The\nvalue of this object globally identifies the VLAN interface.\nFor VLAN interfaces, on different network devices, which are\npart of the same globally identified VLAN, the value of this\nobject will be the same.\"\"\",\n        }, # column\n        \"extremeVlanGlobalMappingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of extremeVlanIfIndex for the VLAN interface in the\nextremeVlanIfTable, which is bound to the global identifier\nspecified by this entry.\"\"\",\n        }, # column\n        \"extremeVlanIfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists VLAN interfaces that exist within\na device.  A single entry exists in this list for each\nVLAN interface in the system.  A VLAN interface may\nbe created, destroyed and/or mapped to a globally \nidentified vlan.\"\"\",\n        }, # table\n        \"extremeVlanIfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An individual VLAN interface entry.  When an NMS wishes\nto create a new entry in this table, it must obtain a \nnon-zero index from the extremeNextAvailableVirtIfIndex\nobject.  Row creation in this table will fail if the\nchosen index value does not match the current value \nreturned from the extremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # row\n        \"extremeVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The index value of this row and the vlan's ifIndex in the\nifTable. The NMS obtains the index value for this row by\nreading the extremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # column\n        \"extremeVlanIfDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is a description of the VLAN interface.\"\"\",\n        }, # column\n        \"extremeVlanIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-VLAN-MIB\", \"name\" : \"ExtremeVlanType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN interface type.\"\"\",\n        }, # column\n        \"extremeVlanIfGlobalIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An administratively assigned global VLAN identifier.  For\nVLAN interfaces, on different network devices, which are\npart of the same globally identified VLAN, the value of this\nobject will be the same.  \n\nThe binding between a global identifier and a VLAN \ninterface can be created or removed.  To create a binding\nan NMS must write a non-zero value to this object.  To\ndelete a binding, the NMS must write a zero to this\nobject. The value 1 is reserved for the default VLAN and\nthis cannot be deleted or re-assigned.\"\"\",\n        }, # column\n        \"extremeVlanIfStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status column for this VLAN interface. \nThis OBJECT can be set to:\n    active(1)\n    createAndGo(4)\n    createAndWait(5)\n    destroy(6)\n\nThe following values may be read:\n    active(1)\n    notInService(2)\n    notReady(3).\n\nSetting this object to createAndGo(4) causes the agent\nto attempt to create and commit the row based on \nthe contents of the objects in the row.  If all necessary\ninformation is present in the row and the values are\nacceptible to the agent, the agent will change the \nstatus to active(1).  If any of the necessary objects  \nare not available, the agent will reject the creation\nrequest.    \n\nSetting this object to createAndWait(5) causes a row\nin this table to be created.  The agent sets the\nstatus to notInService(2) if all of the information is\npresent in the row and the values are acceptable to the\nagent; otherwise, the agent sets the status to notReady(3).\n\nSetting this object to active(1) is only valid when\nthe current status is active(1) or notInService(2).  \n\nWhen the state of the row transitions is set to active(1),\nthe agent creates the corresponding row in the ifTable.\n\nSetting this object to destroy(6) will remove the\ncorresponding VLAN interface, remove the entry in this\ntable, and the corresponding entries in the\nextremeVlanGlobalMappingTable and the ifTable.\n\nIn order for a set of this object to destroy(6) to succeed,\nall dependencies on this row must have been removed. These\nwill include any stacking dependencies in the ifStackTable\nand any protocol specific tables dependencies.\"\"\",\n        }, # column\n        \"extremeVlanIfIgnoreStpFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable STP for this VLAN interface. Setting this\nobject to true will cause the ports on this VLAN to ignore\nSTP BPDUs. When a vlan is first created, the Default value \nis FALSE, which means that the VLAN uses STP port information\"\"\",\n        }, # column\n        \"extremeVlanIfIgnoreBpduFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to true causes this VLAN's BPDU's to be ignored by \nthe Spanning Tree process. This can be used to keep the root bridge within \none's own network when external switches also fall within the same Spanning \nTree Domain. When a vlan is first created, the Default value is FALSE.\"\"\",\n        }, # column\n        \"extremeVlanIfLoopbackModeFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to true causes loopback mode to be enabled on this VLAN.\"\"\",\n        }, # column\n        \"extremeVlanIfVlanId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4095\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VLAN ID of this VLAN.\"\"\",\n        }, # column\n        \"extremeVlanIfEncapsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-VLAN-MIB\", \"name\" : \"ExtremeVlanEncapsType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The encapsulation algorithm used when encapsulating\npackets transmitted, or de-encapsulating packets\nreceived through this interface.\"\"\",\n        }, # column\n        \"extremeVlanIfAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable this VLAN interface. Setting this\nobject to true will administratively enable this VLAN.\"\"\",\n        }, # column\n        \"extremeVirtualGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.2\",\n        }, # node\n        \"extremeNextAvailableVirtIfIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the next available virtual ifIndex.  This\nobject is used by an NMS to select an index value \nfor row-creation in tables indexed by ifIndex.  The \ncurrent value of this object is changed to a new\nvalue when the current value is written to an agent's\ntable, that is indexed by ifIndex.  Row creation\nusing the current value of this object, allocates\na virtual ifIndex.  Note the following:\n\n1. A newly created row does not have to be active(1)\n   for the agent to allocate the virtual ifIndex.\n\n2. Race conditions between multiple NMS's end when\n   a row is created.  Rows are deemed created when\n   a setRequest is successfully committed (i.e.\n   the errorStats is noError(0)).\n\n3.  An agent that exhausts its supply of virual\n   ifIndex values returns zero as the value of this\n   object. This can be used by an NMS as an indication\n   to deleted unused rows and reboot the device.\"\"\",\n        }, # scalar\n        \"extremeEncapsulationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3\",\n        }, # node\n        \"extremeVlanEncapsIfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists VLAN encapsulation interfaces that\nexist within a device.  A single entry exists in this\nlist for each VLAN encapsulation interface in the\nsystem.  A VLAN encapsulation interface may be created\nor destroyed.\"\"\",\n        }, # table\n        \"extremeVlanEncapsIfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanEncapsIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An individual VLAN encapsulation interface entry. \nWhen an NMS wishes to create a new entry in this table,\nit must obtain a non-zero index from the\nextremeNextAvailableVirtIfIndex object.  Row creation\nin this table will fail if the chosen index value does\nnot match the current value returned from the\nextremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # row\n        \"extremeVlanEncapsIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The index value of this row and the encapsulation\ninterface's ifIndex in the ifTable.  The NMS obtains\nthe index value used for creating a row in this table\nby reading the extremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # column\n        \"extremeVlanEncapsIfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-VLAN-MIB\", \"name\" : \"ExtremeVlanEncapsType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The encapsulation algorithm used when encapsulating\npackets transmitted, or de-encapsulating packets\nreceived through this interface.\"\"\",\n        }, # column\n        \"extremeVlanEncapsIfTag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The tag used when encapsulating packets transmitted,\nor de-encapsulating packets received through this\ninterface.\"\"\",\n        }, # column\n        \"extremeVlanEncapsIfStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status for this VLAN encapsulation interface. \n\nThis OBJECT can be set to:\n\n    active(1)\n    createAndGo(4)\n    createAndWait(5)\n    destroy(6)\n\nThe following values may be read:\n    active(1)\n    notReady(3).\n\nIn order for a row to become active, the NMS must set\nextremeVlanEncapsIfTagType and extremeVlanEncapsIfTag\nto some valid and consistent values.  \n\nSetting this object to createAndGo(4) causes the agent\nto attempt to create and commit the row based on the\ncontents of the objects in the row. If all necessary\ninformation is present in the row, the agent will\ncreate the row and change the status to active(1).  If\nany of the necessary objects are not available, or\nspecify an invalid configuration, the row will not be\ncreated and the agent will return an appropriate error.\n\nSetting this object to createAndWait(5) causes a row in\nin this table to be created.  If all necessary objects\nin the row have been assigned values and specify a\nvalid configuration, the status of the row will be set\nto notInService(2); otherwise, the status will be set\nto notReady(3).  \n\nThis object may only be set to createAndGo(4) or\ncreateAndWait(5) if it does not exist.\n\nSetting this object to active(1) when the status is\nnotInService(2) causes the agent to commit the\nrow.  Setting this object to active(1) when its value\nis already active(1) is a no-op.\n\nSetting this object to destroy(6) will remove the\ncorresponding VLAN encapsulation interface, remove the\nentry in this table, and remove the corresponding entry\nin the ifTable.\n\nIn order for a set of this object to destroy(6) to\nsucceed, all dependencies on this row must have been\nremoved.  These will include any references to this\ninterface in the ifStackTable.\"\"\",\n        }, # column\n        \"extremeVlanIpGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4\",\n        }, # node\n        \"extremeVlanIpTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of IP VLAN interface information\nentries.  Entries in this table are related\nto entries in the extremeVlanIfTable by using the\nsame index.\"\"\",\n        }, # table\n        \"extremeVlanIpEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"A extremeVlanIpEntry contains layer 3\ninformation about a particular IP VLAN\ninterface.\"\"\",\n        }, # row\n        \"extremeVlanIpNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP network number for the IP VLAN interface defined\nin the extremeVlanIfTable identified with the same index.\"\"\",\n        }, # column\n        \"extremeVlanIpNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP network mask corresponding to the IP Network\naddress defined by extremeVlanIpIpNetAddress.  \"\"\",\n        }, # column\n        \"extremeVlanIpStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status column for this IP VLAN entry.\nThis object can be set to:\n    active(1)\n    createAndGo(4)\n    destroy(6)\n\nThe following values may be read:\n    active(1)\n\nSetting this object to active(1) or createAndGo(4) causes \nthe agent to attempt to create and commit the row based on \nthe contents of the objects in the row.  If all necessary\ninformation is present in the row and the values are\nacceptible to the agent, the agent will change the \nstatus to active(1).  If any of the necessary objects  \nare not available, the agent will reject the row \ncreation request.\n\nSetting this object to createAndWait(5) is not supported.\n\nWhen the status changes to active(1), the agent applies the\nIP parmeters to the IP VLAN interface identified by the\ncorresponding value of the extremeVlanIpIndex object.\n\nSetting this object to destroy(6) will remove the IP\nparmeters from the IP VLAN interface and remove the\nentry from this table.\"\"\",\n        }, # column\n        \"extremeVlanIpForwardingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the IP Forwarding  on this Vlan is\nEnable or not. A true value indicates that the Vlan is\nEnable.\"\"\",\n        }, # column\n        \"extremeProtocolGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5\",\n        }, # node\n        \"extremeVlanProtocolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of defined combinations of protocol IDs \nthat make up one protocol definition name. \nAll members of one protocol definition share \nthe same extremeVlanProtocolIndex. A given \nprotocol ID may appear in the definition of \njust one protocol definition. This table will\ntypically contain some default entries for\npopular protocols chosen by ExtremeWare.\"\"\",\n        }, # table\n        \"extremeVlanProtocolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanProtocolIndex\",\n                \"extremeVlanProtocolIdIndex\",\n            ],\n            \"description\" :\n                \"\"\"One member protocol ID of a protocol definition.\"\"\",\n        }, # row\n        \"extremeVlanProtocolIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index representing a protocol grouping of\nprotocol ID values. A limited number of\nprotocol groupings may be defined (up to 7 \nin ExtremeWare and 16 in EXOS). 0 is used  \nfor internal purposes.\"\"\",\n        }, # column\n        \"extremeVlanProtocolIdIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index representing a particular protocol ID\nwithin a protocol grouping. A limited number of\nprotocol IDs may be defined per \nextremeVlanProtocolIndex (up to 6 in ExtremeWare).\n0 is used for internal purposes.\"\"\",\n        }, # column\n        \"extremeVlanProtocolName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A human-readable string representing this protocol.\nThis string should be the same for all entries\nsharing a given extremeVlanProtocolIndex. \nA ExtremeVlanProtocolEntry with \nextremeVlanProtocolName of ANY represents a match \non all protocols: this entry may not be modified.\"\"\",\n        }, # column\n        \"extremeVlanProtocolDllEncapsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"any\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ethertype\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"llc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"llcSnapEthertype\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Represents the type of data-link encapsulation \nin which the extremeVlanProtocolId protocol ID \nis carried. The value any(1) is used to indicate \na wildcard and matches all encapsulations and \nprotocol IDs that are not explicitly mentioned \nin this table. Entries of type any(1) may not \nbe created. The value none(5) is used to indicate \nthat no protocol IDs match this entry. A value\nof none(5) may not be set by a manager.\"\"\",\n        }, # column\n        \"extremeVlanProtocolId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The protocol ID: for entries of type ethertype(2)\nor llcSnapEthertype(4) this represents a 16-bit\nprotocol ID. For entries of type llc(3) it \nrepresents a concatenation of LLC DSAP+SSAP in\nnetwork byte order. This value is not valid\nfor extremeVlanProtocolDllEncapsType values of\nany(1) or none(5).\"\"\",\n        }, # column\n        \"extremeVlanProtocolStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to\nrow installation and removal conventions.\"\"\",\n        }, # column\n        \"extremeVlanProtocolVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table to apply one of the protocol definitions \nin extremeVlanProtocolTable to a given VLAN \nThis applies to all ports that are untagged \nin this VLAN). A limited number of protocols\nmay be applied simultaneously in one device\n(up to 8 in ExtremeWare).\"\"\",\n        }, # table\n        \"extremeVlanProtocolVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanProtocolVlanIfIndex\",\n                \"extremeVlanProtocolVlanProtocolIndex\",\n            ],\n            \"description\" :\n                \"\"\"A mapping of untagged packets of one protocol \nonto a particular VLAN.\"\"\",\n        }, # row\n        \"extremeVlanProtocolVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The index value of this row and the vlan's ifIndex in the\nifTable. The NMS obtains the index value for this row by\nreading the extremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # column\n        \"extremeVlanProtocolVlanProtocolIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An index representing a protocol grouping of\nprotocol ID values. A limited number of\nprotocol groupings may be defined (up to 7 \nin ExtremeWare).\"\"\",\n        }, # column\n        \"extremeVlanProtocolVlanStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to\nrow installation and removal conventions.\"\"\",\n        }, # column\n        \"extremeVlanProtocolDefTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of defined combinations of protocols and\nDLLEncaps type. This table will\ntypically contain some default entries for\npopular protocols chosen by ExtremeWare.\"\"\",\n        }, # table\n        \"extremeVlanProtocolDefEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanProtocolDefName\",\n                \"extremeVlanProtocolDefDllEncapsType\",\n                \"extremeVlanProtocolDefValue\",\n            ],\n            \"description\" :\n                \"\"\"One member representing combination of protocol and\nDLLEncaps Type.\"\"\",\n        }, # row\n        \"extremeVlanProtocolDefName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A human-readable string representing this protocol.\nA ExtremeVlanProtocolEntry with \nextremeVlanProtocol2Name of ANY represents a match \non all protocols: this entry may not be modified.\"\"\",\n        }, # column\n        \"extremeVlanProtocolDefDllEncapsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"any\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ethertype\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"llc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"llcSnapEthertype\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Represents the type of data-link encapsulation \nin which the protocol designated by \nextremeVlanProtocolDefName is carried. \nThe value any(1) is used to indicate \na wildcard and matches all encapsulations and \nprotocol IDs that are not explicitly mentioned \nin this table. Entries of type any(1) may not \nbe created. The value none(5) is used to indicate \nthat no protocol IDs match this entry. A value\nof none(5) may not be set by a manager.\"\"\",\n        }, # column\n        \"extremeVlanProtocolDefValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The protocol ID: for entries of type ethertype(2)\nor llcSnapEthertype(4) this represents a 16-bit\nprotocol ID. For entries of type llc(3) it \nrepresents a concatenation of LLC DSAP+SSAP in\nnetwork byte order. This value is not valid\nfor extremeVlanProtocolDefDllEncapsType values of\nany(1) or none(5).\"\"\",\n        }, # column\n        \"extremeVlanProtocolDefStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The row status variable, used according to\nrow installation and removal conventions.\"\"\",\n        }, # column\n        \"extremeVlanProtocolBindingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table to apply one of the protocol definitions \nin extremeVlanProtocolDefTable to a given VLAN \nThis applies to all ports that are untagged \nin this VLAN). A limited number of protocols\nmay be applied simultaneously in one device\n(up to 8 in ExtremeWare).\"\"\",\n        }, # table\n        \"extremeVlanProtocolBindingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanProtocolBindingIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"A mapping of untagged packets of one protocol \nonto a particular VLAN.\"\"\",\n        }, # row\n        \"extremeVlanProtocolBindingIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value of this row and the vlan's ifIndex in the\nifTable. The NMS obtains the index value for this row by\nreading the extremeNextAvailableVirtIfIndex object.\"\"\",\n        }, # column\n        \"extremeVlanProtocolBindingName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A human-readable string representing this protocol.\nA ExtremeVlanProtocolBindingEntry with \nextremeVlanProtocolBindingName of ANY represents a \nmatch on all protocols: this entry may not be modified.\"\"\",\n        }, # column\n        \"extremeVlanProtocolBindingStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The row status variable, used according to\nrow installation and removal conventions.\"\"\",\n        }, # column\n        \"extremeVlanOpaqueGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6\",\n        }, # node\n        \"extremeVlanOpaqueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists the ports associated with each VLAN interface.\"\"\",\n        }, # table\n        \"extremeVlanOpaqueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanIfIndex\",\n                \"extremeSlotNumber\",\n            ],\n            \"description\" :\n                \"\"\"This represents the tagged and untagged ports on each slot per vlan.\"\"\",\n        }, # row\n        \"extremeVlanOpaqueTaggedPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-BASE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Each bit in the octet string represents one port.\nA 1 means that the port is a tagged port in that vlan. \nThe bit value for a port is 0 otherwise.\"\"\",\n        }, # column\n        \"extremeVlanOpaqueUntaggedPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-BASE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Each bit in the octet string represents one port.\nA 1 means that the port is an untagged port in that vlan. \nThe bit value for a port is 0 otherwise.\"\"\",\n        }, # column\n        \"extremeVlanOpaqueControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table is used to configure the ports associated with each VLAN \ninterface. The table is  used to add/delete ports on a vlan. The table is\ntransitional in nature and SNMP read operations must not be performed on it. \nUse extremeVlanOpaqueTable for reading the port membership association with vlans\"\"\",\n        }, # table\n        \"extremeVlanOpaqueControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanIfIndex\",\n                \"extremeSlotNumber\",\n            ],\n            \"description\" :\n                \"\"\"This represents a control table entry (command) to configure the tagged \nand untagged ports on each slot per vlan.  The first index of the entry is \nthe ifIndex of the VLAN and second index is the slot number of the ports.\n\nWhen adding untagged ports to a VLAN, those ports maybe not be untagged ports\nfor another VLAN (assuming both VLANs use the ANY protocol filter).  Such \nports must first be deleted from the other VLAN(s) or an error will occur.\n\nThe operation will succeed or fail in its entirety, no partial results on some of the ports.\"\"\",\n        }, # row\n        \"extremeVlanOpaqueControlPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"EXTREME-BASE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The octet string representing a list of ports in\nbitwise form.\"\"\",\n        }, # column\n        \"extremeVlanOpaqueControlOperation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"addTagged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"addUntagged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The operation code for this entry. \naddTagged(1)   = Ports referred to in the extremeVlanOpaqueControlPorts \n                 variable are added as tagged ports to the VLAN indicated\n                 by the index.  The ports belong to the slot number as \n                 indicated by the second index of the variable.\n\naddUntagged(2) = Ports referred to in the extremeVlanOpaqueControlPorts \n                   variable are added as tagged ports to the VLAN indicated\n                   by the index.  The ports belong to the slot number as \n                   indicated by the second index of the variable.\n\ndelete(3)      = Ports referred to in the extremeVlanOpaqueControlPorts \n                  variable are removed from the VLAN indicated by the index.\n                  The ports belong to the slot number as indicated by the\n                  second index of the variable.\"\"\",\n        }, # column\n        \"extremeVlanOpaqueControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry as per standard RowStatus\nconventions. Note however, that only the CreateAndGo \nstate is supported.\"\"\",\n        }, # column\n        \"extremeVlanStackGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.7\",\n        }, # node\n        \"extremeVlanStackTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Represents those components of the ifStackTable that do not\ncontain a Physical interface.\"\"\",\n        }, # table\n        \"extremeVlanStackEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanStackHigherLayer\",\n                \"extremeVlanStackLowerLayer\",\n            ],\n            \"description\" :\n                \"\"\"Each entry in this read-only table defines which interfaces are\non top of which one. All information in the table is also\ncontained in ifStackTable. The Physical interfaces in the \nifStackTable are not represented here.\"\"\",\n        }, # row\n        \"extremeVlanStackHigherLayer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The higher layer in the logical vlan hierarchy.\"\"\",\n        }, # column\n        \"extremeVlanStackLowerLayer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lower layer in the logical vlan hierarchy.\"\"\",\n        }, # column\n        \"extremeVlanStatsGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8\",\n        }, # node\n        \"extremeVlanL2StatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This tables contains per-VLAN layer 2 statistics information.\"\"\",\n        }, # table\n        \"extremeVlanL2StatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"extremeVlanL2StatsIfDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a description(name) of the VLAN.\"\"\",\n        }, # column\n        \"extremeVlanL2StatsPktsToCpu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets of this VLAN sent to the CPU.\"\"\",\n        }, # column\n        \"extremeVlanL2StatsPktsLearnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets learnt on this VLAN.\"\"\",\n        }, # column\n        \"extremeVlanL2StatsIgmpCtrlPktsSnooped\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IGMP control packets snooped on this VLAN.\"\"\",\n        }, # column\n        \"extremeVlanL2StatsIgmpDataPktsSwitched\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IGMP data packets switched on this VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanStatsTable\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeStatsPortIfIndex\",\n                \"extremeStatsVlanNameIndex\",\n            ],\n            \"description\" :\n                \"\"\"Vlan statistics per port.\"\"\",\n        }, # row\n        \"extremeStatsPortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of this table.\"\"\",\n        }, # column\n        \"extremeStatsVlanNameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of this table.\"\"\",\n        }, # column\n        \"extremePortVlanStatsCntrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The flag to decide what fields to display, basic\nor extended. Currently, it is read-only and will\nreflect whatever has been set for the switch\nthrough the cli.\"\"\",\n        }, # column\n        \"extremePortVlanUnicastReceivedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Unicast packets received by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanMulticastReceivedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Multicast packets received by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanBroadcastReceivedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Broadcast packets received by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanTotalReceivedBytesCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of bytes received by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanTotalReceivedFramesCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames received by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanUnicastTransmittedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Unicast packets transmitted by a\nport for a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanMulticastTransmittedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Multicast packets transmitted by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanBroadcastTransmittedPacketsCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Broadcast packets transmitted by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanTotalTransmittedBytesCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of bytes transmitted by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortVlanTotalTransmittedFramesCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of frames transmitted by a port\nfor a particular VLAN.\"\"\",\n        }, # column\n        \"extremePortConfigureVlanStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.8.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to\nrow installation and removal conventions.\"\"\",\n        }, # column\n        \"extremeVlanAggregationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9\",\n        }, # node\n        \"extremeVlanAggregationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the VLAN aggregation information.\"\"\",\n        }, # table\n        \"extremeVlanAggregationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanAggregationSuperVlanIfIndex\",\n                \"extremeVlanAggregationSubVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the individual VLAN aggregation entry.\"\"\",\n        }, # row\n        \"extremeVlanAggregationSuperVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Super Vlan index for this entry.\"\"\",\n        }, # column\n        \"extremeVlanAggregationSubVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sub Vlan index for this entry.\"\"\",\n        }, # column\n        \"extremeVlanAggregationSubVlanStartIpNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This represents the start network address of the IP range.\"\"\",\n        }, # column\n        \"extremeVlanAggregationSubVlanStartIpNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This represents the start network address mask of the IP range\"\"\",\n        }, # column\n        \"extremeVlanAggregationSubVlanEndIpNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This represents the end network address of the IP range.\"\"\",\n        }, # column\n        \"extremeVlanAggregationSubVlanEndIpNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This represents the end network address mask of the IP range.\"\"\",\n        }, # column\n        \"extremeVlanAggregationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\"\"\",\n        }, # column\n        \"extremeVlanAggregationConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the sub VLAN proxy setting information.\"\"\",\n        }, # table\n        \"extremeVlanAggregationConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanAggregationConfigSuperVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the individual VLAN aggregation entry.\"\"\",\n        }, # row\n        \"extremeVlanAggregationConfigSuperVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Super Vlan index for this entry.\"\"\",\n        }, # column\n        \"extremeVlanAggregationConfigSubVlanProxyEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.9.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The boolean flag that prevents normal communication between sub vlans.\"\"\",\n        }, # column\n        \"extremeVlanTranslationGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10\",\n        }, # node\n        \"extremeVlanTranslationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the VLAN translation information.\"\"\",\n        }, # table\n        \"extremeVlanTranslationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"extremeVlanTranslationSuperVlanIfIndex\",\n                \"extremeVlanTranslationMemberVlanIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the individual VLAN translation entry.\"\"\",\n        }, # row\n        \"extremeVlanTranslationSuperVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Super Vlan index for this entry.\"\"\",\n        }, # column\n        \"extremeVlanTranslationMemberVlanIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The member Vlan index for this entry.\"\"\",\n        }, # column\n        \"extremeVlanTranslationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EXTREME-VLAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.1916.1.2.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\"\"\",\n        }, # column\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/EtherLike-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python EtherLike-MIB\n\nFILENAME = \"EtherLike-MIB.txt\"\n\nMIB = {\n    \"moduleName\" : \"EtherLike-MIB\",\n\n    \"EtherLike-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Ethernet Interfaces and Hub MIB\nWorking Group\"\"\",\n        \"contact\" : \n            \"\"\"WG E-mail: hubmib@ietf.org\nTo subscribe: hubmib-request@ietf.org\n\n       Chair: Dan Romascanu\n      Postal: Avaya Inc.\n              Atidum Technology Park, Bldg. 3\n              Tel Aviv 61131\n              Israel\n         Tel: +972 3 645 8414\n      E-mail: dromasca@avaya.com\n\n     Editor: John Flick\n     Postal: Hewlett-Packard Company\n             8000 Foothills Blvd. M/S 5557\n             Roseville, CA 95747-5557\n             USA\n        Tel: +1 916 785 4018\n        Fax: +1 916 785 1199\n     E-mail: johnf@rose.hp.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module to describe generic objects for\nethernet-like network interfaces.\n\nThe following reference is used throughout this\nMIB module:\n\n[IEEE 802.3 Std] refers to:\n   IEEE Std 802.3, 2002 Edition: 'IEEE Standard\n\n   for Information technology -\n   Telecommunications and information exchange\n   between systems - Local and metropolitan\n   area networks - Specific requirements -\n   Part 3: Carrier sense multiple access with\n   collision detection (CSMA/CD) access method\n   and physical layer specifications', as\n   amended by IEEE Std 802.3ae-2002:\n   'Amendment: Media Access Control (MAC)\n   Parameters, Physical Layer, and Management\n   Parameters for 10 Gb/s Operation', August,\n   2002.\n\nOf particular interest is Clause 30, '10 Mb/s,\n100 Mb/s, 1000 Mb/s, and 10 Gb/s Management'.\n\nCopyright (C) The Internet Society (2003).  This\nversion of this MIB module is part of RFC 3635;\nsee the RFC itself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2003-09-19 00:00\",\n                \"description\" :\n                    \"\"\"Updated to include support for 10 Gb/sec\ninterfaces.  This resulted in the following\nrevisions:\n\n- Updated dot3StatsAlignmentErrors and\n  dot3StatsSymbolErrors DESCRIPTIONs to\n  reflect behaviour at 10 Gb/s\n- Added dot3StatsRateControlAbility and\n  dot3RateControlStatus for management\n  of the Rate Control function in 10 Gb/s\n  WAN applications\n- Added 64-bit versions of all counters\n  that are used on high-speed ethernet\n  interfaces\n- Added object groups to contain the new\n  objects\n- Deprecated etherStatsBaseGroup and\n  split into etherStatsBaseGroup2 and\n  etherStatsHalfDuplexGroup, so that\n  interfaces which can only operate at\n  full-duplex do not need to implement\n  half-duplex-only statistics\n- Deprecated dot3Compliance and replaced\n  it with dot3Compliance2, which includes\n  the compliance information for the new\n  object groups\n\nIn addition, the dot3Tests and dot3Errors\nobject identities have been deprecated,\nsince there is no longer a standard method\nfor using them.\n\nThis version published as RFC 3635.\"\"\",\n            },\n            {\n                \"date\" : \"1999-08-24 04:00\",\n                \"description\" :\n                    \"\"\"Updated to include support for 1000 Mb/sec\ninterfaces and full-duplex interfaces.\nThis version published as RFC 2665.\"\"\",\n            },\n            {\n                \"date\" : \"1998-06-03 21:50\",\n                \"description\" :\n                    \"\"\"Updated to include support for 100 Mb/sec\ninterfaces.\nThis version published as RFC 2358.\"\"\",\n            },\n            {\n                \"date\" : \"1994-02-03 04:00\",\n                \"description\" :\n                    \"\"\"Initial version, published as RFC 1650.\"\"\",\n            },\n        ),\n        \"identity node\" : \"etherMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"transmission\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n    ),\n\n    \"nodes\" : {\n        \"dot3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7\",\n        }, # node\n        \"dot3StatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Statistics for a collection of ethernet-like\ninterfaces attached to a particular system.\nThere will be one row in this table for each\nethernet-like interface in the system.\"\"\",\n        }, # table\n        \"dot3StatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3StatsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Statistics for a particular interface to an\nethernet-like medium.\"\"\",\n        }, # row\n        \"dot3StatsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index value that uniquely identifies an\ninterface to an ethernet-like medium.  The\ninterface identified by a particular value of\nthis index is the same interface as identified\nby the same value of ifIndex.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2863, ifIndex\"\"\",\n        }, # column\n        \"dot3StatsAlignmentErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that are not an integral number of\noctets in length and do not pass the FCS check.\n\nThe count represented by an instance of this\nobject is incremented when the alignmentError\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\n\nto the error status presented to the LLC.\n\nThis counter does not increment for group\nencoding schemes greater than 4 bits per group.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsAlignmentErrors object for 10 Gb/s\nor faster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.7,\naAlignmentErrors\"\"\",\n        }, # column\n        \"dot3StatsFCSErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that are an integral number of octets\nin length but do not pass the FCS check.  This\ncount does not include frames received with\nframe-too-long or frame-too-short error.\n\nThe count represented by an instance of this\nobject is incremented when the frameCheckError\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\nto the error status presented to the LLC.\n\nNote:  Coding errors detected by the physical\nlayer for speeds above 10 Mb/s will cause the\nframe to fail the FCS check.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\n\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsFCSErrors object for 10 Gb/s or\nfaster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.6,\naFrameCheckSequenceErrors.\"\"\",\n        }, # column\n        \"dot3StatsSingleCollisionFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are involved in a single\ncollision, and are subsequently transmitted\nsuccessfully.\n\nA frame that is counted by an instance of this\nobject is also counted by the corresponding\ninstance of either the ifOutUcastPkts,\nifOutMulticastPkts, or ifOutBroadcastPkts,\nand is not counted by the corresponding\ninstance of the dot3StatsMultipleCollisionFrames\nobject.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.3,\naSingleCollisionFrames.\"\"\",\n        }, # column\n        \"dot3StatsMultipleCollisionFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are involved in more\n\nthan one collision and are subsequently\ntransmitted successfully.\n\nA frame that is counted by an instance of this\nobject is also counted by the corresponding\ninstance of either the ifOutUcastPkts,\nifOutMulticastPkts, or ifOutBroadcastPkts,\nand is not counted by the corresponding\ninstance of the dot3StatsSingleCollisionFrames\nobject.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.4,\naMultipleCollisionFrames.\"\"\",\n        }, # column\n        \"dot3StatsSQETestErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of times that the SQE TEST ERROR\nis received on a particular interface. The\nSQE TEST ERROR is set in accordance with the\nrules for verification of the SQE detection\nmechanism in the PLS Carrier Sense Function as\ndescribed in IEEE Std. 802.3, 2000 Edition,\nsection 7.2.4.6.\n\nThis counter does not increment on interfaces\noperating at speeds greater than 10 Mb/s, or on\ninterfaces operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 7.2.4.6, also 30.3.2.1.4,\naSQETestErrors.\"\"\",\n        }, # column\n        \"dot3StatsDeferredTransmissions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which the first\ntransmission attempt on a particular interface\nis delayed because the medium is busy.\n\nThe count represented by an instance of this\nobject does not include frames involved in\ncollisions.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.9,\naFramesWithDeferredXmissions.\"\"\",\n        }, # column\n        \"dot3StatsLateCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times that a collision is\ndetected on a particular interface later than\none slotTime into the transmission of a packet.\n\nA (late) collision included in a count\nrepresented by an instance of this object is\nalso considered as a (generic) collision for\npurposes of other collision-related\nstatistics.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.10,\naLateCollisions.\"\"\",\n        }, # column\n        \"dot3StatsExcessiveCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission on a\nparticular interface fails due to excessive\ncollisions.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.11,\naFramesAbortedDueToXSColls.\"\"\",\n        }, # column\n        \"dot3StatsInternalMacTransmitErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission on a\nparticular interface fails due to an internal\nMAC sublayer transmit error. A frame is only\ncounted by an instance of this object if it is\nnot counted by the corresponding instance of\neither the dot3StatsLateCollisions object, the\ndot3StatsExcessiveCollisions object, or the\ndot3StatsCarrierSenseErrors object.\n\nThe precise meaning of the count represented by\nan instance of this object is implementation-\nspecific.  In particular, an instance of this\nobject may represent a count of transmission\nerrors on a particular interface that are not\notherwise counted.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsInternalMacTransmitErrors object for\n10 Gb/s or faster interfaces.\n\nDiscontinuities in the value of this counter can\n\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.12,\naFramesLostDueToIntMACXmitError.\"\"\",\n        }, # column\n        \"dot3StatsCarrierSenseErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times that the carrier sense\ncondition was lost or never asserted when\nattempting to transmit a frame on a particular\ninterface.\n\nThe count represented by an instance of this\nobject is incremented at most once per\ntransmission attempt, even if the carrier sense\ncondition fluctuates during a transmission\nattempt.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.13,\naCarrierSenseErrors.\"\"\",\n        }, # column\n        \"dot3StatsFrameTooLongs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that exceed the maximum permitted\nframe size.\n\nThe count represented by an instance of this\nobject is incremented when the frameTooLong\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\nto the error status presented to the LLC.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 80 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsFrameTooLongs object for 10 Gb/s\nor faster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.25,\naFrameTooLongErrors.\"\"\",\n        }, # column\n        \"dot3StatsInternalMacReceiveErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which reception on a\nparticular interface fails due to an internal\nMAC sublayer receive error. A frame is only\ncounted by an instance of this object if it is\nnot counted by the corresponding instance of\neither the dot3StatsFrameTooLongs object, the\ndot3StatsAlignmentErrors object, or the\ndot3StatsFCSErrors object.\n\nThe precise meaning of the count represented by\nan instance of this object is implementation-\nspecific.  In particular, an instance of this\nobject may represent a count of receive errors\non a particular interface that are not\notherwise counted.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\n\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsInternalMacReceiveErrors object for\n10 Gb/s or faster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.15,\naFramesLostDueToIntMACRcvError.\"\"\",\n        }, # column\n        \"dot3StatsEtherChipSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.17\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"******** THIS OBJECT IS DEPRECATED ********\n\nThis object contains an OBJECT IDENTIFIER\nwhich identifies the chipset used to\nrealize the interface. Ethernet-like\ninterfaces are typically built out of\nseveral different chips. The MIB implementor\nis presented with a decision of which chip\nto identify via this object. The implementor\nshould identify the chip which is usually\ncalled the Medium Access Control chip.\nIf no such chip is easily identifiable,\nthe implementor should identify the chip\nwhich actually gathers the transmit\nand receive statistics and error\nindications. This would allow a\nmanager station to correlate the\nstatistics and the chip generating\nthem, giving it the ability to take\ninto account any known anomalies\nin the chip.\n\nThis object has been deprecated.  Implementation\nfeedback indicates that it is of limited use for\ndebugging network problems in the field, and\nthe administrative overhead involved in\nmaintaining a registry of chipset OIDs is not\njustified.\"\"\",\n        }, # column\n        \"dot3StatsSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For an interface operating at 100 Mb/s, the\nnumber of times there was an invalid data symbol\nwhen a valid carrier was present.\n\nFor an interface operating in half-duplex mode\nat 1000 Mb/s, the number of times the receiving\nmedia is non-idle (a carrier event) for a period\nof time equal to or greater than slotTime, and\nduring which there was at least one occurrence\nof an event that causes the PHY to indicate\n'Data reception error' or 'carrier extend error'\non the GMII.\n\nFor an interface operating in full-duplex mode\nat 1000 Mb/s, the number of times the receiving\nmedia is non-idle (a carrier event) for a period\nof time equal to or greater than minFrameSize,\nand during which there was at least one\noccurrence of an event that causes the PHY to\nindicate 'Data reception error' on the GMII.\n\nFor an interface operating at 10 Gb/s, the\nnumber of times the receiving media is non-idle\n(a carrier event) for a period of time equal to\nor greater than minFrameSize, and during which\nthere was at least one occurrence of an event\nthat causes the PHY to indicate 'Receive Error'\non the XGMII.\n\nThe count represented by an instance of this\nobject is incremented at most once per carrier\nevent, even if multiple symbol errors occur\nduring the carrier event.  This count does\nnot increment if a collision is present.\n\nThis counter does not increment when the\ninterface is operating at 10 Mb/s.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\n\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCStatsSymbolErrors object for 10 Gb/s\nor faster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.2.1.5,\naSymbolErrorDuringCarrier.\"\"\",\n        }, # column\n        \"dot3StatsDuplexStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"halfDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fullDuplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current mode of operation of the MAC\nentity.  'unknown' indicates that the current\nduplex mode could not be determined.\n\nManagement control of the duplex mode is\naccomplished through the MAU MIB.  When\nan interface does not support autonegotiation,\nor when autonegotiation is not enabled, the\nduplex mode is controlled using\nifMauDefaultType.  When autonegotiation is\nsupported and enabled, duplex mode is controlled\nusing ifMauAutoNegAdvertisedBits.  In either\ncase, the currently operating duplex mode is\nreflected both in this object and in ifMauType.\n\nNote that this object provides redundant\ninformation with ifMauType.  Normally, redundant\nobjects are discouraged.  However, in this\ninstance, it allows a management application to\ndetermine the duplex status of an interface\nwithout having to know every possible value of\nifMauType.  This was felt to be sufficiently\nvaluable to justify the redundancy.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.32,\naDuplexStatus.\"\"\",\n        }, # column\n        \"dot3StatsRateControlAbility\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"'true' for interfaces operating at speeds above\n1000 Mb/s that support Rate Control through\nlowering the average data rate of the MAC\nsublayer, with frame granularity, and 'false'\notherwise.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.33,\naRateControlAbility.\"\"\",\n        }, # column\n        \"dot3StatsRateControlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"rateControlOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rateControlOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current Rate Control mode of operation of\nthe MAC sublayer of this interface.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.34,\naRateControlStatus.\"\"\",\n        }, # column\n        \"dot3CollTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A collection of collision histograms for a\nparticular set of interfaces.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.30,\naCollisionFrames.\"\"\",\n        }, # table\n        \"dot3CollEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"dot3CollCount\",\n            ],\n            \"description\" :\n                \"\"\"A cell in the histogram of per-frame\ncollisions for a particular interface.  An\n\ninstance of this object represents the\nfrequency of individual MAC frames for which\nthe transmission (successful or otherwise) on a\nparticular interface is accompanied by a\nparticular number of media collisions.\"\"\",\n        }, # row\n        \"dot3CollCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The number of per-frame media collisions for\nwhich a particular collision histogram cell\nrepresents the frequency on a particular\ninterface.\"\"\",\n        }, # column\n        \"dot3CollFrequencies\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of individual MAC frames for which the\ntransmission (successful or otherwise) on a\nparticular interface occurs after the\nframe has experienced exactly the number\nof collisions in the associated\ndot3CollCount object.\n\nFor example, a frame which is transmitted\non interface 77 after experiencing\nexactly 4 collisions would be indicated\nby incrementing only dot3CollFrequencies.77.4.\nNo other instance of dot3CollFrequencies would\nbe incremented in this example.\n\nThis counter does not increment when the\ninterface is operating in full-duplex mode.\n\nDiscontinuities in the value of this counter can\n\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"dot3Tests\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.6\",\n        }, # node\n        \"dot3TestTdr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.6.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS IDENTITY IS DEPRECATED *******\n\nThe Time-Domain Reflectometry (TDR) test is\nspecific to ethernet-like interfaces of type\n10Base5 and 10Base2.  The TDR value may be\nuseful in determining the approximate distance\nto a cable fault.  It is advisable to repeat\nthis test to check for a consistent resulting\nTDR value, to verify that there is a fault.\n\nA TDR test returns as its result the time\ninterval, measured in 10 MHz ticks or 100 nsec\nunits, between the start of TDR test\ntransmission and the subsequent detection of a\ncollision or deassertion of carrier.  On\nsuccessful completion of a TDR test, the result\nis stored as the value of an appropriate\ninstance of an appropriate vendor specific MIB\nobject, and the OBJECT IDENTIFIER of that\ninstance is stored in the appropriate instance\nof the appropriate test result code object\n(thereby indicating where the result has been\nstored).\n\nThis object identity has been deprecated, since\nthe ifTestTable in the IF-MIB was deprecated,\nand there is no longer a standard mechanism for\ninitiating an interface test.  This left no\nstandard way of using this object identity.\"\"\",\n        }, # node\n        \"dot3TestLoopBack\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.6.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS IDENTITY IS DEPRECATED *******\n\nThis test configures the MAC chip and executes\nan internal loopback test of memory, data paths,\nand the MAC chip logic.  This loopback test can\nonly be executed if the interface is offline.\nOnce the test has completed, the MAC chip should\n\nbe reinitialized for network operation, but it\nshould remain offline.\n\nIf an error occurs during a test, the\nappropriate test result object will be set\nto indicate a failure.  The two OBJECT\nIDENTIFIER values dot3ErrorInitError and\ndot3ErrorLoopbackError may be used to provided\nmore information as values for an appropriate\ntest result code object.\n\nThis object identity has been deprecated, since\nthe ifTestTable in the IF-MIB was deprecated,\nand there is no longer a standard mechanism for\ninitiating an interface test.  This left no\nstandard way of using this object identity.\"\"\",\n        }, # node\n        \"dot3Errors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.7\",\n        }, # node\n        \"dot3ErrorInitError\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.7.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS IDENTITY IS DEPRECATED *******\n\nCouldn't initialize MAC chip for test.\n\nThis object identity has been deprecated, since\nthe ifTestTable in the IF-MIB was deprecated,\nand there is no longer a standard mechanism for\ninitiating an interface test.  This left no\nstandard way of using this object identity.\"\"\",\n        }, # node\n        \"dot3ErrorLoopbackError\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.7.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS IDENTITY IS DEPRECATED *******\n\nExpected data not received (or not received\ncorrectly) in loopback test.\n\nThis object identity has been deprecated, since\nthe ifTestTable in the IF-MIB was deprecated,\nand there is no longer a standard mechanism for\ninitiating an interface test.  This left no\nstandard way of using this object identity.\"\"\",\n        }, # node\n        \"dot3ControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of descriptive and status information\nabout the MAC Control sublayer on the\nethernet-like interfaces attached to a\nparticular system.  There will be one row in\nthis table for each ethernet-like interface in\nthe system which implements the MAC Control\nsublayer.  If some, but not all, of the\nethernet-like interfaces in the system implement\nthe MAC Control sublayer, there will be fewer\nrows in this table than in the dot3StatsTable.\"\"\",\n        }, # table\n        \"dot3ControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3StatsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the table, containing information\nabout the MAC Control sublayer on a single\nethernet-like interface.\"\"\",\n        }, # row\n        \"dot3ControlFunctionsSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"pause\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A list of the possible MAC Control functions\nimplemented for this interface.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.3.2,\naMACControlFunctionsSupported.\"\"\",\n        }, # column\n        \"dot3ControlInUnknownOpcodes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames received on this\ninterface that contain an opcode that is not\nsupported by this device.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCControlInUnknownOpcodes object for 10 Gb/s\nor faster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.3.5,\naUnsupportedOpcodesReceived\"\"\",\n        }, # column\n        \"dot3HCControlInUnknownOpcodes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames received on this\ninterface that contain an opcode that is not\nsupported by this device.\n\nThis counter is a 64 bit version of\ndot3ControlInUnknownOpcodes.  It should be used\non interfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.3.5,\naUnsupportedOpcodesReceived\"\"\",\n        }, # column\n        \"dot3PauseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of descriptive and status information\nabout the MAC Control PAUSE function on the\nethernet-like interfaces attached to a\nparticular system. There will be one row in\nthis table for each ethernet-like interface in\nthe system which supports the MAC Control PAUSE\nfunction (i.e., the 'pause' bit in the\ncorresponding instance of\ndot3ControlFunctionsSupported is set).  If some,\nbut not all, of the ethernet-like interfaces in\nthe system implement the MAC Control PAUSE\nfunction (for example, if some interfaces only\nsupport half-duplex), there will be fewer rows\nin this table than in the dot3StatsTable.\"\"\",\n        }, # table\n        \"dot3PauseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3StatsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the table, containing information\nabout the MAC Control PAUSE function on a single\nethernet-like interface.\"\"\",\n        }, # row\n        \"dot3PauseAdminMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledXmit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledXmitAndRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to configure the default\nadministrative PAUSE mode for this interface.\n\nThis object represents the\nadministratively-configured PAUSE mode for this\ninterface.  If auto-negotiation is not enabled\nor is not implemented for the active MAU\nattached to this interface, the value of this\nobject determines the operational PAUSE mode\nof the interface whenever it is operating in\nfull-duplex mode.  In this case, a set to this\nobject will force the interface into the\nspecified mode.\n\nIf auto-negotiation is implemented and enabled\nfor the MAU attached to this interface, the\nPAUSE mode for this interface is determined by\nauto-negotiation, and the value of this object\ndenotes the mode to which the interface will\nautomatically revert if/when auto-negotiation is\nlater disabled.  Note that when auto-negotiation\nis running, administrative control of the PAUSE\nmode may be accomplished using the\nifMauAutoNegCapAdvertisedBits object in the\nMAU-MIB.\n\nNote that the value of this object is ignored\nwhen the interface is not operating in\nfull-duplex mode.\n\nAn attempt to set this object to\n'enabledXmit(2)' or 'enabledRcv(3)' will fail\non interfaces that do not support operation\nat greater than 100 Mb/s.\"\"\",\n        }, # column\n        \"dot3PauseOperMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledXmit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabledRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabledXmitAndRcv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object reflects the PAUSE mode currently\n\nin use on this interface, as determined by\neither (1) the result of the auto-negotiation\nfunction or (2) if auto-negotiation is not\nenabled or is not implemented for the active MAU\nattached to this interface, by the value of\ndot3PauseAdminMode.  Interfaces operating at\n100 Mb/s or less will never return\n'enabledXmit(2)' or 'enabledRcv(3)'.  Interfaces\noperating in half-duplex mode will always return\n'disabled(1)'.  Interfaces on which\nauto-negotiation is enabled but not yet\ncompleted should return the value\n'disabled(1)'.\"\"\",\n        }, # column\n        \"dot3InPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames received on this\ninterface with an opcode indicating the PAUSE\noperation.\n\nThis counter does not increment when the\ninterface is operating in half-duplex mode.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCInPauseFrames object for 10 Gb/s or\nfaster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.4.3,\naPAUSEMACCtrlFramesReceived.\"\"\",\n        }, # column\n        \"dot3OutPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames transmitted on\nthis interface with an opcode indicating the\nPAUSE operation.\n\nThis counter does not increment when the\ninterface is operating in half-duplex mode.\n\nFor interfaces operating at 10 Gb/s, this\ncounter can roll over in less than 5 minutes if\nit is incrementing at its maximum rate.  Since\nthat amount of time could be less than a\nmanagement station's poll cycle time, in order\nto avoid a loss of information, a management\nstation is advised to poll the\ndot3HCOutPauseFrames object for 10 Gb/s or\nfaster interfaces.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.4.2,\naPAUSEMACCtrlFramesTransmitted.\"\"\",\n        }, # column\n        \"dot3HCInPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames received on this\ninterface with an opcode indicating the PAUSE\noperation.\n\nThis counter does not increment when the\ninterface is operating in half-duplex mode.\n\nThis counter is a 64 bit version of\ndot3InPauseFrames.  It should be used on\ninterfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.4.3,\naPAUSEMACCtrlFramesReceived.\"\"\",\n        }, # column\n        \"dot3HCOutPauseFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of MAC Control frames transmitted on\nthis interface with an opcode indicating the\nPAUSE operation.\n\nThis counter does not increment when the\ninterface is operating in half-duplex mode.\n\nThis counter is a 64 bit version of\ndot3OutPauseFrames.  It should be used on\ninterfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.4.2,\naPAUSEMACCtrlFramesTransmitted.\"\"\",\n        }, # column\n        \"dot3HCStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing 64-bit versions of error\ncounters from the dot3StatsTable.  The 32-bit\nversions of these counters may roll over quite\nquickly on higher speed ethernet interfaces.\nThe counters that have 64-bit versions in this\ntable are the counters that apply to full-duplex\ninterfaces, since 10 Gb/s and faster\nethernet-like interfaces do not support\nhalf-duplex, and very few 1000 Mb/s\nethernet-like interfaces support half-duplex.\n\nEntries in this table are recommended for\ninterfaces capable of operating at 1000 Mb/s or\nfaster, and are required for interfaces capable\nof operating at 10 Gb/s or faster.  Lower speed\nethernet-like interfaces do not need entries in\nthis table, in which case there may be fewer\nentries in this table than in the\ndot3StatsTable. However, implementations\ncontaining interfaces with a mix of speeds may\nchoose to implement entries in this table for\n\nall ethernet-like interfaces.\"\"\",\n        }, # table\n        \"dot3HCStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3StatsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing 64-bit statistics for a\nsingle ethernet-like interface.\"\"\",\n        }, # row\n        \"dot3HCStatsAlignmentErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that are not an integral number of\noctets in length and do not pass the FCS check.\n\nThe count represented by an instance of this\nobject is incremented when the alignmentError\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\nto the error status presented to the LLC.\n\nThis counter does not increment for group\nencoding schemes greater than 4 bits per group.\n\nThis counter is a 64 bit version of\ndot3StatsAlignmentErrors.  It should be used\non interfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\n\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.7,\naAlignmentErrors\"\"\",\n        }, # column\n        \"dot3HCStatsFCSErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that are an integral number of octets\nin length but do not pass the FCS check.  This\ncount does not include frames received with\nframe-too-long or frame-too-short error.\n\nThe count represented by an instance of this\nobject is incremented when the frameCheckError\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\nto the error status presented to the LLC.\n\nNote:  Coding errors detected by the physical\nlayer for speeds above 10 Mb/s will cause the\nframe to fail the FCS check.\n\nThis counter is a 64 bit version of\ndot3StatsFCSErrors.  It should be used on\ninterfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.6,\naFrameCheckSequenceErrors.\"\"\",\n        }, # column\n        \"dot3HCStatsInternalMacTransmitErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission on a\nparticular interface fails due to an internal\nMAC sublayer transmit error. A frame is only\n\ncounted by an instance of this object if it is\nnot counted by the corresponding instance of\neither the dot3StatsLateCollisions object, the\ndot3StatsExcessiveCollisions object, or the\ndot3StatsCarrierSenseErrors object.\n\nThe precise meaning of the count represented by\nan instance of this object is implementation-\nspecific.  In particular, an instance of this\nobject may represent a count of transmission\nerrors on a particular interface that are not\notherwise counted.\n\nThis counter is a 64 bit version of\ndot3StatsInternalMacTransmitErrors.  It should\nbe used on interfaces operating at 10 Gb/s or\nfaster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.12,\naFramesLostDueToIntMACXmitError.\"\"\",\n        }, # column\n        \"dot3HCStatsFrameTooLongs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received on a particular\ninterface that exceed the maximum permitted\nframe size.\n\nThe count represented by an instance of this\nobject is incremented when the frameTooLong\nstatus is returned by the MAC service to the\nLLC (or other MAC user). Received frames for\nwhich multiple error conditions pertain are,\naccording to the conventions of IEEE 802.3\nLayer Management, counted exclusively according\nto the error status presented to the LLC.\n\nThis counter is a 64 bit version of\ndot3StatsFrameTooLongs.  It should be used on\ninterfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\n\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.25,\naFrameTooLongErrors.\"\"\",\n        }, # column\n        \"dot3HCStatsInternalMacReceiveErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which reception on a\nparticular interface fails due to an internal\nMAC sublayer receive error. A frame is only\ncounted by an instance of this object if it is\nnot counted by the corresponding instance of\neither the dot3StatsFrameTooLongs object, the\ndot3StatsAlignmentErrors object, or the\ndot3StatsFCSErrors object.\n\nThe precise meaning of the count represented by\nan instance of this object is implementation-\nspecific.  In particular, an instance of this\nobject may represent a count of receive errors\non a particular interface that are not\notherwise counted.\n\nThis counter is a 64 bit version of\ndot3StatsInternalMacReceiveErrors.  It should be\nused on interfaces operating at 10 Gb/s or\nfaster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.1.1.15,\naFramesLostDueToIntMACRcvError.\"\"\",\n        }, # column\n        \"dot3HCStatsSymbolErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.10.7.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For an interface operating at 100 Mb/s, the\nnumber of times there was an invalid data symbol\nwhen a valid carrier was present.\n\nFor an interface operating in half-duplex mode\nat 1000 Mb/s, the number of times the receiving\nmedia is non-idle (a carrier event) for a period\nof time equal to or greater than slotTime, and\nduring which there was at least one occurrence\nof an event that causes the PHY to indicate\n'Data reception error' or 'carrier extend error'\non the GMII.\n\nFor an interface operating in full-duplex mode\nat 1000 Mb/s, the number of times the receiving\nmedia is non-idle (a carrier event) for a period\nof time equal to or greater than minFrameSize,\nand during which there was at least one\noccurrence of an event that causes the PHY to\nindicate 'Data reception error' on the GMII.\n\nFor an interface operating at 10 Gb/s, the\nnumber of times the receiving media is non-idle\n(a carrier event) for a period of time equal to\nor greater than minFrameSize, and during which\nthere was at least one occurrence of an event\nthat causes the PHY to indicate 'Receive Error'\non the XGMII.\n\nThe count represented by an instance of this\nobject is incremented at most once per carrier\nevent, even if multiple symbol errors occur\nduring the carrier event.  This count does\nnot increment if a collision is present.\n\nThis counter is a 64 bit version of\ndot3StatsSymbolErrors.  It should be used on\ninterfaces operating at 10 Gb/s or faster.\n\nDiscontinuities in the value of this counter can\noccur at re-initialization of the management\nsystem, and at other times as indicated by the\nvalue of ifCounterDiscontinuityTime.\"\"\",\n            \"reference>\" :\n                \"\"\"[IEEE 802.3 Std.], 30.3.2.1.5,\naSymbolErrorDuringCarrier.\"\"\",\n        }, # column\n        \"etherMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35\",\n            \"status\" : \"current\",\n        }, # node\n        \"etherMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.1\",\n        }, # node\n        \"etherConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2\",\n        }, # node\n        \"etherGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1\",\n        }, # node\n        \"etherCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"etherStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"dot3StatsIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsAlignmentErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFCSErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsSingleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsMultipleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsSQETestErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsDeferredTransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsLateCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsExcessiveCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsCarrierSenseErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsEtherChipSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"********* THIS GROUP IS DEPRECATED **********\n\nA collection of objects providing information\napplicable to all ethernet-like network\ninterfaces.\n\nThis object group has been deprecated and\nreplaced by etherStatsBaseGroup and\netherStatsLowSpeedGroup.\"\"\",\n        }, # group\n        \"etherCollisionTableGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3CollFrequencies\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing a histogram\nof packets successfully transmitted after\nexperiencing exactly N collisions.\"\"\",\n        }, # group\n        \"etherStats100MbsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"dot3StatsIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsAlignmentErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFCSErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsSingleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsMultipleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsDeferredTransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsLateCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsExcessiveCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsCarrierSenseErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsEtherChipSet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsSymbolErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"********* THIS GROUP IS DEPRECATED **********\n\nA collection of objects providing information\napplicable to 100 Mb/sec ethernet-like network\ninterfaces.\n\nThis object group has been deprecated and\nreplaced by etherStatsBaseGroup and\netherStatsHighSpeedGroup.\"\"\",\n        }, # group\n        \"etherStatsBaseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"dot3StatsIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsAlignmentErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFCSErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsSingleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsMultipleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsDeferredTransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsLateCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsExcessiveCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsCarrierSenseErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"********* THIS GROUP IS DEPRECATED **********\n\nA collection of objects providing information\napplicable to all ethernet-like network\ninterfaces.\n\nThis object group has been deprecated and\nreplaced by etherStatsBaseGroup2 and\netherStatsHalfDuplexGroup, to separate\nobjects which must be implemented by all\nethernet-like network interfaces from\nobjects that need only be implemented on\nethernet-like network interfaces that are\ncapable of half-duplex operation.\"\"\",\n        }, # group\n        \"etherStatsLowSpeedGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsSQETestErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\n\napplicable to ethernet-like network interfaces\ncapable of operating at 10 Mb/s or slower in\nhalf-duplex mode.\"\"\",\n        }, # group\n        \"etherStatsHighSpeedGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsSymbolErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\napplicable to ethernet-like network interfaces\ncapable of operating at 100 Mb/s or faster.\"\"\",\n        }, # group\n        \"etherDuplexGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsDuplexStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the duplex mode of an ethernet-like\nnetwork interface.\"\"\",\n        }, # group\n        \"etherControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3ControlFunctionsSupported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3ControlInUnknownOpcodes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the MAC Control sublayer on ethernet-like\nnetwork interfaces.\"\"\",\n        }, # group\n        \"etherControlPauseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3PauseAdminMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3PauseOperMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3InPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3OutPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout and control of the MAC Control PAUSE\nfunction on ethernet-like network interfaces.\"\"\",\n        }, # group\n        \"etherStatsBaseGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsAlignmentErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFCSErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsInternalMacReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\napplicable to all ethernet-like network\ninterfaces.\"\"\",\n        }, # group\n        \"etherStatsHalfDuplexGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsSingleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsMultipleCollisionFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsDeferredTransmissions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsLateCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsExcessiveCollisions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsCarrierSenseErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\napplicable only to half-duplex ethernet-like\nnetwork interfaces.\"\"\",\n        }, # group\n        \"etherHCStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3HCStatsAlignmentErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCStatsFCSErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCStatsInternalMacTransmitErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCStatsFrameTooLongs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCStatsInternalMacReceiveErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCStatsSymbolErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing high-capacity\nstatistics applicable to higher-speed\nethernet-like network interfaces.\"\"\",\n        }, # group\n        \"etherHCControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3HCControlInUnknownOpcodes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing high-capacity\nstatistics for the MAC Control sublayer on\nhigher-speed ethernet-like network interfaces.\"\"\",\n        }, # group\n        \"etherHCControlPauseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3HCInPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3HCOutPauseFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing high-capacity\nstatistics for the MAC Control PAUSE function on\nhigher-speed ethernet-like network interfaces.\"\"\",\n        }, # group\n        \"etherRateControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.1.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3StatsRateControlAbility\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"dot3StatsRateControlStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information\nabout the Rate Control function on ethernet-like\ninterfaces.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"etherCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS COMPLIANCE IS DEPRECATED ********\n\nThe compliance statement for managed network\nentities which have ethernet-like network\ninterfaces.\n\nThis compliance is deprecated and replaced by\ndot3Compliance.\"\"\",\n            \"requires\" : {\n                \"etherStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"etherCollisionTableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional. It is appropriate\nfor all systems which have the necessary\nmetering. Implementation in such systems is\nhighly recommended.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"ether100MbsCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.2.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS COMPLIANCE IS DEPRECATED ********\n\nThe compliance statement for managed network\nentities which have 100 Mb/sec ethernet-like\nnetwork interfaces.\n\nThis compliance is deprecated and replaced by\ndot3Compliance.\"\"\",\n            \"requires\" : {\n                \"etherStats100MbsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"etherCollisionTableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional. It is appropriate\nfor all systems which have the necessary\nmetering. Implementation in such systems is\nhighly recommended.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"dot3Compliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.2.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"******** THIS COMPLIANCE IS DEPRECATED ********\n\nThe compliance statement for managed network\nentities which have ethernet-like network\ninterfaces.\n\nThis compliance is deprecated and replaced by\ndot3Compliance2.\"\"\",\n            \"requires\" : {\n                \"etherStatsBaseGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"etherDuplexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating in full-duplex mode.\nIt is highly recommended for all\nethernet-like network interfaces.\"\"\",\n                },\n                \"etherStatsLowSpeedGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at 10 Mb/s or slower in\nhalf-duplex mode.\"\"\",\n                },\n                \"etherStatsHighSpeedGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at 100 Mb/s or faster.\"\"\",\n                },\n                \"etherControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control sublayer.\"\"\",\n                },\n                \"etherControlPauseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control PAUSE function.\"\"\",\n                },\n                \"etherCollisionTableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional. It is appropriate\nfor all ethernet-like network interfaces\nwhich are capable of operating in\nhalf-duplex mode and have the necessary\nmetering. Implementation in systems with\n\nsuch interfaces is highly recommended.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"dot3Compliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"EtherLike-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.35.2.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for managed network\nentities which have ethernet-like network\ninterfaces.\n\nNote that compliance with this MIB module\nrequires compliance with the ifCompliance3\nMODULE-COMPLIANCE statement of the IF-MIB\n(RFC2863).  In addition, compliance with this\nMIB module requires compliance  with the\nmauModIfCompl3 MODULE-COMPLIANCE statement of\nthe MAU-MIB (RFC3636).\"\"\",\n            \"requires\" : {\n                \"etherStatsBaseGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"EtherLike-MIB\"\n                },\n                \"etherDuplexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating in full-duplex mode.\nIt is highly recommended for all\nethernet-like network interfaces.\"\"\",\n                },\n                \"etherRateControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at speeds faster than\n1000 Mb/s. It is highly recommended for all\nethernet-like network interfaces.\"\"\",\n                },\n                \"etherStatsLowSpeedGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at 10 Mb/s or slower in\nhalf-duplex mode.\"\"\",\n                },\n                \"etherStatsHighSpeedGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at 100 Mb/s or faster.\"\"\",\n                },\n                \"etherStatsHalfDuplexGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\n\ncapable of operating in half-duplex mode.\"\"\",\n                },\n                \"etherHCStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces which are\ncapable of operating at 10 Gb/s or faster.\nIt is recommended for all ethernet-like\nnetwork interfaces which are capable of\noperating at 1000 Mb/s or faster.\"\"\",\n                },\n                \"etherControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control sublayer.\"\"\",\n                },\n                \"etherHCControlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control sublayer and are\ncapable of operating at 10 Gb/s or faster.\"\"\",\n                },\n                \"etherControlPauseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control PAUSE function.\"\"\",\n                },\n                \"etherHCControlPauseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all\nethernet-like network interfaces that\nsupport the MAC Control PAUSE function and\nare capable of operating at 10 Gb/s or\nfaster.\"\"\",\n                },\n                \"etherCollisionTableGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"EtherLike-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional. It is appropriate\nfor all ethernet-like network interfaces\nwhich are capable of operating in\nhalf-duplex mode and have the necessary\nmetering. Implementation in systems with\nsuch interfaces is highly recommended.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/FAN-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python FAN-MIB\n\nFILENAME = \"FAN-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"FAN-MIB\",\n\n    \"FAN-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Hewitt-Packard\"\"\",\n        \"contact\" : \n            \"\"\"k-p-rama.murthy@hp.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module is for representing switch fan entity.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2008-08-27 10:30\",\n                \"description\" :\n                    \"\"\"Revision 01.\"\"\",\n            },\n        ),\n        \"identity node\" : \"hpicfFanMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"HP-ICF-OID\", \"name\" : \"hpSwitch\"},\n    ),\n\n    \"typedefs\" : {\n        \"HpicfDcFanIndex\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"A unique value that serves as an index to identify the fan.\"\"\",\n        },\n        \"HpicfDcFanType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"mm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"fm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"im\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"ps\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"rollup\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"maxtype\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"An enumerated value that indications the fan types.\"\"\",\n        },\n        \"HpicfDcFanAirflowDirection\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"portToPower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"powerToPort\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"An enumerated value which provides an indication of the\nfan airflow direction. The Physical fan airflow direction\ncould be either from the port towards the power supply\nmodule i.e. portToPower(1), or from the power supply module\ntowards the port i.e. powerToPort(2)\"\"\",\n        },\n        \"HpicfDcFanState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"failed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"removed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"underspeed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"overspeed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"maxstate\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"An enumerated value which provides an indication of the\nfan state.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"hpicfFanMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54\",\n            \"status\" : \"current\",\n        }, # node\n        \"hpicfFanScalars\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.1\",\n        }, # node\n        \"hpicfFanUserPrefAirflowDir\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"portToPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerToPort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"powerToPort\",\n            \"description\" :\n                \"\"\"The user preferred fan airflow direction. The direction could be\npowerToPort or portToPower. The actual fan direction has to be \nchanged manually, this will be used to indicate to the user when\nwhen the actual fan airflow direction is different from the user\npreferred airflow direction.\"\"\",\n        }, # scalar\n        \"hpicfEntityFan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2\",\n        }, # node\n        \"hpicfFanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row for every fan in the switch entity.\"\"\",\n        }, # table\n        \"hpicfFanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpicfFanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about fan entity table.\"\"\",\n        }, # row\n        \"hpicfFanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"FAN-MIB\", \"name\" : \"HpicfDcFanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index that is used to access the switch fan entry table.\"\"\",\n        }, # column\n        \"hpicfFanTray\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The tray number in which the fan is docked.\"\"\",\n        }, # column\n        \"hpicfFanType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"FAN-MIB\", \"name\" : \"HpicfDcFanType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of the vendor-specific fan.\"\"\",\n        }, # column\n        \"hpicfFanState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"FAN-MIB\", \"name\" : \"HpicfDcFanState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the fan.\"\"\",\n        }, # column\n        \"hpicfFanRecovering\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication that the switch fan entity is faulty.\nBefore declaring a fan to be good after a failure is \ndetected, the same good indication must happen five (5)\ntimes in a row. A failure indication is always TRUE, while\na good indication could be FALSE, hence this parameter is \nused to count the repeated good indications before \ndeclaring the fan to be good \"\"\",\n        }, # column\n        \"hpicfFanNumFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the fan has failed.\"\"\",\n        }, # column\n        \"hpicfFanAirflowDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"FAN-MIB\", \"name\" : \"HpicfDcFanAirflowDirection\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indication of the fan air flow direction, either\nfrom Power supply towards the port or from the port\ntowards the power supply.\"\"\",\n        }, # column\n        \"hpicfFanConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3\",\n        }, # node\n        \"hpicfFanCompliance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3.1\",\n        }, # node\n        \"hpicfFanGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"hpicfFanScalarsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpicfFanUserPrefAirflowDir\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Basic Scalars required in FAN MIB implementation.\"\"\",\n        }, # group\n        \"hpicfFanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpicfFanTray\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanRecovering\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanNumFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanAirflowDirection\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"FAN-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"FAN MIB parameters \"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"hpicfDcFanCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"FAN-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.54.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entries which implement \nthe FAN MIB.\"\"\",\n            \"requires\" : {\n                \"hpicfFanScalarsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"FAN-MIB\"\n                },\n                \"hpicfFanGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"FAN-MIB\",\n                    \"description\" :\n                        \"\"\"Objects associated with switch entity FAN.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/GEIST-MIB-V3.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python GEIST-MIB-V3\n\nFILENAME = \"geist_mibv3.mib\"\n\nMIB = {\n    \"moduleName\" : \"GEIST-MIB-V3\",\n\n    \"GEIST-MIB-V3\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Geist\"\"\",\n        \"contact\" : \n            \"\"\"support@geistglobal.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB for Geist Products\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2013-06-19 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"geist\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"geist\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239\",\n            \"status\" : \"current\",\n        }, # node\n        \"geistV3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2\",\n        }, # node\n        \"deviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1\",\n        }, # node\n        \"productTitle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product name\"\"\",\n        }, # scalar\n        \"productVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product version\"\"\",\n        }, # scalar\n        \"productFriendlyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-assigned name\"\"\",\n        }, # scalar\n        \"productMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's unique MAC address\"\"\",\n        }, # scalar\n        \"productUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's main URL access point\"\"\",\n        }, # scalar\n        \"alarmTripType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unplugged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of alarm trip. 0 = None, 1 = Low, 2 = High, 3 = Unplugged\"\"\",\n        }, # scalar\n        \"productHardware\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's hardware type\"\"\",\n        }, # scalar\n        \"sensorCountsBase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8\",\n        }, # node\n        \"sensorCounts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1\",\n        }, # node\n        \"climateCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of climate monitors currently plugged in\"\"\",\n        }, # scalar\n        \"powerMonitorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"tempSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of temperature sensors currently plugged in\"\"\",\n        }, # scalar\n        \"airflowSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of airflow sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChDELTACount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DELTA 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"doorSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of door sensors currently plugged in\"\"\",\n        }, # scalar\n        \"waterSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of water sensors currently plugged in\"\"\",\n        }, # scalar\n        \"currentSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of current sensors currently plugged in\"\"\",\n        }, # scalar\n        \"millivoltSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of millivolt sensors currently plugged in\"\"\",\n        }, # scalar\n        \"power3ChSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"outletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of outlets currently plugged in\"\"\",\n        }, # scalar\n        \"vsfcCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fan controller monitors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlGrpAmpsCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of amperage controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlOutletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of monitored or switched outlets\"\"\",\n        }, # scalar\n        \"dewpointSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of dewpoint sensors currently plugged in\"\"\",\n        }, # scalar\n        \"digitalSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of digital sensors currently plugged in\"\"\",\n        }, # scalar\n        \"dstsSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DSTS controllers currently plugged in\"\"\",\n        }, # scalar\n        \"cpmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of city power sensors currently plugged in\"\"\",\n        }, # scalar\n        \"smokeAlarmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of smoke alarm sensors currently plugged in\"\"\",\n        }, # scalar\n        \"neg48VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of -48Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"pos30VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 30Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"analogSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of remote analog inputs currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChIECCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IEC 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"climateRelayCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of climate relay monitors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlRelayCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of relay controllers currently plugged in\"\"\",\n        }, # scalar\n        \"airSpeedSwitchSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of air speed switch sensors currently plugged in\"\"\",\n        }, # scalar\n        \"powerDMCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DM48 current sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ioExpanderCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IO expander devices currently plugged in\"\"\",\n        }, # scalar\n        \"t3hdSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of T3HD sensors currently plugged in\"\"\",\n        }, # scalar\n        \"thdSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of THD sensors currently plugged in\"\"\",\n        }, # scalar\n        \"pos60VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 60Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl2CirTotCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IEC 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"sc10Count\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.8.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fan controller monitors currently plugged in\"\"\",\n        }, # scalar\n        \"temperaturePrecision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"degree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"deciDegree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Precision:\n0 = degree: whole degree (value X 1) \n1 = deci-degree: tenths of a degree (value X 10)\n    ex. 550 = 55.0 degrees\"\"\",\n        }, # scalar\n        \"alarmTrigger\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Used in a trap var-bind to indicate what triggered \nthe alarm. The alarmTrigger will remain consistent \nfor both trip and clear traps. Possible values include:\n\n    'Low' = Low-trip trigger\n    'High' = High-trip trigger\n    'Unplugged' = Unplugged device trigger\"\"\",\n        }, # scalar\n        \"alarmInstance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Provides the row index (instance number) for the alarm\nthat generated a trap. This value is only available when\nincluded in the var-binds of an associated trap. \"\"\",\n        }, # scalar\n        \"climateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Climate sensors (internal sensors for R-Series units)\"\"\",\n        }, # table\n        \"climateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"climateIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the climate table: each entry contains\nan index (climateIndex) and other power strip details\"\"\",\n        }, # row\n        \"climateIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"climateSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"climateName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"climateAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"climateTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (C)\"\"\",\n        }, # column\n        \"climateTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (F)\"\"\",\n        }, # column\n        \"climateHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Humidity\"\"\",\n        }, # column\n        \"climateLight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Ambient Light\"\"\",\n        }, # column\n        \"climateAirflow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Airflow\"\"\",\n        }, # column\n        \"climateSound\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Sound\"\"\",\n        }, # column\n        \"climateIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"climateIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"climateIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"climateVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts\"\"\",\n        }, # column\n        \"climateVoltPeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts\"\"\",\n        }, # column\n        \"climateDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Amps (Phase A)\"\"\",\n        }, # column\n        \"climateDeciAmpPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Amps (Phase A)\"\"\",\n        }, # column\n        \"climateRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"climateApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"climatePowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"climateDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Amps (Phase B)\"\"\",\n        }, # column\n        \"climateDeciAmpPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Amps (Phase B)\"\"\",\n        }, # column\n        \"climateRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"climateApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"climatePowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"climateDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Amps (Phase C)\"\"\",\n        }, # column\n        \"climateDeciAmpPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Amps (Phase C)\"\"\",\n        }, # column\n        \"climateRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"climateApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"climatePowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"climateDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (C)\"\"\",\n        }, # column\n        \"climateDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (F)\"\"\",\n        }, # column\n        \"powMonTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitors\"\"\",\n        }, # table\n        \"powMonEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powMonIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor table: each entry contains\nan index (powMonIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"powMonIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powMonSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powMonName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powMonAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powMonkWattHrs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours\"\"\",\n        }, # column\n        \"powMonVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts\"\"\",\n        }, # column\n        \"powMonVoltMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Max)\"\"\",\n        }, # column\n        \"powMonVoltMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Min)\"\"\",\n        }, # column\n        \"powMonVoltPeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Peak)\"\"\",\n        }, # column\n        \"powMonDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps\"\"\",\n        }, # column\n        \"powMonRealPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power\"\"\",\n        }, # column\n        \"powMonApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power\"\"\",\n        }, # column\n        \"powMonPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor\"\"\",\n        }, # column\n        \"powMonOutlet1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Outlet 1\",\n            \"description\" :\n                \"\"\"Outlet 1 Trap\"\"\",\n        }, # column\n        \"powMonOutlet2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Outlet 2\",\n            \"description\" :\n                \"\"\"Outlet 2 Trap\"\"\",\n        }, # column\n        \"powMonOutlet1StatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet 1 Last Changed Its Status\"\"\",\n        }, # column\n        \"powMonOutlet2StatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet 2 Last Changed Its Status\"\"\",\n        }, # column\n        \"tempSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of temperature sensors\"\"\",\n        }, # table\n        \"tempSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tempSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the temperature sensor table: each entry contains\nan index (tempIndex) and other sensor details\"\"\",\n        }, # row\n        \"tempSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"tempSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"tempSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"tempSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"tempSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature in Celsius\"\"\",\n        }, # column\n        \"tempSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature in Fahrenheit\"\"\",\n        }, # column\n        \"airFlowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of airflow sensors\"\"\",\n        }, # table\n        \"airFlowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFlowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the air flow sensor table: each entry contains\nan index (airFlowSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"airFlowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airFlowSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airFlowSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airFlowSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airFlowSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"airFlowSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"airFlowSensorFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air flow reading\"\"\",\n        }, # column\n        \"airFlowSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"airFlowSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (C)\"\"\",\n        }, # column\n        \"airFlowSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (F)\"\"\",\n        }, # column\n        \"ctrl3ChDELTATable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (DELTA)\"\"\",\n        }, # table\n        \"ctrl3ChDELTAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChDELTAIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase delta outlet control table: each entry contains\nan index (ctrl3ChDELTAIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChDELTAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChDELTASerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChDELTAName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChDELTAAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerChCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of active power channels\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line A)\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line B)\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line C)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Watts (Total)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.6.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase CA)\"\"\",\n        }, # column\n        \"doorSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of door sensors\"\"\",\n        }, # table\n        \"doorSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"doorSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the door sensor table: each entry contains\nan index (doorSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"doorSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"doorSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"doorSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"doorSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"doorSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Door sensor status\"\"\",\n        }, # column\n        \"waterSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of water sensors\"\"\",\n        }, # table\n        \"waterSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the water sensor table: each entry contains\nan index (waterSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"waterSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"waterSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"waterSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"waterSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"waterSensorDampness\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dampness of the water sensor\"\"\",\n        }, # column\n        \"currentMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of current monitors\"\"\",\n        }, # table\n        \"currentMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"currentMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the current monitor table: each entry contains\nan index (currentMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"currentMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"currentMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"currentMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"currentMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"currentMonitorDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"millivoltMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of millivolt monitors\"\"\",\n        }, # table\n        \"millivoltMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"millivoltMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the millivolt monitor table: each entry contains\nan index (millivoltMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"millivoltMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"millivoltMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"millivoltMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"millivoltMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"millivoltMonitorMV\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"millivolts\"\"\",\n        }, # column\n        \"pow3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitor 3 Channel\"\"\",\n        }, # table\n        \"pow3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pow3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor 3 channel table: each entry contains\nan index (pow3ChIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"pow3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pow3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pow3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pow3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pow3ChkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltMinA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"pow3ChRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltMinB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"pow3ChRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltMinC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"pow3ChRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"pow3ChRealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.11.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Total)\"\"\",\n        }, # column\n        \"outletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlets\"\"\",\n        }, # table\n        \"outletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the outlet table: each entry contains\nan index (outletIndex) and other sensor details\"\"\",\n        }, # row\n        \"outletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"outletSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"outletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"outletAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"outlet1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 1 status\"\"\",\n        }, # column\n        \"outlet2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 2 status\"\"\",\n        }, # column\n        \"vsfcTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"VSFC sensors (internal sensors for VSFC units)\"\"\",\n        }, # table\n        \"vsfcEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vsfcIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the vsfc table: each entry contains\nan index (vsfcIndex) and other details\"\"\",\n        }, # row\n        \"vsfcIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"vsfcSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"vsfcName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"vsfcAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"vsfcSetPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"18\",\n                        \"max\" : \"38\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"18\",\n                        \"max\" : \"38\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current temperature set point in C\"\"\",\n        }, # column\n        \"vsfcSetPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"65\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"65\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current temperature set point in F\"\"\",\n        }, # column\n        \"vsfcFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Fan Speed\"\"\",\n        }, # column\n        \"vsfcIntTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in C\"\"\",\n        }, # column\n        \"vsfcIntTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-4\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-4\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in F\"\"\",\n        }, # column\n        \"vsfcExt1TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in C\"\"\",\n        }, # column\n        \"vsfcExt1TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt2TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 2 in C\"\"\",\n        }, # column\n        \"vsfcExt2TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt3TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 3 in C\"\"\",\n        }, # column\n        \"vsfcExt3TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt4TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 4 in C\"\"\",\n        }, # column\n        \"vsfcExt4TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.13.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"ctrl3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control\"\"\",\n        }, # table\n        \"ctrl3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl3ChIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.14.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"ctrlGrpAmpsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Control Group Amp readings\"\"\",\n        }, # table\n        \"ctrlGrpAmpsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlGrpAmpsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the Control Group Amps table: each entry contains\nan index (ctrlGrpAmpsIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlGrpAmpsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrlGrpAmpsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrlGrpAmpsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrlGrpAmpsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrlGrpAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group A\"\"\",\n        }, # column\n        \"ctrlGrpAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group B\"\"\",\n        }, # column\n        \"ctrlGrpAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group D\"\"\",\n        }, # column\n        \"ctrlGrpAmpsE\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group E\"\"\",\n        }, # column\n        \"ctrlGrpAmpsF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group F\"\"\",\n        }, # column\n        \"ctrlGrpAmpsG\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group G\"\"\",\n        }, # column\n        \"ctrlGrpAmpsH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group H\"\"\",\n        }, # column\n        \"ctrlGrpAmpsAVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group A\"\"\",\n        }, # column\n        \"ctrlGrpAmpsBVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group B\"\"\",\n        }, # column\n        \"ctrlGrpAmpsCVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsDVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group D\"\"\",\n        }, # column\n        \"ctrlGrpAmpsEVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group E\"\"\",\n        }, # column\n        \"ctrlGrpAmpsFVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group F\"\"\",\n        }, # column\n        \"ctrlGrpAmpsGVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group G\"\"\",\n        }, # column\n        \"ctrlGrpAmpsHVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group H\"\"\",\n        }, # column\n        \"ctrlGrpAmpsI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group I\"\"\",\n        }, # column\n        \"ctrlGrpAmpsJ\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group J\"\"\",\n        }, # column\n        \"ctrlGrpAmpsK\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group K\"\"\",\n        }, # column\n        \"ctrlGrpAmpsL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group L\"\"\",\n        }, # column\n        \"ctrlGrpAmpsM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group M\"\"\",\n        }, # column\n        \"ctrlGrpAmpsN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group N\"\"\",\n        }, # column\n        \"ctrlGrpAmpsO\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group O\"\"\",\n        }, # column\n        \"ctrlGrpAmpsP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group P\"\"\",\n        }, # column\n        \"ctrlGrpAmpsIVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group I\"\"\",\n        }, # column\n        \"ctrlGrpAmpsJVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group J\"\"\",\n        }, # column\n        \"ctrlGrpAmpsKVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group K\"\"\",\n        }, # column\n        \"ctrlGrpAmpsLVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group L\"\"\",\n        }, # column\n        \"ctrlGrpAmpsMVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group M\"\"\",\n        }, # column\n        \"ctrlGrpAmpsNVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group N\"\"\",\n        }, # column\n        \"ctrlGrpAmpsOVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group O\"\"\",\n        }, # column\n        \"ctrlGrpAmpsPVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.15.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group P\"\"\",\n        }, # column\n        \"ctrlOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlet information\"\"\",\n        }, # table\n        \"ctrlOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the control outlet table: each entry contains\nan index (ctrlOutletIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Outlet Number\"\"\",\n        }, # column\n        \"ctrlOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet Friendly Name\"\"\",\n        }, # column\n        \"ctrlOutletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Current Outlet Status: 0 = Off, 1 = On | Outlet Action Write: 0 = Cancel Pending, 1 = On, 2 = On Delayed, 3 = Off Immediate, 4 = Off Delayed, 5 = Reboot, 6 = Reboot Delayed, 7 = Clear kWh (POA units only)\"\"\",\n        }, # column\n        \"ctrlOutletFeedback\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Feedback Value, should be equal to status\"\"\",\n        }, # column\n        \"ctrlOutletPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet Status Read to change to: 0 = Off, 1 = On | Outlet Action Write: 0 = Cancel Pending, 1 = On, 2 = On Delayed, 3 = Off Immediate, 4 = Off Delayed, 5 = Reboot, 6 = Reboot Delayed, 7 = Clear kWh (POA units only)\"\"\",\n        }, # column\n        \"ctrlOutletDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Outlet DeciAmps reading\"\"\",\n        }, # column\n        \"ctrlOutletGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Group (A to G)\"\"\",\n        }, # column\n        \"ctrlOutletUpDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Power Up Delay\"\"\",\n        }, # column\n        \"ctrlOutletDwnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Power Down Delay\"\"\",\n        }, # column\n        \"ctrlOutletRbtDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Reboot Duration\"\"\",\n        }, # column\n        \"ctrlOutletURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet URL\"\"\",\n        }, # column\n        \"ctrlOutletPOAAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"POA Action: 1 = Off, 2 = On, 3 = Last, 0 = POA not supported on this unit type\"\"\",\n        }, # column\n        \"ctrlOutletPOADelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"POA Delay\"\"\",\n        }, # column\n        \"ctrlOutletkWattHrs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours\"\"\",\n        }, # column\n        \"ctrlOutletPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Power\"\"\",\n        }, # column\n        \"ctrlOutletRbtDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Reboot Delay\"\"\",\n        }, # column\n        \"ctrlOutletStatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.16.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet Last Changed Its Status\"\"\",\n        }, # column\n        \"dewPointSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of dew point sensors\"\"\",\n        }, # table\n        \"dewPointSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dewPointSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the dew point sensor table: each entry contains\nan index (dewPointSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"dewPointSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dewPointSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dewPointSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dewPointSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dewPointSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"dewPointSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"dewPointSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"dewPointSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Dew point reading in C\"\"\",\n        }, # column\n        \"dewPointSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.17.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Dew point reading in F\"\"\",\n        }, # column\n        \"digitalSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of digital sensors\"\"\",\n        }, # table\n        \"digitalSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"digitalSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the digital sensor table: each entry contains\nan index (digitalSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"digitalSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"digitalSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"digitalSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"digitalSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"digitalSensorDigital\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.18.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Digital sensor status\"\"\",\n        }, # column\n        \"dstsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Digital Static Transfer Switch status\"\"\",\n        }, # table\n        \"dstsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dstsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the DSTS table: each entry contains\nan index (dstsIndex) and other details\"\"\",\n        }, # row\n        \"dstsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dstsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dstsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dstsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dstsVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side A\"\"\",\n        }, # column\n        \"dstsDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RMS Current of Side A in deciamps\"\"\",\n        }, # column\n        \"dstsVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side B\"\"\",\n        }, # column\n        \"dstsDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RMS Current of Side B in deciamps\"\"\",\n        }, # column\n        \"dstsSourceAActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source A active\"\"\",\n        }, # column\n        \"dstsSourceBActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source B active\"\"\",\n        }, # column\n        \"dstsPowerStatusA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of source A\"\"\",\n        }, # column\n        \"dstsPowerStatusB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of Source B\"\"\",\n        }, # column\n        \"dstsSourceATempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Source A temp in C\"\"\",\n        }, # column\n        \"dstsSourceBTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.19.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Source B temp in C\"\"\",\n        }, # column\n        \"cpmSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of city power sensors\"\"\",\n        }, # table\n        \"cpmSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the city power sensor table: each entry contains\nan index (cpmSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"cpmSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"cpmSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"cpmSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"cpmSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"cpmSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.20.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"City Power sensor status\"\"\",\n        }, # column\n        \"smokeAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of smoke alarm sensors\"\"\",\n        }, # table\n        \"smokeAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"smokeAlarmIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the smoke alarm sensor table: each entry contains\nan index (smokeAlarmIndex) and other sensor details\"\"\",\n        }, # row\n        \"smokeAlarmIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"smokeAlarmSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"smokeAlarmName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"smokeAlarmAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"smokeAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Smoke alarm status\"\"\",\n        }, # column\n        \"neg48VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of -48Vdc sensors\"\"\",\n        }, # table\n        \"neg48VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"neg48VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the -48Vdc sensor table: each entry contains\nan index (neg48VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"neg48VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"neg48VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"neg48VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"neg48VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"neg48VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"-48Vdc Sensor value\"\"\",\n        }, # column\n        \"pos30VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of 30Vdc sensors\"\"\",\n        }, # table\n        \"pos30VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pos30VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 30Vdc sensor table: each entry contains\nan index (pos30VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"pos30VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pos30VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pos30VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pos30VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pos30VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"30Vdc Sensor value\"\"\",\n        }, # column\n        \"analogSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of analog sensors\"\"\",\n        }, # table\n        \"analogSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"analogSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the analog input table: each entry contains\nan index (analogSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"analogSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"analogSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"analogSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"analogSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"analogSensorAnalog\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Analog Sensor Value\"\"\",\n        }, # column\n        \"ctrl3ChIECTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (IEC)\"\"\",\n        }, # table\n        \"ctrl3ChIECEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChIECIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl3ChIECIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChIECIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChIECSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChIECName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChIECAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.25.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Watts (Total)\"\"\",\n        }, # column\n        \"climateRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Climate Relay sensors (internal sensors for R-Series Relay units)\"\"\",\n        }, # table\n        \"climateRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"climateRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the climate relay table: each entry contains\nan index (climateRelayIndex) and other power strip details\"\"\",\n        }, # row\n        \"climateRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"climateRelaySerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"climateRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"climateRelayAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"climateRelayTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (C)\"\"\",\n        }, # column\n        \"climateRelayTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (F)\"\"\",\n        }, # column\n        \"climateRelayIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"climateRelayIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"climateRelayIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"climateRelayIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"climateRelayIO5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 5\"\"\",\n        }, # column\n        \"climateRelayIO6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.26.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 6\"\"\",\n        }, # column\n        \"ctrlRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of relay information\"\"\",\n        }, # table\n        \"ctrlRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the control relay table: each entry contains\nan index (ctrlRelayIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Relay Number\"\"\",\n        }, # column\n        \"ctrlRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Friendly Name\"\"\",\n        }, # column\n        \"ctrlRelayState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Relay Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ctrlRelayLatchingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ctrlRelayOverride\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ctrlRelayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.27.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of air speed switch sensors\"\"\",\n        }, # table\n        \"airSpeedSwitchSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airSpeedSwitchSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the air speed switch sensor table: each entry contains\nan index (airSpeedSwitchIndex) and other sensor details\"\"\",\n        }, # row\n        \"airSpeedSwitchSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorAirSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.28.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air Speed Switch Status\"\"\",\n        }, # column\n        \"powerDMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of DM48 current monitors\"\"\",\n        }, # table\n        \"powerDMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerDMIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the DM48 current monitor table: each entry contains\nan index (powerDMIndex) and other sensor details\"\"\",\n        }, # row\n        \"powerDMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powerDMSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powerDMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powerDMAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powerDMUnitInfoTitle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of Unit\"\"\",\n        }, # column\n        \"powerDMUnitInfoVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit Version Number\"\"\",\n        }, # column\n        \"powerDMUnitInfoMainCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Main (Total Amps) Channels on the Unit\"\"\",\n        }, # column\n        \"powerDMUnitInfoAuxCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Auxiliary (Outlet) Channels on the Unit\"\"\",\n        }, # column\n        \"powerDMChannelName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.82\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.84\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.85\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.86\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.87\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.88\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.89\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.90\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.91\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.92\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.93\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.94\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.97\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelGroup1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.109\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.110\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.111\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.112\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.113\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.114\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.115\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.116\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.117\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.118\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.119\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.120\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.121\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.122\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.123\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.124\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.125\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.126\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.127\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.128\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.129\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.130\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.131\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.132\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.133\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.134\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.135\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.136\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.137\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.138\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.139\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.140\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.141\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.142\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.143\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.144\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.145\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.146\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.147\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.148\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.149\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.150\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.151\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.152\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Group\"\"\",\n        }, # column\n        \"powerDMDeciAmps1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.153\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.154\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.155\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.156\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.157\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.158\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.159\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.160\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.161\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.162\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.163\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.164\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.165\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.166\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.167\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.168\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.169\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.170\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.171\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.172\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.173\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.174\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.175\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.176\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.177\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.178\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.179\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.180\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.181\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.182\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.183\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.184\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.185\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.186\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.187\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.188\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.189\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.190\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.191\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.192\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.193\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.194\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.195\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.196\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.197\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.198\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.199\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.29.1.200\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"ioExpanderTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"IO Expander device with relay capability\"\"\",\n        }, # table\n        \"ioExpanderEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ioExpanderIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the IO Expander table: each entry contains\nan index (ioExpanderIndex) and other details\"\"\",\n        }, # row\n        \"ioExpanderIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ioExpanderSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ioExpanderName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 1 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 2 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 3 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 4 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 5 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 6 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 7 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 8 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 9 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 10 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 11 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 12 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 13 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 14 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 15 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 16 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 17 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 18 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 19 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 20 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 21 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 22 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 23 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 24 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 25 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 26 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 27 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 28 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 29 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 30 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 31 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 32 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"ioExpanderIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"ioExpanderIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"ioExpanderIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"ioExpanderIO5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 5\"\"\",\n        }, # column\n        \"ioExpanderIO6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 6\"\"\",\n        }, # column\n        \"ioExpanderIO7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 7\"\"\",\n        }, # column\n        \"ioExpanderIO8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 8\"\"\",\n        }, # column\n        \"ioExpanderIO9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 9\"\"\",\n        }, # column\n        \"ioExpanderIO10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 10\"\"\",\n        }, # column\n        \"ioExpanderIO11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 11\"\"\",\n        }, # column\n        \"ioExpanderIO12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 12\"\"\",\n        }, # column\n        \"ioExpanderIO13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 13\"\"\",\n        }, # column\n        \"ioExpanderIO14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 14\"\"\",\n        }, # column\n        \"ioExpanderIO15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 15\"\"\",\n        }, # column\n        \"ioExpanderIO16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 16\"\"\",\n        }, # column\n        \"ioExpanderIO17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 17\"\"\",\n        }, # column\n        \"ioExpanderIO18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 18\"\"\",\n        }, # column\n        \"ioExpanderIO19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 19\"\"\",\n        }, # column\n        \"ioExpanderIO20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 20\"\"\",\n        }, # column\n        \"ioExpanderIO21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 21\"\"\",\n        }, # column\n        \"ioExpanderIO22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 22\"\"\",\n        }, # column\n        \"ioExpanderIO23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 23\"\"\",\n        }, # column\n        \"ioExpanderIO24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 24\"\"\",\n        }, # column\n        \"ioExpanderIO25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 25\"\"\",\n        }, # column\n        \"ioExpanderIO26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 26\"\"\",\n        }, # column\n        \"ioExpanderIO27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 27\"\"\",\n        }, # column\n        \"ioExpanderIO28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 28\"\"\",\n        }, # column\n        \"ioExpanderIO29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 29\"\"\",\n        }, # column\n        \"ioExpanderIO30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 30\"\"\",\n        }, # column\n        \"ioExpanderIO31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 31\"\"\",\n        }, # column\n        \"ioExpanderIO32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 32\"\"\",\n        }, # column\n        \"ioExpanderRelayName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay1 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"ioExpanderRelayName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay2 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"ioExpanderRelayName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay3 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.82\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.30.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"t3hdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of T3HD sensors\"\"\",\n        }, # table\n        \"t3hdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"t3hdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the T3HD sensor table: each entry contains\nan index (t3hdIndex) and other sensor details\"\"\",\n        }, # row\n        \"t3hdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"t3hdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"t3hdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"t3hdSensorIntName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Internal Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorIntTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Internal Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorIntTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Internal Temperature reading in F\"\"\",\n        }, # column\n        \"t3hdSensorIntHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Internal Humidity reading\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Internal Dew Point reading in C\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Internal Dew Point reading in F\"\"\",\n        }, # column\n        \"t3hdSensorExt1Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 1 status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExt1Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 1 Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExt1TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"External 1 Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorExt1TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"External 1 Temperature reading in F\"\"\",\n        }, # column\n        \"t3hdSensorExt2Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 2 status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExt2Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 2 Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExt2TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"External 2 Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorExt2TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.31.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"External 2 Temperature reading in F\"\"\",\n        }, # column\n        \"thdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of THD sensors\"\"\",\n        }, # table\n        \"thdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"thdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the THD sensor table: each entry contains\nan index (thdIndex) and other sensor details\"\"\",\n        }, # row\n        \"thdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"thdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"thdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"thdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"thdSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"thdSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"thdSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"thdSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Dew Point reading in C\"\"\",\n        }, # column\n        \"thdSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Dew Point reading in F\"\"\",\n        }, # column\n        \"pos60VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of 60Vdc sensors\"\"\",\n        }, # table\n        \"pos60VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pos60VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 60Vdc sensor table: each entry contains\nan index (pos60VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"pos60VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pos60VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pos60VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pos60VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pos60VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.33.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"60Vdc Sensor value\"\"\",\n        }, # column\n        \"ctrl2CirTotTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (IEC)\"\"\",\n        }, # table\n        \"ctrl2CirTotEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl2CirTotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl2CirTotIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl2CirTotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl2CirTotSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl2CirTotName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl2CirTotAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.34.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"sc10Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"SC10 sensors (internal measurements for SC10 units)\"\"\",\n        }, # table\n        \"sc10Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sc10Index\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the sc10 table: each entry contains\nan index (sc10Index) and other details\"\"\",\n        }, # row\n        \"sc10Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"sc10Serial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"sc10Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"sc10Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"sc10ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"setpoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"capacity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Control Mode setting indicator\"\"\",\n        }, # column\n        \"sc10SetpointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current temperature set point in C\"\"\",\n        }, # column\n        \"sc10SetpointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current temperature set point in F\"\"\",\n        }, # column\n        \"sc10TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in C\"\"\",\n        }, # column\n        \"sc10TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in F\"\"\",\n        }, # column\n        \"sc10Capacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.35.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current capacity for Fan Speed\"\"\",\n        }, # column\n        \"alarmSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101\",\n        }, # node\n        \"alarmCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Provides access for alarm configuration. Each row represents an alarm.\"\"\",\n        }, # table\n        \"alarmCfgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alarmCfgIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the alarm cfg table: each entry contains\nan index (alarmCfgIndex) and other details\"\"\",\n        }, # row\n        \"alarmCfgIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value. Provides unique ID for\nalarm, numbered from 1 to 200\"\"\",\n        }, # column\n        \"alarmCfgReadingID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"OID of a particular measurement to monitor. This object\nis also used to create or delete a row. To create a new\nrow, set the Sensor ID on a row that doesn't exist. Set\nthe ReadingID to 0.0 to destroy a row.\"\"\",\n        }, # column\n        \"alarmCfgThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"Tenths\",\n            \"description\" :\n                \"\"\"Depending on TripSelect this value acts as an upper or\nlower boundary for the sensor value. The value is in\nunits of tenths. \nSNMP Threshold = Actual Value * 10\nExample: 45 Threshold = 4.5 Amps\"\"\",\n        }, # column\n        \"alarmCfgTripSelect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.101.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tripBelow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tripAbove\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tells if alarm trips above or below the threshold value\"\"\",\n        }, # column\n        \"gstTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767\",\n        }, # node\n        \"gstTrapPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"gstTestNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Test SNMP Trap\"\"\",\n        }, # notification\n        \"gstClimateTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateLightNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateAirflowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateSoundNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10213\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10214\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Volts Trap\"\"\",\n        }, # notification\n        \"gstClimateVoltPeakNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10215\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Volts Peak Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10216\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps A Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10217\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak A Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10218\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power A Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10219\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power A Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10220\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor A Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10221\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps B Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10222\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak B Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10223\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power B Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10224\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power B Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10225\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor B Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10226\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps C Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10227\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak C Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10228\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power C Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10229\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power C Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10230\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor C Trap\"\"\",\n        }, # notification\n        \"gstClimateDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10231\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10232\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstPowMonkWattHrsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltMaxNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltMinNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltPeakNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Trap\"\"\",\n        }, # notification\n        \"gstPowMonDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstPowMonRealPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Trap\"\"\",\n        }, # notification\n        \"gstPowMonApparentPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Trap\"\"\",\n        }, # notification\n        \"gstPowMonPowerFactorNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet1StatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet2StatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"gstTempSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstTempSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorFlowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity\"\"\",\n        }, # notification\n        \"gstAirFlowSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts AB Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak AB Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power AB Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps AB Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor AB Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10618\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10619\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10620\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10621\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10622\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor BC Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10623\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours CA Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10624\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts CA Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10625\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak CA Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10626\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power CA Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10627\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps CA Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10628\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor CA Trap\"\"\",\n        }, # notification\n        \"gstDoorSensorStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Trap\"\"\",\n        }, # notification\n        \"gstWaterSensorDampnessNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Trap\"\"\",\n        }, # notification\n        \"gstCurrentMonitorDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.10905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstMillivoltMonitorMVNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Trap\"\"\",\n        }, # notification\n        \"gstOutlet1StatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Trap\"\"\",\n        }, # notification\n        \"gstOutlet2StatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Trap\"\"\",\n        }, # notification\n        \"gstVsfcSetPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcSetPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcFanSpeedNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcIntTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcIntTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt1TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt1TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt2TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt2TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt3TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt3TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt4TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Trap\"\"\",\n        }, # notification\n        \"gstVsfcExt4TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsDNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsENOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsGNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsG\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group G DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsHNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsH\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group H DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsAVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsAVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"AVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsBVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsBVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"BVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsCVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsCVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"CVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsDVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsDVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsEVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsEVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"EVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsFVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsFVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"FVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsGVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsGVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"GVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsHVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsHVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"HVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsINOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group I DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsJNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJ\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group J DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsKNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsK\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group K DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsLNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group L DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsMNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsM\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group M DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsNNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsN\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group N DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsONOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsO\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group O DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsPNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group P DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsIVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsIVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"IVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsJVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"JVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsKVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11531\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsKVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"KVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsLVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11532\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsLVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"LVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsMVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11533\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsMVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"MVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsNVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11534\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsNVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"NVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsOVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11535\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsOVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"OVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsPVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11536\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsPVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"PVolts Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPendingNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPending\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Pending Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet DeciAmps Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletGroupNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletGroup\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletUpDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletUpDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"UpDelay Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletDwnDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDwnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DwnDelay Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletRbtDurationNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDuration Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletURLNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"URL Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPOAActionNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOAAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POAAction Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPOADelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOADelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POADelay Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletkWattHrsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"kWattHrs Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletRbtDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDelay Trip Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletStatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletStatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity\"\"\",\n        }, # notification\n        \"gstDewPointSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11708\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11709\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"gstDigitalSensorDigitalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsSourceAActiveNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsSourceBActiveNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsPowerStatusANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsPowerStatusBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsSourceATempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstDstsSourceBTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.11914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstCpmSensorStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Trap\"\"\",\n        }, # notification\n        \"gstSmokeAlarmStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Trap\"\"\",\n        }, # notification\n        \"gstNeg48VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"gstPos30VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"gstAnalogSensorAnalogNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Trap\"\"\",\n        }, # notification\n        \"gstAirSpeedSwitchSensorAirSpeedNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.12805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airSpeedSwitchSensorAirSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airSpeedSwitchSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Air Speed Switch Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13037\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13038\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13039\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13040\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13041\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13042\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO7NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13043\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO7 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO8NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13044\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO8 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO9NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13045\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO9 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO10NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13046\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO10 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO11NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13047\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO11 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO12NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13048\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO12 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO13NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13049\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO13 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO14NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13050\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO14 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO15NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13051\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO15 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO16NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13052\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO16 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO17NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13053\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO17 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO18NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13054\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO18 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO19NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13055\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO19 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO20NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13056\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO20 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO21NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13057\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO21 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO22NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13058\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO22 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO23NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13059\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO23 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO24NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13060\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO24 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO25NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13061\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO25 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO26NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13062\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO26 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO27NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13063\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO27 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO28NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13064\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO28 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO29NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13065\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO29 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO30NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13066\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO30 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO31NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13067\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO31 Sensor Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO32NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13068\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO32 Sensor Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature C Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature F Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Humidity Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point C Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point F Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt1TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature C Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt1TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature F Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt2TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature C Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt2TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature F Trap\"\"\",\n        }, # notification\n        \"gstThdSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature C Trap\"\"\",\n        }, # notification\n        \"gstThdSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature F Trap\"\"\",\n        }, # notification\n        \"gstThdSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Humidity Trap\"\"\",\n        }, # notification\n        \"gstThdSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point C Trap\"\"\",\n        }, # notification\n        \"gstThdSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point F Trap\"\"\",\n        }, # notification\n        \"gstPos60VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos60VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pos60VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"60Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Total Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13426\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13427\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13428\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"gstSc10ControlModeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10ControlMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Control Mode Sensor Trap\"\"\",\n        }, # notification\n        \"gstSc10SetpointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstSc10SetpointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"gstSc10TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstSc10TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"gstSc10CapacityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.13510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10Capacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Fan Speed Sensor Trap\"\"\",\n        }, # notification\n        \"gstClimateTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateLightCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateAirflowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateSoundCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20213\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20214\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Volts Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateVoltPeakCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20215\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Volts Peak Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20216\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps A Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20217\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20218\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20219\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20220\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20221\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps B Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20222\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20223\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20224\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20225\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20226\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amps C Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDeciAmpPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20227\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDeciAmpPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Amp Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20228\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20229\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstClimatePowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20230\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climatePowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20231\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20232\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonkWattHrsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltMaxCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltMinCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonVoltPeakCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonRealPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonApparentPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonPowerFactorCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1 Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2 Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet1StatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"gstPowMonOutlet2StatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"gstTempSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstTempSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorFlowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"gstAirFlowSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTADeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts AB Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak AB Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power AB Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps AB Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor AB Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20618\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20619\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20620\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20621\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20622\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor BC Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAkWattHrsCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20623\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours CA Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltsCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20624\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts CA Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAVoltPeakCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20625\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak CA Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTARealPowerCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20626\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power CA Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAApparentPowerCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20627\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps CA Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDELTAPowerFactorCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20628\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor CA Clear Trap\"\"\",\n        }, # notification\n        \"gstDoorSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstWaterSensorDampnessCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstCurrentMonitorDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.20905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstMillivoltMonitorMVCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMaxCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltMinCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"gstPow3ChRealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Clear Trap\"\"\",\n        }, # notification\n        \"gstOutlet1StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Clear Trap\"\"\",\n        }, # notification\n        \"gstOutlet2StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Clear Trap\"\"\",\n        }, # notification\n        \"gstVsfcSetPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcSetPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcFanSpeedCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcIntTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcIntTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt1TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt1TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt2TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt2TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt3TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt3TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt4TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Clear\"\"\",\n        }, # notification\n        \"gstVsfcExt4TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChDeciAmpsPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsDCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsECLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsGCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsG\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group G DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsHCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsH\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group H DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsAVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsAVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"AVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsBVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsBVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"BVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsCVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsCVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"CVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsDVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsDVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsEVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsEVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"EVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsFVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsFVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"FVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsGVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsGVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"GVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsHVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsHVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"HVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsICLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group I DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsJCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJ\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group J DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsKCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsK\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group K DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsLCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group L DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsMCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsM\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group M DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsNCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsN\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group N DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsOCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsO\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group O DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsPCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group P DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsIVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsIVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"IVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsJVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"JVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsKVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21531\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsKVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"KVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsLVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21532\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsLVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"LVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsMVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21533\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsMVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"MVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsNVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21534\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsNVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"NVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsOVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21535\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsOVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"OVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlGrpAmpsPVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21536\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsPVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"PVolts Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPendingCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPending\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Pending Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletGroupCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletGroup\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletUpDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletUpDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"UpDelay Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletDwnDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDwnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DwnDelay Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletRbtDurationCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDuration Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletURLCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"URL Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPOAActionCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOAAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POAAction Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPOADelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOADelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POADelay Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletkWattHrsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"kWattHrs Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletRbtDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDelay Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrlOutletStatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletStatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21708\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"gstDewPointSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21709\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"gstDigitalSensorDigitalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstDstsVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsSourceAActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsSourceBActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsPowerStatusACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsPowerStatusBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsSourceATempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstDstsSourceBTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.21914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstCpmSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstSmokeAlarmStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Clear Trap\"\"\",\n        }, # notification\n        \"gstNeg48VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstPos30VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstAnalogSensorAnalogCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECDeciAmpsPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl3ChIECRealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstClimateRelayIO6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstAirSpeedSwitchSensorAirSpeedCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.22805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airSpeedSwitchSensorAirSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"airSpeedSwitchSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Air Speed Switch Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23037\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23038\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23039\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23040\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23041\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23042\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO7CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23043\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO7 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO8CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23044\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO8 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO9CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23045\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO9 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO10CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23046\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO10 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO11CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23047\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO11 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO12CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23048\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO12 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO13CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23049\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO13 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO14CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23050\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO14 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO15CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23051\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO15 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO16CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23052\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO16 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO17CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23053\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO17 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO18CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23054\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO18 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO19CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23055\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO19 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO20CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23056\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO20 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO21CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23057\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO21 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO22CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23058\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO22 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO23CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23059\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO23 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO24CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23060\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO24 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO25CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23061\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO25 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO26CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23062\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO26 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO27CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23063\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO27 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO28CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23064\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO28 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO29CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23065\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO29 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO30CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23066\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO30 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO31CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23067\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO31 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstIoExpanderIO32CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23068\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO32 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Humidity Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point C Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorIntDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point F Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt1TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt1TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt2TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"gstT3hdSensorExt2TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"gstThdSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"gstThdSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"gstThdSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"gstThdSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point C Clear Trap\"\"\",\n        }, # notification\n        \"gstThdSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point F Clear Trap\"\"\",\n        }, # notification\n        \"gstPos60VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos60VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"pos60VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"60Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Total Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23426\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23427\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"gstCtrl2CirTotPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23428\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"gstSc10ControlModeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10ControlMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Control Mode Sensor Clear\"\"\",\n        }, # notification\n        \"gstSc10SetpointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstSc10SetpointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"gstSc10TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstSc10TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"gstSc10CapacityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.23510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10Capacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Fan Speed Sensor Clear\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps7NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps8NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps9NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps10NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps11NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps12NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps13NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps14NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps15NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps16NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps17NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129169\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps18NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129170\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps19NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps20NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps21NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps22NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps23NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps24NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps25NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps26NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps27NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129179\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps28NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129180\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps29NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps30NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps31NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps32NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps33NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps33\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps34NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps34\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps35NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps35\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps36NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps36\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps37NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129189\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps37\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps38NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129190\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps38\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps39NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129191\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps39\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps40NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129192\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps40\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps41NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129193\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps41\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps42NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129194\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps42\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps43NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129195\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps43\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps44NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129196\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps44\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps45NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129197\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps45\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps46NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129198\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps46\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps47NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129199\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps47\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps48NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.129200\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps48\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps7CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps8CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps9CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps10CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps11CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps12CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps13CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps14CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps15CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps16CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps17CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139169\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps18CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139170\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps19CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps20CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps21CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps22CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps23CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps24CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps25CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps26CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps27CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139179\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps28CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139180\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps29CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps30CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps31CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps32CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps33CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps33\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps34CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps34\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps35CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps35\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps36CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps36\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps37CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139189\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps37\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps38CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139190\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps38\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps39CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139191\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps39\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps40CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139192\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps40\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps41CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139193\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps41\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps42CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139194\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps42\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps43CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139195\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps43\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps44CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139196\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps44\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps45CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139197\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps45\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps46CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139198\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps46\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps47CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139199\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps47\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"gstPowerDMDeciAmps48CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.21239.2.32767.0.139200\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps48\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/GEIST-V4-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python GEIST-V4-MIB\n\nFILENAME = \"GEIST-V4-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"GEIST-V4-MIB\",\n\n    \"GEIST-V4-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Geist\"\"\",\n        \"contact\" : \n            \"\"\"support@geistglobal.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB for Geist Products\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2012-09-11 00:00\",\n                \"description\" :\n                    \"\"\"Original version\"\"\",\n            },\n        ),\n        \"identity node\" : \"geist\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"geist\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239\",\n            \"status\" : \"current\",\n        }, # node\n        \"blackbird\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5\",\n        }, # node\n        \"watchdog100\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1\",\n        }, # node\n        \"deviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1\",\n        }, # node\n        \"productTitle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product name\"\"\",\n        }, # scalar\n        \"productVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product version\"\"\",\n        }, # scalar\n        \"productFriendlyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-assigned name\"\"\",\n        }, # scalar\n        \"productMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's unique MAC address\"\"\",\n        }, # scalar\n        \"productUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's main URL access point\"\"\",\n        }, # scalar\n        \"deviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of devices on unit\"\"\",\n        }, # scalar\n        \"temperatureUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Current units for temperature values. 0 = Degrees Fahrenheit, 1 = Degrees Celsius\"\"\",\n        }, # scalar\n        \"internalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Internal sensors for units\"\"\",\n        }, # table\n        \"internalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"internalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the internalTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"internalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"internalSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"internalName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"internalAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"internalTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"internalHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"internalDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew-point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"internalIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"internalIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"internalIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"internalIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"internalRelayState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the relay on?\"\"\",\n        }, # column\n        \"tempSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature Sensor\"\"\",\n        }, # table\n        \"tempSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tempSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the tempSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"tempSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"tempSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"tempSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"tempSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"tempSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"airFlowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Airflow, Humidity, Temperature and Dewpoint Sensor \"\"\",\n        }, # table\n        \"airFlowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFlowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the airFlowSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"airFlowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airFlowSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airFlowSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airFlowSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"airFlowSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"airFlowSensorFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading\"\"\",\n        }, # column\n        \"airFlowSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading\"\"\",\n        }, # column\n        \"airFlowSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"dewPointSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Dew Point sensor\"\"\",\n        }, # table\n        \"dewPointSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dewPointSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the dewPointSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"dewPointSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dewPointSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dewPointSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dewPointSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"dewPointSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"dewPointSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"dewPointSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew-point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"ccatSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote CCAT sensor\"\"\",\n        }, # table\n        \"ccatSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ccatSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the ccatSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"ccatSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ccatSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ccatSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ccatSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"ccatSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"5000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"5000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor reading\"\"\",\n        }, # column\n        \"ccatSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor type\"\"\",\n        }, # column\n        \"ccatSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor value description\"\"\",\n        }, # column\n        \"t3hdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature x 3, Humidity and Dewpoint Sensor\"\"\",\n        }, # table\n        \"t3hdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"t3hdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the t3hdSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"t3hdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"t3hdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"t3hdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"t3hdSensorIntName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorIntTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Internal Temperature in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorIntHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Internal DewPoint in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorExtAAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External A status: 0 = Unavailable, 1 = Available\"\"\",\n        }, # column\n        \"t3hdSensorExtAName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External A Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExtATemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for External Temperature A in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorExtBAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External B status: 0 = Unavailable, 1 = Available\"\"\",\n        }, # column\n        \"t3hdSensorExtBName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External B Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExtBTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for External Temperature B in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"thdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature, Humidity and Dewpoint Sensor\"\"\",\n        }, # table\n        \"thdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"thdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the thdSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"thdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"thdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"thdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"thdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"thdSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"thdSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"THD Sensor Humidity\"\"\",\n        }, # column\n        \"thdSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.9.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for DewPoint in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"rpmSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Power Manager Sensor\"\"\",\n        }, # table\n        \"rpmSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rpmSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the rpmSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"rpmSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"rpmSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"rpmSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"rpmSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"rpmSensorEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy\"\"\",\n        }, # column\n        \"rpmSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage\"\"\",\n        }, # column\n        \"rpmSensorVoltageMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max)\"\"\",\n        }, # column\n        \"rpmSensorVoltageMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min)\"\"\",\n        }, # column\n        \"rpmSensorVoltagePeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak)\"\"\",\n        }, # column\n        \"rpmSensorCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Current reading in deciAmps\"\"\",\n        }, # column\n        \"rpmSensorRealPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"RPM Sensor Real Power\"\"\",\n        }, # column\n        \"rpmSensorApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power\"\"\",\n        }, # column\n        \"rpmSensorPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor\"\"\",\n        }, # column\n        \"rpmSensorOutlet1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RPM Sensor Outlet 1 State: 0 = off, 1 = on\"\"\",\n        }, # column\n        \"rpmSensorOutlet2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.10.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RPM Sensor Outlet 2 State: 0 = off, 1 = on\"\"\",\n        }, # column\n        \"a2dSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Analog Measurement Sensor (Voltage, Current, or Dry Contact)\"\"\",\n        }, # table\n        \"a2DSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"a2dSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the a2dSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"a2dSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"a2dSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"a2dSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"a2dSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable\"\"\",\n        }, # column\n        \"a2dSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1000000\",\n                        \"max\" : \"1000000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1000000\",\n                        \"max\" : \"1000000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current analog measurement reading within either a user defined or preset range depending on device mode.\"\"\",\n        }, # column\n        \"trap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767\",\n        }, # node\n        \"trapPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"internalTestNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Test SNMP Trap\"\"\",\n        }, # notification\n        \"internalAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10204\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"internalTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"internalHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Trap\"\"\",\n        }, # notification\n        \"internalDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"internalIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1 Trap\"\"\",\n        }, # notification\n        \"internalIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2 Trap\"\"\",\n        }, # notification\n        \"internalIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3 Trap\"\"\",\n        }, # notification\n        \"internalIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4 Trap\"\"\",\n        }, # notification\n        \"tempSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10404\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"tempSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"airFlowSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10504\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"airFlowSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"airFlowSensorFlowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading Trap\"\"\",\n        }, # notification\n        \"airFlowSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading Trap\"\"\",\n        }, # notification\n        \"airFlowSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"dewPointSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10604\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"dewPointSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"dewPointSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Trap\"\"\",\n        }, # notification\n        \"dewPointSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"ccatSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10704\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"ccatSensorValueNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"ccatSensorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CCAT sensor reading Trap\"\"\",\n        }, # notification\n        \"t3hdSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10804\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10806\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10807\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10808\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtATempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10811\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtATemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External A Temperature Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtBTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10814\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtBTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External B Temperature Trap\"\"\",\n        }, # notification\n        \"thdSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10904\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"thdSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"thdSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Humidity Trap\"\"\",\n        }, # notification\n        \"thdSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.10907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"rpmSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11004\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"rpmSensorEnergyNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorEnergy\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11006\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMaxNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11007\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max) Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMinNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11008\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min) Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltagePeakNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11009\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltagePeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak) Trap\"\"\",\n        }, # notification\n        \"rpmSensorCurrentNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11010\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Current Trap\"\"\",\n        }, # notification\n        \"rpmSensorRealPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11011\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Real Power Trap\"\"\",\n        }, # notification\n        \"rpmSensorApparentPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11012\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power Trap\"\"\",\n        }, # notification\n        \"rpmSensorPowerFactorNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11013\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor Trap\"\"\",\n        }, # notification\n        \"a2dSensorAvailNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"a2dSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Trap\"\"\",\n        }, # notification\n        \"a2dSensorValueNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.11105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"a2dSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A2D Analog Sensor Measurement Trap\"\"\",\n        }, # notification\n        \"internalAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20204\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"internalTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"internalHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"internalDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"internalIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4 Clear Trap\"\"\",\n        }, # notification\n        \"tempSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20404\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"tempSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20504\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorFlowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20604\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"ccatSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20704\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"ccatSensorValueCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"ccatSensorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CCAT sensor reading Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20804\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20806\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20807\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20808\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtATempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20811\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtATemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External A Temperature Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtBTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20814\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtBTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External B Temperature Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20904\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Humidity Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.20907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21004\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorEnergyCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorEnergy\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21006\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMaxCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21007\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMinCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21008\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltagePeakCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21009\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltagePeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorCurrentCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21010\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Current Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorRealPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21011\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Real Power Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorApparentPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21012\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorPowerFactorCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21013\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor Clear Trap\"\"\",\n        }, # notification\n        \"a2dSensorAvailCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"a2dSensorAvail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device availability. 0 = Unavailable, 1 = Available, 2 = Partially Unavailable Clear Trap\"\"\",\n        }, # notification\n        \"a2dSensorValueCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"GEIST-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.21239.5.1.32767.0.21105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"a2dSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"GEIST-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A2D Analog Sensor Measurement Clear Trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IANA-ENTITY-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python IANA-ENTITY-MIB\n\nFILENAME = \"./IANA-ENTITY-MIB\"\n\nMIB = {\n    \"moduleName\" : \"IANA-ENTITY-MIB\",\n\n    \"IANA-ENTITY-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IANA\"\"\",\n        \"contact\" : \n            \"\"\"Internet Assigned Numbers Authority\nPostal: ICANN\n         12025 Waterfront Drive, Suite 300\n         Los Angeles, CA 90094-2536\n\nPhone: +1-310-301-5800\nEMail: iana&iana.org\"\"\",\n        \"description\" :\n            \"\"\"This MIB module defines a TEXTUAL-CONVENTION that provides\nan indication of the general hardware type of a particular\nphysical entity.\n\nCopyright (c) 2013 IETF Trust and the persons identified as\nauthors of the code.  All rights reserved.\n\n Redistribution and use in source and binary forms, with or\n without modification, is permitted pursuant to, and subject\n to the license terms contained in, the Simplified BSD\n License set forth in Section 4.c of the IETF Trust's Legal\n Provisions Relating to IETF Documents\n (http://trustee.ietf.org/license-info).\n\n The initial version of this MIB module was published in\n RFC 6933; for full legal notices see the RFC itself.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2015-07-16 00:00\",\n                \"description\" :\n                    \"\"\"Added storageDrive(15).\"\"\",\n            },\n            {\n                \"date\" : \"2015-07-16 00:00\",\n                \"description\" :\n                    \"\"\"Removed space between 'battery' and '(14)'.\"\"\",\n            },\n            {\n                \"date\" : \"2013-04-05 00:00\",\n                \"description\" :\n                    \"\"\"Initial version of this MIB as published in\nRFC 6933.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ianaEntityMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n    ),\n\n    \"typedefs\" : {\n        \"IANAPhysicalClass\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"chassis\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"backplane\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"container\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"powerSupply\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"fan\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"sensor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"module\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"port\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"stack\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"cpu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"energyObject\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"battery\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"storageDrive\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"description\" :\n                \"\"\"An enumerated value that provides an indication of the\ngeneral hardware type of a particular physical entity.\nThere are no restrictions as to the number of\nentPhysicalEntries of each entPhysicalClass, which must\nbe instantiated by an agent.\n\nThe enumeration 'other' is applicable if the physical\nentity class is known but does not match any of the\nsupported values.\n\nThe enumeration 'unknown' is applicable if the physical\nentity class is unknown to the agent.\n\nThe enumeration 'chassis' is applicable if the physical\nentity class is an overall container for networking\nequipment.  Any class of physical entity, except a stack,\nmay be contained within a chassis; a chassis may only\nbe contained within a stack.\n\nThe enumeration 'backplane' is applicable if the physical\nentity class is some sort of device for aggregating and\nforwarding networking traffic, such as a shared\nbackplane in a modular ethernet switch.  Note that an\nagent may model a backplane as a single physical entity,\nwhich is actually implemented as multiple discrete\nphysical components (within a chassis or stack).\n\nThe enumeration 'container' is applicable if the\nphysical entity class is capable of containing one or\nmore removable physical entities, possibly of different\ntypes.  For example, each (empty or full) slot in a\nchassis will be modeled as a container.  Note that all\nremovable physical entities should be modeled within\na container entity, such as field-replaceable modules,\nfans, or power supplies.  Note that all known containers\nshould be modeled by the agent, including empty\ncontainers.\n\nThe enumeration 'powerSupply' is applicable if the\nphysical entity class is a power-supplying component.\n\nThe enumeration 'fan' is applicable if the physical\nentity class is a fan or other heat-reduction component.\n\nThe enumeration 'sensor' is applicable if the physical\nentity class is some sort of sensor, such as a\ntemperature sensor within a router chassis.\n\nThe enumeration 'module' is applicable if the physical\nentity class is some sort of self-contained sub-system.\nIf the enumeration 'module' is removable, then it should\nbe modeled within a container entity; otherwise, it\nshould be modeled directly within another physical\nentity (e.g., a chassis or another module).\n\nThe enumeration 'port' is applicable if the physical\nentity class is some sort of networking port, capable\nof receiving and/or transmitting networking traffic.\n\nThe enumeration 'stack' is applicable if the physical\nentity class is some sort of super-container (possibly\nvirtual) intended to group together multiple chassis\nentities.  A stack may be realized by a 'virtual' cable,\na real interconnect cable attached to multiple chassis,\nor multiple interconnect cables.  A stack should not be\nmodeled within any other physical entities, but a stack\nmay be contained within another stack.  Only chassis\nentities should be contained within a stack.\n\nThe enumeration 'cpu' is applicable if the physical\nentity class is some sort of central processing unit.\n\nThe enumeration 'energyObject' is applicable if the\nphysical entity is some sort of energy object, i.e.,\na piece of equipment that is part of or attached to\na communications network that is monitored, controlled,\nor aids in the management of another device for Energy\nManagement.\n\nThe enumeration 'battery' is applicable if the physical\nentity class is some sort of battery.\n\nThe enumeration 'storageDrive' is applicable if the \nphysical entity class is some sort of entity with data \nstorage capability as main functionality, e.g. disk drive \n(HDD), solid state device (SSD), hybrid (SSHD), object \nstorage (OSD) or other.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ianaEntityMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IANA-ENTITY-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.216\",\n            \"status\" : \"current\",\n        }, # node\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IBM-PDU-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python IBM-PDU-MIB\n\nFILENAME = \"ibmdpi_v01.3_1.mib\"\n\nMIB = {\n    \"moduleName\" : \"IBM-PDU-MIB\",\n\n    \"IBM-PDU-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"International Business Machines\"\"\",\n        \"contact\" :\n            \"\"\"International Business Machines\n1 New Orchard Road\nArmonk, New York 10504-1722\nUnited States\nE-mail: ews@us.ibm.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module representing a power disribution\nunit supported by a single SNMP agent\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2012-05-31 00:00\",\n                \"description\" :\n                    \"\"\"1. Additions of fields ibmPduReboot, ibmPduOutletGlobalDelayTimer,\nand ibmPduOutletIndividualDelayTimer for IBM/Netezza.\n\nLicensed Materials - Property of IBM\nCopyright IBM Corp. 2012\"\"\",\n            },\n            {\n                \"date\" : \"2012-01-18 00:00\",\n                \"description\" :\n                    \"\"\"The IBM Power Distribution Unit MIB definitions for\nenabling power monitoring and management of an IBM\n  Power Unit.\n\n  Licensed Materials - Property of IBM\n  Copyright IBM Corp. 2009\"\"\",\n            },\n        ),\n        \"identity node\" : \"ibmPowerDistributionUnitMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n    ),\n\n    \"typedefs\" : {\n        \"IbmPduPowerBuf\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"480\",\n                \"max\" : \"480\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"480\",\n                \"max\" : \"480\"\n            },\n            \"description\" :\n                \"\"\"Buffer that contains the power records. This buffer\ncontains ibmPduBufferEntries (default 120) average\npower samples, in Watts, at 4 bytes each sample, in\nlittle-endian format.\"\"\",\n        },\n        \"IbmPduEnvBuf\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"240\",\n                \"max\" : \"240\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"240\",\n                \"max\" : \"240\"\n            },\n            \"description\" :\n                \"\"\"Buffer that contains temperature or humidity records.\nThis buffer contains ibmPduBufferEntries (default 120)\naverage point-in-time samples at 2 bytes each in\nlittle-endian format.\"\"\",\n        },\n        \"IbmPduMilliAmps\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Used for floating point amperage values since SNMP\ndoes not support floating point numbers.\"\"\",\n        },\n        \"IbmPduMilliVolt\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"description\" :\n                \"\"\"Used for floating point voltage values since SNMP\ndoes not support floating point numbers.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ibm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2\",\n        }, # node\n        \"ibmProd\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6\",\n        }, # node\n        \"ibmPowerDistributionUnitMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223\",\n            \"status\" : \"current\",\n        }, # node\n        \"ibmPduTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0\",\n        }, # node\n        \"ibmPduTrapData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1\",\n        }, # node\n        \"ibmPduTrapDataObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1\",\n        }, # node\n        \"ibmPduObjectIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Index in the table of an outlet or external meter\"\"\",\n        }, # scalar\n        \"ibmPduObjectType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pdu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"outlet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"extMeter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The type of object represented in the trap.\"\"\",\n        }, # scalar\n        \"ibmPduObjectID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Unique ID or name of the object represented in the trap.\"\"\",\n        }, # scalar\n        \"ibmPduSeverity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Severity of the trap.\"\"\",\n        }, # scalar\n        \"ibmPduTrapDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Textual description of the trap.\"\"\",\n        }, # scalar\n        \"ibmPduState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powerOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"powerOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"State change for management of an outlet.\"\"\",\n        }, # scalar\n        \"ibmPduVoltageWarning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"voltageNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"voltageOutOfRange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Voltage Warning.\"\"\",\n        }, # scalar\n        \"ibmPduConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2\",\n        }, # node\n        \"ibmPduCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.1\",\n        }, # node\n        \"ibmPduGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2\",\n        }, # node\n        \"ibmPduBufferTagValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Used for the update interval of power and environmental\nregisters.  The buffer tag is incremented every sample\nof data that is captured in the buffer.\"\"\",\n        }, # scalar\n        \"ibmPduSampleRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sample rate in seconds for each entry in the sampled buffer.\nThe default is 30.\"\"\",\n        }, # scalar\n        \"ibmPduBufferVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version of the snapshot buffer.\"\"\",\n        }, # scalar\n        \"ibmPduBufferEntries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of entries contained in each data buffer.\nThe default is 120.\"\"\",\n        }, # scalar\n        \"ibmPduMetadata\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7\",\n        }, # node\n        \"ibmPduLocation\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1\",\n        }, # node\n        \"ibmPduTelephoneNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Telephone number of building and site\nwhere the device is located.\"\"\",\n        }, # scalar\n        \"ibmPduCountryRegion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Country or region where the device\nis located.\"\"\",\n        }, # scalar\n        \"ibmPduStreetAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Street address of building where the\ndevice is located.\"\"\",\n        }, # scalar\n        \"ibmPduCity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"City where the device is located.\"\"\",\n        }, # scalar\n        \"ibmPduStateProvince\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"State or province where the device\nis located.\"\"\",\n        }, # scalar\n        \"ibmPduPostalCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Postal code where the device is\nlocated.\"\"\",\n        }, # scalar\n        \"ibmPduBuilding\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Building name where the device is\nlocated.\"\"\",\n        }, # scalar\n        \"ibmPduFloor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Floor number or designation where\nthe device is located.\"\"\",\n        }, # scalar\n        \"ibmPduRoomNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Room number where the device is\nlocated.\"\"\",\n        }, # scalar\n        \"ibmPduRow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Row number where the device is\nlocated.\"\"\",\n        }, # scalar\n        \"ibmPduAisle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Aisle number where the device is\nlocated.\"\"\",\n        }, # scalar\n        \"ibmPduDisplaceHeight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Displaced height in Centimeters.\"\"\",\n        }, # scalar\n        \"ibmPduAltitude\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Altitude in Meters.\"\"\",\n        }, # scalar\n        \"ibmPduOtherInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Additional ibmLocation information.\"\"\",\n        }, # scalar\n        \"ibmPduImage\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.2\",\n        }, # node\n        \"ibmPduLogo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device logo or image.\"\"\",\n        }, # scalar\n        \"ibmPduDeviceFront\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Image of the front of the device.\"\"\",\n        }, # scalar\n        \"ibmPduDeviceRear\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"65535\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Image of the back of the device.\"\"\",\n        }, # scalar\n        \"ibmPduSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version of the software loaded on the PDU.\"\"\",\n        }, # scalar\n        \"ibmPduMachineType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Machine type of the PDU.\"\"\",\n        }, # scalar\n        \"ibmPduModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Model number of the PDU.\"\"\",\n        }, # scalar\n        \"ibmPduPartNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Part number of the PDU.\"\"\",\n        }, # scalar\n        \"ibmPduName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Name of the device.\"\"\",\n        }, # scalar\n        \"ibmPduManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of manufacturer.\"\"\",\n        }, # scalar\n        \"ibmPduSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number of the device.\"\"\",\n        }, # scalar\n        \"ibmPduDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of the device.\"\"\",\n        }, # scalar\n        \"ibmPduUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"127\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"127\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"URL of the web interface to the ibmDevice if available.\"\"\",\n        }, # scalar\n        \"ibmPduReboot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set 1 to reboot PDU.\"\"\",\n        }, # scalar\n        \"ibmPduDateTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.7.13\",\n            \"status\" : \"current\",\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set or get PDU Date and Time.\"\"\",\n        }, # scalar\n        \"ibmPduDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8\",\n        }, # node\n        \"ibmPduOutlets\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2\",\n        }, # node\n        \"ibmPduOutletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets (regardless of their current state) present on this PDU.\"\"\",\n        }, # scalar\n        \"ibmPduOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet entries.  The number of entries is given by the value of\noutletCount.\"\"\",\n        }, # table\n        \"ibmPduOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ibmPduOutletNumber\",\n            ],\n            \"description\" :\n                \"\"\"A value contained within the OutletStruct.\"\"\",\n        }, # row\n        \"ibmPduOutletNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The unique index of the given outlet.\"\"\",\n        }, # column\n        \"ibmPduOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Text describing the name or designation of the given outlet.\"\"\",\n        }, # column\n        \"ibmPduOutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"c13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"c19\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of the outlet.\"\"\",\n        }, # column\n        \"ibmPduOutletDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of the outlet.\"\"\",\n        }, # column\n        \"ibmPduOutletAvgPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduPowerBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer containing average power values.  Refer to\ndescription of IbmPduPowerBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduOutletMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduPowerBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer containing max power values.  Refer to\ndescription of IbmPduPowerBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduOutletPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the Power Factor of the given outlet.\"\"\",\n        }, # column\n        \"ibmPduOutletVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduMilliVolt\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the Voltage of the given outlet\nreturned in MilliVolt.\"\"\",\n        }, # column\n        \"ibmPduOutletCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduMilliAmps\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the Current of the given outlet\nreturned in Milliamps.\"\"\",\n        }, # column\n        \"ibmPduOutletMaxCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduMilliAmps\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum capacity of the current\noutlet in Milliamps.\"\"\",\n        }, # column\n        \"ibmPduOutletCurrentThresholdWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduMilliAmps\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the warning threshold\nfor the given outlet returned in Milliamps.\"\"\",\n        }, # column\n        \"ibmPduOutletCurrentThresholdCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduMilliAmps\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the critical threshold\nfor the given outlet returned in Milliamps.\"\"\",\n        }, # column\n        \"ibmPduOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycling\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delaySwitch10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"delaySwitch30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delaySwitch60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the operational state for the given outlet.\nThis can also be used to set (change) the outlet state.\"\"\",\n        }, # column\n        \"ibmPduOutletGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the outlet group in which the outlet resides.\nIf there are no outlet groups present, the default is 0.\"\"\",\n        }, # column\n        \"ibmPduOutletLastPowerReading\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent power reading for this\noutlet, in Watts.\"\"\",\n        }, # column\n        \"ibmPduOutletIndividualDelayTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay timer for each outlet as AC power restored. Range: 0 sec ~ 3600 sec. Default Value: 0 sec. To combine with Global Delay timer to control outlet state/behavior as rack power or or restore\"\"\",\n        }, # column\n        \"ibmPduOutletGlobalDelayTimer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Global delay timer for all outlets. Range: 0 sec ~ 3600 sec. Default value:0 sec. To combine with Individual Delay timer to control outlet state/behavior as rack power on/restore\"\"\",\n        }, # scalar\n        \"ibmPduPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3\",\n        }, # node\n        \"ibmPduPhaseCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"single\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input power phases for the PDU.\"\"\",\n        }, # scalar\n        \"ibmPduPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of power phase entries.  The number of\nentries is given by phaseNumber.\"\"\",\n        }, # table\n        \"ibmPduPhaseTableEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ibmPduPhaseNumber\",\n            ],\n            \"description\" :\n                \"\"\"A value contained within the PowerPhaseStruct.\"\"\",\n        }, # row\n        \"ibmPduPhaseNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The power phase number.\"\"\",\n        }, # column\n        \"ibmPduPhaseAvgPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduPowerBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer containing average power values.  Refer to\ndescription of IbmPduPowerBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduPhaseMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduPowerBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer containing max power values.  Refer to\ndescription of IbmPduPowerBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduPhaseLastPowerReading\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent power reading for this\nphase, in Watts.\"\"\",\n        }, # column\n        \"ibmPduEnvironment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4\",\n        }, # node\n        \"ibmPduThermalBuffer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduEnvBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer that contains the thermal records.  Refer to\ndescription of IbmPduEnvBuf for information about\nbuffer format.\"\"\",\n        }, # scalar\n        \"ibmPduHumidityBuffer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduEnvBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer that contains the humdity records.  Refer to\ndescription of IbmPduEnvBuf for information about\nbuffer format.\"\"\",\n        }, # scalar\n        \"ibmPduThermalThresholdWarning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the warning threshold for\nthe given temperature returned in Celsius.\"\"\",\n        }, # scalar\n        \"ibmPduThermalThresholdCritical\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the critical threshold for\nthe given temperature returned in Celsius.\"\"\",\n        }, # scalar\n        \"ibmPduHumidityThresholdWarning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the warning threshold for\nthe given humidity returned as a percent.\"\"\",\n        }, # scalar\n        \"ibmPduHumidityThresholdCritical\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the critical threshold for\nthe given humidity returned as a percent.\"\"\",\n        }, # scalar\n        \"ibmPduThermalLastReading\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent temperature reading for\nthe internal temperature sensor, in degrees Celsius.\"\"\",\n        }, # scalar\n        \"ibmPduHumidityLastReading\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.8.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent humidity reading for\nthe internal humidity sensor, as a percentage.\"\"\",\n        }, # scalar\n        \"ibmPduExternalMonitors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9\",\n        }, # node\n        \"ibmPduExtMonitorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of external monitors (regardless of\ntheir current state) present on this PDU.\"\"\",\n        }, # scalar\n        \"ibmPduExtMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of external monitors. The number of\nentries is given by the value of externalMonitorCount.\"\"\",\n        }, # table\n        \"ibmPduExtMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ibmPduExtMonitorNumber\",\n            ],\n            \"description\" :\n                \"\"\"A value contained within the ExternalMonitorStruct.\"\"\",\n        }, # row\n        \"ibmPduExtMonitorNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The unique index of the given external monitor.\"\"\",\n        }, # column\n        \"ibmPduExtThermalBuffer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduEnvBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer that contains the thermal records.  Refer to\ndescription of IbmPduEnvBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduExtHumidityBuffer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IBM-PDU-MIB\", \"name\" : \"IbmPduEnvBuf\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Buffer that contains the humdity records.  Refer to\ndescription of IbmPduEnvBuf for information about\nbuffer format.\"\"\",\n        }, # column\n        \"ibmPduExtThermalThresholdWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the warning threshold for\nthe given temperature returned in Celsius.\"\"\",\n        }, # column\n        \"ibmPduExtThermalThresholdCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the critical threshold for\nthe given temperature returned in Celsius.\"\"\",\n        }, # column\n        \"ibmPduExtHumidityThresholdWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the warning threshold for\nthe given humidity returned as a percent.\"\"\",\n        }, # column\n        \"ibmPduExtHumidityThresholdCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the critical threshold for\nthe given humidity returned as a percent.\"\"\",\n        }, # column\n        \"ibmPduExtThermalLastReading\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent temperature reading for\nthe external temperature sensor, in degrees Celsius.\nIf no external temperature sensor is connected, a\nvalue of -1 should be returned.\"\"\",\n        }, # column\n        \"ibmPduExtHumidityLastReading\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.9.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the most recent humidity reading for\nthe external humidity sensor, as a percentage.  If no\nexternal humidity sensor is connected, a value of -1\nshould be returned.\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"ibmPduCurrentThreshold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSeverity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Threshold for Current events set by the user.\"\"\",\n        }, # notification\n        \"ibmPduThermalThreshold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSeverity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Threshold for thermal events set by the user.\"\"\",\n        }, # notification\n        \"ibmPduHumidityThreshold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSeverity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Threshold for humidity events set by the user.\"\"\",\n        }, # notification\n        \"ibmPduOutletStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet state has changed.\"\"\",\n        }, # notification\n        \"ibmPduFirmwareChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"PDU firmware has been updated.\"\"\",\n        }, # notification\n        \"ibmPduDeviceStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device state has changed.\"\"\",\n        }, # notification\n        \"ibmPduACVoltageWarning\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduVoltageWarning\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AC Voltage +/- 15% Normal.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"ibmPduDeviceGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduBufferTagValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSampleRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduBufferVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduBufferEntries\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduMachineType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduModelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPartNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduUrl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduReboot\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPhaseCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPhaseAvgPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPhaseMaxPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPhaseLastPowerReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduThermalBuffer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduHumidityBuffer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduThermalThresholdWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduThermalThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduHumidityThresholdWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduHumidityThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduThermalLastReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduHumidityLastReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing base information about\nthe overall PDU.\"\"\",\n        }, # group\n        \"ibmPduImageGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduLogo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduDeviceFront\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduDeviceRear\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing image information\nof the PDU.\"\"\",\n        }, # group\n        \"ibmPduLocationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduTelephoneNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduCountryRegion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduStreetAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduCity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduStateProvince\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduPostalCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduBuilding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduFloor\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduRoomNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduRow\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduAisle\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduDisplaceHeight\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduAltitude\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOtherInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing ibmLocation information\nof the PDU.\"\"\",\n        }, # group\n        \"ibmPduOutletGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduOutletCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletAvgPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletMaxPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletMaxCapacity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletCurrentThresholdWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletCurrentThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletGroupIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletLastPowerReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletIndividualDelayTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletGlobalDelayTimer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing information about\nthe outlets in a PDU.\"\"\",\n        }, # group\n        \"ibmPduExtMonitorGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduExtMonitorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtThermalBuffer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtHumidityBuffer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtThermalThresholdWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtThermalThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtHumidityThresholdWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletCurrentThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtHumidityThresholdCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtThermalLastReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtHumidityLastReading\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing information about\nexternal thermal and humidity monitors connected\nto the PDU.\"\"\",\n        }, # group\n        \"ibmPduTrapDataGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduObjectIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduObjectID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduSeverity\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduVoltageWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of object containing data for traps.\"\"\",\n        }, # group\n        \"ibmPduTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ibmPduCurrentThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduThermalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduHumidityThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduFirmwareChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduDeviceStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduACVoltageWarning\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A group of objects containing information about\ntraps of the PDU, its outlets, and external meters.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ibmPduCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IBM-PDU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2.6.223.2.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The requirements for conformance to the PDU-MIB.\"\"\",\n            \"requires\" : {\n                \"ibmPduDeviceGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduLocationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduImageGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduOutletGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduExtMonitorGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapDataGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n                \"ibmPduTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IBM-PDU-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IEEE8023-LAG-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python IEEE8023-LAG-MIB\n\nFILENAME = \"IEEE8023-LAG-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"IEEE8023-LAG-MIB\",\n\n    \"IEEE8023-LAG-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IEEE 802.3 Working Group\"\"\",\n        \"contact\" : \n            \"\"\" stds-802-3-trunking@majordomo.ieee.org\"\"\",\n        \"description\" :\n            \"\"\"The Link Aggregation module for managing IEEE Std\n802.3ad.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2000-06-27 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"lagMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n        {\"module\" : \"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n    ),\n\n    \"typedefs\" : {\n        \"LacpKey\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"65535\"\n            },\n            \"description\" :\n                \"\"\"The Actor or Partner Key value.\"\"\",\n        },\n        \"LacpState\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"lacpActivity\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"lacpTimeout\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"aggregation\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"synchronization\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"collecting\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"distributing\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"defaulted\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"expired\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"The Actor and Partner State values from the LACPDU.\"\"\",\n        },\n        \"ChurnState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"noChurn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"churn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"churnMonitor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The state of the Churn Detection machine.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"lagMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43\",\n            \"status\" : \"current\",\n        }, # node\n        \"lagMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1\",\n        }, # node\n        \"dot3adAgg\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1\",\n        }, # node\n        \"dot3adAggTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about every\nAggregator that is associated with this System.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1\"\"\",\n        }, # table\n        \"dot3adAggEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3adAggIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of the Aggregator parameters. This is indexed\nby the ifIndex of the Aggregator.\"\"\",\n        }, # row\n        \"dot3adAggIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The unique identifier allocated to this Aggregator by\nthe local System.  This attribute identifies an\nAggregator instance among the subordinate managed\nobjects of the containing object.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.1\"\"\",\n        }, # column\n        \"dot3adAggMACAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 6-octet read-only value carrying the individual\nMAC address assigned to the Aggregator.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.9\"\"\",\n        }, # column\n        \"dot3adAggActorSystemPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 2-octet read-write value indicating the priority\nvalue associated with the Actor's System ID.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.5\"\"\",\n        }, # column\n        \"dot3adAggActorSystemID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 6-octet read-write MAC address value used as a unique\nidentifier for the System that contains this Aggregator.\nNOTE-From the perspective of the Link Aggregation\nmechanisms described in Clause 43, only a single\ncombination of Actor's System ID and System Priority are\nconsidered, and no distinction is made between the\nvalues of these parameters for an Aggregator and the\nport(s) that are associated with it; i.e., the protocol\nis described in terms of the operation of aggregation\nwithin a single System. However, the managed objects\nprovided for the Aggregator and the port both allow\nmanagement of these parameters. The result of this is to\npermit a single piece of equipment to be configured by\nmanagement to contain more than one System from the\npoint of view of the operation of Link Aggregation. This\nmay be of particular use in the configuration of\nequipment that has limited aggregation capability (see\n43.6).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.4\"\"\",\n        }, # column\n        \"dot3adAggAggregateOrIndividual\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A read-only Boolean value indicating whether the\nAggregator represents an Aggregate (`TRUE') or\nan Individual link (`FALSE').\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.6\"\"\",\n        }, # column\n        \"dot3adAggActorAdminKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current administrative value of the Key for the\nAggregator. The administrative Key value may differ from\nthe operational Key value for the reasons discussed in\n43.6.2. This is a 16-bit, read-write value. The meaning\nof particular Key values is of local significance.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.7\"\"\",\n        }, # column\n        \"dot3adAggActorOperKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational value of the Key for the\nAggregator. The administrative Key value may differ from\nthe operational Key value for the reasons discussed in\n43.6.2.  This is a 16-bit read-only value. The meaning\nof particular Key values is of local significance.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.8\"\"\",\n        }, # column\n        \"dot3adAggPartnerSystemID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 6-octet read-only MAC address value consisting of the\nunique identifier for the current protocol Partner of\nthis Aggregator. A value of zero indicates that there is\nno known Partner. If the aggregation is manually\nconfigured, this System ID value will be a value\nassigned by the local System.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.10\"\"\",\n        }, # column\n        \"dot3adAggPartnerSystemPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 2-octet read-only value that indicates the priority\nvalue associated with the Partner's System ID. If the\naggregation is manually configured, this System Priority\nvalue will be a value assigned by the local System.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.11\"\"\",\n        }, # column\n        \"dot3adAggPartnerOperKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational value of the Key for the\nAggregator's current protocol Partner. This is a 16-bit\nread-only value. If the aggregation is manually\nconfigured, this Key value will be a value assigned by\nthe local System.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.12\"\"\",\n        }, # column\n        \"dot3adAggCollectorMaxDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of this 16-bit read-write attribute defines\nthe maximum delay, in tens of microseconds, that may be\nimposed by the Frame Collector between receiving a frame\nfrom an Aggregator Parser, and either delivering the\nframe to its MAC Client or discarding the frame (see\n43.2.3.1.1).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.32\"\"\",\n        }, # column\n        \"dot3adAggPortListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains a list of all the ports\nassociated with each Aggregator.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.30\"\"\",\n        }, # table\n        \"dot3adAggPortListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3adAggIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of the ports associated with a given Aggregator.\nThis is indexed by the ifIndex of the Aggregator.\"\"\",\n        }, # row\n        \"dot3adAggPortListPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The complete set of ports currently associated with\nthis Aggregator.  Each bit set in this list represents\nan Actor Port member of this Link Aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.1.1.30\"\"\",\n        }, # column\n        \"dot3adAggPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2\",\n        }, # node\n        \"dot3adAggPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains Link Aggregation Control\nconfiguration information about every\nAggregation Port associated with this device.\nA row appears in this table for each physical port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2\"\"\",\n        }, # table\n        \"dot3adAggPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3adAggPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of Link Aggregation Control configuration\nparameters for each Aggregation Port on this device.\"\"\",\n        }, # row\n        \"dot3adAggPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ifIndex of the port\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.1\"\"\",\n        }, # column\n        \"dot3adAggPortActorSystemPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 2-octet read-write value used to define the priority\nvalue associated with the Actor's System ID.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.2\"\"\",\n        }, # column\n        \"dot3adAggPortActorSystemID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 6-octet read-only MAC address value that defines the\nvalue of the System ID for the System that contains this\nAggregation Port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.3\"\"\",\n        }, # column\n        \"dot3adAggPortActorAdminKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current administrative value of the Key for the\nAggregation Port. This is a 16-bit read-write value.\nThe meaning of particular Key values is of local\nsignificance.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.4\"\"\",\n        }, # column\n        \"dot3adAggPortActorOperKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current operational value of the Key for the\nAggregation Port. This is a 16-bit read-only value.\nThe meaning of particular Key values is of local\nsignificance.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.5\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminSystemPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 2-octet read-write value used to define the\nadministrative value of priority associated with the\nPartner's System ID. The assigned value is used, along\nwith the value of aAggPortPartnerAdminSystemID,\naAggPortPartnerAdminKey, aAggPortPartnerAdminPort, and\naAggPortPartnerAdminPortPriority, in order to achieve\nmanually configured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.6\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperSystemPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 2-octet read-only value indicating the operational\nvalue of priority associated with the Partner's System\nID. The value of this attribute may contain the manually\nconfigured value carried in\naAggPortPartnerAdminSystemPriority if there is no\nprotocol Partner.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.7\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminSystemID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A 6-octet read-write MACAddress value representing the\nadministrative value of the Aggregation Port's protocol\nPartner's System ID. The assigned value is used, along\nwith the value of aAggPortPartnerAdminSystemPriority,\naAggPortPartnerAdminKey, aAggPortPartnerAdminPort, and\naAggPortPartnerAdminPortPriority, in order to achieve\nmanually configured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.8\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperSystemID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 6-octet read-only MACAddress value representing the\ncurrent value of the Aggregation Port's protocol\nPartner's System ID. A value of zero indicates that\nthere is no known protocol Partner. The value of this\nattribute may contain the manually configured value\ncarried in aAggPortPartnerAdminSystemID if there is no\nprotocol Partner.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.9\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current administrative value of the Key for the\nprotocol Partner. This is a 16-bit read-write value.\nThe assigned value is used, along with the value of\naAggPortPartnerAdminSystemPriority,\naAggPortPartnerAdminSystemID, aAggPortPartnerAdminPort,\nand aAggPortPartnerAdminPortPriority, in order to\nachieve manually configured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.10\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpKey\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational value of the Key for the\nprotocol Partner. The value of this attribute may\ncontain the manually configured value carried in\naAggPortPartnerAdminKey if there is no protocol Partner.\nThis is a 16-bit read-only value.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.11\"\"\",\n        }, # column\n        \"dot3adAggPortSelectedAggID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The identifier value of the Aggregator that this\nAggregation Port has currently selected. Zero indicates\nthat the Aggregation Port has not selected an\nAggregator, either because it is in the process of\ndetaching from an Aggregator or because there is no\nsuitable Aggregator available for it to select.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.12\"\"\",\n        }, # column\n        \"dot3adAggPortAttachedAggID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The identifier value of the Aggregator that this\nAggregation Port is currently attached to. Zero\nindicates that the Aggregation Port is not currently\nattached to an Aggregator.  This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.13\"\"\",\n        }, # column\n        \"dot3adAggPortActorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number locally assigned to the Aggregation\nPort. The port number is communicated in LACPDUs as the\nActor_Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.14\"\"\",\n        }, # column\n        \"dot3adAggPortActorPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The priority value assigned to this Aggregation Port.\nThis 16-bit value is read-write.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.15\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current administrative value of the port number for\nthe protocol Partner. This is a 16-bit read-write value.\nThe assigned value is used, along with the value of\naAggPortPartnerAdminSystemPriority,\naAggPortPartnerAdminSystemID, aAggPortPartnerAdminKey,\nand aAggPortPartnerAdminPortPriority, in order to\nachieve manually configured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.16\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational port number assigned to this\nAggregation Port by the Aggregation Port's protocol\nPartner. The value of this attribute may contain the\nmanually configured value carried in\naAggPortPartnerAdminPort if there is no protocol\nPartner. This 16-bit value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.17\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current administrative value of the port priority\nfor the protocol Partner. This is a 16-bit read-write\nvalue. The assigned value is used, along with the value\nof aAggPortPartnerAdminSystemPriority,\naAggPortPartnerAdminSystemID, aAggPortPartnerAdminKey,\nand aAggPortPartnerAdminPort, in order to achieve\nmanually configured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.18\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperPortPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The priority value assigned to this Aggregation Port by\nthe Partner. The value of this attribute may contain the\nmanually configured value carried in\naAggPortPartnerAdminPortPriority if there is no protocol\nPartner. This 16-bit value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.19\"\"\",\n        }, # column\n        \"dot3adAggPortActorAdminState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpState\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of 8 bits, corresponding to the administrative\nvalues of Actor_State (43.4.2) as transmitted by the\nActor in LACPDUs. The first bit corresponds to bit 0 of\nActor_State (LACP_Activity),\nthe second bit corresponds to bit 1 (LACP_Timeout),\nthe third bit corresponds to bit 2 (Aggregation),\nthe fourth bit corresponds to bit 3 (Synchronization),\nthe fifth bit corresponds to bit 4 (Collecting),\nthe sixth bit corresponds to bit 5 (Distributing),\nthe seventh bit corresponds to bit 6 (Defaulted),\nand the eighth bit corresponds to bit 7 (Expired).\nThese values allow administrative control over the\nvalues of LACP_Activity, LACP_Timeout and Aggregation.\nThis attribute value is read-write.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.20\"\"\",\n        }, # column\n        \"dot3adAggPortActorOperState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of 8 bits, corresponding to the current\noperational values of Actor_State as transmitted by the\nActor in LACPDUs. The bit allocations are as defined in\n30.7.2.1.20. This attribute value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.21\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerAdminState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpState\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of 8 bits, corresponding to the current\nadministrative value of Actor_State for the protocol\nPartner. The bit allocations are as defined in\n30.7.2.1.20. This attribute value is read-write. The\nassigned value is used in order to achieve manually\nconfigured aggregation.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.22\"\"\",\n        }, # column\n        \"dot3adAggPortPartnerOperState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"LacpState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string of 8 bits, corresponding to the current values\nof Actor_State in the most recently received LACPDU\ntransmitted by the protocol Partner. The bit allocations\nare as defined in 30.7.2.1.20. In the absence of an\nactive protocol Partner, this value may reflect the\nmanually configured value aAggPortPartnerAdminState.\nThis attribute value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.23\"\"\",\n        }, # column\n        \"dot3adAggPortAggregateOrIndividual\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A read-only Boolean value indicating whether the\nAggregation Port is able to Aggregate (`TRUE') or is\nonly able to operate as an Individual link (`FALSE').\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.2.1.24\"\"\",\n        }, # column\n        \"dot3adAggPortStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains Link Aggregation information\nabout every port that is associated with this device.\nA row appears in this table for each physical port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3\"\"\",\n        }, # table\n        \"dot3adAggPortStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3adAggPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of Link Aggregation Control Protocol statistics\nfor each port on this device.\"\"\",\n        }, # row\n        \"dot3adAggPortStatsLACPDUsRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid LACPDUs received on this\nAggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.2\"\"\",\n        }, # column\n        \"dot3adAggPortStatsMarkerPDUsRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid Marker PDUs received on this\nAggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.3\"\"\",\n        }, # column\n        \"dot3adAggPortStatsMarkerResponsePDUsRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid Marker Response PDUs received on\nthis Aggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.4\"\"\",\n        }, # column\n        \"dot3adAggPortStatsUnknownRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames received that either:\n- carry the Slow Protocols Ethernet Type value (43B.4),\n  but contain an unknown PDU,  or:\n- are addressed to the Slow Protocols group MAC\n  Address (43B.3), but do not carry the Slow Protocols\n  Ethernet Type.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.5\"\"\",\n        }, # column\n        \"dot3adAggPortStatsIllegalRx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames received that carry the Slow\nProtocols Ethernet Type value (43B.4), but contain a\nbadly formed PDU or an illegal value of Protocol Subtype\n(43B.4). This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.6\"\"\",\n        }, # column\n        \"dot3adAggPortStatsLACPDUsTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of LACPDUs transmitted on this\nAggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.7\"\"\",\n        }, # column\n        \"dot3adAggPortStatsMarkerPDUsTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Marker PDUs transmitted on this\nAggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.8\"\"\",\n        }, # column\n        \"dot3adAggPortStatsMarkerResponsePDUsTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Marker Response PDUs transmitted\non this Aggregation Port. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.3.1.9\"\"\",\n        }, # column\n        \"dot3adAggPortDebugTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains Link Aggregation debug\ninformation about every port that is associated with\nthis device.  A row appears in this table for each\nphysical port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4\"\"\",\n        }, # table\n        \"dot3adAggPortDebugEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot3adAggPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of the debug parameters for a port.\"\"\",\n        }, # row\n        \"dot3adAggPortDebugRxState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"currentRx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"expired\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"defaulted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"initialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lacpDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"portDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute holds the value `currentRx' if the\nReceive state machine for the Aggregation Port is in the\nCURRENT state, `expired' if the Receive state machine is\nin the EXPIRED state, `defaulted' if the Receive state\nmachine is in the DEFAULTED state, `initialize' if the\nReceive state machine is in the INITIALIZE state,\n`lacpDisabled' if the Receive state machine is in the\nLACP_DISABLED state, or `portDisabled' if the Receive\nstate machine is in the PORT_DISABLED state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.2\"\"\",\n        }, # column\n        \"dot3adAggPortDebugLastRxTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of aTimeSinceSystemReset (F.2.1) when\nthe last LACPDU was received by this Aggregation Port.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.3\"\"\",\n        }, # column\n        \"dot3adAggPortDebugMuxState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"detached\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"waiting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"attached\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"collecting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"distributing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"collectingDistributing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This attribute holds the value `detached' if the Mux\nstate machine (43.4.14) for the Aggregation Port is in\nthe DETACHED state, `waiting' if the Mux state machine\nis in the WAITING state, `attached' if the Mux state\nmachine for the Aggregation Port is in the ATTACHED\nstate, `collecting' if the Mux state machine for the\nAggregation Port is in the COLLECTING state,\n`distributing' if the Mux state machine for the\nAggregation Port is in the DISTRIBUTING state, and\n`collectingDistributing' if the Mux state machine for\nthe Aggregation Port is in the COLLECTING_DISTRIBUTING\nstate. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.4\"\"\",\n        }, # column\n        \"dot3adAggPortDebugMuxReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A human-readable text string indicating the reason\nfor the most recent change of Mux machine state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.5\"\"\",\n        }, # column\n        \"dot3adAggPortDebugActorChurnState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"ChurnState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the Actor Churn Detection machine\n(43.4.17) for the Aggregation Port. A value of `noChurn'\nindicates that the state machine is in either the\nNO_ACTOR_CHURN or the ACTOR_CHURN_MONITOR state, and\n`churn' indicates that the state machine is in the\nACTOR_CHURN state. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.6\"\"\",\n        }, # column\n        \"dot3adAggPortDebugPartnerChurnState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IEEE8023-LAG-MIB\", \"name\" : \"ChurnState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the Partner Churn Detection machine\n(43.4.17) for the Aggregation Port. A value of `noChurn'\nindicates that the state machine is in either the\nNO_PARTNER_CHURN or the PARTNER_CHURN_MONITOR state, and\n`churn' indicates that the state machine is in the\nPARTNER_CHURN state. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.7\"\"\",\n        }, # column\n        \"dot3adAggPortDebugActorChurnCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Actor Churn state\nmachine has entered the ACTOR_CHURN state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.8\"\"\",\n        }, # column\n        \"dot3adAggPortDebugPartnerChurnCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Partner Churn\nstate machine has entered the PARTNER_CHURN state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.9\"\"\",\n        }, # column\n        \"dot3adAggPortDebugActorSyncTransitionCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Actor's Mux state\nmachine (43.4.15) has entered the IN_SYNC state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.10\"\"\",\n        }, # column\n        \"dot3adAggPortDebugPartnerSyncTransitionCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Partner's Mux\nstate machine (43.4.15) has entered the IN_SYNC state.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.11\"\"\",\n        }, # column\n        \"dot3adAggPortDebugActorChangeCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Actor's perception of\nthe LAG ID for this Aggregation Port has changed.\nThis value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.12\"\"\",\n        }, # column\n        \"dot3adAggPortDebugPartnerChangeCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.2.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of the number of times the Partner's perception\nof the LAG ID (see 43.3.6.1) for this Aggregation Port\nhas changed. This value is read-only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.3 Subclause 30.7.4.1.13\"\"\",\n        }, # column\n        \"dot3adTablesLastChanged\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the time of the most recent\nchange to the dot3adAggTable, dot3adAggPortListTable, or\ndot3adAggPortTable.\"\"\",\n        }, # scalar\n        \"dot3adAggConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2\",\n        }, # node\n        \"dot3adAggGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1\",\n        }, # node\n        \"dot3adAggCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"dot3adAggGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adAggActorSystemID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggActorSystemPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggAggregateOrIndividual\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggActorAdminKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggMACAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggActorOperKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPartnerSystemID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPartnerSystemPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPartnerOperKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggCollectorMaxDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about an\naggregation.\"\"\",\n        }, # group\n        \"dot3adTablesLastChangedGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adTablesLastChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about the\ntime of changes to the configuration of aggregations and\ntheir ports.\"\"\",\n        }, # group\n        \"dot3adAggPortListGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adAggPortListPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nevery port in an aggregation.\"\"\",\n        }, # group\n        \"dot3adAggPortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adAggPortActorSystemPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorSystemID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorAdminKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorOperKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminSystemPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperSystemPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminSystemID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperSystemID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortSelectedAggID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortAttachedAggID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorPortPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminPortPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperPortPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorAdminState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortActorOperState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerAdminState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortPartnerOperState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortAggregateOrIndividual\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nevery port in an aggregation.\"\"\",\n        }, # group\n        \"dot3adAggPortStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adAggPortStatsLACPDUsRx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsMarkerPDUsRx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsMarkerResponsePDUsRx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsUnknownRx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsIllegalRx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsLACPDUsTx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsMarkerPDUsTx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortStatsMarkerResponsePDUsTx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nevery port in an aggregation.\"\"\",\n        }, # group\n        \"dot3adAggPortDebugGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.1.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot3adAggPortDebugRxState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugLastRxTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugMuxState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugMuxReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugActorChurnState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugPartnerChurnState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugActorChurnCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugPartnerChurnCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugActorSyncTransitionCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugPartnerSyncTransitionCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugActorChangeCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortDebugPartnerChangeCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing debug information\nabout every aggregated port.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"dot3adAggCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IEEE8023-LAG-MIB\",\n            \"oid\" : \"1.2.840.10006.300.43.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for device support of\nLink Aggregation.\"\"\",\n            \"requires\" : {\n                \"dot3adAggGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adTablesLastChangedGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IEEE8023-LAG-MIB\"\n                },\n                \"dot3adAggPortListGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IEEE8023-LAG-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.\"\"\",\n                },\n                \"dot3adAggPortStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IEEE8023-LAG-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.\"\"\",\n                },\n                \"dot3adAggPortDebugGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IEEE8023-LAG-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IF-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.5:\n#\n#   smidump -f python IF-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/IF-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"IF-MIB\",\n\n    \"IF-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Interfaces MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"   Keith McCloghrie\nCisco Systems, Inc.\n170 West Tasman Drive\nSan Jose, CA  95134-1706\nUS\n\n408-526-5260\nkzm@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module to describe generic objects for network\ninterface sub-layers.  This MIB is an updated version of\nMIB-II's ifTable, and incorporates the extensions defined in\nRFC 1229.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2000-06-14 00:00\",\n                \"description\" :\n                    \"\"\"Clarifications agreed upon by the Interfaces MIB WG, and\npublished as RFC 2863.\"\"\",\n            },\n            {\n                \"date\" : \"1996-02-28 21:55\",\n                \"description\" :\n                    \"\"\"Revisions made by the Interfaces MIB WG, and published in\nRFC 2233.\"\"\",\n            },\n            {\n                \"date\" : \"1993-11-08 21:55\",\n                \"description\" :\n                    \"\"\"Initial revision, published as part of RFC 1573.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ifMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-MIB\", \"name\" : \"snmpTraps\"},\n        {\"module\" : \"IANAifType-MIB\", \"name\" : \"IANAifType\"},\n    ),\n\n    \"typedefs\" : {\n        \"OwnerString\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"deprecated\",\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"format\" : \"255a\",\n            \"description\" :\n                \"\"\"This data type is used to model an administratively\nassigned name of the owner of a resource.  This information\nis taken from the NVT ASCII character set.  It is suggested\nthat this name contain one or more of the following: ASCII\nform of the manager station's transport address, management\nstation name (e.g., domain name), network management\npersonnel's name, location, or phone number.  In some cases\nthe agent itself will be the owner of an entry.  In these\ncases, this string shall be set to a string starting with\n'agent'.\"\"\",\n        },\n        \"InterfaceIndex\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each interface or\ninterface sub-layer in the managed system.  It is\nrecommended that values are assigned contiguously starting\nfrom 1.  The value for each interface sub-layer must remain\nconstant at least from one re-initialization of the entity's\nnetwork management system to the next re-initialization.\"\"\",\n        },\n        \"InterfaceIndexOrZero\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"This textual convention is an extension of the\nInterfaceIndex convention.  The latter defines a greater\nthan zero value used to identify an interface or interface\nsub-layer in the managed system.  This extension permits the\nadditional value of zero.  the value zero is object-specific\nand must therefore be defined as part of the description of\nany object which uses this syntax.  Examples of the usage of\nzero might include situations where interface was unknown,\nor when none or all interfaces need to be referenced.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"interfaces\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2\",\n        }, # node\n        \"ifNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of network interfaces (regardless of their\ncurrent state) present on this system.\"\"\",\n        }, # scalar\n        \"ifTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of interface entries.  The number of entries is\ngiven by the value of ifNumber.\"\"\",\n        }, # table\n        \"ifEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing management information applicable to a\nparticular interface.\"\"\",\n        }, # row\n        \"ifIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value, greater than zero, for each interface.  It\nis recommended that values are assigned contiguously\nstarting from 1.  The value for each interface sub-layer\nmust remain constant at least from one re-initialization of\nthe entity's network management system to the next re-\ninitialization.\"\"\",\n        }, # column\n        \"ifDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual string containing information about the\ninterface.  This string should include the name of the\nmanufacturer, the product name and the version of the\ninterface hardware/software.\"\"\",\n        }, # column\n        \"ifType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANAifType-MIB\", \"name\" : \"IANAifType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of interface.  Additional values for ifType are\nassigned by the Internet Assigned Numbers Authority (IANA),\nthrough updating the syntax of the IANAifType textual\nconvention.\"\"\",\n        }, # column\n        \"ifMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the largest packet which can be sent/received\non the interface, specified in octets.  For interfaces that\nare used for transmitting network datagrams, this is the\nsize of the largest network datagram that can be sent on the\ninterface.\"\"\",\n        }, # column\n        \"ifSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An estimate of the interface's current bandwidth in bits\nper second.  For interfaces which do not vary in bandwidth\nor for those where no accurate estimation can be made, this\nobject should contain the nominal bandwidth.  If the\nbandwidth of the interface is greater than the maximum value\nreportable by this object then this object should report its\nmaximum value (4,294,967,295) and ifHighSpeed must be used\nto report the interace's speed.  For a sub-layer which has\nno concept of bandwidth, this object should be zero.\"\"\",\n        }, # column\n        \"ifPhysAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface's address at its protocol sub-layer.  For\nexample, for an 802.x interface, this object normally\ncontains a MAC address.  The interface's media-specific MIB\nmust define the bit and byte ordering and the format of the\nvalue of this object.  For interfaces which do not have such\nan address (e.g., a serial line), this object should contain\nan octet string of zero length.\"\"\",\n        }, # column\n        \"ifAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"testing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired state of the interface.  The testing(3) state\nindicates that no operational packets can be passed.  When a\nmanaged system initializes, all interfaces start with\nifAdminStatus in the down(2) state.  As a result of either\nexplicit management action or per configuration information\nretained by the managed system, ifAdminStatus is then\nchanged to either the up(1) or testing(3) states (or remains\nin the down(2) state).\"\"\",\n        }, # column\n        \"ifOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"testing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dormant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lowerLayerDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational state of the interface.  The\ntesting(3) state indicates that no operational packets can\nbe passed.  If ifAdminStatus is down(2) then ifOperStatus\nshould be down(2).  If ifAdminStatus is changed to up(1)\nthen ifOperStatus should change to up(1) if the interface is\nready to transmit and receive network traffic; it should\nchange to dormant(5) if the interface is waiting for\nexternal actions (such as a serial line waiting for an\nincoming connection); it should remain in the down(2) state\nif and only if there is a fault that prevents it from going\nto the up(1) state; it should remain in the notPresent(6)\nstate if the interface has missing (typically, hardware)\ncomponents.\"\"\",\n        }, # column\n        \"ifLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time the interface entered\nits current operational state.  If the current state was\nentered prior to the last re-initialization of the local\nnetwork management subsystem, then this object contains a\nzero value.\"\"\",\n        }, # column\n        \"ifInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received on the interface,\nincluding framing characters.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifInUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were not addressed to a multicast\nor broadcast address at this sub-layer.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifInNUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were addressed to a multicast or\nbroadcast address at this sub-layer.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\n\nThis object is deprecated in favour of ifInMulticastPkts and\nifInBroadcastPkts.\"\"\",\n        }, # column\n        \"ifInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of inbound packets which were chosen to be\ndiscarded even though no errors had been detected to prevent\ntheir being deliverable to a higher-layer protocol.  One\npossible reason for discarding such a packet could be to\nfree up buffer space.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifInErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For packet-oriented interfaces, the number of inbound\npackets that contained errors preventing them from being\ndeliverable to a higher-layer protocol.  For character-\noriented or fixed-length interfaces, the number of inbound\ntransmission units that contained errors preventing them\nfrom being deliverable to a higher-layer protocol.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifInUnknownProtos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For packet-oriented interfaces, the number of packets\nreceived via the interface which were discarded because of\nan unknown or unsupported protocol.  For character-oriented\nor fixed-length interfaces that support protocol\nmultiplexing the number of transmission units received via\nthe interface which were discarded because of an unknown or\nunsupported protocol.  For any interface that does not\nsupport protocol multiplexing, this counter will always be\n0.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted out of the\ninterface, including framing characters.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were not addressed to a\nmulticast or broadcast address at this sub-layer, including\nthose that were discarded or not sent.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutNUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were addressed to a\nmulticast or broadcast address at this sub-layer, including\nthose that were discarded or not sent.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\n\nThis object is deprecated in favour of ifOutMulticastPkts\nand ifOutBroadcastPkts.\"\"\",\n        }, # column\n        \"ifOutDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outbound packets which were chosen to be\ndiscarded even though no errors had been detected to prevent\ntheir being transmitted.  One possible reason for discarding\nsuch a packet could be to free up buffer space.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For packet-oriented interfaces, the number of outbound\npackets that could not be transmitted because of errors.\nFor character-oriented or fixed-length interfaces, the\nnumber of outbound transmission units that could not be\ntransmitted because of errors.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutQLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.21\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length of the output packet queue (in packets).\"\"\",\n        }, # column\n        \"ifSpecific\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.2.2.1.22\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A reference to MIB definitions specific to the particular\nmedia being used to realize the interface.  It is\nrecommended that this value point to an instance of a MIB\nobject in the media-specific MIB, i.e., that this object\nhave the semantics associated with the InstancePointer\ntextual convention defined in RFC 2579.  In fact, it is\nrecommended that the media-specific MIB specify what value\nifSpecific should/can take for values of ifType.  If no MIB\ndefinitions specific to the particular media are available,\nthe value should be set to the OBJECT IDENTIFIER { 0 0 }.\"\"\",\n        }, # column\n        \"ifMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31\",\n            \"status\" : \"current\",\n        }, # node\n        \"ifMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1\",\n        }, # node\n        \"ifXTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of interface entries.  The number of entries is\ngiven by the value of ifNumber.  This table contains\nadditional objects for the interface table.\"\"\",\n        }, # table\n        \"ifXEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"IF-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"ifEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry containing additional management information\napplicable to a particular interface.\"\"\",\n        }, # row\n        \"ifName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The textual name of the interface.  The value of this\nobject should be the name of the interface as assigned by\nthe local device and should be suitable for use in commands\nentered at the device's `console'.  This might be a text\nname, such as `le0' or a simple port number, such as `1',\ndepending on the interface naming syntax of the device.  If\nseveral entries in the ifTable together represent a single\ninterface as named by the device, then each will have the\nsame value of ifName.  Note that for an agent which responds\nto SNMP queries concerning an interface on some other\n(proxied) device, then the value of ifName for such an\ninterface is the proxied device's local name for it.\n\nIf there is no local name, or this object is otherwise not\napplicable, then this object contains a zero-length string.\"\"\",\n        }, # column\n        \"ifInMulticastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were addressed to a multicast\naddress at this sub-layer.  For a MAC layer protocol, this\nincludes both Group and Functional addresses.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifInBroadcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were addressed to a broadcast\naddress at this sub-layer.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutMulticastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were addressed to a\nmulticast address at this sub-layer, including those that\nwere discarded or not sent.  For a MAC layer protocol, this\nincludes both Group and Functional addresses.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifOutBroadcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were addressed to a\nbroadcast address at this sub-layer, including those that\nwere discarded or not sent.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received on the interface,\nincluding framing characters.  This object is a 64-bit\nversion of ifInOctets.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCInUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were not addressed to a multicast\nor broadcast address at this sub-layer.  This object is a\n64-bit version of ifInUcastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCInMulticastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were addressed to a multicast\naddress at this sub-layer.  For a MAC layer protocol, this\nincludes both Group and Functional addresses.  This object\nis a 64-bit version of ifInMulticastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCInBroadcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packets, delivered by this sub-layer to a\nhigher (sub-)layer, which were addressed to a broadcast\naddress at this sub-layer.  This object is a 64-bit version\nof ifInBroadcastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted out of the\ninterface, including framing characters.  This object is a\n64-bit version of ifOutOctets.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCOutUcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were not addressed to a\nmulticast or broadcast address at this sub-layer, including\nthose that were discarded or not sent.  This object is a\n64-bit version of ifOutUcastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCOutMulticastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were addressed to a\nmulticast address at this sub-layer, including those that\nwere discarded or not sent.  For a MAC layer protocol, this\nincludes both Group and Functional addresses.  This object\nis a 64-bit version of ifOutMulticastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifHCOutBroadcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets that higher-level protocols\nrequested be transmitted, and which were addressed to a\nbroadcast address at this sub-layer, including those that\nwere discarded or not sent.  This object is a 64-bit version\nof ifOutBroadcastPkts.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nifCounterDiscontinuityTime.\"\"\",\n        }, # column\n        \"ifLinkUpDownTrapEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether linkUp/linkDown traps should be generated\nfor this interface.\n\nBy default, this object should have the value enabled(1) for\ninterfaces which do not operate on 'top' of any other\ninterface (as defined in the ifStackTable), and disabled(2)\notherwise.\"\"\",\n        }, # column\n        \"ifHighSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An estimate of the interface's current bandwidth in units\nof 1,000,000 bits per second.  If this object reports a\nvalue of `n' then the speed of the interface is somewhere in\nthe range of `n-500,000' to `n+499,999'.  For interfaces\nwhich do not vary in bandwidth or for those where no\naccurate estimation can be made, this object should contain\nthe nominal bandwidth.  For a sub-layer which has no concept\nof bandwidth, this object should be zero.\"\"\",\n        }, # column\n        \"ifPromiscuousMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object has a value of false(2) if this interface only\naccepts packets/frames that are addressed to this station.\nThis object has a value of true(1) when the station accepts\nall packets/frames transmitted on the media.  The value\ntrue(1) is only legal on certain types of media.  If legal,\nsetting this object to a value of true(1) may require the\ninterface to be reset before becoming effective.\n\nThe value of ifPromiscuousMode does not affect the reception\nof broadcast and multicast packets/frames by the interface.\"\"\",\n        }, # column\n        \"ifConnectorPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value 'true(1)' if the interface\nsublayer has a physical connector and the value 'false(2)'\notherwise.\"\"\",\n        }, # column\n        \"ifAlias\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is an 'alias' name for the interface as\nspecified by a network manager, and provides a non-volatile\n'handle' for the interface.\n\nOn the first instantiation of an interface, the value of\nifAlias associated with that interface is the zero-length\nstring.  As and when a value is written into an instance of\nifAlias through a network management set operation, then the\nagent must retain the supplied value in the ifAlias instance\nassociated with the same interface for as long as that\ninterface remains instantiated, including across all re-\ninitializations/reboots of the network management system,\nincluding those which result in a change of the interface's\nifIndex value.\n\nAn example of the value which a network manager might store\nin this object for a WAN interface is the (Telco's) circuit\nnumber/identifier of the interface.\n\nSome agents may support write-access only for interfaces\nhaving particular values of ifType.  An agent which supports\nwrite access to this object is required to keep the value in\nnon-volatile storage, but it may limit the length of new\nvalues depending on how much storage is already occupied by\nthe current values for other interfaces.\"\"\",\n        }, # column\n        \"ifCounterDiscontinuityTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\nany one or more of this interface's counters suffered a\ndiscontinuity.  The relevant counters are the specific\ninstances associated with this interface of any Counter32 or\nCounter64 object contained in the ifTable or ifXTable.  If\nno such discontinuities have occurred since the last re-\ninitialization of the local management subsystem, then this\nobject contains a zero value.\"\"\",\n        }, # column\n        \"ifStackTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing information on the relationships\nbetween the multiple sub-layers of network interfaces.  In\nparticular, it contains information on which sub-layers run\n'on top of' which other sub-layers, where each sub-layer\ncorresponds to a conceptual row in the ifTable.  For\nexample, when the sub-layer with ifIndex value x runs over\nthe sub-layer with ifIndex value y, then this table\ncontains:\n\n  ifStackStatus.x.y=active\n\nFor each ifIndex value, I, which identifies an active\ninterface, there are always at least two instantiated rows\nin this table associated with I.  For one of these rows, I\nis the value of ifStackHigherLayer; for the other, I is the\nvalue of ifStackLowerLayer.  (If I is not involved in\nmultiplexing, then these are the only two rows associated\nwith I.)\n\nFor example, two rows exist even for an interface which has\nno others stacked on top or below it:\n\n  ifStackStatus.0.x=active\n  ifStackStatus.x.0=active \"\"\",\n        }, # table\n        \"ifStackEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifStackHigherLayer\",\n                \"ifStackLowerLayer\",\n            ],\n            \"description\" :\n                \"\"\"Information on a particular relationship between two sub-\nlayers, specifying that one sub-layer runs on 'top' of the\nother sub-layer.  Each sub-layer corresponds to a conceptual\nrow in the ifTable.\"\"\",\n        }, # row\n        \"ifStackHigherLayer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value of ifIndex corresponding to the higher sub-layer\nof the relationship, i.e., the sub-layer which runs on 'top'\nof the sub-layer identified by the corresponding instance of\nifStackLowerLayer.  If there is no higher sub-layer (below\nthe internetwork layer), then this object has the value 0.\"\"\",\n        }, # column\n        \"ifStackLowerLayer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value of ifIndex corresponding to the lower sub-layer\nof the relationship, i.e., the sub-layer which runs 'below'\nthe sub-layer identified by the corresponding instance of\nifStackHigherLayer.  If there is no lower sub-layer, then\nthis object has the value 0.\"\"\",\n        }, # column\n        \"ifStackStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of the relationship between two sub-layers.\n\nChanging the value of this object from 'active' to\n'notInService' or 'destroy' will likely have consequences up\nand down the interface stack.  Thus, write access to this\nobject is likely to be inappropriate for some types of\ninterfaces, and many implementations will choose not to\nsupport write-access for any type of interface.\"\"\",\n        }, # column\n        \"ifTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"This table contains one entry per interface.  It defines\nobjects which allow a network manager to instruct an agent\nto test an interface for various faults.  Tests for an\ninterface are defined in the media-specific MIB for that\ninterface.  After invoking a test, the object ifTestResult\ncan be read to determine the outcome.  If an agent can not\nperform the test, ifTestResult is set to so indicate.  The\nobject ifTestCode can be used to provide further test-\nspecific or interface-specific (or even enterprise-specific)\ninformation concerning the outcome of the test.  Only one\ntest can be in progress on each interface at any one time.\nIf one test is in progress when another test is invoked, the\nsecond test is rejected.  Some agents may reject a test when\na prior test is active on another interface.\n\nBefore starting a test, a manager-station must first obtain\n'ownership' of the entry in the ifTestTable for the\ninterface to be tested.  This is accomplished with the\nifTestId and ifTestStatus objects as follows:\n\ntry_again:\n  get (ifTestId, ifTestStatus)\n  while (ifTestStatus != notInUse)\n      /*\n       * Loop while a test is running or some other\n       * manager is configuring a test.\n       */\n      short delay\n      get (ifTestId, ifTestStatus)\n  }\n\n  /*\n   * Is not being used right now -- let's compete\n   * to see who gets it.\n   */\n  lock_value = ifTestId\n\n  if ( set(ifTestId = lock_value, ifTestStatus = inUse,\n\n           ifTestOwner = 'my-IP-address') == FAILURE)\n      /*\n       * Another manager got the ifTestEntry -- go\n       * try again\n       */\n      goto try_again;\n\n  /*\n   * I have the lock\n   */\n  set up any test parameters.\n\n  /*\n   * This starts the test\n   */\n  set(ifTestType = test_to_run);\n\n  wait for test completion by polling ifTestResult\n\n  when test completes, agent sets ifTestResult\n       agent also sets ifTestStatus = 'notInUse'\n\n  retrieve any additional test results, and ifTestId\n\n  if (ifTestId == lock_value+1) results are valid\n\nA manager station first retrieves the value of the\nappropriate ifTestId and ifTestStatus objects, periodically\nrepeating the retrieval if necessary, until the value of\nifTestStatus is 'notInUse'.  The manager station then tries\nto set the same ifTestId object to the value it just\nretrieved, the same ifTestStatus object to 'inUse', and the\ncorresponding ifTestOwner object to a value indicating\nitself.  If the set operation succeeds then the manager has\nobtained ownership of the ifTestEntry, and the value of the\nifTestId object is incremented by the agent (per the\nsemantics of TestAndIncr).  Failure of the set operation\nindicates that some other manager has obtained ownership of\nthe ifTestEntry.\n\nOnce ownership is obtained, any test parameters can be\nsetup, and then the test is initiated by setting ifTestType.\nOn completion of the test, the agent sets ifTestStatus to\n'notInUse'.  Once this occurs, the manager can retrieve the\nresults.  In the (rare) event that the invocation of tests\nby two network managers were to overlap, then there would be\na possibility that the first test's results might be\noverwritten by the second test's results prior to the first\nresults being read.  This unlikely circumstance can be\ndetected by a network manager retrieving ifTestId at the\nsame time as retrieving the test results, and ensuring that\nthe results are for the desired request.\n\nIf ifTestType is not set within an abnormally long period of\ntime after ownership is obtained, the agent should time-out\nthe manager, and reset the value of the ifTestStatus object\nback to 'notInUse'.  It is suggested that this time-out\nperiod be 5 minutes.\n\nIn general, a management station must not retransmit a\nrequest to invoke a test for which it does not receive a\nresponse; instead, it properly inspects an agent's MIB to\ndetermine if the invocation was successful.  Only if the\ninvocation was unsuccessful, is the invocation request\nretransmitted.\n\nSome tests may require the interface to be taken off-line in\norder to execute them, or may even require the agent to\nreboot after completion of the test.  In these\ncircumstances, communication with the management station\ninvoking the test may be lost until after completion of the\ntest.  An agent is not required to support such tests.\nHowever, if such tests are supported, then the agent should\nmake every effort to transmit a response to the request\nwhich invoked the test prior to losing communication.  When\nthe agent is restored to normal service, the results of the\ntest are properly made available in the appropriate objects.\nNote that this requires that the ifIndex value assigned to\nan interface must be unchanged even if the test causes a\nreboot.  An agent must reject any test for which it cannot,\nperhaps due to resource constraints, make available at least\nthe minimum amount of information after that test\ncompletes.\"\"\",\n        }, # table\n        \"ifTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                { \"IF-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"ifEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for invoking tests on an\ninterface.\"\"\",\n        }, # row\n        \"ifTestId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object identifies the current invocation of the\ninterface's test.\"\"\",\n        }, # column\n        \"ifTestStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInUse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inUse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates whether or not some manager currently\nhas the necessary 'ownership' required to invoke a test on\nthis interface.  A write to this object is only successful\nwhen it changes its value from 'notInUse(1)' to 'inUse(2)'.\nAfter completion of a test, the agent resets the value back\nto 'notInUse(1)'.\"\"\",\n        }, # column\n        \"ifTestType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A control variable used to start and stop operator-\ninitiated interface tests.  Most OBJECT IDENTIFIER values\nassigned to tests are defined elsewhere, in association with\nspecific types of interface.  However, this document assigns\na value for a full-duplex loopback test, and defines the\nspecial meanings of the subject identifier:\n\n    noTest  OBJECT IDENTIFIER ::= { 0 0 }\n\nWhen the value noTest is written to this object, no action\nis taken unless a test is in progress, in which case the\ntest is aborted.  Writing any other value to this object is\nonly valid when no test is currently in progress, in which\ncase the indicated test is initiated.\n\nWhen read, this object always returns the most recent value\nthat ifTestType was set to.  If it has not been set since\nthe last initialization of the network management subsystem\non the agent, a value of noTest is returned.\"\"\",\n        }, # column\n        \"ifTestResult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unAbleToRun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aborted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains the result of the most recently\nrequested test, or the value none(1) if no tests have been\nrequested since the last reset.  Note that this facility\nprovides no provision for saving the results of one test\nwhen starting another, as could be required if used by\nmultiple managers concurrently.\"\"\",\n        }, # column\n        \"ifTestCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object contains a code which contains more specific\ninformation on the test result, for example an error-code\nafter a failed test.  Error codes and other values this\nobject may take are specific to the type of interface and/or\ntest.  The value may have the semantics of either the\nAutonomousType or InstancePointer textual conventions as\ndefined in RFC 2579.  The identifier:\n\n    testCodeUnknown  OBJECT IDENTIFIER ::= { 0 0 }\n\nis defined for use if no additional result code is\navailable.\"\"\",\n        }, # column\n        \"ifTestOwner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.3.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"OwnerString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The entity which currently has the 'ownership' required to\ninvoke a test on this interface.\"\"\",\n        }, # column\n        \"ifRcvAddressTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains an entry for each address (broadcast,\nmulticast, or uni-cast) for which the system will receive\npackets/frames on a particular interface, except as follows:\n\n- for an interface operating in promiscuous mode, entries\nare only required for those addresses for which the system\nwould receive frames were it not operating in promiscuous\nmode.\n\n- for 802.5 functional addresses, only one entry is\nrequired, for the address which has the functional address\nbit ANDed with the bit mask of all functional addresses for\nwhich the interface will accept frames.\n\nA system is normally able to use any unicast address which\ncorresponds to an entry in this table as a source address.\"\"\",\n        }, # table\n        \"ifRcvAddressEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"ifRcvAddressAddress\",\n            ],\n            \"description\" :\n                \"\"\"A list of objects identifying an address for which the\nsystem will accept packets/frames on the particular\ninterface identified by the index value ifIndex.\"\"\",\n        }, # row\n        \"ifRcvAddressAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"An address for which the system will accept packets/frames\non this entry's interface.\"\"\",\n        }, # column\n        \"ifRcvAddressStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is used to create and delete rows in the\nifRcvAddressTable.\"\"\",\n        }, # column\n        \"ifRcvAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"volatile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nonVolatile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"volatile\",\n            \"description\" :\n                \"\"\"This object has the value nonVolatile(3) for those entries\nin the table which are valid and will not be deleted by the\nnext restart of the managed system.  Entries having the\nvalue volatile(2) are valid and exist, but have not been\nsaved, so that will not exist after the next restart of the\nmanaged system.  Entries having the value other(1) are valid\nand exist but are not classified as to whether they will\ncontinue to exist after the next restart.\"\"\",\n        }, # column\n        \"ifTableLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time of the last creation or\ndeletion of an entry in the ifTable.  If the number of\nentries has been unchanged since the last re-initialization\nof the local network management subsystem, then this object\ncontains a zero value.\"\"\",\n        }, # scalar\n        \"ifStackLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time of the last change of\nthe (whole) interface stack.  A change of the interface\nstack is defined to be any creation, deletion, or change in\nvalue of any instance of ifStackStatus.  If the interface\nstack has been unchanged since the last re-initialization of\nthe local network management subsystem, then this object\ncontains a zero value.\"\"\",\n        }, # scalar\n        \"ifConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2\",\n        }, # node\n        \"ifGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1\",\n        }, # node\n        \"ifCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"linkDown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifAdminStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A linkDown trap signifies that the SNMP entity, acting in\nan agent role, has detected that the ifOperStatus object for\none of its communication links is about to enter the down\nstate from some other state (but not from the notPresent\nstate).  This other state is indicated by the included value\nof ifOperStatus.\"\"\",\n        }, # notification\n        \"linkUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifAdminStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A linkUp trap signifies that the SNMP entity, acting in an\nagent role, has detected that the ifOperStatus object for\none of its communication links left the down state and\ntransitioned into some other state (but not into the\nnotPresent state).  This other state is indicated by the\nincluded value of ifOperStatus.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"ifGeneralGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ifDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifLinkUpDownTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifConnectorPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHighSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects deprecated in favour of\nifGeneralInformationGroup.\"\"\",\n        }, # group\n        \"ifFixedLengthGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\nnon-high speed (non-high speed interfaces transmit and\nreceive at speeds less than or equal to 20,000,000\nbits/second) character-oriented or fixed-length-transmission\nnetwork interfaces.\"\"\",\n        }, # group\n        \"ifHCFixedLengthGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifHCInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\nhigh speed (greater than 20,000,000 bits/second) character-\noriented or fixed-length-transmission network interfaces.\"\"\",\n        }, # group\n        \"ifPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifPromiscuousMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\nnon-high speed (non-high speed interfaces transmit and\nreceive at speeds less than or equal to 20,000,000\nbits/second) packet-oriented network interfaces.\"\"\",\n        }, # group\n        \"ifHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifHCInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifPromiscuousMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\nhigh speed (greater than 20,000,000 bits/second but less\nthan or equal to 650,000,000 bits/second) packet-oriented\nnetwork interfaces.\"\"\",\n        }, # group\n        \"ifVHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifHCInUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCInMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCInBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHCOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutMulticastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutBroadcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifPromiscuousMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\nhigher speed (greater than 650,000,000 bits/second) packet-\noriented network interfaces.\"\"\",\n        }, # group\n        \"ifRcvAddressGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifRcvAddressStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifRcvAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information on the\nmultiple addresses which an interface receives.\"\"\",\n        }, # group\n        \"ifTestGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.8\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ifTestId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTestStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTestType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTestResult\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTestCode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTestOwner\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing the ability to invoke\ntests on an interface.\"\"\",\n        }, # group\n        \"ifStackGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.9\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ifStackStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The previous collection of objects providing information on\nthe layering of MIB-II interfaces.\"\"\",\n        }, # group\n        \"ifGeneralInformationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifLinkUpDownTrapEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifConnectorPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifHighSpeed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifAlias\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifTableLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information applicable to\nall network interfaces.\"\"\",\n        }, # group\n        \"ifStackGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifStackStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifStackLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information on the\nlayering of MIB-II interfaces.\"\"\",\n        }, # group\n        \"ifOldObjectsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.12\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ifInNUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutNUcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifOutQLen\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifSpecific\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects deprecated from the original MIB-\nII interfaces group.\"\"\",\n        }, # group\n        \"ifCounterDiscontinuityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ifCounterDiscontinuityTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information specific to\ninterface counter discontinuities.\"\"\",\n        }, # group\n        \"linkUpDownNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.1.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"linkUp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"linkDown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IF-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notifications which indicate specific changes in the\nvalue of ifOperStatus.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ifCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A compliance statement defined in a previous version of\nthis MIB module, for SNMP entities which have network\ninterfaces.\"\"\",\n            \"requires\" : {\n                \"ifGeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifStackGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all network interfaces which\nare character-oriented or transmit data in fixed-length\ntransmission units.\"\"\",\n                },\n                \"ifHCFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are character-oriented or transmit data in fixed-\nlength transmission units, and for which the value of the\ncorresponding instance of ifSpeed is greater than 20,000,000\nbits/second.\"\"\",\n                },\n                \"ifPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all network interfaces which\nare packet-oriented.\"\"\",\n                },\n                \"ifHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are packet-oriented and for which the value of the\ncorresponding instance of ifSpeed is greater than\n650,000,000 bits/second.\"\"\",\n                },\n                \"ifTestGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.  Media-specific MIBs which require\ninterface tests are strongly encouraged to use this group\nfor invoking tests and reporting results.  A medium specific\nMIB which has mandatory tests may make implementation of\nthis group mandatory.\"\"\",\n                },\n                \"ifRcvAddressGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"The applicability of this group MUST be defined by the\nmedia-specific MIBs.  Media-specific MIBs must define the\nexact meaning, use, and semantics of the addresses in this\ngroup.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"ifLinkUpDownTrapEnable\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifPromiscuousMode\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifStackStatus\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one of the six\nenumerated values for the RowStatus textual convention need\nbe supported, specifically: active(1).\"\"\",\n                },\n                \"ifAdminStatus\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"up\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"down\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, nor is support for the value\ntesting(3).\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ifCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.2.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A compliance statement defined in a previous version of\nthis MIB module, for SNMP entities which have network\ninterfaces.\"\"\",\n            \"requires\" : {\n                \"ifGeneralInformationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifStackGroup2\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifCounterDiscontinuityGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all network interfaces which\nare character-oriented or transmit data in fixed-length\ntransmission units.\"\"\",\n                },\n                \"ifHCFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are character-oriented or transmit data in fixed-\nlength transmission units, and for which the value of the\ncorresponding instance of ifSpeed is greater than 20,000,000\nbits/second.\"\"\",\n                },\n                \"ifPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all network interfaces which\nare packet-oriented.\"\"\",\n                },\n                \"ifHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are packet-oriented and for which the value of the\ncorresponding instance of ifSpeed is greater than\n650,000,000 bits/second.\"\"\",\n                },\n                \"ifRcvAddressGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"The applicability of this group MUST be defined by the\nmedia-specific MIBs.  Media-specific MIBs must define the\nexact meaning, use, and semantics of the addresses in this\ngroup.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"ifLinkUpDownTrapEnable\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifPromiscuousMode\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifStackStatus\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, and only one of the six\nenumerated values for the RowStatus textual convention need\nbe supported, specifically: active(1).\"\"\",\n                },\n                \"ifAdminStatus\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"up\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"down\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, nor is support for the value\ntesting(3).\"\"\",\n                },\n                \"ifAlias\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ifCompliance3\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IF-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.31.2.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities which have\nnetwork interfaces.\"\"\",\n            \"requires\" : {\n                \"ifGeneralInformationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"linkUpDownNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"ifFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for those network interfaces which\nare character-oriented or transmit data in fixed-length\ntransmission units, and for which the value of the\ncorresponding instance of ifSpeed is less than or equal to\n20,000,000 bits/second.\"\"\",\n                },\n                \"ifHCFixedLengthGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for those network interfaces which\nare character-oriented or transmit data in fixed-length\ntransmission units, and for which the value of the\ncorresponding instance of ifSpeed is greater than 20,000,000\nbits/second.\"\"\",\n                },\n                \"ifPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for those network interfaces which\nare packet-oriented, and for which the value of the\ncorresponding instance of ifSpeed is less than or equal to\n20,000,000 bits/second.\"\"\",\n                },\n                \"ifHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are packet-oriented and for which the value of the\ncorresponding instance of ifSpeed is greater than 20,000,000\nbits/second but less than or equal to 650,000,000\nbits/second.\"\"\",\n                },\n                \"ifVHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory only for those network interfaces\nwhich are packet-oriented and for which the value of the\ncorresponding instance of ifSpeed is greater than\n650,000,000 bits/second.\"\"\",\n                },\n                \"ifCounterDiscontinuityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for those network interfaces that\nare required to maintain counters (i.e., those for which one\nof the ifFixedLengthGroup, ifHCFixedLengthGroup,\nifPacketGroup, ifHCPacketGroup, or ifVHCPacketGroup is\nmandatory).\"\"\",\n                },\n                \"ifRcvAddressGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IF-MIB\",\n                    \"description\" :\n                        \"\"\"The applicability of this group MUST be defined by the\nmedia-specific MIBs.  Media-specific MIBs must define the\nexact meaning, use, and semantics of the addresses in this\ngroup.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"ifLinkUpDownTrapEnable\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifPromiscuousMode\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"ifAdminStatus\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"up\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"down\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required, nor is support for the value\ntesting(3).\"\"\",\n                },\n                \"ifAlias\" : {\n                    \"module\" : \"IF-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IP-FORWARD-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python IP-FORWARD-MIB\n\nFILENAME = \"/usr/share/mibs/ietf/IP-FORWARD-MIB\"\n\nMIB = {\n    \"moduleName\" : \"IP-FORWARD-MIB\",\n\n    \"IP-FORWARD-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"IETF IPv6 Working Group\nhttp://www.ietf.org/html.charters/ipv6-charter.html\"\"\",\n        \"contact\" :\n            \"\"\"Editor:\nBrian Haberman\nJohns Hopkins University - Applied Physics Laboratory\nMailstop 17-S442\n11100 Johns Hopkins Road\nLaurel MD,  20723-6099  USA\n\nPhone: +1-443-778-1319\nEmail: brian@innovationslab.net\n\nSend comments to <ipv6@ietf.org>\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for the management of CIDR multipath IP\nRoutes.\n\nCopyright (C) The Internet Society (2006).  This version\nof this MIB module is a part of RFC 4292; see the RFC\nitself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2006-02-01 00:00\",\n                \"description\" :\n                    \"\"\"IPv4/v6 version-independent revision.  Minimal changes\nwere made to the original RFC 2096 MIB to allow easy\nupgrade of existing IPv4 implementations to the\nversion-independent MIB.  These changes include:\n\nAdding inetCidrRouteDiscards as a replacement for the\ndeprecated ipRoutingDiscards and ipv6DiscardedRoutes\nobjects.\n\nAdding a new conformance statement to support the\nimplementation of the IP Forwarding MIB in a\nread-only mode.\n\nThe inetCidrRouteTable replaces the IPv4-specific\nipCidrRouteTable, its related objects, and related\nconformance statements.\n\nPublished as RFC 4292.\"\"\",\n            },\n            {\n                \"date\" : \"1996-09-19 00:00\",\n                \"description\" :\n                    \"\"\"Revised to support CIDR routes.\nPublished as RFC 2096.\"\"\",\n            },\n            {\n                \"date\" : \"1992-07-02 21:56\",\n                \"description\" :\n                    \"\"\"Initial version, published as RFC 1354.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ipForward\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n        {\"module\" : \"IP-MIB\", \"name\" : \"ip\"},\n        {\"module\" : \"IANA-RTPROTO-MIB\", \"name\" : \"IANAipRouteProtocol\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n    ),\n\n    \"nodes\" : {\n        \"ipForward\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24\",\n            \"status\" : \"current\",\n        }, # node\n        \"ipForwardNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of current ipForwardTable entries that are\nnot invalid.\"\"\",\n        }, # scalar\n        \"ipForwardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"This entity's IP Routing table.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1213 Section 6.6, The IP Group\"\"\",\n        }, # table\n        \"ipForwardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1\",\n            \"create\" : \"true\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"ipForwardDest\",\n                \"ipForwardProto\",\n                \"ipForwardPolicy\",\n                \"ipForwardNextHop\",\n            ],\n            \"description\" :\n                \"\"\"A particular route to a particular destination, under a\nparticular policy.\"\"\",\n        }, # row\n        \"ipForwardDest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The destination IP address of this route.  An entry\nwith a value of 0.0.0.0 is considered a default route.\n\nThis object may not take a Multicast (Class D) address\nvalue.\n\nAny assignment (implicit or otherwise) of an instance\nof this object to a value x must be rejected if the\nbitwise logical-AND of x with the value of the\ncorresponding instance of the ipForwardMask object is\nnot equal to x.\"\"\",\n        }, # column\n        \"ipForwardMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"Indicate the mask to be logical-ANDed with the\ndestination address before being compared to the value\nin the ipForwardDest field.  For those systems that do\nnot support arbitrary subnet masks, an agent constructs\nthe value of the ipForwardMask by reference to the IP\nAddress Class.\n\nAny assignment (implicit or otherwise) of an instance\nof this object to a value x must be rejected if the\nbitwise logical-AND of x with the value of the\ncorresponding instance of the ipForwardDest object is\nnot equal to ipForwardDest.\"\"\",\n        }, # column\n        \"ipForwardPolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The general set of conditions that would cause\nthe selection of one multipath route (set of\nnext hops for a given destination) is referred\nto as 'policy'.\n\nUnless the mechanism indicated by ipForwardProto\nspecifies otherwise, the policy specifier is\nthe IP TOS Field.  The encoding of IP TOS is as\nspecified by the following convention.  Zero\nindicates the default path if no more specific\npolicy applies.\n\n+-----+-----+-----+-----+-----+-----+-----+-----+\n|                 |                       |     |\n|   PRECEDENCE    |    TYPE OF SERVICE    |  0  |\n|                 |                       |     |\n+-----+-----+-----+-----+-----+-----+-----+-----+\n\n             IP TOS                IP TOS\n   Field     Policy      Field     Policy\n   Contents    Code      Contents    Code\n   0 0 0 0  ==>   0      0 0 0 1  ==>   2\n   0 0 1 0  ==>   4      0 0 1 1  ==>   6\n   0 1 0 0  ==>   8      0 1 0 1  ==>  10\n   0 1 1 0  ==>  12      0 1 1 1  ==>  14\n   1 0 0 0  ==>  16      1 0 0 1  ==>  18\n   1 0 1 0  ==>  20      1 0 1 1  ==>  22\n   1 1 0 0  ==>  24      1 1 0 1  ==>  26\n   1 1 1 0  ==>  28      1 1 1 1  ==>  30\n\nProtocols defining 'policy' otherwise must either\ndefine a set of values that are valid for\nthis object or must implement an integer-instanced\npolicy table for which this object's\nvalue acts as an index.\"\"\",\n        }, # column\n        \"ipForwardNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"On remote routes, the address of the next system en\nroute; otherwise, 0.0.0.0.\"\"\",\n        }, # column\n        \"ipForwardIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The ifIndex value that identifies the local interface\nthrough which the next hop of this route should be\nreached.\"\"\",\n        }, # column\n        \"ipForwardType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"invalid\",\n            \"description\" :\n                \"\"\"The type of route.  Note that local(3) refers to a\nroute for which the next hop is the final destination;\nremote(4) refers to a route for which the next hop is\nnot the final destination.\n\nSetting this object to the value invalid(2) has the\neffect of invalidating the corresponding entry in the\nipForwardTable object.  That is, it effectively\ndisassociates the destination identified with said\nentry from the route identified with said entry.  It is\nan implementation-specific matter as to whether the\nagent removes an invalidated entry from the table.\nAccordingly, management stations must be prepared to\nreceive tabular information from agents that\ncorresponds to entries not currently in use.  Proper\ninterpretation of such entries requires examination of\nthe relevant ipForwardType object.\"\"\",\n        }, # column\n        \"ipForwardProto\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.7\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"netmgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"icmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ggp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"hello\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"rip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"is-is\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"es-is\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ciscoIgrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"bbnSpfIgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"ospf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"bgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"idpr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The routing mechanism via which this route was learned.\nInclusion of values for gateway routing protocols is\nnot intended to imply that hosts should support those\nprotocols.\"\"\",\n        }, # column\n        \"ipForwardAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.8\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The number of seconds since this route was last updated\nor otherwise determined to be correct.  Note that no\nsemantics of `too old' can be implied except through\nknowledge of the routing protocol by which the route\nwas learned.\"\"\",\n        }, # column\n        \"ipForwardInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.9\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A reference to MIB definitions specific to the\nparticular routing protocol that is responsible for\nthis route, as determined by the value specified in the\nroute's ipForwardProto value.  If this information is\nnot present, its value should be set to the OBJECT\nIDENTIFIER { 0 0 }, which is a syntactically valid\nobject identifier, and any implementation conforming to\nASN.1 and the Basic Encoding Rules must be able to\ngenerate and recognize this value.\"\"\",\n        }, # column\n        \"ipForwardNextHopAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.10\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The Autonomous System Number of the Next Hop.  When\nthis is unknown or not relevant to the protocol\nindicated by ipForwardProto, zero.\"\"\",\n        }, # column\n        \"ipForwardMetric1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.11\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"The primary routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipForwardProto value.\nIf this metric is not used, its value should be set to\n-1.\"\"\",\n        }, # column\n        \"ipForwardMetric2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.12\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipForwardProto value.\nIf this metric is not used, its value should be set to\n-1.\"\"\",\n        }, # column\n        \"ipForwardMetric3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.13\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipForwardProto value.\nIf this metric is not used, its value should be set to\n-1.\"\"\",\n        }, # column\n        \"ipForwardMetric4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.14\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipForwardProto value.\nIf this metric is not used, its value should be set to\n-1.\"\"\",\n        }, # column\n        \"ipForwardMetric5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.2.1.15\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipForwardProto value.\nIf this metric is not used, its value should be set to\n-1.\"\"\",\n        }, # column\n        \"ipCidrRouteNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of current ipCidrRouteTable entries that are\nnot invalid.  This object is deprecated in favor of\ninetCidrRouteNumber and the inetCidrRouteTable.\"\"\",\n        }, # scalar\n        \"ipCidrRouteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"This entity's IP Routing table.  This table has been\ndeprecated in favor of the IP version neutral\ninetCidrRouteTable.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1213 Section 6.6, The IP Group\"\"\",\n        }, # table\n        \"ipCidrRouteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"ipCidrRouteDest\",\n                \"ipCidrRouteMask\",\n                \"ipCidrRouteTos\",\n                \"ipCidrRouteNextHop\",\n            ],\n            \"description\" :\n                \"\"\"A particular route to a particular destination, under a\n\nparticular policy.\"\"\",\n        }, # row\n        \"ipCidrRouteDest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The destination IP address of this route.\n\nThis object may not take a Multicast (Class D) address\nvalue.\n\nAny assignment (implicit or otherwise) of an instance\nof this object to a value x must be rejected if the\nbitwise logical-AND of x with the value of the\ncorresponding instance of the ipCidrRouteMask object is\nnot equal to x.\"\"\",\n        }, # column\n        \"ipCidrRouteMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicate the mask to be logical-ANDed with the\ndestination address before being compared to the value\nin the ipCidrRouteDest field.  For those systems that\ndo not support arbitrary subnet masks, an agent\nconstructs the value of the ipCidrRouteMask by\nreference to the IP Address Class.\n\nAny assignment (implicit or otherwise) of an instance\nof this object to a value x must be rejected if the\nbitwise logical-AND of x with the value of the\ncorresponding instance of the ipCidrRouteDest object is\nnot equal to ipCidrRouteDest.\"\"\",\n        }, # column\n        \"ipCidrRouteTos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The policy specifier is the IP TOS Field.  The encoding\nof IP TOS is as specified by the following convention.\nZero indicates the default path if no more specific\npolicy applies.\n\n+-----+-----+-----+-----+-----+-----+-----+-----+\n|                 |                       |     |\n|   PRECEDENCE    |    TYPE OF SERVICE    |  0  |\n|                 |                       |     |\n+-----+-----+-----+-----+-----+-----+-----+-----+\n\n             IP TOS                IP TOS\n   Field     Policy      Field     Policy\n   Contents    Code      Contents    Code\n   0 0 0 0  ==>   0      0 0 0 1  ==>   2\n   0 0 1 0  ==>   4      0 0 1 1  ==>   6\n   0 1 0 0  ==>   8      0 1 0 1  ==>  10\n   0 1 1 0  ==>  12      0 1 1 1  ==>  14\n   1 0 0 0  ==>  16      1 0 0 1  ==>  18\n   1 0 1 0  ==>  20      1 0 1 1  ==>  22\n\n   1 1 0 0  ==>  24      1 1 0 1  ==>  26\n   1 1 1 0  ==>  28      1 1 1 1  ==>  30\"\"\",\n        }, # column\n        \"ipCidrRouteNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"On remote routes, the address of the next system en\nroute; Otherwise, 0.0.0.0.\"\"\",\n        }, # column\n        \"ipCidrRouteIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The ifIndex value that identifies the local interface\nthrough which the next hop of this route should be\nreached.\"\"\",\n        }, # column\n        \"ipCidrRouteType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reject\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of route.  Note that local(3) refers to a\nroute for which the next hop is the final destination;\nremote(4) refers to a route for which the next hop is\nnot the final destination.\n\nRoutes that do not result in traffic forwarding or\nrejection should not be displayed, even if the\nimplementation keeps them stored internally.\n\nreject (2) refers to a route that, if matched,\ndiscards the message as unreachable.  This is used in\nsome protocols as a means of correctly aggregating\nroutes.\"\"\",\n        }, # column\n        \"ipCidrRouteProto\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"netmgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"icmp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"egp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ggp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"hello\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"rip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"isIs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"esIs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"ciscoIgrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"bbnSpfIgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"ospf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"bgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"idpr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"ciscoEigrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The routing mechanism via which this route was learned.\nInclusion of values for gateway routing protocols is\nnot intended to imply that hosts should support those\nprotocols.\"\"\",\n        }, # column\n        \"ipCidrRouteAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The number of seconds since this route was last updated\nor otherwise determined to be correct.  Note that no\nsemantics of `too old' can be implied, except through\nknowledge of the routing protocol by which the route\nwas learned.\"\"\",\n        }, # column\n        \"ipCidrRouteInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A reference to MIB definitions specific to the\nparticular routing protocol that is responsible for\nthis route, as determined by the value specified in the\nroute's ipCidrRouteProto value.  If this information is\nnot present, its value should be set to the OBJECT\nIDENTIFIER { 0 0 }, which is a syntactically valid\nobject identifier, and any implementation conforming to\nASN.1 and the Basic Encoding Rules must be able to\ngenerate and recognize this value.\"\"\",\n        }, # column\n        \"ipCidrRouteNextHopAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The Autonomous System Number of the Next Hop.  The\nsemantics of this object are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  When this object is unknown or not relevant, its\nvalue should be set to zero.\"\"\",\n        }, # column\n        \"ipCidrRouteMetric1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"The primary routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"ipCidrRouteMetric2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  If this metric is not used, its value should be\n\nset to -1.\"\"\",\n        }, # column\n        \"ipCidrRouteMetric3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.13\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"ipCidrRouteMetric4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.14\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"ipCidrRouteMetric5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.15\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's ipCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"ipCidrRouteStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.4.1.16\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to row\ninstallation and removal conventions.\"\"\",\n        }, # column\n        \"ipForwardConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5\",\n        }, # node\n        \"ipForwardGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.1\",\n        }, # node\n        \"ipForwardCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.2\",\n        }, # node\n        \"inetCidrRouteNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of current inetCidrRouteTable entries that\nare not invalid.\"\"\",\n        }, # scalar\n        \"inetCidrRouteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This entity's IP Routing table.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1213 Section 6.6, The IP Group\"\"\",\n        }, # table\n        \"inetCidrRouteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"inetCidrRouteDestType\",\n                \"inetCidrRouteDest\",\n                \"inetCidrRoutePfxLen\",\n                \"inetCidrRoutePolicy\",\n                \"inetCidrRouteNextHopType\",\n                \"inetCidrRouteNextHop\",\n            ],\n            \"description\" :\n                \"\"\"A particular route to a particular destination, under a\nparticular policy (as reflected in the\ninetCidrRoutePolicy object).\n\nDynamically created rows will survive an agent reboot.\n\nImplementers need to be aware that if the total number\nof elements (octets or sub-identifiers) in\ninetCidrRouteDest, inetCidrRoutePolicy, and\ninetCidrRouteNextHop exceeds 111, then OIDs of column\ninstances in this table will have more than 128 sub-\nidentifiers and cannot be accessed using SNMPv1,\nSNMPv2c, or SNMPv3.\"\"\",\n        }, # row\n        \"inetCidrRouteDestType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of the inetCidrRouteDest address, as defined\nin the InetAddress MIB.\n\nOnly those address types that may appear in an actual\nrouting table are allowed as values of this object.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4001\"\"\",\n        }, # column\n        \"inetCidrRouteDest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The destination IP address of this route.\n\nThe type of this address is determined by the value of\nthe inetCidrRouteDestType object.\n\nThe values for the index objects inetCidrRouteDest and\ninetCidrRoutePfxLen must be consistent.  When the value\nof inetCidrRouteDest (excluding the zone index, if one\nis present) is x, then the bitwise logical-AND\nof x with the value of the mask formed from the\ncorresponding index object inetCidrRoutePfxLen MUST be\nequal to x.  If not, then the index pair is not\nconsistent and an inconsistentName error must be\nreturned on SET or CREATE requests.\"\"\",\n        }, # column\n        \"inetCidrRoutePfxLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Indicates the number of leading one bits that form the\nmask to be logical-ANDed with the destination address\nbefore being compared to the value in the\n\ninetCidrRouteDest field.\n\nThe values for the index objects inetCidrRouteDest and\ninetCidrRoutePfxLen must be consistent.  When the value\nof inetCidrRouteDest (excluding the zone index, if one\nis present) is x, then the bitwise logical-AND\nof x with the value of the mask formed from the\ncorresponding index object inetCidrRoutePfxLen MUST be\nequal to x.  If not, then the index pair is not\nconsistent and an inconsistentName error must be\nreturned on SET or CREATE requests.\"\"\",\n        }, # column\n        \"inetCidrRoutePolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object is an opaque object without any defined\nsemantics.  Its purpose is to serve as an additional\nindex that may delineate between multiple entries to\nthe same destination.  The value { 0 0 } shall be used\nas the default value for this object.\"\"\",\n        }, # column\n        \"inetCidrRouteNextHopType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of the inetCidrRouteNextHop address, as\ndefined in the InetAddress MIB.\n\nValue should be set to unknown(0) for non-remote\nroutes.\n\nOnly those address types that may appear in an actual\nrouting table are allowed as values of this object.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4001\"\"\",\n        }, # column\n        \"inetCidrRouteNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"On remote routes, the address of the next system en\n\nroute.  For non-remote routes, a zero length string.\n\nThe type of this address is determined by the value of\nthe inetCidrRouteNextHopType object.\"\"\",\n        }, # column\n        \"inetCidrRouteIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndexOrZero\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The ifIndex value that identifies the local interface\nthrough which the next hop of this route should be\nreached.  A value of 0 is valid and represents the\nscenario where no interface is specified.\"\"\",\n        }, # column\n        \"inetCidrRouteType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reject\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"blackhole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of route.  Note that local(3) refers to a\nroute for which the next hop is the final destination;\nremote(4) refers to a route for which the next hop is\nnot the final destination.\n\nRoutes that do not result in traffic forwarding or\nrejection should not be displayed, even if the\nimplementation keeps them stored internally.\n\nreject(2) refers to a route that, if matched, discards\nthe message as unreachable and returns a notification\n(e.g., ICMP error) to the message sender.  This is used\nin some protocols as a means of correctly aggregating\nroutes.\n\nblackhole(5) refers to a route that, if matched,\ndiscards the message silently.\"\"\",\n        }, # column\n        \"inetCidrRouteProto\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANA-RTPROTO-MIB\", \"name\" : \"IANAipRouteProtocol\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The routing mechanism via which this route was learned.\nInclusion of values for gateway routing protocols is\nnot intended to imply that hosts should support those\nprotocols.\"\"\",\n        }, # column\n        \"inetCidrRouteAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of seconds since this route was last updated\nor otherwise determined to be correct.  Note that no\nsemantics of 'too old' can be implied, except through\nknowledge of the routing protocol by which the route\nwas learned.\"\"\",\n        }, # column\n        \"inetCidrRouteNextHopAS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAutonomousSystemNumber\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The Autonomous System Number of the Next Hop.  The\nsemantics of this object are determined by the routing-\nprotocol specified in the route's inetCidrRouteProto\nvalue.  When this object is unknown or not relevant, its\nvalue should be set to zero.\"\"\",\n        }, # column\n        \"inetCidrRouteMetric1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"The primary routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's inetCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"inetCidrRouteMetric2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's inetCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"inetCidrRouteMetric3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's inetCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"inetCidrRouteMetric4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\nprotocol specified in the route's inetCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"inetCidrRouteMetric5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"-1\",\n            \"description\" :\n                \"\"\"An alternate routing metric for this route.  The\nsemantics of this metric are determined by the routing-\n\nprotocol specified in the route's inetCidrRouteProto\nvalue.  If this metric is not used, its value should be\nset to -1.\"\"\",\n        }, # column\n        \"inetCidrRouteStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to row\ninstallation and removal conventions.\n\nA row entry cannot be modified when the status is\nmarked as active(1).\"\"\",\n        }, # column\n        \"inetCidrRouteDiscards\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid route entries discarded from the\ninetCidrRouteTable.  Discarded route entries do not\nappear in the inetCidrRouteTable.  One possible reason\nfor discarding an entry would be to free-up buffer space\nfor other route table entries.\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"groups\" : {\n        \"ipForwardMultiPathGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.1.2\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"ipForwardNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardDest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardPolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardProto\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardNextHopAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMetric1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMetric2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMetric3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMetric4\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipForwardMetric5\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP Multipath Route Table.\"\"\",\n        }, # group\n        \"ipForwardCidrRouteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.1.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ipCidrRouteNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteDest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteTos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteProto\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteNextHopAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMetric1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMetric2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMetric3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMetric4\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteMetric5\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"ipCidrRouteStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The CIDR Route Table.\n\nThis group has been deprecated and replaced with\ninetForwardCidrRouteGroup.\"\"\",\n        }, # group\n        \"inetForwardCidrRouteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"inetCidrRouteDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteProto\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteNextHopAS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteMetric1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteMetric2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteMetric3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteMetric4\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteMetric5\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n                \"inetCidrRouteNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The IP version-independent CIDR Route Table.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ipForwardCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.2.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMPv2 entities that\nimplement the ipForward MIB.\n\nThis compliance statement has been deprecated and\nreplaced with ipForwardFullCompliance and\nipForwardReadOnlyCompliance.\"\"\",\n            \"requires\" : {\n                \"ipForwardCidrRouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ipForwardOldCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.2.2\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities that\nimplement the ipForward MIB.\"\"\",\n            \"requires\" : {\n                \"ipForwardMultiPathGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ipForwardFullCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"When this MIB is implemented for read-create, the\nimplementation can claim full compliance.\n\nThere are a number of INDEX objects that cannot be\nrepresented in the form of OBJECT clauses in SMIv2,\nbut for which there are compliance requirements,\nexpressed in OBJECT clause form in this description:\n\n-- OBJECT      inetCidrRouteDestType\n-- SYNTAX      InetAddressType (ipv4(1), ipv6(2),\n--                              ipv4z(3), ipv6z(4))\n-- DESCRIPTION\n--     This MIB requires support for global and\n--     non-global ipv4 and ipv6 addresses.\n\n--\n-- OBJECT      inetCidrRouteDest\n-- SYNTAX      InetAddress (SIZE (4 | 8 | 16 | 20))\n-- DESCRIPTION\n--     This MIB requires support for global and\n--     non-global IPv4 and IPv6 addresses.\n--\n-- OBJECT      inetCidrRouteNextHopType\n-- SYNTAX      InetAddressType (unknown(0), ipv4(1),\n--                              ipv6(2), ipv4z(3)\n--                              ipv6z(4))\n-- DESCRIPTION\n--     This MIB requires support for global and\n--     non-global ipv4 and ipv6 addresses.\n--\n-- OBJECT      inetCidrRouteNextHop\n-- SYNTAX      InetAddress (SIZE (0 | 4 | 8 | 16 | 20))\n-- DESCRIPTION\n--     This MIB requires support for global and\n--     non-global IPv4 and IPv6 addresses.\"\"\",\n            \"requires\" : {\n                \"inetForwardCidrRouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"inetCidrRouteStatus\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"notInService\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                        },\n                    }, # syntax\n                    \"writesyntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                            \"notInService\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"createAndGo\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"4\"\n                            },\n                            \"destroy\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"6\"\n                            },\n                        },\n                    }, # writesyntax\n                    \"description\" :\n                        \"\"\"Support for createAndWait is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"ipForwardReadOnlyCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-FORWARD-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.24.5.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"When this MIB is implemented without support for read-\ncreate (i.e., in read-only mode), the implementation can\nclaim read-only compliance.\"\"\",\n            \"requires\" : {\n                \"inetForwardCidrRouteGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-FORWARD-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"inetCidrRouteIfIndex\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteType\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteNextHopAS\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteMetric1\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteMetric2\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteMetric3\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteMetric4\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteMetric5\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n                \"inetCidrRouteStatus\" : {\n                    \"module\" : \"IP-FORWARD-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python IP-MIB\n\nFILENAME = \"/home/klette/mibs/v2/IP-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"IP-MIB\",\n\n    \"IP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF IPv6 MIB Revision Team\"\"\",\n        \"contact\" : \n            \"\"\"Editor:\n\n\nShawn A. Routhier\nInterworking Labs\n108 Whispering Pines Dr. Suite 235\nScotts Valley, CA 95066\nUSA\nEMail: <sar@iwl.com>\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for managing IP and ICMP implementations, but\nexcluding their management of IP routes.\n\nCopyright (C) The Internet Society (2006).  This version of\nthis MIB module is part of RFC 4293; see the RFC itself for\nfull legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2006-02-02 00:00\",\n                \"description\" :\n                    \"\"\"The IP version neutral revision with added IPv6 objects for\nND, default routers, and router advertisements.  As well as\nbeing the successor to RFC 2011, this MIB is also the\nsuccessor to RFCs 2465 and 2466.  Published as RFC 4293.\"\"\",\n            },\n            {\n                \"date\" : \"1994-11-01 00:00\",\n                \"description\" :\n                    \"\"\"A separate MIB module (IP-MIB) for IP and ICMP management\nobjects.  Published as RFC 2011.\"\"\",\n            },\n            {\n                \"date\" : \"1991-03-31 00:00\",\n                \"description\" :\n                    \"\"\"The initial revision of this MIB module was part of MIB-II,\nwhich was published as RFC 1213.\"\"\",\n            },\n        ),\n        \"identity node\" : \"ipMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"zeroDotZero\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"StorageType\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetVersion\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n    ),\n\n    \"typedefs\" : {\n        \"IpAddressOriginTC\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"manual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"dhcp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"linklayer\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"random\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"The origin of the address.\n\nmanual(2) indicates that the address was manually configured\nto a specified address, e.g., by user configuration.\n\ndhcp(4) indicates an address that was assigned to this\nsystem by a DHCP server.\n\nlinklayer(5) indicates an address created by IPv6 stateless\n\n\nauto-configuration.\n\nrandom(6) indicates an address chosen by the system at\nrandom, e.g., an IPv4 address within 169.254/16, or an RFC\n3041 privacy address.\"\"\",\n        },\n        \"IpAddressStatusTC\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"preferred\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"deprecated\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"invalid\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"inaccessible\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"tentative\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"duplicate\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"optimistic\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"The status of an address.  Most of the states correspond to\nstates from the IPv6 Stateless Address Autoconfiguration\nprotocol.\n\nThe preferred(1) state indicates that this is a valid\naddress that can appear as the destination or source address\nof a packet.\n\nThe deprecated(2) state indicates that this is a valid but\ndeprecated address that should no longer be used as a source\naddress in new communications, but packets addressed to such\nan address are processed as expected.\n\nThe invalid(3) state indicates that this isn't a valid\naddress and it shouldn't appear as the destination or source\naddress of a packet.\n\nThe inaccessible(4) state indicates that the address is not\naccessible because the interface to which this address is\nassigned is not operational.\n\nThe unknown(5) state indicates that the status cannot be\ndetermined for some reason.\n\nThe tentative(6) state indicates that the uniqueness of the\naddress on the link is being verified.  Addresses in this\nstate should not be used for general communication and\nshould only be used to determine the uniqueness of the\naddress.\n\nThe duplicate(7) state indicates the address has been\ndetermined to be non-unique on the link and so must not be\n\n\nused.\n\nThe optimistic(8) state indicates the address is available\nfor use, subject to restrictions, while its uniqueness on\na link is being verified.\n\nIn the absence of other information, an IPv4 address is\nalways preferred(1).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2462\"\"\",\n        },\n        \"IpAddressPrefixOriginTC\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"manual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"wellknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"dhcp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"routeradv\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"description\" :\n                \"\"\"The origin of this prefix.\n\nmanual(2) indicates a prefix that was manually configured.\n\nwellknown(3) indicates a well-known prefix, e.g., 169.254/16\nfor IPv4 auto-configuration or fe80::/10 for IPv6 link-local\naddresses.  Well known prefixes may be assigned by IANA,\nthe address registries, or by specification in a standards\ntrack RFC.\n\ndhcp(4) indicates a prefix that was assigned by a DHCP\nserver.\n\nrouteradv(5) indicates a prefix learned from a router\nadvertisement.\n\nNote: while IpAddressOriginTC and IpAddressPrefixOriginTC\nare similar, they are not identical.  The first defines how\nan address was created, while the second defines how a\nprefix was found.\"\"\",\n        },\n        \"Ipv6AddressIfIdentifierTC\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"8\"\n            },\n            \"format\" : \"2x:\",\n            \"description\" :\n                \"\"\"This data type is used to model IPv6 address\ninterface identifiers.  This is a binary string\nof up to 8 octets in network byte-order.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"ip\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4\",\n        }, # node\n        \"ipForwarding\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether this entity is acting as an IPv4\nrouter in respect to the forwarding of datagrams received\nby, but not addressed to, this entity.  IPv4 routers forward\ndatagrams.  IPv4 hosts do not (except those source-routed\nvia the host).\n\nWhen this object is written, the entity should save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\nNote: a stronger requirement is not used because this object\nwas previously defined.\"\"\",\n        }, # scalar\n        \"ipDefaultTTL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default value inserted into the Time-To-Live field of\nthe IPv4 header of datagrams originated at this entity,\nwhenever a TTL value is not supplied by the transport layer\n\n\nprotocol.\n\nWhen this object is written, the entity should save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\nNote: a stronger requirement is not used because this object\nwas previously defined.\"\"\",\n        }, # scalar\n        \"ipInReceives\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input datagrams received from\ninterfaces, including those received in error.\n\nThis object has been deprecated, as a new IP version-neutral\n\n\ntable has been added.  It is loosely replaced by\nipSystemStatsInRecieves.\"\"\",\n        }, # scalar\n        \"ipInHdrErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded due to errors in\ntheir IPv4 headers, including bad checksums, version number\nmismatch, other format errors, time-to-live exceeded, errors\ndiscovered in processing their IPv4 options, etc.\n\nThis object has been deprecated as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsInHdrErrors.\"\"\",\n        }, # scalar\n        \"ipInAddrErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded because the IPv4\naddress in their IPv4 header's destination field was not a\nvalid address to be received at this entity.  This count\nincludes invalid addresses (e.g., 0.0.0.0) and addresses of\nunsupported Classes (e.g., Class E).  For entities which are\nnot IPv4 routers, and therefore do not forward datagrams,\nthis counter includes datagrams discarded because the\ndestination address was not a local address.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsInAddrErrors.\"\"\",\n        }, # scalar\n        \"ipForwDatagrams\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams for which this entity was not\ntheir final IPv4 destination, as a result of which an\nattempt was made to find a route to forward them to that\nfinal destination.  In entities which do not act as IPv4\nrouters, this counter will include only those packets which\n\n\nwere Source-Routed via this entity, and the Source-Route\noption processing was successful.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsInForwDatagrams.\"\"\",\n        }, # scalar\n        \"ipInUnknownProtos\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of locally-addressed datagrams received\nsuccessfully but discarded because of an unknown or\nunsupported protocol.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsInUnknownProtos.\"\"\",\n        }, # scalar\n        \"ipInDiscards\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IPv4 datagrams for which no problems\nwere encountered to prevent their continued processing, but\nwhich were discarded (e.g., for lack of buffer space).  Note\nthat this counter does not include any datagrams discarded\nwhile awaiting re-assembly.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsInDiscards.\"\"\",\n        }, # scalar\n        \"ipInDelivers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input datagrams successfully delivered\nto IPv4 user-protocols (including ICMP).\n\nThis object has been deprecated as a new IP version neutral\ntable has been added.  It is loosely replaced by\n\n\nipSystemStatsIndelivers.\"\"\",\n        }, # scalar\n        \"ipOutRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IPv4 datagrams which local IPv4 user\nprotocols (including ICMP) supplied to IPv4 in requests for\ntransmission.  Note that this counter does not include any\ndatagrams counted in ipForwDatagrams.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsOutRequests.\"\"\",\n        }, # scalar\n        \"ipOutDiscards\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output IPv4 datagrams for which no problem was\nencountered to prevent their transmission to their\ndestination, but which were discarded (e.g., for lack of\nbuffer space).  Note that this counter would include\ndatagrams counted in ipForwDatagrams if any such packets met\nthis (discretionary) discard criterion.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsOutDiscards.\"\"\",\n        }, # scalar\n        \"ipOutNoRoutes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 datagrams discarded because no route\ncould be found to transmit them to their destination.  Note\nthat this counter includes any packets counted in\nipForwDatagrams which meet this `no-route' criterion.  Note\nthat this includes any datagrams which a host cannot route\nbecause all of its default routers are down.\n\nThis object has been deprecated, as a new IP version-neutral\n\n\ntable has been added.  It is loosely replaced by\nipSystemStatsOutNoRoutes.\"\"\",\n        }, # scalar\n        \"ipReasmTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The maximum number of seconds that received fragments are\nheld while they are awaiting reassembly at this entity.\"\"\",\n        }, # scalar\n        \"ipReasmReqds\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.14\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 fragments received which needed to be\nreassembled at this entity.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsReasmReqds.\"\"\",\n        }, # scalar\n        \"ipReasmOKs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.15\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 datagrams successfully re-assembled.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsReasmOKs.\"\"\",\n        }, # scalar\n        \"ipReasmFails\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.16\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failures detected by the IPv4 re-assembly\nalgorithm (for whatever reason: timed out, errors, etc).\nNote that this is not necessarily a count of discarded IPv4\nfragments since some algorithms (notably the algorithm in\nRFC 815) can lose track of the number of fragments by\ncombining them as they are received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsReasmFails.\"\"\",\n        }, # scalar\n        \"ipFragOKs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.17\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 datagrams that have been successfully\nfragmented at this entity.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsOutFragOKs.\"\"\",\n        }, # scalar\n        \"ipFragFails\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 datagrams that have been discarded\nbecause they needed to be fragmented at this entity but\ncould not be, e.g., because their Don't Fragment flag was\nset.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsOutFragFails.\"\"\",\n        }, # scalar\n        \"ipFragCreates\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.19\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv4 datagram fragments that have been\ngenerated as a result of fragmentation at this entity.\n\nThis object has been deprecated as a new IP version neutral\ntable has been added.  It is loosely replaced by\nipSystemStatsOutFragCreates.\"\"\",\n        }, # scalar\n        \"ipAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The table of addressing information relevant to this\nentity's IPv4 addresses.\n\nThis table has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by the\nipAddressTable although several objects that weren't deemed\nuseful weren't carried forward while another\n(ipAdEntReasmMaxSize) was moved to the ipv4InterfaceTable.\"\"\",\n        }, # table\n        \"ipAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"ipAdEntAddr\",\n            ],\n            \"description\" :\n                \"\"\"The addressing information for one of this entity's IPv4\naddresses.\"\"\",\n        }, # row\n        \"ipAdEntAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IPv4 address to which this entry's addressing\ninformation pertains.\"\"\",\n        }, # column\n        \"ipAdEntIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index value which uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipAdEntNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The subnet mask associated with the IPv4 address of this\nentry.  The value of the mask is an IPv4 address with all\nthe network bits set to 1 and all the hosts bits set to 0.\"\"\",\n        }, # column\n        \"ipAdEntBcastAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the least-significant bit in the IPv4 broadcast\naddress used for sending datagrams on the (logical)\ninterface associated with the IPv4 address of this entry.\nFor example, when the Internet standard all-ones broadcast\naddress is used, the value will be 1.  This value applies to\nboth the subnet and network broadcast addresses used by the\nentity on this (logical) interface.\"\"\",\n        }, # column\n        \"ipAdEntReasmMaxSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.20.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the largest IPv4 datagram which this entity can\nre-assemble from incoming IPv4 fragmented datagrams received\non this interface.\"\"\",\n        }, # column\n        \"ipNetToMediaTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The IPv4 Address Translation table used for mapping from\nIPv4 addresses to physical addresses.\n\nThis table has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by the\nipNetToPhysicalTable.\"\"\",\n        }, # table\n        \"ipNetToMediaEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22.1\",\n            \"create\" : \"true\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"ipNetToMediaIfIndex\",\n                \"ipNetToMediaNetAddress\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains one IpAddress to `physical' address\nequivalence.\"\"\",\n        }, # row\n        \"ipNetToMediaIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interface on which this entry's equivalence is\neffective.  The interface identified by a particular value\nof this index is the same interface as identified by the\n\n\nsame value of the IF-MIB's ifIndex.\n\nThis object predates the rule limiting index objects to a\nmax access value of 'not-accessible' and so continues to use\na value of 'read-create'.\"\"\",\n        }, # column\n        \"ipNetToMediaPhysAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"PhysAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The media-dependent `physical' address.  This object should\nreturn 0 when this entry is in the 'incomplete' state.\n\nAs the entries in this table are typically not persistent\nwhen this object is written the entity should not save the\nchange to non-volatile storage.  Note: a stronger\nrequirement is not used because this object was previously\ndefined.\"\"\",\n        }, # column\n        \"ipNetToMediaNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IpAddress corresponding to the media-dependent\n`physical' address.\n\nThis object predates the rule limiting index objects to a\nmax access value of 'not-accessible' and so continues to use\na value of 'read-create'.\"\"\",\n        }, # column\n        \"ipNetToMediaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.22.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of mapping.\n\nSetting this object to the value invalid(2) has the effect\n\n\nof invalidating the corresponding entry in the\nipNetToMediaTable.  That is, it effectively dis-associates\nthe interface identified with said entry from the mapping\nidentified with said entry.  It is an implementation-\nspecific matter as to whether the agent removes an\ninvalidated entry from the table.  Accordingly, management\nstations must be prepared to receive tabular information\nfrom agents that corresponds to entries not currently in\nuse.  Proper interpretation of such entries requires\nexamination of the relevant ipNetToMediaType object.\n\nAs the entries in this table are typically not persistent\nwhen this object is written the entity should not save the\nchange to non-volatile storage.  Note: a stronger\nrequirement is not used because this object was previously\ndefined.\"\"\",\n        }, # column\n        \"ipRoutingDiscards\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.23\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of routing entries which were chosen to be\ndiscarded even though they are valid.  One possible reason\nfor discarding such an entry could be to free-up buffer\nspace for other routing entries.\n\n\nThis object was defined in pre-IPv6 versions of the IP MIB.\nIt was implicitly IPv4 only, but the original specifications\ndid not indicate this protocol restriction.  In order to\nclarify the specifications, this object has been deprecated\nand a similar, but more thoroughly clarified, object has\nbeen added to the IP-FORWARD-MIB.\"\"\",\n        }, # scalar\n        \"ipv6IpForwarding\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether this entity is acting as an IPv6\nrouter on any interface in respect to the forwarding of\ndatagrams received by, but not addressed to, this entity.\nIPv6 routers forward datagrams.  IPv6 hosts do not (except\nthose source-routed via the host).\n\nWhen this object is written, the entity SHOULD save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\"\"\",\n        }, # scalar\n        \"ipv6IpDefaultHopLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default value inserted into the Hop Limit field of the\nIPv6 header of datagrams originated at this entity whenever\na Hop Limit value is not supplied by the transport layer\nprotocol.\n\nWhen this object is written, the entity SHOULD save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.3.2\"\"\",\n        }, # scalar\n        \"ipv4InterfaceTableLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\na row in the ipv4InterfaceTable was added or deleted, or\nwhen an ipv4InterfaceReasmMaxSize or an\nipv4InterfaceEnableStatus object was modified.\n\nIf new objects are added to the ipv4InterfaceTable that\nrequire the ipv4InterfaceTableLastChange to be updated when\nthey are modified, they must specify that requirement in\ntheir description clause.\"\"\",\n        }, # scalar\n        \"ipv4InterfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing per-interface IPv4-specific\ninformation.\"\"\",\n        }, # table\n        \"ipv4InterfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv4InterfaceIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing IPv4-specific information for a specific\ninterface.\"\"\",\n        }, # row\n        \"ipv4InterfaceIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipv4InterfaceReasmMaxSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the largest IPv4 datagram that this entity can\nre-assemble from incoming IPv4 fragmented datagrams received\non this interface.\"\"\",\n        }, # column\n        \"ipv4InterfaceEnableStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether IPv4 is enabled (up) or disabled\n(down) on this interface.  This object does not affect the\nstate of the interface itself, only its connection to an\nIPv4 stack.  The IF-MIB should be used to control the state\nof the interface.\"\"\",\n        }, # column\n        \"ipv4InterfaceRetransmitTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"1000\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The time between retransmissions of ARP requests to a\nneighbor when resolving the address or when probing the\nreachability of a neighbor.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 1122\"\"\",\n        }, # column\n        \"ipv6InterfaceTableLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\na row in the ipv6InterfaceTable was added or deleted or when\nan ipv6InterfaceReasmMaxSize, ipv6InterfaceIdentifier,\nipv6InterfaceEnableStatus, ipv6InterfaceReachableTime,\nipv6InterfaceRetransmitTime, or ipv6InterfaceForwarding\nobject was modified.\n\nIf new objects are added to the ipv6InterfaceTable that\nrequire the ipv6InterfaceTableLastChange to be updated when\nthey are modified, they must specify that requirement in\ntheir description clause.\"\"\",\n        }, # scalar\n        \"ipv6InterfaceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing per-interface IPv6-specific\ninformation.\"\"\",\n        }, # table\n        \"ipv6InterfaceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6InterfaceIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing IPv6-specific information for a given\ninterface.\"\"\",\n        }, # row\n        \"ipv6InterfaceIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipv6InterfaceReasmMaxSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1500\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1500\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"octets\",\n            \"description\" :\n                \"\"\"The size of the largest IPv6 datagram that this entity can\nre-assemble from incoming IPv6 fragmented datagrams received\non this interface.\"\"\",\n        }, # column\n        \"ipv6InterfaceIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IP-MIB\", \"name\" : \"Ipv6AddressIfIdentifierTC\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Interface Identifier for this interface.  The Interface\nIdentifier is combined with an address prefix to form an\ninterface address.\n\nBy default, the Interface Identifier is auto-configured\naccording to the rules of the link type to which this\ninterface is attached.\n\n\nA zero length identifier may be used where appropriate.  One\npossible example is a loopback interface.\"\"\",\n        }, # column\n        \"ipv6InterfaceEnableStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether IPv6 is enabled (up) or disabled\n(down) on this interface.  This object does not affect the\nstate of the interface itself, only its connection to an\nIPv6 stack.  The IF-MIB should be used to control the state\nof the interface.\n\nWhen this object is written, the entity SHOULD save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\"\"\",\n        }, # column\n        \"ipv6InterfaceReachableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The time a neighbor is considered reachable after receiving\na reachability confirmation.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461, Section 6.3.2\"\"\",\n        }, # column\n        \"ipv6InterfaceRetransmitTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The time between retransmissions of Neighbor Solicitation\nmessages to a neighbor when resolving the address or when\nprobing the reachability of a neighbor.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461, Section 6.3.2\"\"\",\n        }, # column\n        \"ipv6InterfaceForwarding\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.30.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether this entity is acting as an IPv6\nrouter on this interface with respect to the forwarding of\ndatagrams received by, but not addressed to, this entity.\nIPv6 routers forward datagrams.  IPv6 hosts do not (except\nthose source-routed via the host).\n\nThis object is constrained by ipv6IpForwarding and is\nignored if ipv6IpForwarding is set to notForwarding.  Those\nsystems that do not provide per-interface control of the\nforwarding function should set this object to forwarding for\nall interfaces and allow the ipv6IpForwarding object to\ncontrol the forwarding capability.\n\nWhen this object is written, the entity SHOULD save the\nchange to non-volatile storage and restore the object from\nnon-volatile storage upon re-initialization of the system.\"\"\",\n        }, # column\n        \"ipTrafficStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31\",\n        }, # node\n        \"ipSystemStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing system wide, IP version specific\ntraffic statistics.  This table and the ipIfStatsTable\ncontain similar objects whose difference is in their\ngranularity.  Where this table contains system wide traffic\nstatistics, the ipIfStatsTable contains the same statistics\nbut counted on a per-interface basis.\"\"\",\n        }, # table\n        \"ipSystemStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipSystemStatsIPVersion\",\n            ],\n            \"description\" :\n                \"\"\"A statistics entry containing system-wide objects for a\nparticular IP version.\"\"\",\n        }, # row\n        \"ipSystemStatsIPVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetVersion\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP version of this row.\"\"\",\n        }, # column\n        \"ipSystemStatsInReceives\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input IP datagrams received, including\nthose received in error.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInReceives\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input IP datagrams received, including\nthose received in error.  This object counts the same\ndatagrams as ipSystemStatsInReceives, but allows for larger\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in input IP datagrams,\nincluding those received in error.  Octets from datagrams\ncounted in ipSystemStatsInReceives MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in input IP datagrams,\nincluding those received in error.  This object counts the\nsame octets as ipSystemStatsInOctets, but allows for larger\n\n\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInHdrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded due to errors in\ntheir IP headers, including version number mismatch, other\nformat errors, hop count exceeded, errors discovered in\nprocessing their IP options, etc.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInNoRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because no route\ncould be found to transmit them to their destination.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInAddrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because the IP\naddress in their IP header's destination field was not a\nvalid address to be received at this entity.  This count\nincludes invalid addresses (e.g., ::0).  For entities\nthat are not IP routers and therefore do not forward\n\n\ndatagrams, this counter includes datagrams discarded\nbecause the destination address was not a local address.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInUnknownProtos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of locally-addressed IP datagrams received\nsuccessfully but discarded because of an unknown or\nunsupported protocol.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInTruncatedPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because the\ndatagram frame didn't carry enough data.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams for which this entity was not\ntheir final IP destination and for which this entity\nattempted to find a route to forward them to that final\ndestination.  In entities that do not act as IP routers,\nthis counter will include only those datagrams that were\nSource-Routed via this entity, and the Source-Route\nprocessing was successful.\n\nWhen tracking interface statistics, the counter of the\nincoming interface is incremented for each datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams for which this entity was not\ntheir final IP destination and for which this entity\nattempted to find a route to forward them to that final\ndestination.  This object counts the same packets as\nipSystemStatsInForwDatagrams, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsReasmReqds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP fragments received that needed to be\nreassembled at this interface.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these fragments were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the fragments.\n\nDiscontinuities in the value of this counter can occur at\n\n\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsReasmOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams successfully reassembled.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsReasmFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failures detected by the IP re-assembly\nalgorithm (for whatever reason: timed out, errors, etc.).\nNote that this is not necessarily a count of discarded IP\nfragments since some algorithms (notably the algorithm in\nRFC 815) can lose track of the number of fragments by\ncombining them as they are received.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these fragments were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the fragments.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams for which no problems were\nencountered to prevent their continued processing, but\nwere discarded (e.g., for lack of buffer space).  Note that\nthis counter does not include any datagrams discarded while\nawaiting re-assembly.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInDelivers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of datagrams successfully delivered to IP\nuser-protocols (including ICMP).\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInDelivers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of datagrams successfully delivered to IP\nuser-protocols (including ICMP).  This object counts the\nsame packets as ipSystemStatsInDelivers, but allows for\nlarger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that local IP user-\nprotocols (including ICMP) supplied to IP in requests for\ntransmission.  Note that this counter does not include any\ndatagrams counted in ipSystemStatsOutForwDatagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that local IP user-\nprotocols (including ICMP) supplied to IP in requests for\ntransmission.  This object counts the same packets as\nipSystemStatsOutRequests, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutNoRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of locally generated IP datagrams discarded\nbecause no route could be found to transmit them to their\ndestination.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of datagrams for which this entity was not their\nfinal IP destination and for which it was successful in\nfinding a path to their final destination.  In entities\nthat do not act as IP routers, this counter will include\nonly those datagrams that were Source-Routed via this\nentity, and the Source-Route processing was successful.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nforwarded datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of datagrams for which this entity was not their\nfinal IP destination and for which it was successful in\nfinding a path to their final destination.  This object\ncounts the same packets as ipSystemStatsOutForwDatagrams,\nbut allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output IP datagrams for which no problem was\nencountered to prevent their transmission to their\ndestination, but were discarded (e.g., for lack of\nbuffer space).  Note that this counter would include\n\n\ndatagrams counted in ipSystemStatsOutForwDatagrams if any\nsuch datagrams met this (discretionary) discard criterion.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutFragReqds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that would require fragmentation\nin order to be transmitted.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutFragOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that have been successfully\nfragmented.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutFragFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that have been discarded because\nthey needed to be fragmented but could not be.  This\nincludes IPv4 packets that have the DF bit set and IPv6\npackets that are being forwarded and exceed the outgoing\nlink MTU.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for an unsuccessfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutFragCreates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output datagram fragments that have been\ngenerated as a result of IP fragmentation.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutTransmits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that this entity supplied\nto the lower layers for transmission.  This includes\ndatagrams generated locally and those forwarded by this\nentity.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\n\n\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutTransmits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that this entity supplied\nto the lower layers for transmission.  This object counts\nthe same datagrams as ipSystemStatsOutTransmits, but allows\nfor larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets in IP datagrams delivered to the\nlower layers for transmission.  Octets from datagrams\ncounted in ipSystemStatsOutTransmits MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets in IP datagrams delivered to the\nlower layers for transmission.  This objects counts the same\noctets as ipSystemStatsOutOctets, but allows for larger\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\n\n\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams received.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams received.  This object\ncounts the same datagrams as ipSystemStatsInMcastPkts but\nallows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in IP multicast\ndatagrams.  Octets from datagrams counted in\nipSystemStatsInMcastPkts MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in IP multicast\ndatagrams.  This object counts the same octets as\nipSystemStatsInMcastOctets, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams transmitted.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams transmitted.  This\nobject counts the same datagrams as\nipSystemStatsOutMcastPkts, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted in IP multicast\ndatagrams.  Octets from datagrams counted in\n\n\nipSystemStatsOutMcastPkts MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted in IP multicast\ndatagrams.  This object counts the same octets as\nipSystemStatsOutMcastOctets, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsInBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams received.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCInBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams received.  This object\ncounts the same datagrams as ipSystemStatsInBcastPkts but\nallows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\n\n\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsOutBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams transmitted.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsHCOutBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams transmitted.  This\nobject counts the same datagrams as\nipSystemStatsOutBcastPkts, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipSystemStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipSystemStatsDiscontinuityTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\nany one or more of this entry's counters suffered a\ndiscontinuity.\n\nIf no such discontinuities have occurred since the last re-\ninitialization of the local management subsystem, then this\nobject contains a zero value.\"\"\",\n        }, # column\n        \"ipSystemStatsRefreshRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milli-seconds\",\n            \"description\" :\n                \"\"\"The minimum reasonable polling interval for this entry.\nThis object provides an indication of the minimum amount of\ntime required to update the counters in this entry.\"\"\",\n        }, # column\n        \"ipIfStatsTableLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\na row in the ipIfStatsTable was added or deleted.\n\nIf new objects are added to the ipIfStatsTable that require\nthe ipIfStatsTableLastChange to be updated when they are\nmodified, they must specify that requirement in their\ndescription clause.\"\"\",\n        }, # scalar\n        \"ipIfStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing per-interface traffic statistics.  This\ntable and the ipSystemStatsTable contain similar objects\nwhose difference is in their granularity.  Where this table\ncontains per-interface statistics, the ipSystemStatsTable\ncontains the same statistics, but counted on a system wide\nbasis.\"\"\",\n        }, # table\n        \"ipIfStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipIfStatsIPVersion\",\n                \"ipIfStatsIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An interface statistics entry containing objects for a\nparticular interface and version of IP.\"\"\",\n        }, # row\n        \"ipIfStatsIPVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetVersion\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP version of this row.\"\"\",\n        }, # column\n        \"ipIfStatsIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipIfStatsInReceives\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input IP datagrams received, including\nthose received in error.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInReceives\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input IP datagrams received, including\nthose received in error.  This object counts the same\ndatagrams as ipIfStatsInReceives, but allows for larger\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in input IP datagrams,\nincluding those received in error.  Octets from datagrams\ncounted in ipIfStatsInReceives MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in input IP datagrams,\nincluding those received in error.  This object counts the\nsame octets as ipIfStatsInOctets, but allows for larger\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInHdrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded due to errors in\ntheir IP headers, including version number mismatch, other\nformat errors, hop count exceeded, errors discovered in\nprocessing their IP options, etc.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInNoRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because no route\ncould be found to transmit them to their destination.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInAddrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because the IP\naddress in their IP header's destination field was not a\nvalid address to be received at this entity.  This count\nincludes invalid addresses (e.g., ::0).  For entities that\nare not IP routers and therefore do not forward datagrams,\nthis counter includes datagrams discarded because the\ndestination address was not a local address.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInUnknownProtos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of locally-addressed IP datagrams received\nsuccessfully but discarded because of an unknown or\nunsupported protocol.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\n\n\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInTruncatedPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams discarded because the\ndatagram frame didn't carry enough data.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams for which this entity was not\ntheir final IP destination and for which this entity\nattempted to find a route to forward them to that final\ndestination.  In entities that do not act as IP routers,\nthis counter will include only those datagrams that were\nSource-Routed via this entity, and the Source-Route\nprocessing was successful.\n\nWhen tracking interface statistics, the counter of the\nincoming interface is incremented for each datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams for which this entity was not\ntheir final IP destination and for which this entity\nattempted to find a route to forward them to that final\ndestination.  This object counts the same packets as\n\n\nipIfStatsInForwDatagrams, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsReasmReqds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP fragments received that needed to be\nreassembled at this interface.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these fragments were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the fragments.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsReasmOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams successfully reassembled.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsReasmFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failures detected by the IP re-assembly\nalgorithm (for whatever reason: timed out, errors, etc.).\nNote that this is not necessarily a count of discarded IP\nfragments since some algorithms (notably the algorithm in\nRFC 815) can lose track of the number of fragments by\ncombining them as they are received.\n\nWhen tracking interface statistics, the counter of the\ninterface to which these fragments were addressed is\nincremented.  This interface might not be the same as the\ninput interface for some of the fragments.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IP datagrams for which no problems were\nencountered to prevent their continued processing, but\nwere discarded (e.g., for lack of buffer space).  Note that\nthis counter does not include any datagrams discarded while\nawaiting re-assembly.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInDelivers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of datagrams successfully delivered to IP\nuser-protocols (including ICMP).\n\nWhen tracking interface statistics, the counter of the\ninterface to which these datagrams were addressed is\nincremented.  This interface might not be the same as the\n\n\ninput interface for some of the datagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInDelivers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of datagrams successfully delivered to IP\nuser-protocols (including ICMP).  This object counts the\nsame packets as ipIfStatsInDelivers, but allows for larger\nvalues.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that local IP user-\nprotocols (including ICMP) supplied to IP in requests for\ntransmission.  Note that this counter does not include any\ndatagrams counted in ipIfStatsOutForwDatagrams.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that local IP user-\nprotocols (including ICMP) supplied to IP in requests for\ntransmission.  This object counts the same packets as\n\n\nipIfStatsOutRequests, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of datagrams for which this entity was not their\nfinal IP destination and for which it was successful in\nfinding a path to their final destination.  In entities\nthat do not act as IP routers, this counter will include\nonly those datagrams that were Source-Routed via this\nentity, and the Source-Route processing was successful.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nforwarded datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of datagrams for which this entity was not their\nfinal IP destination and for which it was successful in\nfinding a path to their final destination.  This object\ncounts the same packets as ipIfStatsOutForwDatagrams, but\nallows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\n\n\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output IP datagrams for which no problem was\nencountered to prevent their transmission to their\ndestination, but were discarded (e.g., for lack of\nbuffer space).  Note that this counter would include\ndatagrams counted in ipIfStatsOutForwDatagrams if any such\ndatagrams met this (discretionary) discard criterion.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutFragReqds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that would require fragmentation\nin order to be transmitted.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutFragOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that have been successfully\nfragmented.\n\nWhen tracking interface statistics, the counter of the\n\n\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutFragFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP datagrams that have been discarded because\nthey needed to be fragmented but could not be.  This\nincludes IPv4 packets that have the DF bit set and IPv6\npackets that are being forwarded and exceed the outgoing\nlink MTU.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for an unsuccessfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutFragCreates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output datagram fragments that have been\ngenerated as a result of IP fragmentation.\n\nWhen tracking interface statistics, the counter of the\noutgoing interface is incremented for a successfully\nfragmented datagram.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutTransmits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that this entity supplied\nto the lower layers for transmission.  This includes\ndatagrams generated locally and those forwarded by this\nentity.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutTransmits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IP datagrams that this entity supplied\nto the lower layers for transmission.  This object counts\nthe same datagrams as ipIfStatsOutTransmits, but allows for\nlarger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets in IP datagrams delivered to the\nlower layers for transmission.  Octets from datagrams\ncounted in ipIfStatsOutTransmits MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets in IP datagrams delivered to the\nlower layers for transmission.  This objects counts the same\noctets as ipIfStatsOutOctets, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams received.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams received.  This object\ncounts the same datagrams as ipIfStatsInMcastPkts, but\nallows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in IP multicast\n\n\ndatagrams.  Octets from datagrams counted in\nipIfStatsInMcastPkts MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets received in IP multicast\ndatagrams.  This object counts the same octets as\nipIfStatsInMcastOctets, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams transmitted.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP multicast datagrams transmitted.  This\nobject counts the same datagrams as ipIfStatsOutMcastPkts,\nbut allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\n\n\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted in IP multicast\ndatagrams.  Octets from datagrams counted in\nipIfStatsOutMcastPkts MUST be counted here.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutMcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of octets transmitted in IP multicast\ndatagrams.  This object counts the same octets as\nipIfStatsOutMcastOctets, but allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsInBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams received.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCInBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams received.  This object\ncounts the same datagrams as ipIfStatsInBcastPkts, but\nallows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsOutBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams transmitted.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsHCOutBcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP broadcast datagrams transmitted.  This\nobject counts the same datagrams as ipIfStatsOutBcastPkts,\nbut allows for larger values.\n\nDiscontinuities in the value of this counter can occur at\nre-initialization of the management system, and at other\ntimes as indicated by the value of\nipIfStatsDiscontinuityTime.\"\"\",\n        }, # column\n        \"ipIfStatsDiscontinuityTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime on the most recent occasion at which\n\n\nany one or more of this entry's counters suffered a\ndiscontinuity.\n\nIf no such discontinuities have occurred since the last re-\ninitialization of the local management subsystem, then this\nobject contains a zero value.\"\"\",\n        }, # column\n        \"ipIfStatsRefreshRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.31.3.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"milli-seconds\",\n            \"description\" :\n                \"\"\"The minimum reasonable polling interval for this entry.\nThis object provides an indication of the minimum amount of\ntime required to update the counters in this entry.\"\"\",\n        }, # column\n        \"ipAddressPrefixTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table allows the user to determine the source of an IP\naddress or set of IP addresses, and allows other tables to\nshare the information via pointer rather than by copying.\n\nFor example, when the node configures both a unicast and\nanycast address for a prefix, the ipAddressPrefix objects\nfor those addresses will point to a single row in this\ntable.\n\nThis table primarily provides support for IPv6 prefixes, and\nseveral of the objects are less meaningful for IPv4.  The\ntable continues to allow IPv4 addresses to allow future\nflexibility.  In order to promote a common configuration,\nthis document includes suggestions for default values for\nIPv4 prefixes.  Each of these values may be overridden if an\nobject is meaningful to the node.\n\nAll prefixes used by this entity should be included in this\ntable independent of how the entity learned the prefix.\n(This table isn't limited to prefixes learned from router\n\n\nadvertisements.)\"\"\",\n        }, # table\n        \"ipAddressPrefixEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipAddressPrefixIfIndex\",\n                \"ipAddressPrefixType\",\n                \"ipAddressPrefixPrefix\",\n                \"ipAddressPrefixLength\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the ipAddressPrefixTable.\"\"\",\n        }, # row\n        \"ipAddressPrefixIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface on\nwhich this prefix is configured.  The interface identified\nby a particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipAddressPrefixType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of ipAddressPrefix.\"\"\",\n        }, # column\n        \"ipAddressPrefixPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address prefix.  The address type of this object is\nspecified in ipAddressPrefixType.  The length of this object\nis the standard length for objects of that type (4 or 16\nbytes).  Any bits after ipAddressPrefixLength must be zero.\n\nImplementors need to be aware that, if the size of\nipAddressPrefixPrefix exceeds 114 octets, then OIDS of\ninstances of columns in this row will have more than 128\nsub-identifiers and cannot be accessed using SNMPv1,\nSNMPv2c, or SNMPv3.\"\"\",\n        }, # column\n        \"ipAddressPrefixLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressPrefixLength\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The prefix length associated with this prefix.\n\nThe value 0 has no special meaning for this object.  It\nsimply refers to address '::/0'.\"\"\",\n        }, # column\n        \"ipAddressPrefixOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IP-MIB\", \"name\" : \"IpAddressPrefixOriginTC\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The origin of this prefix.\"\"\",\n        }, # column\n        \"ipAddressPrefixOnLinkFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value 'true(1)', if this prefix can be\nused for on-link determination; otherwise, the value is\n'false(2)'.\n\nThe default for IPv4 prefixes is 'true(1)'.\"\"\",\n            \"reference>\" :\n                \"\"\"For IPv6 RFC 2461, especially sections 2 and 4.6.2 and\nRFC 2462\"\"\",\n        }, # column\n        \"ipAddressPrefixAutonomousFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Autonomous address configuration flag.  When true(1),\nindicates that this prefix can be used for autonomous\naddress configuration (i.e., can be used to form a local\ninterface address).  If false(2), it is not used to auto-\nconfigure a local interface address.\n\nThe default for IPv4 prefixes is 'false(2)'.\"\"\",\n            \"reference>\" :\n                \"\"\"For IPv6 RFC 2461, especially sections 2 and 4.6.2 and\nRFC 2462\"\"\",\n        }, # column\n        \"ipAddressPrefixAdvPreferredLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The remaining length of time, in seconds, that this prefix\nwill continue to be preferred, i.e., time until deprecation.\n\nA value of 4,294,967,295 represents infinity.\n\nThe address generated from a deprecated prefix should no\nlonger be used as a source address in new communications,\nbut packets received on such an interface are processed as\nexpected.\n\nThe default for IPv4 prefixes is 4,294,967,295 (infinity).\"\"\",\n            \"reference>\" :\n                \"\"\"For IPv6 RFC 2461, especially sections 2 and 4.6.2 and\nRFC 2462\"\"\",\n        }, # column\n        \"ipAddressPrefixAdvValidLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.32.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The remaining length of time, in seconds, that this prefix\nwill continue to be valid, i.e., time until invalidation.  A\nvalue of 4,294,967,295 represents infinity.\n\nThe address generated from an invalidated prefix should not\nappear as the destination or source address of a packet.\n\n\nThe default for IPv4 prefixes is 4,294,967,295 (infinity).\"\"\",\n            \"reference>\" :\n                \"\"\"For IPv6 RFC 2461, especially sections 2 and 4.6.2 and\nRFC 2462\"\"\",\n        }, # column\n        \"ipAddressSpinLock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An advisory lock used to allow cooperating SNMP managers to\ncoordinate their use of the set operation in creating or\nmodifying rows within this table.\n\nIn order to use this lock to coordinate the use of set\noperations, managers should first retrieve\nipAddressTableSpinLock.  They should then determine the\nappropriate row to create or modify.  Finally, they should\nissue the appropriate set command, including the retrieved\nvalue of ipAddressSpinLock.  If another manager has altered\nthe table in the meantime, then the value of\nipAddressSpinLock will have changed, and the creation will\nfail as it will be specifying an incorrect value for\nipAddressSpinLock.  It is suggested, but not required, that\nthe ipAddressSpinLock be the first var bind for each set of\nobjects representing a 'row' in a PDU.\"\"\",\n        }, # scalar\n        \"ipAddressTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains addressing information relevant to the\nentity's interfaces.\n\nThis table does not contain multicast address information.\nTables for such information should be contained in multicast\nspecific MIBs, such as RFC 3019.\n\nWhile this table is writable, the user will note that\nseveral objects, such as ipAddressOrigin, are not.  The\nintention in allowing a user to write to this table is to\nallow them to add or remove any entry that isn't\n\n\npermanent.  The user should be allowed to modify objects\nand entries when that would not cause inconsistencies\nwithin the table.  Allowing write access to objects, such\nas ipAddressOrigin, could allow a user to insert an entry\nand then label it incorrectly.\n\nNote well: When including IPv6 link-local addresses in this\ntable, the entry must use an InetAddressType of 'ipv6z' in\norder to differentiate between the possible interfaces.\"\"\",\n        }, # table\n        \"ipAddressEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipAddressAddrType\",\n                \"ipAddressAddr\",\n            ],\n            \"description\" :\n                \"\"\"An address mapping for a particular interface.\"\"\",\n        }, # row\n        \"ipAddressAddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type of ipAddressAddr.\"\"\",\n        }, # column\n        \"ipAddressAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP address to which this entry's addressing information\n\n\npertains.  The address type of this object is specified in\nipAddressAddrType.\n\nImplementors need to be aware that if the size of\nipAddressAddr exceeds 116 octets, then OIDS of instances of\ncolumns in this row will have more than 128 sub-identifiers\nand cannot be accessed using SNMPv1, SNMPv2c, or SNMPv3.\"\"\",\n        }, # column\n        \"ipAddressIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unicast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"anycast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"broadcast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"unicast\",\n            \"description\" :\n                \"\"\"The type of address.  broadcast(3) is not a valid value for\nIPv6 addresses (RFC 3513).\"\"\",\n        }, # column\n        \"ipAddressPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"default\" : \"0.0\",\n            \"description\" :\n                \"\"\"A pointer to the row in the prefix table to which this\naddress belongs.  May be { 0 0 } if there is no such row.\"\"\",\n        }, # column\n        \"ipAddressOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IP-MIB\", \"name\" : \"IpAddressOriginTC\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The origin of the address.\"\"\",\n        }, # column\n        \"ipAddressStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IP-MIB\", \"name\" : \"IpAddressStatusTC\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"preferred\",\n            \"description\" :\n                \"\"\"The status of the address, describing if the address can be\nused for communication.\n\nIn the absence of other information, an IPv4 address is\nalways preferred(1).\"\"\",\n        }, # column\n        \"ipAddressCreated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this entry was created.\nIf this entry was created prior to the last re-\ninitialization of the local network management subsystem,\nthen this object contains a zero value.\"\"\",\n        }, # column\n        \"ipAddressLastChanged\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this entry was last\nupdated.  If this entry was updated prior to the last re-\ninitialization of the local network management subsystem,\nthen this object contains a zero value.\"\"\",\n        }, # column\n        \"ipAddressRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nThe RowStatus TC requires that this DESCRIPTION clause\nstates under which circumstances other objects in this row\n\n\ncan be modified.  The value of this object has no effect on\nwhether other objects in this conceptual row can be\nmodified.\n\nA conceptual row can not be made active until the\nipAddressIfIndex has been set to a valid index.\"\"\",\n        }, # column\n        \"ipAddressStorageType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.34.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"StorageType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"volatile\",\n            \"description\" :\n                \"\"\"The storage type for this conceptual row.  If this object\nhas a value of 'permanent', then no other objects are\nrequired to be able to be modified.\"\"\",\n        }, # column\n        \"ipNetToPhysicalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IP Address Translation table used for mapping from IP\naddresses to physical addresses.\n\nThe Address Translation tables contain the IP address to\n'physical' address equivalences.  Some interfaces do not use\ntranslation tables for determining address equivalences\n(e.g., DDN-X.25 has an algorithmic method); if all\ninterfaces are of this type, then the Address Translation\ntable is empty, i.e., has zero entries.\n\nWhile many protocols may be used to populate this table, ARP\nand Neighbor Discovery are the most likely\noptions.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 826 and RFC 2461\"\"\",\n        }, # table\n        \"ipNetToPhysicalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipNetToPhysicalIfIndex\",\n                \"ipNetToPhysicalNetAddressType\",\n                \"ipNetToPhysicalNetAddress\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains one IP address to `physical' address\nequivalence.\"\"\",\n        }, # row\n        \"ipNetToPhysicalIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich this entry is applicable.  The interface identified by\na particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipNetToPhysicalNetAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of ipNetToPhysicalNetAddress.\"\"\",\n        }, # column\n        \"ipNetToPhysicalNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP Address corresponding to the media-dependent\n`physical' address.  The address type of this object is\nspecified in ipNetToPhysicalAddressType.\n\nImplementors need to be aware that if the size of\n\n\nipNetToPhysicalNetAddress exceeds 115 octets, then OIDS of\ninstances of columns in this row will have more than 128\nsub-identifiers and cannot be accessed using SNMPv1,\nSNMPv2c, or SNMPv3.\"\"\",\n        }, # column\n        \"ipNetToPhysicalPhysAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"PhysAddress\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The media-dependent `physical' address.\n\nAs the entries in this table are typically not persistent\nwhen this object is written the entity SHOULD NOT save the\nchange to non-volatile storage.\"\"\",\n        }, # column\n        \"ipNetToPhysicalLastUpdated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this entry was last\nupdated.  If this entry was updated prior to the last re-\ninitialization of the local network management subsystem,\nthen this object contains a zero value.\"\"\",\n        }, # column\n        \"ipNetToPhysicalType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"static\",\n            \"description\" :\n                \"\"\"The type of mapping.\n\nSetting this object to the value invalid(2) has the effect\nof invalidating the corresponding entry in the\nipNetToPhysicalTable.  That is, it effectively dis-\nassociates the interface identified with said entry from the\nmapping identified with said entry.  It is an\nimplementation-specific matter as to whether the agent\n\n\nremoves an invalidated entry from the table.  Accordingly,\nmanagement stations must be prepared to receive tabular\ninformation from agents that corresponds to entries not\ncurrently in use.  Proper interpretation of such entries\nrequires examination of the relevant ipNetToPhysicalType\nobject.\n\nThe 'dynamic(3)' type indicates that the IP address to\nphysical addresses mapping has been dynamically resolved\nusing e.g., IPv4 ARP or the IPv6 Neighbor Discovery\nprotocol.\n\nThe 'static(4)' type indicates that the mapping has been\nstatically configured.  Both of these refer to entries that\nprovide mappings for other entities addresses.\n\nThe 'local(5)' type indicates that the mapping is provided\nfor an entity's own interface address.\n\nAs the entries in this table are typically not persistent\nwhen this object is written the entity SHOULD NOT save the\nchange to non-volatile storage.\"\"\",\n        }, # column\n        \"ipNetToPhysicalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reachable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stale\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"probe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"incomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Neighbor Unreachability Detection state for the\ninterface when the address mapping in this entry is used.\nIf Neighbor Unreachability Detection is not in use (e.g. for\nIPv4), this object is always unknown(6).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461\"\"\",\n        }, # column\n        \"ipNetToPhysicalRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.35.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nThe RowStatus TC requires that this DESCRIPTION clause\nstates under which circumstances other objects in this row\ncan be modified.  The value of this object has no effect on\nwhether other objects in this conceptual row can be\nmodified.\n\nA conceptual row can not be made active until the\nipNetToPhysicalPhysAddress object has been set.\n\nNote that if the ipNetToPhysicalType is set to 'invalid',\nthe managed node may delete the entry independent of the\nstate of this object.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table used to describe IPv6 unicast and multicast scope\nzones.\n\nFor those objects that have names rather than numbers, the\nnames were chosen to coincide with the names used in the\nIPv6 address architecture document. \"\"\",\n            \"reference>\" :\n                \"\"\"Section 2.7 of RFC 4291\"\"\",\n        }, # table\n        \"ipv6ScopeZoneIndexEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6ScopeZoneIndexIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains the list of scope identifiers on a given\ninterface.\"\"\",\n        }, # row\n        \"ipv6ScopeZoneIndexIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface to\nwhich these scopes belong.  The interface identified by a\nparticular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexLinkLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for the link-local scope on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndex3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope 3 on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexAdminLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for the admin-local scope on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexSiteLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for the site-local scope on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndex6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope 6 on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndex7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope 7 on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexOrganizationLocal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for the organization-local scope on this\ninterface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndex9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope 9 on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope A on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope B on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope C on this interface.\"\"\",\n        }, # column\n        \"ipv6ScopeZoneIndexD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.36.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetZoneIndex\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The zone index for scope D on this interface.\"\"\",\n        }, # column\n        \"ipDefaultRouterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table used to describe the default routers known to this\n\n\nentity.\"\"\",\n        }, # table\n        \"ipDefaultRouterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipDefaultRouterAddressType\",\n                \"ipDefaultRouterAddress\",\n                \"ipDefaultRouterIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains information about a default router known\nto this entity.\"\"\",\n        }, # row\n        \"ipDefaultRouterAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The address type for this row.\"\"\",\n        }, # column\n        \"ipDefaultRouterAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP address of the default router represented by this\nrow.  The address type of this object is specified in\nipDefaultRouterAddressType.\n\nImplementers need to be aware that if the size of\nipDefaultRouterAddress exceeds 115 octets, then OIDS of\ninstances of columns in this row will have more than 128\nsub-identifiers and cannot be accessed using SNMPv1,\nSNMPv2c, or SNMPv3.\"\"\",\n        }, # column\n        \"ipDefaultRouterIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface by\nwhich the router can be reached.  The interface identified\nby a particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipDefaultRouterLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The remaining length of time, in seconds, that this router\nwill continue to be useful as a default router.  A value of\nzero indicates that it is no longer useful as a default\nrouter.  It is left to the implementer of the MIB as to\nwhether a router with a lifetime of zero is removed from the\nlist.\n\nFor IPv6, this value should be extracted from the router\nadvertisement messages.\"\"\",\n            \"reference>\" :\n                \"\"\"For IPv6 RFC 2462 sections 4.2 and 6.3.4\"\"\",\n        }, # column\n        \"ipDefaultRouterPreference\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.37.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reserved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-2\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-1\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An indication of preference given to this router as a\ndefault router as described in he Default Router\nPreferences document.  Treating the value as a\n2 bit signed integer allows for simple arithmetic\ncomparisons.\n\nFor IPv4 routers or IPv6 routers that are not using the\nupdated router advertisement format, this object is set to\nmedium (0).\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 4291, section 2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertSpinLock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An advisory lock used to allow cooperating SNMP managers to\ncoordinate their use of the set operation in creating or\nmodifying rows within this table.\n\nIn order to use this lock to coordinate the use of set\noperations, managers should first retrieve\nipv6RouterAdvertSpinLock.  They should then determine the\nappropriate row to create or modify.  Finally, they should\nissue the appropriate set command including the retrieved\nvalue of ipv6RouterAdvertSpinLock.  If another manager has\naltered the table in the meantime, then the value of\nipv6RouterAdvertSpinLock will have changed and the creation\nwill fail as it will be specifying an incorrect value for\nipv6RouterAdvertSpinLock.  It is suggested, but not\nrequired, that the ipv6RouterAdvertSpinLock be the first var\nbind for each set of objects representing a 'row' in a PDU.\"\"\",\n        }, # scalar\n        \"ipv6RouterAdvertTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table containing information used to construct router\nadvertisements.\"\"\",\n        }, # table\n        \"ipv6RouterAdvertEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6RouterAdvertIfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information used to construct router\nadvertisements.\n\nInformation in this table is persistent, and when this\nobject is written, the entity SHOULD save the change to\nnon-volatile storage.\"\"\",\n        }, # row\n        \"ipv6RouterAdvertIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IF-MIB\", \"name\" : \"InterfaceIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value that uniquely identifies the interface on\nwhich router advertisements constructed with this\ninformation will be transmitted.  The interface identified\nby a particular value of this index is the same interface as\nidentified by the same value of the IF-MIB's ifIndex.\"\"\",\n        }, # column\n        \"ipv6RouterAdvertSendAdverts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"A flag indicating whether the router sends periodic\nrouter advertisements and responds to router solicitations\non this interface.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertMaxInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"1800\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"1800\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"600\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The maximum time allowed between sending unsolicited router\n\n\nadvertisements from this interface.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertMinInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"1350\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"1350\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The minimum time allowed between sending unsolicited router\nadvertisements from this interface.\n\nThe default is 0.33 * ipv6RouterAdvertMaxInterval, however,\nin the case of a low value for ipv6RouterAdvertMaxInterval,\nthe minimum value for this object is restricted to 3.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertManagedFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"The true/false value to be placed into the 'managed address\nconfiguration' flag field in router advertisements sent from\nthis interface.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertOtherConfigFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"The true/false value to be placed into the 'other stateful\nconfiguration' flag field in router advertisements sent from\nthis interface.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertLinkMTU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"description\" :\n                \"\"\"The value to be placed in MTU options sent by the router on\nthis interface.\n\nA value of zero indicates that no MTU options are sent.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertReachableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3600000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The value to be placed in the reachable time field in router\nadvertisement messages sent from this interface.\n\nA value of zero in the router advertisement indicates that\nthe advertisement isn't specifying a value for reachable\ntime.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertRetransmitTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0\",\n            \"units\" : \"milliseconds\",\n            \"description\" :\n                \"\"\"The value to be placed in the retransmit timer field in\nrouter advertisements sent from this interface.\n\nA value of zero in the router advertisement indicates that\nthe advertisement isn't specifying a value for retrans\ntime.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertCurHopLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default value to be placed in the current hop limit\nfield in router advertisements sent from this interface.\n\n\nThe value should be set to the current diameter of the\nInternet.\n\nA value of zero in the router advertisement indicates that\nthe advertisement isn't specifying a value for curHopLimit.\n\nThe default should be set to the value specified in the IANA\nweb pages (www.iana.org) at the time of implementation.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertDefaultLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"9000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The value to be placed in the router lifetime field of\nrouter advertisements sent from this interface.  This value\nMUST be either 0 or between ipv6RouterAdvertMaxInterval and\n9000 seconds.\n\nA value of zero indicates that the router is not to be used\nas a default router.\n\nThe default is 3 * ipv6RouterAdvertMaxInterval.\"\"\",\n            \"reference>\" :\n                \"\"\"RFC 2461 Section 6.2.1\"\"\",\n        }, # column\n        \"ipv6RouterAdvertRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.4.39.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this conceptual row.\n\nAs all objects in this conceptual row have default values, a\nrow can be created and made active by setting this object\nappropriately.\n\nThe RowStatus TC requires that this DESCRIPTION clause\nstates under which circumstances other objects in this row\ncan be modified.  The value of this object has no effect on\nwhether other objects in this conceptual row can be\nmodified.\"\"\",\n        }, # column\n        \"icmp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5\",\n        }, # node\n        \"icmpInMsgs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages which the entity received.\nNote that this counter includes all those counted by\nicmpInErrors.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nicmpStatsInMsgs.\"\"\",\n        }, # scalar\n        \"icmpInErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages which the entity received but\ndetermined as having ICMP-specific errors (bad ICMP\nchecksums, bad length, etc.).\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nicmpStatsInErrors.\"\"\",\n        }, # scalar\n        \"icmpInDestUnreachs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Destination Unreachable messages\nreceived.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInTimeExcds\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Time Exceeded messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInParmProbs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Parameter Problem messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInSrcQuenchs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Source Quench messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInRedirects\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Redirect messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInEchos\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Echo (request) messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInEchoReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Echo Reply messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInTimestamps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Timestamp (request) messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInTimestampReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Timestamp Reply messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInAddrMasks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Address Mask Request messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpInAddrMaskReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.13\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Address Mask Reply messages received.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutMsgs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.14\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages which this entity\nattempted to send.  Note that this counter includes all\nthose counted by icmpOutErrors.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nicmpStatsOutMsgs.\"\"\",\n        }, # scalar\n        \"icmpOutErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.15\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages which this entity did not send\ndue to problems discovered within ICMP, such as a lack of\nbuffers.  This value should not include errors discovered\noutside the ICMP layer, such as the inability of IP to route\nthe resultant datagram.  In some implementations, there may\nbe no types of error which contribute to this counter's\nvalue.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by\nicmpStatsOutErrors.\"\"\",\n        }, # scalar\n        \"icmpOutDestUnreachs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.16\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Destination Unreachable messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutTimeExcds\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.17\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Time Exceeded messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutParmProbs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Parameter Problem messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutSrcQuenchs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.19\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Source Quench messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutRedirects\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.20\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Redirect messages sent.  For a host, this\nobject will always be zero, since hosts do not send\nredirects.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutEchos\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.21\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Echo (request) messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutEchoReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.22\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Echo Reply messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutTimestamps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.23\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Timestamp (request) messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutTimestampReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.24\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Timestamp Reply messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutAddrMasks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.25\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Address Mask Request messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpOutAddrMaskReps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.26\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP Address Mask Reply messages sent.\n\nThis object has been deprecated, as a new IP version-neutral\ntable has been added.  It is loosely replaced by a column in\nthe icmpMsgStatsTable.\"\"\",\n        }, # scalar\n        \"icmpStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of generic system-wide ICMP counters.\"\"\",\n        }, # table\n        \"icmpStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"icmpStatsIPVersion\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row in the icmpStatsTable.\"\"\",\n        }, # row\n        \"icmpStatsIPVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetVersion\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP version of the statistics.\"\"\",\n        }, # column\n        \"icmpStatsInMsgs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages that the entity received.\nNote that this counter includes all those counted by\nicmpStatsInErrors.\"\"\",\n        }, # column\n        \"icmpStatsInErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages that the entity received but\ndetermined as having ICMP-specific errors (bad ICMP\nchecksums, bad length, etc.).\"\"\",\n        }, # column\n        \"icmpStatsOutMsgs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ICMP messages that the entity attempted\nto send.  Note that this counter includes all those counted\nby icmpStatsOutErrors.\"\"\",\n        }, # column\n        \"icmpStatsOutErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.29.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ICMP messages that this entity did not send\ndue to problems discovered within ICMP, such as a lack of\nbuffers.  This value should not include errors discovered\noutside the ICMP layer, such as the inability of IP to route\nthe resultant datagram.  In some implementations, there may\nbe no types of error that contribute to this counter's\nvalue.\"\"\",\n        }, # column\n        \"icmpMsgStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of system-wide per-version, per-message type ICMP\ncounters.\"\"\",\n        }, # table\n        \"icmpMsgStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"icmpMsgStatsIPVersion\",\n                \"icmpMsgStatsType\",\n            ],\n            \"description\" :\n                \"\"\"A conceptual row in the icmpMsgStatsTable.\n\nThe system should track each ICMP type value, even if that\nICMP type is not supported by the system.  However, a\ngiven row need not be instantiated unless a message of that\ntype has been processed, i.e., the row for\nicmpMsgStatsType=X MAY be instantiated before but MUST be\ninstantiated after the first message with Type=X is\nreceived or transmitted.  After receiving or transmitting\nany succeeding messages with Type=X, the relevant counter\nmust be incremented.\"\"\",\n        }, # row\n        \"icmpMsgStatsIPVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetVersion\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IP version of the statistics.\"\"\",\n        }, # column\n        \"icmpMsgStatsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The ICMP type field of the message type being counted by\nthis row.\n\nNote that ICMP message types are scoped by the address type\nin use.\"\"\",\n            \"reference>\" :\n                \"\"\"http://www.iana.org/assignments/icmp-parameters and\nhttp://www.iana.org/assignments/icmpv6-parameters\"\"\",\n        }, # column\n        \"icmpMsgStatsInPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input packets for this AF and type.\"\"\",\n        }, # column\n        \"icmpMsgStatsOutPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.5.30.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output packets for this AF and type.\"\"\",\n        }, # column\n        \"ipMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48\",\n            \"status\" : \"current\",\n        }, # node\n        \"ipMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2\",\n        }, # node\n        \"ipMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.1\",\n        }, # node\n        \"ipMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"ipGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"ipForwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipDefaultTTL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInHdrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInAddrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipOutNoRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipReasmTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipReasmReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipReasmOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipReasmFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipFragOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipFragFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipFragCreates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAdEntAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAdEntIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAdEntNetMask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAdEntBcastAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAdEntReasmMaxSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToMediaIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToMediaPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToMediaNetAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToMediaType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipRoutingDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The ip group of objects providing for basic management of IP\nentities, exclusive of the management of IP routes.\n\n\nAs part of the version independence, this group has been\ndeprecated.  \"\"\",\n        }, # group\n        \"icmpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"icmpInMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInDestUnreachs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInTimeExcds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInParmProbs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInSrcQuenchs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInRedirects\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInEchos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInEchoReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInTimestamps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInTimestampReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInAddrMasks\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpInAddrMaskReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutDestUnreachs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutTimeExcds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutParmProbs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutSrcQuenchs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutRedirects\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutEchos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutEchoReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutTimestamps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutTimestampReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutAddrMasks\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpOutAddrMaskReps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The icmp group of objects providing ICMP statistics.\n\nAs part of the version independence, this group has been\ndeprecated.  \"\"\",\n        }, # group\n        \"ipv4GeneralGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipForwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipDefaultTTL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipReasmTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of IPv4-specific objects for basic management of\nIPv4 entities.\"\"\",\n        }, # group\n        \"ipv4IfGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv4InterfaceReasmMaxSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv4InterfaceEnableStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv4InterfaceRetransmitTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of IPv4-specific objects for basic management of\nIPv4 interfaces.\"\"\",\n        }, # group\n        \"ipv6GeneralGroup2\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6IpForwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6IpDefaultHopLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The IPv6 group of objects providing for basic management of\nIPv6 entities.\"\"\",\n        }, # group\n        \"ipv6IfGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6InterfaceReasmMaxSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceEnableStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceReachableTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceRetransmitTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceForwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of IPv6-specific objects for basic management of\nIPv6 interfaces.\"\"\",\n        }, # group\n        \"ipLastChangeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv4InterfaceTableLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6InterfaceTableLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsTableLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The last change objects associated with this MIB.  These\nobjects are optional for all agents.  They SHOULD be\nimplemented on agents where it is possible to determine the\nproper values.  Where it is not possible to determine the\nproper values, for example when the tables are split amongst\nseveral sub-agents using AgentX, the agent MUST NOT\nimplement these objects to return an incorrect or static\nvalue.\"\"\",\n        }, # group\n        \"ipSystemStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipSystemStatsInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInHdrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInNoRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInAddrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInTruncatedPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsReasmReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsReasmOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsReasmFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutNoRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutFragReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutFragOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutFragFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutFragCreates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutTransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsInMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsDiscontinuityTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsRefreshRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP system wide statistics.\"\"\",\n        }, # group\n        \"ipv4SystemStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipSystemStatsInBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsOutBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IPv4 only system wide statistics.\"\"\",\n        }, # group\n        \"ipSystemStatsHCOctetGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipSystemStatsHCInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCInMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP system wide statistics for systems that may overflow the\nstandard octet counters within 1 hour.\"\"\",\n        }, # group\n        \"ipSystemStatsHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipSystemStatsHCInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCInForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutTransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCInMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP system wide statistics for systems that may overflow the\nstandard packet counters within 1 hour.\"\"\",\n        }, # group\n        \"ipv4SystemStatsHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipSystemStatsHCInBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOutBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IPv4 only system wide statistics for systems that may\noverflow the standard packet counters within 1 hour.\"\"\",\n        }, # group\n        \"ipIfStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipIfStatsInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInHdrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInNoRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInAddrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInTruncatedPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsReasmReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsReasmOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsReasmFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutFragReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutFragOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutFragFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutFragCreates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutTransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsInMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsDiscontinuityTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsRefreshRate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP per-interface statistics.\"\"\",\n        }, # group\n        \"ipv4IfStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.14\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipIfStatsInBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsOutBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IPv4 only per-interface statistics.\"\"\",\n        }, # group\n        \"ipIfStatsHCOctetGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.15\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipIfStatsHCInOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCInMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutMcastOctets\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP per-interfaces statistics for systems that include\ninterfaces that may overflow the standard octet\ncounters within 1 hour.\"\"\",\n        }, # group\n        \"ipIfStatsHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.16\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipIfStatsHCInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCInForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutTransmits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCInMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IP per-interfaces statistics for systems that include\ninterfaces that may overflow the standard packet counters\nwithin 1 hour.\"\"\",\n        }, # group\n        \"ipv4IfStatsHCPacketGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.17\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipIfStatsHCInBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipIfStatsHCOutBcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"IPv4 only per-interface statistics for systems that include\ninterfaces that may overflow the standard packet counters\nwithin 1 hour.\"\"\",\n        }, # group\n        \"ipAddressPrefixGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.18\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipAddressPrefixOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressPrefixOnLinkFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressPrefixAutonomousFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressPrefixAdvPreferredLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressPrefixAdvValidLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for providing information about address\nprefixes used by this node.\"\"\",\n        }, # group\n        \"ipAddressGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.19\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipAddressSpinLock\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressPrefix\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressCreated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressLastChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressStorageType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for providing information about the\naddresses relevant to this entity's interfaces.\"\"\",\n        }, # group\n        \"ipNetToPhysicalGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.20\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipNetToPhysicalPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToPhysicalLastUpdated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToPhysicalType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToPhysicalState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToPhysicalRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for providing information about the\nmappings of network address to physical address known to\nthis node.\"\"\",\n        }, # group\n        \"ipv6ScopeGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.21\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6ScopeZoneIndexLinkLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndex3\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexAdminLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexSiteLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndex6\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndex7\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexOrganizationLocal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndex9\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexB\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexC\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6ScopeZoneIndexD\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for managing IPv6 scope zones.\"\"\",\n        }, # group\n        \"ipDefaultRouterGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.22\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipDefaultRouterLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipDefaultRouterPreference\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for providing information about default\nrouters known to this node.\"\"\",\n        }, # group\n        \"ipv6RouterAdvertGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.23\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6RouterAdvertSpinLock\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertSendAdverts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertMaxInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertMinInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertManagedFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertOtherConfigFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertLinkMTU\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertReachableTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertRetransmitTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertCurHopLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertDefaultLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipv6RouterAdvertRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects for controlling information advertised\nby IPv6 routers.\"\"\",\n        }, # group\n        \"icmpStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.2.24\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"icmpStatsInMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpStatsInErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpStatsOutMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpStatsOutErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpMsgStatsInPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpMsgStatsOutPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The group of objects providing ICMP statistics.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ipMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for systems that implement only\nIPv4.  For version-independence, this compliance statement\nis deprecated in favor of ipMIBCompliance2.\"\"\",\n            \"requires\" : {\n                \"ipGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"ipMIBCompliance2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.48.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for systems that implement IP -\neither IPv4 or IPv6.\n\nThere are a number of INDEX objects that cannot be\nrepresented in the form of OBJECT clauses in SMIv2, but\nfor which we have the following compliance requirements,\nexpressed in OBJECT clause form in this description\nclause:\n\n\n-- OBJECT        ipSystemStatsIPVersion\n-- SYNTAX        InetVersion {ipv4(1), ipv6(2)}\n-- DESCRIPTION\n--     This MIB requires support for only IPv4 and IPv6\n--     versions.\n--\n-- OBJECT        ipIfStatsIPVersion\n-- SYNTAX        InetVersion {ipv4(1), ipv6(2)}\n-- DESCRIPTION\n--     This MIB requires support for only IPv4 and IPv6\n--     versions.\n--\n-- OBJECT        icmpStatsIPVersion\n-- SYNTAX        InetVersion {ipv4(1), ipv6(2)}\n-- DESCRIPTION\n--     This MIB requires support for only IPv4 and IPv6\n--     versions.\n--\n-- OBJECT        icmpMsgStatsIPVersion\n-- SYNTAX        InetVersion {ipv4(1), ipv6(2)}\n-- DESCRIPTION\n--     This MIB requires support for only IPv4 and IPv6\n--     versions.\n--\n-- OBJECT        ipAddressPrefixType\n-- SYNTAX        InetAddressType {ipv4(1), ipv6(2)}\n-- DESCRIPTION\n--     This MIB requires support for only global IPv4 and\n--     IPv6 address types.\n--\n-- OBJECT        ipAddressPrefixPrefix\n-- SYNTAX        InetAddress (Size(4 | 16))\n-- DESCRIPTION\n--     This MIB requires support for only global IPv4 and\n--     IPv6 addresses and so the size can be either 4 or\n--     16 bytes.\n--\n-- OBJECT        ipAddressAddrType\n-- SYNTAX        InetAddressType {ipv4(1), ipv6(2),\n--                                ipv4z(3), ipv6z(4)}\n-- DESCRIPTION\n--     This MIB requires support for only global and\n--     non-global IPv4 and IPv6 address types.\n--\n-- OBJECT        ipAddressAddr\n-- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))\n-- DESCRIPTION\n--     This MIB requires support for only global and\n\n\n--     non-global IPv4 and IPv6 addresses and so the size\n--     can be 4, 8, 16, or 20 bytes.\n--\n-- OBJECT        ipNetToPhysicalNetAddressType\n-- SYNTAX        InetAddressType {ipv4(1), ipv6(2),\n--                                ipv4z(3), ipv6z(4)}\n-- DESCRIPTION\n--     This MIB requires support for only global and\n--     non-global IPv4 and IPv6 address types.\n--\n-- OBJECT        ipNetToPhysicalNetAddress\n-- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))\n-- DESCRIPTION\n--     This MIB requires support for only global and\n--     non-global IPv4 and IPv6 addresses and so the size\n--     can be 4, 8, 16, or 20 bytes.\n--\n-- OBJECT        ipDefaultRouterAddressType\n-- SYNTAX        InetAddressType {ipv4(1), ipv6(2),\n--                                ipv4z(3), ipv6z(4)}\n-- DESCRIPTION\n--     This MIB requires support for only global and\n--     non-global IPv4 and IPv6 address types.\n--\n-- OBJECT        ipDefaultRouterAddress\n-- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))\n-- DESCRIPTION\n--     This MIB requires support for only global and\n--     non-global IPv4 and IPv6 addresses and so the size\n--     can be 4, 8, 16, or 20 bytes.\"\"\",\n            \"requires\" : {\n                \"ipSystemStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipAddressGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipNetToPhysicalGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipDefaultRouterGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"icmpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IP-MIB\"\n                },\n                \"ipSystemStatsHCOctetGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for systems that have an aggregate\nbandwidth of greater than 20MB.  Including this group does\nnot allow an entity to neglect the 32 bit versions of these\nobjects.\"\"\",\n                },\n                \"ipSystemStatsHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for systems that have an aggregate\nbandwidth of greater than 650MB.  Including this group\n\n\ndoes not allow an entity to neglect the 32 bit versions of\nthese objects.\"\"\",\n                },\n                \"ipIfStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all systems.\"\"\",\n                },\n                \"ipIfStatsHCOctetGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for systems that include the\nipIfStatsGroup and include links with bandwidths of greater\nthan 20MB.  Including this group does not allow an entity to\nneglect the 32 bit versions of these objects.\"\"\",\n                },\n                \"ipIfStatsHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for systems that include the\nipIfStatsGroup and include links with bandwidths of greater\nthan 650MB.  Including this group does not allow an entity\nto neglect the 32 bit versions of these objects.\"\"\",\n                },\n                \"ipv4GeneralGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4.\"\"\",\n                },\n                \"ipv4IfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4.\"\"\",\n                },\n                \"ipv4SystemStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4.\"\"\",\n                },\n                \"ipv4SystemStatsHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4 and\nthat have an aggregate bandwidth of greater than 650MB.\nIncluding this group does not allow an entity to neglect the\n32 bit versions of these objects.\"\"\",\n                },\n                \"ipv4IfStatsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4 and\nincluding the ipIfStatsGroup.\"\"\",\n                },\n                \"ipv4IfStatsHCPacketGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv4 and\n\n\nincluding the ipIfStatsHCPacketGroup.  Including this group\ndoes not allow an entity to neglect the 32 bit versions of\nthese objects.\"\"\",\n                },\n                \"ipv6GeneralGroup2\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv6.\"\"\",\n                },\n                \"ipv6IfGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv6.\"\"\",\n                },\n                \"ipAddressPrefixGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv6.\"\"\",\n                },\n                \"ipv6ScopeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all systems supporting IPv6.\"\"\",\n                },\n                \"ipv6RouterAdvertGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for all IPv6 routers.\"\"\",\n                },\n                \"ipLastChangeGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"IP-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional for all agents.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"ipv6IpForwarding\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6IpDefaultHopLimit\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv4InterfaceEnableStatus\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6InterfaceEnableStatus\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6InterfaceForwarding\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipAddressSpinLock\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"noaccess\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.  However, if an agent provides write access to any\nof the other objects in the ipAddressGroup, it SHOULD\nprovide write access to this object as well.\"\"\",\n                },\n                \"ipAddressIfIndex\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipAddressType\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipAddressStatus\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipAddressRowStatus\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"parent module\" : {\n                                \"name\" : \"SNMPv2-TC\",\n                                \"type\" : \"RowStatus\",\n                            },\n                            \"active\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"1\"\n                            },\n                        },\n                    }, # syntax\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipAddressStorageType\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\n\n\nIf an agent allows this object to be written or created, it\nis not required to allow this object to be set to readOnly,\npermanent, or nonVolatile.\"\"\",\n                },\n                \"ipNetToPhysicalPhysAddress\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipNetToPhysicalType\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n                \"ipv6RouterAdvertSpinLock\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.  However, if an agent provides write access to\nany of the other objects in the ipv6RouterAdvertGroup, it\nSHOULD provide write access to this object as well.\"\"\",\n                },\n                \"ipv6RouterAdvertSendAdverts\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertMaxInterval\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertMinInterval\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertManagedFlag\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertOtherConfigFlag\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertLinkMTU\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertReachableTime\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertRetransmitTime\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertCurHopLimit\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertDefaultLifetime\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write access to this\nobject.\"\"\",\n                },\n                \"ipv6RouterAdvertRowStatus\" : {\n                    \"module\" : \"IP-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write or create access\nto this object.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IPV6-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python IPV6-MIB\n\nFILENAME = \"/usr/share/mibs/ietf/IPV6-MIB\"\n\nMIB = {\n    \"moduleName\" : \"IPV6-MIB\",\n\n    \"IPV6-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF IPv6 Working Group\"\"\",\n        \"contact\" : \n            \"\"\"           Dimitry Haskin\n\nPostal: Bay Networks, Inc.\n        660 Techology Park Drive.\n        Billerica, MA  01821\n        US\n\n   Tel: +1-978-916-8124\nE-mail: dhaskin@baynetworks.com\n\n        Steve Onishi\n\nPostal: Bay Networks, Inc.\n        3 Federal Street\n        Billerica, MA 01821\n        US\n\n   Tel: +1-978-916-3816\nE-mail: sonishi@baynetworks.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for entities implementing the IPv6\nprotocol.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"1998-02-05 21:55\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"ipv6MIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"VariablePointer\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"IPV6-TC\", \"name\" : \"Ipv6IfIndex\"},\n        {\"module\" : \"IPV6-TC\", \"name\" : \"Ipv6Address\"},\n        {\"module\" : \"IPV6-TC\", \"name\" : \"Ipv6AddressPrefix\"},\n        {\"module\" : \"IPV6-TC\", \"name\" : \"Ipv6AddressIfIdentifier\"},\n        {\"module\" : \"IPV6-TC\", \"name\" : \"Ipv6IfIndexOrZero\"},\n    ),\n\n    \"nodes\" : {\n        \"ipv6MIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55\",\n            \"status\" : \"current\",\n        }, # node\n        \"ipv6MIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1\",\n        }, # node\n        \"ipv6Forwarding\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notForwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The indication of whether this entity is acting\nas an IPv6 router in respect to the forwarding of\ndatagrams received by, but not addressed to, this\nentity.  IPv6 routers forward datagrams.  IPv6\nhosts do not (except those source-routed via the\nhost).\n\nNote that for some managed nodes, this object may\ntake on only a subset of the values possible.\nAccordingly, it is appropriate for an agent to\nreturn a `wrongValue' response if a management\nstation attempts to change this object to an\ninappropriate value.\"\"\",\n        }, # scalar\n        \"ipv6DefaultHopLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"64\",\n            \"description\" :\n                \"\"\"The default value inserted into the Hop Limit\nfield of the IPv6 header of datagrams originated\nat this entity, whenever a Hop Limit value is not\nsupplied by the transport layer protocol.\"\"\",\n        }, # scalar\n        \"ipv6Interfaces\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv6 interfaces (regardless of\ntheir current state) present on this system.\"\"\",\n        }, # scalar\n        \"ipv6IfTableLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time of the last\ninsertion or removal of an entry in the\nipv6IfTable. If the number of entries has been\nunchanged since the last re-initialization of\nthe local network management subsystem, then this\nobject contains a zero value.\"\"\",\n        }, # scalar\n        \"ipv6IfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IPv6 Interfaces table contains information\non the entity's internetwork-layer interfaces.\nAn IPv6 interface constitutes a logical network\nlayer attachment to the layer immediately below\nIPv6 including internet layer 'tunnels', such as\ntunnels over IPv4 or IPv6 itself.\"\"\",\n        }, # table\n        \"ipv6IfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6IfIndex\",\n            ],\n            \"description\" :\n                \"\"\"An interface entry containing objects\nabout a particular IPv6 interface.\"\"\",\n        }, # row\n        \"ipv6IfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6IfIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique non-zero value identifying\nthe particular IPv6 interface.\"\"\",\n        }, # column\n        \"ipv6IfDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string containing information about the\ninterface.  This string may be set by the network\nmanagement system.\"\"\",\n        }, # column\n        \"ipv6IfLowerLayer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"VariablePointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies the protocol layer over\nwhich this network interface operates.  If this\nnetwork interface operates over the data-link\nlayer, then the value of this object refers to an\ninstance of ifIndex [6]. If this network interface\noperates over an IPv4 interface, the value of this\nobject refers to an instance of ipAdEntAddr [3].\n\nIf this network interface operates over another\nIPv6 interface, the value of this object refers to\nan instance of ipv6IfIndex.  If this network\ninterface is not currently operating over an active\nprotocol layer, then the value of this object\nshould be set to the OBJECT ID { 0 0 }.\"\"\",\n        }, # column\n        \"ipv6IfEffectiveMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"octets\",\n            \"description\" :\n                \"\"\"The size of the largest IPv6 packet which can be\nsent/received on the interface, specified in\noctets.\"\"\",\n        }, # column\n        \"ipv6IfReasmMaxSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"octets\",\n            \"description\" :\n                \"\"\"The size of the largest IPv6 datagram which this\nentity can re-assemble from incoming IPv6 fragmented\ndatagrams received on this interface.\"\"\",\n        }, # column\n        \"ipv6IfIdentifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6AddressIfIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Interface Identifier for this interface that\nis (at least) unique on the link this interface is\nattached to. The Interface Identifier is combined\nwith an address prefix to form an interface address.\n\nBy default, the Interface Identifier is autoconfigured\naccording to the rules of the link type this\ninterface is attached to.\"\"\",\n        }, # column\n        \"ipv6IfIdentifierLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The length of the Interface Identifier in bits.\"\"\",\n        }, # column\n        \"ipv6IfPhysicalAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The interface's physical address. For example, for\nan IPv6 interface attached to an 802.x link, this\nobject normally contains a MAC address. Note that\nin some cases this address may differ from the\naddress of the interface's protocol sub-layer.  The\ninterface's media-specific MIB must define the bit\nand byte ordering and the format of the value of\nthis object. For interfaces which do not have such\nan address (e.g., a serial line), this object should\ncontain an octet string of zero length.\"\"\",\n        }, # column\n        \"ipv6IfAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired state of the interface.  When a managed\nsystem initializes,  all IPv6 interfaces start with\nipv6IfAdminStatus in the down(2) state.  As a result\nof either explicit management action or per\nconfiguration information retained by the managed\nsystem,  ipv6IfAdminStatus is then changed to\nthe up(1) state (or remains in the down(2) state).\"\"\",\n        }, # column\n        \"ipv6IfOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noIfIdentifier\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational state of the interface.\nThe noIfIdentifier(3) state indicates that no valid\nInterface Identifier is assigned to the interface.\nThis state usually indicates that the link-local\ninterface address failed Duplicate Address Detection.\nIf ipv6IfAdminStatus is down(2) then ipv6IfOperStatus\nshould be down(2).  If ipv6IfAdminStatus is changed\nto up(1) then ipv6IfOperStatus should change to up(1)\nif the interface is ready to transmit and receive\nnetwork traffic; it should remain in the down(2) or\nnoIfIdentifier(3) state if and only if there is a\nfault that prevents it from going to the up(1) state;\nit should remain in the notPresent(5) state if\nthe interface has missing (typically, lower layer)\ncomponents.\"\"\",\n        }, # column\n        \"ipv6IfLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time the interface\nentered its current operational state.  If the\ncurrent state was entered prior to the last\nre-initialization of the local network management\nsubsystem, then this object contains a zero\nvalue.\"\"\",\n        }, # column\n        \"ipv6IfStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"IPv6 interface traffic statistics.\"\"\",\n        }, # table\n        \"ipv6IfStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"IPV6-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"ipv6IfEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An interface statistics entry containing objects\nat a particular IPv6 interface.\"\"\",\n        }, # row\n        \"ipv6IfStatsInReceives\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of input datagrams received by\nthe interface, including those received in error.\"\"\",\n        }, # column\n        \"ipv6IfStatsInHdrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded due to\nerrors in their IPv6 headers, including version\nnumber mismatch, other format errors, hop count\nexceeded, errors discovered in processing their\nIPv6 options, etc.\"\"\",\n        }, # column\n        \"ipv6IfStatsInTooBigErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams that could not be\nforwarded because their size exceeded the link MTU\nof outgoing interface.\"\"\",\n        }, # column\n        \"ipv6IfStatsInNoRoutes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded because no\nroute could be found to transmit them to their\ndestination.\"\"\",\n        }, # column\n        \"ipv6IfStatsInAddrErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded because\nthe IPv6 address in their IPv6 header's destination\nfield was not a valid address to be received at\nthis entity.  This count includes invalid\naddresses (e.g., ::0) and unsupported addresses\n(e.g., addresses with unallocated prefixes).  For\nentities which are not IPv6 routers and therefore\ndo not forward datagrams, this counter includes\ndatagrams discarded because the destination address\nwas not a local address.\"\"\",\n        }, # column\n        \"ipv6IfStatsInUnknownProtos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of locally-addressed datagrams\nreceived successfully but discarded because of an\nunknown or unsupported protocol. This counter is\nincremented at the interface to which these\ndatagrams were addressed which might not be\nnecessarily the input interface for some of\nthe datagrams.\"\"\",\n        }, # column\n        \"ipv6IfStatsInTruncatedPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input datagrams discarded because\ndatagram frame didn't carry enough data.\"\"\",\n        }, # column\n        \"ipv6IfStatsInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input IPv6 datagrams for which no\nproblems were encountered to prevent their\ncontinued processing, but which were discarded\n(e.g., for lack of buffer space).  Note that this\ncounter does not include any datagrams discarded\nwhile awaiting re-assembly.\"\"\",\n        }, # column\n        \"ipv6IfStatsInDelivers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of datagrams successfully\ndelivered to IPv6 user-protocols (including ICMP).\nThis counter is incremented at the interface to\nwhich these datagrams were addressed which might\nnot be necessarily the input interface for some of\nthe datagrams.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutForwDatagrams\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output datagrams which this\nentity received and forwarded to their final\ndestinations.  In entities which do not act\nas IPv6 routers, this counter will include\nonly those packets which were Source-Routed\nvia this entity, and the Source-Route\nprocessing was successful.  Note that for\na successfully forwarded datagram the counter\nof the outgoing interface is incremented.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutRequests\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of IPv6 datagrams which local IPv6\nuser-protocols (including ICMP) supplied to IPv6 in\nrequests for transmission.  Note that this counter\ndoes not include any datagrams counted in\nipv6IfStatsOutForwDatagrams.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output IPv6 datagrams for which no\nproblem was encountered to prevent their\ntransmission to their destination, but which were\ndiscarded (e.g., for lack of buffer space).  Note\nthat this counter would include datagrams counted\nin ipv6IfStatsOutForwDatagrams if any such packets\nmet this (discretionary) discard criterion.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutFragOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv6 datagrams that have been\nsuccessfully fragmented at this output interface.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutFragFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv6 datagrams that have been\ndiscarded because they needed to be fragmented\nat this output interface but could not be.\"\"\",\n        }, # column\n        \"ipv6IfStatsOutFragCreates\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output datagram fragments that have\nbeen generated as a result of fragmentation at\nthis output interface.\"\"\",\n        }, # column\n        \"ipv6IfStatsReasmReqds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv6 fragments received which needed\nto be reassembled at this interface.  Note that this\ncounter is incremented at the interface to which\nthese fragments were addressed which might not\nbe necessarily the input interface for some of\nthe fragments.\"\"\",\n        }, # column\n        \"ipv6IfStatsReasmOKs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IPv6 datagrams successfully\nreassembled.  Note that this counter is incremented\nat the interface to which these datagrams were\naddressed which might not be necessarily the input\ninterface for some of the fragments.\"\"\",\n        }, # column\n        \"ipv6IfStatsReasmFails\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failures detected by the IPv6 re-\nassembly algorithm (for whatever reason: timed\nout, errors, etc.).  Note that this is not\nnecessarily a count of discarded IPv6 fragments\nsince some algorithms (notably the algorithm in\nRFC 815) can lose track of the number of fragments\nby combining them as they are received.\nThis counter is incremented at the interface to which\nthese fragments were addressed which might not be\nnecessarily the input interface for some of the\nfragments.\"\"\",\n        }, # column\n        \"ipv6IfStatsInMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of multicast packets received\nby the interface\"\"\",\n        }, # column\n        \"ipv6IfStatsOutMcastPkts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of multicast packets transmitted\nby the interface\"\"\",\n        }, # column\n        \"ipv6AddrPrefixTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of IPv6 address prefixes of\nIPv6 interfaces.\"\"\",\n        }, # table\n        \"ipv6AddrPrefixEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6IfIndex\",\n                \"ipv6AddrPrefix\",\n                \"ipv6AddrPrefixLength\",\n            ],\n            \"description\" :\n                \"\"\"An interface entry containing objects of\na particular IPv6 address prefix.\"\"\",\n        }, # row\n        \"ipv6AddrPrefix\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6AddressPrefix\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The prefix associated with the this interface.\"\"\",\n        }, # column\n        \"ipv6AddrPrefixLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The length of the prefix (in bits).\"\"\",\n        }, # column\n        \"ipv6AddrPrefixOnLinkFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value 'true(1)', if this\nprefix can be used  for on-link determination\nand the value 'false(2)' otherwise.\"\"\",\n        }, # column\n        \"ipv6AddrPrefixAutonomousFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Autonomous address configuration flag. When\ntrue(1), indicates that this prefix can be used\nfor autonomous address configuration (i.e. can\nbe used to form a local interface address).\nIf false(2), it is not used to autoconfigure\na local interface address.\"\"\",\n        }, # column\n        \"ipv6AddrPrefixAdvPreferredLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"It is the length of time in seconds that this\nprefix will remain preferred, i.e. time until\ndeprecation.  A value of 4,294,967,295 represents\ninfinity.\n\nThe address generated from a deprecated prefix\nshould no longer be used as a source address in\nnew communications, but packets received on such\nan interface are processed as expected.\"\"\",\n        }, # column\n        \"ipv6AddrPrefixAdvValidLifetime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"It is the length of time in seconds that this\nprefix will remain valid, i.e. time until\ninvalidation.  A value of 4,294,967,295 represents\ninfinity.\n\nThe address generated from an invalidated prefix\nshould not appear as the destination or source\naddress of a packet.\"\"\",\n        }, # column\n        \"ipv6AddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of addressing information relevant to\nthis node's interface addresses.\"\"\",\n        }, # table\n        \"ipv6AddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6IfIndex\",\n                \"ipv6AddrAddress\",\n            ],\n            \"description\" :\n                \"\"\"The addressing information for one of this\nnode's interface addresses.\"\"\",\n        }, # row\n        \"ipv6AddrAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IPv6 address to which this entry's addressing\ninformation pertains.\"\"\",\n        }, # column\n        \"ipv6AddrPfxLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"The length of the prefix (in bits) associated with\nthe IPv6 address of this entry.\"\"\",\n        }, # column\n        \"ipv6AddrType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stateless\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stateful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of address. Note that 'stateless(1)'\nrefers to an address that was statelessly\nautoconfigured; 'stateful(2)' refers to a address\nwhich was acquired by via a stateful protocol\n(e.g. DHCPv6, manual configuration).\"\"\",\n        }, # column\n        \"ipv6AddrAnycastFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object has the value 'true(1)', if this\naddress is an anycast address and the value\n'false(2)' otherwise.\"\"\",\n        }, # column\n        \"ipv6AddrStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"preferred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"deprecated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inaccessible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Address status.  The preferred(1) state indicates\nthat this is a valid address that can appear as\nthe destination or source address of a packet.\nThe deprecated(2) state indicates that this is\na valid but deprecated address that should no longer\nbe used as a source address in new communications,\nbut packets addressed to such an address are\nprocessed as expected. The invalid(3) state indicates\nthat this is not valid address which should not\nappear as the destination or source address of\na packet. The inaccessible(4) state indicates that\nthe address is not accessible because the interface\nto which this address is assigned is not operational.\"\"\",\n        }, # column\n        \"ipv6RouteNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of current ipv6RouteTable entries.\nThis is primarily to avoid having to read\nthe table in order to determine this number.\"\"\",\n        }, # scalar\n        \"ipv6DiscardedRoutes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of routing entries which were chosen\nto be discarded even though they are valid.  One\npossible reason for discarding such an entry could\nbe to free-up buffer space for other routing\nentries.\"\"\",\n        }, # scalar\n        \"ipv6RouteTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"IPv6 Routing table. This table contains\nan entry for each valid IPv6 unicast route\nthat can be used for packet forwarding\ndetermination.\"\"\",\n        }, # table\n        \"ipv6RouteEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6RouteDest\",\n                \"ipv6RoutePfxLength\",\n                \"ipv6RouteIndex\",\n            ],\n            \"description\" :\n                \"\"\"A routing entry.\"\"\",\n        }, # row\n        \"ipv6RouteDest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The destination IPv6 address of this route.\nThis object may not take a Multicast address\nvalue.\"\"\",\n        }, # column\n        \"ipv6RoutePfxLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"units\" : \"bits\",\n            \"description\" :\n                \"\"\"Indicates the prefix length of the destination\naddress.\"\"\",\n        }, # column\n        \"ipv6RouteIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The value which uniquely identifies the route\namong the routes to the same network layer\ndestination.  The way this value is chosen is\nimplementation specific but it must be unique for\nipv6RouteDest/ipv6RoutePfxLength pair and remain\nconstant for the life of the route.\"\"\",\n        }, # column\n        \"ipv6RouteIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6IfIndexOrZero\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index value which uniquely identifies the local\ninterface through which the next hop of this\nroute should be reached.  The interface identified\nby a particular value of this index is the same\ninterface as identified by the same value of\nipv6IfIndex.  For routes of the discard type this\nvalue can be zero.\"\"\",\n        }, # column\n        \"ipv6RouteNextHop\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"On remote routes, the address of the next\nsystem en route;  otherwise, ::0\n('00000000000000000000000000000000'H in ASN.1\nstring representation).\"\"\",\n        }, # column\n        \"ipv6RouteType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"discard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of route. Note that 'local(3)' refers\nto a route for which the next hop is the final\ndestination; 'remote(4)' refers to a route for\nwhich  the  next  hop is not the final\ndestination; 'discard(2)' refers to a route\nindicating that packets to destinations matching\nthis route are to be discarded (sometimes called\nblack-hole route).\"\"\",\n        }, # column\n        \"ipv6RouteProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"netmgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ndisc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"ospf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"bgp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"idrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"igrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The routing mechanism via which this route was\nlearned.\"\"\",\n        }, # column\n        \"ipv6RoutePolicy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The general set of conditions that would cause the\nselection of one multipath route (set of next hops\nfor a given destination) is referred to as 'policy'.\nUnless the mechanism indicated by ipv6RouteProtocol\nspecified otherwise, the policy specifier is the\n8-bit Traffic Class field of the IPv6 packet header\nthat is zero extended at the left to a 32-bit value.\n\nProtocols defining 'policy' otherwise must either\ndefine a set of values which are valid for\nthis object or must implement an integer-\ninstanced  policy table for which this object's\nvalue acts as an index.\"\"\",\n        }, # column\n        \"ipv6RouteAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The number of seconds since this route was last\nupdated or otherwise determined to be correct.\nNote that no semantics of `too old' can be implied\nexcept through knowledge of the routing protocol\nby which the route was learned.\"\"\",\n        }, # column\n        \"ipv6RouteNextHopRDI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Routing Domain ID of the Next Hop.\nThe  semantics of this object are determined by\nthe routing-protocol specified in  the  route's\nipv6RouteProtocol value.   When  this object is\nunknown or not relevant its value should be set\nto zero.\"\"\",\n        }, # column\n        \"ipv6RouteMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The routing metric for this route. The\nsemantics of this metric are determined by the\nrouting protocol specified in the route's\nipv6RouteProtocol value.  When this is unknown\nor not relevant to the protocol indicated by\nipv6RouteProtocol, the object value should be\nset to its maximum value (4,294,967,295).\"\"\",\n        }, # column\n        \"ipv6RouteWeight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system internal weight value for this route.\nThe semantics of this value are determined by\nthe implementation specific rules. Generally,\nwithin routes with the same ipv6RoutePolicy value,\nthe lower the weight value the more preferred is\nthe route.\"\"\",\n        }, # column\n        \"ipv6RouteInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A reference to MIB definitions specific to the\nparticular routing protocol which is responsible\nfor this route, as determined by the  value\nspecified  in the route's ipv6RouteProto value.\nIf this information is not present,  its  value\nshould be set to the OBJECT ID { 0 0 },\nwhich is a syntactically valid object  identifier,\nand any implementation conforming to ASN.1\nand the Basic Encoding Rules must  be  able  to\ngenerate and recognize this value.\"\"\",\n        }, # column\n        \"ipv6RouteValid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.11.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"Setting this object to the value 'false(2)' has\nthe effect of invalidating the corresponding entry\nin the ipv6RouteTable object.  That is, it\neffectively disassociates the destination\nidentified with said entry from the route\nidentified with said entry.  It is an\nimplementation-specific matter as to whether the\nagent removes an invalidated entry from the table.\nAccordingly, management stations must be prepared\nto receive tabular information from agents that\ncorresponds to entries not currently in use.\nProper interpretation of such entries requires\nexamination of the relevant ipv6RouteValid\nobject.\"\"\",\n        }, # column\n        \"ipv6NetToMediaTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The IPv6 Address Translation table used for\nmapping from IPv6 addresses to physical addresses.\n\nThe IPv6 address translation table contain the\nIpv6Address to `physical' address equivalencies.\nSome interfaces do not use translation tables\nfor determining address equivalencies; if all\ninterfaces are of this type, then the Address\nTranslation table is empty, i.e., has zero\nentries.\"\"\",\n        }, # table\n        \"ipv6NetToMediaEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ipv6IfIndex\",\n                \"ipv6NetToMediaNetAddress\",\n            ],\n            \"description\" :\n                \"\"\"Each entry contains one IPv6 address to `physical'\naddress equivalence.\"\"\",\n        }, # row\n        \"ipv6NetToMediaNetAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IPV6-TC\", \"name\" : \"Ipv6Address\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The IPv6 Address corresponding to\nthe media-dependent `physical' address.\"\"\",\n        }, # column\n        \"ipv6NetToMediaPhysAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The media-dependent `physical' address.\"\"\",\n        }, # column\n        \"ipv6NetToMediaType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the mapping. The 'dynamic(2)' type\nindicates that the IPv6 address to physical\naddresses mapping has been dynamically\nresolved using the IPv6 Neighbor Discovery\nprotocol. The static(3)' types indicates that\nthe mapping has been statically configured.\nThe local(4) indicates that the mapping is\nprovided for an entity's own interface address.\"\"\",\n        }, # column\n        \"ipv6IfNetToMediaState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reachable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stale\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"probe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Neighbor Unreachability Detection [8] state\nfor the interface when the address mapping in\nthis entry is used.\"\"\",\n        }, # column\n        \"ipv6IfNetToMediaLastUpdated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this entry\nwas last updated.  If this entry was updated prior\nto the last re-initialization of the local network\nmanagement subsystem, then this object contains\na zero value.\"\"\",\n        }, # column\n        \"ipv6NetToMediaValid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.1.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"Setting this object to the value 'false(2)' has\nthe effect of invalidating the corresponding entry\nin the ipv6NetToMediaTable.  That is, it effectively\ndisassociates the interface identified with said\nentry from the mapping identified with said entry.\nIt is an implementation-specific matter as to\nwhether the agent removes an invalidated entry\nfrom the table.  Accordingly, management stations\nmust be prepared to receive tabular information\nfrom agents that corresponds to entries not\ncurrently in use.  Proper interpretation of such\nentries requires examination of the relevant\nipv6NetToMediaValid object.\"\"\",\n        }, # column\n        \"ipv6Notifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.2\",\n        }, # node\n        \"ipv6NotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.2.0\",\n        }, # node\n        \"ipv6Conformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3\",\n        }, # node\n        \"ipv6Compliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3.1\",\n        }, # node\n        \"ipv6Groups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"ipv6IfStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ipv6IfDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfOperStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An ipv6IfStateChange notification signifies\nthat there has been a change in the state of\nan ipv6 interface.  This notification should\nbe generated when the interface's operational\nstatus transitions to or from the up(1) state.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"ipv6GeneralGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6Forwarding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6DefaultHopLimit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6Interfaces\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfTableLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfLowerLayer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfEffectiveMtu\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfReasmMaxSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfIdentifier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfIdentifierLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfPhysicalAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInReceives\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInHdrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInTooBigErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInNoRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInAddrErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInUnknownProtos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInTruncatedPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInDelivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutForwDatagrams\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutFragOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutFragFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutFragCreates\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsReasmReqds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsReasmOKs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsReasmFails\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsInMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfStatsOutMcastPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrPrefixOnLinkFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrPrefixAutonomousFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrPrefixAdvPreferredLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrPrefixAdvValidLifetime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrPfxLength\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrAnycastFlag\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6AddrStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6DiscardedRoutes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteIfIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteNextHop\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RoutePolicy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteAge\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteNextHopRDI\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteMetric\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteWeight\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6RouteValid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6NetToMediaPhysAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6NetToMediaType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfNetToMediaState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6IfNetToMediaLastUpdated\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6NetToMediaValid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The IPv6 group of objects providing for basic\nmanagement of IPv6 entities.\"\"\",\n        }, # group\n        \"ipv6NotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"ipv6IfStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The notification that an IPv6 entity is required\nto implement.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"ipv6Compliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"IPV6-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.55.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMPv2 entities which\nimplement ipv6 MIB.\"\"\",\n            \"requires\" : {\n                \"ipv6GeneralGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n                \"ipv6NotificationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"IPV6-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"ipv6Forwarding\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6DefaultHopLimit\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6IfDescr\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6IfIdentifier\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6IfIdentifierLength\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6IfAdminStatus\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6RouteValid\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n                \"ipv6NetToMediaValid\" : {\n                    \"module\" : \"IPV6-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"An agent is not required to provide write\naccess to this object\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IT-WATCHDOGS-MIB-V3.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# This python file has been generated by smidump version 0.5.0:\n#\n#   smidump -f python IT-WATCHDOGS-MIB-V3\n\nFILENAME = \"itw_mibv3.mib\"\n\nMIB = {\n    \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n\n    \"IT-WATCHDOGS-MIB-V3\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"I.T. Watchdogs\"\"\",\n        \"contact\" :\n            \"\"\"support@itwatchdogs.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB for I.T. Watchdogs Products\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2013-06-19 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"itwatchdogs\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"itwatchdogs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373\",\n            \"status\" : \"current\",\n        }, # node\n        \"owl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3\",\n        }, # node\n        \"deviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1\",\n        }, # node\n        \"productTitle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product name\"\"\",\n        }, # scalar\n        \"productVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product version\"\"\",\n        }, # scalar\n        \"productFriendlyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-assigned name\"\"\",\n        }, # scalar\n        \"productMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's unique MAC address\"\"\",\n        }, # scalar\n        \"productUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's main URL access point\"\"\",\n        }, # scalar\n        \"alarmTripType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unplugged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of alarm trip. 0 = None, 1 = Low, 2 = High, 3 = Unplugged\"\"\",\n        }, # scalar\n        \"productHardware\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's hardware type\"\"\",\n        }, # scalar\n        \"sensorCountsBase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8\",\n        }, # node\n        \"sensorCounts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1\",\n        }, # node\n        \"climateCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of climate monitors currently plugged in\"\"\",\n        }, # scalar\n        \"powerMonitorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"tempSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of temperature sensors currently plugged in\"\"\",\n        }, # scalar\n        \"airflowSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of airflow sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChDELTACount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DELTA 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"doorSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of door sensors currently plugged in\"\"\",\n        }, # scalar\n        \"waterSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of water sensors currently plugged in\"\"\",\n        }, # scalar\n        \"currentSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of current sensors currently plugged in\"\"\",\n        }, # scalar\n        \"millivoltSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of millivolt sensors currently plugged in\"\"\",\n        }, # scalar\n        \"power3ChSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"outletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of outlets currently plugged in\"\"\",\n        }, # scalar\n        \"vsfcCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fan controller monitors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlGrpAmpsCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of amperage controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlOutletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of monitored or switched outlets\"\"\",\n        }, # scalar\n        \"dewpointSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of dewpoint sensors currently plugged in\"\"\",\n        }, # scalar\n        \"digitalSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of digital sensors currently plugged in\"\"\",\n        }, # scalar\n        \"dstsSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DSTS controllers currently plugged in\"\"\",\n        }, # scalar\n        \"cpmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of city power sensors currently plugged in\"\"\",\n        }, # scalar\n        \"smokeAlarmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of smoke alarm sensors currently plugged in\"\"\",\n        }, # scalar\n        \"neg48VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of -48Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"pos30VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 30Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"analogSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of remote analog inputs currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChIECCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IEC 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"climateRelayCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of climate relay monitors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlRelayCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of relay controllers currently plugged in\"\"\",\n        }, # scalar\n        \"airSpeedSwitchSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of air speed switch sensors currently plugged in\"\"\",\n        }, # scalar\n        \"powerDMCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DM48 current sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ioExpanderCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IO expander devices currently plugged in\"\"\",\n        }, # scalar\n        \"t3hdSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of T3HD sensors currently plugged in\"\"\",\n        }, # scalar\n        \"thdSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of THD sensors currently plugged in\"\"\",\n        }, # scalar\n        \"pos60VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 60Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl2CirTotCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of IEC 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"sc10Count\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.8.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fan controller monitors currently plugged in\"\"\",\n        }, # scalar\n        \"temperaturePrecision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"degree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"deciDegree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Precision:\n0 = degree: whole degree (value X 1)\n1 = deci-degree: tenths of a degree (value X 10)\n    ex. 550 = 55.0 degrees\"\"\",\n        }, # scalar\n        \"alarmTrigger\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Used in a trap var-bind to indicate what triggered\nthe alarm. The alarmTrigger will remain consistent\nfor both trip and clear traps. Possible values include:\n\n    'Low' = Low-trip trigger\n    'High' = High-trip trigger\n    'Unplugged' = Unplugged device trigger\"\"\",\n        }, # scalar\n        \"alarmInstance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Provides the row index (instance number) for the alarm\nthat generated a trap. This value is only available when\nincluded in the var-binds of an associated trap. \"\"\",\n        }, # scalar\n        \"climateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Climate sensors (internal sensors for climate units)\"\"\",\n        }, # table\n        \"climateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"climateIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the climate table: each entry contains\nan index (climateIndex) and other details\"\"\",\n        }, # row\n        \"climateIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"climateSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"climateName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"climateAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"climateTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (C)\"\"\",\n        }, # column\n        \"climateTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (F)\"\"\",\n        }, # column\n        \"climateHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Humidity\"\"\",\n        }, # column\n        \"climateLight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Ambient Light\"\"\",\n        }, # column\n        \"climateAirflow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Airflow\"\"\",\n        }, # column\n        \"climateSound\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Sound\"\"\",\n        }, # column\n        \"climateIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"climateIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"climateIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"climateDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (C)\"\"\",\n        }, # column\n        \"climateDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (F)\"\"\",\n        }, # column\n        \"powMonTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitors\"\"\",\n        }, # table\n        \"powMonEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powMonIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor table: each entry contains\nan index (powMonIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"powMonIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powMonSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powMonName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powMonAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powMonkWattHrs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours\"\"\",\n        }, # column\n        \"powMonVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts\"\"\",\n        }, # column\n        \"powMonVoltMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Max)\"\"\",\n        }, # column\n        \"powMonVoltMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Min)\"\"\",\n        }, # column\n        \"powMonVoltPeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Peak)\"\"\",\n        }, # column\n        \"powMonDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps\"\"\",\n        }, # column\n        \"powMonRealPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power\"\"\",\n        }, # column\n        \"powMonApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power\"\"\",\n        }, # column\n        \"powMonPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor\"\"\",\n        }, # column\n        \"powMonOutlet1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Outlet 1\",\n            \"description\" :\n                \"\"\"Outlet 1 Trap\"\"\",\n        }, # column\n        \"powMonOutlet2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Outlet 2\",\n            \"description\" :\n                \"\"\"Outlet 2 Trap\"\"\",\n        }, # column\n        \"powMonOutlet1StatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet 1 Last Changed Its Status\"\"\",\n        }, # column\n        \"powMonOutlet2StatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet 2 Last Changed Its Status\"\"\",\n        }, # column\n        \"tempSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of temperature sensors\"\"\",\n        }, # table\n        \"tempSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tempSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the temperature sensor table: each entry contains\nan index (tempIndex) and other sensor details\"\"\",\n        }, # row\n        \"tempSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"tempSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"tempSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"tempSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"tempSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature in Celsius\"\"\",\n        }, # column\n        \"tempSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature in Fahrenheit\"\"\",\n        }, # column\n        \"airFlowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of airflow sensors\"\"\",\n        }, # table\n        \"airFlowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFlowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the air flow sensor table: each entry contains\nan index (airFlowSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"airFlowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airFlowSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airFlowSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airFlowSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airFlowSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"airFlowSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"airFlowSensorFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air flow reading\"\"\",\n        }, # column\n        \"airFlowSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"airFlowSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (C)\"\"\",\n        }, # column\n        \"airFlowSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point (F)\"\"\",\n        }, # column\n        \"ctrl3ChDELTATable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (DELTA)\"\"\",\n        }, # table\n        \"ctrl3ChDELTAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChDELTAIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase delta outlet control table: each entry contains\nan index (ctrl3ChDELTAIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChDELTAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChDELTASerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChDELTAName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChDELTAAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerChCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of active power channels\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line A)\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line B)\"\"\",\n        }, # column\n        \"ctrl3ChDELTADeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Line C)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Watts (Total)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorAB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase AB)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorBC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase BC)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAkWattHrsCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltsCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAVoltPeakCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTARealPowerCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAApparentPowerCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for VoltAmps (Phase CA)\"\"\",\n        }, # column\n        \"ctrl3ChDELTAPowerFactorCA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.6.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase CA)\"\"\",\n        }, # column\n        \"doorSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of door sensors\"\"\",\n        }, # table\n        \"doorSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"doorSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the door sensor table: each entry contains\nan index (doorSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"doorSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"doorSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"doorSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"doorSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"doorSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Door sensor status\"\"\",\n        }, # column\n        \"waterSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of water sensors\"\"\",\n        }, # table\n        \"waterSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the water sensor table: each entry contains\nan index (waterSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"waterSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"waterSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"waterSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"waterSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"waterSensorDampness\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dampness of the water sensor\"\"\",\n        }, # column\n        \"currentMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of current monitors\"\"\",\n        }, # table\n        \"currentMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"currentMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the current monitor table: each entry contains\nan index (currentMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"currentMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"currentMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"currentMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"currentMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"currentMonitorDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"millivoltMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of millivolt monitors\"\"\",\n        }, # table\n        \"millivoltMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"millivoltMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the millivolt monitor table: each entry contains\nan index (millivoltMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"millivoltMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"millivoltMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"millivoltMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"millivoltMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"millivoltMonitorMV\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"millivolts\",\n            \"description\" :\n                \"\"\"millivolts\"\"\",\n        }, # column\n        \"pow3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitor 3 Channel\"\"\",\n        }, # table\n        \"pow3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pow3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor 3 channel table: each entry contains\nan index (pow3ChIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"pow3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pow3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pow3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pow3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pow3ChkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltMinA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"pow3ChRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltMinB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"pow3ChRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltMaxC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Max-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltMinC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Min-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"pow3ChDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"pow3ChRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"pow3ChApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"pow3ChPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"pow3ChkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"pow3ChRealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.11.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Total)\"\"\",\n        }, # column\n        \"outletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlets\"\"\",\n        }, # table\n        \"outletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the outlet table: each entry contains\nan index (outletIndex) and other sensor details\"\"\",\n        }, # row\n        \"outletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"outletSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"outletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"outletAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"outlet1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 1 status\"\"\",\n        }, # column\n        \"outlet2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 2 status\"\"\",\n        }, # column\n        \"vsfcTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"VSFC sensors (internal sensors for VSFC units)\"\"\",\n        }, # table\n        \"vsfcEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vsfcIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the vsfc table: each entry contains\nan index (vsfcIndex) and other details\"\"\",\n        }, # row\n        \"vsfcIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"vsfcSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"vsfcName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"vsfcAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"vsfcSetPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"18\",\n                        \"max\" : \"38\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"18\",\n                        \"max\" : \"38\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current temperature set point in C\"\"\",\n        }, # column\n        \"vsfcSetPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"65\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"65\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current temperature set point in F\"\"\",\n        }, # column\n        \"vsfcFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Fan Speed\"\"\",\n        }, # column\n        \"vsfcIntTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in C\"\"\",\n        }, # column\n        \"vsfcIntTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-4\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-4\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in F\"\"\",\n        }, # column\n        \"vsfcExt1TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in C\"\"\",\n        }, # column\n        \"vsfcExt1TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt2TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 2 in C\"\"\",\n        }, # column\n        \"vsfcExt2TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt3TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 3 in C\"\"\",\n        }, # column\n        \"vsfcExt3TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"vsfcExt4TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for external temp 4 in C\"\"\",\n        }, # column\n        \"vsfcExt4TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.13.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"122\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in F\"\"\",\n        }, # column\n        \"ctrl3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control\"\"\",\n        }, # table\n        \"ctrl3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl3ChIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChDeciAmpsPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.14.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"ctrlGrpAmpsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Control Group Amp readings\"\"\",\n        }, # table\n        \"ctrlGrpAmpsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlGrpAmpsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the Control Group Amps table: each entry contains\nan index (ctrlGrpAmpsIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlGrpAmpsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrlGrpAmpsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrlGrpAmpsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrlGrpAmpsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrlGrpAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group A\"\"\",\n        }, # column\n        \"ctrlGrpAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group B\"\"\",\n        }, # column\n        \"ctrlGrpAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group D\"\"\",\n        }, # column\n        \"ctrlGrpAmpsE\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group E\"\"\",\n        }, # column\n        \"ctrlGrpAmpsF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group F\"\"\",\n        }, # column\n        \"ctrlGrpAmpsG\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group G\"\"\",\n        }, # column\n        \"ctrlGrpAmpsH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group H\"\"\",\n        }, # column\n        \"ctrlGrpAmpsAVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group A\"\"\",\n        }, # column\n        \"ctrlGrpAmpsBVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group B\"\"\",\n        }, # column\n        \"ctrlGrpAmpsCVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsDVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group D\"\"\",\n        }, # column\n        \"ctrlGrpAmpsEVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group E\"\"\",\n        }, # column\n        \"ctrlGrpAmpsFVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group F\"\"\",\n        }, # column\n        \"ctrlGrpAmpsGVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group G\"\"\",\n        }, # column\n        \"ctrlGrpAmpsHVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group H\"\"\",\n        }, # column\n        \"ctrlGrpAmpsI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group I\"\"\",\n        }, # column\n        \"ctrlGrpAmpsJ\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group J\"\"\",\n        }, # column\n        \"ctrlGrpAmpsK\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group K\"\"\",\n        }, # column\n        \"ctrlGrpAmpsL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group L\"\"\",\n        }, # column\n        \"ctrlGrpAmpsM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group M\"\"\",\n        }, # column\n        \"ctrlGrpAmpsN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group N\"\"\",\n        }, # column\n        \"ctrlGrpAmpsO\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group O\"\"\",\n        }, # column\n        \"ctrlGrpAmpsP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"DeciAmps Group P\"\"\",\n        }, # column\n        \"ctrlGrpAmpsIVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group I\"\"\",\n        }, # column\n        \"ctrlGrpAmpsJVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group J\"\"\",\n        }, # column\n        \"ctrlGrpAmpsKVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group K\"\"\",\n        }, # column\n        \"ctrlGrpAmpsLVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group L\"\"\",\n        }, # column\n        \"ctrlGrpAmpsMVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group M\"\"\",\n        }, # column\n        \"ctrlGrpAmpsNVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group N\"\"\",\n        }, # column\n        \"ctrlGrpAmpsOVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group O\"\"\",\n        }, # column\n        \"ctrlGrpAmpsPVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.15.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Volts Group P\"\"\",\n        }, # column\n        \"ctrlOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlet information\"\"\",\n        }, # table\n        \"ctrlOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the control outlet table: each entry contains\nan index (ctrlOutletIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Outlet Number\"\"\",\n        }, # column\n        \"ctrlOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet Friendly Name\"\"\",\n        }, # column\n        \"ctrlOutletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Current Outlet Status: 0 = Off, 1 = On | Outlet Action Write: 0 = Cancel Pending, 1 = On, 2 = On Delayed, 3 = Off Immediate, 4 = Off Delayed, 5 = Reboot, 6 = Reboot Delayed, 7 = Clear kWh (POA units only)\"\"\",\n        }, # column\n        \"ctrlOutletFeedback\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Feedback Value, should be equal to status\"\"\",\n        }, # column\n        \"ctrlOutletPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet Status Read to change to: 0 = Off, 1 = On | Outlet Action Write: 0 = Cancel Pending, 1 = On, 2 = On Delayed, 3 = Off Immediate, 4 = Off Delayed, 5 = Reboot, 6 = Reboot Delayed, 7 = Clear kWh (POA units only)\"\"\",\n        }, # column\n        \"ctrlOutletDeciAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Outlet DeciAmps reading\"\"\",\n        }, # column\n        \"ctrlOutletGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Group (A to G)\"\"\",\n        }, # column\n        \"ctrlOutletUpDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Power Up Delay\"\"\",\n        }, # column\n        \"ctrlOutletDwnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Power Down Delay\"\"\",\n        }, # column\n        \"ctrlOutletRbtDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Reboot Duration\"\"\",\n        }, # column\n        \"ctrlOutletURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Outlet URL\"\"\",\n        }, # column\n        \"ctrlOutletPOAAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"POA Action: 1 = Off, 2 = On, 3 = Last, 0 = POA not supported on this unit type\"\"\",\n        }, # column\n        \"ctrlOutletPOADelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"POA Delay\"\"\",\n        }, # column\n        \"ctrlOutletkWattHrs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours\"\"\",\n        }, # column\n        \"ctrlOutletPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Power\"\"\",\n        }, # column\n        \"ctrlOutletRbtDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Outlet Reboot Delay\"\"\",\n        }, # column\n        \"ctrlOutletStatusTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.16.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Seconds Since Outlet Last Changed Its Status\"\"\",\n        }, # column\n        \"dewPointSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of dew point sensors\"\"\",\n        }, # table\n        \"dewPointSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dewPointSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the dew point sensor table: each entry contains\nan index (dewPointSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"dewPointSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dewPointSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dewPointSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dewPointSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dewPointSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"dewPointSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"dewPointSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"dewPointSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Dew point reading in C\"\"\",\n        }, # column\n        \"dewPointSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.17.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Dew point reading in F\"\"\",\n        }, # column\n        \"digitalSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of digital sensors\"\"\",\n        }, # table\n        \"digitalSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"digitalSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the digital sensor table: each entry contains\nan index (digitalSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"digitalSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"digitalSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"digitalSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"digitalSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"digitalSensorDigital\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.18.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Digital sensor status\"\"\",\n        }, # column\n        \"dstsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Digital Static Transfer Switch status\"\"\",\n        }, # table\n        \"dstsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dstsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the DSTS table: each entry contains\nan index (dstsIndex) and other details\"\"\",\n        }, # row\n        \"dstsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dstsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dstsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dstsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dstsVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side A\"\"\",\n        }, # column\n        \"dstsDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RMS Current of Side A in deciamps\"\"\",\n        }, # column\n        \"dstsVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side B\"\"\",\n        }, # column\n        \"dstsDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RMS Current of Side B in deciamps\"\"\",\n        }, # column\n        \"dstsSourceAActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source A active\"\"\",\n        }, # column\n        \"dstsSourceBActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source B active\"\"\",\n        }, # column\n        \"dstsPowerStatusA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of source A\"\"\",\n        }, # column\n        \"dstsPowerStatusB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of Source B\"\"\",\n        }, # column\n        \"dstsSourceATempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Source A temp in C\"\"\",\n        }, # column\n        \"dstsSourceBTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.19.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Source B temp in C\"\"\",\n        }, # column\n        \"cpmSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of city power sensors\"\"\",\n        }, # table\n        \"cpmSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the city power sensor table: each entry contains\nan index (cpmSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"cpmSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"cpmSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"cpmSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"cpmSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"cpmSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.20.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"City Power sensor status\"\"\",\n        }, # column\n        \"smokeAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of smoke alarm sensors\"\"\",\n        }, # table\n        \"smokeAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"smokeAlarmIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the smoke alarm sensor table: each entry contains\nan index (smokeAlarmIndex) and other sensor details\"\"\",\n        }, # row\n        \"smokeAlarmIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"smokeAlarmSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"smokeAlarmName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"smokeAlarmAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"smokeAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Smoke alarm status\"\"\",\n        }, # column\n        \"neg48VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of -48Vdc sensors\"\"\",\n        }, # table\n        \"neg48VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"neg48VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the -48Vdc sensor table: each entry contains\nan index (neg48VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"neg48VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"neg48VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"neg48VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"neg48VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"neg48VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"-48Vdc Sensor value\"\"\",\n        }, # column\n        \"pos30VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of 30Vdc sensors\"\"\",\n        }, # table\n        \"pos30VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pos30VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 30Vdc sensor table: each entry contains\nan index (pos30VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"pos30VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pos30VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pos30VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pos30VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pos30VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"30Vdc Sensor value\"\"\",\n        }, # column\n        \"analogSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of analog sensors\"\"\",\n        }, # table\n        \"analogSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"analogSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the analog input table: each entry contains\nan index (analogSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"analogSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"analogSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"analogSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"analogSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"analogSensorAnalog\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Analog Sensor Value\"\"\",\n        }, # column\n        \"ctrl3ChIECTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (IEC)\"\"\",\n        }, # table\n        \"ctrl3ChIECEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChIECIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl3ChIECIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChIECIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChIECSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChIECName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChIECAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECVoltPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECDeciAmpsPeakC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECApparentPowerC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECPowerFactorC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase C)\"\"\",\n        }, # column\n        \"ctrl3ChIECkWattHrsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl3ChIECRealPowerTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.25.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Watts (Total)\"\"\",\n        }, # column\n        \"climateRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Climate Relay sensors (internal sensors for climate relay units)\"\"\",\n        }, # table\n        \"climateRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"climateRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the climate table: each entry contains\nan index (climateRelayIndex) and other details\"\"\",\n        }, # row\n        \"climateRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"climateRelaySerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"climateRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"climateRelayAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"climateRelayTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (C)\"\"\",\n        }, # column\n        \"climateRelayTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (F)\"\"\",\n        }, # column\n        \"climateRelayIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"climateRelayIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"climateRelayIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"climateRelayIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"climateRelayIO5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 5\"\"\",\n        }, # column\n        \"climateRelayIO6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.26.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 6\"\"\",\n        }, # column\n        \"ctrlRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of relay information\"\"\",\n        }, # table\n        \"ctrlRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the control relay table: each entry contains\nan index (ctrlRelayIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Relay Number\"\"\",\n        }, # column\n        \"ctrlRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Friendly Name\"\"\",\n        }, # column\n        \"ctrlRelayState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Relay Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ctrlRelayLatchingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ctrlRelayOverride\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ctrlRelayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.27.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of air speed switch sensors\"\"\",\n        }, # table\n        \"airSpeedSwitchSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airSpeedSwitchSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the air speed switch sensor table: each entry contains\nan index (airSpeedSwitchIndex) and other sensor details\"\"\",\n        }, # row\n        \"airSpeedSwitchSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airSpeedSwitchSensorAirSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.28.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air Speed Switch Status\"\"\",\n        }, # column\n        \"powerDMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of DM48 current monitors\"\"\",\n        }, # table\n        \"powerDMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerDMIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the DM48 current monitor table: each entry contains\nan index (powerDMIndex) and other sensor details\"\"\",\n        }, # row\n        \"powerDMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powerDMSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powerDMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powerDMAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powerDMUnitInfoTitle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of Unit\"\"\",\n        }, # column\n        \"powerDMUnitInfoVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit Version Number\"\"\",\n        }, # column\n        \"powerDMUnitInfoMainCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Main (Total Amps) Channels on the Unit\"\"\",\n        }, # column\n        \"powerDMUnitInfoAuxCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Auxiliary (Outlet) Channels on the Unit\"\"\",\n        }, # column\n        \"powerDMChannelName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelName48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Factory Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.82\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.84\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.85\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.86\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.87\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.88\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.89\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.90\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.91\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.92\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.93\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.94\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.97\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelFriendly48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Friendly Name\"\"\",\n        }, # column\n        \"powerDMChannelGroup1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.109\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 5 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.110\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 6 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.111\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 7 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.112\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 8 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.113\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 9 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.114\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 10 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.115\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 11 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.116\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 12 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.117\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 13 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.118\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 14 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.119\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 15 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.120\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 16 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.121\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 17 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.122\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 18 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.123\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 19 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.124\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 20 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.125\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 21 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.126\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 22 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.127\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 23 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.128\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 24 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.129\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 25 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.130\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 26 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.131\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 27 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.132\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 28 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.133\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 29 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.134\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 30 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.135\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 31 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.136\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 32 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.137\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 33 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.138\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 34 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.139\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 35 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.140\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 36 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.141\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 37 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.142\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 38 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.143\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 39 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.144\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 40 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.145\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 41 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.146\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 42 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.147\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 43 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.148\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 44 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.149\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 45 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.150\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 46 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.151\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 47 Group\"\"\",\n        }, # column\n        \"powerDMChannelGroup48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.152\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 48 Group\"\"\",\n        }, # column\n        \"powerDMDeciAmps1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.153\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.154\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.155\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.156\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.157\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.158\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.159\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.160\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.161\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.162\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.163\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.164\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.165\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.166\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.167\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.168\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.169\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.170\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.171\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.172\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.173\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.174\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.175\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.176\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.177\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.178\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.179\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.180\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.181\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.182\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.183\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.184\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps33\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.185\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps34\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.186\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps35\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.187\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps36\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.188\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps37\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.189\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps38\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.190\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps39\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.191\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps40\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.192\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps41\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.193\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps42\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.194\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps43\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.195\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps44\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.196\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps45\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.197\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps46\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.198\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps47\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.199\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"powerDMDeciAmps48\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.29.1.200\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1209\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps\",\n            \"description\" :\n                \"\"\"Current in deciamps\"\"\",\n        }, # column\n        \"ioExpanderTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"IO Expander device with relay capability\"\"\",\n        }, # table\n        \"ioExpanderEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ioExpanderIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the IO Expander table: each entry contains\nan index (ioExpanderIndex) and other details\"\"\",\n        }, # row\n        \"ioExpanderIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ioExpanderSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ioExpanderName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 1 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 2 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 3 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 4 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 5 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 6 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 7 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 8 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 9 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 10 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 11 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 12 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 13 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 14 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 15 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 16 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 17 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 18 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 19 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 20 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 21 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 22 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 23 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 24 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 25 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 26 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 27 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 28 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 29 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 30 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 31 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderFriendlyName32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IO 32 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"ioExpanderIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"ioExpanderIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"ioExpanderIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"ioExpanderIO5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 5\"\"\",\n        }, # column\n        \"ioExpanderIO6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 6\"\"\",\n        }, # column\n        \"ioExpanderIO7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 7\"\"\",\n        }, # column\n        \"ioExpanderIO8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 8\"\"\",\n        }, # column\n        \"ioExpanderIO9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 9\"\"\",\n        }, # column\n        \"ioExpanderIO10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 10\"\"\",\n        }, # column\n        \"ioExpanderIO11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 11\"\"\",\n        }, # column\n        \"ioExpanderIO12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 12\"\"\",\n        }, # column\n        \"ioExpanderIO13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 13\"\"\",\n        }, # column\n        \"ioExpanderIO14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 14\"\"\",\n        }, # column\n        \"ioExpanderIO15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 15\"\"\",\n        }, # column\n        \"ioExpanderIO16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 16\"\"\",\n        }, # column\n        \"ioExpanderIO17\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 17\"\"\",\n        }, # column\n        \"ioExpanderIO18\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 18\"\"\",\n        }, # column\n        \"ioExpanderIO19\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 19\"\"\",\n        }, # column\n        \"ioExpanderIO20\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 20\"\"\",\n        }, # column\n        \"ioExpanderIO21\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 21\"\"\",\n        }, # column\n        \"ioExpanderIO22\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 22\"\"\",\n        }, # column\n        \"ioExpanderIO23\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 23\"\"\",\n        }, # column\n        \"ioExpanderIO24\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 24\"\"\",\n        }, # column\n        \"ioExpanderIO25\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 25\"\"\",\n        }, # column\n        \"ioExpanderIO26\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 26\"\"\",\n        }, # column\n        \"ioExpanderIO27\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 27\"\"\",\n        }, # column\n        \"ioExpanderIO28\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 28\"\"\",\n        }, # column\n        \"ioExpanderIO29\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 29\"\"\",\n        }, # column\n        \"ioExpanderIO30\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 30\"\"\",\n        }, # column\n        \"ioExpanderIO31\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 31\"\"\",\n        }, # column\n        \"ioExpanderIO32\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 32\"\"\",\n        }, # column\n        \"ioExpanderRelayName1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay1 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay1 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"ioExpanderRelayName2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay2 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay2 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"ioExpanderRelayName3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Friendly Name\"\"\",\n        }, # column\n        \"ioExpanderRelayState3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relay3 Current Status: 0 = Off, 1 = On\"\"\",\n        }, # column\n        \"ioExpanderRelayLatchingMode3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Latching mode: 0 = Non-latching, 1 = Latching\"\"\",\n        }, # column\n        \"ioExpanderRelayOverride3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.82\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Override Mode: 0 - None, 1 - On, 2 - Off\"\"\",\n        }, # column\n        \"ioExpanderRelayAcknowledge3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.30.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay3 Acknowledge write a 1, always reads back 0\"\"\",\n        }, # column\n        \"t3hdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of T3HD sensors\"\"\",\n        }, # table\n        \"t3hdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"t3hdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the T3HD sensor table: each entry contains\nan index (t3hdIndex) and other sensor details\"\"\",\n        }, # row\n        \"t3hdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"t3hdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"t3hdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"t3hdSensorIntName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Internal Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorIntTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Internal Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorIntTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Internal Temperature reading in F\"\"\",\n        }, # column\n        \"t3hdSensorIntHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Internal Humidity reading\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Internal Dew Point reading in C\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Internal Dew Point reading in F\"\"\",\n        }, # column\n        \"t3hdSensorExt1Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 1 status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExt1Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 1 Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExt1TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"External 1 Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorExt1TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"External 1 Temperature reading in F\"\"\",\n        }, # column\n        \"t3hdSensorExt2Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 2 status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExt2Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"External 2 Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExt2TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"External 2 Temperature reading in C\"\"\",\n        }, # column\n        \"t3hdSensorExt2TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.31.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"External 2 Temperature reading in F\"\"\",\n        }, # column\n        \"thdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of THD sensors\"\"\",\n        }, # table\n        \"thdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"thdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the THD sensor table: each entry contains\nan index (thdIndex) and other sensor details\"\"\",\n        }, # row\n        \"thdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"thdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"thdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"thdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"thdSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"thdSensorTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Temperature reading in F\"\"\",\n        }, # column\n        \"thdSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"thdSensorDewPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Dew Point reading in C\"\"\",\n        }, # column\n        \"thdSensorDewPointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-58\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degress Fahrenheit\",\n            \"description\" :\n                \"\"\"Dew Point reading in F\"\"\",\n        }, # column\n        \"pos60VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of 60Vdc sensors\"\"\",\n        }, # table\n        \"pos60VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pos60VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 60Vdc sensor table: each entry contains\nan index (pos60VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"pos60VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pos60VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pos60VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pos60VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pos60VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.33.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"60Vdc Sensor value\"\"\",\n        }, # column\n        \"ctrl2CirTotTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control (IEC)\"\"\",\n        }, # table\n        \"ctrl2CirTotEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl2CirTotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl2CirTotIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl2CirTotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl2CirTotSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl2CirTotName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl2CirTotAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorTot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Total)\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase A)\"\"\",\n        }, # column\n        \"ctrl2CirTotkWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"Current Reading for kWatt-Hours (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotVoltPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-Volts (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotDeciAmpsPeakB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"Current reading for Peak-DeciAmps (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotRealPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Current reading for Real Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotApparentPowerB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"Current reading for Apparent Power (Phase B)\"\"\",\n        }, # column\n        \"ctrl2CirTotPowerFactorB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.34.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current reading for Power Factor (Phase B)\"\"\",\n        }, # column\n        \"sc10Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"SC10 sensors (internal measurements for SC10 units)\"\"\",\n        }, # table\n        \"sc10Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sc10Index\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the sc10 table: each entry contains\nan index (sc10Index) and other details\"\"\",\n        }, # row\n        \"sc10Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"sc10Serial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"sc10Name\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"sc10Avail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"sc10ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"setpoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"capacity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Control Mode setting indicator\"\"\",\n        }, # column\n        \"sc10SetpointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current temperature set point in C\"\"\",\n        }, # column\n        \"sc10SetpointF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current temperature set point in F\"\"\",\n        }, # column\n        \"sc10TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Celsius\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in C\"\"\",\n        }, # column\n        \"sc10TempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"32\",\n                        \"max\" : \"212\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Degrees Fahrenheit\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in F\"\"\",\n        }, # column\n        \"sc10Capacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.35.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Current capacity for Fan Speed\"\"\",\n        }, # column\n        \"alarmSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101\",\n        }, # node\n        \"alarmCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Provides access for alarm configuration. Each row represents an alarm.\"\"\",\n        }, # table\n        \"alarmCfgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"alarmCfgIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the alarm cfg table: each entry contains\nan index (alarmCfgIndex) and other details\"\"\",\n        }, # row\n        \"alarmCfgIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value. Provides unique ID for\nalarm, numbered from 1 to 200\"\"\",\n        }, # column\n        \"alarmCfgReadingID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"OID of a particular measurement to monitor. This object\nis also used to create or delete a row. To create a new\nrow, set the Sensor ID on a row that doesn't exist. Set\nthe ReadingID to 0.0 to destroy a row.\"\"\",\n        }, # column\n        \"alarmCfgThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"Tenths\",\n            \"description\" :\n                \"\"\"Depending on TripSelect this value acts as an upper or\nlower boundary for the sensor value. The value is in\nunits of tenths.\nSNMP Threshold = Actual Value * 10\nExample: 45 Threshold = 4.5 Amps\"\"\",\n        }, # column\n        \"alarmCfgTripSelect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.101.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tripBelow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"tripAbove\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tells if alarm trips above or below the threshold value\"\"\",\n        }, # column\n        \"cmTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767\",\n        }, # node\n        \"cmTrapPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"cmTestNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Test SNMP Trap\"\"\",\n        }, # notification\n        \"cmClimateTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateLightNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateAirflowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateSoundNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10213\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10214\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10215\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmPowMonkWattHrsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMaxNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMinNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltPeakNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Trap\"\"\",\n        }, # notification\n        \"cmPowMonDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmPowMonRealPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Trap\"\"\",\n        }, # notification\n        \"cmPowMonApparentPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Trap\"\"\",\n        }, # notification\n        \"cmPowMonPowerFactorNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1StatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2StatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorFlowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity\"\"\",\n        }, # notification\n        \"cmAirFlowSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts AB Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak AB Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power AB Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps AB Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorABNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor AB Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10618\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10619\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10620\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10621\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorBCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10622\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor BC Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10623\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours CA Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10624\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts CA Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10625\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak CA Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10626\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power CA Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10627\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps CA Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorCANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10628\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor CA Trap\"\"\",\n        }, # notification\n        \"cmDoorSensorStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Trap\"\"\",\n        }, # notification\n        \"cmWaterSensorDampnessNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Trap\"\"\",\n        }, # notification\n        \"cmCurrentMonitorDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.10905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmMillivoltMonitorMVNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Trap\"\"\",\n        }, # notification\n        \"cmOutlet1StatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Trap\"\"\",\n        }, # notification\n        \"cmOutlet2StatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Trap\"\"\",\n        }, # notification\n        \"cmVsfcSetPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcSetPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcFanSpeedNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcIntTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcIntTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsENOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsGNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsG\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group G DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsHNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsH\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group H DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsAVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsAVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"AVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsBVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"BVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsCVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"CVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsDVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsEVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsEVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"EVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsFVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"FVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsGVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsGVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"GVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsHVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsHVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"HVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsINOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group I DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsJNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJ\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group J DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsKNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsK\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group K DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsLNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group L DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsMNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsM\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group M DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsNNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsN\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group N DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsONOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsO\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group O DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsPNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group P DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsIVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsIVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"IVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsJVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"JVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsKVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11531\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsKVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"KVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsLVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11532\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsLVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"LVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsMVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11533\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsMVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"MVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsNVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11534\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsNVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"NVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsOVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11535\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsOVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"OVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsPVoltsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11536\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsPVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"PVolts Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPendingNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPending\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Pending Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletDeciAmpsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet DeciAmps Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletGroupNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletGroup\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletUpDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletUpDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"UpDelay Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletDwnDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDwnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DwnDelay Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletRbtDurationNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDuration Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletURLNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"URL Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPOAActionNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOAAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POAAction Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPOADelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOADelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POADelay Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletkWattHrsNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"kWattHrs Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletRbtDelayNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDelay Trip Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletStatusTimeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletStatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"StatusTime Trip Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11708\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11709\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"cmDigitalSensorDigitalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceAActiveNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceBActiveNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceATempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceBTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.11914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmCpmSensorStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Trap\"\"\",\n        }, # notification\n        \"cmSmokeAlarmStatusNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Trap\"\"\",\n        }, # notification\n        \"cmNeg48VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"cmPos30VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"cmAnalogSensorAnalogNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerTotalNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Trap\"\"\",\n        }, # notification\n        \"cmAirSpeedSwitchSensorAirSpeedNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.12805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airSpeedSwitchSensorAirSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airSpeedSwitchSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Air Speed Switch Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13037\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13038\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13039\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13040\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13041\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13042\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO7NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13043\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO7 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO8NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13044\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO8 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO9NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13045\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO9 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO10NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13046\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO10 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO11NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13047\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO11 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO12NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13048\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO12 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO13NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13049\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO13 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO14NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13050\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO14 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO15NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13051\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO15 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO16NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13052\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO16 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO17NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13053\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO17 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO18NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13054\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO18 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO19NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13055\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO19 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO20NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13056\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO20 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO21NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13057\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO21 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO22NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13058\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO22 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO23NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13059\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO23 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO24NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13060\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO24 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO25NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13061\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO25 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO26NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13062\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO26 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO27NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13063\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO27 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO28NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13064\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO28 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO29NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13065\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO29 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO30NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13066\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO30 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO31NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13067\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO31 Sensor Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO32NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13068\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO32 Sensor Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature C Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature F Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Humidity Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point C Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point F Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt1TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature C Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt1TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature F Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt2TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature C Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt2TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature F Trap\"\"\",\n        }, # notification\n        \"cmThdSensorTempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature C Trap\"\"\",\n        }, # notification\n        \"cmThdSensorTempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature F Trap\"\"\",\n        }, # notification\n        \"cmThdSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Humidity Trap\"\"\",\n        }, # notification\n        \"cmThdSensorDewPointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point C Trap\"\"\",\n        }, # notification\n        \"cmThdSensorDewPointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point F Trap\"\"\",\n        }, # notification\n        \"cmPos60VdcSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos60VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pos60VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"60Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorTotNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Total Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorANOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13426\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13427\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorBNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13428\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmSc10ControlModeNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10ControlMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Control Mode Sensor Trap\"\"\",\n        }, # notification\n        \"cmSc10SetpointCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmSc10SetpointFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmSc10TempCNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmSc10TempFNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmSc10CapacityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.13510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10Capacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Fan Speed Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateLightCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateAirflowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateSoundCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20213\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20214\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20215\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonkWattHrsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMaxCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMinCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltPeakCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonRealPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonApparentPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonPowerFactorCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1StatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet1StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2StatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2StatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet2StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorFlowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTADeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTADeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts AB Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak AB Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power AB Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps AB Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorABCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorAB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor AB Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20618\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20619\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20620\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20621\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorBCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20622\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorBC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor BC Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAkWattHrsCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20623\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAkWattHrsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours CA Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltsCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20624\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltsCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts CA Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAVoltPeakCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20625\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAVoltPeakCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak CA Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTARealPowerCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20626\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTARealPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power CA Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAApparentPowerCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20627\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAApparentPowerCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"VoltAmps CA Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDELTAPowerFactorCACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20628\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDELTAPowerFactorCA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChDELTAName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor CA Clear Trap\"\"\",\n        }, # notification\n        \"cmDoorSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmWaterSensorDampnessCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmCurrentMonitorDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.20905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmMillivoltMonitorMVCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Clear Trap\"\"\",\n        }, # notification\n        \"cmOutlet1StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Clear Trap\"\"\",\n        }, # notification\n        \"cmOutlet2StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Clear Trap\"\"\",\n        }, # notification\n        \"cmVsfcSetPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcSetPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcFanSpeedCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcIntTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcIntTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChDeciAmpsPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsECLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsGCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsG\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group G DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsHCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsH\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group H DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsAVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsAVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"AVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsBVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"BVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsCVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"CVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsDVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsEVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsEVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"EVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsFVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"FVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsGVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsGVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"GVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsHVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsHVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"HVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsICLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsI\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group I DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsJCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJ\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group J DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsKCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsK\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group K DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsLCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group L DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsMCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsM\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group M DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsNCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsN\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group N DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsOCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsO\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group O DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsPCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group P DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsIVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsIVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"IVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsJVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsJVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"JVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsKVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21531\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsKVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"KVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsLVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21532\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsLVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"LVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsMVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21533\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsMVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"MVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsNVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21534\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsNVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"NVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsOVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21535\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsOVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"OVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsPVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21536\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsPVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"PVolts Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPendingCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPending\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Pending Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletDeciAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDeciAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet DeciAmps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletGroupCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletGroup\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletUpDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletUpDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"UpDelay Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletDwnDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletDwnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DwnDelay Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletRbtDurationCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDuration Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletURLCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"URL Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPOAActionCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOAAction\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POAAction Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPOADelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPOADelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"POADelay Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletkWattHrsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletkWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"kWattHrs Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletRbtDelayCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletRbtDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RbtDelay Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlOutletStatusTimeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlOutletStatusTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrlOutletStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"StatusTime Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21708\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21709\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"cmDigitalSensorDigitalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceAActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceBActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceATempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceBTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.21914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmCpmSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmSmokeAlarmStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Clear Trap\"\"\",\n        }, # notification\n        \"cmNeg48VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmPos30VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmAnalogSensorAnalogCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECVoltPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECVoltPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECDeciAmpsPeakCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECDeciAmpsPeakC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECApparentPowerCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECApparentPowerC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECPowerFactorCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECPowerFactorC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECkWattHrsTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECkWattHrsTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChIECRealPowerTotalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChIECRealPowerTotal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl3ChIECName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Watts Total Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateRelayIO6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateRelayIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"climateRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmAirSpeedSwitchSensorAirSpeedCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.22805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airSpeedSwitchSensorAirSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"airSpeedSwitchSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Air Speed Switch Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23037\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23038\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23039\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23040\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO4 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23041\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO5 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23042\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO6 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO7CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23043\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO7 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO8CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23044\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO8 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO9CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23045\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO9 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO10CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23046\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO10 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO11CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23047\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO11 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO12CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23048\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO12 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO13CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23049\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO13 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO14CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23050\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO14 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO15CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23051\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO15 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO16CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23052\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO16 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO17CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23053\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO17 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO18CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23054\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO18 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO19CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23055\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO19 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO20CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23056\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO20 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO21CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23057\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO21 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO22CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23058\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO22 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO23CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23059\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO23 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO24CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23060\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO24 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO25CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23061\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO25 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO26CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23062\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO26 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO27CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23063\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO27 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO28CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23064\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO28 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO29CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23065\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO29 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO30CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23066\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO30 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO31CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23067\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO31 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmIoExpanderIO32CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23068\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ioExpanderIO32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ioExpanderName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Relay IO32 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point C Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorIntDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - Internal Dew Point F Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt1TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt1TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt1TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 1 Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt2TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"cmT3hdSensorExt2TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExt2TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"t3hdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD - External 2 Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"cmThdSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature C Clear Trap\"\"\",\n        }, # notification\n        \"cmThdSensorTempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Temperature F Clear Trap\"\"\",\n        }, # notification\n        \"cmThdSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmThdSensorDewPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point C Clear Trap\"\"\",\n        }, # notification\n        \"cmThdSensorDewPointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"thdSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD - Dew Point F Clear Trap\"\"\",\n        }, # notification\n        \"cmPos60VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos60VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"pos60VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"60Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorTotCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorTot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Total Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotkWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotkWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotVoltPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotVoltPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotDeciAmpsPeakBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotDeciAmpsPeakB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Deciamps Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotRealPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23426\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotRealPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotApparentPowerBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23427\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotApparentPowerB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrl2CirTotPowerFactorBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23428\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl2CirTotPowerFactorB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"ctrl2CirTotName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"cmSc10ControlModeCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10ControlMode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Control Mode Sensor Clear\"\"\",\n        }, # notification\n        \"cmSc10SetpointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmSc10SetpointFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10SetpointF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmSc10TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmSc10TempFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10TempF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"temperaturePrecision\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmSc10CapacityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.23510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sc10Capacity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"sc10Name\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"SC10 Fan Speed Sensor Clear\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps5NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps6NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps7NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps8NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps9NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps10NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps11NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps12NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps13NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps14NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps15NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps16NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps17NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129169\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps18NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129170\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps19NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps20NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps21NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps22NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps23NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps24NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps25NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps26NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps27NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129179\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps28NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129180\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps29NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps30NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps31NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps32NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps33NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps33\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps34NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps34\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps35NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps35\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps36NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps36\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps37NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129189\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps37\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps38NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129190\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps38\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps39NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129191\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps39\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps40NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129192\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps40\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps41NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129193\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps41\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps42NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129194\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps42\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps43NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129195\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps43\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps44NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129196\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps44\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps45NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129197\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps45\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps46NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129198\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps46\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps47NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129199\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps47\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps48NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.129200\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps48\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps5CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps5\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps6CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps6\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps7CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps7\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps8CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps8\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps9CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps9\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps10CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps11CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps11\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps12CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps12\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps13CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps13\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps14CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps14\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps15CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps15\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps16CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps16\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps17CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139169\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps17\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps18CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139170\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps18\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps19CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps19\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps20CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps20\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps21CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps21\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps22CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps22\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps23CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps23\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps24CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps24\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps25CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps25\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps26CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps26\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps27CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139179\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps27\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps28CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139180\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps28\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps29CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps29\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps30CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps30\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps31CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps31\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps32CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps32\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps33CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps33\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps34CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps34\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps35CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps35\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps36CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps36\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps37CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139189\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps37\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps38CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139190\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps38\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps39CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139191\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps39\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps40CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139192\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps40\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps41CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139193\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps41\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps42CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139194\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps42\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps43CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139195\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps43\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps44CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139196\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps44\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps45CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139197\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps45\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps46CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139198\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps46\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps47CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139199\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps47\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerDMDeciAmps48CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB-V3\",\n            \"oid\" : \"1.3.6.1.4.1.17373.3.32767.0.139200\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerDMDeciAmps48\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"powerDMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmTrigger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n                \"alarmInstance\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB-V3\"\n                },\n            },\n            \"description\" :\n                \"\"\"DM48 Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IT-WATCHDOGS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.5:\n#\n#   smidump -f python IT-WATCHDOGS-MIB\n\nFILENAME = \"itw_mib.mib\"\n\nMIB = {\n    \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n\n    \"IT-WATCHDOGS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"I.T. Watchdogs\"\"\",\n        \"contact\" : \n            \"\"\"support@itwatchdogs.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB for I.T. Watchdogs Products\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2008-01-10 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"itwatchdogs\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"RFC-1215\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"itwatchdogs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373\",\n            \"status\" : \"current\",\n        }, # node\n        \"wxGoos\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2\",\n        }, # node\n        \"deviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1\",\n        }, # node\n        \"productTitle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product name\"\"\",\n        }, # scalar\n        \"productVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product version\"\"\",\n        }, # scalar\n        \"productFriendlyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-assigned name\"\"\",\n        }, # scalar\n        \"productMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's unique MAC address\"\"\",\n        }, # scalar\n        \"productUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's main URL access point\"\"\",\n        }, # scalar\n        \"alarmTripType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of alarm trip. 0 = None, 1 = Low, 2 = High, 3 = Unplugged\"\"\",\n        }, # scalar\n        \"productHardware\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's hardware type\"\"\",\n        }, # scalar\n        \"sensorCountsBase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8\",\n        }, # node\n        \"sensorCounts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1\",\n        }, # node\n        \"climateCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of climate monitors currently plugged in\"\"\",\n        }, # scalar\n        \"powerMonitorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"tempSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of temperature sensors currently plugged in\"\"\",\n        }, # scalar\n        \"airflowSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of airflow sensors currently plugged in\"\"\",\n        }, # scalar\n        \"powerOnlyCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of power only monitors currently plugged in\"\"\",\n        }, # scalar\n        \"doorSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of door sensors currently plugged in\"\"\",\n        }, # scalar\n        \"waterSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of water sensors currently plugged in\"\"\",\n        }, # scalar\n        \"currentSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of current sensors currently plugged in\"\"\",\n        }, # scalar\n        \"millivoltSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of millivolt sensors currently plugged in\"\"\",\n        }, # scalar\n        \"power3ChSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel power monitors currently plugged in\"\"\",\n        }, # scalar\n        \"outletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of outlets currently plugged in\"\"\",\n        }, # scalar\n        \"vsfcCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fan controller monitors currently plugged in\"\"\",\n        }, # scalar\n        \"ctrl3ChCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 3 channel controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlGrpAmpsCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of amperage controllers currently plugged in\"\"\",\n        }, # scalar\n        \"ctrlOutputCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of output controllers currently plugged in\"\"\",\n        }, # scalar\n        \"dewpointSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of dewpoint sensors currently plugged in\"\"\",\n        }, # scalar\n        \"digitalSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of digital sensors currently plugged in\"\"\",\n        }, # scalar\n        \"dstsSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of DSTS controllers currently plugged in\"\"\",\n        }, # scalar\n        \"cpmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of city power sensors currently plugged in\"\"\",\n        }, # scalar\n        \"smokeAlarmSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of smoke alarm sensors currently plugged in\"\"\",\n        }, # scalar\n        \"neg48VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of -48Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"pos30VdcSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of 30Vdc sensors currently plugged in\"\"\",\n        }, # scalar\n        \"analogSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.1.8.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of remote analog inputs currently plugged in\"\"\",\n        }, # scalar\n        \"climateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Climate sensors (internal sensors for climate units)\"\"\",\n        }, # table\n        \"climateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"climateIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the climate table: each entry contains\nan index (climateIndex) and other details\"\"\",\n        }, # row\n        \"climateIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"climateSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"climateName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"climateAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"climateTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Temperature (C)\"\"\",\n        }, # column\n        \"climateHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Humidity\"\"\",\n        }, # column\n        \"climateAirflow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Airflow\"\"\",\n        }, # column\n        \"climateLight\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Ambient Light\"\"\",\n        }, # column\n        \"climateSound\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Sound\"\"\",\n        }, # column\n        \"climateIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"climateIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"climateIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"powerMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitors\"\"\",\n        }, # table\n        \"powerMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powMonIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor table: each entry contains\nan index (powMonIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"powMonIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powMonSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powMonName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powMonAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powMonKWattHrs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"KWatt-Hours\"\"\",\n        }, # column\n        \"powMonVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts\"\"\",\n        }, # column\n        \"powMonVoltMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Max)\"\"\",\n        }, # column\n        \"powMonVoltMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Min)\"\"\",\n        }, # column\n        \"powMonVoltPk\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak)\"\"\",\n        }, # column\n        \"powMonAmpsX10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps x 10\"\"\",\n        }, # column\n        \"powMonRealPow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power\"\"\",\n        }, # column\n        \"powMonAppPow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power\"\"\",\n        }, # column\n        \"powMonPwrFact\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor\"\"\",\n        }, # column\n        \"powMonOutlet1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 1\"\"\",\n        }, # column\n        \"powMonOutlet2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 2\"\"\",\n        }, # column\n        \"tempSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of temperature sensors\"\"\",\n        }, # table\n        \"tempSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tempSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the temperature sensor table: each entry contains\nan index (tempIndex) and other sensor details\"\"\",\n        }, # row\n        \"tempSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"tempSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"tempSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"tempSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"tempSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature in Celsius\"\"\",\n        }, # column\n        \"airFlowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of airflow sensors\"\"\",\n        }, # table\n        \"airFlowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFlowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the air flow sensor table: each entry contains\nan index (airFlowSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"airFlowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airFlowSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airFlowSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airFlowSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airFlowSensorFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air flow reading\"\"\",\n        }, # column\n        \"airFlowSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"airFlowSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"powerOnlyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power-Only devices\"\"\",\n        }, # table\n        \"powerOnlyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power-only device table: each entry contains\nan index (powerIndex) and other power details\"\"\",\n        }, # row\n        \"powerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"powerSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"powerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"powerAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"powerVolts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts\"\"\",\n        }, # column\n        \"powerAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps\"\"\",\n        }, # column\n        \"powerRealPow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power\"\"\",\n        }, # column\n        \"powerAppPow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power\"\"\",\n        }, # column\n        \"powerPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor\"\"\",\n        }, # column\n        \"doorSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of door sensors\"\"\",\n        }, # table\n        \"doorSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"doorSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the door sensor table: each entry contains\nan index (doorSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"doorSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"doorSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"doorSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"doorSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"doorSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Door sensor status\"\"\",\n        }, # column\n        \"waterSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of water sensors\"\"\",\n        }, # table\n        \"waterSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the water sensor table: each entry contains\nan index (waterSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"waterSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"waterSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"waterSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"waterSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"waterSensorDampness\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dampness of the water sensor\"\"\",\n        }, # column\n        \"currentMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of current monitors\"\"\",\n        }, # table\n        \"currentMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"currentMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the current monitor table: each entry contains\nan index (currentMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"currentMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"currentMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"currentMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"currentMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"currentMonitorAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current in amps\"\"\",\n        }, # column\n        \"millivoltMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of millivolt monitors\"\"\",\n        }, # table\n        \"millivoltMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"millivoltMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the millivolt monitor table: each entry contains\nan index (millivoltMonitorIndex) and other sensor details\"\"\",\n        }, # row\n        \"millivoltMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"millivoltMonitorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"millivoltMonitorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"millivoltMonitorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"millivoltMonitorMV\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"millivolts\"\"\",\n        }, # column\n        \"power3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Power Monitor 3 Channel\"\"\",\n        }, # table\n        \"power3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pow3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the power monitor 3 channel table: each entry contains\nan index (pow3ChIndex) and other power monitoring details\"\"\",\n        }, # row\n        \"pow3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pow3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pow3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pow3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pow3ChKWattHrsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"KWatt-Hours A\"\"\",\n        }, # column\n        \"pow3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts A\"\"\",\n        }, # column\n        \"pow3ChVoltMaxA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Max) A\"\"\",\n        }, # column\n        \"pow3ChVoltMinA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Min) A\"\"\",\n        }, # column\n        \"pow3ChVoltPkA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) A\"\"\",\n        }, # column\n        \"pow3ChAmpsX10A\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps x 10 A\"\"\",\n        }, # column\n        \"pow3ChRealPowA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power A\"\"\",\n        }, # column\n        \"pow3ChAppPowA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power A\"\"\",\n        }, # column\n        \"pow3ChPwrFactA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor A\"\"\",\n        }, # column\n        \"pow3ChKWattHrsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"KWatt-Hours B\"\"\",\n        }, # column\n        \"pow3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts B\"\"\",\n        }, # column\n        \"pow3ChVoltMaxB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Max) B\"\"\",\n        }, # column\n        \"pow3ChVoltMinB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Min) B\"\"\",\n        }, # column\n        \"pow3ChVoltPkB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) B\"\"\",\n        }, # column\n        \"pow3ChAmpsX10B\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps x 10 B\"\"\",\n        }, # column\n        \"pow3ChRealPowB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power B\"\"\",\n        }, # column\n        \"pow3ChAppPowB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power B\"\"\",\n        }, # column\n        \"pow3ChPwrFactB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor B\"\"\",\n        }, # column\n        \"pow3ChKWattHrsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"KWatt-Hours C\"\"\",\n        }, # column\n        \"pow3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts C\"\"\",\n        }, # column\n        \"pow3ChVoltMaxC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Max) C\"\"\",\n        }, # column\n        \"pow3ChVoltMinC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Min) C\"\"\",\n        }, # column\n        \"pow3ChVoltPkC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) C\"\"\",\n        }, # column\n        \"pow3ChAmpsX10C\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps x 10 C\"\"\",\n        }, # column\n        \"pow3ChRealPowC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power C\"\"\",\n        }, # column\n        \"pow3ChAppPowC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power C\"\"\",\n        }, # column\n        \"pow3ChPwrFactC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.11.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor C\"\"\",\n        }, # column\n        \"outletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlets\"\"\",\n        }, # table\n        \"outletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the outlet table: each entry contains\nan index (outletIndex) and other sensor details\"\"\",\n        }, # row\n        \"outletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"outletSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"outletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"outletAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"outlet1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 1 status\"\"\",\n        }, # column\n        \"outlet2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet 2 status\"\"\",\n        }, # column\n        \"vsfcTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"VSFC sensors (internal sensors for VSFC units)\"\"\",\n        }, # table\n        \"vsfcEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vsfcIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the vsfc table: each entry contains\nan index (vsfcIndex) and other details\"\"\",\n        }, # row\n        \"vsfcIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"vsfcSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"vsfcName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"vsfcAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"vsfcSetPointC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"18\",\n                        \"max\" : \"38\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current temperature set point in C\"\"\",\n        }, # column\n        \"vsfcIntTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current internal temperature reading in C\"\"\",\n        }, # column\n        \"vsfcExt1TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for external temp 1 in C\"\"\",\n        }, # column\n        \"vsfcExt2TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for external temp 2 in C\"\"\",\n        }, # column\n        \"vsfcExt3TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for external temp 3 in C\"\"\",\n        }, # column\n        \"vsfcExt4TempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for external temp 4 in C\"\"\",\n        }, # column\n        \"vsfcFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.13.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Fan Speed\"\"\",\n        }, # column\n        \"ctrl3ChTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of a 3 phase outlet control\"\"\",\n        }, # table\n        \"ctrl3ChEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrl3ChIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 3 phase outlet control table: each entry contains\nan index (ctrl3ChIndex) and other outlet control monitoring details\"\"\",\n        }, # row\n        \"ctrl3ChIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrl3ChSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrl3ChName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrl3ChAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrl3ChVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts A\"\"\",\n        }, # column\n        \"ctrl3ChVoltPkA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) A\"\"\",\n        }, # column\n        \"ctrl3ChAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps A\"\"\",\n        }, # column\n        \"ctrl3ChAmpPkA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Peak A\"\"\",\n        }, # column\n        \"ctrl3ChRealPowA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power A\"\"\",\n        }, # column\n        \"ctrl3ChAppPowA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power A\"\"\",\n        }, # column\n        \"ctrl3ChPwrFactA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor A\"\"\",\n        }, # column\n        \"ctrl3ChVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts B\"\"\",\n        }, # column\n        \"ctrl3ChVoltPkB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) B\"\"\",\n        }, # column\n        \"ctrl3ChAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps B\"\"\",\n        }, # column\n        \"ctrl3ChAmpPkB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Peak B\"\"\",\n        }, # column\n        \"ctrl3ChRealPowB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power B\"\"\",\n        }, # column\n        \"ctrl3ChAppPowB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power B\"\"\",\n        }, # column\n        \"ctrl3ChPwrFactB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor B\"\"\",\n        }, # column\n        \"ctrl3ChVoltsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts C\"\"\",\n        }, # column\n        \"ctrl3ChVoltPkC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Volts (Peak) C\"\"\",\n        }, # column\n        \"ctrl3ChAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps C\"\"\",\n        }, # column\n        \"ctrl3ChAmpPkC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Peak C\"\"\",\n        }, # column\n        \"ctrl3ChRealPowC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Real Power C\"\"\",\n        }, # column\n        \"ctrl3ChAppPowC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Apparent Power C\"\"\",\n        }, # column\n        \"ctrl3ChPwrFactC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.14.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Factor C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Control Group Amp readings\"\"\",\n        }, # table\n        \"ctrlGrpAmpsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlGrpAmpsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the Control Group Amps table: each entry contains\nan index (ctrlGrpAmpsIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlGrpAmpsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ctrlGrpAmpsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ctrlGrpAmpsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ctrlGrpAmpsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ctrlGrpAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group A\"\"\",\n        }, # column\n        \"ctrlGrpAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group B\"\"\",\n        }, # column\n        \"ctrlGrpAmpsC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group C\"\"\",\n        }, # column\n        \"ctrlGrpAmpsD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group D\"\"\",\n        }, # column\n        \"ctrlGrpAmpsE\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group E\"\"\",\n        }, # column\n        \"ctrlGrpAmpsF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Amps Group F\"\"\",\n        }, # column\n        \"ctrlOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of outlet information\"\"\",\n        }, # table\n        \"ctrlOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ctrlOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the control outlet table: each entry contains\nan index (ctrlOutletIndex) and other sensor details\"\"\",\n        }, # row\n        \"ctrlOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Outlet Number\"\"\",\n        }, # column\n        \"ctrlOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Friendly Name\"\"\",\n        }, # column\n        \"ctrlOutletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Outlet Status\"\"\",\n        }, # column\n        \"ctrlOutletFeedback\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Feedback Value, should be equal to status\"\"\",\n        }, # column\n        \"ctrlOutletPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Status to be set to\"\"\",\n        }, # column\n        \"ctrlOutletAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Amps readings\"\"\",\n        }, # column\n        \"ctrlOutletGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Group\"\"\",\n        }, # column\n        \"ctrlOutletUpDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Power Up Delay\"\"\",\n        }, # column\n        \"ctrlOutletDwnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Power Down Delay\"\"\",\n        }, # column\n        \"ctrlOutletRbtDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet Reboot Delay\"\"\",\n        }, # column\n        \"ctrlOutletURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.16.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outlet URL\"\"\",\n        }, # column\n        \"dewPointSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of dew point sensors\"\"\",\n        }, # table\n        \"dewPointSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dewPointSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the dew point sensor table: each entry contains\nan index (dewPointSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"dewPointSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dewPointSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dewPointSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dewPointSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dewPointSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dew point reading in C\"\"\",\n        }, # column\n        \"dewPointSensorTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-50\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature reading in C\"\"\",\n        }, # column\n        \"dewPointSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"digitalSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of digital sensors\"\"\",\n        }, # table\n        \"digitalSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"digitalSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the digital sensor table: each entry contains\nan index (digitalSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"digitalSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"digitalSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"digitalSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"digitalSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"digitalSensorDigital\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.18.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Digital sensor status\"\"\",\n        }, # column\n        \"dstsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Digital Static Transfer Switch status\"\"\",\n        }, # table\n        \"dstsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dstsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the DSTS table: each entry contains\nan index (dstsIndex) and other details\"\"\",\n        }, # row\n        \"dstsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dstsSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dstsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dstsAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dstsVoltsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side A\"\"\",\n        }, # column\n        \"dstsAmpsA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RMS Current of Side A\"\"\",\n        }, # column\n        \"dstsVoltsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RMS Voltage of Side B\"\"\",\n        }, # column\n        \"dstsAmpsB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RMS Current of Side B\"\"\",\n        }, # column\n        \"dstsSourceAActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source A active\"\"\",\n        }, # column\n        \"dstsSourceBActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If 99, source B active\"\"\",\n        }, # column\n        \"dstsPowerStatusA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of source A\"\"\",\n        }, # column\n        \"dstsPowerStatusB\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Quality of Source B\"\"\",\n        }, # column\n        \"dstsSourceATempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Source A temp in C\"\"\",\n        }, # column\n        \"dstsSourceBTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.19.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-20\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Source B temp in C\"\"\",\n        }, # column\n        \"cpmSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of city power sensors\"\"\",\n        }, # table\n        \"cpmSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpmSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the city power sensor table: each entry contains\nan index (cpmSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"cpmSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"cpmSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"cpmSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"cpmSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"cpmSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.20.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"City Power sensor status\"\"\",\n        }, # column\n        \"smokeAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of smoke alarm sensors\"\"\",\n        }, # table\n        \"smokeAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"smokeAlarmIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the smoke alarm sensor table: each entry contains\nan index (smokeAlarmIndex) and other sensor details\"\"\",\n        }, # row\n        \"smokeAlarmIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"smokeAlarmSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"smokeAlarmName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"smokeAlarmAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"smokeAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Smoke alarm status\"\"\",\n        }, # column\n        \"neg48VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of -48Vdc sensors\"\"\",\n        }, # table\n        \"neg48VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"neg48VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the -48Vdc sensor table: each entry contains\nan index (neg48VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"neg48VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"neg48VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"neg48VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"neg48VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"neg48VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"-48Vdc Sensor value\"\"\",\n        }, # column\n        \"pos30VdcSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of 30Vdc sensors\"\"\",\n        }, # table\n        \"pos30VdcSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pos30VdcSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the 30Vdc sensor table: each entry contains\nan index (pos30VdcSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"pos30VdcSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"pos30VdcSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"pos30VdcSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"pos30VdcSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"pos30VdcSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"-10\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"30Vdc Sensor value\"\"\",\n        }, # column\n        \"analogSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of analog sensors\"\"\",\n        }, # table\n        \"analogSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"analogSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the analog input table: each entry contains\nan index (analogSensorIndex) and other sensor details\"\"\",\n        }, # row\n        \"analogSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"analogSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"analogSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"analogSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"analogSensorAnalog\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.2.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Analog Sensor Value\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"cmTestTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Test SNMP Trap\"\"\",\n        }, # notification\n        \"cmClimateTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateHumidityTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateAirflowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateLightTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateSoundTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO1TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO2TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateIO3TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmPowMonKWattHrsTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonKWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltsTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMaxTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMinTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltPkTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPk\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Trap\"\"\",\n        }, # notification\n        \"cmPowMonAmpsX10TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonAmpsX10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 Trap\"\"\",\n        }, # notification\n        \"cmPowMonRealPowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Trap\"\"\",\n        }, # notification\n        \"cmPowMonAppPowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonAppPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Trap\"\"\",\n        }, # notification\n        \"cmPowMonPwrFactTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPwrFact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2TRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorFlowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorHumidityTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity\"\"\",\n        }, # notification\n        \"cmPowerVoltsTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Volts Trap\"\"\",\n        }, # notification\n        \"cmPowerAmpsTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerRealPowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerRealPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Watts Trap\"\"\",\n        }, # notification\n        \"cmPowerAppPowTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerAppPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Volt Amps Trap\"\"\",\n        }, # notification\n        \"cmPowerPwrFactorTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerPwrFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Power Factor Trap\"\"\",\n        }, # notification\n        \"cmDoorSensorStatusTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Trap\"\"\",\n        }, # notification\n        \"cmWaterSensorDampnessTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Trap\"\"\",\n        }, # notification\n        \"cmCurrentMonitorAmpsTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.10905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Trap\"\"\",\n        }, # notification\n        \"cmMillivoltMonitorMVTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10ATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10A\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10BTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10B\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10CTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10C\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"cmOutlet1StatusTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Trap\"\"\",\n        }, # notification\n        \"cmOutlet2StatusTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Trap\"\"\",\n        }, # notification\n        \"cmVsfcSetPointCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcIntTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Trap\"\"\",\n        }, # notification\n        \"cmVsfcFanSpeedTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Trap\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A Amps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B Amps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C Amps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D Amps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsETRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E Amps Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F Amps Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorHumidityTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity\"\"\",\n        }, # notification\n        \"cmDigitalSensorDigitalTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsAmpsATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsAmpsBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceAActiveTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceBActiveTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusATRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusBTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceATempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmDstsSourceBTempCTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.11914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Trap\"\"\",\n        }, # notification\n        \"cmCpmSensorStatusTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.12005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Trap\"\"\",\n        }, # notification\n        \"cmSmokeAlarmStatusTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.12105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Trap\"\"\",\n        }, # notification\n        \"cmNeg48VdcSensorVoltageTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.12205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"cmPos30VdcSensorVoltageTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.12305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Trap\"\"\",\n        }, # notification\n        \"cmAnalogSensorAnalogTRAP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.12405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Trap\"\"\",\n        }, # notification\n        \"cmClimateTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Humidity Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateAirflowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateAirflow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Air Flow Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateLightCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateLight\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Light Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateSoundCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateSound\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate Sound Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO1 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO2 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmClimateIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"climateIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"climateName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Climate IO3 Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonKWattHrsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonKWattHrs\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMaxCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltMinCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonVoltPkCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonVoltPk\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonAmpsX10CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonAmpsX10\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonRealPowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonRealPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonAppPowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonAppPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonPwrFactCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonPwrFact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Clear Trap\"\"\",\n        }, # notification\n        \"cmPowMonOutlet2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powMonOutlet2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powMonName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Clear Trap\"\"\",\n        }, # notification\n        \"cmTempSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"tempSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temp Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorFlowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Air Flow Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmAirFlowSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"airFlowSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Air Flow Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerVoltsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerVolts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Volts Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerRealPowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerRealPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Watts Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerAppPowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerAppPow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Volt Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmPowerPwrFactorCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"powerPwrFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"powerName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power-Only Power Factor Clear Trap\"\"\",\n        }, # notification\n        \"cmDoorSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"doorSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"doorSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Door sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmWaterSensorDampnessCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"waterSensorDampness\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"waterSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Water sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmCurrentMonitorAmpsCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.20905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"currentMonitorAmps\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"currentMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current Monitor Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmMillivoltMonitorMVCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"millivoltMonitorMV\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"millivoltMonitorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Millivolt Monitor Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10ACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10A\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10BCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10B\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChKWattHrsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChKWattHrsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Kilo Watt Hours C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMaxCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMaxC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Max C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltMinCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltMinC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts Min C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChVoltPkCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChVoltPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAmpsX10CCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAmpsX10C\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps x 10 C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChRealPowCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChRealPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChAppPowCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChAppPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear Trap\"\"\",\n        }, # notification\n        \"cmPow3ChPwrFactCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pow3ChPwrFactC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pow3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear Trap\"\"\",\n        }, # notification\n        \"cmOutlet1StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet1Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 1 Status Clear Trap\"\"\",\n        }, # notification\n        \"cmOutlet2StatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"outlet2Status\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet 2 Status Clear Trap\"\"\",\n        }, # notification\n        \"cmVsfcSetPointCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcSetPointC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Temp Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcIntTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcIntTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Internal Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt1TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt1TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 1 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt2TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt2TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 2 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt3TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt3TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 3 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcExt4TempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcExt4TempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc External Temp 4 Sensor Clear\"\"\",\n        }, # notification\n        \"cmVsfcFanSpeedCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vsfcFanSpeed\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"vsfcName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Vsfc Fan Speed Sensor Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor A Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor B Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volts C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChVoltPkCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChVoltPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Volt Peak C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAmpPkCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAmpPkC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Amps Peak C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChRealPowCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChRealPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Real Power C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChAppPowCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChAppPowC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Apparent Power C Clear\"\"\",\n        }, # notification\n        \"cmCtrl3ChPwrFactCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrl3ChPwrFactC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrl3ChName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Power Factor C Clear\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group A Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group B Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group C Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsDCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsD\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group D Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsECLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsE\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group E Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmCtrlGrpAmpsFCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ctrlGrpAmpsF\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"ctrlGrpAmpsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Group F Amps Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21706\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Temperature Clear Trap\"\"\",\n        }, # notification\n        \"cmDewPointSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21707\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dewPointSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor - Humidity Clear Trap\"\"\",\n        }, # notification\n        \"cmDigitalSensorDigitalCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"digitalSensorDigital\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"digitalSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Digital sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmDstsVoltsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsAmpsACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsAmpsA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side A Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsVoltsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsVoltsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Voltage of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsAmpsBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21908\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsAmpsB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RMS Current of Side B Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceAActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21909\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceAActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceBActiveCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21910\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBActive\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusACLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21911\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusA\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsPowerStatusBCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21912\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsPowerStatusB\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Power Qualilty Active Set Point Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceATempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21913\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceATempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source A Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmDstsSourceBTempCCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.21914\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dstsSourceBTempC\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"dstsName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Source B Temp Sensor Clear\"\"\",\n        }, # notification\n        \"cmCpmSensorStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.22005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cpmSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"cpmSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"City Power sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmSmokeAlarmStatusCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.22105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"smokeAlarmStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"smokeAlarmName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Smoke alarm Clear Trap\"\"\",\n        }, # notification\n        \"cmNeg48VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.22205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"neg48VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"neg48VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"-48Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmPos30VdcSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.22305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pos30VdcSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"pos30VdcSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"30Vdc Sensor Clear Trap\"\"\",\n        }, # notification\n        \"cmAnalogSensorAnalogCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.0.22405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"analogSensorAnalog\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"analogSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"productFriendlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n                \"alarmTripType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analog Sensor Clear Trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/IT-WATCHDOGS-V4-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python IT-WATCHDOGS-V4-MIB\n\nFILENAME = \"IT-WATCHDOGS-V4-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n\n    \"IT-WATCHDOGS-V4-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n        \"organization\" :\n            \"\"\"I.T. Watchdogs\"\"\",\n        \"contact\" :\n            \"\"\"support@itwatchdogs.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB for I.T. Watchdogs Products\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2012-09-11 00:00\",\n                \"description\" :\n                    \"\"\"Original version\"\"\",\n            },\n        ),\n        \"identity node\" : \"itwatchdogs\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"itwatchdogs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373\",\n            \"status\" : \"current\",\n        }, # node\n        \"blackbird\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4\",\n        }, # node\n        \"watchdog100\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1\",\n        }, # node\n        \"deviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1\",\n        }, # node\n        \"productTitle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.1\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product name\"\"\",\n        }, # scalar\n        \"productVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product version\"\"\",\n        }, # scalar\n        \"productFriendlyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"User-assigned name\"\"\",\n        }, # scalar\n        \"productMacAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's unique MAC address\"\"\",\n        }, # scalar\n        \"productUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.5\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product's main URL access point\"\"\",\n        }, # scalar\n        \"deviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of devices on unit\"\"\",\n        }, # scalar\n        \"temperatureUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Current units for temperature values. 0 = Degrees Fahrenheit, 1 = Degrees Celsius\"\"\",\n        }, # scalar\n        \"internalTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Internal sensors for units\"\"\",\n        }, # table\n        \"internalEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"internalIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the internalTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"internalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"internalSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"internalName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"internalAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"internalTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"internalHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"internalDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew-point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"internalIO1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1\"\"\",\n        }, # column\n        \"internalIO2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2\"\"\",\n        }, # column\n        \"internalIO3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3\"\"\",\n        }, # column\n        \"internalIO4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4\"\"\",\n        }, # column\n        \"internalRelayState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.2.1.12\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the relay on?\"\"\",\n        }, # column\n        \"tempSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature Sensor\"\"\",\n        }, # table\n        \"tempSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tempSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the tempSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"tempSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"tempSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"tempSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"tempSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"tempSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"airFlowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Airflow, Humidity, Temperature and Dewpoint Sensor \"\"\",\n        }, # table\n        \"airFlowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFlowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the airFlowSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"airFlowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"airFlowSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"airFlowSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"airFlowSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"airFlowSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"airFlowSensorFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading\"\"\",\n        }, # column\n        \"airFlowSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading\"\"\",\n        }, # column\n        \"airFlowSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew Point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"dewPointSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Dew Point sensor\"\"\",\n        }, # table\n        \"dewPointSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dewPointSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the dewPointSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"dewPointSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"dewPointSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"dewPointSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"dewPointSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"dewPointSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"dewPointSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"dewPointSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Dew-point in tenths of degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"ccatSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote CCAT sensor\"\"\",\n        }, # table\n        \"ccatSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ccatSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the ccatSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"ccatSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"ccatSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"ccatSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"ccatSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"ccatSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"5000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"5000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor reading\"\"\",\n        }, # column\n        \"ccatSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.6\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor type\"\"\",\n        }, # column\n        \"ccatSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.7.1.7\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CCAT sensor value description\"\"\",\n        }, # column\n        \"t3hdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature x 3, Humidity and Dewpoint Sensor\"\"\",\n        }, # table\n        \"t3hdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"t3hdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the t3hdSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"t3hdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"t3hdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"t3hdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"t3hdSensorIntName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.5\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorIntTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Internal Temperature in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorIntHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity\"\"\",\n        }, # column\n        \"t3hdSensorIntDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Internal DewPoint in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorExtAAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.9\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External A status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExtAName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.10\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External A Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExtATemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for External Temperature A in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"t3hdSensorExtBAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.12\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External B status: 0 = unplugged, 1 = normal operation, 2 = device error\"\"\",\n        }, # column\n        \"t3hdSensorExtBName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.13\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"T3HD External B Friendly Name\"\"\",\n        }, # column\n        \"t3hdSensorExtBTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for External Temperature B in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"thdSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Temperature, Humidity and Dewpoint Sensor\"\"\",\n        }, # table\n        \"thdSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"thdSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the thdSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"thdSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"thdSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"thdSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"thdSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"thdSensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for Temperature in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"thdSensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"THD Sensor Humidity\"\"\",\n        }, # column\n        \"thdSensorDewPoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.9.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Degrees\",\n            \"description\" :\n                \"\"\"Current reading for DewPoint in 0.1 degrees. Units are given by temperatureUnits field in deviceInfo\"\"\",\n        }, # column\n        \"rpmSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Remote Power Manager Sensor\"\"\",\n        }, # table\n        \"rpmSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rpmSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the rpmSensorTable table: each entry contains an index and other sensor details\"\"\",\n        }, # row\n        \"rpmSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Table entry index value\"\"\",\n        }, # column\n        \"rpmSensorSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.2\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number\"\"\",\n        }, # column\n        \"rpmSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.3\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Friendly Name\"\"\",\n        }, # column\n        \"rpmSensorAvail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.4\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is device currently plugged in?\"\"\",\n        }, # column\n        \"rpmSensorEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.5\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"kWh\",\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy\"\"\",\n        }, # column\n        \"rpmSensorVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.6\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage\"\"\",\n        }, # column\n        \"rpmSensorVoltageMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.7\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max)\"\"\",\n        }, # column\n        \"rpmSensorVoltageMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.8\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min)\"\"\",\n        }, # column\n        \"rpmSensorVoltagePeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.9\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Volts\",\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak)\"\"\",\n        }, # column\n        \"rpmSensorCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.10\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amps (rms)\",\n            \"description\" :\n                \"\"\"RPM Sensor Current reading in deciAmps\"\"\",\n        }, # column\n        \"rpmSensorRealPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.11\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"RPM Sensor Real Power\"\"\",\n        }, # column\n        \"rpmSensorApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.12\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power\"\"\",\n        }, # column\n        \"rpmSensorPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.13\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor\"\"\",\n        }, # column\n        \"rpmSensorOutlet1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.14\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RPM Sensor Outlet 1 State: 0 = off, 1 = on\"\"\",\n        }, # column\n        \"rpmSensorOutlet2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.10.1.15\",\n            \"status\" : \"current\",\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RPM Sensor Outlet 2 State: 0 = off, 1 = on\"\"\",\n        }, # column\n        \"trap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767\",\n        }, # node\n        \"trapPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"internalTestNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Test SNMP Trap\"\"\",\n        }, # notification\n        \"internalTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"internalHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Trap\"\"\",\n        }, # notification\n        \"internalDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Dew Point Sensor Trap\"\"\",\n        }, # notification\n        \"internalIO1NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1 Trap\"\"\",\n        }, # notification\n        \"internalIO2NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2 Trap\"\"\",\n        }, # notification\n        \"internalIO3NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3 Trap\"\"\",\n        }, # notification\n        \"internalIO4NOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4 Trap\"\"\",\n        }, # notification\n        \"tempSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temperature Sensor Trap\"\"\",\n        }, # notification\n        \"airFlowSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"airFlowSensorFlowNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading Trap\"\"\",\n        }, # notification\n        \"airFlowSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading Trap\"\"\",\n        }, # notification\n        \"airFlowSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"dewPointSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"dewPointSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Trap\"\"\",\n        }, # notification\n        \"dewPointSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"ccatSensorValueNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"ccatSensorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CCAT sensor reading Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10806\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10807\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10808\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtATempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10811\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtATemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External A Temperature Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtBTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10814\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtBTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External B Temperature Trap\"\"\",\n        }, # notification\n        \"thdSensorTempNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Temperature Trap\"\"\",\n        }, # notification\n        \"thdSensorHumidityNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Humidity Trap\"\"\",\n        }, # notification\n        \"thdSensorDewPointNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.10907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Dew Point Trap\"\"\",\n        }, # notification\n        \"rpmSensorEnergyNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorEnergy\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11006\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMaxNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11007\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max) Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMinNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11008\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min) Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltagePeakNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11009\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltagePeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak) Trap\"\"\",\n        }, # notification\n        \"rpmSensorCurrentNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11010\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Current Trap\"\"\",\n        }, # notification\n        \"rpmSensorRealPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11011\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Real Power Trap\"\"\",\n        }, # notification\n        \"rpmSensorApparentPowerNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11012\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power Trap\"\"\",\n        }, # notification\n        \"rpmSensorPowerFactorNOTIFY\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.11013\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor Trap\"\"\",\n        }, # notification\n        \"internalTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"internalHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"internalDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Internal Dew Point Sensor Clear Trap\"\"\",\n        }, # notification\n        \"internalIO1CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO1\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 1 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO2CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO2\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 2 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO3CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO3\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 3 Clear Trap\"\"\",\n        }, # notification\n        \"internalIO4CLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"internalIO4\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Current reading for Analog Input 4 Clear Trap\"\"\",\n        }, # notification\n        \"tempSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"tempSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Temperature Sensor Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorFlowCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorFlow\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Airflow reading Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"airFlowSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"airFlowSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"AFHT3 Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Humidity reading Clear Trap\"\"\",\n        }, # notification\n        \"dewPointSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dewPointSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Remote Dew Point Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"ccatSensorValueCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20705\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ccatSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"ccatSensorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CCAT sensor reading Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20806\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20807\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Internal Humidity Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorIntDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20808\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorIntDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtATempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20811\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtATemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External A Temperature Clear Trap\"\"\",\n        }, # notification\n        \"t3hdSensorExtBTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20814\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"t3hdSensorExtBTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"T3HD Sensor External B Temperature Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorTempCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20905\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Temperature Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorHumidityCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20906\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Humidity Clear Trap\"\"\",\n        }, # notification\n        \"thdSensorDewPointCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.20907\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"thdSensorDewPoint\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n                \"temperatureUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"THD Sensor Dew Point Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorEnergyCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21005\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorEnergy\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Accumulated Energy Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21006\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMaxCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21007\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMax\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Max) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltageMinCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21008\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltageMin\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Min) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorVoltagePeakCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21009\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorVoltagePeak\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Voltage (Peak) Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorCurrentCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21010\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Current Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorRealPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21011\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorRealPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Real Power Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorApparentPowerCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21012\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorApparentPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Apparent Power Clear Trap\"\"\",\n        }, # notification\n        \"rpmSensorPowerFactorCLEAR\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"IT-WATCHDOGS-V4-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.17373.4.1.32767.0.21013\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rpmSensorPowerFactor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IT-WATCHDOGS-V4-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RPM Sensor Power Factor Clear Trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/JUNIPER-ALARM-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python JUNIPER-ALARM-MIB\n\nFILENAME = \"./JUNIPER-ALARM-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n\n    \"JUNIPER-ALARM-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Juniper Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"        Juniper Technical Assistance Center\nJuniper Networks, Inc.\n1194 N. Mathilda Avenue\nSunnyvale, CA 94089\nE-mail: support@juniper.net\"\"\",\n        \"description\" :\n            \"\"\"This is Juniper Networks' implementation of enterprise\nspecific MIB for alarms from the router chassis box.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2003-07-18 21:53\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n        ),\n        \"identity node\" : \"jnxAlarms\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxMibs\"},\n    ),\n\n    \"nodes\" : {\n        \"jnxAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4\",\n            \"status\" : \"current\",\n        }, # node\n        \"jnxCraftAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2\",\n        }, # node\n        \"jnxAlarmRelayMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cutOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm relay mode of the craft interface\npanel for both yellow and red alarms.\n\nBoth yellow and red alarms could be cut off \nby a front panel Alarm Cutoff / Lamp Test \n(ACO/LT) button.\n\nIn the pass-on mode, the alarm relay will be \nactivated to pass on the yellow or red alarms.\nIn the cut-off mode, both yellow and red alarms\nwill be cut off from the alarm relays which are \nnormally connected to audible sirens or visual \nflashing devices.\"\"\",\n        }, # scalar\n        \"jnxYellowAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.2\",\n        }, # node\n        \"jnxYellowAlarmState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The yellow alarm state on the craft interface \npanel.\n\nThe yellow alarm is on when there is some \nsystem warning such as maintenance alert or \nsignificant temperature increase.\n\nThis yellow alarm state could be turned off \nby the ACO/LT (Alarm Cut Off / Lamp Test) button\non the front panel module.\"\"\",\n        }, # scalar\n        \"jnxYellowAlarmCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently active and non-silent \nyellow alarms.\n\nThis object is independent of the ACO/LT (Alarm\nCut Off / Lamp Test) button.\"\"\",\n        }, # scalar\n        \"jnxYellowAlarmLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the yellow alarm\nlast changed - either from off to on or vice\nversa. \tZero if unknown or never changed since\nthe agent was up.\"\"\",\n        }, # scalar\n        \"jnxRedAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.3\",\n        }, # node\n        \"jnxRedAlarmState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The red alarm indication on the craft interface \npanel.\n\nThe red alarm is on when there is some system \nfailure or power supply failure or the system \nis experiencing a hardware malfunction or some \nthreshold is being exceeded.\n\nThis red alarm state could be turned off by the\nACO/LT (Alarm Cut Off / Lamp Test) button on the\nfront panel module.\"\"\",\n        }, # scalar\n        \"jnxRedAlarmCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently active and non-silent \nred alarms.\n\nThis object is independent of the ACO/LT (Alarm\nCut Off / Lamp Test) button.\"\"\",\n        }, # scalar\n        \"jnxRedAlarmLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-ALARM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.4.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the red alarm\nlast changed - either from off to on or vice\nversa. \tZero if unknown or never changed since\nthe agent was up.\"\"\",\n        }, # scalar\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/JUNIPER-DOM-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python JUNIPER-DOM-MIB\n\nFILENAME = \"/home/sigmunda/.snmp/mibs/mib-jnx-dom.txt\"\n\nMIB = {\n    \"moduleName\" : \"JUNIPER-DOM-MIB\",\n\n    \"JUNIPER-DOM-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Juniper Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"        Juniper Technical Assistance Center\nJuniper Networks, Inc.\n1194 N. Mathilda Avenue\nSunnyvale, CA 94089\nE-mail: support@juniper.net\"\"\",\n        \"description\" :\n            \"\"\"This MIB module defines objects used for Digital Optical \nMonitor on XFP interface of Juniper products.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2009-12-23 09:31\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"2009-12-23 00:00\",\n                \"description\" :\n                    \"\"\"Initial revision.\"\"\",\n            },\n        ),\n        \"identity node\" : \"jnxDomMib\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxDomMibRoot\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxDomNotifications\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifDescr\"},\n    ),\n\n    \"typedefs\" : {\n        \"JnxDomAlarmId\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"domRxLossSignalAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"domRxCDRLossLockAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"domRxNotReadyAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"domRxLaserPowerHighAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"domRxLaserPowerLowAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"domTxLaserBiasCurrentHighAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"domTxLaserBiasCurrentLowAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"domTxLaserOutputPowerHighAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"domTxLaserOutputPowerLowAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"domTxDataNotReadyAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"domTxNotReadyAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"domTxLaserFaultAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"domTxCDRLossLockAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"domModuleTemperatureHighAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"domModuleTemperatureLowAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"domModuleNotReadyAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"domModulePowerDownAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"domLinkDownAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"domModuleRemovedAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"description\" :\n                \"\"\"Identifies specific DOM alarms that may exist on an\ninterface.\"\"\",\n        },\n        \"JnxDomWarningId\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"domRxLaserPowerHighWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"domRxLaserPowerLowWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"domTxLaserBiasCurrentHighWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"domTxLaserBiasCurrentLowWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"domTxLaserOutputPowerHighWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"domTxLaserOutputPowerLowWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"domModuleTemperatureHighWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"domModuleTemperatureLowWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"Identifies specific DOM warnings that may exist on an\ninterface.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"jnxDomMib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"jnxDomDigitalMonitoring\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1\",\n        }, # node\n        \"jnxDomCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Information about Digital Optical Monitoring for this\ninterfaces on this router.\"\"\",\n        }, # table\n        \"jnxDomCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about Digital Optical Monitoring \nfor this interfaces on this router.\"\"\",\n        }, # row\n        \"jnxDomCurrentAlarms\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-DOM-MIB\", \"name\" : \"JnxDomAlarmId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies all the active DOM alarms \non a XFP physical interface on this router.\"\"\",\n        }, # column\n        \"jnxDomCurrentAlarmDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system date and time when the management subsystem learned\nof the current alarm event.\"\"\",\n        }, # column\n        \"jnxDomLastAlarms\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-DOM-MIB\", \"name\" : \"JnxDomAlarmId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies a copy of jnxDomCurrentAlarms \nbefore last set or clear.\"\"\",\n        }, # column\n        \"jnxDomCurrentWarnings\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-DOM-MIB\", \"name\" : \"JnxDomWarningId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object identifies all the active DOM warnings\non a XFP physical interface on this router.\"\"\",\n        }, # column\n        \"jnxDomCurrentRxLaserPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Receiver laser power.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserBiasCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.001 mA\",\n            \"description\" :\n                \"\"\" Receiver laser bias current.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Transmitter laser output power.\"\"\",\n        }, # column\n        \"jnxDomCurrentModuleTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Celsius (degrees C)\",\n            \"description\" :\n                \"\"\" Module temperature.\"\"\",\n        }, # column\n        \"jnxDomCurrentRxLaserPowerHighAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Receiver laser power high alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentRxLaserPowerLowAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Receiver laser power low alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentRxLaserPowerHighWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Receiver laser power high warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentRxLaserPowerLowWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Receiver laser power low warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserBiasCurrentHighAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.001 mA\",\n            \"description\" :\n                \"\"\" Transmitter laser bias current high alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserBiasCurrentLowAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.001 mA\",\n            \"description\" :\n                \"\"\" Transmitter laser bias current low alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserBiasCurrentHighWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.001 mA\",\n            \"description\" :\n                \"\"\" Transmitter laser bias current high warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserBiasCurrentLowWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.001 mA\",\n            \"description\" :\n                \"\"\" Transmitter laser bias current low warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserOutputPowerHighAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Transmitter laser power high alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserOutputPowerLowAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Transmitter laser power low alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserOutputPowerHighWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Transmitter laser power high warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentTxLaserOutputPowerLowWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01 dbm\",\n            \"description\" :\n                \"\"\" Transmitter laser power low warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentModuleTemperatureHighAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Celsius (degrees C)\",\n            \"description\" :\n                \"\"\" Module temperature high alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentModuleTemperatureLowAlarmThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Celsius (degrees C)\",\n            \"description\" :\n                \"\"\" Module temperature low alarm threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentModuleTemperatureHighWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Celsius (degrees C)\",\n            \"description\" :\n                \"\"\" Module temperature high warning threshold.\"\"\",\n        }, # column\n        \"jnxDomCurrentModuleTemperatureLowWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.60.1.1.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Celsius (degrees C)\",\n            \"description\" :\n                \"\"\" Module temperature low warning threshold.\"\"\",\n        }, # column\n        \"jnxDomNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.18.0\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"jnxDomAlarmSet\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.18.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"jnxDomLastAlarms\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n                \"jnxDomCurrentAlarms\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n                \"jnxDomCurrentAlarmDate\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Notification of a recently set Dom alarm.\"\"\",\n        }, # notification\n        \"jnxDomAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-DOM-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.18.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"IF-MIB\"\n                },\n                \"jnxDomLastAlarms\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n                \"jnxDomCurrentAlarms\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n                \"jnxDomCurrentAlarmDate\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-DOM-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Notification of a recently cleared Dom alarm.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/JUNIPER-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python JUNIPER-MIB\n\nFILENAME = \"mib-jnx-chassis.txt\"\n\nMIB = {\n    \"moduleName\" : \"JUNIPER-MIB\",\n\n    \"JUNIPER-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Juniper Networks, Inc.\"\"\",\n        \"contact\" : \n            \"\"\"        Juniper Technical Assistance Center\nJuniper Networks, Inc.\n1133 Innovation Way\nSunnyvale, CA 94089\nE-mail: support@juniper.net\"\"\",\n        \"description\" :\n            \"\"\"The MIB modules representing Juniper Networks'\nimplementation of enterprise specific MIBs \nsupported by a single SNMP agent.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2016-05-16 00:00\",\n                \"description\" :\n                    \"\"\"Added new trap: jnxFmHealthChkErr.\"\"\",\n            },\n            {\n                \"date\" : \"2016-02-02 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruFpcHFanTrayIncompatible and\nmissing entries mixedSwitchFabric, unsupportedFabric,\njamConfigError.\"\"\",\n            },\n            {\n                \"date\" : \"2015-04-28 00:00\",\n                \"description\" :\n                    \"\"\"Added new MIB jnxContentsModel.\"\"\",\n            },\n            {\n                \"date\" : \"2015-04-01 00:00\",\n                \"description\" :\n                    \"\"\"Added new FRU Power consumption variable.\"\"\",\n            },\n            {\n                \"date\" : \"2015-01-14 00:00\",\n                \"description\" :\n                    \"\"\"Added new color types for jnxLEDState and jnxLEDStateOrdered.\"\"\",\n            },\n            {\n                \"date\" : \"2014-12-04 00:00\",\n                \"description\" :\n                    \"\"\"Added new trap: jnxFmAsicErr.\"\"\",\n            },\n            {\n                \"date\" : \"2014-07-30 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reasons fruFpcFanTrayIncompatible &\nfruFpcPEMIncompatible to jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2014-05-20 00:00\",\n                \"description\" :\n                    \"\"\"Added MIBs for 1, 5 and 15 min average CPU util\"\"\",\n            },\n            {\n                \"date\" : \"2014-04-08 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason vpnLocalizationRoleChange to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-11-19 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruPfeErrors to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-10-15 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruIncompatibleWithPEM,\nfruIncompatibleWithSIB, and sibIncompatibleWithOtherSIB\nto jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-09-24 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason hwError\nto jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-07-17 00:00\",\n                \"description\" :\n                    \"\"\"Added new Fabric plane offline/online/check traps\nto trap fabric plane offline/online/fault events.\"\"\",\n            },\n            {\n                \"date\" : \"2013-05-22 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reasons fruReUnresponsive to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-03-22 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason hwError\nto jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-02-28 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reasons fruFpcScbIncompatible to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2013-01-07 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason openflowConfigChange to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2012-12-10 00:00\",\n                \"description\" :\n                    \"\"\"Added new OIDs to get control plane memory \nallocation (jnxOperatingMemoryCP)\nand utilization(jnxOperatingBufferCP) in RE.\"\"\",\n            },\n            {\n                \"date\" : \"2012-11-07 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reasons fruFpcIncompatible and\nfruFpcFanTrayPEMIncompatible to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2012-10-12 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruPICOfflineOnEccErrors to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2012-08-24 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruTypeConfigMismatch to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2012-08-24 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruTypeConfigMismatch to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2012-02-21 00:00\",\n                \"description\" :\n                    \"\"\"Added new jnxFruType: PDU and PSM,\nand new traps: jnxFmLinkErr and jnxFmCellDropErr.\"\"\",\n            },\n            {\n                \"date\" : \"2012-02-15 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason builtinPicBounce to\njnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2011-09-09 00:00\",\n                \"description\" :\n                    \"\"\"Added jnxBoxPersonality for MidRangius Boxes\nnamely MX40/MX10/MX5\"\"\",\n            },\n            {\n                \"date\" : \"2010-10-22 00:00\",\n                \"description\" :\n                    \"\"\"Added load average variables\"\"\",\n            },\n            {\n                \"date\" : \"2009-01-09 00:00\",\n                \"description\" :\n                    \"\"\"Added sfcX and lcc4-lcc15 chassis IDs to JnxChassisId\nenumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2008-12-31 00:00\",\n                \"description\" :\n                    \"\"\"Added nodeX chassis IDs to JnxChassisId enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2008-08-01 00:00\",\n                \"description\" :\n                    \"\"\"Added new fru type PSD to jnxFruType enumeration and\nadded jcsX chassis IDs to JnxChassisId enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2008-07-31 00:00\",\n                \"description\" :\n                    \"\"\"Added jnxBoxSystemDomainType object.\"\"\",\n            },\n            {\n                \"date\" : \"2006-11-20 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason fruFebOffline\nto jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2005-07-19 00:00\",\n                \"description\" :\n                    \"\"\"Added new offline reason pfeVersionMismatch\nto jnxFruOfflineReason enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2005-07-18 00:00\",\n                \"description\" :\n                    \"\"\"Added new fru type FEB in jnxFruType enumeration.\"\"\",\n            },\n            {\n                \"date\" : \"2004-09-17 00:00\",\n                \"description\" :\n                    \"\"\"Added new traps for chassis\nalarm condition jnxFruCheck.\"\"\",\n            },\n            {\n                \"date\" : \"2004-06-30 00:00\",\n                \"description\" :\n                    \"\"\"Added following new traps for chassis\nalarm conditions: jnxFruFailed, jnxFruOffline\nand jnxFruOnline.\"\"\",\n            },\n            {\n                \"date\" : \"2004-03-23 00:00\",\n                \"description\" :\n                    \"\"\"Added chassis identification objects.\"\"\",\n            },\n        ),\n        \"identity node\" : \"jnxBoxAnatomy\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxMibs\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxChassisTraps\"},\n        {\"module\" : \"JUNIPER-SMI\", \"name\" : \"jnxChassisOKTraps\"},\n    ),\n\n    \"typedefs\" : {\n        \"JnxChassisId\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"singleChassis\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"scc\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"lcc0\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"lcc1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"lcc2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"lcc3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"jcs1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"jcs2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"jcs3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"jcs4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"node0\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"node1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"sfc0\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"sfc1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"sfc2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"sfc3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"sfc4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"lcc4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"lcc5\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"lcc6\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"lcc7\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"lcc8\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"lcc9\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"lcc10\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"lcc11\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"lcc12\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"lcc13\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"lcc14\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"lcc15\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"member0\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"member1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"member2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"member3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"member4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"member5\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"member6\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"member7\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"nodeDevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"interconnectDevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"controlPlaneDevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"directorDevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"gnf1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"gnf2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"gnf3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"gnf4\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"gnf5\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"gnf6\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"gnf7\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"49\"\n            },\n            \"gnf8\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"50\"\n            },\n            \"gnf9\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"51\"\n            },\n            \"gnf10\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"52\"\n            },\n            \"description\" :\n                \"\"\"Identifies a specific router chassis.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"jnxBoxAnatomy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"jnxBoxClass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The class of the box, indicating which product line\nthe box is about, for example, 'Internet Router'.\"\"\",\n        }, # scalar\n        \"jnxBoxDescr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name, model, or detailed description of the box,\nindicating which product the box is about, for example\n'M40'.\"\"\",\n        }, # scalar\n        \"jnxBoxSerialNo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of this subject, blank if unknown \nor unavailable.\"\"\",\n        }, # scalar\n        \"jnxBoxRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The revision of this subject, blank if unknown or\nunavailable.\"\"\",\n        }, # scalar\n        \"jnxBoxInstalled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the subject was last\ninstalled, up-and-running.  Zero if unknown or \nalready up-and-running when the agent was up.\"\"\",\n        }, # scalar\n        \"jnxContainersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of containers entries.\"\"\",\n        }, # table\n        \"jnxContainersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxContainersIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry of containers table.\"\"\",\n        }, # row\n        \"jnxContainersIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index for this entry.\"\"\",\n        }, # column\n        \"jnxContainersView\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The view(s) from which the specific container\nappears.\n\nThis variable indicates that the specific container\nis embedded and accessible from the corresponding\nview(s).\n\nThe value is a bit map represented as a sum.\nIf multiple bits are set, the specified\ncontainer(s) are located and accessible from \nthat set of views.\n\nThe various values representing the bit positions\nand its corresponding views are:\n    1   front\n    2   rear\n    4   top\n    8   bottom\n   16   leftHandSide\n   32   rightHandSide\n\nNote 1: \nLefHandSide and rightHandSide are referred\nto based on the view from the front.\n\nNote 2: \nIf the specified containers are scattered \naround various views, the numbering is according\nto the following sequence:\n    front -> rear -> top -> bottom\n\t  -> leftHandSide -> rightHandSide\nFor each view plane, the numbering sequence is\nfirst from left to right, and then from up to down.\n\nNote 3: \nEven though the value in chassis hardware (e.g. \nslot number) may be labelled from 0, 1, 2, and up,\nall the indices in MIB start with 1 (not 0) \naccording to network management convention.\"\"\",\n        }, # column\n        \"jnxContainersLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The abstraction level of the box or chassis.\nIt is enumerated from the outside to the inside, \nfrom the outer layer to the inner layer.\nFor example, top level (i.e. level 0) refers to \nchassis frame, level 1 FPC slot within chassis \nframe, level 2 PIC space within FPC slot.\"\"\",\n        }, # column\n        \"jnxContainersWithin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of its next higher level container \nhousing\tthis entry.  The associated \njnxContainersIndex in the jnxContainersTable \nrepresents its next higher level container.\"\"\",\n        }, # column\n        \"jnxContainersType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of this container.\"\"\",\n        }, # column\n        \"jnxContainersDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this\nsubject.\"\"\",\n        }, # column\n        \"jnxContainersCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of containers of this level\nper container of the next higher level.  \ne.g. if there are six level 2 containers in \nlevel 1 container, then jnxContainersCount for\nlevel 2 is six.\"\"\",\n        }, # column\n        \"jnxContentsLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the box contents \ntable last changed.  Zero if unknown or already \nexisting when the agent was up.\"\"\",\n        }, # scalar\n        \"jnxContentsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contents entries.\"\"\",\n        }, # table\n        \"jnxContentsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxContentsContainerIndex\",\n                \"jnxContentsL1Index\",\n                \"jnxContentsL2Index\",\n                \"jnxContentsL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry of contents table.\"\"\",\n        }, # row\n        \"jnxContentsContainerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated jnxContainersIndex in the \njnxContainersTable.\"\"\",\n        }, # column\n        \"jnxContentsL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxContentsL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxContentsL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxContentsType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of this subject.  zeroDotZero\nif unknown.\"\"\",\n        }, # column\n        \"jnxContentsDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this\nsubject.\"\"\",\n        }, # column\n        \"jnxContentsSerialNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of this subject, blank if \nunknown or unavailable.\"\"\",\n        }, # column\n        \"jnxContentsRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The revision of this subject, blank if unknown \nor unavailable.\"\"\",\n        }, # column\n        \"jnxContentsInstalled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the subject was last \ninstalled, up-and-running.  Zero if unknown\nor already up-and-running when the agent was up.\"\"\",\n        }, # column\n        \"jnxContentsPartNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The part number of this subject, blank if unknown \nor unavailable.\"\"\",\n        }, # column\n        \"jnxContentsChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-MIB\", \"name\" : \"JnxChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the chassis on which the contents of this\nrow exists.\"\"\",\n        }, # column\n        \"jnxContentsChassisDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the chassis on which the\ncontents of this row exists.\"\"\",\n        }, # column\n        \"jnxContentsChassisCleiCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The clei code of this subject, blank if unknown\nor unavailable.\n\nA CLEI code is an intelligent code that consists of 10\nalphanumeric characters with 4 data elements.  The first data\nelement is considered the basic code with the first 2 characters\nindicating the technology or equipment type, and the third and\nfourth characters denoting the functional sub-category.  The\nsecond data element represents the features, and its three\ncharacters denote functional capabilities or changes.  The third\ndata element has one character and denotes a reference to a\nmanufacturer, system ID, specification, or drawing.  The fourth\ndata element consists of two characters and contains complementary\ndata.  These two characters provide a means of differentiating or\nproviding uniqueness between the eight character CLEI codes by\nidentifying the manufacturing vintage of the product.  Names are\nassigned via procedures defined in [GR485].\n\nThe assigned maintenance agent for the CLEI code, Telcordia\nTechnologies, is responsible for assigning certain equipment and\nother identifiers (e.g., location, manufacturer/supplier) for the\ntelecommunications industry.\"\"\",\n        }, # column\n        \"jnxContentsModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.8.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The FRU model name of this subject, blank if unknown\nor unavailable.\"\"\",\n        }, # column\n        \"jnxLEDLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the box LED table \nlast changed.  Zero if unknown or already at \nthat state when the agent was up.\"\"\",\n        }, # scalar\n        \"jnxLEDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of status entries.\"\"\",\n        }, # table\n        \"jnxLEDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"jnxLEDAssociateTable\",\n                \"jnxLEDAssociateIndex\",\n                \"jnxLEDL1Index\",\n                \"jnxLEDL2Index\",\n                \"jnxLEDL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry of status table.\"\"\",\n        }, # row\n        \"jnxLEDAssociateTable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"jnxContainersTable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"jnxContentsTable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated table that this entry is \nrelated.\"\"\",\n        }, # column\n        \"jnxLEDAssociateIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the associated table that this\nentry is related.\"\"\",\n        }, # column\n        \"jnxLEDL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index of the associated\ntable that this entry is related.  Zero \nif unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxLEDL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index of the associated\ntable that this entry is related.  Zero \nif unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxLEDL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index of the associated\ntable that this entry is related.  Zero\nif unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxLEDOriginator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The originator of the this entry.\"\"\",\n        }, # column\n        \"jnxLEDDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this subject.\"\"\",\n        }, # column\n        \"jnxLEDState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"green\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"yellow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"red\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"blue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"amber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"blinkingGreen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"blinkingYellow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"blinkingRed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"blinkingBlue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"blinkingAmber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the LED indicator.\"\"\",\n        }, # column\n        \"jnxLEDStateOrdered\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.10.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"blue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"green\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"amber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"yellow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"red\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"blinkingBlue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"blinkingGreen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"blinkingAmber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"blinkingYellow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"blinkingRed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the LED indicator.  Identical to jnxLEDState, but\nwith enums ordered from 'most operational' to 'least\noperational' states.\"\"\",\n        }, # column\n        \"jnxFilledLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the box filled \nstatus table last changed.  Zero if unknown or\nalready at that state when the agent was up.\"\"\",\n        }, # scalar\n        \"jnxFilledTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of filled status entries.\"\"\",\n        }, # table\n        \"jnxFilledEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxFilledContainerIndex\",\n                \"jnxFilledL1Index\",\n                \"jnxFilledL2Index\",\n                \"jnxFilledL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry of filled status table.\"\"\",\n        }, # row\n        \"jnxFilledContainerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated jnxContainersIndex in the \njnxContainersTable.\"\"\",\n        }, # column\n        \"jnxFilledL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxFilledL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxFilledL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index of the container\nhousing this subject.  Zero if unavailable\nor inapplicable.\"\"\",\n        }, # column\n        \"jnxFilledDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this\nsubject.\"\"\",\n        }, # column\n        \"jnxFilledState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"filled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The filled state of this subject.\"\"\",\n        }, # column\n        \"jnxFilledChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-MIB\", \"name\" : \"JnxChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the chassis on which the contents of this\nrow exists.\"\"\",\n        }, # column\n        \"jnxFilledChassisDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the chassis on which the\ncontents of this row exists.\"\"\",\n        }, # column\n        \"jnxOperatingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of operating status entries.\"\"\",\n        }, # table\n        \"jnxOperatingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxOperatingContentsIndex\",\n                \"jnxOperatingL1Index\",\n                \"jnxOperatingL2Index\",\n                \"jnxOperatingL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry of operating status table.\"\"\",\n        }, # row\n        \"jnxOperatingContentsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated jnxContentsContainerIndex in the \njnxContentsTable.\"\"\",\n        }, # column\n        \"jnxOperatingL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index associated with this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this subject.\"\"\",\n        }, # column\n        \"jnxOperatingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"runningAtFullSpeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operating state of this subject.\"\"\",\n        }, # column\n        \"jnxOperatingTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature in Celsius (degrees C) of this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingCPU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percentage of this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingISR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percentage of this subject\nspending in interrupt service routine (ISR).\nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingDRAMSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The DRAM size in bytes of this subject.\nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingBuffer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The buffer pool utilization in percentage\nof this subject.  Zero if unavailable or \ninapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingHeap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The heap utilization in percentage of \nthis subject.  Zero if unavailable or \ninapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.13\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time interval in 10-millisecond period\nthat this subject has been up and running.  \nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingLastRestart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when this subject \nlast restarted.  Zero if unavailable or \ninapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingMemory\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The installed memory size in Megabytes \nof this subject.  Zero if unavailable or\ninapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingStateOrdered\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"runningAtFullSpeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operating state of this subject.  Identical to\njnxOperatingState, but with enums ordered from 'most\noperational' to 'least operational' states.\"\"\",\n        }, # column\n        \"jnxOperatingChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-MIB\", \"name\" : \"JnxChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the chassis on which the contents of this\nrow exists.\"\"\",\n        }, # column\n        \"jnxOperatingChassisDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the chassis on which the\ncontents of this row exists.\"\"\",\n        }, # column\n        \"jnxOperatingRestartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DateAndTime\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time at which this entity\nlast restarted.\"\"\",\n        }, # column\n        \"jnxOperating1MinLoadAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU Load Average over the last 1 minutes\nHere it will be shown as percentage value\nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperating5MinLoadAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU Load Average over the last 5 minutes\nHere it will be shown as percentage value\nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperating15MinLoadAvg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU Load Average over the last 15 minutes\nHere it will be shown as percentage value\nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperating1MinAvgCPU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percentage of this\nsubject averaged over last 1 minutes. Zero if\nunavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperating5MinAvgCPU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percentage of this\nsubject averaged over last 5 minutes.  Zero if\nunavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperating15MinAvgCPU\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percentage of this\nsubject averaged over last 15 minutes.  Zero\nif unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingFRUPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present power of each FRU. Here it will\nbe shown in terms of voltage. Zero if unavailable\nor inapplicable\"\"\",\n        }, # column\n        \"jnxOperatingBufferCP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The buffer pool utilization in percentage\nof this subject in control plane.  Zero if \nunavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxOperatingMemoryCP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.13.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Allocated memory size for control plane\nin Megabytes. Zero if unavailable or\n\tinapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of redundancy information entries.\"\"\",\n        }, # table\n        \"jnxRedundancyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxRedundancyContentsIndex\",\n                \"jnxRedundancyL1Index\",\n                \"jnxRedundancyL2Index\",\n                \"jnxRedundancyL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the redundancy information table.\"\"\",\n        }, # row\n        \"jnxRedundancyContentsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated jnxContentsContainerIndex in the \njnxContentsTable.\"\"\",\n        }, # column\n        \"jnxRedundancyL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index associated with this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this subject.\"\"\",\n        }, # column\n        \"jnxRedundancyConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"master\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The election priority of redundancy configuration for\nthis subject.  The value 'notApplicable' means no\nspecific instance is configured to be master or\nbackup; whichever component boots up first becomes a\nmaster.\"\"\",\n        }, # column\n        \"jnxRedundancyState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"master\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current running state for this subject.\"\"\",\n        }, # column\n        \"jnxRedundancySwitchoverCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of switchover as perceived by\nthis subject since routing engine is up and running.\nThe switchover is defined as a change in state of\njnxRedundancyState from master to backup or vice\nversa.\tIts value is reset when the routing engine\nis reset or rebooted.\"\"\",\n        }, # column\n        \"jnxRedundancySwitchoverTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the jnxRedundancyState\nof this subject was last switched over from master\nto backup or vice versa.  Zero if unknown or never\nswitched over since the routing engine is up and\nrunning.\"\"\",\n        }, # column\n        \"jnxRedundancySwitchoverReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neverSwitched\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"userSwitched\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"autoSwitched\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reason of the last switchover for this subject.\"\"\",\n        }, # column\n        \"jnxRedundancyKeepaliveHeartbeat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The period of sending keepalive messages between\nthe master and backup subsystems.  It is a system-wide\npreset value in seconds used by internal mastership\nresolution.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyKeepaliveTimeout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timeout period in seconds, by the keepalive \nwatchdog timer, before initiating a switch over to \nthe backup subsystem.  Zero if unavailable or \ninapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyKeepaliveElapsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The elapsed time in seconds by this subject since \nreceiving the last keepalive message from the other\nsubsystems.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyKeepaliveLoss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of losses on keepalive messages \nbetween the master and backup subsystems as perceived\nby this subject since the system is up and running.  \nZero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxRedundancyChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-MIB\", \"name\" : \"JnxChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the chassis on which the contents of this\nrow exists.\"\"\",\n        }, # column\n        \"jnxRedundancyChassisDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.14.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the chassis on which the\ncontents of this row exists.\"\"\",\n        }, # column\n        \"jnxFruTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of FRU status entries.\"\"\",\n        }, # table\n        \"jnxFruEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"jnxFruContentsIndex\",\n                \"jnxFruL1Index\",\n                \"jnxFruL2Index\",\n                \"jnxFruL3Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the FRU status table.\"\"\",\n        }, # row\n        \"jnxFruContentsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The associated jnxContentsContainerIndex in the \njnxContentsTable.\"\"\",\n        }, # column\n        \"jnxFruL1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level one index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruL2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level two index associated with this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruL3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The level three index associated with this\nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name or detailed description of this subject.\"\"\",\n        }, # column\n        \"jnxFruType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clockGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"flexiblePicConcentrator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"switchingAndForwardingModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"controlBoard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"routingEngine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"powerEntryModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"frontPanelModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"switchInterfaceBoard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"processorMezzanineBoardForSIB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"portInterfaceCard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"craftInterfacePanel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"fan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"lineCardChassis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"forwardingEngineBoard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"protectedSystemDomain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"powerDistributionUnit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"powerSupplyModule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"switchFabricBoard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"adapterCard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The FRU type for this subject.\"\"\",\n        }, # column\n        \"jnxFruSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot number of this subject.  This is equivalent\nto jnxFruL1Index in meaning.  Zero if unavailable or \ninapplicable.\"\"\",\n        }, # column\n        \"jnxFruState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"announceOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anounceOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"diagnostic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state for this subject.\"\"\",\n        }, # column\n        \"jnxFruTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature in Celsius (degrees C) of this \nsubject.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruOfflineReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"noPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"configPowerOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"configHoldInReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"cliCommand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"buttonPress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"cliRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"overtempShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"masterClockDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"singleSfmModeChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"packetSchedulingModeChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"physicalRemoval\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"unresponsiveRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"sonetClockAbsent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"rddPowerOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"majorErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"minorErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"lccHardRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"lccVersionMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"powerCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"reconnect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"overvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"pfeVersionMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"febRddCfgChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"fpcMisconfig\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"fruReconnectFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"fruFwddReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"fruFebSwitch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"fruFebOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"fruInServSoftUpgradeError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"fruChasdPowerRatingExceed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"fruConfigOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"fruServiceRestartRequest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"spuResetRequest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"spuFlowdDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"spuSpi4Down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"spuWatchdogTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"spuCoreDump\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"fpgaSpi4LinkDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"i3Spi4LinkDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"cppDisconnect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"cpuNotBoot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"spuCoreDumpComplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"rstOnSpcSpuFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"softRstOnSpcSpuFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"hwAuthenticationFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"reconnectFpcFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"fpcAppFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"fpcKernelCrash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"spuFlowdDownNoCore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"spuFlowdCoreDumpIncomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"spuFlowdCoreDumpComplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"spuIdpdDownNoCore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"spuIdpdCoreDumpIncomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"spuIdpdCoreDumpComplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"spuCoreDumpIncomplete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"spuIdpdDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"fruPfeReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"fruReconnectNotReady\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"fruSfLinkDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"fruFabricDown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"fruAntiCounterfeitRetry\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"fruFPCChassisClusterDisable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"spuFipsError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"fruFPCFabricDownOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"febCfgChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                    \"routeLocalizationRoleChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"fruFpcUnsupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"70\"\n                    },\n                    \"psdVersionMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"71\"\n                    },\n                    \"fruResetThresholdExceeded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"picBounce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"73\"\n                    },\n                    \"badVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"74\"\n                    },\n                    \"fruFPCReducedFabricBW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"75\"\n                    },\n                    \"fruAutoheal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"76\"\n                    },\n                    \"builtinPicBounce\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"77\"\n                    },\n                    \"fruFabricDegraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"78\"\n                    },\n                    \"fruFPCFabricDegradedOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"79\"\n                    },\n                    \"fruUnsupportedSlot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"80\"\n                    },\n                    \"fruRouteLocalizationMisCfg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"81\"\n                    },\n                    \"fruTypeConfigMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"82\"\n                    },\n                    \"lccModeChanged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"83\"\n                    },\n                    \"hwFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"84\"\n                    },\n                    \"fruPICOfflineOnEccErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"85\"\n                    },\n                    \"fruFpcIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"86\"\n                    },\n                    \"fruFpcFanTrayPEMIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"87\"\n                    },\n                    \"fruUnsupportedFirmware\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"88\"\n                    },\n                    \"openflowConfigChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"89\"\n                    },\n                    \"fruFpcScbIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"90\"\n                    },\n                    \"fruReUnresponsive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"91\"\n                    },\n                    \"hwError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"92\"\n                    },\n                    \"fruErrorManagerReqFPCReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"93\"\n                    },\n                    \"fruIncompatibleWithPEM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"94\"\n                    },\n                    \"fruIncompatibleWithSIB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"95\"\n                    },\n                    \"sibIncompatibleWithOtherSIB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"96\"\n                    },\n                    \"fruPfeErrors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"97\"\n                    },\n                    \"vpnLocalizationRoleChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"98\"\n                    },\n                    \"fruFpcFanTrayIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"99\"\n                    },\n                    \"fruFpcPEMIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"mixedSwitchFabric\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"101\"\n                    },\n                    \"unsupportedFabric\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"102\"\n                    },\n                    \"jamConfigError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"103\"\n                    },\n                    \"fruFpcHFanTrayIncompatible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"104\"\n                    },\n                    \"gnfIsOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"105\"\n                    },\n                    \"gnfdisconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"106\"\n                    },\n                    \"fruIncompatibleWithVersion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"107\"\n                    },\n                    \"reasonOfflineEnd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"108\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The offline reason of this subject.\"\"\",\n        }, # column\n        \"jnxFruLastPowerOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when this subject was last \npowered off.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruLastPowerOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when this subject was last \npowered on.  Zero if unavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruPowerUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time interval in 10-millisecond period\nthat this subject has been up and running\nsince the last power on time.  Zero if \nunavailable or inapplicable.\"\"\",\n        }, # column\n        \"jnxFruChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"JUNIPER-MIB\", \"name\" : \"JnxChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies the chassis on which the contents of this\nrow exists.\"\"\",\n        }, # column\n        \"jnxFruChassisDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the chassis on which the\ncontents of this row exists.\"\"\",\n        }, # column\n        \"jnxFruPsdAssignment\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.15.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PSD assignment of this subject. Zero if unavailable or\nnot applicable.\"\"\",\n        }, # column\n        \"jnxBoxKernelMemoryUsedPercent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of kernel memory used\nof this subject.  0 if unavailable or\ninapplicable.\"\"\",\n        }, # scalar\n        \"jnxBoxSystemDomainType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rootSystemDomain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"protectedSystemDomain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system domain type of this subject, notApplicable will\nbe returned if this feature is not supported.\"\"\",\n        }, # scalar\n        \"jnxBoxPersonality\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The personality of the box, indicating which product line it is currently acting as\nfor example, 'MX40'.\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"notifications\" : {\n        \"jnxPowerSupplyFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPowerSupplyFailure trap signifies that\nthe SNMP entity, acting in an agent role, has\ndetected that the specified power supply in the\nchassis has been in the failure (bad DC output) \ncondition.\"\"\",\n        }, # notification\n        \"jnxFanFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFanFailure trap signifies that the SNMP\nentity, acting in an agent role, has detected\nthat the specified cooling fan or impeller in \nthe chassis has been in the failure (not spinning) \ncondition.\"\"\",\n        }, # notification\n        \"jnxOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxOverTemperature trap signifies that the \nSNMP entity, acting in an agent role, has \ndetected that the specified hardware component\nin the chassis has experienced over temperature\ncondition.\"\"\",\n        }, # notification\n        \"jnxRedundancySwitchover\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxRedundancyContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyConfig\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancyState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancySwitchoverCount\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancySwitchoverTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxRedundancySwitchoverReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxRedundancySwitchover trap signifies that \nthe SNMP entity, acting in an agent role, has \ndetected that the specified hardware component\nin the chassis has experienced a redundancy \nswitchover event defined as a change in state\nof jnxRedundancyState from master to backup or\nvice versa.\"\"\",\n        }, # notification\n        \"jnxFruRemoval\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruRemoval trap signifies that the SNMP \nentity, acting in an agent role, has detected \nthat the specified FRU (Field Replaceable Unit)\nhas been removed from the chassis.\"\"\",\n        }, # notification\n        \"jnxFruInsertion\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruInsertion trap signifies that the SNMP \nentity,\tacting in an agent role, has detected that\nthe specified FRU (Field Replaceable Unit) has been \ninserted into the chassis.\"\"\",\n        }, # notification\n        \"jnxFruPowerOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruOfflineReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOff\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruPowerOff trap signifies that the SNMP \nentity, acting in an agent role, has detected \nthat the specified FRU (Field Replaceable Unit)\nhas been powered off in the chassis.\"\"\",\n        }, # notification\n        \"jnxFruPowerOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruOfflineReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOff\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruPowerOn trap signifies that the SNMP \nentity,\tacting in an agent role, has detected that\nthe specified FRU (Field Replaceable Unit) has been \npowered on in the chassis.\"\"\",\n        }, # notification\n        \"jnxFruFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This indicates the specified FRU (Field Replaceable Unit)\nhas failed in the chassis. Most probably this is due toi\nsome hard error such as fru is not powering up or not\nable to load ukernel. In these cases, fru is replaced.\"\"\",\n        }, # notification\n        \"jnxFruOffline\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruOfflineReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOff\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruOffline trap signifies that the SNMP\nentity, acting in an agent role, has detected\nthat the specified FRU (Field Replaceable Unit)\nhas gone offline in the chassis.\"\"\",\n        }, # notification\n        \"jnxFruOnline\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruOnline trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified FRU (Field Replaceable Unit) has\ngone online in the chassis.\"\"\",\n        }, # notification\n        \"jnxFruCheck\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruCheck trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified FRU (Field Replaceable Unit) has\nencountered some operational errors and gone into\ncheck state in the chassis.\"\"\",\n        }, # notification\n        \"jnxFEBSwitchover\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFEBSwitchover trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified FEB (Forwarding Engine Board) has\nswitched over.\"\"\",\n        }, # notification\n        \"jnxHardDiskFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxHardDiskFailed trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe Disk in the specified Routing Engine has\nencountered some operational errors and gone into\nfailed state in the chassis.\"\"\",\n        }, # notification\n        \"jnxHardDiskMissing\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A DiskMissing trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nhard disk in the specified outing Engine is missing\nfrom boot device list.\"\"\",\n        }, # notification\n        \"jnxBootFromBackup\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxBootFromBackup trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified  routing-engine/member has booted from\nthe back up root partition\"\"\",\n        }, # notification\n        \"jnxFmLinkErr\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A LinkErr trap signifies that the SNMP\nentity, acting in an agent role, has detected\nlink errors.\"\"\",\n        }, # notification\n        \"jnxFmCellDropErr\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A CellDropErr trap signifies that the SNMP\nentity, acting in an agent role, has detected \ncell drop errors.\"\"\",\n        }, # notification\n        \"jnxExtSrcLockLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ExtSrcLockLost trap signifies that the SNMP\nentity, acting in an agent role, has detected that\na lock for an external clock source has been lost.\"\"\",\n        }, # notification\n        \"jnxPlaneOffline\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruOfflineReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOff\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruLastPowerOn\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPlaneOffline trap signifies that the SNMP\nentity, acting in an agent role, has detected\nthat the specified Fabric plane\nhas gone offline in the chassis.\"\"\",\n        }, # notification\n        \"jnxPlaneOnline\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPlaneOnline trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified Fabric Plane has\ngone online in the chassis.\"\"\",\n        }, # notification\n        \"jnxPlaneCheck\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPlaneCheck trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified Fabric plane has\nencountered some operational errors and gone into\ncheck state in the chassis.\"\"\",\n        }, # notification\n        \"jnxPlaneFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPlaneCheck trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified Fabric plane has\nencountered some operational errors and gone into\nfault state in the chassis.\"\"\",\n        }, # notification\n        \"jnxPowerSupplyInputFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPowerSupplyInputFailure trap signifies that\nthe SNMP entity, acting in an agent role, has\ndetected that the specified power supply's input feed \nin the chassis has been in the failure condition.\"\"\",\n        }, # notification\n        \"jnxFmAsicErr\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFmAsicErr trap signifies that the SNMP\nentity, acting in an agent role, has detected \nerrors in a switching device within the fabric.\"\"\",\n        }, # notification\n        \"jnxMountVarOffHardDiskFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxMountVarOffHardDiskFailed signifies that the SNMP\nentity, acting in an agent role, has detected that\nmount of /var failed off harddisk, emergency /var created.\"\"\",\n        }, # notification\n        \"jnxFmHealthChkErr\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.1.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A HealthChkErr trap signifies that the SNMP\nentity, acting in an agent role, has detected \nhealth check errors.\"\"\",\n        }, # notification\n        \"jnxPowerSupplyOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPowerSupplyOK trap signifies that the \nSNMP entity, acting in an agent role, has\ndetected that the specified power supply in the\nchassis has recovered from the failure (bad DC output) \ncondition.\"\"\",\n        }, # notification\n        \"jnxFanOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFanOK trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified cooling fan or impeller in the chassis\nhas recovered from the failure (not spinning) condition.\"\"\",\n        }, # notification\n        \"jnxTemperatureOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxTemperatureOK trap signifies that the \nSNMP entity, acting in an agent role, has \ndetected that the specified hardware component\nin the chassis has recovered from over temperature\ncondition.\"\"\",\n        }, # notification\n        \"jnxFruOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxFruOK trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe specified FRU (Field Replaceable Unit) has\nrecovered from previous operational errors and it\nis in ok state in the chassis.\"\"\",\n        }, # notification\n        \"jnxExtSrcLockAcquired\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A ExtSrcLockAcquired trap signifies that the SNMP\nentity, acting in an agent role, has detected that\na lock for an external clock source has been acquired.\"\"\",\n        }, # notification\n        \"jnxHardDiskOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxFruContentsIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxFruSlot\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxHardDiskOK trap signifies that the SNMP\nentity, acting in an agent role, has detected that\nthe Disk in the specified Routing Engine has\nrecovered from the failure condition.\"\"\",\n        }, # notification\n        \"jnxPowerSupplyInputOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"JUNIPER-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2636.4.2.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"jnxContentsContainerIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL1Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL2Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsL3Index\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxContentsDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n                \"jnxOperatingState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"JUNIPER-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A jnxPowerSupplyInputOK trap signifies that the \nSNMP entity, acting in an agent role, has detected \nthat the specified power supply's input feed in the\nchassis has recovered from the failure condition.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/LLDP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python LLDP-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/lldp.mib\"\n\nMIB = {\n    \"moduleName\" : \"LLDP-MIB\",\n\n    \"LLDP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IEEE 802.1 Working Group\"\"\",\n        \"contact\" : \n            \"\"\"  WG-URL: http://grouper.ieee.org/groups/802/1/index.html\nWG-EMail: stds-802-1@ieee.org\n\n Contact: Paul Congdon\n  Postal: Hewlett-Packard Company\n          8000 Foothills Blvd. \n          Roseville, CA 95747\n          USA\n     Tel: +1-916-785-5753\n  E-mail: paul_congdon@hp.com\"\"\",\n        \"description\" :\n            \"\"\"Management Information Base module for LLDP configuration,\nstatistics, local system data and remote systems data\ncomponents.\n\nCopyright (C) IEEE (2005).  This version of this MIB module\nis published as subclause 12.1 of IEEE Std 802.1AB-2005;\nsee the standard itself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2005-05-06 00:00\",\n                \"description\" :\n                    \"\"\"Published as part of IEEE Std 802.1AB-2005 initial version.\"\"\",\n            },\n        ),\n        \"identity node\" : \"lldpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"RMON2-MIB\", \"name\" : \"TimeFilter\"},\n        {\"module\" : \"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n        {\"module\" : \"IANA-ADDRESS-FAMILY-NUMBERS-MIB\", \"name\" : \"AddressFamilyNumbers\"},\n    ),\n\n    \"typedefs\" : {\n        \"LldpChassisIdSubtype\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"chassisComponent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"interfaceAlias\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"portComponent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"macAddress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"networkAddress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"interfaceName\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"local\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the source of a chassis identifier.\n\nThe enumeration 'chassisComponent(1)' represents a chassis\nidentifier based on the value of entPhysicalAlias object\n(defined in IETF RFC 2737) for a chassis component (i.e.,\nan entPhysicalClass value of 'chassis(3)').\n\nThe enumeration 'interfaceAlias(2)' represents a chassis\nidentifier based on the value of ifAlias object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\n\nThe enumeration 'portComponent(3)' represents a chassis\nidentifier based on the value of entPhysicalAlias object\n(defined in IETF RFC 2737) for a port or backplane\ncomponent (i.e., entPhysicalClass value of 'port(10)' or\n'backplane(4)'), within the containing chassis.\n\nThe enumeration 'macAddress(4)' represents a chassis\nidentifier based on the value of a unicast source address\n(encoded in network byte order and IEEE 802.3 canonical bit\norder), of a port on the containing chassis as defined in\nIEEE Std 802-2001.\n\nThe enumeration 'networkAddress(5)' represents a chassis\nidentifier based on a network address, associated with\na particular chassis.  The encoded address is actually\ncomposed of two fields.  The first field is a single octet,\nrepresenting the IANA AddressFamilyNumbers value for the\nspecific address type, and the second field is the network\naddress value.\n\nThe enumeration 'interfaceName(6)' represents a chassis\nidentifier based on the value of ifName object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\n\nThe enumeration 'local(7)' represents a chassis identifier\nbased on a locally defined value.\"\"\",\n        },\n        \"LldpChassisId\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the format of a chassis identifier string.\nObjects of this type are always used with an associated\nLldpChassisIdSubtype object, which identifies the format of\nthe particular LldpChassisId object instance.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'chassisComponent(1)', then the octet string identifies\na particular instance of the entPhysicalAlias object\n(defined in IETF RFC 2737) for a chassis component (i.e.,\nan entPhysicalClass value of 'chassis(3)').\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'interfaceAlias(2)', then the octet string identifies\na particular instance of the ifAlias object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\nIf the particular ifAlias object does not contain any values,\nanother chassis identifier type should be used.\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'portComponent(3)', then the octet string identifies a\nparticular instance of the entPhysicalAlias object (defined\nin IETF RFC 2737) for a port or backplane component within\nthe containing chassis.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'macAddress(4)', then this string identifies a particular\nunicast source address (encoded in network byte order and\nIEEE 802.3 canonical bit order), of a port on the containing\nchassis as defined in IEEE Std 802-2001.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'networkAddress(5)', then this string identifies a particular\nnetwork address, encoded in network byte order, associated\nwith one or more ports on the containing chassis.  The first\noctet contains the IANA Address Family Numbers enumeration\nvalue for the specific address type, and octets 2 through\nN contain the network address value in network byte order.\n\nIf the associated LldpChassisIdSubtype object has a value\nof 'interfaceName(6)', then the octet string identifies\na particular instance of the ifName object (defined in\nIETF RFC 2863) for an interface on the containing chassis.\nIf the particular ifName object does not contain any values,\nanother chassis identifier type should be used.\n\nIf the associated LldpChassisIdSubtype object has a value of\n'local(7)', then this string identifies a locally assigned\nChassis ID.\"\"\",\n        },\n        \"LldpPortIdSubtype\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"interfaceAlias\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"portComponent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"macAddress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"networkAddress\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"interfaceName\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"agentCircuitId\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"local\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the source of a particular type of port\nidentifier used in the LLDP MIB.\n\nThe enumeration 'interfaceAlias(1)' represents a port\nidentifier based on the ifAlias MIB object, defined in IETF\nRFC 2863.\n\nThe enumeration 'portComponent(2)' represents a port\nidentifier based on the value of entPhysicalAlias (defined in\nIETF RFC 2737) for a port component (i.e., entPhysicalClass\nvalue of 'port(10)'), within the containing chassis.\n\nThe enumeration 'macAddress(3)' represents a port identifier\nbased on a unicast source address (encoded in network\nbyte order and IEEE 802.3 canonical bit order), which has\nbeen detected by the agent and associated with a particular\nport (IEEE Std 802-2001).\n\nThe enumeration 'networkAddress(4)' represents a port\nidentifier based on a network address, detected by the agent\nand associated with a particular port.\n\nThe enumeration 'interfaceName(5)' represents a port\nidentifier based on the ifName MIB object, defined in IETF\nRFC 2863.\n\nThe enumeration 'agentCircuitId(6)' represents a port\nidentifier based on the agent-local identifier of the circuit\n(defined in RFC 3046), detected by the agent and associated\nwith a particular port.\n\nThe enumeration 'local(7)' represents a port identifier\nbased on a value locally assigned.\"\"\",\n        },\n        \"LldpPortId\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the format of a port identifier string.\nObjects of this type are always used with an associated\nLldpPortIdSubtype object, which identifies the format of the\nparticular LldpPortId object instance.\n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceAlias(1)', then the octet string identifies a\nparticular instance of the ifAlias object (defined in IETF\nRFC 2863).  If the particular ifAlias object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'portComponent(2)', then the octet string identifies a\nparticular instance of the entPhysicalAlias object (defined\nin IETF RFC 2737) for a port or backplane component.\n\nIf the associated LldpPortIdSubtype object has a value of\n'macAddress(3)', then this string identifies a particular\nunicast source address (encoded in network byte order\nand IEEE 802.3 canonical bit order) associated with the port\n(IEEE Std 802-2001).\n\nIf the associated LldpPortIdSubtype object has a value of\n'networkAddress(4)', then this string identifies a network\naddress associated with the port.  The first octet contains\nthe IANA AddressFamilyNumbers enumeration value for the\nspecific address type, and octets 2 through N contain the\nnetworkAddress address value in network byte order.\n\nIf the associated LldpPortIdSubtype object has a value of\n'interfaceName(5)', then the octet string identifies a\nparticular instance of the ifName object (defined in IETF\nRFC 2863).  If the particular ifName object does not contain\nany values, another port identifier type should be used.\n\nIf the associated LldpPortIdSubtype object has a value of\n'agentCircuitId(6)', then this string identifies a agent-local\nidentifier of the circuit (defined in RFC 3046).\n\nIf the associated LldpPortIdSubtype object has a value of\n'local(7)', then this string identifies a locally\nassigned port ID.\"\"\",\n        },\n        \"LldpManAddrIfSubtype\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"ifIndex\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"systemPortNumber\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the basis of a particular type of\ninterface associated with the management address.\n\nThe enumeration 'unknown(1)' represents the case where the\ninterface is not known.\n\nThe enumeration 'ifIndex(2)' represents interface identifier\nbased on the ifIndex MIB object.\n\nThe enumeration 'systemPortNumber(3)' represents interface\nidentifier based on the system port numbering convention.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.5\"\"\",\n        },\n        \"LldpManAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"31\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"31\"\n            },\n            \"description\" :\n                \"\"\"The value of a management address associated with the LLDP\nagent that may be used to reach higher layer entities to\nassist discovery by network management.\n\nIt should be noted that appropriate security credentials,\nsuch as SNMP engineId, may be required to access the LLDP\nagent using a management address.  These necessary credentials\nshould be known by the network management and the objects\nassociated with the credentials are not included in the\nLLDP agent.\"\"\",\n        },\n        \"LldpSystemCapabilitiesMap\" : {\n            \"basetype\" : \"Bits\",\n            \"status\" : \"current\",\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"repeater\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"bridge\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"wlanAccessPoint\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"router\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"telephone\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"docsisCableDevice\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"stationOnly\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"description\" :\n                \"\"\"This TC describes the system capabilities.\n\nThe bit 'other(0)' indicates that the system has capabilities\nother than those listed below.\n\nThe bit 'repeater(1)' indicates that the system has repeater\ncapability.\n\nThe bit 'bridge(2)' indicates that the system has bridge\ncapability.\n\nThe bit 'wlanAccessPoint(3)' indicates that the system has \nWLAN access point capability.\n\nThe bit 'router(4)' indicates that the system has router\ncapability.\n\nThe bit 'telephone(5)' indicates that the system has telephone\ncapability.\n\nThe bit 'docsisCableDevice(6)' indicates that the system has\nDOCSIS Cable Device capability (IETF RFC 2669 & 2670).\n\nThe bit 'stationOnly(7)' indicates that the system has only\nstation capability and nothing else.\"\"\",\n        },\n        \"LldpPortNumber\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"4096\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"4096\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"Each port contained in the chassis (that is known to the\nLLDP agent) is uniquely identified by a port number.\n\nA port number has no mandatory relationship to an\nInterfaceIndex object (of the interfaces MIB, IETF RFC 2863).\nIf the LLDP agent is a IEEE 802.1D, IEEE 802.1Q bridge, the\nLldpPortNumber will have the same value as the dot1dBasePort\nobject (defined in IETF RFC 1493) associated corresponding\nbridge port.  If the system hosting LLDP agent is not an\nIEEE 802.1D or an IEEE 802.1Q bridge, the LldpPortNumber\nwill have the same value as the corresponding interface's\nInterfaceIndex object.\n\nPort numbers should be in the range of 1 and 4096 since a\nparticular port is also represented by the corresponding\nport number bit in LldpPortList.\"\"\",\n        },\n        \"LldpPortList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"512\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"512\"\n            },\n            \"description\" :\n                \"\"\"Each octet within this value specifies a set of eight ports,\nwith the first octet specifying ports 1 through 8, the second\noctet specifying ports 9 through 16, etc.  Within each octet,\nthe most significant bit represents the lowest numbered port,\nand the least significant bit represents the highest numbered\nport.  Thus, each port of the system is represented by a\nsingle bit within the value of this object.  If that bit has\na value of '1' then that port is included in the set of ports;\nthe port is not included if its bit has a value of '0'.\"\"\",\n            \"reference>\" :\n                \"\"\"IETF RFC 2674 section 5\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"lldpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2\",\n            \"status\" : \"current\",\n        }, # node\n        \"lldpNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.0\",\n        }, # node\n        \"lldpNotificationPrefix\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.0.0\",\n        }, # node\n        \"lldpObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1\",\n        }, # node\n        \"lldpConfiguration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1\",\n        }, # node\n        \"lldpMessageTxInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"32768\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"32768\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"30\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The interval at which LLDP frames are transmitted on\nbehalf of this LLDP agent.\n\nThe default value for lldpMessageTxInterval object is\n30 seconds.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.3.3\"\"\",\n        }, # scalar\n        \"lldpMessageTxHoldMultiplier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"4\",\n            \"description\" :\n                \"\"\"The time-to-live value expressed as a multiple of the\nlldpMessageTxInterval object.  The actual time-to-live value\nused in LLDP frames, transmitted on behalf of this LLDP agent,\ncan be expressed by the following formula: TTL = min(65535,\n(lldpMessageTxInterval * lldpMessageTxHoldMultiplier)) For\nexample, if the value of lldpMessageTxInterval is '30', and\nthe value of lldpMessageTxHoldMultiplier is '4', then the\nvalue '120' is encoded in the TTL field in the LLDP header.\n\nThe default value for lldpMessageTxHoldMultiplier object is 4.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.3.3\"\"\",\n        }, # scalar\n        \"lldpReinitDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"2\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The lldpReinitDelay indicates the delay (in units of\nseconds) from when lldpPortConfigAdminStatus object of a\nparticular port becomes 'disabled' until re-initialization\nwill be attempted.\n\nThe default value for lldpReintDelay object is two seconds.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.3.3\"\"\",\n        }, # scalar\n        \"lldpTxDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"8192\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"8192\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"2\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The lldpTxDelay indicates the delay (in units\nof seconds) between successive LLDP frame transmissions \ninitiated by value/status changes in the LLDP local systems\nMIB.  The recommended value for the lldpTxDelay is set by the\nfollowing  formula:\n\n   1 <= lldpTxDelay <= (0.25 * lldpMessageTxInterval)\n\nThe default value for lldpTxDelay object is two seconds.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.3.3\"\"\",\n        }, # scalar\n        \"lldpNotificationInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"3600\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"3600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"5\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"This object controls the transmission of LLDP notifications.\n\nthe agent must not generate more than one lldpRemTablesChange\nnotification-event in the indicated period, where a\n'notification-event' is the transmission of a single\nnotification PDU type to a list of notification destinations.\nIf additional changes in lldpRemoteSystemsData object\ngroups occur within the indicated throttling period,\nthen these trap- events must be suppressed by the\nagent. An NMS should periodically check the value of\nlldpStatsRemTableLastChangeTime to detect any missed\nlldpRemTablesChange notification-events, e.g. due to\nthrottling or transmission loss.\n\nIf notification transmission is enabled for particular ports,\nthe suggested default throttling period is 5 seconds.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n        }, # scalar\n        \"lldpPortConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table that controls LLDP frame transmission on individual\nports.\"\"\",\n        }, # table\n        \"lldpPortConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpPortConfigPortNum\",\n            ],\n            \"description\" :\n                \"\"\"LLDP configuration information for a particular port.\nThis configuration parameter controls the transmission and\nthe reception of LLDP frames on those ports whose rows are\ncreated in this table.\"\"\",\n        }, # row\n        \"lldpPortConfigPortNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortNumber\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value used to identify the port component\n(contained in the local chassis with the LLDP agent)\nassociated with this entry.\n\nThe value of this object is used as a port index to the\nlldpPortConfigTable.\"\"\",\n        }, # column\n        \"lldpPortConfigAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"txOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rxOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"txAndRx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"txAndRx\",\n            \"description\" :\n                \"\"\"The administratively desired status of the local LLDP agent.\n\nIf the associated lldpPortConfigAdminStatus object has a\nvalue of 'txOnly(1)', then LLDP agent will transmit LLDP\nframes on this port and it will not store any information\nabout the remote systems connected.\n\nIf the associated lldpPortConfigAdminStatus object has a\nvalue of 'rxOnly(2)', then the LLDP agent will receive,\nbut it will not transmit LLDP frames on this port.\n\nIf the associated lldpPortConfigAdminStatus object has a\nvalue of 'txAndRx(3)', then the LLDP agent will transmit\nand receive LLDP frames on this port.\n\nIf the associated lldpPortConfigAdminStatus object has a\nvalue of 'disabled(4)', then LLDP agent will not transmit or\nreceive LLDP frames on this port.  If there is remote systems\ninformation which is received on this port and stored in\nother tables, before the port's lldpPortConfigAdminStatus\nbecomes disabled, then the information will naturally age out.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.1\"\"\",\n        }, # column\n        \"lldpPortConfigNotificationEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"The lldpPortConfigNotificationEnable controls, on a per\nport basis,  whether or not notifications from the agent\nare enabled. The value true(1) means that notifications are\nenabled; the value false(2) means that they are not.\"\"\",\n        }, # column\n        \"lldpPortConfigTLVsTxEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"portDesc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sysName\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sysDesc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sysCap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"()\",\n            \"description\" :\n                \"\"\"The lldpPortConfigTLVsTxEnable, defined as a bitmap,\nincludes the basic set of LLDP TLVs whose transmission is\nallowed on the local LLDP agent by the network management.\nEach bit in the bitmap corresponds to a TLV type associated\nwith a specific optional TLV.\n\nIt should be noted that the organizationally-specific TLVs\nare excluded from the lldpTLVsTxEnable bitmap.\n\nLLDP Organization Specific Information Extension MIBs should\nhave similar configuration object to control transmission\nof their organizationally defined TLVs.\n\nThe bit 'portDesc(0)' indicates that LLDP agent should\ntransmit 'Port Description TLV'.\n\nThe bit 'sysName(1)' indicates that LLDP agent should transmit\n'System Name TLV'.\n\nThe bit 'sysDesc(2)' indicates that LLDP agent should transmit\n'System Description TLV'.\n\nThe bit 'sysCap(3)' indicates that LLDP agent should transmit\n'System Capabilities TLV'.\n\nThere is no bit reserved for the management address TLV type\nsince transmission of management address TLVs are controlled\nby another object, lldpConfigManAddrTable.\n\nThe default value for lldpPortConfigTLVsTxEnable object is\nempty set, which means no enumerated values are set.\n\nThe value of this object must be restored from non-volatile\nstorage after a re-initialization of the management system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.2.1.1\"\"\",\n        }, # column\n        \"lldpConfigManAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table that controls selection of LLDP management address\nTLV instances to be transmitted on individual ports.\"\"\",\n        }, # table\n        \"lldpConfigManAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"LLDP-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"lldpLocManAddrEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"LLDP configuration information that specifies the set\nof ports (represented as a PortList) on which the local\nsystem management address instance will be transmitted.\n\nThis configuration object augments the lldpLocManAddrEntry,\ntherefore it is only present along with the management\naddress instance contained in the associated\nlldpLocManAddrEntry entry.\n\nEach active lldpConfigManAddrEntry must be restored from\nnon-volatile and re-created (along with the corresponding\nlldpLocManAddrEntry) after a re-initialization of the\nmanagement system.\"\"\",\n        }, # row\n        \"lldpConfigManAddrPortsTxEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"\",\n            \"description\" :\n                \"\"\"A set of ports that are identified by a PortList, in which\neach port is represented as a bit.  The corresponding local\nsystem management address instance will be transmitted on the\nmember ports of the lldpManAddrPortsTxEnable.  \n\nThe default value for lldpConfigManAddrPortsTxEnable object\nis empty binary string, which means no ports are specified\nfor advertising indicated management address instance.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.2.1.1\"\"\",\n        }, # column\n        \"lldpStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2\",\n        }, # node\n        \"lldpStatsRemTablesLastChangeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime object (defined in IETF RFC 3418)\nat the time an entry is created, modified, or deleted in the\nin tables associated with the lldpRemoteSystemsData objects\nand all LLDP extension objects associated with remote systems.\n\nAn NMS can use this object to reduce polling of the\nlldpRemoteSystemsData objects.\"\"\",\n        }, # scalar\n        \"lldpStatsRemTablesInserts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"table entries\",\n            \"description\" :\n                \"\"\"The number of times the complete set of information\nadvertised by a particular MSAP has been inserted into tables\ncontained in lldpRemoteSystemsData and lldpExtensions objects.\n\nThe complete set of information received from a particular\nMSAP should be inserted into related tables.  If partial\ninformation cannot be inserted for a reason such as lack\nof resources, all of the complete set of information should\nbe removed.\n\nThis counter should be incremented only once after the\ncomplete set of information is successfully recorded\nin all related tables.  Any failures during inserting\ninformation set which result in deletion of previously\ninserted information should not trigger any changes in\nlldpStatsRemTablesInserts since the insert is not completed\nyet or or in lldpStatsRemTablesDeletes, since the deletion\nwould only be a partial deletion. If the failure was the\nresult of lack of resources, the lldpStatsRemTablesDrops\ncounter should be incremented once.\"\"\",\n        }, # scalar\n        \"lldpStatsRemTablesDeletes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"table entries\",\n            \"description\" :\n                \"\"\"The number of times the complete set of information\nadvertised by a particular MSAP has been deleted from\ntables contained in lldpRemoteSystemsData and lldpExtensions\nobjects.\n\nThis counter should be incremented only once when the\ncomplete set of information is completely deleted from all\nrelated tables.  Partial deletions, such as deletion of\nrows associated with a particular MSAP from some tables,\nbut not from all tables are not allowed, thus should not\nchange the value of this counter.\"\"\",\n        }, # scalar\n        \"lldpStatsRemTablesDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"table entries\",\n            \"description\" :\n                \"\"\"The number of times the complete set of information\nadvertised by a particular MSAP could not be entered into\ntables contained in lldpRemoteSystemsData and lldpExtensions\nobjects because of insufficient resources.\"\"\",\n        }, # scalar\n        \"lldpStatsRemTablesAgeouts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the complete set of information\nadvertised by a particular MSAP has been deleted from tables\ncontained in lldpRemoteSystemsData and lldpExtensions objects\nbecause the information timeliness interval has expired.\n\nThis counter should be incremented only once when the complete\nset of information is completely invalidated (aged out)\nfrom all related tables.  Partial aging, similar to deletion\ncase, is not allowed, and thus, should not change the value\nof this counter.\"\"\",\n        }, # scalar\n        \"lldpStatsTxPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing LLDP transmission statistics for\nindividual ports.  Entries are not required to exist in\nthis table while the lldpPortConfigEntry object is equal to\n'disabled(4)'.\"\"\",\n        }, # table\n        \"lldpStatsTxPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpStatsTxPortNum\",\n            ],\n            \"description\" :\n                \"\"\"LLDP frame transmission statistics for a particular port.  \nThe port must be contained in the same chassis as the\nLLDP agent.\n\nAll counter values in a particular entry shall be\nmaintained on a continuing basis and shall not be deleted\nupon expiration of rxInfoTTL timing counters in the LLDP\nremote systems MIB of the receipt of a shutdown frame from\na remote LLDP agent.\n\nAll statistical counters associated with a particular\nport on the local LLDP agent become frozen whenever the\nadminStatus is disabled for the same port.\"\"\",\n        }, # row\n        \"lldpStatsTxPortNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortNumber\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value used to identify the port component\n(contained in the local chassis with the LLDP agent)\nassociated with this entry.\n\nThe value of this object is used as a port index to the\nlldpStatsTable.\"\"\",\n        }, # column\n        \"lldpStatsTxPortFramesTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of LLDP frames transmitted by this LLDP agent\non the indicated port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.1\"\"\",\n        }, # column\n        \"lldpStatsRxPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing LLDP reception statistics for individual\nports.  Entries are not required to exist in this table while\nthe lldpPortConfigEntry object is equal to 'disabled(4)'.\"\"\",\n        }, # table\n        \"lldpStatsRxPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpStatsRxPortNum\",\n            ],\n            \"description\" :\n                \"\"\"LLDP frame reception statistics for a particular port.\nThe port must be contained in the same chassis as the\nLLDP agent.\n\nAll counter values in a particular entry shall be\nmaintained on a continuing basis and shall not be deleted\nupon expiration of rxInfoTTL timing counters in the LLDP\nremote systems MIB of the receipt of a shutdown frame from\na remote LLDP agent.\n\nAll statistical counters associated with a particular\nport on the local LLDP agent become frozen whenever the\nadminStatus is disabled for the same port.\"\"\",\n        }, # row\n        \"lldpStatsRxPortNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortNumber\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value used to identify the port component\n(contained in the local chassis with the LLDP agent)\nassociated with this entry.\n\nThe value of this object is used as a port index to the\nlldpStatsTable.\"\"\",\n        }, # column\n        \"lldpStatsRxPortFramesDiscardedTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of LLDP frames received by this LLDP agent on\nthe indicated port, and then discarded for any reason.\nThis counter can provide an indication that LLDP header\nformating problems may exist with the local LLDP agent in\nthe sending system or that LLDPDU validation problems may\nexist with the local LLDP agent in the receiving system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpStatsRxPortFramesErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of invalid LLDP frames received by this LLDP\nagent on the indicated port, while this LLDP agent is enabled.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpStatsRxPortFramesTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid LLDP frames received by this LLDP agent\non the indicated port, while this LLDP agent is enabled.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpStatsRxPortTLVsDiscardedTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of LLDP TLVs discarded for any reason by this LLDP\nagent on the indicated port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpStatsRxPortTLVsUnrecognizedTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of LLDP TLVs received on the given port that\nare not recognized by this LLDP agent on the indicated port.\n\nAn unrecognized TLV is referred to as the TLV whose type value\nis in the range of reserved TLV types (000 1001 - 111 1110)\nin Table 9.1 of IEEE Std 802.1AB-2005.  An unrecognized\nTLV may be a basic management TLV from a later LLDP version.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpStatsRxPortAgeoutsTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.2.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"ZeroBasedCounter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The counter that represents the number of age-outs that\noccurred on a given port.  An age-out is the number of\ntimes the complete set of information advertised by a\nparticular MSAP has been deleted from tables contained in\nlldpRemoteSystemsData and lldpExtensions objects because\nthe information timeliness interval has expired.\n\nThis counter is similar to lldpStatsRemTablesAgeouts, except\nthat the counter is on a per port basis.  This enables NMS to\npoll tables associated with the lldpRemoteSystemsData objects\nand all LLDP extension objects associated with remote systems\non the indicated port only.\n\nThis counter should be set to zero during agent initialization\nand its value should not be saved in non-volatile storage.\nWhen a port's admin status changes from 'disabled' to\n'rxOnly', 'txOnly' or 'txAndRx', the counter associated with\nthe same port should reset to 0.  The agent should also flush\nall remote system information associated with the same port.\n\nThis counter should be incremented only once when the\ncomplete set of information is invalidated (aged out) from\nall related tables on a particular port.  Partial aging\nis not allowed, and thus, should not change the value of\nthis counter.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.5.2.2\"\"\",\n        }, # column\n        \"lldpLocalSystemData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3\",\n        }, # node\n        \"lldpLocChassisIdSubtype\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpChassisIdSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of encoding used to identify the chassis\nassociated with the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.2.2\"\"\",\n        }, # scalar\n        \"lldpLocChassisId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the chassis component\nassociated with the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.2.3\"\"\",\n        }, # scalar\n        \"lldpLocSysName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the system name of the\nlocal system.  If the local agent supports IETF RFC 3418,\nlldpLocSysName object should have the same value of sysName\nobject.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.6.2\"\"\",\n        }, # scalar\n        \"lldpLocSysDesc\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the system description\nof the local system.  If the local agent supports IETF RFC 3418,\nlldpLocSysDesc object should have the same value of sysDesc\nobject.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.7.2\"\"\",\n        }, # scalar\n        \"lldpLocSysCapSupported\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpSystemCapabilitiesMap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bitmap value used to identify which system capabilities\nare supported on the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.8.1\"\"\",\n        }, # scalar\n        \"lldpLocSysCapEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpSystemCapabilitiesMap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bitmap value used to identify which system capabilities\nare enabled on the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.8.2\"\"\",\n        }, # scalar\n        \"lldpLocPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one or more rows per port information\nassociated with the local system known to this agent.\"\"\",\n        }, # table\n        \"lldpLocPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpLocPortNum\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular port component.\n\nEntries may be created and deleted in this table by the\nagent.\"\"\",\n        }, # row\n        \"lldpLocPortNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortNumber\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value used to identify the port component\n(contained in the local chassis with the LLDP agent)\nassociated with this entry.\n\nThe value of this object is used as a port index to the\nlldpLocPortTable.\"\"\",\n        }, # column\n        \"lldpLocPortIdSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortIdSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port identifier encoding used in the associated\n'lldpLocPortId' object.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.3.2\"\"\",\n        }, # column\n        \"lldpLocPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the port component\nassociated with a given port in the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.3.3\"\"\",\n        }, # column\n        \"lldpLocPortDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the 802 LAN station's port\ndescription associated with the local system.  If the local\nagent supports IETF RFC 2863, lldpLocPortDesc object should\nhave the same value of ifDescr object.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.5.2\"\"\",\n        }, # column\n        \"lldpLocManAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains management address information on the\nlocal system known to this agent.\"\"\",\n        }, # table\n        \"lldpLocManAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpLocManAddrSubtype\",\n                \"lldpLocManAddr\",\n            ],\n            \"description\" :\n                \"\"\"Management address information about a particular chassis\ncomponent.  There may be multiple management addresses\nconfigured on the system identified by a particular\nlldpLocChassisId.  Each management address should have\ndistinct 'management address type' (lldpLocManAddrSubtype) and\n'management address' (lldpLocManAddr.)\n\nEntries may be created and deleted in this table by the\nagent.\"\"\",\n        }, # row\n        \"lldpLocManAddrSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANA-ADDRESS-FAMILY-NUMBERS-MIB\", \"name\" : \"AddressFamilyNumbers\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of management address identifier encoding used in\nthe associated 'lldpLocManagmentAddr' object.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.3\"\"\",\n        }, # column\n        \"lldpLocManAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpManAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The string value used to identify the management address\ncomponent associated with the local system.  The purpose of\nthis address is to contact the management entity.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.4\"\"\",\n        }, # column\n        \"lldpLocManAddrLen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total length of the management address subtype and the\nmanagement address fields in LLDPDUs transmitted by the\nlocal LLDP agent.\n\nThe management address length field is needed so that the\nreceiving systems that do not implement SNMP will not be\nrequired to implement an iana family numbers/address length\nequivalency table in order to decode the management adress.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.2\"\"\",\n        }, # column\n        \"lldpLocManAddrIfSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpManAddrIfSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enumeration value that identifies the interface numbering\nmethod used for defining the interface number, associated\nwith the local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.5\"\"\",\n        }, # column\n        \"lldpLocManAddrIfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer value used to identify the interface number\nregarding the management address component associated with\nthe local system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.6\"\"\",\n        }, # column\n        \"lldpLocManAddrOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.3.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The OID value used to identify the type of hardware component\nor protocol entity associated with the management address\nadvertised by the local system agent.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.8\"\"\",\n        }, # column\n        \"lldpRemoteSystemsData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4\",\n        }, # node\n        \"lldpRemTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one or more rows per physical network\nconnection known to this agent.  The agent may wish to ensure\nthat only one lldpRemEntry is present for each local port,\nor it may choose to maintain multiple lldpRemEntries for\nthe same local port.\n\nThe following procedure may be used to retrieve remote\nsystems information updates from an LLDP agent:\n\n   1. NMS polls all tables associated with remote systems\n      and keeps a local copy of the information retrieved.\n      NMS polls periodically the values of the following\n      objects:\n         a. lldpStatsRemTablesInserts\n         b. lldpStatsRemTablesDeletes\n         c. lldpStatsRemTablesDrops\n         d. lldpStatsRemTablesAgeouts\n         e. lldpStatsRxPortAgeoutsTotal for all ports.\n\n   2. LLDP agent updates remote systems MIB objects, and\n      sends out notifications to a list of notification\n      destinations.\n\n   3. NMS receives the notifications and compares the new\n      values of objects listed in step 1.  \n\n      Periodically, NMS should poll the object\n      lldpStatsRemTablesLastChangeTime to find out if anything\n      has changed since the last poll.  if something has\n      changed, NMS will poll the objects listed in step 1 to\n      figure out what kind of changes occurred in the tables.\n\n      if value of lldpStatsRemTablesInserts has changed,\n      then NMS will walk all tables by employing TimeFilter\n      with the last-polled time value.  This request will\n      return new objects or objects whose values are updated\n      since the last poll.\n\n      if value of lldpStatsRemTablesAgeouts has changed,\n      then NMS will walk the lldpStatsRxPortAgeoutsTotal and\n      compare the new values with previously recorded ones.\n      For ports whose lldpStatsRxPortAgeoutsTotal value is\n      greater than the recorded value, NMS will have to\n      retrieve objects associated with those ports from\n      table(s) without employing a TimeFilter (which is\n      performed by specifying 0 for the TimeFilter.)\n\n      lldpStatsRemTablesDeletes and lldpStatsRemTablesDrops\n      objects are provided for informational purposes.\"\"\",\n        }, # table\n        \"lldpRemEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpRemTimeMark\",\n                \"lldpRemLocalPortNum\",\n                \"lldpRemIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a particular physical network connection.\nEntries may be created and deleted in this table by the agent,\nif a physical topology discovery process is active.\"\"\",\n        }, # row\n        \"lldpRemTimeMark\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"TimeFilter\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A TimeFilter for this entry.  See the TimeFilter textual\nconvention in IETF RFC 2021 and \nhttp://www.ietf.org/IESG/Implementations/RFC2021-Implementation.txt\nto see how TimeFilter works.\"\"\",\n            \"reference>\" :\n                \"\"\"IETF RFC 2021 section 6\"\"\",\n        }, # column\n        \"lldpRemLocalPortNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortNumber\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index value used to identify the port component\n(contained in the local chassis with the LLDP agent)\nassociated with this entry.  The lldpRemLocalPortNum\nidentifies the port on which the remote system information\nis received.\n\nThe value of this object is used as a port index to the\nlldpRemTable.\"\"\",\n        }, # column\n        \"lldpRemIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object represents an arbitrary local integer value used\nby this agent to identify a particular connection instance,\nunique only for the indicated remote system.\n\nAn agent is encouraged to assign monotonically increasing\nindex values to new entries, starting with one, after each\nreboot.  It is considered unlikely that the lldpRemIndex\nwill wrap between reboots.\"\"\",\n        }, # column\n        \"lldpRemChassisIdSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpChassisIdSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of encoding used to identify the chassis associated\nwith the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.2.2\"\"\",\n        }, # column\n        \"lldpRemChassisId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpChassisId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the chassis component\nassociated with the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.2.3\"\"\",\n        }, # column\n        \"lldpRemPortIdSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortIdSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port identifier encoding used in the associated\n'lldpRemPortId' object.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.3.2\"\"\",\n        }, # column\n        \"lldpRemPortId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpPortId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the port component\nassociated with the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.3.3\"\"\",\n        }, # column\n        \"lldpRemPortDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the description of\nthe given port associated with the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.5.2\"\"\",\n        }, # column\n        \"lldpRemSysName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the system name of the\nremote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.6.2\"\"\",\n        }, # column\n        \"lldpRemSysDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the system description\nof the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.7.2\"\"\",\n        }, # column\n        \"lldpRemSysCapSupported\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpSystemCapabilitiesMap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bitmap value used to identify which system capabilities\nare supported on the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.8.1\"\"\",\n        }, # column\n        \"lldpRemSysCapEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpSystemCapabilitiesMap\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bitmap value used to identify which system capabilities\nare enabled on the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.8.2\"\"\",\n        }, # column\n        \"lldpRemManAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one or more rows per management address\ninformation on the remote system learned on a particular port\ncontained in the local chassis known to this agent.\"\"\",\n        }, # table\n        \"lldpRemManAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpRemTimeMark\",\n                \"lldpRemLocalPortNum\",\n                \"lldpRemIndex\",\n                \"lldpRemManAddrSubtype\",\n                \"lldpRemManAddr\",\n            ],\n            \"description\" :\n                \"\"\"Management address information about a particular chassis\ncomponent.  There may be multiple management addresses\nconfigured on the remote system identified by a particular\nlldpRemIndex whose information is received on\nlldpRemLocalPortNum of the local system.  Each management\naddress should have distinct 'management address\ntype' (lldpRemManAddrSubtype) and 'management address'\n(lldpRemManAddr.)\n\nEntries may be created and deleted in this table by the\nagent.\"\"\",\n        }, # row\n        \"lldpRemManAddrSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"IANA-ADDRESS-FAMILY-NUMBERS-MIB\", \"name\" : \"AddressFamilyNumbers\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of management address identifier encoding used in\nthe associated 'lldpRemManagmentAddr' object.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.3\"\"\",\n        }, # column\n        \"lldpRemManAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpManAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The string value used to identify the management address\ncomponent associated with the remote system.  The purpose\nof this address is to contact the management entity.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.4\"\"\",\n        }, # column\n        \"lldpRemManAddrIfSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"LLDP-MIB\", \"name\" : \"LldpManAddrIfSubtype\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The enumeration value that identifies the interface numbering\nmethod used for defining the interface number, associated\nwith the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.5\"\"\",\n        }, # column\n        \"lldpRemManAddrIfId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer value used to identify the interface number\nregarding the management address component associated with\nthe remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.6\"\"\",\n        }, # column\n        \"lldpRemManAddrOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The OID value used to identify the type of hardware component\nor protocol entity associated with the management address\nadvertised by the remote system agent.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.9.8\"\"\",\n        }, # column\n        \"lldpRemUnknownTLVTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains information about an incoming TLV which\nis not recognized by the receiving LLDP agent.  The TLV may\nbe from a later version of the basic management set.\n\nThis table should only contain TLVs that are found in\na single LLDP frame.  Entries in this table, associated\nwith an MAC service access point (MSAP, the access point\nfor MAC services provided to the LCC sublayer, defined\nin IEEE 100, which is also identified with a particular\nlldpRemLocalPortNum, lldpRemIndex pair) are overwritten with\nmost recently received unrecognized TLV from the same MSAP,\nor they will naturally age out when the rxInfoTTL timer\n(associated with the MSAP) expires.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.3.2\"\"\",\n        }, # table\n        \"lldpRemUnknownTLVEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpRemTimeMark\",\n                \"lldpRemLocalPortNum\",\n                \"lldpRemIndex\",\n                \"lldpRemUnknownTLVType\",\n            ],\n            \"description\" :\n                \"\"\"Information about an unrecognized TLV received from a\nphysical network connection.  Entries may be created and\ndeleted in this table by the agent, if a physical topology\ndiscovery process is active.\"\"\",\n        }, # row\n        \"lldpRemUnknownTLVType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"9\",\n                        \"max\" : \"126\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"9\",\n                        \"max\" : \"126\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object represents the value extracted from the type\nfield of the TLV.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.3.5\"\"\",\n        }, # column\n        \"lldpRemUnknownTLVInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"511\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"511\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object represents the value extracted from the value\nfield of the TLV.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 10.3.5\"\"\",\n        }, # column\n        \"lldpRemOrgDefInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one or more rows per physical network\nconnection which advertises the organizationally defined\ninformation.\n\nNote that this table contains one or more rows of\norganizationally defined information that is not recognized\nby the local agent.\n\nIf the local system is capable of recognizing any\norganizationally defined information, appropriate extension\nMIBs from the organization should be used for information\nretrieval.\"\"\",\n        }, # table\n        \"lldpRemOrgDefInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"lldpRemTimeMark\",\n                \"lldpRemLocalPortNum\",\n                \"lldpRemIndex\",\n                \"lldpRemOrgDefInfoOUI\",\n                \"lldpRemOrgDefInfoSubtype\",\n                \"lldpRemOrgDefInfoIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the unrecognized organizationally\ndefined information advertised by the remote system.\nThe lldpRemTimeMark, lldpRemLocalPortNum, lldpRemIndex,\nlldpRemOrgDefInfoOUI, lldpRemOrgDefInfoSubtype, and\nlldpRemOrgDefInfoIndex are indexes to this table.  If there is\nan lldpRemOrgDefInfoEntry associated with a particular remote\nsystem identified by the lldpRemLocalPortNum and lldpRemIndex,\nthere must be an lldpRemEntry associated with the same\ninstance (i.e, using same indexes.)  When the lldpRemEntry\nfor the same index is removed from the lldpRemTable, the\nassociated lldpRemOrgDefInfoEntry should be removed from\nthe lldpRemOrgDefInfoTable.\n\nEntries may be created and deleted in this table by the\nagent.\"\"\",\n        }, # row\n        \"lldpRemOrgDefInfoOUI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The Organizationally Unique Identifier (OUI), as defined\nin IEEE std 802-2001, is a 24 bit (three octets) globally\nunique assigned number referenced by various standards,\nof the information received from the remote system.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.1.3\"\"\",\n        }, # column\n        \"lldpRemOrgDefInfoSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The integer value used to identify the subtype of the\norganizationally defined information received from the\nremote system.\n\nThe subtype value is required to identify different instances\nof organizationally defined information that could not be\nretrieved without a unique identifier that indicates the\nparticular type of information contained in the information\nstring.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.1.4\"\"\",\n        }, # column\n        \"lldpRemOrgDefInfoIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object represents an arbitrary local integer value\nused by this agent to identify a particular unrecognized\norganizationally defined information instance, unique only\nfor the lldpRemOrgDefInfoOUI and lldpRemOrgDefInfoSubtype\nfrom the same remote system.\n\nAn agent is encouraged to assign monotonically increasing\nindex values to new entries, starting with one, after each\nreboot.  It is considered unlikely that the\nlldpRemOrgDefInfoIndex will wrap between reboots.\"\"\",\n        }, # column\n        \"lldpRemOrgDefInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"507\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"507\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string value used to identify the organizationally\ndefined information of the remote system.  The encoding for\nthis object should be as defined for SnmpAdminString TC.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1AB-2005 9.5.1.5\"\"\",\n        }, # column\n        \"lldpExtensions\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.1.5\",\n        }, # node\n        \"lldpConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2\",\n        }, # node\n        \"lldpCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.1\",\n        }, # node\n        \"lldpGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"lldpRemTablesChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.0.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"lldpStatsRemTablesInserts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesDeletes\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesDrops\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesAgeouts\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A lldpRemTablesChange notification is sent when the value\nof lldpStatsRemTableLastChangeTime changes.  It can be\nutilized by an NMS to trigger LLDP remote systems table\nmaintenance polls.\n\nNote that transmission of lldpRemTablesChange\nnotifications are throttled by the agent, as specified by the\n'lldpNotificationInterval' object.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"lldpConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpPortConfigAdminStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to configure the\nLLDP implementation behavior.\n\nThis group is mandatory for agents which implement the LLDP.\"\"\",\n        }, # group\n        \"lldpConfigRxGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpNotificationInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpPortConfigNotificationEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to configure the\nLLDP implementation behavior.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of receiving LLDP frames.\"\"\",\n        }, # group\n        \"lldpConfigTxGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpMessageTxInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpMessageTxHoldMultiplier\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpReinitDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpTxDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpPortConfigTLVsTxEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpConfigManAddrPortsTxEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to configure the\nLLDP implementation behavior.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of transmitting LLDP frames.\"\"\",\n        }, # group\n        \"lldpStatsRxGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpStatsRemTablesLastChangeTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesInserts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesDeletes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRemTablesAgeouts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortFramesDiscardedTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortFramesErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortFramesTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortTLVsDiscardedTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortTLVsUnrecognizedTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxPortAgeoutsTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to represent LLDP\nreception statistics.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of receiving LLDP frames.\"\"\",\n        }, # group\n        \"lldpStatsTxGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpStatsTxPortFramesTotal\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to represent LLDP\ntransmission statistics.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of transmitting LLDP frames.\"\"\",\n        }, # group\n        \"lldpLocSysGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpLocChassisIdSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocChassisId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocPortIdSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocPortId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocPortDesc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocSysDesc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocSysName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocSysCapSupported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocSysCapEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocManAddrLen\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocManAddrIfSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocManAddrIfId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocManAddrOID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to represent LLDP\nLocal System Information.  \n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of transmitting LLDP frames.\"\"\",\n        }, # group\n        \"lldpRemSysGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpRemChassisIdSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemChassisId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemPortIdSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemPortId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemPortDesc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemSysName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemSysDesc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemSysCapSupported\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemSysCapEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemManAddrIfSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemManAddrIfId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemManAddrOID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemUnknownTLVInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemOrgDefInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of objects which are used to represent\nLLDP Remote Systems Information.  The objects represent the\ninformation associated with the basic TLV set.  Please note\nthat even the agent doesn't implement some of the optional\nTLVs, it shall recognize all the optional TLV information\nthat the remote system may advertise.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of receiving LLDP frames.\"\"\",\n        }, # group\n        \"lldpNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"lldpRemTablesChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The collection of notifications used to indicate LLDP MIB\ndata consistency and general status information.\n\nThis group is mandatory for agents which implement the LLDP\nand have the capability of receiving LLDP frames.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"lldpCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"LLDP-MIB\",\n            \"oid\" : \"1.0.8802.1.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities which implement\nthe LLDP MIB.\"\"\",\n            \"requires\" : {\n                \"lldpConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpConfigRxGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpConfigTxGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsRxGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpStatsTxGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpLocSysGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpRemSysGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n                \"lldpNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"LLDP-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/MG-SNMP-UPS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python MG-SNMP-UPS-MIB\n\nFILENAME = \"MG-SNMP-UPS-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n\n    \"MG-SNMP-UPS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"merlinGerin\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705\",\n        }, # node\n        \"upsmg\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1\",\n        }, # node\n        \"upsmgIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1\",\n        }, # node\n        \"upsmgIdentFamilyName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS family name (e.g. `PULSAR', `COMET', `GALAXY', ...).\"\"\",\n        }, # scalar\n        \"upsmgIdentModelName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS model name (e.g. `PSX20', `SV9', ... ).\"\"\",\n        }, # scalar\n        \"upsmgIdentRevisionLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS revision level.\"\"\",\n        }, # scalar\n        \"upsmgIdentFirmwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS microprocessor firmware version number.\"\"\",\n        }, # scalar\n        \"upsmgIdentUserID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS user identification (set by administrator).\"\"\",\n        }, # scalar\n        \"upsmgIdentInstallationDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS installation date in dd/mm/yy format.\"\"\",\n        }, # scalar\n        \"upsmgIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS manufacturing serial number.\"\"\",\n        }, # scalar\n        \"upsmgManagement\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2\",\n        }, # node\n        \"upsmgManagersNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of managers that could manage the UPS.\"\"\",\n        }, # scalar\n        \"upsmgManagersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of managers.\"\"\",\n        }, # table\n        \"upsmgManagerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgmanagerIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of a manager entry in the managers table.\"\"\",\n        }, # row\n        \"mgmanagerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each manager. Its value ranges between 1\nand the value of upsmgManagersNum.\"\"\",\n        }, # column\n        \"mgmanagerDeviceNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object is the number of the manager device in the\nDevicesTable of the Config group. This means that the\nmanager is powered by the UPS. If not the default value is 0.\"\"\",\n        }, # column\n        \"mgmanagerNMSType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"umclient\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"decnetview\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"umview\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"dview\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hpopenview\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"sunnetmanager\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"novellnms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ibmnetview\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"autolearning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of manager according to the NMS platform. We\ninclude in the manager class all systems which will be\nnotified by the agent via receiving traps (e.g. basic\nto complex NMS software).\"\"\",\n        }, # column\n        \"mgmanagerCommType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cmip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"snmpv1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"snmpv2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The level of communication protocol for that manager.\nSetting this object to value invalid(2) has the effect of\ninvalidating the corresponding entry in the upsmgManagersTable.\nIt is an implementation-specific matter as to wether the agent\nremoves an invalidated entry from the table. Accordingly,\nmanagement stations must be prepared to receive tabular\ninformation from agents that corresponds to entry not currently\nin use. Proper interpretation of such entries requires\nexamination of the relevant mgmanagerCommType object.\"\"\",\n        }, # column\n        \"mgmanagerDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string containing information about the manager.\n(manufacturer and version description).\"\"\",\n        }, # column\n        \"mgmanagerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the manager station receiving traps. The\nvalue of this object is meaningful if and only if the value\nof the relevant mgmanagerCommType object is snmp type.\"\"\",\n        }, # column\n        \"mgmanagerCommunity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manager community string.\"\"\",\n        }, # column\n        \"mgmanagerSeverityLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The severity level of traps to be received by this manager.\"\"\",\n        }, # column\n        \"mgmanagerTrapAck\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mgack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mgnoack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"stdnomg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mgacks\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cpqnoack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manager Trap Acknowledgement status. Setting\nthis object to mgnoack(2) or stdnomg(3) or cpqnoack(5)\ndisables the trap acknowledgement from the related\nmanager. The MG enterprise specific trap should then\nbe sent only once by the agent to this manager in case\nof mgnoack(2), and should not be sent by the agent to\nthis manager in case of stdnomg(3) or cpqnoack(5).\nmgack(1) allows a basic mecanism for acknowledged\ntraps using upsmgAgentTrapAck object set by the\nmanager to the enterprise specific number of the trap.\nmgacks(5) allows the enhanced mecanism using the\nupsmgAgentTrapSignature object set by the manager\nto the signature received within the trap var binding.\"\"\",\n        }, # column\n        \"upsmgReceptacle\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3\",\n        }, # node\n        \"upsmgReceptaclesNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of receptacles controlled by the UPS.\"\"\",\n        }, # scalar\n        \"upsmgReceptaclesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of receptacles that are controlled by the UPS.\"\"\",\n        }, # table\n        \"upsmgReceptacleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgreceptacleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of a receptacle in the table.\"\"\",\n        }, # row\n        \"mgreceptacleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each receptacle. Its value ranges between\n1 and the value of upsmgReceptaclesNum.\"\"\",\n        }, # column\n        \"mgreceptacleLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The level of receptacle.\n\nSetting this object to value invalid(2) has the effect of\ninvalidating the corresponding entry in the upsmgReceptaclesTable.\nIt is an implementation-specific matter as to wether the agent\nremoves an invalidated entry from the table. Accordingly,\nmanagement stations must be prepared to receive tabular\ninformation from agents that corresponds to entry not currently\nin use. Proper interpretation of such entries requires\nexamination of the relevant receptacleLevel object.\nValues 1 and 4 are reserved, value 3 is used to identify a simple\none-level receptacle, and values greater than 4 represent a\ngroup of equivalent receptacles.\"\"\",\n        }, # column\n        \"mgreceptacleType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string for the receptacle type.\"\"\",\n        }, # column\n        \"mgreceptacleIdent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string identification for the user.\"\"\",\n        }, # column\n        \"mgreceptacleState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manualON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manualOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normalON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"normalOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"controlON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"controlOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"scheduleON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"scheduleOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ON/OFF status of the receptacle.\"\"\",\n        }, # column\n        \"mgreceptacleReceptacle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle number of the second level receptacle father.\n\nThe value of this object is meaningful if and only if the value\nof the relevant mgreceptacleType object is related to a two-level\nreceptacle class. Otherwise the default value is 0.\"\"\",\n        }, # column\n        \"mgreceptaclePowerCons\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The volt-ampere rating of the receptacle.\n\nThe value of this object is meaningful if and only if the value\nof the relevant mgreceptacleType object is related to a two-level\nreceptacle class. Otherwise the default value is 0.\"\"\",\n        }, # column\n        \"mgreceptacleOverload\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The overload status of the receptacle.\n\nThe value of this object is meaningful if and only if the value\nof the relevant mgreceptacleType object is related to a two-level\nreceptacle class. Otherwise the default value is 0.\"\"\",\n        }, # column\n        \"mgreceptacleAutonomy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle autonomy.\n\nThe value of this object is meaningful if and only if the value\nof the relevant mgreceptacleType object is related to a two-level\nreceptacle class. Otherwise the default value is 0.\"\"\",\n        }, # column\n        \"upsmgConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4\",\n        }, # node\n        \"upsmgConfigBatteryInstalled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The battery installed status.\"\"\",\n        }, # scalar\n        \"upsmgConfigNominalBatteryVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal battery voltage.\"\"\",\n        }, # scalar\n        \"upsmgConfigNominalBatteryTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The full load battery autonomy time.\"\"\",\n        }, # scalar\n        \"upsmgConfigNominalRechargeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The recharge time to go from low battery cut off\nto full charge at full load.\"\"\",\n        }, # scalar\n        \"upsmgConfigMinRechargeLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum battery level required to supply power on the\nloads after low battery condition turn off and restart on\nmain return.\"\"\",\n        }, # scalar\n        \"upsmgConfigMaxRechargeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum time delay of battery recharge before supply\npower to the loads.\"\"\",\n        }, # scalar\n        \"upsmgConfigLowBatteryTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set remaining time value for low battery condition.\"\"\",\n        }, # scalar\n        \"upsmgConfigLowBatteryLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set battery level value for low battery condition.\"\"\",\n        }, # scalar\n        \"upsmgConfigAutoRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"always\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"never\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onmain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The automatic restart enabling status.\"\"\",\n        }, # scalar\n        \"upsmgConfigShutdownTimer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set ups shutdown timer from on battery condition.\"\"\",\n        }, # scalar\n        \"upsmgConfigSysShutDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set ups shutdown delay (Sn delay).\"\"\",\n        }, # scalar\n        \"upsmgConfigVARating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS nominal VA rating.\"\"\",\n        }, # scalar\n        \"upsmgConfigLowTransfer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low voltage transfer point.\"\"\",\n        }, # scalar\n        \"upsmgConfigHighTransfer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high voltage transfer point.\"\"\",\n        }, # scalar\n        \"upsmgConfigOutputNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal output voltage.\"\"\",\n        }, # scalar\n        \"upsmgConfigOutputNominalCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal output current.\"\"\",\n        }, # scalar\n        \"upsmgConfigOutputNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal output frequency.\"\"\",\n        }, # scalar\n        \"upsmgConfigByPassType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"static\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS by pass switch type.\"\"\",\n        }, # scalar\n        \"upsmgConfigAlarmAudible\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set audible alarm status.\"\"\",\n        }, # scalar\n        \"upsmgConfigAlarmTimeDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set audible alarm time delay.\"\"\",\n        }, # scalar\n        \"upsmgConfigDevicesNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of devices that are powered by the UPS.\"\"\",\n        }, # scalar\n        \"upsmgConfigDevicesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of devices that are powered by the UPS.\"\"\",\n        }, # table\n        \"upsmgDeviceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgdeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of a device entry in the devices table.\"\"\",\n        }, # row\n        \"mgdeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each device. Its value ranges between 1\nand the value of upsmgDevicesNum.\"\"\",\n        }, # column\n        \"mgdeviceReceptacleNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle number of the device plugged into the UPS.\nThis value gives index entry in the ReceptaclesTable object\nof the Receptacle group. A value of 0 invalidates the entry\nin the DevicesTable.\"\"\",\n        }, # column\n        \"mgdeviceIdent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string for device user identification.\"\"\",\n        }, # column\n        \"mgdeviceVaRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The volt-ampere rating of the device plugged into the UPS.\"\"\",\n        }, # column\n        \"mgdeviceSequenceOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set the device position in the remote shutdown sequence.\"\"\",\n        }, # column\n        \"mgdeviceSequenceOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set the device position in the remote reboot sequence.\"\"\",\n        }, # column\n        \"mgdeviceShutdownDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set the duration from start of computer shut-down\nto complete.\"\"\",\n        }, # column\n        \"mgdeviceBootUpDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.22.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set the duration from start of computer boot-up\nto complete.\"\"\",\n        }, # column\n        \"upsmgConfigReceptaclesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of receptacles.\"\"\",\n        }, # table\n        \"upsmgCfgReceptEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgreceptacleIndexb\",\n            ],\n            \"description\" :\n                \"\"\"The description of a receptacle entry in the table.\"\"\",\n        }, # row\n        \"mgreceptacleIndexb\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each receptacle. Its value ranges between 1\nand the value of upsmgReceptaclesNum.\"\"\",\n        }, # column\n        \"mgreceptacleStateTurnOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"last\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"schedule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Default return state at turn on.\"\"\",\n        }, # column\n        \"mgreceptacleStateMainReturn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"last\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"schedule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Default return state on main return.\"\"\",\n        }, # column\n        \"mgreceptacleStateDischarge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"last\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"schedule\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Default return state on main return from battery discharge.\"\"\",\n        }, # column\n        \"mgreceptacleShutoffLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery level for starting shutoff sequence.\"\"\",\n        }, # column\n        \"mgreceptacleShutoffTimer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay from on battery for starting shutoff sequence.\"\"\",\n        }, # column\n        \"mgreceptacleRestartLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery level for starting restart sequence.\"\"\",\n        }, # column\n        \"mgreceptacleRestartDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time delay for starting restart sequence.\"\"\",\n        }, # column\n        \"mgreceptacleShutdownDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximum Shutdown Duration for systems powered by this plug.\"\"\",\n        }, # column\n        \"mgreceptacleBootUpDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.23.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximum Reboot Duration for systems powered by this plug.\"\"\",\n        }, # column\n        \"upsmgConfigExtAlarmNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of environ external alarm, value is\nbetween 8 and 32..\"\"\",\n        }, # scalar\n        \"upsmgConfigExtAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.25\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of environmental external alarms.\"\"\",\n        }, # table\n        \"upsmgExtAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.25.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgextAlarmIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of an external alarm in the table.\"\"\",\n        }, # row\n        \"mgextAlarmIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.25.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each external alarm. Its value ranges\nbetween 1 and the value of upsmgConfigExtAlarmNum.\"\"\",\n        }, # column\n        \"mgextAlarmUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.25.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A textual string for alarm state user identification.\"\"\",\n        }, # column\n        \"upsmgConfigEmergencyTestFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The emergency condition status on Battery test fail.\"\"\",\n        }, # scalar\n        \"upsmgConfigEmergencyOnByPass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The emergency condition status on By Pass.\"\"\",\n        }, # scalar\n        \"upsmgConfigEmergencyOverload\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The emergency condition status on overload.\"\"\",\n        }, # scalar\n        \"upsmgConfigControlDayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.29\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of daily on/off time.\"\"\",\n        }, # table\n        \"upsmgCtrlDayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.29.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgcontrolDayIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of a daily on/off time schedule in the table.\"\"\",\n        }, # row\n        \"mgcontrolDayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The day index. It is a number between 1 and 7, 1 for\nSunday, 2 for Monday, ...\"\"\",\n        }, # column\n        \"mgcontrolDayOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.29.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set daily power on time. Any value greater than 86400\nis to disable the Day On.\"\"\",\n        }, # column\n        \"mgcontrolDayOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.29.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set daily power off time. Any value greater than 86400\nis to disable the Day Off.\"\"\",\n        }, # column\n        \"upsmgConfigLowBooster\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set UPS booster low threshold.\"\"\",\n        }, # scalar\n        \"upsmgConfigHighBooster\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set UPS booster high threshold.\"\"\",\n        }, # scalar\n        \"upsmgConfigLowFader\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set UPS fader low threshold.\"\"\",\n        }, # scalar\n        \"upsmgConfigHighFader\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.4.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set UPS fader high threshold.\"\"\",\n        }, # scalar\n        \"upsmgBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5\",\n        }, # node\n        \"upsmgBatteryRemainingTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time remaining actual charge vs actual load (dynamic).\"\"\",\n        }, # scalar\n        \"upsmgBatteryLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery level as a percentage of charge.\"\"\",\n        }, # scalar\n        \"upsmgBatteryRechargeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual operational battery recharge time to set point\nequal to upsmgConfigRechargeLevel. This value is computed from\nupsmgConfigRechargeLevel (level to reach), upsmgBatteryLevel (the\nactual reached level) and the UPS charge rate.\"\"\",\n        }, # scalar\n        \"upsmgBatteryRechargeLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual value of the battery recharge level that will be\nreached during the time delay necessary to restart after power\nreturns. This value is computed from upsmgConfigRechargeTime\n(the delay), upsmgBatteryLevel (the actual level) and the UPS\ncharge rate.\"\"\",\n        }, # scalar\n        \"upsmgBatteryVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery voltage.\"\"\",\n        }, # scalar\n        \"upsmgBatteryCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery current.\"\"\",\n        }, # scalar\n        \"upsmgBatteryTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery temperature.\"\"\",\n        }, # scalar\n        \"upsmgBatteryFullRechargeTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery full recharge time (from 0 to 100 percent)\nat current load.\"\"\",\n        }, # scalar\n        \"upsmgBatteryFaultBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery fault status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryNoBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS has no Battery status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryReplacement\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Battery to be replaced status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryUnavailableBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Battery is unavailable status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryNotHighCharge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Battery quit high condition status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryLowBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery low status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryChargerFault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Battery is not charging status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryLowCondition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS is at low condition status.\"\"\",\n        }, # scalar\n        \"upsmgBatteryLowRecharge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.5.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Battery is not recharged status.\"\"\",\n        }, # scalar\n        \"upsmgInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6\",\n        }, # node\n        \"upsmgInputPhaseNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input phases.\"\"\",\n        }, # scalar\n        \"upsmgInputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of input phases.\"\"\",\n        }, # table\n        \"upsmgInputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mginputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of an input phase.\"\"\",\n        }, # row\n        \"mginputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase voltage index. It is a number between 1\nand upsmgInputPhaseNum.\"\"\",\n        }, # column\n        \"mginputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase voltage.\"\"\",\n        }, # column\n        \"mginputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase frequency.\"\"\",\n        }, # column\n        \"mginputMinimumVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase minimum voltage over the last minute.\"\"\",\n        }, # column\n        \"mginputMaximumVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase maximum voltage over the last minute.\"\"\",\n        }, # column\n        \"mginputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase current.\"\"\",\n        }, # column\n        \"upsmgInputBadStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utility power bad voltage or bad frequency status.\"\"\",\n        }, # scalar\n        \"upsmgInputLineFailCause\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outoftolvolt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"outoftolfreq\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"utilityoff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utility power failure cause:\nno(1) is for no utility failure,\noutoftolvolt(2) is for voltage out of tolerance,\noutoftolfreq(3) is for frequency out of tolerance,\nutilityoff(4) is for no voltage at all.\"\"\",\n        }, # scalar\n        \"upsmgOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7\",\n        }, # node\n        \"upsmgOutputPhaseNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output phases.\"\"\",\n        }, # scalar\n        \"upsmgOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of output phases.\"\"\",\n        }, # table\n        \"upsmgOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgoutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"The description of an output phase.\"\"\",\n        }, # row\n        \"mgoutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase voltage index. It is a number between 1\nand upsmgOutputPhaseNum.\"\"\",\n        }, # column\n        \"mgoutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase voltage.\"\"\",\n        }, # column\n        \"mgoutputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase frequency.\"\"\",\n        }, # column\n        \"mgoutputLoadPerPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output load per phase.\"\"\",\n        }, # column\n        \"mgoutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase current.\"\"\",\n        }, # column\n        \"upsmgOutputOnBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS on battery / on main status.\"\"\",\n        }, # scalar\n        \"upsmgOutputOnByPass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS on bypass status.\"\"\",\n        }, # scalar\n        \"upsmgOutputUnavailableByPass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The by pass unavailable status.\"\"\",\n        }, # scalar\n        \"upsmgOutputNoByPass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS bypass installed status.\"\"\",\n        }, # scalar\n        \"upsmgOutputUtilityOff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS utility off status.\"\"\",\n        }, # scalar\n        \"upsmgOutputOnBoost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS on booster status.\"\"\",\n        }, # scalar\n        \"upsmgOutputInverterOff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Inverter on / off status.\"\"\",\n        }, # scalar\n        \"upsmgOutputOverLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output over load status.\"\"\",\n        }, # scalar\n        \"upsmgOutputOverTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ups over temperature status.\"\"\",\n        }, # scalar\n        \"upsmgOutputOnBuck\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.7.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS on fader status.\"\"\",\n        }, # scalar\n        \"upsmgEnviron\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8\",\n        }, # node\n        \"upsmgEnvironAmbientTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ambient temperature.\"\"\",\n        }, # scalar\n        \"upsmgEnvironAmbientHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ambient humidity.\"\"\",\n        }, # scalar\n        \"upsmgEnvironExtAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of external alarms.\"\"\",\n        }, # table\n        \"upsmgEnvironExtAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgalarmNum\",\n            ],\n            \"description\" :\n                \"\"\"The description of an external alarm.\"\"\",\n        }, # row\n        \"mgalarmNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The external alarm number. A number between 1 and\nupsmgConfigExtAlarmNum.\"\"\",\n        }, # column\n        \"mgalarmState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The external alarm state (active or inactive).\"\"\",\n        }, # column\n        \"upsmgEnvironSensorNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor unit number (0 to 4).\"\"\",\n        }, # scalar\n        \"upsmgEnvironSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of sensor units.\"\"\",\n        }, # table\n        \"upsmgEnvironSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgsensorNum\",\n            ],\n            \"description\" :\n                \"\"\"The description of a sensor unit.\"\"\",\n        }, # row\n        \"mgsensorNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit number. A number between 1 and 4.\"\"\",\n        }, # column\n        \"mgsensorTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured temperature of the unit.\"\"\",\n        }, # column\n        \"mgsensorHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured humidity of the unit.\"\"\",\n        }, # column\n        \"upsmgControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9\",\n        }, # node\n        \"upsmgControlReceptaclesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of receptacles.\"\"\",\n        }, # table\n        \"upsmgCtrlReceptEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mgreceptacleIndexc\",\n            ],\n            \"description\" :\n                \"\"\"The description of a receptacle entry in the table.\"\"\",\n        }, # row\n        \"mgreceptacleIndexc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each receptacle. Its value ranges between 1\nand the value of upsmgReceptaclesNum.\"\"\",\n        }, # column\n        \"mgreceptacleOnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn on UPS receptacle w/delay=?.\"\"\",\n        }, # column\n        \"mgreceptacleOnCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle control on action.\"\"\",\n        }, # column\n        \"mgreceptacleOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"started\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inprogressinups\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"completed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The receptacle control on status.\"\"\",\n        }, # column\n        \"mgreceptacleOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn off UPS receptacle w/delay=?.\"\"\",\n        }, # column\n        \"mgreceptacleOffCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle control off action.\"\"\",\n        }, # column\n        \"mgreceptacleOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"started\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inprogressinups\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"completed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The receptacle control off status.\"\"\",\n        }, # column\n        \"mgreceptacleToggleDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn off then on UPS receptacle w/delay=?.\"\"\",\n        }, # column\n        \"mgreceptacleToggleCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The receptacle control toggle action.\"\"\",\n        }, # column\n        \"mgreceptacleToggleStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"started\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inprogressinups\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"completed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The receptacle control toggle status.\"\"\",\n        }, # column\n        \"mgreceptacleToggleDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn off then on UPS receptacle w/duration=?.\"\"\",\n        }, # column\n        \"upsmgControlDayOff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sunday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"monday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tuesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wednesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"thursday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"friday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"saterday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The schedule off control object. Default value is none(8).\nValue 1 means to start scheduled off on Sunday,\nvalue 2 to start scheduled off on Monday, and so on.\"\"\",\n        }, # scalar\n        \"upsmgControlDayOn\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sunday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"monday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tuesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wednesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"thursday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"friday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"saterday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The schedule on control object. Default value is none(8).\nValue 1 means to start scheduled on on Sunday,\nvalue 2 to start scheduled on on Monday, and so on.\nThis object is meaningfull only for those agent that do not\ninclude internal clock. In such a case the object is set by\na manager to start the schedule on sequence.\"\"\",\n        }, # scalar\n        \"upsmgTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10\",\n        }, # node\n        \"upsmgTestBatterySchedule\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"weekly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"monthly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"atturnon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"dayly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The automatic battery test schedule.\"\"\",\n        }, # scalar\n        \"upsmgTestDiagnostics\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To run self test diagnostics.\"\"\",\n        }, # scalar\n        \"upsmgTestDiagResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"success\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The automatic test diagnostic result.\"\"\",\n        }, # scalar\n        \"upsmgTestBatteryCalibration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"default\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"start\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To run battery test calibration.\"\"\",\n        }, # scalar\n        \"upsmgTestLastCalibration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last battery calibration test date.\"\"\",\n        }, # scalar\n        \"upsmgTestIndicators\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To run UPS indicators test.\"\"\",\n        }, # scalar\n        \"upsmgTestCommandLine\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To send ASCII command line to UPS.\"\"\",\n        }, # scalar\n        \"upsmgTestCommandReady\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To advise UPS that command line has been prepared.\"\"\",\n        }, # scalar\n        \"upsmgTestResponseLine\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"To get ASCII protocol response from UPS.\"\"\",\n        }, # scalar\n        \"upsmgTestResponseReady\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"To advise agent that response line has been received.\"\"\",\n        }, # scalar\n        \"upsmgTestBatteryResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.10.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"msuccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mfailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ssuccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sfailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The test battery result:\nmsuccess(1) is for manual battery test success,\nssuccess(3) is for scheduled battery test success,\nmfailed(2) is for manual battery test failed,\nsfailed(4) is for scheduled battery test failed.\"\"\",\n        }, # scalar\n        \"upsmgTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11\",\n        }, # node\n        \"upsmgAgent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12\",\n        }, # node\n        \"upsmgAgentIpaddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The ip address that NMS can identify the managed\ndevice\"\"\",\n        }, # scalar\n        \"upsmgAgentSubnetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Internet address subnet mask\"\"\",\n        }, # scalar\n        \"upsmgAgentDefGateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The default gateway that allow device managed\nthrough routers \"\"\",\n        }, # scalar\n        \"upsmgAgentBaudRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" the serial port communication speed. only 2400,\n4800, and 9600 allowed\"\"\",\n        }, # scalar\n        \"upsmgAgentPollRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The frequency that proxy agent polls the connected\nUPS in ASCII protocol. (unit : second)\"\"\",\n        }, # scalar\n        \"upsmgAgentType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deviceEth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"deviceTR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"proxyEth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"proxyTR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The type of agent.\"\"\",\n        }, # scalar\n        \"upsmgAgentTrapAlarmDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The interval for the Trap packet retransmission,\nwhile the TRAP Acknowledge is implemented and\nthe ack is received within the interval.\"\"\",\n        }, # scalar\n        \"upsmgAgentTrapAlarmRetry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The retry count for retransmitting Trap\npacket while the TRAP acknowledge is\nimplemented.\"\"\",\n        }, # scalar\n        \"upsmgAgentReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The variable initiates reset operation  in\nagent software, ie. warm start. write reset(1)\nto any one of UPS MIB array, will result in\nthe same reset operation.\"\"\",\n        }, # scalar\n        \"upsmgAgentFactReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The variable initiates reset operation in\nagent software, ie. warm start, and load\ndefault data (Factory setting) to EEPROM\nand to runtime parameters associated with\nthe UPS.\"\"\",\n        }, # scalar\n        \"upsmgAgentMibVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The version of the MIB implemented in agent.\"\"\",\n        }, # scalar\n        \"upsmgAgentFirmwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The agent firmware version.\"\"\",\n        }, # scalar\n        \"upsmgAgentCommUPS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The status of communication between agent and ups.\nEven value means no communication, and odd value\nmeans a certain level of communication with devices\ndaisy-chained on the serial port. The value is the\nfollowing: 1000*NSE + 100*NSW + 10*UPSW + UPST with\nUPST is UPS type:       5 if no UPS;\n                        3 if PI (Protocol Interface)\n                        1 if U-Talk UPS;\nUPSW is the number of switchable plugs of the UPS;\nNSW is the number of UM-Switch devices;\nNSE is the number of UM-Sensor devices.\"\"\",\n        }, # scalar\n        \"upsmgAgentTrapAck\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The last Trap number that has been received by UM-View.\"\"\",\n        }, # scalar\n        \"upsmgAgentAutoLearning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The enabled/disabled configuration of the Auto Learning\nprocess of the agent, default value is yes(1) e.g. enabled.\"\"\",\n        }, # scalar\n        \"upsmgAgentBootP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The enabled/disabled configuration of the BootP process,\ndefault value is yes(1) e.g. enabled.\"\"\",\n        }, # scalar\n        \"upsmgAgentTFTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The enabled/disabled configuration of the TFTP process,\ndefault value is no(2) e.g. disabled.\"\"\",\n        }, # scalar\n        \"upsmgAgentTrapSignature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.12.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The signature of the trap acknowledged by a manager.\"\"\",\n        }, # scalar\n        \"upsmgRemote\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.13\",\n        }, # node\n        \"upsmgRemoteOnBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An object to inform an ups-less agent that the remote\nUPS is on autonomy. This object could be set by\na management application.\"\"\",\n        }, # scalar\n        \"upsmgRemoteIpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An object to give the IP address of the agent managing\nthe remote UPS. This object could be read by managers\nto perform management of receptacle dependencies\nbetween two different agents.\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"notifications\" : {\n        \"upsmgBatteryFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS Battery entering Fault status.\"\"\",\n        }, # notification\n        \"upsmgBatteryOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS Battery returned to OK status.\"\"\",\n        }, # notification\n        \"upsmgBatteryReplacementIndicated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery need to be replaced.\"\"\",\n        }, # notification\n        \"upsmgBatteryReplacementNotIndicated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery does not need to be replaced.\"\"\",\n        }, # notification\n        \"upsmgAtLowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery reached low condition.\"\"\",\n        }, # notification\n        \"upsmgFromLowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery returned from low condition.\"\"\",\n        }, # notification\n        \"upsmgChargerFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery charger is not active.\"\"\",\n        }, # notification\n        \"upsmgChargerOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery charger is active.\"\"\",\n        }, # notification\n        \"upsmgAtLowCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS entering low condition.\"\"\",\n        }, # notification\n        \"upsmgFromLowCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS exiting low condition.\"\"\",\n        }, # notification\n        \"upsmgOnBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS is on Battery.\"\"\",\n        }, # notification\n        \"upsmgReturnFromBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS returned from battery.\"\"\",\n        }, # notification\n        \"upsmgOnByPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS is on by pass.\"\"\",\n        }, # notification\n        \"upsmgReturnFromByPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS return from by pass.\"\"\",\n        }, # notification\n        \"upsmgByPassUnavailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS by pass unavailable.\"\"\",\n        }, # notification\n        \"upsmgByPassAvailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS by pass available.\"\"\",\n        }, # notification\n        \"upsmgUtilityFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS utility power failed.\"\"\",\n        }, # notification\n        \"upsmgUtilityRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS utility power restored.\"\"\",\n        }, # notification\n        \"upsmgOnBoost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS is on boost.\"\"\",\n        }, # notification\n        \"upsmgReturnFromBoost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS has returned from boost.\"\"\",\n        }, # notification\n        \"upsmgOverLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS has overload condition.\"\"\",\n        }, # notification\n        \"upsmgLoadOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS quit overload condition.\"\"\",\n        }, # notification\n        \"upsmgOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS has overtemperature condition.\"\"\",\n        }, # notification\n        \"upsmgTemperatureOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS quit overtemperature condition.\"\"\",\n        }, # notification\n        \"upsmgOnToStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleRestartDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS on sequence started.\"\"\",\n        }, # notification\n        \"upsmgOnAbort\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS on sequence cancelled.\"\"\",\n        }, # notification\n        \"upsmgOnInProgress\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleBootUpDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS on sequence in progress in ups.\"\"\",\n        }, # notification\n        \"upsmgOnComplete\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOnDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS on sequence completed.\"\"\",\n        }, # notification\n        \"upsmgOffToStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOffDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleShutoffTimer\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgConfigSysShutDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS off sequence started.\"\"\",\n        }, # notification\n        \"upsmgOffAbort\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOffDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS off sequence cancelled.\"\"\",\n        }, # notification\n        \"upsmgOffInProgress\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleShutdownDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS off sequence in progress in ups.\"\"\",\n        }, # notification\n        \"upsmgOffComplete\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleOffDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS off sequence completed.\"\"\",\n        }, # notification\n        \"upsmgToggleToStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleToggleDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS toggle (off/on) sequence started.\"\"\",\n        }, # notification\n        \"upsmgToggleAbort\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleToggleDelay\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS toggle (off/on) sequence cancelled.\"\"\",\n        }, # notification\n        \"upsmgToggleInProgress\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleToggleDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS toggle (off/on) sequence in progress in ups.\"\"\",\n        }, # notification\n        \"upsmgToggleComplete\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgreceptacleIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgreceptacleToggleDuration\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS toggle (off/on) sequence completed.\"\"\",\n        }, # notification\n        \"upsmgCommunicationFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS serial communication failed.\"\"\",\n        }, # notification\n        \"upsmgCommunicationRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS serial communication restored.\"\"\",\n        }, # notification\n        \"upsmgInputBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS input has bad condition.\"\"\",\n        }, # notification\n        \"upsmgInputOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS input quit bad condition.\"\"\",\n        }, # notification\n        \"upsmgBatteryUnavailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery is unavailable.\"\"\",\n        }, # notification\n        \"upsmgBatteryAvailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS battery return from unavailable condition.\"\"\",\n        }, # notification\n        \"upsmgAtLowRecharge\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS waiting for battery charging condition.\"\"\",\n        }, # notification\n        \"upsmgFromLowRecharge\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsmgBatteryRemainingTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"upsmgBatteryLevel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS reached battery charging condition.\"\"\",\n        }, # notification\n        \"upsmgDiagnosticTestFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS self test failed.\"\"\",\n        }, # notification\n        \"upsmgDiagnosticTestOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS self test succeeded.\"\"\",\n        }, # notification\n        \"upsmgBatteryTestOK\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS passed battery test.\"\"\",\n        }, # notification\n        \"upsmgBatteryTestFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS failed battery test.\"\"\",\n        }, # notification\n        \"upsmgExternalAlarmActive\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgextAlarmIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgextAlarmUID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS enter environment external alarm.\"\"\",\n        }, # notification\n        \"upsmgExternalAlarmInactive\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mgextAlarmIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n                \"mgextAlarmUID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"MG-SNMP-UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap UPS exit environment external alarm.\"\"\",\n        }, # notification\n        \"upsmgOnBuck\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS is on buck.\"\"\",\n        }, # notification\n        \"upsmgReturnFromBuck\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"MG-SNMP-UPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.705.1.11.0.52\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Trap UPS has returned from buck.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/NETSWITCH-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python NETSWITCH-MIB\n\nFILENAME = \"hpNetSwitch.mib\"\n\nMIB = {\n    \"moduleName\" : \"NETSWITCH-MIB\",\n\n    \"NETSWITCH-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC-1212\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"HP-ICF-OID\", \"name\" : \"hpSwitch\"},\n    ),\n\n    \"typedefs\" : {\n        \"MacAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"ranges\" : [\n            {\n                \"min\" : \"6\",\n                \"max\" : \"6\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"6\",\n                \"max\" : \"6\"\n            },\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"hpOpSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1\",\n        }, # node\n        \"hpBuf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1\",\n        }, # node\n        \"hpMsgBuf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1\",\n        }, # node\n        \"hpMsgBufTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information on all the \nMessage buffers for each slot.\"\"\",\n        }, # table\n        \"hpMsgBufEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpMsgBufSlotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a slot in a chassis\"\"\",\n        }, # row\n        \"hpMsgBufSlotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot number within the box for which this \nentry contains information.\"\"\",\n        }, # column\n        \"hpMsgBufCorrupted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times a corrupted buffer was deleted.\"\"\",\n        }, # column\n        \"hpMsgBufFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of message buffers available for\ninternal VME transfers or external transfers,\nrespectively. Because switch operations and application\nsoftware modules impose some overhead on global memory\nbuffers, the number of buffers available for data\ntransfers is less than the total number of buffers\nallocated when the switch boots.\"\"\",\n        }, # column\n        \"hpMsgBufInit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of message buffers allocated when\nthe switch booted.\"\"\",\n        }, # column\n        \"hpMsgBufMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest number of message buffers\navailable since the switch booted.\"\"\",\n        }, # column\n        \"hpMsgBufMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times that the switch was unable to obtain\na message buffer. Failure to obtain a buffer indicates\nthat buffers were busy. This parameter is directly\nrelated to hpMsgBufMin. If hpMsgBufMiss is greater than 0,\nhpMsgBufMin must equal 0. Conversely, if hpMsgBufMiss\nequals 0, then hpMsgBufMin must be greater than 0.\"\"\",\n        }, # column\n        \"hpMsgBufSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the message buffer in bytes.\"\"\",\n        }, # column\n        \"hpPktBuf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2\",\n        }, # node\n        \"hpPktBufTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information on all the \nPacket buffers for each slot.\"\"\",\n        }, # table\n        \"hpPktBufEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpPktBufSlotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a slot in a chassis\"\"\",\n        }, # row\n        \"hpPktBufSlotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot number within the box for which this \nentry contains information.\"\"\",\n        }, # column\n        \"hpPktBufCorrupted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times a corrupted buffer was deleted.\"\"\",\n        }, # column\n        \"hpPktBufFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packet buffers available for\ninternal VME transfers or external transfers,\nrespectively. Because switch operations and application\nsoftware modules impose some overhead on global memory\nbuffers, the number of buffers available for data\ntransfers is less than the total number of buffers\nallocated when the switch boots.\"\"\",\n        }, # column\n        \"hpPktBufInit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of packet buffers allocated when\nthe switch booted.\"\"\",\n        }, # column\n        \"hpPktBufMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest number of packet buffers\navailable since the switch booted.\"\"\",\n        }, # column\n        \"hpPktBufMiss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times that the switch was unable to obtain\na packet buffer. Failure to obtain a buffer indicates\nthat buffers were busy. This parameter is directly\nrelated to hpPktBufMin. If hpPktBufMiss is greater than 0,\nhpPktBufMin must equal 0. Conversely, if hpPktBufMiss\nequals 0, then hpPktBufMin must be greater than 0.\"\"\",\n        }, # column\n        \"hpPktBufSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the packet buffer in bytes.\"\"\",\n        }, # column\n        \"hpMem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2\",\n        }, # node\n        \"hpLocalMem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1\",\n        }, # node\n        \"hpLocalMemTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information on all the \nlocal memory for each slot.\"\"\",\n        }, # table\n        \"hpLocalMemEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpLocalMemSlotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a slot in a chassis\"\"\",\n        }, # row\n        \"hpLocalMemSlotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot number within the box for which this \nentry contains information.\"\"\",\n        }, # column\n        \"hpLocalMemSlabCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of discretely managed memory areas.\nEach slab is further broken down into smaller contiguous\nareas called segments.\"\"\",\n        }, # column\n        \"hpLocalMemFreeSegCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of free memory segments. A free memory\nsegment is an unused contiguous memory block of greater\nthan 16 bytes.  Generally, an increase in the number of\nfree memory segments indicates an increase in memory\nfragmentation.\"\"\",\n        }, # column\n        \"hpLocalMemAllocSegCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently allocated memory segments.\"\"\",\n        }, # column\n        \"hpLocalMemTotalBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently installed bytes.\"\"\",\n        }, # column\n        \"hpLocalMemFreeBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of available (unallocated) bytes.\"\"\",\n        }, # column\n        \"hpLocalMemAllocBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently allocated bytes.\"\"\",\n        }, # column\n        \"hpGlobalMem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2\",\n        }, # node\n        \"hpGlobalMemTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information on all the \nlocal memory for each slot.\"\"\",\n        }, # table\n        \"hpGlobalMemEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpGlobalMemSlotIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about a slot in a chassis\"\"\",\n        }, # row\n        \"hpGlobalMemSlotIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slot number within the box for which this \nentry contains information.\"\"\",\n        }, # column\n        \"hpGlobalMemSlabCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of discretely managed memory areas.\nEach slab is further broken down into smaller contiguous\nareas called segments.\"\"\",\n        }, # column\n        \"hpGlobalMemFreeSegCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of free memory segments. A free memory\nsegment is an unused contiguous memory block of greater\nthan 16 bytes.  Generally, an increase in the number of\nfree memory segments indicates an increase in memory\nfragmentation.\"\"\",\n        }, # column\n        \"hpGlobalMemAllocSegCnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently allocated memory segments.\"\"\",\n        }, # column\n        \"hpGlobalMemTotalBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently installed bytes.\"\"\",\n        }, # column\n        \"hpGlobalMemFreeBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of available (unallocated) bytes.\"\"\",\n        }, # column\n        \"hpGlobalMemAllocBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently allocated bytes.\"\"\",\n        }, # column\n        \"hpSwitchOsVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the operating code version number (also\nknown as software or firmware). For example, a\nsoftware version such as A.08.01 is described as\nfollows:\n    A    the function set available in your router\n    08   the common release number\n    01   updates to the current common release\"\"\",\n        }, # scalar\n        \"hpSwitchRomVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the ROM version number (such as A.08.01\nis described as follows:\n    A    the function set available in your router\n    08   the common release number\n    01   updates to the current common release\"\"\",\n        }, # scalar\n        \"hpSwitchSmartCardType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"atm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fddiAndATM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return the type of Smart Cards in the system. \nSome system may contains more than one types\nof smart cards, such as FDDI and ATM\"\"\",\n        }, # scalar\n        \"hpSwitchBaseMACAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"NETSWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"NETSWITCH-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return the base MAC address of the switch.  This is\nalso the MAC address of the default vlan. \"\"\",\n        }, # scalar\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/OLD-CISCO-CPU-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python OLD-CISCO-CPU-MIB\n\nFILENAME = \"OLD-CISCO-CPU-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n\n    \"OLD-CISCO-CPU-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"CISCO-SMI\", \"name\" : \"local\"},\n    ),\n\n    \"nodes\" : {\n        \"lcpu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1\",\n        }, # node\n        \"busyPer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CPU busy percentage in the last 5 second\nperiod. Not the last 5 realtime seconds but\nthe last 5 second period in the scheduler.\"\"\",\n        }, # scalar\n        \"avgBusy1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"1 minute exponentially-decayed moving\naverage of the CPU busy percentage.\"\"\",\n        }, # scalar\n        \"avgBusy5\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"5 minute exponentially-decayed moving\naverage of the CPU busy percentage.\"\"\",\n        }, # scalar\n        \"idleCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"cisco internal variable. not to be used\"\"\",\n        }, # scalar\n        \"idleWired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"OLD-CISCO-CPU-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.9.2.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"cisco internal variable. not to be used\"\"\",\n        }, # scalar\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/P8541-MIB.py",
    "content": "# -*- coding: iso-8859-1 -*-\n# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python P8541-MIB\n\nFILENAME = \"P8541.mib\"\n\nMIB = {\n    \"moduleName\" : \"P8541-MIB\",\n\n    \"P8541-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n    ),\n\n    \"typedefs\" : {\n        \"DisplayString\" : {\n            \"basetype\" : \"OctetString\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"comet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1\",\n        }, # node\n        \"p8541\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5\",\n        }, # node\n        \"global\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1\",\n        }, # node\n        \"sensorName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device name\"\"\",\n        }, # scalar\n        \"serialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number\"\"\",\n        }, # scalar\n        \"deviceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device type\"\"\",\n        }, # scalar\n        \"channels\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2\",\n        }, # node\n        \"channel1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1\",\n        }, # node\n        \"ch1Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 name\"\"\",\n        }, # scalar\n        \"ch1Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 value\"\"\",\n        }, # scalar\n        \"ch1IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch1Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 1; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch1LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 delay [sec]\"\"\",\n        }, # scalar\n        \"ch1Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 1; �C, �F, %RH\"\"\",\n        }, # scalar\n        \"ch1AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 1; none, high, low\"\"\",\n        }, # scalar\n        \"channel2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2\",\n        }, # node\n        \"ch2Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 name\"\"\",\n        }, # scalar\n        \"ch2Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 value\"\"\",\n        }, # scalar\n        \"ch2IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch2Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 2; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch2LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 delay [sec]\"\"\",\n        }, # scalar\n        \"ch2Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 2; �C, �F, %RH\"\"\",\n        }, # scalar\n        \"ch2AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 2; none, high, low\"\"\",\n        }, # scalar\n        \"channel3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3\",\n        }, # node\n        \"ch3Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 name\"\"\",\n        }, # scalar\n        \"ch3Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 value\"\"\",\n        }, # scalar\n        \"ch3IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch3Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 3; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch3LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 delay [sec]\"\"\",\n        }, # scalar\n        \"ch3Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 3; �C, �F, %RH\"\"\",\n        }, # scalar\n        \"ch3AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 3; none, high, low\"\"\",\n        }, # scalar\n        \"channel4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4\",\n        }, # node\n        \"ch4Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 name\"\"\",\n        }, # scalar\n        \"ch4Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 value\"\"\",\n        }, # scalar\n        \"ch4IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch4Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 4; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch4LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 delay [sec]\"\"\",\n        }, # scalar\n        \"ch4Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 4; �C, �F, %RH\"\"\",\n        }, # scalar\n        \"ch4AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 4; none, high, low\"\"\",\n        }, # scalar\n        \"traps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.3\",\n        }, # node\n        \"messageString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8541-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Message giving more detailed information on alarms\"\"\",\n        }, # scalar\n        \"tables\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4\",\n        }, # node\n        \"historyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of the history values\"\"\",\n        }, # table\n        \"historyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ch1value\",\n            ],\n            \"description\" :\n                \"\"\"History values entries\"\"\",\n        }, # row\n        \"ch1value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 hisotry reading\"\"\",\n        }, # column\n        \"ch2value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 hisotry reading\"\"\",\n        }, # column\n        \"ch3value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 hisotry reading\"\"\",\n        }, # column\n        \"ch4value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8541-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 hisotry reading\"\"\",\n        }, # column\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/P8652-MIB.py",
    "content": "# -*- coding: utf-8 -*-\n# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python P8652-MIB\n\nFILENAME = \"P8x52/fw_4_5_6_x-4_5_7_x/P8652.mib\"\n\nMIB = {\n    \"moduleName\" : \"P8652-MIB\",\n\n    \"P8652-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n    ),\n\n    \"typedefs\" : {\n        \"DisplayString\" : {\n            \"basetype\" : \"OctetString\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"comet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1\",\n        }, # node\n        \"p8652\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5\",\n        }, # node\n        \"global\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1\",\n        }, # node\n        \"sensorName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device name\"\"\",\n        }, # scalar\n        \"serialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number\"\"\",\n        }, # scalar\n        \"deviceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device type\"\"\",\n        }, # scalar\n        \"channels\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2\",\n        }, # node\n        \"channel1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1\",\n        }, # node\n        \"ch1Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 name\"\"\",\n        }, # scalar\n        \"ch1Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 value\"\"\",\n        }, # scalar\n        \"ch1IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch1Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 1; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch1LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch1LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 delay [sec]\"\"\",\n        }, # scalar\n        \"ch1Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 1; °C, °F, %RH\"\"\",\n        }, # scalar\n        \"ch1AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 1; none, high, low\"\"\",\n        }, # scalar\n        \"ch1Min\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 minimal value\"\"\",\n        }, # scalar\n        \"ch1Max\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 maximal value\"\"\",\n        }, # scalar\n        \"channel2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2\",\n        }, # node\n        \"ch2Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 name\"\"\",\n        }, # scalar\n        \"ch2Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 value\"\"\",\n        }, # scalar\n        \"ch2IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch2Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 2; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch2LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch2LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 delay [sec]\"\"\",\n        }, # scalar\n        \"ch2Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 2; °C, °F, %RH\"\"\",\n        }, # scalar\n        \"ch2AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 2; none, high, low\"\"\",\n        }, # scalar\n        \"ch2Min\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 minimal value\"\"\",\n        }, # scalar\n        \"ch2Max\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 maximal value\"\"\",\n        }, # scalar\n        \"channel3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3\",\n        }, # node\n        \"ch3Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 name\"\"\",\n        }, # scalar\n        \"ch3Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 value\"\"\",\n        }, # scalar\n        \"ch3IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch3Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 3; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch3LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch3LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 delay [sec]\"\"\",\n        }, # scalar\n        \"ch3Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 3; °C, °F, %RH\"\"\",\n        }, # scalar\n        \"ch3AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 3; none, high, low\"\"\",\n        }, # scalar\n        \"ch3Min\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 minimal value\"\"\",\n        }, # scalar\n        \"ch3Max\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 maximal value\"\"\",\n        }, # scalar\n        \"channel4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4\",\n        }, # node\n        \"ch4Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 name\"\"\",\n        }, # scalar\n        \"ch4Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 value\"\"\",\n        }, # scalar\n        \"ch4IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 value * 10 (12.5 dgr C = 125)\"\"\",\n        }, # scalar\n        \"ch4Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 4; 0 - No alarm, 1 - Alarm High, 2 - Alarm Low\"\"\",\n        }, # scalar\n        \"ch4LimHi\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 upper alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimLo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 low alarm limit (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimHyst\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 hysteressis (value * 10)\"\"\",\n        }, # scalar\n        \"ch4LimDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 delay [sec]\"\"\",\n        }, # scalar\n        \"ch4Unit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit on channel 4; °C, °F, %RH\"\"\",\n        }, # scalar\n        \"ch4AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on channel 4; none, high, low\"\"\",\n        }, # scalar\n        \"ch4Min\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 minimal value\"\"\",\n        }, # scalar\n        \"ch4Max\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 maximal value\"\"\",\n        }, # scalar\n        \"bin1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6\",\n        }, # node\n        \"bin1Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 1 name\"\"\",\n        }, # scalar\n        \"bin1Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 1 value\"\"\",\n        }, # scalar\n        \"bin1IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 1 value - Integer\"\"\",\n        }, # scalar\n        \"bin1AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 1; none, active\"\"\",\n        }, # scalar\n        \"bin1Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 1; 0 - No alarm, 1 - Alarm active\"\"\",\n        }, # scalar\n        \"bin2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7\",\n        }, # node\n        \"bin2Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 2 name\"\"\",\n        }, # scalar\n        \"bin2Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 2 value\"\"\",\n        }, # scalar\n        \"bin2IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 2 value - Integer\"\"\",\n        }, # scalar\n        \"bin2AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 2; none, active\"\"\",\n        }, # scalar\n        \"bin2Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 2; 0 - No alarm, 1 - Alarm active\"\"\",\n        }, # scalar\n        \"bin3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8\",\n        }, # node\n        \"bin3Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 3 name\"\"\",\n        }, # scalar\n        \"bin3Val\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 3 value\"\"\",\n        }, # scalar\n        \"bin3IntVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"BIN Input 3 value - Integer\"\"\",\n        }, # scalar\n        \"bin3AlarmStr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 3; none, active\"\"\",\n        }, # scalar\n        \"bin3Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.2.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on BIN Input 3; 0 - No alarm, 1 - Alarm active\"\"\",\n        }, # scalar\n        \"traps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.3\",\n        }, # node\n        \"messageString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"P8652-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Message giving more detailed information on alarms\"\"\",\n        }, # scalar\n        \"tables\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4\",\n        }, # node\n        \"historyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of the history values\"\"\",\n        }, # table\n        \"historyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ch1value\",\n            ],\n            \"description\" :\n                \"\"\"History values entries\"\"\",\n        }, # row\n        \"ch1value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 1 hisotry reading\"\"\",\n        }, # column\n        \"ch2value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 2 hisotry reading\"\"\",\n        }, # column\n        \"ch3value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 3 hisotry reading\"\"\",\n        }, # column\n        \"ch4value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"P8652-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.5.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-550\",\n                        \"max\" : \"1250\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Channel 4 hisotry reading\"\"\",\n        }, # column\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/PDU2-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python PDU2-MIB\n\nFILENAME = \"pdu2_mib.mib\"\n\nMIB = {\n    \"moduleName\" : \"PDU2-MIB\",\n\n    \"PDU2-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Raritan\"\"\",\n        \"contact\" : \n            \"\"\"\nAuthor:       Raritan Americas, Inc.\npostal:       Raritan Americas, Inc.\n              400 Cottontail Lane\n              Somerset, NJ 08873\nemail:        tech@raritan.com\nphone:        +1 732 764 8886\"\"\",\n        \"description\" :\n            \"\"\"This MIB describes the SNMP functions of the Dominion PX G2\nPower Distribution Unit by Raritan Computer.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2016-02-09 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 3.2.20:\n1) Added the following:\n     NetworkInterfaceTypeEnumeration,\n     networkInterfaceType to unitConfigurationTable\n2) Added AddressSourceEnumeration\n3) Added activeDNS ServerCount to unitConfigurationTable\n4) Added activeDNSServerTable\"\"\",\n            },\n            {\n                \"date\" : \"2015-10-26 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 3.2.10:\n1) Added to trapInformation:\n    phoneNumber\n   Added the following traps:\n    smsMessageTransmissionFailure trap\"\"\",\n            },\n            {\n                \"date\" : \"2015-09-30 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 3.2.1:\n- Support for PMC/BCM2\n- Line and node information for component poles\n\n1) SensorTypeEnumeration: Added\n   reactivePower(29)\n   displacementPowerFactor(35)\n2) SensorUnitsEnumeration: Added\n   var(23)\n3) ProductTypeEnumeration: Added\n   powerMeter(3)\n4) Added the following enumerations:\n   PanelLayoutEnumeration\n   PanelNumberingEnumeration\n   CircuitTypeEnumeration\n   PhaseEnumeration\n   LineEnumeration\n   PowerMeterTypeEnumeration\n5) Added the following tables:\n   inletPoleConfigurationTable\n   overCurrentProtectorPoleConfigurationTable\n   outletPoleConfigurationTable\n   transferSwitchPoleConfigurationTable\n   powerMeterConfigurationTable\n   circuitConfigurationTable\n   circuitPoleConfigurationTable\n   circuitSensorConfigurationTable\n   circuitPoleSensorConfigurationTable\n   circuitSensorLogTable\n   circuitPoleSensorLogTable\n   circuitSensorMeasurementsTable\n   circuitPoleSensorMeasurementsTable\n   circuitSensorControlTable\n6) unitConfigurationTable: Added\n   circuitCount\n7) inletDeviceCapabilities: Added\n   reactivePower(28)\n8) inletPoleCapabilities: Added\n   phaseAngle(23)\n   reactivePower(28)\n   displacementPowerFactor(34)\n9) overCurrentProtectorConfigurationTable: Added\n   overCurrentProtectorPoleCount\n10) transferSwitchConfigurationTable: Added\n   transferSwitchPoleCount\n11) Added the following to trapInformation:\n    circuitNumber\n    circuitPoleNumber\n12) Added the following traps:\n    circuitSensorStateChange\n    circuitPoleSensorStateChange\n    circuitAdded\n    circuitDeleted\n    circuitModified\n    circuitSensorReset\n    powerMeterAdded\n    powerMeterDeleted\n    powerMeterModified\n13) Revised the DESCRIPTION clauses of:\n   pduCount\n   pduId\n   inletPoleCount\"\"\",\n            },\n            {\n                \"date\" : \"2015-02-18 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 3.1.0:\n- Support absolute humidity sensors\n\n1) SensorStateEnumeration: Added\n    nonRedundant(30)\n2) SensorTypeEnumeration: Added\n    absoluteHumidity(28)\n3) SensorUnitsEnumeration: Added\n    grampercubicmeter(22)\n4) Corrected the possible states for the rcmState, operatingState and activeInlet sensors\n5) Documented that the unitSensorResetValue object in unitSensorControlTable applies\n    only to multi-inlet PDUs\n6) Deprecated inletRatedVA, inletRatedFrequency\n7) inletDeviceCapabilities: Corrected bit values for residualCurrent(25)\n    and rcmState(26)\"\"\",\n            },\n            {\n                \"date\" : \"2014-06-04 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 3.0.0:\n- Support for signed sensor readings\n- Support for unit-level power and energy sensors\n- Send trap on peripheral device firmware update\n- Allow peripheral device auto management to be disabled\n- Allow front panel outlet switching to be enabled or disabled\n- Support DX-PIR occupancy sensor\n\n1) Changed the SYNTAX from Integer32 to Unsigned32:\n    measurementsUnitSensorValue\n2) Added signed value, range and threshold columns to:\n    unitSensorConfigurationTable\n    unitSensorMeasurementsTable\n    pduSensorStateChange\n    inletSensorConfigurationTable\n    inletSensorMeasurementsTable\n    inletSensorLogTable\n    inletSensorStateChange\n    inletPoleSensorConfigurationTable\n    inletPoleSensorMeasurementsTable\n    inletPoleSensorLogTable\n    inletPoleSensorStateChange\n    overCurrentProtectorSensorConfigurationTable\n    overCurrentProtectorSensorMeasurementsTable\n    overCurrentProtectorSensorLogTable\n    overCurrentProtectorSensorStateChange\n    outletSensorConfigurationTable\n    outletSensorMeasurementsTable\n    outletSensorLogTable\n    outletSensorStateChange\n    outletPoleSensorConfigurationTable\n    outletPoleSensorMeasurementsTable\n    outletPoleSensorLogTable\n    outletPoleSensorStateChange\n3) Added unsigned value, range and threshold columns to:\n    unitSensorLogTable\n    transferSwitchSensorConfigurationTable\n    transferSwitchSensorMeasurementsTable\n    transferSwitchSensorLogTable\n    transferSwitchSensorStateChange\n4) Added UnitSensorControlTable\n5) Added unitSensorReset and unitSensorStateChange traps\n6) Deprecated pduSensorStateChange trap\n7) Added to unitConfigurationTable:\n    peripheralDevicesAutoManagement\n    frontPanelOutletSwitching\n    frontPanelRCMSelfTest\n    frontPanelActuatorControl\n8) Added to externalSensorConfigurationTable:\n    externalSensorAlarmedToNormalDelay\n9) Deprecated:\n    wireCount in unitConfiguraionTable\n    tables for wireSensors\n    traps for wireSensors\n10) SensorStateEnumeration: Added\n    fail(14)\n11) ProductTypeEnumeration: Renamed\n    rackSts(2) to transferSwitch\n12) Added:\n    PeripheralDeviceFirmwareUpdateStateEnumeration\n    peripheralDeviceFirmwareUpdateState\n    peripheralDeviceFirmwareUpdate trap\n13) Added userName to the following traps:\n    bulkConfigurationSaved\n    bulkConfigurationCopied\n    lhxSupportChanged\n    deviceSettingsSaved\n    deviceSettingsRestored\"\"\",\n            },\n            {\n                \"date\" : \"2014-01-09 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 2.6.0:\n- Support for PX3TS transfer switches\n\n1) SensorTypeEnumeration:\n  Removed:\n    scrOpenStatus\n    scrShortStatus\n  Added:\n    i1SmpsStatus(46)\n    i2SmpsStatus(47)\n    switchStatus(48)\n2) SensorStateEnumeration:\n  Removed:\n    marginal\n    fail\n  Added:\n    i1OpenFault(22)\n    i1ShortFault(23)\n    i2OpenFault(24)\n    i2ShortFault(25)\n    fault(26)\n    warning(27)\n    critical(28)\n3) unitDeviceCapabilities: Added\n    i1SmpsStatus(45)\n    i2SmpsStatus(46)\n4) transferSwitchCapabilities: Added\n    switchStatus(47)\n5) Added transferSwitchConfiguration table\n6) unitSensorLogTable:\n  Removed:\n    logUnitSensorAvgValue\n    logUnitSensorMaxValue\n    logUnitSensorMinValue\n  Added:\n    logUnitSensorSignedAvgValue\n    logUnitSensorSignedMaxValue\n    logUnitSensorSignedMinValue\"\"\",\n            },\n            {\n                \"date\" : \"2014-01-07 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 2.5.30:\n- Accumulating sensors (energy counters) can be reset\n- Sensor accuray and tolerance variables are deprecated\n\n1) Added peripheralDevicePackagePosition and peripheralDevicePackageState\n2) Added radiusError trap\n3) Added serverReachabilityError trap\n4) Deprecated the following:\n        unitSensorConfigurationTable/unitSensorAccuracy\n        unitSensorConfigurationTable/unitSensorTolerance\n        inletSensorConfigurationTable/inletSensorAccuracy\n        inletSensorConfigurationTable/inletSensorTolerance\n        inletPoleSensorConfigurationTable/inletPoleSensorAccuracy\n        inletPoleSensorConfigurationTable/inletPoleSensorTolerance\n        outletSensorConfigurationTable/outetSensorAccuracy\n        outletSensorConfigurationTable/outletSensorTolerance\n        outletPoleSensorConfigurationTable/outetPoleSensorAccuracy\n        outletPoleSensorConfigurationTable/outletPoleSensorTolerance\n        overCurrentProtectorSensorConfigurationTable/overCurrentProtectorSensorAccuracy\n        overCurrentProtectorSensorConfigurationTable/overCurrentProtectorSensorTolerance\n        externalSensorConfigurationTable/externalSensorAccuracy\n        externalSensorConfigurationTable/externalSensorTolerance\n        wireSensorConfigurationTable/wireSensorAccuracy\n        wireSensorConfigurationTable/wireSensorTolerance\n        transferSwitchSensorConfigurationTable/transferSwitchSensorAccuracy\n        transferSwitchSensorConfigurationTable/transferSwitchSensorTolerance\n5) Added inletSensorReset and outletSensorReset traps\n6) Added inletSensorControl and inletSensorControlTable\n7) Added outletSensorControl and outletSensorControlTable\n 8) Added unknownPeripheralDeviceAttached trap\"\"\",\n            },\n            {\n                \"date\" : \"2013-11-21 00:00\",\n                \"description\" :\n                    \"\"\"PX2 release 2.5.20:\n- Support for residual current monitors\n- Support for USB cascading with one IP address\n- Support for line-neutral voltage sensors\n\n1) SensorTypeEnumeration: Added\n     rmsVoltageLN(25)\n     residualCurrent(26)\n     rcmState(27)\n2) SensorStateEnumeration: Added\n     warning(27)\n     critical(28)\n     selfTest(29)\n3) inletDeviceCapabilities: Added\n     residualCurrent(26)\n     rcmState(27)\n4) Added rmsVoltageLN(24) to inletPoleCapabilities\n5) Added inletRCMResidualOperatingCurrent to inletConfigurationTable\n6) Added rcmControl under control\n7) Added rcmSelfTestTable under rcmControl\n8) Added DeviceCascadeTypeEnumeration\n9) Added deviceCascadeType, deviceCascadePosition to unitConfigurationTable\n10) Added agentInetPortNumber under trapInformation\n11) Added agentInetPortNumber as a varbind to all traps\n12) Added peripheralDevicePackageTable containing information on peripheral\n         device packages\"\"\",\n            },\n            {\n                \"date\" : \"2013-09-18 00:00\",\n                \"description\" :\n                    \"\"\"\n1) Added serverConnectivityUnrecoverable trap\"\"\",\n            },\n            {\n                \"date\" : \"2013-08-01 00:00\",\n                \"description\" :\n                    \"\"\"\n1) Add RCBO OCP types\"\"\",\n            },\n            {\n                \"date\" : \"2013-07-10 00:00\",\n                \"description\" :\n                    \"\"\"\n1) Added externalSensorTypeDefaultThresholdsTable \"\"\",\n            },\n            {\n                \"date\" : \"2013-07-02 00:00\",\n                \"description\" :\n                    \"\"\"\n1) Added relayBehaviorOnPowerLoss to unitConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2013-05-21 00:00\",\n                \"description\" :\n                    \"\"\"\n1) Added inletEnableState to inletConfigurationTable\n2) Added traps: inletEnabled and inletDisabled\"\"\",\n            },\n            {\n                \"date\" : \"2013-04-26 00:00\",\n                \"description\" :\n                    \"\"\" \n1) Added traps: webcamInserted and webcamRemoved \n2) Added trapInformation parameters: webcamModel,webcamConnectionPort\"\"\",\n            },\n            {\n                \"date\" : \"2013-03-27 00:00\",\n                \"description\" :\n                    \"\"\" \n1) Changed outletSource to outletPowerSource in outletConfigurationTable\n2) Changed transferSwitchSource1 and transferSwitchSource2 to \n           transferSwitchPowerSource1 and transferSwitchPowerSource2  in  transferSwitchConfigurationTable\n3) Changed overCurrentProtectorSource to overCurrentProtectorPowerSource in overCurrentProtectorConfigurationTable\n4) Changed wireSource to wirePowerSource in wireConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2013-03-25 10:00\",\n                \"description\" :\n                    \"\"\" \n1) Added comments showing the possible states for each sensor type.          \"\"\",\n            },\n            {\n                \"date\" : \"2013-03-25 00:00\",\n                \"description\" :\n                    \"\"\" \n1) Added outletSource to outletConfigurationTable\n2) Added transferSwitchSource1 and transferSwitchSource2 to transferSwitchConfigurationTable\n3) Added overCurrentProtectorSource to overCurrentProtectorConfigurationTable\n4) Added wireSource to wireConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2013-03-18 00:00\",\n                \"description\" :\n                    \"\"\" 1) Added meteringControllerCount to the unitConfigurationTable \n2) Added meteringController to BoardTypeEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2013-02-25 00:00\",\n                \"description\" :\n                    \"\"\" \n1) Added ProductTypeEnumeration\n2) Added productType to unitConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2013-02-04 00:00\",\n                \"description\" :\n                    \"\"\" 1) Added TransferSwitchTransferReasonEnumeration\n2) Added transferSwitchLastTransferReason to transferSwitchControlTable\n3) Added transferSwitchLastTransferReason to transferSwitchSensorStateChange trap\"\"\",\n            },\n            {\n                \"date\" : \"2013-01-24 00:00\",\n                \"description\" :\n                    \"\"\"Added required sensor types and units\"\"\",\n            },\n            {\n                \"date\" : \"2012-11-20 00:00\",\n                \"description\" :\n                    \"\"\"1) Added  externalSensorIsActuator and externalSensorPosition to the externalSensorConfigurationTable\n2) Added actuatorControlTable\"\"\",\n            },\n            {\n                \"date\" : \"2012-11-15 00:00\",\n                \"description\" :\n                    \"\"\"1) Removed transferSwitchOutputCapabilities from transferSwitchConfigurationTable\n2) Removed the following tables:\n     transferSwitchOutputSensorConfigurationTable\n     transferSwitchOutputSensorLogTable\n     transferSwitchOutputSensorMeasurementsTable\n3) Removed transferSwitchOutputSensorStateChange trap\n4) Added transferSwitchControlTable\n5) Removed the following entries from SensorTypeEnumeration:\n     overTemperatureFault\n     fans\n     internalFault\n     inletPhaseDeviationFault\n     overloadFault\n6) Added the following entries to SensorTypeEnumeration:\n     overloadStatus\n     overheatStatus\n     scrOpenStatus\n     scrShortStatus\n     fanStatus\n     inletPhaseSyncAngle\n     inletPhaseSync\n7) Added the following entries to SensorStateEnumeration:\n     inSync,\n     outOfSync\n8) Renamed transferSwitchNoTransferIfPhaseDeviationFault to\n   transferSwitchAutoReTransferRequiresPhaseSync\"\"\",\n            },\n            {\n                \"date\" : \"2012-10-05 00:00\",\n                \"description\" :\n                    \"\"\"1) Modified the DESCRIPTION of the following.\noutletSwitchControlTable\ntransferSwitchOutputSensorMeasurementsEntry \noverCurrentProtectorSensorMeasurementsEntry\noutletPoleSensorMeasurementsEntry\ntransferSwitchOutputSensorLogEntry\ntransferSwitchOutputSensorLogTable\nwireSensorLogEntry\nexternalSensorNumber\ncontrollerConfigurationEntry\nSensorUnitsEnumeration \nmeasurementsGroup\nlogGroup\"\"\",\n            },\n            {\n                \"date\" : \"2012-10-04 00:00\",\n                \"description\" :\n                    \"\"\"1) In the transferSwitchConfigurationTable,\nreplaced  transferSwitchFrequencyDeviation with\n          transferSwitchLowerMarginalFrequency and transferSwitchUpperMarginalFrequency\"\"\",\n            },\n            {\n                \"date\" : \"2012-09-28 00:00\",\n                \"description\" :\n                    \"\"\"1) Modified the DESCRIPTION of the following.\nbulkConfigurationCopied, userModified, userSessionTimeout\"\"\",\n            },\n            {\n                \"date\" : \"2012-09-21 00:00\",\n                \"description\" :\n                    \"\"\"1) Added the following traps:\ndeviceSettingsSaved,  deviceSettingsRestored\"\"\",\n            },\n            {\n                \"date\" : \"2012-09-20 00:00\",\n                \"description\" :\n                    \"\"\"1) Added the following objects to the transferSwitchConfigurationTable:\ntransferSwitchInternalFaultType \n2) Added transferSwitchInternalFaultType to transferSwitchSensorStateChange trap\n3) Added marginal to SensorStateEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2012-09-17 00:00\",\n                \"description\" :\n                    \"\"\"Deprecated the following objects from the unitConfigurationTable\npxInetAddressType, \npxInetIPAddress,                  \npxInetNetmask,                    \npxInetGateway  \"\"\",\n            },\n            {\n                \"date\" : \"2012-09-04 00:00\",\n                \"description\" :\n                    \"\"\"Support for transfer Switch objects and sensors.\n1. Added transferSwitchCount to unitConfigurationTable\n2. Added the following tables:\n     transferSwitchConfigurationTable,\n     transferSwitchSensorConfigurationTable,\n     transferSwitchSensorLogTable,\n     transferSwitchSensorMeasurementsTable\n     transferSwitchOutputSensorConfigurationTable,\n     transferSwitchOutputSensorLogTable,\n     transferSwitchOutputSensorMeasurementsTable\n3. Added \n     transferSwitchSensorStateChange trap\n     transferSwitchOutputSensorStateChange trap\"\"\",\n            },\n            {\n                \"date\" : \"2012-06-22 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added surgeProtectorStatus to SensorTypeEnumeration\n2. Added surgeProtectorStatus to inletDeviceCapabilities\"\"\",\n            },\n            {\n                \"date\" : \"2012-06-18 00:00\",\n                \"description\" :\n                    \"\"\"Added a comment before the section listing the traps.\nThe comment notes that the pxInetIPAddressType and  \npxInetIPAddress fields are not used for IPv6 traps\"\"\",\n            },\n            {\n                \"date\" : \"2012-06-06 00:00\",\n                \"description\" :\n                    \"\"\"Support for wire objects and sensors.\n1. Added wireCount to unitConfigurationTable\n2. Added the following tables:\n     wireConfigurationTable,\n     wireSensorConfigurationTable,\n     wireSensorLogTable,\n     wireSensorMeasurementsTable\n3. Added wireSensorStateChange trap\"\"\",\n            },\n            {\n                \"date\" : \"2012-05-25 00:00\",\n                \"description\" :\n                    \"\"\"added userAccepted/DeclinedRestrictedServiceAgreement traps\"\"\",\n            },\n            {\n                \"date\" : \"2012-05-15 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added support for NTP servers.\n   Added the following objects under info\n     synchronizeWithNTPServer, useDHCPProvidedNTPServer,\n     firstNTPServerAddressType, firstNTPServerAddress,\n     secondNTPServerAddressType, secondNTPServerAddress\"\"\",\n            },\n            {\n                \"date\" : \"2012-03-26 00:00\",\n                \"description\" :\n                    \"\"\"added lhxSupportChanged trap.\"\"\",\n            },\n            {\n                \"date\" : \"2011-12-13 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added usbSlaveConnected, usbSlaveDisonnected traps\"\"\",\n            },\n            {\n                \"date\" : \"2011-11-29 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added cascadedDeviceConnected to UnitConfigurationEntryStruct\"\"\",\n            },\n            {\n                \"date\" : \"2011-10-25 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added DeviceIdentificationParameterEnumeration\n2. Added deviceIdentificationChanged Trap\n3. Added sysContact, sysName, sysLocation to all traps\"\"\",\n            },\n            {\n                \"date\" : \"2011-06-16 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Changed DESCRIPTION of outletSequencingDelay\"\"\",\n            },\n            {\n                \"date\" : \"2011-03-22 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added rfCodeTagConnected, rfCodeTagDisconnected traps \n2. Changed MAX-ACCESS for externalOnOffSensorSubtype to read-write\"\"\",\n            },\n            {\n                \"date\" : \"2011-02-21 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added rpm(19) to SensorUnitsEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2011-02-14 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Changed 5WIRE IEC60309 enumerations from 250V to 208V\"\"\",\n            },\n            {\n                \"date\" : \"2011-02-08 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Removed OnOffSensorSubtypeEnumeration\n2. Changed SYNTAX of externalOnOffSensorSubtype to SensorTypeEnumeration\n3. Added binary, contact, fanspeed, none to SensorTypeEnumeration\n4. Changed outletPoleCapabilities to be the same as inletPoleCapabilities\"\"\",\n            },\n            {\n                \"date\" : \"2011-02-03 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added externalSensorSerialNumber,externalOnOffSensorSubtype, externalSensorChannelNumber\n   to the externalSensorStateChange trap.\"\"\",\n            },\n            {\n                \"date\" : \"2011-01-31 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Modifed the DESCRIPTION of the powerControl trap\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-15 00:00\",\n                \"description\" :\n                    \"\"\"\n1. Added dataLoggingEnableForAllSensors to logConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-13 11:31\",\n                \"description\" :\n                    \"\"\"\n1. Added inrushGuardDelay to unitConfigurationTable\n2. Added outletSequenceDelay to outletConfigurationTable\n3. Deprecated outletSequencingDelay\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-13 00:00\",\n                \"description\" :\n                    \"\"\"1. Added externalOnOffSensorSubtype to ExternalSensorConfigurationEntryStruct\n2. Added OnOffSensorSubtypeEnumeration\n3. Added alarmed to SensorStateEnumeration\n4. Removed firmwareFileDiscarded trap\n5. Removed securityViolation trap\"\"\",\n            },\n            {\n                \"date\" : \"2010-12-07 00:00\",\n                \"description\" :\n                    \"\"\"1. changed  DESCRIPTION  of measurementPeriod to say that the value is fixed at 1 second.\"\"\",\n            },\n            {\n                \"date\" : \"2010-10-07 00:00\",\n                \"description\" :\n                    \"\"\"1. added ocpFUSEPAIR(5) to OverCurrentProtectorTypeEnumeration\n2. changed  ocpFUSE1POLE(4) to ocpFUSE(4) in OverCurrentProtectorTypeEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2010-10-04 00:00\",\n                \"description\" :\n                    \"\"\"1. added ocpFUSE2POLE(5) to OverCurrentProtectorTypeEnumeration\n2. changed ocpFUSE(4) to ocpFUSE1POLE(4) in OverCurrentProtectorTypeEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2010-09-01 00:00\",\n                \"description\" :\n                    \"\"\"1. Removed userName from serverNotReachable and serverReachable traps\"\"\",\n            },\n            {\n                \"date\" : \"2010-08-05 00:00\",\n                \"description\" :\n                    \"\"\"1. Added reliabilityDataTableSequenceNumber\n2. Changed SYNTAX of reliabilityErrorLogIndex to Integer32(1..2147483647)\"\"\",\n            },\n            {\n                \"date\" : \"2010-07-23 00:00\",\n                \"description\" :\n                    \"\"\"1. Moved serverCount to unitConfigurationTable \"\"\",\n            },\n            {\n                \"date\" : \"2010-07-22 00:00\",\n                \"description\" :\n                    \"\"\"1. Added support for the Reliability Tables\n2. Added new group reliabilityGroup\n3. Defined nodes reliability,reliabilityData,reliabilityErrorLog                        \n4. Added reliabilityDataTable & reliabilityErrorLogTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-07-21 00:00\",\n                \"description\" :\n                    \"\"\"1. Added plug56PA320 to PlugTypeEnumeration\n2. Added plug56P320F to PlugTypeEnumeration\"\"\",\n            },\n            {\n                \"date\" : \"2010-07-14 00:00\",\n                \"description\" :\n                    \"\"\"1. Added the following traps:\npingServerEnabled, pingServerDisabled, serverNotReachable, serverReachable\n2. Added the serverReachabilityTable  \"\"\",\n            },\n            {\n                \"date\" : \"2010-07-06 00:00\",\n                \"description\" :\n                    \"\"\"1. Added externalSensorChannelNumber to externalSensorConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-07-01 00:00\",\n                \"description\" :\n                    \"\"\"1. added outletSwitchingState to outletSwitchControlTable\n2. added outletSwitchingTimeStamp to outletSwitchControlTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-06-30 00:00\",\n                \"description\" :\n                    \"\"\"1. added switchingOperation to the powerControl trap\"\"\",\n            },\n            {\n                \"date\" : \"2010-06-21 00:00\",\n                \"description\" :\n                    \"\"\"1. added support for Load shedding\n2. added loadShedding to the unitConfigurationTable.\n3. added nonCritical to the outletConfigurationTable\n4. added loadSheddingModeEntered & loadSheddingModeExited traps\n5. modified description of inletPlug in inletConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-06-03 00:00\",\n                \"description\" :\n                    \"\"\"1. added plugOTHER to PlugTypeEnumeration\n2. added receptacleOTHER to ReceptacleTypeEnumeration\n3. added inletPlugDescriptor to inletConfigurationTable\n4. added outletReceptacleDescriptor to outletConfigurationTable\"\"\",\n            },\n            {\n                \"date\" : \"2010-05-27 00:00\",\n                \"description\" :\n                    \"\"\"1. added INetAddressType and INetAddress to represent IP addresses\n2. unitConfigurationTable: deprecated pxIpAddress\n3. unitConfigurationTable: added pxInetAddressType,pxInetIPAddress,pxInetNetmask,pxInetGateway\n2: added pxInetAddressType,pxInetIPAddress to all traps\n3: defined new trap deviceUpdateFailed\"\"\",\n            },\n            {\n                \"date\" : \"2010-05-24 00:00\",\n                \"description\" :\n                    \"\"\"Added typeOfSensor to externalSensorStateChange trap\"\"\",\n            },\n            {\n                \"date\" : \"2010-04-19 00:00\",\n                \"description\" :\n                    \"\"\"modified the DESCRIPTION of the deviceUpdateCompleted trap\"\"\",\n            },\n            {\n                \"date\" : \"2010-04-15 00:00\",\n                \"description\" :\n                    \"\"\"modified the DESCRIPTION of all SensorStateChangeDelay parameters\"\"\",\n            },\n            {\n                \"date\" : \"2010-04-08 00:00\",\n                \"description\" :\n                    \"\"\"modified the DESCRIPTION of sensor parameters that do not apply to discrete sensors\"\"\",\n            },\n            {\n                \"date\" : \"2010-03-29 00:00\",\n                \"description\" :\n                    \"\"\"added trap ldapError\"\"\",\n            },\n            {\n                \"date\" : \"2010-03-25 00:00\",\n                \"description\" :\n                    \"\"\"changed the SYNTAX of the following objects from Integer32 to Unsigned32:\nlogInletSensorMaxValue,\nlogInletSensorMinValue,\nlogInletSensorAvgValue,\nlogInletPoleSensorMaxValue,\nlogInletPoleSensorMinValue,\nlogInletPoleSensorAvgValue,\nlogOutletSensorMaxValue,\nlogOutletSensorMinValue,\nlogOutletSensorAvgValue,\nlogOutletPoleSensorMaxValue,\nlogOutlePoletSensorMinValue,\nlogOutletPoleSensorAvgValue,\nlogOverCurrentProtectorSensorMaxValue,\nlogOverCurrentProtectorSensorMinValue,\nlogOverCurrentProtectorSensorAvgValue,\nmeasurementsInletSensorValue,\nmeasurementsInletPoleSensorValue,\nmeasurementsOutletSensorValue,\nmeasurementsOutletPoleSensorValue,\nmeasurementsOverCurrentProtectorSensorValue\"\"\",\n            },\n            {\n                \"date\" : \"2010-03-16 00:00\",\n                \"description\" :\n                    \"\"\"added trap smtpMessageTransmissionFailure\"\"\",\n            },\n            {\n                \"date\" : \"2010-03-01 00:00\",\n                \"description\" :\n                    \"\"\"changed externalSensorsZCoordinateUnits to an Enumeration\"\"\",\n            },\n            {\n                \"date\" : \"2010-01-29 00:00\",\n                \"description\" :\n                    \"\"\"The first version of the MIB.\"\"\",\n            },\n        ),\n        \"identity node\" : \"raritan\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n        {\"module\" : \"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysContact\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysName\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysLocation\"},\n    ),\n\n    \"typedefs\" : {\n        \"SensorTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"rmsCurrent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"peakCurrent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"unbalancedCurrent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"rmsVoltage\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"activePower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"apparentPower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"powerFactor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"activeEnergy\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"apparentEnergy\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"temperature\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"humidity\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"airFlow\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"airPressure\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"onOff\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"trip\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"vibration\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"waterDetection\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"smokeDetection\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"binary\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"contact\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"fanSpeed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"surgeProtectorStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"frequency\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"phaseAngle\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"rmsVoltageLN\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"residualCurrent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"rcmState\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"absoluteHumidity\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"reactivePower\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"none\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"powerQuality\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"overloadStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"overheatStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"displacementPowerFactor\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"fanStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"inletPhaseSyncAngle\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"inletPhaseSync\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"operatingState\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"activeInlet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"illuminance\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"doorContact\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"tamperDetection\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"motionDetection\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"i1smpsStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"i2smpsStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"switchStatus\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"description\" :\n                \"\"\"The types a sensor can be.\"\"\",\n        },\n        \"SensorStateEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unavailable\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"open\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"closed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"belowLowerCritical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"belowLowerWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"normal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"aboveUpperWarning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"aboveUpperCritical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"detected\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"notDetected\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"alarmed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"fail\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"yes\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"no\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"standby\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"one\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"two\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"inSync\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"outOfSync\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"i1OpenFault\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"i1ShortFault\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"i2OpenFault\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"i2ShortFault\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"fault\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"warning\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"critical\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"selfTest\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"nonRedundant\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"description\" :\n                \"\"\"The states a sensor can be in.\"\"\",\n        },\n        \"PlugTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"plugOTHER\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"plugNONE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"plug56P320\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"plug56P520\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"plug56P532\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"plugCS8365C\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"plugIEC320C14\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"plugIEC320C20\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"plugIEC603093WIRE250V16A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"plugIEC603093WIRE250V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"plugIEC603093WIRE250V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"plugIEC603093WIRE250V32A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"plugIEC603093WIRE250V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"plugIEC603093WIRE250V63A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"plugIEC603093WIRE250V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"plugIEC603093WIRE250V125A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"plugIEC603094WIRE250V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"plugIEC603094WIRE250V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"plugIEC603094WIRE250V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"plugIEC603094WIRE250V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"plugIEC603095WIRE208V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"plugIEC603095WIRE208V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"plugIEC603095WIRE208V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"plugIEC603095WIRE208V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"plugIEC603095WIRE415V16A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"plugIEC603095WIRE415V32A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"plugIEC603095WIRE415V63A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"plugIEC603095WIRE415V125A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"plugIEC603095WIRE480V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"plugIEC603095WIRE480V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"plugIEC603095WIRE480V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"plugIEC603095WIRE480V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"plugNEMA515P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"plugNEMAL515P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"plugNEMA520P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"plugNEMAL520P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"plugNEMAL530P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"plugNEMAL615P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"plugNEMAL620P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"plugNEMAL630P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"plugNEMAL1520P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"plugNEMAL1530P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"plugNEMAL2120P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"plugNEMAL2130P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"plugNEMAL2230P\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"plug56P320F\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"plug56PA320\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"49\"\n            },\n            \"description\" :\n                \"\"\"The types of inlet plug.\"\"\",\n        },\n        \"ReceptacleTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"receptacleOTHER\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"receptacleNONE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"receptacleBS1363\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"receptacle56P532\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"receptacleCS8364C\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"receptacleIEC320C13\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"receptacleIEC320C19\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"receptacleIEC603093WIRE250V16A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"receptacleIEC603093WIRE250V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"receptacleIEC603093WIRE250V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"receptacleIEC603093WIRE250V32A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"receptacleIEC603093WIRE250V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"receptacleIEC603093WIRE250V63A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"receptacleIEC603093WIRE250V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"receptacleIEC603093WIRE250V125A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"receptacleIEC603094WIRE250V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"receptacleIEC603094WIRE250V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"receptacleIEC603094WIRE250V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"receptacleIEC603094WIRE250V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"receptacleIEC603095WIRE208V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"receptacleIEC603095WIRE208V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"24\"\n            },\n            \"receptacleIEC603095WIRE208V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"25\"\n            },\n            \"receptacleIEC603095WIRE208V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"26\"\n            },\n            \"receptacleIEC603095WIRE415V16A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"27\"\n            },\n            \"receptacleIEC603095WIRE415V32A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"28\"\n            },\n            \"receptacleIEC603095WIRE415V63A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"29\"\n            },\n            \"receptacleIEC603095WIRE415V125A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"30\"\n            },\n            \"receptacleIEC603095WIRE480V20A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"31\"\n            },\n            \"receptacleIEC603095WIRE480V30A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"32\"\n            },\n            \"receptacleIEC603095WIRE480V60A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"33\"\n            },\n            \"receptacleIEC603095WIRE480V100A\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"34\"\n            },\n            \"receptacleNEMA515R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"35\"\n            },\n            \"receptacleNEMAL515R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"36\"\n            },\n            \"receptacleNEMA520R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"37\"\n            },\n            \"receptacleNEMAL520R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"38\"\n            },\n            \"receptacleNEMAL530R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"39\"\n            },\n            \"receptacleNEMAL615R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"40\"\n            },\n            \"receptacleNEMAL620R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"41\"\n            },\n            \"receptacleNEMAL630R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"42\"\n            },\n            \"receptacleNEMAL1520R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"43\"\n            },\n            \"receptacleNEMAL1530R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"44\"\n            },\n            \"receptacleNEMAL2120RP\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"45\"\n            },\n            \"receptacleNEMAL2130R\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"46\"\n            },\n            \"receptacleSCHUKOTYPEE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"47\"\n            },\n            \"receptacleSCHUKOTYPEF\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"48\"\n            },\n            \"description\" :\n                \"\"\"The types of outlet receptacle.\"\"\",\n        },\n        \"OverCurrentProtectorTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"ocpBREAKER1POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"ocpBREAKER2POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"ocpBREAKER3POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"ocpFUSE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"ocpFUSEPAIR\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"ocpRCBO2POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"ocpRCBO3POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"ocpRCBO4POLE\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"The types of overcurrent protectors.\"\"\",\n        },\n        \"BoardTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"mainController\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"inletController\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"outletController\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"meteringController\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The types of boards.\"\"\",\n        },\n        \"OutletSwitchingOperationsEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"cycle\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The switching operations on an outlet.\"\"\",\n        },\n        \"SensorUnitsEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"none\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"other\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"volt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"amp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"watt\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"voltamp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"wattHour\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"voltampHour\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"degreeC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"hertz\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"percent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"9\"\n            },\n            \"meterpersec\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"10\"\n            },\n            \"pascal\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"11\"\n            },\n            \"psi\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"12\"\n            },\n            \"g\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"13\"\n            },\n            \"degreeF\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"14\"\n            },\n            \"feet\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"15\"\n            },\n            \"inches\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"16\"\n            },\n            \"cm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"17\"\n            },\n            \"meters\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"18\"\n            },\n            \"rpm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"19\"\n            },\n            \"degrees\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"20\"\n            },\n            \"lux\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"21\"\n            },\n            \"grampercubicmeter\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"22\"\n            },\n            \"var\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"23\"\n            },\n            \"description\" :\n                \"\"\"The sensor units.\"\"\",\n        },\n        \"DaisychainMemberTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"standalone\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"master\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"slave\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The daisy chain member type.\"\"\",\n        },\n        \"URL\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"format\" : \"255a\",\n            \"description\" :\n                \"\"\"A Uniform Resource Locator (URL), as defined in RFC1738.\"\"\",\n        },\n        \"GlobalOutletStateOnStartupEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"lastKnownState\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The global outlet state on device start up; can be overridden per outlet.\"\"\",\n        },\n        \"OutletStateOnStartupEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"lastKnownState\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"globalOutletStateOnStartup\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The outlet state on device start up; this overrides the global value.\"\"\",\n        },\n        \"ExternalSensorsZCoordinateUnitsEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"rackUnits\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"text\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"The units of the external Sensor Z Coordinate.\nrackUnits implies that the Z Coordinate for all external sensors \n   is in rack Units (U)\ntext implies that the Z Coordinate for all external sensors \n   is a text string (label) \"\"\",\n        },\n        \"HundredthsOfAPercentage\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"10000\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"10000\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"Data type for reporting values in hundredths of percentage, i.e. 0.01 %.\"\"\",\n        },\n        \"DeviceIdentificationParameterEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"pduName\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"sysContact\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"sysName\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"sysLocation\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The configurable parameters.\"\"\",\n        },\n        \"TransferSwitchTransferReasonEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"unknown\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"startup\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"manualTransfer\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"automaticReTransfer\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"powerFailure\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"powerQuality\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"overloadAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"overheatAlarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"7\"\n            },\n            \"internalFailure\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"8\"\n            },\n            \"description\" :\n                \"\"\"Transfer Switch Transfer Reason\"\"\",\n        },\n        \"ProductTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"rackPdu\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"bcm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"transferSwitch\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"powerMeter\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The product types.\"\"\",\n        },\n        \"RelayPowerLossBehaviorEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"nonLatching\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"latching\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"The type of relay behavior on power loss.\"\"\",\n        },\n        \"DeviceCascadeTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"bridging\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"portForwarding\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"The type of configured cascading on this device.\"\"\",\n        },\n        \"PeripheralDeviceFirmwareUpdateStateEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"started\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"successful\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"failed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The state of an peripheral device firmware update.\"\"\",\n        },\n        \"PanelLayoutEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"invalid\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"oneColumn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"twoColumns\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The panel circuit position layout.\"\"\",\n        },\n        \"PanelNumberingEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"invalid\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"-1\"\n            },\n            \"oddEven\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"sequential\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"description\" :\n                \"\"\"The panel circuit position numbering scheme.\"\"\",\n        },\n        \"CircuitTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"onePhaseLL\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"onePhaseLN\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"onePhaseLLN\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"threePhase\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The panel circuit types.\"\"\",\n        },\n        \"PhaseEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"phaseA\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"phaseB\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"phaseC\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"neutral\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"earth\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"description\" :\n                \"\"\"The power phase.\"\"\",\n        },\n        \"LineEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"lineL1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"lineL2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"lineL3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"lineNeutral\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"description\" :\n                \"\"\"The Lines: L1, L2, L3, N.\"\"\",\n        },\n        \"PowerMeterTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"singlePhase\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"splitPhase\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"threePhase\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"The power meter types\"\"\",\n        },\n        \"NetworkInterfaceTypeEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"wired\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"0\"\n            },\n            \"wireless\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"description\" :\n                \"\"\"The type of network interface.\"\"\",\n        },\n        \"AddressSourceEnumeration\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"static\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"dhcp\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"dhcpv6\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"description\" :\n                \"\"\"How was the address obtained?\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"raritan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742\",\n            \"status\" : \"current\",\n        }, # node\n        \"pdu2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6\",\n        }, # node\n        \"traps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0\",\n        }, # node\n        \"trapInformation\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0\",\n        }, # node\n        \"trapInformationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Trap Information entries. The number of\nentries is given by the value of pduCount.\"\"\",\n        }, # table\n        \"trapInformationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects used in traps.\"\"\",\n        }, # row\n        \"userName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user currently logged in.\"\"\",\n        }, # column\n        \"targetUser\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user added, deleted, or modified.\"\"\",\n        }, # column\n        \"imageVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The version of the upgrade image.\"\"\",\n        }, # column\n        \"roleName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role added, deleted, or modified.\"\"\",\n        }, # column\n        \"smtpMessageRecipients\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Comma separated list of SMTP Message recipients\"\"\",\n        }, # column\n        \"smtpServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address/host name of the SMTP server\"\"\",\n        }, # column\n        \"oldSensorState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The old sensor state used in Sensor State Transition traps.\"\"\",\n        }, # scalar\n        \"pduNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each PDU. Its value\nranges between 1 and the value of pduCount.\"\"\",\n        }, # scalar\n        \"inletPoleNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each inlet Pole. Its value\nranges between 1 and the value of inletPoleCount.\"\"\",\n        }, # scalar\n        \"outletPoleNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each outlet Pole. Its value\nranges between 1 and the value of outletPoleCount.\"\"\",\n        }, # scalar\n        \"externalSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each external sensor. Its value\nranges between 1 and the value of externalSensorCount.\"\"\",\n        }, # scalar\n        \"typeOfSensor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorTypeEnumeration\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The type of sensor.\"\"\",\n        }, # scalar\n        \"errorDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Description of the Error\"\"\",\n        }, # scalar\n        \"deviceChangedParameter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"DeviceIdentificationParameterEnumeration\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Description of the parameter(s) that changed.\"\"\",\n        }, # scalar\n        \"changedParameterNewValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The new value of the changed parameter \"\"\",\n        }, # scalar\n        \"lhxSupportEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The new enabled state for Schroff LHX Support.\"\"\",\n        }, # scalar\n        \"webcamModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The model of the Webcam \"\"\",\n        }, # scalar\n        \"webcamConnectionPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The port to which the Webcam is connected \"\"\",\n        }, # scalar\n        \"agentInetPortNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetPortNumber\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The UDP port number used for accessing \nthe SNMP agent on the device.\nExamples: \n     If deviceCascadeType is portForwarding, then\n          master: 50500\n          slave 1:50501\n          slave 2: 50502\n          ...... \n     If cascading mode is not portForwarding and default (Standard) ports are being used, then\n          port: 161\n          \"\"\",\n        }, # scalar\n        \"peripheralDeviceRomcode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The Romcode of an peripheral device\"\"\",\n        }, # scalar\n        \"peripheralDeviceFirmwareUpdateState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PeripheralDeviceFirmwareUpdateStateEnumeration\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The firmware update state of an peripheral device\"\"\",\n        }, # scalar\n        \"circuitNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"33000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"33000\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each circuit.\ncircuitId is defined as follows.\ncircuitID = 1000*(panelId) + circuitPosition\n  Examples:\n      1045 is the the circuit on panel 1 with lowest circuit position equal to 45\n      4067 is the the circuit on panel 4 with lowest circuit position equal to 67. \"\"\",\n        }, # scalar\n        \"circuitPoleNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"A unique value for each circuit Pole. \"\"\",\n        }, # scalar\n        \"phoneNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.0.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The phone number of e.g. an SMS receiver.\"\"\",\n        }, # scalar\n        \"board\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.1\",\n        }, # node\n        \"environmental\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.2\",\n        }, # node\n        \"configuration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3\",\n        }, # node\n        \"pduCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"For a PX2/3 and transfer switch, pduCount = 1\nFor a BCM2, pduCount = number of power meters + 1 (for the main controller)\"\"\",\n        }, # scalar\n        \"unit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2\",\n        }, # node\n        \"nameplateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of PDU nameplate entries. The number of\nentries is given by the value of pduCount.\"\"\",\n        }, # table\n        \"nameplateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry providing PDU nameplate information.\"\"\",\n        }, # row\n        \"pduId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each PDU/Power meter.\nPX2/3 and transfer switch: pduiId = 1\nBCM2: \n    main controller: pduId = 0\n    power meter: pduId = rotary switch setting for the power meter\n                 It is the same as the MeterID in the GUI\n      Example:   \n        a power meter, rotary switch setting = 5, pduId = 5 \n        a panel (power meter + branch metering), rotary switch setting =  23, pduId = 23  \"\"\",\n        }, # column\n        \"pduManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU manaufacturer.\"\"\",\n        }, # column\n        \"pduModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU model.\"\"\",\n        }, # column\n        \"pduSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU serial Number.\"\"\",\n        }, # column\n        \"pduRatedVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU voltage rating.\"\"\",\n        }, # column\n        \"pduRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU current rating.\"\"\",\n        }, # column\n        \"pduRatedFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU frequency rating.\"\"\",\n        }, # column\n        \"pduRatedVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The PDU VA (VoltAmps) rating.\"\"\",\n        }, # column\n        \"pduImage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"URL\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The URL of the wiring diagram for this PDU.\"\"\",\n        }, # column\n        \"unitConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of PDU configuration entries. The number of\nentries is given by the value of pduCount.\"\"\",\n        }, # table\n        \"unitConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing configuration objects for a particular PDU.\"\"\",\n        }, # row\n        \"inletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of inlets.\"\"\",\n        }, # column\n        \"overCurrentProtectorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of overcurrent protectors.\"\"\",\n        }, # column\n        \"outletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets.\"\"\",\n        }, # column\n        \"inletControllerCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of inlet controllers.\"\"\",\n        }, # column\n        \"outletControllerCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlet controllers.\"\"\",\n        }, # column\n        \"externalSensorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of external sensors.\"\"\",\n        }, # column\n        \"pxIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP address. A value of 0.0.0.0 indicates an error\nor an unset option.\"\"\",\n        }, # column\n        \"netmask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current netmask. A value of 0.0.0.0 indicates an error\nor an unset option.\"\"\",\n        }, # column\n        \"gateway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current gateway. A value of 0.0.0.0 indicates an error\nor an unset option.\"\"\",\n        }, # column\n        \"pxMACAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current MAC address.\"\"\",\n        }, # column\n        \"utcOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current UTC offset.\"\"\",\n        }, # column\n        \"pduName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name for the PDU.\"\"\",\n        }, # column\n        \"networkInterfaceType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"NetworkInterfaceTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The network interface type:  wired or wireless.\"\"\",\n        }, # column\n        \"externalSensorsZCoordinateUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"ExternalSensorsZCoordinateUnitsEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"External Sensor Z Coordinate units: Freeform Text or Rack Units (U)\nDefault is U.\"\"\",\n        }, # column\n        \"unitDeviceCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"i1smpsStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"i2smpsStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which unit sensors are available.\"\"\",\n        }, # column\n        \"outletSequencingDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.36\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"It is deprecated. This is an alias for  inrushGuardDelay\"\"\",\n        }, # column\n        \"globalOutletPowerCyclingPowerOffPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The power-off period when an outlet is cycled;\napplies to all outlets unless overridden at the outlet level;\nspecified in seconds; \n0 <= value <= 3600 seconds.\"\"\",\n        }, # column\n        \"globalOutletStateOnStartup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"GlobalOutletStateOnStartupEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The outlet state on device startup; applies to all outlets\nunless overridden at the outlet level.\n Note that this value is ignored if relayBehaviorOnPowerLoss is set to latching.\"\"\",\n        }, # column\n        \"outletPowerupSequence\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sequence in which will the outlets will be switched on under the following conditions.\n1) Switch all outlets on operation is executed\n2) Power to the PDU is cycled\nString must consist of a comma separated sequence of the outlet numbers and\nall outlet numbers must be included. The numbers entered must be a permutation of the numbers\n1,2,3,-outletnumber.\nExample for a 12 outlet PDU: 1,12,3,5,6,7,10,2,4,11,9,8.\n\nThe per outlet sequence delays are defined as outletSequenceDelay in the outletConfigurationTable\"\"\",\n        }, # column\n        \"pduPowerCyclingPowerOffPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When power to the  PX is cycled (either manually or because of a\ntemporary power loss), this number determines how many seconds the\nPX will wait before it provides power to the outlets.\nspecified in seconds:\n0 <= value <= 3600 seconds.\n Note that this value is ignored if relayBehaviorOnPowerLoss is set to latching.\"\"\",\n        }, # column\n        \"pduDaisychainMemberType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"DaisychainMemberTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The daisy chain member type.\"\"\",\n        }, # column\n        \"managedExternalSensorCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of managed external sensors \"\"\",\n        }, # column\n        \"pxInetAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.50\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of address format\nThis object is deprecated in favor of ipAddressTable from the IP-MIB (rfc4293).\"\"\",\n        }, # column\n        \"pxInetIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.51\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP address. A value of 0.0.0.0 indicates an error\nor an unset option.\nThis object is deprecated in favor of ipAddressTable from the IP-MIB (rfc4293).\nFor IPv6, its value is 0.0.0.0 \"\"\",\n        }, # column\n        \"pxInetNetmask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.52\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current netmask. A value of 0.0.0.0 indicates an error\nor an unset option.\nThis object is deprecated in favor of ipAddressTable from the IP-MIB (rfc4293).\nFor IPv6, its value is 0.0.0.0 \"\"\",\n        }, # column\n        \"pxInetGateway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.53\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current gateway. A value of 0.0.0.0 indicates an error\nor an unset option.\nThis object is deprecated in favor of ipAddressTable from the IP-MIB (rfc4293).\nFor IPv6, its value is 0.0.0.0 \"\"\",\n        }, # column\n        \"loadShedding\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enter/Exit Load Shedding Mode\"\"\",\n        }, # column\n        \"serverCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of servers\"\"\",\n        }, # column\n        \"inrushGuardDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time interval between switching on two outlets; \nspecified in milliseconds; \n100 <= value <= 100000 milliseconds.\"\"\",\n        }, # column\n        \"cascadedDeviceConnected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether another PX2 is connected using an USB cable to \nthe USB-A port of this PX2 in a cascaded configuration.\n    true: Connected\n    false: Not Connected\"\"\",\n        }, # column\n        \"synchronizeWithNTPServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Will time be obtained using NTP?\ntrue:  time will be obtained using NTP servers\nfalse: time will not be obtained using NTP servers\nDeafault is false.\"\"\",\n        }, # column\n        \"useDHCPProvidedNTPServer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Will the NTP server addresses be provided by DHCP/BOOTP?\nThis is used only if synchronizeWithNTPServer is enabled \nDefault is enabled, i.e. DHCP provided NTP servers will be used \"\"\",\n        }, # column\n        \"firstNTPServerAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"ipv4\",\n            \"description\" :\n                \"\"\"Represents the type of the corresponding instance\nof firstNTPServerAddress object.\"\"\",\n        }, # column\n        \"firstNTPServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address of the primary ntp server.\"\"\",\n        }, # column\n        \"secondNTPServerAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Represents the type of the corresponding instance\nof secondNTPServerAddress object.\nDefault is ipv4\"\"\",\n        }, # column\n        \"secondNTPServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address of the second ntp server.\"\"\",\n        }, # column\n        \"wireCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.65\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of wires.\"\"\",\n        }, # column\n        \"transferSwitchCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of transfer switches.\"\"\",\n        }, # column\n        \"productType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"ProductTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The product type.\nIs this product a PDU, STS, BCM,...?\"\"\",\n        }, # column\n        \"meteringControllerCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metering controllers.\"\"\",\n        }, # column\n        \"relayBehaviorOnPowerLoss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"RelayPowerLossBehaviorEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The relay behavior on power loss.\"\"\",\n        }, # column\n        \"deviceCascadeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"DeviceCascadeTypeEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured type of cascading:\ndefault is bridging.\nThis can be set only if the unit is the master.\"\"\",\n        }, # column\n        \"deviceCascadePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the device in the cascaded chain.\n0: master\n>= 1: slaves  \"\"\",\n        }, # column\n        \"peripheralDevicesAutoManagement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Auto-management enabled state for peripheral devices.\"\"\",\n        }, # column\n        \"frontPanelOutletSwitching\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables/disables switching of outlets using the PDU front panel.\"\"\",\n        }, # column\n        \"frontPanelRCMSelfTest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables/disables front panel RCM self-test.\"\"\",\n        }, # column\n        \"frontPanelActuatorControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enables/disables front panel peripheral actuator control.\"\"\",\n        }, # column\n        \"circuitCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of user configured circuits in the panel.\"\"\",\n        }, # column\n        \"activeDNSServerCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.2.1.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active DNS Servers \"\"\",\n        }, # column\n        \"controllerConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries for the boards in each PDU. The number of\nentries is given by the value of \n inletControllerCount + outletControllerCount + 1 (for main controller board).\"\"\",\n        }, # table\n        \"controllerConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"boardType\",\n                \"boardIndex\",\n            ],\n            \"description\" :\n                \"\"\"An  entry containing objects for a controller.\"\"\",\n        }, # row\n        \"boardType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"BoardTypeEnumeration\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of board.\"\"\",\n        }, # column\n        \"boardIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each controller. Its value\nranges between 1 and the value of \n   inletControllerCount + outletControllerCount + 1.\"\"\",\n        }, # column\n        \"boardVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The board hardware version.\"\"\",\n        }, # column\n        \"boardFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware version.\"\"\",\n        }, # column\n        \"boardFirmwareTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time when the board firmware was updated in UNIX(epoch)time.\nIt is measured in seconds relative to January 1, 1970 (midnight UTC/GMT), \ni.e a value of 0 indicates January 1, 1970 (midnight UTC/GMT).\"\"\",\n        }, # column\n        \"logConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of parameters for the data logging feature. The number of\nentries is given by the value of pduCount.\"\"\",\n        }, # table\n        \"logConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing data logging parameters\nfor a particular PDU.\"\"\",\n        }, # row\n        \"dataLogging\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Data Retrieval: enabled/disabled.\"\"\",\n        }, # column\n        \"measurementPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Data Collection periodicity. This is the periodicity of the data collected by the PX.\nThis value is fixed at 1 second.\"\"\",\n        }, # column\n        \"measurementsPerLogEntry\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of measurements used for each entry in the log.\"\"\",\n        }, # column\n        \"logSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the log.\"\"\",\n        }, # column\n        \"dataLoggingEnableForAllSensors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Operation to control data logging for all sensors.\nIf this OID is set to true, then all xxxSensorLogAvailable are set to true\nIf this OID is set to false, then all xxxSensorLogAvailable are set to false\"\"\",\n        }, # column\n        \"unitSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of unit level sensors for a PDU.\"\"\",\n        }, # table\n        \"unitSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing unit sensor parameters.\"\"\",\n        }, # row\n        \"sensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorTypeEnumeration\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The type of sensor.\"\"\",\n        }, # column\n        \"unitSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"unitSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The  units in which the sensor data is reported.\"\"\",\n        }, # column\n        \"unitSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\"\"\",\n        }, # column\n        \"unitSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value.\"\"\",\n        }, # column\n        \"unitSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \nunitSensorDecimalDigits.  For example, if the value is 1 and \nunitSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"unitSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(unitSensorDecimalDigits + 1).  For example, if the value is 50 and \nunitSensorDecimalDigits is 2, then actual value is 0.05.\"\"\",\n        }, # column\n        \"unitSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as \nit is detected; if it is non-zero, say n, then the assertion \ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"unitSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.5.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"activeDNSServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of active DNS server entries. The number of\nrows in the table is given by the value of activeDNSServerCount (from unitConfigurationTable).\nIf activeDNSServerCount = 0, then the table is empty.\"\"\",\n        }, # table\n        \"activeDNSServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"activeDNSServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing the active DNS servers for a particular PDU.\"\"\",\n        }, # row\n        \"activeDNSServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for a dns Server. Its value\nranges between 1 and activeDNSServerCount.\"\"\",\n        }, # column\n        \"activeDNSServerAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddressType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Represents the type of the corresponding instance\nof activeDNSServerAddress object.\"\"\",\n        }, # column\n        \"activeDNSServerAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"INET-ADDRESS-MIB\", \"name\" : \"InetAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the dns server.\"\"\",\n        }, # column\n        \"activeDNSServerAddressSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"AddressSourceEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"How was the address obtained: static, dhcp, dhcpv6?\"\"\",\n        }, # column\n        \"inlets\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3\",\n        }, # node\n        \"inletConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inlet configuration entries. The number of\nentries is given by the value of inletCount for the PDU.\"\"\",\n        }, # table\n        \"inletConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parametersfor a particular inlet.\"\"\",\n        }, # row\n        \"inletId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each inlet. Its value\nranges between 1 and the value of inletCount.\"\"\",\n        }, # column\n        \"inletLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label on the PDU identifying the inlet.\"\"\",\n        }, # column\n        \"inletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name.\"\"\",\n        }, # column\n        \"inletPlug\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PlugTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of plug/receptacle wired to the inlet.\"\"\",\n        }, # column\n        \"inletPoleCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of poles. \nPDU:\n  2 for 1-phase circuits\n  3 for 3-phase DELTA wired models;\n  4 for 3-phase WYE wired models; Pole 4 is neutral;\n     Note that sensors are not supported for neutral poles;\nPower Meter:\n  5: \n    Pole 1 is Phase A\n    Pole 2 is Phase B\n    Pole 3 is Phase C \n    Pole 4 is Neutral\n    Pole 5 is Earth\"\"\",\n        }, # column\n        \"inletRatedVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The inlet voltage rating.\"\"\",\n        }, # column\n        \"inletRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The inlet current rating.\"\"\",\n        }, # column\n        \"inletRatedFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The inlet frequency rating.\nDeprecated: use pduRatedFrequency for unit nameplate information.\"\"\",\n        }, # column\n        \"inletRatedVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The inlet VA (VoltAmps) rating.\nDeprecated: use pduRatedVA for unit nameplate information.\"\"\",\n        }, # column\n        \"inletDeviceCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unbalancedCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"surgeProtectorStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"frequency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"phaseAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"residualCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"rcmState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"reactivePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"powerQuality\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which inlet sensors are available.\"\"\",\n        }, # column\n        \"inletPoleCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"phaseAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"rmsVoltageLN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"reactivePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"displacementPowerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which inletpole sensors are available.\"\"\",\n        }, # column\n        \"inletPlugDescriptor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the Plug\"\"\",\n        }, # column\n        \"inletEnableState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is this PDU operation is enabled for this inlet?\nWhen PDU operation is disabled the sensors for this inlet and all\nchildren will no longer be updated, and outlet switching is no longer\nallowed. This is only meaningful for multi-inlet units if one inlet\nis temporarily expected to be powered down.\nDisabling the inlet of a single-inlet unit is forbidden and any\nattempt to do so will result in an error.\"\"\",\n        }, # column\n        \"inletRCMResidualOperatingCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Residual Operating Current (Threshold) for the RCM State sensor. \nFor inlets without an RCM, any attempt to access this OID will return \nNoSuchInstance error. The value of this OID is in milliamps.\"\"\",\n        }, # column\n        \"inletSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for an inlet sensor.\"\"\",\n        }, # table\n        \"inletSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for configuring an inlet sensor.\"\"\",\n        }, # row\n        \"inletSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"inletSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \ninletSensorDecimalDigits.  For example, if the value is 1 and \ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(inletSensorDecimalDigits + 1).  For example, if the value is 50 and \ninletSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletPoleConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inlet pole configuration entries. The number of\nentries is given by the value of inletPoleCount for the PDU.\"\"\",\n        }, # table\n        \"inletPoleConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"inletPoleIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parametersfor a particular inlet pole.\"\"\",\n        }, # row\n        \"inletPoleLine\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"LineEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Phase for this inlet Pole.\"\"\",\n        }, # column\n        \"inletPoleNode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this inlet pole is connected\"\"\",\n        }, # column\n        \"inletPoleSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for an inlet pole sensor.\"\"\",\n        }, # table\n        \"inletPoleSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"inletPoleIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects \nfor configuring an inlet pole sensor.\"\"\",\n        }, # row\n        \"inletPoleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each inlet Pole. Its value\nranges between 1 and the value of inletPoleCount.\"\"\",\n        }, # column\n        \"inletPoleSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"inletPoleSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \ninletPoleSensorDecimalDigits.  For example, if the value is 1 and \ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(inletPoleSensorDecimalDigits + 1).  For example, if the value is 50 and \ninletPoleSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"inletPoleSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.3.6.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"overCurrentProtector\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4\",\n        }, # node\n        \"overCurrentProtectorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of overCurrentProtector configuration entries. The number of\nentries is given by the value of overCurrentProtectorCount for the PDU.\"\"\",\n        }, # table\n        \"overCurrentProtectorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"overCurrentProtectorIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for a particular overCurrentProtector.\"\"\",\n        }, # row\n        \"overCurrentProtectorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each overcurrent protector. Its value\nranges between 1 and the value of overCurrentProtectorCount.\"\"\",\n        }, # column\n        \"overCurrentProtectorLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label on the PDU identifying the overcurrent protector.\"\"\",\n        }, # column\n        \"overCurrentProtectorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name.\"\"\",\n        }, # column\n        \"overCurrentProtectorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"OverCurrentProtectorTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of overcurrent protector.\"\"\",\n        }, # column\n        \"overCurrentProtectorRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating.\"\"\",\n        }, # column\n        \"overCurrentProtectorPoleCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of  overCurrentProtector poles. \"\"\",\n        }, # column\n        \"overCurrentProtectorCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which overcurrent protector sensors are available.\"\"\",\n        }, # column\n        \"overCurrentProtectorPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the PDU is wired. It indicates the\noverCurrentProtector's power source which can one of the following:\n       overCurrentProtector\n       transfer switch\n       inlet\n\nIf the power source is an OverCurrentProtector, it\ncontains the OID of an overCurrentProtectorLabel in the\noverCurrentProtectorConfiguration Table. The index of the OID can then be\nused to reference other objects in the overCurrentProtectorConfigurationTable.\n\nIf the power source is an inlet, it contains the OID of\nan inletLabel in the inletConfigurationTable. The index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\n\nIf the power source is a transferSwitch, it\ncontains the OID of a transferSwitchLabel in the\ntransferSwitchConfiguration Table. The index of the OID can then be\nused to reference other objects in the transferSwitchConfigurationTable.        \"\"\",\n        }, # column\n        \"overCurrentProtectorSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of overCurrentProtectorSensor configuration entries.\"\"\",\n        }, # table\n        \"overCurrentProtectorSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"overCurrentProtectorIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An overCurrentProtectorSensor entry containing objects for a \nparticular overCurrentProtector Sensor.\"\"\",\n        }, # row\n        \"overCurrentProtectorSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging available for this sensor?\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \noverCurrentProtectorSensorDecimalDigits. For example, if the value is 1 and \noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(overCurrentProtectorSensorDecimalDigits + 1).  For example, if the value is 50 and \noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"overCurrentProtectorPoleConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of overCurrentProtector pole configuration entries. The number of\nentries is given by the value of overCurrentProtectorPoleCount for the PDU.\"\"\",\n        }, # table\n        \"overCurrentProtectorPoleConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"overCurrentProtectorIndex\",\n                \"overCurrentProtectorPoleIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parametersfor a particular overCurrentProtector pole.\"\"\",\n        }, # row\n        \"overCurrentProtectorPoleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each overCurrentProtector Pole. Its value\nranges between 1 and the value of overCurrentProtectorPoleCount.\"\"\",\n        }, # column\n        \"overCurrentProtectorPoleLine\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"LineEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Phase for this overCurrentProtector Pole.\"\"\",\n        }, # column\n        \"overCurrentProtectorPoleInNode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this overCurrentProtector pole input is connected\"\"\",\n        }, # column\n        \"overCurrentProtectorPoleOutNode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.4.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this overCurrentProtector pole output is connected\"\"\",\n        }, # column\n        \"outlets\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5\",\n        }, # node\n        \"outletConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet configuration entries. The number of\nentries is given by the value of outletCount for the PDU.\"\"\",\n        }, # table\n        \"outletConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n            ],\n            \"description\" :\n                \"\"\"An outlet entry containing parameters for a particular outlet.\"\"\",\n        }, # row\n        \"outletId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each outlet. Its value\nranges between 1 and the value of outletCount.\"\"\",\n        }, # column\n        \"outletLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label on the PDU identifying the outlet.\"\"\",\n        }, # column\n        \"outletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name.\"\"\",\n        }, # column\n        \"outletReceptacle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"ReceptacleTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The plug.\"\"\",\n        }, # column\n        \"outletPoleCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of poles.\"\"\",\n        }, # column\n        \"outletRatedVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet voltage rating.\"\"\",\n        }, # column\n        \"outletRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet current rating.\"\"\",\n        }, # column\n        \"outletRatedVA\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet VA (VoltAmps) rating.\"\"\",\n        }, # column\n        \"outletDeviceCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unbalancedCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"onOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"frequency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"phaseAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which outlet sensors are available.\"\"\",\n        }, # column\n        \"outletPoleCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"rmsVoltageLN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which outlet pole sensors are available.\"\"\",\n        }, # column\n        \"outletPowerCyclingPowerOffPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The power-off period when an outlet is cycled;\noverrides the global value;\nspecified in seconds; \n0 <= value <= 3600 seconds.\"\"\",\n        }, # column\n        \"outletStateOnStartup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"OutletStateOnStartupEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The outlet state on device startup;\noverrides the global value.\n Note that this value is ignored if\n relayBehaviorOnPowerLoss is set to latching.\"\"\",\n        }, # column\n        \"outletUseGlobalPowerCyclingPowerOffPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this true, then use globalOutletPowerCyclingPowerOffPeriod.\"\"\",\n        }, # column\n        \"outletSwitchable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is this outlet switchable?\"\"\",\n        }, # column\n        \"outletReceptacleDescriptor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the Receptacle\"\"\",\n        }, # column\n        \"outletNonCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is this outlet non-critical?\"\"\",\n        }, # column\n        \"outletSequenceDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time interval between switching on this outlet and the next outlet in the\noutlet sequence. \nThis applies to the following operations.\n 1) Switch all outlets on operation is executed\n 2) Power to the PDU is cycledThis applies only when all outlets are being switched on or cycled. \nIt is specified in seconds; \n1 <= value <= 3600 seconds.\nThe actual time interval used can never be less than  the inrushGuardDelay defined \nin the unitConfigurationTable.\nExamples: \n  1)  inrush Guard Delay is 2 seconds and outletSequenceDelay is 5 seconds.\n      The time interval will be 5 seconds \n  2)  inrush Guard Delay is 5 seconds and outletSequenceDelay is 2 seconds.\n      The time interval will be 5 seconds\"\"\",\n        }, # column\n        \"outletPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.3.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the PDU is wired. It indicates the\noutlet's power source which can one of the following:\n       overCurrentProtector\n       transfer switch\n       inlet\n\nIf the power source is an OverCurrentProtector, it\ncontains the OID of an overCurrentProtectorLabel in the\noverCurrentProtectorConfiguration Table. The index of the OID can then be\nused to reference other objects in the overCurrentProtectorConfigurationTable.\n\nIf the power source is an inlet, it contains the OID of\nan inletLabel in the inletConfigurationTable. The index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\n\nIf the power source is a transferSwitch, it\ncontains the OID of a transferSwitchLabel in the\ntransferSwitchConfiguration Table. The index of the OID can then be\nused to reference other objects in the transferSwitchConfigurationTable.\"\"\",\n        }, # column\n        \"outletSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet configuration entries. The number of\nentries is given by the value of outletCount for the PDU.\"\"\",\n        }, # table\n        \"outletSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parameters for an outlet sensor.\"\"\",\n        }, # row\n        \"outletSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging available for this sensor?\"\"\",\n        }, # column\n        \"outletSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \noutletSensorDecimalDigits.  For example, if the value is 1 and \noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(outletSensorDecimalDigits + 1).  For example, if the value is 50 and \noutletSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletPoleConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet pole configuration entries. The number of\nentries is given by the value of outletPoleCount for the PDU.\"\"\",\n        }, # table\n        \"outletPoleConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"outletPoleIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parametersfor a particular outlet pole.\"\"\",\n        }, # row\n        \"outletPoleLine\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"LineEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Phase for this inlet Pole.\"\"\",\n        }, # column\n        \"outletPoleNode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this outlet pole is connected\"\"\",\n        }, # column\n        \"outletPoleSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet pole sensor configuration entries. The number of\nentries is given by the value of outletPoleCount.\"\"\",\n        }, # table\n        \"outletPoleSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"outletPoleIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects \nfor configuring an outlet pole sensor.\"\"\",\n        }, # row\n        \"outletPoleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each outlet Pole. Its value\nranges between 1 and the value of outletPoleCount.\"\"\",\n        }, # column\n        \"outletPoleSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"outletPoleSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \noutletPoleSensorDecimalDigits.  For example, if the value is 50 and \noutletPoleSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(outletPoleSensorDecimalDigits + 1).  For example, if the value is 50 and \noutletPoleSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"outletPoleSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.5.6.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"externalSensors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6\",\n        }, # node\n        \"externalSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of externalSensor configuration entries. The number of\nentries is given by the value of externalSensorCount for the PDU.\"\"\",\n        }, # table\n        \"externalSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parameters for an external sensor.\"\"\",\n        }, # row\n        \"sensorID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each sensor. Its value\nranges between 1 and the value of externalSensorCount.\"\"\",\n        }, # column\n        \"externalSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of sensor.\"\"\",\n        }, # column\n        \"externalSensorSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor serial number.\"\"\",\n        }, # column\n        \"externalSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name.\"\"\",\n        }, # column\n        \"externalSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined description.\"\"\",\n        }, # column\n        \"externalSensorXCoordinate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The X coordinate.\"\"\",\n        }, # column\n        \"externalSensorYCoordinate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Y coordinate.\"\"\",\n        }, # column\n        \"externalSensorZCoordinate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Z coordinate.\"\"\",\n        }, # column\n        \"externalSensorChannelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The channel number, applies only to contact sensors;\n-1 for other sensors\"\"\",\n        }, # column\n        \"externalOnOffSensorSubtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorTypeEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The subtype of the binary sensor\"\"\",\n        }, # column\n        \"externalSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging available for this sensor?\"\"\",\n        }, # column\n        \"externalSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units\nThis parameter does not apply   \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\n \"\"\",\n        }, # column\n        \"externalSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point\nThis parameter does not apply  \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.18\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.20\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(externalSensorDecimalDigits + 1).  For example, if the value is 50 and \nexternalSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible value\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible value\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion \ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nAt present, this value cannot be written (set)\"\"\",\n        }, # column\n        \"externalSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower non-critical (warning) threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical  threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper non-critical (warning) threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors \"\"\",\n        }, # column\n        \"externalSensorIsActuator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is this an actuator?\nTrue:  It is an actuator\nFalse: It is not an actuator\"\"\",\n        }, # column\n        \"externalSensorPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the sensor.\nThe format is a semicolon separated list of Keyword:value pairs - Keyword1:Value1;Keyword2:value2;...\n Keyword can be one of the following:\n   ONBOARD, DEVICE-1WIREPORT, HUBPORT, CHAIN-POSITION\n Examples\n 1) Onboard Sensor\n\t    ONBOARD:CC1\n 2) Old sensor connected to device 1-wire port\n\t    DEVICE-1WIREPORT:2\n 3) New style sensor connected to device 1-wire port\n\t    DEVICE-1WIREPORT:2;CHAIN-POSITION:3\n 4) New style sensor connected to hub port 3\n\t    DEVICE-1WIREPORT:2;CHAIN-POSITION:1;HUBPORT:3;CHAIN-POSITION:1\n 5) Old style sensor connected to end of new style sensor chain\n\t    DEVICE-1WIREPORT:2;\n \"\"\",\n        }, # column\n        \"externalSensorUseDefaultThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Use default thresholds for this sensor?\nTrue:  Use Default thresholds for this sensor\n       \nFalse: Do not Use Default thresholds for this sensor\"\"\",\n        }, # column\n        \"externalSensorAlarmedToNormalDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.3.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay in seconds for transitions from the alarmed state to the normal state.\nIf the sensor type is  motionDetection,\n\t  then it can set to a value greater >= 0\nFor all other sensor types,\n\t  the value is 0 and cannot be set to any other value.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultThresholdsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries listing the default thresholds for each sensor type. \"\"\",\n        }, # table\n        \"externalSensorTypeDefaultThresholdsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing default thresholds for a sensor type.\"\"\",\n        }, # row\n        \"externalSensorTypeDefaultHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion \ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nAt present, this value cannot be written (set)\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower non-critical (warning) threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical  threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper non-critical (warning) threshold\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply\nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors.\"\"\",\n        }, # column\n        \"externalSensorTypeDefaultEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply \nto onOff, trip, vibration, waterDetection, \nsmokeDetection sensors \"\"\",\n        }, # column\n        \"peripheralDevicePackageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries for the peripheral Device Packages connected to each PDU. The number of\nentries is given by the value of peripheralDevicePackagesCount.\"\"\",\n        }, # table\n        \"peripheralDevicePackageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"peripheralDevicePackageId\",\n            ],\n            \"description\" :\n                \"\"\"An  entry containing objects for a controller.\"\"\",\n        }, # row\n        \"peripheralDevicePackageId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each peripheral device package.\"\"\",\n        }, # column\n        \"peripheralDevicePackageSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peripheral device package  serial number.\"\"\",\n        }, # column\n        \"peripheralDevicePackageModel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peripheral device package  model.\nExamples are DX-D2C6, DPX2-T1, DPX2-T1H1, DPX2-T2H1, DPX2-T3H1\"\"\",\n        }, # column\n        \"peripheralDevicePackageFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peripheral device package firmware version.\"\"\",\n        }, # column\n        \"peripheralDevicePackageMinFirmwareVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peripheral device package minimum firmware version.\nThis field may be empty. If it is not empty, then it shall not be possible\nto downgrade the peripheral device firmware to a \nversion < minimum firmware version number.\"\"\",\n        }, # column\n        \"peripheralDevicePackageFirmwareTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time when the peripheralDevicePackage firmware was updated in UNIX(epoch)time.\nIt is measured in seconds relative to January 1, 1970 (midnight UTC/GMT), \ni.e a value of 0 indicates January 1, 1970 (midnight UTC/GMT).\"\"\",\n        }, # column\n        \"peripheralDevicePackagePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the package.\nThe format is a semicolon separated list of Keyword:value pairs -\n\t Keyword1:Value1;Keyword2:value2;...\n  Keyword can be one of the following:\n\t ONBOARD, DEVICE-1WIREPORT, HUBPORT, CHAIN-POSITION\n  Examples\n  1) Onboard Sensor\n\t\tONBOARD:CC1\n  2) Old sensor connected to device 1-wire port\n\t\tDEVICE-1WIREPORT:2\n  3) New style sensor connected to device 1-wire port\n\t\tDEVICE-1WIREPORT:2;CHAIN-POSITION:3\n  4) New style sensor connected to hub port 3\n\t\tDEVICE-1WIREPORT:2;CHAIN-POSITION:1;HUBPORT:3;CHAIN-POSITION:1\n  5) Old style sensor connected to end of new style sensor chain\n\t\tDEVICE-1WIREPORT:2;\n \"\"\",\n        }, # column\n        \"peripheralDevicePackageState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.6.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the package.\"\"\",\n        }, # column\n        \"serverReachability\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7\",\n        }, # node\n        \"serverReachabilityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of server entries. The number of\nentries is given by the value of serverCount for the PDU.\"\"\",\n        }, # table\n        \"serverReachabilityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"serverID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parameters for a server.\"\"\",\n        }, # row\n        \"serverID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each server. Its value\nranges between 1 and the value of serverCount for that PDU\"\"\",\n        }, # column\n        \"serverIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP Address/host name of the server\"\"\",\n        }, # column\n        \"serverPingEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is ping enabled for this server?\"\"\",\n        }, # column\n        \"wires\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8\",\n        }, # node\n        \"wireConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of wire configuration entries. The number of\nentries is given by the value of wireCount for the PDU.\"\"\",\n        }, # table\n        \"wireConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"pduId\",\n                \"wireId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for a particular wire.\"\"\",\n        }, # row\n        \"wireId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3.1.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each wire. Its value\nranges between 1 and the value of wireCount.\"\"\",\n        }, # column\n        \"wireLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label on the PDU identifying the wire.\"\"\",\n        }, # column\n        \"wireCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unbalancedCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which wire sensors are available.\"\"\",\n        }, # column\n        \"wirePowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the PDU is wired. It indicates the\nwire's power source which can one of the following:\n       overCurrentProtector\n       transfer switch\n       inlet\n\nIf the power source is an OverCurrentProtector, it\ncontains the OID of an overCurrentProtectorLabel in the\noverCurrentProtectorConfiguration Table. The index of the OID can then be\nused to reference other objects in the overCurrentProtectorConfigurationTable.\n\nIf the power source is an inlet, it contains the OID of\nan inletLabel in the inletConfigurationTable. The index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\n\nIf the power source is a transferSwitch, it\ncontains the OID of a transferSwitchLabel in the\ntransferSwitchConfiguration Table. The index of the OID can then be\nused to reference other objects in the transferSwitchConfigurationTable.  \"\"\",\n        }, # column\n        \"wireSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of wireSensor configuration entries.\"\"\",\n        }, # table\n        \"wireSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"pduId\",\n                \"wireId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An wireSensor entry containing objects for a\nparticular wire Sensor.\"\"\",\n        }, # row\n        \"wireSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging available for this sensor?\"\"\",\n        }, # column\n        \"wireSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units\"\"\",\n        }, # column\n        \"wireSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\"\"\",\n        }, # column\n        \"wireSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value\"\"\",\n        }, # column\n        \"wireSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits. For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by\n(wireSensorDecimalDigits + 1).  For example, if the value is 50 and\nwireSensorDecimalDigits is 2, then actual value is 0.05.\"\"\",\n        }, # column\n        \"wireSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible value\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.12\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible value\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.13\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.14\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nAt present, this value cannot be written (set)\"\"\",\n        }, # column\n        \"wireSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.21\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.22\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower non-critical (warning) threshold\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.23\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical  threshold\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.24\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper non-critical (warning) threshold\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits.  For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"wireSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.8.4.1.25\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\"\"\",\n        }, # column\n        \"transferSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9\",\n        }, # node\n        \"transferSwitchConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of transfer switch configuration entries. The number of\nentries is given by the value of transferSwitchCount.\"\"\",\n        }, # table\n        \"transferSwitchConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for a particular transferSwitch.\"\"\",\n        }, # row\n        \"transferSwitchId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each transfer switch. Its value\nranges between 1 and the value of transferSwitchCount.\"\"\",\n        }, # column\n        \"transferSwitchLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The label on the PDU identifying the TS.\"\"\",\n        }, # column\n        \"transferSwitchName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name of the transferSwitch.\"\"\",\n        }, # column\n        \"transferSwitchPreferredInlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The preferred Inlet. The TS powers the outlet from the preferred inlet when acceptable power\nis available from the preferred inlet.   \"\"\",\n        }, # column\n        \"transferSwitchPoleCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"2\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"2\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of poles.\"\"\",\n        }, # column\n        \"transferSwitchAutoReTransferEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The TS can be configured to automatically retransfer back to the preferred inlet when power is restored.  \nRe-transfer only occurs if this variable is true.\"\"\",\n        }, # column\n        \"transferSwitchAutoReTransferWaitTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Auto Re-Transfer Wait Time. Re-transfer occurs this many seconds after the condition causing the \noriginal transfer has been corrected.\"\"\",\n        }, # column\n        \"transferSwitchAutoReTransferRequiresPhaseSync\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this parameter is False, then do not retransfer if there is a PHASE_SYNC_FAULT in effect. A \nPHASE_SYNC_FAULT occurs when the phase difference between the inlets is too high.\"\"\",\n        }, # column\n        \"transferSwitchFrontPanelManualTransferButtonEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If this parameter is false, then  manual transfers caused by pressing the front panel switch are disabled. \"\"\",\n        }, # column\n        \"transferSwitchCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"overloadStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"inletPhaseSyncAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"inletPhaseSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"operatingState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"activeInlet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"switchStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which sensors are available for the transfer switch.\"\"\",\n        }, # column\n        \"transferSwitchPowerSource1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the PDU is wired. It indicates the\ntransferSwitch's first power source which can one of the following:\n       overCurrentProtector\n       transfer switch\n       inlet\n\nIf the power source is an OverCurrentProtector, it\ncontains the OID of an overCurrentProtectorLabel in the\noverCurrentProtectorConfiguration Table. The index of the OID can then be\nused to reference other objects in the overCurrentProtectorConfigurationTable.\n\nIf the power source is an inlet, it contains the OID of\nan inletLabel in the inletConfigurationTable. The index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\n\nIf the power source is a transferSwitch, it\ncontains the OID of a transferSwitchLabel in the\ntransferSwitchConfiguration Table. The index of the OID can then be\nused to reference other objects in the transferSwitchConfigurationTable.                 \"\"\",\n        }, # column\n        \"transferSwitchPowerSource2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.3.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the PDU is wired. It indicates the\ntransferSwitch's second power source which can one of the following:\n       overCurrentProtector\n       transfer switch\n       inlet\n\nIf the power source is an OverCurrentProtector, it\ncontains the OID of an overCurrentProtectorLabel in the\noverCurrentProtectorConfiguration Table. The index of the OID can then be\nused to reference other objects in the overCurrentProtectorConfigurationTable.\n\nIf the power source is an inlet, it contains the OID of\nan inletLabel in the inletConfigurationTable. The index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\n\nIf the power source is a transferSwitch, it\ncontains the OID of a transferSwitchLabel in the\ntransferSwitchConfiguration Table. The index of the OID can then be\nused to reference other objects in the transferSwitchConfigurationTable       \"\"\",\n        }, # column\n        \"transferSwitchSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of transfer switch sensor configuration entries. \"\"\",\n        }, # table\n        \"transferSwitchSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parameters for a transfer switch sensor.\"\"\",\n        }, # row\n        \"transferSwitchSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging available for this sensor?\"\"\",\n        }, # column\n        \"transferSwitchSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorAccuracy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"HundredthsOfAPercentage\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The accuracy: how close (in percent) the measurement is to the actual value\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by \ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and \ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorTolerance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the  difference between a sensor value and the actual value\nThe value of this OID variable should be scaled by \n(transferSwitchSensorDecimalDigits + 1).  For example, if the value is 50 and \ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.05.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by \ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"transferSwitchPoleConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of transferSwitch pole configuration entries. The number of\nentries is given by the value of transferSwitchPoleCount.\"\"\",\n        }, # table\n        \"transferSwitchPoleConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n                \"transferSwitchPoleIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing parametersfor a particular outlet pole.\"\"\",\n        }, # row\n        \"transferSwitchPoleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each transferSwitch Pole. Its value\nranges between 1 and the value of transferSwitchPoleCount.\"\"\",\n        }, # column\n        \"transferSwitchPoleLine\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"LineEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Phase for this transferSwitch Pole.\"\"\",\n        }, # column\n        \"transferSwitchPoleIn1Node\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this transferSwitch pole Input 1 is connected\"\"\",\n        }, # column\n        \"transferSwitchPoleIn2Node\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this transferSwitch pole Input 2 is connected\"\"\",\n        }, # column\n        \"transferSwitchPoleOutNode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.9.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The node to which this transferSwitch pole Output is connected\"\"\",\n        }, # column\n        \"powerMeter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10\",\n        }, # node\n        \"powerMeterConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of power meter and panel configuration entries.\"\"\",\n        }, # table\n        \"powerMeterConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing configuration objects for power meters and panels.\"\"\",\n        }, # row\n        \"powerMeterPhaseCTRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rating of the Phase CT in A, or 0 if the CT is disabled.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"powerMeterNeutralCTRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rating of the Neutral CT in A, or 0 if the CT is disabled.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"powerMeterEarthCTRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rating of the Earth CT in A, or 0 if the CT is disabled.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"powerMeterBranchCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The maximum number of circuits supported by the panel. \n(The number of user configured circuits is in unitConfigurationTable(pduId).circuitCount.)\n It can be used to distinguish between power meters and panels.\nIf value > 0, then panel (BCM)\nelse power meter\"\"\",\n        }, # column\n        \"powerMeterPanelPositions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of circuit positions in the panel.\nIts value is specified by the user when configuring a panel\"\"\",\n        }, # column\n        \"powerMeterPanelLayout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PanelLayoutEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" valid only for panels (powerMeterCircuitPositionCount > 0); \ninvalid for power meters (powerMeterCircuitPositionCount = 0): value returned is invalid(-1).\nThe panel circuit position layout:\n  single column, two columns.\"\"\",\n        }, # column\n        \"powerMeterPanelNumbering\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PanelNumberingEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" valid only for panels (powerMeterCircuitPositionCount > 0); \ninvalid for power meters (powerMeterCircuitPositionCount = 0): value returned is invalid(-1).\nThe panel circuit position numbering scheme:\n  odd/even, sequential.\"\"\",\n        }, # column\n        \"powerMeterType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.10.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PowerMeterTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power meter type:\n3-phase, single-phase, split-phase.\"\"\",\n        }, # column\n        \"circuit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11\",\n        }, # node\n        \"circuitConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of circuit configuration entries. The number of\nentries is given by the value of panelCircuitPositionCount.\"\"\",\n        }, # table\n        \"circuitConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing configuration objects for the circuit.\"\"\",\n        }, # row\n        \"circuitId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each circuit. circuitId is defined as follows.\nIt is the circuit position in the panel\"\"\",\n        }, # column\n        \"circuitPoleCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of circuit positions (poles) in the circuit.\"\"\",\n        }, # column\n        \"circuitName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined name for the circuit.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"circuitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"CircuitTypeEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of circuit:\nsinglePhaseL_L, singlePhaseL_N, twoPhase,threePhase\"\"\",\n        }, # column\n        \"circuitRatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rating of the breaker for the circuit in A.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"circuitCTRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rating of the CTs metering this circuit in A.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"circuitCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unbalancedCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"surgeProtectorStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"frequency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"phaseAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"residualCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"rcmState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"reactivePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"powerQuality\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"displacementPowerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which sensors are available for the circuit.\"\"\",\n        }, # column\n        \"circuitPoleCapabilities\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"rmsCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"peakCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rmsVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"activePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"apparentPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"powerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"activeEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"apparentEnergy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"phaseAngle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"rmsVoltageLN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"reactivePower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"displacementPowerFactor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which sensors are available for the circuit pole.\"\"\",\n        }, # column\n        \"circuitPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowPointer\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object allows discovery of how the circuit is wired. It indicates the\ncircuit's power source which can one of the following:\n\n       Inlet\n\nIt contains the OID of an inletLabel in the inletConfigurationTable.\nThe index of the OID can\nthen be used to reference other objects in the inletConfigurationTable.\"\"\",\n        }, # column\n        \"circuitPoleConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Panel Circuit Pole configuration entries. The number of\nentries is given by the value of circuitPoleCount for the circuit.\"\"\",\n        }, # table\n        \"circuitPoleConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"circuitPoleId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing configuration objects for the circuit poles.\"\"\",\n        }, # row\n        \"circuitPoleId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each circuit Pole. Its value\nranges between 1 and the value of circuitPoleCount.\"\"\",\n        }, # column\n        \"circuitPolePanelPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The circuit position for this pole.\"\"\",\n        }, # column\n        \"circuitPoleCTNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CT Number for this circuit Pole, or 0 if no CT is present.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"circuitPolePhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"PhaseEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Phase for this circuit Pole.\nAt present, read-only access;\nsee MIN-ACCESS in MODULE-COMPLIANCE ModulecomplianceRev2\"\"\",\n        }, # column\n        \"circuitSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for an inlet sensor.\"\"\",\n        }, # table\n        \"circuitSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects for configuring an inlet sensor.\"\"\",\n        }, # row\n        \"circuitSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"circuitSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.4.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitPoleSensorConfigurationTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for a circuit's pole sensors.\"\"\",\n        }, # table\n        \"circuitPoleSensorConfigurationEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"circuitPoleId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing objects\nfor configuring an inlet pole sensor.\"\"\",\n        }, # row\n        \"circuitPoleSensorLogAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Is logging enabled for the sensor?\"\"\",\n        }, # column\n        \"circuitPoleSensorUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorUnitsEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The base units.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorDecimalDigits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of digits displayed to the right of the decimal point.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The resolution: the minimum difference between any two measured values\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled maximum exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hysteresis used for deassertions\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorStateChangeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay measured in samples before a state is asserted.\nIf the value is zero, then the state is asserted as soon as\nit is detected; if it is non-zero, say n, then the assertion\ncondition must exist for n+1 consecutive samples before the corresponding\nassertion event is reported.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is clamped if the scaled threshold exceeds 4294967295. It\nis undefined for sensors which can have negative readings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorEnabledThresholds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"lowerCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"lowerWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upperWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upperCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A bit string  which indicates which thresholds are enabled.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedMaximum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The largest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedMinimum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The smallest possible reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value determines whether to use the signed or unsigned threshold\nand value columns: If the minimum is below zero the sensor can have\nnegative readings and the signed columns should be used.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedLowerCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedLowerWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lower warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedUpperCriticalThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper critical threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"circuitPoleSensorSignedUpperWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.3.11.6.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The upper warning threshold as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThe value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"control\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4\",\n        }, # node\n        \"outletControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1\",\n        }, # node\n        \"outletSwitchControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlets for a PDU. The number of\nentries is given by the value of outletCount.\"\"\",\n        }, # table\n        \"outletSwitchControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n            ],\n            \"description\" :\n                \"\"\"An entry for implementing switching operations on an outlet.\"\"\",\n        }, # row\n        \"switchingOperation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"OutletSwitchingOperationsEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switching operation.\"\"\",\n        }, # column\n        \"outletSwitchingState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet state at present\"\"\",\n        }, # column\n        \"outletSwitchingTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The  timestamp indicating when the outlet was last switched\"\"\",\n        }, # column\n        \"externalSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.2\",\n        }, # node\n        \"transferSwitchControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3\",\n        }, # node\n        \"transferSwitchControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of transfer switches for a PDU. The number of\nentries is given by the value of transferSwitchCount.\"\"\",\n        }, # table\n        \"transferSwitchControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n            ],\n            \"description\" :\n                \"\"\"An entry for implementing switching operations on a transfer switch.\"\"\",\n        }, # row\n        \"transferSwitchActiveInlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the currently active inlet.\"\"\",\n        }, # column\n        \"transferSwitchTransferToInlet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Select the active inlet. If the new inlet is available, it will become\nboth active and preferred, otherwise an inconsistentValue error will\nbe returned.\nBy default the switching operation will fail if the phase difference\nbetween the inlets is too large. In this case the switch can be forced\nby writing transferSwitchAlarmOverride as True in the same request.\nThis variable will always read as 0.\"\"\",\n        }, # column\n        \"transferSwitchAlarmOverride\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Force transfer even if the phase difference between the inlets is too\nlarge.\nThis may only be written together with transferSwitchTransferToInlet,\notherwise an inconsistentValue error will be returned. Always reads as\nfalse.\"\"\",\n        }, # column\n        \"transferSwitchLastTransferReason\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"TransferSwitchTransferReasonEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reason for the most recent transfer\"\"\",\n        }, # column\n        \"actuatorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.4\",\n        }, # node\n        \"actuatorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of actuators for a PDU. \"\"\",\n        }, # table\n        \"actuatorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorID\",\n            ],\n            \"description\" :\n                \"\"\"An entry for implementing user-initiated state changes for an actuator.\"\"\",\n        }, # row\n        \"actuatorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The actuator state.\nA Get operation retrieves the state of the actuator.\nA Set operation changes the stae of the sensor.\n    The valid states for set operations are on and Off.\n    Attempting to set the state to any other value will generate an error. \"\"\",\n        }, # column\n        \"rcmControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.5\",\n        }, # node\n        \"rcmSelfTestTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of RCMs. \"\"\",\n        }, # table\n        \"rcmSelfTestEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n            ],\n            \"description\" :\n                \"\"\"An entry for implementing self test of an RCM.\"\"\",\n        }, # row\n        \"rcmState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rcm state.\nA Get operation retrieves the state of the RCM State Sensor.\nA Set operation changes the state of the sensor.\n    The valid state for set operations is selfTest.\n    When rcmState is set to selfTest, self test of the RCM starts.\n    Attempting to set the state to any other value will generate an error.\n    If the current state is selfTest, then an attempt to set the value to selfTest\n      will be ignored. \n                                       \"\"\",\n        }, # column\n        \"inletSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.6\",\n        }, # node\n        \"inletSensorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of control entries for the inlet sensors of a PDU. The set\nof valid indexes is defined by the value of inletCount and the\ninletDeviceCapabilities entry for the selected inlet.\"\"\",\n        }, # table\n        \"inletSensorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry used for controlling an inlet sensor.\"\"\",\n        }, # row\n        \"inletSensorResetValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing to this variable sets a new value for the addressed sensor. Only\naccumulating sensors (e.g. energy counters) can be reset, and currently\nthe only supported value is 0. Writing any other value returns an error.\nThis variable will always read as 0.\"\"\",\n        }, # column\n        \"outletSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.7\",\n        }, # node\n        \"outletSensorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of control entries for the outlet sensors of a PDU. The set\nof valid indexes is defined by the value of outletCount and the\noutletDeviceCapabilities entry for the selected outlet.\"\"\",\n        }, # table\n        \"outletSensorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry used for controlling an outlet sensor.\"\"\",\n        }, # row\n        \"outletSensorResetValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing to this variable sets a new value for the addressed sensor. Only\naccumulating sensors (e.g. energy counters) can be reset, and currently\nthe only supported value is 0. Writing any other value returns an error.\nThis variable will always read as 0.\"\"\",\n        }, # column\n        \"unitSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.8\",\n        }, # node\n        \"unitSensorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of control entries for the global sensors of a PDU. The set\nof valid indexes is defined by the value of pduCount and the\npduDeviceCapabilities entry.\"\"\",\n        }, # table\n        \"unitSensorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry used for controlling an global sensor.\"\"\",\n        }, # row\n        \"unitSensorResetValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing to this variable sets a new value for the addressed sensor. Only\naccumulating sensors (e.g. energy counters) can be reset, and currently\nthe only supported value is 0. Writing any other value returns an error.\nThis variable will always read as 0.\nThis object applies only to multi-inlet PDUs.\"\"\",\n        }, # column\n        \"circuitSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.9\",\n        }, # node\n        \"circuitSensorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of control entries for the circuit sensors of a BCM2. The maximum\nnumber of entries is given by the value of panelCircuitPositionCount.\"\"\",\n        }, # table\n        \"circuitSensorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry used for controlling an circuit sensor.\"\"\",\n        }, # row\n        \"circuitSensorResetValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.4.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing to this variable sets a new value for the addressed sensor. Only\naccumulating sensors (e.g. energy counters) can be reset, and currently\nthe only supported value is 0. Writing any other value returns an error.\nThis variable will always read as 0.\"\"\",\n        }, # column\n        \"measurements\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5\",\n        }, # node\n        \"measurementsUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1\",\n        }, # node\n        \"unitSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of unit sensor entries.\"\"\",\n        }, # table\n        \"unitSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an unit sensor.\"\"\",\n        }, # row\n        \"measurementsUnitSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsUnitSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsUnitSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. power supply status sensors.\"\"\",\n        }, # column\n        \"measurementsUnitSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsUnitSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. power supply status sensors.\"\"\",\n        }, # column\n        \"measurementsInlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2\",\n        }, # node\n        \"inletSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inlet sensor entries. The number of\nentries is given by the value of inletCount for the PDU.\"\"\",\n        }, # table\n        \"inletSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an inlet sensor.\"\"\",\n        }, # row\n        \"measurementsInletSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsInletSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsInletSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"measurementsInletSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsInletSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"inletPoleSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inletPole sensor entries. The number of\nentries is given by the value of inletPoleCount for the inlet.\"\"\",\n        }, # table\n        \"inletPoleSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"inletPoleIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an inletPole sensor.\"\"\",\n        }, # row\n        \"measurementsInletPoleSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsInletPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsInletPoleSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"measurementsInletPoleSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsInletPoleSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"measurementsOverCurrentProtector\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3\",\n        }, # node\n        \"overCurrentProtectorSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of overCurrentProtector sensor entries. The number of\nentries is given by the value of overCurrentProtectorCount for the PDU.\"\"\",\n        }, # table\n        \"overCurrentProtectorSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"overCurrentProtectorIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an overCurrentProtector.\"\"\",\n        }, # row\n        \"measurementsOverCurrentProtectorSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsOverCurrentProtectorSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsOverCurrentProtectorSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits. For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"measurementsOverCurrentProtectorSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsOverCurrentProtectorSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits. For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. trip sensors.\"\"\",\n        }, # column\n        \"measurementsOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4\",\n        }, # node\n        \"outletSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet sensor entries. The number of\nentries is given by the value of outletCount for the PDU.\"\"\",\n        }, # table\n        \"outletSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an outlet sensor.\"\"\",\n        }, # row\n        \"measurementsOutletSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsOutletSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsOutletSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"measurementsOutletSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsOutletSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. outlet state sensors.\"\"\",\n        }, # column\n        \"outletPoleSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outletPole sensor entries. The number of\nentries is given by the value of outletPoletCount for the outlet.\"\"\",\n        }, # table\n        \"outletPoleSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"outletPoleIndex\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an outletPole sensor.\"\"\",\n        }, # row\n        \"measurementsOutletPoleSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsOutletPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsOutletPoleSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 50 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.05.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"measurementsOutletPoleSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsOutletPoleSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.4.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 50 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.05.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"measurementsExternalSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5\",\n        }, # node\n        \"externalSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of external sensor entries. The number of\nentries is given by the value of externalSensorCount for the PDU.\"\"\",\n        }, # table\n        \"externalSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorID\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for an external sensor.\"\"\",\n        }, # row\n        \"measurementsExternalSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsExternalSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsExternalSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\nexternalSensorDecimalDigits.  For example, if the value is 1 and\nexternalSensorDecimalDigits is 2, then actual value is 0.01.\nThis parameter does not apply to sensors without numerical reading,\ne.g. contact closure or smoke detection sensors.\"\"\",\n        }, # column\n        \"measurementsExternalSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading timestamp.\"\"\",\n        }, # column\n        \"measurementsWire\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6\",\n        }, # node\n        \"wireSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of wire sensor entries. The number of\nentries is given by the value of wireCount for the PDU.\"\"\",\n        }, # table\n        \"wireSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"pduId\",\n                \"wireId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for a wire.\"\"\",\n        }, # row\n        \"measurementsWireSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsWireSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsWireSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor value.\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits. For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the value exceeds 4294967295\nThis parameter does not apply to sensors without numerical reading.\"\"\",\n        }, # column\n        \"measurementsWireSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.6.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsTransferSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7\",\n        }, # node\n        \"transferSwitchSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of transfer switch sensor entries. The number of\nentries is given by the value of transferSwitchCount for the PDU.\"\"\",\n        }, # table\n        \"transferSwitchSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for a transfer switch.\"\"\",\n        }, # row\n        \"measurementsTransferSwitchSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsTransferSwitchSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsTransferSwitchSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"measurementsTransferSwitchSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsTransferSwitchSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.7.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. operational state or switch fault sensors.\"\"\",\n        }, # column\n        \"measurementsCircuit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8\",\n        }, # node\n        \"circuitSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of  circuit sensor entries. \"\"\",\n        }, # table\n        \"circuitSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for circuit sensor.\"\"\",\n        }, # row\n        \"measurementsCircuitSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsCircuitSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsCircuitSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"measurementsCircuitSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsCircuitSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"circuitPoleSensorMeasurementsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of panel circuit pole sensor entries. The number of\nentries is given by the value of inletCount for the PDU.\"\"\",\n        }, # table\n        \"circuitPoleSensorMeasurementsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"circuitPoleId\",\n                \"sensorType\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing measurement objects for a circuit pole sensor.\"\"\",\n        }, # row\n        \"measurementsCircuitPoleSensorIsAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is the sensor available?\"\"\",\n        }, # column\n        \"measurementsCircuitPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"measurementsCircuitPoleSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"measurementsCircuitPoleSensorTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timestamp.\"\"\",\n        }, # column\n        \"measurementsCircuitPoleSensorSignedValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.5.8.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\nThis parameter does not apply to sensors without numerical reading,\ne.g. surge protector status sensors.\"\"\",\n        }, # column\n        \"log\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6\",\n        }, # node\n        \"logUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1\",\n        }, # node\n        \"logIndexTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of log entries.\"\"\",\n        }, # table\n        \"logIndexEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the log containing sensor data.\"\"\",\n        }, # row\n        \"oldestLogID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the oldest data in the buffer for this PDU.\"\"\",\n        }, # column\n        \"newestLogID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the newest data in the buffer for this PDU.\"\"\",\n        }, # column\n        \"logTimeStampTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries containing the timestamps of the entries in the log.\"\"\",\n        }, # table\n        \"logTimeStampEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing the timestamp for log entries.\"\"\",\n        }, # row\n        \"logIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique value for each entry in the log. Its value\nranges between 1 and the value of logSize.\"\"\",\n        }, # column\n        \"logTimeStamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time when the data was collected. It is measured in seconds relative to\nJanuary 1, 1970 (midnight UTC/GMT), i.e a value of 0 indicates\nJanuary 1, 1970 (midnight UTC/GMT).\"\"\",\n        }, # column\n        \"unitSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of unit sensor entries in the log.\"\"\",\n        }, # table\n        \"unitSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an unit sensor.\"\"\",\n        }, # row\n        \"logUnitSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logUnitSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logUnitSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logUnitSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logUnitSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logUnitSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logUnitSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logUnitSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\nunitSensorDecimalDigits.  For example, if the value is 1 and\nunitSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logInlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2\",\n        }, # node\n        \"inletSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inlet sensor entries. The number of\nentries is given by the value of inletCount for the PDU.\"\"\",\n        }, # table\n        \"inletSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an inlet sensor.\"\"\",\n        }, # row\n        \"logInletSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logInletSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logInletSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logInletSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logInletSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"inletPoleSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of inletPole sensor entries. The number of\nentries is given by the value of inletPoleCount for the inlet.\"\"\",\n        }, # table\n        \"inletPoleSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"inletId\",\n                \"inletPoleIndex\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an inletPole sensor.\"\"\",\n        }, # row\n        \"logInletPoleSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logInletPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logInletPoleSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletPoleSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletPoleSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logInletPoleSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logInletPoleSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logInletPoleSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.2.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletPoleSensorDecimalDigits.  For example, if the value is 1 and\ninletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOverCurrentProtector\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3\",\n        }, # node\n        \"overCurrentProtectorSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of overCurrentProtector sensor entries. The number of\nentries is given by the value of overCurrentProtectorCount for the PDU.\"\"\",\n        }, # table\n        \"overCurrentProtectorSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"overCurrentProtectorIndex\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an overCurrentProtector sensor.\"\"\",\n        }, # row\n        \"logOverCurrentProtectorSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOverCurrentProtectorSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noverCurrentProtectorSensorDecimalDigits.  For example, if the value is 1 and\noverCurrentProtectorSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4\",\n        }, # node\n        \"outletSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outlet sensor entries. The number of\nentries is given by the value of outletCount for the PDU.\"\"\",\n        }, # table\n        \"outletSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an outlet sensor.\"\"\",\n        }, # row\n        \"logOutletSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logOutletSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logOutletSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOutletSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOutletSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletSensorDecimalDigits.  For example, if the value is 1 and\noutletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"outletPoleSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of outletPole sensor entries. The number of\nentries is given by the value of outletPoleCount for the outlet.\"\"\",\n        }, # table\n        \"outletPoleSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"outletId\",\n                \"outletPoleIndex\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an outletPole sensor.\"\"\",\n        }, # row\n        \"logOutletPoleSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logOutletPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logOutletPoleSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletPoleSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletPoleSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logOutletPoleSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOutletPoleSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logOutletPoleSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.4.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\noutletPoleSensorDecimalDigits.  For example, if the value is 1 and\noutletPoleSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logExternalSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5\",\n        }, # node\n        \"externalSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of external sensor entries. The number of\nentries is given by the value of externalSensorCount for the PDU.\"\"\",\n        }, # table\n        \"externalSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"sensorID\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for an external sensor.\"\"\",\n        }, # row\n        \"logExternalSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logExternalSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logExternalSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading average value.\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"logExternalSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading maximum value.\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"logExternalSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading minimum value.\nThe value of this OID variable should be scaled by \nexternalSensorDecimalDigits.  For example, if the value is 1 and \nexternalSensorDecimalDigits is 2, then actual value is 0.01.\"\"\",\n        }, # column\n        \"logWire\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6\",\n        }, # node\n        \"wireSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"A list of wire sensor entries. The number of\nentries is given by the value of wireCount for the PDU.\"\"\",\n        }, # table\n        \"wireSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1\",\n            \"status\" : \"deprecated\",\n            \"linkage\" : [\n                \"pduId\",\n                \"wireId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for a wire sensor.\"\"\",\n        }, # row\n        \"logWireSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logWireSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logWireSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading average value.\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits. For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the value exceeds 4294967295\"\"\",\n        }, # column\n        \"logWireSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading maximum value.\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits. For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the value exceeds 4294967295\"\"\",\n        }, # column\n        \"logWireSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.6.3.1.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor reading minimum value.\nThe value of this OID variable should be scaled by\nwireSensorDecimalDigits. For example, if the value is 1 and\nwireSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the value exceeds 4294967295.\"\"\",\n        }, # column\n        \"logTransferSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7\",\n        }, # node\n        \"transferSwitchSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Transfer Switch sensor entries. The number of\nentries is given by the value of transferSwitchCount for the PDU.\"\"\",\n        }, # table\n        \"transferSwitchSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"transferSwitchId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for a transfer switch sensor.\"\"\",\n        }, # row\n        \"logTransferSwitchSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logTransferSwitchSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logTransferSwitchSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logTransferSwitchSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logTransferSwitchSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logTransferSwitchSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logTransferSwitchSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logTransferSwitchSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.7.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ntransferSwitchSensorDecimalDigits.  For example, if the value is 1 and\ntransferSwitchSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logCircuit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8\",\n        }, # node\n        \"circuitSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of  Circuit sensor log entries. The number of\nentries is given by the value of panelinletCount for the Floor PDU.\"\"\",\n        }, # table\n        \"circuitSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for a circuit sensor.\"\"\",\n        }, # row\n        \"logCircuitSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logCircuitSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logCircuitSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logCircuitSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logCircuitSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"circuitPoleSensorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of  circuit pole sensor log entries. The number of\nentries is given by the value of panelCircuitPoleCount for the circut.\"\"\",\n        }, # table\n        \"circuitPoleSensorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduId\",\n                \"circuitId\",\n                \"circuitPoleId\",\n                \"sensorType\",\n                \"logIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing log objects for a circuit pole sensor.\"\"\",\n        }, # row\n        \"logCircuitPoleSensorDataAvailable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Is data available for this sensor during this measurement period?\"\"\",\n        }, # column\n        \"logCircuitPoleSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PDU2-MIB\", \"name\" : \"SensorStateEnumeration\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor state.\"\"\",\n        }, # column\n        \"logCircuitPoleSensorAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitPoleSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitPoleSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as an unsigned integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value will wrap around if the scaled sensor reading exceeds\n4294967295. It is undefined for sensors which can have negative\nreadings.\"\"\",\n        }, # column\n        \"logCircuitPoleSensorSignedAvgValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logCircuitPoleSensorSignedMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"logCircuitPoleSensorSignedMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.6.8.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum sensor reading for the log period as a signed integer.\nThe value of this OID variable should be scaled by\ninletSensorDecimalDigits.  For example, if the value is 1 and\ninletSensorDecimalDigits is 2, then actual value is 0.01.\nThis value is undefined for sensors whose range exceeds the\nInteger32 range (-2147483648 .. 2147483647).\"\"\",\n        }, # column\n        \"conformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9\",\n        }, # node\n        \"compliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.1\",\n        }, # node\n        \"groups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2\",\n        }, # node\n        \"reliability\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10\",\n        }, # node\n        \"reliabilityData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1\",\n        }, # node\n        \"reliabilityDataTableSequenceNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sequence number for updates to the reliability data table\"\"\",\n        }, # scalar\n        \"reliabilityDataTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of PDU reliability data entries.\"\"\",\n        }, # table\n        \"reliabilityDataEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"reliabilityIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing reliability data for a particular PDU.\"\"\",\n        }, # row\n        \"reliabilityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4096\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4096\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index of the entry in the table.\"\"\",\n        }, # column\n        \"reliabilityId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique ID of the entry.\nPOH\n    Power on hours.\n\nCB.<label>.TRIPCNT\n   Trip count of circuit breaker with label <label>.\n\nCTRL.<serial>.<addr>.MASTER.CSUMERRLASTHOUR\n   Number of checksum errors in slave (controller board) to master (CPU\n   board) communication in the last hour on controller with serial\n   number <serial> and bus address <addr>.\n\nCTRL.<serial>.<addr>.SLAVE.CSUMERRLASTHOUR\n  Number of checksum errors in master (CPU board) to slave (controller\n  board) communication in the last hour on controller with serial\n  number <serial> and bus address <addr>.\n\nCTRL.<serial>.<addr>.TOUTLASTHOUR\n  Number of communication timeouts to controller with serial\n  number <serial> and bus address <addr> in the last hour.\n\nCTRL.<serial>.<addr>.RLY.<num>.CYCLECNT\n  Number of cycles the relay <num> on the controller board with serial\n  number <serial> and bus address <addr> has made. A cycle is an\n  off->on followed by an on->off event later. The count is increased on\n  the off->on transition.\n\nCTRL.<serial>.<addr>.RLY.<num>.FAILLASTHOUR\n  Number of failed switching operations on relay <num> on the controller\n  board with serial number <serial> and bus address <addr> in the last\n  hour. It depends on the specific controller board hardware  and what\n  error conditions are detected.\"\"\",\n        }, # column\n        \"reliabilityDataValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The normalized value\"\"\",\n        }, # column\n        \"reliabilityDataMaxPossible\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum possible normalized value\"\"\",\n        }, # column\n        \"reliabilityDataWorstValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The worst normalized value seen so far\"\"\",\n        }, # column\n        \"reliabilityDataThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The normalized Threshold value \"\"\",\n        }, # column\n        \"reliabilityDataRawUpperBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Upper 4 bytes of the raw ( not normalized) data.\nreliabilityDataRawUpperBytes and reliabilityDataRawLowerBytes\nshould be combined and interpreted as a signed 64-bit value\"\"\",\n        }, # column\n        \"reliabilityDataRawLowerBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lower 4 bytes of the raw ( not normalized) data.\nreliabilityDataRawUpperBytes and reliabilityDataRawLowerBytes\nshould be combined and interpreted as a signed 64-bit value\"\"\",\n        }, # column\n        \"reliabilityDataFlags\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"invalidFlag\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"oldValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalEntry\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Flags\"\"\",\n        }, # column\n        \"reliabilityErrorLog\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2\",\n        }, # node\n        \"reliabilityErrorLogTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of PDU reliability ErrorLog entries. \"\"\",\n        }, # table\n        \"reliabilityErrorLogEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"reliabilityErrorLogIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing reliability ErrorLog data for a particular PDU.\"\"\",\n        }, # row\n        \"reliabilityErrorLogIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index of the entry in the table.\"\"\",\n        }, # column\n        \"reliabilityErrorLogId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique ID of the entry.\nPOH\n    Power on hours.\n\nCB.<label>.TRIPCNT\n   Trip count of circuit breaker with label <label>.\n\nCTRL.<serial>.<addr>.MASTER.CSUMERRLASTHOUR\n   Number of checksum errors in slave (controller board) to master (CPU\n   board) communication in the last hour on controller with serial\n   number <serial> and bus address <addr>.\n\nCTRL.<serial>.<addr>.SLAVE.CSUMERRLASTHOUR\n  Number of checksum errors in master (CPU board) to slave (controller\n  board) communication in the last hour on controller with serial\n  number <serial> and bus address <addr>.\n\nCTRL.<serial>.<addr>.TOUTLASTHOUR\n  Number of communication timeouts to controller with serial\n  number <serial> and bus address <addr> in the last hour.\n\nCTRL.<serial>.<addr>.RLY.<num>.CYCLECNT\n  Number of cycles the relay <num> on the controller board with serial\n  number <serial> and bus address <addr> has made. A cycle is an\n  off->on followed by an on->off event later. The count is increased on\n  the off->on transition.\n\nCTRL.<serial>.<addr>.RLY.<num>.FAILLASTHOUR\n  Number of failed switching operations on relay <num> on the controller\n  board with serial number <serial> and bus address <addr> in the last\n  hour. It depends on the specific controller board hardware  and what\n  error conditions are detected.\"\"\",\n        }, # column\n        \"reliabilityErrorLogValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The normalized value\"\"\",\n        }, # column\n        \"reliabilityErrorLogThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The normalized Threshold value \"\"\",\n        }, # column\n        \"reliabilityErrorLogRawUpperBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Upper 4 bytes of the raw ( not normalized) data.\nreliabilityDataRawUpperBytes and reliabilityDataRawLowerBytes\nshould be combined and interpreted as a signed 64-bit value\"\"\",\n        }, # column\n        \"reliabilityErrorLogRawLowerBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lower 4 bytes of the raw ( not normalized) data.\nreliabilityDataRawUpperBytes and reliabilityDataRawLowerBytes\nshould be combined and interpreted as a signed 64-bit value\"\"\",\n        }, # column\n        \"reliabilityErrorLogPOH\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time of occurrence of the event measured from the last\ntime the PDU was powered on\"\"\",\n        }, # column\n        \"reliabilityErrorLogTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.10.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UTC time of occurrence of the event \"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"systemStarted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The system has started. \"\"\",\n        }, # notification\n        \"systemReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The system was reset. The conditions under which\nthis trap is sent include, but are not limited to, the following.\n  using the GUI - Maintenance->Reset Unit\n  using the CLI - reset pdu unit\"\"\",\n        }, # notification\n        \"userLogin\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user logged in.\"\"\",\n        }, # notification\n        \"userLogout\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user logged out.\"\"\",\n        }, # notification\n        \"userAuthenticationFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user authentication attempt failed.\"\"\",\n        }, # notification\n        \"userSessionTimeout\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user session timed out.\"\"\",\n        }, # notification\n        \"userAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"targetUser\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user was added to the system.\"\"\",\n        }, # notification\n        \"userModified\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"targetUser\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user was modified.\"\"\",\n        }, # notification\n        \"userDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"targetUser\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user was deleted from the system.\"\"\",\n        }, # notification\n        \"roleAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A role was added to the system.\"\"\",\n        }, # notification\n        \"roleModified\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A role was modified.\"\"\",\n        }, # notification\n        \"roleDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A role was deleted from the system.\"\"\",\n        }, # notification\n        \"deviceUpdateStarted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"imageVersion\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device update has started.\"\"\",\n        }, # notification\n        \"deviceUpdateCompleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"imageVersion\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device update has completed.\"\"\",\n        }, # notification\n        \"userBlocked\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A blocked user tried to log in.\"\"\",\n        }, # notification\n        \"powerControl\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"switchingOperation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An outlet switching operation has been performed.\nNote that measurementsOutletSensorState represents the state of the outlet at the time the trap was sent. \nThis may be different from the final state of the outlet. For instance, \nif the outlet is cycled and the outlet cycle delay is 20 seconds, this variable will \nindicate OFF although the final state of the outlet will be ON. The final state of the\noutlet will be indicated in the outletSensorStateChange trap for the outlet onOff sensor.\"\"\",\n        }, # notification\n        \"userPasswordChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"targetUser\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"User password was changed.\"\"\",\n        }, # notification\n        \"passwordSettingsChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Strong password settings changed.\"\"\",\n        }, # notification\n        \"firmwareValidationFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Firmware validation failed.\"\"\",\n        }, # notification\n        \"logFileCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The log file has been cleared.\"\"\",\n        }, # notification\n        \"bulkConfigurationSaved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.53\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Bulk Configuration saved.\"\"\",\n        }, # notification\n        \"bulkConfigurationCopied\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.54\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Bulk Configuration copied to the device.\"\"\",\n        }, # notification\n        \"pduSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.60\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"PDU Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsUnitSensorValue is undefined for sensors which can\nhave negative readings, measurementsUnitSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"inletSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.61\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Inlet Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsInletSensorValue is undefined for sensors which can\nhave negative readings, measurementsInletSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\n\nFor an rcmState sensor transitioning to the fail state, the value is the residual current\njust before the sensor transitioned to the fail state i.e.\n if typeOfSensor = rcmState and measurementsInletSensorState = fail,\n   then measurementsInletSensorValue = the residual current just before the sensor transitioned to the fail state\"\"\",\n        }, # notification\n        \"inletPoleSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.62\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Inlet Pole Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsInletPoleSensorValue is undefined for sensors which can\nhave negative readings, measurementsInletPoleSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"outletSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.63\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsOutletSensorValue is undefined for sensors which can\nhave negative readings, measurementsOutletSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"outletPoleSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.64\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Outlet Pole Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsOutletPoleSensorValue is undefined for sensors which can\nhave negative readings, measurementsOutletPoleSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"overCurrentProtectorSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.65\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Overcurrent Protector Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsOverCurrentProtectorSensorValue is undefined for sensors which can\nhave negative readings, measurementsOverCurrentProtectorSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"externalSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.66\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalOnOffSensorSubtype\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorChannelNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"External Sensor State Change.\"\"\",\n        }, # notification\n        \"smtpMessageTransmissionFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.67\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smtpMessageRecipients\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smtpServer\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP message transmission failure\"\"\",\n        }, # notification\n        \"ldapError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.68\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"errorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"LDAP Error occurred; errorDescription describes the error\"\"\",\n        }, # notification\n        \"deviceUpdateFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.70\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"imageVersion\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device update has failed.\"\"\",\n        }, # notification\n        \"loadSheddingModeEntered\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.71\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The PX has enetered Load Shedding Mode\"\"\",\n        }, # notification\n        \"loadSheddingModeExited\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.72\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The PX has exited Load Shedding Mode\"\"\",\n        }, # notification\n        \"pingServerEnabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.73\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ping feature has been enabled\"\"\",\n        }, # notification\n        \"pingServerDisabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.74\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ping feature has been disabled\"\"\",\n        }, # notification\n        \"serverNotReachable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.75\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The server is not reachable\"\"\",\n        }, # notification\n        \"serverReachable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.76\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The server is  reachable\"\"\",\n        }, # notification\n        \"rfCodeTagConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.77\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The RF Code Tag is Connected\"\"\",\n        }, # notification\n        \"rfCodeTagDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.78\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The RF Code Tag is Disconnected\"\"\",\n        }, # notification\n        \"deviceIdentificationChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.79\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceChangedParameter\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"changedParameterNewValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device identification has changed\"\"\",\n        }, # notification\n        \"usbSlaveConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.80\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"USB Connectivity to slave has been established\"\"\",\n        }, # notification\n        \"usbSlaveDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.81\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"USB Connectivity to slave has been lost\"\"\",\n        }, # notification\n        \"lhxSupportChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.82\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"lhxSupportEnabled\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Schroff LHX Support has been either enabled or disabled.\"\"\",\n        }, # notification\n        \"userAcceptedRestrictedServiceAgreement\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.83\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The user accepted the Restricted Service Agreement.\"\"\",\n        }, # notification\n        \"userDeclinedRestrictedServiceAgreement\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.84\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The user declined the Restricted Service Agreement.\"\"\",\n        }, # notification\n        \"wireSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.85\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Wire Sensor State Change.\"\"\",\n        }, # notification\n        \"transferSwitchSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.86\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"transferSwitchLastTransferReason\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Transfer Switch Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsTransferSwitchSensorValue is undefined for sensors which can\nhave negative readings, measurementsTransferSwitchSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"deviceSettingsSaved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.88\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device Settings have been saved.\"\"\",\n        }, # notification\n        \"deviceSettingsRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.89\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Device Settings have been restored.\"\"\",\n        }, # notification\n        \"webcamInserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.90\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamModel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamConnectionPort\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A webcam has been inserted\"\"\",\n        }, # notification\n        \"webcamRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.91\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamModel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamConnectionPort\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A webcam has been removed\"\"\",\n        }, # notification\n        \"inletEnabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.92\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"PDU operation has been enabled for an inlet\"\"\",\n        }, # notification\n        \"inletDisabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.93\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"PDU operation has been disabled for an inlet\"\"\",\n        }, # notification\n        \"serverConnectivityUnrecoverable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.94\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The connection to the server could not be recovered\"\"\",\n        }, # notification\n        \"radiusError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.95\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"errorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"LDAP Error occurred; errorDescription describes the error\"\"\",\n        }, # notification\n        \"serverReachabilityError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.96\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"errorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Server Reachability Error occurred; errorDescription describes the error.\nThis trap is sent when the Error state is entered.\nReasons for transitioning to the Error state include the following:\n       Unable to resolve the server hostname.  \"\"\",\n        }, # notification\n        \"inletSensorReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.97\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An inlet sensor was reset.\"\"\",\n        }, # notification\n        \"outletSensorReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.98\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An outlet sensor was reset.\"\"\",\n        }, # notification\n        \"unknownPeripheralDeviceAttached\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.99\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDeviceRomcode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackagePosition\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An unknown peripheral device was attached.\"\"\",\n        }, # notification\n        \"peripheralDeviceFirmwareUpdate\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.100\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDeviceFirmwareUpdateState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageFirmwareVersion\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The firmware update state of a peripheral device changed while \nperforming update to peripheralDevicePackageFirmwareVersion.\"\"\",\n        }, # notification\n        \"unitSensorReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A global sensor was reset.\"\"\",\n        }, # notification\n        \"unitSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.102\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Unit Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsUnitSensorValue is undefined for sensors which can\nhave negative readings, measurementsUnitSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"circuitSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.103\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"circuit Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsOutletSensorValue is undefined for sensors which can\nhave negative readings, measurementsCircuitSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"circuitPoleSensorStateChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Circuit Pole Sensor State Change.\nWhich value field to use depends on the metadata of the sensor.\nmeasurementsOutletPoleSensorValue is undefined for sensors which can\nhave negative readings, measurementsCircuitPoleSensorSignedValue is\nundefined for sensors whose range exceeds the Integer32 range.\nBoth fields do not apply to sensors without numerical readings.\"\"\",\n        }, # notification\n        \"circuitAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitRatedCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Circuit has been added\"\"\",\n        }, # notification\n        \"circuitDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Circuit has been deleted\"\"\",\n        }, # notification\n        \"circuitModified\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitRatedCurrent\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Circuit has been modified\"\"\",\n        }, # notification\n        \"circuitSensorReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An ciruit sensor was reset.\"\"\",\n        }, # notification\n        \"powerMeterAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPhaseCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterNeutralCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterEarthCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelPositions\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelLayout\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelNumbering\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Power Meter has been added\"\"\",\n        }, # notification\n        \"powerMeterDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Power Meter has been deleted\"\"\",\n        }, # notification\n        \"powerMeterModified\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPhaseCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterNeutralCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterEarthCTRating\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Power Meter has been modified\"\"\",\n        }, # notification\n        \"smsMessageTransmissionFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.0.112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pduName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"phoneNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Sending an SMS message failed.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"configGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pduCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduRatedVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduRatedCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduRatedFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduRatedVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduImage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"productType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletControllerCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletControllerCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"meteringControllerCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxMACAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"utcOffset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"boardVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"boardFirmwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"boardFirmwareTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPlug\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletRatedVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletRatedCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletDeviceCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPlugDescriptor\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletEnableState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleLine\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleNode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletRCMResidualOperatingCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorRatedCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorPoleCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorPoleLine\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorPoleInNode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorPoleOutNode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorPowerSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletReceptacle\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletRatedVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletRatedCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletRatedVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletDeviceCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPowerCyclingPowerOffPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletStateOnStartup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletUseGlobalPowerCyclingPowerOffPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSwitchable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletReceptacleDescriptor\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletNonCritical\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSequenceDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleLine\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleNode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPowerSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorXCoordinate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorYCoordinate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorZCoordinate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorChannelNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalOnOffSensorSubtype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorsZCoordinateUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorIsActuator\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorPosition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorUseDefaultThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTypeDefaultEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsPerLogEntry\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logSize\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitDeviceCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"globalOutletPowerCyclingPowerOffPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"globalOutletStateOnStartup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"relayBehaviorOnPowerLoss\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduPowerCyclingPowerOffPeriod\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduDaisychainMemberType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"managedExternalSensorCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPowerupSequence\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"loadShedding\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverPingEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inrushGuardDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"cascadedDeviceConnected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"synchronizeWithNTPServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"useDHCPProvidedNTPServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"firstNTPServerAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"firstNTPServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"secondNTPServerAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"secondNTPServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPreferredInlet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPoleCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchAutoReTransferEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchAutoReTransferWaitTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchAutoReTransferRequiresPhaseSync\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchFrontPanelManualTransferButtonEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPoleLine\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPoleIn1Node\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPoleIn2Node\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPoleOutNode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPowerSource1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchPowerSource2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageFirmwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageMinFirmwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageFirmwareTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackagePosition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicePackageState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceCascadeType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceCascadePosition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDevicesAutoManagement\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorAlarmedToNormalDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"frontPanelOutletSwitching\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"frontPanelRCMSelfTest\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"frontPanelActuatorControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelPositions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelLayout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPanelNumbering\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterPhaseCTRating\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterNeutralCTRating\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterEarthCTRating\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterBranchCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitRatedCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitCTRating\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPowerSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPolePanelPosition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleCTNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPolePhase\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorSignedUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"networkInterfaceType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"activeDNSServerAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"activeDNSServerAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"activeDNSServerAddressSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"activeDNSServerCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing configuration data.\"\"\",\n        }, # group\n        \"logGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dataLogging\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldestLogID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"newestLogID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"dataLoggingEnableForAllSensors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logUnitSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logInletPoleSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOutletPoleSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logOverCurrentProtectorSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logExternalSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logExternalSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logExternalSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logExternalSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logExternalSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logTransferSwitchSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorSignedAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorSignedMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logCircuitPoleSensorSignedMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing logging (history of readings) capabilities \nabout the PDU.\"\"\",\n        }, # group\n        \"measurementsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"measurementsUnitSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsUnitSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsInletPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOutletPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsOverCurrentProtectorSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsExternalSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsTransferSwitchSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsCircuitPoleSensorSignedValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing measurements (most recent data) capabilities.\nabout the PDU.\"\"\",\n        }, # group\n        \"controlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"switchingOperation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSwitchingState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSwitchingTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchActiveInlet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchTransferToInlet\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchAlarmOverride\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchLastTransferReason\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"actuatorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"rcmState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorResetValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorResetValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorResetValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorResetValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing the ability to control various components\nof a PDU.\"\"\",\n        }, # group\n        \"trapInformationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"userName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"targetUser\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"imageVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"oldSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"typeOfSensor\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smtpMessageRecipients\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smtpServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"errorDescription\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceChangedParameter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"changedParameterNewValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"lhxSupportEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamConnectionPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"agentInetPortNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDeviceRomcode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDeviceFirmwareUpdateState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"phoneNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information in the traps.\"\"\",\n        }, # group\n        \"trapsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"systemStarted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"systemReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userLogin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userLogout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userAuthenticationFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userSessionTimeout\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userAdded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userModified\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleAdded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleModified\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"roleDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceUpdateStarted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceUpdateCompleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userBlocked\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userPasswordChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"passwordSettingsChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"firmwareValidationFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logFileCleared\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"bulkConfigurationSaved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"bulkConfigurationCopied\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smtpMessageTransmissionFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"ldapError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceUpdateFailed\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"loadSheddingModeEntered\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"loadSheddingModeExited\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pingServerEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pingServerDisabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverNotReachable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverReachable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"rfCodeTagConnected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"rfCodeTagDisconnected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceIdentificationChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"usbSlaveConnected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"usbSlaveDisconnected\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"lhxSupportChanged\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userAcceptedRestrictedServiceAgreement\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"userDeclinedRestrictedServiceAgreement\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceSettingsSaved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"deviceSettingsRestored\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamInserted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"webcamRemoved\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletEnabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletDisabled\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverConnectivityUnrecoverable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"radiusError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"serverReachabilityError\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorReset\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unknownPeripheralDeviceAttached\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"peripheralDeviceFirmwareUpdate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitPoleSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitAdded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"circuitModified\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterAdded\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterDeleted\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"powerMeterModified\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"smsMessageTransmissionFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of traps.\"\"\",\n        }, # group\n        \"reliabilityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"reliabilityId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataMaxPossible\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataWorstValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataRawUpperBytes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataRawLowerBytes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataFlags\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogRawUpperBytes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogRawLowerBytes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogPOH\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityErrorLogTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"reliabilityDataTableSequenceNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing reliability data.\"\"\",\n        }, # group\n        \"ipAddressGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.12\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"pxIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"netmask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"gateway\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetAddressType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetNetmask\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pxInetGateway\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing configuration data.\"\"\",\n        }, # group\n        \"oldConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.13\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"outletSequencingDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"unitSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletPoleSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"outletPoleSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"overCurrentProtectorSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"externalSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorAccuracy\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"transferSwitchSensorTolerance\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireCapabilities\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorLogAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorUnits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorDecimalDigits\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorResolution\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorMaximum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorMinimum\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorHysteresis\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorStateChangeDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorLowerCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorLowerWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorUpperCriticalThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorUpperWarningThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wireSensorEnabledThresholds\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"wirePowerSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletRatedFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"inletRatedVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing old (deprecated) configuration data.\"\"\",\n        }, # group\n        \"oldLogGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.14\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"logWireSensorDataAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logWireSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logWireSensorAvgValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logWireSensorMaxValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"logWireSensorMinValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing old (deprecated) logging data.\"\"\",\n        }, # group\n        \"oldMeasurementsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.15\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"measurementsWireSensorIsAvailable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorValue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"measurementsWireSensorTimeStamp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing old (deprecated) measurement data.\"\"\",\n        }, # group\n        \"oldTrapsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.2.16\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"wireSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n                \"pduSensorStateChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"PDU2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects representing old (deprecated) traps.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"complianceRev1\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.1.1\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The requirements for conformance to the PDU2-MIB.\"\"\",\n            \"requires\" : {\n                \"ipAddressGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The ipAddress group.\"\"\",\n                },\n                \"oldConfigGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"old (deprecated) configuration data\"\"\",\n                },\n                \"oldLogGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"old (deprecated) logging data\"\"\",\n                },\n                \"oldMeasurementsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"old (deprecated) measurement data\"\"\",\n                },\n                \"oldTrapsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"old (deprecated) traps\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"complianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"PDU2-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.13742.6.9.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The requirements for conformance to the PDU2-MIB.\"\"\",\n            \"requires\" : {\n                \"configGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The configuration group.\"\"\",\n                },\n                \"logGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The log group.\"\"\",\n                },\n                \"measurementsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The measurements group.\"\"\",\n                },\n                \"controlGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The control group.\"\"\",\n                },\n                \"trapInformationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The information group.\"\"\",\n                },\n                \"trapsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The information group.\"\"\",\n                },\n                \"reliabilityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"PDU2-MIB\",\n                    \"description\" :\n                        \"\"\"The reliability group.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"powerMeterPhaseCTRating\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"powerMeterNeutralCTRating\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"powerMeterEarthCTRating\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"circuitName\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"circuitRatedCurrent\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"circuitPoleCTNumber\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"circuitPolePhase\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n                \"circuitCTRating\" : {\n                    \"module\" : \"PDU2-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"configuration is not required\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/POWER-ETHERNET-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python POWER-ETHERNET-MIB\n\nFILENAME = \"/var/lib/mibs/ietf/POWER-ETHERNET-MIB\"\n\nMIB = {\n    \"moduleName\" : \"POWER-ETHERNET-MIB\",\n\n    \"POWER-ETHERNET-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Ethernet Interfaces and Hub MIB\nWorking Group\"\"\",\n        \"contact\" : \n            \"\"\"\nWG Charter:\nhttp://www.ietf.org/html.charters/hubmib-charter.html\n\nMailing lists:\nGeneral Discussion: hubmib@ietf.org\nTo Subscribe: hubmib-requests@ietf.org\nIn Body: subscribe your_email_address\n\nChair: Dan Romascanu\nAvaya\nTel:  +972-3-645-8414\nEmail: dromasca@avaya.com\n\nEditor: Avi Berger\nPowerDsine Inc.\nTel:    972-9-7755100 Ext 307\nFax:    972-9-7755120\nE-mail: avib@PowerDsine.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for managing Power Source Equipment\n(PSE) working according to the IEEE 802.af Powered\nEthernet (DTE Power via MDI) standard.\n\n The following terms are used throughout this\n MIB module.  For complete formal definitions,\n the IEEE 802.3 standards should be consulted\n wherever possible:\n\n Group - A recommended, but optional, entity\n defined by the IEEE 802.3 management standard,\n in order to support a modular numbering scheme.\n The classical example allows an implementor to\n represent field-replaceable units as groups of\n ports, with the port numbering matching the\n modular hardware implementation.\n\nPort - This entity identifies the port within the group\nfor which this entry contains information.  The numbering\nscheme for ports is implementation specific.\n\nCopyright (c) The Internet Society (2003).  This version\nof this MIB module is part of RFC 3621; See the RFC\nitself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2003-11-24 00:00\",\n                \"description\" :\n                    \"\"\"Initial version, published as RFC 3621.\"\"\",\n            },\n        ),\n        \"identity node\" : \"powerEthernetMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n    ),\n\n    \"nodes\" : {\n        \"powerEthernetMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105\",\n            \"status\" : \"current\",\n        }, # node\n        \"pethNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.0\",\n        }, # node\n        \"pethObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1\",\n        }, # node\n        \"pethPsePortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of objects that display and control the power\ncharacteristics of power Ethernet ports on a Power Source\nEntity (PSE) device.  This group will be implemented in\nmanaged power Ethernet switches and mid-span devices.\nValues of all read-write objects in this table are\npersistent at restart/reboot.\"\"\",\n        }, # table\n        \"pethPsePortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pethPsePortGroupIndex\",\n                \"pethPsePortIndex\",\n            ],\n            \"description\" :\n                \"\"\"A set of objects that display and control the power\ncharacteristics of a power Ethernet PSE port.\"\"\",\n        }, # row\n        \"pethPsePortGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This variable uniquely identifies the group\ncontaining the port to which a power Ethernet PSE is\nconnected.  Group means box in the stack, module in a\nrack and the value 1 MUST be used for non-modular devices.\nFurthermore, the same value MUST be used in this variable,\npethMainPseGroupIndex, and pethNotificationControlGroupIndex\nto refer to a given box in a stack or module in the rack.\"\"\",\n        }, # column\n        \"pethPsePortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This variable uniquely identifies the power Ethernet PSE\nport within group pethPsePortGroupIndex to which the\npower Ethernet PSE entry is connected.\"\"\",\n        }, # column\n        \"pethPsePortAdminEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"true (1) An interface which can provide the PSE functions.\nfalse(2) The interface will act as it would if it had no PSE\nfunction.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.2 aPSEAdminState\"\"\",\n        }, # column\n        \"pethPsePortPowerPairsControlAbility\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Describes the capability of controlling the power pairs\nfunctionality to switch pins for sourcing power.\nThe value true indicate that the device has the capability\nto control the power pairs.  When false the PSE Pinout\nAlternative used cannot be controlled through the\nPethPsePortAdminEnable attribute.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.3\naPSEPowerPairsControlAbility\"\"\",\n        }, # column\n        \"pethPsePortPowerPairs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"signal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"spare\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Describes or controls the pairs in use.  If the value of\npethPsePortPowerPairsControl is true, this object is\nwritable.\nA value of signal(1) means that the signal pairs\nonly are in use.\nA value of spare(2) means that the spare pairs\nonly are in use.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.4 aPSEPowerPairs\"\"\",\n        }, # column\n        \"pethPsePortDetectionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"searching\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"deliveringPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"otherFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Describes the operational status of the port PD detection.\nA value of disabled(1)- indicates that the PSE State diagram\nis in the state DISABLED.\nA value of deliveringPower(3) - indicates that the PSE State\ndiagram is in the state POWER_ON for a duration greater than\ntlim max (see IEEE Std 802.3af Table 33-5 tlim).\nA value of fault(4) - indicates that the PSE State diagram is\nin the state TEST_ERROR.\nA value of test(5) - indicates that the PSE State diagram is\nin the state TEST_MODE.\nA value of otherFault(6) - indicates that the PSE State\ndiagram is in the state IDLE due to the variable\nerror_conditions.\nA value of searching(2)- indicates the PSE State diagram is\nin a state other than those listed above.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.5\naPSEPowerDetectionStatus\"\"\",\n        }, # column\n        \"pethPsePortPowerPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object controls the priority of the port from the point\nof view of a power management algorithm.  The priority that\nis set by this variable could be used by a control mechanism\nthat prevents over current situations by disconnecting first\nports with lower power priority.  Ports that connect devices\ncritical to the operation of the network - like the E911\ntelephones ports - should be set to higher priority.\"\"\",\n        }, # column\n        \"pethPsePortMPSAbsentCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when the PSE state diagram\ntransitions directly from the state POWER_ON to the\n\nstate IDLE due to tmpdo_timer_done being asserted.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.11\naPSEMPSAbsentCounter\"\"\",\n        }, # column\n        \"pethPsePortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A manager will set the value of this variable to indicate\nthe type of powered device that is connected to the port.\nThe default value supplied by the agent if no value has\never been set should be a zero-length octet string.\"\"\",\n        }, # column\n        \"pethPsePortPowerClassifications\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"class0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"class1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"class2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"class3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"class4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Classification is a way to tag different terminals on the\nPower over LAN network according to their power consumption.\nDevices such as IP telephones, WLAN access points and others,\nwill be classified according to their power requirements.\n\nThe meaning of the classification labels is defined in the\nIEEE specification.\n\nThis variable is valid only while a PD is being powered,\nthat is, while the attribute pethPsePortDetectionStatus\nis reporting the enumeration deliveringPower.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.6\naPSEPowerClassification\"\"\",\n        }, # column\n        \"pethPsePortInvalidSignatureCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when the PSE state diagram\nenters the state SIGNATURE_INVALID.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.7\naPSEInvalidSignatureCounter\"\"\",\n        }, # column\n        \"pethPsePortPowerDeniedCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when the PSE state diagram\nenters the state POWER_DENIED.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.8\naPSEPowerDeniedCounter\"\"\",\n        }, # column\n        \"pethPsePortOverLoadCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when the PSE state diagram\nenters the state ERROR_DELAY_OVER.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.9\naPSEOverLoadCounter\"\"\",\n        }, # column\n        \"pethPsePortShortCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter is incremented when the PSE state diagram\nenters the state ERROR_DELAY_SHORT.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE Std 802.3af Section 30.9.1.1.10\naPSEShortCounter\"\"\",\n        }, # column\n        \"pethMainPseObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3\",\n        }, # node\n        \"pethMainPseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of objects that display and control attributes\nof the main power source in a PSE  device.  Ethernet\nswitches are one example of boxes that would support\nthese objects.\nValues of all read-write objects in this table are\npersistent at restart/reboot.\"\"\",\n        }, # table\n        \"pethMainPseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pethMainPseGroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"A set of objects that display and control the Main\npower of a PSE. \"\"\",\n        }, # row\n        \"pethMainPseGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This variable uniquely identifies the group to which\npower Ethernet PSE is connected.  Group means (box in\nthe stack, module in a rack) and the value 1 MUST be\nused for non-modular devices.  Furthermore, the same\nvalue MUST be used in this variable, pethPsePortGroupIndex,\nand pethNotificationControlGroupIndex to refer to a\ngiven box in a stack or module in a rack.\"\"\",\n        }, # column\n        \"pethMainPsePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Gauge32\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"The nominal power of the PSE expressed in Watts.\"\"\",\n        }, # column\n        \"pethMainPseOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"faulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the main PSE.\"\"\",\n        }, # column\n        \"pethMainPseConsumptionPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"Measured usage power expressed in Watts.\"\"\",\n        }, # column\n        \"pethMainPseUsageThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"99\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"99\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"%\",\n            \"description\" :\n                \"\"\"The usage threshold expressed in percents for\ncomparing the measured power and initiating\nan alarm if the threshold is exceeded.\"\"\",\n        }, # column\n        \"pethNotificationControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.4\",\n        }, # node\n        \"pethNotificationControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of objects that display and control the\nNotification on a PSE  device.\nValues of all read-write objects in this table are\npersistent at restart/reboot.\"\"\",\n        }, # table\n        \"pethNotificationControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pethNotificationControlGroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"A set of objects that control the Notification events.\"\"\",\n        }, # row\n        \"pethNotificationControlGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This variable uniquely identifies the group.  Group\nmeans box in the stack, module in a rack and the value\n1 MUST be used for non-modular devices.  Furthermore,\nthe same value MUST be used in this variable,\npethPsePortGroupIndex, and\npethMainPseGroupIndex to refer to a given box in a\nstack or module in a rack. \"\"\",\n        }, # column\n        \"pethNotificationControlEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.1.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object controls, on a per-group basis, whether\nor not notifications from the agent are enabled.  The\nvalue true(1) means that notifications are enabled; the\nvalue false(2) means that they are not.\"\"\",\n        }, # column\n        \"pethConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2\",\n        }, # node\n        \"pethCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.1\",\n        }, # node\n        \"pethGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"pethPsePortOnOffNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pethPsePortDetectionStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\" This Notification indicates if Pse Port is delivering or\nnot power to the PD.  This Notification SHOULD be sent on\nevery status change except in the searching mode.\nAt least 500 msec must elapse between notifications\nbeing emitted by the same object instance.\"\"\",\n        }, # notification\n        \"pethMainPowerUsageOnNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pethMainPseConsumptionPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\" This Notification indicate PSE Threshold usage\nindication is on, the usage power is above the\nthreshold.  At least 500 msec must elapse between\nnotifications being emitted by the same object\ninstance.\"\"\",\n        }, # notification\n        \"pethMainPowerUsageOffNotification\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"pethMainPseConsumptionPower\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\" This Notification indicates PSE Threshold usage indication\noff, the usage power is below the threshold.\nAt least 500 msec must elapse between notifications being\nemitted by the same object instance.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"pethPsePortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pethPsePortAdminEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortPowerPairsControlAbility\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortPowerPairs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortDetectionStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortPowerPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortMPSAbsentCounter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortInvalidSignatureCounter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortPowerDeniedCounter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortOverLoadCounter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortShortCounter\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortPowerClassifications\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"PSE Port objects.\"\"\",\n        }, # group\n        \"pethMainPseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pethMainPsePower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethMainPseOperStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethMainPseConsumptionPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethMainPseUsageThreshold\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Main PSE Objects. \"\"\",\n        }, # group\n        \"pethNotificationControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pethNotificationControlEnable\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Notification Control  Objects. \"\"\",\n        }, # group\n        \"pethPsePortNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pethPsePortOnOffNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Pse Port Notifications.\"\"\",\n        }, # group\n        \"pethMainPowerNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"pethMainPowerUsageOnNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethMainPowerUsageOffNotification\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Main PSE Notifications.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"pethCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"POWER-ETHERNET-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.105.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Describes the requirements for conformance to the\nPower Ethernet MIB.\"\"\",\n            \"requires\" : {\n                \"pethPsePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethPsePortNotificationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethNotificationControlGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"POWER-ETHERNET-MIB\"\n                },\n                \"pethMainPseGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"POWER-ETHERNET-MIB\",\n                    \"description\" :\n                        \"\"\"The pethMainPseGroup is mandatory for PSE systems\nthat implement a main power supply.\"\"\",\n                },\n                \"pethMainPowerNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"POWER-ETHERNET-MIB\",\n                    \"description\" :\n                        \"\"\"The pethMainPowerNotificationGroup is mandatory for\nPSE systems that implement a main power supply.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/POWERSUPPLY-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python POWERSUPPLY-MIB\n\nFILENAME = \"POWERSUPPLY-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"POWERSUPPLY-MIB\",\n\n    \"POWERSUPPLY-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Hewitt-Packard\"\"\",\n        \"contact\" : \n            \"\"\"k-p-rama.murthy@hp.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB module is for representing \nswitch power supply entity.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2008-08-27 10:00\",\n                \"description\" :\n                    \"\"\"Initial Version of Power Supply MIB, Version 1\"\"\",\n            },\n        ),\n        \"identity node\" : \"hpicfPsMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"HP-ICF-OID\", \"name\" : \"hpSwitch\"},\n    ),\n\n    \"typedefs\" : {\n        \"HpicfDcPsIndex\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"A unique value that serves as index to identify the power supply.\"\"\",\n        },\n        \"HpicfDcPsState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"status\" : \"current\",\n            \"psNotPresent\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"psNotPlugged\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"psPowered\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"psFailed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"psPermFailure\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"psMax\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n            \"description\" :\n                \"\"\"An enumerated value which provides the state of the \nswitch power supply entity.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"hpicfPsMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55\",\n            \"status\" : \"current\",\n        }, # node\n        \"hpicfEntityPs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1\",\n        }, # node\n        \"hpicfPsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains one row per switch power supply entity.\"\"\",\n        }, # table\n        \"hpicfPsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpicfPsBayNum\",\n            ],\n            \"description\" :\n                \"\"\"Information about the power supply physical entity\ntable.\"\"\",\n        }, # row\n        \"hpicfPsBayNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"POWERSUPPLY-MIB\", \"name\" : \"HpicfDcPsIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index of switch power supply entity.\"\"\",\n        }, # column\n        \"hpicfPsState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"POWERSUPPLY-MIB\", \"name\" : \"HpicfDcPsState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The physial state of the switch power supply entity.\"\"\",\n        }, # column\n        \"hpicfPsFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times power supply has failed.\"\"\",\n        }, # column\n        \"hpicfPsTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the power supply in celsius\"\"\",\n        }, # column\n        \"hpicfPsVoltageInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage info and max current of power supply.\ne.g. AC 120V/220V. \"\"\",\n        }, # column\n        \"hpicfPsWattageCur\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present power supply wattage information\"\"\",\n        }, # column\n        \"hpicfPsWattageMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum wattage of the power supply.\"\"\",\n        }, # column\n        \"hpicfPsLastCall\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of seconds since the switch power supply is up.\"\"\",\n        }, # column\n        \"hpicfPsConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.2\",\n        }, # node\n        \"hpicfPsCompliance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.2.1\",\n        }, # node\n        \"hpicfPsGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"hpicfPsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpicfPsState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsTemp\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsVoltageInfo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsWattageCur\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsWattageMax\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsLastCall\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"POWER SUPPLY parameters \"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"hpicfDcPsCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"POWERSUPPLY-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.55.2.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for entries which implement the\nPOWER SUPPLY MIB.\"\"\",\n            \"requires\" : {\n                \"hpicfPsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"POWERSUPPLY-MIB\"\n                },\n                \"hpicfPsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"POWERSUPPLY-MIB\",\n                    \"description\" :\n                        \"\"\"Objects associated with Entity POWER SUPPLY.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/PWTv1-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python PWTv1-MIB\n\nFILENAME = \"/usr/share/snmp/mibs/PWT_3Phase_MIBv1_v2.10.mib\"\n\nMIB = {\n    \"moduleName\" : \"PWTv1-MIB\",\n\n    \"PWTv1-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RFC-1215\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"powertek\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610\",\n        }, # node\n        \"product\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1\",\n        }, # node\n        \"pdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4\",\n        }, # node\n        \"pwt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4\",\n        }, # node\n        \"pduObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1\",\n        }, # node\n        \"pduIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.1\",\n        }, # node\n        \"pduIdentAgentSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware version of the device.\"\"\",\n        }, # scalar\n        \"pduIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A Model of this device.\"\"\",\n        }, # scalar\n        \"pduNetwork\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2\",\n        }, # node\n        \"pduNetworkTcpip\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1\",\n        }, # node\n        \"pduNetworkTcpipDhcpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable DHCP protocol\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2\",\n        }, # node\n        \"pduNetworkTcpipIpv4Address\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The ip address that NMS can identify the managed device.\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv4Gateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default gateway that allow device managed through routers.\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv4Subnet\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet address subnet mask\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv4PrimaryDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet address of Primary DNS Server\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv4SecondaryDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet address of Secondary DNS\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3\",\n        }, # node\n        \"pduNetworkTcpipIpv6Control\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable IPv6 protocol\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6AutoConfig\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IPv6 Auto-config or Maual setting\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6Address\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ipv6 address that NMS can identify the managed device.\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6Prefix\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The prefix length for ipv6 address.\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6Router\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The default gateway that allow device managed through routers.\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6PrimaryDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet address of Primary DNS Server\"\"\",\n        }, # scalar\n        \"pduNetworkTcpipIpv6SecondaryDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet address of Secondary DNS\"\"\",\n        }, # scalar\n        \"pduNetworkSecurity\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2\",\n        }, # node\n        \"pduNetworkSecurityControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable Network Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySsh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.2\",\n        }, # node\n        \"pduNetworkSecuritySshControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable SSH Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySshInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"oneMinute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tenMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Detecting Interval of SSH Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySshFailTimes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"five\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ten\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twenty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hundred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unsuccessful attempts of SSH Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySshBlock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"oneHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"oneDay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Block Time of SSH Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySnmp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.3\",\n        }, # node\n        \"pduNetworkSecuritySnmpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable SNMP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySnmpInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"oneMinute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tenMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Detecting Interval of SNMP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySnmpFailTimes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"five\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ten\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twenty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hundred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unsuccessful attempts of SNMP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecuritySnmpBlock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"oneHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"oneDay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Block Time of SNMP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecurityHttp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.4\",\n        }, # node\n        \"pduNetworkSecurityHttpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable HTTP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecurityHttpInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"oneMinute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tenMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Detecting Interval of HTTP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecurityHttpFailTimes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"five\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ten\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twenty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hundred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unsuccessful attempts of HTTP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkSecurityHttpBlock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fiveMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"thirtyMinutes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"oneHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"oneDay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Block Time of HTTP Access Protection\"\"\",\n        }, # scalar\n        \"pduNetworkService\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3\",\n        }, # node\n        \"pduNetworkServiceSsh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.1\",\n        }, # node\n        \"pduNetworkServiceSshControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable SSH Server Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceSshPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Port Number of SSH Server Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceSsl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.2\",\n        }, # node\n        \"pduNetworkServiceSslControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable HTTPs Server Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceSslPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Port Number of HTTPs Server Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceSslForce\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Force use HTTPs Server Service only.\"\"\",\n        }, # scalar\n        \"pduNetworkServicePingControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable to response to PING request.\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadius\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4\",\n        }, # node\n        \"pduNetworkServiceRadiusControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable RADIUS Client Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadiusIp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP Address of RADIUS Client Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadiusPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Port Number of RADIUS Client Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadiusSecretKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Secret Key of RADIUS Client Service\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadiusTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Timeout Interval of RADIUS Client Service in seconds\"\"\",\n        }, # scalar\n        \"pduNetworkServiceRadiusRetry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.2.3.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Retry Times of RADIUS Client Service\"\"\",\n        }, # scalar\n        \"pduSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3\",\n        }, # node\n        \"pduSystemName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of system.\"\"\",\n        }, # scalar\n        \"pduSystemContact\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contact of system.\"\"\",\n        }, # scalar\n        \"pduSystemLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of system.\"\"\",\n        }, # scalar\n        \"pduSystemLogInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Log Interval of device\"\"\",\n        }, # scalar\n        \"pduSystemWebRefresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"3\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"3\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Web Refresh Interval of device\"\"\",\n        }, # scalar\n        \"pduSystemTime\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6\",\n        }, # node\n        \"pduSystemTimeDisplay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date/time in agent\"\"\",\n        }, # scalar\n        \"pduSystemTimeZone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"gMT-1200InternationalDateLineWest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gMT-1200Eniwetok-Kwajalein\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"gMT-1100MidwayIsland-Samoa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"gMT-1000Hawaii\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"gMT-0900Alaska\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"gMT-0800PacificTime-Tijuana\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"gMT-0700Arizona-MountainTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"gMT-0700Chihuahua-LaPaz-Mazatlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"gMT-0700MountainTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"gMT-0600CentralAmerica\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"gMT-0600CentralTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"gMT-0600Guadalajara-MexicoCity-Monterrey\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"gMT-0600Saskatchewan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"gMT-0500Bogota-Lima-Quito\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"gMT-0500EasternTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"gMT-0500Indiana\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"gMT-0400AtlanticTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"gMT-0400Caracas-LaPaz\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"gMT-0400Santiago\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"gMT-0330Newfoundland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"gMT-0300Brasilia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"gMT-0300BuenosAires-Georgetown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"gMT-0300Greenland\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"gMT-0200Mid-Atlantic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"gMT-0100Azores\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"gMT-0100CapeVerdeIs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"gMT-0000Casablanca-Monrovia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"gMT-0000GreenwichMeanTime-Dublin-Edinburgh-Lisbon-London\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"gMT0100Amsterdam-Berlin-Bern-Rome-Stockholm-Vienna\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"gMT0100Belgrade-Bratislava-Budapest-Ljubljana-Prague\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"gMT0100Brussels-Copenhagen-Madrid-Paris\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"gMT0100Sarajevo-Skopje-Warsaw-Zagreb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"gMT0100WestCentralAfrica\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"gMT0200Athens-Istanbul-Minsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"gMT0200Bucharest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"gMT0200Cairo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"gMT0200Harare-Pretoria\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"37\"\n                    },\n                    \"gMT0200Helsinki-Kyiv-Riga-Sofia-Tallinn-Vilnius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"38\"\n                    },\n                    \"gMT0200Jerusalem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"39\"\n                    },\n                    \"gMT0300Baghdad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"gMT0300Kuwait-Riyadh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"gMT0300Moscow-StPetersburg-Volgograd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"42\"\n                    },\n                    \"gMT0300Nairobi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"43\"\n                    },\n                    \"gMT0330Tehran\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"44\"\n                    },\n                    \"gMT0400AbuDhabi-Muscat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"45\"\n                    },\n                    \"gMT0400Baku-Tbilisi-Yerevan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"46\"\n                    },\n                    \"gMT0430Kabul\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"47\"\n                    },\n                    \"gMT0500Ekaterinburg\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"gMT0500Islamabad-Karachi-Tashkent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"49\"\n                    },\n                    \"gMT0530Bombay-Calcutta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"gMT0530Chennai-Kolkata-Mumbai-NewDelhi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"gMT0545Kathmandu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"gMT0600Almaty-Novosibirsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"gMT0600Astana-Dhaka\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"54\"\n                    },\n                    \"gMT0600SriJayawardenepura\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"55\"\n                    },\n                    \"gMT0630Rangoon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"56\"\n                    },\n                    \"gMT0700Bangkok-Hanoi-Jakarta\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"57\"\n                    },\n                    \"gMT0700Krasnoyarsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"58\"\n                    },\n                    \"gMT0800Beijing-Chongqing-HongKong-Urumqi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"59\"\n                    },\n                    \"gMT0800Irkutsk-UlaanBataar\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"gMT0800KualaLumpur-Singapore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"61\"\n                    },\n                    \"gMT0800Perth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"62\"\n                    },\n                    \"gMT0800Taipei\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"63\"\n                    },\n                    \"gMT0900Osaka-Sapporo-Tokyo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"64\"\n                    },\n                    \"gMT0900Seoul\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"65\"\n                    },\n                    \"gMT0900Yakutsk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"66\"\n                    },\n                    \"gMT0930Adelaide\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"67\"\n                    },\n                    \"gMT0930Darwin\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"68\"\n                    },\n                    \"gMT1000Brisbane\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"69\"\n                    },\n                    \"gMT1000Canberra-Melbourne-Sydney\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"70\"\n                    },\n                    \"gMT1000Guam-PortMoresby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"71\"\n                    },\n                    \"gMT1000Hobart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"gMT1000Vladivostok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"73\"\n                    },\n                    \"gMT1100Magadan-SolomonIs-NewCaledonia\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"74\"\n                    },\n                    \"gMT1200Auckland-Wellington\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"75\"\n                    },\n                    \"gMT1200Fiji-Kamchatka-MarshallIs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"76\"\n                    },\n                    \"gMT1300NukuAlofa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"77\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time Zone to use when synchronize with NTP server.\"\"\",\n        }, # scalar\n        \"pduSystemTimeFormat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ddmmyyyy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mmddyyyy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"yyyymmdd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Date Format\"\"\",\n        }, # scalar\n        \"pduSystemTimeSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"twentyFourHrFormat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"twelveHrFormat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time Setting\"\"\",\n        }, # scalar\n        \"pduSystemTimeDayLightSaving\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the Day Light Saving when synchronize with NTP server.\"\"\",\n        }, # scalar\n        \"pduSystemTimeManual\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.6\",\n        }, # node\n        \"pduSystemTimeManualDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The date in agent, format is (dd/mm/yyyy)\"\"\",\n        }, # scalar\n        \"pduSystemTimeManualTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in agent, format is (hh:mm:ss)\"\"\",\n        }, # scalar\n        \"pduSystemTimeNtp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.7\",\n        }, # node\n        \"pduSystemTimeNtpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the agent to synchronize date/time with NTP server.\"\"\",\n        }, # scalar\n        \"pduSystemTimeNtpServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The ip address of NTP server.\"\"\",\n        }, # scalar\n        \"pduSystemTimeNtpSyncInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Sync Interval with NTP server.\"\"\",\n        }, # scalar\n        \"pduSystemTimeNtpSyncUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.6.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"day\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Unit of Sync Interval\"\"\",\n        }, # scalar\n        \"pduSystemResetToDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the parameter of PDU to default.\"\"\",\n        }, # scalar\n        \"pduSystemReboot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reboot the system of PDU.\"\"\",\n        }, # scalar\n        \"pduSNMP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4\",\n        }, # node\n        \"pduSnmpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable SNMP protocol.\"\"\",\n        }, # scalar\n        \"pduSnmpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UDP port for SNMP.\"\"\",\n        }, # scalar\n        \"pduSnmpVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"v1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"v2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"v3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set SNMP version.\"\"\",\n        }, # scalar\n        \"pduSnmpTrapsReceiversTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of managers to send traps to.  The number of\nentries is given by the value of pduSnmpNumTrapReceivers\"\"\",\n        }, # table\n        \"pduSnmpTrapsReceiversEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"trapsIndex\",\n            ],\n            \"description\" :\n                \"\"\"The managers to send traps to.\"\"\",\n        }, # row\n        \"trapsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to a trap receiver entry.\"\"\",\n        }, # column\n        \"trapsReceiverAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the manager to send a trap to.\"\"\",\n        }, # column\n        \"receiverEventLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The severity level of traps to be received by this manager.\"\"\",\n        }, # column\n        \"receiverSnmpVer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"v1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"v2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"v3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SNMP Trap version of trap receivers.\"\"\",\n        }, # column\n        \"receiverDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of trap receivers\"\"\",\n        }, # column\n        \"pduEmail\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5\",\n        }, # node\n        \"pduEmailServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The address of Email server.\"\"\",\n        }, # scalar\n        \"pduEmailPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UDP port for Email Server.\"\"\",\n        }, # scalar\n        \"pduEmailSenderEmail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sender's Email address\"\"\",\n        }, # scalar\n        \"pduEmailPrefix\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The prefix string of mail subject\"\"\",\n        }, # scalar\n        \"pduEmailAuthControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable SMTP Authentication.\"\"\",\n        }, # scalar\n        \"pduEmailAuthUsername\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user name of SMTP Authentication\"\"\",\n        }, # scalar\n        \"pduEmailAuthPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The password of SMTP Authentication\"\"\",\n        }, # scalar\n        \"pduEmailReceiversTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of managers to send email notification to.\"\"\",\n        }, # table\n        \"pduEmailReceiversEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"mailRecvIndex\",\n            ],\n            \"description\" :\n                \"\"\"The managers to send email notification to.\"\"\",\n        }, # row\n        \"mailRecvIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to a email notification receiver entry.\"\"\",\n        }, # column\n        \"mailRecvReceiverAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Email address of the manager to send a email notification to.\"\"\",\n        }, # column\n        \"mailRecvEmailType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"events\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"status\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"both\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Email Type of email notification receivers.\"\"\",\n        }, # column\n        \"mailRecvEventLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The severity level of email notification to be received by this manager.\"\"\",\n        }, # column\n        \"mailRecvDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.5.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of email notification receivers\"\"\",\n        }, # column\n        \"pduPwrMonitoring\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6\",\n        }, # node\n        \"pduPwrMonitoringInlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1\",\n        }, # node\n        \"pduPwrMonitoringInletNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Inlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringInletStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of Inlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringInletStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"inletIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of Inlet.\"\"\",\n        }, # row\n        \"inletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to Inlet status entry.\"\"\",\n        }, # column\n        \"inletPowerAll\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The total power of inlet.\"\"\",\n        }, # column\n        \"inletResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of inlet.\"\"\",\n        }, # column\n        \"inletEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The total energy of inlet.\"\"\",\n        }, # column\n        \"inletStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Status of inlet power.\"\"\",\n        }, # column\n        \"inletCurrPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase1b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase2b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase3b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase1b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase2b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase3b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase1 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase2 current of inlet.\"\"\",\n        }, # column\n        \"inletCurrPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The phase3 current of inlet.\"\"\",\n        }, # column\n        \"inletVoltPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The phase1 voltage of inlet.\"\"\",\n        }, # column\n        \"inletVoltPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The phase2 voltage of inlet.\"\"\",\n        }, # column\n        \"inletVoltPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The phase3 voltage of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase1b1 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase2b1 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase3b1 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase1b2 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase2b2 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPwrFactorPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The phase3b2 power factor of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1b1 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2b1 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3b1 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1b2 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2b2 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3b2 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2 active power of inlet.\"\"\",\n        }, # column\n        \"inletPowerPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3 active power of inlet.\"\"\",\n        }, # column\n        \"inletStatusPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase1 status of inlet.\"\"\",\n        }, # column\n        \"inletStatusPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase2 status of inlet.\"\"\",\n        }, # column\n        \"inletStatusPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase3 status of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1b1 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2b1 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3b1 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1b2 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2b2 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3b2 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase1 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase2 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppPowerPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The phase3 apparent power of inlet.\"\"\",\n        }, # column\n        \"inletAppRcmCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1mA\",\n            \"description\" :\n                \"\"\"The RCM leackage current of inlet.\"\"\",\n        }, # column\n        \"inletLoadBalance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"1%\",\n            \"description\" :\n                \"\"\"The load balance of inlet.\"\"\",\n        }, # column\n        \"inletLoadBalanceStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The load balance of status inlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringInletCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to configure thresholds of inlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringInletCfgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"inletCfgIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to configure thresholds of inlet.\"\"\",\n        }, # row\n        \"inletCfgIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to inlet configuration entry.\"\"\",\n        }, # column\n        \"inletCfgLoadCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1kW\",\n            \"description\" :\n                \"\"\"The Critical Threshold of inlet load.\"\"\",\n        }, # column\n        \"inletCfgLoadWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1kW\",\n            \"description\" :\n                \"\"\"The Warning Threshold of inlet load.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse1b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse2b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse3b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse1b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse2b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrCritPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse3b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase1b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse1b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase2b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse2b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase3b1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse3b1 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase1b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse1b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase2b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse2b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgCurrWarnPhase3b2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse3b2 current of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltCritPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse1 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltCritPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse2 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltCritPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse3 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltWarnPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse1 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltWarnPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse2 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgVoltWarnPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse3 voltage of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrCritPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse1 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrCritPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse2 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrCritPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of pahse3 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrWarnPhase1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse1 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrWarnPhase2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse2 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgTotalCurrWarnPhase3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of pahse3 total current of inlet.\"\"\",\n        }, # column\n        \"inletCfgRcmCurrThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1mA\",\n            \"description\" :\n                \"\"\"The RCM Alarm threshold of inlet.\"\"\",\n        }, # column\n        \"inletCfgLoadBalanceCrit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1%\",\n            \"description\" :\n                \"\"\"The Critical Threshold of load balance of inlet.\"\"\",\n        }, # column\n        \"inletCfgLoadBalanceWarn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.1.3.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1%\",\n            \"description\" :\n                \"\"\"The Warning Threshold of load balance of inlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2\",\n        }, # node\n        \"pduPwrMonitoringOutletPduA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduA Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduA\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduA outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduAIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduA outlet.\"\"\",\n        }, # row\n        \"outletPduAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduA.\"\"\",\n        }, # column\n        \"outletPduAState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduACurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduA outlet.\"\"\",\n        }, # column\n        \"outletPduAVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduA outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduA\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduA outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduAIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduA outlet.\"\"\",\n        }, # row\n        \"outletCfgPduAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduA.\"\"\",\n        }, # column\n        \"outletCfgPduAName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduA.\"\"\",\n        }, # column\n        \"outletCfgPduADelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduADelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduADelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduADelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduAReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduAOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduAOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduAOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduA outlet.\"\"\",\n        }, # column\n        \"outletCfgPduAOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduA outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduA\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduA outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduAIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduA outlet.\"\"\",\n        }, # row\n        \"outletCtlPduAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduA.\"\"\",\n        }, # column\n        \"outletCtlPduAControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduA outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduB\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduB Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduB\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduB outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduBEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduBIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduB outlet.\"\"\",\n        }, # row\n        \"outletPduBIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduB.\"\"\",\n        }, # column\n        \"outletPduBState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduB outlet.\"\"\",\n        }, # column\n        \"outletPduBVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduB outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduB\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduB outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduBEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduBIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduB outlet.\"\"\",\n        }, # row\n        \"outletCfgPduBIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduB.\"\"\",\n        }, # column\n        \"outletCfgPduBName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduB.\"\"\",\n        }, # column\n        \"outletCfgPduBDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduB outlet.\"\"\",\n        }, # column\n        \"outletCfgPduBOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduB outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduB\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduB outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduBEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduBIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduB outlet.\"\"\",\n        }, # row\n        \"outletCtlPduBIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduB.\"\"\",\n        }, # column\n        \"outletCtlPduBControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduB outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduC Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduC\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduC outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduCEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduCIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduC outlet.\"\"\",\n        }, # row\n        \"outletPduCIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduC.\"\"\",\n        }, # column\n        \"outletPduCState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduC outlet.\"\"\",\n        }, # column\n        \"outletPduCVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduC outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduC\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduC outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduCEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduCIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduC outlet.\"\"\",\n        }, # row\n        \"outletCfgPduCIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduC.\"\"\",\n        }, # column\n        \"outletCfgPduCName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduC.\"\"\",\n        }, # column\n        \"outletCfgPduCDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduC outlet.\"\"\",\n        }, # column\n        \"outletCfgPduCOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduC outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduC\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduC outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduCEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduCIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduC outlet.\"\"\",\n        }, # row\n        \"outletCtlPduCIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduC.\"\"\",\n        }, # column\n        \"outletCtlPduCControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduC outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduD Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduD\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduD outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduDIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduD outlet.\"\"\",\n        }, # row\n        \"outletPduDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduD.\"\"\",\n        }, # column\n        \"outletPduDState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduD outlet.\"\"\",\n        }, # column\n        \"outletPduDVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduD outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduD\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduD outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduDIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduD outlet.\"\"\",\n        }, # row\n        \"outletCfgPduDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduD.\"\"\",\n        }, # column\n        \"outletCfgPduDName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduD.\"\"\",\n        }, # column\n        \"outletCfgPduDDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduD outlet.\"\"\",\n        }, # column\n        \"outletCfgPduDOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduD outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduD\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduD outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduDIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduD outlet.\"\"\",\n        }, # row\n        \"outletCtlPduDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduD.\"\"\",\n        }, # column\n        \"outletCtlPduDControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduD outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduE\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduE\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduE Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduE\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduE outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduEEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduEIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduE outlet.\"\"\",\n        }, # row\n        \"outletPduEIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduE.\"\"\",\n        }, # column\n        \"outletPduEState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduECurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduE outlet.\"\"\",\n        }, # column\n        \"outletPduEVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduE outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduE\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduE outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduEEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduEIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduE outlet.\"\"\",\n        }, # row\n        \"outletCfgPduEIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduE.\"\"\",\n        }, # column\n        \"outletCfgPduEName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduE.\"\"\",\n        }, # column\n        \"outletCfgPduEDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduE outlet.\"\"\",\n        }, # column\n        \"outletCfgPduEOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduE outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduE\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduE outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduEEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduEIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduE outlet.\"\"\",\n        }, # row\n        \"outletCtlPduEIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduE.\"\"\",\n        }, # column\n        \"outletCtlPduEControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduE outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduF\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduF Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduF\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduF outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduFEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduFIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduF outlet.\"\"\",\n        }, # row\n        \"outletPduFIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduF.\"\"\",\n        }, # column\n        \"outletPduFState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduF outlet.\"\"\",\n        }, # column\n        \"outletPduFVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduF outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduF\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduF outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduFEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduFIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduF outlet.\"\"\",\n        }, # row\n        \"outletCfgPduFIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduF.\"\"\",\n        }, # column\n        \"outletCfgPduFName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduF.\"\"\",\n        }, # column\n        \"outletCfgPduFDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduF outlet.\"\"\",\n        }, # column\n        \"outletCfgPduFOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduF outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduF\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduF outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduFEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduFIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduF outlet.\"\"\",\n        }, # row\n        \"outletCtlPduFIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduF.\"\"\",\n        }, # column\n        \"outletCtlPduFControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.6.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduF outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduG\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduG\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduG Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduG\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduG outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduGEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduGIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduG outlet.\"\"\",\n        }, # row\n        \"outletPduGIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduG.\"\"\",\n        }, # column\n        \"outletPduGState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduG outlet.\"\"\",\n        }, # column\n        \"outletPduGVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduG outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduG\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduG outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduGEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduGIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduG outlet.\"\"\",\n        }, # row\n        \"outletCfgPduGIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduG.\"\"\",\n        }, # column\n        \"outletCfgPduGName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduG.\"\"\",\n        }, # column\n        \"outletCfgPduGDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduG outlet.\"\"\",\n        }, # column\n        \"outletCfgPduGOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduG outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduG\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduG outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduGEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduGIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduG outlet.\"\"\",\n        }, # row\n        \"outletCtlPduGIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduG.\"\"\",\n        }, # column\n        \"outletCtlPduGControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.7.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduG outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletPduH\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8\",\n        }, # node\n        \"pduPwrMonitoringOutletNumPduH\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of PduH Outlet.\"\"\",\n        }, # scalar\n        \"pduPwrMonitoringOutletStatusTablePduH\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of PduH outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletStatusPduHEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletPduHIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of PduH outlet.\"\"\",\n        }, # row\n        \"outletPduHIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet status of PduH.\"\"\",\n        }, # column\n        \"outletPduHState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.01A\",\n            \"description\" :\n                \"\"\"The current of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHPwrFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The power factor of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The active power of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"KWh\",\n            \"description\" :\n                \"\"\"The energy of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHResetFrom\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reset date of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHAppPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1W\",\n            \"description\" :\n                \"\"\"The apparent power of PduH outlet.\"\"\",\n        }, # column\n        \"outletPduHVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1V\",\n            \"description\" :\n                \"\"\"The voltage of PduH outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCfgTablePduH\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configuration of PduH outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCfgPduHEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCfgPduHIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configuration of PduH outlet.\"\"\",\n        }, # row\n        \"outletCfgPduHIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet configuration of PduH.\"\"\",\n        }, # column\n        \"outletCfgPduHName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name for outlet of PduH.\"\"\",\n        }, # column\n        \"outletCfgPduHDelayOnStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay On status of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHDelayOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On time of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHDelayOffStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nodelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay Off status of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHDelayOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay Off time of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHReboot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The Delay On reboot duration of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHOverCurrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Critical Threshold of current of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHOverCurrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1A\",\n            \"description\" :\n                \"\"\"The Warning Threshold of current of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHOverPwrCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Critical Threshold of power of PduH outlet.\"\"\",\n        }, # column\n        \"outletCfgPduHOverPwrWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"1W\",\n            \"description\" :\n                \"\"\"The Warning Threshold of power of PduH outlet.\"\"\",\n        }, # column\n        \"pduPwrMonitoringOutletCtlTablePduH\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display control of PduH outlet.\"\"\",\n        }, # table\n        \"pduPwrMonitoringOutletCtlPduHEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"outletCtlPduHIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display control of PduH outlet.\"\"\",\n        }, # row\n        \"outletCtlPduHIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"41\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to outlet control of PduH.\"\"\",\n        }, # column\n        \"outletCtlPduHControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.6.2.8.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedCycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The control-type of PduH outlet.\"\"\",\n        }, # column\n        \"pduEnvMonitoring\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7\",\n        }, # node\n        \"pduEmdStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display status of EMD.\"\"\",\n        }, # table\n        \"pduEnvMonitoringStatus\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduEnvStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display status of EMD.\"\"\",\n        }, # row\n        \"pduEnvStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to EMD status entry.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumi\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature status of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidity status of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringAlarm1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm-1 status of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringAlarm2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm-2 status of EMD.\"\"\",\n        }, # column\n        \"pduEmdCfgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list to display configure of EMD.\"\"\",\n        }, # table\n        \"pduEnvMonitoringCfg\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"pduEnvCfgIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list to display configure of EMD.\"\"\",\n        }, # row\n        \"pduEnvCfgIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to EMD configure entry.\"\"\",\n        }, # column\n        \"pduEnvMonitoringControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the EMD alarm configuration.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The High Critical Threshold of temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The High Warning Threshold of temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The Low Critical Threshold of temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The Low Warning Threshold of temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempHystersis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The Hystersis of Temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringTempOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"degC\",\n            \"description\" :\n                \"\"\"The Offset of Temperature of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The High Crtitcal Threshold of humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The High Warning Threshold of humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The Low Crtitcal Threshold of humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The Low Warning Threshold of humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiHystersis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The Hystersis of Humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringHumiOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1%\",\n            \"description\" :\n                \"\"\"The Ofset of Humidity of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringAlarm1Setup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Alarm-1 setup of EMD.\"\"\",\n        }, # column\n        \"pduEnvMonitoringAlarm2Setup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.1.7.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Alarm-2 setup of EMD.\"\"\",\n        }, # column\n        \"pduTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"pduSystemColdBoot\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Cold boot.\"\"\",\n        }, # notification\n        \"pduSystemWarmBoot\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Warm boot.\"\"\",\n        }, # notification\n        \"pduSystemRestart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: System restart.\"\"\",\n        }, # notification\n        \"pduResetToDefault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Parameters reset to default.\"\"\",\n        }, # notification\n        \"pduFirmUpgrade\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Firmware upgrade.\"\"\",\n        }, # notification\n        \"pduSystemLogClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: System log cleared.\"\"\",\n        }, # notification\n        \"pduEventlogClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Event log cleared.\"\"\",\n        }, # notification\n        \"pduInletHistoryClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet history log cleared.\"\"\",\n        }, # notification\n        \"pduOutletHistoryClear\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet history log cleared.\"\"\",\n        }, # notification\n        \"pduSystemTimeChangeUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Time changed by user.\"\"\",\n        }, # notification\n        \"pduSystemTimeChangeNtp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Time synced with NTP server.\"\"\",\n        }, # notification\n        \"pduSystemTimeChangeRtc\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Time changed by RTC.\"\"\",\n        }, # notification\n        \"pduMailTestPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Test mail pass.\"\"\",\n        }, # notification\n        \"pduMailTestFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Test mail failed.\"\"\",\n        }, # notification\n        \"pduMailSentPass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Mail sent successfully.\"\"\",\n        }, # notification\n        \"pduMailSentFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Mail sent failed.\"\"\",\n        }, # notification\n        \"pduSystemCfgChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Parameter changed.\"\"\",\n        }, # notification\n        \"pduSystemParamImport\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Import XML configuration.\"\"\",\n        }, # notification\n        \"pduInletCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet communication lost.\"\"\",\n        }, # notification\n        \"pduInletCommRestore\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet communication restore.\"\"\",\n        }, # notification\n        \"pduOutletCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet communication lost.\"\"\",\n        }, # notification\n        \"pduOutletCommRestore\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet communication restore\"\"\",\n        }, # notification\n        \"pduOutletOnUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet turned on by user.\"\"\",\n        }, # notification\n        \"pduOutletOnSchedule\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet turned on by schedule.\"\"\",\n        }, # notification\n        \"pduOutletOffUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet turned off by user.\"\"\",\n        }, # notification\n        \"pduOutletOffSchedule\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet turned off by schedule.\"\"\",\n        }, # notification\n        \"pduOutletRebootUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet reboot by user.\"\"\",\n        }, # notification\n        \"pduOutletRebootSchedule\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet reboot by schedule.\"\"\",\n        }, # notification\n        \"pduInletEnergyReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet energy reset.\"\"\",\n        }, # notification\n        \"pduOutletEnergyReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet energy reset.\"\"\",\n        }, # notification\n        \"pduSetUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Assign outlet to user.\"\"\",\n        }, # notification\n        \"pduDeletUser\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Delete user.\"\"\",\n        }, # notification\n        \"pduUpgradeInletSuccess\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet upgrade successfully.\"\"\",\n        }, # notification\n        \"pduUpgradeInletFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet upgrade fail.\"\"\",\n        }, # notification\n        \"pduUpgradeOutletSuccess\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet upgrade successfully.\"\"\",\n        }, # notification\n        \"pduUpgradeOutletFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet upgrade fail.\"\"\",\n        }, # notification\n        \"pduEmdTempHighWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Temperature had returned from high warning to normal.\"\"\",\n        }, # notification\n        \"pduEmdTempHighWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.102\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Temperature was higher than high warning set point.\"\"\",\n        }, # notification\n        \"pduEmdTempLowWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.103\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Temperature had returned from low warning to normal.\"\"\",\n        }, # notification\n        \"pduEmdTempLowWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Temperature was lower than low warning set point.\"\"\",\n        }, # notification\n        \"pduEmdTempHighCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Temperature had returned from high critical to high warning.\"\"\",\n        }, # notification\n        \"pduEmdTempHighCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Temperature was higher than high critical set point.\"\"\",\n        }, # notification\n        \"pduEmdTempLowCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Temperature had returned from low critical to low warning.\"\"\",\n        }, # notification\n        \"pduEmdTempLowCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Temperature was lower than low critical set point.\"\"\",\n        }, # notification\n        \"pduEmdHumiHighWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Humidity had returned from high warning to normal.\"\"\",\n        }, # notification\n        \"pduEmdHumiHighWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Humidity was higher than high warning set point.\"\"\",\n        }, # notification\n        \"pduEmdHumiLowWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Humidity had returned from low warning to normal.\"\"\",\n        }, # notification\n        \"pduEmdHumiLowWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Humidity was lower than low warning set point.\"\"\",\n        }, # notification\n        \"pduEmdHumiHighCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Humidity had returned from high critical to high warning.\"\"\",\n        }, # notification\n        \"pduEmdHumiHighCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Humidity was higher than high critical set point.\"\"\",\n        }, # notification\n        \"pduEmdHumiLowCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Humidity had returned from low critical to low warning.\"\"\",\n        }, # notification\n        \"pduEmdHumiLowCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Humidity was lower than low critical set point.\"\"\",\n        }, # notification\n        \"pduEmdAlarm1NotActive\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Alarm-1 became inactive.\"\"\",\n        }, # notification\n        \"pduEmdAlarm1Active\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Alarm-1 became active.\"\"\",\n        }, # notification\n        \"pduEmdAlarm2NotActive\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Alarm-2 became inactive.\"\"\",\n        }, # notification\n        \"pduEmdAlarm2Active\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Alarm-2 became active.\"\"\",\n        }, # notification\n        \"pduRs485Online\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: RS485 Sensor was online.\"\"\",\n        }, # notification\n        \"pduRs485Offline\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: RS485 Sensor was offline.\"\"\",\n        }, # notification\n        \"pduInletLoadCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet load had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletLoadCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet load was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletLoadWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet load had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletLoadWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet load was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase1CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase1 current had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase1Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase1 current was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase1WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase1 current had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase1Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase1 current was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase2CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase2 current had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase2Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase2 current was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase2WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase2 current had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase2Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.134\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase2 current was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase3CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.135\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase3 current had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase3Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.136\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase3 current was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase3WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.137\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase3 current had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletCurrPhase3Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.138\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase3 current had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase1CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.139\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase1 voltage had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase1Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.140\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase1 voltage was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase1WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.141\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase1 voltage had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase1Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.142\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase1 voltage was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase2CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.143\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase2 voltage had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase2Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.144\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase2 voltage was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase2WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.145\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase2 voltage had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase2Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.146\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase2 voltage was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase3CritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.147\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase3 voltage had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase3Critical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.148\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet phase3 voltage was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase3WarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.149\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet phase3 voltage had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletVoltPhase3Warn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.150\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet phase3 voltage was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduOutletCurrCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.151\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet current had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduOutletCurrCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.152\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Outlet current was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduOutletCurrWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet current had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduOutletCurrWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Outlet current was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduOutletPwrCritTOWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet power had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduOutletPwrCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Outlet power was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduOutletPwrWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Outlet power had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduOutletPwrWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Outlet power was higher than warning set point.\"\"\",\n        }, # notification\n        \"pduAlarm1Disabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Alarm-1 became disabled.\"\"\",\n        }, # notification\n        \"pduAlarm2Disabled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Alarm-2 became disabled.\"\"\",\n        }, # notification\n        \"pduIntetResidualCurrect1Occured\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet Residual current occurred.\"\"\",\n        }, # notification\n        \"pduIntetResidualCurrect1Remove\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet Residual current removed.\"\"\",\n        }, # notification\n        \"pduInletLoadBalanceCritToWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet load balance had returned from critical to warning.\"\"\",\n        }, # notification\n        \"pduInletLoadBalanceCritical\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Critical: Inlet load balance was higher than critical set point.\"\"\",\n        }, # notification\n        \"pduInletLoadBalanceWarnToNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Informational: Inlet load balance had returned from warning to normal.\"\"\",\n        }, # notification\n        \"pduInletLoadBalanceWarn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PWTv1-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.42610.1.4.4.2.0.166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Warning: Inlet load balance was higher than warning set point.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/PowerNet-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python PowerNet-MIB\n\nFILENAME = \"powernet.mib\"\n\nMIB = {\n    \"moduleName\" : \"PowerNet-MIB\",\n\n    \"PowerNet-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Gauge\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"typedefs\" : {\n        \"Rpdu2OutletPhaseLayoutType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"seqPhase1ToNeutral\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"seqPhase2ToNeutral\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"seqPhase3ToNeutral\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"seqPhase1ToPhase2\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"seqPhase2ToPhase3\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n            \"seqPhase3ToPhase1\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"6\"\n            },\n        },\n        \"AirIRSCConfigType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"racs\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"spot\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"in-row\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n        },\n        \"AirIRSCCapacityControlType\" : {\n            \"basetype\" : \"Enumeration\",\n            \"discrete\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"proportional\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRSCFanSpeedPreference\" : {\n            \"basetype\" : \"Enumeration\",\n            \"low\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"med-low\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n            \"med\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"3\"\n            },\n            \"med-high\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"4\"\n            },\n            \"high\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"5\"\n            },\n        },\n        \"AirIRSCFanSpeedControl\" : {\n            \"basetype\" : \"Enumeration\",\n            \"automatic\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"manual\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRG2RDType2IOState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"open\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"closed\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRmAlarmState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"ok\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"alarm\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRmControlState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"off\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"on\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRmStopState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"maybeOn\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"unitOff\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n        \"AirIRmActivityState\" : {\n            \"basetype\" : \"Enumeration\",\n            \"inactive\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"1\"\n            },\n            \"active\" : {\n                \"nodetype\" : \"namednumber\",\n                \"number\" : \"2\"\n            },\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"apc\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1\",\n        }, # node\n        \"hardware\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1\",\n        }, # node\n        \"ups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1\",\n        }, # node\n        \"upsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1\",\n        }, # node\n        \"upsBasicIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.1\",\n        }, # node\n        \"upsBasicIdentModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS model name (e.g. 'APC Smart-UPS 600').\"\"\",\n        }, # scalar\n        \"upsBasicIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An 8 byte ID string identifying the UPS.  This object\ncan be set by the administrator.\"\"\",\n        }, # scalar\n        \"upsAdvIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2\",\n        }, # node\n        \"upsAdvIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the UPS system's microprocessor.\"\"\",\n        }, # scalar\n        \"upsAdvIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the UPS was manufactured in mm/dd/yy (or yyyy) format.\"\"\",\n        }, # scalar\n        \"upsAdvIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An 8-character string identifying the serial number of \nthe UPS internal microprocessor.  This number is set at\nthe factory.  NOTE: This number does NOT correspond to\nthe serial number on the rear of the UPS.\"\"\",\n        }, # scalar\n        \"upsAdvIdentFirmwareRevision2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of a UPS system co-microprocessor.\"\"\",\n        }, # scalar\n        \"upsAdvIdentSkuNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The SKU number of a UPS system.\"\"\",\n        }, # scalar\n        \"upsBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2\",\n        }, # node\n        \"upsBasicBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.1\",\n        }, # node\n        \"upsBasicBatteryStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batteryLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the UPS batteries.  A batteryLow(3) \nvalue indicates the UPS will be unable to sustain the \ncurrent load, and its services will be lost if power is \nnot restored.  The amount of run time in reserve at the \ntime of low battery can be configured by the \nupsAdvConfigLowBatteryRunTime.\"\"\",\n        }, # scalar\n        \"upsBasicBatteryTimeOnBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The elapsed time since the UPS has switched to battery \npower.\"\"\",\n        }, # scalar\n        \"upsBasicBatteryLastReplaceDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The date when the UPS system's batteries were last replaced \nin mm/dd/yy (or yyyy) format.  For Smart-UPS models, this value \nis originally set in the factory.  When the UPS batteries \nare replaced, this value should be reset by the administrator.\"\"\",\n        }, # scalar\n        \"upsAdvBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2\",\n        }, # node\n        \"upsAdvBatteryCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remaining battery capacity expressed in \npercent of full capacity.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current internal UPS temperature expressed in \nCelsius.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryRunTimeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS battery run time remaining before battery \nexhaustion.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryReplaceIndicator\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noBatteryNeedsReplacing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryNeedsReplacing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether the UPS batteries need replacing.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryNumOfBattPacks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of external battery packs connected to the UPS. If\nthe UPS does not use smart cells then the agent reports\nERROR_NO_SUCH_NAME.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryNumOfBadBattPacks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of external battery packs connected to the UPS that \nare defective. If the UPS does not use smart cells then the\nagent reports ERROR_NO_SUCH_NAME.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal battery voltage in Volts.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryActualVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery bus voltage in Volts.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery current in Amps.\"\"\",\n        }, # scalar\n        \"upsAdvTotalDCCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total DC current in Amps.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryFullCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The full chargeable capacity of the battery which is\nexpressed in percentage.\"\"\",\n        }, # scalar\n        \"upsAdvBatteryActualVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of battery table entries. The number of battery\nframes present in UPS.\"\"\",\n        }, # table\n        \"upsAdvBatteryActualVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAdvBatteryActualVoltageTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information applicable to \neach of the Battery frames.\"\"\",\n        }, # row\n        \"upsAdvBatteryActualVoltageTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Frame identifier. Battery Frame index.\"\"\",\n        }, # column\n        \"upsAdvBatteryActualVoltagePolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery Voltage Polarity.\n0 indicates positive polarity.\n1 indicates negative polarity.\"\"\",\n        }, # column\n        \"upsAdvBatteryFrameActualVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery bus voltage in Volts.\"\"\",\n        }, # column\n        \"upsAdvTotalDCCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Battery Frame table entries.  The number of entries\nis given by the value of Number of Battery Frames.\"\"\",\n        }, # table\n        \"upsAdvTotalDCCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAdvTotalDCCurrentTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular Battery Frame.\"\"\",\n        }, # row\n        \"upsAdvTotalDCCurrentTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Frame identifier. Total DC Current\nTable Index.\"\"\",\n        }, # column\n        \"upsAdvTotalDCCurrentPolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery Current Polarity.\n0 indicates positive polarity.\n1 indicates negative polarity.\"\"\",\n        }, # column\n        \"upsAdvTotalFrameDCCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The Total DC Current of battery in Amperes.\"\"\",\n        }, # column\n        \"upsAdvBatteryCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Battery Frame table entries.  The number of entries\nis given by number of Battery frames present.\"\"\",\n        }, # table\n        \"upsAdvBatteryCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAdvBatteryCurrentTableIndex\",\n                \"upsAdvBatteryCurrentIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular battery frame.\"\"\",\n        }, # row\n        \"upsAdvBatteryCurrentTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Frame identifier. Battery Current\nTable Index.\"\"\",\n        }, # column\n        \"upsAdvBatteryCurrentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery frame identifier.\"\"\",\n        }, # column\n        \"upsAdvBatteryCurrentPolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery current polarity.\n0 indicates positive polarity.\n1 indicates negative polarity\"\"\",\n        }, # column\n        \"upsAdvBatteryFrameCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.2.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery current measured in Amperes\"\"\",\n        }, # column\n        \"upsHighPrecBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3\",\n        }, # node\n        \"upsHighPrecBatteryCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remaining battery capacity expressed in \ntenths of percent of full capacity.\"\"\",\n        }, # scalar\n        \"upsHighPrecBatteryTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current internal UPS temperature expressed in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"upsHighPrecBatteryNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal battery voltage in tenths of Volts.\"\"\",\n        }, # scalar\n        \"upsHighPrecBatteryActualVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery bus voltage in tenths of Volts.\"\"\",\n        }, # scalar\n        \"upsHighPrecBatteryCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery current in tenths of Amps.\"\"\",\n        }, # scalar\n        \"upsHighPrecTotalDCCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total DC current in tenths of Amps.\"\"\",\n        }, # scalar\n        \"upsHighPrecBatteryActualVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Battery frame table entries.  The number of entries\nis given by the number of Battery frames.\"\"\",\n        }, # table\n        \"upsHighPrecBatteryActualVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsHighPrecBatteryActualVoltageTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular battery frame.\"\"\",\n        }, # row\n        \"upsHighPrecBatteryActualVoltageTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Frame identifier. High Precision\nActual Voltage Table Index.\"\"\",\n        }, # column\n        \"upsHighPrecBatteryActualVoltagePolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery Voltage polarity.\n0 indicates positive polarity.\n1 indicates negative polarity.\"\"\",\n        }, # column\n        \"upsHighPrecBatteryVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual battery bus voltage expressed\nas tenths of Volts. \"\"\",\n        }, # column\n        \"upsHighPrecTotalDCCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Battery Frame table entries.  The number of entries\nis given by the number of battery frames.\"\"\",\n        }, # table\n        \"upsHighPrecTotalDCCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsHighPrecTotalDCCurrentTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular battery frame.\"\"\",\n        }, # row\n        \"upsHighPrecTotalDCCurrentTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery Frame identifier.\nHigh precision Total DC Current index.\"\"\",\n        }, # column\n        \"upsHighPrecTotalDCCurrentPolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery Current polarity.\n0 indicates positive polarity.\n1 indicates negative polarity.\"\"\",\n        }, # column\n        \"upsHighPrecTotalDCFrameCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total DC current in tenths of Amperes. \"\"\",\n        }, # column\n        \"upsHighPrecBatteryCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Battery Frame table entries.  The number of entries\nis given by the number of battery frames.\"\"\",\n        }, # table\n        \"upsHighPrecBatteryCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsHighPrecBatteryCurrentTableIndex\",\n                \"upsHighPrecBatteryCurrentIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular battery frame.\"\"\",\n        }, # row\n        \"upsHighPrecBatteryCurrentTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery frame identifier.\nBattery Frame index.\"\"\",\n        }, # column\n        \"upsHighPrecBatteryCurrentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery frame identifier.\nBattery Index for each frame.\"\"\",\n        }, # column\n        \"upsHighPrecBatteryCurrentPolarity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"positive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"negative\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The selected Battery Current polarity.\n0 indicates positive polarity.\n1 indicates negative polarity.\"\"\",\n        }, # column\n        \"upsHighPrecBatteryFrameCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.2.3.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Battery current in tenths of Amperes.\"\"\",\n        }, # column\n        \"upsInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3\",\n        }, # node\n        \"upsBasicInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.1\",\n        }, # node\n        \"upsBasicInputPhase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current AC input phase.\"\"\",\n        }, # scalar\n        \"upsAdvInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2\",\n        }, # node\n        \"upsAdvInputLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current utility line voltage in VAC.\"\"\",\n        }, # scalar\n        \"upsAdvInputMaxLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum utility line voltage in VAC over the\nprevious 1 minute period.\"\"\",\n        }, # scalar\n        \"upsAdvInputMinLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum utility line voltage in VAC over the\nprevious 1 minute period.\"\"\",\n        }, # scalar\n        \"upsAdvInputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current input frequency to the UPS system in Hz.\"\"\",\n        }, # scalar\n        \"upsAdvInputLineFailCause\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTransfer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highLineVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"brownout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"blackout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"smallMomentarySag\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"deepMomentarySag\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"smallMomentarySpike\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"largeMomentarySpike\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"selfTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"rateOfVoltageChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reason for the occurrence of the last transfer to UPS\nbattery power.  The variable is set to:\n- noTransfer(1) -- if there is no transfer yet.\n- highLineVoltage(2) -- if the transfer to battery is caused\nby an over voltage greater than the high transfer voltage.\n- brownout(3) -- if the duration of the outage is greater than\nfive seconds and the line voltage is between 40% of the\nrated output voltage and the low transfer voltage.\n- blackout(4) -- if the duration of the outage is greater than five\nseconds and the line voltage is between 40% of the rated \noutput voltage and ground.\n- smallMomentarySag(5) -- if the duration of the outage is less\nthan five seconds and the line voltage is between 40% of the\nrated output voltage and the low transfer voltage.\n- deepMomentarySag(6) -- if the duration of the outage is less \nthan five seconds and the line voltage is between 40% of the \nrated output voltage and ground.  The variable is set to \n- smallMomentarySpike(7) -- if the line failure is caused by a\nrate of change of input voltage less than ten volts per cycle.\n- largeMomentarySpike(8) -- if the line failure is caused by \na rate of change of input voltage greater than ten volts per cycle.\n- selfTest(9) -- if the UPS was commanded to do a self test.\n- rateOfVoltageChange(10) -- if the failure is due to the rate of change of\nthe line voltage.\"\"\",\n        }, # scalar\n        \"upsAdvInputNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal input frequency of the UPS system in Hz.\"\"\",\n        }, # scalar\n        \"upsAdvInputNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal input voltage of the UPS system in VAC.\"\"\",\n        }, # scalar\n        \"upsAdvInputBypassNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal bypass input frequency of the UPS system in Hz.\"\"\",\n        }, # scalar\n        \"upsAdvInputBypassNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal bypass input voltage of the UPS system in VAC.\"\"\",\n        }, # scalar\n        \"upsAdvInputStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the value of upsPhaseNumInputs.\"\"\",\n        }, # table\n        \"upsAdvInputStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAdvInputStatisticsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input.\"\"\",\n        }, # row\n        \"upsAdvInputStatisticsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"upsAdvInputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input apparent power of the UPS system in kVA.\"\"\",\n        }, # column\n        \"upsAdvInputVoltageTHD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage Total Harmonic Distortion in percent.\"\"\",\n        }, # column\n        \"upsAdvInputBypassVoltageTHD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bypass input voltage Total Harmonic Distortion in percent.\"\"\",\n        }, # column\n        \"upsAdvInputPeakCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input peak current in Amperes.\"\"\",\n        }, # column\n        \"upsAdvInputBypassPeakCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.2.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bypass input peak current in Amperes.\"\"\",\n        }, # column\n        \"upsHighPrecInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.3\",\n        }, # node\n        \"upsHighPrecInputLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current utility line voltage in tenths of VAC.\"\"\",\n        }, # scalar\n        \"upsHighPrecInputMaxLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum utility line voltage in tenths of VAC over the\nprevious 1 minute period.\"\"\",\n        }, # scalar\n        \"upsHighPrecInputMinLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum utility line voltage in tenths of VAC over the\nprevious 1 minute period.\"\"\",\n        }, # scalar\n        \"upsHighPrecInputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.3.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current input frequency to the UPS system in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4\",\n        }, # node\n        \"upsBasicOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.1\",\n        }, # node\n        \"upsBasicOutputStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"onLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onBattery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onSmartBoost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"timedSleeping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"softwareBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"rebooting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"switchedBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"hardwareFailureBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"sleepingUntilPowerReturn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"onSmartTrim\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the UPS.  If the UPS is unable \nto determine the state of the UPS this variable is set \nto unknown(1).\"\"\",\n        }, # scalar\n        \"upsBasicOutputPhase\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current output phase.\"\"\",\n        }, # scalar\n        \"upsBasicSystemStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"onLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onBattery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onSmartBoost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"timedSleeping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"softwareBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"rebooting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"switchedBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"hardwareFailureBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"sleepingUntilPowerReturn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"onSmartTrim\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current state for the whole system (UPS and surrounding breakers)\nIf unable to determine the state of the system\nthis variable is set to unknown(1).\"\"\",\n        }, # scalar\n        \"upsBasicSystemInternalTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual internal temperature of the UPS system in Celsius.\"\"\",\n        }, # scalar\n        \"upsAdvOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2\",\n        }, # node\n        \"upsAdvOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage of the UPS system in VAC.\"\"\",\n        }, # scalar\n        \"upsAdvOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current output frequency of the UPS system in Hz.\"\"\",\n        }, # scalar\n        \"upsAdvOutputLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current UPS load expressed in percent \nof rated capacity.\"\"\",\n        }, # scalar\n        \"upsAdvOutputCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current in amperes drawn by the load on the UPS.\"\"\",\n        }, # scalar\n        \"upsAdvOutputRedundancy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of power modules which can fail or be\nremoved without causing the UPS to generate a Minimum\nRedundancy Lost event.\"\"\",\n        }, # scalar\n        \"upsAdvOutputKVACapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum load that this UPS can support.\"\"\",\n        }, # scalar\n        \"upsAdvOutputNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal output frequency of the UPS system in Hz.\"\"\",\n        }, # scalar\n        \"upsAdvOutputActivePower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total output active power of the UPS system in W. \nThe total active power is the sum of phase 1, phase 2 and \nphase 3 power.\"\"\",\n        }, # scalar\n        \"upsAdvOutputApparentPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total output apparent power of all phases of the UPS system in VA.\"\"\",\n        }, # scalar\n        \"upsAdvOutputStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the value of upsPhaseNumOutputs.\"\"\",\n        }, # table\n        \"upsAdvOutputStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAdvOutputStatisticsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output.\"\"\",\n        }, # row\n        \"upsAdvOutputStatisticsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"upsAdvOutputPeakCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output peak current in Amperes.\"\"\",\n        }, # column\n        \"upsAdvOutputCurrentTHD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current Total Harmonic Distortion in percent.\"\"\",\n        }, # column\n        \"upsAdvOutputCrestFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.2.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current crest factor expressed in tenths.\"\"\",\n        }, # column\n        \"upsHighPrecOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3\",\n        }, # node\n        \"upsHighPrecOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage of the UPS system in tenths of VAC.\"\"\",\n        }, # scalar\n        \"upsHighPrecOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current output frequency of the UPS system in tenths of Hz.\"\"\",\n        }, # scalar\n        \"upsHighPrecOutputLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current UPS load expressed in tenths of percent \nof rated capacity.\"\"\",\n        }, # scalar\n        \"upsHighPrecOutputCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current in tenths of amperes drawn by the load on the UPS.\"\"\",\n        }, # scalar\n        \"upsHighPrecOutputEfficiency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The efficiency of the UPS in tenths of percent.\nResult is -1 if UPS supports this oid \nbut the result is not available.\"\"\",\n        }, # scalar\n        \"upsHighPrecOutputEnergyUsage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.4.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output energy usage of the UPS in hundredths of kWh.\"\"\",\n        }, # scalar\n        \"upsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5\",\n        }, # node\n        \"upsBasicConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1\",\n        }, # node\n        \"upsBasicConfigNumDevices\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of devices that are plugged into the UPS.\"\"\",\n        }, # scalar\n        \"upsBasicConfigDeviceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of devices that are plugged into the UPS.\nThe number of entries is given by the value of\nupsBasicConfigNumDevices.\"\"\",\n        }, # table\n        \"upsBasicConfigDeviceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The devices plugged in to the UPS.\"\"\",\n        }, # row\n        \"deviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the device that is plugged into the UPS.\"\"\",\n        }, # column\n        \"deviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name/description of the device plugged into the UPS.\"\"\",\n        }, # column\n        \"vaRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The volt-amp rating of the device plugged into the UPS.\"\"\",\n        }, # column\n        \"acceptThisDevice\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An entry is added if yes, the entry is deleted if no.\"\"\",\n        }, # column\n        \"upsAdvConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2\",\n        }, # node\n        \"upsAdvConfigRatedOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal output voltage from the UPS in VAC. \n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a \nset request, the UPS interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigHighTransferVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum line voltage in VAC allowed before the\nUPS system transfers to battery backup.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a\nset request, the UPS interprets it as a the next higher\nacceptable value.  If the provided value is higher than\nthe highest acceptable value, the highest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigLowTransferVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum line voltage in VAC allowed before the\nUPS system transfers to battery backup.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a \nset request, the UPS interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"timed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atLowBattery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"never\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A flag indicating how the UPS should handle audible\nline fail alarms:\ntimed(1): UPS alarm will sound after a preset timed duration starting\nfrom the line fail condition (see OID upsAdvConfigAlarmTimer for the\nalarm timer value)\natLowBattery(2): UPS alarm will sound when the UPS has reached a Low\nBattery condition during a line fail\nnever(3): Disables the UPS audible alarm\nmute(4): Mutes the current alarm for some UPSs only when it is in an\nalarm state and will return to the previously configured option when\nthe UPS recovers from the alarm condition\"\"\",\n        }, # scalar\n        \"upsAdvConfigAlarmTimer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time after initial line failure at which the UPS\nbegins emitting audible alarms (beeping).  This timer is\nobserved only if the value of extControlAlarm is timed(2).\nAllowed values are 0 or 30 seconds.\n\nIf a value other than a supported value is provided in a\nset request, the UPS interprets it as a the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigMinReturnCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum battery capacity required before the UPS will \nreturn from a low battery shutdown condition.  The capacity is\nmeasured from 0% battery capacity (or Low Battery) as a percent\nof full capacity (100%).   In other words, the UPS will not re-energize\nthe output until the battery has charged so that its' capacity is equal \nto this value.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a\nset request, the UPS interprets it as a the next higher\nacceptable value.  If the provided value is higher than\nthe highest acceptable value, the highest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigSensitivity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensitivity of the UPS to utility line abnormalities\nor noises.\"\"\",\n        }, # scalar\n        \"upsAdvConfigLowBatteryRunTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired run time of the UPS, in seconds, once the \nlow battery condition is reached. During this time the UPS will\nproduce a constant warning tone which can not be disabled.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a set\nrequest, the UPS interprets the value as the next higher\nacceptable value.  If the provided value is higher than the\nhighest acceptable value, the highest acceptable value is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigReturnDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay in seconds after utility line power returns\nbefore the UPS will turn on.  This value is also used \nwhen the UPS comes out of a reboot and before the UPS\nwakes up from 'sleep' mode.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a\nset request, the UPS interprets it as a the next higher\nacceptable value.  If the provided value is higher than\nthe highest acceptable value, the highest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigShutoffDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay in seconds the UPS remains on after being told \nto turn off.\n\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\n\nIf a value other than a supported value is provided in a\nset request, the UPS interprets it as a the next higher\nacceptable value.  If the provided value is higher than\nthe highest acceptable value, the highest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"upsAdvConfigUpsSleepTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds for the UPS to go to 'sleep' when \ninstructed.  When in sleep mode, the UPS will not provide\noutput power regardless of the input line state.  Once the\nspecified time has elapsed, output power will be restored.\n\nThis is a configuration setting.  The UPS will not go to\nsleep until told to do so by the manager from a management\nstation.\n\nAny input value is allowed, however the UPS only recognizes\n1/10 of an hour increments.  The provided value will be \nrounded to the closest 1/10 of an hour with one exception:\nAny value entered between 1 and 540 seconds will be rounded \nto 360 seconds (or 6 minutes).\"\"\",\n        }, # scalar\n        \"upsAdvConfigSetEEPROMDefaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noSetEEPROMDefaults\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"setEEPROMDefaults\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"WRITE: Resets the UPS EEPROM variables to default values.\nREAD: returns 0\"\"\",\n        }, # scalar\n        \"upsAdvConfigDipSwitchTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Current settings of UPS dip switches.\"\"\",\n        }, # table\n        \"upsAdvConfigDipSwitchEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dipSwitchIndex\",\n            ],\n            \"description\" :\n                \"\"\"The current setting of one dip switch.\"\"\",\n        }, # row\n        \"dipSwitchIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of a UPS dip switch.\"\"\",\n        }, # column\n        \"dipSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The setting of a UPS dip switch.\"\"\",\n        }, # column\n        \"upsAdvConfigBattExhaustThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of seconds prior to battery exhaustion when the\nUPS will switch off power to its load.\"\"\",\n        }, # scalar\n        \"upsAdvConfigPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The password entered at the UPS front panel to enable local\nconfiguration of the EEProm. If the password is disabled or \nis not supported, then the agent returns a null string.\"\"\",\n        }, # scalar\n        \"upsAdvConfigAllowedSetTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table listing the allowed values for all discrete \nconfigurable UPS variables.\"\"\",\n        }, # table\n        \"upsAdvConfigAllowedSetEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"apcUpsConfigFieldIndex\",\n            ],\n            \"description\" :\n                \"\"\"The table entry for a configurable UPS variable.\"\"\",\n        }, # row\n        \"apcUpsConfigFieldIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to an eeprom field entry.\"\"\",\n        }, # column\n        \"apcUpsConfigFieldOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The OID of the current configurable value.\"\"\",\n        }, # column\n        \"apcUpsConfigFieldValueRange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The discrete set of allowed values of a configurable \nregister. Individual values are delimited by a comma.\"\"\",\n        }, # column\n        \"upsAdvConfigBattCabAmpHour\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the amp-hour setting of the UPS battery cabinet.\"\"\",\n        }, # scalar\n        \"upsAdvConfigPositionSelector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure UPS position selector.  If the UPS doesn't\nsupport this configuration it will report unknown (1).\nThe positions are either rack (2) for rack mounted or\ntower (3) for tower unit.\"\"\",\n        }, # scalar\n        \"upsAdvConfigOutputFreqRange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"freqRangeAUTO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"freqRange60Var1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"freqRange60Var3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqRange50Var1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"freqRange50Var3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"freqRange60Var10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"freqRange50Var10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"freqRange60Var1dot0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"freqRange50Var1dot0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"freqRange50Pct0dot5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"freqRange50Pct1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"freqRange50Pct2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"freqRange50Pct4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"freqRange50Pct6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"freqRange50Pct8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"freqRange60Pct0dot5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"freqRange60Pct1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"freqRange60Pct2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"freqRange60Pct4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"freqRange60Pct6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"freqRange60Pct8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the output frequency tolerance range.\nunknown(1) indicates the output frequency is unknown.\nfreqRangeAUTO(2) configure the output frequency range for automatic.\nfreqRange60Var1(3) configure the output frequency range for 60 +/- 0.1 Hz\nfreqRange60Var3(4) configure the output frequency range for 60 +/- 3.0 Hz\nfreqRange50Var1(5) configure the output frequency range for 50 +/- 0.1 Hz\nfreqRange50Var3(6) configure the output frequency range for 50 +/- 3.0 Hz\nfreqRange60Var10(7) configure the output frequency range for 60 +/- 10 Hz\nfreqRange50Var10(8) configure the output frequency range for 50 +/- 10 Hz\nfreqRange60Var1dot0(9) configure the output frequency range for 60 +/- 1.0 Hz\nfreqRange50Var1dot0(10) configure the output frequency range for 50 +/- 1.0 Hz\nfreqRange50Pct0dot5(11) configure the output frequency range for 50 Hz +/- 0.5 %\nfreqRange50Pct1(12) configure the output frequency range for 50 Hz +/- 1.0 %\nfreqRange50Pct2(13) configure the output frequency range for 50 Hz +/- 2.0 %\nfreqRange50Pct4(14) configure the output frequency range for 50 Hz +/- 4.0 %\nfreqRange50Pct6(15) configure the output frequency range for 50 Hz +/- 6.0 %\nfreqRange50Pct8(16) configure the output frequency range for 50 Hz +/- 8.0 %\nfreqRange60Pct0dot5(17) configure the output frequency range for 60 Hz +/- 0.5 %\nfreqRange60Pct1(18) configure the output frequency range for 60 Hz +/- 1.0 %\nfreqRange60Pct2(19) configure the output frequency range for 60 Hz +/- 2.0 %\nfreqRange60Pct4(20) configure the output frequency range for 60 Hz +/- 4.0 %\nfreqRange60Pct6(21) configure the output frequency range for 60 Hz +/- 6.0 %\nfreqRange60Pct8(22) configure the output frequency range for 60 Hz +/- 8.0 %\nFor a list of allowed values supported by your UPS model,\nsee the UPS User's Manual.\"\"\",\n        }, # scalar\n        \"upsAdvConfigUPSFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"gotoBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dropLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the UPS fail action.  If UPS fails,\nand frequency or voltage is out of range it will either\nGotoBypass (2) or DropLoad (3).  This OID will report\nunknown (1) if it is not supported feature or option.\"\"\",\n        }, # scalar\n        \"upsAdvConfigAlarmRedundancy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure settings of UPS alarm if the redundancy is\nunder the current redundancy.  Use 0 for never.\"\"\",\n        }, # scalar\n        \"upsAdvConfigAlarmLoadOver\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure settings of UPS alarm if the load is\nover the current load in kVA.  Use -1 for never.\"\"\",\n        }, # scalar\n        \"upsAdvConfigAlarmRuntimeUnder\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure settings of UPS alarm if the runtime is\nunder the current time of minutes.  Use -1 for never.\"\"\",\n        }, # scalar\n        \"upsAdvConfigVoutReporting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"voutAUTO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"vout208\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"vout240\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the way the UPS scales its output voltage readings.\nunknown(1) indicates the Vout Reporting is unknown.\nvoutAUTO(2) configure the Vout Reporting for automatic scaling.\nvout208(3) configure the Vout Reporting for 208 Volts.\nvout240(4) configure the Vout Reporting for 240 Volts.\"\"\",\n        }, # scalar\n        \"upsAdvConfigNumExternalBatteries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the number of external batteries connected to the UPS.\"\"\",\n        }, # scalar\n        \"upsAdvConfigSimpleSignalShutdowns\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure Simple Signal shutdown commands from the Simple Signal\nport to be issued to the UPS.\nunknown(1) indicates the Simple Signal Shutdown setting is unknown.\ndisabled(2) configure to disable Simple Signal Shutdowns.\nenabled(3) configure to enable Simple Signal Shutdowns.\"\"\",\n        }, # scalar\n        \"upsAdvConfigMaxShutdownTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum amount of time for server shutdown to complete before a \nUPS shutdown occurs.\"\"\",\n        }, # scalar\n        \"upsAsiUpsControlServerRequestShutdown\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"serverShutdownOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"serverShutdownReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Start a server shutdown sequence:\nserverShutdownOff: Shutdown server and turn off UPS\nserverShutdownReboot: Shutdown server and turn reboot UPS.\"\"\",\n        }, # scalar\n        \"upsAdvConfigMinReturnRuntime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum amount of run time in seconds required before the output will be\nturned on, using power calculation captured at start of last shutdown.\"\"\",\n        }, # scalar\n        \"upsAdvConfigBasicSignalLowBatteryDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The duration of runtime in seconds during an on-battery condition at which \nthe UPS will signal the basic low battery shutdown condition.\"\"\",\n        }, # scalar\n        \"upsAdvConfigBypassPhaseLockRequired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sets the condition for when bypass is an acceptable mode of operation as a\nrequirement.\"\"\",\n        }, # scalar\n        \"upsAdvConfigOutputFreqSlewRate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"slewRateQuarterHzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"slewRateHalfHzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"slewRate1HzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"slewRate2HzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"slewRate4HzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"slewRate6HzPerSec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The rate at which the UPS will change its output frequency \nin response to utility frequency changes.\"\"\",\n        }, # scalar\n        \"upsAdvConfigChargerLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sets the rate at which the UPS charges its batteries.\"\"\",\n        }, # scalar\n        \"upsAdvConfigBypassToleranceSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"wide\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"narrow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting allows selecting from standard bypass tolerance configurations to suit their situation.\"\"\",\n        }, # scalar\n        \"upsAdvConfigMainsSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleInput\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualInput\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Configure the type of mains supply system.\nsingleInput (1) indicates a single supply system.\ndualInput   (2) indicates a dual supply system. \"\"\",\n        }, # scalar\n        \"upsAdvConfigACWiringSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"threeWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Configure the AC wiring of the system.\nthreeWire (1) indicates 3-wire system configuration.\nfourWire  (2) indicates 4-wire system configuration. \"\"\",\n        }, # scalar\n        \"upsAdvConfigUpperOutputVoltTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Upper tolerance of the output RMS voltage before transferring to bypass.\nExpressed as percent of nominal voltage.\"\"\",\n        }, # scalar\n        \"upsAdvConfigLowerOutputVoltTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Lower tolerance of the output RMS voltage before transferring to bypass.\nExpressed as percent of nominal voltage.\"\"\",\n        }, # scalar\n        \"upsAdvConfigUpperBypassVoltTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Upper tolerance of the bypass voltage that allows transfer to bypass by user.\nExpressed as percent of nominal voltage.\"\"\",\n        }, # scalar\n        \"upsAdvConfigLowerBypassVoltTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Lower tolerance of the bypass voltage that allows transfer to bypass by user.\nExpressed as percent of nominal voltage.\"\"\",\n        }, # scalar\n        \"upsAdvConfigOutofSyncBypassTransferDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.5.2.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configure the time (in milliseconds), indicating the gap in output voltage\nif an asynchronous transfer to bypass needs to occur.\"\"\",\n        }, # scalar\n        \"upsControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6\",\n        }, # node\n        \"upsBasicControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.1\",\n        }, # node\n        \"upsBasicControlConserveBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTurnOffUps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnOffUpsToConserveBattery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to turnUpsOffToConserveBattery(2) \ncauses a UPS on battery to be put into 'sleep' mode.  The \nUPS will turn back on when utility power is restored.  \nAttempting to turn off a UPS that is not on battery will \nresult in a badValue error.\n\nSetting this value to noTurnOffUps(1) has no\neffect.\n\nThe value noTurnOffUps(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2\",\n        }, # node\n        \"upsAdvControlUpsOff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTurnUpsOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnUpsOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turnUpsOffGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turnUpsSyncGroupOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"turnUpsSyncGroupOffAfterDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"turnUpsSyncGroupOffGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to turnUpsOff(2) causes\nthe UPS to shut off.  When in this state, the UPS \nwill not provide output power regardless of the input\nline state.\n\nSetting this variable to turnUpsOffGracefully(3) causes\nthe UPS to shut off after a delay period. This allows the\nhost to shut down in a graceful manner. When in this state,\nthe UPS will not provide output power regardless of the\ninput line state. \n       \nIf this UPS is an active member of a Synchronized \nControl Group (SCG) the turnUpsSyncGroupOff(4) command \nwill perform a Synchronized Turn Off of all active Group\nmembers regardless of their current AC output status.    \n\nIf this UPS is an active member of a Synchronized \nControl Group (SCG) the turnUpsSyncGroupOffAfterDelay(5)\ncommand will perform a Synchronized Turn Off After Delay \nof all active Group members regardless of their current \nAC output status. This unit's Shutdown Delay will be used \nto execute the Turn Off After Delay command.  \n\nIf this UPS is an active member of an SCG, the \nturnUpsSyncGroupOffGracefully(6) command will perform a \nSynchronized Turn Off Gracefully of all active Group \nmembers regardless of their current AC output status.  \nThis unit's Maximum Shutdown Time and Shutdown Delay will\nbe used to execute the Turn Off Gracefully command.  \n\nSetting this value to noTurnUpsOff(1) has no\neffect.\n\nThe value noTurnUpsOff(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlRebootShutdownUps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noRebootShutdownUps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rebootShutdownUps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rebootShutdownUpsGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rebootShutdownSyncGroupUps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rebootShutdownSyncGroupUpsGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to rebootShutdownUps(2) causes the UPS\nto shut off and turn back on (as long as good AC input power\nis available, otherwise the UPS will remain off until good AC\ninput power is available).\n\nSetting this variable to rebootShutdownUpsGracefully(3) causes\nthe UPS to shut off after a delay period and then turn back\non.  This allows the host to shut down in a graceful manner.\n\nIf this UPS is an active member of a Synchronized Control\nGroup (SCG) the rebootShutdownSyncGroupUps(4) command will\nperform a Synchronized Reboot of all active Group members\nregardless of their current AC output status.  If applicable,\nthis unit's Power Synchronization Delay, Shutdown Delay,\nReturn Delay, Return Battery Capacity, and Return Battery\nCapacity Offset will be used to execute the Reboot command.\n\nIf this UPS is an active member of a SCG the\nrebootShutdownSyncGroupUpsGracefully(5) command will perform\na Synchronized Reboot of all active Group members regardless\nof their current AC output status.  If applicable, this unit's\nPower Synchronization Delay, Maximum Shutdown Time, Shutdown\nDelay, Return Delay, Return Battery Capacity, and Return\nBattery Capacity Offset will be used to execute the Reboot\ncommand.\n\nSetting this value to noRebootShutdownUps(1) has no effect.\n\nThe value noRebootShutdownUps(1) will always be returned when\nthe variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlUpsSleep\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noPutUpsToSleep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"putUpsToSleep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"putUpsToSleepGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"putUpsSyncGroupToSleep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"putUpsSyncGroupToSleepGracefully\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to putUpsToSleep(2) causes\nthe UPS to go to sleep for the time specified by\nupsAdvConfigUpsSleepTime.\n\nSetting this variable to putUpsToSleepGracefully(3)\ncauses the UPS to go to sleep for the time specified \nby upsAdvConfigUpsSleepTime after a delay period. \nThis allows the host to shut down in a graceful manner.\n\nIf this UPS is an active member of a Synchronized Control \nGroup (SCG), the putUpsSyncGroupToSleep(4) command will perform\na Synchronized Sleep of all active Group members regardless \nof their current AC output status.  This unit's Power \nSynchronization Delay, Shutdown Delay, Sleep Time, \nand Return Delay will be used to execute the sleep command.  \n\nIf this UPS is an active member of a SCG the \nputUpsSyncGroupToSleepGracefully(5) command will perform a \nSynchronized Sleep Gracefully of all active Group members \nregardless of their current AC output status.  This unit's \nPower Synchronization Delay, Maximum Shutdown Time, Shutdown \nDelay, Sleep Time, and Return Delay to execute the sleep \ncommand.  \n\nWhen in sleep mode, the UPS will not provide output\npower regardless of the input line state.  Once the\nspecified time has elapsed, output power will be\nrestored. \n\nSetting this value to noPutUpsToSleep(1) has no\neffect.\n\nThe value noPutUpsToSleep(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlSimulatePowerFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noSimulatePowerFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"simulatePowerFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to simulatePowerFailure(2) causes\nthe UPS switch to battery power.\n\nSetting this value to noSimulatePowerFailure(1) has no\neffect.\n\nThe value noSimulatePowerFailure(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlFlashAndBeep\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noFlashAndBeep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"flashAndBeep\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"flashAndBeepSyncGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"flashAndBeepCont\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"flashAndBeepCancel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to flashAndBeep(2) causes the\nUPS to beep and simultaneously turn on the UPS front\npanel lights (Smart-UPS only).\n\nIf this UPS is an active member of a Synchronized Control \nGroup (SCG), the flashAndBeepSyncGroup(3) command will \nFlash and Beep all active Group members regardless of \ncurrent AC output status.\n\nSetting this value to noFlashAndBeep(1) has no\neffect.\n  \nSetting this value to flashAndBeepCont (4) commandcauses \nthe UPS to beep and light the front panel lights until \nthe flashAndBeepCancel (5) command is received.\n\nThe value noFlashAndBeep(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlTurnOnUPS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTurnOnUPS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnOnUPS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turnOnUPSSyncGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to turnOnUPS(2) causes the\nUPS to be turned on immediately.\n\nIf this UPS is an active member of a Synchronized Control \nGroup (SCG), the turnOnUPSSyncGroup(3) command will perform \na Synchronized Turn On of all active Group members \nregardless of their current AC output status.\n\nSetting this value to noTurnOnUPS(1) has no\neffect.\n\nThe value noTurnOnUPS(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlBypassSwitch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noBypassSwitch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"switchToBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"switchOutOfBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This switch puts the UPS in or out of bypass mode.\"\"\",\n        }, # scalar\n        \"upsAdvControlRebootUpsWithOrWithoutAC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noRebootUpsWithOrWithoutAC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rebootUpsImmediatelyWithOrWithoutAC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"rebootUpsDelayedWithOrWithoutAC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to rebootUpsImmediatelyWithOrWithoutAC (2)\ncauses the UPS to turn off immediately, wait for a minimum time\n(typically 8 seconds), and then turn back on regardless of the\nAC input power on the UPS.  Any supported switched outlet\ngroups will be turned off immediately but will turned on based\non their individual settings (to allow on sequencing).\n\nSetting this variable to rebootUpsDelayedWithOrWithoutAC (3)\ncauses the UPS to turn off after a delay period, wait for a\nminimum time (typically 8 seconds), and then turn back on\nregardless of the AC input power on the UPS.  Any supported\nswitched outlet groups will be turned off and on based on their\nindividual settings (to allow off and/or on sequencing).\n\nSetting this value to noRebootUpsWithOrWithoutAC (1) has no\neffect.\n\nThe value noRebootUpsWithOrWithoutAC (1) will always be\nreturned when the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvControlFirmwareUpdate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.6.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noFirmwareUpdate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"firmwareUpdate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"updateInProcess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"updateSuccessful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"updateFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to firmwareUpdate(2) causes the\nUPS to begin a firmware update if possible.\n\nSetting this value to noFirmwareUpdate(1) will clear the\nprevious results, if any, or otherwise has no effect.\n\nReading this variable will return noFirmwareUpdate(1) when\nthe UPS firmware has not been updated (or previous results\nhave been cleared), updateInProcess(3) when the UPS firmware\nis being updated, updateSuccessful(4) when the UPS firmware\nhas been successfully updated, or updateFailed(5) if the UPS\nfirmware update failed.\"\"\",\n        }, # scalar\n        \"upsTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7\",\n        }, # node\n        \"upsBasicTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.1\",\n        }, # node\n        \"upsAdvTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2\",\n        }, # node\n        \"upsAdvTestDiagnosticSchedule\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"biweekly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"weekly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"atTurnOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"never\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fourWeeks\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"twelveWeeks\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"biweeklySinceLastTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"weeklySinceLastTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The UPS system's automatic battery test schedule.\"\"\",\n        }, # scalar\n        \"upsAdvTestDiagnostics\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTestDiagnostics\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"testDiagnostics\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to testDiagnostics(2) causes\nthe UPS to perform a diagnostic self test.\n\nSetting this value to noTestDiagnostics(1) has no\neffect.\n\nThe value noTestDiagnostics(1) will always be returned\nwhen the variable is read.\"\"\",\n        }, # scalar\n        \"upsAdvTestDiagnosticsResults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"invalidTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"testInProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The results of the last UPS diagnostics test performed.\"\"\",\n        }, # scalar\n        \"upsAdvTestLastDiagnosticsDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date the last UPS diagnostics test was performed in\nmm/dd/yy format.\"\"\",\n        }, # scalar\n        \"upsAdvTestRuntimeCalibration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noPerformCalibration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"performCalibration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cancelCurrentCalibration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to performCalibration(2) causes\nthe UPS to discharge to calibrate the UPS.\nThe test will only start if the battery capacity is 100%.\nThe test runs until capacity is less than 25%.\n\nSetting this variable to cancelCurrentCalibration(3)\nafter setting performCalibration(2) will cancel the \ncurrent discharge.\n\nSetting this variable to noPerformCalibration(1) \nwill have no effect.\n\nThe value noPerformCalibration(1) will always be returned\nwhen the variable is read.\n\nThe result of the calibration will be saved in \nupsAdvTestCalibrationResult.\"\"\",\n        }, # scalar\n        \"upsAdvTestCalibrationResults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalidCalibration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"calibrationInProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The results of the last runtime calibration.\n\nValue ok(1) means a successful runtime calibration.\n\nValue invalidCalibration(2) indicates last calibration did\nnot take place since the battery capacity was below\n100%.\n\nValue calibrationInProgress(3) means a calibration \nis occurring now. \"\"\",\n        }, # scalar\n        \"upsAdvTestCalibrationDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date the last UPS runtime calibration was \nperformed in mm/dd/yy format.\"\"\",\n        }, # scalar\n        \"upsAdvTestDiagnosticTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time of the day to perform automatic battery test. \nExpressed in 24 hour notation - hh:mm.\"\"\",\n        }, # scalar\n        \"upsAdvTestDiagnosticDay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.7.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"monday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"tuesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"wednesday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thursday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"friday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"saturday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sunday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The day of the week to perform automatic battery test.\"\"\",\n        }, # scalar\n        \"upsComm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.8\",\n        }, # node\n        \"upsCommStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of agent's communication with UPS. \"\"\",\n        }, # scalar\n        \"upsPhase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9\",\n        }, # node\n        \"upsPhaseResetValues\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.1\",\n        }, # node\n        \"upsPhaseResetMaxMinValues\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the maximum and minimum UPS values:\nupsPhaseInputMaxVoltage, upsPhaseInputMinVoltage,\nupsPhaseInputMaxCurrent, upsPhaseInputMinCurrent,\nupsPhaseInputMaxPower, upsPhaseInputMinPower,\nupsPhaseOutputMaxCurrent, upsPhaseOutputMinCurrent,\nupsPhaseOutputMaxLoad, upsPhaseOutputMinLoad,\nupsPhaseOutputMaxPercentLoad, upsPhaseOutputMinPercentLoad,\nupsPhaseOutputMaxPower, upsPhaseOutputMinPower,\nupsPhaseOutputMaxPercentPower, upsPhaseOutputMinPercentPower.\"\"\",\n        }, # scalar\n        \"upsPhaseInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2\",\n        }, # node\n        \"upsPhaseNumInputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input feeds to this device.\nThis variable indicates the number of rows in the\ninput table.\"\"\",\n        }, # scalar\n        \"upsPhaseInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the value of upsPhaseNumInputs.\"\"\",\n        }, # table\n        \"upsPhaseInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsPhaseInputTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input.\"\"\",\n        }, # row\n        \"upsPhaseInputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"upsPhaseNumInputPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input phases utilized in this\ndevice.  The sum of all the upsPhaseNumInputPhases\nvariable indicates the number of rows in the \ninput phase table.\"\"\",\n        }, # column\n        \"upsPhaseInputVoltageOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhasePhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"threePhasePhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage orientation: \n1: unknown for this UPS\n2: singlePhase - phase 1 voltage is between Phase 1\nand Neutral.\n3: splitPhase - phase 1 voltage is between Phase 1 and \nNeutral; phase 2 voltage is between Phase 2 and Neutral; \nphase 3 voltage is between Phase 1 and Phase 2.\n4: threePhasePhaseToNeutral - phase 1 voltage is between\nPhase 1 and Neutral; phase 2 voltage is between Phase 2 \nand Neutral; phase 3 voltage is between Phase 3 and\nNeutral.\n5: threePhasePhaseToPhase - phase 1 voltage is between \nPhase 1 and Phase 2; phase 2 voltage is between Phase 2\nand Phase 3; phase 3 voltage is between Phase 3 and\nPhase 1.\"\"\",\n        }, # column\n        \"upsPhaseInputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input frequency in 0.1 Hertz, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseInputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"main\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input type.\"\"\",\n        }, # column\n        \"upsPhaseInputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A name given to a particular input.\"\"\",\n        }, # column\n        \"upsPhaseInputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the sum of the upsPhaseNumInputPhases.\"\"\",\n        }, # table\n        \"upsPhaseInputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsPhaseInputPhaseTableIndex\",\n                \"upsPhaseInputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input phase.\"\"\",\n        }, # row\n        \"upsPhaseInputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"upsPhaseInputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase identifier.\"\"\",\n        }, # column\n        \"upsPhaseInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage in VAC, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseInputMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input voltage in VAC measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseInputMinVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input voltage in VAC measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input current in 0.1 amperes, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsPhaseInputMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input current in 0.1 amperes measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseInputMinCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input current in 0.1 amperes measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseInputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input power in Watts, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseInputMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input power in Watts measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseInputMinPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input power in Watts measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3\",\n        }, # node\n        \"upsPhaseNumOutputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output feeds to this device.\nThis variable indicates the number of rows in the\noutput table.\"\"\",\n        }, # scalar\n        \"upsPhaseOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of entries\nis given by the value of upsOutputNumPhases.\"\"\",\n        }, # table\n        \"upsPhaseOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsPhaseOutputTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output.\"\"\",\n        }, # row\n        \"upsPhaseOutputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"upsPhaseNumOutputPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output phases utilized in this\ndevice.  The sum of all the upsPhaseNumOutputPhases\nvariable indicates the number of rows in the \noutput phase table.\"\"\",\n        }, # column\n        \"upsPhaseOutputVoltageOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhasePhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"threePhasePhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage orientation: \n1: unknown for this UPS\n2: singlePhase - phase 1 voltage is between Phase 1\nand Neutral.\n3: splitPhase - phase 1 voltage is between Phase 1 and \nNeutral; phase 2 voltage is between Phase 2 and Neutral; \nphase 3 voltage is between Phase 1 and Phase 2.\n4: threePhasePhaseToNeutral - phase 1 voltage is between\nPhase 1 and Neutral; phase 2 voltage is between Phase 2 \nand Neutral; phase 3 voltage is between Phase 3 and\nNeutral.\n5: threePhasePhaseToPhase - phase 1 voltage is between \nPhase 1 and Phase 2; phase 2 voltage is between Phase 2\nand Phase 3; phase 3 voltage is between Phase 3 and\nPhase 1.\"\"\",\n        }, # column\n        \"upsPhaseOutputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output frequency in 0.1 Hertz, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of\nentries is given by the sum of the upsPhaseNumOutputPhases.\"\"\",\n        }, # table\n        \"upsPhaseOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsPhaseOutputPhaseTableIndex\",\n                \"upsPhaseOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output phase.\"\"\",\n        }, # row\n        \"upsPhaseOutputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"upsPhaseOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase identifier.\"\"\",\n        }, # column\n        \"upsPhaseOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage in VAC, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current in 0.1 amperes drawn \nby the load on the UPS, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output current in 0.1 amperes measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputMinCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output current in 0.1 amperes measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output load in VA, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputMaxLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output load in VA measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputMinLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output load in VA measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the UPS load capacity in VA at \nredundancy @ (n + x) presently being used on this \noutput phase, or -1 if it's unsupported by this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputMaxPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the UPS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this output phase since the last reset\n(upsPhaseResetMaxMinValues), or -1 if it's unsupported\nby this UPS. Sampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputMinPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum percentage of the UPS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this output phase since the last reset\n(upsPhaseResetMaxMinValues), or -1 if it's unsupported\nby this UPS. Sampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output power in Watts, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output power in Watts measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputMinPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output power in Watts measured\nsince the last reset (upsPhaseResetMaxMinValues), or\n-1 if it's unsupported by this UPS.\nSampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the UPS power capacity in Watts at \nredundancy @ (n + x) presently being used on this \noutput phase, or -1 if it's unsupported by this UPS.\"\"\",\n        }, # column\n        \"upsPhaseOutputMaxPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the UPS power capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this output phase since the last \nreset (upsPhaseResetMaxMinValues), or -1 if it's\nunsupported by this UPS. Sampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsPhaseOutputMinPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.9.3.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the UPS power capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this output phase since the last \nreset (upsPhaseResetMaxMinValues), or -1 if it's\nunsupported by this UPS. Sampled every 30 seconds.\"\"\",\n        }, # column\n        \"upsSyncCtrlGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10\",\n        }, # node\n        \"upsSyncCtrlGroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1\",\n        }, # node\n        \"upsSCGMembershipGroupNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SCG Membership Group number (MGN) is a 16-bit number allowing \nup to 65534 separate groups that can be identified and distinguished\nper IP subnet. Zero and 65535 are not used. The MGN is used in all \ncommunication between members of the SCG and a Network Management Card\n(NMC) will listen and only respond to commands sent to it using its \nconfigured SCG ID.\"\"\",\n        }, # scalar\n        \"upsSCGActiveMembershipStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledSCG\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabledSCG\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Membership in the configured SCG can be enabled and \ndisabled.  If an NMC is configured for an SCG, but \nhas its membership disabled, all synchronized control commands \nreceived will be ignored.\"\"\",\n        }, # scalar\n        \"upsSCGPowerSynchronizationDelayTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Power Synchronization Delay Time (PSD) setting is the maximum \nnumber of seconds an SCG Initiator will wait for all SCG members to \nrecover utility power before completing the reboot sequence of a\nreboot or sleep command. If all SCG members are ready to proceed, \nno additional delay is introduced.\"\"\",\n        }, # scalar\n        \"upsSCGReturnBatteryCapacityOffset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A reboot command uses the Initiator's Return battery Capacity (RBC) to control\nwhen the SCG completes this operation. In a Normal Control Operation (NCC) the \nUPS will only complete the reboot if RBC is reached.  Due to normal battery \ncharge rate variations it may be desirable for the Followers to complete the \nreboot if they are within some range of the Initiator's RBC when the Initiator \nis prepared (charged to RBC) to complete the reboot. The Return Battery \nCapacity Offset (RBCO) defines a percent battery capacity subtracted from an \nRBC above which a Follower's battery must be charged for it to complete a \nreboot.  For example, if the Initiator's RBC is 50% and the Initiator's RBCO is\n5% then a Follower's battery capacity is within range if it is greater or equal \nto 45% (50% - 5%) at the time when the Initiator tries to complete the reboot \ncommand.  The default RBCO is 10%. \"\"\",\n        }, # scalar\n        \"upsSCGMultiCastIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The MultiCast IP address of the SCG Group.\"\"\",\n        }, # scalar\n        \"upsSyncCtrlGroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2\",\n        }, # node\n        \"upsSCGNumOfGroupMembers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active, communicating members in the Sync Control Group (SCG).\nThis variable indicates the number of rows in the SCG Status Table.\"\"\",\n        }, # scalar\n        \"upsSCGStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of SCG status table entries.  The number of entries\nis given by the value of upsSCGNumOfGroupMembers.\"\"\",\n        }, # table\n        \"upsSCGStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsSCGStatusTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular SCG Member.\"\"\",\n        }, # row\n        \"upsSCGStatusTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of a status entry for an active, communicating SCG member.\"\"\",\n        }, # column\n        \"upsSCGMemberIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP address of an active, communicating SCG Member.\"\"\",\n        }, # column\n        \"upsSCGACInputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acInGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"acInBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID indicates the AC Input Status of the SCG Member.\nacInGood(1) indicates the AC Input is within tolerance.\nacInBad(2)  indicates the AC Input is not within tolerance.\"\"\",\n        }, # column\n        \"upsSCGACOutputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.10.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acOutOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"acOutOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID indicates the AC Output Status of the SCG Member.\nacOutOn(1)  indicates the UPS output is providing power to the load.\nacOutOff(2) indicates the UPS output is not providing power to the load. \"\"\",\n        }, # column\n        \"upsState\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11\",\n        }, # node\n        \"upsBasicState\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.1\",\n        }, # node\n        \"upsBasicStateOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 64 flags representing\nthe current state(s) of the UPS. If the Network Card\nis unable to determine the state of the UPS, this\nvariable is set to 'UNKNOWN'.\n\nThe flags are numbered 1 to 64, read from left to\nright. The flags are defined as follows:\n\nFlag  1: Abnormal Condition Present\nFlag  2: On Battery\nFlag  3: Low Battery\nFlag  4: On Line    \n                    \nFlag  5: Replace Battery\nFlag  6: Serial Communication Established\nFlag  7: AVR Boost Active\nFlag  8: AVR Trim Active \n                         \nFlag  9: Overload\nFlag 10: Runtime Calibration \nFlag 11: Batteries Discharged\nFlag 12: Manual Bypass\n                             \nFlag 13: Software Bypass\nFlag 14: In Bypass due to Internal Fault\nFlag 15: In Bypass due to Supply Failure\nFlag 16: In Bypass due to Fan Failure   \n                                        \nFlag 17: Sleeping on a Timer            \nFlag 18: Sleeping until Utility Power Returns\nFlag 19: On\nFlag 20: Rebooting\n                  \nFlag 21: Battery Communication Lost \nFlag 22: Graceful Shutdown Initiated\nFlag 23: Smart Boost or Smart Trim Fault\nFlag 24: Bad Output Voltage\n\nFlag 25: Battery Charger Failure\nFlag 26: High Battery Temperature    \nFlag 27: Warning Battery Temperature \nFlag 28: Critical Battery Temperature\n\nFlag 29: Self Test In Progress   \nFlag 30: Low Battery / On Battery\nFlag 31: Graceful Shutdown Issued by Upstream Device\nFlag 32: Graceful Shutdown Issued by Downstream Device\n\nFlag 33: No Batteries Attached\nFlag 34: Synchronized Command is in Progress\nFlag 35: Synchronized Sleeping Command is in Progress  \nFlag 36: Synchronized Rebooting Command is in Progress \n\nFlag 37: Inverter DC Imbalance \nFlag 38: Transfer Relay Failure\nFlag 39: Shutdown or Unable to Transfer\nFlag 40: Low Battery Shutdown\n\nFlag 41: Electronic Unit Fan Failure\nFlag 42: Main Relay Failure\nFlag 43: Bypass Relay Failure\nFlag 44: Temporary Bypass\n\nFlag 45: High Internal Temperature\nFlag 46: Battery Temperature Sensor Fault\nFlag 47: Input Out of Range for Bypass\nFlag 48: DC Bus Overvoltage\n\nFlag 49: PFC Failure\nFlag 50: Critical Hardware Fault\nFlag 51: Green Mode\nFlag 52: <Not Used>\n\nFlag 53: <Not Used>\nFlag 54: <Not Used>\nFlag 55: <Not Used>\nFlag 56: <Not Used>\n\nFlag 57: <Not Used>\nFlag 58: <Not Used>\nFlag 59: <Not Used>\nFlag 60: <Not Used>\n\nFlag 61: <Not Used>\nFlag 62: <Not Used>\nFlag 63: <Not Used>\nFlag 64: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvState\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2\",\n        }, # node\n        \"upsAdvStateAbnormalConditions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 32 flags representing\nthe current active UPS faults. If the Network Card\nis unable to determine the values of the flags, this\nvariable is set to 'UNKNOWN'. If this variable is not\nsupported by the connected UPS, this variable is set to\n'NOT SUPPORTED'.\n\nThe flags are numbered from 1 to 32, and read from left to\nright. The flags are defined as follows:\n\nFlag  1: Power Module Failure\nFlag  2: Main Intelligence Module Failure\nFlag  3: Redundant Intelligence Module Failure\nFlag  4: Battery Failure\n \nFlag  5: Load(kVA) Alarm Threshold Violation\nFlag  6: Redundancy Lost\nFlag  7: Redundancy Below Alarm Threshold\nFlag  8: Bypass not in Range; Either Frequency or Voltage\n\nFlag  9: Bypass Contactor Stuck in Bypass Condition\nFlag 10: Bypass Contactor Stuck in On-Line Condition\nFlag 11: In Bypass due to an Internal Fault\nFlag 12: In Bypass due to an Overload\n\nFlag 13: In Maintenance Bypass\nFlag 14: Input Circuit Braker Tripped Open\nFlag 15: System Level Fan Failure\nFlag 16: Redundant Intelligent Module in Control\n\nFlag 17: IIC Inter-Module Communication Failure\nFlag 18: No Working Power Modules\nFlag 19: Load Shutdown From Bypass; Input Frequency\nFlag 20: Runtime Below Alarm Threshold\n\nFlag 21: Extended Run Frame Fault\nFlag 22: Output Voltage out of Range\nFlag 23: UPS Not Synchronized\nFlag 24: No Batteries Installed\n\nFlag 25: Battery Voltage High\nFlag 26: UPS Specific Fault Detected\nFlag 27: Site Wiring Fault\nFlag 28: Backfeed Protection Relay Opened\n\nFlag 29: <Not Used>\nFlag 30: <Not Used>\nFlag 31: <Not Used>\nFlag 32: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvStateSymmetra3PhaseSpecificFaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 64 flags representing\nthe current active UPS specific faults for the Symmetra\n3-Phase UPS models. If the Network Card is unable to\ndetermine the values of the flags, this variable is set\nto 'UNKNOWN'. If the connected UPS does not use this\nvariable, it is set to 'NOT SUPPORTED'.\n\nThe flags are numbered from 1 to 64, and read from left\nto right. The bits are defined as follows:\n\nFlag  1: External Switch Gear Failure\nFlag  2: External Transformer Over Temperature\nFlag  3: External DC Circuit Breaker Tripped\nFlag  4: System Power Supply Failure\n  \nFlag  5: Battery Monitor Card Failure\nFlag  6: Battery Monitor Card Removed\nFlag  7: XR Communication Card Failure\nFlag  8: XR Communication Card Removed\n\nFlag  9: External Switch Gear Monitoring Card Failure\nFlag 10: External Switch Gear Monitoring Card Removed\nFlag 11: Internal DC Circuit Breaker Tripped\nFlag 12: Static Bypass Switch Failure\n\nFlag 13: System EEPROM Removed\nFlag 14: System EEPROM Failure\nFlag 15: UPS in Forced Bypass\nFlag 16: Static Bypass Switch Module Removed\n\nFlag 17: System Start-Up Configuration Fault\nFlag 18: Battery Charger Shutdown Externally\nFlag 19: <Not Used>\nFlag 20: <Not Used>\n\nFlag 21: <Not Used>\nFlag 22: <Not Used>\nFlag 23: <Not Used>\nFlag 24: <Not Used>\n\nFlag 25: <Not Used>\nFlag 26: <Not Used>\nFlag 27: <Not Used>\nFlag 28: <Not Used>\n\nFlag 29: <Not Used>\nFlag 30: <Not Used>\nFlag 31: <Not Used>\nFlag 32: <Not Used>\n\nFlag 33: <Not Used>\nFlag 34: <Not Used>\nFlag 35: <Not Used>\nFlag 36: <Not Used>\n\nFlag 37: <Not Used>\nFlag 38: <Not Used>\nFlag 39: <Not Used>\nFlag 40: <Not Used>\n\nFlag 41: <Not Used>\nFlag 42: <Not Used>\nFlag 43: <Not Used>\nFlag 44: <Not Used>\n\nFlag 45: <Not Used>\nFlag 46: <Not Used>\nFlag 47: <Not Used>\nFlag 48: <Not Used>\n\nFlag 49: <Not Used>\nFlag 50: <Not Used>\nFlag 51: <Not Used>\nFlag 52: <Not Used>\n\nFlag 53: <Not Used>\nFlag 54: <Not Used>\nFlag 55: <Not Used>\nFlag 56: <Not Used>\n\nFlag 57: <Not Used>\nFlag 58: <Not Used>\nFlag 59: <Not Used>\nFlag 60: <Not Used>\n\nFlag 61: <Not Used>\nFlag 62: <Not Used>\nFlag 63: <Not Used>\nFlag 64: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvStateDP300ESpecificFaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 64 flags representing\nthe current active UPS specific faults for the Silcon\nDP300E UPS models. If the Network Card is unable to\ndetermine the values of the flags, this variable is set\nto 'UNKNOWN'. If the connected UPS does not use this\nvariable, it is set to 'NOT SUPPORTED'.\n\nThe flags are numbered from 1 to 64, and read from left\nto right. The bits are defined as follows:\n\nFlag  1: Peak Current Limiter Active\nFlag  2: Bypass Power Supply Fault\nFlag  3: Delta Current Limiter Active\nFlag  4: Fan Fault\n  \nFlag  5: High DC warning\nFlag  6: Inverter Voltage Error\nFlag  7: Parallel Synchronization Error\nFlag  8: Second Power Supply Fault\n\nFlag  9: Internal Power Supply Fault\nFlag 10: <Not Used>\nFlag 11: <Not Used>\nFlag 12: <Not Used>\n\nFlag 13: <Not Used>\nFlag 14: Bypass Static Switch High Temperature\nFlag 15: High Battery Temperature\nFlag 16: Battery Weak\n\nFlag 17: <Not Used>\nFlag 18: System Locked in Operation Mode\nFlag 19: RAM1 Memory Write Error\nFlag 20: Memory Write Error\n\nFlag 21: Communication to VQ Bypass Lost\nFlag 22: Communication to VQ Output Lost\nFlag 23: Communication to DMU Lost\nFlag 24: Communication to Controller Lost\n\nFlag 25: Communication to Parallel IF Lost\nFlag 26: External Shutdown Accepted\nFlag 27: DC Capacitor Charge Error\nFlag 28: Communication to VQ Mains Lost\n\nFlag 29: Bypass Synchronization Error\nFlag 30: Charge Error\nFlag 31: SII Aux Input Activiated\nFlag 32: <Not Used>\n\nFlag 33: Blown Inverter Fuse\nFlag 34: Blown Rectifier Fuse\nFlag 35: Auxilliary 1 Fault\nFlag 36: <Not Used>\n\nFlag 37: <Not Used>\nFlag 38: <Not Used>\nFlag 39: <Not Used>\nFlag 40: <Not Used>\n\nFlag 41: <Not Used>\nFlag 42: <Not Used>\nFlag 43: <Not Used>\nFlag 44: <Not Used>\n\nFlag 45: <Not Used>\nFlag 46: High Temperature Charger Magnetic\nFlag 47: <Not Used>\nFlag 48: Battery Monitor Warning\n\nFlag 49: Battery Monitor Alarm\nFlag 50: <Not Used>\nFlag 51: <Not Used>\nFlag 52: <Not Used>\n\nFlag 53: TSM 1/2/3 Temperature Shutdown\nFlag 54: Charger 0/30 Temperature Warning\nFlag 55: Charger 0/30 Temperature Shutdown\nFlag 56: High Output Voltage\n\nFlag 57: SSW Temperature Over 90\nFlag 58: <Not Used>\nFlag 59: Low Current Failure In AC Capacitors\nFlag 60: <Not Used>\n\nFlag 61: Advanced Battery Management Not Installed\nFlag 62: <Not Used>\nFlag 63: <Not Used>\nFlag 64: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvStateSymmetraSpecificFaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 64 flags representing\nthe current active UPS specific faults for the Symmetra\nUPS models. If the Network Card is unable to determine\nthe values of the flags, this variable is set to 'UNKNOWN'.\nIf the connected UPS does not use this variable, it is\nset to 'NOT SUPPORTED'.\n\nThe flags are numbered from 1 to 64, and read from left\nto right. The bits are defined as follows:\n\nFlag  1: System Fault\nFlag  2: Bypass Relay Fault\nFlag  3: Power Module Turn Off Failure\nFlag  4: Frame Identification Fault\n  \nFlag  5: <Not Used>\nFlag  6: <Not Used>\nFlag  7: <Not Used>\nFlag  8: <Not Used>\n\nFlag  9: <Not Used>\nFlag 10: <Not Used>\nFlag 11: <Not Used>\nFlag 12: <Not Used>\n\nFlag 13: <Not Used>\nFlag 14: <Not Used>\nFlag 15: <Not Used>\nFlag 16: <Not Used>\n\nFlag 17: <Not Used>\nFlag 18: <Not Used>\nFlag 19: <Not Used>\nFlag 20: <Not Used>\n\nFlag 21: <Not Used>\nFlag 22: <Not Used>\nFlag 23: <Not Used>\nFlag 24: <Not Used>\n\nFlag 25: <Not Used>\nFlag 26: <Not Used>\nFlag 27: <Not Used>\nFlag 28: <Not Used>\n\nFlag 29: <Not Used>\nFlag 30: <Not Used>\nFlag 31: <Not Used>\nFlag 32: <Not Used>\n\nFlag 33: <Not Used>\nFlag 34: <Not Used>\nFlag 35: <Not Used>\nFlag 36: <Not Used>\n\nFlag 37: <Not Used>\nFlag 38: <Not Used>\nFlag 39: <Not Used>\nFlag 40: <Not Used>\n\nFlag 41: <Not Used>\nFlag 42: <Not Used>\nFlag 43: <Not Used>\nFlag 44: <Not Used>\n\nFlag 45: <Not Used>\nFlag 46: <Not Used>\nFlag 47: <Not Used>\nFlag 48: <Not Used>\n\nFlag 49: <Not Used>\nFlag 50: <Not Used>\nFlag 51: <Not Used>\nFlag 52: <Not Used>\n\nFlag 53: <Not Used>\nFlag 54: <Not Used>\nFlag 55: <Not Used>\nFlag 56: <Not Used>\n\nFlag 57: <Not Used>\nFlag 58: <Not Used>\nFlag 59: <Not Used>\nFlag 60: <Not Used>\n\nFlag 61: <Not Used>\nFlag 62: <Not Used>\nFlag 63: <Not Used>\nFlag 64: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvStateSmartUPSSpecificFaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 64 flags representing\nthe current active UPS specific faults for the Smart-UPS \nUPS models. If the Network Card is unable to determine\nthe values of the flags, this variable is set to\n'UNKNOWN'. If the connected UPS does not use this\nvariable, it is set to 'NOT SUPPORTED'.\n\nThe flags are numbered from 1 to 64, and read from left\nto right. The bits are defined as follows:\n\nFlag  1: EPO Switch Activated\nFlag  2: Static Bypass Switch Fault\nFlag  3: System Configuration Fault\nFlag  4: Power Supply Unit Fault\n  \nFlag  5: Weak Battery\nFlag  6: High Battery Temperature\nFlag  7: Internal Mechanical Bypass\nFlag  8: Loss Of Parallel Redundancy\n\nFlag  9: Parallel Bus Communication Fault on Cable 1\nFlag 10: Parallel Bus Communication Fault on Cable 2\nFlag 11: Auxiliary Bus Communication Fault\nFlag 12: Parallel Bus Termination Fault on Cable 1\n\nFlag 13: Parallel Bus Termination Fault on Cable 2\nFlag 14: Auxiliary Bus Termination Fault\nFlag 15: No Master Present In The Parallel System\nFlag 16: Overload on a Parallel Unit\n\nFlag 17: Parallel Configuration Fault\nFlag 18: <Not Used>\nFlag 19: <Not Used>\nFlag 20: <Not Used>\n\nFlag 21: <Not Used>\nFlag 22: <Not Used>\nFlag 23: <Not Used>\nFlag 24: <Not Used>\n\nFlag 25: <Not Used>\nFlag 26: <Not Used>\nFlag 27: <Not Used>\nFlag 28: <Not Used>\n\nFlag 29: <Not Used>\nFlag 30: <Not Used>\nFlag 31: <Not Used>\nFlag 32: <Not Used>\n\nFlag 33: <Not Used>\nFlag 34: <Not Used>\nFlag 35: <Not Used>\nFlag 36: <Not Used>\n\nFlag 37: <Not Used>\nFlag 38: <Not Used>\nFlag 39: <Not Used>\nFlag 40: <Not Used>\n\nFlag 41: <Not Used>\nFlag 42: <Not Used>\nFlag 43: <Not Used>\nFlag 44: <Not Used>\n\nFlag 45: <Not Used>\nFlag 46: <Not Used>\nFlag 47: <Not Used>\nFlag 48: <Not Used>\n\nFlag 49: <Not Used>\nFlag 50: <Not Used>\nFlag 51: <Not Used>\nFlag 52: <Not Used>\n\nFlag 53: <Not Used>\nFlag 54: <Not Used>\nFlag 55: <Not Used>\nFlag 56: <Not Used>\n\nFlag 57: <Not Used>\nFlag 58: <Not Used>\nFlag 59: <Not Used>\nFlag 60: <Not Used>\n\nFlag 61: <Not Used>\nFlag 62: <Not Used>\nFlag 63: <Not Used>\nFlag 64: <Not Used>\"\"\",\n        }, # scalar\n        \"upsAdvStateSystemMessages\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 3 digit Decimal code\nrepresenting the current active message from the\nSystem Message Register. Each code should remain active\nfor a minimum of 15 seconds. However, in the worst case\nscenario, a code could be cleared after only 5 seconds.\nIt is recommended that this object be polled at least\nonce every 4 seconds in order to get the most accurate\nrepresentation of the current UPS System Message. If the\nNetwork Card is unable to determine the value of the\nSystem Message Register, this variable is set to\n'UNKNOWN'.\"\"\",\n        }, # scalar\n        \"upsAdvStateTotaltimeonbattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total time the UPS has been in battery operation.\"\"\",\n        }, # scalar\n        \"upsAdvStateTotaltimeonbypass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total time the UPS has been in bypass operation.\"\"\",\n        }, # scalar\n        \"upsAdvStateTotaltimeonNormal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total time the UPS has been in normal operation.\"\"\",\n        }, # scalar\n        \"upsAdvStateNumberoftimesonbattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times the UPS was on battery.\nSince the last reset of statistical data.\"\"\",\n        }, # scalar\n        \"upsAdvStateNumberoftimesbypass\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times the UPS was in bypass.\nSince the last reset of statistical data.\"\"\",\n        }, # scalar\n        \"upsAdvStateNumberoftimesNormal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.11.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times the UPS was in normal operation.\nSince the last reset of statistical data.\"\"\",\n        }, # scalar\n        \"upsOutletGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12\",\n        }, # node\n        \"upsOutletGroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1\",\n        }, # node\n        \"upsOutletGroupStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlet groups for the UPS.\"\"\",\n        }, # scalar\n        \"upsOutletGroupStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting status of the outlet groups. The number of\nentries is contained in the upsOutletGroupStatusTableSize OID.\"\"\",\n        }, # table\n        \"upsOutletGroupStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsOutletGroupStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet group status to get.\"\"\",\n        }, # row\n        \"upsOutletGroupStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet group entry.\"\"\",\n        }, # column\n        \"upsOutletGroupStatusName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet group. This OID is provided\nfor informational purposes only. This value is set\nby the upsOutletGroupConfigName OID.\"\"\",\n        }, # column\n        \"upsOutletGroupStatusGroupState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupStatusOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupStatusOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upsOutletGroupStatusUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet group state. If the outlet\ngroup is on, the upsOutletGroupStatusOn (1) value will be returned. If\nthe outlet group is off, the upsOutletGroupStatusOff (2) value will be\nreturned. If the state of the outlet group cannot be determined, the\nupsOutletGroupStatusUnknown (3) value will be returned.\"\"\",\n        }, # column\n        \"upsOutletGroupStatusCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupNoCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the command pending\nstate of the outlet group. If a command is pending on the \noutlet group, the upsOutletGroupCommandPending (1) value\nwill be returned. If there is not a command pending\non the outlet group, the upsOutletGroupNoCommandPending (2)\nwill be returned.\"\"\",\n        }, # column\n        \"upsOutletGroupStatusOutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsSwitchedOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsMainOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the type of outlet group.\nIf present in the system, the main outlet group is\n'unswitched' and must be on in order for any of the switched\noutlet groups to be on. Conversely, if the main outlet group\nis off, all the switched outlet groups must also be off.\nTherefore, any commands made to the main outlet group that\nturn it off will also be applied to all switched outlet\ngroups that are on, unless the state of a switched outlet\ngroup prevents it, in which case the command will fail.\"\"\",\n        }, # column\n        \"upsOutletGroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2\",\n        }, # node\n        \"upsOutletGroupConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlet groups for the UPS.\"\"\",\n        }, # scalar\n        \"upsOutletGroupConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of outlet groups to configure. The number of entries\nis defined by the upsOutletGroupConfigTableSize OID.\"\"\",\n        }, # table\n        \"upsOutletGroupConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsOutletGroupConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet groups to configure.\"\"\",\n        }, # row\n        \"upsOutletGroupConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet group entry.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet group.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigPowerOnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (seconds) the outlet group will delay\npowering on when the delayed on, reboot, or shutdown command is\napplied. Allowed values vary by UPS model. The value of -1 is\nused for Never if supported by the UPS and the outlet group.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigPowerOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (seconds) the outlet group will delay\npowering off when the delayed off, reboot, or shutdown command is\napplied. Allowed values vary by UPS model. The value of -1 is\nused for Never if supported by the UPS and the outlet group.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"During a reboot sequence, power is turned off and then \nback on. This OID defines the amount of time to wait \n(seconds) after turning the power off, at the start\nof the sequence, before initiating the power on sequence.\nAllowed values vary by UPS model.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigMinReturnRuntime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"In an Outlet Group shutdown sequence, the Outlet Group cycles\npower off then on. This OID defines the minimum amount of UPS\nruntime (seconds) that is required in order to power the\nOutlet Group on. Allowed values vary by UPS model.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigOutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsSwitchedOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsMainOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the type of outlet group.\nIf present in the system, the main outlet group is\n'unswitched' and must be on in order for any of the switched\noutlet groups to be on. Conversely, if the main outlet group\nis off, all the switched outlet groups must also be off.\nTherefore, any commands made to the main outlet group that\nturn it off will also be applied to all switched outlet\ngroups that are on, unless the state of a switched outlet\ngroup prevents it, in which case the command will fail.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedControlSkipOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupConfigSkipOffDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupConfigUseOffDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures whether the outlet group's off delay setting\n(upsOutletGroupConfigPowerOffDelay) will be used in a load\nshedding situation, where applicable.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedControlAutoRestart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupConfigAutoRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupConfigManualRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures whether the outlet group will automatically restart\nafter a load shedding situation, where applicable.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedControlTimeOnBattery\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupConfigDisableTimeOnBatteryLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupConfigEnableTimeOnBatteryLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures whether the outlet group will load shed (turn off)\nafter the UPS's time on battery has exceeded the\nupsOutletGroupConfigLoadShedTimeOnBattery OID setting. The\nsettings for upsOutletGroupConfigLoadShedControlSkipOffDelay\nand upsOutletGroupConfigLoadShedControlAutoRestart are valid\nfor this load shed condition.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedControlRuntimeRemaining\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupConfigDisableRuntimeRemainingLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupConfigEnableRuntimeRemainingLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures whether the outlet group will load shed (turn off)\nwhen the UPS is on battery and the remaining runtime is less\nthan the upsOutletGroupConfigLoadShedRuntimeRemaining OID\nsetting. The settings for\nupsOutletGroupConfigLoadShedControlSkipOffDelay and\nupsOutletGroupConfigLoadShedControlAutoRestart are valid for\nthis load shed condition.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedControlInOverload\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupConfigDisableInOverloadLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupConfigEnableInOverloadLoadShed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Configures whether the outlet group will load shed (turn off)\nwhen the UPS is in an overload condition. The setting for\nupsOutletGroupConfigLoadShedControlSkipOffDelay is valid for\nthis load shed condition. Returns -1 if not supported by this\noutlet group.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedTimeOnBattery\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the UPS has been on battery for more time than this\nvalue, the outlet group will turn off if this condition is\nenabled by the upsOutletGroupConfigLoadShedControlTimeOnBattery\nOID. Allowed values vary by UPS model.\"\"\",\n        }, # column\n        \"upsOutletGroupConfigLoadShedRuntimeRemaining\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the runtime remaining is less than this value, the outlet\ngroup will turn off if this condition is enabled by the\nupsOutletGroupConfigLoadShedControlRuntimeRemaining OID.\nAllowed values vary by UPS model.\"\"\",\n        }, # column\n        \"upsOutletGroupControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3\",\n        }, # node\n        \"upsOutletGroupControlTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlet groups for the UPS.\"\"\",\n        }, # scalar\n        \"upsOutletGroupControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual outlet groups. The number of\nentries is contained in the upsOutletGroupControlTableSize OID.\"\"\",\n        }, # table\n        \"upsOutletGroupControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsOutletGroupControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet group to control.\"\"\",\n        }, # row\n        \"upsOutletGroupControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet group entry.\"\"\",\n        }, # column\n        \"upsOutletGroupControlName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet group. This OID is provided\nfor informational purposes only. This value is set\nby the upsOutletGroupConfigName OID.\"\"\",\n        }, # column\n        \"upsOutletGroupControlCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsOutletGroupImmediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsOutletGroupImmediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upsOutletGroupImmediateRebootWithOrWithoutAC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"upsOutletGroupDelayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"upsOutletGroupDelayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"upsOutletGroupDelayedRebootWithOrWithoutAC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"upsOutletGroupCancelPendingCommand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"upsOutletGroupControlUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"upsOutletGroupImmediateRebootShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"upsOutletGroupDelayedRebootShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet group state. If the outlet\ngroup is on, the upsOutletGroupImmediateOn (1) value will be returned. If\nthe outlet group is off, the upsOutletGroupImmediateOff (2) value will be\nreturned.\n\nIf the state of the outlet group cannot be determined, the\nupsOutletGroupControlUnknown (8) value will be returned.\n\nSetting this variable to upsOutletGroupImmediateOn (1) will turn the\noutlet group on immediately.\n\nSetting this variable to upsOutletGroupImmediateOff (2) will turn the\noutlet group off immediately.\n\nSetting this variable to upsOutletGroupImmediateRebootWithOrWithoutAC (3)\nwill turn the outlet group off immediately, wait the\nupsOutletGroupConfigRebootDuration OID time, wait the\nupsOutletGroupConfigPowerOnDelay OID, and then turn the outlet group on\nregardless of the AC input power on the UPS.\n\nSetting this variable to upsOutletGroupDelayedOn (4) will turn the outlet\ngroup on after the upsOutletGroupConfigPowerOnDelay OID has elapsed.\n\nSetting this variable to upsOutletGroupDelayedOff (5) will turn the outlet\ngroup off after the upsOutletGroupConfigPowerOffDelay OID has elapsed.\n\nSetting this variable to upsOutletGroupDelayedRebootWithOrWithoutAC (6)\nwill turn the outlet group off after the upsOutletGroupConfigPowerOffDelay\nOID has elapsed, wait the upsOutletGroupConfigRebootDuration OID time, wait\nthe upsOutletGroupConfigPowerOnDelay OID, and then turn the outlet group\non regardless of the AC input power on the UPS.\n\nSetting this variable to upsOutletGroupCancelPendingCommand (7) will\ncause any pending command to this outlet group to be canceled.\n\nSetting this variable to upsOutletGroupImmediateRebootShutdown (9) will\nturn the outlet group off immediately, wait for the AC power to be okay\n(a minimum of the upsOutletGroupConfigRebootDuration OID time), wait the\nupsOutletGroupConfigPowerOnDelay OID time, and then turn the outlet\ngroup on.\n\nSetting this variable to upsOutletGroupDelayedRebootShutdown (10) will\nturn the outlet group off after the upsOutletGroupConfigPowerOffDelay OID\nhas elapsed, wait for the AC power to be okay (a minimum of the\nupsOutletGroupConfigRebootDuration OID time), wait the\nupsOutletGroupConfigPowerOnDelay OID time, and then turn the outlet\ngroup on.\n\nIn systems with a main outlet group, commands to the main outlet group must\nbe performed with caution. It may be clearer to use the ups control commands\navailable from upsAdvControl... OIDs. If any command is made to the main\noutlet group that will turn it off, one of two things will happen:\n1) If any switched outlet group is in a state that prevents this command\nfrom occurring on the main outlet group, the command will be rejected. Note\nthat a switched outlet group being on without a command in progress is not a\nstate that normally prevents the command.\n2) The command will be accepted and applied to the main outlet group and all\nswitched outlet groups that are on.\n\nThere is one additional special case for systems with a main outlet group.\nIf the main outlet group is off and a switched outlet group is commanded to\nturn on, the on command will be applied to both the main outlet group and\nthat switched outlet group.\"\"\",\n        }, # column\n        \"upsOutletGroupControlOutletType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.12.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsSwitchedOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsMainOutletGroup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the type of outlet group.\nIf present in the system, the main outlet group is\n'unswitched' and must be on in order for any of the switched\noutlet groups to be on. Conversely, if the main outlet group\nis off, all the switched outlet groups must also be off.\nTherefore, any commands made to the main outlet group that\nturn it off will also be applied to all switched outlet\ngroups that are on, unless the state of a switched outlet\ngroup prevents it, in which case the command will fail.\"\"\",\n        }, # column\n        \"upsDiagnostics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13\",\n        }, # node\n        \"upsDiagnosticIM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1\",\n        }, # node\n        \"upsDiagIMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Intelligence Modules in or attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagIMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual Intelligence Modules. The number of\nentries is contained in the upsDiagIMTableSize OID.\"\"\",\n        }, # table\n        \"upsDiagIMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagIMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics and information of an Intelligence Module.\"\"\",\n        }, # row\n        \"upsDiagIMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Intelligence Module entry.\"\"\",\n        }, # column\n        \"upsDiagIMType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"imUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"imMIM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"imRIM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the Intelligence Module.\nimUnknown(1) indicates the IM type is unknown.\nimMIM(2) indicates the IM type is a Main Intelligence Module.\nimRIM(3) indicates the IM type is Redundant Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagIMStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Intelligence Module.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagIMFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagIMSlaveFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The slave firmware revision of the Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagIMHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagIMSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagIMManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacture date of the Intelligence Module.\"\"\",\n        }, # column\n        \"upsDiagnosticPowerModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2\",\n        }, # node\n        \"upsDiagPMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of Power Modules supported by the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagPMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of Individual Power modules. The number of\nentries is contained in the upsDiagPMTableSize OID.\"\"\",\n        }, # table\n        \"upsDiagPMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagPMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an Power Module.\"\"\",\n        }, # row\n        \"upsDiagPMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Power Module entry.\"\"\",\n        }, # column\n        \"upsDiagPMStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Power Module.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagPMFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Power Module.\"\"\",\n        }, # column\n        \"upsDiagPMHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Power Module.\"\"\",\n        }, # column\n        \"upsDiagPMSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Power Module.\"\"\",\n        }, # column\n        \"upsDiagPMManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacture date of the Power Module.\"\"\",\n        }, # column\n        \"upsDiagnosticBatteries\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3\",\n        }, # node\n        \"upsDiagBatteryTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of batteries supported by the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagBatteryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual batteries. The number of\nentries is contained in the upsDiagBattTableSize OID.\"\"\",\n        }, # table\n        \"upsDiagBatteryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagBatteryIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a battery.\"\"\",\n        }, # row\n        \"upsDiagBatteryFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the battery frame entry.\nFrame 0 indicates the Main frame. Extended Run (XR) frames\nstart from index 1.\"\"\",\n        }, # column\n        \"upsDiagBatteryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the battery entry.\"\"\",\n        }, # column\n        \"upsDiagBatteryStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"highTemperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"replaceImmediately\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lowCapacity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the battery.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the battery status is OK.\nfailed(4) indicates the battery status is failed.\nhighTemperature(5) indicates the battery has a high temperature condition.\nreplaceImmediately(6) indicates the battery must be replaced immediately.\nlowCapacity(7) indicates the battery has a low capacity.\"\"\",\n        }, # column\n        \"upsDiagBatterySerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the battery.\"\"\",\n        }, # column\n        \"upsDiagBatteryFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the battery.\"\"\",\n        }, # column\n        \"upsDiagBatteryManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacture date of the battery.\"\"\",\n        }, # column\n        \"upsDiagBatteryType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery type or rating for the battery.\"\"\",\n        }, # column\n        \"upsDiagnosticSubsystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4\",\n        }, # node\n        \"upsDiagSubSysFrameTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frames attached to the UPS including the Main frame.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysFrameTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual XR Frames.\"\"\",\n        }, # table\n        \"upsDiagSubSysFrameEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysFrameIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an XR Frame.\"\"\",\n        }, # row\n        \"upsDiagSubSysFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysFrameType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"frameTypeMain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"frameTypeXR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"frameTypeLXR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of Frame.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nframeTypeMain(3) indicates the frame type is the Main Frame.\nframeTypeXR(4) indicates the frame type is an XR Frame.\nframeTypeLXR(5) indicates the frame type is an LXR Frame.\"\"\",\n        }, # column\n        \"upsDiagSubSysFrameFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the frame.\"\"\",\n        }, # column\n        \"upsDiagSubSysFrameHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the frame.\"\"\",\n        }, # column\n        \"upsDiagSubSysFrameSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the frame.\"\"\",\n        }, # column\n        \"upsDiagSubSysFrameManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacture date of the frame.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Internal Bypass switches attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysIntBypSwitchTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of the Internal Bypass Switch.\"\"\",\n        }, # table\n        \"upsDiagSubSysIntBypSwitchEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysIntBypSwitchIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of the Internal Bypass Switch.\"\"\",\n        }, # row\n        \"upsDiagSubSysIntBypSwitchFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Internal Bypass Switch index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Internal Bypass Switch status.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Internal Bypass Switch.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Internal Bypass Switch.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Internal Bypass Switch.\"\"\",\n        }, # column\n        \"upsDiagSubSysIntBypSwitchManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacture date of the Internal Bypass Switch.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Battery Monitor Boards attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysBattMonitorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of the Battery Monitor Board.\"\"\",\n        }, # table\n        \"upsDiagSubSysBattMonitorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysBattMonitorIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of the Battery Monitor Board.\"\"\",\n        }, # row\n        \"upsDiagSubSysBattMonitorFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the Battery Monitor Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Battery Monitor Board.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Battery Monitor Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Battery Monitor Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Battery Monitor Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysBattMonitorManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the manufacture for the Battery Monitor Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of External Switch Gears attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysExternalSwitchGearTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of the individual External Switch Gear.\"\"\",\n        }, # table\n        \"upsDiagSubSysExternalSwitchGearEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysExternalSwitchGearIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an individual External Switch Gear.\"\"\",\n        }, # row\n        \"upsDiagSubSysExternalSwitchGearFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the External Switch Gear.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the External Switch Gear.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the External Switch Gear monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the External Switch Gear monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the External Switch Gear monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalSwitchGearManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the manufacture for the External Switch Gear monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysDisplayInterfaceCardTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Display Interface Cards attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysDisplayInterfaceCardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual Display Interface Cards.\"\"\",\n        }, # table\n        \"upsDiagSubSysDisplayInterfaceCardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysDisplayInterfaceCardIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a Display Interface Card.\"\"\",\n        }, # row\n        \"upsDiagSubSysDisplayInterfaceCardFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysDisplayInterfaceCardIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the Display Interface Card.\"\"\",\n        }, # column\n        \"upsDiagSubSysDisplayInterfaceCardStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Display Interface Card.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysDCCircuitBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC Circuit Breakers attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysDCCircuitBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual DC Circuit Breakers.\"\"\",\n        }, # table\n        \"upsDiagSubSysDCCircuitBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysDCCircuitBreakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a DC Circuit Breaker.\"\"\",\n        }, # row\n        \"upsDiagSubSysDCCircuitBreakerFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysDCCircuitBreakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the DC Circuit Breaker.\"\"\",\n        }, # column\n        \"upsDiagSubSysDCCircuitBreakerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the DC Circuit Breaker.\nunknown(1) indicates the circuit breaker status is unknown.\nnotInstalled(2) indicates the circuit breaker is not installed.\nopened(3) indicates the circuit breaker is opened.\nclosed(4) indicates the circuit breaker is closed.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of System Power Supplies attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysSystemPowerSupplyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual System Power Supplies.\"\"\",\n        }, # table\n        \"upsDiagSubSysSystemPowerSupplyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysSystemPowerSupplyIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a System Power Supply.\"\"\",\n        }, # row\n        \"upsDiagSubSysSystemPowerSupplyFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of a System Power Supply.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the System Power Supply.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the System Power Supply monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the System Power Supply monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplySerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the System Power Supply monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysSystemPowerSupplyManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the manufacture for the System Power Supply monitor card.\"\"\",\n        }, # column\n        \"upsDiagSubSysXRCommunicationCardTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of XR Communication Cards attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysXRCommunicationCardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual XR Communication Cards.\"\"\",\n        }, # table\n        \"upsDiagSubSysXRCommunicationCardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysXRCommunicationCardIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an XR Communication Card.\"\"\",\n        }, # row\n        \"upsDiagSubSysXRCommunicationCardFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysXRCommunicationCardIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an XR Communication Card.\"\"\",\n        }, # column\n        \"upsDiagSubSysXRCommunicationCardStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the XR Communication Card.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysXRCommunicationCardFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the XR Communication card.\"\"\",\n        }, # column\n        \"upsDiagSubSysXRCommunicationCardSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the XR Communication card.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalPowerFrameBoardTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of External Power Frame Boards attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysExternalPowerFrameBoardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual External Power Frame Boards.\"\"\",\n        }, # table\n        \"upsDiagSubSysExternalPowerFrameBoardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysExternalPowerFrameBoardIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an External Power Frame Board.\"\"\",\n        }, # row\n        \"upsDiagSubSysExternalPowerFrameBoardFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalPowerFrameBoardIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an External Power Frame Board.\"\"\",\n        }, # column\n        \"upsDiagSubSysExternalPowerFrameBoardStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the External Power Frame Board.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysChargerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Chargers attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysChargerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual chargers.\"\"\",\n        }, # table\n        \"upsDiagSubSysChargerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysChargerIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a charger.\"\"\",\n        }, # row\n        \"upsDiagSubSysChargerFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysChargerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of a charger.\"\"\",\n        }, # column\n        \"upsDiagSubSysChargerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Charger.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Inverters attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysInverterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual Inverters.\"\"\",\n        }, # table\n        \"upsDiagSubSysInverterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysInverterIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of an Inverter.\"\"\",\n        }, # row\n        \"upsDiagSubSysInverterFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an Inverter.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Inverter.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Inverter monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Inverter monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Inverter monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysInverterManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.22.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of manufacture for the Inverter monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Power Factor Correction devices attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysPowerFactorCorrectionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of individual PowerFactorCorrections.\"\"\",\n        }, # table\n        \"upsDiagSubSysPowerFactorCorrectionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysPowerFactorCorrectionIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a Power Factor Correction.\"\"\",\n        }, # row\n        \"upsDiagSubSysPowerFactorCorrectionFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frame index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of a Power Factor Correction.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"offOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Power Factor Correction.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\noffOk(3) indicates the device status is off and OK.\nonOk(4) indicates the device status is on and OK.\noffFail(5) indicates the device status is off and failed.\nonFail(6) indicates the device status is on and failed.\nlostComm(7) indicates the device has lost communication.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Power Factor Correction monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Power Factor Correction monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionSerialNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Power Factor Correction monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysPowerFactorCorrectionManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.24.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the manufacture for the Power Factor Correction monitor.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Network Communication Cards attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubSysNetworkComCardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting diagnostics information of an individual Network Communication Card.\"\"\",\n        }, # table\n        \"upsDiagSubSysNetworkComCardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsDiagSubSysNetworkComCardIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of a Network Communication Card.\"\"\",\n        }, # row\n        \"upsDiagSubSysNetworkComCardIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS network and display interface communication card index entry.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of the UPS network and display interface communication card.\nThis value is set at the factory.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of the UPS network and display interface communication card.\nThis value is set at the factory.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardDateOfManufacture\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the UPS network and display interface communication card was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the UPS network and display interface communication card. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardFirmwareAppRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application firmware revision of the \nUPS network and display interface communication card.\"\"\",\n        }, # column\n        \"upsDiagSubSysNetworkComCardFirmwareAppOSRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.4.26.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application operating system firmware revision of the \nUPS network and display interface communication card.\"\"\",\n        }, # column\n        \"upsDiagnosticExternalDevices\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5\",\n        }, # node\n        \"upsDiagSwitchGear\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1\",\n        }, # node\n        \"upsDiagSwitchGearStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"overtemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Switch Gear.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nfail(4) indicates the device status has failed.\nlostComm(5) indicates the device has lost communication.\novertemp(6) indicates the device has an over temperature condition.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearInputSwitchStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Switch Gear Input Switch.\nunknown(1) indicates the switch status is unknown.\nnotInstalled(2) indicates the switch is not installed.\nopened(3) indicates the switch is opened.\nclosed(4) indicates the switch is closed.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearOutputSwitchStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Switch Gear Output Switch.\nunknown(1) indicates the switch status is unknown.\nnotInstalled(2) indicates the switch is not installed.\nopened(3) indicates the switch is opened.\nclosed(4) indicates the switch is closed.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearBypassSwitchStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Switch Gear Bypass Switch.\nunknown(1) indicates the switch status is unknown.\nnotInstalled(2) indicates the switch is not installed.\nopened(3) indicates the switch is opened.\nclosed(4) indicates the switch is closed.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearBypassInputSwitchStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Switch Gear Bypass Input Switch.\nunknown(1) indicates the switch status is unknown.\nnotInstalled(2) indicates the switch is not installed.\nopened(3) indicates the switch is opened.\nclosed(4) indicates the switch is closed.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of switchgear breakers attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSwitchGearBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Switchgear breaker table.\"\"\",\n        }, # table\n        \"upsDiagSwitchGearBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"switchgearBreakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of switchgear breakers.\"\"\",\n        }, # row\n        \"switchgearBreakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the switchgear breaker.\"\"\",\n        }, # column\n        \"switchgearBreakerPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if the switchgear breaker is present.\nnotPresent (1) indicates that the breaker is not present.\npresent (2) indicates that the breaker is present.\"\"\",\n        }, # column\n        \"switchgearBreakerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the switchgear breaker.\"\"\",\n        }, # column\n        \"upsDiagSubFeedBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of subfeed breakers attached to the UPS.\"\"\",\n        }, # scalar\n        \"upsDiagSubFeedBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Subfeed breaker table.\"\"\",\n        }, # table\n        \"upsDiagSubFeedBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"subfeedBreakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of subfeed breakers.\"\"\",\n        }, # row\n        \"subfeedBreakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the subfeed breakers.\"\"\",\n        }, # column\n        \"subfeedBreakerPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if the subfeed breaker is present.\nnotPresent (1) indicates that the breaker is not present.\npresent (2) indicates that the breaker is present.\"\"\",\n        }, # column\n        \"subfeedBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating of the installed subfeed breaker.\"\"\",\n        }, # column\n        \"subfeedBreakerUpperAcceptPowerWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum acceptable load before warning is issued.\nExpressed as percent of the subfeed breaker rating.\"\"\",\n        }, # column\n        \"subfeedBreakerUpperAcceptPowerCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.1.9.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"125\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"125\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum load before a critical alarm occurs.\nExpressed as percent of the subfeed breaker rating.\"\"\",\n        }, # column\n        \"upsDiagMCCBBox\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.2\",\n        }, # node\n        \"upsDiagMCCBBoxStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the MCCB Box (Molded Case Circuit Breaker Box) external device.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nopened(3) indicates the circuit is opened.\nclosed(4) indicates the circuit is closed.\"\"\",\n        }, # scalar\n        \"upsDiagTransformer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.3\",\n        }, # node\n        \"upsDiagTransformerStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"overtemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the External Transformer.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nfail(4) indicates the device status has failed.\nlostComm(5) indicates the device has lost communication.\novertemp(6) indicates the device has an over temperature condition.\nopened(7) indicates the circuit is opened.\nclosed(8) indicates the circuit is closed.\"\"\",\n        }, # scalar\n        \"upsDiagnosticComBus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6\",\n        }, # node\n        \"upsDiagComBusInternalMIMStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rxFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"txFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the internal MIM communication bus.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nlostComm(4) indicates the device has lost communication.\nrxFailure(5) indicates the device has a receive failure.\ntxFailure(6) indicates the device has a transmit failure.\"\"\",\n        }, # scalar\n        \"upsDiagComBusInternalRIMStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rxFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"txFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the internal RIM communication bus.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nlostComm(4) indicates the device has lost communication.\nrxFailure(5) indicates the device has a receive failure.\ntxFailure(6) indicates the device has a transmit failure.\"\"\",\n        }, # scalar\n        \"upsDiagComBusMIMtoRIMStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rxFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"txFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the MIM to RIM communication bus.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nlostComm(4) indicates the device has lost communication.\nrxFailure(5) indicates the device has a receive failure.\ntxFailure(6) indicates the device has a transmit failure.\"\"\",\n        }, # scalar\n        \"upsDiagComBusExternalMIMStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rxFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"txFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the external MIM communication bus.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nlostComm(4) indicates the device has lost communication.\nrxFailure(5) indicates the device has a receive failure.\ntxFailure(6) indicates the device has a transmit failure.\"\"\",\n        }, # scalar\n        \"upsDiagComBusExternalRIMStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.13.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lostComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rxFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"txFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the external RIM communication bus.\nunknown(1) indicates the device status is unknown.\nnotInstalled(2) indicates the device is not installed.\nok(3) indicates the device status is OK.\nlostComm(4) indicates the device has lost communication.\nrxFailure(5) indicates the device has a receive failure.\ntxFailure(6) indicates the device has a transmit failure.\"\"\",\n        }, # scalar\n        \"upsParallelSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14\",\n        }, # node\n        \"upsParallelSysLocalAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the UPS ID number in the parallel system.\"\"\",\n        }, # scalar\n        \"upsParallelSysRemoteAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the total number of UPSs in parallel.\"\"\",\n        }, # scalar\n        \"upsParallelSysRedundancy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nplus0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nplus1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nplus2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"nplus3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"nplus4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"nplus5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The redundancy warning level for paralleled UPS\nnplus0 (1) indicates that there are no redundant units.\nnplus1 (2) indicates that there is one redundant unit.\nnplus2 (3) indicates that there are two redundant units.\nnplus3 (4) indicates that there are three redundant units.\nnplus4 (5) indicates that there are four redundant unit.\nnplus5 (6) indicates that there are five redundant units.\"\"\",\n        }, # scalar\n        \"upsParallelInputMaximumCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximum input RMS current of the parallel system\nmeasured in Amperes.\"\"\",\n        }, # scalar\n        \"upsParallelTotalOutputPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Total Ouptut power of UPS in KW \nwhen UPS are configured in parallel\nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # scalar\n        \"upsParallelTotalOutputApparentPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Total Ouptut Apparent power of UPS in kVA \nwhen UPS are configured in parallel \nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # scalar\n        \"upsParallelInputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.\"\"\",\n        }, # table\n        \"upsParallelInputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsParallelInputPhaseTableIndex\",\n                \"upsParallelInputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input phase.\"\"\",\n        }, # row\n        \"upsParallelInputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The parallel unit identifier.\"\"\",\n        }, # column\n        \"upsParallelInputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase identifier.\"\"\",\n        }, # column\n        \"upsParallelInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input current in amperes, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputActivePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input power in kW, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input apparent power in kVA, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage of UPS in volts, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peak input voltage in VAC measured since the last reset,\nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peak input current in amperes measured since last reset, \nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelInputTotalActivePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total active input power of the parallel system in kW.\"\"\",\n        }, # column\n        \"upsParallelInputTotalApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total apparent input power of the parallel system in kVA.\"\"\",\n        }, # column\n        \"upsParallelOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of\nentries is given by the sum of the upsPhaseNumOutputPhases.\"\"\",\n        }, # table\n        \"upsParallelOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsParallelOutputPhaseTableIndex\",\n                \"upsParallelOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output phase.\"\"\",\n        }, # row\n        \"upsParallelOutputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"upsParallelOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output phase identifier.\"\"\",\n        }, # column\n        \"upsParallelOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current in amperes drawn \nby the load on the UPS, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsParallelOutputLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output load in VA, or -1 if it's unsupported\nby this UPS.\"\"\",\n        }, # column\n        \"upsParallelOutputPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the UPS load capacity in VA at \npresent redundancy being used on this output phase, \nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output power in Watts, or -1 if it's\nunsupported by this UPS.\"\"\",\n        }, # column\n        \"upsParallelOutputApparentPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of entries\nis given by the value of upsOutputNumPhases.\"\"\",\n        }, # table\n        \"upsParallelOutputApparentPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsParallelOutputApparentPowerTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output.\"\"\",\n        }, # row\n        \"upsParallelOutputApparentPowerTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS parallel output identifier.\"\"\",\n        }, # column\n        \"upsParallelOutputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The apparent power of each of UPS in kVA\nwhen UPS are configured in parallel.\"\"\",\n        }, # column\n        \"upsParallelDiagSubSysBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for diagnostics of parallel Circuit Breakers.\"\"\",\n        }, # table\n        \"upsParallelDiagSubSysBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsParallelDiagSubSysBreakerFrameIndex\",\n                \"upsParallelDiagSubSysBreakerIndex\",\n            ],\n            \"description\" :\n                \"\"\"The diagnostics of Circuit Breaker.\"\"\",\n        }, # row\n        \"upsParallelDiagSubSysBreakerFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Parallel UPS index entry.\"\"\",\n        }, # column\n        \"upsParallelDiagSubSysBreakerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the Circuit Breaker.\"\"\",\n        }, # column\n        \"upsParallelDiagSubSysBreakerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Circuit Breaker.\nunknown(1) indicates the circuit breaker status is unknown.\nnotInstalled(2) indicates the circuit breaker is not installed.\nopened(3) indicates the circuit breaker is opened.\nclosed(4) indicates the circuit breaker is closed.\"\"\",\n        }, # column\n        \"upsParallelDiagSubSysBreakerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.10.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of Circuit Breaker.\"\"\",\n        }, # column\n        \"upsParallelOutputTotalPercentLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.14.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the UPS total load capacity in kVA \nor -1 if it's unsupported by this UPS.\"\"\",\n        }, # scalar\n        \"upsPhysicalLayout\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15\",\n        }, # node\n        \"upsIOFrameLayoutPositionID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of UPS frame.\"\"\",\n        }, # scalar\n        \"upsBottomFeedFrameLayoutPositionID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of bottom feed frame.\"\"\",\n        }, # scalar\n        \"upsSwitchGearLayoutPositionID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of switchgear.\"\"\",\n        }, # scalar\n        \"upsBatteryFrameLayoutTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of battery frames.\"\"\",\n        }, # scalar\n        \"upsBatteryFrameLayoutTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Battery frame layout position ID table.\"\"\",\n        }, # table\n        \"upsBatteryFrameLayoutEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"batteryFrameIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of layout position IDs of battery frames.\"\"\",\n        }, # row\n        \"batteryFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the battery frame.\"\"\",\n        }, # column\n        \"batteryFramePositionID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of each of the battery frames in the row.\"\"\",\n        }, # column\n        \"upsSideCarFrameLayoutTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of sidecar frames.\"\"\",\n        }, # scalar\n        \"upsSideCarFrameLayoutTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Sidecar frame layout position ID table.\"\"\",\n        }, # table\n        \"upsSideCarFrameLayoutEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sideCarFrameIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of sidecar frame layout position IDs.\"\"\",\n        }, # row\n        \"sideCarFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the sidecar frame.\"\"\",\n        }, # column\n        \"sideCarFramePositionID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of each of the sidecar frames in the row.\"\"\",\n        }, # column\n        \"upsPowerFrameLayoutTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of power frames.\"\"\",\n        }, # scalar\n        \"upsPowerFrameLayoutTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Power frame layout position ID table.\"\"\",\n        }, # table\n        \"upsPowerFrameLayoutEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerFrameIndex\",\n            ],\n            \"description\" :\n                \"\"\"A list of power frame layout position IDs.\"\"\",\n        }, # row\n        \"powerFrameIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the power frame.\"\"\",\n        }, # column\n        \"powerFramePositionID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.15.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Defines the position ID of each of the power frames in the row.\"\"\",\n        }, # column\n        \"upsIntegratedATS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16\",\n        }, # node\n        \"upsIntegratedATSSelectedSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noSourceSelected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The source which is currently selected by the ATS to supply the UPS.\"\"\",\n        }, # scalar\n        \"upsIntegratedATSPreferredSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsIntegratedATSNoSourcePreference\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsIntegratedATSPreferSourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upsIntegratedATSPreferSourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The preferred source of power when both sources are OK.\"\"\",\n        }, # scalar\n        \"upsIntegratedATSUpsReturnStaggering\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is a delay factor applied to the retransfer of this UPS with integrated ATS.\nWhen mulitple UPSes are in use from a single source, each UPS can have a unique delay value,\nwhich will reduce inrush by preventing all UPSes from transferring at the same time.\"\"\",\n        }, # scalar\n        \"upsIntegratedATSSourceTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input sources for this integrated ATS.\"\"\",\n        }, # scalar\n        \"upsIntegratedATSSourceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting status and settings for the ATS input sources.\nThe number of entries is contained in the upsIntegratedATSSourceTableSize OID.\"\"\",\n        }, # table\n        \"upsIntegratedATSSourceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsIntegratedATSSourceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input source status to get.\"\"\",\n        }, # row\n        \"upsIntegratedATSSourceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the input source entry.\"\"\",\n        }, # column\n        \"upsIntegratedATSSourceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the input source. This OID is provided\nfor informational purposes only.\"\"\",\n        }, # column\n        \"upsIntegratedATSSourceStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upsIntegratedATSSourceGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upsIntegratedATSSourceBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"upsIntegratedATSSourceUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the input source status.\"\"\",\n        }, # column\n        \"upsIntegratedATSLineFailDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay between a selected input source becoming bad, and the ATS switching away from that source.\nThis delay is used to make sure that the line has truly failed before the ATS will be switched.\nSpecified in seconds.\"\"\",\n        }, # column\n        \"upsIntegratedATSLineStabilityDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.1.16.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay between an unselected input source becoming good, and the ATS switching to that source.\nThis delay is used to make sure that the line has truly returned before the ATS will be switched.\nSpecified in seconds.\"\"\",\n        }, # column\n        \"measureUps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2\",\n        }, # node\n        \"mUpsEnviron\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.1\",\n        }, # node\n        \"mUpsEnvironAmbientTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ambient temperature in Celsius for Probe 1.\"\"\",\n        }, # scalar\n        \"mUpsEnvironRelativeHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity as a percentage for Probe 1.\"\"\",\n        }, # scalar\n        \"mUpsEnvironAmbientTemperature2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ambient temperature in Celsius for Probe 2.\"\"\",\n        }, # scalar\n        \"mUpsEnvironRelativeHumidity2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity as a percentage for Probe 2.\"\"\",\n        }, # scalar\n        \"mUpsContact\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2\",\n        }, # node\n        \"mUpsContactNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported by the Measure-UPS.\"\"\",\n        }, # scalar\n        \"mUpsContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the Measure-UPS.\"\"\",\n        }, # table\n        \"mUpsContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"contactNumber\",\n            ],\n            \"description\" :\n                \"\"\"A contact entry containing information for a given contact.\"\"\",\n        }, # row\n        \"contactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the contact on the Measure-UPS.\"\"\",\n        }, # column\n        \"normalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal operating position of the contact. If the normal\noperating position cannot be set then it is controlled via the\ndip switch on the Measure-UPS and is therefore read-only.\"\"\",\n        }, # column\n        \"description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the contact.\"\"\",\n        }, # column\n        \"monitoringStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A flag indicating whether this contact is \nmonitored, or not.\"\"\",\n        }, # column\n        \"currentStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current state of the contact.\nIf the contact is not in its normal state.  This value\nis set to fault(2).\"\"\",\n        }, # column\n        \"miniSNMPadapter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3\",\n        }, # node\n        \"serialPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1\",\n        }, # node\n        \"serialPort1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.1\",\n        }, # node\n        \"serialPort2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.2\",\n        }, # node\n        \"serialPort2Config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.2.1\",\n        }, # node\n        \"serialPort2Mode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.2.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"localConsole\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passthrough\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to passthrough will enable mini's port2\nbehave like a UPS port. Choosing localConsole will enable the port\nto be used as local console.\"\"\",\n        }, # scalar\n        \"serialPort2Control\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.2.2\",\n        }, # node\n        \"setPulseOnTXD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.3.1.2.2.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noSetPulseOnTXD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"setPulseOnTXD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"setTXDLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"setTXDHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to setPulseOnTXD(2) \ncauses adapter to generate a PULSE on TXD pin of serial port 2.\nThe duration in the prototype implementation will be 1 second.\n\nSetting this value to noSetPulseOnTXD(1) has no\neffect.\n\nThe value noSetPulseOnTXD(1) will always be returned\nwhen the variable is read.\n\nSetting this value to setTXDLow(3), or setTXDHigh(4) will keep TXD\nalways low or high respectively.\"\"\",\n        }, # scalar\n        \"masterswitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4\",\n        }, # node\n        \"sPDUIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1\",\n        }, # node\n        \"sPDUIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the PDU. This value \nis set at the factory.\"\"\",\n        }, # scalar\n        \"sPDUIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An 8 byte ID string identifying the PDU firmware revision. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"sPDUIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the PDU was manufactured in mm/dd/yy format.\nThis value is set at the factory. The year 2000 will be \nrepresented by 00.\"\"\",\n        }, # scalar\n        \"sPDUIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 10-character string identifying the model number of \nthe PDU internal. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"sPDUIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 12-character string identifying the serial number of \nthe PDU internal microprocessor. This value is set at\nthe factory.\"\"\",\n        }, # scalar\n        \"sPDUMasterControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.2\",\n        }, # node\n        \"sPDUMasterControlSwitch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turnAllOnNow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnAllOnSequence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turnAllOffNow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"rebootAllNow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"rebootAllSequence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noCommand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"turnAllOffSequence\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to turnAllOnNow (1) will turn all outlets\non immediately.\n\nSetting this OID to turnAllOnSequence (2) will turn all outlets\non as defined by each outlet's sPDUOutletPowerOnTime OID value.\n\nSetting this OID to turnAllOff (3) will turn all outlets\noff immediately.\n\nSetting this OID to rebootAllNow (4) will reboot all outlets\nimmediately.\n\nFor MasterSwitch firmware version 1.X, setting this OID to \nrebootAllSequence (5) reboots all outlets, with power returned \nto the outlets in the sequence defined by each outlet's \nsPDUOutletPowerOnTime OID value.\n\nFor MasterSwitch firmware version 2.X, setting this OID to \nrebootAllSequence (5) will cause a turnAllOffSequence to be performed. \nOnce all outlets are off, the MasterSwitch will then delay the \nsPDUMasterConfigReboot OID time, and then perform a turnAllOnSequence.    \n\nFor MasterSwitch firmware version 2.X, setting this OID to \nturnAllOffSequence (7) will turn all outlets off as defined by \neach outlet's sPDUOutletPowerOffTime OID value.\n\nFor MasterSwitch firmware version 1.X, setting this OID to \nturnAllOffSequence (7) will have no effect.\n\nGetting this OID will return the noCommand (6) value.\"\"\",\n        }, # scalar\n        \"sPDUMasterState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will cause the status of all outlets to be \nreturned. This OID is provided for informational purposes only.\nTo change the outlet state, the user should use the sPDUOutletCtl\nOID in the sPDUOutletControlTable.\n\nThe format of the data returned is a character string consisting\nof the word 'On' if the outlet is on or 'Off' if the outlet is\noff. At least one space will delimit each outlet entry in the \nstring. \n\nIf the outlet states are unknown, the character string 'Unknown'\nwill be returned. This signifies that there is an inconsistency \nin the PDU. In the rare case that this should happen, the user \nis advised to shut down all equipment powered by the PDU and \nthen cycle the PDU's power. This will put the PDU in a consistent\nstate.\"\"\",\n        }, # scalar\n        \"sPDUMasterPending\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will cause the command pending status of all outlets to be returned.\n\nThe format of the data returned is a character string consisting\nof the word 'Yes' if a command is pending for the outlet or 'No'\nif there is no command pending for the outlet. At least one \nspace will delimit each outlet entry in the string. \n\nIf the pending states are unknown, the character string 'Unknown'\nwill be returned. This signifies that there is an inconsistency \nin the PDU. In the rare case that this should happen, the user \nis advised to shut down all equipment powered by the PDU and then\ncycle the PDU's power. This will put the PDU in a consistent state.\"\"\",\n        }, # scalar\n        \"sPDUMasterConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.3\",\n        }, # node\n        \"sPDUMasterConfigPowerOn\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, between when\npower is provided to the PDU and when the PDU\nprovides basic master power to the outlets.       \n\nAllowed values are:\n\n-1 never apply power automatically.\n0 apply power immediately.\n15 apply power in 15 seconds.\n30 apply power in 30 seconds.\n45 apply power in 45 seconds.\n60 apply power in 60 seconds  (1 minute).\n120 apply power in 120 seconds (2 minutes).\n300 apply power in 300 seconds (5 minutes).\n\nIf a value other than a supported value is provided in a \nset request, the PDU interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # scalar\n        \"sPDUMasterConfigReboot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"During a reboot sequence, power is turned off and then \nback on. This OID defines the amount of time to wait, \nin seconds, after turning the power off, at the start\nof the sequence, before turning power back on, at the\nend of the reboot sequence.       \n\nAllowed values are:\n\n5 wait 5 seconds between off/on.\n10 wait 10 seconds between off/on.\n15 wait 15 seconds between off/on.\n20 wait 20 seconds between off/on.\n30 wait 30 seconds between off/on.\n45 wait 45 seconds between off/on.\n60 wait 60 seconds (1 minute) between off/on.\n\nIf a value other than a supported value is provided in a \nset request, the PDU interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\n\nThis OID is read-only for the MasterSwitch version 2.X and is the \nmaximum sPDUOutletRebootDuration OID of the individual outlets.\"\"\",\n        }, # scalar\n        \"sPDUMasterConfigPDUName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the PDU.\"\"\",\n        }, # scalar\n        \"sPDUOutletControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4\",\n        }, # node\n        \"sPDUOutletControlTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets for the PDU.\"\"\",\n        }, # scalar\n        \"sPDUOutletControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual outlet switches. The number of\nentries is contained in the sPDUOutletControlTableSize OID.\"\"\",\n        }, # table\n        \"sPDUOutletControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to control.\"\"\",\n        }, # row\n        \"sPDUOutletControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commandPendingUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reports whether the current outlet has a pending command.\n\nIf the commandPendingUnknown (3) value is returned, all \ndevices powered by the PDU should be shut down. The PDU's\npower should then be cycled to clear this condition.\"\"\",\n        }, # column\n        \"sPDUOutletCtl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"outletReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"outletUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"outletOnWithDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"outletOffWithDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"outletRebootWithDelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the outletOn (1) value will be returned.\nIf the outlet is off, the outletOff (2) value will be\nreturned. \n\nIf the state of the outlet cannot be determined, the \noutletUnknown (4) value will be returned. If the \noutletUnknown condition should occur, all devices \npowered by the PDU should be shut down. The PDU's power \nshould then be cycled to clear this condition.\n\nSetting this variable to outletOn (1) will turn the outlet on.\n\nSetting this variable to outletOff (2) will turn the outlet off. \n\nSetting this variable to outletReboot (3) will reboot the outlet.\n\nSetting this variable to outletOnWithDelay (5) will turn the outlet on\nafter the sPDUOutletPowerOnTime OID has elapsed. This option is not\nvalid for MasterSwitch firmware version 1.X.\n\nSetting this variable to outletOffWithDelay (6) will turn the outlet off\nafter the sPDUOutletPowerOffTime OID has elapsed. This option is not valid\nfor MasterSwitch firmware version 1.X.\n\nSetting this variable to outletRebootWithDelay (7) will turn the outlet off\nafter the sPDUOutletPowerOffTime OID has elapsed, wait the sPDUOutletRebootDuration\nOID time, then turn the outlet back on.  \nThis option is not valid for MasterSwitch firmware version 1.X.\"\"\",\n        }, # column\n        \"sPDUOutletCtlName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 20 characters.\nThis OID is provided for informational purposes only.\nThis value is set by the sPDUOutletName OID.\"\"\",\n        }, # column\n        \"sPDUOutletConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5\",\n        }, # node\n        \"sPDUOutletConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets for the PDU.\"\"\",\n        }, # scalar\n        \"sPDUOutletConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The list of outlets to configure. The number of\nentries is defined by the sPDUOutletConfigTableSize\nOID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to control.\"\"\",\n        }, # row\n        \"sPDUOutletConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletPowerOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering on when the MasterSwitch is powered on.\n       \nAllowed values are:\n\n-1 never power on automatically.\n0  power on with the Master Switch.\n15 power on 15 seconds after the MasterSwitch has power applied.\n30 power on 30 seconds after the MasterSwitch has power applied.\n45 power on 45 seconds after the MasterSwitch has power applied.\n60 power on 60 seconds (1 minute) after the MasterSwitch has power applied.\n120 power on 120 seconds (2 minutes) after the MasterSwitch has power applied.\n300 power on 300 seconds (5 minutes) after the MasterSwitch has power applied.\n\nIf a value other than a supported value is provided in a \nset request, the PDU interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # column\n        \"sPDUOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 20 characters.\"\"\",\n        }, # column\n        \"sPDUOutletPowerOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering off.\n       \nAllowed values are:\n\n-1 never power off automatically.\n0  power off with the MasterSwitch.\n15 power off 15 seconds after being commanded.\n30 power off 30 seconds after being commanded.\n45 power off 45 seconds after being commanded.\n60 power off 60 seconds (1 minute) after being commanded.\n120 power off 120 seconds (2 minutes) after being commanded.\n300 power off 300 seconds (5 minutes) after being commanded.\n\nIf a value other than a supported value is provided in a \nset request, the PDU interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\n\nThis OID is not available for MasterSwitch firmware version 1.X.\"\"\",\n        }, # column\n        \"sPDUOutletRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.4.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"During a reboot sequence, power is turned off and then \nback on. This OID defines the amount of time to wait, \nin seconds, after turning the power off, at the start\nof the sequence, before turning power back on, at the\nend of the reboot sequence.       \n\nAllowed values are:\n\n5 wait 5 seconds between off/on.\n10 wait 10 seconds between off/on.\n15 wait 15 seconds between off/on.\n20 wait 20 seconds between off/on.\n30 wait 30 seconds between off/on.\n45 wait 45 seconds between off/on.\n60 wait 60 seconds (1 minute) between off/on.\n\nIf a value other than a supported value is provided in a \nset request, the PDU interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\n\nThis OID is not available for MasterSwitch firmware version 1.X.\"\"\",\n        }, # column\n        \"masterswitchVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5\",\n        }, # node\n        \"sPDUIdentVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1\",\n        }, # node\n        \"sPDUIdentVMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch VMs controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUIdentVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual MasterSwitch VMs. \nThe number of entries is contained in the \nsPDUIdentVMTableSize OID.\"\"\",\n        }, # table\n        \"sPDUIdentVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUIdentVMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch VMs to query.\"\"\",\n        }, # row\n        \"sPDUIdentVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM entry.\"\"\",\n        }, # column\n        \"sPDUIdentNameVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 23-character string identifying the \nMasterSwitch VM. \"\"\",\n        }, # column\n        \"sPDUIdentHardwareRevVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of the MasterSwitch VM. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentFirmwareRevVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An 6-character ID string identifying the MasterSwitch VM \nfirmware version. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentDateOfManufactureVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the MasterSwitch VM was manufactured in mm/dd/yyyy format.\nThis value is set at the factory. \"\"\",\n        }, # column\n        \"sPDUIdentModelNumberVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 17-character string identifying the model number of \nthe MasterSwitch VM. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentSerialNumberVM\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 17-character string identifying the serial number of \nthe MasterSwitch VM. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUMasterControlVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2\",\n        }, # node\n        \"sPDUMasterControlVMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch VMs controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterControlVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of the individual MasterSwitch VMs.\nThe number of entries is contained in the \nsPDUMasterControlVMTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterControlVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterControlVMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch VMs to control.\"\"\",\n        }, # row\n        \"sPDUMasterControlVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM entry.\"\"\",\n        }, # column\n        \"sPDUMasterControlVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigVMName OID.\"\"\",\n        }, # column\n        \"sPDUMasterControlVMCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noCommandAllVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateAllOnVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateAllOffVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateAllRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedAllOnVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"delayedAllOffVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sequencedAllRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"delayedAllRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"delayedSequenceAllRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"cancelAllPendingCommandsVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"audioAlarmMute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to immediateAllOnVM (2) will turn all outlets\non immediately.\n\nSetting this OID to immediateAllOffVM (3) will turn all outlets\noff immediately.\n\nSetting this OID to immediateAllRebootVM (4) will reboot all outlets\nimmediately.\n\nSetting this OID to delayedAllOnVM (5) will turn all outlets on as \ndefined by each outlet's sPDUOutletConfigVMPowerOnTime OID value. \n      \nSetting this OID to delayedAllOffVM (6) will turn all outlets \noff as defined by each outlet's sPDUOutletConfigVMPowerOffTime OID value.\n\nSetting this OID to sequencedAllRebootVM (7) will cause a \nimmediateAllOffVM command to be performed. The MasterSwitch VM will \nthen delay the sPDUMasterStatusVMRebootDuration OID time, and then \nperform a delayedAllOnVM command.    \n\nSetting this OID to delayedAllRebootVM (8) will cause a delayedAllOffVM\ncommand to be performed. Each outlet will then wait its \nsPDUOutletConfigVMRebootDuration before returning power to the outlet.\n\nSetting this OID to delayedSequenceAllRebootVM (9) will cause a \ndelayedAllOffVM command to be performed. Once all outlets are off, \nthe MasterSwitch VM will then delay the sPDUMasterStatusVMRebootDuration \nOID time, and then perform a delayedAllOnVM command.    \n\nSetting this OID to cancelAllPendingCommandsVM (10) will cause all pending\ncommands on the MasterSwitch VM to be canceled.\n\n\nSetting this OID to audioAlarmMute (11) will temporarily silence the audible\nalarm for the duration of the current overload condition. The audible alarm\nwill be activated on subsequent overload alarms.\n\nGetting this OID will return the noCommandAllVM (1) value.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3\",\n        }, # node\n        \"sPDUMasterConfigVMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch VMs configurable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterConfigVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of the individual MasterSwitch VMs.\nThe number of entries is contained in the \nsPDUMasterConfigVMTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterConfigVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterConfigVMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch VMs to configure.\"\"\",\n        }, # row\n        \"sPDUMasterConfigVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM entry.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMColdstartDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, between when\npower is provided to the MasterSwitch VM and \nwhen the MasterSwitch VM provides basic master \npower to the outlets.       \n\nAllowed values are:\n\n-1 never apply power automatically.\n0 apply power immediately.\n15 apply power in 15 seconds.\n30 apply power in 30 seconds.\n45 apply power in 45 seconds.\n60 apply power in 60 seconds  (1 minute).\n120 apply power in 120 seconds (2 minutes).\n300 apply power in 300 seconds (5 minutes).\n\nIf a value other than a supported value is provided in a \nset request, the MasterSwitch VM interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMAudioAlarmActivated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"audioAlarmActiveNever\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"audioAlarmActiveOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"audioAlarmActiveOnOverloadImminent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to audioAlarmActiveNever (1) will disable\nthe audio alarm on the MasterSwitch VM.\n\nSetting this OID to audioAlarmActiveOnOverload (2) will \nactivate the audio alarm on the MasterSwitch VM when an\noverload condition is present.       \n\nSetting this OID to audioAlarmActiveOnOverloadImminent (3) \nwill activate the audio alarm on the MasterSwitch VM when\nthe load on the MasterSwitch VM has surpassed the\nsPDUMasterConfigVMHighLoadWarningThreshold OID value.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMHighLoadWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing an overload condition. It is \nrepresented as a percentage of full load.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMLowLoadWarningThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing a low consumption condition. It is \nrepresented as a percentage of full load.\"\"\",\n        }, # column\n        \"sPDUMasterConfigVMOverloadRestriction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alwaysAllowTurnON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restrictOnWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"restrictOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID controls the behavior of the MasterSwitch VM\nwhen an overload condition is possible and additional \noutlets are requested to be turned on. \n\nSetting this OID to alwaysAllowTurnON (1) will always allow \nthe outlets to turn on.\n\nSetting this OID to restrictOnWarning (2) will not allow \noutlets to turn on if the sPDUMasterConfigVMHighLoadWarningThreshold\nOID is exceeded.\n       \nSetting this OID to restrictOnOverload (3) will not allow\noutlets to turn on if the MasterSwitch Vm is in an \noverload condition.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4\",\n        }, # node\n        \"sPDUMasterStatusVMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch VMs at\nthis IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterStatusVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for gathering of status from the individual \nMasterSwitch VMs. The number of entries is contained \nin the sPDUMasterStatusVMTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterStatusVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterStatusVMIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch VMs to gather status from.\"\"\",\n        }, # row\n        \"sPDUMasterStatusVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM entry.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commandPendingMasterTrueVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commandPendingMasterFalseVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return commandPendingMasterTrueVM (1)\nif the MasterSwitch VM has a pending command on any of its\noutlets.\n\ncommandPendingMasterFalseVM (2) will be returned if there are\nno pending commands.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMOverloadCondition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"overloadConditionTrueVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"overloadConditionFalseVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return overloadConditionTrueVM (1)\nif the sPDUMasterConfigVMHighLoadWarningThreshold OID is\nviolated.\n\noverloadConditionFalseVM (2) will be returned if the \nsPDUMasterConfigVMHighLoadWarningThreshold OID is not\nviolated.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMLowLoadCondition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lowLoadConditionTrueVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowLoadConditionFalseVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return lowLoadConditionTrueVM (1)\nif the sPDUMasterConfigVMLowLoadWarningThreshold OID is\nviolated.\n\nlowLoadConditionFalseVM (2) will be returned if the \nsPDUMasterConfigVMHighLoadWarningThreshold OID is not\nviolated. \"\"\",\n        }, # column\n        \"sPDUMasterStatusVMCurrentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the total amount of power\nbeing consumed by the load. It is represented as a \npercentage of full load.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMMaxLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the total amount of power\nthat this MasterSwitch VM can provide. It is represented\nin Amps.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMOutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the number of controllable\noutlets for this MasterSwitch VM.\"\"\",\n        }, # column\n        \"sPDUMasterStatusVMRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the largest\nsPDUOutletConfigVMRebootDuration OID time \nfor this MasterSwitch VM.\"\"\",\n        }, # column\n        \"sPDUOutletControlVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5\",\n        }, # node\n        \"sPDUOutletControlVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual outlet switches. The number of\nentries is contained in the sPDUMasterStatusOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletControlVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletControlVMIndex\",\n                \"sPDUOutletControlVMOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to control.\"\"\",\n        }, # row\n        \"sPDUOutletControlVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM.\"\"\",\n        }, # column\n        \"sPDUOutletControlVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. Maximum size is 23 characters.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletControlVMOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletControlVMOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 23 characters.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletControlVMOutletCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateOnVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOffVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"delayedOnVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOffVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"delayedRebootVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"cancelPendingCommandVM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the immediateOnVM (1) value will be returned.\nIf the outlet is off, the immediateOffVM (2) value will be\nreturned. \n\n\nSetting this variable to immediateOnVM (1) will immediately turn the outlet on.\n\nSetting this variable to immediateOffVM (2) will immediately turn the outlet off. \n\nSetting this variable to immediateRebootVM (3) will immediately reboot the outlet.\n\nSetting this variable to delayedOnVM (4) will turn the outlet on\nafter the sPDUOutletConfigVMPowerOnTime OID time has elapsed.   \n\nSetting this variable to delayedOffVM (5) will turn the outlet off\nafter the sPDUOutletConfigVMPowerOffTime OID time has elapsed.\n\nSetting this variable to delayedRebootVM  (6) will cause the \nMasterSwitch VM to perform a delayedOffVM command, wait the \nsPDUOutletConfigVMRebootDuration OID time, and then perform the\nimmediateOnVM command.\n\nSetting this variable to cancelPendingCommandVM (7) will cause any\npending command to this outlet to be canceled.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6\",\n        }, # node\n        \"sPDUOutletConfigVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the sPDUMasterStatusOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigVMIndex\",\n                \"sPDUOutletConfigVMOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"sPDUOutletConfigVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMPowerOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering on at coldstart or when a command that requires \na turn-on delay is issued.\n       \nAllowed values are:\n\n-1 never power on.\n0  power on immediately.\n15 power on 15 seconds after being commanded.\n30 power on 30 seconds after being commanded.\n45 power on 45 seconds after being commanded.\n60 power on 60 seconds (1 minute) after being commanded.\n120 power on 120 seconds (2 minutes) after being commanded.\n300 power on 300 seconds (5 minutes) after being commanded.\n\nIf a value other than a supported value is provided in a \nset request, the MasterSwitch VM interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMPowerOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering off when a command that requires \na turn-off delay is issued.\n\n       \nAllowed values are:\n\n-1 never power off automatically.\n0  power off immediately.\n15 power off 15 seconds after being commanded.\n30 power off 30 seconds after being commanded.\n45 power off 45 seconds after being commanded.\n60 power off 60 seconds (1 minute) after being commanded.\n120 power off 120 seconds (2 minutes) after being commanded.\n300 power off 300 seconds (5 minutes) after being commanded.\n\nIf a value other than a supported value is provided in a \nset request, the MasterSwitch VM interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # column\n        \"sPDUOutletConfigVMRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"During a reboot sequence, power is turned off and then \nback on. This OID defines the amount of time to wait, \nin seconds, after turning the power off, at the start\nof the sequence, before turning power back on, at the\nend of the reboot sequence.       \n\nAllowed values are:\n\n5 wait 5 seconds between off/on.\n10 wait 10 seconds between off/on.\n15 wait 15 seconds between off/on.\n20 wait 20 seconds between off/on.\n30 wait 30 seconds between off/on.\n45 wait 45 seconds between off/on.\n60 wait 60 seconds (1 minute) between off/on.\n\nIf a value other than a supported value is provided in a \nset request, the MasterSwitch VM interprets it as the next lower\nacceptable value.  If the provided value is lower than\nthe lowest acceptable value, the lowest acceptable \nvalue is used.\"\"\",\n        }, # column\n        \"sPDUOutletStatusVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7\",\n        }, # node\n        \"sPDUOutletStatusVMTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of individual outlets. The number of\nentries is contained in the sPDUMasterStatusOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletStatusVMEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletStatusVMIndex\",\n                \"sPDUOutletStatusVMOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to gather status from.\"\"\",\n        }, # row\n        \"sPDUOutletStatusVMIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch VM.\"\"\",\n        }, # column\n        \"sPDUOutletStatusVMName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch VM. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUOutletStatusVMOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletStatusVMOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUOutletStatusVMOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusVMOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusVMOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the outletStatusOnVM (1) value will be returned.\nIf the outlet is off, the outletStatusOffVM (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"sPDUOutletStatusVMCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.5.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusVMCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusVMNoCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the command pending\nstate of the outlet. If a command is pending on the \noutlet, the outletStatusVMCommandPending (1) value\nwill be returned. If there is not a command pending\non the outlet, the outletStatusVMNoCommandPending (2)\nwill be returned.\"\"\",\n        }, # column\n        \"masterswitchMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6\",\n        }, # node\n        \"sPDUIdentMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1\",\n        }, # node\n        \"sPDUIdentMSPTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch pluses controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUIdentMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual MasterSwitch pluses. \nThe number of entries is contained in the \nsPDUIdentMSPTableSize OID.\"\"\",\n        }, # table\n        \"sPDUIdentMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUIdentMSPIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch pluses to query.\"\"\",\n        }, # row\n        \"sPDUIdentMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus entry.\"\"\",\n        }, # column\n        \"sPDUIdentNameMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUIdentHardwareRevMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware version of the MasterSwitch plus. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentFirmwareRevMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An 6-character ID string identifying the MasterSwitch plus \nfirmware version. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentDateOfManufactureMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the MasterSwitch plus was manufactured in mm/dd/yyyy format.\nThis value is set at the factory. \"\"\",\n        }, # column\n        \"sPDUIdentModelNumberMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 17-character string identifying the model number of \nthe MasterSwitch plus. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUIdentSerialNumberMSP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 17-character string identifying the serial number of \nthe MasterSwitch plus. This value is set at the factory.\"\"\",\n        }, # column\n        \"sPDUMasterControlMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2\",\n        }, # node\n        \"sPDUMasterControlMSPTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch pluses controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterControlMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of the individual MasterSwitch pluses.\nThe number of entries is contained in the \nsPDUMasterControlMSPTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterControlMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterControlMSPIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch pluses to control.\"\"\",\n        }, # row\n        \"sPDUMasterControlMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus entry.\"\"\",\n        }, # column\n        \"sPDUMasterControlMSPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUMasterControlMSPCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noCommandAllMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateAllOnMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sequencedAllOnMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateAllOffMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"gracefulAllRebootMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immediateAllRebootMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"gracefulAllShutdownMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"overrideAllBatCapThreshMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"cancelAllPendingCommandsMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"restoreFactoryDefaultsMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to immediateAllOnMSP (2) will turn all outlets\non immediately.\n\nSetting this OID to sequencedAllOnMSP (3) will turn all outlets\non as defined by each outlet's sPDUOutletConfigMSPPowerOnDelay OID value.\n\nSetting this OID to immediateAllOffMSP (4) will turn all outlets\noff immediately.\n\nSetting this OID to gracefulAllRebootMSP (5) will reboot all outlets\n(after the device running PowerChute confirms shutdown) as defined \nby each outlet's sPDUOutletConfigMSPRebootDuration OID time value.\n\nSetting this OID to immediateAllRebootMSP (6) will reboot all outlets\nimmediately.\n\nSetting this OID to gracefulAllShutdownMSP (7) will shutdown all outlets\n(after the device running PowerChute confirms shutdown) as defined \nby each outlet's sPDUOutletConfigMSPPowerOffDelay OID time value.  Each \noutlet will then turn on after the sum of its \nsPDUOutletConfigMSPRestartDelay and sPDUOutletConfigMSPPowerOnDelay OID \nvalues.\n\nSetting this OID to overrideAllBatCapThreshMSP (8) will cause the \noutlet to ignore the Battery Capacity Threshold and proceed turning on\nthe outlets as defined by each outlet's sPDUOutletConfigMSPPowerOnDelay \nOID value.\n             \nSetting this OID to cancelAllPendingCommandsMSP (9) will cause all pending\ncommands on the MasterSwitch plus to be canceled.\n\nSetting this OID to restoreFactoryDefaultsMSP (10) will cause the settings of\nthe MasterSwitch plus to be restored to the factory defaults.\n\nGetting this OID will return the noCommandAllMSP (1) value.\"\"\",\n        }, # column\n        \"sPDUMasterConfigMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3\",\n        }, # node\n        \"sPDUMasterConfigMSPTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch pluses configurable\nby this IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterConfigMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of the individual MasterSwitch pluses.\nThe number of entries is contained in the \nsPDUMasterConfigMSPTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterConfigMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterConfigMSPIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch pluses to configure.\"\"\",\n        }, # row\n        \"sPDUMasterConfigMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus entry.\"\"\",\n        }, # column\n        \"sPDUMasterConfigMSPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUMasterConfigMSPPowerOnTimeDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, between when\npower is provided to the MasterSwitch plus and \nwhen the MasterSwitch plus provides basic master \npower to the outlets.       \n\nAllowed values are:\n\n0 - 9999 seconds (0 - 2hrs, 46 mins, 39 secs).\n0 indicates to apply power immediately.\"\"\",\n        }, # column\n        \"sPDUMasterConfigMSPManualButton\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manualButtonDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manualButtonEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to manualButtonDisabled (1) will disable\nthe manual button on the MasterSwitch plus.\n\nSetting this OID to manualButtonEnabled (2) will enable\nthe manual button on the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUMasterStatusMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4\",\n        }, # node\n        \"sPDUMasterStatusMSPTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of MasterSwitch pluses at\nthis IP address.\"\"\",\n        }, # scalar\n        \"sPDUMasterStatusMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for gathering of status from the individual \nMasterSwitch pluses. The number of entries is contained \nin the sPDUMasterStatusMSPTableSize OID.\"\"\",\n        }, # table\n        \"sPDUMasterStatusMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUMasterStatusMSPIndex\",\n            ],\n            \"description\" :\n                \"\"\"The MasterSwitch pluses to gather status from.\"\"\",\n        }, # row\n        \"sPDUMasterStatusMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus entry.\"\"\",\n        }, # column\n        \"sPDUMasterStatusMSPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUMasterStatusMSPOutletCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the number of controllable\noutlets for this MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletControlMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5\",\n        }, # node\n        \"sPDUOutletControlMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual outlet switches. The number of\nentries is contained in the sPDUMasterStatusMSPOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletControlMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletControlMSPIndex\",\n                \"sPDUOutletControlMSPOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to control.\"\"\",\n        }, # row\n        \"sPDUOutletControlMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletControlMSPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletControlMSPOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletControlMSPOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum size is \n23 characters. The name is set by using the \nsPDUOutletConfigMSPallOutletName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletControlMSPOutletCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateOnMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delayedOnMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateOffMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"gracefulRebootMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"immediateRebootMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"gracefulshutdownMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"overrideBatCapThreshMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cancelPendingCommandMSP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the immediateOnMSP (1) value will be returned.\nIf the outlet is off, the immediateOffMSP (3) value will be\nreturned.  \n\nSetting this variable to immediateOnMSP (1) will immediately turn the outlet on.\n\nSetting this variable to delayedOnMSP (2) will turn the outlet on\nafter the sPDUOutletConfigMSPPowerOnDelay OID time has elapsed. \n\nSetting this variable to immediateOffMSP (3) will immediately turn the outlet off. \n\nSetting this variable to gracefulRebootMSP (4) will cause the outlet to wait for\ndevice confirmation (if applicable) and then turn the outlet off after the\nsPDUOutletConfigMSPPowerOffDelay OID time has elapsed.  The outlet will then turn\non after the sPDUOutletConfigMSPRebootDuration OID time has elapsed. \n\nSetting this variable to immediateRebootMSP (5) will immediately reboot the outlet.\n\nSetting this variable to gracefulshutdownMSP (6) will cause the outlet to wait for\ndevice confirmation (if applicable) and then turn the outlet off after the\nsPDUOutletConfigMSPPowerOffDelay OID time has elapsed.  The outlet will then turn\non after the sum of the sPDUOutletConfigMSPRestartTime OID time and the \nsPDUOutletConfigMSPPowerOnDelay OID time has elapsed. \n\nSetting this variable to overrideBatCapThreshMSP (7) will cause the outlet to \nignore the Battery Capacity Threshold and proceed waiting on the\nsPDUOutletConfigMSPPowerOnDelay OID time before turning the outlet on.\n    \nSetting this variable to cancelPendingCommandMSP (8) will cause any\npending command to this outlet to be canceled.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6\",\n        }, # node\n        \"sPDUOutletConfigMSPall\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1\",\n        }, # node\n        \"sPDUOutletConfigMSPallTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the sPDUMasterStatusMSPOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigMSPallEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigMSPallIndex\",\n                \"sPDUOutletConfigMSPallOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"sPDUOutletConfigMSPallIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPallName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPallOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPallOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet. Maximum size is 23 characters.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPallOutletCtrlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeGracefulShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeAnnunciator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to modeGracefulShutdown (1) will put this\noutlet into the Graceful Shutdown control mode.\n\nSetting this OID to modeAnnunciator (2) will put this outlet\ninto the Annunciator control mode.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2\",\n        }, # node\n        \"sPDUOutletConfigMSPgsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the sPDUMasterStatusMSPOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigMSPgsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigMSPgsIndex\",\n                \"sPDUOutletConfigMSPgsOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"sPDUOutletConfigMSPgsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum size is \n23 characters. The name is set by using the \nsPDUOutletConfigMSPallOutletName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsOutletCtrlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeGracefulShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeAnnunciator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Control Mode of the outlet.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsDeviceConfirm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"deviceConfirmNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"deviceConfirmYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to deviceConfirmNo (1) cause the outlet to\nNOT wait for device confirmation while performing graceful\noperations.\n\nSetting this OID to deviceConfirmYes (2) cause the outlet to\nwait for device confirmation while performing graceful\noperations.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsLowBattWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-2\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-2\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in 6 second intervals, between \nwhen the UPS goes on battery and the power down sequence for\nthe outlet is initiated.     \n\nAllowed values are:\n\n-2 - Never initiate the power down sequence on low battery warning.\n-1 - Initiate power down sequence based on remaining runtime.\n1 - 9999 six second intervals (6 secs - 16hrs, 39 mins, 54 secs).\n0 indicates to immediately initiate power down sequence on low \n battery warning.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsLowBattMult\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" Only applicable if sPDUOutletConfigMSPgsLowBattWarning OID is \nset to -1 (On Runtime Remaining).\n \nAllows you to set the value to stagger the shutdown sequence of the outlets.\n1 provides the longest delay (the outlet to shutoff first), and 7 would\nprovide the shortest delay (the outlet to shut off last).\n \nAllowed values are:\n1 - 7.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsRestartDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in 6 minute intervals, between \nwhen the outlet is turned off and the outlet is turned back on\nwhen performing a Graceful Shutdown.    \n\nAllowed values are:\n\n-1 - Never turn outlet back on after a Graceful shutdown.\n0 - 9999 six minute intervals (0 - 999hrs, 54 mins).\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsPowerOnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, between the UPS entering\nnormal (on-line) state and the outlet being powered on.\n\nAllowed values are:\n\n-1 - Remain Off when the UPS enters the on-line state.\n0 - 9999 seconds (0 - 2 hrs, 46 mins, 39 secs).\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsPowerOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, between when the server\nshuts down and the outlet is powered off.\n\nAllowed values are:\n\n0 - 9999 seconds (0 - 2 hrs, 46 mins, 39 secs).\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsBattCapThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The minimum battery capacity, as a percent (0-100%), required\nof the UPS before an outlet will be allowed to power on.\n\nAllowed values are:\n\n0 - 100 percent.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPgsRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of delay, in seconds, from outlet off until\noutlet on during a reboot.\n\nAllowed values are:\n\n0 - 9999 seconds (0 - 2 hrs, 46 mins, 39 secs).\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannun\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3\",\n        }, # node\n        \"sPDUOutletConfigMSPannunTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the sPDUMasterStatusMSPOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigMSPannunEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigMSPannunIndex\",\n                \"sPDUOutletConfigMSPannunOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"sPDUOutletConfigMSPannunIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum size is \n23 characters. The name is set by using the \nsPDUOutletConfigMSPallOutletName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunOutletCtrlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeGracefulShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeAnnunciator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Control Mode of the outlet.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunInitialState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initialStateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"initialStateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to initialStateOff (1) causes the outlet \nto default to off when in the non-alarmed condition.\n\nSetting this OID to initialStateOn (2) causes the outlet \nto default to on when in the non-alarmed condition.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPannunAlarmActionDly\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9999\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The amount of time, in seconds, that an enabled Measure-UPS\nalarm must be asserted before an alarm condition is recognized.\n\nAllowed values are:\n\n0 - 9999 seconds (0 - 2 hrs, 46 mins, 39 secs).\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4\",\n        }, # node\n        \"sPDUOutletConfigMSPmupsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the sPDUMasterStatusMSPOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletConfigMSPmupsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletConfigMSPmupsIndex\",\n                \"sPDUOutletConfigMSPmupsOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"sPDUOutletConfigMSPmupsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch plus.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum size is \n23 characters. The name is set by using the \nsPDUOutletConfigMSPallOutletName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsZone1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nZone 1 alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nZone 1 alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsZone2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nZone 2 alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nZone 2 alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsZone3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nZone 3 alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nZone 3 alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsZone4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nZone 4 alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nZone 4 alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP1LowHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 1 low humidity alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 1 low humidity alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP1HiHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 1 high humidity alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 1 high humidity alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP1LowTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 1 low temperature alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 1 low temperature alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP1HiTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 1 high temperature alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 1 high temperature alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP2LowHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 2 low humidity alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 2 low humidity alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP2HiHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 2 high humidity alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 2 high humidity alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP2LowTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 2 low temperature alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 2 low temperature alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletConfigMSPmupsP2HiTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.6.4.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to disableAlarm (1) disables the\nProbe 2 high temperature alarm for this outlet.\n\nSetting this OID to enableAlarm (2) enables the\nProbe 2 high temperature alarm for this outlet.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7\",\n        }, # node\n        \"sPDUOutletStatusMSPTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of individual outlets. The number of\nentries is contained in the sPDUMasterStatusOutletCount OID.\"\"\",\n        }, # table\n        \"sPDUOutletStatusMSPEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sPDUOutletStatusMSPIndex\",\n                \"sPDUOutletStatusMSPOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to gather status from.\"\"\",\n        }, # row\n        \"sPDUOutletStatusMSPIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the MasterSwitch MSP.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the MasterSwitch plus. The maximum \nvalue is 23 characters. The name is set by\nusing the sPDUMasterConfigMSPName OID.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum size is \n23 characters. The name is set by using the \nsPDUOutletConfigMSPallOutletName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusMSPOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusMSPOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the outletStatusMSPOn (1) value will be returned.\nIf the outlet is off, the outletStatusMSPOff (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusMSPCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusMSPNoCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the command pending\nstate of the outlet. If a command is pending on the \noutlet, the outletStatusMSPCommandPending (1) value\nwill be returned. If there is not a command pending\non the outlet, the outletStatusMSPNoCommandPending (2)\nwill be returned.\"\"\",\n        }, # column\n        \"sPDUOutletStatusMSPOutletCtrlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.6.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeGracefulShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeAnnunciator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Control Mode of the outlet.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dcDM3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7\",\n        }, # node\n        \"dm3Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1\",\n        }, # node\n        \"dm3IdentSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1\",\n        }, # node\n        \"dm3IdentSysDescriptionTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC description records.\"\"\",\n        }, # scalar\n        \"dm3IdentSysDescriptionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing description records of the powerplant. The number of\nentries is contained in the dm3IdentSysDescriptionTableSize OID.\"\"\",\n        }, # table\n        \"dm3IdentSysDescriptionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3IdentSysDescriptionIndex\",\n            ],\n            \"description\" :\n                \"\"\"The powerplant description record to reference.\"\"\",\n        }, # row\n        \"dm3IdentSysDescriptionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant description record.\"\"\",\n        }, # column\n        \"dm3IdentSysDescriptionText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 16 character text field describing the DC power plant device.\nThis field can be configured from the dm3ConfigSysDescriptionText OID.\"\"\",\n        }, # column\n        \"dm3IdentSysModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Model type of the DC power plant.\"\"\",\n        }, # scalar\n        \"dm3IdentSysCntrlRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Integer representation of the hardware revision of the Master Controller board.\"\"\",\n        }, # scalar\n        \"dm3IdentSysFWVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Integer representation of the power plant Master Controller firmware revision.\"\"\",\n        }, # scalar\n        \"dm3Config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2\",\n        }, # node\n        \"dm3ConfigSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1\",\n        }, # node\n        \"dm3ConfigSysDescriptionTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC description records.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysDescriptionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing description records of the powerplant. The number of\nentries is contained in the dm3ConfigSysDescriptionTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigSysDescriptionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigSysDescriptionIndex\",\n            ],\n            \"description\" :\n                \"\"\"The powerplant description record to reference.\"\"\",\n        }, # row\n        \"dm3ConfigSysDescriptionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant description record.\"\"\",\n        }, # column\n        \"dm3ConfigSysDescriptionText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"16 character text field describing the DC power plant device.\"\"\",\n        }, # column\n        \"dm3ConfigSysHighTempThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Ambient high temperature threshold.  Temperature sensor located on Master\nController board.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysHighTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the System High Temperature Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysLowTempThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Ambient low temperature threshold.  Temperature sensor located on Master\nController board.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysLowTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the System Low Temperature Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysHardwareTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the System Hardware Temperature Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigSysRemoteAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"accessEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"accessDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\nThis OID is used to disable remote write access to the power plant.\nSetting this OID to accessEnabled (1) will have no affect.\nSetting this OID to accessDisabled (2) will disable the ability to \nremotely configure the DC powerplant.\n\nOnce remote access is disabled, it can only be restored from the front\npanel of the DC power plant.\"\"\",\n        }, # scalar\n        \"dm3ConfigLVD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2\",\n        }, # node\n        \"dm3ConfigLVDTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant LVDs controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3ConfigLVDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the LVDs. The number of\nentries is contained in the dm3ConfigLVDTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigLVDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigLVDIndex\",\n            ],\n            \"description\" :\n                \"\"\"The LVD to configure.\"\"\",\n        }, # row\n        \"dm3ConfigLVDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant LVD.\"\"\",\n        }, # column\n        \"dm3ConfigLVDName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the LVD. The maximum value is 16 characters.\"\"\",\n        }, # column\n        \"dm3ConfigLVDEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID is used to control and indicate if the LVD is on or off.\nSetting this OID to enabledYes (1) will enable (turn on) the LVD.\nSetting this OID to enabledNo (2) will disable (turn off) the LVD.\"\"\",\n        }, # column\n        \"dm3ConfigLVDTripThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LVD Trip threshold.  If voltage exceeds threshold, the LVD will trip.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # column\n        \"dm3ConfigLVDResetThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LVD Reset threshold.  If voltage exceeds threshold, the LVD will reset.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # column\n        \"dm3ConfigLVDOpenAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the LVD Open Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # column\n        \"dm3ConfigLVDHWAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the LVD Hardware Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # column\n        \"dm3ConfigBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3\",\n        }, # node\n        \"dm3ConfigBattFloatVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery Float Voltage.  This setting controls the power plant voltage.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattMaxRecharge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery Maximum Recharge Rate.  This setting controls the battery max\nrecharge rate.  The value is based on C/20 for 240 AHr battery string.\n\nValues are represented in thousandths of Amps (mA).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattDischargeThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery discharge threshold.  If battery output current exceeds threshold\na battery discharge alarm will occur.\n\nValues are represented in thousandths of Amps (mA).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattDischargeAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery Discharge Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHighVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery high voltage threshold.  If system battery voltage exceeds threshold\na battery high voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHighVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery High Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattLowVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery low voltage threshold.  If system battery voltage is under threshold\na battery low voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattLowVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery Low Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHighTempThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery high temperature threshold.  If system battery temperature exceeds threshold\na battery high temperature alarm will occur.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHighTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery High Temperature Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattLowTempThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery low temperature threshold.  If system battery temperature is under threshold\na battery low temperature alarm will occur.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattLowTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery Low Temperature Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattAmpHour\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery Amp-Hour Size.  Units are thousandths of Amp hours (mAHr).\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigCompMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tempcompOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"tempcompOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID is used to configure and get the state of the battery\ntemperature compensation.\n\nSetting this OID to tempcompOn (1) will enable/turn on the battery temperature compensation.\nSetting this OID to tempcompOff (2) will disable/turn off the battery temperature compensation.\"\"\",\n        }, # scalar\n        \"dm3ConfigCompTempCoeff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compensation Temperature Coefficient. (uV/degC/cell).\n\nUnits are presented in microvolts.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigHighKneeTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"High Knee for temperature compensation:  Compensation temperature coefficient \nbecomes 0mV/degC/cell.\n\nValues are represented in thousandths of degrees Celsius.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigLowKneeTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Low Knee for temperature compensation:  Compensation temperature coefficient \nbecomes 0mV/degC/cell.\n\nValues are represented in thousandths of degrees Celsius.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHwCurrentAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery Current Hardware Alarm (indicating current is outside realistic\nlimits, or a possible measurement fault;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigBattHwTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.3.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Battery Temperature Hardware Alarm (indicating temperature is outside realistic\nlimits, or a possible measurement fault;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigPowerModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4\",\n        }, # node\n        \"dm3ConfigRectifier\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1\",\n        }, # node\n        \"dm3ConfigRectThresh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.1\",\n        }, # node\n        \"dm3ConfigRectHighVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Rectifier high voltage threshold.  If rectifier voltage exceeds threshold\na rectifier high voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectLowVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Rectifier low voltage threshold.  If rectifier voltage is under threshold\na rectifier low voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectFailSafe\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Rectifier Fail Safe point.  This OID represents the value sent to rectifier controllers\nto use in the event of communications loss with the Master Controller or Master Controller\nboard failure.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectFailComm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Rectifier Communication Fail timeout.  This OID represents the time interval in which there is no \ncommunication between the rectifier and the master controller at which the rectifier will reset \nall its values to default.\n\nValues are represented in hundredths of Seconds.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2\",\n        }, # node\n        \"dm3ConfigRectHighVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier High Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectLowVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Low Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectConfigAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This alarm is activated when a new rectifier is detected;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRect1ofNAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting indicates the action if ONE rectifier of a N+1 system has failed;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRect2ofNAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting indicates the action if TWO OR MORE rectifiers of a N+1 system have failed;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectDiagAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Controller Diagnostics Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigRect1ofNAlarm OID\nto be activated if ONE rectifier fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigRect2ofNAlarm OID to be activated if TWO OR MORE rectifiers fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectImbalanceAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Imbalance Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectCurrLimitAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Current Limit Alarm (indicating rectifier in the Current Limit state);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigRect1ofNAlarm OID\nto be activated if ONE rectifier fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigRect2ofNAlarm OID to be activated if TWO OR MORE rectifiers fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectStandbyAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Standby Alarm (indicating output DC has been turned off);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigRect1ofNAlarm OID\nto be activated if ONE rectifier fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigRect2ofNAlarm OID to be activated if TWO OR MORE rectifiers fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectFanFailAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Fan Fail Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigRect1ofNAlarm OID\nto be activated if ONE rectifier fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigRect2ofNAlarm OID to be activated if TWO OR MORE rectifiers fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectFailAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Fail Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigRect1ofNAlarm OID\nto be activated if ONE rectifier fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigRect2ofNAlarm OID to be activated if TWO OR MORE rectifiers fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRectHwVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.1.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Rectifier Hardware Voltage Alarm (indicating voltage outside realistic limits,\nor a possible measurement fault);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConverter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2\",\n        }, # node\n        \"dm3ConfigConvThresh\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1\",\n        }, # node\n        \"dm3ConfigConvHighVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter high voltage threshold.  If converter voltage exceeds threshold\na converter high voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvLowVoltThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter low voltage threshold.  If converter voltage exceeds threshold\na converter low voltage alarm will occur.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFailSafe\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter Fail Safe point.  This OID represents the value sent to converter controllers\nto use in the event of communications loss with the Master Controller or Master Controller\nboard failure.\n\nValues are represented in thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvSetPoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter Set point.  This OID represents the initial set point used in the\nvoltage control loop.\n\nUnits are thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFailMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter Fail Maximum limit.  This OID represents the value sent to the converter\ncontrollers to define the maximum set point allowed.\n\nUnits are thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFailMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter Fail Minimum limit.  This OID represents the value sent to the converter\ncontrollers to define the minimum set point allowed.\n\nUnits are thousandths of Volts (mV).\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFailComm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Converter Communication Fail timeout.  This OID represents the time interval in which there is no \ncommunication between the converter and the master controller at which the converter will reset \nall its values to default.\n\nValues are represented in hundredths of Seconds.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2\",\n        }, # node\n        \"dm3ConfigConvHighVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter High Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvLowVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Low Voltage Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvConfigAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Configuration Alarm (indicating a new converter has been detected);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConv1ofNAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter 1ofN Alarm (indicating action if ONE converter of a N+1 system has failed);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConv2ofNAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter 2ofN Alarm (indicating action if TWO OR MORE converters of a N+1 system has failed);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvDiagAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Diagnostics Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvImbalanceAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Imbalance Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvCurrLimitAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Current Limit Alarm (indicating the converter is in the Current Limit state);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvStandbyAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Standby Alarm (indicating the converter is in the Standby state);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFanFailAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Fan Fail Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvFailAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Fail Alarm;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigConvHwVoltAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.4.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"alarmNofN\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For the Converter Voltage Alarm (indicating voltage outside realistic limits, or a\npossible measurement fault);\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\nSetting this OID to alarmNofN (10) causes the alarm specified in the dm3ConfigConv1ofNAlarm OID\nto be activated if ONE converter fails in an N+1 system.  It causes the alarm specified in the \ndm3ConfigConv2ofNAlarm OID to be activated if TWO OR MORE converters fail in an N+1 system.\"\"\",\n        }, # scalar\n        \"dm3ConfigRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5\",\n        }, # node\n        \"dm3ConfigOutputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1\",\n        }, # node\n        \"dm3ConfigOutRlyTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant Output Relays controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3ConfigOutRlyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the Output Relays. The number of\nentries is contained in the dm3ConfigOutRlyTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigOutRlyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigOutRlyIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relay to configure.\"\"\",\n        }, # row\n        \"dm3ConfigOutRlyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant output relay.\"\"\",\n        }, # column\n        \"dm3ConfigOutRlyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the output relay. The maximum value is 16 characters.\"\"\",\n        }, # column\n        \"dm3ConfigOutRlyDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output Relay Delay.  This OID represents the time delay from the initiation of an\noutput relay action to when the output relay action does occur.  If the alarm condition\ndisappears before the end of the delay, no action will occur.  Delay for Major \nand Minor alarms is not configurable and is always set to 0.\n\nValues are represented in hundredths of seconds.\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # column\n        \"dm3ConfigOutRlyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output Relay Alarm.  This setting indicates what action to perform in the event of\nan output relay alarm condition;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\n\nRelay Alarm for Major and Minor alarms is not configurable and is always set to \nalarmMajor and alarmMinor respectively.\"\"\",\n        }, # column\n        \"dm3ConfigInputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2\",\n        }, # node\n        \"dm3ConfigInRlyTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant Input Relays controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3ConfigInRlyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the Input Relays. The number of\nentries is contained in the dm3ConfigInRlyTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigInRlyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigInRlyIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input relay to configure.\"\"\",\n        }, # row\n        \"dm3ConfigInRlyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant input relay.\"\"\",\n        }, # column\n        \"dm3ConfigInRlyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the input relay. The maximum value is 16 characters.\"\"\",\n        }, # column\n        \"dm3ConfigInRlyDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input Relay Delay.  This OID represents the time delay from the initiation of an\ninput relay action to when the input relay action does occur.   If the alarm condition\ndisappears before the end of the delay, no action will occur.\n\nValues are represented in hundredths of seconds.\n\nAttempts to set the value above or below the acceptable range of the powerplant\n will cause the value to be set at the high or low point of the range respectively.\"\"\",\n        }, # column\n        \"dm3ConfigInRlyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.5.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input Relay Alarm.  This setting indicates what action to perform in the event of\nan input relay alarm condition;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # column\n        \"dm3ConfigDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6\",\n        }, # node\n        \"dm3ConfigBreakers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1\",\n        }, # node\n        \"dm3ConfigBreakersTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant circuit breakers controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3ConfigBreakersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the circuit breakers. The number of\nentries is contained in the dm3ConfigBreakersTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigBreakersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigBreakersIndex\",\n            ],\n            \"description\" :\n                \"\"\"The circuit breaker to configure.\"\"\",\n        }, # row\n        \"dm3ConfigBreakersIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant circuit breaker.\"\"\",\n        }, # column\n        \"dm3ConfigBreakersName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the circuit breaker. The maximum value is 16 characters.\"\"\",\n        }, # column\n        \"dm3ConfigBreakersAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Circuit Breaker Alarm.  This setting indicates what action to perform in the event of\na circuit breaker alarm condition;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # column\n        \"dm3ConfigFuses\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2\",\n        }, # node\n        \"dm3ConfigFusesTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant Fuses controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3ConfigFusesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the Fuses. The number of\nentries is contained in the dm3ConfigFusesTableSize OID.\"\"\",\n        }, # table\n        \"dm3ConfigFusesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3ConfigFusesIndex\",\n            ],\n            \"description\" :\n                \"\"\"The fuse to configure.\"\"\",\n        }, # row\n        \"dm3ConfigFusesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant fuse.\"\"\",\n        }, # column\n        \"dm3ConfigFusesName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the fuse. The maximum value is 16 characters.\"\"\",\n        }, # column\n        \"dm3ConfigFusesAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.2.6.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmIgnore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmRelay1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmRelay2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmRelay3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarmRelay4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"alarmRelay5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"alarmRelay6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fuses Alarm.  This setting indicates what action to perform in the event of\na Fuse alarm condition;\nSetting this OID to alarmIgnore (1) results in the alarm condition being ignored.\nSetting this OID to alarmRelay1 (2) causes relay 1 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay2 (3) causes relay 2 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay3 (4) causes relay 3 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay4 (5) causes relay 4 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay5 (6) causes relay 5 to be activated for an\nalarm condition.\nSetting this OID to alarmRelay6 (7) causes relay 6 to be activated for an\nalarm condition.\nSetting this OID to alarmMinor (8) causes the Minor relay to be activated for an\nalarm condition.\nSetting this OID to alarmMajor (9) causes the Major relay to be activated for an\nalarm condition.\"\"\",\n        }, # column\n        \"dm3Status\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3\",\n        }, # node\n        \"dm3StatusSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1\",\n        }, # node\n        \"dm3StatusSystemTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System temperature based on sensor on Master Controller PCB.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dm3StatusSystemStart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time stamp at DC powerplant initialization.\nThe time is represented as MMM,DD,YYYY,HH:MM:SS.\"\"\",\n        }, # scalar\n        \"dm3StatusSysRemoteAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"accessEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"accessDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Remote Access indicator\nThis setting indicates if configuration (write) access to the powerplant is enabled or \ndisabled at the powerplant level.\nThis value will be accessEnabled (1) if remote configuration is enabled, and \naccessDisabled (2) if remote configuration is disabled.\"\"\",\n        }, # scalar\n        \"dm3StatusSysSecurityLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable shows the current active security access level of controller.  This\ncan only be changed directly from the front panel.\"\"\",\n        }, # scalar\n        \"dm3StatusSysTempSanity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"saneYES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"saneNO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System temperature sanity indicator.  Indicates if the system temperature is \nreasonable.  Reasonable is defined based on powerplant type.  A value of saneYes (1)\nindicates temperature is reasonable, a value of saneNo (2) indicates it is not.\"\"\",\n        }, # scalar\n        \"dm3StatusSysAlarmState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmBoth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarmNone\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System Alarm State.  Reflects the alarm status of the overall DC system.\nIf a minor alarm is present, the value will be alarmMinor(1).\nIf a major alarm is present, the value will be alarmMajor(2).\nIf both minor and a major alarm is present, the value will be alarmBoth(3).\nIf no alarm is present, the value will be alarmNone(4).\"\"\",\n        }, # scalar\n        \"dm3StatusSysTempUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nin the DC system, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # scalar\n        \"dm3StatusAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2\",\n        }, # node\n        \"dm3StatusAlarmsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant alarms viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusAlarmsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing system alarms. The number of\nentries is contained in the dm3StatusAlarmsTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusAlarmsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusAlarmsIndex\",\n            ],\n            \"description\" :\n                \"\"\"The alarm to display.\"\"\",\n        }, # row\n        \"dm3StatusAlarmsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the system alarm.\"\"\",\n        }, # column\n        \"dm3StatusAlarmsText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The 16 character text describing the active alarm condition.\"\"\",\n        }, # column\n        \"dm3StatusBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.3\",\n        }, # node\n        \"dm3StatusBattCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Current:  This OID shows the battery current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dm3StatusBattTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Temperature:\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dm3StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dm3StatusBattCurrentSanity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"saneYES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"saneNO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery current sanity indicator.  Indicates if the battery current is \nreasonable.  Reasonable is defined based on powerplant type.  A value of saneYes (1)\nindicates current is reasonable, a value of saneNo (2) indicates it is not.\"\"\",\n        }, # scalar\n        \"dm3StatusBattTempSanity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"saneYES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"saneNO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery temperature sanity indicator.  Indicates if the battery temperature is \nreasonable.  Reasonable is defined based on powerplant type.  A value of saneYes (1)\nindicates temperature is reasonable, a value of saneNo (2) indicates it is not.\"\"\",\n        }, # scalar\n        \"dm3StatusOEM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4\",\n        }, # node\n        \"dm3StatusOEMrectOffset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier offset value in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dm3StatusOEMrectGain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier gain value in thousandths of Volts (mV/V).\"\"\",\n        }, # scalar\n        \"dm3StatusOEMconvOffset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter offset value in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dm3StatusOEMconvGain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter gain value in thousandths of Volts (mV/V).\"\"\",\n        }, # scalar\n        \"dm3StatusOEMshuntOffset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the shunt offset value in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dm3StatusOEMshuntGain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the shunt gain value in thousandths of Amps (mA/A).\"\"\",\n        }, # scalar\n        \"dm3StatusLVD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5\",\n        }, # node\n        \"dm3StatusLVDTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant LVDs viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusLVDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the LVDs. The number of\nentries is contained in the dm3StatusLVDTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusLVDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusLVDIndex\",\n            ],\n            \"description\" :\n                \"\"\"The LVD to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusLVDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant LVD.\"\"\",\n        }, # column\n        \"dm3StatusLVDName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the LVD. The maximum size is \n16 characters. The name is set by using the \ndm3ConfigLVDName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dm3StatusLVDState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusClosed (1) if the LVD is closed.\nstatusOpened (2) will be returned if the LVD is opened.\"\"\",\n        }, # column\n        \"dm3StatusLVDHwFault\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusNofault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusFault (1) if the LVD is faulted.\nstatusNofault (2) will be returned if the LVD is not faulted.\"\"\",\n        }, # column\n        \"dm3StatusPowerModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6\",\n        }, # node\n        \"dm3StatusRectifier\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1\",\n        }, # node\n        \"dm3StatusRectTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant rectifiers viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusRectTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the rectifiers. The number of\nentries is contained in the dm3StatusRectTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusRectEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusRectIndex\",\n            ],\n            \"description\" :\n                \"\"\"The rectifier to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusRectIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant rectifier.\"\"\",\n        }, # column\n        \"dm3StatusRectID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier ID.  This enumerates the number of the rectifier within \na group of rectifiers.\"\"\",\n        }, # column\n        \"dm3StatusRectDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the 16-character rectifier description.\"\"\",\n        }, # column\n        \"dm3StatusRectCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier current in thousandths of Amps (mA).\"\"\",\n        }, # column\n        \"dm3StatusRectCurrentLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier is in the Current Limit state.\nstatusFalse (2) will be returned if the rectifier is not in the Current Limit state.\"\"\",\n        }, # column\n        \"dm3StatusRectStandby\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier is in the Standby state.\nstatusFalse (2) will be returned if the rectifier is not in the Standby state.\"\"\",\n        }, # column\n        \"dm3StatusRectFanFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier Fan has failed.\nstatusFalse (2) will be returned if the rectifier Fan has not failed.\"\"\",\n        }, # column\n        \"dm3StatusRectFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier has failed.\nstatusFalse (2) will be returned if the rectifier has not failed.\"\"\",\n        }, # column\n        \"dm3StatusRectDevType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier device type.\"\"\",\n        }, # column\n        \"dm3StatusRectPhyAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier physical address (the address on the bus).\"\"\",\n        }, # column\n        \"dm3StatusRectCfg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier is present after\npower-up or set-configuration.\n statusFalse (2) will be returned if the rectifier is not configured.\"\"\",\n        }, # column\n        \"dm3StatusRectPcbRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier device PCB serial number.\"\"\",\n        }, # column\n        \"dm3StatusRectFwVer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier device firmware revision.\"\"\",\n        }, # column\n        \"dm3StatusRectPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier is present.\nstatusFalse (2) will be returned if the rectifier is not present.\"\"\",\n        }, # column\n        \"dm3StatusRectDiagPass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier diagnostics have passed.\nstatusFalse (2) will be returned if the rectifier diagnostics have not passed.\"\"\",\n        }, # column\n        \"dm3StatusRectState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier device state as defined by the device status register.\"\"\",\n        }, # column\n        \"dm3StatusSysRectVoltSanity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"saneYES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"saneNO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rectifier voltage sanity indicator.  Indicates if the rectifier voltage is \nreasonable.  Reasonable is defined based on powerplant type.  A value of saneYes (1)\nindicates voltage is reasonable, a value of saneNo (2) indicates it is not.\"\"\",\n        }, # scalar\n        \"dm3StatusSysRectAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier is available.\nstatusFalse (2) will be returned if the rectifier is not available.\"\"\",\n        }, # scalar\n        \"dm3StatusSysRectType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the type of rectifier the system has.  There can only be a single type of\nrectifier in the power plant\"\"\",\n        }, # scalar\n        \"dm3StatusSysRectVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the system level rectifier voltage in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dm3StatusSysRectCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the system level rectifier current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dm3StatusConverter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2\",\n        }, # node\n        \"dm3StatusConvTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant converters viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusConvTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for viewing status of the converters. The number of\nentries is contained in the dm3StatusConvTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusConvEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusConvIndex\",\n            ],\n            \"description\" :\n                \"\"\"The converter to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusConvIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant converter.\"\"\",\n        }, # column\n        \"dm3StatusConvID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter ID.  This enumerates the number of the converter within \na group of converters.\"\"\",\n        }, # column\n        \"dm3StatusConvDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the 16 character converter description.\"\"\",\n        }, # column\n        \"dm3StatusConvCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter current in thousandths of Amps (mA).\"\"\",\n        }, # column\n        \"dm3StatusConvCurrentLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter is in the Current Limit state.\nstatusFalse (2) will be returned if the converter is not in the Current Limit state.\"\"\",\n        }, # column\n        \"dm3StatusConvStandby\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter is in the Standby state.\nstatusFalse (2) will be returned if the converter is not in the Standby state.\"\"\",\n        }, # column\n        \"dm3StatusConvFanFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter Fan has failed.\nstatusFalse (2) will be returned if the converter Fan has not failed.\"\"\",\n        }, # column\n        \"dm3StatusConvFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter has failed.\nstatusFalse (2) will be returned if the converter has not failed.\"\"\",\n        }, # column\n        \"dm3StatusConvDevType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter device type.\"\"\",\n        }, # column\n        \"dm3StatusConvPhyAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter physical address (the address on the bus).\"\"\",\n        }, # column\n        \"dm3StatusConvCfg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter is present after\npower-up or set-configuration.\n statusFalse (2) will be returned if the converter is not configured.\"\"\",\n        }, # column\n        \"dm3StatusConvPcbRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter device PCB serial number.\"\"\",\n        }, # column\n        \"dm3StatusConvFwVer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter device firmware version.\"\"\",\n        }, # column\n        \"dm3StatusConvPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter is present.\nstatusFalse (2) will be returned if the converter is not present.\"\"\",\n        }, # column\n        \"dm3StatusConvDiagPass\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter diagnostics have passed.\nstatusFalse (2) will be returned if the converter diagnostics have not passed.\"\"\",\n        }, # column\n        \"dm3StatusConvState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter state as defined by the device status register.\"\"\",\n        }, # column\n        \"dm3StatusSysConvVoltSanity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"saneYES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"saneNO\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Converter voltage sanity indicator.  Indicates if the converter voltage is \nreasonable.  Reasonable is defined based on powerplant type.  A value of saneYes (1)\nindicates voltage is reasonable, a value of saneNo (2) indicates it is not.\"\"\",\n        }, # scalar\n        \"dm3StatusSysConvAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the converter is available.\nstatusFalse (2) will be returned if the converter is not available.\"\"\",\n        }, # scalar\n        \"dm3StatusSysConvType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the converter type.\"\"\",\n        }, # scalar\n        \"dm3StatusSysConvVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the system level converter voltage in thousandths of volts (mV).\"\"\",\n        }, # scalar\n        \"dm3StatusSysConvCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.6.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the system level converter current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dm3StatusRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7\",\n        }, # node\n        \"dm3StatusOutputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1\",\n        }, # node\n        \"dm3StatusOutRlyTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant output relays viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusOutRlyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for viewing status of the output relays. The number of\nentries is contained in the dm3StatusOutRlyTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusOutRlyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusOutRlyIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relay to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusOutRlyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant output relay.\"\"\",\n        }, # column\n        \"dm3StatusOutRlyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the output relay. The maximum size is \n16 characters. The name is set by using the \ndm3ConfigOutRlyName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dm3StatusOutRlyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusOn (1) if the output relay is enabled/on.\nstatusOff (2) will be returned if the output relay is disabled/off.\"\"\",\n        }, # column\n        \"dm3StatusInputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2\",\n        }, # node\n        \"dm3StatusInRlyTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant input relays viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusInRlyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for viewing status of the input relays. The number of\nentries is contained in the dm3StatusInRlyTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusInRlyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusInRlyIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input relays to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusInRlyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant input relay.\"\"\",\n        }, # column\n        \"dm3StatusInRlyName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the input relay. The maximum size is \n16 characters. The name is set by using the \ndm3ConfigInRlyName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dm3StatusInRlyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.7.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusOn (1) if the input relay is enabled/on.\nstatusOff (2) will be returned if the input relay is disabled/off.\"\"\",\n        }, # column\n        \"dm3StatusDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8\",\n        }, # node\n        \"dm3StatusBreakers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1\",\n        }, # node\n        \"dm3StatusBreakersTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant circuit breakers viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusBreakersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for viewing status of the circuit breakers. The number of\nentries is contained in the dm3StatusBreakersTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusBreakersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusBreakersIndex\",\n            ],\n            \"description\" :\n                \"\"\"The circuit breaker to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusBreakersIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant circuit breaker.\"\"\",\n        }, # column\n        \"dm3StatusBreakersName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the circuit breaker. The maximum size is \n16 characters. The name is set by using the \ndm3ConfigBreakersName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dm3StatusBreakersStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusClosed (1) if the circuit breaker is closed.\nstatusOpen (2) will be returned if the circuit breaker is open.\"\"\",\n        }, # column\n        \"dm3StatusFuses\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2\",\n        }, # node\n        \"dm3StatusFusesTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant fuses controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dm3StatusFusesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for viewing status of the fuses. The number of\nentries is contained in the dm3StatusFusesTableSize OID.\"\"\",\n        }, # table\n        \"dm3StatusFusesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dm3StatusFusesIndex\",\n            ],\n            \"description\" :\n                \"\"\"The fuse to gather status from.\"\"\",\n        }, # row\n        \"dm3StatusFusesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant fuse.\"\"\",\n        }, # column\n        \"dm3StatusFusesName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the fuse. The maximum size is \n16 characters. The name is set by using the \ndm3ConfigFuseName OID.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"dm3StatusFusesStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.7.3.8.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusClosed (1) if the fuse is closed.\nstatusOpen (2) will be returned if the fuse is open.\"\"\",\n        }, # column\n        \"automaticTransferSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8\",\n        }, # node\n        \"atsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1\",\n        }, # node\n        \"atsIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Automatic Transfer Switch. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"atsIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string identifying the Automatic Transfer Switch \nfirmware revision.\"\"\",\n        }, # scalar\n        \"atsIdentFirmwareDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of release for this Automatic Transfer Switch \nfirmware revision. \"\"\",\n        }, # scalar\n        \"atsIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the Automatic Transfer Switch was manufactured in mm/dd/yyyy format.\nThis value is set at the factory. \"\"\",\n        }, # scalar\n        \"atsIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string identifying the model number of the Automatic Transfer Switch. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"atsIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string identifying the serial number of \nthe Automatic Transfer Switch. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"atsIdentNominalLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"RMS Utility Voltage measured in Volts.\"\"\",\n        }, # scalar\n        \"atsIdentNominalLineFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Utility Power Frequency measured in Hertz.\"\"\",\n        }, # scalar\n        \"atsIdentDeviceRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This gives the device rating in Amps\"\"\",\n        }, # scalar\n        \"atsCalibration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2\",\n        }, # node\n        \"atsCalibrationInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1\",\n        }, # node\n        \"atsCalibrationNumInputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of inputs to this device.\"\"\",\n        }, # scalar\n        \"atsCalibrationNumInputPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of phases per input for this device.\"\"\",\n        }, # scalar\n        \"atsCalibrationInputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The number of phases per input line to this device.\"\"\",\n        }, # table\n        \"atsCalibrationInputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsCalibrationInputTableIndex\",\n                \"atsCalibrationInputPhaseTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing calibration information applicable to a\nparticular input phase.\"\"\",\n        }, # row\n        \"atsCalibrationInputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"atsCalibrationInputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase identifier.\"\"\",\n        }, # column\n        \"atsLineVoltageCalibrationFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Line Voltage Calibration factor.\nThis value is set at the factory.\"\"\",\n        }, # column\n        \"atsCalibrationPowerSupply\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2\",\n        }, # node\n        \"atsCalibrationPowerSupplyVoltages\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of power supply voltages supported by this device.\nThis variable indicates the number of rows in the\natsCalibrationPowerSupplyTable.\"\"\",\n        }, # scalar\n        \"atsCalibrationPowerSupplyVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Power Supply table entries.\"\"\",\n        }, # table\n        \"atsCalibrationPowerSupplyVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsCalibrationPowerSupplyVoltageTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular Power Supply Voltage.\"\"\",\n        }, # row\n        \"atsCalibrationPowerSupplyVoltageTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power supply voltage identifier.\"\"\",\n        }, # column\n        \"atsCalibrationPowerSupplyVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powerSupply24V\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerSupply12V\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"powerSupply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"powerSupply24VSourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"powerSupplyMinus12V\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value describes the power supply voltage of\n24V Source A, 24V Source B, +12V, -12V and 5V.\"\"\",\n        }, # column\n        \"atsPowerSupplyVoltageCalibrationFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Line Voltage Calibration factor.\nThis value is set at the factory.\"\"\",\n        }, # column\n        \"atsCalibrationOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3\",\n        }, # node\n        \"atsCalibrationNumOutputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output lines from this device.\nThis variable indicates the number of rows in the\natsCalibrationOutputTable.\"\"\",\n        }, # scalar\n        \"atsCalibrationNumOutputPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output phases utilized in this\ndevice.\"\"\",\n        }, # scalar\n        \"atsCalibrationOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.\"\"\",\n        }, # table\n        \"atsCalibrationOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsCalibrationOutputTableIndex\",\n                \"atsCalibrationOutputPhasesTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output.\"\"\",\n        }, # row\n        \"atsCalibrationOutputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"atsCalibrationOutputPhasesTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each calibration factor for each \noutput phase utilized in this device and one for neutral. \"\"\",\n        }, # column\n        \"atsOutputCurrentCalibrationFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.2.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current calibration factor measured in Amps.\"\"\",\n        }, # column\n        \"atsControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.3\",\n        }, # node\n        \"atsControlResetATS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable will cause the Automatic Transfer Switch to \nperform a power-on reset.\"\"\",\n        }, # scalar\n        \"atsControlClearAllAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable will clear all alarms in the Automatic Transfer Switch.\nReturns (-1) if unsupported.\"\"\",\n        }, # scalar\n        \"atsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4\",\n        }, # node\n        \"atsConfigProductName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A configurable character string.\"\"\",\n        }, # scalar\n        \"atsConfigPreferredSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable returns the preferred source of power when both sources are OK.\"\"\",\n        }, # scalar\n        \"atsConfigFrontPanelLockout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disableFrontPanel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableFrontPanel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this variable to disableFrontPanel(1), prevents source \npreference configuration of the Automatic Transfer Switch via the\nFront Panel. \nSetting this variable to enableFrontPanel(2)allows, source preference \nconfiguration of the Automatic Transfer Switch via the Front Panel.\"\"\",\n        }, # scalar\n        \"atsConfigVoltageSensitivity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable defines the sensitivity to changes in voltage: \nhigh(1) for best protection, low(2) for frequent small line \nvoltage changes.\"\"\",\n        }, # scalar\n        \"atsConfigTransferVoltageRange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"wide\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"medium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"narrow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable defines the range of acceptable voltage from a power source.\nIf the voltage measured from the selected input source is not within this\nrange, the Automatic Transfer Switch will switch over (transfer) to the \nalternate power source.\"\"\",\n        }, # scalar\n        \"atsConfigCurrentLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The threshold (in Amps) at which an Over Current Alarm will be generated.\nThis OID returns the overload threshold value of the\nOID atsConfigPhaseOverLoadThreshold for the 1U ATS and \nOID atsConfigBankOverLoadThreshold of total for the 2U ATS.\nSetting this OID does not have any impact on the device.\"\"\",\n        }, # scalar\n        \"atsConfigResetValues\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Resets the ATS configuration to its default values.\nReturns (-1) if not supported.\"\"\",\n        }, # scalar\n        \"atsConfigLineVRMS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the input RMS voltage.\"\"\",\n        }, # scalar\n        \"atsConfigLineVRMSNarrowLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the Line VRMS Narrow Limit.\"\"\",\n        }, # scalar\n        \"atsConfigLineVRMSMediumLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the Line VRMS Medium Limit.\"\"\",\n        }, # scalar\n        \"atsConfigLineVRMSWideLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the Line VRMS Wide Limit.\"\"\",\n        }, # scalar\n        \"atsConfigFrequencyDeviation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To configure the frequency deviation.\"\"\",\n        }, # scalar\n        \"atsConfigBankTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the bank table.\"\"\",\n        }, # scalar\n        \"atsConfigBankTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of each ATS bank.\"\"\",\n        }, # table\n        \"atsConfigBankEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsConfigBankTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to bank current threshold\"\"\",\n        }, # row\n        \"atsConfigBankTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index to the bank table entry.\"\"\",\n        }, # column\n        \"atsConfigBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"total\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bank1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bank2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank number of an ATS\"\"\",\n        }, # column\n        \"atsConfigBankLowLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn is nearing \na low consumption condition. It is represented in Amps.  \nA warning will be issued when the load is less than the \nthreshold value.  \n\nA threshold value of 0 Amps disables this warning.  \n\nMaximum value must be less than the value returned \nby the atsConfigBankNearOverLoadThreshold OID.\"\"\",\n        }, # column\n        \"atsConfigBankNearOverLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn is nearing \nan overload condition. It is represented in Amps.  \nA warning will be issued when the load is greater than \nor equal to the threshold value.\n\nMinimum value must be greater than the value returned by\nthe atsConfigBankLowLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the atsConfigBankOverLoadThreshold OID.\"\"\",\n        }, # column\n        \"atsConfigBankOverLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn has entered \nan overload condition. It is represented in Amps.  \nA warning will be issued when the load is greater than or\nequal to the threshold value.\n\nMinimum value must be greater than or equal to the value \nreturned by the atsConfigBankNearOverLoadThreshold OID.\n\nMaximum value must be less than or equal to the value returned by \natsIdentDeviceRating OID.\"\"\",\n        }, # column\n        \"atsConfigPhaseTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the phase table.\"\"\",\n        }, # scalar\n        \"atsConfigPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of each ATS phase.\"\"\",\n        }, # table\n        \"atsConfigPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsConfigPhaseTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to phase threshold\"\"\",\n        }, # row\n        \"atsConfigPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the phase table entry.\"\"\",\n        }, # column\n        \"atsConfigPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase number of an ATS\"\"\",\n        }, # column\n        \"atsConfigPhaseLowLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn is nearing \na low consumption condition. It is represented in Amps.\nA warning will be issued when the load is less than the\nthreshold value.  \n\nA threshold value of 0 Amps disables this warning.  \n\nMaximum value must be less than the value returned \nby the atsConfigPhaseNearOverLoadThreshold OID.\"\"\",\n        }, # column\n        \"atsConfigPhaseNearOverLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn is nearing\nan overload condition. It is represented in Amps.  \nA warning will be issued when the load is greater than \nor equal to the threshold value.\n\nMinimum value must be greater than the value returned by\nthe atsConfigPhaseLowLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the atsConfigPhaseOverLoadThreshold OID.\"\"\",\n        }, # column\n        \"atsConfigPhaseOverLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.4.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the current drawn has entered \nan overload condition. It is represented in Amps.  \nA warning will be issued when the load is greater than or\nequal to the threshold value.\n\nMinimum value must be greater than or equal to the value \nreturned by the atsConfigPhaseNearOverLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by atsIdentDeviceRating OID.\"\"\",\n        }, # column\n        \"atsStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5\",\n        }, # node\n        \"atsStatusDeviceStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1\",\n        }, # node\n        \"atsStatusCommStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsNeverDiscovered\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsCommEstablished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"atsCommLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the current communication status\nof the Automatic Transfer Switch. \"\"\",\n        }, # scalar\n        \"atsStatusSelectedSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the current source of power. \"\"\",\n        }, # scalar\n        \"atsStatusRedundancyState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsRedundancyLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsFullyRedundant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the current redundancy state of the ATS.\natsRedundancyLost(1) indicates that the ATS is unable to\nswitch over to the alternate power source if the current source fails.\natsFullyRedundant(2) indicates that the ATS will switch over to \nthe alternate power source if the current source fails.\"\"\",\n        }, # scalar\n        \"atsStatusOverCurrentState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsOverCurrent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsCurrentOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the output current state of the ATS.\natsOverCurrent(1) indicates that the ATS has exceeded the output \ncurrent threshold and will not allow a switch over to the alternate power\nsource if the current source fails.\natsCurrentOK(2) indicates that the output current is below the \noutput current threshold.\nThis OID returns the value of the OID atsOutputPhaseState for the 1U ATS and\nOID atsOutputBankState for the 2U ATS.\"\"\",\n        }, # scalar\n        \"atsStatus5VPowerSupply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsPowerSupplyFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsPowerSupplyOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS 5V power supply.\natsPowerSupplyFailure(1) indicates the 5V power supply has failed\nand that the ATS serial port Configuration Menu is not accessible .\natsPowerSupplyOK(2) indicates that the ATS 5V power supply\nis operating within tolerance.\"\"\",\n        }, # scalar\n        \"atsStatus24VPowerSupply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsPowerSupplyFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsPowerSupplyOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS 24V power supply for Source A.\natsPowerSupplyFailure(1) indicates the 24V power supply has failed\nand the ATS is unable to switch over to the alternate power source if \nthe current source fails.\natsPowerSupplyOK(2) indicates that the ATS 24V power supply\nis operating within tolerance.\"\"\",\n        }, # scalar\n        \"atsStatus24VSourceBPowerSupply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsPowerSupplyFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsPowerSupplyOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS 24V power supply for Source B.\natsPowerSupplyFailure(1) indicates the 24V power supply has failed\nand the ATS is unable to switch over to the alternate power source if \nthe current source fails.\natsPowerSupplyOK(2) indicates that the ATS 24V power supply\nis operating within tolerance.\"\"\",\n        }, # scalar\n        \"atsStatusPlus12VPowerSupply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsPowerSupplyFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsPowerSupplyOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS 12V power supply.\natsPowerSupplyFailure(1) indicates the 12V power supply has failed\nand the ATS is unable to monitor the current sensors.\natsPowerSupplyOK(2) indicates that the ATS 12V power supply\nis operating within tolerance.\"\"\",\n        }, # scalar\n        \"atsStatusMinus12VPowerSupply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"atsPowerSupplyFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"atsPowerSupplyOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS -12V power supply.\natsPowerSupplyFailure(1) indicates the -12V power supply has failed\nand the ATS is unable to monitor the current sensors.\natsPowerSupplyOK(2) indicates that the ATS -12V power supply\nis operating within tolerance.\"\"\",\n        }, # scalar\n        \"atsStatusSwitchStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the status of the ATS.\"\"\",\n        }, # scalar\n        \"atsStatusFrontPanel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"locked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unlocked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the present state of the ATS front panel. \nlocked(1): Front panel button cannot be used to change the sources.\nunlocked(2): Front panel button can be used to change the sources. \"\"\",\n        }, # scalar\n        \"atsStatusSourceAStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the status of the Source A.\"\"\",\n        }, # scalar\n        \"atsStatusSourceBStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the status of the Source B.\"\"\",\n        }, # scalar\n        \"atsStatusPhaseSyncStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outOfSync\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the status of the phase synch.\"\"\",\n        }, # scalar\n        \"atsStatusVoltageOutStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the output voltage status.\"\"\",\n        }, # scalar\n        \"atsStatusHardwareStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable returns the status of display board hardware.\"\"\",\n        }, # scalar\n        \"atsStatusResetValues\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.2\",\n        }, # node\n        \"atsStatusResetMaxMinValues\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Resets the maximum and minimum ATS values:\natsInputMaxVoltage,       atsInputMinVoltage,\natsInputMaxCurrent,       atsInputMinCurrent,\natsInputMaxPower,         atsInputMinPower,\natsOutputMaxCurrent,      atsOutputMinCurrent,\natsOutputMaxLoad,         atsOutputMinLoad,\natsOutputMaxPercentLoad,  atsOutputMinPercentLoad,\natsOutputMaxPower,        atsOutputMinPower,\natsOutputMaxPercentPower, atsOutputMinPercentPower.\nThese variables represent the maximum and minimum ATS values\nsince the last time they were read or reset by this OID.\nValues unsupported by this ATS will return (-1).\"\"\",\n        }, # scalar\n        \"atsStatusInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3\",\n        }, # node\n        \"atsNumInputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input feeds to this device.\nThis variable indicates the number of rows in the\ninput table.\"\"\",\n        }, # scalar\n        \"atsInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the value of atsNumInputs.\"\"\",\n        }, # table\n        \"atsInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsInputTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input.\"\"\",\n        }, # row\n        \"atsInputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"atsNumInputPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input phases utilized in this\ndevice.  The sum of all the atsNumInputPhases\nvariable indicates the number of rows in the \ninput phase table.\"\"\",\n        }, # column\n        \"atsInputVoltageOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhasePhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"threePhasePhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage orientation: \n1: unknown for this Source\n2: singlePhase - phase 1 voltage is between Phase 1\nand Neutral.\n3: splitPhase - phase 1 voltage is between Phase 1 and \nNeutral; phase 2 voltage is between Phase 2 and Neutral; \nphase 3 voltage is between Phase 1 and Phase 2.\n4: threePhasePhaseToNeutral - phase 1 voltage is between\nPhase 1 and Neutral; phase 2 voltage is between Phase 2 \nand Neutral; phase 3 voltage is between Phase 3 and\nNeutral.\n5: threePhasePhaseToPhase - phase 1 voltage is between \nPhase 1 and Phase 2; phase 2 voltage is between Phase 2\nand Phase 3; phase 3 voltage is between Phase 3 and\nPhase 1.\"\"\",\n        }, # column\n        \"atsInputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input frequency in Hertz, or -1 if it's unsupported\nby this Source.\"\"\",\n        }, # column\n        \"atsInputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"main\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input type.\"\"\",\n        }, # column\n        \"atsInputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A name given to a particular input.\"\"\",\n        }, # column\n        \"atsInputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the sum of the atsNumInputPhases.\"\"\",\n        }, # table\n        \"atsInputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsInputPhaseTableIndex\",\n                \"atsInputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input phase.\"\"\",\n        }, # row\n        \"atsInputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input identifier.\"\"\",\n        }, # column\n        \"atsInputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input phase identifier.\"\"\",\n        }, # column\n        \"atsInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input voltage in VAC, or -1 if it's unsupported\nby this Source.\"\"\",\n        }, # column\n        \"atsInputMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input voltage in VAC measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsInputMinVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input voltage in VAC measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input current in amperes, or -1 if it's\nunsupported by this Source.\"\"\",\n        }, # column\n        \"atsInputMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input current in amperes measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsInputMinCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input current in amperes measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsInputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input power in Watts, or -1 if it's unsupported\nby this Source.\"\"\",\n        }, # column\n        \"atsInputMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum input power in Watts measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsInputMinPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum input power in Watts measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsStatusOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4\",\n        }, # node\n        \"atsNumOutputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output feeds to this device.\nThis variable indicates the number of rows in the\noutput table.\"\"\",\n        }, # scalar\n        \"atsOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of entries\nis given by the value of atsOutputNumPhases.\"\"\",\n        }, # table\n        \"atsOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsOutputTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output.\"\"\",\n        }, # row\n        \"atsOutputTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"atsNumOutputPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output phases utilized in this\ndevice.  The sum of all the atsNumOutputPhases\nvariable indicates the number of rows in the \noutput phase table.\"\"\",\n        }, # column\n        \"atsOutputVoltageOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"singlePhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"splitPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threePhasePhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"threePhasePhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage orientation: \n1: unknown for this ATS\n2: singlePhase - phase 1 voltage is between Phase 1\nand Neutral.\n3: splitPhase - phase 1 voltage is between Phase 1 and \nNeutral; phase 2 voltage is between Phase 2 and Neutral; \nphase 3 voltage is between Phase 1 and Phase 2.\n4: threePhasePhaseToNeutral - phase 1 voltage is between\nPhase 1 and Neutral; phase 2 voltage is between Phase 2 \nand Neutral; phase 3 voltage is between Phase 3 and\nNeutral.\n5: threePhasePhaseToPhase - phase 1 voltage is between \nPhase 1 and Phase 2; phase 2 voltage is between Phase 2\nand Phase 3; phase 3 voltage is between Phase 3 and\nPhase 1.\"\"\",\n        }, # column\n        \"atsOutputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output frequency in Hertz, or -1 if it's\nunsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of\nentries is given by the sum of the atsNumOutputPhases.\"\"\",\n        }, # table\n        \"atsOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsOutputPhaseTableIndex\",\n                \"atsOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output phase.\"\"\",\n        }, # row\n        \"atsOutputPhaseTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output identifier.\"\"\",\n        }, # column\n        \"atsOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"neutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each output phase utilized in \nthis device and one for neutral. \"\"\",\n        }, # column\n        \"atsOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage in VAC, or -1 if it's unsupported\nby this ATS.\"\"\",\n        }, # column\n        \"atsOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output current in 0.1 amperes drawn \nby the load on the ATS, or -1 if it's unsupported\nby this ATS.\"\"\",\n        }, # column\n        \"atsOutputMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output current in 0.1 amperes measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputMinCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output current in 0.1 amperes measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output load in VA, or -1 if it's unsupported\nby this ATS.\"\"\",\n        }, # column\n        \"atsOutputMaxLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output load in VA measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1)  if unsupported.\"\"\",\n        }, # column\n        \"atsOutputMinLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output load in VA measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the ATS load capacity in VA at \nredundancy @ (n + x) presently being used on this \noutput phase, or -1 if it's unsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputMaxPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the ATS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this output phase since the last time\nthis variable was read or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputMinPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum percentage of the ATS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this output phase since the last time\nthis variable was read or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output power in Watts, or -1 if it's\nunsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output power in Watts measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputMinPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output power in Watts measured\nsince the last time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the ATSpower capacity in Watts at \nredundancy @ (n + x) presently being used on this \noutput phase, or -1 if it's unsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputMaxPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the ATSpower capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this output phase since the last time\nthis variable was read or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputMinPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum percentage of the ATSpower capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this output phase since the last time\nthis variable was read or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputPhaseState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearoverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the phase load state.\n\nnormal(1) indicates that the bank is operating properly \nwithin the atsConfigPhaseLowLoadThreshold and \natsConfigPhaseNearOverLoadThreshold OID values.\n\nlowload(2) indicates that the bank load has dropped below \nthe atsConfigPhaseLowLoadThreshold OID value. An SNMP trap\nwill occur when this state is entered or cleared.\n\nnearoverload(3) indicates that the bank load is greater than \nor equal to the atsConfigPhaseNearOverLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\noverload(4) indicates that the bank load is greater than or \nequal to the atsConfigPhaseOverLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"atsOutputBankTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the bank table.\"\"\",\n        }, # scalar\n        \"atsOutputBankTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting table entries.\"\"\",\n        }, # table\n        \"atsOutputBankEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"atsOutputBankTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to bank table entries\"\"\",\n        }, # row\n        \"atsOutputBankTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the bank table entry.\"\"\",\n        }, # column\n        \"atsOutputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase number of an ATS\"\"\",\n        }, # column\n        \"atsOutputBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"total\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bank1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bank2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank number of an ATS\"\"\",\n        }, # column\n        \"atsOutputBankCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the bank current measured\nin tenths of Amps.\"\"\",\n        }, # column\n        \"atsOutputBankState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearoverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the bank load state.\n\nnormal(1) indicates that the bank is \noperating properly within the atsConfigBankLowLoadThreshold \nand atsConfigBankNearOverLoadThreshold OID values.\n\nlowload(2) indicates that the bank load has dropped below the \natsConfigBankLowLoadThreshold OID value. An SNMP trap will \noccur when this state is entered or cleared.\n\nnearoverload(3) indicates that the bank load is greater than \nor equal to the atsConfigBankNearOverLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\noverload(4) indicates that the bank load is greater than or \nequal to the atsConfigBankOverLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"atsOutputBankOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output voltage in VAC, or -1 if it's unsupported\nby this ATS.\"\"\",\n        }, # column\n        \"atsOutputBankMaxCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output current, on the bank represented by \nOID atsOutputBank, in 0.1 amperes measured since the \nlast time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMinCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output current, on the bank represented by \nOID atsOutputBank, in 0.1 amperes measured since the \nlast time this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output load, on the bank represented by \nOID atsOutputBank, in VA, or -1 if it's \nunsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputBankMaxLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output load, on the bank represented by \nOID atsOutputBank, in VA measured since the last \ntime this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1)  if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMinLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output load, on the bank represented by \nOID atsOutputBank, in VA measured since the last \ntime this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the ATS load capacity in VA at \nredundancy @ (n + x) presently being used on this \nbank, represented by OID atsOutputBank.\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMaxPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the ATS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this bank, represented by OID atsOutputBank, \nsince the last time this variable was read or \nreset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMinPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum percentage of the ATS load capacity in \nVA measured at redundancy @ (n + x) presently \nbeing used on this bank, represented by OID \natsOutputBank, since the last time this variable was \nread or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output power in Watts on the bank represented by \nOID atsOutputBank or -1 if it's unsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputBankMaxPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum output power in Watts measured on the bank\nrepresented by OID atsOutputBank since the last \ntime this variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMinPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum output power in Watts measured on the bank \nrepresented by OID atsOutputBank since the last time \nthis variable was read \nor reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percentage of the ATSpower capacity in Watts at \nredundancy @ (n + x) presently being used on this \nbank, represented by OID atsOutputBank, or \n-1 if it's unsupported by this ATS.\"\"\",\n        }, # column\n        \"atsOutputBankMaxPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum percentage of the ATSpower capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this bank, represented by OID \natsOutputBank, since the last time this variable \nwas read or reset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"atsOutputBankMinPercentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.8.5.4.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum percentage of the ATSpower capacity\nin Watts measured at redundancy @ (n + x) presently\nbeing used on this bank, represented by OID atsOutputBank\nsince the last time this variable was read or \nreset (atsStatusResetMaxMinValues).\nReturns (-1) if unsupported.\"\"\",\n        }, # column\n        \"dc2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9\",\n        }, # node\n        \"dcmim2Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.1\",\n        }, # node\n        \"dcmim2IdentSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.1.1\",\n        }, # node\n        \"dcmim2IdentSysFWVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Integer representation of the power plant Master Controller firmware revision.\"\"\",\n        }, # scalar\n        \"dcmim2Control\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.2\",\n        }, # node\n        \"dcmim2ControlSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.2.1\",\n        }, # node\n        \"dcmim2ControlRunFunctBatteryTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"battTestOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"battTestOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this OID will return the battery functional test state. If \nthe test is off, the battTestOff (1) value will be returned.\nIf the test is on, the battTestOn (2) value will be\nreturned.  \n\nSetting this OID to battTestOff (1) will turn the battery functional test off.\nSetting this OID to battTestOn (2) will turn the battery functional test on.\"\"\",\n        }, # scalar\n        \"dcmim2ControlRunCapacityBatteryTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"battTestOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"battTestOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this OID will return the battery capacity test state. If \nthe test is off, the battTestOff (1) value will be returned.\nIf the test is on, the battTestOn (2) value will be\nreturned.  \n\nSetting this OID to battTestOff (1) will turn the battery capacity test off.\nSetting this OID to battTestOn (2) will turn the battery capacity test on.\"\"\",\n        }, # scalar\n        \"dcmim2Config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3\",\n        }, # node\n        \"dcmim2ConfigSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.1\",\n        }, # node\n        \"dcmim2ConfigSysHighTempTrip\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Trip level (threshold) at which System High Temp alarm condition is created. \nRange 28 to 100 (degC).\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigSysHighTempReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level at which System High Temp alarm condition is reset (cleared). \nRange 25 to (upper temp - 3) (degC).\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigSysLowTempTrip\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Trip level (threshold) at which System Low Temp alarm condition is created. \nRange -100 to 10 (degC).\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigSysLowTempReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level at which System Low Temp alarm condition is reset (cleared). \nRange (lower temp + 3) to 13 (degC).\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2\",\n        }, # node\n        \"dcmim2ConfigBattFloatVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery Float Voltage defined at 25 degrees Celsius.\n\nValues are represented in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattMaxRecharge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery Maximum Recharge Rate.  This is the maximum current used\nduring battery charging.  \n\nValues are represented in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattMfgCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Battery capacity (Amp-Hour Size) as specified by the battery manufacturer.\n\nValues are represented in thousandths of Amp hours (mAHr).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of battery in the powerplant\n\nValid values range from 0 to 254.\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattFunctTestDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Duration of the battery functional test.\n\nValues are represented in thousandths of seconds (mSecs).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattFunctTestThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold the battery voltage of the system must remain above\nin order to pass the battery functional test.\n\nValues are represented in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattCapacityTestPercent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold for good battery capacity test results.\n\nValues range from 0 to 100 percent.\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattCapacityTestEndThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Safeguard voltage at which battery capacity test will end \nif there is a battery problem.\n\nValues are represented in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigBattCapacityTestCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Constant current value used during battery capacity testing.\n\nValues are represented in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dcmim2ConfigLVD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3\",\n        }, # node\n        \"dcmim2ConfigLVDTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant LVDs controllable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dcmim2ConfigLVDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the LVDs. The number of\nentries is contained in the dcmim2ConfigLVDTableSize OID.\"\"\",\n        }, # table\n        \"dcmim2ConfigLVDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcmim2ConfigLVDIndex\",\n            ],\n            \"description\" :\n                \"\"\"The LVD to configure.\"\"\",\n        }, # row\n        \"dcmim2ConfigLVDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant LVD.\"\"\",\n        }, # column\n        \"dcmim2ConfigLVDTrip\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LVD Trip threshold.  System bus voltage at which LVD will trip (open)\nduring a battery backup operation.\n\nValues are represented in thousandths of Volts (mV).\"\"\",\n        }, # column\n        \"dcmim2ConfigLVDReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LVD Reset threshold.  System bus voltage at which LVD will reset (close)\nafter AC power has been restored.\n\nValues are represented in thousandths of Volts (mV).\"\"\",\n        }, # column\n        \"dcmim2ConfigLVDState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.3.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusClosed (1) if the LVD is closed.\nstatusOpened (2) will be returned if the LVD is opened.\"\"\",\n        }, # column\n        \"dcmim2Status\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4\",\n        }, # node\n        \"dcmim2StatusSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1\",\n        }, # node\n        \"dcmim2StatusSysRectCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System (Total Rectifier) current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dcmim2StatusSysLoadCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Load current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dcmim2StatusSysBusVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System bus voltage in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dcmim2StatusSysAmbientTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System temperature based on sensor on Master Controller PCB.\n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2StatusSysUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length of time since the DC Powerplant controller has been powered up.\"\"\",\n        }, # scalar\n        \"dcmim2StatusSysTempUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nin the DC system, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # scalar\n        \"dcmim2StatusRectifier\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2\",\n        }, # node\n        \"dcmim2StatusRectTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant rectifiers viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dcmim2StatusRectTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing settings of the rectifiers. The number of\nentries is contained in the dcmim2StatusRectTableSize OID.\"\"\",\n        }, # table\n        \"dcmim2StatusRectEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcmim2StatusRectIndex\",\n            ],\n            \"description\" :\n                \"\"\"The rectifier to gather status from.\"\"\",\n        }, # row\n        \"dcmim2StatusRectIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant rectifier.\"\"\",\n        }, # column\n        \"dcmim2StatusRectDevType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier device type.\"\"\",\n        }, # column\n        \"dcmim2StatusRectID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier ID.  This enumerates the number of the rectifier within \na group of rectifiers.\"\"\",\n        }, # column\n        \"dcmim2StatusRectPhyAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the rectifier physical address (the address on the bus).\"\"\",\n        }, # column\n        \"dcmim2StatusRectFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusTrue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusFalse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusTrue (1) if the rectifier has failed.\nstatusFalse (2) will be returned if the rectifier has not failed.\"\"\",\n        }, # column\n        \"dcmim2StatusRectCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID shows the individual rectifier current in thousandths of Amps (mA).\"\"\",\n        }, # column\n        \"dcmim2StatusBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3\",\n        }, # node\n        \"dcmim2StatusBattFloatVolt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Float Voltage represented in thousandths of Volts (mV).\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Current:  This OID shows the battery current in thousandths of Amps (mA).\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Temperature:  \n\nValues are represented in thousandths of a degree.\nUnits are displayed in the scale shown in\nthe 'dcmim2StatusSysTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattMfgCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery capacity (Amp-Hour Size) as specified by the battery manufacturer.\nValues are represented in thousandths of Amp hours (mAHr).\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattTestCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery capacity (Amp-Hour Size) as determined by the battery capacity test.  \nValues are represented in thousandths of Amp hours (mAHr).\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattFunctTestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"functTestNotPerformed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"functTestInProcess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"functTestInterrupted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"functTestPass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"functTestFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Results of the last battery functional test that was run.\"\"\",\n        }, # scalar\n        \"dcmim2StatusBattCapacityTestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"capacityTestNotPerformed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"capacityTestInProcess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"capacityTestInterrupted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"capacityTestPass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"capacityTestFail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Results of the last battery capacity test that was run.\"\"\",\n        }, # scalar\n        \"dcmim2StatusLVD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4\",\n        }, # node\n        \"dcmim2StatusLVDTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant LVDs accessible\nby this IP address.\"\"\",\n        }, # scalar\n        \"dcmim2StatusLVDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing the LVDs. The number of\nentries is contained in the dcmim2StatusLVDTableSize OID.\"\"\",\n        }, # table\n        \"dcmim2StatusLVDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcmim2StatusLVDIndex\",\n            ],\n            \"description\" :\n                \"\"\"The LVD to access.\"\"\",\n        }, # row\n        \"dcmim2StatusLVDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the DC powerplant LVD.\"\"\",\n        }, # column\n        \"dcmim2StatusLVDState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return statusClosed (1) if the LVD is closed.\nstatusOpened (2) will be returned if the LVD is opened.\"\"\",\n        }, # column\n        \"dcmim2StatusAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5\",\n        }, # node\n        \"dcmim2StatusAlarmsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of DC powerplant alarms viewable\nby this IP address.\"\"\",\n        }, # scalar\n        \"dcmim2StatusAlarmsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for accessing system alarms. The number of\nentries is contained in the dcmim2StatusAlarmsTableSize OID.\"\"\",\n        }, # table\n        \"dcmim2StatusAlarmsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcmim2StatusAlarmsIndex\",\n            ],\n            \"description\" :\n                \"\"\"The alarm to display.\"\"\",\n        }, # row\n        \"dcmim2StatusAlarmsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the system alarm.\"\"\",\n        }, # column\n        \"dcmim2StatusAlarmsText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.9.4.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The 16 character text describing the active alarm condition.\"\"\",\n        }, # column\n        \"environmentalMonitor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10\",\n        }, # node\n        \"external\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1\",\n        }, # node\n        \"emIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.1\",\n        }, # node\n        \"emIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the Environmental Monitor.\"\"\",\n        }, # scalar\n        \"emConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2\",\n        }, # node\n        \"emConfigProbesNumProbes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of temperature and humidity probes available.\"\"\",\n        }, # scalar\n        \"emConfigProbesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of probes supported by the Environmental Monitor\nand their configurations.\"\"\",\n        }, # table\n        \"emConfigProbesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emConfigProbeNumber\",\n            ],\n            \"description\" :\n                \"\"\"The Environmental Monitor probe configurations.\"\"\",\n        }, # row\n        \"emConfigProbeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into an Environmental Monitor probe entry.\"\"\",\n        }, # column\n        \"emConfigProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name of the probe set by the user,\npossibly denoting its location or purpose.\"\"\",\n        }, # column\n        \"emConfigProbeHighTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeLowTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeTempUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nthresholds of the probe, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # column\n        \"emConfigProbeHighHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"emConfigProbeLowHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"emConfigProbeHighTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeLowTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeHighHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeLowHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeMaxTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeMinTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeMaxHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximun humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"emConfigProbeMinHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"emConfigProbeMaxTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeMinTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeMaxHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeMinHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"emConfigProbeTempHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees beyond the temperature thresholds\nat which an active temperature alarm will be cleared.\nThis configuration setting applies to all temperature\nthresholds.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeHumidHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of percent RH points beyond the humidity\nthresholds at which an active humidity alarm will be\ncleared. This configuration setting applies to all\nhumidity thresholds.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emConfigProbeLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the location of the probe.\"\"\",\n        }, # column\n        \"emConfigContactsNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported by the Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"emConfigContactsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the Environmental Monitor\nand their configurations.\"\"\",\n        }, # table\n        \"emConfigContactsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emConfigContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"The Environmental Monitor contact configurations.\"\"\",\n        }, # row\n        \"emConfigContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an Environmental Monitor contact.\"\"\",\n        }, # column\n        \"emConfigContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for an Environmental Monitor\ncontact set by the user, possibly denoting its\nlocation or purpose.\"\"\",\n        }, # column\n        \"emConfigContactEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An Environmental Monitor contact alarm enable/disable.\nNo alarm will be generated if the contact is disabled(1).\nAn alarm will be generated if the contact is enabled(2)\nand the contact has been faulted.\"\"\",\n        }, # column\n        \"emConfigContactSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The severity of the alarm that will be triggered when\nthe input contact is activated. The alarms can be\ncritical(1), warning(2) or informational(3).\"\"\",\n        }, # column\n        \"emConfigContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contact state that will be considered normal, i.e.\nwill not trigger an alarm. The states are open(1) or \nclosed(2).\"\"\",\n        }, # column\n        \"emConfigContactLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive label for the contact denoting its\nlocation or purpose.\"\"\",\n        }, # column\n        \"emStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3\",\n        }, # node\n        \"emStatusCommStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"comm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communication status between the agent\nand the Environmental Monitor.\n\nnoComm(1),   Communication has never been established.\ncomm(2),     Communication has been established.\ncommLost(3), Communication was established, but was lost.\"\"\",\n        }, # scalar\n        \"emStatusProbesNumProbes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of available probes on the Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"emStatusProbesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of probes supported by the Environmental Monitor\nand their status.\"\"\",\n        }, # table\n        \"emStatusProbesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emStatusProbeNumber\",\n            ],\n            \"description\" :\n                \"\"\"The status of the probe.\"\"\",\n        }, # row\n        \"emStatusProbeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the probe.\"\"\",\n        }, # column\n        \"emStatusProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the probe set by the user,\npossibly denoting its location or purpose.\"\"\",\n        }, # column\n        \"emStatusProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The connected status of the probe, either      \ndisconnected(1) or connected(2).\"\"\",\n        }, # column\n        \"emStatusProbeCurrentTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current temperature reading from the probe displayed\nin the units shown in the 'emStatusProbeTempUnits' OID\n(Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emStatusProbeTempUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nthresholds of the probe, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # column\n        \"emStatusProbeCurrentHumid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current humidity reading from the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"emStatusProbeHighTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high temperature violation status of the probe\ntemperature reading. This OID will show a highTempViolation(2)\nif the current temperature reading shown in the\n'emStatusProbeCurrentTemp' OID is greater than or equal to\nthe high temperature threshold value, the \n'emConfigProbeHighTempThreshold' OID, and the value of the\n'emConfigProbeHighTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'emConfigProbeHighTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusProbeLowTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high temperature violation status of the probe\ntemperature reading. This OID will show a lowTempViolation(2)\nif the current temperature reading shown in the\n'emStatusProbeCurrentTemp' OID is less than or equal to\nthe low temperature threshold value, the \n'emConfigProbeLowTempThreshold' OID, and the value of the\n'emConfigProbeLowTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'emConfigProbeLowTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusProbeHighHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high humidity violation status of the probe humidity\nreading. This OID will show a highTempViolation(2)\nif the current humidity reading shown in the\n'emStatusProbeCurrentHumid' OID is greater than or equal to\nthe high humidity threshold value, the \n'emConfigProbeHighHumidThreshold' OID, and the value of the\n'emConfigProbeHighHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1).  If the 'emConfigProbeHighHumidEnable' OID is\ndisabled, this OID will show disabled(3)\"\"\",\n        }, # column\n        \"emStatusProbeLowHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The low humidity violation status of the probe humidity\nreading. This OID will show a lowTempViolation(2)\nif the current humidity reading shown in the\n'emStatusProbeCurrentHumid' OID is less than or equal to\nthe low humidity threshold value, the \n'emConfigProbeLowHumidThreshold' OID, and the value of the\n'emConfigProbeLowHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1). If the 'emConfigProbeLowHumidEnable' OID is\ndisabled, this OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusProbeMaxTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maxTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The max temperature violation status of the probe\ntemperature reading. This OID will show a maxTempViolation(2)\nif the current temperature reading shown in the\n'emStatusProbeCurrentTemp' OID is greater than or equal to\nthe maximun temperature threshold value, the \n'emConfigProbeMaxTempThreshold' OID, and the value of the\n'emConfigProbeMaxTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'emConfigProbeMaxTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusProbeMinTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum temperature violation status of the probe\ntemperature reading. This OID will show a minTempViolation(2)\nif the current temperature reading shown in the\n'emStatusProbeCurrentTemp' OID is less than or equal to\nthe minimum temperature threshold value, the \n'emConfigProbeMinTempThreshold' OID, and the value of the\n'emConfigProbeMinTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'emConfigProbeMinTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusProbeMaxHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maxHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum humidity violation status of the probe humidity\nreading. This OID will show a maxTempViolation(2)\nif the current humidity reading shown in the\n'emStatusProbeCurrentHumid' OID is greater than or equal to\nthe maximum humidity threshold value, the \n'emConfigProbeMaxHumidThreshold' OID, and the value of the\n'emConfigProbeMaxHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1).  If the 'emConfigProbeMaxHumidEnable' OID is\ndisabled, this OID will show disabled(3)\"\"\",\n        }, # column\n        \"emStatusProbeMinHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum humidity violation status of the probe humidity\nreading. This OID will show a minTempViolation(2)\nif the current humidity reading shown in the\n'emStatusProbeCurrentHumid' OID is less than or equal to\nthe minimum humidity threshold value, the \n'emConfigProbeMinHumidThreshold' OID, and the value of the\n'emConfigProbeMinHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1). If the 'emConfigProbeMinHumidEnable' OID is\ndisabled, this OID will show disabled(3).\"\"\",\n        }, # column\n        \"emStatusContactsNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported by the\nEnvironmental Monitor.\"\"\",\n        }, # scalar\n        \"emStatusContactsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the Environmental Monitor\nand their status.\"\"\",\n        }, # table\n        \"emStatusContactsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emStatusContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"The status of the contact.\"\"\",\n        }, # row\n        \"emStatusContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the Environmental Monitor contact.\"\"\",\n        }, # column\n        \"emStatusContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the Environmental Monitor contact\nset by the user, possibly denoting its location or purpose.\"\"\",\n        }, # column\n        \"emStatusContactStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.1.3.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Environmental Monitor contact. The status\nwill show noFault(1) if the contact is in the normal state\nand the 'emConfigContactEnable' OID is enabled. The status will\nshow a fault(2) if the contact is faulted and the \n'emContactEnable' OID is enabled. If the 'emConfigContactEnable'\nOID is disabled, the status will show disabled(3).\"\"\",\n        }, # column\n        \"integrated\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2\",\n        }, # node\n        \"iemIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.1\",\n        }, # node\n        \"iemIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Integrated Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"iemConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2\",\n        }, # node\n        \"iemConfigProbesNumProbes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of temperature and humidity probes available.\"\"\",\n        }, # scalar\n        \"iemConfigProbesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of probes supported by the Environmental Monitor\nand their configurations.\"\"\",\n        }, # table\n        \"iemConfigProbesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemConfigProbeNumber\",\n            ],\n            \"description\" :\n                \"\"\"The Environmental Monitor probe configurations.\"\"\",\n        }, # row\n        \"iemConfigProbeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to a Environmental Monitor probe entry.\"\"\",\n        }, # column\n        \"iemConfigProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the probe set by the user,\npossibly denoting its location or purpose.\"\"\",\n        }, # column\n        \"iemConfigProbeHighTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in the\n'iemConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeLowTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in the\n'iemConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeTempUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nthresholds of the probe, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # column\n        \"iemConfigProbeHighHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"iemConfigProbeLowHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"iemConfigProbeHighTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeLowTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeHighHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeLowHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeMaxTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximun temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in the\n'iemConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeMinTempThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimun temperature alarm threshold for the probe.\nUnits are displayed in the scale selected in the\n'iemConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeMaxHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"iemConfigProbeMinHumidThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum humidity alarm threshold for the probe in\npercent relative humidity.\"\"\",\n        }, # column\n        \"iemConfigProbeMaxTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeMinTempEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeMaxHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeMinHumidEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum humidity alarm enable/disable for the\nprobe. No alarm will be generated if this value\nis set to disabled(1). The alarm will be \ngenerated if this value is set to enabled(2) and\nthe threshold has been violated.\"\"\",\n        }, # column\n        \"iemConfigProbeTempHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees beyond the temperature thresholds\nat which an active temperature alarm will be cleared.\nThis configuration setting applies to all temperature\nthresholds.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeHumidHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of percent RH points beyond the humidity\nthresholds at which an active humidity alarm will be\ncleared. This configuration setting applies to all\nhumidity thresholds.\nUnits are displayed in the scale selected in\nthe 'emConfigProbeTempUnits' OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemConfigProbeLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the location of the probe.\"\"\",\n        }, # column\n        \"iemConfigContactsNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts available on the Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"iemConfigContactsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the Environmental Monitor\nand their configurations.\"\"\",\n        }, # table\n        \"iemConfigContactsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemConfigContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"The Environmental Monitor contact configurations.\"\"\",\n        }, # row\n        \"iemConfigContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an Environmental Monitor contact.\"\"\",\n        }, # column\n        \"iemConfigContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the Environmental Monitor contact\nset by the user, possibly denoting its location or purpose.\"\"\",\n        }, # column\n        \"iemConfigContactEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An Environmental Monitor contact alarm enable/disable.\"\"\",\n        }, # column\n        \"iemConfigContactSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The severtity of the alarm that will be triggered when\nthe input contact is activated. The alarms can be\ncritical(1), warning(2) or informational(3).\nNOTE: informational(3) is deprecated (and no longer valid) for this OID.\"\"\",\n        }, # column\n        \"iemConfigContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contact state that will be considered normal, i.e.\nwill not trigger an alarm. The states are open(1) or \nclosed(2).\"\"\",\n        }, # column\n        \"iemConfigContactLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive label for the contact denoting its\nlocation or purpose.\"\"\",\n        }, # column\n        \"iemConfigConfigRelaysNumRelays\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relays supported by the Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"iemConfigRelaysTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output relays supported by the Environmental Monitor\nand their configurations.\"\"\",\n        }, # table\n        \"iemConfigRelaysEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemConfigRelayNumber\",\n            ],\n            \"description\" :\n                \"\"\"The Environmental Monitor output relay configurations.\"\"\",\n        }, # row\n        \"iemConfigRelayNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an Environmental Monitor output relay.\"\"\",\n        }, # column\n        \"iemConfigRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name of an Environmental Monitor output relay, \nset by the user, describing its location or purpose.\"\"\",\n        }, # column\n        \"iemConfigRelayNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state (non-fault state) of an Environmental\nMonitor output relay, either open(1) or closed(2).\"\"\",\n        }, # column\n        \"iemConfigRelayFaultCondition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fault condition used to activate the output relay.\"\"\",\n        }, # column\n        \"iemStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3\",\n        }, # node\n        \"iemStatusProbesNumProbes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of available probes on the Environmental\nMonitor.\"\"\",\n        }, # scalar\n        \"iemStatusProbesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of probes supported by the Environmental Monitor\nand their status.\"\"\",\n        }, # table\n        \"iemStatusProbesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemStatusProbeNumber\",\n            ],\n            \"description\" :\n                \"\"\"The status of the probe.\"\"\",\n        }, # row\n        \"iemStatusProbeNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the probe.\"\"\",\n        }, # column\n        \"iemStatusProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the probe set by the user.\"\"\",\n        }, # column\n        \"iemStatusProbeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"connected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The connected status of the probe, either      \ndisconnected(1) or connected(2).\"\"\",\n        }, # column\n        \"iemStatusProbeCurrentTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current temperature reading from the probe displayed\nin the units shown in the 'iemStatusProbeTempUnits' OID\n(Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"iemStatusProbeTempUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nthresholds of the probe, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # column\n        \"iemStatusProbeCurrentHumid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current humidity reading from the probe in percent\nrelative humidity.\"\"\",\n        }, # column\n        \"iemStatusProbeHighTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high temperature violation status of the probe\ntemperature reading. This OID will show a highTempViolation(2)\nif the current temperature reading shown in the\n'iemStatusProbeCurrentTemp' OID is greater than or equal to\nthe high temperature threshold value, the \n'iemConfigProbeHighTempThreshold' OID, and the value of the\n'iemConfigProbeHighTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'iemConfigProbeHighTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeLowTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high temperature violation status of the probe\ntemperature reading. This OID will show a lowTempViolation(2)\nif the current temperature reading shown in the\n'iemStatusProbeCurrentTemp' OID is less than or equal to\nthe low temperature threshold value, the \n'iemConfigProbeLowTempThreshold' OID, and the value of the\n'iemPConfigrobeLowTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'iemConfigProbeLowTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeHighHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high humidity violation status of the probe humidity\nreading. This OID will show a highTempViolation(2)\nif the current humidity reading shown in the\n'iemStatusProbeCurrentHumid' OID is greater than or equal to\nthe high humidity threshold value, the \n'iemConfigProbeHighHumidThreshold' OID, and the value of the\n'iemConfigProbeHighHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1). If the 'iemConfigProbeHighHumidEnable' OID is\ndisabled, this OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeLowHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The low humidity violation status of the probe humidity\nreading. This OID will show a lowTempViolation(2)\nif the current humidity reading shown in the\n'iemStatusProbeCurrentHumid' OID is less than or equal to\nthe low humidity threshold value, the \n'iemConfigProbeLowHumidThreshold' OID, and the value of the\n'iemConfigProbeLowHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1). If the 'iemConfigProbeLowHumidEnable' OID is\ndisabled, this OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeMaxTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maxTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The max temperature violation status of the probe\ntemperature reading. This OID will show a maxTempViolation(2)\nif the current temperature reading shown in the\n'iemStatusProbeCurrentTemp' OID is greater than or equal to\nthe maximun temperature threshold value, the \n'iemConfigProbeMaxTempThreshold' OID, and the value of the\n'iemConfigProbeMaxTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'iemConfigProbeMaxTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeMinTempViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minTempViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum temperature violation status of the probe\ntemperature reading. This OID will show a minTempViolation(2)\nif the current temperature reading shown in the\n'iemStatusProbeCurrentTemp' OID is less than or equal to\nthe minimum temperature threshold value, the \n'iemConfigProbeMinTempThreshold' OID, and the value of the\n'iemConfigProbeMinTempEnable' OID is enabled. Otherwise it will show\nnoViolation(1). If the 'iemConfigProbeMinTempEnable' OID is disabled,\nthis OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeMaxHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maxHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum humidity violation status of the probe humidity\nreading. This OID will show a maxTempViolation(2)\nif the current humidity reading shown in the\n'iemStatusProbeCurrentHumid' OID is greater than or equal to\nthe maximum humidity threshold value, the \n'iemConfigProbeMaxHumidThreshold' OID, and the value of the\n'iemConfigProbeMaxHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1).  If the 'iemConfigProbeMaxHumidEnable' OID is\ndisabled, this OID will show disabled(3)\"\"\",\n        }, # column\n        \"iemStatusProbeMinHumidViolation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minHumidViolation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum humidity violation status of the probe humidity\nreading. This OID will show a minTempViolation(2)\nif the current humidity reading shown in the\n'iemStatusProbeCurrentHumid' OID is less than or equal to\nthe minimum humidity threshold value, the \n'iemConfigProbeMinHumidThreshold' OID, and the value of the\n'iemConfigProbeMinHumidEnable' OID is enabled. Otherwise it will\nshow noViolation(1). If the 'iemConfigProbeMinHumidEnable' OID is\ndisabled, this OID will show disabled(3).\"\"\",\n        }, # column\n        \"iemStatusProbeLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive location for the probe set by the user.\"\"\",\n        }, # column\n        \"iemStatusContactsNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported on the\nEnvironmental Monitor.\"\"\",\n        }, # scalar\n        \"iemStatusContactsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the Environmental Monitor\nand their status.\"\"\",\n        }, # table\n        \"iemStatusContactsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemStatusContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"The status of the contact.\"\"\",\n        }, # row\n        \"iemStatusContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the Environmental Monitor contact.\"\"\",\n        }, # column\n        \"iemStatusContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the Environmental Monitor contact\nset by the user, denoting its location or purpose.\"\"\",\n        }, # column\n        \"iemStatusContactStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the Environmental Monitor contact. The status\nwill show noFault(1) if the contact is in the normal state\nand the 'iemConfigContactEnable' OID is enabled. The status will\nshow a fault(2) if the contact is faulted and the \n'iemConfigContactEnable' OID is enabled. If the\n'iemConfigContactEnable' OID is disabled, the status will show\ndisabled(3).\"\"\",\n        }, # column\n        \"iemStatusRelaysNumRelays\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relays supported on the\nEnvironmental Monitor.\"\"\",\n        }, # scalar\n        \"iemStatusRelaysTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output relays supported by the\nEnvironmental Monitor and their status.\"\"\",\n        }, # table\n        \"iemStatusRelaysEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"iemStatusRelayNumber\",\n            ],\n            \"description\" :\n                \"\"\"The status of the relay.\"\"\",\n        }, # row\n        \"iemStatusRelayNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"iemStatusRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive name for the output relay set by the\nuser, denoting its location or purpose.\"\"\",\n        }, # column\n        \"iemStatusRelayStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.2.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"faultState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normalState\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the output relay, either faultState(1) or\nnormalState(2).\"\"\",\n        }, # column\n        \"envMgtSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3\",\n        }, # node\n        \"emsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1\",\n        }, # node\n        \"emsIdentEMSName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \ndevice. \"\"\",\n        }, # scalar\n        \"emsIdentProductNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of \nthe device. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"emsIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the device.\"\"\",\n        }, # scalar\n        \"emsIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the device. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"emsIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the device was manufactured in mm/dd/yyyy format.\nThis value is set at the factory. \"\"\",\n        }, # scalar\n        \"emsIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of \nthe device. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"emsOutputRelayControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2\",\n        }, # node\n        \"emsOutputRelayControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual output relays. The number of\nentries is contained in the emsStatusOutputRelayCount OID.\"\"\",\n        }, # table\n        \"emsOutputRelayControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutputRelayControlOutputRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relays to control.\"\"\",\n        }, # row\n        \"emsOutputRelayControlOutputRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the output relay entry.\"\"\",\n        }, # column\n        \"emsOutputRelayControlOutputRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the output relay.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"emsOutputRelayControlOutputRelayCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateCloseEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the output relay state. If \nthe output relay is closed, the immediateCloseEMS (1) value will be returned.\nIf the output relay is open, the immediateOpenEMS (2) value will be\nreturned. \n       \nSetting this variable to immediateCloseEMS (1) will immediately close the relay.\n\nSetting this variable to immediateOpenEMS (2) will immediately open the relay.\"\"\",\n        }, # column\n        \"emsOutletControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3\",\n        }, # node\n        \"emsOutletControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual outlet switches. The number of\nentries is contained in the emsStatusOutletCount OID.\"\"\",\n        }, # table\n        \"emsOutletControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutletControlOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to control.\"\"\",\n        }, # row\n        \"emsOutletControlOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"emsOutletControlOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"emsOutletControlOutletCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the immediateOnEMS (1) value will be returned.\nIf the outlet is off, the immediateOffEMS (2) value will be\nreturned. \n\nSetting this variable to immediateOnEMS (1) will immediately turn the outlet on.\n\nSetting this variable to immediateOffEMS (2) will immediately turn the outlet off.\"\"\",\n        }, # column\n        \"emsSensorControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4\",\n        }, # node\n        \"emsSensorControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control/reset of individual sensors. The number of\nentries is contained in the emsStatusSensorCount OID.\"\"\",\n        }, # table\n        \"emsSensorControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsSensorControlSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"The sensors to control/reset.\"\"\",\n        }, # row\n        \"emsSensorControlSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the sensor entry.\"\"\",\n        }, # column\n        \"emsSensorControlSensorSystemName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system name of the sensor.  This describes the hardware system\nintent of this sensor.\"\"\",\n        }, # column\n        \"emsSensorControlSensorUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the sensor as given by the system user.\"\"\",\n        }, # column\n        \"emsSensorControlSensorCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noCommandEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"resetCommandEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return noCommandEMS(1).  \n\nSetting this variable to resetCommandEMS(2) will issue a reset command to the\nsensor.  Some sensors cannot be manually reset and will not be affected \nby this command.\"\"\",\n        }, # column\n        \"emsAlarmDeviceControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5\",\n        }, # node\n        \"emsAlarmDeviceControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of individual alarm devices. \nNote: Some alarm devices are not controllable.  The number of\nentries is contained in the emsStatusAlarmDeviceCount OID.\"\"\",\n        }, # table\n        \"emsAlarmDeviceControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsAlarmDeviceControlDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The alarm devices to control.\"\"\",\n        }, # row\n        \"emsAlarmDeviceControlDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the alarm device entry.\"\"\",\n        }, # column\n        \"emsAlarmDeviceControlDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the alarm device.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"emsAlarmDeviceControlDeviceCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmDeviceOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmDeviceOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmDeviceNotInstalledEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the device state. If \nthe device is active, the alarmDeviceOnEMS (1) value will be returned.\nIf the device is inactive, the alarmDeviceOffEMS (2) value will be\nreturned. If the device is not installed, the \nalarmDeviceNotInstalledEMS (3) value will be returned.\n\nActions resulting from setting this variable are device-dependent.\n\nSetting this variable to alarmDeviceOnEMS (1) will turn that device (ex. Beacon) on.       \nSetting this variable to alarmDeviceOffEMS (2) will turn that device off.\"\"\",\n        }, # column\n        \"emsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.6\",\n        }, # node\n        \"emsConfigName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the device.\"\"\",\n        }, # scalar\n        \"emsConfigCheckLogLight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lightDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lightOnInformational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lightOnWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lightOnSevere\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The setting of this OID determines the level of event that will\ntrigger the check-log light on the EMS. This is not available on the EMU2.\n\nlightDisabled (1) disables the check-log light.\nlightOnInformational (2) lights check-log for any event of \n informational severity or above.\nlightOnWarning (3) lights check-log for any event of \n warning severity or above.\nlightOnSevere (4) lights check-log for any event of severe severity.\"\"\",\n        }, # scalar\n        \"emsProbeConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7\",\n        }, # node\n        \"emsProbeConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual probes. The number of\nentries is contained in the emsStatusProbeCount OID.\"\"\",\n        }, # table\n        \"emsProbeConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsProbeConfigProbeIndex\",\n            ],\n            \"description\" :\n                \"\"\"The probes to configure.\"\"\",\n        }, # row\n        \"emsProbeConfigProbeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the probe entry.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the probe.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeHighTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe high temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLowTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe low temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeHighHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe high humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLowHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe low humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeMaxTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe maximum temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeMinTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe minimum temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeDeltaTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe delta temperature. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeMaxHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe maximum humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeMinHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe minimum humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeDeltaHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe delta humidity. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeSTIncTempVariance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe short-term increasing temperature variance used for rate of change alarms. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeSTIncTempTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe short-term increasing temperature time used for rate of change alarms. \n\nValues are represented in whole number minutes.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeSTDecTempVariance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe short-term decreasing temperature variance used for rate of change alarms. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeSTDecTempTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe short-term decreasing temperature time used for rate of change alarms. \n\nValues are represented in whole number minutes.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLTIncTempVariance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe long-term increasing temperature variance used for rate of change alarms. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLTIncTempTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe long-term increasing temperature time used for rate of change alarms. \n\nValues are represented in whole number hours.\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLTDecTempVariance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe long-term decreasing temperature variance used for rate of change alarms. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeConfigProbeLTDecTempTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.7.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Probe long-term decreasing temperature time used for rate of change alarms. \n\nValues are represented in whole number hours.\"\"\",\n        }, # column\n        \"emsInputContactConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8\",\n        }, # node\n        \"emsInputContactConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual input contacts. The number of\nentries is contained in the emsStatusInputContactCount OID.\"\"\",\n        }, # table\n        \"emsInputContactConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsInputContactConfigInputContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input contacts to configure.\"\"\",\n        }, # row\n        \"emsInputContactConfigInputContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the input contact entry.\"\"\",\n        }, # column\n        \"emsInputContactConfigInputContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the input contact.\"\"\",\n        }, # column\n        \"emsInputContactConfigInputContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the input contact. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is closed, the normallyOpenEMS (2) value will be\nreturned.\n\nSetting this variable will change the normal state of the input contact\"\"\",\n        }, # column\n        \"emsOutputRelayConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9\",\n        }, # node\n        \"emsOutputRelayConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual output relays. The number of\nentries is contained in the emsStatusOutputRelayCount OID.\"\"\",\n        }, # table\n        \"emsOutputRelayConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutputRelayConfigOutputRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relays to configure.\"\"\",\n        }, # row\n        \"emsOutputRelayConfigOutputRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the output relay entry.\"\"\",\n        }, # column\n        \"emsOutputRelayConfigOutputRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the output relay.\"\"\",\n        }, # column\n        \"emsOutputRelayConfigOutputRelayNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the output relay. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is closed, the normallyOpenEMS (2) value will be\nreturned.\n       \nSetting this variable will change the normal state of the output relay\"\"\",\n        }, # column\n        \"emsOutletConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10\",\n        }, # node\n        \"emsOutletConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the emsStatusOutletCount OID.\"\"\",\n        }, # table\n        \"emsOutletConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutletConfigOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to configure.\"\"\",\n        }, # row\n        \"emsOutletConfigOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"emsOutletConfigOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet.\"\"\",\n        }, # column\n        \"emsOutletConfigOutletNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the outlet. If \nthe normal state is on, the normallyOnEMS (1) value will be returned.\nIf the normal state is off, the normallyOffEMS (2) value will be\nreturned. \n\nSetting this variable will change the normal state of the outlet\"\"\",\n        }, # column\n        \"emsSensorConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11\",\n        }, # node\n        \"emsSensorConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual sensors. The number of\nentries is contained in the emsStatusSensorCount OID.\"\"\",\n        }, # table\n        \"emsSensorConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsSensorConfigSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"The sensors to configure.\"\"\",\n        }, # row\n        \"emsSensorConfigSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the sensor entry.\"\"\",\n        }, # column\n        \"emsSensorConfigSensorSystemName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system name of the sensor.  This describes the hardware system\nintent of this sensor.\"\"\",\n        }, # column\n        \"emsSensorConfigSensorUserName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the sensor as given by the system user.\"\"\",\n        }, # column\n        \"emsSensorConfigSensorNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the sensor. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is closed, the normallyOpenEMS (2) value will be\nreturned.\n\nSetting this variable will change the normal state of the sensor.  Note:\nOnly the AUX sensor in the EMS has a configurable Normal State\"\"\",\n        }, # column\n        \"emsSensorConfigSensorAlarmDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.11.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay (in seconds) after a sensor detects an alarm condition before the\ncondition is reported.\"\"\",\n        }, # column\n        \"emsStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12\",\n        }, # node\n        \"emsStatusEMSName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \ndevice. \"\"\",\n        }, # scalar\n        \"emsStatusCommStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noComm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"comm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communication status between the agent\nand the device.\n\nnoComm(1),   Communication has never been established.\ncomm(2),     Communication has been established.\ncommLost(3), Communication was established, but was lost.\"\"\",\n        }, # scalar\n        \"emsStatusProbeCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of T/H probes (both local and remote) that\nis supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusInputContactCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Input Contacts that\nis supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusOutputRelayCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Output Relays that\nis supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusOutletCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of  AC Outlets that\nis supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusSensorCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Sensors that\nis supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusAlinkAruDeviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of remote Aru's supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusAlinkProbeDeviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of remote T/H probes supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusAlarmDeviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of alarm devices supported by this device.\"\"\",\n        }, # scalar\n        \"emsStatusSysTempUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nin the system, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # scalar\n        \"emsStatusCheckLogLight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lightOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lightOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the check-log light on the device.\nFor the EMU2, this will always indicate lightOff(1).\n\nlightOff (1) indicates the light is off (no new log entries).\nlightOn (2) indicates the light is on (new log entries present).\"\"\",\n        }, # scalar\n        \"emsStatusHardwareStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.12.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the EMS hardware.  This integer should be interpreted\nas a bit map, with each bit representing the presence or absence of\na specific hardware error condition.\n\n0 indicates there are no error conditions detected in the EMS hardware.\n1 indicates a Current Limit error condition related to the Alink port.\n2 indicates incorrect hardware is plugged into an EMS port.\n3 indicates that both of these error conditions are present.\"\"\",\n        }, # scalar\n        \"emsProbeStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13\",\n        }, # node\n        \"emsProbeStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual probes. The number of\nentries is contained in the emsStatusProbeCount OID.\"\"\",\n        }, # table\n        \"emsProbeStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsProbeStatusProbeIndex\",\n            ],\n            \"description\" :\n                \"\"\"The probes to access.\"\"\",\n        }, # row\n        \"emsProbeStatusProbeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the probe entry.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the probe.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe temperature reading. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeStatusProbeHighTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe high temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeStatusProbeLowTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe low temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeStatusProbeHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe humidity reading. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeHighHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe high humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeLowHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe low humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A label indicating the type (Local[L] or Remote[R]) and Number\nof the probe.  For example, the first local probe would be L1 and\nthe third remote probe would be R3.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commsNeverDiscovered\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsEstablished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" The state of communications to the probe.\ncommNeverDiscovered(1) indicates there has never been communications with this device.\ncommsEstablished(2) indicates communication is normal and active with this device.\ncommsLost(3) indicates communication had been established, but is no longer.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the probe.  This integer should be interpreted\nas a bit map, with each bit representing the presence or absence of\nthe specific alarm conditions listed below.  The bit will be '1' if\nthe condition is present, and '0' if the condition is not present.\n\nBit  Hex. Value  Description\n1    0x0001      Maximum temperature exceeded.\n2    0x0002      High temperature exceeded.\n3    0x0004      Low temperature exceeded.\n4    0x0008      Minimum temperature exceeded.\n5    0x0010      Short-term increasing temperature rate exceeded.\n6    0x0020      Short-term decreasing temperature rate exceeded.\n7    0x0040      Long-term increasing temperature rate exceeded.\n8    0x0080      Long-term decreasing temperature rate exceeded.\n9    0x0100      Maximum humidity exceeded.\n10   0x0200      High humidity exceeded.\n11   0x0400      Low humidity exceeded.\n12   0x0800      Minimum humidity exceeded.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeMaxTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe maximum temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeStatusProbeMinTempThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe minimum temperature threshold. \n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe emsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"emsProbeStatusProbeMaxHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe maximum humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsProbeStatusProbeMinHumidityThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.13.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Probe minimum humidity threshold. \n\nValues are represented in whole number percentage.\"\"\",\n        }, # column\n        \"emsInputContactStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14\",\n        }, # node\n        \"emsInputContactStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual input contacts. The number of\nentries is contained in the emsStatusInputContactCount OID.\"\"\",\n        }, # table\n        \"emsInputContactStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsInputContactStatusInputContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input contacts to access.\"\"\",\n        }, # row\n        \"emsInputContactStatusInputContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the input contact entry.\"\"\",\n        }, # column\n        \"emsInputContactStatusInputContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the input contact.\"\"\",\n        }, # column\n        \"emsInputContactStatusInputContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"contactClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contactOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the state of the input contact. If \nthe input contact is closed, the contactClosedEMS (1) value will be returned.\nIf the input contact state is open, the contactOpenEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsInputContactStatusInputContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.14.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the input contact. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is open, the normallyOpenEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsOutputRelayStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15\",\n        }, # node\n        \"emsOutputRelayStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual output relays. The number of\nentries is contained in the emsStatusOutputRelayCount OID.\"\"\",\n        }, # table\n        \"emsOutputRelayStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutputRelayStatusOutputRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relays to access.\"\"\",\n        }, # row\n        \"emsOutputRelayStatusOutputRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the output relay entry.\"\"\",\n        }, # column\n        \"emsOutputRelayStatusOutputRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the output relay.\"\"\",\n        }, # column\n        \"emsOutputRelayStatusOutputRelayState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"relayClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"relayOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the state of the output relay. If \nthe output relay is closed, the relayClosedEMS (1) value will be returned.\nIf the output relay is open, the relayOpenEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsOutputRelayStatusOutputRelayNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.15.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the output relay. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is open, the normallyOpenEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsOutletStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16\",\n        }, # node\n        \"emsOutletStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual outlets. The number of\nentries is contained in the emsStatusOutletCount OID.\"\"\",\n        }, # table\n        \"emsOutletStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsOutletStatusOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlets to access.\"\"\",\n        }, # row\n        \"emsOutletStatusOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"emsOutletStatusOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet.\"\"\",\n        }, # column\n        \"emsOutletStatusOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the state of the outlet. If \nthe outlet is on, the outletOnEMS (1) value will be returned.\nIf the outlet is off, the outletOffEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsOutletStatusOutletNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.16.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the outlet. If \nthe normal state is on, the normallyOnEMS (1) value will be returned.\nIf the normal state is off, the normallyOffEMS (2) value will be\nreturned. \"\"\",\n        }, # column\n        \"emsAlarmDeviceStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17\",\n        }, # node\n        \"emsAlarmDeviceStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual alarm devices. The number of\nentries is contained in the emsStatusAlarmDeviceCount OID.\"\"\",\n        }, # table\n        \"emsAlarmDeviceStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsAlarmDeviceStatusDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The alarm devices to access.\"\"\",\n        }, # row\n        \"emsAlarmDeviceStatusDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the alarm device entry.\"\"\",\n        }, # column\n        \"emsAlarmDeviceStatusDeviceName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the alarm device.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"emsAlarmDeviceStatusDeviceState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.17.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alarmDeviceOnEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmDeviceOffEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarmDeviceNotInstalledEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the device state. If \nthe device is active, the alarmDeviceOnEMS (1) value will be returned.\nIf the device is inactive, the alarmDeviceOffEMS (2) value will be\nreturned.  If the device is not installed, the \nalarmDeviceNotInstalledEMS (3) value will be returned.\"\"\",\n        }, # column\n        \"emsSensorStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18\",\n        }, # node\n        \"emsSensorStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for access of individual sensors. The number of\nentries is contained in the emsStatusSensorCount OID.\"\"\",\n        }, # table\n        \"emsSensorStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"emsSensorStatusSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"The sensors to access.\"\"\",\n        }, # row\n        \"emsSensorStatusSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the sensor entry.\"\"\",\n        }, # column\n        \"emsSensorStatusSensorSystemName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system name of the sensor.  This describes the hardware system\nintent of this sensor.\"\"\",\n        }, # column\n        \"emsSensorStatusSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the sensor as given by the system user.\"\"\",\n        }, # column\n        \"emsSensorStatusSensorState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sensorFaultedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sensorOKEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sensorNotInstalledEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the sensor state. If the sensor is faulted, \nthe sensorFaultedEMS (1) value will be returned.\nIf the sensor is not faulted, the sensorOKEMS (2) value will be\nreturned. If the sensor is not installed, the  sensorNotInstalledEMS (3) \nvalue will be returned.\"\"\",\n        }, # column\n        \"emsSensorStatusSensorNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyClosedEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyOpenEMS\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the normal state of the sensor. If \nthe normal state is closed, the normallyClosedEMS (1) value will be returned.\nIf the normal state is closed, the normallyOpenEMS (2) value will be\nreturned.\"\"\",\n        }, # column\n        \"emsSensorStatusSensorAlarmDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.3.18.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The delay (in seconds) after a sensor detects an alarm condition before the\ncondition is reported.\"\"\",\n        }, # column\n        \"modEnvMgr\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4\",\n        }, # node\n        \"memModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1\",\n        }, # node\n        \"memModulesStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memModulesStatusTable.\"\"\",\n        }, # scalar\n        \"memModulesStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting status information from the modules\nattached to the system.\"\"\",\n        }, # table\n        \"memModulesStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memModulesStatusModuleNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memModulesStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module number.\"\"\",\n        }, # column\n        \"memModulesStatusModuleName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module name.\"\"\",\n        }, # column\n        \"memModulesStatusModuleLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the module.\"\"\",\n        }, # column\n        \"memModulesStatusModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The model number of the module.\"\"\",\n        }, # column\n        \"memModulesStatusSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the module.\"\"\",\n        }, # column\n        \"memModulesStatusFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision of the module.\"\"\",\n        }, # column\n        \"memModulesStatusHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision.\"\"\",\n        }, # column\n        \"memModulesConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memModulesConfigTable.\"\"\",\n        }, # scalar\n        \"memModulesConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting status information from the modules\nattached to the system.\"\"\",\n        }, # table\n        \"memModulesConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memModulesConfigModuleNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memModulesConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module number.\"\"\",\n        }, # column\n        \"memModulesConfigModuleName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The module name.\"\"\",\n        }, # column\n        \"memModulesConfigModuleLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the module.\"\"\",\n        }, # column\n        \"memSensors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2\",\n        }, # node\n        \"memSensorsStatusSysTempUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nin the system, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # scalar\n        \"memSensorsStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memSensorsStatusTable.\"\"\",\n        }, # scalar\n        \"memSensorsStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting sensor status information.\"\"\",\n        }, # table\n        \"memSensorsStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memSensorsStatusModuleNumber\",\n                \"memSensorsStatusSensorNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memSensorsStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the sensor is attached to.\"\"\",\n        }, # column\n        \"memSensorsStatusSensorNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this sensor on the module.\"\"\",\n        }, # column\n        \"memSensorsStatusSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor name.\"\"\",\n        }, # column\n        \"memSensorsStatusSensorLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the sensor.\"\"\",\n        }, # column\n        \"memSensorsTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's current temperature reading. \nUnits are displayed in the scale shown in\nthe memSensorsStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"memSensorsHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current humidity reading from the sensor.\"\"\",\n        }, # column\n        \"memSensorsCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the sensor.\"\"\",\n        }, # column\n        \"memSensorsAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"memNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"memWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"memCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the sensor.\"\"\",\n        }, # column\n        \"memSensorsConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memSensorsConfigTable.\"\"\",\n        }, # scalar\n        \"memSensorsConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting configuration information from \nsensors attached to the system.\"\"\",\n        }, # table\n        \"memSensorsConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memSensorsConfigModuleNumber\",\n                \"memSensorsConfigSensorNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memSensorsConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the sensor is attached to.\"\"\",\n        }, # column\n        \"memSensorsConfigSensorNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this sensor on the module.\"\"\",\n        }, # column\n        \"memSensorsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the sensor.\"\"\",\n        }, # column\n        \"memSensorsLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the sensor.\"\"\",\n        }, # column\n        \"memSensorsAlarmGeneration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable alarm generation on this sensor.\"\"\",\n        }, # column\n        \"memSensorsTempMaxThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which the MEM will generate a maximum\ntemperature threshold violation alarm on this sensor.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempHighThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which the MEM will generate a high\ntemperature threshold violation alarm on this sensor.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempLowThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which the MEM will generate a low\ntemperature threshold violation alarm on this sensor.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempMinThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which the MEM will generate a minimum\ntemperature threshold violation alarm on this sensor.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempThreshHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The change in temperature required to cause a\ntemperature alarm to change from an active to an inactive state.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempShortDecRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature short-term decreasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempShortDecRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not decrease\nbeyond the value specified by the temperature short-term\ndecreasing rate threshold value.\"\"\",\n        }, # column\n        \"memSensorsTempShortIncRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature short-term increasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempShortIncRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not increase\nbeyond the value specified by the temperature short-term\nincreasing rate threshold value.\"\"\",\n        }, # column\n        \"memSensorsTempLongDecRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature long-term decreasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempLongDecRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not decrease\nbeyond the value specified by the temperature long-term\ndecreasing rate threshold value.\"\"\",\n        }, # column\n        \"memSensorsTempLongIncRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature long-term increasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the memSensorsStatusSysTempUnits OID.\"\"\",\n        }, # column\n        \"memSensorsTempLongIncRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not increase\nbeyond the value specified by the temperature long-term\nincreasing rate threshold value.\"\"\",\n        }, # column\n        \"memSensorsHumidityMaxThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity at which the maximum humidity threshold alarm\nwill be generated.\"\"\",\n        }, # column\n        \"memSensorsHumidityHighThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity at which the high humidity threshold alarm\nwill be generated.\"\"\",\n        }, # column\n        \"memSensorsHumidityLowThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity at which the low humidity threshold alarm\nwill be generated.\"\"\",\n        }, # column\n        \"memSensorsHumidityMinThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity at which the minimum humidity threshold alarm\nwill be generated.\"\"\",\n        }, # column\n        \"memSensorsHumidityThreshHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.2.5.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The change in humidity required to cause an active humidity\nalarm to change to the inactive state.\"\"\",\n        }, # column\n        \"memInputs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3\",\n        }, # node\n        \"memInputsStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memInputsStatusTable.\"\"\",\n        }, # scalar\n        \"memInputsStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting input status information.\"\"\",\n        }, # table\n        \"memInputsStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memInputsStatusModuleNumber\",\n                \"memInputsStatusInputNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memInputsStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the input is attached to.\"\"\",\n        }, # column\n        \"memInputsStatusInputNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this input on the module.\"\"\",\n        }, # column\n        \"memInputsStatusInputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input name.\"\"\",\n        }, # column\n        \"memInputsStatusInputLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the input.\"\"\",\n        }, # column\n        \"memInputsStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inputClosedHighMEM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inputOpenLowMEM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inputDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputStateNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the input. This OID will return \ninputStateNotAplicable(4) for analog input types. \"\"\",\n        }, # column\n        \"memInputsStatusCurrentAnalogValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current analog value of the input in the units defined\nby the user.\"\"\",\n        }, # column\n        \"memInputsStatusAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"memNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"memWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"memCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the input.\"\"\",\n        }, # column\n        \"memInputsCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the input. This OID is only supported by NBRK0200.\"\"\",\n        }, # column\n        \"memInputsConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memInputsConfigTable.\"\"\",\n        }, # scalar\n        \"memInputsConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting input configuration information.\"\"\",\n        }, # table\n        \"memInputsConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memInputsConfigModuleNumber\",\n                \"memInputsConfigInputNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memInputsConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the input is attached to.\"\"\",\n        }, # column\n        \"memInputsConfigInputNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this input on the module.\"\"\",\n        }, # column\n        \"memInputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the input.\"\"\",\n        }, # column\n        \"memInputLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the input.\"\"\",\n        }, # column\n        \"memInputType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noConnection\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dryContact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"digital\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"analogmAmps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"analogVolts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of input this contact will take.\"\"\",\n        }, # column\n        \"memInputAlarmGeneration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable alarm generation on this input.\"\"\",\n        }, # column\n        \"memInputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inputClosedHighMEM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inputOpenLowMEM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inputDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputStateNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the normal (no alarm) state of the input.\"\"\",\n        }, # column\n        \"memInputAbnormalSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inputSeverityinformational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inputSeveritywarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"inputSeveritysevere\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputSeverityNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the severity of the event that is associated\nwith the abnormal state of the input.  This OID will return \ninputSeverityNotApplicable(4) for analog input types. \"\"\",\n        }, # column\n        \"memInputNumberCalibrationPoints\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of calibration points that are required for\nthis input.\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The electrical value that the input sensor will measure at the\nfirst calibration point.  \nThis OID is relevant only for inputs configured as analog type (ma or V).\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The electrical value that the input sensor will measure at the\nsecond calibration point.  \nThis OID is relevant only for inputs configured as analog type (ma or V).\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The electrical value that the input sensor will measure at the\nthird calibration point.  \nThis OID is relevant only for inputs configured as analog type (ma or V).\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The electrical value that the input sensor will measure at the\nfourth calibration point.  \nThis OID is relevant only for inputs configured as analog type (ma or V).\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The electrical value that the input sensor will measure at the\nfifth calibration point.  \nThis OID is relevant only for inputs configured as analog type (ma or V).\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint1Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the input, in units of measure defined by\nthe user, that corresponds to the current setting at the\nfirst calibration point.\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint2Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the input, in units of measure defined by\nthe user, that corresponds to the current setting at the\nsecond calibration point.\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint3Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the input, in units of measure defined by\nthe user, that corresponds to the current setting at the\nthird calibration point.\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint4Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the input, in units of measure defined by\nthe user, that corresponds to the current setting at the\nfourth calibration point.\"\"\",\n        }, # column\n        \"memInputAnalogCalibrationPoint5Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the input, in units of measure defined by\nthe user, that corresponds to the current setting at the\nfifth calibration point.\"\"\",\n        }, # column\n        \"memInputAnalogMeasurementUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The units of measure to be used for this input.\"\"\",\n        }, # column\n        \"memInputAnalogMaxThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The input value at which a maximum threshold violation\nalarm will be generated on this input.\"\"\",\n        }, # column\n        \"memInputAnalogHighThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The input value at which a high threshold violation\nalarm will be generated on this input.\"\"\",\n        }, # column\n        \"memInputAnalogLowThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The input value at which a low threshold violation\nalarm will be generated on this input.\"\"\",\n        }, # column\n        \"memInputAnalogMinThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The input value at which a minimum threshold violation\nalarm will be generated on this input.\"\"\",\n        }, # column\n        \"memInputAnalogThreshHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.3.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The change in value required to cause an alarm on this input\nto change from active to inactive.\"\"\",\n        }, # column\n        \"memOutputs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4\",\n        }, # node\n        \"memOutputStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memOutputStatusTable.\"\"\",\n        }, # scalar\n        \"memOutputStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting output status information.\"\"\",\n        }, # table\n        \"memOutputStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memOutputStatusModuleNumber\",\n                \"memOutputStatusOutputNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memOutputStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the output is attached to.\"\"\",\n        }, # column\n        \"memOutputStatusOutputNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this output on the module.\"\"\",\n        }, # column\n        \"memOutputStatusOutputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output name.\"\"\",\n        }, # column\n        \"memOutputStatusOutputLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the output.\"\"\",\n        }, # column\n        \"memOutputStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"memOutputClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"memOutputOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output.\"\"\",\n        }, # column\n        \"memOutputConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memOutputConfigTable.\"\"\",\n        }, # scalar\n        \"memOutputConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting output configuration information.\"\"\",\n        }, # table\n        \"memOutputConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memOutputConfigModuleNumber\",\n                \"memOutputConfigOutputNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memOutputConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the output is attached to.\"\"\",\n        }, # column\n        \"memOutputConfigOutputNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this output on the module.\"\"\",\n        }, # column\n        \"memOutputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the output.\"\"\",\n        }, # column\n        \"memOutputLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the output.\"\"\",\n        }, # column\n        \"memOutputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"memOutputClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"memOutputOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The state of the output that will not generate an alarm.\"\"\",\n        }, # column\n        \"memOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.4.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"memActionClose\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"memActionOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Manual control actions for the output. SNMP get command will return the state\nof the output, SNMP set of this OID controls the output.\"\"\",\n        }, # column\n        \"memOutlets\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5\",\n        }, # node\n        \"memOutletStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memOutletStatusTable.\"\"\",\n        }, # scalar\n        \"memOutletStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting outlet status information.\"\"\",\n        }, # table\n        \"memOutletStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memOutletStatusModuleNumber\",\n                \"memOutletStatusOutletNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memOutletStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the outlet is attached to.\"\"\",\n        }, # column\n        \"memOutletStatusOutletNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this outlet on the module.\"\"\",\n        }, # column\n        \"memOutletStatusOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet name.\"\"\",\n        }, # column\n        \"memOutletStatusOutletLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the outlet.\"\"\",\n        }, # column\n        \"memOutletStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the outlet.\"\"\",\n        }, # column\n        \"memOutletConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memOutletConfigTable.\"\"\",\n        }, # scalar\n        \"memOutletConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting outlet configuration information.\"\"\",\n        }, # table\n        \"memOutletConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memOutletConfigModuleNumber\",\n                \"memOutletConfigOutletNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memOutletConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the Outlet is attached to.\"\"\",\n        }, # column\n        \"memOutletConfigOutletNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this Outlet on the module.\"\"\",\n        }, # column\n        \"memOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the Outlet.\"\"\",\n        }, # column\n        \"memOutletLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the Outlet.\"\"\",\n        }, # column\n        \"memOutletNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The state of the Outlet that will not generate an alarm.\"\"\",\n        }, # column\n        \"memOutletAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.5.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turnOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Manual control actions for the Outlet.  Get displays state\nof outlet, set controls outlet.\"\"\",\n        }, # column\n        \"memBeacons\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6\",\n        }, # node\n        \"memBeaconStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memBeaconStatusTable.\"\"\",\n        }, # scalar\n        \"memBeaconStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting beacon status information.\"\"\",\n        }, # table\n        \"memBeaconStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memBeaconStatusModuleNumber\",\n                \"memBeaconStatusBeaconNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memBeaconStatusModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the beacon is attached to.\"\"\",\n        }, # column\n        \"memBeaconStatusBeaconNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this beacon on the module.\"\"\",\n        }, # column\n        \"memBeaconStatusBeaconName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The beacon name.\"\"\",\n        }, # column\n        \"memBeaconStatusBeaconLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the beacon.\"\"\",\n        }, # column\n        \"memBeaconStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the beacon.\"\"\",\n        }, # column\n        \"memBeaconConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the memBeaconConfigTable.\"\"\",\n        }, # scalar\n        \"memBeaconConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting beacon configuration information.\"\"\",\n        }, # table\n        \"memBeaconConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"memBeaconConfigModuleNumber\",\n                \"memBeaconConfigBeaconNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"memBeaconConfigModuleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the module that the beacon is attached to.\"\"\",\n        }, # column\n        \"memBeaconConfigBeaconNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of this beacon on the module.\"\"\",\n        }, # column\n        \"memBeaconConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the beacon.\"\"\",\n        }, # column\n        \"memBeaconConfigLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the beacon.\"\"\",\n        }, # column\n        \"memBeaconAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.10.4.6.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turnOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control action (on/off) for the beacon. Setting this OID will turn the\nbeacon on/off.  Getting this OID will respond with the current state.\"\"\",\n        }, # column\n        \"netlock\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.11\",\n        }, # node\n        \"nlIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.11.1\",\n        }, # node\n        \"nlStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.11.2\",\n        }, # node\n        \"rPDU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12\",\n        }, # node\n        \"rPDUIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1\",\n        }, # node\n        \"rPDUIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the Rack PDU. \nThe maximum string size is device dependent.\"\"\",\n        }, # scalar\n        \"rPDUIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the Rack PDU. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"rPDUIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An 8-byte ID string identifying the Rack PDU firmware revision. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"rPDUIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the Rack PDU was manufactured in mm/dd/yyyy format.\nThis value is set at the factory. The year 2000 will be \nrepresented by 00.\"\"\",\n        }, # scalar\n        \"rPDUIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 10-character string identifying the model number of \nthe Rack PDU. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"rPDUIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A 12-character string identifying the serial number of \nthe Rack PDU. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the electrical rating of the device in Amps.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceNumOutlets\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the number of outlets contained in the device.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the number of phases supported by the device.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceNumBreakers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the number of circuit breakers supported by the device.\nThis is the same as the number of banks of outlets.\n0 will be returned if the unit has no phase breakers. \"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceBreakerRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return rating of the circuit breakers\non the device in Amps if it has any.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceOrientation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"orientHorizontal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"orientVertical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the intended physical orientation of the device.\n\nOrientHorizonatal(1) indicates Horizontal.\nOrientVertical(2) indicates Vertical.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceOutletLayout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"seqPhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"seqPhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"seqPhToNeu21PhToPh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"seqPhToPhGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"seqPhToNGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"seqPToN1516PToPGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return outlet layout for the device.\n\nSeqPhaseToNeutral(1) indicates outlet layout as follows:\n1:1-N,2:2-N,3:3-N,4:1-N,5:2-N,...\n\nSeqPhaseToPhase(2) indicates outlet layout as follows:\n1:1-2,2:2-3,3:3-1,4:1-2,5:2-3,...\n\nSeqPhToNeu21PhToPh(3) indicates outlet layout as follows:\n1:1-N,2:2-N...21:3-N,22:1-2,23:2-3,24:3-1,...\n\nSeqPhToPhGrouped(4) indicates outlet layout as follows:\nOtlts1-8::(3-1),Otlts9-16::(2-3),Otlts17-24::(1-2).\n\nSeqPhToNGrouped(5) indicates outlet layout as follows:\nOtlts1-[X-1]::(1-N),OtltsX-[Y-1]::(2-N),OtltsY-[Z]::(3-N).\n\nSeqPToN1516PToPGrouped(6) indicates outlet layout as follows:\nOtlts1-14::(1-2),Otlts15-16::(1-N),OtltsX-[Y-1]::(2-3),OtltsY-[Z]::(3-1)\n\nX, Y, and Z represent Outlet numbers that vary by SKU.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceDisplayOrientation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"displayNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"displayReverse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this OID will return the intended physical orientation of the Seven-Segment Display.\n\nNormal(1) indicates Normal.\nReverse(2)indicates Upside-Down.\"\"\",\n        }, # scalar\n        \"rPDUIdentDeviceLinetoLineVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting/Setting this OID will return/set the Line to Line Voltage.\nThis OID does not apply to AP86XX, AP88XX, or AP89XX SKUs.\n\nThe valid range is between 0V to 440V\"\"\",\n        }, # scalar\n        \"rPDUIdentDevicePowerWatts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Power in Watts.\"\"\",\n        }, # scalar\n        \"rPDUIdentDevicePowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting/setting this OID will return/set the \nPower Factor in thousanths (1000 is power factor of 1).\nThis OID does not apply to AP86XX, AP88XX, or AP89XX SKUs.\n\nValid range is from 0 to 1000.\"\"\",\n        }, # scalar\n        \"rPDUIdentDevicePowerVA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Power in VA.\"\"\",\n        }, # scalar\n        \"rPDULoad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2\",\n        }, # node\n        \"rPDULoadDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1\",\n        }, # node\n        \"rPDULoadDevMaxPhaseLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the maximum rated power\nthat each phase of the Rack PDU can provide. It is \nrepresented in Amps.\n\n0 will be returned if the unit is banked.\"\"\",\n        }, # scalar\n        \"rPDULoadDevNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of phases available with this Rack PDU.\"\"\",\n        }, # scalar\n        \"rPDULoadDevMaxBankLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the maximum rated power\nthat a bank of the Rack PDU can provide. It is \nrepresented in Amps.\n\n0 will be returned if the device does not have any banks.\"\"\",\n        }, # scalar\n        \"rPDULoadDevNumBanks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of banks of outlets available with this Rack PDU.\nA bank of outlets has a unique circuit breaker for a subset \nof the total number of outlets on the rPDU.\n\n0 will be returned if the unit has no banks.\"\"\",\n        }, # scalar\n        \"rPDULoadDevBankTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Bank Table.\"\"\",\n        }, # scalar\n        \"rPDULoadDevBankTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting the Bank Max Load in the Rack PDU.\"\"\",\n        }, # table\n        \"rPDULoadDevBankEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDULoadDevBankIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Rack PDU Banks Access.\"\"\",\n        }, # row\n        \"rPDULoadDevBankIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU bank entry.\"\"\",\n        }, # column\n        \"rPDULoadDevBankNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the bank number.\"\"\",\n        }, # column\n        \"rPDULoadDevBankMaxLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the maximum rated power\nthat each bank of the Rack PDU can provide. It is \nrepresented in Amps.\"\"\",\n        }, # column\n        \"rPDULoadDevMaxOutletTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Outlet Table.\"\"\",\n        }, # scalar\n        \"rPDULoadDevMaxOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting the Max Outlet Load in an Outlet Monitored Rack PDU.\"\"\",\n        }, # table\n        \"rPDULoadDevMaxOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDULoadDevOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to Max Outlet Load of an Outlet Monitored Rack PDU\"\"\",\n        }, # row\n        \"rPDULoadDevOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Outlet Monitored Rack PDU Max Outlet Load entry.\"\"\",\n        }, # column\n        \"rPDULoadDevOutletNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Outlet number.\"\"\",\n        }, # column\n        \"rPDULoadDevMaxOutletLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.1.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the maximum rated power\nthat each Outlet of an Outlet Monitored Rack PDU can provide. It is \nrepresented in Amps. \"\"\",\n        }, # column\n        \"rPDULoadPhaseConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2\",\n        }, # node\n        \"rPDULoadPhaseConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of each Rack PDU phase.\nThe number of entries is contained in the \nrPDULoadDevNumPhases OID.\"\"\",\n        }, # table\n        \"rPDULoadPhaseConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDULoadPhaseConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Rack PDU phase to configure.\"\"\",\n        }, # row\n        \"rPDULoadPhaseConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU phase entry.\"\"\",\n        }, # column\n        \"rPDULoadPhaseConfigLowLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing a low consumption condition. It is \nrepresented in Amps.  A warning will be issued when the\nload is less than the threshold value.  \n\nA threshold value of 0 Amps effectively disables this \nwarning.  \n\nMaximum value must be less than the value returned \nby the rPDULoadPhaseConfigNearOverloadThreshold OID.\"\"\",\n        }, # column\n        \"rPDULoadPhaseConfigNearOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than the value returned by\nthe rPDULoadPhaseConfigLowLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDULoadPhaseConfigOverloadThreshold OID.\"\"\",\n        }, # column\n        \"rPDULoadPhaseConfigOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load has entered an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than or equal to the value \nreturned by the rPDULoadPhaseConfigNearOverloadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDULoadDevMaxPhaseLoad OID.\"\"\",\n        }, # column\n        \"rPDULoadPhaseConfigAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noLoadAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"underCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the current Phase Alarm.\"\"\",\n        }, # column\n        \"rPDULoadStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3\",\n        }, # node\n        \"rPDULoadStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of each Rack PDU phase/bank.\nThe number of entries is calculated by adding\nthe number of phases (rPDULoadDevNumPhases OID) and\nthe number of banks of outlets (rPDULoadDevNumBanks)\nNumber of entries = #phases + #banks.\nNOTE: If a device has phase and bank information, all phase information\nshall precede the bank information.  If a device has total information, \nit shall precede both the bank and the phase information.\"\"\",\n        }, # table\n        \"rPDULoadStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDULoadStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Rack PDU phase/bank to gather status from.\"\"\",\n        }, # row\n        \"rPDULoadStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU phase/bank entry. All phase information will precede\nany bank information\"\"\",\n        }, # column\n        \"rPDULoadStatusLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the phase/bank load measured\nin tenths of Amps.\"\"\",\n        }, # column\n        \"rPDULoadStatusLoadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phaseLoadNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phaseLoadLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phaseLoadNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phaseLoadOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the phase/bank load state.\n\nphaseLoadNormal(1) indicates that the phase/bank is \noperating properly within the rPDULoadConfigLowLoadThreshold \nand rPDULoadConfigNearOverloadThreshold OID values.\n\nphaseLoadLow(2) indicates that the phase/bank load has\ndropped below the rPDULoadConfigLowLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nphaseLoadNearOverload(3) indicates that the phase/bank load\nis greater than or equal to the \nrPDULoadConfigNearOverloadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nphaseLoadOverload(4) indicates that the phase/bank load is\ngreater than or equal to the rPDULoadConfigOverloadThreshold \nOID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"rPDULoadStatusPhaseNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase number to which this record refers.\"\"\",\n        }, # column\n        \"rPDULoadStatusBankNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank number to which this record refers.  A value of 0 will be returned if\nany bank is not present or if it is phase related.\"\"\",\n        }, # column\n        \"rPDULoadBankConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4\",\n        }, # node\n        \"rPDULoadBankConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of each Rack PDU bank.\nThe number of entries is contained in the \nrPDULoadDevNumBanks OID.\"\"\",\n        }, # table\n        \"rPDULoadBankConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDULoadBankConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Rack PDU bank to configure.\"\"\",\n        }, # row\n        \"rPDULoadBankConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU bank entry.\"\"\",\n        }, # column\n        \"rPDULoadBankConfigLowLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing a low consumption condition. It is \nrepresented in Amps.  A warning will be issued when the\nload is less than the threshold value.  \n\nA threshold value of 0 Amps effectively disables this \nwarning.  \n\nMaximum value must be less than the value returned \nby the rPDULoadBankConfigNearOverloadThreshold OID.\"\"\",\n        }, # column\n        \"rPDULoadBankConfigNearOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than the value returned by\nthe rPDULoadBankConfigLowLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDULoadBankConfigOverloadThreshold OID.\"\"\",\n        }, # column\n        \"rPDULoadBankConfigOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load has entered an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than or equal to the value \nreturned by the rPDULoadBankConfigNearOverloadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDULoadDevMaxBankLoad OID.\"\"\",\n        }, # column\n        \"rPDULoadBankConfigAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.2.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noLoadAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"underCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overCurrentAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\" Getting this OID will return the current Bank Alarm.\"\"\",\n        }, # column\n        \"rPDUOutlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3\",\n        }, # node\n        \"rPDUOutletDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1\",\n        }, # node\n        \"rPDUOutletDevCommand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noCommandAll\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateAllOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateAllOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateAllReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedAllOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"delayedAllOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedAllReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cancelAllPendingCommands\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to immediateAllOn (2) will turn all outlets\non immediately.\n\nSetting this OID to immediateAllOff (3) will turn all outlets\noff immediately.\n\nSetting this OID to immediateAllReboot (4) will reboot all outlets\nimmediately.\n\nSetting this OID to delayedAllOn (5) will turn all outlets on as \ndefined by each outlet's rPDUOutletConfigPowerOnTime OID value. \n      \nSetting this OID to delayedAllOff (6) will turn all outlets \noff as defined by each outlet's rPDUOutletConfigPowerOffTime OID value.\n\nSetting this OID to delayedAllReboot (7) will cause a \ndelayedAllOff command to be performed. Once all outlets are off, \nthe Switched Rack PDU will then delay the largest \nrPDUOutletConfigRebootDuration OID time, and then perform a \ndelayedAllOn command.    \n\nSetting this OID to cancelAllPendingCommands (8) will cause all pending\ncommands on the Switched Rack PDU to be canceled.\n\nGetting this OID will return the noCommandAll (1) value.\"\"\",\n        }, # scalar\n        \"rPDUOutletDevColdstartDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of delay, in seconds, between when\npower is provided to the Switched Rack PDU and \nwhen the Switched Rack PDU provides basic master \npower to the outlets.       \n\nAllowed values are:\n\n-1       - never apply power automatically.\n0        - apply power immediately.\n1 to 300 - delay up to 300 seconds (5 minutes).\"\"\",\n        }, # scalar\n        \"rPDUOutletDevNumCntrlOutlets\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of controlled outlets on this Switched Rack PDU.\"\"\",\n        }, # scalar\n        \"rPDUOutletDevNumTotalOutlets\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of outlets on this Rack PDU.\"\"\",\n        }, # scalar\n        \"rPDUOutletDevMonitoredOutlets\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of monitored outlets on this Rack PDU.\"\"\",\n        }, # scalar\n        \"rPDUOutletPhase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.2\",\n        }, # node\n        \"rPDUOutletPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for management of outlets on a per phase basis.\"\"\",\n        }, # table\n        \"rPDUOutletPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"The phase to manage.\"\"\",\n        }, # row\n        \"rPDUOutletPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Switched Rack PDU phase entry.\"\"\",\n        }, # column\n        \"rPDUOutletPhaseOverloadRestriction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alwaysAllowTurnON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restrictOnNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"restrictOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID controls the behavior of a Switched Rack PDU \nphase when an overload condition is possible and \nadditional outlets are requested to be turned on. \n\nSetting this OID to alwaysAllowTurnON (1) will always allow \nthe outlets on the corresponding phase to turn on.\n\nSetting this OID to restrictOnNearOverload (2) will not allow \noutlets on the corresponding phase to turn on if the \nrPDULoadConfigNearOverloadThreshold OID is exceeded.\n       \nSetting this OID to restrictOnOverload (3) will not allow\noutlets on the corresponding phase to turn on if the \nrPDULoadConfigOverloadThreshold OID is exceeded.\"\"\",\n        }, # column\n        \"rPDUOutletControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3\",\n        }, # node\n        \"rPDUOutletControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for control of the individual outlets.\nThe number of entries is contained in the \nrPDUOutletDevNumCntrlOutlets OID.\"\"\",\n        }, # table\n        \"rPDUOutletControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet to control.\"\"\",\n        }, # row\n        \"rPDUOutletControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"rPDUOutletControlOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum string size is device dependent.\nAn error will be returned if the set request exceeds the max size.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"rPDUOutletControlOutletPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase1-2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase2-3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase3-1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase/s associated with this outlet.\n\nFor single phase devices, this object will always \nreturn phase1(1).\n\nFor 3-phase devices, this object will return phase1 (1), \nphase2 (2), or phase3 (3) for outlets tied to a single \nphase.  For outlets tied to two phases, this object will\nreturn phase1-2 (4) for phases 1 and 2, phase2-3 (5) for \nphases 2 and 3, and phase3-1 (6) for phases 3 and 1.\"\"\",\n        }, # column\n        \"rPDUOutletControlOutletCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"delayedReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"cancelPendingCommand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the immediateOn (1) value will be returned.\nIf the outlet is off, the immediateOff (2) value will be\nreturned. \n\n\nSetting this variable to immediateOn (1) will immediately turn \nthe outlet on.\n\nSetting this variable to immediateOff (2) will immediately turn \nthe outlet off. \n\nSetting this variable to immediateReboot (3) will immediately \nreboot the outlet.\n\nSetting this variable to delayedOn (4) will turn the outlet on\nafter the rPDUOutletConfigPowerOnTime OID time has elapsed.   \n\nSetting this variable to delayedOff (5) will turn the outlet off\nafter the rPDUOutletConfigPowerOffTime OID time has elapsed.\n\nSetting this variable to delayedReboot  (6) will cause the \nSwitched Rack PDU to perform a delayedOff command, wait the \nrPDUOutletConfigRebootDuration OID time, and then perform a \ndelayedOn command. \n\nSetting this variable to cancelPendingCommand (7) will cause any\npending command to this outlet to be canceled.\"\"\",\n        }, # column\n        \"rPDUOutletControlOutletBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank associated with this outlet.\"\"\",\n        }, # column\n        \"rPDUOutletConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4\",\n        }, # node\n        \"rPDUOutletConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of individual outlets. The number of\nentries is contained in the rPDUOutletDevNumCntrlOutlets OID.\"\"\",\n        }, # table\n        \"rPDUOutletConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet to configure.\"\"\",\n        }, # row\n        \"rPDUOutletConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"rPDUOutletConfigOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum string size is device dependent.\nAn error will be returned if the set request exceeds the max size.\"\"\",\n        }, # column\n        \"rPDUOutletConfigOutletPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase1-2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase2-3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase3-1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase/s associated with this outlet.\n\nFor single phase devices, this object will always \nreturn phase1(1).\n\nFor 3-phase devices, this object will return phase1 (1), \nphase2 (2), or phase3 (3) for outlets tied to a single \nphase.  For outlets tied to two phases, this object will\nreturn phase1-2 (4) for phases 1 and 2, phase2-3 (5) for \nphases 2 and 3, and phase3-1 (6) for phases 3 and 1.\"\"\",\n        }, # column\n        \"rPDUOutletConfigPowerOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering on at coldstart or when a command that requires \na turn-on delay is issued.\n       \nAllowed values are:\n\n-1        - never power on.\n0         - power on immediately.\n1 to 7200 - power on up to 7200 seconds after being\n           commanded.\"\"\",\n        }, # column\n        \"rPDUOutletConfigPowerOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time (in seconds) the outlet will delay \npowering off when a command that requires \na turn-off delay is issued.\n\nAllowed values are:\n\n-1        - never power off.\n0         - power off immediately.\n1 to 7200 - power off up to 7200 seconds after being\n           commanded.\"\"\",\n        }, # column\n        \"rPDUOutletConfigRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"During a reboot sequence, power is turned off and then \nback on. This OID defines the amount of time to wait, \nin seconds, after turning the power off, at the start\nof the sequence, before turning power back on, at the\nend of the reboot sequence.       \n\nAllowed range is any value between 5 and 60 seconds (1 minute).\"\"\",\n        }, # column\n        \"rPDUOutletConfigOutletBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank associated with this outlet.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Outlet Config Monitored Table\"\"\",\n        }, # scalar\n        \"rPDUOutletConfigMonitoredTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting/setting of outlet thresholds of an Outlet Monitored Rack PDU.\"\"\",\n        }, # table\n        \"rPDUOutletConfigMonitoredEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletConfigMonitoredIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to Monitored Outlet entries\"\"\",\n        }, # row\n        \"rPDUOutletConfigMonitoredIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the RACK PDU Phase entry.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the Monitored Outlet. The maximum string size is device dependent.\nAn error will be returned if the set request exceeds the max size.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The outlet number of an Outlet Monitored RACK PDU.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredLowLoadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing a low consumption condition. It is \nrepresented in Amps.  A warning will be issued when the\nload is less than the threshold value.  \n\nA threshold value of 0 Amps effectively disables this \nwarning.  \n\nMaximum value must be less than the value returned \nby the rPDUOutletConfigMonitoredNearOverloadThreshold OID.\n\n0 will be returned if the unit is not Outlet Monitored Rack PDU.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredNearOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load is nearing an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than the value returned by\nthe rPDUOutletConfigMonitoredLowLoadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDUOutletConfigMonitoredOverloadThreshold OID.\n\n0 will be returned if the unit is not Outlet Monitored Rack PDU.\"\"\",\n        }, # column\n        \"rPDUOutletConfigMonitoredOverloadThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A threshold that indicates the power consumption of\nthe load has entered an overload condition. It is \nrepresented in Amps.  A warning will be issued when the \nload is greater than or equal to the threshold value.\n\nMinimum value must be greater than or equal to the value \nreturned by the rPDUOutletConfigMonitoredNearOverloadThreshold OID.\n\nMaximum value must be less than or equal to the value \nreturned by the rPDULoadDevMaxOutletLoad OID.\n\n0 will be returned if the unit is not Outlet Monitored Rack PDU.\"\"\",\n        }, # column\n        \"rPDUOutletStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5\",\n        }, # node\n        \"rPDUOutletStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of individual outlets. The number of\nentries is contained in the rPDUOutletDevNumCntrlOutlets OID.\"\"\",\n        }, # table\n        \"rPDUOutletStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"The outlet to gather status from.\"\"\",\n        }, # row\n        \"rPDUOutletStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the outlet entry.\"\"\",\n        }, # column\n        \"rPDUOutletStatusOutletName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the outlet. The maximum string size is device dependent.\nThis OID is provided for informational purposes only.\"\"\",\n        }, # column\n        \"rPDUOutletStatusOutletPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phase1-2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"phase2-3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"phase3-1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase/s associated with this outlet.\n\nFor single phase devices, this object will always \nreturn phase1(1).\n\nFor 3-phase devices, this object will return phase1 (1), \nphase2 (2), or phase3 (3) for outlets tied to a single \nphase.  For outlets tied to two phases, this object will\nreturn phase1-2 (4) for phases 1 and 2, phase2-3 (5) for \nphases 2 and 3, and phase3-1 (6) for phases 3 and 1.\"\"\",\n        }, # column\n        \"rPDUOutletStatusOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If \nthe outlet is on, the outletStatusOn (1) value will be returned.\nIf the outlet is off, the outletStatusOff (2) value will be\nreturned.\"\"\",\n        }, # column\n        \"rPDUOutletStatusCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletStatusCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletStatusNoCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this variable will return the command pending\nstate of the outlet. If a command is pending on the \noutlet, the outletStatusCommandPending (1) value\nwill be returned. If there is not a command pending\non the outlet, the outletStatusNoCommandPending (2)\nwill be returned.\"\"\",\n        }, # column\n        \"rPDUOutletStatusOutletBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bank associated with this outlet.\"\"\",\n        }, # column\n        \"rPDUOutletStatusLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the measured Outlet load for an Outlet Monitored Rack PDU\nin tenths of Amps.\"\"\",\n        }, # column\n        \"rPDUOutletBank\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.6\",\n        }, # node\n        \"rPDUOutletBankTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for management of outlets on a per bank basis.\"\"\",\n        }, # table\n        \"rPDUOutletBankEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUOutletBankIndex\",\n            ],\n            \"description\" :\n                \"\"\"The bank to manage.\"\"\",\n        }, # row\n        \"rPDUOutletBankIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Switched Rack PDU bank entry.\"\"\",\n        }, # column\n        \"rPDUOutletBankOverloadRestriction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.3.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alwaysAllowTurnON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restrictOnNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"restrictOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID controls the behavior of a Switched Rack PDU \nbank when an overload condition is possible and \nadditional outlets are requested to be turned on. \n\nSetting this OID to alwaysAllowTurnON (1) will always allow \nthe outlets on the corresponding bank to turn on.\n\nSetting this OID to restrictOnNearOverload (2) will not allow \noutlets on the corresponding bank to turn on if the \nrPDULoadBankConfigNearOverloadThreshold OID is exceeded.\n       \nSetting this OID to restrictOnOverload (3) will not allow\noutlets on the corresponding bank to turn on if the \nrPDULoadBankConfigOverloadThreshold OID is exceeded.\"\"\",\n        }, # column\n        \"rPDUPowerSupply\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.4\",\n        }, # node\n        \"rPDUPowerSupplyDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.4.1\",\n        }, # node\n        \"rPDUPowerSupply1Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powerSupplyOneOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerSupplyOneFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return powerSupply1Ok(1) if power\nsupply 1 is functioning normally.  If not functioning normally, \nthis OID will return powerSupply1Failed(2).\"\"\",\n        }, # scalar\n        \"rPDUPowerSupply2Status\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powerSupplyTwoOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerSupplyTwoFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"powerSupplyTwoNotPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return powerSupply2Ok(1) if power\nsupply 2 is functioning normally.  If not functioning normally, \nthis OID will return powerSupply2Failed(2).\n\nMetered Rack PDUs do not have a redundant powersupply.\"\"\",\n        }, # scalar\n        \"rPDUPowerSupplyAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allAvailablePowerSuppliesOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerSupplyOneFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"powerSupplyTwoFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"powerSupplyOneandTwoFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return powerSupply Alarm\"\"\",\n        }, # scalar\n        \"rPDUStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5\",\n        }, # node\n        \"rPDUStatusBankTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Status Bank Table\"\"\",\n        }, # scalar\n        \"rPDUStatusBankTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of each Rack PDU Bank\"\"\",\n        }, # table\n        \"rPDUStatusBankEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUStatusBankIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to Bank entries\"\"\",\n        }, # row\n        \"rPDUStatusBankIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the RACK PDU Bank entry.\"\"\",\n        }, # column\n        \"rPDUStatusBankNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the bank number.\"\"\",\n        }, # column\n        \"rPDUStatusBankState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"bankLoadNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bankLoadLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bankLoadNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bankLoadOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the bank load state.\n\nbankLoadNormal(1) indicates that the bank is \noperating properly within the rPDULoadBankConfigLowLoadThreshold \nand rPDULoadBankConfigNearOverloadThreshold OID values.\n\nbankLoadLow(2) indicates that the bank load has\ndropped below the rPDULoadBankConfigLowLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nbankLoadNearOverload(3) indicates that the bank load\nis greater than or equal to the \nrPDULoadBankConfigNearOverloadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nbankLoadOverload(4) indicates that the bank load is\ngreater than or equal to the rPDULoadBankConfigOverloadThreshold \nOID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"rPDUStatusPhaseTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Status Phase Table\"\"\",\n        }, # scalar\n        \"rPDUStatusPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of each Rack PDU Phase\"\"\",\n        }, # table\n        \"rPDUStatusPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUStatusPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to Phase entries\"\"\",\n        }, # row\n        \"rPDUStatusPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the RACK PDU Phase entry.\"\"\",\n        }, # column\n        \"rPDUStatusPhaseNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the phase number.\"\"\",\n        }, # column\n        \"rPDUStatusPhaseState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phaseLoadNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phaseLoadLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phaseLoadNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phaseLoadOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Phase load state.\n\nphaseLoadNormal(1) indicates that the Phase is \noperating properly within the rPDULoadPhaseConfigLowLoadThreshold \nand rPDULoadPhaseConfigNearOverloadThreshold OID values.\n\nphaseLoadLow(2) indicates that the Phase load has\ndropped below the rPDULoadPhaseConfigLowLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nphaseLoadNearOverload(3) indicates that the Phase load\nis greater than or equal to the \nrPDULoadPhaseConfigNearOverloadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\nphaseLoadOverload(4) indicates that the Phase load is\ngreater than or equal to the rPDULoadPhaseConfigOverloadThreshold \nOID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"rPDUStatusOutletTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of the Status Outlet Table\"\"\",\n        }, # scalar\n        \"rPDUStatusOutletTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting of status of each Outlet of an Outlet Monitored Rack PDU.\"\"\",\n        }, # table\n        \"rPDUStatusOutletEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDUStatusOutletIndex\",\n            ],\n            \"description\" :\n                \"\"\"This gives access to Outlet entries\"\"\",\n        }, # row\n        \"rPDUStatusOutletIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the RACK PDU Outlet entry.\"\"\",\n        }, # column\n        \"rPDUStatusOutletNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Outlet number.\"\"\",\n        }, # column\n        \"rPDUStatusOutletState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.12.5.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"outletLoadNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"outletLoadLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"outletLoadNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"outletLoadOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return the Outlet load state.\n\noutletLoadNormal(1) indicates that the Outlet is \noperating properly within the rPDUOutletConfigMonitoredLowLoadThreshold \nand rPDUOutletConfigMonitoredNearOverloadThreshold OID values.\n\noutletLoadLow(2) indicates that the Outlet load has\ndropped below the rPDUOutletConfigMonitoredLowLoadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\noutletLoadNearOverload(3) indicates that the Outlet load\nis greater than or equal to the \nrPDUOutletConfigMonitoredNearOverloadThreshold OID value.\nAn SNMP trap will occur when this state is entered or cleared.\n\noutletLoadOverload(4) indicates that the Outlet load is\ngreater than or equal to the rPDUOutletConfigMonitoredOverloadThreshold \nOID value.\nAn SNMP trap will occur when this state is entered or cleared.\"\"\",\n        }, # column\n        \"airConditioners\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13\",\n        }, # node\n        \"airFM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1\",\n        }, # node\n        \"airFMIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1\",\n        }, # node\n        \"airFMIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the device.\"\"\",\n        }, # scalar\n        \"airFMIdentTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMIdentTable. \"\"\",\n        }, # scalar\n        \"airFMIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting identification information \nfrom each module in the system. \"\"\",\n        }, # table\n        \"airFMIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMIdentModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMIdentModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module information.\"\"\",\n        }, # column\n        \"airFMIdentModuleModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \nmodel number. \"\"\",\n        }, # column\n        \"airFMIdentModuleDateOfMfg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \nmanufacture date. \"\"\",\n        }, # column\n        \"airFMIdentModuleSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \nunit serial number. \"\"\",\n        }, # column\n        \"airFMIdentModuleFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \nfirmware revision. \"\"\",\n        }, # column\n        \"airFMIdentModuleHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the \nhardware revision. \"\"\",\n        }, # column\n        \"airFMIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the \nlocation of the device. \"\"\",\n        }, # scalar\n        \"airFMIdentContact\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the \nperson to contact regarding the device. \"\"\",\n        }, # scalar\n        \"airFMStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2\",\n        }, # node\n        \"airFMStatusSystemOn\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operating state of the system.\nThis OID has been deprecated in favor of \nairFMGroupSysStatus.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemAverageRetTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system average return air \ntemperature in tenths of degrees Celsius.  \nThis OID has been deprecated in favor of \nairFMSysAvgReturnTempC.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemAverageRetTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system average return air \ntemperature in tenths of degrees Fahrenheit.\nThis OID has been deprecated in favor of \nairFMSysAvgReturnTempF.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemAverageRetHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system average return air \nhumidity in tenths of percent RH.\nThis OID has been deprecated in favor of \nairFMSysAvgReturnHum.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemActionTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system action air \ntemperature in tenths of degrees Celsius. \nThis OID has been deprecated in favor of \nairFMSysCtrlTempC.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemActionTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system action air \ntemperature in tenths of degrees Fahrenheit. \nThis OID has been deprecated in favor of \nairFMSysCtrlTempF.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemActionHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system action air humidity in tenths of percent RH.\nThis OID has been deprecated in favor of \nairFMSysCtrlHum.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteHighTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote high air \ntemperature in tenths of degrees Celsius. \nThis OID has been deprecated in favor of \nairFMSysMaxRemoteTempC.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteHighTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote high air \ntemperature in tenths of degrees Fahrenheit. \nThis OID has been deprecated in favor of \nairFMSysMaxRemoteTempF.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteAvgTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote average air \ntemperature in tenths of degrees Celsius. \nThis OID has been deprecated in favor of \nairFMSysAvgRemoteTempC.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteAvgTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote average air \ntemperature in tenths of degrees Fahrenheit. \nThis OID has been deprecated in favor of \nairFMSysAvgRemoteTempF.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteAvgHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote average air \nhumidity in tenths of percent RH. \nThis OID has been deprecated in favor of\nairFMSysAvgRemoteHum.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteLowTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote low air \ntemperature in tenths of degrees Celsius. \nThis OID has been deprecated in favor of \nairFMSysMinRemoteTempC.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemRemoteLowTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system remote low air \ntemperature in tenths of degrees Fahrenheit. \nThis OID has been deprecated in favor of \nairFMSysMinRemoteTempF.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemCoolingEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the system cooling\nfunction enable.  \nThis OID has been deprecated in favor of \nairFMSysCoolState.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemReheatingEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the system reheating\nfunction enable.  \nThis OID has been deprecated in favor of \nairFMSysReheatState.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemHumidifyEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the system humidify\nfunction enable.  \nThis OID has been deprecated in favor of \nairFMSysHumState.\"\"\",\n        }, # scalar\n        \"airFMStatusSystemDehumidifyEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabledYes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabledNo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the system dehumidify\nfunction enable.  \nThis OID has been deprecated in favor of \nairFMSysDehumState.\"\"\",\n        }, # scalar\n        \"airFMStatusModuleTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMStatusModuleTable.\"\"\",\n        }, # scalar\n        \"airFMStatusModuleTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module\nin the system.\"\"\",\n        }, # table\n        \"airFMStatusModuleEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMStatusModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get status from.\"\"\",\n        }, # row\n        \"airFMStatusModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module information.\"\"\",\n        }, # column\n        \"airFMStatusModuleOutputCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module output capacity in kilowatts.\nThis OID has been deprecated in favor of \nairFMModOutputCapacity.\"\"\",\n        }, # column\n        \"airFMStatusModuleSupplyTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module supply air temperature in \ntenths of degrees Celsius.\nThis OID has been deprecated in favor of \nairFMModSupplyTempC.\"\"\",\n        }, # column\n        \"airFMStatusModuleSupplyTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module supply air temperature in \ntenths of degrees Fahrenheit.\nThis OID has been deprecated in favor of \nairFMModSupplyTempF.\"\"\",\n        }, # column\n        \"airFMStatusModuleSupplyHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module supply air humidity in tenths of percent RH.\nThis OID has been deprecated in favor of \nairFMModSupplyHum.\"\"\",\n        }, # column\n        \"airFMStatusModuleReturnTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module return air temperature in \ntenths of degrees Celsius.\nThis OID has been deprecated in favor of \nairFMModReturnTempC.\"\"\",\n        }, # column\n        \"airFMStatusModuleReturnTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module return air temperature in \ntenths of degrees Fahrenheit.\nThis OID has been deprecated in favor of \nairFMModReturnTempF.\"\"\",\n        }, # column\n        \"airFMStatusModuleReturnHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.2.20.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The module return air humidity in tenths of percent RH.\nThis OID has been deprecated in favor of \nairFMModReturnHum.\"\"\",\n        }, # column\n        \"airFMGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3\",\n        }, # node\n        \"airFMGroupSysStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusOnLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusIdle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"statusLoadShare\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"statusOffLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"statusFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"statusDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"statusUndefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of this system within the group.\"\"\",\n        }, # scalar\n        \"airFMGroupSysRuntime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of hours the system has been running.\"\"\",\n        }, # scalar\n        \"airFMGroupSysRole\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"rolePrimary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"roleBackup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The role of this system within the group.\"\"\",\n        }, # scalar\n        \"airFMGroupSysRoles\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4\",\n        }, # node\n        \"airFMGroupSysRolesTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMGroupSysRolesTable. \"\"\",\n        }, # scalar\n        \"airFMGroupSysRolesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each system\nin the group. \"\"\",\n        }, # table\n        \"airFMGroupSysRolesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMGroupSysIndex\",\n            ],\n            \"description\" :\n                \"\"\"The system to get status from.\"\"\",\n        }, # row\n        \"airFMGroupSysIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the system information.\"\"\",\n        }, # column\n        \"airFMGroupSysRoleStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reserved1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reserved2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"loadShare\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"offLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present mode of the System.\"\"\",\n        }, # column\n        \"airFMGroupSysPresentRole\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present role of the System in a Group.\"\"\",\n        }, # column\n        \"airFMGroupSysManualRoleSetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manual role setting of the System in a Group.\nOnly applies if Role Assignment Method is set\nto static (Manually Assigned Roles).\"\"\",\n        }, # column\n        \"airFMGroupSysRunHours\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of hours the System has been \ncontributing to environmental control.\"\"\",\n        }, # column\n        \"airFMGroupSysComm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commEstablished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether a system is communicating with the \nother Systems in the Group.\"\"\",\n        }, # column\n        \"airFMGroupSysIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The IP Address of the System.\"\"\",\n        }, # column\n        \"airFMGroupSysRoleAssignment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"staticManual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dynamicAutomatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The method used to assign roles (i.e. Primary, Backup) \nto the Systems in a Group. \n\nstaticManual: Manually assign Primary or Backup to \nregulate run hours across the Group.\ndynamicAutomatic: User indicates the number of Systems \nthat will be assigned a primary role in this Group.\"\"\",\n        }, # scalar\n        \"airFMGroupAutoRoleNumPrimary\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"four\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of Systems assigned the 'primary' role in \nthis Group.  Only applies if Role Assignment Method \nis set to dynamic (Automatic Run Hour Balancing).\"\"\",\n        }, # scalar\n        \"airFMGroupCfg\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5\",\n        }, # node\n        \"airFMGroupCfgName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the group name.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgNumSystems\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"four\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of Systems in this Group.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgIdleBlower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minimumSpeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normalSpeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Blower behavior for backup Systems and Systems that \nhave entered a failure mode.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgShutdownSmoke\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, all Systems in the Group will shut down \nif smoke is detected.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgShutdownFire\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If enabled, all Systems in the Group will shut down \nif fire is detected.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgFailoverCommLoss\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Failover on Comm Loss enables an available backup \nSystem to run in place of a System that has lost \ncommunication with the Group.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgDmdFightStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Demand Fighting and Setpoint Sharing are \nautomatically enabled when a System is responding to \na Load Sharing Request.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgDmdFightSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Demand Fighting prevents a System from engaging \nreheat in a Group where any System is cooling.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgSetpointShareStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Demand Fighting and Setpoint Sharing are \nautomatically enabled when a System is responding to \nLoad Sharing Request.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgSetpointShareSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"All Systems in the Group use the same setpoints.\"\"\",\n        }, # scalar\n        \"airFMGroupCfgResetFieldServiceDefaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.5.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset all Group \nparameters, which can only be edited by a field \nservice engineer, to their factory default values.\n\nGetting this OID will do nothing and return the \nnoOperation(1) value.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShare\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6\",\n        }, # node\n        \"airFMGroupLoadShareCoolRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Systems that are cooling may request assistance from \nother Systems in the Group.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareCoolThreshC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature threshold at which a System will generate \na load sharing request for cooling.  Measured in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareCoolThreshF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature threshold at which a System will generate \na load sharing request for cooling.  Measured in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareReheatRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Systems that are reheating may request assistance \nfrom other Systems in the Group.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareReheatThreshC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature threshold at which a System will generate \na load sharing request for reheating.  Measured in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareReheatThreshF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature threshold at which a System will generate \na load sharing request for reheating.  Measured in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareHumRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Systems that are humidifying may request humidification \nassistance from other Systems in the Group.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareHumThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity threshold at which a System will generate a \nload sharing request for humidification.  Measured in\ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareDehumRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Systems that are dehumidifying may request assistance \nfrom other Systems in the Group.\"\"\",\n        }, # scalar\n        \"airFMGroupLoadShareDehumThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity threshold at which a System will generate a \nload sharing request for dehumidification.  Measured in\ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airFMGroupFailover\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7\",\n        }, # node\n        \"airFMGroupFailoverSys\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1\",\n        }, # node\n        \"airFMGroupFailoverSysAnyMinorAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if any minor system alarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysAnyMajorAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if any major system alarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysHighEnvTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the high environmental temperature \nalarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysLowEnvTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the low environmental temperature\nalarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysHighEnvHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the high environmental humidity\nalarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysLowEnvHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the low environmental humidity\nalarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysFireAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the fire alarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysSmokeAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the smoke alarm is active. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysCommLost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the system has lost comm. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysSupplySensorFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the supply sensor has failed. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysReturnSensorFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the return sensor has failed. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysPrimarySensorFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the primary sensor has failed. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysSecondarySensorFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the secondary sensor has failed. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverSysNoSensorsAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if no sensors are available. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverMod\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2\",\n        }, # node\n        \"airFMGroupFailoverModMaintRequired\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if maintenance is required on a \nmodule. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModCoolFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if cooling has failed on a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModHumFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the humidifier has failed on a\nmodule. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModBlwrCntrl1Fail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if blower controller 1 has failed on\na module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModBlwrCntrl2Fail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if blower controller 2 has failed on\na module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModHighFilterDP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if a high filter differential \npressure is present on a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModHighSupplyTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if a high supply temperature is \nactive on a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModLowSupplyTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if a low supply temperature is active\non a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModLossOrLowAirFlow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if there is a loss of air flow or low\nair flow on a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModHumReplaceCylinder\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if a humidifier needs its cylinder\nreplaced on a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModAirBlockInterlockOpen\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the air block interlock is open\non a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModWaterDetected\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if water is detected by a module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMGroupFailoverModCondensatePumpFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.3.7.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enabling this OID will cause the system to enter \na failure state if the condensate pump has failed in \na module. \nOnce in the failure state, environmental control \nceases for the system, and the blowers enter the \nIdle Blower Operation mode.  \nA value of notApplicable indicates that this alarm \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4\",\n        }, # node\n        \"airFMSysStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1\",\n        }, # node\n        \"airFMSysNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"four\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the system within the group.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysPresentStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reserved1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reserved2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"loadShare\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"offLine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present mode of the System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysPresentRole\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present role of the System in the Group.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysRunHours\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of hours the System has been \ncontributing to environmental control.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the coolant at the fluid coil \ninlet.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the coolant at the fluid coil \ninlet.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHotWaterTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hot water temperature.  Measured in degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHotWaterTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hot water temperature.  Measured in degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgReturnTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average return temperature calculated from all \npresent modules. Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgReturnTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average return temperature calculated from all \npresent modules. Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgReturnHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average return humidity calculated from all \npresent modules. Measured in tenths of percent RH.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgRemoteTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average temperature calculated from all \noperational remote sensors.  Measured in tenths of\ndegrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgRemoteTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average temperature calculated from all \noperational remote sensors. Measured in tenths of\ndegrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAvgRemoteHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average return humidity calculated from all \npresent modules. Measured in tenths of percent RH.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysMaxRemoteTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum temperature reading from all operational \nremote sensors. Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysMaxRemoteTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum temperature reading from all operational \nremote sensors. Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysMinRemoteTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum temperature reading from all operational \nremote sensors. Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysMinRemoteTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The minimum temperature reading from all operational \nremote sensors. Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysTempCtrlMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"avgReturn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"avgRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"maxRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The method of environment temperature control \nselected to regulate the temperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualTempCtrlMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"avgReturn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"avgRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"maxRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual method of environment temperature control \nbeing used to regulate the temperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumCtrlMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"avgReturnRH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"avgReturnDewPt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"avgRemoteRH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"avgRemoteDewPt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The method of environment humidity control selected \nto regulate the humidity.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualHumCtrlMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"avgReturnRH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"avgReturnDewPt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"avgRemoteRH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"avgRemoteDewPt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual method of environment humidity control \nbeing used to regulate the humidity.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCtrlTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system environmental control air temperature from\nthe sensor denoted by airFMSysActualTempCtrl.  \nMeasured in tenths of degrees Celsius. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCtrlTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system environmental control air temperature from\nthe sensor denoted by airFMSysActualTempCtrl.  \nMeasured in tenths of degrees Fahrenheit. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCtrlHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system environmental control air humidity from\nthe sensor denoted by airFMSysActualHumCtrl.  \nMeasured in percent relative humidity. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDemands\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2\",\n        }, # node\n        \"airFMSysDXCoolingDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The direct expansion cooling output demanded by the \nSystem.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDXDehumDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The direct expansion dehumidification output demanded \nby the System.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDXActualCoolDehum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The direct expansion cooling or dehumidification \noutput measured by the System.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidCoolDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid coil cooling output demanded by the System.\nMeasured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidDehumDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid coil dehumidification output demanded by \nthe System.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidActualCoolDehum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid coil cooling or dehumidification output \nmeasured by the System.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysElectricReheatDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The electric reheating output demanded by the System.\nMeasured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualElectricReheat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The electric reheating output of the System.  \nMeasured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysSteamHotGasReheatDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The steam, hot water, or hot gas reheating output \ndemanded by the System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualSteamHotGasReheat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The steam, hot water, or hot gas reheating output of \nthe System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysSteamElectrodeHumDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The steam electrode humidification output demanded by \nthe System.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualSteamElectrodeHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The average steam electrode humidification output \nmeasured for the Modules in the System.  Measured in \npercent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysSteamHumDmd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The steam humidification output demanded by the System.  \nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualSteamHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The steam humidification output for the System.  \nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysSetup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3\",\n        }, # node\n        \"airFMSysNumModules\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Modules in this System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysNumPCIOMs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"one\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"two\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"three\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"four\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Programmable Customer Input/Output \nModules (PCIOMs) installed in the Main Module of this \nSystem. Each PCIOM adds four input contacts and four \noutput relays to the System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysMainsVlt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The mains voltage for the Modules in this System.\nA value of N/A indicates that this OID does not apply \nto this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysUPSVlt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS voltage for the Modules in this System.\nA value of N/A indicates that this OID does not apply \nto this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilCfg\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"econ\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"multicool\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"chilledWater\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of cooling coils installed in the Modules in \nthis System: DX coil, DX and MultiCool (chilled water) \ncoils, DX and Economizer coils, or only a Chilled \nLiquid coil.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysRefrigType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"r22\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"r407C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of refrigerant used by each compressor in \nthe system.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHeatRejection\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"airCooled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"waterCooled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"glycolCooled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The method the Modules in this System use to transfer \nheat away from the refrigerant.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDischAirPtrn\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"upFlow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"downFlow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"horizFlow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The discharge air pattern for the Modules in this \nSystem.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysAirFltr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highEfficiency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of air filters (standard or high efficiency) \ninstalled in the Modules of this System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysFlowSwitch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dxEcon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"multiCoolChillWater\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the optional flow switch. \nNone: No flow switch is installed in this System.\nDX: Coolant input to the heat exchanger (condenser). \nMultiCool: Chilled water input to the MultiCool coil. \n\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidVlvAct\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"springAnalog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"floatingControl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of valve actuator installed on the coil \nfluid valve. The coil fluid valve controls the flow \nof coolant into a fluid cooling coil, such as a \nMultiCool or Economizer coil.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidVlvType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"twoWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"threeWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of coil fluid valve installed for the \nModules in this System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCndsrFluidVlvAct\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"floatingControl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of valve actuator installed on the Condenser \nfluid valve. The Condenser fluid valve controls the \nflow of coolant into the heat exchanger (condenser) \nto regulate head pressure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCndsrFluidVlvType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"twoWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"threeWay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of Condenser fluid valve installed for the \nModules in this System.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHotWaterVlvAct\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"springAnalog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"floatingControl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of valve actuator installed on the hot water \nvalve.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysNumRemoteSensors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.3.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of remote sensors detected by the system.\"\"\",\n        }, # scalar\n        \"airFMSysConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4\",\n        }, # node\n        \"airFMSysPrimaryControlSensor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"return\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"remote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether return or remote sensors will control \nthe system.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysRemoteSensorData\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"maximum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether average temperature or max temperature\nwill be used when remote sensors are selected for \ncontrol of the system.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysFastStartup\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimizes the time for the cooling process to begin \nafter other delay constraints have been met.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay that begins when power is applied and \nends when the System starts. This allows you to \ncreate a staged restart among your Systems after a \npower loss.  Measured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysModeDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay between starting the blowers and \nengaging the modes. It allows the sensors to read \nroom conditions accurately and allows the controller \nto check for major alarms before engaging a mode.\nMeasured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCommLossShutdownDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay between an Expansion Module losing \ncommunication with the Main Module and the Expansion \nModule shutting down. A value of -1 will keep \nthe Expansion Module running after a communication \nloss.  Measured in hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysResetSysFailure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will allows the system \nto return from any failure condition, if the \nfailure(s) have cleared.\nGetting this OID will do nothing and return the noOperation(1) value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysResetUserDflts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset all system \nparameters that can be edited by the user to their \nfactory default values.\nGetting this OID will do nothing and return the noOperation(1) value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysResetFldSrvcDflts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset all system \nparameters that can only be edited by the field \nservice engineer to their factory default values.\nGetting this OID will do nothing and return the noOperation(1) value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysResetRunHours\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset the system Run Hours.\nGetting this OID will do nothing and return the noOperation(1) value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCooling\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5\",\n        }, # node\n        \"airFMSysCompMinOnTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the minimum time the compressor continues to \noperate after it is started. The delay protects the \ncompressor from damage. Caution: Reducing this delay \nshortens compressor life.  Measured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCompMinOffTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the minimum time the compressor will remain off \nafter it ceases operation. The delay protects the \ncompressor from damage. Caution: Reducing this delay \nshortens compressor life.  Measured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCompRotPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set how often to perform compressor runtime \nbalancing.  Measured in hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysEconIsolVlvOpenDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay between opening the Economizer Isolator \noutput relay and engaging the compressors.  Measured\nin seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysEconIsolVlvCloseDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay between disengaging the compressor and \nclosing the Economizer Isolator output relay.\nMeasured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCndsrFluidVlvCloseDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the time the condenser valve remains open after \nthe compressors disengage.  Measured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysInterstageDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The DX interstage delay allows the first compressor's \ncooling to take effect before engaging the second \ncompressor. This prevents the second compressor from \ncycling on and off excessively.  Measured in seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the mode to enabled or disabled. Disabled modes \nwill not operate, and you cannot make changes to \ntheir settings while they are disabled.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolEssFunction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the priority of the mode for alarms and events \nwith the nonessential stop behavior. Nonessential \nmodes are disabled during nonessential stop alarms \nand events.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolSetpointC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 C above the \nreheat setpoint if a heater is installed.  Measured\nin tenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolSetpointF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 C above the \nreheat setpoint if a heater is installed.  Measured\nin tenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolDeadbandC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature range that controls output when the \nselected control sensor temperature is above the \nsetpoint. At the top of this range, the cool mode \noutputs at 100%. The deadband does not apply to PID-\ncontrolled modes.  Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolDeadbandF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature range that controls output when the \nselected control sensor temperature is above the \nsetpoint. At the top of this range, the cool mode \noutputs at 100%. The deadband does not apply to PID-\ncontrolled modes.  Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolEconIsolFunction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the Economizer Automatic Coolant Isolation valve \nto enabled or disabled. This valve anticipates a \ncooling demand and opens the coil fluid valve.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysSuctPresCompensation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the Suction Pressure Compensation to enabled or \ndisabled. This function attempts to keep the suction \npressure from exceeding 95 psi.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidActivThreshC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum coolant temperature required to use the \noptional MultiCool or Economizer coil.  Measured in\ntenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidActivThreshF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum coolant temperature required to use the \noptional MultiCool or Economizer coil.  Measured in\ntenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidActivDeadbandC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The controller will disengage the MultiCool or \nEconomizer coil when the coolant temperature reaches \nthe coil fluid temperature activation threshold plus \nthe deadband.  Measured in tenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoilFluidActivDeadbandF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The controller will disengage the MultiCool or \nEconomizer coil when the coolant temperature reaches \nthe coil fluid temperature activation threshold plus \nthe deadband.  Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolPIDMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the multipliers that the PID algorithm will use \nto calculate the cool output. Proportional, \nProportional + Integral, or Proportional + Integral \n+ Derivative.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolPIDGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the proportional multiplier to correct for \ndifferences between the selected control sensor \nactual temperature and the setpoint.  Measured in\n%/C.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolPIDResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the integral multiplier to correct for the \nproportional offset.  Measured in %/(C * min).\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysCoolPIDDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.5.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the derivative multiplier to counteract overshoot \nand droop during changes in the room load.  Measured\nin %/(C / min).\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumidify\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6\",\n        }, # node\n        \"airFMSysHumState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the mode to enabled or disabled. Disabled modes \nwill not operate, and you cannot make changes to their \nsettings while they are disabled.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumEssFunction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the priority of the mode for alarms and events \nwith the nonessential stop behavior. Nonessential \nmodes are disabled during nonessential stop alarms \nand events.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 % RH below \nthe dehumidification setpoint.  Measured in tenths of\npercent relative humidity. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumDeadband\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity range that controls output when the \nselected control sensor humidity is below the \nsetpoint. At the top of this range, the \nhumidification mode outputs at 100%. The deadband \ndoes not apply to PID-controlled modes.  Measured in \ntenths of percent relative humidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumCtrlSetting\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"relativeHum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dewPoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the method to control the humidity in the room. \nThe two methods are Relative Humidity (RH) or Dew \nPoint of the selected control sensor air. The dew \npoint method helps correct for hot spots near the \nselected control sensors.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysActualHumCtrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"relativeHum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dewPoint\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidity control method the system is using.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumSensBand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percentage of relative humidity below the \nsetpoint at which the humidifier will output at 100% \nof capacity.  Measured in percent relative humidity. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumidify\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7\",\n        }, # node\n        \"airFMSysDehumState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the mode to enabled or disabled. Disabled modes \nwill not operate, and you cannot make changes to their \nsettings while they are disabled.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumEssFunction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the priority of the mode for alarms and events \nwith the nonessential stop behavior. Nonessential \nmodes are disabled during nonessential stop alarms \nand events.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 % RH above \nthe humidification setpoint if a humidifier is \ninstalled.  Measured in tenths of percent relative \nhumidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumDeadband\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidity range above the setpoint at which the \ndehumidification mode will output at 100%. The \ndeadband does not apply to PID controlled modes.  \nMeasured in tenths of percent relative humidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"half\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"full\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the dehumidification mode to use either half of \nthe cooling coil or the full coil when dehumidifying \nthe room.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumPIDMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the multipliers that the PID algorithm will use \nto calculate the output. Proportional, \nProportional + Integral, or Proportional + Integral \n+ Derivative.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumPIDGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the proportional multiplier to correct for \ndifferences between the selected control sensor \nactual humidity and the setpoint.  Measured in %/%RH.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumPIDResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the integral multiplier to correct for the \nproportional offset.  Measured in %/(%RH * min).\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysDehumPIDDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the derivative multiplier to counteract overshoot \nand droop during changes in the room humidity.  \nMeasure in %/(%RH / min). \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8\",\n        }, # node\n        \"airFMSysReheatState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the mode to enabled or disabled. Disabled modes \nwill not operate, and you cannot make changes to their \nsettings while they are disabled.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatEssFunction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the priority of the mode for alarms and events \nwith the nonessential stop behavior. Nonessential \nmodes are disabled during nonessential stop alarms \nand events.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatSetpointC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 C below the \ncooling setpoint.  Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatSetpointF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The target value for the selected control sensor air \nfor this mode. It must be at least 1.0 C below the \ncooling setpoint.  Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatDeadbandC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature range that controls output when the \nselected control sensor temperature is below the \nsetpoint. At the bottom of this range, the reheat \nmode outputs at 100%. The deadband does not apply to \nPID-controlled modes.  Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatDeadbandF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature range that controls output when the \nselected control sensor temperature is below the \nsetpoint. At the bottom of this range, the reheat \nmode outputs at 100%. The deadband does not apply to \nPID-controlled modes.  Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatPIDMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"p\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the multipliers that the PID algorithm will use \nto calculate the output. Proportional, \nProportional + Integral, or Proportional + Integral \n+ Derivative.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatPIDGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the proportional multiplier to correct for \ndifferences between the selected control sensor \nactual temperature and the setpoint.  Measured in \n%/C.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatPIDResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the integral multiplier to correct for the \nproportional offset.  Measured in %/(C * min). \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysReheatPIDDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.8.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the derivative multiplier to counteract overshoot \nand droop during changes in the room load.  Measured\nin %/(C / min).\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9\",\n        }, # node\n        \"airFMSysHighSplyTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for air blown into the \nroom (supply). If the supply temperature exceeds the \nthreshold, an alarm will occur.  Measured in tenths \nof degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighSplyTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for air blown into the \nroom (supply). If the supply temperature exceeds the \nthreshold, an alarm will occur.  Measured in tenths \nof degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowSplyTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for air blown into the \nroom (supply). If the supply temperature drops below \nthe threshold, an alarm will occur.  Measured in \ntenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowSplyTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for air blown into the \nroom (supply). If the supply temperature drops below \nthe threshold, an alarm will occur. Measured in \ntenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighCoilFluidTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for coolant at the \ninlet to the fluid coil. If the fluid coil coolant \ntemperature exceeds the threshold, an alarm will \noccur.  Measured in tenths of degrees Celsius. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighCoilFluidTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for coolant at the \ninlet to the fluid coil. If the fluid coil coolant \ntemperature exceeds the threshold, an alarm will \noccur.  Measured in tenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowCoilFluidTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for coolant at the \ninlet to the fluid coil. If the fluid coil coolant \ntemperature drops below the threshold, an alarm will \noccur.  Measured in tenths of degrees Celsius. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowCoilFluidTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for coolant at the \ninlet to the fluid coil. If the fluid coil coolant \ntemperature drops below the threshold, an alarm will \noccur.  Measured in tenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighCtrlTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for air monitored by \nthe System. If the temperature exceeds the threshold, \nan alarm will occur.  Measured in tenths of degrees \nCelsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighCtrlTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high temperature threshold for air monitored by \nthe System. If the temperature exceeds the threshold, \nan alarm will occur.  Measured in tenths of degrees \nFahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowCtrlTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for air monitored by \nthe System. If the temperature drops below the \nthreshold, an alarm will occur.  Measured in tenths \nof degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowCtrlTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low temperature threshold for air monitored by \nthe System. If the temperature drops below the \nthreshold, an alarm will occur.  Measured in tenths \nof degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHighCtrlHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The high humidity threshold for air monitored by the \nSystem. If the humidity exceeds the threshold, an \nalarm will occur.  Measured in tenths of percent\nrelative humidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysLowCtrlHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The low humidity threshold for air monitored by the \nSystem. If the humidity drops below the threshold, \nan alarm will occur.  Measured in tenths of percent\nrelative humidity. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysTempAlarmDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time the blower must be on before a \ntemperature alarm can be issued.  Measured in \nseconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysHumAlarmDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.9.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time the blower must be on before a \nhumidity alarm can be issued.  Measured in seconds. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMSysInputs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10\",\n        }, # node\n        \"airFMSysInputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysInputTable. \"\"\",\n        }, # scalar\n        \"airFMSysInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each input \ncontact.\"\"\",\n        }, # table\n        \"airFMSysInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysInputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input contact to obtain status from.\"\"\",\n        }, # row\n        \"airFMSysInputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number designator of the Input Contact.\"\"\",\n        }, # column\n        \"airFMSysInputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configurable name for the Input Contact.  Maximum \ntext input is 13 characters.\"\"\",\n        }, # column\n        \"airFMSysInputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of this contact: Open or Closed. A \nviolation will occur when this relay is not in its \nnormal state.\"\"\",\n        }, # column\n        \"airFMSysInputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the normal state of this contact (the state when \nno alarm/event exists).\"\"\",\n        }, # column\n        \"airFMSysInputDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the delay between this contact exiting its normal \nstate and an alarm being triggered.  Measured in \nseconds.\"\"\",\n        }, # column\n        \"airFMSysInputAlarmAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.10.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"minor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"major\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"remoteRunStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"nonessStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"immShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sets the behavior for this contact when it exits its \nnormal state.\"\"\",\n        }, # column\n        \"airFMSysOutputs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11\",\n        }, # node\n        \"airFMSysOutputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysOutputTable. \"\"\",\n        }, # scalar\n        \"airFMSysOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each output relay. \"\"\",\n        }, # table\n        \"airFMSysOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The output relay to obtain status from.\"\"\",\n        }, # row\n        \"airFMSysOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number designator of the output relay.\"\"\",\n        }, # column\n        \"airFMSysOutputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of this relay: Open or Closed. A violation \nwill occur when this relay is not in its normal state.\"\"\",\n        }, # column\n        \"airFMSysOutputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.11.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the normal state of this relay (the state when no \nalarm/event exists).\"\"\",\n        }, # column\n        \"airFMSysAlarmMap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12\",\n        }, # node\n        \"airFMSysAlarmMapSys\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1\",\n        }, # node\n        \"airFMSysAlarmMapSysTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysAlarmMapSysTable. \"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapSysTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapSysEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapSysOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The system alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapSysOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysAnyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Any Alarm.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSystemOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for System On.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSystemOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for System Offline.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysHighEnvTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for High Environmental \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysLowEnvTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Low Environmental \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysHighEnvHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for High Environmental \nHumidity.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysLowEnvHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Low Environmental \nHumidity.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysFireDet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Fire Detected.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysSmokeDet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Smoke Detected.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysEconIsol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Econ Isolator.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysSupplySensFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Supply Sensor Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysReturnSensFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Return Sensor Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysRemSensRemoved\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Remote Sensor Removed.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysPrimSensFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Primary Sensor Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysSecSensFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Secondary Sensor Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapSysSecSensActive\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System alarm map setting for Secondary Sensor Active.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainMod\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2\",\n        }, # node\n        \"airFMSysAlarmMapMainModTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysAlarmMapMainModTable. \"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapMainModTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapMainModEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapMainModOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The main module alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapMainModOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModAnyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Any Alarm.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModMaintReq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Module Maintenance\nRequired.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModCoolFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Module Cooling \nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModHighSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for High Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModLowSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Low Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModHumFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Humidifier Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModHumReplCyl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Humidifier Replace\nCylinder.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModCondPumpFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Condensate Pump\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModBlwrCntl1Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Blower Controller 1\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModBlwrCntl2Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Blower Controller 2\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModHighFltrDP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for High Filter \nDifferential Pressure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModLowAirFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Low Air Flow.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModAirBlckIntOpen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Air Block Interlock\nOpen.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapMainModWaterDetected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Main Module alarm map setting for Water Detected.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3\",\n        }, # node\n        \"airFMSysAlarmMapExpMod1TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysAlarmMapExpMod1Table. \"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapExpMod1Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapExpMod1Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapExpMod1OutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The expansion module 1 alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapExpMod1OutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1AnyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Any Alarm.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1MaintReq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Module Maintenance\nRequired.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1CoolFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Module Cooling \nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1HighSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for High Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1LowSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Low Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1HumFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Humidifier Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1HumReplCyl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Humidifier Replace\nCylinder.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1CondPumpFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Condensate Pump\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1BlwrCntl1Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Blower Controller 1\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1BlwrCntl2Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Blower Controller 2\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1HighFltrDP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for High Filter \nDifferential Pressure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1LowAirFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Low Air Flow.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1AirBlckIntOpen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Air Block Interlock\nOpen.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod1WaterDetected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 1 alarm map setting for Water Detected.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4\",\n        }, # node\n        \"airFMSysAlarmMapExpMod2TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the \nairFMSysAlarmMapExpMod2Table.\"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapExpMod2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapExpMod2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapExpMod2OutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The expansion module 2 alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapExpMod2OutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2AnyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Any Alarm.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2MaintReq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Module Maintenance\nRequired.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2CoolFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Module Cooling \nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2HighSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for High Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2LowSupplyTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Low Supply \nTemperature.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2HumFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Humidifier Failure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2HumReplCyl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Humidifier Replace\nCylinder.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2CondPumpFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Condensate Pump\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2BlwrCntl1Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Blower Controller 1\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2BlwrCntl2Fail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Blower Controller 2\nFailure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2HighFltrDP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for High Filter \nDifferential Pressure.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2LowAirFlow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Low Air Flow.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2AirBlckIntOpen\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Air Block Interlock\nOpen.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapExpMod2WaterDetected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.4.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exp Module 2 alarm map setting for Water Detected.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5\",\n        }, # node\n        \"airFMSysAlarmMapInputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMSysAlarmMapInputTable. \"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapInputOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input contact alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapInputOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 1 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 2 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 3 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 4 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 5 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 6 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 7 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 8 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 9 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 10 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 11 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 12 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 13 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 14 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 15 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapInput16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input contact 16 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6\",\n        }, # node\n        \"airFMSysAlarmMapOutputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the \nairFMSysAlarmMapOutputTable. \"\"\",\n        }, # scalar\n        \"airFMSysAlarmMapOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting alarm map information.\"\"\",\n        }, # table\n        \"airFMSysAlarmMapOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMSysAlarmMapOutputIndex\",\n            ],\n            \"description\" :\n                \"\"\"The input contact alarm map type to reference.\"\"\",\n        }, # row\n        \"airFMSysAlarmMapOutputIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the output relay.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 1 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 2 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 3 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 4 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 5 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 6 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput7\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 7 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput8\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 8 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput9\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 9 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput10\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 10 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput11\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 11 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput12\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 12 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput13\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 13 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput14\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 14 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput15\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 15 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMSysAlarmMapOutput16\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.4.12.6.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output relay 16 alarm map setting.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModule\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5\",\n        }, # node\n        \"airFMModIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1\",\n        }, # node\n        \"airFMModIdentTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModIdentTable. \"\"\",\n        }, # scalar\n        \"airFMModIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModIdentModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModIdentModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Model number of the Module.\"\"\",\n        }, # column\n        \"airFMModSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique identification number for this Module.\"\"\",\n        }, # column\n        \"airFMModManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date the Module was manufactured.\"\"\",\n        }, # column\n        \"airFMModFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Revision number of the firmware installed on this \nModule.\"\"\",\n        }, # column\n        \"airFMModHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Revision number of the hardware installed on this \nModule.\"\"\",\n        }, # column\n        \"airFMModStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2\",\n        }, # node\n        \"airFMModStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModStatusTable. \"\"\",\n        }, # scalar\n        \"airFMModStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModStatusModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModStatusModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModSupplyTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature measured at the supply sensor.  \nMeasured in tenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModSupplyTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature measured at the supply sensor.\nMeasured in tenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModSupplyHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidity measured at the supply sensor.\nMeasured in tenths of percent relative humidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModReturnTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature measured at the return sensor.\nMeasured in tenths of degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModReturnTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature measured at the return sensor.\nMeasured in tenths of degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModReturnHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidity measured at the return sensor.\nMeasured in tenths of percent relative humidity.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModFilterDiffPresPa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the air \nfilters. A high differential pressure indicates a \nclogged filter.  Measured in Pascals.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModFilterDiffPresInWC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the air \nfilters. A high differential pressure indicates a \nclogged filter.  Measured in hundredths of inches \nwater column.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCoilDiffPresPa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the \ncooling/dehumidification coils.  Measured in Pascals.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCoilDiffPresInWC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the \ncooling/dehumidification coils.  Measured in \nhundredths of inches water column.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModProperties\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3\",\n        }, # node\n        \"airFMModPropTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModPropTable. \"\"\",\n        }, # scalar\n        \"airFMModPropTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModPropEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModPropModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModPropModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModOutputCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"kw45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"kw35\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"kw40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"kw50\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"kw80\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling capacity (in Kilowatts) of the displayed \nModule.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCapacityCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"tandem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"hotGasBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The method used to load and unload the compressors. \nTandem compressor Modules use two stages (one \ncompressor each). Single compressor Modules use hot \ngas bypass.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModHeaterType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"electricSCR\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"steam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"hotWaterOnOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"hotGasReheat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"hotGasAndElectric\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"hotWaterProp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of reheating device installed in this Module.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModElectricHeaterType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"kw10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"kw15\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type/capacity of the electric heater, if installed.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModHumidifierType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"steamElectrode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"liveSteam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of equipment installed in the Module to run \nthe humidification mode.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwrFreqSetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Frequency of the blower in tenths of hertz.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModNomCoilDiffPresPa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the \ncooling/dehumidification coils.  Measured in Pascals.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModNomCoilDiffPresInWC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The difference in pressure on either side of the \ncooling/dehumidification coils.  Measured in \nhundredths of inches water column.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCondPump\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence of a condensate pump in the \nModules of this System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModFireDetector\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence of a fire detector for each \nof the Modules in this System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModSmokeDetector\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence of a smoke detector for each \nof the Modules in this System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModWaterDetector\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the presence of a water leak detector for \neach of the Modules in this System.\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCooling\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4\",\n        }, # node\n        \"airFMModCoolTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModCoolTable. \"\"\",\n        }, # scalar\n        \"airFMModCoolTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModCoolEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModCoolModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModCoolModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModComp1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of compressor 1 of the tandem compressor \nunit (on or off).\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModComp2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of compressor 2 of the tandem compressor \nunit (on or off).\nA value of notApplicable indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModSuctPresKPa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The refrigerant pressure measured at the suction \ninlet of the compressor.  Measured in kiloPascals.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModSuctPresPSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The refrigerant pressure measured at the suction \ninlet of the compressor.  Measured in pounds per\nsquare inch.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModDischPresKPa\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The refrigerant pressure measured at the discharge \noutlet of the compressor.  Measured in kiloPascals.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModDischPresPSI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The refrigerant pressure measured at the discharge \noutlet of the compressor.  Measured in pounds per\nsquare inch.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCondFluidVlvPos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the condenser fluid valve. The valve \nregulates the flow of liquid coolant into the heat \nexchanger (condenser). 100% indicates the valve is \ncompletely open, and 0% indicates that the valve is \nclosed.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModCoilFluidVlvPos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the coil fluid valve. The valve \nregulates the flow of liquid coolant in the fluid \ncooling coil (MultiCool, Economizer, or Chilled \nWater). 100% indicates the valve is completely open, \nand 0% indicates that the valve is closed.  Measured\nin percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModHumidity\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5\",\n        }, # node\n        \"airFMModHumTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModHumTable. \"\"\",\n        }, # scalar\n        \"airFMModHumTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModHumEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModHumModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModHumModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModHumidifier\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"steamElectrode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"liveSteam\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of equipment installed in the Module to run \nthe humidification mode.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModElectrodeCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current drawn by the electrodes of the steam \ncylinder humidifier.  Measured in tenths of amps.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModHumActualOutput\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidification output of an individual Module.\nMeasured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModWaterConductivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The conductivity of the water in the humidifier \ncylinder.  Measured in microSiemens per centimeter.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModHotWaterVlvPos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the hot water valve. 100% indicates \nthe valve is completely open, and 0% indicates that \nthe valve is closed.  Measured in percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModStmElectHumMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"drain\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set the humidifier function mode. \nOff: Remove power from electrodes. \nAuto: Humidifier controlled by Module controller. \nDrain: Remove power from electrodes and drain the cylinder.\n\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlower1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6\",\n        }, # node\n        \"airFMModBlwr1TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModBlwr1Table. \"\"\",\n        }, # scalar\n        \"airFMModBlwr1Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModBlwr1Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModBlwr1ModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModBlwr1ModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModBlwr1CtrlType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fujiVFD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ecController\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"danfossVFD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of blower controller.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1CmdFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The requested operating frequency for the blower.\nMeasured in tenths of hertz.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ActFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency at which the blower controller is \noperating.  Measured in tenths of hertz.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1Poles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of poles of the blower motor that the \nblower controller is controlling.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1RatedHorsePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power rating of the blower motor.  Measured in \nhundredths of horsepower.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1RatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating of the blower motor.  Measured in\nhundredths of amps.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ActTorq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual torque of the blower motor.  Measured in \nhundredths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1Current\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percent of rated current drawn by the blower \nmotor.  Measured in hundredths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1Vlt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage supplied to the blower motor.  Measured \nin tenths of volts RMS.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1DCLinkVlt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage of the blower controller's DC bus.  \nMeasured in volts DC.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1AccTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time to accelerate the blower to the specified \nfrequency.  Measured in tenths of seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1DecTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time to decelerate the blower frequency to zero.\nMeasured in tenths of seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1CapLife\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remaining life of the main circuit capacitor. \nMeasured in tenths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1CtrlCoolFanLife\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total operation time of the blower controller \ncooling fan.  Measured in hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ElOvMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enables or disables the electronic overload relay.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ElOvSetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The electronic overload relay is activated when the \ncurrent exceeds this threshold.  Measured in \nhundredths of amps.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ElOvTimeConst\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The delay between the current exceeding the overload \nthreshold and the activation of the electronic \noverload relay.  Measured in tenths of minutes.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1FanPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual power of the blower motor.  Measured in \ntenths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1HeatsinkTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the heatsink on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1HeatsinkTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the heatsink on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ChokeTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the choke on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1ChokeTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the choke on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1InverterTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the inverter on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr1InverterTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.6.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the inverter on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlower2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7\",\n        }, # node\n        \"airFMModBlwr2TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModBlwr2Table. \"\"\",\n        }, # scalar\n        \"airFMModBlwr2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModBlwr2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModBlwr2ModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModBlwr2ModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModBlwr2CtrlType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fujiVFD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ecController\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"danfossVFD\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of blower controller.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2CmdFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The requested operating frequency for the blower.\nMeasured in tenths of hertz.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ActFreq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency at which the blower controller is \noperating.  Measured in tenths of hertz.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2Poles\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of poles of the blower motor that the \nblower controller is controlling.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2RatedHorsePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power rating of the blower motor.  Measured in \nhundredths of horsepower.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2RatedCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating of the blower motor.  Measured in\nhundredths of amps.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ActTorq\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual torque of the blower motor.  Measured in \nhundredths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2Current\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The percent of rated current drawn by the blower \nmotor.  Measured in hundredths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2Vlt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage supplied to the blower motor.  Measured \nin tenths of volts RMS.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2DCLinkVlt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage of the blower controller's DC bus.  \nMeasured in volts DC.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2AccTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time to accelerate the blower to the specified \nfrequency.  Measured in tenths of seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2DecTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time to decelerate the blower frequency to zero.\nMeasured in tenths of seconds.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2CapLife\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remaining life of the main circuit capacitor. \nMeasured in tenths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2CtrlCoolFanLife\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total operation time of the blower controller \ncooling fan.  Measured in hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ElOvMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enables or disables the electronic overload relay.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ElOvSetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The electronic overload relay is activated when the \ncurrent exceeds this threshold.  Measured in \nhundredths of amps.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ElOvTimeConst\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The delay between the current exceeding the overload \nthreshold and the activation of the electronic \noverload relay.  Measured in tenths of minutes.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2FanPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual power of the blower motor.  Measured in \ntenths of percent.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2HeatsinkTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the heatsink on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2HeatsinkTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the heatsink on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ChokeTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the choke on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2ChokeTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the choke on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2InverterTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the inverter on the blower \ncontroller.  Measured in degrees Celsius.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModBlwr2InverterTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.7.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the inverter on the blower \ncontroller.  Measured in degrees Fahrenheit.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8\",\n        }, # node\n        \"airFMModRHTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModRHTable. \"\"\",\n        }, # scalar\n        \"airFMModRHTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModRHEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModRHModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModRHModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModRHComp1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 1 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHComp2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 2 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHHeater\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Heater run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier run hours\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwr1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Blower 1 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwr2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Blower 2 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwrCtrl1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Blower Controller 1 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwrCtrl2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Blower Controller 2 run hours.\nA value of -2147483648 indicates that this OID \ndoes not apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHComp1Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the compressor 1 run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHComp2Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the compressor 2 run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHHeaterReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the heater run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHHumReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the humidifier run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwr1Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower 1 run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModRHBlwr2Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.8.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower 2 run hours.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9\",\n        }, # node\n        \"airFMModServIntComp1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor compressor 1. Values stored in increments of 100 \nhours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntComp2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor compressor 2. Values stored in increments of 100 \nhours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntHeater\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor the reheat components. Values stored in \nincrements of 100 hours. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntHum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor the humidifier. Values stored in increments of \n100 hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntBlwr1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor blower 1. Values stored in increments of 100 \nhours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntBlwr2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor blower 2. Values stored in increments of 100 \nhours. \nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntBlwrCtrl1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor blower controller 1. Values stored in increments \nof 100 hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntBlwrCtrl2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.9.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The interval at which to generate a maintenance alarm \nfor blower controller 2. Values stored in increments \nof 100 hours.\nA value of -2147483648 indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # scalar\n        \"airFMModServIntResets\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10\",\n        }, # node\n        \"airFMModServIntResetTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the airFMModServIntTable. \"\"\",\n        }, # scalar\n        \"airFMModServIntResetTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each module in \nthe system. \"\"\",\n        }, # table\n        \"airFMModServIntResetEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMModServIntResetModuleIndex\",\n            ],\n            \"description\" :\n                \"\"\"The module to get information from.\"\"\",\n        }, # row\n        \"airFMModServIntResetModuleIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the module.\"\"\",\n        }, # column\n        \"airFMModServIntComp1Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the compressor 1 service interval maintenance \nalarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntComp2Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the compressor 2 service interval maintenance \nalarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntHeaterReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the heater service interval maintenance alarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntHumReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the humidifier service interval maintenance \nalarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntBlwr1Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower 1 service interval maintenance \nalarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntBlwr2Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower 2 service interval maintenance \nalarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntBlwrCtrl1Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower controller 1 service interval \nmaintenance alarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMModServIntBlwrCtrl2Reset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.5.10.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset the blower controller 2 service interval \nmaintenance alarm.\nGetting this OID will do nothing and return the \nnoOperation value.\nA value of notApplicable indicates that this OID does \nnot apply to this device due to its configuration.\"\"\",\n        }, # column\n        \"airFMAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6\",\n        }, # node\n        \"airFMAlarmClearActiveGroupAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clearAlarms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear active group alarms.  If alarm conditions are \nstill present, new alarms will be generated for those \nconditions.\nGetting this OID will do nothing and return the \nnoOperation value.\"\"\",\n        }, # scalar\n        \"airFMAlarmClearActiveSysModAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clearAlarms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clear active system and module alarms.  If alarm \nconditions are still present, new alarms will be \ngenerated for those conditions.\nGetting this OID will do nothing and return the \nnoOperation value.\"\"\",\n        }, # scalar\n        \"airFMAlarmConditionsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active alarm conditions in the \nairFMAlarmConditionTable.\"\"\",\n        }, # scalar\n        \"airFMAlarmConditionsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of active alarm conditions for the device.\"\"\",\n        }, # table\n        \"airFMAlarmConditionsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airFMAlarmConditionsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Alarm condition specification\"\"\",\n        }, # row\n        \"airFMAlarmConditionsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm condition index.\"\"\",\n        }, # column\n        \"airFMAlarmSeverity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"informational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warningMinor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"criticalMajor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Severity of the alarm.\"\"\",\n        }, # column\n        \"airFMAlarmType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"group\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"system\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"mainMod\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"expMod1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"expMod2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of alarm.\"\"\",\n        }, # column\n        \"airFMEventCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"APC event code for the alarm.\"\"\",\n        }, # column\n        \"airFMAlarmDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date the alarm was recorded.\"\"\",\n        }, # column\n        \"airFMAlarmTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time the alarm was recorded.\"\"\",\n        }, # column\n        \"airFMAlarmDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.1.6.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the alarm.\"\"\",\n        }, # column\n        \"airPA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2\",\n        }, # node\n        \"airPAIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1\",\n        }, # node\n        \"airPAIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device name.\"\"\",\n        }, # scalar\n        \"airPAModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device model number.\"\"\",\n        }, # scalar\n        \"airPADateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying when the device was produced.\"\"\",\n        }, # scalar\n        \"airPASerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device serial number.\"\"\",\n        }, # scalar\n        \"airPAFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device firmware revision.\"\"\",\n        }, # scalar\n        \"airPAHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device hardware revision.\"\"\",\n        }, # scalar\n        \"airPAStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2\",\n        }, # node\n        \"airPASystemPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powerON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the unit's system power setting.\n\nON(1)   The system power is turned on.\nOFF(2)  The system power is turned off. \"\"\",\n        }, # scalar\n        \"airPAOperatingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"modeOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"modeVENTING\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"modeCOOLING\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operating mode of the unit.\n\nOFF(1)      The system is off.\nVENTING(2)  The system's venting function is active.\nCOOLING(3)  The system's cooling function is active. \"\"\",\n        }, # scalar\n        \"airPASetpointTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature setpoint in Fahrenheit to which the unit is controlling. \"\"\",\n        }, # scalar\n        \"airPASetpointTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature setpoint in Celsius to which the unity is controlling. \"\"\",\n        }, # scalar\n        \"airPABlowerSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"speedLOW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"speedHIGH\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit's blower speed setting.\n\nLOW(1)      The blower speed is low.\nHIGH(2)     The blower speed is high. \"\"\",\n        }, # scalar\n        \"airPACompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit's compressor status.\n\nON(1)   The compressor is turned on.\nOFF(2)  The compressor is turned off. \"\"\",\n        }, # scalar\n        \"airPACondenserFan\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit's condenser fan status.\n\nON(1)   The condenser fan is turned on.\nOFF(2)  The condenser fan is turned off. \"\"\",\n        }, # scalar\n        \"airPACondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"statusON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"statusOFF\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit's condensate pump status.\n\nON(1)   The condensate pump is turned on.\nOFF(2)  The condensate pump is turned off. \"\"\",\n        }, # scalar\n        \"airPASupplyTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The supply temperature in degrees Fahrenheit. \"\"\",\n        }, # scalar\n        \"airPASupplyTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The supply temperature in degrees Celsius. \"\"\",\n        }, # scalar\n        \"airPAReturnTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The return temperature in degrees Fahrenheit. \"\"\",\n        }, # scalar\n        \"airPAReturnTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The return temperature in degrees Celsius. \"\"\",\n        }, # scalar\n        \"airPARemoteTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote temperature in degrees Fahrenheit. \"\"\",\n        }, # scalar\n        \"airPARemoteTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote temperature in degrees Celsius. \"\"\",\n        }, # scalar\n        \"airPARemoteHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.2.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The remote humidity. \"\"\",\n        }, # scalar\n        \"airIR\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3\",\n        }, # node\n        \"airIRAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1\",\n        }, # node\n        \"airIRAlarmConditionsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active alarm conditions in the airIRAlarmConditionTable.\"\"\",\n        }, # scalar\n        \"airIRAlarmConditionsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of active alarm conditions for the device.\"\"\",\n        }, # table\n        \"airIRAlarmConditionsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRAlarmConditionsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Alarm condition specification\"\"\",\n        }, # row\n        \"airIRAlarmConditionsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm condition index.\"\"\",\n        }, # column\n        \"airIREventCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Code for the alarm.\"\"\",\n        }, # column\n        \"airIRAlarmDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the alarm.\"\"\",\n        }, # column\n        \"airIRRC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2\",\n        }, # node\n        \"airIRRCGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1\",\n        }, # node\n        \"airIRRCGroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1\",\n        }, # node\n        \"airIRRCGroupStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant output in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant demand in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in liters per second.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCGroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2\",\n        }, # node\n        \"airIRRCGroupSetpointsCoolUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpointsCoolMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpointsSupplyAirUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpointsSupplyAirMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpointsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"med-low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"med\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"med-high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRRCGroupSetpointsFanSpeedControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fan speed control setting.\nAutomatic(1) - controller manages fan speed.\nManual(2) - fan speed is fixed and set by the fan speed preference.\nSee airIRRCGroupSetpointsFanSpeedPreference.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3\",\n        }, # node\n        \"airIRRCGroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units present in the group.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"racs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"in-row\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigPctGlycol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The glycol mixture in percent.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigCoolGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigCoolResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigCoolDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRCGroupConfigMaxFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum desired fan speed setting in percent.\"\"\",\n        }, # scalar\n        \"airIRRCUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2\",\n        }, # node\n        \"airIRRCUnitIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1\",\n        }, # node\n        \"airIRRCUnitIdentID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit identification number.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit name.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit location.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit model number.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit serial number.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit firmware version.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRRCUnitIdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2\",\n        }, # node\n        \"airIRRCUnitStatusOperateMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling unit operating mode.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling output in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling demand in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusSupplyAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusSupplyAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusContainmtDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusContainmtDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFilterDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFilterDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusActivePowerSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power source that is powering the unit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFluidValvePosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid valve position in percent open.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFluidFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid flow in tenths of gallons per minute.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusFluidFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid flow in hundredths of liters per second.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusEnteringFluidTemperatureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the entering fluid in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusEnteringFluidTemperatureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the entering fluid in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusLeavingFluidTemperatureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the Leaving fluid in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitStatusLeavingFluidTemperatureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the Leaving fluid in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3\",\n        }, # node\n        \"airIRRCUnitRunHoursAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit air filter run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 1 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 2 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 3 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan4\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 4 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan5\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 5 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan6\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 6 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan7\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 7 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFan8\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 8 run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFanPowerSupplyLeft\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan left power supply run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursFanPowerSupplyRight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan right power supply run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitRunHoursCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensate pump run hours.\"\"\",\n        }, # scalar\n        \"airIRRCUnitServiceIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.4\",\n        }, # node\n        \"airIRRCUnitServiceIntervalsAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air filter service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRCUnitServiceIntervalsAirFilterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The air filter service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5\",\n        }, # node\n        \"airIRRCUnitThresholdsRackInletHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsRackInletHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsSupplyAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsSupplyAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsReturnAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsReturnAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsEnteringFluidHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit entering fluid high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitThresholdsEnteringFluidHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit incoming fluid high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6\",\n        }, # node\n        \"airIRRCUnitConfigCoolCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maximum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The cooling capacity options setting.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The startup delay in seconds.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigIdleOnLeakDetect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on leak options setting.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigPowerSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sourceAandB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configured power source of the unit.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigOutputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source of output relay change.\"\"\",\n        }, # scalar\n        \"airIRRCUnitConfigIdleOnCoolFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.2.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on cool fail options setting.\nIf yes, the system will go into idle mode \nwhen a cooling failure is detected.\nIf no, the system will not go into idle mode \nwhen a cooling failure is detected. \"\"\",\n        }, # scalar\n        \"airIRRP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3\",\n        }, # node\n        \"airIRRP100\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1\",\n        }, # node\n        \"airIRRP100Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1\",\n        }, # node\n        \"airIRRP100GroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1\",\n        }, # node\n        \"airIRRP100GroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in liters per second.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant demand in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant output in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusHumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of humidification the group is demanding \nfrom the humidifiers in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusHumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of humidification the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusDehumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of dehumidification the group is demanding \nfrom the electric heaters in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusDehumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of dehumidification the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusReheatDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of heating the group is demanding \nfrom the electric heaters in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupStatusReheatOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of heating the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2\",\n        }, # node\n        \"airIRRP100GroupSetpointsCoolUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsCoolMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsSupplyAirUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsSupplyAirMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsHumidify\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group humidify setpoint in tenths of\npercent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsDehumidify\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group dehumidify setpoint in tenths of\npercent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsDehumidifyDeadband\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group dehumidify deadband in percent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsReheatUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsReheatMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"med-low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"med\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"med-high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupSetpointsFanSpeedControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fan speed control setting.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3\",\n        }, # node\n        \"airIRRP100GroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units present in the group.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"racs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"in-row\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigCoolGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigCoolResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigCoolDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigHumidifySensitivityBand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative humidity below the setpoint that \nwill cause the humidifier to run at 100% capacity.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigReheatGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigReheatResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100GroupConfigReheatDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.1.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP100Unit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2\",\n        }, # node\n        \"airIRRP100UnitIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1\",\n        }, # node\n        \"airIRRP100UnitIdentID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit identification number.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit name.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit location.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit model number.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit serial number.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit firmware version.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitIdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2\",\n        }, # node\n        \"airIRRP100UnitStatusOperateMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling unit operating mode.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusSupplyAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusSupplyAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusSupplyHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity of the supply air in\ntenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusReturnHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity of the return air in\ntenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling demand in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling output in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusHumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of humidification the unit is demanding \nfrom the humidifier in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusHumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual humidification output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusDehumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of dehumidification the unit is \ndemanding in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusDehumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual dehumidification output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusReheatDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of heating the unit is demanding \nfrom the electric heater in percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusReheatOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual heating output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature1US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature1Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature2US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature2Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature3US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusRackInletTemperature3Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusFilterDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusFilterDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusContainmtDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusContainmtDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusHumidifierCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidifier current of the unit\nin amperes.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusHumidifierWaterConductivity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The water conductivity in the humidifier of the unit\nin microSiemens/cm.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The compressor drive speed in hundredths of Hertz.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDrivePower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The compressor drive power consumption in \ntenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The compressor drive voltage consumption in \ntenths of volts.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The compressor drive voltage consumption in \ntenths of amperes.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveDCLinkVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The compressor drive DC link voltage in \ntenths of volts.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveHeatSinkTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the compressor drive heatsink\nin tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveHeatSinkTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the compressor drive heatsink\nin tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveControlCardTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the compressor drive control card\nin tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveControlCardTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the compressor drive control card\nin tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveWarningStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The four byte warning status of the compressor drive \nin hexadecimal.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusCompressorDriveAlarmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The four byte alarm status of the compressor drive \nin hexadecimal.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusSuctionPressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusSuctionPressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusDischargePressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRRP100UnitStatusDischargePressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.2.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3\",\n        }, # node\n        \"airIRRP100UnitRunHoursAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit air filter run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensate pump run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursHumidifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan right power supply run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursFan1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 1 run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursHeater1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit heater 1 run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursFan2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 2 run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursHeater2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit Heater 2 run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitRunHoursCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit compressor run hours.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4\",\n        }, # node\n        \"airIRRP100UnitServiceIntervalAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air filter service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalAirFilterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The air filter service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalHumidifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalHumidifierAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidifier service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalHeater\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Heater service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalHeaterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The heater service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalCompressorAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The compressor service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Condensate pump service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalCondensatePumpAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The condensate pump service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalFans\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fans service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitServiceIntervalFansAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fans service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5\",\n        }, # node\n        \"airIRRP100UnitThresholdsRackInletHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsRackInletHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsSupplyAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsSupplyAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsReturnAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsReturnAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsSupplyHumidityHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply humidity high threshold in \ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitThresholdsSupplyHumidityLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply humidity low threshold in \ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6\",\n        }, # node\n        \"airIRRP100UnitConfigStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The startup delay in seconds.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigCoolCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maximum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The cooling capacity options setting.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigIdleOnLeakDetect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on leak options setting.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigOutputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source of output relay change.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigHumidifyEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable humidification.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigHumidifierControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"drainOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidifier drain control.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigDehumidifyEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable dehumidification.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigReheatEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable reheat.\"\"\",\n        }, # scalar\n        \"airIRRP100UnitConfigHeatAssistEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.1.2.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable heat assist.\"\"\",\n        }, # scalar\n        \"airIRRP500\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2\",\n        }, # node\n        \"airIRRP500Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1\",\n        }, # node\n        \"airIRRP500GroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1\",\n        }, # node\n        \"airIRRP500GroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group air flow in liters per second.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group maximum rack inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group minimum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant demand in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Group coolant output in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusHumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of humidification the group is demanding \nfrom the humidifiers in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusHumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of humidification the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusDehumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of dehumidification the group is demanding \nfrom the electric heaters in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusDehumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of dehumidification the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusReheatDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of heating the group is demanding \nfrom the electric heaters in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupStatusReheatOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual amount of heating the group is \nsupplying in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2\",\n        }, # node\n        \"airIRRP500GroupSetpointsCoolUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsCoolMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsSupplyAirUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsSupplyAirMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsHumidify\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group humidify setpoint in tenths of\npercent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsDehumidify\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group dehumidify setpoint in tenths of\npercent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsDehumidifyDeadband\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group dehumidify deadband in \npercent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsReheatUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsReheatMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"med-low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"med\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"med-high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupSetpointsFanSpeedControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fan speed control setting.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3\",\n        }, # node\n        \"airIRRP500GroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"racs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"in-row\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigPercentGlycol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The glycol mixture in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigCoolGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigCoolResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigCoolDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the cool PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigHumidifySensitivityBand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative humidity below the setpoint that\nwill cause the humidifier to run at 100% capacity.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigReheatGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigReheatResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500GroupConfigReheatDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.1.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the reheat PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRRP500Unit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2\",\n        }, # node\n        \"airIRRP500UnitIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1\",\n        }, # node\n        \"airIRRP500UnitIdentID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit identification number.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit name.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit location.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit model number.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit serial number.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit firmware version.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitIdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2\",\n        }, # node\n        \"airIRRP500UnitStatusOperateMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling unit operating mode.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusMaximumRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum unit rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusMaximumRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum unit rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusSupplyAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusSupplyAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusSupplyHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity of the supply air in\ntenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusReturnHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity of the return air in\ntenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling demand in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling output in tenths of kiloWatts.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusHumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of humidification the unit is demanding \nfrom the humidifier in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusHumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual humidification output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusDehumidifyDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of dehumidification the unit is \ndemanding in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusDehumidifyOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual dehumidification output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusReheatDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of heating the unit is demanding \nfrom the electric heater in percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusReheatOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The actual heating output of the unit\nin percent.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature1US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature1Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature2US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature2Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature3US\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusRackInletTemperature3Metric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature sensor in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusContainmtDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusContainmtDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFilterDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFilterDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusHumidifierCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The humidifier current of the unit\nin amperes.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusHumidifierWaterConductivity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The water conductivity in the humidifier of the unit\nin microSiemens/cm.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusActivePowerSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sourceB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power source that is powering the unit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFluidValvePosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid valve position in percent open.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFluidFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid flow in tenths of gallons per minute.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusFluidFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The fluid flow in hundredths of liters per second.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusEnteringFluidTemperatureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the entering fluid in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusEnteringFluidTemperatureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the entering fluid in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusLeavingFluidTemperatureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the Leaving fluid in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitStatusLeavingFluidTemperatureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.2.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature of the Leaving fluid in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3\",\n        }, # node\n        \"airIRRP500UnitRunHoursAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit air filter run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensate pump run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursHumidifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan right power supply run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursFan1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 1 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursHeater1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit heater 1 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursFan2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 2 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursHeater2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit Heater 2 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursFan3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan 3 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitRunHoursHeater3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit heater 3 run hours in hours.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4\",\n        }, # node\n        \"airIRRP500UnitServiceIntervalAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air filter service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalAirFilterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The air filter service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalHumidifier\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalHumidifierAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidifier service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalHeater\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Heater service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalHeaterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The heater service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Condensate pump service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalCondensatePumpAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The condensate pump service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalFans\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fans service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitServiceIntervalFansAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The fans service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5\",\n        }, # node\n        \"airIRRP500UnitThresholdsRackInletHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsRackInletHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsSupplyAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air temperature high threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsSupplyAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature high threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsReturnAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsReturnAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsSupplyHumidityHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply humidity high threshold in \ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsSupplyHumidityLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply humidity low threshold in \ntenths of percent relative humidity.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsEnteringFluidHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Entering fluid high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitThresholdsEnteringFluidHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Entering fluid high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6\",\n        }, # node\n        \"airIRRP500UnitConfigStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The startup delay in seconds.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigCoolCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"maximum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The cooling capacity options setting.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigIdleOnLeakDetect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on leak options setting.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigOutputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source of output relay change.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigHumidifyEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable humidification.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigHumidifierControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"drainOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The humidifier drain control.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigDehumidifyEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable dehumidification.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigReheatEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable reheat.\"\"\",\n        }, # scalar\n        \"airIRRP500UnitConfigHeatAssistEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.3.2.2.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable heat assist.\"\"\",\n        }, # scalar\n        \"airIRSC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4\",\n        }, # node\n        \"airIRSCUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1\",\n        }, # node\n        \"airIRSCUnitIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1\",\n        }, # node\n        \"airIRSCUnitIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit name.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit location.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit model number.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit serial number.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit firmware version.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRSCUnitIdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the  \nunit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2\",\n        }, # node\n        \"airIRSCUnitStatusOperateMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling unit operating mode.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling output in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling demand in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSupplyAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSupplyAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuctionTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit suction temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuctionTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit suction temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuperheatTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit superheat temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuperheatTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit superheat temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusContainmtDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusContainmtDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit containment differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusFilterDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusFilterDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in Pa.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuctionPressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusSuctionPressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusDischargePressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusDischargePressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusEvaporatorFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average evaporator fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCondenserFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average condenser fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCondOutletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit condenser outlet air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCondOutletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit condenser outlet air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCondInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit condenser inlet air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCondInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit condenser inlet air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitStatusCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.2.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state (off/on) of the compressor.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3\",\n        }, # node\n        \"airIRSCUnitRunHoursAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit air filter run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursEvaporatorFan1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporator fan 1 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursEvaporatorFan2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporator fan 2 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursEvaporatorFan3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporator fan 3 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursCondenserFan1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condenser fan 1 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursCondenserFan2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condenser fan 2 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursCondenserFan3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condenser fan 3 run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursFanPowerSupplyLeft\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan left power supply run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursFanPowerSupplyRight\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit fan right power supply run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensate pump run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitRunHoursCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit compressor run hours.\"\"\",\n        }, # scalar\n        \"airIRSCUnitServiceIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.4\",\n        }, # node\n        \"airIRSCUnitServiceIntervalsAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air filter service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRSCUnitServiceIntervalsAirFilterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The air filter service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5\",\n        }, # node\n        \"airIRSCUnitThresholdsRackInletHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholdsRackInletHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholdsSupplyAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholdsSupplyAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholdsReturnAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitThresholdsReturnAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6\",\n        }, # node\n        \"airIRSCUnitSetptsCoolSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsCoolSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsCoolDeadbandUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit cooling deadband in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsCoolDeadbandMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit cooling deadband in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCFanSpeedPreference\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsSupplyAirSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCUnitSetptsSupplyAirSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7\",\n        }, # node\n        \"airIRSCUnitConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCConfigType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit configuration type.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigCapacityControlType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCCapacityControlType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit capacity control.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The startup delay in seconds.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigIdleOnLeakDetect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on leak options setting.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigOutputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source of output relay change.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigAltitudeUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The altitude of the unit above sea level in feet.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigAltitudeMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The altitude of the unit above sea level in meters.\"\"\",\n        }, # scalar\n        \"airIRSCUnitConfigOpControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.1.7.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit operational control.\"\"\",\n        }, # scalar\n        \"airIRSCGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2\",\n        }, # node\n        \"airIRSCGroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1\",\n        }, # node\n        \"airIRSCGroupStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling output in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling demand in tenths of kW.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMaxReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMaxReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMinReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupStatusMinReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2\",\n        }, # node\n        \"airIRSCGroupSetptsCoolSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsCoolSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsCoolDeadbandUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsCoolDeadbandMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCFanSpeedPreference\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsSupplyAirSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRSCGroupSetptsSupplyAirSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3\",\n        }, # node\n        \"airIRSCGroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCConfigType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfigCapacityControlType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCCapacityControlType\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group capacity control.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfigAltitudeUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group altitude of the units above sea level in feet.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfigAltitudeMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group altitude of the units above sea level in meters.\"\"\",\n        }, # scalar\n        \"airIRSCGroupConfigFanSpeedControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.3.4.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRSCFanSpeedControl\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group fan speed control.\"\"\",\n        }, # scalar\n        \"airIRGen2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4\",\n        }, # node\n        \"airIRG2Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1\",\n        }, # node\n        \"airIRG2IdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit name.\"\"\",\n        }, # scalar\n        \"airIRG2IdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit location.\"\"\",\n        }, # scalar\n        \"airIRG2IdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit model number.\"\"\",\n        }, # scalar\n        \"airIRG2IdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit serial number.\"\"\",\n        }, # scalar\n        \"airIRG2IdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit firmware version.\"\"\",\n        }, # scalar\n        \"airIRG2IdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRG2IdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRG2IdentUnitSysOID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the device's top level unit data.\"\"\",\n        }, # scalar\n        \"airIRG2IdentGroupSysOID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the device's top level group data.\"\"\",\n        }, # scalar\n        \"airIRG2Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2\",\n        }, # node\n        \"airIRG2GroupStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1\",\n        }, # node\n        \"airIRG2GroupStatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling output in tenths of kilowatts (kW).\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling demand in tenths of kilowatts (kW).\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMaxReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMaxReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMinReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupStatusMinReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2\",\n        }, # node\n        \"airIRG2GroupSetptsCoolSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsCoolSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsCoolDeadbandUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsCoolDeadbandMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsFanSpeedPreference\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"med-low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"med\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"med-high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group preferred fan speed setting.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsSupplyAirSetpointUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2GroupSetptsSupplyAirSetpointMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3\",\n        }, # node\n        \"airIRG2GroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigConfigurationType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"racs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"spot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"in-row\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"hacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigCapacityControlType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"discrete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group capacity control.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigFanSpeedControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group fan speed control.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigCoolGainP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigCoolResetRateI\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigCoolDerivativeD\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the PID in hundredths.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigCoolPIDReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"readBack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Will reset the PID coefficients back to the factory defaults.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigNumberofBackupUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of backup units.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigRuntimeBalancingEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable runtime balancing feature.\"\"\",\n        }, # scalar\n        \"airIRG2GroupConfigLoadAssistEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.2.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable load assist feature.\"\"\",\n        }, # scalar\n        \"airIRG2Alarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3\",\n        }, # node\n        \"airIRG2AlarmsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active alarms in the airIRG2AlarmsTable.\"\"\",\n        }, # scalar\n        \"airIRG2AlarmsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of active alarms for the device.\"\"\",\n        }, # table\n        \"airIRG2AlarmsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG2AlarmsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Alarms specification\"\"\",\n        }, # row\n        \"airIRG2AlarmsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm index.\"\"\",\n        }, # column\n        \"airIRG2AlarmsEventCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Code for the alarm.\"\"\",\n        }, # column\n        \"airIRG2AlarmsDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the alarm.\"\"\",\n        }, # column\n        \"airIRG2RC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.4\",\n        }, # node\n        \"airIRG2RD\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5\",\n        }, # node\n        \"airIRG2RDType1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.1\",\n        }, # node\n        \"airIRG2RDType2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2\",\n        }, # node\n        \"airIRG2RDT2Status\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1\",\n        }, # node\n        \"airIRG2RDT2StatusOperateMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"reserved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"service\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling unit operating mode.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusCoolOutput\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling output in tenths of kilowatts (kW).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusCoolDemand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit cooling demand in tenths of kilowatts (kW).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusAirFlowUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in cubic feet per minute.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusAirFlowMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air flow in hundredths of \nliters per second.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusRackInletTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusRackInletTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit rack inlet temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSupplyAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSupplyAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit supply air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusReturnAirTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit return air temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuctionTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit suction temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuctionTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit suction temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuperheatTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit superheat temperature in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuperheatTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit superheat temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusFilterDPUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in \nhundredths of inches of water.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusFilterDPMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit air filter differential pressure in pascals (Pa).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuctionPressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusSuctionPressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit suction pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusDischargePressureUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in pounds per square inch (PSI).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusDischargePressureMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit discharge pressure in kiloPascals (kPa).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusEvaporatorFanSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit average evaporator fan speed in tenths of percent.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusOHEInputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the outside heat exchanger(OHE) input contact.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusOHEOutputState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the outside heat exchanger(OHE) output relay.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state (off/on) of the compressor.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusFluidValvePos\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the fluid valve in percent. This OID is only valid\nwhen airIRG2RDT2ConfigUnitType indicates fluidCooled(1).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2StatusHotGasBypassValvePos\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the hot gas bypass valve in hundredths of percent.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHours\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2\",\n        }, # node\n        \"airIRG2RDT2RunHoursAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit air filter run hours.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHoursCondensatePump\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensate pump run hours.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHoursCompressor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit compressor run hours.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHoursFanPSTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the run hour fan power supply table\n(airIRG2RDT2RunHoursFanPSTable).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHoursFanPSTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting run hour information from each power supply.\"\"\",\n        }, # table\n        \"airIRG2RDT2RunHoursFanPSEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG2RDT2RunHoursFanPSIndex\",\n            ],\n            \"description\" :\n                \"\"\"The run hours fan power supply table entry.\"\"\",\n        }, # row\n        \"airIRG2RDT2RunHoursFanPSIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of run hours fan power supply table.\"\"\",\n        }, # column\n        \"airIRG2RDT2RunHoursFanPSHours\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan power supply run time in hours.\"\"\",\n        }, # column\n        \"airIRG2RDT2RunHoursFanPSPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upper\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"left\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"right\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Position of fan power supply within the unit.\"\"\",\n        }, # column\n        \"airIRG2RDT2RunHoursEvapFanTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the run hour evaporator fan table\n(airIRG2RDT2RunHoursEvapFanTable).\"\"\",\n        }, # scalar\n        \"airIRG2RDT2RunHoursEvapFanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each evaporator fan run\nhour in the system. \"\"\",\n        }, # table\n        \"airIRG2RDT2RunHoursEvapFanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG2RDT2RunHoursEvapFanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Allows for getting information from each evaporator fan run\nhour in the system. \"\"\",\n        }, # row\n        \"airIRG2RDT2RunHoursEvapFanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of run hours evaporator fan table.\"\"\",\n        }, # column\n        \"airIRG2RDT2RunHoursEvapFanHours\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Evaporator fan run time in hours.\"\"\",\n        }, # column\n        \"airIRG2RDT2RunHoursUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit run time in hours.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ServiceIntervals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.3\",\n        }, # node\n        \"airIRG2RDT2ServiceIntervalsAirFilter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air filter service interval in weeks.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ServiceIntervalsAirFilterAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The air filter service interval alarm enable/disable.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2Thresholds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4\",\n        }, # node\n        \"airIRG2RDT2ThresholdsRackInletHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ThresholdsRackInletHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit rack inlet air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ThresholdsSupplyAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ThresholdsSupplyAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit supply air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ThresholdsReturnAirHighTempUS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ThresholdsReturnAirHighTempMetric\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit return air high temperature threshold in \ntenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2Setpoints\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.5\",\n        }, # node\n        \"airIRG2RDT2Config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6\",\n        }, # node\n        \"airIRG2RDT2ConfigUnitType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fluidCooled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"airCooled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the unit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigStartupDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The startup delay in seconds.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigIdleOnLeakDetect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle on leak options setting.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input contact.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigOutputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the output relay.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"criticalAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The source of output relay change.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigOHEInputNormalState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRG2RDType2IOState\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the outside heat exchanger(OHE) input relay.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigUnitRoleOverride\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"forcedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this OID value is (1) automatic, the system determines\nwhich units are used as primary units and which units are used as backups.\nWhen this OID value is (2) forcedOn, the connected unit is set as a primary\nunit.\"\"\",\n        }, # scalar\n        \"airIRG2RDT2ConfigUnitIdleOnCoolFail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.5.2.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When this OID value is (2) yes, the unit idles if it detects that it is blowing warm \nair into the cold aisle.  The unit will attempt to restart at 5 minute intervals.\"\"\",\n        }, # scalar\n        \"airIRG2SC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.6\",\n        }, # node\n        \"airIRG2RA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.4.7\",\n        }, # node\n        \"airInRoom\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5\",\n        }, # node\n        \"airIRmIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1\",\n        }, # node\n        \"airIRmIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit name.\"\"\",\n        }, # scalar\n        \"airIRmIdentLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit location.\"\"\",\n        }, # scalar\n        \"airIRmIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit model number.\"\"\",\n        }, # scalar\n        \"airIRmIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit serial number.\"\"\",\n        }, # scalar\n        \"airIRmIdentFirmwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit firmware version.\"\"\",\n        }, # scalar\n        \"airIRmIdentHardwareRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit controller hardware revision.\"\"\",\n        }, # scalar\n        \"airIRmIdentManufactureDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit manufacture date.\"\"\",\n        }, # scalar\n        \"airIRmIdentSysOID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the device's top level data.\"\"\",\n        }, # scalar\n        \"airIRmAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2\",\n        }, # node\n        \"airIRmAlarmsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active alarms in the airIRG2AlarmsTable.\"\"\",\n        }, # scalar\n        \"airIRmAlarmsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of active alarms for the device.\"\"\",\n        }, # table\n        \"airIRmAlarmsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRmAlarmsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Alarms specification\"\"\",\n        }, # row\n        \"airIRmAlarmsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm index.\"\"\",\n        }, # column\n        \"airIRmAlarmsEventCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Code for the alarm.\"\"\",\n        }, # column\n        \"airIRmAlarmsDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the alarm.\"\"\",\n        }, # column\n        \"airIRmPerimeter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3\",\n        }, # node\n        \"airIRmPmCommon1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2\",\n        }, # node\n        \"airIRmPmUnitType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"mc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"ecoCool\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"msc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"ge1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"ge2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"dualFluid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"cw2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"256\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit type (1).\"\"\",\n        }, # scalar\n        \"airIRmPmSwVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Software version (3).\"\"\",\n        }, # scalar\n        \"airIRmPmBusAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Bus addresss of unit (5).\"\"\",\n        }, # scalar\n        \"airIRmPmControllerType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"c4000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"c1001\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"c1002\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"c5000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"c6000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"c1010\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"c7000IOC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"c7000AT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"c7000PT\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"c5MSC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"c7000PT2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Controller type (7).\"\"\",\n        }, # scalar\n        \"airIRmPmGeneralError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"General Error (8)\"\"\",\n        }, # scalar\n        \"airIRmPmErrorOnBus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Error On Bus (9)\"\"\",\n        }, # scalar\n        \"airIRmPmCommon2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3\",\n        }, # node\n        \"airIRmPmPCStop\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmStopState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PC-STOP (1000)\"\"\",\n        }, # scalar\n        \"airIRmPmRemoteStop\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmStopState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Remote Stop (1001)\"\"\",\n        }, # scalar\n        \"airIRmPmLocalStop\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmStopState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Local Stop (1002)\"\"\",\n        }, # scalar\n        \"airIRmPmTimerStop\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmStopState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timer Stop (1003)\"\"\",\n        }, # scalar\n        \"airIRmPmSeqStop\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmStopState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Seq. Stop (1004)\"\"\",\n        }, # scalar\n        \"airIRmPmRemoteUPS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Remote UPS (1006)\"\"\",\n        }, # scalar\n        \"airIRmPmLocalUPS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Local UPS (1007)\"\"\",\n        }, # scalar\n        \"airIRmPmCommonAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Common alarm (1010).\"\"\",\n        }, # scalar\n        \"airIRmPmResetAllAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"doNothing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset all alarms control (1011).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitOnOff\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit running state (1013).\"\"\",\n        }, # scalar\n        \"airIRmPmMaintenance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notNecessary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"necessary\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maintenance necessary state (1014).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitTemperatureScale\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Unit Temperature Scale (1022).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitWinterMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"summer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"winter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter or summer configuration mode (1023).\"\"\",\n        }, # scalar\n        \"airIRmPmDayNightMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.3.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"day\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"night\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Day or night configuration mode (1024).\"\"\",\n        }, # scalar\n        \"airIRmPmCommon3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4\",\n        }, # node\n        \"airIRmPmLastMaintenanceYear\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last maintenance year (1160).\"\"\",\n        }, # scalar\n        \"airIRmPmLastMaintenanceMonth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last maintenance month (1161).\"\"\",\n        }, # scalar\n        \"airIRmPmLastMaintenanceDay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last maintenance day (1162).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitMaintenanceInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit maintenance interval in months (1163).\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Runtime unit in hours (1164).\"\"\",\n        }, # scalar\n        \"airIRmPmStoptimeUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit stoptime in hours (1165)\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeCooling\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Cooling runtime in hours (1166)\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeHeating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Heating runtime in hours (1167)\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeHumidification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidification runtime in hours (1168)\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeDehumidification\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dehumidification runtime in hours (1169)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.11\",\n        }, # node\n        \"airIRmPmUnitTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit temperature in tenths of degrees Celsius (1170).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit temperature in tenths of degrees Fahrenheit (1170).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit humidity in tenths of %RH (1171).\"\"\",\n        }, # scalar\n        \"airIRmPmSetpointTemperatureDay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.14\",\n        }, # node\n        \"airIRmPmSetpointTemperatureDayC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.14.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setpoint daytime temperature in tenths\nof degrees Celsius (1173).\"\"\",\n        }, # scalar\n        \"airIRmPmSetpointTemperatureDayF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.14.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setpoint daytime temperature in tenths\nof degrees Fahrenheit (1173).\"\"\",\n        }, # scalar\n        \"airIRmPmSetpointTemperatureNight\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.15\",\n        }, # node\n        \"airIRmPmSetpointTemperatureNightC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.15.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setpoint nighttime temperature in tenths\nof degrees Celsius (1174).\"\"\",\n        }, # scalar\n        \"airIRmPmSetpointTemperatureNightF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setpoint nighttime temperature in tenths\nof degrees Fahrenheit (1174).\"\"\",\n        }, # scalar\n        \"airIRmPmSetpointHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setpoint humidity in tenths of %RH (1176).\"\"\",\n        }, # scalar\n        \"airIRmPmUnitControlType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"room\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"supply\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"room-SupplyLimit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"supply-RoomLimit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current unit control type (1183).\"\"\",\n        }, # scalar\n        \"airIRmPmWinterModeStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.29\",\n        }, # node\n        \"airIRmPmWinterModeStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.29.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter mode start temperature in tenths of degrees Celsius (1188).\"\"\",\n        }, # scalar\n        \"airIRmPmWinterModeStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.29.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter mode start temperature in tenths of degrees Fahrenheit (1188).\"\"\",\n        }, # scalar\n        \"airIRmPmWinterModeHysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.30\",\n        }, # node\n        \"airIRmPmWinterModeHysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.30.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter mode hysteresis in tenths of Kelvins (1189)\"\"\",\n        }, # scalar\n        \"airIRmPmWinterModeHysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.30.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter mode hysteresis in tenths of degrees Fahrenheit (1189)\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.32\",\n        }, # node\n        \"airIRmPmWaterTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.32.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature in tenths of degrees Celsius (1191).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.32.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature in tenths of degrees Fahrenheit (1191).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.33\",\n        }, # node\n        \"airIRmPmReturnAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.33.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air temperature in tenths of degrees Celsius (1192).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.33.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air temperature in tenths of degrees Fahrenheit (1192).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.34\",\n        }, # node\n        \"airIRmPmSupplyAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.34.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air temperature in tenths of degrees Celsius (1193).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.34.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air temperature in tenths of degrees Fahrenheit (1193).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air humidity in tenths of %RH (1194).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air humidity in tenths of %RH (1195).\"\"\",\n        }, # scalar\n        \"airIRmPmOutsideAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.37\",\n        }, # node\n        \"airIRmPmOutsideAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.37.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outside air temperature in tenths of degrees Celsius (1196)\"\"\",\n        }, # scalar\n        \"airIRmPmOutsideAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.37.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outside air temperature in tenths of degrees Fahrenheit (1196)\"\"\",\n        }, # scalar\n        \"airIRmPmOutsideAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Outside air humidity in tenths of percent relative humidity (1197)\"\"\",\n        }, # scalar\n        \"airIRmPmCoolingPriority\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Cooling priority (1198).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperature2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.43\",\n        }, # node\n        \"airIRmPmWaterTemperature2C\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.43.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature 2 in tenths of degrees Celsius (1202).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperature2F\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.43.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature 2 in tenths of degrees Fahrenheit (1202).\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeFreeCooling\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Freecooling runtime in hours (1203)\"\"\",\n        }, # scalar\n        \"airIRmPmRuntimeMixedModeFreeCooling\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.4.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Mixed mode freecooling runtime in hours (1203)\"\"\",\n        }, # scalar\n        \"airIRmPmCommon4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5\",\n        }, # node\n        \"airIRmPmNumberOfCompressors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of compressors (1761)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfSuctionValves\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of suction valves (1762)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfDryCoolers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of drycoolers (1763)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfPumps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of pumps (1764)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfElectricHeaters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of electric heaters (1765)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfHumidifiers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of humidifiers (1766)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfFans\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of fans (1767)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfLouvers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of louvers (1768)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfSensors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of sensors (1769)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfExternalAlarmInputs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of external alarm inputs (1770)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfGECWValves\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of GE/CW valves (1771)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfHotGasReheat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of hot gas reheaters (1772)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfPWWReheat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of PWW reheaters (1773)\"\"\",\n        }, # scalar\n        \"airIRmPmNumberOfDehumidifiers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.5.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of dehumidifiers (1774)\"\"\",\n        }, # scalar\n        \"airIRmPmCommon5\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6\",\n        }, # node\n        \"airIRmPmUnitEvaporationTemperature1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.1\",\n        }, # node\n        \"airIRmPmUnitEvaporationTemperature1C\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation temperature 1 in tenths\nof degrees Celsius (2232)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitEvaporationTemperature1F\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation temperature 1 in tenths\nof degrees Fahrenheit (2232)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitEvaporationPressure1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation pressure 1 in tenths\nof Bars (2233)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationTemperature1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.3\",\n        }, # node\n        \"airIRmPmUnitCondensationTemperature1C\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation temperature 1 in tenths\nof degrees Celsius (2234)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationTemperature1F\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation temperature 1 in tenths\nof degrees Fahrenheit (2234)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationPressure1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation pressure 1 in tenths\nof Bars (2235)\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitReturnAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.8\",\n        }, # node\n        \"airIRmPmMaxLimitReturnAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit return air temperature in tenths\nof degrees Celsius (2239).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitReturnAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit return air temperature in tenths\nof degrees Fahrenheit (2239).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitReturnAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.9\",\n        }, # node\n        \"airIRmPmMinLimitReturnAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit return air temperature in tenths\nof degrees Celsius (2240).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitReturnAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit return air temperature in tenths\nof degrees Fahrenheit (2240).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitSupplyAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.10\",\n        }, # node\n        \"airIRmPmMaxLimitSupplyAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit supply air temperature in tenths\nof degrees Celsius (2241).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitSupplyAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit supply air temperature in tenths\nof degrees Fahrenheit (2241).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitSupplyAirTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.11\",\n        }, # node\n        \"airIRmPmMinLimitSupplyAirTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit supply air temperature in tenths\nof degrees Celsius (2242).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitSupplyAirTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit supply air temperature in tenths\nof degrees Fahrenheit (2242).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitWaterTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.12\",\n        }, # node\n        \"airIRmPmMaxLimitWaterTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit water temperature in tenths of degrees Celsius (2243).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitWaterTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit water temperature in tenths\nof degrees Fahrenheit (2243).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitWaterTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.13\",\n        }, # node\n        \"airIRmPmMinLimitWaterTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit water temperature in tenths\nof degrees Celsius (2244).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitWaterTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit water temperature in tenths\nof degrees Fahrenheit (2244).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitReturnAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit return air humidity in tenths of %RH (2245).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitReturnAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit return air humidity in tenths of %RH (2246).\"\"\",\n        }, # scalar\n        \"airIRmPmMaxLimitSupplyAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum limit supply air humidity in tenths of %RH (2247).\"\"\",\n        }, # scalar\n        \"airIRmPmMinLimitSupplyAirHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum limit supply air humidity in tenths of %RH (2248).\"\"\",\n        }, # scalar\n        \"airIRmPmLowPressureWinterDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Winter mode low pressure delay in seconds (2249)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationPressure2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation pressure 2 in tenths of Bars (2250)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitOverloadSwitch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit overload switch setting in tenths of Kelvins (2251)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationTemperature2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.41\",\n        }, # node\n        \"airIRmPmUnitCondensationTemperature2C\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.41.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation temperature 2 in tenths \nof degrees Celsius (2272)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitCondensationTemperature2F\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.41.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit condensation temperature 2 in tenths \nof degrees Fahrenheit (2272)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitEvaporationPressure2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation pressure 2 in tenths\nof Bars (2273)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitEvaporationTemperature2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.43\",\n        }, # node\n        \"airIRmPmUnitEvaporationTemperature2C\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.43.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation temperature 2 in tenths \nof degrees Celsius (2274)\"\"\",\n        }, # scalar\n        \"airIRmPmUnitEvaporationTemperature2F\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.6.43.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit evaporation temperature 2 in tenths \nof degrees Fahrenheit (2274)\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7\",\n        }, # node\n        \"airIRmPmCmp1ManOperationActive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 1 manual operation active (4401)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1ManOperationState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 1 manual operation state (4402)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 1 running (4403)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1StartTempSummer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.17\",\n        }, # node\n        \"airIRmPmCmp1StartTempSummerK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.17.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 summer mode start temperature \nin tenths of Kelvins (4416)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1StartTempSummerF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.17.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 summer mode start temperature \nin tenths of degrees Fahrenheit (4416)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1HysteresisSummer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.18\",\n        }, # node\n        \"airIRmPmCmp1HysteresisSummerK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.18.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 summer mode hysteresis setting \nin tenths of Kelvins (4417)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1HysteresisSummerF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.18.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 summer mode hysteresis setting \nin tenths of Fahrenheit (4417)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1StartTempWinter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.19\",\n        }, # node\n        \"airIRmPmCmp1StartTempWinterK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.19.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 winter mode start temperature \nin tenths of Kelvins (4418)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1StartTempWinterF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.19.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 winter mode start temperature \nin tenths of degrees Fahrenheit (4418)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1HysteresisWinter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.20\",\n        }, # node\n        \"airIRmPmCmp1HysteresisWinterK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.20.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 Winter mode hysteresis setting \nin tenths of Kelvins (4419)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1HysteresisWinterF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.20.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 1 Winter mode hysteresis setting \nin tenths of Fahrenheit (4419)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.7.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 1 runtime in hours (4428)\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8\",\n        }, # node\n        \"airIRmPmCmp2ManOperationActive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 2 manual operation active (4501)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2ManOperationState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 2 manual operation state (4502)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 2 running (4503)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2StartTempSummer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.17\",\n        }, # node\n        \"airIRmPmCmp2StartTempSummerK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.17.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 summer mode start temperature \nin tenths of Kelvins (4516)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2StartTempSummerF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.17.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 summer mode start temperature \nin tenths of degrees Fahrenheit (4516)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2HysteresisSummer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.18\",\n        }, # node\n        \"airIRmPmCmp2HysteresisSummerK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.18.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 summer mode hysteresis setting \nin tenths of Kelvins (4517)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2HysteresisSummerF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.18.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 summer mode hysteresis setting \nin tenths of Fahrenheit (4517)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2StartTempWinter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.19\",\n        }, # node\n        \"airIRmPmCmp2StartTempWinterK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.19.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 winter mode start temperature \nin tenths of Kelvins (4518)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2StartTempWinterF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.19.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 winter mode start temperature \nin tenths of degrees Fahrenheit (4518)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2HysteresisWinter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.20\",\n        }, # node\n        \"airIRmPmCmp2HysteresisWinterK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.20.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 Winter mode hysteresis setting \nin tenths of Kelvins (4519)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2HysteresisWinterF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.20.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Compressor 2 Winter mode hysteresis setting \nin tenths of Fahrenheit (4519)\"\"\",\n        }, # scalar\n        \"airIRmPmCmp2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.8.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor 2 runtime in hours (4528)\"\"\",\n        }, # scalar\n        \"airIRmPmSuctionValve1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.9\",\n        }, # node\n        \"airIRmPmSuctionValve2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.10\",\n        }, # node\n        \"airIRmPmEheating1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11\",\n        }, # node\n        \"airIRmPmEheating1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #1 manual operation enable (4801)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #1 running state (4803)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #1 running in manual operation mode (4804)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pwm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #1 type (4808)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.10\",\n        }, # node\n        \"airIRmPmEheating1StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #1 start temperature in tenths of Kelvins (4809)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #1 start temperature in tenths of degrees Fahrenheit (4809)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.11\",\n        }, # node\n        \"airIRmPmEheating1HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #1 hysteresis in tenths of Kelvins (4810)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #1 hysteresis in tenths of degrees Fahrenheit (4810)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.11.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #1 runtime in hours (4816)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12\",\n        }, # node\n        \"airIRmPmEheating2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #2 manual operation enable (4901)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #2 running state (4903)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #2 running in manual operation mode (4904)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pwm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #2 type (4908)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.10\",\n        }, # node\n        \"airIRmPmEheating2StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #2 start temperature in tenths of Kelvins (4909)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #2 start temperature in tenths of degrees Fahrenheit (4909)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.11\",\n        }, # node\n        \"airIRmPmEheating2HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #2 hysteresis in tenths of Kelvins (4910)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #2 hysteresis in tenths of degrees Fahrenheit (4910)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.12.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #2 runtime in hours (4916)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13\",\n        }, # node\n        \"airIRmPmEheating3ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #3 manual operation enable (5001)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #3 running state (5003)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #3 running in manual operation mode (5004)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pwm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #3 type (5008)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.10\",\n        }, # node\n        \"airIRmPmEheating3StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #3 start temperature in tenths of Kelvins (5009)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #3 start temperature in tenths of degrees Fahrenheit (5009)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.11\",\n        }, # node\n        \"airIRmPmEheating3HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #3 hysteresis in tenths of Kelvins (5010)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #3 hysteresis in tenths of degrees Fahrenheit (5010)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating3Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.13.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #3 runtime in hours (5016)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14\",\n        }, # node\n        \"airIRmPmEheating4ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #4 manual operation enable (5101)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #4 running state (5103)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #4 running in manual operation mode (5104)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pwm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #4 type (5108)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.10\",\n        }, # node\n        \"airIRmPmEheating4StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #4 start temperature in tenths of Kelvins (5109)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #4 start temperature in tenths of degrees Fahrenheit (5109)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.11\",\n        }, # node\n        \"airIRmPmEheating4HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #4 hysteresis in tenths of Kelvins (5110)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Electric heater #4 hysteresis in tenths of degrees Fahrenheit (5110)\"\"\",\n        }, # scalar\n        \"airIRmPmEheating4Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.14.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Electric heater #4 runtime in hours (5116)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalve\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15\",\n        }, # node\n        \"airIRmPmGECWvalveManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"GE/CW valve manual operation enable (5201)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveStartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.9\",\n        }, # node\n        \"airIRmPmGECWvalveStartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve start temperature in tenths of Kelvins (5208)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveStartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve start temperature in tenths of degrees Fahrenheit (5208)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveLinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.10\",\n        }, # node\n        \"airIRmPmGECWvalveLinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve linear range in tenths of Kelvins (5209)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveLinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve linear range in tenths of degrees Fahrenheit (5209)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveGEOffTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.12\",\n        }, # node\n        \"airIRmPmGECWvalveGEOffTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve GE off temperature in tenths of degrees Celsius (5211)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveGEOffTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GE/CW valve GE off temperature in tenths of degrees Fahrenheit (5211)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveOpeningGrade\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"GE/CW valve opening grade in percent (5214)\"\"\",\n        }, # scalar\n        \"airIRmPmGECWvalveManOpOpeningGrade\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.15.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"GE/CW valve manual operation opening grade in percent (5215)\"\"\",\n        }, # scalar\n        \"airIRmPmGvalve\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16\",\n        }, # node\n        \"airIRmPmGvalveManOperationEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"G-valve manual operation enable (5301)\"\"\",\n        }, # scalar\n        \"airIRmPmGvalvePreOpeningTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"G-valve pre-opening time in seconds (5310)\"\"\",\n        }, # scalar\n        \"airIRmPmGvalvePreOpeningGrade\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"G-valve pre-opening grade in percent (5311)\"\"\",\n        }, # scalar\n        \"airIRmPmGvalveOpeningGrade\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"G-valve opening grade in percent (5312)\"\"\",\n        }, # scalar\n        \"airIRmPmGvalveManOpOpeningGrade\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.16.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"G-valve manual operation opening grade in percent (5313)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17\",\n        }, # node\n        \"airIRmPmDrycooler1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 1 manual operation enable setting (5401)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 1 running (5402)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 1 manual operation running (5404)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1WinterStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.9\",\n        }, # node\n        \"airIRmPmDrycooler1WinterStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 winter mode start temperature \nin tenths of degrees Celsius (5408)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1WinterStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 winter mode start temperature \nin tenths of degrees Fahrenheit (5408)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1SummerStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.10\",\n        }, # node\n        \"airIRmPmDrycooler1SummerStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 summer mode start temperature \nin tenths of degrees Celsius (5409)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1SummerStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 summer mode start temperature \nin tenths of degrees Fahrenheit (5409)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.11\",\n        }, # node\n        \"airIRmPmDrycooler1HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 hysteresis in tenths of Kelvins (5410)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 1 hysteresis in tenths of degrees Fahrenheit (5410)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.17.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 1 runtime in hours (5415)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18\",\n        }, # node\n        \"airIRmPmDrycooler2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 2 manual operation enable setting (5501)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 2 running (5502)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 2 manual operation running (5504)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2WinterStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.9\",\n        }, # node\n        \"airIRmPmDrycooler2WinterStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 winter mode start temperature \nin tenths of degrees Celsius (5508)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2WinterStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 winter mode start temperature \nin tenths of degrees Fahrenheit (5508)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2SummerStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.10\",\n        }, # node\n        \"airIRmPmDrycooler2SummerStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 summer mode start temperature \nin tenths of degrees Celsius (5509)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2SummerStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 summer mode start temperature \nin tenths of degrees Fahrenheit (5509)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.11\",\n        }, # node\n        \"airIRmPmDrycooler2HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 hysteresis in tenths of Kelvins (5510)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 2 hysteresis in tenths of degrees Fahrenheit (5510)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.18.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 2 runtime in hours (5515)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19\",\n        }, # node\n        \"airIRmPmDrycooler3ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 3 manual operation enable setting (5601)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 3 running (5602)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 3 manual operation running (5604)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3WinterStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.9\",\n        }, # node\n        \"airIRmPmDrycooler3WinterStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 winter mode start temperature \nin tenths of degrees Celsius (5608)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3WinterStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 winter mode start temperature \nin tenths of degrees Fahrenheit (5608)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3SummerStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.10\",\n        }, # node\n        \"airIRmPmDrycooler3SummerStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 summer mode start temperature \nin tenths of degrees Celsius (5609)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3SummerStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 summer mode start temperature \nin tenths of degrees Fahrenheit (5609)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.11\",\n        }, # node\n        \"airIRmPmDrycooler3HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 hysteresis in tenths of Kelvins (5610)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 3 hysteresis in tenths of degrees Fahrenheit (5610)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.19.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 3 runtime in hours (5615)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20\",\n        }, # node\n        \"airIRmPmDrycooler4ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 4 manual operation enable setting (5701)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 4 running (5702)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 4 manual operation running (5704)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4WinterStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.9\",\n        }, # node\n        \"airIRmPmDrycooler4WinterStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 winter mode start temperature \nin tenths of degrees Celsius (5708)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4WinterStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 winter mode start temperature \nin tenths of degrees Fahrenheit (5708)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4SummerStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.10\",\n        }, # node\n        \"airIRmPmDrycooler4SummerStartTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 summer mode start temperature \nin tenths of degrees Celsius (5709)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4SummerStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 summer mode start temperature \nin tenths of degrees Fahrenheit (5709)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.11\",\n        }, # node\n        \"airIRmPmDrycooler4HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 hysteresis in tenths of Kelvins (5710)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycooler 4 hysteresis in tenths of degrees Fahrenheit (5710)\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.20.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler 4 runtime in hours (5715)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21\",\n        }, # node\n        \"airIRmPmPump1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 manual operation enable state (5801)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 running (5802)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 manual operation running (5805)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.10\",\n        }, # node\n        \"airIRmPmPump1StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 starting temperature in tenths of Kelvins (5809)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 starting temperature in tenths of degrees Fahrenheit (5809)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.11\",\n        }, # node\n        \"airIRmPmPump1HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 hysteresis in tenths of Kelvins (5810)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 hysteresis in tenths of degrees Fahrenheit (5810)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1LinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.12\",\n        }, # node\n        \"airIRmPmPump1LinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 linear range in tenths of Kelvins (5811)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1LinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 linear range in tenths of degrees Fahrenheit (5811)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1PressureSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 pressure setpoint in tenths of Bars (5812)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 runtime in hours (5820)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 1 speed in percent (5821)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1ControlCycle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 control cycle length in seconds (5827)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1MaxAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 maximum adjustment in percent (5828)\"\"\",\n        }, # scalar\n        \"airIRmPmPump1ControlFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.21.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 1 control factor setting (5829)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22\",\n        }, # node\n        \"airIRmPmPump2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 manual operation enable state (5901)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 running (5902)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 manual operation running (5905)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.10\",\n        }, # node\n        \"airIRmPmPump2StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 starting temperature in tenths of Kelvins (5909)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 starting temperature in tenths of degrees Fahrenheit (5909)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.11\",\n        }, # node\n        \"airIRmPmPump2HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 hysteresis in tenths of Kelvins (5910)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 hysteresis in tenths of degrees Fahrenheit (5910)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2LinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.12\",\n        }, # node\n        \"airIRmPmPump2LinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 linear range in tenths of Kelvins (5911)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2LinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 linear range in tenths of degrees Fahrenheit (5911)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2PressureSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 pressure setpoint in tenths of Bars (5912)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 runtime in hours (5920)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 2 speed in percent (5921)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2ControlCycle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 control cycle length in seconds (5927)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2MaxAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 maximum adjustment in percent (5928)\"\"\",\n        }, # scalar\n        \"airIRmPmPump2ControlFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.22.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 2 control factor setting (5929)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23\",\n        }, # node\n        \"airIRmPmPump3ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 3 manual operation enable state (6001)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 3 running (6002)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 3 manual operation running (6005)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.10\",\n        }, # node\n        \"airIRmPmPump3StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 starting temperature in tenths of Kelvins (6009)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 starting temperature in tenths of degrees Fahrenheit (6009)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.11\",\n        }, # node\n        \"airIRmPmPump3HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 hysteresis in tenths of Kelvins (6010)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 hysteresis in tenths of degrees Fahrenheit (6010)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3LinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.12\",\n        }, # node\n        \"airIRmPmPump3LinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 linear range in tenths of Kelvins (6011)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3LinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 linear range in tenths of degrees Fahrenheit (6011)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3PressureSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 pressure setpoint in tenths of Bars (6012)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 3 runtime in hours (6020)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 3 speed in percent (6021)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3ControlCycle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 control cycle length in seconds (6027)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3MaxAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 maximum adjustment in percent (6028)\"\"\",\n        }, # scalar\n        \"airIRmPmPump3ControlFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.23.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 3 control factor setting (6029)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24\",\n        }, # node\n        \"airIRmPmPump4ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 4 manual operation enable state (6101)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 4 running (6102)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 4 manual operation running (6105)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4StartTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.10\",\n        }, # node\n        \"airIRmPmPump4StartTemperatureK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 starting temperature in tenths of Kelvins (6109)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4StartTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 starting temperature in tenths of degrees Fahrenheit (6109)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4Hysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.11\",\n        }, # node\n        \"airIRmPmPump4HysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 hysteresis in tenths of Kelvins (6110)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4HysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 hysteresis in tenths of degrees Fahrenheit (6110)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4LinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.12\",\n        }, # node\n        \"airIRmPmPump4LinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 linear range in tenths of Kelvins (6111)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4LinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 linear range in tenths of degrees Fahrenheit (6111)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4PressureSetpoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 pressure setpoint in tenths of Bars (6112)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 4 runtime in hours (6120)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump 4 speed in percent (6121)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4ControlCycle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 control cycle length in seconds (6127)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4MaxAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 maximum adjustment in percent (6128)\"\"\",\n        }, # scalar\n        \"airIRmPmPump4ControlFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.24.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pump 4 control factor setting (6129)\"\"\",\n        }, # scalar\n        \"airIRmPmHotgasHeating\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.25\",\n        }, # node\n        \"airIRmPmHotgasHeatRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.25.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Hotgas heat running state. (6202)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeating\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26\",\n        }, # node\n        \"airIRmPmPWWHeatingManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PWW-heating manual operation enable (6301)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PWW-heating running (6302)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PWW-heating manual operation running (6303)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PWW-heating type (6308)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingStartTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.10\",\n        }, # node\n        \"airIRmPmPWWHeatingStartTempK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating starting temperature in Kelvins (6309)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingStartTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating starting temperature in degrees Fahrenheit (6309)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingHysteresis\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.12\",\n        }, # node\n        \"airIRmPmPWWHeatingHysteresisK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating hysteresis in Kelvins (6311)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingHysteresisF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating hysteresis in degrees Fahrenheit (6311)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingLinearRange\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.13\",\n        }, # node\n        \"airIRmPmPWWHeatingLinearRangeK\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating linear range in Kelvins (6312)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingLinearRangeF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating linear range in degrees Fahrenheit (6312)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingCurrentValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating current value in percent (6315)\"\"\",\n        }, # scalar\n        \"airIRmPmPWWHeatingManOpValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.26.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PWW-heating manual operation value in percent (6316)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27\",\n        }, # node\n        \"airIRmPmHumidifier1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 manual operation enable (6401)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 running state (6402)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 manual operation running state (6404)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 type (6416)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1StartHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #1 start humidity in tenths \nof percent relative humidity (6417)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Hysteresis\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #1 hysteresis in tenths \nof percent relative humidity (6419)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1LinearRange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #1 linear range in tenths \nof percent relative humidity per Kelvin (6420)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 runtime in hours (6426)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1CurrentValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 current value in percent (6427)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1ManOpValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.27.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #1 manual operation value in percent (6428)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28\",\n        }, # node\n        \"airIRmPmHumidifier2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 manual operation enable (6501)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 running state (6502)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 manual operation running state (6504)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 type (6516)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2StartHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #2 start humidity in tenths \nof percent relative humidity (6517)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Hysteresis\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #2 hysteresis in tenths \nof percent relative humidity (6519)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2LinearRange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #2 linear range in tenths \nof percent relative humidity per Kelvin (6520)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 runtime in hours (6526)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2CurrentValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 current value in percent (6527)\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2ManOpValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.28.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidifier #2 manual operation value in percent (6528)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidification\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31\",\n        }, # node\n        \"airIRmPmDehumidificManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dehumidifier manual operation enable setting (6801)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmControlState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dehumidifier running state (6802)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Dehumidifier manual operation running (6804)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificStartHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier start humidity in tenths of percent relative humidity (6809)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificHysteresis\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier hysteresis in tenths of percent relative humidity (6811)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificMinWaterTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.18\",\n        }, # node\n        \"airIRmPmDehumidificMinWaterTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.18.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier minimum water temperature in tenths of \ndegrees Celsius (6817)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificMinWaterTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.18.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier minimum water temperature in tenths of \ndegrees Fahrenheit (6817)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificMaxWaterTemp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.19\",\n        }, # node\n        \"airIRmPmDehumidificMaxWaterTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.19.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier maximum water temperature in tenths of \ndegrees Celsius (6818)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificMaxWaterTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.19.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier maximum water temperature in tenths of \ndegrees Fahrenheit (6818)\"\"\",\n        }, # scalar\n        \"airIRmPmDehumidificRuntime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.31.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dehumidifier runtime in hours (6820)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32\",\n        }, # node\n        \"airIRmPmFan1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation enable (6901)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 running (6902)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation running (6905)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 type (6908)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 runtime in hours (6931)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 speed in percent (6932)\"\"\",\n        }, # scalar\n        \"airIRmPmFan1ManOpSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.32.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation speed in percent (6933)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33\",\n        }, # node\n        \"airIRmPmFan2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation enable (7001)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 running (7002)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation running (7005)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 2 type (7008)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 runtime in hours (7031)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 speed in percent (7032)\"\"\",\n        }, # scalar\n        \"airIRmPmFan2ManOpSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.33.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation speed in percent (7033)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34\",\n        }, # node\n        \"airIRmPmFan3ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation enable (7101)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Running\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 running (7102)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3ManOpRunning\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation running (7105)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Type\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"direct\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 3 type (7108)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Runtime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 runtime in hours (7131)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Speed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 speed in percent (7132)\"\"\",\n        }, # scalar\n        \"airIRmPmFan3ManOpSpeed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.34.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan 1 manual operation speed in percent (7133)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.35\",\n        }, # node\n        \"airIRmPmLouver1ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.35.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 1 manual operation enable (7201)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver1Position\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.35.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 1 position (7202)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver1ManOpPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.35.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 1 manual operation position setting (7203)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.36\",\n        }, # node\n        \"airIRmPmLouver2ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.36.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 2 manual operation enable (7301)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver2Position\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.36.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 2 position (7302)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver2ManOpPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.36.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 2 manual operation position setting (7303)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.37\",\n        }, # node\n        \"airIRmPmLouver3ManOpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.37.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 3 manual operation enable (7401)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver3Position\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.37.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 3 position (7402)\"\"\",\n        }, # scalar\n        \"airIRmPmLouver3ManOpPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.37.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Louver 3 manual operation position setting (7403)\"\"\",\n        }, # scalar\n        \"airIRmPmAuxAlarm1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.38\",\n        }, # node\n        \"airIRmPmAuxAlarm2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.39\",\n        }, # node\n        \"airIRmPmAuxAlarm3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.40\",\n        }, # node\n        \"airIRmPmAuxAlarm4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.41\",\n        }, # node\n        \"airIRmPmAuxAlarm5\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.42\",\n        }, # node\n        \"airIRmPmAlarmBits\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43\",\n        }, # node\n        \"airIRmPmFan1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #1 failure (8500).\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #2 failure (8501).\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #3 failure (8502).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #1 failure (8503).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #2 failure (8504).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterDetector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water detector alarm (8505).\"\"\",\n        }, # scalar\n        \"airIRmPmPhaseFailure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Phase failure (8506).\"\"\",\n        }, # scalar\n        \"airIRmPmFireSmokeDetector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fire/smoke detector (8507).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirTemperatureTooHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air temperature too high (8508).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirHumidityTooHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air humidity too high (8509).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirTemperatureTooHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air temperature too high (8510).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirHumidityTooHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air humidity too high (8511).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperatureTooHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature too high (8512).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirTemperatureTooLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air temperature too low (8513).\"\"\",\n        }, # scalar\n        \"airIRmPmReturnAirHumidityTooLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Return air humidity too low (8514).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirTemperatureTooLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air temperature too low (8515).\"\"\",\n        }, # scalar\n        \"airIRmPmSupplyAirHumidityTooLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supply air humidity too low (8516).\"\"\",\n        }, # scalar\n        \"airIRmPmWaterTemperatureTooLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Water temperature too low (8517).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #1 failure (8518).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #2 failure (8519).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #3 failure (8520).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor4Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #4 failure (8521).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor5Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #5 failure (8522).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor6Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #6 failure (8523).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor7Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #7 failure (8524).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor8Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #8 failure (8525).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor9Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #9 failure (8526).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor10Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #10 failure (8527).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor11Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #11 failure (8528).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor12Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #12 failure (8529).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor13Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #13 failure (8530).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor14Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #14 failure (8531).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor15Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #15 failure (8532).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor16Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #16 failure (8533).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor17Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #17 failure (8534).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor18Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #18 failure (8535).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor19Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #19 failure (8536).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor20Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #20 failure (8537).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor21Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #21 failure (8538).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor1Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #1 defect (8539).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor2Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #2 defect (8540).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor3Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #3 defect (8541).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor4Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #4 defect (8542).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor5Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #5 defect (8543).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor6Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #6 defect (8544).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor7Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #7 defect (8545).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor8Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #8 defect (8546).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor9Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #9 defect (8547).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor10Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #10 defect (8548).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor11Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #11 defect (8549).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor12Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #12 defect (8550).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor13Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #13 defect (8551).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor14Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #14 defect (8552).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor15Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #15 defect (8553).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor16Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #16 defect (8554).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor17Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #17 defect (8555).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor18Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #18 defect (8556)\"\"\",\n        }, # scalar\n        \"airIRmPmSensor19Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #19 defect (8557).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor20Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #20 defect (8558).\"\"\",\n        }, # scalar\n        \"airIRmPmSensor21Defect\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor #21 defect (8559).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor1Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #1 alarm (8560).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor2Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #2 alarm (8561).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor1LowPressure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #1 low pressure (8562).\"\"\",\n        }, # scalar\n        \"airIRmPmCompressor2LowPressure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Compressor #2 low pressure (8563).\"\"\",\n        }, # scalar\n        \"airIRmPmReheat1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reheat #1 failure (8564).\"\"\",\n        }, # scalar\n        \"airIRmPmReheat2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reheat #2 failure (8565).\"\"\",\n        }, # scalar\n        \"airIRmPmReheat3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reheat #3 failure (8566).\"\"\",\n        }, # scalar\n        \"airIRmPmReheat4Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reheat #4 failure (8567).\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler #1 failure (8568).\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler #2 failure (8569).\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler #3 failure (8570).\"\"\",\n        }, # scalar\n        \"airIRmPmDrycooler4Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Drycooler #4 failure (8571).\"\"\",\n        }, # scalar\n        \"airIRmPmPump1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump #1 failure (8572).\"\"\",\n        }, # scalar\n        \"airIRmPmPump2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump #2 failure (8573).\"\"\",\n        }, # scalar\n        \"airIRmPmPump3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump #3 failure (8574).\"\"\",\n        }, # scalar\n        \"airIRmPmPump4Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Pump #4 failure (8575).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.77\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 failure (8576).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 failure (8577).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier3Failure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #3 failure (8578).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Alarm5us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 5us alarm (8579).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Alarm5us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 5us alarm (8580).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier3Alarm5us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.82\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #3 5us alarm (8581).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier1Alarm20us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #1 20us alarm (8582).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier2Alarm20us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.84\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #2 20us alarm (8583).\"\"\",\n        }, # scalar\n        \"airIRmPmHumidifier3Alarm20us\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.85\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidifier #3 20us alarm (8584).\"\"\",\n        }, # scalar\n        \"airIRmPmFan1Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.86\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #1 alarm (8585).\"\"\",\n        }, # scalar\n        \"airIRmPmFan2Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.87\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #2 alarm (8586).\"\"\",\n        }, # scalar\n        \"airIRmPmFan3Alarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.88\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fan #3 alarm (8587).\"\"\",\n        }, # scalar\n        \"airIRmPmFilter1Clogged\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.89\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter #1 clogged (8588).\"\"\",\n        }, # scalar\n        \"airIRmPmFilter2Clogged\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.90\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter #2 clogged (8589).\"\"\",\n        }, # scalar\n        \"airIRmPmFilter3Clogged\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.91\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Filter #3 clogged (8590).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.92\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #1 alarm (8591).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.93\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #2 alarm (8592).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.94\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #3 alarm (8593).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm4\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #4 alarm (8594).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm5\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #5 alarm (8595).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm6\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.97\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #6 alarm (8596).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm7\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #7 alarm (8597).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm8\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #8 alarm (8598).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm9\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #9 alarm (8599).\"\"\",\n        }, # scalar\n        \"airIRmPmAuxiliaryAlarm10\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Auxiliary #10 alarm (8600).\"\"\",\n        }, # scalar\n        \"airIRmPmHotGasHeatingAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Hot gas heating alarm (8601).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV1PressureSensorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV1 pressure sensor error (8602).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV1TemperatureSensorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV1 temperature sensor error (8603).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV1StepperMotorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV1 stepper motor error (8604).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV2PressureSensorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV2 pressure sensor error (8605).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV2TemperatureSensorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV2 temperature sensor error (8606).\"\"\",\n        }, # scalar\n        \"airIRmPmEEV2StepperMotorError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.43.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmAlarmState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"EEV2 stepper motor error (8607).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZone\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44\",\n        }, # node\n        \"airIRmPmMyZoneNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone number (11700).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneRoomTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.2\",\n        }, # node\n        \"airIRmPmMyZoneRoomTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone room temperature in tenths of degrees Celsius (11701).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneRoomTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone room temperature in tenths of degrees Fahrenheit (11701).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneRoomHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone room humidity in tenths of %RH (11702).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneSupplyTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.4\",\n        }, # node\n        \"airIRmPmMyZoneSupplyTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone supply temperature in tenths of degrees Celsius (11703).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneSupplyTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone supply temperature in tenths\nof degrees Fahrenheit (11703).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneSupplyHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone supply humidity in tenths of %RH (11704).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneSequencingTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone sequencing time in minutes (11705).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneNumberOfErrorUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of error units in my zone (11706).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneEmergencyTemperature\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.8\",\n        }, # node\n        \"airIRmPmMyZoneEmergencyTemperatureC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone emergency temperature in tenths of degrees Celsius (11707).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneEmergencyTemperatureF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone emergency temperature in tenths\nof degrees Fahrenheit (11707).\"\"\",\n        }, # scalar\n        \"airIRmPmMyZoneCWEnergySaveMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.44.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"My zone CW energy save mode (11708).\"\"\",\n        }, # scalar\n        \"airIRmPmGlobalZoneData\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.45\",\n        }, # node\n        \"airIRmPmGlobalZoneDataEmergencyOpMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.5.3.45.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"AirIRmActivityState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Emergency operation mode (11800).\"\"\",\n        }, # scalar\n        \"airIRGen3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6\",\n        }, # node\n        \"airIRG3Ident\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1\",\n        }, # node\n        \"airIRG3IdentTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ident table size.\"\"\",\n        }, # scalar\n        \"airIRG3IdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to get ident information of current RDU and its assigned CM's.\"\"\",\n        }, # table\n        \"airIRG3IdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ident table entry.\"\"\",\n        }, # row\n        \"airIRG3IdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of ident table.\"\"\",\n        }, # column\n        \"airIRG3IdentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit name.\"\"\",\n        }, # column\n        \"airIRG3IdentLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A character string identifying the unit location.\"\"\",\n        }, # column\n        \"airIRG3IdentModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit model number.\"\"\",\n        }, # column\n        \"airIRG3IdentSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit serial number.\"\"\",\n        }, # column\n        \"airIRG3IdentFirmwareRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit firmware version.\"\"\",\n        }, # column\n        \"airIRG3IdentHardwareRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit controller hardware revision.\"\"\",\n        }, # column\n        \"airIRG3IdentManufactureDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the unit manufacture date.\"\"\",\n        }, # column\n        \"airIRG3IdentRDUSysOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the RDU data.\"\"\",\n        }, # column\n        \"airIRG3IdentCMSysOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the cooling module data.\"\"\",\n        }, # column\n        \"airIRG3IdentGroupSysOID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID contains an OID path to the group data.\"\"\",\n        }, # column\n        \"airIRG3Group\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2\",\n        }, # node\n        \"airIRG3GroupTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group table size.\"\"\",\n        }, # scalar\n        \"airIRG3GroupStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to get group status information.\"\"\",\n        }, # table\n        \"airIRG3GroupStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3GroupStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"The group staus table entry.\"\"\",\n        }, # row\n        \"airIRG3GroupStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of group status table.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusCoolOutput\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling output in tenths of kilowatts (kW).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusCoolDemand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group cooling demand in tenths of kilowatts (kW).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAirFlowUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in cubic feet per minute (CFM).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAirFlowMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group air flow in liters per second (L/s).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMaxRackInletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMaxRackInletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum rack inlet temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMinRackInletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMinRackInletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum rack inlet temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMaxReturnAirTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMaxReturnAirTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group maximum return air temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMinReturnAirTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusMinReturnAirTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group minimum return air temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgSupplyTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average supply air temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgSupplyTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average supply air temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgReturnTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average return air temperature in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgReturnTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average return air temperature in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average fan speed in revolutions per minute (RPM). \nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgAirFlowUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average air flow in cubic feet per minute (CFM).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusAvgAirFlowMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group average air flow in liters per second (L/s).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusTotalAirFlowUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group total air flow in cubic feet per minute (CFM).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupStatusTotalAirFlowMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The group total air flow in liters per second (L/s).\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access the group setpoints.\"\"\",\n        }, # table\n        \"airIRG3GroupSetpointsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3GroupSetpointsIndex\",\n            ],\n            \"description\" :\n                \"\"\"The group setpoints table entry.\"\"\",\n        }, # row\n        \"airIRG3GroupSetpointsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of group setpoints table.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsCoolSetpointUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsCoolSetpointMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsCoolDeadbandUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Fahrenheit. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsCoolDeadbandMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group cooling deadband in tenths of\ndegrees Celsius. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsFanSpeedPreference\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"med-low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"med\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"med-high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group preferred fan speed setting.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsSupplyAirSetpointUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsSupplyAirSetpointMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Group supply air setpoint in tenths of\ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsAirFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group air flow control.\"\"\",\n        }, # column\n        \"airIRG3GroupSetpointsLightingOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group lighting on time in minutes.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access group configuration table.\"\"\",\n        }, # table\n        \"airIRG3GroupConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3GroupConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"The group config table entry.\"\"\",\n        }, # row\n        \"airIRG3GroupConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of group config table.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigNumberofCoolingUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cooling units.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigConfigurationType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"racs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"spot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"in-row\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"hacs\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group configuration type. \nThe spot configuration type is not supported.\nReturns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigCapacityControlType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"discrete\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"proportional\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group capacity control. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigFanSpeedControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group fan speed control.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigCoolGainP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The gain component of the PID in hundredths.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigCoolResetRateI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The integral component of the PID in hundredths.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigCoolDerivativeD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The derivative component of the PID in hundredths.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigCoolPIDReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"readBack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Will reset the PID coefficients back to the factory defaults.\nReadback is not supported, returns -1.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigNumberofBackupUnits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of backup units.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigRuntimeBalancingEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable runtime balancing feature.\"\"\",\n        }, # column\n        \"airIRG3GroupConfigLoadAssistEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.2.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable load assist feature.\"\"\",\n        }, # column\n        \"airIRG3Alarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3\",\n        }, # node\n        \"airIRG3AlarmsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of active alarms in the airIRG3AlarmsTable.\"\"\",\n        }, # scalar\n        \"airIRG3AlarmsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of active alarms for the device.\"\"\",\n        }, # table\n        \"airIRG3AlarmsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3AlarmsIndex\",\n            ],\n            \"description\" :\n                \"\"\"Alarms specification\"\"\",\n        }, # row\n        \"airIRG3AlarmsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm index.\"\"\",\n        }, # column\n        \"airIRG3AlarmsEventCode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Event Code for the alarm. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3AlarmsDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of the alarm. Returns (-1) if not supported.\"\"\",\n        }, # column\n        \"airIRG3RDU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4\",\n        }, # node\n        \"airIRG3RDUTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU table size.\"\"\",\n        }, # scalar\n        \"airIRG3RDUStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU status table.\"\"\",\n        }, # table\n        \"airIRG3RDUStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDUStatusDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The RDU status table entry.\"\"\",\n        }, # row\n        \"airIRG3RDUStatusDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of RDU status table.\"\"\",\n        }, # column\n        \"airIRG3RDUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current RDU ID (1 to F). \nConfigured RDU only shall display ID, else return -1. \"\"\",\n        }, # column\n        \"airIRG3RDUStatusOnReadyStandby\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU current status.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusOperatingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"maintenancemode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU actual operating mode.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusLeadPump\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pump1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pump2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU lead pump.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusStartupDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU start up delay in seconds.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPumpChangeOverInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU pump change over interval in days.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusStopOnLeakDetect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU status of stop on leak detect.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU power source status.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusTotalRDUOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU output power in tenths of kilowatts (kW).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusInletWaterTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU inlet water temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusInletWaterTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU inlet water temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusOutletWaterTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU outlet water temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusOutletWaterTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU outlet water temperature in tenths of\ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserSaturationTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser saturation temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserSaturationTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser saturation temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusDewPointTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU dew point temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusDewPointTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU dew point temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPumpOutletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU pump outlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPumpOutletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU pump outlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusSubcoolerOutletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU sub cooler outlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusSubcoolerOutletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU sub cooler outlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserOutletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser outlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserOutletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser outlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserInletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser inlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserInletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserOutletPressureUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser outlet pressure in \npounds per square inch (PSI).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCondenserOutletPressureMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU condenser outlet pressure in kiloPascals (KPa).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump1HeadPressureUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 1 head pressure in pounds per square inch (PSI).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump1HeadPressureMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 1 head pressure in kiloPascals (KPa).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump2HeadPressureUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 2 head pressure in pounds per square inch (PSI).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump2HeadPressureMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 2 head pressure in kiloPascals (KPa).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump1Speed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 1 speed in revolutions per minute (RPM).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusPump2Speed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Pump 2 speed in revolutions per minute (RPM).\"\"\",\n        }, # column\n        \"airIRG3RDUStatusCWValvePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU CW Valve position in % open\"\"\",\n        }, # column\n        \"airIRG3RDUStatusReceiverLiquidLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU receiver liquid level in % Full\"\"\",\n        }, # column\n        \"airIRG3RDUStatusDCPowerSupply1Current\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU DC Power Supply 1 Current in Amps\"\"\",\n        }, # column\n        \"airIRG3RDUStatusDCPowerSupply2Current\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU DC Power Supply 2 Current in Amps\"\"\",\n        }, # column\n        \"airIRG3RDUStatusTotalDCPowerSupplyCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Total DC Power Supply Current in Amps\"\"\",\n        }, # column\n        \"airIRG3RDUStatusInputState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Input state.\"\"\",\n        }, # column\n        \"airIRG3RDUStatusOutputState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU Output state\"\"\",\n        }, # column\n        \"airIRG3RDUStatusByPassValvePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU By Pass Valve position in % open\"\"\",\n        }, # column\n        \"airIRG3RDUStatusRefrigerantLeakDetector\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"suspended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"calibrating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"operating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU refrigerant leak detector status.\"\"\",\n        }, # column\n        \"airIRG3RDURunHoursTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU run hours table.\"\"\",\n        }, # table\n        \"airIRG3RDURunHoursEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDURunHoursDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The RDU run hours table entry.\"\"\",\n        }, # row\n        \"airIRG3RDURunHoursDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of RDU run hours table.\"\"\",\n        }, # column\n        \"airIRG3RDURunHoursRDUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current RDU ID (1 to F). \nConfigured RDU only shall display ID, else return -1. \"\"\",\n        }, # column\n        \"airIRG3RDURunHoursPump1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU run hours of Pump 1.\"\"\",\n        }, # column\n        \"airIRG3RDURunHoursPump2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU run hours of Pump 2.\"\"\",\n        }, # column\n        \"airIRG3RDURunHoursPowerSupply1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU run hours of power supply 1.\"\"\",\n        }, # column\n        \"airIRG3RDURunHoursPowerSupply2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The RDU run hours of power supply 2.\"\"\",\n        }, # column\n        \"airIRG3RDUServiceIntervalsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU service intervals table.\"\"\",\n        }, # table\n        \"airIRG3RDUServiceIntervalsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDUServiceIntervalsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The service interval table entry.\"\"\",\n        }, # row\n        \"airIRG3RDUServiceIntervalsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of service interval table.\"\"\",\n        }, # column\n        \"airIRG3RDUServiceIntervalsRDUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current RDU ID (1 to F). \nConfigured RDU only shall display ID, else return -1. \"\"\",\n        }, # column\n        \"airIRG3RDUServiceIntervalsAirFilterInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU service interval for air filter in hours.\nReturns -1 if not supported.\"\"\",\n        }, # column\n        \"airIRG3RDUServiceIntervalsAirFilterAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU service interval air filter alarm status.\nReturns -1 if not supported.\"\"\",\n        }, # column\n        \"airIRG3RDUThresholdsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU thresholds table.\"\"\",\n        }, # table\n        \"airIRG3RDUThresholdsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDUThresholdsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The RDU thresholds table entry.\"\"\",\n        }, # row\n        \"airIRG3RDUThresholdsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of RDU thresholds table.\"\"\",\n        }, # column\n        \"airIRG3RDUThresholdsRDUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current RDU ID (1 to F). \nConfigured RDU only shall display ID, else return -1. \"\"\",\n        }, # column\n        \"airIRG3RDUThresholdsEnteringFluidTempHighUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU threshold for entering fluid temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3RDUThresholdsEnteringFluidTempHighMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU threshold for entering fluid temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3RDUSetpointsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU set points table.\"\"\",\n        }, # table\n        \"airIRG3RDUSetpointsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDUSetpointsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The RDU set points table entry.\"\"\",\n        }, # row\n        \"airIRG3RDUSetpointsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of RDU set points table.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access RDU configuration table.\"\"\",\n        }, # table\n        \"airIRG3RDUConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3RDUConfigDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The RDU configuration table entry.\"\"\",\n        }, # row\n        \"airIRG3RDUConfigDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of RDU configuration table.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigRDUID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current RDU ID (1 to F). \nConfigured RDU only shall display ID, else return -1. \"\"\",\n        }, # column\n        \"airIRG3RDUConfigStopOnLeakDetect\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU stop on leak detect set.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigStartupDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU start up delay in seconds.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigPumpChangeOverInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU pump change over interval in days.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU power source.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigOutputSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"anyalarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"onlycriticalalarms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU output source.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigInputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU Input Normal State.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigOutputNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU Output Normal State.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigByPassValveEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU By Pass Valve Enabled State.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigRefrigerantLeakDetectorEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The RDU Refrigerant Leak Detector Enabled State.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigCalibrateRefrigerantLeakDetector\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This parameter allows to calibrate the RDU Refrigerant Leak Detector and is write only. \nThe read returns -1. Only 'yes' is supported.\"\"\",\n        }, # column\n        \"airIRG3RDUConfigOnReadyStandby\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.4.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standby\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This parameter allows to configure RDU on/standby parameter. \nReady is currently not supported. If unsupported returns -1. \"\"\",\n        }, # column\n        \"airIRG3CM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5\",\n        }, # node\n        \"airIRG3CMTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The cooling module table size.\"\"\",\n        }, # scalar\n        \"airIRG3CMStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM status table.\"\"\",\n        }, # table\n        \"airIRG3CMStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMStatusDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM status table entry.\"\"\",\n        }, # row\n        \"airIRG3CMStatusDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of CM status table.\"\"\",\n        }, # column\n        \"airIRG3CMStatusCMID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM ID (RDU Number - Group Number - CM Unit Number).\"\"\",\n        }, # column\n        \"airIRG3CMStatusOperatingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standBy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operating mode of the CM.\"\"\",\n        }, # column\n        \"airIRG3CMStatusUnitType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unconfigured\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"oa\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ra\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current CM unit type.\"\"\",\n        }, # column\n        \"airIRG3CMStatusRackInletTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM rack inlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMStatusRackInletTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM rack inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMStatusReturnAirTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM return air temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMStatusReturnAirTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM return air temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMStatusLiquidTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM liquid temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMStatusLiquidTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM liquid temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMStatusVaporTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM vapor temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMStatusVaporTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM vapor temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMStatusEvaporatorTempUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM saturation temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMStatusEvaporatorTempMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM saturation temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMStatusLiquidInletPressureUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Liquid Inlet pressure in pounds per square inch (PSI).\"\"\",\n        }, # column\n        \"airIRG3CMStatusLiquidInletPressureMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Liquid Inlet pressure in kiloPascals (kPa).\"\"\",\n        }, # column\n        \"airIRG3CMStatusVaporOutletPressureUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Vapor Outlet pressure in pounds per square inch (PSI).\"\"\",\n        }, # column\n        \"airIRG3CMStatusVaporOutletPressureMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Vapor Outlet pressure in kiloPascals (kPa).\"\"\",\n        }, # column\n        \"airIRG3CMStatusExpansionValvePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM expansion valve position in % open\"\"\",\n        }, # column\n        \"airIRG3CMStatusEPRValvePosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Evaporator Pressure Regulator Valve Position\nin % open\"\"\",\n        }, # column\n        \"airIRG3CMStatusLocalDisplayOnOffEnabled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the on/off control on the CM local display.\"\"\",\n        }, # column\n        \"airIRG3CMStatusAverageFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM Average Fan Speed.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM run hours table.\"\"\",\n        }, # table\n        \"airIRG3CMRunHoursEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMRunHoursDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM run hours table entry.\"\"\",\n        }, # row\n        \"airIRG3CMRunHoursDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of CM run hours table.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursCMID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM ID (RDU Number - Group Number - CM Unit Number).\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursFan1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for Fan1.\nReturns (-1) if not appilcable.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursFan2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for Fan2.\nReturns (-1) if not appilcable.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursFan3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for Fan3.\nReturns (-1) if not appilcable.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursFan4\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for Fan4.\nReturns (-1) if not appilcable.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursFan5\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for Fan5.\nReturns (-1) if not appilcable.\"\"\",\n        }, # column\n        \"airIRG3CMRunHoursAirFilter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM run hours for air filter.\"\"\",\n        }, # column\n        \"airIRG3CMServiceIntervalsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM service intervals table.\"\"\",\n        }, # table\n        \"airIRG3CMServiceIntervalsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMServiceIntervalsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM service interval table entry.\"\"\",\n        }, # row\n        \"airIRG3CMServiceIntervalsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of CM service intervals table.\"\"\",\n        }, # column\n        \"airIRG3CMServiceIntervalsCMID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM ID (RDU Number - Group Number - CM Unit Number).\"\"\",\n        }, # column\n        \"airIRG3CMServiceIntervalsAirFilterInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM service interval for air filter in weeks.\nSupported only for RA. Returns -1 if not supported.\"\"\",\n        }, # column\n        \"airIRG3CMServiceIntervalsAirFilterAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM service interval air filter alarm status.\nSupported only for RA. Returns -1 if not supported.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM thresholds table.\"\"\",\n        }, # table\n        \"airIRG3CMThresholdsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMThresholdsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM thresholds table entry.\"\"\",\n        }, # row\n        \"airIRG3CMThresholdsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index for CM thresholds table.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsCMID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM ID (RDU Number - Group Number - CM Unit Number).\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsRackInletTempHighUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for rack inlet temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsRackInletTempHighMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for rack inlet temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsSupplyAirTempHighUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for supply air temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsSupplyAirTempHighMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for supply air temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsReturnAirTempHighUS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for return air temperature in tenths of \ndegrees Fahrenheit.\"\"\",\n        }, # column\n        \"airIRG3CMThresholdsReturnAirTempHighMetric\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM high threshold for return air temperature in tenths of \ndegrees Celsius.\"\"\",\n        }, # column\n        \"airIRG3CMSetpointsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM set points table.\"\"\",\n        }, # table\n        \"airIRG3CMSetpointsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMSetpointsDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM set points table entry.\"\"\",\n        }, # row\n        \"airIRG3CMSetpointsDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of CM set points table.\"\"\",\n        }, # column\n        \"airIRG3CMConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows to access CM configuration table.\"\"\",\n        }, # table\n        \"airIRG3CMConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airIRG3CMConfigDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"The CM configuration table entry.\"\"\",\n        }, # row\n        \"airIRG3CMConfigDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of CM configuration table.\"\"\",\n        }, # column\n        \"airIRG3CMConfigCMID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CM ID (RDU Number - Group Number - CM Unit Number).\"\"\",\n        }, # column\n        \"airIRG3CMConfigStopOnCoolFail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/Disable Stop On cool fail. When enabled, stops the unit \nif it detects that it is blowing warm air into the cold aisle.\"\"\",\n        }, # column\n        \"airIRG3CMConfigStartupDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM start up delay in seconds.\"\"\",\n        }, # column\n        \"airIRG3CMConfigRemoteOnStandby\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standBy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM configuration for operating mode.\"\"\",\n        }, # column\n        \"airIRG3CMConfigPowerSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.13.6.5.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The CM power source.\"\"\",\n        }, # column\n        \"rARU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14\",\n        }, # node\n        \"rARUIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.1\",\n        }, # node\n        \"rARUIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual devices. \nThe number of entries is contained in the \nrARUStatusAruDeviceCount OID.\"\"\",\n        }, # table\n        \"rARUIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUIdentAruIndex\",\n            ],\n            \"description\" :\n                \"\"\"The device to query.\"\"\",\n        }, # row\n        \"rARUIdentAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUIdentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the device. \"\"\",\n        }, # column\n        \"rARUConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2\",\n        }, # node\n        \"rARUConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for configuration of the individual ARU devices accessible from this IP address. \nThe number of entries is contained in the rARUStatusAruDeviceCount OID.\"\"\",\n        }, # table\n        \"rARUConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUConfigAruIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ARUs to configure.\"\"\",\n        }, # row\n        \"rARUConfigAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUConfigAruName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the ARU.\"\"\",\n        }, # column\n        \"rARUConfigAruRemoteSetpoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"aruOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aru85F-29C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aru90F-32C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aru95F-35C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"aru100F-38C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aru7kW-1200cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"aru5kW-800cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"aru3kW-500cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"aru2kW-300cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"aru400cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"aru600cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"aru700cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"aru900cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"aru1000cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"aru1400cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"aru1600cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"aru1800cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"aru2000cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID defines the desired base airflow of the ARU, and sets the \nspeed of the ARU fans when the temperature override is inactive.\n\nValues specified in cfm (cubic feet per minute) can be converted\nto metric values using the conversion factor:\n\n   1 cfm = 1.70 m^3/hr (cubic meters per hour).\n\nValues (1) through (9) are for support of legacy (1st generation) ARUs.\nWriting these values to a 2nd generation ARU will result in the following:\nA value greater than (9) will be ignored by a 1st generation ARU.\n\n   aruOff      (1) - Ignored\n   aru85F-29C  (2) - 1200 cfm\n   aru90F-32C  (3) - 800 cfm\n   aru95F-35C  (4) - 500 cfm\n   aru100F-38C (5) - 400 cfm\n   aru7kW      (6) - 1200 cfm\n   aru5kW      (7) - 800 cfm\n   aru3kW      (8) - 500 cfm\n   aru2kW      (9) - 400 cfm\n\nNOTE: -1 will be returned if the ARU is not communicating.\"\"\",\n        }, # column\n        \"rARUConfigAruTempOvrdEnableDisable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID is used to enable/disable the remote temperature override setting of the ARU.\n\nIf this OID is set to 1, the remote setting for temperature override is disabled.\nIf this OID is set to 2, the remote setting for temperature override is enabled.\"\"\",\n        }, # column\n        \"rARUConfigAruTempOvrdSetpoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID is the Temperature Override setpoint of the ARU.\n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees using the \nunits specified in the rARUStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"rARUConfigAruMasterControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"aruOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aruOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the master on/off control for the ARU.\"\"\",\n        }, # column\n        \"rARUStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3\",\n        }, # node\n        \"rARUStatusAruDeviceCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ARUs accessible from this IP.\"\"\",\n        }, # scalar\n        \"rARUStatusSysTempUnits\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature scale used to display the temperature\nin the system, Celsius(1) or Fahrenheit(2).\nThis setting is based on the system preferences\nconfiguration in the agent.\"\"\",\n        }, # scalar\n        \"rARUStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual ARUs accessible from this IP address. \nThe number of entries is contained in the rARUStatusAruDeviceCount OID.\"\"\",\n        }, # table\n        \"rARUStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUStatusAruIndex\",\n            ],\n            \"description\" :\n                \"\"\"The ARUs to access.\"\"\",\n        }, # row\n        \"rARUStatusAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUStatusAruName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the ARU.\"\"\",\n        }, # column\n        \"rARUStatusAruRemoteSetpoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"aruOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aru85F-29C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aru90F-32C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aru95F-35C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"aru100F-38C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aru7kW-1200cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"aru5kW-800cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"aru3kW-500cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"aru2kW-300cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"aru400cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"aru600cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"aru700cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"aru900cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"aru1000cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"aru1400cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"aru1600cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"aru1800cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"aru2000cfm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID defines the desired base airflow of the ARU, or the \nspeed of the ARU fans when the temperature override is inactive.\n\nSee also the rARUConfigAruRemoteSetpoint OID.\n\nNOTE: -1 will be returned if the ARU is not communicating.\"\"\",\n        }, # column\n        \"rARUStatusAruManualSetpoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"aruOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aru85F-29C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aru90F-32C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aru95F-35C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"aru100F-38C\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aru7kW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"aru5kW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"aru3kW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"aru2kW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"aruRem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Manual operating setpoint of the ARU, which is set on the\npanel of the ARU. If the ARU doesn't have a manual , \nthe OID will always return a value of aruRem (10).\n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees or kW.\nIf the manual setpoint is set to Remote, or if the ARU doesn't\nhave a manual switch, this OID will return aruRem.\"\"\",\n        }, # column\n        \"rARUStatusAruTemp1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ARU temperature probe #1 reading. \nThe summary exhaust temperature on 2nd generation ARUs.\n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe rARUStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"rARUStatusAruTemp2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ARU temperature probe #2 reading. \nThe exhaust temperature in the upper plenum on 2nd generation ARUs.\n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe rARUStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"rARUStatusAruTemp3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ARU temperature probe #3 reading. \nThe exhaust temperature in the lower plenum on 2nd generation ARUs.\n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe rARUStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"rARUStatusAruTempOvrdEnableDisable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID indicates whether the ARU remote temperature override is enabled or disabled.\nIf this OID is a 1, the remote setting for temperature override is disabled.\nIf this OID is a 2, the remote setting for temperature override is enabled.\"\"\",\n        }, # column\n        \"rARUStatusAruTempOvrdSetpoint\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ARU remote temperature override setpoint setting. \n\nNOTE: -1 will be returned if the ARU is not communicating.\n\nValues are represented in whole number degrees.\nUnits are displayed in the scale shown in\nthe rARUStatusSysTempUnits OID (Celsius or Fahrenheit).\"\"\",\n        }, # column\n        \"rARUStatusAruAlarmState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ASCII string containing the 8 flags representing\nthe current alarm state of the ARU. If the state of \nthe ARU is unknown, this variable is set to 'UNKNOWN'.\n\nThe flags are numbered 1 to 8, read from left to\nright. The flags are defined as follows:\n\nFlag  1: Fan Fail 1\nFlag  2: Fan Fail 2\nFlag  3: Fan Fail 3\nFlag  4: Smoke (if ARU is equipped with smoke detector)\n     \nFlag  5: High Temp (Out of Thermal Control)\nFlag  6: Over Temp (Exhaust Temp. Exceeds Override Setpoint)\nFlag  7: Fan Fail 4 (Gen 2 ARU only)\nFlag  8: Reserved\"\"\",\n        }, # column\n        \"rARUStatusAruCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commsNeverDiscovered\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsEstablished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of communications to the device.\ncommNeverDiscovered(1) indicates there has never been communications with this device.\ncommsEstablished(2) indicates communication is normal and active with this device.\ncommsLost(3) indicates communication had been established, but is no device.\"\"\",\n        }, # column\n        \"rARUStatusAruTempOvrdStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies whether the ARU is increasing airflow because\nexhaust air temperature has exceeded the setting specified in the \nrARUConfigAruTempOvrdSetpoint OID.\"\"\",\n        }, # column\n        \"rARUStatusAruMasterControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"aruOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aruOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the master on/off control for the ARU.\"\"\",\n        }, # column\n        \"rARUStatusAruTotalAirflow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total airflow provided by the aru. Specified in cfm (cubic feet per minute).\nCan be converted to metric values using the conversion factor:\n1 cfm = 1.70 m^3/hr (cubic meters per hour).\"\"\",\n        }, # column\n        \"rARUFanStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4\",\n        }, # node\n        \"rARUFanStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual devices. \nThe number of entries is contained in the \nrARUStatusAruDeviceCount OID.\"\"\",\n        }, # table\n        \"rARUFanStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUFanStatusAruIndex\",\n                \"rARUFanStatusFanIndex\",\n            ],\n            \"description\" :\n                \"\"\"The device to query.\"\"\",\n        }, # row\n        \"rARUFanStatusAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUFanStatusNominalFanSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal rotational speed (RPM) of the fans when they are\noperating at the 100% level.\"\"\",\n        }, # column\n        \"rARUFanStatusSelectedFanLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The currently selected ARU speed level, \nspecified in percent of full capacity.\"\"\",\n        }, # column\n        \"rARUFanStatusReplacementThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"khr20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"khr25\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"khr30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"khr35\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"khr40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"khr50\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which a run hour alarm will exist, indicating\nthat it might be time to proactively replace a fan.\"\"\",\n        }, # column\n        \"rARUFanStatusFanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to an individual fan table entry.\"\"\",\n        }, # column\n        \"rARUFanStatusFanOperatingStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onOk\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onDegraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"offFailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operating state of the fan.\"\"\",\n        }, # column\n        \"rARUFanStatusFanRpmSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rotational speed of the fan, \nspecified in rotations per minute (RPM).\"\"\",\n        }, # column\n        \"rARUFanStatusFanFlowRate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The flow rate provided by the fan, based on its measured rotational speed.\nSpecified in cfm (cubic feet per minute). Can be converted to metric values\nusing the conversion factor: 1 cfm = 1.70 m^3/hr (cubic meters per hour).\"\"\",\n        }, # column\n        \"rARUFanStatusFanInServiceDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The installation/replacement date of the fan.\"\"\",\n        }, # column\n        \"rARUFanStatusFanRunhourCounter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total time for which the fan has been running.\nSpecified in 10ths of hours.\"\"\",\n        }, # column\n        \"rARUFanStatusFanRunhourReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing yes to this This OID will reset a fan's total run hour counter,\nwhich is shown in the rARUFanStatusFanRunhourCounter OID.\"\"\",\n        }, # column\n        \"rARUPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5\",\n        }, # node\n        \"rARUPowerStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for query of the individual ARUs accessible from this IP address. \nThe number of entries is contained in the rARUStatusAruDeviceCount OID.\"\"\",\n        }, # table\n        \"rARUPowerStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUPowerStatusAruIndex\",\n            ],\n            \"description\" :\n                \"\"\"The device to query.\"\"\",\n        }, # row\n        \"rARUPowerStatusAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUPowerStatusPrimaryAcPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not line voltage is present on AC input 1.\"\"\",\n        }, # column\n        \"rARUPowerStatusAuxiliaryAcPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not line voltage is present on AC input 2.\"\"\",\n        }, # column\n        \"rARUPowerStatusRedundantAcConfig\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"singleCord\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualCord\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether or not a dual cord is in use.\nWhen this setting is set to dualCord (2), aruRedundantPowerLostAlarm\ntraps will be generated when either primary or auxiliary input\nvoltage is not present. When this setting is set to singleCord (1),\naruRedundantPowerLostAlarm traps will not be generated.\"\"\",\n        }, # column\n        \"rARUSensors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6\",\n        }, # node\n        \"rARUSensorsStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the rARUSensorsStatusTable.\"\"\",\n        }, # scalar\n        \"rARUSensorsStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting environmental sensor status information.\"\"\",\n        }, # table\n        \"rARUSensorsStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUSensorsStatusAruIndex\",\n                \"rARUSensorsStatusSensorNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"rARUSensorsStatusAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUSensorsStatusSensorNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the sensor on the device.\"\"\",\n        }, # column\n        \"rARUSensorsTemperature\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's current temperature reading. The temperature scale \nis based on the system preferences configuration.\"\"\",\n        }, # column\n        \"rARUSensorsConfigTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the rARUSensorsConfigTable.\"\"\",\n        }, # scalar\n        \"rARUSensorsConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting configuration information from \nenvironmental sensors attached to the device.\"\"\",\n        }, # table\n        \"rARUSensorsConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rARUSensorsConfigAruIndex\",\n                \"rARUSensorsConfigSensorNumber\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"rARUSensorsConfigAruIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the ARU entry.\"\"\",\n        }, # column\n        \"rARUSensorsConfigSensorNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the sensor on the device.\"\"\",\n        }, # column\n        \"rARUSensorsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the sensor.\"\"\",\n        }, # column\n        \"rARUSensorsLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The location of the sensor.\"\"\",\n        }, # column\n        \"rARUSensorsTempMaxThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which a maximum temperature threshold \nviolation alarm will be generated for this sensor.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempHighThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which a high temperature threshold \nviolation alarm will be generated for this sensor.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempLowThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which a low temperature threshold \nviolation alarm will be generated for this sensor.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempMinThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The temperature at which a min temperature threshold \nviolation alarm will be generated for this sensor.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempThreshHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The change in temperature required to cause a\ntemperature alarm to change from an active to an\ninactive state. The temperature scale is based on \nthe system preferences configuration.\"\"\",\n        }, # column\n        \"rARUSensorsTempShortDecRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature short-term decreasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempShortDecRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not decrease\nbeyond the value specified by the temperature short-term\ndecreasing rate threshold value.\"\"\",\n        }, # column\n        \"rARUSensorsTempShortIncRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature short-term increasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempShortIncRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not increase\nbeyond the value specified by the temperature short-term\nincreasing rate threshold value.\"\"\",\n        }, # column\n        \"rARUSensorsTempLongDecRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature long-term decreasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempLongDecRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not decrease\nbeyond the value specified by the temperature long-term\ndecreasing rate threshold value.\"\"\",\n        }, # column\n        \"rARUSensorsTempLongIncRateThreshValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of the temperature long-term increasing rate\ntime that will cause an alarm to be generated.\nThe temperature scale is based on the system preferences\nconfiguration.\"\"\",\n        }, # column\n        \"rARUSensorsTempLongIncRateThreshTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.14.6.4.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time over which the temperature may not increase\nbeyond the value specified by the temperature long-term\nincreasing rate threshold value.\"\"\",\n        }, # column\n        \"xPDU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15\",\n        }, # node\n        \"xPDUIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1\",\n        }, # node\n        \"xPDUIdentProductName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the PDU.\"\"\",\n        }, # scalar\n        \"xPDUIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the PDU. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xPDUIdentFirmwareAppRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application firmware revision of the  PDU.\"\"\",\n        }, # scalar\n        \"xPDUIdentFirmwareAppOSRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application operating system firmware revision of the PDU.\"\"\",\n        }, # scalar\n        \"xPDUIdentFirmwareControllerRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the PDU controller firmware revision.\"\"\",\n        }, # scalar\n        \"xPDUIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the PDU was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xPDUIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of \nthe PDU. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"xPDUIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of \nthe PDU. This value is set at the factory.\"\"\",\n        }, # scalar\n        \"xPDUDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2\",\n        }, # node\n        \"xPDUDeviceNominalMainInputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal main input voltage to the PDU. Measured in Volts, \nline-to-line for a 3-wire (delta) service or line-to-neutral for a \n4-wire (wye) service.\"\"\",\n        }, # scalar\n        \"xPDUDeviceServiceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"threeWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of utility input to the PDU. Either 3 wires (delta), or 4 wires (wye).\"\"\",\n        }, # scalar\n        \"xPDUDeviceNominalOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal line-to-neutral output voltage to the load measured in Volts.\"\"\",\n        }, # scalar\n        \"xPDUDeviceMainInputBreakerRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of the main input breaker measured in Amps.\"\"\",\n        }, # scalar\n        \"xPDUDevicePanelBreakerRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of the panel breaker measured in Amps.\"\"\",\n        }, # scalar\n        \"xPDUDeviceTransformerPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a transformer is installed in the PDU.\"\"\",\n        }, # scalar\n        \"xPDUDeviceLoadTieBreakerPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a load tie breaker is installed in the PDU.\"\"\",\n        }, # scalar\n        \"xPDUDeviceLoadTestPortPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not a load test port is installed in the PDU.\"\"\",\n        }, # scalar\n        \"xPDUDeviceFusesPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the UPS feed from the PDU includes fuses.\"\"\",\n        }, # scalar\n        \"xPDUDeviceFansPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not cooling fans are installed in the PDU.\"\"\",\n        }, # scalar\n        \"xPDUDeviceBypassInputPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the PDU is equipped with a second feed for\nthe UPS's bypass input.\"\"\",\n        }, # scalar\n        \"xPDUDeviceCrossTieOutputPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the PDU is equipped with a cross-tie output.\"\"\",\n        }, # scalar\n        \"xPDUDeviceEarthGroundMonitorPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the PDU can provide ground current measurements.\"\"\",\n        }, # scalar\n        \"xPDUDeviceInfraStruXureType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"typeB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"typeC\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the configuration of this PDU system. \nType-B PDU is in a distributed UPS system and has bypass capabilities. \nType-C PDU receives power from a larger central UPS.\"\"\",\n        }, # scalar\n        \"xPDUACMonitoringPoint\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3\",\n        }, # node\n        \"xPDUMainInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1\",\n        }, # node\n        \"xPDUMainInputOverVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an input over voltage condition will be generated.\nSpecified as percent deviation from nominal.\"\"\",\n        }, # scalar\n        \"xPDUMainInputUnderVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an input under voltage condition will be generated.\nSpecified as percent deviation from nominal.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUMainInputVoltageTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Main input voltage entries.\"\"\",\n        }, # scalar\n        \"xPDUMainInputVoltagePhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input voltage table entries. The number of \nentries are the phase entries.\nThe number of entries is contained in the \nxPDUMainInputVoltageTableSize OID.\"\"\",\n        }, # table\n        \"xPDUMainInputVoltagePhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUMainInputVoltagePhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular main input voltage phase.\"\"\",\n        }, # row\n        \"xPDUMainInputVoltagePhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each input phase entry in the table.\"\"\",\n        }, # column\n        \"xPDUMainInputVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line PDU input voltage when an isolation transformer is present, \nor -1 if no transformer present in this PDU. Measured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUMainInputVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.1.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral PDU input voltage when an isolation transformer is not present,\nor -1 if a transformer is present in this PDU. Measured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUBypassInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2\",\n        }, # node\n        \"xPDUBypassInputOverVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which a bypass input over voltage condition will be generated. \nSpecified as percent deviation from nominal.\"\"\",\n        }, # scalar\n        \"xPDUBypassInputUnderVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an bypass input under voltage condition will be generated. \nSpecified as percent deviation from nominal.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUBypassInputVoltagePhaseTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of bypass input voltage entries.\"\"\",\n        }, # scalar\n        \"xPDUBypassInputVoltagePhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of \nentries are the phase entries.\nThe number of entries is contained in the \nxPDUBypassInputVoltagePhaseTableSize OID.\"\"\",\n        }, # table\n        \"xPDUBypassInputVoltagePhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUBypassInputVoltagePhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular bypass input voltage phase.\"\"\",\n        }, # row\n        \"xPDUBypassInputVoltagePhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of each bypass input phase entry in the table.\"\"\",\n        }, # column\n        \"xPDUBypassInputVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line bypass input voltage, or -1 if no bypass \nfeed is present in this PDU. Measured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUBypassInputVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral bypass input voltage, or -1 if no bypass\nfeed is present in this PDU. Measured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUUPSInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3\",\n        }, # node\n        \"xPDUUPSInputVoltagePhaseTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of UPS input voltage entries.\"\"\",\n        }, # scalar\n        \"xPDUUPSInputVoltagePhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of UPS input table entries.  The number of \nentries are the phase entries.\nThe number of entries is contained in the \nxPDUUPSInputVoltagePhaseTableSize OID.\"\"\",\n        }, # table\n        \"xPDUUPSInputVoltagePhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUUPSInputVoltagePhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular UPS input voltage phase.\"\"\",\n        }, # row\n        \"xPDUUPSInputVoltagePhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each UPS input phase entry in the table.\"\"\",\n        }, # column\n        \"xPDUUPSInputVoltageLtoNPresent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not voltage is present at the UPS feed.\"\"\",\n        }, # column\n        \"xPDUSystemOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4\",\n        }, # node\n        \"xPDUSystemOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system output frequency in tenths of Hertz.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputNeutralCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the neutral current measured at the system output in tenths of Amps.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputTotalPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the total system output power in tenths of kW.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputTotalApparentPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the total system output power in tenths of kVA.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputTotalPowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total power factor of the system output.\nA value of 100 representing a unity power factor (1.00).\nMeasured in hundredths.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputFrequencyTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"freqToleranceOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"freqTolerancePointTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"freqTolerancePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"freqToleranceOne\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqToleranceOnePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"freqToleranceTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"freqToleranceThree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"freqToleranceFour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"freqToleranceFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"freqToleranceNine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Shows the circuit panel output frequency tolerance in Hertz.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputMaxKWPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines 100% load in kW. \nPurpose is to set to match UPS capabilities.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputOverVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an output over voltage condition will be generated. \nSpecified as percent deviation from nominal.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputUnderVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an output under voltage condition will be generated. \nSpecified as percent deviation from nominal.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputOverCurrentThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an over current condition will be generated. \nSpecified as a percent of the panel breaker rating.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputOverCurrentNeutralThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an Over current neutral condition will be generated. \nSpecified as a percent of the panel breaker rating.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputUnderCurrentThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an under current condition will be generated. \nSpecified as a percent of the panel breaker rating.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of System Output phase entries.\"\"\",\n        }, # scalar\n        \"xPDUSystemOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of system output table entries.\nThe number of entries is contained in the \nxPDUSystemOutputTableSize OID.\"\"\",\n        }, # table\n        \"xPDUSystemOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUSystemOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular system output phase.\"\"\",\n        }, # row\n        \"xPDUSystemOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each output phase entry in the table.\"\"\",\n        }, # column\n        \"xPDUSystemOutputVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line system output voltage available at the circuit panel. \nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUSystemOutputVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral system output voltage available at the circuit panel. \nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"xPDUSystemOutputPhaseCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System load current per phase. Measured in tenths of Amps.\"\"\",\n        }, # column\n        \"xPDUSystemOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System output power per phase. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"xPDUSystemOutputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System output power per phase. Measured in tenths of kVA.\"\"\",\n        }, # column\n        \"xPDUSystemOutputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.4.14.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Power Factor of the system output per phase.\nA value of 100 representing a unity Power Factor (1.00).\nMeasured in hundredths.\"\"\",\n        }, # column\n        \"xPDUGroundMonitorPoint\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.5\",\n        }, # node\n        \"xPDUGroundCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the current measured in the earth ground conductor.\nMeasured in tenths of Amps, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xPDUGroundCurrentThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.3.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which a ground current over current \ncondition will be generated. Specified in tenths of Amps.\"\"\",\n        }, # scalar\n        \"xPDUCircuitBreakers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4\",\n        }, # node\n        \"xPDUSystemBreakers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1\",\n        }, # node\n        \"xPDUSystemBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of system breaker entries.\"\"\",\n        }, # scalar\n        \"xPDUSystemBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of system breaker entries.\nThe number of entries is contained in the \nxPDUSystemBreakerTableSize OID.\"\"\",\n        }, # table\n        \"xPDUSystemBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUSystemBreakerTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular system breaker.\"\"\",\n        }, # row\n        \"xPDUSystemBreakerTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of system breaker entries in the table.\"\"\",\n        }, # column\n        \"xPDUSystemBreakerDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A brief description of the system breakers.\"\"\",\n        }, # column\n        \"xPDUSystemBreakerPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether this breaker is open(1) or closed(2).\"\"\",\n        }, # column\n        \"xPDUBranchBreakers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2\",\n        }, # node\n        \"xPDUNumOfBranchBreakers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of branch breakers (panel positions) in the Panel.\nreturns 42 for a 1-panel or 84 for a 2-panel system.\"\"\",\n        }, # scalar\n        \"xPDUBranchBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of branch breaker entries determined by the xPDUNumOfBranchBreakers OID.\"\"\",\n        }, # scalar\n        \"xPDUBranchBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of branch breaker table entries. The \nnumber of entries is given by the value of xPDUBranchBreakerTableSize\nThe number of entries is contained in the xPDUBranchBreakerTableSize OID.\"\"\",\n        }, # table\n        \"xPDUBranchBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUBranchBreakerTableIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular branch breaker (panel position).\"\"\",\n        }, # row\n        \"xPDUBranchBreakerTableIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of branch breaker entries in the table.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates current rating of this breaker.  \n0=Breaker is not present.\n1=Earth leakage connection.\n2=Neutral connection.\nA value greater than 2 indicates breaker current rating in Amps.\nA value above 60 Amp will signify a remote feed.\nThe xPDUBranchBreakerRDPFeed OID will indicate which breakers are\nconfigured as a remote drop.\nNote: When setting branch circuit thresholds/ratings for an entry,\nall positions tied (see the xPDUBranchBreakerTieIndicator OID)\nto this entry will inherit the new threshold/rating.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerRDPFeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"remoteDistribution\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noRemoteDistribution\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates that a breaker position is feeding a remote \ndistribution panel.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerTieIndicator\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"breakerUnTied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"breakerTied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether or not the breaker in this position \nis logically associated with the breaker immediately below it.\nThis setting is used grouping the breakers feeding \na multi-pole branch circuit.\nNote: When setting an entry's branch breaker tie indicator to breakerTied,\nall the positions that are tied to this breaker will take on the rating\nand thresholds for this entry of the table.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the branch current in tenths of  Amps or -1 when not available.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerOverCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which a branch circuit high current \ncondition will be generated. \nSpecified as a percent of the branch breaker rating.\nA value of zero indicates that the threshold is disabled.\nNote: When setting branch circuit thresholds/ratings for an entry,\nall positions tied (see the xPDUBranchBreakerTieIndicator OID)\nto this entry will inherit the new threshold/rating.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerUnderCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a branch circuit low current \ncondition will be generated. \nSpecified as a percent of the branch breaker rating.\nA value of zero indicates that the threshold is disabled.\nNote: When setting branch circuit thresholds/ratings for an entry,\nall positions tied (see the xPDUBranchBreakerTieIndicator OID)\nto this entry will inherit the new threshold/rating.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerMaxCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which a branch circuit maximum current \ncondition will be generated. \nSpecified as a percent of the branch breaker rating.\nA value of zero indicates that the threshold is disabled.\nNote: When setting branch circuit thresholds/ratings for an entry,\nall positions tied (see the xPDUBranchBreakerTieIndicator OID)\nto this entry will inherit the new threshold/rating.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerMinCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a branch circuit minimum current \ncondition will be generated. \nSpecified as a percent of the branch breaker rating.\nA value of zero indicates that the threshold is disabled.\nNote: When setting branch circuit thresholds/ratings for an entry,\nall positions tied (see the xPDUBranchBreakerTieIndicator OID)\nto this entry will inherit the new threshold/rating.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the breaker.\"\"\",\n        }, # column\n        \"xPDUBranchBreakerLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.4.2.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the location of the breaker.\"\"\",\n        }, # column\n        \"xPDUInputContacts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5\",\n        }, # node\n        \"xPDUInputContactNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported by the PDU.\"\"\",\n        }, # scalar\n        \"xPDUInputContactTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input contact entries.\"\"\",\n        }, # scalar\n        \"xPDUInputContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the PDU.\nThe number of entries is contained in the \nxPDUInputContactTableSize OID.\"\"\",\n        }, # table\n        \"xPDUInputContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUInputContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"A contact entry containing information for a given contact.\"\"\",\n        }, # row\n        \"xPDUInputContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the contact on the PDU.\"\"\",\n        }, # column\n        \"xPDUInputContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the contact.\"\"\",\n        }, # column\n        \"xPDUInputContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal operating position of the contact.\"\"\",\n        }, # column\n        \"xPDUInputContactCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current state of the contact.\"\"\",\n        }, # column\n        \"xPDUOutputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6\",\n        }, # node\n        \"xPDUOutputRelaysNumRelays\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relays supported by the PDU.\"\"\",\n        }, # scalar\n        \"xPDUOutputRelaysTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relay entries.\"\"\",\n        }, # scalar\n        \"xPDUOutputRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output relays supported by the PDU.\nThe number of entries is contained in the \nxPDUOutputRelayTableSize OID.\"\"\",\n        }, # table\n        \"xPDUOutputRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xPDUOutputRelayNumber\",\n            ],\n            \"description\" :\n                \"\"\"A output relay entry containing information for a given contact.\"\"\",\n        }, # row\n        \"xPDUOutputRelayNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the output relay on the PDU.\"\"\",\n        }, # column\n        \"xPDUOutputRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the output relay.\"\"\",\n        }, # column\n        \"xPDUOutputRelayNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal operating position of the output relay.\"\"\",\n        }, # column\n        \"xPDUOutputRelayCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current state of the output relay.\"\"\",\n        }, # column\n        \"xPDUMiscGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.7\",\n        }, # node\n        \"xPDUEPOMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"armed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disarmed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether the EPO System is armed(1) or disarmed(2).\"\"\",\n        }, # scalar\n        \"xPDUTransformTempStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"overtemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noTransformerPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if the PDU's isolation transformer is over temperature.\"\"\",\n        }, # scalar\n        \"xPDUCoolingFanStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.15.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noCoolingFansPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if one or more of the PDU's cooling fans have failed.\"\"\",\n        }, # scalar\n        \"battMan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16\",\n        }, # node\n        \"battManIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1\",\n        }, # node\n        \"battManIdentProductName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the battery manager.\"\"\",\n        }, # scalar\n        \"battManIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager network interface hardware revision. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"battManIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager network interface firmware revision. \nThis value is set at the factory and can change with firmware update.\"\"\",\n        }, # scalar\n        \"battManIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date the battery manager was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"battManIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager model number character string. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"battManIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager serial number character string. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"battManSystemCalib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.2\",\n        }, # node\n        \"battManOhmicValueCorrectionFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The system ohmic value correction factor in percent.\"\"\",\n        }, # scalar\n        \"battManUnitCalib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3\",\n        }, # node\n        \"battManUnitCalibTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManUnitCalibTable.\"\"\",\n        }, # scalar\n        \"battManUnitCalibTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting calibration information from each unit in the system.\"\"\",\n        }, # table\n        \"battManUnitCalibEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManUnitCalibIndex\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"battManUnitCalibIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of unit calibration entries in the table.\"\"\",\n        }, # column\n        \"battManUnitSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the unit.\"\"\",\n        }, # column\n        \"battManBatteryVoltageZeroCalib\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit battery voltage zero calibration in millivolts.\"\"\",\n        }, # column\n        \"battManBatteryVoltageSpanCalib\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit battery voltage span calibration in percent.\"\"\",\n        }, # column\n        \"battManStringCalib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4\",\n        }, # node\n        \"battManStringCalibTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManStringCalibTable.\"\"\",\n        }, # scalar\n        \"battManStringCalibTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting calibration information from each string in the system.\"\"\",\n        }, # table\n        \"battManStringCalibEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManStringCalibIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManStringCalibIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of string calibration entries in the table.\"\"\",\n        }, # column\n        \"battManDCCurrentZeroCalib\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string DC current zero calibration in tenths of amps.\"\"\",\n        }, # column\n        \"battManACCurrentZeroCalib\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string AC current zero calibration in tenths of amps.\"\"\",\n        }, # column\n        \"battManProbeRange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"amps1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"amps500\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"amps100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"amps200\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"amps2000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The string probe range in amps.\"\"\",\n        }, # column\n        \"battManBatteryCalib\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5\",\n        }, # node\n        \"battManString1BatteryCalibTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString1BatteryCalibTable.\"\"\",\n        }, # scalar\n        \"battManString1BatteryCalibTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting calibration information from each battery in String 1.\"\"\",\n        }, # table\n        \"battManString1BatteryCalibEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString1BatteryCalibIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString1BatteryCalibIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of battery calibration entries in the table.\"\"\",\n        }, # column\n        \"battManString1BatteryInterTierOhmicValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The battery inter-tier ohmic value in ohms.  This corresponds to the ohmic \nvalue for the positive terminal of the battery.\"\"\",\n        }, # column\n        \"battManString2BatteryCalibTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString2BatteryCalibTable.\"\"\",\n        }, # scalar\n        \"battManString2BatteryCalibTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting calibration information from each battery in String 2.\"\"\",\n        }, # table\n        \"battManString2BatteryCalibEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString2BatteryCalibIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString2BatteryCalibIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of battery calibration entries in the table.\"\"\",\n        }, # column\n        \"battManString2BatteryInterTierOhmicValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The battery inter-tier ohmic value in ohms.\"\"\",\n        }, # column\n        \"battManConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6\",\n        }, # node\n        \"battManConfigApplication\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"silcon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\"\"\",\n        }, # scalar\n        \"battManConfigBatteryChemistry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"leadAcid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"nickel-Cadmium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The battery chemistry of the monitored batteries: \nLeadAcid(1) Lead Acid or \nNickel-Cadmium(2) Nickel-Cadmium.\"\"\",\n        }, # scalar\n        \"battManConfigBatteryAHCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amp hour capacity of the monitored batteries 5-2000 AH.\"\"\",\n        }, # scalar\n        \"battManConfigNumberofStrings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of strings in the battery manager system.\"\"\",\n        }, # scalar\n        \"battManConfigBatteriesperString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of batteries per string.\"\"\",\n        }, # scalar\n        \"battManConfigCellsperBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of cells per battery (1 - 6 for lead-acid, 1 - 2 for NiCd.\"\"\",\n        }, # scalar\n        \"battManConfigMinCellVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum battery cell voltage alarm limit in millivolts DC.\"\"\",\n        }, # scalar\n        \"battManConfigMaxCellVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum battery cell voltage alarm limit in millivolts DC.\"\"\",\n        }, # scalar\n        \"battManConfigMaxPilotTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum pilot battery temperature alarm limit in tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"battManConfigMaxPilotTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum pilot battery temperature alarm limit in tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"battManConfigMaxAmbientTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum ambient temperature alarm limit in tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"battManConfigMaxAmbientTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum ambient temperature alarm limit in tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"battManConfigMinAmbientTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Minimum Ambient Temperature alarm limit in tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"battManConfigMinAmbientTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Minimum Ambient Temperature alarm limit in tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"battManConfigMaxRippleCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum ripple current alarm limit for the monitored battery \nstrings in percent of AH capacity.\"\"\",\n        }, # scalar\n        \"battManConfigMaxCurrentAcceptanceDeviation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum current acceptance deviation alarm limit in percent.\"\"\",\n        }, # scalar\n        \"battManConfigMonitorWireLength\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fiftyFeetOrLess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"moreThanFiftyFeet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The monitor wire length:\nfiftyFeetOrLess (1) indicates that the wire length is less than or equal to 50 feet.\nmoreThanFiftyFeet (2) indicates that the wire length is greater than 50 feet.\"\"\",\n        }, # scalar\n        \"battManConfigDischargeVoltageAlarmLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The discharge voltage alarm level in percent.\"\"\",\n        }, # scalar\n        \"battManConfigAutoAnnunciatorReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The annunciator output signal reset method:\ndisabled(1) means the annunciator signal output will be reset when the reset button is pressed.\nenabled(2) means the annunciator will stop signaling when all alarm conditions clear.\"\"\",\n        }, # scalar\n        \"battManConfigSuspendCellVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is used along with the number of cells per battery \nand the number of batteries per string to determine if \na battery string has violated the low voltage limit. If \nso, the Battery Management System will enter suspend mode.\nMeasured in millivolts DC\"\"\",\n        }, # scalar\n        \"battManConfigOhmicTestWaitTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time in seconds after a discharge event before \ndata will be collected for the ohmic value calculation.\"\"\",\n        }, # scalar\n        \"battManConfigNumberOfBoosts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.6.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of consecutive times the Battery Management \nSystem applies a charge to each battery during a boost \ncycle.  Batteries with a Rated Battery AH Capacity \nless than or equal to 120 AH will always have a value\nof one for Number of Boosts.\"\"\",\n        }, # scalar\n        \"battManAlarm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.7\",\n        }, # node\n        \"battManAlarmManagementController\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Management Controller Alarm is : \nnormal(1) no alarm conditions identified\nalarm(2) an alarm condition exists.\"\"\",\n        }, # scalar\n        \"battManAlarmBatteries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Batteries Alarm is : \nnormal(1) no alarm conditions identified\nalarm(2) an alarm condition exists.\"\"\",\n        }, # scalar\n        \"battManAlarmCharger\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Charger Alarm is : \nnormal(1) no alarm conditions identified\nalarm(2) an alarm condition exists.\"\"\",\n        }, # scalar\n        \"battManAlarmEnvironment\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Environment Alarm is : \nnormal(1) no alarm conditions identified\nalarm(2) an alarm condition exists.\"\"\",\n        }, # scalar\n        \"battManSystemStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8\",\n        }, # node\n        \"battManSystemAmbientTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system ambient temperature in tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"battManSystemAmbientTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system ambient temperature in tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"battManSystemPilotTempC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system pilot temperature in tenths of degrees Celsius.\"\"\",\n        }, # scalar\n        \"battManSystemPilotTempF\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system pilot temperature in tenths of degrees Fahrenheit.\"\"\",\n        }, # scalar\n        \"battManSystemAmbientHighTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system has a high temperature alarm.\"\"\",\n        }, # scalar\n        \"battManSystemAmbientLowTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system has a low temperature alarm.\"\"\",\n        }, # scalar\n        \"battManSystemPilotBatteryHighTempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system has a pilot battery high temperature alarm.\"\"\",\n        }, # scalar\n        \"battManSystemPilotProbeDisconnected\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system pilot probe is disconnected.\"\"\",\n        }, # scalar\n        \"battManSystemAmbientProbeDisconnected\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system ambient probe is disconnected.\"\"\",\n        }, # scalar\n        \"battManSystemConfigurationInvalid\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system is not configured correctly.\"\"\",\n        }, # scalar\n        \"battManSystemSuspendVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.8.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the system has suspended voltage scans.\"\"\",\n        }, # scalar\n        \"battManStringStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9\",\n        }, # node\n        \"battManStringTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManStringTable.\"\"\",\n        }, # scalar\n        \"battManStringTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each string \nin the system. \"\"\",\n        }, # table\n        \"battManStringEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManStringIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManStringIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of string entries in the table.\"\"\",\n        }, # column\n        \"battManStringCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string current in tenths of amps.\"\"\",\n        }, # column\n        \"battManStringRippleCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string ripple current in tenths of amps.\"\"\",\n        }, # column\n        \"battManStringChargerHighVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the string charger has a high voltage alarm.\"\"\",\n        }, # column\n        \"battManStringChargerLowVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the string charger has a low voltage alarm.\"\"\",\n        }, # column\n        \"battManStringCurrentProbeDisconnected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the string charger probe is disconnected.\"\"\",\n        }, # column\n        \"battManStringOnBattery\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the string is in the on-battery state.\"\"\",\n        }, # column\n        \"battManStringHighRippleCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the string has a high ripple current.\"\"\",\n        }, # column\n        \"battManStringVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sum of the voltages for all of the batteries on a \nstring in millivolts DC.\"\"\",\n        }, # column\n        \"battManStringDischargeLess5Seconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of recorded discharges lasting less than \n5 seconds.\"\"\",\n        }, # column\n        \"battManStringDischarge5to10Seconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of recorded discharges lasting between 5 \nand 10 seconds.\"\"\",\n        }, # column\n        \"battManStringDischarge10to60Seconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of recorded discharges lasting between 10 \nand 60 seconds.\"\"\",\n        }, # column\n        \"battManStringDischargeMore60Seconds\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.9.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of recorded discharges lasting more than \n60 seconds (1 minute).\"\"\",\n        }, # column\n        \"battManBatteryStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10\",\n        }, # node\n        \"battManString1BatteryTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString1BatteryTable.\"\"\",\n        }, # scalar\n        \"battManString1BatteryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each string \nin the system. \"\"\",\n        }, # table\n        \"battManString1BatteryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString1BatteryIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString1BatteryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of string entries in the table.\"\"\",\n        }, # column\n        \"battManString1BatteryVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery voltage in millivolts DC.\"\"\",\n        }, # column\n        \"battManString1BatteryLowestVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lowest battery discharge voltage during the last power event in millivolts DC.\"\"\",\n        }, # column\n        \"battManString1BatteryCellShorted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that a battery cell is shorted.\"\"\",\n        }, # column\n        \"battManString1BatteryOpenFuseOrConnection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that a fuse or connection is open.\"\"\",\n        }, # column\n        \"battManString1BatteryLowCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has low capacity.\"\"\",\n        }, # column\n        \"battManString1BatteryHighOhmicValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a high ohmic value.\"\"\",\n        }, # column\n        \"battManString1BatteryThermalRunaway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a thermal runaway condition.\"\"\",\n        }, # column\n        \"battManString1BatteryDryout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a dryout condition.\"\"\",\n        }, # column\n        \"battManString1BatteryUserHighVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe user level high voltage limit.\"\"\",\n        }, # column\n        \"battManString1BatteryUserLowVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe user level low voltage limit.\"\"\",\n        }, # column\n        \"battManString1BatteryChemHighVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe chemistry level high voltage limit.\"\"\",\n        }, # column\n        \"battManString1BatteryChemLowVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe chemistry level low voltage limit.\"\"\",\n        }, # column\n        \"battManString1BatteryOpenCell\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates the battery has an open \ncell or an inter-connection is abnormal.\"\"\",\n        }, # column\n        \"battManString2BatteryTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString2BatteryTable.\"\"\",\n        }, # scalar\n        \"battManString2BatteryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each string \nin the system. \"\"\",\n        }, # table\n        \"battManString2BatteryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString2BatteryIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString2BatteryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of string entries in the table.\"\"\",\n        }, # column\n        \"battManString2BatteryVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery voltage in millivolts DC.\"\"\",\n        }, # column\n        \"battManString2BatteryLowestVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The lowest battery discharge voltage during the last power event in millivolts DC.\"\"\",\n        }, # column\n        \"battManString2BatteryCellShorted\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that a battery cell is shorted.\"\"\",\n        }, # column\n        \"battManString2BatteryOpenFuseOrConnection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that a fuse or connection is open.\"\"\",\n        }, # column\n        \"battManString2BatteryLowCapacity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has low capacity.\"\"\",\n        }, # column\n        \"battManString2BatteryHighOhmicValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a high ohmic value.\"\"\",\n        }, # column\n        \"battManString2BatteryThermalRunaway\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a thermal runaway condition.\"\"\",\n        }, # column\n        \"battManString2BatteryDryout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has a dryout condition.\"\"\",\n        }, # column\n        \"battManString2BatteryUserHighVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe user level high voltage limit.\"\"\",\n        }, # column\n        \"battManString2BatteryUserLowVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe user level low voltage limit.\"\"\",\n        }, # column\n        \"battManString2BatteryChemHighVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe chemistry level high voltage limit.\"\"\",\n        }, # column\n        \"battManString2BatteryChemLowVoltageAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates a battery has violated \nthe chemistry level low voltage limit.\"\"\",\n        }, # column\n        \"battManString2BatteryOpenCell\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.10.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates the battery has an open \ncell or an inter-connection is abnormal.\"\"\",\n        }, # column\n        \"battManInputContactStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11\",\n        }, # node\n        \"battManInputContactTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManInputContactTable.\"\"\",\n        }, # scalar\n        \"battManInputContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information from each contact \nin the system. \"\"\",\n        }, # table\n        \"battManInputContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManInputContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"The contact to get data from.\"\"\",\n        }, # row\n        \"battManInputContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of contact entries in the table.\"\"\",\n        }, # column\n        \"battManInputContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the input contact.\"\"\",\n        }, # column\n        \"battManInputContactAlarmState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates that the alarm condition is active for this contact.\"\"\",\n        }, # column\n        \"battManInputContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to open(1), the input contact is in the open state.\nWhen set to closed(2), the input contact is in the closed state.\"\"\",\n        }, # column\n        \"battManInputContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to open(1), the input contact is normally open.\nWhen set to closed(2), the input contact is normally closed.\"\"\",\n        }, # column\n        \"battManInputContactAlarmDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.11.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The input contact alarm delay time in seconds.\"\"\",\n        }, # column\n        \"battManControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.12\",\n        }, # node\n        \"battManRemoteAnnunciatorReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset the user interface annunciator.\nGetting this OID will do nothing and return the noOperation(1) value.\"\"\",\n        }, # scalar\n        \"battManResetChargeCurrentDeviationBenchmark\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.12.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset the charge current deviation benchmark.\nGetting this OID will do nothing and return the noOperation(1) value.\"\"\",\n        }, # scalar\n        \"battManResetLowestDischargeVoltages\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.12.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset the lowest discharge voltages.\nGetting this OID will do nothing and return the noOperation(1) value.\"\"\",\n        }, # scalar\n        \"battManResetDischargeCounters\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.12.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset(2) will reset all discharge event counters.\nGetting this OID will do nothing and return the noOperation(1) value.\"\"\",\n        }, # scalar\n        \"battManTestResults\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13\",\n        }, # node\n        \"battManString1OhmicValueLastDischargeInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Informational text showing the date/time, load, and pilot temperature for the string\nduring the last discharge when ohmic values were recorded.\"\"\",\n        }, # scalar\n        \"battManString1OhmicValueTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString1OhmicValueTable.\"\"\",\n        }, # scalar\n        \"battManString1OhmicValueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting ohmic value information from each battery in String 1.\"\"\",\n        }, # table\n        \"battManString1OhmicValueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString1OhmicValueIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString1OhmicValueIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery number.\"\"\",\n        }, # column\n        \"battManString1OhmicValueData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery inter-tier ohmic value in ohms.\nNote: Zero or negative values are invalid and may indicate \nfaulty calibration of ohmic value correction factors.\"\"\",\n        }, # column\n        \"battManString1ResponseTestChangeTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString1ResponseTestChangeTable.\"\"\",\n        }, # scalar\n        \"battManString1ResponseTestChangeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting response test change information from each battery in String 1.\"\"\",\n        }, # table\n        \"battManString1ResponseTestChangeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString1ResponseTestChangeIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString1ResponseTestChangeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of the entries in the table.\"\"\",\n        }, # column\n        \"battManString1ResponseTestChangeData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery response test change in percent.\"\"\",\n        }, # column\n        \"battManString2OhmicValueLastDischargeInfo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Informational text showing the date/time, load, and pilot temperature for the string\nduring the last discharge when ohmic values were recorded.\"\"\",\n        }, # scalar\n        \"battManString2OhmicValueTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString2OhmicValueTable.\"\"\",\n        }, # scalar\n        \"battManString2OhmicValueTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting ohmic value information from each battery in String 2.\"\"\",\n        }, # table\n        \"battManString2OhmicValueEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString2OhmicValueIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString2OhmicValueIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of battery calibration entries in the table.\"\"\",\n        }, # column\n        \"battManString2OhmicValueData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery inter-tier ohmic value in ohms.\nNote: Zero or negative values are invalid and may indicate \nfaulty calibration of ohmic value correction factors.\"\"\",\n        }, # column\n        \"battManString2ResponseTestChangeTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManString2ResponseTestChangeTable.\"\"\",\n        }, # scalar\n        \"battManString2ResponseTestChangeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting response test change information from each battery in String 2.\"\"\",\n        }, # table\n        \"battManString2ResponseTestChangeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManString2ResponseTestChangeIndex\",\n            ],\n            \"description\" :\n                \"\"\"The string to get data from.\"\"\",\n        }, # row\n        \"battManString2ResponseTestChangeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of the entries in the table.\"\"\",\n        }, # column\n        \"battManString2ResponseTestChangeData\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.13.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery response test change in percent.\"\"\",\n        }, # column\n        \"battManUnitStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14\",\n        }, # node\n        \"battManUnitStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the battManUnitStatusTable.\"\"\",\n        }, # scalar\n        \"battManUnitStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting status information from each unit in the system.\"\"\",\n        }, # table\n        \"battManUnitStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"battManUnitStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"The unit to get data from.\"\"\",\n        }, # row\n        \"battManUnitStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of unit status entries in the table.\"\"\",\n        }, # column\n        \"battManUnitStatusSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager unit serial number character string. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"battManUnitHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager unit hardware revision. \nThis value is set at the factory.\"\"\",\n        }, # column\n        \"battManUnitFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The battery manager unit firmware revision. \nThis value is set at the factory and can change with firmware update.\"\"\",\n        }, # column\n        \"battManUnitCommLoss\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates the system has lost \ncommunication with the unit.\"\"\",\n        }, # column\n        \"battManUnitRelayStuck\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.16.14.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When set to alarm(2), indicates the unit monitor relay \nis stuck.\"\"\",\n        }, # column\n        \"xATS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17\",\n        }, # node\n        \"xATSIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1\",\n        }, # node\n        \"xATSIdentProductName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the transfer switch unit.\"\"\",\n        }, # scalar\n        \"xATSIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the transfer switch. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSIdentFirmwareAppRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application firmware revision of the  transfer switch.\"\"\",\n        }, # scalar\n        \"xATSIdentFirmwareAppOSRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application operating system firmware revision of the transfer switch.\"\"\",\n        }, # scalar\n        \"xATSIdentFirmwareControllerRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the transfer switch controller firmware revision.\"\"\",\n        }, # scalar\n        \"xATSIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the transfer switch was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of the transfer switch.\nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of the transfer switch.\nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2\",\n        }, # node\n        \"xATSDeviceServiceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"threeWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of utility input to the transfer switch.\nEither 3 wires (delta), or 4 wires (wye).\"\"\",\n        }, # scalar\n        \"xATSDeviceNominalVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal line-to-neutral system voltage.\nMeasured in Volts,  line-to-line for a 3-wire service or \nline-to-neutral for a 4-wire service. -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSDeviceNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal system frequency. Measured in tenths of Hertz.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSDeviceTransferSwitchRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The rating of the transfer switch.\nMeasured in Amps.\"\"\",\n        }, # scalar\n        \"xATSDeviceDCBackUpPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates if a DC backup is present or not.\"\"\",\n        }, # scalar\n        \"xATSSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3\",\n        }, # node\n        \"xATSSwitchStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.1\",\n        }, # node\n        \"xATSSwitchStatusSelectedSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"source1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"source2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The source which is currently selected, i.e. supplying power to the load.\"\"\",\n        }, # scalar\n        \"xATSSwitchStatusOperationalMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notInAutoAbnormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operating mode of the transfer switch. When the ATS is in\nautomatic mode, generator starting and ATS transferring is all done automatically\nas needed based on the state of source 1.  Automatic operation is halted when the\nATS is in either of the notInAuto modes.\nA mode of notInAuto indicates that the automatic operation switch is in the\ndisabled position, as indicated by the xATSSwitchStatusAutomaticOperationSwitch OID.\nThe notInAutoAbnormal condition indicates that an abnormal\ncondition has caused the transfer switch to halt automatic operation.\nIn this case, traps can indicate the exact problem. In the case of\nnotInAutoAbnormal, refer to the operation manual for details\non how debug the condition and restore automatic operation.\"\"\",\n        }, # scalar\n        \"xATSSwitchStatusAutomaticOperationSwitch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the automatic operation switch on the front of the transfer switch.\"\"\",\n        }, # scalar\n        \"xATSSwitchStatusEngineStartSignal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"run\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the Start/Stop contact which signals the generator\nengine to start/run. When the ATS is in automatic mode,\ngenerator starting/stopping is under ATS control.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettings\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2\",\n        }, # node\n        \"xATSSwitchSettingsLowVoltageTransferPoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lowest acceptable voltage condition at source 1. \nWhen any phase of source 1 is lower than this voltage,\nsource quality is considered bad and the generator run signal\nis asserted to begin generator operation. \nSpecified in volts,  line-to-line for a 3-wire service or \nline-to-neutral for a 4-wire service.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsHighVoltageTransferPoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The highest acceptable voltage condition at source 1. \nWhen any phase of source 1 is greater than this voltage,\nsource quality is considered bad and the generator run signal\nis asserted to begin generator operation. \nSpecified in volts,  line-to-line for a 3-wire service or \nline-to-neutral for a 4-wire service.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsMaxFrequencyDeviation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum acceptable frequency deviation condition from nominal at source 1. \nWhen source 1 frequency is outside the specified range,\nsource quality is considered bad and the generator run signal\nis asserted to begin generator operation. \nSpecified in  tenths of Hertz above or below nominal.\nA value of zero indicates that frequency is ignored when \ndetermining source quality.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsMinPhaseBalance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum required phase balance at source 1. \nWhen the percentage difference between the minimum and maximum \nphase voltage measurements at source 1 is greater than this value,\nsource quality is considered bad and the generator run signal\nis asserted to begin generator operation.\nSpecified as a percentage. A value of zero indicates that phase balance\nis ignored when determining source quality. -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsNominalRotation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"abc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cba\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"any\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The nominal phase rotation (or phase sequence) required by the load.\nFor certain types of equipment, such as rotating machinery, phase rotation\nis critical for proper operation as it determines the direction which motors\nwill rotate (clockwise or counterclockwise).\nSource quality will be seen as bad if the rotation measured at that\nATS input does not match this setting.\nIf this setting is set to any, phase rotation is ignored.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsAllowClosedTransfer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting enables seamless (closed) transfers between sources. \nWhen possible, both source 1 and source 2 are closed to the output \nfor a brief time. If closed transfer is not possible within the amount\nof time specified by the xATSSwitchSettingsMaxSyncTime OID,\nan open transfer will be executed.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsMaxSyncTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When attempting/seeking to perform a closed transfer, this setting defines\nthe maximum time allowed before the transfer switch will give up and perform\nan open transfer. Specified in seconds.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsNeutralTransferTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting defines how long both source 1 and source 2 will be \ndisconnected from the output, during an open transfer. \nSpecified in seconds.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsClearLatchedAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Clears any latched alarm conditions.\"\"\",\n        }, # scalar\n        \"xATSSwitchSettingsSetToFactoryDefaults\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sets all transfer switch settings to factory default values.\"\"\",\n        }, # scalar\n        \"xATSSwitchTimers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3\",\n        }, # node\n        \"xATSSwitchTimersTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of transfer switch timer entries.\"\"\",\n        }, # scalar\n        \"xATSSwitchTimersTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of timers supported by ATS.\nThe number of entries is contained in the xATSSwitchTimersTableSize OID.\"\"\",\n        }, # table\n        \"xATSSwitchTimersEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSwitchTimersIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about an individual ATS timer.\"\"\",\n        }, # row\n        \"xATSSwitchTimersIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of timer entries in the table.\"\"\",\n        }, # column\n        \"xATSSwitchTimersName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the individual timer.Refer to ATS operation manual,\nor on-line help, for detailed descriptions of ATS timers.\"\"\",\n        }, # column\n        \"xATSSwitchTimersAbort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This aborts the individual timer.\"\"\",\n        }, # column\n        \"xATSSwitchTimersStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the individual timer. Designates whether this timer\nentry is currently running or inactive.\"\"\",\n        }, # column\n        \"xATSSwitchTimersRemainingTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time remaining for this timer entry.\nSpecified in seconds.\"\"\",\n        }, # column\n        \"xATSSwitchTimersDelaySetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay settings associated with this timer entry.\nWhen this timer entry is active, the timer value must exceed this setting\nbefore the ATS behavior associated with this timer is executed.\nRefer to ATS operation manual, or on-line help, for detailed \ndescriptions of ATS timers.\"\"\",\n        }, # column\n        \"xATSSwitchBlockMap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4\",\n        }, # node\n        \"xATSSwitchBlockMapTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of blocking map entries, or how many ATS actions can be blocked.\"\"\",\n        }, # scalar\n        \"xATSSwitchBlockMapTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of blocking maps supported by the ATS.\nThe number of entries is contained in the xATSSwitchBlockMapTableSize OID.\"\"\",\n        }, # table\n        \"xATSSwitchBlockMapEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSwitchBlockMapIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about a specific ATS blocking map.\"\"\",\n        }, # row\n        \"xATSSwitchBlockMapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of blocking map entries in the table.\"\"\",\n        }, # column\n        \"xATSSwitchBlockMapName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string describing the ATS action to be blocked.\"\"\",\n        }, # column\n        \"xATSSwitchBlockMapStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Represents the status of this blocking map entry, in bit-mapped format.\nA non-zero value indicates that this entry's ATS action is currently being blocked.\nThe bit(s) set indicate which input(s) are causing the blocking (bit0, bit1, etc).\n\nbit 0 - Contact 1\nbit 1 - Contact 2\nbit 2 - Contact 3\nbit 3 - Contact 4.\"\"\",\n        }, # column\n        \"xATSSwitchBlockMapSetting\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting designates the inputs that block the ATS action\nThe mapping is specified as a bit-field, where each bit set indicates\nthe input that blocks the ATS action associated with the entry.\n\nbit 0 - Contact 1\nbit 1 - Contact 2\nbit 2 - Contact 3\nbit 3 - Contact 4.\"\"\",\n        }, # column\n        \"xATSSwitchStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5\",\n        }, # node\n        \"xATSSwitchStatisticsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of transfer switch statistics entries.\"\"\",\n        }, # scalar\n        \"xATSSwitchStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of statistics supported by ATS.\nThe number of entries is contained in the xATSSwitchStatisticsTableSize OID.\"\"\",\n        }, # table\n        \"xATSSwitchStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSwitchStatisticsIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about an individual ATS statistic.\"\"\",\n        }, # row\n        \"xATSSwitchStatisticsIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of ATS statistics entries in the table.\"\"\",\n        }, # column\n        \"xATSSwitchStatisticsName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the name of the ATS statistic associated with this entry.\"\"\",\n        }, # column\n        \"xATSSwitchStatisticsValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of the ATS statistic associated with this entry.\"\"\",\n        }, # column\n        \"xATSSwitchStatisticsReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.3.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This will reset the individual ATS statistic associated with this entry.\"\"\",\n        }, # column\n        \"xATSACMonitoringPoint\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4\",\n        }, # node\n        \"xATSSource1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1\",\n        }, # node\n        \"xATSSource1Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"String used to identify source 1.\"\"\",\n        }, # scalar\n        \"xATSSource1Position\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tripped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current position of the switch at source 1.\"\"\",\n        }, # scalar\n        \"xATSSource1Frequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency at source 1 in tenths of Hertz.\n-1 if unavailable.\"\"\",\n        }, # scalar\n        \"xATSSource1Quality\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phaseImbalance\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqOutOfRange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"badRotation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current line quality of source 1.\"\"\",\n        }, # scalar\n        \"xATSSource1Rotation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"abc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cba\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase rotation measured at the source 1 input of the ATS.\nThe sequence is a reference to the order in which the three phases \npass the zero-crossing boundary in time.\"\"\",\n        }, # scalar\n        \"xATSSource1TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input voltage entries at the source 1 input of the ATS.\"\"\",\n        }, # scalar\n        \"xATSSource1PhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of voltage table entries for source 1. The number of \nentries are the phase entries. The number of entries is contained in the \nxATSSource1TableSize OID.\"\"\",\n        }, # table\n        \"xATSSource1PhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSource1Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input voltage phase at the source 1 input of the ATS.\"\"\",\n        }, # row\n        \"xATSSource1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each phase utilized at source 1.\"\"\",\n        }, # column\n        \"xATSSource1VoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Source 1 line-to-line input voltage. \nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"xATSSource1VoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.1.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Source 1 line-to-neutral input voltage. \nMeasured in tenths of Volts. -1 for a 3-wire service type.\"\"\",\n        }, # column\n        \"xATSSource2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2\",\n        }, # node\n        \"xATSSource2Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"String used to identify source 2.\"\"\",\n        }, # scalar\n        \"xATSSource2Position\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tripped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current position of the switch at source 2.\"\"\",\n        }, # scalar\n        \"xATSSource2Frequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency at source 2 in tenths of Hertz.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSource2Quality\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sourceGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lowVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highVoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"phaseImbalance\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqOutOfRange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"badRotation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current line quality of source 2.\"\"\",\n        }, # scalar\n        \"xATSSource2Rotation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"abc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cba\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The phase rotation measured at the source 2 input of the ATS.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSSource2TableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input voltage entries at the source 2 input of the ATS.\"\"\",\n        }, # scalar\n        \"xATSSource2PhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of voltage table entries for the source 2. The number of\nentries are the phase entries. The number of entries is contained in the\nxATSSource2TableSize OID.\"\"\",\n        }, # table\n        \"xATSSource2PhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSource2Index\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input voltage phase at the source 2 input of the ATS.\"\"\",\n        }, # row\n        \"xATSSource2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each phase utilized at the source 2.\"\"\",\n        }, # column\n        \"xATSSource2VoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Source 2 line-to-line input voltage. \nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"xATSSource2VoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.2.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Source 2 line-to-neutral input voltage. \nMeasured in tenths of Volts. -1 for a 3-wire service type.\"\"\",\n        }, # column\n        \"xATSSystemOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3\",\n        }, # node\n        \"xATSSystemOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system output frequency in tenths of Hertz.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputTotalPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the total system output power in tenths of kW.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputTotalApparentPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Shows the total system output power in tenths of kVA.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputTotalPowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total power factor of the system output.\nA value of 100 representing a unity power factor (1.00)\nSpecified in hundredths.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputFrequencyTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"freqToleranceOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"freqTolerancePointTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"freqTolerancePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"freqToleranceOne\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqToleranceOnePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"freqToleranceTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"freqToleranceThree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"freqToleranceFour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"freqToleranceFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"freqToleranceNine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Shows the panel output frequency tolerance in +/- Hertz.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputOverVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an output over voltage condition will be generated. \nSpecified as tenths of percent deviation from nominal.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputUnderVoltThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an output under voltage condition will be generated. \nSpecified as tenths of percent deviation from nominal.\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputOverCurrentThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold above which an over current condition will be generated. \nSpecified as a percent of the transfer switch rating (xATSDeviceTransferSwitchRating OID).\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputUnderCurrentThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which an under current condition will be generated. \nSpecified as a percent of the transfer switch rating (xATSDeviceTransferSwitchRating OID).\nA value of zero indicates that the threshold is disabled.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputAlarmDelayThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Delay the generation of an output alarm.\nSpecified in seconds.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of system output phase entries.\"\"\",\n        }, # scalar\n        \"xATSSystemOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of system output table entries.\nThe number of entries is contained in the xATSSystemOutputTableSize OID.\"\"\",\n        }, # table\n        \"xATSSystemOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSSystemOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular system output phase.\"\"\",\n        }, # row\n        \"xATSSystemOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each system output phase utilized in this device.\"\"\",\n        }, # column\n        \"xATSSystemOutputVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line system output voltage available at the circuit panel. \nMeasured in tenths of Volts. -1 if not available.\"\"\",\n        }, # column\n        \"xATSSystemOutputVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral system output voltage available at the circuit panel.\nMeasured in tenths of Volts. -1 for a 3-wire service type or if not available.\"\"\",\n        }, # column\n        \"xATSSystemOutputPhaseCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System load current per phase. Measured in Amps.\n-1 if not available.\"\"\",\n        }, # column\n        \"xATSSystemOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System output power per phase. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"xATSSystemOutputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"system output power per phase. Measured in tenths of kVA.\"\"\",\n        }, # column\n        \"xATSSystemOutputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.4.3.12.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"indicates the power factor of the system output per phase.\nA value of 100 representing a unity power factor (1.00).\nMeasured in hundredths.\"\"\",\n        }, # column\n        \"xATSTesting\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5\",\n        }, # node\n        \"xATSTestingStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1\",\n        }, # node\n        \"xATSTestingStatusSelectTestProcess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"engineStartTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"systemLoadTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"generatorHoldTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"cancelTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of tests that can be selected when no test has been scheduled.\nengineStartTest and systemLoadTest may be selected when no tests \nare running.  Tests that are selected may be canceled manually.\"\"\",\n        }, # scalar\n        \"xATSTestingStatusTestStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTestInProcess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"testPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"startingEngine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"engineWarmingUp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"awaitingTransferToS2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"testingWithLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"awaitingRetransferToS1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"testingWithoutLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"stoppingEngine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"holdingOnGenerator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present system test status/state.\"\"\",\n        }, # scalar\n        \"xATSTestingStatusProfileWarmupTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time that the generator will warm up during a test.\nThis is portion of the test when the xATSTestingStatusTestStatus \nOID returns the value engineWarmingUp.\nSpecified in seconds.\"\"\",\n        }, # scalar\n        \"xATSTestingStatusProfileLoadedTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time that ATS will apply the system load to the generator\nduring a system load test.\nThis is portion of the test when the xATSTestingStatusTestStatus \nOID returns the value testingWithLoad.\nSpecified in minutes.\"\"\",\n        }, # scalar\n        \"xATSTestingStatusProfileUnloadedTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time that the generator will run following the warm up \nportion of a start test, or the loaded portion of a load test.\nThis is portion of the test when the xATSTestingStatusTestStatus \nOID returns the value testingWithoutLoad.\nSpecified in seconds.\"\"\",\n        }, # scalar\n        \"xATSTestingResults\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2\",\n        }, # node\n        \"xATSTestingResultsLastDateOfTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date of the last test that was performed, either scheduled or manual.\nTest results are available in the xATSTestingResultsLastResult OID.\nSpecified in the dd/mm/yyyy format, or 'none' if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsLastResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noResultsAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"startTestPassed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"loadTestPassed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"startSignalFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"failedGenNotInAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"failedGenEmerStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"failedGenShutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"failedGenDidNotStart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"failedS2NeverGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"genFailedDuringWarmup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"failureOnXferToS1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"genFailedLoaded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"failureOnRexferToS2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"failedOnCooldown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"genFailedToStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"failedAtsInternalFault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"failedAtsNotInAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"canceledManualTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"canceledScheduledTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The result of the last ATS/generator system test.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsTestLastTestTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time of day at which the last test was performed, either scheduled or manual. \nTest results are available in the xATSTestingResultsLastResult OID.\nSpecified in the hh:mm:ss format, or 'none' if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsLastCrankDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time spent cranking the generator before it started during the last test.\nSpecified in seconds, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsLastWarmupDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time spent in the engineWarmingUp state during the last system test.\nSpecified in seconds, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsLastLoadedDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time spent in the testingWithLoad state during the last system test.\nSpecified in seconds, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingResultsLastUnloadedDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time spent in the testingWithoutLoad state during the last system test.\nSpecified in seconds, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSTestingSchedule\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3\",\n        }, # node\n        \"xATSTestingScheduleFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"never\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"daily\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"weekly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"monthly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The frequency of running scheduled tests.\"\"\",\n        }, # scalar\n        \"xATSTestingScheduleTestDay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The desired day for the scheduled test. This object applies only\nwhen the xATSTestingScheduleFrequency OID is set to weekly or monthly.\nFor weekly test frequency, the string is the day the test will be run.\nFor monthly test frequency, the string indicates the day, \nand the instance within the month.\nFor example, for monthly frequency: 2nd Sunday, 3rd Monday, 4th Tuesday,\n             for weekly frequency: Sunday, Monday, Tuesday.\"\"\",\n        }, # scalar\n        \"xATSTestingScheduleTestTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time of day that the scheduled test will occur.\nSpecified in the format hh:mm.\"\"\",\n        }, # scalar\n        \"xATSTestingScheduleTestWithLoadInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"applyLoadEveryTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"neverApplyLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"applyLoadMonthly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"applyLoadMonthlyDetailed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This setting specifies which system tests should include applying the\nload to the generator. The applyLoadMonthlyDetailed entry\nin the list will apply load once, for each month represented in the\nxATSTestingScheduleTestWithLoadSelectMonth OID.\"\"\",\n        }, # scalar\n        \"xATSTestingScheduleTestWithLoadSelectMonth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The detailed selection for testing with load on a month-by-month basis.\nThis object is applicable when the xATSTestingScheduleTestWithLoadInterval\nis set to applyLoadMonthlyDetailed. Otherwise this selection will be ignored.\nFormat for this string is a comma-separated entry of months.\nFor example: Jan,Mar,Dec.\nThe string will return 'No Months Scheduled' if no months have been selected.\"\"\",\n        }, # scalar\n        \"xATSTestingScheduleNextTestDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the next scheduled test, in the format dd-mmm-yyyy.\"\"\",\n        }, # scalar\n        \"xATSTestingSimulatePowerFail\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.4\",\n        }, # node\n        \"xATSTestingSimulatePowerFailTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cancelSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fiveSecondsSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tenSecondsSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thirtySecondsSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"oneMinuteSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"threeMinutesSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"fiveMinutesSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"tenMinutesSimulation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object executes a simulated power failure for the duration indicated.\nSimulation can be aborted by selecting cancelSimulation.\"\"\",\n        }, # scalar\n        \"xATSTestingSimulatePowerFailTimeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.5.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the time remaining in seconds, for a simulated power failure.\na value of zero indicates that simulated power failure is not active.\"\"\",\n        }, # scalar\n        \"xATSInputContacts\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6\",\n        }, # node\n        \"xATSInputContactNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of contacts supported by the ATS.\"\"\",\n        }, # scalar\n        \"xATSInputContactTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input contact entries.\"\"\",\n        }, # scalar\n        \"xATSInputContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of contacts supported by the ATS.\nThe number of entries is contained in the \nxATSInputContactTableSize OID.\"\"\",\n        }, # table\n        \"xATSInputContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSInputContactNumber\",\n            ],\n            \"description\" :\n                \"\"\"A contact entry containing information for a given contact.\"\"\",\n        }, # row\n        \"xATSInputContactNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the contact on the ATS.\"\"\",\n        }, # column\n        \"xATSInputContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the contact.\"\"\",\n        }, # column\n        \"xATSInputContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal operating position of the contact.\"\"\",\n        }, # column\n        \"xATSInputContactCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current state of the contact.\"\"\",\n        }, # column\n        \"xATSOutputRelays\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7\",\n        }, # node\n        \"xATSOutputRelayNumRelays\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relays supported by the ATS.\"\"\",\n        }, # scalar\n        \"xATSOutputRelayTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output relay entries.\"\"\",\n        }, # scalar\n        \"xATSOutputRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output relays supported by the ATS.\nThe number of entries is contained in the \nxATSOutputRelayTableSize OID.\"\"\",\n        }, # table\n        \"xATSOutputRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSOutputRelayNumber\",\n            ],\n            \"description\" :\n                \"\"\"A output relay entry containing information for a given contact.\"\"\",\n        }, # row\n        \"xATSOutputRelayNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index identifying the output relay on the ATS.\"\"\",\n        }, # column\n        \"xATSOutputRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The description of the purpose/use of the output relay.\"\"\",\n        }, # column\n        \"xATSOutputRelayNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal operating position of the output relay.\"\"\",\n        }, # column\n        \"xATSOutputRelayCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.7.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value indicates the current state of the output relay.\"\"\",\n        }, # column\n        \"xATSMisc\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.17.8\",\n        }, # node\n        \"generator\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18\",\n        }, # node\n        \"xATSGenerator\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1\",\n        }, # node\n        \"xATSGeneratorIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1\",\n        }, # node\n        \"xATSGeneratorIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of the generator. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSGeneratorIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of the generator. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSGeneratorIdentDateofManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying when the generator was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"xATSGeneratorIdentVoltageConfiguration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage for which the generator's alternator is designed.\nSpecified in Volts line-to-line.\"\"\",\n        }, # scalar\n        \"xATSGeneratorIdentMaxPowerRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The max power rating of the generator. Specified in kW.\"\"\",\n        }, # scalar\n        \"xATSGeneratorIdentAlternatorFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency for which the generator's alternator is designed.\nSpecified in Hertz.\"\"\",\n        }, # scalar\n        \"xATSGeneratorStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.2\",\n        }, # node\n        \"xATSGeneratorStatusGeneratorName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name or label for the generator connected to the source 2 of the ATS.\"\"\",\n        }, # scalar\n        \"xATSGeneratorStatusOperational\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nocomm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ready\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"starting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"idle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"running\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"normalStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"emergencyStop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"notInAuto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"shutdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the generator. unavailable when unrecognized status is received.\"\"\",\n        }, # scalar\n        \"xATSGeneratorStatusModeSwitchPosition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"automatic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The position of the generator's auto-mode switch.\nIn automatic mode, the generator is started and stopped via the\nremote start contact, which has state indicated in the\nxATSGeneratorStatusRemoteStart OID.\nIn manual mode generator start/stop control is via local command only.\nOff prevents the generator from running.\"\"\",\n        }, # scalar\n        \"xATSGeneratorStatusRemoteStart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"run\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the generator's remote start contact, which is \nprovided as an output from the transfer switch to start/stop the \ngenerator when in automatic mode.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3\",\n        }, # node\n        \"xATSGeneratorAdvStatusBatteryVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage of the generator's starting battery.\nMeasured in tenths of VDC, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatusOilPressure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The generator's engine oil pressure.\nMeasured in tenths of Psi or kPa, based on the\nvalue of the xATSGeneratorSettingsMetricUnit OID,\nor -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatusCoolantTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current coolant temperature in the generator.\nMeasured in degrees Celsius or Fahrenheit, based on the\nvalue of the xATSGeneratorSettingsMetricUnit OID,\nor -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatusEngineRPM\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current engine speed of the generator. \nMeasured in RPM, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatusOilLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates adequate oil level in the generator.\"\"\",\n        }, # scalar\n        \"xATSGeneratorAdvStatusCoolantLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates adequate coolant level in the generator.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4\",\n        }, # node\n        \"xATSGeneratorOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output frequency of the generator.\nMeasured in tenths of Hertz, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutputTotalPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total output power of the generator.\nMeasured in tenths of tenths of kW, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutputTotalApparentPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total output power of the generator.\nMeasured in tenths of kVA, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutputTotalPowerFactor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the total load power factor of the generator.\nA value of 100 representing a unity power factor (1.00),\nor -1 when if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutputTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of generator output phase entries.\"\"\",\n        }, # scalar\n        \"xATSGeneratorOutputPhaseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of generator output table entries.\nThe number of entries is contained in the xATSGeneratorOutputTableSize OID.\"\"\",\n        }, # table\n        \"xATSGeneratorOutputPhaseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xATSGeneratorOutputPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a \nparticular generator output phase.\"\"\",\n        }, # row\n        \"xATSGeneratorOutputPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each generator output phase utilized in this device.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line generator output voltage. \nMeasured in Volts, or -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral generator output voltage. \nMeasured in volts, or -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputPhaseCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Generator load current per phase.\nMeasured in Amps, or -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Generator output power per phase. \nMeasured in tenths of kW, or -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputApparentPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Generator output power per phase. \nMeasured in tenths of kVA, or -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorOutputPowerFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.4.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the load power factor of the generator output per phase.\nA value of 100 representing a unity power factor (1.00),\nor -1 if not available.\"\"\",\n        }, # column\n        \"xATSGeneratorSettings\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5\",\n        }, # node\n        \"xATSGeneratorSettingsVoltageAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The voltage adjust of the generator.\nSpecified in volts line-to-line,\nor -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsFrequencyAdjust\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The frequency adjust of the generator.\nSpecified in tenths of Hertz.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsStartDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The delay, in seconds, after the remote run signal is activated\nbefore the generator's engine will be cranked to start, \nor -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsStopDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The delay, in seconds, before the generator will stop \nafter the remote run signal is deactivated,\nor -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsCrankCycleEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"When Crank Cycle is enabled, the engine will be cranked up to the time \nspecified by the xATSGeneratorSettingsCrankTime OID. \nIf the generator's engine does not start, there will be a pause as\nspecified by the xATSGeneratorSettingsCrankRestTime OID before the \nengine will be cranked again. This cycle is repeated as specified by\nthe xATSGeneratorSettingsNumberCrank OID.\nWhen crank cycle is disabled, the generator's engine will be \ncranked continuously until it starts.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsCrankTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The duration of engine cranking, in seconds, when starting the generator. \nApplicable when the xATSGeneratorSettingsCrankCycleEnable OID is enabled.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsCrankRestTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The pause duration, in seconds, following an unsuccessful attempt to start the generator. \nApplicable when the xATSGeneratorSettingsCrankCycleEnable OID is enabled.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsNumberCrank\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of failed crank attempts before giving up on starting the generator. \nApplicable when the xATSGeneratorSettingsCrankCycleEnable OID is enabled.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorSettingsMetricUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies the use of metric units in generator related OIDs, as well\nas on all other interfaces including the generator's local interface.\"\"\",\n        }, # scalar\n        \"xATSGeneratorService\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6\",\n        }, # node\n        \"xATSGeneratorServiceTotalRunHoursLifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total time that the generator engine has been run,\nover the life of the generator. Measured in hours.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceEngineStartsLifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of engine starts over the life of the generator.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceTotalkWhLifetime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total kWh of operation over the life of the generator.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceTotalRunHoursSinceMaintenance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total time that the generator engine has been run,\nsince last service maintenance. Measured in tenths of hours.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceEngineStartsSinceMaintenance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of engine starts since last service maintenance.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceTotalkWhMaintenance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total kWh of operation since last service maintenance.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceResetRecord\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Resets the engine start counter, engine run-hours, and kWh values that have\naccumulated in the generator since last maintenance.\nAlso, the last service date will be reset to the current system date, and \nany service alarms will be cleared.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceRecordResetDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date at which the generator's service record was reset, in dd-mmm-yyyy format.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceNextServiceDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Date at which the next generator service is due in dd-mmm-yyyy format. \nBased on the xATSGeneratorServiceCalendarIntervalThreshold OID \nor '' if the calendar-based threshold is set to off.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceRunHoursUntilServiceDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Run hours until the next generator service is due, in hours. \nBased on the xATSGeneratorServiceRunHoursThreshold OID \nor -1 if the run hour-based threshold is set to off.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceRunHoursThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"runThreshold100Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"runThreshold150Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"runThreshold200Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"runThreshold250Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"runThreshold300Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"runThreshold400Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"runThreshold500Hours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Run hour-based service interval. When the run-hours since\nservice surpasses this threshold, generator service is due.\"\"\",\n        }, # scalar\n        \"xATSGeneratorServiceCalendarIntervalThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"interval1month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"interval2month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"interval3month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"interval6month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"intervalyearly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Calendar-based service interval. When the next service date, \nas indicated by the xATSGeneratorServiceNextServiceDate OID\nis in the past, generator is due for service.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7\",\n        }, # node\n        \"xATSGeneratorFuelSystemType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"diesel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"propane\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"naturalGas\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of fuel used by the generator.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemTankSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Size of the generator's fuel tank.\nSpecified in gallons or liters, based on the value of the\nxATSGeneratorSettingsMetricUnit OID, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemFuelLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Fuel remaining in the generator tank.\nMeasured in percent of tank fill, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemRuntimePower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power value used in the runtime remaining calculation.\nMeasured in tenths of kW, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemEstimatedRunTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An estimate of available runtime for the generator, based on\navailable fuel as specified in the xATSGeneratorFuelSystemFuelLevel OID \nand kW load as specified in the xATSGeneratorFuelSystemRuntimePower OID.\nMeasured in tenths of hours, or -1 if not available.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemLowRunTimeThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"oneHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twoHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threeHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"fourHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fiveHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sixHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"twelveHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"oneDay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"twoDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"threeDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"fourDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"fiveDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"sixDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"sevenDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a low runtime alarm will exist.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemVeryLowRunTimeThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"oneHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"twoHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"threeHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"fourHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fiveHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sixHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"twelveHours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"oneDay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"twoDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"threeDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"fourDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"fiveDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"sixDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"sevenDays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a very low runtime alarm will exist.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemLowFuelLevelThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a low fuel alarm will exist, with a value of 0 indicating disabled. \nSpecified as percent of tank fill.\"\"\",\n        }, # scalar\n        \"xATSGeneratorFuelSystemVeryLowFuelLevelThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.18.1.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Threshold below which a very low fuel alarm will exist, with a value of 0 indicating disabled.\nSpecified as percent of tank fill.\"\"\",\n        }, # scalar\n        \"consolePortServer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19\",\n        }, # node\n        \"cpsAP930x\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1\",\n        }, # node\n        \"cpsAP930xSys\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1\",\n        }, # node\n        \"apCPSpname\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The product's name.\"\"\",\n        }, # scalar\n        \"apCPSversion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware's version.\"\"\",\n        }, # scalar\n        \"apCPSPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.3\",\n        }, # node\n        \"apCPSPwNum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the power supplies.\"\"\",\n        }, # scalar\n        \"apCPSPw1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"State of the first power supply. \n0 will indicate not installed,\n1 will indicate power ON,\n2 will indicate power OFF.\"\"\",\n        }, # scalar\n        \"apCPSPw2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"State of the second power supply.\n0 will indicate not installed,\n1 will indicate power ON,\n2 will indicate power OFF.\"\"\",\n        }, # scalar\n        \"apCPSPcmcia\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4\",\n        }, # node\n        \"apCPSNPcmcia\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of PCMCIA cards available.\"\"\",\n        }, # scalar\n        \"cpsCardIdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of PCMCIA card identifications.\"\"\",\n        }, # table\n        \"cpsCardIdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsCardIdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"Identification information for a PCMCIA card.\"\"\",\n        }, # row\n        \"cpsCardIdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the socket Card.\"\"\",\n        }, # column\n        \"cpsCardIdentProd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product identification string.\"\"\",\n        }, # column\n        \"cpsCardIdentMan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Manufacturer ID code.\"\"\",\n        }, # column\n        \"cpsCardIdentFunc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Function ID code.\"\"\",\n        }, # column\n        \"cpsCardIdentPCI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PCI ID\"\"\",\n        }, # column\n        \"cpsCardConfTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of socket configuration information.\"\"\",\n        }, # table\n        \"cpsCardConfEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsCardConfIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration information for a socket.\"\"\",\n        }, # row\n        \"cpsCardConfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the socket PCMCIA.\"\"\",\n        }, # column\n        \"cpsCardConfPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Power Settings.\"\"\",\n        }, # column\n        \"cpsCardConfType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interface Type.\"\"\",\n        }, # column\n        \"cpsCardConfInter\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Interrupt number.\"\"\",\n        }, # column\n        \"cpsCardConfFunc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Function.\"\"\",\n        }, # column\n        \"cpsCardConfCardv\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Card values.\"\"\",\n        }, # column\n        \"cpsCardConfPort1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"I/O Port 1.\"\"\",\n        }, # column\n        \"cpsCardConfPort2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"I/O Port 2.\"\"\",\n        }, # column\n        \"cpsCardStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of current socket status information.\"\"\",\n        }, # table\n        \"cpsCardStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsCardStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Current status information for a socket.\"\"\",\n        }, # row\n        \"cpsCardStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the socket PCMCIA.\"\"\",\n        }, # column\n        \"cpsCardStatusCard\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Card State.\"\"\",\n        }, # column\n        \"cpsCardStatusFunc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current Function.\"\"\",\n        }, # column\n        \"apCPSFlashSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total amount of flash memory in Mbytes.\"\"\",\n        }, # scalar\n        \"apCPSRAMSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total amount of RAM in Mbytes.\"\"\",\n        }, # scalar\n        \"apCPSCPUfreq\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CPU clock in MHz.\"\"\",\n        }, # scalar\n        \"apCPSDevId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The product's identifier.\"\"\",\n        }, # scalar\n        \"cpsAP930xConf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2\",\n        }, # node\n        \"cpsHostName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Host Name.\"\"\",\n        }, # scalar\n        \"cpsConsoleBanner\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The console banner.\"\"\",\n        }, # scalar\n        \"cpsMotd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The motd message.\"\"\",\n        }, # scalar\n        \"cpsEthItf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4\",\n        }, # node\n        \"cpsEthDhcpc\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"0 will indicate DHCP inactive,\n1 will indicate DHCP active,\n2 will indicate DHCP active and the last parameter is saved.\"\"\",\n        }, # scalar\n        \"cpsEthIPaddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the IP address of the Ethernet Interface.\"\"\",\n        }, # scalar\n        \"cpsEthIPmask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The mask for the Ethernet network.\"\"\",\n        }, # scalar\n        \"cpsEthMTU\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Maximum Transmission Unit size, which determines \nwhether packets should be broken up.\"\"\",\n        }, # scalar\n        \"cpsEthIPaddr2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Ethernet secondary IP address.\"\"\",\n        }, # scalar\n        \"cpsEthIPmask2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Ethernet secondary IP mask.\"\"\",\n        }, # scalar\n        \"cpsNameService\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5\",\n        }, # node\n        \"cpsResolverOrder\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specifies how host lookups are to be performed.\nValid values : empty, 'hosts', 'bind', 'hosts, bind', \n'bind, hosts' \"\"\",\n        }, # scalar\n        \"cpsMultipleIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Valid values are ON or OFF. If set to ON, the resolve \nlibrary will return all valid addresses for a host \nthat appears in the /etc/hosts file, instead of only \nthe first.  \"\"\",\n        }, # scalar\n        \"cpsDNSserv\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.3\",\n        }, # node\n        \"cpsDNSpriserv\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet Address (in dot notation) of primary name \nserver that the resolver should query.\"\"\",\n        }, # scalar\n        \"cpsDNSsecserv\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Internet Address (in dot notation) of secondary name \nserver that the resolver should query.\"\"\",\n        }, # scalar\n        \"cpsDNSdomain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.5.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Local domain name.\"\"\",\n        }, # scalar\n        \"cpsSerialPortConf\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6\",\n        }, # node\n        \"cpsSerialGlobal\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1\",\n        }, # node\n        \"cpsSerialInclude\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"File used in centralized management.\"\"\",\n        }, # scalar\n        \"cpsSerialNFS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Remote Network File System where data buffering will be \nwritten instead of the default directory '/var/run/DB'.\"\"\",\n        }, # scalar\n        \"cpsSerialLockDir\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The lock directory.\"\"\",\n        }, # scalar\n        \"cpsSerialRlogin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Location of the rlogin binary that accepts the -i flag.\"\"\",\n        }, # scalar\n        \"cpsSerialPppd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Location of the pppd binary.\"\"\",\n        }, # scalar\n        \"cpsSerialTelnet\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Location of the telnet application.\"\"\",\n        }, # scalar\n        \"cpsSerialSsh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"50\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Location of the ssh application.\"\"\",\n        }, # scalar\n        \"cpsSerialLocalLogins\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This parameter is only necessary when authentication is \nbeing performed for a port.\nThis is useful if the Radius authentication server is down.\n0 indicates OFF,\n1 indicates ON.\"\"\",\n        }, # scalar\n        \"cpsSerialFacility\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value (0-7) is the Local facility sent to the syslog daemon.\"\"\",\n        }, # scalar\n        \"cpsSerialDBFacility\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value (0-7) is the Local facility sent to the syslog daemon.\"\"\",\n        }, # scalar\n        \"cpsSerialGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # table\n        \"cpsSerialGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsSerialGroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # row\n        \"cpsSerialGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the group.\"\"\",\n        }, # column\n        \"cpsSerialGroupName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The group name.\"\"\",\n        }, # column\n        \"cpsSerialGroupUsers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.1.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user's names.\"\"\",\n        }, # column\n        \"cpsSerialSpec\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2\",\n        }, # node\n        \"cpsSerialPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is the specific configuration per serial port.\"\"\",\n        }, # table\n        \"cpsSerialPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsSerialPortNumber\",\n            ],\n            \"description\" :\n                \"\"\"One particular serial port configuration.\"\"\",\n        }, # row\n        \"cpsSerialPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the serial port. Value 0 is ALL.\"\"\",\n        }, # column\n        \"cpsSerialPortTty\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"25\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device name for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Alias name given to the server connected to the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The speed of the serial port.\nSupported values are: \n 50, 75, 110, 134, 150, 200, 300, 600, \n 1200, 1800, 2400, 4800, 9600, 14400, 19200, \n 28800, 38400, 57600, 115200, 230400,  and 460800\"\"\",\n        }, # column\n        \"cpsSerialPortDataSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The data size for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortStopBits\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of stop bits for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortParity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The parity for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortFlowCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The flow control for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortDTRdelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This specifies how long (in milliseconds) a DTR signal\nwill be turned off before it is turned on again.\"\"\",\n        }, # column\n        \"cpsSerialPortDCDCtrl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DCD signal controls the connection request.\n0 will indicate nocontrol,\n1 will indicate control.\"\"\",\n        }, # column\n        \"cpsSerialPortLogUtmp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Update the login records in /var/run/utmp file.\n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortLogWtmp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Update the login records in /var/run/wtmp file.\n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortLogform\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the format to write the login record.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthtype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"25\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Authentication type.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthSrv1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the primary authentication server.\"\"\",\n        }, # column\n        \"cpsSerialPortAccSrv1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the primary accounting server.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthTmo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the timeout (in seconds) for the authentication \nquery to be answered.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthRetr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the number of times each server is tried \nbefore another is contacted.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthSrv2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the secondary authentication server.\"\"\",\n        }, # column\n        \"cpsSerialPortAccSrv2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the secondary accounting server.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthSecret\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the shared secret with authentication servers.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthRadP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Radius state.\n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortAuthAcc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Access restriction.\"\"\",\n        }, # column\n        \"cpsSerialPortProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the serial port's protocol.\"\"\",\n        }, # column\n        \"cpsSerialPortRemoteIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the default IP address of the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortSocketPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines an alternative labeling system for the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortRemHost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the host to which the serial port will connect.\"\"\",\n        }, # column\n        \"cpsSerialPortBanner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"250\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the banner.\"\"\",\n        }, # column\n        \"cpsSerialPortPrompt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"250\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"250\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the login prompt to the serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortTermType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the terminal type.\"\"\",\n        }, # column\n        \"cpsSerialPortAutomUsr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This defines the automatic user.\"\"\",\n        }, # column\n        \"cpsSerialPortNetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The network mask used in dial in connection.\"\"\",\n        }, # column\n        \"cpsSerialPortPppMtu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PPP MTU - dial in connection.\"\"\",\n        }, # column\n        \"cpsSerialPortPppMru\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PPP MRU - dial in connection.\"\"\",\n        }, # column\n        \"cpsSerialPortPppOptions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PPP options when the PPP session is autodetected.\"\"\",\n        }, # column\n        \"cpsSerialPortPppFoption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The PPP forced options when the user has already been authenticated.\"\"\",\n        }, # column\n        \"cpsSerialPortModemChat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The initchat send to modem connected.\"\"\",\n        }, # column\n        \"cpsSerialPortSttyCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"180\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"180\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The tty settings after socket connection is established.\"\"\",\n        }, # column\n        \"cpsSerialPortSockTx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Defines the delay (in milliseconds) before transmission to\nthe Ethernet of data received through a serial port.\"\"\",\n        }, # column\n        \"cpsSerialPortSockPoll\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Keep-alive timer (milliseconds) for the TCP connection.\"\"\",\n        }, # column\n        \"cpsSerialPortSockIdle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The idle timeout in seconds.\"\"\",\n        }, # column\n        \"cpsSerialPortDBsize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Maximum size of the data buffering file.\"\"\",\n        }, # column\n        \"cpsSerialPortDBtime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Timestamp in data buffering. \n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortDBmode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Data buffering mode : circ or line.\"\"\",\n        }, # column\n        \"cpsSerialPortDBsyslog\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Size of the data buffer sent to syslog.\"\"\",\n        }, # column\n        \"cpsSerialPortDBmenu\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Menu type for data buffering.\n0 will indicate display Menu,\n1 will indicate inactive,\n2 will indicate DB,\n3 will indicate Parc.\"\"\",\n        }, # column\n        \"cpsSerialPortDBalarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Alarm generation status.\n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortSSHbreak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Break sequence - ssh session.\"\"\",\n        }, # column\n        \"cpsSerialPortSniffSess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sniff session type.\"\"\",\n        }, # column\n        \"cpsSerialPortSniffAdm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"List of admin users allowed to sniff session.\"\"\",\n        }, # column\n        \"cpsSerialPortSniffEsc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Escape sequence used in sniff session.\"\"\",\n        }, # column\n        \"cpsSerialPortSniffMsess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\"\"\",\n        }, # column\n        \"cpsSerialPortTelnetMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Mode negotiated by client telnet with the server.\n0 will indicate text,\n1 will indicate binary.\"\"\",\n        }, # column\n        \"cpsSerialPortSysBufSess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Syslog Buffering at all times.\n0 will indicate yes,\n1 will indicate no.\"\"\",\n        }, # column\n        \"cpsSerialPortLFSuppress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LF suppression in socket_server session.\n0 will indicate inactive,\n1 will indicate active.\"\"\",\n        }, # column\n        \"cpsSerialPortAutoInput\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Input string used for auto answer.\"\"\",\n        }, # column\n        \"cpsSerialPortAutoOutput\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Output string used for auto answer.\"\"\",\n        }, # column\n        \"cpsSerialPortBreakInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.2.6.2.1.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The break interval in milliseconds.\"\"\",\n        }, # column\n        \"cpsAP930xInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3\",\n        }, # node\n        \"cpsInfoSerialPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This is the information of the specific serial port.\"\"\",\n        }, # table\n        \"cpsInfoSerialPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cpsInfoSerialPortNumber\",\n            ],\n            \"description\" :\n                \"\"\"One particular serial port.\"\"\",\n        }, # row\n        \"cpsInfoSerialPortNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number to identify the serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortTty\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device name for the serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alias name given to the server connected to the serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSpeed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The speed for serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortTxBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of transmitted bytes by the serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortRXBytes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of received bytes by the serial port.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortErrFrame\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of frame errors.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortErrParity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of parity errors.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortErrBreaks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of breaks errors.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortErrOverrun\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of overrun errors.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigDTR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the DTR signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigCD\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the DCD signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigDSR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the DSR signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigRTS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the RTS signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigCTS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the CTS signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsInfoSerialPortSigRI\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The state of the RI signal.\n0 will indicate down,\n1 will indicate up.\"\"\",\n        }, # column\n        \"cpsAP930xAdm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.4\",\n        }, # node\n        \"apCPSSave\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec saveconf command.\n0 will indicate don't save,\n1 will indicate save.\"\"\",\n        }, # scalar\n        \"apCPSSerialHUP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.19.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Exec signal_ras hup command.\n0 will indicate no restart,\n1 will indicate restart.\"\"\",\n        }, # scalar\n        \"accessControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20\",\n        }, # node\n        \"accessPX\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1\",\n        }, # node\n        \"accessPXIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1\",\n        }, # node\n        \"accessPXIdentAlarmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Access PX alarm status\n1 = Normal\n2 = Warning\n3 = Critical.\"\"\",\n        }, # scalar\n        \"accessPXIdentProductNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The product number of the Access PX.\"\"\",\n        }, # scalar\n        \"accessPXIdentHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision number of the Access PX.\"\"\",\n        }, # scalar\n        \"accessPXIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of manufacture of the Access PX.\"\"\",\n        }, # scalar\n        \"accessPXIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the Access PX.\"\"\",\n        }, # scalar\n        \"accessPXConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.2\",\n        }, # node\n        \"accessPXConfigCardReaderEnableDisableAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Action to disable/enable the card reader.\"\"\",\n        }, # scalar\n        \"accessPXConfigAutoRelockTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time (10 - 60) in seconds when the door will automatically relock\nafter it has been unlocked and the handle has not been opened.\"\"\",\n        }, # scalar\n        \"accessPXConfigCardFormat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"hidStd26\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"hid37Bit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"hid37BitWithFacility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"hidCorp1000\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates and controls the HID card format.\nNOTE: This OID is only valid for HID systems.\"\"\",\n        }, # scalar\n        \"accessPXConfigFront\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.3\",\n        }, # node\n        \"accessPXConfigFrontDoorLockControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unlock\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lock\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalledReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnectedReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control action (unlock, lock) for the front door. Setting this OID \nwill unlock or lock the front door.  Getting this OID will respond \nwith the current state of the front door lock which could be \n1 = unlocked,\n2 = locked,   \n3 = not installed,\n4 = disconnected.\"\"\",\n        }, # scalar\n        \"accessPXConfigFrontDoorMaxOpenTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in minutes, (1 - 120), that the front door can be \nallowed to remain open without generating an alarm condition.\"\"\",\n        }, # scalar\n        \"accessPXStatusFront\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4\",\n        }, # node\n        \"accessPXStatusFrontDoorLock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unlocked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"locked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the front door lock: unlocked, locked,\nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusFrontDoor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the front door: open, closed,\nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusFrontDoorHandle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the front door handle: open, closed,\nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusFrontDoorMaxOpenTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time in minutes, (1 - 120), that the front door can be \nallowed to remain open without generating an alarm condition.\"\"\",\n        }, # scalar\n        \"accessPXStatusFrontDoorAlarmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Front door alarm status\n1 = Normal\n2 = Warning\n3 = Critical\n4 = Front door not installed.\"\"\",\n        }, # scalar\n        \"accessPXConfigRear\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.5\",\n        }, # node\n        \"accessPXConfigRearDoorLockControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unlock\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lock\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalledReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnectedReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control action (unlock, lock) for the rear door. Setting this OID \nwill unlock or lock the rear door.  Getting this OID will respond \nwith the current state of the rear door lock which could be \n1 = unlocked,\n2 = locked,\n3 = not installed,\n4 = disconnected.\"\"\",\n        }, # scalar\n        \"accessPXConfigRearDoorMaxOpenTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in minutes, (1 - 120), that the rear door can be \nallowed to remain open without generating an alarm condition.\"\"\",\n        }, # scalar\n        \"accessPXStatusRear\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6\",\n        }, # node\n        \"accessPXStatusRearDoorLock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unlocked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"locked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the rear door lock: unlocked, locked,\nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusRearDoor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the rear door: open, closed, \nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusRearDoorHandle\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Present state of the rear door handle: open, closed, \nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusRearDoorMaxOpenTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Time in minutes, (1 - 120), that the rear door can be \nallowed to remain open without generating an alarm condition.\"\"\",\n        }, # scalar\n        \"accessPXStatusRearDoorAlarmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rear door alarm status\n1 = Normal\n2 = Warning\n3 = Critical\n4 = Rear door not installed.\"\"\",\n        }, # scalar\n        \"accessPXConfigBeacon\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.7\",\n        }, # node\n        \"accessPXConfigBeaconName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the Beacon.\"\"\",\n        }, # scalar\n        \"accessPXConfigBeaconLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive name for the location of the Beacon.\"\"\",\n        }, # scalar\n        \"accessPXConfigBeaconAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turnOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turnOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalledReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnectedReadOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control action (turnOff, turnOn) for the beacon. Setting this OID \nwill turn the beacon off or on.  Getting this OID will respond \nwith the current state which could be \n1 = off,\n2 = on,\n3 = not installed, \n4 = disconnected.\"\"\",\n        }, # scalar\n        \"accessPXStatusBeacon\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.8\",\n        }, # node\n        \"accessPXStatusBeaconName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the beacon.\"\"\",\n        }, # scalar\n        \"accessPXStatusBeaconLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the location of the beacon.\"\"\",\n        }, # scalar\n        \"accessPXStatusBeaconCurrentState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.20.1.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disconnected\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the beacon: off, on, \nnot installed, or disconnected.\"\"\",\n        }, # scalar\n        \"apcLocalDisplay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21\",\n        }, # node\n        \"apcLocalDisplayIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1\",\n        }, # node\n        \"apcLocalDisplayIdentDisplayType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noDisplayFound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"powerviewRM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"powerviewWW\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Numeric value used to identify the type of display in use.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The model number of the local display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayIdentFirmwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision number of the local display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayIdentOptions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A display-specific string identifying options in the local display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of manufacture of the local display, if available.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the local display, if available.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2\",\n        }, # node\n        \"apcLocalDisplayConfigAlarmBeeper\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"beeperDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"beeperEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The alarm beeper setting for the local display. \nWhen enabled, the alarm beeper will begin to sound whenever \nthere a new alarm becomes active. The alarm beeper will continue to \nperiodically sound until a key is pressed on the display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayConfigBeeperVolume\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"beeperDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"beeperLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"beeperMedium\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"beeperHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The volume setting of the beeper on the local display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayConfigCheckLogIndicator\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"checklogNotPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"checklogDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"checklogInformational\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"checklogWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"checklogCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum level event severity level required to illuminate \nthe check log light on the local display.\nnotPresent (1) indicates that the display does not have a check log light.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayConfigKeyClick\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"keyclickDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"keyclickEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The key click setting of the local display.\"\"\",\n        }, # scalar\n        \"apcLocalDisplayConfigContrast\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.21.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"contrast1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"contrast2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"contrast3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"contrast4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"contrast5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"contrast6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"contrast7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"contrast8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The contrast level of the local display.\"\"\",\n        }, # scalar\n        \"isxModularDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22\",\n        }, # node\n        \"isxModularDistInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1\",\n        }, # node\n        \"isxModularDistInfoTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistInfoTable.\"\"\",\n        }, # scalar\n        \"isxModularDistInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information about the modular\ndistribution metering equipment.\"\"\",\n        }, # table\n        \"isxModularDistInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistInfoSegmentIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about an individual metering segment.\"\"\",\n        }, # row\n        \"isxModularDistInfoSegmentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of the metering segment.\"\"\",\n        }, # column\n        \"isxModularDistInfoMeterModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The model number of the metering board for this segment.\"\"\",\n        }, # column\n        \"isxModularDistInfoMeterSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the metering board for this segment.\"\"\",\n        }, # column\n        \"isxModularDistInfoMeterDateOfManufacture\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of manufacture for the metering board for this segment,\nin the format mm/dd/yyyy.\"\"\",\n        }, # column\n        \"isxModularDistInfoMeterFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision number of the metering board for this segment.\"\"\",\n        }, # column\n        \"isxModularDistInfoMeterHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision number of the metering board for this segment.\"\"\",\n        }, # column\n        \"isxModularDistModules\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2\",\n        }, # node\n        \"isxModularDistModuleInfoTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistModuleInfoTable.\"\"\",\n        }, # scalar\n        \"isxModularDistModuleInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting basic information about the distribution modules\ninstalled in the system.\"\"\",\n        }, # table\n        \"isxModularDistModuleInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistModuleInfoModIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about a specific distribution module.\"\"\",\n        }, # row\n        \"isxModularDistModuleInfoModIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the distribution module.\"\"\",\n        }, # column\n        \"isxModularDistModuleInfoAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of this module. This reflects the indicator lamp(s) on the front of the module.\nA value of notPresent indicates that the module is not installed.\nA value of unknown indicates that there is no communication with the\nmetering segment for this module.\"\"\",\n        }, # column\n        \"isxModularDistModuleInfoModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The model number of the distribution module.\"\"\",\n        }, # column\n        \"isxModularDistModuleInfoSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the distribution module.\"\"\",\n        }, # column\n        \"isxModularDistModuleInfoDateOfManufacture\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date that the distribution module was manufactured.\"\"\",\n        }, # column\n        \"isxModularDistModuleInfoNumCables\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of cables provided by this distribution module.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistModuleBreakerTable.\"\"\",\n        }, # scalar\n        \"isxModularDistModuleBreakerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting operational information about the distribution modules.\"\"\",\n        }, # table\n        \"isxModularDistModuleBreakerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistModuleBreakerModIndex\",\n                \"isxModularDistModuleBreakerPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about a specific distribution modules and circuit breakers.\"\"\",\n        }, # row\n        \"isxModularDistModuleBreakerModIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The distribution module number.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phaseL1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phaseL2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phaseL3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to an individual breaker in the distribution module. The index also corresponds\nto the system phase to  which the breaker is attached.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the active alarms for this breaker:\n\nb0 - Minimum current threshold exceeded (critical)\nb1 - Low current threshold exceeded (warning)\nb2 - High current threshold exceeded (warning)\nb3 - Maximum current threshold exceeded (critical)\nb4 - Breaker is open (critical)\n\nIf a bit is set, the corresponding alarm is active.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating of the breaker.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPhysicalGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Numeric value used to indicate that a breaker is a part of a multi-pole breaker.\nBreakers within a distribution module, with equivalent physical group numbers, \nmay have their handles physically tied together.\nA value of 1 indicates breakers that are physically tied together as part of a \nmulti-pole breaker.\nA value of 0 indicates a single-handle breaker that is not physically tied to \nanother breaker.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerCableNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Numeric value used to indicate the distribution cable to which \nthis breaker is connected. These distribution cables are described\nin the table isxModularDistModuleOutputTable,\nand indexed by the OID isxModularDistModuleOutputCordIndex.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The physical status of this breaker pole, either closed or open (including tripped).\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPositionAlarms\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable breaker position alarms for this circuit breaker.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current flowing though this breaker. Measured in tenths of amps.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The loading on this breaker as a percentage of the breaker's current rating.\nExpressed in tenths of percent.\"\"\",\n        }, # column\n        \"isxModularDistModuleBreakerPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power being supplied through this breaker. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputsTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistModuleOutputTable.\"\"\",\n        }, # scalar\n        \"isxModularDistModuleOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting and setting information related to the \nload equipment being fed by the distribution modules in the ISX\nModular Distribution System.\"\"\",\n        }, # table\n        \"isxModularDistModuleOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistModuleOutputModIndex\",\n                \"isxModularDistModuleOutputCordIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about a specific distribution module\nand its output distribution cables.\"\"\",\n        }, # row\n        \"isxModularDistModuleOutputModIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the distribution module supplying power to the load equipment.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputNumCables\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of distribution cables provided by this module.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputCordIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an individual distribution cable supplied by this module.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the load equipment being supplied by this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the location of equipment being supplied by distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This reflects the worse case severity for alarms associated with this distribution cable.\nA value of notPresent indicates that the cable does not exist for this module.\nA value of unknown indicates that the there is no communication with the\nmetering segment for this distribution cable's module.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAlarmGeneration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable all alarm generation related to this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputBreakerMap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the breaker poles within the \nmodule that are associated with this distribution cable.\nThe following 3 bits are used to indicate the indices of\nthe breakers feeding the cable:\n\n  b0 - Module breaker L1\n  b1 - Module breaker L2\n  b2 - Module breaker L3\n\nIf a bit is set, the breaker is used to feed this distribution cable.\nThese breakers are described in the table isxModularDistModuleBreakerTable,\nand indexed by the OID isxModularDistModuleBreakerPhaseIndex.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputThresholdMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current drops below this value a critical alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputThresholdLow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current drops below this value a warning alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputThresholdHigh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current exceeds this value a warning alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputThresholdMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current exceeds this value a critical alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAlarmMinEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable minimum current alarm generation for this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAlarmLowEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable low current alarm generation for this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAlarmHighEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable high current alarm generation for this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAlarmMaxEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable maximum current alarm generation for this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputCableLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The length of this distribution cable. Specified in tenths of meters.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputConnectorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A string describing the connector on the end of this distribution cable.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputAvailableVoltages\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the voltages that are available at the connector.\n6 bits are used to indicate the following:\n\n  b0 - L1\n  b1 - L2\n  b2 - L3\n  b3 - L1-2\n  b4 - L2-3\n  b5 - L3-1\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputTotalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power being consumed by the load equipment supplied by this distribution cable.\nMeasured in tenths of kW.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputKwhUsage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total energy consumed by the load equipment fed by this distribution cable.\nThis is the total since the date specified in the isxModularDistModuleOutputKwhResetDate\nOID, and may be cleared using the isxModularDistModuleOutputKwhReset OID.\nMeasured in tenths of kWh.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputKwhReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing yes to this OID will reset the total kWh usage shown\nin the isxModularDistModuleOutputKwhUsage OID.\"\"\",\n        }, # column\n        \"isxModularDistModuleOutputKwhResetDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.2.6.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date that the kWh usage was reset, in the format mm/dd/yyyy. Example: 01/01/2000.\"\"\",\n        }, # column\n        \"isxModularDistSubFeeds\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3\",\n        }, # node\n        \"isxModularDistSubFeedInfoTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistSubFeedInfoTable.\"\"\",\n        }, # scalar\n        \"isxModularDistSubFeedInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting information about distribution subfeed breakers.\"\"\",\n        }, # table\n        \"isxModularDistSubFeedInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistSubFeedInfoSubIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information about a specific distribution subfeed.\"\"\",\n        }, # row\n        \"isxModularDistSubFeedInfoSubIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an individual subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the load equipment being supplied by this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string describing the location of the equipment being supplied by this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoBreakerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current rating of this subfeed breaker.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoBreakerPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of this breaker, either closed or open (including tripped).\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The worst case alarm status for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmGeneration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable all alarm generation related to this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoThresholdMin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current drops below this value a critical alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoThresholdLow\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current drops below this value a warning alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoThresholdHigh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current exceeds this value a warning alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoThresholdMax\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the current exceeds this value a critical alarm will exist.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmMinEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable minimum current alarm generation for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmLowEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable low current alarm generation for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmHighEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable high current alarm generation for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoAlarmMaxEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable maximum current alarm generation for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoBreakerAlarmEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable breaker position alarms for this subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoTotalPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total power being supplied by this subfeed. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoKwhUsage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total energy consumed by the load equipment fed by this subfeed.\nThis is the total since the date specified in the isxModularDistSubFeedInfoKwhResetDate\nOID, and may be cleared using the isxModularDistSubFeedInfoKwhReset OID.\nMeasured in tenths of kWh.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoKwhReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing yes to this OID will reset the total kWh usage shown\nin the isxModularDistSubFeedInfoKwhUsage OID.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedInfoKwhResetDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date that the kWh usage was reset, in the format mm/dd/yyyy. Example: 01/01/2000.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the isxModularDistSubFeedLoadingTable.\"\"\",\n        }, # scalar\n        \"isxModularDistSubFeedLoadingTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting subfeed phase loading information.\"\"\",\n        }, # table\n        \"isxModularDistSubFeedLoadingEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistSubFeedLoadingSubIndex\",\n                \"isxModularDistSubFeedLoadingPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing data for an individual subfeed.\"\"\",\n        }, # row\n        \"isxModularDistSubFeedLoadingSubIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index of an individual subfeed.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each input phase entry in the table.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the active alarms for this subfeed:\n\nb0 - Minimum current threshold exceeded (critical)\nb1 - Low current threshold exceeded (warning)\nb2 - High current threshold exceeded (warning)\nb3 - Maximum current threshold exceeded (critical)\nb4 - Breaker is open (critical)\n\nIf a bit is set, the corresponding alarm is active.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current flowing though this subfeed phase. Measured in tenths of amps.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The loading on this subfeed phase as a percentage of the subfeed's current rating.\nExpressed in tenths of percent.\"\"\",\n        }, # column\n        \"isxModularDistSubFeedLoadingPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power being supplied by this subfeed phase. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"isxModularDistTotals\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4\",\n        }, # node\n        \"isxModularDistSysVoltage\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1\",\n        }, # node\n        \"isxModularDistSysOutputVoltageNominalLineToNeutral\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal line-to-neutral voltage available at the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageNominalLineToLine\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal line-to-line voltage available at the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputNominalFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal system output frequency. Measured in tenths of Hertz.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system output frequency in tenths of Hertz.\n-1 if not available.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageMonitoring\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not output voltage alarm generation is present.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageThresholdMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the line-to-neutral voltage of any phase drops below this value a critical alarm will exist.\nSpecified as a percent of the nominal voltage, isxModularDistSysOutputVoltageNominalLineToNeutral.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageThresholdLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the line-to-neutral voltage of any phase drops below this value a warning alarm will exist.\nSpecified as a percent of the nominal voltage, isxModularDistSysOutputVoltageNominalLineToNeutral.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageThresholdHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the line-to-neutral voltage of any phase exceeds this value a warning alarm will exist.\nSpecified as a percent of the nominal voltage, isxModularDistSysOutputVoltageNominalLineToNeutral.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageThresholdMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When the line-to-neutral voltage of any phase exceeds this value a critical alarm will exist.\nSpecified as a percent of the nominal voltage, isxModularDistSysOutputVoltageNominalLineToNeutral.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageAlarmMinEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable minimum voltage alarm generation for the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageAlarmLowEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable low voltage alarm generation for the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageAlarmHighEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable high voltage alarm generation for the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageAlarmMaxEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable maximum voltage alarm generation for the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysOutputVoltageFrequencyTolerance\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"freqToleranceOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"freqTolerancePointTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"freqTolerancePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"freqToleranceOne\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"freqToleranceOnePointFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"freqToleranceTwo\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"freqToleranceThree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"freqToleranceFour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"freqToleranceFive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"freqToleranceNine\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"freqToleranceNotAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The circuit panel output frequency tolerance in Hertz.\nWhen the system output frequency deviates from the nominal by more than this range,\na critical alarm will be generated.\"\"\",\n        }, # scalar\n        \"isxModularDistSysVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting the system output voltage information.\"\"\",\n        }, # table\n        \"isxModularDistSysVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistSysVoltagePhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing data for an individual system output phase.\"\"\",\n        }, # row\n        \"isxModularDistSysVoltagePhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each phase entry in the table.\"\"\",\n        }, # column\n        \"isxModularDistSysVoltageAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the active alarms for this output phase:\n\nb0 - Minimum voltage threshold exceeded (critical)\nb1 - Low voltage threshold exceeded (warning)\nb2 - High voltage threshold exceeded (warning)\nb3 - Maximum voltage threshold exceeded (critical)\n\nIf a bit is set, the corresponding alarm is active.\"\"\",\n        }, # column\n        \"isxModularDistSysVoltageLtoN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-neutral system output voltage available at the distribution panel.\nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"isxModularDistSysVoltageLtoL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Line-to-line system output voltage available at the distribution panel.\nMeasured in tenths of Volts.\"\"\",\n        }, # column\n        \"isxModularDistSysCurrent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2\",\n        }, # node\n        \"isxModularDistSysCurrentRating\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The 100 percent current rating of the distribution panel.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentMonitoring\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not total output current measurements and alarm generation are present.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentThresholdMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When total system current in any phase drops below this value a critical alarm will exist.\nSpecified as a percent of the panel rating, isxModularDistSysCurrentRating.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentThresholdLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When total system current in any phase drops below this value a warning alarm will exist.\nSpecified as a percent of the panel rating, isxModularDistSysCurrentRating.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentThresholdHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When total system current in any phase exceeds this value a warning alarm will exist.\nSpecified as a percent of the panel rating, isxModularDistSysCurrentRating.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentThresholdMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When total system current in any phase exceeds this value a critical alarm will exist.\nSpecified as a percent of the panel rating, isxModularDistSysCurrentRating.\nA value of -1 indicates that the threshold is not available in the device.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentAlarmMinEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable minimum total output current alarm generation.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentAlarmLowEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable low total output current alarm generation.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentAlarmHighEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable high total output current alarm generation.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentAlarmMaxEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable maximum total output current alarm generation.\"\"\",\n        }, # scalar\n        \"isxModularDistSysCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting the total system phase current information.\"\"\",\n        }, # table\n        \"isxModularDistSysCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistSysCurrentPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing data for an individual system output phase.\"\"\",\n        }, # row\n        \"isxModularDistSysCurrentPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each phase entry in the table.\"\"\",\n        }, # column\n        \"isxModularDistSysCurrentAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is a bit map representing the active alarms for this output phase:\n\nb0 - Minimum current threshold exceeded (critical)\nb1 - Low current threshold exceeded (warning)\nb2 - High current threshold exceeded (warning)\nb3 - Maximum current threshold exceeded (critical)\n\nIf a bit is set, the corresponding alarm is active.\"\"\",\n        }, # column\n        \"isxModularDistSysCurrentAmps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current flowing though this system output phase. Measured in tenths of amps.\"\"\",\n        }, # column\n        \"isxModularDistSysCurrentPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.2.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The loading on this system output phase as a percentage of the panel current rating.\nExpressed in tenths of percent.\"\"\",\n        }, # column\n        \"isxModularDistSysPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3\",\n        }, # node\n        \"isxModularDistSysPowerTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total system power being supplied. Measured in tenths of kW.\"\"\",\n        }, # scalar\n        \"isxModularDistSysPowerKwhUsage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total system energy consumed by the load equipment.\nThis is the total since the date specified in the isxModularDistSysOutputKwhResetDate\nOID, and may be cleared using the isxModularDistSysOutputKwhReset OID.\nMeasured in tenths of kWh.\"\"\",\n        }, # scalar\n        \"isxModularDistSysPowerKwhReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Writing yes to this OID will reset the total kWh usage shown\nin the isxModularDistSysPowerKwhUsage OID.\"\"\",\n        }, # scalar\n        \"isxModularDistSysPowerKwhResetDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date that the kWh usage was reset, in the format mm/dd/yyyy. Example: 01/01/2000.\"\"\",\n        }, # scalar\n        \"isxModularDistSysPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting the total system phase power loading information.\"\"\",\n        }, # table\n        \"isxModularDistSysPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"isxModularDistSysPowerPhaseIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing data for an individual system output phase.\"\"\",\n        }, # row\n        \"isxModularDistSysPowerPhaseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"phase1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"phase2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"phase3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Description of each phase entry in the table.\"\"\",\n        }, # column\n        \"isxModularDistSysPowerKw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power being supplied by this system output phase. Measured in tenths of kW.\"\"\",\n        }, # column\n        \"isxModularDistSysPowerKwhPhaseUsage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.22.4.3.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The energy consumed by the load equipment on this system output phase.\nThis is the total since the date specified in the isxModularDistSysPowerKwhResetDate\nOID, and may be cleared using the isxModularDistSysPowerKwhReset OID.\nMeasured in tenths of kWh.\"\"\",\n        }, # column\n        \"isxModularPdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23\",\n        }, # node\n        \"isxModularPduIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1\",\n        }, # node\n        \"isxModularPduIdentModelNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the model number of the PDU.\nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of the PDU.\nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentDateOfManufacture\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date when the PDU was manufactured in mm/dd/yyyy format. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentMonitorCardSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A character string identifying the serial number of the PDU monitor card.\nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentMonitorCardHardwareRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hardware revision of the PDU monitor card. \nThis value is set at the factory.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentMonitorCardFirmwareAppRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application firmware revision of the \nPDU monitor card.\"\"\",\n        }, # scalar\n        \"isxModularPduIdentMonitorCardFirmwareAppOSRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An ID string identifying the application operating system firmware revision of the \nPDU monitor card.\"\"\",\n        }, # scalar\n        \"isxModularPduDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.2\",\n        }, # node\n        \"isxModularPduDeviceTransformerPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"isoXfmrPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"autoXfmrPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the type of transformer present in this PDU.\"\"\",\n        }, # scalar\n        \"isxModularPduDeviceServiceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"threeWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourWire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of utility input to the PDU. Either 3 wires (delta), or 4 wires (wye).\"\"\",\n        }, # scalar\n        \"isxModularPduDeviceFansPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not cooling fans are installed in the PDU.\"\"\",\n        }, # scalar\n        \"isxModularPduDeviceNominalMainInputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal main input voltage to the system. Measured in Volts, \nline-to-line for a 3-wire (delta) service or line-to-neutral for a \n4-wire (wye) service. -1 if main input voltage is not being measured.\"\"\",\n        }, # scalar\n        \"isxModularPduStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.3\",\n        }, # node\n        \"isxModularPduAlarmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The overall status (worst case) of this PDU.\"\"\",\n        }, # scalar\n        \"isxModularPduTransformerTempStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"overtemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noTransformerPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if the PDU isolation transformer is over temperature.\"\"\",\n        }, # scalar\n        \"isxModularPduFanStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.23.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noCoolingFansPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates if one or more of the PDU's cooling fans have failed.\"\"\",\n        }, # scalar\n        \"universalInputOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25\",\n        }, # node\n        \"uioSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1\",\n        }, # node\n        \"uioSensorStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the uioSensorStatusTable.\"\"\",\n        }, # scalar\n        \"uioSensorStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting sensor status information.\"\"\",\n        }, # table\n        \"uioSensorStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"uioSensorStatusPortID\",\n                \"uioSensorStatusSensorID\",\n            ],\n            \"description\" :\n                \"\"\"The unit from which to get data.\"\"\",\n        }, # row\n        \"uioSensorStatusPortID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the Universal IO port to which the sensor is attached.\"\"\",\n        }, # column\n        \"uioSensorStatusSensorID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the sensor.\"\"\",\n        }, # column\n        \"uioSensorStatusSensorName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor name.\"\"\",\n        }, # column\n        \"uioSensorStatusSensorLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the sensor.\"\"\",\n        }, # column\n        \"uioSensorStatusTemperatureDegF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's current temperature reading in tenths of degrees Fahrenheit.\"\"\",\n        }, # column\n        \"uioSensorStatusTemperatureDegC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's current temperature reading in tenths of degrees Celsius.\"\"\",\n        }, # column\n        \"uioSensorStatusHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current humidity reading in tenths of percent from the sensor.\"\"\",\n        }, # column\n        \"uioSensorStatusViolationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The violation status of the sensor.  This integer should be interpreted\nas a bit map, with each bit representing the presence or absence of\nthe specific alarm conditions listed below.  The bit will be '1' if\nthe condition is present, and '0' if the condition is not present.\n\nBit  Hex. Value  Description\n1    0x0001      Maximum temperature exceeded.\n2    0x0002      High temperature exceeded.\n3    0x0004      Low temperature exceeded.\n4    0x0008      Minimum temperature exceeded.\n5    0x0010      Short-term increasing temperature rate exceeded (Not used).\n6    0x0020      Short-term decreasing temperature rate exceeded (Not used).\n7    0x0040      Long-term increasing temperature rate exceeded (Not used).\n8    0x0080      Long-term decreasing temperature rate exceeded (Not used).\n9    0x0100      Maximum humidity exceeded.\n10   0x0200      High humidity exceeded.\n11   0x0400      Low humidity exceeded.\n12   0x0800      Minimum humidity exceeded.\"\"\",\n        }, # column\n        \"uioSensorStatusAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"uioNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"uioWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uioCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sensorStatusNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the sensor.\"\"\",\n        }, # column\n        \"uioSensorStatusCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the sensor.\"\"\",\n        }, # column\n        \"uioInputContact\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2\",\n        }, # node\n        \"uioInputContactStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the uioInputContactStatusTable.\"\"\",\n        }, # scalar\n        \"uioInputContactStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting input contact status information.\"\"\",\n        }, # table\n        \"uioInputContactStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"uioInputContactStatusPortID\",\n                \"uioInputContactStatusContactID\",\n            ],\n            \"description\" :\n                \"\"\"The input contact from which to get data.\"\"\",\n        }, # row\n        \"uioInputContactStatusPortID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the port to which the input contact is attached.\"\"\",\n        }, # column\n        \"uioInputContactStatusContactID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the input contact on the module.\"\"\",\n        }, # column\n        \"uioInputContactStatusContactName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The input contact name.\"\"\",\n        }, # column\n        \"uioInputContactStatusContactLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the input contact.\"\"\",\n        }, # column\n        \"uioInputContactStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"uioInputClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"uioInputOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uioInputDisabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputStateNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the input contact. \"\"\",\n        }, # column\n        \"uioInputContactStatusAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"uioNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"uioWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uioCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputStatusNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the input contact.\"\"\",\n        }, # column\n        \"uioInputContactStatusCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the input contact.\"\"\",\n        }, # column\n        \"uioOutputRelay\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3\",\n        }, # node\n        \"uioOutputRelayStatusTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the uioOutputRelayStatusTable.\"\"\",\n        }, # scalar\n        \"uioOutputRelayStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Allows for getting output relay status information.\"\"\",\n        }, # table\n        \"uioOutputRelayStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"uioOutputRelayStatusPortID\",\n                \"uioOutputRelayStatusRelayID\",\n            ],\n            \"description\" :\n                \"\"\"The unit from which to get data.\"\"\",\n        }, # row\n        \"uioOutputRelayStatusPortID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the module to which the output relay is attached.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusRelayID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ID of the output relay on the module.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusRelayName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The output relay name.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusRelayLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The location of the output relay.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusCurrentState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"uioOutputClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"uioOutputOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"outputStateNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the output relay.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusAlarmStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"uioNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"uioWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"uioCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inputStatusNotApplicable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The alarm status of the output relay.\"\"\",\n        }, # column\n        \"uioOutputRelayStatusCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.25.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the output relay.\"\"\",\n        }, # column\n        \"rPDU2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26\",\n        }, # node\n        \"rPDU2IdentTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Rack PDUs\"\"\",\n        }, # scalar\n        \"rPDU2IdentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU identification data\"\"\",\n        }, # table\n        \"rPDU2IdentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2IdentIndex\",\n            ],\n            \"description\" :\n                \"\"\"Identification data from Rack PDU being queried\"\"\",\n        }, # row\n        \"rPDU2IdentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU identification table\nentry\"\"\",\n        }, # column\n        \"rPDU2IdentModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2IdentName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2IdentLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the location\nof the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2IdentHardwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Rack PDU hardware version\"\"\",\n        }, # column\n        \"rPDU2IdentFirmwareRev\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Rack PDU firware version\"\"\",\n        }, # column\n        \"rPDU2IdentDateOfManufacture\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date the Rack PDU was manufactured \nin mm/dd/yyyy format\"\"\",\n        }, # column\n        \"rPDU2IdentModelNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Rack PDU model number\"\"\",\n        }, # column\n        \"rPDU2IdentSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Rack PDU serial number\"\"\",\n        }, # column\n        \"rPDU2DeviceTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Rack PDUs\"\"\",\n        }, # scalar\n        \"rPDU2Device\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4\",\n        }, # node\n        \"rPDU2DeviceConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU configuration data\"\"\",\n        }, # table\n        \"rPDU2DeviceConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2DeviceConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from Rack PDU being queried\"\"\",\n        }, # row\n        \"rPDU2DeviceConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU table entry\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the location\nof the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigDisplayOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"displayNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"displayReverse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates the intended physical orientation \nof the seven segment display\n\ndisplayNormal(1) indicates normal orientation\ndisplayReverse(2) indicates upside down orientation\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigColdstartDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of delay, measured in seconds, between\nwhen power is provided to the Rack PDU and when\nthe Rack PDU provides basic master power to the\noutlets\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigLowLoadPowerThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined low power draw alarm threshold,\nmeasured in tenths of kiloWatts\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigNearOverloadPowerThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined near power overload threshold,\nmeasured in tenths of kiloWatts\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigOverloadPowerThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined power overload threshold,\nmeasured in tenths of kiloWatts\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigDevicePeakPowerReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset (2) will cause the existing peak power value\nto be replaced by the current load power value.\n\nGetting this OID will do nothing and return the noOperation(1) value.\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigDeviceEnergyReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset (2) will cause the device energy meter value\nto be reset to zero.\n\nGetting this OID in models that support this feature will do nothing\nand return the noOperation(1) value.\n\nModels that do not support this feature will respond to this OID\nwith a value of notSupported (3). Attempts to set this OID\nin these models will fail.\"\"\",\n        }, # column\n        \"rPDU2DeviceConfigOutletsEnergyReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noOperation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to reset (2) will cause the all outlet energy meter values\nto be reset to zero.\n\nGetting this OID will do nothing and return the noOperation(1) value.\n\nModels that do not support this feature will respond to this OID\nwith a value of notSupported (3). Attempts to set this OID\nin these models will fail.\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU properties\"\"\",\n        }, # table\n        \"rPDU2DevicePropertiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2DevicePropertiesIndex\",\n            ],\n            \"description\" :\n                \"\"\"Properties of the Rack PDU being queried\"\"\",\n        }, # row\n        \"rPDU2DevicePropertiesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU properties table entry\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesNumOutlets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of outlets on the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesNumSwitchedOutlets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of switched outlets on the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesNumMeteredOutlets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered outlets on the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesNumPhases\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of phases present in the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesNumMeteredBanks\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered banks present in the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesMaxCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum current rating, measured in Amps, for \nthe Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesOrientation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"horizontal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"vertical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"verticalISXv2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rack PDU orientation\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesOutletLayout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"seqPhaseToNeutral\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"seqPhaseToPhase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"seqPhToNeu21PhToPh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"seqPhToPhGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"seqPhToNGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"seqPToN1516PToPGrouped\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Getting this OID will return outlet layout for the device.\n\nseqPhaseToNeutral(1) indicates outlet layout as follows:\n1:1-N,2:2-N,3:3-N,4:1-N,5:2-N,...\n\nseqPhaseToPhase(2) indicates outlet layout as follows:\n1:1-2,2:2-3,3:3-1,4:1-2,5:2-3,...\n\nseqPhToNeu21PhToPh(3) indicates outlet layout as follows:\n1:1-N,2:2-N...21:3-N,22:1-2,23:2-3,24:3-1,...\n\nseqPhToPhGrouped(4) indicates outlet layout as follows:\nOtlts1-8::(1-2),Otlts9-16::(2-3),Otlts17-24::(3-1).\n\nseqPhToNGrouped(5) indicates outlet layout as follows:\nOtlts1-[X-1]::(1-N),OtltsX-[Y-1]::(2-N),OtltsY-[Z]::(3-N).\n\nseqPToN1516PToPGrouped(6) indicates outlet layout as follows:\nOtlts1-14::(1-2),Otlts15-16::(1-N),OtltsX-[Y-1]::(2-3),OtltsY-[Z]::(3-1)\n\nX, Y, and Z represent Outlet numbers that vary by SKU.\"\"\",\n        }, # column\n        \"rPDU2DevicePropertiesMaxPhaseCurrentRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Rated maximum current for Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU status information\"\"\",\n        }, # table\n        \"rPDU2DeviceStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2DeviceStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status information from the Rack PDU being queried\"\"\",\n        }, # row\n        \"rPDU2DeviceStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU status table entry\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusLoadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lowLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the present load status of the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The power consumption of the Rack PDU load in hundredths of kiloWatts\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPeakPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The peak power consumption of the Rack PDU load in hundredths of kiloWatts\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPeakPowerTimestamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the date and time that peak power consumption occured\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPeakPowerStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the date and time of the last device peak power reset\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user resettable energy meter measuring Rack PDU load \nenergy consumption in tenths of kiloWatt-hours\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusEnergyStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the date and time of the last device energy\nmeter reset\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commandPendingUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the device \nis processing a pending command.  If\nthe commandPendingUnknown (3) value is\nreturned, all devices powered by the \nRack PDU should be shut down.  The \nRack PDU's power should then be cycled\nto clear this condition.\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPowerSupplyAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates a power supply alarm is active when value\nequals alarm (2)\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPowerSupply1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not an alarm is active in Power\nSupply 1\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusPowerSupply2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not an alarm is active in Power\nSupply 2\"\"\",\n        }, # column\n        \"rPDU2DeviceStatusOutletsEnergyStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the date and time of the last outlets energy\nmeter reset\"\"\",\n        }, # column\n        \"rPDU2DeviceControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU control data\"\"\",\n        }, # table\n        \"rPDU2DeviceControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2DeviceControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"Control data from Rack PDU being queried\"\"\",\n        }, # row\n        \"rPDU2DeviceControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU control table entry\"\"\",\n        }, # column\n        \"rPDU2DeviceControlModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2DeviceControlName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user-defined string identifying the Rack PDU\"\"\",\n        }, # column\n        \"rPDU2DeviceControlCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateAllOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"delayedAllOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateAllOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateAllReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedAllReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noCommandAll\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedAllOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cancelAllPendingCommands\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to immediateAllOn (1) will turn all outlets\non immediately.\n\nSetting this OID to delayedAllOn (2) will turn all outlets on as \ndefined by each outlet's rPDU2OutletSwitchedConfigPowerOnTime\nOID value.\n\nSetting this OID to immediateAllOff (3) will turn all outlets\noff immediately.\n\nSetting this OID to immediateAllReboot (4) will cause an immediateAllOff\ncommand to be performed. Once all outlets are off, the\nSwitched Rack PDU will then delay the\nrPDU2OutletSwitchedConfigRebootDuration OID time, and then perform an\nimmediateAllOn command.\n\nSetting this OID to delayedAllReboot (5) will cause a\ndelayedAllOff command to be performed. Once all outlets are off, \nthe Switched Rack PDU will then delay the largest\nrPDU2OutletSwitchedConfigRebootDuration OID time, and then perform a\ndelayedAllOn command.\n\nSetting this OID to noCommandAll (6) will have no effect.\n\nSetting this OID to delayedAllOff (7) will turn all outlets off\nas defined by each outlet's rPDU2OutletSwitchedConfigPowerOffTime\nOID value.\n\nSetting this OID to cancelAllPendingCommands (8) will cause all pending\ncommands on the Switched Rack PDU to be cancelled.\n\nGetting this OID will return the noCommandAll (6) \nvalue.\"\"\",\n        }, # column\n        \"rPDU2PhaseTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of connected Rack PDU phases\"\"\",\n        }, # scalar\n        \"rPDU2Phase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6\",\n        }, # node\n        \"rPDU2PhaseConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU phase configuration data\"\"\",\n        }, # table\n        \"rPDU2PhaseConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2PhaseConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from currently queried Rack \nPDU phase\"\"\",\n        }, # row\n        \"rPDU2PhaseConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU phase configuration\ntable entry\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric phase ID\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigOverloadRestriction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alwaysAllowTurnON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restrictOnNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"restrictOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID controls the behavior of a Switched Rack PDU \nphase when an overload condition is possible and \nadditional outlets are requested to be turned on. \n\nSetting this OID to alwaysAllowTurnON (1) will always allow \nthe outlets on the corresponding phase to turn on.\n\nSetting this OID to restrictOnNearOverload (2) will not allow \noutlets on the corresponding phase to turn on if the \nrPDULoadConfigNearOverloadThreshold OID is exceeded.\n       \nSetting this OID to restrictOnOverload (3) will not allow\noutlets on the corresponding phase to turn on if the \nrPDULoadConfigOverloadThreshold OID is exceeded.\n\nModels that do not support this feature will respond to this OID\nwith a value of notSupported (4). Attempts to set this OID\nin these models will fail.\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigLowLoadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined low load phase current \nthreshold in Amps\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigNearOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined near phase overload warning \nthreshold in Amps\"\"\",\n        }, # column\n        \"rPDU2PhaseConfigOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined phase overload current\nthreshold in Amps\"\"\",\n        }, # column\n        \"rPDU2PhasePropertiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU phase properties\"\"\",\n        }, # table\n        \"rPDU2PhasePropertiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2PhasePropertiesIndex\",\n            ],\n            \"description\" :\n                \"\"\"Properties of the currently queried Rack\nPDU phase\"\"\",\n        }, # row\n        \"rPDU2PhasePropertiesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU phase properties\ntable entry\"\"\",\n        }, # column\n        \"rPDU2PhasePropertiesModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2PhasePropertiesNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric phase ID\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU phase status data\"\"\",\n        }, # table\n        \"rPDU2PhaseStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2PhaseStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status data from currently queried Rack PDU \nphase\"\"\",\n        }, # row\n        \"rPDU2PhaseStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU phase status table\nentry\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric phase ID\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusLoadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lowLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the present load status of the Rack PDU \nphase being queried\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current draw, in tenths of Amps, of the load\non the Rack PDU phase being queried\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the Voltage, in Volts, of the Rack\nPDU phase being queried\"\"\",\n        }, # column\n        \"rPDU2PhaseStatusPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.6.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the load power, in hundredths of kiloWatts,\nconsumed on the Rack PDU phase being queried\"\"\",\n        }, # column\n        \"rPDU2BankTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of connected Rack PDU banks\"\"\",\n        }, # scalar\n        \"rPDU2Bank\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8\",\n        }, # node\n        \"rPDU2BankConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU bank configuration data\"\"\",\n        }, # table\n        \"rPDU2BankConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2BankConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from currently queried \nRack PDU bank\"\"\",\n        }, # row\n        \"rPDU2BankConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU bank configuration\ntable entry\"\"\",\n        }, # column\n        \"rPDU2BankConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2BankConfigNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric bank ID\"\"\",\n        }, # column\n        \"rPDU2BankConfigOverloadRestriction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"alwaysAllowTurnON\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restrictOnNearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"restrictOnOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID controls the behavior of a Switched Rack PDU \nbank when an overload condition is possible and \nadditional outlets are requested to be turned on. \n\nSetting this OID to alwaysAllowTurnON (1) will always allow \nthe outlets on the corresponding bank to turn on.\n\nSetting this OID to restrictOnNearOverload (2) will not allow \noutlets on the corresponding bank to turn on if the \nrPDU2BankConfigNearOverloadCurrentThreshold OID is exceeded.\n       \nSetting this OID to restrictOnOverload (3) will not allow\noutlets on the corresponding bank to turn on if the \nrPDU2BankConfigOverloadCurrentThreshold OID is exceeded.\n\nModels that do not support this feature will respond to this OID\nwith a value of notSupported (4). Attempts to set this OID\nin these models will fail.\"\"\",\n        }, # column\n        \"rPDU2BankConfigLowLoadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined low load bank current \nthreshold in Amps\"\"\",\n        }, # column\n        \"rPDU2BankConfigNearOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined near bank overload current warning\nthreshold in Amps\"\"\",\n        }, # column\n        \"rPDU2BankConfigOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined bank overload current threshold\nin Amps\"\"\",\n        }, # column\n        \"rPDU2BankPropertiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU bank properties\"\"\",\n        }, # table\n        \"rPDU2BankPropertiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2BankPropertiesIndex\",\n            ],\n            \"description\" :\n                \"\"\"Properties of the currently queried \nRack PDU bank\"\"\",\n        }, # row\n        \"rPDU2BankPropertiesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU bank properties \ntable entry\"\"\",\n        }, # column\n        \"rPDU2BankPropertiesModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2BankPropertiesNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric bank ID\"\"\",\n        }, # column\n        \"rPDU2BankPropertiesPhaseLayout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"Rpdu2OutletPhaseLayoutType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID describes the outlet phase connections on\nthe referenced bank as follows:\n\nseqPhase1ToNeutral(1) indicates that bank outlets are\nwired from Phase 1 to Neutral.\n\nseqPhase2ToNeutral(2) indicates that bank outlets are\nwired from Phase 2 to Neutral.\n\nseqPhase3ToNeutral(3) indicates that bank outlets are\nwired from Phase 3 to Neutral.\n\nseqPhase1ToPhase2(4) indicates that bank outlets are\nwired from Phase 1 to Phase 2.\n\nseqPhase2ToPhase3(5) indicates that bank outlets are\nwired from Phase 2 to Phase 3.\n\nseqPhase3ToPhase1(6) indicates that bank outlets are\nwired from Phase 3 to Phase 1.\"\"\",\n        }, # column\n        \"rPDU2BankStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU bank status data\"\"\",\n        }, # table\n        \"rPDU2BankStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2BankStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status data from currently queried Rack PDU\nbank\"\"\",\n        }, # row\n        \"rPDU2BankStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU bank status\ntable entry\"\"\",\n        }, # column\n        \"rPDU2BankStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2BankStatusNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric bank ID\"\"\",\n        }, # column\n        \"rPDU2BankStatusLoadState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lowLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the present load status of the Rack PDU\nbank being queried\"\"\",\n        }, # column\n        \"rPDU2BankStatusCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.8.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current draw, in tenths of Amps, of the load\non the Rack PDU bank being queried\"\"\",\n        }, # column\n        \"rPDU2Outlet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9\",\n        }, # node\n        \"rPDU2OutletSwitchedTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of switched outlets on connected Rack PDUs\"\"\",\n        }, # scalar\n        \"rPDU2OutletSwitched\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2\",\n        }, # node\n        \"rPDU2OutletSwitchedConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU switched outlet configuration data\"\"\",\n        }, # table\n        \"rPDU2OutletSwitchedConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletSwitchedConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from currently queried \nRack PDU switched outlet\"\"\",\n        }, # row\n        \"rPDU2OutletSwitchedConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU switched outlet\nconfiguration table entry\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined switched outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric switched outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigPowerOnTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of delay, in seconds, between when\npower is provided to the Rack PDU and when \nthis switched outlet starts providing power\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigPowerOffTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The amount of time, in seconds, this outlet will\ndelay powering off\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedConfigRebootDuration\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"After turning power off during a reboot sequence,\nthe amount of time to wait before turning power\nto this outlet back on\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU switched outlet properties\"\"\",\n        }, # table\n        \"rPDU2OutletSwitchedPropertiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletSwitchedPropertiesIndex\",\n            ],\n            \"description\" :\n                \"\"\"Properties of the currently queried Rack PDU\nswitched outlet\"\"\",\n        }, # row\n        \"rPDU2OutletSwitchedPropertiesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU switched outlet \nproperties table entry\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined switched outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric switched outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesPhaseLayout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"Rpdu2OutletPhaseLayoutType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID describes the phase connections of\nthe referenced outlet as follows:\n\nseqPhase1ToNeutral(1) indicates that the outlet is\nwired from Phase 1 to Neutral.\n\nseqPhase2ToNeutral(2) indicates that the outlet is\nwired from Phase 2 to Neutral.\n\nseqPhase3ToNeutral(3) indicates that the outlet is\nwired from Phase 3 to Neutral.\n\nseqPhase1ToPhase2(4) indicates that the outlet is\nwired from Phase 1 to Phase 2.\n\nseqPhase2ToPhase3(5) indicates that the outlet is\nwired from Phase 2 to Phase 3.\n\nseqPhase3ToPhase1(6) indicates that the outlet is\nwired from Phase 3 to Phase 1.\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedPropertiesBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric bank ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU switched outlet status\ninformation\"\"\",\n        }, # table\n        \"rPDU2OutletSwitchedStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletSwitchedStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status information for currently queried\nRack PDU switched outlet\"\"\",\n        }, # row\n        \"rPDU2OutletSwitchedStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU switched outlet\nstatus information table entry\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined switched outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric switched outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the present switch state of the Rack\nPDU switched outlet being queried\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedStatusCommandPending\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"commandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noCommandPending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commandPendingUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates whether or not the device is\nprocessing a command for this outlet.\n\nIf the commandPendingUnknown (3) value is\nreturned, all devices powered by the Rack PDU\nshould be shut down.  The Rack PDU's power\nshould then be cycled to clear this condition.\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedControlTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU switched outlet control\ndata\"\"\",\n        }, # table\n        \"rPDU2OutletSwitchedControlEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletSwitchedControlIndex\",\n            ],\n            \"description\" :\n                \"\"\"Control data for currently queried Rack\nPDU switched outlet\"\"\",\n        }, # row\n        \"rPDU2OutletSwitchedControlIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU switched outlet\ncontrol data table entry\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedControlModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedControlName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined switched outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedControlNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric switched outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletSwitchedControlCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"immediateOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"immediateOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"immediateReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"outletUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"delayedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"delayedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"delayedReboot\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cancelPendingCommand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Getting this variable will return the outlet state. If\nthe outlet is on, the immediateOn (1) value will be returned.\nIf the outlet is off, the immediateOff (2) value will be\nreturned. If the state of the outlet cannot be\ndetermined, the outletUnknown (4) value will be returned.\nIf the outletUnknown condition should occur, all devices\npowered by the PDU should be shut down. The PDU's power\nshould then be cycled to clear this condition.\n\nSetting this variable to immediateOn (1) will immediately turn\nthe outlet on.\n\nSetting this variable to immediateOff (2) will immediately turn\nthe outlet off.\n\nSetting this variable to immediateReboot (3) will cause the\nSwitched Rack PDU to perform an immediateOff command, wait the\nrPDU2OutletSwitchedConfigRebootDuration OID time, and then perform an\nimmediateOn command.\n\nSetting this variable to delayedOn (5) will turn the outlet on\nafter the rPDU2OutletSwitchedConfigPowerOnTime OID time has elapsed.\n\nSetting this variable to delayedOff (6) will turn the outlet off\nafter the rPDU2OutletSwitchedConfigPowerOffTime OID time has elapsed.\n\nSetting this variable to delayedReboot  (7) will cause the\nSwitched Rack PDU to perform a delayedOff command, wait the\nrPDU2OutletSwitchedConfigRebootDuration OID time, and then perform a\ndelayedOn command.\n\nSetting this variable to cancelPendingCommand (8) will cause any\npending command to this outlet to be cancelled.\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered outlets on connect Rack PDUs\"\"\",\n        }, # scalar\n        \"rPDU2OutletMetered\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4\",\n        }, # node\n        \"rPDU2OutletMeteredConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU metered outlet configuration data\"\"\",\n        }, # table\n        \"rPDU2OutletMeteredConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletMeteredConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from currently queried\nRack PDU metered outlet\"\"\",\n        }, # row\n        \"rPDU2OutletMeteredConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU metered outlet\nconfiguration table entry\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined metered outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric switched outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigLowLoadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined low load outlet current threshold in Watts\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigNearOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined near outlet overload warning threshold\nin Watts\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredConfigOverloadCurrentThreshold\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"User-defined outlet overload current threshold in Watts\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU metered outlet properties\"\"\",\n        }, # table\n        \"rPDU2OutletMeteredPropertiesEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletMeteredPropertiesIndex\",\n            ],\n            \"description\" :\n                \"\"\"Properties of currently queried Rack PDU\nmetered outlet\"\"\",\n        }, # row\n        \"rPDU2OutletMeteredPropertiesIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU metered properties table\nentry\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined metered outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric metered outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesLayout\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"PowerNet-MIB\", \"name\" : \"Rpdu2OutletPhaseLayoutType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID describes the phase connections of\nthe referenced outlet as follows:\n\nseqPhase1ToNeutral(1) indicates that the outlet is\nwired from Phase 1 to Neutral.\n\nseqPhase2ToNeutral(2) indicates that the outlet is\nwired from Phase 2 to Neutral.\n\nseqPhase3ToNeutral(3) indicates that the outlet is\nwired from Phase 3 to Neutral.\n\nseqPhase1ToPhase2(4) indicates that the outlet is\nwired from Phase 1 to Phase 2.\n\nseqPhase2ToPhase3(5) indicates that the outlet is\nwired from Phase 2 to Phase 3.\n\nseqPhase3ToPhase1(6) indicates that the outlet is\nwired from Phase 3 to Phase 1.\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesPowerRating\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximum power rating of Rack PDU metered outlet\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredPropertiesBank\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This outlet's numeric bank ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of Rack PDU metered outlet status data\"\"\",\n        }, # table\n        \"rPDU2OutletMeteredStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2OutletMeteredStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status data from currently queried Rack PDU\nmetered outlet\"\"\",\n        }, # row\n        \"rPDU2OutletMeteredStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the Rack PDU metered status table\nentry\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined metered outlet ID string\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The numeric metered outlet ID\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lowLoad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"nearOverload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the present load status of the Rack\nPDU metered outlet being queried\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the current draw, in tenths\nof Amps, of the load on the Rack PDU\noutlet being queried\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the power draw of the load \non the Rack PDU outlet being queried\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusPeakPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the peak power load draw\non the Rack PDU outlet being queried\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusPeakPowerTimestamp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the date and time that this metered\noutlet's peak power consumption occured\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusPeakPowerStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the start date and time that this metered\noutlet began recording peak power observations\"\"\",\n        }, # column\n        \"rPDU2OutletMeteredStatusEnergy\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.9.4.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A user resettable energy meter measuring Rack PDU load\nenergy consumption in tenths of kiloWatt-hours\"\"\",\n        }, # column\n        \"rPDU2Sensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10\",\n        }, # node\n        \"rPDU2SensorTempHumidityTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of connected temperature-humidity sensors\"\"\",\n        }, # scalar\n        \"rPDU2SensorTempHumidity\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2\",\n        }, # node\n        \"rPDU2SensorTempHumidityConfigTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of temperature-humidity sensor\nconfiguration data\"\"\",\n        }, # table\n        \"rPDU2SensorTempHumidityConfigEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2SensorTempHumidityConfigIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration data from temperature-humidity sensor\nbeing queried\"\"\",\n        }, # row\n        \"rPDU2SensorTempHumidityConfigIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the temperature-humidity sensor \nconfiguration data table entry\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user-defined temperature-humidity \nsensor ID string\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature-humidity sensor numeric ID\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTemperatureAlarmEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID enables or disables generation\nof sensor temperature alarm.\n\nGetting this OID returns the current value of\nthe temperature alarm enable.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigHumidityAlarmEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID enables or disables generation\nof sensor humidity alarm.\n\nGetting this OID returns the current value of\nthe humidity alarm enable.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempMaxThreshF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor maximum temperature alarm threshold in \nFahrenheit. Attempting to set this OID to a\nvalue less than or equal to that of\nrPDU2SensorTempHumidityConfigTempHighThreshF\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempHighThreshF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor high temperature warning alarm threshold\nin Fahrenheit. Attempting to set this OID to a\nvalue greater than or equal to that of\nrPDU2SensorTempHumidityConfigTempMaxThreshF\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempHysteresisF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor temperature hysteresis setting in Fahrenheit\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempMaxThreshC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor maximum temperature alarm threshold\nin Celsius. Attempting to set this OID to a\nvalue less than or equal to that of\nrPDU2SensorTempHumidityConfigTempHighThreshC\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempHighThreshC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor high temperature warning alarm threshold\nin Celsius. Attempting to set this OID to a\nvalue greater than or equal to that of\nrPDU2SensorTempHumidityConfigTempMaxThreshC\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigTempHysteresisC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor temperature hysteresis setting in Celsius\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigHumidityLowThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor low humidity warning alarm threshold in percent\nrelative humidity. Attempting to set this OID to a\nvalue less than or equal to that of \nrPDU2SensorTempHumidityConfigHumidityMinThresh\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigHumidityMinThresh\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor minimum humidity alarm threshold in percent\nrelative humidity. Attempting to set this OID to a\nvalue greater than or equal to that of\nrPDU2SensorTempHumidityConfigHumidityLowThresh\nwill result in an error.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityConfigHumidityHysteresis\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor humidity hysteresis setting in percent relative\nhumidity\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of temperature-humidity sensor status data\"\"\",\n        }, # table\n        \"rPDU2SensorTempHumidityStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"rPDU2SensorTempHumidityStatusIndex\",\n            ],\n            \"description\" :\n                \"\"\"Status information from temperature-humidity sensor\nbeing queried\"\"\",\n        }, # row\n        \"rPDU2SensorTempHumidityStatusIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to the temperature-humidity \nstatus data table entry\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusModule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined Rack PDU numeric ID\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined temperature-humdity\nsensor ID string\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature-humidity sensor numeric ID\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperatureOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"temperatureHumidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusCommStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notInstalled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"commsOK\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"commsLost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The communications status of the sensor\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusTempF\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor temperature reading in tenths of degrees Fahrenheit\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusTempC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor temperature reading in tenths of degrees Celsius\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusTempStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"belowMin\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"belowLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"aboveHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aboveMax\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID reports the current state of the temperature probe.\n\nA notPresent (1) response indicates that no probe is attached.\nA belowMin (2) response indicates that the probe is present and\nits measured temperature lies below the minimum threshold.\nA belowLow (3) response indicates that the probe is present and\nits measured temperature lies below the low threshold.\nA normal (4) response indicates that the probe is present\nand its measured temperature lies within all temperature thresholds.\nAn aboveHigh (5) response indicates that the probe is present\nand is measuring a temperature above the high threshold.\nAn aboveMax (6) response indicates that the probe is present\nand is measuring a temperature above the max threshold.\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusRelativeHumidity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor humidity reading in percent relative humidity\"\"\",\n        }, # column\n        \"rPDU2SensorTempHumidityStatusHumidityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.1.26.10.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notPresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"belowMin\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"belowLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"aboveHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"aboveMax\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID reports the current state of the humidity probe.\n\nA notPresent (1) response indicates that no probe is attached.\nA belowMin (2) response indicates that the probe is present and\nits measured humidity lies below the minimum threshold.\nA belowLow (3) response indicates that the probe is present and\nits measured humidity lies below the low threshold.\nA normal (4) response indicates that the probe is present\nand its measured humidity lies within all humidity thresholds.\nAn aboveHigh (5) response indicates that the probe is present\nand is measuring a humidity above the high threshold.\nAn aboveMax (6) response indicates that the probe is present\nand is measuring a humidity above the max threshold.\"\"\",\n        }, # column\n        \"software\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2\",\n        }, # node\n        \"powerNetSubAgent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1\",\n        }, # node\n        \"powerNetSoftwareSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.1\",\n        }, # node\n        \"powerNetSoftwareSystemDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A brief description of the PowerNet sub-agent.\"\"\",\n        }, # scalar\n        \"powerNetSoftwareOid\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The object identifier of the PowerNet sub-agent.\"\"\",\n        }, # scalar\n        \"powerNetSoftwareSystemUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time that the sub-agent has been running.\"\"\",\n        }, # scalar\n        \"powerNetSoftwareConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2\",\n        }, # node\n        \"powerNetSoftwareTableSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of software modules supporting the UPS.\"\"\",\n        }, # scalar\n        \"powerNetSoftwareTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of the software monitoring the UPS.\"\"\",\n        }, # table\n        \"powerNetSoftwareEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"moduleNumber\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information on a software module.\"\"\",\n        }, # row\n        \"moduleNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Software Entry Table\"\"\",\n        }, # column\n        \"moduleName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the software module.\"\"\",\n        }, # column\n        \"moduleVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The version of the software module.\"\"\",\n        }, # column\n        \"moduleDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.2.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The date of the software module represented as mm-dd-yy.\"\"\",\n        }, # column\n        \"system\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3\",\n        }, # node\n        \"backUPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.1\",\n        }, # node\n        \"smartUPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2\",\n        }, # node\n        \"smartUPS250\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.1\",\n        }, # node\n        \"smartUPS400\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.2\",\n        }, # node\n        \"smartUPS600\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.3\",\n        }, # node\n        \"smartUPS900\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.4\",\n        }, # node\n        \"smartUPS1250\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.5\",\n        }, # node\n        \"smartUPS2000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.6\",\n        }, # node\n        \"smartUPS450\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.7\",\n        }, # node\n        \"smartUPS700\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.8\",\n        }, # node\n        \"smartUPS1000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.9\",\n        }, # node\n        \"smartUPS1400\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.10\",\n        }, # node\n        \"smartUPS2200\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.11\",\n        }, # node\n        \"smartUPS3000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.12\",\n        }, # node\n        \"smartUPS5000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.13\",\n        }, # node\n        \"smartUPS7500\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.14\",\n        }, # node\n        \"smartUPS10000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.15\",\n        }, # node\n        \"smartUPS1500\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.16\",\n        }, # node\n        \"smartUPS3000DSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.17\",\n        }, # node\n        \"smartUPS5000DSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.18\",\n        }, # node\n        \"smartUPS8000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.2.19\",\n        }, # node\n        \"matrixUPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.3\",\n        }, # node\n        \"matrixUPS3000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.3.1\",\n        }, # node\n        \"matrixUPS5000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.3.2\",\n        }, # node\n        \"masterSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4\",\n        }, # node\n        \"masterSwitchV1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.1\",\n        }, # node\n        \"masterSwitchV2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.2\",\n        }, # node\n        \"masterSwitchVM\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.3\",\n        }, # node\n        \"masterSwitchMSP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.4\",\n        }, # node\n        \"masterSwitchrPDU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.5\",\n        }, # node\n        \"masterSwitchrPDU2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.4.6\",\n        }, # node\n        \"symmetraUPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.5\",\n        }, # node\n        \"symmetraUPS4kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.5.1\",\n        }, # node\n        \"symmetraUPS8kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.5.2\",\n        }, # node\n        \"symmetraUPS12kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.5.3\",\n        }, # node\n        \"symmetraUPS16kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.5.4\",\n        }, # node\n        \"dp100E\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.6\",\n        }, # node\n        \"dp300E\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.7\",\n        }, # node\n        \"monitors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.8\",\n        }, # node\n        \"environmental\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.8.1\",\n        }, # node\n        \"environmentalMgtSystem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.8.2\",\n        }, # node\n        \"emu2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.8.3\",\n        }, # node\n        \"mem\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.8.4\",\n        }, # node\n        \"redundantSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.9\",\n        }, # node\n        \"dcPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.10\",\n        }, # node\n        \"dm3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.10.1\",\n        }, # node\n        \"dcmim2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.10.2\",\n        }, # node\n        \"automaticXferSwitch\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.11\",\n        }, # node\n        \"netLock\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.12\",\n        }, # node\n        \"symmetra3PhaseUPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.13\",\n        }, # node\n        \"symmetra3PhaseUPS40kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.13.1\",\n        }, # node\n        \"symmetra3PhaseUPS60kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.13.2\",\n        }, # node\n        \"symmetra3PhaseUPS80kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.13.3\",\n        }, # node\n        \"symmetra3PhaseUPS20kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.13.4\",\n        }, # node\n        \"networkAir\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14\",\n        }, # node\n        \"airFMSeries\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.1\",\n        }, # node\n        \"rackAirRemovalUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.2\",\n        }, # node\n        \"airPASeries\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.3\",\n        }, # node\n        \"airIRSC100Series\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.4\",\n        }, # node\n        \"airIRRC100Series\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.5\",\n        }, # node\n        \"airIRRP100Series\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.6\",\n        }, # node\n        \"airIRRP500Series\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.7\",\n        }, # node\n        \"airIRRD100Series\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.8\",\n        }, # node\n        \"airInRoomPerimeter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.14.9\",\n        }, # node\n        \"infraStruXurePDU\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.15\",\n        }, # node\n        \"ais5000UPS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16\",\n        }, # node\n        \"ais5000UPS10kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.1\",\n        }, # node\n        \"ais5000UPS20kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.2\",\n        }, # node\n        \"ais5000UPS30kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.3\",\n        }, # node\n        \"ais5000UPS40kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.4\",\n        }, # node\n        \"ais5000UPS60kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.5\",\n        }, # node\n        \"ais5000UPS80kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.6\",\n        }, # node\n        \"ais5000UPS100kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.16.7\",\n        }, # node\n        \"smartUPS3Phase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17\",\n        }, # node\n        \"smartUPS3Phase10kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17.1\",\n        }, # node\n        \"smartUPS3Phase15kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17.2\",\n        }, # node\n        \"smartUPS3Phase20kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17.3\",\n        }, # node\n        \"smartUPS3Phase30kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17.4\",\n        }, # node\n        \"smartUPS3Phase40kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.17.5\",\n        }, # node\n        \"battManager\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.18\",\n        }, # node\n        \"infraStruXureATS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.19\",\n        }, # node\n        \"conPortServ\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.20\",\n        }, # node\n        \"conPortServAP930x\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.20.1\",\n        }, # node\n        \"gutor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21\",\n        }, # node\n        \"gutorPEW\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21.1\",\n        }, # node\n        \"gutorPDW\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21.2\",\n        }, # node\n        \"gutorWEW\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21.3\",\n        }, # node\n        \"gutorWDW\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21.4\",\n        }, # node\n        \"gutorSDC\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.21.5\",\n        }, # node\n        \"accControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.22\",\n        }, # node\n        \"accPX\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.22.1\",\n        }, # node\n        \"symmetraPX\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23\",\n        }, # node\n        \"symmetraPx48kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23.1\",\n        }, # node\n        \"symmetraPx160kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23.2\",\n        }, # node\n        \"symmetraPx250kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23.3\",\n        }, # node\n        \"symmetraPx500kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23.4\",\n        }, # node\n        \"symmetraPx100kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.23.5\",\n        }, # node\n        \"isxModDistribution\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.24\",\n        }, # node\n        \"isx24ModuleHalfRackPdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.24.1\",\n        }, # node\n        \"isx6ModuleRackPdu\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.24.2\",\n        }, # node\n        \"isxServers\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.25\",\n        }, # node\n        \"isxcBasic\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.25.1\",\n        }, # node\n        \"isxcStandard\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.25.2\",\n        }, # node\n        \"isxcEnterprise\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.25.3\",\n        }, # node\n        \"smartUPS2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.27\",\n        }, # node\n        \"galaxy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28\",\n        }, # node\n        \"galaxy7000UPS200kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.1\",\n        }, # node\n        \"galaxy7000UPS250kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.2\",\n        }, # node\n        \"galaxy7000UPS300kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.3\",\n        }, # node\n        \"galaxy7000UPS400kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.4\",\n        }, # node\n        \"galaxy7000UPS500kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.5\",\n        }, # node\n        \"galaxy7000SSC800kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.6\",\n        }, # node\n        \"galaxy7000SSC1200kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.7\",\n        }, # node\n        \"galaxy7000SSC2000kVA\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.8\",\n        }, # node\n        \"galaxy300UPS10kVA33\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.9\",\n        }, # node\n        \"galaxy300UPS15kVA33\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.10\",\n        }, # node\n        \"galaxy300UPS20kVA33\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.11\",\n        }, # node\n        \"galaxy300UPS30kVA33\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.12\",\n        }, # node\n        \"galaxy300UPS40kVA33\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.13\",\n        }, # node\n        \"galaxy300UPS10kVA31\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.14\",\n        }, # node\n        \"galaxy300UPS15kVA31\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.15\",\n        }, # node\n        \"galaxy300UPS20kVA31\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.16\",\n        }, # node\n        \"galaxy300UPS30kVA31\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.3.28.17\",\n        }, # node\n        \"experimental\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.1.4\",\n        }, # node\n        \"apcmgmt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2\",\n        }, # node\n        \"mconfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1\",\n        }, # node\n        \"mconfigNumTrapReceivers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of managers to send traps to.\"\"\",\n        }, # scalar\n        \"mconfigTrapReceiverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of managers to send traps to.  The number of\nentries is given by the value of mconfigNumTrapReceivers.\nMaximum number of Trap Receivers is four.\"\"\",\n        }, # table\n        \"mconfigTrapReceiverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"trapIndex\",\n            ],\n            \"description\" :\n                \"\"\"The managers to send traps to.\"\"\",\n        }, # row\n        \"trapIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index to a trap receiver entry.\"\"\",\n        }, # column\n        \"receiverAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the manager to send a trap to.\"\"\",\n        }, # column\n        \"communityString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The community name to use in the trap when\nsent to the manager.\"\"\",\n        }, # column\n        \"severity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"information\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"severe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The severity threshold of traps to send to the manager.\ntraps are labeled in severity as informational(1), warning(2),\nsevere(3).  Only traps of equal or greater severity than\nthis value are sent to the manager.\"\"\",\n        }, # column\n        \"acceptThisReceiver\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The value of yes(1) indicates that trap generation for this manager is enabled.\nThe value of no(2) indicates that trap generation for this manager is disabled\"\"\",\n        }, # column\n        \"receiveTrapType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.2.1.6\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"powernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ietf\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"both\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of trap.\"\"\",\n        }, # column\n        \"mconfigBOOTPEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of yes(1) indicates the PowerNet Adapter is configured to\nobtain its IP configuration parameters from a BOOTP server.\n\nThe value of no(2) indicates adapter will assume IP configuration parameters \nvalues saved in adapter's eeprom, which was originally configured at local\nconsole.\"\"\",\n        }, # scalar\n        \"mconfigTFTPServerIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of TFTP server. If mconfigBOOTPEnabled is yes(1), then this IP address\nis provided by BOOTP server and not allowed to be modified; otherwise, this IP address\ncan be modified.\n\nBefore using TFTP to load new code image, the image file should be placed in proper\ndirectory of the specified TFTP server. This OID is only supported by AP9605, AP9205, \nand AP9603 PowerNet SNMP Adapters.\"\"\",\n        }, # scalar\n        \"newCodeAuthentViaTFTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"validNewAgentCodeImage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sameAgentCodeImage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"invalidAgentCodeImage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Once mcontrolRestartAgent is set to loadAndExecuteNewAgent (3), PowerNet adapter will\nstart to load the remote image file, for authentication only, instead of saving the code \ninto flash memory. Only if a validNewAgentCodeImage (1) is found will the agent reboot\nthe PowerNet adapter and invoke the loader to load and save new code into the flash memory. \nOtherwise, the current agent code will continue to run.\n\nThis OID shows the result of the above authentication process.  \n         validNewAgentCodeImage (1) means the code image on TFTP server \n         is a valid APC agent code and is different version from the current agent.\n         Once agent identifies this, loader will start to update flash memory with\n         the new agent code.\n\n         sameAgentCodeImage  (2)  means the code image on TFTP server is exactly the\n         same as the currently running agent. Currently running agent will not invoke\n         loader to load the same again.\n         \n         invalidAgentCodeImage  (3) means the code image on TFTP server is NOT a valid\n         APC agent code. Thus, current agent will not load it into the flash memory.\n         \nThe value of this OID will be associated with TRAP codeImageAuthentDone.\nThis OID is only supported by AP9605, AP9205, and AP9603 PowerNet SNMP Adapters.\"\"\",\n        }, # scalar\n        \"mconfigClock\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.6\",\n        }, # node\n        \"mconfigClockDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current date in the mm/dd/yyyy format. Example: 01/01/2000.\"\"\",\n        }, # scalar\n        \"mconfigClockTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The current time in the hh:mm:ss am/pm format. Example: 12:00:00 am.\"\"\",\n        }, # scalar\n        \"mcontrol\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.2\",\n        }, # node\n        \"mcontrolRestartAgent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"restartCurrentAgent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"continueCurrentAgent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"loadAndExecuteNewAgent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"restartWithoutAgent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"resetNetworkAndRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"resetNetworkLeaveModeAndRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this OID to restartCurrentAgent (1) will restart the same SNMP\nagent code currently saved in flash memory. Setting this OID to\nloadAndExecuteNewAgent (3) will enable adapter to load a new agent code\ninto the flash memory and start to execute this new agent code.\nBootp/tftp is the default protocol. loadAndExecuteNewAgent is only\nsupported by AP9605, AP9205, and AP9603 PowerNet SNMP Adapters. Setting\nthis OID to restartWithoutAgent (4) will restart the system and not\nstart the agent. The subsequent time the system restarts the agent will\nalso automatically restart. Setting this OID to\nresetNetworkAndRestart (5) will set the Boot Mode, IP Address, Subnet\nMask, and Default Gateway to defaults, expire any existing DHCP lease\nand then restart the system. Setting this OID to\nresetNetworkLeaveModeAndRestart (6) will leave the Boot Mode at the\ncurrent setting, set the IP Address, Subnet Mask, and Default Gateway to\ndefaults, expire any existing DHCP lease and then restart the system.\"\"\",\n        }, # scalar\n        \"mtrapargs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3\",\n        }, # node\n        \"mtrapargsInteger\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an integer argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsIpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an IP address argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.0.0.0.\"\"\",\n        }, # scalar\n        \"mtrapargsString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsGauge\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a Gauge argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsTimeTicks\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a TimeTicks argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsInteger02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an integer argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsInteger03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an integer argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsIpAddress02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an IP address argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.0.0.0.\"\"\",\n        }, # scalar\n        \"mtrapargsIpAddress03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an IP address argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.0.0.0.\"\"\",\n        }, # scalar\n        \"mtrapargsString02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsString03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsGauge02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a Gauge argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsGauge03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a Gauge argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsTimeTicks02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a TimeTicks argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsTimeTicks03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with a TimeTicks argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsString04\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsString05\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsInteger04\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an integer argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsInteger05\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an integer argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return 0.\"\"\",\n        }, # scalar\n        \"mtrapargsString06\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsString07\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsString08\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString02\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString03\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString04\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString05\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString06\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString07\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mtrapargsOctetString08\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.3.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID allows APC traps to be sent with an octet string argument\nthat my not be defined in the APC MIB.\n\nA get of this OID will return a NULL string.\"\"\",\n        }, # scalar\n        \"mfiletransfer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4\",\n        }, # node\n        \"mfiletransferStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.1\",\n        }, # node\n        \"mfiletransferStatusLastTransferResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lastFileTransferResultSuccessful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"lastFileTransferResultNotAvailable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lastFileTransferResultFailureUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lastFileTransferResultFailureServerInaccessible\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lastFileTransferResultFailureServerAccessDenied\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lastFileTransferResultFailureFileNotFound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lastFileTransferResultFailureFileTypeUnknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"lastFileTransferResultFailureFileCorrupted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nOnce mfiletransferControlInitiateFileTransfer is set to a value other than doNotInitiateFileTransfer\na file transfer of mfiletransferConfigSettingsFilename will be attempted from either a TFTP or FTP\nserver.\n \nThis OID shows the last attempted file transfer result.\n  lastFileTransferResultSuccessful (1) means the file transfer was successful.\n  lastFileTransferResultNotAvailable (2) means that there have been no previous file transfers.\n  lastFileTransferResultFailureUnknown (3) means that the last file transfer failed for an unknown reason.\n  lastFileTransferResultFailureServerInaccessible (4) means that the TFTP or FTP server could not be found on the network.\n  lastFileTransferResultFailureServerAccessDenied (5) means that the TFTP or FTP server denied access.\n  lastFileTransferResultFailureFileNotFound (6) means that the file could not be located.\n  lastFileTransferResultFailureFileTypeUnknown (7) means the file was examined, but the contents were unknown.\n  lastFileTransferResultFailureFileCorrupt (8) means the transferred file was corrupt.\"\"\",\n        }, # scalar\n        \"mfiletransferConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2\",\n        }, # node\n        \"mfiletransferConfigSettings\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.1\",\n        }, # node\n        \"mfiletransferConfigSettingsFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nThe path and name of the file to transfer using the mfiletransferControlInitiateFileTransfer OID.\nIf the file to transfer exists in the default server directory then the path may be omitted.\"\"\",\n        }, # scalar\n        \"mfiletransferConfigTFTP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.2\",\n        }, # node\n        \"mfiletransferConfigTFTPServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.2.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nThe IP Address in dotted decimal notation of the TFTP server involved in the file transfer.\"\"\",\n        }, # scalar\n        \"mfiletransferConfigFTP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.3\",\n        }, # node\n        \"mfiletransferConfigFTPServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.3.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nThe IP Address in dotted decimal notation of the FTP server involved in the file transfer.\"\"\",\n        }, # scalar\n        \"mfiletransferConfigFTPServerUser\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.3.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nThe user identification for logging into the FTP server specified with mfiletransferConfigFTPServerAddress.\"\"\",\n        }, # scalar\n        \"mfiletransferConfigFTPServerPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.2.3.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nThe password for logging into the FTP server specified with mfiletransferConfigFTPServerAddress.\"\"\",\n        }, # scalar\n        \"mfiletransferControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.3\",\n        }, # node\n        \"mfiletransferControlInitiateFileTransfer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.2.4.3.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"doNotInitiateFileTransfer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"initiateFileTransferDownloadViaTFTP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"initiateFileTransferDownloadViaFTP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This OID has been deprecated.\n\nSetting this OID to doNotInitiateFileTransfer (1) will do nothing.\n \nSetting this OID to initiateFileTransferDownloadViaTFTP (2) will attempt to transfer the file named in \nmfiletransferConfigSettingsFilename from the TFTP Server identified in mfiletransferConfigTFTPAddress.\n \nSetting this OID to initiateFileTransferDownloadViaFTP (3) will attempt to transfer the file named in \nmfiletransferConfigSettingsFilename from the FTP Server identified in mfiletransferConfigFTPAddress \nusing mfiletransferConfigFTPUser and mfiletransferConfigFTPPassword for the FTP Server login process.\"\"\",\n        }, # scalar\n    }, # nodes\n\n    \"notifications\" : {\n        \"communicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication to the UPS has been lost.  Steps\nto reestablish communication are in progress.\"\"\",\n        }, # notification\n        \"upsOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The UPS has sensed a load greater than 100 percent\nof its rated capacity.\"\"\",\n        }, # notification\n        \"upsDiagnosticsFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The UPS failed its internal diagnostic self-test.\"\"\",\n        }, # notification\n        \"upsDischarged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The UPS batteries are discharged; if utility power fails\nan immediate low battery condition will exist.  Sufficient runtime \nfor necessary action cannot be guaranteed.\"\"\",\n        }, # notification\n        \"upsOnBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS has switched to battery backup power.\"\"\",\n        }, # notification\n        \"smartBoostOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS has enabled SmartBoost(TM).\"\"\",\n        }, # notification\n        \"lowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The UPS batteries are low and will soon be exhausted.\nIf utility power is not restored the UPS will put itself \nto 'sleep' and immediately cut power to the load.\"\"\",\n        }, # notification\n        \"communicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication with the UPS has been established.\"\"\",\n        }, # notification\n        \"powerRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Utility power has been restored.\"\"\",\n        }, # notification\n        \"upsDiagnosticsPassed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS passed its internal self-test.\"\"\",\n        }, # notification\n        \"returnFromLowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS has returned from a low battery\ncondition.\"\"\",\n        }, # notification\n        \"upsTurnedOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS has been turned 'off' by the management station.\"\"\",\n        }, # notification\n        \"upsSleeping\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS is entering 'sleep' mode.  Power \nto the load will be cut off.\"\"\",\n        }, # notification\n        \"upsWokeUp\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATION: The UPS has returned from 'sleep' mode.  Power \nto the load has been restored.\"\"\",\n        }, # notification\n        \"upsRebootStarted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS has started its reboot sequence.\nThe UPS will reboot itself at this time.\"\"\",\n        }, # notification\n        \"upsDipSwitchChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The dip switch settings on the UPS have been\nchanged, possibly altering UPS performance.\"\"\",\n        }, # notification\n        \"upsBatteryNeedsReplacement\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The batteries of the UPS need immediate replacement.\"\"\",\n        }, # notification\n        \"contactFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: One of the contacts on the Environmental Monitor has \nchanged from its default position. The first variable is\nthe contact number that is faulted.\"\"\",\n        }, # notification\n        \"contactFaultResolved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.19\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A fault on one of the Environmental Monitor contacts\nhas been resolved. The first variable is\nthe contact number that has been resolved.\"\"\",\n        }, # notification\n        \"hardwareFailureBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: UPS on bypass due to internal fault\"\"\",\n        }, # notification\n        \"softwareBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: UPS on bypass - user set via software or panel\"\"\",\n        }, # notification\n        \"switchedBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: UPS on bypass - initiated by user\"\"\",\n        }, # notification\n        \"returnFromBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UPS has returned from bypass\"\"\",\n        }, # notification\n        \"bypassPowerSupplyFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Base module bypass power supply needs repair\"\"\",\n        }, # notification\n        \"baseFanFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Base module fan needs repair\"\"\",\n        }, # notification\n        \"batteryPackCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Check installation of external battery packs signal cable\"\"\",\n        }, # notification\n        \"batteryPackCommEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UPS is communicating with the external battery packs.\"\"\",\n        }, # notification\n        \"calibrationStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A battery calibration test has been initiated on the UPS.\"\"\",\n        }, # notification\n        \"restartAgent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Agent restarting as commanded by manager.\"\"\",\n        }, # notification\n        \"upsTurnedOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A UPS is turned on.\"\"\",\n        }, # notification\n        \"smartAvrReducing\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS is reducing the line voltage via SmartTrim(TM).\"\"\",\n        }, # notification\n        \"codeAuthenticationDone\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mconfigTFTPServerIP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"newCodeAuthentViaTFTP\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Authentication on agent code image is done.\"\"\",\n        }, # notification\n        \"upsOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The overload condition has been cleared.\"\"\",\n        }, # notification\n        \"smartBoostOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS has returned from SmartBoost(TM).\"\"\",\n        }, # notification\n        \"smartAvrReducingOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS has returned from SmartTrim(TM).\"\"\",\n        }, # notification\n        \"upsBatteryReplaced\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A bad battery fault has been cleared.\"\"\",\n        }, # notification\n        \"calibrationEnd\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS has finished calibrating.\"\"\",\n        }, # notification\n        \"dischargeCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A UPS discharge condition has been cleared.\"\"\",\n        }, # notification\n        \"gracefullShutdown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A graceful shutdown has been initiated.\"\"\",\n        }, # notification\n        \"outletOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified PDU outlet has turned on.\nIf sPDUOutletControlIndex equals zero, then all outlets have \nturned on.\"\"\",\n        }, # notification\n        \"outletOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified PDU outlet has turned off.\nIf sPDUOutletControlIndex equals zero, then all outlets \nhave turned off.\"\"\",\n        }, # notification\n        \"outletReboot\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified PDU outlet has rebooted.\nIf sPDUOutletControlIndex equals zero, then all outlets \nhave rebooted.\"\"\",\n        }, # notification\n        \"configChangeSNMP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The SNMP configuration has been changed.\"\"\",\n        }, # notification\n        \"configChangeOutlet\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUOutletConfigIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified PDU outlet has changed configuration.\nIf sPDUOutletConfigIndex equals zero, then the Master outlet \nhas changed configuration.\"\"\",\n        }, # notification\n        \"accessViolationConsole\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Someone has attempted to login via the console with the incorrect password.\"\"\",\n        }, # notification\n        \"accessViolationHTTP\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Someone has attempted to login via HTTP with the incorrect password.\"\"\",\n        }, # notification\n        \"passwordChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The password for the device has been changed.\"\"\",\n        }, # notification\n        \"badVoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The output voltage is not within acceptable range.\"\"\",\n        }, # notification\n        \"badVoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The output voltage has returned to an acceptable level.\"\"\",\n        }, # notification\n        \"chargerFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The battery charger has failed.\"\"\",\n        }, # notification\n        \"chargerFailureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.52\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The battery charger failure condition has been cleared.\"\"\",\n        }, # notification\n        \"batteryOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.53\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The battery temperature threshold has been violated.\"\"\",\n        }, # notification\n        \"batteryOverTemperatureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.54\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The battery over temperature has been cleared.\"\"\",\n        }, # notification\n        \"smartRelayFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.55\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: SmartBoost(TM) or SmartTrim(TM) relay fault.\"\"\",\n        }, # notification\n        \"smartRelayFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.56\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: SmartBoost(TM) or SmartTrim(TM) relay fault has been cleared.\"\"\",\n        }, # notification\n        \"humidityThresholdViolation1\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.57\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Probe 1 humidity threshold violated. The\nfirst variable is the current humidity.\"\"\",\n        }, # notification\n        \"humidityThresholdViolationCleared1\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.58\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Environmental Monitor humidity threshold violation has been cleared on probe 1.\"\"\",\n        }, # notification\n        \"temperatureThresholdViolation1\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.59\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An Environmental Monitor temperature threshold has been violated on probe 1.\nThe first variable is the current temperature.\"\"\",\n        }, # notification\n        \"temperatureThresholdViolationCleared1\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.60\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Environmental Monitor temperature threshold violation has been cleared on probe 1.\"\"\",\n        }, # notification\n        \"humidityThresholdViolation2\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.61\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An Environmental Monitor humidity threshold has been violated on probe 2.\nThe first variable is the current humidity.\"\"\",\n        }, # notification\n        \"humidityThresholdViolationCleared2\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.62\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Environmental Monitor humidity threshold violation has been cleared on probe 2.\"\"\",\n        }, # notification\n        \"temperatureThresholdViolation2\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.63\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An Environmental Monitor temperature threshold has been violated on probe 2.\nThe first variable is the current temperature.\"\"\",\n        }, # notification\n        \"temperatureThresholdViolationCleared2\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.64\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Environmental Monitor temperature threshold violation has been cleared on probe 2.\"\"\",\n        }, # notification\n        \"mupsCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.65\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication with the Environmental Monitor has been established.\"\"\",\n        }, # notification\n        \"mupsCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.66\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication to the Environmental Monitor has been lost.  Steps\nto reestablish communication are in progress.\"\"\",\n        }, # notification\n        \"batteryIncrease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.67\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of batteries has increased.\"\"\",\n        }, # notification\n        \"batteryDecrease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.68\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of batteries has decreased.\"\"\",\n        }, # notification\n        \"powerModuleIncrease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.69\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of power modules has increased.\"\"\",\n        }, # notification\n        \"powerModuleDecrease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.70\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of power modules has decreased.\"\"\",\n        }, # notification\n        \"intelligenceModuleInserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.71\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An intelligence module has been inserted.\"\"\",\n        }, # notification\n        \"intelligenceModuleRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.72\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An intelligence module has been removed.\"\"\",\n        }, # notification\n        \"rintelligenceModuleInserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.73\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A redundant intelligence module has been inserted.\"\"\",\n        }, # notification\n        \"rintelligenceModuleRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.74\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A redundant intelligence module has been removed.\"\"\",\n        }, # notification\n        \"extBatteryFrameIncease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.75\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An external battery frame has been added.\"\"\",\n        }, # notification\n        \"extBatteryFrameDecrease\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.76\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An external battery frame has been removed.\"\"\",\n        }, # notification\n        \"abnormalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.77\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An abnormal condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"abnormalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.78\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An abnormal condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"deviceStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.79\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The status of the device being monitored has changed.\"\"\",\n        }, # notification\n        \"noBatteries\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.80\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The UPS has no batteries attached.\"\"\",\n        }, # notification\n        \"noBatteriesCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.81\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The UPS's batteries have been attached.\"\"\",\n        }, # notification\n        \"userAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.82\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A new user has been added.\"\"\",\n        }, # notification\n        \"userDeleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.83\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A user has been deleted.\"\"\",\n        }, # notification\n        \"userModified\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.84\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A user has been modified.\"\"\",\n        }, # notification\n        \"msvmCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.85\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications with the MasterSwitch VM has been established.\"\"\",\n        }, # notification\n        \"msvmCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.86\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications with the MasterSwitch VM has been lost.\"\"\",\n        }, # notification\n        \"msvmOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.87\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The MasterSwitch VM in an overload condition.\"\"\",\n        }, # notification\n        \"msvmOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.88\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The overload condition on the MasterSwitch VM has been cleared.\"\"\",\n        }, # notification\n        \"msvmOutletOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.89\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the MasterSwitch VM has turned on.\"\"\",\n        }, # notification\n        \"msvmOutletOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.90\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the MasterSwitch VM has turned off.\"\"\",\n        }, # notification\n        \"msvmDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.91\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device configuration change has been made on a MasterSwitch VM.\"\"\",\n        }, # notification\n        \"msvmOutletConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.92\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlVMOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet configuration change has been made on a MasterSwitch VM.\"\"\",\n        }, # notification\n        \"msvmLowLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.93\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The MasterSwitch VM has violated the low load threshold.\"\"\",\n        }, # notification\n        \"msvmLowLoadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.94\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The low load condition on the MasterSwitch VM has been cleared.\"\"\",\n        }, # notification\n        \"msvmNearOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.95\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The MasterSwitch VM is approaching an overload condition.\"\"\",\n        }, # notification\n        \"msvmNearOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.96\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The near overload condition on the MasterSwitch VM has been cleared.\"\"\",\n        }, # notification\n        \"msvmPowerSupplyStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.97\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlVMIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlVMName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The power supply status of the MasterSwitch VM has changed.\"\"\",\n        }, # notification\n        \"mspCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.98\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications with the MasterSwitch plus has been established.\"\"\",\n        }, # notification\n        \"mspCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.99\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications with the MasterSwitch plus has been lost.\"\"\",\n        }, # notification\n        \"mspOutletOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.100\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the MasterSwitch plus has turned on.\"\"\",\n        }, # notification\n        \"mspOutletOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the MasterSwitch plus has turned off.\"\"\",\n        }, # notification\n        \"mspDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.102\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device configuration change has been made on a MasterSwitch plus.\"\"\",\n        }, # notification\n        \"mspOutletConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.103\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sPDUMasterControlMSPIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUMasterControlMSPName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"sPDUOutletControlMSPOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet configuration change has been made on a MasterSwitch plus.\"\"\",\n        }, # notification\n        \"rsSourceSwitched\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Redundant Switch has switched source.\nThe first variable is an integer representing the current source: 0=A, 1=B.\nThe second variable is the 32-character name of the current source.\nThe third variable is an integer representing the transfer cause:\n 0=No Transfers Recorded, 1=Due to user action or preferred switching,\n 3=Due to line notch or spike, 5=Due to low line voltage,\n 7=Transfer due to high line voltage,\n 9=Transfer due to frequency out of range.\nThe fourth variable is a character string listing the transfer cause.\"\"\",\n        }, # notification\n        \"rsLostRedundancy\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The Redundant Switch has lost redundancy.\nThe first variable is an integer representing the source which is no longer available: 0=A, 1=B.\nThe second variable is the 32-character name of the source which is no longer available.\"\"\",\n        }, # notification\n        \"rsRedundancyRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Redundancy has been restored to the Redundant Switch .\nThe first variable is an integer representing the source which has been restored: 0=A, 1=B.\nThe second variable is the 32-character name of the source which has been restored.\"\"\",\n        }, # notification\n        \"rsConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A configuration change has been made on a Redundant Switch.\"\"\",\n        }, # notification\n        \"rsCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications with the Redundant Switch has been established.\"\"\",\n        }, # notification\n        \"rsCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.109\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications with the Redundant Switch has been lost.\"\"\",\n        }, # notification\n        \"dcCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.110\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications with the DC power plant has been established.\"\"\",\n        }, # notification\n        \"dcCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications with the DC power plant has been lost.\"\"\",\n        }, # notification\n        \"dcPINChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The active PIN on the DC controller has been changed.\"\"\",\n        }, # notification\n        \"dcMajorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Major alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcMajorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Major alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcMinorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Minor alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcMinorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Minor alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcOutputRelayOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dm3StatusOutRlyIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"dm3StatusOutRlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An output relay for the powerplant has been activated (state changed to on).\nThe first variable is an integer representing the output relay number that has gone on.\nThe second variable is the 16-character name of the output relay.\"\"\",\n        }, # notification\n        \"dcOutputRelayOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dm3StatusOutRlyIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"dm3StatusOutRlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An output relay for the powerplant has been deactivated (state changed to off).\nThe first variable is an integer representing the output relay number that has gone off.\nThe second variable is the 16-character name of the output relay.\"\"\",\n        }, # notification\n        \"dcInputRelayOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.119\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dm3StatusInRlyIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"dm3StatusInRlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An input relay for the powerplant has been activated (state changed to on).\nThe first variable is an integer representing the input relay number that has gone on.\nThe second variable is the 16-character name of the input relay.\"\"\",\n        }, # notification\n        \"dcInputRelayOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.120\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"dm3StatusInRlyIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"dm3StatusInRlyName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An input relay for the powerplant has been deactivated (state changed to off).\nThe first variable is an integer representing the input relay number that has gone off.\nThe second variable is the 16-character name of the input relay.\"\"\",\n        }, # notification\n        \"logicPowerSuppliesIncreased\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of system power supplies has increased.\"\"\",\n        }, # notification\n        \"logicPowerSuppliesDecreased\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The number of system power supplies has decreased.\"\"\",\n        }, # notification\n        \"externalSwitchGearClosed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: External Switch Gear closed.\"\"\",\n        }, # notification\n        \"externalSwitchGearOpened\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: External Switch Gear opened.\"\"\",\n        }, # notification\n        \"generalDeviceEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: APC Device event.\"\"\",\n        }, # notification\n        \"atsSourceSwitched\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Automatic Transfer Switch has switched source.\nThe first variable is an integer representing the current source: 0=A, 1=B.\nThe second variable is the 32-character name of the current source.\"\"\",\n        }, # notification\n        \"atsLostRedundancy\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The Automatic Transfer Switch has lost redundancy.\nThe first variable is an integer representing the source which is no longer available: 0=A, 1=B.\nThe second variable is the 32-character name of the source which is no longer available.\"\"\",\n        }, # notification\n        \"atsRedundancyRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Redundancy has been restored to the Automatic Transfer Switch .\nThe first variable is an integer representing the source which has been restored: 0=A, 1=B.\nThe second variable is the 32-character name of the source which has been restored.\"\"\",\n        }, # notification\n        \"atsConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.129\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A configuration change has been made on the Automatic Transfer Switch.\nThe first variable is an integer representing the configuration setting which changed:\n    0=Transfer Voltage Range, 1=Sensitivity, 2=Preferred Source\n    3=Front Panel Lockout, 4=Current Limit, 5=Reset XA Processor, \n    6=Reset to defaults, 7=Product Name, 8=Nominal Voltage, 9=Nominal Line Frequency, \n    10=Narrow VRMS, 11=Medium VRMS, 12=Wide VRMS,13=Frequency Deviation,\n    14=ColdStart ATS, 15=Events Count Cleared, 16=Phase or Bank Threshold. \"\"\",\n        }, # notification\n        \"atsCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.130\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications with the Automatic Transfer Switch has been established.\"\"\",\n        }, # notification\n        \"atsCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications with the Automatic Transfer Switch has been lost.\"\"\",\n        }, # notification\n        \"atsOverCurrent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Output Current has exceeded threshold. This is same as atsOverload Trap \nfor phase or total in case banked units\"\"\",\n        }, # notification\n        \"atsOverCurrentCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Output Current has returned below threshold.This is same as atsOverloadCleared Trap \nfor phase or total in case banked units\"\"\",\n        }, # notification\n        \"atsPowerSupplyFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.134\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The Automatic Transfer Switch Power Supply has failed.\nThe first variable is an integer representing the Power Supply which \nhas failed: 0 = Source A 24V,\n            1 = 12V,\n            2 = 5V,\n            3 = Source B 24V.\"\"\",\n        }, # notification\n        \"atsPowerSupplyFailureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.135\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Automatic Transfer Power Supply Failure Cleared.\nThe first variable is an integer representing the Power Supply which \nhas cleared: 0 = Source A 24V,\n             1 = 12V,\n             2 = 5V,\n             3 = Source B 24V.\"\"\",\n        }, # notification\n        \"dcMainsFailAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.136\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Mains Fail alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcMainsFailAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.137\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Mains Fail alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcFanFailAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.138\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Fan Fail alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcFanFailAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.139\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Fan Fail alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcRectifierOvertempAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.140\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Rect. Overtemp alarm is active in the power plant.\"\"\",\n        }, # notification\n        \"dcRectifierOvertempAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.141\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Rect. Overtemp alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcCurrentLimitAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.142\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Current Limit alarm is active in the power plant.\"\"\",\n        }, # notification\n        \"dcCurrentLimitAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.143\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Current Limit alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcRectifierFailAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.144\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rect. Fail alarm is active in the power plant.\"\"\",\n        }, # notification\n        \"dcRectifierFailAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.145\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Rect. Fail alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcMultRectFailAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.146\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Multiple Rect. Fail alarm is active in the powerplant.\"\"\",\n        }, # notification\n        \"dcMultRectFailAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.147\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Multiple Rect Fail alarm is no longer active in the powerplant.\"\"\",\n        }, # notification\n        \"dcBatteryBreakerAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.148\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Batt. Breaker alarm is active in the power plant.\"\"\",\n        }, # notification\n        \"dcBatteryBreakerAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.149\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Batt. Breaker alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcRectifierOVPAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.150\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rect. OVP alarm is active in the power plant.\"\"\",\n        }, # notification\n        \"dcRectifierOVPAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.151\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Rect. OVP alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcLVDImminentAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.152\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A LVD Imminent alarm is active in the powerplant.\"\"\",\n        }, # notification\n        \"dcLVDImminentAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A LVD Imminent alarm is no longer active in the powerplant.\"\"\",\n        }, # notification\n        \"dcFuseCBAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Fuse/CB alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcFuseCBAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Fuse/CB alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcBatteryTestFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Battery Test failed in the DC power plant.\"\"\",\n        }, # notification\n        \"dcTemperatureAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Temperature is active in the power plant.\"\"\",\n        }, # notification\n        \"dcTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Temperature alarm is no longer active in the power plant.\"\"\",\n        }, # notification\n        \"dcHumidityAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.159\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Humidity alarm is active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcHumidityAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.160\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Humidity alarm is no longer active in the DC power plant.\"\"\",\n        }, # notification\n        \"dcBBCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Power plant bridging board communications established.\"\"\",\n        }, # notification\n        \"dcBBCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Power plant bridging board communications lost.\"\"\",\n        }, # notification\n        \"iemHighTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeCurrentTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: High temperature threshold violated on Integrated\nEnvironmental Monitor probe. The first variable is the\ncurrent temperature. The second variable is the temperature\nscale. The third variable is the probe number. The fourth\nvariable is the probe name.\"\"\",\n        }, # notification\n        \"iemHighTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High temperature threshold violated on Integrated\nEnvironmental Monitor probe has been cleared. The first variable\nis the probe number. The second variable is the probe name.\"\"\",\n        }, # notification\n        \"iemLowTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeCurrentTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low temperature threshold violated on integrated\nprobe. The first variable is the current temperature. The\nsecond variable is the temperature scale. The third\nvariable is the probe number. The fourth variable is the\nprobe name.\"\"\",\n        }, # notification\n        \"iemLowTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low temperature threshold violated on integrated\nprobe has been cleared. The first variable is the probe number.\nThe second variable is the probe name.\"\"\",\n        }, # notification\n        \"iemHighHumidThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeCurrentHumid\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: High humidity threshold violated on integrated\nprobe. The first variable is the current humidity. The\nsecond variable is the probe number. The third variable\nis the probe name.\"\"\",\n        }, # notification\n        \"iemHighHumidThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High humidity threshold violated on integrated\nprobe cleared. The first variable is the probe number. The second\nvariable is the probe name.\"\"\",\n        }, # notification\n        \"iemLowHumidThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.169\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeCurrentHumid\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low humidity threshold violated on integrated\nprobe. The first variable is the current humidity. The\nsecond variable is the probe number. The third variable\nis the probe name.\"\"\",\n        }, # notification\n        \"iemLowHumidThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.170\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusProbeNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low humidity threshold violated on integrated\nprobe cleared. The first variable is the probe number. The second\nvariable is the probe name.\"\"\",\n        }, # notification\n        \"iemProbeDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The temperature/humidity probe on the Integrated\nEnvironmental Monitor has been disconnected. This trap is\ngenerated when a probe that has been in communication with\nthe Environmental Monitor has been disconnected or can no\nlonger communicate.\"\"\",\n        }, # notification\n        \"iemProbeConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The temperature/humidity probe on the Integrated\nEnvironmental Monitor has been connected. This trap is generated\nwhen the Environmental Monitor establishes communication with a\nprobe that had previously not been connected.\"\"\",\n        }, # notification\n        \"iemContactFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusContactNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusContactName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: There is a contact fault on the Integrated\nEnvironmental Monitor. The first argument is the number\nof the contact. The second argument is the name of the\ncontact.\"\"\",\n        }, # notification\n        \"iemContactFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusContactNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusContactName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The contact fault on the Integrated\nEnvironmental Monitor has been cleared. The first\nargument is the number of the contact. The second\nargument is the name of the contact.\"\"\",\n        }, # notification\n        \"iemRelayFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusRelayNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The output relay on the Integrated Environmental\nMonitor has switched to the fault state. The first\nargument is the number of the output relay. The second\nargument is the name of the output relay. The third\nargument is the event that caused the fault.\"\"\",\n        }, # notification\n        \"iemRelayFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"iemStatusRelayNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"iemStatusRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The fault condition on the output relay on the\nIntegrated Environmental Monitor has cleared. The first\nargument is the number of the output relay. The second\nargument is the name of the output relay.\"\"\",\n        }, # notification\n        \"bmBatManCommEstab\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Serial Communications Established with Battery Manager.\"\"\",\n        }, # notification\n        \"bmBatManCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Serial Communications Lost with Battery Manager.\"\"\",\n        }, # notification\n        \"bmBatManKneeAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.179\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Battery Voltage Knee Threshold Alarm Detected.\"\"\",\n        }, # notification\n        \"bmBatManKneeAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.180\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Battery Voltage Knee Threshold Alarm Cleared.\"\"\",\n        }, # notification\n        \"bmBatManChargerAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Charger Alarm Detected.\"\"\",\n        }, # notification\n        \"bmBatManChargerAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Charger Alarm Cleared.\"\"\",\n        }, # notification\n        \"bmBatManBatteryAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Battery Alarm Detected.\"\"\",\n        }, # notification\n        \"bmBatManBatteryAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Battery Alarm Cleared.\"\"\",\n        }, # notification\n        \"bmBatManEnvironmentAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Environment Alarm Detected.\"\"\",\n        }, # notification\n        \"bmBatManEnvironmentAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Environment Alarm Cleared.\"\"\",\n        }, # notification\n        \"bmBatManMaintenanceAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Maintenance Alarm Detected.\"\"\",\n        }, # notification\n        \"bmBatManMaintenanceAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Maintenance Alarm Cleared.\"\"\",\n        }, # notification\n        \"pduCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.189\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication Established.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.190\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication Lost.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduUtilityLineUndervoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.191\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Utility Line Undervoltage. \nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduUtilityLineUndervoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.192\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Utility Line Undervoltage Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduUtilityLineOvervoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.193\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Utility Line Overvoltage.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduUtilityLineOvervoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.194\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Utility Line Overvoltage Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduGroundOvercurrent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.195\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Ground Overcurrent.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduGroundOvercurrentCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.196\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Ground Overcurrent Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputUndervoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.197\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Undervoltage.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputUndervoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.198\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Undervoltage Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputOvervoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.199\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Overvoltage.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputOvervoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.200\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Overvoltage Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputUndercurrent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.201\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Undercurrent.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputUndercurrentCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.202\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Undercurrent Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputOvercurrent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.203\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Overcurrent.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelInputOvercurrentCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.204\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Overcurrent Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduCircuitPanelFrequencyOutOfRange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Frequency Out Of Range.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduCircuitPanelFrequencyOutofRangeCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Frequency No Longer Out Of Range.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduCircuitPanelNeutralOvercurrent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Circuit Panel Input Neutral Overcurrent.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduCircuitPanelNeutralOvercurrentCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Circuit Panel Input Neutral Overcurrent Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduSystemOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.209\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: PDU System Off.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduOnBatteryMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.210\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: PDU is in On Battery Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduMaintenanceBypassMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.211\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: PDU is in Maintenance Bypass Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduAtypicalBypassMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.212\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: PDU is in Atypical Bypass Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduNoPanelFeedMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.213\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: PDU is in No Panel Feed Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduUpsOperationMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.214\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: PDU is in Ups Operation Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduForcedBypassMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.215\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: PDU is in Forced Bypass Mode.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduInputTransformerOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.216\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Input Transformer Over Temperature.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduInputTransformerOverTemperatureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.217\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Input Transformer Over Temperature Cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"pduUPSInputVoltageLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.218\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: UPS Input Voltage phase-N Lost.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduUPSInputVoltageRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.219\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UPS Input Voltage phase-N Restored.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"pduContactFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.220\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A contact closure in the PDU is in an abnormal position. \nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the number of the contact.\"\"\",\n        }, # notification\n        \"pduContactFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.221\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A contact closure in the PDU is in a normal position. \nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the number of the contact.\"\"\",\n        }, # notification\n        \"rPDUBankPhaseLowLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.222\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A bank or phase on the Rack PDU has violated the low load threshold.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"rPDUBankPhaseLowLoadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.223\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase low load condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"rPDUBankPhaseNearOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.224\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A bank or phase of the Rack PDU is near an overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"rPDUBankPhaseNearOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.225\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase near overload condition on a Rack PDU has \nbeen cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"rPDUBankPhaseOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.226\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A bank or phase of the Rack PDU is in an overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"rPDUBankPhaseOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.227\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusBankNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase overload condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the bank number (0 if this is phase data).\nThe fourth argument is the phase number (0 if this is bank data).\"\"\",\n        }, # notification\n        \"aruDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.228\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote ARU Device Configuration change.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"rmPDUCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.229\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication Lost.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"emsCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.230\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication Established.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"emsCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.231\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication Lost.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"emsProbeConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.232\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A probe has been connected to the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the probe number. \nThe fourth argument is the probe name.\"\"\",\n        }, # notification\n        \"emsProbeDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.233\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A probe has been disconnected from the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the probe number. \nThe fourth argument is the probe name.\"\"\",\n        }, # notification\n        \"emsSensorConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.234\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A sensor has been connected to the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the sensor number. \nThe fourth argument is the sensor name.\"\"\",\n        }, # notification\n        \"emsSensorDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.235\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A sensor has been disconnected from the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the sensor number. \nThe fourth argument is the sensor name.\"\"\",\n        }, # notification\n        \"emsSensorFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.236\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A EMS sensor is in the fault condition.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the sensor number. \nThe fourth argument is the sensor name.\"\"\",\n        }, # notification\n        \"emsSensorFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.237\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsSensorStatusSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A EMS sensor fault condition has cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the sensor number. \nThe fourth argument is the sensor name.\"\"\",\n        }, # notification\n        \"emsBeaconConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.238\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A beacon has been connected to the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsBeaconDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.239\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A beacon has been disconnected from the EMS.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsBeaconOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.240\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A EMS beacon has gone on.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsBeaconOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.241\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A EMS beacon has gone off.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsMajorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.242\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Major Alarm is present in the EMS.\nThe first argument is the EMS serial number.\nThe second argument is the EMS name.\"\"\",\n        }, # notification\n        \"emsMajorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.243\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Major Alarm condition has been cleared in the EMS.\nThe first argument is the EMS serial number.\nThe second argument is the EMS name.\"\"\",\n        }, # notification\n        \"emsMinorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.244\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Minor Alarm is present in the EMS.\nThe first argument is the EMS serial number.\nThe second argument is the EMS name.\"\"\",\n        }, # notification\n        \"emsMinorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.245\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Minor Alarm condition has been cleared in the EMS.\nThe first argument is the EMS serial number.\nThe second argument is the EMS name.\"\"\",\n        }, # notification\n        \"emsOutletStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.246\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An outlet on the EMS has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the outlet number. \nThe fourth argument is the outlet name.\nThe fifth argument is the current outlet state (1=ON, 2=OFF).\nThe sixth argument is the configured normal outlet state (1=ON, 2=OFF).\"\"\",\n        }, # notification\n        \"emsOutletStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.247\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutletStatusOutletNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the EMS has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the outlet number. \nThe fourth argument is the outlet name.\nThe fifth argument is the current outlet state (1=ON, 2=OFF).\nThe sixth argument is the configured normal outlet state (1=ON, 2=OFF).\"\"\",\n        }, # notification\n        \"emsInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.248\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An input contact on the EMS has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe sixth argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"emsInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.249\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsInputContactStatusInputContactNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An input contact on the EMS has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe sixth argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"emsOutputRelayStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.250\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An output relay on the EMS has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the output relay number. \nThe fourth argument is the output relay name.\nThe fifth argument is the current output relay state (1=CLOSED, 2=OPEN).\nThe sixth argument is the configured normal output relay state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"emsOutputRelayStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.251\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsOutputRelayStatusOutputRelayNormalState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An output relay on the EMS has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the output relay number. \nThe fourth argument is the output relay name.\nThe fifth argument is the current output relay state (1=CLOSED, 2=OPEN).\nThe sixth argument is the configured normal output relay state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"emsDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.252\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device configuration change has been made on the EMS.\nThe first argument is the EMS serial number.\nThe second argument is the EMS name.\"\"\",\n        }, # notification\n        \"envHighTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.253\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: High temperature threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envHighTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.254\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High temperature threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLowTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.255\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low temperature threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLowTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.256\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low temperature threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envHighHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.257\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: High humidity threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity\nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envHighHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.258\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High humidity threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity. \nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLowHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.259\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low humidity threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity\nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLowHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.260\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low humidity threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity. \nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"rPDUCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.266\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication with a Rack PDU has been established.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.267\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication with a Rack PDU has been lost.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUOutletOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.268\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on a Switched Rack PDU has turned on.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet index number.\nThe fourth argument is the outlet name.\"\"\",\n        }, # notification\n        \"rPDUOutletOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.269\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on a Switched Rack PDU has turned off.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet index number.\nThe fourth argument is the outlet name.\"\"\",\n        }, # notification\n        \"rPDUDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.270\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device configuration change has been made on a \nRack PDU.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUOutletConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.271\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet configuration change has been made on a \nSwitched Rack PDU.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet index number.\nThe fourth argument is the outlet name.\"\"\",\n        }, # notification\n        \"rPDULowLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.272\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rack PDU has violated the low load threshold.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDULowLoadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.273\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The low load condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDUNearOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.274\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rack PDU is near an overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDUNearOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.275\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The near overload condition on a Rack PDU has \nbeen cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDUOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.276\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Rack PDU is in an overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDUOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.277\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadStatusPhaseNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The overload condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase number.\"\"\",\n        }, # notification\n        \"rPDUPowerSupply1Fail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.278\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Power Supply 1 on Rack PDU is in FAIL state.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUPowerSupply1Ok\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.279\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Power Supply 1 on Rack PDU is operating normally.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUPowerSupply2Fail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.280\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Power Supply 2 on Rack PDU is in FAIL state.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUPowerSupply2Ok\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.281\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Power Supply 2 on Rack PDU is operating normally.\nThe first argument is the serial number.\nThe second argument is the device name.\"\"\",\n        }, # notification\n        \"rPDUPhaseConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.282\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDULoadPhaseConfigIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A phase configuration change has been made on a \nRack PDU.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the phase index number.\"\"\",\n        }, # notification\n        \"rPDUCancelPendingCommand\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.283\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletControlOutletName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A cancel pending command has been made on a \nSwitched Rack PDU.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet index number (0 indicates all outlets).\nThe fourth argument is the outlet name (or device name if all outlets).\"\"\",\n        }, # notification\n        \"aruAlinkCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.284\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote ARU Communication Established.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruAlinkCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.285\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Remote ARU Communication Lost.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruFanFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.286\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Remote ARU Fan Fail.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruFanFailCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.287\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote ARU Fan Fail Cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruSmokeAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.288\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Remote ARU Smoke Alarm.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruSmokeAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.289\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote ARU Smoke Alarm Cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruHighTemperatureAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.290\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: ARU Exhaust temperature has exceeded the override \nthreshold and the ARU has increased fan speed to\nmaintain a safe environment in the rack.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruHighTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.291\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: ARU temperature override state has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruExhaustTemperatureAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.292\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: ARU Extreme Exhaust Temperature Alarm.\nThe ARU is unable to control the temperature within the rack\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruExhaustTemperatureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.293\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote ARU Exhaust Temperature Alarm Cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"envAlinkCommunicationEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.294\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Remote Probe Communication Established.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the probe number. \nThe fourth argument is the probe name.\"\"\",\n        }, # notification\n        \"envAlinkCommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.295\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Remote Probe Communication Lost.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the probe number. \nThe fourth argument is the probe name.\"\"\",\n        }, # notification\n        \"emsAlinkPowerOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.296\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Alink Power Overload.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsAlinkPowerOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.297\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Alink Power Overload Cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"upsOutletGroupTurnedOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.298\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsOutletGroupControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The specified Outlet Group turned on.\"\"\",\n        }, # notification\n        \"upsOutletGroupTurnedOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.299\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsOutletGroupControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified Outlet Group turned off.\"\"\",\n        }, # notification\n        \"smwCriticalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.300\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Symmetra MW UPS critical condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"smwCriticalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.301\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Symmetra MW UPS critical condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"smwWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.302\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Symmetra MW UPS warning condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"smwWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.303\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Symmetra MW UPS warning condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"smwInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.304\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Symmetra MW UPS informational condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"smwInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsGauge\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Symmetra MW UPS informational condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"airCriticalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An Air critical condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"airCriticalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Air critical condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"airWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An Air warning condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"airWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An Air warning condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"airInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Air informational condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"airInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An Air informational condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"xPDUInputVoltageLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Three-phase input voltage to the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUInputVoltageLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Three-phase input voltage to the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUInputVoltageHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Three-phase input voltage to the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUInputVoltageHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Three-phase input voltage to the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUBypassVoltageLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Three-phase bypass input voltage to the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBypassVoltageLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Three-phase bypass input voltage to the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUBypassVoltageHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.318\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Three-phase bypass input voltage to the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBypassVoltageHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.319\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Three-phase bypass input voltage to the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUOutputVoltageLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.320\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase output voltage of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUOutputVoltageLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.321\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase output voltage of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUOutputVoltageHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.322\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase output voltage of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUOutputVoltageHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.323\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase output voltage of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xPDUOutputCurrentLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.324\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase output load current of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUOutputCurrentLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.325\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase output load current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUOutputCurrentHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.326\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase load current of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUOutputCurrentHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.327\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase output current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUOutputFrequencyAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.328\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The devices output frequency is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the frequency deviation from the nominal in tenths of Hertz.\"\"\",\n        }, # notification\n        \"xPDUOutputFrequencyAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.329\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The devices output frequency is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUSystemGroundCurrentAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.330\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The earth ground current of the device is over the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured current in tenths of Amps.\nThe fourth argument is the threshold, in tenths of Amps, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUSystemGroundCurrentAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.331\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The earth ground current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.332\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A user input contact on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=OPEN, 2=CLOSED).\nThe sixth argument is the configured normal input contact state (1=OPEN, 2=CLOSED).\"\"\",\n        }, # notification\n        \"xPDUInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.333\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A user input contact on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe sixth argument is the configured normal input contact state (1=OPEN, 2=CLOSED).\"\"\",\n        }, # notification\n        \"xPDUOutputNeutralCurrentHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.334\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The three-phase neutral current of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured current in tenths of Amps.\nThe fourth argument is the threshold, in tenths of Amps, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUOutputNeutralCurrentHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.335\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The output neutral current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUCoolingFanAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.336\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's internal cooling fans have failed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUCoolingFanAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.337\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's cooling fans are now functioning properly.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUTransformerTempAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.338\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's isolation transformer is over temperature.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUTransformerTempAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.339\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's isolation transformer is no longer over temperature.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.340\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a branch circuit is outside the limits specified for that\nbranch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.341\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a branch circuit is back within the limits \nspecified for that branch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.342\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a branch circuit is outside the limits specified for that\nbranch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.343\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a branch circuit is back within the limits \nspecified for that branch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUInternalCommError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.344\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: There is an internal communication error in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"emsHardwareStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.345\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's hardware is improperly configured and operating outside\nnormal bounds for the hardware.  This can be caused by improper devices being\nconnected to the EMS ports or Alink Current limit detection.\"\"\",\n        }, # notification\n        \"emsHardwareStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.346\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's hardware is in its normal operational state.\nThe first argument is the host device serial number.\"\"\",\n        }, # notification\n        \"ceSevereCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.347\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Custom Event severe condition was detected.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"ceSevereConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.348\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Custom Event severe condition was cleared.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"ceWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.349\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Custom Event warning condition was detected.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"ceWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.350\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Custom Event warning condition was cleared.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"ceInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.351\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Custom Event informational condition was detected.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"ceInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.352\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Custom Event informational condition was cleared.\nThe first variable is the custom event text message.\nThe second variable is the custom event number.\"\"\",\n        }, # notification\n        \"upsInternalOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.353\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The internal over temperature condition exists.\"\"\",\n        }, # notification\n        \"upsInternalOverTemperatureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.354\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The internal over temperature condition cleared.\"\"\",\n        }, # notification\n        \"upsMpuReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.355\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The MPU has been reset.\"\"\",\n        }, # notification\n        \"upsOutputSwitchClosed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.356\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Output Switch is closed.\"\"\",\n        }, # notification\n        \"upsOutputSwitchOpened\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.357\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Output Switch is open.\"\"\",\n        }, # notification\n        \"upsCalibrationStackChanged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.358\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A calibration value in the stack was changed.\"\"\",\n        }, # notification\n        \"envMaxTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.359\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Max temperature threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMaxTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.360\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Max temperature threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMinTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.361\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Min temperature threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMinTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.362\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Min temperature threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMaxHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.363\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Max humidity threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity\nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMaxHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.364\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Max humidity threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity. \nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMinHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.365\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Min humidity threshold violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity\nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envMinHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.366\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Min humidity threshold violation cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current humidity. \nThe fourth argument is the probe number. \nThe fifth argument is the probe name.\"\"\",\n        }, # notification\n        \"envSTIncTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.367\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Short-term increasing temperature rate violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envSTIncTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.368\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Short-term increasing temperature rate cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envSTDecTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.369\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Short-term decreasing temperature rate violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envSTDecTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.370\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Short-term decreasing temperature rate cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLTIncTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.371\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Long-term increasing temperature rate violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLTIncTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.372\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Long-term increasing temperature rate cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLTDecTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.373\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Long-term decreasing temperature rate violated on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"envLTDecTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.374\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeTemperature\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsStatusSysTempUnits\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsProbeStatusProbeName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Long-term decreasing temperature rate cleared on the probe. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the current temperature. \nThe fourth argument is the temperature scale. \nThe fifth argument is the probe number. \nThe sixth argument is the probe name.\"\"\",\n        }, # notification\n        \"bmsCriticalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.375\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Battery Management System critical condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"bmsCriticalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.376\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Battery Management System critical condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"bmsWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.377\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Battery Management System warning condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"bmsWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.378\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Battery Management System warning condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"bmsInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.379\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Battery Management System informational condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"bmsInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.380\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A Battery Management System informational condition was cleared.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"xATSOutputVoltageLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.381\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device three-phase output voltage of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xATSOutputVoltageLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.382\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The devices three-phase output voltage is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xATSOutputVoltageHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.383\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device three-phase output voltage of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\nThe fifth argument is the threshold, in tenths of Volts, above which the alarm is generated.\"\"\",\n        }, # notification\n        \"xATSOutputVoltageHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.384\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The devices three-phase output voltage is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1-N, 2=L2-N, 3=L3-N, 4=unused, 5=L1-L2, 6=L2-L3, 7=L3-L1).\nThe fourth argument is the measured voltage in tenths of Volts.\"\"\",\n        }, # notification\n        \"xATSOutputCurrentLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.385\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase load current of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in Amps.\nThe fifth argument is the threshold, in Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xATSOutputCurrentLowAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.386\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase load current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in Amps.\"\"\",\n        }, # notification\n        \"xATSOutputCurrentHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.387\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The three-phase output load current of the device is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in Amps.\nThe fifth argument is the threshold, in Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xATSOutputCurrentHighAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.388\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The three-phase output load current of the device is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\nThe fourth argument is the measured current in Amps.\"\"\",\n        }, # notification\n        \"xATSOutputFrequencyAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.389\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The devices output frequency is outside the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the frequency deviation from the nominal in tenths of Hertz.\nThe fourth argument is the frequency deviation threshold in tenths of Hertz, \nfrom which the alarm was generated.\"\"\",\n        }, # notification\n        \"xATSOutputFrequencyAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.390\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The devices output frequency is back within the specified limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSInternalCommError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.391\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: There is an internal communication error in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSInternalCommErrorCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.392\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Internal communication has been restored.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDataCommMismatchError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.393\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A data incompatibility exists within the device.  This\nis typically the result of mismatches between firmware revisions\nof the transfer switch controller and the Network Management interface.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDataCommMismatchErrorCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.394\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The internal data incompatibility has been resolved.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGenCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.395\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The XATS cannot communicate with the generator.\nThis will make unavailable all the xATSGenerator OIDs.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGenCommEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.396\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The XATS has established communication with the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSNeutralPosition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.397\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: XATS has transferred to neutral position.\nIn this position neither Source 1 nor Source 2 is selected,\nand the XATS will have no output voltage.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the mode in which the switch is operating\n(1=Auto, 2=Not-in-Auto, Abnormal Condition  3=Not-in-Auto, manual).\"\"\",\n        }, # notification\n        \"xATSSwitchTransferEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.398\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: XATS has transferred from one source to the other.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the mode in which the switch is operating.\n(1=Auto, 2=Not-in-Auto, Abnormal Condition  3=Not-in-Auto, manual).\nThe fourth argument is the input source selected (1=Source 1, 2=Source 2).\nThe fifth argument is type of transfer that took place. (1=Closed, 2=Open, 3=Unknown)\"\"\",\n        }, # notification\n        \"xATSInternalATSFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.399\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An internal XATS fault has been detected.\nThe XATS may have forced itself to not-in-auto mode (abnormal condition),\nas indicated by the xATSSwitchStatusAutoSwitchOperationalMode OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument indicates the detected fault.\n\n   1=Cannot Close S1\n   2=Cannot Close S2\n   3=Cannot Open S1\n   4=Cannot Open S2\n   5=Cannot Trip Open S1 \n   6=Cannot Trip Open S2 \n   7=Start Contact Failure\n   8=Voltage Sensing Failure\"\"\",\n        }, # notification\n        \"xATSInternalATSFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.400\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected internal XATS fault has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument indicates the detected fault.\n\n   1=Cannot Close S1\n   2=Cannot Close S2\n   3=Cannot Open S1\n   4=Cannot Open S2\n   5=Cannot Trip Open S1 \n   6=Cannot Trip Open S2 \n   7=Start Contact Failure\n   8=Voltage Sensing Failure\"\"\",\n        }, # notification\n        \"xATSEngineStartAsserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.401\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The XATS has asserted the Engine Start contact.\nThis should result in the generator producing output voltage.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument indicates the reason that the start signal was asserted\n1=Unknown, 2=S1 Low Voltage, 3=S1 High Voltage, 4=S1 Line Imbalance,\n5=S1 Freq Range, 6=S1 Bad Rotation.\"\"\",\n        }, # notification\n        \"xATSEngineStopAsserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.402\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The XATS has de-asserted the Engine Start contact.\nThis should result in the generator shutting down, and producing no output voltage.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSStartFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.403\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator failed to start. After assertion of the\nEngine Start signal, the quality of Source 2 was not seen as good.\nThis alarm can be cleared using the xATSSwitchStatusClearLatchedAlarms OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument indicates the line quality at S2\n 1=Unknown, 2=S2 Low Voltage, 3=S2 High Voltage, 4=S2 Line Imbalance,\n 4=S2 Freq Range, 5=S2 Bad Rotation.\"\"\",\n        }, # notification\n        \"xATSStopFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.404\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The generator failed to stop. After de-assertion of the\nEngine Start signal, the quality of Source 2 continued to be seen as good.\nThis alarm can be cleared using the xATSSwitchStatusClearLatchedAlarms OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSNotInAutomaticMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Automatic Transfer Switch is not in automatic mode.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe xATSSwitchStatusAutoSwitchStatus OID and the\nxATSSwitchStatusAutoSwitchOperationalMode OID\ncan provide more information about the state of the XATS.\"\"\",\n        }, # notification\n        \"xATSNotInAutomaticModeCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Automatic Transfer Switch is in automatic mode.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSEpoTripped\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's Emergency Power Off (EPO) circuit is tripped.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSEpoReset\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's Emergency Power Off (EPO) circuit has been\nreset to the armed position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSEpoTestMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.409\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The device's Emergency Power Off (EPO) circuit has been\nswitched back to the test position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSEpoArmed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.410\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's Emergency Power Off (EPO) circuit has been\nswitched back to the armed position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSTestInitiated\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.411\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A scheduled test has been initiated.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the type of test initiated (1=scheduled, 2=manual).\"\"\",\n        }, # notification\n        \"xATSTestCanceled\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.412\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The scheduled test has been canceled\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the type of test initiated (1=scheduled, 2=manual).\"\"\",\n        }, # notification\n        \"xATSTestFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.413\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The initiated test has failed.\nThis alarm can be cleared using the xATSSwitchStatusClearLatchedAlarms OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSTestPassed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.414\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The initiated test has passed\nswitched back to the armed position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.415\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A user input contact on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=OPEN, 2=CLOSED).\nThe sixth argument is the configured normal input contact state (1=OPEN, 2=CLOSED).\"\"\",\n        }, # notification\n        \"xATSInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.416\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A user input contact on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the input contact number. \nThe fourth argument is the input contact name.\nThe fifth argument is the input contact state (1=OPEN, 2=CLOSED).\nThe sixth argument is the configured normal input contact state (1=OPEN, 2=CLOSED).\"\"\",\n        }, # notification\n        \"xATSRemoteStartContactMismatch\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.417\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The state of the generator's Remote Start input\nand the ATS's Engine Start output do not match. \nThis indicates something wrong in the Engine Start wiring,\nwhich must be corrected. This condition will prevent the \ngenerator from being started when needed.\n\n  (See also: xATSGeneratorStatusRemoteStart \n   and xATSSwitchStatusEngineStartSignal OIDs)\n\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSRemoteStartContactMismatchCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.418\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Mismatch in the state of the generator's \nRemote Start input and the ATS's Engine Start output as been resolved. \nThis indicates something wrong in the Engine Start wiring,\nwhich must be corrected. This condition will prevent the \ngenerator from being started when needed.\n\n  (See also: xATSGeneratorStatusRemoteStart \n   and xATSSwitchStatusEngineStartSignal OIDs)\n\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDoorOpenAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.419\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The XATS exterior panel door is open.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDoorOpenAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.420\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The external door to the device is closed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDCBackupAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.421\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The XATS's DC backup has been lost. The XATS will lose power\non Source 1 failure, causing the Engine Start signal to be asserted.\nThe XATS will then restart from Source 2.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSDCBackupAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.422\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: DC backup alarm has been cleared in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowCoolantLevelAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.423\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low coolant level has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowCoolantLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.424\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low coolant level has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowCoolantLevelAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.425\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Very low coolant level has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowCoolantLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.426\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected Very low coolant level has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorHighCoolantTempAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.427\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: High coolant temperature has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorHighCoolantTempAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.428\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected high coolant temperature has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryHighCoolantTempAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.429\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Very high coolant temperature has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryHighCoolantTempAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.430\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The Very high coolant temperature condition has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowCoolantTempAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.431\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Low coolant temperature has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowCoolantTempAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.432\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The low coolant temperature condition has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowOilLevelAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.433\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Low oil level has been detected in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowOilLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.434\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low oil level alarm has been cleared in the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowBatteryVoltDuringCrankAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.435\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's battery voltage has been detected \nas low while cranking the engine.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowBatteryVoltDuringCrankAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.436\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator's low battery voltage while\ncranking condition has been cleared.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowBatteryVoltDuringCrankAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.437\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's battery voltage has been detected \nas very low while cranking the engine.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowBatteryVoltDuringCrankAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.438\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator's high battery voltage while\ncranking condition has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorEStop\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.439\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's emergency stop input has been activated.\nAfter the emergency stop signal has been removed, the E-Stop condition  \nmust be cleared before the generator can be started again.\nE-Stop conditions can only be cleared via the generator front panel.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\nThe fourth argument is the type of E-Stop (1=LOCAL, 2=REMOTE).\"\"\",\n        }, # notification\n        \"xATSGeneratorEStopCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.440\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator's emergency stop condition has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\nThe fourth argument is the type of E-Stop (1=LOCAL, 2=REMOTE).\"\"\",\n        }, # notification\n        \"xATSGeneratorHighBatteryVolt\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.441\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The generator's battery voltage has been detected as high.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorHighBatteryVoltCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.442\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected high battery voltage has been cleared, on the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowBatteryVolt\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.443\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's battery voltage has been detected as low.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowBatteryVoltCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.444\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low battery voltage has been cleared, on the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorControlSwitchNotAuto\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.445\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The control switch on the generator is not in auto position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorControlSwitchNotAutoCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.446\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The control switch on the generator is in auto position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowOilPressure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.447\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's oil pressure has been detected as low.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowOilPressureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.448\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low oil pressure has been cleared, on the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowOilPressure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.449\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator's oil pressure has been detected as very low.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowOilPressureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.450\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected v.low oil pressure has been cleared, on the generator.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.451\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator is overloaded.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.452\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator is running within loading limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowACVEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.453\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator AC voltage is outside the acceptable bounds.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowACVEventCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.454\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator AC voltage is within normal bounds.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorHighACVEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.455\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator AC voltage is outside the acceptable bounds.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorHighACVEventCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.456\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator AC voltage is within normal bounds.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOverspeed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.457\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator is running over the acceptable RPM.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOverspeedCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.458\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator overspeed shutdown has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorEngineCold\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.459\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator engine is cold, may not start.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorEngineColdCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.460\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The engine is not cold to start.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOutputBreakerOpen\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.461\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generators output breaker has been detected as open.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorOutputBreakerOpenCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.462\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The engine is not cold to start.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowFuelLevelAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.463\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The tank fuel level is below the limits specified\nin the xATSGeneratorFuelSystemLowFuelLevelThreshold OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured fuel level in percent of full.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowFuelLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.464\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The tank fuel level is back above the specified limit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowFuelLevelAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.465\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The tank fuel level is below the low threshold limits.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the measured tank fuel level in percent of full.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowFuelLevelAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.466\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low tank level has been cleared in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowRunTimeAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.467\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The estimated runtime is below the limits specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the estimated runtime in hours.\"\"\",\n        }, # notification\n        \"xATSGeneratorLowRunTimeAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.468\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low runtime has been cleared in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowRunTimeAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.469\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The estimated runtime is below the limits specified\nin the xATSGeneratorFuelSystemVeryLowRunTimeThreshold OID.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the estimated runtime in hours.\"\"\",\n        }, # notification\n        \"xATSGeneratorVeryLowRunTimeAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.470\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The detected low runtime has been cleared in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorServiceDueAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.471\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The generator is due for scheduled service.\nGeneration of this alarm is based on calendar days since \nand/or actual generator run-hours since last service.\nThis alarm is cleared using the xATSGeneratorServiceResetRecord OID.\n\n  (See also: xATSGeneratorServiceCalendarIntervalThreshold\n   and xATSGeneratorServiceRunHoursThreshold OIDs)\n\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorServiceDueAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.472\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator's service registers have been reset.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorShutdown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.473\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator is shutdown.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorShutdownCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.474\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The generator shutdown alarm is cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorBatteryCharger\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.475\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The generator battery charger is nonfunctional.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorBatteryChargerCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.476\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Fault in the generator battery charger is cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorGenericEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.477\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Any generic generator event.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorGenericEventCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.478\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Generated generic generator event is cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xPDUInternalCommErrorCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.479\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Internal communication has been restored.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUSystemStateAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.480\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The PDU's breakers (Q1, Q2 & Q3) are in a configuration that might lead\nto system unavailability.  it may signify a temporary condition, when the breakers\nare placed in an atypical manner as the user transitions to (UPS OPERATION or MAINTENANCE BYPASS)\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the type of state change (1=NO UPS INPUT, 2=NO PANEL FEED, 3=ATYPICAL BYPASS MODE).\n note: The NO_PANEL_FEED alarm is applicable only for PDUs with system bypass.\"\"\",\n        }, # notification\n        \"xPDUSystemStateAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.481\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The PDU's breakers (Q1, Q2 & Q3) are set in a configuration\nthat is a non-alarm state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the type of state change (1=NO UPS INPUT, 2=NO PANEL FEED, 3=ATYPICAL BYPASS MODE).\n note: The NO_PANEL_FEED alarm is applicable only for PDUs with system bypass.\"\"\",\n        }, # notification\n        \"xPDUEpoTestMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.482\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The device's Emergency Power Off (EPO) circuit has been\nswitched back to the test position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUEpoArmed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.483\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's Emergency Power Off (EPO) circuit has been\nswitched back to the armed position.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUFuseBlownAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.484\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: One or more fuses in this PDU have been detected as open.\nThese fuses are in the feed to the UPS associated with this PDU.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"xPDUFuseBlownAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.485\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A previous check fuse alarm in this PDU has cleared.\nThese fuses are in the feed to the UPS associated with this PDU.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"xPDUBreakerPositionAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.486\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A PDU breaker is in a state that compromises system availability.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the breaker (1=MAIN INPUT, 2=BYPASS INPUT, 3=CROSS TIE, 4=OUTPUT).\n note: The OUTPUT breaker position alarm is applicable only for PDUs with no system bypass.\nThe fourth argument is the breaker position (1=OPEN, 2=CLOSED).\"\"\",\n        }, # notification\n        \"xPDUBreakerPositionAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.487\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A PDU breaker is no longer in a state that compromises system availability.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the breaker (1=MAIN INPUT, 2=BYPASS INPUT, 3=CROSS TIE, 4=OUTPUT).\n note: The OUTPUT breaker position alarm cleared is applicable only for PDUs with no system bypass.\"\"\",\n        }, # notification\n        \"xPDUBreakerChangeEvent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.488\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A system breaker or switch within the device has changed state.\nThey are generated when any of the Q1, Q2 or Q3 breakers have changed states.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the breaker that has changed\n(1=UPS FEED (Q1), 2=UPS OUTPUT(Q2), 3=MAINTENANCE BYPASS (Q3).\nThe fourth argument is the state of the breaker that has changed (1=OPEN, 2=CLOSED).\nThe fifth argument is a 8-bit field representing the state of all breakers in the system,\nwhen any of one of the Q1, Q2 or Q3 breakers have changed state.\n\nThe bit map is represented in the following manner (b7, b6 ... b0)\nb0 - UPS FEED (Q1)\nb1 - MAINTENANCE BYPASS (Q3)\nb2 - UPS OUTPUT (Q2)\nb3 - MAIN INPUT\nb4 - BYPASS INPUT\nb5 - CROSS-TIE OUTPUT\n\nExample:  value of 60 (0x3C) indicates that the CROSS_TIE, BYPASS and MAIN INPUT, and Q2 breakers \nare CLOSED and Q3, Q1 breakers are OPEN.\"\"\",\n        }, # notification\n        \"xPDUDataCommMismatchError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.489\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A data incompatibility exists within the device.  This\nis typically the result of mismatches between firmware revisions\nof the transfer switch controller and the Network Management interface.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUDataCommMismatchErrorCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.490\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The internal data incompatibility has been resolved.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUSystemInMaintenanceBypassMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.491\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The PDU state has changed to maintenance bypass mode.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xPDUSystemInUPSOperationalMode\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.492\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The PDU state has changed to UPS operational mode.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSGeneratorFuelTankRuptureAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.493\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Detected a rupture in the inner wall of the generator fuel tank.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorFuelTankRuptureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.494\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The rupture in the inner wall of the generator is not detected.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorGroundFaultAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.495\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Generator ground fault alarm.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSGeneratorGroundFaultAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.496\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Generator ground fault alarm cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the OEM's fault/event code.\"\"\",\n        }, # notification\n        \"xATSOutputLoadPoweredByGeneratorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.497\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The system load on the output of the ATS is being powered by source 2 (generator).\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument indicates if the load is powered by the generator,\nwhen 'load testing' the generator (1 = LIVE, 2 = TEST).\"\"\",\n        }, # notification\n        \"xATSOutputLoadPoweredByGeneratorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.498\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The system load on the output of the ATS is no longer being powered by source 2 (generator).\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xAPCControllerFirmwareUpdateTransferStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.499\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Start controller firmware transfer in the device.\nThe first argument is the host device serial number.\nThe second argument is the host model name that initiated the transfer.\nThe third argument is the name of the file that is transferred. \nThe fourth argument is the updated revision of the file, if available\nThe fifth argument is the reason for the update, if available\n (1=User request, 2=Automatic upgrade by NMC, 3=Unknown).\"\"\",\n        }, # notification\n        \"xAPCControllerFirmwareUpdateTransferComplete\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.500\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Transfer of controller firmware was completed in the device.\nThe first argument is the host device serial number.\nThe second argument is the host device model name that completed the transfer.\nThe third argument is the name of the file that was transferred. \nThe fourth argument is the revision of the file that was transferred, if available.\"\"\",\n        }, # notification\n        \"xAPCControllerFirmwareUpdateTransferFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.501\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Transfer of controller firmware failed.\nThe first argument is the host device serial number.\nThe second argument is the host device model name that failed to transfer.\nThe third argument is the name of the file that failed the transfer, if available.\nThe fourth argument is the reason for failure.\"\"\",\n        }, # notification\n        \"upsPfcInputRelayFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.502\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The PFC (Power Factor Correction) input relay failure exists.\"\"\",\n        }, # notification\n        \"upsPfcInputRelayFailureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.503\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The PFC (Power Factor Correction) input relay failure cleared.\"\"\",\n        }, # notification\n        \"upsInverterOverTemperature\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.504\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The inverter over temperature condition exists.\"\"\",\n        }, # notification\n        \"upsInverterOverTemperatureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The inverter over temperature condition cleared.\"\"\",\n        }, # notification\n        \"upsBatteryOverVoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The battery over voltage condition exists.\"\"\",\n        }, # notification\n        \"upsBatteryOverVoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The battery over voltage condition cleared.\"\"\",\n        }, # notification\n        \"upsEepromFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The EEPROM fault exists.\"\"\",\n        }, # notification\n        \"upsEepromFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.509\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The EEPROM fault cleared.\"\"\",\n        }, # notification\n        \"aruFanRuntimeAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.510\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The total running hours for a fan has exceeded\nthe run hour threshold.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\nThe fifth argument indicates which fan in the ARU.\"\"\",\n        }, # notification\n        \"aruFanRuntimeAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.511\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The total running hours for a fan is no longer\nabove the fan runhour threshold.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\nThe fifth argument indicates which fan in the ARU.\"\"\",\n        }, # notification\n        \"aruFanPoorPerformanceAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.512\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Poor fan performance has been detected in the ARU,\nindicating that the fan may be close to failing.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\nThe fifth argument indicates which fan in the ARU.\"\"\",\n        }, # notification\n        \"aruFanPoorPerformanceAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.513\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Fan performance is no longer degraded.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\nThe fifth argument indicates which fan in the ARU.\"\"\",\n        }, # notification\n        \"aruRedundantPowerLostAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.514\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: One of the redundant line cords on the ARU is no longer receiving AC power.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"aruRedundantPowerLostAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.515\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"emsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"emsIdentEMSName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rARUStatusAruName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Line-cord redundancy has been restored to the ARU.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the ARU number. \nThe fourth argument is the ARU name.\"\"\",\n        }, # notification\n        \"apcDeviceConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.516\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device configuration change has been made on the device.\nThe first argument is the device serial number.\nThe second argument is the device name.\nThe third argument is a secondary device id number.\"\"\",\n        }, # notification\n        \"apcEnvSensorConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.517\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A sensor has been connected to the host device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvSensorDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.518\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A sensor has been disconnected from the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMaxTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.519\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Max temperature threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMaxTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.520\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Max temperature threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvHighTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.521\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: High temperature threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvHighTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.522\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High temperature threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLowTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.523\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Low temperature threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLowTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.524\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low temperature threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMinTempThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.525\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Min temperature threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMinTempThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.526\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Min temperature threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe sixth argument is the sensor number. \nThe seventh argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvSTIncTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.527\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Short-term increasing temperature rate violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvSTIncTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.528\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Short-term increasing temperature rate cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvSTDecTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.529\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Short-term decreasing temperature rate violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvSTDecTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.530\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Short-term decreasing temperature rate cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLTIncTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.531\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Long-term increasing temperature rate violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLTIncTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.532\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Long-term increasing temperature rate cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLTDecTempRateViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.533\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Long-term decreasing temperature rate violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLTDecTempRateViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.534\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Long-term decreasing temperature rate cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMaxHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.535\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Max humidity threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMaxHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.536\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Max humidity threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvHighHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.537\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: High humidity threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvHighHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.538\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High humidity threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLowHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.539\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Low humidity threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvLowHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.540\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low humidity threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMinHumidityThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.541\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Min humidity threshold violated on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcEnvMinHumidityThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.542\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Min humidity threshold violation cleared on the sensor. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the sensor number. \nThe fifth argument is the sensor name.\"\"\",\n        }, # notification\n        \"apcBeaconConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.543\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A beacon has been connected to the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number.\"\"\",\n        }, # notification\n        \"apcBeaconDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.544\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A beacon has been disconnected from the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \"\"\",\n        }, # notification\n        \"apcBeaconOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.545\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A beacon has gone on (activated).\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \"\"\",\n        }, # notification\n        \"apcBeaconOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.546\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A beacon has gone off (deactivated).\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \"\"\",\n        }, # notification\n        \"apcOutletStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.547\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An outlet on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the outlet number. \nThe fifth argument is the outlet name.\nThe sixth argument is the current outlet state (1=ON, 2=OFF).\nThe seventh argument is the configured normal outlet state (1=ON, 2=OFF).\"\"\",\n        }, # notification\n        \"apcOutletStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.548\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An outlet on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the outlet number. \nThe fifth argument is the outlet name.\nThe sixth argument is the current outlet state (1=ON, 2=OFF).\nThe seventh argument is the configured normal outlet state (1=ON, 2=OFF).\"\"\",\n        }, # notification\n        \"apcOutputRelayStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.549\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An output relay on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the output relay number. \nThe fifth argument is the output relay name.\nThe sixth argument is the current output relay state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal output relay state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcOutputRelayStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.550\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An output relay on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the output relay number. \nThe fifth argument is the output relay name.\nThe sixth argument is the current output relay state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal output relay state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcHardwareStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.551\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's hardware is improperly configured and operating outside\nnormal bounds for the hardware.  This can be caused by improper devices being\nconnected to device ports or Alink Current limit detection.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is a hardware specific state code.\"\"\",\n        }, # notification\n        \"apcHardwareStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.552\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's hardware is in its normal operational state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number.\"\"\",\n        }, # notification\n        \"apcCriticalDiscreteInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.553\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A discrete input contact on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcCriticalDiscreteInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.554\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A discrete input contact on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcWarningDiscreteInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.555\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A discrete input contact on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcWarningDiscreteInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.556\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A discrete input contact on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcInformationalDiscreteInputContactStateAbnormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.557\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A discrete input contact on the device has changed to its abnormal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcInformationalDiscreteInputContactStateNormal\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.558\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A discrete input contact on the device has changed to its normal state.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input contact number. \nThe fifth argument is the input contact name.\nThe sixth argument is the input contact state (1=CLOSED, 2=OPEN).\nThe seventh argument is the configured normal input contact state (1=CLOSED, 2=OPEN).\"\"\",\n        }, # notification\n        \"apcAnalogInputMaxThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.559\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Maximum threshold violated on an analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputMaxThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.560\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Maximum threshold violation cleared on the analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputHighThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.561\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: High threshold violated on an analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputHighThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.562\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: High threshold violation cleared on the analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputLowThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.563\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Low threshold violated on an analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputLowThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.564\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Low threshold violation cleared on the analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputMinThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.565\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Minimum threshold violated on an analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcAnalogInputMinThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.566\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Minimum threshold violation cleared on the analog input. \nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is a secondary device id number. \nThe fourth argument is the input number. \nThe fifth argument is the input name.\"\"\",\n        }, # notification\n        \"apcDeviceClearLostComms\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.567\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Lost communications reset command has been issued.\nThe first argument is the device serial number.\nThe second argument is the device name.\nThe third argument is a secondary device id number.\"\"\",\n        }, # notification\n        \"apcDeviceConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.568\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A device has been connected to the host.\nThe first argument is the host serial number.\nThe second argument is the host name.\nThe third argument is the device number.\nThe fourth argument is the device name.\"\"\",\n        }, # notification\n        \"apcDeviceDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.569\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A device has been disconnected from the host.\nThe first argument is the host serial number.\nThe second argument is the host name.\nThe third argument is the device number. \nThe fourth argument is the device name.\"\"\",\n        }, # notification\n        \"apcUnregisteredUserAccessDenied\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.570\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An unregistered user has tried to access the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argumant is the door identifier.\nThe fifth argument is the unregistered user's RFID.\"\"\",\n        }, # notification\n        \"apcRegisteredUserAccessDenied\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.571\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A registered user has been denied access to the device.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argumant is the door identifier.\nThe fifth argument is the user name.\"\"\",\n        }, # notification\n        \"apcRegisteredUserConfigChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.572\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Registered user configuration change.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the user name.\"\"\",\n        }, # notification\n        \"apcDoorUnlocked\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.573\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door has been unlocked.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier.\nThe fifth argument is the door access user.\nThe sixth argument is the door access type.\"\"\",\n        }, # notification\n        \"apcDoorLocked\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.574\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door has been locked.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier.\nThe fifth argument is the door access user.\nThe sixth argument is the door access type.\"\"\",\n        }, # notification\n        \"apcHandleOpened\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.575\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door handle has been opened.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcHandleClosed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.576\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door handle has been closed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorOpened\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.577\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door has been opened.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorClosed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.578\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door has been closed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcKeyOverrideUnlocked\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.580\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Key override unlock has occurred.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcKeyOverrideLocked\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.581\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Key override lock has occurred.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcForcedEntry\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.582\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A forced entry condition has occurred.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcForcedEntryCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.583\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A forced entry condition has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcRelockTimeout\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.584\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A relock timout has occured.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcRelockTimeoutCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.585\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A relock timout has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorSenseDisconnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.586\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A door sensor was disconnected.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorSenseConnected\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.587\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A forced entry condition has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorLostComms\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.588\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communications have been lost with the door.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorEstablishedComms\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.589\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communications have been established with the door.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcRegisteredUserAccessChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.590\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Registered user access changed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the user name.\"\"\",\n        }, # notification\n        \"apcUnregisteredUserStatusChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.591\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Unregistered user status changed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the user name.\"\"\",\n        }, # notification\n        \"apcDeviceClearUserConfigs\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.592\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: User configurations reset command has been issued.\nThe first argument is the device serial number.\nThe second argument is the device name.\nThe third argument is a secondary device id number.\"\"\",\n        }, # notification\n        \"upsBatteryTempSensorFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.600\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The battery temperature sensor fault exists.\"\"\",\n        }, # notification\n        \"upsBatteryTempSensorFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.601\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The battery temperature sensor fault cleared.\"\"\",\n        }, # notification\n        \"upsBatterySoftBusStartFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.602\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A battery bus soft start fault exists.\"\"\",\n        }, # notification\n        \"upsBatterySoftBusStartFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.603\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A battery bus soft start fault exists cleared.\"\"\",\n        }, # notification\n        \"apcOutputShortCircuit\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.604\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An output short circuit condition exists.\"\"\",\n        }, # notification\n        \"apcOutputShortCircuitCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An output short circuit condition cleared.\"\"\",\n        }, # notification\n        \"apcOutputRelayFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An output relay (or its driver) fault exists.\"\"\",\n        }, # notification\n        \"apcOutputRelayFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An output relay (or its driver) fault cleared.\"\"\",\n        }, # notification\n        \"upsPfcFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A PFC fault exists.\"\"\",\n        }, # notification\n        \"upsPfcFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.609\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The PFC fault cleared.\"\"\",\n        }, # notification\n        \"apcDcBusOverVoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.610\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The DC bus voltage is too high.\"\"\",\n        }, # notification\n        \"apcDcBusOverVoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.611\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The DC bus voltage is too high cleared.\"\"\",\n        }, # notification\n        \"upsInverterFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.612\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The inverter fault exists.\"\"\",\n        }, # notification\n        \"upsInverterFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.613\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The inverter fault cleared.\"\"\",\n        }, # notification\n        \"apcAdConverterFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.614\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The A/D converter fault exists.\"\"\",\n        }, # notification\n        \"apcAdConverterFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.615\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The A/D converter fault cleared.\"\"\",\n        }, # notification\n        \"apcLogicPowerSupplyFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.616\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A logic power supply fault exists.\"\"\",\n        }, # notification\n        \"apcLogicPowerSupplyFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.617\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A logic power supply fault cleared.\"\"\",\n        }, # notification\n        \"apcTransformerDCImbalanceFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.618\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The DC component of the transformer's current is too high.\"\"\",\n        }, # notification\n        \"apcTransformerDCImbalanceFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.619\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The DC component of the transformer's current is normal.\"\"\",\n        }, # notification\n        \"upsBackfeedRelayFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.620\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The backfeed relay (or its driver) has a fault.\"\"\",\n        }, # notification\n        \"upsBackfeedRelayFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.621\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The backfeed relay (or its driver) has a fault cleared.\"\"\",\n        }, # notification\n        \"upsBypassRelayFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.622\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A bypass relay (or its driver) has a fault.\"\"\",\n        }, # notification\n        \"upsBypassRelayFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.623\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A bypass relay (or its driver) has a fault cleared.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentMinAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.626\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a branch circuit is outside the limits specified for that\nbranch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentMinAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.627\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a branch circuit is back within the limits \nspecified for that branch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentMaxAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.628\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a branch circuit is outside the limits specified for that\nbranch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\nThe fifth argument is the threshold, in tenths of Amps, above which the alarm was generated.\"\"\",\n        }, # notification\n        \"xPDUBranchCurrentMaxAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.629\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xPDUIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a branch circuit is back within the limits \nspecified for that branch circuit.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the panel position of the branch circuit (1-based index).\nThe fourth argument is the measured current in tenths of Amps.\"\"\",\n        }, # notification\n        \"rPDUOutletLowLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.630\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rack PDU has violated the outlet low load threshold.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"rPDUOutletLowLoadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.631\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The outlet low load condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"rPDUOutletNearOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.632\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A Rack PDU is near an outlet overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"rPDUOutletNearOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.633\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The outlet near overload condition on a Rack PDU has \nbeen cleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"rPDUOutletOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.634\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A Rack PDU is in an overload condition.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"rPDUOutletOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.635\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"rPDUIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUIdentName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"rPDUOutletStatusIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The outlet overload condition on a Rack PDU has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the device name.\nThe third argument is the outlet number.\"\"\",\n        }, # notification\n        \"apcTestTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.636\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Trap used to test SNMP trap functionality.\nThe first argument is a place holder for test variables.\"\"\",\n        }, # notification\n        \"baseFanFailureCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.637\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Base module fan has been repaired\"\"\",\n        }, # notification\n        \"atsLowLoad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.638\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: ATS has violated the bank or phase low load threshold.\nThe first argument is the serial number.\nThe second argument is the product name.  \nThe third argument is the phase number\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsLowLoadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.639\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase low load condition on an ATS has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the product name.  \nThe third argument is the phase number\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsNearOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.640\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: ATS has violated the bank or phase near overload threshold.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is the phase number\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsNearOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.641\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase near overload condition on an ATS has \nbeen cleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is the phase number\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.642\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: ATS is in an overload condition.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is the phase number.\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsOverloadCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.643\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputPhaseIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsOutputBank\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The bank or phase overload condition on an ATS has been \ncleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is the phase number.\nThe fourth argument is the bank number. -1 is returned if bank does not exist.\"\"\",\n        }, # notification\n        \"atsRMSOverVoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.644\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Overvoltage condition violated.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSOverVoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.645\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Overvoltage condition cleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSUnderVoltage\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.646\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Undervoltage condition violated.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSUnderVoltageCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.647\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Undervoltage condition cleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSOverFrequency\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.648\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: OverFrequency condition violated.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSOverFrequencyCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.649\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: OverFrequency condition cleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSUnderFrequency\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.650\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: UnderFrequency condition violated.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsRMSUnderFrequencyCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.651\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UnderFrequency condition cleared.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"isxModularDistributionCommLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.652\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication with a metering segment of the modular \ndistribution system has been lost.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the segment number.\nThe fourth argument describes the modules served by this metering segment.\"\"\",\n        }, # notification\n        \"isxModularDistributionCommEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.653\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Communication with a metering segment of the modular \ndistribution system has been restored.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the segment number.\nThe fourth argument describes the modules served by this metering segment.\"\"\",\n        }, # notification\n        \"isxModularDistributionModuleInserted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.654\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A distribution module has been inserted into the system.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module location number.\"\"\",\n        }, # notification\n        \"isxModularDistributionModuleRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.655\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A distribution module has been removed from the system.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module location number.\"\"\",\n        }, # notification\n        \"isxModularBreakerOpenAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.656\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A distribution module breaker is open and in an alarm condition.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the module breaker(s) (1=L1, 2=L2, 3=L3, 4=L12, 5=L23, 6=L123).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularBreakerOpenAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.657\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An alarm caused by a distribution breaker being open has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker(s) (1=L1, 2=L2, 3=L3, 4=L12, 5=L23, 6=L123).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularMinCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.658\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a distribution module is below the minimum/critical\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularMinCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.659\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution module is no longer below the minimum/critical\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularLowCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.660\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a distribution module is below the low/warning\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularLowCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.661\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution module is no longer below the low/warning\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularHighCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.662\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a distribution module is above the high/warning\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularHighCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.663\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution module is no longer above the high/warning\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularMaxCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.664\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a distribution module is above the maximum/critical\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularMaxCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.665\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution module is no longer above the maximum/critical\nlimit specified for the circuit/cable.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the module number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the circuit/cable fed by this breaker.\"\"\",\n        }, # notification\n        \"isxModularSubfeedBreakerOpenAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.666\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A distribution subfeed breaker is open and in an alarm condition.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedBreakerOpenAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.667\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An alarm caused by a distribution subfeed breaker being open has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedMinCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.668\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a distribution subfeed is below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedMinCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.669\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution subfeed is no longer below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedLowCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.670\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a distribution subfeed is below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedLowCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.671\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution subfeed is no longer below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedHighCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.672\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The current in a distribution subfeed is above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedHighCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.673\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution subfeed is no longer above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedMaxCurrentThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.674\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The current in a distribution subfeed is above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the threshold, in tenths of Amps, from which the alarm was generated.\nThe sixth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularSubfeedMaxCurrentThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.675\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The current in a distribution subfeed is no longer above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the subfeed number.\nThe fourth argument is the breaker/phase index (1=L1, 2=L2, 3=L3).\nThe fifth argument is the load name associated with the subfeed.\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentMinThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.676\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The total output current of the distribution is below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentMinThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.677\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The total output current of the distribution is no longer below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentLowThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.678\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The total output current of the distribution is below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentLowThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.679\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The total output current of the distribution is no longer below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentHighThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.680\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The total output current of the distribution is above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentHighThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.681\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The total output current of the distribution is no longer above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentMaxThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.682\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The total output current of the distribution is above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Amps, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularTotalOutputCurrentMaxThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.683\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The total output current of the distribution is no longer above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageMinThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.684\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The distribution output voltage is below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageMinThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.685\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution output voltage is no longer below the minimum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageLowThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.686\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The distribution output voltage is below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageLowThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.687\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution output voltage is no longer below the low/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageHighThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.688\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The distribution output voltage is above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageHighThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.689\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution output voltage is no longer above the high/warning limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageMaxThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.690\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The distribution output voltage is above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\nThe fourth argument is the threshold, in tenths of Volts, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularOutputVoltageMaxThresholdViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.691\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution output voltage is no longer above the maximum/critical limit specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the phase index (1=L1, 2=L2, 3=L3).\"\"\",\n        }, # notification\n        \"apcDoorClosedImproperly\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.692\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A door has been closed improperly.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcDoorClosedImproperlyCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.693\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A door is no longer closed improperly.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcUserScheduleViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.694\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A user has had a door opened past the scheduled access period.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"apcUserScheduleViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.695\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: User schedule violation has been cleared.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the host device location.\nThe fourth argument is the door identifier, (1=front, 2=rear).\"\"\",\n        }, # notification\n        \"isxModularOutputFrequencyThresholdViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.696\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The distribution output frequency is outside of the operating range specified.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the threshold, in tenths of Hertz, from which the alarm was generated.\"\"\",\n        }, # notification\n        \"isxModularOutputFrequencyViolationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.697\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution output frequency is no longer out of range.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"atsSourceStatusFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.698\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: ATS Source failed.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsSourceStatusOk\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.699\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: ATS Source OK.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the source: 0=A, 1=B.\"\"\",\n        }, # notification\n        \"atsHardwareStatusFail\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.700\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: ATS display board hardware failed.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the failed hardware: \n0= Phase LEDs/Push-button hardware failure \n1= Seven-segment display hardware failure.\"\"\",\n        }, # notification\n        \"atsHardwareStatusOk\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.701\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"atsIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"atsConfigProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: ATS display board hardware ok.\nThe first argument is the serial number.\nThe second argument is the product name.\nThe third argument is an integer representing the hardware: \n0= Phase LEDs/Push-button hardware failure \n1= Seven-segment display hardware failure.\"\"\",\n        }, # notification\n        \"atsControllerRestart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.702\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: ATS Controller restarted.\"\"\",\n        }, # notification\n        \"xATSS1BadPhaseRotation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.724\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's source 1 phase rotation is bad.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSS1BadPhaseRotationCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.725\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's source 1 phase rotation is back to normal.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"xATSS1BadPhaseBalance\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.726\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's source 1 phase balance is out of bounds.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\nThe third argument is the minimum phase balance as a percentage.\"\"\",\n        }, # notification\n        \"xATSS1BadPhaseBalanceCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.727\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xATSIdentSerialNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"xATSIdentProductName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's source 1 phase balance is back to normal.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"isxModularTransformerOverheating\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.728\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The distribution transformer temperature is too hot.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"isxModularTransformerOverheatingCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.729\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The distribution transformer temperature has returned to normal.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"apcInternalCommunicationFault\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.730\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: An internal UPS communication fault exists.\"\"\",\n        }, # notification\n        \"apcInternalCommunicationFaultCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.731\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An internal UPS communication fault no longer exists.\"\"\",\n        }, # notification\n        \"upsOutletGroupCommand\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.732\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsOutletGroupControlIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: The specified Outlet Group command has been issued.\"\"\",\n        }, # notification\n        \"onbatterycommunicationLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.733\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: Communication to the UPS when the UPS is on Battery. Steps\nto reestablish communication are in progress.\"\"\",\n        }, # notification\n        \"upsCriticalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.734\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A UPS critical condition was detected.\nThe first variable is the error condition text message.\nThe second variable is the error number.\"\"\",\n        }, # notification\n        \"upsCriticalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.735\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A UPS critical condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"upsWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.736\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A UPS warning condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"upsWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.737\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A UPS warning condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"upsInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.738\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A UPS informational condition has been detected.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"upsInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.739\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A UPS informational condition has been cleared.\nThe first variable is the fault condition.\"\"\",\n        }, # notification\n        \"isxcInformationalAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.740\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An ISXC Alarm exists.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcInformationalAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.741\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: An ISXC Alarm has been cleared.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcWarningAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.742\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An ISXC Alarm exists.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcWarningAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.743\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: An ISXC Alarm has been cleared.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcErrorAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.744\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"ERROR: An ISXC Alarm exists.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcErrorAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.745\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"ERROR: An ISXC Alarm has been cleared.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcCriticalAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.746\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CRITICAL: An ISXC Alarm exists.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcCriticalAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.747\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"CRITICAL: An ISXC Alarm has been cleared.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcFailureAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.748\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"FAILURE: An ISXC Alarm exists.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"isxcFailureAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.749\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString04\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString05\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString06\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString07\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsOctetString08\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"FAILURE: An ISXC Alarm has been cleared.\nThe first argument is the unique ISXC alarm ID.\nThe second argument is the ISXC alarm label as a UTF8 string.\nThe third argument is the ISXC alarm code.\nThe fourth argument is the unique ISXC device ID.\nThe fifth argument is the ISXC device label as a UTF8 string.\nThe sixth argument is the ISXC parent host.\nThe seventh argument is the ISXC device type as a UTF8 string.\nThe eighth argument is the device serial number.\nThe ninth argument is the device model number.\nThe tenth argument is the device host.\nThe eleventh argument is the device location as a UTF8 string.\nThe twelfth argument is the device contact as a UTF8 string.\nThe thirteenth argument is the unique ISXC sensor ID.\nThe fourteenth argument is the ISXC sensor label as a UTF8 string.\nThe fifteenth argument is the sensor value as a UTF8 string.\nThe sixteenth argument is the ISXC alarm start time.\nThe seventeenth argument is the ISXC alarm resolution time.\nThe eighteenth argument is the description as a UTF8 string.\"\"\",\n        }, # notification\n        \"rpduCriticalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.750\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: A RPDU critical condition has been detected.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"rpduCriticalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.751\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A RPDU critical condition has been cleared.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"rpduWarningCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.752\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A RPDU warning condition has been detected.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"rpduWarningConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.753\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: A RPDU warning condition has been cleared.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"rpduInformationalCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.754\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A RPDU informational condition has been detected.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"rpduInformationalConditionCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.755\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsInteger03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: A RPDU informational condition has been cleared.\nThe first variable is the serial number.\nThe second variable is the device name.\nThe third variable is the error number.\nThe fourth variable is the device number.\nThe fifth variable is the instance number.\nThe sixth variable is the trap text message.\"\"\",\n        }, # notification\n        \"isxModularCoolingFanAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.756\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: The device's internal cooling fans have failed.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"isxModularCoolingFanAlarmCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.757\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString02\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString03\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: The device's internal cooling fans are now functioning properly.\nThe first argument is the host device serial number.\nThe second argument is the host device name.\"\"\",\n        }, # notification\n        \"upsFirmwareUpdateStarted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.758\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: Updating UPS firmware.\"\"\",\n        }, # notification\n        \"upsFirmwareUpdateFinished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.759\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: Finished updating UPS firmware.\"\"\",\n        }, # notification\n        \"upsFirmwareUpdateSucceeded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.760\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UPS firmware update succeeded.\"\"\",\n        }, # notification\n        \"upsFirmwareUpdateFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.761\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"WARNING: UPS firmware update failed.\"\"\",\n        }, # notification\n        \"upsHasNoValidFirmware\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.762\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SEVERE: UPS has no valid firmware.\"\"\",\n        }, # notification\n        \"upsHasNoValidFirmwareCleared\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"PowerNet-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.318.0.763\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"mtrapargsString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"PowerNet-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"INFORMATIONAL: UPS now has a valid firmware.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/Q-BRIDGE-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.7:\n#\n#   smidump -f python Q-BRIDGE-MIB\n\nFILENAME = \"/home/klette/mibs/v2/Q-BRIDGE.my\"\n\nMIB = {\n    \"moduleName\" : \"Q-BRIDGE-MIB\",\n\n    \"Q-BRIDGE-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF Bridge MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"       Les Bell\nPostal: 3Com Europe Ltd.\n        3Com Centre, Boundary Way\n        Hemel Hempstead, Herts. HP2 7YU\n        UK\n Phone: +44 1442 438025\n Email: Les_Bell@3Com.com\n\n        Andrew Smith\nPostal: Extreme Networks\n        3585 Monroe St.\n        Santa Clara CA 95051\n        USA\n Phone: +1 408 579 2821\n Email: andrew@extremenetworks.com\n\n        Paul Langille\nPostal: Newbridge Networks\n        5 Corporate Drive\n        Andover, MA 01810\n        USA\n Phone: +1 978 691 4665\n Email: langille@newbridge.com\n\n        Anil Rijhsinghani\nPostal: Cabletron Systems\n        50 Minuteman Road\n        Andover, MA 01810\n        USA\n Phone: +1 978 684 1295\n Email: anil@cabletron.com\n\n        Keith McCloghrie\nPostal: cisco Systems, Inc.\n        170 West Tasman Drive\n        San Jose, CA 95134-1706\n        USA\n Phone: +1 408 526 5260\n Email: kzm@cisco.com\"\"\",\n        \"description\" :\n            \"\"\"The VLAN Bridge MIB module for managing Virtual Bridged\nLocal Area Networks, as defined by IEEE 802.1Q-1998.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"1999-08-25 00:00\",\n                \"description\" :\n                    \"\"\"Initial version, published as RFC 2674.\"\"\",\n            },\n        ),\n        \"identity node\" : \"qBridgeMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMP-FRAMEWORK-MIB\", \"name\" : \"SnmpAdminString\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"BRIDGE-MIB\", \"name\" : \"dot1dBridge\"},\n        {\"module\" : \"BRIDGE-MIB\", \"name\" : \"dot1dBasePortEntry\"},\n        {\"module\" : \"BRIDGE-MIB\", \"name\" : \"dot1dBasePort\"},\n        {\"module\" : \"P-BRIDGE-MIB\", \"name\" : \"EnabledStatus\"},\n        {\"module\" : \"RMON2-MIB\", \"name\" : \"TimeFilter\"},\n    ),\n\n    \"typedefs\" : {\n        \"PortList\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Each octet within this value specifies a set of eight\nports, with the first octet specifying ports 1 through\n8, the second octet specifying ports 9 through 16, etc.\nWithin each octet, the most significant bit represents\nthe lowest numbered port, and the least significant bit\nrepresents the highest numbered port.  Thus, each port\nof the bridge is represented by a single bit within the\nvalue of this object.  If that bit has a value of '1'\nthen that port is included in the set of ports; the port\nis not included if its bit has a value of '0'.\"\"\",\n        },\n        \"VlanIndex\" : {\n            \"basetype\" : \"Unsigned32\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A value used to index per-VLAN tables: values of 0 and\n4095 are not permitted; if the value is between 1 and\n4094 inclusive, it represents an IEEE 802.1Q VLAN-ID with\nglobal scope within a given bridged domain (see VlanId\ntextual convention).  If the value is greater than 4095\nthen it represents a VLAN with scope local to the\nparticular agent, i.e. one without a global VLAN-ID\nassigned to it. Such VLANs are outside the scope of\nIEEE 802.1Q but it is convenient to be able to manage them\nin the same way using this MIB.\"\"\",\n        },\n        \"VlanId\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"4094\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"4094\"\n            },\n            \"description\" :\n                \"\"\"A 12-bit VLAN ID used in the VLAN Tag header.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"qBridgeMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7\",\n            \"status\" : \"current\",\n        }, # node\n        \"qBridgeMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1\",\n        }, # node\n        \"dot1qBase\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1\",\n        }, # node\n        \"dot1qVlanVersionNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"version1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The version number of IEEE 802.1Q that this device\nsupports.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.1.1\"\"\",\n        }, # scalar\n        \"dot1qMaxVlanId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanId\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum IEEE 802.1Q VLAN ID that this device\nsupports.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 9.3.2.3\"\"\",\n        }, # scalar\n        \"dot1qMaxSupportedVlans\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of IEEE 802.1Q VLANs that this\ndevice supports.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.1.1\"\"\",\n        }, # scalar\n        \"dot1qNumVlans\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of IEEE 802.1Q VLANs that are\nconfigured in this device.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.1.1\"\"\",\n        }, # scalar\n        \"dot1qGvrpStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"P-BRIDGE-MIB\", \"name\" : \"EnabledStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"The administrative status requested by management for\nGVRP.  The value enabled(1) indicates that GVRP should\nbe enabled on this device, on all ports for which it has\nnot been specifically disabled.  When disabled(2), GVRP\nis disabled on all ports and all GVRP packets will be\nforwarded transparently.  This object affects all GVRP\nApplicant and Registrar state machines.  A transition\nfrom disabled(2) to enabled(1) will cause a reset of all\nGVRP state machines on all ports.\"\"\",\n        }, # scalar\n        \"dot1qTp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2\",\n        }, # node\n        \"dot1qFdbTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains configuration and control\ninformation for each Filtering Database currently\noperating on this device.  Entries in this table appear\nautomatically when VLANs are assigned FDB IDs in the\ndot1qVlanCurrentTable.\"\"\",\n        }, # table\n        \"dot1qFdbEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qFdbId\",\n            ],\n            \"description\" :\n                \"\"\"Information about a specific Filtering Database.\"\"\",\n        }, # row\n        \"dot1qFdbId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The identity of this Filtering Database.\"\"\",\n        }, # column\n        \"dot1qFdbDynamicCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of dynamic entries in this\nFiltering Database.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.1.1.3\"\"\",\n        }, # column\n        \"dot1qTpFdbTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about unicast entries\nfor which the device has forwarding and/or filtering\ninformation.  This information is used by the\ntransparent bridging function in determining how to\npropagate a received frame.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.7\"\"\",\n        }, # table\n        \"dot1qTpFdbEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qFdbId\",\n                \"dot1qTpFdbAddress\",\n            ],\n            \"description\" :\n                \"\"\"Information about a specific unicast MAC address for\nwhich the device has some forwarding and/or filtering\ninformation.\"\"\",\n        }, # row\n        \"dot1qTpFdbAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unicast MAC address for which the device has\nforwarding and/or filtering information.\"\"\",\n        }, # column\n        \"dot1qTpFdbPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Either the value '0', or the port number of the port on\nwhich a frame having a source address equal to the value\nof the corresponding instance of dot1qTpFdbAddress has\nbeen seen.  A value of '0' indicates that the port\nnumber has not been learned but that the device does\nhave some forwarding/filtering information about this\naddress (e.g. in the dot1qStaticUnicastTable).\nImplementors are encouraged to assign the port value to\nthis object whenever it is learned even for addresses\nfor which the corresponding value of dot1qTpFdbStatus is\nnot learned(3).\"\"\",\n        }, # column\n        \"dot1qTpFdbStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"learned\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"self\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of this entry.  The meanings of the values\nare:\n    other(1) - none of the following.  This may include\n        the case where some other MIB object (not the\n        corresponding instance of dot1qTpFdbPort, nor an\n        entry in the dot1qStaticUnicastTable) is being\n        used to determine if and how frames addressed to\n        the value of the corresponding instance of\n        dot1qTpFdbAddress are being forwarded.\n    invalid(2) - this entry is no longer valid (e.g., it\n        was learned but has since aged out), but has not\n        yet been flushed from the table.\n    learned(3) - the value of the corresponding instance\n        of dot1qTpFdbPort was learned and is being used.\n\n\n\n\n\n    self(4) - the value of the corresponding instance of\n        dot1qTpFdbAddress represents one of the device's\n        addresses.  The corresponding instance of\n        dot1qTpFdbPort indicates which of the device's\n        ports has this address.\n    mgmt(5) - the value of the corresponding instance of\n        dot1qTpFdbAddress is also the value of an\n        existing instance of dot1qStaticAddress.\"\"\",\n        }, # column\n        \"dot1qTpGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing filtering information for VLANs\nconfigured into the bridge by (local or network)\nmanagement, or learnt dynamically, specifying the set of\nports to which frames received on a VLAN for this FDB\nand containing a specific Group destination address are\nallowed to be forwarded.\"\"\",\n        }, # table\n        \"dot1qTpGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n                \"dot1qTpGroupAddress\",\n            ],\n            \"description\" :\n                \"\"\"Filtering information configured into the bridge by\nmanagement, or learnt dynamically, specifying the set of\nports to which frames received on a VLAN and containing\na specific Group destination address, are allowed to be\nforwarded.  The subset of these ports learnt dynamically\nis also provided.\"\"\",\n        }, # row\n        \"dot1qTpGroupAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The destination Group MAC address in a frame to which\nthis entry's filtering information applies.\"\"\",\n        }, # column\n        \"dot1qTpGroupEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The complete set of ports, in this VLAN, to which\nframes destined for this Group MAC address are currently\nbeing explicitly forwarded.  This does not include ports\nfor which this address is only implicitly forwarded, in\nthe dot1qForwardAllPorts list.\"\"\",\n        }, # column\n        \"dot1qTpGroupLearnt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The subset of ports in dot1qTpGroupEgressPorts which\nwere learnt by GMRP or some other dynamic mechanism, in\nthis Filtering database.\"\"\",\n        }, # column\n        \"dot1qForwardAllTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing forwarding information for each\nVLAN, specifying the set of ports to which forwarding of\nall multicasts applies, configured statically by\nmanagement or dynamically by GMRP.  An entry appears in\nthis table for all VLANs that are currently\n\n\n\n\n\ninstantiated.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.2, 12.7.7\"\"\",\n        }, # table\n        \"dot1qForwardAllEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Forwarding information for a VLAN, specifying the set\nof ports to which all multicasts should be forwarded,\nconfigured statically by management or dynamically by\nGMRP.\"\"\",\n        }, # row\n        \"dot1qForwardAllPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The complete set of ports in this VLAN to which all\nmulticast group-addressed frames are to be forwarded.\nThis includes ports for which this need has been\ndetermined dynamically by GMRP, or configured statically\nby management.\"\"\",\n        }, # column\n        \"dot1qForwardAllStaticPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports configured by management in this VLAN\nto which all multicast group-addressed frames are to be\nforwarded.  Ports entered in this list will also appear\nin the complete set shown by dot1qForwardAllPorts.  This\nvalue will be restored after the device is reset.  This\nonly applies to ports that are members of the VLAN,\ndefined by dot1qVlanCurrentEgressPorts.  A port may not\nbe added in this set if it is already a member of the\nset of ports in dot1qForwardAllForbiddenPorts.  The\ndefault value is a string of ones of appropriate length,\nto indicate standard non-EFS behaviour, i.e.  forward\nall multicasts to all ports.\"\"\",\n        }, # column\n        \"dot1qForwardAllForbiddenPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports configured by management in this VLAN\nfor which the Service Requirement attribute Forward All\nMulticast Groups may not be dynamically registered by\nGMRP.  This value will be restored after the device is\nreset.  A port may not be added in this set if it is\nalready a member of the set of ports in\ndot1qForwardAllStaticPorts.  The default value is a\nstring of zeros of appropriate length.\"\"\",\n        }, # column\n        \"dot1qForwardUnregisteredTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing forwarding information for each\nVLAN, specifying the set of ports to which forwarding of\nmulticast group-addressed frames for which there is no\nmore specific forwarding information applies.  This is\nconfigured statically by management and determined\ndynamically by GMRP.  An entry appears in this table for\nall VLANs that are currently instantiated.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.2, 12.7.7\"\"\",\n        }, # table\n        \"dot1qForwardUnregisteredEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Forwarding information for a VLAN, specifying the set\nof ports to which all multicasts for which there is no\nmore specific forwarding information shall be forwarded.\nThis is configured statically by management or\ndynamically by GMRP.\"\"\",\n        }, # row\n        \"dot1qForwardUnregisteredPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The complete set of ports in this VLAN to which\nmulticast group-addressed frames for which there is no\nmore specific forwarding information will be forwarded.\nThis includes ports for which this need has been\ndetermined dynamically by GMRP, or configured statically\nby management.\"\"\",\n        }, # column\n        \"dot1qForwardUnregisteredStaticPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports configured by management, in this\nVLAN, to which multicast group-addressed frames for\nwhich there is no more specific forwarding information\nare to be forwarded.  Ports entered in this list will\nalso appear in the complete set shown by\ndot1qForwardUnregisteredPorts.  This value will be\nrestored after the device is reset.  A port may not be\nadded in this set if it is already a member of the set\nof ports in dot1qForwardUnregisteredForbiddenPorts.  The\n\n\n\n\n\ndefault value is a string of zeros of appropriate\nlength, although this has no effect with the default\nvalue of dot1qForwardAllStaticPorts.\"\"\",\n        }, # column\n        \"dot1qForwardUnregisteredForbiddenPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.2.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports configured by management in this VLAN\nfor which the Service Requirement attribute Forward\nUnregistered Multicast Groups may not be dynamically\nregistered by GMRP.  This value will be restored after\nthe device is reset.  A port may not be added in this\nset if it is already a member of the set of ports in\ndot1qForwardUnregisteredStaticPorts.  The default value\nis a string of zeros of appropriate length.\"\"\",\n        }, # column\n        \"dot1qStatic\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3\",\n        }, # node\n        \"dot1qStaticUnicastTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing filtering information for Unicast\nMAC addresses for each Filtering Database, configured\ninto the device by (local or network) management\nspecifying the set of ports to which frames received\nfrom specific ports and containing specific unicast\ndestination addresses are allowed to be forwarded.  A\nvalue of zero in this table as the port number from\nwhich frames with a specific destination address are\nreceived, is used to specify all ports for which there\nis no specific entry in this table for that particular\ndestination address.  Entries are valid for unicast\naddresses only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.7,\nISO/IEC 15802-3 Section 7.9.1\"\"\",\n        }, # table\n        \"dot1qStaticUnicastEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qFdbId\",\n                \"dot1qStaticUnicastAddress\",\n                \"dot1qStaticUnicastReceivePort\",\n            ],\n            \"description\" :\n                \"\"\"Filtering information configured into the device by\n(local or network) management specifying the set of\nports to which frames received from a specific port and\ncontaining a specific unicast destination address are\nallowed to be forwarded.\"\"\",\n        }, # row\n        \"dot1qStaticUnicastAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The destination MAC address in a frame to which this\nentry's filtering information applies.  This object must\ntake the value of a unicast address.\"\"\",\n        }, # column\n        \"dot1qStaticUnicastReceivePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Either the value '0', or the port number of the port\nfrom which a frame must be received in order for this\nentry's filtering information to apply.  A value of zero\nindicates that this entry applies on all ports of the\n\n\n\n\n\ndevice for which there is no other applicable entry.\"\"\",\n        }, # column\n        \"dot1qStaticUnicastAllowedToGoTo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports for which a frame with a specific\nunicast address will be flooded in the event that it\nhas not been learned.  It also specifies the set of\nports a specific unicast address may be dynamically\nlearnt on.  The dot1qTpFdbTable will have an equivalent\nentry with a dot1qTpFdbPort value of '0' until this\naddress has been learnt, when it will be updated with\nthe port the address has been seen on.  This only\napplies to ports that are members of the VLAN, defined\nby dot1qVlanCurrentEgressPorts.  The default value of\nthis object is a string of ones of appropriate length.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Table 8-5, ISO/IEC 15802-3 Table 7-5\"\"\",\n        }, # column\n        \"dot1qStaticUnicastStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"deleteOnReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"deleteOnTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"permanent\",\n            \"description\" :\n                \"\"\"This object indicates the status of this entry.\nother(1) - this entry is currently in use but\n    the conditions under which it will remain\n    so differ from the following values.\ninvalid(2) - writing this value to the object\n    removes the corresponding entry.\npermanent(3) - this entry is currently in use\n    and will remain so after the next reset of\n    the bridge.\ndeleteOnReset(4) - this entry is currently in\n    use and will remain so until the next\n    reset of the bridge.\n\n\n\n\n\n\n\ndeleteOnTimeout(5) - this entry is currently in\n    use and will remain so until it is aged out.\"\"\",\n        }, # column\n        \"dot1qStaticMulticastTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing filtering information for Multicast\nand Broadcast MAC addresses for each VLAN, configured\ninto the device by (local or network) management\nspecifying the set of ports to which frames received\nfrom specific ports and containing specific Multicast\nand Broadcast destination addresses are allowed to be\nforwarded.  A value of zero in this table as the port\nnumber from which frames with a specific destination\naddress are received, is used to specify all ports for\nwhich there is no specific entry in this table for that\nparticular destination address.  Entries are valid for\nMulticast and Broadcast addresses only.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.7,\nISO/IEC 15802-3 Section 7.9.1\"\"\",\n        }, # table\n        \"dot1qStaticMulticastEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n                \"dot1qStaticMulticastAddress\",\n                \"dot1qStaticMulticastReceivePort\",\n            ],\n            \"description\" :\n                \"\"\"Filtering information configured into the device by\n(local or network) management specifying the set of\nports to which frames received from this specific port\nfor this VLAN and containing this Multicast or Broadcast\ndestination address are allowed to be forwarded.\"\"\",\n        }, # row\n        \"dot1qStaticMulticastAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The destination MAC address in a frame to which this\nentry's filtering information applies.  This object must\ntake the value of a Multicast or Broadcast address.\"\"\",\n        }, # column\n        \"dot1qStaticMulticastReceivePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Either the value '0', or the port number of the port\nfrom which a frame must be received in order for this\nentry's filtering information to apply.  A value of zero\nindicates that this entry applies on all ports of the\ndevice for which there is no other applicable entry.\"\"\",\n        }, # column\n        \"dot1qStaticMulticastStaticEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports to which frames received from a\nspecific port and destined for a specific Multicast or\nBroadcast MAC address must be forwarded, regardless of\nany dynamic information e.g. from GMRP.  A port may not\nbe added in this set if it is already a member of the\nset of ports in dot1qStaticMulticastForbiddenEgressPorts.\nThe default value of this object is a string of ones of\nappropriate length.\"\"\",\n        }, # column\n        \"dot1qStaticMulticastForbiddenEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports to which frames received from a\nspecific port and destined for a specific Multicast or\nBroadcast MAC address must not be forwarded, regardless\nof any dynamic information e.g. from GMRP.  A port may\nnot be added in this set if it is already a member of the\nset of ports in dot1qStaticMulticastStaticEgressPorts.\nThe default value of this object is a string of zeros of\nappropriate length.\"\"\",\n        }, # column\n        \"dot1qStaticMulticastStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"deleteOnReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"deleteOnTimeout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"permanent\",\n            \"description\" :\n                \"\"\"This object indicates the status of this entry.\nother(1) - this entry is currently in use but\n    the conditions under which it will remain\n    so differ from the following values.\ninvalid(2) - writing this value to the object\n    removes the corresponding entry.\npermanent(3) - this entry is currently in use\n    and will remain so after the next reset of\n    the bridge.\n\n\n\n\n\n\n\ndeleteOnReset(4) - this entry is currently in\n    use and will remain so until the next\n    reset of the bridge.\ndeleteOnTimeout(5) - this entry is currently in\n    use and will remain so until it is aged out.\"\"\",\n        }, # column\n        \"dot1qVlan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4\",\n        }, # node\n        \"dot1qVlanNumDeletes\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times a VLAN entry has been deleted from\nthe dot1qVlanCurrentTable (for any reason).  If an entry\nis deleted, then inserted, and then deleted, this\ncounter will be incremented by 2.\"\"\",\n        }, # scalar\n        \"dot1qVlanCurrentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing current configuration information\nfor each VLAN currently configured into the device by\n(local or network) management, or dynamically created\nas a result of GVRP requests received.\"\"\",\n        }, # table\n        \"dot1qVlanCurrentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanTimeMark\",\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information for a VLAN configured into the device by\n(local or network) management, or dynamically created\nas a result of GVRP requests received.\"\"\",\n        }, # row\n        \"dot1qVlanTimeMark\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RMON2-MIB\", \"name\" : \"TimeFilter\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A TimeFilter for this entry.  See the TimeFilter\ntextual convention to see how this works.\"\"\",\n        }, # column\n        \"dot1qVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The VLAN-ID or other identifier refering to this VLAN.\"\"\",\n        }, # column\n        \"dot1qVlanFdbId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Filtering Database used by this VLAN.  This is one\nof the dot1qFdbId values in the dot1qFdbTable.  This\nvalue is allocated automatically by the device whenever\nthe VLAN is created: either dynamically by GVRP, or by\n\n\n\n\n\n\n\n\n\nmanagement, in dot1qVlanStaticTable.  Allocation of this\nvalue follows the learning constraints defined for this\nVLAN in dot1qLearningConstraintsTable.\"\"\",\n        }, # column\n        \"dot1qVlanCurrentEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of ports which are transmitting traffic for\nthis VLAN as either tagged or untagged frames.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.2.1\"\"\",\n        }, # column\n        \"dot1qVlanCurrentUntaggedPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of ports which are transmitting traffic for\nthis VLAN as untagged frames.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.2.1\"\"\",\n        }, # column\n        \"dot1qVlanStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"dynamicGvrp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This object indicates the status of this entry.\nother(1) - this entry is currently in use but the\n    conditions under which it will remain so differ\n    from the following values.\npermanent(2) - this entry, corresponding to an entry\n    in dot1qVlanStaticTable, is currently in use and\n    will remain so after the next reset of the\n    device.  The port lists for this entry include\n    ports from the equivalent dot1qVlanStaticTable\n    entry and ports learnt dynamically.\ndynamicGvrp(3) - this entry is currently in use\n\n\n\n\n\n\n    and will remain so until removed by GVRP.  There\n    is no static entry for this VLAN and it will be\n    removed when the last port leaves the VLAN.\"\"\",\n        }, # column\n        \"dot1qVlanCreationTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when this VLAN was created.\"\"\",\n        }, # column\n        \"dot1qVlanStaticTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing static configuration information for\neach VLAN configured into the device by (local or\nnetwork) management.  All entries are permanent and will\nbe restored after the device is reset.\"\"\",\n        }, # table\n        \"dot1qVlanStaticEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Static information for a VLAN configured into the\ndevice by (local or network) management.\"\"\",\n        }, # row\n        \"dot1qVlanStaticName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMP-FRAMEWORK-MIB\",\n                        \"type\" : \"SnmpAdminString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An administratively assigned string, which may be used\nto identify the VLAN.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.2.1\"\"\",\n        }, # column\n        \"dot1qVlanStaticEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports which are permanently assigned to the\negress list for this VLAN by management.  Changes to a\nbit in this object affect the per-port per-VLAN\nRegistrar control for Registration Fixed for the\nrelevant GVRP state machine on each port.  A port may\nnot be added in this set if it is already a member of\nthe set of ports in dot1qVlanForbiddenEgressPorts.  The\ndefault value of this object is a string of zeros of\nappropriate length, indicating not fixed.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.7.3, 11.2.3.2.3\"\"\",\n        }, # column\n        \"dot1qVlanForbiddenEgressPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports which are prohibited by management\nfrom being included in the egress list for this VLAN.\nChanges to this object that cause a port to be included\nor excluded affect the per-port per-VLAN Registrar\n\n\n\n\n\n\n\n\n\ncontrol for Registration Forbidden for the relevant GVRP\nstate machine on each port.  A port may not be added in\nthis set if it is already a member of the set of ports\nin dot1qVlanStaticEgressPorts.  The default value of\nthis object is a string of zeros of appropriate length,\nexcluding all ports from the forbidden set.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.7.7.3, 11.2.3.2.3\"\"\",\n        }, # column\n        \"dot1qVlanStaticUntaggedPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"PortList\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The set of ports which should transmit egress packets\nfor this VLAN as untagged.  The default value of this\nobject for the default VLAN (dot1qVlanIndex = 1) is a string\nof appropriate length including all ports.  There is no\nspecified default for other VLANs.  If a device agent cannot\nsupport the set of ports being set then it will reject the\nset operation with an error. An example might be if a\nmanager attempts to set more than one VLAN to be untagged\non egress where the device does not support this IEEE 802.1Q\noption.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.2.1\"\"\",\n        }, # column\n        \"dot1qVlanStaticRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates the status of this entry.\"\"\",\n        }, # column\n        \"dot1qNextFreeLocalVlanIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    {\n                        \"min\" : \"4096\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The next available value for dot1qVlanIndex of a local\nVLAN entry in dot1qVlanStaticTable.  This will report\nvalues >=4096 if a new Local VLAN may be created or else\nthe value 0 if this is not possible.\n\n\n\n\n\n\n\nA row creation operation in this table for an entry with a local\nVlanIndex value may fail if the current value of this object\nis not used as the index. Even if the value read is used,\nthere is no guarantee that it will still be the valid index\nwhen the create operation is attempted - another manager may\nhave already got in during the intervening time interval.\nIn this case, dot1qNextFreeLocalVlanIndex should be re-read\nand the creation re-tried with the new value.\n\nThis value will automatically change when the current value is\nused to create a new row.\"\"\",\n        }, # scalar\n        \"dot1qPortVlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing per port control and status\ninformation for VLAN configuration in the device.\"\"\",\n        }, # table\n        \"dot1qPortVlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"BRIDGE-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"dot1dBasePortEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"Information controlling VLAN configuration for a port\non the device.  This is indexed by dot1dBasePort.\"\"\",\n        }, # row\n        \"dot1qPvid\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"description\" :\n                \"\"\"The PVID, the VLAN ID assigned to untagged frames or\nPriority-Tagged frames received on this port.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.1.1\"\"\",\n        }, # column\n        \"dot1qPortAcceptableFrameTypes\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"admitAll\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"admitOnlyVlanTagged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"admitAll\",\n            \"description\" :\n                \"\"\"When this is admitOnlyVlanTagged(2) the device will\ndiscard untagged frames or Priority-Tagged frames\nreceived on this port.  When admitAll(1), untagged\nframes or Priority-Tagged frames received on this port\nwill be accepted and assigned to the PVID for this port.\n\nThis control does not affect VLAN independent BPDU\nframes, such as GVRP and STP.  It does affect VLAN\ndependent BPDU frames, such as GMRP.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.1.3\"\"\",\n        }, # column\n        \"dot1qPortIngressFiltering\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"false\",\n            \"description\" :\n                \"\"\"When this is true(1) the device will discard incoming\nframes for VLANs which do not include this Port in its\nMember set.  When false(2), the port will accept all\nincoming frames.\n\nThis control does not affect VLAN independent BPDU\nframes, such as GVRP and STP.  It does affect VLAN\ndependent BPDU frames, such as GMRP.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.1.4\"\"\",\n        }, # column\n        \"dot1qPortGvrpStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"P-BRIDGE-MIB\", \"name\" : \"EnabledStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"The state of GVRP operation on this port.  The value\nenabled(1) indicates that GVRP is enabled on this port,\nas long as dot1qGvrpStatus is also enabled for this\ndevice.  When disabled(2) but dot1qGvrpStatus is still\nenabled for the device, GVRP is disabled on this port:\nany GVRP packets received will be silently discarded and\nno GVRP registrations will be propagated from other\nports.  This object affects all GVRP Applicant and\nRegistrar state machines on this port.  A transition\nfrom disabled(2) to enabled(1) will cause a reset of all\nGVRP state machines on this port.\"\"\",\n        }, # column\n        \"dot1qPortGvrpFailedRegistrations\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of failed GVRP registrations, for any\nreason, on this port.\"\"\",\n        }, # column\n        \"dot1qPortGvrpLastPduOrigin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Source MAC Address of the last GVRP message\nreceived on this port.\"\"\",\n        }, # column\n        \"dot1qPortVlanStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing per-port, per-VLAN statistics for\ntraffic received. Separate objects are provided for both the\nmost-significant and least-significant bits of statistics\ncounters for ports that are associated with this transparent\nbridge. The most-significant bit objects are only required on\nhigh capacity interfaces, as defined in the conformance clauses\nfor these objects. This mechanism is provided as a way to read\n64-bit counters for agents which support only SNMPv1.\n\nNote that the reporting of most-significant and least-\nsignificant counter bits separately runs the risk of missing\nan overflow of the lower bits in the interval between sampling.\nThe manager must be aware of this possibility, even within the\nsame varbindlist, when interpreting the results of a request or\nasynchronous notification.\"\"\",\n        }, # table\n        \"dot1qPortVlanStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dBasePort\",\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Traffic statistics for a VLAN on an interface.\"\"\",\n        }, # row\n        \"dot1qTpVlanPortInFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames received by this port from\nits segment which were classified as belonging to this\nVLAN.  Note that a frame received on this port is\ncounted by this object if and only if it is for a\nprotocol being processed by the local forwarding process\nfor this VLAN.  This object includes received bridge\nmanagement frames classified as belonging to this VLAN\n(e.g. GMRP, but not GVRP or STP).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3(a)\"\"\",\n        }, # column\n        \"dot1qTpVlanPortOutFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames transmitted by this port to\nits segment from the local forwarding process for this\nVLAN.  This includes bridge management frames originated\nby this device which are classified as belonging to this\nVLAN (e.g. GMRP, but not GVRP or STP).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3(d)\"\"\",\n        }, # column\n        \"dot1qTpVlanPortInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames received by this port from\nits segment which were classified as belonging to this\nVLAN which were discarded due to VLAN related reasons.\nSpecifically, the IEEE 802.1Q counters for Discard\nInbound and Discard on Ingress Filtering.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3\"\"\",\n        }, # column\n        \"dot1qTpVlanPortInOverflowFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the associated\ndot1qTpVlanPortInFrames counter has overflowed.\"\"\",\n            \"reference>\" :\n                \"\"\"ISO/IEC 15802-3 Section 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1qTpVlanPortOutOverflowFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the associated\ndot1qTpVlanPortOutFrames counter has overflowed.\"\"\",\n            \"reference>\" :\n                \"\"\"ISO/IEC 15802-3 Section 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1qTpVlanPortInOverflowDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the associated\ndot1qTpVlanPortInDiscards counter has overflowed.\"\"\",\n            \"reference>\" :\n                \"\"\"ISO/IEC 15802-3 Section 14.6.1.1.3\"\"\",\n        }, # column\n        \"dot1qPortVlanHCStatisticsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing per port, per VLAN statistics for\ntraffic on high capacity interfaces.\"\"\",\n        }, # table\n        \"dot1qPortVlanHCStatisticsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1dBasePort\",\n                \"dot1qVlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Traffic statistics for a VLAN on a high capacity\ninterface.\"\"\",\n        }, # row\n        \"dot1qTpVlanPortHCInFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames received by this port from\nits segment which were classified as belonging to this\nVLAN.  Note that a frame received on this port is\ncounted by this object if and only if it is for a\nprotocol being processed by the local forwarding process\nfor this VLAN.  This object includes received bridge\nmanagement frames classified as belonging to this VLAN\n(e.g. GMRP, but not GVRP or STP).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3(a)\"\"\",\n        }, # column\n        \"dot1qTpVlanPortHCOutFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames transmitted by this port to\nits segment from the local forwarding process for this\nVLAN.  This includes bridge management frames originated\nby this device which are classified as belonging to this\nVLAN (e.g. GMRP, but not GVRP or STP).\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3(d)\"\"\",\n        }, # column\n        \"dot1qTpVlanPortHCInDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter64\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of valid frames received by this port from\nits segment which were classified as belonging to this\nVLAN which were discarded due to VLAN related reasons.\nSpecifically, the IEEE 802.1Q counters for Discard\nInbound and Discard on Ingress Filtering.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.6.1.1.3\"\"\",\n        }, # column\n        \"dot1qLearningConstraintsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table containing learning constraints for sets of\nShared and Independendent VLANs.\"\"\",\n            \"reference>\" :\n                \"\"\"IEEE 802.1Q/D11 Section 12.10.3.1\"\"\",\n        }, # table\n        \"dot1qLearningConstraintsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dot1qConstraintVlan\",\n                \"dot1qConstraintSet\",\n            ],\n            \"description\" :\n                \"\"\"A learning constraint defined for a VLAN.\"\"\",\n        }, # row\n        \"dot1qConstraintVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"Q-BRIDGE-MIB\", \"name\" : \"VlanIndex\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The index of the row in dot1qVlanCurrentTable for the\nVLAN constrained by this entry.\"\"\",\n        }, # column\n        \"dot1qConstraintSet\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The identity of the constraint set to which\ndot1qConstraintVlan belongs.  These values may be chosen\nby the management station.\"\"\",\n        }, # column\n        \"dot1qConstraintType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"independent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shared\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of constraint this entry defines.\nindependent(1) - the VLAN, dot1qConstraintVlan,\n    uses an independent filtering database from all\n\n\n\n\n\n\n    other VLANs in the same set, defined by\n    dot1qConstraintSet.\nshared(2) - the VLAN, dot1qConstraintVlan, shares\n    the same filtering database as all other VLANs\n    in the same set, defined by dot1qConstraintSet.\"\"\",\n        }, # column\n        \"dot1qConstraintStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The status of this entry.\"\"\",\n        }, # column\n        \"dot1qConstraintSetDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The identity of the constraint set to which a VLAN\nbelongs, if there is not an explicit entry for that VLAN\nin dot1qLearningConstraintsTable.\"\"\",\n        }, # scalar\n        \"dot1qConstraintTypeDefault\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.1.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"independent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"shared\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of constraint set to which a VLAN belongs, if\nthere is not an explicit entry for that VLAN in\ndot1qLearningConstraintsTable.  The types are as defined\nfor dot1qConstraintType.\"\"\",\n        }, # scalar\n        \"qBridgeConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2\",\n        }, # node\n        \"qBridgeGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1\",\n        }, # node\n        \"qBridgeCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.2\",\n        }, # node\n    }, # nodes\n\n    \"groups\" : {\n        \"qBridgeBaseGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qVlanVersionNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qMaxVlanId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qMaxSupportedVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qNumVlans\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qGvrpStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing device level control\nand status information for the Virtual LAN bridge\nservices.\"\"\",\n        }, # group\n        \"qBridgeFdbUnicastGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qFdbDynamicCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpFdbPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpFdbStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about all\nunicast addresses, learnt dynamically or statically\nconfigured by management, in each Filtering Database.\"\"\",\n        }, # group\n        \"qBridgeFdbMulticastGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qTpGroupEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpGroupLearnt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about all\nmulticast addresses, learnt dynamically or statically\nconfigured by management, in each Filtering Database.\"\"\",\n        }, # group\n        \"qBridgeServiceRequirementsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qForwardAllPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qForwardAllStaticPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qForwardAllForbiddenPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qForwardUnregisteredPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qForwardUnregisteredStaticPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qForwardUnregisteredForbiddenPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nservice requirements, learnt dynamically or statically\nconfigured by management, in each Filtering Database.\"\"\",\n        }, # group\n        \"qBridgeFdbStaticGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qStaticUnicastAllowedToGoTo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qStaticUnicastStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qStaticMulticastStaticEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qStaticMulticastForbiddenEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qStaticMulticastStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nunicast and multicast addresses statically configured by\nmanagement, in each Filtering Database or VLAN.\"\"\",\n        }, # group\n        \"qBridgeVlanGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qVlanNumDeletes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanFdbId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanCurrentEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanCurrentUntaggedPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanCreationTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nall VLANs currently configured on this device.\"\"\",\n        }, # group\n        \"qBridgeVlanStaticGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qVlanStaticName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanStaticEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanForbiddenEgressPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanStaticUntaggedPorts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qVlanStaticRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qNextFreeLocalVlanIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing information about\nVLANs statically configured by management.\"\"\",\n        }, # group\n        \"qBridgePortGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qPvid\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qPortAcceptableFrameTypes\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qPortIngressFiltering\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qPortGvrpStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qPortGvrpFailedRegistrations\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qPortGvrpLastPduOrigin\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing port level VLAN\ncontrol and status information for all ports.\"\"\",\n        }, # group\n        \"qBridgeVlanStatisticsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qTpVlanPortInFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortOutFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing per-port packet\nstatistics for all VLANs currently configured on this\ndevice.\"\"\",\n        }, # group\n        \"qBridgeVlanStatisticsOverflowGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qTpVlanPortInOverflowFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortOutOverflowFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortInOverflowDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing overflow counters for\nper-port packet statistics for all VLANs currently configured\non this device for high capacity interfaces, defined as those\nthat have the value of the corresponding instance of\nifSpeed greater than 650,000,000 bits/second.\"\"\",\n        }, # group\n        \"qBridgeVlanHCStatisticsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qTpVlanPortHCInFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortHCOutFrames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qTpVlanPortHCInDiscards\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing per-port packet\nstatistics for all VLANs currently configured on this\ndevice for high capacity interfaces, defined as those\nthat have the value of the corresponding instance of\nifSpeed greater than 650,000,000 bits/second.\"\"\",\n        }, # group\n        \"qBridgeLearningConstraintsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qConstraintType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qConstraintStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects defining the Filtering Database\nconstraints all VLANs have with each other.\"\"\",\n        }, # group\n        \"qBridgeLearningConstraintDefaultGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.1.13\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"dot1qConstraintSetDefault\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"dot1qConstraintTypeDefault\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects defining the default Filtering\nDatabase constraints for VLANs which have no specific\nconstraints defined.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"qBridgeCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"Q-BRIDGE-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.17.7.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for device support of Virtual\nLAN Bridge services.\"\"\",\n            \"requires\" : {\n                \"qBridgeBaseGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"qBridgeVlanGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"qBridgeVlanStaticGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"qBridgePortGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"Q-BRIDGE-MIB\"\n                },\n                \"qBridgeFdbUnicastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for bridges that implement\n802.1Q transparent bridging.\"\"\",\n                },\n                \"qBridgeFdbMulticastGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for bridges that implement\n802.1Q transparent bridging.\"\"\",\n                },\n                \"qBridgeServiceRequirementsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for bridges that implement\nextended filtering services.  All objects must be\nread-write if extended-filtering services are\nenabled.\"\"\",\n                },\n                \"qBridgeFdbStaticGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional.\"\"\",\n                },\n                \"qBridgeVlanStatisticsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional as there may be significant\nimplementation cost associated with its support.\"\"\",\n                },\n                \"qBridgeVlanStatisticsOverflowGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional as there may be significant\nimplementation cost associated with its support. It is most\nrelevant for high capacity interfaces where the SNMP agent\nsupports only SNMPv1.\"\"\",\n                },\n                \"qBridgeVlanHCStatisticsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is optional as there may be significant\nimplementation cost associated with its support. It is most\nrelevant for high capacity interfaces.\"\"\",\n                },\n                \"qBridgeLearningConstraintsGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices implementing\nboth Independent VLAN Learning (IVL) and Shared\nVLAN Learning (SVL) modes of operation of the\nfiltering database, as defined by IEEE 802.1Q.\"\"\",\n                },\n                \"qBridgeLearningConstraintDefaultGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for devices implementing\nboth Independent VLAN Learning (IVL) and Shared\nVLAN Learning (SVL) modes of operation of the\nfiltering database, as defined by IEEE 802.1Q.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"dot1qPortAcceptableFrameTypes\" : {\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required as this is an optional\ncapability in IEEE 802.1Q.\"\"\",\n                },\n                \"dot1qPortIngressFiltering\" : {\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required as this is an optional\ncapability in IEEE 802.1Q.\"\"\",\n                },\n                \"dot1qConstraintSetDefault\" : {\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required as this is an optional\ncapability in IEEE 802.1Q.\"\"\",\n                },\n                \"dot1qConstraintTypeDefault\" : {\n                    \"module\" : \"Q-BRIDGE-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Write access is not required as this is an optional\ncapability in IEEE 802.1Q.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/RITTAL-CMC-III-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python RITTAL-CMC-III-MIB\n\nFILENAME = \"RITTAL-CMC-III-MIB.mib\"\n\nMIB = {\n    \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n\n    \"RITTAL-CMC-III-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"RITTAL GmbH & Co. KG\"\"\",\n        \"contact\" : \n            \"\"\"www.rittal.de\n\nRITTAL GmbH & Co. KG\nForschung & Entwicklung\nAuf dem Stuetzelberg\nD-35745 Herborn\nGermany, Europe\n\n+49(0)2772 5050\ninfo@rittal.de\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for representing cmcIII SNMP agent\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2012-04-27 00:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"2012-04-11 00:00\",\n                \"description\" :\n                    \"\"\"Initial Version of cmcIII MIB.\"\"\",\n            },\n            {\n                \"date\" : \"2011-09-02 00:00\",\n                \"description\" :\n                    \"\"\"SMIv2 Version of cmcIII MIB.\"\"\",\n            },\n        ),\n        \"identity node\" : \"cmcIII\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RITTAL-SMI-MIB\", \"name\" : \"rittal\"},\n    ),\n\n    \"nodes\" : {\n        \"cmcIII\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7\",\n            \"status\" : \"current\",\n        }, # node\n        \"cmcIIINotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.0\",\n        }, # node\n        \"cmcIIIMibRev\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.1\",\n        }, # node\n        \"cmcIIIMibMajRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Major Revision level.\nA change in the major revision level represents a major change\nin the architecture of the MIB. A change in the major revision\nlevel may indicate a significant change in the information,\ncorrect interpretation of data may require a MIB document\nwith the same major revision level.\"\"\",\n        }, # scalar\n        \"cmcIIIMibMinRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Minor Revision level.\nA change in the minor revision level may represent some minor\nadditional support, no changes to any pre-existing information\nhas occurred.\"\"\",\n        }, # scalar\n        \"cmcIIIAgentRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The SNMP Agent Revision level.\"\"\",\n        }, # scalar\n        \"cmcIIIUnit\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2\",\n        }, # node\n        \"cmcIIIUnitStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"overload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"General Status of CMCIII PU unit itself\n(1) OK\n(2) failed\n(3) overload (current too high)\"\"\",\n        }, # scalar\n        \"cmcIIIUnitURL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"URL of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitHWRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Hardware Revision of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitFWRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Firmware Revision of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitOSRev\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Linux Revision of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitSerial\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial Number of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitProd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Production Code of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIIUnitType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"pu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"compact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of CMCIII\n(1) Unit unknown\n(2) Processing Unit\n(3) Processing Unit Compact\"\"\",\n        }, # scalar\n        \"cmcIIIUnitCurrentSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"acAdapter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"terminalStrip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"poe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"usb\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current source of CMCIII PU\n(1) unknown\n(2) AC Adapter Power Supply\n(3) Terminal Strip\n(4) poe: Power Over Ethernet\n(5) usb: Universal Serial Bus\"\"\",\n        }, # scalar\n        \"cmcIIICan0CurrentConsumption\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal current consumption required by CANopen fieldbus 1\"\"\",\n        }, # scalar\n        \"cmcIIICan1CurrentConsumption\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal current consumption required by CANopen fieldbus 2\"\"\",\n        }, # scalar\n        \"cmcIIIUnitUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating time of CMCIII PU\"\"\",\n        }, # scalar\n        \"cmcIIISetup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3\",\n        }, # node\n        \"cmcIIILastChangeSetup\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Last change of configuration\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIISetupGeneral\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2\",\n        }, # node\n        \"cmcIIISetTempUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fahrenheit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Unit of all temperature values and setpoints\"\"\",\n        }, # scalar\n        \"cmcIIISetBeeper\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Audible alarm in CMCIII unit:\n(1) beeper is off (general)\n(2) beeper is on\"\"\",\n        }, # scalar\n        \"cmcIIIQuitRelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable acknowledging currently active alarm relay\n(with 'C' on CMCIII).\"\"\",\n        }, # scalar\n        \"cmcIIILogicRelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closeAtAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"openAtAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Logic of alarm relay:\n(1) Relay will pick up in case of an alarm\n(2) Relay will release in case of an alarm\n(3) Relay disabled\"\"\",\n        }, # scalar\n        \"cmcIIIUnitMsgRelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Alarm relay in case of Device Messages (detect, lost, changed..):\n(1) Relay disabled, relay will not switch in case of a device message\n(2) Relay enabled, relay will switch in case of a unit message\"\"\",\n        }, # scalar\n        \"cmcIIIFunctionRelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"warningOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"alarmOnly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warningOrAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Logic of alarm relay:\n(1) Relay will switch in case of a warning only\n(2) Relay will switch in case of an alarm only\n(3) Relay will switch in case of an alarm or warning\"\"\",\n        }, # scalar\n        \"cmcIIITimeZone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"74\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"74\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time Zone\n0  : (GMT-12:00) International Date Line West\n1  : (GMT-11:00) Midway Island, Samoa\n2  : (GMT-10:00) Hawaii\n3  : (GMT-09:00) Alaska\n4  : (GMT-08:00) Pacific Time (US and Canada), Tijuana\n5  : (GMT-07:00) Arizona\n6  : (GMT-07:00) Chihuahua, La Paz, Mazatlan\n7  : (GMT-07:00) Mountain Time (US & Canada)\n8  : (GMT-06:00) Central America\n9  : (GMT-06:00) Central Time (US and Canada)\n10 : (GMT-06:00) Guadalajara, Mexico City, Monterrey\n11 : (GMT-06:00) Saskatchewan\n12 : (GMT-05:00) Bogota, Lima, Quito\n13 : (GMT-05:00) Eastern Time (Us and Canada)\n14 : (GMT-05:00) Indiana (East)\n15 : (GMT-04:00) Atlantic Time (Canada)\n16 : (GMT-04:00) Caracas, La Paz\n17 : (GMT-04:00) Santiago\n18 : (GMT-03:30) Newfoundland\n19 : (GMT-03:00) Brasilia\n20 : (GMT-03:00) Buenos Aires, Georgetown\n21 : (GMT-03:00) Greenland\n22 : (GMT-02:00) Mid-Atlantic\n23 : (GMT-01:00) Azores\n24 : (GMT-01:00) Cape Verde Is.\n25 : (GMT) Casablanca, Monrovia\n26 : (GMT) Greenwich Mean Time : Dublin, Lisbon, London\n27 : (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Vienna\n28 : (GMT+01:00) Belgrade, Bratislava, Budapest, Prague\n29 : (GMT+01:00) Brussels, Copenhagen, Madrid, Paris\n30 : (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb\n31 : (GMT+01:00) West Central Africa\n32 : (GMT+02:00) Athens, Istanbul, Minsk\n33 : (GMT+02:00) Bucharest\n34 : (GMT+02:00) Harare, Pretoria\n35 : (GMT+02:00) Helsinki, Kyiv, Sofia\n36 : (GMT+02:00) Riga, Tallinn, Vilnius\n37 : (GMT+02:00) Jerusalem\n38 : (GMT+03:00) Baghdad\n39 : (GMT+03:00) Kuwait, Riyadh\n40 : (GMT+03:00) Moscow, St. Petersburg, Volgograd\n41 : (GMT+03:00) Nairobi\n42 : (GMT+03:30) Tehran\n43 : (GMT+04:00) Abu Dhabi, Muscat\n44 : (GMT+04:00) Baku, Tbilisi, Yerevan\n45 : (GMT+04:30) Kabul\n46 : (GMT+05:00) Ekaterinburg\n47 : (GMT+05:00) Islamabad, Karachi, Tashkent\n48 : (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi\n49 : (GMT+05:45) Kathmandu\n50 : (GMT+06:00) Almaty, Novosibirsk\n51 : (GMT+06:00) Astana, Dhaka\n52 : (GMT+06:00) Sri Jayawardenepura\n53 : (GMT+06:30) Rangoon\n54 : (GMT+07:00) Bangkok, Hanoi, Jakarta\n55 : (GMT+07:00) Krasnoyarsk\n56 : (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi\n57 : (GMT+08:00) Irkutsk, Ulaan Bataar\n58 : (GMT+08:00) Kuala Lumpur, Singapore\n59 : (GMT+08:00) Perth\n60 : (GMT+08:00) Taipei\n61 : (GMT+09:00) Osaka, Sapporo, Tokyo\n62 : (GMT+09:00) Seoul\n63 : (GMT+09:00) Yakutsk\n64 : (GMT+09:30) Adelaide\n65 : (GMT+09:30) Darwin\n66 : (GMT+10:00) Brisbane\n67 : (GMT+10:00) Canberra, Melbourne, Sydney\n68 : (GMT+10:00) Guam, Port Moresby\n69 : (GMT+10:00) Hobart\n70 : (GMT+10:00) Vladivostok\n71 : (GMT+11:00) Magadan, Solomon Is., New Caledonia\n72 : (GMT+12:00) Auckland, Wellington\n73 : (GMT+12:00) Fiji, Kamchatka, Marshall Is.\n74 : (GMT+13:00) Nukualofa\"\"\",\n        }, # scalar\n        \"cmcIIISetupDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Actual date in format DD.MM.YYYY\nUse UTC date to set date.\"\"\",\n        }, # scalar\n        \"cmcIIISetupTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Actual time in format HH:MM:SS, HH (0-23), MM (0-59), SS (0-59).\nUse UTC time to set time.\"\"\",\n        }, # scalar\n        \"cmcIIIWebAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"httpEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"httpsEnabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Web access status:\n(0) httpEnabled  : http protocol is enabled\n(1) httpsEnabled : https protocol is enabled\"\"\",\n        }, # scalar\n        \"cmcIIIHttpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of HTTP daemon\"\"\",\n        }, # scalar\n        \"cmcIIIHttpsPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of HTTPS daemon\"\"\",\n        }, # scalar\n        \"cmcIIIFtpAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Ftp access:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIIFtpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of FTP daemon\"\"\",\n        }, # scalar\n        \"cmcIIISshAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Ssh access:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIISshPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of SSH daemon\"\"\",\n        }, # scalar\n        \"cmcIIITelnetAccess\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Telnet access:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIITelnetPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of telnet daemon\"\"\",\n        }, # scalar\n        \"cmcIIILanguage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"english\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Language:\n(1) English,\n(2) other\"\"\",\n        }, # scalar\n        \"cmcIIISetupTimer\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3\",\n        }, # node\n        \"cmcIIINumberOfTimers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of value table entries=number of outlets available on this unit\"\"\",\n        }, # scalar\n        \"cmcIIITimerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Headline of Timer Table\"\"\",\n        }, # table\n        \"cmcIIITimerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIITimerIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of Timer Table\"\"\",\n        }, # row\n        \"cmcIIITimerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the list of timer entries. Its value ranges\nbetween 1 and the value of cmcIIINumberOfTimers.\"\"\",\n        }, # column\n        \"cmcIIITimerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"switchedOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"switchedOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"noTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Actual status of the timer\"\"\",\n        }, # column\n        \"cmcIIITimerDayOfWeek\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"mon\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"tue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"wed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"thu\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fri\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"sat2sun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"mon2fri\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"mon2sun\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selection of day of week for timer to switch\"\"\",\n        }, # column\n        \"cmcIIITimeOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to switch on current function, Format: HH:MM\"\"\",\n        }, # column\n        \"cmcIIITimeOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"5\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to switch off current function, Format: HH:MM\"\"\",\n        }, # column\n        \"cmcIIITimeControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control via RTC\"\"\",\n        }, # column\n        \"cmcIIITimerFunction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disKeypads\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unlDoors\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disTrapRec1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"disTrapRec2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"disTrapRec3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"disTrapRec4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"disSMS1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"disSMS2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"disSMS3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"disSMS4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"schedule1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"schedule2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"schedule3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"schedule4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"schedule5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"schedule6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"schedule7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"schedule8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Function which is controlled via timer\n1: Unlock of doors via keypad is disabled\n2: Doors will be unlocked\n3-6: sending traps to this trap receiver will be disabled\n7-10: sending SMS to phone number 1..4 will be disabled\n11-18: Scheduled alarm off\"\"\",\n        }, # column\n        \"cmcIIISetupTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4\",\n        }, # node\n        \"cmcIIINumberOfTrapReceivers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of TrapReceiverTable entries. The number of trap receivers\"\"\",\n        }, # scalar\n        \"cmcIIITrapReceiverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of trap receiver entries\"\"\",\n        }, # table\n        \"cmcIIITrapReceiverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIITrapReceiverIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of trapTable\"\"\",\n        }, # row\n        \"cmcIIITrapReceiverIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the trap receiver table. Its value ranges between\n1 and the value of NumberOfTrapReceivers\"\"\",\n        }, # column\n        \"cmcIIITrapReceiverStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"snmpv1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"snmpv2c\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"snmpv3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable trap version or disable trap receiver\"\"\",\n        }, # column\n        \"cmcIIITrapReceiverIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of trap receiver\"\"\",\n        }, # column\n        \"cmcIIISetupSMTP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5\",\n        }, # node\n        \"cmcIIISmtpStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMTP (email) usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIISmtpServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of SMTP server\"\"\",\n        }, # scalar\n        \"cmcIIISmtpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TCP/IP port of SMTP server\"\"\",\n        }, # scalar\n        \"cmcIIISmtpAuth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMTP authentication usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIISmtpUsername\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Username required to authenticate at the SMTP server\"\"\",\n        }, # scalar\n        \"cmcIIISmtpPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Password required to authenticate at the SMTP server\"\"\",\n        }, # scalar\n        \"cmcIIISmtpSender\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sender address (FROM:) of the SMTP message\"\"\",\n        }, # scalar\n        \"cmcIIISmtpReply\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reply address (REPLY:) of the SMTP message\"\"\",\n        }, # scalar\n        \"cmcIIINumberOfSmtpReceivers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of SmtpReceiverTable entries. The number of SMTP receivers\"\"\",\n        }, # scalar\n        \"cmcIIISmtpReceiverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of SMTP receiver entries\"\"\",\n        }, # table\n        \"cmcIIISmtpReceiverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIISmtpReceiverIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of SMTPTable\"\"\",\n        }, # row\n        \"cmcIIISmtpReceiverIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the SMTP receiver table. Its value ranges between\n1 and the value of NumberOfSmtpReceivers \"\"\",\n        }, # column\n        \"cmcIIISmtpReceiverStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable SMTP receiver\"\"\",\n        }, # column\n        \"cmcIIISmtpReceiverAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.5.10.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of SMTP receiver\"\"\",\n        }, # column\n        \"cmcIIISetupSMS\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6\",\n        }, # node\n        \"cmcIIISmsStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMS usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIISmsPIN\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMS PIN number\"\"\",\n        }, # scalar\n        \"cmcIIISmsService\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMS service number\"\"\",\n        }, # scalar\n        \"cmcIIISmsMSN\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMS MSN for ISDN\"\"\",\n        }, # scalar\n        \"cmcIIISmsPreDial\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMS PreDial number\"\"\",\n        }, # scalar\n        \"cmcIIINumberOfSmsReceivers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of SmsReceiverTable entries. The number of SMS receivers\"\"\",\n        }, # scalar\n        \"cmcIIISmsReceiverTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of SMS receiver entries\"\"\",\n        }, # table\n        \"cmcIIISmsReceiverEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIISmsReceiverIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of SMSTable\"\"\",\n        }, # row\n        \"cmcIIISmsReceiverIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the SMS receiver table. Its value ranges between\n1 and the value of NumberOfSmsReceivers \"\"\",\n        }, # column\n        \"cmcIIISmsReceiverStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable SMS receiver\"\"\",\n        }, # column\n        \"cmcIIISmsReceiverNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.6.7.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Phone number of SMS receiver\"\"\",\n        }, # column\n        \"cmcIIISetupSysLog\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.7\",\n        }, # node\n        \"cmcIIISysLogStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SysLog usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIISysLogFacility\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"local0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"local1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"local2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"local3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"local4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"local5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"local6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"local7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SysLog facility local0..7\"\"\",\n        }, # scalar\n        \"cmcIIISysLogServer1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of first SysLog server\"\"\",\n        }, # scalar\n        \"cmcIIISysLogServer2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of second SysLog server\"\"\",\n        }, # scalar\n        \"cmcIIISetupNTP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.8\",\n        }, # node\n        \"cmcIIINtpStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"NTP usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIINtpTimeZone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"74\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"74\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"NTP time zone, see cmcIIITimeZone for valid time zones\"\"\",\n        }, # scalar\n        \"cmcIIINtpServer1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of first NTP server\"\"\",\n        }, # scalar\n        \"cmcIIINtpServer2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of second NTP server\"\"\",\n        }, # scalar\n        \"cmcIIISetupLDAP\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.9\",\n        }, # node\n        \"cmcIIILdapStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LDAP usage:\n(1) disabled\n(2) enabled\"\"\",\n        }, # scalar\n        \"cmcIIILdapServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.3.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of LDAP server\"\"\",\n        }, # scalar\n        \"cmcIIIDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4\",\n        }, # node\n        \"cmcIIIDevs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1\",\n        }, # node\n        \"cmcIIIDevInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1\",\n        }, # node\n        \"cmcIIIOverallDevStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Overall status of all devices\"\"\",\n        }, # scalar\n        \"cmcIIINumberOfDevs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of devices available\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeOverallDevStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last status change of any device connected to CMCIII PU\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeNumberOfDevs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last device number change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeDevSettings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last setting change of any device connected to CMCIII PU\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeDevs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last device change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIIDevTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Headline of device table\"\"\",\n        }, # table\n        \"cmcIIIDevEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIIDevIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of device table\"\"\",\n        }, # row\n        \"cmcIIIDevIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"126\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"126\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevAlias\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Descriptional text for device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of device chassis connected to CMCIII PU.\nThe authoritative identification of the device contained\nin the entity is allocated within the SMI cmcIIIProducts\nsubtree (1.3.6.1.4.1.2606.7.7) and provides an easy and\nunambiguous means for determining `what kind of box' is\nconnected.\nE.g.: in cmcIIIProductChassis (1.3.6.1.4.1.2606.7.7.4.x)\nthe placeholder x is used for\n\n1 : Not Available\n2 : Internal Device of Processing Unit\n3 : Virtual Device\n4 : Temperature Sensor 7030.110\n5 : Temp/Humidity Sensor 7030.111\n6 : Vandalism Sensor 7030.130\n7 : Access Sensor 7030.120\n8 : Door Lock Device 7030.200, .210\n9 : Universal Sensor 7030.190\n10: Sensor Gateway 7030.100\n11: Power Unit 7030.050\n12: Pressure Sensor 7030.150\n20-25: Gateways to RS422, RS485\"\"\",\n        }, # column\n        \"cmcIIIDevNodeID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Node ID of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"detect\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"lost\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"changed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"General Status of device connected to CMCIII PU\n(1) Device not available\n(2) OK\n(3) Device detected, confirmation required\n(4) Device lost (disconnected), confirmation required\n(5) Device changed\n(6) Error\"\"\",\n        }, # column\n        \"cmcIIIDevArtNr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Article number of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Location of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevBus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"canBus1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"canBus2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"virtual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"CAN bus of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevPos\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Position (order) of device in CAN bus connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevFW\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"FW version of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevHW\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"HW version of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevSerial\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevProductWeek\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"8\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Production week of device connected to CMCIII PU\"\"\",\n        }, # column\n        \"cmcIIIDevLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last change of device connected to CMCIII PU\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # column\n        \"cmcIIIDevURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"URL to device page of CMCIII PU (if available)\"\"\",\n        }, # column\n        \"cmcIIIDevNumberOfVars\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of variables available on this device.\nThis variable will give the number of rows of the \nvariable table cmcIIIVarTable belonging to this device\"\"\",\n        }, # column\n        \"cmcIIIDevNumberOfMsgs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of messages available in this device.\nThis variable will give the number of rows of the message\ntable cmcIIIMsgTable belonging to this device\"\"\",\n        }, # column\n        \"cmcIIIDevStatusText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Latest status of this device\"\"\",\n        }, # column\n        \"cmcIIIDevCurrentMinConsumption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Standby power consumption of device in mA\"\"\",\n        }, # column\n        \"cmcIIIDevCurrentMaxConsumption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal power consumption of device in mA\"\"\",\n        }, # column\n        \"cmcIIIDevEntPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Corresponding entPhysicalIndex of this device. 0 if none exists.\"\"\",\n        }, # column\n        \"cmcIIIVars\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2\",\n        }, # node\n        \"cmcIIIVarInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.1\",\n        }, # node\n        \"cmcIIINumberOfVars\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of variables available\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeNumberOfVars\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last message number change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeVarSettings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last setting change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeVars\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last variable change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIIVarTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Headline of variable table\"\"\",\n        }, # table\n        \"cmcIIIVarEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIIDevIndex\",\n                \"cmcIIIVarIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of variable table\"\"\",\n        }, # row\n        \"cmcIIIVarDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the device. Its value ranges\nbetween 1 and the value of cmcIIINumberOfDevs.\"\"\",\n        }, # column\n        \"cmcIIIVarIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the list of value entries. Its value ranges\nbetween 1 and the value of cmcIIINumberOfVars.\"\"\",\n        }, # column\n        \"cmcIIIVarName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Clear name of variable\"\"\",\n        }, # column\n        \"cmcIIIVarType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"description\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"value\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"setHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"setWarn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"setLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"hysteresis\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"status\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"statusEnum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"setWarnLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"unit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"alarmDur\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"steps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"configPar\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"category\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"logic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"logicEnum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"setCntrl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"outputdelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"outputaction\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"outdelayExec\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"outputEnum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"sensitivity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"accessTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"accessLogic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"outputPWM\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"rotation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"41\"\n                    },\n                    \"productDate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"50\"\n                    },\n                    \"orderNr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"51\"\n                    },\n                    \"devName\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"52\"\n                    },\n                    \"devLocation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"53\"\n                    },\n                    \"keycode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"80\"\n                    },\n                    \"command\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"81\"\n                    },\n                    \"commandEnum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"82\"\n                    },\n                    \"commandKeypad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"83\"\n                    },\n                    \"commandService\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"84\"\n                    },\n                    \"unitType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"90\"\n                    },\n                    \"swVersion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"91\"\n                    },\n                    \"serialNumber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"92\"\n                    },\n                    \"position\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"93\"\n                    },\n                    \"grouping\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"ignore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"254\"\n                    },\n                    \"illegal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of variable\"\"\",\n        }, # column\n        \"cmcIIIVarUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"12\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unit of variable e. g. degree C\"\"\",\n        }, # column\n        \"cmcIIIVarDatatype\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"int\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"string\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enum\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Datatype of variable\"\"\",\n        }, # column\n        \"cmcIIIVarScale\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Scaling factor of variable value,\ne. g. -100 -> value has to be divided by 100\n+100 -> value has to be multiplied by 100\"\"\",\n        }, # column\n        \"cmcIIIVarConstraints\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Constraints of value, \ne. g. [-- a-zA-Z0-9]+ (if VariableDatatype is 'string')\"\"\",\n        }, # column\n        \"cmcIIIVarSteps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Steps of variable value (resolution)\"\"\",\n        }, # column\n        \"cmcIIIVarValueStr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Value as string, including sign (+/-) and unit (deg C)\"\"\",\n        }, # column\n        \"cmcIIIVarValueInt\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Value as int\"\"\",\n        }, # column\n        \"cmcIIIVarLastChange\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last update or change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # column\n        \"cmcIIIVarAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"readonly\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"readwrite\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"readwriteswitch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"readwriteextended\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Access for value\"\"\",\n        }, # column\n        \"cmcIIIVarQuality\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"info\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"undefined-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"ok-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"warning-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"alarm-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"info-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Quality of variable\"\"\",\n        }, # column\n        \"cmcIIIVarEntPhysicalIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Corresponding entPhysicalIndex of this variable. 0 if none exists.\"\"\",\n        }, # column\n        \"cmcIIIMsgs\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3\",\n        }, # node\n        \"cmcIIIMsgInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1\",\n        }, # node\n        \"cmcIIIOverallMsgStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Overall message status of device\"\"\",\n        }, # scalar\n        \"cmcIIINumberOfMsgs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of messages. \nAll status vars available in cmcIIIVarTable will cause a message in cmcIIIMsgTable.\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeOverallMsgStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last status change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeNumberOfMsgs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last message number change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIILastChangeMsgSettings\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Timestamp of last setting change\naccording to operating time cmcIIIUnitUpTime\"\"\",\n        }, # scalar\n        \"cmcIIIMsgTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Headline of message table\"\"\",\n        }, # table\n        \"cmcIIIMsgEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"cmcIIIDevIndex\",\n                \"cmcIIIMsgIndex\",\n            ],\n            \"description\" :\n                \"\"\"Entries of message table\"\"\",\n        }, # row\n        \"cmcIIIMsgDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the device. Its value ranges\nbetween 1 and the value of cmcIIINumberOfDevs.\"\"\",\n        }, # column\n        \"cmcIIIMsgIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Unsigned32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"Index for the list of message entries. Its value ranges\nbetween 1 and the value of cmcIIINumberOfMsgs.\"\"\",\n        }, # column\n        \"cmcIIIMsgText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Text for each message (entry in the table)\"\"\",\n        }, # column\n        \"cmcIIIMsgStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAvail\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"configChanged\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"highWarn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"lowAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"highAlarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"lowWarn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"setOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"setOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"locked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"unlRemote\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"doorOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"unlSNMP\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"unlWEB\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"unlTimer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"noAccess\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"circuit1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"circuit2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"lowbatt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"probeopen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"probeshort\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"calibration\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"inactive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"noPower\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Actual message status\n1: not available\n2: configuration has changed (sensor new, changed, lost)\n3: error\n4: OK\n5: alarm, e.g. smoke, vibration...\n6: warning of analog value, value reached high warning threshold\n7: analog value too low, value reached low threshold (Alarm)\n8: analog value too high, value reached high threshold (Alarm)\n9: warning of analog value, value reached low warning threshold\n10: output is set to OFF\n11: output is set to ON\n12: door is open\n13: door is closed\n14: door is locked\n15: door is unlocked by remote input, e.g. external card reader\n16: door is unlocked by reader or keypad connected\n17: door is unlocked by SNMP set command\n18: door is unlocked by WEB\n19: door is unlocked by timer\n20: no access, wrong key code or card number\n21: orientation of PSM unit is circuit 1\n22: orientation of PSM unit is circuit 2\n23: battery low, wireless sensor\n24: sensor cable broken\n25: sensor cable short\n26: sensor calibration in progress\n27: sensor is inactive\n28: sensor is active\n\t\t\t\t29: no Power (PSM)\"\"\",\n        }, # column\n        \"cmcIIIMsgRelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setup of Alarm relay for this message/alarm\n1:        no switching of alarm relay\n2:        switching of alarm relay\"\"\",\n        }, # column\n        \"cmcIIIMsgBeeper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setup of Alarm beeper for this alarm\n1:        no audible alarm\n2:        audible alarm\"\"\",\n        }, # column\n        \"cmcIIIMsgTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"receiver1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"receiver2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"receiver3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"receiver4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"receiver5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"receiver6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"receiver7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"receiver8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"receiver9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"receiver10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"receiver11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"receiver12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"receiver13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"receiver14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"receiver15\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"receiver16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Each bit is representing an entry of cmcIIITrapReceiverTable.\nIf the corresponding cmcIIITrapReceiverStatus is enabled\nsetting this bit enables sending messages to this receiver.\"\"\",\n        }, # column\n        \"cmcIIIMsgSMTP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"receiver1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"receiver2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"receiver3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"receiver4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"receiver5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"receiver6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"receiver7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"receiver8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"receiver9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"receiver10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"receiver11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"receiver12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"receiver13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"receiver14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"receiver15\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"receiver16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Each bit is representing an entry of cmcIIISmtpReceiverTable.\nIf the corresponding cmcIIISmtpReceiverStatus is enabled\nsetting this bit enables sending messages to this receiver.\"\"\",\n        }, # column\n        \"cmcIIIMsgSMS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Bits\",\n                    \"receiver1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"receiver2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"receiver3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"receiver4\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"receiver5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"receiver6\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"receiver7\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"receiver8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"receiver9\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"receiver10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"receiver11\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"receiver12\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"receiver13\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"receiver14\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"receiver15\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"receiver16\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Each bit is representing an entry of cmcIIISmsReceiverTable.\nIf the corresponding cmcIIISmsReceiverStatus is enabled\nsetting this bit enables sending messages to this receiver.\"\"\",\n        }, # column\n        \"cmcIIIMsgQuit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"manual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reset of this alarm\n1:  auto\n2:  manual, alarm needs confirmation, e. g. with 'C' key\"\"\",\n        }, # column\n        \"cmcIIIMsgDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Unsigned32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Delay of alarm condition\"\"\",\n        }, # column\n        \"cmcIIIMsgSchedAlarmOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Alarm condition disabled by scheduler\"\"\",\n        }, # column\n        \"cmcIIIMsgQuality\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"undefined\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"alarm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"info\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"undefined-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"ok-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"warning-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"alarm-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"info-noValue\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Quality of variable\"\"\",\n        }, # column\n        \"cmcIIIMsgVarIdx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Index of variable 'Status' in variable table generating this message\"\"\",\n        }, # column\n        \"cmcIIIMsgVarValueIdx\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Index of variable 'Value' in the variable table\"\"\",\n        }, # column\n        \"cmcIIIMsgStatusText\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.4.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"160\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Message status text\"\"\",\n        }, # column\n        \"cmcIIIControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.5\",\n        }, # node\n        \"cmcIIIQuitUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noQuit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"quit\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to quit (acknowledge) alarms of CMCIII unit.\nSetting to 'quit' (2) will have same result as pressing 'C' on CMCIII.\nVariable is automatically set back to 'noQuit' (1).\"\"\",\n        }, # scalar\n        \"cmcIIISmsQueue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"180\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"180\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fast track to send a SMS message based on configuration of \ncmcIIISetupSMS.\nMessage format: MessageText TabulatorAsSeparator ReceiverPhoneNumber\ne.g.: Hello World!\\t0123456789\"\"\",\n        }, # scalar\n        \"cmcIIIConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6\",\n        }, # node\n        \"cmcIIIMibCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.1\",\n        }, # node\n        \"cmcIIIMibGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"alarmSensorDevice\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cmcIIIDevName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgText\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatusText\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Alarm of sensors of device\"\"\",\n        }, # notification\n        \"alarmDevice\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"cmcIIIDevName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevAlias\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatusText\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Alarm of device\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"cmcIIITrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cmcIIIDevName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevAlias\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatusText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatusText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for objects contained in cmcIII notifications.\"\"\",\n        }, # group\n        \"cmcIIINotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"alarmSensorDevice\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"alarmDevice\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The cmcIII MIB notification group.\"\"\",\n        }, # group\n        \"cmcIIIInfoMibGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cmcIIIMibMajRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMibMinRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIAgentRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitHWRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitFWRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitOSRev\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitSerial\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitProd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitCurrentSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIICan0CurrentConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIICan1CurrentConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitUpTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for all cmcIII base information.\"\"\",\n        }, # group\n        \"cmcIIISetupMibGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cmcIIILastChangeSetup\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISetTempUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISetBeeper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIQuitRelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILogicRelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIUnitMsgRelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIFunctionRelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimeZone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISetupDate\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISetupTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIWebAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIHttpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIHttpsPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIFtpAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIFtpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISshAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISshPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITelnetAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITelnetPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILanguage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfTimers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimerStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimerDayOfWeek\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimeOn\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimeOff\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimeControl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITimerFunction\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfTrapReceivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITrapReceiverStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITrapReceiverIpAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpPort\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpAuth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpUsername\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpPassword\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpSender\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpReply\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfSmtpReceivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpReceiverStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmtpReceiverAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsPIN\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsService\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsMSN\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsPreDial\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfSmsReceivers\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsReceiverStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsReceiverNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISysLogStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISysLogFacility\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISysLogServer1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISysLogServer2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINtpStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINtpTimeZone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINtpServer1\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINtpServer2\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILdapStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILdapServer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for all cmcIII setup operations.\"\"\",\n        }, # group\n        \"cmcIIIDeviceMibGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cmcIIIOverallDevStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfDevs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeOverallDevStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeNumberOfDevs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeDevSettings\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeDevs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevAlias\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevNodeID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevArtNr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevBus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevPos\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevFW\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevHW\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevSerial\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevProductWeek\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevNumberOfVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevNumberOfMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevStatusText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevCurrentMinConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevCurrentMaxConsumption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDevEntPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeNumberOfVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeVarSettings\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarDatatype\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarScale\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarConstraints\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarSteps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarValueStr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarValueInt\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarAccess\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarQuality\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIVarEntPhysicalIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIOverallMsgStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINumberOfMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeOverallMsgStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeNumberOfMsgs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIILastChangeMsgSettings\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgRelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgBeeper\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgSMS\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgSMTP\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgQuit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgSchedAlarmOff\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgQuality\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgVarIdx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgVarValueIdx\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIMsgStatusText\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for all cmcIII device information.\"\"\",\n        }, # group\n        \"cmcIIIControlMibGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"cmcIIIQuitUnit\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISmsQueue\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for all cmcIII control operations.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"cmcIIIMibCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"RITTAL-CMC-III-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.2606.7.6.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The core compliance statement for all cmcIII implementations.\"\"\",\n            \"requires\" : {\n                \"cmcIIITrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIINotificationGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIInfoMibGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIISetupMibGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIIDeviceMibGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\"\n                },\n                \"cmcIIITrapGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"trap handling\"\"\",\n                },\n                \"cmcIIINotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"notification handling\"\"\",\n                },\n                \"cmcIIIInfoMibGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"base information handling\"\"\",\n                },\n                \"cmcIIISetupMibGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"setup handling\"\"\",\n                },\n                \"cmcIIIDeviceMibGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"device handling\"\"\",\n                },\n                \"cmcIIIControlMibGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"RITTAL-CMC-III-MIB\",\n                    \"description\" :\n                        \"\"\"device contol\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/SEMI-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python SEMI-MIB\n\nFILENAME = \"hpnetctz.mib\"\n\nMIB = {\n    \"moduleName\" : \"SEMI-MIB\",\n\n    \"SEMI-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"Hewlett-Packard\"\"\",\n        \"contact\" : \n            \"\"\"brian_harrison@hp.com\"\"\",\n        \"description\" :\n            \"\"\"Management information for HP devices. This MIB provides SNMP \nsystems asset and HTTP management information, as well as \nentity relationship information for host based implementations.\nThis version contains additions for SEMI\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"1999-03-17 00:00\",\n                \"description\" :\n                    \"\"\"Corrected definition of hpHttpMgMod\"\"\",\n            },\n            {\n                \"date\" : \"1998-12-01 00:00\",\n                \"description\" :\n                    \"\"\"Incorporated entity-relationship table\"\"\",\n            },\n            {\n                \"date\" : \"1997-06-26 00:00\",\n                \"description\" :\n                    \"\"\"Incorporated NetCitizen definitions\"\"\",\n            },\n            {\n                \"date\" : \"1996-06-12 00:00\",\n                \"description\" :\n                    \"\"\"Initial Version\"\"\",\n            },\n            {\n                \"date\" : \"1905-03-10 23:00\",\n                \"description\" :\n                    \"\"\"[Revision added by libsmi due to a LAST-UPDATED clause.]\"\"\",\n            },\n            {\n                \"date\" : \"1905-03-10 23:00\",\n                \"description\" :\n                    \"\"\"Added hpHttpMgDeviceSWID.\"\"\",\n            },\n            {\n                \"date\" : \"1902-06-20 23:00\",\n                \"description\" :\n                    \"\"\"Added NetworkInformation table.\"\"\",\n            },\n            {\n                \"date\" : \"1901-04-03 00:00\",\n                \"description\" :\n                    \"\"\"Added SEMI defintiions.\"\"\",\n            },\n            {\n                \"date\" : \"1900-10-16 00:00\",\n                \"description\" :\n                    \"\"\"Minor syntactic changes in notifications.\"\"\",\n            },\n            {\n                \"date\" : \"1900-10-12 00:00\",\n                \"description\" :\n                    \"\"\"Fixed semantic error, modified traps and included\nchanges from the review team.\"\"\",\n            },\n            {\n                \"date\" : \"1900-10-04 00:00\",\n                \"description\" :\n                    \"\"\"Moved Device asset information into a container model.\nModified traps and compliance definitions. Depricated\nprevious device asset objects.\"\"\",\n            },\n            {\n                \"date\" : \"1900-01-12 00:00\",\n                \"description\" :\n                    \"\"\"Added cluster support\"\"\",\n            },\n        ),\n        \"identity node\" : \"hpHttpMgMod\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n    ),\n\n    \"typedefs\" : {\n        \"Utf8String\" : {\n            \"basetype\" : \"OctetString\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"255\"\n            },\n            \"format\" : \"255a\",\n            \"description\" :\n                \"\"\"To facilitate internationalization, this TC\nrepresents information taken from the ISO/IEC IS \n10646-1 character set, encoded as an octet string \nusing the UTF-8 character encoding scheme described \nin RFC 2044 [10].  For strings in 7-bit US-ASCII, \nthere is no impact since the UTF-8 representation is \nidentical to the US-ASCII encoding.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"hp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11\",\n        }, # node\n        \"nm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2\",\n        }, # node\n        \"hpWebMgmt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36\",\n        }, # node\n        \"hpHttpMgMod\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"hpHttpMgTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0\",\n        }, # node\n        \"hpHttpMgDeviceSpecificEventCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Device specific event error code.\"\"\",\n        }, # scalar\n        \"hpHttpMgDeviceSpecificFRU\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Device specific FRU identifier\"\"\",\n        }, # scalar\n        \"hpHttpMgObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1\",\n        }, # node\n        \"hpHttpMgDefaults\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.1\",\n        }, # node\n        \"hpHttpMgDefaultURL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Uniform Resource Locator (URL), as defined in RFC1738,\nfor the default management information for this device. \nThis URL is typically used by a HTTP browser to display \nmanagement information for this device.  This default \npage should contain links to any other management\npages for this device.\"\"\",\n        }, # scalar\n        \"hpHttpMgNetCitizen\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2\",\n        }, # node\n        \"hpHttpMgMgmtSrvrURL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"URL of management server for this device.  \"\"\",\n        }, # scalar\n        \"hpHttpMgID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Unique identifier for this entity.  This ID\nmust not change even if network address or\nremovable cards are changed. For devices with\nfixed MAC addresses this may be the same as\nifPhysAddress; for devices with fixed serial\nnumbers this may be the same as\nhpHttpMgSerialNumber.\"\"\",\n        }, # scalar\n        \"hpHttpMgHealth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"information\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"nonrecoverable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Operating status of this entity.\"\"\",\n        }, # scalar\n        \"hpHttpMgManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Manufacturer of the hardware for this entity\ne.g. 'Hewlett-Packard'.\"\"\",\n        }, # scalar\n        \"hpHttpMgProduct\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Manufacturer's product number for this entity,\ne.g. 'D1234A'.\"\"\",\n        }, # scalar\n        \"hpHttpMgVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number of this entity, e.g. 'A.00.01'.\nWhere several version numbers are available, \nthis represents the software version.\"\"\",\n        }, # scalar\n        \"hpHttpMgHWVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number of the hardware for this entity,\ne.g. 'A.00.01'.\"\"\",\n        }, # scalar\n        \"hpHttpMgROMVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number of ROM for this entity, e.g.\n'A.00.01'.\"\"\",\n        }, # scalar\n        \"hpHttpMgSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Serial number of entity.  It is recommended\nthat this be factory set and read only; if not\nfactory set, should initially be blank.\"\"\",\n        }, # scalar\n        \"hpHttpMgAssetNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Asset number of entity.  This is not normally\nmodified once set.\"\"\",\n        }, # scalar\n        \"hpHttpMgPhone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.2.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Phone number of contact person for this\nentity.\"\"\",\n        }, # scalar\n        \"hpHttpMgEntityNetInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3\",\n        }, # node\n        \"hpHttpMgEntityNetInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of EntityRelationships, connection type, URLs, IPAddress etc.\nThis table typcially contains relationships between devices that each\nhave their own management agent.  \"\"\",\n        }, # table\n        \"hpHttpMgEntityNetInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpHttpMgEntityNetInfoIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information describing EntityRelationships, URLs, IPAddresses etc.\"\"\",\n        }, # row\n        \"hpHttpMgEntityNetInfoIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The EntityRelationship Entity Index.\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoSysObjID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sys Object ID of this entity.\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoRelationshipType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"self\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"containedEntity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"containingEntity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"externallyAttachedEntity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"indirectlyAttachedEntity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"clusterNode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Specifies the type of relationship this entry has to this entity.\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoUniqueID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This represents a globally unique ID for the device. \nThis MUST be the ordered combination of the Manufacturer, \nproduct name, AND any other text that is necessary to guarantee \nglobal uniqueness. This ID must not change even if the referenced\nentity is moved.\ne.g. HPD1234A9482882\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Home Page URL of entity corresponding to this entry.\nThis field may only contain the DNS name of a managed\nsystem, in which case the actual URL must be determined\nfrom this managed system.\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoURLLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Label that a managaement application should use for the hyperlink \nto the entity's URL.\"\"\",\n        }, # column\n        \"hpHttpMgEntityNetInfoIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.3.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Addressing information for one of the IP Addresses of the entity \ncorresponding to this entry.\"\"\",\n        }, # column\n        \"hpHttpMgCluster\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.4\",\n        }, # node\n        \"hpHttpMgClusterName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the cluster that this system is a member of, \nor blank if this system is not a member of a cluster.\"\"\",\n        }, # scalar\n        \"hpHttpMgDeviceInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5\",\n        }, # node\n        \"hpHttpMgDeviceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of HP devices under a single SNMP agent.\"\"\",\n        }, # table\n        \"hpHttpMgDeviceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpHttpMgDeviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"A device entry containing objects for a particular device.\"\"\",\n        }, # row\n        \"hpHttpMgDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique device identification within the \ninstance of this Mib.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceGlobalUniqueID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This represents a globally unique ID for the device.   \nThis object may take one of several formats:\n- It may be a UUID string in the following hexadecimal format:\n   01234567-1234-1234-1234-0123456789AB\n- It may be a UUID in RAW format (hex no dashes) (deprecated)\n- If the UUID is not known but the system has an alternative \n  unique identifier 'SWID' (for PA systems), this field may be\n  the string 'SWID:' followed by the SWID value\n    e.g. 'SWID:0123456789ABCDEF'\n- It may be the ordered combination of the Manufacturer, \n  product name, AND any other text that is necessary to guarantee \n  global uniqueness. \n    e.g. 'HPD1234A9482882'\n- This value may not be null.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceHealth\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"unused\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ok\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"nonrecoverable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Overall health of the device. The goal of this object\nis to be the single poll point to check the status of the \ndevice.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceSysObjID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"System Object ID for this Device entity. This should be an\nASCII integer format. (i.e. 1.3.6.1.4.1.11.2.36.1.1) \nThe value may not be null.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceManagementURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object contains the URL for the device's management \nsoftware.  If it does not exist the value is empty string.  \n   If write is not supported, then return invalid. This value is \nretained across boots.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceManagementURLLabel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The label that a management application should use for the \nhyperlink to the entity's URL.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceManufacturer\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's manufacturer name. For Hewlett Packard branded\nequipment this value MUST be 'HP'\"\"\",\n        }, # column\n        \"hpHttpMgDeviceProductName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's product name. Null is NOT a valid value.\n(i.e. D1234A)\"\"\",\n        }, # column\n        \"hpHttpMgDeviceProductCaption\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's product caption name. \n(i.e. HP Multi-stack Disk Array)\"\"\",\n        }, # column\n        \"hpHttpMgDeviceSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number for the device. This can return\na NULL string.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number for this device.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceHWVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number for this device's hardware.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceROMVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number for this device's ROM.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceAssetNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Asset number for the device.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceContactPerson\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Identifies the name of the person responsible for the\noperation of this device. If write is not\nsupported then return invalid.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceContactPhone\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Phone number of the contact person for this device.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceContactEmail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"e-mail address of the contact person for this device.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceContactPagerNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SEMI-MIB\",\n                        \"type\" : \"Utf8String\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pager number of the contact person for this device.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Identifies the location for the this device. If \nwrite is not supported then return invalid.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceRackId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Identifies the name given by the administrator to identify a \nparticular rack such a rack 4a or SAP 2 for example.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceRackPosition\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Identifies the location such as top, middle or bottom or a \nnumber such a 1st from top etc. to identify the placement \nof a device in a rack.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceRelationshipType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"host\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the relationship of this device to the SNMP agent.\nHost indicates that this device owns the SNMP agent.\"\"\",\n        }, # column\n        \"hpHttpMgDeviceSWID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.5.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Additional unique system identification information.\nFor PA systems this is the SWID.  May be null.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6\",\n        }, # node\n        \"hpHttpMgNetInfoTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of HP devices under a single SNMP agent.\"\"\",\n        }, # table\n        \"hpHttpMgNetInfoEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpHttpMgNetInfoIndex\",\n            ],\n            \"description\" :\n                \"\"\"A device entry containing objects for a particular device.\"\"\",\n        }, # row\n        \"hpHttpMgNetInfoIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unique row identification within the \ninstance of this Mib.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfoEntityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65536\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The corresponding EntityRelationship table index\nfor the device with this index; may be null (or\n65536) if a device index is supplied.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfoDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The corresponding Device Table index\nfor the device with this index; may be null (or \n65536) if a entity-relationship index is supplied.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfoHostname\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Host name of related device.  \nMay be null if unknown or not assigned.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfoIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IP Address of related device.  Ther is a separate row in this\ntable for each IP address of the related device.  \nMay be null if unknown or not assigned.\"\"\",\n        }, # column\n        \"hpHttpMgNetInfoMACAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.1.6.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SEMI-MIB\", \"name\" : \"Utf8String\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"MAC address of related device.  This MAC address corresponds \nto the IP address, if supplied.  Multiple rows may have the\nsame MAC address if multiple IP addresses are supported.  \nMay be null if unknown or not assigned.\"\"\",\n        }, # column\n        \"hpHttpMgGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2\",\n        }, # node\n        \"hpHttpMgCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.3\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"hpHttpMgHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.1\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n                \"hpHttpMgHealth\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Sent whenever hpHttpMgHealth changes state.\"\"\",\n        }, # notification\n        \"hpHttpMgShutdown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.2\",\n            \"status\" : \"deprecated\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"Sent when the agent is about to shut down.\"\"\",\n        }, # notification\n        \"hpHttpMgUnknownHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificEventCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificFRU\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device's health has changed to unknown.\"\"\",\n        }, # notification\n        \"hpHttpMgOKHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificEventCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificFRU\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device's health has changed to OK.\"\"\",\n        }, # notification\n        \"hpHttpMgWarningHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificEventCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificFRU\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device's health has changed to warning.\"\"\",\n        }, # notification\n        \"hpHttpMgCriticalHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificEventCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificFRU\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device's health has changed to critical.\"\"\",\n        }, # notification\n        \"hpHttpMgNonRecoverableHealthTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificEventCode\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSpecificFRU\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The device's health has changed to Non-Recoverable.\"\"\",\n        }, # notification\n        \"hpHttpMgDeviceAddedTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Sent whenever a device is added to the mib.\"\"\",\n        }, # notification\n        \"hpHttpMgDeviceRemovedTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Sent whenever a device is removed from the mib.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"hpHttpMgDefaultGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgDefaultURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The objects providing information applicable to all\nhttp manageable systems\"\"\",\n        }, # group\n        \"hpHttpMgBasicNetCitizenGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.2\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"hpHttpMgMgmtSrvrURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgHealth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgProduct\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Additional HP NetCitizen objects\"\"\",\n        }, # group\n        \"hpHttpMgBasicNetCitizenTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.3\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"hpHttpMgHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"HP NetCitizen notifications\"\"\",\n        }, # group\n        \"hpHttpMgExtendedNetCitizenGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.4\",\n            \"status\" : \"deprecated\",\n            \"members\" : {\n                \"hpHttpMgHWVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgROMVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgAssetNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgPhone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Additional HP NetCitizen objects\"\"\",\n        }, # group\n        \"hpHttpMgExtendedNetCitizenTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgShutdown\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"HP NetCitizen notifications\"\"\",\n        }, # group\n        \"hpHttpMgEntityRelationshipGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgEntityNetInfoIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoSysObjID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoRelationshipType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoUniqueID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoURLLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEntityNetInfoIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"NetCitizen entitly-relationship table\"\"\",\n        }, # group\n        \"hpHttpMgClusterGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgClusterName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Cluster objects\"\"\",\n        }, # group\n        \"hpHttpMgEnhancedNetCitizenGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgDeviceIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceGlobalUniqueID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceHealth\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSysObjID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURL\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManagementURLLabel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceProductName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceProductCaption\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceSerialNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceHWVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceROMVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceAssetNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceContactPerson\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceContactPhone\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceContactEmail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceContactPagerNumber\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceRackId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceRackPosition\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceRelationshipType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Additional HP NetCitizen objects\"\"\",\n        }, # group\n        \"hpHttpMgEnhancedNetCitizenTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgUnknownHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgOKHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgWarningHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgCriticalHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNonRecoverableHealthTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceAddedTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgDeviceRemovedTrap\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"HP NetCitizen notifications\"\"\",\n        }, # group\n        \"hpHttpMgNetCitizenNetInfoGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.2.10\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"hpHttpMgNetInfoIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetInfoEntityIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetInfoDeviceIndex\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetInfoHostname\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetInfoIPAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetInfoMACAddress\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Additional HP NetCitizen objects for server network information\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"hpHttpMgMinCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities which\nare http manageable.\"\"\",\n            \"requires\" : {\n                \"hpHttpMgDefaultGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"hpHttpMgBasicNetCitizenCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.3.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\" The compliance statement for SNMP entities which\nmeet basic NetCitizen crieria\"\"\",\n            \"requires\" : {\n                \"hpHttpMgDefaultGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgBasicNetCitizenGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgBasicNetCitizenTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"hpHttpMgEnhancedNetCitizenCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\" The compliance statement for SNMP entities which\nmeet basic NetCitizen crieria\"\"\",\n            \"requires\" : {\n                \"hpHttpMgDefaultGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEnhancedNetCitizenGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEnhancedNetCitizenTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # requires\n        }, # compliance\n        \"hpHttpMgNetCitizenNetInfoCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SEMI-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.36.1.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\" The compliance statement for SNMP entities which\nmeet basic NetCitizen crieria\"\"\",\n            \"requires\" : {\n                \"hpHttpMgDefaultGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEnhancedNetCitizenGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgEnhancedNetCitizenTrapGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n                \"hpHttpMgNetCitizenNetInfoGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SEMI-MIB\"\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/SNMPv2-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.5:\n#\n#   smidump -f python SNMPv2-MIB\n\nFILENAME = \"/home/mvold/mibs/v2/SNMPv2-MIB.txt\"\n\nMIB = {\n    \"moduleName\" : \"SNMPv2-MIB\",\n\n    \"SNMPv2-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF SNMPv3 Working Group\"\"\",\n        \"contact\" : \n            \"\"\"WG-EMail:   snmpv3@lists.tislabs.com\nSubscribe:  snmpv3-request@lists.tislabs.com\n\nCo-Chair:   Russ Mundy\n            Network Associates Laboratories\npostal:     15204 Omega Drive, Suite 300\n            Rockville, MD 20850-4601\n            USA\nEMail:      mundy@tislabs.com\nphone:      +1 301 947-7107\n\nCo-Chair:   David Harrington\n            Enterasys Networks\npostal:     35 Industrial Way\n            P. O. Box 5005\n            Rochester, NH 03866-5005\n            USA\nEMail:      dbh@enterasys.com\nphone:      +1 603 337-2614\n\nEditor:     Randy Presuhn\n            BMC Software, Inc.\npostal:     2141 North First Street\n            San Jose, CA 95131\n            USA\nEMail:      randy_presuhn@bmc.com\nphone:      +1 408 546-1006\"\"\",\n        \"description\" :\n            \"\"\"The MIB module for SNMP entities.\n\nCopyright (C) The Internet Society (2002). This\nversion of this MIB module is part of RFC 3418;\nsee the RFC itself for full legal notices.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2002-10-16 00:00\",\n                \"description\" :\n                    \"\"\"This revision of this MIB module was published as\nRFC 3418.\"\"\",\n            },\n            {\n                \"date\" : \"1995-11-09 00:00\",\n                \"description\" :\n                    \"\"\"This revision of this MIB module was published as\nRFC 1907.\"\"\",\n            },\n            {\n                \"date\" : \"1993-04-01 00:00\",\n                \"description\" :\n                    \"\"\"The initial revision of this MIB module was published\nas RFC 1450.\"\"\",\n            },\n        ),\n        \"identity node\" : \"snmpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"snmpModules\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n    ),\n\n    \"nodes\" : {\n        \"system\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1\",\n        }, # node\n        \"sysDescr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the entity.  This value should\ninclude the full name and version identification of\nthe system's hardware type, software operating-system,\nand networking software.\"\"\",\n        }, # scalar\n        \"sysObjectID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The vendor's authoritative identification of the\nnetwork management subsystem contained in the entity.\nThis value is allocated within the SMI enterprises\nsubtree (1.3.6.1.4.1) and provides an easy and\nunambiguous means for determining `what kind of box' is\nbeing managed.  For example, if vendor `Flintstones,\nInc.' was assigned the subtree 1.3.6.1.4.1.424242,\nit could assign the identifier 1.3.6.1.4.1.424242.1.1\nto its `Fred Router'.\"\"\",\n        }, # scalar\n        \"sysUpTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time (in hundredths of a second) since the\nnetwork management portion of the system was last\nre-initialized.\"\"\",\n        }, # scalar\n        \"sysContact\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The textual identification of the contact person for\nthis managed node, together with information on how\nto contact this person.  If no contact information is\nknown, the value is the zero-length string.\"\"\",\n        }, # scalar\n        \"sysName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An administratively-assigned name for this managed\nnode.  By convention, this is the node's fully-qualified\ndomain name.  If the name is unknown, the value is\nthe zero-length string.\"\"\",\n        }, # scalar\n        \"sysLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The physical location of this node (e.g., 'telephone\ncloset, 3rd floor').  If the location is unknown, the\nvalue is the zero-length string.\"\"\",\n        }, # scalar\n        \"sysServices\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"127\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value which indicates the set of services that this\nentity may potentially offer.  The value is a sum.\n\nThis sum initially takes the value zero. Then, for\neach layer, L, in the range 1 through 7, that this node\nperforms transactions for, 2 raised to (L - 1) is added\nto the sum.  For example, a node which performs only\nrouting functions would have a value of 4 (2^(3-1)).\nIn contrast, a node which is a host offering application\nservices would have a value of 72 (2^(4-1) + 2^(7-1)).\nNote that in the context of the Internet suite of\nprotocols, values should be calculated accordingly:\n\n     layer      functionality\n       1        physical (e.g., repeaters)\n       2        datalink/subnetwork (e.g., bridges)\n       3        internet (e.g., supports the IP)\n       4        end-to-end  (e.g., supports the TCP)\n       7        applications (e.g., supports the SMTP)\n\nFor systems including OSI protocols, layers 5 and 6\nmay also be counted.\"\"\",\n        }, # scalar\n        \"sysORLastChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time of the most recent\nchange in state or value of any instance of sysORID.\"\"\",\n        }, # scalar\n        \"sysORTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The (conceptual) table listing the capabilities of\nthe local SNMP application acting as a command\nresponder with respect to various MIB modules.\nSNMP entities having dynamically-configurable support\nof MIB modules will have a dynamically-varying number\nof conceptual rows.\"\"\",\n        }, # table\n        \"sysOREntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysORIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry (conceptual row) in the sysORTable.\"\"\",\n        }, # row\n        \"sysORIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The auxiliary variable used for identifying instances\nof the columnar objects in the sysORTable.\"\"\",\n        }, # column\n        \"sysORID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An authoritative identification of a capabilities\nstatement with respect to various MIB modules supported\nby the local SNMP application acting as a command\nresponder.\"\"\",\n        }, # column\n        \"sysORDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A textual description of the capabilities identified\nby the corresponding instance of sysORID.\"\"\",\n        }, # column\n        \"sysORUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.1.9.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time this conceptual\nrow was last instantiated.\"\"\",\n        }, # column\n        \"snmp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11\",\n        }, # node\n        \"snmpInPkts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of messages delivered to the SNMP\nentity from the transport service.\"\"\",\n        }, # scalar\n        \"snmpOutPkts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Messages which were\npassed from the SNMP protocol entity to the\ntransport service.\"\"\",\n        }, # scalar\n        \"snmpInBadVersions\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP messages which were delivered\nto the SNMP entity and were for an unsupported SNMP\nversion.\"\"\",\n        }, # scalar\n        \"snmpInBadCommunityNames\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of community-based SNMP messages (for\nexample,  SNMPv1) delivered to the SNMP entity which\nused an SNMP community name not known to said entity.\nAlso, implementations which authenticate community-based\nSNMP messages using check(s) in addition to matching\nthe community name (for example, by also checking\nwhether the message originated from a transport address\nallowed to use a specified community name) MAY include\nin this value the number of messages which failed the\nadditional check(s).  It is strongly RECOMMENDED that\n\nthe documentation for any security model which is used\nto authenticate community-based SNMP messages specify\nthe precise conditions that contribute to this value.\"\"\",\n        }, # scalar\n        \"snmpInBadCommunityUses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of community-based SNMP messages (for\nexample, SNMPv1) delivered to the SNMP entity which\nrepresented an SNMP operation that was not allowed for\nthe SNMP community named in the message.  The precise\nconditions under which this counter is incremented\n(if at all) depend on how the SNMP entity implements\nits access control mechanism and how its applications\ninteract with that access control mechanism.  It is\nstrongly RECOMMENDED that the documentation for any\naccess control mechanism which is used to control access\nto and visibility of MIB instrumentation specify the\nprecise conditions that contribute to this value.\"\"\",\n        }, # scalar\n        \"snmpInASNParseErrs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of ASN.1 or BER errors encountered by\nthe SNMP entity when decoding received SNMP messages.\"\"\",\n        }, # scalar\n        \"snmpInTooBigs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.8\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were\ndelivered to the SNMP protocol entity and for\nwhich the value of the error-status field was\n`tooBig'.\"\"\",\n        }, # scalar\n        \"snmpInNoSuchNames\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.9\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were\ndelivered to the SNMP protocol entity and for\nwhich the value of the error-status field was\n`noSuchName'.\"\"\",\n        }, # scalar\n        \"snmpInBadValues\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.10\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were\ndelivered to the SNMP protocol entity and for\nwhich the value of the error-status field was\n`badValue'.\"\"\",\n        }, # scalar\n        \"snmpInReadOnlys\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.11\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number valid SNMP PDUs which were delivered\nto the SNMP protocol entity and for which the value\nof the error-status field was `readOnly'.  It should\nbe noted that it is a protocol error to generate an\nSNMP PDU which contains the value `readOnly' in the\nerror-status field, as such this object is provided\nas a means of detecting incorrect implementations of\nthe SNMP.\"\"\",\n        }, # scalar\n        \"snmpInGenErrs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.12\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were delivered\nto the SNMP protocol entity and for which the value\nof the error-status field was `genErr'.\"\"\",\n        }, # scalar\n        \"snmpInTotalReqVars\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.13\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of MIB objects which have been\nretrieved successfully by the SNMP protocol entity\nas the result of receiving valid SNMP Get-Request\nand Get-Next PDUs.\"\"\",\n        }, # scalar\n        \"snmpInTotalSetVars\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.14\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of MIB objects which have been\naltered successfully by the SNMP protocol entity as\nthe result of receiving valid SNMP Set-Request PDUs.\"\"\",\n        }, # scalar\n        \"snmpInGetRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.15\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Request PDUs which\nhave been accepted and processed by the SNMP\nprotocol entity.\"\"\",\n        }, # scalar\n        \"snmpInGetNexts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.16\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Next PDUs which have been\naccepted and processed by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpInSetRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.17\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Set-Request PDUs which\nhave been accepted and processed by the SNMP protocol\nentity.\"\"\",\n        }, # scalar\n        \"snmpInGetResponses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.18\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Response PDUs which\nhave been accepted and processed by the SNMP protocol\nentity.\"\"\",\n        }, # scalar\n        \"snmpInTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.19\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Trap PDUs which have been\naccepted and processed by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpOutTooBigs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.20\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were generated\nby the SNMP protocol entity and for which the value\nof the error-status field was `tooBig.'\"\"\",\n        }, # scalar\n        \"snmpOutNoSuchNames\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.21\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were generated\nby the SNMP protocol entity and for which the value\nof the error-status was `noSuchName'.\"\"\",\n        }, # scalar\n        \"snmpOutBadValues\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.22\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were generated\nby the SNMP protocol entity and for which the value\nof the error-status field was `badValue'.\"\"\",\n        }, # scalar\n        \"snmpOutGenErrs\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.24\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP PDUs which were generated\nby the SNMP protocol entity and for which the value\nof the error-status field was `genErr'.\"\"\",\n        }, # scalar\n        \"snmpOutGetRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.25\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Request PDUs which\nhave been generated by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpOutGetNexts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.26\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Next PDUs which have\nbeen generated by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpOutSetRequests\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.27\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Set-Request PDUs which\nhave been generated by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpOutGetResponses\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.28\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Get-Response PDUs which\nhave been generated by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpOutTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.29\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SNMP Trap PDUs which have\nbeen generated by the SNMP protocol entity.\"\"\",\n        }, # scalar\n        \"snmpEnableAuthenTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the SNMP entity is permitted to\ngenerate authenticationFailure traps.  The value of this\nobject overrides any configuration information; as such,\nit provides a means whereby all authenticationFailure\ntraps may be disabled.\n\nNote that it is strongly recommended that this object\nbe stored in non-volatile memory so that it remains\nconstant across re-initializations of the network\nmanagement system.\"\"\",\n        }, # scalar\n        \"snmpSilentDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Confirmed Class PDUs (such as\nGetRequest-PDUs, GetNextRequest-PDUs,\nGetBulkRequest-PDUs, SetRequest-PDUs, and\nInformRequest-PDUs) delivered to the SNMP entity which\nwere silently dropped because the size of a reply\ncontaining an alternate Response Class PDU (such as a\nResponse-PDU) with an empty variable-bindings field\nwas greater than either a local constraint or the\nmaximum message size associated with the originator of\nthe request.\"\"\",\n        }, # scalar\n        \"snmpProxyDrops\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.11.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Confirmed Class PDUs\n(such as GetRequest-PDUs, GetNextRequest-PDUs,\nGetBulkRequest-PDUs, SetRequest-PDUs, and\nInformRequest-PDUs) delivered to the SNMP entity which\nwere silently dropped because the transmission of\nthe (possibly translated) message to a proxy target\nfailed in a manner (other than a time-out) such that\nno Response Class PDU (such as a Response-PDU) could\nbe returned.\"\"\",\n        }, # scalar\n        \"snmpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1\",\n            \"status\" : \"current\",\n        }, # node\n        \"snmpMIBObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1\",\n        }, # node\n        \"snmpTrap\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.4\",\n        }, # node\n        \"snmpTrapOID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The authoritative identification of the notification\ncurrently being sent.  This variable occurs as\nthe second varbind in every SNMPv2-Trap-PDU and\nInformRequest-PDU.\"\"\",\n        }, # scalar\n        \"snmpTrapEnterprise\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The authoritative identification of the enterprise\nassociated with the trap currently being sent.  When an\nSNMP proxy agent is mapping an RFC1157 Trap-PDU\ninto a SNMPv2-Trap-PDU, this variable occurs as the\nlast varbind.\"\"\",\n        }, # scalar\n        \"snmpTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5\",\n        }, # node\n        \"snmpSet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.6\",\n        }, # node\n        \"snmpSetSerialNo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An advisory lock used to allow several cooperating\ncommand generator applications to coordinate their\nuse of the SNMP set operation.\n\nThis object is used for coarse-grain coordination.\nTo achieve fine-grain coordination, one or more similar\nobjects might be defined within each MIB group, as\nappropriate.\"\"\",\n        }, # scalar\n        \"snmpMIBConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2\",\n        }, # node\n        \"snmpMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.1\",\n        }, # node\n        \"snmpMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"coldStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"A coldStart trap signifies that the SNMP entity,\nsupporting a notification originator application, is\nreinitializing itself and that its configuration may\nhave been altered.\"\"\",\n        }, # notification\n        \"warmStart\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"A warmStart trap signifies that the SNMP entity,\nsupporting a notification originator application,\nis reinitializing itself such that its configuration\nis unaltered.\"\"\",\n        }, # notification\n        \"authenticationFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.1.5.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"An authenticationFailure trap signifies that the SNMP\nentity has received a protocol message that is not\nproperly authenticated.  While all implementations\nof SNMP entities MAY be capable of generating this\ntrap, the snmpEnableAuthenTraps object indicates\nwhether this trap will be generated.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"snmpSetGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"snmpSetSerialNo\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects which allow several cooperating\ncommand generator applications to coordinate their\nuse of the set operation.\"\"\",\n        }, # group\n        \"systemGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"sysDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysObjectID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysUpTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysContact\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysLocation\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysServices\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysORLastChange\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysORID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysORUpTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"sysORDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The system group defines objects which are common to all\nmanaged systems.\"\"\",\n        }, # group\n        \"snmpBasicNotificationsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"coldStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"authenticationFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The basic notifications implemented by an SNMP entity\nsupporting command responder applications.\"\"\",\n        }, # group\n        \"snmpGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"snmpInPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInBadVersions\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInASNParseErrs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpSilentDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpProxyDrops\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpEnableAuthenTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing basic instrumentation\nand control of an SNMP entity.\"\"\",\n        }, # group\n        \"snmpCommunityGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"snmpInBadCommunityNames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInBadCommunityUses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects providing basic instrumentation\nof a SNMP entity which supports community-based\nauthentication.\"\"\",\n        }, # group\n        \"snmpObsoleteGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.10\",\n            \"status\" : \"obsolete\",\n            \"members\" : {\n                \"snmpOutPkts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInTooBigs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInNoSuchNames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInBadValues\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInReadOnlys\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInGenErrs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInTotalReqVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInTotalSetVars\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInGetRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInGetNexts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInSetRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInGetResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpInTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutTooBigs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutNoSuchNames\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutBadValues\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutGenErrs\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutGetRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutGetNexts\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutSetRequests\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutGetResponses\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpOutTraps\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"A collection of objects from RFC 1213 made obsolete\nby this MIB module.\"\"\",\n        }, # group\n        \"snmpWarmStartNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.11\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"warmStart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"An additional notification for an SNMP entity supporting\ncommand responder applications, if it is able to reinitialize\nitself such that its configuration is unaltered.\"\"\",\n        }, # group\n        \"snmpNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.2.12\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"snmpTrapOID\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpTrapEnterprise\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"These objects are required for entities\nwhich support notification originator applications.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"snmpBasicCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.1.2\",\n            \"status\" : \"deprecated\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMPv2 entities which\nimplement the SNMPv2 MIB.\n\nThis compliance statement is replaced by\nsnmpBasicComplianceRev2.\"\"\",\n            \"requires\" : {\n                \"snmpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpSetGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"systemGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpBasicNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpCommunityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"SNMPv2-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for SNMPv2 entities which\nsupport community-based authentication.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n        \"snmpBasicComplianceRev2\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"SNMPv2-MIB\",\n            \"oid\" : \"1.3.6.1.6.3.1.2.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for SNMP entities which\nimplement this MIB module.\"\"\",\n            \"requires\" : {\n                \"snmpGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpSetGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"systemGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpBasicNotificationsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"SNMPv2-MIB\"\n                },\n                \"snmpCommunityGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"SNMPv2-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for SNMP entities which\nsupport community-based authentication.\"\"\",\n                },\n                \"snmpWarmStartNotificationGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"SNMPv2-MIB\",\n                    \"description\" :\n                        \"\"\"This group is mandatory for an SNMP entity which\nsupports command responder applications, and is\nable to reinitialize itself such that its\nconfiguration is unaltered.\"\"\",\n                },\n            }, # requires\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/SPAGENT-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python SPAGENT-MIB\n\nFILENAME = \"akcp.mib\"\n\nMIB = {\n    \"moduleName\" : \"SPAGENT-MIB\",\n\n    \"SPAGENT-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Gauge\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Opaque\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"akcp\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854\",\n        }, # node\n        \"sensorProbe\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1\",\n        }, # node\n        \"spSummary\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1\",\n        }, # node\n        \"spStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensorProbe. The status of the sensorProbe is the worst status of all the sensors under the control of this sensorProbe.\"\"\",\n        }, # scalar\n        \"spManufName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The manufacturers name\"\"\",\n        }, # scalar\n        \"spHelpUrl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The URL of the web based help\"\"\",\n        }, # scalar\n        \"spProductName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The product name\"\"\",\n        }, # scalar\n        \"spHostName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The hostname\"\"\",\n        }, # scalar\n        \"spStatusEachModule\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10\",\n        }, # node\n        \"spStatusRJ45\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the sensorProbe is the worst status of all sensors on RJ45 port\"\"\",\n        }, # scalar\n        \"spStatusNoVideoSignal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the sensorProbe is the worst status of all No Video Signal sensors\"\"\",\n        }, # scalar\n        \"spStatusSoundDetector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the sensorProbe is the worst status of Sound Detector sensors\"\"\",\n        }, # scalar\n        \"spStatusVirtual\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the sensorProbe is the worst status of all Virtual sensors \"\"\",\n        }, # scalar\n        \"spStatusSoftMotion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.1.10.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"warning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the sensorProbe is the worst status of all Camera Motion Detector sensors \"\"\",\n        }, # scalar\n        \"spSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2\",\n        }, # node\n        \"sensorProbeDetail\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2\",\n        }, # node\n        \"sensorProbeEntry\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1\",\n        }, # node\n        \"sensorProbeHost\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Host of this sensor, this is the IP address\"\"\",\n        }, # scalar\n        \"sensorProbeUseDHCP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To use DHCP enter a 1, to use a static IP address enter a 2\"\"\",\n        }, # scalar\n        \"sensorProbeMAC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The MAC address of this system\"\"\",\n        }, # scalar\n        \"sensorProbeSetCommunity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensorProbe community string used for snmp Sets\"\"\",\n        }, # scalar\n        \"sensorProbeGetCommunity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensorProbe community string used for snmp Gets\"\"\",\n        }, # scalar\n        \"sensorProbeTempTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Temperature Sensor in the SensorArray. Each row in the table contains data for a different Temperature Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTempEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTempIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTempEntry Table\"\"\",\n        }, # row\n        \"sensorProbeTempDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeTempLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The physical location of this sensor\"\"\",\n        }, # column\n        \"sensorProbeTempDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTempStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTempOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTempGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTempHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTempHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTempLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTempLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTempRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTempDegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTempSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"type1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"type2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of temperture sensor\"\"\",\n        }, # column\n        \"sensorProbeTempDegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SP Only: The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTempEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeTempEmailTrapSchedule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: Email/trap limit schedule for this sensor\"\"\",\n        }, # column\n        \"sensorProbeTempEmailTrapInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum time between each [email/trap:SP, only trap:CP8] (can be from 0 to 60 minutes).\"\"\",\n        }, # column\n        \"sensorProbeTempSendNormalTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email/trap when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTempDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeTempDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeTempIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the temperature sensor table\"\"\",\n        }, # column\n        \"sensorProbeTempRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeTempRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeTempRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeTempRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeTempEmailInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CP8 Only: Minimum time between each email (can be from 0 to 60 minutes)\"\"\",\n        }, # column\n        \"sensorProbeTempIndexCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Temperature sensor online\"\"\",\n        }, # column\n        \"sensorProbeTempOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTempSirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeTempSirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeTempSirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeTempSirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeTempAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeTempSirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeTempURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTempOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTempDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTempCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatRelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatNormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatHighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatHighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatLowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatLowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatNormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatHighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatHighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatLowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatLowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatEnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTempSendNormalMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTempSendTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending trap when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeTempSendMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.16.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeHumidityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Humidity Sensor in the SensorArray. Each row in the table contains data for a different Humidity Sensor.\"\"\",\n        }, # table\n        \"sensorProbeHumidityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeHumidityIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeHumidityEntry Table\"\"\",\n        }, # row\n        \"sensorProbeHumidityDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeHumidityLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The physical location of this sensor\"\"\",\n        }, # column\n        \"sensorProbeHumidityPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeHumidityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeHumidityOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeHumidityGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeHumidityHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative humidity this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeHumidityHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative humidity this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeHumidityLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative humidity this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeHumidityLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative humidity this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeHumidityRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative humidity to rearm the status. For example if status goes from normal to warning, the humidity must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeHumidityRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorProbeHumidityLowVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: The low voltage range for use in AtoD conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityHighVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: The high voltage range for use in AtoD conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeHumidityEmailTrapSchedule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: Email/trap limit schedule for this sensor\"\"\",\n        }, # column\n        \"sensorProbeHumidityEmailTrapInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum time between each [email/trap:SP, only trap:CP8] (can be from 0 to 60 minutes)\"\"\",\n        }, # column\n        \"sensorProbeHumiditySendNormalTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email/trap when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeHumidityDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeHumidityDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeHumidityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Humidity sensor table\"\"\",\n        }, # column\n        \"sensorProbeHumidityAtoDAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityAtoDAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityAtoDTypeUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"absolute\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"percent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of scale for use in DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityDcUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit in DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityAtoDJumper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"jumperAt-60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-600\"\n                    },\n                    \"jumperAt-40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-400\"\n                    },\n                    \"jumperAt-30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-300\"\n                    },\n                    \"jumperAt-20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-200\"\n                    },\n                    \"jumperAt-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-100\"\n                    },\n                    \"jumperAt10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"jumperAt20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"jumperAt30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"300\"\n                    },\n                    \"jumperAt40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"400\"\n                    },\n                    \"jumperAt60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selected voltage scale (jumper 0) in DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeHumidityRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeHumidityRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeHumidityRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityEmailInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CP8 Only: Minimum time between each emial (can be from 0 to 60 minutes)\"\"\",\n        }, # column\n        \"sensorProbeHumidity4to20mAUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit in DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorProbeHumidityIndexCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Humidity sensor online\"\"\",\n        }, # column\n        \"sensorProbeHumidityOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity Offset reading\"\"\",\n        }, # column\n        \"sensorProbeHumiditySirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeHumiditySirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeHumiditySirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeHumiditySirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeHumiditySirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeHumidityURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeHumidityOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeHumidityDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeHumidityCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeHumiditySendNormalMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeHumiditySendTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending trap when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeHumiditySendMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeIDCVVoltateRatio\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"iDCV calibrate voltate ratio\"\"\",\n        }, # column\n        \"sensorProbeIDCVErrorFlag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"iDCV error flag\"\"\",\n        }, # column\n        \"sensorProbeIDCVCalibrate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"iDCV calibrate\"\"\",\n        }, # column\n        \"sensorProbeAirFlowProtocolType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"analogType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"i2cType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Air flow protocol type\"\"\",\n        }, # column\n        \"sensorProbeAirFlowSensitivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air flow (AFS00) sensitivity\"\"\",\n        }, # column\n        \"sensorProbeAirFlowNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"presense\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"absense\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air flow (AFS00) normal state\"\"\",\n        }, # column\n        \"sensorProbeAirFlowCalibrate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.17.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Air flow (AFS00) normal state\"\"\",\n        }, # column\n        \"sensorProbeSwitchTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeSwitchEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeSwitchIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeSwitchEntry Table\"\"\",\n        }, # row\n        \"sensorProbeSwitchDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorProbeSwitchLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The physical location of this sensor Switch\"\"\",\n        }, # column\n        \"sensorProbeSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorProbeSwitchOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeSwitchGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeSwitchDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a switch to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeSwitchNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of an input switch. If an input switch is in this state it is normal, else it is critical. An open switch senses +5 volts. A closed switch senses 0 volts.\"\"\",\n        }, # column\n        \"sensorProbeSwitchOutputLevel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"An output swith can be set to this level\"\"\",\n        }, # column\n        \"sensorProbeSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourTo20mA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"humidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"atod\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"airflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"dryContact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"voltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"motion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeSwitchEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeSwitchEmailTrapSchedule\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: Email/trap limit schedule for this sensor\"\"\",\n        }, # column\n        \"sensorProbeSwitchEmailTrapInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Minimum time between each [email/trap:SP, only trap:CP8] (can be from 0 to 60 minutes)\"\"\",\n        }, # column\n        \"sensorProbeSwitchSendNormalTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email/trap when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeSwitchDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeSwitchDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeSwitchIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeSwitchEmailInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CP8 Only: Minimum time between each email (can be from 0 to 60 minutes)\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayOutputVoltStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"noVoltagePresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"voltagePresent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SP Only: The current voltage status of the relay\"\"\",\n        }, # column\n        \"sensorProbeSwitchManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeSwitchManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeSwitchIndexCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of Switch sensor online\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeSwitchAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeSwitchURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeSwitchOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeSwitchContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSwitchContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSwitchCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeSwitchRelayControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeSwitchSirenControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren Control Mode used for selecting the mode to control a siren.\"\"\",\n        }, # column\n        \"sensorProbeSwitchSendNormalMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor goes to normal\"\"\",\n        }, # column\n        \"sensorProbeSwitchSendTrap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending trap when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeSwitchSendMail\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable sending email when sensor change status\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeLeakLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Location of leakage of water rope sensor.\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length of water rope sensor.\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"meters\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"feet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit of water rope sensor.\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeImpedance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensing wire impedance per meter value times 100\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Raw value of location or length in ohms\"\"\",\n        }, # column\n        \"sensorProbeSwitchWaterRopeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.18.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fuel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water rope sensing cable type\"\"\",\n        }, # column\n        \"sensorProbeOtherSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19\",\n        }, # node\n        \"sensorProbeIRMSSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26\",\n        }, # node\n        \"sensorProbeIRMSSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of RMS current Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeIRMSSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every RMS current Sensor in the SensorArray. Each row in the table contains data for a different RMS current Sensor.\"\"\",\n        }, # table\n        \"sensorProbeIRMSSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeIRMSSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeIRMSSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeIRMSSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each IRMS sensor port.\"\"\",\n        }, # column\n        \"sensorProbeIRMSDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor IRMS\"\"\",\n        }, # column\n        \"sensorProbeIRMSPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative IRMS percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeIRMSStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeIRMSOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeIRMSGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeIRMSHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative IRMS this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeIRMSHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative IRMS this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeIRMSLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative IRMS this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeIRMSLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative IRMS this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeIRMSRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative IRMS to rearm the status. For example if status goes from normal to warning, the IRMS must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeIRMSRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorProbeIRMSEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeIRMSDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeIRMSDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeIRMSRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeIRMSRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeIRMSRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeIRMSRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSSirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeIRMSSirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeIRMSSirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeIRMSSirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeIRMSSirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeIRMSURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeIRMSOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeIRMSDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeIRMSCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.26.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeVRMSSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27\",\n        }, # node\n        \"sensorProbeVRMSSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of RMS voltage Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeVRMSSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every RMS voltage Sensor in the SensorArray. Each row in the table contains data for a different RMS voltage Sensor.\"\"\",\n        }, # table\n        \"sensorProbeVRMSSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeVRMSSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeVRMSSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeVRMSSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each VRMS sensor port.\"\"\",\n        }, # column\n        \"sensorProbeVRMSDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor VRMS\"\"\",\n        }, # column\n        \"sensorProbeVRMSPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative VRMS percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeVRMSStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeVRMSOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeVRMSGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeVRMSHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VRMS this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeVRMSHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VRMS this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeVRMSLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VRMS this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeVRMSLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VRMS this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeVRMSRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative VRMS to rearm the status. For example if status goes from normal to warning, the VRMS must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeVRMSRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorProbeVRMSEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeVRMSDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeVRMSDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeVRMSRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeVRMSRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeVRMSRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeVRMSRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSSirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeVRMSSirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeVRMSSirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeVRMSSirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeVRMSSirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeVRMSvoltageMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ac-110\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"110\"\n                    },\n                    \"ac-220\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"220\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"VRMS Voltage Mode.\"\"\",\n        }, # column\n        \"sensorProbeVRMSURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeVRMSOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeVRMSDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVRMSCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.27.2.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeEnergySensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28\",\n        }, # node\n        \"sensorProbeEnergySensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of Energy Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeEnergySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Energy Sensor in the SensorArray. Each row in the table contains data for a different Energy Sensor.\"\"\",\n        }, # table\n        \"sensorProbeEnergySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeEnergySensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeEnergySensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeEnergySensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each Energy sensor port.\"\"\",\n        }, # column\n        \"sensorProbeEnergyDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Energy\"\"\",\n        }, # column\n        \"sensorProbeEnergyPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative Energy percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeEnergyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeEnergyOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeEnergyGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeEnergyHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative Energy this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeEnergyHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative Energy this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeEnergyLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative Energy this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeEnergyLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative Energy this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeEnergyRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative Energy to rearm the status. For example if status goes from normal to warning, the Energy must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeEnergyRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorProbeEnergyEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeEnergyDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeEnergyDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeEnergyRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeEnergyRelayOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the relay will listen to. If this is set to 255, then the relay will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeEnergyRelayActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the relay\"\"\",\n        }, # column\n        \"sensorProbeEnergyRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeEnergySirenCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeEnergySirenOnPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor port that the siren will listen to. If this is set to 255, then the siren will not listen to any sensor ports\"\"\",\n        }, # column\n        \"sensorProbeEnergySirenActiveStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"anyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor status that will activate the siren\"\"\",\n        }, # column\n        \"sensorProbeEnergySirenAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the siren will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeEnergySirenDelayAlarm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren delay in seconds before start Alarm.\"\"\",\n        }, # column\n        \"sensorProbeEnergyReadingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"active\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"apparent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Energy Meter Reading Mode.\"\"\",\n        }, # column\n        \"sensorProbeEnergyURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeEnergyOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeEnergyDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeEnergyCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.28.2.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeRelayArraySensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29\",\n        }, # node\n        \"sensorProbeRelayArrayPort1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1\",\n        }, # node\n        \"sensorProbeRelayArrayPort1Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort1Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort1Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort1Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort1 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sersor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort1ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2\",\n        }, # node\n        \"sensorProbeRelayArrayPort2Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort2Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort2 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort2ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3\",\n        }, # node\n        \"sensorProbeRelayArrayPort3Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort3Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort3Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort3Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort3 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort3ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.3.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4\",\n        }, # node\n        \"sensorProbeRelayArrayPort4Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort4Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort4Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort4Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort4 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort4Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort4ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.4.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5\",\n        }, # node\n        \"sensorProbeRelayArrayPort5Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort5Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort5Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort5Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort5 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort5Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort5ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.5.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6\",\n        }, # node\n        \"sensorProbeRelayArrayPort6Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort6Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort6Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort6Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort6 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort6Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort6ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.6.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7\",\n        }, # node\n        \"sensorProbeRelayArrayPort7Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort7Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort7Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort7Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort7 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort7Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort7ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.7.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8\",\n        }, # node\n        \"sensorProbeRelayArrayPort8Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the RelayArray.\"\"\",\n        }, # scalar\n        \"sensorProbeRelayArrayPort8Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeRelayArrayPort8Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeRelayArrayPort8Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeRelayArrayPort8 Table\"\"\",\n        }, # row\n        \"sensorProbeRelayArrayPort8Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor RelayArray port.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor RelayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of RleayArray\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8RelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8RelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cycle\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"What the relay will do when the listened to port status turns to the specified active status.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8ManualRelayCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8ManualRelayAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8RelayDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay On\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8RelayDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of relay Off\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeRelayArrayPort8ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.29.8.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30\",\n        }, # node\n        \"sensorProbeVirtualAnalogSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VirtualAnalog Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeVirtualAnalogSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every VirtualAnalog Sensor in the SensorArray. Each row in the table contains data for a different VirtualAnalog Sensor.\"\"\",\n        }, # table\n        \"sensorProbeVirtualAnalogSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeVirtualAnalogSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeVirtualAnalogSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeVirtualAnalogSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each VirtualAnalog sensor port.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VirtualAnalog this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VirtualAnalog this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VirtualAnalog this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VirtualAnalog this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative VirtualAnalog to rearm the status. For example if status goes from normal to warning, the VirtualAnalog must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit in VirtualAnalog.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeVirtualAnalogValueFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.30.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"x1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"x0-1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"x0-01\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"x0-001\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To change the ratio of value.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31\",\n        }, # node\n        \"sensorProbeVirtualSwitchSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VirtualSwitch Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeVirtualSwitchSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every VirtualSwitch Sensor in the SensorArray. Each row in the table contains data for a different VirtualSwitch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeVirtualSwitchSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeVirtualSwitchSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeVirtualSwitchSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeVirtualSwitchSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"67\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each VirtualSwitch sensor port.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchDescriptionCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of status when the virsual switch is critical\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchDescriptionNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of status when the virsual switch is normal\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeVirtualSwitchNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.31.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of a return of the virsual switch. If a return of the virsual switch is equal this normal state value, it is normal. Otherwise, it is critical.\"\"\",\n        }, # column\n        \"sensorProbeWattHoursSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32\",\n        }, # node\n        \"sensorProbeWattHoursSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of WattHours Sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeWattHoursSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every WattHours Sensor in the SensorArray. Each row in the table contains data for a different WattHours Sensor.\"\"\",\n        }, # table\n        \"sensorProbeWattHoursSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeWattHoursSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeWattHoursSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeWattHoursSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each WattHours sensor port.\"\"\",\n        }, # column\n        \"sensorProbeWattHoursDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeWattHoursPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-32768\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative WattHours percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeWattHoursReset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.32.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The relative WattHours percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArraySensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort1Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort1Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort1Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort1Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort1 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort1Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort1EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.1.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort2Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort2Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort2 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort2Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort2EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.2.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort3Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort3Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort3Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort3Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort3 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort3Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort3EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.3.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort4Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort4Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort4Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort4Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort4 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort4Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort4Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort4EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.4.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort5Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort5Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort5Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort5Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort5 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort5Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort5Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort5EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.5.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort6Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort6Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort6Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort6Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort6 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort6Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort6Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort6EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.6.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort7Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort7Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort7Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort7Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort7 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort7Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort7Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort7EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.7.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8\",\n        }, # node\n        \"sensorProbeTemperatureArrayPort8Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the TemperatureArray.\"\"\",\n        }, # scalar\n        \"sensorProbeTemperatureArrayPort8Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Switch Sensor in the SensorArray. Each row in the table contains data for a different Switch Sensor.\"\"\",\n        }, # table\n        \"sensorProbeTemperatureArrayPort8Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeTemperatureArrayPort8Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeTemperatureArrayPort8 Table\"\"\",\n        }, # row\n        \"sensorProbeTemperatureArrayPort8Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor TemperatureArray port.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor TemperatureArray\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8HighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8HighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8LowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8LowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Rearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8DegreeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fahr\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"celsius\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The degrees are in fahrenheit(0) or in celsius(1)\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8DegreeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Offset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Offset reading\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8DatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8ContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeTemperatureArrayPort8Calendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor thermostat port.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor thermostat\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8Value\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8Mode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"time-bases\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select the thermostat mode for working on time-bases(1) or normal(0).\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8RelayControlPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a relay port to be controled by this thermostat sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8NormalAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8HighLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8HighLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8LowLimit1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8LowLimitAction1\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile1: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8NormalAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat normal action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8HighLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat high limit, it will take a high limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8HighLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat high limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8LowLimit2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-40\",\n                        \"max\" : \"167\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: When this sersor higher than thermostat low limit, it will take a normal limit action.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8LowLimitAction2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"no-change\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Profile2: Thermostat low limit action for controlling a relay sensor.\"\"\",\n        }, # column\n        \"sensorProbeThermostatTemperatureArrayPort8EnableTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.33.8.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time to enable on Thermostat\"\"\",\n        }, # column\n        \"sensorProbeNoCameraSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34\",\n        }, # node\n        \"sensorProbeNoCameraSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of no camera sensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeNoCameraSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every no camera Sensor. Each row in the table contains data for a different NoCamera Sensor.\"\"\",\n        }, # table\n        \"sensorProbeNoCameraSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeNoCameraSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeNoCameraSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeNoCameraSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each no camera sensor port.\"\"\",\n        }, # column\n        \"sensorProbeNoCameraDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeNoCameraStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor.\"\"\",\n        }, # column\n        \"sensorProbeNoCameraOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeNoCameraGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeNoCameraContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeNoCameraContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeNoCameraCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.34.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35\",\n        }, # node\n        \"sensorProbeSoftMotionSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SoftMotionSensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeSoftMotionSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every SoftMotion Sensor. Each row in the table contains data for a different SoftMotion Sensor.\"\"\",\n        }, # table\n        \"sensorProbeSoftMotionSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeSoftMotionSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeSoftMotionSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeSoftMotionSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each soft motion sensor port.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionPercentSensitivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent of sensitivity uses for setting the sentisitivity of motion detector.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeSoftMotionMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.35.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"33554431\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"33554431\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Mask of enable or disable of SoftMotion.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36\",\n        }, # node\n        \"sensorProbeSoundDetectorSensorNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of SoundDetectorSensor port.\"\"\",\n        }, # scalar\n        \"sensorProbeSoundDetectorSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every SoundDetectorSensor Sensor. Each row in the table contains data for a different SoundDetectorSensor Sensor.\"\"\",\n        }, # table\n        \"sensorProbeSoundDetectorSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeSoundDetectorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeSoundDetectorSensorEntry Table\"\"\",\n        }, # row\n        \"sensorProbeSoundDetectorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"0\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sound detector sensor port.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this  sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down Rearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorRecordingSource\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"internal-mic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"line-in\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To select a recording source being in internal microphone(0) or in line-in(1).\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorMicBoost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable a microphone boost(+20 db).\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorMicSensitivity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"i0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"i20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"i40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"40\"\n                    },\n                    \"i60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"60\"\n                    },\n                    \"i80\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"80\"\n                    },\n                    \"i100\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensitivity of microphone to detect sound.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorPulseLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for detecting before changing status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorDatacollectType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"average\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"highest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"lowest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Type of datacollect to collect.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeSoundDetectorCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.36.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArraySensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort1\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort1Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort1Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort1Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort1Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort1 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort1Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact output toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sersor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort1ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort2Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort2Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort2Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort2Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort2 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort2Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort2ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort3Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort3Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort3Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort3Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort3 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort3Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort3ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.3.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort4Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort4Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort4Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort4Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort4 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort4Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort4ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.4.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort5Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort5Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort5Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort5Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort5 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort5Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort5ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.5.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort6Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort6Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort6Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort6Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort6 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort6Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort6ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.6.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort7Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort7Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort7Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort7Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort7 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort7Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort7ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.7.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8\",\n        }, # node\n        \"sensorProbeDrycontactArrayPort8Number\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of port on the DrycontactArray.\"\"\",\n        }, # scalar\n        \"sensorProbeDrycontactArrayPort8Table\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every Drycontact Sensor in the SensorArray. Each row in the table contains data for a different Drycontact Sensor.\"\"\",\n        }, # table\n        \"sensorProbeDrycontactArrayPort8Entry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeDrycontactArrayPort8Index\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeDrycontactArrayPort8 Table\"\"\",\n        }, # row\n        \"sensorProbeDrycontactArrayPort8Index\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each sensor DrycontactArray port.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8Description\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8Status\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8Online\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8NormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of DrycontactArray\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8Direction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a drycontact to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8ContTimeCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8ContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8ManualOutputCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Drycontact toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8ManualOutputAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allow-sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"turn-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"turn-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the Drycontact output manualy\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8OutputDescOn\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output On\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8OutputDescOff\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of Drycontact output Off\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8URL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8OpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"sensorProbeDrycontactArrayPort8ControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.19.37.8.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"notification-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a Drycontact output.\"\"\",\n        }, # column\n        \"sensorProbeDebug\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP only: Turn on or off debug messages\"\"\",\n        }, # scalar\n        \"sensorProbeTrapResend\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If traps for Warning or Error should be resent. Traps for Normal status are sent once\"\"\",\n        }, # scalar\n        \"sensorProbeTrapResendInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How often to resend mail or Traps. Enter the number of seconds from 15 to 65535. Mail for WARNING and ERROR are resent at this interval. Traps for Normal status are sent once\"\"\",\n        }, # scalar\n        \"sensorProbeSendTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn on or off the sending of traps\"\"\",\n        }, # scalar\n        \"sensorProbeTrapDestination\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the trap destination\"\"\",\n        }, # scalar\n        \"sensorProbeTrapCommunity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The community string of the trap destination\"\"\",\n        }, # scalar\n        \"sensorProbeDefaultGateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If the destination is on another network, enter the IP address of the router\"\"\",\n        }, # scalar\n        \"sensorProbeSubnetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If the trap destination uses the default gateway\"\"\",\n        }, # scalar\n        \"sensorProbeRouteAdd\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP only: Up to 4, Manual additions to the routing table in the form, Network IP Address, Netmask, Gateway IP address\"\"\",\n        }, # scalar\n        \"sensorProbeSendMail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Turn on or off the sending of Mail\"\"\",\n        }, # scalar\n        \"sensorProbeMailRecpt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The email address of the Recipient\"\"\",\n        }, # scalar\n        \"sensorProbeMailFrom\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The email address of the Sender\"\"\",\n        }, # scalar\n        \"sensorProbeMailSMTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Address of the SMTP server\"\"\",\n        }, # scalar\n        \"sensorProbeMailJpgInline\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"inline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"link\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If the jpg for this event is sent as an http link or is included with mail as an attachment\"\"\",\n        }, # scalar\n        \"sensorProbeMailResendInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How often to resend mail or Traps. Enter the number of seconds from 10 to 60. Mail for WARNING and ERROR are resent at this interval. Mail for Normal status are sent once\"\"\",\n        }, # scalar\n        \"sensorProbeMailMaxResend\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum number of times to resend mail. If set to 0 only send once. The maximum value is 5\"\"\",\n        }, # scalar\n        \"sensorProbeMailLastStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of the most recent attempt to send an email\"\"\",\n        }, # scalar\n        \"sensorProbeSupportMailRcpt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP8L only: E-Mail address of support\"\"\",\n        }, # scalar\n        \"sensorProbeCameraServerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"CP8 Only: This table contains the Camera Server features, This allows the sensorProbe to connect to a sensorProbe\"\"\",\n        }, # table\n        \"sensorProbeCameraServerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorProbeCameraServerIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorProbeCameraServerEntry Table\"\"\",\n        }, # row\n        \"sensorProbeCameraServerClientOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Client is currently online\"\"\",\n        }, # column\n        \"sensorProbeCameraServerClientGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put this Client online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorProbeCameraServerClientIP\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of the sensorProbe, used to send snmp keep alive messages\"\"\",\n        }, # column\n        \"sensorProbeCameraServerClientSetPassword\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: The Set Password for the snmp keep alive messages sent to the sensorProbes\"\"\",\n        }, # column\n        \"sensorProbeCameraServerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Camera table\"\"\",\n        }, # column\n        \"sensorProbeJavaTimeOut\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Timeout in minutes for Java client\"\"\",\n        }, # column\n        \"sensorProbeJpegQualityFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"95\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"95\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Quality factor of jpeg image\"\"\",\n        }, # column\n        \"sensorProbeCameraDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A description of camera\"\"\",\n        }, # column\n        \"sensorProbeCameraRotate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"nonRotate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"rotate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Rotate of this camera\"\"\",\n        }, # column\n        \"sensorProbeCameraResolution\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"resolution320x240\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"resolution640x480\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Resolution of camera\"\"\",\n        }, # column\n        \"sensorProbePTZRotateRelative\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control PTZ by put Direction and step 'DIR STEP' when direction 0 or 1 is LEFT or RIGH and 2 or 3 is UP or DOWN \"\"\",\n        }, # column\n        \"sensorProbePTZRotateAbsolute\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control PTZ by put position of x and y 'POS_X POS_Y' value of position is 0 to 100\"\"\",\n        }, # column\n        \"sensorProbeAudioAttachChannel\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notAttachAudio\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"attachAudio\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Disable/Enable audio attachment\"\"\",\n        }, # column\n        \"sensorProbePTZEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enableInternal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableExternal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Disable/Enable Ptz controller\"\"\",\n        }, # column\n        \"sensorProbePTZBrand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"generalBrand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"akcpBrand\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"PTZ Brand\"\"\",\n        }, # column\n        \"sensorProbePTZPanTiltUntilEnd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.42.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stop\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"right\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"left\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"right-up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"right-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"left-up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"left-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Pan or Tilt PTZ until endpoint\"\"\",\n        }, # column\n        \"sensorProbeTrapMailPollInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: How often the sensor thresholds are tested before sending traps or mail. This can vary from 3 to 15 seconds\"\"\",\n        }, # scalar\n        \"sensorProbeSendTestMail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Send out an email test message\"\"\",\n        }, # scalar\n        \"sensorProbeLastSystemError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A text string containing the description of the last system error\"\"\",\n        }, # scalar\n        \"sensorProbeDataCollectionPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minutes between collections of the data logger. This can vary from 1 to 60 minutes\"\"\",\n        }, # scalar\n        \"sensorProbeMailTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of seconds to wait for a timeout while sending email This can vary from 10 to 30 seconds\"\"\",\n        }, # scalar\n        \"sensorProbeAutoSense\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable Auto-sense feature\"\"\",\n        }, # scalar\n        \"sensorProbeChecksum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SP Only: The Flash Checksum, computed dynamically whenever this object is read\"\"\",\n        }, # scalar\n        \"sensorProbeUsePassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"usePassword\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"doNotUsePassword\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Determines whether or not the set and get community are used to check for access rights\"\"\",\n        }, # scalar\n        \"sensorProbeDisplayLogo\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or Disable the display of the logo\"\"\",\n        }, # scalar\n        \"sensorProbeTrapType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"specificTypeTrap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"generalTypeTrap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bothTypeTraps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"statusTypeTraps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Whether to generate a trap that covers all sensors, a specific trap for each sensor, or both types of traps\"\"\",\n        }, # scalar\n        \"sensorProbeMailCC\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The email address of the CC\"\"\",\n        }, # scalar\n        \"sensorProbeAllowIPChange\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This disables the changing of the IP address. The default is to enable changing the IP address\"\"\",\n        }, # scalar\n        \"sensorProbeTimeOfDay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.65\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time of day in the format day/month/year hour(1-24):minutes:seconds for example 23/10/02 12:45:06\"\"\",\n        }, # scalar\n        \"sensorProbeEnableSysLog\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enableLogToFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enableLogToNetAndFlash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This enables sysLog Messages,including logging to the Net. The Destination IP of the net messages is the same as the source IP of the sender of this command\"\"\",\n        }, # scalar\n        \"sensorProbeReadSysLog\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"lastMessage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"allMessages\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Return the sysLog Message in the snmp PDU and if enableLogToNetAndFlash in sensorProbeEnableSysLog, also send in debug message format, A Write of a 2 will return all of the messages in debug format\"\"\",\n        }, # scalar\n        \"sensorProbeClearSysLog\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.68\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"allMessages\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Delete all entries in the sys log\"\"\",\n        }, # scalar\n        \"sensorProbeSyslogDestIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.69\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP Address of the Syslog server. Note: This must be in dotted decimal form\"\"\",\n        }, # scalar\n        \"sensorProbeSyslogPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Port Number of the Syslog server.\"\"\",\n        }, # scalar\n        \"sensorProbeSetSyslogMsgPrefix\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: The Prefix message of the Syslog message\"\"\",\n        }, # scalar\n        \"sensorProbeTimeZone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"System time zone\"\"\",\n        }, # scalar\n        \"sensorProbeMegaVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Version number of mega board\"\"\",\n        }, # scalar\n        \"sensorProbeNtpMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.84\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notUse\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"oneTime\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"onSystemStartUp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"onceAMounth\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"onceAWeek\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"onceADay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"onceAnHour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"continuous\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Mode to synchronous with ntp server\"\"\",\n        }, # scalar\n        \"sensorProbeNtpServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.85\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"NTP server which this machine synchronous with\"\"\",\n        }, # scalar\n        \"sensorProbeSMTPAuth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.87\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This enables the SMTP authentication\"\"\",\n        }, # scalar\n        \"sensorProbeSMTPLogin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.88\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The username used to login into SMTP server\"\"\",\n        }, # scalar\n        \"sensorProbeSMTPPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.89\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The password used to login into SMTP server\"\"\",\n        }, # scalar\n        \"sensorProbeDNSServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.90\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address of the DNS server\"\"\",\n        }, # scalar\n        \"sensorProbeAltWebPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.91\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The alternative for a port number 80 used to access the web interface\"\"\",\n        }, # scalar\n        \"sensorProbeNumberOfSensorPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.92\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of sensor ports(regardless of their current state)\"\"\",\n        }, # scalar\n        \"sensorProbeSendTrapsAlive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.93\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"On or off send keep alive traps.\"\"\",\n        }, # scalar\n        \"sensorProbeTrapReIntervalAlive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.94\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time between each keep alive trap.\"\"\",\n        }, # scalar\n        \"sensorProbeUseCamera\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"On or off camera.\"\"\",\n        }, # scalar\n        \"sensorProbeAdcCalibratePort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Calibrate value for analog sensor.\"\"\",\n        }, # scalar\n        \"sensorProbeMailSubject\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Email Subject.\"\"\",\n        }, # scalar\n        \"sensorProbeSnmpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: Port number used to access snmp\"\"\",\n        }, # scalar\n        \"sensorProbeSnmpTrapPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP Only: Port number used to access trap snmp\"\"\",\n        }, # scalar\n        \"sensorProbeSnmpIndexingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"index0\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"index1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"CP8 Only: Snmp table index starting from 0 or 1 \"\"\",\n        }, # scalar\n        \"sensorProbeNotifyBoot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP2 Only: Enable Notify on boot up\"\"\",\n        }, # scalar\n        \"sensorProbeDelayNotifyBoot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP2 Only: Delay time for boot up notify\"\"\",\n        }, # scalar\n        \"sensorProbeSmtpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SMTP Port number used to send email\"\"\",\n        }, # scalar\n        \"sensorProbeReboot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Reboot SP2/SP8 set to 1\"\"\",\n        }, # scalar\n        \"sensorProbeServerEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable database changed notify feature\"\"\",\n        }, # scalar\n        \"sensorProbeFirmwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current firmware version\"\"\",\n        }, # scalar\n        \"sensorProbeProductType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.109\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sensorProbe2\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sensorProbe8\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cameraProbe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"securityProbe\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"securityProbe5E\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"securityProbe5ES\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"securityProbe5ESV\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"securityProbeDCU\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"sensorProbePlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Product type\"\"\",\n        }, # scalar\n        \"sensorProbeRequestResendTrap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.110\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP only: Send immediately all traps by set to 1\"\"\",\n        }, # scalar\n        \"sensorProbeSeparateEmail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.112\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notSeparate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"separate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP only: Separate Email by set 1 for not Separate Email set 0\"\"\",\n        }, # scalar\n        \"sensorProbeMailCustom\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.113\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SP only: Custom mail is removed 'http://' in the mail footer\"\"\",\n        }, # scalar\n        \"sensorProbeUntidePassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.114\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"tidePassword\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"untidePassword\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Use web password as SNMP password\"\"\",\n        }, # scalar\n        \"sensorProbeReloadNetwork\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.116\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"reload\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set 1 for reload network seting\"\"\",\n        }, # scalar\n        \"sensorProbeStatusNumber\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.117\",\n        }, # node\n        \"sensorProbeStatusNumberNotNormal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.117.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of sensor status is Warning, Critical and Sensor Error\"\"\",\n        }, # scalar\n        \"sensorProbeStatusNumberCriticalAndError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.117.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of sensor status is Critical and Sensor Error\"\"\",\n        }, # scalar\n        \"sensorProbeStatusNumberError\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.117.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of sensor status is Sensor Error\"\"\",\n        }, # scalar\n        \"sensorProbeTypeName\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118\",\n        }, # node\n        \"sensorProbeTypeTemperatureName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSHT11HumidityName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSHT11TempName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeType4to20MAName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeDCvoltageName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeAirflowName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeDrycontactInoutName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeDrycontactInputName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeMotionName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeWaterName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSecurityName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSirenName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeRelayName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeACvoltageName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeADE7763VRMSName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeADE7763IRMSName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeADE7763WattName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeADE7763WatthourName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypePCF8574XRelayName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeThermocoupleName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSmokeName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeXDryName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeTemperatureArrayName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeWaterRopeName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeFuelLevelName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeTankSenderName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeThermostatName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.128\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeVirtualName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.129\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSoundName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.130\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSoftMotionName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.131\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeNoSignalName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.132\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypePowerMeterName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.134\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeSHT11Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.135\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeTypeADE7763Name\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.118.136\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of Sensor Type Name on web interface\"\"\",\n        }, # scalar\n        \"sensorProbeProductRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.119\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"SP only: Revision number\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125\",\n        }, # node\n        \"sensorProbePowerMeter1phDelayBetweenCommand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A delay time between command for 1ph power meter(in milliseconds)\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeter3phDelayBetweenCommand\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A delay time between command for 3ph power meter(in milliseconds)\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeter1phDelayBetweenMeter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A delay time of command between power meter(in milliseconds)\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeter3phDelayBetweenMeter\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A delay time of command between power meter(in milliseconds)\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeterWaitTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A waiting timeout for receiving a command(in milliseconds)\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeterCountSentPacket\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count send packets of this sensorProbe\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeterCountRecievedPacket\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count received packets of this sensorProbe\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeterCountTimeoutPacket\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count timeout packets of this sensorProbe\"\"\",\n        }, # scalar\n        \"sensorProbePowerMeterCountCRCErrorPacket\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.2.2.1.125.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count error crc packets of this sensorProbe\"\"\",\n        }, # scalar\n        \"sensorProbeTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7\",\n        }, # node\n        \"spSensorStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"turnOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"turnOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current integer status of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current integer value of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorLevelExceeded\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer level that was exceeded causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer index of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The description of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorProbeKeepAlive\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Keep alive trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fourTo20mA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"humidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"atod\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"airflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"dryContact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"voltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"motion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"extradrycontact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"thermostat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"smoke\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"power\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"25\"\n                    },\n                    \"irms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"26\"\n                    },\n                    \"vrms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"27\"\n                    },\n                    \"watt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"28\"\n                    },\n                    \"relayarray\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"29\"\n                    },\n                    \"virtual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"30\"\n                    },\n                    \"watthour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"32\"\n                    },\n                    \"temperaturearray\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"33\"\n                    },\n                    \"waterrope\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"34\"\n                    },\n                    \"fuellevel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"35\"\n                    },\n                    \"tanksender\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"36\"\n                    },\n                    \"sound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"softwaremotion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"129\"\n                    },\n                    \"nosignal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"powermeter\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"134\"\n                    },\n                    \"door\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"138\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Type of this sensor\"\"\",\n        }, # scalar\n        \"spSensorStatusName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorSubIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer sub index of the sensor causing this trap to be sent. Only for temperaturearray and relayarray\"\"\",\n        }, # scalar\n        \"spBoardIndex\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The integer index of the sensor board causing this trap to be sent.\"\"\",\n        }, # scalar\n        \"spBoardDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The description of the sensor board causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spEventTimeStamp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time(MM/DD/YYYY HH:MM:SS) of an event causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spEventClassNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined class number associated with this trap\"\"\",\n        }, # scalar\n        \"spEventClassName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The user-defined class Name associated with this trap\"\"\",\n        }, # scalar\n        \"spSensorDecimalValue\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current decimal value of the sensor causing this trap to be sent\"\"\",\n        }, # scalar\n        \"spSensorAliveHigh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The highest sensor value in the period\"\"\",\n        }, # scalar\n        \"spSensorAliveLow\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.7.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The  lowset sensor value in the period\"\"\",\n        }, # scalar\n        \"securityProbe\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2\",\n        }, # node\n        \"secSummary\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.1\",\n        }, # node\n        \"secDevice\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2\",\n        }, # node\n        \"deviceTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every plugged-in device.\"\"\",\n        }, # table\n        \"deviceEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the deviceEntry Table\"\"\",\n        }, # row\n        \"deviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"184549375\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"184549375\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the device table\"\"\",\n        }, # column\n        \"deviceDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this device\"\"\",\n        }, # column\n        \"deviceType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A information of this device\"\"\",\n        }, # column\n        \"deviceStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceWorstSensotStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceIntelligentTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every plugged-in device.\"\"\",\n        }, # table\n        \"deviceIntelligentEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceIntelligentIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the deviceEntry Table\"\"\",\n        }, # row\n        \"deviceIntelligentIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the deviceIntelligent table\"\"\",\n        }, # column\n        \"deviceIntelligentDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this device\"\"\",\n        }, # column\n        \"deviceIntelligentInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A information of this device\"\"\",\n        }, # column\n        \"deviceIntelligentStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentTypeSelected\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceIntelligentWorstSensotStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorIntelligentPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.2.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceDryContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every plugged-in device.\"\"\",\n        }, # table\n        \"deviceDryContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceDryContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the deviceEntry Table\"\"\",\n        }, # row\n        \"deviceDryContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the deviceDryContact table\"\"\",\n        }, # column\n        \"deviceDryContactDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this device\"\"\",\n        }, # column\n        \"deviceDryContactInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A information of this device\"\"\",\n        }, # column\n        \"deviceDryContactStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceDryContactWorstSensotStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort1GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort2GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort3GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort4GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort5GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort6GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort7GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort8GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort9GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort10GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.109\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort11GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.110\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort12GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.111\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort13GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.112\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort14GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.113\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort15GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.114\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"sensorDryContactPort16GoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.3.1.115\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceAccessTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every plugged-in device.\"\"\",\n        }, # table\n        \"deviceAccessEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceAccessIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the deviceEntry Table\"\"\",\n        }, # row\n        \"deviceAccessIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the deviceAccess table\"\"\",\n        }, # column\n        \"deviceAccessDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this device\"\"\",\n        }, # column\n        \"deviceAccessInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A information of this device\"\"\",\n        }, # column\n        \"deviceAccessStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"deviceAccessWorstSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"devicePowerMeterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every power meter plugged-in.\"\"\",\n        }, # table\n        \"devicePowerMeterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"devicePowerMeterIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the devicePowerMeterEntry Table\"\"\",\n        }, # row\n        \"devicePowerMeterIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"184549375\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"184549375\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the power meter table\"\"\",\n        }, # column\n        \"devicePowerMeterDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this power meter\"\"\",\n        }, # column\n        \"devicePowerMeterInfo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A information of this power meter\"\"\",\n        }, # column\n        \"devicePowerMeterStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A status of this power meter\"\"\",\n        }, # column\n        \"devicePowerMeterWorstSensotStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"...\"\"\",\n        }, # column\n        \"devicePowerMeterType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A type of this power meter\"\"\",\n        }, # column\n        \"devicePowerMeterDelayBetweenCommand\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A delay time between communication packet of this power meter(in milliseconds)\"\"\",\n        }, # column\n        \"devicePowerMeterCountSentPacket\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count send packets of this sensor\"\"\",\n        }, # column\n        \"devicePowerMeterCountRecievedPacket\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count received packets of this sensor\"\"\",\n        }, # column\n        \"devicePowerMeterCountTimeoutPacket\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count timeout packets of this sensor\"\"\",\n        }, # column\n        \"devicePowerMeterCountCRCerrorPacket\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count error crc packets of this sensor\"\"\",\n        }, # column\n        \"deviceLicense\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6\",\n        }, # node\n        \"deviceLicenseExpTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Expansion License Total\"\"\",\n        }, # scalar\n        \"deviceLicenseExpUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Expansion License Used\"\"\",\n        }, # scalar\n        \"deviceLicenseExpAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Expansion License Available\"\"\",\n        }, # scalar\n        \"deviceLicensePmsTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PMS License Total\"\"\",\n        }, # scalar\n        \"deviceLicensePmsUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PMS License Used\"\"\",\n        }, # scalar\n        \"deviceLicensePmsAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PMS License Available\"\"\",\n        }, # scalar\n        \"deviceLicenseVrtTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Virtual License Total\"\"\",\n        }, # scalar\n        \"deviceLicenseVrtUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Virtual License Used\"\"\",\n        }, # scalar\n        \"deviceLicenseVrtAvailable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Virtual License Available\"\"\",\n        }, # scalar\n        \"deviceLicenseIPv6Enable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv6 License Enable (0 : Disable, 1 : Enable)\"\"\",\n        }, # scalar\n        \"deviceLicenseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the license of Expansion board, PMS and Virtual sensor.\"\"\",\n        }, # table\n        \"deviceLicenseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"deviceLicenseIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the deviceLicenseEntry Table\"\"\",\n        }, # row\n        \"deviceLicenseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the device table (License Key)\"\"\",\n        }, # column\n        \"deviceLicenseExpCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Expansion Connection\"\"\",\n        }, # column\n        \"deviceLicensePmsCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"PMS Unit number\"\"\",\n        }, # column\n        \"deviceLicenseVrtCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Virtual Sensor\"\"\",\n        }, # column\n        \"deviceLicenseIpv6\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"IPv6 license enable (0 : Disable, 1 : Enable)\"\"\",\n        }, # column\n        \"deviceLicenseStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.2.6.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"activated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"deactivated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"License status\"\"\",\n        }, # column\n        \"secSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3\",\n        }, # node\n        \"sensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTable Table\"\"\",\n        }, # row\n        \"sensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"humidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"temperature-dual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"four-20mA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dcvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"airflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"io\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"motion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"acvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"vrms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"irms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"watt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"watthour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"smoke\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"temperature-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"thermostat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"virtual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"129\"\n                    },\n                    \"sound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"130\"\n                    },\n                    \"softmotion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"131\"\n                    },\n                    \"camera-dummy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"board-state\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"133\"\n                    },\n                    \"nosignal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"224\"\n                    },\n                    \"test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"sensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor\"\"\",\n        }, # column\n        \"sensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"sensorHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorOnDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"sensorOffDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"sensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"sensorOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"sensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor acknowledge\"\"\",\n        }, # column\n        \"sensorValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE Standard 754 reading value in this sensor\"\"\",\n        }, # column\n        \"sensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.1.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorTemperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every Temperature sensor.\"\"\",\n        }, # table\n        \"sensorTemperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorTemperatureIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorTemperatureIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorTemperatureDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualsensor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"arraytemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorTemperatureDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorTemperatureStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorTemperatureGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorTemperatureLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTemperatureLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTemperatureHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTemperatureHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTemperatureRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorTemperatureDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorTemperatureDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorTemperatureDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorTemperatureOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Offset reading\"\"\",\n        }, # column\n        \"sensorTemperaturePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorTemperatureSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorTemperatureDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorTemperatureDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"sensorTemperatureHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature sensor acknowledge\"\"\",\n        }, # column\n        \"sensorTemperatureSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Serial Number of Temperature Sensor in the following format\nx is Hex Digit xx-xx-xx-xx-xx-xx-xx-xx\"\"\",\n        }, # column\n        \"sensorTemperatureId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.2.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorHumidityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorHumidityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorHumidityIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorHumidityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorHumidityDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity percentage measured by this sensor\"\"\",\n        }, # column\n        \"sensorHumidityUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorHumidityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorHumidityGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorHumidityLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorHumidityLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorHumidityHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorHumidityHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorHumidityRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorHumidityDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorHumidityDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorHumidityDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorHumidityDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorHumidityDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorHumidityDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorHumidityRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorHumidityOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity Offset reading\"\"\",\n        }, # column\n        \"sensorHumidityPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorHumiditySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorHumidityDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorHumidityDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity display style\"\"\",\n        }, # column\n        \"sensorHumidityHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumiditySensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumiditySensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorHumidityAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity sensor acknowledge\"\"\",\n        }, # column\n        \"sensorHumidityId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.3.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorDryContactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorDryContactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorDryContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorDryContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorDryContactDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorDryContactType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"drycontact-inout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact-input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorDryContactStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"outputLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"outputHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorDryContactGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorDryContactDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a switch to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"sensorDryContactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of an input switch. If an input switch is in this state it is normal, else it is critical. An open switch senses +5 volts. A closed switch senses 0 volts.\"\"\",\n        }, # column\n        \"sensorDryContactControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a sensor output.\"\"\",\n        }, # column\n        \"sensorDryContactOutputManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorDryContactOutputManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-Low-High-Low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-High-Low-High\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the sensor output manualy\"\"\",\n        }, # column\n        \"sensorDryContactPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorDryContactSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorDryContactDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorDryContactCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"sensorDryContactAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dry Contact sensor acknowledge\"\"\",\n        }, # column\n        \"sensorDryContactId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.4.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensor4to20mATable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensor4to20mAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensor4to20mAIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensor4to20mAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensor4to20mADescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mAValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensor4to20mAUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensor4to20mAStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensor4to20mAGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensor4to20mALowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensor4to20mALowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensor4to20mAHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensor4to20mAHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensor4to20mARearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensor4to20mADelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensor4to20mADelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensor4to20mADelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensor4to20mADelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensor4to20mADelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensor4to20mADelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensor4to20mARaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensor4to20mAOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA Offset reading\"\"\",\n        }, # column\n        \"sensor4to20mAAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"sensor4to20mAAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"sensor4to20mAPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensor4to20mASubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensor4to20mADeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensor4to20mAMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The max range for use in conversion.\"\"\",\n        }, # column\n        \"sensor4to20mABaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base range for use in conversion.\"\"\",\n        }, # column\n        \"sensor4to20mADisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA display style\"\"\",\n        }, # column\n        \"sensor4to20mAHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mALowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mANormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mALowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mAHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mASensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mAHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mALowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mANormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mALowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mAHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mASensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensor4to20mASensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA sensor acknowledge\"\"\",\n        }, # column\n        \"sensor4to20mAId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.5.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorDCvoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorDCvoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorDCvoltageIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorDCvoltageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorDCvoltageDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorDCvoltageStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorDCvoltageLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorDCvoltageLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorDCvoltageHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorDCvoltageHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorDCvoltageRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorDCvoltageDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorDCvoltageRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorDCvoltageOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DC voltage Offset reading\"\"\",\n        }, # column\n        \"sensorDCvoltageJumper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"jumperAt-60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-600\"\n                    },\n                    \"jumperAt-40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-400\"\n                    },\n                    \"jumperAt-30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-300\"\n                    },\n                    \"jumperAt-20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-200\"\n                    },\n                    \"jumperAt-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-100\"\n                    },\n                    \"jumperAt10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"jumperAt20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"jumperAt30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"300\"\n                    },\n                    \"jumperAt40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"400\"\n                    },\n                    \"jumperAt60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selected voltage scale (jumper 0) in DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorDCvoltageAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorDCvoltageAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"sensorDCvoltagePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorDCvoltageSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorDCvoltageDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The max voltage range for use in conversion.\"\"\",\n        }, # column\n        \"sensorDCvoltageBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base voltage range for use in conversion.\"\"\",\n        }, # column\n        \"sensorDCvoltageDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DCVoltage display style\"\"\",\n        }, # column\n        \"sensorDCvoltageHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorDCvoltageAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DCvoltage sensor acknowledge\"\"\",\n        }, # column\n        \"sensorDCvoltageId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.6.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorAirflowTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorAirflowEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorAirflowIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorAirflowIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorAirflowDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorAirflowValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorAirflowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorAirflowGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorAirflowLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorAirflowLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorAirflowHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorAirflowHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorAirflowRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorAirflowDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorAirflowDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorAirflowDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorAirflowDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorAirflowDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorAirflowDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorAirflowRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"sensorAirflowPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorAirflowSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorAirflowDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorAirflowDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Airflow display style\"\"\",\n        }, # column\n        \"sensorAirflowHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorAirflowAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Airflow sensor acknowledge\"\"\",\n        }, # column\n        \"sensorAirflowId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.7.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorMotionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorMotionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorMotionIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorMotionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorMotionDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorMotionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorMotionGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorMotionPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorMotionSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorMotionDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorMotionCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorMotionNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorMotionCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorMotionNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorMotionAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Motion sensor acknowledge\"\"\",\n        }, # column\n        \"sensorMotionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.8.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorWaterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorWaterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorWaterIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorWaterIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorWaterDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorWaterStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorWaterGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorWaterPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorWaterSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorWaterDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorWaterCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorWaterNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorWaterAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water sensor acknowledge\"\"\",\n        }, # column\n        \"sensorWaterId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.9.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorSecurityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorSecurityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorSecurityIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorSecurityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorSecurityDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorSecurityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorSecurityGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorSecurityPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorSecuritySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorSecurityDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorSecurityCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorSecurityNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorSecurityCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorSecurityNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorSecurityAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Security sensor acknowledge\"\"\",\n        }, # column\n        \"sensorSecurityId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.10.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorSirenTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorSirenEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorSirenIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorSirenIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorSirenDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorSirenStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorSirenGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorSirenControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a siren.\"\"\",\n        }, # column\n        \"sensorSirenManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorSirenManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the siren manualy\"\"\",\n        }, # column\n        \"sensorSirenPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorSirenSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorSirenDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorSirenOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"sensorSirenOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"sensorSirenOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"sensorSirenOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"sensorSirenAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren sensor acknowledge\"\"\",\n        }, # column\n        \"sensorSirenId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.11.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorRelayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorRelayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorRelayIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorRelayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorRelayDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorRelayType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorRelayStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorRelayGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorRelayControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"sensorRelayManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sensorRelayManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"sensorRelayPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorRelaySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorRelayDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorRelayOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"sensorRelayOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"sensorRelayOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"sensorRelayOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"sensorRelayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay sensor acknowledge\"\"\",\n        }, # column\n        \"sensorRelayId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.12.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorACvoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorACvoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorACvoltageIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorACvoltageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorACvoltageDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorACvoltageStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorACvoltageGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"sensorACvoltagePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorACvoltageSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorACvoltageDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorACvoltageCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorACvoltageNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorACvoltageCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorACvoltageNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorACvoltageAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ACvoltage sensor acknowledge\"\"\",\n        }, # column\n        \"sensorACvoltageId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.13.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorSmokeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorSmokeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorSmokeIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorSmokeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorSmokeDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorSmokeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorSmokeGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorSmokePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorSmokeSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorSmokeDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorSmokeCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorSmokeNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorSmokeCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorSmokeNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorSmokeAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Smoke sensor acknowledge\"\"\",\n        }, # column\n        \"sensorSmokeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.14.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorThermostatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorThermostatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorThermostatIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sensorThermostatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorThermostatDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"sensorThermostatStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorThermostatGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorThermostatLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorThermostatLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorThermostatHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorThermostatHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorThermostatRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorThermostatDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorThermostatDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorThermostatDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorThermostatDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorThermostatDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorThermostatDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorThermostatPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorThermostatSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorThermostatDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorThermostatDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Thermostat display style\"\"\",\n        }, # column\n        \"sensorThermostatHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorThermostatAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Thermostat sensor acknowledge\"\"\",\n        }, # column\n        \"sensorThermostatId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.20.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorWaterRopeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorWaterRopeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorWaterRopeIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the SensorWaterRopeEntry Table\"\"\",\n        }, # row\n        \"sensorWaterRopeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorWaterRopeDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeLeakLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Location of leakage of water rope sensor.\"\"\",\n        }, # column\n        \"sensorWaterRopeUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit of water rope sensor.\"\"\",\n        }, # column\n        \"sensorWaterRopeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorWaterRopeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Raw value of location or length in ohms\"\"\",\n        }, # column\n        \"sensorWaterRopeDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorWaterRopeAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water Rope sensor acknowledge\"\"\",\n        }, # column\n        \"sensorWaterRopeLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length of water rope sensor.\"\"\",\n        }, # column\n        \"sensorWaterRopeImpedance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensing wire impedance per meter value times 100\"\"\",\n        }, # column\n        \"sensorWaterRopeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fuel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water rope sensing cable type\"\"\",\n        }, # column\n        \"sensorWaterRopeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.21.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorPowerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorPowerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorPowerIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorPowerEntry Table\"\"\",\n        }, # row\n        \"sensorPowerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the Switch sensor table\"\"\",\n        }, # column\n        \"sensorPowerDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sensorPowerValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorPowerUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorPowerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sensorPowerGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorPowerLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorPowerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorPowerHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorPowerHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorPowerRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorPowerDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorPowerDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorPowerDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorPowerDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorPowerDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorPowerDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorPowerPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorPowerSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorPowerDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorPowerTimeOut\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The polling timeout of Power Sensor.\"\"\",\n        }, # column\n        \"sensorPowerInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"720\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"720\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The polling interval of Power Sensor.\"\"\",\n        }, # column\n        \"sensorPowerErrorRetryNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Number of retry before error.\"\"\",\n        }, # column\n        \"sensorPowerMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of Power value.\"\"\",\n        }, # column\n        \"sensorPowerMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum scale of Power value.\"\"\",\n        }, # column\n        \"sensorPowerDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Power display style.\"\"\",\n        }, # column\n        \"sensorPowerHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorPowerHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorPowerValueFormatString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string-based reading value in this sensor\"\"\",\n        }, # column\n        \"sensorPowerValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE Standard 754 reading value in this sensor\"\"\",\n        }, # column\n        \"sensorPowerAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Power sensor acknowledge\"\"\",\n        }, # column\n        \"sensorPowerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.22.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorFuelTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorFuelEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorFuelIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the SensorFuelEntry Table\"\"\",\n        }, # row\n        \"sensorFuelIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorFuelDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorFuelUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorFuelStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorFuelGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorFuelLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorFuelLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorFuelHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorFuelHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorFuelRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorFuelDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorFuelDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorFuelDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorFuelDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorFuelDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorFuelDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorFuelRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage.\"\"\",\n        }, # column\n        \"sensorFuelAmountMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of value conversion.\"\"\",\n        }, # column\n        \"sensorFuelAmountBaseValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of value conversion.\"\"\",\n        }, # column\n        \"sensorFuelDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorFuelDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fuel display style\"\"\",\n        }, # column\n        \"sensorFuelHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorFuelHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorFuelAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fuel sensor acknowledge\"\"\",\n        }, # column\n        \"sensorFuelId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.24.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorTankSenderTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorTankSenderEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorTankSenderIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTankSenderEntry Table\"\"\",\n        }, # row\n        \"sensorTankSenderIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorTankSenderDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorTankSenderStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorTankSenderGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorTankSenderLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTankSenderLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTankSenderHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTankSenderHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTankSenderRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorTankSenderDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorTankSenderDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorTankSenderDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTankSenderDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTankSenderDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTankSenderDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTankSenderRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage.\"\"\",\n        }, # column\n        \"sensorTankSenderDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorTankSenderDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TankSender display style\"\"\",\n        }, # column\n        \"sensorTankSenderHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorTankSenderAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tank Sender sensor acknowledge\"\"\",\n        }, # column\n        \"sensorTankSenderId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.26.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorDoorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sensorDoorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorDoorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorDoorEntry Table\"\"\",\n        }, # row\n        \"sensorDoorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorDoorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorDoorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"sensorDoorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"heldOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"forceOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorDoorUnlockPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door unlock period\"\"\",\n        }, # column\n        \"sensorDoorOpenPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door open period\"\"\",\n        }, # column\n        \"sensorDoorCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door command\"\"\",\n        }, # column\n        \"sensorDoorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door sensor acknowledge\"\"\",\n        }, # column\n        \"sensorDoorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.27.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sensorTemperatureArrayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every Temperature sensor.\"\"\",\n        }, # table\n        \"sensorTemperatureArrayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sensorTemperatureArrayIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureArrayEntry Table\"\"\",\n        }, # row\n        \"sensorTemperatureArrayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the sensor table\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"arraytemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"sensorTemperatureArrayStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"sensorTemperatureArrayRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"sensorTemperatureArrayRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"sensorTemperatureArrayOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Offset reading\"\"\",\n        }, # column\n        \"sensorTemperatureArrayPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sensorTemperatureArraySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArraySensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArraySensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"sensorTemperatureArrayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature sensor acknowledge\"\"\",\n        }, # column\n        \"sensorTemperatureArraySerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Serial Number of Temperature Sensor\nx is Hex Digit xx-xx-xx-xx-xx-xx-xx-xx\"\"\",\n        }, # column\n        \"sensorTemperatureArrayId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.3.28.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"secNotification\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4\",\n        }, # node\n        \"action\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1\",\n        }, # node\n        \"actionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property for every action of notification.\"\"\",\n        }, # table\n        \"actionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"actionIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the actionTable Table\"\"\",\n        }, # row\n        \"actionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The index into the action table.\"\"\",\n        }, # column\n        \"actionType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"trap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"email\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"mms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"speech\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"dial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"ftp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"event\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"fax\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"soundlog\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"camera\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"mobile\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"shut\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"windows\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"skype\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"drycontact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"ctrSensorAction\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of this action.\"\"\",\n        }, # column\n        \"actionName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A name of this action.\"\"\",\n        }, # column\n        \"actionMaxResend\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum number of times to resend action. If set to 0 only send once. The maximum value is 5.\"\"\",\n        }, # column\n        \"actionResendInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How often to resend action. Enter the number of seconds from 15 to 65535.\"\"\",\n        }, # column\n        \"actionTest\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.4.1.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Do test an action of notification.\"\"\",\n        }, # column\n        \"sensorByPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5\",\n        }, # node\n        \"commonSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every Sensor.\"\"\",\n        }, # table\n        \"commonSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"commonSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the commonSensorTable\"\"\",\n        }, # row\n        \"commonSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"commonSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"humidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"temperature-dual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"four-20mA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dcvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"airflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"io\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"motion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"acvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"vrms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"irms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"watt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"watthour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"smoke\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"temperature-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"thermostat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"virtual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"129\"\n                    },\n                    \"sound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"130\"\n                    },\n                    \"softmotion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"131\"\n                    },\n                    \"camera-dummy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"board-state\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"133\"\n                    },\n                    \"nosignal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"224\"\n                    },\n                    \"test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"commonSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in this sensor\"\"\",\n        }, # column\n        \"commonSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"commonSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor\"\"\",\n        }, # column\n        \"commonSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"commonSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"commonSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"commonSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"commonSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"commonSensorHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorSensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorOnDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorOffDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"commonSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"commonSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor acknowledge\"\"\",\n        }, # column\n        \"commonSensorValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE Standard 754 reading value in this sensor\"\"\",\n        }, # column\n        \"commonSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.1.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every Temperature sensor.\"\"\",\n        }, # table\n        \"temperatureSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"temperatureSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the temperatureSensorEntry Table\"\"\",\n        }, # row\n        \"temperatureSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualsensor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"temperatureSensorDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"temperatureSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"temperatureSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"temperatureSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"temperatureSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"temperatureSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"temperatureSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"temperatureSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"temperatureSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"temperatureSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"temperatureSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"temperatureSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"temperatureSensorOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Offset reading\"\"\",\n        }, # column\n        \"temperatureSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"temperatureSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"temperatureSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"temperatureSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"temperatureSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"temperatureSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature sensor acknowledge\"\"\",\n        }, # column\n        \"temperatureSensorSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Serial Number of Temperature Sensor\nx is Hex Digit xx-xx-xx-xx-xx-xx-xx-xx\"\"\",\n        }, # column\n        \"temperatureSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.2.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"humiditySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"humiditySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"humiditySensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the cmpTemperatureEntry Table\"\"\",\n        }, # row\n        \"humiditySensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"humiditySensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity percentage measured by this sensor\"\"\",\n        }, # column\n        \"humiditySensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"humiditySensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"humiditySensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"humiditySensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"humiditySensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"humiditySensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"humiditySensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"humiditySensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"humiditySensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"humiditySensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"humiditySensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"humiditySensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"humiditySensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"humiditySensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"humiditySensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"humiditySensorOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity Offset reading\"\"\",\n        }, # column\n        \"humiditySensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"humiditySensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"humiditySensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"humiditySensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity display style\"\"\",\n        }, # column\n        \"humiditySensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"humiditySensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"humiditySensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Humidity sensor acknowledge\"\"\",\n        }, # column\n        \"humiditySensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.3.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dryContactSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"dryContactSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dryContactSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"dryContactSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dryContactSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"dryContactSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"drycontact-inout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact-input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"dryContactSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"outputLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"outputHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"dryContactSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"dryContactSensorDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To set a switch to input enter 0. To set a switch to output enter 1\"\"\",\n        }, # column\n        \"dryContactSensorNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of an input switch. If an input switch is in this state it is normal, else it is critical. An open switch senses +5 volts. A closed switch senses 0 volts.\"\"\",\n        }, # column\n        \"dryContactSensorControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a sensor output.\"\"\",\n        }, # column\n        \"dryContactSensorOutputManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"dryContactSensorOutputManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-Low-High-Low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-High-Low-High\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the sensor output manualy\"\"\",\n        }, # column\n        \"dryContactSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"dryContactSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"dryContactSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"dryContactSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"dryContactSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Dry Contact sensor acknowledge\"\"\",\n        }, # column\n        \"dryContactSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.4.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"current4to20mASensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"current4to20mASensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"current4to20mASensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"current4to20mASensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"current4to20mASensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"current4to20mASensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"current4to20mASensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"current4to20mASensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"current4to20mASensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"current4to20mASensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"current4to20mASensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"current4to20mASensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"current4to20mASensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"current4to20mASensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"current4to20mASensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"current4to20mASensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"current4to20mASensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"current4to20mASensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"current4to20mASensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"current4to20mASensorOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA Offset reading\"\"\",\n        }, # column\n        \"current4to20mASensorAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"current4to20mASensorAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"current4to20mASensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"current4to20mASensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"current4to20mASensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"current4to20mASensorMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The max range for use in conversion.\"\"\",\n        }, # column\n        \"current4to20mASensorBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base range for use in conversion.\"\"\",\n        }, # column\n        \"current4to20mASensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA display style\"\"\",\n        }, # column\n        \"current4to20mASensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"current4to20mASensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"4to20mA sensor acknowledge\"\"\",\n        }, # column\n        \"current4to20mASensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.5.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dcVoltageSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"dcVoltageSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcVoltageSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"dcVoltageSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dcVoltageSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"dcVoltageSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"dcVoltageSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"dcVoltageSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"dcVoltageSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"dcVoltageSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"dcVoltageSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"dcVoltageSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"dcVoltageSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"dcVoltageSensorOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DC voltage Offset reading\"\"\",\n        }, # column\n        \"dcVoltageSensorJumper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"jumperAt-60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-600\"\n                    },\n                    \"jumperAt-40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-400\"\n                    },\n                    \"jumperAt-30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-300\"\n                    },\n                    \"jumperAt-20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-200\"\n                    },\n                    \"jumperAt-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-100\"\n                    },\n                    \"jumperAt10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"jumperAt20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"jumperAt30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"300\"\n                    },\n                    \"jumperAt40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"400\"\n                    },\n                    \"jumperAt60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selected voltage scale (jumper 0) in DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltageSensorAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltageSensorAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltageSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"dcVoltageSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"dcVoltageSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The max voltage range for use in conversion.\"\"\",\n        }, # column\n        \"dcVoltageSensorBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base voltage range for use in conversion.\"\"\",\n        }, # column\n        \"dcVoltageSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DCVoltage display style\"\"\",\n        }, # column\n        \"dcVoltageSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"dcVoltageSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DCvoltage sensor acknowledge\"\"\",\n        }, # column\n        \"dcVoltageSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.6.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"airflowSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"airflowSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airflowSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"airflowSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"airflowSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"airflowSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"airflowSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"airflowSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"airflowSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"airflowSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"airflowSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"airflowSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"airflowSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"airflowSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"airflowSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"airflowSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"airflowSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"airflowSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"airflowSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"airflowSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"airflowSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"airflowSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"airflowSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"airflowSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Airflow display style\"\"\",\n        }, # column\n        \"airflowSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"airflowSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"airflowSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Airflow sensor acknowledge\"\"\",\n        }, # column\n        \"airflowSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.7.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"motionSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"motionSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"motionSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"motionSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"motionSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"motionSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"motionSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"motionSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"motionSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"motionSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"motionSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"motionSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"motionSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"motionSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"motionSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Motion sensor acknowledge\"\"\",\n        }, # column\n        \"motionSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.8.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"waterSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"waterSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"waterSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"waterSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"waterSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"waterSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"waterSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"waterSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"waterSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"waterSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"waterSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"waterSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water sensor acknowledge\"\"\",\n        }, # column\n        \"waterSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.9.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"securitySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"securitySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"securitySensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"securitySensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"securitySensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"securitySensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"securitySensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"securitySensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"securitySensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"securitySensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"securitySensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"securitySensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"securitySensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"securitySensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"securitySensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Security sensor acknowledge\"\"\",\n        }, # column\n        \"securitySensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.10.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sirenSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"sirenSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sirenSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"sirenSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sirenSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"sirenSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"sirenSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"sirenSensorControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a siren.\"\"\",\n        }, # column\n        \"sirenSensorManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"sirenSensorManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the siren manualy\"\"\",\n        }, # column\n        \"sirenSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"sirenSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"sirenSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"sirenSensorOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"sirenSensorOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"sirenSensorOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"sirenSensorOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"sirenSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Siren sensor acknowledge\"\"\",\n        }, # column\n        \"sirenSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.11.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"relaySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"relaySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"relaySensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"relaySensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"relaySensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"relaySensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"relaySensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"relaySensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"relaySensorControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control Mode used for selecting the mode to control a relay.\"\"\",\n        }, # column\n        \"relaySensorManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Toggle period in seconds for Manual Cycle action.\"\"\",\n        }, # column\n        \"relaySensorManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Control the relay manualy\"\"\",\n        }, # column\n        \"relaySensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"relaySensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"relaySensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"relaySensorOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Description of this sensor\"\"\",\n        }, # column\n        \"relaySensorOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Description of this sensor\"\"\",\n        }, # column\n        \"relaySensorOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A On Color of this sensor\"\"\",\n        }, # column\n        \"relaySensorOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Off Color of this sensor\"\"\",\n        }, # column\n        \"relaySensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Relay sensor acknowledge\"\"\",\n        }, # column\n        \"relaySensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.12.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"acVoltageSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"acVoltageSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"acVoltageSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"acVoltageSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"acVoltageSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"acVoltageSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"acVoltageSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"acVoltageSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"acVoltageSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"acVoltageSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"acVoltageSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"acVoltageSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"acVoltageSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"acVoltageSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"acVoltageSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"ACvoltage sensor acknowledge\"\"\",\n        }, # column\n        \"acVoltageSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.13.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"smokeSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"smokeSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"smokeSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"smokeSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"smokeSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"smokeSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"smokeSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"smokeSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"smokeSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"smokeSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"smokeSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"smokeSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"smokeSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"smokeSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"smokeSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Smoke sensor acknowledge\"\"\",\n        }, # column\n        \"smokeSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.14.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"thermostatSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"thermostatSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"thermostatSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the sensorTemperatureEntry Table\"\"\",\n        }, # row\n        \"thermostatSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"thermostatSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"thermostatSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"thermostatSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"thermostatSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"thermostatSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"thermostatSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"thermostatSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"thermostatSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"thermostatSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"thermostatSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"thermostatSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"thermostatSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"thermostatSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"thermostatSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"thermostatSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"thermostatSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"thermostatSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"thermostatSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Thermostat display style\"\"\",\n        }, # column\n        \"thermostatSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"thermostatSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Thermostat sensor acknowledge\"\"\",\n        }, # column\n        \"thermostatSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.20.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterRopeSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"waterRopeSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterRopeSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the waterRopeSensorEntry Table\"\"\",\n        }, # row\n        \"waterRopeSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterRopeSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorLeakLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Location of leakage of water rope sensor.\"\"\",\n        }, # column\n        \"waterRopeSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit of water rope sensor.\"\"\",\n        }, # column\n        \"waterRopeSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"waterRopeSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"waterRopeSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Raw value of location or length in ohms\"\"\",\n        }, # column\n        \"waterRopeSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"waterRopeSensorCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"waterRopeSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water Rope sensor acknowledge\"\"\",\n        }, # column\n        \"waterRopeSensorLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length of water rope sensor.\"\"\",\n        }, # column\n        \"waterRopeSensorImpedance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensing wire impedance per meter value times 100\"\"\",\n        }, # column\n        \"waterRopeSensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fuel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Water rope sensing cable type\"\"\",\n        }, # column\n        \"waterRopeSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.21.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"powerSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"powerSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the powerSensorEntry Table\"\"\",\n        }, # row\n        \"powerSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"powerSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"powerSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"powerSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"powerSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"powerSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"powerSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"powerSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"powerSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"powerSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"powerSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"powerSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"powerSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"powerSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"powerSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"powerSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"powerSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"powerSensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"powerSensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"powerSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"powerSensorTimeOut\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The polling timeout of Power Sensor.\"\"\",\n        }, # column\n        \"powerSensorInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"720\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"720\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The polling interval of Power Sensor.\"\"\",\n        }, # column\n        \"powerSensorErrorRetryNum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.40\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Number of retry before error.\"\"\",\n        }, # column\n        \"powerSensorMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of Power value.\"\"\",\n        }, # column\n        \"powerSensorMinValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The minimum scale of Power value.\"\"\",\n        }, # column\n        \"powerSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Power display style.\"\"\",\n        }, # column\n        \"powerSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"powerSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"powerSensorValueFormatString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string-based reading value in this sensor\"\"\",\n        }, # column\n        \"powerSensorValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE Standard 754 reading value in this sensor\"\"\",\n        }, # column\n        \"powerSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Power sensor acknowledge\"\"\",\n        }, # column\n        \"powerSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.22.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"fuelSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"fuelSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"fuelSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the fuelSensorEntry Table\"\"\",\n        }, # row\n        \"fuelSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"fuelSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"fuelSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"fuelSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"fuelSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"fuelSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"fuelSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"fuelSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"fuelSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"fuelSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"fuelSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"fuelSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"fuelSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"fuelSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"fuelSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"fuelSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"fuelSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage.\"\"\",\n        }, # column\n        \"fuelSensorAmountMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of value conversion.\"\"\",\n        }, # column\n        \"fuelSensorAmountBaseValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of value conversion.\"\"\",\n        }, # column\n        \"fuelSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"fuelSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fuel display style\"\"\",\n        }, # column\n        \"fuelSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"fuelSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"fuelSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Fuel sensor acknowledge\"\"\",\n        }, # column\n        \"fuelSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.24.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"tankSenderSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"tankSenderSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tankSenderSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the tankSenderSensorEntry Table\"\"\",\n        }, # row\n        \"tankSenderSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"tankSenderSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"tankSenderSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"tankSenderSensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"tankSenderSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"tankSenderSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"tankSenderSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"tankSenderSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Level value of this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"tankSenderSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"tankSenderSensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"tankSenderSensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"tankSenderSensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"tankSenderSensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"tankSenderSensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"tankSenderSensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"tankSenderSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage.\"\"\",\n        }, # column\n        \"tankSenderSensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"tankSenderSensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"TankSender display style\"\"\",\n        }, # column\n        \"tankSenderSensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"tankSenderSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Tank Sender sensor acknowledge\"\"\",\n        }, # column\n        \"tankSenderSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.26.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"doorSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"doorSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"doorSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the doorSensorEntry Table\"\"\",\n        }, # row\n        \"doorSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"doorSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"doorSensorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"doorSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"heldOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"forceOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"doorSensorUnlockPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door unlock period\"\"\",\n        }, # column\n        \"doorSensorOpenPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door open period\"\"\",\n        }, # column\n        \"doorSensorCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door command\"\"\",\n        }, # column\n        \"doorSensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Door sensor acknowledge\"\"\",\n        }, # column\n        \"doorSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.27.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureArraySensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every Temperature sensor.\"\"\",\n        }, # table\n        \"temperatureArraySensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"temperatureArraySensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the temperatureArraySensorEntry Table\"\"\",\n        }, # row\n        \"temperatureArraySensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureArraySensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dualsensor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enter the type of this Sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The degrees in this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unit string\"\"\",\n        }, # column\n        \"temperatureArraySensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"temperatureArraySensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"temperatureArraySensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How cold this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"temperatureArraySensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a warning\"\"\",\n        }, # column\n        \"temperatureArraySensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How hot this sensor gets before it sends a critical event\"\"\",\n        }, # column\n        \"temperatureArraySensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of degrees to rearm the status. For example if status goes from normal to warning, the temp must go down spTempRearm degrees below warning before the status goes to normal\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor has been in error status before report as an error\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds after the sensor change from error to normal before report as normal\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureArraySensorDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"temperatureArraySensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The raw degree data from the temperature sensor, slightly higher resolution\"\"\",\n        }, # column\n        \"temperatureArraySensorOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature Offset reading\"\"\",\n        }, # column\n        \"temperatureArraySensorPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"temperatureArraySensorSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"temperatureArraySensorDeviceIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device Index of sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature display style\"\"\",\n        }, # column\n        \"temperatureArraySensorHighCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorLowCriticalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorNormalDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorLowWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorHighWarningDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorSensorErrorDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Description of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighCritical Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowCritical Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A LowWarning Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A HighWarning Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A SensorError Color of this sensor\"\"\",\n        }, # column\n        \"temperatureArraySensorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Temperature sensor acknowledge\"\"\",\n        }, # column\n        \"temperatureArraySensorSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Serial Number of Temperature Sensor\nx is Hex Digit xx-xx-xx-xx-xx-xx-xx-xx\"\"\",\n        }, # column\n        \"temperatureArraySensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.28.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"virtualSensor\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129\",\n        }, # node\n        \"virtualAnalogSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every VirtualAnalog Sensor in the SensorArray. Each row in the table contains data for a different VirtualAnalog Sensor.\"\"\",\n        }, # table\n        \"virtualAnalogSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"virtualAnalogSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the virtualAnalogSensorEntry Table\"\"\",\n        }, # row\n        \"virtualAnalogSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"virtualAnalogSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"virtualAnalogSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"virtualAnalogSensorOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"virtualAnalogSensorGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"virtualAnalogSensorHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VirtualAnalog this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"virtualAnalogSensorHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How high the relative VirtualAnalog this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"virtualAnalogSensorLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VirtualAnalog this sensor measures before it sends a warning\"\"\",\n        }, # column\n        \"virtualAnalogSensorLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How low the relative VirtualAnalog this sensor measures before it becomes critical\"\"\",\n        }, # column\n        \"virtualAnalogSensorRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The percent relative VirtualAnalog to rearm the status. For example if status goes from normal to warning, the VirtualAnalog must go down spAnalogueRearm below warning before the status goes to normal\"\"\",\n        }, # column\n        \"virtualAnalogSensorRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The unformatted, raw, A/D value in this sensor. Contains more resolution than the formated percentage. This number can go from 0 to 1023 depending on the input voltage\"\"\",\n        }, # column\n        \"virtualAnalogSensorEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"virtualAnalogSensorUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Display unit in VirtualAnalog.\"\"\",\n        }, # column\n        \"virtualAnalogSensorAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"virtualAnalogSensorURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"virtualAnalogSensorOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Warning before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Warning before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Low Critical before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorContTimeSensorError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Sensor Error before accepting new Status.\"\"\",\n        }, # column\n        \"virtualAnalogSensorCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"virtualAnalogSensorValueFactor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"x1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"x0-1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"x0-01\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"x0-001\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1000\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To change the ratio of value.\"\"\",\n        }, # column\n        \"virtualAnalogSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.2.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"virtualSwitchSensorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the data for every VirtualSwitch Sensor in the SensorArray. Each row in the table contains data for a different VirtualSwitch Sensor.\"\"\",\n        }, # table\n        \"virtualSwitchSensorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"virtualSwitchSensorIndex\",\n            ],\n            \"description\" :\n                \"\"\"This is an entry in the virtualSwitchSensorEntry Table\"\"\",\n        }, # row\n        \"virtualSwitchSensorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"virtualSwitchSensorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor\"\"\",\n        }, # column\n        \"virtualSwitchSensorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor\"\"\",\n        }, # column\n        \"virtualSwitchSensorOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"offline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this Sensor is currently online\"\"\",\n        }, # column\n        \"virtualSwitchSensorGoOnline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"goOnline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To put online enter a 1, to take offline enter a 2\"\"\",\n        }, # column\n        \"virtualSwitchSensorEmailTrapLimit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable email/trap limit feature\"\"\",\n        }, # column\n        \"virtualSwitchSensorContTimeHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in High Critical before accepting new Status.\"\"\",\n        }, # column\n        \"virtualSwitchSensorContTimeNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Continuous time for this sensor to be in Normal before accepting new Status.\"\"\",\n        }, # column\n        \"virtualSwitchSensorDescriptionCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of status when the virsual switch is critical\"\"\",\n        }, # column\n        \"virtualSwitchSensorDescriptionNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Description of status when the virsual switch is normal\"\"\",\n        }, # column\n        \"virtualSwitchSensorAcknowledgement\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Acknowledged sensor error and stop notification\"\"\",\n        }, # column\n        \"virtualSwitchSensorURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensor URL link.\"\"\",\n        }, # column\n        \"virtualSwitchSensorOpenURL\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"cur-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"new-window\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Open URL in this browser or open in a new window.\"\"\",\n        }, # column\n        \"virtualSwitchSensorCalendar\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable or disable the calendar filtering working hours of sensor.\"\"\",\n        }, # column\n        \"virtualSwitchSensorNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of a return of the virsual switch. If a return of the virsual switch is equal this normal state value, it is normal. Otherwise, it is critical.\"\"\",\n        }, # column\n        \"virtualSwitchSensorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.2.5.129.4.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"plusSeries\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3\",\n        }, # node\n        \"summary\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.1\",\n        }, # node\n        \"device\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2\",\n        }, # node\n        \"config\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1\",\n        }, # node\n        \"cfgServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The DCIM's IP Address that device is connected to.\"\"\",\n        }, # scalar\n        \"cfgServerPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The DCIM's Port that device is connected to. Default is 5000.\"\"\",\n        }, # scalar\n        \"cfgDevicePassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The local Administrator account's password for accessing the Web UI, Telnet and SSH services of the device. Default is 'public'.\"\"\",\n        }, # scalar\n        \"cfgSystemDescription\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The system's description of the device.\"\"\",\n        }, # scalar\n        \"cfgSystemName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The system name for the device.\"\"\",\n        }, # scalar\n        \"cfgSystemLocation\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The system location for the device.\"\"\",\n        }, # scalar\n        \"cfgSystemContact\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The administrator contact for the system.\"\"\",\n        }, # scalar\n        \"cfgIPAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device's Ethernet IP Address.\"\"\",\n        }, # scalar\n        \"cfgSubnetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device's Ethernet Subnet Mask.\"\"\",\n        }, # scalar\n        \"cfgDefaultGateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device's Ethernet Default Gateway.\"\"\",\n        }, # scalar\n        \"cfgDefaultDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The device's Ethernet Default Domain Name System (DNS) for name resolution.\"\"\",\n        }, # scalar\n        \"cfgDeviceUseDHCP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable Ethernet Dynamic Host Configuration Protocol (DHCP) on the device; it will automatically provide IP Address for the device.\"\"\",\n        }, # scalar\n        \"cfgNTPMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"do-not-use\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"one-time\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on-system-start-up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"once-a-month\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"once-a-week\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"once-a-day\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"once-a-hour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"continuously\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Network Time Protocol (NTP) Mode; this will define how often the device synchronizes time with the NTP Server.\"\"\",\n        }, # scalar\n        \"cfgNTPServer1\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The first server that the device will synchronize time with, when NTP is enabled.\"\"\",\n        }, # scalar\n        \"cfgNTPServer2\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The second server that the device will synchronize time with, when NTP is enabled.\"\"\",\n        }, # scalar\n        \"cfgTimeZone\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Time Zone of the device.\"\"\",\n        }, # scalar\n        \"cfgGSMConnectionMethod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"never-dial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"dial-if-eth-failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"dial-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The GSM Modem's Connection method. It will be defined when the device will be connecting via GSM's Modem.\"\"\",\n        }, # scalar\n        \"cfgGSMConnectionType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The GSM Modem's Connection type. It will be defined when the GSM Modem is always being used to connect, or depends on the Connection Method Setting.\"\"\",\n        }, # scalar\n        \"cfgGSMInitString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The GSM Modem's Initialization String, a list of AT commands that will be sent when a connection to the modem is being established.\"\"\",\n        }, # scalar\n        \"cfgGSMConnectionMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The GSM Modem's Connection Mode, it defines which GSM protocol will be used to transfer data.\"\"\",\n        }, # scalar\n        \"cfgGSMAPN\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Access Point Name (APN), the name of a gateway between a GSM, GPRS, 3G or 4G mobile network and another computer network, frequently the public Internet.\"\"\",\n        }, # scalar\n        \"cfgGSMRetry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of attempts that the GSM modem will use to redial if previous attempts have failed.\"\"\",\n        }, # scalar\n        \"cfgGSMIdleTimeout\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Time in seconds for the GSM modem to be idle before hanging up automatically.\"\"\",\n        }, # scalar\n        \"cfgGSMLogin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GSM modem Point-to-Point Protocol (PPP)'s Login Name.\"\"\",\n        }, # scalar\n        \"cfgGSMPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"GSM Modem Point-to-Point Protocol (PPP)'s Password.\"\"\",\n        }, # scalar\n        \"cfgGSMDNS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address for the Domain Name System (DNS) for GSM Modem Connection.\"\"\",\n        }, # scalar\n        \"cfgWEBPasswordEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable password checking for the Web UI.\"\"\",\n        }, # scalar\n        \"cfgWEBPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Web interface port (default value is 80).\"\"\",\n        }, # scalar\n        \"cfgWEBSecurePort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Secured Web interface port (default value is 443).\"\"\",\n        }, # scalar\n        \"cfgWEBSecureEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"useByDefault\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable Secured Web interface.\"\"\",\n        }, # scalar\n        \"cfgWEBEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.41\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable Web interface.\"\"\",\n        }, # scalar\n        \"cfgSNMPReadCommunity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.42\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SNMP read community, the community password for use with SNMP to read variables. Default is 'public'.\"\"\",\n        }, # scalar\n        \"cfgSNMPWriteCommunity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"SNMP write community, the community password for use with SNMP to write variables. Default is 'public'.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3Mode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"authNoPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"authPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noAuthNoPriv\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Security Level for SNMPv3 to be used during communication.\"\"\",\n        }, # scalar\n        \"cfgEMailEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the usage of the E-Mail feature on the device.\"\"\",\n        }, # scalar\n        \"cfgSMTPServer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name or IP address of the SMTP server, to be used for sending an E-Mail.\"\"\",\n        }, # scalar\n        \"cfgSMTPPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port number for the SMTP connection. Default is 25.\"\"\",\n        }, # scalar\n        \"cfgSMTPAuth\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-required\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"required\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the SMTP authentication for the E-Mail service on the device.\"\"\",\n        }, # scalar\n        \"cfgSMTPLogin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user name for the SMTP server login.\"\"\",\n        }, # scalar\n        \"cfgSMTPPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user's password for the SMTP server login.\"\"\",\n        }, # scalar\n        \"cfgEMailResendInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n        }, # scalar\n        \"cfgEMailMaxResend\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n        }, # scalar\n        \"cfgKeepAliveTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.78\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The DCIM's keep-alive time in seconds.\"\"\",\n        }, # scalar\n        \"cfgHostID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.79\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Server host ID\"\"\",\n        }, # scalar\n        \"cfgHostUID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.80\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Server host update ID\"\"\",\n        }, # scalar\n        \"cfgHostSensorUID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.81\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Server host update ID for updating sensor and board properties\"\"\",\n        }, # scalar\n        \"cfgVPNServerPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.83\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VPN connection's port number on the DCIM. Default is 1194.\"\"\",\n        }, # scalar\n        \"cfgVPNServerDNSName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.84\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Domain Name System (DNS) name of the DCIM for the VPN connection.\"\"\",\n        }, # scalar\n        \"cfgRSysLogServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.85\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"IP address for the Remote SysLog server.\"\"\",\n        }, # scalar\n        \"cfgRSysLogServerPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.86\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port number for the Remote SysLog server.\"\"\",\n        }, # scalar\n        \"cfgSMTPSSL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.87\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no-encryption\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"ssl-tls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"starttls\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SMTP security level's protocol that will be used upon connection to an SMTP Server.\"\"\",\n        }, # scalar\n        \"cfgVPNCipherType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.90\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"blowfish\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"aes128\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"des-ede3\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VPN cipher protocol that will be used to communicate with the DCIM over the network.\"\"\",\n        }, # scalar\n        \"cfgVPNPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.91\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The VPN Password for connecting to the DCIM's VPN server.\"\"\",\n        }, # scalar\n        \"cfgVPNEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.92\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the VPN feature on the device. If enabled, the device will try to connect to the DCIM VPN server if the configuration is correct.\"\"\",\n        }, # scalar\n        \"cfgSNMPPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.93\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port used for SNMP communication.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3EngineId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.94\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Engine ID that will be used for connection with SNMPv3.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3UserName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.95\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user name for connecting with SNMPv3 to this device.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3AuthProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.96\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"md5\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sha1\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Authentication protocol that will be used with SNMPv3 connection (MD5 / SHA).\"\"\",\n        }, # scalar\n        \"cfgSNMPv3AuthPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.97\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Opaque\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SNMPv3 authentication password.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3PrivProtocol\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.98\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"des\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"aes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SNMPv3 privacy protocol that will be used with SNMPv3 connection (DES / AES).\"\"\",\n        }, # scalar\n        \"cfgSNMPv3PrivPassword\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Opaque\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SNMPv3 privacy password.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3AccessPrivelege\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"read-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"read-write\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The access privilege of SNMPv3 (read only / read-write).\"\"\",\n        }, # scalar\n        \"cfgSNMPv1Disable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Disable SNMPv1 and SNMPv2c from being used.\"\"\",\n        }, # scalar\n        \"cfgSNMPv3Disable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.102\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Disable SNMPv3 from being used.\"\"\",\n        }, # scalar\n        \"cfgGraphDataCollectionPeriod\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.104\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The graph data collection period in seconds. The more seconds you define, the more graph data can be stored.\"\"\",\n        }, # scalar\n        \"cfgServiceTelnet\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.105\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the Telnet service on the device.\"\"\",\n        }, # scalar\n        \"cfgEnableNotiFilteringOnBoot\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.106\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable notifications filtering when the device is booting up. If enabled (set to nonzero) will trigger notification on device boot (initial sensor state change events). If disabled (set to zero) will filter notifications on software boot on initial sensor status change events. This is useful to avoid false notifications on initial sensor status change events.\"\"\",\n        }, # scalar\n        \"cfgSystemURL\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.107\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Custom URL what users can use in Email and SMS notifications to expand macro $[SYSURL]. It can point to a page on the device, or to any external URL.\"\"\",\n        }, # scalar\n        \"cfgServerIntegrationEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.108\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable/disable the DCIM Integration.\"\"\",\n        }, # scalar\n        \"cfgServerIntegrationPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.109\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Port for DCIM Integration.\"\"\",\n        }, # scalar\n        \"cfgSMTPEMailFrom\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.110\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default E-mail address that will show in an E-mail's 'From' field and which will be used to send mail to support.\"\"\",\n        }, # scalar\n        \"cfgSupportEMail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.111\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The E-mail address of the device's support department.\"\"\",\n        }, # scalar\n        \"cfgDHCPHostName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.1.137\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"DHCP hostname.\"\"\",\n        }, # scalar\n        \"licenses\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2\",\n        }, # node\n        \"licenseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1\",\n            \"status\" : \"current\",\n        }, # table\n        \"licenseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"licenseIndex\",\n            ],\n        }, # row\n        \"licenseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"license5DC\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"licenseSNMPv3\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disallowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"licenseVPN\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disallowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"licenseVSens\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"licenseAccessUsers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"license3rdPartyPMS\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disallowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # column\n        \"lic5DCTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"lic5DCUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licSNMPv3\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forbidden\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licVPN\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forbidden\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licVSensTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licVSensUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licAccessUsersTotal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licAccessUsersUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"lic3rdPartyPMS\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forbidden\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"allowed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"licAddKey\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.2.2.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n        }, # scalar\n        \"notifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.4\",\n        }, # node\n        \"sensors\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5\",\n        }, # node\n        \"commonTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each any sensor\"\"\",\n        }, # table\n        \"commonEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"commonIndex\",\n            ],\n        }, # row\n        \"commonIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"commonDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"humidity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"temperature-dual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"four-20mA\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"dcvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"airflow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"io\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"motion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"security\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"siren\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"acvoltage\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"vrms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"irms\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"watt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"watthour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"smoke\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"21\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                    \"temperature-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                    \"waterrope\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"five-drycontacts\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"31\"\n                    },\n                    \"thermostat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"128\"\n                    },\n                    \"virtual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"129\"\n                    },\n                    \"sound\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"130\"\n                    },\n                    \"softmotion\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"131\"\n                    },\n                    \"camera-dummy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"132\"\n                    },\n                    \"board-state\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"133\"\n                    },\n                    \"nosignal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"224\"\n                    },\n                    \"test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality.\"\"\",\n        }, # column\n        \"commonValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value reading for this sensor; it's a different measure for each sensor type.\"\"\",\n        }, # column\n        \"commonUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's value unit; it defines the sensor value's reading unit.\"\"\",\n        }, # column\n        \"commonStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"commonGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"commonRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"commonPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"commonSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"commonDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"commonHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonSensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonOnDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonOffDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' Description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"commonAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"commonValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.99\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE 754 Standard reading value for this sensor (in commonValue float form instead of integer).\"\"\",\n        }, # column\n        \"commonId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.1.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each temperature sensor\"\"\",\n        }, # table\n        \"temperatureEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"temperatureIndex\",\n            ],\n        }, # row\n        \"temperatureIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"temperature-dual\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"temperature-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality. For the temperature sensor, it has 3 sub-types: Normal temperature sensor, Dual sensor, and Thermocouple sensor.\"\"\",\n        }, # column\n        \"temperatureDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature degree value in numerical reading.\"\"\",\n        }, # column\n        \"temperatureUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in. For the temperature sensor it can be Celsius or Fahrenheit.\"\"\",\n        }, # column\n        \"temperatureStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"temperatureGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"temperatureLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many degrees the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"temperatureDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"temperatureOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The offset value for this sensor. It's used to adjust the reading value in case the reading is incorrect.\"\"\",\n        }, # column\n        \"temperaturePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"temperatureSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Temperature Sensor, it's for the array of Temperature Sensors and Dual Sensors.  For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"temperatureDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"temperatureHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureSensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureSensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"temperatureSerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The serial number of temperature sensor, used to indicate which sensor it is in an array. It matches the MAC ID of the sensor for a DCT sensor array.\"\"\",\n        }, # column\n        \"temperatureId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.2.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"humidityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each humidity sensor\"\"\",\n        }, # table\n        \"humidityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"humidityIndex\",\n            ],\n        }, # row\n        \"humidityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"humidityDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityPercent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The relative humidity percentage measured by this sensor\"\"\",\n        }, # column\n        \"humidityUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"humidityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"humidityGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"humidityLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many percentage the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"humidityDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"humidityRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"humidityOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The offset value for this sensor. It's used to adjust the reading value in case the reading is incorrect.\"\"\",\n        }, # column\n        \"humidityPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"humiditySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Humidity Sensor, it's for the Dual Sensors.\"\"\",\n        }, # column\n        \"humidityDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"humidityHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humiditySensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humiditySensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humiditySensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humiditySensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"humidityAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"humidityId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.3.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"drycontactTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each drycontact sensor\"\"\",\n        }, # table\n        \"drycontactEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"drycontactIndex\",\n            ],\n        }, # row\n        \"drycontactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"drycontactDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"drycontact-inout\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"drycontact-input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"drycontact-array\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality. For the drycontact sensor, it has 3 sub-types: drycontact-input, drycontact-output and drycontact-array.\"\"\",\n        }, # column\n        \"drycontactStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"outputLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"outputHigh\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"drycontactGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"drycontactDirection\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"input\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The functional direction of this drycontact sensors: use value '0' for input drycontact and '1' for output drycontact\"\"\",\n        }, # column\n        \"drycontactNormalState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state of the input drycontact. If an input switch is in this state it is normal, else it is critical. An open drycontact senses +5 volts. A closed drycontact senses 0 volts.\"\"\",\n        }, # column\n        \"drycontactControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Control Mode for controlling this drycontact sensor with, it can be one of these: Manual, Notification, Time, Thermostat.\"\"\",\n        }, # column\n        \"drycontactOutputManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds that the drycontact will stay in a state, before changing to the next state in case the cycle action have been used.\"\"\",\n        }, # column\n        \"drycontactOutputManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"high\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-Low-High-Low\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-High-Low-High\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manual output control for the drycontact state: Low, High, Toggle Low-High, Toggle High-Low.\"\"\",\n        }, # column\n        \"drycontactPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"drycontactSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"drycontactCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactOnDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactOffDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"drycontactAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"drycontactId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.4.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"current4to20mATable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each 4-20mAmp sensor\"\"\",\n        }, # table\n        \"current4to20mAEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"current4to20mAIndex\",\n            ],\n        }, # row\n        \"current4to20mAIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"current4to20mADescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in numerical reading.\"\"\",\n        }, # column\n        \"current4to20mAUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"current4to20mAStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"current4to20mAGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"current4to20mALowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mALowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mARearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many values the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"current4to20mADelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mADelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mADelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mADelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mADelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mADelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"current4to20mARaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"current4to20mAOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The offset value for this sensor. It's used to adjust the reading value in case the reading is incorrect.\"\"\",\n        }, # column\n        \"current4to20mAAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"current4to20mAAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of 4to20mA conversion.\"\"\",\n        }, # column\n        \"current4to20mAPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"current4to20mASubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Temperature Sensor, it's for the array of Temperature Sensors and Dual Sensors.  For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"current4to20mAMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum range for use in conversion.\"\"\",\n        }, # column\n        \"current4to20mABaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base range for use in conversion.\"\"\",\n        }, # column\n        \"current4to20mADisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"current4to20mAHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mALowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mANormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mALowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mASensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mALowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mANormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mALowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mASensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"current4to20mAAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"current4to20mAId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.5.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dcVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each DC voltage sensor\"\"\",\n        }, # table\n        \"dcVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"dcVoltageIndex\",\n            ],\n        }, # row\n        \"dcVoltageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"dcVoltageDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in numerical reading.\"\"\",\n        }, # column\n        \"dcVoltageUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"dcVoltageStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"dcVoltageGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"dcVoltageLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many values the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"dcVoltageDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"dcVoltageRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"dcVoltageOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The offset value for this sensor. It's used to adjust the reading value in case the reading is incorrect.\"\"\",\n        }, # column\n        \"dcVoltageJumper\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"jumperAt-60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-600\"\n                    },\n                    \"jumperAt-40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-400\"\n                    },\n                    \"jumperAt-30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-300\"\n                    },\n                    \"jumperAt-20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-200\"\n                    },\n                    \"jumperAt-10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"-100\"\n                    },\n                    \"jumperAt10\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"100\"\n                    },\n                    \"jumperAt20\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"200\"\n                    },\n                    \"jumperAt30\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"300\"\n                    },\n                    \"jumperAt40\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"400\"\n                    },\n                    \"jumperAt60\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"600\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selected voltage scale (jumper 0) in DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltageAmountMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltageAmountBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of DC voltage conversion.\"\"\",\n        }, # column\n        \"dcVoltagePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"dcVoltageSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Temperature Sensor, it's for the array of Temperature Sensors and Dual Sensors.  For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"dcVoltageMaxVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.43\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum voltage range for use in conversion.\"\"\",\n        }, # column\n        \"dcVoltageBaseVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.44\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base voltage range for use in conversion.\"\"\",\n        }, # column\n        \"dcVoltageDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"dcVoltageHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"dcVoltageAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"dcVoltageId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.6.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"airflowTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each airflow sensor\"\"\",\n        }, # table\n        \"airflowEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"airflowIndex\",\n            ],\n        }, # row\n        \"airflowIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"airflowDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in numerical reading.\"\"\",\n        }, # column\n        \"airflowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"airflowGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"airflowLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many values the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"airflowDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"airflowRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"airflowPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"airflowSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"airflowDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"airflowHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"airflowAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"airflowId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.7.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"motionTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"motionEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"motionIndex\",\n            ],\n        }, # row\n        \"motionIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"motionDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Description of this sensor Switch\"\"\",\n        }, # column\n        \"motionStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this Sensor, only input switches have a status\"\"\",\n        }, # column\n        \"motionGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"To take offline enter a 2\"\"\",\n        }, # column\n        \"motionPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor port\"\"\",\n        }, # column\n        \"motionSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Sensor sub port\"\"\",\n        }, # column\n        \"motionCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Description of this sensor\"\"\",\n        }, # column\n        \"motionNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Description of this sensor\"\"\",\n        }, # column\n        \"motionCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Critical Color of this sensor\"\"\",\n        }, # column\n        \"motionNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A Normal Color of this sensor\"\"\",\n        }, # column\n        \"motionAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Motion sensor acknowledge\"\"\",\n        }, # column\n        \"motionId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.8.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each water sensor\"\"\",\n        }, # table\n        \"waterEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterIndex\",\n            ],\n        }, # row\n        \"waterIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"waterGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"waterPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"waterSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Temperature Sensor, it's for the array of Temperature Sensors and Dual Sensors.  For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"waterCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"waterId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.9.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"securityTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each security sensor\"\"\",\n        }, # table\n        \"securityEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"securityIndex\",\n            ],\n        }, # row\n        \"securityIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"securityDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"securityStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"securityGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"securityPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"securitySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"securityCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"securityNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"securityCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"securityNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"securityAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"securityId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.10.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sirenTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for siren sensor.\"\"\",\n        }, # table\n        \"sirenEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sirenIndex\",\n            ],\n        }, # row\n        \"sirenIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"sirenDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"sirenStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"sirenGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"sirenControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Control Mode for controlling this siren sensor with, it can be one of these: Manual, Notification, Time, Thermostat.\"\"\",\n        }, # column\n        \"sirenManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds that the relay will stay in a state, before changing to the next state in case the cycle action have been used.\"\"\",\n        }, # column\n        \"sirenManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manual control for the relay state: Off, On, Toggle Off-On, Toggle On-Off.\"\"\",\n        }, # column\n        \"sirenPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"sirenSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"sirenOnDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"sirenOffDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"sirenOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"sirenOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"sirenAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"sirenId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.11.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"relayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each relay sensor\"\"\",\n        }, # table\n        \"relayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"relayIndex\",\n            ],\n        }, # row\n        \"relayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"relayDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"relayType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"relay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"xrelay\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality. For the relay sensor, it has 2 sub-type: normal relay, and xrelay.\"\"\",\n        }, # column\n        \"relayStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"relayGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"relayControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"manual-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"sensor-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"time-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"thermostat-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Control Mode for controlling this relay sensor with, it can be one of these: Manual, Notification, Time, Thermostat.\"\"\",\n        }, # column\n        \"relayManualCycleTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds that the relay will stay in a state, before changing to the next state in case the cycle action have been used.\"\"\",\n        }, # column\n        \"relayManualAction\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"turn-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"turn-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cycle-On-Off-On\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"cycle-Off-On-Off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The manual control for the relay state: Off, On, Toggle Off-On, Toggle On-Off.\"\"\",\n        }, # column\n        \"relayPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"relaySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor on the array of a relay (xelay) sensor. For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"relayOnDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.52\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"relayOffDesc\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.53\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' Description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"relayOnColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.60\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'On' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"relayOffColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.61\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Off' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"relayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"relayId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.12.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"acVoltageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each AC voltage sensor\"\"\",\n        }, # table\n        \"acVoltageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"acVoltageIndex\",\n            ],\n        }, # row\n        \"acVoltageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"acVoltageDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"acVoltageStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"acVoltageGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"acVoltagePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"acVoltageSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor on the array of sensors.\"\"\",\n        }, # column\n        \"acVoltageCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"acVoltageNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"acVoltageCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"acVoltageNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"acVoltageAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"acVoltageId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.13.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"smokeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each smoke sensor\"\"\",\n        }, # table\n        \"smokeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"smokeIndex\",\n            ],\n        }, # row\n        \"smokeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"smokeDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"smokeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"relayOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"relayOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"smokeGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"smokePort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"smokeSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"smokeCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"smokeNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"smokeCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"smokeNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"smokeAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"smokeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.14.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterRopeTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each water rope sensor\"\"\",\n        }, # table\n        \"waterRopeEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"waterRopeIndex\",\n            ],\n        }, # row\n        \"waterRopeIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"waterRopeDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeLeakLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Location of leakage from the begining of water rope sensor.\"\"\",\n        }, # column\n        \"waterRopeUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"waterRopeStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"waterRopeGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"waterRopeRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"waterRopeCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"waterRopeAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"waterRopeLength\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.100\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Length of water rope sensor.\"\"\",\n        }, # column\n        \"waterRopeImpedance\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.101\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Sensing wire impedance per meter value times 100\"\"\",\n        }, # column\n        \"waterRopeType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.103\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"custom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"water\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fuel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality.\"\"\",\n        }, # column\n        \"waterRopeId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.21.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"powerTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each power sensor\"\"\",\n        }, # table\n        \"powerEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"powerIndex\",\n            ],\n        }, # row\n        \"powerIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"powerDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value in numerical reading.\"\"\",\n        }, # column\n        \"powerUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"powerStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"powerGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"powerLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many value the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"powerDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"powerDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"powerDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"powerDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"powerDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"powerDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"powerRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"powerPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"powerSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"powerDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"powerHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"powerValueFormatString\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.66\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The string-based reading value in this sensor.\"\"\",\n        }, # column\n        \"powerValueFormatFloat\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.67\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-SMI\",\n                        \"type\" : \"Opaque\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"4\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The floating-point IEEE Standard 754 reading value in this sensor.\"\"\",\n        }, # column\n        \"powerAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"powerId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.22.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"fuelTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each fuel sensor\"\"\",\n        }, # table\n        \"fuelEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"fuelIndex\",\n            ],\n        }, # row\n        \"fuelIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"fuelDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value in this sensor\"\"\",\n        }, # column\n        \"fuelUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"fuelStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"fuelGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"fuelLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many value the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"fuelDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"fuelRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"fuelAmountMaxValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The maximum scale of value conversion.\"\"\",\n        }, # column\n        \"fuelAmountBaseValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The base scale of value conversion.\"\"\",\n        }, # column\n        \"fuelDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"fuelHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"fuelAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"fuelId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.24.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"tankSenderTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the property and reading value for every sensor.\"\"\",\n        }, # table\n        \"tankSenderEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"tankSenderIndex\",\n            ],\n        }, # row\n        \"tankSenderIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"tankSenderDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor value in numerical reading.\"\"\",\n        }, # column\n        \"tankSenderUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in.\"\"\",\n        }, # column\n        \"tankSenderStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"tankSenderGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"tankSenderLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many value the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"tankSenderDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"tankSenderRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"tankSenderDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"tankSenderHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderSensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderSensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"tankSenderAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"tankSenderId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.26.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"doorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each door sensor\"\"\",\n        }, # table\n        \"doorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"doorIndex\",\n            ],\n        }, # row\n        \"doorIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"doorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"doorValue\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading value for this sensor. It will be used to calculate the sensor status.\"\"\",\n        }, # column\n        \"doorStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"heldOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"fire\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"opened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"forceOpened\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"doorUnlockPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.62\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds for the door to stay unlocked before it is automatically locked again.\"\"\",\n        }, # column\n        \"doorOpenPeriod\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.63\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds for the door to stay in the 'Open' status before it sends the alert 'Door is held open'.\"\"\",\n        }, # column\n        \"doorCmd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.64\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"trig-open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"trig-close\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Door Sensor's command, used to open/close the door.\"\"\",\n        }, # column\n        \"doorAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"doorId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.27.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureArrayTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each temperature array sensor\"\"\",\n        }, # table\n        \"temperatureArrayEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"temperatureArrayIndex\",\n            ],\n        }, # row\n        \"temperatureArrayIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"temperatureArrayDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"temperature\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"thermocouple\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                    \"arraytemp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"23\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of the sensor; it represents the sensor's functionality. For the temperature sensor, it has 3 sub-types: Normal temperature sensor, One-wire temperature sensor, and Thermocouple sensor.\"\"\",\n        }, # column\n        \"temperatureArrayDegree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The temperature degree value in numerical reading.\"\"\",\n        }, # column\n        \"temperatureArrayUnit\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's value unit string, in what the sensor's value is read in. For the temperature sensor it can be Celsius or Fahrenheit.\"\"\",\n        }, # column\n        \"temperatureArrayStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"highWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"highCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"lowWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"lowCritical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"temperatureArrayGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"temperatureArrayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' value of this sensor. The unit will check the current reading against this value, and send an alert if it's configured. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayRearm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This value tells how many degrees the sensor has to reach beyond the threshold value, before changing to a new status. Useful to prevent the quick fluctuation of readings.\"\"\",\n        }, # column\n        \"temperatureArrayDelayError\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Error' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayDelayNormal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Normal' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayDelayLowCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayDelayLowWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'Low Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayDelayHighWarning\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Warning' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayDelayHighCritical\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The time in seconds (continuous time) that the sensor has to be in 'High Critical' status before its status is changed.\"\"\",\n        }, # column\n        \"temperatureArrayRaw\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The sensor's unformatted (raw) value that is being read directly from sensor, before it is converted to the preferred value.\"\"\",\n        }, # column\n        \"temperatureArrayOffset\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The offset value for this sensor. It's used to adjust the reading value in case the reading is incorrect.\"\"\",\n        }, # column\n        \"temperatureArrayPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"temperatureArraySubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors. For Temperature Sensor, it's for the array of Temperature Sensors and Dual Sensors.  For example x.1, x.2, x.3 ...\"\"\",\n        }, # column\n        \"temperatureArrayDisplayStyle\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.45\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"basic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"gauge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The sensor's Display Style for the Web UI, to display the reading as a gauge or bar. 0 = bar style, 1 = gauge style.\"\"\",\n        }, # column\n        \"temperatureArrayHighCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.46\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayLowCriticalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.47\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArraySensorNormalDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.48\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayLowWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.49\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayHighWarningDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.50\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArraySensorErrorDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.51\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayHighCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.54\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayLowCriticalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.55\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Critical' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArraySensorNormalColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.56\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Normal' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayLowWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.57\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Low Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayHighWarningColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.58\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'High Warning' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArraySensorErrorColor\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.59\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified 'Sensor Error' status field color. The unit will show this color on its web interface and in DCIM. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"temperatureArrayAcknowledge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.70\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"not-acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"acked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ack\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The acknowledge status for the current status of the sensor: 0 = the status has been changed and waiting to be acknowledged, 1 = status is normal or have been already acknowledged, 2 = acknowledge the current status (this status is write-only)\"\"\",\n        }, # column\n        \"temperatureArraySerialNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.71\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The serial number of temperature sensor, used to indicate which sensor it is in an array. It matches the MAC ID of the sensor for a DCT sensor array.\"\"\",\n        }, # column\n        \"temperatureArrayId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.28.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"towerLEDTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table contains the properties for each TowerLED sensor\"\"\",\n        }, # table\n        \"towerLEDEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"towerLEDIndex\",\n            ],\n        }, # row\n        \"towerLEDIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor Compound ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"towerLEDDescription\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The user specified description of this sensor. Unless specified, the default value is used.\"\"\",\n        }, # column\n        \"towerLEDStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noStatus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"sensorError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current status of this sensor.\"\"\",\n        }, # column\n        \"towerLEDGoOffline\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"online\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"goOffline\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Command to offline this sensor: use value '2' to set the sensor offline.\"\"\",\n        }, # column\n        \"towerLEDPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The device's sensor port number, where this sensor is plugged in to.\"\"\",\n        }, # column\n        \"towerLEDSubPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The logical port number of this sensor in the array, or in a set of sensors.\"\"\",\n        }, # column\n        \"towerLEDControlMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.72\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"worst-status\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Control Mode for controlling towerLED sensor, it can be one of these: standard or worst-status\"\"\",\n        }, # column\n        \"towerLEDBuzzerEnable\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.73\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enable internal TowerLED's buzzer\"\"\",\n        }, # column\n        \"towerLEDRedLEDControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.74\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"led-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"led-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"led-blink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LED control code to manage Red LED, it can be off, on or blink\"\"\",\n        }, # column\n        \"towerLEDOrangeLEDControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.75\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"led-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"led-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"led-blink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LED control code to manage Orange LED, it can be off, on or blink\"\"\",\n        }, # column\n        \"towerLEDGreenLEDControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.76\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"led-off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"0\"\n                    },\n                    \"led-on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"led-blink\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"LED control code to manage Green LED, it can be off, on or blink\"\"\",\n        }, # column\n        \"towerLEDId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.5.29.1.1000\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Sensor ID of this sensor, used to identify which sensor it is in the system configuration.\"\"\",\n        }, # column\n        \"virtual\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.3.6\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"spNormalStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe status is Normal\"\"\",\n        }, # notification\n        \"spWarningStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe status went to Warning\"\"\",\n        }, # notification\n        \"spCriticalStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe status went to Critical\"\"\",\n        }, # notification\n        \"spDownStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe status went to Disabled\"\"\",\n        }, # notification\n        \"spKeepAliveTrap\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe send keep alive trap.\"\"\",\n        }, # notification\n        \"spUnknownStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"sensorProbe status went to Unknown\"\"\",\n        }, # notification\n        \"spTemperatureStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.18\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spAnalogueStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spSwitchStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spIRMSStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMSStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spSenUnknownStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.51\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"sensorProbe sensor status went to Unknown\"\"\",\n        }, # notification\n        \"spSenNormalStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.52\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"sensorProbe sensor status is Normal\"\"\",\n        }, # notification\n        \"spSenWarningStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.53\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"sensorProbe sensor status went to Warning\"\"\",\n        }, # notification\n        \"spSenCriticalStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.54\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"sensorProbe sensor status went to Critical\"\"\",\n        }, # notification\n        \"spSenDownStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.55\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"sensorProbe sensor status went to Disabled\"\"\",\n        }, # notification\n        \"spWattStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.60\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.71\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.72\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.73\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.74\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.75\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.77\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.78\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8 sensor trap\"\"\",\n        }, # notification\n        \"spVirtualStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.80\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual sensor trap\"\"\",\n        }, # notification\n        \"spTemperature1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.101\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.102\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.103\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.104\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.105\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.106\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.107\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperature8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.108\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.111\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.112\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.113\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.114\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.115\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.116\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.117\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray1-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.118\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.121\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.122\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.123\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.124\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.125\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.126\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.127\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray2-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.128\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.131\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.132\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.133\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.134\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.135\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.136\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.137\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray3-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.138\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.141\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.142\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.143\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.144\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.145\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.146\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.147\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray4-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.148\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.151\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.152\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.153\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.154\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.155\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.156\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.157\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray5-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.158\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.161\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.162\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.163\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.164\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.165\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.166\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.167\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray6-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.168\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.171\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.172\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.173\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.174\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.175\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.176\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.177\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray7-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.178\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.181\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.182\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.183\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.184\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.185\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.186\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.187\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spTemperatureArray8-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.188\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Temperature sensor trap\"\"\",\n        }, # notification\n        \"spAnalogue1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.201\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.202\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.203\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.204\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.205\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.206\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.207\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spAnalogue8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.208\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Analogue Sensor Type\"\"\",\n        }, # notification\n        \"spSwitch1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.301\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.302\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.303\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.304\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.305\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.306\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.307\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.308\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch9Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.309\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch10Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.310\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch11Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.311\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch12Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.312\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch13Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.313\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch14Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.314\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch15Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.315\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch16Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.316\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch17Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.317\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch18Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.318\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch19Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.319\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch20Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.320\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch21Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.321\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch22Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.322\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch23Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.323\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch24Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.324\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch25Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.325\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch26Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.326\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch27Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.327\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch28Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.328\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch29Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.329\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch30Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.330\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch31Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.331\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch32Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.332\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch33Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.333\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch34Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.334\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch35Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.335\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch36Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.336\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch37Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.337\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch38Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.338\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch39Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.339\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch40Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.340\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch41Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.341\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch42Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.342\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch43Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.343\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch44Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.344\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch45Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.345\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch46Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.346\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch47Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.347\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch48Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.348\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch49Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.349\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch50Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.350\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch51Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.351\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch52Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.352\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch53Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.353\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch54Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.354\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch55Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.355\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch56Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.356\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch57Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.357\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch58Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.358\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch59Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.359\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch60Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.360\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch61Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.361\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch62Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.362\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch63Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.363\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch64Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.364\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch65Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.365\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch66Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.366\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch67Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.367\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spSwitch68Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.368\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Switch sensor trap\"\"\",\n        }, # notification\n        \"spIRMS1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.401\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.402\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.403\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.404\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.405\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.406\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.407\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spIRMS8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.408\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"IRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.501\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.502\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.503\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.504\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.505\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.506\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.507\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spVRMS8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.508\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"VRMS sensor trap\"\"\",\n        }, # notification\n        \"spEnergy1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.601\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.602\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.603\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.604\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.605\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.606\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.607\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spEnergy8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.608\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Energy sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.711\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.712\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.713\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.714\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.715\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.716\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.717\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray1-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.718\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray1.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.721\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.722\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.723\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.724\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.725\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.726\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.727\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray2-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.728\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray2.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.731\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.732\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.733\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.734\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.735\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.736\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.737\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray3-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.738\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray3.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.741\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.742\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.743\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.744\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.745\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.746\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.747\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray4-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.748\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray4.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.751\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.752\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.753\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.754\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.755\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.756\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.757\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray5-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.758\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray5.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.761\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.762\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.763\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.764\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.765\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.766\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.767\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray6-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.768\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray6.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.771\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.772\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.773\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.774\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.775\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.776\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.777\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray7-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.778\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray7.8 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.781\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.1 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.782\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.2 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.783\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.3 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.784\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.4 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.785\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.5 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.786\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.6 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.787\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.7 sensor trap\"\"\",\n        }, # notification\n        \"spRelayArray8-8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.788\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"RelayArray8.8 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual1Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.801\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual1 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual2Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.802\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual2 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual3Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.803\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual3 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual4Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.804\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual4 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual5Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.805\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual5 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual6Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.806\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual6 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual7Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.807\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual7 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual8Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.808\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual8 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual9Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.809\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual9 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual10Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.810\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual10 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual11Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.811\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual11 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual12Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.812\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual12 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual13Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.813\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual13 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual14Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.814\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual14 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual15Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.815\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual15 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual16Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.816\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual16 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual17Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.817\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual17 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual18Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.818\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual18 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual19Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.819\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual19 sensor trap\"\"\",\n        }, # notification\n        \"spVirtual20Status\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.820\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Virtual20 sensor trap\"\"\",\n        }, # notification\n        \"spCustomStatus\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"SPAGENT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.3854.1.0.1000\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"spSensorStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorValue\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorLevelExceeded\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorStatusName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spSensorSubIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spBoardIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spBoardDescription\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spEventTimeStamp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spEventClassNumber\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n                \"spEventClassName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"SPAGENT-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Custom sensor trap\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/STAND-ALONE-ETHERNET-SWITCH-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python STAND-ALONE-ETHERNET-SWITCH-MIB\n\nFILENAME = \"ESSWITCH-MIB.my\"\n\nMIB = {\n    \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n\n    \"STAND-ALONE-ETHERNET-SWITCH-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Gauge\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"\", \"name\" : \"TRAP-TYPE\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"sysName\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n    ),\n\n    \"nodes\" : {\n        \"grandjunction\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1\",\n        }, # node\n        \"fastLink\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1\",\n        }, # node\n        \"seriesG2xx\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.2\",\n        }, # node\n        \"esModuleBasic\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.2.1\",\n        }, # node\n        \"series2000\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3\",\n        }, # node\n        \"sysInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1\",\n        }, # node\n        \"sysInfoFwdEngineRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the revision number of the forwarding engine ASIC.\"\"\",\n        }, # scalar\n        \"sysInfoBoardRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the revision number of the switch main board\non which the system firmware resides.\"\"\",\n        }, # scalar\n        \"sysInfoTotalNumberOfPorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of physical network ports.\nfixed configuration     - 27, 15 or 14 ports\nmodular configuration   - 25 - 41 ports\n\nThis object does NOT represent the upper bound of\nindices into port tables.  See sysInfoNumberOfSwitchPorts\nand sysInfoNumberOfSharedPorts for that purpose.\"\"\",\n        }, # scalar\n        \"sysInfoNumberOfSwitchPorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ports that are individually switched.\n- 27, 15 or 14 switched ports.\n\nEach of these ports has hardware support for a full range\nof statistics and management controls.  This object\nrepresents the upper bound of indices into the various\nport tables in the port group.\"\"\",\n        }, # scalar\n        \"sysInfoNumberOfSharedPorts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of ports that are collectively switched.\nfixed configuration    - 0 ports\nmodular configuration  - 0 to 16 ports\n\nHardware supported statistics are available for these\nports as a whole.  Management controls are limited to\nenabling and disabling of the port.\"\"\",\n        }, # scalar\n        \"sysInfoNumberOfInstalledModules\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of high speed switched ports with installed\nand recognized modules.  Hardware supported statistics\nare available for installed modules.  For repeater group\nmodules, statistics are supported for the group as a whole,\nrelative to the interface between the group and the\nswitching engine.  Management controls for an individual\nrepeater port on a module are limited to enabling and\ndisabling the port.\"\"\",\n        }, # scalar\n        \"sysInfoBuffersUsed\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The high-water mark of frame buffer usage in this\nswitch.  The initial value upon system reset is zero.\"\"\",\n        }, # scalar\n        \"sysInfoMaxBuffers\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times sysBuffersUsed has reached its maximum\nvalue and been reset to zero by the switch.\nThe initial value is zero.\"\"\",\n        }, # scalar\n        \"sysInfoUtilDisplay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"24\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of utilization meter LEDs currently lit on\nthe front panel.\"\"\",\n        }, # scalar\n        \"sysInfoAddrCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system-wide maximum number of addresses supported.\nThis address capacity includes both dynamic and static\naddress types.\"\"\",\n        }, # scalar\n        \"sysInfoRestrictedStaticAddrCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The system-wide maximum number of restricted static\naddresses supported.  This object is a subset of\nsysInfoAddrCapacity.\"\"\",\n        }, # scalar\n        \"sysInfoPOSTResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value which indicates the failures of some particular\nPower On Self Test (POST).\n\nThe value is a sum.  This sum initially takes the\nvalue zero, Then, for each POST test, T, in the range\n1 through 16, that fails, 2 raised to (T - 1) is added\nto the sum.\n\nThe defined POST tests are:\n\n T    POST Test\n---   ---------\n 1    ports\n 2    station address PROM\n 3    CAM\n 4    RS-232 port\n 5    real time clock\n 6    CAM SRAM\n 7    system timer interrupt\n 8    port control/status\n 9    Flag DRAM or ISLT ASIC\n 10   Packet DRAM\n 11   forwarding engine\n 12   forwarding engine\n 13   non-volatile RAM\n 14   SRAM\n 15   EPROM\n 16   ECU DRAM\"\"\",\n        }, # scalar\n        \"sysInfoPortFailedPOSTMap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit array where the presence of a particular bit\nindicates a failure of a particular port, as determined\nby the POST 'individual ports' test.\n\nEach octet within the value of this object specifies a\nset of eight ports, with the first octet specifying ports\n1 through 8, the second octet specifying ports 9\nthrough 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents the\nhighest numbered port.  Thus, each port of the\nswitch is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that port is included in the set of\nports; the port is not included if its bit has a\nvalue of '0'.\"\"\",\n        }, # scalar\n        \"sysInfoPortLinkDisplayMap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit array where the presence of a particular bit\nindicates a lit link LED for a port.\n\nEach octet within the value of this object specifies a\nset of eight link LEDs, with the first octet specifying\nlink LEDs for ports 1 through 8, the second octet\nspecifying link LEDs 9 through 16, etc.   Within each\noctet, the most significant bit represents the lowest\nnumbered LED, and the least significant bit represents the\nhighest numbered LED.  Thus, each LED is represented by a\nsingle bit within the value of this object.  If that bit\nhas a value of '1' then that LED is currently lit;\nthe LED is not lit if its bit has a value of '0'.\"\"\",\n        }, # scalar\n        \"sysInfoPortDisabledDisplayMap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A bit array where the presence of a particular bit\nindicates a lit disabled LED for a port.\n\nEach octet within the value of this object specifies a\nset of eight disabled LEDs, with the first octet specifying\ndisabled LEDs for ports 1 through 8, the second octet\nspecifying disabled LEDs 9 through 16, etc.   Within each\noctet, the most significant bit represents the lowest\nnumbered LED, and the least significant bit represents the\nhighest numbered LED.  Thus, each LED is represented by a\nsingle bit within the value of this object.  If that bit\nhas a value of '1' then that LED is currently lit;\nthe LED is not lit if its bit has a value of '0'.\"\"\",\n        }, # scalar\n        \"sysInfoBroadcastStormLastTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The last time a port exceeded broadcast threshold.\nThis object is only valid if broadcast storm control\nis enabled at least once since system start up.\nThe port where the event occurred is\nidentified by sysInfoPortExceedBroadcastStorm.\"\"\",\n        }, # scalar\n        \"sysInfoPortExceedBroadcastStorm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"27\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"27\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port where the broadcast threshold was last exceeded,\nif Broadcast Storm Control was enabled. The time when the event\noccurred is identified by sysInfoBroadcastStormLastTime.\nThe default value is 0.\"\"\",\n        }, # scalar\n        \"sysInfoRedundantPowerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"healthy\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"faulty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the state of the redundant power supply.\n\noff      : the switch is not connected to a\n           redundant power source.\n\nhealthy  : a redundant power source is\n           connected to the switch and the power source\n           is operating correctly.\n\nfaulty   : a redundant power source is\n           connected to the switch but a failure\n           exists in the power system.\"\"\",\n        }, # scalar\n        \"sysInfoInternalPowerState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the state of the internal power supply.\n\noff : the internal power supply is off.\n\non  : the internal power supply is on.\"\"\",\n        }, # scalar\n        \"sysInfoConfigFileStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of current or last succesful configuration\ndownload since the switch was initialized. The status\ncontains the file name and host the last successful\nconfiguration download was executed.\n\nNote that a successful download does not mean all commands\nin the configuration files were executed successfully.\"\"\",\n        }, # scalar\n        \"sysInfoImageCapability\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enterprise\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The software image capability supported.\"\"\",\n        }, # scalar\n        \"sysConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2\",\n        }, # node\n        \"sysConfigReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to reset(2) causes a complete\nreset of both hardware and software, but does not run\nthe POST (Power On Self Test).  All parameters including\nall static addresses will be retained.\n\nSetting this object to noReset(1) has no effect.\nThe switch always returns the value noReset(1) when\nthis object is read.\"\"\",\n        }, # scalar\n        \"sysConfigDefaultReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noReset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to reset(2) causes a complete\nreset of both hardware and software, but does not run\nthe POST (Power On Self Test).  All configuration parameters\nwill revert to their factory default settings, and all\naddresses assigned will be removed.\n\nSetting this object to noReset(1) has no effect.\nThe switch always returns the value noReset(1) when\nthis object is read.\"\"\",\n        }, # scalar\n        \"sysConfigClearPortStats\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noClear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to noClear(1) results in no action.\nWhen set to clear(2), the switch will reset all\nport statistics to zero.  Port statistics are kept in\nthe switchPortTable, the switchPortTxStatTable, the\nswitchPortRxStatTable, and the switchPortTxCollTable.\n\nThis object always returns noClear(1) when read.\"\"\",\n        }, # scalar\n        \"sysConfigAddressViolationAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"suspend\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ignore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates what action to take when an address violation\n(an address mismatch or duplication) occurs on a\nsecured port.  The default action is to suspend(1)\nthe port.\n\nsuspend  : port is suspended until the correct address\n           is again received.  While suspended, port\n           will not forward frames it receives, nor\n           will it accept frames to be forwarded.\n\ndisable  : port is disabled and will not forward any\n           frames as in the case of suspension above.\n           Port can only be reenabled by an explicit\n           management action on the part of the user.\n\nignore   : do nothing to the port (simply discard the\n           offending address).\"\"\",\n        }, # scalar\n        \"sysConfigAddressViolationAlert\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to enabled(1), the switch will generate an\naddressViolation trap upon detecting an address\nviolation on a secured port.  When set to\ndisabled(2), no such trap will be issued for address\nviolation on secure ports.  The default is\nenabled(1).\"\"\",\n        }, # scalar\n        \"sysConfigSwitchingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"store-and-forward\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"fragmentFree\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"fastForward\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch can operate as a high speed cut-through\nswitch, or as a traditional store-and-forward switch.\nCut-through switching of frames is enabled when\nthis object is set to fastForward(3) or fragmentFree(2).\nThis works to reduce buffering latency by attempting to\nforward a frame before reception is completed.\n\nSwitches operating with firmware versions greater\nthan or equal to 6.00 support only fragmentFree(2) and\nsotre-and-forward(1).\n\nBroadcast frames are always switched using the\nstore-and-forward(1) method.  Multicast frame switching\nmay be forced to the store-and-forward(1) mode using\nthe object sysConfigMulticastStoreAndForward.\nThe switching of any types of frame automatically reverts\nto the store-and-forward(1) method whenever the\nswitch is configured to monitor frames internally (see the\n                object sysConfigMonitorPort).\n\nThe default value for this object for firmware version\ngreater than or equal to 6.00 is fragmentFree(2).\nThe default value for this object for firmware version\nless than 6.00 is fastForward(3).\n\nstore-and-forward: entire frame is buffered before it is\n                   forwarded to the appropriate destination.\n\nfragmentFree     : forward the frame to the appropriate\n                   destination after 64 bytes plus preamble\n                   have been received.\n\nfastForward      : minimize latency by making the forwarding\n                   decision as soon as possible during frame\n                   reception (after 6 bytes plus preamble).\"\"\",\n        }, # scalar\n        \"sysConfigMulticastStoreAndForward\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to enabled(1), the switching of multicast frames\nwill use the store-and-forward method, regardless of the\nsetting of sysConfigSwitchingMode.  When set to disabled(2),\nmulticast frames will be switched according to the\ncurrent setting of sysConfigSwitchingMode.\n\nThe switching of any types of frame automatically reverts\nto the store-and-forward method whenever the\nswitch is configured to monitor frames internally (see the\nobject sysConfigMonitorPort).  The default value for this\nobject is disabled(1).\"\"\",\n        }, # scalar\n        \"sysConfigMonitor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether frames to/from certain ports are sent\nto sysConfigMonitorPort.  A port is selected for monitoring\npurpose when its portMonitoring object is set to enabled.\nThe default value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigMonitorPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Port number to which all frames to/from monitored ports are\nsent.  Frames are only monitored if the sysConfigMonitor\nobject is set to enabled(1).\n\nA number from 1 to 27 selects a switch port.\n\nThe number 26 selects fast Ethernet port F1 (called port\nA on the modular switches), 27 selects fast Ethernet port F2\n(port B on the modular switches).  The number 31 selects no\nmonitor port.  The default value is 31.\"\"\",\n        }, # scalar\n        \"sysConfigHigherProtocolMonitor\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.10\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether frames addressed to and from the higher-\nlayer protocol processor of the switch are to be\nmonitored.  The higher-layer protocol processor is the\nentity that responds to all SNMP/TFTP/XNSEcho management\nrequests.  The default value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigPort25Connector\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"self-sensing\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"aui\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Specify which of the two connector types is providing\nactive connection on port 25.  Setting the connector\nto self-sensing allows the switch to learn the active\nconnector for port 25 on its own.  The other two\npossible values force the switch to use the\nchosen type.  The default value is self-sensing(1).\n\nrj45: 10BaseT RJ45 connector\naui : 10Base5 thick-wire connector.\"\"\",\n        }, # scalar\n        \"sysConfigHeuristics\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A value which enables special heuristic functions.\n\nThe value is a sum.  This sum initially takes the\nvalue zero, Then, for each heuristic function, H,\nin the range 1 through 32, that is enabled, 2 raised\nto (H - 1) is added to the sum.\n\nThe heuristic functions are:\n\n H    Heuristic Function\n---   ------------------\n 1    system reset when an invalid buffer is detected\n 2    system reset when free and transmit lists are mixed\n 3    system reset when the buffer counter overflows\n 4    system reset when the frame status overflows\n 5    system reset when queue head passes tail\n 6    system reset when the self-monitor loopback fails\n 7    system reset when the port status interface hangs\n 8    system reset when the LED interface hangs\n 9    system reset when the buffer interface hangs\n 10   system reset when the frame DRAM interface hangs\n 11   system reset when invalid hardware activities are detected\n 12   reserved (must be zero)\n 13   reserved (must be zero)\n 14   reserved (must be zero)\n 15   reserved (must be zero)\n 16   reserved (must be zero)\n 17   reserved (must be zero)\n 18   reserved (must be zero)\n 19   size of transmit queue is 1.5K.\n 20   reserved (must be zero)\n 21   reserved (must be zero)\n 22   reserved (must be zero)\n 23   unfreeze LEDs upon a POST failure\n 24   reserved (must be zero)\n 25   reserved (must be zero)\n 26   reserved (must be zero)\n 27   reserved (must be zero)\n 28   reserved (must be zero)\n 29   reserved (must be zero)\n 30   reserved (must be zero)\n 31   reserved (must be zero)\n 32   reserved (must be zero)\"\"\",\n        }, # scalar\n        \"sysConfigEnableSTP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch implements the 802.1d Spanning Tree\nAlgorithm & Protocol (STP) on all its port to detect loops\nin the bridge topology.  The user may, for any reason,\nelect to disable the execution of STP, by setting this object\nto disabled(2).\n\nWhen STP is disabled(2), all ports currently in suspended-stp\nstatus will immediately transition to enabled status, and\nframe forwarding will resume.\n\nWhen STP is enabled(1), Suspended-stp ports will transition\nto enabled according to the STP.\n\nThis object is not supported by firmware versions greater\nthan or equal to 6.00.\n\nThe default value is enabled(1).\"\"\",\n        }, # scalar\n        \"sysConfigStrictSTPTransition\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.14\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The 802.1d Spanning Tree Protocol dictates that a port\nmust start out in the blocking state and transition through\ntwo other intermediate states (listening and learning),\nbefore it can begin forwarding frames.  These state\ntransitions help prevent temporary loops in the bridge\ntopology.\n\nThe switch implements a special algorithm where a\nsingly-addressed port may move to the forwarding state as soon\nas it regains a previously lost linkbeat, or when it is\nenabled after having been suspended for address violation.\nThis does not comply with the 802.1d STP in the strictest\nsense.  To force compliance, this object may be set to\nenabled(1).\n\nThe default value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigBroadcastStormAction\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"block\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ignore\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates what action to take when broadcast threshold is\nexceeded at a port.\n\nblock  : broadcast packets received from the port are discarded\n         until the broadcast rate drops below the re-enable\n         threshold.\nignore : do nothing to the port.\n\nThe default value is ignore(2).\"\"\",\n        }, # scalar\n        \"sysConfigBroadcastStormAlert\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to enabled(1), the switch will generate a\nbroadcastStormTrap upon detecting that a port is receiving\nbroadcast packets at a rate higher than the specified broadcast\nthreshold, if sysConfigBroadcastStormControl is enabled.\n\nNote: after the initial trap, additional traps will not be\ngenerated for a blocked port while the blocked port\nreceived broadcast packets greater than the specified\nsysConfigBroadcastLowerThreshold value.\n\nWhen set to disabled(2), no such trap will be issued.  The\ndefault value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigBroadcastThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"14400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"14400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object allows user to set the upper limit for Broadcast\nstorm control function. The broadcast rate is the number of\nbroadcast packets received from a port in a second.\nIf sysConfigBroadcastStormControl is set to enabled and\nsysConfigBroadcastStormAction is set to block, the switch stops\nforwarding broadcast packets received from a port when the\nnumber of broadcast packets received from the port\nin a second exceeds the threshold.\n\nThe default value is 500.\"\"\",\n        }, # scalar\n        \"sysConfigBroadcastReEnableThreshold\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"10\",\n                        \"max\" : \"14400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"10\",\n                        \"max\" : \"14400\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object allows user to set the re-enable threshold for Broadcast\nStorm Control function. Once a port has been blocked, the\nnumber of broadcast packets received per second from the port\nmust drop below this threshold before broadcast packet\nforwarding for the port is automatically re-enabled.\nThis threshold is relevant only if the user has chosen to\nblock broadcast packet forwarding to control broadcast storms.\n\nThe default value is 250.\"\"\",\n        }, # scalar\n        \"sysConfig10MbpsEnhancedCongestionControl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"adaptive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"moderate-aggressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aggressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enhanced Congestion Control (ECC) reduces the transmit\nback-off period to allow the port to transmit more quickly,\nthereby reducing the transmit queue congestion\non the port. When set to disabled(2), ECC is disabled.\nWhen set to adaptive(1), ECC is enabled when the port's\ntransmit queue is full. Set to moderate-aggressive(3)\nto enable ECC with a back-off period that is divided by\na factor of 32. Set to aggressive(4) to enable ECC with\na back-off period that is divided by a factor of 1024.\n\nThis object controls the setting on all 10Mbps ports of\nthe switch.\n\nThe default value is disabled(1).\"\"\",\n        }, # scalar\n        \"sysConfigNetworkPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"27\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"27\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"If a network port is configured, all unknown\nunicast packets are sent only to the network port.\nOnly one port in the switch can be selected as the\nnetwork port.\nThe number 0 selects no network port.\n\nThe default value is 0.\"\"\",\n        }, # scalar\n        \"sysConfigHalfDuplexBackPressure\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Back-pressure allows a port to force a collision when there\nare no buffers to receive frames.  Because collision is only\nmeaningful on a port operating in half-duplex, back-pressure\nenhancement does not apply to full-duplex ports.\n\nWhen set to enabled(1), buffer starvation causes the switch\nto force collisions when receiving frames on (half-duplex)\nports.  This, in turn, signals network nodes that are connected\nto these ports to retransmit their frames.  It is expected\nthat this transit delay enables the switch to free up buffers\nto successfully receive the frames.\n\nWhen set to disabled(2), the switch does not apply back-\npressure when there is buffer starvation.\n\nThe default value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigFastEthcParmsPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"26\",\n                        \"max\" : \"27\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"26\",\n                        \"max\" : \"27\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The parameters of port to use for Fast EtherChannel.\nDefaults to 26. When Fast EtherChannel is enabled,\nthe following object values parameters are configured\nto the same values for ports 26, 27, and the\nFast EtherChannel:\n\nNon-trunks:\n   swPortFloodUnregisteredMulticasts\n   swPortFloodUnknownUnicasts\n   swPortEnhancedCongestionControl\n   vmVlan in CISCO-VLAN-MEMBERSHIP-MIB\n   dot1dStpPortPathCost in BRIDGE-MIB\n   dot1dStpPortPriority in BRIDGE-MIB\n\nTrunks:\n   swPortFloodUnregisteredMulticasts\n   swPortFloodUnknownUnicasts\n   swPortEnhancedCongestionControl\n   swPortBridgePriority\n   swPortBridgePriorityAlternate\n   swPortBridgePathCost\n   swPortBridgePathCostAlternate\n   vlanTrunkPortDynamicState in CISCO-VTP-MIB\n   vmTrunkPortVlansEnabled in CISCO-VTP-MIB\n   vmTrunkPortVlansPruningEligible in CISCO-VTP-MIB\n   dot1dStpPortPathCost value of a vlan in CISCO-VLAN-MEMBERSHIP-MIB\n   dot1dStpPortPriority value of a vlan in CISCO-VLAN-MEMBERSHIP-MIB\"\"\",\n        }, # scalar\n        \"sysConfigTftpServerName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The TFTP server host name or IP address. The value of this\nobject is the same as upgradeTFTPServerName object.\"\"\",\n        }, # scalar\n        \"sysConfigConfigFileAuto\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether the system should attempt to retrieve the\nconfiguration file on system power-up. When enabled, the\nsystem will attempt to retrieve <sysName value>-confg,\n<sysName value>.cfg, switch-confg, or ciscosw.cfg\nfiles in the order listed using TFTP. The TFTP requests\nwill be sent to the host specified by sysConfigTFTPServerName\nif configured. Otherwise, the request is sent IP broadcast\naddress 255.255.255.255. The first file successfully retrieved\nwill be used.\n\nIf disabled, the configuration file can still be retrieved\nif specified to do so in the DHCP response.\n\nThe default value is disabled(2).\"\"\",\n        }, # scalar\n        \"sysConfigPortGroupingMode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.2.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"bridge-group\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"vlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to bridge-groups (1), the switch allows ports\nto be assigned to bridge groups. Bridge Group configuration\nis local to the switch; virtual LANs span across the network.\nIn the bridge-group mode, virtual LAN configuration is disabled.\nWhen set to vlan(2), the switch allows ports to be assigned to\none or more virtual LANs. Bridge group configuration is disabled.\nThe switch is reset when the value of this object is modified.\n\nThe default value is vlan(2)\"\"\",\n        }, # scalar\n        \"port\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3\",\n        }, # node\n        \"switchPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for individually switched\nports.\"\"\",\n        }, # table\n        \"swPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"swPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration parameters for an individually switched port.\"\"\",\n        }, # row\n        \"swPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number greater than zero identifying an individually\nswitched port.  The same value of a port index variable\nfor any of the port tables in this MIB group selects\nthe same port.\"\"\",\n        }, # column\n        \"swPortControllerRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the revision number of the port controller.\"\"\",\n        }, # column\n        \"swPortName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive string of up to 60 characters used by the\nnetwork administrator to name a port.\"\"\",\n        }, # column\n        \"swPortMediaCapability\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"private-ethernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"general-ethernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"general-fast-ethernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"private-fast-ethernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"repeated-fast-ethernet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"fddi\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"atm\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port media capability is one of:\nother            : none of the following\nprivate-ethernet : dedicated 10 Mbps Ethernet port\ngeneral-ethernet : non-dedicated 10 Mbps Ethernet port\ngeneral-fast-ethernet: non-dedicated 100 Mbps Ethernet port\nprivate-fast-ethernet: dedicated 100 Mbps Ethernet port\nrepeated-fast-ethernet: repeated 100 Mbps Ethernet port\nfddi             : FDDI module\natm              : ATM module\"\"\",\n        }, # column\n        \"swPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"network\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies whether the port is\nother    : none of the following\nnetwork  : port does not have address number restriction\n           while it is unsecured.  A secured Network port\n           has an imposed limit on the maximum number of\n           addresses it can have.  See the object\n           object swPortAddressTableSize for this\n           upper maximum value.\"\"\",\n        }, # column\n        \"swPortConnectorType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"rj45\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bnc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aui\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"fiber-sc\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"fiber-st\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"empty\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"group\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"fddi-mic\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"fiber-mtrj\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of connector the port is currently using.\nIt is one of\n\nother    : none of the following (unknown)\nrj45     : common unshielded twisted pair connector\nbnc      : thin-coax (BNC)\naui      : thick-coax (AUI)\nfiber-sc : fiber SC connector\nfiber-st : fiber ST connector\nempty    : the port is not installed\ngroup    : the switch port contains a group of connectors\nfddi-mic : FDDI fiber optic connector\nfiber-mtrj : fiber MT-RJ connector.\"\"\",\n        }, # column\n        \"swPortACR\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.7\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects whether Accelerated Congestion Resolution (ACR)\nshould be used on the port.  When enabled(1), ACR\nallows for early frame discard when congestion is\nexperienced on a port, thus limiting the number of\nframes which may at any time be queued\nfor a single port.\n\nThe default value is disabled(2).\"\"\",\n        }, # column\n        \"swPortFullDuplex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"auto-negotiate\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"enabled-flow-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to enabled(1) to operate in full duplex mode: port\nwill allow simultaneous transmit and receive which can\ndouble its bandwidth. Set to disabled(2) to operate in\nnormal mode. Set to auto-negotiate(3) to allow the switch\nto negotiate with the other end of the connection.\n\nAuto-negotiate(3) may not be set on a 10Mbps port, or\na port whose connector type is not rj45. Doing so\nwill result in badValue.\n\nSet to enabled_flow_control(4) to allow a port to operate\nin full duplex and to allow a port to throttle packet\ntransmission according to flow control messages sent by\nthe other end of the link.\"\"\",\n        }, # column\n        \"swPortStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled-mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"suspended-linkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"suspended-jabber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"suspended-violation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"disabled-violation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"suspended-not-present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"suspended-not-recognized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"suspended-ringdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"suspended-stp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"disabled-self-test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"enable-degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"suspended-atm-lane-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"suspended-no-vlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"disabled-no-vlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"suspended-atm-network-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"suspended-disl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Current operational status of the port.  Possible values are:\nenabled              : normal operation (transmit and receive)\ndisabled-mgmt        : disabled by explicit management action\nsuspended-linkbeat   : suspended due to absence of linkbeat\nsuspended-jabber     : suspended because port is jabbering\nsuspended-violation  : suspended due to a secured address\n                       violation\ndisabled-violation   : disabled due to a secured address\n                       violation\nsuspended-not-present: there is no module inserted in the\n                       expansion slot.\nsuspended-not-recognized: there is an unrecognized module\n                       inserted in the expansion slot.\nreset                : the port is currently in the reset\n                       state.\nsuspended-ringdown   : suspended due to a ring-down condition\nsuspended-stp        : Spanning Tree Protocol non forwarding state\ndisabled-self-test   : disabled because port fails self-test\nenable-degraded      : connectivity still present but performance\n                       is lowered due to errors.\nsuspended-atm-lane-down: Non-trunk ATM module using LANE suspended\n                         because there is no active LANE client.\nsuspended-no-vlan    : the port is not assigned to a VLAN or the\n                       assigned VLAN does not exist.\ndisabled-no-vlan     : vlan of the port is suspended or does not exist.\nsuspended-atm-network-down: ATM module suspended due to ATM network down,\n                            or ATM physical layer down.\nsuspended-disl       : suspended while port is negotiating trunking\n                       mode using the Dynamic Inter Switch Link\n                       protocol.\n\nThe default value is enabled(1), unless POST has detected\na failure on the port, in which case, it is\ndisabled-self-test(9).  Any swPortStatus of type\ndisabled-xxxx (except disabled-self-test) is saved across\na system reset so a port may also come up with such a status.\"\"\",\n        }, # column\n        \"swPortAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled-mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"By explicit management action, change the port status\nto either\nenabled      : normal status (transmit and receive enabled)\ndisabled-mgmt: transmit and receive disabled.\"\"\",\n        }, # column\n        \"swPortLastStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled-mgmt\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"suspended-linkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"suspended-jabber\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"suspended-violation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"disabled-violation\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"suspended-not-present\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"suspended-not-recognized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"reset\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                    \"suspended-ringdown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"suspended-stp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"13\"\n                    },\n                    \"disabled-self-test\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"14\"\n                    },\n                    \"enable-degraded\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"15\"\n                    },\n                    \"suspended-atm-lane-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"16\"\n                    },\n                    \"suspended-no-vlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"17\"\n                    },\n                    \"disabled-no-vlan\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"18\"\n                    },\n                    \"suspended-atm-network-down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"19\"\n                    },\n                    \"suspended-disl\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of swPortStatus prior to its current value.\"\"\",\n        }, # column\n        \"swPortStatusChanges\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times swPortStatus has changed.\"\"\",\n        }, # column\n        \"swPortAddressingSecurity\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to enabled(1) to effect addressing security.\nSet to disabled(2) to leave the port unsecure\nAddressing security cannot be enabled on a port\nwhose type is Network and doing so will result\nin badValue.\"\"\",\n        }, # column\n        \"swPortAddressTableSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"132\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"132\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"For secured Network port, the address table size can range\nfrom 1 to 132.  For unsecured Network port, the size is\nunrestricted (shown as the value zero) and is, therefore,\nnot settable.  Any attempt to violate these rules will\nresult in badValue.\"\"\",\n        }, # column\n        \"swPortNumberOfLearnedAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of dynamically learned addresses on\nthe port.  The initial value is zero.\"\"\",\n        }, # column\n        \"swPortNumberOfStaticAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of statically assigned unicast addresses on\nthe port.  The initial value is zero.\"\"\",\n        }, # column\n        \"swPortEraseAddresses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noErase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"erase\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to erase(2) to delete all learned and assigned static\nunicast addresses the port currently has.  Setting the object\nto noErase(1) has no effect.  This object always returns\nnoErase(1) when read.\"\"\",\n        }, # column\n        \"swPortFloodUnregisteredMulticasts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to enabled(1) to allow the forwarding to this port\nframes addressed to multicast addresses that have\nnot been registered for the port.  Set to disabled(2) to\nfilter and discard such frames.  The default value is\nenabled(1).\"\"\",\n        }, # column\n        \"swPortFloodUnknownUnicasts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object controls the forwarding of unknown unicast\nframes to this port.\n\nWhen set to enabled(1) the switch, upon receiving a frame\nwith an unknown unicast destination address on another\nport, will transmit the frame to this port.\n\nWhen set to disabled(2), The switch will filter and\nnot transmit unknown unicast frames to this port.\n\nThe default value for this object is enabled(1).\"\"\",\n        }, # column\n        \"swPortMonitoring\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to enabled(1) to forward receive and transmit frames\non this port to the port identified by sysConfigMonitorPort.\nSet to disabled(2) to not monitor frame traffic on this port.\"\"\",\n        }, # column\n        \"swPortSecuredAddressViolations\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times a source address was seen on this port\nwhich duplicates a secured address configured on another port,\nplus the number of times a source address was seen on\nthis port which does not match any addresses secured\nfor the port.\"\"\",\n        }, # column\n        \"swPortLinkbeatStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"linkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noLinkbeat\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current port linkbeat status.\"\"\",\n        }, # column\n        \"swPortLinkbeatLosses\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times that the value of swPortLinkbeatStatus has\nchanged from linkbeat to noLinkbeat.\"\"\",\n        }, # column\n        \"swPortJabberStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notJabbering\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"jabbering\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current jabber function result.\"\"\",\n        }, # column\n        \"swPortJabbers\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of times that the jabber function has to be invoked\nbecause a frame transmitted from this port exceeded a certain\ntime duration.\"\"\",\n        }, # column\n        \"swPortClearStatistics\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noClear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"clear\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to clear(2) to zero out all statistics associated\nwith the port.  Per-port statistics are kept in this\nswPortTable as well as in the swPortRxStatTable,\nswPortTxStatTable, swPortTxCollTable, dot1dBasePortTable,\nand dot1dTpPortTable.  Setting this object to noClear(1)\nhas no effect.  This object always returns noClear(1)\nwhen read.\"\"\",\n        }, # column\n        \"swPortBroadcastStormBlocked\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"notBlocked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"blocked\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current broadcast forwarding status of this port.\nIf this port is blocked by broadcast storm control, the\nswitch drops all broadcasts received from the port.\"\"\",\n        }, # column\n        \"swPortSTPPortFastMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object configures the port into the Spanning Tree\nport-fast mode. When enabled(1), the STP can transition\nthe port's state directly from blocking to forwarding,\nand vice versa, without going through the intermediate\nlistening and learning states.\n\nThis object should only be enabled for a port that is\nconnected to a single workstation. A port that is\nattached to a network segment with multiple network\nnodes or bridges should have this object set to disabled(2)\nsince a temporary loop may occur when port changes state.\n\nIf this object is enabled on a trunk port, or a port\nbecomes a trunk port while this object has the enabled(1)\nvalue, the switch will ignore the configured value and\noperate the port as though its port-fast mode is disabled.\nIf the port subsequently loses its trunking status, the\nconfigured fast-mode value will then take effect.\n\nThe default value is enabled(1) for 10Mbps ports and\ndisabled(2) for 100Mbps ports.\"\"\",\n        }, # column\n        \"swPortHalfDuplexBackPressure\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.29\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Back pressure allows a port to force a collision when there\nis no buffer to receive frames. The port must be in half duplex\nto benefit from this enhancement. If the port is operating\nto be in full duplex, back pressure will not be applicable.\n\nThis object has been obsoleted and replaced with\nsysConfigHalfDuplexBackPressure.\"\"\",\n        }, # column\n        \"swPortDuplexStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"full-duplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"half-duplex\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"full-duplex-flow-control\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of duplex mode on this port. This shows\nthe result of full duplex auto-negotiation when\nswPortFullDuplex is set to auto-negotiate.\"\"\",\n        }, # column\n        \"swPortFullDuplexFlowControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.31\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The configuration of flow control on this port.\nFlow control allows the port to throttle packet\ntransmission according to flow control messages\nsent by the other end of the link.\n\nFor ports that do not support the feature, this\nobject is always set to disabled and is read-only.\"\"\",\n        }, # column\n        \"swPortEnhancedCongestionControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"adaptive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"moderate-aggressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aggressive\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Enhanced Congestion Control (ECC) reduces the transmit\nback-off period to allow the port to transmit more quickly,\nthereby reducing the transmit queue congestion\non the port. When set to disabled(2), ECC is disabled.\nWhen set to adaptive(1), ECC is enabled when the port's\ntransmit queue is full. Set to moderate-aggressive(3)\nto enable ECC with a back-off period that is divided by\na factor of 32. Set to aggressive(4) to enable ECC with\na back-off period that is divided by a factor of 1024.\n\nThe object is only applicable to 100Mbps ports of the\nswitch.\n\nThe default value is disabled(1).\"\"\",\n        }, # column\n        \"swPortBridgePriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the bridge port priority.\n\nWhen a port is a non-trunk, the value of this object\nis the same as dot1dStpPortPriority in RFC 1493 for\nthe port.\n\nWhen a port is operating as a VLAN trunk, the port\nmay participate in multiple spanning trees, one for\neach VLAN.  This port may use one of two priorities\nin each instance of spanning tree operating on the\nport. This object specifies one of two possible values\nthat can be used by as a bridge port priority for each\ninstance of spanning tree operating on a trunk port.\nThe alternate bridge port priority value is specified\nby swPortBridgePriorityAlternate. The value of\ndot1dStpPortPriority must be one of these two values.\"\"\",\n        }, # column\n        \"swPortBridgePriorityAlternate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the other priority that can be\nused as the port priority for each instance of spanning\ntree operating on a trunk port.   See the definition for\nswPortBridgePriority.\"\"\",\n        }, # column\n        \"swPortBridgePathCost\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the bridge port path cost.\n\nWhen a port is a non-trunk, the object's value is the\nsame as dot1dStpPortPathCost in RFC 1493 for the port.\n\nWhen a port is operating as a VLAN trunk, the port\nmay participate in multiple spanning trees, one for\neach VLAN.  This port may use one of two path cost\nin each instance of spanning tree operating on the\nport. This object specifies one of two possible values\nthat can be used by as a bridge port path cost for each\ninstance of spanning tree operating on a trunk port.\nThe alternate bridge port priority value is specified\nby swPortBridgePathCostAlternate. The value of this object\nmust be greater or equal to the value of\nswPortBridgePathCostAlternate. The value of\ndot1dStpPortPathCost must be one of these two values.\"\"\",\n        }, # column\n        \"swPortBridgePathCostAlternate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the other path cost that can be\nused as the port path cost for each instance of spanning\ntree operating on a trunk port.   The value of this object\nmust be less than or equal to the value of swPortBridgePriority.\nSee the definition for swPortBridgePriority.\"\"\",\n        }, # column\n        \"swPortIfIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of MIB-II ifIndex object\ncorresponding to this port.\"\"\",\n        }, # column\n        \"swPortInternal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.1.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This indicates if the port is an internal port.\nAn internal port is one that does not allow\na direct physical connection to another device.\nAn example of an internal port is a switched port of\na slot with a repeater module.\"\"\",\n        }, # column\n        \"switchPortRxStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of switch port Receive statistics entries.\"\"\",\n        }, # table\n        \"swPortRxStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"swPortRxStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"Receive statistics for an individually switched port.\"\"\",\n        }, # row\n        \"swPortRxStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A number greater than zero identifying an individually\nswitched port.  The same value of a port index variable\nfor any of the port tables in this MIB group selects\nthe same port.\"\"\",\n        }, # column\n        \"swPortRxTotalFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of all frames that are successfully received.\nThis does not include frames received with frame-too-long,\nFCS, length or alignment errors, or frames lost due to\ninternal MAC sublayer error.\"\"\",\n        }, # column\n        \"swPortRxTotalOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in all octets that are\nsuccessfully received.  This does not include octets in\nframes received with frame-too-long, FCS, length or\nalignment errors, or frames lost due to internal MAC\nsublayer error.\"\"\",\n        }, # column\n        \"swPortRxTotalOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortRxTotalOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortRxUnicastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully received and\nare directed to a unicast address.  This does not\ninclude frames received with frame-too-long,\nFCS, length or alignment errors, or frames lost due to\ninternal MAC sublayer error.\"\"\",\n        }, # column\n        \"swPortRxUnicastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in unicast frames that are\nsuccessfully received.  This does not include octets in\nframes received with frame-too-long, FCS, length or\nalignment errors, or frames lost due to internal MAC\nsublayer error.\"\"\",\n        }, # column\n        \"swPortRxUnicastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortRxUnicastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortRxBroadcastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully received and are\ndirected to the broadcast address.  This does not\ninclude frames received with frame-too-long, FCS,\nlength or alignment errors, or frames lost due to\ninternal MAC sublayer error.\"\"\",\n        }, # column\n        \"swPortRxBroadcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in broadcast frames that\nare successfully received.  This does not include octets in\nframes received with frame-too-long, FCS, length or\nalignment errors, or frames lost due to internal MAC\nsublayer error.\"\"\",\n        }, # column\n        \"swPortRxBroadcastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortRxBroadcastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortRxMulticastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully received and are\ndirected to a multicast address.  This does not\ninclude frames received with frame-too-long, FCS,\nlength or alignment errors, or frames lost due to\ninternal MAC sublayer error.\"\"\",\n        }, # column\n        \"swPortRxMulticastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in multicast frames that\nare successfully received.  This does not include octets in\nframes received with frame-too-long, FCS, length or\nalignment errors, or frames lost due to internal MAC\nsublayer error.\"\"\",\n        }, # column\n        \"swPortRxMulticastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortRxMulticastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortRxForwardedFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Count of frames received and forwarded to some other port(s)\nfor transmission.\"\"\",\n        }, # column\n        \"swPortRxFilteredFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that were discarded because\n1) the frames were local to the segment, 2) no destination\naddress matches could be found and no ports were set\nup to accept such frames, 3) the destination addresses\nmatched but source port explicit information prevented\ntheir forwarding, 4) the destination addresses matched\nbut no destination ports have been specified for them,\n5) the destinations were non-registered multicasts and no\nports were configured to accept them.\"\"\",\n        }, # column\n        \"swPortRxNoBufferDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that were discarded due\nto a lack of frame buffer resources in the\n                switch's forwarding engine.\"\"\",\n        }, # column\n        \"swPortRxFCSErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that are an integral number\nof octets in length but do not pass the Frame Check\nSequence test.\"\"\",\n        }, # column\n        \"swPortRxAlignmentErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that are not an integral\nnumber of octets in length and do not pass the Frame\nCheck Sequence test.\"\"\",\n        }, # column\n        \"swPortRxFrameTooLongs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that exceed the maximum\npermitted frame size as defined by the corresponding\nportMtu object.\"\"\",\n        }, # column\n        \"swPortRxRunts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.2.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames received that are shorter than the\nminimum permitted frame size.  Runts usually indicate\ncollision fragments, a normal network event.\"\"\",\n        }, # column\n        \"switchPortTxStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of switch port Transmit statistics entries.\"\"\",\n        }, # table\n        \"swPortTxStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"swPortTxStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"Transmit statistics for an individually switched port.\"\"\",\n        }, # row\n        \"swPortTxStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A number greater than zero identifying an individually\nswitched port.  The same value of a port index variable\nfor any of the port table in this MIB group selects\nthe same port.\"\"\",\n        }, # column\n        \"swPortTxTotalFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of all frames that are successfully transmitted.\"\"\",\n        }, # column\n        \"swPortTxTotalOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in all frames that are\nsuccessfully transmitted.\"\"\",\n        }, # column\n        \"swPortTxTotalOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortTxTotalOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortTxUnicastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully transmitted and\nare directed to a unicast address.\"\"\",\n        }, # column\n        \"swPortTxUnicastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in unicast frames that are\nsuccessfully transmitted.\"\"\",\n        }, # column\n        \"swPortTxUnicastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortTxUnicastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortTxBroadcastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully transmitted and are\ndirected to the broadcast address.\"\"\",\n        }, # column\n        \"swPortTxBroadcastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in broadcast frames that\nare successfully transmitted.\"\"\",\n        }, # column\n        \"swPortTxBroadcastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortTxBroadcastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortTxMulticastFrames\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that are successfully transmitted and are\ndirected to a multicast address.\"\"\",\n        }, # column\n        \"swPortTxMulticastOctets\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of data and padding octets in multicast frames that\nare successfully transmitted.\"\"\",\n        }, # column\n        \"swPortTxMulticastOctetsWraps\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the value in swPortTxMulticastOctets has\nrolled to zero.\"\"\",\n        }, # column\n        \"swPortTxDeferrals\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which the first transmission\nattempt is delayed because the medium is busy.\"\"\",\n        }, # column\n        \"swPortTxSingleCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of successfully transmitted frames for which\ntransmission is inhibited by exactly one collision.\"\"\",\n        }, # column\n        \"swPortTxMultipleCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of successfully transmitted frames for which\ntransmission is inhibited by more than one collision.\"\"\",\n        }, # column\n        \"swPortTxLateCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times that a collision is detected later\nthan 512 bit-times into the transmission of a frame.  A\nlate collision is also considered as a (generic) collision\nfor purposes of other collision-related statistics.\"\"\",\n        }, # column\n        \"swPortTxExcessiveCollisions\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission fails due to\nexcessive collisions.  The threshold is either 16 in\nthe normal mode of operation, or 4 in the\nEnhanced Congestion Control (ECC) mode.  Thus,\nthis count is the sum of the corresponding instances of\nthe swPortTxExcessiveCollision16s object,\nand the swPortTxExcessiveCollision4s object.\"\"\",\n        }, # column\n        \"swPortTxExcessiveDeferrals\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission is deferred\nfor an excessive period of time.\"\"\",\n        }, # column\n        \"swPortTxExcessiveCollision16s\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that due to excessive collisions are\nnot transmitted successfully.  Here, the normal threshold\nof 16 collisions is used to determine the status of the\ntransmission.  A swPortTxExcessiveCollision16s is counted\ntwice, i.e., both as a swPortTxExcessiveCollision16s and\nas a swPortTxExcessiveCollisions.\"\"\",\n        }, # column\n        \"swPortTxExcessiveCollision4s\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that due to excessive collisions are not\ntransmitted successfully.  Here, the Enhanced Congestion\nControl threshold of 4 collisions is used to determine the\nstatus of the transmission.  A swPortTxExcessiveCollision4s is\ncounted twice, i.e., both as a swPortTxExcessiveCollision4s\nand as a swPortTxExcessiveCollisions.\"\"\",\n        }, # column\n        \"swPortTxQueueFullDiscards\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames that cannot be transmitted because the\ntransmit queue for the port is full.\"\"\",\n        }, # column\n        \"swPortTxErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.3.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which transmission fails due\nto an internal MAC sublayer transmit error.  A frame is\nonly counted by an instance of this object if it is not\ncounted by the corresponding instance of either\nthe swPortTxLateCollisions object,\nthe swPortTxExcessiveCollisions object,\nthe swPortTxExcessiveCollision16s object,\nthe swPortTxExcessiveCollision4s object,\nor the swPortTxExcessiveDeferrals object.\"\"\",\n        }, # column\n        \"switchPortTxCollTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A collection of collision histograms for the switch ports.\"\"\",\n        }, # table\n        \"swPortTxCollEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"swPortTxCollIndex\",\n                \"swPortTxCollCount\",\n            ],\n            \"description\" :\n                \"\"\"This table provides a per port histogram of collision\nactivity.  The swPortTxCollIndex index (1 to\nsysInfoNumberOfSwitchPorts) identifies an individually\nswitched port, and the swPortTxCollCount index (1 to 16)\ndenotes the number of collisions experienced in transmitting\na frame.  Each table element, then, contains a counter\nthat denotes the number of frames that have\nexperienced a specific number of collisions.\"\"\",\n        }, # row\n        \"swPortTxCollIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A number greater than zero identifying an individually\nswitched port.  The same value of a port index variable\nfor any of the port tables in this MIB group selects\nthe same port.\"\"\",\n        }, # column\n        \"swPortTxCollCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of per-frame media collisions for which a\nparticular collision histogram cell represents the\nfrequency on a particular port.\"\"\",\n        }, # column\n        \"swPortTxCollFrequencies\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of frames for which the transmission (successful\nor otherwise) on a particular port is accompanied by a\nparticular number of media collisions.\"\"\",\n        }, # column\n        \"netMgmt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4\",\n        }, # node\n        \"netMgmtIpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's administrative IP address.  The\nswitch may automatically discover a value for this object\nusing the BootStrap protocol (BOOTP).  The object value is\nalso duplicated in the MIB-II ipAddrTable.\n\nThe following applies to switches operating with\nfirmware version smaller than 6.00:\n\n    When VLANs are present, The switch may be configured\n    with up to 4 administrative IP addresses, one per VLAN.\n    This object, in this case, configures the IP address\n    for the first VLAN.  See the object vlanTable for\n    how to configure the other IP addresses.\n\n    Assigning multiple VLAN IP addresses is only necessary\n    if the VLANs in use represent separate physical IP subnets.\n    This allows a management station residing on a VLAN to\n    directly manage the switch without the need for an\n    intervening router/gateway.\nA write to this object will take effect immediately,\nreplacing the previous address, if any.\"\"\",\n        }, # scalar\n        \"netMgmtIpSubnetMask\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's administrative IP subnet mask.  The\nswitch may automatically discover a value for this object\nusing the BootStrap protocol (BOOTP).  The object value is\nalso duplicated in the MIB-II ipAddrTable.\n\nThe following applies to switches operating with\nfirmware version smaller than 6.00:\n\n    When VLANs are present, The switch may be configured\n    with up to 4 administrative IP subnet masks, one per VLAN.\n    This object, in this case, configures the subnet mask\n    for the first VLAN.  See the object vlanTable for\n    how to configure the other subnet masks.\n\n    Assigning multiple VLAN subnet masks is only necessary\n    if the VLANs in use represent separate physical IP subnets.\n\nA write to this value will take effect immediately.  The\ndefault value is 0.0.0.0, or no subnet mask.\"\"\",\n        }, # scalar\n        \"netMgmtDefaultGateway\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The default gateway IP address is the address of the next\nhop router the switch uses to reach a non-local IP\nhost when the switch does not know the return route. During\na normal management protocol exchange with an IP client\nhost, the switch simply sends its response onto the same\nroute from which the request was received.  The default\ngateway route is only used when the switch itself\ninitiates an exchange, e.g., a TFTP upgrade, with the client.\n\nThe default gateway IP address is global to all VLANs,\nwhich is unlike the unique per-VLAN management IP address\nand subnet mask.\n\nA write to this object will take effect immediately,\nreplacing the previous address, if any.  The default is\n0.0.0.0, or no address.\"\"\",\n        }, # scalar\n        \"netMgmtEnableAuthenTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the switch is permitted\nto generate authenticationFailure traps.\nThe value of this object overrides any\nconfiguration information; as such, it provides a\nmeans whereby all authenticationFailure traps may\nbe disabled.\n\nThis object manipulates the same value for the\nsnmpEnableAuthenTraps object instance.  The object\nis respecified in this group for convenience.  The\ndefault value is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtEnableLinkTraps\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether the switch is permitted\nto generate linkUp/linkDown traps.\nThe value of this object overrides any configuration\ninformation; as such, it provides a means whereby all\nlinkUp/linkDown traps may be disabled.  The default\nvalue is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtConsoleInactTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of seconds of Management Console session\ninactivity to wait before ending the session.  Once a\nsession has ended, the user must resupply the Console\npassword to regain access.  A value of 0 indicates no\ntimeout, and is the default value.\"\"\",\n        }, # scalar\n        \"netMgmtConsolePasswordThresh\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of consecutive invalid password attempts\nallowed before the Management Console is shut down\n(kept silent) for a configured duration.  A zero value\npermits unlimited attempts.  The default value is 3.\"\"\",\n        }, # scalar\n        \"netMgmtConsoleSilentTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The number of minutes during which the Management\nConsole will be unavailable after repeated failed\nattempts to logon.  A zero value specifies no silent\ntime, and is the default value.\"\"\",\n        }, # scalar\n        \"netMgmtModemInitString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This is the initialization string used to configure an\nattached modem.  Specify this string if the modem is not\nHayes compatible.  Only the initialization commands need\nto be specified (i.e., do NOT specify any modem prefix\nstring such as the AT attention sequence, or any suffix\nsuch as the CR character).\n\nThis string takes effect after every line hangup.\"\"\",\n        }, # scalar\n        \"netMgmtModemDialString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"48\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This string contains a phone number which is used to\nestablish a modem connection with a remote site.  Only\nthe phone number needs to be specified (i.e., do NOT\nspecify any dial prefix string such as ATDT).\n\nLeave this string empty if this dial-out capability is\nnot desired.  This string takes effect after every line\nhangup.\"\"\",\n        }, # scalar\n        \"netMgmtModemDialDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65500\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies a delay in seconds between every\ndial-out failure.  The value zero indicates an infinite\ndelay.  Normally, the switch will attempt a dial-out\nif the netMgmtModemDialString object is non-empty.  If the\nremote site then fails to answer, and auto-answer has\nbeen disabled on this system, the system will retry the\ndial-out attempt after this delay has passed.\n\nIf auto-answer is enabled and the first dial-out attempt\nfails, the system will stop further dial-out attempts and\nimmediately go into auto-answer mode.  The default value\nis 300 seconds, or 5 minutes.\"\"\",\n        }, # scalar\n        \"netMgmtModemAutoAnswer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies whether the system should be in\nauto-answer mode and only accepts incoming calls.  Note\nthat the system will always attempt a dial-out first\nif the netMgmtModemDialString object is non-empty.  The\ndefault value is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtSetClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table (4 entries) containing a list of IP addresses or DNS\nname of workstations permitted to issue SET requests.  Such a\nworkstation is called a Set client.  If this table is\nempty then any SET request with a matching SET community\nstring is allowed.  If at least one Set client is specified,\nthen an incoming SET request must have its source IP\naddress or name matched against an entry in this table before the\nSET is allowed.\n\nAn Set client entry whose IP address is 0.0.0.0 is considered\ninvalid and will be ignored.\n\nThis table is considered empty when all Set client\naddresses are zeroes (0.0.0.0). and DNS names are empty\"\"\",\n        }, # table\n        \"netMgmtSetClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"netMgmtSetClientIndex\",\n            ],\n            \"description\" :\n                \"\"\"An IP address of a manager station allowed to issue\nSET requests to this management agent.\"\"\",\n        }, # row\n        \"netMgmtSetClientIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identification of a SET client entry.\"\"\",\n        }, # column\n        \"netMgmtSetClientAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The SET client is assumed to be Internet UDP/IP based.\nAnd this is the client's IP address. Setting this object\nwill cause the value in the corresponding netMgmtSetClientName\nobject to cleared.\"\"\",\n        }, # column\n        \"netMgmtSetClientStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to the value invalid(2) has the effect\nof invalidating the corresponding entry.  That is, it\neffectively disassociates the IP address identified with\nsaid entry from the table.  It is an implementation\nspecific matter as to whether the agent removes an\ninvalidated entry from the table.  Accordingly, management\nstations must be prepared to receive tabular information\nfrom agents that corresponds to entries not currently in use.\"\"\",\n        }, # column\n        \"netMgmtSetClientName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.13.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Set Client's DNS host name. The switch will resolve the\nhost name to IP address via DNS and copy the resolved IP\naddress into netMgmtSetClientAddr object. Therefore the\nvalue of this object overwrites any value in netMgmtSetClientAddr.\nIf netMgmtSetClientAddr is set then value of this object\nwill be cleared.\"\"\",\n        }, # column\n        \"netMgmtTrapClientTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table (4 entries) containing a list of Network Management\nStations that are to receive traps generated by this\nNetwork Management Agent.  Such an NMS is called a\nTrap client.\n\nAn Trap client entry whose IP address is 0.0.0.0 and DNS name\nis empty is considered invalid and will be ignored.\"\"\",\n        }, # table\n        \"netMgmtTrapClientEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"netMgmtTrapClientIndex\",\n            ],\n            \"description\" :\n                \"\"\"A destination address and community string to a particular\ntrap client.\"\"\",\n        }, # row\n        \"netMgmtTrapClientIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identification of a trap client entry.\"\"\",\n        }, # column\n        \"netMgmtTrapClientAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The trap client is assumed to be Internet UDP/IP based.\nAnd this is the client's IP address. Setting a value for\nthis object will cause the value of netMgmtTrapClientName\nto be cleared (set to null string).\"\"\",\n        }, # column\n        \"netMgmtTrapClientComm\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Community string used for traps sent to this trap client.\"\"\",\n        }, # column\n        \"netMgmtTrapClientStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"invalid\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"permanent\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to the value invalid(2) has the effect\nof invalidating the corresponding entry.  That is, it\neffectively disassociates the IP address/community string\nidentified with said entry from the table.  It is an\nimplementation specific matter as to whether the agent\nremoves an invalidated entry from the table.  Accordingly,\nmanagement stations must be prepared to receive tabular\ninformation from agents that corresponds to entries not\ncurrently in use.\"\"\",\n        }, # column\n        \"netMgmtTrapClientName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Trap Client's DNS host name. The switch will resolve the\nhost name to an IP address via DNS and copy the resolved IP\naddress into netMgmtTrapClientAddr object. If\nnetMgmtTrapClientAddr is set the value of this object\nwill be cleared (set to null string).\"\"\",\n        }, # column\n        \"netMgmtCdpHoldTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The hold time is the amount of time that a neighboring device\nkeeps the CDP neighbor information received from this switch.\nIf the hold time expires before receiving a new CDP message\nfrom this switch then the neighbor device will remove this\nswitch as a neighbor.\n\nThe default value is 180 seconds.\"\"\",\n        }, # scalar\n        \"netMgmtCdpTransmissionTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.16\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"900\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"900\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The transmission time specifies the interval that the switch\nwill trasnmit CDP messages from its ports.\n\nThe default value is 60 seconds. \"\"\",\n        }, # scalar\n        \"netMgmtCgmpEnable\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable allows user to enable or disable Cisco\nGroup Management Protocol (CGMP). Enabling CGMP will\nresult in the deletion of all multicast addresses of form\n0x01-00-5E-XX-XX-XX, that may have been registered on the\nswitch.  The default value is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtCgmpRouterHoldTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"5\",\n                        \"max\" : \"900\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"5\",\n                        \"max\" : \"900\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Multicast routers that support CGMP will send CGMP\njoin message to advertise themselves to switches within\na network. A switch that receives a CGMP message will save\nthe information and set a timer equal to the router hold\ntime. When the last router hold time expires, the switch will\nremove all IP multicast groups learned from CGMP.\n\nThe default value is 600 seconds.\"\"\",\n        }, # scalar\n        \"netMgmtVlan\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1023\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1023\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The current VLAN for network management. This defaults\nto 1.\"\"\",\n        }, # scalar\n        \"netMgmtEnableRIP\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.20\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object enables and disables Routing Information\nProtocol (RIP) listener to automatically discover\nIP gateways. The default value is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtDomainServer1IpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of a Domain Name Server (DNS) which the system\nuses to resolve domain names to IP addresses. A set on this\nobject takes effect the next time the system has to resolve a\ndomain name. A value of all zeroes (0.0.0.0) specifies no\ndomain server.\"\"\",\n        }, # scalar\n        \"netMgmtDomainServer2IpAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of a second Domain Name Server (DNS) which\nthe system uses to resolve domain names to IP addresses. A set\non this object takes effect the next time the system needs to\nresolve a domain name. A value of all zeroes (0.0.0.0) specifies\nno domain name server.\"\"\",\n        }, # scalar\n        \"netMgmtDefaultSearchDomain\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string of up to 63 characters specifying a default domain\nsearch path. When switch needs to resolve a domain name\nthat is not fully specified, it appends this default domain\npath to the name and continues the resolution attempt.\"\"\",\n        }, # scalar\n        \"netMgmtHttpServerAdminState\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable enables or disables the HTTP server\ninterface. The default value is enabled(1).\"\"\",\n        }, # scalar\n        \"netMgmtHttpPort\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.4.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This variable allows the user to configure a specific port\non which the HTTP server will listen for TCP connections.\nBy default, the server listens on TCP port 80.\"\"\",\n        }, # scalar\n        \"upgrade\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5\",\n        }, # node\n        \"upgradeFirmwareSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"eprom\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"flash\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Selects the source from which firmware is read.  There are 2\npossible values, eprom(1) and flash(2).  A valid selection\nwill cause a system reset, followed by the execution of the\nselected firmware.  The default selection is eprom(1).\nA valid selection is defined as:\n\no a selection which yields a firmware that is\n  different from the one currently executing, or\n\no selection of flash(2), for which flash memory is available\n  and contains a checksum verified firmware.\"\"\",\n        }, # scalar\n        \"upgradeEPROMRevision\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Returns the revision number of the switch system\nfirmware residing in EPROM.  The string has the following\nformat 'V2.01'.\"\"\",\n        }, # scalar\n        \"upgradeFlashSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The size of available FLASH memory in the system,\nin kilobytes.  For example: 128 equals 131072 bytes\n(128 bytes times 1024).\"\"\",\n        }, # scalar\n        \"upgradeFlashBankStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Text string indicating status and version of last upgrade\nto flash memory, including the source of the upgrade,\nversion and the date and time of upgrade.  The string is in\nnet ASCII and conforms exactly to one of the following format,\ndepending upon the source of the upgrade:\n\nV2.01 written on Mon Sep 21 07:02:01 1992 from serial terminal: valid\n\nor\n\nV2.01 written on Tue Dec 01 15:19:15 1992 from 192.009.200.200: invalid\"\"\",\n        }, # scalar\n        \"upgradeTFTPServerAddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The IP address of a TFTP server from which a firmware\nimage can be downloaded.  The download may be initiated\nby setting the upgradeTFTPInitiate to upgrade(1), or via\nan out-of-band management action.  The default value is\n0.0.0.0, or no address. Setting this object also sets\nthe value of upgradeTFTPServerName to a string of the same\nvalue as this object.\"\"\",\n        }, # scalar\n        \"upgradeTFTPLoadFilename\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of the file containing a firmware upgrade\nimage on the host whose address is given by\nupgradeTFTPServerAddress.  The default value is\nan empty string, or no filename.\"\"\",\n        }, # scalar\n        \"upgradeTFTPInitiate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"upgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noUpgrade\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to noUpgrade(2) results in no action.\nWhen set to upgrade(1), the switch will attempt\nto download a firmware upgrade image from the server whose\naddress is given by upgradeTFTPServerAddress.  The image is\nfound in the file whose name is given by\nupgradeTFTPLoadFilename.  Both upgradeTFTPServerAddress and\nupgradeTFTPLoadFilename must be non-empty for the upgrade\nto proceed.\n\nThis object always returns noUpgrade(2) when read.\"\"\",\n        }, # scalar\n        \"upgradeAutoExecute\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Indicates whether a newly upgraded firmware version\nshould immediately be selected for execution.  When\nthis object is disabled(2), the user must explicitly\nset the upgradeFirmwareSource object to select and run\na particular firmware version after an upgrade.\n\nWhen this object is enabled(1), following a successful\nfirmware upgrade the system will automatically switch\nto run the new firmware.  The default value is enabled(1).\"\"\",\n        }, # scalar\n        \"upgradeTFTPAccept\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object controls the second method of firmware\nupgrade using TFTP.  The switch has a UDP\nListener on the well known TFTP server port, and can\naccept upgrade requests from any workstation with Internet\nProtocol TFTP software.\n\nThis object enables or disables the TFTP Upgrade Listener.\nWhen disabled(2), no TFTP workstations can download\na firmware upgrade image to the switch.  The default value\nis enabled(1).\"\"\",\n        }, # scalar\n        \"upgradeTFTPServerName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.5.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"30\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The name of a TFTP server DNS name from which a firmware\nimage can be downloaded. The download may be initiated\nby setting the upgradeTFTPInitiate to upgrade(1), or via\nan out-of-band management action. The value of this object\nis the same as the value of sysConfigTftpServerName.\n\nThe value of upgradeTFTPServerAddress object is set to zero\nwhen this object is set.\"\"\",\n        }, # scalar\n        \"vlan\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6\",\n        }, # node\n        \"vlanMaxSupported\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of virtual LANs supported.\"\"\",\n        }, # scalar\n        \"vlanAllowMembershipOverlap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to enabled(1), the switch will allow a port\nto be member of more than one VLAN.  Note that overlapped\nVLANs may lead to loss of connectivity in the Spanning\nTree topology, and should only be used with caution.\n\nWhen set to disabled(2), the switch will ensure that\nno one port can simultaneously be member of more than one\nVLAN.\n\nThis object is not supported by switches operating\nwith firmware version greater than or equal to 6.00.\n\nThe default value is disabled(2).\"\"\",\n        }, # scalar\n        \"vlanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for a VLAN.\"\"\",\n        }, # table\n        \"vlanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vlanIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration parameters for a VLAN.\"\"\",\n        }, # row\n        \"vlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from 1 to vlanMaxSupported identifying a\nconfigurable VLAN.\"\"\",\n        }, # column\n        \"vlanName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"60\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A descriptive string of up to 60 characters used by the\nnetwork administrator to name a VLAN.\n\nThis object is not supported by switches operating\nwith firmware version greater than or equal to 6.00\"\"\",\n        }, # column\n        \"vlanMemberPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of the switch's member ports for the VLAN.\nA port may reside within multiple VLANs only if\nthe object vlanAllowMembershipOverlap has been set\nto enabled.\n\nThis object cannot be used to configure VLAN\nmembership.  The table vlanMemberTable is used\nfor that purpose.\n\nEach octet within the value of this object specifies a\nset of eight ports, with the first octet specifying ports\n1 through 8, the second octet specifying ports 9\nthrough 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents the\nhighest numbered port.  Thus, each port of the\nVLAN is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that port is included in the set of\nports; the port is not included if its bit has a\nvalue of '0'.\n\nInitially, a single VLAN with all ports as its\nmembers is defined.\n\nThis object is not supported by switches operating\nwith firmware version greater than or equal to 6.00\"\"\",\n        }, # column\n        \"vlanIpAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's administrative IP address in this VLAN.\nNote that once a value has been set for this object, the\nnext write will only take effect after a system reset.\nThe default value is the same as the address contained in\nnetMgmtIpAddress.\n\nThis object is not supported by switches operating\nwith firmware version greater than or equal to 5.35\"\"\",\n        }, # column\n        \"vlanIpSubnetMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The switch's administrative IP subnet mask in this\nVLAN.  A change in the subnet mask at any\ntime will immediately take effect.  The default value\nis the same as the mask contained in netMgmtIpSubnetMask.\n\nThis object is not supported by switches operating\nwith firmware version greater than or equal to 5.35\"\"\",\n        }, # column\n        \"vlanBridgeTemplate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The bridge parameter template used by the VLAN. By default,\na VLAN uses template 1. The value of this object must be\none of the values of bridgeTemplateIndex.\n\nThis object is supported only by switches operating\nwith firmware version greater than or equal to 7.00\"\"\",\n        }, # column\n        \"vlanStpAdmin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates if STP is enabled or disabled for the\nVLAN.\n\nThis object is supported only by switches operating\nwith firmware version greater than or equal to 7.00\"\"\",\n        }, # column\n        \"vlanMemberTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port membership configuration entries for a VLAN.\"\"\",\n        }, # table\n        \"vlanMemberEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"vlanMemberIndex\",\n                \"vlanMemberPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Port membership configuration parameters for a VLAN.\"\"\",\n        }, # row\n        \"vlanMemberIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from 1 to vlanMaxSupported identifying a\nconfigurable VLAN.   The same value of a VLAN index\nvariable for any of the VLAN tables in this MIB group selects\nthe same VLAN.\"\"\",\n        }, # column\n        \"vlanMemberPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number greater than zero identifying an individually\nswitched port.  The same value of a port index variable\nfor any of the port tables selects the same port.\"\"\",\n        }, # column\n        \"vlanMemberPortOfVlan\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port identified by vlanMemberPortIndex becomes\na member of the VLAN identified by vlanMemberIndex\nwhen this object is set to true(1).  The same port\nceases to be member of that VLAN when the object\nis set to false(2).\n\nAll ports in the switch must belong to some VLAN.\nConsequently, the switch will return badValue if\nthis object is used such to remove the port from all\nmembership lists.\n\nNote that when vlanAllowMembershipOverlap is disabled,\na port can only be member of exactly one VLAN.\nIn this case, setting vlanMemberPortOfVlan to true(1) for\na port adds the port to the membership list of the\ncurrent VLAN and removes the same port from all other VLAN\nmembership lists.\n\nWhen vlanAllowMembershipOverlap is enabled, a port may\nreside in multiple VLANs.  Setting vlanMemberPortOfVlan\nto true(1) in this case adds the port to the membership\nlist of the current VLAN and does not change other\nVLAN membership lists.\"\"\",\n        }, # column\n        \"bridgeTemplateMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of bridge templates supported.\"\"\",\n        }, # scalar\n        \"bridgeTemplateTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of bridge configuration templates.\"\"\",\n        }, # table\n        \"bridgeTemplateEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bridgeTemplateIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration parameters for a bridge parameter template.\"\"\",\n        }, # row\n        \"bridgeTemplateIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from 1 to bridgeTemplateMax identifying a\nconfigurable bridge parameters template.\"\"\",\n        }, # column\n        \"bridgeTemplatePriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"See dot1dStpPriority in RFC 1493. The value of\ndot1dStpPriority must match the value of an instance\nof this object.\"\"\",\n        }, # column\n        \"bridgeTemplateMaxAge\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"See dot1dStpBridgeMaxAge in RFC 1493. The value of\ndot1dStpBridgeMaxAge must match the value of an instance\nof this object.\"\"\",\n        }, # column\n        \"bridgeTemplateHelloTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"See dot1dStpBridgeHelloTime in RFC 1493. The value of\ndot1dStpBridgeHelloTime must match the value of an instance\nof this object.\"\"\",\n        }, # column\n        \"bridgeTemplateForwardDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.6.6.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"BRIDGE-MIB\", \"name\" : \"Timeout\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"See dot1dStpBridgeForwardDelay in RFC 1493. The value of\ndot1dStpBridgeForwardDelay must match the value of an instance\nof this object.\"\"\",\n        }, # column\n        \"bandwidthUsage\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7\",\n        }, # node\n        \"bandwidthUsageCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bandwidth currently consumed.  The measurement unit is in\nmegabits per second (1,000,000 bits/second).\"\"\",\n        }, # scalar\n        \"bandwidthUsageMaxPeakEntries\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of entries bandwidthUsagePeakTable\ncan have.\"\"\",\n        }, # scalar\n        \"bandwidthUsagePeakInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"onehour\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"threehours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"sixhours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"twelvehours\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"12\"\n                    },\n                    \"oneday\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"24\"\n                    },\n                    \"twodays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"48\"\n                    },\n                    \"threedays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"72\"\n                    },\n                    \"fourdays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"96\"\n                    },\n                    \"fivedays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"120\"\n                    },\n                    \"sixdays\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"144\"\n                    },\n                    \"oneweek\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"168\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object specifies the length of time which forms a\npeak bandwidth capture interval.  The default is\noneday(24).  A write to this object with any new value\nrestarts the peak bandwidth capture at the first interval.\nIn other word, the bandwidthUsagePeakTable will be cleared\nand entry number 1 will record the peak for a new first\ninterval.\"\"\",\n        }, # scalar\n        \"bandwidthUsagePeakRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noRestart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"restart\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Set to restart(2) to clear the bandwidthUsagePeakTable\nand restart the peak bandwidth capturing at the current\ninterval.  No action will be taken if this object is set\nto noRestart(1).  This object always returned noRestart(1)\nwhen read.\"\"\",\n        }, # scalar\n        \"bandwidthUsageCurrentPeakEntry\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A value identifying an instance of the bandwidthUsagePeakIndex\nof the bandwidthUsagePeakTable where the peak bandwidth\nmeasurement is most current.\"\"\",\n        }, # scalar\n        \"bandwidthUsagePeakTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of entries containing peak bandwidth usages in\na number of time periods.\"\"\",\n        }, # table\n        \"bandwidthUsagePeakEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bandwidthUsagePeakIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about peak bandwidth usage in a time period.\"\"\",\n        }, # row\n        \"bandwidthUsagePeakIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from 1 to bandwidthUsageMaxPeakEntries identifying a\nparticular bandwithUsagePeakEntry.\"\"\",\n        }, # column\n        \"bandwidthUsageStartTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Up to 32 characters containing the date and time that marks\nthe start of this capture interval.  The string is in net\nASCII and conforms exactly to the following format:\n\nMon Sep 21 07:00:00 1992\"\"\",\n        }, # column\n        \"bandwidthUsagePeak\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The highest bandwidth utilized since the time given in\nbandwidthUsageStartTime or last cleared.  The measurement\nunit is in megabits per second (1,000,000 bits/second).\"\"\",\n        }, # column\n        \"bandwidthUsagePeakTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.7.6.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Up to 32 characters containing the date and time the value\nin bandwidthUsagePeak is captured.  The string is in net\nASCII and conforms exactly to the following format:\n\nMon Sep 21 07:02:01 1992\"\"\",\n        }, # column\n        \"bridgeGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8\",\n        }, # node\n        \"bridgeGroupMaxSupported\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The maximum number of bridge groups supported.\nThe switch currenlty supports up to 4 bridge groups.\nThis object represents the upper bound of the index\ninto the bridgeGroupTable.\"\"\",\n        }, # scalar\n        \"bridgeGroupAllowMembershipOverlap\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When set to enabled(1), the switch will allow a port\nto be member of more than one bridge group.  Note that\noverlapped bridge groups may lead to loss of connectivity\nin the Spanning Tree topology, and should only be used\nwith caution.\n\nWhen set to disabled(2), the switch will ensure that\na port can belong to one and only one bridge group.\n\nThe default value is disabled(1).\"\"\",\n        }, # scalar\n        \"bridgeGroupTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of configuration entries for a bridge group.\"\"\",\n        }, # table\n        \"bridgeGroupEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bridgeGroupIndex\",\n            ],\n            \"description\" :\n                \"\"\"Configuration parameters for a bridge group.\"\"\",\n        }, # row\n        \"bridgeGroupIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number from 1 to bridgeGroupMaxSupported identifying a\nconfigurable bridge group.\"\"\",\n        }, # column\n        \"bridgeGroupMemberPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"OctetString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The set of the switch's member ports for the bridge group.\nA port may reside within multiple bridge groups only if\nthe object bridgeGroupAllowMembershipOverlap has been set\nto enabled(1).\n\nThis object cannot be used to configure bridge group\nmembership.  The table bridgeGroupMemberTable is used\nfor that purpose.\n\nEach octet within the value of this object specifies a\nset of eight ports, with the first octet specifying ports\n1 through 8, the second octet specifying ports 9\nthrough 16, etc.   Within each octet, the most\nsignificant bit represents the lowest numbered\nport, and the least significant bit represents the\nhighest numbered port.  Thus, each port of the bridge\ngroup is represented by a single bit within the\nvalue of this object.  If that bit has a value of\n'1' then that port is included in the set of\nports; the port is not included if its bit has a\nvalue of '0'.\n\nInitially, a single bridge group with all ports as its\nmembers is defined.\"\"\",\n        }, # column\n        \"bridgeGroupStpAdmin\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object indicates if STP is enabled or disabled for the\nbridge group.\n\nThe default is enabled(1).\"\"\",\n        }, # column\n        \"bridgeGroupMemberTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of port membership configuration entries for a\nbridge group.\"\"\",\n        }, # table\n        \"bridgeGroupMemberEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"bridgeGroupMemberIndex\",\n                \"bridgeGroupMemberPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"Port membership configuration parameters for a bridge group.\"\"\",\n        }, # row\n        \"bridgeGroupMemberIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of bridgeGroupIndex of a bridge group.\"\"\",\n        }, # column\n        \"bridgeGroupMemberPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of swPortIndex of a switched port.\"\"\",\n        }, # column\n        \"bridgeGroupMemberPortOfBridgeGroup\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.8.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"true\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"false\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The port identified by bridgeGroupMemberPortIndex becomes\na member of the bridgeGroup identified by bridgeGroupMemberIndex\nwhen this object is set to true(1).  The same port\nceases to be member of that bridgeGroup when the object\nis set to false(2).\n\nAll ports in the switch must belong to some bridge group.\nConsequently, the switch will return badValue if\nthis object is used such to remove the port from all\nmembership lists.\n\nNote that when bridgeGroupAllowMembershipOverlap is disabled,\na port can only be member of exactly one bridge group.\nIn this case, setting bridgeGroupMemberPortOfBridgeGroup to\ntrue(1) for a port adds the port to the membership list of the\ncurrent bridge group and removes the same port from all other\nbridge group membership lists.\n\nWhen bridgeGroupAllowMembershipOverlap is enabled, a port may\nreside in multiple bridge groups.  Setting\nbridgeGroupMemberPortOfBridgeGroup to true(1) in this case adds\nthe port to the membership list of the current bridge group\nand does not change other bridge groups' membership list.\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"logonIntruder\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.0\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A user is repeatedly trying to logon using an invalid\npassword.  The number of attempts exceeds the preset\nlimit given in netMgmtConsolePasswordThresh.\nDepending on how the object netMgmtConsoleSilentTime\nis configured, the switch may shut down the\nManagement Console following the generation of this trap.\"\"\",\n        }, # notification\n        \"switchDiagnostic\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The switch issues this trap when its Power On\nSelf Test (POST) code does not pass all tests.  Some\nfailures are catastrophic and may prevent the generation\nof this trap, as well as the system's operations.\"\"\",\n        }, # notification\n        \"addressViolation\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The addressViolation trap is issued when an address\nviolation is detected on a secured port.\nThe generation of the addressViolation trap can be\nenabled or suppressed using the object\nsysConfigAddressViolationAlert.\"\"\",\n        }, # notification\n        \"broadcastStorm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"ifIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The broadcastStorm trap is issued when broadcast storm control\nis enabled and the number of broadcast packets received in a\nsecond from a port is higher than the broadcast threshold.\nThe generation of this trap can be enabled or suppressed using\nthe object sysConfigBroadcastStormAlert.\"\"\",\n        }, # notification\n        \"rpsFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A redundant power source is connected to the switch but a failure\nexists in the power system.\"\"\",\n        }, # notification\n        \"ipAddressChange\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"STAND-ALONE-ETHERNET-SWITCH-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.437.1.1.3.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sysName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"RFC1213-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ipAddressChange trap is issued when the switch\nis unable to complete its DHCPDISCOVER/ DHCPREQUEST\nprocess, or when it fails to extend the lease for the\ncurrent address, or when it accepts an address change\nfrom the user.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/STATISTICS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python STATISTICS-MIB\n\nFILENAME = \"hpSwitchStat.mib\"\n\nMIB = {\n    \"moduleName\" : \"STATISTICS-MIB\",\n\n    \"STATISTICS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"HP-ICF-TC\", \"name\" : \"HpSwitchPortType\"},\n        {\"module\" : \"HP-ICF-OID\", \"name\" : \"hpSwitch\"},\n    ),\n\n    \"typedefs\" : {\n        \"MacAddress\" : {\n            \"basetype\" : \"OctetString\",\n            \"ranges\" : [\n            {\n                \"min\" : \"6\",\n                \"max\" : \"6\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"6\",\n                \"max\" : \"6\"\n            },\n        },\n        \"VlanID\" : {\n            \"basetype\" : \"Integer32\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"65535\"\n            },\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"hpSwitchStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9\",\n        }, # node\n        \"hpSwitchIpxStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1\",\n        }, # node\n        \"hpSwitchIpxStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the\noperational IPX status of the virtual LAN in this\ndevice.\"\"\",\n        }, # table\n        \"hpSwitchIpxStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchIpxStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the operational IPX status of a\nvirtual LAN in this device.\"\"\",\n        }, # row\n        \"hpSwitchIpxStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies the operational\nIPX status of a virtual LAN for which this entry\ncontains information.\"\"\",\n        }, # column\n        \"hpSwitchIpxStatNodeAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IPX node address of this virtual LAN.\"\"\",\n        }, # column\n        \"hpSwitchIpxStatGatewayAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IPX node address of the gateway for\nthis virtual LAN.\"\"\",\n        }, # column\n        \"hpSwitchIpxStatGatewayEncap\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ethernetII\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"ieee8022\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"snap\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"ieee8023Raw\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"noGateway\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current type of encapsulation of the gateway.\"\"\",\n        }, # column\n        \"hpSwitchIpxStatAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.1.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the IPX protocol entity.\"\"\",\n        }, # column\n        \"hpSwitchIpStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2\",\n        }, # node\n        \"hpSwitchIpStatTimepAdminStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the Time protocol.\"\"\",\n        }, # scalar\n        \"hpSwitchIpStatTimepServerAddr\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP address of the Time server.\"\"\",\n        }, # scalar\n        \"hpSwitchIpStatTimepPollInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current client poll interval of the Time server\nin minute.\"\"\",\n        }, # scalar\n        \"hpSwitchIpStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"A table that contains information about the current\nIP status of the virtual LAN in this device.\"\"\",\n        }, # table\n        \"hpSwitchIpStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"hpSwitchIpStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"Information about the IP status of a specific virtual\nLAN in this device.\"\"\",\n        }, # row\n        \"hpSwitchIpStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies the IP status of\na virtual LAN for which this entry contains\ninformation.\"\"\",\n        }, # column\n        \"hpSwitchIpStatAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP address of this Virtual LAN.\"\"\",\n        }, # column\n        \"hpSwitchIpStatMask\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP subnet mask of this virtual LAN.\"\"\",\n        }, # column\n        \"hpSwitchIpStatGatewayAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current IP address of the gateway for this\nvirtual LAN.\"\"\",\n        }, # column\n        \"hpSwitchIpStatAdminStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.2.4.1.5\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"bootp\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the IP protocol for this\nvirtual LAN. If the value of this variable is 3, the\nIP protocol entity will utilize BOOTP during\ninitialization.\"\"\",\n        }, # column\n        \"hpSwitchFdbInfo\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4\",\n        }, # node\n        \"hpSwitchVlanFdbAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about unicast\nentries for which the VLAN has forwarding and/or\nfiltering information.  This information is used\nby the VLAN bridging function in determining how\nto propagate a received frame.\"\"\",\n        }, # table\n        \"hpSwitchVlanFdbAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchVlanFdbId\",\n                \"hpSwitchVlanFdbAddress\",\n            ],\n            \"description\" :\n                \"\"\"Information about a specific unicast MAC address\nfor which the VLAN has some forwarding and/or\nfiltering information.\"\"\",\n        }, # row\n        \"hpSwitchVlanFdbId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An index that uniquely identifies a virtual LAN\nfor which this entry contains information.\"\"\",\n        }, # column\n        \"hpSwitchVlanFdbAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unicast MAC address for which the VLAN has\nforwarding and/or filtering information.\"\"\",\n        }, # column\n        \"hpSwitchVlanFdbPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port number of the port on which a frame\nhaving a source address equal to the value of\nthe corresponding instance of hpSwitchVlanFdbAddress\nhas been seen.\"\"\",\n        }, # column\n        \"hpSwitchPortFdbAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about unicast\nentries for which the port has forwarding and/or\nfiltering information.  This information is used\nby the bridging function in determining how to\npropagate a received frame.\"\"\",\n        }, # table\n        \"hpSwitchPortFdbAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchPortFdbId\",\n                \"hpSwitchPortFdbAddress\",\n            ],\n            \"description\" :\n                \"\"\"Information about a specific unicast MAC address\nfor which the port has some forwarding and/or\nfiltering information.\"\"\",\n        }, # row\n        \"hpSwitchPortFdbId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.  The corresponding row in the\nInterfaces Table must exist prior to the index being\nused in this table.\"\"\",\n        }, # column\n        \"hpSwitchPortFdbAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.4.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unicast MAC address for which the port has\nforwarding and/or filtering information.\"\"\",\n        }, # column\n        \"hpSwitchStpStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.5\",\n        }, # node\n        \"hpSwitchStpStatAdminStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The operational status of the spanning tree protocol.\"\"\",\n        }, # scalar\n        \"hpSwitchMiscStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.6\",\n        }, # node\n        \"hpSwitchCpuStat\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percent(%).\"\"\",\n        }, # scalar\n        \"hpSwitchFddiIpFragStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7\",\n        }, # node\n        \"hpSwitchFddiIpFragStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of IP fragmentation statistics \nfor the FDDI cards in the switch.\"\"\",\n        }, # table\n        \"hpSwitchFddiIpFragStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchFddiIpFragStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"An Fddi IP fragmentation entry which is \ncontaining statictics for the FDDI \ncards in the switch.\"\"\",\n        }, # row\n        \"hpSwitchFddiIpFragStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each FDDI Card.  \nThe value for each FDDI card must remain constant \nat least from one re-initialization of the entity's \nnetwork management system to the next \nre-initialization.\"\"\",\n        }, # column\n        \"hpSwitchFddiIpFragFramesFragmented\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of FDDI Frames which get fragmented when they \nare larger than Ethernet Frame size, 1518 bytes.\"\"\",\n        }, # column\n        \"hpSwitchFddiIpFragFramesCreated\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of inbound FDDI frames which get created when\nthey larger than Ethernet Frame size, 1518 bytes.\"\"\",\n        }, # column\n        \"hpSwitchFddiIpFragFrameErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.7.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Number of large inbound FDDI frames that contains\nerror which preventing them from being fragmented\nwhen they are larger than Ethernet Frame size, 1518\nbytes.  Or number of large frames which are dropped\nbecause the FDDI IP fragmentation is disabled \"\"\",\n        }, # column\n        \"hpSwitchFddiSystemStat\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8\",\n        }, # node\n        \"hpSwitchFddiSystemStatTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of system infomations and statistics \nfor the FDDI cards in the switch.\"\"\",\n        }, # table\n        \"hpSwitchFddiSystemStatEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchFddiSystemStatIndex\",\n            ],\n            \"description\" :\n                \"\"\"An Fddi system entry which is \ncontaining statictics for the FDDI \ncards in the switch.\"\"\",\n        }, # row\n        \"hpSwitchFddiSystemStatIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique value for each FDDI Card.  \nThe value for each FDDI card must remain constant \nat least from one re-initialization of the entity's \nnetwork management system to the next \nre-initialization.\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemOsVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the operating code version number (also\nknown as software or firmware). For example, a\nsoftware version such as A.08.01 is described as\nfollows:\n    A    the function set available in your switch\n    08   the common release number\n    01   updates to the current common release\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemRomVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Contains the ROM version number (such as A.08.01\nis described as follows:\n    A    the function set available in your router\n    08   the common release number\n    01   updates to the current common release\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemMemoryTotal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of currently installed bytes.\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemMemoryFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of available (unallocated) bytes.\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemCpuUtil\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU utilization in percent(%).\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemBuildDirectory\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"80\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"80\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Build directory the FDDI firmware image \"\"\",\n        }, # column\n        \"hpSwitchFddiSystemBuildDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"40\",\n                        \"max\" : \"40\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"40\",\n                        \"max\" : \"40\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Build date and time of the FDDI firmware image\"\"\",\n        }, # column\n        \"hpSwitchFddiSystemBuildNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.8.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"20\",\n                        \"max\" : \"20\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"20\",\n                        \"max\" : \"20\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Build number of the FDDI firmware image\"\"\",\n        }, # column\n        \"hpABCStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9\",\n        }, # node\n        \"hpABCStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains statistic information about\nAutomatic Broadcast Control on any  given VLAN on\nthe switch.\"\"\",\n        }, # table\n        \"hpABCStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpABCStatsVlanIndex\",\n                \"hpABCStatsPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with each row in the\nABC Statistics Table.\"\"\",\n        }, # row\n        \"hpABCStatsVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value which uniquely identifies configuration of\na virtual LAN for which entry contains information.\"\"\",\n        }, # column\n        \"hpABCStatsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpABCStatsPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HP-ICF-TC\", \"name\" : \"HpSwitchPortType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port.\"\"\",\n        }, # column\n        \"hpABCStatsArpReplies\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter reports the number of ARP responses sent\nout by the switch (running ABC) to proxy respond for\nhosts learned in the switch ARP cashe.\"\"\",\n        }, # column\n        \"hpABCStatsIpxReplies\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This counter reports the number of RIP and SAP\nresponses sent out by the switch (running ABC) to\nproxy respond for routes and services learned by\nswitch.\"\"\",\n        }, # column\n        \"hpABCStatsIpRipControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notforwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This status field shows if IP RIP packets are being\nforwarded or not forwarded on the ports shown.\"\"\",\n        }, # column\n        \"hpABCStatsIpxRipSapControl\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.9.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"notforwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This status field shows if IPX RIP and/or IPX SAP\npackets are being forwarded or not forwarded on the\nports shown.\"\"\",\n        }, # column\n        \"hpIgmpStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10\",\n        }, # node\n        \"hpIgmpStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains statistic information about\nMulticast Groups on any  given VLAN on the switch.\"\"\",\n        }, # table\n        \"hpIgmpStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpIgmpStatsVlanIndex\",\n                \"hpIgmpStatsActiveGroupAddr\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with each member in\nparticular multicast group.\"\"\",\n        }, # row\n        \"hpIgmpStatsVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value which uniquely identifies configuration of\na virtual LAN for which entry contains information.\"\"\",\n        }, # column\n        \"hpIgmpStatsActiveGroupAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"An IP Multicast Group Membership address that has been\nsent, via IGMP Membership Reports, through the switch\nto querier.\"\"\",\n        }, # column\n        \"hpIgmpStatsReports\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IGMP report packets that the switch has\nseen for this group address.\"\"\",\n        }, # column\n        \"hpIgmpStatsQueries\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IGMP query packets the switch has seen\nfor this group address.  Note: This object is based\non a group, thus if a query is heard before this\nobject's group joins, the value will be zero. It will\nbe non-zero when an all host query, or group specific\nquery for the assoicated group, is heard after the\nassociated group has joined.\"\"\",\n        }, # column\n        \"hpIgmpStatsQuerierAccessPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port on which the switch detects IGMP query\npackets from the querier (device sending out query\npackets). If no queries are heard, the value of the\nobject is zero and we are querier or electing to be\nquerier. Anytime a querier besides our switch is\nheard the value of the object becomes the port number\non which the other querier was heard and the query\nelection process will be halted if currently running.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.2\",\n            \"status\" : \"obsolete\",\n            \"description\" :\n                \"\"\"A table that contains information about status\nof the IGMP port configurations on this switch.\"\"\",\n        }, # table\n        \"hpIgmpStatsPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.2.1\",\n            \"status\" : \"obsolete\",\n            \"linkage\" : [\n                \"hpIgmpStatsActiveGroupAddr\",\n                \"hpIgmpStatsPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with status of each IGMP\nport configuration.\"\"\",\n        }, # row\n        \"hpIgmpStatsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.2.1.1\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.2.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HP-ICF-TC\", \"name\" : \"HpSwitchPortType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortAccess\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.2.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"host\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"router\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"host-router\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this value is host then this port has seen IGMP\nreport packets for this active group address. If this\nvalue is router then this port has detected IGMP query\npackets from the querier (device sending out query\npackets). If this value is host-router then this port\nhas seen report packets, and IGMP query packets from\nthe querier.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortTable2\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about status\nof the IGMP port configurations on this switch.\nThis table2 is supersedes hpIgmpStatsPortTable for\nswitches which support multiple vlans per port.\"\"\",\n        }, # table\n        \"hpIgmpStatsPortEntry2\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpIgmpStatsVlanIndex\",\n                \"hpIgmpStatsActiveGroupAddr\",\n                \"hpIgmpStatsPortIndex2\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with status of each IGMP\nport configuration.\"\"\",\n        }, # row\n        \"hpIgmpStatsPortIndex2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortType2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"HP-ICF-TC\", \"name\" : \"HpSwitchPortType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The type of port.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortAccess2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"host\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"router\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"host-router\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"If this value is host then this port has seen IGMP\nreport packets for this active group address. If this\nvalue is router then this port has detected IGMP query\npackets from the querier (device sending out query\npackets). If this value is host-router then this port\nhas seen report packets, and IGMP query packets from\nthe querier.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortAgeTimer2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timer is set when the switch hears a report\nand is waiting for the group queries. If the timer\nexpires the group is considered non-active on the\nspecific port. The value returned shows how many\nseconds left before the timer expires or 0 if the\ntimer has expired.\"\"\",\n        }, # column\n        \"hpIgmpStatsPortLeaveTimer2\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.10.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The timer is set when the switch is waiting for a\nreport response for queries. If the timer expires the\ngroup is considered non-active on the specific port.\nThe value returned shows how many seconds left before\nthe timer expires or 0 if the timer has expired.\"\"\",\n        }, # column\n        \"hpLdbalStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11\",\n        }, # node\n        \"hpLdbalStatsPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the\noperational status of the load balancing ports on\nthis switch.\"\"\",\n        }, # table\n        \"hpLdbalStatsPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpLdbalStatsPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with ports configured\nfor load balancing.\"\"\",\n        }, # row\n        \"hpLdbalStatsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpLdbalStatsPortState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"error\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"initial\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notEstablished\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"established\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"topologyError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable describes the load balancing port state. \nA disabled state indicates the port does not have a\nlink beat. An initial state indicates the port has\nrecently established a link beat and is detecting\nwhether or not it is in the load balancing domain. An\nestablished state indicates that the port is inside\nthe load balancing domain, directly connected to\nanother load balancing port, and learning addresses\nvia the reception of MAC address learn information\npackets.  A notEstablished state indicates that the\nport is outside the load balancing domain, not\ndirectly connected to a load balancing port, and\nlearning MAC address by receiving unknown source \naddress packets. An error state indicates the port\nhas detected a direct connection to more than one\nload balancing port and is blocked, only accepting\nload balancing protocol packets.  When the error\ncondition clears, the port transitions either into\nthe established or not established state.\"\"\",\n        }, # column\n        \"hpLdbalStatsAdjacentSwitch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The switch identifier of the adjacent switch connected\nto the corresponding load balancing established port.\nIf load balancing has not been established on this\nport then this value is void.\"\"\",\n        }, # column\n        \"hpLdbalStatsPeerPort\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.11.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The port identifier of the peer port connected to \nthe corresponding load balancing established port. If\nload balancing has not been established on this port\nthen this value is void.\"\"\",\n        }, # column\n        \"hpSwitchMacStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.12\",\n        }, # node\n        \"hpSwitchFdbAddressCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16384\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16384\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Keep a counter for the total number of MAC\nAddresses currently learnt on the box.\"\"\",\n        }, # scalar\n        \"hpSwitchFlowControlStatus\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.13\",\n        }, # node\n        \"hpSwitchFlowControlStatusTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.13.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the\noperational status of flow control on this switch.\"\"\",\n        }, # table\n        \"hpSwitchFlowControlStatusEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.13.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpSwitchFlowControlStatusPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The flow control status per port basis.\"\"\",\n        }, # row\n        \"hpSwitchFlowControlStatusPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.13.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpSwitchFlowControlState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.13.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"on-rx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"on-tx\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Gets the current Flow Control State from hardware.\"\"\",\n        }, # column\n        \"hpFECStatsTrunk\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14\",\n        }, # node\n        \"hpFECStatsTrunkTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the\noperational status of flow control on this switch.\"\"\",\n        }, # table\n        \"hpFECStatsTrunkEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpFECStatsTrunkIndex\",\n            ],\n            \"description\" :\n                \"\"\"The flow control status per port basis.\"\"\",\n        }, # row\n        \"hpFECStatsTrunkIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The trunk Index value which uniquely identifies a\nrow in the Trunk Table.\"\"\",\n        }, # column\n        \"hpFECStatsTrunkName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the trunk group\"\"\",\n        }, # column\n        \"hpFECStatsTrunkNegotiationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"successful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"initialized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether the trunk has been successfully negotiated\"\"\",\n        }, # column\n        \"hpFECStatsTrunkForwardingMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"sa-only\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"sa-da\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Whether the trunk has been successfully negotiated\"\"\",\n        }, # column\n        \"hpFECStatsTrunkFlushPktsEchoed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.14.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of FEC flush packets echoed\"\"\",\n        }, # column\n        \"hpFECStatsPort\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15\",\n        }, # node\n        \"hpFECStatsPortTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains information about the\noperational status of flow control on this switch.\"\"\",\n        }, # table\n        \"hpFECStatsPortEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpFECStatsPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The flow control status per port basis.\"\"\",\n        }, # row\n        \"hpFECStatsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpFECStatsPortTrunkNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The internal trunk ID\"\"\",\n        }, # column\n        \"hpFECStatsPortTrunkName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the trunk group\"\"\",\n        }, # column\n        \"hpFECStatsPortMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"forwarding\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"blocking\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"FEC port mode\"\"\",\n        }, # column\n        \"hpFECStatsPortNegotiationStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"successful\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"initialized\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"FEC port negotiation state\"\"\",\n        }, # column\n        \"hpFECStatsPortHellosSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of FEC hello packets sent\"\"\",\n        }, # column\n        \"hpFECStatsPortHellosReceived\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of FEC hello packets received\"\"\",\n        }, # column\n        \"hpFECStatsPortMySlowHello\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"fast\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"slow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Currently running fast or slow FEC hello state\"\"\",\n        }, # column\n        \"hpFECStatsPortMyAutoMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"desirable\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"auto\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Silent partner mode\"\"\",\n        }, # column\n        \"hpFECStatsPortPartner\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The address of the adjacent device(switch, router,\nserver, etc.)\"\"\",\n        }, # column\n        \"hpFECStatsPortFlushPktsEchoed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.15.1.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of FEC flush packets echoed\"\"\",\n        }, # column\n        \"hpGvrpStats\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16\",\n        }, # node\n        \"hpGvrpStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table that contains statistic information about\nGVRP on any  given VLAN on the switch.\"\"\",\n        }, # table\n        \"hpGvrpStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"hpGvrpStatsVlanIndex\",\n                \"hpGvrpStatsPortIndex\",\n            ],\n            \"description\" :\n                \"\"\"The information associated with each row in the\nGVRP Statistics Table.\"\"\",\n        }, # row\n        \"hpGvrpStatsVlanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"STATISTICS-MIB\", \"name\" : \"VlanID\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value which uniquely identifies configuration\nof a virtual LAN for which entry contains\ninformation.\"\"\",\n        }, # column\n        \"hpGvrpStatsPortIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"65535\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The ifIndex value which uniquely identifies a row\nin the Interfaces Table.\"\"\",\n        }, # column\n        \"hpGvrpStatsPortVlanMember\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"pending\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"yes\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"no\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value reflects the state of the port with\nrespect to its membership in a VLAN\"\"\",\n        }, # column\n        \"hpGvrpPortIfOperStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current operational state of the interface.\"\"\",\n        }, # column\n        \"hpPortGvrpCtrlStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"STATISTICS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.11.2.14.11.5.1.9.16.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"learn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"block\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The status of Gvrp Control on this port.\"\"\",\n        }, # column\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/T3611-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# This python file has been generated by smidump version 0.5.0:\n#\n#   smidump -f python T3611-MIB\n\nFILENAME = \"T3611.mib\"\n\nMIB = {\n    \"moduleName\" : \"T3611-MIB\",\n\n    \"T3611-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC-1212\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC-1215\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"typedefs\" : {\n        \"DisplayString\" : {\n            \"basetype\" : \"OctetString\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"comet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626\",\n        }, # node\n        \"products\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1\",\n        }, # node\n        \"t3611\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2\",\n        }, # node\n        \"values\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1\",\n        }, # node\n        \"temp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature\"\"\",\n        }, # scalar\n        \"hum\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relative humidity\"\"\",\n        }, # scalar\n        \"compVal\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value\"\"\",\n        }, # scalar\n        \"tempAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Temperature; none, high, low\"\"\",\n        }, # scalar\n        \"humAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Relative humidity; none, high, low\"\"\",\n        }, # scalar\n        \"compValAlarm\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Computed value; none, high, low\"\"\",\n        }, # scalar\n        \"tempUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature Unit\"\"\",\n        }, # scalar\n        \"humUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relative humidity Unit\"\"\",\n        }, # scalar\n        \"compValUnit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value Unit\"\"\",\n        }, # scalar\n        \"tempMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Minimal temperature\"\"\",\n        }, # scalar\n        \"humMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Minimal relative humidity\"\"\",\n        }, # scalar\n        \"compValMin\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Minimal computed value\"\"\",\n        }, # scalar\n        \"tempMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.17\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal temperature\"\"\",\n        }, # scalar\n        \"humMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal relative humidity\"\"\",\n        }, # scalar\n        \"compValMax\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.1.19\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Maximal computed value\"\"\",\n        }, # scalar\n        \"global\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.2\",\n        }, # node\n        \"sensorName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"68\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device name\"\"\",\n        }, # scalar\n        \"serialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Serial number\"\"\",\n        }, # scalar\n        \"deviceType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"65534\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Device type\"\"\",\n        }, # scalar\n        \"valuesInt\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3\",\n        }, # node\n        \"tempInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature (value*10)\"\"\",\n        }, # scalar\n        \"humInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Relative humidity (value*10)\"\"\",\n        }, # scalar\n        \"compValInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value (value*10)\"\"\",\n        }, # scalar\n        \"tempAlarmInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Temperature; 0 - No, 1 - High, 2 - Low\"\"\",\n        }, # scalar\n        \"humAlarmInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Relative humidity; 0 - No, 1 - High, 2 - Low\"\"\",\n        }, # scalar\n        \"compValAlarmInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Alarm on Computed value; 0 - No, 1 - High, 2 - Low\"\"\",\n        }, # scalar\n        \"settings\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4\",\n        }, # node\n        \"tempLowInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature Limit Low (value*10)\"\"\",\n        }, # scalar\n        \"tempHighInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature Limit High (value*10)\"\"\",\n        }, # scalar\n        \"humLowInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity Limit Low (value*10)\"\"\",\n        }, # scalar\n        \"humHighInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity Limit High (value*10)\"\"\",\n        }, # scalar\n        \"compValLowInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value Limit Low (value*10)\"\"\",\n        }, # scalar\n        \"compValHighInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value Limit High (value*10)\"\"\",\n        }, # scalar\n        \"tempDelayInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature alaram delay [sec]\"\"\",\n        }, # scalar\n        \"humDelayInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity alaram delay [sec]\"\"\",\n        }, # scalar\n        \"compValDelayInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"4500\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value alaram delay [sec]\"\"\",\n        }, # scalar\n        \"tempHystInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature hysteresis (value*10)\"\"\",\n        }, # scalar\n        \"humHystInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity hysteresis (value*10)\"\"\",\n        }, # scalar\n        \"compValHystInt\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.4.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"10000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value hysteresis (value*10)\"\"\",\n        }, # scalar\n        \"traps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.5\",\n        }, # node\n        \"messageString\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"T3611-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Message giving more detailed information on alarms\"\"\",\n        }, # scalar\n        \"tables\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6\",\n        }, # node\n        \"historyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of the history values\"\"\",\n        }, # table\n        \"historyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6.1.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"histTemp\",\n            ],\n            \"description\" :\n                \"\"\"History values entries\"\"\",\n        }, # row\n        \"histTemp\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Temperature reading\"\"\",\n        }, # column\n        \"histHum\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Humidity reading\"\"\",\n        }, # column\n        \"histCompVal\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.1.2.6.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-5000\",\n                        \"max\" : \"20000\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Computed value reading\"\"\",\n        }, # column\n    }, # nodes\n\n    \"notifications\" : {\n        \"trapNTPError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Error on time synchronisation via NTP\"\"\",\n        }, # notification\n        \"trapEmailErrLogin\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP error - unknown server\"\"\",\n        }, # notification\n        \"trapEmailErrAuth\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP error - authentication error\"\"\",\n        }, # notification\n        \"trapEmailErrSome\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP error - error during communication with server, unexpected return code\"\"\",\n        }, # notification\n        \"trapEmailErrSocket\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP error - socket error, server is not available\"\"\",\n        }, # notification\n        \"trapEmailErrDNS\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SMTP error - DNS error\"\"\",\n        }, # notification\n        \"trapSOAPErrFile\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SOAP error - file SOAP not found\"\"\",\n        }, # notification\n        \"trapSOAPErrDNS\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SOAP error - DNS error\"\"\",\n        }, # notification\n        \"trapSOAPErrSocket\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SOAP error - socket error, server is not available\"\"\",\n        }, # notification\n        \"trapSOAPErrDelivery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"SOAP error - delivery error, wrong return code from server\"\"\",\n        }, # notification\n        \"trapTempHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"temp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"tempAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for high alarm on temperature\"\"\",\n        }, # notification\n        \"trapHumHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"hum\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"humAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for high alarm on relative humidity\"\"\",\n        }, # notification\n        \"trapCompValHighAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compVal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compValAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for high alarm on computed value\"\"\",\n        }, # notification\n        \"trapTempLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"temp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"tempAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for low alarm on temperature\"\"\",\n        }, # notification\n        \"trapHumLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"hum\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"humAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for low alarm on relative humidity\"\"\",\n        }, # notification\n        \"trapCompValLowAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compVal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compValAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for low alarm on computed value\"\"\",\n        }, # notification\n        \"trapTempClrAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"temp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"tempAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for clearing alarm on temperature\"\"\",\n        }, # notification\n        \"trapHumClrAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"hum\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"humAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for clearing alarm on relative humidity\"\"\",\n        }, # notification\n        \"trapCompValClrAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compVal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compValAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for clearing alarm on computed value\"\"\",\n        }, # notification\n        \"trapTempError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"temp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"tempAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for error on temperature\"\"\",\n        }, # notification\n        \"trapHumError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"hum\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"humAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for error on relative humidity\"\"\",\n        }, # notification\n        \"trapCompValError\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"T3611-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.22626.0.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"sensorName\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"messageString\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compVal\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n                \"compValAlarmInt\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"T3611-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Trap for error on computed value\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/UPS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python UPS-MIB\n\nFILENAME = \"RFC1628_UPS_MIB.MIB\"\n\nMIB = {\n    \"moduleName\" : \"UPS-MIB\",\n\n    \"UPS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF UPS MIB Working Group\"\"\",\n        \"contact\" : \n            \"\"\"        Jeffrey D. Case\n\nPostal: SNMP Research, Incorporated\n        3001 Kimberlin Heights Road\n        Knoxville, TN  37920\n        US\n\n   Tel: +1 615 573 1434\n   Fax: +1 615 573 9197\n\nE-mail: case@snmp.com\"\"\",\n        \"description\" :\n            \"\"\"The MIB module to describe Uninterruptible Power\nSupplies.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2005-10-14 00:00\",\n                \"description\" :\n                    \"\"\"Updated by Liebert Corporation to fix outstanding SNMP bugs.\"\"\",\n            },\n        ),\n        \"identity node\" : \"upsMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Unsigned32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n    ),\n\n    \"typedefs\" : {\n        \"PositiveInteger\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"This data type is a non-zero and non-negative value.\"\"\",\n        },\n        \"NonNegativeInteger\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"0\",\n                \"max\" : \"2147483647\"\n            },\n            \"format\" : \"d\",\n            \"description\" :\n                \"\"\"This data type is a non-negative value.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"upsMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33\",\n            \"status\" : \"current\",\n        }, # node\n        \"upsObjects\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1\",\n        }, # node\n        \"upsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1\",\n        }, # node\n        \"upsIdentManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The name of the UPS manufacturer.\"\"\",\n        }, # scalar\n        \"upsIdentModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Model designation.\"\"\",\n        }, # scalar\n        \"upsIdentUPSSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS firmware/software version(s).  This variable\nmay or may not have the same value as\nupsIdentAgentSoftwareVersion in some implementations.\"\"\",\n        }, # scalar\n        \"upsIdentAgentSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS agent software version.  This variable may or\nmay not have the same value as\nupsIdentUPSSoftwareVersion in some implementations.\"\"\",\n        }, # scalar\n        \"upsIdentName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string identifying the UPS.  This object should be\nset by the administrator.\"\"\",\n        }, # scalar\n        \"upsIdentAttachedDevices\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A string identifying the devices attached to the\noutput(s) of the UPS.  This object should be set by\nthe administrator.\"\"\",\n        }, # scalar\n        \"upsBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2\",\n        }, # node\n        \"upsBatteryStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryNormal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batteryLow\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"batteryDepleted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The indication of the capacity remaining in the UPS\nsystem's batteries.   A value of batteryNormal\nindicates that the remaining run-time is greater than\nupsConfigLowBattTime.  A value of batteryLow indicates\nthat the remaining battery run-time is less than or\nequal to upsConfigLowBattTime.  A value of\nbatteryDepleted indicates that the UPS will be unable\nto sustain the present load when and if the utility\npower is lost (including the possibility that the\nutility power is currently absent and the UPS is\nunable to sustain the output).\"\"\",\n        }, # scalar\n        \"upsSecondsOnBattery\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"If the unit is on battery power, the elapsed time\nsince the UPS last switched to battery power, or the\ntime since the network management subsystem was last\nrestarted, whichever is less.  Zero shall be returned\nif the unit is not on battery power.\"\"\",\n        }, # scalar\n        \"upsEstimatedMinutesRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"PositiveInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"An estimate of the time to battery charge depletion\nunder the present load conditions if the utility power\nis off and remains off, or if it were to be lost and\nremain off.\"\"\",\n        }, # scalar\n        \"upsEstimatedChargeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"An estimate of the battery charge remaining expressed\nas a percent of full charge.\"\"\",\n        }, # scalar\n        \"upsBatteryVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Volt DC\",\n            \"description\" :\n                \"\"\"The magnitude of the present battery voltage.\"\"\",\n        }, # scalar\n        \"upsBatteryCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Amp DC\",\n            \"description\" :\n                \"\"\"The present battery current.\"\"\",\n        }, # scalar\n        \"upsBatteryTemperature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.2.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"degrees Centigrade\",\n            \"description\" :\n                \"\"\"The ambient temperature at or near the UPS Battery\ncasing.\"\"\",\n        }, # scalar\n        \"upsInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3\",\n        }, # node\n        \"upsInputLineBads\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A count of the number of times the input entered an\nout-of-tolerance condition as defined by the\nmanufacturer.  This count is incremented by one each\ntime the input transitions from zero out-of-tolerance\nlines to one or more input lines out-of-tolerance.\"\"\",\n        }, # scalar\n        \"upsInputNumLines\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of input lines utilized in this device.\nThis variable indicates the number of rows in the\ninput table.\"\"\",\n        }, # scalar\n        \"upsInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of input table entries.  The number of entries\nis given by the value of upsInputNumLines.\"\"\",\n        }, # table\n        \"upsInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsInputLineIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular input line.\"\"\",\n        }, # row\n        \"upsInputLineIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"PositiveInteger\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The input line identifier.\"\"\",\n        }, # column\n        \"upsInputFrequency\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Hertz\",\n            \"description\" :\n                \"\"\"The present input frequency.\"\"\",\n        }, # column\n        \"upsInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The magnitude of the present input voltage.\"\"\",\n        }, # column\n        \"upsInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 RMS Amp\",\n            \"description\" :\n                \"\"\"The magnitude of the present input current.\"\"\",\n        }, # column\n        \"upsInputTruePower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.3.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"The magnitude of the present input true power.\"\"\",\n        }, # column\n        \"upsOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4\",\n        }, # node\n        \"upsOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"battery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"booster\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"reducer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present source of output power.  The enumeration\nnone(2) indicates that there is no source of output\npower (and therefore no output power), for example,\nthe system has opened the output breaker.\"\"\",\n        }, # scalar\n        \"upsOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Hertz\",\n            \"description\" :\n                \"\"\"The present output frequency.\"\"\",\n        }, # scalar\n        \"upsOutputNumLines\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of output lines utilized in this device.\nThis variable indicates the number of rows in the\noutput table.\"\"\",\n        }, # scalar\n        \"upsOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of output table entries.  The number of\nentries is given by the value of upsOutputNumLines.\"\"\",\n        }, # table\n        \"upsOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsOutputLineIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular output line.\"\"\",\n        }, # row\n        \"upsOutputLineIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"PositiveInteger\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The output line identifier.\"\"\",\n        }, # column\n        \"upsOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The present output voltage.\"\"\",\n        }, # column\n        \"upsOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 RMS Amp\",\n            \"description\" :\n                \"\"\"The present output current.\"\"\",\n        }, # column\n        \"upsOutputPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"The present output true power.\"\"\",\n        }, # column\n        \"upsOutputPercentLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.4.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"percent\",\n            \"description\" :\n                \"\"\"The percentage of the UPS power capacity presently\nbeing used on this output line, i.e., the greater of\nthe percent load of true power capacity and the\npercent load of VA.\"\"\",\n        }, # column\n        \"upsBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5\",\n        }, # node\n        \"upsBypassFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 Hertz\",\n            \"description\" :\n                \"\"\"The present bypass frequency.\"\"\",\n        }, # scalar\n        \"upsBypassNumLines\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of bypass lines utilized in this device.\nThis entry indicates the number of rows in the bypass\ntable.\"\"\",\n        }, # scalar\n        \"upsBypassTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of bypass table entries.  The number of\nentries is given by the value of upsBypassNumLines.\"\"\",\n        }, # table\n        \"upsBypassEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsBypassLineIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular bypass input.\"\"\",\n        }, # row\n        \"upsBypassLineIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"PositiveInteger\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The bypass line identifier.\"\"\",\n        }, # column\n        \"upsBypassVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The present bypass voltage.\"\"\",\n        }, # column\n        \"upsBypassCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"0.1 RMS Amp\",\n            \"description\" :\n                \"\"\"The present bypass current.\"\"\",\n        }, # column\n        \"upsBypassPower\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.5.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"The present true power conveyed by the bypass.\"\"\",\n        }, # column\n        \"upsAlarm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6\",\n        }, # node\n        \"upsAlarmsPresent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present number of active alarm conditions.\"\"\",\n        }, # scalar\n        \"upsAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of alarm table entries.  The table contains\nzero, one, or many rows at any moment, depending upon\nthe number of alarm conditions in effect.  The table\nis initially empty at agent startup.  The agent\ncreates a row in the table each time a condition is\ndetected and deletes that row when that condition no\nlonger pertains.  The agent creates the first row with\nupsAlarmId equal to 1, and increments the value of\nupsAlarmId each time a new row is created, wrapping to\nthe first free value greater than or equal to 1 when\nthe maximum value of upsAlarmId would otherwise be\nexceeded.  Consequently, after multiple operations,\nthe table may become sparse, e.g., containing entries\nfor rows 95, 100, 101, and 203 and the entries should\nnot be assumed to be in chronological order because\nupsAlarmId might have wrapped.\n\nAlarms are named by an AutonomousType (OBJECT\nIDENTIFIER), upsAlarmDescr, to allow a single table to\nreflect well known alarms plus alarms defined by a\nparticular implementation, i.e., as documented in the\nprivate enterprise MIB definition for the device.  No\ntwo rows will have the same value of upsAlarmDescr,\nsince alarms define conditions.  In order to meet this\nrequirement, care should be taken in the definition of\nalarm conditions to insure that a system cannot enter\nthe same condition multiple times simultaneously.\n\nThe number of rows in the table at any given time is\nreflected by the value of upsAlarmsPresent.\"\"\",\n        }, # table\n        \"upsAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"upsAlarmId\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable to a\nparticular alarm.\"\"\",\n        }, # row\n        \"upsAlarmId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"PositiveInteger\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique identifier for an alarm condition.  This\nvalue must remain constant.\"\"\",\n        }, # column\n        \"upsAlarmDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"AutonomousType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A reference to an alarm description object.  The\nobject referenced should not be accessible, but rather\nbe used to provide a unique description of the alarm\ncondition.\"\"\",\n        }, # column\n        \"upsAlarmTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime when the alarm condition was\ndetected.  If the alarm condition was detected at the\ntime of agent startup and presumably existed before\nagent startup, the value of upsAlarmTime shall equal\n0.\"\"\",\n        }, # column\n        \"upsWellKnownAlarms\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3\",\n        }, # node\n        \"upsAlarmBatteryBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"One or more batteries have been determined to require\nreplacement.\"\"\",\n        }, # node\n        \"upsAlarmOnBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS is drawing power from the batteries.\"\"\",\n        }, # node\n        \"upsAlarmLowBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The remaining battery run-time is less than or equal\nto upsConfigLowBattTime.\"\"\",\n        }, # node\n        \"upsAlarmDepletedBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS will be unable to sustain the present load\nwhen and if the utility power is lost.\"\"\",\n        }, # node\n        \"upsAlarmTempBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A temperature is out of tolerance.\"\"\",\n        }, # node\n        \"upsAlarmInputBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.6\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An input condition is out of tolerance.\"\"\",\n        }, # node\n        \"upsAlarmOutputBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.7\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An output condition (other than OutputOverload) is\nout of tolerance.\"\"\",\n        }, # node\n        \"upsAlarmOutputOverload\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The output load exceeds the UPS output capacity.\"\"\",\n        }, # node\n        \"upsAlarmOnBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.9\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Bypass is presently engaged on the UPS.\"\"\",\n        }, # node\n        \"upsAlarmBypassBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.10\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Bypass is out of tolerance.\"\"\",\n        }, # node\n        \"upsAlarmOutputOffAsRequested\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.11\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS has shutdown as requested, i.e., the output\nis off.\"\"\",\n        }, # node\n        \"upsAlarmUpsOffAsRequested\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.12\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The entire UPS has shutdown as commanded.\"\"\",\n        }, # node\n        \"upsAlarmChargerFailed\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"An uncorrected problem has been detected within the\nUPS charger subsystem.\"\"\",\n        }, # node\n        \"upsAlarmUpsOutputOff\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The output of the UPS is in the off state.\"\"\",\n        }, # node\n        \"upsAlarmUpsSystemOff\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS system is in the off state.\"\"\",\n        }, # node\n        \"upsAlarmFanFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The failure of one or more fans in the UPS has been\ndetected.\"\"\",\n        }, # node\n        \"upsAlarmFuseFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The failure of one or more fuses has been detected.\"\"\",\n        }, # node\n        \"upsAlarmGeneralFault\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A general fault in the UPS has been detected.\"\"\",\n        }, # node\n        \"upsAlarmDiagnosticTestFailed\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The result of the last diagnostic test indicates a\nfailure.\"\"\",\n        }, # node\n        \"upsAlarmCommunicationsLost\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A problem has been encountered in the communications\nbetween the agent and the UPS.\"\"\",\n        }, # node\n        \"upsAlarmAwaitingPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.21\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS output is off and the UPS is awaiting the\nreturn of input power.\"\"\",\n        }, # node\n        \"upsAlarmShutdownPending\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.22\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A upsShutdownAfterDelay countdown is underway.\"\"\",\n        }, # node\n        \"upsAlarmShutdownImminent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.23\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The UPS will turn off power to the load in less than\n5 seconds; this may be either a timed shutdown or a\nlow battery shutdown.\"\"\",\n        }, # node\n        \"upsAlarmTestInProgress\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.6.3.24\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A test is in progress, as initiated and indicated by\nthe Test Group.  Tests initiated via other\nimplementation-specific mechanisms can indicate the\npresence of the testing in the alarm table, if\ndesired, via a OBJECT-IDENTITY macro in the MIB\ndocument specific to that implementation and are\noutside the scope of this OBJECT-IDENTITY.\"\"\",\n        }, # node\n        \"upsTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7\",\n        }, # node\n        \"upsTestId\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The test is named by an OBJECT IDENTIFIER which\nallows a standard mechanism for the initiation of\ntests, including the well known tests identified in\nthis document as well as those introduced by a\nparticular implementation, i.e., as documented in the\nprivate enterprise MIB definition for the device.\n\nSetting this variable initiates the named test. Sets\nto this variable require the presence of\nupsTestSpinLock in the same SNMP message.\n\nThe set request will be rejected with an appropriate\nerror message if the requested test cannot be\nperformed, including attempts to start a test when\nanother test is already in progress.  The status of\nthe current or last test is maintained in\nupsTestResultsSummary. Tests in progress may be\naborted by setting the upsTestId variable to\nupsTestAbortTestInProgress.\n\nRead operations return the value of the name of the\ntest in progress if a test is in progress or the name\nof the last test performed if no test is in progress,\nunless no test has been run, in which case the well\nknown value upsTestNoTestsInitiated is returned.\"\"\",\n        }, # scalar\n        \"upsTestSpinLock\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A spin lock on the test subsystem.  The spinlock is\nused as follows.\n\nBefore starting a test, a manager-station should make\nsure that a test is not in progress as follows:\n\n    try_again:\n      get (upsTestSpinLock)\n      while (upsTestResultsSummary == inProgress) {\n        /* loop while a test is running for another\nmanager */\n        short delay\n        get (upsTestSpinLock)\n      }\n      lock_value = upsTestSpinLock\n      /* no test in progress, start the test */\n      set (upsTestSpinLock = lock_value, upsTestId =\nrequested_test)\n      if (error_index == 1) { /* (upsTestSpinLock\nfailed) */\n        /* if problem is not access control, then\n            some other manager slipped in ahead of us\n*/\n        goto try_again\n      }\n      if (error_index == 2) { /* (upsTestId) */\n        /* cannot perform the test */\n        give up\n      }\n      /* test started ok */\n      /* wait for test completion by polling\nupsTestResultsSummary */\n      get (upsTestSpinLock, upsTestResultsSummary,\nupsTestResultsDetail)\n      while (upsTestResultsSummary == inProgress) {\n        short delay\n        get (upsTestSpinLock, upsTestResultsSummary,\nupsTestResultsDetail)\n      }\n      /* when test completes, retrieve any additional\ntest results */\n      /* if upsTestSpinLock == lock_value + 1, then\nthese are our test */\n      /* results (as opposed to another manager's */\n      The initial value of upsTestSpinLock at agent\ninitialization shall\n      be 1.\"\"\",\n        }, # scalar\n        \"upsTestResultsSummary\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"donePass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"doneWarning\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"doneError\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"aborted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"noTestsInitiated\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The results of the current or last UPS diagnostics\ntest performed.  The values for donePass(1),\ndoneWarning(2), and doneError(3) indicate that the\ntest completed either successfully, with a warning, or\nwith an error, respectively.  The value aborted(4) is\nreturned for tests which are aborted by setting the\nvalue of upsTestId to upsTestAbortTestInProgress.\nTests which have not yet concluded are indicated by\ninProgress(5).  The value noTestsInitiated(6)\nindicates that no previous test results are available,\nsuch as is the case when no tests have been run since\nthe last reinitialization of the network management\nsubsystem and the system has no provision for non-\nvolatile storage of test results.\"\"\",\n        }, # scalar\n        \"upsTestResultsDetail\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Additional information about upsTestResultsSummary.\nIf no additional information available, a zero length\nstring is returned.\"\"\",\n        }, # scalar\n        \"upsTestStartTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of sysUpTime at the time the test in\nprogress was initiated, or, if no test is in progress,\nthe time the previous test was initiated.  If the\nvalue of upsTestResultsSummary is noTestsInitiated(6),\nupsTestStartTime has the value 0.\"\"\",\n        }, # scalar\n        \"upsTestElapsedTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The amount of time, in TimeTicks, since the test in\nprogress was initiated, or, if no test is in progress,\nthe previous test took to complete.  If the value of\nupsTestResultsSummary is noTestsInitiated(6),\nupsTestElapsedTime has the value 0.\"\"\",\n        }, # scalar\n        \"upsWellKnownTests\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7\",\n        }, # node\n        \"upsTestNoTestsInitiated\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"No tests have been initiated and no test is in\nprogress.\"\"\",\n        }, # node\n        \"upsTestAbortTestInProgress\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The test in progress is to be aborted / the test in\nprogress was aborted.\"\"\",\n        }, # node\n        \"upsTestGeneralSystemsTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The manufacturer's standard test of UPS device\nsystems.\"\"\",\n        }, # node\n        \"upsTestQuickBatteryTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A test that is sufficient to determine if the battery\nneeds replacement.\"\"\",\n        }, # node\n        \"upsTestDeepBatteryCalibration\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.7.7.5\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The system is placed on battery to a discharge level,\nset by the manufacturer, sufficient to determine\nbattery replacement and battery run-time with a high\ndegree of confidence.  WARNING:  this test will leave\nthe battery in a low charge state and will require\ntime for recharging to a level sufficient to provide\nnormal battery duration for the protected load.\"\"\",\n        }, # node\n        \"upsControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8\",\n        }, # node\n        \"upsShutdownType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"output\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"system\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object determines the nature of the action to be\ntaken at the time when the countdown of the\nupsShutdownAfterDelay and upsRebootWithDuration\nobjects reaches zero.\n\nSetting this object to output(1) indicates that\nshutdown requests should cause only the output of the\nUPS to turn off.  Setting this object to system(2)\nindicates that shutdown requests will cause the entire\nUPS system to turn off.\"\"\",\n        }, # scalar\n        \"upsShutdownAfterDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Setting this object will shutdown (i.e., turn off)\neither the UPS output or the UPS system (as determined\nby the value of upsShutdownType at the time of\nshutdown) after the indicated number of seconds, or\nless if the UPS batteries become depleted. Setting\nthis object to 0 will cause the shutdown to occur\nimmediately.  Setting this object to -1 will abort the\ncountdown.  If the system is already in the desired\nstate at the time the countdown reaches 0, then\nnothing will happen.  That is, there is no additional\naction at that time if upsShutdownType = system and\nthe system is already off.  Similarly, there is no\nadditional action at that time if upsShutdownType =\noutput and the output is already off.  When read,\nupsShutdownAfterDelay will return the number of\nseconds remaining until shutdown, or -1 if no shutdown\ncountdown is in effect.  On some systems, if the agent\nis restarted while a shutdown countdown is in effect,\nthe countdown may be aborted.  Sets to this object\noverride any upsShutdownAfterDelay already in effect.\"\"\",\n        }, # scalar\n        \"upsStartupAfterDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Setting this object will start the output after the\nindicated number of seconds, including starting the\nUPS, if necessary.  Setting this object to 0 will\ncause the startup to occur immediately.  Setting this\nobject to -1 will abort the countdown.  If the output\nis already on at the time the countdown reaches 0,\nthen nothing will happen.  Sets to this object\noverride the effect of any upsStartupAfterDelay\ncountdown or upsRebootWithDuration countdown in\nprogress.  When read, upsStartupAfterDelay will return\nthe number of seconds until startup, or -1 if no\nstartup countdown is in effect.  If the countdown\nexpires during a utility failure, the startup shall\nnot occur until the utility power is restored.  On\nsome systems, if the agent is restarted while a\nstartup countdown is in effect, the countdown is\naborted.\"\"\",\n        }, # scalar\n        \"upsRebootWithDuration\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"300\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"Setting this object will immediately shutdown (i.e.,\nturn off) either the UPS output or the UPS system (as\ndetermined by the value of upsShutdownType at the time\nof shutdown) for a period equal to the indicated\nnumber of seconds, after which time the output will be\nstarted, including starting the UPS, if necessary.  If\nthe number of seconds required to perform the request\nis greater than the requested duration, then the\nrequested shutdown and startup cycle shall be\nperformed in the minimum time possible, but in no case\nshall this require more than the requested duration\nplus 60 seconds.  When read, upsRebootWithDuration\nshall return the number of seconds remaining in the\ncountdown, or -1 if no countdown is in progress.  If\nthe startup should occur during a utility failure, the\nstartup shall not occur until the utility power is\nrestored.\"\"\",\n        }, # scalar\n        \"upsAutoRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.8.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object to 'on' will cause the UPS system\nto restart after a shutdown if the shutdown occurred\nduring a power loss as a result of either a\nupsShutdownAfterDelay or an internal battery depleted\ncondition.  Setting this object to 'off' will prevent\nthe UPS system from restarting after a shutdown until\nan operator manually or remotely explicitly restarts\nit.  If the UPS is in a startup or reboot countdown,\nthen the UPS will not restart until that delay has\nbeen satisfied.\"\"\",\n        }, # scalar\n        \"upsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9\",\n        }, # node\n        \"upsConfigInputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The magnitude of the nominal input voltage.  On those\nsystems which support read-write access to this\nobject, if there is an attempt to set this variable to\na value that is not supported, the request must be\nrejected and the agent shall respond with an\nappropriate error message, i.e., badValue for SNMPv1,\nor inconsistentValue for SNMPv2.\"\"\",\n        }, # scalar\n        \"upsConfigInputFreq\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1 Hertz\",\n            \"description\" :\n                \"\"\"The nominal input frequency.  On those systems which\nsupport read-write access to this object, if there is\nan attempt to set this variable to a value that is not\nsupported, the request must be rejected and the agent\nshall respond with an appropriate error message, i.e.,\nbadValue for SNMPv1, or inconsistentValue for SNMPv2.\"\"\",\n        }, # scalar\n        \"upsConfigOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The magnitude of the nominal output voltage.  On\nthose systems which support read-write access to this\nobject, if there is an attempt to set this variable to\na value that is not supported, the request must be\nrejected and the agent shall respond with an\nappropriate error message, i.e., badValue for SNMPv1,\nor inconsistentValue for SNMPv2.\"\"\",\n        }, # scalar\n        \"upsConfigOutputFreq\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"0.1 Hertz\",\n            \"description\" :\n                \"\"\"The nominal output frequency.  On those systems which\nsupport read-write access to this object, if there is\nan attempt to set this variable to a value that is not\nsupported, the request must be rejected and the agent\nshall respond with an appropriate error message, i.e.,\nbadValue for SNMPv1, or inconsistentValue for SNMPv2.\"\"\",\n        }, # scalar\n        \"upsConfigOutputVA\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Volt-Amps\",\n            \"description\" :\n                \"\"\"The magnitude of the nominal Volt-Amp rating.\"\"\",\n        }, # scalar\n        \"upsConfigOutputPower\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readonly\",\n            \"units\" : \"Watts\",\n            \"description\" :\n                \"\"\"The magnitude of the nominal true power rating.\"\"\",\n        }, # scalar\n        \"upsConfigLowBattTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"minutes\",\n            \"description\" :\n                \"\"\"The value of upsEstimatedMinutesRemaining at which a\nlowBattery condition is declared.  For agents which\nsupport only discrete (discontinuous) values, then the\nagent shall round up to the next supported value.  If\nthe requested value is larger than the largest\nsupported value, then the largest supported value\nshall be selected.\"\"\",\n        }, # scalar\n        \"upsConfigAudibleStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"muted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The requested state of the audible alarm.  When in\nthe disabled state, the audible alarm should never\nsound.  The enabled state is self-describing.  Setting\nthis object to muted(3) when the audible alarm is\nsounding shall temporarily silence the alarm.  It will\nremain muted until it would normally stop sounding and\nthe value returned for read operations during this\nperiod shall equal muted(3).  At the end of this\nperiod, the value shall revert to enabled(2).  Writes\nof the value muted(3) when the audible alarm is not\nsounding shall be accepted but otherwise shall have no\neffect.\"\"\",\n        }, # scalar\n        \"upsConfigLowVoltageTransferPoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The minimum input line voltage allowed before the UPS\nsystem transfers to battery backup.\"\"\",\n        }, # scalar\n        \"upsConfigHighVoltageTransferPoint\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.1.9.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"UPS-MIB\", \"name\" : \"NonNegativeInteger\"},\n            },\n            \"access\" : \"readwrite\",\n            \"units\" : \"RMS Volts\",\n            \"description\" :\n                \"\"\"The maximum line voltage allowed before the UPS\nsystem transfers to battery backup.\"\"\",\n        }, # scalar\n        \"upsTraps\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.2\",\n        }, # node\n        \"upsConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3\",\n        }, # node\n        \"upsCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.1\",\n        }, # node\n        \"upsGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2\",\n        }, # node\n        \"upsSubsetGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1\",\n        }, # node\n        \"upsBasicGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2\",\n        }, # node\n        \"upsFullGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"upsTrapOnBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.2.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsEstimatedMinutesRemaining\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSecondsOnBattery\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigLowBattTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS is operating on battery power.  This trap is\npersistent and is resent at one minute intervals until\nthe UPS either turns off or is no longer running on\nbattery.\"\"\",\n        }, # notification\n        \"upsTrapTestCompleted\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.2.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsTestId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestSpinLock\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsSummary\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsDetail\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestStartTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestElapsedTime\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent upon completion of a UPS diagnostic\ntest.\"\"\",\n        }, # notification\n        \"upsTrapAlarmEntryAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.2.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsAlarmId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent each time an alarm is inserted into\nto the alarm table.  It is sent on the insertion of\nall alarms except for upsAlarmOnBattery and\nupsAlarmTestInProgress.\"\"\",\n        }, # notification\n        \"upsTrapAlarmEntryRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.2.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"upsAlarmId\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent each time an alarm is removed from\nthe alarm table.  It is sent on the removal of all\nalarms except for upsAlarmTestInProgress.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"upsSubsetIdentGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsIdentManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentAgentSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentAttachedDevices\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetIdentGroup defines objects which are\ncommon across all UPSs which meet subset compliance.\nMost devices which conform to the upsSubsetIdentGroup\nwill provide access to these objects via a proxy\nagent.  If the proxy agent is compatible with multiple\nUPS types, configuration of the proxy agent will\nrequire specifying some of these values, either\nindividually, or as a group (perhaps through a table\nlookup mechanism based on the UPS model number).\"\"\",\n        }, # group\n        \"upsSubsetBatteryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsBatteryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSecondsOnBattery\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetBatteryGroup defines the objects that\nare common to battery groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsSubsetInputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsInputLineBads\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetInputGroup defines the objects that are\ncommon to the Input groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsSubsetOutputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsOutputSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetOutputGroup defines the objects that are\ncommon to the Output groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsSubsetAlarmGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsAlarmsPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetAlarmGroup defines the objects that are\ncommon to the Alarm groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsSubsetControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsShutdownType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsShutdownAfterDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAutoRestart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetControlGroup defines the objects that\nare common to the Control groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsSubsetConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.1.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsConfigInputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigInputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsSubsetConfigGroup defines the objects that are\ncommon to the Config groups of two-contact UPSs.\"\"\",\n        }, # group\n        \"upsBasicIdentGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsIdentManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentUPSSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentAgentSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicIdentGroup defines objects which are\ncommon to the Ident group of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicBatteryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsBatteryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSecondsOnBattery\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicBatteryGroup defines the objects that are\ncommon to the battery groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicInputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsInputLineBads\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicInputGroup defines the objects that are\ncommon to the Input groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicOutputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsOutputSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicOutputGroup defines the objects that are\ncommon to the Output groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicBypassGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsBypassFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBypassNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBypassVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicBypassGroup defines the objects that are\ncommon to the Bypass groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicAlarmGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsAlarmsPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicAlarmGroup defines the objects that are\ncommon to the Alarm  groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicTestGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsTestId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestSpinLock\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsSummary\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsDetail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestElapsedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicTestGroup defines the objects that are\ncommon to the Test groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsShutdownType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsShutdownAfterDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsStartupAfterDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsRebootWithDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAutoRestart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicControlGroup defines the objects that are\ncommon to the Control groups of compliant UPSs which\nsupport basic functions.\"\"\",\n        }, # group\n        \"upsBasicConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.2.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsConfigInputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigInputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigLowBattTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigAudibleStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsBasicConfigGroup defines the objects that are\ncommon to the Config groups of UPSs which support\nbasic functions.\"\"\",\n        }, # group\n        \"upsFullIdentGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsIdentManufacturer\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentModel\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentUPSSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentAgentSoftwareVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentName\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsIdentAttachedDevices\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullIdentGroup defines objects which are\ncommon to the Ident group of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullBatteryGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsBatteryStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSecondsOnBattery\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsEstimatedMinutesRemaining\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsEstimatedChargeRemaining\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullBatteryGroup defines the objects that are\ncommon to the battery groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullInputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsInputLineBads\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsInputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullInputGroup defines the objects that are\ncommon to the Input groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullOutputGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsOutputSource\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputCurrent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsOutputPercentLoad\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullOutputGroup defines the objects that are\ncommon to the Output groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullBypassGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.5\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsBypassFrequency\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBypassNumLines\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBypassVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullBypassGroup defines the objects that are\ncommon to the Bypass groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullAlarmGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.6\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsAlarmsPresent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmDescr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAlarmTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullAlarmGroup defines the objects that are\ncommon to the Alarm  groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullTestGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.7\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsTestId\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestSpinLock\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsSummary\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestResultsDetail\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestStartTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsTestElapsedTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullTestGroup defines the objects that are\ncommon to the Test groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullControlGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.8\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsShutdownType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsShutdownAfterDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsStartupAfterDelay\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsRebootWithDuration\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsAutoRestart\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullControlGroup defines the objects that are\ncommon to the Control groups of fully compliant UPSs.\"\"\",\n        }, # group\n        \"upsFullConfigGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.2.3.9\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"upsConfigInputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigInputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputVA\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigOutputPower\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigLowBattTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsConfigAudibleStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The upsFullConfigGroup defines the objects that are\ncommon to the Config groups of fully compliant UPSs.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"upsSubsetCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for UPSs that only support\nthe two-contact communication protocol.\"\"\",\n            \"requires\" : {\n                \"upsSubsetIdentGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetBatteryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetInputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetOutputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetAlarmGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetControlGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsSubsetConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"upsBatteryStatus\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"batteryNormal\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"2\"\n                            },\n                            \"batteryLow\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Support of the values unknown(1) and\nbatteryDepleted(4) is not required.\"\"\",\n                },\n                \"upsAlarmDescr\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Support of all `well known' alarm types is not\nrequired.  The well known alarm types which must be\nsupported are: upsAlarmOnBattery, upsAlarmLowBattery,\nupsAlarmInputBad, upsAlarmUpsOutputOff,\nupsAlarmUpsSystemOff, and upsAlarmTestInProgress.\"\"\",\n                },\n                \"upsOutputSource\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"normal\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                            \"battery\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"5\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Support of the values other(1), none(2), bypass(4),\nbooster(6) and reducer(7) is not required.\"\"\",\n                },\n                \"upsShutdownType\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one shutdown type.\"\"\",\n                },\n                \"upsAutoRestart\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one restart type.\"\"\",\n                },\n                \"upsConfigInputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigInputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"upsBasicCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.1.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for UPSs that support\nfull-featured functions, such as control.\"\"\",\n            \"requires\" : {\n                \"upsBasicIdentGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicBatteryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicInputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicOutputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicAlarmGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicTestGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicControlGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsBasicBypassGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"The upsBasicBypassGroup is only required for UPSs\nthat have a Bypass present.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"upsAlarmDescr\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Support of all `well known' alarm types is not\nrequired.  The well known alarm types which must be\nsupported are: upsAlarmOnBattery, upsAlarmLowBattery,\nupsAlarmDepletedBattery, upsAlarmTempBad,\nupsAlarmInputBad, upsAlarmOutputOverload,\nupsAlarmOnBypass, upsAlarmBypassBad,\nupsAlarmOutputOffAsRequested,\nupsAlarmUpsOffAsRequested, upsAlarmUpsOutputOff,\nupsAlarmUpsSystemOff, upsAlarmGeneralFault,\nupsAlarmDiagnosticTestFailed,\nupsAlarmCommunicationsLost, upsAlarmShutdownPending,\nand upsAlarmTestInProgress.\"\"\",\n                },\n                \"upsTestId\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Support of all `well known' test types is not\nrequired.  If no tests are supported, then the only\nwell known test type which must be supported is\nupsTestNoTestsInitiated.\"\"\",\n                },\n                \"upsOutputSource\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"normal\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                            \"battery\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"5\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Support of the values other(1), none(2), bypass(4),\nbooster(6) and reducer(7) is not required.\"\"\",\n                },\n                \"upsShutdownType\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one shutdown type.\"\"\",\n                },\n                \"upsAutoRestart\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one restart type.\"\"\",\n                },\n                \"upsConfigInputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigInputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigLowBattTime\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of all possible values may be onerous\nfor some systems.  Consequently, not all possible\nvalues must be supported.  However, at least two\ndifferent manufacturer-selected values must be\nsupported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n        \"upsFullCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"UPS-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.33.3.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The compliance statement for UPSs that support\nadvanced full-featured functions.\"\"\",\n            \"requires\" : {\n                \"upsFullIdentGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullBatteryGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullInputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullOutputGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullAlarmGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullTestGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullControlGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullConfigGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"UPS-MIB\"\n                },\n                \"upsFullBypassGroup\" : {\n                    \"nodetype\" : \"optional\",\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"The upsFullBypassGroup is only required for UPSs that\nhave a Bypass present.\"\"\",\n                },\n            }, # requires\n            \"refinements\" : {\n                \"upsAlarmDescr\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Support of all `well known' alarm types is not\nrequired.  The well known alarm types which must be\nsupported are: upsAlarmBatteryBad, upsAlarmOnBattery,\nupsAlarmLowBattery, upsAlarmDepletedBattery,\nupsAlarmTempBad, upsAlarmInputBad, upsAlarmOnBypass,\nupsAlarmBypassBad, upsAlarmOutputOffAsRequested,\nupsAlarmUpsOffAsRequested, upsAlarmUpsOutputOff,\nupsAlarmUpsSystemOff, upsAlarmGeneralFault,\nupsAlarmDiagnosticTestFailed,\nupsAlarmCommunicationsLost, upsAlarmShutdownPending,\nand upsAlarmTestInProgress.\"\"\",\n                },\n                \"upsTestId\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Support of all `well known' test types is not\nrequired.  The well known test types which must be\nsupported are: upsTestNoTestsInitiated,\nupsTestGeneralSystemsTest, and\nupsTestQuickBatteryTest.\"\"\",\n                },\n                \"upsOutputSource\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"syntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Enumeration\",\n                            \"normal\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"3\"\n                            },\n                            \"battery\" : {\n                                \"nodetype\" : \"namednumber\",\n                                \"number\" : \"5\"\n                            },\n                        },\n                    }, # syntax\n                    \"description\" :\n                        \"\"\"Support of the values other(1), none(2), bypass(4),\nbooster(6) and reducer(7) is not required.\"\"\",\n                },\n                \"upsShutdownType\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one shutdown type.\"\"\",\n                },\n                \"upsAutoRestart\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required, i.e., compliant\nsystems need not support more than one restart type.\"\"\",\n                },\n                \"upsConfigInputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigInputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputVoltage\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigOutputFreq\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"access\" : \"readonly\",\n                    \"description\" :\n                        \"\"\"Read-write access is not required.\"\"\",\n                },\n                \"upsConfigLowBattTime\" : {\n                    \"module\" : \"UPS-MIB\",\n                    \"description\" :\n                        \"\"\"Implementation of all possible values may be onerous\nfor some systems.  Consequently, not all possible\nvalues must be supported.  However, at least two\ndifferent manufacturer-selected values must be\nsupported.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/VRRP-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python VRRP-MIB\n\nFILENAME = \"VRRP-MIB\"\n\nMIB = {\n    \"moduleName\" : \"VRRP-MIB\",\n\n    \"VRRP-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :    \n            \"\"\"IETF VRRP Working Group\"\"\",\n        \"contact\" : \n            \"\"\"Brian R. Jewell\nPostal: Copper Mountain Networks, Inc.\n        2470 Embarcadero Way\n        Palo Alto, California 94303\nTel:    +1 650 687 3367\nE-Mail: bjewell@coppermountain.com\"\"\",\n        \"description\" :\n            \"\"\"This MIB describes objects used for managing Virtual Router\nRedundancy Protocol (VRRP) routers.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2000-03-03 00:00\",\n                \"description\" :\n                    \"\"\"Initial version as published in RFC 2787.\"\"\",\n            },\n        ),\n        \"identity node\" : \"vrrpMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"mib-2\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"MODULE-COMPLIANCE\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"NOTIFICATION-GROUP\"},\n        {\"module\" : \"IF-MIB\", \"name\" : \"ifIndex\"},\n    ),\n\n    \"typedefs\" : {\n        \"VrId\" : {\n            \"basetype\" : \"Integer32\",\n            \"status\" : \"current\",\n            \"ranges\" : [\n            {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            ],\n            \"range\" : {\n                \"min\" : \"1\",\n                \"max\" : \"255\"\n            },\n            \"description\" :\n                \"\"\"A number which, along with an interface index (ifIndex),\nserves to uniquely identify a virtual router on a given VRRP\nrouter. A set of one or more associated addresses is assigned\nto a VRID.\"\"\",\n        },\n    }, # typedefs\n\n    \"nodes\" : {\n        \"vrrpMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68\",\n            \"status\" : \"current\",\n        }, # node\n        \"vrrpNotifications\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.0\",\n        }, # node\n        \"vrrpOperations\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1\",\n        }, # node\n        \"vrrpNodeVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This value identifies the particular version of the VRRP\nsupported by this node.\"\"\",\n        }, # scalar\n        \"vrrpNotificationCntl\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"enabled\",\n            \"description\" :\n                \"\"\"Indicates whether the VRRP-enabled router will generate\nSNMP traps for events defined in this MIB. 'Enabled'\nresults in SNMP traps; 'disabled', no traps are sent.\"\"\",\n        }, # scalar\n        \"vrrpOperTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Operations table for a VRRP router which consists of a\nsequence (i.e., one or more conceptual rows) of\n'vrrpOperEntry' items.\"\"\",\n        }, # table\n        \"vrrpOperEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"vrrpOperVrId\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the vrrpOperTable containing the operational\ncharacteristics of a virtual router. On a VRRP router,\na given virtual router is identified by a combination\nof the IF index and VRID.\n\nRows in the table cannot be modified unless the value\nof `vrrpOperAdminState' is `disabled' and the\n`vrrpOperState' has transitioned to `initialize'.\"\"\",\n        }, # row\n        \"vrrpOperVrId\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"VRRP-MIB\", \"name\" : \"VrId\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"This object contains the Virtual Router Identifier (VRID).\"\"\",\n        }, # column\n        \"vrrpOperVirtualMacAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The virtual MAC address of the virtual router. Although this\nobject can be derived from the 'vrrpOperVrId' object, it is\ndefined so that it is easily obtainable by a management\napplication and can be included in VRRP-related SNMP traps.\"\"\",\n        }, # column\n        \"vrrpOperState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"initialize\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"backup\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"master\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the virtual router. This object has\nthree defined values:\n\n  - `initialize', which indicates that all the\n    virtual router is waiting for a startup event.\n\n  - `backup', which indicates the virtual router is\n    monitoring the availability of the master router.\n\n  - `master', which indicates that the virtual router\n    is forwarding packets for IP addresses that are\n    associated with this router.\n\nSetting the `vrrpOperAdminState' object (below) initiates\n\ntransitions in the value of this object.\"\"\",\n        }, # column\n        \"vrrpOperAdminState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"up\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"down\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"down\",\n            \"description\" :\n                \"\"\"This object will enable/disable the virtual router\nfunction. Setting the value to `up', will transition\nthe state of the virtual router from `initialize' to `backup'\nor `master', depending on the value of `vrrpOperPriority'.\nSetting the value to `down', will transition  the\nrouter from `master' or `backup' to `initialize'. State\ntransitions may not be immediate; they sometimes depend on\nother factors, such as the interface (IF) state.\n\nThe `vrrpOperAdminState' object must be set to `down' prior\nto modifying the other read-create objects in the conceptual\nrow. The value of the `vrrpOperRowStatus' object (below)\nmust be `active', signifying that the conceptual row\nis valid (i.e., the objects are correctly set),\nin order for this object to be set to `up'.\"\"\",\n        }, # column\n        \"vrrpOperPriority\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"100\",\n            \"description\" :\n                \"\"\"This object specifies the priority to be used for the\nvirtual router master election process. Higher values imply\nhigher priority.\n\nA priority of '0', although not settable, is sent by\nthe master router to indicate that this router has ceased\nto participate in VRRP and a backup virtual router should\ntransition  to become a new master.\n\nA priority of 255 is used for the router that owns the\nassociated IP address(es).\"\"\",\n        }, # column\n        \"vrrpOperIpAddrCount\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of IP addresses that are associated with this\nvirtual router. This number is equal to the number of rows\nin the vrrpAssoIpAddrTable that correspond to a given IF\nindex/VRID pair.\"\"\",\n        }, # column\n        \"vrrpOperMasterIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The master router's real (primary) IP address. This is\nthe IP address listed as the source in VRRP advertisement\nlast received by this virtual router.\"\"\",\n        }, # column\n        \"vrrpOperPrimaryIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"0x00000000\",\n            \"description\" :\n                \"\"\"In the case where there is more than one IP address for\na given `ifIndex', this object is used to specify the IP\naddress that will become the `vrrpOperMasterIpAddr', should\nthe virtual router transition from backup to master. If\nthis object is set to 0.0.0.0, the IP address which is\nnumerically lowest will be selected.\"\"\",\n        }, # column\n        \"vrrpOperAuthType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noAuthentication\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"simpleTextPassword\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"ipAuthenticationHeader\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"noAuthentication\",\n            \"description\" :\n                \"\"\"Authentication type used for VRRP protocol exchanges between\nvirtual routers. This value of this object is the same for a\ngiven ifIndex.\n\nNew enumerations to this list can only be added via a new\nRFC on the standards track.\"\"\",\n        }, # column\n        \"vrrpOperAuthKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Authentication Key. This object is set according to\nthe value of the 'vrrpOperAuthType' object\n('simpleTextPassword' or 'ipAuthenticationHeader'). If the\nlength of the value is less than 16 octets, the agent will\nleft adjust and zero fill to 16 octets. The value of this\nobject is the same for a given ifIndex.\n\nWhen read, vrrpOperAuthKey always returns an Octet String\nof length zero.\"\"\",\n        }, # column\n        \"vrrpOperAdvertisementInterval\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"1\",\n            \"units\" : \"seconds\",\n            \"description\" :\n                \"\"\"The time interval, in seconds, between sending\nadvertisement messages. Only the master router sends\nVRRP advertisements.\"\"\",\n        }, # column\n        \"vrrpOperPreemptMode\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"true\",\n            \"description\" :\n                \"\"\"Controls whether a higher priority virtual router will\npreempt a lower priority master.\"\"\",\n        }, # column\n        \"vrrpOperVirtualRouterUpTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TimeStamp\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This is the value of the `sysUpTime' object when this\nvirtual router (i.e., the `vrrpOperState') transitioned\nout of `initialized'.\"\"\",\n        }, # column\n        \"vrrpOperProtocol\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ip\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"bridge\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"decnet\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"default\" : \"ip\",\n            \"description\" :\n                \"\"\"The particular protocol being controlled by this Virtual\nRouter.\n\nNew enumerations to this list can only be added via a new\nRFC on the standards track.\"\"\",\n        }, # column\n        \"vrrpOperRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.3.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used in accordance to installation\nand removal conventions for conceptual rows. The rowstatus of\na currently active row in the vrrpOperTable is constrained\nby the operational state of the corresponding virtual router.\nWhen `vrrpOperRowStatus' is set to active(1), no other\nobjects in the conceptual row, with the exception of\n`vrrpOperAdminState', can be modified. Prior to setting the\n`vrrpOperRowStatus' object from `active' to a different value,\nthe `vrrpOperAdminState' object must be set to `down' and the\n`vrrpOperState' object be transitioned to `initialize'.\n\nTo create a row in this table, a manager sets this object\nto either createAndGo(4) or createAndWait(5). Until instances\nof all corresponding columns are appropriately configured,\nthe value of the corresponding instance of the `vrrpOperRowStatus'\ncolumn will be read as notReady(3).\n\nIn particular, a newly created row cannot be made active(1)\nuntil (minimally) the corresponding instance of\n`vrrpOperVrId' has been set and there is at least one active\nrow in the `vrrpAssoIpAddrTable' defining an associated\nIP address for the virtual router.\"\"\",\n        }, # column\n        \"vrrpAssoIpAddrTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The table of addresses associated with this virtual router.\"\"\",\n        }, # table\n        \"vrrpAssoIpAddrEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.4.1\",\n            \"create\" : \"true\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"ifIndex\",\n                \"vrrpOperVrId\",\n                \"vrrpAssoIpAddr\",\n            ],\n            \"description\" :\n                \"\"\"An entry in the table contains an IP address that is\nassociated with a virtual router. The number of rows for\na given ifIndex and VrId will equal the number of IP\naddresses associated (e.g., backed up) by the virtual\nrouter (equivalent to 'vrrpOperIpAddrCount').\n\nRows in the table cannot be modified unless the value\nof `vrrpOperAdminState' is `disabled' and the\n`vrrpOperState' has transitioned to `initialize'.\"\"\",\n        }, # row\n        \"vrrpAssoIpAddr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"The assigned IP addresses that a virtual router is\nresponsible for backing up.\"\"\",\n        }, # column\n        \"vrrpAssoIpAddrRowStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The row status variable, used according to installation\nand removal conventions for conceptual rows. Setting this\nobject to active(1) or createAndGo(4) results in the\naddition of an associated address for a virtual router.\nDestroying the entry or setting it to notInService(2)\nremoves the associated address from the virtual router.\nThe use of other values is implementation-dependent.\"\"\",\n        }, # column\n        \"vrrpTrapPacketSrc\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"The IP address of an inbound VRRP packet. Used by\nvrrpTrapAuthFailure trap.\"\"\",\n        }, # scalar\n        \"vrrpTrapAuthErrorType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"invalidAuthType\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"authTypeMismatch\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"authFailure\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"notifyonly\",\n            \"description\" :\n                \"\"\"Potential types of configuration conflicts.\nUsed by vrrpAuthFailure trap.\"\"\",\n        }, # scalar\n        \"vrrpStatistics\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2\",\n        }, # node\n        \"vrrpRouterChecksumErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received with an invalid\nVRRP checksum value.\"\"\",\n        }, # scalar\n        \"vrrpRouterVersionErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received with an unknown\nor unsupported version number.\"\"\",\n        }, # scalar\n        \"vrrpRouterVrIdErrors\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received with an invalid\nVRID for this virtual router.\"\"\",\n        }, # scalar\n        \"vrrpRouterStatsTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"Table of virtual router statistics.\"\"\",\n        }, # table\n        \"vrrpRouterStatsEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                { \"VRRP-MIB\" : {\n                    \"indexkind\" : \"augments\",\n                    \"relatedNode\" : \"vrrpOperEntry\",\n                }},\n            ],\n            \"description\" :\n                \"\"\"An entry in the table, containing statistics information\nabout a given virtual router.\"\"\",\n        }, # row\n        \"vrrpStatsBecomeMaster\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of times that this virtual router's state\nhas transitioned to MASTER.\"\"\",\n        }, # column\n        \"vrrpStatsAdvertiseRcvd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP advertisements received by this\nvirtual router.\"\"\",\n        }, # column\n        \"vrrpStatsAdvertiseIntervalErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP advertisement packets received\nfor which the advertisement interval is different than the\none configured for the local virtual router.\"\"\",\n        }, # column\n        \"vrrpStatsAuthFailures\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received that do not pass\nthe authentication check.\"\"\",\n        }, # column\n        \"vrrpStatsIpTtlErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received by the virtual\nrouter with IP TTL (Time-To-Live) not equal to 255.\"\"\",\n        }, # column\n        \"vrrpStatsPriorityZeroPktsRcvd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets received by the virtual\nrouter with a priority of '0'.\"\"\",\n        }, # column\n        \"vrrpStatsPriorityZeroPktsSent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of VRRP packets sent by the virtual router\nwith a priority of '0'.\"\"\",\n        }, # column\n        \"vrrpStatsInvalidTypePktsRcvd\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of VRRP packets received by the virtual router\nwith an invalid value in the 'type' field.\"\"\",\n        }, # column\n        \"vrrpStatsAddressListErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received for which the address\nlist does not match the locally configured list for the\nvirtual router.\"\"\",\n        }, # column\n        \"vrrpStatsInvalidAuthType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received with an unknown\n\nauthentication type.\"\"\",\n        }, # column\n        \"vrrpStatsAuthTypeMismatch\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received with 'Auth Type' not\nequal to the locally configured authentication method\n(`vrrpOperAuthType').\"\"\",\n        }, # column\n        \"vrrpStatsPacketLengthErrors\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.2.4.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The total number of packets received with a packet length\nless than the length of the VRRP header.\"\"\",\n        }, # column\n        \"vrrpConformance\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3\",\n        }, # node\n        \"vrrpMIBCompliances\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.1\",\n        }, # node\n        \"vrrpMIBGroups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.2\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"vrrpTrapNewMaster\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vrrpOperMasterIpAddr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The newMaster trap indicates that the sending agent\nhas transitioned to 'Master' state.\"\"\",\n        }, # notification\n        \"vrrpTrapAuthFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"vrrpTrapPacketSrc\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpTrapAuthErrorType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A vrrpAuthFailure trap signifies that a packet has\nbeen received from a router whose authentication key\nor authentication type conflicts with this router's\nauthentication key or authentication type. Implementation\nof this trap is optional.\"\"\",\n        }, # notification\n    }, # notifications\n\n    \"groups\" : {\n        \"vrrpOperGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.2.1\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vrrpNodeVersion\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpNotificationCntl\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperVirtualMacAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperAdminState\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperPriority\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperIpAddrCount\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperMasterIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperPrimaryIpAddr\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperAuthType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperAuthKey\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperAdvertisementInterval\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperPreemptMode\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperVirtualRouterUpTime\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperProtocol\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpOperRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpAssoIpAddrRowStatus\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for VRRP operations.\"\"\",\n        }, # group\n        \"vrrpStatsGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.2.2\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vrrpRouterChecksumErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpRouterVersionErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpRouterVrIdErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsBecomeMaster\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsAdvertiseRcvd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsAdvertiseIntervalErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsAuthFailures\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsIpTtlErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsPriorityZeroPktsRcvd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsPriorityZeroPktsSent\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsInvalidTypePktsRcvd\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsAddressListErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsInvalidAuthType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsAuthTypeMismatch\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsPacketLengthErrors\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for VRRP statistics.\"\"\",\n        }, # group\n        \"vrrpTrapGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.2.3\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vrrpTrapPacketSrc\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpTrapAuthErrorType\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"Conformance group for objects contained in VRRP notifications.\"\"\",\n        }, # group\n        \"vrrpNotificationGroup\" : {\n            \"nodetype\" : \"group\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.2.4\",\n            \"status\" : \"current\",\n            \"members\" : {\n                \"vrrpTrapNewMaster\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpTrapAuthFailure\" : {\n                    \"nodetype\" : \"member\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            }, # members\n            \"description\" :\n                \"\"\"The VRRP MIB Notification Group.\"\"\",\n        }, # group\n    }, # groups\n\n    \"compliances\" : {\n        \"vrrpMIBCompliance\" : {\n            \"nodetype\" : \"compliance\",\n            \"moduleName\" : \"VRRP-MIB\",\n            \"oid\" : \"1.3.6.1.2.1.68.3.1.1\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The core compliance statement for all VRRP implementations.\"\"\",\n            \"requires\" : {\n                \"vrrpOperGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n                \"vrrpStatsGroup\" : {\n                    \"nodetype\" : \"mandatory\",\n                    \"module\" : \"VRRP-MIB\"\n                },\n            }, # requires\n            \"refinements\" : {\n                \"vrrpOperPriority\" : {\n                    \"module\" : \"VRRP-MIB\",\n                    \"writesyntax\" : {\n                        \"type\" :                         {\n                            \"basetype\" : \"Integer32\",\n                            \"ranges\" : [\n                            {\n                                \"min\" : \"1\",\n                                \"max\" : \"255\"\n                            },\n                            ],\n                            \"range\" : {\n                                \"min\" : \"1\",\n                                \"max\" : \"255\"\n                            },\n                        },\n                    }, # writesyntax\n                    \"description\" :\n                        \"\"\"SETable values are from 1 to 255.\"\"\",\n                },\n            }, # refinements\n\n        }, # compliance\n    }, # compliances\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/WLSX-SYSTEMEXT-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python WLSX-SYSTEMEXT-MIB\n\nFILENAME = \"./WLSX-SYSTEMEXT-MIB\"\n\nMIB = {\n    \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n\n    \"WLSX-SYSTEMEXT-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv2\",\n        \"organization\" :\n            \"\"\"Aruba, a Hewlett Packard Enterprise company\"\"\",\n        \"contact\" : \n            \"\"\"Postal:    3333 Scott Blvd,\nSanta Clara, CA 95054\nE-mail:     aruba-ext-eng-reg@hpe.com\nPhone:      408 227 4500\nFax:        408 752 0626\"\"\",\n        \"description\" :\n            \"\"\"This MIB module defines MIB objects which provide\nSystem level information about the Aruba controller.\"\"\",\n        \"revisions\" : (\n            {\n                \"date\" : \"2020-08-14 17:45\",\n                \"description\" :\n                    \"\"\"The initial revision.\"\"\",\n            },\n        ),\n        \"identity node\" : \"wlsxSystemExtMIB\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TEXTUAL-CONVENTION\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"MODULE-IDENTITY\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"snmpModules\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Integer32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"Counter32\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"SNMPv2-SMI\", \"name\" : \"NOTIFICATION-TYPE\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TDomain\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"PhysAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TimeInterval\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"RowStatus\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"StorageType\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TestAndIncr\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n        {\"module\" : \"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n        {\"module\" : \"ARUBA-TC\", \"name\" : \"ArubaSwitchRole\"},\n        {\"module\" : \"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n        {\"module\" : \"ARUBA-TC\", \"name\" : \"ArubaCardType\"},\n        {\"module\" : \"SNMPv2-CONF\", \"name\" : \"OBJECT-GROUP\"},\n        {\"module\" : \"ARUBA-MIB\", \"name\" : \"wlsxEnterpriseMibModules\"},\n    ),\n\n    \"nodes\" : {\n        \"wlsxSystemExtMIB\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2\",\n            \"status\" : \"current\",\n        }, # node\n        \"wlsxSystemExtGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1\",\n        }, # node\n        \"wlsxSysExtSwitchIp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Controller IP as configured by the user. This IP address uniquely \nidentifies the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtHostname\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Name of the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtModelName\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Model Name of the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchRole\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaSwitchRole\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Role of this controller in the Aruba Domain.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchMasterIp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSwitch IP of the master controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\nSystem notion of the local date and time of day.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchBaseMacaddress\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"MacAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe Base MAC address of the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtFanTrayAssemblyNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nAssembly number of the Fan tray.\"\"\",\n        }, # scalar\n        \"wlsxSysExtFanTraySerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSerial number of the Fan tray\"\"\",\n        }, # scalar\n        \"wlsxSysExtInternalTemparature\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nInternal temperature in the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtLicenseSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe license serial number of the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchLicenseCount\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe number of licenses installed on the controller\"\"\",\n        }, # scalar\n        \"wlsxSysExtProcessorTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.13\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe table of processors contained by the controller.\"\"\",\n        }, # table\n        \"wlsxSysExtProcessorEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.13.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtProcessorID\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one processor contained by the controller.\"\"\",\n        }, # row\n        \"sysExtProcessorID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nProcessor Index.\"\"\",\n        }, # column\n        \"sysExtProcessorDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nDescription of the processor.\"\"\",\n        }, # column\n        \"sysExtProcessorLoad\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe average, over the last minute, of the percentage of\ntime that this processor was not idle.\"\"\",\n        }, # column\n        \"wlsxSysExtStorageTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe table of Storage-devices contained by the controller.\"\"\",\n        }, # table\n        \"wlsxSysExtStorageEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtStorageIndex\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one long-term storage device contained by the \ncontroller.\"\"\",\n        }, # row\n        \"sysExtStorageIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIndex into the table.\"\"\",\n        }, # column\n        \"sysExtStorageType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"ram\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"flashMemory\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nType of the storage.\"\"\",\n        }, # column\n        \"sysExtStorageSize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nTotal size of the storage filesystem in MB.\"\"\",\n        }, # column\n        \"sysExtStorageUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUsed Storage in MB.\"\"\",\n        }, # column\n        \"sysExtStorageName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nName of the storage filesystem.\"\"\",\n        }, # column\n        \"wlsxSysExtMemoryTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe memory status of the controller\"\"\",\n        }, # table\n        \"wlsxSysExtMemoryEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtMemoryIndex\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one memory region on the controller.  Currently,\nonly the control processor memory is monitored.\"\"\",\n        }, # row\n        \"sysExtMemoryIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIndex into the table.\"\"\",\n        }, # column\n        \"sysExtMemorySize\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nTotal memory in KB.\"\"\",\n        }, # column\n        \"sysExtMemoryUsed\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUsed memory in KB.\"\"\",\n        }, # column\n        \"sysExtMemoryFree\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nFree memory in KB.\"\"\",\n        }, # column\n        \"wlsxSysExtCardTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe table of Hardware modules in the controller.\"\"\",\n        }, # table\n        \"wlsxSysExtCardEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtCardSlot\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one Hardware Module in the controller.\"\"\",\n        }, # row\n        \"sysExtCardSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nSlot in which this card is located, offset by one.  For the user-visible\nslot number see sysExtCardUserSlot\"\"\",\n        }, # column\n        \"sysExtCardType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaCardType\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nType of the Card.\"\"\",\n        }, # column\n        \"sysExtCardNumOfPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nNumber of data ports on the card.\t\"\"\",\n        }, # column\n        \"sysExtCardNumOfFastethernetPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nNumber of Fastethernet ports on the card.\"\"\",\n        }, # column\n        \"sysExtCardNumOfGigPorts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nNumber of Gigabit ethernet ports on the card.\"\"\",\n        }, # column\n        \"sysExtCardSerialNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSerial number of the card.\"\"\",\n        }, # column\n        \"sysExtCardAssemblyNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nAssembly Number of the card.\"\"\",\n        }, # column\n        \"sysExtCardManufacturingDate\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nCard manufacturing date.\"\"\",\n        }, # column\n        \"sysExtCardHwRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nHardware revision of the card.\"\"\",\n        }, # column\n        \"sysExtCardFpgaRevision\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nFpga revision number.\"\"\",\n        }, # column\n        \"sysExtCardSwitchChip\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSwitching Chip version.\"\"\",\n        }, # column\n        \"sysExtCardStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nStatus of the card.\"\"\",\n        }, # column\n        \"sysExtCardUserSlot\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nUser-visible (zero-based) slot number.\"\"\",\n        }, # column\n        \"sysExtCardServiceTag\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.14\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nService Tag of the card.\"\"\",\n        }, # column\n        \"sysExtCardPartNumber\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.16.1.15\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nService Tag of the card.\"\"\",\n        }, # column\n        \"wlsxSysExtFanTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.17\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe table of all supported fans in the controller. Not supported in Aruba 200/800 and 2400 controllers.\"\"\",\n        }, # table\n        \"wlsxSysExtFanEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.17.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtFanIndex\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one fan.\"\"\",\n        }, # row\n        \"sysExtFanIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIndex into the table.\"\"\",\n        }, # column\n        \"sysExtFanStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nStatus of the Fan.\"\"\",\n        }, # column\n        \"wlsxSysExtPowerSupplyTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.18\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"\nThe table of all supported Power supplies in the controller. Not supported in Aruba 200, 800 and 2400 controllers.\"\"\",\n        }, # table\n        \"wlsxSysExtPowerSupplyEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.18.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtPowerSupplyIndex\",\n            ],\n            \"description\" :\n                \"\"\"\nAn entry for one power supply.\"\"\",\n        }, # row\n        \"sysExtPowerSupplyIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIndex into the table.\"\"\",\n        }, # column\n        \"sysExtPowerSupplyStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nStatus of the power supply.\"\"\",\n        }, # column\n        \"wlsxSysExtSwitchListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This Table will list all the controllers in the Aruba Domain.\nIt will be populated only on the master controller. Local controllers\nreturn empty table.\"\"\",\n        }, # table\n        \"wlsxSysExtSwitchListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtSwitchIPAddress\",\n            ],\n            \"description\" :\n                \"\"\"Switch List Entry\"\"\",\n        }, # row\n        \"sysExtSwitchIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIP Address of the controller.\"\"\",\n        }, # column\n        \"sysExtSwitchRole\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaSwitchRole\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nRole of the controller.\"\"\",\n        }, # column\n        \"sysExtSwitchLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLocation of the controller\"\"\",\n        }, # column\n        \"sysExtSwitchSWVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSoftware version the controller is running.\"\"\",\n        }, # column\n        \"sysExtSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nStatus of the controller.\"\"\",\n        }, # column\n        \"sysExtSwitchName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nHost name of the controller.\"\"\",\n        }, # column\n        \"sysExtSwitchSerNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSerial number of the controller.\"\"\",\n        }, # column\n        \"wlsxSysExtSwitchLicenseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This table lists all licenses installed on the controller.\"\"\",\n        }, # table\n        \"wlsxSysExtLicenseEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtLicenseIndex\",\n            ],\n            \"description\" :\n                \"\"\"License Entry\"\"\",\n        }, # row\n        \"sysExtLicenseIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nLicense ID number\"\"\",\n        }, # column\n        \"sysExtLicenseKey\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLicense Key\"\"\",\n        }, # column\n        \"sysExtLicenseInstalled\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLicense installation time\"\"\",\n        }, # column\n        \"sysExtLicenseExpires\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLicense expiry time\"\"\",\n        }, # column\n        \"sysExtLicenseFlags\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLicense flags; E - enabled; A - auto-generated;\n               R - reboot required to activate\"\"\",\n        }, # column\n        \"sysExtLicenseService\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"DisplayString\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe service enabled by this license.\"\"\",\n        }, # column\n        \"wlsxSysExtMMSCompatLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.21\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLists the compatibility level of this controller with the MMS\"\"\",\n        }, # scalar\n        \"wlsxSysExtMMSConfigID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.22\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis Object represents the value of the MMS Configuration ID in the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtControllerConfigID\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.23\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis Object represents the value of the Controller's Configuration ID.\"\"\",\n        }, # scalar\n        \"wlsxSysExtIsMMSConfigUpdateEnabled\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.24\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-TC\", \"name\" : \"TruthValue\"},\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"\nThis objects indicates whether the controller is configured to accept configuration snapshots from MMS.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchLastReload\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.25\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThe reason for the last controller reload\"\"\",\n        }, # scalar\n        \"wlsxSysExtLastStatsReset\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.26\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLast time switch stats was reset\"\"\",\n        }, # scalar\n        \"wlsxSysExtHwVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.27\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Hardware version of the switch.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.28\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Software version of the switch.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSerialNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.29\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The serial number of the switch.\"\"\",\n        }, # scalar\n        \"wlsxSysExtCpuUsedPercent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.30\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The CPU used percent of the switch\"\"\",\n        }, # scalar\n        \"wlsxSysExtMemoryUsedPercent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.31\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"Gauge32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The memory used percent of the switch\"\"\",\n        }, # scalar\n        \"wlsxSysExtPacketLossPercent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.32\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The packet loss count of the switch\"\"\",\n        }, # scalar\n        \"wlsxSysExtPoweredViaPoe\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.33\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Switch is powered using POE power.\"\"\",\n        }, # scalar\n        \"wlsxSysVMHostType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.34\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Host type is KVM/ HyperV/ VMware.\"\"\",\n        }, # scalar\n        \"wlsxSysExtProcessorModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.35\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Processor Model Name.\"\"\",\n        }, # scalar\n        \"wlsxSysExtTotalCpu\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.36\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total number of Control path and datapath CPUs\nin the controller.\"\"\",\n        }, # scalar\n        \"wlsxSysExtTotalSocket\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.37\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Total sockets present in the VM.\"\"\",\n        }, # scalar\n        \"wlsxAuthFailIp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.38\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"SNMPv2-SMI\", \"name\" : \"IpAddress\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"This variable contains the last SNMP\nauthorization failure IP address.\"\"\",\n        }, # scalar\n        \"wlsxSysExtDiskSize\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.39\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Supervisor Card Flash Memory in MB.\"\"\",\n        }, # scalar\n        \"wlsxNSysExtSwitchListTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"This new Table will list all the controllers in the Aruba Domain.\nIt will be populated only on the master controller. Local controllers\nreturn empty table. It is a common table for IPv4 and IPv6 Address of\nthe controller.\"\"\",\n        }, # table\n        \"wlsxNSysExtSwitchListEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"sysExtNSwitchIPAddressType\",\n                \"sysExtNSwitchIPAddress\",\n            ],\n            \"description\" :\n                \"\"\"New Switch List Entry\"\"\",\n        }, # row\n        \"sysExtNSwitchIPAddressType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nType of IP Address of the controller, either IPv4 / IPv6.\"\"\",\n        }, # column\n        \"sysExtNSwitchIPAddress\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"45\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"45\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"\nIPv4 or IPv6 Address of the controller.\"\"\",\n        }, # column\n        \"sysExtNSwitchRole\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaSwitchRole\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nRole of the controller.\"\"\",\n        }, # column\n        \"sysExtNSwitchLocation\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nLocation of the controller\"\"\",\n        }, # column\n        \"sysExtNSwitchSWVersion\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSoftware version the controller is running.\"\"\",\n        }, # column\n        \"sysExtNSwitchStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"ARUBA-TC\", \"name\" : \"ArubaActiveState\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nStatus of the controller.\"\"\",\n        }, # column\n        \"sysExtNSwitchName\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"128\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nHost name of the controller.\"\"\",\n        }, # column\n        \"sysExtNSwitchSerNo\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.1.40.1.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"SNMPv2-TC\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nSerial number of the controller.\"\"\",\n        }, # column\n        \"wlsxSystemExtTableGenNumberGroup\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2\",\n        }, # node\n        \"wlsxSysExtUserTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.1\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the user table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtAPBssidTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.2\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the AP BSSID table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtAPRadioTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.3\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the Radio table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtAPTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.4\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the AP table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtSwitchListTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.5\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the Switch list table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtPortTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.6\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the port table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtVlanTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.7\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the Vlan table was \nmodified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtVlanInterfaceTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.8\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the Vlan Interface table \nwas modified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtLicenseTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.9\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the license table\nwas modified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtMonAPTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.10\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the monitored AP table\nwas modified since reboot.\"\"\",\n        }, # scalar\n        \"wlsxSysExtMonStationTableGenNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"WLSX-SYSTEMEXT-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.14823.2.2.1.2.2.11\",\n            \"status\" : \"deprecated\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"Integer32\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"\nThis objects denotes the number of times the monitored station table\nwas modified since reboot.\"\"\",\n        }, # scalar\n    }, # nodes\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/XUPS-MIB.py",
    "content": "# python version 1.0\t\t\t\t\t\tDO NOT EDIT\n#\n# Generated by smidump version 0.4.8:\n#\n#   smidump -f python XUPS-MIB\n\nFILENAME = \"Xups.mib\"\n\nMIB = {\n    \"moduleName\" : \"XUPS-MIB\",\n\n    \"XUPS-MIB\" : {\n        \"nodetype\" : \"module\",\n        \"language\" : \"SMIv1\",\n    },\n\n    \"imports\" : (\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"enterprises\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Gauge\"},\n        {\"module\" : \"RFC1155-SMI\", \"name\" : \"Counter\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"DisplayString\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"ifIndex\"},\n        {\"module\" : \"RFC1213-MIB\", \"name\" : \"ifDescr\"},\n        {\"module\" : \"RFC-1212\", \"name\" : \"OBJECT-TYPE\"},\n        {\"module\" : \"RFC-1215\", \"name\" : \"TRAP-TYPE\"},\n    ),\n\n    \"nodes\" : {\n        \"powerware\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534\",\n        }, # node\n        \"xups\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1\",\n        }, # node\n        \"xupsIdent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.1\",\n        }, # node\n        \"xupsIdentManufacturer\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"31\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Manufacturer Name (e.g. Powerware Corporation).\"\"\",\n        }, # scalar\n        \"xupsIdentModel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS Model (e.g. Powerware Plus Model 18).\"\"\",\n        }, # scalar\n        \"xupsIdentSoftwareVersion\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The firmware revision level(s) of the UPS microcontroller(s).\"\"\",\n        }, # scalar\n        \"xupsIdentOemCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"255\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A binary code indicating who the UPS was manufactured or labeled for.  \n0 or 255 indicates Powerware itself.\"\"\",\n        }, # scalar\n        \"xupsBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2\",\n        }, # node\n        \"xupsBatTimeRemaining\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery run time in seconds before UPS turns off due\nto low battery.\"\"\",\n        }, # scalar\n        \"xupsBatVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery voltage as reported by the UPS meters.\"\"\",\n        }, # scalar\n        \"xupsBatCurrent\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-2147483648\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-2147483648\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery Current as reported by the UPS metering.\nCurrent is positive when discharging, negative\nwhen recharging the battery.\"\"\",\n        }, # scalar\n        \"xupsBatCapacity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Battery percent charge.\"\"\",\n        }, # scalar\n        \"xupsBatteryAbmStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"batteryCharging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"batteryDischarging\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"batteryFloating\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"batteryResting\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Gives the status of the Advanced Battery Management;\nbatteryFloating(3) status means that the charger is temporarily \ncharging the battery to its float voltage; batteryResting(4) is the \nstate when the battery is fully charged and none of the other actions \n(charging/discharging/floating) is being done.\"\"\",\n        }, # scalar\n        \"xupsBatteryLastReplacedDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.2.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The date when the Batteries in this UPS were last replaced.  Should be\nthe same as xupsConfigInstallDate initially. Free text format, so the  \npreferred local date format may be used (MM/DD/YYYY, DD-Mon-YYYY, etc).\"\"\",\n        }, # scalar\n        \"xupsInput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3\",\n        }, # node\n        \"xupsInputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The utility line frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"xupsInputLineBads\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Counter\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of times the Input was out of tolerance\nin voltage or frequency.\"\"\",\n        }, # scalar\n        \"xupsInputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n        }, # scalar\n        \"xupsInputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumPhases and including the xupsInput group.\"\"\",\n        }, # table\n        \"xupsInputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsInputPhase\",\n            ],\n            \"description\" :\n                \"\"\"The input table entry containing the current,\nvoltage, etc.\"\"\",\n        }, # row\n        \"xupsInputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the phase.  Serves as index for input table.\"\"\",\n        }, # column\n        \"xupsInputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input voltage from the UPS meters in volts.\"\"\",\n        }, # column\n        \"xupsInputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input current from the UPS meters in amps.\"\"\",\n        }, # column\n        \"xupsInputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured input real power in watts.\"\"\",\n        }, # column\n        \"xupsInputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"primaryUtility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bypassFeed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"secondaryUtility\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"generator\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"flywheel\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"fuelcell\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present external source of input power.  The enumeration\nnone(2) indicates that there is no external source of \npower, for example, the UPS is On Battery (an internal source).\nThe bypassFeed(4) can only be used when the Bypass source is known\nto be a separate utility feed than the primaryUtility(3).\"\"\",\n        }, # scalar\n        \"xupsDualInputStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"bothSourcesBad\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"primarySourceGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"secondarySourceGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bothSourcesGood\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present status of the sources of input power in a dual source UPS.  \nThe enumeration primarySourceGood(2) indicates that the primary source\nof power is present and within 'normal' ranges for voltage and\nfrequency, but the secondary source is either not present or not in an\nacceptable range.\nThe enumeration bothSourcesGood(4) indicates that both sources are present\nand within their respective 'normal' ranges; \nbothSourcesBad(1) indicates that neither source is present, or, if present, \nis not within acceptable ranges.\nThis object will only be implemented for UPSs with two sources of input\npower, e.g., redundant AC feeds or a separate Bypass or Generator source.\nThe secondary source will not be an AC power source in all cases.\"\"\",\n        }, # scalar\n        \"xupsSecondaryInputWatch\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.3.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"disabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"enabled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"This object enables(2) or disables(1) the alarms and traps related to the\navailability and use of the secondary input of a dual-input UPS\n(i.e., OnAlternatePowerSource and AltPowerNotAvailable).\nTo avoid nuisance alarms and traps, this object should be set to  \ndisabled(1) when the UPS is not wired to a secondary source of power.\nThis object will only be implemented for UPSs with two sources of input\npower, i.e., redundant AC feeds or a separate Bypass or Generator source.\"\"\",\n        }, # scalar\n        \"xupsOutput\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4\",\n        }, # node\n        \"xupsOutputLoad\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The UPS output load in percent of rated capacity.\"\"\",\n        }, # scalar\n        \"xupsOutputFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"xupsOutputNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of metered output phases, serves as the table\nindex.\"\"\",\n        }, # scalar\n        \"xupsOutputTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to NumPhases\nand including the xupsOutput group.\"\"\",\n        }, # table\n        \"xupsOutputEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsOutputPhase\",\n            ],\n            \"description\" :\n                \"\"\"Output Table Entry containing voltage, current, etc.\"\"\",\n        }, # row\n        \"xupsOutputPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number {1..3} of the output phase.\"\"\",\n        }, # column\n        \"xupsOutputVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured output voltage from the UPS metering in volts.\"\"\",\n        }, # column\n        \"xupsOutputCurrent\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS output current in amps.\"\"\",\n        }, # column\n        \"xupsOutputWatts\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.4.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured real output power in watts.\"\"\",\n        }, # column\n        \"xupsOutputSource\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.4.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"other\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"normal\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"bypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"battery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"booster\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"reducer\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"parallelCapacity\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                    \"parallelRedundant\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"9\"\n                    },\n                    \"highEfficiencyMode\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"10\"\n                    },\n                    \"maintenanceBypass\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"11\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The present source of output power.  The enumeration\nnone(2) indicates that there is no source of output\npower (and therefore no output power), for example,\nthe system has opened the output breaker.\"\"\",\n        }, # scalar\n        \"xupsBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5\",\n        }, # node\n        \"xupsBypassFrequency\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The bypass frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"xupsBypassNumPhases\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of lines in the UPS bypass table.\"\"\",\n        }, # scalar\n        \"xupsBypassTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.3\",\n            \"status\" : \"current\",\n        }, # table\n        \"xupsBypassEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.3.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsBypassPhase\",\n            ],\n            \"description\" :\n                \"\"\"Entry in the XUPS bypass table.\"\"\",\n        }, # row\n        \"xupsBypassPhase\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.3.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Bypass Phase, index for the table.\"\"\",\n        }, # column\n        \"xupsBypassVoltage\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.5.3.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The measured UPS bypass voltage in volts.\"\"\",\n        }, # column\n        \"xupsEnvironment\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6\",\n        }, # node\n        \"xupsEnvAmbientTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the ambient temperature in the vicinity of the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"xupsEnvAmbientLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the ambient temperature; if xupsEnvAmbientTemp \nfalls below this value, the xupsAmbientTempBad alarm will occur.\"\"\",\n        }, # scalar\n        \"xupsEnvAmbientUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the ambient temperature; if xupsEnvAmbientTemp \nrises above this value, the xupsAmbientTempBad alarm will occur.\nThis value should be greater than xupsEnvAmbientLowerLimit.\"\"\",\n        }, # scalar\n        \"xupsEnvAmbientHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of the ambient humidity in the vicinity of the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"xupsEnvRemoteTemp\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of a remote temperature sensor connected to the  \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"xupsEnvRemoteHumidity\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The reading of a remote humidity sensor connected to the \nUPS or SNMP agent.\"\"\",\n        }, # scalar\n        \"xupsEnvNumContacts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of Contacts in the xupsContactSenseTable.\nThis object indicates the number of rows in the \nxupsContactSenseTable.\"\"\",\n        }, # scalar\n        \"xupsContactSenseTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A list of Contact Sensing table entries.  \nThe number of entries is given by the value of \nxupsEnvNumContacts.\"\"\",\n        }, # table\n        \"xupsContactsTableEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsContactIndex\",\n            ],\n            \"description\" :\n                \"\"\"An entry containing information applicable \nto a particular Contact input.\"\"\",\n        }, # row\n        \"xupsContactIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"1024\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Contact identifier; identical to the Contact Number.\nThis object is not-accessible to MIB browsers, but had to be changed to\nread-only to satisfy SMIv2 syntax checkers since it is included in traps.\"\"\",\n        }, # column\n        \"xupsContactType\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"normallyOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"normallyClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"anyChange\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"notUsed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The normal state for this contact.  The 'other'\nstate is the Active state for generating the xupstdContactActiveNotice\ntrap.  If anyChange(3) is selected, then this trap is sent\nany time the contact changes to either Open or Closed.\nNo traps are sent if the Contact is set to notUsed(4).\nIn many cases, the configuration for Contacts may be done by other \nmeans, so this object may be read-only.\"\"\",\n        }, # column\n        \"xupsContactState\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"open\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"closed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"openWithNotice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"closedWithNotice\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current state of the Contact input;\nthe value is based on the open/closed input state \nand the setting for xupsContactType.\nWhen entering the openWithNotice(3) and closedWithNotice(4) \nstates, no entries added to the xupsAlarmTable, but\nthe xupstdContactActiveNotice trap is sent.\"\"\",\n        }, # column\n        \"xupsContactDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.8.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"63\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"A label identifying the Contact.  This object should be\nset by the administrator.\"\"\",\n        }, # column\n        \"xupsEnvRemoteTempLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.9\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the remote temperature; if xupsEnvRemoteTemp \nfalls below this value, the xupsRemoteTempBad alarm will occur.\"\"\",\n        }, # scalar\n        \"xupsEnvRemoteTempUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.10\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-100\",\n                        \"max\" : \"200\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the remote temperature; if xupsEnvRemoteTemp \nrises above this value, the xupsRemoteTempBad alarm will occur.\nThis value should be greater than xupsEnvRemoteTempLowerLimit.\"\"\",\n        }, # scalar\n        \"xupsEnvRemoteHumidityLowerLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.11\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Lower Limit of the remote humidity reading; if xupsEnvRemoteHumidity\nfalls below this value, the xupsRemoteHumidityBad alarm will occur.\"\"\",\n        }, # scalar\n        \"xupsEnvRemoteHumidityUpperLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.6.12\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"100\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Upper Limit of the remote humidity reading; if xupsEnvRemoteHumidity \nrises above this value, the xupsRemoteHumidityBad alarm will occur.\nThis value should be greater than xupsEnvRemoteHumidityLowerLimit.\"\"\",\n        }, # scalar\n        \"xupsAlarm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7\",\n        }, # node\n        \"xupsAlarms\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The current number of alarm conditions.\"\"\",\n        }, # scalar\n        \"xupsAlarmTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.2\",\n            \"status\" : \"current\",\n        }, # table\n        \"xupsAlarmEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsAlarmID\",\n            ],\n        }, # row\n        \"xupsAlarmID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A unique identifier for an alarm condition.\"\"\",\n        }, # column\n        \"xupsAlarmDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"\", \"name\" : \"ObjectIdentifier\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A reference to an alarm description object.  The object\nreferenced should not be accessible, but rather be used to\nprovide a unique description of the alarm condition.\"\"\",\n        }, # column\n        \"xupsAlarmTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"TimeTicks\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The value of the MIB-II variable sysUpTime when the alarm\ncondition occurred.\"\"\",\n        }, # column\n        \"xupsOnBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.3\",\n        }, # node\n        \"xupsLowBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.4\",\n        }, # node\n        \"xupsUtilityPowerRestored\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.5\",\n        }, # node\n        \"xupsReturnFromLowBattery\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.6\",\n        }, # node\n        \"xupsOutputOverload\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.7\",\n        }, # node\n        \"xupsInternalFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.8\",\n        }, # node\n        \"xupsBatteryDischarged\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.9\",\n        }, # node\n        \"xupsInverterFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.10\",\n        }, # node\n        \"xupsOnBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.11\",\n        }, # node\n        \"xupsBypassNotAvailable\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.12\",\n        }, # node\n        \"xupsOutputOff\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.13\",\n        }, # node\n        \"xupsInputFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.14\",\n        }, # node\n        \"xupsBuildingAlarm\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.15\",\n        }, # node\n        \"xupsShutdownImminent\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.16\",\n        }, # node\n        \"xupsOnInverter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.17\",\n        }, # node\n        \"xupsAlarmNumEvents\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.18\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" : { \"module\" :\"RFC1155-SMI\", \"name\" : \"Gauge\"},\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of entries in the UPS event history queue.\"\"\",\n        }, # scalar\n        \"xupsAlarmEventTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"A table of the UPS internal event history queue.\"\"\",\n        }, # table\n        \"xupsAlarmEventEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsAlarmEventID\",\n            ],\n            \"description\" :\n                \"\"\"One of the entries in the UPS event history queue.\"\"\",\n        }, # row\n        \"xupsAlarmEventID\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"400\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"400\"\n                    },\n                },\n            },\n            \"access\" : \"noaccess\",\n            \"description\" :\n                \"\"\"A unique number that reflects the order in which the event\noccurred. The oldest event in the queue will be number 1.\nSubsequent events will be numbered 2, 3, 4, etc.\"\"\",\n        }, # column\n        \"xupsAlarmEventDateAndTime\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1.2\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The time and date that an event occurred as recorded in the UPS\ninternal event queue.  This string will reflect the time and\ndate as set in the UPS itself and will not be referenced to\nsysUpTime.  The format is MM/DD/YYYY:HH:MM:SS.  Time is 24 hour standard.\"\"\",\n        }, # column\n        \"xupsAlarmEventKind\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1.3\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"occurred\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"cleared\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Enumerated value that tells whether the event is an\noccurrence of an alarm condition or a clearing of an\nalarm condition.\"\"\",\n        }, # column\n        \"xupsAlarmEventDescr\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A description of the event stored in the UPS event queue.  \nThis description will be a sixteen bit integer value \nrepresenting one of the defined alarms in the Powerware Binary \nComputer Mode communication specification; for example,\na value of 0 represents the 'Inverter AC Over Voltage'\nalarm (byte 1, bit 0 in the BCM Alarm Map).\"\"\",\n        }, # column\n        \"xupsAlarmEventMsg\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.19.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"80\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A text string describing each entry in the Event Log.  The format of this\ntext message is free (not fixed) for the operator to read; good contents \nwould be a time & date stamp, the event type, and a description of the event.\"\"\",\n        }, # column\n        \"xupsBreakerOpen\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.20\",\n        }, # node\n        \"xupsAlarmEntryAdded\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.21\",\n        }, # node\n        \"xupsAlarmEntryRemoved\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.22\",\n        }, # node\n        \"xupsAlarmBatteryBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.23\",\n        }, # node\n        \"xupsOutputOffAsRequested\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.24\",\n        }, # node\n        \"xupsDiagnosticTestFailed\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.25\",\n        }, # node\n        \"xupsCommunicationsLost\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.26\",\n        }, # node\n        \"xupsUpsShutdownPending\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.27\",\n        }, # node\n        \"xupsAlarmTestInProgress\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.28\",\n        }, # node\n        \"xupsAmbientTempBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.29\",\n        }, # node\n        \"xupsLossOfRedundancy\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.30\",\n        }, # node\n        \"xupsAlarmTempBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.31\",\n        }, # node\n        \"xupsAlarmChargerFailed\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.32\",\n        }, # node\n        \"xupsAlarmFanFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.33\",\n        }, # node\n        \"xupsAlarmFuseFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.34\",\n        }, # node\n        \"xupsPowerSwitchBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.35\",\n        }, # node\n        \"xupsModuleFailure\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.36\",\n        }, # node\n        \"xupsOnAlternatePowerSource\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.37\",\n        }, # node\n        \"xupsAltPowerNotAvailable\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.38\",\n        }, # node\n        \"xupsNoticeCondition\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.39\",\n        }, # node\n        \"xupsRemoteTempBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.40\",\n        }, # node\n        \"xupsRemoteHumidityBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.41\",\n        }, # node\n        \"xupsAlarmOutputBad\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.42\",\n        }, # node\n        \"xupsAlarmAwaitingPower\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.43\",\n        }, # node\n        \"xupsOnMaintenanceBypass\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.7.44\",\n        }, # node\n        \"xupsTest\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.8\",\n        }, # node\n        \"xupsTestStart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.8.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"testBattery\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"noTestStarted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"testSystem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"testSecondarySource\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"flashLightsTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"cancelTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this object initiates the requested Test.\nIf a UPS does not support the requested test, the set operation may succeed\nbut the result will end up as notSupported.\nWhen read, this object indicates the last test requested via this object, if any.\nCurrently only the flashLightsTest(5) can be canceled with cancelTest(6).\"\"\",\n        }, # scalar\n        \"xupsTestBatteryStatus\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.8.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"inhibited\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"scheduled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reading this enumerated value gives an indication of the (last) \nUPS Battery test status.\"\"\",\n        }, # scalar\n        \"xupsLastGeneralTest\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.8.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"noTestStarted\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"testSystem\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"testSecondarySource\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"flashLightsTest\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Indicates the last UPS test requested via xupsTestStart or by other \nnon-SNMP means, other than for the testBattery (1) case.\nThe results of the test indicated by this object are reported in \nxupsLastGeneralTestResult.\"\"\",\n        }, # scalar\n        \"xupsLastGeneralTestResult\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.8.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"passed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"failed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"inProgress\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"notSupported\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"inhibited\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"scheduled\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Reading this enumerated value gives the result of the test indicated\nin xupsLastGeneralTest.\"\"\",\n        }, # scalar\n        \"xupsControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9\",\n        }, # node\n        \"xupsControlOutputOffDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to turn off after the number of seconds.\nSetting it to 0 will cause an attempt to abort a pending\nshutdown.\"\"\",\n        }, # scalar\n        \"xupsControlOutputOnDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to turn on after the number of seconds.\nSetting it to 0 will cause an attempt to abort a pending\nstartup.\"\"\",\n        }, # scalar\n        \"xupsControlOutputOffTrapDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When xupsControlOutputOffDelay reaches this value, a trap will\nbe sent.\"\"\",\n        }, # scalar\n        \"xupsControlOutputOnTrapDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.4\",\n            \"status\" : \"obsolete\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"When xupsControlOutputOnDelay reaches this value, a\nxupsOutputOff trap will be sent.\"\"\",\n        }, # scalar\n        \"xupsControlToBypassDelay\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value to other than zero will cause the UPS\noutput to go to Bypass after the number of seconds.\n    If the Bypass is unavailable, this may cause the UPS\n    to not supply power to the load.\nSetting it to 0 will cause an attempt to abort a pending\nshutdown.\"\"\",\n        }, # scalar\n        \"xupsLoadShedSecsWithRestart\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.9.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value will cause the UPS output to turn off \nafter the set number of seconds, then restart (after a UPS-defined\n'down time') when the utility is again available.  \nUnlike xupsControlOutputOffDelay, which might or might not,\n  this object always maps to the XCP 0x8A Load Dump & Restart command,\n  so the desired shutdown and restart behavior is guaranteed to happen.\nOnce set, this command cannot be aborted.\n  This is the preferred Control object to use when performing an On\n  Battery OS Shutdown.\"\"\",\n        }, # scalar\n        \"xupsConfig\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10\",\n        }, # node\n        \"xupsConfigOutputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS Output voltage per phase in volts.\"\"\",\n        }, # scalar\n        \"xupsConfigInputVoltage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS Input voltage per phase in volts.\"\"\",\n        }, # scalar\n        \"xupsConfigOutputWatts\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal UPS available real power output in watts.\"\"\",\n        }, # scalar\n        \"xupsConfigOutputFreq\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The nominal output frequency in tenths of Hz.\"\"\",\n        }, # scalar\n        \"xupsConfigDateAndTime\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"22\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Date and time information for the UPS.  Setting this variable\nwill initiate a set UPS date and time to this value.  Reading\nthis variable will return the UPS time and date.  This value\nis not referenced to sysUpTime.  It is simply the clock value\nfrom the UPS real time clock.\nFormat is as follows: MM/DD/YYYY:HH:MM:SS.\"\"\",\n        }, # scalar\n        \"xupsConfigLowOutputVoltageLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Lower limit for acceptable Output Voltage, per the UPS\nspecifications.\"\"\",\n        }, # scalar\n        \"xupsConfigHighOutputVoltageLimit\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Upper limit for acceptable Output Voltage, per the UPS\nspecifications.\"\"\",\n        }, # scalar\n        \"xupsConfigInstallDate\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.10.8\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"16\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The date when this UPS was installed.  Free text format, so the \npreferred local date format may be used (MM/DD/YYYY, DD-Mon-YYYY, etc).\"\"\",\n        }, # scalar\n        \"xupsTrapControl\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11\",\n        }, # node\n        \"xupsMaxTrapLevel\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"none\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"critical\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"major\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"minor\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"allTraps\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The level of severity of traps which will be sent to the\nrequesting host; individual trap receivers will have\nindividual values for this variable.  Values are:\n(1) none: no traps will be sent to this host;\n(2) critical: only traps for Critical alarm conditions will\n   be sent to this host;\n(3) major: Critical and Major traps will be sent;\n(4) minor: All levels of alarming traps will be sent: Critical, Major, Minor\n   (This level was added in PowerMIB v3.11)\n(5) allTraps: all Traps will be sent to this host\n   (Critical, Major, Minor, Informational).\"\"\",\n        }, # scalar\n        \"xupsSendTrapType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"stnd\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"xups\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"stndPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"xupsPlus\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The type of traps which will be sent to the\nrequesting host; individual trap receivers will have\nindividual values for this variable.  The additional\nvariables in types (3) and (4) are useful for determining\nwhich UPS is the source on multi-port network adapters,\nand for getting additional descriptive information.\nTypes (1) through (4) are all SNMP version 1 trap PDUs.\nValues are:\n(1) stnd: Traps as defined in the Standard UPS MIB (RFC1628)\n   and Generic (MIB II) traps as defined in RFC 1215.\n(2) xups: xupsTrapDefined Traps as defined in the PowerMIB\n   and Generic (MIB II) traps as defined in RFC 1215.\n(3 Deprecated) stndPlus: same as stnd plus variables from the interface\n   group and, where appropriate, xupsTrapMessage.\n(4 Deprecated) xupsPlus: xupsTrapPortN Traps (same as xups plus \n   variables from the interface group) and, \n   for authFail, xupsTrapMessage.\"\"\",\n        }, # scalar\n        \"xupsTrapMessage\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"OctetString\",\n                    \"parent module\" : {\n                        \"name\" : \"RFC1213-MIB\",\n                        \"type\" : \"DisplayString\",\n                    },\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"79\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"A descriptive text message which may be sent with traps to\nfurther explain the reason for the trap.\nThis object is not-accessible to MIB browsers, but had to be changed to\nread-only to satisfy SMIv2 syntax checkers since it is included in traps.\"\"\",\n        }, # scalar\n        \"xupsTrapSource\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4\",\n        }, # node\n        \"xupsTrapDefined\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1\",\n        }, # node\n        \"xupsHeartbeatMinsInterval\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"How often to send the xupstdHeartbeat trap, in units of minutes.\nA setting of 0 disables the Heartbeat function.\"\"\",\n        }, # scalar\n        \"xupsRecep\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12\",\n        }, # node\n        \"xupsNumReceptacles\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of independently controllable Receptacles, as described in the \nxupsRecepTable.\"\"\",\n        }, # scalar\n        \"xupsRecepTable\" : {\n            \"nodetype\" : \"table\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2\",\n            \"status\" : \"current\",\n            \"description\" :\n                \"\"\"The Aggregate Object with number of entries equal to\nNumReceptacles and including the xupsRecep group.\"\"\",\n        }, # table\n        \"xupsRecepEntry\" : {\n            \"nodetype\" : \"row\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1\",\n            \"status\" : \"current\",\n            \"linkage\" : [\n                \"xupsRecepIndex\",\n            ],\n            \"description\" :\n                \"\"\"The Recep table entry, etc.\"\"\",\n        }, # row\n        \"xupsRecepIndex\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"1\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The number of the Receptacle. Serves as index for Receptacle table.\"\"\",\n        }, # column\n        \"xupsRecepStatus\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"on\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"off\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"pendingOff\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"pendingOn\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                    \"unknown\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"5\"\n                    },\n                    \"reserved\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"6\"\n                    },\n                    \"failedClosed\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"7\"\n                    },\n                    \"failedOpen\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"8\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"The Recep Status 1=On/Close, 2=Off/Open, 3=On w/Pending Off, \n4=Off w/Pending ON, 5=Unknown, 6=Reserved for future, \n7=Failed in Closed position, 8=Failed in Open position.\"\"\",\n        }, # column\n        \"xupsRecepOffDelaySecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The Delay until the Receptacle is turned Off.  Setting \nthis value to other than -1 will cause the UPS output to \nturn off after the number of seconds (0 is immediately).  \nSetting it to -1 will cause an attempt to abort a pending shutdown.\nWhen this object is set while the UPS is On Battery, it is not necessary\nto set xupsRecepOnDelaySecs, since the outlet will turn back on \nautomatically when power is available again.\"\"\",\n        }, # column\n        \"xupsRecepOnDelaySecs\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\" The Delay until the Receptacle is turned On.  Setting \nthis value to other than -1 will cause the UPS output to \nturn on after the number of seconds (0 is immediately).  \nSetting it to -1 will cause an attempt to abort a pending restart.\"\"\",\n        }, # column\n        \"xupsRecepAutoOffDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.5\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"The delay after going On Battery until the Receptacle is \nautomatically turned Off.  A value of -1 means that this Output should \nnever be turned Off automatically, but must be turned Off only by command.\nValues from 0 to 30 are valid, but probably innappropriate.\nThe AutoOffDelay can be used to prioritize loads in the event of a prolonged \npower outage; less critical loads will turn off earlier to extend battery \ntime for the more critical loads. If the utility power is restored before the \nAutoOff delay counts down to 0 on an outlet, that outlet will not turn Off.\"\"\",\n        }, # column\n        \"xupsRecepAutoOnDelay\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.6\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"-1\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Seconds delay after the Outlet is signaled to turn On before the Output is\nAutomatically turned ON. A value of -1 means that this Output should never\nbe turned On automatically, but only when specifically commanded to do so.\nA value of 0 means that the Receptacle should come On immediately\nat power-up or for an On command.\"\"\",\n        }, # column\n        \"xupsRecepShedSecsWithRestart\" : {\n            \"nodetype\" : \"column\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.12.2.1.7\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"2147483647\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Setting this value will cause the UPS output to turn off \nafter the set number of seconds, then restart (after a UPS-defined\n'down time') when the utility is again available.  \nUnlike xupsRecepOffDelaySecs, which might or might not,\n  this object always maps to the XCP 0x8A Load Dump & Restart command,\n  so the desired shutdown and restart behavior is guaranteed to happen.\nOnce set, this command cannot be aborted.\"\"\",\n        }, # column\n        \"xupsTopology\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.13\",\n        }, # node\n        \"xupsTopologyType\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.13.1\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Value which denotes the type of UPS by its power topology.  Values are the\nsame as those described in the XCP Topology block's Overall Topology field.\"\"\",\n        }, # scalar\n        \"xupsTopoMachineCode\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.13.2\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"32767\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"ID Value which denotes the Powerware model of the UPS for software.  Values \nare the same as those described in the XCP Configuration block's Machine Code \nfield.\"\"\",\n        }, # scalar\n        \"xupsTopoUnitNumber\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.13.3\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Integer32\",\n                    \"ranges\" : [\n                    {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                    ],\n                    \"range\" : {\n                        \"min\" : \"0\",\n                        \"max\" : \"64\"\n                    },\n                },\n            },\n            \"access\" : \"readonly\",\n            \"description\" :\n                \"\"\"Identifies which unit and what type of data is being reported.\nA value of 0 means that this MIB information comes from the top-level system \nview (eg, manifold module or system bypass cabinet reporting total system \noutput).  Standalone units also use a value of 0, since they are the 'full \nsystem' view.\nA value of 1 or higher indicates the number of the module in the system\nwhich is reporting only its own data in the PowerMIB objects.\"\"\",\n        }, # scalar\n        \"xupsTopoPowerStrategy\" : {\n            \"nodetype\" : \"scalar\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.13.4\",\n            \"status\" : \"current\",\n            \"syntax\" : {\n                \"type\" :                 {\n                    \"basetype\" : \"Enumeration\",\n                    \"highAlert\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"1\"\n                    },\n                    \"standard\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"2\"\n                    },\n                    \"enableHighEfficiency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"3\"\n                    },\n                    \"immediateHighEfficiency\" : {\n                        \"nodetype\" : \"namednumber\",\n                        \"number\" : \"4\"\n                    },\n                },\n            },\n            \"access\" : \"readwrite\",\n            \"description\" :\n                \"\"\"Value which denotes which Power Strategy is currently set for the UPS.\nThe values are:\nhighAlert(1) - The UPS shall optimize its operating state to maximize its \n        power-protection levels.  This mode will be held for at most 24 hours.\nstandard(2) - Balanced, normal power protection strategy. UPS will not enter \n        HE operating mode from this setting.\nenableHighEfficiency(3) - The UPS is enabled to enter HE operating mode to \n        optimize its operating state to maximize its efficiency, when \n        conditions change to permit it (as determined by the UPS).\nforceHighEfficiency(4) - If this value is permitted to be Set for this UPS,\n        and if conditions permit, requires the UPS to enter High Efficiency \n        mode now, without delay (for as long as utility conditions permit).\n        After successfully set to forceHighEfficiency(4), \n        xupsTopoPowerStrategy changes to value enableHighEfficiency(3).\nxupsOutputSource will indicate if the UPS status is actually operating in \nHigh Efficiency mode.\"\"\",\n        }, # scalar\n        \"xupsObjectId\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2\",\n        }, # node\n        \"powerwareEthernetSnmpAdapter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.1\",\n        }, # node\n        \"powerwareNetworkSnmpAdapterEther\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.2\",\n        }, # node\n        \"powerwareNetworkSnmpAdapterToken\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.3\",\n        }, # node\n        \"onlinetDaemon\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.4\",\n        }, # node\n        \"connectUPSAdapterEthernet\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.5\",\n        }, # node\n        \"powerwareNetworkDigitalIOEther\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.6\",\n        }, # node\n        \"connectUPSAdapterTokenRing\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.7\",\n        }, # node\n        \"simpleSnmpAdapter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.8\",\n        }, # node\n        \"powerwareEliSnmpAdapter\" : {\n            \"nodetype\" : \"node\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.2.9\",\n        }, # node\n    }, # nodes\n\n    \"notifications\" : {\n        \"xupstdControlOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.1\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS output power will turn off in a number of\nseconds equal to upsControlOutputOffTrapDelay.\"\"\",\n        }, # notification\n        \"xupstdControlOn\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.2\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS output power will turn on in a number of\nseconds equal to upsControlOutputOnTrapDelay.\"\"\",\n        }, # notification\n        \"xupstdOnBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.3\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS has no AC input power and is running on \nbattery.\"\"\",\n        }, # notification\n        \"xupstdLowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.4\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS batteries are low.  Tied to low battery \nalarm condition.\"\"\",\n        }, # notification\n        \"xupstdUtilityPowerRestored\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.5\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Input power has been restored after running on battery.\"\"\",\n        }, # notification\n        \"xupstdReturnFromLowBattery\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.6\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The battery has recovered from a low battery condition.\"\"\",\n        }, # notification\n        \"xupstdOutputOverload\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.7\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups has sensed an overload of greater than \n106 percent.  Tied to the 106% overload alarm.\"\"\",\n        }, # notification\n        \"xupstdInternalFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.8\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Some component of the ups - rectifier, inverter,\ncontrol panel has failed.  Tied to alarms indi-\ncating failure.\"\"\",\n        }, # notification\n        \"xupstdBatteryDischarged\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.9\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Battery Totally Discharged Alarm has occurred.\"\"\",\n        }, # notification\n        \"xupstdInverterFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.10\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups inverter is unavailable due to an internal failure.\"\"\",\n        }, # notification\n        \"xupstdOnBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.11\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups has gone on bypass for some reason.\"\"\",\n        }, # notification\n        \"xupstdBypassNotAvailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.12\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups bypass is unavailable\"\"\",\n        }, # notification\n        \"xupstdOutputOff\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.13\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups output is switched off.\"\"\",\n        }, # notification\n        \"xupstdInputFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.14\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups input power is incorrect in voltage,\nfrequency, or phase rotation.\"\"\",\n        }, # notification\n        \"xupstdBuildingAlarm\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.15\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"One of the defined building alarms has occurred.\"\"\",\n        }, # notification\n        \"xupstdShutdownImminent\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.16\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups shutdown imminent alarm has occurred.\"\"\",\n        }, # notification\n        \"xupstdOnInverter\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.17\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ups is returned to utility power running the inverter \nafter either a transfer to bypass or a run on battery.\"\"\",\n        }, # notification\n        \"xupstdBreakerOpen\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.20\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"One of the UPS breakers or contactors has been opened.\"\"\",\n        }, # notification\n        \"xupstdAlarmEntryAdded\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.21\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An alarm not defined in the xups Well Known Alarms\n(eg, an alarm defined in RFC1628)\nhas been added to the Alarm Table.\"\"\",\n        }, # notification\n        \"xupstdAlarmEntryRemoved\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.22\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An alarm not defined in the xups Well Known Alarms\nhas been removed from the Alarm Table.\"\"\",\n        }, # notification\n        \"xupstdAlarmBatteryBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.23\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"One or more batteries have been determined to require replacement.\"\"\",\n        }, # notification\n        \"xupstdOutputOffAsRequested\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.24\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS has shutdown as requested, i.e., the output is off.\"\"\",\n        }, # notification\n        \"xupstdDiagnosticTestFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.25\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The result of the last diagnostic test indicates a failure.\"\"\",\n        }, # notification\n        \"xupstdCommunicationsLost\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.26\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A problem has been encountered in the communications\nbetween the agent and the UPS.\"\"\",\n        }, # notification\n        \"xupstdUpsShutdownPending\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.27\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An xupsControlOutputOffDelay countdown is underway.\"\"\",\n        }, # notification\n        \"xupstdAlarmTestInProgress\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.28\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A test is in progress, as initiated and indicated by the xupsTest Group.  \nWhen the test is complete, one of the following traps will be sent:\n- xupstdDiagnosticTestFailed if the test fails,\n- xupstdDiagnosticTestPassed on success, or\n- xupstdAlarmEntryRemoved in other cases (e.g., Test Canceled).\"\"\",\n        }, # notification\n        \"xupstdAmbientTempBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.29\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvAmbientTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvAmbientLowerLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvAmbientUpperLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The ambient temperature, xupsEnvAmbientTemp, has fallen below \nthe set lower limit, xupsEnvAmbientLowerLimit, or has risen above \nthe set upper limit, xupsEnvAmbientUpperLimit.\"\"\",\n        }, # notification\n        \"xupstdContactActiveNotice\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.30\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsContactIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Contact indicated by xupsContactIndex is in its Active state.\nThe following are the situations that generate this trap:\n   For xupsContactType:    and     xupsContactState: \n       normallyOpen(1)     and     closedWithNotice(4)\n       normallyClosed(2)   and     openWithNotice(3)\n       anyChange(3)        and     openWithNotice(3) or closedWithNotice(4)\"\"\",\n        }, # notification\n        \"xupstdContactInactiveNotice\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.31\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsContactIndex\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactType\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactState\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsContactDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The Contact indicated by xupsContactIndex has changed to its Inactive state.\"\"\",\n        }, # notification\n        \"xupstdLossOfRedundancy\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.32\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A parallel UPS system is no longer operating in N+1 redundant mode;\nthis may be due to module failure or removal, or due to overloading.\"\"\",\n        }, # notification\n        \"xupstdAlarmTempBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.33\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An internal temperature is out of tolerance.\"\"\",\n        }, # notification\n        \"xupstdAlarmChargerFailed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.34\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"An uncorrected problem has been detected within the UPS charger subsystem.\"\"\",\n        }, # notification\n        \"xupstdAlarmFanFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.35\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The failure of one or more fans in the UPS has been detected.\"\"\",\n        }, # notification\n        \"xupstdAlarmFuseFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.36\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The failure of one or more fuses has been detected.\"\"\",\n        }, # notification\n        \"xupstdPowerSwitchBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.37\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A Relay, Contactor, or Breaker has failed.\"\"\",\n        }, # notification\n        \"xupstdModuleFailure\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.38\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"One module in a parallel or composite system has failed.\"\"\",\n        }, # notification\n        \"xupstdOnAlternatePowerSource\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.39\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsInputSource\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The system is being powered by its Alternate Power Source, such as a \nSecondary utility feed (on a dual AC input UPS), generator, flywheel, \nor fuel cell.\"\"\",\n        }, # notification\n        \"xupstdAltPowerNotAvailable\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.40\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"On systems with a separate alternate power source (eg, dual AC inputs), \nthat alternate power source is currently not available.  This could be \na problem if the primary power source (eg, utility) fails for a period \nof time longer than that for which the internal batteries can supply power.\"\"\",\n        }, # notification\n        \"xupstdNoticeCondition\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.41\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"Some Notice condition exists which is not covered by the other traps.\nThis is like an xupstdInternalFailure, but at a lower severity level.\"\"\",\n        }, # notification\n        \"xupstdRemoteTempBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.42\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteTemp\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteTempLowerLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteTempUpperLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The remote temperature, xupsEnvRemoteTemp, has fallen below \nthe set lower limit, xupsEnvRemoteTempLowerLimit, or has risen above \nthe set upper limit, xupsEnvRemoteTempUpperLimit.\"\"\",\n        }, # notification\n        \"xupstdRemoteHumidityBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.43\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteHumidity\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteHumidityLowerLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsEnvRemoteHumidityUpperLimit\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The remote temperature, xupsEnvRemoteHumidity, has fallen below \nthe set lower limit, xupsEnvRemoteHumidityLowerLimit, or has risen above \nthe set upper limit, xupsEnvRemoteHumidityUpperLimit.\"\"\",\n        }, # notification\n        \"xupstdHeartbeat\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.44\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsInputSource\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsOutputSource\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarms\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A periodic status trap message.  It is sent at an interval\nset by object xupsHeartbeatMinsInterval.\nThe included variables provide a brief statement of the UPS status.\"\"\",\n        }, # notification\n        \"xupstdDiagnosticTestPassed\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.45\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsTestBatteryStatus\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsLastGeneralTest\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsLastGeneralTestResult\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"A diagnostic test just completed, and its result is Passed.\nThe included variables provide additional information on the test.\"\"\",\n        }, # notification\n        \"xupstdOutputBad\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.46\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The output condition (other than OutputOverload) is out of tolerance.\"\"\",\n        }, # notification\n        \"xupstdAwaitingPower\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.47\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS output is off and the UPS is awaiting the return of input power.\"\"\",\n        }, # notification\n        \"xupstdOnMaintenanceBypass\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.48\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsAlarmID\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsAlarmDescr\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsTrapMessage\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"The UPS has been placed on Maintenance / Manual Bypass by an operator.\"\"\",\n        }, # notification\n        \"xupstdCommEstablished\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.49\",\n            \"status\" : \"current\",\n            \"objects\" : {\n                \"xupsIdentModel\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n                \"xupsOutputSource\" : {\n                    \"nodetype\" : \"object\",\n                    \"module\" : \"XUPS-MIB\"\n                },\n            },\n            \"description\" :\n                \"\"\"This trap is sent when the SNMP agent first establishes a communication \nlink with the UPS.\nThe included variables provide identification and UPS status information.\"\"\",\n        }, # notification\n        \"xupstdAgentDown\" : {\n            \"nodetype\" : \"notification\",\n            \"moduleName\" : \"XUPS-MIB\",\n            \"oid\" : \"1.3.6.1.4.1.534.1.11.4.1.0.50\",\n            \"status\" : \"current\",\n            \"objects\" : {\n            },\n            \"description\" :\n                \"\"\"This trap is sent when the SNMP agent is exiting or closing down gracefully.\nThis may be triggered by a signal from the OS to stop this process.  In many\nimplementations, it will be followed quickly by a restart of this vital process.\"\"\",\n        }, # notification\n    }, # notifications\n\n}\n"
  },
  {
    "path": "python/nav/smidumps/__init__.py",
    "content": "\"\"\"Raw SNMP SMI module dumps.\n\nAs dumped by smidump dump using the python format option.\n\n\"\"\"\n\nfrom itertools import chain\nimport importlib\n\nfrom nav.config import NAV_CONFIG\nfrom nav.oids import OID\n\n_mib_map = {}\n\n\ndef get_mib(mib_module):\n    \"\"\"Returns the smidumped MIB definition of a named MIB module, if it exists\n    in NAV.\n\n    \"\"\"\n    if not mib_module:\n        return None\n\n    if mib_module not in _mib_map:\n        for path in get_search_path():\n            try:\n                name = '.' + mib_module if path else mib_module  # support top namespace\n                module = importlib.import_module(name, path)\n            except ImportError:\n                continue\n            else:\n                convert_oids(module.MIB)\n                _mib_map[mib_module] = module\n                break\n        else:\n            return None\n\n    return _mib_map[mib_module].MIB\n\n\ndef get_search_path():\n    \"\"\"Returns the configured smidumps search path\"\"\"\n    return NAV_CONFIG.get(\"SMIDUMPS\", \"nav.smidumps\").split(':')\n\n\ndef convert_oids(mib):\n    \"\"\"Converts a mib data structure's oid strings to OID objects.\n\n    mib is expected to be a data structure as dumped by the smidump utility\n    (using the -f python option).\n\n    \"\"\"\n    for node in chain(\n        mib.get('nodes', {}).values(), mib.get('notifications', {}).values()\n    ):\n        if isinstance(node['oid'], str):\n            node['oid'] = OID(node['oid'])\n"
  },
  {
    "path": "python/nav/smsd/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2006 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Package placeholder. If you remove it, the package won't work.\"\"\"\n"
  },
  {
    "path": "python/nav/smsd/boostdispatcher.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2006 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dispatcher for Boost Communications' External Sender product.\n\nThis dispatcher sends SMS via Boost Communications' WebService (SOAP). Requires\na username and password to send SMS using the SOAP interface.\n\nContact http://www.boostcom.no/ to setup a contract.\nThe remote service is called ExternalSender.\n\nDepends on SOAPpy/python-soappy.\n\n\"\"\"\n\nfrom nav.smsd.dispatcher import Dispatcher, DispatcherError\n\ntry:\n    from SOAPpy import SOAPProxy\nexcept ImportError:\n    raise DispatcherError('SOAPpy not installed or misconfigured.')\n\n\nclass BoostDispatcher(Dispatcher):\n    \"\"\"The smsd dispatcher for Boost Communications' External Sender.\"\"\"\n\n    def __init__(self, config):\n        \"\"\"Constructor.\"\"\"\n\n        # Call mother's init\n        Dispatcher.__init__(self)\n\n        # Get config\n        try:\n            # Remote address for gateway\n            self.url = config['url']\n            # Username for WebService\n            self.username = config['username']\n            # Password for WebService\n            self.password = config['password']\n            # Our phonenumber\n            self.sender = config['sender']\n        except KeyError as error:\n            raise DispatcherError(\"Config option not found: %s\" % error)\n\n        # Initiate connector to Boost\n        try:\n            self.service = SOAPProxy(self.url)\n        except Exception as error:  # noqa: BLE001\n            raise DispatcherError(\"Failed to initialize SOAPProxy: %s\" % error)\n\n    def sendsms(self, phone, msgs):\n        \"\"\"\n        Send SMS using Boost Communications' External Sender.\n\n        Arguments:\n            ``phone'' is the phone number the messages are to be dispatched to.\n            ``msgs'' is a list of messages ordered with the most severe first.\n            Each message is a tuple with ID, text and severity of the message.\n\n        Returns five values:\n            The formatted SMS.\n            A list of IDs of sent messages.\n            A list of IDs of ignored messages.\n            A boolean which is true for success and false for failure.\n            An integer which is the sending ID if available or 0 otherwise.\n        \"\"\"\n\n        # Format SMS\n        (sms, sent, ignored) = self.formatsms(msgs)\n\n        # Send SMS\n        try:\n            result = self.service.sendMessage(\n                self.username, self.password, self.sender, phone, sms\n            )\n            self.logger.debug(\"BoostDispatcher result: %s\", result)\n        except Exception as error:  # noqa: BLE001\n            self.logger.exception(error)\n\n        if result:\n            result = True\n        else:\n            result = False\n        smsid = 0\n\n        return (sms, sent, ignored, result, smsid)\n"
  },
  {
    "path": "python/nav/smsd/debugdispatcher.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A dispatcher for debugging the SMSd daemon.\n\nThis dispatcher WILL NOT send any SMS messages, it will only log them.\nThe dispatcher can be configured to report success or failure to the\ndaemon, in order to test various aspects of the SMS daemon.\n\n\"\"\"\n\nimport logging\nfrom nav.smsd.dispatcher import Dispatcher, DispatcherError, PermanentDispatcherError\n\n_logger = logging.getLogger(__name__)\n\n\nclass DebugDispatcher(Dispatcher):\n    \"\"\"Debug dispatcher for smsd.\"\"\"\n\n    RESULT_PERMANENT = 'permanent'\n    RESULT_FAIL = 'fail'\n    RESULT_SUCCESS = 'success'\n    RESULT_ERROR = 'error'\n\n    OPTIONS = [RESULT_PERMANENT, RESULT_FAIL, RESULT_SUCCESS, RESULT_ERROR]\n\n    def __init__(self, config):\n        # Call mother's init\n        Dispatcher.__init__(self)\n\n        # Get config\n        try:\n            # Result of \"dispatch\" attempts\n            self.result = config['result']\n        except KeyError as error:\n            raise DispatcherError(\"Config option not found: %s\" % error)\n\n        if self.result.lower() not in self.OPTIONS:\n            raise DispatcherError(\n                \"Invalid value %r for option 'result'. \"\n                \"Must be one of: \" + \", \".join(self.OPTIONS),\n                self.result,\n            )\n        else:\n            self.result = self.result.lower()\n\n    def sendsms(self, phone, msgs):\n        \"\"\"Log SMS message and report pre-configured result.\"\"\"\n\n        # Format SMS\n        (sms, sent_count, ignored_count) = self.formatsms(msgs)\n        _logger.info(\"SMS to %s: %s\", phone, sms)\n        smsid = 0\n        result = True\n\n        if self.result == self.RESULT_FAIL:\n            result = False\n            _logger.info(\"Returning failed status\")\n        if self.result == self.RESULT_SUCCESS:\n            _logger.info(\"Returning success status\")\n        elif self.result == self.RESULT_ERROR:\n            _logger.info(\"Raising DispatcherError\")\n            raise DispatcherError(\"Failed, because I was configured to.\")\n        elif self.result == self.RESULT_PERMANENT:\n            _logger.info(\"Raising PermanentDispatcherError\")\n            raise PermanentDispatcherError(\n                \"Failed permanently, because I was configured to.\"\n            )\n\n        return (sms, sent_count, ignored_count, result, smsid)\n"
  },
  {
    "path": "python/nav/smsd/dispatcher.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2006-2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dispatch handling for smsd\"\"\"\n\nimport logging\n\n\nclass DispatcherError(Exception):\n    \"\"\"Base class for all exceptions raised by dispatchers.\"\"\"\n\n\nclass PermanentDispatcherError(DispatcherError):\n    \"\"\"Thrown for permanent errors in dispatchers.\"\"\"\n\n\nclass DispatcherHandler(object):\n    \"\"\"\n    Handler for communication with the dispatchers.\n\n    This layer makes it possible to use multiple dispatchers which works as\n    failovers for each other.\n    \"\"\"\n\n    def __init__(self, config):\n        \"\"\"Constructor.\"\"\"\n\n        # Create logger\n        self.logger = logging.getLogger(\"nav.smsd.dispatcher\")\n\n        exit_on_permanent_error = config['main']['exit_on_permanent_error']\n        self.cull_dead_dispatcher = exit_on_permanent_error.lower() in ('yes', 'true')\n\n        # Get dispatchers\n        self.dispatchers = []\n        for pri in range(len(config['dispatcher']) + 1):\n            key = 'dispatcher' + str(pri)\n            if key in config['dispatcher']:\n                dispatcher = config['dispatcher'][key]\n                self.logger.debug(\"Init dispatcher %d: %s\", pri, dispatcher)\n\n                # Import dispatcher module\n                modulename = 'nav.smsd.' + dispatcher.lower()\n                try:\n                    module = self.importbyname(modulename)\n                    self.logger.debug(\"Imported module %s\", modulename)\n                except DispatcherError as error:\n                    self.logger.warning(\"Failed to import %s: %s\", dispatcher, error)\n                    continue\n                except Exception as error:  # noqa: BLE001\n                    self.logger.exception(\"Unknown exception: %s\", error)\n\n                # Initialize dispatcher\n                try:\n                    dispatcher_class = getattr(module, dispatcher)\n                    instance = dispatcher_class(config[dispatcher])\n                    self.dispatchers.append((dispatcher, instance))\n                    self.logger.debug(\"Dispatcher loaded: %s\", dispatcher)\n                except DispatcherError as error:\n                    self.logger.warning(\"Failed to init %s: %s\", dispatcher, error)\n                    continue\n                except Exception as error:  # noqa: BLE001\n                    self.logger.exception(\"Unknown exception: %s\", error)\n\n        # Fail if no dispatchers are available\n        if not self.dispatchers:\n            raise PermanentDispatcherError(\n                \"No dispatchers available. None configured \"\n                \"or all dispatchers failed permanently.\"\n            )\n\n    def importbyname(self, name):\n        \"\"\"Imports Python module given by name.\n\n        :param name: a module name.\n        :returns: a module object.\n\n        \"\"\"\n        mod = __import__(name)\n        components = name.split('.')\n        for comp in components[1:]:\n            mod = getattr(mod, comp)\n        return mod\n\n    def sendsms(self, phone, msgs):\n        \"\"\"\n        Formats and sends with help of the wanted dispatcher.\n\n        :param phone: the phone number the messages are to be dispatched to.\n        :param msgs: a list of messages ordered with the most severe first.\n                     Each message is a tuple with ID, text and severity of the\n                     message.\n\n        :returns: A tuple of four values:\n\n                  * The formatted SMS.\n                  * A list of IDs of sent messages.\n                  * A list of IDs of ignored messages.\n                  * An integer which is the sending ID if available or 0\n                    otherwise.\n\n        :raises: :exc:`DispatcherError` if it doesn't find a working\n                 dispatcher and succeeds in sending the SMS.\n\n        \"\"\"\n\n        for i, (dispatchername, dispatcher) in enumerate(self.dispatchers):\n            try:\n                self.logger.debug(\"Trying %s...\", dispatchername)\n                (sms, sent, ignored, result, smsid) = dispatcher.sendsms(phone, msgs)\n            except PermanentDispatcherError as error:\n                self.logger.error(\n                    \"%s reports a possibly permanent SMS dispatch failure: %s\",\n                    dispatchername,\n                    error,\n                )\n                if self.cull_dead_dispatcher:\n                    self.logger.error(\n                        \"Removing permanently failed dispatcher %s\", dispatchername\n                    )\n                    del self.dispatchers[i]\n                continue  # Skip to next dispatcher\n            except DispatcherError as error:\n                self.logger.warning(\"%s failed to send SMS: %s\", dispatchername, error)\n                continue  # Skip to next dispatcher\n            except Exception as error:  # noqa: BLE001\n                self.logger.exception(\n                    \"Unknown dispatcher exception during send: %s\", error\n                )\n                continue\n\n            else:\n                if result is False:\n                    self.logger.warning(\n                        \"%s failed to send SMS: Returned false.\", dispatchername\n                    )\n                    continue  # Skip to next dispatcher\n\n            # No exception and true result? Success!\n            return (sms, sent, ignored, smsid)\n\n        # Still running? All dispatchers failed permanently.\n        if not self.dispatchers:\n            raise PermanentDispatcherError(\n                \"No dispatchers available. None configured \"\n                \"or all dispatchers failed permanently.\"\n            )\n\n        # Still running? All dispatchers failed!\n        raise DispatcherError(\"All dispatchers failed to send SMS.\")\n\n\nclass Dispatcher(object):\n    \"\"\"The SMS dispatcher mother class.\"\"\"\n\n    def __init__(self):\n        \"\"\"Constructor.\"\"\"\n\n        # Create logger\n        self.logger = logging.getLogger(\"nav.smsd.dispatcher\")\n        # Max length of SMS\n        self.maxlen = 160\n        # Max length of ignored message. 15 gives us up to four digits.\n        self.ignlen = 15\n\n    def formatsms(self, msgs):\n        \"\"\"Formats a single SMS from one or more messages.\n\n        Attempts to squeeze as many messages into the 160-characters that an\n        SMS is limited to.\n\n        :param msgs: a list of messages ordered with the most severe\n                     first. Each message is a tuple with ID, text and severity\n                     of the message.\n\n        :returns: a 3-value tuple containing:\n\n                  * the formatted text of the SMS\n                  * a list of IDs of the messages that fit into the single SMS\n                  * if list of IDs of the message that didn't fit in the SMS\n                    and were subsequently ignored\n\n        \"\"\"\n\n        # Copies so we can modify them without wreaking the next SMS\n        maxlen = self.maxlen\n        ignlen = self.ignlen\n\n        msgcount = len(msgs)  # Number of messages\n        msgno = 0  # Number of messages processed\n        addmsg = True  # Whether we shall continue to add msgs to the SMS\n        tmpsms = \"\"  # We format first and then checks the length\n\n        # The empty result\n        sms = \"\"\n        sent = []\n        ignored = []\n\n        # Concatenate as many msgs as possible\n        for msg in msgs:\n            msgno += 1\n\n            # If this is the last message we don't need to reserve space for\n            # the ignored count. If we have enough space, we can add the\n            # message itself instead. If we don't have enough space, the \"+1\n            # see web\" is added as normal.\n            if msgno == msgcount:\n                ignlen = 0\n\n            # We create a temporary SMS first and then afterwards checks if\n            # it's short enough to be accepted. This makes it easy to also\n            # count all extra space, numbering, etc.\n            if msgno == 1:\n                tmpsms = msg[1]\n            elif msgno == 2:\n                tmpsms = \"1: %s; 2: %s\" % (sms, msg[1])\n            else:\n                tmpsms = \"%s; %d: %s\" % (sms, msgno, msg[1])\n\n            # If we have enough space...\n            if len(tmpsms) < (maxlen - ignlen) and addmsg:\n                # Accept updated SMS\n                sms = tmpsms\n                sent.append(msg[0])\n            else:\n                # Ignore message\n                ignored.append(msg[0])\n\n                # Stop adding messages when the first fail to fit\n                addmsg = False\n\n        # Tell how many was ignored\n        if ignored:\n            sms = \"%s +%d see web.\" % (sms, len(ignored))\n\n        return sms, sent, ignored\n\n    def sendsms(self, phone, msgs):\n        \"\"\"Sends messages as an SMS to a phone number.\n\n        This method must be overridden by implementers to have any effect.\n\n        :param phone: the phone number the messages are to be dispatched to.\n        :param msgs: a list of messages ordered with the most severe first.\n                     Each list element is a tuple with ``(ID, text, severity)``\n\n        :returns: a tuple containing 5 values:\n\n                  * The formatted SMS.\n                  * A list of IDs of sent messages.\n                  * A list of IDs of ignored messages.\n                  * A boolean which is true for success and false for failure.\n                  * An integer which is the sending ID if available or 0\n                    otherwise.\n\n        \"\"\"\n        raise NotImplementedError()\n"
  },
  {
    "path": "python/nav/smsd/gammudispatcher.py",
    "content": "#\n# Copyright (C) 2006, 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"The smsd dispatcher for Gammu.\n\nThis dispatcher takes care of all communication between smsd and Gammu. Gammu\nis used to send SMS messages via a cell phone connected to the server with a\nserial cable, USB cable, IR or Bluetooth. See http://www.gammu.org/ for more\ninformation.\n\nDepends on python-gammu.\n\n\"\"\"\n\nfrom nav.smsd.dispatcher import Dispatcher, PermanentDispatcherError, DispatcherError\n\ntry:\n    import gammu\nexcept ImportError:\n    raise PermanentDispatcherError('python-gammu not installed or misconfigured.')\n\n\nclass GammuDispatcher(Dispatcher):\n    \"\"\"The smsd dispatcher for Gammu.\"\"\"\n\n    def __init__(self, _config):\n        \"\"\"Constructor.\"\"\"\n\n        # Call mother's init\n        Dispatcher.__init__(self)\n\n    def sendsms(self, phone, msgs):\n        \"\"\"\n        Send SMS using Gammu.\n\n        Arguments:\n            ``phone'' is the phone number the messages are to be dispatched to.\n            ``msgs'' is a list of messages ordered with the most severe first.\n            Each message is a tuple with ID, text and severity of the message.\n\n        Returns five values:\n            The formatted SMS.\n            A list of IDs of sent messages.\n            A list of IDs of ignored messages.\n            A boolean which is true for success and false for failure.\n            An integer which is the sending ID if available or 0 otherwise.\n        \"\"\"\n\n        # Format SMS\n        (sms, sent, ignored) = self.formatsms(msgs)\n        sms = decode_sms_to_unicode(sms)\n\n        # We got a python-gammu binding :-)\n        sm = gammu.StateMachine()\n\n        try:\n            # Typically ~root/.gammurc or ~$NAV_USER/.gammurc\n            sm.ReadConfig()\n        except IOError as error:\n            raise PermanentDispatcherError(error)\n\n        try:\n            # Fails if e.g. phone is not connected\n            # See http://www.gammu.org/wiki/index.php?title=Gammu:Error_Codes\n            # for complete list of errors fetched here\n            sm.Init()\n        except gammu.GSMError as error:\n            raise PermanentDispatcherError(\n                \"GSM %s error %d: %s\"\n                % (error.args[0]['Where'], error.args[0]['Code'], error.args[0]['Text'])\n            )\n\n        message = {'Text': sms, 'SMSC': {'Location': 1}, 'Number': phone}\n\n        try:\n            # Tested with:\n            # - Nokia 6610, Tekram IRmate 410U and Gammu 1.07.00\n            # - Sony Ericsson K310, USB cable, Gammu 1.06.00, python-gammu 0.13\n            smsid = sm.SendSMS(message)\n        except gammu.GSMError as error:\n            raise DispatcherError(\n                \"GSM %s error %d: %s\"\n                % (error.args[0]['Where'], error.args[0]['Code'], error.args[0]['Text'])\n            )\n\n        if isinstance(smsid, int):\n            result = True\n        else:\n            result = False\n\n        return sms, sent, ignored, result, smsid\n\n\ndef decode_sms_to_unicode(sms):\n    if isinstance(sms, str):\n        return sms\n    else:\n        return sms.decode('utf-8')\n"
  },
  {
    "path": "python/nav/smsd/httpgetdispatcher.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dispatcher for external HTTP service.\n\nThis dispatcher sends SMS via a webserver accepting information sent trough a\nHTTP GET request.\n\nIt requires parameters for username, passord and group, in addition to\nreciever and SMS message.\n\nIt has been made for working with the SMS gateway used by the University of\nOslo, but could be useful for other similar solutions.\n\n\"\"\"\n\nfrom urllib.request import urlopen\nfrom urllib.error import HTTPError\nfrom urllib.parse import quote_plus\n\nfrom nav.smsd.dispatcher import Dispatcher, DispatcherError\n\n\nclass HttpGetDispatcher(Dispatcher):\n    \"\"\"The smsd dispatcher for posting via a HTTP server.\"\"\"\n\n    def __init__(self, config):\n        \"\"\"Constructor.\"\"\"\n\n        # Call mother's init\n        Dispatcher.__init__(self)\n\n        # Get config\n        try:\n            # Remote address for gateway\n            self.url = config['url']\n        except KeyError as error:\n            raise DispatcherError(\"Config option not found: %s\" % error)\n\n    def sendsms(self, phone, msgs):\n        \"\"\"\n        Send SMS by calling the assigned URL with appropriate parametres\n\n        Arguments:\n            ``phone'' is the phone number the messages are to be dispatched to.\n            ``msgs'' is a list of messages ordered with the most severe first.\n            Each message is a tuple with ID, text and severity of the message.\n\n        Returns five values:\n            The formatted SMS.\n            A list of IDs of sent messages.\n            A list of IDs of ignored messages.\n            A boolean which is true for success and false for failure.\n            An integer which is the sending ID if available or 0 otherwise.\n        \"\"\"\n\n        # Format SMS\n        (sms, sent, ignored) = self.formatsms(msgs)\n        sms = quote_plus(sms)\n\n        # Format HTTP GET request\n        get_data = {'phone': phone, 'sms': sms}\n        url = self.url % get_data\n\n        # Send SMS\n        try:\n            urlopen(url)\n            result = True\n        except HTTPError as ex:\n            self.logger.error('HTTP error: <%s>: %s (%s).' % (ex.url, ex.msg, ex.code))\n            result = False\n\n        smsid = 0\n        self.logger.debug(\n            'HttpGetDispatcher response: %s, %s, %s, %s, %s',\n            sms,\n            sent,\n            ignored,\n            result,\n            smsid,\n        )\n        return (sms, sent, ignored, result, smsid)\n"
  },
  {
    "path": "python/nav/smsd/navdbqueue.py",
    "content": "#\n# Copyright (C) 2006, 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"The smsd queue for the NAV database.\n\nThis smsd queue takes care of all communication between smsd and the NAV\ndatabase. Replacing the NAV database with some other queue/input should be\npossible by implementing the interface seen in this class.\n\nGenerally, a phone number is a user and vice versa.\n\n\"\"\"\n\nimport logging\nimport sys\n\nimport nav.db\n\n\nclass NAVDBQueue(object):\n    \"\"\"The smsd queue for the NAV database.\"\"\"\n\n    def __init__(self):\n        # Create logger\n        self.logger = logging.getLogger(\"nav.smsd.queue\")\n\n        # Open DB connection early so we can detect errors early\n        try:\n            self._connect()\n        except Exception as error:  # noqa: BLE001\n            self.logger.exception(\"Queue failed to initialize. Exiting. (%s)\", error)\n            sys.exit(1)\n\n    def cancel(self, minage='0'):\n        \"\"\"\n        Mark all unsent messages as ignored.\n\n        Input:\n            minage  Minimum age required for canceling message, default '0'.\n                    Format as PostgreSQL interval type, e.g. '1 day 12 hours'.\n\n        Returns number of messages canceled.\n        \"\"\"\n\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        data = dict(minage=str(minage))\n\n        # Test minage\n        if minage != '0':\n            sql = \"SELECT interval %(minage)s\"\n            try:\n                db.execute(sql, data)\n            except nav.db.driver.ProgrammingError:\n                self.logger.warning(\n                    \"'autocancel' value (%s) is not valid. \"\n                    + \"Check config for errors.\",\n                    minage,\n                )\n                return 0\n            except Exception:  # noqa: BLE001\n                self.logger.exception(\n                    \"Unknown exception caught in \" + \"cancel(). Exiting.\"\n                )\n                sys.exit(1)\n\n        # Ignore messages\n        sql = \"\"\"UPDATE smsq SET sent = 'I'\n            WHERE sent = 'N' AND time < now() - interval %(minage)s\"\"\"\n        db.execute(sql, data)\n        dbconn.commit()\n\n        return db.rowcount\n\n    def getusers(self, sent='N'):\n        \"\"\"\n        Get users which has messages with given sent status (normally unsent).\n\n        Returns a sorted list with the phone numbers for all users with\n        messages with given sent status.\n        \"\"\"\n\n        users = []\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        data = dict(sent=sent)\n        sql = \"\"\"SELECT DISTINCT phone\n            FROM smsq\n            WHERE sent = %(sent)s\n            ORDER BY phone\"\"\"\n        db.execute(sql, data)\n        result = db.fetchall()\n        # Rollback so we don't have old open transactions which foobars the\n        # usage of now() in setsentstatus()\n        dbconn.rollback()\n\n        # Create a simple list without the tuples\n        for row in result:\n            users.append(row[0])\n\n        return users\n\n    def getusermsgs(self, user, sent='N'):\n        \"\"\"\n        Get the user's messages which has given sent status (normally unsent).\n\n        Returns a list of messsages ordered with the most severe first. Each\n        message is a tuple with the ID, text, and severity of the message.\n        \"\"\"\n\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        data = dict(phone=user, sent=sent)\n        sql = \"\"\"SELECT id, msg, severity\n            FROM smsq\n            WHERE phone = %(phone)s AND sent = %(sent)s\n            ORDER BY severity ASC, time ASC\"\"\"\n        db.execute(sql, data)\n        result = db.fetchall()\n        # Rollback so we don't have old open transactions which foobars the\n        # usage of now() in setsentstatus()\n        dbconn.rollback()\n\n        return result\n\n    def getmsgs(self, sent='N'):\n        \"\"\"\n        Get all messages with given sent status (normally unsent).\n\n        Returns a list of dictionaries containing messages details of SMS in\n        queue with the specified status.\n        \"\"\"\n\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        data = dict(sent=sent)\n        sql = \"\"\"SELECT smsq.id as smsqid, name, msg, time\n            FROM smsq\n            JOIN account ON (account.id = smsq.accountid)\n            WHERE sent = %(sent)s ORDER BY time ASC\"\"\"\n        db.execute(sql, data)\n\n        result = []\n        for smsqid, name, msg, time in db.fetchall():\n            result.append(\n                dict(\n                    id=smsqid, name=name, msg=msg, time=time.strftime(\"%Y-%m-%d %H:%M\")\n                )\n            )\n\n        # Rollback so we don't have old open transactions which foobars the\n        # usage of now() in setsentstatus()\n        dbconn.rollback()\n\n        return result\n\n    def setsentstatus(self, identifier, sent, smsid=0):\n        \"\"\"\n        Set the sent status of a message given ID and status.\n\n        Returns number of messages changed.\n        \"\"\"\n\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        if sent == 'Y' or sent == 'I':\n            sql = \"\"\"UPDATE smsq\n                SET sent = %(sent)s, smsid = %(smsid)s, timesent = now()\n                WHERE id = %(id)s\"\"\"\n        else:\n            sql = \"\"\"UPDATE smsq\n                SET sent = %(sent)s, smsid = %(smsid)s\n                WHERE id = %(id)s\"\"\"\n\n        data = dict(sent=sent, smsid=smsid, id=identifier)\n        db.execute(sql, data)\n        dbconn.commit()\n\n        return db.rowcount\n\n    def inserttestmsgs(self, uid, phone, msg):\n        \"\"\"\n        Insert test messages into the SMS queue for debugging purposes.\n\n        Returns a integer indicating how many rows have been inserted.\n        \"\"\"\n\n        dbconn = self._connect()\n        db = dbconn.cursor()\n\n        data = dict(uid=uid, phone=phone, msg=msg)\n        sql = \"\"\"INSERT INTO smsq (accountid, time, phone, msg) VALUES (\n                 %(uid)s, now(), %(phone)s, %(msg)s)\"\"\"\n\n        db.execute(sql, data)\n        dbconn.commit()\n\n        return db.rowcount\n\n    @staticmethod\n    @nav.db.retry_on_db_loss(delay=5)\n    def _connect():\n        return nav.db.getConnection('smsd', 'navprofile')\n"
  },
  {
    "path": "python/nav/smsd/uninettmaildispatcher.py",
    "content": "#\n# Copyright (C) 2006, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A dispatcher for Uninett's mail-to-SMS gateway.\n\nThis dispatcher sends SMS messages via Uninett's mail-to-SMS gateway. The\ngateway accepts e-mails with the recipient's phone number in the subject and\nthe text message in the body. The mail must be sent from a uninett.no host,\nso this is of little use for others, unless they have a similar interface.\n\n\"\"\"\n\nimport smtplib\n\nfrom django.core.mail import EmailMessage\n\nfrom nav.smsd.dispatcher import Dispatcher, DispatcherError\n\n\nclass UninettMailDispatcher(Dispatcher):\n    \"\"\"The smsd dispatcher for Uninett's mail-to-SMS gateway.\"\"\"\n\n    def __init__(self, config):\n        \"\"\"Constructor\"\"\"\n        super(UninettMailDispatcher, self).__init__()\n\n        try:\n            # Mail address for gateway\n            self.mailaddr = config['mailaddr']\n        except KeyError as error:\n            raise DispatcherError(\"Config option not found: %s\" % error)\n\n    def sendsms(self, phone, msgs):\n        \"\"\"\n        Sends SMS using Uninett's mail-to-SMS gateway.\n\n        :param phone: The phone number the messages are to be dispatched to.\n        :param msgs: A list of message strings, ordered by descending severity.\n                     Each message is a tuple with ID, text and severity of the\n                     message.\n\n        :returns: A five-tuple containing these values:\n                  - The formatted SMS.\n                  - A list of IDs of sent messages.\n                  - A list of IDs of ignored messages.\n                  - A boolean which is true for success and false for failure.\n                  - An integer which is the sending ID, if available or 0\n                    otherwise.\n        \"\"\"\n        (sms, sent, ignored) = self.formatsms(msgs)\n\n        try:\n            message = EmailMessage(\n                subject=\"sms {}\".format(phone), to=[self.mailaddr], body=sms\n            )\n            message.send(fail_silently=False)\n        except smtplib.SMTPException as error:\n            raise DispatcherError(\"SMTP error: %s\" % error)\n\n        result = True\n        smsid = 0\n        return sms, sent, ignored, result, smsid\n"
  },
  {
    "path": "python/nav/snmptrapd/__init__.py",
    "content": "\"\"\"snmptrapd\n\nAn SNMP trap handling daemon for NAV.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/snmptrapd/agent.py",
    "content": "#\n# Copyright (C) 2010, 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Trap manager functionality for snmptrapd.\"\"\"\n\nfrom nav.Snmp import BACKEND\n\nif BACKEND == 'pynetsnmp':\n    from .agent_pynetsnmp import *\nelse:\n    raise ImportError(\"No supported SNMP backend was found\")\n"
  },
  {
    "path": "python/nav/snmptrapd/agent_pynetsnmp.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"pynetsnmp specific trap agent functions.\"\"\"\n\nimport select\nimport logging\nfrom socket import AF_INET, AF_INET6, inet_ntop\nfrom errno import EINTR\nfrom ctypes import c_ushort, c_char, POINTER, cast, c_long\n\nfrom IPy import IP\nfrom pynetsnmp import netsnmp\n\nfrom nav.errors import GeneralException\nfrom nav.oids import OID\nfrom nav.util import address_to_string\n\nfrom .trap import SNMPTrap\n\n__all__ = ['TrapListener', 'UnsupportedSnmpVersionError']\n\n_logger = logging.getLogger(__name__)\n\n\nclass TrapListener(object):\n    \"\"\"A pynetsnmp based implementation of a TrapListener\"\"\"\n\n    def __init__(self, *addresses):\n        \"\"\"Initializes a TrapListener.\n\n        iface -- A (srcadr, port) tuple.\n\n        \"\"\"\n        self.addresses = addresses\n        self._client_callback = None\n        self._sessions = [TrapSession(addr, self.callback) for addr in addresses]\n\n    def open(self):\n        \"\"\"Opens the server socket at port 162.\"\"\"\n        for session in self._sessions:\n            session.await_traps()\n\n    def close(self):\n        \"\"\"Closes the server socket.\"\"\"\n        for session in self._sessions:\n            session.close()\n\n    def listen(self, _community, callback):\n        \"\"\"Listens for and dispatches incoming traps to callback.\n\n        Any exceptions that occur, except SystemExit, are logged and\n        subsequently ignored to avoid taking down the entire snmptrapd\n        process by accident.\n\n        \"\"\"\n        self._client_callback = callback\n        while 1:\n            fdlist, timeout = netsnmp.snmp_select_info()\n            try:\n                rlist, _wlist, _xlist = select.select(fdlist, [], [], timeout)\n            except select.error as error:\n                if error.args[0] == EINTR:\n                    continue\n                else:\n                    raise\n            if rlist:\n                for fdescr in rlist:\n                    netsnmp.snmp_read(fdescr)\n            else:\n                netsnmp.lib.snmp_timeout()\n\n    def callback(self, src, pdu):\n        \"\"\"Handles trap callbacks from a TrapSession\"\"\"\n        if not self._client_callback:\n            return\n\n        agent_addr = None\n        generic_type = None\n        community = pdu.community[: pdu.community_len]\n\n        varbinds = netsnmp.getResult(pdu, _logger)\n\n        if pdu.version == netsnmp.SNMP_VERSION_1:\n            version = 1\n            agent_addr = \".\".join(str(d) for d in pdu.agent_addr)\n            snmp_trap_oid, generic_type = transform_trap_type(pdu)\n            uptime = pdu.time\n        elif pdu.version == netsnmp.SNMP_VERSION_2c:\n            version = 2\n            _time_oid, time_val = varbinds.pop(0)\n            _trap_oid_oid, trap_oid = varbinds.pop(0)\n\n            uptime = time_val\n            snmp_trap_oid = OID(trap_oid)\n        else:\n            raise UnsupportedSnmpVersionError(pdu.version)\n\n        # Dump varbinds to debug log\n        _logger.debug(\"varbinds: %r\", varbinds)\n        # Add remaining varbinds to dict\n        varbind_dict = dict(\n            (str(OID(oid)), value_to_str(value)) for oid, value in varbinds\n        )\n\n        trap = SNMPTrap(\n            str(src),\n            agent_addr or str(src),\n            None,\n            generic_type,\n            str(snmp_trap_oid),\n            uptime,\n            community,\n            version,\n            varbind_dict,\n        )\n        self._client_callback(trap)\n\n\ndef value_to_str(value):\n    \"\"\"Converts a value from a varbind to a string, as that is what the\n    SNMPTrap API expects :-P\n    \"\"\"\n    if isinstance(value, tuple):\n        return str(OID(value))\n    elif isinstance(value, bytes):\n        try:\n            return value.decode(\"utf-8\")\n        except UnicodeDecodeError:\n            pass\n\n    return str(value)\n\n\nSNMP_TRAPS = OID('.1.3.6.1.6.3.1.1.5')\nTRAP_MAP = {\n    netsnmp.SNMP_TRAP_COLDSTART: 'coldStart',\n    netsnmp.SNMP_TRAP_WARMSTART: 'warmStart',\n    netsnmp.SNMP_TRAP_LINKDOWN: 'linkDown',\n    netsnmp.SNMP_TRAP_LINKUP: 'linkUp',\n    netsnmp.SNMP_TRAP_AUTHFAIL: 'authenticationFailure',\n    netsnmp.SNMP_TRAP_EGPNEIGHBORLOSS: 'egpNeighborLoss',\n    netsnmp.SNMP_TRAP_ENTERPRISESPECIFIC: 'enterpriseSpecific',\n}\n\n\ndef transform_trap_type(pdu):\n    \"\"\"Transforms trap information from an SNMP-v1 pdu to something that\n    is consistent with SNMP-v2c, as documented in RFC2576.\n\n    :returns: A tuple of (snmpTrapOID, genericType)\n\n    \"\"\"\n    enterprise_type = POINTER(c_long * pdu.enterprise_length)\n    enterprise_p = cast(pdu.enterprise, enterprise_type)\n    enterprise = OID(enterprise_p.contents)\n\n    generic = pdu.trap_type\n\n    # According to RFC2576 \"Coexistence between Version 1, Version 2,\n    # and Version 3 of the Internet-standard Network Management\n    # Framework\", we build snmpTrapOID from the snmp-v1 trap by\n    # combining enterprise + 0 + specific trap parameter IF the\n    # generic trap parameter is 6. If not, the traps are defined as\n    # 1.3.6.1.6.3.1.1.5 + (generic trap parameter + 1)\n    if generic == netsnmp.SNMP_TRAP_ENTERPRISESPECIFIC:\n        snmp_trap_oid = enterprise + [0, pdu.specific_type]\n    else:\n        snmp_trap_oid = SNMP_TRAPS + [generic + 1]\n\n    generic_type = TRAP_MAP.get(generic, str(generic)).upper()\n    return snmp_trap_oid, generic_type\n\n\nclass TrapSession(netsnmp.Session):\n    \"\"\"A shim to adapt netsnmp.Session to our trap-receiving needs\"\"\"\n\n    def __init__(self, iface, callback):\n        super(TrapSession, self).__init__()\n        self.addr, self.port = iface\n        self._callback = callback\n\n    def await_traps(self):\n        \"\"\"Starts dispatch of incoming traps to the registered callback\"\"\"\n        addr = address_to_string(self.addr, self.port)\n        if IP(self.addr).version() == 6:\n            tdomain = 'udp6:'\n            self._initv6()\n        else:\n            tdomain = \"udp:\"\n        return self.awaitTraps((tdomain + addr))\n\n    def _initv6(self):\n        lib = netsnmp.lib\n        sentinel = object()\n        if getattr(lib, \"netsnmp_udpipv6_ctor\", sentinel) is not sentinel:\n            lib.netsnmp_udpipv6_ctor()\n        elif getattr(lib, \"netsnmp_udp6_ctor\", sentinel) is not sentinel:\n            lib.netsnmp_udp6_ctor()\n        else:\n            _logger.warning(\n                \"Cannot find constructor function for UDP/IPv6 transport domain object.\"\n            )\n\n    def callback(self, pdu):\n        addr = get_transport_addr(pdu)\n        self._callback(addr, pdu)\n\n\nIPADDR_SIZE = 4\nIP6ADDR_SIZE = 16\nIPADDR_OFFSET = 4\nIP6ADDR_OFFSET = 8\n\n\ndef get_transport_addr(pdu):\n    \"\"\"Retrieves the IP source address from the PDU's reference to an opaque\n    transport data struct.\n\n    Only works when assuming the opaque structure is sockaddr_in and\n    sockaddr_in6. It should be as long as we are only using an IPv4 or\n    IPv6-based netsnmp transport.\n\n    \"\"\"\n    if pdu.transport_data_length <= 1:\n        return\n\n    # peek the first two bytes of the pdu's transport data to determine socket\n    # address family (we are assuming the transport_data is a sockaddr_in or\n    # sockaddr_in6 structure and accessing it naughtily here)\n    family_p = cast(pdu.transport_data, POINTER(c_ushort))\n    family = family_p.contents.value\n    if family not in (AF_INET, AF_INET6):\n        return\n\n    addr_size, offset = (\n        (IPADDR_SIZE, IPADDR_OFFSET)\n        if family == AF_INET\n        else (IP6ADDR_SIZE, IP6ADDR_OFFSET)\n    )\n\n    buffer_type = c_char * pdu.transport_data_length\n    data_p = cast(pdu.transport_data, POINTER(buffer_type))\n    data = data_p.contents\n    addr = data[offset : offset + addr_size]\n    return inet_ntop(family, addr)\n\n\nclass UnsupportedSnmpVersionError(GeneralException):\n    \"\"\"Received a trap with an unsupported SNMP version\"\"\"\n\n    pass\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/__init__.py",
    "content": "\"\"\"snmptrapd handler modules.\"\"\"\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/airespace.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV snmptrapd handler plugin to handle AP assocation traps from a Cisco\nWireless LAN Controller.\n\nAll values from AIRESPACE-WIRELESS-MIB\n\n\"\"\"\n\nimport logging\n\nfrom nav.smidumps import get_mib\nfrom nav.event import Event\n\n_logger = logging.getLogger(__name__)\n\nMIB = get_mib('AIRESPACE-WIRELESS-MIB')\nNODES = MIB['nodes']\nTRAPS = MIB['notifications']\n\n\ndef handleTrap(trap, config=None):\n    # Two interesting traps:\n    # bsnAPAssociated and bsnAPDisassociated\n\n    if trap.snmpTrapOID not in [\n        str(TRAPS['bsnAPAssociated']['oid']),\n        str(TRAPS['bsnAPDisassociated']['oid']),\n    ]:\n        return False\n\n    _logger.debug(\"Got trap %s\", trap.snmpTrapOID)\n\n    # Eventvariables:\n    source = \"snmptrapd\"\n    target = \"eventEngine\"\n    eventtypeid = 'apState'\n    alerttype = \"\"\n    state = \"\"\n    subid = \"\"\n    mac = \"\"\n    apname = \"\"\n\n    # Name of AP: bsnAPName\n    # MAC: bsnAPMacAddrTrapVariable\n    for key, val in trap.varbinds.items():\n        if key.find(str(NODES['bsnAPName']['oid'])) >= 0:\n            apname = val\n            _logger.debug(\"Set apname to %s\", apname)\n        elif key.find(str(NODES['bsnAPMacAddrTrapVariable']['oid'])) >= 0:\n            mac = val\n            subid = mac\n\n    if trap.snmpTrapOID == str(TRAPS['bsnAPAssociated']['oid']):\n        state = 'e'\n        alerttype = 'apUp'\n    elif trap.snmpTrapOID == str(TRAPS['bsnAPDisassociated']['oid']):\n        state = 's'\n        alerttype = 'apDown'\n\n    e = Event(\n        source=source, target=target, subid=subid, eventtypeid=eventtypeid, state=state\n    )\n    e['alerttype'] = alerttype\n    e['mac'] = mac\n    e['apname'] = apname\n\n    _logger.debug(e)\n\n    try:\n        e.post()\n    except Exception as e:  # noqa: BLE001\n        _logger.error(e)\n        return False\n\n    return True\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/handlertemplate.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\nimport logging\nimport nav.errors\nfrom nav.db import getConnection\nfrom nav.event import Event\n\n\n# Create logger with modulename here\n_logger = logging.getLogger(__name__)\n\n\n# If you need to contact database.\nglobal db\ndb = getConnection('default')\n\n\ndef handleTrap(trap, config=None):\n    \"\"\"\n    handleTrap is run by snmptrapd every time it receives a\n    trap. Return False to signal trap was discarded, True if trap was\n    accepted.\n    \"\"\"\n\n    # Use the trap-object to access trap-variables and do stuff.\n    if trap.genericType in ['LINKUP', 'LINKDOWN']:\n        _logger.debug(\"This is a linkState trap\")\n\n    # config may be fetched like this\n    variable = config.get('template', 'variable')\n\n    if doSomething:\n\n        # Events are posted like this. For more information about the\n        # event-module see \"pydoc nav.event\"\n\n        # Create eventobject.\n        e = Event(\n            source=source,\n            target=target,\n            netboxid=netboxid,\n            deviceid=deviceid,\n            subid=subid,\n            eventtypeid=eventtypeid,\n            state=state,\n        )\n\n        # These go to eventqvar.\n        e['alerttype'] = 'linkUp'\n        e['module'] = module\n\n        try:\n            e.post()\n        except nav.errors.GeneralException as why:\n            _logger.error(why)\n            return False\n\n        # Return True if trap was processed.\n        return True\n    else:\n        # Return False if this trap was not interesting.\n        return False\n\n\n# This function is a nice to run to make sure the event and alerttypes\n# exist in the database if you post events for alerting.\n\n\ndef verifyEventtype():\n    \"\"\"\n    Safe way of verifying that the event- and alarmtypes exist in the\n    database. Should be run when module is imported.\n    \"\"\"\n\n    c = db.cursor()\n\n    # NB: Remember to replace the values with the one you need.\n\n    sql = \"\"\"\n    INSERT INTO eventtype (\n    SELECT 'linkState','Tells us whether a link is up or down.','y' WHERE NOT EXISTS (\n    SELECT * FROM eventtype WHERE eventtypeid = 'linkState'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'linkState', 'linkUp', 'Link active' WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'linkUp'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'linkState', 'linkDown', 'Link inactive' WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'linkDown'));\n    \"\"\"\n\n    queries = sql.split(';')\n    for q in queries:\n        if len(q.rstrip()) > 0:\n            c.execute(q)\n\n    db.commit()\n\n\ndef initialize():\n    \"\"\"Initialize method for snmpdtrap daemon so it can initialize plugin\n    after __import__\n    \"\"\"\n    verifyEventtype()\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/linkupdown.py",
    "content": "#\n# Copyright 2011, 2020 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV snmptrapd handler plugin to handle LINKUP and LINKDOWN traps from\nnetwork equipment.\n\n\"\"\"\n\nimport logging\nimport nav.errors\n\nfrom nav.db import getConnection\nfrom nav.event import Event\n\n_logger = logging.getLogger('nav.snmptrapd.linkupdown')\n\n\nLINKDOWN = \".1.3.6.1.6.3.1.1.5.3\"\nLINKUP = \".1.3.6.1.6.3.1.1.5.4\"\n\n\ndef handleTrap(trap, config=None):\n    \"\"\"Handles LINKUP/LINKDOWN traps, discarding anything else\"\"\"\n\n    if trap.snmpTrapOID not in (LINKDOWN, LINKUP):\n        return False\n\n    _logger.debug(\n        \"Module linkupdown got trap %s %s\", trap.snmpTrapOID, trap.genericType\n    )\n\n    ifindex = get_ifindex_from_trap(trap, config)\n    if not trap.netbox:\n        _logger.error(\"Could not find agent %s in database\", trap.agent)\n        return False\n    (interfaceid, deviceid, modulename, ifname, ifalias) = get_interface_details(\n        trap.netbox.netboxid, ifindex\n    )\n    if not interfaceid:\n        _logger.error(\n            \"Ignoring link trap from %s. Could not identify interface with ifindex=%s.\",\n            trap.netbox.sysname,\n            ifindex,\n        )\n        return False\n\n    # Check for traptype, post event on queue\n    down = trap.snmpTrapOID == LINKDOWN\n    success = post_link_event(\n        down, trap.netbox.netboxid, deviceid, interfaceid, modulename, ifname, ifalias\n    )\n    if success:\n        _logger.info(\n            \"Interface %s (%s) on %s is %s.\",\n            ifname,\n            ifalias,\n            trap.netbox.sysname,\n            'down' if down else 'up',\n        )\n    return success\n\n\ndef get_ifindex_from_trap(trap, config):\n    \"\"\"Gets the interface index from the trap's varbinds\"\"\"\n    port_oid = config.get('linkupdown', 'portOID')\n    for key, value in trap.varbinds.items():\n        if key.find(port_oid) >= 0:\n            return value\n    return \"\"\n\n\ndef get_interface_details(netboxid, ifindex):\n    \"\"\"Get interfaceid, deviceid, modulename, ifname, ifalias for interface\"\"\"\n    idquery = \"\"\"SELECT\n                   interfaceid, module.deviceid,\n                   module.name AS modulename,\n                   interface.ifname, interface.ifalias\n                 FROM netbox\n                 JOIN interface USING (netboxid)\n                 LEFT JOIN module USING (moduleid)\n                 WHERE netbox.netboxid=%s AND ifindex = %s\"\"\"\n    _logger.debug(idquery)\n    cursor = getConnection('default').cursor()\n    try:\n        cursor.execute(idquery, (netboxid, ifindex))\n    except nav.db.driver.ProgrammingError:\n        _logger.exception(\"Unexpected error when querying database\")\n    else:\n        if cursor.rowcount > 0:\n            return cursor.fetchone()\n        else:\n            _logger.debug('Could not find ifindex %s on %s', ifindex, netboxid)\n\n    return (None, None, None, None, None)\n\n\ndef post_link_event(down, netboxid, deviceid, interfaceid, modulename, ifname, ifalias):\n    \"\"\"Posts a linkState event on the event qeueue\"\"\"\n    state = 's' if down else 'e'\n\n    event = Event(\n        source=\"snmptrapd\",\n        target=\"eventEngine\",\n        netboxid=netboxid,\n        deviceid=deviceid,\n        subid=interfaceid,\n        eventtypeid=\"linkState\",\n        state=state,\n    )\n    event['alerttype'] = 'linkDown' if down else 'linkUp'\n    event['module'] = modulename or ''\n    event['interface'] = ifname or ''\n    event['ifalias'] = ifalias or ''\n\n    try:\n        event.post()\n    except nav.errors.GeneralException:\n        _logger.exception(\"Unexpected exception while posting event\")\n        return False\n    else:\n        return True\n\n\ndef verify_event_type():\n    \"\"\"\n    Safe way of verifying that the event- and alarmtypes exist in the\n    database. Should be run when module is imported.\n    \"\"\"\n    connection = getConnection('default')\n    cursor = connection.cursor()\n\n    sql = \"\"\"\n    INSERT INTO eventtype (\n    SELECT 'linkState','Tells us whether a link is up or down.','y'\n    WHERE NOT EXISTS (\n    SELECT * FROM eventtype WHERE eventtypeid = 'linkState'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'linkState', 'linkUp',\n    'Link active'\n    WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'linkUp'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'linkState', 'linkDown',\n    'Link inactive'\n    WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'linkDown'));\n    \"\"\"\n\n    queries = sql.split(';')\n    for query in queries:\n        if query.rstrip():\n            cursor.execute(query)\n\n    connection.commit()\n\n\ndef initialize():\n    \"\"\"Initialize method for snmpdtrap daemon so it can initialize plugin\n    after __import__\n    \"\"\"\n    verify_event_type()\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/ups.py",
    "content": "#\n# Copyright 2011 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV snmptrapd handler plugin to handle on battery, battery-time and\noff battery traps from APC and Eation UPSes.\n\nIt should also handle UPSes that are UPS-MIB (RFC1628) compliant like\nLiebert UPSes,- but it looks like UPS-MIB do not have any alarm for\noff battery.\n\n\"\"\"\n\nimport logging\nfrom nav.db import getConnection\nfrom nav.event import Event\nfrom nav.Snmp import Snmp\n\n# Create logger with modulename here\n_logger = logging.getLogger(__name__)\n\n# upsonbattery traps\nONBATTERY = {\n    'APC': ['.1.3.6.1.4.1.318.0.5'],\n    'Eaton': [\n        '.1.3.6.1.4.1.534.1.0.0.0.3',\n        # XUPS-MIB: xupstdOnBattery\n        '.1.3.6.1.4.1.534.1.11.4.1.0.3',\n        '.1.3.6.1.4.1.534.1.11.4.2.0.3',\n    ],\n    # MG-SNMP-UPS-MIB: upsmgOnBattery'\n    'MGE': ['1.3.6.1.4.1.705.1.11.0.11'],\n    # UPS-MIB: upsAlarmOnBattery\n    'RFC1628': ['.1.3.6.1.2.1.33.1.6.3.2'],\n}\nBATTERYTIME = {\n    'APC': ('.1.3.6.1.4.1.318.1.1.1.2.2.3.0', 'TIMETICKS'),\n    # XUPS-MIB: xupsBatTimeRemaining\n    'Eaton': ('.1.3.6.1.4.1.534.1.2.1.0', 'SECONDS'),\n    # MG-SNMP-UPS-MIB: upsmgBatteryRemainingTime\n    'MGE': ('1.3.6.1.4.1.705.1.5.1.0', 'SECONDS'),\n    # UPS-MIB: upsEstimatedMinutesRemaining\n    'RFC1628': ('.1.3.6.1.2.1.33.1.2.3.0', 'MINUTES'),\n}\n\n# upsoffbattery traps\nOFFBATTERY = {\n    'APC': ['.1.3.6.1.4.1.318.0.9'],\n    'Eaton': [\n        '.1.3.6.1.4.1.534.1.0.0.0.5',\n        # XUPS-MIBS: xupstdUtilityPowerRestored\n        '.1.3.6.1.4.1.534.1.11.4.1.0.5',\n        '.1.3.6.1.4.1.534.1.11.4.2.0.5',\n    ],\n    # MG-SNMP-UPS-MIB: upsmgReturnFromBattery\n    'MGE': ['1.3.6.1.4.1.705.1.11.0.12'],\n}\n\n\ndef handleTrap(trap, config=None):\n    \"\"\"\n    handleTrap is run by snmptrapd every time it receives a\n    trap. Return False to signal trap was discarded, True if trap was\n    accepted.\n    \"\"\"\n\n    # Event variables\n    source = \"snmptrapd\"\n    target = \"eventEngine\"\n    eventtypeid = \"upsPowerState\"\n\n    # Use the trap-object to access trap-variables and do stuff.\n    for vendor, oids in ONBATTERY.items():\n        if trap.snmpTrapOID in oids:\n            _logger.debug(\"Got ups on battery trap (%s)\", vendor)\n\n            # Get time to live\n            try:\n                batterytimeoid, format = BATTERYTIME[vendor]\n                s = Snmp(trap.agent, trap.community)\n                batterytime = s.get(batterytimeoid)\n            except Exception as err:  # noqa: BLE001\n                _logger.info(\"Could not get battery time from %s: %s\", trap.agent, err)\n                batterytime = False\n            else:\n                batterytime = format_batterytime(batterytime, format)\n                _logger.debug(\"batterytime: %s\", batterytime)\n\n            if not trap.netbox:\n                _logger.error(\n                    \"Could not find netbox in database, no event will be posted\",\n                )\n                return False\n\n            # Create event-object, fill it and post event.\n            e = Event(\n                source=source,\n                target=target,\n                netboxid=trap.netbox.netboxid,\n                eventtypeid=eventtypeid,\n                state='s',\n            )\n            e['alerttype'] = \"upsOnBatteryPower\"\n            e['batterytime'] = batterytime\n            e['sysname'] = trap.netbox.sysname\n\n            # Post event\n            try:\n                e.post()\n            except Exception as e:  # noqa: BLE001\n                _logger.error(e)\n                return False\n\n            return True\n\n    for vendor, oids in OFFBATTERY.items():\n        if trap.snmpTrapOID in oids:\n            _logger.debug(\"Got ups on utility power trap (%s)\", vendor)\n\n            if not trap.netbox:\n                _logger.error(\n                    \"Could not find netbox in database, no event will be posted\",\n                )\n                return False\n\n            # Create event-object, fill it and post event.\n            e = Event(\n                source=source,\n                target=target,\n                netboxid=trap.netbox.netboxid,\n                eventtypeid=eventtypeid,\n                state='e',\n            )\n            e['sysname'] = trap.netbox.sysname\n            e['alerttype'] = \"upsOnUtilityPower\"\n\n            # Post event\n            try:\n                e.post()\n            except Exception as e:  # noqa: BLE001\n                _logger.error(e)\n                return False\n\n            return True\n\n    return False\n\n\ndef format_batterytime(timeunit, format):\n    if isinstance(timeunit, int):\n        seconds = timeunit\n        if format == 'MINUTES':\n            # UPS-MIB\n            seconds = timeunit * 60\n        if format == 'TIMETICKS':\n            seconds = timeunit / 100\n        return \"%sh:%sm\" % (int(seconds / 60 / 60), (seconds / 60) % 60)\n\n\n# This function is a nice to run to make sure the event and alerttypes\n# exist in the database if you post events for alerting.\ndef verifyEventtype():\n    \"\"\"\n    Safe way of verifying that the event- and alarmtypes exist in the\n    database. Should be run when module is imported.\n    \"\"\"\n\n    db = getConnection('default')\n    c = db.cursor()\n\n    # NB: Remember to replace the values with the one you need.\n\n    sql = \"\"\"\n    INSERT INTO eventtype (\n    SELECT 'upsPowerState','UPS running on battery or utility power','y'\n    WHERE NOT EXISTS (\n    SELECT * FROM eventtype WHERE eventtypeid = 'upsPowerState'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'upsPowerState',\n    'upsOnBatteryPower', 'Ups running on battery power' WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'upsOnBatteryPower'));\n\n    INSERT INTO alertType (\n    SELECT nextval('alerttype_alerttypeid_seq'), 'upsPowerState',\n    'upsOnUtilityPower', 'Ups running on utility power' WHERE NOT EXISTS (\n    SELECT * FROM alerttype WHERE alerttype = 'upsOnUtilityPower'));\n    \"\"\"\n\n    queries = sql.split(';')\n    for q in queries:\n        if q.rstrip():\n            c.execute(q)\n\n    db.commit()\n\n\ndef initialize():\n    \"\"\"Initialize method for snmpdtrap daemon so it can initialize plugin\n    after __import__\n    \"\"\"\n    verifyEventtype()\n"
  },
  {
    "path": "python/nav/snmptrapd/handlers/weathergoose.py",
    "content": "#\n# Copyright (C) 2011, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV snmptrapd plugin to handle traps from IT Watchdogs' WeatherGoose\nClimate Monitor, versions 1 and 2.\n\n\"\"\"\n\nimport re\nimport logging\nfrom collections import defaultdict\nimport itertools\n\nimport nav.event\nfrom nav.smidumps import get_mib\n\n_logger = logging.getLogger(__name__)\n\n\nclass WeatherGoose1(object):\n    MIB = get_mib('IT-WATCHDOGS-MIB')\n\n    # Define supported traps and relations\n    TRAPS = MIB['notifications']\n    NODES = MIB['nodes']\n    TRIPTYPE = str(NODES['alarmTripType']['oid'])\n    GOOSENAME = str(NODES['climateName']['oid'] + '.1')\n    SUBID = None\n\n    # Values in TRIGGERTRAPS and CLEARTRAPS are used as event types\n    TRIGGERTRAPS = {\n        'cmClimateTempCTRAP': 'weathergoose_temperature',\n        'cmClimateHumidityTRAP': 'weathergoose_humidity',\n        'cmClimateAirflowTRAP': 'weathergoose_airflow',\n        'cmClimateLightTRAP': 'weathergoose_light',\n        'cmClimateSoundTRAP': 'weathergoose_sound',\n    }\n    CLEARTRAPS = {\n        'cmClimateTempCCLEAR': 'weathergoose_temperature',\n        'cmClimateHumidityCLEAR': 'weathergoose_humidity',\n        'cmClimateAirflowCLEAR': 'weathergoose_airflow',\n        'cmClimateLightCLEAR': 'weathergoose_light',\n        'cmClimateSoundCLEAR': 'weathergoose_sound',\n    }\n    CLIMATEOIDS = [\n        'climateTempC',\n        'climateHumidity',\n        'climateAirflow',\n        'climateLight',\n        'climateSound',\n        'tempSensorTempC',\n    ]\n    SENSORNAMES = ['climateName']\n    TRIPTYPES = {0: 'None', 1: 'Low', 2: 'High', 3: 'Unplugged'}\n\n    @classmethod\n    def can_handle(cls, oid):\n        return bool(cls.map_oid_to_trigger(oid))\n\n    @classmethod\n    def map_oid_to_trigger(cls, oid):\n        for trigger in itertools.chain(cls.TRIGGERTRAPS.keys(), cls.CLEARTRAPS.keys()):\n            if oid == str(cls.TRAPS[trigger]['oid']):\n                return trigger\n\n    def __init__(self, trap, netboxid, sysname, roomid):\n        self.trap = trap\n        self.netboxid = netboxid\n        self.sysname = sysname\n        self.roomid = roomid\n        self.trigger = None\n\n        self._parse()\n\n    def _parse(self):\n        oid = self.trap.snmpTrapOID\n        self.trigger = self.map_oid_to_trigger(oid)\n        if self.trigger:\n            _logger.info(\"Got %s\", self.TRAPS[self.trigger]['description'])\n        else:\n            raise Exception(\"This trap cannot be handled by this plugin\")\n\n        self.goosename = self.trap.varbinds.get(self.GOOSENAME, 'N/A')\n\n        self.triptype = self.TRIPTYPES.get(self.trap.varbinds[self.TRIPTYPE], 'N/A')\n\n        self.climatevalue, self.climatedescr = self._get_trigger_values()\n\n    def _get_trigger_values(self):\n        \"\"\"Returns the trigger variable's value and description.\n\n        :returns: A tuple: (climatevalue, climatedescr)\n\n        \"\"\"\n        for c in self.CLIMATEOIDS:\n            # table has only one row\n            possiblekey = str(self.NODES[c]['oid'] + '.1')\n            if possiblekey in self.trap.varbinds:\n                return (self.trap.varbinds[possiblekey], self.NODES[c]['description'])\n        return (None, None)\n\n    def post_event(self):\n        # Create and populate event\n        e = nav.event.Event(\n            source=\"snmptrapd\",\n            target=\"eventEngine\",\n            netboxid=self.netboxid,\n            eventtypeid=self._get_event_type(),\n            subid=self._get_subid(),\n            state=self._get_event_state(),\n        )\n        e['alerttype'] = self._get_alert_type()\n        e['triptype'] = self.triptype\n        e['climatedescr'] = self.climatedescr\n        e['climatevalue'] = self.climatevalue\n        e['goosename'] = self.goosename\n        e['sensorname'] = self._get_sensorname()\n        e['sysname'] = self.sysname\n        e['room'] = self.roomid\n\n        _logger.debug(e)\n\n        # Post event on eventqueue\n        try:\n            e.post()\n        except Exception as e:  # noqa: BLE001\n            _logger.error(e)\n            return False\n\n        return True\n\n    def _get_event_type(self):\n        for trigdict in (self.TRIGGERTRAPS, self.CLEARTRAPS):\n            if self.trigger in trigdict:\n                return trigdict[self.trigger]\n\n    def _get_event_state(self):\n        if self.trigger in self.TRIGGERTRAPS:\n            return 's'\n        elif self.trigger in self.CLEARTRAPS:\n            return 'e'\n        else:\n            return 'x'\n\n    def _get_alert_type(self):\n        return self.trigger\n\n    def _get_subid(self):\n        \"\"\"For external sensors we need a subid.\"\"\"\n        return self.trap.varbinds.get(self.SUBID)\n\n    def _get_sensorname(self):\n        for sensor_name in self.SENSORNAMES:\n            oid = str(self.NODES[sensor_name]['oid'] + '.1')\n            value = self.trap.varbinds.get(oid)\n            if value:\n                return value\n\n\nclass WeatherGoose2(WeatherGoose1):\n    MIB = get_mib('IT-WATCHDOGS-MIB-V3')\n\n    # Define supported traps and relations\n    TRAPS = MIB['notifications']\n    NODES = MIB['nodes']\n    TRIPTYPE = str(NODES['alarmTripType']['oid'] + '.0')\n    GOOSENAME = str(NODES['productFriendlyName']['oid'] + '.0')\n    SUBID = str(NODES['alarmInstance']['oid'] + '.0')\n    SENSORNAMES = ['tempSensorName', 'climateName']\n\n    # Values in TRIGGERTRAPS and CLEARTRAPS are used as event types\n    TRIGGERTRAPS = {\n        'cmClimateTempCNOTIFY': 'weathergoose_temperature',\n        'cmClimateHumidityNOTIFY': 'weathergoose_humidity',\n        'cmClimateAirflowNOTIFY': 'weathergoose_airflow',\n        'cmClimateLightNOTIFY': 'weathergoose_light',\n        'cmClimateSoundNOTIFY': 'weathergoose_sound',\n        'cmTempSensorTempCNOTIFY': 'weathergoose_temperature',\n    }\n\n    CLEARTRAPS = WeatherGoose1.CLEARTRAPS.copy()\n    CLEARTRAPS.update(\n        {\n            'cmTempSensorTempCCLEAR': 'weathergoose_temperature',\n        }\n    )\n\n\n# IT Watchdogs -> Geist transition pattern\n_geistpattern = re.compile(\"^cm\")\n\n\nclass GeistWeatherGoose(WeatherGoose2):\n    \"\"\"The rebranded MIB after IT Watchdogs merged with Geist\"\"\"\n\n    MIB = get_mib('GEIST-MIB-V3')\n\n    # Define supported traps and relations\n    TRAPS = MIB['notifications']\n    NODES = MIB['nodes']\n    TRIPTYPE = str(NODES['alarmTripType']['oid'] + '.0')\n    GOOSENAME = str(NODES['productFriendlyName']['oid'] + '.0')\n    SUBID = str(NODES['alarmInstance']['oid'] + '.0')\n    SENSORNAMES = ['tempSensorName', 'climateName']\n\n    # Values in TRIGGERTRAPS and CLEARTRAPS are used as event types\n    TRIGGERTRAPS = {\n        _geistpattern.sub(\"gst\", key): value\n        for key, value in WeatherGoose2.TRIGGERTRAPS.items()\n    }\n    CLEARTRAPS = {\n        _geistpattern.sub(\"gst\", key): value\n        for key, value in WeatherGoose2.CLEARTRAPS.items()\n    }\n\n\nHANDLER_CLASSES = (WeatherGoose1, WeatherGoose2, GeistWeatherGoose)\n\n\ndef handleTrap(trap, config=None):\n    \"\"\"This function is called from snmptrapd\"\"\"\n\n    if not trap.netbox:\n        return False\n\n    netboxid, sysname, roomid = trap.netbox\n    oid = trap.snmpTrapOID\n    for handler_class in HANDLER_CLASSES:\n        if handler_class.can_handle(oid):\n            handler = handler_class(trap, netboxid, sysname, roomid)\n            return handler.post_event()\n\n    return False\n\n\ndef initialize_eventdb():\n    \"\"\"Populates the database with eventtype and alerttype information\"\"\"\n    try:\n        nav.event.create_type_hierarchy(_get_event_hierarchy())\n    except Exception as e:  # noqa: BLE001\n        _logger.error(e)\n        return False\n\n\ndef _get_event_hierarchy():\n    \"\"\"\n    Builds an event/alert hierarchy data structure from the known handler\n    classes.\n    \"\"\"\n    seen_alerts = set()\n    hiera = defaultdict(list)\n    for klass in HANDLER_CLASSES:\n        alerts = klass.TRIGGERTRAPS.copy()\n        alerts.update(klass.CLEARTRAPS)\n\n        for alert, event in alerts.items():\n            if alert in seen_alerts:\n                continue\n            seen_alerts.add(alert)\n\n            eventdescr = (event, '', True)\n            alertdescr = klass.TRAPS.get(alert, {}).get('description', '')\n            hiera[eventdescr].append((alert, alertdescr))\n\n    return dict(hiera)\n\n\ndef initialize():\n    \"\"\"Initialize method for snmptrapd daemon so it can initialize plugin\n    after __import__\n    \"\"\"\n    initialize_eventdb()\n"
  },
  {
    "path": "python/nav/snmptrapd/plugin.py",
    "content": "#\n# Copyright 2013 (C) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Snmptrapd plugin helpers\"\"\"\n\nimport logging\nfrom nav.errors import GeneralException\n\n_logger = logging.getLogger(__name__)\n\n\nclass ModuleLoadError(GeneralException):\n    \"\"\"Failed to load module\"\"\"\n\n    pass\n\n\ndef load_handler_modules(modules):\n    \"\"\"\n    Loads handlermodules\n    :param modules plugin names as ['nav.snmptrapd.handlers.foo',\n    'nav.snmptrapd.handlers.bar']\n    \"\"\"\n\n    # Try to use __import__ to load every plugin under runtime and\n    # return loaded modules in a list when done.\n    #\n    # This is usually done by the snmptrapd daemon in bin/ ;-)\n\n    handlermodules = []\n    for name in modules:\n        name = name.strip()\n        parts = name.split('.')\n        parent = '.'.join(parts[:-1])\n        try:\n            mod = __import__(name, globals(), locals(), [parent])\n\n            try:\n                mod.initialize()\n            except AttributeError:\n                pass  # Silently ignore if module has no initialize method\n\n            handlermodules.append(mod)\n        except Exception as why:  # noqa: BLE001\n            _logger.exception(\"Module %s did not compile - %s\", name, why)\n            raise ModuleLoadError(why)\n\n    return handlermodules\n"
  },
  {
    "path": "python/nav/snmptrapd/trap.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Trap related data structures.\"\"\"\n\nimport string\nimport logging\nfrom collections import namedtuple\n\nfrom nav.db import getConnection\n\n_logger = logging.getLogger(__name__)\n\n\nAgentNetbox = namedtuple('Agent', 'netboxid sysname roomid')\n\n\nclass SNMPTrap(object):\n    \"\"\"Represents an SNMP trap or notification, in a structure agnostic to\n    SNMP v1 and v2c differences.\n\n    :\n    \"\"\"\n\n    def __init__(\n        self,\n        src,\n        agent,\n        type,\n        genericType,\n        snmpTrapOID,\n        uptime,\n        community,\n        version,\n        varbinds,\n    ):\n        self.src = src\n        self.agent = agent\n        self.type = type\n        self.genericType = genericType\n        self.snmpTrapOID = snmpTrapOID\n        self.uptime = uptime\n        self.community = community\n        self.varbinds = varbinds\n        self.version = version\n        # Print string if printable else assume hex and write hex-string\n        for key, val in self.varbinds.items():\n            if not val.strip(string.printable) == '':\n                val = ':'.join([\"%02x\" % ord(c) for c in val])\n                self.varbinds[key] = val\n\n    def _lookup_agent(self):\n        \"\"\"Attempts to look up the corresponding netbox of this trap\"\"\"\n        conn = getConnection('snmptrapd')\n        cur = conn.cursor()\n        cur.execute(\n            \"SELECT DISTINCT netboxid, sysname, roomid \"\n            \"FROM netbox \"\n            \"LEFT JOIN interface USING (netboxid) \"\n            \"LEFT JOIN gwportprefix USING (interfaceid) \"\n            \"WHERE %s IN (ip, gwip) \",\n            (self.agent,),\n        )\n\n        if cur.rowcount < 1:\n            _logger.warning(\n                \"Unable to match trap agent %s to a NAV-monitored device\", self.agent\n            )\n            return None\n\n        return AgentNetbox(*cur.fetchone())\n\n    @property\n    def netbox(self):\n        if not hasattr(self, '_netbox'):\n            setattr(self, '_netbox', self._lookup_agent())\n        return getattr(self, '_netbox')\n\n    def __str__(self):\n        text = \"Got snmp version %s trap\\n\" % self.version\n        text = (text + \"Src: %s, Community: %s, Uptime: %s\\n\") % (\n            self.src,\n            self.community,\n            self.uptime,\n        )\n        text = (text + \"Type %s, snmpTrapOID: %s\\n\") % (\n            self.genericType,\n            self.snmpTrapOID,\n        )\n\n        for key in sorted(self.varbinds.keys()):\n            val = self.varbinds[key]\n            text = text + \"%s -> %s\\n\" % (key, val)\n\n        return text\n"
  },
  {
    "path": "python/nav/startstop.py",
    "content": "#\n# Copyright (C) 2006, 2010, 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV Service start/stop library.\"\"\"\n\nimport errno\nimport os\nimport shlex\nimport signal\nimport subprocess\nimport sys\nimport time\nimport re\n\nimport yaml\n\nfrom nav.config import open_configfile, find_config_file, NAV_CONFIG\nfrom nav.errors import GeneralException\nfrom nav import buildconf\n\nINFOHEAD = '## info:'\nDAEMON_CONFIG = 'daemons.yml'\nCRON_DIR = find_config_file('cron.d')\n\n\ndef get_info_from_content(content):\n    \"\"\"Extracts and returns service information from an iterable\"\"\"\n    for line in content:\n        if not line.startswith('#'):\n            break\n        elif line.startswith(INFOHEAD):\n            return line.removeprefix(INFOHEAD).strip()\n\n\nclass Service(object):\n    \"\"\"Represents a NAV service in general, and should never be\n    instantiated.\"\"\"\n\n    def __init__(self, filename):\n        self.name = os.path.split(filename)[1]\n        self.info = 'N/A'\n        self.source = filename\n        self.load_from_file(filename)\n\n    def __repr__(self):\n        return \"<%s '%s'>\" % (self.__class__.__name__, self.name)\n\n    def load_from_file(self, filename):\n        \"\"\"Loads the service from a file\"\"\"\n        raise NotImplementedError\n\n    def start(self, silent=False):\n        \"\"\"Starts the service\"\"\"\n        raise NotImplementedError\n\n    def stop(self, silent=False):\n        \"\"\"Stops the service\"\"\"\n        raise NotImplementedError\n\n    def restart(self, silent=False):\n        \"\"\"Restarts the service\"\"\"\n        raise NotImplementedError\n\n    def is_up(self, silent=False):\n        \"\"\"Verifies that the service is up and running\"\"\"\n        raise NotImplementedError\n\n    def command(self, command, silent=False):\n        \"\"\"Runs command against this service handler\"\"\"\n        raise NotImplementedError\n\n    @classmethod\n    def load_services(cls):\n        \"\"\"Loads all services of this kind\"\"\"\n        raise NotImplementedError\n\n\nclass DaemonService(Service):\n    \"\"\"Represents daemon based services.\"\"\"\n\n    status = None\n\n    def __init__(self, name, service_dict, source=None):\n        self.name = name\n        self.info = service_dict.get('description')\n        self.source = source\n        self._command = service_dict['command']\n        self.service_dict = service_dict\n\n    @classmethod\n    def load_services(cls):\n        try:\n            with open_configfile(DAEMON_CONFIG) as ymldata:\n                cfg = yaml.safe_load(ymldata)\n        except OSError:\n            cfg = {'daemons': {}}\n\n        daemons = cfg.get('daemons')\n\n        services = [\n            cls(name, service_dict=values, source=DAEMON_CONFIG)\n            for name, values in daemons.items()\n            if values.get('enabled', True)\n        ]\n\n        return services\n\n    def start(self, silent=False):\n        if self.is_up():\n            return False\n\n        if not self.service_dict.get(\"privileged\", False):\n            # run command as regular nav user\n            user = NAV_CONFIG.get(\"NAV_USER\", \"navcron\")\n            command = 'su {user} -c \"{command}\"'.format(\n                command=self._command, user=user\n            )\n        else:\n            command = self._command\n\n        return self.execute(command, silent=silent)\n\n    def stop(self, silent=False):\n        if not self.is_up():\n            return False\n\n        pid = self.get_pid()\n        for attempt in range(3):\n            try:\n                os.kill(pid, signal.SIGTERM)\n            except OSError as error:\n                if error.errno == errno.ESRCH:  # it's gone\n                    return True\n                else:\n                    raise\n            if self.is_up(pid=pid):\n                delay = (attempt + 1) * 2\n                time.sleep(delay)\n        else:\n            return False\n\n    def restart(self, silent=False):\n        if self.stop(silent=silent):\n            return self.start(silent=silent)\n        else:\n            return False\n\n    def is_up(self, silent=False, pid=None):\n        if not pid:\n            pid = self.get_pid()\n        if not pid:\n            return False\n\n        try:\n            os.kill(pid, 0)\n        except OSError as error:\n            if error.errno == errno.ESRCH:  # no such process\n                return False\n            elif error.errno == errno.EPERM:  # no permission, but it's there\n                return True\n            else:\n                raise\n        else:\n            return True\n\n    def get_pid(self):\n        \"\"\"Returns the last known pid of this process, if found\"\"\"\n        pidfile = self.get_pidfile()\n        if pidfile:\n            with open(pidfile, 'r') as handle:\n                pid = handle.readline().strip()\n                if not pid or not pid.isdigit():\n                    return\n                return int(pid)\n\n    def get_pidfile(self):\n        \"\"\"Attempts to locate the pidfile of this command\"\"\"\n        pidfile = self.service_dict.get('pidfile')\n        if pidfile and os.path.exists(pidfile):\n            return pidfile\n        elif pidfile:\n            nameguess = pidfile\n        else:\n            nameguess = self.name + '.pid'\n\n        locations = [\n            os.path.join(buildconf.datadir, 'var/run'),\n            '/var/run/nav',\n            '/run/nav',\n            '/tmp',\n        ]\n        for pidfile in [os.path.join(loc, nameguess) for loc in locations]:\n            if os.path.exists(pidfile):\n                return pidfile\n\n    def command(self, command, silent=False):\n        raise CommandNotSupportedError(command)\n\n    def execute(self, command, silent=False):\n        with open(os.devnull, 'w') as DEVNULL:\n            if silent:\n                stdout = stderr = DEVNULL\n            else:\n                stdout = stderr = None\n\n            self.status = subprocess.call(\n                list(shlex.split(command)), stdout=stdout, stderr=stderr\n            )\n            return self.status == 0\n\n\nclass CronService(Service):\n    \"\"\"Represents cron based services.\"\"\"\n\n    crontab = None\n\n    def __init__(self, filename):\n        self.content = None\n        if CronService.crontab is None:\n            cron_user = NAV_CONFIG.get('NAV_USER', 'navcron')\n            CronService.crontab = Crontab(cron_user)\n        super(CronService, self).__init__(filename)\n\n    def load_from_file(self, filename):\n        with open(filename, mode='r') as cronfile:\n            self.content = [line.strip() for line in cronfile]\n            self.info = get_info_from_content(self.content)\n\n    @classmethod\n    def load_services(cls):\n        def _is_blacklisted(fname):\n            return fname.startswith('.') or fname.endswith('~') or '.dpkg-' in fname\n\n        if CRON_DIR:\n            filelist = [\n                os.path.join(CRON_DIR, f)\n                for f in os.listdir(CRON_DIR)\n                if not _is_blacklisted(f)\n            ]\n        else:\n            filelist = []\n        servicelist = [cls(f) for f in filelist]\n        return servicelist\n\n    def start(self, silent=False):\n        if not silent:\n            print(\"Starting %s:\" % self.name, end=' ')\n        try:\n            CronService.crontab[self.name] = self.content\n            CronService.crontab.save()\n        except CrontabError as error:\n            print(\"Failed\")\n            raise error\n        else:\n            if not silent:\n                print(\"Ok\")\n            return True\n\n    def stop(self, silent=False):\n        if not silent:\n            print(\"Stopping %s:\" % self.name, end=' ')\n        try:\n            del CronService.crontab[self.name]\n            CronService.crontab.save()\n        except CrontabError as error:\n            if not silent:\n                print(\"Failed\")\n            raise error\n        except KeyError:\n            if not silent:\n                print(\"Not running\")\n        else:\n            if not silent:\n                print(\"Ok\")\n            return True\n\n    def restart(self, silent=False):\n        self.stop(silent=silent)\n        self.start(silent=silent)\n\n    def is_up(self, silent=False):\n        if not silent:\n            print(\"%s:\" % self.name, end=' ')\n        if self.name in CronService.crontab:\n            running_content = '\\n'.join(CronService.crontab[self.name])\n            my_content = '\\n'.join(self.content)\n            if not silent:\n                print(\"Up\")\n                if running_content != my_content:\n                    print(\n                        \"NOTICE: Current crontab does not match the content\"\n                        \" of %s\" % self.name,\n                        file=sys.stderr,\n                    )\n            return True\n        else:\n            if not silent:\n                print(\"Down\")\n            return False\n\n    def command(self, command, silent=False):\n        raise CommandNotSupportedError(command)\n\n\nclass Crontab(object):\n    \"\"\"Represents the crontab of a user.  Recognizes tags to define a\n    block structure, which can be set/retrieved using a Crontab object\n    as a dictionary.\"\"\"\n\n    def __init__(self, user):\n        self.user = user\n        self.content = ''\n        self._blocks = {}\n        self.load()\n\n    def load(self):\n        \"\"\"Loads the currently active crontab\"\"\"\n        try:\n            output = subprocess.check_output([\"crontab\", \"-u\", self.user, \"-l\"])\n            self.content = output.decode('utf-8').splitlines()\n        except subprocess.CalledProcessError:\n            # crontab doesn't have very helpful exit codes. if we get here, it\n            # may simply be because the user has no defined crontab yet\n            self.content = []\n            _error = True\n        except OSError as error:\n            if error.errno == errno.ENOENT:\n                raise CrontabError(\"crontab command was not found\")\n            else:\n                raise\n        else:\n            _error = False\n\n        # cron often inserts three comment lines in the spooled\n        # crontab; the following is an attempt to remove those three\n        # lines.\n        for _dummy in range(3):\n            if not self.content:\n                break\n            if self.content[0].startswith('# '):\n                del self.content[0]\n        self._parse_blocks()\n\n        if not _error and '__init__' not in self:\n            self.update_init()\n\n    def save(self):\n        \"\"\"Saves the current state to the crontab\"\"\"\n        self.update_init()\n        proc = subprocess.Popen(\n            [\"crontab\", \"-u\", self.user, \"-\"], stdin=subprocess.PIPE\n        )\n        proc.stdin.write(str(self).encode('utf-8'))\n        proc.stdin.close()\n\n        exit_code = proc.wait()\n        if exit_code:\n            raise CrontabError(exit_code)\n\n    def update_init(self):\n        \"\"\"Update the __init__ block with current environment\n        variables and such.\"\"\"\n        time_string = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime(time.time()))\n        env_vars = ('PERL5LIB', 'PYTHONPATH', 'CLASSPATH', 'PATH')\n        init_block = ['# NAV updated this crontab at: ' + time_string]\n        for var in env_vars:\n            if var in os.environ:\n                val = os.environ[var]\n                init_block.append('%s=\"%s\"' % (var, val))\n\n        # Set up a default MAILTO directive\n        mailto = NAV_CONFIG.get('ADMIN_MAIL', 'root@localhost')\n\n        init_block.append('MAILTO=' + mailto)\n        if '__init__' not in self:\n            # If we don't have an init block, make sure we put it at\n            # the very top of the crontab\n            self.content[0:0] = ['##block __init__##', '##end##']\n            self._parse_blocks()\n        self['__init__'] = init_block\n\n    def _parse_blocks(self):\n        block_start = re.compile(r'^##block\\s+([^#]+)##')\n        block_end = '##end##'\n        block_list = {}\n        in_block = None\n        start_line = 0\n        pos = 0\n\n        for line in self.content:\n            if in_block is None:\n                match = block_start.match(line)\n                if match:\n                    in_block = match.groups()[0]\n                    start_line = pos\n            elif line.startswith(block_end):\n                block_list[in_block] = (start_line, pos)\n                in_block = None\n                start_line = 0\n            pos += 1\n\n        if in_block is not None:\n            raise CrontabBlockError(self.user, in_block)\n        self._blocks = block_list\n\n    def __contains__(self, item):\n        return item in self._blocks\n\n    def __getitem__(self, key):\n        pos = self._blocks[key]\n        return self.content[pos[0] + 1 : pos[1]]\n\n    def __setitem__(self, key, content):\n        block = ['##block %s##' % key, '##end##']\n        if isinstance(content, str):\n            block[1:1] = content.split('\\n')\n        else:\n            block[1:1] = content\n\n        if key in self._blocks:\n            ins_line = self._blocks[key][0]\n            del self[key]\n        else:\n            ins_line = len(self.content)\n\n        self.content[ins_line:ins_line] = block\n        self._parse_blocks()\n\n    def __delitem__(self, key):\n        pos = self._blocks[key]\n        del self.content[pos[0] : pos[1] + 1]\n        self._parse_blocks()\n\n    def __str__(self):\n        return '\\n'.join(self.content)\n\n\nclass ServiceRegistry(dict):\n    \"\"\"Registry of known NAV services.\"\"\"\n\n    def __init__(self):\n        super(ServiceRegistry, self).__init__()\n\n        service_list = []\n        for service_type in (DaemonService, CronService):\n            service_list.extend(service_type.load_services())\n\n        for service in service_list:\n            self[service.name] = service\n\n\n#\n# Exception/Error classes\n#\n\n\nclass ServiceError(GeneralException):\n    \"\"\"General service error\"\"\"\n\n\nclass CommandNotSupportedError(ServiceError):\n    \"\"\" \"Command not supported\"\"\"\n\n\nclass CommandFailedError(ServiceError):\n    \"\"\"Command failed\"\"\"\n\n\nclass CrontabError(ServiceError):\n    \"\"\"General Crontab error\"\"\"\n\n\nclass CrontabBlockError(CrontabError):\n    \"\"\" \"There is an error in the block format of the crontab\"\"\"\n"
  },
  {
    "path": "python/nav/statemon/RunQueue.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n\"\"\"\nThis module provides a threadpool and fair scheduling.\n\"\"\"\n\nfrom collections import deque\nimport heapq\nimport sys\nimport time\nimport threading\nimport logging\n\n\nfrom . import config\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass TerminateException(Exception):\n    \"\"\"Raised to terminate the execution of a Worker\"\"\"\n\n\nclass Worker(threading.Thread):\n    \"\"\"\n    The thread removes a checker from the runqueue and executes it. If the\n    runque is empty, the thread sleeps until it gets woken when a checker is\n    placed in the queue.\n\n    \"\"\"\n\n    def __init__(self, rq):\n        threading.Thread.__init__(self)\n        self._runqueue = rq\n        self._runcount = 0\n        self._running = 1\n        self._time_created = time.time()\n        self._time_start_execute = 0\n\n    def run(self):\n        \"\"\"\n        Tries to dequeue a checker. Loops while\n        self._running=1\n        \"\"\"\n        while self._running:\n            try:\n                checker = self._runqueue.deq()\n                self.execute(checker)\n            except TerminateException:\n                self._runqueue.workers.remove(self)\n                return\n\n    def execute(self, checker):\n        \"\"\"\n        Executes the checker. If maximum runcount is\n        exceeded, self._running is set to zero and the\n        thread will be recycled.\n        \"\"\"\n        self._runcount += 1\n        self._time_start_execute = time.time()\n        checker.run()\n        if (\n            self._runqueue.get_max_run_count() != 0\n            and self._runcount > self._runqueue.get_max_run_count()\n        ):\n            self._running = 0\n            self._runqueue.unused_thread_name.append(self.getName())\n            self._runqueue.workers.remove(self)\n            _logger.info(\"%s is recycling.\", self.getName())\n        _logger.debug(\"%s finished checker number %i\", self.getName(), self._runcount)\n        self._time_start_execute = 0\n\n\ndef RunQueue(*args, **kwargs):\n    \"\"\"Instantiates or retrieves the RunQueue singleton\"\"\"\n    if getattr(_RunQueue, '_instance') is None:\n        setattr(_RunQueue, '_instance', _RunQueue(*args, **kwargs))\n    return getattr(_RunQueue, '_instance')\n\n\nclass _RunQueue(object):\n    _instance = None\n\n    def __init__(self, **kwargs):\n        self.conf = config.serviceconf()\n        self._max_threads = int(self.conf.get('maxthreads', sys.maxsize))\n        _logger.info(\"Setting maxthreads=%i\", self._max_threads)\n        self._max_run_count = int(self.conf.get('recycle interval', 50))\n        _logger.info(\"Setting maxRunCount=%i\", self._max_run_count)\n        self._controller = kwargs.get('controller', self)\n        self.workers = []\n        self.unused_thread_name = []\n        self.queue = deque()\n        self.timerqueue = EventQueue()\n        self.lock = threading.RLock()\n        self.await_work = threading.Condition(self.lock)\n        self.stop = 0\n        self.make_daemon = 1\n\n    def get_max_run_count(self):\n        return self._max_run_count\n\n    def enq(self, runnable):\n        \"\"\"\n        Enqueues a runnable in the runqueue. It accepts\n        a runnable, or a tuple containing (timestamp, runnable).\n        If given in the last form, the runnable will be run as\n        quickly as possible after time timestamp has occured.\n        \"\"\"\n        self.lock.acquire()\n        # Checkers with priority is put in a seperate queue\n        if isinstance(runnable, tuple):\n            pri, obj = runnable\n            self.timerqueue.put(pri, obj)\n        else:\n            self.queue.append(runnable)\n\n        self._start_worker_if_needed()\n        self.lock.release()\n\n    def _start_worker_if_needed(self):\n        # This is quite dirty, but I really need to know how many\n        # threads are waiting for checkers.\n        waiters = getattr(self.await_work, \"_waiters\", None)\n        num_waiters = len(waiters)\n        _logger.debug(\n            \"Number of workers: %i Waiting workers: %i\", len(self.workers), num_waiters\n        )\n        if num_waiters > 0:\n            self.await_work.notify()\n        elif len(self.workers) < self._max_threads:\n            new_worker = Worker(self)\n            new_worker.setDaemon(self.make_daemon)\n            if self.unused_thread_name:\n                new_worker.setName(self.unused_thread_name.pop())\n            else:\n                new_worker.setName('worker' + str(len(self.workers)))\n            self.workers.append(new_worker)\n            new_worker.start()\n\n    def deq(self):\n        \"\"\"\n        Gets a runnable from the runqueue. Checks if we have\n        scheduled checkers (runnables containing timestamp. If not, we\n        return a checker without timestamp.\n        \"\"\"\n        self.lock.acquire()\n        while 1:\n            # wait if we have no checkers in queue\n            while not self.queue and not self.timerqueue:\n                if self.stop:\n                    self.lock.release()\n                    raise TerminateException\n                self.await_work.wait()\n            if self.stop:\n                self.lock.release()\n                raise TerminateException\n\n            if self.timerqueue:\n                scheduled_time = float(self.timerqueue.firstTimestamp())\n                now = time.time()\n                wait = scheduled_time - now\n                # If we have priority ready we\n                # return it now.\n                if wait <= 0:\n                    r = self.timerqueue.pop()\n                    self.lock.release()\n                    return r\n            # We have no priority checkers ready.\n            # Check if we have unpriority checkers\n            # to execute\n            if self.queue:\n                r = self.queue.popleft()\n                self.lock.release()\n                return r\n            # Wait to execute priority checker, break if new checkers arrive\n            else:\n                _logger.debug(\"Thread waits for %s secs\", wait)\n                self.await_work.wait(wait)\n\n    def terminate(self):\n        \"\"\"Terminates all worker threads\"\"\"\n        self.lock.acquire()\n        self.stop = 1\n        self.await_work.notifyAll()\n        self.lock.release()\n        _logger.info(\"Waiting for threads to terminate...\")\n        for i in self.workers:\n            i.join()\n        _logger.info(\"All threads have finished\")\n\n\nclass EventQueue(object):\n    def __init__(self):\n        self.heap = []\n        self.counter = 0\n\n    def put(self, timestamp, item):\n        '''Insert item *item* in heap with the timestamp *timestamp*'''\n        self.counter += 1\n        heapq.heappush(self.heap, (timestamp, self.counter, item))\n\n    def firstTimestamp(self):\n        '''Returns the timestamp of the first event in the queue'''\n        if not self.heap:\n            raise IndexError(\"empty event queue\")\n        return self.heap[0][0]\n\n    def pop(self):\n        '''Removes and returns the first event in the queue'''\n        timestamp, counter, item = heapq.heappop(self.heap)\n        return item\n\n    def __bool__(self):\n        return bool(self.heap)\n\n    def __len__(self):\n        return len(self.heap)\n"
  },
  {
    "path": "python/nav/statemon/__init__.py",
    "content": "\"\"\"\nIt just needs to be here :o)\n\"\"\"\n"
  },
  {
    "path": "python/nav/statemon/abstractchecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Base functionality for service checkers\"\"\"\n\nimport time\nimport logging\n\nfrom nav.statemon import config, RunQueue, db, statistics, event\n\n\n_logger = logging.getLogger(__name__)\nTIMEOUT = 5  # default, hardcoded timeout :)\n\n\nclass AbstractChecker(object):\n    \"\"\"\n    This is the superclass for each handler. Note that it is\n    'abstract' and should not be instanciated directly. If you want to\n    check a service that is not supported by NAV, you have to\n    write your own handler. This is done quite easily by subclassing\n    this class.\n\n    Quick how-to:\n    Let's say we want to create a handler for the gopher service.\n    Create a new file called GopherHandler.py in the handler/\n    subdirectory. (the filename must be on that form).\n    This file should look something like this:\n\n    from abstractHandler import AbstractHandler # this is important\n    from event import Event\n    class GopherHandler(AbstractHandler):\n      def __init__(self, service, **kwargs):\n            # gopher usually runs on port 70\n        AbstractHandler.__init__(self, \"gopher\", service, port=70 **kwargs)\n\n      def execute(self):\n        # In case you need user/pass you can do like this:\n        args = self.getArgs()\n        user = args.get(\"username\", \"\")\n        pass = args.get(\"password\", \"\")\n            # Now you need to do the actual check\n        # I don't implement it now, but every exception is\n        # caught by the suberclass, and will mark the service\n        # as down. If you want to create a more understandable\n        # error message you should catch the Exception here and\n        # return Event.DOWN, \"some valid error message\"\n        # You should try to extract a version number from the server.\n        version = \"\"\n        # and then we return status UP, and our version string.\n        return Event.UP, version\n    \"\"\"\n\n    IPV6_SUPPORT = False\n    DESCRIPTION = \"\"\n    ARGS = ()\n    OPTARGS = ()\n\n    def __init__(self, service, port=0, status=event.Event.UP):\n        \"\"\"\n        type is the name of the handler (subclass)\n        service is a dict containing ip, sysname, netboxid, serviceid,\n        version and extra arguments to the handler\n        status defaults to up, but can be overridden.\n        \"\"\"\n        self.response_time = None\n        self._conf = config.serviceconf()\n        self.serviceid = service['id']\n        self.ip = service['ip']\n        self.netboxid = service['netboxid']\n        self.args = service['args']\n        self.version = service['version']\n        self._sysname = service['sysname']\n        # This is (and should be) used by all subclasses\n        self.port = int(service['args'].get('port', port))\n        self.status = status\n        self.timestamp = 0\n        timeout = self.args.get(\n            'timeout',\n            self._conf.get(\n                \"%s timeout\" % self.get_type(), self._conf.get('timeout', TIMEOUT)\n            ),\n        )\n        self.timeout = int(timeout)\n        self.db = db.db()\n        _logger.info(\"New checker instance for %s:%s \", self.sysname, self.get_type())\n        self.runcount = 0\n        self.runq = RunQueue.RunQueue()\n\n    def run(self):\n        \"\"\"\n        Calls execute_test(). If the status has changed it schedules a new\n        test. If the service has been unavailable for more than self.runcount\n        times, it marks the service as down.\n        \"\"\"\n        orig_version = self.version\n        status, info = self.execute_test()\n        service = \"%s:%s\" % (self.sysname, self.get_type())\n        _logger.info(\"%-20s -> %s\", service, info)\n\n        if status != self.status and (self.runcount < int(self._conf.get('retry', 3))):\n            delay = int(self._conf.get('retry delay', 5))\n            self.runcount += 1\n            _logger.info(\n                \"%-20s -> State changed. New check in %i sec. (%s, %s)\",\n                service,\n                delay,\n                status,\n                info,\n            )\n            # Update metrics every time to get proper 'uptime' for the service\n            self.update_stats()\n            priority = delay + time.time()\n            # Queue ourself\n            self.runq.enq((priority, self))\n            return\n\n        if status != self.status:\n            _logger.critical(\"%-20s -> %s, %s\", service, status, info)\n            new_event = event.Event(\n                self.serviceid,\n                self.netboxid,\n                None,  # deviceid\n                event.Event.serviceState,\n                \"serviceping\",\n                status,\n                info,\n            )\n\n            # Post to the NAV alertq\n            self.db.new_event(new_event)\n            self.status = status\n\n        if orig_version != self.version and self.status == event.Event.UP:\n            new_event = event.Event(\n                self.serviceid,\n                self.netboxid,\n                None,  # deviceid\n                \"version\",\n                \"serviceping\",\n                status,\n                info,\n                version=self.version,\n            )\n            self.db.new_event(new_event)\n        self.update_stats()\n        self.update_timestamp()\n        self.runcount = 0\n\n    def update_stats(self):\n        \"\"\"Send an updated metric to the Graphite backend\"\"\"\n        try:\n            statistics.update(\n                self.sysname,\n                'N',\n                self.status,\n                self.response_time,\n                self.serviceid,\n                self.get_type(),\n            )\n        except Exception as err:  # noqa: BLE001\n            service = \"%s:%s\" % (self.sysname, self.get_type())\n            _logger.error(\"statistics update failed for %s [%s]\", service, err)\n\n    def execute_test(self):\n        \"\"\"\n        Executes and times the test.\n        Calls self.execute() which should be overridden\n        by each subclass.\n        \"\"\"\n        start = time.time()\n        try:\n            status, info = self.execute()\n        except Exception as error:  # noqa: BLE001\n            status = event.Event.DOWN\n            info = str(error)\n        self.response_time = time.time() - start\n        return status, info\n\n    def execute(self):\n        \"\"\"Executes the actual service test implemented by a plugin\"\"\"\n        raise NotImplementedError\n\n    @property\n    def sysname(self):\n        \"\"\"Returns the sysname of which this service is running on.\n        If no sysname is specified, the ip address is returned.\"\"\"\n        if self._sysname:\n            return self._sysname\n        else:\n            return self.ip\n\n    @sysname.setter\n    def sysname(self, name):\n        \"\"\"Sets the sysname\"\"\"\n        self._sysname = name\n\n    def update_timestamp(self):\n        \"\"\"Updates the time of last check to the current time\"\"\"\n        self.timestamp = time.time()\n\n    @classmethod\n    def get_type(cls):\n        \"\"\"Returns the name of the handler.\"\"\"\n        suffix = \"checker\"\n        name = cls.__name__.lower()\n        name = name.removesuffix(suffix)\n        return name\n\n    def get_address(self):\n        \"\"\"Returns a tuple (ip, port)\"\"\"\n        return self.ip, self.port\n\n    def __eq__(self, obj):\n        return self.serviceid == getattr(\n            obj, 'serviceid', None\n        ) and self.args == getattr(obj, 'args', None)\n\n    def __lt__(self, obj):\n        return self.timestamp < getattr(obj, 'timestamp', None)\n\n    def __hash__(self):\n        tup = (self.serviceid, str(self.args), self.get_address())\n        return hash(tup)\n\n    def __repr__(self):\n        rep = '%i: %s %s %s' % (\n            self.serviceid,\n            self.get_type(),\n            self.get_address(),\n            self.args,\n        )\n        return rep.ljust(60) + self.status\n"
  },
  {
    "path": "python/nav/statemon/checker/DcChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Domain Controller service checker\"\"\"\n\nimport os\nimport subprocess\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\nfrom nav.util import which\n\n\nclass DcChecker(AbstractChecker):\n    \"\"\"Domain Controller\"\"\"\n\n    DESCRIPTION = \"Domain Controller\"\n    ARGS = (('username', ''),)\n\n    def execute(self):\n        username = self.args.get('username', '')\n        if not username:\n            return Event.DOWN, \"Missing required argument: username\"\n\n        ip, _port = self.get_address()\n\n        cmd = 'rpcclient'\n        cmdpath = which(cmd)\n        if not cmdpath:\n            return (\n                Event.DOWN,\n                'Command %s not found in %s' % (cmd, os.environ['PATH']),\n            )\n\n        try:\n            proc = subprocess.Popen(\n                [cmdpath, '-U', '%', '-c', 'lookupnames ' + username, ip],\n                stdout=subprocess.PIPE,\n                stderr=subprocess.PIPE,\n            )\n\n            proc.wait()\n        except OSError as msg:\n            return Event.DOWN, 'could not run rpcclient: %s' % msg\n\n        if proc.returncode != 0:\n            errline = proc.stdout.readline()\n            return (\n                Event.DOWN,\n                \"rpcclient returned %s: %s\" % (proc.returncode, errline),\n            )\n\n        output = proc.stdout.readlines()\n        lastline = output[-1]\n        if lastline.split()[0] == username:\n            return Event.UP, 'Ok'\n        else:\n            return Event.DOWN, lastline\n"
  },
  {
    "path": "python/nav/statemon/checker/DhcpChecker.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"DHCP service checker\"\"\"\n\nimport os\nimport subprocess\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\nfrom nav.util import which, is_setuid_root\n\n\nclass DhcpChecker(AbstractChecker):\n    \"\"\"DHCP\"\"\"\n\n    DESCRIPTION = \"DHCP\"\n    OPTARGS = (('timeout', ''),)\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=0, **kwargs)\n\n    def execute(self):\n        ip, _port = self.get_address()\n\n        cmd = 'dhcping'\n\n        path = which(cmd)\n        if not path:\n            return (\n                Event.DOWN,\n                'Command %s not found in %s' % (cmd, os.environ['PATH']),\n            )\n\n        if not is_setuid_root(path):\n            return Event.DOWN, '%s must be setuid root' % path\n\n        try:\n            proc = subprocess.Popen(\n                [\n                    path,\n                    '-i',  # Use inform packet so we don't have to be valid client\n                    '-s',\n                    ip,\n                    '-t',\n                    str(self.timeout),  # Timeout in seconds\n                ],\n                stdout=subprocess.PIPE,\n                stderr=subprocess.PIPE,\n            )\n            proc.wait()\n\n            proc.stdout.read()\n            stderr = proc.stderr.read()\n\n            if proc.returncode != 0:\n                return Event.DOWN, repr(stderr.strip())\n        except IOError as msg:\n            return Event.DOWN, 'Could not run dhcping: %s' % msg\n\n        return Event.UP, 'OK'\n"
  },
  {
    "path": "python/nav/statemon/checker/DnsChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"DNS service checker\"\"\"\n\nimport socket\n\nimport dns.exception\nimport dns.message\nimport dns.query\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass DnsChecker(AbstractChecker):\n    \"\"\"Domain Name Service\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Domain Name Service\"\n    ARGS = (('request', ''),)\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        \"\"\"Please note that this handler doesn't obey the port directive\"\"\"\n        AbstractChecker.__init__(self, service, port=42, **kwargs)\n\n    def execute(self):\n        ip, _port = self.get_address()\n        request = self.args.get(\"request\", \"\").strip()\n        timeout = False\n        error = False\n        if not request:\n            return Event.UP, \"Argument request must be supplied\"\n        else:\n            answer = \"\"\n            try:\n                query = dns.message.make_query(request, \"ANY\")\n                reply = dns.query.udp(query, ip, timeout=self.timeout)\n            except dns.exception.Timeout:\n                timeout = True\n                error = True\n            except socket.error:\n                error = True\n\n            if not error and reply.rcode() != dns.rcode.NOERROR:\n                error = True\n\n            if not error and reply.answer:\n                answer = 1\n            elif not error and not reply.answer:\n                answer = 0\n\n            # This breaks on windows dns servers and probably other not bind\n            # servers. We just put a exception handler around it, and ignore\n            # the resulting timeout.\n            try:\n                query = dns.message.make_query(\n                    \"version.bind\", rdclass=\"CH\", rdtype='txt'\n                )\n                response = dns.query.udp(query, ip, timeout=self.timeout)\n                if response.rcode() == dns.rcode.NOERROR and len(response.answer) > 1:\n                    self.version = response.answer[0][0]\n            except dns.exception.Timeout:\n                pass\n\n            if not error and answer == 1:\n                return Event.UP, \"Ok\"\n            elif not error and answer == 0:\n                return Event.UP, \"No record found, request=%s\" % request\n            elif error and not timeout:\n                return Event.DOWN, \"Other error while requesting %s\" % request\n            else:\n                return Event.DOWN, \"Timeout while requesting %s\" % request\n"
  },
  {
    "path": "python/nav/statemon/checker/DummyChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Dummy service checker: It will always report a success status\"\"\"\n\nfrom nav.daemon import safesleep as sleep\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass DummyChecker(AbstractChecker):\n    \"\"\"Dummy\"\"\"\n\n    IPV6_SUPPORT = True\n\n    def execute(self):\n        import random\n\n        sleep(random.random() * 10)\n        return Event.UP, 'OK'\n"
  },
  {
    "path": "python/nav/statemon/checker/FtpChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"FTP Service Checker\"\"\"\n\nimport contextlib\nfrom ftplib import FTP\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass FtpChecker(AbstractChecker):\n    \"\"\"File Transfer Protocol\"\"\"\n\n    DESCRIPTION = \"FTP\"\n    OPTARGS = (\n        ('username', ''),\n        ('password', ''),\n        ('path', ''),\n    )\n    IPV6_SUPPORT = True\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=0, **kwargs)\n\n    def execute(self):\n        with contextlib.closing(FTP(timeout=self.timeout)) as session:\n            ip, port = self.get_address()\n            welcome = session.connect(ip, port or 21)\n\n            # This cannot happen on Linux (debian)\n            # A bug has been reported on FreeBSD so we CYA\n            if isinstance(welcome, bytes):\n                welcome = welcome.decode('utf-8', 'replace')\n\n            # Get server version from the banner.\n            version = ''\n            for line in welcome.split('\\n'):\n                if line.startswith('220 '):\n                    version = line.removeprefix('220 ').strip()\n            self.version = version\n\n            username = self.args.get('username', '')\n            password = self.args.get('password', '')\n            path = self.args.get('path', '')\n            output = session.login(username, password, path)\n\n            if output[:3] == '230':\n                return Event.UP, 'code 230'\n            else:\n                return Event.DOWN, output.split('\\n')[0]\n"
  },
  {
    "path": "python/nav/statemon/checker/HttpChecker.py",
    "content": "#\n# Copyright (C) 2018, 2020 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"HTTP Service Checker\"\"\"\n\nimport contextlib\nimport socket\nimport base64\nimport http.client\n\nfrom urllib.parse import urlsplit\n\nfrom nav import buildconf\nfrom nav.statemon.event import Event\nfrom nav.statemon.abstractchecker import AbstractChecker\n\n\nclass HTTPConnection(http.client.HTTPConnection):\n    \"\"\"Customized HTTP protocol interface\"\"\"\n\n    def __init__(self, timeout, host, port=80):\n        http.client.HTTPConnection.__init__(self, host, port)\n        self.timeout = timeout\n        self.connect()\n\n    def connect(self):\n        self.sock = socket.create_connection((self.host, self.port), self.timeout)\n\n\nclass HttpChecker(AbstractChecker):\n    \"\"\"HTTP\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"HTTP\"\n    OPTARGS = (\n        ('url', ''),\n        ('username', ''),\n        ('password', ''),\n        ('port', ''),\n        ('timeout', ''),\n    )\n    PORT = 80\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=0, **kwargs)\n\n    def connect(self, ip, port):\n        return HTTPConnection(self.timeout, ip, port)\n\n    def execute(self):\n        ip, port = self.get_address()\n        url = self.args.get('url', '/')\n        username = self.args.get('username')\n        password = self.args.get('password', '')\n        _protocol, vhost, path, query, _fragment = urlsplit(url)\n        if ':' in vhost:\n            vhost, port = vhost.split(':', 1)\n            port = int(port)\n\n        with contextlib.closing(self.connect(ip, port or self.PORT)) as i:\n            if vhost:\n                i.host = vhost\n\n            if '?' in url:\n                path = path + '?' + query\n            i.putrequest('GET', path)\n            i.putheader('User-Agent', 'NAV/servicemon; version %s' % buildconf.VERSION)\n            if username:\n                auth = \"{}:{}\".format(username, password).encode(\"utf-8\")\n                auth = base64.b64encode(auth).decode(\"utf-8\")\n                i.putheader(\"Authorization\", \"Basic {}\".format(auth))\n            i.endheaders()\n            response = i.getresponse()\n            if 200 <= response.status < 400 or (\n                response.status == 401 and not username\n            ):\n                status = Event.UP\n                version = response.getheader('SERVER')\n                self.version = version\n                info = 'OK (%s) %s' % (str(response.status), version)\n            else:\n                status = Event.DOWN\n                info = 'ERROR (%s) %s' % (str(response.status), url)\n\n            return status, info\n"
  },
  {
    "path": "python/nav/statemon/checker/HttpsChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"HTTPS Service checker\"\"\"\n\nimport http.client\nimport socket\n\nfrom ssl import wrap_socket\n\nfrom nav.statemon.checker.HttpChecker import HttpChecker\n\n\nclass HTTPSConnection(http.client.HTTPSConnection):\n    \"\"\"Customized HTTPS protocol interface\"\"\"\n\n    def __init__(self, timeout, host, port=443):\n        http.client.HTTPSConnection.__init__(self, host, port)\n        self.timeout = timeout\n        self.connect()\n\n    def connect(self):\n        self.sock = socket.create_connection((self.host, self.port), self.timeout)\n        self.sock = wrap_socket(self.sock)\n\n\nclass HttpsChecker(HttpChecker):\n    \"\"\"HTTPS\"\"\"\n\n    PORT = 443\n\n    def connect(self, ip, port):\n        return HTTPSConnection(self.timeout, ip, port)\n"
  },
  {
    "path": "python/nav/statemon/checker/ImapChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"IMAP service checker\"\"\"\n\nimport contextlib\nimport socket\nimport imaplib\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass IMAPConnection(imaplib.IMAP4):\n    \"\"\"Customized IMAP protocol interface\"\"\"\n\n    def __init__(self, timeout, host, port):\n        self.timeout = timeout\n        imaplib.IMAP4.__init__(self, host, port)\n\n    def open(self, host, port):\n        self.sock = socket.create_connection((host, port), self.timeout)\n        self.file = self.sock.makefile(\"rb\")\n\n\nclass ImapChecker(AbstractChecker):\n    \"\"\"\n    Valid arguments:\n    port\n    username\n    password\n    \"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Internet mail application protocol\"\n    ARGS = (\n        ('username', ''),\n        ('password', ''),\n    )\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=143, **kwargs)\n\n    def execute(self):\n        user = self.args.get(\"username\", \"\")\n        ip, port = self.get_address()\n        passwd = self.args.get(\"password\", \"\")\n        with contextlib.closing(IMAPConnection(self.timeout, ip, port)) as session:\n            ver = session.welcome\n            if user:\n                session.login(user, passwd)\n                session.logout()\n            version = ''\n            ver = ver.split(' ')\n            if len(ver) >= 2:\n                for i in ver[2:]:\n                    if i != \"at\":\n                        version += \"%s \" % i\n                    else:\n                        break\n            self.version = version\n\n            return Event.UP, version\n"
  },
  {
    "path": "python/nav/statemon/checker/ImapsChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"IMAP over SSL service checker\"\"\"\n\nimport contextlib\nimport socket\nimport imaplib\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass ImapsChecker(AbstractChecker):\n    \"\"\"Internet mail application protocol (ssl)\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Internet mail application protocol (ssl)\"\n    ARGS = (\n        ('username', ''),\n        ('password', ''),\n    )\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=993, **kwargs)\n\n    def execute(self):\n        user = self.args.get(\"username\", \"\")\n        ip, port = self.get_address()\n        passwd = self.args.get(\"password\", \"\")\n        with contextlib.closing(IMAPSConnection(self.timeout, ip, port)) as session:\n            ver = session.welcome\n            if user:\n                session.login(user, passwd)\n                session.logout()\n            version = ''\n            ver = ver.split(' ')\n            if len(ver) >= 2:\n                for i in ver[2:]:\n                    if i != \"at\":\n                        version += \"%s \" % i\n                    else:\n                        break\n            self.version = version\n\n            return Event.UP, version\n\n\nclass IMAPSConnection(imaplib.IMAP4):\n    \"\"\"IMAP4 client class over SSL connection\n\n    Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile]]]])\n\n            host - host's name (default: localhost);\n            port - port number (default: standard IMAP4 SSL port).\n            keyfile - PEM formatted file that contains your private key\n                      (default: None);\n            certfile - PEM formatted certificate chain file (default: None);\n\n    for more documentation see the docstring of the parent class IMAP4.\n    \"\"\"\n\n    def __init__(self, timeout, host='', port=993, keyfile=None, certfile=None):\n        self.keyfile = keyfile\n        self.certfile = certfile\n        self.timeout = timeout\n        self.sslobj = None\n        imaplib.IMAP4.__init__(self, host, port)\n\n    def open(self, host, port):\n        \"\"\"Setup connection to remote server on \"host:port\".\n            (default: localhost:standard IMAP4 SSL port).\n        This connection will be used by the routines:\n            read, readline, send, shutdown.\n        \"\"\"\n        self.host = host\n        self.port = port\n        self.sock = socket.create_connection((host, port))\n        self.sslobj = socket.ssl(self.sock, self.keyfile, self.certfile)\n\n    def read(self, size):\n        \"\"\"Read 'size' bytes from remote.\"\"\"\n        # sslobj.read() sometimes returns < size bytes\n        data = self.sslobj.read(size)\n        while len(data) < size:\n            data += self.sslobj.read(size - len(data))\n\n        return data\n\n    def readline(self):\n        \"\"\"Read line from remote.\"\"\"\n        # socket.ssl really needs a \"readline\" method, or perhaps a \"makefile\"\n        # method.\n        line = \"\"\n        while 1:\n            char = self.sslobj.read(1)\n            line += char\n            if char == \"\\n\":\n                return line\n\n    def send(self, data):\n        \"\"\"Send data to remote.\"\"\"\n        # NB: socket.ssl needs a \"sendall\" method to match socket objects.\n        bytecount = len(data)\n        while bytecount > 0:\n            sent = self.sslobj.write(data)\n            if sent == bytecount:\n                break  # avoid copy\n            data = data[sent:]\n            bytecount = bytecount - sent\n\n    def shutdown(self):\n        \"\"\"Close I/O established in \"open\".\"\"\"\n        self.sock.close()\n\n    def socket(self):\n        \"\"\"Return socket instance used to connect to IMAP4 server.\n\n        socket = <instance>.socket()\n        \"\"\"\n        return self.sock\n\n    def ssl(self):\n        \"\"\"Return SSLObject instance used to communicate with the IMAP4 server.\n\n        ssl = <instance>.socket.ssl()\n        \"\"\"\n        return self.sslobj\n"
  },
  {
    "path": "python/nav/statemon/checker/LdapChecker.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"LDAP service checker\"\"\"\n\nfrom IPy import IP\nimport ldap\nimport ldapurl\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass LdapChecker(AbstractChecker):\n    \"\"\"LDAP\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"LDAP\"\n    OPTARGS = (\n        (\n            'url',\n            \"LDAP connection URL that will override the host's IP address\"\n            \" and the default port number 389. Example: ldap://myserver\"\n            \".example.org:389/\",\n        ),\n        ('base', \"The LDAP server's base DN. Default is dc=example,dc=org\"),\n        ('scope', \"One of BASE, ONELEVEL, SUBTREE\"),\n        ('filter', \"An LDAP search filter. Example: cn=monitor\"),\n        ('version', \"Which LDAP protocol version, 2 or 3. Default is 3.\"),\n        ('username', \"A specific username to bind as\"),\n        ('password', \"The password to use when binding with a username\"),\n        ('port', \"The TCP port of the LDAP server. 389 is the default.\"),\n        ('timeout', \"A response timeout in seconds.\"),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=389, **kwargs)\n\n    def execute(self):\n        args = self.args\n        # we can connect in 2 ways. By hostname/ip (and portnumber)\n        # or by ldap-uri\n        if \"url\" in args and ldapurl.isLDAPUrl(args[\"url\"]):\n            conn = ldap.initialize(args[\"url\"])\n        else:\n            ip, port = self.get_address()\n            conn = ldap.initialize(\"ldap://%s:%s\" % (ip, port))\n        try:\n            username = args.get(\"username\", \"\")\n            password = args.get(\"password\", \"\")\n            conn.simple_bind(username, password)\n\n            try:\n                self._set_version(args, conn)\n            except ValueError:\n                return Event.DOWN, \"unsupported protocol version\"\n\n            base = args.get(\"base\", \"dc=example,dc=org\")\n            if base == \"cn=monitor\":\n                my_res = conn.search_st(base, ldap.SCOPE_BASE, timeout=self.timeout)\n                versionstr = str(my_res[0][-1]['description'][0])\n                self.version = versionstr\n                return Event.UP, versionstr\n            scope = args.get(\"scope\", \"SUBTREE\").upper()\n            if scope == \"BASE\":\n                scope = ldap.SCOPE_BASE\n            elif scope == \"ONELEVEL\":\n                scope = ldap.SCOPE_ONELEVEL\n            else:\n                scope = ldap.SCOPE_SUBTREE\n            filtr = args.get(\"filter\", \"objectClass=*\")\n            try:\n                conn.search_ext_s(base, scope, filterstr=filtr, timeout=self.timeout)\n            except Exception as err:  # noqa: BLE001\n                return (\n                    Event.DOWN,\n                    \"Failed ldapSearch on %s for %s: %s\"\n                    % (self.get_address(), filtr, str(err)),\n                )\n        finally:\n            try:\n                conn.unbind()\n            except Exception:  # noqa: BLE001\n                pass\n\n        return Event.UP, \"Ok\"\n\n    @staticmethod\n    def _set_version(args, conn):\n        if \"version\" in args:\n            version = int(args[\"version\"])\n            if version == 2:\n                conn.protocol_version = ldap.VERSION2\n            elif version == 3:\n                conn.protocol_version = ldap.VERSION3\n            else:\n                raise ValueError(\"Unsupported protocol version %s\" % version)\n        else:\n            # default is protocol-version 3\n            conn.protocol_version = ldap.VERSION3\n\n    def get_address(self):\n        ip, port = AbstractChecker.get_address(self)\n        addr = IP(ip)\n        if addr.version() == 6:\n            ip = '[%s]' % ip\n        return ip, port\n"
  },
  {
    "path": "python/nav/statemon/checker/MysqlChecker.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018, 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A MySQL service checker\"\"\"\n\nimport socket\nimport struct\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass MysqlChecker(AbstractChecker):\n    \"\"\"MySQL\"\"\"\n\n    IPV6_SUPPORT = True\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=3306, **kwargs)\n\n    def execute(self):\n        conn = None\n        try:\n            #\n            # Connect and read handshake packet.\n            #\n            conn = MysqlConnection(self.get_address(), self.timeout)\n            data = conn.read_packet()\n\n            #\n            # Get server version from handshake\n            #\n            version = data[1:].split(b'\\x00')[0]  # Null terminated string\n            self.version = version.decode(\"utf-8\")\n\n            #\n            # Send authentication packet to make server happy.\n            # (If we don't do this, the server will be angry at\n            # us for a while.)\n            #\n            conn.write_auth_packet('navmon')\n            try:\n                conn.read_packet()\n            except MysqlError:\n                pass  # Ignore login error\n\n            return Event.UP, 'OK'\n\n        except (MysqlError, socket.timeout) as err:\n            return Event.DOWN, str(err)\n\n        finally:\n            try:\n                conn.close()\n            except Exception:  # noqa: BLE001\n                pass\n\n\nclass MysqlConnection(object):\n    \"\"\"Very minimal implementation of MySQL protocol. (Packet layer only.)\n\n    Error messages from the server raise MysqlError exceptions.\n\n    \"\"\"\n\n    def __init__(self, addr, timeout=None):\n        host, _port = addr\n        sock = socket.create_connection(addr, timeout)\n        self.file = sock.makefile('rwb')\n\n        self.seqno = 0\n\n    def read_packet(self):\n        header = self.file.read(4)\n\n        lll, mmm, hhh, seqno = struct.unpack('BBBB', header)\n        size = hhh << 16 | mmm << 8 | lll\n\n        self.seqno = seqno\n\n        data = self.file.read(size)\n        if data.startswith(b'\\xff'):\n            error = data.removeprefix(b'\\xff').decode(\"utf-8\")\n            raise MysqlError(error)\n\n        return data\n\n    def write_packet(self, data):\n        size = len(data)\n        lll = size >> 16\n        mmm = (size >> 8) & 0xFF\n        hhh = size & 0xFF\n        seqno = self.seqno = (self.seqno + 1) % 256\n\n        header = struct.pack(\"BBBB\", hhh, mmm, lll, seqno)\n\n        self.file.write(header + data)\n        self.file.flush()\n\n    def write_auth_packet(self, username):\n        data = b'\\x85\\xa4\\x00\\x00\\x00%s\\x00\\x00' % username.encode(\"utf-8\")\n        self.write_packet(data)\n\n    def close(self):\n        self.write_packet(b'\\x01')  # Send COM_QUIT\n        self.file.close()\n\n\nclass MysqlError(Exception):\n    pass\n"
  },
  {
    "path": "python/nav/statemon/checker/OracleChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Oracle database service checker\"\"\"\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\nimport cx_Oracle\n\n\nclass OracleChecker(AbstractChecker):\n    \"\"\"\n\n    Description:\n    ------------\n    This checker tries to connect to a given Oracle database.\n\n    The checker relies on that the neccesary Oracle software have been\n    installed and that the following Oracle environment variables\n    have been set:\n\n    - $ORACLE_HOME\n    - $NLS_LANG\n\n\n    Arguments:\n    ----------\n    hostname: Accessible from self.get_address() as pure FQDN hostname\n    port    : Remote tcp-port where Oracle Listener is living. Default is 1521.\n    sid     : Database SID\n    username: An Oracle database account with the following permissions:\n              - CREATE SESSION\n              - ALTER SESSION\n              - select on sys.v_$instance\n    password: Password for the Oracle database account.\n\n\n    Return values:\n    --------------\n    Succesful connection:\n        return Event.UP, \"Oracle \" + version\n    Failure to connect:\n        return Event.DOWN, str(sys.exc_value)\n\n    \"\"\"\n\n    DESCRIPTION = \"Oracle database\"\n    OPTARGS = (\n        ('port', ''),\n        ('sid', ''),\n        ('username', ''),\n        ('password', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=1521, **kwargs)\n\n    def execute(self):\n        user = self.args.get(\"username\", \"\")\n        ip, port = self.get_address()\n        passwd = self.args.get(\"password\", \"\")\n        sid = self.args.get(\"sid\", \"\")\n        connect_string = (\n            \"%s/%s@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(\"\n            \"COMMUNITY=TCP)(PROTOCOL=TCP)(Host=%s)(Port=%s)))(\"\n            \"CONNECT_DATA=(SID=%s)(GLOBAL_NAME=%s)))\"\n        ) % (user, passwd, ip, port, sid, sid)\n        print(\"Connecting with: %s\" % connect_string)\n        try:\n            connection = cx_Oracle.connect(connect_string)\n            cursor = connection.cursor()\n            cursor.arraysize = 50\n            cursor.execute(\n                \"\"\"\n                select version\n                from sys.v_$instance\"\"\"\n            )\n            row = cursor.fetchone()\n            version = row[0]\n        except Exception as err:  # noqa: BLE001\n            return Event.DOWN, str(err)\n        finally:\n            connection.close()\n        return Event.UP, \"Oracle \" + version\n"
  },
  {
    "path": "python/nav/statemon/checker/Pop3Checker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"POP3 service checker\"\"\"\n\nimport socket\nimport poplib\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass Pop3Checker(AbstractChecker):\n    \"\"\"Post office protocol\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Post office protocol\"\n    ARGS = (\n        ('username', ''),\n        ('password', ''),\n    )\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=110, **kwargs)\n\n    def execute(self):\n        user = self.args.get(\"username\", \"\")\n        passwd = self.args.get(\"password\", \"\")\n        ip, port = self.get_address()\n        conn = PopConnection(self.timeout, ip, port)\n        try:\n            ver = conn.getwelcome()\n            if user:\n                conn.user(user)\n                conn.pass_(passwd)\n                len(conn.list()[1])\n            version = ''\n            ver = ver.split(' ')\n            if len(ver) >= 1:\n                for i in ver[1:]:\n                    if i != \"server\":\n                        version += \"%s \" % i\n                    else:\n                        break\n            self.version = version\n        finally:\n            conn.quit()\n\n        return Event.UP, version\n\n\nclass PopConnection(poplib.POP3):\n    \"\"\"Customized POP3 protocol interface\"\"\"\n\n    def __init__(self, timeout, ip, port):\n        self.ip = ip\n        self.port = port\n        self.sock = socket.create_connection((self.ip, self.port), timeout)\n        self.file = self.sock.makefile('rb')\n        self._debugging = 0\n        self.welcome = self._getresp()\n"
  },
  {
    "path": "python/nav/statemon/checker/PortChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Simple TCP port service checker\"\"\"\n\nimport select\nimport socket\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass PortChecker(AbstractChecker):\n    \"\"\"Generic TCP port checker\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Generic port checker\"\n    ARGS = (('port', ''),)\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=23, **kwargs)\n\n    def execute(self):\n        sock = socket.create_connection(self.get_address(), self.timeout)\n        sockfile = sock.makefile('r')\n        _readable, __w, __x = select.select([sock], [], [], self.timeout)\n        if _readable:\n            sockfile.readline()\n        status = Event.UP\n        txt = 'Alive'\n        sock.close()\n\n        return status, txt\n"
  },
  {
    "path": "python/nav/statemon/checker/PostgresqlChecker.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"PostgreSQL service checker\"\"\"\n\nimport psycopg2\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass PostgresqlChecker(AbstractChecker):\n    \"\"\"PostgreSQL\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"PostgreSQL\"\n    ARGS = (\n        ('user', ''),\n        ('password', ''),\n    )\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n        ('database', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=5432, **kwargs)\n\n    def execute(self):\n        kwargs = {}\n\n        # Build keywords from arguments\n        for name, value in self.args.items():\n            if name in ('user', 'password', 'database'):\n                # Must convert to str here because psycopg2 complains\n                # if keywords are unicode. (\"Keywords must be strings\")\n                kwargs[str(name)] = value\n\n        (kwargs['host'], kwargs['port']) = self.get_address()\n\n        try:\n            psycopg2.connect(**kwargs)\n        except Exception as err:  # noqa: BLE001\n            # Get first line of exception message\n            msg = str(err).split('\\n')[0]\n            return Event.DOWN, msg\n\n        return Event.UP, 'alive'\n"
  },
  {
    "path": "python/nav/statemon/checker/RadiusChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"RADIUS service checker\"\"\"\n\nfrom nav.util import resource_filename\n\n# Python-radius specific modules. pyrad found at\n# http://www.wiggy.net/code/pyrad/ by Wichert Akkermann\nimport pyrad.packet\nfrom pyrad.client import Client\nfrom pyrad.dictionary import Dictionary\n\n# NAV ServiceMonitor-modules\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nDEFAULT_DICTIONARY = resource_filename(\n    'nav.statemon.checker', 'radius/dictionary.rfc2865'\n)\n\n\nclass RadiusChecker(AbstractChecker):\n    \"\"\"\n    Radius Monitor-client.\n\n    Handles Radius-servers. It tries to authenticate like for example any\n    VPN-concentrator from Cisco would.\n\n    Future enhancements would be to check if we get a certain attribute\n    back from the server, and what the value of that attribute would be.\n    For now, we just connect and authenticate to radius.\n\n    Arguments:\n    ----------\n    hostname  : Accessible from self.get_address() as pure FQDN hostname\n    port      : Remote udp-port where radius authentication is living.\n                Port 1812 is default for authentication.\n    username  : A valid radius-username\n    password  : Clear-text password associated with the username above.\n    identifier: Each \"client-source\" connects to radius with a given\n                identity and secret.\n    rad_secret: Password associated with 'identifier'\n    dictionary: Path to filename which holds the dictionary for this\n                radius-daemon. The default-dictionary can be used, or\n                a specific dictionary for a specific implementation\n                of the radius-server.\n\n    Return values:\n    --------------\n    Successful connection:\n        return Event.UP, \"Radius: \" + version/implementation (if we find it)\n    Failure to connect:\n        return Event.DOWN, str(sys.exc_value)\n    \"\"\"\n\n    # TODO: Check for IPv6 compatibility in pyrad\n    DESCRIPTION = \"RADIUS\"\n    ARGS = ()\n    OPTARGS = (\n        ('username', 'A valid RADIUS username'),\n        ('password', 'Clear-text password for username'),\n        ('identifier', \"This client's RADIUS identifier\"),\n        ('secret', 'A RADIUS secret for this client'),\n        (\n            'dictionary',\n            'Full path to a file containing an optional dictionary file for '\n            'this radius server',\n        ),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=1812, **kwargs)\n\n    def execute(self):\n        args = self.args\n        try:\n            username = args.get(\"username\", \"\")\n            password = args.get(\"password\", \"\")\n            rad_secret = args.get(\"secret\", \"\").encode(\"utf-8\")\n            identifier = args.get(\"identifier\", \"\")\n            dictionary = args.get(\"dictionary\", DEFAULT_DICTIONARY)\n            ip, _port = self.get_address()\n            srv = Client(server=ip, secret=rad_secret, dict=Dictionary(dictionary))\n            req = srv.CreateAuthPacket(\n                code=pyrad.packet.AccessRequest,\n                User_Name=username,\n                NAS_Identifier=identifier,\n            )\n            req[\"User-Password\"] = req.PwCrypt(password)\n            srv.SendPacket(req)\n        except Exception as err:  # noqa: BLE001\n            return (\n                Event.DOWN,\n                \"Failed connecting to %s: %s)\" % (self.get_address(), str(err)),\n            )\n        version = \"FreeRadius 1.0\"  # Fetch from radiusmonitor later.\n        self.version = version\n        return Event.UP, \"Radius: \" + version\n"
  },
  {
    "path": "python/nav/statemon/checker/RpcChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"RPC portmapper service checker\"\"\"\n\nimport os\nimport subprocess\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\nfrom nav.util import which\n\n\nclass RpcChecker(AbstractChecker):\n    \"\"\"RPC portmapper\"\"\"\n\n    DESCRIPTION = \"RPC portmapper\"\n    OPTARGS = (\n        (\n            'required',\n            'A comma separated list of require services. Example: nfs,nlockmgr',\n        ),\n    )\n\n    def __init__(self, service, **kwargs):\n        \"\"\"This handler doesn't obey the port argument\"\"\"\n        AbstractChecker.__init__(self, service, port=111, **kwargs)\n\n    def execute(self):\n        # map service to t=tcp or u=udp\n        mapper = {\n            'nfs': 't',\n            'status': 't',\n            'nlockmgr': 'u',\n            'mountd': 't',\n            'ypserv': 'u',\n            'ypbind': 'u',\n        }\n        default = ['nfs', 'nlockmgr', 'mountd', 'status']\n        required = self.args.get('required', '')\n        if not required:\n            required = default\n        else:\n            required = required.split(',')\n\n        cmd = 'rpcinfo'\n        cmdpath = which(cmd)\n        if not cmdpath:\n            return (\n                Event.DOWN,\n                'Command %s not found in %s' % (cmd, os.environ['PATH']),\n            )\n\n        ip, _port = self.get_address()\n        for service in required:\n            protocol = mapper.get(service, '')\n            if not protocol:\n                return (\n                    Event.DOWN,\n                    \"Unknown argument: [%s], can only check \"\n                    \"%s\" % (service, str(mapper.keys())),\n                )\n\n            try:\n                proc = subprocess.Popen(\n                    [cmdpath, '-' + protocol, ip, service],\n                    stdout=subprocess.PIPE,\n                    stderr=subprocess.PIPE,\n                )\n                proc.wait()\n            except OSError as msg:\n                return Event.DOWN, 'could not run rpcinfo: %s' % msg\n\n            output = proc.stdout.read()\n            if 'ready' in output:\n                continue\n            if 'not available' in output:\n                return Event.DOWN, '%s not available' % service\n            if not output:\n                return Event.DOWN, 'rpcinfo timed out'\n\n        return Event.UP, \"Ok\"\n"
  },
  {
    "path": "python/nav/statemon/checker/SmbChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Samba/CIFS service checker\"\"\"\n\nimport os\nimport re\nimport subprocess\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\nfrom nav.util import which\n\nSMBCLIENT = 'smbclient'\nSMBCLIENT_PATTERN = re.compile(\n    r'domain=\\[[^\\]]+\\] os=\\[([^\\]]+)\\] server=\\[([^\\]]+)\\]', re.I\n)\n\n\nclass SmbChecker(AbstractChecker):\n    \"\"\"Windows file sharing\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Windows file sharing\"\n    OPTARGS = (\n        ('hostname', ''),\n        ('username', ''),\n        ('password', ''),\n        ('workgroup', ''),\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=139, **kwargs)\n\n    def execute(self):\n        ip, port = self.get_address()\n        args = self.args\n        host = args.get('hostname', ip)\n        username = args.get('username', '')\n        password = args.get('password', '')\n        workgroup = args.get('workgroup', '')\n\n        cmdpath = which(SMBCLIENT)\n        if not cmdpath:\n            return (\n                Event.DOWN,\n                'Command %s not found in %s' % (SMBCLIENT, os.environ['PATH']),\n            )\n\n        args = [cmdpath, '-L', host, '-p', str(port)]\n\n        if password and username:\n            args += ['-U', username + '%' + password]\n            if workgroup:\n                args += ['-W', workgroup]\n        else:\n            args += ['-N']\n\n        try:\n            proc = subprocess.Popen(\n                args, stdout=subprocess.PIPE, stderr=subprocess.PIPE\n            )\n            proc.wait()\n        except IOError as msg:\n            return Event.DOWN, 'could not run smbclient: %s' % msg\n\n        output = proc.stdout.read()\n        errput = proc.stderr.read()\n\n        match = SMBCLIENT_PATTERN.search(output) or SMBCLIENT_PATTERN.search(errput)\n        if match:\n            version = ' '.join(match.groups())\n            self.version = version\n            return Event.UP, 'OK'\n        else:\n            return Event.DOWN, 'error %s' % output.strip().split('\\n')[-1]\n"
  },
  {
    "path": "python/nav/statemon/checker/SmtpChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SMTP service checker\"\"\"\n\nimport re\nimport socket\nimport smtplib\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass SmtpChecker(AbstractChecker):\n    \"\"\"SMTP\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Simple mail transport protocol\"\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    VERSION_PATTERN = re.compile(r'([^;,#]+)')\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=25, **kwargs)\n\n    def execute(self):\n        ip, port = self.get_address()\n        smtp = SMTP(self.timeout)\n        code, msg = smtp.connect(ip, port)\n        msg = msg.decode(\"utf-8\")\n        try:\n            smtp.quit()\n        except smtplib.SMTPException:\n            pass\n        if code != 220:\n            return Event.DOWN, msg\n        try:\n            _domain, version = msg.strip().split(' ', 1)\n        except ValueError:\n            version = ''\n        match = self.VERSION_PATTERN.match(version)\n        if match:\n            version = match.group(0)\n        self.version = version\n        return Event.UP, msg\n\n\nclass SMTP(smtplib.SMTP):\n    \"\"\"A customized SMTP protocol interface\"\"\"\n\n    def __init__(self, timeout, host='', port=25):\n        self._timeout = timeout  # _ to avoid name collision with superclass\n        smtplib.SMTP.__init__(self, host, port)\n\n    def connect(self, host='localhost', port=25):\n        self.sock = socket.create_connection((host, port), self._timeout)\n        return self.getreply()\n"
  },
  {
    "path": "python/nav/statemon/checker/SshChecker.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SSH service checker\"\"\"\n\nimport socket\n\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.statemon.event import Event\n\n\nclass SshChecker(AbstractChecker):\n    \"\"\"Checks for SSH availability\"\"\"\n\n    IPV6_SUPPORT = True\n    DESCRIPTION = \"Secure shell server\"\n    OPTARGS = (\n        ('port', ''),\n        ('timeout', ''),\n    )\n\n    def __init__(self, service, **kwargs):\n        AbstractChecker.__init__(self, service, port=22, **kwargs)\n\n    def execute(self):\n        (hostname, port) = self.get_address()\n        try:\n            sock = socket.create_connection((hostname, port), self.timeout)\n            stream = sock.makefile('rw')\n            version = stream.readline().strip()\n            protocol, major = version.split('-')[:2]\n            stream.write(\"%s-%s-%s\\r\\n\" % (protocol, major, \"NAV_Servicemon\"))\n            stream.flush()\n        except Exception as err:  # noqa: BLE001\n            return (\n                Event.DOWN,\n                \"Failed to send version reply to %s: %s\"\n                % (self.get_address(), str(err)),\n            )\n        finally:\n            try:\n                sock.close()\n            except UnboundLocalError:\n                pass  # sock was never created\n        self.version = version\n        return Event.UP, version\n"
  },
  {
    "path": "python/nav/statemon/checker/__init__.py",
    "content": "\"\"\"statemon service checker modules.\"\"\"\n"
  },
  {
    "path": "python/nav/statemon/checker/radius/dictionary.rfc2865",
    "content": "# -*- text -*-\n#\n#\tAttributes and values defined in RFC 2865.\n#\thttp://www.ietf.org/rfc/rfc2865.txt\n#\n#\t$Id$\n#\nATTRIBUTE\tUser-Name\t\t\t\t1\tstring\nATTRIBUTE\tUser-Password\t\t\t\t2\tstring encrypt=1\nATTRIBUTE\tCHAP-Password\t\t\t\t3\toctets\nATTRIBUTE\tNAS-IP-Address\t\t\t\t4\tipaddr\nATTRIBUTE\tNAS-Port\t\t\t\t5\tinteger\nATTRIBUTE\tService-Type\t\t\t\t6\tinteger\nATTRIBUTE\tFramed-Protocol\t\t\t\t7\tinteger\nATTRIBUTE\tFramed-IP-Address\t\t\t8\tipaddr\nATTRIBUTE\tFramed-IP-Netmask\t\t\t9\tipaddr\nATTRIBUTE\tFramed-Routing\t\t\t\t10\tinteger\nATTRIBUTE\tFilter-Id\t\t\t\t11\tstring\nATTRIBUTE\tFramed-MTU\t\t\t\t12\tinteger\nATTRIBUTE\tFramed-Compression\t\t\t13\tinteger\nATTRIBUTE\tLogin-IP-Host\t\t\t\t14\tipaddr\nATTRIBUTE\tLogin-Service\t\t\t\t15\tinteger\nATTRIBUTE\tLogin-TCP-Port\t\t\t\t16\tinteger\n# Attribute 17 is undefined\nATTRIBUTE\tReply-Message\t\t\t\t18\tstring\nATTRIBUTE\tCallback-Number\t\t\t\t19\tstring\nATTRIBUTE\tCallback-Id\t\t\t\t20\tstring\n# Attribute 21 is undefined\nATTRIBUTE\tFramed-Route\t\t\t\t22\tstring\nATTRIBUTE\tFramed-IPX-Network\t\t\t23\tipaddr\nATTRIBUTE\tState\t\t\t\t\t24\toctets\nATTRIBUTE\tClass\t\t\t\t\t25\toctets\nATTRIBUTE\tVendor-Specific\t\t\t\t26\toctets\nATTRIBUTE\tSession-Timeout\t\t\t\t27\tinteger\nATTRIBUTE\tIdle-Timeout\t\t\t\t28\tinteger\nATTRIBUTE\tTermination-Action\t\t\t29\tinteger\nATTRIBUTE\tCalled-Station-Id\t\t\t30\tstring\nATTRIBUTE\tCalling-Station-Id\t\t\t31\tstring\nATTRIBUTE\tNAS-Identifier\t\t\t\t32\tstring\nATTRIBUTE\tProxy-State\t\t\t\t33\toctets\nATTRIBUTE\tLogin-LAT-Service\t\t\t34\tstring\nATTRIBUTE\tLogin-LAT-Node\t\t\t\t35\tstring\nATTRIBUTE\tLogin-LAT-Group\t\t\t\t36\toctets\nATTRIBUTE\tFramed-AppleTalk-Link\t\t\t37\tinteger\nATTRIBUTE\tFramed-AppleTalk-Network\t\t38\tinteger\nATTRIBUTE\tFramed-AppleTalk-Zone\t\t\t39\tstring\n\nATTRIBUTE\tCHAP-Challenge\t\t\t\t60\toctets\nATTRIBUTE\tNAS-Port-Type\t\t\t\t61\tinteger\nATTRIBUTE\tPort-Limit\t\t\t\t62\tinteger\nATTRIBUTE\tLogin-LAT-Port\t\t\t\t63\tstring\n\n#\n#\tInteger Translations\n#\n\n#\tService types\n\nVALUE\tService-Type\t\t\tLogin-User\t\t1\nVALUE\tService-Type\t\t\tFramed-User\t\t2\nVALUE\tService-Type\t\t\tCallback-Login-User\t3\nVALUE\tService-Type\t\t\tCallback-Framed-User\t4\nVALUE\tService-Type\t\t\tOutbound-User\t\t5\nVALUE\tService-Type\t\t\tAdministrative-User\t6\nVALUE\tService-Type\t\t\tNAS-Prompt-User\t\t7\nVALUE\tService-Type\t\t\tAuthenticate-Only\t8\nVALUE\tService-Type\t\t\tCallback-NAS-Prompt\t9\nVALUE\tService-Type\t\t\tCall-Check\t\t10\nVALUE\tService-Type\t\t\tCallback-Administrative\t11\n\n#\tFramed Protocols\n\nVALUE\tFramed-Protocol\t\t\tPPP\t\t\t1\nVALUE\tFramed-Protocol\t\t\tSLIP\t\t\t2\nVALUE\tFramed-Protocol\t\t\tARAP\t\t\t3\nVALUE\tFramed-Protocol\t\t\tGandalf-SLML\t\t4\nVALUE\tFramed-Protocol\t\t\tXylogics-IPX-SLIP\t5\nVALUE\tFramed-Protocol\t\t\tX.75-Synchronous\t6\n\n#\tFramed Routing Values\n\nVALUE\tFramed-Routing\t\t\tNone\t\t\t0\nVALUE\tFramed-Routing\t\t\tBroadcast\t\t1\nVALUE\tFramed-Routing\t\t\tListen\t\t\t2\nVALUE\tFramed-Routing\t\t\tBroadcast-Listen\t3\n\n#\tFramed Compression Types\n\nVALUE\tFramed-Compression\t\tNone\t\t\t0\nVALUE\tFramed-Compression\t\tVan-Jacobson-TCP-IP\t1\nVALUE\tFramed-Compression\t\tIPX-Header-Compression\t2\nVALUE\tFramed-Compression\t\tStac-LZS\t\t3\n\n#\tLogin Services\n\nVALUE\tLogin-Service\t\t\tTelnet\t\t\t0\nVALUE\tLogin-Service\t\t\tRlogin\t\t\t1\nVALUE\tLogin-Service\t\t\tTCP-Clear\t\t2\nVALUE\tLogin-Service\t\t\tPortMaster\t\t3\nVALUE\tLogin-Service\t\t\tLAT\t\t\t4\nVALUE\tLogin-Service\t\t\tX25-PAD\t\t\t5\nVALUE\tLogin-Service\t\t\tX25-T3POS\t\t6\nVALUE\tLogin-Service\t\t\tTCP-Clear-Quiet\t\t8\n\n#\tLogin-TCP-Port\t\t(see /etc/services for more examples)\n\nVALUE\tLogin-TCP-Port\t\t\tTelnet\t\t\t23\nVALUE\tLogin-TCP-Port\t\t\tRlogin\t\t\t513\nVALUE\tLogin-TCP-Port\t\t\tRsh\t\t\t514\n\n#\tTermination Options\n\nVALUE\tTermination-Action\t\tDefault\t\t\t0\nVALUE\tTermination-Action\t\tRADIUS-Request\t\t1\n\n#\tNAS Port Types\n\nVALUE\tNAS-Port-Type\t\t\tAsync\t\t\t0\nVALUE\tNAS-Port-Type\t\t\tSync\t\t\t1\nVALUE\tNAS-Port-Type\t\t\tISDN\t\t\t2\nVALUE\tNAS-Port-Type\t\t\tISDN-V120\t\t3\nVALUE\tNAS-Port-Type\t\t\tISDN-V110\t\t4\nVALUE\tNAS-Port-Type\t\t\tVirtual\t\t\t5\nVALUE\tNAS-Port-Type\t\t\tPIAFS\t\t\t6\nVALUE\tNAS-Port-Type\t\t\tHDLC-Clear-Channel\t7\nVALUE\tNAS-Port-Type\t\t\tX.25\t\t\t8\nVALUE\tNAS-Port-Type\t\t\tX.75\t\t\t9\nVALUE\tNAS-Port-Type\t\t\tG.3-Fax\t\t\t10\nVALUE\tNAS-Port-Type\t\t\tSDSL\t\t\t11\nVALUE\tNAS-Port-Type\t\t\tADSL-CAP\t\t12\nVALUE\tNAS-Port-Type\t\t\tADSL-DMT\t\t13\nVALUE\tNAS-Port-Type\t\t\tIDSL\t\t\t14\nVALUE\tNAS-Port-Type\t\t\tEthernet\t\t15\nVALUE\tNAS-Port-Type\t\t\txDSL\t\t\t16\nVALUE\tNAS-Port-Type\t\t\tCable\t\t\t17\nVALUE\tNAS-Port-Type\t\t\tWireless-Other\t\t18\nVALUE\tNAS-Port-Type\t\t\tWireless-802.11\t\t19\n"
  },
  {
    "path": "python/nav/statemon/checkermap.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\nimport os\nimport importlib\nimport logging\n\n\n_logger = logging.getLogger(__name__)\nHANDLER_PATTERN = \"Checker.py\"\nCHECKER_DIR = os.path.join(os.path.dirname(__file__), \"checker\")\n\ncheckers = {}\ndirty = []  # store failed imports here\n\n\ndef register(key, module):\n    if key not in checkers:\n        _logger.debug(\"Registering checker %s from module %s\", key, module)\n        checkers[key] = module\n\n\ndef get(checker):\n    \"\"\"Gets a specific checker class from its short handler name\"\"\"\n    if checker in dirty:\n        return\n    if checker not in checkers:\n        parsedir()\n        # apparently, the following is required for proper plugin imports on Python 3\n        importlib.import_module(\"nav.statemon.checker\")\n    module_name = class_name = checkers.get(checker.lower(), '')\n    if not module_name:\n        return\n    try:\n        module = importlib.import_module('.' + module_name, 'nav.statemon.checker')\n    except Exception as ex:  # noqa: BLE001\n        _logger.error(\"Failed to import %s, %s\", module_name, ex)\n        dirty.append(checker)\n        return\n    return getattr(module, class_name)\n\n\ndef parsedir():\n    \"\"\"Finds potential checker modules in the CHECKER_DIR\"\"\"\n    fnames = os.listdir(CHECKER_DIR)\n    for fname in fnames:\n        if fname.endswith(HANDLER_PATTERN):\n            key = fname.removesuffix(HANDLER_PATTERN).lower()\n            handler = fname[:-3]\n            register(key, handler)\n"
  },
  {
    "path": "python/nav/statemon/circbuf.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n\"\"\"Circular buffer.\nThe buffer holds n items. When the the buffer is full and a new item is\nadded, the first item is removed.\n\"\"\"\n\n\nclass CircBuf(object):\n    def __init__(self, size=10, *_args, **_kwargs):\n        self._size = size\n        self._data = [None] * self._size\n\n    def push(self, value):\n        self._data.pop()\n        self._data.insert(0, value)\n\n    def __len__(self):\n        return self._size\n\n    def __getslice__(self, i, j):\n        return self._data[i:j]\n\n    def __getitem__(self, i):\n        return self._data[i]\n\n    def reset_all_to(self, value):\n        \"\"\"Resets all slots in the buffer to value\"\"\"\n        self._data = [value] * self._size\n"
  },
  {
    "path": "python/nav/statemon/config.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n\"\"\"\nAbstraction for the various config files used\nby servicemon and pinger.\nImplements the singleton pattern ensuring only one\ninstance created.\n\"\"\"\n\nimport os\nfrom nav.config import read_flat_config, NAV_CONFIG\n\n\nclass Conf(dict):\n    def __init__(self, *_args, **_kwargs):\n        super(Conf, self).__init__()\n        self.update(read_flat_config(self._file))\n\n    @property\n    def logfile(self):\n        logfile = self.get('logfile')\n        if logfile.startswith(os.sep) or not logfile:\n            return logfile\n        else:\n            return os.path.join(NAV_CONFIG['LOG_DIR'], logfile)\n\n\ndef dbconf(*args, **kwargs):\n    if _dbconf._instance is None:\n        _dbconf._instance = _dbconf(*args, **kwargs)\n    return _dbconf._instance\n\n\nclass _dbconf(Conf):\n    _instance = None\n\n    def __init__(self, *args, **kwargs):\n        self._file = kwargs.get('configfile', 'db.conf')\n        super(_dbconf, self).__init__(*args, **kwargs)\n\n\nclass _serviceconf(Conf):\n    _instance = None\n\n    def __init__(self, *args, **kwargs):\n        self._file = kwargs.get('configfile', 'servicemon.conf')\n        super(_serviceconf, self).__init__(*args, **kwargs)\n\n\ndef serviceconf(*args, **kwargs):\n    if _serviceconf._instance is None:\n        _serviceconf._instance = _serviceconf(*args, **kwargs)\n    return _serviceconf._instance\n\n\nclass _pingconf(Conf):\n    _instance = None\n\n    def __init__(self, *args, **kwargs):\n        self._file = kwargs.get('configfile', 'pping.conf')\n        super(_pingconf, self).__init__(*args, **kwargs)\n\n\ndef pingconf(*args, **kwargs):\n    if _pingconf._instance is None:\n        _pingconf._instance = _pingconf(*args, **kwargs)\n    return _pingconf._instance\n"
  },
  {
    "path": "python/nav/statemon/db.py",
    "content": "#\n# Copyright (C) 2010, 2012 Uninett AS\n# Copyright (C) 2020 Universitetet i Oslo\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nThis class is an abstraction of the database operations needed\nby the service monitor.\n\nIt implements the singleton pattern, ensuring only one instance\nis used at a time.\n\"\"\"\n\nimport atexit\nfrom collections import defaultdict\nimport logging\nimport queue\nimport time\nimport threading\n\nimport psycopg2\nfrom psycopg2.errorcodes import IN_FAILED_SQL_TRANSACTION\nfrom psycopg2.errorcodes import lookup as pg_err_lookup\n\nfrom nav.db import get_connection_string\nfrom nav.util import synchronized\n\nfrom . import checkermap\nfrom .event import Event\n\n\n_logger = logging.getLogger(__name__)\n\n# The event model requires a valid severity value, even though the event engine will\n# always override it when generating alerts. It therefore doesn't matter what value\n# we use when posting events:\nDEFAULT_SEVERITY = 3\n\n\ndef db():\n    \"\"\"Returns a db singleton\"\"\"\n    if getattr(_DB, '_instance') is None:\n        setattr(_DB, '_instance', _DB())\n\n    return getattr(_DB, '_instance')\n\n\nclass DbError(Exception):\n    \"\"\"Generic database error\"\"\"\n\n\n_queryLock = threading.Lock()\n\n\nclass _DB(threading.Thread):\n    _instance = None\n\n    def __init__(self):\n        threading.Thread.__init__(self)\n        self.daemon = True\n        self.queue = queue.Queue()\n        self._hosts_to_ping = []\n        self._checkers = []\n        self.db = None\n\n    def connect(self):\n        \"\"\"Connects to the NAV database\"\"\"\n        try:\n            conn_str = get_connection_string(script_name='servicemon')\n            self.db = psycopg2.connect(conn_str)\n            atexit.register(self.close)\n\n            _logger.info(\"Successfully (re)connected to NAVdb\")\n            # Set transaction isolation level to READ COMMITTED\n            self.db.set_isolation_level(1)\n        except Exception:  # noqa: BLE001\n            _logger.critical(\"Couldn't connect to db.\", exc_info=True)\n            self.db = None\n\n    def close(self):\n        \"\"\"Closes the database connection\"\"\"\n        try:\n            if self.db:\n                self.db.close()\n        except psycopg2.InterfaceError:\n            # ignore \"already-closed\" type errors\n            pass\n\n    def status(self):\n        \"\"\"Returns 0/1 connection status indicator\"\"\"\n        try:\n            if self.db.status:\n                return 1\n        except Exception:  # noqa: BLE001\n            return 0\n        return 0\n\n    def cursor(self):\n        \"\"\"\n        Returns a database cursor, automatically re-opening the database\n        connection if necessary.\n\n        \"\"\"\n        try:\n            try:\n                cursor = self.db.cursor()\n                cursor.execute('SELECT 1')\n            except psycopg2.InternalError as err:\n                if err.pgcode == IN_FAILED_SQL_TRANSACTION:\n                    _logger.critical(\"Rolling back aborted transaction...\")\n                    self.db.rollback()\n                else:\n                    _logger.critical(\n                        \"PostgreSQL reported an internal error \"\n                        \"I don't know how to handle: %s \"\n                        \"(code=%s)\",\n                        pg_err_lookup(err.pgcode),\n                        err.pgcode,\n                    )\n                    raise\n        except Exception:  # noqa: BLE001\n            if self.db is not None:\n                _logger.critical(\n                    \"Could not get cursor. Trying to reconnect...\", exc_info=True\n                )\n            self.close()\n            self.connect()\n            cursor = self.db.cursor()\n        return cursor\n\n    def run(self):\n        \"\"\"Runs the event posting loop, popping events from the queue\"\"\"\n        self.connect()\n        while 1:\n            event = self.queue.get()\n            _logger.debug(\"Got event: [%s]\", event)\n            try:\n                self.commit_event(event)\n                self.db.commit()\n            except Exception:  # noqa: BLE001\n                # If we fail to commit the event, place it\n                # back in our queue\n                _logger.debug(\"Failed to commit event, rescheduling...\")\n                self.new_event(event)\n                time.sleep(5)\n\n    @synchronized(_queryLock)\n    def query(self, statement, values=None, commit=1):\n        \"\"\"\n        Runs a synchronized database query, automatically re-opening a\n        troubled connection and handling errors.\n\n        \"\"\"\n        cursor = None\n        try:\n            cursor = self.cursor()\n            cursor.execute(statement, values)\n            _logger.debug(\"Executed: %s\", cursor.query)\n            if commit:\n                self.db.commit()\n            return cursor.fetchall()\n        except Exception:  # noqa: BLE001\n            _logger.critical(\n                \"Failed to execute query: %s\",\n                cursor.query if cursor else statement,\n                exc_info=True,\n            )\n            if commit:\n                try:\n                    self.db.rollback()\n                except Exception:  # noqa: BLE001\n                    _logger.critical(\"Failed to rollback\")\n            raise DbError()\n\n    @synchronized(_queryLock)\n    def execute(self, statement, values=None, commit=1):\n        \"\"\"\n        Runs a synchronized database query, ignoring any result rows.\n        Automatically re-opens a troubled connection, and handles errors.\n\n        \"\"\"\n        cursor = None\n        try:\n            cursor = self.cursor()\n            cursor.execute(statement, values)\n            _logger.debug(\"Executed: %s\", cursor.query)\n            if commit:\n                try:\n                    self.db.commit()\n                except Exception:  # noqa: BLE001\n                    _logger.critical(\"Failed to commit\")\n        except psycopg2.IntegrityError:\n            _logger.critical(\n                \"Database integrity error, throwing away update\", exc_info=True\n            )\n            _logger.debug(\"Tried to execute: %s\", cursor.query)\n            if commit:\n                self.db.rollback()\n        except Exception:  # noqa: BLE001\n            _logger.critical(\n                \"Could not execute statement: %s\",\n                cursor.query if cursor else statement,\n                exc_info=True,\n            )\n            if commit:\n                self.db.rollback()\n            raise DbError()\n\n    def new_event(self, event):\n        \"\"\"Places a new event on the queue to be posted to the db\"\"\"\n        self.queue.put(event)\n\n    def commit_event(self, event):\n        \"\"\"Commits an event to the database event queue\"\"\"\n        if event.source not in (\"serviceping\", \"pping\"):\n            _logger.critical(\"Invalid source for event: %s\", event.source)\n            return\n        if event.eventtype == \"version\":\n            statement = \"\"\"UPDATE service SET version = %s\n                           WHERE serviceid = %s\"\"\"\n            self.execute(statement, (event.version, event.serviceid))\n            return\n\n        if event.status == Event.UP:\n            value = 100\n            state = 'e'\n        elif event.status == Event.DOWN:\n            value = 1\n            state = 's'\n        else:\n            value = 1\n            state = 'x'\n\n        nextid = self.query(\"SELECT nextval('eventq_eventqid_seq')\")[0][0]\n        statement = \"\"\"INSERT INTO eventq\n                       (eventqid, subid, netboxid, eventtypeid,\n                        state, severity, value, source, target)\n                       VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)\"\"\"\n        values = (\n            nextid,\n            event.serviceid,\n            event.netboxid,\n            event.eventtype,\n            state,\n            DEFAULT_SEVERITY,\n            value,\n            event.source,\n            \"eventEngine\",\n        )\n        self.execute(statement, values)\n\n        statement = \"\"\"INSERT INTO eventqvar\n                       (eventqid, var, val) VALUES\n                       (%s, %s, %s)\"\"\"\n        values = (nextid, 'descr', event.info)\n        self.execute(statement, values)\n\n    def build_host_query(self, groups_included=None, groups_excluded=None):\n        \"\"\"Returns a query string and query parameters list\n\n        :param groups_included: A list of device group names whose members will be\n                                the only ones included in the result.\n        :type groups_included: list\n        :param groups_excluded: A list of device group names whose members will be\n                                excluded from the result.\n        :type groups_excluded: list\n        \"\"\"\n\n        query = \"\"\"SELECT distinct(netbox.netboxid), sysname, ip, up FROM netbox\n                   LEFT JOIN netboxcategory USING (netboxid)\"\"\"\n\n        params = []\n        if groups_included:\n            query += \" WHERE netboxcategory.category IN %s\"\n            params.append(tuple(groups_included))\n\n        if groups_excluded:\n            query += \" AND \" if groups_included else \" WHERE \"\n            query += (\n                \"(netboxcategory.category IS NULL OR netboxcategory.category NOT IN %s)\"\n            )\n            params.append(tuple(groups_excluded))\n\n        return query, params\n\n    def hosts_to_ping(self, groups_included=None, groups_excluded=None):\n        \"\"\"Returns a list of netboxes to ping, from the database\n\n        :param groups_included: A list of device group names whose members will be\n                                the only ones included in the result.\n        :type groups_included: list\n        :param groups_excluded: A list of device group names whose members will be\n                                excluded from the result.\n        :type groups_excluded: list\n        \"\"\"\n\n        query, params = self.build_host_query(groups_included, groups_excluded)\n\n        try:\n            self._hosts_to_ping = self.query(query, params)\n        except DbError:\n            return self._hosts_to_ping\n        return self._hosts_to_ping\n\n    def get_checkers(self, use_db_status, onlyactive=1):\n        \"\"\"\n        Returns a list of service checker instances based on the database\n        service handler registry.\n\n        \"\"\"\n        query = \"\"\"SELECT serviceid, property, value\n        FROM serviceproperty\n        order BY serviceid\"\"\"\n\n        properties = defaultdict(dict)\n        try:\n            dbprops = self.query(query)\n        except DbError:\n            return self._checkers\n        for serviceid, prop, value in dbprops:\n            if value:\n                properties[serviceid][prop] = value\n\n        query = \"\"\"SELECT serviceid ,service.netboxid,\n        service.active, handler, version, ip, sysname, service.up\n        FROM service JOIN netbox ON\n        (service.netboxid=netbox.netboxid) order by serviceid\"\"\"\n        try:\n            fromdb = self.query(query)\n        except DbError:\n            return self._checkers\n\n        self._checkers = []\n        for (\n            serviceid,\n            netboxid,\n            active,\n            handler,\n            version,\n            ip,\n            sysname,\n            upstate,\n        ) in fromdb:\n            checker = checkermap.get(handler)\n            if not checker:\n                _logger.critical(\"no such checker: %s\", handler)\n                continue\n            service = {\n                'id': serviceid,\n                'netboxid': netboxid,\n                'ip': ip,\n                'sysname': sysname,\n                'args': properties[serviceid],\n                'version': version,\n            }\n\n            kwargs = {}\n            if use_db_status:\n                if upstate == 'y':\n                    upstate = Event.UP\n                else:\n                    upstate = Event.DOWN\n                kwargs['status'] = upstate\n\n            try:\n                new_checker = checker(service, **kwargs)\n            except Exception:  # noqa: BLE001\n                _logger.critical(\n                    \"Checker %s (%s) failed to init. This checker \"\n                    \"will remain DISABLED:\",\n                    handler,\n                    checker,\n                    exc_info=True,\n                )\n                continue\n\n            if onlyactive and not active:\n                continue\n            else:\n                setattr(new_checker, 'active', active)\n\n            self._checkers += [new_checker]\n        _logger.info(\"Returned %s checkers\", len(self._checkers))\n        return self._checkers\n"
  },
  {
    "path": "python/nav/statemon/event.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n\nclass Event(object):\n    \"\"\"\n    Class representing a NAV Event\n    \"\"\"\n\n    UP = 'UP'\n    DOWN = 'DOWN'\n    boxState = 'boxState'\n    serviceState = 'serviceState'\n\n    def __init__(\n        self,\n        serviceid,\n        netboxid,\n        deviceid,\n        eventtype,\n        source,\n        status,\n        info='',\n        version='',\n    ):\n        self.serviceid = serviceid\n        self.netboxid = netboxid\n        self.deviceid = deviceid\n        self.info = info\n        self.eventtype = eventtype\n        self.status = status\n        self.version = version\n        self.source = source\n\n    def __repr__(self):\n        return \"Service: %s, netbox: %s, eventtype: %s, status: %s\" % (\n            self.serviceid,\n            self.netboxid,\n            self.eventtype,\n            self.status,\n        )\n"
  },
  {
    "path": "python/nav/statemon/icmppacket.py",
    "content": "#\n# Copyright (C) 23. Feb. 2004 - Lars Strand <lars strand at gnist org>\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"ICMP packet manipulation.\n\nRequired reading list:\n\n* RFC  792 (ICMP)\n* RFC 2460 (IPv6)\n* RFC 4443 (ICMPv6)\n* http://www.iana.org/assignments/icmpv6-parameters\n\n\"\"\"\n\nimport struct\nimport array\n\nICMP_MINLEN = 8\n\n\nclass Packet(object):\n    \"\"\"An ICMP packet\"\"\"\n\n    packet_slice = slice(0, None)\n    header_slice = slice(0, 8)\n    data_slice = slice(8, None)\n\n    def __init__(self, packet=None, verify=True):\n        \"\"\"Initializes an ICMP packet structure.\n\n        :param packet: Disassembled as an off -the-wire packet if supplied;\n                       otherwise an empty ping packet is constructed.\n        :param verify: Verify the packet checksum if True.\n\n        \"\"\"\n        if packet:\n            self._disassemble(packet, verify)\n        else:\n            self.type = getattr(self, 'ICMP_ECHO', 0)\n            self.code = 0\n            self.checksum = 0\n            self.id = 0\n            self.sequence = 0\n            self.data = b''\n\n    def __repr__(self):\n        return \"<ICMP %s type=%s code=%s id=%s sequence=%s>\" % (\n            self.__class__.__name__,\n            self.lookup_type(),\n            self.code,\n            self.id,\n            self.sequence,\n        )\n\n    def _disassemble(self, packet, verify=True):\n        packet = packet[self.packet_slice]\n        (self.type, self.code, self.checksum, self.id, self.sequence) = struct.unpack(\n            \"BBHHH\", packet[self.header_slice]\n        )\n        self.data = packet[self.data_slice]\n\n        if verify:\n            my_checksum = inet_checksum(packet)\n            if my_checksum != 0:\n                raise ValueError(\"unable to verify packet checksum\")\n\n    def assemble(self, calc_checksum=True):\n        \"\"\"Assembles a raw ICMP packet string from packet attributes.\n\n        :param calc_checksum: Calculate and fill the checksum field of the\n                              packet if True.\n\n        \"\"\"\n        packet = self._assemble(0)\n        if calc_checksum:\n            self.checksum = inet_checksum(packet)\n            packet = self._assemble(self.checksum)\n        return packet\n\n    def _assemble(self, checksum):\n        header = struct.pack(\n            \"BBHHH\", self.type, self.code, checksum, self.id, self.sequence\n        )\n        packet = header + self.data\n        return packet\n\n    def lookup_type(self, type_=None):\n        \"\"\"Reverse looks up a packet type id and returns a name string.\n\n        If the type is not known, the supplied integer is returned as a string\n        instead.\n\n        \"\"\"\n        if type_ is None:\n            type_ = self.type\n        attrs = vars(self.__class__)\n        type_map = dict((v, k) for k, v in attrs.items() if k.startswith('ICMP_'))\n        return type_map.get(type_, str(type_))\n\n\nclass PacketV4(Packet):\n    \"\"\"An ICMPv4 packet\"\"\"\n\n    ICMP_ECHO_REPLY = 0\n    ICMP_DESTINATION_UNREACHABLE = 3\n    ICMP_ECHO = 8\n    ICMP_TIME_EXCEEDED = 11\n\n    # IPv4 RAW sockets include the IP header in the received datagram.  This\n    # packet slice chops of the first 20 octets to get at the ICMP datagram\n    packet_slice = slice(20, None)\n\n\nclass PacketV6(Packet):\n    \"\"\"An ICMPv6 packet.\n\n    NOTE: This will never verify the checksum when disassembling a packet,\n    since we need to generate a pseudo-header using the source and destination\n    IPv6 addresses to include in the calculation of the sum.  See RFC 4443\n    Section 2.3 and RFC 2460 Section 8.1.\n\n    The generated checksum of an assembled PacketV6 will also likely be wrong\n    because of this, but it appears that the OS somehow magically fixes the\n    checksum when transmitted over the wire.\n\n    \"\"\"\n\n    ICMP_DESTINATION_UNREACHABLE = 1\n    ICMP_TIME_EXCEEDED = 3\n    ICMP_ECHO = 128\n    ICMP_ECHO_REPLY = 129\n\n    ICMP_MULTICAST_LISTENER_QUERY = 130\n    ICMP_MULTICAST_LISTENER_REPORT = 131\n    ICMP_MULTICAST_LISTENER_DONE = 132\n\n    ICMP_ROUTER_SOLICITATION = 133\n    ICMP_ROUTER_ADVERTISEMENT = 134\n\n    ICMP_NEIGHBOR_SOLICITATION = 135\n    ICMP_NEIGHBOR_ADVERTISEMENT = 136\n\n    def __init__(self, packet=None, verify=False):\n        super(PacketV6, self).__init__(packet, False)\n\n\ndef inet_checksum(packet):\n    \"\"\"Calculates the checksum of a (ICMP) packet.\n\n    RFC792 states: 'The 16 bit one's complement of the one's complement sum of\n    all 16 bit words in the header.'\n\n    Based on in_chksum found in ping.c on FreeBSD.\n    \"\"\"\n\n    # add byte if not dividable by 2\n    if len(packet) & 1:\n        packet = packet + b'\\0'\n\n    # split into 16-bit word and insert into a binary array\n    words = array.array('h', packet)\n    sum_ = 0\n\n    # perform ones complement arithmetic on 16-bit words\n    for word in words:\n        sum_ += word & 0xFFFF\n\n    high = sum_ >> 16\n    low = sum_ & 0xFFFF\n    sum_ = high + low\n    sum_ = sum_ + (sum_ >> 16)\n\n    return (~sum_) & 0xFFFF  # return ones complement\n"
  },
  {
    "path": "python/nav/statemon/megaping.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Ping multiple hosts at once.\"\"\"\n\nimport threading\nimport time\nimport socket\nimport select\nimport os\nimport random\nimport logging\nimport hashlib\n\nfrom nav.daemon import safesleep as sleep\nfrom nav.statemon import config\n\nfrom .icmppacket import ICMP_MINLEN, PacketV4, PacketV6\n\n\n_logger = logging.getLogger(__name__)\n\n\ndef make_sockets():\n    \"\"\"Makes and returns the raw IPv6 and IPv4 ICMP sockets.\n\n    This needs to run as root before dropping privileges.\n\n    \"\"\"\n    try:\n        socketv6 = socket.socket(\n            socket.AF_INET6, socket.SOCK_RAW, socket.getprotobyname('ipv6-icmp')\n        )\n    except Exception:  # noqa: BLE001\n        _logger.error(\"Could not create v6 socket\")\n        raise\n\n    try:\n        socketv4 = socket.socket(\n            socket.AF_INET, socket.SOCK_RAW, socket.getprotobyname('icmp')\n        )\n    except Exception:  # noqa: BLE001\n        _logger.error(\"Could not create v4 socket\")\n        raise\n\n    return [socketv6, socketv4]\n\n\nclass Host(object):\n    \"\"\"\n    Contains the destination address and current sequence number of a host.\n    \"\"\"\n\n    COOKIE_LENGTH = len(hashlib.new('md5').digest())\n\n    def __init__(self, ip):\n        self.ip = ip\n        # Random value for the cookie\n        self.rnd = random.randint(10000, 2**16 - 1)\n        # Time the echo was sent\n        self.time = 0\n        # Used in nextseq\n        self.certain = 0\n\n        # Check IP version and choose packet class\n        if self.is_valid_ipv6():\n            self.ipv6 = True\n            self.packet = PacketV6()\n        else:\n            self.ipv6 = False\n            self.packet = PacketV4()\n\n        self.packet.id = os.getpid() % 65536\n        self.reply = None\n\n    def make_packet(self, size, cookie=None):\n        \"\"\"Makes the next echo reply packet\"\"\"\n        if not cookie:\n            cookie = self.make_cookie()\n        self.packet.data = cookie.ljust(size - ICMP_MINLEN)\n        return self.packet.assemble(), cookie\n\n    def make_cookie(self):\n        \"\"\"Makes and returns a request identifier to be used as data in a ping\n        packet.\n        \"\"\"\n        cookie = hashlib.new('md5')\n        cookie.update(self.ip.encode('ASCII'))\n        cookie.update(str(self.rnd).encode('ASCII'))\n        cookie.update(str(self.time).encode('ASCII'))\n        return cookie.digest()\n\n    def is_v6(self):\n        \"\"\"\n        Returns True if host is v6\n        \"\"\"\n        return self.ipv6\n\n    def is_valid_ipv6(self):\n        \"\"\"Help method to check if addr is IPv6\"\"\"\n        try:\n            socket.inet_pton(socket.AF_INET6, self.ip)\n            return True\n        except socket.error:\n            return False\n\n    def is_valid_ipv4(self):\n        \"\"\"Help method to check if addr is v4\"\"\"\n        try:\n            socket.inet_pton(socket.AF_INET, self.ip)\n            return True\n        except socket.error:\n            return False\n\n    def next_seq(self):\n        \"\"\"Increments the echo request sequence number to use with the next\n        request.\n\n        Wrap around at 65536 (values must be unsigned short).\n\n        \"\"\"\n        self.packet.sequence = (self.packet.sequence + 1) % 2**16\n        if not self.certain and self.packet.sequence > 2:\n            self.certain = 1\n\n    def __repr__(self):\n        return \"Host instance for IP %s with sequence number %s \" % (\n            self.ip,\n            self.packet.sequence,\n        )\n\n\nclass MegaPing(object):\n    \"\"\"\n    Sends icmp echo to multiple hosts in parallell.\n    Typical use:\n    pinger = megaping.MegaPing()\n    pinger.set_hosts(['127.0.0.1','10.0.0.1'])\n    timeUsed = pinger.ping()\n    results = pinger.results()\n    \"\"\"\n\n    _requests = _sender = _getter = _sender_finished = None\n\n    def __init__(self, sockets, conf=None):\n        # Get config in /etc/pping.conf\n        if conf is None:\n            try:\n                self._conf = config.pingconf()\n            except Exception:  # noqa: BLE001\n                _logger.critical(\"Failed to open config file. Using default values.\")\n                self._conf = {}\n        else:\n            self._conf = conf\n\n        # Delay between each packet is transmitted\n        self._delay = float(self._conf.get('delay', 2)) / 1000  # convert from ms\n        # Timeout before considering hosts as down\n        self._timeout = int(self._conf.get('timeout', 5))\n        # Dictionary with all the hosts, populated by set_hosts()\n        self._hosts = {}\n\n        packetsize = int(self._conf.get('packetsize', 64))\n        if packetsize < 44:\n            raise ValueError(\n                (\n                    \"Packetsize (%s) too small to create a proper \"\n                    \"cookie; Must be at least 44.\"\n                )\n                % packetsize\n            )\n        self._packetsize = packetsize\n        self._pid = os.getpid() % 65536\n\n        # Global timing of the ppinger\n        self._elapsedtime = 0\n\n        # Initialize the sockets\n        if sockets is not None:\n            self._sock6 = sockets[0]\n            self._sock4 = sockets[1]\n        else:\n            try:\n                sockets = make_sockets()\n            except Exception:  # noqa: BLE001\n                _logger.error(\"Tried to create sockets without being root!\")\n\n            self._sock6 = sockets[0]\n            self._sock4 = sockets[1]\n            _logger.info(\"No sockets passed as argument, creating own\")\n\n    def set_hosts(self, ips):\n        \"\"\"\n        Specify a list of ip addresses to ping. If we alredy have the host\n        in our list, we reuse that host object to ensure proper sequence\n        increment\n        \"\"\"\n        # add new hosts\n        currenthosts = {}\n        for ip in ips:\n            if ip not in self._hosts:\n                currenthosts[ip] = Host(ip)\n            else:\n                currenthosts[ip] = self._hosts[ip]\n        self._hosts = currenthosts\n\n    def reset(self):\n        \"\"\"\n        Reset method to clear requests and responses\n        \"\"\"\n        self._requests = {}\n        for host in self._hosts.values():\n            host.reply = None\n        self._sender_finished = 0\n\n    def ping(self):\n        \"\"\"\n        Send icmp echo to all configured hosts. Returns the\n        time used.\n        \"\"\"\n        # Start working\n        self.reset()\n        self._sender = threading.Thread(target=self._send_requests, name=\"sender\")\n        self._getter = threading.Thread(target=self._get_responses, name=\"getter\")\n        self._sender.daemon = True\n        self._getter.daemon = True\n        self._sender.start()\n        self._getter.start()\n        self._getter.join()\n        return self._elapsedtime\n\n    def _send_requests(self):\n        # Get ip addresses to ping\n        hosts = self._hosts.values()\n\n        # Ping each host\n        for host in hosts:\n            host.time = time.time()\n            # create and save a request identifier\n            packet, cookie = host.make_packet(self._packetsize)\n            self._requests[cookie] = host\n            host.next_seq()\n\n            try:\n                if not host.is_v6():\n                    self._sock4.sendto(packet, (host.ip, 0))\n                else:\n                    self._sock6.sendto(packet, (host.ip, 0, 0, 0))\n            except Exception as error:  # noqa: BLE001\n                _logger.info(\"Failed to ping %s [%s]\", host.ip, error)\n\n            sleep(self._delay)\n        self._sender_finished = time.time()\n\n    def _get_responses(self):\n        start = time.time()\n        timeout = self._timeout\n\n        while not self._sender_finished or self._requests:\n            if self._sender_finished:\n                runtime = time.time() - self._sender_finished\n                if runtime > self._timeout:\n                    break\n                else:\n                    timeout = self._timeout - runtime\n\n            # Listen for incoming data on sockets\n            readable, _wt, _er = select.select(\n                [self._sock6, self._sock4], [], [], timeout\n            )\n\n            # If data found\n            if readable:\n                # okay to use time here, because select has told us\n                # there is data and we don't care to measure the time\n                # it takes the system to give us the packet.\n                arrival = time.time()\n\n                # Find out which socket got data and read\n                for sock in readable:\n                    try:\n                        raw_pong, sender = sock.recvfrom(4096)\n                    except socket.error:\n                        _logger.critical(\"RealityError -2\", exc_info=True)\n                        continue\n\n                    is_ipv6 = sock == self._sock6\n                    self._process_response(raw_pong, sender, is_ipv6, arrival)\n            elif self._sender_finished:\n                break\n\n        # Everything else timed out\n        for host in self._requests.values():\n            host.reply = None\n        end = time.time()\n        self._elapsedtime = end - start\n\n    def _process_response(self, raw_pong, sender, is_ipv6, arrival):\n        # Extract header info and payload\n        packet_class = PacketV6 if is_ipv6 else PacketV4\n        try:\n            pong = packet_class(raw_pong)\n        except Exception as error:  # noqa: BLE001\n            _logger.critical(\"could not disassemble packet from %r: %s\", sender, error)\n            return\n\n        if pong.type != pong.ICMP_ECHO_REPLY:\n            # we only care about echo replies\n            _logger.debug(\"Packet from %s was not an echo reply, but %s\", sender, pong)\n            return\n\n        if not pong.id == self._pid:\n            _logger.debug(\n                \"packet from %r doesn't match our id (%s): %r (raw packet: %r)\",\n                sender,\n                self._pid,\n                pong,\n                raw_pong,\n            )\n            return\n\n        cookie = pong.data[: Host.COOKIE_LENGTH]\n\n        # Find the host with this cookie\n        try:\n            host = self._requests[cookie]\n        except KeyError:\n            _logger.debug(\n                \"packet from %r does not match any outstanding \"\n                \"request: %r (raw packet: %r cookie: %r)\",\n                sender,\n                pong,\n                raw_pong,\n                cookie,\n            )\n            return\n\n        # Delete the entry of the host who has replied and add the pingtime\n        pingtime = arrival - host.time\n        host.reply = pingtime\n        _logger.debug(\"Response from %-16s in %03.3f ms\", sender, pingtime * 1000)\n        del self._requests[cookie]\n\n    def results(self):\n        \"\"\"\n        Returns a tuple of\n        (ip, roundtriptime) for all hosts.\n        Unreachable hosts will have roundtriptime = -1\n        \"\"\"\n        return [\n            (host.ip, host.reply if host.reply else -1) for host in self._hosts.values()\n        ]\n"
  },
  {
    "path": "python/nav/statemon/netbox.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n\nclass Netbox(object):\n    \"\"\"\n    Class representing a NAV netbox\n    \"\"\"\n\n    def __init__(self, netboxid, sysname, ip, up):\n        self.netboxid = netboxid\n        self.sysname = sysname\n        self.ip = ip\n        self.up = up\n\n    def __eq__(self, obj):\n        if isinstance(obj, str):\n            return self.ip == obj\n        return self.netboxid == obj.netboxid\n\n    def __repr__(self):\n        return \"%s (%s)\" % (self.sysname, self.ip)\n\n    def __str__(self):\n        return \"%s (%s)\" % (self.sysname, self.ip)\n\n    def __hash__(self):\n        return self.ip.__hash__()\n"
  },
  {
    "path": "python/nav/statemon/statistics.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module for keeping status/roundtrip time/response time statistics.\n\nThese used to be handled by rrdtool, but has completely moved to Graphite.\nThe only public API of this module used to be the update() function,\nwhose call signature has been kept to remain compatible with the rest of\nthe statemon subsystem.\n\n\"\"\"\n\nimport time\n\nfrom nav.metrics.carbon import send_metrics\nfrom nav.metrics.templates import (\n    metric_path_for_packet_loss,\n    metric_path_for_roundtrip_time,\n    metric_path_for_service_availability,\n    metric_path_for_service_response_time,\n)\n\nfrom . import event\n\n\ndef update(sysname, timestamp, status, responsetime, serviceid=None, handler=\"\"):\n    \"\"\"Sends metric updates to graphite.\n\n    :param sysname: Sysname of the device in question.\n    :param timestamp: Timestamp of the measurements. If None or 'N', the\n                    current time will be used.\n    :param status: Either Event.UP or Event.DOWN\n    :param responsetime: Round-trip or response time of device/service.\n    :param serviceid: Service id (db primary key) in case we're updating a\n                      service handler.\n    :param handler: The type of service handler in case we're updating a\n                    service handler.\n\n    \"\"\"\n    if serviceid:\n        status_name = metric_path_for_service_availability(sysname, handler, serviceid)\n        response_name = metric_path_for_service_response_time(\n            sysname, handler, serviceid\n        )\n    else:\n        status_name = metric_path_for_packet_loss(sysname)\n        response_name = metric_path_for_roundtrip_time(sysname)\n\n    if timestamp is None or timestamp == 'N':\n        timestamp = time.time()\n\n    metrics = [\n        (status_name, (timestamp, 0 if status == event.Event.UP else 1)),\n        (response_name, (timestamp, responsetime)),\n    ]\n    send_metrics(metrics)\n"
  },
  {
    "path": "python/nav/tableformat.py",
    "content": "#\n# Copyright (C) 2010 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Formatting of table data to readable text.\"\"\"\n\n\nclass SimpleTableFormatter(object):\n    def __init__(self, data):\n        \"\"\"Initializes the table formatter with data.\n\n        data -- a list of lists.  All the lists must be of the same\n        length.\n\n        \"\"\"\n        self.data = data\n\n    def __str__(self):\n        return self.get_formatted_table()\n\n    def get_formatted_table(self):\n        if not self.data:\n            return ''\n        widths = self._find_widest_elements()\n        output = []\n        for row in self.data:\n            output.append(self._format_row(row, widths))\n        return '\\n'.join(output)\n\n    def _format_row(self, row, widths):\n        new_row = []\n        for index, cell in enumerate(row):\n            fmt = \"%%%ds\" % widths[index]\n            new_row.append(fmt % str(cell))\n        return ' | '.join(new_row)\n\n    def _find_widest_elements(self):\n        if not self.data:\n            return [0]\n        max_widths = []\n        for column_number in range(self._get_column_count()):\n            max_widths.append(self._get_max_width_of_column(column_number))\n        return max_widths\n\n    def _get_max_width_of_column(self, column_number):\n        widths = [len(str(row[column_number])) for row in self.data]\n        return max(widths)\n\n    def _get_column_count(self):\n        return len(self.data[0])\n"
  },
  {
    "path": "python/nav/tests/__init__.py",
    "content": "\"\"\"Common testing functionality for NAV.\"\"\"\n"
  },
  {
    "path": "python/nav/tests/cases.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV test cases\"\"\"\n\nimport django.test\n\n\nclass DjangoTransactionTestCase(django.test.TestCase):\n    serialized_rollback = True\n"
  },
  {
    "path": "python/nav/thresholdmon.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Threshold monitoring program\"\"\"\n\nimport logging\nfrom optparse import OptionParser\nfrom collections import defaultdict\n\nimport django\nfrom django.db import transaction\n\nfrom nav import buildconf\nfrom nav.logs import init_generic_logging\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Netbox, Interface, Sensor\nfrom nav.models.thresholds import ThresholdRule\nfrom nav.models.event import EventQueue as Event, AlertHistory\nfrom nav.metrics.lookup import lookup\n\nLOG_FILE = 'thresholdmon.log'\n\n_logger = logging.getLogger('nav.thresholdmon')\n\n\ndef main():\n    \"\"\"Main thresholdmon program\"\"\"\n    parser = make_option_parser()\n    (_options, _args) = parser.parse_args()\n\n    init_generic_logging(\n        logfile=LOG_FILE,\n        stderr=False,\n        stdout=True,\n        read_config=True,\n    )\n    django.setup()\n    scan()\n\n\ndef make_option_parser():\n    \"\"\"Sets up and returns a command line option parser.\"\"\"\n    parser = OptionParser(\n        version=\"NAV \" + buildconf.VERSION,\n        description=(\n            \"Scans metric values for exceeded thresholds, according\"\n            \"to configured threshold rules.\"\n        ),\n    )\n    return parser\n\n\ndef scan():\n    \"\"\"Scans for threshold rules and evaluates them\"\"\"\n    rules = ThresholdRule.objects.all()\n    alerts = get_unresolved_threshold_alerts()\n\n    _logger.info(\"evaluating %d rules\", len(rules))\n    for rule in rules:\n        evaluate_rule(rule, alerts)\n    _logger.info(\"done\")\n\n\ndef evaluate_rule(rule, alerts):\n    \"\"\"\n    Evaluates the current status of a single rule and posts events if\n    necessary.\n    \"\"\"\n    _logger.debug(\"evaluating rule %r\", rule)\n\n    evaluator = rule.get_evaluator()\n    try:\n        if not evaluator.get_values():\n            _logger.warning(\n                \"did not find any matching values for rule %r %s\",\n                rule.target,\n                rule.alert,\n            )\n    except Exception:  # noqa: BLE001\n        _logger.exception(\"Unhandled exception while getting values for rule: %r\", rule)\n        return\n\n    # post new exceed events\n    try:\n        exceeded = evaluator.evaluate(rule.alert)\n    except Exception:  # noqa: BLE001\n        _logger.exception(\"Unhandled exception while evaluating rule alert: %r\", rule)\n        return\n\n    for metric, value in exceeded:\n        alert = alerts.get(rule.id, {}).get(metric, None)\n        _logger.info(\n            \"%s: %s %s (=%s)\", \"old\" if alert else \"new\", metric, rule.alert, value\n        )\n        if not alert:\n            start_event(rule, metric, value)\n\n    # try to clear any existing threshold alerts\n    if rule.id in alerts:\n        clearable = alerts[rule.id]\n        try:\n            if rule.clear:\n                cleared = evaluator.evaluate(rule.clear)\n            else:\n                cleared = evaluator.evaluate(rule.alert, invert=True)\n        except Exception:  # noqa: BLE001\n            _logger.exception(\n                \"Unhandled exception while evaluating rule clear: %r\", rule\n            )\n            return\n\n        for metric, value in cleared:\n            if metric in clearable:\n                _logger.info(\"cleared: %s %s (=%s)\", metric, rule.clear, value)\n                end_event(rule, metric, value)\n\n\ndef get_unresolved_threshold_alerts():\n    \"\"\"\n    Retrieves unresolved threshold alerts from the database, mapped to rules\n    and metric names.\n    \"\"\"\n    alert_map = defaultdict(dict)\n    alerts = AlertHistory.objects.filter(\n        event_type__id='thresholdState', end_time__gte=INFINITY\n    )\n    for alert in alerts:\n        try:\n            ruleid, metric = alert.subid.split(':', 1)\n            ruleid = int(ruleid)\n        except (AttributeError, ValueError):\n            continue\n        else:\n            alert_map[ruleid][metric] = alert\n\n    return dict(alert_map)\n\n\ndef start_event(rule, metric, value):\n    \"\"\"Makes and posts a threshold start event\"\"\"\n    event = make_event(True, rule, metric, value)\n    _logger.debug(\"posted start event: %r\", event)\n    return event\n\n\ndef end_event(rule, metric, value):\n    \"\"\"Makes and posts a threshold end event\"\"\"\n    event = make_event(False, rule, metric, value)\n    _logger.debug(\"posted end event: %r\", event)\n    return event\n\n\n@transaction.atomic()\ndef make_event(start, rule, metric, value):\n    \"\"\"Makes and posts a threshold event\"\"\"\n    event = _event_template()\n    event.state = event.STATE_START if start else event.STATE_END\n    event.subid = \"{rule}:{metric}\".format(rule=rule.id, metric=metric)\n\n    varmap = dict(\n        metric=metric,\n        alert=rule.alert,\n        ruleid=str(rule.id),\n        measured_value=str(value),\n    )\n    if rule.clear:\n        varmap['clear'] = str(rule.clear)\n    if rule.description:\n        varmap['description'] = rule.description\n    _add_subject_details(event, metric, varmap)\n\n    event.save()\n    if varmap:\n        event.varmap = varmap\n    return event\n\n\ndef _add_subject_details(event, metric, varmap):\n    obj = lookup(metric)\n    if obj:\n        try:\n            varmap['subject'] = \"{table}:{pk}\".format(\n                table=getattr(obj, '_meta').db_table, pk=obj.pk\n            )\n        except AttributeError:\n            pass  # probably wasn't a Django model object, fuhgeddaboutit\n\n        if isinstance(obj, Netbox):\n            event.netbox = obj\n        else:\n            try:\n                event.netbox = obj.netbox\n            except AttributeError:\n                pass\n\n        try:\n            event.device = obj.device\n        except AttributeError:\n            try:\n                event.device = obj.netbox.device\n            except AttributeError:\n                pass\n\n        if isinstance(obj, Interface):\n            varmap['interface'] = obj.ifname\n        elif isinstance(obj, Sensor):\n            varmap['sensor'] = obj.name\n\n\ndef _event_template():\n    event = Event()\n    event.source_id = 'thresholdMon'\n    event.target_id = 'eventEngine'\n    event.event_type_id = 'thresholdState'\n    return event\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/topology/__init__.py",
    "content": "\"\"\"Network topology modules\"\"\"\n"
  },
  {
    "path": "python/nav/topology/analyze.py",
    "content": "#\n# Copyright (C) 2011, 2012, 2015, 2017, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Reduction of network adjacency candidates graph.\n\nThis module uses NetworkX to facilitate reduction of NAV's network adjacency\ncandidates graph (loaded from the adjacency_candidate table) into a proper\nphysical topology graph.\n\nThe adjacency_candidate_netbox table can be loaded as a directed graph, from\nwhich reduction can take place.\n\nThe graph can be analyzed and reduced by using the AdjacencyReducer class.\n\n\nGraph structure\n===============\n\nA proper adjacency graph must consist only of Box and Port objects, as defined\nin this module.\n\nNetbox nodes must only have outgoing edges to Port nodes representing the\nNetbox' own interfaces.\n\nPort nodes can have outgoing edges to other Port nodes, or to Netbox nodes\n\n\"\"\"\n\nfrom collections import defaultdict\nfrom itertools import chain\nimport logging\n\nimport networkx as nx\nfrom nav.models.manage import AdjacencyCandidate, InterfaceAggregate, InterfaceStack\n\n_logger = logging.getLogger(__name__)\n\nCDP = 'cdp'\nLLDP = 'lldp'\n\n# Data classes\n\n\nclass Box(int):\n    \"\"\"A Netbox' netboxid value\"\"\"\n\n    name = None\n\n    def __str__(self):\n        return self.name or super(Box, self).__str__()\n\n\nclass Port(tuple):\n    \"\"\"An Interface's (netboxid, interfaceid) values\"\"\"\n\n    name = None\n\n    def __str__(self):\n        return self.name or super(Port, self).__str__()\n\n\n# Analyzers\n\n\nclass AdjacencyAnalyzer(object):\n    \"\"\"Adjacency candidate graph analyzer and manipulator\"\"\"\n\n    def __init__(self, graph, aggregates=None):\n        self.graph = graph\n        self.aggregates = aggregates or {}\n\n    def get_max_out_degree(self):\n        \"\"\"Returns the port node with the highest outgoing degree\"\"\"\n        ports_and_degree = self.get_ports_and_degree()\n        maximum = max(ports_and_degree) if ports_and_degree else None\n        if maximum:\n            return maximum[0]\n        else:\n            return 0\n\n    def find_return_port(self, from_port, to_netbox):\n        \"\"\"Given a candidate edge from from_port to to_netbox, find a port at\n        to_netbox that points to from_port's netbox\n        \"\"\"\n        from_netbox = from_port[0]\n\n        # Remote is a netbox, we need to check each of the netbox'\n        # outgoing ports to find a path\n        remote_ports = self.graph.neighbors(to_netbox)\n\n        for remote_port in remote_ports:\n            for remote_edge in self.graph.edges(remote_port):\n                remote_netbox = remote_edge[1]\n                if remote_netbox == from_netbox:\n                    return remote_port\n\n        return None\n\n    def get_ports_and_degree(self):\n        \"\"\"Return a list of port nodes and their outgoing degrees.\n\n        Result:\n\n          A list of tuples: [(degree, node), ... ]\n\n        \"\"\"\n        result = [\n            (self.graph.out_degree(n), n)\n            for n in self.graph.nodes()\n            if isinstance(n, Port)\n        ]\n        return result\n\n    def format_connections(self):\n        \"\"\"Returns a formatted string representation of all outgoing edges\n        from ports.\n\n        \"\"\"\n        output = [\n            \"%s => %s\" % (source, dest)\n            for source, dest in self.get_single_edges_from_ports()\n        ]\n        output.sort()\n        return \"\\n\".join(output)\n\n    def get_single_edges_from_ports(self):\n        \"\"\"Returns a list of edges from ports whose degree is 1\"\"\"\n        edges = [\n            list(self.graph.edges(port))[0] for port in self.get_ports_by_degree(1)\n        ]\n        return edges\n\n    def get_ports_by_degree(self, degree):\n        \"\"\"Returns a list of port nodes with a given out_degree\"\"\"\n        port_nodes = [\n            n\n            for n in self.graph.nodes()\n            if isinstance(n, Port) and self.graph.out_degree(n) == degree\n        ]\n        return port_nodes\n\n\nclass AdjacencyReducer(AdjacencyAnalyzer):\n    \"\"\"Adjacency candidate graph reducer\"\"\"\n\n    def reduce(self):\n        \"\"\"Find physical topology based on the graph\n\n        First LLDP and CDP data is analyzed. Then CAM data. The result\n        is stored in a new graph which can then be used to update\n        physical topology\n\n        \"\"\"\n        self.result = nx.DiGraph(name=\"network adjacency candidates\")\n        self._reduce_discovery_protocol(LLDP)\n        self._reduce_discovery_protocol(CDP)\n        self._remove_aggregates()\n        self._reduce_cam()\n        self.graph = self.result\n\n    def _reduce_cam(self):\n        \"\"\"Find topology based on CAM data.\n\n        The algorithm iterates over graph nodes starting with the\n        lowest order nodes. Then the outward edges of the node is\n        iterated over and if an edge is found where a suitable return\n        path is found the pair of nodes are removed from the graph and\n        added to the result, thus reducing the order of the remaining\n        nodes so that connections for these can be deduced more\n        correctly.\n\n        After the graph has been reduced, any port (tuple) node with\n        an out_degree of 1 are added to the result\n        \"\"\"\n        max_degree = self.get_max_out_degree()\n        _logger.debug(\"Analyzing graph with max degree %d\", max_degree)\n        degree = 1\n\n        while degree <= max_degree:\n            _logger.debug(\"At degree %s\", degree)\n            unvisited = self.get_ports_by_degree(degree)\n            _logger.debug(\"Found %d unvisited ports\", len(unvisited))\n            if not unvisited:\n                degree += 1\n                continue\n\n            if not self._visit_unvisited(unvisited):\n                degree += 1\n                continue\n        self.result.add_edges_from(self.get_single_edges_from_ports())\n\n    def _remove_aggregates(self):\n        \"\"\"Removes from the graph LAG ports whose aggregated (physical) ports\n        have already had their topology discovered.\n        \"\"\"\n        removeable = []\n        for aggregator, aggregated in self.aggregates.items():\n            if aggregator in self.graph:\n                if any(port in self.result for port in aggregated):\n                    removeable.append(aggregator)\n\n        if removeable:\n            for port in sorted(removeable, key=str):\n                _logger.debug(\n                    \"Ignoring aggregate %s [%s]\",\n                    port,\n                    ', '.join(str(s) for s in self.aggregates[port]),\n                )\n            self.graph.remove_nodes_from(removeable)\n\n    def _reduce_discovery_protocol(self, sourcetype):\n        done = False\n        while not done:\n            done = True\n            for source, dest, proto in list(self.graph.edges(keys=True)):\n                if (\n                    not isinstance(source, Port)\n                    or not isinstance(dest, Port)\n                    or proto != sourcetype\n                ):\n                    continue\n                if source == dest:\n                    _logger.info(\"Ignoring apparent %s self-loop on %s\", proto, source)\n                    self.graph.remove_edge(source, dest, proto)\n                    continue\n                if self.graph.has_edge(dest, source, proto):\n                    _logger.debug(\"Found connection from %s to %s\", source, dest)\n                    self.result.add_edge(source, dest)\n                    self.result.add_edge(dest, source)\n                    self.graph.remove_node(source)\n                    self.graph.remove_node(dest)\n                    done = False\n                    break\n                else:\n                    _logger.debug(\n                        \"Removing unmatched %s connection %s -> %s\", proto, source, dest\n                    )\n                    self.graph.remove_edge(source, dest, proto)\n\n    def _visit_unvisited(self, unvisited):\n        for port in unvisited:\n            for source, dest, proto in list(self.graph.edges(port, keys=True)):\n                _logger.debug(\"Considering %s -> %s, source %s\", source, dest, proto)\n                if dest == source[0]:\n                    _logger.warning(\n                        \"A possible self-loop was found: %r\", (source, dest)\n                    )\n                    self.graph.remove_edge(source, dest)\n                    continue\n\n                if self._is_single_dataless_destination(source, dest):\n                    self.connect_ports(source, dest)\n                    return True\n\n                remote_port = self.find_return_port(source, dest)\n                if remote_port:\n                    _logger.debug(\n                        \"Found connection %s -> %s because of good return path\",\n                        source,\n                        remote_port,\n                    )\n                    self.connect_ports(source, remote_port)\n                    return True\n            _logger.debug(\"Found no connection for %s\", port)\n        return False\n\n    def _is_single_dataless_destination(self, source, dest):\n        \"\"\"Returns True if dest has no candidate data and is the single distinct\n        candidate from source's data.\n        \"\"\"\n        if self.graph.out_degree(dest) > 0:\n            return False\n        distinct_edges = set(self.graph.edges(source))\n        if len(distinct_edges) == 1:\n            _logger.debug(\n                \"No data from %s, trusting single distinct candidate from %s\",\n                dest,\n                source,\n            )\n            return True\n        else:\n            return False\n\n    def connect_ports(self, i, j):\n        \"\"\"Add connection between a and b to result.\n\n        If a or b are of type Port they are removed from the input\n        graph, as they are now completely processed\n\n        \"\"\"\n        if isinstance(i, Port):\n            self.graph.remove_node(i)\n        if isinstance(j, Port):\n            self.graph.remove_node(j)\n\n        self.result.add_edge(i, j)\n        self.result.add_edge(j, i)\n\n\n# Graph builder functions\n\n\ndef build_candidate_graph_from_db():\n    \"\"\"Builds and returns a DiGraph conforming to the requirements of an\n    AdjacencyAnalyzer, based on data found in the adjacency_candidate database\n    table.\n\n    \"\"\"\n    acs = AdjacencyCandidate.objects.select_related(\n        'netbox', 'interface', 'to_netbox', 'to_interface'\n    )\n\n    graph = nx.MultiDiGraph(name=\"network adjacency candidates\")\n\n    for cand in acs:\n        if not cand.interface.is_admin_up():\n            continue  # ignore data from disabled interfaces\n        if cand.to_interface:\n            dest_node = interface_to_port(cand.to_interface)\n        else:\n            dest_node = Box(cand.to_netbox.id)\n            dest_node.name = cand.to_netbox.sysname\n\n        port = interface_to_port(cand.interface)\n        netbox = Box(cand.netbox.id)\n        netbox.name = cand.netbox.sysname\n\n        graph.add_edge(port, dest_node, cand.source)\n        graph.add_edge(netbox, port)\n\n    return graph\n\n\ndef get_aggregate_mapping(include_stacks=False):\n    \"\"\"Returns a dictionary describing each aggregator and its aggregated\n    ports\n\n    :type include_stacks: bool\n    :param include_stacks: Whether to interpret basic interface layering as\n                           evidence for LAG configuration (which isn't always\n                           the case)\n    :returns: { Port: { Port, ... }, ... }\n    \"\"\"\n    aggregates = _get_aggregates()\n    if include_stacks:\n        aggregates = chain(aggregates, _get_stacks())\n\n    mapping = defaultdict(set)\n    for aggregator, ifc in aggregates:\n        mapping[aggregator].add(ifc)\n\n    return mapping\n\n\ndef _get_stacks():\n    stacks = InterfaceStack.objects.select_related(\n        'higher', 'higher__netbox', 'lower', 'lower__netbox'\n    )\n    return (\n        (interface_to_port(agg.higher), interface_to_port(agg.lower)) for agg in stacks\n    )\n\n\ndef _get_aggregates():\n    aggregates = InterfaceAggregate.objects.select_related(\n        'aggregator', 'aggregator__netbox', 'interface', 'interface__netbox'\n    )\n    return (\n        (interface_to_port(agg.aggregator), interface_to_port(agg.interface))\n        for agg in aggregates\n    )\n\n\ndef interface_to_port(interface):\n    port = Port((interface.netbox.id, interface.id))\n    port.name = \"{ifc.netbox.sysname} ({ifc.ifname})\".format(ifc=interface)\n    return port\n"
  },
  {
    "path": "python/nav/topology/detector.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV network topology detection program\"\"\"\n\nfrom argparse import ArgumentParser\nfrom functools import wraps\nimport inspect\nimport logging\nimport sys\nimport atexit\n\nfrom django.db.models import Q\nimport django.db\n\nfrom nav import buildconf\nfrom nav import daemon\nfrom nav.debug import log_stacktrace, log_last_django_query\nfrom nav.logs import init_generic_logging\nfrom nav.topology.layer2 import update_layer2_topology\nfrom nav.topology.analyze import (\n    AdjacencyReducer,\n    build_candidate_graph_from_db,\n    get_aggregate_mapping,\n)\nfrom nav.topology.vlan import VlanGraphAnalyzer, VlanTopologyUpdater\n\nfrom nav.models.manage import Vlan, Prefix\n\nLOG_FILE = 'navtopology.log'\nPID_FILE = 'navtopology.pid'\n\n_logger = logging.getLogger(__name__)\n\n\ndef main():\n    \"\"\"Program entry point\"\"\"\n    parser = make_option_parser()\n    options = parser.parse_args()\n\n    init_generic_logging(\n        logfile=LOG_FILE,\n        stderr=options.stderr,\n        stdout=True,\n        read_config=True,\n    )\n    if options.l2 or options.vlan:\n        # protect against multiple invocations of long-running jobs\n        verify_singleton()\n    if options.l2:\n        do_layer2_detection()\n    if options.vlan:\n        if options.include_vlans:\n            vlans = [int(v) for v in options.include_vlans]\n        else:\n            vlans = []\n        do_vlan_detection(vlans)\n        delete_unused_prefixes()\n        delete_unused_vlans()\n\n\ndef int_list(value):\n    return [int(x) for x in value.split(\",\")]\n\n\ndef make_option_parser():\n    \"\"\"Sets up and returns a command line option parser.\"\"\"\n    parser = ArgumentParser(\n        description=(\"Detects and updates the network topology in your NAV database\")\n    )\n    parser.add_argument(\n        '--version', action='version', version='NAV ' + buildconf.VERSION\n    )\n    parser.add_argument(\"--l2\", action=\"store_true\", help=\"Detect physical topology\")\n    parser.add_argument(\"--vlan\", action=\"store_true\", help=\"Detect vlan subtopologies\")\n    parser.add_argument(\n        \"-i\",\n        dest=\"include_vlans\",\n        type=int_list,\n        metavar=\"vlan[,...]\",\n        help=\"Only analyze the VLANs included in this list\",\n    )\n    parser.add_argument(\n        \"-s\", \"--stderr\", action=\"store_true\", help=\"Log to stderr (even if not a tty)\"\n    )\n    return parser\n\n\ndef with_exception_logging(func):\n    \"\"\"Decorates a function to log unhandled exceptions\"\"\"\n\n    def _decorator(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except Exception:  # noqa: BLE001\n            stacktrace = inspect.trace()[1:]\n            _logger = logging.getLogger(__name__)\n            _logger.exception(\"An unhandled exception occurred\")\n            log_last_django_query(_logger)\n            log_stacktrace(logging.getLogger('nav.topology.stacktrace'), stacktrace)\n            raise\n\n    return wraps(func)(_decorator)\n\n\n@with_exception_logging\ndef do_layer2_detection():\n    \"\"\"Detect and update layer 2 topology\"\"\"\n    candidates = build_candidate_graph_from_db()\n    aggregates = get_aggregate_mapping(include_stacks=True)\n    reducer = AdjacencyReducer(candidates, aggregates)\n    reducer.reduce()\n    links = reducer.get_single_edges_from_ports()\n    update_layer2_topology(links)\n\n\n@with_exception_logging\ndef do_vlan_detection(vlans):\n    analyzer = VlanGraphAnalyzer()\n    if vlans:\n        analyzer.analyze_vlans_by_id(vlans)\n    else:\n        analyzer.analyze_all()\n    ifc_vlan_map = analyzer.add_access_port_vlans()\n    update = VlanTopologyUpdater(ifc_vlan_map)\n    update()\n\n\n@with_exception_logging\ndef delete_unused_vlans():\n    \"\"\"Deletes vlans unassociated with prefixes or switch ports\"\"\"\n    unused = Vlan.objects.filter(prefixes__isnull=True, swport_vlans__isnull=True)\n    if unused:\n        _logger.info(\"deleting unused vlans: %r\", unused)\n        unused.delete()\n\n\n@with_exception_logging\ndef delete_unused_prefixes():\n    \"\"\"\n    Deletes prefixes that are unassociated with any router port and were not\n    manually entered into NAV.\n    \"\"\"\n    holy_vlans = Q(vlan__net_type__in=('scope', 'reserved', 'static'))\n    unused_prefixes = Prefix.objects.filter(gwport_prefixes__isnull=True).exclude(\n        holy_vlans\n    )\n\n    if unused_prefixes:\n        _logger.info(\n            \"deleting unused prefixes: %s\",\n            \", \".join(p.net_address for p in unused_prefixes),\n        )\n        cursor = django.db.connection.cursor()\n        # Use raw SQL to avoid Django's emulated cascading deletes\n        cursor.execute(\n            'DELETE FROM prefix WHERE prefixid IN %s',\n            (tuple([p.id for p in unused_prefixes]),),\n        )\n\n\ndef verify_singleton():\n    \"\"\"Verifies that we are the single running navtopology process.\n\n    If a navtopology process is already running, we exit this process.\n\n    \"\"\"\n\n    try:\n        daemon.justme(PID_FILE)\n    except daemon.AlreadyRunningError as error:\n        print(\"navtopology is already running (%d)\" % error.pid, file=sys.stderr)\n        sys.exit(1)\n\n    daemon.writepidfile(PID_FILE)\n    atexit.register(daemon.daemonexit, PID_FILE)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/nav/topology/diff.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Diff stored and current topology\"\"\"\n\nfrom nav.models.manage import Interface\n\nfrom .analyze import (\n    AdjacencyReducer,\n    build_candidate_graph_from_db,\n    get_aggregate_mapping,\n)\nfrom .analyze import Box, Port\n\n\ndef printdiffs():\n    \"\"\"Test a live reduction and output a comparison of the stored topology\n    and the currently detected one.\n\n    \"\"\"\n    cand = build_candidate_graph_from_db()\n    aggregates = get_aggregate_mapping(include_stacks=True)\n    reducer = AdjacencyReducer(cand, aggregates)\n    reducer.reduce()\n\n    connections = reducer.get_single_edges_from_ports()\n\n    ifcs = Interface.objects.select_related('netbox', 'to_netbox', 'to_interface')\n\n    saved_links = ifcs.filter(to_netbox__isnull=False)\n    saved_links = dict((link.id, link) for link in saved_links)\n\n    found_links = dict((u[1], v) for u, v in connections)\n    found_link_ids = set(found_links)\n\n    new_link_ids = found_link_ids.difference(saved_links)\n    new_links = ifcs.filter(id__in=new_link_ids)\n    new_links = dict((link.id, link) for link in new_links)\n\n    deleted_link_ids = set(saved_links).difference(found_link_ids)\n    deleted_links = ifcs.filter(id__in=deleted_link_ids)\n    deleted_links = {link.id: link for link in deleted_links}\n\n    output = []\n    for port_id in found_link_ids.union(new_links).union(deleted_links):\n        if port_id in found_links and port_id in saved_links:\n            port = saved_links[port_id]\n            found_link = found_links[port_id]\n\n            diff = False\n            if isinstance(found_link, Box) and port.to_netbox.id != found_link:\n                diff = True\n            elif isinstance(found_link, Port) and (\n                port.to_netbox.id != found_link[0]\n                or not port.to_interface\n                or port.to_interface.id != found_link[1]\n            ):\n                diff = True\n            if diff:\n                output.append(\n                    \"%s (%s): %s%s -> %s\"\n                    % (\n                        port.netbox.sysname,\n                        port.ifname,\n                        port.to_netbox.sysname,\n                        (\n                            (\" (%s)\" % port.to_interface.ifname)\n                            if port.to_interface\n                            else ''\n                        ),\n                        found_link,\n                    )\n                )\n\n        elif port_id in new_links:\n            port = new_links[port_id]\n            found_link = found_links[port_id]\n\n            output.append(\n                \"%s (%s): no link -> %s\"\n                % (port.netbox.sysname, port.ifname, found_link)\n            )\n\n        elif port_id in saved_links and port_id not in found_links:\n            port = saved_links[port_id]\n            output.append(\n                \"%s (%s): %s%s -> no link\"\n                % (\n                    port.netbox.sysname,\n                    port.ifname,\n                    port.to_netbox.sysname,\n                    ((\" (%s)\" % port.to_interface.ifname) if port.to_interface else ''),\n                )\n            )\n\n    output.sort()\n    print('\\n'.join(output))\n\n\nif __name__ == '__main__':\n    printdiffs()\n"
  },
  {
    "path": "python/nav/topology/layer2.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Functions for updating the database's layer 2 topology\"\"\"\n\nimport logging\n\nfrom django.db import transaction\nfrom django.db.models import Q\n\nfrom nav.topology.analyze import Port\n\nfrom nav.models.manage import Interface, Netbox\n\n\n_logger = logging.getLogger(__name__)\n\n\n@transaction.atomic()\ndef update_layer2_topology(links):\n    \"\"\"Updates the layer 2 topology in the NAV database.\n\n    :param links: a list of edges from an adjacency graph\n\n    \"\"\"\n    for source, dest in links:\n        _update_interface_topology(source, dest)\n\n    touched_ifc_ids = [source[1] for source, _dest in links]\n    _clear_topology_for_nontouched(touched_ifc_ids)\n    _clear_topology_for_mismatched_state_links()\n\n\ndef _update_interface_topology(source_node, dest_node):\n    \"\"\"Updates topology information for the source_node Interface.\n\n    The interface's topology will _only_ be updated if its netbox is up, it is\n    administratively up, is not missing, and its current topology information\n    differs from what we want to set it to.\n\n    \"\"\"\n    _netboxid, interfaceid = source_node\n    ifc = Interface.objects.filter(\n        id=interfaceid,\n        ifadminstatus=Interface.ADM_UP,\n        netbox__up=Netbox.UP_UP,\n        gone_since__isnull=True,\n    )\n\n    if isinstance(dest_node, Port):\n        kwargs = {'to_netbox': int(dest_node[0]), 'to_interface': int(dest_node[1])}\n    else:\n        kwargs = {'to_netbox': int(dest_node), 'to_interface': None}\n\n    ifc = ifc.exclude(**kwargs)\n    ifc.update(**kwargs)\n\n\ndef _clear_topology_for_nontouched(touched_ifc_ids):\n    \"\"\"Clears topology information for all interfaces that are administratively\n    up, except for those in the touched_ifc_ids list and those who currently\n    have no associated topology information.\n\n    \"\"\"\n    up_or_disabled = Q(ifoperstatus=Interface.OPER_UP) | Q(\n        ifadminstatus=Interface.ADM_DOWN\n    )\n    up_or_disabled_ifcs = Interface.objects.filter(\n        up_or_disabled, netbox__up=Netbox.UP_UP\n    )\n    nontouched_ifcs = up_or_disabled_ifcs.exclude(id__in=touched_ifc_ids)\n    clearable_ifcs = nontouched_ifcs.exclude(to_netbox__isnull=True)\n    clearable_ifcs.update(to_netbox=None, to_interface=None)\n\n\ndef _clear_topology_for_mismatched_state_links():\n    \"\"\"\n    Clears topology for all interfaces that are down, but where the link\n    partner is still up.\n\n    This is a clear indication that the topology for an Interface has gone\n    stale.\n    \"\"\"\n    mismatched = Interface.objects.filter(\n        ifoperstatus=Interface.OPER_DOWN,\n        to_interface__ifoperstatus=Interface.OPER_UP,\n    )\n    count = mismatched.count()\n    if count > 0:\n        _logger.debug(\"deleting stale topology for %d operDown interfaces\", count)\n    mismatched.update(to_netbox=None, to_interface=None)\n"
  },
  {
    "path": "python/nav/topology/vlan.py",
    "content": "#\n# Copyright (C) 2011-2015, 2017, 2018 Uninett AS\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Analysis of VLAN topology as subset of layer 2 topology\"\"\"\n\nfrom collections import defaultdict\nfrom itertools import groupby, chain\nimport logging\nfrom operator import attrgetter\n\nimport networkx as nx\nfrom IPy import IP\n\nfrom django.db.models import Q\nfrom django.db import transaction\n\nfrom nav.models.manage import (\n    GwPortPrefix,\n    Interface,\n    SwPortVlan,\n    SwPortBlocked,\n    Prefix,\n    Vlan,\n)\n\nfrom nav.netmap import stubs\n\n_logger = logging.getLogger(__name__)\nNO_TRUNK = Q(trunk=False) | Q(trunk__isnull=True)\n\n\nclass VlanGraphAnalyzer(object):\n    \"\"\"Analyzes VLAN topologies as a subset of the layer 2 topology\"\"\"\n\n    def __init__(self):\n        self.routed_vlans = self._build_vlan_router_dict()\n        self.unrouted_vlans = self._build_unrouted_vlan_seed_dict()\n        self.layer2 = build_layer2_graph()\n        self.stp_blocked = get_stp_blocked_ports()\n        _logger.debug(\"blocked ports: %r\", self.stp_blocked)\n        self.ifc_vlan_map = {}\n\n    @staticmethod\n    def _build_vlan_router_dict():\n        \"\"\"Builds a dictionary of {vlan: GwPortPrefix} mappings.\n\n        For each VLAN, and IPv4 address is preferred over an IPv6 address,\n        and lower addresses are preferred over higher ones.\n\n        \"\"\"\n\n        def _sortkey(gwp):\n            ip = IP(gwp.gw_ip)\n            return ip.version(), ip\n\n        addrs = sorted(get_active_addresses_of_routed_vlans(), key=_sortkey)\n        return dict((addr.prefix.vlan, addr) for addr in reversed(addrs))\n\n    def _build_unrouted_vlan_seed_dict(self):\n        return {\n            x\n            for x in Vlan.objects.filter(\n                prefixes__isnull=True, netbox__isnull=False\n            ).iterator()\n        }\n\n    def analyze_all(self):\n        \"\"\"Analyze all VLAN topologies\"\"\"\n        for vlan in sorted(self.routed_vlans, key=lambda x: x.vlan):\n            _logger.debug(\"Analyzing routed VLAN %s\", vlan)\n            self.analyze_vlan(vlan)\n        while self.unrouted_vlans:\n            vlan = min(self.unrouted_vlans, key=_unrouted_vlan_sort)\n            self.unrouted_vlans.remove(vlan)\n            if vlan.netbox not in self.layer2:\n                continue\n            _logger.debug(\"Analyzing unrouted VLAN %s\", vlan)\n            self.analyze_vlan(vlan)\n        return self.ifc_vlan_map\n\n    def analyze_vlans_by_id(self, vlans):\n        \"\"\"Analyzes a list of VLANs by their PVIDs\"\"\"\n        vlan_id_map = {vlan.vlan: vlan for vlan in self.routed_vlans.keys()}\n        vlan_id_map.update({vlan.vlan: vlan for vlan in self.unrouted_vlans})\n        for vlan in vlans:\n            if vlan in vlan_id_map:\n                self.analyze_vlan(vlan_id_map[vlan])\n\n    def analyze_vlan(self, vlan):\n        \"\"\"Analyzes a single vlan\"\"\"\n        if vlan in self.routed_vlans:\n            addr = self.routed_vlans[vlan]\n            analyzer = RoutedVlanTopologyAnalyzer(addr, self.layer2, self.stp_blocked)\n        else:\n            seed_netbox = vlan.netbox\n            analyzer = UnroutedVlanTopologyAnalyzer(\n                vlan, seed_netbox, self.layer2, self.stp_blocked\n            )\n        topology = analyzer.analyze()\n        self._integrate_vlan_topology(vlan, topology)\n        self._prune_unrouted_vlans(vlan, topology)\n\n    def _prune_unrouted_vlans(self, vlan, topology):\n        for ifc in topology:\n            for cand in list(self.unrouted_vlans):\n                if cand.vlan == vlan.vlan and cand.netbox == ifc.netbox:\n                    _logger.debug(\"pruning vlan %s because of %s\", cand, vlan)\n                    self.unrouted_vlans.remove(cand)\n\n    def _integrate_vlan_topology(self, vlan, topology):\n        for ifc, direction in topology.items():\n            if ifc not in self.ifc_vlan_map:\n                self.ifc_vlan_map[ifc] = {}\n            self.ifc_vlan_map[ifc][vlan] = direction\n\n    def add_access_port_vlans(self):\n        \"\"\"Detects and adds Vlan entries for access ports to the ifc_vlan_map\"\"\"\n        access_vlan_map = dict(self.find_access_port_vlans())\n        self.ifc_vlan_map.update(access_vlan_map)\n        return self.ifc_vlan_map\n\n    def find_access_port_vlans(self):\n        \"\"\"Finds and yields the vlans of access ports.\n\n        After the analyze_all step, the ifc_vlan_map will normally only\n        contain vlans for uplink/downlink ports, not access ports.  This\n        method will find the actual vlan objects of each of the switch access\n        ports and yield those as tuples: (interface, {vlan: 'down'}).  These\n        can be made into a dictionary suitable for updating ifc_vlan_map.\n\n        \"\"\"\n        groups = groupby(self.ifc_vlan_map, lambda ifc: ifc.netbox)\n        for netbox, ifcs in groups:\n            for result in self._find_netbox_access_vlans(netbox, list(ifcs)):\n                yield result\n\n    def _find_netbox_access_vlans(self, netbox, ifcs):\n        vlans = chain(*(self.ifc_vlan_map[ifc].keys() for ifc in ifcs))\n        active_vlans = dict((vlan.vlan, vlan) for vlan in vlans)\n\n        access_ifcs = (\n            netbox.interfaces.filter(vlan__isnull=False)\n            .filter(NO_TRUNK)\n            .exclude(id__in=(ifc.id for ifc in ifcs))\n        )\n        for ifc in access_ifcs:\n            if ifc.vlan in active_vlans:\n                yield ifc, {active_vlans[ifc.vlan]: 'down'}\n\n\nclass RoutedVlanTopologyAnalyzer(object):\n    \"\"\"Analyzer of a single routed VLAN topology\"\"\"\n\n    def __init__(self, address, layer2_graph, stp_blocked=None):\n        \"\"\"Initializes an analyzer for a given routed VLAN.\n\n        :param address: A GwPortPrefix representing the router address of this\n                        VLAN.\n        :param layer2_graph: A layer 2 graph, as produced by the\n                             build_layer2_graph() function.\n\n        \"\"\"\n        self.address = address\n        self.layer2 = layer2_graph\n\n        self.vlan = address.prefix.vlan\n        self.router_port = address.interface\n        self.router = self.router_port.netbox\n\n        self.stp_blocked = stp_blocked or {}\n        self.ifc_directions = {}\n        self.edge_directions = {}\n\n    def analyze(self):\n        \"\"\"Runs the analysis on the associdated VLAN\"\"\"\n        if self.router in self.layer2:\n            if not self.router_port.to_netbox:\n                # likely a GSW, descend on its switch ports by faking an edge\n                start_edge = (self.router, self.router, None)\n            else:\n                start_edge = (self.router, self.router_port.to_netbox, self.router_port)\n            self._examine_edge(start_edge)\n\n        return self.ifc_directions\n\n    def _examine_edge(self, edge, visited_nodes=None):\n        source, dest, ifc = edge\n\n        visited_nodes = visited_nodes or set()\n        is_visited_before = dest in visited_nodes\n        if (source, dest) in self.edge_directions:\n            direction = self.edge_directions[(source, dest)]\n        else:\n            direction = 'up' if is_visited_before else 'down'\n            self.edge_directions[(source, dest)] = direction\n        visited_nodes.add(dest)\n\n        vlan_is_active = (\n            direction == 'up'\n            and self._vlan_is_active_on_reverse_edge(edge, visited_nodes)\n        ) or self._is_vlan_active_on_destination(dest, ifc)\n\n        if direction == 'down' and not is_visited_before:\n            # Recursive depth first search on each outgoing edge\n            for next_edge in self._out_edges_on_vlan(dest):\n                if not self._is_blocked_on_any_end(next_edge):\n                    self._log_descent(next_edge)\n                    sub_active = self._examine_edge(next_edge, visited_nodes)\n                    vlan_is_active = vlan_is_active or sub_active\n                else:\n                    vlan_is_active = False\n                    self._mark_both_ends_as_blocked(next_edge)\n                    self._log_block(next_edge)\n\n        if vlan_is_active and ifc:\n            _logger.debug(\n                \"(%s) setting %s direction: %s\", self.vlan.vlan, ifc, direction\n            )\n            self.ifc_directions[ifc] = direction\n\n        return vlan_is_active\n\n    def _vlan_is_active_on_reverse_edge(self, edge, visited_nodes):\n        _source, dest, ifc = edge\n        reverse_edge = self._find_reverse_edge(edge)\n        if reverse_edge:\n            reverse_ifc = reverse_edge[2]\n            been_there = (\n                self._interface_has_been_seen_before(reverse_ifc)\n                or dest in visited_nodes\n            )\n            if been_there:\n                return self._ifc_has_vlan(ifc)\n        return False\n\n    def _find_reverse_edge(self, edge):\n        source, dest, ifc = edge\n        dest_ifc = ifc.to_interface\n\n        if source in self.layer2[dest]:\n            if dest_ifc and dest_ifc in self.layer2[dest][source]:\n                return dest, source, dest_ifc\n            else:\n                # pick first available return edge when any exist\n                return dest, source, list(self.layer2[dest][source].keys())[0]\n\n    def _interface_has_been_seen_before(self, ifc):\n        return ifc in self.ifc_directions\n\n    def _is_vlan_active_on_destination(self, dest, ifc):\n        if not ifc:\n            return False\n\n        if not ifc.trunk:\n            return self._ifc_has_vlan(ifc)\n        else:\n            non_trunks_on_vlan = dest.interfaces.filter(vlan=self.vlan.vlan).filter(\n                NO_TRUNK\n            )\n            if ifc.to_interface:\n                non_trunks_on_vlan = non_trunks_on_vlan.exclude(id=ifc.to_interface.id)\n\n            return non_trunks_on_vlan.count() > 0\n\n    def _out_edges_on_vlan(self, node):\n        return (\n            (u, v, w)\n            for u, v, w in self.layer2.out_edges(node, keys=True)\n            if self._ifc_has_vlan(w)\n        )\n\n    def _ifc_has_vlan(self, ifc):\n        return ifc.vlan == self.vlan.vlan or self._vlan_allowed_on_trunk(ifc)\n\n    def _vlan_allowed_on_trunk(self, ifc):\n        return (\n            ifc.trunk\n            and getattr(ifc, 'swport_allowed_vlan', None)\n            and self.vlan.vlan in ifc.swport_allowed_vlan\n        )\n\n    def _is_blocked_on_any_end(self, edge):\n        \"\"\"Returns True if at least one of the edge endpoints are blocked\"\"\"\n        reverse_edge = self._find_reverse_edge(edge)\n        if not reverse_edge:\n            _logger.debug(\"could not find reverse edge for %r\", edge)\n        return self._is_edge_blocked(edge) or self._is_edge_blocked(reverse_edge)\n\n    def _is_edge_blocked(self, edge):\n        if edge:\n            _source, _dest, ifc = edge\n            return self.vlan.vlan in self.stp_blocked.get(ifc.id, [])\n        return False\n\n    def _log_descent(self, next_edge):\n        source, dest, ifc = next_edge\n        _logger.debug(\n            \"(%s) descending from %s (%s [%d]) to %s\",\n            self.vlan.vlan,\n            source.sysname,\n            ifc.ifname,\n            ifc.id,\n            dest.sysname,\n        )\n\n    def _log_block(self, next_edge):\n        source, _dest, source_ifc = next_edge\n        reverse_edge = self._find_reverse_edge(next_edge)\n        if reverse_edge:\n            dest, _source, dest_ifc = reverse_edge\n            _logger.info(\n                \"at least one of %s (%s) <-> %s (%s) is blocked on VLAN %s\",\n                source.sysname,\n                source_ifc.ifname,\n                dest.sysname,\n                dest_ifc.ifname,\n                self.vlan.vlan,\n            )\n        else:\n            _logger.info(\n                \"%s (%s) is blocked on VLAN %s\",\n                source.sysname,\n                source_ifc.ifname,\n                self.vlan.vlan,\n            )\n\n    def _mark_both_ends_as_blocked(self, edge):\n        _source, _dest, source_ifc = edge\n        self.ifc_directions[source_ifc] = 'blocked'\n        reverse_edge = self._find_reverse_edge(edge)\n        if reverse_edge:\n            _dest, _source, dest_ifc = reverse_edge\n            self.ifc_directions[dest_ifc] = 'blocked'\n\n\nclass UnroutedVlanTopologyAnalyzer(RoutedVlanTopologyAnalyzer):\n    \"\"\"Analyzer of a single unrouted VLAN topology\"\"\"\n\n    def __init__(self, vlan, seed, layer2_graph, stp_blocked=None):\n        \"\"\"Initializes an analyzer for a given unrouted VLAN.\n\n        :param layer2_graph: A layer 2 graph, as produced by the\n                             build_layer2_graph() function.\n\n        \"\"\"\n        self.layer2 = layer2_graph\n        self.stp_blocked = stp_blocked or {}\n        self.ifc_directions = {}\n        self.edge_directions = {}\n        self.seed_netbox = seed\n        self.vlan = vlan\n\n    def analyze(self):\n        start_edge = (self.seed_netbox, self.seed_netbox, None)\n        self._examine_edge(start_edge)\n        return {ifc: 'undefined' for ifc in self.ifc_directions}\n\n\nclass VlanTopologyUpdater(object):\n    \"\"\"Updater of the VLAN topology.\n\n    Usage example:\n\n      >>> a = VlanGraphAnalyzer()\n      >>> ifc_vlan_map = a.analyze_all()\n      >>> updater = VlanTopologyUpdater(ifc_vlan_map)\n      >>> updater()\n      >>>\n\n    \"\"\"\n\n    def __init__(self, ifc_vlan_map):\n        \"\"\"Initializes a vlan topology updater.\n\n        :param ifc_vlan_map: A dictionary mapping interfaces to Vlans and\n                             directions; just as returned by a call to\n                             VlanGraphAnalyzer.analyze_all().\n\n        \"\"\"\n        self.ifc_vlan_map = ifc_vlan_map\n\n    def __call__(self):\n        return self.update()\n\n    @transaction.atomic()\n    def update(self):\n        \"\"\"Updates the VLAN topology in the NAV database\"\"\"\n        for ifc, vlans in self.ifc_vlan_map.items():\n            for vlan, dirstr in vlans.items():\n                self._update_or_create_new_swportvlan_entry(ifc, vlan, dirstr)\n            self._remove_dead_swpvlan_records_for_ifc(ifc)\n\n        self._delete_swportvlans_from_untouched_ifcs()\n\n    @classmethod\n    def _update_or_create_new_swportvlan_entry(cls, ifc, vlan, dirstr):\n        direction = cls._direction_from_string(dirstr)\n        obj, created = SwPortVlan.objects.get_or_create(\n            interface=ifc, vlan=vlan, defaults={'direction': direction}\n        )\n        if not created and obj.direction != direction:\n            obj.direction = direction\n            obj.save()\n        return object\n\n    DIRECTION_MAP = {\n        'up': SwPortVlan.DIRECTION_UP,\n        'down': SwPortVlan.DIRECTION_DOWN,\n        'blocked': SwPortVlan.DIRECTION_BLOCKED,\n        'undefined': SwPortVlan.DIRECTION_UNDEFINED,\n    }\n\n    @classmethod\n    def _direction_from_string(cls, string):\n        return (\n            cls.DIRECTION_MAP[string]\n            if string in cls.DIRECTION_MAP\n            else SwPortVlan.DIRECTION_UNDEFINED\n        )\n\n    def _remove_dead_swpvlan_records_for_ifc(self, ifc):\n        records_for_ifc = SwPortVlan.objects.filter(interface=ifc)\n        active_vlans = self.ifc_vlan_map[ifc].keys()\n        dead = records_for_ifc.exclude(vlan__in=active_vlans)\n        dead.delete()\n\n    def _delete_swportvlans_from_untouched_ifcs(self):\n        \"\"\"Deletes old swportvlan entries that weren't touched by this update\"\"\"\n        # this can turn into a rather huge, and surprisingly inefficient SQL\n        # statement if we let PostgreSQL do all the work, so we calculate the\n        # set difference using Python instead\n        touched_interfaceids = set(ifc.pk for ifc in self.ifc_vlan_map)\n        existing_interfaceids = set(\n            SwPortVlan.objects.distinct().values_list('interface__id', flat=True)\n        )\n        to_delete = existing_interfaceids.difference(touched_interfaceids)\n        if to_delete:\n            _logger.debug(\n                \"deleting obsolete swpvlan records for these ifcs: %s\", to_delete\n            )\n            SwPortVlan.objects.filter(interface__id__in=to_delete).delete()\n\n\ndef build_layer2_graph(related_extra=None):\n    \"\"\"Builds a graph representation of the layer 2 topology stored in the NAV\n    database.\n\n    :param related_extra Additional selection_related fields\n\n    :returns: A MultiDiGraph of Netbox nodes, edges annotated with Interface\n              model objects.\n\n    \"\"\"\n    graph = nx.MultiDiGraph(name=\"Layer 2 topology\")\n\n    select_related = ('netbox', 'to_netbox', 'to_interface')\n    if related_extra:\n        select_related = select_related + related_extra\n\n    links = Interface.objects.filter(to_netbox__isnull=False).select_related(\n        *select_related\n    )\n\n    for link in links:\n        dest = link.to_interface.netbox if link.to_interface else link.to_netbox\n        graph.add_edge(link.netbox, dest, key=link)\n    return graph\n\n\ndef build_layer3_graph(related_extra=None):\n    \"\"\"Build a graph representation of the layer 3 topology stored in the NAV\n    database.\n\n    :param related_extra Additional selection_related fields\n\n    : returns: A MultiDiGraph of Netbox nodes, edges annotated with Interface\n               model objects.\n    \"\"\"\n    graph = nx.MultiGraph(name=\"Layer 3 topology\")\n\n    select_related = (\n        'interface__netbox',\n        'interface__to_netbox',\n        'interface__to_interface',\n        'interface__to_interface__netbox',\n    )\n    if related_extra:\n        select_related = select_related + related_extra\n\n    prefixes = (\n        Prefix.objects.filter(vlan__net_type__in=('link', 'elink', 'core'))\n        .extra(\n            where=[\n                'NOT (family(netaddr) = 4 AND masklen(netaddr) = 32)',\n                'NOT (family(netaddr) = 6 AND masklen(netaddr) = 128)',\n            ]\n        )\n        .select_related(\"vlan__net_type\")\n    )\n\n    router_ports = GwPortPrefix.objects.filter(\n        prefix__in=prefixes, interface__netbox__category__in=('GW', 'GSW')\n    ).select_related(*select_related)\n\n    router_ports_prefix_map = defaultdict(list)\n    for router_port in router_ports:\n        router_ports_prefix_map[router_port.prefix].append(router_port)\n\n    def _add_edge(gwportprefixes_in_prefix):\n        \"\"\"\n        Adds connections between netboxes in gwportprefix (fully connected\n        network) note: loop/self.loop edges should _NOT_ use this method for\n        adding the loop to the graph.\n        \"\"\"\n        for this in gwportprefixes_in_prefix:\n            for gwpp in gwportprefixes_in_prefix:\n                if this is not gwpp:\n                    graph.add_edge(this, gwpp, key=this.prefix)\n\n    for prefix in prefixes:\n        gwportprefixes = router_ports_prefix_map.get(prefix)\n        if gwportprefixes:\n            if prefix.vlan.net_type.id == 'elink':\n                if len(gwportprefixes) > 1:\n                    # Special case, (horrible) check if it's a local loopback\n                    # to same netbox.\n                    #\n                    # d3js force directed doesn't show loopback edges,\n                    # but we'll include it in the graph metadata, in case we\n                    # fix the visualizing later.\n\n                    # take first GwPortPrefix in list of GwPortPrefixes,\n                    # and use as base to check for loop back edges linking to\n                    #  the same netbox.\n                    gwpp_match = gwportprefixes[0]\n\n                    if [\n                        u.interface.netbox == gwpp_match.interface.netbox\n                        for u in gwportprefixes\n                    ].count(True) >= 2:\n                        for u in gwportprefixes:\n                            for v in gwportprefixes:\n                                if u is not v:\n                                    graph.add_edge(u, v, key=prefix)\n\n                    else:\n                        # If not, we'll add the edge anyway and log a warning\n                        # about topology detector should really not classify\n                        # this as an elink. (since we found >1 known gwpp's\n                        # in given prefix means it shold be a link or core.)\n                        _logger.warning(\n                            \"Topology error? %s classified as elink, \"\n                            \"we know %s GwPortPrefixes ...\",\n                            str(prefix),\n                            len(gwportprefixes),\n                        )\n                        _add_edge(gwportprefixes)\n                else:\n                    fictive_gwportprefix = stubs.GwPortPrefix()\n                    fictive_netbox = stubs.Netbox()\n                    if gwportprefixes[0].prefix.vlan.net_ident:\n                        fictive_netbox.sysname = str(\n                            gwportprefixes[0].prefix.vlan.net_ident\n                        )\n                    else:\n                        fictive_netbox.sysname = str(\n                            gwportprefixes[0].interface.ifalias\n                        )\n                    fictive_netbox.category_id = 'elink'\n                    fictive_netbox.id = fictive_netbox.sysname\n\n                    fictive_interface = stubs.Interface()\n                    fictive_interface.netbox = fictive_netbox\n                    fictive_interface.ifname = (\n                        \"N/A (peer of %s)\" % gwportprefixes[0].gw_ip\n                    )\n                    fictive_interface.speed = None\n\n                    fictive_gwportprefix.interface = fictive_interface\n                    fictive_gwportprefix.gw_ip = fictive_netbox.sysname\n                    fictive_gwportprefix.prefix = prefix\n\n                    graph.add_edge(gwportprefixes[0], fictive_gwportprefix, key=prefix)\n\n            else:\n                _add_edge(gwportprefixes)\n    return graph\n\n\ndef get_active_addresses_of_routed_vlans():\n    \"\"\"Gets a single router port address for each routed VLAN.\n\n    :returns: A list of GwPortPrefix objects.\n\n    \"\"\"\n    addrs = get_routed_vlan_addresses().select_related(\n        'prefix__vlan', 'interface__netbox'\n    )\n    return filter_active_router_addresses(addrs)\n\n\ndef filter_active_router_addresses(gwportprefixes):\n    \"\"\"Filters a GwPortPrefix queryset, leaving only active router addresses.\n\n    For any given prefix, if multiple router addresses exist, the lowest IP\n    address will be picked.  If the prefix has a virtual address, it will be\n    picked instead.\n\n    :param gwportprefixes: A GwPortPrefix QuerySet.\n    :returns: A list of GwPortPrefix objects.\n\n    \"\"\"\n    # It is more or less impossible to get Django's ORM to generate the\n    # wonderfully complex SQL needed for this, so we do it by hand.\n    raddrs = gwportprefixes.order_by('prefix__id', '-virtual', 'gw_ip')\n    grouper = groupby(raddrs, attrgetter('prefix_id'))\n    return [next(group) for _key, group in grouper]\n\n\ndef get_routed_vlan_addresses():\n    \"\"\"Gets router port addresses for all routed VLANs.\n\n    :returns: A GwPortPrefix QuerySet.\n\n    \"\"\"\n    raddrs = get_router_addresses()\n    return raddrs.filter(prefix__vlan__vlan__isnull=False)\n\n\ndef get_router_addresses():\n    \"\"\"Gets all router port addresses.\n\n    :returns: A GwPortPrefix QuerySet.\n\n    \"\"\"\n    return GwPortPrefix.objects.filter(\n        interface__netbox__category__id__in=('GW', 'GSW')\n    )\n\n\ndef get_stp_blocked_ports():\n    \"\"\"Returns a dictionary of ports in STP blocking mode.\n\n    :returns: A dictionary: {interfaceid: [vlan1, vlan2, ...]}\n\n    \"\"\"\n    blocked = defaultdict(list)\n    for block in SwPortBlocked.objects.all():\n        blocked[block.interface_id].append(block.vlan)\n    return dict(blocked)\n\n\ndef _unrouted_vlan_sort(vlan):\n    return vlan.vlan * 10 + (0 if vlan.has_meaningful_net_ident() else 1)\n"
  },
  {
    "path": "python/nav/toposort.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Functions for topological sorting of graph nodes.\"\"\"\n\n\ndef build_graph(objects, dependency_calculator):\n    \"\"\"Return a graph representation of the objects list.\n\n    Arguments:\n\n        objects -- a list of objects (nodes) in the graph\n        dependency_calculator -- a function that takes an object as its\n                                 argument and returns a list of its dependent\n                                 objects.\n\n    Returns:\n\n       A dictionary describing the edges/arcs between the nodes in the graph:\n\n       {'A': ['B', 'C'],  # Directed edges from 'A' to 'B' and 'C'\n        'B': ['D'],       # Directed edges from 'B' to 'D'\n        'C': [],          # No directed edges from C\n        'D': []           # No directed edges from D\n       }\n\n    \"\"\"\n    graph = {}\n    for obj in objects:\n        dependencies = dependency_calculator(obj)\n        graph[obj] = dependencies\n        # safeguard to make sure all nodes are represented as keys\n        for other_obj in dependencies:\n            if other_obj not in graph:\n                graph[other_obj] = []\n    return graph\n\n\ndef topological_sort(graph):\n    \"\"\"Sort a graph of nodes topologically.\n\n    Uses the algorithm described by Cormen, Leiserson & Rivest (1990).\n\n    Arguments:\n\n      nodes -- A dictionary describing a graph of node objects, such as the\n               ones returned from the build_graph() function.\n\n\n    Returns:\n\n      A new list with the sorted nodes.\n\n    \"\"\"\n    sorted_nodes = []\n    all_nodes = graph.keys()\n    visited = set()\n\n    def visit(node):\n        if node not in visited:\n            visited.add(node)\n            for other_node in graph[node]:\n                visit(other_node)\n            sorted_nodes.append(node)\n\n    for node in all_nodes:\n        visit(node)\n\n    return sorted_nodes\n"
  },
  {
    "path": "python/nav/util.py",
    "content": "#\n# Copyright (C) 2007, 2011-2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"General utility functions for Network Administration Visualized\"\"\"\n\nimport os\nimport re\nimport stat\nimport socket\nimport time\nimport datetime\nfrom functools import wraps\nfrom importlib.resources import as_file, files as resource_files\nfrom itertools import chain, tee, groupby, islice\nfrom operator import itemgetter\nfrom secrets import token_hex\n\nimport IPy\n\n\ndef gradient(start, stop, steps):\n    \"\"\"Create and return a sequence of steps representing an integer\n    gradient from the start value to the stop value.\n\n    The more steps, the smoother the gradient.\"\"\"\n    distance = stop - start\n    # Reduce by 1 step to include both endpoints, but never reduce it\n    # to zero (we always want at least to values)\n    steps = steps - 1 if steps > 1 else 1\n    increment = distance / float(steps)\n    grad = []\n    for i in range(steps):\n        grad.append(int(round(start + i * increment)))\n    grad.append(stop)\n    return grad\n\n\ndef color_gradient(start, stop, steps):\n    \"\"\"Does the same as the gradient function, but the start and\n    stop values are RGB triplets (3-element tuples)\"\"\"\n    red = gradient(start[0], stop[0], steps)\n    green = gradient(start[1], stop[1], steps)\n    blue = gradient(start[2], stop[2], steps)\n\n    grad = zip(red, green, blue)\n    return list(grad)\n\n\ndef colortohex(triplet):\n    \"\"\"Returns a hexadecimal string representation of a 3-tuple RGB\n    color triplet.\n\n    Useful for converting internal color triplets to web\n    representation.\"\"\"\n    return ('%02x' * 3) % triplet\n\n\ndef is_valid_ip(ip, strict=False):\n    \"\"\"Verifies that a string is a single, valid IPv4 or IPv6 address.\n\n    :param ip: The string to test for validity\n    :param strict: If False, the quite lax rules of IPy.IP will be used to validate the\n                   IP address - partial IP addresses and even integers will parsed.\n                   If True, the stricter rules of the system socket library are used.\n    \"\"\"\n    if strict:\n        return _is_valid_ip_socket(ip)\n    else:\n        return _is_valid_ip_ipy(ip)\n\n\ndef _is_valid_ip_socket(ip):\n    \"\"\"Checks for ip validity using the socket library\"\"\"\n    try:\n        socket.inet_pton(socket.AF_INET, ip)  # IPv4\n    except socket.error:\n        try:\n            socket.inet_pton(socket.AF_INET6, ip)  # IPv6\n        except socket.error:\n            return False\n        else:\n            return True\n    except UnicodeError:\n        # Definitely not an IP address!\n        return False\n    else:\n        return True\n\n\ndef _is_valid_ip_ipy(ip):\n    \"\"\"Checks for ip validity using the IPy library\n\n    A cleaned up version of the IP address string is returned if it is verified,\n    otherwise a false value is returned.\n    \"\"\"\n    if isinstance(ip, str) and not ip.isdigit():\n        try:\n            valid_ip = IPy.IP(ip)\n            if valid_ip.len() == 1:\n                return str(valid_ip)\n        except ValueError:\n            pass\n    return False\n\n\ndef is_valid_cidr(cidr):\n    \"\"\"Verifies that a string is valid IPv4 or IPv6 CIDR specification.\n\n    A cleaned up version of the CIDR string is returned if it is verified,\n    otherwise a false value is returned.\n\n    Uses the IPy library to verify addresses.\n    \"\"\"\n    if isinstance(cidr, str) and not cidr.isdigit() and '/' in cidr:\n        try:\n            valid_cidr = IPy.IP(cidr) is not None\n        except (ValueError, TypeError):\n            return False\n        else:\n            return valid_cidr\n    return False\n\n\ndef is_valid_mac(mac):\n    \"\"\"Verify that this mac-address is valid\"\"\"\n    if re.match(\"[0-9a-f]{2}([-:][0-9a-f]{2}){5}$\", mac.lower()):\n        return True\n    return False\n\n\ndef which(cmd, search_path=None):\n    \"\"\"Returns the full path of cmd if found in a list of search paths and it\n    is executable.\n\n    :param cmd: Name of an executable file.\n    :param search_path: List of search paths. If omitted, the OS environment\n                        variable PATH is used.\n    :returns: A full path to cmd, or None if not found or not executable.\n\n    \"\"\"\n    if search_path is None:\n        search_path = os.environ['PATH'].split(':')\n    paths = (os.path.join(path, cmd) for path in search_path)\n\n    for path in paths:\n        if os.path.isfile(path) and os.access(path, os.X_OK):\n            return path\n\n\ndef is_setuid_root(path):\n    \"\"\"Return True if the file is owned by root and has\n    the setuid bit set.\"\"\"\n\n    # Can't be setuid root if it's not there.\n    if not os.path.isfile(path):\n        return False\n\n    pstat = os.stat(path)\n\n    # Owned by root?\n    if pstat.st_uid != 0:\n        return False\n\n    # Setuid bit set?\n    if pstat.st_mode & stat.S_ISUID == 0:\n        return False\n\n    # Yay, passed all test!\n    return True\n\n\ndef mergedicts(*dicts):\n    \"\"\"Merges a sequence of dictionaries in order.\n\n    Example usage:\n\n    >>> d1 = {1: 10, 2: 20}\n    >>> d2 = {1: 100, 2: 200, 3: 300}\n    >>> mergedicts(d1, d2)\n    {1: [10, 100], 2: [20, 200], 3: [None, 300]}\n\n    \"\"\"\n    keys = chain(*dicts)\n    return dict((k, [d.get(k, None) for d in dicts]) for k in keys)\n\n\ndef splitby(predicate, iterable):\n    \"\"\"Splits an iterable in two iterables, based on a predicate.\n\n    :returns: A tuple of two iterables: (true_iter, false_iter)\n\n    \"\"\"\n    predicated = ((v, predicate(v)) for v in iterable)\n    iter1, iter2 = tee(predicated)\n    return (v for (v, p) in iter1 if p), (v for (v, p) in iter2 if not p)\n\n\ndef first_true(iterable, default=None, pred=None):\n    \"\"\"Returns the first element of iterable that evaluates to True.\n\n    :param default: Default return value if none of the elements of iterable\n                    were true.\n    :param pred: Optional predicate function to evaluate the truthfulness of\n                 elements.\n    \"\"\"\n    return next(filter(pred, iterable), default)\n\n\ndef chunks(iterable, size):\n    \"\"\"Yields successive chunks from iterable. Each chunk will be at most `size`\n    elements long. For example,\n\n    >>> list(chunks(range(9), 4))\n    [(0, 1, 2, 3), (4, 5, 6, 7), (8,)]\n    \"\"\"\n    iterator = iter(iterable)\n    return iter(lambda: tuple(islice(iterator, size)), ())\n\n\nclass IPRange(object):\n    \"\"\"An IP range representation.\n\n    An IPRange object is both iterable and indexable. All addresses are\n    calculated on the fly based on the range endpoints, ensuring memory\n    efficiency.\n\n    Use the from_string() factory method to create a range object from a\n    string representation.\n\n    \"\"\"\n\n    def __init__(self, start, stop):\n        \"\"\"Creates an IP range representation including both the start and\n        stop endpoints.\n\n        \"\"\"\n        start = IPy.IP(start)\n        stop = IPy.IP(stop)\n        self._min = min(start, stop)\n        self._max = max(start, stop)\n\n    def __repr__(self):\n        return \"%s(%r, %r)\" % (self.__class__.__name__, self._min, self._max)\n\n    def __contains__(self, item):\n        return item >= self._min and item <= self._max\n\n    def __len__(self):\n        return self._max.int() - self._min.int() + 1\n\n    def len(self):\n        \"\"\"Returns the length of the range.\n\n        When working with IPv6, this may actually be preferable to\n        len(iprange), as huge prefixes may cause an OverflowError when using\n        the standard Python len() protocol.\n\n        \"\"\"\n        return self.__len__()\n\n    def __iter__(self):\n        count = self.len()\n        for offset in range(0, count):\n            yield IPy.IP(self._min.int() + offset)\n\n    def __getitem__(self, index):\n        if index >= self.len() or index < -self.len():\n            raise IndexError('index out of range')\n        if index >= 0:\n            return IPy.IP(self._min.int() + index)\n        else:\n            return IPy.IP(self._max.int() + index + 1)\n\n    @classmethod\n    def from_string(cls, rangestring):\n        \"\"\"Creates an IP range representation from a string.\n\n        Examples:\n\n        >>> IPRange.from_string('10.0.1.20-10.0.1.30')\n        IPRange(IP('10.0.1.20'), IP('10.0.1.30'))\n        >>> IPRange.from_string('10.0.1.0/24')\n        IPRange(IP('10.0.1.0'), IP('10.0.1.255'))\n        >>> IPRange.from_string('fe80:700::aaa-fff')\n        IPRange(IP('fe80:700::aaa'), IP('fe80:700::fff'))\n\n        \"\"\"\n\n        start, stop = cls._parse(rangestring.strip())\n        return cls(start, stop)\n\n    @classmethod\n    def _parse(cls, rangestring):\n        if '-' in rangestring:\n            return cls._parse_as_range(rangestring)\n        elif '/' in rangestring:\n            return cls._parse_as_network(rangestring)\n        else:\n            addr = IPy.IP(rangestring)\n            return addr, addr\n\n    @classmethod\n    def _parse_as_range(cls, rangestring):\n        try:\n            from_ip, to_ip = rangestring.split('-')\n        except ValueError:\n            raise ValueError(\"multiple ranges found\")\n\n        try:\n            from_ip, to_ip = cls._assemble_range(from_ip, to_ip)\n        except ValueError:\n            from_ip = IPy.IP(from_ip)\n            to_ip = IPy.IP(to_ip)\n\n        return from_ip, to_ip\n\n    @staticmethod\n    def _assemble_range(from_ip, to_ip):\n        \"\"\"Parses 10.0.42.0-62 as 10.0.42.0-10.0.42.62, raising a ValueError\n        if not possible.\n\n        \"\"\"\n        ip1 = IPy.IP(from_ip)\n        sep = \":\" if ip1.version() == 6 else \".\"\n        prefix, _suffix = from_ip.rsplit(sep, 1)\n        assembled = sep.join([prefix, to_ip])\n        ip2 = IPy.IP(assembled)\n        return ip1, ip2\n\n    @classmethod\n    def _parse_as_network(cls, rangestring):\n        try:\n            network, mask = rangestring.split('/')\n        except ValueError:\n            raise ValueError(\"multiple network masks found\")\n        if not mask:\n            mask = cls.get_mask_for_network(network)\n\n        iprange = IPy.IP(network).make_net(mask)\n        return iprange[0], iprange[-1]\n\n    @classmethod\n    def get_mask_for_network(cls, network):\n        \"\"\"Returns a suitable mask for the given network address.\n\n        Defaults to a 24 bit mask. Override this to do other magic, like look\n        up a matching prefix from the NAV database.\n\n        \"\"\"\n        return '24'\n\n\nclass cachedfor(object):\n    \"\"\"Decorates a function with no arguments to cache its result for a period\n    of time.\n\n    \"\"\"\n\n    def __init__(self, max_age):\n        self.max_age = max_age\n        self.value = None\n        self.func = None\n        self.updated = datetime.datetime.min\n\n    def __call__(self, func):\n        self.func = func\n\n        @wraps(func)\n        def _wrapper():\n            age = datetime.datetime.now() - self.updated\n            if age >= self.max_age:\n                self.value = self.func()\n                self.updated = datetime.datetime.now()\n            return self.value\n\n        return _wrapper\n\n\ndef synchronized(lock):\n    \"\"\"Synchronization decorator.\n\n    Decorates a function to ensure it can only run in a single thread at a\n    time.\n\n    :param lock: A threading.Lock object.\n\n    \"\"\"\n\n    def _decorator(func):\n        @wraps(func)\n        def _wrapper(*args, **kwargs):\n            lock.acquire()\n            try:\n                return func(*args, **kwargs)\n            finally:\n                lock.release()\n\n        return _wrapper\n\n    return _decorator\n\n\nclass Timer:\n    \"\"\"Context manager that measures wall-clock elapsed time.\n\n    Usage::\n\n        timer = Timer()\n        with timer:\n            do_something()\n        print(timer.elapsed)  # float, in seconds\n    \"\"\"\n\n    def __init__(self):\n        self.elapsed = None\n\n    def __enter__(self):\n        self._start = time.monotonic()\n        return self\n\n    def __exit__(self, *args):\n        self.elapsed = time.monotonic() - self._start\n\n\ndef parse_interval(string):\n    \"\"\"Parses a string for simple time interval definitions and returns a\n    number of seconds represented.\n\n    Examples::\n    >>> parse_interval('1s')\n    1\n    >>> parse_interval('1m')\n    60\n    >>> parse_interval('1h')\n    3600\n    >>> parse_interval('1d')\n    86400\n    >>>\n\n\n    :param string: A string specifying an interval\n    :return: A number of seconds as an int\n\n    \"\"\"\n    string = string.strip()\n\n    if string == '':\n        return 0\n\n    if string.isdigit():\n        return int(string)\n\n    string, unit = int(string[:-1]), string[-1:].lower()\n\n    if unit == 'd':\n        return string * 60 * 60 * 24\n    elif unit == 'h':\n        return string * 60 * 60\n    elif unit == 'm':\n        return string * 60\n    elif unit == 's':\n        return string\n\n    raise ValueError('Invalid time format: %s%s' % (string, unit))\n\n\ndef address_to_string(ip, port):\n    \"\"\"Converts an IP address and port pair into a printable string.\n\n    An IPv6 address will be encapsulated in square brackets to separate it\n    from the port number.\n\n    \"\"\"\n    ip = IPy.IP(ip)\n    ip = str(ip) if ip.version() == 4 else \"[%s]\" % ip\n    return \"%s:%s\" % (ip, port)\n\n\ndef auth_token():\n    \"\"\"Generates a hex token that can be used as an OAuth API token\"\"\"\n    return token_hex(32)\n\n\ndef consecutive(seq):\n    \"\"\"Yields a series of ranges found in the number sequence.\n\n    :param seq: A sequence of numbers.\n    \"\"\"\n    data = ((y - x, y) for x, y in enumerate(sorted(seq)))\n    for _key, group in groupby(data, itemgetter(0)):\n        group = [item[1] for item in group]\n        yield group[0], group[-1]\n\n\nclass NumberRange(object):\n    \"\"\"\n    Represents a sequence of numbers that can be compacted to a series of\n    number ranges.\n    \"\"\"\n\n    def __init__(self, sequence):\n        self.ranges = list(consecutive(sequence))\n\n    def __iter__(self):\n        return iter(self._range_to_str(x, y) for x, y in self.ranges)\n\n    def __str__(self):\n        return \", \".join(self)\n\n    def __repr__(self):\n        return \"<{} {}>\".format(self.__class__.__name__, self)\n\n    @staticmethod\n    def _range_to_str(x, y):\n        if x == y:\n            return str(x)\n        else:\n            return \"{}-{}\".format(x, y)\n\n\ndef resource_filename(package, filename):\n    \"\"\"Return the path of the filename as it is inside the package\n\n    package: either a dotted path to a module or a module object\n    filename: str or pathlib.Path\n    \"\"\"\n    ref = resource_files(package) / filename\n    with as_file(ref) as path:\n        return str(path)\n\n\ndef resource_bytes(package, filename):\n    \"\"\"Read and return a bytes-object of the filename found in the package\n\n    package: either a dotted path to a module or a module object\n    filename: str or pathlib.Path\n    \"\"\"\n    ref = resource_files(package) / filename\n    return ref.read_bytes()\n"
  },
  {
    "path": "python/nav/watchdog/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/watchdog/tests.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Test classes for WatchDog\"\"\"\n\nimport collections\nimport itertools\nimport logging\nfrom datetime import datetime, timedelta\n\nfrom django.utils.timesince import timesince\nfrom django.db.models import Count\n\nfrom nav.asyncdns import reverse_lookup\nfrom nav.models.manage import IpdevpollJobLog, Netbox, Arp, Cam\nfrom nav.models.fields import INFINITY\n\n_logger = logging.getLogger(__name__)\n\n\nSTATUS_OK = 'ok'\nSTATUS_NOT_OK = 'not_ok'\nSTATUS_UNKNOWN = 'unknown'\n\n\nclass TestResult(object):\n    \"\"\"Result for test errors\"\"\"\n\n    def __init__(self, description, obj=None):\n        self.description = description  # The human readable description\n        self.obj = obj  # An optional object representing the test\n\n    def __str__(self):\n        return str(self.description)\n\n\nclass Test(object):\n    \"\"\"Interface for all test classes\"\"\"\n\n    name = 'Test'\n    description = 'A WatchDog test'\n    active = True\n\n    def __init__(self):\n        self.status = STATUS_UNKNOWN\n        self.errors = []\n\n    def _get_errors(self):\n        \"\"\"Gets error list for this test\"\"\"\n        raise NotImplementedError\n\n    def run(self):\n        \"\"\"Runs the test. Sets self.errors and self.status\"\"\"\n        starttime = datetime.now()\n        self.errors = self._get_errors()\n        runtime = datetime.now() - starttime\n        _logger.debug('%s used %s', type(self).__name__, runtime)\n        self.status = STATUS_OK if not self.errors else STATUS_NOT_OK\n\n    def get_status(self):\n        \"\"\"Runs the test and returns status\"\"\"\n        self.run()\n        return self.status\n\n\nclass TestOverdueJobs(Test):\n    \"\"\"Tests if there are any overdue ipdevpoll jobs\"\"\"\n\n    name = 'Job duration'\n    description = 'Tests if there exists any overdue ipdevpoll jobs'\n    active = False\n\n    def _get_errors(self):\n        \"\"\"\n        Fetches the overdue jobs from ipdevpolljoblog. Because some jobs will\n        take some time to run, give some slack to what is considered overdue.\n        \"\"\"\n        slack = 120  # Seconds\n\n        query = \"\"\"\n          SELECT ijl.* FROM ipdevpoll_job_log AS ijl\n          JOIN\n          (\n            SELECT netboxid, job_name, MAX(end_time) AS end_time\n            FROM ipdevpoll_job_log\n            GROUP BY netboxid, job_name\n          ) AS foo\n          USING (netboxid, job_name, end_time)\n          JOIN netbox ON (ijl.netboxid = netbox.netboxid)\n          WHERE now() - interval '1 second' * interval > end_time\n          ORDER BY netboxid;\n        \"\"\"\n\n        errors = []\n        for job in IpdevpollJobLog.objects.raw(query):\n            should_have_run = job.end_time + timedelta(seconds=job.interval)\n            overdue_by = datetime.now() - should_have_run\n            if overdue_by.seconds > slack and job.netbox.is_up():\n                time_since = timesince(datetime.now() - overdue_by)\n                descr = \"Job {} on {} is overdue by {}\".format(\n                    job.job_name, job.netbox.sysname, time_since\n                )\n                errors.append(TestResult(descr, job))\n\n        return errors\n\n\nclass TestFailedJobs(Test):\n    \"\"\"Tests if there are any ipdevpolljobs that have failed\"\"\"\n\n    name = 'Job status'\n    description = 'Tests if there are any ipdevpoll jobs that repeatedly fail'\n\n    def _get_errors(self):\n        \"\"\"Fetches failed ipdevpoll jobs\"\"\"\n        query = \"\"\"\n          SELECT ijl.* FROM ipdevpoll_job_log AS ijl\n          JOIN\n          (\n            SELECT netboxid, job_name, MAX(end_time) AS end_time\n            FROM ipdevpoll_job_log\n            GROUP BY netboxid, job_name\n          ) AS foo\n          USING (netboxid, job_name, end_time)\n          JOIN netbox ON (ijl.netboxid = netbox.netboxid)\n          WHERE success = 'f'\n          ORDER BY netboxid;\n        \"\"\"\n\n        results = []\n        fail_count = 3  # Number of successive failed jobs that equals problem\n        for failed in IpdevpollJobLog.objects.raw(query):\n            if not failed.netbox.is_up() or failed.netbox.is_snmp_down():\n                continue\n            last_jobs = IpdevpollJobLog.objects.filter(\n                netbox=failed.netbox, job_name=failed.job_name\n            ).order_by('end_time')[0:fail_count]\n            if all([not job.success for job in last_jobs]):\n                descr = \"Job {} on {} has failed the last {} times.\".format(\n                    failed.job_name, failed.netbox, fail_count\n                )\n                results.append(TestResult(descr, failed))\n\n        return results\n\n\nclass TestDuplicateHostnameForIP(Test):\n    \"\"\"\n    Tests of there are any number of IP-addresses that resolve to the same\n    hostname\n    \"\"\"\n\n    name = 'Hostname sanity'\n    description = (\n        'Tests whether there are multiple IP addresses that resolve '\n        'to the same hostname'\n    )\n\n    def _get_errors(self):\n        \"\"\"Fetches duplicate hostnames\"\"\"\n        ip_addresses = Netbox.objects.values_list(\"ip\", flat=True)\n        reverse_names = {\n            _key: _value\n            for _key, _value in reverse_lookup(ip_addresses).items()\n            if not isinstance(_value, Exception)  # Ignore DNS lookup failures\n        }\n        flatten = list(itertools.chain(*reverse_names.values()))\n        duplicates = {x for x in flatten if flatten.count(x) > 1}\n        results = collections.defaultdict(list)\n\n        for hostname in duplicates:\n            for ip, hostlist in reverse_names.items():\n                if hostname in hostlist:\n                    results[hostname].append(ip)\n\n        errors = []\n        for hostname, iplist in results.items():\n            error = 'The hostname {} is used by these IP addresses: {}'.format(\n                hostname, ', '.join(iplist)\n            )\n            errors.append(TestResult(error))\n\n        return errors\n\n\nclass TestNoRouterInterfaces(Test):\n    \"\"\"Test if any router has no router-interfaces\"\"\"\n\n    name = 'Router interface count'\n    description = 'Tests if there are routers that do not have any router interfaces'\n\n    def _get_errors(self):\n        \"\"\"Fetches routers with no router interfaces\"\"\"\n        results = []\n        for netbox in Netbox.objects.filter(category__in=['GW', 'GSW']):\n            if netbox.get_gwports().count() <= 0:\n                descr = \"{} has no router-interfaces\".format(netbox.sysname)\n                results.append(TestResult(descr, netbox))\n\n        return results\n\n\nclass TestNoSwitchPorts(Test):\n    \"\"\"Test if any switch has no switch ports\"\"\"\n\n    name = 'Switch port count'\n    description = 'Tests if there are any switches that do not have any switch ports'\n\n    def _get_errors(self):\n        \"\"\"Fetches switches with no switch ports\"\"\"\n        results = []\n        for netbox in Netbox.objects.filter(category__in=['GSW', 'SW']):\n            if netbox.get_swports().count() <= 0:\n                descr = \"{} has no switch ports\".format(netbox.sysname)\n                results.append(TestResult(descr, netbox))\n\n        return results\n\n\nclass TestAbnormalInterfaceCount(Test):\n    \"\"\"Tests for abnormal interface counts on devices\"\"\"\n\n    # Random number, should be sanitized. Max for a Cisco 7200 with\n    # 12.3T software is 20000. 5000 is above most of the other though.\n    # But what is the case where this test is needed?\n    abnormal_amount = 5000\n    name = 'Total interface count'\n    description = ('Tests if there are IP Devices with more than {} interfaces').format(\n        abnormal_amount\n    )\n\n    def _get_errors(self):\n        \"\"\"Fetches netboxes with an abnormal amount of interfaces\"\"\"\n        results = []\n        for netbox in Netbox.objects.annotate(Count('interfaces')):\n            count = netbox.interfaces__count\n            if count > self.abnormal_amount:\n                descr = \"{} has {} interfaces\".format(netbox.sysname, count)\n                results.append(TestResult(descr, netbox))\n\n        return results\n\n\nclass TestNewCamAndArpRecords(Test):\n    \"\"\"Tests for new Arp and Cam records\"\"\"\n\n    slack = 60 * 60  # 1 hour in seconds\n    name = \"ARP and CAM\"\n    description = (\n        \"Tests whether any ARP or CAM records have been collected the last hour\"\n    )\n\n    def _get_errors(self):\n        \"\"\"Checks for latest cam and arp\"\"\"\n        results = []\n\n        arp_result = self.test_arp()\n        if arp_result:\n            results.append(arp_result)\n        cam_result = self.test_cam()\n        if cam_result:\n            results.append(cam_result)\n\n        return results\n\n    def test_cam(self):\n        \"\"\"Test latest CAM record\"\"\"\n        now = datetime.now()\n        recently = timedelta(seconds=self.slack)\n        latest_cam = self.get_latest(Cam)\n        if latest_cam:\n            if latest_cam.end_time < INFINITY:\n                cam_diff = now - latest_cam.end_time\n            else:\n                cam_diff = now - latest_cam.start_time\n            if cam_diff > recently:\n                descr = ('CAM records have not been collected in the last {}').format(\n                    timesince(latest_cam.start_time)\n                )\n                return TestResult(descr, latest_cam)\n\n    def test_arp(self):\n        \"\"\"Test latest ARP record\"\"\"\n        now = datetime.now()\n        recently = timedelta(seconds=self.slack)\n        latest_arp = self.get_latest(Arp)\n        if latest_arp:\n            if latest_arp.end_time < INFINITY:\n                arp_diff = now - latest_arp.end_time\n            else:\n                arp_diff = now - latest_arp.start_time\n            if arp_diff > recently:\n                descr = ('ARP records have not been collected in the last {}').format(\n                    timesince(latest_arp.start_time)\n                )\n                return TestResult(descr, latest_arp)\n\n    @staticmethod\n    def get_latest(thing):\n        \"\"\"Get latest Cam or Arp record\"\"\"\n        try:\n            latest = thing.objects.all().order_by('-pk')[0]\n        except IndexError:\n            return None\n        else:\n            return latest\n"
  },
  {
    "path": "python/nav/watchdog/util.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Util functions for WatchDog\"\"\"\n\nimport json\nimport logging\n\nfrom django.core.cache import cache\n\nfrom .tests import Test\n\n_logger = logging.getLogger(__name__)\n\n\nHALF_HOUR = 60 * 30\n\n\ndef cached_test(testclass):\n    \"\"\"Returns cached test results from testclass\"\"\"\n    test_name = testclass.__name__\n    cache_key = \"watchdog:{}\".format(test_name)\n\n    try:\n        test = cache.get(cache_key)\n    except ValueError:  # ignore cache in case of errors\n        test = None\n\n    if test is None:\n        test = testclass()\n        test.run()\n        cache.set(cache_key, test, HALF_HOUR)\n    else:\n        _logger.debug('%s was in cache', test_name)\n    return test\n\n\ndef get_statuses():\n    \"\"\"Runs and returns all tests\"\"\"\n    test_results = []\n    for cls in Test.__subclasses__():\n        if cls.active:\n            test = cached_test(cls)\n            test_results.append(test)\n\n    return test_results\n\n\ndef get_statuses_as_json():\n    \"\"\"Runs and returns all tests in JSON format\"\"\"\n    return json.dumps([serialize(x) for x in get_statuses()])\n\n\ndef serialize(test):\n    \"\"\"Creates an object suitable for json out of a test\n\n    :param test: A test instance\n    \"\"\"\n    return {\n        'name': test.name,\n        'decription': test.description,\n        'status': test.get_status(),  # Also runs the test\n        'errors': test.errors,\n    }\n"
  },
  {
    "path": "python/nav/web/__init__.py",
    "content": "#\n# Copyright (C) 2006, 2007, 2009, 2011, 2013, 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"This package encompasses modules with web functionality for NAV\"\"\"\n\nimport logging\nimport sys\n\nimport os.path\n\nfrom django.http import HttpResponse\nfrom django.views.decorators.csrf import csrf_exempt\n\nimport nav.logs\nfrom nav.config import NAVConfigParser\n\n\n_logger = logging.getLogger(__name__)\n\n# Set default config params and read rest from file\n\n\nclass WebfrontConfigParser(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = [os.path.join('webfront', 'webfront.conf')]\n    DEFAULT_CONFIG = \"\"\"\n[qr_codes]\nfile_format = png\n\"\"\"\n\n    def __init__(self):\n        super(WebfrontConfigParser, self).__init__()\n\n        self.validate_qr_codes_config()\n\n    def validate_qr_codes_config(self):\n        allowed_file_formats = [\"png\", \"svg\"]\n\n        file_format = self.get(\"qr_codes\", \"file_format\")\n        file_format = file_format.lower()\n\n        if file_format not in allowed_file_formats:\n            file_format = \"png\"\n        self.set(\"qr_codes\", \"file_format\", file_format)\n\n\nwebfrontConfig = WebfrontConfigParser()\n\n\n@csrf_exempt\ndef refresh_session(request):\n    \"\"\"Forces a refresh of the session by setting the modified flag\"\"\"\n    request.session.modified = True\n    _logger.debug('refresh_session: refreshed')\n    return HttpResponse()\n\n\ndef loginit():\n    \"\"\"Initialize a logging setup for the NAV web interface.\n\n    All logging is directed to stderr, which should end up in Apache's\n    error log.\n\n    \"\"\"\n    global _loginited\n    try:\n        # Make sure we don't initialize logging setup several times (in case\n        # of module reloads and such)\n        if _loginited:\n            return\n    except NameError:\n        pass\n\n    root = logging.getLogger('')\n\n    # Attempt to mimic Apache's standard log time format\n    formatter = logging.Formatter(\n        \"[%(asctime)s] [%(levelname)s] [pid=%(process)d %(name)s] %(message)s\",\n        \"%a %b %d %H:%M:%S %Y\",\n    )\n    try:\n        handler = logging.StreamHandler(sys.stderr)\n    except IOError:\n        # Something went terribly wrong. Maybe stderr is closed?\n        # We silently ignore it and log nothing :-P\n        pass\n    else:\n        handler.setFormatter(formatter)\n\n        root.addHandler(handler)\n        nav.logs.set_log_config()\n        _loginited = True\n"
  },
  {
    "path": "python/nav/web/ajax/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/ajax/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022, 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nDjango URL configuration\n\nThe purpose of location /ajax/open is to put all ajax-requests that should be\navailable without logging in here so that we don't need more than one\nweb_access key for this.\n\nThe developer should make sure that the data exposed is indeed suitable\nfor open access.\n\"\"\"\n\nfrom django.urls import path\nfrom nav.web.ajax import views\n\n\n# URL's that does not require authorization\nurlpatterns = [\n    path(\n        'open/roommapper/rooms/',\n        views.get_rooms_with_position,\n        name='room-positions',\n    ),\n    path(\n        'open/roommapper/rooms/<path:roomid>/',\n        views.get_rooms_with_position,\n        name='room-position',\n    ),\n    path(\n        'open/roommapper/locations/<path:locationid>/',\n        views.get_rooms_with_position_for_location,\n        name='location-position',\n    ),\n    path(\n        'open/neighbormap/<int:netboxid>/',\n        views.get_neighbors,\n        name='ajax-get-neighbors',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/ajax/views.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nAjax view definitions\n\nThe view definitions does not necessarily need to be placed here.\n\"\"\"\n\nfrom django.http import JsonResponse\nfrom django.shortcuts import get_object_or_404\n\nfrom nav.models.manage import Room, Netbox, Location\n\n\ndef _process_room_position(rooms):\n    data = {'rooms': []}\n    for room in rooms:\n        roomdata = {\n            'name': room.id,\n            'position': \",\".join([str(pos) for pos in room.position]),\n            'status': get_room_status(room),\n        }\n        data['rooms'].append(roomdata)\n\n    return JsonResponse(data)\n\n\ndef get_rooms_with_position(_request, roomid=None):\n    \"\"\"\n    Get rooms for presentation in OSM map\n    \"\"\"\n    if roomid:\n        rooms = Room.objects.filter(id=roomid, position__isnull=False)\n    else:\n        rooms = Room.objects.filter(position__isnull=False)\n    return _process_room_position(rooms)\n\n\ndef get_rooms_with_position_for_location(_request, locationid):\n    \"\"\"\n    Get rooms for presentation in OSM map based on location\n    \"\"\"\n    location = Location.objects.get(pk=locationid)\n    rooms = location.get_all_rooms().filter(position__isnull=False)\n    return _process_room_position(rooms)\n\n\ndef get_room_status(room):\n    \"\"\"\n    Return room status suitable for RoomMapper\n    \"\"\"\n    return 'faulty' if netbox_down_in(room) else 'ok'\n\n\ndef netbox_down_in(room):\n    \"\"\"\n    Returns True if a netbox is down on the room, otherwise False\n    \"\"\"\n    return len(room.netboxes.filter(up='n'))\n\n\ndef get_neighbors(_request, netboxid):\n    \"\"\"Get neighbors for this netboxid\n\n    Used in neighbor-map\n\n    \"\"\"\n\n    link_candidates = {}\n\n    netbox = get_object_or_404(Netbox, pk=netboxid)\n    nodes = [create_object_from(netbox)]\n    interfaces = netbox.interfaces.filter(to_netbox__isnull=False)\n    for interface in interfaces:\n        to_netbox = interface.to_netbox\n        to_interfacename = (\n            interface.to_interface.ifname if interface.to_interface else ''\n        )\n        if interface.to_netbox in link_candidates:\n            link_candidates[to_netbox]['ifname'].append(interface.ifname)\n            link_candidates[interface.to_netbox]['to_ifname'].append(to_interfacename)\n        else:\n            nodes.append(create_object_from(interface.to_netbox))\n            link_candidates[interface.to_netbox] = {\n                \"source\": netbox.id,\n                \"target\": to_netbox.id,\n                \"ifname\": [interface.ifname],\n                \"to_ifname\": [to_interfacename],\n            }\n\n    # Unrecognized neighbors\n    unrecognized_nodes = []\n    un_candidates = {}\n    for unrecognized in netbox.unrecognized_neighbors.filter(\n        ignored_since__isnull=True\n    ):\n        if unrecognized.remote_id in un_candidates:\n            un_candidates[unrecognized.remote_id]['ifname'].append(\n                unrecognized.interface.ifname\n            )\n        else:\n            nodes.append(create_unrecognized_object_from(unrecognized))\n            unrecognized_nodes.append(unrecognized)\n            un_candidates[unrecognized.remote_id] = {\n                \"source\": netbox.id,\n                \"target\": unrecognized.remote_id,\n                \"ifname\": [unrecognized.interface.ifname],\n                \"to_ifname\": \"\",\n            }\n\n    data = {\n        \"nodes\": nodes,\n        \"links\": list(link_candidates.values()) + list(un_candidates.values()),\n    }\n\n    return JsonResponse(data)\n\n\ndef create_object_from(netbox):\n    \"\"\"Create dict structure from netbox instance\"\"\"\n    return {\n        \"netboxid\": netbox.id,\n        \"name\": netbox.get_short_sysname(),\n        \"sysname\": netbox.sysname,\n        \"category\": netbox.category.id,\n    }\n\n\ndef create_unrecognized_object_from(node):\n    \"\"\"Create dict structure from unrecognized neighbor instance\"\"\"\n    return {\n        \"netboxid\": node.remote_id,\n        \"name\": node.remote_name,\n        \"sysname\": node.remote_name,\n        \"category\": 'UNRECOGNIZED',\n    }\n"
  },
  {
    "path": "python/nav/web/alertprofiles/__init__.py",
    "content": "\"\"\"alertprofiles\n\nThe NAV alert profile editing interface.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/alertprofiles/decorators.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert Profiles helper decorators.\"\"\"\n\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse\nfrom django.utils.functional import wraps\n\nfrom nav.web.message import new_message, Messages\n\n_ = lambda a: a\n\n\ndef requires_post(redirect='alertprofiles-overview', required_args=None):\n    \"\"\"Decorates a view function to require a POST request.\n\n    If the view function was not reached via a POST request, a session\n    error message is generated, and the client is redirected to the\n    specified redirect view.\n\n    \"\"\"\n\n    def _required_args_are_present(request):\n        if required_args is not None:\n            for arg in required_args:\n                if not request.POST.get(arg):\n                    return False\n        return True\n\n    def _decorator(func):\n        def _handler(request, *args, **kwargs):\n            error = None\n            if request.method == 'POST':\n                if _required_args_are_present(request):\n                    return func(request, *args, **kwargs)\n                else:\n                    error = _('Required post-data were not supplied')\n            else:\n                error = _('There was no post-data')\n\n            new_message(request, error, Messages.ERROR)\n            return HttpResponseRedirect(reverse(redirect))\n\n        return wraps(func)(_handler)\n\n    return _decorator\n"
  },
  {
    "path": "python/nav/web/alertprofiles/forms.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert Profiles forms\"\"\"\n\nfrom typing import Any\n\nfrom django import forms\nfrom django.db.models import Q\n\nfrom nav.alertengine.dispatchers.email_dispatcher import Email\nfrom nav.alertengine.dispatchers.slack_dispatcher import Slack\nfrom nav.alertengine.dispatchers.sms_dispatcher import Sms\nfrom nav.models.profiles import Expression, Filter, FilterGroup, MatchField, Operator\nfrom nav.models.profiles import AlertProfile, TimePeriod, AlertSubscription\nfrom nav.models.profiles import AlertAddress, AlertSender\nfrom nav.util import is_valid_cidr, is_valid_ip\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FormRow,\n    FormColumn,\n    HelpFormField,\n    SubmitField,\n)\n\n_ = lambda a: a  # gettext variable (for future implementations)\n\n\nclass LanguageForm(forms.Form):\n    \"\"\"The language form is used to choose alert language\"\"\"\n\n    language = forms.ChoiceField(choices=[('en', 'English'), ('no', 'Norwegian')])\n\n\nclass AlertProfileForm(forms.ModelForm):\n    \"\"\"Form for editing and creating alert profiles.\n\n    The alert profile form enables the user to configure what alerts are sent at\n    which times\n    \"\"\"\n\n    id = forms.IntegerField(required=False, widget=forms.HiddenInput)\n\n    def __init__(self, *args, **kwargs):\n        super(AlertProfileForm, self).__init__(*args, **kwargs)\n\n        self.fields['daily_dispatch_time'].widget = forms.TimeInput(format='%H:%M')\n        self.fields['weekly_dispatch_time'].widget = forms.TimeInput(format='%H:%M')\n        self.fields['weekly_dispatch_day'].widget.attrs.update({'class': 'select2'})\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self[\"id\"],\n                self[\"name\"],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"daily_dispatch_time\"]],\n                            css_classes=\"medium-4\",\n                        ),\n                        FormColumn(\n                            fields=[self[\"weekly_dispatch_time\"]],\n                            css_classes=\"medium-4\",\n                        ),\n                        FormColumn(\n                            fields=[self[\"weekly_dispatch_day\"]],\n                            css_classes=\"medium-4\",\n                        ),\n                    ]\n                ),\n            ]\n        )\n\n    class Meta(object):\n        model = AlertProfile\n        exclude = ('account',)\n\n\nclass AlertAddressForm(forms.ModelForm):\n    \"\"\"Form for editing and creating alert addresses\n\n    An alert address is where the alert is sent, and can be either\n    email or slack in addition to sms.\n\n    \"\"\"\n\n    id = forms.IntegerField(required=False, widget=forms.widgets.HiddenInput)\n    address = forms.CharField(required=True)\n    type = forms.ModelChoiceField(queryset=AlertSender.objects.filter(supported=True))\n\n    def __init__(self, *args, **kwargs):\n        super(AlertAddressForm, self).__init__(*args, **kwargs)\n        self.fields['type'].widget.attrs.update({\"class\": \"select2\"})\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['id'],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['type']],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[self['address']],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[],\n                            css_classes='medium-4',\n                        ),\n                    ]\n                ),\n            ]\n        )\n\n    class Meta(object):\n        model = AlertAddress\n        exclude = ('account',)\n\n    def clean(self):\n        cleaned_data = self.cleaned_data\n        type_ = cleaned_data.get('type')\n        address = cleaned_data.get('address')\n        if type_ and address:\n            error = None\n            if not type_.supported:\n                error = \"{} is no longer supported by NAV\".format(type_.name)\n            elif type_.handler == 'sms':\n                if not Sms.is_valid_address(address):\n                    error = 'Not a valid phone number.'\n            elif type_.handler == 'email':\n                if not Email.is_valid_address(address):\n                    error = 'Not a valid email address.'\n            elif type_.handler == 'slack':\n                if not Slack.is_valid_address(address):\n                    error = 'Not a valid absolute url.'\n\n            if error:\n                self._errors['address'] = self.error_class([error])\n                del cleaned_data['address']\n\n        return cleaned_data\n\n\nclass TimePeriodForm(forms.ModelForm):\n    \"\"\"Form for editing time periods\"\"\"\n\n    id = forms.IntegerField(required=False, widget=forms.HiddenInput)\n    profile = forms.ModelChoiceField(\n        AlertProfile.objects.all(), widget=forms.HiddenInput\n    )\n    start = forms.TimeField(\n        initial='08:00',\n        input_formats=['%H:%M:%S', '%H:%M', '%H'],\n        help_text=_('Valid time formats are HH:MM and HH'),\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(TimePeriodForm, self).__init__(*args, **kwargs)\n        submit_text = 'Add'\n\n        if self.instance and self.instance.id:\n            self.fields['valid_during'].widget.attrs['disabled'] = 'disabled'\n            submit_text = 'Save'\n\n        self.fields['valid_during'].widget.attrs.update({\"class\": \"select2\"})\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['id'],\n                self['profile'],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['start']],\n                            css_classes='medium-6',\n                        ),\n                        FormColumn(\n                            fields=[self['valid_during']],\n                            css_classes='medium-6',\n                        ),\n                    ]\n                ),\n                SubmitField(value=submit_text, css_classes='small'),\n            ]\n        )\n\n    class Meta(object):\n        model = TimePeriod\n        fields = '__all__'\n\n    def clean(self):\n        ident = self.cleaned_data.get('id', None)\n        profile = self.cleaned_data.get('profile', None)\n        start_time = self.cleaned_data.get('start', None)\n        valid_during = self.cleaned_data.get('valid_during', None)\n\n        if valid_during == TimePeriod.ALL_WEEK:\n            valid_during_choices = (\n                TimePeriod.ALL_WEEK,\n                TimePeriod.WEEKDAYS,\n                TimePeriod.WEEKENDS,\n            )\n        elif valid_during == TimePeriod.WEEKDAYS:\n            valid_during_choices = (TimePeriod.ALL_WEEK, TimePeriod.WEEKDAYS)\n        else:\n            valid_during_choices = (TimePeriod.ALL_WEEK, TimePeriod.WEEKENDS)\n\n        time_periods = TimePeriod.objects.filter(\n            ~Q(pk=ident),\n            profile=profile,\n            start=start_time,\n            valid_during__in=valid_during_choices,\n        )\n        if time_periods:\n            errors = [\n                forms.ValidationError(\n                    _(\n                        \"\"\"Collides with existing time period: %(start)s for\n                    %(valid)s\"\"\"\n                    ),\n                    params={\n                        'start': period.start,\n                        'valid': period.get_valid_during_display(),\n                    },\n                    code='timeperiod-collide',\n                )\n                for period in time_periods\n            ]\n            raise forms.ValidationError(errors)\n        else:\n            return self.cleaned_data\n\n\nclass AlertSubscriptionForm(forms.ModelForm):\n    \"\"\"Form for editing an alert subscription\"\"\"\n\n    id = forms.IntegerField(required=False, widget=forms.widgets.HiddenInput)\n    alert_address = forms.ModelChoiceField(\n        queryset=AlertAddress.objects.filter(type__supported=True)\n    )\n\n    class Meta(object):\n        model = AlertSubscription\n        fields = '__all__'\n\n    def __init__(self, *args, **kwargs):\n        time_period = kwargs.pop('time_period', None)\n        super(AlertSubscriptionForm, self).__init__(*args, **kwargs)\n\n        hidden_fields = ['id']\n        if isinstance(time_period, TimePeriod):\n            self.fields['time_period'] = forms.ModelChoiceField(\n                queryset=TimePeriod.objects.filter(id=time_period.id),\n                widget=forms.HiddenInput,\n                initial=time_period.id,\n            )\n            hidden_fields.append('time_period')\n            # Get account\n            account = time_period.profile.account\n\n            addresses = AlertAddress.objects.filter(\n                account=account, type__supported=True\n            ).order_by('type', 'address')\n            filter_groups = FilterGroup.objects.filter(\n                Q(owner__isnull=True) | Q(owner__exact=account)\n            ).order_by('owner', 'name')\n\n            self.fields['alert_address'] = forms.ModelChoiceField(\n                queryset=addresses,\n                empty_label=None,\n                error_messages={\n                    'required': 'Alert address is a required field.',\n                    'invalid_choice': (\n                        'The selected alert address is an invalid choice.'\n                    ),\n                },\n                label='Send alerts to',\n                widget=forms.Select(attrs={'class': 'select2'}),\n            )\n            self.fields['filter_group'] = forms.ModelChoiceField(\n                queryset=filter_groups,\n                empty_label=None,\n                error_messages={\n                    'required': 'Filter group is a required field.',\n                    'invalid_choice': (\n                        'The selected filter group is an invalid choice.'\n                    ),\n                },\n                label='Watch',\n                widget=forms.Select(attrs={'class': 'select2'}),\n            )\n            self.fields['ignore_resolved_alerts'] = forms.BooleanField(\n                required=False,\n                widget=forms.CheckboxInput(attrs={'class': 'input-align'}),\n            )\n            self.fields['type'].label = 'When'\n            self.fields['type'].widget.attrs.update({\"class\": \"select2\"})\n            self.fields['type'].help_text = \"\"\"\n            <dl>\n                <dt>Immediately</dt>\n                <dd>Send the alert as soon as alertengine has processed it.</dd>\n\n                <dt>Daily at predefined time</dt>\n                <dd>Send all matched alerts at the specified daily\n                    dispatch time.</dd>\n                <dt>Weekly at predefined time</dt>\n                <dd>Send all matched alerts at the specified weekly\n                    dispatch time.</dd>\n                <dt>At end of timeperiod</dt>\n                <dd>Send all matched alerts when the current timeperiod is\n                    over and a new one starts.</dd>\n            </dl>\n            \"\"\"\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['filter_group']],\n                            css_classes='medium-3',\n                        ),\n                        FormColumn(\n                            fields=[self['alert_address']],\n                            css_classes='medium-3',\n                        ),\n                        FormColumn(\n                            fields=[HelpFormField(self['type'])],\n                            css_classes='medium-3',\n                        ),\n                        FormColumn(\n                            fields=[self['ignore_resolved_alerts']],\n                            css_classes='medium-3',\n                        ),\n                    ]\n                ),\n                *[self[field] for field in hidden_fields],\n            ]\n        )\n\n    def clean(self):\n        alert_address = self.cleaned_data.get('alert_address', None)\n        time_period = self.cleaned_data.get('time_period', None)\n        filter_group = self.cleaned_data.get('filter_group', None)\n        subscription_type = self.cleaned_data.get('type', None)\n        ignore = self.cleaned_data.get('ignore_resolved_alerts', False)\n        ident = self.cleaned_data['id']\n\n        errors = []\n\n        existing_subscriptions = AlertSubscription.objects.filter(\n            Q(alert_address=alert_address),\n            Q(time_period=time_period),\n            Q(filter_group=filter_group),\n            ~Q(pk=ident),\n        )\n\n        for sub in existing_subscriptions:\n            errors.append(\n                forms.ValidationError(\n                    _(\n                        \"\"\"Filter group and alert address must be unique for each\n                    subscription. This one collides with group %(group)s\n                    watched by %(address)s\"\"\"\n                    ),\n                    code='unique-group-and-address',\n                    params={\n                        'group': sub.filter_group.name,\n                        'address': sub.alert_address.address,\n                    },\n                )\n            )\n\n        if subscription_type == AlertSubscription.NOW and ignore:\n            errors.append(\n                forms.ValidationError(\n                    _(\n                        \"\"\"Resolved alerts cannot be ignored for immediate\n                    subscriptions\"\"\"\n                    ),\n                    code='resolved-alert-cannot-be-ignored',\n                )\n            )\n\n        if errors:\n            raise forms.ValidationError(errors)\n\n        return self.cleaned_data\n\n\nclass FilterGroupForm(forms.Form):\n    id = forms.IntegerField(required=False, widget=forms.HiddenInput)\n    owner = forms.BooleanField(\n        required=False,\n        label='Private',\n        help_text=_('Uncheck to allow all users to use this filter group.'),\n    )\n    name = forms.CharField(required=True)\n    description = forms.CharField(required=False)\n\n    class Meta(object):\n        model = FilterGroup\n        exclude = ('group_permissions',)\n\n    def __init__(self, *args, **kwargs):\n        admin = kwargs.pop('admin', None)\n        is_owner = kwargs.pop('is_owner', None)\n        super(FilterGroupForm, self).__init__(*args, **kwargs)\n\n        if not admin:\n            self.fields['owner'].widget.attrs['disabled'] = 'disabled'\n\n        if not is_owner:\n            for field in self.fields.values():\n                field.widget.attrs['disabled'] = 'disabled'\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['id'],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['name']],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[self['description']],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[self['owner']],\n                            css_classes='medium-4',\n                        ),\n                    ]\n                ),\n            ]\n        )\n\n\nclass FilterForm(forms.Form):\n    id = forms.IntegerField(required=False, widget=forms.widgets.HiddenInput)\n    owner = forms.BooleanField(\n        required=False,\n        label='Private',\n        help_text=_('Uncheck to allow all users to use this filter.'),\n    )\n    name = forms.CharField(required=True)\n\n    class Meta(object):\n        model = Filter\n\n    def __init__(self, *args, **kwargs):\n        admin = kwargs.pop('admin', None)\n        is_owner = kwargs.pop('is_owner', None)\n        super(FilterForm, self).__init__(*args, **kwargs)\n\n        if not admin:\n            self.fields['owner'].widget.attrs['disabled'] = 'disabled'\n\n        if not is_owner:\n            for field in self.fields.values():\n                field.widget.attrs['disabled'] = 'disabled'\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['id'],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['name']],\n                            css_classes='medium-6',\n                        ),\n                        FormColumn(\n                            fields=[self['owner']],\n                            css_classes='medium-6',\n                        ),\n                    ]\n                ),\n            ]\n        )\n\n\nclass MatchFieldForm(forms.ModelForm):\n    \"\"\"Allows creation and editing of match fields\n\n    A filter contains of match fields that should be some value. Match fields\n    are normally not created or edited by other than users that are very\n    confident in the NAV database layout.\n    \"\"\"\n\n    id = forms.IntegerField(required=False, widget=forms.widgets.HiddenInput)\n    list_limit = forms.ChoiceField(\n        choices=(\n            (100, 100),\n            (200, 200),\n            (300, 300),\n            (500, 500),\n            (1000, '1 000'),\n            (10000, '10 000'),\n        ),\n        initial=300,\n        help_text=_(\n            'Only this many options will be available in the '\n            'list. Only does something when \"Show list\" is '\n            'checked.'\n        ),\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(MatchFieldForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['id'],\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self['name']],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[self['description']],\n                            css_classes='medium-8',\n                        ),\n                    ]\n                ),\n                HelpFormField(self['value_help']),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[HelpFormField(self['value_id'])],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[HelpFormField(self['value_name'])],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[HelpFormField(self['value_sort'])],\n                            css_classes='medium-4',\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[HelpFormField(self['list_limit'])],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[HelpFormField(self['data_type'])],\n                            css_classes='medium-4',\n                        ),\n                        FormColumn(\n                            fields=[HelpFormField(self['show_list'])],\n                            css_classes='medium-4',\n                        ),\n                    ]\n                ),\n            ]\n        )\n\n    class Meta(object):\n        model = MatchField\n        fields = '__all__'\n\n    @staticmethod\n    def _get_field_not_same_model_error():\n        return forms.ValidationError(\n            _(\n                \"\"\"This field must be the same model as match field,\n            or not set at all.\"\"\"\n            ),\n            code='field_not_same_model',\n        )\n\n    def clean_value_name(self):\n        \"\"\"Cleans the field 'value_name'\"\"\"\n        clean_value_name = self.cleaned_data['value_name']\n        try:\n            clean_value_id = self.cleaned_data['value_id']\n        except KeyError:\n            # value_id is not set. We pass and return clean_value_name.\n            # value_id is required and will raise it's own ValidationErrors\n            pass\n        else:\n            if clean_value_name:\n                model, _attname = MatchField.MODEL_MAP[clean_value_id]\n                name_model, _name_attname = MatchField.MODEL_MAP[\n                    clean_value_name.split('|')[0]\n                ]\n                if not model == name_model:\n                    raise self._get_field_not_same_model_error()\n        return clean_value_name\n\n    def clean_value_sort(self):\n        \"\"\"Cleans the field 'value_sort'\"\"\"\n        clean_value_sort = self.cleaned_data['value_sort']\n        try:\n            clean_value_id = self.cleaned_data['value_id']\n        except KeyError:\n            # value_id is not set. We pass and return clean_value_name.\n            # value_id is required and will raise it's own ValidationErrors\n            pass\n        else:\n            if clean_value_sort:\n                model, _attname = MatchField.MODEL_MAP[clean_value_id]\n                sort_model, _sort_attname = MatchField.MODEL_MAP[clean_value_sort]\n                if not model == sort_model:\n                    raise self._get_field_not_same_model_error()\n        return clean_value_sort\n\n\nclass ExpressionForm(forms.ModelForm):\n    \"\"\"Enables editing and creating expressions\n\n    An expression ties together a match field with and operator and a value to\n    create expressions that can be used in a filter.\n    \"\"\"\n\n    filter = forms.ModelChoiceField(\n        queryset=Filter.objects.all(), widget=forms.widgets.HiddenInput\n    )\n    match_field = forms.ModelChoiceField(\n        queryset=MatchField.objects.all(), widget=forms.widgets.HiddenInput\n    )\n\n    class Meta(object):\n        model = Expression\n        fields = '__all__'\n\n    def __init__(self, *args, **kwargs):\n        match_field = kwargs.pop('match_field', None)  # add_expression\n        if not match_field:\n            match_field = args[0].get('match_field', None)  # save_expression\n        self.match_field = match_field\n        super(ExpressionForm, self).__init__(*args, **kwargs)\n\n        if not match_field:\n            return\n\n        if not isinstance(match_field, MatchField):\n            match_field = MatchField.objects.get(pk=match_field)\n\n        if True:  # maintain indent for the sake off smaller diff!\n            # Get all operators and make a choice field\n            operators = match_field.operators.all()\n            self.fields['operator'] = forms.models.ChoiceField(\n                choices=[(o.type, o) for o in operators]\n            )\n\n            if match_field.show_list:\n                # Values are selected from a multiple choice list.\n                # Populate that list with possible choices.\n\n                # MatchField stores which table and column alert engine should\n                # watch, as well as a table and column for \"friendly\" names in\n                # the GUI and how we should sort the fields in the GUI (if we\n                # are displaying a list)\n                #\n                # Here we map those table and column names to django models and\n                # attribute names.\n                #\n                # FIXME If value_id is not set we should display an error\n                # message telling that this match field won't work and should\n                # be fixed ASAP\n                model, attname = MatchField.MODEL_MAP[match_field.value_id]\n\n                if match_field.value_name:\n                    name_model, name_attname = MatchField.MODEL_MAP[\n                        match_field.value_name.split('|')[0]\n                    ]\n                else:\n                    name_model = None\n\n                if match_field.value_sort:\n                    order_model, order_attname = MatchField.MODEL_MAP[\n                        match_field.value_sort\n                    ]\n                else:\n                    order_model = None\n\n                self.number_of_choices = model.objects.count()\n\n                # First we say we want all the objects, unordered\n                model_objects = model.objects.all()\n\n                if model == order_model:\n                    # If order is specified, and it's from the same model as\n                    # the selected objects, we order by the specified attribute\n                    # ...\n                    model_objects = model_objects.order_by(order_attname)\n                else:\n                    # ... if not, we order by the primary key\n                    model_objects = model_objects.order_by('pk')\n\n                # Last we limit the objects\n                model_objects = model_objects[: match_field.list_limit]\n\n                choices = []\n                for obj in model_objects:\n                    # ID is what is actually used in the expression that will\n                    # be evaluated by alert engine\n                    ident = getattr(obj, attname)\n\n                    if model == name_model:\n                        # name is just a \"friendly\" name, only used in the GUI\n                        # to make it easier to add expressions. We only set it\n                        # if the models for both id and name are the same.\n                        name = getattr(obj, name_attname)\n\n                        if name != ident:\n                            # If id and name are not equal we make a nice\n                            # string with both. If they are the same we only\n                            # use id, as both would be redundant.\n                            choices.append((ident, '%s: %s' % (ident, name)))\n                            continue\n                    choices.append((ident, ident))\n\n                # At last we acctually add the multiple choice field.\n                self.fields['value'] = forms.MultipleChoiceField(choices=choices)\n                self.fields['value'].widget.attrs['class'] = 'select2'\n            else:\n                self.fields['value'] = forms.CharField(required=True)\n\n    def clean(self) -> dict[str, Any]:\n        validated_data = super().clean()\n\n        match_field = validated_data[\"match_field\"]\n        operator_type = int(validated_data[\"operator\"])\n        value = validated_data[\"value\"]\n\n        if match_field.data_type == MatchField.IP:\n            validated_data[\"value\"] = self._clean_ip_addresses(\n                operator_type=operator_type, value=value\n            )\n            return validated_data\n\n        if operator_type == Operator.IN:\n            validated_data[\"value\"] = \"|\".join(value)\n        elif operator_type == Operator.EQUALS and isinstance(value, list):\n            validated_data[\"value\"] = value[0]\n\n        return validated_data\n\n    def _clean_ip_addresses(self, operator_type, value):\n        if operator_type == Operator.IN:\n            ip_list = value.split()\n        else:\n            ip_list = [value]\n        validated_ip_addresses = []\n        for ip in ip_list:\n            if not is_valid_ip(ip=ip, strict=True) and not is_valid_cidr(cidr=ip):\n                self.add_error(\n                    field=\"value\",\n                    error=forms.ValidationError((\"Invalid IP address: %s\" % ip)),\n                )\n            else:\n                validated_ip_addresses.append(str(ip))\n\n        return \"|\".join(validated_ip_addresses)\n"
  },
  {
    "path": "python/nav/web/alertprofiles/shortcuts.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Shortcuts for Alert Profiles\"\"\"\n\nfrom django.shortcuts import render\n\nfrom nav.web.message import Messages, new_message\n\nBASE_PATH = [\n    ('Home', '/'),\n    ('Alert profiles', '/alertprofiles/'),\n]\n\n\ndef _alertprofiles_response(request, status_code=200):\n    # Get a normal response object\n    response = render(\n        request,\n        'alertprofiles/base.html',\n        {'navpath': BASE_PATH},\n    )\n\n    # Change the status_code\n    response.status_code = status_code\n\n    return response\n\n\ndef alertprofiles_response_forbidden(request, message):\n    new_message(request, '403 Forbidden', Messages.ERROR)\n    new_message(request, message, Messages.ERROR)\n\n    return _alertprofiles_response(request, 403)\n\n\ndef alertprofiles_response_not_found(request, message):\n    new_message(request, '404 Not Found', Messages.ERROR)\n    new_message(request, message, Messages.ERROR)\n\n    return _alertprofiles_response(request, 404)\n"
  },
  {
    "path": "python/nav/web/alertprofiles/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2008, 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert Profiles url config.\"\"\"\n\nfrom django.urls import path\n\nfrom nav.web.alertprofiles import views\n\n\nurlpatterns = [\n    # Overview\n    path('', views.overview, name='alertprofiles-overview'),\n    # alert profiles groups and permissions modal\n    path(\n        'groupsandpermissions/',\n        views.groups_and_permissions_modal,\n        name='alertprofiles-groups-and-permissions',\n    ),\n    # User settings\n    path('profile/', views.show_profile, name='alertprofiles-profile'),\n    path('profile/new/', views.profile_new, name='alertprofiles-profile-new'),\n    path(\n        'profile/<int:profile_id>/',\n        views.profile_detail,\n        name='alertprofiles-profile-detail',\n    ),\n    path('profile/save/', views.profile_save, name='alertprofiles-profile-save'),\n    path('profile/remove/', views.profile_remove, name='alertprofiles-profile-remove'),\n    path(\n        'profile/time-period/<int:time_period_id>/',\n        views.profile_time_period,\n        name='alertprofiles-profile-timeperiod',\n    ),\n    path(\n        'profile/time-period/<int:time_period_id>/subscriptions/',\n        views.profile_time_period_setup,\n        name='alertprofiles-profile-timeperiod-setup',\n    ),\n    path(\n        'profile/time-period/add/',\n        views.profile_time_period_add,\n        name='alertprofiles-profile-timeperiod-add',\n    ),\n    path(\n        'profile/time-period/remove/',\n        views.profile_time_period_remove,\n        name='alertprofiles-profile-timeperiod-remove',\n    ),\n    path(\n        'profile/time-period/subscription/<int:subscription_id>',\n        views.profile_time_period_subscription_edit,\n        name='alertprofiles-profile-timeperiod-subscription',\n    ),\n    path(\n        'profile/time-period/subscription/add/',\n        views.profile_time_period_subscription_add,\n        name='alertprofiles-profile-timeperiod-subscription-add',\n    ),\n    path(\n        'profile/time-period/subscription/remove/',\n        views.profile_time_period_subscription_remove,\n        name='alertprofiles-profile-timeperiod-subscription-remove',\n    ),\n    path('language/save/', views.language_save, name='alertprofiles-language-save'),\n    path('sms/', views.sms_list, name='alertprofiles-sms'),\n    # Alert address\n    path('address/', views.address_list, name='alertprofiles-address'),\n    path(\n        'address/<int:address_id>/',\n        views.address_detail,\n        name='alertprofiles-address-detail',\n    ),\n    path('address/new/', views.address_detail, name='alertprofiles-address-new'),\n    path('address/save/', views.address_save, name='alertprofiles-address-save'),\n    path('address/remove/', views.address_remove, name='alertprofiles-address-remove'),\n    # Filters\n    path('filters/', views.filter_list, name='alertprofiles-filters'),\n    path(\n        'filters/<int:filter_id>/',\n        views.filter_detail,\n        name='alertprofiles-filters-detail',\n    ),\n    path('filters/new/', views.filter_detail, name='alertprofiles-filters-new'),\n    path('filters/save/', views.filter_save, name='alertprofiles-filters-save'),\n    path('filters/remove/', views.filter_remove, name='alertprofiles-filters-remove'),\n    path(\n        'filters/add-expression/',\n        views.filter_addexpression,\n        name='alertprofiles-filters-addexpression',\n    ),\n    path(\n        'filters/add-expression/operatorhelp',\n        views.filter_addexpression_operator_help_modal,\n        name='alertprofiles-filters-addexpression-operator-help',\n    ),\n    path(\n        'filters/save-expression/',\n        views.filter_saveexpression,\n        name='alertprofiles-filters-saveexpression',\n    ),\n    path(\n        'filters/remove-expression/',\n        views.filter_removeexpression,\n        name='alertprofiles-filters-removeexpression',\n    ),\n    # Filter groups\n    path('filter-groups/', views.filter_group_list, name='alertprofiles-filter_groups'),\n    path(\n        'filter-groups/<int:filter_group_id>/',\n        views.filter_group_detail,\n        name='alertprofiles-filter_groups-detail',\n    ),\n    path(\n        'filter-groups/operatorhelp/',\n        views.filter_group_operator_help_modal,\n        name='alertprofiles-filter_groups-operator-help',\n    ),\n    path(\n        'filter-groups/new/',\n        views.filter_group_detail,\n        name='alertprofiles-filter_groups-new',\n    ),\n    path(\n        'filter-groups/save/',\n        views.filter_group_save,\n        name='alertprofiles-filter_groups-save',\n    ),\n    path(\n        'filter-groups/remove/',\n        views.filter_group_remove,\n        name='alertprofiles-filter_groups-remove',\n    ),\n    path(\n        'filter-groups/add-filter/',\n        views.filter_group_addfilter,\n        name='alertprofiles-filter_groups-addfilter',\n    ),\n    path(\n        'filter-groups/remove-filter/',\n        views.filter_group_remove_or_move_filter,\n        name='alertprofiles-filter_groups-removefilter',\n    ),\n    # Filter variables (aka. matchfields)\n    path('matchfields/', views.matchfield_list, name='alertprofiles-matchfields'),\n    path(\n        'matchfields/<int:matchfield_id>/',\n        views.matchfield_detail,\n        name='alertprofiles-matchfields-detail',\n    ),\n    path(\n        'matchfields/new/',\n        views.matchfield_detail,\n        name='alertprofiles-matchfields-new',\n    ),\n    path(\n        'matchfields/save/',\n        views.matchfield_save,\n        name='alertprofiles-matchfields-save',\n    ),\n    path(\n        'matchfields/remove/',\n        views.matchfield_remove,\n        name='alertprofiles-matchfields-remove',\n    ),\n    # Admin settings:\n    #################\n    # Permissions\n    path('permissions/', views.permission_list, name='alertprofiles-permissions'),\n    path(\n        'permissions/help',\n        views.permissions_help_modal,\n        name='alertprofiles-permissions-help',\n    ),\n    path(\n        'permissions/<int:group_id>/',\n        views.permission_list,\n        name='alertprofiles-permissions-detail',\n    ),\n    path(\n        'permissions/save/',\n        views.permissions_save,\n        name='alertprofiles-permissions-save',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/alertprofiles/utils.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2008, 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility methods for Alert Profiles\"\"\"\n\nimport hashlib\nimport os\n\nfrom django.db import transaction\n\nimport nav.config\nimport nav.buildconf\nfrom nav.web.auth.utils import get_account\nfrom nav.models.profiles import (\n    Filter,\n    FilterGroup,\n    FilterGroupContent,\n    Account,\n    AlertSubscription,\n    TimePeriod,\n)\n\nADMINGROUP = 1\nCONFIGDIR = 'alertprofiles'\n\n\ndef account_owns_filters(account, *filters):\n    \"\"\"\n    Verifies that account has access to edit/remove filters and/or filter\n    groups.\n    \"\"\"\n\n    # Check if user is admin\n    groups = account.groups.filter(pk=ADMINGROUP).count()\n    if groups > 0:\n        # User is admin\n        return True\n    else:\n        # User is not admin, check each filter\n        for filter in filters:\n            try:\n                if isinstance(filter, (Filter, FilterGroup)):\n                    owner = filter.owner\n                else:\n                    owner = filter.get().owner\n            except Account.DoesNotExist:\n                # This is a public filter, and we already know that this user\n                # is not an admin\n                return False\n            else:\n                if owner == account:\n                    return True\n                else:\n                    return False\n\n\ndef resolve_account_admin_and_owner(request):\n    \"\"\"Primarily used before saving filters and filter groups.\n    Gets account, checks if user is admin, and sets owner to a appropriate\n    value.\n    \"\"\"\n    account = get_account(request)\n    admin = account.is_admin()\n\n    owner = None\n    if request.POST.get('owner') or not admin:\n        owner = account\n\n    return account, admin, owner\n\n\n@transaction.atomic()\ndef order_filter_group_content(filter_group):\n    \"\"\"Filter group content is ordered by priority where each filters priority\n    is the previous filters priority incremented by one, starting at 1. Here we\n    loop through all the filters and check if they are ordered that way, and if\n    they are not, we order them that way.\n\n    Returns the last filters priority (0 if there are no filters)\n    \"\"\"\n    filter_group_content = FilterGroupContent.objects.filter(\n        filter_group=filter_group.id\n    ).order_by('priority')\n\n    if filter_group_content:\n        prev_priority = 0\n        for f in filter_group_content:\n            priority = f.priority\n            if priority - prev_priority != 1:\n                f.priority = prev_priority + 1\n                f.save()\n            prev_priority = f.priority\n\n        return prev_priority\n    else:\n        return 0\n\n\ndef read_time_period_templates():\n    templates = {}\n    template_dir = nav.config.find_config_file(CONFIGDIR)\n    template_configs = os.listdir(template_dir)\n\n    for template_file in template_configs:\n        if '.conf' in template_file:\n            filename = os.path.join(template_dir, template_file)\n            key = hashlib.md5(filename.encode('utf-8')).hexdigest()\n            config = nav.config.getconfig(filename)\n            templates[key] = config\n\n    return templates\n\n\ndef alert_subscriptions_table(periods):\n    weekday_subscriptions = []\n    weekend_subscriptions = []\n    shared_class_id = 0\n\n    alert_subscriptions = AlertSubscription.objects.select_related(\n        'time_period', 'filter_group', 'alert_address'\n    ).filter(time_period__in=periods)\n\n    for p in periods:\n        valid_during = p.valid_during\n\n        subscriptions = []\n        for s in alert_subscriptions:\n            if s.time_period == p:\n                subscriptions.append(s)\n\n        # This little snippet magically assigns a class to shared time periods\n        # so they appear with the same highlight color.\n        if valid_during == TimePeriod.ALL_WEEK:\n            p.css_class = 'shared' + str(shared_class_id)\n            shared_class_id += 1\n            if shared_class_id > 7:\n                shared_class_id = 0\n\n        # For usability we change 'all days' periods to one weekdays and one\n        # weekends period.\n        # Because we might add the same period to both weekdays and weekends we\n        # must make sure at least one of them is a copy, so changes to one of\n        # them don't apply to both.\n        if valid_during in (TimePeriod.WEEKDAYS, TimePeriod.ALL_WEEK):\n            weekday_subscriptions.append(\n                {\n                    'time_period': p,\n                    'alert_subscriptions': subscriptions,\n                }\n            )\n        if valid_during in (TimePeriod.WEEKENDS, TimePeriod.ALL_WEEK):\n            weekend_subscriptions.append(\n                {\n                    'time_period': p,\n                    'alert_subscriptions': subscriptions,\n                }\n            )\n\n    subscriptions = [\n        {'title': 'Weekdays', 'subscriptions': weekday_subscriptions},\n        {'title': 'Weekends', 'subscriptions': weekend_subscriptions},\n    ]\n\n    # There's not stored any information about a end time in the DB, only start\n    # times, so the end time of one period is the start time of the next\n    # period.\n    for type in subscriptions:\n        subscription = type['subscriptions']\n        for i, s in enumerate(subscription):\n            if i < len(subscription) - 1:\n                end_time = subscription[i + 1]['time_period'].start\n            else:\n                end_time = subscription[0]['time_period'].start\n            s['time_period'].end = end_time\n\n    return subscriptions\n"
  },
  {
    "path": "python/nav/web/alertprofiles/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007, 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Alert Profiles view functions\"\"\"\n\n# TODO This module has crazy-many lines and should use class-based views\n\n# TODO Check that functions that should require permission do require\n# permission\n\n# TODO Filter/filter_groups have owners, check that the account that performs\n# the operation is the owner\n\nfrom django.http import HttpResponseRedirect, QueryDict\nfrom django.db.models import Q\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\nfrom nav.web.modals import render_modal\nfrom nav.web.utils import SubListView\n\nfrom nav.models.profiles import (\n    Account,\n    AccountGroup,\n    AlertAddress,\n    AlertPreference,\n    AlertProfile,\n    TimePeriod,\n    AlertSubscription,\n    FilterGroupContent,\n    Operator,\n    Expression,\n    Filter,\n    FilterGroup,\n    MatchField,\n    SMSQueue,\n    AccountAlertQueue,\n)\nfrom nav.web.auth.utils import get_account\nfrom nav.web.message import Messages, new_message\n\nfrom nav.web.alertprofiles.forms import TimePeriodForm, LanguageForm\nfrom nav.web.alertprofiles.forms import AlertProfileForm, AlertSubscriptionForm\nfrom nav.web.alertprofiles.forms import AlertAddressForm, FilterForm\nfrom nav.web.alertprofiles.forms import ExpressionForm, FilterGroupForm\nfrom nav.web.alertprofiles.forms import MatchFieldForm\n\nfrom nav.web.alertprofiles.utils import alert_subscriptions_table\nfrom nav.web.alertprofiles.utils import read_time_period_templates\nfrom nav.web.alertprofiles.utils import resolve_account_admin_and_owner\nfrom nav.web.alertprofiles.utils import account_owns_filters\nfrom nav.web.alertprofiles.utils import order_filter_group_content\n\nfrom nav.web.alertprofiles.shortcuts import (\n    alertprofiles_response_forbidden,\n    alertprofiles_response_not_found,\n    BASE_PATH,\n)\n\nfrom .decorators import requires_post\n\n_ = lambda a: a\n\nPAGINATE_BY = 25\n\n\ndef overview(request):\n    \"\"\"The Alert Profiles overview / index page\"\"\"\n    account = get_account(request)\n\n    # Get information about user\n    active_profile = account.get_active_profile()\n\n    if not active_profile:\n        subscriptions = None\n    else:\n        periods = TimePeriod.objects.filter(profile=active_profile).order_by('start')\n        subscriptions = alert_subscriptions_table(periods)\n\n    info_dict = {\n        'active': {'overview': True},\n        'active_profile': active_profile,\n        'alert_subscriptions': subscriptions,\n        'navpath': [\n            ('Home', '/'),\n            ('Alert profiles', None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/account_detail.html', info_dict)\n\n\ndef groups_and_permissions_modal(request):\n    \"\"\"Render a modal with information about groups and permissions\"\"\"\n    account = get_account(request)\n\n    # Get information about user\n    groups = account.groups.all()\n    active_profile = account.get_active_profile()\n\n    # Get information about users privileges\n    sms_privilege = account.has_perm('alert_by', 'sms')\n    filter_dict = {'group_permissions__in': [g.id for g in groups]}\n    filter_groups = (\n        FilterGroup.objects.filter(**filter_dict).distinct().order_by('name')\n    )\n\n    language = account.preferences.get(account.PREFERENCE_KEY_LANGUAGE, 'en')\n    language_form = LanguageForm(initial={'language': language})\n\n    return render_modal(\n        request,\n        'alertprofiles/_groups_and_permissions_modal.html',\n        context={\n            'active_profile': active_profile,\n            'filter_groups': filter_groups,\n            'groups': groups,\n            'language_form': language_form,\n            'sms_privilege': sms_privilege,\n        },\n        modal_id=\"groups-and-permissions\",\n        size=\"large\",\n    )\n\n\ndef show_profile(request):\n    \"\"\"Shows a single profile\"\"\"\n    account = get_account(request)\n\n    # Define valid options for ordering\n    valid_ordering = ['name', '-name']\n    order_by = request.GET.get('order_by', 'name').lower()\n    if order_by not in valid_ordering:\n        order_by = 'name'\n\n    active_profile = account.get_active_profile()\n\n    if not active_profile:\n        new_message(request, _('There\\'s no active profile set.'), Messages.NOTICE)\n\n    profiles = AlertProfile.objects.filter(account=account.pk).order_by(order_by)\n\n    info_dict = {\n        'active': {'profile': True},\n        'subsection': {'list': True},\n        'profiles': profiles,\n        'active_profile': active_profile,\n        'page_link': reverse('alertprofiles-profile'),\n        'order_by': order_by,\n        'navpath': BASE_PATH + [('Profiles', None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=profiles,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/profile.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef profile_show_form(\n    request, profile_id=None, profile_form=None, time_period_form=None\n):\n    \"\"\"Shows the profile edit form\"\"\"\n    account = get_account(request)\n    profile = None\n    periods = []\n    detail_id = None\n    page_name = 'New profile'\n\n    if profile_id:\n        try:\n            profile = AlertProfile.objects.get(pk=profile_id, account=account)\n        except AlertProfile.DoesNotExist:\n            new_message(\n                request, _('The requested profile does not exist.'), Messages.ERROR\n            )\n            return HttpResponseRedirect(reverse('alertprofiles-profile'))\n\n        detail_id = profile.id\n        page_name = profile.name\n        periods = TimePeriod.objects.filter(profile=profile).order_by('start')\n\n        if not time_period_form:\n            time_period_form = TimePeriodForm(initial={'profile': profile.id})\n\n        if not profile_form:\n            profile_form = AlertProfileForm(instance=profile)\n    elif not profile_form:\n        profile_form = AlertProfileForm()\n\n    templates = None\n    if not profile_id:\n        templates = read_time_period_templates()\n        subsection = {'new': True}\n    else:\n        subsection = {'detail': profile.id}\n\n    info_dict = {\n        'form': profile_form,\n        'time_period_form': time_period_form,\n        'detail_id': detail_id,\n        'owner': True,\n        'alert_subscriptions': alert_subscriptions_table(periods),\n        'time_period_templates': templates,\n        'active': {'profile': True},\n        'subsection': subsection,\n        'navpath': BASE_PATH\n        + [('Profiles', reverse('alertprofiles-profile')), (page_name, None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/profile_detail.html', info_dict)\n\n\ndef profile_detail(request, profile_id=None):\n    \"\"\"Shows the profile form a specific profile\"\"\"\n    return profile_show_form(request, profile_id)\n\n\ndef profile_new(request):\n    \"\"\"Shows an empty profile form\"\"\"\n    return profile_show_form(request)\n\n\ndef set_active_profile(request, profile):\n    \"\"\"Set active profile to given profile\"\"\"\n    account = get_account(request)\n    preference, _created = AlertPreference.objects.get_or_create(\n        account=account, defaults={'active_profile': profile}\n    )\n    preference.active_profile = profile\n    preference.save()\n    new_message(\n        request,\n        'Active profile automatically set to {}'.format(profile.name),\n        Messages.NOTICE,\n    )\n\n\ndef create_time_periods(request, profile):\n    \"\"\"Creates time periods for this profile based on template chosen\"\"\"\n    templates = read_time_period_templates()\n    template = templates.get(request.POST.get('template'), None)\n\n    if template:\n        # A template were selected. Loop through each subsection and make\n        # periods if the title of the subsection is 'all_week', 'weekends'\n        # or 'weekdays'.\n        for key, value in template.items():\n            periods = {}\n            if key == 'all_week':\n                valid_during = TimePeriod.ALL_WEEK\n                periods = value\n            elif key == 'weekdays':\n                valid_during = TimePeriod.WEEKDAYS\n                periods = value\n            elif key == 'weekends':\n                valid_during = TimePeriod.WEEKENDS\n                periods = value\n\n            # Make the time periods.\n            for start_time in periods.values():\n                period = TimePeriod(\n                    profile=profile, start=start_time, valid_during=valid_during\n                )\n                period.save()\n\n\n@requires_post('alertprofiles-profile')\ndef profile_save(request):\n    \"\"\"Saves profile data\"\"\"\n    account = get_account(request)\n\n    if request.POST.get('id'):\n        try:\n            profile = AlertProfile.objects.get(pk=request.POST.get('id'))\n        except (ValueError, AlertProfile.DoesNotExist):\n            return alertprofiles_response_not_found(\n                request, 'Requested profile does not exist'\n            )\n\n        if profile.account != account:\n            return alertprofiles_response_forbidden(\n                request, 'You do not own this profile.'\n            )\n    else:\n        profile = AlertProfile(account=account)\n\n    profile_form = AlertProfileForm(request.POST, instance=profile)\n\n    if not profile_form.is_valid():\n        detail_id = request.POST.get('id') or None\n        return profile_show_form(request, detail_id, profile_form)\n\n    profile = profile_form.save()\n\n    # No other profile, set active profile to this profile.\n    if AlertProfile.objects.filter(account=account).count() == 1:\n        set_active_profile(request, profile)\n\n    # If the user has chosen a time period template, add that period to the\n    # profile\n    if 'template' in request.POST:\n        create_time_periods(request, profile)\n\n    new_message(request, 'Saved profile {}'.format(profile.name), Messages.SUCCESS)\n\n    return HttpResponseRedirect(\n        reverse('alertprofiles-profile-detail', args=(profile.id,))\n    )\n\n\n@requires_post('alertprofiles-profile')\ndef profile_remove(request):\n    \"\"\"Removes a profile\"\"\"\n    post = request.POST.copy()\n    for data in request.POST:\n        if data.find(\"=\") != -1:\n            attr, value = data.split(\"=\")\n            del post[data]\n            post[attr] = value\n    request.POST = post\n\n    if request.POST.get('activate'):\n        return profile_activate(request)\n    if request.POST.get('deactivate'):\n        return profile_deactivate(request)\n\n    account = get_account(request)\n    if request.POST.get('confirm'):\n        profiles = AlertProfile.objects.filter(pk__in=request.POST.getlist('element'))\n\n        for profile in profiles:\n            if profile.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this profile.')\n                )\n\n        profile_names = ', '.join([p.name for p in profiles])\n        profiles.delete()\n\n        new_message(\n            request,\n            _('Deleted profiles: %(profiles)s') % {'profiles': profile_names},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-profile'))\n    else:\n        try:\n            active_profile = AlertPreference.objects.get(account=account).active_profile\n        except AlertPreference.DoesNotExist:\n            active_profile = None\n        profiles = AlertProfile.objects.filter(pk__in=request.POST.getlist('profile'))\n\n        if not profiles:\n            new_message(request, _('No profiles were selected.'), Messages.NOTICE)\n            HttpResponseRedirect(reverse('alertprofiles-profile'))\n\n        elements = []\n        for profile in profiles:\n            warnings = []\n            if profile.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this profile.')\n                )\n            if profile == active_profile:\n                warnings.append({'message': 'This is the currently active profile.'})\n\n            queued = AccountAlertQueue.objects.filter(\n                subscription__time_period__profile=profile\n            ).count()\n            if queued > 0:\n                warnings.append(\n                    {\n                        'message': \"There are %(queued)s queued alerts on a \"\n                        \"subscription under this profile. Deleting this\"\n                        \" time period will delete those alerts as \"\n                        \"well.\" % {'queued': queued}\n                    }\n                )\n\n            elements.append(\n                {\n                    'id': profile.id,\n                    'description': profile.name,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-profile-remove'),\n            'active': {'profile': True},\n            'subsection': {'list': True},\n            'object_list': elements,\n            'perform_on': None,\n            'navpath': BASE_PATH\n            + [\n                ('Profiles', reverse('alertprofiles-profile')),\n                ('Remove profiles', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\n@requires_post('alertprofiles-profile', ('activate',))\ndef profile_activate(request):\n    \"\"\"Activates a profile\"\"\"\n    account = get_account(request)\n\n    try:\n        profile = AlertProfile.objects.get(\n            pk=request.POST.get('activate'), account=account\n        )\n    except AlertProfile.DoesNotExist:\n        new_message(\n            request,\n            _('The profile you are trying to activate does not exist'),\n            Messages.ERROR,\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-profile'))\n\n    try:\n        preference = AlertPreference.objects.get(account=account)\n    except AlertPreference.DoesNotExist:\n        preference = AlertPreference(account=account)\n\n    preference.active_profile = profile\n    preference.save()\n\n    new_message(\n        request,\n        _('Active profile set to %(profile)s') % {'profile': profile.name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(reverse('alertprofiles-profile'))\n\n\n@requires_post('alertprofiles-profile')\ndef profile_deactivate(request):\n    \"\"\"Deactivates a profile\"\"\"\n    account = get_account(request)\n\n    try:\n        preference = AlertPreference.objects.get(account=account)\n    except AlertPreference.DoesNotExist:\n        preference = AlertPreference(account=account)\n\n    profile_name = preference.active_profile.name\n    preference.active_profile = None\n    preference.save()\n\n    new_message(\n        request,\n        _('Active profile %(profile)s was deactivated.') % {'profile': profile_name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(reverse('alertprofiles-profile'))\n\n\ndef profile_time_period(request, time_period_id, time_period_form=None):\n    \"\"\"Shows a form to edit a timeperiod of a profile\"\"\"\n    try:\n        time_period = TimePeriod.objects.get(pk=time_period_id)\n    except TimePeriod.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, message=_('Requested time period does not exist')\n        )\n    profile = time_period.profile\n\n    if not time_period_form:\n        time_period_form = TimePeriodForm(instance=time_period)\n\n    info_dict = {\n        'active': {'profile': True},\n        'subsection': {'detail': time_period.profile.id, 'timeperiod': time_period.id},\n        'time_period': time_period,\n        'time_period_form': time_period_form,\n        'navpath': BASE_PATH\n        + [\n            ('Profiles', reverse('alertprofiles-profile')),\n            (profile.name, reverse('alertprofiles-profile-detail', args=(profile.id,))),\n            ('Edit time period', None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/timeperiod_edit.html', info_dict)\n\n\n@requires_post('alertprofiles-profile', ('profile',))\ndef profile_time_period_add(request):\n    \"\"\"Adds a new time period to a profile\"\"\"\n    account = get_account(request)\n\n    try:\n        profile = AlertProfile.objects.get(pk=request.POST.get('profile'))\n    except AlertProfile.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested profile does not exist.')\n        )\n\n    if profile.account != account:\n        return alertprofiles_response_forbidden(\n            request, _('You do not own this profile.')\n        )\n\n    time_period = None\n    if request.POST.get('id'):\n        time_period = TimePeriod.objects.get(pk=request.POST.get('id'))\n\n    time_period_form = TimePeriodForm(\n        request.POST,\n        instance=time_period,\n        initial={'profile': profile},\n    )\n\n    if not time_period_form.is_valid():\n        if time_period:\n            return profile_time_period(request, time_period.id, time_period_form)\n        else:\n            return profile_show_form(request, profile.id, None, time_period_form)\n\n    time_period = time_period_form.save()\n    new_message(\n        request,\n        _('Saved time period %(time)s for %(during)s to profile %(profile)s')\n        % {\n            'time': time_period.start,\n            'during': time_period.get_valid_during_display(),\n            'profile': profile.name,\n        },\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-profile-detail', args=(profile.id,))\n    )\n\n\n@requires_post('alertprofiles-profile')\ndef profile_time_period_remove(request):\n    \"\"\"Removes a time period from a profile\"\"\"\n    if request.POST.get('confirm'):\n        account = get_account(request)\n        elements = request.POST.getlist('element')\n\n        time_periods = TimePeriod.objects.filter(pk__in=elements)\n        first = True\n        for period in time_periods:\n            if first:\n                # We only check profile once and assume it's the same for all.\n                # It's only used to redirect the user after deleting all the\n                # periods anyways.\n                profile = period.profile\n                first = False\n            if period.profile.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this profile.')\n                )\n\n        time_periods_name = ', '.join(\n            [\n                '%s for %s' % (t.start, t.get_valid_during_display())\n                for t in time_periods\n            ]\n        )\n        time_periods.delete()\n\n        new_message(\n            request,\n            'Removed time periods: %(names)s' % {'names': time_periods_name},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(\n            reverse('alertprofiles-profile-detail', args=(profile.id,))\n        )\n    else:\n        account = get_account(request)\n        time_periods = TimePeriod.objects.filter(pk__in=request.POST.getlist('period'))\n        profile = AlertProfile.objects.get(pk=request.POST.get('profile'))\n        active_profile = account.get_active_profile()\n        if active_profile and profile == active_profile:\n            new_message(\n                request,\n                _(\n                    \"Time periods are used in profile %(profile)s, which \"\n                    \"is the current active profile.\"\n                )\n                % {'profile': profile.name},\n                Messages.WARNING,\n            )\n\n        if not time_periods:\n            new_message(request, _('No time periods were selected.'), Messages.NOTICE)\n            return HttpResponseRedirect(\n                reverse('alertprofiles-profile-detail', args=(profile.id,))\n            )\n\n        elements = []\n        for period in time_periods:\n            if period.profile.account != account:\n                # Even though we assume profile is the same for GUI-stuff, we\n                # can't do that when it comes to permissions.\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this profile.')\n                )\n            description = _('From %(time)s for %(profile)s during %(valid_during)s') % {\n                'time': period.start,\n                'profile': period.profile.name,\n                'valid_during': period.get_valid_during_display(),\n            }\n\n            queued = AccountAlertQueue.objects.filter(\n                subscription__time_period=period\n            ).count()\n            warnings = []\n            if queued > 0:\n                warnings.append(\n                    {\n                        'message': \"There are %(queued)s queued alerts on a \"\n                        \"subscription under this time period. Deleting \"\n                        \"this time period will delete those alerts as \"\n                        \"well.\" % {'queued': queued}\n                    }\n                )\n            elements.append(\n                {\n                    'id': period.id,\n                    'description': description,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-profile-timeperiod-remove'),\n            'active': {'profile': True},\n            'subsection': {'detail': profile.id},\n            'object_list': elements,\n            'navpath': BASE_PATH\n            + [\n                ('Profiles', reverse('alertprofiles-profile')),\n                (\n                    profile.name,\n                    reverse('alertprofiles-profile-detail', args=(profile.id,)),\n                ),\n                ('Remove time periods', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\ndef profile_time_period_setup(request, time_period_id=None):\n    \"\"\"Shows form to edit time periods of a profile\"\"\"\n    if not time_period_id:\n        new_message(request, _('No time period were specified'), Messages.ERROR)\n        redirect_url = reverse('alertprofiles-profile')\n        return HttpResponseRedirect(redirect_url)\n\n    account = get_account(request)\n\n    try:\n        time_period = TimePeriod.objects.get(pk=time_period_id)\n    except TimePeriod.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, message=_('Requested time period does not exist')\n        )\n    subscriptions = (\n        AlertSubscription.objects.select_related('alert_address', 'filter_group')\n        .filter(time_period=time_period)\n        .order_by('alert_address', 'filter_group')\n    )\n    profile = time_period.profile\n\n    if account != profile.account:\n        return alertprofiles_response_forbidden(\n            request, _('You do not have access to this profile.')\n        )\n\n    editing = False\n    if request.method == 'POST' and request.POST.get('time_period'):\n        time_period_form = AlertSubscriptionForm(request.POST, time_period=time_period)\n        if request.POST.get('id'):\n            editing = True\n    else:\n        time_period_form = AlertSubscriptionForm(time_period=time_period)\n\n    time_period_form.is_valid()\n\n    info_dict = {\n        'form': time_period_form,\n        'subscriptions': subscriptions,\n        'time_period': time_period,\n        'active': {'profile': True},\n        'subsection': {'detail': profile.id, 'subscriptions': time_period.id},\n        'editing': editing,\n        'num_addresses': AlertAddress.objects.filter(account=account).count(),\n        'num_filter_groups': FilterGroup.objects.filter(\n            Q(owner=account) | Q(owner__isnull=True)\n        ).count(),\n        'navpath': BASE_PATH\n        + [\n            ('Profiles', reverse('alertprofiles-profile')),\n            (profile.name, reverse('alertprofiles-profile-detail', args=(profile.id,))),\n            (\n                str(time_period.start) + ', ' + time_period.get_valid_during_display(),\n                None,\n            ),\n        ],\n        'title': 'NAV - Alert profiles',\n        'profile': profile,\n    }\n    return render(request, 'alertprofiles/subscription_form.html', info_dict)\n\n\n@requires_post('alertprofiles-profile')\ndef profile_time_period_subscription_add(request):\n    \"\"\"Adds a subscription to a timeperiod of a profile\"\"\"\n    account = get_account(request)\n\n    if request.POST.get('id'):\n        existing_subscription = AlertSubscription.objects.get(pk=request.POST.get('id'))\n        form = AlertSubscriptionForm(request.POST, instance=existing_subscription)\n    else:\n        form = AlertSubscriptionForm(request.POST)\n\n    if not form.is_valid():\n        time_period_id = request.POST.get('time_period')\n        return profile_time_period_setup(request, time_period_id)\n\n    time_period = form.cleaned_data['time_period']\n\n    if time_period.profile.account != account:\n        return alertprofiles_response_forbidden(\n            request, _('You do not own this profile.')\n        )\n\n    subscription = form.save()\n\n    new_message(\n        request,\n        _(\n            'Saved alert subscription for filter group %(fg)s to period %(time)s '\n            'for %(during)s'\n        )\n        % {\n            'fg': subscription.filter_group.name,\n            'time': time_period.start,\n            'during': time_period.get_valid_during_display(),\n        },\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-profile-timeperiod-setup', args=(time_period.id,))\n    )\n\n\ndef profile_time_period_subscription_edit(request, subscription_id=None):\n    \"\"\"Shows the form to edit subscriptions of a time period of a profile\"\"\"\n    if not subscription_id:\n        new_message(request, _('No alert subscription specified'), Messages.ERROR)\n        return HttpResponseRedirect(reverse('alertprofile-profile'))\n\n    account = get_account(request)\n\n    subscription = AlertSubscription.objects.select_related(\n        'time_period', 'time_period__profile'\n    ).get(pk=subscription_id)\n    form = AlertSubscriptionForm(\n        instance=subscription, time_period=subscription.time_period\n    )\n    profile = subscription.time_period.profile\n\n    if account != profile.account:\n        return alertprofiles_response_forbidden(\n            request, _('You do not have access to this profile.')\n        )\n\n    info_dict = {\n        'form': form,\n        'active': {'profile': True},\n        'subsection': {\n            'detail': profile.id,\n            'subscriptions': subscription.time_period.id,\n            'subscription_detail': subscription.id,\n        },\n        'subscription': subscription,\n        'editing': True,\n        'num_addresses': AlertAddress.objects.filter(account=account).count(),\n        'num_filter_groups': FilterGroup.objects.filter(\n            Q(owner=account) | Q(owner__isnull=True)\n        ).count(),\n        'navpath': BASE_PATH\n        + [\n            ('Profiles', reverse('alertprofiles-profile')),\n            (profile.name, reverse('alertprofiles-profile-detail', args=(profile.id,))),\n            (\n                str(subscription.time_period.start)\n                + ', '\n                + subscription.time_period.get_valid_during_display(),\n                reverse(\n                    'alertprofiles-profile-timeperiod-setup',\n                    args=(subscription.time_period.id,),\n                ),\n            ),\n            ('Edit subscription', None),\n        ],\n        'title': 'NAV - Alert profiles',\n        'profile': profile,\n    }\n    return render(request, 'alertprofiles/subscription_form.html', info_dict)\n\n\n@requires_post('alertprofiles-profile')\ndef profile_time_period_subscription_remove(request):\n    \"\"\"Removes a subscription from a time period\"\"\"\n    if request.POST.get('confirm'):\n        account = get_account(request)\n        subscriptions = request.POST.getlist('element')\n\n        try:\n            period = TimePeriod.objects.get(pk=request.POST.get('perform_on'))\n        except TimePeriod.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested time period does not exist')\n            )\n\n        if period.profile.account != account:\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this profile.')\n            )\n\n        AlertSubscription.objects.filter(pk__in=subscriptions).delete()\n\n        new_message(request, _('Removed alert subscriptions.'), Messages.SUCCESS)\n        return HttpResponseRedirect(\n            reverse('alertprofiles-profile-timeperiod-setup', args=(period.id,))\n        )\n    else:\n        account = get_account(request)\n        subscriptions = AlertSubscription.objects.filter(\n            pk__in=request.POST.getlist('subscription')\n        )\n\n        try:\n            period = TimePeriod.objects.get(pk=request.POST.get('id'))\n        except TimePeriod.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested time period does not exist')\n            )\n\n        if period.profile.account != account:\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this profile.')\n            )\n\n        if not subscriptions:\n            new_message(\n                request, _('No alert subscriptions were selected.'), Messages.NOTICE\n            )\n            return HttpResponseRedirect(\n                reverse('alertprofiles-profile-timeperiod-setup', args=(period.id,))\n            )\n\n        # Make tuples, (id, description_string) for the confirmation page\n        elements = []\n        for sub in subscriptions:\n            warnings = []\n            queued = AccountAlertQueue.objects.filter(subscription=sub).count()\n            if queued > 0:\n                warnings.append(\n                    {\n                        'message': \"There are %(queued)s queued alert(s) on this \"\n                        \"subscription.  If you delete this \"\n                        \"subscription, those alerts will be deleted as \"\n                        \"well.\" % {'queued': queued},\n                    }\n                )\n\n            description = _(\n                \"Watch %(fg)s, send to %(address)s %(dispatch)s, from \"\n                \"%(time)s for %(profile)s during %(during)s\"\n            ) % {\n                'fg': sub.filter_group.name,\n                'address': sub.alert_address.address,\n                'dispatch': sub.get_type_display(),\n                'time': sub.time_period.start,\n                'profile': sub.time_period.profile.name,\n                'during': sub.time_period.get_valid_during_display(),\n            }\n\n            elements.append(\n                {\n                    'id': sub.id,\n                    'description': description,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse(\n                'alertprofiles-profile-timeperiod-subscription-remove'\n            ),\n            'active': {'profile': True},\n            'subsection': {'detail': period.profile.id, 'subscriptions': period.id},\n            'object_list': elements,\n            'perform_on': period.id,\n            'navpath': BASE_PATH\n            + [\n                ('Profiles', reverse('alertprofiles-profile')),\n                (\n                    period.profile.name,\n                    reverse('alertprofiles-profile-detail', args=(period.profile.id,)),\n                ),\n                (\n                    str(period.start) + ', ' + period.get_valid_during_display(),\n                    reverse(\n                        'alertprofiles-profile-timeperiod-setup', args=(period.id,)\n                    ),\n                ),\n                ('Remove subscriptions', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\ndef address_list(request):\n    \"\"\"Lists out the user's registered alert addresses\"\"\"\n    account = get_account(request)\n\n    page = request.GET.get('page', 1)\n\n    # Define valid options for ordering\n    valid_ordering = ['address', '-address', 'type', '-type']\n    order_by = request.GET.get('order_by', 'address').lower()\n    if order_by not in valid_ordering:\n        order_by = 'address'\n\n    address = (\n        AlertAddress.objects.select_related('type')\n        .filter(account=account.pk)\n        .order_by(order_by)\n    )\n\n    info_dict = {\n        'page': page,\n        'active': {'address': True},\n        'subsection': {'list': True},\n        'form_action': reverse('alertprofiles-address-remove'),\n        'page_link': reverse('alertprofiles-address'),\n        'order_by': order_by,\n        'navpath': BASE_PATH + [('Address', None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=address,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/address_list.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef address_show_form(request, address_id=None, address_form=None):\n    \"\"\"Shows the form to edit an alert address\"\"\"\n    account = get_account(request)\n    page_name = 'New address'\n    detail_id = None\n    address = None\n\n    if address_id:\n        try:\n            address = AlertAddress.objects.get(pk=address_id)\n        except AlertAddress.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, 'The requested alert address does not exist.'\n            )\n        else:\n            # Check if we really are the owner of the address\n            if address.account != account:\n                return alertprofiles_response_forbidden(\n                    request, 'You do not have access to this alert address.'\n                )\n\n            page_name = address.address\n            detail_id = address.id\n\n    if not address_form:\n        address_form = AlertAddressForm(instance=address)\n\n    if not detail_id:\n        subsection = {'new': True}\n    else:\n        subsection = {'detail': detail_id}\n\n    info_dict = {\n        'active': {'address': True},\n        'subsection': subsection,\n        'detail_id': detail_id,\n        'form': address_form,\n        'owner': True,\n        'navpath': BASE_PATH\n        + [\n            ('Address', reverse('alertprofiles-address')),\n            (page_name, None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/address_form.html', info_dict)\n\n\ndef address_detail(request, address_id=None):\n    \"\"\"Shows the form to edit an existing alert address\"\"\"\n    return address_show_form(request, address_id)\n\n\n@requires_post('alertprofiles-address')\ndef address_save(request):\n    \"\"\"Saves an alert address for a user\"\"\"\n    account = get_account(request)\n    address = None\n    address_id = None\n\n    if request.POST.get('id'):\n        try:\n            address = AlertAddress.objects.get(pk=request.POST.get('id'))\n        except AlertAddress.DoesNotExist:\n            address = None\n        else:\n            if address.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this address.')\n                )\n            else:\n                address_id = address.id\n\n    if not address:\n        address = AlertAddress(account=account)\n\n    address_form = AlertAddressForm(request.POST, instance=address)\n\n    if not address_form.is_valid():\n        return address_show_form(request, address_id, address_form)\n\n    address = address_form.save()\n\n    new_message(\n        request,\n        _('Saved address %(address)s') % {'address': address.address},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-address-detail', args=(address.id,))\n    )\n\n\n@requires_post('alertprofiles-address')\ndef address_remove(request):\n    \"\"\"Removes an alert address from a user\"\"\"\n    account = get_account(request)\n    if request.POST.get('confirm'):\n        addresses = AlertAddress.objects.filter(pk__in=request.POST.getlist('element'))\n\n        for addr in addresses:\n            if addr.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this address.')\n                )\n\n        subscriptions = AlertSubscription.objects.filter(alert_address__in=addresses)\n        if subscriptions:\n            for sub in subscriptions:\n                new_message(\n                    request,\n                    _(\n                        \"Address %(address)s were used in a subscription, \"\n                        \"%(during)s from %(start)s watch %(fg)s for profile \"\n                        \"%(profile)s.  The subscription were removed as a side \"\n                        \"effect of deleting this address.\"\n                    )\n                    % {\n                        'address': sub.alert_address.address,\n                        'start': sub.time_period.start,\n                        'during': sub.time_period.get_valid_during_display(),\n                        'profile': sub.time_period.profile.name,\n                        'fg': sub.filter_group.name,\n                    },\n                    Messages.NOTICE,\n                )\n\n        names = ', '.join([a.address for a in addresses])\n        addresses.delete()\n\n        new_message(\n            request,\n            _('Removed addresses: %(names)s') % {'names': names},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-address'))\n    else:\n        addresses = AlertAddress.objects.filter(pk__in=request.POST.getlist('address'))\n\n        if not addresses:\n            new_message(request, _('No addresses were selected'), Messages.NOTICE)\n            return HttpResponseRedirect(reverse('alertprofiles-address'))\n\n        elements = []\n        for addr in addresses:\n            if addr.account != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not own this address.')\n                )\n\n            warnings = []\n            subscriptions = AlertSubscription.objects.filter(\n                alert_address=addr\n            ).select_related('filter_group', 'time_period', 'time_period__profile')\n            for sub in subscriptions:\n                warnings.append(\n                    {\n                        'message': 'Address used in subscription \"watch %(fg)s '\n                        'from %(time)s for profile %(profile)s\".'\n                        % {\n                            'fg': sub.filter_group.name,\n                            'time': sub.time_period.start,\n                            'profile': sub.time_period.profile.name,\n                        },\n                        'link': reverse(\n                            'alertprofiles-profile-detail',\n                            args=(sub.time_period.profile.id,),\n                        ),\n                    }\n                )\n\n                queued = AccountAlertQueue.objects.filter(subscription=sub).count()\n                if queued > 0:\n                    warnings.append(\n                        {\n                            'message': \"There are %(queued)s queued alerts on \"\n                            \"this subscription. Deleting this time \"\n                            \"period will delete those alerts as \"\n                            \"well.\" % {'queued': queued}\n                        }\n                    )\n\n            description = _('''%(type)s address %(address)s''') % {\n                'type': addr.type.name,\n                'address': addr.address,\n            }\n\n            elements.append(\n                {\n                    'id': addr.id,\n                    'description': description,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-address-remove'),\n            'active': {'address': True},\n            'subsection': {'list': True},\n            'object_list': elements,\n            'perform_on': None,\n            'navpath': BASE_PATH\n            + [\n                ('Address', reverse('alertprofiles-address')),\n                ('Remove addresses', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\n@requires_post('alertprofiles-profile', ('language',))\ndef language_save(request):\n    \"\"\"Saves the user's preferred language\"\"\"\n    account = get_account(request)\n    value = request.POST.get('language')\n    account.preferences[account.PREFERENCE_KEY_LANGUAGE] = value\n    account.save()\n\n    new_message(request, 'Changed language', Messages.SUCCESS)\n    return HttpResponseRedirect(reverse('alertprofiles-overview'))\n\n\ndef sms_list(request):\n    \"\"\"Lists SMS messages addressed to the current user\"\"\"\n    account = get_account(request)\n    page = request.GET.get('page', 1)\n\n    # Define valid options for ordering\n    valid_ordering = [\n        'time',\n        '-time',\n        'time_sent',\n        '-time_sent',\n        'phone',\n        '-phone',\n        'message',\n        '-message',\n        'severity',\n        '-severity',\n        'sent',\n        '-sent',\n    ]\n    order_by = request.GET.get('order_by', '-time').lower()\n    if order_by not in valid_ordering:\n        order_by = '-time'\n\n    # NOTE Old versions of alert engine may not have set account.\n    sms = SMSQueue.objects.filter(account=account).order_by(order_by)\n\n    info_dict = {\n        'page': page,\n        'active': {'sms': True},\n        'page_link': reverse('alertprofiles-sms'),\n        'order_by': order_by,\n        'navpath': BASE_PATH + [('My SMS', None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=sms,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/sms_list.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef filter_list(request):\n    \"\"\"Lists all the filters\"\"\"\n    account = get_account(request)\n    admin = account.is_admin()\n\n    page = request.GET.get('page', 1)\n\n    # Define valid options for ordering\n    valid_ordering = ['name', '-name', 'owner', '-owner']\n    order_by = request.GET.get('order_by', 'name').lower()\n    if order_by not in valid_ordering:\n        order_by = 'name'\n\n    # Get all public filters, and private filters belonging to this user only\n    filters = (\n        Filter.objects.select_related('owner')\n        .filter(Q(owner=account) | Q(owner__isnull=True))\n        .order_by(order_by)\n    )\n\n    active = {'filters': True}\n    info_dict = {\n        'page': page,\n        'active': active,\n        'subsection': {'list': True},\n        'admin': admin,\n        'form_action': reverse('alertprofiles-filters-remove'),\n        'page_link': reverse('alertprofiles-filters'),\n        'order_by': order_by,\n        'navpath': BASE_PATH + [('Filters', None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=filters,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/filter_list.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef filter_show_form(request, filter_id=None, filter_form=None):\n    \"\"\"Convenience method for showing the filter form\"\"\"\n    active = {'filters': True}\n    page_name = 'New filter'\n    account = get_account(request)\n    admin = account.is_admin()\n    is_owner = True\n\n    filtr = None\n    expressions = None\n    matchfields = None\n\n    # We assume that if no filter_id is set this filter has not been saved\n    if filter_id:\n        try:\n            filtr = Filter.objects.get(pk=filter_id)\n        except Filter.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter does not exist.')\n            )\n        else:\n            owner = filtr.owner\n            if not owner:\n                new_message(\n                    request,\n                    _(\n                        \"%(filter)s is a public filter and may be used by other \"\n                        \"users than you.\"\n                    )\n                    % {'filter': filtr.name},\n                    Messages.WARNING,\n                )\n                if not admin:\n                    is_owner = False\n            elif owner != account:\n                return alertprofiles_response_forbidden(\n                    request, _('You do not have acccess to the requested filter.')\n                )\n\n        matchfields = MatchField.objects.all().order_by('name')\n        # Get all matchfields (many-to-many connection by table Expression)\n        expressions = (\n            Expression.objects.select_related('match_field')\n            .filter(filter=filter_id)\n            .order_by('match_field__name')\n        )\n\n        for expr in expressions:\n            if expr.operator == Operator.IN:\n                expr.value = expr.value.split(\"|\")\n\n        # Check if filter is used by any filter groups\n        filter_groups = FilterGroupContent.objects.filter(filter=filtr)\n        if filter_groups:\n            fg_names = ', '.join([f.filter_group.name for f in filter_groups])\n            new_message(\n                request,\n                _(\n                    \"%(filter)s is used in the filter groups: %(filter_groups)s. \"\n                    \"Editing this filter will also change how those filter \"\n                    \"groups work.\"\n                )\n                % {'filter': filtr.name, 'filter_groups': fg_names},\n                Messages.WARNING,\n            )\n\n        page_name = filtr.name\n\n    # If no form is supplied we must make one\n    if not filter_form:\n        if filter_id:\n            data = {\n                'id': filter_id,\n                'owner': filtr.owner is not None,\n                'name': filtr.name,\n            }\n            filter_form = FilterForm(data, admin=admin, is_owner=is_owner)\n        else:\n            filter_form = FilterForm(\n                initial={'owner': account}, admin=admin, is_owner=is_owner\n            )\n\n    if filter_id:\n        subsection = {'detail': filter_id}\n    else:\n        subsection = {'new': True}\n\n    return render(\n        request,\n        'alertprofiles/filter_form.html',\n        {\n            'active': active,\n            'subsection': subsection,\n            'admin': admin,\n            'owner': is_owner,\n            'detail_id': filter_id,\n            'form': filter_form,\n            'matchfields': matchfields,\n            'expressions': expressions,\n            'navpath': BASE_PATH\n            + [\n                ('Filters', reverse('alertprofiles-filters')),\n                (page_name, None),\n            ],\n            'title': 'NAV - Alert profiles',\n        },\n    )\n\n\ndef filter_detail(request, filter_id=None):\n    \"\"\"Shows the form to edit filters\"\"\"\n    return filter_show_form(request, filter_id)\n\n\n@requires_post('alertprofiles-filters')\ndef filter_save(request):\n    \"\"\"Saves a filter\"\"\"\n    (account, admin, owner) = resolve_account_admin_and_owner(request)\n    filtr = None\n\n    # Build a form. Different values depending on if we are updating or\n    # making a new filter\n    if request.POST.get('id'):\n        try:\n            filtr = Filter.objects.get(pk=request.POST.get('id'))\n        except Filter.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter does not exist.')\n            )\n\n        if not account_owns_filters(account, filtr):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter.')\n            )\n\n    form = FilterForm(request.POST, admin=admin)\n\n    # If there are some invalid values, return to form and show the errors\n    if not form.is_valid():\n        detail_id = request.POST.get('id') or None\n        return filter_show_form(request, detail_id, form)\n\n    # Set the fields in Filter to the submited values\n    if request.POST.get('id'):\n        filtr.name = request.POST.get('name')\n        filtr.owner = owner\n    else:\n        filtr = Filter(name=request.POST.get('name'), owner=owner)\n\n    # Save the filter\n    filtr.save()\n\n    new_message(\n        request, _('Saved filter %(name)s') % {'name': filtr.name}, Messages.SUCCESS\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-filters-detail', args=(filtr.id,))\n    )\n\n\n@requires_post('alertprofiles-filters')\ndef filter_remove(request):\n    \"\"\"Deletes a filter\"\"\"\n    if request.POST.get('confirm'):\n        filters = Filter.objects.filter(pk__in=request.POST.getlist('element'))\n\n        if not account_owns_filters(get_account(request), *filters):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter.')\n            )\n\n        names = ', '.join([f.name for f in filters])\n        filters.delete()\n\n        new_message(\n            request, 'Removed filters: %(names)s' % {'names': names}, Messages.SUCCESS\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-filters'))\n    else:\n        filters = Filter.objects.filter(pk__in=request.POST.getlist('filter'))\n\n        if not account_owns_filters(get_account(request), *filters):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter.')\n            )\n\n        if not filters:\n            new_message(request, _('No filters were selected.'), Messages.NOTICE)\n            return HttpResponseRedirect(reverse('alertprofiles-filters'))\n\n        elements = []\n        for filtr in filters:\n            warnings = []\n            try:\n                filtr.owner\n            except Account.DoesNotExist:\n                warnings.append(\n                    {\n                        'message': 'This filter is public. Deleting it will '\n                        'make it unavailable for all users of this '\n                        'system.'\n                    }\n                )\n\n            filter_groups = FilterGroup.objects.filter(\n                filter_group_contents__filter=filtr\n            )\n            for fgroup in filter_groups:\n                warnings.append(\n                    {\n                        'message': 'Used in filter group %(name)s.'\n                        % {'name': fgroup.name},\n                        'link': reverse(\n                            'alertprofiles-filter_groups-detail', args=(fgroup.id,)\n                        ),\n                    }\n                )\n\n            elements.append(\n                {\n                    'id': filtr.id,\n                    'description': filtr.name,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-filters-remove'),\n            'active': {'filters': True},\n            'subsection': {'list': True},\n            'object_list': elements,\n            'perform_on': None,\n            'navpath': BASE_PATH\n            + [\n                ('Filters', reverse('alertprofiles-filters')),\n                ('Remove filters', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\n@requires_post('alertprofiles-filters', ('id', 'matchfield'))\ndef filter_addexpression(request):\n    \"\"\"Shows the form to add an expression to a filter\"\"\"\n    try:\n        filtr = Filter.objects.get(pk=request.POST.get('id'))\n    except Filter.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested filter does not exist')\n        )\n\n    try:\n        matchfield = MatchField.objects.get(pk=request.POST.get('matchfield'))\n    except MatchField.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested match field does not exist')\n        )\n\n    initial = {'filter': filtr.id, 'match_field': matchfield.id}\n    form = ExpressionForm(match_field=matchfield, initial=initial)\n\n    if not account_owns_filters(get_account(request), filtr):\n        return alertprofiles_response_forbidden(\n            request, _('You do not own this filter.')\n        )\n\n    # Check if there's more values than we can show in the list\n    list_limited = False\n    if matchfield.show_list and form.number_of_choices > matchfield.list_limit:\n        list_limited = True\n\n    active = {'filters': True}\n    info_dict = {\n        'form': form,\n        'active': active,\n        'subsection': {'detail': filtr.id},\n        'filter': filtr,\n        'matchfield': matchfield,\n        'list_limited': list_limited,\n        'navpath': BASE_PATH\n        + [\n            ('Filters', reverse('alertprofiles-filters')),\n            (filtr.name, reverse('alertprofiles-filters-detail', args=(filtr.id,))),\n            ('Add expression', None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/expression_form.html', info_dict)\n\n\ndef filter_addexpression_operator_help_modal(request):\n    \"\"\"Renders a modal with descriptions of all available operators\"\"\"\n    return render_modal(\n        request,\n        'alertprofiles/_add_expression_operator_help_modal.html',\n        modal_id='operator-help',\n        size='large',\n    )\n\n\n@requires_post('alertprofiles-filters')\ndef filter_saveexpression(request):\n    \"\"\"Saves an expression to a filter\"\"\"\n    if request.POST.get('id'):\n        existing_expression = Expression.objects.get(pk=request.POST.get('id'))\n        form = ExpressionForm(request.POST, instance=existing_expression)\n    else:\n        form = ExpressionForm(request.POST)\n\n    if not form.is_valid():\n        dictionary = {\n            'id': str(form.cleaned_data[\"filter\"].pk),\n            'matchfield': str(form.cleaned_data[\"match_field\"].pk),\n        }\n        qdict = QueryDict(\"\", mutable=True)\n        qdict.update(dictionary)\n        request.POST = qdict\n        new_message(\n            request,\n            form.errors,\n            Messages.ERROR,\n        )\n\n        return filter_addexpression(request=request)\n\n    filtr = form.cleaned_data['filter']\n\n    if not account_owns_filters(get_account(request), filtr):\n        return alertprofiles_response_forbidden(\n            request, _('You do not own this filter.')\n        )\n\n    form.save()\n\n    new_message(\n        request,\n        _('Added expression to filter %(name)s') % {'name': filtr.name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-filters-detail', args=(filtr.id,))\n    )\n\n\n@requires_post('alertprofiles-filters')\ndef filter_removeexpression(request):\n    \"\"\"Deletes an expression from a filter\"\"\"\n    if request.POST.get('confirm'):\n        expressions = request.POST.getlist('element')\n        try:\n            filtr = Filter.objects.get(pk=request.POST.get('perform_on'))\n        except Filter.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter does not exist')\n            )\n\n        if not account_owns_filters(get_account(request), filtr):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter.')\n            )\n\n        Expression.objects.filter(pk__in=expressions).delete()\n\n        new_message(request, _('Removed expressions'), Messages.SUCCESS)\n        return HttpResponseRedirect(\n            reverse('alertprofiles-filters-detail', args=(filtr.id,))\n        )\n    else:\n        expressions = Expression.objects.filter(\n            pk__in=request.POST.getlist('expression')\n        )\n        try:\n            filtr = Filter.objects.get(pk=request.POST.get('id'))\n        except Filter.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter does not exist')\n            )\n\n        if not account_owns_filters(get_account(request), filtr):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter.')\n            )\n\n        if not expressions:\n            new_message(request, _('No expressions were selected'), Messages.NOTICE)\n            return HttpResponseRedirect(\n                reverse('alertprofiles-filters-detail', args=(filtr.id,))\n            )\n\n        elements = []\n        for expr in expressions:\n            description = _(\n                \"Expression, %(match_field)s %(operator)s %(value)s, used in \"\n                \"filter %(filter)s\"\n            ) % {\n                'match_field': expr.match_field.name,\n                'operator': expr.get_operator_display(),\n                'value': expr.value,\n                'filter': expr.filter.name,\n            }\n            elements.append(\n                {\n                    'id': expr.id,\n                    'description': description,\n                    'warnings': [],\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-filters-removeexpression'),\n            'active': {'filters': True},\n            'subsection': {'detail': filtr.id},\n            'object_list': elements,\n            'perform_on': filtr.id,\n            'navpath': BASE_PATH\n            + [\n                ('Filters', reverse('alertprofiles-filters')),\n                (filtr.name, reverse('alertprofiles-filters-detail', args=(filtr.id,))),\n                ('Remove expressions', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(request, 'alertprofiles/confirmation_list.html', info_dict)\n\n\ndef filter_group_list(request):\n    \"\"\"Lists the available filter groups\"\"\"\n    account = get_account(request)\n    admin = account.is_admin()\n\n    page = request.GET.get('page', 1)\n\n    # Define valid options for ordering\n    valid_ordering = ['name', '-name', 'owner', '-owner', '-description', 'description']\n    order_by = request.GET.get('order_by', 'name').lower()\n    if order_by not in valid_ordering:\n        order_by = 'name'\n\n    # Get all public filter_groups, and private filter_groups belonging to this\n    # user only\n    filter_groups = (\n        FilterGroup.objects.select_related('owner')\n        .filter(Q(owner__exact=account.pk) | Q(owner__isnull=True))\n        .order_by(order_by)\n    )\n\n    active = {'filter_groups': True}\n    info_dict = {\n        'page': page,\n        'active': active,\n        'subsection': {'list': True},\n        'admin': admin,\n        'form_action': reverse('alertprofiles-filter_groups-remove'),\n        'page_link': reverse('alertprofiles-filter_groups'),\n        'order_by': order_by,\n        'navpath': BASE_PATH + [('Filter groups', None)],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=filter_groups,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/filter_group_list.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef filter_group_show_form(request, filter_group_id=None, filter_group_form=None):\n    \"\"\"Convenience method for showing the filter group form\"\"\"\n    active = {'filter_groups': True}\n    page_name = 'New filter group'\n    account = get_account(request)\n    admin = account.is_admin()\n    is_owner = True\n\n    filter_group = None\n    filter_groupcontent = None\n    filters = None\n\n    # If id is supplied we can assume that this is a already saved filter\n    # group, and we can fetch it and get it's content and available filters\n    if filter_group_id:\n        try:\n            filter_group = FilterGroup.objects.get(pk=filter_group_id)\n        except FilterGroup.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter group does not exist.')\n            )\n        else:\n            owner = filter_group.owner\n            if not owner:\n                new_message(\n                    request,\n                    _(\n                        \"%(fg)s is a public filter group and may be used by \"\n                        \"other users than you.\"\n                    )\n                    % {'fg': filter_group.name},\n                    Messages.WARNING,\n                )\n                if not admin:\n                    is_owner = False\n            elif owner != account:\n                return alertprofiles_response_forbidden(\n                    request, 'You do not have access to the requested filter group.'\n                )\n\n        filter_groupcontent = (\n            FilterGroupContent.objects.select_related('filter')\n            .filter(filter_group=filter_group.id)\n            .order_by('priority')\n        )\n\n        filters = Filter.objects.filter(\n            ~Q(pk__in=[f.filter.id for f in filter_groupcontent]),\n            Q(owner__exact=account.pk) | Q(owner__isnull=True),\n        ).order_by('owner', 'name')\n\n        page_name = filter_group.name\n\n        profiles = AlertProfile.objects.filter(\n            time_periods__alert_subscriptions__filter_group=filter_group\n        ).distinct()\n        if profiles:\n            names = ', '.join([p.name for p in profiles])\n            new_message(\n                request,\n                _(\n                    \"Filter group is used in profiles: %(profiles)s. Editing \"\n                    \"this filter group may alter those \"\n                    \"profiles.\"\n                )\n                % {'profiles': names},\n                Messages.WARNING,\n            )\n\n    # If no form is supplied we must make it\n    if not filter_group_form:\n        if filter_group_id:\n            data = {\n                'id': filter_group_id,\n                'owner': filter_group.owner is not None,\n                'name': filter_group.name,\n                'description': filter_group.description,\n            }\n            filter_group_form = FilterGroupForm(data, admin=admin, is_owner=is_owner)\n        else:\n            filter_group_form = FilterGroupForm(\n                initial={'owner': account}, admin=admin, is_owner=is_owner\n            )\n\n    if filter_group_id:\n        subsection = {'detail': filter_group_id}\n    else:\n        subsection = {'new': True}\n\n    info_dict = {\n        'active': active,\n        'subsection': subsection,\n        'admin': admin,\n        'owner': is_owner,\n        'detail_id': filter_group_id,\n        'filter_group_content': filter_groupcontent,\n        'filters': filters,\n        'form': filter_group_form,\n        'navpath': BASE_PATH\n        + [\n            ('Filter groups', reverse('alertprofiles-filter_groups')),\n            (page_name, None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return render(request, 'alertprofiles/filter_group_form.html', info_dict)\n\n\ndef filter_group_detail(request, filter_group_id=None):\n    \"\"\"Shows the form to edit a filter group\"\"\"\n    return filter_group_show_form(request, filter_group_id)\n\n\ndef filter_group_operator_help_modal(request):\n    \"\"\"Renders a modal with descriptions of all available operators\"\"\"\n    return render_modal(\n        request,\n        'alertprofiles/_filter_group_operator_help_modal.html',\n        modal_id='operator-help',\n        size=\"large\",\n    )\n\n\n@requires_post('alertprofiles-filter_groups')\ndef filter_group_save(request):\n    \"\"\"Saves a filter group\"\"\"\n    (account, admin, owner) = resolve_account_admin_and_owner(request)\n    filter_group = None\n\n    if request.POST.get('id'):\n        try:\n            filter_group = FilterGroup.objects.get(pk=request.POST.get('id'))\n        except FilterGroup.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter group does not exist.')\n            )\n\n        if not account_owns_filters(account, filter_group):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter group.')\n            )\n    form = FilterGroupForm(request.POST, admin=admin)\n\n    if not form.is_valid():\n        detail_id = request.POST.get('id') or None\n        return filter_group_show_form(request, detail_id, form)\n\n    if request.POST.get('id'):\n        filter_group.name = request.POST.get('name')\n        filter_group.description = request.POST.get('description')\n        filter_group.owner = owner\n    else:\n        filter_group = FilterGroup(\n            name=request.POST.get('name'),\n            description=request.POST.get('description'),\n            owner=owner,\n        )\n\n    filter_group.save()\n    new_message(\n        request,\n        _('Saved filter group %(name)s') % {'name': filter_group.name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-filter_groups-detail', args=(filter_group.id,))\n    )\n\n\n@requires_post('alertprofiles-filters')\ndef filter_group_remove(request):\n    \"\"\"Deletes a filter group\"\"\"\n    if request.POST.get('confirm'):\n        filter_groups = FilterGroup.objects.filter(\n            pk__in=request.POST.getlist('element')\n        )\n\n        if not account_owns_filters(get_account(request), *filter_groups):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter group.')\n            )\n\n        names = ', '.join([f.name for f in filter_groups])\n        filter_groups.delete()\n\n        new_message(\n            request,\n            _('Removed filter groups: %(names)s') % {'names': names},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-filter_groups'))\n    else:\n        filter_groups = FilterGroup.objects.filter(\n            pk__in=request.POST.getlist('filter_group')\n        )\n\n        if not account_owns_filters(get_account(request), *filter_groups):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter group.')\n            )\n\n        if not filter_groups:\n            new_message(request, _('No filter groups were selected.'), Messages.NOTICE)\n            return HttpResponseRedirect(reverse('alertprofiles-filter_groups'))\n\n        elements = []\n        for fgroup in filter_groups:\n            subscriptions = AlertSubscription.objects.filter(filter_group=fgroup)\n            time_periods = TimePeriod.objects.filter(\n                alert_subscriptions__in=subscriptions\n            )\n            profiles = AlertProfile.objects.filter(time_periods__in=time_periods)\n            warnings = []\n\n            try:\n                fgroup.owner\n            except Account.DoesNotExist:\n                warnings.append(\n                    {\n                        'message': \"This is a public filter group. Deleting it \"\n                        \"will make it unavailable for all other users \"\n                        \"of this system.\",\n                    }\n                )\n\n            for profile in profiles:\n                warnings.append(\n                    {\n                        'message': 'Used in profile %(name)s.' % {'name': profile.name},\n                        'link': reverse(\n                            'alertprofiles-profile-detail', args=(profile.id,)\n                        ),\n                    }\n                )\n\n            elements.append(\n                {\n                    'id': fgroup.id,\n                    'description': fgroup.name,\n                    'warnings': warnings,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-filter_groups-remove'),\n            'active': {'filter_groups': True},\n            'subsection': {'list': True},\n            'object_list': elements,\n            'perform_on': None,\n            'navpath': BASE_PATH\n            + [\n                ('Filter groups', reverse('alertprofiles-filters')),\n                ('Remove filter groups', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(\n            request,\n            'alertprofiles/confirmation_list.html',\n            info_dict,\n        )\n\n\n@requires_post('alertprofiles-filter_groups', ('id', 'filter'))\ndef filter_group_addfilter(request):\n    \"\"\"Adds a filter to a filter group\"\"\"\n    account = get_account(request)\n    try:\n        filter_group = FilterGroup.objects.get(pk=request.POST.get('id'))\n    except FilterGroup.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested filter group does not exist.')\n        )\n\n    try:\n        filtr = Filter.objects.get(pk=request.POST.get('filter'))\n    except Filter.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested filter does not exist.')\n        )\n\n    operator = request.POST.get('operator')\n\n    if not account_owns_filters(account, filter_group):\n        return alertprofiles_response_forbidden(\n            request, _('You do not own this filter group.')\n        )\n\n    if not operator or len(operator) != 2:\n        return HttpResponseRedirect(\n            reverse('alertprofiles-filter_groups-detail', args=(filtr.id,))\n        )\n\n    # Operator is sent by POST data as a \"bitfield\" (it's really a string\n    # pretending to be a bitfield) where position 0 represents 'include' and\n    # position 1 represents 'positive'.\n    include = False\n    positive = False\n    if operator[0] == '1':\n        include = True\n    if operator[1] == '1':\n        positive = True\n\n    # 'priority' is the order filters are considered when there's an alert.\n    # We want to add new filters to filter_groupcontent with priority\n    # incremented by one. Also double check that previously added filters\n    # are ordered correctly, ie priority increments by one for each filter.\n    last_priority = order_filter_group_content(filter_group)\n\n    options = {\n        'include': include,\n        'positive': positive,\n        'priority': last_priority + 1,\n        'filter': filtr,\n        'filter_group': filter_group,\n    }\n    new_filter = FilterGroupContent(**options)\n    new_filter.save()\n\n    new_message(\n        request, _('Added filter %(name)s') % {'name': filtr.name}, Messages.SUCCESS\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-filter_groups-detail', args=(filter_group.id,))\n    )\n\n\n@requires_post('alertprofiles-filter_groups')\ndef filter_group_remove_or_move_filter(request):\n    \"\"\"Deletes or moves around a filter within a filter group\"\"\"\n    post = request.POST.copy()\n    for name in request.POST:\n        if name.find(\"=\") != -1:\n            attribute, value = name.split(\"=\")\n            del post[name]\n            post[attribute] = value\n    request.POST = post\n\n    if request.POST.get('moveup') or request.POST.get('movedown'):\n        return filter_group_movefilter(request)\n    else:\n        return filter_group_removefilter(request)\n\n\n@requires_post('alertprofiles-filter_groups')\ndef filter_group_removefilter(request):\n    \"\"\"Removes a filter from a filter group\"\"\"\n    # We are deleting filters. Show confirmation page or remove?\n    if request.POST.get('confirm'):\n        filter_group = FilterGroup.objects.get(pk=request.POST.get('perform_on'))\n        fg_content = FilterGroupContent.objects.filter(\n            pk__in=request.POST.getlist('element')\n        )\n\n        if not account_owns_filters(get_account(request), filter_group):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter group.')\n            )\n\n        filters = Filter.objects.filter(pk__in=[f.filter.id for f in fg_content])\n        names = ', '.join([f.name for f in filters])\n        fg_content.delete()\n\n        # Rearrange filters\n        order_filter_group_content(filter_group)\n\n        new_message(\n            request,\n            _('Removed filters, %(names)s, from filter group %(fg)s.')\n            % {'names': names, 'fg': filter_group.name},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(\n            reverse('alertprofiles-filter_groups-detail', args=(filter_group.id,))\n        )\n    else:\n        try:\n            filter_group = FilterGroup.objects.get(pk=request.POST.get('id'))\n        except FilterGroup.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested filter group does not exist')\n            )\n\n        filter_group_content = FilterGroupContent.objects.filter(\n            pk__in=request.POST.getlist('filter'), filter_group=filter_group.id\n        )\n\n        if not account_owns_filters(get_account(request), filter_group):\n            return alertprofiles_response_forbidden(\n                request, _('You do not own this filter group.')\n            )\n\n        try:\n            filter_group.owner\n        except Account.DoesNotExist:\n            new_message(\n                request,\n                _(\n                    \"You are now editing a public filter group. This will \"\n                    \"affect all users who uses this filter group.\"\n                ),\n                Messages.WARNING,\n            )\n\n        if not filter_group_content:\n            new_message(request, _('No filters were selected.'), Messages.NOTICE)\n            return HttpResponseRedirect(\n                reverse('alertprofiles-filter_groups-detail', args=(filter_group.id,))\n            )\n\n        elements = []\n        for content in filter_group_content:\n            description = _('''Remove filter %(filter)s from %(fg)s.''') % {\n                'filter': content.filter.name,\n                'fg': content.filter_group.name,\n            }\n\n            elements.append(\n                {\n                    'id': content.id,\n                    'description': description,\n                }\n            )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-filter_groups-removefilter'),\n            'active': {'filter_groups': True},\n            'subsection': {'detail': filter_group.id},\n            'object_list': elements,\n            'perform_on': filter_group.id,\n            'navpath': BASE_PATH\n            + [\n                ('Filter groups', reverse('alertprofiles-filter_groups')),\n                (\n                    filter_group.name,\n                    reverse(\n                        'alertprofiles-filter_groups-detail', args=(filter_group.id,)\n                    ),\n                ),\n                ('Remove filters', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(\n            request,\n            'alertprofiles/confirmation_list.html',\n            info_dict,\n        )\n\n\n@requires_post('alertprofiles-filter_groups')\ndef filter_group_movefilter(request):\n    \"\"\"Moves a filter within a filter group\"\"\"\n    account = get_account(request)\n\n    filter_group_id = request.POST.get('id')\n    try:\n        filter_group = FilterGroup.objects.get(pk=filter_group_id)\n    except FilterGroup.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested filter group does not exist.')\n        )\n    else:\n        if filter_group.owner != account:\n            return alertprofiles_response_forbidden(\n                request, 'You do not have access to the requested filter group.'\n            )\n\n    if request.POST.get('moveup'):\n        movement = -1\n        direction = 'up'\n        filter_id = request.POST.get('moveup')\n    elif request.POST.get('movedown'):\n        movement = 1\n        direction = 'down'\n        filter_id = request.POST.get('movedown')\n    else:\n        # No sensible input, just return to where we came from\n        return HttpResponseRedirect(\n            reverse('alertprofiles-filter_groups-detail', args=(filter_group_id,))\n        )\n\n    try:\n        filtr = FilterGroupContent.objects.get(pk=filter_id)\n    except FilterGroupContent.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested filter group content does not exist.')\n        )\n\n    # Make sure content is ordered correct\n    order_filter_group_content(filter_group)\n\n    # Check if the filter we're going to swap places with exists\n    try:\n        other_filter = FilterGroupContent.objects.filter(\n            filter_group=filter_group.id, priority=filtr.priority + movement\n        )[0:1].get()\n    except FilterGroupContent.DoesNotExist:\n        return HttpResponseRedirect(\n            reverse('alertprofiles-filter_groups-detail', args=(filter_group.id,))\n        )\n\n    new_priority = other_filter.priority\n    other_filter.priority = filtr.priority\n    filtr.priority = new_priority\n\n    other_filter.save()\n    filtr.save()\n\n    new_message(\n        request,\n        _('Moved filter %(filter)s %(direction)s')\n        % {'direction': direction, 'filter': filtr.filter.name},\n        Messages.SUCCESS,\n    )\n\n    return HttpResponseRedirect(\n        reverse('alertprofiles-filter_groups-detail', args=(filter_group_id,))\n    )\n\n\ndef matchfield_list(request):\n    \"\"\"Lists the available match fields\"\"\"\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n    page = request.GET.get('page', 1)\n\n    # Define valid options for ordering\n    valid_ordering = ['name', '-name', 'description', '-description']\n    order_by = request.GET.get('order_by', 'name').lower()\n    if order_by not in valid_ordering:\n        order_by = 'name'\n\n    new_message(\n        request,\n        _(\n            \"Editing matchfields is black magic. Don't do it unless you know \"\n            \"exactly what you are doing.\"\n        ),\n        Messages.ERROR,\n    )\n\n    # Get all matchfields aka. filter variables\n    matchfields = MatchField.objects.all().order_by(order_by)\n    info_dict = {\n        'page': page,\n        'active': {'matchfields': True},\n        'subsection': {'list': True},\n        'form_action': reverse('alertprofiles-matchfields-remove'),\n        'order_by': order_by,\n        'navpath': BASE_PATH\n        + [\n            ('Matchfields', None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n    return SubListView.as_view(\n        queryset=matchfields,\n        paginate_by=PAGINATE_BY,\n        template_name='alertprofiles/matchfield_list.html',\n        extra_context=info_dict,\n    )(request)\n\n\ndef matchfield_show_form(request, matchfield_id=None, matchfield_form=None):\n    \"\"\"Shows the form to edit a match field\"\"\"\n    active = {'matchfields': True}\n    page_name = 'New matchfield'\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n\n    try:\n        matchfield = MatchField.objects.get(pk=matchfield_id)\n    except MatchField.DoesNotExist:\n        if not matchfield_form:\n            matchfield_form = MatchFieldForm()\n        matchfield_id = None\n        matchfield_operators_id = []\n    else:\n        if not matchfield_form:\n            matchfield_form = MatchFieldForm(instance=matchfield)\n        matchfield_operators_id = [\n            m_operator.type for m_operator in matchfield.operators.all()\n        ]\n\n        page_name = matchfield.name\n\n        expressions = Expression.objects.filter(match_field=matchfield)\n        filters = Filter.objects.filter(expressions__in=expressions)\n\n        if filters:\n            names = ', '.join([f.name for f in filters])\n            new_message(\n                request,\n                _(\n                    \"Match field is in use in filters: %(filters)s. Editing \"\n                    \"this match field may alter how those filters work.\"\n                )\n                % {'filters': names},\n                Messages.WARNING,\n            )\n\n    operators = []\n    for oper in Operator.OPERATOR_TYPES:\n        selected = oper[0] in matchfield_operators_id\n        operators.append({'id': oper[0], 'name': oper[1], 'selected': selected})\n\n    if matchfield_id:\n        subsection = {'detail': matchfield_id}\n    else:\n        subsection = {'new': True}\n\n    new_message(\n        request,\n        _(\n            \"Editing matchfields is black magic. Don't do it unless you \"\n            \"know exacly what you are doing.\"\n        ),\n        Messages.ERROR,\n    )\n\n    info_dict = {\n        'active': active,\n        'subsection': subsection,\n        'detail_id': matchfield_id,\n        'form': matchfield_form,\n        'operators': operators,\n        'owner': True,\n        'navpath': BASE_PATH\n        + [\n            ('Matchfields', reverse('alertprofiles-matchfields')),\n            (page_name, None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n\n    return render(request, 'alertprofiles/matchfield_form.html', info_dict)\n\n\ndef matchfield_detail(request, matchfield_id=None):\n    \"\"\"Shows the form to edit a specific match field\"\"\"\n    return matchfield_show_form(request, matchfield_id)\n\n\n@requires_post('alertprofiles-matchfields')\ndef matchfield_save(request):\n    \"\"\"Saves a match field\"\"\"\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n\n    try:\n        if not request.POST.get('id'):\n            raise MatchField.DoesNotExist\n        matchfield = MatchField.objects.get(pk=request.POST.get('id'))\n    except MatchField.DoesNotExist:\n        form = MatchFieldForm(request.POST)\n    else:\n        form = MatchFieldForm(request.POST, instance=matchfield)\n\n    # If there are some invalid values, return to form and show the errors\n    if not form.is_valid():\n        detail_id = request.POST.get('id') or None\n        return matchfield_show_form(request, detail_id, form)\n\n    matchfield = form.save()\n\n    operators = []\n    for oper in request.POST.getlist('operator'):\n        operators.append(Operator(type=int(oper), match_field=matchfield))\n    matchfield.operators.all().delete()\n    matchfield.operators.add(*operators)\n\n    new_message(\n        request,\n        _('Saved matchfield %(name)s') % {'name': matchfield.name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-matchfields-detail', args=(matchfield.id,))\n    )\n\n\n@requires_post('alertprofiles-filters')\ndef matchfield_remove(request):\n    \"\"\"Deletes a match field\"\"\"\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n\n    if request.POST.get('confirm'):\n        matchfields = MatchField.objects.filter(pk__in=request.POST.getlist('element'))\n        names = ', '.join([m.name for m in matchfields])\n        matchfields.delete()\n        new_message(\n            request,\n            _('Removed matchfields: %(names)s') % {'names': names},\n            Messages.SUCCESS,\n        )\n        return HttpResponseRedirect(reverse('alertprofiles-matchfields'))\n    else:\n        matchfields = MatchField.objects.prefetch_related('expressions').filter(\n            pk__in=request.POST.getlist('matchfield')\n        )\n\n        if not matchfields:\n            new_message(request, _('No matchfields were selected'), Messages.NOTICE)\n            return HttpResponseRedirect(reverse('alertprofiles-matchfields'))\n\n        elements = []\n        for match_field in matchfields:\n            expressions = match_field.expressions.all()\n            warnings = []\n            for expr in expressions:\n                warnings.append(\n                    {\n                        'message': 'Used in filter %(filter)s.'\n                        % {'filter': expr.filter.name},\n                        'link': reverse(\n                            'alertprofiles-filters-detail', args=(expr.filter.id,)\n                        ),\n                    }\n                )\n            elements.append(\n                {\n                    'id': match_field.id,\n                    'description': match_field.name,\n                    'warnings': warnings,\n                }\n            )\n\n        new_message(\n            request,\n            _(\n                \"It is strongly recomended that one do not remove one of the \"\n                \"default match fields that comes preinstalled with NAV.\"\n            ),\n            Messages.NOTICE,\n        )\n\n        info_dict = {\n            'form_action': reverse('alertprofiles-matchfields-remove'),\n            'active': {'matchfields': True},\n            'subsection': {'list': True},\n            'object_list': elements,\n            'perform_on': None,\n            'navpath': BASE_PATH\n            + [\n                ('Matchfields', reverse('alertprofiles-matchfields')),\n                ('Remove matchfields', None),\n            ],\n            'title': 'NAV - Alert profiles',\n        }\n        return render(\n            request,\n            'alertprofiles/confirmation_list.html',\n            info_dict,\n        )\n\n\ndef permission_list(request, group_id=None):\n    \"\"\"Lists the saved alert profiles permissions\"\"\"\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n\n    groups = AccountGroup.objects.all().order_by('name')\n\n    selected_group = None\n    filter_groups = None\n    permissions = None\n    if group_id:\n        filter_groups = FilterGroup.objects.filter(owner__isnull=True).order_by('name')\n        try:\n            selected_group = groups.get(pk=group_id)\n        except AccountGroup.DoesNotExist:\n            return alertprofiles_response_not_found(\n                request, _('Requested account group does not exist.')\n            )\n\n        permissions = AccountGroup.objects.get(pk=group_id).filter_groups.all()\n\n    active = {'permissions': True}\n    info_dict = {\n        'groups': groups,\n        'selected_group': selected_group,\n        'filter_groups': filter_groups,\n        'permissions': permissions,\n        'active': active,\n        'navpath': BASE_PATH\n        + [\n            ('Permissions', None),\n        ],\n        'title': 'NAV - Alert profiles',\n    }\n\n    return render(request, 'alertprofiles/permissions.html', info_dict)\n\n\ndef permissions_help_modal(request):\n    \"\"\"Renders the permissions help modal\"\"\"\n    return render_modal(\n        request,\n        'alertprofiles/_permissions_help_modal.html',\n        modal_id=\"permissions-help\",\n        size=\"small\",\n    )\n\n\n@requires_post('alertprofiles-permissions')\ndef permissions_save(request):\n    \"\"\"Saves an Alert Profiles permission\"\"\"\n    account = get_account(request)\n    if not account.is_admin():\n        return alertprofiles_response_forbidden(\n            request, 'Only admins can view this page.'\n        )\n\n    try:\n        group = AccountGroup.objects.get(pk=request.POST.get('group'))\n    except AccountGroup.DoesNotExist:\n        return alertprofiles_response_not_found(\n            request, _('Requested account group does not exist.')\n        )\n\n    filter_groups = FilterGroup.objects.filter(\n        pk__in=request.POST.getlist('filter_group')\n    )\n\n    group.filter_groups.set(filter_groups)\n\n    new_message(\n        request,\n        _('Saved permissions for group %(name)s') % {'name': group.name},\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(\n        reverse('alertprofiles-permissions-detail', args=(group.id,))\n    )\n"
  },
  {
    "path": "python/nav/web/api/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/api/urls.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL mapping for the various API versions\"\"\"\n\nfrom django.urls import path\nfrom django.urls import include\nfrom nav.web.api.v1 import urls as v1_urls\nfrom nav.web.api.v2 import urls as v2_urls\n\nurlpatterns = [\n    path('', include((v1_urls, 'api'))),\n    path('1/', include((v1_urls, 'api'), namespace='1')),\n    path('2/', include((v2_urls, 'api'), namespace='2')),\n]\n"
  },
  {
    "path": "python/nav/web/api/v1/__init__.py",
    "content": "from rest_framework import pagination\n\n\nclass NavPageNumberPagination(pagination.PageNumberPagination):\n    \"\"\"Custom pagination class for NAV API\n\n    See http://www.django-rest-framework.org/api-guide/pagination/\n    \"\"\"\n\n    page_size = 100\n    page_size_query_param = 'page_size'\n"
  },
  {
    "path": "python/nav/web/api/v1/alert_serializers.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Serializers for status API data\"\"\"\n\nfrom django.core.exceptions import ObjectDoesNotExist\nfrom django.template.defaultfilters import urlize\nfrom django.urls import reverse\nfrom django.utils.encoding import force_str\nfrom django.utils.html import strip_tags\nfrom rest_framework import serializers\n\nfrom nav.models import event, profiles\nfrom nav.models.fields import INFINITY\n\n\nclass AccountSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for Accounts that have acknowledged alerts\"\"\"\n\n    class Meta(object):\n        model = profiles.Account\n        fields = ('id', 'login', 'name')\n\n\nclass AcknowledgementSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for alert acknowledgements\"\"\"\n\n    account = AccountSerializer()\n\n    comment_html = serializers.CharField(source='comment', read_only=True)\n\n    @staticmethod\n    def transform_comment_html(_obj, value):\n        \"\"\"Urlize content, but make sure other tags are stripped as we need\n        to output this raw\"\"\"\n        try:\n            return urlize(strip_tags(value))\n        except TypeError:\n            return ''\n\n    class Meta(object):\n        model = event.Acknowledgement\n        fields = ('account', 'comment', 'date', 'comment_html')\n\n\nclass AlertTypeSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for alert types\"\"\"\n\n    class Meta(object):\n        model = event.AlertType\n        fields = ('name', 'description')\n\n\nclass EventTypeSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for event types\"\"\"\n\n    class Meta(object):\n        model = event.EventType\n        fields = ('id', 'description')\n\n\nclass AlertSerializerBase(serializers.ModelSerializer):\n    \"\"\"Serializer mix-in for the common parts of the AlertQueue and AlertHistory\n    models.\n    \"\"\"\n\n    subject = serializers.SerializerMethodField(source='get_subject')\n    subject_url = serializers.SerializerMethodField()\n    subject_type = serializers.SerializerMethodField()\n\n    on_maintenance = serializers.SerializerMethodField('is_on_maintenance')\n\n    event_history_url = serializers.SerializerMethodField()\n    netbox_history_url = serializers.SerializerMethodField()\n    device_groups = serializers.SerializerMethodField()\n\n    alert_type = AlertTypeSerializer()\n    event_type = EventTypeSerializer()\n\n    @staticmethod\n    def get_subject(obj):\n        \"\"\"Return textual description of object\"\"\"\n        return force_str(obj.get_subject())\n\n    @staticmethod\n    def get_subject_url(obj):\n        \"\"\"Returns an absolute URL for the subject, or None if not applicable\"\"\"\n        try:\n            return obj.get_subject().get_absolute_url()\n        except AttributeError:\n            try:\n                return obj.get_subject().netbox.get_absolute_url()\n            except AttributeError:\n                return None\n\n    @staticmethod\n    def is_on_maintenance(obj):\n        \"\"\"Returns True if alert subject is on maintenance\"\"\"\n        try:\n            return obj.get_subject().is_on_maintenance()\n        except AttributeError:\n            try:\n                # attempt fallback to owning netbox, if any\n                return obj.get_subject().netbox.is_on_maintenance()\n            except AttributeError:\n                pass\n\n    @staticmethod\n    def get_event_history_url(obj):\n        \"\"\"Returns a device history URL for this type of event\"\"\"\n        return \"\".join(\n            [reverse('devicehistory-view'), '?eventtype=', 'e_', obj.event_type.id]\n        )\n\n    @staticmethod\n    def get_netbox_history_url(obj):\n        \"\"\"Returns a device history URL for this subject, if it is a Netbox\"\"\"\n        if AlertHistorySerializer.get_subject_type(obj) == 'Netbox':\n            return reverse(\n                'devicehistory-view-netbox', kwargs={'netbox_id': obj.get_subject().id}\n            )\n\n    @staticmethod\n    def get_subject_type(obj):\n        \"\"\"Returns the class name of the subject\"\"\"\n        return obj.get_subject().__class__.__name__\n\n    @staticmethod\n    def get_device_groups(obj):\n        \"\"\"Returns all the device groups for the netbox if any\"\"\"\n        try:\n            netbox = obj.netbox\n            values = netbox.groups.values_list('id', flat=True)\n            return list(values) if values else None\n        except Exception:  # noqa: BLE001\n            pass\n\n\nclass AlertQueueSerializer(AlertSerializerBase):\n    \"\"\"Serializer for the AlertQueue model\"\"\"\n\n    time = serializers.DateTimeField()\n    alert_details_url = serializers.SerializerMethodField()\n    message = serializers.SerializerMethodField()\n\n    class Meta(object):\n        model = event.AlertQueue\n        fields = \"__all__\"\n\n    @staticmethod\n    def get_alert_details_url(obj):\n        if obj.history:\n            return reverse(\"api:1:alert-detail\", kwargs={'pk': obj.history.pk})\n\n    @staticmethod\n    def get_message(obj):\n        \"\"\"Returns a short message describing this alert\"\"\"\n        try:\n            if obj.pk:\n                message = obj.messages.get(language=\"en\", type=\"sms\")\n            else:\n                # This might be a pseudo-alert, used only for export purposes. It\n                # doesn't exist in the database, so let's get the message from the\n                # corresponding AlertHistory state instead\n                message = obj.history.messages.get(\n                    language=\"en\", type=\"sms\", state=obj.state\n                )\n        except ObjectDoesNotExist:\n            pass\n        else:\n            return message.message\n\n\nclass AlertHistorySerializer(AlertSerializerBase):\n    \"\"\"Serializer for the AlertHistory model\"\"\"\n\n    acknowledgement = AcknowledgementSerializer()\n    start_time = serializers.DateTimeField()\n    end_time = serializers.SerializerMethodField()\n    event_details_url = serializers.SerializerMethodField()\n\n    class Meta(object):\n        model = event.AlertHistory\n        fields = \"__all__\"\n\n    @staticmethod\n    def get_end_time(obj):\n        \"\"\"\n        Returns the alert endtime, complete with translation of 'infinite'\n        values to the string 'infinity'\n        \"\"\"\n        return obj.end_time if obj.end_time != INFINITY else \"infinity\"\n\n    @staticmethod\n    def get_event_details_url(obj):\n        \"\"\"Returns the url to the details page for this alert. And yes, even though\n        all the functions and views involved have the word \"event\" in their names,\n        these are in fact alerts.\n\n        \"\"\"\n        return reverse('event-details', kwargs={'event_id': obj.pk})\n"
  },
  {
    "path": "python/nav/web/api/v1/auth.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Contains authentication and authorization code for API\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom urllib.parse import urlparse\n\nfrom rest_framework.permissions import BasePermission, SAFE_METHODS\nfrom rest_framework.exceptions import AuthenticationFailed\nfrom rest_framework.authentication import TokenAuthentication\nfrom oidc_auth.authentication import JWTToken\n\nfrom nav.models.api import APIToken\nfrom nav.web.auth.utils import get_account\n\n_logger = logging.getLogger(__name__)\n\n\nclass APIAuthentication(TokenAuthentication):\n    \"\"\"Authenticates API users\"\"\"\n\n    def authenticate_credentials(self, key):\n        \"\"\"Checks for valid token\"\"\"\n        _logger.debug('Authenticating credentials with %s', key)\n        try:\n            token = APIToken.objects.get(token=key)\n        except APIToken.DoesNotExist:\n            _logger.warning(\n                'API authentication attempted with non-existing token \"%s\"', key\n            )\n            raise AuthenticationFailed\n        else:\n            if token.is_expired():\n                _logger.warning('API authentication attempted with expired %s', token)\n                raise AuthenticationFailed\n            return None, token\n\n\nclass ReadOnlyNonAdminPermission(BasePermission):\n    \"\"\"\n    Gives non-admin users read-only permission and admin users read-write permission\n    \"\"\"\n\n    def has_permission(self, request, _view):\n        \"\"\"If user is logged in and it is a safe method, it is authorized\"\"\"\n        account = get_account(request)\n        if request.method in SAFE_METHODS and not account.is_anonymous:\n            return True\n        if account.is_admin():\n            return True\n        return False\n\n\nclass AdminPermission(BasePermission):\n    \"\"\"Checks if the user is a NAV administrator\"\"\"\n\n    def has_permission(self, request, _view):\n        \"\"\"If user is an admin, it is authorized\"\"\"\n        account = get_account(request)\n        return account.is_admin()\n\n\nclass TokenPermission(BasePermission):\n    \"\"\"Checks if the token has correct permissions\"\"\"\n\n    url_prefix = '/api'\n    version = 1\n\n    def has_permission(self, request, _view):\n        token = request.auth  # type: APIToken\n        if not token or not isinstance(token, APIToken):\n            return False\n\n        endpoints_ok = self._check_endpoints(request)\n        req_method_ok = self._check_read_write(request)\n        permissions_ok = endpoints_ok and req_method_ok\n\n        if permissions_ok:\n            token.last_used = datetime.now()\n            token.save()\n        else:\n            _logger.warning(\n                '%s not permitted to access endpoint %s',\n                str(token).capitalize(),\n                request.path,\n            )\n        return permissions_ok\n\n    @staticmethod\n    def _check_endpoints(request):\n        \"\"\"Verify that this token has permission to access the request path\n        :type request: rest_framework.request.Request\n        :type token: APIToken\n\n        NB: This will fail if the version is not specified in the request url\n        \"\"\"\n        token = request.auth\n        if not token.endpoints:\n            return False\n\n        return TokenPermission.is_path_in_endpoints(request.path, token.endpoints)\n\n    @staticmethod\n    def _check_read_write(request):\n        \"\"\"Verify that the token permission matches the method\"\"\"\n        token = request.auth\n        return token.permission == 'write' or request.method in SAFE_METHODS\n\n    @staticmethod\n    def is_path_in_endpoints(request_path, endpoints):\n        \"\"\"\n        :param str request_path: the request path\n        :param dict endpoints: the endpoints available for a token as a dict\n        :return: if the path is in one of the endpoints for this token\n        \"\"\"\n        # Create prefix for the current api version\n        prefix = '/'.join([TokenPermission.url_prefix, str(TokenPermission.version)])\n        # Cut prefix from path\n        request_path = TokenPermission._ensure_trailing_slash(\n            request_path.replace(prefix, '').replace(TokenPermission.url_prefix, '')\n        )\n        # Create a list of endpoints and remove prefix from them\n        endpoints = [e.replace(prefix, '') for e in endpoints.values()]\n        # Check if path is in one of the endpoints\n        return any(\n            [\n                request_path.startswith(\n                    TokenPermission._ensure_trailing_slash(urlparse(endpoint).path)\n                )\n                for endpoint in endpoints\n            ]\n        )\n\n    @staticmethod\n    def _ensure_trailing_slash(path):\n        \"\"\"Ensure that the path ends with a slash\n        :type path: str\n        \"\"\"\n        return path if path.endswith('/') else path + '/'\n\n\nclass JWTPermission(BasePermission):\n    \"\"\"Checks if the token has correct permissions\"\"\"\n\n    url_prefix = '/api'\n    version = 1\n\n    def has_permission(self, request, _view):\n        token = request.auth  # type: JWTToken\n        if not token or not isinstance(token, JWTToken):\n            return False\n\n        endpoints_ok = self._check_endpoints(request, token)\n        req_method_ok = self._check_read_write(request, token)\n        permissions_ok = endpoints_ok and req_method_ok\n        if not permissions_ok:\n            _logger.warning(\n                'JWT token %s not permitted to access endpoint %s', token, request.path\n            )\n        return permissions_ok\n\n    @staticmethod\n    def _check_read_write(request, token):\n        \"\"\"Verify that the token permission matches the method\"\"\"\n        return token.get('write', False) or request.method in SAFE_METHODS\n\n    @staticmethod\n    def _check_endpoints(request, token):\n        \"\"\"Verify that this token has permission to access the request path\n        :type request: rest_framework.request.Request\n        :type token: JWTToken\n\n        NB: This will fail if the version is not specified in the request url\n        \"\"\"\n        endpoints = token.get('endpoints', [])\n        if not endpoints:\n            return False\n\n        return JWTPermission.is_path_in_endpoints(request.path, endpoints)\n\n    @staticmethod\n    def is_path_in_endpoints(request_path, endpoints):\n        \"\"\"\n        :param str request_path: the request path\n        :param list endpoints: the endpoints available for a token as a list\n        :return: if the path is in one of the endpoints for this token\n        \"\"\"\n        # Create prefix for the current api version\n        prefix = '/'.join([JWTPermission.url_prefix, str(JWTPermission.version)])\n        # Cut prefix from path\n        request_path = JWTPermission._ensure_trailing_slash(\n            request_path.replace(prefix, '').replace(JWTPermission.url_prefix, '')\n        )\n        # Create a list of endpoints and remove prefix from them\n        endpoints = [e.replace(prefix, '') for e in endpoints]\n        # Check if path is in one of the endpoints\n        return any(\n            [\n                request_path.startswith(\n                    JWTPermission._ensure_trailing_slash(urlparse(endpoint).path)\n                )\n                for endpoint in endpoints\n            ]\n        )\n\n    @staticmethod\n    def _ensure_trailing_slash(path):\n        \"\"\"Ensure that the path ends with a slash\n        :type path: str\n        \"\"\"\n        return path if path.endswith('/') else path + '/'\n\n\nAPITokensPermission = TokenPermission | JWTPermission\nDefaultPermission = AdminPermission | APITokensPermission\nRelaxedReadPermission = ReadOnlyNonAdminPermission | APITokensPermission\n"
  },
  {
    "path": "python/nav/web/api/v1/fields.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom rest_framework import serializers\n\n\nclass DisplayNameWritableField(serializers.ChoiceField):\n    \"\"\"A choice field where the display name of the choices can be used for API\n    input/output, instead of potentially opaque integers.\n\n    \"\"\"\n\n    def __init__(self, **kwargs):\n        if \"choices\" not in kwargs:\n            kwargs[\"choices\"] = []  # optional, as we can derive it from the model\n        super(DisplayNameWritableField, self).__init__(**kwargs)\n\n    def to_representation(self, value):\n        return self._choice_map.get(value, value)\n\n    def to_internal_value(self, data):\n        try:\n            return self._choice_reverse_map[data]\n        except KeyError:\n            self.fail(\"invalid_choice\", input=data)\n\n    def bind(self, field_name, parent):\n        super(DisplayNameWritableField, self).bind(field_name, parent)\n        self.choices = parent.Meta.model._meta.get_field(field_name).choices\n        self._choice_map = dict(self.choices)\n        self._choice_reverse_map = {v: k for (k, v) in self._choice_map.items()}\n"
  },
  {
    "path": "python/nav/web/api/v1/filter_backends.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Custom filter backends\"\"\"\n\nimport operator\n\n# reduce is removed in python 3, import it from functools\nfrom functools import reduce as reduce3\nfrom rest_framework import filters\nfrom django.db.models import Q\n\nfrom nav import natsort\nfrom nav.models.manage import Location\nfrom . import alert_serializers\n\n__all__ = ['NaturalIfnameFilter', 'IfClassFilter', 'AlertHistoryFilterBackend']\n\n\nclass IfClassFilter(filters.BaseFilterBackend):\n    \"\"\"Filter on ifclasses\n\n    An ifclass is a fantasy construct that tells you if this interface is a\n    swport, gwport or physical port (can be zero or more)\n    \"\"\"\n\n    def filter_queryset(self, request, queryset, view):\n        \"\"\"Filter on interface class/type\n\n        NB: Needs a Queryset as queryset, other filters that return lists will\n        break this.\n\n        Using the methods (is_swport, is_gwport etc) on the Interface model\n        means doing everything in python in stead of letting the database do it,\n        so we reimplement them here with Q-objects.\n        \"\"\"\n        filters = {\n            'swport': Q(baseport__isnull=False),\n            'gwport': Q(gwport_prefixes__isnull=False),\n            'physicalport': Q(ifconnectorpresent=True),\n            'trunk': Q(trunk=True),\n        }\n\n        if 'ifclass' in request.query_params:\n            matching_filters = set(request.query_params.getlist('ifclass')) & set(\n                filters\n            )\n            if matching_filters:\n                q = reduce3(operator.or_, [filters[f] for f in matching_filters])\n                queryset = queryset.filter(q).distinct()\n\n        return queryset\n\n\nclass NaturalIfnameFilter(filters.OrderingFilter):\n    \"\"\"Filter naturally on interface ifname\"\"\"\n\n    def filter_queryset(self, request, queryset, view):\n        \"\"\"Filter on ifname if it exists as an ordering parameter\"\"\"\n\n        interface_ifnames = ['interface__ifname', '-interface__ifname']\n        ifnames = ['ifname', '-ifname']\n        ordering = self.get_ordering(request, queryset, view)\n        if not ordering:\n            return queryset\n\n        intersection = set(ordering) & set(interface_ifnames + ifnames)\n\n        try:\n            match_field = intersection.pop()\n        except KeyError:\n            return queryset\n        else:\n            if match_field in interface_ifnames:\n                lookup = lambda x: natsort.split(x.interface.ifname)\n            if match_field in ifnames:\n                lookup = lambda x: natsort.split(x.ifname)\n            return sorted(queryset, key=lookup, reverse=match_field.startswith('-'))\n\n\nclass AlertHistoryFilterBackend(filters.BaseFilterBackend):\n    \"\"\"\n    Custom filtering of AlertHistory results.\n\n    Turns out we can't get the DjangoFilterBackend to support OR/IN filters,\n    which is what we want for several of the fields in the AlertHistory\n    model; therefore we customize everythin. Egads, Brain!\n    \"\"\"\n\n    MULTIVALUE_FILTERS = {\n        'event_type': 'event_type',\n        'organization': 'netbox__organization',\n        'category': 'netbox__category',\n        'alert_type': 'alert_type__name',\n        'device_group': 'netbox__groups__id',\n        'location': 'netbox__room__location',\n        'severity': 'severity',\n    }\n\n    MULTIVALUE_EXCLUDES = {\n        'not_event_type': 'event_type',\n        'not_organization': 'netbox__organization',\n        'not_category': 'netbox__category',\n        'not_alert_type': 'alert_type__name',\n        'not_device_group': 'netbox__groups__id',\n        'not_location': 'netbox__room__location',\n        'not_severity': 'severity',\n    }\n\n    def filter_queryset(self, request, queryset, view):\n        if view.is_single_alert_by_primary_key():\n            # no really, the client asked for a specific single alert, screw\n            # all the other filters!\n            return queryset\n\n        for arg, field in self.MULTIVALUE_FILTERS.items():\n            values = request.query_params.getlist(arg, None)\n            if values:\n                # Locations are hierarchial - must include descendants\n                if arg == 'location':\n                    values = _get_descendants(values)\n                filtr = field + '__in'\n                queryset = queryset.filter(**{filtr: values})\n\n        for arg, field in self.MULTIVALUE_EXCLUDES.items():\n            values = request.query_params.getlist(arg, None)\n            if values:\n                # Locations are hierarchial - must include descendants\n                if arg == 'not_location':\n                    values = _get_descendants(values)\n                filtr = field + '__in'\n                queryset = queryset.exclude(**{filtr: values})\n\n        acked = request.query_params.get(\"acknowledged\", False)\n        if not acked:\n            queryset = queryset.filter(acknowledgement__isnull=True)\n\n        on_maintenance = request.query_params.get(\"on_maintenance\", False)\n        if not on_maintenance:\n            is_on_maintenance = (\n                alert_serializers.AlertHistorySerializer.is_on_maintenance\n            )\n\n            # It's time we stop being a queryset, since we now need to filter\n            # on computed values\n            queryset = [i for i in queryset if not is_on_maintenance(i)]\n\n        return queryset\n\n\nclass NetboxIsOnMaintenanceFilterBackend(filters.BaseFilterBackend):\n    \"\"\" \"\"\"\n\n    def filter_queryset(self, request, queryset, view):\n        show_on_maintenance = request.query_params.get('maintenance', None)\n        if show_on_maintenance not in ('yes', 'no'):\n            return queryset\n        on_maintenance = True if show_on_maintenance == 'yes' else False\n        return queryset.on_maintenance(on_maintenance)\n\n\ndef _get_descendants(parents):\n    \"\"\"Returns a list of all descendants for the parents including themselves\"\"\"\n    locations = []\n    for parent in parents:\n        try:\n            location = Location.objects.get(pk=parent)\n        except Location.DoesNotExist:\n            pass\n        else:\n            locations.extend(\n                [\n                    location.pk\n                    for location in location.get_descendants(include_self=True)\n                ]\n            )\n\n    return list(set(locations))\n"
  },
  {
    "path": "python/nav/web/api/v1/helpers/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/api/v1/helpers/prefix_collector.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Provides functions for fetching prefix related data in the API\"\"\"\n\nfrom IPy import IP\n\nfrom django.db import connection\nfrom django.urls import reverse\n\n\nclass UsageResult(object):\n    \"\"\"Container for creating usage results for serializing\"\"\"\n\n    def __init__(self, prefix, active_addresses, starttime=None, endtime=None):\n        \"\"\"\n\n        :type prefix: manage.Prefix\n        :type active_addresses: int\n        :type starttime: datetime.datetime\n        :type endtime: datetime.datetime\n        \"\"\"\n        self.prefix = prefix.net_address\n        self.active_addresses = active_addresses\n        self.max_addresses = IP(self.prefix).len()\n        self.max_hosts = self.max_addresses - 2\n        self.usage = self.active_addresses / float(self.max_hosts) * 100\n        self.starttime = starttime\n        self.net_ident = prefix.vlan.net_ident\n        self.vlan_id = prefix.vlan.vlan\n        self.endtime = endtime if self.starttime else None\n        self.url_machinetracker = reverse(\n            'machinetracker-prefixid_search_active', args=[prefix.pk]\n        )\n        self.url_report = prefix.get_absolute_url()\n        self.url_vlan = reverse('vlan-details', args=[prefix.vlan.pk])\n\n\ndef fetch_usages(prefixes, starttime, endtime):\n    \"\"\"Fetch usage for a list of prefixes\"\"\"\n    if prefixes is None:\n        prefixes = []\n    return [fetch_usage(prefix, starttime, endtime) for prefix in prefixes]\n\n\ndef fetch_usage(prefix, starttime, endtime):\n    \"\"\"Fetches usage for the prefix\n\n    :param prefix: the prefix to fetch active addresses from\n    :type prefix: manage.Prefix\n    :type starttime: datetime.datetime\n    :type endtime: datetime.datetime\n    \"\"\"\n    result = collect_active_ip(prefix, starttime, endtime)\n    return UsageResult(prefix, result, starttime, endtime)\n\n\ndef collect_active_ip(prefix, starttime=None, endtime=None):\n    \"\"\"Collects active ip based on prefix and optional starttime and endtime\n\n    :param prefix: prefix to find active ip addresses for\n    :type prefix: manage.Prefix\n\n    :param starttime: if set will query for active ip-addresses at that time.\n                      if set with endtime indicates the start of the window\n                      for finding active ip addresses\n    :type starttime: datetime.datetime\n\n    :param endtime: if set indicates the end of the window for finding\n                    active ip addresses\n    :type endtime: datetime.datetime\n\n    :returns: int -- an integer representing the active addresses\n    \"\"\"\n\n    cursor = connection.cursor()\n    basequery = \"SELECT COUNT(DISTINCT ip) AS ipcount FROM arp\"\n    prefix = prefix.net_address\n\n    if starttime and endtime:\n        query = (\n            basequery\n            + \"\"\"\n        WHERE (ip << %s AND (start_time, end_time) OVERLAPS (%s, %s))\n        \"\"\"\n        )\n        cursor.execute(query, (prefix, starttime, endtime))\n    elif starttime:\n        query = (\n            basequery\n            + \"\"\"\n        WHERE (ip << %s AND %s BETWEEN start_time AND end_time)\n        \"\"\"\n        )\n        cursor.execute(query, (prefix, starttime))\n    else:\n        query = (\n            basequery\n            + \"\"\"\n        WHERE (ip << %s AND end_time >= 'infinity')\n        \"\"\"\n        )\n        cursor.execute(query, (prefix,))\n\n    result = cursor.fetchone()\n    return int(result[0])\n"
  },
  {
    "path": "python/nav/web/api/v1/serializers.py",
    "content": "#\n# Copyright (C) 2013, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Serializers for the NAV REST api\"\"\"\n\nfrom decimal import Decimal\nfrom datetime import datetime\nfrom typing import Union\n\nfrom django.core.exceptions import ValidationError as DjangoValidationError\nfrom rest_framework import serializers\nfrom rest_framework.exceptions import ValidationError\n\nfrom nav.django.forms import validate_aliases\nfrom nav.models.profiles import Account\nfrom nav.web.api.v1.fields import DisplayNameWritableField\nfrom nav.models import cabling, manage, msgmaint, profiles, rack\nfrom nav.models.fields import INFINITY\nfrom nav.web.maintenance.utils import (\n    ALLOWED_COMPONENTS,\n    COMPONENTS_WITH_INTEGER_PK,\n    get_components_from_keydict,\n)\nfrom nav.web.seeddb.page.netbox.edit import get_sysname\n\n\nclass ManagementProfileSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for management profiles\"\"\"\n\n    protocol = DisplayNameWritableField()\n\n    class Meta(object):\n        model = manage.ManagementProfile\n        fields = \"__all__\"\n\n\nclass AccountSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for accounts\"\"\"\n\n    accountgroups = serializers.PrimaryKeyRelatedField(\n        source='groups',\n        many=True,\n        queryset=profiles.AccountGroup.objects.all(),\n    )\n\n    class Meta(object):\n        model = profiles.Account\n        fields = (\n            'id',\n            'login',\n            'name',\n            'ext_sync',\n            'preferences',\n            'organizations',\n            'accountgroups',\n        )\n\n\nclass AccountGroupSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for accountgroups\"\"\"\n\n    class Meta(object):\n        model = profiles.AccountGroup\n        fields = ('id', 'name', 'description', 'accounts')\n\n\nclass EntitySerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for netboxentities\"\"\"\n\n    serial = serializers.CharField(source='device')\n\n    class Meta(object):\n        model = manage.NetboxEntity\n        fields = (\n            'id',\n            'name',\n            'descr',\n            'serial',\n            'vendor_type',\n            'hardware_revision',\n            'firmware_revision',\n            'software_revision',\n            'mfg_name',\n            'model_name',\n            'fru',\n            'mfg_date',\n        )\n\n\nclass NetboxTypeSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the type model\"\"\"\n\n    class Meta(object):\n        model = manage.NetboxType\n        fields = '__all__'\n\n\nclass LocationSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the location model\"\"\"\n\n    class Meta(object):\n        model = manage.Location\n        fields = '__all__'\n\n    def validate_aliases(self, value):\n        try:\n            validate_aliases(value)\n        except DjangoValidationError as e:\n            raise serializers.ValidationError(e)\n        return value\n\n\nclass RoomSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the room model\"\"\"\n\n    position = serializers.ListField(\n        child=serializers.DecimalField(max_digits=20, decimal_places=12),\n        allow_null=True,\n        required=False,\n        min_length=2,\n        max_length=2,\n    )\n\n    class Meta(object):\n        model = manage.Room\n        fields = '__all__'\n\n    def validate(self, attrs):\n        \"\"\"Ensures conversion of coordinate from string list to tuple of Decimals\"\"\"\n        if attrs.get(\"position\"):\n            lat, lon = attrs.get(\"position\")\n            attrs[\"position\"] = (Decimal(lat), Decimal(lon))\n        return attrs\n\n    def validate_aliases(self, value):\n        try:\n            validate_aliases(value)\n        except DjangoValidationError as e:\n            raise serializers.ValidationError(e)\n        return value\n\n\nclass OrganizationSerializer(serializers.ModelSerializer):\n    class Meta(object):\n        model = manage.Organization\n        fields = '__all__'\n\n\nclass CategorySerializer(serializers.ModelSerializer):\n    class Meta(object):\n        model = manage.Category\n        fields = '__all__'\n\n\nclass SubNetboxSerializer(serializers.ModelSerializer):\n    object_url = serializers.CharField(source='get_absolute_url')\n\n    class Meta(object):\n        model = manage.Netbox\n        fields = '__all__'\n\n\nclass NetboxSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the netbox model\"\"\"\n\n    chassis = EntitySerializer(source='get_chassis', many=True, read_only=True)\n    sysname = serializers.CharField(required=False)\n\n    # We need two fields for related fields that are required: one for reading\n    # (room) and one for writing (roomid).\n    #\n    # The reason for this is that if we try to create a netbox by POSTing, it\n    # will try to create a new room aswell (giving an existing roomid will make\n    # it complain about already existing rooms). Not giving a room is impossible\n    # as it is required.\n    #\n    # Thus we need a PrimaryKeyRelatedField where the source defines the key\n    # that we use to find the related room when creating a new netbox\n\n    roomid = serializers.PrimaryKeyRelatedField(\n        source='room', write_only=True, queryset=manage.Room.objects.all()\n    )\n    room = RoomSerializer(required=False)\n\n    organizationid = serializers.PrimaryKeyRelatedField(\n        source='organization',\n        write_only=True,\n        queryset=manage.Organization.objects.all(),\n    )\n    organization = OrganizationSerializer(required=False)\n\n    categoryid = serializers.PrimaryKeyRelatedField(\n        source='category', write_only=True, queryset=manage.Category.objects.all()\n    )\n    category = CategorySerializer(required=False)\n\n    masterid = serializers.PrimaryKeyRelatedField(\n        source='master',\n        required=False,\n        write_only=True,\n        queryset=manage.Netbox.objects.all(),\n    )\n    master = SubNetboxSerializer(required=False)\n\n    typeid = serializers.PrimaryKeyRelatedField(\n        source='type',\n        required=False,\n        write_only=True,\n        queryset=manage.NetboxType.objects.all(),\n    )\n    type = NetboxTypeSerializer(read_only=True)\n\n    profiles = serializers.PrimaryKeyRelatedField(\n        required=False,\n        many=True,\n        write_only=False,\n        queryset=manage.ManagementProfile.objects,\n    )\n\n    mac_addresses = serializers.ListField(read_only=True, required=False)\n\n    class Meta(object):\n        model = manage.Netbox\n        depth = 1\n        fields = '__all__'\n\n    def validate(self, attrs):\n        if attrs.get(\"ip\") and not attrs.get(\"sysname\"):\n            attrs[\"sysname\"] = get_sysname(attrs.get(\"ip\")) or attrs.get(\"ip\")\n        try:\n            duplicate = manage.Netbox.objects.get(sysname=attrs.get(\"sysname\"))\n        except manage.Netbox.DoesNotExist:\n            pass\n        else:\n            if duplicate != self.instance:\n                raise ValidationError(\n                    \"{} already exists in the database\".format(attrs.get(\"sysname\")),\n                    code=\"unique\",\n                )\n        return attrs\n\n    def create(self, validated_data):\n        profile_list = validated_data.pop(\"profiles\", None)\n        netbox = manage.Netbox.objects.create(**validated_data)\n        self._update_profiles(netbox, profile_list)\n        return netbox\n\n    def update(self, instance, validated_data):\n        profile_list = validated_data.pop(\"profiles\", None)\n        instance = super(NetboxSerializer, self).update(instance, validated_data)\n        self._update_profiles(instance, profile_list)\n        return instance\n\n    @staticmethod\n    def _update_profiles(instance, profile_list):\n        if profile_list is None:\n            return\n\n        profile_set = set(profile_list)\n        old_profiles = set(instance.profiles.all())\n        to_add = profile_set.difference(old_profiles)\n        to_remove = old_profiles.difference(profile_set)\n        for profile in to_remove:\n            manage.NetboxProfile.objects.get(netbox=instance, profile=profile).delete()\n        for profile in to_add:\n            manage.NetboxProfile(netbox=instance, profile=profile).save()\n\n\nclass PatchSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the patch model\"\"\"\n\n    class Meta(object):\n        model = cabling.Patch\n        depth = 2\n        fields = '__all__'\n\n\nclass SpecificPatchSerializer(serializers.ModelSerializer):\n    \"\"\"Specific serializer used for InterfaceSerializer\"\"\"\n\n    class Meta(object):\n        model = cabling.Patch\n        depth = 1\n        fields = ('id', 'cabling', 'split')\n\n\nclass NetboxInlineSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for including netbox information in other serializers\"\"\"\n\n    class Meta(object):\n        model = manage.Netbox\n        fields = ('id', 'sysname')\n\n\nclass DeviceSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the device model\"\"\"\n\n    class Meta(object):\n        model = manage.Device\n        fields = '__all__'\n\n\nclass DeviceInlineSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the device model\"\"\"\n\n    class Meta(object):\n        model = manage.Device\n        fields = ('id', 'serial')\n\n\nclass ModuleInlineSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for including module information in other serializers\"\"\"\n\n    object_url = serializers.CharField(source='get_absolute_url')\n\n    class Meta(object):\n        model = manage.Module\n        fields = '__all__'\n\n\nclass ModuleSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the module model\"\"\"\n\n    object_url = serializers.CharField(source='get_absolute_url')\n    device = DeviceSerializer()\n    netbox = NetboxInlineSerializer()\n\n    class Meta(object):\n        model = manage.Module\n        fields = '__all__'\n\n\nclass CamSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the cam model\"\"\"\n\n    class Meta(object):\n        model = manage.Cam\n        fields = '__all__'\n\n\nclass ArpSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the arp model\"\"\"\n\n    class Meta(object):\n        model = manage.Arp\n        fields = '__all__'\n\n\nclass SubInterfaceSerializer(serializers.ModelSerializer):\n    object_url = serializers.CharField(source='get_absolute_url')\n\n    class Meta(object):\n        model = manage.Interface\n        fields = '__all__'\n\n\nclass AggregatedInterfaceSerializer(serializers.ModelSerializer):\n    class Meta(object):\n        model = manage.Interface\n        fields = ['id', 'ifname']\n\n\nclass InterfaceSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the interface model\"\"\"\n\n    patches = SpecificPatchSerializer()\n    module = ModuleInlineSerializer()\n    object_url = serializers.CharField(source='get_absolute_url')\n    to_netbox = SubNetboxSerializer()\n    to_interface = SubInterfaceSerializer()\n    aggregator = AggregatedInterfaceSerializer(source='get_aggregator')\n    bundled_interfaces = AggregatedInterfaceSerializer(\n        source='get_bundled_interfaces', many=True\n    )\n    netbox = SubNetboxSerializer()\n    vlan_netident = serializers.CharField(read_only=True)\n\n    class Meta(object):\n        model = manage.Interface\n        depth = 1\n        fields = '__all__'\n\n\nclass InterfaceWithCamSerializer(InterfaceSerializer):\n    last_used = CamSerializer(source='get_last_cam_record')\n\n    class Meta(object):\n        model = manage.Interface\n        fields = '__all__'\n\n\nclass CablingSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the cabling model\"\"\"\n\n    class Meta(object):\n        model = cabling.Cabling\n        fields = '__all__'\n\n\nclass UnrecognizedNeighborSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the arp model\"\"\"\n\n    class Meta(object):\n        model = manage.UnrecognizedNeighbor\n        fields = '__all__'\n\n\nclass RackItemSerializer(serializers.Serializer):\n    \"\"\"Serialize a rack item manually - no models available\"\"\"\n\n    id = serializers.ReadOnlyField()\n    title = serializers.ReadOnlyField()\n    metric = serializers.ReadOnlyField(source='get_metric')\n    unit_of_measurement = serializers.ReadOnlyField()\n    human_readable = serializers.ReadOnlyField()\n    absolute_url = serializers.ReadOnlyField(source='get_absolute_url')\n    display_range = serializers.ReadOnlyField(source='get_display_range')\n    display_configuration = serializers.ReadOnlyField(\n        source='get_display_configuration'\n    )\n\n    class Meta(object):\n        fields = '__all__'\n\n\nclass RackConfigurationField(serializers.ReadOnlyField):\n    \"\"\"Field representing the configuration of a rack\"\"\"\n\n    def to_representation(self, value):\n        configuration = {}\n        for column in ['left', 'center', 'right']:\n            configuration[column] = [RackItemSerializer(i).data for i in value[column]]\n        return configuration\n\n\nclass RackSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the rack model\"\"\"\n\n    configuration = RackConfigurationField()\n\n    class Meta(object):\n        model = rack.Rack\n        exclude = ('_configuration',)\n\n\nclass VlanSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the vlan model\"\"\"\n\n    VALID_NET_TYPES = [\"scope\", \"reserved\"]\n\n    class Meta(object):\n        model = manage.Vlan\n        fields = '__all__'\n\n    def validate_net_type(self, value):\n        \"\"\"Validate net_type\n\n        :type value: nav.models.manage.NetType\n        \"\"\"\n        if value.id not in VlanSerializer.VALID_NET_TYPES:\n            raise serializers.ValidationError(\n                \"net_type must be {}\".format(\n                    ' or '.join(VlanSerializer.VALID_NET_TYPES)\n                )\n            )\n        return value\n\n\nclass PrefixSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for prefix model\"\"\"\n\n    usages = serializers.PrimaryKeyRelatedField(\n        many=True, read_only=False, required=False, queryset=manage.Usage.objects.all()\n    )\n    vlan_data = VlanSerializer(read_only=True, source='vlan')\n\n    class Meta(object):\n        model = manage.Prefix\n        fields = '__all__'\n\n    def update(self, instance, validated_data):\n        if 'usages' in validated_data:\n            new_usages = set(u.id for u in validated_data.pop('usages'))\n            current_usages = set(u.id for u in instance.usages.all())\n            to_add = new_usages - current_usages\n            to_delete = current_usages - new_usages\n\n            for usage in to_add:\n                manage.PrefixUsage(\n                    prefix=instance, usage=manage.Usage.objects.get(pk=usage)\n                ).save()\n\n            manage.PrefixUsage.objects.filter(\n                prefix=instance, usage__in=list(to_delete)\n            ).delete()\n        return super(PrefixSerializer, self).update(instance, validated_data)\n\n    def create(self, validated_data):\n        usages = validated_data.pop('usages', [])\n        instance = super(PrefixSerializer, self).create(validated_data)\n        for usage in usages:\n            manage.PrefixUsage(prefix=instance, usage=usage).save()\n\n        return instance\n\n\nclass PrefixUsageSerializer(serializers.Serializer):\n    \"\"\"Serializer for prefix usage queries\"\"\"\n\n    starttime = serializers.DateTimeField()\n    endtime = serializers.DateTimeField()\n    prefix = serializers.CharField()\n    usage = serializers.FloatField()\n    active_addresses = serializers.IntegerField()\n    max_addresses = serializers.IntegerField()\n    max_hosts = serializers.IntegerField()\n    vlan_id = serializers.IntegerField()\n    net_ident = serializers.CharField()\n    url_machinetracker = serializers.CharField()\n    url_report = serializers.CharField()\n    url_vlan = serializers.CharField()\n\n    class Meta(object):\n        fields = '__all__'\n\n\nclass ServiceHandlerSerializer(serializers.Serializer):\n    \"\"\"Serializer for service handlers.\n\n    These handlers does not exist in the database but as python modules.\n\n    NB: Later versions of django rest framework supports list and dict\n    fields. Then we can add the args and optargs.\n    \"\"\"\n\n    name = serializers.CharField()\n    ipv6_support = serializers.BooleanField()\n    description = serializers.CharField()\n\n    class Meta(object):\n        fields = '__all__'\n\n\nclass NetboxEntitySerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for the NetboxEntity model\"\"\"\n\n    device = DeviceInlineSerializer()\n    physical_class_name = serializers.CharField(source='get_physical_class_display')\n\n    class Meta(object):\n        model = manage.NetboxEntity\n        fields = '__all__'\n\n\nclass ComponentSerializer(serializers.Serializer):\n    \"\"\"Serializer for creating components of a MaintenanceTask\"\"\"\n\n    room = serializers.ListField(\n        child=serializers.CharField(),\n        allow_null=True,\n        required=False,\n    )\n    location = serializers.ListField(\n        child=serializers.CharField(),\n        allow_null=True,\n        required=False,\n    )\n    netbox = serializers.ListField(\n        child=serializers.IntegerField(),\n        allow_null=True,\n        required=False,\n    )\n    service = serializers.ListField(\n        child=serializers.IntegerField(),\n        allow_null=True,\n        required=False,\n    )\n    netboxgroup = serializers.ListField(\n        child=serializers.CharField(),\n        allow_null=True,\n        required=False,\n    )\n\n\nclass RequestMaintenanceTaskSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for creating a MaintenanceTask\"\"\"\n\n    end_time = serializers.DateTimeField(\n        default=INFINITY, required=False, allow_null=True\n    )\n    components = ComponentSerializer()\n\n    class Meta(object):\n        model = msgmaint.MaintenanceTask\n        fields = (\n            \"start_time\",\n            \"end_time\",\n            \"description\",\n            \"author\",\n            \"components\",\n        )\n\n    def validate_end_time(self, value):\n        if value is None:\n            return INFINITY\n        return value\n\n    def validate_author(self, value):\n        if not Account.objects.filter(login=value).exists():\n            raise serializers.ValidationError(\"No account with this login exists\")\n        return value\n\n    def validate_components(self, value):\n        if not value:\n            raise serializers.ValidationError(\"No components selected\")\n\n        components, component_errors = get_components_from_keydict(value)\n\n        if component_errors:\n            raise serializers.ValidationError(component_errors)\n\n        return components\n\n    def validate(self, data):\n        if data['start_time'] > data['end_time']:\n            raise serializers.ValidationError(\"End_time must be later than start_time\")\n        return data\n\n    def create(self, validated_data: dict):\n        components = validated_data.pop(\"components\", {})\n\n        task = msgmaint.MaintenanceTask(\n            start_time=validated_data['start_time'],\n            end_time=validated_data['end_time'],\n            description=validated_data['description'],\n            author=validated_data['author'],\n        )\n\n        if task.end_time <= datetime.now():\n            task.state = msgmaint.MaintenanceTask.STATE_PASSED\n        else:\n            task.state = msgmaint.MaintenanceTask.STATE_SCHEDULED\n\n        task.save()\n\n        self._add_maintenance_components(task, components)\n\n        return task\n\n    @staticmethod\n    def _add_maintenance_components(task: msgmaint.MaintenanceTask, components: list):\n        \"\"\"Adds maintenance components to an existing maintenance task\"\"\"\n        for component in components:\n            table = component._meta.db_table\n            descr = str(component) if table in COMPONENTS_WITH_INTEGER_PK else None\n            msgmaint.MaintenanceComponent.objects.create(\n                maintenance_task=task,\n                key=table,\n                value=component.pk,\n                description=descr,\n            )\n\n\nclass ResponseMaintenanceTaskSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for returning a MaintenanceTask\"\"\"\n\n    components = serializers.SerializerMethodField()\n\n    class Meta(object):\n        model = msgmaint.MaintenanceTask\n        fields = '__all__'\n\n    def get_components(self, obj):\n        components = {}\n        for component_type in ALLOWED_COMPONENTS:\n            component_ids = self._get_component_ids_of_specific_model(\n                obj, component_type\n            )\n            if component_ids:\n                components[component_type] = component_ids\n        return components\n\n    @staticmethod\n    def _get_component_ids_of_specific_model(\n        task: msgmaint.MaintenanceTask, model_name: str\n    ) -> list[Union[int, str]]:\n        return [\n            int(component.value)\n            if model_name in COMPONENTS_WITH_INTEGER_PK\n            else component.value\n            for component in task.maintenance_components.all()\n            if component.key == model_name\n        ]\n"
  },
  {
    "path": "python/nav/web/api/v1/urls.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Urlconf for the NAV REST api\"\"\"\n\nfrom django.urls import re_path, include, path\nfrom rest_framework import routers\n\nfrom nav.auditlog import api as auditlogapi\nfrom nav.web.api.v1 import views\n\nrouter = routers.SimpleRouter()\nrouter.register(r'account', views.AccountViewSet)\nrouter.register(r'accountgroup', views.AccountGroupViewSet, basename='accountgroup')\nrouter.register(r'rack', views.RackViewSet)\nrouter.register(r'room', views.RoomViewSet)\nrouter.register(r'location', views.LocationViewSet)\nrouter.register(\n    r'management-profile',\n    views.ManagementProfileViewSet,\n    basename=\"management-profile\",\n)\nrouter.register(r'netbox', views.NetboxViewSet)\nrouter.register(r'interface', views.InterfaceViewSet)\nrouter.register(r'prefix', views.PrefixViewSet)\nrouter.register(r'vlan', views.VlanViewSet)\nrouter.register(r'cabling', views.CablingViewSet, basename='cabling')\nrouter.register(r'patch', views.PatchViewSet, basename='patch')\nrouter.register(r'cam', views.CamViewSet, basename='cam')\nrouter.register(r'arp', views.ArpViewSet, basename='arp')\nrouter.register(\n    r'servicehandler', views.ServiceHandlerViewSet, basename='servicehandler'\n)\nrouter.register(r'alert', views.AlertHistoryViewSet, basename='alert')\nrouter.register(\n    r'unrecognized-neighbor',\n    views.UnrecognizedNeighborViewSet,\n    basename='unrecognized-neighbor',\n)\nrouter.register(r'auditlog', auditlogapi.LogEntryViewSet, basename='auditlog')\nrouter.register(r'module', views.ModuleViewSet, basename='module')\nrouter.register(r'netboxentity', views.NetboxEntityViewSet, basename='netboxentity')\nrouter.register(r'maintenance', views.MaintenanceTaskViewSet, basename='maintenance')\n\n\nurlpatterns = [\n    path('', views.api_root, name=\"root\"),\n    path('token/', views.get_or_create_token, name=\"token\"),\n    path('version/', views.get_nav_version, name=\"version\"),\n    path('prefix/routed/', views.RoutedPrefixList.as_view(), name=\"prefix-routed-list\"),\n    path('prefix/usage/', views.PrefixUsageList.as_view(), name=\"prefix-usage-list\"),\n    re_path(\n        r\"^prefix/usage/(?P<prefix>.*)$\",\n        views.PrefixUsageDetail.as_view(),\n        name=\"prefix-usage-detail\",\n    ),\n    path('', include(router.urls)),\n    path('vendor/', views.VendorLookup.as_view(), name='vendor'),\n    path('jwt/refresh/', views.JWTRefreshViewSet.as_view(), name='jwt-refresh'),\n]\n"
  },
  {
    "path": "python/nav/web/api/v1/views.py",
    "content": "# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Views for the NAV API\"\"\"\n\nfrom datetime import datetime, timedelta\nimport logging\nfrom typing import Sequence\n\nfrom IPy import IP\nfrom django.http import HttpResponse, JsonResponse, QueryDict\nfrom django.db.models import Q\nfrom django.db.models.fields.related import ManyToOneRel as _RelatedObject\nfrom django.core.exceptions import FieldDoesNotExist\nimport django.db\nimport iso8601\nimport json\n\nfrom django_filters.rest_framework import DjangoFilterBackend, FilterSet\nfrom django_filters.filters import BooleanFilter, CharFilter, ModelMultipleChoiceFilter\nfrom rest_framework import status, filters, viewsets, exceptions\nfrom rest_framework.authentication import SessionAuthentication\nfrom rest_framework.decorators import api_view, renderer_classes, action\nfrom rest_framework.reverse import reverse_lazy\nfrom rest_framework.renderers import (\n    JSONRenderer,\n    BrowsableAPIRenderer,\n    TemplateHTMLRenderer,\n)\nfrom rest_framework.response import Response\nfrom rest_framework.views import APIView\nfrom rest_framework.viewsets import ViewSet\nfrom rest_framework.generics import ListAPIView, get_object_or_404\nfrom rest_framework.serializers import ValidationError\n\nfrom oidc_auth.authentication import JSONWebTokenAuthentication\nimport jwt\n\nfrom nav.django.settings import JWT_PUBLIC_KEY, JWT_NAME, LOCAL_JWT_IS_CONFIGURED\nfrom nav.macaddress import MacAddress\nfrom nav.models import cabling, event, manage, msgmaint, profiles, rack\nfrom nav.models.api import JWTRefreshToken\nfrom nav.models.fields import INFINITY, UNRESOLVED\nfrom nav.web.auth.utils import get_account\nfrom nav.web.servicecheckers import load_checker_classes\nfrom nav.util import auth_token, is_valid_cidr\n\nfrom nav.buildconf import VERSION\nfrom nav.web.api.v1 import serializers, alert_serializers\nfrom nav.web.status2 import STATELESS_THRESHOLD\nfrom nav.web.jwtgen import (\n    decode_token,\n    generate_access_token,\n    generate_refresh_token,\n    hash_token,\n)\nfrom nav.macaddress import MacPrefix\nfrom .auth import (\n    APIAuthentication,\n    DefaultPermission,\n    RelaxedReadPermission,\n)\nfrom .helpers import prefix_collector\nfrom .filter_backends import (\n    AlertHistoryFilterBackend,\n    IfClassFilter,\n    NaturalIfnameFilter,\n    NetboxIsOnMaintenanceFilterBackend,\n)\n\nEXPIRE_DELTA = timedelta(days=365)\nMINIMUMPREFIXLENGTH = 4\n_logger = logging.getLogger(__name__)\n\n\nclass Iso8601ParseError(exceptions.ParseError):\n    default_detail = (\n        'Wrong format on timestamp. See https://pypi.python.org/pypi/iso8601'\n    )\n\n\nclass IPParseError(exceptions.ParseError):\n    default_detail = (\n        'ip field must be a valid IPv4 or IPv6 host address or network prefix'\n    )\n\n\n@api_view(('GET',))\n@renderer_classes((JSONRenderer, BrowsableAPIRenderer))\ndef api_root(request):\n    \"\"\"\n    Some endpoints support write operations. They have a POST in the\n    Allow-header.\n\n    To get programmatic access to the API you need a token. Read more\n    in the official [documentation][1].\n\n    Paging\n    ------\n    `/api/netbox/?page_size=10`\n\n    Default page_size is 100\n\n    Searching\n    ---------\n    `/api/netbox/?search=something`\n\n    Which fields are searched is documented for each endpoint.\n\n    Filtering\n    ---------\n    `/api/netbox/?category=GSW`\n\n    Which fields can be used for filtering is documented for each endpoint.\n\n    Sorting\n    -------\n    `/api/netbox/?ordering=sysname` for ascending order.\n\n    `/api/netbox/?ordering=-sysname` for descending order.\n\n    `/api/netbox/?ordering=room__location` for ordering on related models.\n\n    Most attributes of the result records can be used as ordering arguments.\n\n    [1]: https://nav.readthedocs.io/en/latest/howto/using_the_api.html\n    \"\"\"\n    return Response(get_endpoints(request))\n\n\ndef get_endpoints(request=None, version=1):\n    \"\"\"Returns all endpoints for the API\"\"\"\n\n    apiprefix = 'api'\n    prefix = '{}:{}:'.format(apiprefix, version) if version else '{}:'.format(apiprefix)\n    kwargs = {'request': request}\n\n    return {\n        'account': reverse_lazy('{}account-list'.format(prefix), **kwargs),\n        'accountgroup': reverse_lazy('{}accountgroup-list'.format(prefix), **kwargs),\n        'alert': reverse_lazy('{}alert-list'.format(prefix), **kwargs),\n        'auditlog': reverse_lazy('{}auditlog-list'.format(prefix), **kwargs),\n        'arp': reverse_lazy('{}arp-list'.format(prefix), **kwargs),\n        'cabling': reverse_lazy('{}cabling-list'.format(prefix), **kwargs),\n        'cam': reverse_lazy('{}cam-list'.format(prefix), **kwargs),\n        'interface': reverse_lazy('{}interface-list'.format(prefix), **kwargs),\n        'location': reverse_lazy('{}location-list'.format(prefix), **kwargs),\n        'management_profile': reverse_lazy(\n            '{}management-profile-list'.format(prefix), **kwargs\n        ),\n        'netbox': reverse_lazy('{}netbox-list'.format(prefix), **kwargs),\n        'patch': reverse_lazy('{}patch-list'.format(prefix), **kwargs),\n        'prefix': reverse_lazy('{}prefix-list'.format(prefix), **kwargs),\n        'prefix_routed': reverse_lazy('{}prefix-routed-list'.format(prefix), **kwargs),\n        'prefix_usage': reverse_lazy('{}prefix-usage-list'.format(prefix), **kwargs),\n        'room': reverse_lazy('{}room-list'.format(prefix), **kwargs),\n        'servicehandler': reverse_lazy(\n            '{}servicehandler-list'.format(prefix), **kwargs\n        ),\n        'unrecognized_neighbor': reverse_lazy(\n            '{}unrecognized-neighbor-list'.format(prefix), **kwargs\n        ),\n        'vlan': reverse_lazy('{}vlan-list'.format(prefix), **kwargs),\n        'rack': reverse_lazy('{}rack-list'.format(prefix), **kwargs),\n        'module': reverse_lazy('{}module-list'.format(prefix), **kwargs),\n        'vendor': reverse_lazy('{}vendor'.format(prefix), **kwargs),\n        'netboxentity': reverse_lazy('{}netboxentity-list'.format(prefix), **kwargs),\n        'jwt_refresh': reverse_lazy('{}jwt-refresh'.format(prefix), **kwargs),\n        'maintenance': reverse_lazy('{}maintenance-list'.format(prefix), **kwargs),\n    }\n\n\nclass RelatedOrderingFilter(filters.OrderingFilter):\n    \"\"\"\n    Extends OrderingFilter to support ordering by fields in related models\n    using the Django ORM __ notation\n    \"\"\"\n\n    def is_valid_field(self, model, field):\n        \"\"\"\n        Return true if the field exists within the model (or in the related\n        model specified using the Django ORM __ notation)\n        \"\"\"\n        components = field.split('__', 1)\n        try:\n            field = model._meta.get_field(components[0])\n\n            # reverse relation\n            if isinstance(field, _RelatedObject):\n                return self.is_valid_field(field.model, components[1])\n\n            # foreign key\n            if len(components) == 2:\n                remote_model = field.remote_field.model\n                if remote_model:\n                    return self.is_valid_field(remote_model, components[1])\n            return True\n        except FieldDoesNotExist:\n            return False\n\n    def remove_invalid_fields(self, queryset, ordering, view, request):\n        return [\n            term\n            for term in ordering\n            if self.is_valid_field(queryset.model, term.lstrip('-'))\n        ]\n\n\nclass NAVAPIMixin(APIView):\n    \"\"\"Mixin for providing permissions and renderers\"\"\"\n\n    authentication_classes = (\n        SessionAuthentication,\n        APIAuthentication,\n        JSONWebTokenAuthentication,\n    )\n    permission_classes = (DefaultPermission,)\n    renderer_classes = (JSONRenderer, BrowsableAPIRenderer)\n    filter_backends = (filters.SearchFilter, DjangoFilterBackend, RelatedOrderingFilter)\n    ordering_fields = '__all__'\n    ordering = ('id',)\n\n\nclass ServiceHandlerViewSet(NAVAPIMixin, ViewSet):\n    \"\"\"List all service handlers\"\"\"\n\n    def list(self, _request):\n        \"\"\"Handle list requests\"\"\"\n        queryset = [self._build_object(c) for c in load_checker_classes()]\n        serializer = serializers.ServiceHandlerSerializer(queryset, many=True)\n        return Response(serializer.data)\n\n    def retrieve(self, _request, pk=None):\n        \"\"\"Handle retrieve requests\"\"\"\n        for checker in load_checker_classes():\n            if checker.get_type() == pk:\n                serializer = serializers.ServiceHandlerSerializer(\n                    self._build_object(checker)\n                )\n                return Response(serializer.data)\n\n    @staticmethod\n    def _build_object(checker):\n        return {\n            'name': checker.get_type(),\n            'ipv6_support': checker.IPV6_SUPPORT,\n            'description': checker.DESCRIPTION,\n        }\n\n\nclass LoggerMixin(object):\n    \"\"\"Mixin for logging API-calls\"\"\"\n\n    def create(self, request, *args, **kwargs):\n        \"\"\"Log POST requests that create new objects\"\"\"\n        response = super(LoggerMixin, self).create(request, *args, **kwargs)\n        if response.status_code == status.HTTP_201_CREATED:\n            _logger.info('Token %s created', self.request.auth)\n        return response\n\n    def update(self, request, *args, **kwargs):\n        \"\"\"Log successful update (PUT and PATCH) requests\n\n        Remember - update can create new objects with PUT\n        \"\"\"\n        response = super(LoggerMixin, self).update(request, *args, **kwargs)\n        if response.status_code in [status.HTTP_200_OK, status.HTTP_201_CREATED]:\n            _logger.info(\n                'Token %s updated with %s', self.request.auth, dict(self.request.data)\n            )\n        return response\n\n    def destroy(self, request, *args, **kwargs):\n        \"\"\"Log successful DELETE requests\"\"\"\n        obj = self.get_object()\n        response = super(LoggerMixin, self).destroy(request, *args, **kwargs)\n        if response.status_code == status.HTTP_204_NO_CONTENT:\n            _logger.info('Token %s deleted %r', self.request.auth, obj)\n        return response\n\n\nclass AccountViewSet(NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all accounts\n\n    Filters\n    -------\n    - login\n    - ext_sync\n\n    Search\n    ------\n    Searches in *name*\n    \"\"\"\n\n    queryset = profiles.Account.objects.all()\n    serializer_class = serializers.AccountSerializer\n    filterset_fields = ('login', 'ext_sync')\n    search_fields = ('name',)\n\n\nclass AccountGroupViewSet(NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all accountgroups\n\n    Filters\n    -------\n    - account - filter by one or more accounts\n\n    Search\n    ------\n    Searches in *name* and *description*\n\n    Example: `accountgroup?account=abcd&account=bcde`\n    \"\"\"\n\n    serializer_class = serializers.AccountGroupSerializer\n    search_fields = ('name', 'description')\n\n    def get_queryset(self):\n        queryset = profiles.AccountGroup.objects.all()\n        accounts = self.request.query_params.getlist('account')\n        if accounts:\n            queryset = queryset.filter(accounts__in=accounts).distinct()\n        return queryset\n\n\nclass AliasQueryParamMixin:\n    \"\"\"Generalised mixin for alias filtering\"\"\"\n\n    def get_queryset(self):\n        qs = super().get_queryset()\n        alias = self.request.query_params.get('alias')\n        if alias:\n            qs = qs.aka(alias)\n        return qs\n\n\nclass RoomViewSet(\n    LoggerMixin, NAVAPIMixin, AliasQueryParamMixin, viewsets.ModelViewSet\n):\n    \"\"\"Lists all rooms.\n\n    Search\n    ------\n    Searches in *description* and *aliases*\n\n    Filters\n    -------\n    - id\n    - description\n    - location\n    - alias\n    \"\"\"\n\n    queryset = manage.Room.objects.all()\n    serializer_class = serializers.RoomSerializer\n    filterset_fields = ('id', 'location', 'description')\n    search_fields = ('description', 'aliases')\n    lookup_value_regex = '[^/]+'\n    permission_classes = (RelaxedReadPermission,)\n\n\nclass LocationViewSet(\n    LoggerMixin, AliasQueryParamMixin, NAVAPIMixin, viewsets.ModelViewSet\n):\n    \"\"\"Lists all locations\n\n    Search\n    ------\n    Searches in *description* and *aliases*\n\n    Filters\n    -------\n    - id\n    - description\n    - parent\n    - alias\n    \"\"\"\n\n    queryset = manage.Location.objects.all()\n    serializer_class = serializers.LocationSerializer\n    filterset_fields = ('id', 'parent', 'description')\n    search_fields = ('description', 'aliases')\n    lookup_value_regex = '[^/]+'\n\n\nclass UnrecognizedNeighborViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists unrecognized neighbors.\n\n    Search\n    ------\n    Searches in *remote_name*\n\n    Filters\n    -------\n    - netbox\n    - source\n    \"\"\"\n\n    queryset = manage.UnrecognizedNeighbor.objects.all()\n    serializer_class = serializers.UnrecognizedNeighborSerializer\n    filterset_fields = ('netbox', 'source')\n    search_fields = ('remote_name',)\n\n\nclass ManagementProfileViewSet(LoggerMixin, NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all management profiles\"\"\"\n\n    queryset = manage.ManagementProfile.objects.all()\n    serializer_class = serializers.ManagementProfileSerializer\n\n\nclass NetboxFilterClass(FilterSet):\n    \"\"\"Contains filter logic for netboxes\"\"\"\n\n    room_alias = CharFilter(method=\"filter_room_alias\")\n\n    room_location_alias = CharFilter(method=\"filter_room_location_alias\")\n\n    def filter_room_alias(self, queryset, name, value):\n        return queryset.filter(room__in=manage.Room.objects.aka(value))\n\n    def filter_room_location_alias(self, queryset, name, value):\n        return queryset.filter(room__location__in=manage.Location.objects.aka(value))\n\n    class Meta:\n        model = manage.Netbox\n        fields = ('sysname', 'room', 'organization', 'category', 'room__location')\n\n\nclass NetboxViewSet(LoggerMixin, NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all netboxes.\n\n    Search\n    ------\n    Searches in *sysname*.\n\n    Filters\n    -------\n    - category\n    - ip\n    - maintenance: \"yes\" for netboxes on maintenance, \"no\" for the opposite,\n      unset for everything\n    - organization\n    - room\n    - room_alias\n    - room_location_alias\n    - sysname\n    - type__name (NB: two underscores): ^ indicates starts_with, otherwise exact match\n\n    When the filtered item is an object, it will filter on the id.\n    \"\"\"\n\n    queryset = manage.Netbox.objects.all().prefetch_related(\"info_set\")\n    serializer_class = serializers.NetboxSerializer\n    filterset_class = NetboxFilterClass\n    filter_backends = NAVAPIMixin.filter_backends + (\n        NetboxIsOnMaintenanceFilterBackend,\n    )\n    search_fields = ('sysname',)\n\n    def destroy(self, request, *args, **kwargs):\n        \"\"\"Override the deletion process\n\n        The background processes of NAV will execute the deletion if deleted_at\n        is set\n        \"\"\"\n        obj = self.get_object()\n        obj.deleted_at = datetime.now()\n        obj.save()\n        _logger.info('Token %s set deleted at for %r', self.request.auth, obj)\n        return Response(status=status.HTTP_204_NO_CONTENT)\n\n    def get_queryset(self):\n        \"\"\"Implement basic filtering on type__name\n\n        If more custom filters are requested create a filterbackend:\n        http://www.django-rest-framework.org/api-guide/filtering/#example\n        \"\"\"\n        qs = super(NetboxViewSet, self).get_queryset()\n        params = self.request.query_params\n        if 'type__name' in params:\n            value = params.get('type__name')\n            if value.startswith('^'):\n                qs = qs.filter(type__name__istartswith=value[1:])\n            else:\n                qs = qs.filter(type__name=value)\n        ip = params.get('ip', None)\n        if ip:\n            try:\n                addr = IP(ip)\n            except ValueError:\n                raise IPParseError\n            oper = '=' if addr.len() == 1 else '<<'\n            expr = \"netbox.ip {} '{}'\".format(oper, addr)\n            qs = qs.extra(where=[expr])\n\n        return qs\n\n\nclass InterfaceFilterClass(FilterSet):\n    \"\"\"Exists only to have a sane implementation of multiple choice filters\"\"\"\n\n    netbox = ModelMultipleChoiceFilter(queryset=manage.Netbox.objects.all())\n\n    class Meta(object):\n        model = manage.Interface\n        fields = (\n            'ifname',\n            'ifindex',\n            'ifoperstatus',\n            'netbox',\n            'trunk',\n            'ifadminstatus',\n            'iftype',\n            'baseport',\n            'module__name',\n            'vlan',\n        )\n\n\nclass InterfaceFragmentRenderer(TemplateHTMLRenderer):\n    media_type = 'text/x-nav-html'\n    template_name = 'ipdevinfo/port-details-api-frag.html'\n\n\nclass InterfaceViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all interfaces.\n\n    Search\n    ------\n    Searches in *ifalias*, *ifdescr* and *ifname*\n\n    Filters\n    -------\n    - baseport\n    - ifadminstatus\n    - ifindex\n    - ifname\n    - ifoperstatus\n    - iftype\n    - netbox\n    - trunk\n    - vlan\n    - module__name\n    - ifclass=[swport, gwport, physicalport, trunk]\n\n    Detail routes\n    -------------\n    - last_used: interface/<id>/last_used/\n    - metrics: interface/<id>/metrics/\n\n    Example: `/api/1/interface/?netbox=91&ifclass=trunk&ifclass=swport`\n    \"\"\"\n\n    queryset = manage.Interface.objects.prefetch_related('swport_vlans__vlan').all()\n    search_fields = ('ifalias', 'ifdescr', 'ifname')\n\n    # NaturalIfnameFilter returns a list, so IfClassFilter needs to come first\n    filter_backends = NAVAPIMixin.filter_backends + (IfClassFilter, NaturalIfnameFilter)\n    filterset_class = InterfaceFilterClass\n\n    # Logged-in users must be able to access this API to use the ipdevinfo ports tool\n    permission_classes = (RelaxedReadPermission,)\n\n    def get_serializer_class(self):\n        request = self.request\n        if request.query_params.get('last_used'):\n            return serializers.InterfaceWithCamSerializer\n        else:\n            return serializers.InterfaceSerializer\n\n    def get_renderers(self):\n        if self.action == 'retrieve':\n            self.renderer_classes += (InterfaceFragmentRenderer,)\n        return super(InterfaceViewSet, self).get_renderers()\n\n    @action(detail=True)\n    def metrics(self, _request, pk=None):\n        \"\"\"List all metrics for this interface\n\n        We don't want to include this by default as that will spam the Graphite\n        backend with requests.\n        \"\"\"\n        return Response(self.get_object().get_port_metrics())\n\n    @action(detail=True)\n    def last_used(self, _request, pk=None):\n        \"\"\"Return last used timestamp for this interface\n\n        If still in use this will return datetime.max as per\n        DateTimeInfinityField\n        \"\"\"\n        try:\n            serialized = serializers.CamSerializer(\n                self.get_object().get_last_cam_record()\n            )\n            return Response({'last_used': serialized.data.get('end_time')})\n        except manage.Cam.DoesNotExist:\n            return Response({'last_used': None})\n\n\nclass PatchFilterClass(FilterSet):\n    \"\"\"Contains filter logic for patches\"\"\"\n\n    cabling_room_alias = CharFilter(method=\"filter_cabling_room_alias\")\n    cabling_target_room_alias = CharFilter(method=\"filter_cabling_target_room_alias\")\n\n    def filter_cabling_room_alias(self, queryset, name, value):\n        return queryset.filter(cabling__room__in=manage.Room.objects.aka(value))\n\n    # Done by id since target room is a VarChar and not a foreign key\n    def filter_cabling_target_room_alias(self, queryset, name, value):\n        room_ids = list(manage.Room.objects.aka(value).values_list('id', flat=True))\n        return queryset.filter(cabling__target_room__in=room_ids)\n\n    class Meta:\n        model = cabling.Patch\n        fields = (\n            'cabling',\n            'cabling__room',\n            'interface',\n            'interface__netbox',\n        )\n\n\nclass PatchViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all patches\n\n    Search\n    ------\n    Searches in *jack*, *room*, *sysname*, *ifname*, *ifalias*\n\n    Filters\n    -------\n    - cabling: The cable id\n    - cabling__room: The room id\n    - cabling_room_alias: Room aliases\n    - interface: The interface id\n    - interface__netbox: The netbox id\n\n    ### (Silly) Example\n    `patch/?interface__netbox=138&interface=337827&search=a`\n    \"\"\"\n\n    filter_backends = NAVAPIMixin.filter_backends + (NaturalIfnameFilter,)\n\n    queryset = cabling.Patch.objects.select_related(\n        'cabling__room', 'interface__netbox'\n    ).all()\n    serializer_class = serializers.PatchSerializer\n    filterset_class = PatchFilterClass\n    search_fields = (\n        'cabling__jack',\n        'cabling__room__id',\n        'interface__netbox__sysname',\n        'interface__ifname',\n        'interface__ifalias',\n    )\n\n\nclass CablingFilterClass(FilterSet):\n    \"\"\"Contains filter logic for cabling entities\"\"\"\n\n    room_alias = CharFilter(method=\"filter_room_alias\")\n\n    target_room_alias = CharFilter(method=\"filter_target_room_alias\")\n\n    def filter_room_alias(self, queryset, name, value):\n        return queryset.filter(room__in=manage.Room.objects.aka(value))\n\n    # Done by id since target room is a VarChar and not a foreign key\n    def filter_target_room_alias(self, queryset, name, value):\n        room_ids = list(manage.Room.objects.aka(value).values_list('id', flat=True))\n        return queryset.filter(target_room__in=room_ids)\n\n    class Meta:\n        model = cabling.Cabling\n        fields = (\n            'room',\n            'jack',\n            'building',\n            'target_room',\n            'category',\n        )\n\n\nclass CablingViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all cables.\n\n    Search\n    ------\n    Searches in *jack*, *target_room*, *building*,\n    *description*, *category*, *room*, *room__aliases*\n\n    Filters\n    -------\n    - available: *set this to list only cables that are not patched*\n    - building\n    - category\n    - jack\n    - room\n    - room_alias\n    - target_room\n    - target_room_alias\n\n    \"\"\"\n\n    serializer_class = serializers.CablingSerializer\n    filterset_class = CablingFilterClass\n    search_fields = (\n        'jack',\n        'target_room',\n        'building',\n        'description',\n        'category',\n        'room__id',\n        'room__aliases',\n    )\n\n    def get_queryset(self):\n        queryset = cabling.Cabling.objects.all()\n        not_patched = self.request.query_params.get('available', None)\n        if not_patched:\n            queryset = queryset.filter(patches=None)\n\n        return queryset\n\n\nSQL_OVERLAPS = \"(start_time, end_time) OVERLAPS ('{}'::TIMESTAMP, '{}'::TIMESTAMP)\"\nSQL_BETWEEN = \"'{}'::TIMESTAMP BETWEEN start_time AND end_time\"\n\n\nclass MachineTrackerViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Abstract base ViewSet for ARP and CAM tables\"\"\"\n\n    def get_queryset(self):\n        \"\"\"Filter on custom parameters\"\"\"\n        queryset = self.model_class.objects.all()\n        active = self.request.query_params.get('active', None)\n        starttime, endtime = get_times(self.request)\n\n        if active:\n            queryset = queryset.filter(end_time=INFINITY)\n        elif starttime and not endtime:\n            queryset = queryset.extra(where=[SQL_BETWEEN.format(starttime)])\n        elif starttime and endtime:\n            queryset = queryset.extra(where=[SQL_OVERLAPS.format(starttime, endtime)])\n\n        # Support wildcard filtering on mac\n        queryset = self._parse_mac_to_queryset(\n            self.request.query_params.get('mac'), queryset\n        )\n\n        return queryset\n\n    @staticmethod\n    def _parse_mac_to_queryset(mac, queryset):\n        if not mac:\n            return queryset\n\n        try:\n            mac = MacPrefix(mac, min_prefix_len=2)\n        except ValueError as e:\n            raise exceptions.ParseError(\"mac: %s\" % e)\n\n        low, high = mac[0], mac[-1]\n        return queryset.extra(\n            where=[\"mac BETWEEN %s AND %s\"], params=[str(low), str(high)]\n        )\n\n\nclass CamViewSet(MachineTrackerViewSet):\n    \"\"\"Lists CAM records.\n\n    *Because the number of CAM records often is huge, the API does not support\n    fetching all and will ask you to use a filter if you try.*\n\n    Filters\n    -------\n    - `active`: *set this to list only records that are still active. Enabling\n    this will **ignore** any start- and endtime filters present in the same\n    request.*\n    - `starttime`: *if set without endtime: lists all active records at that\n      timestamp*\n    - `endtime`: *must be set with starttime: lists all active records in the\n      period between starttime and endtime*\n    - `ifindex`\n    - `mac`: *supports prefix filtering - for instance \"mac=aa:aa:aa\" will\n       return all records where the mac address starts with aa:aa:aa*\n    - `netbox`\n    - `port`\n\n    For timestamp formats, see the [iso8601 module\n    doc](https://pypi.python.org/pypi/iso8601) and <https://xkcd.com/1179/>.\n    `end_time` timestamps shown as `\"9999-12-31T23:59:59.999\"` denote records\n    that are still active.\n    \"\"\"\n\n    model_class = manage.Cam\n    serializer_class = serializers.CamSerializer\n    filterset_fields = ('netbox', 'ifindex', 'port')\n\n    def list(self, request):\n        \"\"\"Override list so that we can control what is returned\"\"\"\n        if not request.query_params:\n            return Response(\n                \"Cam records are numerous - use a filter\",\n                status=status.HTTP_400_BAD_REQUEST,\n            )\n        return super(CamViewSet, self).list(request)\n\n\nclass ArpViewSet(MachineTrackerViewSet):\n    \"\"\"Lists ARP records.\n\n    *Because the number of ARP records often is huge, the API does not support\n    fetching all and will ask you to use a filter if you try.*\n\n    Filters\n    -------\n\n    - `active`: *set this to list only records that are still active. Enabling\n    this will **ignore** any start- and endtime filters present in the same\n    request.*\n    - `starttime`: *if set without endtime: lists all active records at that\n      timestamp*\n    - `endtime`: *must be set with starttime: lists all active records in the\n      period between starttime and endtime*\n    - `ip`: *Allows filtering by both individual IP addresses and subnet ranges.\n      Single IP example: \"ip=2001:db8:a0b:12f0::1\"\n      Subnet example: \"ip=10.0.42.0/24\"*\n    - `mac`: *supports prefix filtering - for instance \"mac=aa:aa:aa\" will\n       return all records where the mac address starts with aa:aa:aa*\n    - `netbox`\n    - `prefix`\n\n    For timestamp formats, see the [iso8601 module\n    doc](https://pypi.python.org/pypi/iso8601) and <https://xkcd.com/1179/>.\n    `end_time` timestamps shown as `\"9999-12-31T23:59:59.999\"` denote records\n    that are still active.\n    \"\"\"\n\n    model_class = manage.Arp\n    serializer_class = serializers.ArpSerializer\n    filterset_fields = ('netbox', 'prefix')\n\n    def list(self, request):\n        \"\"\"Override list so that we can control what is returned\"\"\"\n        if not request.query_params:\n            return Response(\n                \"Arp records are numerous - use a filter\",\n                status=status.HTTP_400_BAD_REQUEST,\n            )\n        return super(ArpViewSet, self).list(request)\n\n    def get_queryset(self):\n        \"\"\"Customizes handling of the ip address filter\"\"\"\n        queryset = super(ArpViewSet, self).get_queryset()\n        ip = self.request.query_params.get('ip', None)\n        if ip:\n            try:\n                addr = IP(ip)\n            except ValueError:\n                raise IPParseError\n            oper = '=' if addr.len() == 1 else '<<'\n            expr = \"arp.ip {} '{}'\".format(oper, addr)\n            queryset = queryset.extra(where=[expr])\n\n        return queryset\n\n\nclass VlanViewSet(NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all vlans.\n\n    Search\n    ------\n    Searches in *net_ident* and *description*\n\n    Filters\n    -------\n    - description\n    - net_type\n    - net_ident\n    - organization\n    - usage\n    - vlan\n    \"\"\"\n\n    queryset = manage.Vlan.objects.all()\n    serializer_class = serializers.VlanSerializer\n    filterset_fields = [\n        'vlan',\n        'net_type',\n        'net_ident',\n        'description',\n        'organization',\n        'usage',\n    ]\n    search_fields = ['net_ident', 'description']\n\n\nclass PrefixFilterClass(FilterSet):\n    contains_address = CharFilter(method=\"contains_address_filter\")\n    net_address = CharFilter(method=\"is_net_address\")\n\n    def contains_address_filter(self, queryset, field_name, value):\n        if not value:\n            return queryset\n        if not is_valid_cidr(value):\n            raise ValidationError(\n                {\"contains_address\": [\"Value must be a valid CIDR address\"]}\n            )\n        where_string = \"inet '{}' <<= netaddr\".format(value)\n        return queryset.extra(where=[where_string], order_by=['net_address'])\n\n    def is_net_address(self, queryset, field_name, value):\n        if not value:\n            return queryset\n        if not is_valid_cidr(value):\n            raise ValidationError(\n                {\"net_address\": [\"Value must be a valid CIDR address\"]}\n            )\n        return queryset.filter(net_address=value)\n\n    class Meta(object):\n        model = manage.Prefix\n        fields = (\n            'vlan',\n            'net_address',\n            'vlan__vlan',\n        )\n\n\nclass PrefixViewSet(NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all prefixes.\n\n    Filters\n    -------\n    - net_address\n    - vlan\n    - vlan__vlan: *Filters on the vlan number of the vlan*\n    - contains_address\n\n    \"\"\"\n\n    queryset = manage.Prefix.objects.all()\n    serializer_class = serializers.PrefixSerializer\n    filterset_class = PrefixFilterClass\n\n    @action(detail=False)\n    def search(self, request):\n        \"\"\"Do string-like prefix searching. Currently only supports net_address.\"\"\"\n        net_address = request.GET.get('net_address', None)\n        if not net_address or net_address is None:\n            return Response(\"Empty search\", status=status.HTTP_400_BAD_REQUEST)\n        query = \"SELECT * FROM prefix WHERE text(netaddr) LIKE %s\"\n        # Note: We assume people always know the beginning of a prefix, and\n        # need to drill down further. Hence the wildcard (\"%\") at the end.\n        queryset = manage.Prefix.objects.raw(query, [net_address + \"%\"])\n        results = self.get_serializer(queryset, many=True)\n        return Response(results.data)\n\n\nclass RoutedPrefixList(NAVAPIMixin, ListAPIView):\n    \"\"\"Lists all routed prefixes. A router has category *GSW* or *GW*\n\n    Filters\n    -------\n    - family: *either 4 or 6, else both will be listed*\n\n    \"\"\"\n\n    _router_categories = ['GSW', 'GW']\n    serializer_class = serializers.PrefixSerializer\n\n    def get_queryset(self):\n        prefixes = manage.Prefix.objects.filter(\n            gwport_prefixes__interface__netbox__category__in=self._router_categories\n        )\n        if self.request.GET.get('family'):\n            prefixes = prefixes.extra(\n                where=['family(netaddr)=%s'], params=[self.request.GET['family']]\n            )\n        return prefixes\n\n\ndef get_times(request):\n    \"\"\"Gets start and endtime from request\n\n    As we use no timezone in NAV, remove it from parsed timestamps\n    :param request: django.http.HttpRequest\n    \"\"\"\n    starttime = request.GET.get('starttime')\n    endtime = request.GET.get('endtime')\n    try:\n        if starttime:\n            starttime = iso8601.parse_date(starttime).replace(tzinfo=None)\n        if endtime:\n            endtime = iso8601.parse_date(endtime).replace(tzinfo=None)\n    except iso8601.ParseError:\n        raise Iso8601ParseError\n\n    return starttime, endtime\n\n\nclass PrefixUsageList(NAVAPIMixin, ListAPIView):\n    \"\"\"Lists the usage of prefixes. This means how many addresses are in use\n    in the prefix.\n\n    Usage is only the result of active/max and is kinda silly on v6-addresses.\n\n    Filters\n    -------\n    - scope: *limit results to a specific scope*\n    - family: *limit results to family (either 4 or 6)*\n    - starttime: *If set without endtime, will find active addresses at that\n            time. If set *with* endtime, defines the interval to find active\n            addresses. Format is [iso8601][1].*\n    - endtime: *Must be set together with starttime. Defines the interval to\n            find active addresses. Format is [iso8601][1].*\n\n    See also the [iso8601 module doc](https://pypi.python.org/pypi/iso8601).\n\n    Examples:\n\n    - `?starttime=2016-02-02`\n    - `?starttime=2016-02-02T15:00:00` - default Zulu time.\n    - `?starttime=2016-02-02T15:00:00%2B05` - plus needs to be encoded.\n\n    [1]: https://xkcd.com/1179/\n    \"\"\"\n\n    serializer_class = serializers.PrefixUsageSerializer\n\n    # RelatedOrderingFilter does not work with the custom pagination\n    filter_backends = (filters.SearchFilter, DjangoFilterBackend)\n\n    # Logged-in users must be able to access this API to use the subnet matrix tool\n    permission_classes = (RelaxedReadPermission,)\n\n    def get(self, request, *args, **kwargs):\n        \"\"\"Override get method to verify url parameters\"\"\"\n        get_times(request)\n        return super(PrefixUsageList, self).get(request, *args, **kwargs)\n\n    def get_queryset(self):\n        \"\"\"Filter for ip family\"\"\"\n        if 'scope' in self.request.GET:\n            queryset = manage.Prefix.objects.within(\n                self.request.GET.get('scope')\n            ).order_by('net_address')\n        elif self.request.GET.get('family'):\n            queryset = manage.Prefix.objects.extra(\n                where=['family(netaddr)=%s'], params=[self.request.GET['family']]\n            )\n        else:\n            queryset = manage.Prefix.objects.all()\n\n        # Filter prefixes that is smaller than minimum prefix length\n        results = [\n            p for p in queryset if IP(p.net_address).len() >= MINIMUMPREFIXLENGTH\n        ]\n\n        return results\n\n    def get_serializer(self, data, *args, **kwargs):\n        \"\"\"Populate the serializer with usages based on the prefix list\"\"\"\n        kwargs['context'] = self.get_serializer_context()\n        starttime, endtime = get_times(self.request)\n        usages = prefix_collector.fetch_usages(data, starttime, endtime)\n        serializer_class = self.get_serializer_class()\n        return serializer_class(\n            usages, *args, context=self.get_serializer_context(), many=True\n        )\n\n\nclass PrefixUsageDetail(NAVAPIMixin, APIView):\n    \"\"\"Makes prefix usage accessible from api\"\"\"\n\n    @staticmethod\n    def get(request, prefix):\n        \"\"\"Handles get request for prefix usage\"\"\"\n\n        try:\n            ip_prefix = IP(prefix)\n        except ValueError:\n            return Response(\"Bad prefix\", status=status.HTTP_400_BAD_REQUEST)\n\n        if ip_prefix.len() < MINIMUMPREFIXLENGTH:\n            return Response(\"Prefix is too small\", status=status.HTTP_400_BAD_REQUEST)\n\n        starttime, endtime = get_times(request)\n        db_prefix = get_object_or_404(manage.Prefix, net_address=prefix)\n        serializer = serializers.PrefixUsageSerializer(\n            prefix_collector.fetch_usage(db_prefix, starttime, endtime)\n        )\n\n        return Response(serializer.data)\n\n\nclass AlertFragmentRenderer(TemplateHTMLRenderer):\n    \"\"\"Renders a html fragment for an alert\n\n    To use this you specify mime-type 'text/x-nav-html' in the accept header\n    Does not work for list views\n    \"\"\"\n\n    media_type = 'text/x-nav-html'\n\n    def get_template_context(self, data, renderer_context):\n        \"\"\"Populate the context used for rendering the template\n\n        :param dict data: The serialized alert\n        :param dict renderer_context: Existing context\n        \"\"\"\n\n        if 'id' not in data:\n            return data\n\n        # Put the alert object in the context\n        data['alert'] = event.AlertHistory.objects.get(pk=data['id'])\n\n        netboxid = data.get('netbox')\n        if netboxid:\n            # Replace netbox (the netboxid) with netbox (the object)\n            data.update({'netbox': manage.Netbox.objects.get(pk=netboxid)})\n        return data\n\n\nclass AlertHistoryViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all alerts.\n\n    Filters\n    -------\n    - stateless: *also lists stateless alerts (alerts without end time)*\n    - stateless_threshold: *hours back in time to fetch stateless alerts*\n\n    Example: `?stateless=1&stateless_threshold=1000`\n\n    Headers\n    -------\n    By setting the _Accept_ header field to `text/x-nav-html` you will get a\n    html-representation of the alert suitable for including in web-pages. This\n    only works on _retrieve_ operations, not _list_ operations.\n\n    If the response is an empty string, this means that a template for that\n    alert does not exist.\n    \"\"\"\n\n    filter_backends = (AlertHistoryFilterBackend,)\n    # Logged-in users must be able to access this API to use the status tool\n    permission_classes = (RelaxedReadPermission,)\n    model = event.AlertHistory\n    serializer_class = alert_serializers.AlertHistorySerializer\n    base_queryset = base = event.AlertHistory.objects.prefetch_related(\n        \"variables\", \"netbox__groups\"\n    ).select_related(\n        \"netbox\",\n        \"alert_type\",\n        \"event_type\",\n        \"acknowledgement\",\n        \"source\",\n    )\n\n    def get_renderers(self):\n        if self.action == 'retrieve':\n            self.renderer_classes += (AlertFragmentRenderer,)\n        return super(AlertHistoryViewSet, self).get_renderers()\n\n    def get_queryset(self):\n        \"\"\"Gets an AlertHistory QuerySet\"\"\"\n        if self.is_single_alert_by_primary_key():\n            return self.base_queryset\n        elif not self.request.query_params.get('stateless', False):\n            return self.base_queryset.unresolved()\n        else:\n            return self._get_stateless_queryset()\n\n    def _get_stateless_queryset(self):\n        hours = int(\n            self.request.query_params.get('stateless_threshold', STATELESS_THRESHOLD)\n        )\n        if hours < 1:\n            raise ValueError(\"hours must be at least 1\")\n        threshold = datetime.now() - timedelta(hours=hours)\n        stateless = Q(start_time__gte=threshold) & Q(end_time__isnull=True)\n        return self.base_queryset.filter(stateless | UNRESOLVED)\n\n    def get_template_names(self):\n        \"\"\"Get the template name based on the alerthist object\"\"\"\n        alert = self.get_object()\n        template_names = []\n        try:\n            template_names.append(\n                'alertmsg/{a.event_type}/{a.alert_type.name}.html'.format(a=alert)\n            )\n        except AttributeError:\n            pass\n\n        template_names.extend(\n            ['alertmsg/{a.event_type}/base.html'.format(a=alert), 'alertmsg/base.html']\n        )\n        return template_names\n\n    def is_single_alert_by_primary_key(self):\n        lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field\n        return lookup_url_kwarg in self.kwargs\n\n\nclass RackFilterClass(FilterSet):\n    \"\"\"Contains filter logic for racks\"\"\"\n\n    room_alias = CharFilter(method=\"filter_room_alias\")\n\n    def filter_room_alias(self, queryset, name, value):\n        return queryset.filter(room__in=manage.Room.objects.aka(value))\n\n    class Meta:\n        model = rack.Rack\n        fields = ('id', 'room', 'rackname')\n\n\nclass RackViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all environment racks.\n\n    Search\n    ------\n    Searches in *rackname*\n\n    Filters\n    -------\n    - id\n    - room\n    - room_alias\n    - rackname\n\n    \"\"\"\n\n    queryset = rack.Rack.objects.all()\n    serializer_class = serializers.RackSerializer\n    filterset_class = RackFilterClass\n    search_fields = ['rackname']\n\n\ndef get_or_create_token(request):\n    \"\"\"Gets an existing token or creates a new one. If the old token has\n    expired, create a new one.\n\n    :type request: django.http.HttpRequest\n    \"\"\"\n    account = get_account(request)\n    if account.is_admin():\n        from nav.models.api import APIToken\n\n        token, _ = APIToken.objects.get_or_create(\n            client=account,\n            expires__gte=datetime.now(),\n            defaults={'token': auth_token(), 'expires': datetime.now() + EXPIRE_DELTA},\n        )\n        return HttpResponse(token.token)\n    else:\n        return HttpResponse(\n            'You must log in to get a token', status=status.HTTP_403_FORBIDDEN\n        )\n\n\ndef get_nav_version(request):\n    \"\"\"Returns the version of the running NAV software\n\n    :type request: django.http.HttpRequest\n    \"\"\"\n    return JsonResponse({\"version\": VERSION})\n\n\nclass ModuleViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"Lists all modules.\n\n    Filters\n    -------\n    - netbox\n    - device__serial\n\n    Example: `/api/1/module/?netbox=91&device__serial=AB12345`\n    \"\"\"\n\n    queryset = manage.Module.objects.all()\n    filter_backends = NAVAPIMixin.filter_backends\n    filterset_fields = (\n        'netbox',\n        'device__serial',\n    )\n    serializer_class = serializers.ModuleSerializer\n\n\nclass VendorLookup(NAVAPIMixin, APIView):\n    \"\"\"Lookup vendor names for MAC addresses.\n\n    This endpoint allows you to look up vendor names for MAC addresses.\n    It can be used with either a GET or POST request.\n\n    For GET requests, the MAC address must be provided via the query parameter `mac`.\n    This only supports one MAC address at a time.\n\n    For POST requests, the MAC addresses must be provided in the request body\n    as a JSON array. This supports multiple MAC addresses.\n\n    Responds with a JSON dict mapping the MAC addresses to the corresponding vendors.\n    The MAC addresses will have the format `aa:bb:cc:dd:ee:ff`. If the vendor for a\n    given MAC address is not found, it will be omitted from the response.\n    If no mac address was supplied, an empty dict will be returned.\n\n    Example GET request: `/api/1/vendor/?mac=aa:bb:cc:dd:ee:ff`\n\n    Example GET response: `{\"aa:bb:cc:dd:ee:ff\": \"Vendor A\"}`\n\n    Example POST request:\n        `/api/1/vendor/` with body `[\"aa:bb:cc:dd:ee:ff\", \"11:22:33:44:55:66\"]`\n\n    Example POST response:\n        `{\"aa:bb:cc:dd:ee:ff\": \"Vendor A\", \"11:22:33:44:55:66\": \"Vendor B\"}`\n    \"\"\"\n\n    @staticmethod\n    def get(request):\n        mac = request.GET.get('mac', None)\n        if not mac:\n            return Response({})\n\n        try:\n            validated_mac = MacAddress(mac)\n        except ValueError:\n            return Response(\n                f\"Invalid MAC address: '{mac}'\", status=status.HTTP_400_BAD_REQUEST\n            )\n\n        results = get_vendor_names([validated_mac])\n        return Response(results)\n\n    @staticmethod\n    def post(request):\n        if isinstance(request.data, list):\n            mac_addresses = request.data\n\n        # This adds support for requests via the browseable API\n        elif isinstance(request.data, QueryDict):\n            json_string = request.data.get('_content')\n            if not json_string:\n                return Response(\"Empty JSON body\", status=status.HTTP_400_BAD_REQUEST)\n            try:\n                mac_addresses = json.loads(json_string)\n            except json.JSONDecodeError:\n                return Response(\"Invalid JSON\", status=status.HTTP_400_BAD_REQUEST)\n            if not isinstance(mac_addresses, list):\n                return Response(\n                    \"Invalid request body. Must be a JSON array of MAC addresses\",\n                    status=status.HTTP_400_BAD_REQUEST,\n                )\n        else:\n            return Response(\n                \"Invalid request body. Must be a JSON array of MAC addresses\",\n                status=status.HTTP_400_BAD_REQUEST,\n            )\n\n        try:\n            validated_mac_addresses = validate_mac_addresses(mac_addresses)\n        except ValueError as e:\n            return Response(str(e), status=status.HTTP_400_BAD_REQUEST)\n\n        results = get_vendor_names(validated_mac_addresses)\n        return Response(results)\n\n\n@django.db.transaction.atomic\ndef get_vendor_names(mac_addresses: Sequence[MacAddress]) -> dict[str, str]:\n    \"\"\"Get vendor names for a sequence of MAC addresses.\n\n    :param mac_addresses: Sequence of MAC addresses in a valid format\n        (e.g., \"aa:bb:cc:dd:ee:ff\").\n    :return: A dictionary mapping MAC addresses to vendor names. If the vendor for a\n        given MAC address is not found, it will be omitted from the response.\n    \"\"\"\n    # Skip SQL query if no MAC addresses are provided\n    if not mac_addresses:\n        return {}\n\n    # Generate the VALUES part of the SQL query dynamically\n    values = \", \".join(f\"('{mac}'::macaddr)\" for mac in mac_addresses)\n\n    # Construct the full SQL query\n    query = f\"\"\"\n        SELECT mac, vendor\n        FROM (\n            VALUES\n                {values}\n        ) AS temp_macaddrs(mac)\n        INNER JOIN oui ON trunc(temp_macaddrs.mac) = oui.oui;\n    \"\"\"\n\n    cursor = django.db.connection.cursor()\n    cursor.execute(query)\n    rows = cursor.fetchall()\n    cursor.close()\n\n    # row[0] is mac address, row[1] is vendor name\n    return {str(row[0]): row[1] for row in rows}\n\n\ndef validate_mac_addresses(mac_addresses: Sequence[str]) -> list[MacAddress]:\n    \"\"\"Validates MAC addresses and returns them as MacAddress objects.\n\n    :param mac_addresses: MAC addresses as strings in a valid format\n        (e.g., \"aa:bb:cc:dd:ee:ff\").\n    :return: List of MacAddress objects.\n    :raises ValueError: If any MAC address is invalid.\n    \"\"\"\n    validated_macs = []\n    invalid_macs = []\n    for mac in mac_addresses:\n        try:\n            validated_macs.append(MacAddress(mac))\n        except ValueError:\n            invalid_macs.append(mac)\n    if invalid_macs:\n        raise ValueError(f\"Invalid MAC address(es): {', '.join(invalid_macs)}\")\n    return validated_macs\n\n\nclass NetboxEntityViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):\n    \"\"\"\n    A simple ViewSet for viewing NetboxEntities.\n\n    Filters\n    -------\n    - netbox\n    - physical_class\n\n    Example: `/api/netboxentity/?netbox=109&physical_class=3`\n    \"\"\"\n\n    queryset = manage.NetboxEntity.objects.all()\n    serializer_class = serializers.NetboxEntitySerializer\n    filterset_fields = ['netbox', 'physical_class']\n\n\nclass JWTRefreshViewSet(NAVAPIMixin, APIView):\n    \"\"\"\n    Accepts a valid refresh token.\n    Returns a new refresh token and an access token.\n    \"\"\"\n\n    permission_classes = []\n\n    def post(self, request):\n        if not LOCAL_JWT_IS_CONFIGURED:\n            return Response(\"Invalid token\", status=status.HTTP_403_FORBIDDEN)\n        # This adds support for requests via the browseable API.\n        # Browseble API sends QueryDict with _content key.\n        # Tests send QueryDict without _content key so it can be treated\n        # as a regular dict.\n        if isinstance(request.data, QueryDict) and '_content' in request.data:\n            json_string = request.data.get('_content')\n            if not json_string:\n                return Response(\"Empty JSON body\", status=status.HTTP_400_BAD_REQUEST)\n            try:\n                data = json.loads(json_string)\n            except json.JSONDecodeError:\n                return Response(\"Invalid JSON\", status=status.HTTP_400_BAD_REQUEST)\n            if not isinstance(data, dict):\n                return Response(\n                    \"Invalid request body. Must be a JSON dict\",\n                    status=status.HTTP_400_BAD_REQUEST,\n                )\n        elif isinstance(request.data, dict):\n            data = request.data\n        else:\n            return Response(\n                \"Invalid request body. Must be a JSON dict\",\n                status=status.HTTP_400_BAD_REQUEST,\n            )\n\n        incoming_token = data.get('refresh_token')\n        if incoming_token is None:\n            return Response(\"Missing token\", status=status.HTTP_400_BAD_REQUEST)\n        if not isinstance(incoming_token, str):\n            return Response(\"Invalid token\", status=status.HTTP_400_BAD_REQUEST)\n\n        token_hash = hash_token(incoming_token)\n        try:\n            # Hash must be in the database for the token to be valid\n            db_token = JWTRefreshToken.objects.get(hash=token_hash)\n        except JWTRefreshToken.DoesNotExist:\n            return Response(\"Invalid token\", status=status.HTTP_403_FORBIDDEN)\n\n        if db_token.revoked:\n            return Response(\n                \"This token has been revoked\", status=status.HTTP_403_FORBIDDEN\n            )\n\n        try:\n            claims = jwt.decode(\n                incoming_token,\n                JWT_PUBLIC_KEY,\n                audience=JWT_NAME,\n                issuer=JWT_NAME,\n                algorithms=[\"RS256\"],\n            )\n        except jwt.InvalidSignatureError:\n            return Response(\"Invalid signature\", status=status.HTTP_403_FORBIDDEN)\n        except jwt.InvalidAudienceError:\n            return Response(\"Invalid audience\", status=status.HTTP_403_FORBIDDEN)\n        except jwt.InvalidIssuerError:\n            return Response(\"Invalid issuer\", status=status.HTTP_403_FORBIDDEN)\n        except jwt.ExpiredSignatureError:\n            return Response(\"Token has expired\", status=status.HTTP_403_FORBIDDEN)\n        except jwt.ImmatureSignatureError:\n            return Response(\"Token is not yet active\", status=status.HTTP_403_FORBIDDEN)\n        # base exception for jwt.decode\n        except jwt.InvalidTokenError:\n            return Response(\"Invalid token\", status=status.HTTP_403_FORBIDDEN)\n\n        access_token = generate_access_token(claims)\n        refresh_token = generate_refresh_token(claims)\n\n        new_claims = decode_token(refresh_token)\n        new_hash = hash_token(refresh_token)\n        db_token.hash = new_hash\n        db_token.expires = datetime.fromtimestamp(new_claims['exp'])\n        db_token.activates = datetime.fromtimestamp(new_claims['nbf'])\n        db_token.last_used = datetime.now()\n        db_token.save()\n\n        response_data = {\n            'access_token': access_token,\n            'refresh_token': refresh_token,\n        }\n        return Response(response_data)\n\n\nclass MaintenanceTaskFilterSet(FilterSet):\n    \"\"\"Contains filter logic for maintenance tasks\"\"\"\n\n    current = BooleanFilter(method=\"filter_current\")\n    past = BooleanFilter(method=\"filter_past\")\n    future = BooleanFilter(method=\"filter_future\")\n    endless = BooleanFilter(method=\"filter_endless\")\n\n    class Meta:\n        model = msgmaint.MaintenanceTask\n        fields = ('id', 'description', 'author', 'state')\n\n    def filter_current(self, queryset, name, value):\n        current_tasks = queryset.current()\n        if value:\n            return current_tasks\n        else:\n            return queryset.difference(current_tasks)\n\n    def filter_past(self, queryset, name, value):\n        past_tasks = queryset.past()\n        if value:\n            return past_tasks\n        else:\n            return queryset.difference(past_tasks)\n\n    def filter_future(self, queryset, name, value):\n        future_tasks = queryset.future()\n        if value:\n            return future_tasks\n        else:\n            return queryset.difference(future_tasks)\n\n    def filter_endless(self, queryset, name, value):\n        endless_tasks = queryset.endless()\n        if value:\n            return endless_tasks\n        else:\n            return queryset.difference(endless_tasks)\n\n\nclass MaintenanceTaskViewSet(NAVAPIMixin, viewsets.ModelViewSet):\n    \"\"\"Lists all maintenance tasks.\n\n    Search\n    ------\n    Searches in *description*\n\n    Filters\n    -------\n    - id\n    - description\n    - author\n    - state (scheduled, active, passed, canceled)\n    - current\n    - past\n    - future\n    - endless\n    \"\"\"\n\n    queryset = msgmaint.MaintenanceTask.objects.prefetch_related(\n        \"maintenance_components\"\n    ).all()\n    serializer_class = serializers.ResponseMaintenanceTaskSerializer\n    filterset_class = MaintenanceTaskFilterSet\n    http_method_names = ['get', 'post', 'head', 'delete']\n    search_fields = ('description',)\n\n    def get_serializer_class(self):\n        if self.action in (\"list\", \"retrieve\"):\n            return serializers.ResponseMaintenanceTaskSerializer\n        return serializers.RequestMaintenanceTaskSerializer\n\n    def create(self, request):\n        write_serializer = self.get_serializer(data=request.data)\n        write_serializer.is_valid(raise_exception=True)\n        self.perform_create(write_serializer)\n\n        read_serializer = serializers.ResponseMaintenanceTaskSerializer(\n            write_serializer.instance\n        )\n        headers = self.get_success_headers(read_serializer.data)\n        return Response(\n            read_serializer.data, status=status.HTTP_201_CREATED, headers=headers\n        )\n"
  },
  {
    "path": "python/nav/web/api/v2/__init__.py",
    "content": "# API v2 package\n"
  },
  {
    "path": "python/nav/web/api/v2/urls.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Urlconf for the NAV REST API v2\"\"\"\n\nfrom rest_framework import routers\n\nfrom nav.auditlog import api as auditlogapi\n\nrouter = routers.SimpleRouter()\nrouter.register(r'auditlog', auditlogapi.LogEntryViewSetV2, basename='auditlog')\n\nurlpatterns = router.urls\n"
  },
  {
    "path": "python/nav/web/apps.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport sys\nfrom django.apps import AppConfig\n\n\nclass NAVWebAppConfig(AppConfig):\n    name = 'nav.web'\n    verbose_name = 'NAV Main web frontend application'\n\n    def ready(self):\n        if 'runserver' not in sys.argv:\n            return\n\n        # Initialize logging if running directly inside Django runserver,\n        # otherwise, the wsgi module will take care of it.\n        from nav.web import loginit\n\n        loginit()\n"
  },
  {
    "path": "python/nav/web/arnold/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/arnold/forms.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for Arnold\"\"\"\n\nfrom IPy import IP\nfrom django import forms\n\nfrom nav.util import is_valid_ip, is_valid_mac\nfrom nav.web.crispyforms import (\n    CheckBox,\n    FlatFieldset,\n    FormColumn,\n    FormDiv,\n    FormRow,\n    SubmitField,\n    set_flat_form_attributes,\n)\nfrom nav.models.arnold import (\n    DETENTION_TYPE_CHOICES,\n    STATUSES,\n    KEEP_CLOSED_CHOICES,\n    Justification,\n    QuarantineVlan,\n    DetentionProfile,\n)\n\n\nclass JustificationForm(forms.Form):\n    \"\"\"Form for adding a new justificaton\"\"\"\n\n    name = forms.CharField(label=\"Name\")\n    description = forms.CharField(label=\"Description\", required=False)\n    justificationid = forms.IntegerField(widget=forms.HiddenInput(), required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(JustificationForm, self).__init__(*args, **kwargs)\n\n        # Set correct helper text based on if this is an edit or add\n        submit_value = 'Add reason'\n        fieldset_legend = 'Add detention reason'\n        if self.initial.get('justificationid'):\n            submit_value = 'Save changes'\n            fieldset_legend = 'Edit detention reason'\n\n        self.attrs = set_flat_form_attributes(\n            form_action='arnold-justifications',\n            form_fields=[\n                FlatFieldset(\n                    fieldset_legend,\n                    fields=[self['name'], self['description'], self['justificationid']],\n                )\n            ],\n            submit_field=SubmitField(value=submit_value, css_classes='small'),\n        )\n\n\nclass QuarantineVlanForm(forms.Form):\n    \"\"\"Form for adding a new quarantine vlan\"\"\"\n\n    vlan = forms.IntegerField(label=\"Vlan\")\n    description = forms.CharField(label=\"Description\", required=False)\n    qid = forms.IntegerField(widget=forms.HiddenInput(), required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(QuarantineVlanForm, self).__init__(*args, **kwargs)\n\n        # Set correct helper text based on if this is an edit or add\n        submit_value = 'Add vlan'\n        fieldset_legend = 'Add quarantine vlan'\n        if self.initial.get('qid'):\n            submit_value = 'Save changes'\n            fieldset_legend = 'Edit vlan'\n\n        self.attrs = set_flat_form_attributes(\n            form_action='arnold-quarantinevlans',\n            form_fields=[\n                FlatFieldset(\n                    fieldset_legend,\n                    fields=[self['vlan'], self['description'], self['qid']],\n                )\n            ],\n            submit_field=SubmitField(value=submit_value, css_classes='small'),\n        )\n\n    def clean(self):\n        cleaned_data = super().clean()\n        if not cleaned_data[\"qid\"] and QuarantineVlan.objects.filter(\n            vlan=cleaned_data[\"vlan\"]\n        ):\n            raise forms.ValidationError(\"This vlan is already quarantined.\")\n        return cleaned_data\n\n\nclass HistorySearchForm(forms.Form):\n    \"\"\"Form for searching in history\"\"\"\n\n    days = forms.IntegerField(widget=forms.TextInput({'size': 3}))\n\n\nclass SearchForm(forms.Form):\n    \"\"\"Form for searching for detained computers\"\"\"\n\n    search_choices = [\n        ('ip', 'IP'),\n        ('mac', 'MAC'),\n        ('netbios', 'Netbios'),\n        ('dns', 'DNS'),\n    ]\n    status_choices = STATUSES + [('any', 'Any')]\n\n    searchtype = forms.ChoiceField(choices=search_choices, label='')\n    searchvalue = forms.CharField(required=True, label='')\n    status = forms.ChoiceField(choices=status_choices, label='Status')\n    days = forms.IntegerField(label='Days')\n\n    def __init__(self, *args, **kwargs):\n        super(SearchForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_class='custom',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['searchtype']], css_classes='medium-3'),\n                        FormColumn(\n                            fields=[self['searchvalue']], css_classes='medium-9'\n                        ),\n                    ],\n                    css_classes='collapse',\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['status']], css_classes='medium-6'),\n                        FormColumn(fields=[self['days']], css_classes='medium-6'),\n                    ],\n                ),\n            ],\n            submit_field=SubmitField(\n                name='search', value='Search', css_classes='small'\n            ),\n        )\n\n    def clean_searchvalue(self):\n        \"\"\"Clean whitespace from searchvalue\"\"\"\n        return self.cleaned_data['searchvalue'].strip()\n\n    def clean(self):\n        \"\"\"Validate on several fields\"\"\"\n        cleaned_data = self.cleaned_data\n        searchtype = cleaned_data.get('searchtype')\n        searchvalue = cleaned_data.get('searchvalue')\n\n        if searchvalue and searchtype == 'ip':\n            try:\n                IP(searchvalue)\n            except ValueError:\n                self._errors[\"searchvalue\"] = self.error_class(\n                    [\"IP-address or range is not valid\"]\n                )\n                del cleaned_data[\"searchvalue\"]\n\n        return cleaned_data\n\n\nclass DetentionProfileForm(forms.Form):\n    \"\"\"Form for creating a new detention profile\"\"\"\n\n    detention_id = forms.IntegerField(widget=forms.HiddenInput(), required=False)\n    detention_type = forms.ChoiceField(\n        choices=DETENTION_TYPE_CHOICES, initial=DETENTION_TYPE_CHOICES[0][0]\n    )\n    title = forms.CharField(label=\"Title\")\n    description = forms.CharField(\n        label=\"Description\", widget=forms.Textarea, required=False\n    )\n    justification = forms.ChoiceField(label=\"Reason\")\n    qvlan = forms.ChoiceField(label=\"Quarantinevlan\", required=False)\n    mail = forms.CharField(label=\"Path to mailfile\", required=False)\n    keep_closed = forms.ChoiceField(\n        label=\"Detention pursuit\",\n        choices=KEEP_CLOSED_CHOICES,\n        initial=KEEP_CLOSED_CHOICES[0][0],\n    )\n    exponential = forms.BooleanField(label=\"Exponential increase\", required=False)\n    duration = forms.IntegerField(label=\"Detention duration (days)\")\n    active_on_vlans = forms.CharField(label=\"Active on vlans\", required=False)\n    active = forms.BooleanField(label=\"Active\", required=False)\n\n    def clean(self):\n        cleaned_data = self.cleaned_data\n        detention_type = cleaned_data.get('detention_type')\n        qvlan = cleaned_data.get('qvlan')\n\n        # If method = quarantine and no quarantine vlan is set, throw error\n        if detention_type == DETENTION_TYPE_CHOICES[1][0] and not qvlan:\n            self._errors['qvlan'] = self.error_class(['This field is required'])\n            del cleaned_data['qvlan']\n\n        return cleaned_data\n\n    def __init__(self, *args, **kwargs):\n        super(DetentionProfileForm, self).__init__(*args, **kwargs)\n\n        self.fields['qvlan'].choices = get_quarantine_vlans()\n        did = self.data.get('detention_id') or self.initial.get('detention_id')\n        self.fields['justification'].choices = get_justifications(did)\n\n        self.attrs = set_flat_form_attributes(\n            form_class='profileDetentionForm custom',\n            form_fields=[\n                self['detention_id'],\n                self['title'],\n                self['description'],\n                FlatFieldset(\n                    'Obligatory',\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    [self['detention_type']], css_classes='medium-4'\n                                ),\n                                FormColumn(\n                                    [self['justification']], css_classes='medium-4'\n                                ),\n                                FormColumn([self['duration']], css_classes='medium-4'),\n                            ]\n                        ),\n                        FormDiv(fields=[self['qvlan']], css_classes='qvlanrow'),\n                    ],\n                    css_class='secondary',\n                ),\n                FlatFieldset(\n                    'Extra options',\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self['keep_closed']], css_classes='medium-4'\n                                ),\n                                FormColumn(\n                                    fields=[CheckBox(self['exponential'])],\n                                    css_classes='medium-4',\n                                ),\n                                FormDiv(css_classes='medium-4 columns'),\n                            ]\n                        ),\n                        self['mail'],\n                        self['active_on_vlans'],\n                    ],\n                    css_class='secondary',\n                ),\n                CheckBox(self['active']),\n            ],\n            submit_field=SubmitField(value='Save'),\n        )\n\n\nclass ManualDetentionTargetForm(forms.Form):\n    \"\"\"Form for step one of manual detention\"\"\"\n\n    target = forms.CharField(label=\"IP/MAC to detain\")\n\n    def __init__(self, *args, **kwargs):\n        super(ManualDetentionTargetForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_action='arnold-manual-detention',\n            form_fields=[self['target']],\n            submit_field=SubmitField(value='Find', css_classes='small'),\n        )\n\n    def clean_target(self):\n        \"\"\"Validate target\"\"\"\n        target = self.cleaned_data['target'].strip()\n        if not (is_valid_ip(target) or is_valid_mac(target)):\n            raise forms.ValidationError('Not a valid ip or mac-address')\n\n        return target\n\n\nclass ManualDetentionForm(forms.Form):\n    \"\"\"Form for executing a manual detention\n\n    NB: The camtuple is manually added to this form - see template\n        manualdetain-step2.html\n    \"\"\"\n\n    method = forms.ChoiceField(\n        label=\"Choose method\",\n        choices=DETENTION_TYPE_CHOICES,\n        initial=DETENTION_TYPE_CHOICES[0][0],\n    )\n    target = forms.CharField(label=\"IP/MAC to detain\", widget=forms.HiddenInput)\n    camtuple = forms.ChoiceField()\n    justification = forms.ChoiceField(label=\"Reason\")\n    qvlan = forms.ChoiceField(label=\"Quarantine vlan\", required=False)\n    comment = forms.CharField(label=\"Comment\", required=False)\n    days = forms.IntegerField(label=\"Days to wait before autoenabling\", required=False)\n\n    def clean(self):\n        cleaned_data = self.cleaned_data\n        method = cleaned_data.get('method')\n        qvlan = cleaned_data.get('qvlan')\n\n        # If method = quarantine and no quarantine vlan is set, throw error\n        if method == 'quarantine' and not qvlan:\n            self._errors['qvlan'] = self.error_class(['This field is required'])\n            del cleaned_data['qvlan']\n\n        return cleaned_data\n\n    def __init__(self, *args, **kwargs):\n        super(ManualDetentionForm, self).__init__(*args, **kwargs)\n        self.fields['justification'].choices = get_justifications()\n        self.fields['qvlan'].choices = get_quarantine_vlans()\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['target'],\n                self['method'],\n                FormDiv(\n                    fields=[self['qvlan']],\n                    css_classes='qvlanrow',\n                ),\n                self['justification'],\n                self['comment'],\n                self['days'],\n            ],\n            submit_field=SubmitField(value='Detain'),\n        )\n\n\ndef get_justifications(profileid=None):\n    \"\"\"Return list of justifications ready for use as choices in forms\n\n    Justifications used in detention profiles must not be listed. If\n    profileid is given, make sure the justification for that profile is added.\n\n    \"\"\"\n    if profileid:\n        detention_profiles = DetentionProfile.objects.exclude(id=profileid)\n    else:\n        detention_profiles = DetentionProfile.objects.all()\n\n    justifications = detention_profiles.values_list('justification')\n    return [('', '-- Select reason --')] + [\n        (j.id, j.name) for j in Justification.objects.exclude(id__in=justifications)\n    ]\n\n\ndef get_quarantine_vlans():\n    \"\"\"Return list of quarantine vlans ready for use as choices in form\"\"\"\n    return [('', '-- Select vlan --')] + [\n        (q.id, str(q)) for q in QuarantineVlan.objects.all()\n    ]\n"
  },
  {
    "path": "python/nav/web/arnold/urls.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Urlconfig for arnold\"\"\"\n\nfrom django.urls import path\nfrom nav.web.arnold import views\n\n\nurlpatterns = [\n    path(\"\", views.render_detained_ports, name=\"arnold_index\"),\n    path(\"history/\", views.render_history, name=\"arnold-history\"),\n    path(\"details/<int:did>\", views.render_details, name=\"arnold-details\"),\n    path(\"detainedports/\", views.render_detained_ports, name=\"arnold-detainedports\"),\n    path(\"search/\", views.render_search, name=\"arnold-search\"),\n    path(\n        \"manualdetention/\",\n        views.render_manual_detention_step_one,\n        name=\"arnold-manual-detention\",\n    ),\n    path(\n        \"manualdetention/<str:target>\",\n        views.render_manual_detention_step_two,\n        name=\"arnold-manual-detention-step-two\",\n    ),\n    path(\n        \"enable/<int:did>\",\n        views.choose_detentions,\n        name=\"arnold-choose-detentions\",\n    ),\n    path(\"doenable/\", views.lift_detentions, name=\"arnold-lift-detentions\"),\n    path(\n        \"predefined/\",\n        views.render_detention_profiles,\n        name=\"arnold-detention-profiles\",\n    ),\n    path(\n        \"predefined/add\",\n        views.render_edit_detention_profile,\n        name=\"arnold-detention-profile-add\",\n    ),\n    path(\n        \"predefined/edit/<int:did>\",\n        views.render_edit_detention_profile,\n        name=\"arnold-detention-profile-edit\",\n    ),\n    path(\"addreason/\", views.render_justifications, name=\"arnold-justifications\"),\n    path(\n        \"addreason/edit/<int:jid>\",\n        views.render_justifications,\n        name=\"arnold-justifications-edit\",\n    ),\n    path(\n        \"addreason/delete/<int:jid>\",\n        views.delete_justification,\n        name=\"arnold-justifications-delete\",\n    ),\n    path(\n        \"addquarantinevlan/\",\n        views.render_quarantine_vlans,\n        name=\"arnold-quarantinevlans\",\n    ),\n    path(\n        \"addquarantinevlan/edit/<int:qid>\",\n        views.render_quarantine_vlans,\n        name=\"arnold-quarantinevlans-edit\",\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/arnold/views.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Views for Arnold\"\"\"\n\nfrom datetime import datetime, timedelta\nimport logging\n\nfrom IPy import IP\nfrom django.shortcuts import render, redirect\nfrom django.db.models import Q\n\nfrom nav.arnold import (\n    open_port,\n    disable,\n    quarantine,\n    GeneralException,\n    find_id_information,\n    find_input_type,\n    check_target,\n)\nfrom nav.models.arnold import Identity, Justification, QuarantineVlan, DetentionProfile\nfrom nav.models.manage import Cam, Interface\nfrom nav.web.auth.utils import get_account\nfrom nav.web.arnold.forms import (\n    SearchForm,\n    HistorySearchForm,\n    JustificationForm,\n    ManualDetentionForm,\n    ManualDetentionTargetForm,\n    DetentionProfileForm,\n    QuarantineVlanForm,\n)\nfrom nav.web.utils import create_title\n\nNAVPATH = [('Home', '/'), ('Arnold', '/arnold')]\n\n_logger = logging.getLogger(__name__)\n\n\ndef create_context(path, context):\n    \"\"\"Create a dictionary for use in context based on path\"\"\"\n    navpath = NAVPATH + [(path,)]\n    path_context = {'navpath': navpath, 'title': create_title(navpath)}\n    path_context.update(context)\n    return path_context\n\n\ndef render_history(request):\n    \"\"\"Controller for rendering arnold history\"\"\"\n    days = 7\n    if 'days' in request.GET:\n        form = HistorySearchForm(request.GET)\n        if form.is_valid():\n            days = form.cleaned_data['days']\n\n    form = HistorySearchForm(initial={'days': days})\n\n    identities = Identity.objects.filter(\n        last_changed__gte=datetime.now() - timedelta(days=days)\n    )\n\n    return render(\n        request,\n        'arnold/history.html',\n        create_context(\n            'History',\n            {'active': {'history': True}, 'form': form, 'identities': identities},\n        ),\n    )\n\n\ndef render_detained_ports(request):\n    \"\"\"Controller for rendering detained ports\"\"\"\n    identities = Identity.objects.filter(Q(status='disabled') | Q(status='quarantined'))\n\n    return render(\n        request,\n        'arnold/detainedports.html',\n        create_context(\n            'Detentions', {'active': {'detentions': True}, 'identities': identities}\n        ),\n    )\n\n\ndef render_search(request):\n    \"\"\"Controller for rendering search\"\"\"\n    search_result = []\n    if request.method == 'POST':\n        form = SearchForm(request.POST)\n        if form.is_valid():\n            search_result = process_searchform(form)\n    else:\n        form = SearchForm(initial={'searchtype': 'ip', 'status': 'any', 'days': 7})\n\n    return render(\n        request,\n        'arnold/search.html',\n        create_context(\n            'Search',\n            {'form': form, 'search_result': search_result, 'active': {'search': True}},\n        ),\n    )\n\n\ndef process_searchform(form):\n    \"\"\"Get searchresults based on form data\"\"\"\n    extra = {}\n    kwargs = {\n        'last_changed__gte': datetime.now() - timedelta(days=form.cleaned_data['days'])\n    }\n\n    if form.cleaned_data['searchtype'] == 'ip':\n        ip = IP(form.cleaned_data['searchvalue'])\n        if ip.len() == 1:\n            kwargs['ip'] = str(ip)\n        else:\n            extra['where'] = [\"ip << '%s'\" % str(ip)]\n    else:\n        key = form.cleaned_data['searchtype'] + '__icontains'\n        kwargs[key] = form.cleaned_data['searchvalue']\n\n    if form.cleaned_data['status'] != 'any':\n        kwargs['status'] = form.cleaned_data['status']\n\n    return Identity.objects.filter(**kwargs).extra(**extra)\n\n\ndef render_justifications(request, jid=None):\n    \"\"\"Controller for rendering detention reasons\"\"\"\n    if request.method == 'POST':\n        form = JustificationForm(request.POST)\n        if form.is_valid():\n            process_justification_form(form)\n            return redirect('arnold-justifications')\n    elif jid:\n        justification = Justification.objects.get(pk=jid)\n        form = JustificationForm(\n            initial={\n                'justificationid': justification.id,\n                'name': justification.name,\n                'description': justification.description,\n            }\n        )\n    else:\n        form = JustificationForm()\n\n    justifications = Justification.objects.all()\n    for justification in justifications:\n        justification.deletable = is_deletable(justification)\n\n    return render(\n        request,\n        'arnold/justifications.html',\n        create_context(\n            'Justifications',\n            {\n                'active': {'justifications': True},\n                'form': form,\n                'justifications': justifications,\n            },\n        ),\n    )\n\n\ndef is_deletable(justification):\n    \"\"\"Determines if a justification is deletable\n\n    :param justification: The Justification to verify is deletable\n    :type justification: Justification\n\n    \"\"\"\n    is_in_detentionset = justification.detention_profiles.exists()\n    has_been_used = justification.identities.exists()\n\n    return not (has_been_used or is_in_detentionset)\n\n\ndef process_justification_form(form):\n    \"\"\"Add new justification based on form data\"\"\"\n    name = form.cleaned_data['name']\n    desc = form.cleaned_data['description']\n    justificationid = form.cleaned_data['justificationid']\n\n    if justificationid:\n        justification = Justification.objects.get(pk=justificationid)\n    else:\n        justification = Justification()\n\n    justification.name = name\n    justification.description = desc\n\n    justification.save()\n\n\ndef delete_justification(_request, jid):\n    \"\"\"Deletes a justification\"\"\"\n\n    try:\n        justification = Justification.objects.get(pk=jid)\n    except Justification.DoesNotExist:\n        # As this method is only called from ui on existing justifications\n        # this should not happen. Just redirect to list again\n        return redirect('arnold-justifications')\n    else:\n        justification.delete()\n\n    return redirect('arnold-justifications')\n\n\ndef render_manual_detention_step_one(request):\n    \"\"\"Controller for rendering manual detention\"\"\"\n    error = \"\"\n    if request.method == 'POST':\n        form = ManualDetentionTargetForm(request.POST)\n        if form.is_valid():\n            try:\n                check_target(form.cleaned_data['target'], trunk_ok=True)\n                return redirect(\n                    'arnold-manual-detention-step-two', form.cleaned_data['target']\n                )\n            except GeneralException as err:\n                error = err\n    else:\n        form = ManualDetentionTargetForm()\n\n    return render(\n        request,\n        'arnold/manualdetain.html',\n        create_context(\n            'Manual detention',\n            {'active': {'manualdetention': True}, 'form': form, 'error': error},\n        ),\n    )\n\n\ndef render_manual_detention_step_two(request, target):\n    \"\"\"Controller for rendering interface choices when manualy detaining\"\"\"\n\n    error = \"\"\n    candidates = find_id_information(target, 3, trunk_ok=True)\n    camtuple_choices = [(x.camid, humanize(x)) for x in candidates]\n\n    if request.method == 'POST':\n        form = ManualDetentionForm(request.POST)\n        form.fields['camtuple'].choices = camtuple_choices\n        if form.is_valid():\n            error = process_manual_detention_form(form, get_account(request))\n            if not error:\n                return redirect('arnold-detainedports')\n\n    else:\n        form = ManualDetentionForm(initial={'target': target})\n\n    return render(\n        request,\n        'arnold/manualdetain-step2.html',\n        create_context(\n            'Manual detention',\n            {\n                'active': {'manualdetention': True},\n                'target': target,\n                'candidates': candidates,\n                'form': form,\n                'now': datetime.now(),\n                'error': error,\n            },\n        ),\n    )\n\n\ndef humanize(candidate):\n    return '%s - %s' % (candidate.interface, get_last_seen(candidate.camid))\n\n\ndef get_last_seen(camid):\n    cam = Cam.objects.get(pk=camid)\n    if cam.end_time >= datetime.now():\n        return 'still active'\n    else:\n        return 'last seen %s' % cam.end_time.strftime('%Y-%m-%d %H:%M:%S')\n\n\ndef process_manual_detention_form(form, account):\n    \"\"\"Execute a manual detention based on form data\"\"\"\n    _logger.debug('process_manual_detention_form')\n\n    target = form.cleaned_data['target']\n    justification = Justification.objects.get(pk=form.cleaned_data['justification'])\n    username = account.login\n    comment = form.cleaned_data['comment']\n    days = form.cleaned_data['days']\n    camtuple = form.cleaned_data['camtuple']\n\n    cam = Cam.objects.get(pk=camtuple)\n    try:\n        interface = Interface.objects.get(netbox=cam.netbox, ifindex=cam.ifindex)\n    except Interface.DoesNotExist as error:\n        return error\n\n    identity = Identity()\n    identity.interface = interface\n    identity.mac = cam.mac\n    if find_input_type(target) == 'IP':\n        identity.ip = target\n\n    if form.cleaned_data['method'] == 'disable':\n        try:\n            disable(\n                identity, justification, username, comment=comment, autoenablestep=days\n            )\n        except Exception as error:  # noqa\n            return error\n    elif form.cleaned_data['method'] == 'quarantine':\n        qvlan = QuarantineVlan.objects.get(pk=form.cleaned_data['qvlan'])\n        try:\n            quarantine(\n                identity,\n                qvlan,\n                justification,\n                username,\n                comment=comment,\n                autoenablestep=days,\n            )\n        except Exception as error:  # noqa\n            return error\n\n\ndef choose_detentions(request, did):\n    \"\"\"Find all detentions for the mac-address in the given detention\"\"\"\n    detention = Identity.objects.get(pk=did)\n    detentions = Identity.objects.filter(\n        mac=detention.mac, status__in=['disabled', 'quarantined']\n    )\n\n    return render(\n        request,\n        'arnold/choose_detentions.html',\n        create_context('Enable', {'detentions': detentions}),\n    )\n\n\ndef lift_detentions(request):\n    \"\"\"Lift all detentions given in form\"\"\"\n    if request.method == 'POST':\n        account = get_account(request)\n        for detentionid in request.POST.getlist('detentions'):\n            identity = Identity.objects.get(pk=detentionid)\n            open_port(identity, account.login, 'Enabled from web')\n\n    return redirect('arnold-detainedports')\n\n\ndef render_detention_profiles(request):\n    \"\"\"Controller for rendering predefined detentions\"\"\"\n    profiles = DetentionProfile.objects.all()\n\n    for profile in profiles:\n        profile.active = True if profile.active == 'y' else False\n\n    return render(\n        request,\n        'arnold/detention_profiles.html',\n        create_context(\n            'Detention Profiles',\n            {'active': {'detentionprofiles': True}, 'profiles': profiles},\n        ),\n    )\n\n\ndef render_edit_detention_profile(request, did=None):\n    \"\"\"Controller for rendering edit of a detention profile\"\"\"\n    profile = None\n\n    if request.method == 'POST':\n        form = DetentionProfileForm(request.POST)\n        if form.is_valid():\n            process_detention_profile_form(form, get_account(request))\n            return redirect('arnold-detention-profiles')\n\n    elif did:\n        profile = DetentionProfile.objects.get(pk=did)\n\n        active = True if profile.active == 'y' else False\n        incremental = True if profile.incremental == 'y' else False\n        qid = profile.quarantine_vlan.id if profile.quarantine_vlan else None\n\n        form = DetentionProfileForm(\n            initial={\n                'detention_id': profile.id,\n                'detention_type': profile.detention_type,\n                'title': profile.name,\n                'description': profile.description,\n                'justification': profile.justification.id,\n                'mail': profile.mailfile,\n                'qvlan': qid,\n                'keep_closed': profile.keep_closed,\n                'exponential': incremental,\n                'duration': profile.duration,\n                'active_on_vlans': profile.active_on_vlans,\n                'active': active,\n            }\n        )\n    else:\n        form = DetentionProfileForm()\n\n    return render(\n        request,\n        'arnold/edit_detention_profile.html',\n        create_context('Detention Profile', {'form': form, 'profile': profile}),\n    )\n\n\ndef process_detention_profile_form(form, account):\n    \"\"\"Process add or edit of new form\"\"\"\n    did = form.cleaned_data['detention_id']\n    if did:\n        profile = DetentionProfile.objects.get(pk=did)\n    else:\n        profile = DetentionProfile()\n\n    profile.name = form.cleaned_data['title']\n    profile.description = form.cleaned_data['description']\n    profile.mailfile = form.cleaned_data['mail']\n    profile.justification = Justification.objects.get(\n        pk=form.cleaned_data['justification']\n    )\n    profile.keep_closed = form.cleaned_data['keep_closed']\n    profile.incremental = 'y' if form.cleaned_data['exponential'] else 'n'\n    profile.duration = form.cleaned_data['duration']\n    profile.active = 'y' if form.cleaned_data['active'] else 'n'\n    profile.last_edited = datetime.now()\n    profile.edited_by = account.login\n    profile.active_on_vlans = form.cleaned_data['active_on_vlans']\n    profile.detention_type = form.cleaned_data['detention_type']\n    if form.cleaned_data['qvlan']:\n        profile.quarantine_vlan = QuarantineVlan.objects.get(\n            pk=form.cleaned_data['qvlan']\n        )\n\n    profile.save()\n\n\ndef render_quarantine_vlans(request, qid=None):\n    \"\"\"Controller for rendering quarantine vlans\"\"\"\n    if request.method == 'POST':\n        form = QuarantineVlanForm(request.POST)\n        if form.is_valid():\n            process_quarantinevlan_form(form)\n            return redirect('arnold-quarantinevlans')\n    elif qid:\n        qvlan = QuarantineVlan.objects.get(pk=qid)\n        form = QuarantineVlanForm(\n            initial={\n                'qid': qvlan.id,\n                'vlan': qvlan.vlan,\n                'description': qvlan.description,\n            }\n        )\n    else:\n        form = QuarantineVlanForm()\n\n    qvlans = QuarantineVlan.objects.all()\n\n    return render(\n        request,\n        'arnold/quarantinevlans.html',\n        create_context(\n            'Quarantine Vlans',\n            {'active': {'quarantinevlans': True}, 'form': form, 'qvlans': qvlans},\n        ),\n    )\n\n\ndef process_quarantinevlan_form(form):\n    \"\"\"Add new quarantine vlan based on form data\"\"\"\n    vlan = form.cleaned_data['vlan']\n    desc = form.cleaned_data['description']\n    qid = form.cleaned_data['qid']\n\n    if qid:\n        qvlan = QuarantineVlan.objects.get(pk=qid)\n    else:\n        qvlan = QuarantineVlan()\n\n    qvlan.vlan = vlan\n    qvlan.description = desc\n\n    qvlan.save()\n\n\ndef render_details(request, did):\n    \"\"\"Controller for rendering details about an identity\"\"\"\n    identity = Identity.objects.get(pk=did)\n\n    error = ''\n    try:\n        identity.interface\n    except Interface.DoesNotExist:\n        error = \"Could not find interface, maybe switch is replaced?\"\n\n    return render(\n        request,\n        'arnold/details.html',\n        create_context('Details', {'identity': identity, 'error': error}),\n    )\n"
  },
  {
    "path": "python/nav/web/auth/__init__.py",
    "content": "# Copyright (C) 2010, 2011, 2013, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nContains web authentication and login functionality for NAV.\n\"\"\"\n\nimport logging\nfrom urllib import parse\n\nfrom django.http import HttpRequest\n\nfrom nav.django.defaults import LOGIN_URL\nfrom nav.web.auth import remote_user\n\n_logger = logging.getLogger(__name__)\n\n\n# This may seem like redundant information, but it seems django's reverse\n# will hang under some usages of these middleware classes - so until we figure\n# out what's going on, we'll hardcode this here.\n# LOGIN_URL = '/accounts/login/'\n# The local logout url, redirects to '/' after logout\n# If the entire site is protected via remote_user, this link must be outside\n# that protection!\nLOGOUT_URL = '/index/logout/'\n\n\ndef get_login_url(request: HttpRequest, path=None) -> str:\n    \"\"\"Calculate which login_url to use\"\"\"\n    if path is None:\n        path = parse.quote(request.get_full_path())\n    if path == \"/\":\n        default_new_url = LOGIN_URL\n    else:\n        default_new_url = '{0}?next={1}&noaccess'.format(LOGIN_URL, path)\n    remote_loginurl = remote_user.CONFIG.get_loginurl(request)\n    return remote_loginurl if remote_loginurl else default_new_url\n\n\ndef get_post_logout_redirect_url(request: HttpRequest) -> str:\n    default = \"/\"\n    redirect_url = remote_user.CONFIG.get_post_logout_redirect_url(request)\n    return redirect_url if redirect_url else default\n\n\ndef get_logout_url(request: HttpRequest) -> str:\n    \"\"\"Calculate which logout_url to use\"\"\"\n    remote_logouturl = remote_user.CONFIG.get_logouturl(request)\n    if remote_logouturl and remote_logouturl.endswith('='):\n        remote_logouturl += request.build_absolute_uri(LOGOUT_URL)\n    return remote_logouturl if remote_logouturl else LOGOUT_URL\n"
  },
  {
    "path": "python/nav/web/auth/allauth/__init__.py",
    "content": "import logging\n\nfrom nav.config.toml import TOMLConfigParser\n\n\n_logger = logging.getLogger(__name__)\n\n\n# See https://docs.allauth.org/en/latest/mfa/index.html for more docs\nclass MFAConfigParser(TOMLConfigParser):\n    \"\"\"Parse the \"multi-factor-authentication\" section of authentication.toml\"\"\"\n\n    SECTION = \"multi-factor-authentication\"\n    DEFAULT_CONFIG_FILE = \"webfront/authentication.toml\"\n    DEFAULT_CONFIG = {\n        SECTION: {\n            \"enabled\": False,\n            \"support-recovery-codes\": True,\n            \"support-passkeys\": False,\n            \"support-passkey-signups\": False,\n            \"allow-insecure-origin\": False,\n        }\n    }\n\n    def is_mfa_enabled(self):\n        return self[\"enabled\"]\n\n    def are_recovery_codes_enabled(self):\n        return self[\"support-recovery-codes\"]\n\n    def are_passkeys_enabled(self):\n        return self[\"support-passkeys\"]\n\n    def are_passkey_signups_enabled(self):\n        return self[\"support-passkey-signups\"]\n\n    def are_insecure_origins_allowed(self):\n        # Set to True when developing\n        return self[\"allow-insecure-origin\"]\n\n    def get_MFA_SUPPORTED_TYPES_setting(self):\n        methods = []\n        if self.is_mfa_enabled():\n            methods.append(\"totp\")\n            if self.are_recovery_codes_enabled():\n                methods.append(\"recovery_codes\")\n            if self.are_passkeys_enabled():\n                methods.append(\"passkeys\")\n        return methods\n\n    def get_MFA_PASSKEY_LOGIN_ENABLED_setting(self):\n        return self.is_mfa_enabled() and self.are_passkeys_enabled()\n\n    def get_MFA_PASSKEY_SIGNUP_ENABLED_setting(self):\n        return (\n            self.get_MFA_PASSKEY_LOGIN_ENABLED_setting()\n            and self.are_passkey_signups_enabled()\n        )\n\n    def get_MFA_WEBAUTHN_ALLOW_INSECURE_ORIGIN_setting(self):\n        return (\n            self.get_MFA_PASSKEY_LOGIN_ENABLED_setting()\n            and self.are_insecure_origins_allowed()\n        )\n\n    def log_config(self):\n        \"\"\"Log MFA settings\n\n        This should not happen during creation of Django settings,\n        leads to noise.\n        \"\"\"\n        methods = self.get_MFA_SUPPORTED_TYPES_setting(self) or None\n        _logger.info(\"Supported MFA authentication methods: %s\", methods)\n        passkeys = self.get_MFA_PASSKEY_LOGIN_ENABLED_setting()\n        _logger.info(\"Support login with passkeys (webauthn): %s\", passkeys)\n        if passkeys:\n            _logger.info(\n                \"Support signups with passkeys (webauthn): %s\",\n                self.get_MFA_PASSKEY_SIGNUP_ENABLED_setting(),\n            )\n            insecure_message = \"Support insecure origin for passkeys\"\n            if self.get_MFA_WEBAUTHN_ALLOW_INSECURE_ORIGIN_setting():\n                _logger.warn(f\"{insecure_message}: yes, this is a security risk!\")\n            else:\n                _logger.info(f\"{insecure_message}: no\")\n\n\nclass SocialProviderHelper:\n    \"\"\"Helper class for social account configs\n\n    Social account configs have a section inside a section structure that is\n    a list of providers*, allowing for configs that hold for all providers on\n    the SECTION.\n\n    [*] Aka. idps for OIDC\n    \"\"\"\n\n    _subkey: str\n\n    def get_providers(self) -> dict:\n        return self.get(self._subkey, {})\n\n    def get_provider_config(self, provider: str) -> dict:\n        providers = self.get_providers()\n        return providers.get(provider, {})\n\n    def _get_common_SOCIALACCOUNT_PROVIDERS_fields_for_provider(\n        self, provider_config: dict\n    ) -> dict:\n        # Do not alter the provider_config below\n        config = {}\n        settings = provider_config.get(\"settings\", {})\n        config[\"client_id\"] = provider_config[\"client_id\"]\n        config[\"secret\"] = provider_config[\"secret\"]\n        if settings:\n            config[\"settings\"] = settings\n        return config\n\n\nclass SocialConfigParser(SocialProviderHelper, TOMLConfigParser):\n    \"\"\"Parse the \"social\" section of authentication.toml\n\n    Example:\n\n    [social.providers.github]\n    module-path = allauth.socialaccount.providers.github\n    client_id = \"not.optional\"\n    secret = \"not.optional\"\n    scope = [\"user:email\"]  # optional, \"user\" scope is default for github\n                            # and includes \"user:email\"\n    \"\"\"\n\n    _subkey = \"providers\"\n    SECTION = \"social\"\n    DEFAULT_CONFIG_FILE = \"webfront/authentication.toml\"\n    DEFAULT_CONFIG = {\n        SECTION: {},\n    }\n\n    def translate_entry_for_provider(self, provider: str):\n        provider_config = self.get_provider_config(provider)\n        if not provider_config:\n            return {}\n        # Do not alter the provider_config below\n        config = {}\n        SCOPE = provider_config.get(\"scope\", [])\n        if SCOPE:\n            config[\"SCOPE\"] = SCOPE\n\n        APP = self._get_common_SOCIALACCOUNT_PROVIDERS_fields_for_provider(\n            provider_config\n        )\n        config[\"APP\"] = APP\n        return config\n\n    def translate_all_provider_configs(self):\n        configs = {}\n        for provider in self.get_providers().keys():\n            configs[provider] = self.translate_entry_for_provider(provider)\n        return configs\n\n    def generate_SOCIALACCOUNT_PROVIDERS(self):\n        configs = self.translate_all_provider_configs()\n        return configs\n\n    def get_provider_import_paths(self):\n        module_paths = []\n        missing_modules = []\n        for provider_id, provider_config in self.get_providers().values():\n            if \"module-path\" in provider_config:\n                module_paths.append(provider_config[\"module_path\"])\n            else:\n                missing_modules.append(provider_id)\n        if missing_modules:\n            _logger.error(\n                \"No module path configured for social account provider(s) %s\",\n                ', '.join(missing_modules),\n            )\n        return module_paths\n\n\nclass OIDCConfigParser(SocialProviderHelper, TOMLConfigParser):\n    \"\"\"Parse the \"oidc\" section of authentication.toml\n\n    Example:\n\n    [oidc]\n    module-path = \"allauth.socialccount.providers.openid_connect\"  # optional\n\n    [oidc.idps.dataporten]\n    provider = dataporten-oidc\"  # The name after the dot is used in the URLs\n    name = \"Feide OIDC\"  # Shown in login screen\n    client_id = \"not.optional\"\n    secret = \"not.optional\"\n    server_url = \"https://auth.dataporten.no/\"  # NEVER optional\n    Feide OIDC does not support the standard OIDC scopes/claims\n    scope = [\"userid-feide\"]  # Other idps have \"profile\" for this\n\n    [oidc.dataporten-oidc.settings]\n    uid_field = \"https://n.feide.no/claims/eduPersonPrincipalName\"\n    \"\"\"\n\n    _subkey = \"idps\"\n    _module_path = \"allauth.socialaccount.providers.openid_connect\"\n    SECTION = \"oidc\"\n    DEFAULT_CONFIG_FILE = \"webfront/authentication.toml\"\n    DEFAULT_CONFIG = {\n        SECTION: {},\n    }\n\n    def translate_entry_for_provider(self, provider: str) -> dict:\n        provider_config = self.get_provider_config(provider)\n        if not provider_config:\n            return {}\n        APP = self._get_common_SOCIALACCOUNT_PROVIDERS_fields_for_provider(\n            provider_config\n        )\n        APP[\"provider_id\"] = provider\n        APP[\"name\"] = provider_config[\"name\"]\n        APP.setdefault(\"settings\", {})\n        try:\n            APP[\"settings\"][\"server_url\"] = provider_config[\"server_url\"]\n        except KeyError:\n            raise KeyError('\"server_url\" is a mandatory setting')\n        provider_settings = provider_config.get(\"settings\", {})\n        APP[\"settings\"][\"uid_field\"] = provider_settings.get(\n            \"uid_field\",\n            \"sub\",\n        )\n        return APP\n\n    def translate_all_provider_configs(self):\n        configs = []\n        for provider in self.get_providers().keys():\n            configs.append(self.translate_entry_for_provider(provider))\n        return configs\n\n    def get_OAUTH_PKCE_ENABLED(self):\n        return self.get(\"oauth_pkce_enabled\", False)\n\n    def generate_SOCIALACCOUNT_PROVIDERS(self) -> dict:\n        configs = self.translate_all_provider_configs()\n        if configs:\n            return {\n                \"openid_connect\": {\n                    \"OAUTH_PKCE_ENABLED\": self.get_OAUTH_PKCE_ENABLED(),\n                    \"APPS\": configs,\n                },\n            }\n        return {}\n\n    def get_provider_import_paths(self):\n        return [self.get(\"module-path\", self._module_path)]\n"
  },
  {
    "path": "python/nav/web/auth/allauth/adapter.py",
    "content": "from django.conf import settings\n\nfrom allauth.account.adapter import DefaultAccountAdapter\nfrom allauth.account.adapter import get_adapter as get_account_adapter\nfrom allauth.mfa.adapter import DefaultMFAAdapter\nfrom allauth.socialaccount.adapter import DefaultSocialAccountAdapter\nfrom allauth.socialaccount import app_settings as socialaccount_app_settings\n\n\nclass NAVAccountAdapter(DefaultAccountAdapter):\n    def is_open_for_signup(self, request):\n        \"\"\"\n        Whether to allow sign ups with username/password\n        \"\"\"\n        allow_signups = super().is_open_for_signup(request)\n        # Override with setting, otherwise default to super.\n        return getattr(settings, \"ACCOUNT_ALLOW_SIGNUPS\", allow_signups)\n\n\nclass NAVSocialAccountAdapter(DefaultSocialAccountAdapter):\n    def is_open_for_signup(self, request, sociallogin):\n        \"\"\"\n        Whether to allow sign ups via social account\n        \"\"\"\n        if socialaccount_app_settings.AUTO_SIGNUP:\n            return True\n        return get_account_adapter(request).is_open_for_signup(request)\n\n\nclass NAVMFAAdapter(DefaultMFAAdapter):\n    def is_mfa_enabled(self, user, types=None) -> bool:\n        # NAV \"enabled = no\" -> MFA_SUPPORTED_TYPES = []\n        # allauth's default is [\"totp\", \"recovery_codes\"]\n        if getattr(settings, \"MFA_SUPPORTED_TYPES\", []) == []:\n            types = []\n        return super().is_mfa_enabled(user, types)\n"
  },
  {
    "path": "python/nav/web/auth/allauth/urls.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL configuration for allauth social account connections.\"\"\"\n\nfrom django.urls import path\n\nfrom nav.web.auth.allauth.views import NAVConnectionsView\n\nurlpatterns = [\n    path(\"\", NAVConnectionsView.as_view(), name=\"socialaccount_connections\"),\n]\n"
  },
  {
    "path": "python/nav/web/auth/allauth/views.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Views for the allauth social account integration.\"\"\"\n\nfrom allauth.socialaccount.views import ConnectionsView\n\n\nclass NAVConnectionsView(ConnectionsView):\n    \"\"\"Custom connections view that adds connected provider IDs to the context.\n\n    This allows the template to disable providers that the user has already\n    connected, preventing duplicate connections.\n    \"\"\"\n\n    def get_context_data(self, **kwargs):\n        context = super().get_context_data(**kwargs)\n        form = context[\"form\"]\n        context[\"connected_providers\"] = set(\n            form.accounts.values_list(\"provider\", flat=True)\n        )\n        return context\n"
  },
  {
    "path": "python/nav/web/auth/backends.py",
    "content": "import logging\n\nfrom django.contrib.auth.backends import RemoteUserBackend\n\nfrom nav.auditlog.models import LogEntry\nfrom nav.web.auth import remote_user\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass NAVRemoteUserBackend(RemoteUserBackend):\n    \"An adaptation of Django's RemoteUserBackend that is configurable the NAV way\"\n\n    def __init__(self):\n        self.create_unknown_user = remote_user.CONFIG.will_autocreate_user()\n\n    def authenticate(self, request, user):\n        if not remote_user.CONFIG.is_remote_user_enabled():\n            return None\n\n        user = super().authenticate(request, user)\n        return user\n\n    def clean_username(self, username):\n        return remote_user.CONFIG.clean_username(username)\n\n    def configure_user(self, request, user, created=True):\n        if created:\n            # for the sake of Account.locked\n            user.set_password(remote_user.fake_password(32))\n            user.ext_sync = 'REMOTE_USER'\n            user.save()\n\n            remote_user_varname = remote_user.CONFIG.get_remote_user_varname()\n            _logger.info(\n                \"Created user %s from header %s\",\n                user.get_username(),\n                remote_user_varname,\n            )\n            template = (\n                'Account \"{actor}\" created due to {remote_user_varname} HTTP header'\n            )\n            LogEntry.add_log_entry(\n                user, 'create-account', template=template, subsystem='auth'\n            )\n        return user\n\n    def user_can_authenticate(self, user):\n        active = super().user_can_authenticate(user)\n\n        if not active:\n            _logger.info(\"Locked user %s tried to log in\", user.get_username())\n            template = 'Account \"{actor}\" was prevented from logging in: blocked'\n            LogEntry.add_log_entry(\n                user, 'login-prevent', template=template, subsystem='auth'\n            )\n\n        return active\n"
  },
  {
    "path": "python/nav/web/auth/ldap.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2014, 2015, 2017, 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nContains low-level ldap authentication functionality for NAV web.\n\"\"\"\n\nimport logging\nfrom os.path import join\nfrom typing import Union, Optional\n\nfrom django.views.decorators.debug import sensitive_variables\n\nimport nav.errors\nfrom nav.config import NAVConfigParser\n\n_logger = logging.getLogger(__name__)\n\n\n# Set default config params and read rest from file\nclass LdapWebfrontConfigParser(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = [join('webfront', 'webfront.conf')]\n    DEFAULT_CONFIG = \"\"\"\n[ldap]\nenabled=no\nport=389\nencryption=none\nuid_attr=uid\nname_attr=cn\nrequire_group=\ntimeout=2\ndebug=no\nlookupmethod=direct\nsuffix=\nmanager=\nmanager_password=\ngroup_search=(member=%%s)\nrequire_entitlement=\nadmin_entitlement=\nentitlement_attribute=eduPersonEntitlement\nencoding=utf-8\n\"\"\"\n\n\n_config = LdapWebfrontConfigParser()\n\ntry:\n    import ldap\nexcept ImportError as err:\n    available = 0\n    ldap = None\n    _logger.warning(\"Python LDAP module is not available (%s) \", err)\nelse:\n    # Determine whether the config file enables ldap functionality or not\n    available = _config.getboolean('ldap', 'enabled')\n    from ldap.filter import escape_filter_chars\n\n\n#\n# Function definitions\n#\n\n\ndef open_ldap() -> \"ldap.ldapobject.LDAPObject\":\n    \"\"\"\n    Returns a freshly made LDAP object, according to the settings\n    configured in webfront.conf.\n    \"\"\"\n    # Get config settings\n    server = _config.get('ldap', 'server')\n    port = _config.getint('ldap', 'port')\n    encryption = _config.get('ldap', 'encryption').lower()\n    timeout = _config.getfloat('ldap', 'timeout')\n    # Revert to no encryption if none of the valid settings are found\n    if encryption not in ('ssl', 'tls', 'none'):\n        _logger.warning(\n            'Unknown encryption setting %r in config file, using no encryption instead',\n            _config.get('ldap', 'encryption'),\n        )\n        encryption = 'none'\n\n    # Debug tracing from python-ldap/openldap to stderr\n    if _config.getboolean('ldap', 'debug'):\n        ldap.set_option(ldap.OPT_DEBUG_LEVEL, 255)\n\n    scheme = 'ldaps' if encryption == 'ssl' else 'ldap'\n    uri = '%s://%s:%s' % (scheme, server, port)\n    lconn = ldap.initialize(uri, bytes_mode=False)\n    lconn.timeout = timeout\n    lconn.set_option(ldap.OPT_REFERRALS, 0)\n\n    # Use STARTTLS if enabled, then fail miserably if the server\n    # does not support it\n    if encryption == 'tls':\n        _logger.debug(\"Using STARTTLS for ldap connection\")\n        try:\n            lconn.start_tls_s()\n        except ldap.PROTOCOL_ERROR:\n            _logger.error(\n                'LDAP server %s does not support the STARTTLS extension.  Aborting.',\n                server,\n            )\n            raise NoStartTlsError(server)\n        except (ldap.SERVER_DOWN, ldap.CONNECT_ERROR):\n            _logger.exception(\"LDAP server is down\")\n            raise NoAnswerError(server)\n\n    return lconn\n\n\n@sensitive_variables('password')\ndef authenticate(login: str, password: str) -> Union[\"LDAPUser\", bool]:\n    \"\"\"\n    Attempt to authenticate the login name with password against the\n    configured LDAP server.  If the user is authenticated, required\n    group memberships are also verified.\n    \"\"\"\n    lconn = open_ldap()\n    server = _config.get('ldap', 'server')\n    user = LDAPUser(login, lconn)\n    # Bind to user using the supplied password\n    try:\n        user.bind(password)\n    except (ldap.SERVER_DOWN, ldap.CONNECT_ERROR):\n        _logger.exception(\"LDAP server is down\")\n        raise NoAnswerError(server)\n    except ldap.INVALID_CREDENTIALS:\n        _logger.warning(\n            \"Server %s reported invalid credentials for user %s\", server, login\n        )\n        return False\n    except ldap.TIMEOUT as error:\n        _logger.error(\"Timed out waiting for LDAP bind operation\")\n        raise TimeoutError(error)\n    except ldap.LDAPError:\n        _logger.exception(\n            \"An LDAP error occurred when authenticating user %s against server %s\",\n            login,\n            server,\n        )\n        return False\n    except UserNotFound:\n        _logger.exception(\n            \"Username %s was not found in the LDAP catalog %s\", login, server\n        )\n        return False\n\n    _logger.debug(\"LDAP authenticated user %s\", login)\n\n    # If successful so far, verify required group memberships before\n    # the final verdict is made\n    group_dn = _config.get('ldap', 'require_group')\n    if group_dn:\n        try:\n            is_member = user.is_group_member(group_dn)\n        except UserNotFound:\n            _logger.warning(\n                \"Could not find %s in LDAP catalog while verifying group membership\",\n                login,\n            )\n            return False\n        if is_member:\n            _logger.info(\"%s is verified to be a member of %s\", login, group_dn)\n            return user\n        else:\n            _logger.warning(\"Could NOT verify %s as a member of %s\", login, group_dn)\n            return False\n\n    # If successful so far, verify required entitlements before the final verdict\n    # is made\n    require_entitlement = _config.get('ldap', 'require_entitlement')\n    if require_entitlement:\n        if user.has_entitlement(require_entitlement):\n            _logger.info(\n                \"%s is verified to be entitled to %s\", login, require_entitlement\n            )\n            return user\n        else:\n            _logger.warning(\n                \"Could NOT verify %s as entitled to %s\", login, require_entitlement\n            )\n            return False\n\n    # If no group matching was needed, we are already authenticated,\n    # so return that.\n    return user\n\n\nclass LDAPUser(object):\n    \"\"\"A user found or to find in an LDAP catalog.\n\n    Given a username and an LDAP connection object, objects of this class can\n    be used to search for a user in an LDAP directory, or to construct the\n    user object's Distinguished Name from rules established in the\n    webfront.conf config file.\n\n    \"\"\"\n\n    def __init__(self, username: str, ldap_conn: \"ldap.ldapobject.LDAPObject\"):\n        self.username = username\n        self.ldap = ldap_conn\n        self.user_dn = None\n\n    @sensitive_variables('password')\n    def bind(self, password: str) -> None:\n        \"\"\"Performs an authenticated bind for this user using password\"\"\"\n        suffix = _config.get('ldap', 'suffix')\n\n        if not suffix:\n            user_dn = self.get_user_dn()\n            _logger.debug(\"Attempting authenticated bind to %s\", user_dn)\n\n            self.ldap.simple_bind_s(user_dn, password)\n        if suffix:\n            _logger.debug(\n                \"Attempting authenticated bind as user %s\", self.username + suffix\n            )\n\n            self.ldap.simple_bind_s(self.username + suffix, password)\n\n    def get_user_dn(self) -> str:\n        \"\"\"\n        Given a user id (login name), return a fully qualified DN to\n        identify this user, using the configured settings from\n        webfront.conf.\n        \"\"\"\n        if self.user_dn:\n            return self.user_dn\n        method = _config.get('ldap', 'lookupmethod')\n        if method not in ('direct', 'search'):\n            raise LDAPConfigError(\n                'method must be \"direct\" or \"search\", not %s' % method\n            )\n\n        if method == 'direct':\n            self.user_dn = self.construct_dn()\n        if method == 'search':\n            self.user_dn, self.username = self.search_dn()\n        return self.user_dn\n\n    def construct_dn(self) -> str:\n        \"\"\"Constructs and returns a Distinguished Name for this user.\n\n        The DN is constructed using the pattern configured in webfront.conf.\n\n        \"\"\"\n        uid_attr = _config.get('ldap', 'uid_attr')\n        basedn = _config.get('ldap', 'basedn')\n        user_dn = '%s=%s,%s' % (uid_attr, self.username, basedn)\n        return user_dn\n\n    @sensitive_variables('manager_password')\n    def search_dn(self) -> tuple[str, str]:\n        \"\"\"Searches for the user's Distinguished Name in the LDAP directory.\n\n        :returns: A tuple of (dn, canonical_username)\n        \"\"\"\n        uid_attr = escape_filter_chars(_config.get('ldap', 'uid_attr'))\n        encoding = _config.get('ldap', 'encoding')\n        manager = _config.get('ldap', 'manager')\n        manager_password = _config.get('ldap', 'manager_password', raw=True)\n        if manager:\n            _logger.debug(\"Attempting authenticated bind as manager to %s\", manager)\n            self.ldap.simple_bind_s(manager, manager_password)\n        filter_ = \"(%s=%s)\" % (uid_attr, escape_filter_chars(self.username))\n        result = self.ldap.search_s(\n            _config.get('ldap', 'basedn'), ldap.SCOPE_SUBTREE, filter_\n        )\n        if not result or not result[0] or not result[0][0]:\n            raise UserNotFound(filter_)\n\n        user_dn, attrs = result[0]\n        if uid_attr in attrs:\n            uid = attrs[uid_attr][0].decode(encoding)\n        else:\n            uid = self.username\n        return user_dn, uid\n\n    def get_real_name(self) -> Optional[str]:\n        \"\"\"\n        Attempt to retrieve the LDAP Common Name of the given login name.\n        \"\"\"\n        encoding = _config.get('ldap', 'encoding')\n        user_dn = self.get_user_dn()\n        name_attr = _config.get('ldap', 'name_attr')\n        try:\n            res = self.ldap.search_s(\n                user_dn, ldap.SCOPE_BASE, '(objectClass=*)', [name_attr]\n            )\n        except ldap.LDAPError:\n            _logger.exception(\n                \"Caught exception while retrieving user name \"\n                \"from LDAP, returning None as name\"\n            )\n            return None\n\n        # Just look at the first result record, since we are searching for\n        # a specific user\n        record = res[0][1]\n        name = record[name_attr][0]\n        return name.decode(encoding)\n\n    def is_group_member(self, group_dn: str) -> bool:\n        \"\"\"\n        Verify that uid is a member in the group object identified by\n        group_dn, using the pre-initialized ldap object l.\n\n        The full user DN will be attempted matched against the member\n        attribute of the group object.  If no match is found, the user uid\n        will be attempted matched against the memberUid attribute.  The\n        former should work well for groupOfNames and groupOfUniqueNames\n        objects, the latter should work for posixGroup objects.\n        \"\"\"\n        group_search = _config.get('ldap', 'group_search')\n        user_dn = self.get_user_dn()\n        # Match groupOfNames/groupOfUniqueNames objects\n        try:\n            filterstr = group_search % escape_filter_chars(user_dn)\n            result = self.ldap.search_s(group_dn, ldap.SCOPE_BASE, filterstr)\n            _logger.debug(\"groupOfNames results: %s\", result)\n            if not result:\n                # If no match, match posixGroup objects\n                filterstr = '(memberUid=%s)' % escape_filter_chars(self.username)\n                result = self.ldap.search_s(group_dn, ldap.SCOPE_BASE, filterstr)\n                _logger.debug(\"posixGroup results: %s\", result)\n            return len(result) > 0\n        except ldap.TIMEOUT as error:\n            _logger.error(\"Timed out while verifying group memberships\")\n            raise TimeoutError(error)\n\n    def get_entitlements(self) -> list[str]:\n        \"\"\"Returns a list of entitlements this user has\"\"\"\n        encoding = _config.get('ldap', 'encoding')\n        entitlement_attribute = _config.get('ldap', 'entitlement_attribute')\n        user_dn = self.get_user_dn()\n        filterstr = '({}=*)'.format(escape_filter_chars(entitlement_attribute))\n\n        try:\n            result = self.ldap.search_s(\n                user_dn,\n                ldap.SCOPE_BASE,\n                filterstr=filterstr,\n                attrlist=[entitlement_attribute],\n            )\n        except ldap.TIMEOUT as error:\n            _logger.error(\"Timed out while fetching user entitlements\")\n            raise TimeoutError(error)\n\n        _logger.debug(\"entitlement result: %s\", result)\n        if result:\n            dn, attrs = result[0]\n            if dn == user_dn and entitlement_attribute in attrs:\n                return [ent.decode(encoding) for ent in attrs[entitlement_attribute]]\n\n        return []\n\n    def has_entitlement(self, entitlement: str) -> bool:\n        \"\"\"Verifies whether the user has a specific entitlement\"\"\"\n        return entitlement in self.get_entitlements()\n\n    def is_admin(self) -> Optional[bool]:\n        \"\"\"Verifies whether the user should have administrator privileges.\n\n        :returns: True if the user should be an administrator, False if not. If no admin\n        entitlement is configured, None is returned, as we cannot make such a decision.\n\n        \"\"\"\n        admin_entitlement = _config.get('ldap', 'admin_entitlement')\n        if admin_entitlement:\n            return self.has_entitlement(admin_entitlement)\n\n\n#\n# Exception classes\n#\nclass Error(nav.errors.GeneralException):\n    \"\"\"General LDAP error\"\"\"\n\n\nclass NoAnswerError(Error):\n    \"\"\"No answer from the LDAP server\"\"\"\n\n\nclass TimeoutError(NoAnswerError):\n    \"\"\"Timed out waiting for LDAP reply\"\"\"\n\n\nclass NoStartTlsError(Error):\n    \"\"\"The LDAP server does not support the STARTTLS extension\"\"\"\n\n\nclass LDAPConfigError(Error):\n    \"\"\"The LDAP configuration is invalid\"\"\"\n\n\nclass UserNotFound(Error):\n    \"\"\"User object was not found\"\"\"\n\n\ndef __test():\n    \"\"\"\n    Test user login if module is run as script on command line.\n    \"\"\"\n    from getpass import getpass\n\n    logging.basicConfig()\n    logging.getLogger('').setLevel(logging.DEBUG)\n\n    uid = input(\"Username: \").strip()\n    password = getpass('Password: ')\n\n    user = authenticate(uid, password)\n\n    if user:\n        print(\"User was authenticated.\")\n        print(\"User's username is %s\" % user.username)\n        print(\"User's full name is %s\" % user.get_real_name())\n    else:\n        print(\"User was not authenticated\")\n\n\nif __name__ == '__main__':\n    __test()\n"
  },
  {
    "path": "python/nav/web/auth/ldap_auth_backend.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nLDAP authentication backend for Django's authentication framework, supporting the\nspecific legacy quirks of LDAP authentication in NAV.\n\"\"\"\n\nimport logging\nfrom typing import TYPE_CHECKING, Optional\n\nfrom django.contrib.auth.backends import ModelBackend\nfrom django.core.exceptions import PermissionDenied\nfrom django.http import HttpRequest\nfrom django.views.decorators.debug import sensitive_variables\n\nfrom nav.models.profiles import Account, AccountGroup\nfrom nav.web.auth import ldap\n\nif TYPE_CHECKING:\n    from nav.web.auth.ldap import LDAPUser\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass LdapBackend(ModelBackend):\n    \"\"\"\n    Authenticates against NAV's LDAP module.\n\n    This backend needs to be listed before `django.contrib.auth.backends.ModelBackend`\n    in the `AUTHENTICATION_BACKENDS` setting in order for LDAP-based login flow to\n    function correctly.\n\n    Part of the workflow is to hash and store the last know good LDAP password in the\n    local NAV account.  If the LDAP server becomes unresponsive, the authentication\n    flow will fall back to allowing a returning user to login using their last know good\n    password.  A potential weakness of this approach is that disabled/removed users\n    may be able to log in to NAV during an LDAP outage if the NAV admin has not\n    explicitly removed their local NAV accounts.\n    \"\"\"\n\n    @sensitive_variables('password')\n    def authenticate(\n        self,\n        request: Optional[HttpRequest] = None,\n        username: Optional[str] = None,\n        password: Optional[str] = None,\n        **kwargs,\n    ) -> Optional[Account]:\n        if not ldap.available:\n            return None\n        if username is None or password is None:\n            return None\n\n        if nav_user := Account.objects.filter(login=username).first():\n            if not self._is_an_ldap_synced_user(nav_user):\n                return None\n\n        if not (ldap_user := self._ldap_authenticate(username, password)):\n            # If we got here without PermissionDenied being raised, then LDAP did\n            # not respond, so we fall back to other backends\n            return None\n\n        if not nav_user:\n            nav_user = self._create_nav_account(ldap_user, password)\n        elif not nav_user.is_active:\n            # Don't let deactivated users log in\n            raise PermissionDenied\n\n        self._sync_nav_account(ldap_user, nav_user, password)\n        return nav_user\n\n    @staticmethod\n    def _is_an_ldap_synced_user(nav_user: Account) -> bool:\n        \"\"\"Determines whether the given NAV account is an LDAP-synced user.\"\"\"\n        return nav_user.ext_sync == 'ldap'\n\n    @staticmethod\n    @sensitive_variables('password')\n    def _ldap_authenticate(username: str, password: str) -> Optional[\"LDAPUser\"]:\n        \"\"\"Attempts to authenticate the user against LDAP, logging errors\"\"\"\n        try:\n            ldap_user = ldap.authenticate(username, password)\n        except ldap.NoAnswerError:\n            # There is no way to communicate to the user that the LDAP server isn't\n            # responding in the case where this is the user's first login to NAV.\n            # XXX: Maybe find a way to add this somehow?\n            _logger.error(\"LDAP server not responding, falling back to local auth\")\n            return None\n        else:\n            if not ldap_user:\n                raise PermissionDenied\n            return ldap_user\n\n    @staticmethod\n    @sensitive_variables('password')\n    def _create_nav_account(ldap_user: \"LDAPUser\", password: str) -> Account:\n        \"\"\"Creates a new local NAV account based on LDAP user details.\"\"\"\n        nav_account = Account(\n            login=ldap_user.username, name=ldap_user.get_real_name(), ext_sync='ldap'\n        )\n        # We need to set a password right away to ensure the account is considered\n        # active before the login process moves on:\n        nav_account.set_password(password)\n        nav_account.save()\n        return nav_account\n\n    @classmethod\n    @sensitive_variables('password')\n    def _sync_nav_account(\n        cls, ldap_user: \"LDAPUser\", nav_user: Account, password: str\n    ) -> None:\n        \"\"\"Ensures the necessary local account details are synced from LDAP user\n        details.\n        \"\"\"\n        nav_user.set_password(password)\n        nav_user.save()\n        cls._sync_nav_account_admin_privileges_from_ldap(ldap_user, nav_user)\n\n    @staticmethod\n    def _sync_nav_account_admin_privileges_from_ldap(\n        ldap_user: \"LDAPUser\", nav_account: Account\n    ) -> None:\n        \"\"\"Synchronizes the admin privileges of a given NAV account based on LDAP\n        configuration parameters and the LDAP user object entitlements.\n        \"\"\"\n        is_admin = ldap_user.is_admin()\n        # Only modify admin status if an entitlement is configured in webfront.conf\n        if is_admin is not None:\n            admin_group = AccountGroup.objects.get(id=AccountGroup.ADMIN_GROUP)\n            if is_admin:\n                nav_account.groups.add(admin_group)\n            else:\n                nav_account.groups.remove(admin_group)\n"
  },
  {
    "path": "python/nav/web/auth/middleware.py",
    "content": "# Copyright (C) 2010, 2011, 2013, 2019 Uninett AS\n# Copyright (C) 2022, 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nDjango middleware for handling login, authentication and authorization for NAV.\n\"\"\"\n\nimport logging\nfrom typing import Optional\n\nfrom django.contrib.auth.middleware import RemoteUserMiddleware\nfrom django.contrib.auth.models import AnonymousUser\nfrom django.core.exceptions import ImproperlyConfigured\nfrom django.http import HttpResponse, HttpRequest\nfrom django.utils.deprecation import MiddlewareMixin\n\nfrom nav.web.auth import remote_user\nfrom nav.web.auth.utils import (\n    authorize_request,\n    default_account,\n    ensure_account,\n    get_account,\n    redirect_to_login,\n)\nfrom nav.web.auth.sudo import get_sudoer\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass AuthorizationMiddleware(MiddlewareMixin):\n    \"Authorize user the NAV way\"\n\n    def process_view(\n        self, request: HttpRequest, view_func, view_args, view_kwargs\n    ) -> Optional[HttpResponse]:\n        # support the LoginRequiredMiddleware defined in Django 5.1\n        explicit_login_required = getattr(view_func, \"login_required\", True)\n        if explicit_login_required:\n            authorized = authorize_request(request)\n            if not authorized:\n                return redirect_to_login(request)\n        return None\n\n\nclass NAVRemoteUserMiddleware(RemoteUserMiddleware):\n    \"Adapt Django's RemoteUserMiddleware to NAV's settings\"\n\n    _logger = logging.getLogger(f'{__name__}.NAVRemoteUserMiddleware')\n\n    def __init__(self, get_response):\n        self.header = remote_user.CONFIG.get_remote_user_varname()\n        self.force_logout_if_no_header = (\n            remote_user.CONFIG.will_force_logout_if_no_header()\n        )\n        super().__init__(get_response)\n\n    def process_request(self, request):\n        if not hasattr(request, \"user\"):\n            raise ImproperlyConfigured(\n                \"The NAV Django authentication middlewares requires Django's \"\n                \"auth middleware to be installed. Edit your MIDDLEWARE setting \"\n                \"to insert \"\n                \"'django.contrib.auth.middleware.AuthenticationMiddleware' \"\n                \"before 'nav.web.auth.middleware.NAVRemoteUserMiddleware'.\"\n            )\n\n        if not remote_user.CONFIG.is_remote_user_enabled():\n            self._logger.debug(\n                'NAVRemoteUserMiddleware is skipped, turned off in NAV settings',\n            )\n            return None\n\n        path = request.get_full_path()\n        existing_user = request.user\n        self._logger.debug(\n            'ENTER (session: %s, account: %s) from \"%s\"',\n            dict(request.session),\n            existing_user,\n            path,\n        )\n\n        self._logger.debug(\n            'request.META[\"REMOTE_USER\"]: \"%s\"',\n            request.META.get(\"REMOTE_USER\", \"NOT SET\"),\n        )\n        next = super().process_request(request)\n        remote_userobj = get_account(request)\n        self._logger.debug(\n            'REMOTE_USER: \"%s\" from \"%s\"',\n            remote_userobj.get_username(),\n            path,\n        )\n        self._logger.debug('NEXT %s', next)\n        self._logger.debug(\n            'EXIT (session: %s, account: %s) from \"%s\"',\n            dict(request.session),\n            remote_userobj.get_username(),\n            path,\n        )\n        return next\n\n\nclass NAVAuthenticationMiddleware(MiddlewareMixin):\n    \"\"\"Use NAV's AnonymousUser and handle sudo\n\n    Designed to run after AuthenticationMiddleware and NAVRemoteUserMiddleware\n    \"\"\"\n\n    _logger = logging.getLogger(f\"{__name__}.NAVAuthenticationMiddleware\")\n\n    def process_request(self, request: HttpRequest) -> None:\n        if not hasattr(request, \"user\"):\n            raise ImproperlyConfigured(\n                \"The NAV Django authentication middlewares requires Django's \"\n                \"auth middleware to be installed. Edit your MIDDLEWARE setting \"\n                \"to insert \"\n                \"'django.contrib.auth.middleware.AuthenticationMiddleware' \"\n                \"before 'nav.web.auth.middleware.NAVAuthenticationMiddleware'.\"\n            )\n\n        account = request.user\n        self._logger.debug(\n            'ENTER (session: %s, account: %s) from \"%s\"',\n            dict(request.session),\n            account,\n            request.get_full_path(),\n        )\n\n        # Ensure user is set correctly\n        ensure_account(request)\n        self._logger.debug(\n            'Account ensured: (session: %s, account: %s) from \"%s\"',\n            dict(request.session),\n            request.user,\n            request.get_full_path(),\n        )\n\n        # Set sudo\n        sudo_operator = get_sudoer(request)  # Account or None\n\n        if sudo_operator is not None:\n            if isinstance(request.user, AnonymousUser):\n                account = default_account()\n                request.user = account\n            # XXX: sudo: Account.sudo_operator should be set by function!\n            request.user.sudo_operator = sudo_operator\n            request.account = request.user\n            self._logger.debug(\n                'SUDO! \"%s\" acting as \"%s\"',\n                sudo_operator.get_username(),\n                account.get_username(),\n            )\n        else:\n            self._logger.debug('No sudo')\n\n        self._logger.debug(\n            'EXIT (session: %s, account: %s) from \"%s\"',\n            dict(request.session),\n            request.user,\n            request.get_full_path(),\n        )\n"
  },
  {
    "path": "python/nav/web/auth/remote_user.py",
    "content": "# Copyright (C) 2010, 2011, 2013, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nSupport logging in by having the web server set the REMOTE_USER header.\n\"\"\"\n\nimport logging\nfrom configparser import NoOptionError\nfrom os.path import join\nimport secrets\n\nfrom nav.config import NAVConfigParser\n\n\n__all__ = []\n\n\nclass RemoteUserConfigParser(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = [join('webfront', 'webfront.conf')]\n    DEFAULT_CONFIG = \"\"\"\n[remote-user]\nenabled=no\nlogin-url=\nlogout-url=\nvarname=REMOTE_USER\nworkaround=none\nautocreate=off\npost-logout-redirect-url=/\nforce_logout_if_no_header=yes\n\"\"\"\n\n    def get_remote_user_varname(self):\n        varname = 'REMOTE_USER'\n        try:\n            varname = self.get('remote-user', 'varname')\n        except ValueError:\n            pass\n        return varname\n\n    def will_autocreate_user(self):\n        return self.getboolean('remote-user', 'autocreate', fallback=False)\n\n    def is_remote_user_enabled(self):\n        return self.getboolean('remote-user', 'enabled', fallback=False)\n\n    def will_force_logout_if_no_header(self):\n        return self.getboolean(\n            'remote-user', 'force_logout_if_no_header', fallback=True\n        )\n\n    def get_loginurl(self, request):\n        \"\"\"Return a url (if set) to log in to/via a remote service\n\n        :return: Either a string with an url, or None.\n        :rtype: str, None\n        \"\"\"\n        return self.get_remote_url(request, 'login-url')\n\n    def get_logouturl(self, request):\n        \"\"\"Return a url (if set) to log out to/via a remote service\n\n        :return: Either a string with an url, or None.\n        :rtype: str, None\n        \"\"\"\n        return self.get_remote_url(request, 'logout-url')\n\n    def get_post_logout_redirect_url(self, request):\n        \"\"\"Return a url (if set) to log out to/via a remote service\n\n        :return: Either a string with an url, or None.\n        :rtype: str, None\n        \"\"\"\n        return self.get_remote_url(request, \"post-logout-redirect-url\")\n\n    def get_remote_url(self, request, urltype):\n        \"\"\"Return a url (if set) to a remote service for REMOTE_USER purposes\n\n        :return: Either a string with an url, or None.\n        :rtype: str, None\n        \"\"\"\n        remote_url = None\n        try:\n            if not self.is_remote_user_enabled():\n                return None\n            remote_url = self.get('remote-user', urltype)\n        except (NoOptionError, ValueError):\n            return None\n        if remote_url:\n            nexthop = request.build_absolute_uri(request.get_full_path())\n            remote_url = remote_url.format(nexthop)\n        return remote_url\n\n    def clean_username(self, username):\n        workaround = 'none'\n        try:\n            workaround_config = self.get('remote-user', 'workaround')\n        except ValueError:\n            pass\n        else:\n            if workaround_config in _REMOTE_USER_WORKAROUNDS:\n                workaround = workaround_config\n\n        username = _REMOTE_USER_WORKAROUNDS[workaround](username)\n        return username\n\n\n_logger = logging.getLogger(__name__)\nCONFIG = RemoteUserConfigParser()\n\n\ndef fake_password(length):\n    return secrets.token_urlsafe(length)\n\n\ndef _workaround_default(username):\n    \"Fallback REMOTE_USER username cleanup: strip whitespace\"\n    username = username.strip()\n    return username\n\n\ndef _workaround_feide_oidc(username):\n    \"\"\"REMOTE_USER username cleanup for Feide OIDC\n\n    Extract username from key-value structure.\n    \"\"\"\n    username = username.strip()\n    if ':' in username:\n        username = username.split(':', 1)[1]\n    return username\n\n\n_REMOTE_USER_WORKAROUNDS = {\n    'none': _workaround_default,\n    'default': _workaround_default,\n    'feide-oidc': _workaround_feide_oidc,\n}\n"
  },
  {
    "path": "python/nav/web/auth/sudo.py",
    "content": "# Copyright (C) 2010, 2011, 2013, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nSudo functionality for web authentication in NAV.\n\"\"\"\n\nimport logging\nfrom typing import Optional\n\nfrom django.contrib.auth import update_session_auth_hash\nfrom django.http import HttpRequest\n\nfrom nav.auditlog.models import LogEntry\nfrom nav.web.auth.utils import get_account\nfrom nav.models.profiles import Account\nfrom nav.web.auth.utils import set_account, clear_session\n\n\n_logger = logging.getLogger(__name__)\n\n\nSUDOER_ID_VAR = 'sudoer'\n\n\ndef sudo(request: HttpRequest, other_user: Account) -> None:\n    \"\"\"Switches the current session to become other_user\"\"\"\n    if SUDOER_ID_VAR in request.session:\n        # Already logged in as another user.\n        raise SudoRecursionError()\n    account = get_account(request)\n    if not account.is_admin():\n        # Check if sudoer is acctually admin\n        raise SudoNotAdminError()\n    original_user = request.user\n    request.session[SUDOER_ID_VAR] = original_user.id\n    set_account(request, other_user)\n    update_session_auth_hash(request, other_user)\n    _logger.info('Sudo: \"%s\" acting as \"%s\"', original_user, other_user)\n    _logger.debug(\n        'Sudo: (session: %s, account: %s)', dict(request.session), request.user\n    )\n    LogEntry.add_log_entry(\n        original_user,\n        'sudo',\n        '{actor} sudoed to {target}',\n        subsystem='auth',\n        target=other_user,\n    )\n\n\ndef desudo(request: HttpRequest) -> None:\n    \"\"\"Switches the current session to become the original user from before a\n    call to sudo().\n\n    \"\"\"\n    if SUDOER_ID_VAR not in request.session:\n        # We are not sudoing\n        return\n\n    other_user = request.user\n    original_user_id = request.session[SUDOER_ID_VAR]\n    original_user = Account.objects.get(id=original_user_id)\n\n    clear_session(request)\n    set_account(request, original_user)\n    update_session_auth_hash(request, original_user)\n    _logger.info('DeSudo: \"%s\" no longer acting as \"%s\"', original_user, request.user)\n    _logger.debug(\n        'DeSudo: (session: %s, account: %s)', dict(request.session), request.user\n    )\n    LogEntry.add_log_entry(\n        original_user,\n        'desudo',\n        '{actor} no longer sudoed as {target}',\n        subsystem='auth',\n        target=other_user,\n    )\n\n\ndef get_sudoer(request: HttpRequest) -> Optional[Account]:\n    \"\"\"Returns a sudoer's Account, if current session is in sudo-mode\"\"\"\n    if SUDOER_ID_VAR in request.session:\n        return Account.objects.get(id=request.session[SUDOER_ID_VAR])\n\n\nclass SudoRecursionError(Exception):\n    msg = \"Already posing as another user\"\n\n    def __str__(self) -> str:\n        return self.msg\n\n\nclass SudoNotAdminError(Exception):\n    msg = \"Not admin\"\n\n    def __str__(self) -> str:\n        return self.msg\n"
  },
  {
    "path": "python/nav/web/auth/utils.py",
    "content": "# Copyright (C) 2010, 2011, 2013, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nUtilities for authentication/authorization in NAV that is independent of\nlogin method.\n\"\"\"\n\nimport logging\nimport re\nfrom copy import copy\n\nfrom django.contrib.auth import (\n    SESSION_KEY as DJANGO_USER_SESSION_KEY,\n    update_session_auth_hash,\n)\nfrom django.contrib.sessions.backends.base import UpdateError\nfrom django.core.cache import cache\nfrom django.core.exceptions import ImproperlyConfigured\nfrom django.http import HttpResponseRedirect, HttpResponse, HttpRequest\nfrom django.utils.functional import SimpleLazyObject\nfrom django_htmx.http import HttpResponseClientRedirect\n\nfrom nav.django.defaults import PUBLIC_URLS\nfrom nav.models.profiles import Account\nfrom nav.web.auth import get_login_url\nfrom nav.web.utils import is_ajax\n\n\n_logger = logging.getLogger(__name__)\n\n\nACCOUNT_ID_VAR = 'account_id'\nPASSWORD_ISSUES_CACHE_KEY = \"auth:accounts_password_issues\"\n\n\ndef default_account():\n    \"\"\"\n    Returns the user representing an unauthenticated account\n\n    default_account().is_anonymous is always True.\n    default_account().is_default_account() always returns True.\n    \"\"\"\n    return Account.objects.get(id=Account.DEFAULT_ACCOUNT)\n\n\ndef get_account(request):\n    \"\"\"Returns the account associated with the request\"\"\"\n    account = None\n    try:\n        account = copy(request.user)\n    except AttributeError:\n        try:\n            account = request.account\n        except AttributeError:\n            pass\n\n    if not account or not account.id:\n        return default_account()\n    return account\n\n\ndef set_account(request, account, cycle_session_id=True):\n    \"\"\"Updates request with new account.\n    Cycles the session ID by default to avoid session fixation.\n    \"\"\"\n    old_account_id = request.session.get(DJANGO_USER_SESSION_KEY, None)\n    request.session[ACCOUNT_ID_VAR] = account.id\n    request.session[DJANGO_USER_SESSION_KEY] = str(account.id)\n    request.account = request._cached_user = account\n    request.user = SimpleLazyObject(lambda: account)\n    if old_account_id and old_account_id != str(account.id):\n        update_session_auth_hash(request, account)\n    _logger.debug('Set active account to \"%s\"', account.login)\n    if cycle_session_id:\n        request.session.cycle_key()\n    try:\n        request.session.save()\n    except UpdateError:\n        _logger.debug(\"Session save failed (stale session key?); creating new session\")\n        request.session.create()\n\n\ndef clear_session(request):\n    \"\"\"Clears the session and logs out the current account\"\"\"\n    if hasattr(request, \"account\"):\n        del request.account\n    if hasattr(request, \"user\"):\n        del request.user\n    if hasattr(request, \"_cached_user\"):\n        del request._cached_user\n    request.session.flush()\n    request.session.save()\n\n\ndef ensure_account(request):\n    \"\"\"Guarantee that valid request.user is set\n\n    Translates Django's AnonymousUser to NAV's default_account\n    \"\"\"\n    if hasattr(request, \"user\") and request.user.id and not request.user.locked:\n        set_account(request, request.user, cycle_session_id=False)\n        return\n\n    account_id = (\n        request.session.get(DJANGO_USER_SESSION_KEY, Account.DEFAULT_ACCOUNT) or 0\n    )\n    account = Account.objects.get(id=account_id)\n\n    if account.locked and not account.is_default_account():\n        # logout of locked account\n        clear_session(request)\n\n        # Switch back to fallback, the anonymous user\n        # Assumes nobody has locked it..\n        account = default_account()\n\n    # Do not cycle to avoid session_id being changed on every request\n    set_account(request, account, cycle_session_id=False)\n\n\ndef authorization_not_required(fullpath):\n    \"\"\"Checks is authorization is required for the requested url\n\n    Should the user be able to decide this? Currently not.\n\n    \"\"\"\n    for url in PUBLIC_URLS:\n        if fullpath.startswith(url):\n            _logger.debug('authorization_not_required: %s', url)\n            return True\n    auth_not_required_regex = [r'^/index/dashboard/[^/]+/load/?$']\n    for regex in auth_not_required_regex:\n        if re.match(regex, fullpath):\n            _logger.debug('authorization_not_required: %s', regex)\n            return True\n    return False\n\n\ndef get_number_of_accounts_with_password_issues() -> int:\n    \"\"\"\n    Returns the number of accounts that have password issues like old style password\n    hashes, plaintext passwords or deprecated password hash methods\n    \"\"\"\n    number_of_accounts_with_password_issues = cache.get(\n        PASSWORD_ISSUES_CACHE_KEY, default=None\n    )\n    if number_of_accounts_with_password_issues is None:\n        number_of_accounts_with_password_issues = 0\n        for account in Account.objects.all():\n            if account.has_password_issues():\n                number_of_accounts_with_password_issues += 1\n        cache.set(PASSWORD_ISSUES_CACHE_KEY, number_of_accounts_with_password_issues)\n\n    return number_of_accounts_with_password_issues\n\n\ndef authorize_request(request: HttpRequest) -> bool:\n    \"\"\"Check whether request.user is authorized to visit the request's path\n\n    The paths are checked against python regular expressions stored in\n    a NAV-specific table, nav.models.profiles.Privilege.\n    \"\"\"\n    if not hasattr(request, \"user\"):\n        raise ImproperlyConfigured(\n            \"The NAV Django authentication middlewares requires Django's \"\n            \"auth middleware to be installed. Edit your MIDDLEWARE setting \"\n            \"to insert \"\n            \"'django.contrib.auth.middleware.AuthenticationMiddleware' \"\n            \"before 'nav.web.auth.middleware.AuthorizationMiddleware'.\"\n        )\n    account = get_account(request)\n\n    authorized = authorization_not_required(\n        request.get_full_path()\n    ) or account.has_perm('web_access', request.get_full_path())\n\n    if not authorized:\n        _logger.warning(\n            \"User %s denied access to %s\",\n            account.get_username(),\n            request.get_full_path(),\n        )\n        return False\n\n    _logger.debug(\n        \"User %s granted access to %s\",\n        account.get_username(),\n        request.get_full_path(),\n    )\n    return True\n\n\ndef redirect_to_login(request: HttpRequest) -> HttpResponse:\n    \"\"\"Redirects a request to the NAV login page, unless it was detected\n    to be an AJAX request, in which case return a 401 Not Authorized\n    response.\n\n    \"\"\"\n    if is_ajax(request):\n        return HttpResponse(status=401)\n\n    if request.htmx:\n        if orig_path := request.htmx.current_url_abs_path:\n            new_url = get_login_url(request, path=orig_path)\n            return HttpResponseClientRedirect(new_url)\n        else:\n            return HttpResponse(status=401)\n\n    new_url = get_login_url(request)\n    return HttpResponseRedirect(new_url)\n"
  },
  {
    "path": "python/nav/web/business/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/business/reportengine.py",
    "content": "# -*- coding: utf-8 -*-\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module for emailing status reports\"\"\"\n\nimport logging\nfrom collections import namedtuple\nfrom datetime import date, datetime, timedelta\nfrom operator import attrgetter\n\nfrom django.core.mail import send_mail\nfrom django.template.loader import render_to_string\n\nfrom nav.web.business import utils\nfrom nav.models.profiles import ReportSubscription\nfrom nav.django.settings import DEFAULT_FROM_EMAIL\n\n_logger = logging.getLogger(__name__)\nReport = namedtuple('Report', ['subject', 'period', 'text_message', 'html_message'])\n\n\ndef send_reports(period):\n    \"\"\"Sends all reports for the given period\n\n    Supported periods are in the ReportSubscription class\n    \"\"\"\n\n    report_types = [t for t, _ in ReportSubscription.TYPES]\n    for report_type in report_types:\n        _logger.debug('Sending reports for period %s, type %s', period, report_type)\n        subscriptions = ReportSubscription.objects.filter(\n            period=period, report_type=report_type\n        )\n        for subscription in subscriptions:\n            report = build_report(period, report_type, subscription.exclude_maintenance)\n            send_report(report, subscription.address.address)\n        _logger.info(\n            '%s %s availability: Sent %s reports',\n            period,\n            report_type,\n            subscriptions.count(),\n        )\n\n\ndef send_report(report, to_address):\n    \"\"\"Sends a single email report\"\"\"\n    _logger.debug('Sending report to %s', to_address)\n    send_mail(\n        report.subject,\n        report.text_message,\n        DEFAULT_FROM_EMAIL,\n        [to_address],\n        html_message=report.html_message,\n    )\n\n\ndef build_report(period, report_type, exclude_maintenance=False):\n    \"\"\"Builds a report for a given subscription period\"\"\"\n    context = build_context(period, report_type, exclude_maintenance)\n    html_message = render_to_string('business/email.html', context)\n    text_message = render_to_string('business/email.txt', context)\n    return Report(\n        get_email_subject(period, report_type), period, text_message, html_message\n    )\n\n\ndef build_context(period, report_type, exclude_maintenance=False):\n    \"\"\"Builds a context for the given subscription\"\"\"\n    midnight = datetime.combine(date.today(), datetime.min.time())\n    start, end = get_last_interval(midnight, period)\n    lookup = {\n        ReportSubscription.DEVICE: utils.get_netbox_records,\n        ReportSubscription.LINK: utils.get_interface_records,\n    }\n    records = lookup[report_type](start, end, exclude_maintenance)\n    sorted_records = sorted(records, key=attrgetter('downtime'), reverse=True)\n    max_length = 30\n    if records:\n        max_length = max(len(str(r.subject)) for r in records)\n\n    return {\n        'start': start,\n        'end': end,\n        'today': midnight,\n        'records': sorted_records,\n        'exclude_maintenance': exclude_maintenance,\n        'subject_format': \"-{}s\".format(max_length),\n    }\n\n\ndef get_last_interval(sometime, period):\n    \"\"\"Gets the start and end dates for the previous period\n\n    This means that if `sometime` is a datetime object from the current month\n    and `period` indicates month, then this function will return two\n    datetime-objects - the first one is the first day of _previous_ month and\n    the second one is the first day of the _current_ month.\n\n    :returns: start and end date objects\n    :rtype: list[datetime.datetime]\n    \"\"\"\n    if period == ReportSubscription.MONTH:\n        first_day = sometime.replace(day=1)\n    elif period == ReportSubscription.WEEK:\n        first_day = sometime - timedelta(days=sometime.weekday())\n    else:\n        first_day = sometime  # Daily\n\n    last_period = first_day - timedelta(days=1)\n    start, end = utils.get_interval(last_period, period)\n    return convert_to_datetime(start, end)\n\n\ndef convert_to_datetime(*dates):\n    \"\"\"Converts date or datetime objects to date\"\"\"\n    return [datetime(d.year, d.month, d.day) for d in dates]\n\n\ndef get_email_subject(period, report_type):\n    \"\"\"Creates an email subject for the report\"\"\"\n    title = \"{} {}\".format(\n        ReportSubscription.get_period_description(period),\n        ReportSubscription.get_type_description(report_type),\n    ).title()\n    return \"{} report from NAV\".format(title)\n"
  },
  {
    "path": "python/nav/web/business/urls.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL config for business tool\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.business import views\n\n\nurlpatterns = [\n    path('', views.BusinessView.as_view(), name='business-index'),\n    path(\n        'device_availability/',\n        views.DeviceAvailabilityReport.as_view(),\n        name='business-report-device-availability',\n    ),\n    path(\n        'link_availability/',\n        views.LinkAvailabilityReport.as_view(),\n        name='business-report-link-availability',\n    ),\n    re_path(\n        r'^save_report_subscription',\n        views.save_report_subscription,\n        name='save-report-subscription',\n    ),\n    re_path(\n        r'^render_report_subscriptions',\n        views.render_report_subscriptions,\n        name='render-report-subscriptions',\n    ),\n    re_path(\n        r'^remove_report_subscription',\n        views.remove_report_subscription,\n        name='remove-report-subscription',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/business/utils.py",
    "content": "\"\"\"A stupid util module for business reports\"\"\"\n\nimport calendar\nfrom datetime import datetime, timedelta\nfrom collections import defaultdict, namedtuple\nimport logging\n\nfrom nav.models.event import AlertHistory\nfrom nav.models.manage import Interface, Netbox\nfrom nav.models.profiles import ReportSubscription\n\n_logger = logging.getLogger(__name__)\n\nAvailabilityRecord = namedtuple(\n    'AvailabilityRecord',\n    ['subject', 'incidents', 'downtime', 'availability', 'maintenances'],\n)\n\n\nclass LinkSubject(object):\n    \"\"\"Adapter for link subjects\"\"\"\n\n    def __init__(self, subject):\n        self.subject = subject\n\n    def get_absolute_url(self):\n        return self.subject.get_absolute_url()\n\n    def __str__(self):\n        return \"{o.ifname} ({o.ifalias}) on {o.netbox}\".format(o=self.subject)\n\n\ndef get_interval(sometime, interval):\n    \"\"\"Gets the interval for some time\n\n    :param sometime: A datetime.datetime object\n    :param interval: A string to indicate interval\n    :returns: The start and endtime for the interval\n    :rtype: datetime.datetime, datetime.datetime\n    \"\"\"\n    year = sometime.year\n    month = sometime.month\n    if interval == ReportSubscription.MONTH:\n        _day, days = calendar.monthrange(year, month)\n        start = datetime(year, month, 1)\n        end = datetime(year, month, days) + timedelta(days=1)\n    elif interval == ReportSubscription.WEEK:\n        start = sometime - timedelta(days=sometime.weekday())\n        end = start + timedelta(days=7)\n    else:\n        # interval is one day\n        start = sometime\n        end = start + timedelta(days=1)\n    return start, min(end, datetime.now())\n\n\ndef get_months(number_of_months=12):\n    \"\"\"Returns a list of datetime objects for each month\n\n    The date is set to the first date in the month.\n    The first date is the previous months first day\n\n    :rtype: list[datetime.datetime]\n    \"\"\"\n    now = datetime.now()\n    month = datetime(now.year, now.month, 1)\n    months = [month]\n    for _ in range(number_of_months):\n        month = (month - timedelta(days=1)).replace(day=1)\n        months.append(month)\n\n    return months\n\n\ndef compute_availability(downtime, interval):\n    \"\"\"Computes the availability given downtime and interval\"\"\"\n    if downtime.total_seconds() == 0 or not interval:\n        return 100\n    availability = 1.0\n    fraction = downtime.total_seconds() / interval.total_seconds()\n    availability = max(availability - fraction, 0.0)\n    return availability * 100\n\n\ndef create_record(subject, alerts, start, end, maintenances=None):\n    \"\"\"Creates an availability record based on a subject's alerts in a period\"\"\"\n\n    def duration(alert):\n        return alert.end_within - alert.start_within\n\n    downtime = sum((duration(a) for a in alerts), timedelta())\n    if maintenances:\n        maintenancetime = sum((duration(m) for m in maintenances), timedelta())\n        downtime -= maintenancetime\n\n    availability = compute_availability(downtime, end - start)\n\n    # Cheekily remove microseconds\n    downtime = downtime - timedelta(microseconds=downtime.microseconds)\n\n    return AvailabilityRecord(\n        get_subject(subject), alerts, downtime, availability, maintenances\n    )\n\n\ndef get_subject(subject):\n    \"\"\"Get the string representation of this subject\"\"\"\n    if isinstance(subject, Interface):\n        return LinkSubject(subject)\n\n    return subject\n\n\ndef group_by_subject(alerts, subject_filter=None):\n    grouped_alerts = defaultdict(list)\n    for alert in alerts:\n        subject = alert.get_subject()\n        if subject_filter and not isinstance(subject, subject_filter):\n            continue\n        grouped_alerts[subject].append(alert)\n    return grouped_alerts\n\n\ndef get_netbox_records(start, end, exclude_maintenance=False):\n    alerts = get_alert_periods_by_type(start, end, 'boxState', ['boxDown'])\n    grouped_alerts = group_by_subject(alerts, Netbox)\n\n    if exclude_maintenance:\n        maintenances = get_alert_periods_by_type(\n            start, end, 'maintenanceState', ['onMaintenance']\n        )\n        grouped_maintenance = group_by_subject(maintenances)\n    else:\n        grouped_maintenance = {}\n\n    records = (\n        create_record(netbox, alerts, start, end, grouped_maintenance.get(netbox))\n        for netbox, alerts in grouped_alerts.items()\n        if netbox\n    )\n    return [record for record in records if record.downtime > timedelta(0)]\n\n\ndef get_interface_records(start, end, exclude_maintenance=False):\n    alerts = get_alert_periods_by_type(start, end, 'linkState', ['linkDown'])\n    grouped_alerts = group_by_subject(alerts, Interface)\n    return [\n        create_record(subject, alerts, start, end)\n        for subject, alerts in grouped_alerts.items()\n        if subject\n    ]\n\n\ndef get_alert_periods_by_type(period_start, period_end, event_type_id, alert_type_ids):\n    \"\"\"Returns AlertHistory objects of a specific event type, overlapping with\n    a given time period.\n\n    The AlertHistory objects will be augmented with the attributes\n    `start_within` and `end_within`, which represent the intersection of (\n    `period_start`, `period_end`) and (`start_time`, `end_time`) (for proper\n    calculation of which duration of earch AlertHistory object is inside the\n    specified time period.\n\n    \"\"\"\n    return AlertHistory.objects.raw(\n        \"\"\"\n    WITH period AS (\n  SELECT\n    %s AS \"start\",\n    %s AS \"end\"\n)\nSELECT\n  alerthist.*,\n  GREATEST(\"start\", start_time) AS start_within,\n  LEAST(\"end\", end_time) AS end_within\nFROM alerthist\nJOIN period ON ((start_time, end_time) OVERLAPS (\"start\", \"end\"))\nJOIN alerttype USING (alerttypeid)\nWHERE\n  alerthist.eventtypeid = %s\n  AND end_time IS NOT NULL\n  AND alerttype IN %s\nORDER BY netboxid, subid, start_time\n    \"\"\",\n        [period_start, period_end, event_type_id, tuple(alert_type_ids)],\n    )\n"
  },
  {
    "path": "python/nav/web/business/views.py",
    "content": "\"\"\"Controllers for business tool\"\"\"\n\nfrom collections import defaultdict\nfrom datetime import datetime\nimport logging\nfrom operator import attrgetter\n\nfrom django.views.generic import TemplateView\nfrom django.shortcuts import get_object_or_404, render\nfrom django.http import HttpResponse\nfrom django.urls import reverse\n\nfrom nav.models.profiles import AlertAddress, ReportSubscription, AlertSender\nfrom nav.web.business import utils\nfrom nav.web.auth.utils import get_account\nfrom nav.web.utils import create_title\n\n_logger = logging.getLogger(__name__)\n\n\nclass BusinessView(TemplateView):\n    \"\"\"A default business view\"\"\"\n\n    template_name = 'business/base.html'\n    report_name = ''\n\n    def get_context_data(self, **kwargs):\n        \"\"\"Creates a common context for business pages\"\"\"\n        context = super(BusinessView, self).get_context_data(**kwargs)\n        navpath = [('Home', '/'), ('Business reports', reverse('business-index'))]\n\n        if self.report_name:\n            navpath.append((self.report_name,))\n\n        context['navpath'] = navpath\n        context['title'] = create_title(navpath)\n        context['available_reports'] = [\n            DeviceAvailabilityReport,\n            LinkAvailabilityReport,\n        ]\n        context['subscription_periods'] = ReportSubscription.PERIODS\n        context['report_types'] = ReportSubscription.TYPES\n\n        return context\n\n\nclass AvailabilityReportView(BusinessView):\n    \"\"\"View for the availability report\"\"\"\n\n    template_name = 'business/report-availability.html'\n    report_name = 'Dummy report'\n    description = 'Dummy description'\n\n    def get_context_data(self, **kwargs):\n        context = super(AvailabilityReportView, self).get_context_data(**kwargs)\n\n        if 'report-month' in self.request.GET:\n            year, month = [\n                int(x) for x in self.request.GET.get('report-month').split('-')\n            ]\n            sometime = datetime(year, month, 1)\n            start, end = utils.get_interval(sometime, ReportSubscription.MONTH)\n            context['start'] = start\n            context['end'] = end\n            context['records'] = sorted(\n                self.get_records(start, end), key=attrgetter('availability')\n            )\n\n        context['months'] = utils.get_months()\n        context['report'] = self\n        context['exclude_maintenance'] = self.exclude_maintenance()\n\n        return context\n\n    def exclude_maintenance(self):\n        return bool(self.request.GET.get('exclude_maintenance'))\n\n    def get_records(self, start, end):\n        \"\"\"Get records for the specified event and alert types\"\"\"\n        raise NotImplementedError\n\n    @staticmethod\n    def group_alerts(alerts):\n        \"\"\"Group alerts by subject\"\"\"\n        grouped_alerts = defaultdict(list)\n        for alert in alerts:\n            grouped_alerts[alert.netbox].append(alert)\n        return grouped_alerts\n\n    def get_url(self):\n        \"\"\"Get the url for this view\"\"\"\n        raise NotImplementedError\n\n\nclass DeviceAvailabilityReport(AvailabilityReportView):\n    \"\"\"Availability for IP Devices\"\"\"\n\n    report_name = 'Device Availability'\n    description = 'Displays a report of IP Devices that have less than 100% uptime.'\n\n    def get_url(self):\n        return reverse('business-report-device-availability')\n\n    def get_records(self, start, end):\n        \"\"\"Get records for the specified event and alert types\"\"\"\n        return utils.get_netbox_records(start, end, self.exclude_maintenance())\n\n\nclass LinkAvailabilityReport(AvailabilityReportView):\n    \"\"\"Availability for links\"\"\"\n\n    report_name = 'Link Availability'\n    description = 'Displays a report of links that have less than 100% uptime.'\n\n    def get_url(self):\n        return reverse('business-report-link-availability')\n\n    def get_records(self, start, end):\n        \"\"\"Gets all records regarding links for this period\"\"\"\n        return utils.get_interface_records(start, end)\n\n\ndef save_report_subscription(request):\n    \"\"\"Saves a report subscription\"\"\"\n\n    new_address = request.POST.get('new_address')\n    period = request.POST.get('period')\n    report_type = request.POST.get('report_type')\n    exclude_maintenance = bool(request.POST.get('exclude_maintenance'))\n    account = get_account(request)\n\n    if new_address:\n        email_sender = AlertSender.objects.get(name=AlertSender.EMAIL)\n        address = AlertAddress(account=account, type=email_sender, address=new_address)\n        address.save()\n    else:\n        address = get_object_or_404(AlertAddress, pk=int(request.POST.get('address')))\n\n    ReportSubscription(\n        account=account,\n        address=address,\n        period=period,\n        exclude_maintenance=exclude_maintenance,\n        report_type=report_type,\n    ).save()\n\n    return HttpResponse()\n\n\ndef render_report_subscriptions(request):\n    \"\"\"Renders the report subscriptions\"\"\"\n    return render(request, 'business/frag-report-items.html')\n\n\ndef remove_report_subscription(request):\n    \"\"\"Remove a report subscription\"\"\"\n    account = get_account(request)\n    subscription_id = request.POST.get('subscriptionId')\n    subscription = get_object_or_404(\n        ReportSubscription, account=account, pk=subscription_id\n    )\n    subscription.delete()\n\n    return HttpResponse()\n"
  },
  {
    "path": "python/nav/web/crispyforms.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A collection of forms inspired by the django crispy forms framework\"\"\"\n\nfrom types import SimpleNamespace\nfrom typing import Optional\n\nfrom django import forms\n\n\nclass CheckBox:\n    \"\"\"Checkbox suited for the NAV layout\n\n    :param field: A field to render as a checkbox field.\n    \"\"\"\n\n    def __init__(self, field, css_classes: Optional[str] = None):\n        self.field = field\n        self.css_classes = css_classes\n        self.template = 'custom_crispy_templates/form_checkbox.html'\n\n\nclass HelpFormField:\n    \"\"\"Field that displays an icon with tooltip as helptext\n\n    :param field: A field to render as a help field.\n    \"\"\"\n\n    def __init__(self, field):\n        \"\"\"Constructor method\"\"\"\n        self.field = field\n        self.input_type = 'helpfield'\n\n\nclass NumberInput(forms.TextInput):\n    \"\"\"Input widget with type set to number\"\"\"\n\n    input_type = 'number'\n\n\nclass NumberField(forms.IntegerField):\n    \"\"\"Input field with type set to number\"\"\"\n\n    widget = NumberInput\n\n\nclass FlatFieldset:\n    \"\"\"A class representing a fieldset for forms.\n    Only flat layout of children fields is supported out of the box.\n    Any nesting of fields inside this fieldset might require custom\n    class definitions akin to this one.\n\n    :param legend: The legend text for the fieldset.\n    :type legend: str\n    :param fields: A list of fields to include in the fieldset.\n    :param css_class: Additional CSS classes to apply to the fieldset.\n    :param template: The path to the template used for rendering the fieldset.\n    Path is relative to the app's templates directory.\n    \"\"\"\n\n    def __init__(\n        self,\n        legend,\n        fields: list,\n        css_class='',\n        template: str = 'custom_crispy_templates/flat_fieldset.html',\n    ):\n        \"\"\"Constructor method\"\"\"\n        self.legend = legend\n        self.fields = fields\n        self.css_class = css_class\n        self.template = template\n\n\nclass FormRow:\n    \"\"\"A class representing a row in a form layout.\n    Row is not a functional element in forms, but a visual one.\n\n    :param fields: A list of fields to include in the row.\n    :param css_classes: Additional CSS classes to apply to the row. Defaults to an\n    empty string.\n    \"\"\"\n\n    def __init__(self, fields: list, css_classes: Optional[str] = None):\n        \"\"\"Constructor method\"\"\"\n        self.fields = fields\n        self.css_classes = css_classes\n        self.template = 'custom_crispy_templates/form_row.html'\n\n\nclass FormColumn:\n    \"\"\"A class representing a column in a form layout.\n    Column is not a functional element in forms, but a visual one.\n\n    :param fields: A list of fields to include in the column.\n    :param css_classes: Additional CSS classes to apply to the column. Defaults to\n    an empty string.\n    \"\"\"\n\n    def __init__(self, fields: list, css_classes: str = ''):\n        \"\"\"Constructor method\"\"\"\n        self.fields = fields\n        self.css_classes = css_classes\n        self.template = 'custom_crispy_templates/form_column.html'\n\n\nclass SubmitField:\n    \"\"\"A class representing a submit field (button) in a form.\n\n    :param name: The name attribute of the submit field.\n    :param value: The display text of the submit button.\n    :param css_classes: Additional CSS classes to apply to the submit button.\n    :param has_empty_label: If an empty label is added above the submit button to align\n    it within a row.\n    :ivar input_type: The type of input, which is 'submit' for this class.\n    :type input_type: str\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str = 'submit',\n        value: str = 'Submit',\n        css_classes: str = '',\n        has_empty_label: bool = False,\n    ):\n        \"\"\"Constructor method\"\"\"\n        self.name = name\n        self.value = value\n        self.css_classes = css_classes\n        self.has_empty_label = has_empty_label\n        self.input_type = 'submit'\n\n\ndef set_flat_form_attributes(\n    legend=None,\n    form_action='',\n    form_method='post',\n    submit_field: Optional[SubmitField] = None,\n    form_fields: list = None,\n    form_id: str = '',\n    form_class: str = '',\n):\n    \"\"\"Sets and returns a SimpleNamespace object representing a flat form.\n    Only flat layout of children fields is supported out of the box.\n    Any nesting of fields inside this form might require custom\n    class and template definitions.\n\n    :param legend: The legend text for the form. Defaults to None.\n    :type legend: str, optional\n    :param form_action: The action destination URL for the form. Defaults to an empty\n                        string.\n    :type form_action: str, optional\n    :param form_method: The HTTP method for the form. Defaults to 'post'.\n    :type form_method: str, optional\n    :param submit_field: An instance of SubmitField for the form's submit button.\n                         Defaults to None.\n    :param form_fields: A list of fields to include in the form in case you want to\n                        render any fields that are not present in Django's built-in\n                        Field classes, e.g., fieldset, submit, row, column etc. Do not\n                        set it if you want to render only Django's built-in fields.\n                        Defaults to None.\n    :param form_id: The ID attribute of the form element. Defaults to an empty string.\n    :param form_class: Additional CSS classes to apply to the form. Defaults to an\n                       empty string.\n\n    :return: An object containing the form attributes.\n    :rtype: SimpleNamespace\n    \"\"\"\n\n    return SimpleNamespace(\n        legend=legend,\n        action=form_action,\n        method=form_method,\n        submit_field=submit_field,\n        form_fields=form_fields,\n        form_id=form_id,\n        form_class=form_class,\n    )\n\n\nclass FormDiv:\n    \"\"\"A class representing a div in a form layout.\n\n    :param fields: A list of fields to include in the div.\n    :param css_classes: Additional CSS classes to apply to the div.\n    \"\"\"\n\n    def __init__(\n        self, fields: Optional[list] = None, css_classes: Optional[str] = None\n    ):\n        self.fields = fields\n        self.css_classes = css_classes\n        self.template = 'custom_crispy_templates/form_div.html'\n"
  },
  {
    "path": "python/nav/web/devicehistory/__init__.py",
    "content": "\"\"\"devicehistory\n\nDevice history and logs interface.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/devicehistory/forms.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom datetime import date, timedelta\nimport logging\n\nfrom django import forms\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FlatFieldset,\n    FormRow,\n    FormColumn,\n)\nfrom nav.web.devicehistory.utils import get_event_and_alert_types\n\n_logger = logging.getLogger(__name__)\n\n\nclass MyDateInput(forms.DateInput):\n    \"\"\"Set date as type on date input widget\"\"\"\n\n    input_type = 'date'\n\n    def __init__(self, attrs=None, format=None):\n        if not attrs:\n            attrs = {}\n        attrs.setdefault(\"placeholder\", \"yyyy-mm-dd\")\n        super(MyDateInput, self).__init__(attrs=attrs, format=format)\n\n\nclass MyDateField(forms.DateField):\n    \"\"\"Set widget with type = date as default widget\"\"\"\n\n    widget = MyDateInput\n\n\nclass DeviceHistoryViewFilter(forms.Form):\n    \"\"\"Form for filtering device history results\"\"\"\n\n    groupings = [\n        ('location', 'Location'),\n        ('room', 'Room'),\n        ('netbox', 'Netbox'),\n        ('device', 'Device serial'),\n        ('datetime', 'Date'),\n    ]\n    from_date = MyDateField(required=False)\n    to_date = MyDateField(required=False)\n    eventtype = forms.ChoiceField(required=False, label='Type')\n    eventtype.widget.attrs.update({\"class\": \"select2\"})\n    group_by = forms.ChoiceField(choices=groupings, initial='netbox', required=False)\n    group_by.widget.attrs.update({\"class\": \"select2\"})\n\n    @staticmethod\n    def get_initial():\n        return {\n            'eventtype': 'all',\n            'from_date': date.today() - timedelta(days=7),\n            'to_date': date.today() + timedelta(days=1),\n        }\n\n    def __init__(self, *args, **kwargs):\n        super(DeviceHistoryViewFilter, self).__init__(*args, **kwargs)\n        self.fields['eventtype'].choices = get_event_and_alert_types()\n        self.initial = self.get_initial()\n\n        common_class = 'medium-3'\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    \"Filters\",\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self['from_date']], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[self['to_date']], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[self['eventtype']], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[self['group_by']], css_classes=common_class\n                                ),\n                            ]\n                        )\n                    ],\n                )\n            ]\n        )\n\n    def clean(self):\n        \"\"\"Uses the initial values for empty fields\"\"\"\n        cleaned_data = super(DeviceHistoryViewFilter, self).clean()\n        for field in self.fields.keys():\n            if not cleaned_data.get(field) and self.fields[field].initial:\n                cleaned_data[field] = self.fields[field].initial\n        self.data = cleaned_data\n        return cleaned_data\n"
  },
  {
    "path": "python/nav/web/devicehistory/urls.py",
    "content": "#\n# Copyright (C) 2008-2009 Uninett AS\n# Copyright (C) 2022, 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration for devicehistory.\"\"\"\n\nfrom django.urls import path\nfrom nav.web.devicehistory import views\n\n\nurlpatterns = [\n    path('', views.devicehistory_search, name='devicehistory-search'),\n    path(\n        'componentsearch/',\n        views.devicehistory_component_search,\n        name='devicehistory-component-search',\n    ),\n    path('history/', views.devicehistory_view, name='devicehistory-view'),\n    path(\n        'history/room/<path:room_id>/',\n        views.devicehistory_view_room,\n        name='devicehistory-view-room',\n    ),\n    path(\n        'history/netbox/<int:netbox_id>/',\n        views.devicehistory_view_netbox,\n        name='devicehistory-view-netbox',\n    ),\n    path(\n        'history/location/<path:location_id>/',\n        views.devicehistory_view_location,\n        name='devicehistory-view-location',\n    ),\n    path('registererror/', views.error_form, name='devicehistory-registererror'),\n    path(\n        'registererror/componentsearch/',\n        views.registererror_component_search,\n        name='devicehistory-registererror-component-search',\n    ),\n    path(\n        'do_registererror/',\n        views.register_error,\n        name='devicehistory-do-registererror',\n    ),\n    path('delete_module/', views.delete_module, name='devicehistory-module'),\n    path(\n        'do_delete_module/',\n        views.do_delete_module,\n        name='devicehistory-do_delete_module',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/devicehistory/utils/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Device history utility functions.\"\"\"\n\nfrom nav.models.event import AlertType\n\n\ndef get_event_and_alert_types():\n    alert_types = (\n        AlertType.objects.select_related('event_type')\n        .all()\n        .order_by('event_type__id', 'name')\n    )\n    event_types = {}\n    for a in alert_types:\n        if a.event_type.id not in event_types:\n            event_types[a.event_type.id] = [\n                ('e_%s' % a.event_type.id, 'All %s' % a.event_type.id)\n            ]\n        event_types[a.event_type.id].append(('a_%s' % a.name, a.name))\n\n    # Quick fix for use in django forms - create list of tuples to\n    # create optgroups.\n    result = [('all', 'All')]\n    result.extend(event_types.items())\n    return result\n"
  },
  {
    "path": "python/nav/web/devicehistory/utils/componentsearch.py",
    "content": "from typing import Union\n\nfrom django.db.models import Model, Q, QuerySet\nfrom nav.models.manage import Netbox, Module, Location, NetboxGroup, Room, Device\n\n\ndef get_component_search_results(\n    search: str, button_text: str, exclude: list[type[Model]] = []\n):\n    \"\"\"\n    Retrieves grouped search results for component types based on a search query.\n\n    :param search: The search term to filter components.\n    :param button_text: A format string for the button label, which will be formatted\n        with the component type label. It should contain exactly one '%s' placeholder.\n\n    :param exclude: A list of component types to exclude from the search.\n        Defaults to an empty list.\n    :returns: Dictionary mapping component names to dictionaries with the\n        following keys:\n\n        - **label** (*str*): Display label for the component type.\n        - **has_grouping** (*bool*): Indicates if the results are grouped.\n        - **values** (*list or list of tuples*): Grouped or ungrouped search results.\n        - **button** (*str*): Label for the associated action button.\n    \"\"\"\n    if button_text.count('%s') != 1:\n        raise ValueError(\"button_text must contain exactly one '%s' placeholder\")\n\n    results = {}\n    searches = _get_search_queries(search, exclude)\n\n    for component_type, query, group_by in searches:\n        component_query = _get_component_query(component_type, query)\n        component_results = _prefetch_and_group_components(\n            component_type, component_query, group_by\n        )\n\n        if component_results:\n            component_name = _get_component_name(component_type)\n            component_label = _get_component_label(component_type)\n            results[component_name] = {\n                'label': component_label,\n                'values': component_results,\n                'has_grouping': group_by is not None,\n                'button': button_text % component_label,\n            }\n    return results\n\n\ndef _get_search_queries(search: str, exclude: list[Model] = []):\n    \"\"\"\n    Constructs a list of search queries for different component types.\n\n    Excludes specified component types if provided.\n    \"\"\"\n    searches: list[tuple[type[Model], Q, type[Model] | None]] = [\n        (Location, Q(id__icontains=search) | Q(aliases__icontains=search), None),\n        (Room, Q(id__icontains=search) | Q(aliases__icontains=search), Location),\n        (\n            Netbox,\n            Q(sysname__icontains=search)\n            | Q(entities__device__serial__icontains=search),\n            Room,\n        ),\n        (NetboxGroup, Q(id__icontains=search), None),\n        (\n            Module,\n            Q(name__icontains=search) | Q(device__serial__icontains=search),\n            Netbox,\n        ),\n        (\n            Device,\n            Q(\n                serial__icontains=search,\n                entities__isnull=True,\n                power_supplies_or_fans__isnull=True,\n                modules__isnull=True,\n            ),\n            None,\n        ),\n    ]\n    if exclude:\n        searches = [\n            (component_type, query, group_by)\n            for component_type, query, group_by in searches\n            if component_type not in exclude\n        ]\n    return searches\n\n\ndef _get_component_query(component_type: Model, query: Q):\n    \"\"\"\n    Constructs a query result for the specified component type based on\n    the provided query.\n    \"\"\"\n    if component_type._meta.db_table == \"netbox\":\n        return Netbox.objects.with_chassis_serials().filter(query).distinct()\n    return component_type.objects.filter(query)\n\n\ndef _prefetch_and_group_components(\n    component_type: Model, query_results: QuerySet, group_by: Union[Model, None] = None\n):\n    \"\"\"\n    Prefetches related objects and groups the results by the specified group_by model.\n\n    If group_by is None, returns a flat list of component IDs and labels.\n    If group_by is specified, groups the results by the related model's\n    string representation.\n    \"\"\"\n    if group_by is None or not hasattr(component_type, group_by._meta.db_table):\n        return [\n            (component.id, _get_option_label(component)) for component in query_results\n        ]\n\n    group_by_name = group_by._meta.db_table\n    component_results = query_results.prefetch_related(group_by_name)\n    grouped_results = {}\n    for component in component_results:\n        group_by_model = getattr(component, group_by_name)\n        group_name = str(group_by_model)\n        option = (component.id, _get_option_label(component))\n\n        if group_name not in grouped_results:\n            grouped_results[group_name] = []\n        grouped_results[group_name].append(option)\n    return [(group, components) for group, components in grouped_results.items()]\n\n\ndef _get_option_label(component: Model):\n    \"\"\"\n    Returns a string representation of the component for use in option labels.\n    \"\"\"\n    if component._meta.db_table == 'netbox':\n        return '%(sysname)s [%(ip)s - %(chassis_serial)s]' % component.__dict__\n    if component._meta.db_table in ('room', 'location'):\n        return component.verbose_string\n    return str(component)\n\n\ndef _get_component_name(component_type: Model):\n    \"\"\"\n    Returns the name of a component based on its type.\n    \"\"\"\n    if component_type._meta.db_table == 'device':\n        return 'inactive_device'\n    return component_type._meta.db_table\n\n\ndef _get_component_label(component_type: Model):\n    \"\"\"\n    Returns the label for a component based on its type.\n    \"\"\"\n    if component_type._meta.db_table == 'device':\n        return 'Inactive Device'\n    return component_type._meta.verbose_name.title()\n"
  },
  {
    "path": "python/nav/web/devicehistory/utils/error.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008-2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n# FIXME\n# Errors should not be registered on locations and rooms.\n# Either:\n# \t- remove support for those\n# \t- post alerts on every device found under that room/location\n\nfrom django.db import transaction\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.manage import Room, Netbox, Module\nfrom nav.models.event import EventQueue, EventQueueVar, EventType, Subsystem\nfrom nav.web.message import Messages\n\nSTATE_NONE = 'x'\nSTATE_START = 's'\nSTATE_END = 'e'\n\n_ = lambda a: a\n\n\n@transaction.atomic()\ndef register_error_events(request, **kwargs):\n    messages = Messages(request)\n\n    # Get the username of this user.\n    account = get_account(request)\n    username = account.login\n\n    # Selection must be a dictionary.\n    # Recognized keys are 'location', 'room', 'netbox' and 'module'.\n    # The values should be simple lists with the ID of the device.\n    selection = kwargs.pop('selection', [])\n\n    # The comment for this error.\n    comment = kwargs.pop('comment', None)\n\n    # Additional information for the event. Default values should do the trick\n    # here, unless you really know what you are doing.\n    source = kwargs.pop('source', 'deviceManagement')\n    target = kwargs.pop('target', 'eventEngine')\n    severity = kwargs.pop('severity', 3)\n    state = kwargs.pop('state', STATE_NONE)\n    event_type = kwargs.pop('event_type', 'deviceNotice')\n    alert_type = kwargs.pop('alert_type', 'deviceError')\n\n    for key in kwargs:\n        raise TypeError(\n            'register_error_events() got an unexpected keyword argument %s' % key\n        )\n\n    # Data that will be inserted into the eventq table.\n    default_eventq_data = {\n        'source': Subsystem.objects.get(name=source),\n        'target': Subsystem.objects.get(name=target),\n        'device': None,\n        'netbox': None,\n        'subid': None,\n        'event_type': EventType.objects.get(id=event_type),\n        'state': state,\n        'severity': severity,\n    }\n\n    # Data that will be inserted into the eventqvar table.\n    default_eventqvar_data = {\n        'alerttype': alert_type,\n        'comment': comment,\n        'username': username,\n    }\n\n    for type in selection:\n        if type == 'location':\n            devices = selection[type]\n        elif type == 'room':\n            devices = Room.objects.select_related('location').filter(\n                id__in=selection[type]\n            )\n        elif type == 'netbox':\n            devices = Netbox.objects.select_related('room', 'room__location').filter(\n                id__in=selection[type]\n            )\n        elif type == 'module':\n            devices = Module.objects.select_related(\n                'device', 'netbox', 'netbox__room', 'netbox__room__location'\n            ).filter(id__in=selection[type])\n        else:\n            continue\n\n        for device in devices:\n            eventq_data = default_eventq_data.copy()\n            eventqvar_data = default_eventqvar_data.copy()\n            eventqvar_data['unittype'] = type\n\n            if type == 'location':\n                eventqvar_data['locationid'] = device\n            elif type == 'room':\n                eventqvar_data['roomid'] = device.id\n                eventqvar_data['locationid'] = device.location.id\n            elif type == 'netbox':\n                eventq_data['netbox'] = device\n                eventqvar_data['roomid'] = device.room.id\n                eventqvar_data['locationid'] = device.room.location.id\n            elif type == 'module':\n                eventq_data['subid'] = device.id\n                eventq_data['netbox'] = device.netbox\n                eventq_data['device'] = device.device\n                eventqvar_data['roomid'] = device.netbox.room.id\n                eventqvar_data['locationid'] = device.netbox.room.location.id\n\n            new_event = EventQueue.objects.create(**eventq_data)\n            for key in eventqvar_data:\n                EventQueueVar.objects.create(\n                    event_queue=new_event, variable=key, value=eventqvar_data[key]\n                )\n\n            messages.append(\n                {\n                    'message': _('Registered error on %(type)s %(device)s.')\n                    % {\n                        'type': type,\n                        'device': device,\n                    },\n                    'type': Messages.SUCCESS,\n                }\n            )\n\n    messages.save()\n"
  },
  {
    "path": "python/nav/web/devicehistory/utils/history.py",
    "content": "#\n# Copyright (C) 2008-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom functools import reduce\nfrom collections import OrderedDict\n\nfrom django.core.paginator import InvalidPage\n\nfrom django.db.models import Q\n\nfrom nav.models.event import AlertHistory, AlertHistoryMessage\nfrom nav.models.manage import (\n    Netbox,\n    Device,\n    Location,\n    Room,\n    Module,\n    NetboxGroup,\n    Organization,\n    Category,\n)\n\nLOCATION_GROUPING = {\n    'order_by': 'netbox__room__location__description',\n    'group_by': lambda a: a.netbox.room.location.description,\n}\nROOM_GROUPING = {\n    'order_by': 'netbox__room__id',\n    'group_by': lambda a: a.netbox.room.id,\n}\nDEVICE_GROUPING = {\n    'order_by': 'netbox__room__description',\n    'group_by': lambda a: a.device.serial,\n}\nNETBOX_GROUPING = {\n    'order_by': 'netbox__sysname',\n    'group_by': lambda a: a.netbox.sysname,\n}\nDATE_GROUPING = {\n    'order_by': None,\n    'group_by': lambda a: a.start_time.date().isoformat(),\n}\nGROUPINGS = {\n    'location': LOCATION_GROUPING,\n    'room': ROOM_GROUPING,\n    'device': DEVICE_GROUPING,\n    'netbox': NETBOX_GROUPING,\n    'datetime': DATE_GROUPING,\n}\n\n\ndef get_selected_types(selected_type):\n    selected_types = {'event': None, 'alert': None}\n    if selected_type and selected_type.find('_') != -1:\n        kind, name = selected_type.split('_', 1)\n        kind = 'event' if kind == 'e' else 'alert'\n        selected_types[kind] = name\n    return selected_types\n\n\ndef fetch_history(selection, form):\n    def type_query_filter(selected_types):\n        # FIXME Selecting multiple is not accutally possible from the GUI.\n        # Remove option for multiple and make it simpler?\n        type_filter = []\n        if selected_types['event']:\n            type_filter.append(Q(event_type=selected_types['event']))\n        if selected_types['alert']:\n            type_filter.append(Q(alert_type__name=selected_types['alert']))\n        return type_filter\n\n    def make_selection_filter(and_mode=False):\n        dicts = {\n            '%s__in' % (arg if arg != 'netbox' else 'id'): selection[arg]\n            for arg in (\n                'netbox',\n                'room',\n                'room__location',\n                'organization',\n                'category',\n                'modules',\n                'groups',\n            )\n            if selection[arg]\n        }\n        filters = [Q(**dicts)]\n\n        combinator = lambda x, y: (x & y) if and_mode else (x | y)\n        return reduce(combinator, filters) if filters else None\n\n    from_date = form.cleaned_data['from_date']\n    to_date = form.cleaned_data['to_date']\n    selected_types = get_selected_types(form.cleaned_data['eventtype'])\n    order_by = form.cleaned_data['group_by']\n\n    type_filter = type_query_filter(selected_types)\n    order_by_keys = ['-start_time', '-end_time']\n    if GROUPINGS[order_by]['order_by']:\n        order_by_keys.insert(0, GROUPINGS[order_by]['order_by'])\n\n    # Find all netbox ids and device ids that belongs to\n    #   - selected netboxes\n    #   - selected rooms\n    #   - selected locations\n    #   - selected organizations\n    #   - selected categories\n    netbox = Netbox.objects.all()\n    selection_filter = make_selection_filter(\n        selection['mode'] and selection['mode'][0] == 'and'\n    )\n    if selection_filter:\n        netbox = netbox.filter(selection_filter)\n\n    # Find device ids that belongs to\n    #   - selected devices\n    device = Device.objects.filter(modules__in=selection['modules'])\n\n    if selection.get(\"inactive_device\"):\n        history_filter = Q(device_id__in=selection['inactive_device'])\n    else:\n        history_filter = Q(netbox__in=[n.id for n in netbox]) | Q(\n            device__in=[d.id for d in device]\n        )\n    # Find alert history that belongs to the netbox and device ids we found in\n    # the previous two queries.\n    #\n    # Time limit is done in raw SQL to make sure all parantheses are right.\n    history = (\n        AlertHistory.objects.select_related(\n            'event_type',\n            'alert_type',\n            'device',\n            'netbox',\n            'netbox__room',\n            'netbox__room__location',\n            'netbox__organization',\n            'netbox__category',\n        )\n        .filter(\n            history_filter,\n            *type_filter,\n        )\n        .extra(\n            where=[\n                '''\n            (\n                (end_time IS NULL AND start_time >= %s AND start_time <= %s) OR\n                (end_time = 'infinity' AND start_time < %s) OR\n                (end_time >= %s AND start_time < %s)\n            )\n           ''',\n            ],\n            params=[from_date, to_date, to_date, from_date, to_date],\n        )\n        .order_by(*order_by_keys)\n    )\n\n    return history\n\n\ndef get_page(paginator, page):\n    try:\n        history = paginator.page(page)\n    except InvalidPage:\n        history = paginator.page(paginator.num_pages)\n    return history\n\n\ndef get_messages_for_history(alert_history):\n    msgs = AlertHistoryMessage.objects.filter(\n        alert_history__in=[h.id for h in alert_history],\n        language='en',\n    ).values('alert_history', 'message', 'type', 'state')\n    return msgs\n\n\ndef group_history_and_messages(history, messages, group_by=None):\n    grouped_history = OrderedDict()\n    for a in history:\n        a.extra_messages = {}\n        for m in messages:\n            if a.id == m['alert_history']:\n                if m['state'] not in a.extra_messages:\n                    a.extra_messages[m['state']] = {\n                        'sms': None,\n                        'email': None,\n                        'jabber': None,\n                    }\n                a.extra_messages[m['state']][m['type']] = m['message']\n\n        try:\n            key = GROUPINGS[group_by]['group_by'](a)\n        except AttributeError:\n            key = None\n\n        if key not in grouped_history:\n            grouped_history[key] = []\n        grouped_history[key].append(a)\n    return grouped_history\n\n\ndef describe_search_params(selection):\n    data = {}\n    for arg, model in (\n        ('loc', Location),\n        ('room', Room),\n        ('netbox', Netbox),\n        ('groups', NetboxGroup),\n        ('module', Module),\n        ('organization', Organization),\n        ('category', Category),\n    ):\n        if arg in selection and selection[arg]:\n            name = getattr(model, '_meta').verbose_name\n            data[name] = _get_data_to_search_terms(selection, arg, model)\n\n    # Special case with netboxes\n    if Netbox._meta.verbose_name not in data:\n        data[Netbox._meta.verbose_name] = [\"All IP devices selected.\"]\n\n    return data\n\n\ndef _get_data_to_search_terms(selection, key_string, model):\n    \"\"\"Creates a human-readable list of things that were selected by the\n    search terms.\n\n    If all existing objects of a given model are selected, they are summarized\n    in a single 'all X selected' statement.\n\n    \"\"\"\n    selected_objects = len(selection[key_string])\n    if selected_objects == model.objects.all().count():\n        return [\"All {} selected.\".format(model._meta.verbose_name_plural)]\n    else:\n        return model.objects.filter(id__in=selection[key_string])\n\n\ndef add_descendants(parents):\n    \"\"\"Add all descendants of the parents\n\n    :param parents: A list of Location keys\n    :type parents: list<string>\n    :returns: A list of unique Location keys with all descendants added\n    \"\"\"\n    locations = parents\n    for location_key in parents:\n        try:\n            location = Location.objects.get(pk=location_key)\n        except Location.DoesNotExist:\n            pass\n        else:\n            locations.extend([location.pk for location in location.get_descendants()])\n    return list(set(locations))\n"
  },
  {
    "path": "python/nav/web/devicehistory/views.py",
    "content": "#\n# Copyright (C) 2008-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Device history UI view functions\"\"\"\n\nfrom operator import attrgetter\n\nfrom django.db import connection, transaction\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render, redirect\nfrom django.urls import reverse\nfrom django.views.decorators.http import require_http_methods\n\nfrom nav.event2 import EventFactory\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Netbox, Module, Room, Location, NetboxGroup\nfrom nav.models.event import AlertHistory\nfrom nav.web.message import new_message, Messages\nfrom nav.web.devicehistory.utils.history import (\n    fetch_history,\n    get_messages_for_history,\n    group_history_and_messages,\n    describe_search_params,\n    add_descendants,\n)\nfrom nav.web.devicehistory.utils.componentsearch import get_component_search_results\nfrom nav.web.devicehistory.utils.error import register_error_events\nfrom nav.web.devicehistory.forms import DeviceHistoryViewFilter\n\ndevice_event = EventFactory('ipdevpoll', 'eventEngine', 'deviceState')\n\n# Often used timelimits, in seconds:\nONE_DAY = 24 * 3600\nONE_WEEK = 7 * ONE_DAY\n\nHISTORY_PER_PAGE = 100\nORPHANS = 10\n\n_ = lambda a: a\n\n\ndef devicehistory_search(request):\n    \"\"\"Implements the device history landing page / search form\"\"\"\n    if 'from_date' in request.GET:\n        form = DeviceHistoryViewFilter(request.GET)\n        if form.is_valid():\n            # If request has 'inactive_device' parameter,\n            # we need to make sure the view is grouped by device\n            if 'inactive_device' in request.GET:\n                return __handle_redirect_for_inactive_device(request)\n\n            return devicehistory_view(request)\n    else:\n        form = DeviceHistoryViewFilter()\n\n    info_dict = {\n        'active': {'device': True},\n        'navpath': [('Home', '/'), ('Device History', '')],\n        'title': 'NAV - Device History',\n        'form': form,\n    }\n    return render(request, 'devicehistory/history_search.html', info_dict)\n\n\ndef __handle_redirect_for_inactive_device(request):\n    \"\"\"\n    Redirects to the device history view, ensuring 'group_by' is set to 'device'\n    when handling a shelved device.\n    \"\"\"\n    query_params = request.GET.copy()\n    query_params['group_by'] = 'device'\n    url = f\"{reverse('devicehistory-view')}?{query_params.urlencode()}\"\n    return HttpResponseRedirect(url)\n\n\n@require_http_methods([\"POST\"])\ndef devicehistory_component_search(request):\n    \"\"\"HTMX endpoint for component searches from device history form\"\"\"\n    raw_search = request.POST.get(\"search\")\n    search = raw_search.strip() if raw_search else ''\n    if not search:\n        return render(\n            request, 'devicehistory/_component-search-results.html', {'results': {}}\n        )\n\n    results = get_component_search_results(search, \"View %s history\")\n    return render(\n        request, 'devicehistory/_component-search-results.html', {'results': results}\n    )\n\n\ndef devicehistory_view_location(request, location_id):\n    url = reverse('devicehistory-view')\n    return redirect(url + '?loc=%s' % location_id)\n\n\ndef devicehistory_view_netbox(request, netbox_id):\n    url = reverse('devicehistory-view')\n    return redirect(url + '?netbox=%s' % netbox_id)\n\n\ndef devicehistory_view_room(request, room_id):\n    url = reverse('devicehistory-view')\n    return redirect(url + '?room=%s' % room_id)\n\n\ndef devicehistory_view(request, **_):\n    \"\"\"Device history search results view\"\"\"\n\n    selection = {\n        'organization': request.GET.getlist('org'),\n        'category': request.GET.getlist('cat'),\n        'room__location': request.GET.getlist('loc'),\n        'room': request.GET.getlist('room'),\n        'netbox': request.GET.getlist('netbox'),\n        'groups': request.GET.getlist('netboxgroup'),\n        'modules': request.GET.getlist('module'),\n        'mode': request.GET.getlist('mode'),\n        'inactive_device': request.GET.getlist('inactive_device'),\n    }\n\n    grouped_history = None\n    valid_params = ['to_date', 'from_date', 'eventtype', 'group_by', 'netbox', 'room']\n    if len(set(valid_params) & set(request.GET.keys())) >= 1:\n        form = DeviceHistoryViewFilter(request.GET)\n    else:\n        form = DeviceHistoryViewFilter(DeviceHistoryViewFilter.get_initial())\n    if form.is_valid():\n        # We need to handle locations as they are tree-based\n        selection['room__location'] = add_descendants(selection['room__location'])\n\n        alert_history = fetch_history(selection, form)\n        grouped_history = group_history_and_messages(\n            alert_history,\n            get_messages_for_history(alert_history),\n            form.cleaned_data['group_by'],\n        )\n\n        # Use 'loc' instead of 'location' to avoid noscript XSS protection issues\n        selection['loc'] = selection['room__location']\n        del selection['room__location']\n\n    info_dict = {\n        'active': {'device': True},\n        'search_description': describe_search_params(selection),\n        'selection': selection,\n        'history': grouped_history,\n        'title': 'NAV - Device History',\n        'navpath': [\n            ('Home', '/'),\n            ('Device History', reverse('devicehistory-search')),\n        ],\n        'form': form,\n    }\n    if request.htmx:\n        return render(request, 'devicehistory/_history_view_results.html', info_dict)\n\n    return render(request, 'devicehistory/history_view.html', info_dict)\n\n\ndef error_form(request):\n    \"\"\"Implements the 'register error event' form\"\"\"\n    error_comment = request.POST.get('error_comment', \"\")\n\n    return render(\n        request,\n        'devicehistory/register_error.html',\n        {\n            'active': {'error': True},\n            'confirm': False,\n            'error_comment': error_comment,\n            'title': 'NAV - Device History - Register error',\n            'navpath': [\n                ('Home', '/'),\n                ('Register error event', ''),\n            ],\n        },\n    )\n\n\n@require_http_methods([\"POST\"])\ndef registererror_component_search(request):\n    \"\"\"HTMX endpoint for component searches from device history form\"\"\"\n    raw_search = request.POST.get(\"search\")\n    search = raw_search.strip() if raw_search else ''\n    if not search:\n        return render(\n            request, 'devicehistory/_component-search-results.html', {'results': {}}\n        )\n\n    results = get_component_search_results(\n        search, 'Add %s error event', [Room, Location, NetboxGroup]\n    )\n    return render(\n        request, 'devicehistory/_component-search-results.html', {'results': results}\n    )\n\n\ndef confirm_error_form(request):\n    \"\"\"Implements confirmation form for device error event registration\"\"\"\n    selection = {\n        'netbox': request.POST.getlist('netbox'),\n        'module': request.POST.getlist('module'),\n    }\n\n    netbox = Netbox.objects.filter(id__in=selection['netbox'])\n    module = Module.objects.select_related('netbox').filter(id__in=selection['module'])\n\n    return render(\n        request,\n        'devicehistory/confirm_error.html',\n        {\n            'active': {'error': True},\n            'confirm': True,\n            'netbox': netbox,\n            'module': module,\n            'title': 'NAV - Device History - Confirm error event',\n            'navpath': [\n                ('Home', '/'),\n                ('Register error event', reverse('devicehistory-registererror')),\n            ],\n        },\n    )\n\n\ndef register_error(request):\n    \"\"\"Registers a device error event posted from a form\"\"\"\n    selection = {\n        'netbox': request.POST.getlist('netbox'),\n        'module': request.POST.getlist('module'),\n    }\n    error_comment = request.POST.get('error_comment', None)\n    confirmed = request.POST.get('confirm', False)\n\n    if not selection['netbox'] and not selection['module']:\n        new_message(request, _(\"No devices selected.\"), Messages.WARNING)\n        return error_form(request)\n    if not error_comment and not confirmed:\n        new_message(\n            request,\n            _(\"There's no error message supplied. Are you sure you want to continue?\"),\n            Messages.WARNING,\n        )\n        return confirm_error_form(request)\n\n    register_error_events(request, selection=selection, comment=error_comment)\n\n    return HttpResponseRedirect(reverse('devicehistory-registererror'))\n\n\ndef delete_module(request):\n    \"\"\"Displays a list of modules that are down, offering to delete selected\n    ones from the database.\n\n    Also implements a \"confirm deletion\" version of the page for the posted\n    form.\n\n    \"\"\"\n    if request.method == 'POST':\n        module_ids = request.POST.getlist('module')\n        history = _get_unresolved_module_states(module_ids)\n        confirm_deletion = True\n    else:\n        confirm_deletion = False\n        history = _get_unresolved_module_states()\n\n    result = []\n    for alert in history:\n        if alert.module:\n            result.append(\n                {\n                    'sysname': alert.netbox.sysname,\n                    'moduleid': alert.module.id,\n                    'name': alert.module.name,\n                    'module_number': alert.module.module_number,\n                    'descr': alert.module.description,\n                    'start_time': alert.start_time,\n                }\n            )\n\n    info_dict = {\n        'active': {'module': True},\n        'confirm_delete': confirm_deletion,\n        'modules': result,\n        'title': 'NAV - Device History - Delete module',\n        'navpath': [('Home', '/'), ('Delete module', '')],\n    }\n    return render(request, 'devicehistory/delete_module.html', info_dict)\n\n\n@transaction.atomic()\ndef do_delete_module(request):\n    \"\"\"Executes an actual database deletion after deletion was confirmed by\n    the delete_module() view.\n\n    \"\"\"\n    confirm_delete = request.POST.get('confirm_delete', False)\n    if request.method != 'POST' or not confirm_delete:\n        return HttpResponseRedirect(reverse('devicehistory-module'))\n\n    module_ids = request.POST.getlist('module')\n    history = _get_unresolved_module_states(module_ids)\n\n    if not history:\n        new_message(request, _('No modules selected'), Messages.NOTICE)\n        return HttpResponseRedirect(reverse('devicehistory-module'))\n\n    new_message(request, _('Deleted selected modules.'), Messages.SUCCESS)\n\n    cursor = connection.cursor()\n    module_ids = tuple(h.module.id for h in history)\n    # Delete modules using raw sql to avoid Django's simulated cascading.\n    # AlertHistory entries will be closed by a database trigger.\n    cursor.execute(\"DELETE FROM module WHERE moduleid IN %s\", (module_ids,))\n\n    for hist in history:\n        # Delete the entity representing the module\n        cursor.execute(\n            \"DELETE FROM netboxentity WHERE netboxid = %s and deviceid = %s\",\n            [hist.module.netbox.id, hist.module.device.id],\n        )\n        # Create event for deleted module\n        device_event.notify(\n            device=hist.module.device,\n            netbox=hist.module.netbox,\n            alert_type=\"deviceDeletedModule\",\n        ).save()\n\n    return HttpResponseRedirect(reverse('devicehistory-module'))\n\n\ndef _get_unresolved_module_states(limit_to=None):\n    \"\"\"Returns AlertHistory objects for all modules that are currently down.\n\n    Each AlertHistory object will have an extra module attribute,\n    which will be the referenced Module instance.\n\n    \"\"\"\n    history = (\n        AlertHistory.objects.select_related('device', 'netbox')\n        .filter(\n            event_type__id='moduleState',\n            alert_type__name='moduleDown',\n            end_time__gte=INFINITY,\n        )\n        .exclude(subid='')\n        .extra(select={'module': 'NULL'})\n    )\n\n    if limit_to:\n        history = history.filter(subid__in=limit_to)\n\n    history = dict((int(h.subid), h) for h in history)\n    for module in Module.objects.filter(id__in=history.keys()):\n        history[module.id].module = module\n\n    return sorted(history.values(), key=attrgetter('start_time'))\n"
  },
  {
    "path": "python/nav/web/geomap/__init__.py",
    "content": "\"\"\"geomap\n\nA geographical network map, based on OpenStreetMap.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/geomap/conf.py",
    "content": "#\n# Copyright (C) 2009, 2010 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Configuration parser for Geomap.\n\nParses Geomap's peculiar configuration file format.\n\nThe format is inspired by Python, with indentation indicating block\nstructure and colon used to begin a block.  The parse_conf and\nparse_conf_file functions only parse this block structure, leaving the\ncontents of each line unparsed.  The functions are thus quite generic\nand may be used in any case where one is interested in parsing\nPython-ish block structure.\n\nThe rest of the functions read and parse the Geomap configuration\nusing the functions mentioned above for parsing the basic syntax.\n\nThe configuration is read when this module is loaded and is accessible\nby the function get_configuration.\n\n\"\"\"\n\nimport os\nimport re\nimport logging\n\nfrom nav.config import find_config_file\nfrom nav.errors import ConfigurationError\n\n_logger = logging.getLogger('nav.web.geomap.conf')\n\n_config = None\n\n\nclass ConfigurationSyntaxError(ConfigurationError):\n    def __init__(self, msg, filename, linenr):\n        super(ConfigurationSyntaxError, self).__init__()\n        self.msg = msg\n        self.filename = filename\n        self.linenr = linenr\n\n    def __str__(self):\n        return 'Syntax error in configuration file %s on line %d: %s' % (\n            self.filename,\n            self.linenr,\n            self.msg,\n        )\n\n\nclass ConfigurationEvaluationError(ConfigurationError):\n    def __init__(self, expression, original_exception, filename, linenr):\n        super(ConfigurationEvaluationError, self).__init__()\n        self.expression = expression\n        self.original_exception = original_exception\n        self.filename = filename\n        self.linenr = linenr\n\n    def __str__(self):\n        return (\n            'Exception when evaluating expression \"%s\" in configuration '\n            'file %s on line %d: %s'\n        ) % (self.expression, self.filename, self.linenr, self.original_exception)\n\n\ndef parse_conf(lines, filename):\n    \"\"\"Parse Python-ish colon- and indentation-based block structure.\n\n    Returns a list of objects, where each object is either a block or\n    a line.  Each object is represented as a dictionary.\n\n    A block has the following keys:\n\n    type -- 'block'\n    text -- contents of first line of block (indentation and colon removed)\n    objects -- list of objects inside the block\n    linenr -- line number of first line of the block\n\n    A line has the following keys:\n\n    type -- 'line'\n    text -- contents of the line (indentation removed)\n    linenr -- the line's line number\n\n    Syntax:\n\n    All lines at the same level must have the same indent in spaces\n    (tab is translated to 8 spaces).  Any whitespace at the end of\n    lines is ignored.  Comments are introduced by a '#' character\n    (which must be the first non-whitespace character on the line) and\n    last until end of line.  Any line ending in colon introduces a new\n    block, which must have deeper indentation than the current block.\n    Colons inside a line have no special significance.\n\n    Arguments:\n\n    lines -- lines of text to parse (list of string; each line is one\n    element)\n\n    filename -- name of file lines are read from (used in error\n    messages)\n\n    \"\"\"\n    stack = [{'objects': [], 'indent': 0}]\n\n    def line_empty_p(line):\n        return re.match(r'^\\s*(#.*)?$', line) is not None\n\n    def normalize_line(line):\n        line = line.replace('\\t', ' ' * 8)\n        line = line.rstrip()\n        return line\n\n    def line_indent(line):\n        return len(re.match(r'^ *', line).group(0))\n\n    def current_frame():\n        return stack[-1]\n\n    def current_indent():\n        return current_frame()['indent']\n\n    def current_objlist():\n        return current_frame()['objects']\n\n    def make_block(line, linenr):\n        return {'type': 'block', 'text': line, 'objects': [], 'linenr': linenr}\n\n    def make_line(line, linenr):\n        return {'type': 'line', 'text': line, 'linenr': linenr}\n\n    def add_line(line, linenr):\n        line = line.lstrip()\n        if line[-1] == ':':\n            obj = make_block(line[:-1], linenr)\n        else:\n            obj = make_line(line, linenr)\n        current_objlist().append(obj)\n\n    def last_object():\n        if current_objlist():\n            return current_objlist()[-1]\n        return None\n\n    def expect_more_indent_p():\n        last = last_object()\n        return (\n            last is not None and last['type'] == 'block' and len(last['objects']) == 0\n        )\n\n    def push(new_indent):\n        objlist = last_object()['objects']\n        stack.append({'objects': objlist, 'indent': new_indent})\n\n    def pop(new_indent):\n        while current_indent() > new_indent:\n            stack.pop()\n\n    linenr = 0\n\n    def error(msg):\n        raise ConfigurationSyntaxError(msg, filename, linenr)\n\n    for linenr in range(1, len(lines) + 1):\n        line = normalize_line(lines[linenr - 1])\n        if line_empty_p(line):\n            continue\n        new_indent = line_indent(line)\n        if expect_more_indent_p() and new_indent > current_indent():\n            push(new_indent)\n        elif expect_more_indent_p():\n            error('Expected more indentation')\n        elif new_indent > current_indent():\n            error('Unexpected increase in indentation')\n        elif new_indent < current_indent():\n            pop(new_indent)\n            if new_indent != current_indent():\n                error(\n                    'New indentation of %d spaces does not match any '\n                    + 'previous indentation' % new_indent\n                )\n        add_line(line, linenr)\n    if expect_more_indent_p():\n        error('Unexpected end of file (at start of a block)')\n    pop(0)\n    return current_objlist()\n\n\ndef parse_conf_file(filename):\n    \"\"\"Parse a configuration file using parse_conf.\n\n    Arguments:\n\n    filename -- absolute path to configuration file\n\n    \"\"\"\n    with open(filename) as conf:\n        lines = conf.readlines()\n    return parse_conf(lines, filename)\n\n\ndef interpret_configuration(config, filename):\n    def is_variant(c_obj):\n        if c_obj['type'] != 'block':\n            return False\n        match = re.match(r'^def variant\\((.+),(.+)\\)$', c_obj['text'])\n        return match is not None\n\n    def read_variant(c_obj):\n        match = re.match(r'^def variant\\((.+),(.+)\\)$', c_obj['text'])\n        identifier = match.group(1).strip()\n        name = eval_or_warning(match.group(2), c_obj['linenr'])\n        indicators = {}\n        styles = {}\n        template_files = {}\n        styles['node'], styles['edge'] = {}, {}\n        indicators['node'], indicators['edge'] = [], []\n        for sub in c_obj['objects']:\n            if is_indicator(sub):\n                indicator_type, indicator = read_indicator(sub)\n                if indicator_type not in indicators:\n                    indicators[indicator_type] = []\n                indicators[indicator_type].append(indicator)\n            elif is_style(sub):\n                style_type, style = read_style(sub)\n                if style_type not in styles:\n                    styles[style_type] = {}\n                styles[style_type].update(style)\n            elif is_template_file(sub):\n                template_for, template_file = read_template_file(sub)\n                template_files[template_for] = template_file\n            else:\n                warn_unknown_object(sub)\n        return (\n            identifier,\n            {\n                'identifier': identifier,\n                'name': name,\n                'indicators': indicators,\n                'styles': styles,\n                'template_files': template_files,\n            },\n        )\n\n    def is_indicator(c_obj):\n        if c_obj['type'] != 'block':\n            return False\n        match = re.match(r'^def indicator\\((.+),(.+),(.+)\\)$', c_obj['text'])\n        return match is not None\n\n    def read_indicator(c_obj):\n        match = re.match(r'^def indicator\\((.+),(.+),(.+)\\)$', c_obj['text'])\n        type_ = match.group(1).strip()\n        property_ = match.group(2).strip()\n        name = eval_or_warning(match.group(3), c_obj['linenr'])\n        options = []\n        for sub in c_obj['objects']:\n            if sub['type'] != 'block':\n                raise ConfigurationSyntaxError(\n                    'Illegal indicator syntax (expected a block)',\n                    filename,\n                    sub['linenr'],\n                )\n            match = re.match(r'^if (.+)$', sub['text'])\n            if match is None:\n                raise ConfigurationSyntaxError(\n                    'Illegal indicator syntax (expected \\'if ...\\')',\n                    filename,\n                    sub['linenr'],\n                )\n            test = match.group(1)\n            result = ''.join(o['text'] for o in sub['objects'])\n            value_and_label = eval_or_warning(\n                result, sub['linenr'], ('', '(configuration error, see log)')\n            )\n            if len(value_and_label) != 2:\n                _logger.warning(\n                    'Error in configuration file %s on line %d: '\n                    'expected expression \"%s\" to evaluate to '\n                    '2-tuple, it evaluated to %s',\n                    filename,\n                    sub['linenr'],\n                    result,\n                    value_and_label,\n                )\n                value_and_label = '', '(configuration error, see log)'\n            value, label = value_and_label\n            options.append({'test': test, 'value': value, 'label': label})\n        return (\n            type_,\n            {'type': type_, 'property': property_, 'name': name, 'options': options},\n        )\n\n    def is_template_file(c_obj):\n        if c_obj['type'] == 'block':\n            return False\n        match = re.match(r'^template_file\\((.+),(.+)\\)$', c_obj['text'])\n        return match is not None\n\n    def read_template_file(c_obj):\n        match = re.match(r'^template_file\\((.+),(.+)\\)$', c_obj['text'])\n        template_for = match.group(1).strip()\n        template_file = eval_or_warning(match.group(2), c_obj['linenr'], None)\n        return template_for, template_file\n\n    def is_style(c_obj):\n        if c_obj['type'] == 'block':\n            return False\n        match = re.match(r'^style\\((.+),(.+),(.+)\\)$', c_obj['text'])\n        return match is not None\n\n    def read_style(c_obj):\n        match = re.match(r'^style\\((.+),(.+),(.+)\\)$', c_obj['text'])\n        type_ = match.group(1).strip()\n        property_ = match.group(2).strip()\n        value = eval_or_warning(match.group(3), c_obj['linenr'], None)\n        return (type_, {property_: value})\n\n    def warn_unknown_object(c_obj):\n        _logger.warning(\n            'Error in configuration file %s: Unknown object \"%s\" starting on line %d',\n            filename,\n            c_obj['text'],\n            c_obj['linenr'],\n        )\n\n    def eval_or_warning(expr, linenr, default_value='(configuration error, see log)'):\n        try:\n            return conf_eval(expr, filename, linenr)\n        except ConfigurationEvaluationError as err:\n            _logger.warning(err)\n            return default_value\n\n    variants = {}\n    variant_order = []\n    for c_obj in config:\n        if is_variant(c_obj):\n            variant_id, variant = read_variant(c_obj)\n            variants[variant_id] = variant\n            variant_order.append(variant_id)\n        else:\n            warn_unknown_object(c_obj)\n\n    return {'variants': variants, 'variant_order': variant_order}\n\n\ndef conf_eval(expr, filename, linenr):\n    try:\n        return eval(expr, {})\n    except Exception as err:  # noqa: BLE001\n        raise ConfigurationEvaluationError(expr, err, filename, linenr)\n\n\ndef read_configuration(filename):\n    return interpret_configuration(parse_conf_file(filename), filename)\n\n\ndef get_configuration():\n    global _config\n    if _config is None:\n        _config = read_configuration(\n            find_config_file(os.path.join('geomap', 'config.py'))\n        )\n    return _config\n"
  },
  {
    "path": "python/nav/web/geomap/db.py",
    "content": "#\n# Copyright (C) 2009, 2010, 2013-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Data access for Geomap.\n\nThis module abstracts away all the horrendous queries needed to get data for\nGeomap from the database, as well as the code for retrieving traffic data\nfrom Graphite, and provides one simple function, get_data, which returns the\nstuff we want.\n\nBased on datacollector.py from the old Java-applet based Netmap.\n\n\"\"\"\n\nimport logging\n\nfrom django.core.cache import cache\nfrom urllib.error import HTTPError\n\nimport nav\nfrom nav.config import NAV_CONFIG\nfrom nav.metrics.data import get_metric_average\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.metrics.graphs import get_metric_meta\nfrom nav.metrics.names import escape_metric_name\nfrom nav.metrics.templates import (\n    metric_path_for_interface,\n    metric_path_for_cpu_load,\n    metric_path_for_cpu_utilization,\n)\nfrom nav.web.geomap.utils import lazy_dict, subdict, is_nan\nfrom nav.util import chunks\n\n_logger = logging.getLogger(__name__)\n\n_domain_suffix = NAV_CONFIG.get('DOMAIN_SUFFIX')\n\n\nLAYER_3_QUERY = \"\"\"\n    SELECT DISTINCT ON (local_sysname, remote_sysname)\n           sysname AS local_sysname,\n           ifname AS local_interface,\n           netbox.netboxid AS local_netboxid,\n           interface_gwport.interfaceid AS local_gwportid,\n           interface_gwport.interfaceid AS local_portid,\n           NULL AS local_swportid,\n           speed AS capacity,\n           ifindex,\n           conn.*, nettype, netident,\n           3 AS layer, NULL AS remote_swportid, vlan.*\n    FROM gwportprefix\n    JOIN (\n        SELECT DISTINCT ON (gwportprefix.prefixid)\n               interfaceid AS remote_gwportid,\n               interfaceid AS remote_portid,\n               NULL AS remote_swportid,\n               gwportprefix.prefixid,\n               ifindex AS remote_ifindex,\n               ifname AS remote_interface,\n               sysname AS remote_sysname,\n               speed AS remote_speed,\n               netboxid AS remote_netboxid,\n               room.position AS remote_position\n        FROM interface_gwport\n        JOIN netbox USING (netboxid)\n        JOIN room USING (roomid)\n        JOIN gwportprefix USING (interfaceid)\n    ) AS conn USING (prefixid)\n    JOIN interface_gwport USING (interfaceid)\n    JOIN netbox USING (netboxid)\n    JOIN room USING (roomid)\n    LEFT JOIN prefix ON  (prefix.prefixid = gwportprefix.prefixid)\n    LEFT JOIN vlan USING (vlanid)\n    WHERE interface_gwport.interfaceid <> remote_gwportid\n      AND vlan.nettype NOT IN ('static', 'lan')\n      AND ((room.position[1] >= %s AND room.position[0] >= %s AND\n            room.position[1] <= %s AND room.position[0] <= %s)\n           OR\n           (remote_position[1] >= %s AND remote_position[0] >= %s AND\n            remote_position[1] <= %s AND remote_position[0] <= %s))\n      AND length(lseg(room.position, remote_position)) >= %s\n    ORDER BY sysname,remote_sysname, netaddr ASC, speed DESC\n\"\"\"\n\nLAYER_2_QUERY_1 = \"\"\"\n    SELECT DISTINCT ON (interface_swport.interfaceid)\n    interface_gwport.interfaceid AS remote_gwportid,\n    interface_gwport.interfaceid AS remote_portid,\n    NULL AS remote_swportid,\n    interface_gwport.speed AS capacity,\n    interface_gwport.ifindex AS remote_ifindex,\n    interface_gwport.ifname AS remote_interface,\n    netbox.sysname AS remote_sysname,\n    netbox.netboxid AS remote_netboxid,\n\n    interface_swport.interfaceid AS local_swportid,\n    interface_swport.interfaceid AS local_portid,\n    NULL AS local_gwportid,\n    interface_swport.ifname AS local_interface,\n    swport_netbox.sysname AS local_sysname,\n    swport_netbox.netboxid AS local_netboxid,\n    interface_swport.ifindex AS ifindex,\n\n    2 AS layer,\n    nettype, netident,\n    vlan.*\n\n    FROM interface_gwport\n     JOIN netbox ON (interface_gwport.netboxid=netbox.netboxid)\n\n     LEFT JOIN gwportprefix\n     ON (gwportprefix.interfaceid = interface_gwport.interfaceid)\n     LEFT JOIN prefix ON  (prefix.prefixid = gwportprefix.prefixid)\n     LEFT JOIN vlan USING (vlanid)\n\n     JOIN interface_swport\n     ON (interface_swport.interfaceid = interface_gwport.to_interfaceid)\n     JOIN netbox AS swport_netbox\n     ON (interface_swport.netboxid = swport_netbox.netboxid)\n\n     JOIN room AS gwport_room ON (netbox.roomid = gwport_room.roomid)\n     JOIN room AS swport_room ON (swport_netbox.roomid = swport_room.roomid)\n\n     WHERE interface_gwport.to_interfaceid IS NOT NULL\n       AND interface_gwport.to_interfaceid = interface_swport.interfaceid\n       AND ((gwport_room.position[1] >= %s AND gwport_room.position[0] >= %s AND\n             gwport_room.position[1] <= %s AND gwport_room.position[0] <= %s)\n            OR\n            (swport_room.position[1] >= %s AND swport_room.position[0] >= %s AND\n             swport_room.position[1] <= %s AND swport_room.position[0] <= %s))\n       AND length(lseg(gwport_room.position, swport_room.position)) >= %s\n\"\"\"\n\nLAYER_2_QUERY_2 = \"\"\"\n    SELECT DISTINCT ON (remote_sysname, local_sysname)\n    interface_swport.interfaceid AS remote_swportid,\n    interface_swport.interfaceid AS remote_portid,\n    NULL AS remote_gwportid,\n    interface_swport.speed AS capacity,\n    interface_swport.ifindex AS remote_ifindex,\n    interface_swport.ifname AS remote_interface,\n    netbox.sysname AS remote_sysname,\n    netbox.netboxid AS remote_netboxid,\n    2 AS layer,\n    foo.*,\n    vlan.*\n\n    FROM interface_swport\n     JOIN netbox USING (netboxid)\n\n     JOIN (\n\n         SELECT\n         interface_swport.interfaceid AS local_swportid,\n         interface_swport.interfaceid AS local_portid,\n         NULL AS local_gwportid,\n         interface_swport.ifindex AS ifindex,\n         interface_swport.ifname AS local_interface,\n         netbox.sysname AS local_sysname,\n         netbox.netboxid AS local_netboxid,\n         room.position AS local_position\n\n         FROM interface_swport\n         JOIN netbox USING (netboxid)\n         JOIN room USING (roomid)\n\n       ) AS foo ON (foo.local_swportid = to_interfaceid)\n\n\n    LEFT JOIN swportvlan ON (interface_swport.interfaceid = swportvlan.interfaceid)\n    LEFT JOIN vlan USING (vlanid)\n\n    JOIN room AS remote_room ON (netbox.roomid = remote_room.roomid)\n\n    WHERE ((remote_room.position[1] >= %s AND remote_room.position[0] >= %s AND\n            remote_room.position[1] <= %s AND remote_room.position[0] <= %s)\n           OR\n           (foo.local_position[1] >= %s AND foo.local_position[0] >= %s AND\n            foo.local_position[1] <= %s AND foo.local_position[0] <= %s))\n      AND length(lseg(remote_room.position, foo.local_position)) >= %s\n\n    ORDER BY remote_sysname, local_sysname, interface_swport.speed DESC\n\"\"\"\n\nLAYER_2_QUERY_3 = \"\"\"\n    SELECT DISTINCT ON (remote_sysname, local_sysname)\n\n    interface_swport.interfaceid AS remote_swportid,\n    interface_swport.interfaceid AS remote_portid,\n    interface_swport.ifindex AS remote_ifindex,\n    interface_swport.ifname AS remote_interface,\n    netbox.sysname AS remote_sysname,\n    netbox.netboxid AS remote_netboxid,\n    interface_swport.speed AS capacity,\n    2 AS layer,\n    conn.*,\n    vlan.*,\n    NULL AS remote_gwportid,\n    NULL AS local_gwportid,\n    NULL AS local_swportid,\n    NULL AS local_portid,\n    NULL AS local_interface\n\n    FROM interface_swport\n     JOIN netbox USING (netboxid)\n\n     JOIN (\n        SELECT\n          netbox.sysname AS local_sysname,\n          netbox.netboxid AS local_netboxid,\n          room.position AS local_position\n        FROM netbox\n        JOIN room USING (roomid)\n     ) AS conn ON (conn.local_netboxid = to_netboxid)\n\n    LEFT JOIN swportvlan ON (interface_swport.interfaceid = swportvlan.interfaceid)\n    LEFT JOIN vlan USING (vlanid)\n\n    JOIN room AS remote_room ON (netbox.roomid = remote_room.roomid)\n\n    WHERE ((remote_room.position[1] >= %s AND remote_room.position[0] >= %s AND\n            remote_room.position[1] <= %s AND remote_room.position[0] <= %s)\n           OR\n           (conn.local_position[1] >= %s AND conn.local_position[0] >= %s AND\n            conn.local_position[1] <= %s AND conn.local_position[0] <= %s))\n      AND length(lseg(remote_room.position, conn.local_position)) >= %s\n\n    ORDER BY remote_sysname, local_sysname, interface_swport.speed DESC\n\"\"\"\n\nQUERY_NETBOXES = \"\"\"\n    SELECT DISTINCT ON (netboxid)\n           netbox.netboxid, netbox.sysname, netbox.ip,\n           netbox.catid, netbox.up, netbox.roomid,\n           type.descr AS type,\n           location.descr AS location, room.descr AS room_descr,\n           room.position[0] as lat, room.position[1] as lon\n    FROM netbox\n    LEFT JOIN room using (roomid)\n    LEFT JOIN location USING (locationid)\n    LEFT JOIN type USING (typeid)\n    WHERE room.position IS NOT NULL\n\"\"\"\n\n\ndef get_data(db_cursor, bounds, time_interval=None):\n    \"\"\"Reads data from database.\n\n    Returns a pair of dictionaries (netboxes, connections).  netboxes\n    contains a 'lazy dictionary' (see class lazy_dict in utils.py)\n    with information for each netbox; connections contains two lazy\n    dictionaries for each connection (one representing each end).\n    (The reason for using lazy_dict is that this allows postponing\n    reading of RRD files until we know it is necessary, while still\n    keeping the code for reading them here).\n\n    \"\"\"\n\n    if not db_cursor:\n        raise nav.errors.GeneralException(\"No db-cursor given\")\n\n    bounds_list = [\n        bounds['minLon'],\n        bounds['minLat'],\n        bounds['maxLon'],\n        bounds['maxLat'],\n    ]\n\n    network_length_limit = 0\n\n    network_query_args = bounds_list + bounds_list + [network_length_limit]\n\n    if time_interval is None:\n        time_interval = {'start': '-10min', 'end': 'now'}\n\n    connections = {}\n\n    db_cursor.execute(LAYER_3_QUERY, network_query_args)\n    # Expect DictRows, but want to work with updateable dicts:\n    results = [lazy_dict(row) for row in db_cursor.fetchall()]\n    db_cursor.execute(LAYER_2_QUERY_1, network_query_args)\n    results.extend([lazy_dict(row) for row in db_cursor.fetchall()])\n    db_cursor.execute(LAYER_2_QUERY_2, network_query_args)\n    results.extend([lazy_dict(row) for row in db_cursor.fetchall()])\n    db_cursor.execute(LAYER_2_QUERY_3, network_query_args)\n    results.extend([lazy_dict(row) for row in db_cursor.fetchall()])\n\n    for res in results:\n        assert (\n            res.get('remote_swportid', None) is not None\n            or res.get('remote_gwportid', None) is not None\n        )\n\n    # Go through all the connections and add them to the connections\n    # dictionary:\n    for res in results:\n        # Remove all data we are not interested in keeping:\n        network_properties = [\n            'capacity',\n            'nettype',\n            'netident',\n            'layer',\n            'vlan',\n            'local_sysname',\n            'local_netboxid',\n            'local_interface',\n            'local_portid',\n            'local_gwportid',\n            'local_swportid',\n            'remote_sysname',\n            'remote_netboxid',\n            'remote_interface',\n            'remote_portid',\n            'remote_gwportid',\n            'remote_swportid',\n        ]\n        res = subdict(res, network_properties)\n\n        # Create a reversed version of the connection (this has all\n        # remote_*/local_* swapped and has load data from the opposite\n        # end):\n        reverse = res.copy()\n        reversable_properties = [\n            'sysname',\n            'netboxid',\n            'interface',\n            'portid',\n            'gwportid',\n            'swportid',\n        ]\n        for prop in reversable_properties:\n            reverse.swap('local_' + prop, 'remote_' + prop)\n\n        for d in res, reverse:\n            d['load'] = (float('nan'), float('nan'))\n            d['load_in'] = float('nan')\n            d['load_out'] = float('nan')\n\n        connection_id = \"%s-%s\" % (res['local_sysname'], res['remote_sysname'])\n        connection_rid = \"%s-%s\" % (res['remote_sysname'], res['local_sysname'])\n        res['id'] = connection_id\n        reverse['id'] = connection_rid\n\n        connection = {'forward': res, 'reverse': reverse}\n\n        if connection_id not in connections and connection_rid not in connections:\n            connections[connection_id] = connection\n        else:\n            for existing_id, existing_conn in connections.items():\n                if existing_id in (connection_id, connection_rid):\n                    existing_capacity = existing_conn[\"forward\"][\"capacity\"] or 0\n                    result_capacity = res[\"capacity\"] or 0\n                    if existing_capacity < result_capacity:\n                        connections[existing_id] = connection\n\n    db_cursor.execute(QUERY_NETBOXES)\n    netboxes = [lazy_dict(row) for row in db_cursor.fetchall()]\n    for netbox in netboxes:\n        netbox['load'] = float('nan')\n        netbox['real_sysname'] = netbox['sysname']\n        if _domain_suffix:\n            netbox['sysname'] = netbox['sysname'].removesuffix(_domain_suffix)\n\n    return netboxes, connections\n\n\n# TRAFFIC DATA\n\nMEGABIT = 1e6\nMETRIC_CHUNK_SIZE = 500  # number of metrics to ask for in a single request\nCACHE_TIMEOUT = 5 * 60  # 5 minutes\n\n\ndef get_cached_multiple_link_load(items, time_interval):\n    \"\"\"Cached version of get_multiple_link_load()\"\"\"\n    item_map = {k: _cache_key(k, time_interval) for k in items.keys()}\n    # cache lookup\n    cached = cache.get_many(item_map.values())\n    _logger.debug(\n        \"get_cached_multiple_link_load: got %d/%d values from cache (%r)\",\n        len(cached),\n        len(items),\n        time_interval,\n    )\n\n    # retrieve data for cache misses\n    misses = {k: v for k, v in items.items() if item_map[k] not in cached}\n    if misses:\n        get_multiple_link_load(misses, time_interval)\n\n    # set data from cache\n    reverse_item_map = {v: k for k, v in item_map.items()}\n    for cache_key, value in cached.items():\n        key = reverse_item_map[cache_key]\n        properties = items[key]\n        properties['load_in'], properties['load_out'] = value\n\n    # add new data to cache\n    missed_data = {\n        item_map[key]: (properties['load_in'], properties['load_out'])\n        for key, properties in misses.items()\n    }\n    _logger.debug(\"get_cached_multiple_link_load: caching %d values\", len(missed_data))\n    cache.set_many(missed_data, CACHE_TIMEOUT)\n\n\ndef _cache_key(*args):\n    args = (str(a).replace(' ', '') for a in args)\n    return 'geomap:load:' + ':'.join(args)\n\n\ndef get_multiple_link_load(items, time_interval):\n    \"\"\"\n    Gets the link load of the interfaces, averaged over a time interval,\n    and adds to the load properties of the items.\n\n\n    :param items: A dictionary of {(sysname, ifname): properties lazy_dict, ...}\n    :param time_interval: A dict(start=..., end=...) describing the desired\n                          time interval in terms valid to Graphite web.\n    \"\"\"\n    target_map = {}\n    for (sysname, ifname), properties in items.items():\n        if not (sysname and ifname):\n            continue\n\n        targets = [\n            metric_path_for_interface(sysname, ifname, counter)\n            for counter in ('ifInOctets', 'ifOutOctets')\n        ]\n        targets = [get_metric_meta(t)['target'] for t in targets]\n        target_map.update({t: properties for t in targets})\n\n    _logger.debug(\n        \"getting %s graphite traffic targets in chunks\", len(target_map.keys())\n    )\n    data = {}\n    for chunk in chunks(target_map.keys(), METRIC_CHUNK_SIZE):\n        data.update(_get_metric_average(chunk, time_interval))\n\n    for key, value in data.items():\n        properties = target_map.get(key, None)\n        if properties:\n            if value:\n                bps = value / MEGABIT\n                if 'ifInOctets' in key:\n                    properties['load_in'] = bps\n                elif 'ifOutOctets' in key:\n                    properties['load_out'] = bps\n        else:\n            _logger.error(\n                \"no match for key %r (%r) in data returned from graphite\", key, value\n            )\n\n    missing = set(target_map).difference(data)\n    if missing:\n        _logger.debug(\"missed %d targets in graphite response\", len(missing))\n\n\ndef get_cached_multiple_cpu_load(items, time_interval):\n    \"\"\"Cached version of get_multiple_link_load()\"\"\"\n    item_map = {k: _cache_key(k, time_interval) for k in items.keys()}\n    # cache lookup\n    cached = cache.get_many(item_map.values())\n    _logger.debug(\n        \"get_cached_multiple_cpu_load: got %d/%d values from cache (%r)\",\n        len(cached),\n        len(items),\n        time_interval,\n    )\n\n    # retrieve data for cache misses\n    misses = {k: v for k, v in items.items() if item_map[k] not in cached}\n    if misses:\n        get_multiple_cpu_load(misses, time_interval)\n\n    # set data from cache\n    reverse_item_map = {v: k for k, v in item_map.items()}\n    for cache_key, value in cached.items():\n        key = reverse_item_map[cache_key]\n        properties = items[key]\n        properties['load'] = value\n\n    # add new data to cache\n    missed_data = {\n        item_map[key]: properties['load'] for key, properties in misses.items()\n    }\n    _logger.debug(\"get_cached_multiple_cpu_load: caching %d values\", len(missed_data))\n    cache.set_many(missed_data, CACHE_TIMEOUT)\n\n\ndef get_multiple_cpu_load(items, time_interval):\n    \"\"\"\n    Gets the CPU load of netboxes, averaged over a time interval, and adds to\n    the load properties of the items.\n\n    :param items: A dictionary of {sysname: properties lazy_dict, ...}\n    :param time_interval: A dict(start=..., end=...) describing the desired\n                          time interval in terms valid to Graphite web.\n    \"\"\"\n    target_map = {\n        escape_metric_name(sysname): netbox for sysname, netbox in items.items()\n    }\n    targets = []\n    for sysname, netbox in items.items():\n        if not sysname:\n            continue\n\n        targets.extend(\n            [\n                'highestMax(%s,1)' % path\n                for path in (\n                    metric_path_for_cpu_load(sysname, '*', interval=5),\n                    metric_path_for_cpu_utilization(sysname, '*'),\n                )\n            ]\n        )\n\n    _logger.debug(\"getting %s graphite cpu targets in chunks\", len(targets))\n    data = {}\n    for chunk in chunks(targets, METRIC_CHUNK_SIZE):\n        data.update(_get_metric_average(chunk, time_interval))\n\n    for key, value in data.items():\n        for sysname, netbox in target_map.items():\n            if sysname in key:\n                if not is_nan(value):\n                    netbox['load'] = value\n                    break\n\n\ndef _get_metric_average(targets, time_interval):\n    try:\n        data = get_metric_average(\n            targets, start=time_interval['start'], end=time_interval['end']\n        )\n        _logger.debug(\n            \"graphite returned %s metrics from %s targets\", len(data), len(targets)\n        )\n        return data\n    except GraphiteUnreachableError as err:\n        _logger.error(\n            \"graphite unreachable on load query for %s targets (%r): %s\",\n            len(targets),\n            time_interval,\n            err,\n        )\n        if isinstance(err.cause, HTTPError):\n            _logger.debug(\"error cause: %s\", err.cause.read())\n        return {}\n"
  },
  {
    "path": "python/nav/web/geomap/features.py",
    "content": "#\n# Copyright (C) 2009, 2010 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Create points, lines and popups based on a graph.\n\nThe terminology (in particular, the words 'feature' and 'geometry')\nand data representation used in this module are based on GeoJSON[1].\n\nA _feature_ is a point or a line. A feature has an associated\n_geometry_, which specifies the type ('Point' or 'LineString') and\ncoordinates of the feature. A feature also has a color and a size, and\na popup box (these are our own additions, not from GeoJSON). A feature\nalso has a set of properties, which are arbitrary key/value pairs.\n\n___\n\n1: http://geojson.org/geojson-spec.html\n\n\"\"\"\n\nimport os\nimport logging\nfrom functools import partial\n\nfrom django.template import engines\n\nfrom nav.config import open_configfile\nfrom nav.web.geomap.conf import get_configuration\n\n# is_nan must be available in the global namespace for the proper evaluation of\n# some indicator rules\nfrom nav.web.geomap.utils import union_dict, subdict, concat_list, is_nan  # noqa: F401\n\n_logger = logging.getLogger('nav.web.geomap.features')\n\n_node_feature_properties = []\n_edge_feature_properties = []\n\n\ndef create_features(variant, graph, do_create_edges=True):\n    \"\"\"Create features (points/lines) and popups from a graph.\"\"\"\n    variant_config = get_configuration()['variants'][variant]\n    indicators = variant_config['indicators']\n    styles = variant_config['styles']\n    template_files = variant_config['template_files']\n    node_popup_template = load_popup_template(template_files['node_popup'])\n    node_feature_creator = partial(\n        create_node_feature,\n        popup_template=node_popup_template,\n        default_style=styles['node'],\n        indicators=indicators['node'],\n    )\n    nodes = [node_feature_creator(n) for n in graph.nodes.values()]\n    edges = []\n    if do_create_edges:\n        edge_popup_template = load_popup_template(template_files['edge_popup'])\n        edge_feature_creator = partial(\n            create_edge_features,\n            popup_template=edge_popup_template,\n            default_style=styles['edge'],\n            indicators=indicators['edge'],\n        )\n        edges = concat_list([edge_feature_creator(e) for e in graph.edges.values()])\n\n    return nodes + edges\n\n\ndef load_popup_template(filename):\n    \"\"\"Loads the template for a popup.\n\n    :param filename: name of a configuration file containing template source\n                     (relative to the geomap configuration directory)\n\n    :returns: A django.template.backends.django.Template object.\n    \"\"\"\n    if filename is None:\n        return None\n    filename = os.path.join('geomap', filename)\n    with open_configfile(filename) as afile:\n        content = afile.read()\n    django_engine = engines['django']\n    return django_engine.from_string(content)\n\n\ndef apply_indicator(ind, properties):\n    \"\"\"Apply an indicator to a list of properties.\n\n    The indicator specifies how to select a value for some style\n    property based on the properties. It contains a list of possible\n    values, each combined with a test expression which determines\n    whether it should be selected. Each test expression is evaluated\n    with properties as environment.\n\n    The result is a single-item dictionary with the style property\n    controlled by the indicator mapped to the computed value.\n\n    \"\"\"\n    for option in ind['options']:\n        try:\n            # Properties must be passed as locals, not globals, since\n            # it may not be a dict object (we use lazy_dict from\n            # utils.py). (See documentation of eval).\n            #\n            # Besides, we need to send the current globals() as\n            # globals in order to make our functions available to the\n            # configuration file (this is of course dangerous, since\n            # it allows the configuration file to do all kinds of\n            # nasty stuff, but it is also quite useful).\n            test_result = eval(option['test'], globals(), properties)\n        except Exception as err:  # noqa: BLE001\n            _logger.warning(\n                'Exception when evaluating test \"%s\" for indicator '\n                '\"%s\" on properties %s: %s',\n                option['test'],\n                ind['name'],\n                properties,\n                err,\n            )\n            continue\n        if test_result:\n            return {ind['property']: option['value']}\n    _logger.warning(\n        'No tests in indicator %s matched properties %s', ind['name'], properties\n    )\n\n\ndef apply_indicators(indicators, properties):\n    \"\"\"Apply a list of indicators to a list of properties.\"\"\"\n    applicator = partial(apply_indicator, properties=properties)\n    return union_dict(*[applicator(i) for i in indicators])\n\n\ndef create_node_feature(node, popup_template, default_style, indicators):\n    \"\"\"Create a feature representing a node.\n\n    Arguments:\n\n    node -- Node object (see graph.py)\n\n    popup_template -- template for the contents of the popup\n\n    default_style -- style values to use for properties which have no\n    indicator\n\n    indicators -- specifications of style properties based on\n    properties of the node\n\n    \"\"\"\n    style = union_dict(default_style, apply_indicators(indicators, node.properties))\n    return Feature(\n        node.id,\n        'node',\n        Geometry('Point', [node.lon, node.lat]),\n        style['color'],\n        style['size'],\n        create_node_popup(node, popup_template),\n        subdict(node.properties, _node_feature_properties),\n    )\n\n\ndef create_node_popup(node, popup_template):\n    \"\"\"Create the popup for a node.\"\"\"\n    if popup_template is None:\n        return None\n    content = popup_template.render({'place': node.properties})\n    return Popup('popup-' + node.id, [300, 250], content, True)\n\n\ndef create_edge_features(edge, popup_template, default_style, indicators):\n    \"\"\"Create features representing an edge.\n\n    Each edge is represented by _two_ features: one for each\n    direction. Both features are lines; each goes from one endpoint of\n    the edge to the point halfway between the endpoints. When applying\n    indicators, an additional property 'load' is supplied, with value\n    taken from 'load_in'/'load_out' depending on the direction.\n\n    The popup is the same for both features.\n\n    Return value: List of two features.\n\n    Arguments:\n\n    edge -- an Edge object (see graph.py)\n\n    popup_template -- template for the contents of the popup\n\n    default_style -- style values to use for properties which have no\n    indicator\n\n    indicators -- specifications of style properties based on\n    properties of the edge\n\n    \"\"\"\n\n    def make_feature(source_coords, target_coords, data):\n        style = union_dict(default_style, apply_indicators(indicators, data))\n        popup = create_edge_popup(data, popup_template)\n        return Feature(\n            data['id'],\n            'edge',\n            Geometry('LineString', [source_coords, target_coords]),\n            style['color'],\n            style['size'],\n            popup,\n        )\n\n    source = [edge.source.lon, edge.source.lat]\n    middle = [\n        (edge.source.lon + edge.target.lon) / 2,\n        (edge.source.lat + edge.target.lat) / 2,\n    ]\n    target = [edge.target.lon, edge.target.lat]\n    return [\n        make_feature(source, middle, edge.source_data),\n        make_feature(middle, target, edge.target_data),\n    ]\n\n\ndef create_edge_popup(data, popup_template):\n    \"\"\"Create the popup for a node.\"\"\"\n    if popup_template is None:\n        return None\n    content = popup_template.render({'network': data})\n    return Popup('popup-' + data['id'], [300, 250], content, True)\n\n\nclass Feature(object):\n    \"\"\"Feature attributes\"\"\"\n\n    def __init__(self, id_, typ, geometry, color, size, popup, properties=None):\n        self.id = id_\n        self.type = typ\n        self.geometry = geometry\n        self.color = color\n        self.size = size\n        self.popup = popup\n        self.properties = properties if properties is not None else {}\n\n\nclass Geometry(object):\n    \"\"\"Geometry attributes\"\"\"\n\n    def __init__(self, typ, coordinates):\n        self.type = typ\n        self.coordinates = coordinates\n\n\nclass Popup(object):\n    \"\"\"Popup attributes\"\"\"\n\n    def __init__(self, id_, size, content, closable):\n        self.id = id_\n        self.size = size\n        self.content = content\n        self.closable = closable\n"
  },
  {
    "path": "python/nav/web/geomap/graph.py",
    "content": "#\n# Copyright (C) 2009, 2010, 2013, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Graph representation and manipulation.\"\"\"\n\nimport logging\n\nfrom math import sqrt\nfrom nav.web.geomap.utils import (\n    map_dict,\n    nansafe_max,\n    identity,\n    first,\n    group,\n    avg,\n    filter_dict,\n    subdict,\n    map_dict_lazy,\n)\n\n_logger = logging.getLogger('nav.web.geomap.graph')\n\n\n# Specifications of how to combine the properties when combining nodes\n# and edges:\n\nAGGREGATE_PROPERTIES_PLACE = {\n    'load': (nansafe_max, 'load'),\n    'num_rooms': len,\n    'num_netboxes': (sum, 'num_netboxes'),\n    'rooms': identity,\n}\n\nAGGREGATE_PROPERTIES_ROOM = {\n    'id': (first, 'roomid'),\n    'descr': (first, 'room_descr'),\n    'load': (nansafe_max, 'load'),\n    'num_netboxes': len,\n    'netboxes': identity,\n}\n\nAGGREGATE_PROPERTIES_EDGE = {\n    'id': lambda edges: 'ce[%s]' % combine_ids(edges, lambda e: e['id']),\n    'num_edges': len,\n    'capacity': (sum, 'capacity'),\n    'load_in': (sum, 'load_in'),\n    'load_out': (sum, 'load_out'),\n    'subedges': identity,\n}\n\n\ndef build_graph(db_results):\n    \"\"\"Make a Graph object based on the dictionaries resulting from get_data.\"\"\"\n    (netboxes, connections) = db_results\n    graph = Graph()\n\n    # create Node objects:\n    for netbox in netboxes:\n        graph.add_node(Node(netbox['netboxid'], netbox['lon'], netbox['lat'], netbox))\n\n    # create Edge objects:\n    for connection in connections.values():\n        if (\n            connection['forward']['local_netboxid'] not in graph.nodes\n            or connection['reverse']['local_netboxid'] not in graph.nodes\n        ):\n            continue\n        graph.add_edge(\n            Edge(\n                connection['forward']['id'],\n                connection['reverse']['id'],\n                graph.nodes[connection['forward']['local_netboxid']],\n                graph.nodes[connection['reverse']['local_netboxid']],\n                connection['forward'],\n                connection['reverse'],\n            )\n        )\n\n    return graph\n\n\ndef simplify(graph, bounds, viewport_size, limit):\n    \"\"\"Remove and combine edges and nodes in a graph.\n\n    Objects outside the interesting area (given by bounds) are\n    removed, and those that are inside are combined so that they are\n    not too close together (based on viewport_size and limit).\n\n    Arguments:\n\n    graph -- the Graph object to simplify.  It is destructively\n    modified.\n\n    bounds -- a dictionary with keys (minLon, maxLon, minLat, maxLat)\n    describing the bounds of the interesting region.\n\n    viewport_size -- a dictionary with keys (width, height), the width\n    and height of the user's viewport for the map in pixels.\n\n    limit -- the minimum distance (in pixels) there may be between two\n    points without them being collapsed to one.\n\n    \"\"\"\n    area_filter(graph, bounds)\n    create_rooms(graph)\n    create_places(graph, bounds, viewport_size, limit)\n    combine_edges(graph, AGGREGATE_PROPERTIES_EDGE)\n\n\ndef area_filter(graph, bounds):\n    \"\"\"Restrict a graph to a geographical area.\n\n    Removes objects outside bounds from graph.  An edge is retained if\n    at least one of its endpoints is inside bounds.  A node is\n    retained if it is an endpoint of such an edge (even if the node\n    itself is outside bounds).\n\n    Arguments:\n\n    graph -- the Graph object to filter.  It is destructively\n    modified.\n\n    bounds -- a dictionary with keys (minLon, maxLon, minLat, maxLat)\n    describing the bounds of the interesting region.\n\n    \"\"\"\n\n    def in_bounds(node):\n        \"\"\"Check if node is within bounds\"\"\"\n        return (\n            bounds['minLon'] <= node.lon <= bounds['maxLon']\n            and bounds['minLat'] <= node.lat <= bounds['maxLat']\n        )\n\n    def edge_connected_to(edge, nodehash):\n        \"\"\"Check if edge is connected to a node in the nodehash\"\"\"\n        return edge.source.id in nodehash or edge.target.id in nodehash\n\n    nodes = filter_dict(in_bounds, graph.nodes)\n    edges = filter_dict(lambda edge: edge_connected_to(edge, nodes), graph.edges)\n    node_ids = (\n        set(nodes.keys())\n        | {e.source.id for e in edges.values()}\n        | {e.target.id for e in edges.values()}\n    )\n    graph.nodes = subdict(graph.nodes, node_ids)\n    graph.edges = edges\n\n\ndef create_rooms(graph):\n    \"\"\"Convert a graph of netboxes to a graph of rooms.\n\n    graph is assumed to have one nodes representing netboxes.  These\n    are combined so that there is one node for each room.  Each room\n    node has a property 'netboxes' (available as\n    roomnode.properties['netboxes']) which is a list of the original\n    nodes it is based on.\n\n    Arguments:\n\n    graph -- a Graph object.  It is destructively modified.\n\n    \"\"\"\n    collapse_nodes(\n        graph,\n        group(lambda node: node.properties['roomid'], graph.nodes.values()),\n        AGGREGATE_PROPERTIES_ROOM,\n    )\n\n\ndef create_places(graph, bounds, viewport_size, limit):\n    \"\"\"Convert a graph of rooms to a graph of 'places'.\n\n    A 'place' is a set of one or more rooms.  The position of a place\n    is the average of the positions of its rooms.  The places are\n    created such that no two places are closer than limit to each\n    other.  Each place node has a property 'rooms' (available as\n    placenode.properties['rooms']) which is a list of the room nodes\n    it is based on.\n\n    Arguments:\n\n    graph -- a Graph object.  It is destructively modified.\n\n    bounds -- a dictionary with keys (minLon, maxLon, minLat, maxLat)\n    describing the bounds of the interesting region.\n\n    viewport_size -- a dictionary with keys (width, height), the width\n    and height of the user's viewport for the map in pixels.\n\n    limit -- the minimum distance (in pixels) there may be between two\n    points without them being collapsed to one.\n\n    \"\"\"\n    # TODO:\n    #\n    # -- This may give division by zero with bogus input (should check\n    #    for zeros -- what should we do then?)\n    #\n    # -- Should take into account that longitudes wrap around. Is\n    #    there any way to detect whether we have a map wider than the\n    #    earth, or do we need an extra parameter?\n    width = bounds['maxLon'] - bounds['minLon']\n    height = bounds['maxLat'] - bounds['minLat']\n    lon_scale = float(viewport_size['width']) / width\n    lat_scale = float(viewport_size['height']) / height\n\n    def square(var):\n        \"\"\"Square a number\"\"\"\n        return var * var\n\n    def distance(node1, node2):\n        \"\"\"Calculate distance from node1 to node2\"\"\"\n        return sqrt(\n            square((node1.lon - node2.lon) * lon_scale)\n            + square((node1.lat - node2.lat) * lat_scale)\n        )\n\n    places = []\n    for node in graph.nodes.values():\n        for place in places:\n            if distance(node, place['position']) < limit:\n                place['rooms'].append(node)\n                place['position'].lon = avg([n.lon for n in place['rooms']])\n                place['position'].lat = avg([n.lat for n in place['rooms']])\n                break\n        else:\n            places.append(\n                {'position': Node(None, node.lon, node.lat, None), 'rooms': [node]}\n            )\n    collapse_nodes(\n        graph, [place['rooms'] for place in places], AGGREGATE_PROPERTIES_PLACE\n    )\n\n\ndef collapse_nodes(graph, node_sets, property_aggregators):\n    \"\"\"Collapse sets of nodes to single nodes.\n\n    Replaces each set of nodes in node_sets by a single (new) node and\n    redirects the edges correspondingly.  Edges which would end up\n    having both endpoints in the same node are removed.\n\n    Each new node is positioned at the average of the positions of the\n    node set it represents.  It also gets a property containing the\n    original nodes; the name of this property is given by\n    subnode_list_name.\n\n    Properties from the original nodes may be combined to form\n    aggregate values in the new node.  The property_aggregators\n    argument determines how (and whether) this is done.  Some useful\n    aggregator functions are sum and avg (for numbers) and lambda lst:\n    ', '.join(map(str, lst)).\n\n    Arguments:\n\n    graph -- a Graph object.  It is destructively modified.\n\n    node_sets -- a list of lists of nodes in graph.  Each node should\n    occur in exactly one of the lists.\n\n    subnode_list_name -- name for the property containing the original\n    nodes a newly created node represents.\n\n    property_aggregators -- describes how to create aggregate\n    properties.  Dictionary with names of properties as keys and\n    aggregator functions as corresponding values.  Each aggregator\n    function should take a single argument, a list.\n\n    \"\"\"\n    if property_aggregators is None:\n        property_aggregators = {}\n    graph.nodes = {}\n    nodehash = {}\n    for node_set in node_sets:\n        properties = aggregate_properties(\n            [x.properties for x in node_set], property_aggregators\n        )\n        new_node = Node(\n            'cn[%s]' % combine_ids(node_set),\n            avg([n.lon for n in node_set]),\n            avg([n.lat for n in node_set]),\n            properties,\n        )\n        for node in node_set:\n            nodehash[node.id] = new_node\n        graph.add_node(new_node)\n    # Now nodehash maps original node ids to new node objects.  Use it\n    # to redirect the edges to the new nodes:\n    for edge in graph.edges.values():\n        edge.source = nodehash[edge.source.id]\n        edge.target = nodehash[edge.target.id]\n    graph.edges = filter_dict(lambda e: e.source != e.target, graph.edges)\n\n\ndef combine_ids(objects, get_id=lambda o: o.id):\n    \"\"\"Combine the IDs of a list (or set) of objects to a string.\n\n    Used when generating IDs for collapsed objects.  The IDs are\n    sorted so that the resulting ID is uniquely determined by the set\n    of objects.\n\n    \"\"\"\n    ids = [str(get_id(o)) for o in objects]\n    ids.sort()\n    return ';'.join(ids)\n\n\ndef aggregate_properties(objects, aggregators):\n    \"\"\"Combine the properties of a list of objects.\n\n    Constructs a lazy dictionary (see class lazy_dict in utils.js) of\n    properties.\n\n    Arguments:\n\n    objects -- a list of Node or Edge objects\n\n    aggregators -- dictionary, specifies how to combine the\n    properties. For each item in aggregators, a property with the same\n    key is created. The aggregator value should be either a function,\n    in which case the property value is created by calling that\n    function on the list of objects; or a pair (function, prop), in\n    which case the property value is created by calling the function\n    on a list containing each object's value for property prop.\n\n    \"\"\"\n\n    def apply_aggregator(aggr):\n        \"\"\"Run aggregator with objects as arguments\"\"\"\n        if isinstance(aggr, tuple):\n            fun = aggr[0]\n            prop = aggr[1]\n            lst = [x[prop] for x in objects]\n        else:\n            fun = aggr\n            lst = objects\n        return fun(lst)\n\n    return map_dict_lazy(apply_aggregator, aggregators)\n\n\ndef combine_edges(graph, property_aggregators):\n    \"\"\"Combine edges with the same endpoints.\n\n    Replaces the edges in graph with new edge objects, where any set\n    of edges between the same two nodes is replaced by a single edge.\n    Each new edge has a property 'subedges'\n    (edge.properties['subedges']) which contains the original edge\n    objects.\n\n    Arguments:\n\n    graph -- a Graph object.  It is destructively modified.\n\n    \"\"\"\n    if property_aggregators is None:\n        property_aggregators = {}\n    edges_by_node = {node_id: set() for node_id in graph.nodes}\n    for edge in graph.edges.values():\n        edges_by_node[edge.source.id].add(edge)\n        edges_by_node[edge.target.id].add(edge)\n    edge_sets = {}\n    for edge in graph.edges.values():\n        if edge.id in edge_sets:\n            continue\n        eset = list(edges_by_node[edge.source.id] & edges_by_node[edge.target.id])\n        for edge_set in eset:\n            edge_sets[edge_set] = eset\n\n    edge_sets = map_dict(equalize_edge_orientation, edge_sets)\n\n    edges = [create_edge(x, property_aggregators) for x in edge_sets.values()]\n    graph.edges = {e.id: e for e in edges}\n\n\ndef create_edge(eset, property_aggregators):\n    \"\"\"Creates edge from the edge set and applies properties\"\"\"\n    return Edge(\n        'ce[%s]' % combine_ids(eset),\n        'ce[%s]' % combine_ids(eset, lambda e: e.reverse_id),\n        eset[0].source,\n        eset[0].target,\n        aggregate_properties([x.source_data for x in eset], property_aggregators),\n        aggregate_properties([x.target_data for x in eset], property_aggregators),\n    )\n\n\ndef equalize_edge_orientation(edges):\n    \"\"\"Make all edges have the same direction.\n\n    Arguments:\n\n    edges -- list of edges between the same pair of nodes\n\n    \"\"\"\n    reference = edges[0]\n\n    def fix_orientation(edge):\n        \"\"\"Fix orientation of edge\"\"\"\n        if edge.source != reference.source:\n            return reverse_edge(edge)\n        return edge\n\n    return [fix_orientation(x) for x in edges]\n\n\ndef reverse_edge(edge):\n    \"\"\"Reverse the direction of an edge.\n\n    Returns a new Edge object; the argument is not modified.\n\n    \"\"\"\n    return Edge(\n        edge.reverse_id,\n        edge.id,\n        edge.target,\n        edge.source,\n        edge.target_data,\n        edge.source_data,\n    )\n\n\nclass Node:\n    \"\"\"Representation of a node in a graph.\"\"\"\n\n    def __init__(self, node_id, lon, lat, properties):\n        self.id = node_id\n        self.lon = lon\n        self.lat = lat\n        self.properties = properties\n\n    def __repr__(self):\n        return \"Node(%s)\" % self.id\n\n\nclass Edge:\n    \"\"\"Representation of an edge in a graph.\"\"\"\n\n    def __init__(self, edge_id, reverse_id, source, target, source_data, target_data):\n        self.id = edge_id\n        self.reverse_id = reverse_id\n        self.source = source\n        self.target = target\n        self.source_data = source_data\n        self.target_data = target_data\n\n    def __repr__(self):\n        return \"Edge(%s)\" % self.id\n\n\nclass Graph:\n    \"\"\"Representation of a graph of geographical positions.\"\"\"\n\n    def __init__(self):\n        self.nodes = {}\n        self.edges = {}\n\n    def add_node(self, node):\n        \"\"\"Add node to graph\"\"\"\n        self.nodes[node.id] = node\n\n    def add_edge(self, edge):\n        \"\"\"Add edge to graph\"\"\"\n        self.edges[edge.id] = edge\n"
  },
  {
    "path": "python/nav/web/geomap/output_formats.py",
    "content": "#\n# Copyright (C) 2009, 2010 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Formatting of data. Supported formats: GeoJSON, KML.\n\nSee\nhttp://geojson.org/geojson-spec.html\nhttp://code.google.com/apis/kml/\n\n\"\"\"\n\nimport json\nfrom django.template.loader import render_to_string\n\n# GeoJSON:\n\n\ndef make_geojson(featurelist):\n    \"\"\"Create the GeoJSON representation of a list of features.\n\n    The result is a GeoJSON string.\n\n    \"\"\"\n    geojson = {\n        'type': 'FeatureCollection',\n        'features': [make_geojson_feature(f) for f in featurelist],\n    }\n    return json.dumps(geojson)\n\n\ndef make_geojson_feature(feature):\n    \"\"\"Create a GeoJSON object for a feature.\"\"\"\n    popup = None\n    if feature.popup:\n        popup = {\n            'id': feature.popup.id,\n            'size': feature.popup.size,\n            'content': feature.popup.content,\n            'closable': feature.popup.closable,\n        }\n    properties = {\n        'type': feature.type,\n        'color': feature.color,\n        'size': feature.size,\n        'popup': popup,\n    }\n    properties.update(feature.properties)\n    return {\n        'type': 'Feature',\n        'id': feature.id,\n        'geometry': {\n            'type': feature.geometry.type,\n            'coordinates': feature.geometry.coordinates,\n        },\n        'properties': properties,\n    }\n\n\n# KML\n\n\ndef make_kml(featurelist):\n    return render_to_string('geomap/geomap-data-kml.xml', {'features': featurelist})\n\n\n# General\n\n\n_formats = {\n    'geojson': (make_geojson, 'application/json'),\n    'kml': (make_kml, 'application/vnd.google-earth.kml+xml'),\n}\n\n\ndef format_data(format, featurelist):\n    \"\"\"Format features in featurelist to a string.\n\n    Arguments:\n\n    format -- name of a format (key in _formats)\n\n    featurelist -- list of features\n\n    \"\"\"\n    if format not in _formats:\n        raise Exception('unknown format %s' % format)\n    formatter = _formats[format][0]\n    return formatter(featurelist)\n\n\ndef format_mime_type(format):\n    \"\"\"Returns the MIME type for the specified format.\"\"\"\n    if format not in _formats:\n        raise Exception('unknown format %s' % format)\n    return _formats[format][1]\n"
  },
  {
    "path": "python/nav/web/geomap/templatetags/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/geomap/templatetags/geomap.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django import template\n\nfrom nav.web.geomap.utils import is_nan\n\nregister = template.Library()\n\n\n@register.filter(name='nan2none')\ndef filter_nan2none(value):\n    \"\"\"Convert the NaN value to None, leaving everything else unchanged.\n\n    This function is meant to be used as a Django template filter. It\n    is useful in combination with filters that handle None (or any\n    false value) specially, such as the 'default' filter, when one\n    wants special treatment for the NaN value. It is also useful\n    before the 'format' filter to avoid the NaN value being formatted.\n\n    \"\"\"\n    if is_nan(value):\n        return None\n    return value\n\n\n@register.filter(name='format')\ndef filter_format(value, arg):\n    \"\"\"Format value according to format string arg.\n\n    This function is meant to be used as a Django template filter.\n\n    \"\"\"\n    try:\n        return arg % value\n    except TypeError:\n        return ''\n"
  },
  {
    "path": "python/nav/web/geomap/urls.py",
    "content": "#\n# Copyright (C) 2009, 2010 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL config for geomap\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.geomap import views\n\n\nurlpatterns = [\n    path('', views.forward_to_default_variant, name='geomap-forward'),\n    re_path(r'^([^/]+)/$', views.geomap, name='geomap'),\n    re_path(r'^([^/]+)/data$', views.data, name='geomap-data'),\n]\n"
  },
  {
    "path": "python/nav/web/geomap/utils.py",
    "content": "#\n# Copyright (C) 2009, 2010, 2013, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"General utility functions for Geomap.\n\nThis file contains functions which I wish were in the standard\nlibrary.\n\n\"\"\"\n\nimport math\nfrom itertools import groupby\nfrom functools import reduce\n\n\ndef identity(obj):\n    \"\"\"identity(obj) == obj for all obj\"\"\"\n    return obj\n\n\ndef group(keyfunc, lst):\n    \"\"\"Groups a list into sublists based on equality of some keyfunc.\n\n    Returns a list of sublists of lst, where every item of lst appears\n    in exactly one sublist, and two items are in the same sublist iff\n    the result of applying keyfunc (a function) to either of them\n    gives the same result.\n\n    \"\"\"\n    data = sorted(lst, key=keyfunc)\n    return [list(grp) for _key, grp in groupby(data, keyfunc)]\n\n\ndef avg(lst):\n    \"\"\"\n    Computes the average of the values in lst.\n\n    :param lst: A list of numbers.\n    :return: An average value of the list.\n\n    \"\"\"\n    if not lst:\n        return 0\n    return float(sum(lst)) / len(lst)\n\n\ndef weighted_avg(lst):\n    \"\"\"\n    Computes a weighted average.\n\n    :param lst: a list of tuples (value, weight)\n    :return: A weighted average.\n\n    \"\"\"\n    if not lst:\n        return 0\n    total = sum(value * weight for value, weight in lst)\n    num = sum(weight for value, weight in lst)\n    return float(total) / num\n\n\ndef argmax(fun, lst):\n    \"\"\"\n    Finds the element of lst with the maximum fun(lst) value.\n\n    :param fun: The single-argument function to maximize\n    :param lst: List of values.\n    :return: The element of lst with the maximum fun(lst) value.\n\n    \"\"\"\n    return sorted(lst, key=fun)[-1]\n\n\ndef nansafe_max(lst):\n    \"\"\"Find the maximum value in lst, ignoring any NaN values.\n\n    The builtin max function (on my system, at least) returns NaN if\n    the first value is NaN and the maximum of the non-NaN values in\n    all other cases; which means it gives different results for\n    different permutations of a list when both NaN and other values\n    are involved.\n\n    This function returns NaN if and only if _all_ values in lst are\n    NaN; otherwise it returns the largest non-NaN value.\n\n    \"\"\"\n    try:\n        return max(v for v in lst if not is_nan(v))\n    except ValueError:\n        return float('nan')\n\n\ndef numeric(obj):\n    \"\"\"Check whether an object is a number.\"\"\"\n    return isinstance(obj, int) or isinstance(obj, float)\n\n\ndef float_or_nan(string):\n    \"\"\"Convert a string to a float if possible, otherwise return the NaN value.\"\"\"\n    try:\n        return float(string)\n    except ValueError:\n        return float('nan')\n\n\ndef is_nan(val):\n    \"\"\"Verifies whether val is the special NaN floating point value.\"\"\"\n    try:\n        return math.isnan(val)\n    except TypeError:\n        return False\n\n\ndef compose(*functions):\n    \"\"\"Function composition.\n\n    Each argument should be a single-argument function.\n\n    The return value is a function such that the following holds for\n    any x:\n\n      compose(f_1, f_2, ..., f_n)(x) == f_1(f_2(...(f_n(x))))\n\n    \"\"\"\n    return reduce(lambda f1, f2: lambda x: f1(f2(x)), functions)\n\n\ndef subdict(dct, keys):\n    \"\"\"Restriction of dictionary to some keys.\n\n    dct should be a dictionary (or lazy_dict) and keys a list whose\n    items are keys of dct.  Returns a new dictionary object; dct is not\n    modified.  If dct is a lazy_dict, the result is also a lazy_dict.\n\n    \"\"\"\n    if isinstance(dct, lazy_dict):\n        newdct = dct.copy()\n        for k in dct.keys():\n            if k not in keys:\n                del newdct[k]\n        return newdct\n    else:\n        return {k: dct[k] for k in keys}\n\n\ndef filter_dict(fun, dct):\n    \"\"\"Filter a dictionary on values.\n\n    Like the built-in filter, except that dct is a dictionary, and fun\n    is applied to each value. The result is a new dictionary\n    containing those (key,value) pairs from dct for which fun(value) is\n    true.\n\n    \"\"\"\n    return subdict(dct, [key for key, val in dct.items() if fun(val)])\n\n\ndef map_dict(fun, dct):\n    \"\"\"Map over a dictionary's values.\n\n    Returns a new dictionary which is like dct except that each value is\n    replaced by the result of applying fun to it.\n\n    \"\"\"\n    return {k: fun(v) for k, v in dct.items()}\n\n\ndef union_dict(*dicts):\n    \"\"\"Combine dictionaries.\n\n    Combines all arguments (which should be dictionaries) to a single\n    dictionary. If several dictionaries contain the same key, the last\n    is used.\n\n    \"\"\"\n    lazy_p = any(isinstance(d, lazy_dict) for d in dicts)\n    if lazy_p:\n        result = lazy_dict()\n    else:\n        result = {}\n    for dct in dicts:\n        result.update(dct)\n    return result\n\n\ndef concat_list(lists):\n    \"\"\"Concatenate a list of lists.\"\"\"\n    return reduce(lambda a, b: a + b, lists, [])\n\n\ndef concat_str(strs):\n    \"\"\"Concatenate a list of strings.\"\"\"\n    return reduce(lambda a, b: a + b, strs, '')\n\n\nclass lazy_dict(object):\n    \"\"\"A dictionary with values that are computed only when needed.\n\n    This class provides a very limited form of lazy evaluation. When\n    setting a value in the dictionary, the value may be given either\n    directly as when using an ordinary dictionary, or indirectly by a\n    function for computing it. In the latter case, the function will\n    be called (and the resulting value stored for later lookups) the\n    first time the value is read from the dictionary.\n\n    A lazy_dict may be used mostly as a dictionary. Values are read\n    and written with the usual bracket notation (d[key]). For lazy\n    values, a double bracket notation is provided. To set a lazy\n    value, use\n\n      d[[key]] = function\n\n    or\n\n      d[[key]] = (function, arg1, arg2, ...).\n\n    If the same key is later looked up with single brackets, this\n    function is called with these arguments (if any) and the resulting\n    value returned.\n\n    Double brackets may also be used for reading to copy a value (to\n    another lazy_dict or a different key in the same dictionary)\n    without evaluating it:\n\n      d1[[key1]] = d2[[key2]].\n\n    (The double bracket notation is not any special syntax, just a\n    trick to create something which looks like it. As far as Python is\n    concerned, the outermost brackets are exactly the same as in\n    single bracket notation, while the inner brackets denote list\n    construction. The bracket functionality is implemented by\n    __getitem__ and __setitem__ (since Python automagically translates\n    the expression d[k] to d.__getitem__(k) and the statement d[k]=v\n    to d.__setitem__(k,v)), and these simply check whether their first\n    argument is a list in order to determine whether single or double\n    brackets are used. (Note that a list can not be used as a\n    dictionary key, so this does not interfere with potential keys)).\n\n    \"\"\"\n\n    unevaluated = None  # set of keys whose values are not evaluated\n    storage = None  # dictionary for storing functions and evaluated values\n\n    def __init__(self, *args, **kwargs):\n        self.unevaluated = set([])\n        self.storage = dict(*args, **kwargs)\n\n    def __getitem__(self, key):\n        \"\"\"d.__getitem__(k) <==> d[k]\"\"\"\n        if isinstance(key, list):\n            real_key = key[0]\n            val = self.storage[real_key]\n            if real_key in self.unevaluated:\n                return val\n            else:\n                return {'value': val}\n        else:\n            self.force(key)\n            return self.storage[key]\n\n    def __contains__(self, key):\n        \"\"\"d.__contains__(k) <==> k in d\"\"\"\n        return self.storage.__contains__(key)\n\n    def copy(self):\n        \"\"\"Returns a new lazy_dict with the same contents as this.\n\n        Lazy (unevaluated) values are preserved as such in the\n        copy. If any of these values is later looked up in either the\n        original or in the copy, it will still remain unevaluated in\n        the other one.\n\n        \"\"\"\n        cpy = lazy_dict()\n        for key in self.keys():\n            cpy[[key]] = self[[key]]\n        return cpy\n\n    def get(self, key, default=None):\n        \"\"\"Returns self[key] if key is a key in self, default otherwise.\"\"\"\n        return self.force_and_call(key, 'get', key, default)\n\n    def keys(self):\n        \"\"\"Returns the dictionary's keys as a list.\"\"\"\n        return self.storage.keys()\n\n    def items(self):\n        \"\"\"Returns all (key,value) pairs (like dict.items).\n\n        This forces all values to be evaluated.\n\n        \"\"\"\n        return self.force_and_call(None, 'items')\n\n    def update(self, dict1, **dict2):\n        \"\"\"Add values from another dictionary and/or keyword arguments.\n\n        If dict1 is a lazy_dict, laziness is preserved for elements added\n        from it.\n\n        \"\"\"\n        if isinstance(dict1, lazy_dict):\n            for key in dict1.keys():\n                self[[key]] = dict1[[key]]\n        else:\n            for key in dict1.keys():\n                self[key] = dict1[key]\n        if dict2:\n            self.update(dict2)\n\n    def values(self):\n        \"\"\"Returns all the dictionary's values as a list.\n\n        This forces all values to be evaluated.\n\n        \"\"\"\n        return self.force_and_call(None, 'values')\n\n    def __setitem__(self, key, val):\n        \"\"\"d.__setitem__(key, val) <==> d[key] = val.\"\"\"\n        if isinstance(key, list):\n            real_key = key[0]\n            if isinstance(val, dict):\n                if 'value' in val:\n                    val = val['value']\n                else:\n                    self.unevaluated.add(real_key)\n                self.storage[real_key] = val\n            else:\n                if isinstance(val, tuple):\n                    fun = val[0]\n                    args = val[1:]\n                else:\n                    fun = val\n                    args = []\n                self.set_lazy(real_key, fun, *args)\n        else:\n            self.storage[key] = val\n            self.unevaluated.discard(key)\n\n    def set_lazy(self, key, fun, *args):\n        \"\"\"Set a lazy value.\n\n        Double bracket notation may be used instead of this function:\n        d.set_lazy(k, f, a1, a2) is equivalent to d[[k]] = (f, a1, a2).\n\n        \"\"\"\n        self.storage[key] = {'fun': fun, 'args': args}\n        self.unevaluated.add(key)\n\n    def __delitem__(self, key):\n        \"\"\"d.__delitem__(key) <==> del d[key].\"\"\"\n        del self.storage[key]\n        self.unevaluated.discard(key)\n\n    def remove_if_present(self, key):\n        \"\"\"Remove key key from dictionary if it is present.\"\"\"\n        if key in self:\n            del self[key]\n\n    def swap(self, key1, key2):\n        \"\"\"Swap the values at keys key1 and key2.\"\"\"\n        self[[key1]], self[[key2]] = self[[key2]], self[[key1]]\n\n    def __repr__(self):\n        return '<lazy_dict %s>' % self.storage\n\n    def force(self, key):\n        \"\"\"Force certain value(s) to be evaluated.\n\n        If key is None, evaluate all values. If key is a list evaluate\n        self[k] for each k in key. Otherwise, evaluate d[key].\n\n        \"\"\"\n        if not self.unevaluated:\n            return\n        if key is None:\n            self.force(self.keys())\n        elif isinstance(key, list):\n            for k in key:\n                self.force(k)\n        elif key in self.unevaluated:\n            fun = self.storage[key]['fun']\n            args = self.storage[key]['args']\n            val = fun(*args)\n            self.storage[key] = val\n            self.unevaluated.remove(key)\n\n    def force_and_call(self, key, method, *args):\n        \"\"\"Call a method on the underlying dict after forcing evaluation of key.\"\"\"\n        self.force(key)\n        return type(dict).__getattribute__(dict, method)(self.storage, *args)\n\n\ndef map_dict_lazy(fun, dct):\n    \"\"\"Like map_dict, but produces a lazy_dict instead of a dict.\n\n    Each value in the dictionary is set lazily.\"\"\"\n    res = lazy_dict()\n    for key in dct:\n        res.set_lazy(key, fun, dct[key])\n    return res\n\n\ndef first(lst):\n    \"\"\"Extract the first element from a list or other indexable object.\"\"\"\n    return lst[0]\n"
  },
  {
    "path": "python/nav/web/geomap/views.py",
    "content": "#\n# Copyright (C) 2009, 2010, 2014, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Views for Geomap.\"\"\"\n\nimport logging\nfrom decimal import Decimal\n\nimport psycopg2.extras\n\nfrom django.http import HttpResponse\nfrom django.http import HttpResponseForbidden\nfrom django.http import HttpResponseRedirect\nfrom django.http import Http404\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\nimport nav.db\nfrom nav.web.auth.utils import get_account\n\nfrom nav.web.geomap.conf import get_configuration\nfrom nav.web.geomap.db import (\n    get_data,\n    get_cached_multiple_link_load,\n    get_cached_multiple_cpu_load,\n)\nfrom nav.web.geomap.graph import build_graph\nfrom nav.web.geomap.graph import simplify\nfrom nav.web.geomap.features import create_features\nfrom nav.web.geomap.output_formats import format_data\nfrom nav.web.geomap.output_formats import format_mime_type\n\nfrom nav.models.manage import Room\n\n_logger = logging.getLogger(__name__)\n\nDEFAULT_LON = Decimal('10.4059409151806')\nDEFAULT_LAT = Decimal('63.4141131037476')\n\nDEFAULT_VARIANCE = Decimal('0.5')\n\nfetched_rooms = None\n\n\ndef _get_rooms_with_pos():\n    \"\"\"\n    Cache already fetched rows from database.\n    \"\"\"\n    global fetched_rooms\n    if not fetched_rooms:\n        fetched_rooms = Room.objects.filter(position__isnull=False)\n    return fetched_rooms\n\n\ndef geomap_all_room_pos():\n    \"\"\"\n    Collect all room-positions (longitude and latitude) and return\n    them as points in an array: [(lon, lat), (lon,lat), ...]\n    \"\"\"\n    multi_points = [\n        (DEFAULT_LON - DEFAULT_VARIANCE, DEFAULT_LAT - DEFAULT_VARIANCE),\n        (DEFAULT_LON + DEFAULT_VARIANCE, DEFAULT_LAT + DEFAULT_VARIANCE),\n    ]\n    rooms_with_pos = _get_rooms_with_pos()\n    if rooms_with_pos:\n        multi_points = []\n        for room in rooms_with_pos:\n            room_lat, room_lon = room.position\n            multi_points.append((room_lon, room_lat))\n    return multi_points\n\n\ndef geomap(request, variant):\n    \"\"\"Create the page showing the map.\n\n    variant must be a variant name defined in the configuration file.\n\n    \"\"\"\n    config = get_configuration()\n    if variant not in config['variants']:\n        raise Http404\n    room_points = geomap_all_room_pos()\n    _logger.debug('geomap: room_points = %s', room_points)\n    variant_config = config['variants'][variant]\n\n    context = {\n        'title': 'NAV - Geomap',\n        'navpath': [('Home', '/'), ('Geomap', None)],\n        'room_points': room_points,\n        'config': config,\n        'variant': variant,\n        'variant_config': variant_config,\n    }\n\n    return render(request, 'geomap/geomap.html', context)\n\n\ndef forward_to_default_variant(request):\n    \"\"\"Redirect the client to the default variant.\n\n    The default variant is the one listed first in the configuration\n    file.\n\n    \"\"\"\n    account = get_account(request)\n    for variant in get_configuration()['variant_order']:\n        url = reverse('geomap', args=(variant,))\n        if account.has_perm('web_access', url):\n            return HttpResponseRedirect(url)\n    return HttpResponseForbidden  # TODO: should use 'Unauthorized'\n\n\ndef data(request, variant):\n    \"\"\"Respond to a data request.\n\n    GET paramaters in the request object specify the bounding box of\n    the area to retrieve data for and other parameters.\n\n    variant must be a variant name defined in the configuration file.\n\n    \"\"\"\n    connection = nav.db.getConnection('geomapserver', 'manage')\n    connection.set_isolation_level(1)\n    db = connection.cursor(cursor_factory=psycopg2.extras.DictCursor)\n\n    truthy = ['True', 'true', True]\n    do_create_edges = request.GET.get('create_edges', True) in truthy\n    do_fetch_data = request.GET.get('fetch_data', True) in truthy\n    format_ = request.GET['format']\n    if 'bbox' in request.GET:\n        bbox = request.GET['bbox']\n        bounds = {}\n        (bounds['minLon'], bounds['minLat'], bounds['maxLon'], bounds['maxLat']) = map(\n            float, bbox.split(',')\n        )\n    else:\n        bounds = {\n            'minLon': float(request.GET['minLon']),\n            'maxLon': float(request.GET['maxLon']),\n            'minLat': float(request.GET['minLat']),\n            'maxLat': float(request.GET['maxLat']),\n        }\n    viewport_size = {\n        'width': int(request.GET['viewportWidth']),\n        'height': int(request.GET['viewportHeight']),\n    }\n    limit = int(request.GET['limit'])\n    if 'timeStart' in request.GET and 'timeEnd' in request.GET:\n        time_interval = {\n            'start': request.GET['timeStart'],\n            'end': request.GET['timeEnd'],\n        }\n    else:\n        time_interval = None\n\n    data = get_formatted_data(\n        variant,\n        db,\n        format_,\n        bounds,\n        viewport_size,\n        limit,\n        time_interval,\n        do_create_edges,\n        do_fetch_data,\n    )\n    response = HttpResponse(data)\n    response['Content-Type'] = format_mime_type(format_)\n    return response\n\n\ndef get_formatted_data(\n    variant,\n    db,\n    format_,\n    bounds,\n    viewport_size,\n    limit,\n    time_interval,\n    do_create_edges,\n    do_fetch_data,\n):\n    \"\"\"Get formatted output for given conditions.\n\n    variant -- name of the map variant to create data for (variants\n    are defined in the configuration file)\n\n    db -- a database connection object.\n\n    format -- the name of a format (see output_formats.py)\n\n    bounds -- a dictionary with keys (minLon, maxLon, minLat, maxLat)\n    describing the bounds of the interesting region.\n\n    viewport_size -- a dictionary with keys (width, height), the width\n    and height of the user's viewport for the map in pixels.\n\n    limit -- the minimum distance (in pixels) there may be between two\n    points without them being collapsed to one.\n\n    time_interval -- dictionary with keys ('start', 'end'). Values\n    should be strings describing times in the syntax expected by\n    rrdfetch. (see http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html)\n\n    Return value: formatted data as a string.\n\n    \"\"\"\n    data = get_data(db, bounds, time_interval)\n    _logger.debug('build_graph')\n    graph = build_graph(data)\n    _logger.debug('simplify')\n    simplify(graph, bounds, viewport_size, limit)\n    if do_fetch_data:\n        _logger.debug('_attach_cpu_load')\n        _attach_cpu_load(graph, time_interval)\n        if do_create_edges:\n            _logger.debug('_attach_traffic_load')\n            _attach_traffic_load(graph, time_interval)\n    _logger.debug('create_features')\n    features = create_features(variant, graph, do_create_edges)\n    _logger.debug('format')\n    output = format_data(format_, features)\n    return output\n\n\ndef _attach_traffic_load(graph, time_interval={'start': '-10min', 'end': 'now'}):\n    \"\"\"\n    Inspects a topology graph and adds the required traffic-load\n    data to it.\n\n    Should be run _after_ the topology graph has been simplified.\n\n    :type graph: nav.web.geomap.graph.Graph\n    \"\"\"\n    subedges = (\n        edge\n        for combo_edge in graph.edges.values()\n        for edge in (\n            combo_edge.source_data['subedges'],\n            combo_edge.target_data['subedges'],\n        )\n    )\n    needs_traffic_data = {\n        (d['local_sysname'], d['local_interface']): d\n        for edges in subedges\n        for d in edges\n    }\n\n    get_cached_multiple_link_load(needs_traffic_data, time_interval)\n\n\ndef _attach_cpu_load(graph, time_interval={'start': '-10min', 'end': 'now'}):\n    \"\"\"\n    Inspects a topology graph and adds the required CPU load\n    data to it.\n\n    Should be run _after_ the topology graph has been simplified.\n\n    :type graph: nav.web.geomap.graph.Graph\n    \"\"\"\n    netboxes = (\n        netbox\n        for node in graph.nodes.values()\n        for room in node.properties['rooms']\n        for netbox in room['netboxes']\n    )\n    needs_cpu_data = {netbox['real_sysname']: netbox for netbox in netboxes}\n\n    get_cached_multiple_cpu_load(needs_cpu_data, time_interval)\n"
  },
  {
    "path": "python/nav/web/graphite/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/graphite/urls.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL config for graphite bridging\"\"\"\n\nfrom django.urls import re_path\nfrom nav.web.graphite import views\n\n\ndef _dummy(x):\n    return None\n\n\nurlpatterns = [\n    re_path(r'^(?P<uri>.*)$', views.index, name='graphite'),\n    # XXX: the below finds more than just render.\n    re_path(r'^render', _dummy, name='graphite-render'),\n]\n"
  },
  {
    "path": "python/nav/web/graphite/views.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport logging\n\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\nfrom urllib.parse import urljoin\n\nfrom django.conf import settings\nfrom django.http import HttpResponse, HttpResponseNotAllowed\nfrom nav.metrics import CONFIG\n\n_logger = logging.getLogger(__name__)\n\n\ndef index(request, uri):\n    \"\"\"\n    Proxies render requests to graphite-web, as configured in graphite.conf\n    \"\"\"\n    base = CONFIG.get('graphiteweb', 'base')\n\n    if request.method in ('GET', 'HEAD'):\n        query = _inject_default_arguments(request.GET)\n        url = urljoin(base, uri + ('?' + query) if query else '')\n        req = Request(url)\n        data = None\n    elif request.method == 'POST':\n        data = _inject_default_arguments(request.POST).encode('utf-8')\n        url = urljoin(base, uri)\n        req = Request(url, data)\n    else:\n        return HttpResponseNotAllowed(['GET', 'POST', 'HEAD'])\n\n    _logger.debug(\"proxying request to %r\", url)\n    try:\n        proxy = urlopen(req)\n    except HTTPError as error:\n        status = error.code\n        headers = error.hdrs\n        output = error.fp.read()\n\n        _logger.error(\n            \"%s error on graphite render request: %r with arguments: %r\",\n            status,\n            url,\n            data,\n        )\n\n    else:\n        status = proxy.getcode()\n        headers = proxy.info()\n        output = proxy.read()\n\n    content_type = headers.get('Content-Type', 'text/html')\n\n    if request.method == 'HEAD':\n        response = HttpResponse(content_type=content_type, status=status)\n        response['Content-Length'] = headers.get('Content-Length', '0')\n    else:\n        response = HttpResponse(output, content_type=content_type, status=status)\n\n    # Dirty hack to prevent logging of 5XX errors.  More specifically, this prevents\n    # a full Django error mail from being sent when Graphite is down or otherwise\n    # failing.  (I.e. we're just proxying the status code, there is no error in our\n    # application that needs to be mailed to anyone).\n    if status >= 500:\n        # Tricks Django into thinking this response has already been logged:\n        response._has_been_logged = True\n\n    response['X-Where-Am-I'] = request.get_full_path()\n    return response\n\n\ndef _inject_default_arguments(query):\n    \"\"\"\n    Injects default arguments to a render request, unless they are already\n    explicitly supplied by the client.\n    \"\"\"\n    format_ = CONFIG.get('graphiteweb', 'format')\n    query = query.copy()\n\n    if 'format' not in query:\n        query['format'] = format_\n    if 'tz' not in query and settings.TIME_ZONE:\n        query['tz'] = settings.TIME_ZONE\n\n    return query.urlencode()\n"
  },
  {
    "path": "python/nav/web/info/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/event/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/event/urls.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"URL-config for event details\"\"\"\n\nfrom django.urls import path\n\nfrom nav.web.info.event import views\n\n\nurlpatterns = [\n    path('', views.main),\n    path('<int:event_id>', views.render_event, name='event-details'),\n]\n"
  },
  {
    "path": "python/nav/web/info/event/views.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"Controllers for the event info pages\"\"\"\n\nimport operator\nimport itertools\n\nfrom django.shortcuts import get_object_or_404, render\n\nfrom nav.models.event import AlertHistory\nfrom nav.web import utils\n\n\ndef get_context():\n    \"\"\"Returns common context\"\"\"\n\n    navpath = (\n        ('Home', '/'),\n        ('Event details', ''),\n    )\n    return {'navpath': navpath, 'title': utils.create_title(navpath)}\n\n\ndef main(request):\n    \"\"\"Main controller\"\"\"\n\n    context = get_context()\n    return render(request, 'info/event/base.html', context)\n\n\ndef render_event(request, event_id):\n    \"\"\"Renders details about a single event\"\"\"\n\n    event = get_object_or_404(AlertHistory, pk=event_id)\n\n    related_netbox_events = AlertHistory.objects.filter(netbox=event.netbox).order_by(\n        '-start_time'\n    )[:10]\n    related_type_events = AlertHistory.objects.filter(\n        alert_type=event.alert_type\n    ).order_by('-start_time')[:10]\n\n    context = get_context()\n    context.update(\n        {\n            'event': event,\n            'is_module_or_chassis': is_module_or_chassis(event),\n            'related_netbox_events': related_netbox_events,\n            'related_type_events': related_type_events,\n            'messages': get_messages(event),\n        }\n    )\n    return render(request, 'info/event/details.html', context)\n\n\ndef is_module_or_chassis(event):\n    return event.event_type.pk == 'moduleState' or event.event_type.pk == 'chassisState'\n\n\ndef get_messages(event):\n    \"\"\"Filter messages and group by type\"\"\"\n    msgs = event.messages.filter(language='en')\n    keyfunc = operator.attrgetter('state')\n    return {\n        k: sorted(g, key=operator.attrgetter('type'))\n        for k, g in itertools.groupby(msgs, key=keyfunc)\n    }\n"
  },
  {
    "path": "python/nav/web/info/forms.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for use in the info subsystem\"\"\"\n\nfrom django import forms\n\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    SubmitField,\n    FormRow,\n    FormColumn,\n)\n\n\nclass SearchForm(forms.Form):\n    \"\"\"The searchform used for base searches\"\"\"\n\n    query = forms.CharField(max_length=100, label='', required=False)\n\n    def __init__(\n        self, *args, form_action: str = '', placeholder: str = 'Search', **kwargs\n    ):\n        super().__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_action=form_action,\n            form_method='get',\n            form_class='search-form',\n            form_fields=[\n                FormRow(\n                    [\n                        FormColumn([self['query']], css_classes='medium-9'),\n                        FormColumn(\n                            [SubmitField(value='Search', css_classes='postfix')],\n                            css_classes='medium-3',\n                        ),\n                    ],\n                    css_classes='collapse',\n                ),\n            ],\n        )\n        self.fields['query'].widget.attrs.update({\"placeholder\": placeholder})\n\n    def clean_query(self):\n        \"\"\"Remove whitespace from searchterm\"\"\"\n        return self.cleaned_data['query'].strip()\n"
  },
  {
    "path": "python/nav/web/info/images/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/images/upload.py",
    "content": "import logging\nfrom os.path import join\n\nfrom django.contrib import messages\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.images import Image\nfrom nav.web.info.images.utils import (\n    get_extension,\n    create_hash,\n    create_image_directory,\n    get_next_priority,\n    save_image,\n    save_thumbnail,\n)\n\n_logger = logging.getLogger('nav.web.info.image')\n\n\ndef handle_image_upload(request, **kwargs):\n    account = get_account(request)\n    images = request.FILES.getlist('images')\n    for image in images:\n        try:\n            handle_image(image, uploader=account, **kwargs)\n            messages.success(request, 'Image &laquo;%s&raquo; uploaded' % image.name)\n        except IOError as e:\n            _logger.error(e)\n            messages.error(\n                request,\n                'Image &laquo;%s&raquo; not saved - '\n                'perhaps unsupported type' % image.name,\n            )\n\n\ndef handle_image(image, uploader, room=None, location=None):\n    _logger.debug('Uploading image %s', image)\n    original_name = image.name\n    imagename = \"%s%s\" % (create_hash(image, True), get_extension(original_name))\n    if room:\n        imagedirectory = create_hash(room.id)\n        obj = room\n    else:\n        imagedirectory = create_hash(location.id)\n        obj = location\n\n    image_obj = Image(\n        title=original_name,\n        path=imagedirectory,\n        name=imagename,\n        room=room,\n        location=location,\n        priority=get_next_priority(obj),\n        uploader=uploader,\n    )\n    imagedirectorypath = join(image_obj.basepath, imagedirectory)\n    create_image_directory(imagedirectorypath)\n    save_image(image, join(imagedirectorypath, imagename))\n    save_thumbnail(imagename, imagedirectorypath, join(imagedirectorypath, 'thumbs'))\n    image_obj.save()\n"
  },
  {
    "path": "python/nav/web/info/images/urls.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration\"\"\"\n\nfrom django.urls import re_path\nfrom nav.web.info.images import views\n\n\n# XXX: error-prone re_paths!\nurlpatterns = [\n    re_path(r'^update_title', views.update_title, name='image-update-title'),\n    re_path(r'^delete', views.delete_image, name='image-delete-image'),\n    re_path(r'^update_priority', views.update_priority, name='image-update-priority'),\n]\n"
  },
  {
    "path": "python/nav/web/info/images/utils.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utils for the image upload views\"\"\"\n\nimport errno\nimport hashlib\nimport time\nimport os\nfrom os.path import exists, join, splitext\nfrom PIL import Image, ImageOps\nfrom django.db.models import Max\n\nTHUMBNAILWIDTH = 300  # Maximum width for thumbnail\nTHUMBNAILHEIGHT = 600  # Maximum height for thumbnail\n\n\ndef get_extension(filename):\n    \"\"\"Get the file extension from a file (with the dot)\"\"\"\n    return splitext(filename)[-1]\n\n\ndef create_hash(something, salt=False):\n    \"\"\"Create a hash from something, optionally salted with current epoch\"\"\"\n    data = str(something) + str(time.time()) if salt else something\n    try:\n        hash_object = hashlib.sha1(data)\n    except TypeError:\n        hash_object = hashlib.sha1(data.encode('utf-8'))\n\n    return hash_object.hexdigest()\n\n\ndef get_next_priority(obj):\n    \"\"\"Get the next priority value for the images in the room/location\"\"\"\n    priority = obj.images.all().aggregate(Max('priority'))['priority__max']\n    return priority + 1 if priority is not None else 0\n\n\ndef create_image_directory(imagedirectory):\n    \"\"\"Create directory and change permissions\"\"\"\n    if not exists(imagedirectory):\n        try:\n            os.makedirs(imagedirectory, mode=0o0755)\n        except OSError as exc:\n            if exc.errno == errno.EEXIST and os.path.isdir(imagedirectory):\n                pass\n            else:\n                raise\n\n\ndef save_image(image, imagefullpath):\n    \"\"\"Save image as a file on the given path\n    :type image: django.core.files.uploadedfile.InMemoryUploadedFile\n    :type imagefullpath: str\n    \"\"\"\n    with open(imagefullpath, 'wb+') as destination:\n        for chunk in image.chunks():\n            destination.write(chunk)\n        os.chmod(imagefullpath, 0o0644)\n\n\ndef save_thumbnail(imagename, imagedirectory, thumb_dir):\n    \"\"\"Save a thumbnail for this image\"\"\"\n    create_image_directory(thumb_dir)\n    image = ImageOps.exif_transpose(Image.open(join(imagedirectory, imagename)))\n    image.thumbnail((THUMBNAILWIDTH, THUMBNAILHEIGHT))\n    image.save(join(thumb_dir, imagename))\n"
  },
  {
    "path": "python/nav/web/info/images/views.py",
    "content": "import logging\nimport os\n\nfrom django.contrib import messages\nfrom django.http import HttpResponse\n\nfrom nav.models.images import Image\n\n_logger = logging.getLogger('nav.web.info.image')\n\n\ndef update_title(request):\n    \"\"\"Update the title for a room image\"\"\"\n    if request.method == 'POST':\n        imageid = int(request.POST['id'])\n        title = request.POST.get('title', '')\n        try:\n            image = Image.objects.get(pk=imageid)\n        except Image.DoesNotExist:\n            return HttpResponse(status=500)\n        else:\n            image.title = title\n            image.save()\n\n    return HttpResponse(status=200)\n\n\ndef delete_image(request):\n    \"\"\"Delete an image from a room\"\"\"\n    if request.method == 'POST':\n        imageid = int(request.POST['id'])\n\n        _logger.debug('Deleting image %s', imageid)\n\n        try:\n            image = Image.objects.get(pk=imageid)\n        except Image.DoesNotExist:\n            return HttpResponse(status=500)\n        else:\n            filepath = image.fullpath\n            try:\n                _logger.debug('Deleting file %s', filepath)\n                os.unlink(filepath)\n            except OSError as error:\n                # If the file is not found, then this is ok, otherwise not ok\n                if error.errno != 2:\n                    return HttpResponse(status=500)\n            else:\n                messages.success(\n                    request, 'Image &laquo;%s&raquo; deleted' % image.title\n                )\n\n            try:\n                os.unlink(image.thumbpath)\n            except OSError:\n                # We don't really care if the thumbnail is not deleted\n                pass\n\n            # Fetch all image instances that uses this image and delete them\n            Image.objects.filter(path=image.path, name=image.name).delete()\n\n    return HttpResponse(status=200)\n\n\ndef update_priority(request):\n    \"\"\"Update the order of image objects\"\"\"\n    if request.method == 'POST':\n        for key, value in request.POST.items():\n            _logger.debug('%s=%s', key, value)\n            image = Image.objects.get(pk=key)\n            image.priority = value\n            image.save()\n\n    return HttpResponse(status=200)\n"
  },
  {
    "path": "python/nav/web/info/location/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/location/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022, 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration\"\"\"\n\nfrom django.urls import path\nfrom nav.web.info.location import views\n\n\nurlpatterns = [\n    path('', views.search, name='location-search'),\n    path('<path:locationid>/upload/', views.upload_image, name='location-info-upload'),\n    path('<path:locationid>/', views.locationinfo, name='location-info'),\n]\n"
  },
  {
    "path": "python/nav/web/info/location/views.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"View functions for the locationinfo subsystem\"\"\"\n\nimport logging\n\nfrom django.db.models import Q\nfrom django.shortcuts import redirect, render, get_object_or_404\nfrom django.urls import reverse\n\nfrom nav.models.manage import Location\nfrom nav.web.info.forms import SearchForm\nfrom nav.web.info.images.upload import handle_image_upload\nfrom nav.web.utils import create_title\n\n\nCATEGORIES = (\"GW\", \"GSW\", \"SW\", \"EDGE\")\n\n_logger = logging.getLogger('nav.web.info.location')\n\n\nclass LocationSearchForm(SearchForm):\n    \"\"\"Searchform for locations\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(LocationSearchForm, self).__init__(\n            *args, form_action='location-search', placeholder='Location', **kwargs\n        )\n\n\ndef get_path():\n    \"\"\"Get the path for this subsystem\"\"\"\n    return [\n        ('Home', '/'),\n        ('Search', reverse('info-search')),\n        ('Location', reverse('location-search')),\n    ]\n\n\ndef search(request):\n    \"\"\"Controller for searching for locations\"\"\"\n    navpath = get_path()\n\n    locations = Location.objects.none()\n    titles = navpath\n\n    if \"query\" in request.GET:\n        searchform = LocationSearchForm(request.GET, auto_id=False)\n        if searchform.is_valid():\n            titles.append((\"Search for %s\" % request.GET['query'],))\n            locations = process_searchform(searchform)\n    else:\n        searchform = LocationSearchForm()\n\n    if request.htmx:\n        return render(\n            request,\n            \"info/location/_search_results.html\",\n            {\n                \"searchform\": searchform,\n                \"locations\": locations,\n            },\n        )\n\n    return render(\n        request,\n        \"info/location/base.html\",\n        {\n            \"searchform\": searchform,\n            \"locations\": locations,\n            \"navpath\": navpath,\n            \"title\": create_title(titles),\n        },\n    )\n\n\ndef process_searchform(form):\n    \"\"\"Find and return locations based on searchform\"\"\"\n    query = form.cleaned_data['query']\n    if query is None:\n        return Location.objects.all()\n    else:\n        return (\n            Location.objects.filter(\n                Q(id__icontains=query)\n                | Q(aliases__icontains=query)\n                | Q(description__icontains=query)\n                | Q(child_locations__id__icontains=query)\n                | Q(child_locations__aliases__icontains=query)\n            )\n            .distinct()\n            .order_by(\"id\")\n        )\n\n\ndef locationinfo(request, locationid):\n    \"\"\"Controller for displaying locationinfo\"\"\"\n    location = get_object_or_404(Location, id=locationid)\n    navpath = get_path() + [(location.id,)]\n    location.sorted_data = sorted(location.data.items())\n\n    return render(\n        request,\n        \"info/location/locationinfo.html\",\n        {\n            \"location\": location,\n            \"navpath\": navpath,\n            \"images\": location.images.all(),\n            \"title\": create_title(navpath),\n        },\n    )\n\n\ndef upload_image(request, locationid):\n    \"\"\"Controller for uploading an image\"\"\"\n\n    location = get_object_or_404(Location, pk=locationid)\n    navpath = get_path() + [\n        (location.id, reverse('location-info', kwargs={'locationid': location.id})),\n        ('Edit images',),\n    ]\n\n    if request.method == 'POST':\n        _logger.debug('Uploading images')\n        handle_image_upload(request, location=location)\n        return redirect(\"location-info-upload\", locationid=location.id)\n\n    return render(\n        request,\n        \"info/location/upload.html\",\n        {\"object\": location, \"navpath\": navpath, \"title\": create_title(navpath)},\n    )\n"
  },
  {
    "path": "python/nav/web/info/netboxgroup/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/netboxgroup/urls.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Info netboxgroup url configuration\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.info.netboxgroup import views\n\n\nurlpatterns = [\n    path('', views.index, name='netbox-group'),\n    re_path(r'^(?P<groupid>.+)/edit/', views.group_edit, name='netbox-group-edit'),\n    re_path(r'^(?P<groupid>.+)', views.group_detail, name='netbox-group-detail'),\n]\n"
  },
  {
    "path": "python/nav/web/info/netboxgroup/views.py",
    "content": "#\n# Copyright (C) 2013-2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Views for the netbox groups\"\"\"\n\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.db.models import Q\nfrom django.urls import reverse\n\nfrom nav.web.info.forms import SearchForm\nfrom nav.web.info.views import get_path\nfrom nav.web.utils import create_title\nfrom nav.models.manage import NetboxGroup, Netbox, NetboxCategory\nfrom nav.metrics.data import get_netboxes_availability\nfrom nav.metrics.errors import GraphiteUnreachableError\n\n\nclass NetboxGroupForm(SearchForm):\n    \"\"\"Form for searching for netbox groups\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(NetboxGroupForm, self).__init__(\n            *args, form_action='netbox-group', placeholder='Device group', **kwargs\n        )\n\n\ndef get_netboxgroup_path(other=None):\n    \"\"\"Get path for this page\n\n    :param other: more paths to append\n    :type other: list\n\n    \"\"\"\n    navpath = get_path() + [('Device Groups', reverse('netbox-group'))]\n    if other:\n        navpath += other\n    return navpath\n\n\ndef index(request):\n    \"\"\"Renders the default view for the netbox group page\n\n    :param request:\n    :type request: django.http.HttpRequest\n\n    \"\"\"\n\n    navpath = get_netboxgroup_path()\n    groups = NetboxGroup.objects.none()\n\n    if request.method == 'GET' and 'query' in request.GET:\n        form = NetboxGroupForm(request.GET)\n        if form.is_valid():\n            query = request.GET['query']\n            id_filter = Q(pk__icontains=query)\n            netbox_filter = Q(netboxes__sysname__icontains=query)\n            description_filter = Q(description__icontains=query)\n            groups = (\n                NetboxGroup.objects.filter(\n                    id_filter | netbox_filter | description_filter\n                )\n                .distinct()\n                .order_by('id')\n            )\n    else:\n        form = NetboxGroupForm()\n        groups = NetboxGroup.objects.all()\n\n    if request.htmx:\n        return render(\n            request,\n            'info/netboxgroup/_search_results.html',\n            {'netboxgroups': groups, 'searchform': form},\n        )\n\n    return render(\n        request,\n        'info/netboxgroup/list_groups.html',\n        {\n            'netboxgroups': groups,\n            'searchform': form,\n            'navpath': navpath,\n            'title': create_title(navpath),\n        },\n    )\n\n\ndef group_detail(request, groupid):\n    \"\"\"Renders the view for group detail\n\n    :param request:\n    :type request: django.http.HttpRequest\n\n    \"\"\"\n    group = get_object_or_404(NetboxGroup, pk=groupid)\n    netboxes = group.netboxes.select_related('organization', 'category', 'type')\n    availabilities = {}\n    graphite_error = False\n\n    try:\n        availabilities = get_netboxes_availability(\n            netboxes, data_sources=['availability'], time_frames=['week', 'month']\n        )\n    except GraphiteUnreachableError:\n        graphite_error = True\n\n    navpath = get_netboxgroup_path([(group.pk,)])\n\n    return render(\n        request,\n        'info/netboxgroup/group_detail.html',\n        {\n            'netboxgroup': group,\n            'netboxes': netboxes,\n            'availabilities': availabilities,\n            'navpath': navpath,\n            'title': create_title(navpath),\n            'graphite_error': graphite_error,\n        },\n    )\n\n\ndef group_edit(request, groupid):\n    \"\"\"Renders the view for editing device groups\n\n    :param request:\n    :type request: django.http.HttpRequest\n\n    \"\"\"\n\n    group = get_object_or_404(NetboxGroup, pk=groupid)\n    navpath = get_netboxgroup_path([(group.pk,), ('edit',)])\n\n    if request.method == 'POST':\n        return handle_edit_request(request, group)\n\n    netboxes = Netbox.objects.exclude(\n        pk__in=group.netboxes.all().values_list('id', flat=True)\n    )\n\n    return render(\n        request,\n        'info/netboxgroup/group_edit.html',\n        {\n            'netboxgroup': group,\n            'netboxes': netboxes,\n            'navpath': navpath,\n            'title': create_title(navpath),\n        },\n    )\n\n\ndef handle_edit_request(request, group):\n    \"\"\"Store new netbox categories and remove old ones\n\n    :param group:\n    :type group: nav.models.manage.NetboxGroup\n\n    :param request:\n    :type request: django.http.HttpRequest\n\n    \"\"\"\n    netboxids = [int(x) for x in request.POST.getlist('netboxes')]\n\n    # Delete existing netboxcategories that are not in request\n    NetboxCategory.objects.filter(category=group).exclude(\n        netbox__pk__in=netboxids\n    ).delete()\n\n    # Add new netboxcategories that are in request\n    for netboxid in netboxids:\n        try:\n            NetboxCategory.objects.get(category=group, netbox__pk=netboxid)\n        except NetboxCategory.DoesNotExist:\n            netbox = Netbox.objects.get(pk=netboxid)\n            NetboxCategory.objects.create(category=group, netbox=netbox)\n\n    return redirect('netbox-group')\n"
  },
  {
    "path": "python/nav/web/info/prefix/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/prefix/urls.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL definitions for prefix details\"\"\"\n\nfrom django.urls import path\nfrom nav.web.info.prefix import views\n\n\nurlpatterns = [\n    path('', views.index, name='prefix-index'),\n    path('<int:prefix_id>/', views.prefix_details, name='prefix-details'),\n    path('<int:prefix_id>/addTags/', views.prefix_add_tags, name='prefix-add-tags'),\n    path(\n        '<int:prefix_id>/reloadTags/',\n        views.prefix_reload_tags,\n        name='prefix-reload-tags',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/info/prefix/views.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers and Forms for prefix details page\"\"\"\n\nfrom django import forms\nfrom django.db.utils import DatabaseError\nfrom django.http import HttpResponse\nfrom django.shortcuts import render, get_object_or_404\nfrom django.urls import reverse\nfrom django.views.decorators.http import require_POST\n\nfrom IPy import IP\n\nfrom nav.web import utils\nfrom nav.web.auth.utils import get_account\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.models.manage import Prefix, Usage, PrefixUsage\nfrom ..forms import SearchForm\n\n\n### Forms\n\n\nclass PrefixSearchForm(SearchForm):\n    \"\"\"Searchform for prefixes\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(PrefixSearchForm, self).__init__(\n            *args, form_action='prefix-index', placeholder='a.b.c.d/e', **kwargs\n        )\n        self.attrs.form_id = 'prefix-search-form'\n\n    def clean_query(self):\n        \"\"\"Make sure it's something we can use\"\"\"\n        ip = self.cleaned_data['query']\n        try:\n            ip = IP(ip)\n        except ValueError as error:\n            raise forms.ValidationError(\n                ('%(error)s'), params={'query': ip, 'error': error}, code='invalid'\n            )\n        return ip\n\n\nclass PrefixUsageForm(forms.ModelForm):\n    \"\"\"Form to select usages/tags for a prefix\"\"\"\n\n    usages = forms.ModelMultipleChoiceField(\n        queryset=Usage.objects.all(),\n        label='Add tags',\n        widget=forms.SelectMultiple(attrs={'class': 'select2'}),\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(PrefixUsageForm, self).__init__(*args, **kwargs)\n        self.fields['usages'].help_text = ''\n        if self.instance.pk:\n            self.initial['usages'] = self.instance.usages.all()\n\n    class Meta(object):\n        model = Prefix\n        fields = ['usages']\n\n\n### Helpers\n\n\ndef require_prefix_privilege(func):\n    \"\"\"Decorator for authorizing prefix edit actions\"\"\"\n\n    def wrapper(request, *args, **kwargs):\n        \"\"\"Decorator wrapper\"\"\"\n        if authorize_user(request):\n            return func(request, *args, **kwargs)\n        else:\n            return HttpResponse(\"User not authorized to edit prefixes\", status=403)\n\n    return wrapper\n\n\ndef get_context(prefix=None):\n    \"\"\"Returns a context for a page with a possible prefix\"\"\"\n    navpath = [\n        ('Home', '/'),\n        ('Search', reverse('info-search')),\n        ('Prefix', reverse('prefix-index')),\n    ]\n    if prefix:\n        navpath.append((prefix.net_address,))\n    return {'prefix': prefix, 'navpath': navpath, 'title': utils.create_title(navpath)}\n\n\ndef get_query_results(query):\n    \"\"\"Returns the prefixes determined by the query\"\"\"\n    where_string = \"inet '{}' >>= netaddr\".format(IP(query))\n    return Prefix.objects.extra(where=[where_string], order_by=['net_address'])\n\n\ndef authorize_user(request):\n    \"\"\"Find out if this user can edit prefixes\"\"\"\n    account = get_account(request)\n    return account.has_perm('web_access', reverse('seeddb-prefix'))\n\n\n### Controllers\n\n\ndef index(request):\n    \"\"\"Presents user with search form for prefixes\"\"\"\n    context = get_context()\n    query = request.GET.get('query')\n    if query:\n        form = PrefixSearchForm(request.GET)\n        if form.is_valid():\n            context['query'] = form.cleaned_data['query']\n            context['query_results'] = get_query_results(query)\n    else:\n        form = PrefixSearchForm()\n\n    context['form'] = form\n\n    if request.htmx:\n        return render(request, 'info/prefix/_search_results.html', context)\n\n    return render(request, 'info/prefix/base.html', context)\n\n\ndef prefix_details(request, prefix_id):\n    \"\"\"Controller for rendering prefix details\"\"\"\n    prefix = get_object_or_404(Prefix, pk=prefix_id)\n    context = get_context(prefix)\n    context['form'] = PrefixUsageForm(instance=prefix)\n    context['can_edit'] = authorize_user(request)\n\n    try:\n        dhcp_graph_urls = prefix.get_dhcp_graph_urls()\n        graphite_error = False\n    except GraphiteUnreachableError:\n        dhcp_graph_urls = []\n        graphite_error = True\n\n    context['dhcp_graph_urls'] = dhcp_graph_urls\n    context['graphite_error'] = graphite_error\n\n    return render(request, 'info/prefix/details.html', context)\n\n\n@require_POST\n@require_prefix_privilege\ndef prefix_add_tags(request, prefix_id):\n    \"\"\"Adds usages to a prefix from post data\"\"\"\n    prefix = Prefix.objects.get(pk=prefix_id)\n    existing_usages = {u[0] for u in prefix.usages.values_list()}\n    usages = set(request.POST.getlist('usages'))\n\n    to_remove = list(existing_usages - usages)\n    to_add = list(usages - existing_usages)\n\n    PrefixUsage.objects.filter(prefix=prefix, usage__in=to_remove).delete()\n    for usage_key in to_add:\n        usage = Usage.objects.get(pk=usage_key)\n        try:\n            PrefixUsage(prefix=prefix, usage=usage).save()\n        except DatabaseError:\n            pass\n\n    return HttpResponse()\n\n\ndef prefix_reload_tags(request, prefix_id):\n    \"\"\"Render the tags fragment\"\"\"\n    return render(\n        request,\n        'info/prefix/frag_tags.html',\n        {'prefix': Prefix.objects.get(pk=prefix_id)},\n    )\n"
  },
  {
    "path": "python/nav/web/info/room/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/room/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.info.room import views\n\n\nurlpatterns = [\n    path('', views.search, name='room-search'),\n    re_path(\n        r'^(?P<roomid>.+)/netboxes/', views.render_netboxes, name='room-info-netboxes'\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/deviceinfo/',\n        views.render_deviceinfo,\n        name='room-info-deviceinfo',\n    ),\n    re_path(r'^(?P<roomid>.+)/upload/', views.upload_image, name='room-info-upload'),\n    re_path(\n        r'^(?P<roomid>.+)/sensors/', views.render_sensors, name='room-info-sensors'\n    ),\n    path(\n        '<path:roomid>/racks/add_rack',\n        views.add_rack,\n        name='room-info-racks-add-rack',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/add_rack_modal',\n        views.add_rack_modal,\n        name='room-info-racks-add-rack-modal',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/(?P<rackid>\\d+)/rename_rack',\n        views.rename_rack,\n        name='room-info-racks-rename-rack',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/remove_rack',\n        views.remove_rack,\n        name='room-info-racks-remove-rack',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/add_sensor',\n        views.render_add_sensor_modal,\n        name='room-info-racks-add-sensor-modal',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/remove_sensor',\n        views.remove_sensor,\n        name='room-info-racks-remove-sensor',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/save_sensor_order',\n        views.save_sensor_order,\n        name='room-info-racks-save-sensor-order',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/save_rack_order',\n        views.save_rack_order,\n        name='room-info-racks-save-rack-order',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/save_rack_color',\n        views.save_rack_color,\n        name='room-info-racks-save-rack-color',\n    ),\n    re_path(\n        r'^(?P<roomid>.+)/racks/save_sensor',\n        views.save_sensor,\n        name='room-info-racks-save-sensor',\n    ),\n    re_path(r'^(?P<roomid>.+)/racks/', views.render_racks, name='room-info-racks'),\n    path('csv-download', views.create_csv, name='room-csv'),\n    path(\n        'aboutthesearch',\n        views.render_about_the_search_modal,\n        name='room-info-about-the-search',\n    ),\n    path('<path:roomid>/', views.roominfo, name='room-info'),\n]\n"
  },
  {
    "path": "python/nav/web/info/room/views.py",
    "content": "#\n# Copyright (C) 2012-2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Viev functions for the roominfo subsystem\"\"\"\n\nimport datetime\nimport logging\nimport csv\n\nfrom django.db import IntegrityError\nfrom django.db.models import Q, Max\nfrom django.http import HttpResponse\nfrom django.shortcuts import redirect, get_object_or_404, render\nfrom django.urls import reverse\nfrom django.views.decorators.http import require_http_methods\nfrom django_htmx.http import trigger_client_event\n\nfrom nav.django.decorators import require_admin\nfrom nav.metrics.errors import GraphiteUnreachableError\n\nfrom nav.models.manage import Room, Sensor, Interface\nfrom nav.models.rack import (\n    Rack,\n    SensorRackItem,\n    SensorsDiffRackItem,\n    SensorsSumRackItem,\n)\nfrom nav.web.info.forms import SearchForm\nfrom nav.web.info.images.upload import handle_image_upload\nfrom nav.web.modals import render_modal, render_modal_alert, resolve_modal\nfrom nav.web.utils import create_title\nfrom nav.metrics.data import get_netboxes_availability\n\n\nCATEGORIES = (\"GW\", \"GSW\", \"SW\", \"EDGE\")\nRACK_LEFT = 0\nRACK_CENTER = 1\nRACK_RIGHT = 2\nCOLUMNS = {\n    RACK_LEFT: 'left',\n    RACK_CENTER: 'center',\n    RACK_RIGHT: 'right',\n}\nBACKGROUND_COLOR_CLASSES = ['bg1', 'bg2', 'bg3', 'bg4', 'bg5']\n\n_logger = logging.getLogger('nav.web.info.room')\n\n\nclass RoomSearchForm(SearchForm):\n    \"\"\"Searchform for rooms\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(RoomSearchForm, self).__init__(\n            *args, form_action='room-search', placeholder='Room', **kwargs\n        )\n\n\ndef get_path():\n    \"\"\"Get the path for this subsystem\"\"\"\n    return [\n        ('Home', '/'),\n        ('Search', reverse('info-search')),\n        ('Room', reverse('room-search')),\n    ]\n\n\ndef search(request):\n    \"\"\"Controller for searching for rooms\"\"\"\n    navpath = get_path()\n\n    rooms = Room.objects.none()\n    titles = navpath\n\n    if \"query\" in request.GET:\n        searchform = RoomSearchForm(request.GET, auto_id=False)\n        if searchform.is_valid():\n            titles.append((\"Search for %s\" % request.GET['query'],))\n            rooms = process_searchform(searchform)\n            for room in rooms:\n                room.filtered_netboxes = filter_netboxes(room)\n    else:\n        searchform = RoomSearchForm()\n\n    if request.htmx:\n        return render(\n            request,\n            'info/room/_search_results.html',\n            {\"rooms\": rooms, \"searchform\": searchform},\n        )\n\n    return render(\n        request,\n        \"info/room/base.html\",\n        {\n            \"searchform\": searchform,\n            \"rooms\": rooms,\n            \"navpath\": navpath,\n            \"title\": create_title(titles),\n        },\n    )\n\n\ndef process_searchform(form):\n    \"\"\"Find and return rooms based on searchform\"\"\"\n    query = form.cleaned_data['query']\n    if query is None:\n        return Room.objects.all()\n    else:\n        return Room.objects.filter(\n            Q(id__icontains=query)\n            | Q(aliases__icontains=query)\n            | Q(description__icontains=query)\n            | Q(location__id__icontains=query)\n            | Q(location__aliases__icontains=query)\n        ).order_by(\"id\")\n\n\ndef filter_netboxes(room):\n    \"\"\"Filter netboxes based on interesting categories\"\"\"\n    return room.netboxes.filter(category__in=CATEGORIES)\n\n\ndef roominfo(request, roomid):\n    \"\"\"Controller for displaying roominfo\"\"\"\n    room = get_object_or_404(Room, id=roomid)\n    images = room.images.all()\n    navpath = get_path() + [(room.id,)]\n    room.sorted_data = sorted(room.data.items())\n    room.meta_data = get_room_meta(room)\n    return render(\n        request,\n        \"info/room/roominfo.html\",\n        {\n            \"room\": room,\n            \"navpath\": navpath,\n            \"title\": create_title(navpath),\n            \"images\": images,\n        },\n    )\n\n\ndef get_room_meta(room):\n    \"\"\"Find meta data for the room\"\"\"\n    room_interfaces = Interface.objects.filter(netbox__room=room)\n    return {\n        'devices': room.netboxes.count(),\n        'interfaces': room_interfaces.count(),\n        'interfaces_with_link': room_interfaces.filter(\n            ifoperstatus=Interface.OPER_UP\n        ).count(),\n        'trunk_interfaces': room_interfaces.filter(trunk=True).count(),\n    }\n\n\ndef render_deviceinfo(request, roomid):\n    \"\"\"Controller for rendering device info\"\"\"\n    room = get_object_or_404(Room, id=roomid)\n    all_netboxes = room.netboxes.select_related(\n        \"type\", \"category\", \"organization\"\n    ).order_by(\"sysname\")\n    availabilities = {}\n    graphite_error = False\n\n    try:\n        availabilities = get_netboxes_availability(\n            all_netboxes, data_sources=[\"availability\"], time_frames=[\"week\", \"month\"]\n        )\n    except GraphiteUnreachableError:\n        graphite_error = True\n\n    return render(\n        request,\n        \"info/room/roominfo_devices.html\",\n        {\n            \"netboxes\": all_netboxes,\n            \"availabilities\": availabilities,\n            'graphite_error': graphite_error,\n        },\n    )\n\n\ndef upload_image(request, roomid):\n    \"\"\"Controller for uploading an image\"\"\"\n\n    room = get_object_or_404(Room, pk=roomid)\n    navpath = get_path() + [\n        (room.id, reverse('room-info', kwargs={'roomid': room.id})),\n        ('Edit images',),\n    ]\n\n    if request.method == 'POST':\n        _logger.debug('Uploading images')\n        handle_image_upload(request, room=room)\n        return redirect(\"room-info-upload\", roomid=room.id)\n\n    return render(\n        request,\n        \"info/room/upload.html\",\n        {\n            \"object\": room,\n            \"room\": room,\n            \"navpath\": navpath,\n            \"title\": create_title(navpath),\n        },\n    )\n\n\ndef render_netboxes(request, roomid):\n    \"\"\"Controller for displaying the netboxes in the tabbed view\"\"\"\n    room = get_object_or_404(Room, id=roomid)\n    netboxes = filter_netboxes(room).order_by(\"category\", \"sysname\")\n\n    cam_query = {\n        'last_cam': \"\"\"SELECT end_time\n                            FROM cam\n                            WHERE cam.netboxid=interface.netboxid\n                              AND cam.ifindex = interface.ifindex\n                              AND interface.to_netboxid IS NULL\n                            ORDER BY end_time DESC\n                            LIMIT 1\"\"\"\n    }\n\n    # Filter interfaces on iftype and add fast last_cam lookup\n    for netbox in netboxes:\n        netbox.interfaces_list = (\n            netbox.interfaces.filter(iftype__in=Interface.ETHERNET_INTERFACE_TYPES)\n            .order_by(\"ifindex\")\n            .extra(select=cam_query)\n        )\n\n    return render(\n        request,\n        \"info/room/netboxview.html\",\n        {\"netboxes\": netboxes, \"maxtime\": datetime.datetime.max, \"room\": room},\n    )\n\n\ndef render_about_the_search_modal(request):\n    \"\"\"Renders the about the search modal\"\"\"\n    return render_modal(\n        request,\n        'info/room/_about_the_search_modal.html',\n        modal_id=\"about-the-search\",\n        size=\"medium\",\n    )\n\n\n@require_http_methods(['POST'])\ndef create_csv(request):\n    \"\"\"Create csv-file from form data\"\"\"\n    roomname = request.POST.get('roomid', 'room').encode('utf-8')\n    filename = \"{}.csv\".format(roomname)\n\n    response = HttpResponse(content_type='text/csv')\n    response['Content-Disposition'] = 'attachment; filename=\"{}\"'.format(filename)\n\n    writer = csv.writer(response)\n    rows = request.POST.get('rows', '')\n    for row in rows.splitlines():\n        writer.writerow(row.split(';'))\n    return response\n\n\ndef render_sensors(request, roomid):\n    \"\"\"Gets the environment devices for a room\"\"\"\n    room = get_object_or_404(Room, pk=roomid)\n    netboxes = room.netboxes.filter(category='ENV')\n\n    for netbox in netboxes:\n        netbox.env_sensors = netbox.sensors.filter(\n            Q(unit_of_measurement__icontains='celsius')\n            | Q(unit_of_measurement__icontains='percent')\n            | Q(unit_of_measurement__icontains='degrees')\n            | Q(unit_of_measurement__startswith='%')\n        )\n\n    return render(\n        request,\n        'info/room/roominfo_sensors.html',\n        {\n            'netboxes': [n for n in netboxes if n.env_sensors],\n            'has_sensors': any([x.get_environment_sensors().count() for x in netboxes]),\n        },\n    )\n\n\ndef create_rack(room, rackname):\n    \"\"\"Creates a rack in a room with a given name\"\"\"\n    aggregate = Rack.objects.filter(room=room).aggregate(Max('ordering'))\n    ordering = (aggregate.get('ordering__max') or 0) + 1\n    rack = Rack(room=room, rackname=rackname, ordering=ordering)\n    rack.save()\n    return rack\n\n\n@require_admin\ndef add_rack(request, roomid):\n    \"\"\"Adds a new rack to a room\"\"\"\n    room = get_object_or_404(Room, pk=roomid)\n    rackname = request.POST.get('rackname')\n    rack = create_rack(room, rackname)\n    response = resolve_modal(\n        request,\n        'info/room/fragment_rack.html',\n        {\n            'rack': rack,\n            'room': room,\n            'editmode': True,\n            'color_classes': BACKGROUND_COLOR_CLASSES,\n        },\n        modal_id='add-rack-modal',\n    )\n    return trigger_client_event(response, 'room.rack.added', {'rackId': rack.id})\n\n\ndef add_rack_modal(request, roomid):\n    \"\"\"Renders the add rack form modal\"\"\"\n    room = get_object_or_404(Room, pk=roomid)\n    return render_modal(\n        request,\n        'info/room/_add_rack_modal.html',\n        context={'room': room},\n        modal_id='add-rack-modal',\n        size='small',\n    )\n\n\n@require_admin\ndef remove_rack(request, roomid):\n    \"\"\"Deletes a rack\"\"\"\n    rack = get_object_or_404(Rack, pk=request.POST.get('rackid'))\n    rack.delete()\n    return HttpResponse()\n\n\n@require_admin\ndef rename_rack(request, roomid, rackid):\n    \"\"\"Renames a rack\"\"\"\n    rack = get_object_or_404(Rack, pk=rackid)\n    newname = request.POST.get('rackname')\n    rack.rackname = newname\n    rack.save()\n    return HttpResponse(newname)\n\n\ndef render_racks(request, roomid):\n    \"\"\"Gets the racks for this room\"\"\"\n    room = get_object_or_404(Room, pk=roomid)\n\n    context = {\n        'room': room,\n        'racks': room.racks.all().order_by('ordering'),\n        'color_classes': BACKGROUND_COLOR_CLASSES,\n    }\n    return render(request, 'info/room/roominfo_racks.html', context)\n\n\nADD_SENSOR_MODAL_ID = 'add-sensor-modal'\n\n\nADD_SENSOR_MODAL_ID = 'add-sensor-modal'\n\n\n@require_admin\ndef render_add_sensor_modal(request, roomid):\n    \"\"\"Renders the add sensor modal template\"\"\"\n    rackid = request.POST.get('rackid')\n    column = request.POST.get('column')\n\n    if not rackid or column not in ('0', '1', '2'):\n        return HttpResponse(status=400, content='Invalid request')\n\n    is_pdu = column != '1'\n\n    room = get_object_or_404(Room, pk=roomid)\n    rack = get_object_or_404(Rack, pk=rackid)\n\n    # Filter away already added sensors\n    already_used = Rack.objects.get_all_sensor_pks_in_room(room)\n    sensors = Sensor.objects.exclude(pk__in=already_used)\n\n    # Sensors that can be choosen for the pdu columns\n    pdusensors = (\n        sensors.filter(netbox__room=room, netbox__category='POWER')\n        .select_related('netbox')\n        .order_by('netbox__sysname', 'human_readable')\n    )\n\n    filteredsensors = pdusensors\n\n    if not is_pdu:\n        # All other sensors\n        othersensors = (\n            sensors.filter(netbox__room=room)\n            .exclude(pk__in=pdusensors)\n            .select_related('netbox')\n            .order_by('netbox__sysname', 'human_readable')\n        )\n\n        filteredsensors = othersensors\n\n    return render_modal(\n        request,\n        'info/room/_add_sensor_modal.html',\n        {\n            'room': room,\n            'rack': rack,\n            'sensortype': 'PDU Sensor' if is_pdu else 'Sensor',\n            'sensors': filteredsensors,\n            'column': column,\n            'hx_target': f'#rack_{rack.pk} [data-column=\"{column}\"]',\n        },\n        modal_id=ADD_SENSOR_MODAL_ID,\n        size='medium',\n    )\n\n\n@require_admin\ndef save_sensor(request, roomid):\n    rackid = request.POST.get('rackid')\n    column = int(request.POST.get('column'))\n    get_object_or_404(Room, pk=roomid)\n    rack = get_object_or_404(Rack, pk=rackid)\n    item_type = request.POST.get('item_type')\n    if item_type == \"Sensor\":\n        sensorid = request.POST.get('sensorid')\n        if not sensorid:\n            return _handle_save_sensor_error(\n                request, 'Could not add sensor: No sensor selected.'\n            )\n        sensor = get_object_or_404(Sensor, pk=sensorid)\n        item = SensorRackItem(sensor=sensor)\n    elif item_type == \"SensorsDiff\":\n        minuendid = request.POST.get('minuendid')\n        subtrahendid = request.POST.get('subtrahendid')\n        if not minuendid or not subtrahendid:\n            return _handle_save_sensor_error(\n                request,\n                'Could not add sensor difference: Two sensors must be selected.',\n            )\n        minuend = get_object_or_404(Sensor, pk=minuendid)\n        subtrahend = get_object_or_404(Sensor, pk=subtrahendid)\n        item = SensorsDiffRackItem(minuend=minuend, subtrahend=subtrahend)\n    elif item_type == \"SensorsSum\":\n        sensors = request.POST.getlist('sensors[]')\n        sensors = [int(s) for s in sensors if s]\n        title = request.POST.get('title')\n        if len(sensors) < 2 or not title:\n            return _handle_save_sensor_error(\n                request,\n                'Could not add sensor sum: At least two sensors must be '\n                'selected and a title given.',\n            )\n        item = SensorsSumRackItem(title=title, sensors=sensors)\n    try:\n        template_name = (\n            'info/room/fragment_racksensor.html'\n            if column == RACK_CENTER\n            else 'info/room/fragment_rackpdusensor.html'\n        )\n        if column == RACK_CENTER:\n            rack.add_center_item(item)\n            rack.save()\n        else:\n            if column == RACK_LEFT:\n                rack.add_left_item(item)\n            else:\n                rack.add_right_item(item)\n            rack.save()\n\n        response = resolve_modal(\n            request,\n            template_name,\n            {\n                'rack': rack,\n                'racksensor': item,\n                'column': column,\n            },\n            modal_id=ADD_SENSOR_MODAL_ID,\n        )\n        return trigger_client_event(\n            response,\n            'room.rack.sensorAdded',\n            {'rackId': rackid, 'sensorId': item.id},\n        )\n\n    except (ValueError, IntegrityError):\n        return _handle_save_sensor_error(\n            request, 'Could not add sensor, please check your input and try again.'\n        )\n\n\ndef _handle_save_sensor_error(request, message):\n    \"\"\"Handles rendering of error message when saving a sensor\"\"\"\n    return render_modal_alert(\n        request,\n        message,\n        ADD_SENSOR_MODAL_ID,\n    )\n\n\n@require_admin\ndef save_sensor_order(request, roomid):\n    \"\"\"Saves the sensor order for the given racksensors\"\"\"\n    rackid = request.POST.get('rackid')\n    rack = get_object_or_404(Rack, pk=rackid)\n    column = int(request.POST.get('column'))\n    if column not in COLUMNS:\n        return HttpResponse(status=400)\n    column = COLUMNS[column]\n    items = {item.id: item for item in rack.configuration[column]}\n    rack.configuration[column] = [\n        items[int(itemid)] for itemid in request.POST.getlist('item[]')\n    ]\n    rack.save()\n\n    return HttpResponse()\n\n\n@require_admin\ndef save_rack_order(request, roomid):\n    \"\"\"Saves the rack order for the given racks\"\"\"\n    for index, rackid in enumerate(request.POST.getlist('rack[]')):\n        rack = Rack.objects.get(pk=rackid)\n        rack.ordering = index\n        rack.save()\n\n    return HttpResponse()\n\n\n@require_admin\ndef save_rack_color(request, roomid):\n    \"\"\"Saves the background color for the rack as a class\"\"\"\n    get_object_or_404(Room, pk=roomid)\n    rackid = request.POST.get('rackid')\n    rack = get_object_or_404(Rack, pk=rackid)\n    rack.configuration['body_class'] = request.POST.get('class')\n    rack.save()\n    return HttpResponse()\n\n\n@require_admin\ndef remove_sensor(request, roomid):\n    \"\"\"Remove a sensor from a rack\"\"\"\n    rackid = request.POST.get('rackid')\n    rack = get_object_or_404(Rack, pk=rackid)\n    column = int(request.POST.get('column'))\n    itemid = int(request.POST.get('id'))\n    if column not in COLUMNS:\n        return HttpResponse(status=400)\n    column = COLUMNS[column]\n    rack.configuration[column] = [\n        item for item in rack.configuration[column] if item.id != itemid\n    ]\n    try:\n        rack.save()\n        return HttpResponse()\n    except Exception:  # noqa: BLE001\n        return HttpResponse(status=500)\n"
  },
  {
    "path": "python/nav/web/info/searchproviders.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"Module containing different searchproviders used for searching in NAV\"\"\"\n\nfrom collections import namedtuple\n\nfrom django.db.models import Q, Count\nfrom django.urls import reverse\n\nfrom IPy import IP\n\nfrom nav.models.manage import (\n    Room,\n    Location,\n    Netbox,\n    Interface,\n    Vlan,\n    UnrecognizedNeighbor,\n    NetboxGroup,\n)\nfrom nav.util import is_valid_ip\nfrom nav.web.ipdevinfo.views import is_valid_hostname\nfrom nav.web.info.prefix.views import get_query_results as get_prefix_results\n\n\nSearchResult = namedtuple(\n    \"SearchResult\", ['href', 'inst', 'matched_aliases'], defaults=[None]\n)\n\n\nclass SearchProvider(object):\n    \"\"\"Search provider interface.\n\n    To implement this interface, all that is needed is to inherit from this\n    class, set some class attributes and override the fetch_results() method.\n    The query, as entered by the end-user will be available in the\n    ``self.query`` variable.\n    \"\"\"\n\n    name = \"SearchProvider\"\n    \"\"\"Used as the caption of results from this provider\"\"\"\n\n    headers = (('Column title', 'result instance attribute name'),)\n    \"\"\"Defines the result table columns; what the column titles should be,\n    and which attribute from the SearchResult.inst object to extract the\n    values for this column from. \"\"\"\n\n    link = 'id'\n    \"\"\"The title of the result column to put hyperlinks in\"\"\"\n\n    def __init__(self, query=\"\"):\n        \"\"\"\n        :param query: The search query string, as entered by the user.\n        \"\"\"\n        self.results = []\n        self.query = query\n        self.fetch_results()\n\n    def fetch_results(self):\n        \"\"\"Fetches and returns results based on ``self.query``.\n\n        :returns: A list of :py:class:`nav.web.info.searchproviders.SearchResult`\n        instances.\n        \"\"\"\n        raise NotImplementedError\n\n\nclass RoomSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for rooms\"\"\"\n\n    name = \"Rooms\"\n    headers = [('Roomid', 'id'), ('Description', 'description')]\n    link = 'Roomid'\n\n    def fetch_results(self):\n        results = Room.objects.aka_or_description(self.query).order_by(\"id\")\n        for result in results:\n            self.results.append(\n                SearchResult(\n                    reverse('room-info', kwargs={'roomid': result.id}),\n                    result,\n                    _find_matching_aliases(result.aliases, self.query),\n                )\n            )\n\n\nclass LocationSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for locations\"\"\"\n\n    name = \"Locations\"\n    headers = [('Locationid', 'id'), ('Description', 'description')]\n    link = 'Locationid'\n\n    def fetch_results(self):\n        results = Location.objects.aka_or_description(self.query).order_by(\"id\")\n        for result in results:\n            self.results.append(\n                SearchResult(\n                    reverse('location-info', kwargs={'locationid': result.id}),\n                    result,\n                    _find_matching_aliases(result.aliases, self.query),\n                )\n            )\n\n\nclass NetboxSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for netboxes\"\"\"\n\n    name = \"IP devices\"\n    headers = [('Sysname', 'sysname'), ('IP', 'ip')]\n    link = 'Sysname'\n\n    def fetch_results(self):\n        if is_valid_ip(self.query, strict=True):\n            results = Netbox.objects.filter(ip=self.query)\n        else:\n            results = Netbox.objects.filter(sysname__icontains=self.query)\n\n        results.order_by(\"sysname\")\n        for result in results:\n            self.results.append(\n                SearchResult(\n                    reverse(\n                        'ipdevinfo-details-by-name', kwargs={'name': result.sysname}\n                    ),\n                    result,\n                )\n            )\n\n\nclass InterfaceSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for interfaces\"\"\"\n\n    name = \"Interfaces\"\n    headers = [\n        ('IP Device', 'netbox.sysname'),\n        ('Interface', 'ifname'),\n        ('Alias', 'ifalias'),\n    ]\n    link = 'Interface'\n\n    def fetch_results(self):\n        results = Interface.objects.filter(\n            Q(ifalias__icontains=self.query) | Q(ifname__icontains=self.query)\n        ).order_by('netbox__sysname', 'ifindex')\n\n        for result in results:\n            self.results.append(\n                SearchResult(\n                    reverse(\n                        'ipdevinfo-interface-details',\n                        kwargs={\n                            'netbox_sysname': result.netbox.sysname,\n                            'port_id': result.id,\n                        },\n                    ),\n                    result,\n                )\n            )\n\n\nclass FallbackSearchProvider(SearchProvider):\n    \"\"\"Fallback searchprovider if no results are found.\n\n    Two cases:\n    1 - if ip, send to ipdevinfos name lookup\n    2 - if valid text based on ipdevinfos regexp, send to ipdevinfo\n    \"\"\"\n\n    name = \"Fallback\"\n\n    def fetch_results(self):\n        ip_address = is_valid_ip(self.query)\n        if ip_address:\n            self.results.append(\n                SearchResult(\n                    reverse('ipdevinfo-details-by-addr', kwargs={'addr': ip_address}),\n                    None,\n                )\n            )\n        elif is_valid_hostname(self.query):\n            self.results.append(\n                SearchResult(\n                    reverse('ipdevinfo-details-by-name', kwargs={'name': self.query}),\n                    None,\n                )\n            )\n\n\nclass VlanSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for vlans\"\"\"\n\n    name = \"Vlans\"\n    headers = [\n        ('Vlan', 'vlan'),\n        ('Type', 'net_type'),\n        ('Netident', 'net_ident'),\n        ('Description', 'description'),\n    ]\n    link = 'Vlan'\n\n    def fetch_results(self):\n        results = (\n            Vlan.objects.exclude(net_type='loopback')\n            .filter(\n                Q(vlan__contains=self.query)\n                | Q(net_ident__icontains=self.query)\n                | Q(net_type__description__icontains=self.query)\n                | Q(description__icontains=self.query)\n            )\n            .order_by('vlan')\n        )\n        for result in results:\n            self.results.append(\n                SearchResult(\n                    reverse('vlan-details', kwargs={'vlanid': result.id}), result\n                )\n            )\n\n\nclass PrefixSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for prefixes\"\"\"\n\n    name = \"Prefix\"\n    headers = [('Prefix', 'net_address'), ('Vlan', 'vlan')]\n    link = 'Prefix'\n\n    def fetch_results(self):\n        \"\"\"Returns the prefixes determined by the query\"\"\"\n        try:\n            IP(self.query)  # Validate query\n        except ValueError:\n            pass\n        else:\n            self.results = [\n                SearchResult(p.get_absolute_url(), p)\n                for p in get_prefix_results(self.query)\n            ]\n\n\nclass UnrecognizedNeighborSearchProvider(SearchProvider):\n    \"\"\"Search provider for Unrecognized neighbor entries\"\"\"\n\n    name = \"Unrecognized neighbors\"\n    headers = [\n        ('Remote id', 'remote_id'),\n        ('Remote name', 'remote_name'),\n        ('Seen on', 'interface'),\n        ('Source', 'source'),\n    ]\n    link = 'Seen on'\n\n    def fetch_results(self):\n        results = UnrecognizedNeighbor.objects.filter(\n            Q(remote_id__contains=self.query) | Q(remote_name__contains=self.query)\n        ).order_by('remote_id', 'remote_name')\n\n        self.results = [\n            SearchResult(result.interface.get_absolute_url(), result)\n            for result in results\n        ]\n\n\nclass DevicegroupSearchProvider(SearchProvider):\n    \"\"\"Searchprovider for device group entries\"\"\"\n\n    name = \"Device groups\"\n    headers = [('Device Group', 'id'), ('# netboxes', 'num_netboxes')]\n    link = 'Device Group'\n\n    def fetch_results(self):\n        query_result = (\n            NetboxGroup.objects.filter(\n                Q(id__icontains=self.query) | Q(description__icontains=self.query)\n            )\n            .order_by('id')\n            .annotate(num_netboxes=Count('netboxes'))\n        )\n        self.results = [SearchResult(g.get_absolute_url(), g) for g in query_result]\n\n\ndef _find_matching_aliases(aliases, query):\n    \"\"\"Returns all aliases that contain the query (case-insensitive).\"\"\"\n    query_lower = query.lower()\n    return [alias for alias in aliases if query_lower in alias.lower()] or None\n"
  },
  {
    "path": "python/nav/web/info/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration\"\"\"\n\nfrom django.urls import include, path\n\nfrom nav.web.info.views import image_help_modal, index, index_search_preview\n\nurlpatterns = [\n    path('', index, name=\"info-search\"),\n    path('search-preview/', index_search_preview, name=\"info-search-preview\"),\n    path('room/', include('nav.web.info.room.urls')),\n    path('location/', include('nav.web.info.location.urls')),\n    path('vlan/', include('nav.web.info.vlan.urls')),\n    path('prefix/', include('nav.web.info.prefix.urls')),\n    path('devicegroup/', include('nav.web.info.netboxgroup.urls')),\n    path('image/', include('nav.web.info.images.urls')),\n    path('event/', include('nav.web.info.event.urls')),\n    path('image-help-modal/', image_help_modal, name='info-image-help-modal'),\n]\n"
  },
  {
    "path": "python/nav/web/info/views.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Views for /info\"\"\"\n\nimport importlib\nimport logging\n\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render\nfrom django.urls import reverse\nfrom django.conf import settings\nfrom django_htmx.http import trigger_client_event, HttpResponseClientRedirect\n\nfrom nav.web.info.forms import SearchForm\nfrom nav.web.info import searchproviders as providers\nfrom nav.util import Timer\nfrom nav.web.modals import render_modal\nfrom nav.web.utils import create_title\n\n_logger = logging.getLogger(__name__)\n\n\ndef get_path():\n    \"\"\"Get the path for this subsystem\"\"\"\n    return [('Home', '/'), ('Search', reverse('info-search'))]\n\n\ndef index(request):\n    \"\"\"Main controller\"\"\"\n\n    searchproviders = []\n    failed_providers = []\n\n    navpath = [('Home', '/'), ('Search', reverse('info-search'))]\n    titles = navpath\n\n    if \"query\" in request.GET:\n        form = SearchForm(request.GET, form_action=\"info-search\", auto_id=False)\n        if form.is_valid():\n            titles.append(('Search for \"%s\"' % request.GET[\"query\"],))\n            searchproviders, failed_providers = process_form(form)\n            if has_only_one_result(searchproviders) and not failed_providers:\n                redirect_url = searchproviders[0].results[0].href\n                if request.htmx:\n                    return HttpResponseClientRedirect(redirect_url)\n                return HttpResponseRedirect(redirect_url)\n    else:\n        form = SearchForm(form_action=\"info-search\")\n\n    if request.htmx:\n        return render(\n            request,\n            \"info/_search_results.html\",\n            {\n                \"form\": form,\n                \"searchproviders\": searchproviders,\n                \"failed_providers\": failed_providers,\n            },\n        )\n\n    return render(\n        request,\n        \"info/base.html\",\n        {\n            \"form\": form,\n            \"searchproviders\": searchproviders,\n            \"failed_providers\": failed_providers,\n            \"navpath\": navpath,\n            \"title\": create_title(titles),\n        },\n    )\n\n\ndef index_search_preview(request):\n    \"\"\"\n    Renders a preview of search results for the navbar search form.\n\n    Returns an HTTP response with the rendered search results and triggers\n    the appropriate client event for the popover.\n    \"\"\"\n    query = request.GET.get(\"query\")\n    form = SearchForm(request.GET, auto_id=False)\n    if not (query and form.is_valid()):\n        return _render_search_results(request, query=query, show_results=False)\n\n    search_providers, failed_providers = process_form(form)\n    if has_only_one_result(search_providers) and not failed_providers:\n        provider = search_providers[0]\n        if provider.name == 'Fallback':\n            return _render_search_results(request, query=query)\n\n    for provider in search_providers:\n        count = len(provider.results)\n        provider.count = count\n        if count > 5:\n            provider.results = provider.results[:5]\n            provider.truncated = True\n            provider.truncated_count = count - 5\n\n    return _render_search_results(\n        request,\n        results=search_providers,\n        query=query,\n    )\n\n\ndef _render_search_results(request, results=None, query=None, show_results=True):\n    \"\"\"Render search results\"\"\"\n\n    response = render(\n        request,\n        \"info/_navbar_search_results.html\",\n        {\"results\": results, \"query\": query or '', \"show_results\": show_results},\n    )\n    event = \"popover.open\" if show_results else \"popover.close\"\n    return trigger_client_event(\n        response,\n        event,\n        {\n            'id': 'navbar-search-form',\n        },\n    )\n\n\ndef process_form(form):\n    \"\"\"Processor for searchform on main page\"\"\"\n    query = form.cleaned_data['query']\n\n    if not query:\n        return [], []\n\n    providers_with_errors = []\n    searchproviders = []\n    for providerpath in settings.SEARCHPROVIDERS:\n        modulestring, functionstring = providerpath.rsplit('.', 1)\n        try:\n            providermodule = importlib.import_module(modulestring)\n            provider = getattr(providermodule, functionstring)\n            timer = Timer()\n            with timer:\n                searchproviders.append(provider(query))\n            _logger.debug(\n                \"Search provider %s fetched results for %r in %.3f msecs\",\n                providerpath,\n                query,\n                timer.elapsed * 1000,\n            )\n        except (AttributeError, ImportError) as error:\n            providers_with_errors.append((providerpath, error))\n            _logger.error('Could not import %s', providerpath)\n        except Exception as error:  # noqa: BLE001\n            providers_with_errors.append((providerpath, error))\n            _logger.exception(\n                \"Search provider raised unhandled exception: %s\", providerpath\n            )\n\n    providers_with_result = has_results(searchproviders)\n    if not providers_with_result and not providers_with_errors:\n        fallback = providers.FallbackSearchProvider(query)\n        if fallback.results:\n            providers_with_result.append(fallback)\n\n    return providers_with_result, providers_with_errors\n\n\ndef has_results(searchproviders):\n    \"\"\"Check if any of the searchproviders has any results\"\"\"\n    providers_with_result = []\n    for searchprovider in searchproviders:\n        if searchprovider.results:\n            providers_with_result.append(searchprovider)\n\n    return providers_with_result\n\n\ndef has_only_one_result(searchproviders):\n    \"\"\"Check if searchproviders has one and only one result\"\"\"\n    results = 0\n    for provider in searchproviders:\n        results += len(provider.results)\n    return results == 1\n\n\ndef image_help_modal(request):\n    \"\"\"View for image help modal\"\"\"\n    return render_modal(\n        request, \"info/_image_help_modal.html\", modal_id=\"image-help\", size=\"small\"\n    )\n"
  },
  {
    "path": "python/nav/web/info/vlan/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/info/vlan/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration\"\"\"\n\nfrom django.urls import re_path, path\nfrom nav.web.info.vlan import views\n\n\nurlpatterns = [\n    path('', views.index, name='vlan-index'),\n    path('<int:vlanid>/', views.vlan_details, name='vlan-details'),\n    path(\n        'graph/prefix/<int:prefixid>',\n        views.create_prefix_graph,\n        name='vlan-graph-prefix',\n    ),\n    re_path(\n        r'^graph/vlan/(?P<vlanid>\\d+)/(?P<family>\\d)?$',\n        views.create_vlan_graph,\n        name='vlan-graph-prefix',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/info/vlan/views.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"View definitions for info/vlan\"\"\"\n\nimport logging\nfrom operator import methodcaller, attrgetter\nfrom functools import partial\n\nfrom IPy import IP\n\nfrom django.db.models import Q\nfrom django.shortcuts import render, get_object_or_404, redirect\nfrom django.urls import reverse\nfrom django.http import HttpResponse\n\nfrom nav.models.manage import Prefix, Vlan\nfrom nav.web.utils import create_title\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.metrics.graphs import get_simple_graph_url\nfrom nav.metrics.names import join_series\nfrom nav.metrics.templates import metric_path_for_prefix\nfrom ..forms import SearchForm\n\n_logger = logging.getLogger(__name__)\nADDRESS_RESERVED_SPACE = 18\n\n\nclass VlanSearchForm(SearchForm):\n    \"\"\"Searchform for vlans\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(VlanSearchForm, self).__init__(\n            *args, form_action='vlan-index', placeholder='Vlan', **kwargs\n        )\n\n\ndef get_path(extra=None):\n    \"\"\"Return breadcrumb list\"\"\"\n    if not extra:\n        extra = []\n    return [\n        ('Home', '/'),\n        ('Search', reverse('info-search')),\n        ('Vlan', reverse('vlan-index')),\n    ] + extra\n\n\ndef index(request):\n    \"\"\"Controller for vlan landing page and search\"\"\"\n    vlans = Vlan.objects.none()\n\n    navpath = get_path()\n    if \"query\" in request.GET:\n        searchform = VlanSearchForm(request.GET)\n        if searchform.is_valid():\n            navpath = get_path([('Search for \"%s\"' % request.GET['query'],)])\n            vlans = process_searchform(searchform)\n    else:\n        searchform = VlanSearchForm()\n\n    _logger.debug(vlans)\n\n    if request.htmx:\n        return render(\n            request,\n            \"info/vlan/_search_results.html\",\n            {\n                'vlans': vlans,\n                'form': searchform,\n            },\n        )\n\n    return render(\n        request,\n        \"info/vlan/base.html\",\n        {\n            'navpath': navpath,\n            'title': create_title(navpath),\n            'form': searchform,\n            'vlans': vlans,\n        },\n    )\n\n\ndef process_searchform(form):\n    \"\"\"Find and return vlans based on searchform\"\"\"\n    query = form.cleaned_data['query']\n    _logger.debug('Processing searchform for vlans with query: %s', query)\n    if query is None:\n        return Vlan.objects.all()\n    else:\n        return Vlan.objects.filter(\n            Q(vlan__icontains=query)\n            | Q(net_type__description__icontains=query)\n            | Q(description__icontains=query)\n            | Q(net_ident__icontains=query)\n        ).order_by(\"vlan\")\n\n\ndef vlan_details(request, vlanid):\n    \"\"\"Render details for a vlan\"\"\"\n    vlan = get_object_or_404(Vlan, pk=vlanid)\n    prefixes = sorted(vlan.prefixes.all(), key=methodcaller('get_prefix_size'))\n\n    has_v6 = False\n    has_v4 = False\n    for prefix in prefixes:\n        version = IP(prefix.net_address).version()\n        if version == 6:\n            has_v6 = True\n        elif version == 4:\n            has_v4 = True\n\n    navpath = get_path([(str(vlan), '')])\n\n    try:\n        dhcp_graph_urls = vlan.get_dhcp_graph_urls()\n        graphite_error = False\n    except GraphiteUnreachableError:\n        dhcp_graph_urls = []\n        graphite_error = True\n\n    return render(\n        request,\n        'info/vlan/vlandetails.html',\n        {\n            'vlan': vlan,\n            'prefixes': prefixes,\n            'gwportprefixes': find_gwportprefixes(vlan),\n            'navpath': navpath,\n            'has_v4': has_v4,\n            'has_v6': has_v6,\n            'title': create_title(navpath),\n            'dhcp_graph_urls': dhcp_graph_urls,\n            'graphite_error': graphite_error,\n        },\n    )\n\n\ndef create_prefix_graph(request, prefixid):\n    \"\"\"Returns a Graphite graph render URL for this prefix\"\"\"\n    prefix = get_object_or_404(Prefix, pk=prefixid)\n\n    path = partial(metric_path_for_prefix, prefix.net_address)\n    ip_count = (\n        'alpha(color(cactiStyle(alias(stacked({0}), \"IP addresses \")), \"green\"),0.8)'\n    ).format(path('ip_count'))\n    ip_range = 'color(cactiStyle(alias({0}, \"Max addresses\")), \"red\")'.format(\n        path('ip_range')\n    )\n    mac_count = 'color(cactiStyle(alias({0}, \"MAC addresses\")), \"blue\")'.format(\n        path('mac_count')\n    )\n\n    metrics = [ip_count, mac_count]\n    if IP(prefix.net_address).version() == 4:\n        metrics.append(ip_range)\n\n    timeframe = \"1\" + request.GET.get('timeframe', 'day')\n    url = get_simple_graph_url(\n        metrics, timeframe, title=prefix.net_address, width=397, height=201\n    )\n    if url:\n        return redirect(url)\n    else:\n        return HttpResponse(status=500)\n\n\ndef create_vlan_graph(request, vlanid, family=4):\n    \"\"\"Returns a JSON response containing a Graphite graph render URL for this\n    VLAN.\n    \"\"\"\n    timeframe = request.GET.get('timeframe', 'day')\n    url = get_vlan_graph_url(vlanid, family, timeframe)\n\n    if url:\n        return redirect(url)\n    else:\n        return HttpResponse(status=500)\n\n\ndef get_vlan_graph_url(vlanid, family=4, timeframe=\"day\"):\n    \"\"\"Returns a Graphite graph render URL for a VLAN\"\"\"\n    vlan = get_object_or_404(Vlan, pk=vlanid)\n    try:\n        family = int(family)\n    except ValueError:\n        family = 4\n\n    extra = {'where': ['family(netaddr) = %s' % family]}\n    prefixes = sorted(\n        vlan.prefixes.all().extra(**extra),\n        key=methodcaller('get_prefix_size'),\n        reverse=True,\n    )\n    if not prefixes:\n        return None\n\n    metrics = _vlan_metrics_from_prefixes(prefixes, family)\n    return get_simple_graph_url(\n        metrics,\n        \"1\" + timeframe,\n        title=\"Total IPv{0} addresses on VLAN {1}\".format(family, vlan),\n        width=597,\n        height=251,\n    )\n\n\ndef _vlan_metrics_from_prefixes(prefixes, ip_version):\n    metrics = []\n    ip_ranges = []\n    ip_counts = []\n    for prefix in prefixes:\n        ip_count = metric_path_for_prefix(prefix.net_address, 'ip_count')\n        ip_range = metric_path_for_prefix(prefix.net_address, 'ip_range')\n        ip_counts.append(ip_count)\n        ip_ranges.append(ip_range)\n        series = 'alpha(stacked(cactiStyle(alias({0}, \"{1}\"))),0.8)'.format(\n            ip_count, prefix.net_address\n        )\n        series = (\n            r'aliasSub(aliasSub(aliasSub({0},\"stacked\",\"\"),' r'\"\\(\",\"\"),\"\\)\",\"\")'\n        ).format(series)\n        metrics.append(series)\n\n    if ip_version == 4:\n        series = 'alias(color(sumSeries({0}), \"red\"), \"MAX\")'.format(\n            join_series(ip_ranges)\n        )\n        metrics.append(series)\n\n    if len(prefixes) > 1:\n        series = 'color(cactiStyle(alias(sumSeries({0}), \"Total\")), \"00000000\")'\n        series = series.format(join_series(ip_counts))\n        metrics.append(series)\n\n    return metrics\n\n\ndef find_gwportprefixes(vlan):\n    \"\"\"Find routers that defines this vlan\"\"\"\n    gwportprefixes = []\n    for prefix in vlan.prefixes.all():\n        gwportprefixes.extend(\n            prefix.gwport_prefixes.filter(\n                interface__netbox__category__id__in=['GSW', 'GW']\n            )\n        )\n    return sorted(gwportprefixes, key=attrgetter('gw_ip'))\n"
  },
  {
    "path": "python/nav/web/interface_browser/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/interface_browser/urls.py",
    "content": "# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL-config for PortList tool\"\"\"\n\nfrom django.urls import path\nfrom nav.web.interface_browser import views\n\n\nurlpatterns = [\n    path('', views.index),\n    path('<int:netboxid>', views.by_netboxid, name='interface_browser-netbox'),\n]\n"
  },
  {
    "path": "python/nav/web/interface_browser/views.py",
    "content": "# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers and views for PortList tool\"\"\"\n\nfrom django.shortcuts import render\n\nfrom nav.web import utils\n\n\ndef default_context():\n    navpath = (('Home', '/'), ('Interface browser',))\n    return {'navpath': navpath, 'title': utils.create_title(navpath)}\n\n\ndef index(request):\n    context = default_context()\n    return render(request, 'interface_browser/base.html', context)\n\n\ndef by_netboxid(request, netboxid):\n    context = default_context()\n    context.update({'netboxid': netboxid})\n    return render(request, 'interface_browser/base.html', context)\n"
  },
  {
    "path": "python/nav/web/ipam/__init__.py",
    "content": "\"\"\"IPA IPAM PAM-PAM\n\nIP address management tool\"\"\"\n"
  },
  {
    "path": "python/nav/web/ipam/api.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"\nAPI specific code for the private IPAM API. Exports a router for easy mounting.\n\n\"\"\"\n\nfrom rest_framework import viewsets, status, routers\nfrom rest_framework import serializers\nfrom rest_framework.response import Response\nfrom rest_framework.decorators import action\nfrom nav.ip import IP\n\nfrom nav.models.manage import Prefix\nfrom nav.web.api.v1.serializers import PrefixSerializer\nfrom nav.web.api.v1.helpers import prefix_collector\nfrom nav.web.ipam.util import (\n    PrefixQuerysetBuilder,\n    get_available_subnets,\n    suggest_range,\n)\n\nfrom .prefix_tree import make_tree, make_tree_from_ip\n\n\n# from nav.models.fields import CIDRField\n\n\n# Inspired by\n# http://blog.karolmajta.com/parsing-query-parameters-in-rest-framework/\nclass SuggestParams(serializers.Serializer):\n    prefix = serializers.CharField()\n    n = serializers.IntegerField(default=10)\n    prefixlen = serializers.IntegerField(default=24, min_value=1, max_value=128)\n    offset = serializers.IntegerField(default=0)\n\n    def validate(self, data):\n        try:\n            if IP(data['prefix']).version() == 4 and data['prefixlen'] > 32:\n                raise serializers.ValidationError(\n                    \"Prefixlen can not be higher than 32 for ipv4 prefixes\"\n                )\n        except ValueError:\n            raise serializers.ValidationError(\"Invalid prefix\")\n        return data\n\n\nclass PrefixViewSet(viewsets.ViewSet):\n    \"\"\"Potpurri view for anything IPAM needs to function properly.\n\n    Filters\n    -------\n    - net_type: *Only return this type of prefix. Can be used multiple times.*\n    - search: *Match against the description or organization of the VLAN*\n    - ip: *Find all prefixes that contain this IP*\n    - organization: *Match against the VLAN's organization*\n    - vlan: *Match against a certain VLAN number*\n    - description: *Match against the VLAN's description*\n    - within: *Find all prefixes within this range*\n    - usage: *Find all prefixes with this usage description*\n\n    Examples\n    --------\n    ?net_type=scope&organization=NTNU&within=10.0.0.0/8\n\n    \"\"\"\n\n    serializer = PrefixSerializer\n    search_fields = \"vlan__description\"\n\n    def get_queryset(self):\n        \"Build queryset for API using filters\"\n        net_types = self.request.query_params.getlist(\"net_type\", None)\n        if \"all\" in net_types:\n            net_types = None\n        search = self.request.query_params.get(\"search\", None)\n        if search is not None and search:\n            net_types = None\n        ip = self.request.query_params.get(\"ip\", None)\n        if ip is not None and ip:\n            net_types = None\n        organization = self.request.query_params.get(\"organization\", None)\n        vlan_number = self.request.query_params.get(\"vlan\", None)\n        description = self.request.query_params.get(\"description\", None)\n        within = self.request.query_params.get(\"within\", None)\n        usage = self.request.query_params.get(\"usage\", None)\n        # Build queryset\n        queryset = PrefixQuerysetBuilder()\n        queryset.within(within)\n        queryset.net_type(net_types)\n        queryset.search(search)\n        queryset.organization(organization)\n        queryset.vlan_number(vlan_number)\n        queryset.contains_ip(ip)\n        queryset.usage(usage)\n        queryset.description(description)\n        queryset.filter_full_prefixes()\n        return queryset.finalize()\n\n    @action(detail=False, methods=[\"get\"])\n    def suggest(self, request, *args, **kwargs):\n        \"Suggests subnets of size=?number_of_hosts for ?prefix\"\n        params = SuggestParams(data=request.query_params)\n        if not params.is_valid():\n            return Response(data=params.errors, status=status.HTTP_400_BAD_REQUEST)\n        params = params.validated_data\n        payload = suggest_range(\n            params[\"prefix\"],\n            offset=params[\"offset\"],\n            prefixlen=params[\"prefixlen\"],\n            n=params[\"n\"],\n        )\n        return Response(payload, status=status.HTTP_200_OK)\n\n    @action(detail=True, methods=[\"get\"])\n    def usage(self, request, *args, **kwargs):\n        \"Return usage for Prefix.pk == pk\"\n        pk = kwargs.pop(\"pk\", None)\n        prefix = Prefix.objects.get(pk=pk)\n        max_addr = IP(prefix.net_address).len()\n        active_addr = prefix_collector.collect_active_ip(prefix)\n        # calculate allocated ratio\n        query = PrefixQuerysetBuilder().within(prefix.net_address)\n        allocated = query.finalize().exclude(vlan__net_type=\"scope\")\n        total_allocated = sum(p.get_prefix_size() for p in allocated)\n        payload = {\n            \"max_addr\": max_addr,\n            \"active_addr\": active_addr,\n            \"usage\": 1.0 * active_addr / max_addr,\n            \"allocated\": 1.0 * total_allocated / max_addr,\n            \"pk\": pk,\n        }\n        return Response(payload, status=status.HTTP_200_OK)\n\n    def list(self, request, *args, **kwargs):\n        \"List a tree-like structure of all prefixes matching the query\"\n        prefixes = self.get_queryset()\n        family = self.request.query_params.getlist(\"type\", [\"ipv4\", \"ipv6\", \"rfc1918\"])\n        within = self.request.query_params.get(\"within\", None)\n        show_all = self.request.query_params.get(\"show_all\", None)\n        result = make_tree(prefixes, root_ip=within, family=family, show_all=show_all)\n        payload = result.fields[\"children\"]\n        return Response(payload, status=status.HTTP_200_OK)\n\n\nclass PrefixFinderSet(viewsets.ViewSet):\n    \"\"\"Utility view for finding available subnets. Only returns prefixes that\n    are either scopes or reserved.\n\n    Filters\n    -------\n    - prefix: *Range or prefix to query against (e.g. '10.0.0.0/8')*\n    - organization: *Match against the corresponding VLAN's organization*\n\n    \"\"\"\n\n    serializer = PrefixSerializer\n\n    def get_queryset(self):\n        # Extract filters\n        organization = self.request.query_params.get(\"organization\", None)\n        # Build queryset\n        queryset = PrefixQuerysetBuilder()\n        queryset.organization(organization)\n        queryset.net_type([\"scope\", \"reserved\"])\n        return queryset.finalize()\n\n    def list(self, request, *args, **kwargs):\n        \"\"\"List all available subnets for the prefixes returned by the initial\n        query.\n\n        Filters\n        -------\n        - prefix: *Range or prefix to query against (e.g. '10.0.0.0/8')*\n        - prefix_size: *The maximum prefix length (mask, e.g. /32)*\n\n        \"\"\"\n        prefix = self.request.query_params.get(\"prefix\", None)\n        result = get_available_subnets(prefix)\n        prefix_size = self.request.query_params.get(\"prefix_size\", None)\n        if prefix_size is not None:\n            prefix_size = int(prefix_size)\n            result = [prefix for prefix in result if prefix.prefixlen() <= prefix_size]\n        payload = {\n            \"prefix\": prefix,\n            \"prefixlen\": prefix.split(\"/\")[1],\n            \"children\": make_tree_from_ip(result).fields[\"children\"],\n        }\n        return Response(payload, status=status.HTTP_200_OK)\n\n\nrouter = routers.SimpleRouter()\nrouter.register(r\"^/find\", PrefixFinderSet, basename=\"ipam-api-finder\")\nrouter.register(r\"^\", PrefixViewSet, basename=\"ipam-api\")\n"
  },
  {
    "path": "python/nav/web/ipam/prefix_tree.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"\nUtility class for creating prefix heaps from Prefix objects in NAV. Also\ncontains ad-hoc serializer methods (self.fields) for API purposes.\n\n\"\"\"\n\nimport bisect\nimport json\nimport functools\nimport logging\nfrom IPy import IP, IPSet\n\nfrom django.urls import reverse, NoReverseMatch\n\nfrom nav.web.ipam.util import get_available_subnets\nfrom nav.models.manage import Prefix\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass PrefixHeap(object):\n    \"Pseudo-heap ordered topologically by prefixes\"\n\n    def __init__(self, children=None):\n        if children is None:\n            children = []\n        self.children = children\n\n    @property\n    def fields(self):\n        \"Return the children of the heap as a dictionary\"\n        payload = {\"children\": [child.fields for child in self.children]}\n        return payload\n\n    def is_leaf(self):\n        \"Whether or not the node has any children\"\n        return len(self.children) == 0\n\n    def walk(self):\n        \"List of all the nodes (preorder walk).\"\n        queue = []\n        queue.extend(self.children)\n        while queue:\n            _node = queue.pop()\n            if not _node:\n                continue\n            queue.extend(_node.children)\n            yield _node\n\n    def walk_roots(self):\n        \"Walk non-leaf nodes in heap (preorder)\"\n        for node in self.walk():\n            if not node.is_leaf():\n                yield node\n\n    @property\n    def json(self):\n        \"Exported fields as a JSON map\"\n        return json.dumps(self.fields)\n\n    @property\n    def children_count(self):\n        \"Number of children (shallow)\"\n        return len(self.children)\n\n    def add(self, node):\n        \"Add a node to the heap\"\n        assert isinstance(node, PrefixHeap), (\n            \"Can only add classes inheriting from PrefixHeap\"\n        )\n        # first, try adding to children (recursively)\n        i = bisect.bisect_left(self.children, node)\n        if i > 0 and node in self.children[i - 1]:\n            child = self.children[i - 1]\n            node.parent = child\n            child.add(node)\n            return\n        self.children.insert(i, node)\n\n    def add_many(self, nodes):\n        \"Add multiple nodes to heap\"\n        for node in nodes:\n            self.add(node)\n\n\n# To maintain our sanity, we need a somewhat decent contract between the view\n# and any controller logic. The solution is to use the Facade pattern, which\n# wraps internal complexities (serialization, nested attributes and so on) and\n# exposes a clean, non-nested attribute contract (we promise that the field 'x'\n# will exist and be populated with some value) etc.\n\n\n@functools.total_ordering\nclass IpNode(PrefixHeap):\n    \"PrefixHeap node class\"\n\n    def __init__(self, ip_addr, net_type):\n        super(IpNode, self).__init__()\n        self._ip = IP(ip_addr)\n        self.net_type = net_type\n\n    @property\n    def ip(self):\n        \"Return the IP object of the node\"\n        return self._ip\n\n    def not_in_use(self):\n        \"Show unused subnets in the CIDR range\"\n        if self.is_leaf() or self.net_type != \"scope\":\n            return []\n        base_set = IPSet([self.ip])\n        for child in self.children:\n            base_set.discard(child.ip)\n        return base_set.prefixes\n\n    def in_use(self):\n        \"Show allocated *used( subnets in the CIDR range\"\n        return IPSet([child.ip for child in self.children])\n\n    # Comparison utilities\n    def __contains__(self, other):\n        assert isinstance(other, IpNode), \"Can only compare with other IpNode elements\"\n        return other.ip in self.ip\n\n    def __cmp__(self, other):\n        assert isinstance(other, IpNode), \"Can only compare with other IpNode elements\"\n        return self.ip.__cmp__(other.ip)\n\n    def __eq__(self, other):\n        assert isinstance(other, IpNode), \"Can only compare with other IpNode elements\"\n        return self.ip == other.ip\n\n    def __lt__(self, other):\n        assert isinstance(other, IpNode), \"Can only compare with other IpNode elements\"\n        return self.ip < other.ip\n\n\nclass IpNodeFacade(IpNode):\n    \"Utility mixin for nodes with IPy.IP objects in in the 'self.ip' field\"\n\n    # Class attributes to export to JSON\n    FIELDS = [\n        \"pk\",\n        \"length\",\n        \"net_type\",\n        \"children_pks\",\n        \"net_ident\",\n        \"ip_version\",\n        \"edit_url\",\n        \"prefix\",\n        \"prefixlen\",\n        \"organization\",\n        \"description\",\n        \"vlan_number\",\n        \"is_mock_node\",\n        \"last_octet\",\n        \"bits\",\n        \"empty_ranges\",\n        \"is_reservable\",\n        \"parent_pk\",\n    ]\n\n    def __init__(self, ip_addr, pk, net_type, sort_fn=None):\n        super(IpNodeFacade, self).__init__(ip_addr, net_type)\n        self.pk = pk\n        self.sort_fn = sort_fn\n\n    @property\n    def parent_pk(self):\n        \"The primary key of the node's parent\"\n        if self.parent is None:\n            return None\n        return self.parent.pk\n\n    @property\n    def is_reservable(self):\n        \"Whether or not the prefix can be reserved in NAV\"\n        empty_scope = self.net_type == \"scope\" and self.length == 0\n        return self.net_type == \"available\" or empty_scope\n\n    @property\n    def empty_ranges(self):\n        \"Ranges within the node not spanned by its children\"\n        return [str(prefix) for prefix in self.not_in_use()]\n\n    @property\n    def net_ident(self):\n        \"The identity of the associated VLAN/network\"\n        ident = getattr(self, \"_net_ident\", None)\n        return ident if ident else None\n\n    @property\n    def bits(self):\n        \"Numeric value of address\"\n        return self.ip.ip\n\n    @property\n    def fields(self):\n        \"\"\"Return all fields marked for serialization (in self.FIELDS) as a\n        Python dict. Also serializes children, creating a nested object.\n\n        \"\"\"\n        payload = {}\n        for field in self.FIELDS:\n            try:\n                value = getattr(self, field, None)\n                payload[field] = value\n            except AttributeError:\n                payload[field] = None\n        if self.sort_fn is not None:\n            children = [child.fields for child in self.children]\n            payload[\"children\"] = sorted(children, key=self.sort_fn)\n        else:\n            payload[\"children\"] = [child.fields for child in self.children]\n        return payload\n\n    @property\n    def last_octet(self):\n        \"Return last octet of address\"\n        return self.ip.ip & 0xFF\n\n    @property\n    def vlan_number(self):\n        \"Return ID number of associated VLAN\"\n        return getattr(self, \"_vlan_number\", None)\n\n    @property\n    def ip_version(self):\n        \"Return the IP family of this prefix (4 or 6)\"\n        return self.ip.version()\n\n    @property\n    def edit_url(self):\n        \"URL to edit this node in SeedDB, if applicable\"\n        try:\n            return reverse(\"seeddb-prefix-edit\", kwargs={\"prefix_id\": self.pk})\n        except NoReverseMatch:\n            return None\n\n    @property\n    def prefixlen(self):\n        \"Return the length of the prefix (e.g. 8 in 10.0.0.0/8)\"\n        return self.ip.prefixlen()\n\n    @property\n    def prefix(self):\n        \"Return the prefix (as a string)\"\n        return str(self.ip)\n\n    @property\n    def children_pks(self):\n        \"Return the primary keys of all children\"\n        if not self.children:\n            return []\n        return [child.pk for child in self.children]\n\n    @property\n    def length(self):\n        \"Return number of children (in total, e.g. not shallow)\"\n        deep_count = sum(child.children_count for child in self.children)\n        return self.children_count + deep_count\n\n    @property\n    def organization(self):\n        \"The name of the organization connected to the prefix\"\n        return str(getattr(self, \"_organization\", \"\"))\n\n    @property\n    def description(self):\n        \"The description of the prefix\"\n        return getattr(self, \"_description\", \"\")\n\n    @property\n    def is_mock_node(self):\n        \"Marker property for declaring the node as fake (templating reasons)\"\n        return False\n\n\nclass FauxNode(IpNodeFacade):\n    \"'Fake' nodes (manual constructor) in a prefix heap\"\n\n    def __init__(self, ip_addr, pk, net_type):\n        super(FauxNode, self).__init__(ip_addr, pk, net_type)\n\n    @property\n    def is_mock_node(self):\n        \"Marker propery for declaring the node as fake (templating reasons)\"\n        return True\n\n\nclass FakeVLAN(object):\n    \"Mock object that quacks like prefix.vlan\"\n\n    def __init__(self):\n        pass\n\n    @property\n    def net_type(self):\n        \"The type of the network\"\n        return \"UNKNOWN\"\n\n    @property\n    def description(self):\n        \"Description of the network\"\n        return \"UNKNOWN\"\n\n    @property\n    def organization(self):\n        \"Organization connected to the network\"\n        return \"UNKNOWN\"\n\n    @property\n    def vlan(self):\n        \"The VLAN ID of the network\"\n        return \"UNKNOWN\"\n\n    @property\n    def net_ident(self):\n        \"The network identifier of the network\"\n        return \"UNKNOWN\"\n\n\nclass PrefixNode(IpNodeFacade):\n    \"Wrapper node for Prefix results\"\n\n    def __init__(self, prefix, sort_fn=None):\n        self._prefix = prefix  # cache of prefix\n        ip_addr = prefix.net_address\n        primary_key = prefix.pk\n        # Some prefixes might not have an associated VLAN due to data/migration\n        # issues, in which case we use a filler\n        vlan = getattr(prefix, \"vlan\", None)\n        if vlan is None:\n            _logger.warning(\n                \"Prefix % id=% does not have a VLAN relation\",\n                prefix.net_address,\n                prefix.id,\n            )\n            vlan = FakeVLAN()\n        net_type = str(vlan.net_type)\n        super(PrefixNode, self).__init__(ip_addr, primary_key, net_type, sort_fn)\n        self._description = vlan.description\n        self._organization = vlan.organization\n        self._vlan_number = vlan.vlan\n        self._net_ident = vlan.net_ident\n        # Export usage field of VLAN\n        if getattr(vlan, \"usage\", None):\n            self.vlan_usage = prefix.vlan.usage.description\n            self.FIELDS.append(\"vlan_usage\")\n\n\ndef make_prefix_heap(\n    prefixes,\n    initial_children=None,\n    family=None,\n    sort_fn=None,\n    show_available=False,\n    show_unused=False,\n):\n    \"\"\"Return a prefix heap of all prefixes. Might optionally filter out IPv4\n    and IPv6 as needed.\n\n    Args:\n        prefixes: a queryset for or list of nav.models.manage.Prefix\n        initial_children: a list of IPNode to initialize the root with\n        family: a list of address types to allow (of \"ipv4\", \"ipv6\", \"rfc1918\")\n        sort_fn: function used to sort the children upon serialization\n        show_available: whether or not to create \"fake\" children for all ranges\n            not spanned by the node's children or found otherwhere in NAV\n        show_unused: like above, but only creates such nodes for prefixes that\n            are in fact found within NAV\n\n    Returns:\n        A prefix heap (tree)\n\n    \"\"\"\n    rfc1918 = IPSet([IP(\"10.0.0.0/8\"), IP(\"172.16.0.0/12\"), IP(\"192.168.0.0/16\")])\n\n    def accept(prefix):\n        \"Helper function for filtering prefixes by IP family\"\n        ip_addr = IP(prefix.net_address)\n        if \"ipv4\" in family and ip_addr.version() == 4 and ip_addr not in rfc1918:\n            return True\n        if \"ipv6\" in family and ip_addr.version() == 6:\n            return True\n        if \"rfc1918\" in family and ip_addr in rfc1918:\n            return True\n        return False\n\n    heap = PrefixHeap(initial_children)\n    filtered = (prefix for prefix in prefixes if accept(prefix))\n    nodes = (PrefixNode(prefix, sort_fn=sort_fn) for prefix in filtered)\n    for node in sorted(nodes, reverse=False):\n        heap.add(node)\n    # Add marker nodes for available ranges/prefixes\n    if show_available:\n        scopes = (child for child in heap.walk_roots() if child.net_type in [\"scope\"])\n        subnets = (get_available_nodes([scope.ip]) for scope in scopes)\n        for subnet in subnets:\n            heap.add_many(subnet)\n    # Add marker nodes for empty ranges, e.g. ranges not spanned by the\n    # children of a node. This is useful for aligning visualizations and so on.\n    if show_unused:\n        unused_prefixes = (child.not_in_use() for child in heap.walk())\n        for unused_prefix in unused_prefixes:\n            nodes = nodes_from_ips(unused_prefix, klass=\"empty\")\n            heap.add_many(nodes)\n    return heap\n\n\nSORT_BY = {\"vlan_number\": lambda x: x.vlan_number}\n\n\ndef get_available_nodes(ips):\n    \"\"\"Find available subnets for each IP in 'ips' and return them as\n    FauxNodes.\n\n    \"\"\"\n    available_nodes = get_available_subnets(ips)\n    return nodes_from_ips(available_nodes, klass=\"available\")\n\n\ndef nodes_from_ips(ips, klass=\"empty\"):\n    \"Turn a list of IPs into FauxNodes\"\n    return [FauxNode(ip, ip.strNormal(), klass) for ip in ips]\n\n\ndef make_tree(prefixes, family=None, root_ip=None, show_all=None, sort_by=\"ip\"):\n    \"\"\"Return a prefix heap initially populated with RFC1918 addresses. Accepts\n    parameters rfc1918, ipv4 and ipv6 to return addresses of those respective\n    families. Do note that we distinguish between 'real' IPv4, which is everything\n    not part of the RFC1918 ranges.\n\n        Args:\n            prefixes: a queryset for or list of nav.models.manage.Prefix\n            family: a list of address types to allow (of \"ipv4\", \"ipv6\", \"rfc1918\")\n            root_ip: prefix string or IPy.IP object to use as the root of the tree\n            show_all: whether or not to create fake nodes that fill in available\n                within a parent (e.g. unused subnets) or nodes that are detected\n                within this prefix for NAV, but still not present in the heap\n            sort_by: key to sort the nodes/children by\n\n        Returns:\n            A prefix heap (tree)\n\n    \"\"\"\n    family = {\"ipv4\", \"ipv6\", \"rfc1918\"} if family is None else set(family)\n    init = []\n\n    if root_ip is not None and root_ip:\n        try:\n            scope = Prefix.objects.get(net_address=root_ip)\n            node = PrefixNode(scope)\n        except Prefix.DoesNotExist:\n            node = FauxNode(root_ip, \"scope\", \"scope\")\n        init.append(node)\n\n    opts = {\n        \"initial_children\": init,\n        \"family\": family,\n        \"sort_fn\": SORT_BY.get(sort_by, None),\n        \"show_available\": show_all,\n        \"show_unused\": show_all,\n    }\n    return make_prefix_heap(prefixes, **opts)\n\n\ndef make_tree_from_ip(cidr_addresses):\n    \"\"\"Like make_tree, but for strings of CIDR addresses\n\n    Args:\n        cidr_addresses: A list of strings of prefixes (\"10.0.0.0/8\")\n\n    Returns:\n        A prefix heap (or tree).\n\n    \"\"\"\n    heap = PrefixHeap()\n    for addr in cidr_addresses:\n        prefix = FauxNode(addr, \"available\", \"available\")\n        heap.add(prefix)\n    return heap\n"
  },
  {
    "path": "python/nav/web/ipam/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2016 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nDjango URL configuration.\n\nExposes a private, read-only API (self/api) for search purposes mostly.\n\n\"\"\"\n\nfrom django.urls import path, re_path, include\n\nfrom nav.web.ipam.views import index, matrix, subnet_allocator_help_modal\nfrom nav.web.ipam.api import router\n\n\nurlpatterns = [\n    path('', index),\n    path('matrix', matrix),\n    path('api', include(router.urls)),\n    re_path(\n        r'^subnetallocatorhelp',\n        subnet_allocator_help_modal,\n        name='ipam-subnet-allocator-help',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/ipam/util.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n\n\"\"\"\nAPI and prefixes related utilities\n\"\"\"\n\nimport ipaddress\nfrom itertools import islice\n\nfrom IPy import IP, IPSet\nfrom django.db.models import Q\n\nfrom nav.models.manage import Prefix\n\n\nclass PrefixQuerysetBuilder(object):\n    \"\"\"Utility class to build queryset(s) for Prefix. Returns the resulting\n    queryset when finalize() is called.\n\n    \"\"\"\n\n    def __init__(self, queryset=None):\n        if queryset is None:\n            queryset = Prefix.objects.all()\n        self.queryset = queryset\n        self.queryset = self.queryset.select_related(\n            'vlan', 'vlan__net_type', 'vlan__organization'\n        )\n        self.is_realized = False\n        self.post_hooks = [lambda x: x]\n\n    def filter(self, origin, *args, **kwargs):\n        \"\"\"Works like queryset.filter, but returns self and short-circuits on\n        'None' origin\n\n        \"\"\"\n        if origin is not None and origin:\n            self.queryset = self.queryset.filter(*args, **kwargs)\n        return self\n\n    def finalize(self):\n        \"Returns the queryset with all filters applied\"\n        # Apply post-hooks before returning final result\n        for fn in self.post_hooks:\n            self.queryset = fn(self.queryset)\n        return self.queryset\n\n    # Filter methods\n    def organization(self, org):\n        \"Fuzzy match prefix on VLAN organization\"\n        return self.filter(org, vlan__organization__id=org)\n\n    def filter_full_prefixes(self):\n        \"\"\"Remove /32 (or /128) prefixes from the queryset. Often useful to\n        reduce noise, as these are of little or no value to most network\n        planning operations.\n\n        Returns:\n            A lazy iterator of all filtered prefixes\n\n        \"\"\"\n\n        def _filter_full_prefixes(q):\n            for prefix in q:\n                ip = IP(prefix.net_address)\n                if ip.version() == 4 and ip.prefixlen() < 32:\n                    yield prefix\n                    continue\n                if ip.version() == 6 and ip.prefixlen() < 128:\n                    yield prefix\n                    continue\n\n        self.post_hooks.append(_filter_full_prefixes)\n        return self\n\n    def description(self, descr):\n        \"Fuzzy match prefix on VLAN description\"\n        return self.filter(descr, vlan__description__icontains=descr)\n\n    def vlan_number(self, vlan_number):\n        \"Return prefixes belonging to a particular VLAN\"\n        if vlan_number is None and vlan_number:\n            return self\n        return self.filter(vlan_number, vlan__vlan=vlan_number)\n\n    def net_type(self, net_type_or_net_types):\n        \"Return prefixes only of the given type(s)\"\n        if net_type_or_net_types is None or not net_type_or_net_types:\n            return self\n        types = net_type_or_net_types\n        if not isinstance(types, list):\n            types = [types]\n        return self.filter(types, vlan__net_type__in=types)\n\n    def search(self, query):\n        \"\"\"Fuzzy search prefixes with query on VLAN description or\n        organization\n\n        \"\"\"\n        new_query = Q()\n        new_query.add(Q(vlan__description__icontains=query), Q.OR)\n        new_query.add(Q(vlan__organization__id__icontains=query), Q.OR)\n        return self.filter(query, new_query)\n\n    def usage(self, usage):\n        \"Return prefixes based on their VLAN's usage field\"\n        return self.filter(usage, vlan__usage__id=usage)\n\n    # Mutating methods, e.g. resets the queryset\n    def within(self, prefix):\n        \"Sets the queryset to every Prefix within a certain prefix\"\n        if prefix is not None and prefix:\n            self.queryset = self.queryset & Prefix.objects.within(prefix)\n        return self\n\n    def contains_ip(self, addr):\n        \"Returns all prefixes containing the given address\"\n        try:\n            ip = IP(addr)\n        except (ValueError, TypeError):\n            return self\n        new_query = Prefix.objects.contains_ip(ip.strNormal())\n        self.queryset = self.queryset & new_query\n        return self\n\n\n# Code finding available subnets\ndef get_available_subnets(prefix_or_prefixes):\n    \"\"\"Get available prefixes within a list of CIDR addresses, based on\n    prefixes found in NAV.\n\n    Args:\n        prefix_or_prefixes: a single or a list of prefixes (\"10.0.0.0/8\") or\n                          IPy.IP objects\n\n    Returns:\n           An iterable IPy.IPSet of available addresses.\n\n    \"\"\"\n    if not isinstance(prefix_or_prefixes, list):\n        prefix_or_prefixes = [prefix_or_prefixes]\n    base_prefixes = [str(prefix) for prefix in prefix_or_prefixes]\n    all_used_prefixes = []\n    for prefix in base_prefixes:\n        # Query NAV to get prefixes within the current base prefix\n        used_prefixes = PrefixQuerysetBuilder().within(prefix).finalize()\n        for used_prefix in used_prefixes:\n            all_used_prefixes.append(used_prefix.net_address)\n    return _get_available_subnets(prefix_or_prefixes, all_used_prefixes)\n\n\ndef _get_available_subnets(prefix_or_prefixes, used_prefixes):\n    \"\"\"Get available prefixes within a list of CIDR addresses, based on what\n    prefixes are in use. E.g. this is `get_available_subnets`, but with\n    explicit dependency injection.\n\n    Args:\n        prefix_or_prefixes: a single or a list of prefixes (\"10.0.0.0/8\") or\n                          IPy.IP objects\n        used_prefixes: prefixes that are in use\n\n    Returns:\n           An iterable IPy.IPSet of available addresses within prefix_or_prefixes\n\n    \"\"\"\n    if not isinstance(prefix_or_prefixes, list):\n        prefix_or_prefixes = [prefix_or_prefixes]\n    base_prefixes = [str(prefix) for prefix in prefix_or_prefixes]\n    acc = IPSet([IP(prefix) for prefix in prefix_or_prefixes])\n    used_prefixes = IPSet([IP(used) for used in used_prefixes])\n    # remove used prefixes\n    acc.discard(used_prefixes)\n    # filter away original prefixes\n    return sorted([ip for ip in acc if str(ip) not in base_prefixes])\n\n\ndef partition_subnet(prefixlen, prefix):\n    \"Partition prefix into subnets with room for at at least n hosts\"\n    net = ipaddress.ip_network(prefix)\n    return (IP(subnet.with_prefixlen) for subnet in net.subnets(new_prefix=prefixlen))\n\n\ndef suggest_range(prefix, prefixlen=24, offset=0, n=10):\n    \"\"\"Partitions prefix into blocks of 'n' hosts. Returns a list of\n    [startAddr, endAddr, prefix]\n\n    Args:\n        prefix: a string (e.g. \"10.0.0.0/8\") or IPy.IP object\n        size: the minimum number of addresses in each subnet\n        offset: how many candidates to skip (from start)\n        n: number of results desired\n\n    Returns:\n        A dictionary with information about the original query, as well as a\n        list of candidates (subnets) of the requires size.\n\n        {\"prefix\": \"10.0.32.0/19\",\n         \"requested_size\": 257,\n         \"offset\": 0,\n         \"more\": true\n         \"candidates\": [\n             \"10.0.32.0/24\",\n             \"10.0.33.0/24\",\n             ...\n         ]}\n\n    \"\"\"\n    acc = {\n        \"prefix\": prefix,\n        \"prefixlen\": prefixlen,\n        \"candidates\": [],\n        \"offset\": offset,\n        \"more\": True,\n    }\n    # Fast path: size > size of network, so just return the original prefix\n    _prefix = IP(prefix)\n    if prefixlen < _prefix.prefixlen():\n        _blocks = iter([_prefix])\n    # Somewhat slow path\n    else:\n        _blocks = partition_subnet(prefixlen, prefix)\n    for block in islice(_blocks, offset, offset + n):\n        acc[\"candidates\"].append(\n            {\n                \"length\": block.len(),\n                \"prefix\": str(block),\n                \"start\": str(block[-0]),\n                \"end\": str(block[-1]),\n            }\n        )\n    if len(acc[\"candidates\"]) < n:\n        acc[\"more\"] = False\n    return acc\n"
  },
  {
    "path": "python/nav/web/ipam/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.shortcuts import render\nfrom nav.models.manage import NetType, Organization, Usage, Prefix\nfrom nav.web.modals import render_modal\n\nNAVBAR = [('Home', '/'), ('IPAM', None)]\nDEFAULT_VALUES = {'title': \"IPAM\", 'navpath': NAVBAR}\n\n\ndef index(request):\n    ctx = generate_context()\n    return render(request, \"ipam/index.html\", ctx)\n\n\ndef matrix(request):\n    ctx = {}\n    return render(request, \"ipam/matrix.html\", ctx)\n\n\ndef subnet_allocator_help_modal(request):\n    \"\"\"Render a modal with help information about the subnet allocator.\"\"\"\n    return render_modal(\n        request,\n        \"ipam/includes/_subnet_diagram_help_modal.html\",\n        modal_id=\"allocator-help-modal\",\n        size=\"large\",\n    )\n\n\ndef generate_context():\n    scopes = Prefix.objects.filter(vlan__net_type='scope')\n    ctx = {\n        \"net_types\": NetType.objects.exclude(vlans__net_type__in=[\"scope\", \"reserved\"]),\n        \"organizations\": Organization.objects.all,\n        \"usages\": Usage.objects.all,\n        \"has_registered_scopes\": scopes.count() > 0,\n    }\n    ctx.update(DEFAULT_VALUES)\n    return ctx\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/__init__.py",
    "content": "\"\"\"ipdevinfo\n\nThe IP Device Info web interface.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/forms.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django import forms\n\nfrom nav.models.manage import Sensor\nfrom nav.web.crispyforms import (\n    FormColumn,\n    FormRow,\n    SubmitField,\n    set_flat_form_attributes,\n)\nfrom ..utils import validate_timedelta_for_overflow\n\n\nclass SearchForm(forms.Form):\n    \"\"\"Form for searching for ip devices in info\"\"\"\n\n    query = forms.CharField(max_length=100, label='')\n\n    def __init__(self, *args, **kwargs):\n        super(SearchForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_action=\"ipdevinfo-search\",\n            form_method=\"get\",\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"query\"]], css_classes=\"medium-9\"),\n                        FormColumn(\n                            fields=[SubmitField(value=\"Search\", css_classes=\"postfix\")],\n                            css_classes=\"medium-3\",\n                        ),\n                    ],\n                    css_classes=\"collapse\",\n                )\n            ],\n        )\n        self.fields['query'].widget.attrs.update({\"placeholder\": \"IP or hostname\"})\n\n\nclass ActivityIntervalForm(forms.Form):\n    \"\"\"Form for setting an interval in switch port activity\"\"\"\n\n    interval = forms.IntegerField(label='Days', min_value=0)\n\n    def __init__(self, *args, **kwargs):\n        super(ActivityIntervalForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"interval\"]], css_classes=\"small-4\"),\n                        FormColumn(\n                            fields=[\n                                SubmitField(\n                                    value=\"Recheck activity\",\n                                    css_classes=\"postfix\",\n                                    has_empty_label=True,\n                                )\n                            ],\n                            css_classes=\"small-8\",\n                        ),\n                    ],\n                    css_classes=\"collapse\",\n                )\n            ]\n        )\n\n    def clean_interval(self):\n        interval = self.cleaned_data[\"interval\"]\n        validate_timedelta_for_overflow(days=interval)\n        return interval\n\n\nclass SensorRangesForm(forms.Form):\n    \"\"\"Form for setting display ranges for a sensor\"\"\"\n\n    minimum = forms.FloatField(label='Minimum', required=False)\n    maximum = forms.FloatField(label='Maximum', required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(SensorRangesForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_method=\"post\",\n            submit_field=SubmitField(value=\"Update range\", css_classes='small'),\n        )\n\n\nclass BooleanSensorForm(forms.Form):\n    \"\"\"Form for configuring boolean sensor display\"\"\"\n\n    on_message = forms.CharField(\n        label='Message when alert is active', initial='The alert is active'\n    )\n    off_message = forms.CharField(\n        label='Message when alert is inactive (ok)', initial='No alert'\n    )\n    on_state = forms.ChoiceField(\n        label='When is the alert considered \"on\"',\n        choices=(('1', 'When the value is 1'), ('0', 'When the value is 0 (zero)')),\n    )\n    alert_type = forms.ChoiceField(\n        label='What to display in \"on\" state', choices=Sensor.ALERT_TYPE_CHOICES\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(BooleanSensorForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_method=\"post\",\n            submit_field=SubmitField(value=\"Update settings\", css_classes='small'),\n        )\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/host_information.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Provides a function for getting host information\"\"\"\n\nfrom functools import lru_cache\n\nimport IPy\nfrom nav import asyncdns\n\nfrom nav.util import is_valid_ip\n\n\ndef address_sorter(addr_tuple):\n    \"\"\"Return ip object from tuple\"\"\"\n    return IPy.IP(addr_tuple[0])\n\n\ndef forward_lookup(host):\n    \"\"\"Do a forward lookup on host\"\"\"\n    addrinfo = asyncdns.forward_lookup([host])\n    if not isinstance(addrinfo[host], Exception):\n        return set(addr for addr in addrinfo[host])\n\n\ndef reverse_lookup(addresses):\n    \"\"\"Do a reverse lookup on addresses\"\"\"\n    reverses = asyncdns.reverse_lookup(addresses)\n    for addr, response in sorted(reverses.items(), key=address_sorter):\n        if isinstance(response, Exception):\n            yield {'addr': addr, 'error': response.__class__.__name__}\n        else:\n            for name in response:\n                yield {'addr': addr, 'name': name}\n\n\n@lru_cache\ndef get_host_info(host):\n    \"\"\"Returns a dictionary containing DNS information about the host\"\"\"\n    if is_valid_ip(host, strict=True):\n        addresses = list(reverse_lookup([host]))\n    else:\n        try:\n            addresses = forward_lookup(host) or []\n        except UnicodeError:\n            # Probably just some invalid string that cannot be represented using IDNA\n            # encoding. Let's just pretend it never happened (i.e. we can't look it up)\n            addresses = []\n        if addresses:\n            addresses = list(reverse_lookup(addresses))\n\n    return {'host': host, 'addresses': addresses}\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2007-2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL config for ipdevinfo\"\"\"\n\nfrom django.urls import path, re_path\nfrom nav.web.ipdevinfo import views\n\n\nurlpatterns = [\n    # Search\n    path('', views.search, name='ipdevinfo-search'),\n    # Service list\n    path('service/', views.service_list, name='ipdevinfo-service-list-all'),\n    path(\n        'service/handler=<str:handler>/',\n        views.service_list,\n        name='ipdevinfo-service-list-handler',\n    ),\n    # Service matrix\n    path('service/matrix/', views.service_matrix, name='ipdevinfo-service-matrix'),\n    # IP Device details\n    re_path(\n        r'^ip=(?P<addr>[a-f\\d\\.:]+)/$',\n        views.ipdev_details,\n        name='ipdevinfo-details-by-addr',\n    ),\n    path('id=<int:netbox_id>/', views.ipdev_details, name='ipdevinfo-details-by-id'),\n    path('<str:name>/', views.ipdev_details, name='ipdevinfo-details-by-name'),\n    re_path(\n        r'^save_port_layout_pref',\n        views.save_port_layout_pref,\n        name='ipdevinfo-save-port-layout',\n    ),\n    # Module details\n    path(\n        '<str:netbox_sysname>/module=<path:module_name>/',\n        views.module_details,\n        name='ipdevinfo-module-details',\n    ),\n    # PoE details\n    path(\n        '<str:netbox_sysname>/poegroup=<str:grpindex>/',\n        views.poegroup_details,\n        name='ipdevinfo-poegroup-details',\n    ),\n    re_path(\n        r'^poe-status-info-modal',\n        views.poe_status_hint_modal,\n        name='ipdevinfo-poe-status-hint-modal',\n    ),\n    re_path(\n        r'^poe-classification-info-modal',\n        views.poe_classification_hint_modal,\n        name='ipdevinfo-poe-classification-hint-modal',\n    ),\n    # Interface details\n    path(\n        '<str:netbox_sysname>/interface=<int:port_id>/',\n        views.port_details,\n        name='ipdevinfo-interface-details',\n    ),\n    re_path(\n        r'^(?P<netbox_sysname>[^/]+)/ifname=(?P<port_name>[^&]+)/$',\n        views.port_details,\n        name='ipdevinfo-interface-details-by-name',\n    ),\n    path(\n        'g/port/<int:interfaceid>/',\n        views.port_counter_graph,\n        name='interface-counter-graph',\n    ),\n    path(\n        'g/port/<int:interfaceid>/<kind>/',\n        views.port_counter_graph,\n        name='interface-counter-graph',\n    ),\n    # Modules\n    re_path(\n        r'^(?P<netbox_sysname>.+)/modules/(?P<perspective>\\w+)/$',\n        views.get_port_view,\n        name='ipdevinfo-get-port-view',\n    ),\n    # What happens if the device goes down\n    re_path(\n        r'(?P<netboxid>\\d+)/affected', views.render_affected, name=\"ipdevinfo-affected\"\n    ),\n    # DNS\n    re_path(\n        r'hostinfo/(?P<identifier>.+)',\n        views.render_host_info,\n        name=\"ipdevinfo-hostinfo\",\n    ),\n    # Sensors\n    re_path(r'sensor/(?P<identifier>.+)', views.sensor_details, name=\"sensor-details\"),\n    re_path(\n        r'^(?P<netboxid>\\d+)/unrecognized_neighbors',\n        views.unrecognized_neighbors,\n        name='ipdevinfo-unrecognized_neighbors',\n    ),\n    re_path(\n        r'^(?P<netbox_sysname>[^/]+)/(?P<job_name>[^/]+)/refresh_job',\n        views.refresh_ipdevinfo_job,\n        name='refresh-ipdevinfo-job',\n    ),\n    re_path(\n        r'^(?P<netbox_sysname>[^/]+)/(?P<job_name>[^/]+)/(?P<job_started_timestamp>[^/]+)/refresh_job_status',\n        views.refresh_ipdevinfo_job_status_query,\n        name='refresh-ipdevinfo-job-status-query',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/utils.py",
    "content": "#\n# Copyright (C) 2008, 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility methods to get extract extra characteristics from ports.\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom operator import attrgetter\n\nimport networkx as nx\n\nfrom django.core.validators import validate_email, ValidationError\n\nfrom nav.models.manage import SwPortVlan, SwPortBlocked, Cam\nfrom nav.models.manage import Netbox\nfrom nav.topology.vlan import build_layer2_graph\n\nfrom nav.metrics.graphs import get_metric_meta, get_simple_graph_url\nfrom nav.metrics.templates import metric_path_for_interface\nimport nav.util\n\n_logger = logging.getLogger('nav.web.ipdevinfo.utils')\n\n\ndef get_module_view(module_object, perspective, activity_interval=None, netbox=None):\n    \"\"\"\n    Returns a dict structure of ports on the module with additional meta\n    information.\n\n    Arguments:\n    perspective -- string that decides what kind of ports are included, can be\n        either ''swportstatus'', ''swportactive'', or ''gwportstatus''.\n\n    Keyword arguments:\n    activity_interval -- the number of days to check for port activity if\n        perspective is ''swportactive''.\n\n    \"\"\"\n\n    assert perspective in (\n        'swportstatus',\n        'swportactive',\n        'gwportstatus',\n        'physportstatus',\n    )\n\n    module = {\n        'object': module_object,\n        'ports': [],\n    }\n\n    ports = None\n    if perspective in ('swportstatus', 'swportactive'):\n        if not module_object and netbox:\n            ports = [p for p in netbox.get_swports_sorted() if not p.module]\n        else:\n            ports = module_object.get_swports_sorted()\n    elif perspective == 'gwportstatus':\n        if not module_object and netbox:\n            ports = [p for p in netbox.get_gwports_sorted() if not p.module]\n        else:\n            ports = module_object.get_gwports_sorted()\n    elif perspective == 'physportstatus':\n        if not module_object and netbox:\n            ports = [p for p in netbox.get_physical_ports_sorted() if not p.module]\n        else:\n            ports = module_object.get_physical_ports_sorted()\n\n    if ports:\n        _cache_vlan_data_in_ports(ports)\n        for port_object in ports:\n            port = {'object': port_object}\n\n            if perspective in ('swportstatus', 'physportstatus'):\n                port['class'] = _get_swportstatus_class(port_object)\n                port['style'] = ''\n                port['title'] = _get_swportstatus_title(port_object)\n            elif perspective == 'swportactive':\n                port['class'] = _get_swportactive_class(port_object, activity_interval)\n                port['style'] = _get_swportactive_style(port_object, activity_interval)\n                port['title'] = _get_swportactive_title(port_object, activity_interval)\n            elif perspective == 'gwportstatus':\n                port['class'] = _get_gwportstatus_class(port_object)\n                port['style'] = ''\n                port['title'] = _get_gwportstatus_title(port_object)\n\n            if perspective == 'physportstatus':\n                # Add extra class to differentiate between layers.\n                if port_object.is_gwport():\n                    port['oplayer'] = '3'\n                elif port_object.is_swport():\n                    port['oplayer'] = '2'\n\n            module['ports'].append(port)\n\n    return module\n\n\ndef _cache_vlan_data_in_ports(ports):\n    \"\"\"Loads and caches vlan data associated with an Interface queryset.\n\n    The caches are kept within each Interface object from the ports\n    queryset, and can be used to avoid multiple subqueries when\n    processing multiple Interfaces at once.\n\n    \"\"\"\n    swpvlans = SwPortVlan.objects.filter(interface__in=ports).select_related('vlan')\n    blocked_vlans = SwPortBlocked.objects.filter(interface__in=ports)\n\n    for port in ports:\n        port._vlan_cache = set(\n            swpvlan.vlan.vlan for swpvlan in swpvlans if swpvlan.interface == port\n        )\n        if port.vlan is not None:\n            port._vlan_cache.add(port.vlan)\n\n        port._blocked_vlans_cache = set(\n            blocked_vlan.vlan\n            for blocked_vlan in blocked_vlans\n            if blocked_vlan.interface == port\n        )\n\n\ndef _get_swportstatus_class(swport):\n    \"\"\"Classes for the swportstatus port view\"\"\"\n\n    classes = ['port']\n    if swport.ifoperstatus == swport.OPER_UP and swport.speed:\n        classes.append('Mb%d' % swport.speed)\n    if swport.ifadminstatus == swport.ADM_DOWN:\n        classes.append('disabled')\n    elif swport.ifoperstatus != swport.OPER_UP:\n        classes.append('passive')\n    if swport.trunk:\n        classes.append('trunk')\n    if swport.duplex:\n        classes.append('%sduplex' % swport.duplex)\n    if swport._blocked_vlans_cache:\n        classes.append('blocked')\n    return ' '.join(classes)\n\n\ndef _get_swportstatus_title(swport):\n    \"\"\"Title for the swportstatus port view\"\"\"\n\n    title = []\n\n    if swport.ifname:\n        title.append(swport.ifname)\n\n    if swport.ifoperstatus == swport.OPER_UP and swport.speed:\n        title.append('%d Mbit' % swport.speed)\n    elif swport.ifadminstatus == swport.ADM_DOWN:\n        title.append('disabled')\n    elif swport.ifoperstatus != swport.OPER_UP:\n        title.append('not active')\n\n    if swport.duplex:\n        title.append(swport.get_duplex_display())\n\n    vlan_numbers = _get_vlan_numbers(swport)\n    if vlan_numbers:\n        title.append('vlan ' + ','.join(map(str, vlan_numbers)))\n\n    if swport.trunk:\n        title.append('trunk')\n\n    if swport.ifalias:\n        title.append('\"%s\"' % swport.ifalias)\n\n    try:\n        if swport.to_netbox:\n            title.append('-> %s' % swport.to_netbox)\n    except Netbox.DoesNotExist:\n        pass\n\n    if swport._blocked_vlans_cache:\n        title.append('blocked ' + ','.join(str(b) for b in swport._blocked_vlans_cache))\n\n    return ', '.join(title)\n\n\ndef _get_vlan_numbers(swport):\n    \"\"\"Returns active vlans on an swport, using cached data, if available.\"\"\"\n    if hasattr(swport, '_vlan_cache'):\n        return swport._vlan_cache\n    else:\n        return swport.get_vlan_numbers()\n\n\ndef _get_swportactive_class(swport, interval=30):\n    \"\"\"Classes for the swportactive port view\"\"\"\n\n    classes = ['port']\n\n    if swport.ifoperstatus == swport.OPER_UP:\n        classes.append('active')\n        classes.append('link')\n    else:\n        active = swport.get_active_time(interval)\n        if active is not None:\n            classes.append('active')\n        else:\n            classes.append('inactive')\n\n    return ' '.join(classes)\n\n\ndef _get_swportactive_style(swport, interval=30):\n    \"\"\"Style for the swportactive port view\"\"\"\n\n    # Color range for port activity\n    color_recent = (116, 196, 118)\n    color_longago = (229, 245, 224)\n    # XXX: Is this CPU intensive? Cache result?\n    gradient = nav.util.color_gradient(color_recent, color_longago, interval)\n\n    style = ''\n\n    if swport.ifoperstatus == swport.OPER_UP:\n        style = 'background-color: #%s;' % nav.util.colortohex(gradient[0])\n    else:\n        active = swport.get_active_time(interval)\n        if active is not None:\n            style = 'background-color: #%s;' % nav.util.colortohex(\n                gradient[active.days]\n            )\n\n    return style\n\n\ndef _get_swportactive_title(swport, interval=30):\n    \"\"\"Title for the swportactive port view\"\"\"\n\n    title = []\n\n    if swport.ifname:\n        title.append(swport.ifname)\n\n    if swport.ifoperstatus == swport.OPER_UP:\n        title.append('link now')\n    else:\n        active = swport.get_active_time(interval)\n        if active is not None:\n            if active.days > 1:\n                title.append('MAC seen %d days ago' % active.days)\n            elif active.days == 1:\n                title.append('MAC seen 1 day ago')\n            else:\n                title.append('MAC seen today')\n        else:\n            title.append('free')\n\n    if swport.ifalias:\n        title.append('\"%s\"' % swport.ifalias)\n\n    return ', '.join(title)\n\n\ndef _get_gwportstatus_class(gwport):\n    \"\"\"Classes for the gwportstatus port view\"\"\"\n\n    classes = ['port']\n    if gwport.speed:\n        classes.append('Mb%d' % gwport.speed)\n    return ' '.join(classes)\n\n\ndef _get_gwportstatus_title(gwport):\n    \"\"\"Title for the gwportstatus port view\"\"\"\n\n    title = []\n\n    if gwport.ifname:\n        title.append(gwport.ifname)\n\n    if gwport.speed:\n        title.append('%d Mbit' % gwport.speed)\n\n    if gwport.ifalias:\n        title.append('\"%s\"' % gwport.ifalias)\n\n    try:\n        if gwport.to_netbox:\n            title.append('-> %s' % gwport.to_netbox)\n    except Netbox.DoesNotExist:\n        pass\n\n    return ', '.join(title)\n\n\ndef find_children(netbox, netboxes=None):\n    \"\"\"Recursively find all children from this netbox\"\"\"\n    if not netboxes:\n        netboxes = [netbox]\n\n    interfaces = netbox.interfaces.filter(\n        to_netbox__isnull=False, swport_vlans__direction=SwPortVlan.DIRECTION_DOWN\n    )\n    for interface in interfaces:\n        if interface.to_netbox not in netboxes:\n            netboxes.append(interface.to_netbox)\n            find_children(interface.to_netbox, netboxes)\n\n    return netboxes\n\n\ndef find_organizations(netboxes):\n    \"\"\"Find all contact addresses for the netboxes\"\"\"\n    return set(find_vlan_organizations(netboxes)) | set(\n        find_netbox_organizations(netboxes)\n    )\n\n\ndef find_netbox_organizations(netboxes):\n    \"\"\"Find direct contacts for the netboxes\"\"\"\n    return [n.organization for n in netboxes if n.organization]\n\n\ndef find_vlan_organizations(netboxes):\n    \"\"\"Find contacts for the vlans on the downlinks on the netboxes\"\"\"\n    vlans = []\n    for netbox in netboxes:\n        interfaces = netbox.interfaces.filter(\n            to_netbox__isnull=False,\n            swport_vlans__direction=SwPortVlan.DIRECTION_DOWN,\n            swport_vlans__vlan__organization__isnull=False,\n        )\n        for interface in interfaces:\n            vlans.extend(\n                [v.vlan for v in interface.swport_vlans.exclude(vlan__in=vlans)]\n            )\n\n    return [v.organization for v in set(vlans) if v.organization]\n\n\ndef filter_email(organizations):\n    \"\"\"Filter the list of addresses to make sure it's an email-address\"\"\"\n    valid_emails = []\n    for organization in organizations:\n        try:\n            validate_email(organization.contact)\n        except ValidationError:\n            for extracted_email in organization.extract_emails():\n                try:\n                    validate_email(extracted_email)\n                except ValidationError:\n                    continue\n                else:\n                    valid_emails.append(extracted_email)\n        else:\n            valid_emails.append(organization.contact)\n\n    return list(set(valid_emails))\n\n\ndef get_affected_host_count(netboxes):\n    \"\"\"Return the total number of active hosts on the netboxes\"\"\"\n    return Cam.objects.filter(netbox__in=netboxes, end_time__gte=datetime.max).count()\n\n\ndef find_affected_but_not_down(netbox_going_down, netboxes):\n    \"\"\"Mark affected but not down because of redundancy boxes\"\"\"\n    graph = build_layer2_graph()\n    if not graph.has_node(netbox_going_down):\n        return [netbox_going_down]\n    graph.remove_node(netbox_going_down)\n    masters = find_uplink_nodes(netbox_going_down)\n    redundant = []\n    for netbox in netboxes:\n        if netbox_going_down == netbox:\n            continue\n        if any(nx.has_path(graph, master, netbox) for master in masters):\n            redundant.append(netbox)\n\n    return redundant\n\n\ndef find_uplink_nodes(netbox):\n    \"\"\"Find the uplink nodes for this netbox\"\"\"\n    uplink_nodes = [x['other'].netbox for x in netbox.get_uplinks()]\n    return list(set(uplink_nodes))\n\n\ndef sort_by_netbox(netboxes):\n    \"\"\"Sort netboxes by category and sysname\"\"\"\n    return sorted(netboxes, key=attrgetter('category.id', 'sysname'))\n\n\ndef create_combined_urls(interface, counters):\n    \"\"\"Creates urls for displaying combined statistics for an interface\"\"\"\n    return [\n        get_interface_counter_graph_url(interface, kind=counter) for counter in counters\n    ]\n\n\ndef get_interface_counter_graph_url(\n    interface, timeframe='day', kind='Octets', expect='json'\n):\n    \"\"\"Returns a Graphite graph render URL for an interface traffic graph\"\"\"\n\n    def _get_target(direction):\n        assert direction.lower() in ('in', 'out')\n        path = metric_path_for_interface(\n            interface.netbox.sysname,\n            interface.ifname,\n            'if{0}{1}'.format(direction.capitalize(), kind),\n        )\n        meta = get_metric_meta(path)\n        return meta['target'], meta.get('unit', None)\n\n    (out_series, unit), (in_series, unit) = [_get_target(d) for d in ('out', 'in')]\n\n    in_series = 'alias({0},\"In\")'.format(in_series)\n    out_series = 'alias({0},\"Out\")'.format(out_series)\n\n    titlemap = dict(\n        octets='Traffic on {shortname}:{ifname} {ifalias}',\n        errors='Errors on {shortname}:{ifname} {ifalias}',\n        ucastpkts='Unicast packets on {shortname}:{ifname}',\n        multicastpkts='Multicast packets on {shortname}:{ifname}',\n        broadcastpkts='Broadcast packets on {shortname}:{ifname}',\n        discards='Discarded packets on {shortname}:{ifname}',\n    )\n    title = titlemap.get(kind.lower(), '{ifname}').format(\n        ifname=interface.ifname,\n        ifalias=(\"(%s)\" % interface.ifalias) if interface.ifalias else '',\n        sysname=interface.netbox.sysname,\n        shortname=interface.netbox.get_short_sysname(),\n    )\n\n    return get_simple_graph_url(\n        [in_series, out_series],\n        \"1\" + timeframe,\n        title=title,\n        format=expect,\n        vtitle=unit or '',\n    )\n"
  },
  {
    "path": "python/nav/web/ipdevinfo/views.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Views for ipdevinfo\"\"\"\n\nimport re\nimport logging\nimport datetime as dt\n\nfrom django.conf import settings\nfrom django.http import HttpResponseRedirect, Http404, HttpResponse\nfrom django.db.models import Q\nfrom django.shortcuts import get_object_or_404, redirect, render\nfrom django.urls import reverse\nfrom django_htmx.http import (\n    HttpResponseClientRedirect,\n    HttpResponseClientRefresh,\n)\n\nfrom nav.django.templatetags.thresholds import find_rules\nfrom nav.event2 import EventFactory\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.metrics.graphs import get_simple_graph_url\nfrom nav.web.auth.utils import get_account\nfrom nav.web.modals import render_modal\n\nfrom nav.models.manage import (\n    Netbox,\n    Module,\n    Interface,\n    Prefix,\n    Arp,\n    Cam,\n    Sensor,\n    POEGroup,\n    Category,\n)\nfrom nav.models.msgmaint import MaintenanceTask\nfrom nav.models.arnold import Identity\nfrom nav.models.service import Service\nfrom nav.models.profiles import Account\nfrom nav.models.event import AlertHistory, EventQueue\nfrom nav.ipdevpoll.config import get_job_descriptions\nfrom nav.util import is_valid_ip\nfrom nav.web.ipdevinfo.utils import create_combined_urls\nfrom nav.web.utils import create_title, SubListView\nfrom nav.metrics.graphs import Graph\n\nfrom nav.web.ipdevinfo.forms import (\n    SearchForm,\n    ActivityIntervalForm,\n    SensorRangesForm,\n    BooleanSensorForm,\n)\nfrom nav.web.ipdevinfo import utils\nfrom .host_information import get_host_info\n\nNAVPATH = [('Home', '/'), ('IP Device Info', '/ipdevinfo')]\nCOUNTER_TYPES = (\n    'Octets',\n    'UcastPkts',\n    'Errors',\n    'Discards',\n    'MulticastPkts',\n    'BroadcastPkts',\n)\n\nNUMBER_OF_JOBS_TO_AVERAGE = 30\nACCEPTABLE_RUNTIME_INCREASE_FACTOR = 0.1\n\n_logger = logging.getLogger('nav.web.ipdevinfo')\n\n\ndef find_netboxes(errors, query):\n    \"\"\"Find netboxes based on query parameter\n\n    :param errors: list of errors\n    :param query: form input\n    :return: querylist\n    \"\"\"\n    ip = is_valid_ip(query)\n    netboxes = None\n    if ip:\n        netboxes = Netbox.objects.filter(ip=ip)\n    elif is_valid_hostname(query):\n        # Check perfect match first\n        sysname_filter = Q(sysname=query)\n        if settings.DOMAIN_SUFFIX is not None:\n            sysname_filter |= Q(sysname='%s%s' % (query, settings.DOMAIN_SUFFIX))\n        netboxes = Netbox.objects.filter(sysname_filter)\n        if len(netboxes) != 1:\n            # No exact match, search for matches in substrings\n            netboxes = Netbox.objects.filter(sysname__icontains=query)\n    else:\n        errors.append(\n            'The query does not seem to be a valid IP address (v4 or v6) or a hostname.'\n        )\n\n    return netboxes\n\n\ndef search(request):\n    \"\"\"Search for an IP device\"\"\"\n\n    titles = NAVPATH\n    errors = []\n    netboxes = None\n    query = None\n\n    if 'query' in request.GET:\n        search_form = SearchForm(request.GET)\n        if search_form.is_valid():\n            # Preprocess query string\n            query = search_form.cleaned_data['query'].strip().lower()\n            titles = titles + [(\"Search for %s\" % query,)]\n            netboxes = find_netboxes(errors, query)\n\n            # If only one hit, redirect to details view\n            if netboxes and len(netboxes) == 1:\n                return ipdev_details(request, netbox_id=netboxes[0].id)\n    else:\n        search_form = SearchForm()\n\n    if request.htmx:\n        return render(\n            request,\n            'ipdevinfo/_search_results.html',\n            {\n                \"netboxes\": netboxes,\n                \"searchform\": search_form,\n                'query': query,\n            },\n        )\n\n    return render(\n        request,\n        'ipdevinfo/search.html',\n        {\n            'errors': errors,\n            'netboxes': netboxes,\n            'navpath': NAVPATH,\n            'query': query,\n            'title': create_title(titles),\n            'search_form': search_form,\n        },\n    )\n\n\ndef is_valid_hostname(hostname):\n    \"\"\"Check if hostname is valid\"\"\"\n    return re.match(r'^[a-z0-9-]+(\\.[a-z0-9-]+)*$', hostname) is not None\n\n\ndef ipdev_details(request, name=None, addr=None, netbox_id=None):\n    \"\"\"Show detailed view of one IP device\"\"\"\n\n    if netbox_id:\n        netbox = get_object_or_404(Netbox, id=netbox_id)\n        netbox_url = netbox.get_absolute_url()\n        if request.htmx:\n            return HttpResponseClientRedirect(netbox_url)\n        return HttpResponseRedirect(netbox_url)\n\n    def get_netbox(name=None, addr=None):\n        \"\"\"Lookup IP device in NAV by either hostname or IP address.\n\n        :rtype: nav.models.manage.Netbox\n\n        \"\"\"\n        # Prefetch related objects as to reduce number of database queries\n        netboxes = Netbox.objects.select_related()\n        netbox = None\n\n        if name:\n            try:\n                if is_valid_ip(name, strict=True):\n                    netbox = netboxes.get(Q(sysname__iexact=name) | Q(ip=name))\n                else:\n                    netbox = netboxes.get(sysname__iexact=name)\n            except Netbox.DoesNotExist:\n                pass\n        elif addr:\n            try:\n                netbox = netboxes.get(ip=addr)\n            except Netbox.DoesNotExist:\n                pass\n        if not netbox:\n            host_information = get_host_info(name or addr)\n            for address in host_information['addresses']:\n                if 'name' in address:\n                    try:\n                        netbox = netboxes.get(sysname__iexact=address['name'])\n                        break  # Exit loop at first match\n                    except Netbox.DoesNotExist:\n                        pass\n\n        return netbox\n\n    def get_recent_alerts(netbox, days_back=7, max_num_alerts=15):\n        \"\"\"Returns the most recents alerts related to a netbox\"\"\"\n\n        # Limit to alerts which where closed in the last days or which are\n        # still open\n        lowest_end_time = dt.datetime.now() - dt.timedelta(days=days_back)\n\n        filter_stateful = Q(end_time__gt=lowest_end_time)\n        filter_stateless = Q(end_time__isnull=True) & Q(start_time__gt=lowest_end_time)\n        queryset = netbox.alert_history_set.filter(\n            filter_stateful | filter_stateless\n        ).order_by('-start_time')\n        count = queryset.count()\n        raw_alerts = queryset[:max_num_alerts]\n\n        alerts = []\n        has_unresolved_alerts = False\n        for alert in raw_alerts:\n            if alert.source.name == 'serviceping':\n                try:\n                    alert_type = Service.objects.get(id=alert.subid).handler\n                except Service.DoesNotExist:\n                    alert_type = '%s (%s)' % (alert.event_type, alert.subid)\n            else:\n                alert_type = '%s' % alert.event_type\n\n            try:\n                message = alert.messages.filter(type='sms')[0].message\n            except IndexError:\n                message = None\n\n            if not has_unresolved_alerts and alert.is_open():\n                has_unresolved_alerts = True\n\n            alerts.append(\n                {\n                    'alert': alert,\n                    'type': alert_type,\n                    'message': message,\n                }\n            )\n\n        return {\n            'days_back': days_back,\n            'alerts': alerts,\n            'count': count,\n            'is_more_alerts': count > max_num_alerts,\n            'has_unresolved_alerts': has_unresolved_alerts,\n        }\n\n    def get_prefix_info(addr):\n        \"\"\"Return prefix based on address\"\"\"\n        ipaddr = is_valid_ip(addr)\n        if ipaddr:\n            prefixes = Prefix.objects.select_related().extra(\n                select={\"mask_size\": \"masklen(netaddr)\"},\n                where=[\"%s << netaddr AND nettype <> 'scope'\"],\n                order_by=[\"-mask_size\"],\n                params=[ipaddr],\n            )[0:1]\n            if prefixes:\n                return prefixes[0]\n        return None\n\n    def get_arp_info(addr):\n        \"\"\"Return arp based on address\"\"\"\n        ipaddr = is_valid_ip(addr)\n        if ipaddr:\n            arp_info = Arp.objects.extra(where=[\"ip = %s\"], params=[ipaddr]).order_by(\n                '-end_time', '-start_time'\n            )[0:1]\n            if arp_info:\n                return arp_info[0]\n        return None\n\n    def get_cam_info(mac):\n        \"\"\"Return cam objects based on mac address\"\"\"\n        cam_info = Cam.objects.filter(mac=mac).order_by('-end_time', '-start_time')[0:1]\n        return cam_info[0] if cam_info else None\n\n    # Get data needed by the template\n    addr_valid = is_valid_ip(addr)\n    host_info = None\n\n    # Assign default values to variables\n    no_netbox = {\n        'prefix': None,\n        'arp': None,\n        'cam': None,\n        'dt_max': dt.datetime.max,\n        'days_since_active': 7,\n    }\n    alert_info = None\n    job_descriptions = None\n    system_metrics = netbox_availability = []\n    sensor_metrics = []\n    graphite_error = False\n    mac = None\n\n    # Invalid IP address\n    if not name and not addr_valid:\n        navpath = NAVPATH + [(addr, '')]\n        return render(\n            request,\n            'ipdevinfo/ipdev-details.html',\n            {\n                'heading': navpath[-1][0],\n                'navpath': navpath,\n                'title': create_title(navpath),\n                'display_services_tab': False,\n                'invalid_ip': True,\n                'no_netbox': no_netbox,\n            },\n        )\n\n    netbox = get_netbox(name=name, addr=addr)\n\n    # If addr or host not a netbox it is not monitored by NAV\n    if netbox is None:\n        host_info = get_host_info(name or addr)\n        if not addr_valid and host_info['addresses']:\n            # Picks the first address in array if addr not specified\n            addr = host_info['addresses'][0]['addr']\n\n        no_netbox['prefix'] = get_prefix_info(addr)\n        netboxgroups = None\n        navpath = NAVPATH + [(host_info['host'], '')]\n\n        if no_netbox['prefix']:\n            no_netbox['arp'] = get_arp_info(addr)\n            if no_netbox['arp']:\n                no_netbox['cam'] = get_cam_info(no_netbox['arp'].mac)\n                if no_netbox['arp'].end_time < dt.datetime.max:\n                    no_netbox['days_since_active'] = (\n                        dt.datetime.now() - no_netbox['arp'].end_time\n                    ).days\n\n    else:\n        alert_info = get_recent_alerts(netbox)\n        netboxgroups = netbox.netboxcategory_set.all()\n        navpath = NAVPATH + [(netbox.sysname, '')]\n        job_descriptions = get_job_descriptions()\n        if arp := get_arp_info(netbox.ip):\n            mac = arp.mac\n\n        try:\n            system_metrics = netbox.get_system_metrics()\n            for metric in system_metrics:\n                metric['graphite_data_url'] = Graph(\n                    magic_targets=[metric['id']], format='json'\n                )\n        except GraphiteUnreachableError:\n            graphite_error = True\n\n        try:\n            netbox_availability = netbox.get_availability()\n        except GraphiteUnreachableError:\n            graphite_error = True\n\n        for sensor in netbox.sensors.all():\n            metric_id = sensor.get_metric_name()\n            metric = {\n                'id': metric_id,\n                'sensor': sensor,\n                'graphite_data_url': sensor.get_graph(format='json'),\n            }\n            sensor_metrics.append(metric)\n        find_rules(sensor_metrics)\n    # Display info about current and scheduled maintenance tasks\n    # related to this device\n    current_tasks = MaintenanceTask.objects.current()\n    future_tasks = MaintenanceTask.objects.future()\n    relevant_current_tasks = []\n    relevant_future_tasks = []\n    for task in current_tasks:\n        if netbox in task.get_event_subjects():\n            relevant_current_tasks.append(task)\n\n    for task in future_tasks:\n        if netbox in task.get_event_subjects():\n            relevant_future_tasks.append(task)\n\n    interfaces = netbox.interfaces.order_by('ifindex') if netbox else []\n    for interface in interfaces:\n        interface.combined_data_urls = create_combined_urls(interface, COUNTER_TYPES)\n\n    # Only display services tab for certain instances\n    display_services_tab = netbox and (\n        netbox.category.is_srv() or netbox.services.count()\n    )\n\n    return render(\n        request,\n        'ipdevinfo/ipdev-details.html',\n        {\n            'host_info': host_info,\n            'netbox': netbox,\n            'interfaces': interfaces,\n            'counter_types': COUNTER_TYPES,\n            'heading': navpath[-1][0],\n            'alert_info': alert_info,\n            'no_netbox': no_netbox,\n            'netboxgroups': netboxgroups,\n            'job_descriptions': job_descriptions,\n            'navpath': navpath,\n            'title': create_title(navpath),\n            'system_metrics': system_metrics,\n            'netbox_availability': netbox_availability,\n            'graphite_error': graphite_error,\n            'current_maintenance_tasks': relevant_current_tasks,\n            'future_maintenance_tasks': relevant_future_tasks,\n            'sensor_metrics': sensor_metrics,\n            'display_services_tab': display_services_tab,\n            'mac': mac,\n        },\n    )\n\n\ndef get_port_view(request, netbox_sysname, perspective):\n    \"\"\"Returns a html fragment with all modules and ports on the netbox.\n\n    Arguments:\n    netbox_sysname -- ...\n    perspective -- decides what kind of ports are included.\n    \"\"\"\n\n    netbox = get_object_or_404(Netbox, sysname=netbox_sysname)\n\n    # Get port activity search interval from form\n    activity_interval = 30\n    activity_interval_form = None\n    if perspective == 'swportactive':\n        if 'interval' in request.GET:\n            activity_interval_form = ActivityIntervalForm(request.GET)\n            if activity_interval_form.is_valid():\n                activity_interval = activity_interval_form.cleaned_data['interval']\n        else:\n            activity_interval_form = ActivityIntervalForm(\n                initial={'interval': activity_interval}\n            )\n\n    port_view = {\n        'perspective': perspective,\n        'modules': [],\n        'activity_interval': activity_interval,\n        'activity_interval_start': dt.datetime.now()\n        - dt.timedelta(days=activity_interval),\n    }\n\n    # Check if we got data for the entire search interval\n    try:\n        port_view['activity_data_start'] = netbox.cam_set.order_by('start_time')[\n            0\n        ].start_time\n        port_view['activity_data_interval'] = (\n            dt.datetime.now() - port_view['activity_data_start']\n        ).days\n        port_view['activity_complete_data'] = (\n            port_view['activity_data_start'] < port_view['activity_interval_start']\n        )\n    except IndexError:\n        port_view['activity_data_start'] = None\n        port_view['activity_data_interval'] = 0\n        port_view['activity_complete_data'] = False\n\n    # Add the modules\n    for module in netbox.modules.select_related():\n        port_view['modules'].append(\n            utils.get_module_view(module, perspective, activity_interval)\n        )\n\n    # Add interfaces with no module\n    port_view['modules'].append(\n        utils.get_module_view(None, perspective, activity_interval, netbox)\n    )\n\n    # Min length of ifname for it to be shortened\n    ifname_too_long = 12\n\n    return render(\n        request,\n        'ipdevinfo/modules.html',\n        {\n            'netbox': netbox,\n            'port_view': port_view,\n            'ifname_too_long': ifname_too_long,\n            'activity_interval_form': activity_interval_form,\n        },\n    )\n\n\ndef module_details(request, netbox_sysname, module_name):\n    \"\"\"Show detailed view of one IP device module\"\"\"\n\n    def get_module_view(module_object, perspective, activity_interval=None):\n        \"\"\"\n        Returns a dict structure with all ports on the module.\n\n        Arguments:\n        perspective -- decides what kind of ports are included.\n        activity_interval -- number of days to check for port activity.\n\n        \"\"\"\n\n        module = utils.get_module_view(module_object, perspective, activity_interval)\n\n        if activity_interval is not None:\n            module['activity_interval'] = activity_interval\n            module['activity_interval_start'] = dt.datetime.now() - dt.timedelta(\n                days=activity_interval\n            )\n\n            # Check if we got data for the entire search interval\n            try:\n                module['activity_data_start'] = module_object.netbox.cam_set.order_by(\n                    'start_time'\n                )[0].start_time\n                module['activity_data_interval'] = (\n                    dt.datetime.now() - module['activity_data_start']\n                ).days\n                module['activity_complete_data'] = (\n                    module['activity_data_start'] < module['activity_interval_start']\n                )\n            except IndexError:\n                module['activity_data_start'] = None\n                module['activity_data_interval'] = 0\n                module['activity_complete_data'] = False\n\n        return module\n\n    # Get port activity search interval from form\n    activity_interval = 30\n    if 'interval' in request.GET:\n        activity_interval_form = ActivityIntervalForm(request.GET)\n        if activity_interval_form.is_valid():\n            activity_interval = activity_interval_form.cleaned_data['interval']\n    else:\n        activity_interval_form = ActivityIntervalForm(\n            initial={'interval': activity_interval}\n        )\n\n    module = get_object_or_404(\n        Module.objects.select_related(),\n        netbox__sysname=netbox_sysname,\n        name=module_name,\n    )\n\n    swportstatus_view = get_module_view(module, 'swportstatus')\n    swportactive_view = get_module_view(module, 'swportactive', activity_interval)\n    gwportstatus_view = get_module_view(module, 'gwportstatus')\n\n    navpath = NAVPATH + [\n        (\n            netbox_sysname,\n            reverse('ipdevinfo-details-by-name', kwargs={'name': netbox_sysname}),\n        ),\n        ('Module Details',),\n    ]\n\n    return render(\n        request,\n        'ipdevinfo/module-details.html',\n        {\n            'module': module,\n            'swportstatus_view': swportstatus_view,\n            'swportactive_view': swportactive_view,\n            'gwportstatus_view': gwportstatus_view,\n            'activity_interval_form': activity_interval_form,\n            'activity_interval': activity_interval,\n            'navpath': navpath,\n            'heading': navpath[-1][0],\n            'title': create_title(navpath),\n        },\n    )\n\n\ndef poegroup_details(request, netbox_sysname, grpindex):\n    \"\"\"Show detailed view of one IP device power over ethernet group\"\"\"\n\n    poegroup = get_object_or_404(\n        POEGroup.objects.select_related(),\n        netbox__sysname=netbox_sysname,\n        index=grpindex,\n    )\n\n    navpath = NAVPATH + [\n        (\n            netbox_sysname,\n            reverse('ipdevinfo-details-by-name', kwargs={'name': netbox_sysname}),\n        ),\n        ('PoE Details for ' + poegroup.name,),\n    ]\n\n    return render(\n        request,\n        'ipdevinfo/poegroup-details.html',\n        {\n            'poegroup': poegroup,\n            'navpath': navpath,\n            'heading': navpath[-1][0],\n            'title': create_title(navpath),\n        },\n    )\n\n\ndef port_details(request, netbox_sysname, port_type=None, port_id=None, port_name=None):\n    \"\"\"Show detailed view of one IP device port\"\"\"\n\n    if not (port_id or port_name):\n        return Http404\n\n    ports = Interface.objects.select_related()\n\n    if port_id is not None:\n        port = get_object_or_404(ports, id=port_id)\n    elif port_name is not None:\n        try:\n            port = ports.get(netbox__sysname=netbox_sysname, ifname__iexact=port_name)\n        except Interface.DoesNotExist:\n            port = get_object_or_404(\n                ports, netbox__sysname=netbox_sysname, ifdescr__iexact=port_name\n            )\n\n    navpath = NAVPATH + [\n        (\n            netbox_sysname,\n            reverse('ipdevinfo-details-by-name', kwargs={'name': netbox_sysname}),\n        ),\n        ('Port Details',),\n    ]\n    heading = title = 'Port details: ' + str(port)\n\n    try:\n        port_metrics = port.get_port_metrics()\n        graphite_error = False\n    except GraphiteUnreachableError:\n        port_metrics = []\n        graphite_error = True\n\n    sensor_metrics = []\n    for sensor in port.sensors.all():\n        metric_id = sensor.get_metric_name()\n        metric = {\n            'id': metric_id,\n            'sensor': sensor,\n            'graphite_data_url': Graph(magic_targets=[metric_id], format='json'),\n        }\n        sensor_metrics.append(metric)\n    find_rules(sensor_metrics)\n    # If interface is detained in Arnold, this should be visible on the\n    # port details view\n    try:\n        detention = port.arnold_identities.get(status__in=['quarantined', 'disabled'])\n    except Identity.DoesNotExist:\n        detention = None\n\n    # Add urls to Graphite to the relevant objects\n    port.combined_data_urls = create_combined_urls(port, COUNTER_TYPES)\n    for metric in port_metrics:\n        metric['graphite_data_url'] = Graph(magic_targets=[metric['id']], format='json')\n\n    return render(\n        request,\n        'ipdevinfo/port-details.html',\n        {\n            'port_type': port_type,\n            'port': port,\n            'navpath': navpath,\n            'heading': heading,\n            'title': title,\n            'port_metrics': port_metrics,\n            'graphite_error': graphite_error,\n            'detention': detention,\n            'sensor_metrics': sensor_metrics,\n            'alert_info': get_recent_alerts_interface(port),\n        },\n    )\n\n\ndef poe_status_hint_modal(request):\n    \"\"\"Render PoE status info hint modal\"\"\"\n    return render_modal(\n        request,\n        'ipdevinfo/_poe_status_hint_modal.html',\n        modal_id='poe-status-hint',\n        size=\"small\",\n    )\n\n\ndef poe_classification_hint_modal(request):\n    \"\"\"Render PoE classification info hint modal\"\"\"\n    return render_modal(\n        request,\n        'ipdevinfo/_poe_classification_hint_modal.html',\n        modal_id='poe-classification-hint',\n        size=\"small\",\n    )\n\n\ndef get_recent_alerts_interface(interface, days_back=7):\n    \"\"\"Returns the most recent linkState events for this interface\"\"\"\n    lowest_end_time = dt.datetime.now() - dt.timedelta(days=days_back)\n    alerts = AlertHistory.objects.filter(\n        event_type='linkState', subid=interface.pk, end_time__gt=lowest_end_time\n    )\n    for alert in alerts:\n        try:\n            message = alert.messages.filter(type='sms')[0].message\n        except IndexError:\n            message = None\n        alert.message = message\n\n    return {\n        'alerts': alerts,\n        'count': alerts.count(),\n        'days_back': days_back,\n        'has_unresolved_alerts': any(a.is_open() for a in alerts),\n    }\n\n\ndef port_counter_graph(request, interfaceid, kind='Octets'):\n    \"\"\"Creates an url to Graphite for rendering a graph as an image\n\n    Redirects to the created url if successful\n    \"\"\"\n    if kind not in (\n        'Octets',\n        'Errors',\n        'UcastPkts',\n        'Discards',\n        'MulticastPkts',\n        'BroadcastPkts',\n    ):\n        raise Http404\n\n    timeframe = request.GET.get('timeframe', 'day')\n    port = get_object_or_404(Interface, id=interfaceid)\n    url = utils.get_interface_counter_graph_url(port, timeframe, kind, expect='png')\n\n    if url:\n        return redirect(url)\n    else:\n        return HttpResponse(status=500)\n\n\ndef service_list(request, handler=None):\n    \"\"\"List services with given handler or any handler\"\"\"\n\n    page = request.GET.get('page', '1')\n\n    services = Service.objects.select_related('netbox').order_by(\n        'netbox__sysname', 'handler'\n    )\n    if handler:\n        services = services.filter(handler=handler)\n\n    handler_list = Service.objects.values('handler').distinct()\n    navpath = NAVPATH + [('Service List',)]\n\n    # Pass on to generic view\n    return SubListView.as_view(\n        queryset=services,\n        paginate_by=100,\n        template_name='ipdevinfo/service-list.html',\n        allow_empty=True,\n        extra_context={\n            'show_ipdev_info': True,\n            'handler_list': handler_list,\n            'handler': handler,\n            'title': create_title(navpath),\n            'navpath': navpath,\n            'heading': navpath[-1][0],\n            'services': services,\n            'page': page,\n            'template_object_name': 'service',\n        },\n    )(request)\n\n\ndef service_matrix(request):\n    \"\"\"Show service status in a matrix with one IP Device per row and one\n    service handler per column\"\"\"\n\n    handler_list = [h['handler'] for h in Service.objects.values('handler').distinct()]\n\n    matrix_dict = {}\n    for service in Service.objects.select_related('netbox'):\n        if service.netbox.id not in matrix_dict:\n            matrix_dict[service.netbox.id] = {\n                'sysname': service.netbox.sysname,\n                'netbox': service.netbox,\n                'services': [None for _ in handler_list],\n            }\n        index = handler_list.index(service.handler)\n        matrix_dict[service.netbox.id]['services'][index] = service\n\n    matrix = matrix_dict.values()\n    navpath = NAVPATH + [('Service Matrix',)]\n\n    return render(\n        request,\n        'ipdevinfo/service-matrix.html',\n        {\n            'handler_list': handler_list,\n            'matrix': matrix,\n            'title': create_title(navpath),\n            'navpath': navpath,\n            'heading': navpath[-1][0],\n        },\n    )\n\n\ndef render_affected(request, netboxid):\n    \"\"\"Controller for the affected tab in ipdevinfo\"\"\"\n    netbox = get_object_or_404(Netbox, pk=netboxid)\n    netboxes = utils.find_children(netbox)\n\n    affected = utils.sort_by_netbox(utils.find_affected_but_not_down(netbox, netboxes))\n    unreachable = utils.sort_by_netbox(list(set(netboxes) - set(affected)))\n\n    organizations = utils.find_organizations(unreachable)\n    contacts = utils.filter_email(organizations)\n    services = Service.objects.filter(netbox__in=unreachable).order_by('netbox')\n    affected_hosts = utils.get_affected_host_count(unreachable)\n\n    return render(\n        request,\n        'ipdevinfo/frag-affected.html',\n        {\n            'netbox': netbox,\n            'unreachable': unreachable,\n            'affected': affected,\n            'services': services,\n            'organizations': organizations,\n            'contacts': contacts,\n            'affected_hosts': affected_hosts,\n        },\n    )\n\n\ndef render_host_info(request, identifier):\n    \"\"\"Controller for getting host info\"\"\"\n    return render_modal(\n        request,\n        'ipdevinfo/frag-hostinfo.html',\n        {'host_info': get_host_info(identifier)},\n        modal_id='hostinfo',\n    )\n\n\ndef unrecognized_neighbors(request, netboxid):\n    \"\"\"Render unrecognized neighbors tab\"\"\"\n    netbox = get_object_or_404(Netbox, pk=netboxid)\n    return render(\n        request,\n        'ipdevinfo/frag-neighbors.html',\n        {'netbox': netbox, 'categories': Category.objects.all()},\n    )\n\n\ndef sensor_details(request, identifier):\n    \"\"\"Controller for getting sensor info\"\"\"\n    sensor = get_object_or_404(Sensor, pk=identifier)\n\n    if request.method == 'POST':\n        if sensor.unit_of_measurement == sensor.UNIT_TRUTHVALUE:\n            form = BooleanSensorForm(request.POST)\n            if form.is_valid():\n                data = form.cleaned_data\n                sensor.on_message_user = data['on_message']\n                sensor.off_message_user = data['off_message']\n                sensor.on_state_user = data['on_state']\n                sensor.alert_type = data['alert_type']\n                sensor.save()\n                return redirect(request.path)\n        else:\n            form = SensorRangesForm(request.POST)\n            if form.is_valid():\n                sensor.display_minimum_user = form.cleaned_data['minimum']\n                sensor.display_maximum_user = form.cleaned_data['maximum']\n                sensor.save()\n                return redirect(request.path)\n\n    netbox_sysname = sensor.netbox.sysname\n\n    navpath = NAVPATH + [\n        (\n            netbox_sysname,\n            reverse('ipdevinfo-details-by-name', kwargs={'name': netbox_sysname}),\n        ),\n        ('Sensor Details',),\n    ]\n    heading = title = 'Sensor details: ' + str(sensor)\n\n    metric = dict(id=sensor.get_metric_name())\n    find_rules([metric])\n\n    if sensor.unit_of_measurement == sensor.UNIT_TRUTHVALUE:\n        form = BooleanSensorForm(\n            initial={\n                'on_message': sensor.on_message,\n                'off_message': sensor.off_message,\n                'on_state': sensor.on_state,\n                'alert_type': sensor.alert_type,\n            }\n        )\n    else:\n        form = SensorRangesForm(\n            initial={\n                'minimum': sensor.get_display_range()[0],\n                'maximum': sensor.get_display_range()[1],\n            }\n        )\n    return render(\n        request,\n        'ipdevinfo/sensor-details.html',\n        {\n            'data_url': get_simple_graph_url(\n                sensor.get_metric_name(), time_frame='10minutes', format='json'\n            ),\n            'sensor': sensor,\n            'navpath': navpath,\n            'heading': heading,\n            'title': title,\n            'metric': metric,\n            'form': form,\n            'graphite_data_url': Graph(\n                magic_targets=[sensor.get_metric_name()], format='json'\n            ),\n        },\n    )\n\n\ndef save_port_layout_pref(request):\n    \"\"\"Save the ipdevinfo port layout preference\"\"\"\n    account = get_account(request)\n    key = Account.PREFERENCE_KEY_IPDEVINFO_PORT_LAYOUT\n    account.preferences[key] = request.GET.get('layout')\n    account.save()\n\n    # To use hashes we need to do append it after finding the url\n    url = reverse(\n        'ipdevinfo-details-by-id', kwargs={'netbox_id': request.GET.get('netboxid')}\n    )\n    return redirect(\"{}#!ports\".format(url))\n\n\ndef _show_loading_indicator_on_refresh_ongoing(\n    request, netbox_sysname: str, job_name: str, job_started_timestamp: str\n) -> HttpResponse:\n    \"\"\"\n    Returns the template with a spinner to show that the triggered job is ongoing\n    \"\"\"\n    button_template = \"ipdevinfo/frag-ipdevinfo-refresh-ongoing-button.html\"\n\n    return render(\n        request,\n        button_template,\n        {\n            'netbox_sysname': netbox_sysname,\n            'job_name': job_name,\n            'job_started_timestamp': job_started_timestamp,\n        },\n    )\n\n\ndef refresh_ipdevinfo_job(request, netbox_sysname: str, job_name: str):\n    \"\"\"\n    Posts a refresh event to the event queue triggering ipdevpoll to start the job and\n    returns template with spinner\n    \"\"\"\n    netbox = get_object_or_404(Netbox, sysname=netbox_sysname)\n\n    _logger.debug(f\"Sending refresh event for {netbox.sysname} job {job_name}\")\n\n    refresh_event = EventFactory(\"devBrowse\", \"ipdevpoll\", event_type=\"notification\")\n    event = refresh_event.notify(netbox=netbox, subid=job_name)\n    event.save()\n\n    return _show_loading_indicator_on_refresh_ongoing(\n        request, netbox_sysname, job_name, str(event.time)\n    )\n\n\ndef refresh_ipdevinfo_job_status_query(\n    request, netbox_sysname: str, job_name: str, job_started_timestamp: str\n):\n    \"\"\"\n    Checks the status of the ongoing job\n\n    Reloads the page on job finished,\n    shows error messages on job running for too long or idpdevpoll not running\n    or shows the loading spinner to wait and check again soon\n    \"\"\"\n\n    def show_error_message(\n        request,\n        alert_level: str,\n        alert_message: str,\n    ) -> HttpResponse:\n        \"\"\"\n        Returns a HTTPResponse showing an alert box indicating a problem with running\n        a job again\n        \"\"\"\n        response = render(\n            request,\n            \"ipdevinfo/frag-ipdevinfo-refresh-error.html\",\n            context={\n                \"netbox_sysname\": netbox_sysname,\n                \"job_name\": job_name,\n                \"alert_level\": alert_level,\n                \"alert_message\": alert_message,\n            },\n        )\n        return response\n\n    def check_if_job_is_running_longer_than_expected(\n        job, job_started_timestamp: dt.datetime\n    ) -> bool:\n        \"\"\"\n        Check if the given job has been running for much longer than expected\n\n        This is calculated by comparing the current runtime with the last runtimes of\n        that job plus some margin\n\n        \"\"\"\n\n        avg_jobtime = (\n            sum(\n                duration\n                for _, duration in job.get_last_runtimes(NUMBER_OF_JOBS_TO_AVERAGE)\n            )\n            / NUMBER_OF_JOBS_TO_AVERAGE\n        )\n        current_runtime = (dt.datetime.now() - job_started_timestamp).total_seconds()\n        return current_runtime > (\n            avg_jobtime * (1 + ACCEPTABLE_RUNTIME_INCREASE_FACTOR)\n        )\n\n    netbox = get_object_or_404(Netbox, sysname=netbox_sysname)\n    last_job = [job for job in netbox.get_last_jobs() if job.job_name == job_name].pop()\n    job_started_timestamp = dt.datetime.fromisoformat(job_started_timestamp)\n\n    if last_job.end_time > job_started_timestamp:\n        return HttpResponseClientRefresh()\n\n    refresh_event_exists = EventQueue.objects.filter(\n        source_id=\"devBrowse\",\n        target_id=\"ipdevpoll\",\n        event_type_id=\"notification\",\n        netbox=netbox,\n        subid=job_name,\n        state=EventQueue.STATE_STATELESS,\n        time__gte=job_started_timestamp,\n    ).exists()\n\n    if refresh_event_exists:\n        # Ipdevpoll picks up events from the event queue basically instantaneously, so\n        # if next time the endpoint is called after having posted the event it means\n        # ipdevpoll might not be running or there is another problem with it\n        return show_error_message(\n            request,\n            alert_level=\"warning\",\n            alert_message=f\"Job '{job_name}' was not started. Make sure that \"\n            \"ipdevpoll is running.\",\n        )\n\n    job_running_longer_than_expected = check_if_job_is_running_longer_than_expected(\n        last_job, job_started_timestamp\n    )\n\n    if job_running_longer_than_expected:\n        return show_error_message(\n            request,\n            alert_level=\"alert\",\n            alert_message=f\"Job '{job_name}' has been running for an unusually long \"\n            \"time. Check the log messages for eventual errors.\",\n        )\n\n    return _show_loading_indicator_on_refresh_ongoing(\n        request, netbox_sysname, job_name, job_started_timestamp\n    )\n"
  },
  {
    "path": "python/nav/web/jwtgen.py",
    "content": "from datetime import datetime, timedelta, timezone\nfrom typing import Any, Optional\nimport hashlib\n\nimport jwt\n\nfrom nav.django.settings import (\n    JWT_PRIVATE_KEY,\n    JWT_NAME,\n    JWT_ACCESS_TOKEN_LIFETIME,\n    JWT_REFRESH_TOKEN_LIFETIME,\n)\n\n# Alias for datetime.now for mocking purposes\nget_now = datetime.now\n\n\ndef generate_access_token(token_data: Optional[dict[str, Any]] = None) -> str:\n    \"\"\"Generates and returns an access token in JWT format.\n    Will use `token_data` as a basis for claims in the the new token,\n    but the following claims will be overridden: `exp`, `nbf`, `iat`, `aud`, `iss`,\n    `token_type`\n    \"\"\"\n    return _generate_token(token_data, JWT_ACCESS_TOKEN_LIFETIME, \"access_token\")\n\n\ndef generate_refresh_token(token_data: Optional[dict[str, Any]] = None) -> str:\n    \"\"\"Generates and returns a refresh token in JWT format.\n    Will use `token_data` as a basis for claims in the the new token,\n    but the following claims will be overridden: `exp`, `nbf`, `iat`, `aud`, `iss`,\n    `token_type`\n    \"\"\"\n    return _generate_token(token_data, JWT_REFRESH_TOKEN_LIFETIME, \"refresh_token\")\n\n\ndef _generate_token(\n    token_data: Optional[dict[str, Any]], expiry_delta: timedelta, token_type: str\n) -> str:\n    \"\"\"Generates and returns a token in JWT format.\n    Will use `token_data` as a basis for claims in the the new token,\n    but the following claims will be overridden: `exp`, `nbf`, `iat`, `aud`, `iss`,\n    `token_type`\n    \"\"\"\n    if token_data is None:\n        new_token = dict()\n    else:\n        new_token = dict(token_data)\n\n    now = get_now(timezone.utc)\n    updated_claims = {\n        'exp': (now + expiry_delta).timestamp(),\n        'nbf': now.timestamp(),\n        'iat': now.timestamp(),\n        'aud': JWT_NAME,\n        'iss': JWT_NAME,\n        'token_type': token_type,\n    }\n    new_token.update(updated_claims)\n    encoded_token = jwt.encode(new_token, JWT_PRIVATE_KEY, algorithm=\"RS256\")\n    return encoded_token\n\n\ndef is_active(exp: float, nbf: float) -> bool:\n    \"\"\"\n    Takes `exp` (expiration time) and `nbf` (not before time) as POSIX timestamps.\n    These represent the claims of a JWT token. `exp` should be the expiration\n    time of the token and `nbf` should be the time when the token becomes active.\n\n    Returns True if `exp` is in the future and `nbf` is in the past or matches\n    the current time.\n    \"\"\"\n    now = get_now()\n    expires = datetime.fromtimestamp(exp)\n    activates = datetime.fromtimestamp(nbf)\n    return now >= activates and now < expires\n\n\ndef hash_token(token: str) -> str:\n    \"\"\"Hashes a token with SHA256\"\"\"\n    hash_object = hashlib.sha256(token.encode('utf-8'))\n    hex_dig = hash_object.hexdigest()\n    return hex_dig\n\n\ndef decode_token(token: str) -> dict[str, Any]:\n    \"\"\"Decodes a token in JWT format and returns the data of the decoded token\"\"\"\n    return jwt.decode(token, options={'verify_signature': False})\n"
  },
  {
    "path": "python/nav/web/l2trace/__init__.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Layer 2 traceroute web tool for NAV.\"\"\"\n\nimport datetime\nimport socket\nfrom socket import gethostbyaddr, gethostbyname\n\nfrom django.db.models import Q\nfrom nav.models.manage import Netbox, SwPortVlan, GwPortPrefix, Prefix, Arp, Cam\n\nfrom nav.util import is_valid_ip\n\nINFINITY = datetime.datetime.max\nPATH_NOT_FOUND = None\nLAYER_3_PATH = -1\n\n\nclass L2TraceQuery(object):\n    def __init__(self, host_from, host_to):\n        self.host_from = Host(host_from)\n        self.host_to = host_to and Host(host_to)\n        self.path = []\n\n    def trace(self):\n        if self.host_from:\n            self.path = get_path(self.host_from)\n\n        to_path = []\n        if self.host_to:\n            to_path = get_path(self.host_to)\n            reverse_path(to_path)\n\n            if are_hosts_on_same_vlan(\n                self.host_from, self.host_to\n            ) and PATH_NOT_FOUND not in (self.path + to_path):\n                self.path = join_at_junction(self.path, to_path)\n            else:\n                self.path.append(LAYER_3_PATH)\n                self.path.extend(to_path)\n\n    def make_rows(self):\n        for index, node in enumerate(self.path):\n            if node is PATH_NOT_FOUND:\n                yield ResultRow(index, ipaddr='Path not found', vlan='error')\n            elif node is LAYER_3_PATH:\n                yield ResultRow(index, level=3)\n            else:\n                yield self.make_row_from_node(index, node)\n\n    @staticmethod\n    def make_row_from_node(index, node):\n        netboxid = getattr(node.host, 'id', None)\n        sysname = (\n            node.host.sysname if hasattr(node.host, 'sysname') else node.host.hostname\n        )\n        return ResultRow(\n            index,\n            netboxid=netboxid,\n            ipaddr=node.host.ip,\n            sysname=sysname,\n            if_in=node.if_in,\n            if_out=node.if_out,\n            vlan=node.vlan,\n        )\n\n\ndef join_at_junction(from_path, to_path):\n    from_node, to_node = find_junction(from_path, to_path)\n    from_index = from_path.index(from_node)\n    to_index = to_path.index(to_node)\n\n    junction_node = PathNode(\n        from_node.vlan, from_node.if_in, from_node.host, to_node.if_out\n    )\n    path = from_path[:from_index] + [junction_node] + to_path[to_index + 1 :]\n    return path\n\n\ndef find_junction(from_path, to_path):\n    for from_node in from_path:\n        for to_node in to_path:\n            if from_node and to_node and from_node.host == to_node.host:\n                return (from_node, to_node)\n    return (None, None)\n\n\ndef reverse_path(path):\n    path.reverse()\n    for node in path:\n        if node:\n            node.swap_in_out_interfaces()\n\n\ndef get_path(addr):\n    start_node = get_start_path(addr)\n    path = [start_node]\n    gateway = get_vlan_gateway(start_node.vlan)\n\n    while path[-1].host != gateway:\n        if isinstance(path[-1].host, Netbox):\n            uplink = get_vlan_uplink_from_netbox(path[-1].host, path[-1].vlan)\n            if uplink:\n                path[-1].if_out = uplink.interface\n            swpvlan = get_vlan_downlink_to_netbox(path[-1].host, path[-1].vlan)\n        else:\n            swpvlan = get_vlan_downlink_to_host(path[-1].host)\n\n        if swpvlan:\n            path.append(\n                PathNode(\n                    swpvlan.vlan, swpvlan.interface, swpvlan.interface.netbox, None\n                )\n            )\n        else:\n            path.append(PATH_NOT_FOUND)\n            break\n    return path\n\n\ndef get_start_path(addr):\n    source = get_host_or_netbox_from_addr(addr)\n    target_vlan = get_vlan_from_ip(source.ip)\n    node = PathNode(target_vlan, None, source, None)\n    return node\n\n\ndef get_host_or_netbox_from_addr(addr):\n    host = Host(addr)\n    netbox = get_netbox_from_host(host)\n    if netbox:\n        return netbox\n    else:\n        return host\n\n\ndef is_netbox_gateway(netbox):\n    return netbox.category_id in ('GW', 'GSW')\n\n\ndef are_hosts_on_same_vlan(host1, host2):\n    vlan1 = get_vlan_from_host(Host(host1))\n    vlan2 = get_vlan_from_host(Host(host2))\n    return vlan1 == vlan2\n\n\ndef get_netbox_from_host(host):\n    if host.is_ip():\n        query = Q(sysname=host.ip) | Q(ip=host.ip)\n    else:\n        query = Q(sysname__startswith=host.hostname) | Q(ip=host.ip)\n\n    try:\n        return Netbox.objects.get(query)\n    except Netbox.DoesNotExist:\n        pass\n\n\ndef get_vlan_from_host(host):\n    return get_vlan_from_ip(host.ip)\n\n\ndef get_vlan_from_ip(ip):\n    if not ip:\n        return\n    matching_prefixes = Prefix.objects.extra(\n        select={'mlen': 'masklen(netaddr)'},\n        where=[\"%s << netaddr\"],\n        params=[ip],\n        order_by=[\"-mlen\"],\n    ).select_related('vlan')\n    if matching_prefixes:\n        return matching_prefixes[0].vlan\n\n\ndef get_netbox_vlan(netbox):\n    prefix = netbox.get_prefix()\n    if prefix:\n        return prefix.vlan\n\n\ndef get_vlan_uplink_from_netbox(netbox, vlan=None):\n    if not vlan:\n        vlan = get_netbox_vlan(netbox)\n    swpvlans = SwPortVlan.objects.filter(\n        direction=SwPortVlan.DIRECTION_UP,\n        interface__netbox=netbox,\n        vlan=vlan,\n    ).select_related('interface')\n    if swpvlans:\n        return swpvlans[0]\n\n\ndef get_vlan_downlink_to_netbox(netbox, vlan=None):\n    if not vlan:\n        vlan = get_netbox_vlan(netbox)\n    swpvlans = SwPortVlan.objects.filter(\n        interface__to_netbox=netbox,\n        direction=SwPortVlan.DIRECTION_DOWN,\n        vlan=vlan,\n    ).select_related('interface', 'interface__netbox')\n    if swpvlans:\n        return swpvlans[0]\n\n\ndef get_vlan_downlink_to_host(host):\n    if not host.ip:\n        return\n    arps = (\n        Arp.objects.filter(end_time=INFINITY)\n        .extra(where=[\"%s = ip\"], params=[host.ip])\n        .values('mac')\n    )\n    macs = [arp['mac'] for arp in arps]\n    cams = Cam.objects.filter(end_time=INFINITY, mac__in=macs)\n    if cams:\n        cam = cams[0]\n        swpvlans = SwPortVlan.objects.filter(\n            interface__netbox=cam.netbox, interface__ifindex=cam.ifindex\n        ).select_related('interface', 'interface__netbox')\n        if swpvlans:\n            return swpvlans[0]\n\n\ndef get_vlan_gateway(vlan):\n    gwport_prefixes = GwPortPrefix.objects.filter(prefix__vlan=vlan).order_by(\n        'prefix__net_address'\n    )\n    gateways = Netbox.objects.filter(\n        category__in=('GW', 'GSW'), interfaces__gwport_prefixes__in=gwport_prefixes\n    ).distinct()\n    if gateways:\n        return gateways[0]\n\n\nclass Host(object):\n    def __init__(self, host):\n        if isinstance(host, Host):\n            self.host = host.host\n            self.ip = host.ip\n            self.hostname = host.hostname\n            return\n        elif not host:\n            raise ValueError(\"Host argument must be hostname or IP address\")\n\n        self.host = host\n        if self.is_ip():\n            self.ip = host\n            self.hostname = self.get_host_by_addr() or host\n        else:\n            self.hostname = host\n            self.ip = self.get_host_by_name() or None\n\n    def is_ip(self):\n        return is_valid_ip(self.host, strict=True)\n\n    def get_host_by_name(self):\n        if self.host is not None:\n            try:\n                return gethostbyname(self.host)\n            except socket.error:\n                pass\n\n    def get_host_by_addr(self):\n        if self.host is not None:\n            try:\n                return gethostbyaddr(self.host)[0]\n            except socket.error:\n                pass\n\n    def __repr__(self):\n        return \"<%s(%s) = %s>\" % (\n            self.__class__.__name__,\n            repr(self.host),\n            repr((self.ip, self.hostname)),\n        )\n\n    def __eq__(self, other):\n        return hasattr(other, 'ip') and self.ip == other.ip\n\n\nclass PathNode(object):\n    def __init__(self, vlan, if_in, host, if_out):\n        self.vlan = vlan\n        self.if_in = if_in\n        self.host = host\n        self.if_out = if_out\n\n    def __repr__(self):\n        return \"%s(%r, %r, %r, %r)\" % (\n            self.__class__.__name__,\n            self.vlan,\n            self.if_in,\n            self.host,\n            self.if_out,\n        )\n\n    def swap_in_out_interfaces(self):\n        (self.if_out, self.if_in) = (self.if_in, self.if_out)\n\n\nclass ResultRow(object):\n    def __init__(\n        self,\n        idx,\n        level=2,\n        netboxid=None,\n        ipaddr='',\n        sysname='',\n        if_in=None,\n        if_out=None,\n        vlan='',\n    ):\n        self.netboxid = netboxid\n        self.ipaddr = ipaddr\n        self.sysname = sysname\n        self.if_in = if_in\n        self.if_out = if_out\n        self.vlan = vlan\n        if level == 2:\n            self.level = 'L2'\n        else:\n            self.level = 'L3'\n        self.idx = idx\n\n        self.hostOk = True\n        if self.vlan == 'error':\n            self.level = ''\n            self.vlan = ''\n            self.hostOk = False\n"
  },
  {
    "path": "python/nav/web/l2trace/forms.py",
    "content": "#\n# Copyright (C) 2013, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FormRow,\n    FormColumn,\n    SubmitField,\n)\nfrom django.core.exceptions import MultipleObjectsReturned\nfrom django import forms\n\nfrom . import L2TraceQuery\n\n\nclass L2TraceForm(forms.Form):\n    \"\"\"Form for l2traceroute search\"\"\"\n\n    host_from = forms.CharField(label='From')\n    host_to = forms.CharField(label='To', required=False)\n    l2tracer = None\n\n    def __init__(self, *args, **kwargs):\n        super(L2TraceForm, self).__init__(*args, **kwargs)\n\n        placeholder_text = \"Hostname or IP-address\"\n        self.fields['host_from'].widget.attrs.update({\"placeholder\": placeholder_text})\n        self.fields['host_to'].widget.attrs.update({\"placeholder\": placeholder_text})\n\n        self.attrs = set_flat_form_attributes(\n            form_method='get',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['host_from']], css_classes='medium-6'),\n                        FormColumn(fields=[self['host_to']], css_classes='medium-6'),\n                    ]\n                ),\n                SubmitField(value='Trace'),\n            ],\n        )\n\n    def clean(self):\n        cleaned_data = super(L2TraceForm, self).clean()\n\n        host_from = cleaned_data.get('host_from')\n        host_to = cleaned_data.get('host_to')\n        self.l2tracer = L2TraceQuery(host_from, host_to)\n        try:\n            self.l2tracer.trace()\n        except MultipleObjectsReturned:\n            msg = \"Input was ambiguous, matching multiple hosts\"\n            raise forms.ValidationError(msg)\n\n        return cleaned_data\n\n    def clean_host_from(self):\n        return self.cleaned_data['host_from'].strip()\n\n    def clean_host_to(self):\n        return self.cleaned_data['host_to'].strip()\n"
  },
  {
    "path": "python/nav/web/l2trace/urls.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL configuration for l2trace\"\"\"\n\nfrom django.urls import path\nfrom nav.web.l2trace.views import index\n\n\nurlpatterns = [\n    path('', index, name='l2trace'),\n]\n"
  },
  {
    "path": "python/nav/web/l2trace/views.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2013, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Layer 2 trace views\"\"\"\n\nfrom django.shortcuts import render\n\nfrom .forms import L2TraceForm\n\n\ndef index(request):\n    \"\"\"Single view function of l2trace.\"\"\"\n\n    if 'host_from' in request.GET:\n        form = L2TraceForm(request.GET)\n    else:\n        form = L2TraceForm()\n\n    context = {\n        'title': 'Layer 2 Traceroute',\n        'navpath': [('Home', '/'), ('Layer 2 Traceroute', '/l2trace')],\n        'form': form,\n    }\n\n    if form.is_valid():\n        context.update({'l2tracer': form.l2tracer})\n\n    return render(request, 'l2trace/l2trace.html', context)\n"
  },
  {
    "path": "python/nav/web/machinetracker/__init__.py",
    "content": "\"\"\"machinetracker\n\nWeb interface for searching logs client computers' network access.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/machinetracker/forms.py",
    "content": "#\n# Copyright (C) 2009-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Machine tracker forms\"\"\"\n\nfrom django import forms\n\nfrom nav.macaddress import MacPrefix\nfrom nav.web.machinetracker import iprange\n\nfrom ..utils import validate_timedelta_for_overflow\n\n\nclass MachineTrackerForm(forms.Form):\n    \"\"\"General fields for forms in machinetracker\"\"\"\n\n    dns = forms.BooleanField(\n        required=False, initial=False, help_text=\"Show dns (if any)\"\n    )\n    days = forms.IntegerField(\n        initial=7,\n        widget=forms.TextInput(attrs={'size': 3}),\n        help_text=\"Days back in time to search\",\n    )\n    vendor = forms.BooleanField(\n        required=False, initial=False, help_text=\"Show vendor name (if any)\"\n    )\n\n    def clean_days(self):\n        \"\"\"Clean the days fields\"\"\"\n        data = int(self.cleaned_data['days'])\n        if data < -1:\n            # -1 has a specific meaning of \"only active\", for backwards\n            # compatibility. Anything else is an error.\n            raise forms.ValidationError(\n                \"I can't see into the future. Please enter a positive number.\"\n            )\n\n        validate_timedelta_for_overflow(days=data)\n\n        return data\n\n\nclass IpTrackerForm(MachineTrackerForm):\n    \"\"\"Form for searching by IP-address\"\"\"\n\n    choices = [('active', 'Active'), ('inactive', 'Inactive'), ('both', 'Both')]\n\n    ip_range = forms.CharField(\n        widget=forms.TextInput(attrs={'placeholder': 'IP-address or range'})\n    )\n    period_filter = forms.ChoiceField(\n        widget=forms.RadioSelect(), choices=choices, initial='active'\n    )\n    netbios = forms.BooleanField(\n        required=False, initial=False, help_text=\"Show netbios name (if any)\"\n    )\n\n    source = forms.BooleanField(\n        required=False,\n        initial=False,\n        help_text=\"Show which router the data is retrieved from\",\n    )\n\n    def clean_ip_range(self):\n        \"\"\"Clean the ip_range field\"\"\"\n        data = self.cleaned_data['ip_range']\n        try:\n            data = iprange.MachinetrackerIPRange.from_string(data)\n        except ValueError as error:\n            raise forms.ValidationError(\"Invalid syntax: %s\" % error)\n        return data\n\n\nclass MacTrackerForm(MachineTrackerForm):\n    \"\"\"Form for searching by MAC-address\"\"\"\n\n    mac = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Mac-address'}))\n    netbios = forms.BooleanField(\n        required=False, initial=False, help_text=\"Netbios name (if any)\"\n    )\n\n    def clean_mac(self):\n        \"\"\"Clean the mac field\"\"\"\n        try:\n            mac = MacPrefix(self.cleaned_data['mac'])\n        except ValueError as error:\n            raise forms.ValidationError(error)\n        return mac\n\n\nclass SwitchTrackerForm(forms.Form):\n    \"\"\"Form for searching by switch fields\"\"\"\n\n    switch = forms.CharField()\n    module = forms.CharField(required=False, widget=forms.TextInput(attrs={'size': 3}))\n    port = forms.CharField(required=False, widget=forms.TextInput(attrs={'size': 16}))\n    days = forms.IntegerField(initial=7, widget=forms.TextInput(attrs={'size': 3}))\n    vendor = forms.BooleanField(\n        required=False, initial=False, help_text=\"Show vendor name (if any)\"\n    )\n\n\nclass NetbiosTrackerForm(MachineTrackerForm):\n    \"\"\"Form for searching by netbios name\"\"\"\n\n    search = forms.CharField(\n        widget=forms.TextInput(attrs={'placeholder': 'Netbios name'})\n    )\n\n    def clean_search(self):\n        \"\"\"Make sure blank spaces and such is removed from search\"\"\"\n        return self.cleaned_data['search'].strip()\n"
  },
  {
    "path": "python/nav/web/machinetracker/iprange.py",
    "content": "from IPy import IP\nfrom nav import util\nfrom nav.web.machinetracker.utils import get_prefix_info\n\n\nclass MachinetrackerIPRange(util.IPRange):\n    @classmethod\n    def get_mask_for_network(cls, network):\n        \"\"\"Lookup prefix from NAV database\"\"\"\n        prefix = get_prefix_info(str(IP(network)))\n        if prefix:\n            prefix_address = prefix.net_address\n            prefix_cidr = prefix_address.split(\"/\")\n            return prefix_cidr[1]\n        return '24'\n"
  },
  {
    "path": "python/nav/web/machinetracker/urls.py",
    "content": "#\n# Copyright (C) 2009-2011, 2019 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL configuration for Machinetracker tool\"\"\"\n\nfrom django.urls import path\nfrom nav.web.machinetracker import views\n\n\nurlpatterns = [\n    path('', views.ip_search, name='machinetracker'),\n    path('ip/', views.ip_search, name='machinetracker-ip'),\n    path(\n        'ip/prefix/<int:prefix_id>/',\n        views.ip_prefix_search,\n        name='machinetracker-prefixid_search',\n    ),\n    path(\n        'ip/prefix/<int:prefix_id>/active/',\n        views.ip_prefix_search,\n        {'active': True},\n        name='machinetracker-prefixid_search_active',\n    ),\n    path('mac/', views.mac_search, name='machinetracker-mac'),\n    path('swp/', views.switch_search, name='machinetracker-swp'),\n    # NetBIOS\n    path('netbios/', views.netbios_search, name='machinetracker-netbios'),\n    path(\n        'helpmodal/<slug:tab_name>/',\n        views.render_search_help_modal,\n        name='machinetracker-search-help-modal',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/machinetracker/utils.py",
    "content": "#\n# Copyright (C) 2009-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Common utility functions for Machine Tracker\"\"\"\n\nfrom datetime import datetime\nfrom socket import gethostbyaddr, herror\nfrom collections import namedtuple, OrderedDict\nimport logging\n\nfrom IPy import IP\n\nfrom django.db import DatabaseError, transaction\n\nfrom nav import asyncdns\nfrom nav.models.manage import Prefix, Netbox, Interface\n\n_cached_hostname = {}\n_logger = logging.getLogger(__name__)\n\n\ndef hostname(ip):\n    \"\"\"\n    Performs a DNS reverse lookup for an IP address and caches the result in\n    a global variable, which is really, really stupid.\n\n    :param ip: And IP address string.\n    :returns: A hostname string or a False value if the lookup failed.\n\n    \"\"\"\n    addr = str(ip)\n    if addr in _cached_hostname:\n        return _cached_hostname[addr]\n\n    try:\n        dns = gethostbyaddr(addr)\n    except herror:\n        return False\n\n    _cached_hostname[addr] = dns[0]\n    return dns[0]\n\n\n@transaction.atomic()\ndef get_prefix_info(addr):\n    \"\"\"Returns the smallest prefix from the NAVdb that an IP address fits into.\n\n    :param addr: An IP address string.\n    :returns: A Prefix object or None if no prefixes matched.\n\n    \"\"\"\n    try:\n        return Prefix.objects.select_related().extra(\n            select={\"mask_size\": \"masklen(netaddr)\"},\n            where=[\"%s << netaddr AND nettype <> 'scope'\"],\n            order_by=[\"-mask_size\"],\n            params=[addr],\n        )[0]\n    except (IndexError, DatabaseError):\n        return None\n\n\ndef get_last_job_log_from_netboxes(rows, job_type):\n    \"\"\"Returns a dict with netbox object as key and job_log object as value.\n\n    Takes rows and a job type as parameters.\n    The rows should needs a .netbox object on them from eg. CAM or ARP.\n    The job_type is a string with job type such as 'ip2mac' or 'topo'\n\n    \"\"\"\n    netboxes_job = dict((row.netbox, None) for row in rows if row.netbox)\n    for netbox in netboxes_job:\n        try:\n            netboxes_job[netbox] = netbox.job_log.filter(job_name=job_type).order_by(\n                '-end_time'\n            )[0]\n        except IndexError:\n            pass\n    return netboxes_job\n\n\ndef normalize_ip_to_string(ipaddr):\n    \"\"\"Normalizes an IP address to a a sortable string.\n\n    When sending IP addresses to a browser and asking JavaScript to sort them\n    as strings, this function will help.\n\n    An IPv4 address will be normalized to '4' + <15-character dotted quad>.\n    An IPv6 address will be normalized to '6' + <39 character IPv6 address>\n\n    \"\"\"\n    try:\n        ipaddr = IP(ipaddr)\n    except ValueError:\n        return ipaddr\n\n    if ipaddr.version() == 4:\n        quad = str(ipaddr).split('.')\n        return '4%s' % '.'.join([i.zfill(3) for i in quad])\n    else:\n        return '6%s' % ipaddr.strFullsize()\n\n\ndef ip_dict(rows):\n    \"\"\"Converts IP search result rows to a dict keyed by IP addresses.\n\n    :param rows: IP search result rows.\n    :return: A dict mapping IP addresses to matching result rows.\n    \"\"\"\n    result = OrderedDict()\n    for row in rows:\n        ip = IP(row.ip)\n        if ip not in result:\n            result[ip] = []\n        result[ip].append(row)\n    return result\n\n\ndef process_ip_row(row, dns):\n    \"\"\"Processes an IP search result row\"\"\"\n    if row.end_time > datetime.now():\n        row.still_active = \"Still active\"\n    if dns:\n        row.dns_lookup = hostname(row.ip) or \"\"\n    return row\n\n\ndef min_max_mac(prefix):\n    \"\"\"Finds the minimum and maximum MAC addresses of a given prefix.\n\n    :returns: A tuple of (min_mac_string, max_mac_string)\n\n    \"\"\"\n    return str(prefix[0]), str(prefix[-1])\n\n\ndef track_mac(keys, resultset, dns):\n    \"\"\"Groups results from Query for the mac_search page.\n\n    keys        - a tuple/list with strings that identifies the fields the\n                  result should be grouped by\n    resultset   - a QuerySet\n    dns         - should we lookup the hostname?\n    \"\"\"\n    if dns:\n        ips_to_lookup = {row.ip for row in resultset}\n        _logger.debug(\n            \"track_mac: looking up PTR records for %d addresses)\", len(ips_to_lookup)\n        )\n        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)\n        _logger.debug(\"track_mac: PTR lookup done\")\n\n    tracker = OrderedDict()\n    for row in resultset:\n        if row.end_time > datetime.now():\n            row.still_active = \"Still active\"\n        if dns:\n            ip = row.ip\n            if dns_lookups[ip] and not isinstance(dns_lookups[ip], Exception):\n                row.dns_lookup = dns_lookups[ip].pop()\n            else:\n                row.dns_lookup = \"\"\n        if not hasattr(row, 'module'):\n            row.module = ''\n        if not hasattr(row, 'port'):\n            row.port = ''\n        key = []\n        for k in keys:\n            key.append(getattr(row, k))\n        key = tuple(key)\n        if key not in tracker:\n            tracker[key] = []\n        tracker[key].append(row)\n    return tracker\n\n\ndef get_vendor_query(mac_field='mac'):\n    \"\"\"Return a query that populates vendor names on a query.\n\n    This needs a field with a MAC address to match against the oui table.\n    The field containing the mac address can be specified with the `mac_field`\n    parameter.\n\n    Ex:\n    Arp.objects.filter(..).extra(select={'vendor': get_vendor_query()})\"\"\"\n    return f\"SELECT vendor from oui where oui=trunc({mac_field})\"\n\n\nclass ProcessInput:\n    \"\"\"Some sort of search form input processing class. Who the hell knows.\"\"\"\n\n    def __init__(self, forminput):\n        \"\"\"\n        :type forminput:  django.http.QueryDict\n        \"\"\"\n        self.input = forminput.copy()\n\n    def __common(self):\n        if not self.input.get('days', False):\n            self.input['days'] = 7\n\n    def ip(self):\n        \"\"\"Populates the GET dict with formatted values for an ip search\"\"\"\n        self.__common()\n        if not self.input.get('period_filter'):\n            self.input['period_filter'] = 'active'\n\n        return self.input\n\n    def mac(self):\n        \"\"\"Populates the GET dict with formatted values for a mac search\"\"\"\n        self.__common()\n        return self.input\n\n    def swp(self):\n        \"\"\"Populates the GET dict with formatted values for a switch search\"\"\"\n        self.__common()\n        return self.input\n\n    def netbios(self):\n        \"\"\"Populates the GET dict with formatted values for a netbios search\"\"\"\n        self.__common()\n        return self.input\n\n\nUplinkTuple = namedtuple('UplinkTuple', 'mac sysname uplink vendor')\n\n\nclass UplinkTracker(list):\n    def __init__(self, mac_min, mac_max, vendor=False):\n        boxes = Netbox.objects.extra(\n            select={'mac': 'netboxmac.mac'},\n            tables=['netboxmac'],\n            where=[\n                'netboxmac.netboxid=netbox.netboxid',\n                'netboxmac.mac BETWEEN %s AND %s',\n            ],\n            params=[mac_min, mac_max],\n        ).order_by('mac', 'sysname')\n\n        if vendor:\n            boxes = boxes.extra(select={'vendor': get_vendor_query()})\n\n        for box in boxes:\n            uplinks = box.get_uplinks()\n            box_vendor = box.vendor if vendor else None\n            if uplinks:\n                for link in uplinks:\n                    self.append(UplinkTuple(box.mac, box.sysname, link, box_vendor))\n            else:\n                self.append(UplinkTuple(box.mac, box.sysname, None, box_vendor))\n\n\nclass InterfaceTracker(list):\n    def __init__(self, mac_min, mac_max, vendor=False):\n        ifcs = (\n            Interface.objects.select_related('netbox')\n            .extra(where=['ifphysaddress BETWEEN %s AND %s'], params=[mac_min, mac_max])\n            .order_by('ifphysaddress', 'netbox__sysname')\n        )\n        if vendor:\n            ifcs = ifcs.extra(select={'vendor': get_vendor_query('ifphysaddress')})\n        self.extend(ifcs)\n"
  },
  {
    "path": "python/nav/web/machinetracker/views.py",
    "content": "#\n# Copyright (C) 2009, 2011-2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Machine Tracker view functions\"\"\"\n\nfrom datetime import date, timedelta\nfrom collections import OrderedDict\nimport logging\n\nfrom IPy import IP\n\nfrom django.db.models import Q\nfrom django.shortcuts import render, get_object_or_404\nfrom django.http import HttpResponse, HttpResponseRedirect\n\nfrom nav.django.utils import reverse_with_query\nfrom nav.models.manage import Arp, Cam, Netbios, Prefix\n\nfrom nav import asyncdns\n\nfrom nav.web.machinetracker import forms\nfrom nav.web.machinetracker.utils import ip_dict, UplinkTracker, InterfaceTracker\nfrom nav.web.machinetracker.utils import process_ip_row, track_mac\nfrom nav.web.machinetracker.utils import (\n    min_max_mac,\n    ProcessInput,\n    normalize_ip_to_string,\n    get_last_job_log_from_netboxes,\n    get_vendor_query,\n)\nfrom nav.web.modals import render_modal\n\nNAVBAR = [('Home', '/'), ('Machinetracker', None)]\nIP_TITLE = 'NAV - Machinetracker - IP Search'\nMAC_TITLE = 'NAV - Machinetracker - MAC Search'\nSWP_TITLE = 'NAV - Machinetracker - Switch Search'\nNBT_TITLE = 'NAV - Machinetracker - NetBIOS Search'\nIP_DEFAULTS = {'title': IP_TITLE, 'navpath': NAVBAR, 'active': {'ip': True}}\nMAC_DEFAULTS = {'title': MAC_TITLE, 'navpath': NAVBAR, 'active': {'mac': True}}\nSWP_DEFAULTS = {'title': SWP_TITLE, 'navpath': NAVBAR, 'active': {'swp': True}}\nNBT_DEFAULTS = {'title': NBT_TITLE, 'navpath': NAVBAR, 'active': {'netbios': True}}\nVALID_HELP_TAB_NAMES = ['ip', 'mac', 'switch', 'netbios']\n\nADDRESS_LIMIT = 4096  # Value for when inactive gets disabled\n\n_logger = logging.getLogger(__name__)\n\n\ndef ip_prefix_search(request, prefix_id, active=False):\n    \"\"\"View to redirect to a proper machine tracker IP range search based on a\n    NAV-internal prefix ID.\n\n    \"\"\"\n    prefix = get_object_or_404(Prefix, id=prefix_id)\n\n    kwargs = {\"ip_range\": prefix.net_address}\n    if active:\n        kwargs[\"days\"] = -1\n    return HttpResponseRedirect(reverse_with_query(\"machinetracker-ip\", **kwargs))\n\n\ndef ip_search(request):\n    \"\"\"Controller for ip search\"\"\"\n    if 'ip_range' in request.GET:\n        return ip_do_search(request)\n\n    info_dict = {'form': forms.IpTrackerForm()}\n    info_dict.update(IP_DEFAULTS)\n    return render(request, 'machinetracker/ip_search.html', info_dict)\n\n\ndef ip_do_search(request):\n    \"\"\"Search CAM and ARP based on IP range\"\"\"\n    querydict = ProcessInput(request.GET).ip()\n    form = forms.IpTrackerForm(querydict)\n    tracker = None\n    form_data = {}\n    row_count = 0\n    from_ip = None\n    to_ip = None\n\n    if form.is_valid():\n        form_data = form.cleaned_data\n        ip_range = form.cleaned_data['ip_range']\n        from_ip, to_ip = (ip_range[0], ip_range[-1])\n        period_filter = form.cleaned_data['period_filter']\n        active = inactive = False\n\n        if period_filter in ['active', 'both']:\n            active = True\n        if period_filter in ['inactive', 'both']:\n            inactive = True\n\n        if (to_ip.int() - from_ip.int()) > ADDRESS_LIMIT:\n            inactive = False\n\n        ip_result = get_result(\n            form.cleaned_data['days'],\n            from_ip,\n            to_ip,\n            form.cleaned_data['netbios'],\n            form.cleaned_data['vendor'],\n        )\n        ip_range = create_ip_range(inactive, from_ip, to_ip, ip_result)\n        tracker = create_tracker(\n            active, form.cleaned_data['dns'], inactive, ip_range, ip_result\n        )\n        row_count = sum(len(mac_ip_pair) for mac_ip_pair in tracker.values())\n\n    info_dict = {\n        'form': form,\n        'form_data': form_data,\n        'ip_tracker': tracker,\n        'ip_tracker_count': row_count,\n        'subnet_start': str(from_ip),\n        'subnet_end': str(to_ip),\n        'colspan': find_colspan('ip', form),\n    }\n    info_dict.update(IP_DEFAULTS)\n\n    return render(request, 'machinetracker/ip_search.html', info_dict)\n\n\ndef get_result(days, from_ip, to_ip, get_netbios=False, get_vendor=False):\n    \"\"\"Gets and formats search result\"\"\"\n    records = get_arp_records(days, from_ip, to_ip, get_netbios, get_vendor)\n    flag_as_fishy(records)\n    ip_result = ip_dict(records)\n    return ip_result\n\n\ndef get_arp_records(days, from_ip, to_ip, get_netbios=False, get_vendor=False):\n    \"\"\"Gets the result from ARP based on input parameters\"\"\"\n    from_time = date.today() - timedelta(days=days)\n    extra_args = {\n        'where': ['ip BETWEEN %s and %s'],\n        'params': [str(from_ip), str(to_ip)],\n    }\n    if get_netbios:\n        extra_args['select'] = {'netbiosname': get_netbios_query()}\n\n    result = (\n        Arp.objects.filter(end_time__gt=from_time)\n        .extra(**extra_args)\n        .order_by('ip', 'mac', '-start_time')\n    )\n\n    if get_vendor:\n        result = result.extra(select={'vendor': get_vendor_query()})\n\n    return result\n\n\ndef flag_as_fishy(records):\n    \"\"\"Flag rows overdue as fishy\"\"\"\n    netboxes = get_last_job_log_from_netboxes(records, 'ip2mac')\n    for row in records:\n        if row.netbox in netboxes:\n            job_log = netboxes[row.netbox]\n            row.fishy = job_log if job_log and job_log.is_overdue() else None\n\n\ndef create_ip_range(inactive, from_ip, to_ip, ip_result):\n    \"\"\"Creates the range of ip objects to use when creating tracker\"\"\"\n    if inactive:\n        ip_range = [IP(ip) for ip in range(from_ip.int(), to_ip.int() + 1)]\n    else:\n        ip_range = [key for key in ip_result]\n    return ip_range\n\n\ndef create_tracker(active, dns, inactive, ip_range, ip_result):\n    \"\"\"Creates a result tracker based on form data\"\"\"\n    dns_lookups = None\n    if dns:\n        ips_to_lookup = {str(ip) for ip in ip_range}\n        _logger.debug(\n            \"create_tracker: looking up PTR records for %d addresses)\",\n            len(ips_to_lookup),\n        )\n        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)\n        _logger.debug(\"create_tracker: PTR lookup done\")\n\n    tracker = OrderedDict()\n    for ip_key in ip_range:\n        if active and ip_key in ip_result:\n            create_active_row(tracker, dns, dns_lookups, ip_key, ip_result)\n        elif inactive and ip_key not in ip_result:\n            create_inactive_row(tracker, dns, dns_lookups, ip_key)\n    return tracker\n\n\ndef create_active_row(tracker, dns, dns_lookups, ip_key, ip_result):\n    \"\"\"Creates a tracker tuple where the result is active\"\"\"\n    ip = str(ip_key)\n    rows = ip_result[ip_key]\n    for row in rows:\n        row = process_ip_row(row, dns=False)\n        if dns:\n            if isinstance(dns_lookups[ip], Exception) or not dns_lookups[ip]:\n                row.dns_lookup = \"\"\n            else:\n                row.dns_lookup = dns_lookups[ip][0]\n        row.ip_int_value = normalize_ip_to_string(row.ip)\n        if (row.ip, row.mac) not in tracker:\n            tracker[(row.ip, row.mac)] = []\n        tracker[(row.ip, row.mac)].append(row)\n\n\ndef create_inactive_row(tracker, dns, dns_lookups, ip_key):\n    \"\"\"Creates a tracker tuple where the result is inactive\"\"\"\n    ip = str(ip_key)\n    row = {'ip': ip, 'ip_int_value': normalize_ip_to_string(ip)}\n    if dns:\n        if dns_lookups[ip] and not isinstance(dns_lookups[ip], Exception):\n            row['dns_lookup'] = dns_lookups[ip][0]\n        else:\n            row['dns_lookup'] = \"\"\n    tracker[(ip, \"\")] = [row]\n\n\ndef find_colspan(view, form):\n    \"\"\"Find correct colspan for the view\"\"\"\n    defaults = {'ip': 5, 'netbios': 7, 'mac': 8}\n    colspan = defaults[view]\n    netbios = form.data.get('netbios', False)\n    dns = form.data.get('dns', False)\n    source = form.data.get('source', False)\n    vendor = dns = form.data.get('vendor', False)\n\n    if netbios:\n        colspan += 1\n    if dns:\n        colspan += 1\n    if source:\n        colspan += 1\n    if vendor:\n        colspan += 1\n    return colspan\n\n\ndef mac_search(request):\n    \"\"\"Controller for doing a search based on a mac address\"\"\"\n    if 'mac' in request.GET:\n        return mac_do_search(request)\n    info_dict = {'form': forms.MacTrackerForm()}\n    info_dict.update(MAC_DEFAULTS)\n    return render(request, 'machinetracker/mac_search.html', info_dict)\n\n\ndef mac_do_search(request):\n    \"\"\"Does a search based on a mac address\"\"\"\n    querydict = ProcessInput(request.GET).mac()\n    form = forms.MacTrackerForm(querydict)\n    info_dict = {\n        'form': form,\n        'form_data': None,\n        'mac_tracker': None,\n        'ip_tracker': None,\n        'mac_tracker_count': 0,\n        'ip_tracker_count': 0,\n        'disable_ip_context': True,\n    }\n    if form.is_valid():\n        _logger.debug(\"mac_do_search: form is valid\")\n        mac = form.cleaned_data['mac']\n        days = form.cleaned_data['days']\n        dns = form.cleaned_data['dns']\n        vendor = form.cleaned_data['vendor']\n        from_time = date.today() - timedelta(days=days)\n\n        mac_min, mac_max = min_max_mac(mac)\n\n        cam_result = (\n            Cam.objects.select_related('netbox')\n            .filter(\n                end_time__gt=from_time,\n            )\n            .extra(where=['mac BETWEEN %s and %s'], params=[mac_min, mac_max])\n            .order_by('mac', 'sysname', 'module', 'port', '-start_time')\n        )\n\n        arp_result = (\n            Arp.objects.select_related('netbox')\n            .filter(end_time__gt=from_time, mac__range=(mac_min, mac_max))\n            .order_by('mac', 'ip', '-start_time')\n        )\n        if form.cleaned_data['netbios']:\n            arp_result = arp_result.extra(select={'netbiosname': get_netbios_query()})\n\n        if vendor:\n            cam_result = cam_result.extra(select={'vendor': get_vendor_query()})\n            arp_result = arp_result.extra(select={'vendor': get_vendor_query()})\n\n        # Get last ip2mac and topo jobs on netboxes\n        netboxes_ip2mac = get_last_job_log_from_netboxes(arp_result, 'ip2mac')\n        netboxes_topo = get_last_job_log_from_netboxes(cam_result, 'topo')\n\n        # Flag rows overdue as fishy\n        for row in arp_result:\n            if row.netbox in netboxes_ip2mac:\n                job_log = netboxes_ip2mac[row.netbox]\n                fishy = job_log and job_log.is_overdue()\n                row.fishy = job_log if fishy else None\n\n        for row in cam_result:\n            if row.netbox in netboxes_topo:\n                job_log = netboxes_topo[row.netbox]\n                fishy = job_log and job_log.is_overdue()\n                row.fishy = job_log if fishy else None\n\n        mac_count = len(cam_result)\n        ip_count = len(arp_result)\n        _logger.debug(\n            \"mac_do_search: processed %d cam rows and %d arp rows\", mac_count, ip_count\n        )\n        mac_tracker = track_mac(\n            ('mac', 'sysname', 'module', 'port'), cam_result, dns=False\n        )\n        _logger.debug(\"mac_do_search: track_mac finished\")\n        uplink_tracker = UplinkTracker(mac_min, mac_max, vendor=vendor)\n        interface_tracker = InterfaceTracker(mac_min, mac_max, vendor=vendor)\n        ip_tracker = track_mac(('ip', 'mac'), arp_result, dns)\n\n        info_dict.update(\n            {\n                'form_data': form.cleaned_data,\n                'mac_tracker': mac_tracker,\n                'uplink_tracker': uplink_tracker,\n                'interface_tracker': interface_tracker,\n                'ip_tracker': ip_tracker,\n                'mac_tracker_count': mac_count,\n                'ip_tracker_count': ip_count,\n                'ip_tracker_colspan': find_colspan('ip', form),\n                'mac_tracker_colspan': find_colspan('mac', form),\n            }\n        )\n\n    info_dict.update(MAC_DEFAULTS)\n    _logger.debug(\"mac_do_search: rendering\")\n    return render(request, 'machinetracker/mac_search.html', info_dict)\n\n\ndef switch_search(request):\n    \"\"\"Controller for switch search\"\"\"\n    if 'switch' in request.GET:\n        return switch_do_search(request)\n    info_dict = {\n        'form': forms.SwitchTrackerForm(),\n    }\n    info_dict.update(SWP_DEFAULTS)\n    return render(request, 'machinetracker/switch_search.html', info_dict)\n\n\ndef switch_do_search(request):\n    \"\"\"Does a search in cam and arp based on a switch\"\"\"\n    querydict = ProcessInput(request.GET).swp()\n    form = forms.SwitchTrackerForm(querydict)\n    info_dict = {\n        'form': form,\n        'form_data': None,\n        'mac_tracker': None,\n        'mac_tracker_count': 0,\n    }\n    if form.is_valid():\n        switch = form.cleaned_data['switch']\n        module = form.cleaned_data.get('module')\n        port_interface = form.cleaned_data.get('port')\n        days = form.cleaned_data['days']\n        from_time = date.today() - timedelta(days=days)\n        criteria = {}\n\n        if module:\n            criteria['module'] = module\n\n        # If port is specified, match on ifindex\n        if port_interface:\n            try:\n                cam_with_ifindex = Cam.objects.filter(\n                    Q(sysname__istartswith=switch)\n                    | Q(netbox__sysname__istartswith=switch),\n                    end_time__gt=from_time,\n                    port=port_interface,\n                    **criteria,\n                ).values('ifindex')[0]\n                criteria['ifindex'] = cam_with_ifindex['ifindex']\n            except IndexError:\n                criteria['port'] = port_interface\n\n        cam_result = (\n            Cam.objects.select_related('netbox')\n            .filter(\n                Q(sysname__istartswith=switch) | Q(netbox__sysname__istartswith=switch),\n                end_time__gt=from_time,\n                **criteria,\n            )\n            .order_by('sysname', 'module', 'mac', '-start_time')\n        )\n\n        if form.cleaned_data['vendor']:\n            cam_result = cam_result.extra(select={'vendor': get_vendor_query()})\n\n        # Get last topo jobs on netboxes\n        netboxes_topo = get_last_job_log_from_netboxes(cam_result, 'topo')\n\n        # Flag rows overdue as fishy\n        for row in cam_result:\n            if row.netbox in netboxes_topo:\n                job_log = netboxes_topo[row.netbox]\n                fishy = job_log and job_log.is_overdue()\n                row.fishy = job_log if fishy else None\n\n        swp_count = len(cam_result)\n        swp_tracker = track_mac(\n            ('mac', 'sysname', 'module', 'port'), cam_result, dns=False\n        )\n\n        info_dict.update(\n            {\n                'form_data': form.cleaned_data,\n                'mac_tracker': swp_tracker,\n                'mac_tracker_count': swp_count,\n                'mac_tracker_colspan': find_colspan('mac', form),\n            }\n        )\n\n    info_dict.update(SWP_DEFAULTS)\n    return render(request, 'machinetracker/switch_search.html', info_dict)\n\n\ndef get_netbios_query(separator=', '):\n    \"\"\"Return a query that populates netbios names on an arp query\n\n    Multiple netbiosnames are joined with separator to a single string.\n    Populates only if the arp tuple overlaps netbios tuple regarding time.\n\n    Ex:\n    Arp.objects.filter(..).extra(select={'netbiosname': get_netbios_query()})\n\n    \"\"\"\n    return (\n        \"\"\"SELECT array_to_string(array_agg(DISTINCT name),'%s')\n              FROM netbios\n              WHERE arp.ip=netbios.ip AND family(arp.ip) = 4\n              AND (arp.start_time, arp.end_time)\n                   OVERLAPS (netbios.start_time,\n                             netbios.end_time)\"\"\"\n        % separator\n    )\n\n\n# NetBIOS\ndef netbios_search(request):\n    \"\"\"Controller for displaying search for NETBIOS name\"\"\"\n    if 'search' in request.GET:\n        return netbios_do_search(request)\n    info_dict = {'form': forms.NetbiosTrackerForm()}\n    info_dict.update(NBT_DEFAULTS)\n    return render(request, 'machinetracker/netbios_search.html', info_dict)\n\n\ndef netbios_do_search(request):\n    \"\"\"Handle a search for a NETBIOS name\"\"\"\n    form = forms.NetbiosTrackerForm(ProcessInput(request.GET).netbios())\n    info_dict = {\n        'form': form,\n        'form_data': None,\n        'netbios_tracker': None,\n        'netbios_tracker_count': 0,\n    }\n\n    if form.is_valid():\n        searchstring = form.cleaned_data['search']\n        days = form.cleaned_data['days']\n        dns = form.cleaned_data['dns']\n        from_time = date.today() - timedelta(days=days)\n\n        filters = (\n            Q(mac__istartswith=searchstring)\n            | Q(ip__istartswith=searchstring)\n            | Q(name__icontains=searchstring)\n        )\n\n        result = Netbios.objects.filter(filters, end_time__gt=from_time)\n        result = result.order_by('name', 'mac', 'start_time')\n\n        if form.cleaned_data['vendor']:\n            result = result.extra(select={'vendor': get_vendor_query()})\n\n        nbt_count = len(result)\n\n        netbios_tracker = track_mac(\n            ('ip', 'mac', 'name', 'server', 'username', 'start_time', 'end_time'),\n            result,\n            dns,\n        )\n\n        info_dict.update(\n            {\n                'form_data': form.cleaned_data,\n                'netbios_tracker': netbios_tracker,\n                'netbios_tracker_count': nbt_count,\n                'colspan': find_colspan('netbios', form),\n            }\n        )\n\n    info_dict.update(NBT_DEFAULTS)\n    return render(request, 'machinetracker/netbios_search.html', info_dict)\n\n\ndef render_search_help_modal(request, tab_name):\n    \"\"\"Render the search help modal for the given tab name.\"\"\"\n\n    if tab_name not in VALID_HELP_TAB_NAMES:\n        return HttpResponse(status=400)  # Bad Request\n\n    template_name = f'machinetracker/_{tab_name}_search_help_modal.html'\n    modal_id = f'{tab_name}-search-help'\n\n    return render_modal(request, template_name, modal_id=modal_id, size=\"large\")\n"
  },
  {
    "path": "python/nav/web/macwatch/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/macwatch/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass MacWatchConfig(AppConfig):\n    name = 'nav.web.macwatch'\n    verbose_name = 'Mac Watch'\n"
  },
  {
    "path": "python/nav/web/macwatch/forms.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"macwatch form definitions\"\"\"\n\nfrom django import forms\nfrom nav.web.crispyforms import set_flat_form_attributes, FlatFieldset, SubmitField\nfrom nav.web.macwatch.models import MacWatch\nfrom nav.web.macwatch.utils import MAC_ADDR_MAX_LEN\nfrom nav.web.macwatch.utils import MAC_ADDR_MIN_LEN\nfrom nav.web.macwatch.utils import strip_delimiters\nfrom nav.web.macwatch.utils import has_legal_values\nfrom nav.web.macwatch.utils import add_zeros_to_mac_addr\n\n\nclass MacWatchForm(forms.Form):\n    \"\"\"A class to clean and sanitize input-data for macwatch.\"\"\"\n\n    prefix_length = None\n    macaddress = forms.CharField(max_length=17)\n    description = forms.CharField(max_length=200, required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(MacWatchForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Add mac to watch list\",\n                    fields=[self['macaddress'], self['description']],\n                ),\n                SubmitField(value='Add', css_classes='small'),\n            ]\n        )\n\n    def clean_macaddress(self):\n        \"\"\"Validate macaddress\"\"\"\n        macaddress = self.cleaned_data.get('macaddress', '')\n\n        filteredmacaddress = strip_delimiters(macaddress)\n        if len(filteredmacaddress) < MAC_ADDR_MIN_LEN:\n            raise forms.ValidationError(\"Mac address/prefix is too short\")\n        if len(filteredmacaddress) > MAC_ADDR_MAX_LEN:\n            raise forms.ValidationError(\"Mac address is too long\")\n\n        # Number hex-digits (or so-called nybbles),- since prefix may\n        # get specified in hex-digits.\n        # Set when a mac-address prefix is given.\n        addr_len = len(filteredmacaddress)\n        if addr_len >= MAC_ADDR_MIN_LEN and addr_len < MAC_ADDR_MAX_LEN:\n            self.prefix_length = addr_len\n\n        filteredmacaddress = add_zeros_to_mac_addr(filteredmacaddress)\n\n        if not has_legal_values(filteredmacaddress):\n            raise forms.ValidationError(\"Illegal values or format for mac address.\")\n\n        if int(MacWatch.objects.filter(mac=filteredmacaddress).count()) > 0:\n            raise forms.ValidationError(\"This mac address is already watched.\")\n\n        return filteredmacaddress\n"
  },
  {
    "path": "python/nav/web/macwatch/models.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"macwatch Django models\"\"\"\n\nfrom django.db import models\n\nfrom nav.macaddress import MacPrefix\nfrom nav.models.fields import VarcharField\nfrom nav.models.manage import Cam\nfrom nav.models.profiles import Account\n\n\nclass MacWatch(models.Model):\n    \"\"\"Data-model for mac-address that should get watched\n    by bin/macwatch\"\"\"\n\n    MAC_ADDR_DELIM_CHAR = ':'\n\n    id = models.AutoField(db_column='id', primary_key=True)\n    # TODO: Create MACAddressField in Django\n    mac = models.CharField(db_column='mac', max_length=17, unique=True)\n    userid = models.ForeignKey(\n        Account,\n        on_delete=models.CASCADE,\n        db_column='userid',\n        null=False,\n        related_name=\"mac_watches\",\n    )\n    description = VarcharField(db_column='description', null=True)\n    created = models.DateTimeField(db_column='created', auto_now_add=True)\n    # Used only when a mac-address prefix is given.  This is value of\n    # the number for hex-digits (or so-called nybbles).\n    prefix_length = models.IntegerField(db_column='prefix_length', null=True)\n\n    class Meta(object):\n        db_table = 'macwatch'\n        ordering = ('created',)\n\n    def __str__(self):\n        return str(self.mac)\n\n    def _filtered_mac_addr(self):\n        \"\"\"Returns the MAC address value with delimiters stripped\"\"\"\n        return self.mac.replace(':', '').replace('-', '')\n\n    def get_mac_addr(self):\n        \"\"\"Returns a string representation of the watched MAC address, whether\n        it is a full or a partial (prefix) address\n        \"\"\"\n        return str(self.get_mac_prefix())\n\n    def get_mac_prefix(self):\n        \"\"\"Returns the watched MAC address as a MacPrefix object\n\n        :rtype: nav.macaddress.MacPrefix\n        \"\"\"\n        filtered_mac = self._filtered_mac_addr()\n        prefix_mac = filtered_mac[0 : self.prefix_length]\n        return MacPrefix(prefix_mac)\n\n\nclass MacWatchMatch(models.Model):\n    \"\"\"Extra model (helper-model) for mac-watch when macwatch\n    only has a mac-adress prefix\"\"\"\n\n    id = models.AutoField(db_column='id', primary_key=True)\n    macwatch = models.ForeignKey(\n        MacWatch,\n        on_delete=models.CASCADE,\n        db_column='macwatch',\n        null=False,\n        related_name=\"mac_watch_matches\",\n    )\n    cam = models.ForeignKey(\n        Cam,\n        on_delete=models.CASCADE,\n        db_column='cam',\n        null=False,\n        related_name=\"mac_watch_matches\",\n    )\n    posted = models.DateTimeField(db_column='posted', auto_now_add=True)\n\n    class Meta(object):\n        db_table = 'macwatch_match'\n\n    def __str__(self):\n        return 'id=%s; macwatch = %s; cam = %s; posted = %s' % (\n            self.id,\n            self.macwatch,\n            self.cam,\n            self.posted,\n        )\n"
  },
  {
    "path": "python/nav/web/macwatch/urls.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"macwatch Django URL config\"\"\"\n\nfrom django.urls import path\nfrom nav.web.macwatch import views\n\n\nurlpatterns = [\n    # Default view\n    path('', views.list_watch, name='listwatch'),\n    path('add/', views.add_macwatch),\n    path('delete/<int:macwatchid>/', views.delete_macwatch),\n    path('edit/<int:macwatchid>/', views.edit_macwatch),\n]\n"
  },
  {
    "path": "python/nav/web/macwatch/utils.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utillity functions for macwatch\"\"\"\n\nimport re\n\nLEGAL_MAC_ADDRESS = re.compile('^[a-fA-F0-9]{12}$')\n\n# Max number of nybbles in a mac-address.\nMAC_ADDR_MAX_LEN = 12\n# Minimum number of nybbles for a mac-address prefix\nMAC_ADDR_MIN_LEN = 6\n# Minimum value for a mac-address, used for appending\n# zeroes to prefix.\nMAC_ADDR_MIN_VAL = '000000000000'\n\n\ndef strip_delimiters(mac_address):\n    \"\"\"Strip delimiters from mac-address.  Legal delimiters\n    are '-' and ':'\"\"\"\n    return re.sub('-', '', re.sub(':', '', mac_address))\n\n\ndef has_legal_values(mac_address):\n    \"\"\"Check if the given mac-addres consists for legal\n    hex-numbers.  The mac-address must be stripped for\n    delimiters before calling this functiom.\"\"\"\n    if not LEGAL_MAC_ADDRESS.match(mac_address):\n        return False\n    return True\n\n\ndef add_zeros_to_mac_addr(mac_address):\n    \"\"\"Add zeroes at the end of a mac-address if the given\n    mac-address has less than 6 octets.\n    The mac-address given as parameter will not get checked\n    if it only contains legal hex-numbers.\"\"\"\n    prefix_len = len(mac_address)\n    if prefix_len < MAC_ADDR_MAX_LEN:\n        mac_address += MAC_ADDR_MIN_VAL[prefix_len:]\n    return mac_address\n"
  },
  {
    "path": "python/nav/web/macwatch/views.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"macwatch view definitions\"\"\"\n\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render\n\nfrom nav.web.auth.utils import get_account\n\nfrom nav.web.macwatch.forms import MacWatchForm\nfrom nav.web.macwatch.models import MacWatch\n\n\nNAVBAR = [('Home', '/'), ('MacWatch', None)]\nDEFAULT_VALUES = {'title': \"MacWatch\", 'navpath': NAVBAR}\n\n\ndef do_list(request, messages=None):\n    account = get_account(request)\n    macwatches = MacWatch.objects.all()\n    info_dict = populate_info_dict(account, macwatches=macwatches, messages=messages)\n    return render(request, 'macwatch/list_watches.html', info_dict)\n\n\ndef list_watch(request):\n    \"\"\"Render current macwatches and option to add new one.\"\"\"\n    return do_list(request)\n\n\ndef add_macwatch(request):\n    \"\"\"Display form for adding of mac address to watch.\"\"\"\n\n    account = get_account(request)\n    if request.method == 'POST':\n        macwatchform = MacWatchForm(request.POST)\n        if macwatchform.is_valid():\n            # Get user object\n            m = MacWatch(\n                mac=macwatchform.cleaned_data['macaddress'],\n                userid=account,\n                description=macwatchform.cleaned_data['description'],\n            )\n            if macwatchform.prefix_length:\n                m.prefix_length = macwatchform.prefix_length\n            m.save()\n            return HttpResponseRedirect('/macwatch/')\n        else:\n            messages = ['Illegal input-data']\n            info_dict = populate_info_dict(account, messages=messages)\n            info_dict['form'] = macwatchform\n            return render(request, 'macwatch/addmacwatch.html', info_dict)\n\n    info_dict = populate_info_dict(account)\n    macwatchform = MacWatchForm()\n    info_dict['form'] = macwatchform\n    return render(request, 'macwatch/addmacwatch.html', info_dict)\n\n\ndef delete_macwatch(request, macwatchid):\n    \"\"\"Delete tuple for mac address watch\"\"\"\n\n    account = get_account(request)\n    # Delete tuple based on url\n    if macwatchid:\n        # Captured args are always strings. Make it int.\n        macwatchid = int(macwatchid)\n        try:\n            m = MacWatch.objects.get(id=macwatchid)\n        except MacWatch.DoesNotExist as e:\n            messages = [e]\n            return do_list(request, messages)\n\n        if request.method == 'POST':\n            if request.POST['submit'] == 'Yes':\n                try:\n                    m.delete()\n                    return HttpResponseRedirect('/macwatch/')\n                except Exception as e:  # noqa: BLE001\n                    messages = [e]\n                    return do_list(request, messages)\n            else:\n                return HttpResponseRedirect('/macwatch/')\n        else:\n            info_dict = populate_info_dict(account)\n            info_dict['macwatch'] = m\n            return render(request, 'macwatch/deletemacwatch.html', info_dict)\n    return HttpResponseRedirect('/macwatch/')\n\n\ndef edit_macwatch(request, macwatchid):\n    \"\"\"Edit description on a macwatch - currently not in use\"\"\"\n    if request.method == 'POST':\n        macwatchform = MacWatchForm(request.POST)\n        if macwatchform.is_valid():\n            m = MacWatch.objects.get(id=macwatchid)\n            m.mac = macwatchform.cleaned_data['macaddress']\n            m.description = macwatchform.cleaned_data['description']\n            m.save()\n            return HttpResponseRedirect('/macwatch/')\n        else:\n            account = get_account(request)\n            info_dict = populate_info_dict(account)\n            info_dict['form'] = macwatchform\n            return render(request, 'macwatch/editmacwatch.html', info_dict)\n\n    if macwatchid:\n        m = MacWatch.objects.get(id=macwatchid)\n        data = {'macaddress': m.mac, 'description': m.description}\n        macwatchform = MacWatchForm(initial=data)\n    info_dict = populate_info_dict(account)\n    info_dict['form'] = macwatchform\n    return render(request, 'macwatch/editmacwatch.html', info_dict)\n\n\ndef populate_info_dict(account, macwatches=None, messages=None):\n    info_dict = {'account': account}\n    if macwatches:\n        info_dict['macwatches'] = macwatches\n    if messages:\n        info_dict['messages'] = messages\n    info_dict.update(DEFAULT_VALUES)\n    return info_dict\n"
  },
  {
    "path": "python/nav/web/maintenance/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/maintenance/forms.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom datetime import date\n\nfrom django import forms\nfrom nav.web.crispyforms import set_flat_form_attributes, FormRow, FormColumn\nfrom nav.models.fields import INFINITY\n\n\nclass MaintenanceTaskForm(forms.Form):\n    start_time = forms.DateTimeField(required=True)\n    end_time = forms.DateTimeField(required=False)\n    no_end_time = forms.BooleanField(initial=False, required=False)\n    description = forms.CharField(widget=forms.Textarea, required=True)\n\n    def __init__(self, *args, **kwargs):\n        super(MaintenanceTaskForm, self).__init__(*args, **kwargs)\n        self.fields['start_time'].widget.attrs['class'] = 'datetimepicker'\n        self.fields['end_time'].widget.attrs['class'] = 'datetimepicker'\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['start_time']], css_classes='medium-6'),\n                        FormColumn(fields=[self['end_time']], css_classes='medium-6'),\n                    ]\n                ),\n                self['no_end_time'],\n                self['description'],\n            ]\n        )\n\n        # If end_time infinity, check no_end time and disable input\n        try:\n            task = kwargs.pop('initial')\n            if task and (task['end_time'] == INFINITY):\n                task['end_time'] = ''\n                self.fields['no_end_time'].widget.attrs['checked'] = 'checked'\n                self.fields['end_time'].widget.attrs['disabled'] = 'disabled'\n        except KeyError:\n            pass\n\n    def clean(self):\n        if any(self.errors):\n            # Don't bother validating the formset unless each form\n            # is valid on its own\n            return\n        end_time = self.cleaned_data['end_time']\n        no_end_time = self.cleaned_data['no_end_time']\n        if not no_end_time and not end_time:\n            raise forms.ValidationError(\"End time or no end time must be specified\")\n        if end_time and end_time < self.cleaned_data[\"start_time\"]:\n            raise forms.ValidationError(\"End time must be after start time\")\n        return self.cleaned_data\n\n\nclass MaintenanceAddSingleNetbox(forms.Form):\n    \"\"\"A form used for error-checking only; less code than writing\n    a custom variable-checker\"\"\"\n\n    netboxid = forms.IntegerField(required=True)\n\n\ndef _get_current_year():\n    return date.today().year\n\n\ndef _get_current_month():\n    return date.today().month\n\n\nclass MaintenanceCalendarForm(forms.Form):\n    \"\"\"A form used for displaying a maintenance calendar\"\"\"\n\n    year = forms.IntegerField(\n        initial=_get_current_year, required=True, min_value=2000, max_value=2100\n    )\n    month = forms.IntegerField(\n        initial=_get_current_month, required=True, min_value=1, max_value=12\n    )\n\n    @property\n    def cleaned_year(self):\n        \"\"\"Returns the cleaned year value if valid, current year otherwise\"\"\"\n        return self.cleaned_data['year'] if self.is_valid() else _get_current_year()\n\n    @property\n    def cleaned_month(self):\n        \"\"\"Returns the cleaned month if valid, current month otherwise\"\"\"\n        return self.cleaned_data['month'] if self.is_valid() else _get_current_month()\n\n    @property\n    def this_month_start(self):\n        \"\"\"Returns the first date of the month represented by this form instance\"\"\"\n        return date(self.cleaned_year, self.cleaned_month, 1)\n\n    @property\n    def next_month_start(self):\n        \"\"\"Returns the first date of the month after the one represented by this form\n        instance\n        \"\"\"\n        year = self.cleaned_year\n        month = self.cleaned_month + 1\n\n        if month > 12:\n            year += 1\n            month = 1\n        return date(year, month, 1)\n\n    @property\n    def previous_month_start(self):\n        \"\"\"Returns the first date of the month before the one represented by this form\n        instance\n        \"\"\"\n        year = self.cleaned_year\n        month = self.cleaned_month - 1\n\n        if month < 1:\n            year -= 1\n            month = 12\n        return date(year, month, 1)\n"
  },
  {
    "path": "python/nav/web/maintenance/urls.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SeedDB Django URL config\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\n\nfrom nav.web.maintenance import views\n\n\nurlpatterns = [\n    path('', views.redirect_to_calendar),\n    path('calendar/', views.calendar, name='maintenance-calendar'),\n    re_path(\n        r'^calendar/(?P<year>\\d{4})/(?P<month>\\d{1,2})$',\n        views.calendar,\n        name='maintenance-calendar',\n    ),\n    path('active/', views.active, name='maintenance-active'),\n    path('planned/', views.planned, name='maintenance-planned'),\n    path('historic/', views.historic, name='maintenance-historic'),\n    path('search/', views.component_search, name='maintenance-component-search'),\n    path('browse/', views.component_browse, name='maintenance-component-browse'),\n    path(\n        'selectcomponents/',\n        views.component_select,\n        name='maintenance-component-select',\n    ),\n    path('new/', views.edit, name='maintenance-new'),\n    re_path(\n        r'^new/(?P<start_time>\\d{4}-\\d{2}-\\d{2})/$',\n        views.edit,\n        name='maintenance-new-date',\n    ),\n    path('edit/<int:task_id>/', views.edit, name='maintenance-edit'),\n    path('view/<int:task_id>/', views.view, name='maintenance-view'),\n    path('cancel/<int:task_id>/', views.cancel, name='maintenance-cancel'),\n    path('addnetbox/', views.add_box_to_maintenance, name='maintenance-add-netbox'),\n]\n"
  },
  {
    "path": "python/nav/web/maintenance/utils.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom calendar import HTMLCalendar\nfrom dataclasses import dataclass\nfrom datetime import date, datetime, timedelta\nfrom time import strftime\nfrom typing import Union, List, Iterator\n\nfrom django.db import models\nfrom django.db.models import IntegerField\nfrom django.urls import reverse\nfrom django.utils.html import conditional_escape\n\nfrom nav.models.fields import LegacyGenericForeignKey\nfrom nav.models.manage import Netbox, Room, Location, NetboxGroup\nfrom nav.models.service import Service\nfrom nav.models.msgmaint import MaintenanceTask, MaintenanceComponent\n\nALLOWED_COMPONENTS = ('service', 'netbox', 'room', 'location', 'netboxgroup')\n\nCOMPONENTS_WITH_INTEGER_PK = [\n    table\n    for table in ALLOWED_COMPONENTS\n    if isinstance(\n        LegacyGenericForeignKey.get_model_class(table)._meta.get_field('id'),\n        IntegerField,\n    )\n]\n\nNAVPATH = [\n    ('Home', '/'),\n    ('Maintenance', '/maintenance/'),\n]\n\nTITLE = \"NAV - Maintenance\"\n\nINFINITY = datetime.max\n\n\ndef task_form_initial(task=None, start_time=None):\n    if task:\n        initial = {\n            'start_time': task.start_time,\n            'end_time': task.end_time,\n            'description': task.description,\n        }\n    else:\n        if start_time:\n            start_time = datetime.strptime(start_time, \"%Y-%m-%d\")\n        else:\n            start_time = datetime.today()\n        end_time = start_time + timedelta(days=1)\n        initial = {\n            'start_time': start_time.strftime(\"%Y-%m-%d %H:%M\"),\n            'end_time': end_time.strftime(\"%Y-%m-%d %H:%M\"),\n        }\n    return initial\n\n\ndef infodict_by_state(task):\n    if (\n        task.state == MaintenanceTask.STATE_SCHEDULED\n        and task.start_time > datetime.now()\n    ):\n        state = 'planned'\n        navpath = NAVPATH + [('Planned tasks', reverse('maintenance-planned'))]\n    elif task.state in (MaintenanceTask.STATE_PASSED, MaintenanceTask.STATE_CANCELED):\n        state = 'historic'\n        navpath = NAVPATH + [('Historic tasks', reverse('maintenance-historic'))]\n    else:\n        state = 'active'\n        navpath = NAVPATH + [('Active tasks', reverse('maintenance-active'))]\n    return {\n        'active': {state: True},\n        'navpath': navpath,\n    }\n\n\n@dataclass\nclass MissingComponent:\n    \"\"\"Represents a deleted component still associated with a task\"\"\"\n\n    model_class: models.Model\n    pk: Union[int, str]\n    description: str\n\n    @property\n    def _meta(self):\n        \"\"\"Provides a fake `_meta` attribute for compatibility with Django model\n        objects.\n        \"\"\"\n        return self.model_class._meta\n\n    def __str__(self):\n        descr = self.description or self.pk\n        return f\"{descr} (Component was deleted)\"\n\n\nComponentType = Union[Location, Room, Netbox, Service, NetboxGroup, MissingComponent]\n\n\ndef component_to_trail(component: ComponentType) -> List[ComponentType]:\n    \"\"\"Transforms a single component into a list of components that make up a trail for\n    display purposes.\n    \"\"\"\n    if isinstance(component, Room):\n        return [component.location, component]\n    if isinstance(component, Netbox):\n        return [component.room.location, component.room, component]\n    if isinstance(component, Service):\n        return [\n            component.netbox.room.location,\n            component.netbox.room,\n            component.netbox,\n            component,\n        ]\n    return [component]\n\n\ndef get_components(task: MaintenanceTask) -> Iterator[ComponentType]:\n    \"\"\"Yields all components associated with a task, replacing deleted components with\n    a MissingComponent instance.\n    \"\"\"\n    relation: MaintenanceComponent\n    for relation in task.maintenance_components.all():\n        if relation.component is None:\n            yield MissingComponent(\n                model_class=relation.get_component_class(),\n                pk=relation.value,\n                description=relation.description,\n            )\n        else:\n            yield relation.component\n\n\ndef get_component_keys(post):\n    \"\"\"Transforms GET/POST data into a dictionary of component keys.\n\n    This would preferably be done by a Django Form class, but the original code\n    predates Django.\n    \"\"\"\n    remove = {}\n    errors = []\n    raw_component_keys = {key: post.getlist(key) for key in ALLOWED_COMPONENTS}\n    raw_component_keys['location'].extend(post.getlist('loc'))\n    raw_component_keys['location'].extend(post.getlist('add_loc'))\n    raw_component_keys['room'].extend(post.getlist('add_room'))\n    if 'remove' in post:\n        remove = {key: post.getlist(f\"remove_{key}\") for key in ALLOWED_COMPONENTS}\n    component_keys = {key: [] for key in ALLOWED_COMPONENTS}\n    for key in raw_component_keys:\n        for value in raw_component_keys[key]:\n            if not remove or value not in remove[key]:\n                if key in COMPONENTS_WITH_INTEGER_PK:\n                    if not value.isdigit():\n                        errors.append(key + \": argument needs to be a number\")\n                        continue\n                    value = int(value)\n                if value not in component_keys[key]:\n                    component_keys[key].append(value)\n    return component_keys, errors\n\n\ndef get_component_name(model: models.Model):\n    \"\"\"Returns a short name for the component type based on its model class.\n\n    Used as the input name for component keys in forms and APIs.\n\n    Location is abbreviated to 'loc' to avoid XSS issues.\n    \"\"\"\n    if model._meta.db_table == 'location':\n        return 'loc'\n    return model._meta.db_table\n\n\ndef get_components_from_keydict(\n    component_keys: dict[str, List[Union[int, str]]],\n) -> tuple[List[ComponentType], List[str]]:\n    \"\"\"Fetches components from a dictionary of component keys, typically as created\n    from POST data.\n\n    Returns a list of matched components and a list of errors encountered during the\n    process.  Again, this would be better handled by a Django Form class.\n    \"\"\"\n    components = []\n    component_data_errors = []\n\n    for key, values in component_keys.items():\n        if not values:\n            continue\n        model_class = (\n            LegacyGenericForeignKey.get_model_class(key)\n            if key in ALLOWED_COMPONENTS\n            else None\n        )\n        if not model_class:\n            component_data_errors.append(f\"{key}: invalid component type\")\n            continue\n\n        objects = model_class.objects.filter(id__in=values)\n        components.extend(objects)\n        if not objects:\n            component_data_errors.append(\n                f\"{key}: no elements with the given identifiers found\"\n            )\n    return components, component_data_errors\n\n\ndef prefetch_and_group_components(\n    component_type: models.Model,\n    query_results: models.QuerySet,\n    group_by: Union[models.Model, None] = None,\n):\n    \"\"\"\n    Prefetches the related model and groups components by the related model name.\n    \"\"\"\n    if not group_by:\n        return query_results\n\n    group_by_name = group_by._meta.db_table\n\n    if hasattr(query_results, 'prefetch_related') and hasattr(\n        component_type, group_by_name\n    ):\n        query_results = query_results.prefetch_related(group_by_name)\n\n    grouped_results = {}\n    for component in query_results:\n        group_by_model = getattr(component, group_by_name)\n        group_name = str(group_by_model)\n\n        if group_name not in grouped_results:\n            grouped_results[group_name] = []\n        grouped_results[group_name].append(component)\n\n    return [(group, components) for group, components in grouped_results.items()]\n\n\nclass MaintenanceCalendar(HTMLCalendar):\n    START = 'start'\n    END = 'end'\n    CONTINUED = 'continued'\n    CONTINUED_MONTH = 'continued_month'\n\n    def __init__(self, tasks):\n        super(MaintenanceCalendar, self).__init__(0)\n        self.tasks = self.group_span(tasks)\n        self.bg_cache = {}\n        self.bg_num = 0\n\n    def bg_color(self, key):\n        if key in self.bg_cache:\n            return self.bg_cache[key]\n        self.bg_num += 1\n        if self.bg_num > 5:\n            self.bg_num = 1\n        self.bg_cache[key] = \"bg%ilight\" % self.bg_num\n        return self.bg_cache[key]\n\n    def formatweekheader(self):\n        header = super(MaintenanceCalendar, self).formatweekheader()\n        return header.replace('<tr>', '<tr class=\"weekheader\">', 1)\n\n    def formatmonth(self, year, month):\n        self.year, self.month = year, month\n        return super(MaintenanceCalendar, self).formatmonth(year, month)\n\n    def formatday(self, day, weekday):\n        def format_task(task_dict):\n            content = []\n            group = task_dict['grouping']\n            task = task_dict['task']\n            desc = task.description\n            if len(desc) >= 25:\n                desc = desc[:20] + \"(...)\"\n            formated_start = strftime('%H:%M', task.start_time.timetuple())\n            formated_end = strftime('%H:%M', task.end_time.timetuple())\n            content.append('<li class=\"%s\">' % group)\n            content.append(\n                '<a class=\"task_%(id)s %(color)s\" href=\"%(url)s\">'\n                % {\n                    'id': task.pk,\n                    'color': self.bg_color(task.pk),\n                    'url': reverse('maintenance-view', args=[task.pk]),\n                }\n            )\n            if group == self.CONTINUED_MONTH:\n                content.append(\"... \")\n                content.append(conditional_escape(desc))\n            elif group == self.START:\n                content.append(\"%s \" % formated_start)\n                content.append(conditional_escape(desc))\n            elif group == self.END:\n                content.append('<span>%s</span>' % formated_end)\n            else:\n                content.append('&nbsp;')\n            content.append(\"</a>\")\n            return ''.join(content)\n\n        if day != 0:\n            this_day = date(self.year, self.month, day)\n            css = self.cssclasses[weekday]\n            dayurl = '<a href=\"%s\" class=\"daynumber\">%d</a>' % (\n                reverse('maintenance-new-date', args=[this_day]),\n                day,\n            )\n            if date.today() == this_day:\n                css += \" today\"\n            if this_day in self.tasks:\n                css += \" task\"\n                content = [\"<ul>\"]\n                for index in self.tasks[this_day]:\n                    task_dict = self.tasks[this_day][index]\n                    if task_dict:\n                        content.append(format_task(task_dict))\n                    else:\n                        content.append(\"<li>&nbsp;\")\n                    content.append(\"</li>\")\n                content.append(\"</ul>\")\n                return self.day_cell(css, \"%s %s\" % (dayurl, ''.join(content)))\n            return self.day_cell(css, dayurl)\n        return self.day_cell('noday', '&nbsp;')\n\n    def group_span(self, tasks):\n        grouped = {}\n        task_index = {}\n        for task in tasks:\n            day = task.start_time.date()\n            end_day = task.end_time.date()\n            if end_day >= INFINITY.date():\n                # Need to stop somewhere when tasks do not specify end date.\n                end_day = task.start_time.date() + timedelta(weeks=4)\n            while day <= end_day:\n                if day not in grouped:\n                    grouped[day] = {}\n                if task.pk in task_index:\n                    index = task_index[task.pk]\n                    for ii in range(index):\n                        if ii not in grouped[day]:\n                            grouped[day][ii] = None\n                else:\n                    index = len(grouped[day])\n                    for ii in range(index):\n                        if ii not in grouped[day] or not grouped[day][ii]:\n                            index = ii\n                            break\n                    task_index[task.pk] = index\n\n                grouping = self.CONTINUED\n                if task.start_time.month < day.month and day.day == 1:\n                    grouping = self.CONTINUED_MONTH\n                elif day == task.start_time.date():\n                    grouping = self.START\n                elif day == task.end_time.date():\n                    grouping = self.END\n\n                grouped[day][index] = {'task': task, 'grouping': grouping}\n                day += timedelta(days=1)\n        return grouped\n\n    def day_cell(self, css_class, content):\n        return '<td class=\"%s\">%s</td>' % (css_class, content)\n"
  },
  {
    "path": "python/nav/web/maintenance/views.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport logging\nimport time\nfrom collections import defaultdict\nfrom datetime import datetime\nfrom typing import Optional\n\nfrom django.db import connection, transaction\nfrom django.db.models import Count, Model, Q\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import get_object_or_404, redirect, render\nfrom django.urls import reverse\nfrom django.utils.safestring import mark_safe\nfrom django.views.decorators.http import require_http_methods\n\nimport nav.maintengine\nfrom nav.web.auth.utils import get_account\nfrom nav.models.manage import Location, Netbox, NetboxGroup, Room\nfrom nav.models.msgmaint import MaintenanceComponent, MaintenanceTask\nfrom nav.models.service import Service\nfrom nav.web.maintenance.forms import (\n    MaintenanceAddSingleNetbox,\n    MaintenanceCalendarForm,\n    MaintenanceTaskForm,\n)\nfrom nav.web.maintenance.utils import (\n    NAVPATH,\n    COMPONENTS_WITH_INTEGER_PK,\n    TITLE,\n    MaintenanceCalendar,\n    component_to_trail,\n    get_component_keys,\n    get_component_name,\n    get_components,\n    get_components_from_keydict,\n    prefetch_and_group_components,\n    infodict_by_state,\n    task_form_initial,\n)\nfrom nav.web.message import Messages, new_message\n\nINFINITY = datetime.max\n\n_logger = logging.getLogger(__name__)\n\n\ndef redirect_to_calendar(_request):\n    \"\"\"Redirect to main page for this tool\"\"\"\n    return redirect(reverse('maintenance-calendar'))\n\n\ndef calendar(request, year=None, month=None):\n    # If the form was used to get here, redirect to the appropriate page\n    if \"year\" in request.GET and \"month\" in request.GET:\n        form = MaintenanceCalendarForm(data=request.GET.dict())\n        if form.is_valid():\n            return redirect(\n                \"maintenance-calendar\",\n                year=request.GET.get(\"year\"),\n                month=request.GET.get(\"month\"),\n            )\n    elif year and month:\n        form = MaintenanceCalendarForm(\n            data={'year': year, 'month': month},\n        )\n    else:\n        form = MaintenanceCalendarForm()\n\n    tasks = (\n        MaintenanceTask.objects.filter(\n            start_time__lt=form.next_month_start, end_time__gt=form.this_month_start\n        )\n        .exclude(state=MaintenanceTask.STATE_CANCELED)\n        .order_by('start_time')\n    )\n    cal = MaintenanceCalendar(tasks).formatmonth(form.cleaned_year, form.cleaned_month)\n    return render(\n        request,\n        'maintenance/calendar.html',\n        {\n            'active': {'calendar': True},\n            'calendarform': form,\n            'navpath': NAVPATH,\n            'title': TITLE,\n            'heading': \"Maintenance schedule\",\n            'calendar': mark_safe(cal),\n            'prev_month': form.previous_month_start,\n            'this_month': form.this_month_start,\n            'next_month': form.next_month_start,\n            'curr_month': datetime.today(),\n        },\n    )\n\n\ndef active(request):\n    heading = \"Active tasks\"\n    tasks = (\n        MaintenanceTask.objects.filter(\n            start_time__lt=datetime.now(),\n            end_time__gt=datetime.now(),\n            state__in=(MaintenanceTask.STATE_SCHEDULED, MaintenanceTask.STATE_ACTIVE),\n        )\n        .order_by('-start_time', '-end_time')\n        .annotate(component_count=Count('maintenance_components'))\n    )\n    for task in tasks:\n        # Tasks that have only one component should show a link\n        # directly to the device instead of a number.\n        if task.component_count == 1:\n            maint_components = MaintenanceComponent.objects.filter(\n                maintenance_task=task, key='netbox'\n            )\n            if len(maint_components) == 1:\n                netbox = None\n                netbox_id = maint_components[0].value\n                try:\n                    netbox = Netbox.objects.get(pk=int(netbox_id))\n                except Netbox.DoesNotExist as error:\n                    _logger.error(\n                        'Get netbox %s failed; Exception = %s', netbox_id, error\n                    )\n                    continue\n                task.netbox = netbox\n\n    return render(\n        request,\n        'maintenance/list.html',\n        {\n            'active': {'active': True},\n            'navpath': NAVPATH + [(heading, '')],\n            'title': TITLE + \" - \" + heading,\n            'heading': heading,\n            'tasks': tasks,\n        },\n    )\n\n\ndef planned(request):\n    heading = \"Scheduled tasks\"\n    tasks = (\n        MaintenanceTask.objects.filter(\n            start_time__gt=datetime.now(),\n            end_time__gt=datetime.now(),\n            state__in=(MaintenanceTask.STATE_SCHEDULED, MaintenanceTask.STATE_ACTIVE),\n        )\n        .order_by('-start_time', '-end_time')\n        .annotate(component_count=Count('maintenance_components'))\n    )\n    return render(\n        request,\n        'maintenance/list.html',\n        {\n            'active': {'planned': True},\n            'navpath': NAVPATH + [(heading, '')],\n            'title': TITLE + \" - \" + heading,\n            'heading': heading,\n            'tasks': tasks,\n        },\n    )\n\n\ndef historic(request):\n    heading = \"Archived tasks\"\n    tasks = (\n        MaintenanceTask.objects.filter(\n            Q(end_time__lt=datetime.now())\n            | Q(\n                state__in=(MaintenanceTask.STATE_CANCELED, MaintenanceTask.STATE_PASSED)\n            )\n        )\n        .order_by('-start_time', '-end_time')\n        .annotate(component_count=Count('maintenance_components'))\n    )\n    return render(\n        request,\n        'maintenance/list.html',\n        {\n            'active': {'historic': True},\n            'navpath': NAVPATH + [('Historic tasks', '')],\n            'title': TITLE + \" - \" + heading,\n            'heading': heading,\n            'tasks': tasks,\n        },\n    )\n\n\ndef view(request, task_id):\n    task = get_object_or_404(MaintenanceTask, pk=task_id)\n    components = get_components(task)\n    component_trail = [component_to_trail(c) for c in components]\n\n    heading = 'Task \"%s\"' % task.description\n    infodict = infodict_by_state(task)\n    return render(\n        request,\n        'maintenance/details.html',\n        {\n            'active': infodict['active'],\n            'navpath': infodict['navpath'],\n            'title': TITLE + \" - \" + heading,\n            'heading': heading,\n            'task': task,\n            'components': component_trail,\n        },\n    )\n\n\ndef cancel(request, task_id):\n    task = get_object_or_404(MaintenanceTask, pk=task_id)\n    heading = 'Cancel task'\n    if request.method == 'POST':\n        task.state = 'canceled'\n        task.save()\n        new_message(request, \"This task is now cancelled.\", Messages.SUCCESS)\n        return HttpResponseRedirect(reverse('maintenance-view', args=[task_id]))\n    else:\n        infodict = infodict_by_state(task)\n        return render(\n            request,\n            'maintenance/cancel.html',\n            {\n                'active': infodict['active'],\n                'navpath': infodict['navpath'],\n                'title': TITLE + \" - \" + heading,\n                'heading': heading,\n                'task': task,\n            },\n        )\n\n\n@transaction.atomic()\ndef edit(request, task_id=None, start_time=None, **_):\n    account = get_account(request)\n    components = task = None\n    component_keys_errors = []\n    component_keys = {}\n\n    if task_id:\n        task = get_object_or_404(MaintenanceTask, pk=task_id)\n    task_form = MaintenanceTaskForm(initial=task_form_initial(task, start_time))\n\n    if request.method == 'POST':\n        component_keys, component_keys_errors = get_component_keys(request.POST)\n    elif task:\n        components = get_components(task)\n    else:\n        component_keys, component_keys_errors = get_component_keys(request.GET)\n\n    if component_keys:\n        components, component_data_errors = get_components_from_keydict(component_keys)\n        for error in component_data_errors:\n            new_message(request, error, Messages.ERROR)\n\n    component_trail = [component_to_trail(c) for c in components]\n\n    for error in component_keys_errors:\n        new_message(request, error, Messages.ERROR)\n\n    if request.method == 'POST':\n        if 'save' in request.POST:\n            task_form = MaintenanceTaskForm(request.POST)\n            if component_keys and not components:\n                new_message(request, \"No components selected.\", Messages.ERROR)\n            elif not component_keys_errors and task_form.is_valid():\n                start_time = task_form.cleaned_data['start_time']\n                end_time = task_form.cleaned_data['end_time']\n                no_end_time = task_form.cleaned_data['no_end_time']\n                state = MaintenanceTask.STATE_SCHEDULED\n                if (\n                    start_time < datetime.now()\n                    and end_time\n                    and end_time <= datetime.now()\n                ):\n                    state = MaintenanceTask.STATE_SCHEDULED\n\n                new_task = MaintenanceTask()\n                new_task.start_time = task_form.cleaned_data['start_time']\n                if no_end_time:\n                    new_task.end_time = INFINITY\n                elif not no_end_time and end_time:\n                    new_task.end_time = task_form.cleaned_data['end_time']\n                new_task.description = task_form.cleaned_data['description']\n                new_task.state = state\n                new_task.author = account.login\n                if task:\n                    new_task.id = task.id\n                new_task.save()\n\n                if task:\n                    cursor = connection.cursor()\n                    sql = \"\"\"DELETE FROM maint_component\n                                WHERE maint_taskid = %s\"\"\"\n                    cursor.execute(sql, (new_task.id,))\n                for component in components:\n                    table = component._meta.db_table\n                    descr = (\n                        str(component) if table in COMPONENTS_WITH_INTEGER_PK else None\n                    )\n                    task_component = MaintenanceComponent(\n                        maintenance_task=new_task,\n                        key=table,\n                        value=component.pk,\n                        description=descr,\n                    )\n                    task_component.save()\n                new_message(\n                    request, \"Saved task %s\" % new_task.description, Messages.SUCCESS\n                )\n                return HttpResponseRedirect(\n                    reverse('maintenance-view', args=[new_task.id])\n                )\n        else:\n            task_form = MaintenanceTaskForm(initial=request.POST)\n\n    if task:\n        navpath = NAVPATH + [('Edit', '')]\n        heading = 'Editing \"%s\"' % task.description\n        title = TITLE + \" - \" + heading\n    else:\n        navpath = NAVPATH + [('New', '')]\n        heading = 'New task'\n        title = TITLE + \" - \" + heading\n    return render(\n        request,\n        'maintenance/new_task.html',\n        {\n            'active': {'new': True},\n            'navpath': navpath,\n            'title': title,\n            'heading': heading,\n            'task_form': task_form,\n            'task_id': task_id,\n            'components': component_trail,\n            'selected': component_keys,\n        },\n    )\n\n\n@require_http_methods([\"POST\"])\ndef component_search(request):\n    \"\"\"HTMX endpoint for component searches from maintenance task form\"\"\"\n    raw_search = request.POST.get(\"search\")\n    search = raw_search.strip() if raw_search else ''\n    if not search:\n        return render(\n            request, 'maintenance/_component-search-results.html', {'results': {}}\n        )\n\n    results = {}\n    searches: list[tuple[type[Model], Q, Optional[Model]]] = [\n        (\n            Location,\n            Q(id__icontains=search)\n            | Q(aliases__icontains=search)\n            | Q(description__icontains=search),\n            None,\n        ),\n        (\n            Room,\n            Q(id__icontains=search)\n            | Q(aliases__icontains=search)\n            | Q(description__icontains=search),\n            Location,\n        ),\n        (Netbox, Q(sysname__icontains=search), Room),\n        (NetboxGroup, Q(id__icontains=search), None),\n        (\n            Service,\n            Q(handler__icontains=search) | Q(netbox__sysname__icontains=search),\n            Netbox,\n        ),\n    ]\n\n    for component_type, query, group_by in searches:\n        component_results = component_type.objects.filter(query)\n        grouped_results = prefetch_and_group_components(\n            component_type, component_results, group_by\n        )\n\n        if component_results:\n            component_title = get_component_name(component_type)\n            results[component_title] = {\n                'label': component_type._meta.verbose_name.title(),\n                'values': grouped_results,\n                'has_grouping': group_by is not None,\n            }\n\n    return render(\n        request, 'maintenance/_component-search-results.html', {'results': results}\n    )\n\n\n@require_http_methods([\"POST\"])\ndef component_select(request):\n    \"\"\"HTMX endpoint for component selection from maintenance task form\"\"\"\n    component_keys, component_keys_errors = get_component_keys(request.POST)\n    for error in component_keys_errors:\n        new_message(request, error, Messages.ERROR)\n\n    components, components_errors = get_components_from_keydict(component_keys)\n    for error in components_errors:\n        new_message(request, error, Messages.ERROR)\n\n    component_trail = [component_to_trail(c) for c in components]\n\n    return render(\n        request,\n        'maintenance/_selected-components-list.html',\n        {'components': component_trail, 'selected': component_keys},\n    )\n\n\n@require_http_methods([\"GET\"])\ndef component_browse(request):\n    \"\"\"HTMX endpoint that returns a browsable tree of locations and rooms\"\"\"\n    locations = list(Location.objects.order_by('id'))\n    rooms = list(Room.objects.order_by('id'))\n\n    rooms_by_location = defaultdict(list)\n    for room in rooms:\n        rooms_by_location[room.location_id].append(room)\n\n    children_by_parent = defaultdict(list)\n    for loc in locations:\n        loc.browse_rooms = rooms_by_location[loc.pk]\n        children_by_parent[loc.parent_id].append(loc)\n\n    for loc in locations:\n        loc.browse_children = children_by_parent[loc.pk]\n\n    return render(\n        request,\n        'maintenance/_component-browse.html',\n        {'locations': children_by_parent[None]},\n    )\n\n\ndef add_box_to_maintenance(request):\n    \"\"\"\n    This view puts a Netbox on immediate, indefinite maintenance and\n    redirects the user to the status page. It implements the functionality\n    behind the \"Put on maintenance\" button present in the Status page's \"IP\n    Devices down\" items.\n\n    The maintenance engine will close the maintenance task automatically when\n    the Netbox has been consistently up for a period of time.\n\n    \"\"\"\n    before = time.time()\n    account = get_account(request)\n    if request.method == 'POST':\n        netboxid_form = MaintenanceAddSingleNetbox(request.POST)\n        if netboxid_form.is_valid():\n            netbox_id = netboxid_form.cleaned_data['netboxid']\n            netbox = get_object_or_404(Netbox, pk=netbox_id)\n\n            # Check if device is already on maintenance\n            already_on_maint = MaintenanceComponent.objects.filter(\n                key='netbox',\n                value=str(netbox.id),\n                maintenance_task__state=MaintenanceTask.STATE_ACTIVE,\n                maintenance_task__end_time=datetime.max,\n            )\n            if not already_on_maint:\n                # Box is not on maintenance\n                _add_neverending_maintenance_task(account, netbox)\n\n                _logger.debug('Run maintenance checker')\n                nav.maintengine.check_devices_on_maintenance()\n                _logger.debug('Maintenance checker finished')\n\n                _logger.debug(\n                    'Add netbox to maintenance finished in %.3fs', time.time() - before\n                )\n            else:\n                # What should we do here?\n                _logger.error(\n                    'Netbox %s (id=%d) is already on maintenance',\n                    netbox.sysname,\n                    netbox.id,\n                )\n    return HttpResponseRedirect(reverse('status-index'))\n\n\n@transaction.atomic()\ndef _add_neverending_maintenance_task(owner, netbox):\n    _logger.debug('Adding maintenance task...')\n    maint_task = MaintenanceTask()\n    maint_task.start_time = datetime.now()\n    maint_task.end_time = INFINITY\n    descr = (\n        \"On maintenance till up again; set \"\n        + \"from status page by user %s\" % owner.login\n    )\n    maint_task.description = descr\n    maint_task.author = owner.login\n    maint_task.state = MaintenanceTask.STATE_SCHEDULED\n    maint_task.save()\n    _logger.debug(\n        \"Maintenance task %d; Adding component %s (id=%d)\",\n        maint_task.id,\n        netbox.sysname,\n        netbox.id,\n    )\n    maint_component = MaintenanceComponent()\n    maint_component.maintenance_task = maint_task\n    maint_component.key = 'netbox'\n    maint_component.value = '%d' % netbox.id\n    maint_component.save()\n"
  },
  {
    "path": "python/nav/web/message.py",
    "content": "#\n# Copyright (C) 2008, 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Message handling for NAV.\n\nA message is stored in a user's session and can be displayed to the\nuser to give confirmation, warnings or other types of messages.\n\nThis was originally written to work with NAV sessions under mod_python,\nbefore we supported a Django version with its on Message framework. Most\nusage of this module can be replaced with Django's Message framework instead.\n\n\"\"\"\n\nfrom copy import copy\n\n\ndef new_message(request, message, type):\n    \"\"\"Convenience method for fetching Messages object and adding a new message\n    to it.\n\n    Automatically calls save, and should therefore only be used when there's\n    only need for one message.\n\n    \"\"\"\n    messages = Messages(request)\n    messages.append({'message': message, 'type': type})\n    messages.save()\n\n\nclass Messages(list):\n    \"\"\"List object that stores messsages for the user accross page views.\n    Uses sessions.\n    \"\"\"\n\n    SUCCESS = 'success'\n    NOTICE = 'secondary'\n    WARNING = 'warning'\n    ERROR = 'alert'\n\n    session = None\n\n    def __init__(self, request=None):\n        self.session = request.session\n\n    def __new__(cls, request=None):\n        # We try to fetch a Messages object from this users session.\n        # If it doesn't exist we make a new one.\n        messages = request.session.get('messages', None)\n\n        if not messages or not isinstance(messages, Messages):\n            return list.__new__(cls)\n        else:\n            return messages\n\n    def save(self):\n        \"\"\"Save this Messages object to this users session.\"\"\"\n        messages = self.session.get('messages', [])\n        messages.extend(self)\n        self.session['messages'] = messages\n\n    def get_and_delete(self):\n        \"\"\"Copies messages from this user's session and purges the originals.\"\"\"\n        messages = copy(self.session.get('messages', None))\n        if messages:\n            self.session['messages'] = []\n        return messages\n"
  },
  {
    "path": "python/nav/web/messages/__init__.py",
    "content": "\"\"\"\nPackage placeholder. If you remove it, the package won't work.\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/messages/feeds.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport datetime\n\nfrom django.contrib.syndication.views import Feed\nfrom django.urls import reverse\n\nfrom nav.models.msgmaint import Message\n\n\nclass ActiveMessagesFeed(Feed):\n    \"\"\"\n    Generates a RSS feed of the active messages in NAV.\n    Uses the Django Syndication module and its interface.\n    \"\"\"\n\n    title = \"NAV Message feed\"\n    description = \"NAV Message feed\"\n\n    def link(self):\n        return reverse('messages-active')\n\n    def items(self):\n        return Message.objects.filter(\n            publish_start__lte=datetime.datetime.now(),\n            publish_end__gte=datetime.datetime.now(),\n            replaced_by__isnull=True,\n        )\n\n    def item_title(self, item):\n        return item.title\n\n    def item_pubdate(self, item):\n        return item.publish_start\n\n    def item_description(self, item):\n        return item.description\n\n    def item_link(self, item):\n        return reverse('messages-view', args=[item.pk])\n"
  },
  {
    "path": "python/nav/web/messages/forms.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Form models for Messages\"\"\"\n\nfrom django.forms import ModelForm\nfrom nav.web.crispyforms import set_flat_form_attributes, SubmitField, FlatFieldset\n\nfrom nav.models.msgmaint import Message\nfrom nav.models.msgmaint import MessageToMaintenanceTask\n\n\nclass MessageForm(ModelForm):\n    \"\"\"Model form class for a Message object\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(MessageForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend='',\n                    fields=[\n                        self['title'],\n                        self['description'],\n                        self['tech_description'],\n                        self['publish_start'],\n                        self['publish_end'],\n                        self['maintenance_tasks'],\n                    ],\n                ),\n            ],\n            submit_field=SubmitField(value='Save message', css_classes='small'),\n        )\n\n        # Since the m2m uses through, we need to fetch initial data manually\n        initials = []\n        if self.instance.pk:\n            tasks = MessageToMaintenanceTask.objects.filter(message=self.instance)\n            for task in tasks.all():\n                initials.append(task.maintenance_task.pk)\n        self.initial['maintenance_tasks'] = initials\n\n        # Classes for javascript plugin\n        self.fields['publish_start'].widget.attrs['class'] = 'datetimepicker'\n        self.fields['publish_end'].widget.attrs['class'] = 'datetimepicker'\n\n        # Omit seconds when displaying data\n        self.fields['publish_start'].widget.format = '%Y-%m-%d %H:%M'\n        self.fields['publish_end'].widget.format = '%Y-%m-%d %H:%M'\n\n    class Meta(object):\n        model = Message\n        exclude = ['author', 'replaces_message', 'last_changed']\n\n    def save(self, commit=True):\n        \"\"\"\n        Overriding save method to persist related maintenance tasks\n\n        We need to manually update the relations to tasks, since django\n        can not handle M2M relations with 'through'\n\n        This method will first delete all the relations to a task and\n        then save the updated version. Hack?\n        \"\"\"\n\n        # Save the message\n        message = super(MessageForm, self).save(commit=False)\n        message.save()\n\n        # Cleanup existing tasks related to message\n        MessageToMaintenanceTask.objects.filter(message=message).delete()\n\n        # Save all the relations to tasks\n        for task in self.cleaned_data.get('maintenance_tasks'):\n            relation = MessageToMaintenanceTask(message=message, maintenance_task=task)\n            relation.save()\n\n        return message\n"
  },
  {
    "path": "python/nav/web/messages/urls.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration for messages tool\"\"\"\n\nfrom django.urls import path\n\nfrom nav.web.messages import views\nfrom nav.web.messages.feeds import ActiveMessagesFeed\n\nurlpatterns = [\n    path('', views.redirect_to_active),\n    path('active/', views.active, name='messages-home'),\n    path('create/', views.save, name='messages-create'),\n    path('edit/<int:message_id>', views.save, name='messages-edit'),\n    path('active/', views.active, name='messages-active'),\n    path('scheduled/', views.planned, name='messages-planned'),\n    path('archive/', views.historic, name='messages-historic'),\n    path('view/<int:message_id>', views.view, name='messages-view'),\n    path('expire/<int:message_id>', views.expire, name='messages-expire'),\n    path('followup/<int:message_id>', views.followup, name='messages-followup'),\n    path('rss/', ActiveMessagesFeed(), name='messages-rss'),\n]\n"
  },
  {
    "path": "python/nav/web/messages/views.py",
    "content": "# Copyright (C) 2006-2008, 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controller functions for Messages\"\"\"\n\nimport datetime\n\nfrom django.db.models import Q\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render, get_object_or_404, redirect\nfrom django.urls import reverse\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.msgmaint import Message\nfrom nav.web.messages.forms import MessageForm\n\n# Navigation and tab management\nNAVBAR = [('Home', '/'), ('Messages', None)]\nACTIVE_TITLE = 'NAV - Messages - Active'\nPLANNED_TITLE = 'NAV - Messages - Scheduled'\nHISTORIC_TITLE = 'NAV - Messages - Archive'\nSAVE_TITLE = 'NAV - Messages - Save'\nVIEW_TITLE = 'NAV - Messages - View message - '\n\nACTIVE_DEFAULTS = {\n    'title': ACTIVE_TITLE,\n    'navpath': NAVBAR,\n    'active': {'active': True},\n    'caption': 'Active',\n}\nPLANNED_DEFAULTS = {\n    'title': PLANNED_TITLE,\n    'navpath': NAVBAR,\n    'active': {'scheduled': True},\n    'caption': 'Scheduled',\n}\nHISTORIC_DEFAULTS = {\n    'title': HISTORIC_TITLE,\n    'navpath': NAVBAR,\n    'active': {'archive': True},\n    'caption': 'Archive',\n}\nSAVE_DEFAULTS = {'title': SAVE_TITLE, 'navpath': NAVBAR}\nVIEW_DEFAULTS = {'title': VIEW_TITLE, 'navpath': NAVBAR}\n\nEDIT = {'caption': 'Edit message'}\nCREATE = {'caption': 'Create new message'}\nFOLLOWUP = {'caption': 'Follow up message'}\n\n\ndef redirect_to_active(_request):\n    \"\"\"Redirect to main page for this tool\"\"\"\n    return redirect(reverse('messages-home'))\n\n\ndef active(request):\n    \"\"\"Displays active messages that is not replaced\"\"\"\n    active_messages = Message.objects.filter(\n        publish_start__lte=datetime.datetime.now(),\n        publish_end__gte=datetime.datetime.now(),\n        replaced_by__isnull=True,\n    )\n\n    info_dict = {'messages': active_messages}\n    info_dict.update(ACTIVE_DEFAULTS)\n\n    return render(request, 'messages/list.html', info_dict)\n\n\ndef planned(request):\n    \"\"\"Displays messages that are planned in the future\"\"\"\n    planned_messages = Message.objects.filter(\n        publish_start__gte=datetime.datetime.now(),\n        publish_end__gte=datetime.datetime.now(),\n        replaced_by__isnull=True,\n    )\n\n    info_dict = {'messages': planned_messages}\n    info_dict.update(PLANNED_DEFAULTS)\n\n    return render(request, 'messages/list.html', info_dict)\n\n\ndef historic(request):\n    \"\"\"Displays ended or replaced messages\"\"\"\n    historic_messages = Message.objects.filter(\n        Q(publish_end__lt=datetime.datetime.now()) | Q(replaced_by__isnull=False)\n    )\n\n    info_dict = {'messages': historic_messages}\n    info_dict.update(HISTORIC_DEFAULTS)\n\n    return render(request, 'messages/list.html', info_dict)\n\n\ndef view(request, message_id):\n    \"\"\"Displays details about a single message\"\"\"\n    message = get_object_or_404(Message, pk=message_id)\n\n    info_dict = {'message': message, 'now': datetime.datetime.now()}\n    info_dict.update(VIEW_DEFAULTS)\n    info_dict['navpath'] = [\n        NAVBAR[0],\n        ('Messages', reverse('messages-home')),\n        (message,),\n    ]\n    info_dict['title'] += message.title\n\n    return render(request, 'messages/view.html', info_dict)\n\n\ndef expire(_request, message_id):\n    \"\"\"Expires a message. Sets the end date to now\"\"\"\n    message = get_object_or_404(Message, pk=message_id)\n    message.publish_end = datetime.datetime.now()\n    message.save()\n\n    return HttpResponseRedirect(reverse('messages-view', args=(message_id,)))\n\n\ndef followup(request, message_id):\n    \"\"\"\n    Follow up means that you ought to replace a task for a new one.\n    This method sends the object you are replacing to the\n    same form that creates and edits.\n    \"\"\"\n    replaces = get_object_or_404(Message, pk=message_id)\n    return save(request, message_id, replaces)\n\n\ndef save(request, message_id=None, replaces=None):\n    \"\"\"Displays the form for create, edit and followup, and saves them\"\"\"\n    account = get_account(request)\n    info_dict = SAVE_DEFAULTS.copy()\n    navpath = [NAVBAR[0], ('Messages', reverse('messages-home'))]\n\n    # If it's an edit, load the initial data\n    if message_id and not replaces:\n        message = get_object_or_404(Message, pk=message_id)\n        info_dict.update(EDIT)\n        info_dict['message'] = message\n        navpath += [(\"Edit %s\" % message,)]\n    else:\n        message = Message()\n\n        # If this is a replacement, load some initial data to a\n        # clean object to help out\n        if replaces:\n            info_dict['message'] = replaces\n            navpath += [(\"Replace %s\" % replaces,)]\n            message.title = replaces.title\n            message.publish_start = replaces.publish_start\n            message.publish_end = replaces.publish_end\n            message.replaces_message = replaces\n            info_dict.update(FOLLOWUP)\n        else:\n            info_dict.update(CREATE)\n            navpath += [(\"Create message\",)]\n\n    form = MessageForm(instance=message)\n\n    if request.method == 'POST':\n        form = MessageForm(request.POST, instance=message)\n        if form.is_valid():\n            form.instance.author = account.login\n            form.save()\n            return HttpResponseRedirect(\n                reverse('messages-view', args=(form.instance.id,))\n            )\n\n    info_dict.update({'form': form, 'navpath': navpath})\n\n    # If replacement, add the object so we can view it\n    if replaces:\n        info_dict['replaces'] = replaces\n\n    return render(request, 'messages/save.html', info_dict)\n"
  },
  {
    "path": "python/nav/web/modals.py",
    "content": "\"\"\"\nModal rendering utilities for Django HTMX applications.\n\nThis module provides utility functions for rendering and managing modal dialogs\nin Django applications using HTMX. It includes functions for rendering modals\nwith custom templates, resolving modal content, and displaying alert messages\nwithin modals.\n\nFunctions:\n    render_modal: Render a modal dialog with a given template and context\n    resolve_modal: Resolve a modal dialog with updated content\n    render_modal_alert: Render an alert message within a modal dialog\n\nConstants:\n    DEFAULT_MODAL_ID: Default modal element ID ('modal')\n    DEFAULT_MODAL_SIZE: Default modal size ('tiny')\n\"\"\"\n\nfrom typing import Optional\n\nfrom django.shortcuts import render\nfrom django_htmx.http import reswap, retarget\n\nDEFAULT_MODAL_ID = 'modal'\nDEFAULT_MODAL_SIZE = 'fit-content'\n\n\ndef render_modal(\n    request,\n    template_name: str,\n    context: Optional[dict] = None,\n    modal_id: Optional[str] = DEFAULT_MODAL_ID,\n    size: Optional[str] = DEFAULT_MODAL_SIZE,\n    show_close_button: bool = True,\n    close_on_outside_click: bool = True,\n):\n    \"\"\"Render a modal dialog with the given template and context\"\"\"\n\n    if context is None:\n        context = {}\n    modal_context = {\n        'modal_id': modal_id,\n        'content_template': template_name,\n        'modal_size': size,\n        'show_close_button': show_close_button,\n        'close_on_outside_click': close_on_outside_click,\n        **context,\n    }\n    return render(request, 'modals/_nav_modal.html', modal_context)\n\n\ndef resolve_modal(\n    request,\n    template_name: Optional[str] = None,\n    context: Optional[dict] = None,\n    modal_id: Optional[str] = DEFAULT_MODAL_ID,\n):\n    \"\"\"Resolve a modal dialog with the given template and context\"\"\"\n    if context is None:\n        context = {}\n    modal_context = {'modal_id': modal_id, 'content_template': template_name, **context}\n    return render(request, 'modals/_nav_modal_resolve.html', modal_context)\n\n\ndef render_modal_alert(\n    request, message: str, modal_id: Optional[str] = DEFAULT_MODAL_ID\n):\n    \"\"\"Render an alert box with the given message and swaps the modal content\"\"\"\n    context = {\n        'message': message,\n        'modal_id': modal_id,\n    }\n    response = render(request, 'modals/_nav_modal_alert.html', context)\n    reswap(response, 'outerHtml')\n    retarget(response, f\"#{modal_id}-alert\")\n    return response\n"
  },
  {
    "path": "python/nav/web/modpython.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Functionality to enable any Apache-served resources to be protected by\nNAV's authentication and authorization system, by the use of mod_python.\n\nTo protect a resource served by Apache using this module, add something like\nthe following to your Apache-config::\n\n  <Location /protected-resource>\n      PythonHeaderParserHandler nav.web.modpython\n  </Location>\n\n\nKnown issues\n------------\n\nmod_python itself is no longer maintained, and therefore deprecated,\nwhich is why the rest of NAV has completely moved to Django,\nwith a suggested WSGI-based configuration.\n\n\"\"\"\n\nimport warnings\nimport logging\nfrom http import cookies\nfrom typing import Optional\n\nfrom nav.bootstrap import bootstrap_django\n\nfrom django.contrib.auth.middleware import AuthenticationMiddleware\nfrom django.contrib.sessions.middleware import SessionMiddleware\nfrom django.db import connection\nfrom django.http import HttpRequest, HttpResponse\nfrom django.utils.deprecation import MiddlewareMixin\n\nfrom nav.web.auth.middleware import NAVAuthenticationMiddleware\nfrom nav.web.auth.utils import (\n    authorize_request,\n    redirect_to_login,\n)\nfrom nav.web import loginit\n\n\nMODPYTHON_MIDDLEWARE = [\n    SessionMiddleware,\n    AuthenticationMiddleware,\n    NAVAuthenticationMiddleware,\n]\n\n\nclass ModPythonAuthorizationMiddleware(MiddlewareMixin):\n    \"\"\"Authorization Middleware for non-Django views\"\"\"\n\n    def process_request(self, request: HttpRequest) -> Optional[HttpResponse]:\n        authorized = authorize_request(request)\n        if not authorized:\n            return redirect_to_login(request)\n\n\ndef headerparserhandler(req):\n    \"\"\"A mod_python headerparserhandler to authenticate and authorize a request\n    using NAV.\n\n    It uses NAV's Django authenticaton and authorization middlewares and\n    translates between mod_python and Django requests/responses.\n\n    \"\"\"\n    from mod_python import apache\n\n    req.get_full_path = lambda: req.unparsed_uri\n    is_ajax = req.headers_in.get('X-Requested-With', '') == 'XMLHttpRequest'\n    req.is_ajax = lambda: is_ajax\n    req.COOKIES = _get_cookie_dict(req)\n\n    for mware in MODPYTHON_MIDDLEWARE + [ModPythonAuthorizationMiddleware]:\n        response = mware().process_request(req)\n\n    try:\n        if response:\n            if 'Location' in response:\n                req.headers_out['Location'] = response['Location']\n            return response.status_code\n        else:\n            return apache.OK\n    finally:\n        # ensure we don't leak database connections. it's inefficient, yes, but\n        # that's the price you pay for authorizing access to your other crap\n        connection.close()\n\n\ndef _get_cookie_dict(req):\n    if 'Cookie' in req.headers_in:\n        cookie = cookies.SimpleCookie()\n        cookie.load(str(req.headers_in['Cookie']))\n        return dict((key, c.value) for key, c in cookie.items())\n    else:\n        return {}\n\n\n#\n# module initializations\n#\n# we try to filter out stupid warnings from third party libraries that end up\n# in the apache logs. it won't help on first invocation though,\n# since the errors are in mod_python itself, and mod_python is used to load\n# this module.\n#\nwarnings.filterwarnings(\"ignore\", category=DeprecationWarning)\nbootstrap_django()\n\nloginit()\n_logger = logging.getLogger(__name__)\n"
  },
  {
    "path": "python/nav/web/navlets/__init__.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Navlets - the NAV version of portlets\n\nTo use create a Navlet do the following:\n- create a module in nav.web.navlets\n- create a class in the module that inherits Navlet\n  - add at least title and description\n  - override at least the 'get_template_basename' method\n- add the modulestring to settings.py\n  - nav.web.navlets.<module>.<class>\n- create a template for at least the view mode\n  - it must be named <result_from_get_template_basename>_view.html\n\nContext:\n- context is added by overriding 'get_context_data'\n  - remember to call super\n  - remember to return the new context\n\nIf you want the navlet to have prefereneces:\n- set class attribute is_editable to True in your class\n- create a template for the edit mode that submits a form with the preferences\n  - This form will be submitted by javascript, see below\n- create at least a post method for storing the preferences\n- the preferences are available as navlet.preferences in the template\n\nTemplates\n- A form in editmode will be submitted automatically by javascript. Make sure\n  to return a HttpResponse from the post method. This is done to\n  allow reloading only the navlet to display the changes after the post\n\n\"\"\"\n\nimport logging\nimport json\nfrom datetime import datetime\nfrom operator import attrgetter\nfrom typing import Optional\nfrom urllib.parse import urlencode, urlparse, urlunparse, parse_qs\n\nfrom django.conf import settings\nfrom django.http import HttpResponse, JsonResponse\nfrom django.shortcuts import render, get_object_or_404\nfrom django.urls import reverse\nfrom django.views.decorators.http import require_GET, require_POST\nfrom django.views.generic.base import TemplateView\nfrom django_htmx.http import trigger_client_event\n\nfrom nav.models.profiles import AccountNavlet, AccountDashboard\nfrom nav.models.manage import Sensor\nfrom nav.web.auth.sudo import get_sudoer\nfrom nav.web.auth.utils import get_account\nfrom nav.web.modals import render_modal, render_modal_alert, resolve_modal\nfrom nav.web.utils import require_param\nfrom nav.web.webfront import find_dashboard\n\nNAVLET_MODE_VIEW = 'VIEW'\nNAVLET_MODE_EDIT = 'EDIT'\n\nNAVLET_COLUMN_1 = 1\nNAVLET_COLUMN_2 = 2\n\nREFRESH_INTERVAL = 'refresh_interval'\n# These class members will be automatically added to preferences if they exist\nDEFAULT_PREFERENCES = [REFRESH_INTERVAL]\nERROR_WIDGET = 'nav.web.navlets.error.ErrorWidget'\n\n_logger = logging.getLogger(__name__)\n\n\nclass Navlet(TemplateView):\n    \"\"\"Base class for navlets\"\"\"\n\n    title = 'Navlet'\n    description = 'No description'\n    is_editable = False\n    is_title_editable = False\n    can_be_added = True\n    is_deprecated = False\n    can_edit = False  # Set to true if user can edit this instance\n\n    # Set to true if we are to reload only an image. This is useful for\n    # loading charts that may take some time to display, thus making the\n    # widget 'jump'. The image in question needs the attribute\n    # 'data-image-reload'\n    image_reload = False\n\n    # If ajax_reload is True, the whole widget will not be reloaded on refresh.\n    # Instead it will receive a 'refresh' event, which you can listen to\n    # to and do your own reload.\n    ajax_reload = False\n    preferences = {}  # See DEFAULT PREFERENCES for adding default values here\n    navlet_id = None  # deprecated, use account_navlet for the db object\n    account_navlet = None  # The database object\n    highlight = None\n\n    @property\n    def mode(self):\n        \"\"\"Fetch the mode of this request\"\"\"\n        return self.request.GET.get('mode', NAVLET_MODE_VIEW)\n\n    def get_template_basename(self):\n        \"\"\"Should return the base template name\n\n        The full template name will be based on this on the following format:\n        <template_base_name>_(edit|view).html\n        \"\"\"\n        raise NotImplementedError\n\n    def get_template_names(self, override_mode: Optional[str] = None):\n        \"\"\"\n        Get template name based on navlet mode.\n\n        :param override_mode: Optional\\; if provided, overrides the mode (VIEW or EDIT)\n            sent in the request. If None, uses self.mode. Used to enable the navlet to\n            return the correct template in error situations.\n        :return: The template name for the specified mode.\n        \"\"\"\n        template_mode = override_mode or self.mode\n        if template_mode == NAVLET_MODE_VIEW:\n            return 'navlets/%s_view.html' % self.get_template_basename()\n        elif template_mode == NAVLET_MODE_EDIT:\n            return 'navlets/%s_edit.html' % self.get_template_basename()\n        else:\n            return 'navlets/%s_view.html' % self.get_template_basename()\n\n    def get_context_data(self, override_mode=None, **kwargs):\n        template_mode = override_mode or self.mode\n        context = super(Navlet, self).get_context_data(**kwargs)\n        context['navlet'] = self\n        if template_mode == NAVLET_MODE_VIEW:\n            context = self.get_context_data_view(context)\n        elif template_mode == NAVLET_MODE_EDIT:\n            context = self.get_context_data_edit(context)\n        return context\n\n    def get_context_data_view(self, context):\n        \"\"\"Get context for the view mode\"\"\"\n        return context\n\n    def get_context_data_edit(self, context):\n        \"\"\"Get context for the edit mode\"\"\"\n        return context\n\n    def post(self, request, *_, **kwargs):\n        \"\"\"Save preferences\n\n        Make sure you're not overriding stuff with the form\n        \"\"\"\n        form = kwargs.pop('form', None)\n        if not form:\n            return HttpResponse('No form supplied', status=400)\n\n        if form.is_valid():\n            self.account_navlet.preferences.update(form.cleaned_data)\n            self.account_navlet.save()\n            return self.get(request=request)\n        else:\n            return self.handle_error_response(request, form=form, **kwargs)\n\n    def handle_error_response(self, request, form, **kwargs):\n        \"\"\"Render error response for invalid form submissions\"\"\"\n        context = self.get_context_data(\n            override_mode=NAVLET_MODE_EDIT, form=form, **kwargs\n        )\n        return render(\n            request, self.get_template_names(override_mode=NAVLET_MODE_EDIT), context\n        )\n\n    @classmethod\n    def get_class(cls):\n        \"\"\"This string is used to identify the Widget\"\"\"\n        return \"%s.%s\" % (cls.__module__, cls.__name__)\n\n    @staticmethod\n    def add_bust_param_to_url(url: str) -> str:\n        \"\"\"\n        Add a cache-busting parameter to a URL\n\n        Used to ensure that images are not cached by the browser\n\n        :param url: The URL to add the parameter to\n        :return: The URL with the cache-busting parameter added\n        \"\"\"\n        timestamp = int(datetime.now().timestamp())\n        parsed = urlparse(url)\n        existing_params = parse_qs(parsed.query, keep_blank_values=True)\n        existing_params['bust'] = [str(timestamp)]\n        new_query = urlencode(existing_params, doseq=True)\n        return urlunparse(parsed._replace(query=new_query))\n\n\ndef list_navlets():\n    \"\"\"All Navlets that should be listed to the user\"\"\"\n\n    def should_be_listed(navlet):\n        \"\"\"\n        Returns if this widget should be listed to the user as a potential\n        widget\n        \"\"\"\n        return navlet.can_be_added and not navlet.is_deprecated\n\n    navlets = [cls for cls in get_navlet_classes() if should_be_listed(cls)]\n    return sorted(navlets, key=attrgetter('title'))\n\n\ndef get_navlet_classes():\n    \"\"\"Gets all installed navlet classes\"\"\"\n    navlets = []\n    for navletmodule in settings.NAVLETS:\n        cls = get_navlet_from_name(navletmodule)\n        if cls:\n            navlets.append(cls)\n    return navlets\n\n\ndef get_navlet_from_name(navletmodule):\n    \"\"\"Returns the correct class based on the modulestring\"\"\"\n    lastmod, clsname = navletmodule.split('.')[-2:]\n    try:\n        module = __import__(navletmodule[: navletmodule.rfind('.')], fromlist=[lastmod])\n        cls = getattr(module, clsname)\n    except (AttributeError, ImportError):\n        _logger.error('Could not import %s', navletmodule)\n    else:\n        return cls\n\n\ndef get_user_navlets(request, dashboard_id=None):\n    \"\"\"Gets all navlets that this user subscribes to for a given dashboard\"\"\"\n    account = get_account(request)\n    dashboard = find_dashboard(account, dashboard_id)\n    usernavlets = dashboard.widgets.all()\n\n    navlets = []\n    for usernavlet in usernavlets:\n        navlets.append(create_navlet_object(usernavlet))\n    return JsonResponse({\"items\": navlets})\n\n\ndef create_navlet_object(usernavlet):\n    \"\"\"Create a structure suitable for json transfer of a navlet\"\"\"\n    url = reverse('get-user-navlet', kwargs={'navlet_id': usernavlet.id})\n    navlet_module = usernavlet.navlet\n    navlet_class = get_navlet_from_name(navlet_module)\n    if not navlet_class:\n        # Happens if widget is removed from NAV code\n        navlet_module = ERROR_WIDGET\n        navlet_class = get_navlet_from_name(navlet_module)\n    highlight = navlet_class.highlight\n    is_title_editable = navlet_class.is_title_editable\n    image_reload = navlet_class.image_reload\n    ajax_reload = navlet_class.ajax_reload\n\n    return {\n        'id': usernavlet.id,\n        'url': url,\n        'column': usernavlet.column,\n        'preferences': usernavlet.preferences,\n        'highlight': highlight,\n        'navlet_class': navlet_module.split('.')[-1],\n        'image_reload': image_reload,\n        'ajax_reload': ajax_reload,\n        'is_title_editable': is_title_editable,\n    }\n\n\ndef dispatcher(request, navlet_id):\n    \"\"\"Dispatch the correct navlet based on navlet_id\n\n    The as_view method takes any attribute and adds it to the instance\n    as long as it is defined on the Navlet class\n    \"\"\"\n    current_account = get_account(request)\n\n    try:\n        account_navlet = AccountNavlet.objects.get(pk=navlet_id)\n    except AccountNavlet.DoesNotExist as error:\n        _logger.error(\n            '%s tried to fetch widget with id %s: %s', current_account, navlet_id, error\n        )\n        if request.htmx:\n            return _handle_htmx_error_response(\n                request, None, 'This widget does not exist'\n            )\n        return HttpResponse(status=404)\n\n    dashboard = account_navlet.dashboard\n    owner = account_navlet.account\n    can_access = dashboard.can_access(current_account)\n\n    if not can_access:\n        _logger.error(\n            '%s tried to fetch private widget with id %s owned by %s',\n            current_account,\n            navlet_id,\n            owner,\n        )\n        if request.htmx:\n            return _handle_htmx_error_response(\n                request, account_navlet, 'Not authorized to view this widget'\n            )\n        return HttpResponse(status=403)\n\n    cls = get_navlet_from_name(account_navlet.navlet)\n    if not cls:\n        cls = get_navlet_from_name(ERROR_WIDGET)\n\n    can_edit = dashboard.can_edit(current_account)\n    view = cls.as_view(\n        preferences=account_navlet.preferences,\n        navlet_id=navlet_id,\n        account_navlet=account_navlet,\n        can_edit=can_edit,\n    )\n    return view(request)\n\n\ndef _handle_htmx_error_response(\n    request, account_navlet: Optional[AccountNavlet], error_message: str\n):\n    \"\"\"Render error response for htmx dispatcher requests\"\"\"\n    navlet = None\n    if account_navlet:\n        cls = get_navlet_from_name(account_navlet.navlet)\n        navlet = cls(request=request)\n        navlet.navlet_id = account_navlet.id\n        navlet.account_navlet = account_navlet\n\n    return render(\n        request,\n        'navlets/base.html',\n        {\n            'navlet': navlet,\n            'error_message': error_message,\n        },\n    )\n\n\n@require_POST\ndef add_user_navlet(request, dashboard_id=None):\n    \"\"\"Add a navlet subscription to this user\"\"\"\n    navlet_class = request.POST.get('navlet')\n    if not navlet_class:\n        return HttpResponse(status=400)\n\n    account = get_account(request)\n    dashboard = find_dashboard(account, dashboard_id=dashboard_id)\n\n    if not can_modify_navlet(account, request):\n        return HttpResponse(status=403)\n\n    navlet = add_navlet(account, navlet_class, dashboard=dashboard)\n    navlet_object = create_navlet_object(navlet)\n    response = render(\n        request,\n        'navlets/_add_navlet_response.html',\n        context={'navlet': navlet_object},\n    )\n    return trigger_client_event(\n        response,\n        name=\"nav.navlet.added\",\n        params={\"navlet_id\": navlet.id},\n        after='settle',\n    )\n\n\ndef add_navlet_modal(request, dashboard_id):\n    \"\"\"Render modal with list of available navlets\"\"\"\n\n    return render_modal(\n        request,\n        'navlets/_add_navlet_modal.html',\n        context={\n            'dashboard_id': dashboard_id,\n            'navlets': list_navlets(),\n        },\n        modal_id='navlet-list',\n    )\n\n\ndef add_navlet(account, navlet, preferences=None, dashboard=None):\n    \"\"\"Create new accountnavlet based on request data\"\"\"\n    if preferences is None:\n        preferences = {}\n    if dashboard is None:\n        dashboard = account.default_dashboard\n\n    accountnavlet = AccountNavlet(account=account, navlet=navlet, dashboard=dashboard)\n    accountnavlet.column, accountnavlet.order = find_new_placement()\n\n    accountnavlet.preferences = (\n        get_default_preferences(get_navlet_from_name(navlet)) or {}\n    )\n    accountnavlet.preferences.update(preferences)\n\n    accountnavlet.save()\n    return accountnavlet\n\n\ndef get_default_preferences(navlet):\n    \"\"\"Check if navlet has predetermined preferences that must be applied\"\"\"\n    preferences = {}\n    for preference in DEFAULT_PREFERENCES:\n        if hasattr(navlet, preference):\n            preferences[preference] = getattr(navlet, preference)\n\n    if preferences:\n        return preferences\n\n\ndef find_new_placement():\n    \"\"\"Determines the best placement for a new account navlet\n\n    This is now defined to be at the top of the first column as this is the\n    easiest way for the user to find the newly attached widget.\n\n    :return: A tuple of column (integer, 1-indexed) and order (integer,\n             0-indexed)\n    \"\"\"\n    return 1, 0\n\n\ndef can_modify_navlet(account, request):\n    \"\"\"Determine if this account can modify navlets\"\"\"\n    return not (account.is_anonymous and not get_sudoer(request))\n\n\ndef modify_navlet(func, account, request, error_message):\n    \"\"\"Modify the navlet using func\"\"\"\n    if can_modify_navlet(account, request):\n        try:\n            func(account, request)\n        except AccountNavlet.DoesNotExist:\n            return HttpResponse(content=error_message, status=500)\n        else:\n            return HttpResponse()\n    else:\n        return HttpResponse(status=403)\n\n\n@require_GET\ndef remove_user_navlet_modal(request, navlet_id):\n    \"\"\"Render modal asking user to confirm removal of a navlet\"\"\"\n    return render_modal(\n        request,\n        'navlets/_remove_modal_form.html',\n        {'navlet_id': navlet_id},\n        _get_remove_modal_id(navlet_id),\n    )\n\n\n@require_POST\ndef remove_user_navlet(request):\n    \"\"\"Remove a navlet-subscription from this user\"\"\"\n    if 'navletid' not in request.POST:\n        return HttpResponse(status=400)\n\n    account = get_account(request)\n    navlet_id = int(request.POST.get('navletid'))\n    modal_id = _get_remove_modal_id(navlet_id)\n\n    if not can_modify_navlet(account, request):\n        return render_modal_alert(\n            request, 'You are not permitted to remove this widget', modal_id\n        )\n\n    try:\n        account_navlet = AccountNavlet.objects.get(pk=navlet_id, account=account)\n        dashboard = account_navlet.dashboard\n        account_navlet.delete()\n\n        navlet_count = AccountNavlet.objects.filter(dashboard=dashboard).count()\n        response = resolve_modal(\n            request,\n            'navlets/_remove_navlet_response.html',\n            context={'navlet_count': navlet_count},\n            modal_id=modal_id,\n        )\n\n        return trigger_client_event(\n            response,\n            name=\"nav.navlet.removed\",\n            params={\"navlet_id\": navlet_id},\n            after='settle',\n        )\n    except AccountNavlet.DoesNotExist:\n        return render_modal_alert(\n            request, 'This widget no longer exists. Try refreshing the page.', modal_id\n        )\n\n\ndef _get_remove_modal_id(navlet_id):\n    \"\"\"Get the modal id for the remove navlet modal\"\"\"\n    return \"remove-navlet-modal-\" + str(navlet_id)\n\n\ndef save_navlet_order(request):\n    \"\"\"Save the order of the navlets after a sort\"\"\"\n    if request.method == 'POST':\n        account = get_account(request)\n        return modify_navlet(save_order, account, request, \"Error saving order\")\n\n    return HttpResponse(status=400)\n\n\ndef save_order(account, request):\n    \"\"\"Update navlets with new placement data\"\"\"\n    columns = json.loads(request.body.decode('utf-8'))\n    for index, column in enumerate(columns):\n        index += 1\n        for key, value in column.items():\n            update_navlet(account, key, value, index)\n\n\ndef update_navlet(account, key, value, column):\n    \"\"\"Save the column and order of an account navlet\"\"\"\n    key = int(key)\n    navlet = AccountNavlet.objects.get(account=account, pk=key)\n    navlet.order = value\n    navlet.column = column\n    navlet.save()\n\n\ndef add_user_navlet_graph(request):\n    \"\"\"Add a Graph Widget with url set to user dashboard\"\"\"\n    if request.method == 'POST':\n        url = request.POST.get('url')\n        target = request.POST.get('target')\n        if url:\n            account = get_account(request)\n            add_navlet(\n                account,\n                'nav.web.navlets.graph.GraphWidget',\n                {'url': url, 'target': target},\n            )\n            return HttpResponse(status=200)\n\n    return HttpResponse(status=400)\n\n\nALERT_TYPES = {\n    Sensor.ALERT_TYPE_WARNING: 'warning',\n    Sensor.ALERT_TYPE_ALERT: 'alert',\n}\n\n\ndef add_user_navlet_sensor(request):\n    \"\"\"Add a sensor widget with sensor id set\"\"\"\n    if request.method == 'POST':\n        sensor = get_object_or_404(Sensor, pk=int(request.GET.get('sensor_id')))\n        if sensor.unit_of_measurement == sensor.UNIT_TRUTHVALUE:\n            navlet = 'nav.web.navlets.alert.AlertWidget'\n            preferences = {\n                'sensor': sensor.pk,\n                'title': sensor.netbox.sysname,\n                'on_message': sensor.on_message,\n                'off_message': sensor.off_message,\n                'on_state': sensor.on_state,\n                'alert_type': ALERT_TYPES.get(\n                    sensor.alert_type, ALERT_TYPES[Sensor.ALERT_TYPE_WARNING]\n                ),\n            }\n        else:\n            navlet = 'nav.web.navlets.sensor.SensorWidget'\n            preferences = {'sensor_id': sensor.pk, 'title': sensor.netbox.sysname}\n        account = get_account(request)\n        add_navlet(account, navlet, preferences)\n        return HttpResponse(status=200)\n\n    return HttpResponse(status=400)\n\n\ndef set_navlet_preferences(request):\n    \"\"\"Set preferences for a NAvlet\"\"\"\n    if request.method == 'POST':\n        try:\n            account = get_account(request)\n            preferences = json.loads(request.POST.get('preferences'))\n            navletid = request.POST.get('id')\n            navlet = AccountNavlet.objects.get(pk=navletid, account=account)\n        except AccountNavlet.DoesNotExist:\n            return HttpResponse(status=400)\n        else:\n            for key, value in preferences.items():\n                navlet.preferences[key] = value\n            navlet.save()\n            return HttpResponse()\n\n    return HttpResponse(status=400)\n\n\n@require_POST\n@require_param('dashboard_id')\ndef set_navlet_dashboard(request, navlet_id):\n    \"\"\"Set the dashboard the navlet should appear in\"\"\"\n    account = get_account(request)\n    navlet = get_object_or_404(AccountNavlet, account=account, pk=navlet_id)\n    dashboard = get_object_or_404(\n        AccountDashboard, account=account, pk=request.POST.get('dashboard_id')\n    )\n    navlet.dashboard = dashboard\n    navlet.save()\n\n    return HttpResponse()\n"
  },
  {
    "path": "python/nav/web/navlets/alert.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing SensorWidget\"\"\"\n\nfrom nav.metrics.graphs import get_simple_graph_url\nfrom nav.models.manage import Sensor\nfrom . import Navlet, NAVLET_MODE_EDIT\nfrom .forms import AlertWidgetForm\n\n\nclass AlertWidget(Navlet):\n    \"\"\"Widget for displaying a binary on/off widget\"\"\"\n\n    title = 'Alert'\n    is_editable = True\n    is_title_editable = True\n    ajax_reload = True\n    description = (\n        'Displays the state of a metric, for instance if '\n        'a security system is on or off.'\n    )\n    refresh_interval = 30000  # 30 seconds\n\n    def get_template_basename(self):\n        return 'alert'\n\n    def get_context_data(self, *args, **kwargs):\n        context = super(AlertWidget, self).get_context_data(**kwargs)\n        self.title = self.preferences.get('title', 'Alert')\n        metric = self.preferences.get('metric')\n\n        try:\n            sensorid = int(self.preferences.get('sensor', 0))\n        except ValueError:\n            sensorid = None\n\n        if not metric and sensorid:\n            metric = Sensor.objects.get(pk=sensorid).get_metric_name()\n            self.preferences['metric'] = metric\n\n        if self.mode == NAVLET_MODE_EDIT:\n            if metric:\n                form = AlertWidgetForm(self.preferences)\n            else:\n                form = AlertWidgetForm()\n            context['form'] = form\n        else:\n            if not metric:\n                return context\n            context['data_url'] = get_simple_graph_url(\n                metric, time_frame='10minutes', format='json'\n            )\n            context.update(self.preferences)\n        return context\n\n    def post(self, request, **kwargs):\n        \"\"\"Save preferences\"\"\"\n        form = AlertWidgetForm(request.POST)\n        return super(AlertWidget, self).post(request, form=form)\n"
  },
  {
    "path": "python/nav/web/navlets/env_rack.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing EnvironmentRackWidget\"\"\"\n\nfrom django import forms\n\nfrom nav.models.rack import Rack\nfrom . import Navlet\n\n\nclass RackSearchForm(forms.Form):\n    \"\"\"Form for searching for a rack\"\"\"\n\n    rack = forms.ModelChoiceField(\n        queryset=Rack.objects.all().order_by('room', 'rackname')\n    )\n\n    def clean_rack(self):\n        \"\"\"clean_rack makes sure the rack refers to the primary key\n\n        This is done because the rack is stored as a preference, and thus cannot\n        be a model instace\n        \"\"\"\n        rack = self.cleaned_data.get('rack')\n        if rack:\n            return rack.pk\n        return rack\n\n\nclass EnvironmentRackWidget(Navlet):\n    \"\"\"Widget for displaying an environment rack\"\"\"\n\n    title = 'Environment rack'\n    description = 'Displays a selected rack of environment sensors from a specific room'\n    refresh_interval = 60000  # 60 seconds\n    is_editable = True\n\n    def get_template_basename(self):\n        return 'envrack'\n\n    def get_context_data_view(self, context):\n        context['rackid'] = self.preferences.get('rack')\n        context['refresh_interval'] = self.preferences.get(\n            'refresh_interval', self.refresh_interval\n        )\n        return context\n\n    def get_context_data_edit(self, context):\n        try:\n            rack = Rack.objects.get(pk=self.preferences.get('rack'))\n            form = RackSearchForm(initial={'rack': rack})\n        except (Rack.DoesNotExist, ValueError):\n            form = RackSearchForm()\n\n        context['form'] = form\n        return context\n\n    def post(self, request, **kwargs):\n        \"\"\"Save preferences\"\"\"\n        form = RackSearchForm(request.POST)\n        return super(EnvironmentRackWidget, self).post(request, form=form)\n"
  },
  {
    "path": "python/nav/web/navlets/error.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Replacement widget for when we can not find the widget class\"\"\"\n\nfrom . import Navlet\n\n\nclass ErrorWidget(Navlet):\n    title = \"Error\"\n    description = \"Jau\"\n    can_be_added = False\n\n    def get_template_basename(self):\n        return \"error\"\n"
  },
  {
    "path": "python/nav/web/navlets/feedreader.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Feed reader widget\"\"\"\n\nimport feedparser\nfrom nav.web.auth.utils import get_account\nfrom nav.models.profiles import AccountNavlet\nfrom nav.web.navlets import Navlet, NAVLET_MODE_VIEW\n\n\nclass FeedReaderNavlet(Navlet):\n    \"\"\"Widget for displaying feeds\"\"\"\n\n    title = \"FeedReader\"\n    description = \"Reads an RSS or ATOM feed\"\n    is_editable = True\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n\n    def get_template_basename(self):\n        return \"feedreader\"\n\n    def get_context_data(self, **kwargs):\n        context = super(FeedReaderNavlet, self).get_context_data(**kwargs)\n        blogurl = None\n        feed = None\n        maxposts = 5\n\n        navlet = AccountNavlet.objects.get(pk=self.navlet_id)\n        if navlet.preferences:\n            blogurl = navlet.preferences.get('blogurl')\n            maxposts = int(navlet.preferences.get('maxposts', maxposts))\n\n        if self.mode == NAVLET_MODE_VIEW and blogurl:\n            feed = self._get_feed(blogurl, maxposts)\n\n        context.update({'feed': feed, 'blogurl': blogurl, 'maxposts': maxposts})\n        return context\n\n    @staticmethod\n    def _get_feed(feedurl, maxposts):\n        feed = feedparser.parse(feedurl)\n        feed['maxentries'] = feed['entries'][:maxposts]\n        return feed\n\n    def post(self, request):\n        \"\"\"Receive blogurl and save it in preferences\n\n        We fetch the account aswell to make sure that people that are not the\n        owner but has the id cannot modify the navlet.\n        \"\"\"\n        account = get_account(request)\n        blogurl = request.POST.get('blogurl')\n        maxposts = request.POST.get('maxposts')\n\n        account_navlet = AccountNavlet.objects.get(pk=self.navlet_id, account=account)\n        if not account_navlet.preferences:\n            account_navlet.preferences = {'blogurl': blogurl, 'maxposts': maxposts}\n        else:\n            account_navlet.preferences['blogurl'] = blogurl\n            account_navlet.preferences['maxposts'] = maxposts\n        account_navlet.save()\n\n        return self.get(request)\n"
  },
  {
    "path": "python/nav/web/navlets/forms.py",
    "content": "\"\"\"Module containing some of the forms used in widgets\"\"\"\n\nfrom django import forms\n\nfrom nav.models.manage import Sensor, Room\n\nfrom nav.web.crispyforms import set_flat_form_attributes, FlatFieldset\n\n\nclass AlertWidgetForm(forms.Form):\n    \"\"\"Form for the alert widget\"\"\"\n\n    on_message = forms.CharField(\n        label='Message when alert is active', initial='The alert is active'\n    )\n    off_message = forms.CharField(\n        label='Message when alert is inactive (ok)', initial='No alert'\n    )\n    sensor = forms.ChoiceField(choices=(), required=False)\n    metric = forms.CharField(\n        label='Metric path to fetch value from',\n        required=False,\n        widget=forms.TextInput(attrs={'placeholder': 'nav.metric.path.value'}),\n    )\n    on_state = forms.ChoiceField(\n        label='When is the alert considered \"on\"',\n        choices=(('1', 'When the value is 1'), ('0', 'When the value is 0 (zero)')),\n    )\n    alert_type = forms.ChoiceField(\n        label='What to display in \"on\" state',\n        choices=(('alert', 'A red alert'), ('warning', 'An orange warning')),\n    )\n\n    def __init__(self, *args, **kwargs):\n        \"\"\"Init\"\"\"\n        super(AlertWidgetForm, self).__init__(*args, **kwargs)\n        self.fields['sensor'].choices = [('', '----------')] + [\n            (s.pk, str(s))\n            for s in Sensor.objects.filter(unit_of_measurement='boolean').order_by(\n                'human_readable'\n            )\n        ]\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['on_message'],\n                self['off_message'],\n                FlatFieldset(\n                    legend='Choose sensor or fill in metric',\n                    fields=[self['sensor'], self['metric']],\n                ),\n                self['on_state'],\n                self['alert_type'],\n            ]\n        )\n\n    def clean(self):\n        \"\"\"Make sure either metric name or sensor is specified\"\"\"\n        cleaned_data = super(AlertWidgetForm, self).clean()\n        if not (cleaned_data.get('metric') or cleaned_data.get('sensor')):\n            raise forms.ValidationError(\n                'Need either metric name or a sensor', code='metric-or-sensor-required'\n            )\n        return cleaned_data\n\n\nclass SensorForm(forms.Form):\n    \"\"\"Form for choosing to show graph or not for a sensor widget\"\"\"\n\n    show_graph = forms.BooleanField(initial=True, required=False)\n\n\nclass PduWidgetForm(forms.Form):\n    \"\"\"Form for choosing a room\"\"\"\n\n    room_id = forms.ChoiceField(choices=(), label='Room')\n    limits = forms.IntegerField(label='Max allowed load in amperes, per bank/circuit')\n\n    def __init__(self, *args, **kwargs):\n        super(PduWidgetForm, self).__init__(*args, **kwargs)\n\n        self.fields['room_id'].choices = [('', '----------')] + [\n            (r.pk, str(r))\n            for r in Room.objects.filter(\n                netboxes__category='POWER',\n                netboxes__sensors__internal_name__startswith='rPDULoadStatusLoad',\n            ).distinct('id')\n        ]\n"
  },
  {
    "path": "python/nav/web/navlets/gettingstarted.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers for the getting started widget\"\"\"\n\nfrom . import Navlet\n\n\nclass GettingStartedWidget(Navlet):\n    \"\"\"Getting Started widget\"\"\"\n\n    title = 'Getting started with NAV'\n    description = 'Displays a tour and information for new users'\n\n    def get_template_basename(self):\n        return 'getting_started'\n"
  },
  {
    "path": "python/nav/web/navlets/graph.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Widget for displaying a chart\"\"\"\n\nfrom urllib.parse import urlparse, parse_qs\nfrom django import forms\nfrom . import Navlet, REFRESH_INTERVAL\n\n\nclass GraphEditForm(forms.Form):\n    \"\"\"Form for editing a graph widget\"\"\"\n\n    url = forms.CharField(label='URL to image')\n    target = forms.CharField(required=False, label='Target URL when clicked')\n    refresh_interval = forms.IntegerField(\n        min_value=10, label='Refresh interval in seconds (requires reload of page)'\n    )\n    show_controls = forms.BooleanField(\n        required=False, label='Show time interval controls'\n    )\n\n    def clean_refresh_interval(self):\n        \"\"\"Convert refresh interval\"\"\"\n        refresh_interval = self.cleaned_data.get('refresh_interval', 600)\n        refresh_interval *= 1000\n        return refresh_interval\n\n\nclass GraphWidget(Navlet):\n    \"\"\"Widget for displaying a chart (formerly known as graph)\"\"\"\n\n    title = 'Chart'\n    description = 'Displays a chart from the Graphite backend'\n    is_editable = True\n    is_title_editable = True\n    refresh_interval = 1000 * 60 * 10\n    image_reload = True\n\n    def get_template_basename(self):\n        return 'graph'\n\n    def get_context_data_view(self, context):\n        self.title = self.get_title()\n        show_controls = self.preferences.get('show_controls')\n        context['hide_buttons'] = 'false' if show_controls else 'true'\n        url = self.preferences.get('url')\n        if url:\n            context['graph_url'] = self.add_bust_param_to_url(url)\n        return context\n\n    def get_context_data_edit(self, context):\n        if self.preferences.get('url'):\n            self.preferences[REFRESH_INTERVAL] = (\n                self.preferences[REFRESH_INTERVAL] / 1000\n            )\n            context['form'] = GraphEditForm(self.preferences)\n        else:\n            context['form'] = GraphEditForm(\n                initial={REFRESH_INTERVAL: GraphWidget.refresh_interval / 1000}\n            )\n        return context\n\n    def post(self, request):\n        \"\"\"Display form for adding an url to a chart\"\"\"\n        form = GraphEditForm(request.POST)\n        return super(GraphWidget, self).post(request, form=form)\n\n    def get_title(self):\n        \"\"\"Fetch the title for this widget\"\"\"\n        if 'title' in self.preferences:\n            return self.preferences['title']\n\n        url_title = self.get_title_from_url(self.preferences.get('url'))\n        if url_title:\n            return url_title\n\n        return GraphWidget.title\n\n    @staticmethod\n    def get_title_from_url(url):\n        \"\"\"Get title from url\"\"\"\n        if not url:\n            return\n        parsed_url = urlparse(url)\n        query = parse_qs(parsed_url.query)\n        if 'title' in query:\n            return query['title'][0]\n"
  },
  {
    "path": "python/nav/web/navlets/linklist.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nimport math\n\nfrom nav.config import read_flat_config\nfrom nav.web.navlets import Navlet\nfrom nav.web.webfront import NAV_LINKS_PATH\n\n\nclass LinkListNavlet(Navlet):\n    title = \"Links\"\n    description = \"Displays a list of links from the admins\"\n\n    def get_context_data(self, **kwargs):\n        context = super(LinkListNavlet, self).get_context_data(**kwargs)\n\n        nav_links = read_flat_config(NAV_LINKS_PATH)\n        context['nav_links'] = nav_links\n        context['half'] = math.ceil(len(nav_links) / 2.0)\n        return context\n\n    def get_template_basename(self):\n        return \"linklist\"\n"
  },
  {
    "path": "python/nav/web/navlets/locationstatus.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing RoomStatus\"\"\"\n\nfrom datetime import datetime\nfrom itertools import groupby\nfrom operator import attrgetter\n\nfrom nav.models.event import AlertHistory, STATE_START, STATE_STATELESS\n\nfrom nav.web.navlets.roomstatus import RoomStatus\n\n\nclass LocationStatus(RoomStatus):\n    \"\"\"Widget displaying status for locations\"\"\"\n\n    title = 'Locations with active alerts'\n    description = 'Displays a list of locations with active alerts'\n    refresh_interval = 30000  # 30 seconds\n    is_title_editable = True\n\n    def get_template_basename(self):\n        return 'room_location_status'\n\n    def get_context_data_view(self, context):\n        context = super(LocationStatus, self).get_context_data_view(context)\n        assert 'results' in context\n\n        result_ids = [r.get('id') for r in context['results']]\n        alerts = (\n            AlertHistory.objects.filter(pk__in=result_ids)\n            .exclude(netbox__isnull=True)\n            .order_by('netbox__room')\n        )\n        locations = []\n        for location, alertlist in groupby(alerts, attrgetter('netbox.room.location')):\n            location.alerts = sorted(alertlist, key=attrgetter('start_time'))\n            for alert in location.alerts:\n                state = STATE_START if alert.end_time is not None else STATE_STATELESS\n                alert.sms_message = alert.messages.get(\n                    type='sms',\n                    language='en',\n                    state=state,\n                )\n            locations.append(location)\n\n        context['items'] = locations\n        context['last_update'] = datetime.now()\n        context['name'] = 'room'\n        context['name_plural'] = 'rooms'\n        context['history_route'] = 'devicehistory-view-location'\n        context['info_route'] = 'location-info'\n        return context\n"
  },
  {
    "path": "python/nav/web/navlets/machinetracker.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>\n#\n\"\"\"Machinetracker navlet\"\"\"\n\nfrom django.shortcuts import redirect\n\nfrom nav.util import IPRange\nfrom nav.django.utils import reverse_with_query as query\nfrom nav.web.navlets import Navlet\nfrom nav.macaddress import MacAddress\n\n\ndef is_ip_address(thing):\n    \"\"\"Checks if this is an ip-address valid for machinetracker\"\"\"\n    try:\n        IPRange.from_string(thing)\n    except ValueError:\n        return False\n    else:\n        return True\n\n\ndef is_mac_address(thing):\n    \"\"\"Checks if this is a mac address\"\"\"\n    try:\n        MacAddress(thing)\n    except ValueError:\n        return False\n    else:\n        return True\n\n\nclass MachineTrackerNavlet(Navlet):\n    \"\"\"Controller for machinetracker navlet\"\"\"\n\n    title = \"Machine Tracker\"\n    description = \"Searches in Machine Tracker\"\n\n    def get_template_basename(self):\n        return \"machinetracker\"\n\n    def post(self, request):\n        \"\"\"POST controller\"\"\"\n        return self.redirect_to_machinetracker(request)\n\n    @staticmethod\n    def redirect_to_machinetracker(request):\n        \"\"\"Redirects to machinetracker with given forminput\"\"\"\n        forminput = request.POST.get(\"from_ip\")\n        days = int(request.POST.get(\"days\", 7))\n        dns = request.POST.get(\"dns\", \"\")\n\n        if is_ip_address(forminput):\n            url = query(\"machinetracker-ip\", ip_range=forminput, days=days, dns=dns)\n        elif is_mac_address(forminput):\n            url = query(\"machinetracker-mac\", mac=forminput, days=days, dns=dns)\n        elif forminput:\n            url = query(\"machinetracker-netbios\", search=forminput, days=days)\n        else:\n            url = query(\"machinetracker\")\n\n        return redirect(url)\n"
  },
  {
    "path": "python/nav/web/navlets/messages.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom nav.web.navlets import Navlet\nfrom nav.web.webfront.utils import current_messages\n\n\nclass MessagesNavlet(Navlet):\n    title = 'Messages'\n    description = 'Displays messages given by NAV admins'\n    refresh_interval = 60 * 1000\n\n    def get_template_basename(self):\n        return 'messages'\n\n    def get_context_data(self, **kwargs):\n        context = super(MessagesNavlet, self).get_context_data(**kwargs)\n        context['current_messages'] = current_messages()\n\n        return context\n"
  },
  {
    "path": "python/nav/web/navlets/navblog.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Feed reader widget\"\"\"\n\nimport feedparser\nfrom nav.web.navlets import Navlet\n\n\nclass NavBlogNavlet(Navlet):\n    \"\"\"Widget for displaying feeds\"\"\"\n\n    title = \"NAV Blog\"\n    description = \"Displays entries from the NAV blog\"\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n    highlight = True\n\n    def get_template_basename(self):\n        return \"navblog\"\n\n    def get_context_data(self, **kwargs):\n        context = super(NavBlogNavlet, self).get_context_data(**kwargs)\n        blogurl = 'https://nav.uninett.no/blog/index.xml'\n        maxposts = 5\n\n        feed = feedparser.parse(blogurl)\n        feed['maxentries'] = feed['entries'][:maxposts]\n\n        context.update(\n            {\n                'feed': feed,\n            }\n        )\n        return context\n"
  },
  {
    "path": "python/nav/web/navlets/pdu.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing PDUWidget\"\"\"\n\nfrom django.urls import reverse\n\nfrom nav.models.manage import Room\nimport nav.natsort\nfrom . import Navlet\nfrom .forms import PduWidgetForm\n\n\nclass PduWidget(Navlet):\n    \"\"\"Widget for displaying pdu overview for a room\"\"\"\n\n    title = 'PDU load'\n    is_editable = True\n    is_title_editable = True\n    ajax_reload = True\n    description = 'Display PDU load for a room'\n    refresh_interval = 30000  # 30 seconds\n\n    def get_template_basename(self):\n        return 'pdu'\n\n    def get_context_data_edit(self, context):\n        roomid = self.preferences.get('room_id')\n        context['form'] = PduWidgetForm(self.preferences) if roomid else PduWidgetForm()\n        return context\n\n    def get_context_data_view(self, context):\n        roomid = self.preferences.get('room_id')\n\n        if not roomid:\n            return context\n\n        try:\n            room = Room.objects.get(pk=roomid)\n        except Room.DoesNotExist:\n            context[\"doesnotexist\"] = roomid\n            return context\n\n        pdus = (\n            room.netboxes.filter(category='POWER')\n            .filter(sensors__internal_name__startswith='rPDULoadStatusLoad')\n            .prefetch_related('sensors')\n            .distinct()\n        )\n        sorted_pdus = sorted(pdus, key=lambda x: nav.natsort.split(x.sysname))\n        metrics = [\n            s.get_metric_name()\n            for pdu in pdus\n            for s in pdu.sensors.filter(internal_name__startswith='rPDULoadStatusLoad')\n        ]\n        context['pdus'] = sorted_pdus\n        context['metrics'] = metrics\n        context['data_url'] = reverse('graphite-render')\n        context['room'] = room\n\n        return context\n\n    def post(self, request, **kwargs):\n        \"\"\"Save preferences\"\"\"\n        form = PduWidgetForm(request.POST)\n        return super(PduWidget, self).post(request, form=form)\n"
  },
  {
    "path": "python/nav/web/navlets/portadmin.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Contains the class for the PortAdmin navlet\"\"\"\n\nfrom nav.web.navlets import Navlet\nfrom nav.web.portadmin.forms import SearchForm\n\n\nclass PortadminNavlet(Navlet):\n    \"\"\"The PortAdmin navlet\"\"\"\n\n    title = 'Port Admin'\n    description = 'Searches in Port Admin'\n\n    def get_template_basename(self):\n        return \"portadmin\"\n\n    def get_context_data(self, **kwargs):\n        context = super(PortadminNavlet, self).get_context_data(**kwargs)\n        context['form'] = SearchForm()\n        return context\n"
  },
  {
    "path": "python/nav/web/navlets/report.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Report widget\"\"\"\n\nfrom django.http import HttpResponse, QueryDict\nfrom nav.models.profiles import AccountNavlet\nfrom nav.web.auth.utils import get_account\nfrom nav.web.report.views import CONFIG_DIR, make_report\nfrom nav.report.generator import ReportList\nfrom nav.config import list_config_files_from_dir\nfrom . import Navlet, NAVLET_MODE_EDIT, NAVLET_MODE_VIEW\n\n\nclass ReportWidget(Navlet):\n    \"\"\"Widget for displaying a report\"\"\"\n\n    title = \"Report\"\n    description = \"Shows a report\"\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n    is_editable = True\n\n    def get_template_basename(self):\n        return \"report\"\n\n    def get_context_data(self, **kwargs):\n        context = super(ReportWidget, self).get_context_data(**kwargs)\n        navlet = AccountNavlet.objects.get(pk=self.navlet_id)\n        report_id = navlet.preferences.get('report_id')\n        query_string = navlet.preferences.get('query_string')\n\n        if self.mode == NAVLET_MODE_EDIT:\n            report_list = ReportList(\n                list_config_files_from_dir(CONFIG_DIR)\n            ).get_report_list()\n\n            context['report_list'] = report_list\n            context['current_report_id'] = report_id\n            context['query_string'] = query_string\n        elif self.mode == NAVLET_MODE_VIEW:\n            full_context = make_report(\n                self.request,\n                report_id,\n                None,\n                QueryDict(query_string).copy(),\n                paginate=False,\n            )\n            if full_context:\n                report = full_context.get('report')\n                context['report'] = report\n                context['page'] = report.table.rows\n\n        return context\n\n    def post(self, request):\n        \"\"\"Save navlet options on post\"\"\"\n        try:\n            account = get_account(request)\n            navlet = AccountNavlet.objects.get(pk=self.navlet_id, account=account)\n        except AccountNavlet.DoesNotExist:\n            return HttpResponse(status=404)\n        else:\n            navlet.preferences['report_id'] = request.POST.get('report_id')\n            navlet.preferences['query_string'] = request.POST.get('query_string')\n            navlet.save()\n            return self.get(request)\n\n\ndef get_report_names():\n    \"\"\"Get all report names\"\"\"\n"
  },
  {
    "path": "python/nav/web/navlets/room_map.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Room map navlet\"\"\"\n\nfrom django.urls import reverse\n\nfrom nav.web.auth.utils import get_account\nfrom nav.web.navlets import Navlet\nfrom nav.web.info.room.views import RoomSearchForm\n\n\nclass RoomMapNavlet(Navlet):\n    \"\"\"View class for the room map navlet\"\"\"\n\n    title = 'Room map'\n    description = 'Display a map marking the location of rooms'\n\n    def get(self, request, *args, **kwargs):\n        user = get_account(request)\n        context = self.get_context_data(**kwargs)\n        context['can_edit_rooms'] = user.has_perm(\n            'web_access', reverse('seeddb-room-edit')\n        )\n        context['searchform'] = RoomSearchForm()\n        return self.render_to_response(context)\n\n    def get_template_basename(self):\n        return 'room_map'\n"
  },
  {
    "path": "python/nav/web/navlets/roomstatus.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing RoomStatus\"\"\"\n\nfrom datetime import datetime\nfrom itertools import groupby\nfrom operator import attrgetter\n\nfrom django import forms\n\nfrom nav.models.event import AlertHistory, STATE_START, STATE_STATELESS\n\nfrom nav.web.navlets.status2 import Status2Widget\n\n\nclass RoomStatus(Status2Widget):\n    \"\"\"Widget displaying status for rooms\"\"\"\n\n    title = 'Rooms with active alerts'\n    description = 'Displays a list of rooms with active alerts'\n    refresh_interval = 30000  # 30 seconds\n    is_title_editable = True\n\n    def get_template_basename(self):\n        return 'room_location_status'\n\n    def get_context_data_view(self, context):\n        context = super(RoomStatus, self).get_context_data_view(context)\n        assert 'results' in context\n\n        result_ids = [r.get('id') for r in context['results']]\n        alerts = (\n            AlertHistory.objects.filter(pk__in=result_ids)\n            .exclude(netbox__isnull=True)\n            .order_by('netbox__room')\n        )\n        rooms = []\n        for room, alertlist in groupby(alerts, attrgetter('netbox.room')):\n            room.alerts = sorted(alertlist, key=attrgetter('start_time'))\n            for alert in room.alerts:\n                state = STATE_START if alert.end_time is not None else STATE_STATELESS\n                alert.sms_message = alert.messages.get(\n                    type='sms', language='en', state=state\n                )\n            rooms.append(room)\n\n        context['items'] = rooms\n        context['last_update'] = datetime.now()\n        context['name'] = 'room'\n        context['name_plural'] = 'rooms'\n        context['history_route'] = 'devicehistory-view-room'\n        context['info_route'] = 'room-info'\n        return context\n\n    def get_context_data_edit(self, context):\n        context = super(RoomStatus, self).get_context_data_edit(context)\n        context['form'].fields['extra_columns'].widget = forms.MultipleHiddenInput()\n        return context\n"
  },
  {
    "path": "python/nav/web/navlets/sensor.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Widget for displaying a sensor\"\"\"\n\nfrom nav.models.manage import Sensor\nfrom . import Navlet, NAVLET_MODE_EDIT\nfrom .forms import SensorForm\n\n\nclass SensorWidget(Navlet):\n    \"\"\"Widget for displaying a sensor.\"\"\"\n\n    title = 'Sensor'\n    description = 'Displays a sensor'\n    is_editable = True\n    is_title_editable = True\n    can_be_added = False  # Can only be added from the sensors on the\n    # \"Environment sensors\" tab in room info\n\n    def get_template_basename(self):\n        return 'sensor'\n\n    def get_context_data(self, *args, **kwargs):\n        context = super(SensorWidget, self).get_context_data(*args, **kwargs)\n        try:\n            sensor = Sensor.objects.get(pk=self.preferences.get('sensor_id'))\n        except Sensor.DoesNotExist:\n            sensor = None\n\n        context['sensor'] = sensor\n\n        if self.mode == NAVLET_MODE_EDIT:\n            if 'show_graph' in self.preferences:\n                context['form'] = SensorForm(self.preferences)\n            else:\n                context['form'] = SensorForm()\n\n        self.title = self.preferences.get('title', SensorWidget.title)\n        return context\n\n    def post(self, request, **kwargs):\n        \"\"\"Save preferences\"\"\"\n        form = SensorForm(request.POST)\n        return super(SensorWidget, self).post(request, form=form)\n"
  },
  {
    "path": "python/nav/web/navlets/status2.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Status2 widget\"\"\"\n\nfrom datetime import datetime\nfrom operator import itemgetter\n\nfrom django.http import QueryDict\nfrom django.test.client import RequestFactory\nfrom django.utils.datastructures import MultiValueDictKeyError\nfrom django.utils.dateparse import parse_datetime\n\nfrom nav.models.profiles import Account\nfrom nav.models.manage import Netbox\nfrom nav.web.status2.forms import StatusWidgetForm\nfrom nav.web.api.v1.views import AlertHistoryViewSet\nfrom . import Navlet\n\n\nclass Status2Widget(Navlet):\n    \"\"\"Widget for displaying status\"\"\"\n\n    title = \"Status\"\n    description = \"Shows status for your ip-devices and services\"\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n    is_editable = True\n    is_title_editable = True\n\n    def get_template_basename(self):\n        return \"status2\"\n\n    def get_context_data_view(self, context):\n        self.title = self.preferences.get('title', self.title)\n        status_filter = self.preferences.get('status_filter')\n        results = self.do_query(status_filter)\n        self.add_formatted_time(results)\n        self.add_netbox(results)\n        context['extra_columns'] = self.find_extra_columns(status_filter)\n        context['results'] = sorted(results, key=itemgetter('start_time'), reverse=True)\n        context['last_updated'] = datetime.now()\n        return context\n\n    def get_context_data_edit(self, context):\n        self.title = self.preferences.get('title', self.title)\n        status_filter = self.preferences.get('status_filter')\n        if status_filter:\n            context['form'] = StatusWidgetForm(QueryDict(str(status_filter)))\n        else:\n            context['form'] = StatusWidgetForm()\n        context['interval'] = self.preferences['refresh_interval'] / 1000\n        return context\n\n    def do_query(self, query_string):\n        \"\"\"Queries for alerts given a query string\"\"\"\n        factory = RequestFactory()\n        view = AlertHistoryViewSet.as_view({'get': 'list'})\n        request = factory.get(\"?%s\" % query_string)\n        account = Account.objects.get(pk=Account.ADMIN_ACCOUNT)\n        # Fake request! This is safe\n        # We cannot know whether the user is sudo'ed...\n        # but since we operate as admin it is irrelevant\n        request.account = request.user = account\n        response = view(request)\n        return response.data.get('results')\n\n    def add_formatted_time(self, results):\n        \"\"\"Adds formatted time to all results\"\"\"\n        for result in results:\n            result['formatted_time'] = self.format_time(result['start_time'])\n\n    @staticmethod\n    def add_netbox(results):\n        \"\"\"Adds the netbox object to the result objects\"\"\"\n        for result in results:\n            try:\n                netbox = Netbox.objects.select_related('room', 'room__location').get(\n                    pk=int(result['netbox'])\n                )\n            except (Netbox.DoesNotExist, TypeError):\n                pass\n            else:\n                result['netbox_object'] = netbox\n\n    @staticmethod\n    def find_extra_columns(status_filter):\n        \"\"\"Finds the chosen extra columns and returns them in a list\"\"\"\n        column_choices = StatusWidgetForm().fields.get('extra_columns').choices\n        chosen_columns = QueryDict(str(status_filter)).getlist('extra_columns')\n        return [(k, v) for k, v in column_choices if k in chosen_columns]\n\n    @staticmethod\n    def format_time(timestampstring):\n        \"\"\"Format the time based on time back in time\"\"\"\n        timestamp = parse_datetime(timestampstring)\n        now = datetime.now()\n        date_format = '%d.%b %H:%M:%S'\n        if now.year != timestamp.year:\n            date_format = '%Y-%m-%d %H:%M:%S'\n        elif now.date() == timestamp.date():\n            date_format = '%H:%M:%S'\n        return timestamp.strftime(date_format)\n\n    def post(self, request, **kwargs):\n        \"\"\"Save navlet options on post\"\"\"\n        navlet = self.account_navlet\n        form = StatusWidgetForm(request.POST)\n        if form.is_valid():\n            navlet.preferences['status_filter'] = request.POST.urlencode()\n            try:\n                navlet.preferences['refresh_interval'] = (\n                    int(request.POST['interval']) * 1000\n                )\n            except (TypeError, ValueError, MultiValueDictKeyError):\n                pass\n            navlet.save()\n            return self.get(request)\n        else:\n            return self.handle_error_response(request, form, **kwargs)\n"
  },
  {
    "path": "python/nav/web/navlets/ups.py",
    "content": "#\n# Copyright (C) 2016 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing UPSWidget\"\"\"\n\nfrom django import forms\nfrom django.db.models import Q\nfrom urllib.parse import urlparse\n\nfrom nav.models.manage import Netbox, Sensor\nfrom . import Navlet\n\n\nclass UpsWidgetForm(forms.Form):\n    \"\"\"Form for choosing an UPS\"\"\"\n\n    netboxid = forms.ModelChoiceField(\n        queryset=Netbox.ups_objects.all(), label='Choose UPS'\n    )\n    external_link = forms.CharField(\n        required=False, label='External link (must start with http)'\n    )\n\n    def clean_netboxid(self):\n        \"\"\"Cheat and return the netboxid instead of the object\n\n        This is done because the result is serialized\n        \"\"\"\n        netbox = self.cleaned_data.get('netboxid')\n        return netbox.pk\n\n    def clean_external_link(self):\n        link = self.cleaned_data.get('external_link')\n        if link and not urlparse(link).scheme.startswith('http'):\n            raise forms.ValidationError('Link needs to start with http or https')\n        return link\n\n\nclass UpsWidget(Navlet):\n    \"\"\"Widget for displaying a binary on/off widget\"\"\"\n\n    title = 'UPS status'\n    is_editable = True\n    is_title_editable = True\n    ajax_reload = True\n    description = 'Display UPS status'\n    refresh_interval = 30000  # 30 seconds\n\n    def get_template_basename(self):\n        return 'ups'\n\n    def get_context_data_edit(self, context):\n        netboxid = self.preferences.get('netboxid')\n        if netboxid:\n            form = UpsWidgetForm(self.preferences)\n        else:\n            form = UpsWidgetForm()\n        context['form'] = form\n        return context\n\n    def get_context_data_view(self, context):\n        netboxid = self.preferences.get('netboxid')\n        if not netboxid:\n            return context\n\n        try:\n            netbox = Netbox.objects.get(pk=netboxid)\n        except Netbox.DoesNotExist:\n            context[\"doesnotexist\"] = netboxid\n            return context\n\n        context['netbox'] = netbox\n\n        # internal names selected from ups-mib and powernet-mib.\n\n        # Input\n        context['input_voltages'] = netbox.sensors.filter(\n            Q(internal_name__contains=\"InputVoltage\")\n            | Q(internal_name__contains=\"InputLineVoltage\")\n        ).filter(precision__isnull=True)\n\n        # Output\n        output_voltages = netbox.sensors.filter(\n            Q(internal_name__contains=\"OutputVoltage\")\n            | Q(internal_name__contains=\"OutputLineVoltage\")\n        ).filter(precision__isnull=True)\n        output_power = netbox.sensors.filter(internal_name__contains=\"OutputPower\")\n\n        if len(output_voltages) != len(output_power):\n            output_power = [None] * len(output_voltages)\n        context['output'] = zip(output_voltages, output_power)\n\n        # Battery\n        context['battery_times'] = (\n            BatteryTimesProxy(sensor)\n            for sensor in netbox.sensors.filter(\n                internal_name__in=[\n                    'upsEstimatedMinutesRemaining',\n                    'upsAdvBatteryRunTimeRemaining',\n                ]\n            )\n        )\n\n        context['battery_capacity'] = netbox.sensors.filter(\n            internal_name__in=[\n                'upsHighPrecBatteryCapacity',\n                'upsEstimatedChargeRemaining',\n            ]\n        )\n\n        context['temperatures'] = netbox.sensors.filter(\n            internal_name__in=['upsHighPrecBatteryTemperature', 'upsBatteryTemperature']\n        )\n\n        return context\n\n    def post(self, request, **kwargs):\n        \"\"\"Save preferences\"\"\"\n        return super(UpsWidget, self).post(request, form=UpsWidgetForm(request.POST))\n\n\nclass BatteryTimesProxy:\n    \"\"\"Proxies access to Sensor objects that represent remaining battery time.\n\n    For consistency, we want the widget to always display remaining time in minutes,\n    but we need to scale the value for sensors that report the remaining time in\n    seconds.\n    \"\"\"\n\n    def __init__(self, proxied_sensor: Sensor):\n        self.__proxied = proxied_sensor\n\n    def __getattr__(self, name):\n        return getattr(self.__proxied, name)\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Reports unit as minutes for sensors that measure seconds\"\"\"\n        if self.__proxied.unit_of_measurement == Sensor.UNIT_SECONDS:\n            return Sensor.UNIT_MINUTES\n        else:\n            return self.__proxied.unit_of_measurement\n\n    def get_metric_name(self):\n        \"\"\"Surrounds the metric name in Graphite scale expressions if conversion from\n        seconds to minutes is needed for the proxied sensor.\n        \"\"\"\n        name = self.__proxied.get_metric_name()\n        if self.__proxied.unit_of_measurement == Sensor.UNIT_SECONDS:\n            return f\"round(scale({name},0.0166),0)\"\n        else:\n            return name\n"
  },
  {
    "path": "python/nav/web/navlets/urls.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom django.urls import re_path, path\nfrom . import (\n    get_user_navlets,\n    add_user_navlet,\n    add_user_navlet_graph,\n    add_navlet_modal,\n    remove_user_navlet,\n    remove_user_navlet_modal,\n    dispatcher,\n    save_navlet_order,\n    set_navlet_preferences,\n    add_user_navlet_sensor,\n)\n\n\nurlpatterns = [\n    path('get-user-navlets/', get_user_navlets, name='get-user-navlets'),\n    path(\n        'get-user-navlets/<int:dashboard_id>/',\n        get_user_navlets,\n        name='get-user-navlets',\n    ),\n    path('add-user-navlet/', add_user_navlet, name='add-user-navlet'),\n    path(\n        'add-user-navlet/<int:dashboard_id>/',\n        add_user_navlet,\n        name='add-user-navlet',\n    ),\n    path(\n        'add-navlet-modal/<int:dashboard_id>/',\n        add_navlet_modal,\n        name='add-navlet-modal',\n    ),\n    path('add-user-navlet/graph/', add_user_navlet_graph, name='add-user-navlet-graph'),\n    path(\n        'add-user-navlet/sensor/',\n        add_user_navlet_sensor,\n        name='add-user-navlet-sensor',\n    ),\n    # XXX: wrong regexp in all of these?\n    re_path(r'^remove-user-navlet/', remove_user_navlet, name='remove-user-navlet'),\n    re_path(\n        r'^remove-user-navlet-modal/(?P<navlet_id>\\d+)',\n        remove_user_navlet_modal,\n        name='remove-user-navlet-modal',\n    ),\n    re_path(r'^get-user-navlet/(?P<navlet_id>\\d+)', dispatcher, name='get-user-navlet'),\n    re_path(r'^save-navlet-order', save_navlet_order, name='save-navlet-order'),\n    re_path(\n        r'^set-navlet-preferences',\n        set_navlet_preferences,\n        name='set-navlet-preferences',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/navlets/vlangraph.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Navlet for displaying a graph giving ip count for a vlan\"\"\"\n\nimport logging\n\nfrom django.http import HttpResponse\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.manage import Vlan\nfrom nav.models.profiles import AccountNavlet\nfrom nav.web.navlets import Navlet, NAVLET_MODE_VIEW, NAVLET_MODE_EDIT\nfrom nav.web.info.vlan.views import get_vlan_graph_url\n\n_logger = logging.getLogger(__name__)\n\n\nclass VlanGraphNavlet(Navlet):\n    \"\"\"Controller for vlangraph navlet\"\"\"\n\n    description = \"Displays a graph over active ip-addresses on a vlan\"\n    title = \"Vlan Graph\"\n    is_editable = True\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n    image_reload = True\n\n    def get_template_basename(self):\n        return \"vlangraph\"\n\n    def get_context_data(self, **kwargs):\n        context = super(VlanGraphNavlet, self).get_context_data(**kwargs)\n\n        vlanid = self.preferences['vlanid'] if 'vlanid' in self.preferences else None\n        if self.mode == NAVLET_MODE_VIEW and vlanid:\n            url = get_vlan_graph_url(vlanid)\n            if url:\n                context['graph_url'] = self.add_bust_param_to_url(url)\n        elif self.mode == NAVLET_MODE_EDIT:\n            context['vlans'] = Vlan.objects.filter(vlan__isnull=False).order_by('vlan')\n            context['vlanid'] = vlanid\n\n        return context\n\n    def post(self, request):\n        \"\"\"Saves user preferences from edit mode\"\"\"\n        account = get_account(request)\n        nid = int(request.POST.get('id'))\n        vlanid = int(request.POST.get('vlanid'))\n\n        try:\n            Vlan.objects.get(pk=vlanid)\n        except Vlan.DoesNotExist:\n            return HttpResponse('This vlan does not exist', status=400)\n        else:\n            account_navlet = AccountNavlet.objects.get(pk=nid, account=account)\n            if not account_navlet.preferences:\n                account_navlet.preferences = {'vlanid': vlanid}\n            else:\n                account_navlet.preferences['vlanid'] = vlanid\n            account_navlet.save()\n\n            self.preferences = account_navlet.preferences\n\n        return self.get(request)\n"
  },
  {
    "path": "python/nav/web/navlets/watchdog.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom nav.watchdog.util import get_statuses\nfrom nav.watchdog.tests import STATUS_OK\nfrom . import Navlet\n\n\nclass WatchDogWidget(Navlet):\n    \"\"\"Widget for displaying WatchDog status\"\"\"\n\n    title = 'WatchDog'\n    description = 'Displays important statuses for NAV'\n    refresh_interval = 1000 * 60 * 10  # Refresh every 10 minutes\n\n    def get_context_data(self, **kwargs):\n        context = super(WatchDogWidget, self).get_context_data(**kwargs)\n        context['tests'] = [t for t in get_statuses() if t.status != STATUS_OK]\n        return context\n\n    def get_template_basename(self):\n        return 'watchdog'\n"
  },
  {
    "path": "python/nav/web/navlets/welcome.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom nav.web.auth.utils import get_account\nfrom nav.web.navlets import Navlet\nfrom nav.web.webfront import WELCOME_ANONYMOUS_PATH, WELCOME_REGISTERED_PATH\nfrom nav.web.webfront.utils import quick_read\n\n\nclass WelcomeNavlet(Navlet):\n    \"\"\"A navlet that displays welcome information to the user\"\"\"\n\n    title = \"Site welcome\"\n    description = \"Displays welcome messages from the site administrators\"\n\n    def get(self, request, *args, **kwargs):\n        context = self.get_context_data(**kwargs)\n        account = get_account(request)\n        if account.is_anonymous:\n            welcome = quick_read(WELCOME_ANONYMOUS_PATH)\n        else:\n            welcome = quick_read(WELCOME_REGISTERED_PATH)\n\n        context['welcome'] = welcome\n\n        return self.render_to_response(context)\n\n    def get_template_basename(self):\n        return \"welcome\"\n"
  },
  {
    "path": "python/nav/web/neighbors/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/neighbors/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration for unrecognized neighbors system.\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.neighbors import views\n\n\nurlpatterns = [\n    path('', views.index, name='neighbors-index'),\n    re_path(r'neighbor-state/', views.set_ignored_state, name='neighbors-set-state'),\n]\n"
  },
  {
    "path": "python/nav/web/neighbors/views.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers for displaying the neighbor app\"\"\"\n\nimport logging\n\nfrom datetime import datetime\nfrom django.http import HttpResponse\nfrom django.shortcuts import render\n\nfrom nav.models.manage import UnrecognizedNeighbor\nfrom nav.web.utils import create_title\n\n_logger = logging.getLogger(__name__)\n\n\ndef index(request):\n    \"\"\"Controller for rendering the main page of neighbors\"\"\"\n    return render_unrecognized(request)\n\n\ndef render_unrecognized(request):\n    \"\"\"Render unrecognized neighbors\"\"\"\n    context = {\n        'neighbors': UnrecognizedNeighbor.objects.select_related('interface__netbox'),\n        'page': 'unrecognized',\n    }\n\n    return render_page(request, context)\n\n\ndef render_page(request, extra_context):\n    \"\"\"Render the page with a given context\"\"\"\n    navpath = [('Home', '/'), ('Unrecognized Neighbors',)]\n    context = {\n        'navpath': navpath,\n        'title': create_title(navpath),\n    }\n    context.update(extra_context)\n    return render(request, 'neighbors/base.html', context)\n\n\ndef set_ignored_state(request):\n    \"\"\"Set ignored on a neighbor instance\"\"\"\n    if request.method == 'POST':\n        ids = request.POST.getlist('neighborids[]')\n        action = request.POST.get('action')\n\n        _logger.debug('%s %s', action, ids)\n\n        neighbors = UnrecognizedNeighbor.objects.filter(pk__in=ids)\n        if action == 'ignore':\n            neighbors.update(ignored_since=datetime.now())\n            response = datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n        else:\n            neighbors.update(ignored_since=None)\n            response = ''\n        return HttpResponse(response)\n\n    return HttpResponse(\"Wrong request method\", status=400)\n"
  },
  {
    "path": "python/nav/web/netmap/__init__.py",
    "content": "#\n# Copyright 2007 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n\"\"\"\nPackage placeholder. If you remove it, the package won't work.\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/netmap/api.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2014, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.core.exceptions import ObjectDoesNotExist\nfrom django.db.models import Q\nfrom django.http import Http404\nfrom django.shortcuts import get_object_or_404\nfrom rest_framework import views, generics\nfrom rest_framework.authentication import SessionAuthentication\nfrom rest_framework.permissions import BasePermission\nfrom rest_framework.renderers import JSONRenderer\nfrom rest_framework.response import Response\n\nfrom nav.models.manage import Netbox\nfrom nav.models.profiles import (\n    NetmapView,\n    NetmapViewDefaultView,\n    Account,\n    NetmapViewNodePosition,\n)\nfrom nav.web.auth.utils import get_account\n\nfrom .cache import cache_exists, update_cached_node_positions\nfrom .graph import get_layer3_traffic, get_layer2_traffic, get_topology_graph\nfrom .serializers import NetmapViewSerializer, NetmapViewDefaultViewSerializer\n\n\n#\n# Permissions\n#\nclass OwnerOrAdminPermission(BasePermission):\n    \"\"\"Verifies that the current user owns the object or is an admin\"\"\"\n\n    message = \"You do not have permission to change this object\"\n\n    def has_object_permission(self, request, view, obj):\n        user = get_account(request)\n        owner = obj.owner\n\n        return user == owner or user.is_admin()\n\n\n#\n# API Views\n#\nclass TrafficView(views.APIView):\n    \"\"\"Fetches traffic data for the links and returns it in JSON format\"\"\"\n\n    renderer_classes = (JSONRenderer,)\n\n    # TODO: add location filter\n    def get(self, _request, *args, **kwargs):\n        \"\"\"Controller for GET-requests for Traffic data\"\"\"\n        layer = int(kwargs.pop('layer', 2))\n        # TODO: should probably use id\n        roomid = kwargs.pop('roomid')\n        try:\n            if layer == 3:\n                traffic = get_layer3_traffic(roomid)\n            else:\n                traffic = get_layer2_traffic(roomid)\n        except ObjectDoesNotExist:\n            raise Http404()\n        return Response(traffic)\n\n\nclass NetmapViewList(generics.ListAPIView):\n    \"\"\"\n    View for returning a list of NetmapViews which are public or\n    belonging to the current account\n    \"\"\"\n\n    serializer_class = NetmapViewSerializer\n\n    def get_queryset(self):\n        user = get_account(self.request)\n        return NetmapView.objects.filter(Q(is_public=True) | Q(owner=user))\n\n\nclass NetmapViewCreate(generics.CreateAPIView):\n    \"\"\"View for creating a NetmapView\"\"\"\n\n    serializer_class = NetmapViewSerializer\n\n    def perform_create(self, serializer):\n        user = get_account(self.request)\n        serializer.save(owner=user)\n\n\nclass NetmapViewEdit(generics.RetrieveUpdateDestroyAPIView):\n    \"\"\"View for saving a NetmapView\"\"\"\n\n    lookup_field = 'viewid'\n    serializer_class = NetmapViewSerializer\n\n    def get_queryset(self):\n        user = get_account(self.request)\n        if user.is_admin():\n            return NetmapView.objects.all()\n        else:\n            return NetmapView.objects.filter(owner=user)\n\n\nclass NetmapViewDefaultViewUpdate(generics.RetrieveUpdateAPIView):\n    \"\"\"View for setting the default NetmapView of an account\"\"\"\n\n    lookup_field = 'owner'\n    serializer_class = NetmapViewDefaultViewSerializer\n    authentication_classes = (SessionAuthentication,)\n    permission_classes = (OwnerOrAdminPermission,)\n\n    def get_queryset(self):\n        return NetmapViewDefaultView.objects.all()\n\n    def get_object(self):\n        user = get_account(self.request)\n        try:\n            return super(NetmapViewDefaultViewUpdate, self).get_object()\n        except Http404:\n            return NetmapViewDefaultView(owner=user)\n\n    def perform_update(self, serializer):\n        obj = serializer.save()\n\n        # If a non-public view was set to be the global default, change\n        # that view's visibility to public.\n        if obj.owner.id is Account.DEFAULT_ACCOUNT and not obj.view.is_public:\n            obj.view.is_public = True\n            obj.view.save()\n\n\nclass NodePositionUpdate(generics.UpdateAPIView):\n    \"\"\"View for updating node positions\"\"\"\n\n    def update(self, request, *args, **kwargs):\n        viewid = kwargs.pop('viewid')\n        data = request.data.get('data', [])\n        # nodes to be updated in the topology cache\n        cache_updates = []\n        for d in data:\n            defaults = {\n                'x': int(d['x']),\n                'y': int(d['y']),\n            }\n            obj, created = NetmapViewNodePosition.objects.get_or_create(\n                viewid=NetmapView(pk=viewid),\n                netbox=Netbox(pk=int(d['netbox'])),\n                defaults=defaults,\n            )\n            if not created:\n                obj.x = defaults['x']\n                obj.y = defaults['y']\n                obj.save()\n            cache_updates.append(\n                {\n                    \"id\": str(obj.netbox.id),\n                    \"x\": defaults[\"x\"],\n                    \"y\": defaults[\"y\"],\n                    \"new_node\": created,\n                }\n            )\n        # Invalidate cached position\n        if cache_exists(\"topology\", viewid, \"layer 2\"):\n            update_cached_node_positions(viewid, \"layer 2\", cache_updates)\n        if cache_exists(\"topology\", viewid, \"layer 3\"):\n            update_cached_node_positions(viewid, \"layer 3\", cache_updates)\n        return Response({\"status\": \"OK\"})\n\n\nclass NetmapGraph(views.APIView):\n    \"\"\"View for building and providing topology data in graph form\"\"\"\n\n    def get(self, request, **kwargs):\n        load_traffic = 'traffic' in request.GET\n        layer = int(kwargs.get('layer', 2))\n        viewid = kwargs.get('viewid')\n        view = None\n\n        if viewid is not None:\n            view = get_object_or_404(NetmapView, pk=viewid)\n\n        return Response(get_topology_graph(layer, load_traffic, view))\n"
  },
  {
    "path": "python/nav/web/netmap/cache.py",
    "content": "#\n# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Cache utils for NetMap\"\"\"\n\nimport logging\nfrom functools import wraps\nfrom django.core.cache import cache\n\n_logger = logging.getLogger(__name__)\n\n# TODO: This cache should be shared by all of NAV?\n# TODO: This cache should be invalidated only when the topology is\n# changed, which is somewhat rare, so set to a reasonable long time\n# for now\n\nCACHE_TIMEOUT = 60 * 60\n# Data is collected every 5 minutes by NAV\nTRAFFIC_CACHE_TIMEOUT = 5 * 60\n\n\ndef cache_exists(*args):\n    key = _cache_key(*args)\n    return cache.get(key) is not None\n\n\n# Cache model: Index traffic by location, then by traffic layer\ndef cache_traffic(layer):\n    \"Utility wrapper to cache get_traffic functions for layer 2/3\"\n\n    def _decorator(func):\n        @wraps(func)\n        def get_traffic(location_or_room_id):\n            cache_key = _cache_key(\"traffic\", location_or_room_id, layer)\n            cached = cache.get(cache_key)\n            if cached is not None:\n                return cached\n            result = func(location_or_room_id)\n            _safe_cache_set(cache_key, result, TRAFFIC_CACHE_TIMEOUT)\n            return result\n\n        return get_traffic\n\n    return _decorator\n\n\n# Cache model: Index by topology layer and view\ndef cache_topology(layer):\n    \"Utility decorator to cache the topology graph of Netmap\"\n\n    def _decorator(func):\n        @wraps(func)\n        def get_traffic(*args, **kwargs):\n            view = kwargs[\"view\"]\n            if view is None:\n                cache_key = _cache_key(\"topology\", \"global_view\", layer)\n            else:\n                cache_key = _cache_key(\"topology\", view.pk, layer)\n            try:\n                cached = cache.get(cache_key)\n                if cached is not None:\n                    return cached\n            except ValueError:\n                pass\n            result = func(*args, **kwargs)\n            _safe_cache_set(cache_key, result, CACHE_TIMEOUT)\n            return result\n\n        return get_traffic\n\n    return _decorator\n\n\n# Update all nodes at once to save a couple of hundred/thousand cache lookups\ndef update_cached_node_positions(viewid, layer, updated_nodes):\n    cache_key = _cache_key(\"topology\", viewid, layer)\n    to_update = cache.get(cache_key)\n    for node in updated_nodes:\n        # If the node is new, it is easier just to make an early exit and\n        # rebuild the whole topology\n        if node[\"new_node\"]:\n            return invalidate_topology_cache(viewid, layer)\n        # Otherwise, don't update nodes not cached in the topology\n        if node[\"id\"] not in to_update[\"nodes\"]:\n            continue\n        diff = {\"x\": node[\"x\"], \"y\": node[\"y\"]}\n        to_update[\"nodes\"][node[\"id\"]][\"position\"] = diff\n    _safe_cache_set(cache_key, to_update, CACHE_TIMEOUT)\n\n\ndef invalidate_topology_cache(viewid, layer):\n    \"Resets the topology cache, prompting NAV to rebuild it\"\n    cache_key = _cache_key(\"topology\", viewid, layer)\n    cache.delete(cache_key)\n\n\ndef _safe_cache_set(key, value, timeout):\n    \"\"\"Attempt to set a cache key, logging a warning on failure.\"\"\"\n    try:\n        cache.set(key, value, timeout)\n    except Exception as error:  # noqa: BLE001\n        _logger.warning(\"Failed to set cache key %s: %s\", key, error)\n\n\n# TODO: Consider using a proper slug generator for this\ndef _cache_key(*args):\n    \"\"\"Construct a namespace cache key for storing/retrieving memory-cached data\n\n    :param args: The elements which, when joined, set the index of the data\n\n    Example:\n\n    _cache_key(\"topology\", \"layer 3\")\n    => netmap:topology:layer3\n\n    \"\"\"\n\n    def stringify(thing):\n        if isinstance(thing, bytes):\n            return thing.decode('utf-8')\n        else:\n            return str(thing)\n\n    args = (stringify(a).replace(' ', '-') for a in args)\n    return 'netmap:' + ':'.join(args)\n"
  },
  {
    "path": "python/nav/web/netmap/common.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"common helper methods for netmap\"\"\"\n\nfrom nav.models.manage import Netbox\nfrom nav.topology import vlan\n\nSTATUS_IMAGE_MAP = {\n    Netbox.UP_DOWN: 'red.png',\n    Netbox.UP_UP: 'green.png',\n    Netbox.UP_SHADOW: 'yellow.png',\n}\n\nTRAFFIC_META = {\n    'tib': 1099511627776,\n    'gib': 1073741824,\n    'mib': 1048576,\n    'kib': 1024,\n    'tb': 1000000000000,\n    'gb': 1000000000,\n    'mb': 1000000,\n    'kb': 1000,\n}\n\n\ndef convert_bits_to_si(bits):\n    \"\"\"SI Units, http://en.wikipedia.org/wiki/SI_prefix\"\"\"\n    if bits >= TRAFFIC_META['tb']:\n        return '%.2fTbps' % (bits / TRAFFIC_META['tb'])\n    elif bits >= TRAFFIC_META['gb']:\n        return '%.2fGbps' % (bits / TRAFFIC_META['gb'])\n    elif bits >= TRAFFIC_META['mb']:\n        return '%.2fMbps' % (bits / TRAFFIC_META['mb'])\n    elif bits >= TRAFFIC_META['kb']:\n        return '%.2fKbps' % (bits / TRAFFIC_META['kb'])\n    return '%.2fbps' % bits\n\n\ndef convert_bits_to_ieee1541():\n    \"\"\"IEEE 1541, not implemented yet\"\"\"\n    return None\n\n\nMEGABIT = 1e6\n\n\ndef get_traffic_load_in_percent(bps, capacity=None):\n    \"\"\"Calculates the load percentage of a link.\n\n    :param bps: bits per second\n    :param capacity: capacity on link in Mbps. (ie 1Gbit = 1000 mbps)\n    :returns: A\n    \"\"\"\n    if not capacity or not bps:\n        return None\n\n    traffic_in_percent = (bps / (capacity * MEGABIT)) * 100.0\n\n    if traffic_in_percent > 100 or traffic_in_percent < 0:\n        traffic_in_percent = 100.0  # something is odd here\n    return traffic_in_percent\n\n\ndef get_traffic_rgb(percent):\n    \"\"\"Traffic load color\n    Returns a RGB-triplet for given load percent starting from green to red.\n    Grey color returned when we receive no percent.\n\n    :param percent load in procent [0..100]\n    \"\"\"\n    if percent is None:\n        return 211, 211, 211\n\n    # range(42,236) = 194 steps with nice colors from traffic_gradient_map()\n    step_constant = 194.00 / 100.00\n\n    color_map_index = int(percent * step_constant)\n    if color_map_index >= 194:\n        color_map_index = 193\n\n    rgb = traffic_gradient_map()[color_map_index]\n\n    return int(rgb[0]), int(rgb[1]), int(rgb[2])\n\n\nGRADIENT_MAP_INTENSITY = 2.0\n\n\ndef traffic_gradient_map():\n    \"\"\"Traffic load gradient map from green, yellow and red.\"\"\"\n\n    data = []\n    for i in reversed(range(42, 236)):\n        data.append(\n            _traffic_gradient(GRADIENT_MAP_INTENSITY * (i - 236.0) / (42.0 - 237))\n        )\n    return data\n\n\ndef _traffic_gradient(intensity):\n    \"\"\"\n    A beautiful gradient to show traffic load.\n    Based on nettkart.pl in TG tech:server goodiebag ^^\n    public domain from ftp.gathering.org\n\n    0 = green\n    1 = yellow\n    2 = red\n    3 = white\n    4 = black\n    \"\"\"\n    gamma = float(1.0 / 1.90)\n    if intensity > 3.0:\n        return (\n            255 * ((4.0 - intensity) ** gamma),\n            255 * ((4.0 - intensity) ** gamma),\n            255 * ((4.0 - intensity) ** gamma),\n        )\n    elif intensity > 2.0:\n        return (\n            255,\n            255 * ((intensity - 2.0) ** gamma),\n            255 * ((intensity - 2.0) ** gamma),\n        )\n    elif intensity > 1.0:\n        return (255, 255 * ((2.0 - intensity) ** gamma), 0)\n    else:\n        return (255 * (intensity**gamma), 255, 0)\n\n\ndef get_status_image_link(status):\n    \"\"\"uplink icon for status\"\"\"\n    try:\n        return STATUS_IMAGE_MAP[status]\n    except KeyError:\n        return STATUS_IMAGE_MAP[Netbox.UP_DOWN]\n\n\n# Functions required for old netmap, remove when new map is in production\n# and old one isn't required anylonger.\ndef layer2_graph():\n    \"\"\"Layer2 graph\"\"\"\n    graph = vlan.build_layer2_graph()\n\n    netboxes = graph.nodes()\n\n    connections = []\n\n    for node, neighbours_dict in graph.adjacency_iter():\n        for neighbour, keydict in neighbours_dict.items():\n            for key, _ in keydict.items():\n                # [from_netbox, to_netbox, to_interface]\n                connections.append([node, neighbour, key])\n\n    return netboxes, connections\n"
  },
  {
    "path": "python/nav/web/netmap/graph.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Graph utility functions for Netmap\"\"\"\n\nfrom datetime import datetime\nfrom collections import defaultdict\nimport logging\n\nfrom django.shortcuts import get_object_or_404\n\nfrom nav.netmap.metadata import (\n    node_to_json_layer2,\n    edge_to_json_layer2,\n    node_to_json_layer3,\n    edge_to_json_layer3,\n    vlan_to_json,\n    get_vlan_lookup_json,\n)\nfrom nav.netmap.topology import (\n    build_netmap_layer3_graph,\n    build_netmap_layer2_graph,\n    _get_vlans_map_layer2,\n    _get_vlans_map_layer3,\n)\nfrom nav.topology import vlan\nfrom nav.models.manage import Interface, Prefix, GwPortPrefix, Location, Room\nfrom nav.netmap.traffic import get_traffic_data, get_traffic_for\n\nfrom .common import get_traffic_rgb\nfrom .cache import cache_traffic, cache_topology\n\n_logger = logging.getLogger(__name__)\n\n\ndef get_topology_graph(layer=2, load_traffic=False, view=None):\n    \"\"\"Builds and returns topology graph for the given layer\"\"\"\n    if layer == 2:\n        return _json_layer2(load_traffic, view=view)\n    else:\n        return _json_layer3(load_traffic, view=view)\n\n\n@cache_topology(\"layer 2\")\ndef _json_layer2(load_traffic=False, view=None):\n    topology_without_metadata = vlan.build_layer2_graph(\n        (\n            'to_interface__netbox',\n            'to_interface__netbox__room',\n            'to_netbox__room',\n            'netbox__room',\n            'to_interface__netbox__room__location',\n            'to_netbox__room__location',\n            'netbox__room__location',\n        )\n    )\n\n    vlan_by_interface, vlan_by_netbox = _get_vlans_map_layer2(topology_without_metadata)\n\n    graph = build_netmap_layer2_graph(\n        topology_without_metadata, vlan_by_interface, vlan_by_netbox, load_traffic, view\n    )\n\n    def get_edge_from_meta(meta):\n        edge = meta['metadata'][0]\n        return edge.u.netbox, edge.v.netbox\n\n    result = {\n        'vlans': get_vlan_lookup_json(vlan_by_interface),\n        'nodes': _get_nodes(node_to_json_layer2, graph),\n        'links': [\n            edge_to_json_layer2(get_edge_from_meta(meta), meta)\n            for u, v, meta in graph.edges(data=True)\n        ],\n    }\n    return result\n\n\n@cache_topology(\"layer 3\")\ndef _json_layer3(load_traffic=False, view=None):\n    topology_without_metadata = vlan.build_layer3_graph(('prefix__vlan__net_type',))\n\n    vlans_map = _get_vlans_map_layer3(topology_without_metadata)\n\n    graph = build_netmap_layer3_graph(topology_without_metadata, load_traffic, view)\n\n    def get_edge_from_meta(meta):\n        edges = next(iter(meta['metadata'].values()))\n        first = next(iter(edges))\n        return first.u.netbox, first.v.netbox\n\n    result = {\n        'vlans': [vlan_to_json(prefix.vlan) for prefix in vlans_map],\n        'nodes': _get_nodes(node_to_json_layer3, graph),\n        'links': [\n            edge_to_json_layer3(get_edge_from_meta(meta), meta)\n            for u, v, meta in graph.edges(data=True)\n        ],\n    }\n    return result\n\n\ndef _get_nodes(node_to_json_function, graph):\n    nodes = {}\n    for node, nx_metadata in graph.nodes(data=True):\n        nodes.update(node_to_json_function(node, nx_metadata))\n    return nodes\n\n\ndef get_traffic_gradient():\n    \"\"\"Builds a dictionary of rgb values from green to red\"\"\"\n    keys = ('r', 'g', 'b')\n\n    return [dict(zip(keys, get_traffic_rgb(percent))) for percent in range(0, 101)]\n\n\n@cache_traffic(\"layer 2\")\ndef get_layer2_traffic(location_or_room_id=None):\n    \"\"\"Fetches traffic data for layer 2\"\"\"\n    start = datetime.now()\n\n    # TODO: Handle missing?\n    if location_or_room_id is None or not location_or_room_id:\n        interfaces = Interface.objects.filter(to_netbox__isnull=False).select_related(\n            'netbox', 'to_netbox', 'to_interface__netbox'\n        )\n    else:\n        interfaces = Interface.objects.filter(\n            to_netbox__isnull=False,\n        ).select_related('netbox', 'to_netbox', 'to_interface__netbox')\n\n        try:\n            room = Room.objects.get(id=location_or_room_id)\n        except Room.DoesNotExist:\n            location = Location.objects.get(id=location_or_room_id)\n            interfaces = interfaces.filter(netbox__room__location=location)\n        else:\n            interfaces = interfaces.filter(netbox__room=room)\n\n    edges = defaultdict(set)\n    for interface in interfaces:\n        edges[(interface.netbox_id, interface.to_netbox_id)].add(interface)\n\n    _logger.debug(\n        \"Produced %d edges from %d interfaces in %s\",\n        len(edges),\n        len(interfaces),\n        datetime.now() - start,\n    )\n\n    complete_interface_set = set(interfaces) | set(\n        ifc.to_interface for ifc in interfaces if ifc.to_interface\n    )\n    traffic_cache = get_traffic_for(complete_interface_set)\n    _logger.debug('Traffic cache built. Time used so far: %s', datetime.now() - start)\n\n    traffic = []\n    for (source, target), edge_interfaces in edges.items():\n        edge_traffic = []\n        for interface in edge_interfaces:\n            to_interface = interface.to_interface\n            data = get_traffic_data((interface, to_interface), traffic_cache).to_json()\n            data.update(\n                {\n                    'source_ifname': interface.ifname if interface else '',\n                    'target_ifname': to_interface.ifname if to_interface else '',\n                }\n            )\n            edge_traffic.append(data)\n        traffic.append(\n            {\n                'source': source,\n                'target': target,\n                'edges': edge_traffic,\n            }\n        )\n\n    _logger.debug('Total time used: %s', datetime.now() - start)\n    return traffic\n\n\n@cache_traffic(\"layer 3\")\ndef get_layer3_traffic(location_or_room_id=None):\n    \"\"\"Fetches traffic data for layer 3\"\"\"\n\n    prefixes = Prefix.objects.filter(\n        vlan__net_type__in=('link', 'elink', 'core')\n    ).select_related('vlan__net_type')\n\n    # No location/room => fetch data for all nodes\n    if location_or_room_id is None or not location_or_room_id:\n        router_ports = GwPortPrefix.objects.filter(\n            prefix__in=prefixes,\n            interface__netbox__category__in=('GW', 'GSW'),  # Or might be faster\n        ).select_related(\n            'interface',\n            'interface__to_interface',\n        )\n    else:\n        # Sanity check: Does the room exist?\n        room = Room.objects.filter(id=location_or_room_id)\n        if room.exists():\n            location = get_object_or_404(Room, id=location_or_room_id)\n        else:\n            location = get_object_or_404(Location, id=location_or_room_id)\n\n        router_ports = GwPortPrefix.objects.filter(\n            prefix__in=prefixes,\n            interface__netbox__room__location=location,\n            interface__netbox__category__in=('GW', 'GSW'),  # Or might be faster\n        ).select_related(\n            'interface',\n            'interface__to_interface',\n        )\n\n    router_ports_prefix_map = defaultdict(list)\n    for router_port in router_ports:\n        router_ports_prefix_map[router_port.prefix].append(router_port)\n\n    interfaces = set()\n    traffic = []\n\n    for prefix in prefixes:\n        gwport_prefixes = router_ports_prefix_map[prefix]\n\n        if gwport_prefixes and prefix.vlan.net_type.id != 'elink':\n            for gwport_prefix_a in gwport_prefixes:\n                for gwport_prefix_b in gwport_prefixes:\n                    if gwport_prefix_a is not gwport_prefix_b:\n                        interface_a = gwport_prefix_a.interface\n                        interface_b = gwport_prefix_b.interface\n                        interfaces.add(\n                            (\n                                interface_a.netbox_id,\n                                interface_b.netbox_id,\n                                interface_a,\n                                interface_b,\n                            )\n                        )\n    for source, target, interface, to_interface in interfaces:\n        traffic.append(\n            {\n                'source': source,\n                'target': target,\n                'source_ifname': interface.ifname,\n                'target_ifname': to_interface.ifname,\n                'traffic_data': get_traffic_data(\n                    (\n                        interface,\n                        to_interface,\n                    )\n                ).to_json(),\n            }\n        )\n    return traffic\n"
  },
  {
    "path": "python/nav/web/netmap/mixins.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Mixin classes for netmap\"\"\"\n\nfrom django.core.exceptions import PermissionDenied\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.profiles import NetmapViewDefaultView, Account\n\n\nclass DefaultNetmapViewMixin(object):\n    \"\"\"\n    Mixin for returning either a global or user specific\n    default view\n    \"\"\"\n\n    def get_context_data(self, user, **_kwargs):\n        netmap_views = NetmapViewDefaultView.objects.select_related(\n            'view',\n        )\n        try:\n            view = netmap_views.get(owner=user).view\n        except NetmapViewDefaultView.DoesNotExist:\n            try:\n                view = netmap_views.get(owner=Account.DEFAULT_ACCOUNT).view\n            except NetmapViewDefaultView.DoesNotExist:\n                view = None\n        return {'default_view': view.viewid if view else None}\n\n\nclass AdminRequiredMixin(object):\n    \"\"\"Mixin for limiting view access to an admin user\"\"\"\n\n    def dispatch(self, request, *args, **kwargs):\n        if not get_account(request).is_admin():\n            raise PermissionDenied\n        return super(AdminRequiredMixin, self).dispatch(request, *args, **kwargs)\n"
  },
  {
    "path": "python/nav/web/netmap/serializers.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Serializer classes for netmap\"\"\"\n\nfrom django.forms.widgets import SelectMultiple\nfrom django.shortcuts import get_object_or_404\n\nfrom rest_framework import serializers\n\nfrom nav.models import profiles, manage\n\n\nclass MultipleChoiceField(serializers.ChoiceField):\n    \"\"\"A generic multiple choice field\n\n    This does not currently exist in django-rest-framework\n    \"\"\"\n\n    widget = SelectMultiple\n\n    def field_from_native(self, data, files, field_name, into):\n        if isinstance(data, dict):\n            into[field_name] = data.get(field_name, [])\n        else:\n            # If using django rest frameworks api browser\n            # `data` will be a django QueryDict object\n            # If the api browser is not to be used, this\n            # clause is unnecessary an can be removed\n            into[field_name] = dict(data.iterlists()).get(field_name, [])\n\n\nclass InstanceRelatedField(serializers.RelatedField):\n    \"\"\"A field to deserialize foreign keys to instances\"\"\"\n\n    def __init__(self, related_class=None, *args, **kwargs):\n        self.related_class = related_class\n        super(InstanceRelatedField, self).__init__(args, kwargs)\n\n    def from_native(self, value):\n        if self.related_class is not None:\n            return get_object_or_404(self.related_class, pk=value)\n\n        return super(InstanceRelatedField, self).from_native(value)\n\n\nclass SimpleCategorySerializer(serializers.ModelSerializer):\n    \"\"\"Simple serializer to represent categories as strings based on their PK\"\"\"\n\n    class Meta:\n        model = manage.Category\n        fields = ('id',)\n\n    def to_representation(self, instance):\n        return instance.pk\n\n    @staticmethod\n    def to_internal_value(data):\n        return manage.Category.objects.get(pk=data)\n\n\nclass NetmapViewSerializer(serializers.Serializer):\n    \"\"\"Serializer for NetmapView\"\"\"\n\n    viewid = serializers.IntegerField(required=False, read_only=True)\n    owner = serializers.StringRelatedField(read_only=True)\n    title = serializers.CharField()\n    description = serializers.CharField(required=False, allow_blank=True)\n    topology = serializers.ChoiceField(choices=profiles.LINK_TYPES)\n    zoom = serializers.CharField(required=False)\n    last_modified = serializers.DateTimeField()\n    is_public = serializers.BooleanField()\n    categories = SimpleCategorySerializer(many=True)\n    location_room_filter = serializers.CharField(\n        max_length=255, required=False, allow_blank=True\n    )\n    display_orphans = serializers.BooleanField()\n    display_elinks = serializers.BooleanField()\n\n    def update(self, instance, validated_data):\n        new_categories = set(validated_data.pop('categories'))\n\n        for key, value in validated_data.items():\n            setattr(instance, key, value)\n        instance.save()\n\n        self._update_categories(instance, new_categories)\n        return instance\n\n    def create(self, validated_data):\n        categories = set(validated_data.pop('categories'))\n        instance = profiles.NetmapView(**validated_data)\n        instance.save()\n\n        self._update_categories(instance, categories)\n\n        return instance\n\n    @staticmethod\n    def _update_categories(instance, new_categories):\n        old_categories = set(instance.categories.all())\n        add_categories = new_categories - old_categories\n        del_categories = old_categories - new_categories\n\n        # Delete removed categories\n        instance.netmap_view_categories.filter(category__in=del_categories).delete()\n\n        # Create added categories\n        profiles.NetmapViewCategories.objects.bulk_create(\n            [\n                profiles.NetmapViewCategories(view=instance, category=cat)\n                for cat in add_categories\n            ]\n        )\n\n\nclass NetmapViewDefaultViewSerializer(serializers.ModelSerializer):\n    \"\"\"Serializer for NetmapViewDefault\"\"\"\n\n    partial = True\n\n    class Meta(object):\n        model = profiles.NetmapViewDefaultView\n        fields = ('view',)\n"
  },
  {
    "path": "python/nav/web/netmap/urls.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Netmap backend URL config.\"\"\"\n\nfrom django.urls import re_path, path\nfrom django.views.decorators.cache import never_cache\n\nfrom nav.web.netmap.api import (\n    TrafficView,\n    NetmapViewList,\n    NetmapViewEdit,\n    NetmapViewCreate,\n    NetmapViewDefaultViewUpdate,\n    NodePositionUpdate,\n    NetmapGraph,\n)\n\nfrom nav.models.profiles import Account\nfrom .views import (\n    IndexView,\n    NetmapAdminView,\n)\n\n\nurlpatterns = [\n    path('', IndexView.as_view(), name='netmap-index'),\n    path('admin/', NetmapAdminView.as_view(), name='netmap-admin'),\n    path('views/', NetmapViewList.as_view(), name='netmap-view-list'),\n    path(\n        'views/<int:viewid>/',\n        NetmapViewEdit.as_view(),\n        name='netmap-view-edit',\n    ),\n    path(\n        'views/create/',\n        NetmapViewCreate.as_view(),\n        name='netmap-view-create',\n    ),\n    path(\n        'views/default/',\n        NetmapViewDefaultViewUpdate.as_view(),\n        {'owner': Account.DEFAULT_ACCOUNT},  # Find a more elegant solution?\n        name='netmap-defaultview-global',\n    ),\n    path(\n        'views/default/<int:owner>/',\n        NetmapViewDefaultViewUpdate.as_view(),\n        name='netmap-defaultview-user',\n    ),\n    path(\n        'views/<int:viewid>/nodepositions/update/',\n        NodePositionUpdate.as_view(),\n        name='netmap-nodepositions-update',\n    ),\n    re_path(\n        r'^graph/layer(?P<layer>[2|3])/$',\n        NetmapGraph.as_view(),\n        name='netmap-graph',\n    ),\n    re_path(\n        r'^graph/layer(?P<layer>[2|3])/(?P<viewid>[\\d]+)/$',\n        NetmapGraph.as_view(),\n        name='netmap-graph-view',\n    ),\n    re_path(\n        r'^traffic/layer(?P<layer>[2|3])/(?P<roomid>.*)$',\n        never_cache(TrafficView.as_view()),\n        name='netmap-traffic-data-view',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/netmap/views.py",
    "content": "#\n# Copyright (C) 2007, 2010, 2011, 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Netmap views\"\"\"\n\nimport json\n\nfrom django.db.models import Q\nfrom django.views.generic import TemplateView, ListView\n\nfrom nav.web.auth.utils import get_account\nfrom nav.models.profiles import (\n    NetmapView,\n    NetmapViewDefaultView,\n    Account,\n)\nfrom nav.models.manage import Category, Room, Location\n\nfrom .mixins import DefaultNetmapViewMixin, AdminRequiredMixin\nfrom .serializers import NetmapViewSerializer\nfrom .graph import get_traffic_gradient\n\n\nclass IndexView(DefaultNetmapViewMixin, TemplateView):\n    \"\"\"Main view for Netmap\"\"\"\n\n    template_name = 'netmap/netmap.html'\n\n    def get_context_data(self, **kwargs):\n        user = get_account(self.request)\n\n        context = super(IndexView, self).get_context_data(user=user, **kwargs)\n\n        netmap_views = NetmapView.objects.all()\n        if not user.is_admin():\n            netmap_views = netmap_views.filter(\n                Q(is_public=True) | Q(owner=user)\n            ).select_related(\n                'owner',\n            )\n\n        netmap_views_json = json.dumps(\n            NetmapViewSerializer(netmap_views, many=True).data\n        )\n\n        categories = list(Category.objects.values_list('id', flat=True))\n        categories.append('ELINK')\n\n        rooms = Room.objects.values_list('id', 'aliases')\n        locations = Location.objects.values_list('id', 'aliases')\n        rooms_locations = []\n        for item_id, aliases in (*rooms, *locations):\n            label = f\"{item_id} ({', '.join(aliases)})\" if aliases else item_id\n            rooms_locations.append({\"label\": label, \"value\": item_id})\n        rooms_locations = json.dumps(rooms_locations)\n\n        context.update(\n            {\n                'account': user,\n                'netmap_views': netmap_views,\n                'netmap_views_json': netmap_views_json,\n                'categories': categories,\n                'rooms_locations': rooms_locations,\n                'traffic_gradient': get_traffic_gradient(),\n                'navpath': [('Home', '/'), ('Netmap',)],\n            }\n        )\n\n        return context\n\n\nclass NetmapAdminView(AdminRequiredMixin, ListView):\n    \"\"\"View for Netmap admin functions\"\"\"\n\n    context_object_name = 'views'\n    model = NetmapView\n    template_name = 'netmap/admin.html'\n\n    def get_context_data(self, **kwargs):\n        context = super(NetmapAdminView, self).get_context_data(**kwargs)\n\n        try:\n            global_default_view = NetmapViewDefaultView.objects.select_related(\n                'view'\n            ).get(owner=Account.DEFAULT_ACCOUNT)\n        except NetmapViewDefaultView.DoesNotExist:\n            global_default_view = None\n\n        context.update(\n            {\n                'navpath': [('Home', '/'), ('Netmap', '/netmap/'), ('Netmap admin',)],\n                'global_default_view': global_default_view,\n            }\n        )\n\n        return context\n"
  },
  {
    "path": "python/nav/web/networkexplorer/__init__.py",
    "content": "\"\"\"network explorer\n\nA web VLAN tree explorer.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/networkexplorer/forms.py",
    "content": "from django import forms\n\nfrom nav.util import is_valid_ip\n\n\n# TODO: Borrowed from newer radius. Need to be removed\n# TODO: and imported from elsewhere\nclass MultitypeQueryWidget(forms.MultiWidget):\n    \"\"\"\n    Widget for MultitypeQueryField\n    \"\"\"\n\n    def decompress(self, value):\n        return [value]\n\n    def format_output(self, rendered_widgets):\n        # FIXME: Added for better foundation integration\n        # FIXME: Backport to radius\n        return ''.join(\n            [\n                '<div class=\"medium-6 columns\">',\n                '<span class=\"dropdown prefix\">',\n                rendered_widgets[1],\n                '</span>',\n                '</div>',\n                '<div class=\"medium-6 columns\">',\n                rendered_widgets[0],\n                '</div>',\n            ]\n        )\n\n\n# TODO: Borrowed from newer radius. Need to be removed\n# TODO: and imported from elsewhere\nclass MultitypeQueryField(forms.MultiValueField):\n    \"\"\"\n    Field that accepts a text query and a query type\n    input, and validates the query according to the type.\n    \"\"\"\n\n    def __init__(self, choices, validators={}, *args, **kwargs):\n        \"\"\"\n        :param validators:  A dict that maps query type\n        values to validators.\n        \"\"\"\n        # Prevent Django from affecting \"required\" by setting the fields\n        # ourselves\n        super(MultitypeQueryField, self).__init__(fields=(), *args, **kwargs)\n        self.fields = (\n            forms.CharField(min_length=1),\n            forms.ChoiceField(choices=choices),\n        )\n        self.widget = MultitypeQueryWidget(\n            (forms.TextInput(), forms.Select(choices=choices))\n        )\n        self.query_validators = validators\n\n    def validate(self, value):\n        query = value[0]\n        query_type = value[1]\n        if query_type in self.query_validators:\n            self.query_validators[query_type](query)\n\n    def compress(self, data_list):\n        return data_list\n\n\nclass NetworkSearchForm(forms.Form):\n    \"\"\"Form for searching in local networks\"\"\"\n\n    QUERY_TYPES = (\n        ('sysname', 'Sysname'),\n        ('ip', 'IP'),\n        ('mac', 'MAC'),\n        ('port', 'Port Description'),\n        ('vlan', 'Vlan'),\n        ('room', 'Room'),\n    )\n    query = MultitypeQueryField(QUERY_TYPES)\n    exact_results = forms.BooleanField(\n        label='Search exact (no substring, case sensitive)', required=False\n    )\n    hide_ports = forms.BooleanField(\n        label='Hide ports with no description', required=False\n    )\n\n    def clean(self):\n        cleaned_data = super().clean()\n        if cleaned_data.get(\"query\"):\n            query, query_type = cleaned_data[\"query\"]\n            if query_type == \"ip\" and cleaned_data[\"exact_results\"]:\n                if not is_valid_ip(query):\n                    self._errors['address'] = self.error_class([\"Invalid IP address\"])\n        return cleaned_data\n"
  },
  {
    "path": "python/nav/web/networkexplorer/mixins.py",
    "content": "import json\nimport socket\nfrom datetime import datetime as dt\n\nfrom django.core import serializers\nfrom django.core.serializers.json import DjangoJSONEncoder\nfrom django.http import HttpResponse\nfrom django.forms.models import model_to_dict\n\nfrom nav import natsort\nfrom nav.models.manage import Cam, Arp, GwPortPrefix, Netbox, SwPortVlan\n\n\nclass JSONResponseMixin(object):\n    \"\"\"A mixin that lets class-based views return JSON\n\n    More or less identical to the JSONResponseMixin in\n    the django-braces project\n\n    TODO: Refactor out for reusability\n    \"\"\"\n\n    content_type = \"application/json\"\n    json_dumps_kwargs = {'indent': 2}\n\n    def get_json_dumps_kwargs(self):\n        if self.json_dumps_kwargs is None:\n            self.json_dumps_kwargs = {}\n        self.json_dumps_kwargs.setdefault('ensure_ascii', False)\n        return self.json_dumps_kwargs\n\n    def render_json_response(self, context_dict, status=200):\n        \"\"\"\n        Limited serialization for shipping plain data. Do not use for models\n        or other complex or custom objects.\n        \"\"\"\n        json_context = json.dumps(\n            context_dict, cls=DjangoJSONEncoder, **self.get_json_dumps_kwargs()\n        )\n        return HttpResponse(json_context, content_type=self.content_type, status=status)\n\n    def render_json_object_response(self, objects, **kwargs):\n        \"\"\"\n        Serializes objects using Django's builtin JSON serializer. Additional\n        kwargs can be used the same way for django.core.serializers.serialize.\n        \"\"\"\n        json_data = serializers.serialize('json', objects, **kwargs)\n        return HttpResponse(json_data, content_type=self.content_type)\n\n\nclass GetRoutersMixin(object):\n    \"\"\"Fetches all the routers on the network\"\"\"\n\n    model = Netbox\n\n    def get_queryset(self):\n        queryset = super(GetRoutersMixin, self).get_queryset()\n        return queryset.filter(category__in=['GW', 'GSW'])\n\n    def get_context_data(self, **kwargs):\n        context = [\n            {\n                'pk': router.pk,\n                'type': 'router',\n                'expandable': router.get_gwports().count() > 0,\n                'fields': model_to_dict(router, fields=('sysname',)),\n            }\n            for router in kwargs.pop('object_list', self.object_list)\n        ]\n        return context\n\n\nclass ExpandRouterContextMixin(object):\n    \"\"\"\n    A mixin to 'hide away' the ugly legacy logic of\n    expand_router\n    \"\"\"\n\n    def get_context_data(self, **kwargs):\n        router = kwargs.pop('object')\n        gwports = router.get_gwports().select_related('to_netbox', 'to_interface')\n        sorted_ports = sorted(gwports, key=lambda p: natsort.split(p.ifname))\n        context = []\n        for gwport in sorted_ports:\n            c = {\n                'pk': gwport.pk,\n                'sysname': router.sysname,\n                'type': 'gwport',\n                'fields': model_to_dict(gwport),\n            }\n            if gwport.to_netbox:\n                c.update(\n                    {\n                        'netbox_sysname': gwport.to_netbox.sysname,\n                        'trunk_port': (\n                            gwport.to_interface.trunk if gwport.to_interface else None\n                        ),\n                    }\n                )\n            c.update(self._get_expandable(gwport))\n            context.append(c)\n\n        return context\n\n    @staticmethod\n    def _get_expandable(gwport):\n        gwport_prefixes = []\n        has_children = False\n\n        prefixes = (\n            GwPortPrefix.objects.select_related(\n                'prefix__vlan',\n                'interface',\n            )\n            .filter(interface_id=gwport.id)\n            .exclude(prefix__vlan__net_type='static')\n        )\n        for prefix in prefixes:\n            netmask_pos = prefix.prefix.net_address.rfind('/')\n            netmask = prefix.prefix.net_address[netmask_pos:]\n            p = {\n                'display_addr': prefix.gw_ip + netmask,\n                'net_type': str(prefix.prefix.vlan.net_type),\n                'net_ident': str(prefix.prefix.vlan.net_ident),\n            }\n            gwport_prefixes.append(p)\n\n            vlans = prefix.prefix.vlan.swport_vlans.exclude(\n                vlan__net_type='static'\n            ).filter(interface__netbox=gwport.netbox)\n            for vlan in vlans:\n                if not vlan.interface.blocked_swports.filter(\n                    vlan=vlan.vlan.vlan\n                ).count():\n                    has_children = True\n                    break\n        gwport_prefixes.sort(key=lambda d: d['display_addr'])\n\n        if not gwport.to_netbox and gwport.to_interface:\n            gwport.to_netbox = gwport.to_interface.netbox\n\n        return {'prefixes': gwport_prefixes, 'expandable': has_children}\n\n\nclass ExpandGWPortMixin(object):\n    \"\"\"\n    A mixin to 'hide away' the even uglier legacy\n    logic of expand_gwport\n    \"\"\"\n\n    def get_context_data(self, **kwargs):\n        gwport = kwargs.pop('object')\n        prefixes = gwport.gwport_prefixes.select_related(\n            'prefix__vlan',\n        ).exclude(prefix__vlan__net_type='static')\n\n        vlans = []\n        vlans_found = set()\n        for prefix in prefixes:\n            for vlan in (\n                prefix.prefix.vlan.swport_vlans.select_related(\n                    'interface__to_interface__netbox',\n                    'interface__netbox',\n                    'vlan',\n                )\n                .filter(interface__netbox=gwport.netbox)\n                .order_by('interface__ifname')\n            ):\n                # Check if port is spanningtreeblocked\n                if vlan.interface.blocked_swports.filter(\n                    vlan=vlan.vlan.vlan  # really!\n                ).count():\n                    continue\n\n                elif vlan and vlan.pk not in vlans_found:\n                    vlans_found.add(vlan.pk)\n                    interface = vlan.interface\n                    vlan_context = {\n                        'pk': interface.pk,\n                        'type': 'swport',\n                        'interface': model_to_dict(interface),\n                        'netbox_sysname': interface.netbox.sysname,\n                        'module_netbox_sysname': (\n                            interface.module.netbox.sysname if interface.module else ''\n                        ),\n                        'subheader_vlan': str(vlan.vlan.vlan),\n                        'subheader_netbox': str(interface.netbox),\n                    }\n                    # Check for children, services and connection\n                    # to switches\n                    vlan_context.update(self._get_expandable(vlan))\n                    vlan_context.update(_get_connected_sysname(interface))\n                    vlans.append(vlan_context)\n        sorted_vlans = sorted(\n            vlans, key=lambda vlan: natsort.split(vlan['interface']['ifname'])\n        )\n        return sorted_vlans\n\n    @staticmethod\n    def _get_expandable(vlan):\n        has_children = False\n        has_services = False\n        connected_to_switch = False\n        interface = vlan.interface\n        connected_interface = interface.to_interface\n        c = {}\n\n        if interface.to_netbox and interface.to_netbox.services.count():\n            has_children = True\n            has_services = True\n\n        if connected_interface and connected_interface.netbox.category.id in (\n            'SW',\n            'GSW',\n            'EDGE',\n        ):\n            has_children = True\n            connected_to_switch = True\n            c.update({'switch_id': interface.to_netbox.id, 'vlan_id': vlan.vlan.id})\n\n        if not has_children:\n            if connected_interface and connected_interface.netbox.services.count():\n                has_children = True\n\n            elif Cam.objects.filter(\n                netbox=interface.netbox, ifindex=interface.ifindex, end_time__gt=dt.max\n            ).count():\n                has_children = True\n\n            elif (\n                connected_interface\n                and Cam.objects.filter(\n                    netbox=connected_interface.netbox,\n                    ifindex=connected_interface.ifindex,\n                    end_time__gt=dt.max,\n                ).count()\n            ):\n                has_children = True\n\n        c.update(\n            {\n                'expandable': has_children,\n                'has_services': has_services,\n                'connected_to_switch': connected_to_switch,\n            }\n        )\n        return c\n\n\nclass ExpandSwitchContextMixin(object):\n    \"\"\"Mixin implementing the logic for expanding a swport\"\"\"\n\n    def get_context_data(self, **kwargs):\n        switch = kwargs.pop('object')\n        vlan_id = self.kwargs.pop('vlan_id', None)\n        swports = switch.get_swports()\n        swport_vlans = SwPortVlan.objects.filter(\n            interface__in=swports, vlan__id=vlan_id\n        )\n        switch_has_services = switch.services.all().count()\n\n        context = []\n\n        for vlan in swport_vlans:\n            interface = vlan.interface\n            c = {\n                'pk': vlan.interface.pk,\n                'type': 'switch',\n                'expandable': False,\n                'interface': model_to_dict(interface),\n                'interface_netbox_sysname': interface.netbox.sysname,\n                'interface_netbox_sysname_short': str(interface.netbox.sysname),\n            }\n            c.update(_get_connected_sysname(interface))\n            if interface.to_interface and switch_has_services:\n                c.update({'expandable': True})\n\n            elif Cam.objects.filter(\n                netbox=interface.netbox, ifindex=interface.ifindex, end_time__gt=dt.max\n            ).count():\n                c.update({'expandable': True})\n            context.append(c)\n        return sorted(\n            context, key=lambda vlan: natsort.split(vlan['interface']['ifname'])\n        )\n\n\nclass ExpandSWPortContextMixin(object):\n    \"\"\"Mixin implementing the logic for expanding a swport\"\"\"\n\n    def get_context_data(self, **kwargs):\n        swport = kwargs.pop('object')\n        to_netbox = swport.to_netbox or swport.to_interface.netbox or None\n        services = to_netbox.services.all() if to_netbox else []\n\n        active_macs = Cam.objects.filter(\n            netboc=swport.netbox, ifindex=swport.ifindex, end_time__gt=dt.max\n        )\n        hosts_behind_port = set()\n        for mac in active_macs:\n            arp_entries = Arp.objects.filter(mac=mac.mac, end_time__gt=dt.max)\n            for arp_entry in arp_entries:\n                try:\n                    hostname = socket.gethostbyaddr(arp_entry.ip)[0]\n                except socket.herror:\n                    hostname = ''\n                finally:\n                    # TODO: Use reverse\n                    host_string = \"\"\"\n                        {0} ({1}) [<a href=\"/machinetracker/mac?mac={2}&days=7\"\n                                    target=\"_blank\">{3}</a>]\n                        \"\"\".format(hostname, arp_entry.ip, mac.mac, mac.mac)\n                hosts_behind_port.add(host_string)\n            if not arp_entries and mac.mac not in hosts_behind_port:\n                hosts_behind_port.add(mac.mac)\n        return {\n            'type': 'swport-leaf',\n            'netbox': to_netbox,\n            'services': services,\n            'active_hosts': sorted(hosts_behind_port),\n        }\n\n\ndef _get_connected_sysname(interface):\n    if interface.to_netbox:\n        return {\n            'connected_to': {\n                'sysname': interface.to_netbox.sysname,\n                'short': str(interface.to_netbox),\n            }\n        }\n    elif interface.to_interface:\n        return {\n            'connected_to': {\n                'sysname': interface.to_interface.netbox.sysname,\n                'short': str(interface.to_interface.netbox),\n            }\n        }\n    else:\n        return {}\n"
  },
  {
    "path": "python/nav/web/networkexplorer/search.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport re\nimport datetime\n\nfrom django.db.models import Q\n\nfrom nav.models.manage import Netbox, Cam, Arp, GwPortPrefix\nfrom nav.models.manage import SwPortVlan, Interface, Prefix\n\n\nMacRE = re.compile(r'^([a-fA-F0-9]{2}[:|\\-]?){6}$')\n\n\ndef search(data):\n    exact_results = data.get('exact_results', False)\n    hide_ports = data.get('hide_ports', False)\n    query = data['query'][0]\n    query_type = data['query'][1]\n    search_function = None\n\n    if query_type == 'sysname':\n        search_function = sysname_search\n    elif query_type == 'ip':\n        search_function = ip_search\n    elif query_type == 'mac':\n        search_function = mac_search\n    elif query_type == 'room':\n        search_function = room_search\n    elif query_type == 'vlan':\n        search_function = vlan_search\n    elif query_type == 'port':\n        search_function = portname_search\n\n    (\n        router_matches,\n        qwport_matches,\n        swport_matches,\n    ) = search_function(query, exact_results)\n\n    if hide_ports:\n        hide_gwports = set()\n        hide_swports = set()\n        for gwport in qwport_matches:\n            if not gwport.ifalias:\n                hide_gwports.add(gwport)\n        for swport in swport_matches:\n            if not swport.ifalias:\n                hide_swports.add(swport)\n\n        qwport_matches -= hide_gwports\n        swport_matches -= hide_swports\n\n    return {\n        # Ensure list for JSON-serialization\n        'routers': [router.pk for router in router_matches],\n        'gwports': [gwport.pk for gwport in qwport_matches],\n        'swports': [swport.pk for swport in swport_matches],\n    }\n\n\ndef search_expand_swport(swportid=None, swport=None, scanned=[]):\n    \"\"\"\n    Expands all paths to a switch port\n    \"\"\"\n    if not swport:\n        try:\n            swport = Interface.objects.get(id=swportid)\n        except Interface.DoesNotExist:\n            return [], []\n\n    found_swports = []\n    found_gwports = []\n\n    # Find gwport that has the same vlan\n    for swportvlan in swport.swport_vlans.exclude(\n        vlan__net_type='static'\n    ).select_related():\n        for prefix in swportvlan.vlan.prefixes.all():\n            for gwportprefix in prefix.gwport_prefixes.all():\n                found_gwports.append(gwportprefix.interface)\n\n    for port in (\n        Interface.objects.filter(to_interface=swport)\n        .exclude(to_interface__in=scanned)\n        .select_related()\n    ):\n        scanned.append(port)\n\n        found_swports.append(port)\n\n        recurs_found = search_expand_swport(swport=port, scanned=scanned)\n        found_gwports.extend(recurs_found[0])\n        found_swports.extend(recurs_found[1])\n\n    for port in Interface.objects.filter(\n        to_interface__in=found_swports, gwport_prefixes__isnull=False\n    ):\n        found_gwports.append(port)\n\n    for port in Interface.objects.filter(\n        to_netbox=swport.netbox, gwport_prefixes__isnull=False\n    ):\n        found_gwports.append(port)\n\n    for port in Interface.objects.filter(\n        to_interface=swport, gwport_prefixes__isnull=False\n    ):\n        found_gwports.append(port)\n\n    return found_gwports, found_swports\n\n\ndef search_expand_netbox(netboxid=None, netbox=None):\n    \"\"\"\n    Expands all paths to a router from a netboxid\n    \"\"\"\n\n    found_gwports = []\n    found_swports = []\n\n    if not netbox:\n        try:\n            netbox = Netbox.objects.get(id=netboxid)\n        except Netbox.DoesNotExist:\n            return [], []\n\n    for result in netbox.get_uplinks():\n        if (\n            result['other'].__class__ == Interface\n            and result['other'].gwport_prefixes.count()\n        ):\n            found_gwports.append(result['other'])\n        else:\n            found_swports.append(result['other'])\n\n    ports = Interface.objects.filter(to_netbox=netbox)\n    gwports = ports.filter(gwport_prefixes__isnull=False)\n    swports = ports.filter(baseport__isnull=False)\n\n    found_gwports.extend(gwports)\n\n    for swport in swports:\n        found_swports.append(swport)\n        ses = search_expand_swport(swport=swport)\n        found_gwports.extend(ses[0])\n        found_swports.extend(ses[1])\n\n    return found_gwports, found_swports\n\n\ndef search_expand_sysname(sysname=None):\n    \"\"\" \"\"\"\n    try:\n        netbox = Netbox.objects.get(sysname=sysname)\n    except Netbox.DoesNotExist:\n        return [], []\n\n    return search_expand_netbox(netbox=netbox)\n\n\ndef search_expand_mac(mac=None):\n    \"\"\" \"\"\"\n\n    if not mac or not MacRE.match(mac):\n        return [], []\n\n    found_swports = []\n    found_gwports = []\n\n    cam_entries = Cam.objects.filter(\n        mac=mac,\n        end_time__gte=datetime.datetime.max,\n    ).select_related()\n\n    for cam_entry in cam_entries:\n        for swport in Interface.objects.filter(\n            netbox=cam_entry.netbox,\n            ifname=cam_entry.port,\n        ).select_related():\n            found_swports.append(swport)\n            swport_search = search_expand_swport(swport=swport)\n            found_gwports.extend(swport_search[0])\n            found_swports.extend(swport_search[1])\n\n    return found_gwports, found_swports\n\n\n# Search functions\n\n\ndef sysname_search(sysname, exact=False):\n    \"\"\"\n    Searches the database for any connections to the sysname\n    \"\"\"\n    router_matches = set()\n    gwport_matches = set()\n    swport_matches = set()\n\n    if exact:\n        routers = Netbox.objects.filter(sysname=sysname, category__in=['GW', 'GSW'])\n        netboxes = Netbox.objects.filter(sysname=sysname)\n    else:\n        routers = Netbox.objects.filter(\n            sysname__icontains=sysname, category__in=['GW', 'GSW']\n        )\n        netboxes = Netbox.objects.filter(sysname__icontains=sysname)\n\n    for router in routers:\n        router_matches.add(router)\n\n    for netbox in netboxes:\n        netbox_search = search_expand_netbox(netbox=netbox)\n        gwport_matches.update(netbox_search[0])\n        swport_matches.update(netbox_search[1])\n\n    interfaces = Interface.objects.filter(module__netbox__in=netboxes)\n\n    for gwport in interfaces.filter(gwport_prefixes__isnull=False):\n        gwport_matches.add(gwport)\n\n    for swport in interfaces.filter(baseport__isnull=False):\n        swport_matches.add(swport)\n        swport_search = search_expand_swport(swport=swport)\n        gwport_matches.update(swport_search[0])\n        swport_matches.update(swport_search[1])\n\n    router_matches.update([gwport.netbox for gwport in gwport_matches])\n\n    return router_matches, gwport_matches, swport_matches\n\n\ndef ip_search(ip, exact=False):\n    \"\"\"\n    Searches the database for anything related to the ip\n\n    Returns a list of (routers, gwports, swports)\n    \"\"\"\n    router_matches = set()\n    gwport_matches = set()\n    swport_matches = set()\n\n    if exact:\n        netboxes = Netbox.objects.filter(ip=ip)\n        gwportprefixes = GwPortPrefix.objects.filter(gw_ip=ip)\n        arp_entries = Arp.objects.filter(ip=ip, end_time__gte=datetime.datetime.max)\n    else:\n        netboxes = Netbox.objects.filter(ip__contains=ip)\n        gwportprefixes = GwPortPrefix.objects.filter(gw_ip__contains=ip)\n        arp_entries = Arp.objects.filter(\n            ip__contains=ip, end_time__gte=datetime.datetime.max\n        )\n\n    # Add matching routers\n    router_matches.update(\n        [netbox for netbox in netboxes.filter(category__in=['GW', 'GSW'])]\n    )\n\n    for netbox in netboxes:\n        netbox_search = search_expand_netbox(netbox=netbox)\n        gwport_matches.update(netbox_search[0])\n        swport_matches.update(netbox_search[1])\n\n    for prefix in gwportprefixes:\n        gwport_matches.add(prefix.interface)\n\n    for arp_entry in arp_entries:\n        mac_search = search_expand_mac(mac=arp_entry.mac)\n        gwport_matches.update(mac_search[0])\n        swport_matches.update(mac_search[1])\n\n    router_matches.update([gwport.netbox for gwport in gwport_matches])\n\n    return router_matches, gwport_matches, swport_matches\n\n\ndef portname_search(portname, exact=False):\n    \"\"\" \"\"\"\n    router_matches = set()\n    gwport_matches = set()\n    swport_matches = set()\n\n    interfaces = Interface.objects.filter(baseport__isnull=False)\n    if exact:\n        swport_matches.update(interfaces.filter(ifalias=portname))\n    else:\n        swport_matches.update(interfaces.filter(ifalias__icontains=portname))\n\n    for swport in [swport for swport in swport_matches if swport]:\n        swport_search = search_expand_swport(swport=swport)\n        gwport_matches.update(swport_search[0])\n        swport_matches.update(swport_search[1])\n\n    router_matches.update([gwport.netbox for gwport in gwport_matches])\n\n    return router_matches, gwport_matches, swport_matches\n\n\ndef room_search(room, exact=False):\n    \"\"\" \"\"\"\n    router_matches = set()\n    gwport_matches = set()\n    swport_matches = set()\n\n    interfaces = Interface.objects.filter(baseport__isnull=False)\n    if exact:\n        swport_matches.update(\n            interfaces.filter(\n                Q(netbox__room__id=room) | Q(netbox__room__aliases__contains=room)\n            )\n        )\n    else:\n        swport_matches.update(\n            interfaces.filter(\n                Q(netbox__room__id__icontains=room)\n                | Q(netbox__room__aliases__icontains=room)\n            )\n        )\n\n    for swport in [swport for swport in swport_matches if swport]:\n        swport_search = search_expand_swport(swport=swport)\n        gwport_matches.update(swport_search[0])\n        swport_matches.update(swport_search[1])\n\n    router_matches.update([gwport.netbox for gwport in gwport_matches])\n\n    return router_matches, gwport_matches, swport_matches\n\n\ndef mac_search(mac, exact=False):\n    \"\"\" \"\"\"\n    search = search_expand_mac(mac)\n    gwport_matches = set(search[0])\n    swport_matches = set(search[1])\n    router_matches = {gwport.netbox for gwport in gwport_matches}\n\n    return router_matches, gwport_matches, swport_matches\n\n\ndef vlan_search(vlan, exact=False):\n    \"\"\" \"\"\"\n    router_matches = set()\n    gwport_matches = set()\n    swport_matches = set()\n\n    if exact:\n        vlan_filter = Q(vlan__vlan=vlan)\n    else:\n        vlan_filter = Q(vlan__vlan__icontains=vlan)\n\n    for swportvlan in SwPortVlan.objects.filter(vlan_filter):\n        swport_search = search_expand_swport(swport=swportvlan.interface)\n        gwport_matches.update(swport_search[0])\n        swport_matches.update(swport_search[1])\n\n    matching_prefixes = Prefix.objects.filter(vlan_filter).exclude(\n        vlan__net_type='static'\n    )\n\n    for gwportprefix in GwPortPrefix.objects.filter(prefix__in=matching_prefixes):\n        gwport_matches.add(gwportprefix.interface)\n\n    for netbox in Netbox.objects.filter(netboxprefix__prefix__in=matching_prefixes):\n        netbox_search = search_expand_netbox(netbox=netbox)\n        gwport_matches.update(netbox_search[0])\n        swport_matches.update(netbox_search[1])\n\n    router_matches.update([gwport.netbox for gwport in gwport_matches])\n\n    return router_matches, gwport_matches, swport_matches\n"
  },
  {
    "path": "python/nav/web/networkexplorer/urls.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL config for network explorer.\"\"\"\n\nfrom django.urls import path\nfrom nav.web.networkexplorer import views\n\n\nurlpatterns = [\n    path('', views.IndexView.as_view(), name='networkexplorer-index'),\n    path('search/', views.SearchView.as_view(), name=\"networkexplorer-search\"),\n    path('routers/', views.RouterJSONView.as_view(), name='networkexplorer-routers'),\n    path(\n        'expand/router/<int:pk>/',\n        views.ExpandRouterView.as_view(),\n        name='networkexplorer-expand-router',\n    ),\n    path(\n        'expand/gwport/<int:pk>/',\n        views.ExpandGWPortView.as_view(),\n        name='networkexplorer-expand-gwport',\n    ),\n    path(\n        'expand/switch/<int:pk>/',\n        views.ExpandSwitchView.as_view(),\n        name='networkexplorer-expand-switch',\n    ),\n    path(\n        'expand/switch/<int:pk>/vlan/<int:vlan_id>/',\n        views.ExpandSwitchView.as_view(),\n        name='networkexplorer-expand-switch-vlan',\n    ),\n    path(\n        'expand/swport/<int:pk>/',\n        views.ExpandSWPortView.as_view(),\n        name='networkexplorer-expand-swport',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/networkexplorer/views.py",
    "content": "#\n# Copyright (C) 2007-2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Network Explorer view functions\"\"\"\n\nfrom django.views.generic import TemplateView\nfrom django.views.generic import View\nfrom django.views.generic.list import BaseListView\nfrom django.views.generic.detail import BaseDetailView\n\nfrom nav.models.manage import Netbox\nfrom nav.models.manage import Interface\n\nfrom .search import search\nfrom .forms import NetworkSearchForm\nfrom .mixins import (\n    GetRoutersMixin,\n    JSONResponseMixin,\n    ExpandRouterContextMixin,\n    ExpandGWPortMixin,\n    ExpandSwitchContextMixin,\n    ExpandSWPortContextMixin,\n)\n\n\nPATH = [(\"Home\", \"/\"), (\"Network Explorer\", \"/networkexplorer/\")]\n\n\nclass IndexView(TemplateView):\n    \"\"\"Basic view of the network\"\"\"\n\n    template_name = 'networkexplorer/base.html'\n\n    def get_context_data(self, **kwargs):\n        context = super(IndexView, self).get_context_data(**kwargs)\n        context.update({'navpath': PATH, 'form': NetworkSearchForm()})\n        return context\n\n\nclass RouterJSONView(JSONResponseMixin, GetRoutersMixin, BaseListView):\n    \"\"\"Returns a JSON-response of the routers on the network\"\"\"\n\n    def render_to_response(self, context):\n        return self.render_json_response(context)\n\n\nclass ExpandRouterView(JSONResponseMixin, ExpandRouterContextMixin, BaseDetailView):\n    \"\"\"Returns a JSON-response of a router's gwports\"\"\"\n\n    model = Netbox\n\n    def render_to_response(self, context):\n        return self.render_json_response(context)\n\n\nclass ExpandGWPortView(JSONResponseMixin, ExpandGWPortMixin, BaseDetailView):\n    \"\"\"Returns a JSON-response of a gwport's swports and switches\"\"\"\n\n    model = Interface\n\n    def render_to_response(self, context):\n        return self.render_json_response(context)\n\n\nclass ExpandSwitchView(JSONResponseMixin, ExpandSwitchContextMixin, BaseDetailView):\n    \"\"\"Returns a JSON-response of a switch's swport-vlans\"\"\"\n\n    model = Netbox\n\n    def render_to_response(self, context):\n        return self.render_json_response(context)\n\n\nclass ExpandSWPortView(JSONResponseMixin, ExpandSWPortContextMixin, BaseDetailView):\n    \"\"\"Returns a JSON-response of a swport's services and active hosts\"\"\"\n\n    model = Interface\n\n    def render_to_response(self, context):\n        return self.render_json_response(context)\n\n\nclass SearchView(JSONResponseMixin, View):\n    def form_invalid(self, form):\n        return {'errors': form.errors}\n\n    def form_valid(self, form):\n        return search(form.cleaned_data)\n\n    def get(self, request, *_args, **_kwargs):\n        form = NetworkSearchForm(request.GET)\n        status = 200\n\n        if form.is_valid():\n            context = self.form_valid(form)\n        else:\n            context = self.form_invalid(form)\n            status = 400\n\n        return self.render_json_response(context, status=status)\n"
  },
  {
    "path": "python/nav/web/portadmin/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/portadmin/forms.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for PortAdmin\"\"\"\n\nfrom django import forms\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    SubmitField,\n    FormRow,\n    FormColumn,\n)\n\n\nclass SearchForm(forms.Form):\n    \"\"\"Form for searching for ip-devices and interfaces\"\"\"\n\n    query = forms.CharField(\n        label='',\n        widget=forms.TextInput(\n            attrs={'placeholder': 'Search for ip device or interface'}\n        ),\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(SearchForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_method='get',\n            form_action='portadmin-index',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['query']], css_classes='medium-9'),\n                        FormColumn(\n                            fields=[SubmitField(value='Search', css_classes='postfix')],\n                            css_classes='medium-3',\n                        ),\n                    ],\n                    css_classes='collapse',\n                )\n            ],\n        )\n"
  },
  {
    "path": "python/nav/web/portadmin/templates/portadmin/aliasformat.html",
    "content": "<div class=\"alert-box warning with-icon\">\n  Validation of port descriptions is enabled. The format must match <code>{{ ifaliasformat }}</code>.\n</div>\n"
  },
  {
    "path": "python/nav/web/portadmin/urls.py",
    "content": "#\n# Copyright (C) 2011, 2013-2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"PortAdmin Django URL config\"\"\"\n\nfrom django.urls import re_path, path\nfrom nav.web.portadmin import views\n\n\nurlpatterns = [\n    path('', views.index, name='portadmin-index'),\n    re_path(r'^ip=(?P<ip>[\\d\\.]+)', views.search_by_ip, name='portadmin-ip'),\n    re_path(\n        r'^ip=(?P<ip>[\\d\\.]+)/data/$',\n        views.load_portadmin_data,\n        name='portadmin-ip-data',\n    ),\n    re_path(\n        r'^sysname=(?P<sysname>[^/\\s]+)$',\n        views.search_by_sysname,\n        name='portadmin-sysname',\n    ),\n    re_path(\n        r'^sysname=(?P<sysname>[^/\\s]+)/data/$',\n        views.load_portadmin_data,\n        name='portadmin-sysname-data',\n    ),\n    path(\n        'interfaceid=<int:interfaceid>',\n        views.search_by_interfaceid,\n        name='portadmin-interface',\n    ),\n    path(\n        'interfaceid=<int:interfaceid>/data/',\n        views.load_portadmin_data,\n        name='portadmin-interface-data',\n    ),\n    re_path(r'^save_interfaceinfo', views.save_interfaceinfo),\n    re_path(r'^restart_interfaces', views.restart_interfaces),\n    re_path(r'^commit_configuration', views.commit_configuration),\n    re_path(\n        r'^trunk/(?P<interfaceid>\\d+)',\n        views.render_trunk_edit,\n        name=\"portadmin-render-trunk-edit\",\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/portadmin/utils.py",
    "content": "#\n# Copyright (C) 2011-2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Util functions for the PortAdmin\"\"\"\n\nfrom typing import Any, Optional, Sequence\nimport re\nimport logging\nfrom operator import attrgetter\n\nfrom django.template import loader\n\nfrom nav.models import manage, profiles\nfrom nav.models.profiles import Account\nfrom nav.portadmin.config import CONFIG\nfrom nav.portadmin.management import ManagementFactory\nfrom nav.portadmin.handlers import ManagementHandler\nfrom nav.portadmin.vlan import FantasyVlan\nfrom nav.enterprise.ids import VENDOR_ID_CISCOSYSTEMS\n\n\n_logger = logging.getLogger(\"nav.web.portadmin\")\n\n\ndef get_and_populate_livedata(netbox, interfaces):\n    \"\"\"Fetch live data from netbox\"\"\"\n    handler = ManagementFactory.get_instance(netbox)\n    livedata = handler.get_interfaces(interfaces)\n    update_interfaces_with_collected_data(interfaces, livedata)\n\n    return handler\n\n\ndef update_interfaces_with_collected_data(\n    interfaces: Sequence[manage.Interface], livedata: Sequence[dict[str, Any]]\n):\n    \"\"\"Updates the list of Interface objects with data gathered via\n    ManagementHandler.get_interfaces().\n    \"\"\"\n    interfaces_by_name = {ifc.ifdescr: ifc for ifc in interfaces}\n    interfaces_by_name.update({ifc.ifname: ifc for ifc in interfaces})\n\n    matches = (\n        (interfaces_by_name[data[\"name\"]], data)\n        for data in livedata\n        if data.get(\"name\") in interfaces_by_name\n    )\n    for interface, data in matches:\n        if data.get(\"description\") is not None:\n            interface.ifalias = data[\"description\"]\n        if data.get(\"vlan\"):\n            interface.vlan = data[\"vlan\"]\n        if data.get(\"oper\"):\n            interface.ifoperstatus = data[\"oper\"]\n        if data.get(\"admin\"):\n            interface.ifadminstatus = data[\"admin\"]\n\n\ndef find_and_populate_allowed_vlans(\n    account: profiles.Account,\n    netbox: manage.Netbox,\n    interfaces: Sequence[manage.Interface],\n    handler: ManagementHandler,\n):\n    \"\"\"Finds allowed vlans and indicate which interfaces can be edited\"\"\"\n    allowed_vlans = find_allowed_vlans_for_user_on_netbox(account, netbox, handler)\n    set_editable_flag_on_interfaces(interfaces, allowed_vlans, account)\n    return allowed_vlans\n\n\ndef find_allowed_vlans_for_user_on_netbox(\n    account: profiles.Account, netbox: manage.Netbox, handler: ManagementHandler = None\n) -> list[FantasyVlan]:\n    \"\"\"Finds allowed vlans for this user on this netbox\"\"\"\n    netbox_vlans = find_vlans_on_netbox(netbox, handler=handler)\n\n    if CONFIG.is_vlan_authorization_enabled():\n        if account.is_admin():\n            allowed_vlans = netbox_vlans\n        else:\n            all_allowed_vlans = find_allowed_vlans_for_user(account)\n            allowed_vlans = intersect(all_allowed_vlans, netbox_vlans)\n    else:\n        allowed_vlans = netbox_vlans\n\n    return sorted(allowed_vlans, key=attrgetter('vlan'))\n\n\ndef find_vlans_on_netbox(\n    netbox: manage.Netbox, handler: ManagementHandler = None\n) -> list[FantasyVlan]:\n    \"\"\"Find all the available vlans on this netbox\n\n    :param netbox: The Netbox whose available VLANs you want to find.\n    :param handler: Already instantiated ManagementHandler instance. Use this if\n                    possible to enable use of cached values.\n    \"\"\"\n    if not handler:\n        handler = ManagementFactory.get_instance(netbox)\n    return handler.get_netbox_vlans()\n\n\ndef find_allowed_vlans_for_user(account):\n    \"\"\"Find the allowed vlans for this user based on organization\"\"\"\n    allowed_vlans = []\n    for org in account.organizations.all():\n        allowed_vlans.extend(find_vlans_in_org(org))\n\n    defaultvlan = CONFIG.find_default_vlan()\n    if defaultvlan and defaultvlan not in allowed_vlans:\n        allowed_vlans.append(defaultvlan)\n\n    return allowed_vlans\n\n\ndef set_editable_flag_on_interfaces(\n    interfaces: Sequence[manage.Interface],\n    vlans: Sequence[FantasyVlan],\n    user: Optional[Account] = None,\n):\n    \"\"\"Sets the pseudo-attribute `iseditable` on each interface in the interfaces\n    list, indicating whether the PortAdmin UI should allow edits to it or not.\n\n    An interface will be considered \"editable\" only if its native vlan matches one of\n    the vlan tags from `vlans`. An interface may be considered non-editable if it is\n    an uplink, depending on how portadmin is configured.\n    \"\"\"\n    vlan_tags = {vlan.vlan for vlan in vlans}\n    allow_everything = not should_check_access_rights(account=user) if user else False\n\n    for interface in interfaces:\n        if allow_everything:\n            interface.iseditable = True\n            continue\n\n        vlan_is_acceptable = interface.vlan in vlan_tags\n        is_link = bool(interface.to_netbox)\n        refuse_link_edit = not CONFIG.get_link_edit() and is_link\n\n        interface.iseditable = vlan_is_acceptable and not refuse_link_edit\n\n\ndef intersect(list_a, list_b):\n    \"\"\"Find intersection between two lists\"\"\"\n    return list(set(list_a) & set(list_b))\n\n\ndef find_vlans_in_org(org):\n    \"\"\"Find all vlans in an organization and child organizations\n\n    :returns: list of FantasyVlans\n    :rtype: list\n    \"\"\"\n    vlans = list(org.vlans.all())\n    for child_org in org.child_organizations.all():\n        vlans.extend(find_vlans_in_org(child_org))\n    return [FantasyVlan(x.vlan, x.net_ident) for x in list(set(vlans)) if x.vlan]\n\n\ndef check_format_on_ifalias(ifalias):\n    \"\"\"Verify that format on ifalias is correct if it is defined in config\"\"\"\n    if not ifalias:\n        return True\n    ifalias_format = CONFIG.get_ifaliasformat()\n    if ifalias_format:\n        ifalias_format = re.compile(ifalias_format)\n        if ifalias_format.match(ifalias):\n            return True\n        else:\n            _logger.error('Wrong format on ifalias: %s', ifalias)\n            return False\n    else:\n        return True\n\n\ndef get_aliastemplate():\n    \"\"\"Fetch template for displaying ifalias format as help to user\"\"\"\n    return loader.get_template(\"portadmin/aliasformat.html\")\n\n\ndef save_to_database(interfaces):\n    \"\"\"Save changes for all interfaces to database\"\"\"\n    for interface in interfaces:\n        interface.save()\n\n\ndef filter_vlans(target_vlans, old_vlans, allowed_vlans):\n    \"\"\"Return a list of vlans that matches following criteria\n\n    - All target vlans should be set if the vlan is in allowed_vlans\n    - Remove the old_vlans if they are in allowed_vlans\n    \"\"\"\n    return list(\n        (set(target_vlans) & set(allowed_vlans)) | (set(old_vlans) - set(allowed_vlans))\n    )\n\n\ndef should_check_access_rights(account):\n    \"\"\"Return boolean indicating that this user is restricted\"\"\"\n    return CONFIG.is_vlan_authorization_enabled() and not account.is_admin()\n\n\ndef mark_detained_interfaces(interfaces):\n    \"\"\"Mark interfaces detained in Arnold\n    :type interfaces: list[nav.models.manage.Interface]\n    \"\"\"\n    for interface in interfaces:\n        # If interface is administratively down, check if Arnold is the source\n        if (\n            interface.ifadminstatus == 2\n            and interface.arnold_identities.filter(status='disabled').count() > 0\n        ):\n            interface.detained = True\n        if interface.arnold_identities.filter(status='quarantined').count() > 0:\n            interface.detained = True\n\n\ndef add_dot1x_info(interfaces, handler):\n    \"\"\"Add information about dot1x state for interfaces\"\"\"\n\n    # Skip if port access control is not enabled (and thus not dot1x)\n    if not handler.is_port_access_control_enabled():\n        return\n\n    dot1x_states = handler.get_dot1x_enabled_interfaces()\n\n    url_template = CONFIG.get_dot1x_external_url()\n    for interface in interfaces:\n        interface.dot1xenabled = dot1x_states.get(interface.ifname)\n        if url_template:\n            interface.dot1x_external_url = url_template.format(\n                netbox=interface.netbox, interface=interface\n            )\n\n\ndef is_cisco(netbox):\n    \"\"\"Returns true if netbox is of vendor cisco\n    :type netbox: manage.Netbox\n    \"\"\"\n    return netbox.type.get_enterprise_id() == VENDOR_ID_CISCOSYSTEMS\n\n\ndef add_poe_info(interfaces, handler):\n    \"\"\"Add information about PoE state for interfaces\"\"\"\n    states = handler.get_poe_states(interfaces)\n    for interface in interfaces:\n        interface.poe_state = states.get(interface.ifname)\n        interface.supports_poe = True if interface.poe_state else False\n"
  },
  {
    "path": "python/nav/web/portadmin/views.py",
    "content": "#\n# Copyright (C) 2011-2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"View controller for PortAdmin\"\"\"\n\nimport logging\nimport json\n\nfrom operator import or_ as OR\nfrom functools import reduce\n\nfrom django.http import HttpResponse, JsonResponse, HttpRequest\nfrom django.shortcuts import render, get_object_or_404\nfrom django.contrib import messages\nfrom django.db.models import Q\nfrom django.urls import reverse\nfrom django.views.decorators.http import require_POST\nfrom jnpr.junos.exception import ConnectRefusedError\n\nfrom nav.auditlog.models import LogEntry\n\nfrom nav.web.auth.utils import get_account\nfrom nav.util import is_valid_ip\nfrom nav.web.utils import create_title\nfrom nav.models.manage import Netbox, Interface\nfrom nav.web.portadmin.utils import (\n    get_and_populate_livedata,\n    find_and_populate_allowed_vlans,\n    get_aliastemplate,\n    save_to_database,\n    check_format_on_ifalias,\n    find_allowed_vlans_for_user_on_netbox,\n    find_allowed_vlans_for_user,\n    filter_vlans,\n    should_check_access_rights,\n    mark_detained_interfaces,\n    is_cisco,\n    add_dot1x_info,\n    add_poe_info,\n)\nfrom nav.portadmin.config import CONFIG\nfrom nav.portadmin.snmp.base import SNMPHandler\nfrom nav.portadmin.management import ManagementFactory\nfrom nav.portadmin.handlers import (\n    ManagementHandler,\n    NoResponseError,\n    ProtocolError,\n    ManagementError,\n    XMLParseError,\n    POEStateNotSupportedError,\n)\nfrom .forms import SearchForm\nfrom ...portadmin.handlers import DeviceNotConfigurableError\n\n_logger = logging.getLogger(\"nav.web.portadmin\")\n\n\ndef get_base_context(additional_paths=None, form=None):\n    \"\"\"Returns a base context for portadmin\n\n    :type additional_paths: list of tuple\n    \"\"\"\n    navpath = [('Home', '/'), ('PortAdmin', reverse('portadmin-index'))]\n    if additional_paths:\n        navpath += additional_paths\n    form = form if form else SearchForm()\n    return {'navpath': navpath, 'title': create_title(navpath), 'form': form}\n\n\ndef default_render(request):\n    \"\"\"Default render for errors etc\"\"\"\n    return render(\n        request, 'portadmin/base.html', get_base_context(form=get_form(request))\n    )\n\n\ndef get_form(request):\n    \"\"\"If we are searching for something, return a bound form with the\n    search parameter\"\"\"\n    if 'query' in request.GET:\n        return SearchForm(request.GET)\n\n\ndef index(request):\n    \"\"\"View for showing main page\"\"\"\n    netboxes = []\n    interfaces = []\n    form = get_form(request)\n    if form and form.is_valid():\n        netboxes, interfaces = search(form.cleaned_data['query'])\n        if len(netboxes) == 1 and not interfaces:\n            return search_by_sysname(request, netboxes[0].sysname)\n        elif len(interfaces) == 1 and not netboxes:\n            return search_by_interfaceid(request, interfaces[0].id)\n    else:\n        form = SearchForm()\n    context = get_base_context(form=form)\n    context['netboxes'] = netboxes\n    context['interfaces'] = interfaces\n\n    return render(request, 'portadmin/base.html', context)\n\n\ndef search(query):\n    \"\"\"Search for something in portadmin\"\"\"\n    netbox_filters = [\n        Q(sysname__icontains=query),\n    ]\n    if is_valid_ip(query, strict=True):\n        netbox_filters.append(Q(ip=query))\n    netboxes = Netbox.objects.filter(reduce(OR, netbox_filters)).order_by('sysname')\n    interfaces = Interface.objects.filter(ifalias__icontains=query).order_by(\n        'netbox__sysname', 'ifname'\n    )\n    return netboxes, interfaces\n\n\ndef search_by_ip(request, ip):\n    \"\"\"View for showing a search done by ip-address\"\"\"\n    return search_by_kwargs(request, ip=ip)\n\n\ndef search_by_sysname(request, sysname):\n    \"\"\"View for showing a search done by sysname\"\"\"\n    return search_by_kwargs(request, sysname=sysname)\n\n\ndef search_by_interfaceid(request, interfaceid):\n    \"\"\"View for showing a search done by interface id\"\"\"\n    return search_by_kwargs(request, interfaceid=interfaceid)\n\n\ndef load_portadmin_data(request, **kwargs):\n    \"\"\"Universal data loading endpoint for all search types\"\"\"\n    return load_portadmin_data_by_kwargs(request, **kwargs)\n\n\ndef search_by_kwargs(request, **kwargs):\n    \"\"\"Search by keyword arguments and show netbox page with loading indicator\"\"\"\n    netbox, interfaces = _get_netbox_and_interfaces(request, **kwargs)\n    if not netbox:\n        return default_render(request)\n\n    load_data_url = _get_load_data_url(**kwargs)\n\n    context = get_base_context([(netbox.sysname,)], form=get_form(request))\n    context.update(\n        {\n            'netbox': netbox,\n            'interfaces': interfaces,\n            'load_data_url': load_data_url,\n            'loading': True,\n            'readonly': True,\n        }\n    )\n\n    return render(request, 'portadmin/netbox.html', context)\n\n\ndef _get_netbox_and_interfaces(request, **kwargs):\n    \"\"\"Get netbox and interfaces based on search parameters\"\"\"\n    if 'interfaceid' in kwargs:\n        return _get_interface_and_netbox(request, kwargs['interfaceid'])\n    else:\n        return _get_netbox_and_ports(request, **kwargs)\n\n\ndef _get_interface_and_netbox(request, interfaceid):\n    \"\"\"Get single interface and its netbox\"\"\"\n    try:\n        interface = Interface.objects.get(id=interfaceid)\n        return interface.netbox, [interface]\n    except Interface.DoesNotExist as error:\n        _logger.error(\"Interface %s not found; DoesNotExist = %s\", interfaceid, error)\n        messages.error(request, f'Could not find interface with id {interfaceid}')\n        return None, None\n\n\ndef _get_netbox_and_ports(request, **kwargs):\n    \"\"\"Get netbox and all its ports\"\"\"\n    try:\n        netbox = Netbox.objects.get(**kwargs)\n    except Netbox.DoesNotExist as error:\n        _logger.error(\n            \"IP device %s not found; DoesNotExist = %s\",\n            kwargs.get('sysname') or kwargs.get('ip'),\n            error,\n        )\n        messages.error(request, 'Could not find IP device')\n        return None, None\n\n    if not netbox.type:\n        messages.error(request, 'IP device found but has no type')\n        return None, None\n\n    interfaces = netbox.get_swports_sorted()\n    if not interfaces:\n        messages.error(request, 'IP device has no ports (yet)')\n        return None, None\n\n    return netbox, interfaces\n\n\ndef _get_load_data_url(**kwargs):\n    \"\"\"Get the appropriate data loading URL\"\"\"\n    if 'sysname' in kwargs:\n        return reverse('portadmin-sysname-data', kwargs=kwargs)\n    elif 'ip' in kwargs:\n        return reverse('portadmin-ip-data', kwargs=kwargs)\n    elif 'interfaceid' in kwargs:\n        return reverse('portadmin-interface-data', kwargs=kwargs)\n    else:\n        raise ValueError(f\"Unsupported search parameter: {list(kwargs.keys())}\")\n\n\ndef load_portadmin_data_by_kwargs(request, **kwargs):\n    \"\"\"Load port data by keyword arguments\"\"\"\n    if 'interfaceid' in kwargs:\n        try:\n            interface = Interface.objects.select_related('netbox').get(\n                id=kwargs['interfaceid']\n            )\n        except Interface.DoesNotExist:\n            return HttpResponse(\n                '<div class=\"alert-box error\">Interface not found</div>'\n            )\n\n        netbox = interface.netbox\n        interfaces = [interface]\n    else:\n        try:\n            netbox = Netbox.objects.get(**kwargs)\n        except Netbox.DoesNotExist:\n            return HttpResponse(\n                '<div class=\"alert-box error\">IP device not found</div>'\n            )\n\n        interfaces = netbox.get_swports_sorted()\n        if not interfaces:\n            return HttpResponse(\n                '<div class=\"alert-box error\">No interfaces found</div>'\n            )\n\n    context = populate_infodict(request, netbox, interfaces)\n    return render(request, 'portadmin/portlist.html', context)\n\n\ndef populate_infodict(request, netbox, interfaces):\n    \"\"\"Populate a dictionary used in every http response\"\"\"\n    has_error, handler = _initialize_handler_and_error_state(\n        request, netbox, interfaces\n    )\n\n    allowed_vlans = []\n    voice_vlan = None\n    supports_poe = False\n    poe_options = []\n\n    if not has_error:\n        account = get_account(request)\n        allowed_vlans = find_and_populate_allowed_vlans(\n            account, netbox, interfaces, handler\n        )\n        voice_vlan = _setup_voice_vlan(request, netbox, interfaces, handler)\n        mark_detained_interfaces(interfaces)\n        _setup_dot1x_if_enabled(interfaces, handler)\n        supports_poe, poe_options = _setup_poe_if_supported(interfaces, handler)\n\n    save_to_database(interfaces)\n\n    auditlog_api_parameters = {\n        'object_model': 'interface',\n        'object_pks': ','.join([str(i.pk) for i in interfaces]),\n        'subsystem': 'portadmin',\n    }\n\n    context = {\n        'handlertype': type(handler).__name__,\n        'interfaces': interfaces,\n        'netbox': netbox,\n        'voice_vlan': voice_vlan,\n        'allowed_vlans': allowed_vlans,\n        'readonly': has_error,\n        'aliastemplate': _get_alias_template(),\n        'trunk_edit': CONFIG.get_trunk_edit(),\n        'auditlog_api_parameters': json.dumps(auditlog_api_parameters),\n        'supports_poe': supports_poe,\n        'poe_options': poe_options,\n    }\n\n    if handler:\n        context['handlertype'] = handler.__class__.__name__\n\n    return context\n\n\ndef _initialize_handler_and_error_state(request, netbox, interfaces):\n    \"\"\"Initialize management handler and determine error state\"\"\"\n    has_error = False\n    handler = None\n\n    try:\n        handler = get_and_populate_livedata(netbox, interfaces)\n        if handler and not handler.is_configurable():\n            add_readonly_reason(request, handler)\n            has_error = True\n    except NoResponseError:\n        has_error = True\n        messages.error(\n            request,\n            \"%s did not respond within the set timeouts. Values displayed are from \"\n            \"database\" % netbox.sysname,\n        )\n        if (\n            isinstance(handler, SNMPHandler)\n            and not netbox.get_preferred_snmp_management_profile()\n        ):\n            messages.error(request, \"Read only management profile not set\")\n    except ProtocolError:\n        has_error = True\n        messages.error(\n            request,\n            \"Protocol error when contacting %s. Values displayed are from database\"\n            % netbox.sysname,\n        )\n    except DeviceNotConfigurableError as error:\n        has_error = True\n        messages.error(request, str(error))\n    except ConnectRefusedError:\n        has_error = True\n        messages.error(\n            request,\n            \"Connection refused when contacting %s. Values displayed are from database\"\n            % netbox.sysname,\n        )\n    except Exception as error:  # noqa: BLE001\n        has_error = True\n        messages.error(\n            request,\n            \"Unknown error when contacting %s: %s. Values displayed are from database\"\n            % (netbox.sysname, error),\n        )\n\n    return has_error, handler\n\n\ndef _setup_voice_vlan(request, netbox, interfaces, handler):\n    \"\"\"Setup voice VLAN configuration\"\"\"\n    voice_vlan = fetch_voice_vlan_for_netbox(request, handler)\n    if voice_vlan:\n        if CONFIG.is_cisco_voice_enabled() and is_cisco(netbox):\n            set_voice_vlan_attribute_cisco(voice_vlan, interfaces, handler)\n        else:\n            set_voice_vlan_attribute(voice_vlan, interfaces)\n    return voice_vlan\n\n\ndef _setup_dot1x_if_enabled(interfaces, handler):\n    \"\"\"Setup dot1x information if enabled\"\"\"\n    if handler:\n        try:\n            add_dot1x_info(interfaces, handler)\n        except (NotImplementedError, ManagementError) as error:\n            _logger.debug('Dot1x not supported or error getting dot1x info: %s', error)\n\n\ndef _setup_poe_if_supported(interfaces, handler):\n    \"\"\"Setup PoE configuration if supported\"\"\"\n    supports_poe = False\n    poe_options = []\n\n    try:\n        poe_options = handler.get_poe_state_options()\n        add_poe_info(interfaces, handler)\n        supports_poe = any(interface.supports_poe for interface in interfaces)\n    except (XMLParseError, POEStateNotSupportedError) as error:\n        _logger.error(\n            'Error getting PoE information from IP device %s: %s',\n            handler.netbox,\n            error,\n        )\n    except NotImplementedError:\n        # Only Cisco and Juniper have PoE support currently\n        pass\n\n    return supports_poe, poe_options\n\n\ndef _get_alias_template():\n    \"\"\"Get the alias template rendered with the current ifaliasformat\"\"\"\n    ifaliasformat = CONFIG.get_ifaliasformat()\n    if not ifaliasformat:\n        return ''\n    tmpl = get_aliastemplate()\n    return tmpl.render({'ifaliasformat': ifaliasformat})\n\n\ndef fetch_voice_vlan_for_netbox(request: HttpRequest, handler: ManagementHandler):\n    \"\"\"Fetch the voice vlan for this netbox\n\n    There may be multiple voice vlans configured. Pick the one that exists\n    on this netbox. If multiple vlans exist, we cannot know which one to use.\n\n    \"\"\"\n    voice_vlans = CONFIG.fetch_voice_vlans()\n    if not voice_vlans:\n        return\n\n    voice_vlans_on_netbox = list(set(voice_vlans) & set(handler.get_netbox_vlan_tags()))\n    if not voice_vlans_on_netbox:\n        # Should this be reported? At the moment I do not think so.\n        return\n    if len(voice_vlans_on_netbox) > 1:\n        messages.error(request, 'Multiple voice vlans configured on this netbox')\n        return\n\n    return voice_vlans_on_netbox[0]\n\n\ndef set_voice_vlan_attribute(voice_vlan, interfaces):\n    \"\"\"Set an attribute on the interfaces to indicate voice vlan behavior\"\"\"\n    if voice_vlan:\n        for interface in interfaces:\n            if not interface.trunk:\n                continue\n            allowed_vlans = interface.swport_allowed_vlan.get_allowed_vlans()\n            interface.voice_activated = (\n                len(allowed_vlans) == 1 and voice_vlan in allowed_vlans\n            )\n\n\ndef set_voice_vlan_attribute_cisco(voice_vlan, interfaces, handler: ManagementHandler):\n    \"\"\"Set voice vlan attribute for Cisco voice vlan\"\"\"\n    voice_mapping = handler.get_cisco_voice_vlans()\n    for interface in interfaces:\n        voice_activated = voice_mapping.get(interface.ifindex) == voice_vlan\n        interface.voice_activated = voice_activated\n\n\ndef add_readonly_reason(request: HttpRequest, mgmt_handler: ManagementHandler):\n    \"\"\"Adds a message to the request's session, explaining why this device cannot be\n    configured through PortAdmin.\n    \"\"\"\n    try:\n        mgmt_handler.raise_if_not_configurable()\n    except DeviceNotConfigurableError as error:\n        messages.error(request, str(error))\n\n\ndef save_interfaceinfo(request):\n    \"\"\"Set ifalias and/or vlan on netbox\n\n    messages: created from the results from the messages framework\n\n    interfaceid must be a part of the request\n    ifalias, vlan and voicevlan are all optional\n\n    \"\"\"\n    if request.method == 'POST':\n        interface = Interface.objects.get(pk=request.POST.get('interfaceid'))\n        account = get_account(request)\n\n        # Skip a lot of queries if access_control is not turned on\n        if should_check_access_rights(account):\n            _logger.info('Checking access rights for %s', account)\n            if interface.vlan in [\n                v.vlan\n                for v in find_allowed_vlans_for_user_on_netbox(\n                    account, interface.netbox\n                )\n            ]:\n                set_interface_values(account, interface, request)\n            else:\n                # Should only happen if user tries to avoid gui restrictions\n                messages.error(request, 'Not allowed to edit this interface')\n        else:\n            set_interface_values(account, interface, request)\n    else:\n        messages.error(request, 'Wrong request type')\n\n    result = {\"messages\": build_ajax_messages(request)}\n    return response_based_on_result(result)\n\n\ndef set_interface_values(account, interface, request):\n    \"\"\"Configures an interface according to the values from the request\"\"\"\n\n    handler = get_management_handler(interface.netbox)\n\n    if handler:\n        # Order is important here, set_voice need to be before set_vlan\n        set_voice_vlan(handler, interface, request)\n        set_ifalias(account, handler, interface, request)\n        set_vlan(account, handler, interface, request)\n        set_admin_status(handler, interface, request)\n        set_poe_state(handler, interface, request)\n        save_to_database([interface])\n    else:\n        messages.info(request, 'Could not connect to netbox')\n\n\ndef set_poe_state(handler, interface, request):\n    if 'poe_state' in request.POST:\n        poe_state_name = request.POST.get('poe_state')\n        for option in handler.get_poe_state_options():\n            if option.name == poe_state_name:\n                handler.set_poe_state(interface, option)\n                return\n        # If there was no match between posted value and known states\n        raise ValueError(f\"Invalid PoE state name: {poe_state_name}\")\n\n\ndef build_ajax_messages(request):\n    \"\"\"Create a structure suitable for converting to json from messages\"\"\"\n    ajax_messages = []\n    for message in messages.get_messages(request):\n        ajax_messages.append(\n            {\n                'level': message.level,\n                'message': message.message,\n                'extra_tags': message.tags,\n            }\n        )\n    return ajax_messages\n\n\ndef set_ifalias(account, handler: ManagementHandler, interface, request):\n    \"\"\"Set ifalias on netbox if it is requested\"\"\"\n    if 'ifalias' in request.POST:\n        ifalias = request.POST.get('ifalias')\n        if check_format_on_ifalias(ifalias):\n            try:\n                handler.set_interface_description(interface, ifalias)\n                interface.ifalias = ifalias\n                LogEntry.add_log_entry(\n                    account,\n                    'set-ifalias',\n                    '{actor}: {object} - ifalias set to \"%s\"' % ifalias,\n                    subsystem='portadmin',\n                    object=interface,\n                )\n                _logger.info(\n                    '%s: %s:%s - ifalias set to \"%s\"',\n                    account.login,\n                    interface.netbox.get_short_sysname(),\n                    interface.ifname,\n                    ifalias,\n                )\n            except ManagementError as error:\n                _logger.error('Error setting port description: %s', error)\n                messages.error(request, \"Error setting port description: %s\" % error)\n        else:\n            messages.error(request, \"Wrong format on port description\")\n\n\ndef set_vlan(account, handler: ManagementHandler, interface, request):\n    \"\"\"Set vlan on netbox if it is requested\"\"\"\n    if 'vlan' in request.POST:\n        try:\n            vlan = int(request.POST.get('vlan'))\n        except ValueError:\n            messages.error(\n                request,\n                \"Ignoring request to set vlan={}\".format(request.POST.get('vlan')),\n            )\n            return\n\n        try:\n            if is_cisco(interface.netbox):\n                # If Cisco and trunk voice vlan (not Cisco voice vlan),\n                # we have to set native vlan instead of access vlan\n                voice_activated = request.POST.get('voice_activated', False)\n                if not CONFIG.is_cisco_voice_enabled() and voice_activated:\n                    handler.set_native_vlan(interface, vlan)\n                else:\n                    handler.set_vlan(interface, vlan)\n            else:\n                handler.set_vlan(interface, vlan)\n\n            interface.vlan = vlan\n            LogEntry.add_log_entry(\n                account,\n                'set-vlan',\n                '{actor}: {object} - vlan set to \"%s\"' % vlan,\n                subsystem='portadmin',\n                object=interface,\n            )\n            _logger.info(\n                '%s: %s:%s - vlan set to %s',\n                account.login,\n                interface.netbox.get_short_sysname(),\n                interface.ifname,\n                vlan,\n            )\n        except (ManagementError, TypeError) as error:\n            _logger.error('Error setting vlan: %s', error)\n            messages.error(request, \"Error setting vlan: %s\" % error)\n\n\ndef set_voice_vlan(handler: ManagementHandler, interface, request):\n    \"\"\"Set voicevlan on interface\n\n    A voice vlan is a normal vlan that is defined by the user of NAV as\n    a vlan that is used only for ip telephone traffic.\n\n    To set a voice vlan we have to make sure the interface is configured\n    to tag both the voicevlan and the \"access-vlan\".\n\n    \"\"\"\n    if 'voicevlan' in request.POST:\n        cdp_changed = False\n        voice_vlan = fetch_voice_vlan_for_netbox(request, handler)\n        use_cisco_voice_vlan = CONFIG.is_cisco_voice_enabled() and is_cisco(\n            interface.netbox\n        )\n        enable_cdp_for_cisco_voice_port = CONFIG.is_cisco_voice_cdp_enabled()\n\n        # Either the voicevlan is turned off or turned on\n        turn_on_voice_vlan = request.POST.get('voicevlan') == 'true'\n        account = get_account(request)\n        try:\n            if turn_on_voice_vlan:\n                if use_cisco_voice_vlan:\n                    handler.set_cisco_voice_vlan(interface, voice_vlan)\n                    if enable_cdp_for_cisco_voice_port:\n                        handler.enable_cisco_cdp(interface)\n                        cdp_changed = True\n                else:\n                    handler.set_interface_voice_vlan(interface, voice_vlan)\n                _logger.info(\n                    '%s: %s:%s - %s%s',\n                    account.login,\n                    interface.netbox.get_short_sysname(),\n                    interface.ifname,\n                    'voice vlan enabled',\n                    ', CDP enabled' if cdp_changed else '',\n                )\n            else:\n                if use_cisco_voice_vlan:\n                    handler.disable_cisco_voice_vlan(interface)\n                    if enable_cdp_for_cisco_voice_port:\n                        handler.disable_cisco_cdp(interface)\n                        cdp_changed = True\n                else:\n                    handler.set_access(interface, interface.vlan)\n                _logger.info(\n                    '%s: %s:%s - %s%s',\n                    account.login,\n                    interface.netbox.get_short_sysname(),\n                    interface.ifname,\n                    'voice vlan disabled',\n                    ', CDP disabled' if cdp_changed else '',\n                )\n        except (ManagementError, ValueError, NotImplementedError) as error:\n            messages.error(request, \"Error setting voicevlan: %s\" % error)\n\n\ndef set_admin_status(handler: ManagementHandler, interface, request: HttpRequest):\n    \"\"\"Set admin status for the interface\"\"\"\n    status_up = '1'\n    status_down = '2'\n    account = get_account(request)\n\n    if 'ifadminstatus' in request.POST:\n        adminstatus = request.POST['ifadminstatus']\n        try:\n            if adminstatus == status_up:\n                LogEntry.add_log_entry(\n                    account,\n                    'enable-interface',\n                    '{actor} enabled interface {object}',\n                    subsystem='portadmin',\n                    object=interface,\n                )\n                _logger.info(\n                    '%s: Setting ifadminstatus for %s to %s',\n                    account.login,\n                    interface,\n                    'up',\n                )\n                handler.set_interface_up(interface)\n            elif adminstatus == status_down:\n                LogEntry.add_log_entry(\n                    account,\n                    'disable-interface',\n                    '{actor} disabled interface {object}',\n                    subsystem='portadmin',\n                    object=interface,\n                )\n                _logger.info(\n                    '%s: Setting ifadminstatus for %s to %s',\n                    account.login,\n                    interface,\n                    'down',\n                )\n                handler.set_interface_down(interface)\n        except (ManagementError, ValueError) as error:\n            messages.error(request, \"Error setting ifadminstatus: %s\" % error)\n\n\ndef response_based_on_result(result):\n    \"\"\"Return response based on content of result\n\n    result: dict containing result and message keys\n\n    \"\"\"\n    if result['messages']:\n        return JsonResponse(result, status=400)\n    else:\n        return JsonResponse(result)\n\n\ndef render_trunk_edit(request, interfaceid):\n    \"\"\"Controller for rendering trunk edit view\"\"\"\n\n    interface = Interface.objects.get(pk=interfaceid)\n    handler = get_management_handler(interface.netbox)\n    if request.method == 'POST':\n        try:\n            handle_trunk_edit(request, handler, interface)\n        except ManagementError as error:\n            messages.error(request, 'Error editing trunk: %s' % error)\n        else:\n            messages.success(request, 'Trunk edit successful')\n\n    account = get_account(request)\n    netbox = interface.netbox\n    add_readonly_reason(request, handler)\n    try:\n        vlans = handler.get_netbox_vlans()  # All vlans on this netbox\n        native_vlan, trunked_vlans = handler.get_native_and_trunked_vlans(interface)\n    except ManagementError as error:\n        vlans = native_vlan = trunked_vlans = allowed_vlans = None\n        messages.error(request, 'Error getting trunk information: {}'.format(error))\n    else:\n        if should_check_access_rights(account):\n            allowed_vlans = find_allowed_vlans_for_user_on_netbox(\n                account, interface.netbox, handler\n            )\n        else:\n            allowed_vlans = vlans\n\n    extra_path = [\n        (\n            netbox.sysname,\n            reverse('portadmin-sysname', kwargs={'sysname': netbox.sysname}),\n        ),\n        (\"Trunk %s\" % interface,),\n    ]\n\n    context = get_base_context(extra_path)\n    context.update(\n        {\n            'interface': interface,\n            'available_vlans': vlans,\n            'native_vlan': native_vlan,\n            'trunked_vlans': trunked_vlans,\n            'allowed_vlans': allowed_vlans,\n            'trunk_edit': CONFIG.get_trunk_edit(),\n            'readonly': not handler.is_configurable(),\n        }\n    )\n\n    return render(request, 'portadmin/trunk_edit.html', context)\n\n\ndef handle_trunk_edit(request, agent, interface):\n    \"\"\"Edit a trunk\"\"\"\n\n    native_vlan = int(request.POST.get('native_vlan', 1))\n    trunked_vlans = [int(vlan) for vlan in request.POST.getlist('trunk_vlans')]\n\n    if should_check_access_rights(get_account(request)):\n        # A user can avoid the form restrictions by sending a forged post\n        # request Make sure only the allowed vlans are set\n\n        old_native, old_trunked = agent.get_native_and_trunked_vlans(interface)\n        allowed_vlans = [\n            v.vlan for v in find_allowed_vlans_for_user(get_account(request))\n        ]\n\n        trunked_vlans = filter_vlans(trunked_vlans, old_trunked, allowed_vlans)\n        native_vlan = native_vlan if native_vlan in allowed_vlans else old_native\n\n    _logger.info(\n        'Interface %s - native: %s, trunk: %s', interface, native_vlan, trunked_vlans\n    )\n    account = get_account(request)\n    LogEntry.add_log_entry(\n        account,\n        'set-vlan',\n        '{actor}: {object} - native vlan: \"%s\", trunk vlans: \"%s\"'\n        % (native_vlan, trunked_vlans),\n        subsystem='portadmin',\n        object=interface,\n    )\n\n    if trunked_vlans:\n        agent.set_trunk(interface, native_vlan, trunked_vlans)\n    else:\n        agent.set_access(interface, native_vlan)\n    if CONFIG.is_commit_enabled():\n        agent.commit_configuration()\n\n\n@require_POST\ndef restart_interfaces(request):\n    \"\"\"Restart the interface by setting admin status to down and up\"\"\"\n    if not CONFIG.is_restart_interface_enabled():\n        _logger.debug(\"Not doing a restart of interfaces, it is configured off\")\n        return HttpResponse()\n\n    interfaceids = request.POST.getlist(\n        \"interfaceid\", request.POST.getlist(\"interfaceid[]\")\n    )\n    if not interfaceids:\n        return HttpResponse(status=400, content=b\"Missing interfaceid argument\")\n    interfaces = Interface.objects.filter(pk__in=interfaceids).select_related(\"netbox\")\n    if not interfaces:\n        return HttpResponse(status=400, content=b\"No interfaces selected\")\n    netboxes = set(i.netbox for i in interfaces)\n    if len(netboxes) > 1:\n        return HttpResponse(\n            status=400, content=b\"Can't restart interfaces from different netboxes\"\n        )\n    netbox = list(netboxes)[0]\n\n    handler = get_management_handler(netbox)\n    if handler:\n        try:\n            # Restart interface so that clients fetch new addresses\n            handler.cycle_interfaces(interfaces)\n        except NoResponseError:\n            # Failures aren't grossly important here, we ignore them\n            pass\n        return HttpResponse()\n    else:\n        return HttpResponse(status=500, content=b\"Could not create management handler\")\n\n\n@require_POST\ndef commit_configuration(request):\n    \"\"\"Commit pending config changes to startup config\"\"\"\n    if not CONFIG.is_commit_enabled():\n        _logger.debug('Not doing a configuration commit, it is configured off')\n        return HttpResponse(\"Configuration commit is configured to not be done\")\n\n    interface = get_object_or_404(Interface, pk=request.POST.get('interfaceid'))\n\n    handler = get_management_handler(interface.netbox)\n    if handler:\n        try:\n            handler.commit_configuration()\n        except ManagementError as error:\n            error_message = 'Error committing configuration on {}: {}'.format(\n                handler.netbox, error\n            )\n            _logger.error(error_message)\n            return HttpResponse(error_message, status=503)\n        except (AttributeError, NotImplementedError):\n            error_message = 'Error committing configuration on {}: {}'.format(\n                handler.netbox, 'Configuration commit not supported'\n            )\n            _logger.error(error_message)\n            return HttpResponse(error_message, status=503)\n\n        return HttpResponse()\n    else:\n        error_message = 'Could not obtain management handler for {}'.format(\n            interface.netbox\n        )\n        _logger.error(error_message)\n        return HttpResponse(error_message, status=503)\n\n\ndef get_management_handler(netbox: Netbox) -> ManagementHandler:\n    \"\"\"Gets a ManagementHandler instance from the ManagementFactory\"\"\"\n    timeout = CONFIG.getfloat(\"general\", \"timeout\", fallback=3)\n    retries = CONFIG.getint(\"general\", \"retries\", fallback=3)\n\n    try:\n        return ManagementFactory.get_instance(netbox, timeout=timeout, retries=retries)\n    except ManagementError as error:\n        _logger.error('Error getting ManagementHandler instance %s: %s', netbox, error)\n"
  },
  {
    "path": "python/nav/web/radius/__init__.py",
    "content": "\"\"\"radius\n\nA web interface to make browseable/searchable radius accounting data.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/radius/db.py",
    "content": "import re\nimport time\nimport uuid\nfrom collections import namedtuple\nfrom socket import gethostbyname_ex, gaierror\n\nfrom django.db import connection, transaction\nfrom twisted.names.dns import Message, Query\n\nfrom nav.asyncdns import reverse_lookup\nfrom .radius_config import (\n    DATEFORMAT_SEARCH,\n    LOG_SEARCHRESULTFIELDS,\n    ACCT_DETAILSFIELDS,\n    LOG_DETAILFIELDS,\n    ACCT_TABLE,\n    LOG_TABLE,\n)\n\nfrom . import radiuslib\n\n\ndef get_named_cursor():\n    \"\"\"\n    This function returns a named cursor, which speeds up queries\n    returning large result sets immensely by caching them on the\n    server side.\n\n    This is not yet supported by Django itself.\n    \"\"\"\n    # This is required to populate the connection object properly\n    if connection.connection is None:\n        connection.cursor()\n\n    # Prefixing the name to ensure that it starts with a letter.\n    # Needed for psycopg2.2 compatibility\n    name = 'nav{0}'.format(str(uuid.uuid4()).replace('-', ''))\n\n    cursor = connection.connection.cursor(name=name)\n    return cursor\n\n\nclass SQLQuery(object):\n    \"\"\"\n    Superclass for other query classes.\n    \"\"\"\n\n    query = None\n    parameters = None\n    result = None\n    result_tuple = None\n\n    def execute(self):\n        cursor = get_named_cursor()\n        with transaction.atomic():\n            cursor.execute(self.query, self.parameters)\n            self.result = [self.result_tuple._make(self._format(row)) for row in cursor]\n\n    def _format(self, row):\n        \"\"\"\n        Subclasses should override this method\n        if the data need to be formatted for display\n        purposes.\n        \"\"\"\n        return row\n\n\nclass LogDetailQuery(SQLQuery):\n    \"\"\"\n    Get all details about specified log entry\n    \"\"\"\n\n    def __init__(self, logid, fields=LOG_DETAILFIELDS):\n        \"\"\"\n        Construct SQL query\n\n        Keyword arguments:\n        logid   - ID of the log entry we want to get details on.\n        \"\"\"\n\n        self.result_tuple = namedtuple('LogDetailQueryResult', fields)\n\n        self.logid = logid\n\n        self.query = \"\"\"SELECT\n                        %s\n                        FROM %s\n                        WHERE id = %%s\n                     \"\"\" % (\n            ','.join(fields),\n            LOG_TABLE,\n        )\n        self.parameters = (self.logid,)\n\n    def _format(self, row):\n        try:\n            message = row[LOG_DETAILFIELDS.index('message')]\n            return map(\n                lambda x: (\n                    x if x != message else x.replace('[', '[<b>').replace(']', '</b>]')\n                ),\n                row,\n            )\n        except ValueError:\n            return row\n\n\nclass LogSearchQuery(SQLQuery):\n    \"\"\"\n    Get search result\n    \"\"\"\n\n    def __init__(\n        self,\n        searchstring,\n        searchtype,\n        logentrytype,\n        timemode,\n        timestamp,\n        timestampslack,\n        hours,\n        sortfield,\n        sortorder,\n        fields=LOG_SEARCHRESULTFIELDS,\n    ):\n        \"\"\"\n        Construct search query from user input\n        \"\"\"\n\n        if 'id' not in fields:\n            fields_extended = ['id']\n            fields_extended.extend(list(fields))\n            fields = fields_extended\n\n        self.result_tuple = namedtuple('LogSearchQueryResult', fields)\n\n        # Make \"*\" wildcard character\n        if searchstring:\n            searchstring = searchstring.lower().replace(\"*\", \"%\")\n\n        self.query = \"\"\"SELECT\n                     %s\n                     FROM %s\n                     \"\"\" % (\n            ','.join(fields),\n            LOG_TABLE,\n        )\n\n        if (searchstring and searchstring != \"%\") or logentrytype or timemode:\n            self.query += \" WHERE\"\n\n        # Contains all parameters we want to escape\n        self.parameters = ()\n\n        # Check what we are searching for. It's either a username, realm,\n        # or an IP address/hostname. If searching for all users, skip this\n        # where clause all together.\n        if searchstring and searchstring != \"%\":\n            self.query += \" LOWER(%s) LIKE %%s\" % searchtype\n            self.parameters += (searchstring.lower(),)\n\n        if logentrytype:\n            if searchstring and searchstring != \"%\":\n                self.query += \" AND \"\n            self.query += \" LOWER(type) LIKE %%s\" % ()\n            self.parameters += (logentrytype.lower(),)\n\n        # Searching for entries in a specified time interval.\n        if timemode:\n            # If we have already specified some criteria, we need to AND\n            # it with this time interval search\n            if self.query.find(\"WHERE\", 0, -5) != -1:\n                self.query += \" AND \"\n\n            if timemode == \"hours\":\n                # Search for entries active from x*24 hours ago, until now.\n                searchtime = float(hours) * 3600\n                searchstart = time.strftime(\n                    DATEFORMAT_SEARCH, time.localtime(time.time() - searchtime)\n                )\n\n                self.query += \" (time >= timestamp '%s') \" % searchstart\n\n            if timemode == \"timestamp\":\n                if not timestampslack:\n                    timestampslack = 0\n\n                # Search for entries between (given timestamp - slack)\n                # and (given timestamp + slack)\n                unixtimestamp = time.mktime(time.strptime(timestamp, DATEFORMAT_SEARCH))\n                searchstart = time.strftime(\n                    DATEFORMAT_SEARCH,\n                    time.localtime(unixtimestamp - (int(timestampslack) * 60)),\n                )\n                searchstop = time.strftime(\n                    DATEFORMAT_SEARCH,\n                    time.localtime(unixtimestamp + (int(timestampslack) * 60)),\n                )\n\n                self.query += \"\"\" (\n                        -- Finding sessions that ended within our interval\n                        time BETWEEN timestamp '%(searchstart)s'\n                            AND timestamp '%(searchstop)s'\n                        ) \"\"\" % {\n                    \"searchstart\": searchstart,\n                    \"searchstop\": searchstop,\n                }\n\n        self.query += \" ORDER BY %(sortfield)s %(sortorder)s\" % {\n            \"sortfield\": sortfield,\n            \"sortorder\": sortorder,\n        }\n\n    def _format(self, row):\n        try:\n            message = row[LOG_SEARCHRESULTFIELDS.index('message')]\n            return map(\n                lambda x: (\n                    x if x != message else x.replace('[', '[<b>').replace(']', '</b>]')\n                ),\n                row,\n            )\n        except ValueError:\n            return row\n\n\nclass AcctSearchQuery(SQLQuery):\n    \"\"\"\n    Get search result\n    \"\"\"\n\n    result_tuple = namedtuple(\n        'AccountSearchQueryResult',\n        (\n            'radacctid',\n            'acctuniqueid',\n            'username',\n            'realm',\n            'framedipaddress',\n            'nasipaddress',\n            'nasporttype',\n            'acctstarttime',\n            'acctstoptime',\n            'acctsessiontime',\n            'acctoutputoctets',\n            'acctinputoctets',\n        ),\n    )\n\n    def __init__(\n        self,\n        searchstring,\n        searchtype,\n        nasporttype,\n        timemode,\n        timestamp,\n        timestampslack,\n        days,\n        userdns,\n        nasdns,\n        sortfield,\n        sortorder,\n    ):\n        \"\"\"\n        Construct search query from user input\n        \"\"\"\n\n        # Make \"*\" wildcard character\n        if searchstring:\n            searchstring = searchstring.lower().replace(\"*\", \"%\")\n\n        self.userdns = userdns\n        self.nasdns = nasdns\n        self.ips_to_lookup = set()\n\n        self.query = (\n            \"\"\"(SELECT\n                        radacctid,\n                        acctuniqueid,\n                        username,\n                        realm,\n                        framedipaddress,\n                        nasipaddress,\n                        nasporttype,\n                        acctstarttime,\n                        acctstoptime,\n                        acctsessiontime,\n                        acctoutputoctets,\n                        acctinputoctets\n                        FROM %s\n                        \"\"\"\n            % ACCT_TABLE\n        )\n\n        if (searchstring and searchstring != \"%\") or nasporttype or timemode:\n            self.query += \" WHERE\"\n\n        # Contains all parameters we want to escape\n        self.parameters = ()\n\n        # Check what we are searching for. It's either a username, realm,\n        # or an IP address/hostname. If searching for all users, skip this\n        # where clause all together.\n        if (searchtype == \"username\" or searchtype == \"realm\") and searchstring != \"%\":\n            self.query += \" LOWER(%s) LIKE %%s\" % searchtype\n            self.parameters += (searchstring,)\n\n        # Address\n        if searchtype == \"framedipaddress\" or searchtype == \"nasipaddress\":\n            # Split search string into hostname and, if entered, cisco nas\n            # port.\n            match = re.search(\n                r\"^(?P<host>[[a-zA-Z0-9\\.\\-]+)[\\:\\/]{0,1}\" r\"(?P<swport>[\\S]+){0,1}$\",\n                searchstring,\n            )\n            # Get all ip addresses, if a hostname is entered\n            try:\n                addresses = gethostbyname_ex(match.group(\"host\"))[2]\n            except (AttributeError, gaierror):\n                # AttributeError triggered when regexp found no match, and\n                # thus is None\n                addresses = [\"255.255.255.255\"]\n\n            self.query += \" (\"\n            for address in addresses:\n                self.query += \"%s = INET(%%s)\" % searchtype\n                self.parameters += (address,)\n                if address != addresses[-1]:\n                    self.query += \" OR \"\n            self.query += \")\"\n\n            # Search for Cisco NAS port, if it has been entered\n            if match.group(\"swport\"):\n                self.query += \" AND LOWER(cisconasport) = %s\"\n                self.parameters += tuple(match.group(\"swport\").lower().split())\n\n        if searchtype == \"iprange\":\n            if searchstring.find('%'):\n                if re.search('/32', searchstring):\n                    self.query += \" (%s = INET(%%s) OR %s = INET(%%s))\" % (\n                        'framedipaddress',\n                        'nasipaddress',\n                    )\n                    self.parameters += (searchstring[:-3], searchstring[:-3])\n                else:\n                    self.query += \" (%s << INET(%%s) OR %s = INET(%%s))\" % (\n                        'framedipaddress',\n                        'nasipaddress',\n                    )\n                    self.parameters += (searchstring, searchstring)\n\n        if nasporttype:\n            if nasporttype.lower() == \"isdn\":\n                nasporttype = \"ISDN\"\n            if nasporttype.lower() == \"vpn\":\n                nasporttype = \"Virtual\"\n            if nasporttype.lower() == \"modem\":\n                nasporttype = \"Async\"\n            if nasporttype.lower() == \"dot1x\":\n                nasporttype = \"Ethernet\"\n            else:\n                if searchstring != \"%\":\n                    self.query += \" AND \"\n\n                self.query += \" nasporttype = %s\"\n                self.parameters += (nasporttype,)\n\n        # Searching for entries in a specified time interval.\n        #\n        # This might be a bit confusing, so I'll try to explain..\n        #\n        # First, some notes about the accounting entries:\n        # 1) All entries have a date+time in the 'acctstarttime' field.\n        # 2) All entries does not necessarily have an entry in 'acctstoptime'\n        # 3) All entries for sessions that have lasted longer than the\n        #    re-authentication-interval, have an integer value in the\n        #    'acctsessiontime' field.\n        # 4) Since the date in 'acctstarttime' is actually just the time\n        #    when freeradius received EITHER a Start message, or an Alive\n        #    message with a Acct-Unique-Session-Id that wasn't in the\n        #    database, a session can have started prior to the 'acctstarttime'\n        #    Thus if 'acctstoptime' != NULL, we might have actually gotten a\n        #    Stop message with an Acct-Session-Time that tells ut how long the\n        #    session has really lasted. We can therefore extract the real\n        #    starting time by subtracting 'acctsessiontime' from\n        #    'acctstoptime'\n        # 5) To match entries for sessions that have not yet ended, we have to\n        #    add 'acctsessiontime' to 'acctstarttime'\n        #    and see if the resulting time interval touches our search\n        #    interval.\n\n        if timemode:\n            # If we have already specified some criteria, we need to AND\n            # it with the date search\n            if self.query.find(\"WHERE\", 0, -5) != -1:\n                self.query += \" AND \"\n\n            if timemode == \"days\":\n                # Search for entries active from x*24 hours ago, until now.\n                searchtime = float(days) * 86400\n                searchstart = time.strftime(\n                    DATEFORMAT_SEARCH, time.localtime(time.time() - searchtime)\n                )\n                # searchstop = time.strftime(DATEFORMAT_SEARCH,\n                # time.localtime(time.time()))\n\n                # Ok, let's make this really hairy. We want to separate the\n                # following clauses into two queries, which we then UNION\n                # together. This is done to be able to utilize the indices.\n                # For some reason postgres doesn't use the indices when we\n                # OR all three of these clauses together.\n                tmp_where_clause = \"\"\n                tmp_where_clause += \"\"\"\n                    (\n                    (   -- Finding sessions that ended within our interval\n                        acctstoptime >= timestamp '%(searchstart)s'\n                    ) OR (\n                        -- Finding sessions that started within our interval\n                        acctstarttime >= timestamp '%(searchstart)s')\n                    )\n                    )\n                    UNION \"\"\" % {\"searchstart\": searchstart}\n                self.query += tmp_where_clause + self.query\n                self.parameters += self.parameters\n                self.query += \"\"\"\n\n                    (\n                        -- Find sessions without acctstoptime, but where\n                        -- acctstarttime+acctsessiontime is in our interval\n                        (acctstoptime is NULL AND\n                        (acctstarttime + (acctsessiontime * interval '1 sec'\n                        )) >= timestamp '%(searchstart)s')\n                    )\n                                \"\"\" % {\"searchstart\": searchstart}\n\n            if timemode == \"timestamp\":\n                if timestampslack == \"\":\n                    timestampslack = 0\n\n                # Search for entries between (given timestamp -\n                # timestampslack) and (given timestamp + timestampslack)\n                unixtimestamp = time.mktime(time.strptime(timestamp, DATEFORMAT_SEARCH))\n                searchstart = time.strftime(\n                    DATEFORMAT_SEARCH,\n                    time.localtime(unixtimestamp - (int(timestampslack) * 60)),\n                )\n                searchstop = time.strftime(\n                    DATEFORMAT_SEARCH,\n                    time.localtime(unixtimestamp + (int(timestampslack) * 60)),\n                )\n\n                # We pull the same trick here as in the section where\n                # timemode == \"days\", and UNION two queries together, to\n                # make use of the indices.\n\n                self.query += \"\"\" (\n            (\n\n                    -- Finding sessions that ended within our interval\n                    acctstoptime BETWEEN timestamp '%(searchstart)s'\n                        AND timestamp '%(searchstop)s'\n            ) OR (\n                    -- Finding sessions that started within our interval\n                    acctstarttime BETWEEN timestamp '%(searchstart)s'\n                        AND timestamp '%(searchstop)s'\n            ) OR (\n                    -- Finding sessions that seems to have started after our\n                    -- interval, but where acctsessiontime reveals that our\n                    -- registered acctstarttime wasn't the actual starttime\n                    (acctstarttime >= timestamp '%(searchstop)s')\n                    AND\n                    (acctstoptime-(acctsessiontime * interval '1 sec')\n                        <= timestamp  '%(searchstop)s')\n            ) OR (\n                    -- Finding sessions that started before our interval\n                    (acctstarttime <= timestamp '%(searchstop)s')\n                    AND (\n                            -- .. and either stopped inside or after our\n                            -- interval\n                            (acctstoptime >= timestamp '%(searchstart)s')\n                            -- .. or where the starttime+acctsessiontime\n                            -- reveals that\n                            -- this session was active in the interval\n                            OR (acctstoptime is NULL\n                                AND (acctstarttime+(acctsessiontime *\n                                    interval '1 sec')\n                                        >= timestamp '%(searchstart)s')\n                                    )\n                        )\n                )\n            )\n            \"\"\" % {\n                    \"searchstart\": searchstart,\n                    \"searchstop\": searchstop,\n                }\n\n        self.query += \")\"  # End select\n        self.query += \" ORDER BY %(sortfield)s %(sortorder)s\" % {\n            \"sortfield\": sortfield,\n            \"sortorder\": sortorder,\n        }\n\n    def execute(self):\n        super(AcctSearchQuery, self).execute()\n        if self.ips_to_lookup:\n            lookup_result = reverse_lookup(self.ips_to_lookup)\n\n            self.result = [\n                self._replace_ip_with_hostname(result, lookup_result)\n                for result in self.result\n            ]\n\n    def make_stats(self):\n        sessionstats = set()\n        total_time, total_sent, total_received = 0, 0, 0\n\n        for row in self.result:\n            if row.acctuniqueid not in sessionstats and row.acctsessiontime:\n                sessionstats.add(row.acctuniqueid)\n\n                total_time += row.acctsessiontime\n                total_sent += row.acctinputoctets\n                total_received += row.acctoutputoctets\n\n        return total_time, total_sent, total_received\n\n    def _format(self, row):\n        if self.userdns and row[4]:\n            self.ips_to_lookup.add(row[4])\n        if self.nasdns and row[5]:\n            self.ips_to_lookup.add(row[5])\n\n        acctstarttime = radiuslib.remove_fractions(row[7])\n\n        acctstoptime = radiuslib.calculate_stop_time(row[7], row[8], row[9])\n\n        return (\n            row[0],\n            row[1],\n            row[2],\n            row[3],\n            row[4],\n            row[5],\n            row[6],\n            acctstarttime,\n            acctstoptime,\n            row[9],\n            row[10],\n            row[11],\n        )\n\n    def _replace_ip_with_hostname(self, result, lookup_result):\n        useraddr = (\n            lookup_result.get(result.framedipaddress, [''])[0]\n            if self.userdns\n            else result.framedipaddress\n        )\n        nasaddr = (\n            lookup_result.get(result.nasipaddress, [''])[0]\n            if self.nasdns\n            else result.nasipaddress\n        )\n\n        # TODO: Maybe we can show the user something more informative\n        if isinstance(useraddr, Message) or isinstance(useraddr, Query):\n            useraddr = ''\n        if isinstance(nasaddr, Message) or isinstance(useraddr, Query):\n            nasaddr = ''\n\n        return result._replace(framedipaddress=useraddr, nasipaddress=nasaddr)\n\n\nclass AcctDetailQuery(SQLQuery):\n    \"\"\"\n    Get all details about a specified session\n    \"\"\"\n\n    _host_cache = radiuslib.HostCache()\n\n    def __init__(self, rad_acct_id, fields=ACCT_DETAILSFIELDS):\n        \"\"\"\n        Construct SQL query\n\n        \"\"\"\n\n        self.result_tuple = namedtuple('AccountDetailQueryResult', ACCT_DETAILSFIELDS)\n\n        self.rad_acct_id = rad_acct_id\n\n        self.query = \"\"\"\n            SELECT %s FROM %s\n            WHERE radacctid = %%s\"\"\" % (\n            ','.join(fields),\n            ACCT_TABLE,\n        )\n\n        self.parameters = (self.rad_acct_id,)\n\n    def _format(self, row):\n        fields = dict(zip(ACCT_DETAILSFIELDS, row))\n\n        if 'nasipaddress' in fields:\n            field = fields['nasipaddress']\n            fields['nasipaddress'] = '%s (%s)' % (\n                field,\n                self._host_cache.lookup_ip_address(field),\n            )\n        if 'framedipaddress' in fields:\n            field = fields['framedipaddress']\n            fields['framedipaddress'] = '%s (%s)' % (\n                field,\n                self._host_cache.lookup_ip_address(field),\n            )\n        if 'acctstoptime' in fields:\n            start = fields['acctstarttime']\n            stop = fields['acctstoptime']\n            session = fields['acctsessiontime']\n            fields['acctstoptime'] = radiuslib.calculate_stop_time(start, stop, session)\n        if 'acctsessiontime' in fields:\n            fields['acctsessiontime'] = radiuslib.humanize_time(\n                fields['acctsessiontime']\n            )\n        if 'acctoutputoctets' in fields:\n            fields['acctoutputoctets'] = radiuslib.humanize_bytes(\n                fields['acctoutputoctets']\n            )\n        if 'acctinputoctets' in fields:\n            fields['acctinputoctets'] = radiuslib.humanize_bytes(\n                fields['acctinputoctets']\n            )\n\n        # dict does not preserve order so we cant use dict.values()\n        return tuple([fields[field] for field in ACCT_DETAILSFIELDS])\n\n\nclass AcctChartsQuery(SQLQuery):\n    \"\"\"\n    Get top bandwidth hogs for specified period,\n\n    Can generate SQL queries for top uploaders, top downloaders, and top\n    overall bandwidth (ab)users\n    \"\"\"\n\n    result_tuple = namedtuple(\n        'AccountChartsQueryResult',\n        (\n            'username',\n            'realm',\n            'sortfield',\n            'acctsessiontime',\n            'fieldisnull',\n        ),\n    )\n\n    def __init__(self, chart, days=None, topx=\"10\"):\n        \"\"\"\n        Construct query\n\n        Keyword arguments:\n        chart       - \"sent\", \"recv\" or \"sentrecv\" for top upload, top\n                      download and top overall, respectively.\n        days        - How many of the last days we want chart for\n        topx        - Tells the query how many users to return (default 10).\n        \"\"\"\n\n        if chart == \"sent\":\n            field = \"acctinputoctets\"\n            self.table_title = 'Uploaders'\n        if chart == \"recv\":\n            field = \"acctoutputoctets\"\n            self.table_title = 'Downloaders'\n        if chart == \"sentrecv\":\n            field = \"acctoutputoctets+acctinputoctets\"\n            self.table_title = 'Bandwidth Hogs (Upload+Downloads)'\n        if not days:\n            days = \"7\"\n\n        # In this SQL query, we sum up some fields in the database according\n        # to what kind of chart we are making,\n        #\n        # Since freeradius (v1.0.4) has a tendency to insert some sessions\n        # twice in the database, we eliminate this in the nested select-query,\n        # by just working on entries with distinct acctuniqueid fields. The\n        # two entries should be pretty much identical anyway. By \"pretty much\n        # identical\", I mean exatcly identical, except for acctstarttime,\n        # which probably differs by a few hundreds of a second, and doesn't\n        # make any real difference here anyway.\n        if chart == \"sent\" or chart == \"recv\" or chart == \"sentrecv\":\n            self.query = \"\"\"\n                    SELECT\n                    username,\n                    realm,\n                    CAST(SUM(%s) as BIGINT) AS sortfield,\n                    CAST(SUM(acctsessiontime) AS BIGINT) as acctsessiontime,\n                    SUM(%s) IS NULL as fieldisnull\n                    FROM\n                        (SELECT DISTINCT\n                            acctuniqueid,\n                            acctinputoctets,\n                            acctoutputoctets,\n                            username,\n                            acctsessiontime,\n                            realm\n                            FROM %s\n                            WHERE acctstoptime > NOW()-interval '%s days')\n                        as elminatedupes\n                    GROUP BY username, realm\n                    ORDER BY fieldisnull, sortfield DESC\n                    LIMIT %s\n                    \"\"\" % (\n                field,\n                field,\n                ACCT_TABLE,\n                days,\n                topx,\n            )\n\n            self.parameters = ()\n"
  },
  {
    "path": "python/nav/web/radius/forms.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for the radius tool\"\"\"\n\nfrom datetime import datetime\n\nfrom django import forms\nfrom django.core.validators import validate_ipv4_address\nfrom django.core.validators import validate_integer as django_validate_integer\n\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FormColumn,\n    FormRow,\n    SubmitField,\n)\n\nfrom nav.util import is_valid_cidr\n\nfrom ..utils import validate_timedelta_for_overflow\n\n\ndef validate_integer(value):\n    \"\"\"Validator for integer\"\"\"\n    try:\n        django_validate_integer(value)\n    except forms.ValidationError:\n        raise forms.ValidationError('Must be a number!')\n\n\ndef validate_cidr(value):\n    \"\"\"Validator for cidr xxx.xxx.xxx.xxx/xx\"\"\"\n    if not value or not is_valid_cidr(value):\n        raise forms.ValidationError('Must be a valid CIDR address!')\n\n\ndef validate_datetime_with_slack(value):\n    \"\"\"Validates a timestamp with or without slack\"\"\"\n    try:\n        values = value.split('|')\n        time = values[0]\n        slack = 0\n        if len(values) > 1:\n            slack = values[1]\n        datetime.strptime(time, '%Y-%m-%d %H:%M')\n        int(slack)\n    except (ValueError, TypeError):\n        raise forms.ValidationError('Must be of this format YYYY-MM-DD hh:mm|slack')\n\n\nclass MultitypeQueryWidget(forms.MultiWidget):\n    \"\"\"\n    Widget for MultitypeQueryField\n    \"\"\"\n\n    def decompress(self, value):\n        return [value]\n\n    def format_output(self, rendered_widgets):\n        \"\"\"Place the assumed two widgets side by side\"\"\"\n        output = \"\"\"<div class=\"row collapse\">\n        <div class=\"medium-6 column\">{0:s}</div>\n        <div class=\"medium-6 column\">{1:s}</div>\n        </div>\"\"\".format(*rendered_widgets)\n        return output\n\n\nclass MultitypeQueryField(forms.MultiValueField):\n    \"\"\"\n    Field that accepts a text query and a query type\n    input, and validates the query according to the type.\n    \"\"\"\n\n    def __init__(self, choices, validators, *args, **kwargs):\n        \"\"\"\n        :param validators:  A dict that maps query type\n        values to validators.\n        \"\"\"\n        if validators is None:\n            validators = {}\n        # Prevent Django from affecting \"required\" by setting the fields\n        # ourselves\n        super(MultitypeQueryField, self).__init__(fields=(), *args, **kwargs)\n        self.fields = (\n            forms.ChoiceField(choices=choices),\n            forms.CharField(min_length=1),\n        )\n        self.widget = MultitypeQueryWidget(\n            (forms.Select(choices=choices), forms.TextInput())\n        )\n        self.query_validators = validators\n\n    def validate(self, value):\n        query = value[1]\n        query_type = value[0]\n        if query_type in self.query_validators:\n            self.query_validators[query_type](query)\n\n    def compress(self, data_list):\n        return data_list\n\n\nclass ErrorLogSearchForm(forms.Form):\n    \"\"\"Form for searching in radius error log\"\"\"\n\n    QUERY_TYPES = (\n        ('username', 'Username'),\n        ('client', 'Client'),\n        ('port', 'Port'),\n        ('message', 'Message'),\n    )\n    TIME_TYPES = (\n        ('hours', 'Hour(s)'),\n        ('timestamp', 'Timespan'),\n        ('', 'All time'),\n    )\n    LOG_ENTRY_TYPES = (\n        ('', 'All'),\n        ('auth', 'Auth'),\n        ('error', 'Error'),\n        ('info', 'Info'),\n        ('proxy', 'Proxy'),\n    )\n    query = MultitypeQueryField(\n        QUERY_TYPES, validators={'port': validate_integer}, label='Search for'\n    )\n    log_entry_type = forms.ChoiceField(required=False, choices=LOG_ENTRY_TYPES)\n    time = MultitypeQueryField(\n        TIME_TYPES,\n        validators={\n            'hours': validate_integer,\n            'timestamp': validate_datetime_with_slack,\n        },\n        required=False,\n        label='Time options',\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(ErrorLogSearchForm, self).__init__(*args, **kwargs)\n        css_class = 'medium-4'\n        self.attrs = set_flat_form_attributes(\n            form_method='get',\n            form_class='custom',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['query']], css_classes=css_class),\n                        FormColumn(\n                            fields=[self['log_entry_type']], css_classes=css_class\n                        ),\n                        FormColumn(fields=[self['time']], css_classes=css_class),\n                    ]\n                ),\n                SubmitField(name='send', value='Search', css_classes='small'),\n            ],\n        )\n\n    def clean_time(self):\n        if self.cleaned_data[\"time\"]:\n            time_type, time = self.cleaned_data[\"time\"]\n            if time_type == \"hours\":\n                validate_timedelta_for_overflow(hours=int(time))\n            return time\n\n\nclass AccountLogSearchForm(forms.Form):\n    \"\"\"Form for searching in the radius account log\"\"\"\n\n    QUERY_TYPES = (\n        ('username', 'Username'),\n        ('framedipaddress', 'User Hostname/IP Address'),\n        ('nasipaddress', 'IP Address'),\n        ('iprange', 'IP-range'),\n    )\n    TIME_TYPES = (\n        ('days', 'Day(s)'),\n        ('timestamp', 'Timespan'),\n        ('', 'All time'),\n    )\n    PORT_TYPES = (\n        ('', 'All'),\n        ('dot1x', '.1x'),\n        ('isdn', 'ISDN'),\n        ('modem', 'Modem'),\n        ('vpn', 'VPN'),\n    )\n    DNS_LOOKUPS = (\n        ('userdns', 'User IP'),\n        ('nasdns', 'NAS IP'),\n    )\n    query = MultitypeQueryField(\n        QUERY_TYPES,\n        validators={'nasipaddress': validate_ipv4_address, 'iprange': validate_cidr},\n        label='Search for',\n    )\n    time = MultitypeQueryField(\n        TIME_TYPES,\n        validators={\n            'days': validate_integer,\n            'timestamp': validate_datetime_with_slack,\n        },\n        required=False,\n        label='Time options',\n    )\n    port_type = forms.ChoiceField(required=False, choices=PORT_TYPES)\n    dns_lookup = forms.MultipleChoiceField(\n        widget=forms.CheckboxSelectMultiple, required=False, choices=DNS_LOOKUPS\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(AccountLogSearchForm, self).__init__(*args, **kwargs)\n        css_class_large = 'large-4 medium-6'\n        css_class_small = 'large-2 medium-6'\n        self.attrs = set_flat_form_attributes(\n            form_method='get',\n            form_class='custom',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['query']], css_classes=css_class_large),\n                        FormColumn(fields=[self['time']], css_classes=css_class_large),\n                        FormColumn(\n                            fields=[self['port_type']], css_classes=css_class_small\n                        ),\n                        FormColumn(\n                            fields=[self['dns_lookup']], css_classes=css_class_small\n                        ),\n                    ]\n                ),\n                SubmitField(name='send', value='Search', css_classes='small'),\n            ],\n        )\n\n    def clean_time(self):\n        if self.cleaned_data[\"time\"]:\n            time_type, time = self.cleaned_data[\"time\"]\n            if time_type == \"days\":\n                validate_timedelta_for_overflow(days=int(time))\n            return time\n\n\nclass AccountChartsForm(forms.Form):\n    \"\"\"Form for displaying top talkers\"\"\"\n\n    CHARTS = (\n        ('sentrecv', 'Bandwidth hogs'),\n        ('recv', 'Downloaders'),\n        ('sent', 'Uploaders'),\n    )\n\n    days = forms.FloatField(min_value=0.5, initial=7, label='Day(s)')\n    charts = forms.MultipleChoiceField(\n        widget=forms.CheckboxSelectMultiple, choices=CHARTS, initial=CHARTS[0]\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(AccountChartsForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_method='get',\n            form_fields=[self['days'], self['charts']],\n            submit_field=SubmitField('send', 'Show me', css_classes='small'),\n        )\n\n    def clean_days(self):\n        days = self.cleaned_data[\"days\"]\n        validate_timedelta_for_overflow(days=days)\n\n        return days\n"
  },
  {
    "path": "python/nav/web/radius/radius_config.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n#\n\n# Enable reloading of imported modules\nDEBUG = 1\n\nDB = \"manage\"\nDB_USER = \"radius\"\n\n\"\"\" Alternate configuration for separate DB-users with read and write\nrights. Comment out the DB_USER above and uncomment the next two lines\nto enable this. NB! Some modification to views.py and db.conf must\nalso be done to enable this. See INSTALL for instructions.\n\"\"\"\n# DB_USER_READ = \"radius_front\"\n# DB_USER_WRITE = \"radius_back\"\n\n##############################################################################\n# Module config\n##############################################################################\n\n# \"Translation\" of the module names into more human readable form.\nMODULES = {\n    \"acctsearch\": \"Accounting Log\",\n    \"acctcharts\": \"Accounting Charts\",\n    \"logsearch\": \"Error Log\",\n}\n\n# Maps pages/subsections to modules\nSECTIONS = {\n    \"acctsearch\": [\"acctsearch\", \"acctdetail\"],\n    \"acctcharts\": [\"acctcharts\"],\n    \"logsearch\": [\"logsearch\", \"logdetail\"],\n}\n\n\n# The order in which the menu is displayed. Remove item to remove it from menu\nMENUORDER = (\"acctsearch\", \"acctcharts\", \"logsearch\")\n\nINDEX_PAGE = 'acctsearch'\n\n\n##############################################################################\n# Radius Log\n##############################################################################\n\n# Database table containing radius log\nLOG_TABLE = \"radiuslog\"\n\n# Keep records for 1 month\nLOG_EXPIRY = \"1 month\"\n\nLOG_FIELDDESCRIPTIONS = {\n    \"time\": \"Timestamp\",\n    \"type\": \"Type\",\n    \"message\": \"Message\",\n    \"status\": \"Status\",\n    \"username\": \"Username\",\n    \"client\": \"Client\",\n    \"port\": \"Port\",\n    \"view\": \"View\",\n}\n\n# Fields to display in the search results\nLOG_SEARCHRESULTFIELDS = (\"time\", \"type\", \"message\")\n\n# Fields to display on the details page\nLOG_DETAILFIELDS = (\"time\", \"type\", \"message\", \"status\", \"username\", \"client\", \"port\")\n\n\n##############################################################################\n# Radius Accounting\n##############################################################################\n\n# Table containg our accounting data\nACCT_TABLE = \"radiusacct\"\n\n\n# Reauthentication-interval in seconds. Helps decide when a session should be\n# displayed as \"Timed out\"\n# I've set it to 60 seconds longer than the actual reauth interval, because the\n# searches might take a while\nACCT_REAUTH_TIMEOUT = 960\n\n\n# Associate database fields with proper descriptions\nACCT_DBFIELDSDESCRIPTIONS = {\n    \"acctuniqueid\": \"Session ID\",\n    \"username\": \"Username\",\n    \"nasipaddress\": \"NAS IP Address\",\n    \"nasporttype\": \"NAS Port Type\",\n    \"cisconasport\": \"Cisco NAS Port\",\n    \"calledstationid\": \"Called Station (NAS)\",\n    \"callingstationid\": \"Calling Station (Client)\",\n    \"framedprotocol\": \"Framed Protocol\",\n    \"framedipaddress\": \"Framed IP Address\",\n    \"acctstarttime\": \"Session Start\",\n    \"acctstoptime\": \"Session Stop\",\n    \"acctsessiontime\": \"Duration\",\n    \"acctterminatecause\": \"Termination Cause\",\n    \"acctinputoctets\": \"Uploaded Data\",\n    \"acctoutputoctets\": \"Downloaded Data\",\n}\n\n# Fields to display when viewing session details\nACCT_DETAILSFIELDS = (\n    \"acctuniqueid\",\n    \"username\",\n    \"nasipaddress\",\n    \"nasporttype\",\n    \"cisconasport\",\n    \"calledstationid\",\n    \"callingstationid\",\n    \"framedprotocol\",\n    \"framedipaddress\",\n    \"acctstarttime\",\n    \"acctstoptime\",\n    \"acctsessiontime\",\n    \"acctterminatecause\",\n    \"acctinputoctets\",\n    \"acctoutputoctets\",\n)\n\n# Fields to display when viewing a search result. Changing this without editing\n# RadiusSearchTemplate.tmpl will just end in a mess. Leave it as it is.\nACCT_SEARCHRESULTFIELDS = (\n    \"username\",\n    \"framedipaddress\",\n    \"nasipaddress\",\n    \"acctstarttime\",\n    \"acctstoptime\",\n    \"acctsessiontime\",\n    \"acctuniqueid\",\n)\n\n##############################################################################\n\n# The format we want to use when searching for a specific date and time.\nDATEFORMAT_SEARCH = \"%Y-%m-%d %H:%M\"\n\n# Format of the string you get when you select the datetime field in the DB If\n# your datetime field contains fractions of a second, you can just ignore\n# them, as they will be stripped in the showStopTime helper function.\nDATEFORMAT_DB = \"%Y-%m-%d %H:%M:%S\"\n"
  },
  {
    "path": "python/nav/web/radius/radiuslib.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n\"\"\"Helper functions and classes for radius accounting in NAV\"\"\"\n\nfrom socket import gethostbyaddr, herror, gaierror\nfrom re import match, sub\nimport time\n\nfrom .radius_config import DATEFORMAT_DB, ACCT_REAUTH_TIMEOUT\n\n\nclass HostCache(object):\n    \"\"\"\n    Offers method to look up IP adresses, while caching the\n    result to speed up operation.\n    \"\"\"\n\n    def __init__(self):\n        self.cache = {}\n\n    def lookup_ip_address(self, ip):\n        \"\"\"\n        Perform a reverse DNS lookup for ip.\n\n        Uses self.cache to speed up results when the same ip is\n        lookup up several times during one session.\n\n        :param ip: IP address to look up\n        \"\"\"\n\n        if ip is None:\n            return None\n        if ip not in self.cache:\n            try:\n                self.cache[ip] = gethostbyaddr(ip)[0]\n            except (herror, gaierror):\n                # if lookup fails, return the input address\n                self.cache[ip] = ip\n\n        return self.cache[ip]\n\n\ndef humanize_time(seconds):\n    \"\"\"\n    Convert seconds into days, hours, minutes, seconds and make some nice output\n\n    :param seconds: the seconds you want converted\n    :returns: A string formatted as DD HH MM SS\n    \"\"\"\n\n    times = _calc_time(seconds)\n\n    returnvar = \"\"\n    days, hours, minutes, seconds = (0, 1, 2, 3)\n\n    if times[days]:\n        returnvar = \"%sd \" % times[days]\n    if times[hours]:\n        returnvar += \"%sh \" % times[hours]\n    if times[minutes]:\n        returnvar += \"%sm \" % times[minutes]\n    if times[seconds]:\n        returnvar += \"%ss \" % times[seconds]\n\n    return returnvar\n\n\ndef _calc_time(seconds):\n    \"\"\"Calculate days/hours/minutes from seconds.\n\n    :param seconds: integer containing the seconds we want calculated\n    :returns: A tuple of (days, hours, minutes, seconds)\n\n    \"\"\"\n    if not seconds:\n        seconds = 0\n\n    days = 0\n    hours = 0\n    minutes = 0\n    remainder = seconds\n\n    # Sometimes (very rare) the acctsessiontime turns out to be in the negative.\n    # Not sure why this happens, but this if at least secures correct output\n    # Need to look into this.\n\n    if seconds >= 0:\n        days = remainder // 86400\n        remainder %= 86400\n        hours = remainder // 3600\n        remainder %= 3600\n        minutes = remainder // 60\n        remainder %= 60\n        seconds = remainder\n\n    return days, hours, minutes, seconds\n\n\ndef humanize_bytes(number, unit=\"B\"):\n    \"\"\"\n    Translates an integer into a human-readable string. The number will be\n    scaled using T/G/M/K prefixes and the specified unit.\n\n    :param number: The number of bytes to convert into more human readable form.\n    :param unit: The unit suffix to use in the produced string.\n\n    \"\"\"\n    tera, giga, mega, kilo, number = _scale(number)\n\n    if tera > 0:\n        output = \"%i.%2i T%s\" % (tera, giga, unit)\n    elif giga > 0:\n        output = \"%i.%2i G%s\" % (giga, mega, unit)\n    elif mega > 0:\n        output = \"%i.%2i M%s\" % (mega, kilo, unit)\n    elif kilo > 0:\n        output = \"%i.%2i K%s\" % (kilo, number, unit)\n    elif number > 0:\n        output = \"%i %s\" % (number, unit)\n    else:\n        output = \"Unknown\"\n\n    return output\n\n\ndef _scale(number):\n    if number is None:\n        number = 0\n\n    tera, number = divmod(number, 1024**4)\n    giga, number = divmod(number, 1024**3)\n    mega, number = divmod(number, 1024**2)\n    kilo, number = divmod(number, 1024)\n\n    return tera, giga, mega, kilo, number\n\n\ndef calculate_stop_time(acctstarttime, acctstoptime, acctsessiontime):\n    \"\"\"\n    Checks if session is still active, and returns an appropriate string.\n\n    :param acctstarttime: Session start time\n    :param acctstoptime: Session stop time\n    :param acctsessiontime: How long the session has lasted\n\n    \"\"\"\n    start_time = str(acctstarttime)\n    stop_time = None\n    session_time = 0\n\n    if acctstoptime:\n        stop_time = str(acctstoptime)\n    if acctsessiontime:\n        session_time = int(acctsessiontime)\n\n    # Since time.strptime does not handle fractions of a second,\n    # check if our starttime contains fractions before using strptime,\n    # and remove them if it does.\n    if match(r'.+\\d\\.\\d+', start_time):\n        start_time = sub(r'\\.\\d+', '', start_time)\n\n    # Make tuple of the time string\n    time_tuple = time.strptime(start_time, DATEFORMAT_DB)\n    # Convert to seconds since epoch\n    time_seconds = time.mktime(time_tuple)\n\n    # Check if session is still active\n    if stop_time is None:\n        if (time_seconds + session_time) > (time.time() - ACCT_REAUTH_TIMEOUT):\n            stop_time = \"Still Active\"\n        else:\n            stop_time = \"Timed Out\"\n    else:\n        stop_time = remove_fractions(stop_time)\n\n    return stop_time\n\n\ndef remove_fractions(timestamp):\n    \"\"\"\n    Removes the fractions of a second part from the timestamps so we don't\n    have to display them on the webpage.\n    \"\"\"\n\n    tstring = str(timestamp)\n\n    if match(r'.+\\d\\.\\d+', tstring):\n        formatted_time = sub(r'\\.\\d+', '', tstring)\n    else:\n        formatted_time = tstring\n\n    return formatted_time\n"
  },
  {
    "path": "python/nav/web/radius/urls.py",
    "content": "#\n# Copyright (C) 2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Radius backend URL config.\"\"\"\n\nfrom django.urls import path\nfrom nav.web.radius import views\n\n\nurlpatterns = [\n    path('', views.index, name='radius-index'),\n    path('logsearch', views.log_search, name='radius-log_search'),\n    path(\n        'logsearch/searchhints',\n        views.log_search_hints_modal,\n        name='radius-error-log-hints',\n    ),\n    path(\n        'logdetail/<int:accountid>/modal',\n        views.log_detail_modal,\n        name='radius-log_detail-modal',\n    ),\n    path(\n        'logdetail/<int:accountid>',\n        views.log_detail_page,\n        name='radius-log_detail',\n    ),\n    path(\n        'acctdetail/<int:accountid>/modal',\n        views.account_detail_modal,\n        name='radius-account_detail-modal',\n    ),\n    path(\n        'acctdetail/<int:accountid>',\n        views.account_detail_page,\n        name='radius-account_detail',\n    ),\n    path('acctcharts', views.account_charts, name='radius-account_charts'),\n    path(\n        'acctcharts/acctcharthints',\n        views.account_chart_hints_modal,\n        name='radius-account-chart-hints',\n    ),\n    path('acctsearch', views.account_search, name='radius-account_search'),\n    path(\n        'acctsearch/acctloghints',\n        views.account_log_hints_modal,\n        name='radius-account-log-hints',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/radius/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2018 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"radius accounting interface views\"\"\"\n\nfrom django.shortcuts import render\nfrom django.urls import reverse\nfrom nav.web.modals import render_modal\nfrom nav.web.utils import create_title\nfrom .forms import AccountChartsForm, AccountLogSearchForm, ErrorLogSearchForm\n\nfrom .radius_config import (\n    INDEX_PAGE,\n    LOG_SEARCHRESULTFIELDS,\n    ACCT_DETAILSFIELDS,\n    ACCT_DBFIELDSDESCRIPTIONS,\n    LOG_DETAILFIELDS,\n    LOG_FIELDDESCRIPTIONS,\n)\n\nfrom .db import (\n    AcctChartsQuery,\n    AcctDetailQuery,\n    AcctSearchQuery,\n    LogDetailQuery,\n    LogSearchQuery,\n)\n\n\ndef get_navpath(path):\n    \"\"\"Add path to root path.\n\n    :type path: tuple\n    \"\"\"\n    navpath = [('Home', '/'), ('Radius', reverse('radius-index'))]\n    return navpath + [path]\n\n\ndef index(request):\n    \"\"\"\n    Start page based on configuration.\n    Uses redirect to get the whole urls\n    \"\"\"\n    if INDEX_PAGE == 'acctcharts':\n        return account_charts(request)\n    elif INDEX_PAGE == 'logsearch':\n        return log_search(request)\n    else:\n        return account_search(request)\n\n\ndef account_log_hints_modal(request):\n    \"\"\"Displays a modal with hints for account log search\"\"\"\n    return render_modal(\n        request,\n        'radius/_account_log_hints_modal.html',\n        modal_id=\"account-log-hints\",\n        size=\"large\",\n    )\n\n\ndef log_search(request):\n    \"\"\"Displays the page for doing a radius log search\"\"\"\n    context = {}\n\n    if 'send' in request.GET:\n        form = ErrorLogSearchForm(request.GET)\n        if form.is_valid():\n            data = form.cleaned_data\n            searchstring = data.get('query')[1]\n            searchtype = data.get('query')[0]\n\n            hours = timestamp = slack = ''\n            time = data.get('time')\n            timemode = time[0] if time and len(time) == 2 else ''\n            if timemode == 'hours':\n                hours = time[1]\n            elif timemode == 'timestamp':\n                timestamp, slack = split_time(time[1])\n\n            query = LogSearchQuery(\n                searchstring,\n                searchtype,\n                data.get('log_entry_type'),\n                timemode,\n                timestamp,\n                slack,\n                hours,\n                'time',\n                'DESC',\n            )\n            query.execute()\n\n            field_desc = [\n                LOG_FIELDDESCRIPTIONS[field] for field in LOG_SEARCHRESULTFIELDS\n            ]\n\n            context.update({'field_desc': field_desc, 'result': query.result})\n        else:\n            context['errors'] = form.errors\n    else:\n        form = ErrorLogSearchForm()\n\n    navpath = get_navpath(('Error Log',))\n    context.update(\n        {\n            'navpath': navpath,\n            'title': create_title(navpath),\n            'form': form,\n            'logsearch': True,\n        }\n    )\n\n    return render(request, 'radius/error_log.html', context)\n\n\ndef log_search_hints_modal(request):\n    \"\"\"Displays a modal with hints for log search\"\"\"\n    return render_modal(\n        request,\n        'radius/_error_log_hints_modal.html',\n        modal_id=\"error-log-hints\",\n        size=\"large\",\n    )\n\n\ndef log_detail_page(request, accountid):\n    \"\"\"Displays log details as a separate page\"\"\"\n    template = 'radius/detail.html'\n    return log_detail(request, accountid, template)\n\n\ndef log_detail_modal(request, accountid):\n    \"\"\"Displays log details as a separate page\"\"\"\n    template = 'radius/detail_modal.html'\n    return log_detail(request, accountid, template, use_modal=True)\n\n\ndef log_detail(request, accountid, template, use_modal=False):\n    \"\"\"Displays log details for accountid with the given template\"\"\"\n    query = LogDetailQuery(accountid)\n    query.execute()\n\n    fields = []\n    if query.result:\n        result = query.result[0]\n        field_desc = [LOG_FIELDDESCRIPTIONS[field] for field in LOG_DETAILFIELDS]\n        fields = zip(field_desc, result)\n\n    context = {\n        'fields': fields,\n        'result': query.result,\n        'reverse': reverse('radius-log_detail', args=(accountid,)),\n    }\n\n    if use_modal:\n        return render_modal(\n            request,\n            template,\n            context=context,\n            modal_id=\"log-detail\",\n        )\n\n    navpath = get_navpath(('Log Detail',))\n    context.update(\n        {\n            'title': create_title(navpath),\n            'navpath': navpath,\n        }\n    )\n\n    return render(request, template, context)\n\n\ndef account_charts(request):\n    \"\"\"Displays the page for account charts\"\"\"\n    context = {}\n\n    if 'send' in request.GET:\n        form = AccountChartsForm(request.GET)\n        if form.is_valid():\n            days = form.cleaned_data['days']\n            tables = []\n            for chart in form.cleaned_data['charts']:\n                query = AcctChartsQuery(chart, days)\n                query.execute()\n                tables.append((query.table_title, query.result))\n            context['tables'] = tables\n\n    else:\n        form = AccountChartsForm()\n\n    navpath = get_navpath(('Account Charts',))\n    context.update(\n        {\n            'navpath': navpath,\n            'title': create_title(navpath),\n            'form': form,\n            'acctcharts': True,\n        }\n    )\n\n    return render(request, 'radius/account_charts.html', context)\n\n\ndef account_chart_hints_modal(request):\n    \"\"\"Displays a modal with hints for account charts\"\"\"\n    return render_modal(\n        request,\n        'radius/_account_chart_hints_modal.html',\n        modal_id=\"account-chart-hints\",\n        size=\"large\",\n    )\n\n\ndef account_detail_page(request, accountid):\n    \"\"\"Displays account details as a separate page\"\"\"\n    template = 'radius/detail.html'\n    return account_detail(request, accountid, template)\n\n\ndef account_detail_modal(request, accountid):\n    \"\"\"Displays account details suitable for a modal\"\"\"\n    template = 'radius/detail_modal.html'\n    return account_detail(request, accountid, template, use_modal=True)\n\n\ndef account_detail(request, accountid, template, use_modal=False):\n    \"\"\"Finds account details for a specific accountid\"\"\"\n    query = AcctDetailQuery(accountid)\n    query.execute()\n\n    fields = []\n    if query.result:\n        result = query.result[0]\n        field_desc = [ACCT_DBFIELDSDESCRIPTIONS[field] for field in ACCT_DETAILSFIELDS]\n        fields = zip(field_desc, result)\n\n    context = {\n        'fields': fields,\n        'result': query.result,\n        'reverse': reverse('radius-account_detail', args=(accountid,)),\n    }\n\n    if use_modal:\n        return render_modal(\n            request,\n            template,\n            context=context,\n            modal_id=\"account-detail\",\n        )\n\n    navpath = get_navpath(('Account Detail',))\n    context.update(\n        {\n            'title': create_title(navpath),\n            'navpath': navpath,\n        }\n    )\n\n    return render(request, template, context)\n\n\ndef account_search(request):\n    \"\"\"Displays the page for doing an account log search\"\"\"\n    context = {}\n\n    if 'send' in request.GET:\n        form = AccountLogSearchForm(request.GET)\n        if form.is_valid():\n            data = form.cleaned_data\n\n            days = timestamp = slack = ''\n            time = data.get('time')\n            timemode = time[0] if time and len(time) == 2 else ''\n            if timemode == 'days':\n                days = time[1]\n            elif timemode == 'timestamp':\n                timestamp, slack = split_time(time[1])\n\n            dns_lookup = data.get('dns_lookup')\n\n            query = AcctSearchQuery(\n                data.get('query')[1],\n                data.get('query')[0],\n                data.get('port_type'),\n                timemode,\n                timestamp,\n                slack,\n                days,\n                'userdns' in dns_lookup,\n                'nasdns' in dns_lookup,\n                'acctstarttime',\n                'DESC',\n            )\n            query.execute()\n            (total_time, total_sent, total_received) = query.make_stats()\n            context.update(\n                {\n                    'result': query.result,\n                    'total_time': total_time,\n                    'total_sent': total_sent,\n                    'total_received': total_received,\n                }\n            )\n        else:\n            context['errors'] = form.errors\n    else:\n        form = AccountLogSearchForm()\n\n    navpath = get_navpath(('Account Log',))\n    context.update(\n        {\n            'title': create_title(navpath),\n            'navpath': navpath,\n            'form': form,\n            'acctsearch': True,\n        }\n    )\n\n    return render(request, 'radius/account_log.html', context)\n\n\ndef split_time(timestring):\n    \"\"\"Splits timestrin in timestamp and optional slack. Default slack is 1\"\"\"\n    time_values = timestring.split('|')\n    timestamp = time_values[0]\n    slack = 1\n    if len(time_values) > 1:\n        slack = time_values[1]\n    return timestamp, slack\n"
  },
  {
    "path": "python/nav/web/report/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details. You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV Report subsystem package placeholder.\"\"\"\n"
  },
  {
    "path": "python/nav/web/report/urls.py",
    "content": "#\n# Copyright (C) 2012-2018 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Report backend URL config.\"\"\"\n\nfrom django.urls import path, re_path\nfrom nav.web.report import views\n\n\n# Subsystem: Report\n# Naming convention: report-<result>-<query>\nurlpatterns = [\n    path('', views.index, name='report-index'),\n    path('matrix', views.matrix_report, name='report-matrix'),\n    re_path(\n        r'^matrix/(?P<scope>[^&]+)$', views.matrix_report, name='report-matrix-scope'\n    ),\n    path('reportlist', views.report_list, name='report-reportlist'),\n    path('widget/add/', views.add_report_widget, name='report-add-widget'),\n    path(\n        'widget/<str:report_name>',\n        views.get_report_for_widget,\n        name='widget-report-by-name',\n    ),\n    path('<str:report_name>', views.get_report, name='report-by-name'),\n]\n"
  },
  {
    "path": "python/nav/web/report/views.py",
    "content": "#\n# Copyright (C) 2008-2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Handling web requests for the Report subsystem.\"\"\"\n\nimport logging\nimport hashlib\nfrom functools import wraps\n\nfrom collections import defaultdict, namedtuple\nfrom time import localtime, strftime\nimport csv\nimport re\nfrom os import stat\nfrom os.path import join\n\nfrom IPy import IP\n\nfrom django.core.cache import cache\nfrom django.core.paginator import Paginator, InvalidPage\nfrom django.shortcuts import render\nfrom django.http import HttpResponse, Http404, HttpResponseRedirect\nfrom django.urls import reverse\n\nfrom nav.models.manage import Prefix\n\nfrom nav.report.IPtree import get_max_leaf, build_tree\nfrom nav.report.generator import Generator, ReportList\nfrom nav.report.matrixIPv4 import MatrixIPv4\nfrom nav.report.matrixIPv6 import MatrixIPv6\nfrom nav.report.metaIP import MetaIP\nfrom nav.config import find_config_file, find_config_dir, list_config_files_from_dir\n\nfrom nav.web.auth.utils import get_account\nfrom nav.web.navlets import add_navlet\n\n\n_logger = logging.getLogger(__name__)\nIpGroup = namedtuple('IpGroup', 'private ipv4 ipv6')\nCONFIG_DIR = join(find_config_dir() or \"\", \"report\", \"report.conf.d/\")\nFRONT_FILE = find_config_file(join(\"report\", \"front.html\"))\nDEFAULT_PAGE_SIZE = 25\nPAGE_SIZES = [25, 50, 100, 500, 1000]\n\n\ndef index(request):\n    \"\"\"Report front page\"\"\"\n\n    context = {\n        'title': 'Report - Index',\n        'navpath': [('Home', '/'), ('Report', False)],\n        'heading': 'Report Index',\n    }\n\n    with open(FRONT_FILE, 'r') as f:\n        context['index'] = f.read()\n\n    return render(request, \"report/index.html\", context)\n\n\ndef get_report_for_widget(request, report_name):\n    \"\"\"Fetches a report for display in a widget\"\"\"\n    query = _strip_empty_arguments(request)\n    export_delimiter = _get_export_delimiter(query)\n\n    context = make_report(request, report_name, export_delimiter, query)\n    return render(request, 'report/frag_report_table.html', context)\n\n\ndef get_report(request, report_name):\n    \"\"\"Loads and displays a specific reports with optional search arguments\"\"\"\n    query = _strip_empty_arguments(request)\n    export_delimiter = _get_export_delimiter(query)\n\n    if query != request.GET:\n        # some arguments were stripped, let's clean up the URL\n        return HttpResponseRedirect(\n            \"{0}?{1}\".format(request.META['PATH_INFO'], query.urlencode())\n        )\n\n    context = make_report(request, report_name, export_delimiter, query)\n    if 'exportcsv' in request.GET:\n        return context\n\n    # Magic flag for adding sorting links to table\n    context['add_sort_links'] = True\n    context['page_sizes'] = PAGE_SIZES\n\n    return render(request, 'report/report.html', context)\n\n\ndef _strip_empty_arguments(request):\n    \"\"\"Strips empty arguments and their related operator arguments from the\n    QueryDict in request.GET and returns a new, possibly modified QueryDict.\n\n    \"\"\"\n    query = request.GET.copy()\n\n    deletable = [key for key, value in query.items() if not value.strip()]\n    for key in deletable:\n        del query[key]\n        if \"op_{0}\".format(key) in query:\n            del query[\"op_{0}\".format(key)]\n        if \"not_{0}\".format(key) in query:\n            del query[\"not_{0}\".format(key)]\n\n    return query\n\n\ndef _get_export_delimiter(query):\n    \"\"\"Retrieves the CSV export delimiter from a QueryDict, but only if the\n    query indicates the CSV export submit button was pressed.\n\n    If the delimiter is invalid, the export-related arguments are stripped\n    from the query instance.\n\n    \"\"\"\n    if 'exportcsv' in query and 'export' in query:\n        delimiter = query.get('export')\n\n        match = re.search(r\"(,|;|:|\\|)\", delimiter)\n        if match:\n            return match.group(0)\n        else:\n            del query['export']\n            del query['exportcsv']\n\n\ndef matrix_report(request, scope=None):\n    \"\"\"Subnet matrix view\n    :type request: django.http.request.HttpRequest\n    \"\"\"\n    show_unused = request.GET.get('show_unused_addresses', False)\n\n    context = {\n        'navpath': [\n            ('Home', '/'),\n            ('Report', reverse('report-index')),\n            ('Subnet matrix', reverse('report-matrix')),\n        ],\n        'show_unused': show_unused,\n    }\n\n    if scope is None:\n        scopes = Prefix.objects.filter(vlan__net_type='scope')\n        if scopes.count() == 1:\n            # If there is only one scope in the database display that scope\n            scope = IP(scopes[0].net_address)\n        else:\n            # Else let the user select one\n            context['scopes'] = group_scopes(scopes)\n            return render(request, 'report/matrix.html', context)\n    else:\n        scope = IP(scope)\n\n    matrix = create_matrix(scope, show_unused)\n\n    hide_content_for_colspan = []\n    if scope.version() == 4:\n        hide_content_for_colspan = [1, 2, 4]\n\n    context.update(\n        {\n            'matrix': matrix,\n            'sub': matrix.end_net.prefixlen() - matrix.bits_in_matrix,\n            'ipv4': scope.version() == 4,\n            'family': scope.version(),\n            'scope': scope,\n            'hide_for': hide_content_for_colspan,\n        }\n    )\n\n    return render(request, 'report/matrix.html', context)\n\n\ndef group_scopes(scopes):\n    \"\"\"Group scopes by version and type\n    :type scopes: list[Prefix]\n    \"\"\"\n\n    def _prefix_as_int(prefix):\n        return IP(prefix.net_address).int()\n\n    groups = defaultdict(list)\n    for scope in scopes:\n        prefix = IP(scope.net_address)\n        if prefix.iptype() == 'PRIVATE':\n            groups['private'].append(scope)\n        elif prefix.version() == 4:\n            groups['ipv4'].append(scope)\n        elif prefix.version() == 6:\n            groups['ipv6'].append(scope)\n\n    if any([groups['private'], groups['ipv4'], groups['ipv6']]):\n        return IpGroup(\n            *[\n                sorted(groups[x], key=_prefix_as_int)\n                for x in ('private', 'ipv4', 'ipv6')\n            ]\n        )\n    else:\n        return []\n\n\ndef create_matrix(scope, show_unused):\n    \"\"\"Creates a matrix for the given scope\"\"\"\n    tree = build_tree(scope)\n    if scope.version() == 6:\n        if scope.prefixlen() < 60:\n            end_net = IP(scope.net().strNormal() + '/64')\n            matrix = MatrixIPv6(scope, end_net=end_net)\n        else:\n            end_net = get_max_leaf(tree)\n            matrix = MatrixIPv6(scope, end_net=end_net)\n    elif scope.version() == 4:\n        if scope.prefixlen() < 24:\n            end_net = IP(scope.net().strNormal() + '/30')\n            matrix = MatrixIPv4(scope, show_unused, end_net=end_net, bits_in_matrix=6)\n        else:\n            max_leaf = get_max_leaf(tree)\n            bits_in_matrix = max_leaf.prefixlen() - scope.prefixlen()\n            matrix = MatrixIPv4(\n                scope, show_unused, end_net=max_leaf, bits_in_matrix=bits_in_matrix\n            )\n    else:\n        raise UnknownNetworkTypeException('version: ' + str(scope.version))\n\n    # Invalidating the MetaIP cache to get rid of processed data.\n    MetaIP.invalidateCache()\n\n    matrix.build()\n    return matrix\n\n\ndef report_list(request):\n    \"\"\"Automated report list view\"\"\"\n    report_list = ReportList(list_config_files_from_dir(CONFIG_DIR)).get_report_list()\n\n    context = {\n        'title': 'Report - Report List',\n        'navpath': [\n            ('Home', '/'),\n            ('Report', '/report/'),\n            ('Report List', '/report/reportlist'),\n        ],\n        'heading': 'Report list',\n        'report_list': report_list,\n    }\n\n    return render(request, 'report/report_list.html', context)\n\n\ndef make_report(request, report_name, export_delimiter, query_dict, paginate=True):\n    \"\"\"Makes a report\n\n    :param paginate: Introduced to be able to toggle display of the paginate\n                     elements. Used in the widget rendering.\n    \"\"\"\n    # Initiating variables used when caching\n    report = contents = neg = operator = adv = result_time = None\n\n    if not report_name:\n        return None\n\n    # Pagination related variables\n    page_number = query_dict.get('page_number', 1)\n    page_size = get_page_size(request)\n\n    query_string = \"&\".join(\n        [\"%s=%s\" % (x, y) for x, y in query_dict.items() if x != 'page_number']\n    )\n\n    config_files = list_config_files_from_dir(CONFIG_DIR)\n    account = get_account(request)\n\n    @report_cache(\n        (\n            account.login,\n            report_name,\n            [stat(path).st_mtime for path in config_files],\n        ),\n        query_dict,\n    )\n    def _fetch_data_from_db():\n        (report, contents, neg, operator, adv, config, dbresult) = gen.make_report(\n            report_name, config_files, query_dict, None, None\n        )\n        if not report:\n            raise Http404\n        result_time = strftime(\"%H:%M:%S\", localtime())\n        return report, contents, neg, operator, adv, result_time\n\n    gen = Generator()\n\n    report, contents, neg, operator, adv, result_time = _fetch_data_from_db()\n\n    if export_delimiter:\n        return generate_export(report, report_name, export_delimiter)\n    else:\n        paginator = Paginator(report.table.rows, page_size)\n        try:\n            page = paginator.page(page_number)\n        except InvalidPage:\n            page_number = 1\n            page = paginator.page(page_number)\n\n        context = {\n            'heading': 'Report',\n            'result_time': result_time,\n            'report': report,\n            'paginate': paginate,\n            'page': page,\n            'current_page_range': find_page_range(page_number, paginator.page_range),\n            'query_string': query_string,\n            'contents': contents,\n            'operator': operator,\n            'neg': neg,\n        }\n\n        if report:\n            # A maintainable list of variables sent to the template\n\n            context['operators'] = {\n                'eq': '=',\n                'like': '~',\n                'gt': '&gt;',\n                'lt': '&lt;',\n                'geq': '&gt;=',\n                'leq': '&lt;=',\n                'between': '[:]',\n                'in': '(,,)',\n            }\n\n            context['operatorlist'] = [\n                'eq',\n                'like',\n                'gt',\n                'lt',\n                'geq',\n                'leq',\n                'between',\n                'in',\n            ]\n\n            context['descriptions'] = {\n                'eq': 'equals',\n                'like': 'contains substring (case-insensitive)',\n                'gt': 'greater than',\n                'lt': 'less than',\n                'geq': 'greater than or equals',\n                'leq': 'less than or equals',\n                'between': 'between (colon-separated)',\n                'in': 'is one of (comma separated)',\n            }\n\n            context['delimiters'] = (',', ';', ':', '|')\n\n            page_name = report.title or report_name\n            page_link = '/report/{0}'.format(report_name)\n        else:\n            page_name = \"Error\"\n            page_link = False\n\n        navpath = [('Home', '/'), ('Report', '/report/'), (page_name, page_link)]\n        adv_block = bool(adv)\n\n        context.update(\n            {\n                'title': 'Report - {0}'.format(page_name),\n                'navpath': navpath,\n                'adv_block': adv_block,\n            }\n        )\n\n        return context\n\n\ndef get_page_size(request):\n    \"\"\"Gets the page size based on preferences\"\"\"\n    account = get_account(request)\n    key = account.PREFERENCE_KEY_REPORT_PAGE_SIZE\n\n    if 'page_size' in request.GET:\n        page_size = request.GET.get('page_size')\n        if account.preferences.get(key) != page_size:\n            account.preferences[key] = page_size\n            account.save()\n    elif key in account.preferences:\n        page_size = account.preferences[key]\n    else:\n        page_size = DEFAULT_PAGE_SIZE\n\n    return page_size\n\n\ndef find_page_range(page_number, page_range, visible_pages=5):\n    \"\"\"Finds a suitable page range given current page.\n\n    Tries to make an even count of pages before and after page_number\n    \"\"\"\n    length = len(page_range)\n    page_number = int(page_number)\n\n    if length <= visible_pages:\n        return page_range\n\n    padding = visible_pages // 2\n    start = page_number - 1 - padding\n    if start < 0:\n        start = 0\n\n    end = start + visible_pages\n    if end >= length:\n        end = length\n        start = length - visible_pages\n\n    return page_range[start:end]\n\n\ndef generate_export(report, report_name, export_delimiter):\n    \"\"\"Generates a CSV export version of a report\"\"\"\n\n    response = HttpResponse(content_type=\"text/x-csv; charset=utf-8\")\n    response[\"Content-Type\"] = \"application/force-download\"\n    response[\"Content-Disposition\"] = \"attachment; filename=report-%s-%s.csv\" % (\n        report_name,\n        strftime(\"%Y%m%d\", localtime()),\n    )\n    writer = csv.writer(response, delimiter=str(export_delimiter))\n\n    # Make a list of headers\n    header_row = [cell.text for cell in report.table.header.cells]\n    writer.writerow(header_row)\n\n    # Make a list of lists containing each cell. Considers the 'hidden' option\n    # from the config.\n    rows = []\n    for row in report.table.rows:\n        rows.append([cell.text for cell in row.cells])\n    writer.writerows(rows)\n\n    return response\n\n\ndef add_report_widget(request):\n    \"\"\"\n    :type request: HttpRequest\n    \"\"\"\n\n    report_id = request.POST.get('report_id')\n    if not report_id:\n        return HttpResponse('No report name supplied', status=400)\n\n    navlet = 'nav.web.navlets.report.ReportWidget'\n    preferences = {\n        'report_id': report_id,\n        'query_string': request.POST.get('query_string'),\n    }\n\n    account = get_account(request)\n    add_navlet(account, navlet, preferences)\n\n    return HttpResponse()\n\n\ndef report_cache(key_items, query_dict):\n    \"\"\"Report caching decorator.\n\n    Any exception that occurs while attempting to get or set cache items are\n    logged and subsequently ignored. We can still do our work, albeit slower.\n\n    :param key_items: A list of values that make up the request key\n\n    :param query_dict: The request query parameter dictionary; used to\n                       extract the \"advanced search\" parameters used in the\n                       request, so these can be included in the cache key\n    \"\"\"\n    keys = ['report'] + list(key_items) + [_query_dict_hash(query_dict)]\n    cache_key = ':'.join(str(k).replace(' ', '') for k in keys)\n\n    def _decorator(func):\n        def _cache_lookup(*args, **kwargs):\n            try:\n                data = cache.get(cache_key)\n            except Exception:  # noqa: BLE001\n                _logger.exception(\"Exception occurred while hitting the cache\")\n                data = None\n\n            if not data:\n                data = func(*args, **kwargs)\n                try:\n                    cache.set(cache_key, data)\n                except Exception:  # noqa: BLE001\n                    _logger.exception(\"Exception occurred while caching\")\n\n            return data\n\n        return wraps(func)(_cache_lookup)\n\n    return _decorator\n\n\ndef _query_dict_hash(query_dict):\n    \"\"\"Makes a unique hash from a report query_dict, excluding every known\n    parameter that is not related to filtering the report contents (i.e.\n    arguments that do not affect the SQL result itself should not be part of\n    the cache key).\n\n    \"\"\"\n    non_key_args = [\n        'offset',\n        'limit',\n        'export',\n        'exportcsv',\n        'page_number',\n        'page_size',\n    ]\n    stripped_dict = {\n        key: value\n        for key, value in query_dict.items()\n        if key not in non_key_args and value != \"\"\n    }\n    data = repr(stripped_dict).encode('utf-8')\n    return hashlib.sha256(data).hexdigest()\n\n\nclass UnknownNetworkTypeException(Exception):\n    \"\"\"Unknown network type\"\"\"\n\n    pass\n"
  },
  {
    "path": "python/nav/web/sass/_fonts.scss",
    "content": "@import 'navsettings';\n\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Open Sans Light'), local('OpenSans-Light'), url('#{$assets-url}/fonts/OS300.woff') format('woff');\n}\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Open Sans'), local('OpenSans'), url('#{$assets-url}/fonts/OS400.woff') format('woff');\n}\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 600;\n  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url('#{$assets-url}/fonts/OS600.woff') format('woff');\n}"
  },
  {
    "path": "python/nav/web/sass/_foundation.scss",
    "content": "@charset \"UTF-8\";\n// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n// Make sure the charset is set appropriately\n\n// Behold, here are all the Foundation components.\n  @import \"foundation/components/grid\";\n  @import \"foundation/components/accordion\";\n  @import \"foundation/components/alert-boxes\";\n  @import \"foundation/components/block-grid\";\n  @import \"foundation/components/breadcrumbs\";\n  @import \"foundation/components/button-groups\";\n  @import \"foundation/components/buttons\";\n  @import \"foundation/components/forms\";\n  @import \"foundation/components/inline-lists\";\n  @import \"foundation/components/keystrokes\";\n  @import \"foundation/components/labels\";\n  @import \"foundation/components/pagination\";\n  @import \"foundation/components/panels\";\n  @import \"foundation/components/reveal\";\n  @import \"foundation/components/sub-nav\";\n  @import \"foundation/components/switches\";\n  @import \"foundation/components/tables\";\n  @import \"foundation/components/tabs\";\n  @import \"foundation/components/top-bar\";\n  @import \"foundation/components/type\";\n  @import \"foundation/components/visibility\";\n"
  },
  {
    "path": "python/nav/web/sass/_navsettings.scss",
    "content": "@import 'foundation/functions';\n\n// Media Query Ranges\n$small-range: (0em, 40em) !global;\n$medium-range: (40.063em, 64em) !global;\n$large-range: (64.063em, 90em) !global;\n$xlarge-range: (90.063em, 120em) !global;\n$xxlarge-range: (120.063em) !global;\n\n$screen: \"only screen\" !global;\n$landscape: \"#{$screen} and (orientation: landscape)\" !global;\n$portrait: \"#{$screen} and (orientation: portrait)\" !global;\n$small-up: $screen !global;\n$small-only: \"#{$screen} and (max-width: #{upper-bound($small-range)})\" !global;\n$medium-up: \"#{$screen} and (min-width:#{lower-bound($medium-range)})\" !global;\n$medium-only: \"#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})\" !global;\n$large-up: \"#{$screen} and (min-width:#{lower-bound($large-range)})\" !global;\n$large-only: \"#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})\" !global;\n$xlarge-up: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)})\" !global;\n$xlarge-only: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})\" !global;\n$xxlarge-up: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)})\" !global;\n$xxlarge-only: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})\" !global;\n\n\n// Relative image path\n// Providing variables for all assets paths in this folder so that there will be no hard coding\n$assets-url: '../static' !global;\n$image-path: '#{$assets-url}/images' !global;\n$image-path-partials: '#{$assets-url}/images' !global;\n$fa-font-path: '#{$assets-url}/fonts';\n\n// Width of a row. To create a limited viewport use em-calc\n// Default from Foundation is $row-width: em-calc(1000) !global;\n$row-width: 100% !global;\n\n// NAV color palette\n$body-bg: #EEE !global;\n\n$primary-color: #027bbb !global;\n$secondary-color: #DFDFDF !global;\n\n$alert-color: #d2322d !global;\n$success-color: #5cb85c !global;\n$warning-color: #ff9233 !global;\n\n$alert-box-bg: #f2dede !global;\n$alert-box-color: #a6413f !global;\n$alert-box-border: #eed3d7 !global;\n\n$success-box-bg: #dff0d8 !global;\n$success-box-color: #3d763e !global;\n$success-box-border: #d6e9c6 !global;\n\n$info-box-bg: #d9edf7 !global;\n$info-box-color: #2d6886 !global;\n$info-box-border: #bce8f1 !global;\n\n$warning-box-bg: #fff3e0 !global;\n$warning-box-color: #c64500 !global;\n$warning-box-border: #FFE0B2 !global;\n\n$crumb-bg: $secondary-color !global;\n$crumb-border-color: #F6F6F6 !global;\n\n$table-border-style: none !global;\n\n$dropdown-border-color: #243640 !global;\n\n/* Threshold for using alternative font color.\n\nNB: This variable is introduced by us because Foundation allowed font color with\ntoo little contrast according to WCAG2.0. This variable must be manually\nintroduced in Foundation scss files when updating Foundation.\n\nCurrently used in _labels.scss and _buttons.scss, where the it replaces 70% */\n$lightness-threshold: 52% !global;\n\n// Variables\n// -----------------------------------------------------------------------\n\n\n// Button sizes\n$button-tny: rem-calc(7) !global;\n$button-sml: rem-calc(9) !global;\n$button-med: rem-calc(11) !global;\n\n// Alerts\n$include-html-alert-classes: false !global;\n\n// Fonts\n$body-font-family: \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", Helvetica, Arial, sans-serif !global;\n$body-font-weight: 400 !global;\n$small-font-size: 80% !global;\n\n// Menu\n$topbar-bg-color: #243640 !default !global;\n$topbar-dropdown-bg: #243640 !default !global;\n\n// Tooltips\n$tooltip-bg: #333 !default !global;\n$tooltip-font-weight: 400 !default !global;\n$has-tip-cursor-type: cursor !default !global;\n$tooltip-padding:20px !default !global;\n$tooltip-max-width: 500px !global;\n\n// Global padding\n$global-padding: 3.5em !global;\n$global-padding-small: 0em !global;\n$body-padding: 3.5em !global;\n$body-padding-small: 1em !global;\n\n// Pagination\n$pagination-link-font-color: #222 !global;\n$pagination-link-active-bg: #bbb !global;\n\n// Fieldsets\n$fieldset-border-color: #AAAAAA !global;\n"
  },
  {
    "path": "python/nav/web/sass/_normalize.scss",
    "content": "/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "python/nav/web/sass/_overrides.scss",
    "content": "// Override alert mixins\n// -------------------------------------------\n\n// Override mixin to handle new parameters for font color and border\n@mixin alert-style($bg:$info-box-bg, $color:$info-box-color, $border:$info-box-border) {\n    position: relative;\n\tbackground-color: $bg;\n\tcolor: $color;\n\tborder-color: $border;\n\tfont-weight:400;\n    line-height: 1.5em;\n}\n\n// Override this mixin to default to secondary colors on alert-box\n@mixin alert($radius:false) {\n    @include alert-base;\n    @include alert-style();\n    @include radius($radius);\n}\n\n@mixin alert-icon($icon) {\n    &.with-icon:before {\n        content: $icon;\n        font-family: FontAwesome;\n        font-size: 1.5em;\n        margin-right: 0.5em;\n        vertical-align: middle;\n    }\n}\n\nsmall.errorField {\n    @include form-error-message;\n}\n\n// Main configuration for alert-box class\n.alert-box {\n    @include alert;\n\n    a {\n        color: #014265;  // Add darker link color for higher contrast.\n        text-decoration: underline;  // Make links visible in alert-boxes\n    }\n\n    .close {\n      @include alert-close;\n      text-decoration: none;\n    }\n\n    &.radius { @include radius($alert-radius); }\n    &.round { @include radius($global-rounded); }\n\n    &.success {\n        @include alert-style($success-box-bg, $success-box-color, $success-box-border);\n        @include alert-icon(\"\\f058\");\n    }\n    &.alert {\n        @include alert-style($alert-box-bg, $alert-box-color, $alert-box-border);\n        @include alert-icon(\"\\f057\");\n    }\n    &.error {\n        @include alert-style($alert-box-bg, $alert-box-color, $alert-box-border);\n        @include alert-icon(\"\\f057\");\n    }\n    &.secondary { @include alert-style($info-box-bg, $info-box-color, $info-box-border); }\n    &.info {\n        @include alert-style($info-box-bg, $info-box-color, $info-box-border);\n        @include alert-icon(\"\\f05a\");\n    }\n    &.warning {\n        @include alert-style($warning-box-bg, $warning-box-color, $warning-box-border);\n        @include alert-icon(\"\\f071\");\n    }\n\n    &.inside-table {\n        display: inline-block;\n        padding-top: rem-calc(4);\n        padding-bottom: rem-calc(4);\n        margin-bottom: 0;\n    }\n}\n\n// Add transition effects for nav alert when it is closed\n[data-nav-alert] {\n  transition: opacity 0.3s ease-out, transform 0.3s ease-out;\n  transform: translateY(0);\n  opacity: 1;\n}\n\n[data-nav-alert].alert-close {\n  opacity: 0;\n  transform: translateY(-20px);\n}\n\n\n// Adds class for marking a button as active.\nbutton, .button {\n    &.active {\n        background-color: scale-color($primary-color, $lightness: $button-function-factor);\n        &.secondary { background-color: scale-color($secondary-color, $lightness: $button-function-factor); }\n        &.alert { background-color: scale-color($alert-color, $lightness: $button-function-factor); }\n        &.success { background-color: scale-color($success-color, $lightness: $button-function-factor); }\n    }\n}\n\n// Add a custom button for use inside table rows\n@mixin table-button-base($color: $primary-color) {\n    @include button(\n        $padding: rem-calc(3),\n        $bg: $color\n    );\n    font-size: rem-calc(11);\n    margin-bottom: 0;\n}\n\n// Include styles for all subclasses of the button\n.table-button {\n    @include table-button-base;\n    &.secondary {@include table-button-base($secondary-color);}\n    &.success {@include table-button-base($success-color);}\n    &.alert {@include table-button-base($alert-color);}\n    &.warning {@include table-button-base($warning-color);}\n    &.info {@include table-button-base($info-color);}\n}\n\n\n// Add a white version of the panel\n.panel.white {\n    background-color: white;\n}\n\n// Override navbars default height because it casus display problems on medium screens\n@media #{$medium-up} {\n    .top-bar {\n        height: auto;\n    }\n}\n\n/* Driver.js popover customizations and fixes for conflicting styles */\n$driver-popover-bg: #ffffff;\n$driver-popover-fg: #2d2d2d;\n$driver-popover-secondary-fg: #d2d2d2;\n$driver-popover-progress-fg: #727272;\n\n/*\n// Dark popover colors (matching Foundation Joyride theme)\n$driver-popover-bg: #333333;\n$driver-popover-fg: #ffffff;\n$driver-popover-secondary-fg: #777777;\n$driver-popover-progress-fg: $driver-popover-secondary-fg;\n */\n\n\n.driver-popover {\n  border-radius: 0;\n  background-color: $driver-popover-bg;\n  color: $driver-popover-fg;\n  .driver-popover-footer {\n    padding: 0;\n    border-top: none;\n    background-color: unset;\n    gap: 1rem;\n  }\n  .driver-popover-progress-text {\n    color: $driver-popover-progress-fg;\n  }\n  .driver-popover-navigation-btns button {\n    @extend .small;\n    margin-bottom: 0;\n  }\n  .driver-popover-description > * {\n    font-size: 14px;\n  }\n  .driver-popover-close-btn {\n    color: $driver-popover-secondary-fg;\n    &:focus, &:hover {\n      background: none;\n    }\n    &:hover {\n      color: darken($driver-popover-secondary-fg, 20%);\n    }\n  }\n}\n\n/* Flatpickr calendar customizations */\n.flatpickr-calendar {\n  border-radius: 0;\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_animated.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_core.scss",
    "content": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-resistance:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }\n.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }\n.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }\n.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }\n.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }\n.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }\n.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }\n.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }\n.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }\n.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }\n.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }\n.#{$fa-css-prefix}-asl-interpreting:before,\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }\n.#{$fa-css-prefix}-deafness:before,\n.#{$fa-css-prefix}-hard-of-hearing:before,\n.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }\n.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }\n.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }\n.#{$fa-css-prefix}-signing:before,\n.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }\n.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }\n.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }\n.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }\n.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }\n.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }\n.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }\n.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }\n.#{$fa-css-prefix}-google-plus-circle:before,\n.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }\n.#{$fa-css-prefix}-fa:before,\n.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})\";\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)\";\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_screen-reader.scss",
    "content": "// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-focusable(); }\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_spinning.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: spin 2s infinite linear;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n\n@-moz-keyframes spin {\n  0% { -moz-transform: rotate(0deg); }\n  100% { -moz-transform: rotate(359deg); }\n}\n@-webkit-keyframes spin {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@-o-keyframes spin {\n  0% { -o-transform: rotate(0deg); }\n  100% { -o-transform: rotate(359deg); }\n}\n@-ms-keyframes spin {\n  0% { -ms-transform: rotate(0deg); }\n  100% { -ms-transform: rotate(359deg); }\n}\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$fa-font-path:        \"../../static/fonts\" !default;\n$fa-font-size-base:   14px !default;\n$fa-line-height-base: 1 !default;\n//$fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts\" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix:       fa !default;\n$fa-version:          \"4.6.3\" !default;\n$fa-border-color:     #eee !default;\n$fa-inverse:          #fff !default;\n$fa-li-width:         (30em / 14) !default;\n\n$fa-var-500px: \"\\f26e\";\n$fa-var-adjust: \"\\f042\";\n$fa-var-adn: \"\\f170\";\n$fa-var-align-center: \"\\f037\";\n$fa-var-align-justify: \"\\f039\";\n$fa-var-align-left: \"\\f036\";\n$fa-var-align-right: \"\\f038\";\n$fa-var-amazon: \"\\f270\";\n$fa-var-ambulance: \"\\f0f9\";\n$fa-var-american-sign-language-interpreting: \"\\f2a3\";\n$fa-var-anchor: \"\\f13d\";\n$fa-var-android: \"\\f17b\";\n$fa-var-angellist: \"\\f209\";\n$fa-var-angle-double-down: \"\\f103\";\n$fa-var-angle-double-left: \"\\f100\";\n$fa-var-angle-double-right: \"\\f101\";\n$fa-var-angle-double-up: \"\\f102\";\n$fa-var-angle-down: \"\\f107\";\n$fa-var-angle-left: \"\\f104\";\n$fa-var-angle-right: \"\\f105\";\n$fa-var-angle-up: \"\\f106\";\n$fa-var-apple: \"\\f179\";\n$fa-var-archive: \"\\f187\";\n$fa-var-area-chart: \"\\f1fe\";\n$fa-var-arrow-circle-down: \"\\f0ab\";\n$fa-var-arrow-circle-left: \"\\f0a8\";\n$fa-var-arrow-circle-o-down: \"\\f01a\";\n$fa-var-arrow-circle-o-left: \"\\f190\";\n$fa-var-arrow-circle-o-right: \"\\f18e\";\n$fa-var-arrow-circle-o-up: \"\\f01b\";\n$fa-var-arrow-circle-right: \"\\f0a9\";\n$fa-var-arrow-circle-up: \"\\f0aa\";\n$fa-var-arrow-down: \"\\f063\";\n$fa-var-arrow-left: \"\\f060\";\n$fa-var-arrow-right: \"\\f061\";\n$fa-var-arrow-up: \"\\f062\";\n$fa-var-arrows: \"\\f047\";\n$fa-var-arrows-alt: \"\\f0b2\";\n$fa-var-arrows-h: \"\\f07e\";\n$fa-var-arrows-v: \"\\f07d\";\n$fa-var-asl-interpreting: \"\\f2a3\";\n$fa-var-assistive-listening-systems: \"\\f2a2\";\n$fa-var-asterisk: \"\\f069\";\n$fa-var-at: \"\\f1fa\";\n$fa-var-audio-description: \"\\f29e\";\n$fa-var-automobile: \"\\f1b9\";\n$fa-var-backward: \"\\f04a\";\n$fa-var-balance-scale: \"\\f24e\";\n$fa-var-ban: \"\\f05e\";\n$fa-var-bank: \"\\f19c\";\n$fa-var-bar-chart: \"\\f080\";\n$fa-var-bar-chart-o: \"\\f080\";\n$fa-var-barcode: \"\\f02a\";\n$fa-var-bars: \"\\f0c9\";\n$fa-var-battery-0: \"\\f244\";\n$fa-var-battery-1: \"\\f243\";\n$fa-var-battery-2: \"\\f242\";\n$fa-var-battery-3: \"\\f241\";\n$fa-var-battery-4: \"\\f240\";\n$fa-var-battery-empty: \"\\f244\";\n$fa-var-battery-full: \"\\f240\";\n$fa-var-battery-half: \"\\f242\";\n$fa-var-battery-quarter: \"\\f243\";\n$fa-var-battery-three-quarters: \"\\f241\";\n$fa-var-bed: \"\\f236\";\n$fa-var-beer: \"\\f0fc\";\n$fa-var-behance: \"\\f1b4\";\n$fa-var-behance-square: \"\\f1b5\";\n$fa-var-bell: \"\\f0f3\";\n$fa-var-bell-o: \"\\f0a2\";\n$fa-var-bell-slash: \"\\f1f6\";\n$fa-var-bell-slash-o: \"\\f1f7\";\n$fa-var-bicycle: \"\\f206\";\n$fa-var-binoculars: \"\\f1e5\";\n$fa-var-birthday-cake: \"\\f1fd\";\n$fa-var-bitbucket: \"\\f171\";\n$fa-var-bitbucket-square: \"\\f172\";\n$fa-var-bitcoin: \"\\f15a\";\n$fa-var-black-tie: \"\\f27e\";\n$fa-var-blind: \"\\f29d\";\n$fa-var-bluetooth: \"\\f293\";\n$fa-var-bluetooth-b: \"\\f294\";\n$fa-var-bold: \"\\f032\";\n$fa-var-bolt: \"\\f0e7\";\n$fa-var-bomb: \"\\f1e2\";\n$fa-var-book: \"\\f02d\";\n$fa-var-bookmark: \"\\f02e\";\n$fa-var-bookmark-o: \"\\f097\";\n$fa-var-braille: \"\\f2a1\";\n$fa-var-briefcase: \"\\f0b1\";\n$fa-var-btc: \"\\f15a\";\n$fa-var-bug: \"\\f188\";\n$fa-var-building: \"\\f1ad\";\n$fa-var-building-o: \"\\f0f7\";\n$fa-var-bullhorn: \"\\f0a1\";\n$fa-var-bullseye: \"\\f140\";\n$fa-var-bus: \"\\f207\";\n$fa-var-buysellads: \"\\f20d\";\n$fa-var-cab: \"\\f1ba\";\n$fa-var-calculator: \"\\f1ec\";\n$fa-var-calendar: \"\\f073\";\n$fa-var-calendar-check-o: \"\\f274\";\n$fa-var-calendar-minus-o: \"\\f272\";\n$fa-var-calendar-o: \"\\f133\";\n$fa-var-calendar-plus-o: \"\\f271\";\n$fa-var-calendar-times-o: \"\\f273\";\n$fa-var-camera: \"\\f030\";\n$fa-var-camera-retro: \"\\f083\";\n$fa-var-car: \"\\f1b9\";\n$fa-var-caret-down: \"\\f0d7\";\n$fa-var-caret-left: \"\\f0d9\";\n$fa-var-caret-right: \"\\f0da\";\n$fa-var-caret-square-o-down: \"\\f150\";\n$fa-var-caret-square-o-left: \"\\f191\";\n$fa-var-caret-square-o-right: \"\\f152\";\n$fa-var-caret-square-o-up: \"\\f151\";\n$fa-var-caret-up: \"\\f0d8\";\n$fa-var-cart-arrow-down: \"\\f218\";\n$fa-var-cart-plus: \"\\f217\";\n$fa-var-cc: \"\\f20a\";\n$fa-var-cc-amex: \"\\f1f3\";\n$fa-var-cc-diners-club: \"\\f24c\";\n$fa-var-cc-discover: \"\\f1f2\";\n$fa-var-cc-jcb: \"\\f24b\";\n$fa-var-cc-mastercard: \"\\f1f1\";\n$fa-var-cc-paypal: \"\\f1f4\";\n$fa-var-cc-stripe: \"\\f1f5\";\n$fa-var-cc-visa: \"\\f1f0\";\n$fa-var-certificate: \"\\f0a3\";\n$fa-var-chain: \"\\f0c1\";\n$fa-var-chain-broken: \"\\f127\";\n$fa-var-check: \"\\f00c\";\n$fa-var-check-circle: \"\\f058\";\n$fa-var-check-circle-o: \"\\f05d\";\n$fa-var-check-square: \"\\f14a\";\n$fa-var-check-square-o: \"\\f046\";\n$fa-var-chevron-circle-down: \"\\f13a\";\n$fa-var-chevron-circle-left: \"\\f137\";\n$fa-var-chevron-circle-right: \"\\f138\";\n$fa-var-chevron-circle-up: \"\\f139\";\n$fa-var-chevron-down: \"\\f078\";\n$fa-var-chevron-left: \"\\f053\";\n$fa-var-chevron-right: \"\\f054\";\n$fa-var-chevron-up: \"\\f077\";\n$fa-var-child: \"\\f1ae\";\n$fa-var-chrome: \"\\f268\";\n$fa-var-circle: \"\\f111\";\n$fa-var-circle-o: \"\\f10c\";\n$fa-var-circle-o-notch: \"\\f1ce\";\n$fa-var-circle-thin: \"\\f1db\";\n$fa-var-clipboard: \"\\f0ea\";\n$fa-var-clock-o: \"\\f017\";\n$fa-var-clone: \"\\f24d\";\n$fa-var-close: \"\\f00d\";\n$fa-var-cloud: \"\\f0c2\";\n$fa-var-cloud-download: \"\\f0ed\";\n$fa-var-cloud-upload: \"\\f0ee\";\n$fa-var-cny: \"\\f157\";\n$fa-var-code: \"\\f121\";\n$fa-var-code-fork: \"\\f126\";\n$fa-var-codepen: \"\\f1cb\";\n$fa-var-codiepie: \"\\f284\";\n$fa-var-coffee: \"\\f0f4\";\n$fa-var-cog: \"\\f013\";\n$fa-var-cogs: \"\\f085\";\n$fa-var-columns: \"\\f0db\";\n$fa-var-comment: \"\\f075\";\n$fa-var-comment-o: \"\\f0e5\";\n$fa-var-commenting: \"\\f27a\";\n$fa-var-commenting-o: \"\\f27b\";\n$fa-var-comments: \"\\f086\";\n$fa-var-comments-o: \"\\f0e6\";\n$fa-var-compass: \"\\f14e\";\n$fa-var-compress: \"\\f066\";\n$fa-var-connectdevelop: \"\\f20e\";\n$fa-var-contao: \"\\f26d\";\n$fa-var-copy: \"\\f0c5\";\n$fa-var-copyright: \"\\f1f9\";\n$fa-var-creative-commons: \"\\f25e\";\n$fa-var-credit-card: \"\\f09d\";\n$fa-var-credit-card-alt: \"\\f283\";\n$fa-var-crop: \"\\f125\";\n$fa-var-crosshairs: \"\\f05b\";\n$fa-var-css3: \"\\f13c\";\n$fa-var-cube: \"\\f1b2\";\n$fa-var-cubes: \"\\f1b3\";\n$fa-var-cut: \"\\f0c4\";\n$fa-var-cutlery: \"\\f0f5\";\n$fa-var-dashboard: \"\\f0e4\";\n$fa-var-dashcube: \"\\f210\";\n$fa-var-database: \"\\f1c0\";\n$fa-var-deaf: \"\\f2a4\";\n$fa-var-deafness: \"\\f2a4\";\n$fa-var-dedent: \"\\f03b\";\n$fa-var-delicious: \"\\f1a5\";\n$fa-var-desktop: \"\\f108\";\n$fa-var-deviantart: \"\\f1bd\";\n$fa-var-diamond: \"\\f219\";\n$fa-var-digg: \"\\f1a6\";\n$fa-var-dollar: \"\\f155\";\n$fa-var-dot-circle-o: \"\\f192\";\n$fa-var-download: \"\\f019\";\n$fa-var-dribbble: \"\\f17d\";\n$fa-var-dropbox: \"\\f16b\";\n$fa-var-drupal: \"\\f1a9\";\n$fa-var-edge: \"\\f282\";\n$fa-var-edit: \"\\f044\";\n$fa-var-eject: \"\\f052\";\n$fa-var-ellipsis-h: \"\\f141\";\n$fa-var-ellipsis-v: \"\\f142\";\n$fa-var-empire: \"\\f1d1\";\n$fa-var-envelope: \"\\f0e0\";\n$fa-var-envelope-o: \"\\f003\";\n$fa-var-envelope-square: \"\\f199\";\n$fa-var-envira: \"\\f299\";\n$fa-var-eraser: \"\\f12d\";\n$fa-var-eur: \"\\f153\";\n$fa-var-euro: \"\\f153\";\n$fa-var-exchange: \"\\f0ec\";\n$fa-var-exclamation: \"\\f12a\";\n$fa-var-exclamation-circle: \"\\f06a\";\n$fa-var-exclamation-triangle: \"\\f071\";\n$fa-var-expand: \"\\f065\";\n$fa-var-expeditedssl: \"\\f23e\";\n$fa-var-external-link: \"\\f08e\";\n$fa-var-external-link-square: \"\\f14c\";\n$fa-var-eye: \"\\f06e\";\n$fa-var-eye-slash: \"\\f070\";\n$fa-var-eyedropper: \"\\f1fb\";\n$fa-var-fa: \"\\f2b4\";\n$fa-var-facebook: \"\\f09a\";\n$fa-var-facebook-f: \"\\f09a\";\n$fa-var-facebook-official: \"\\f230\";\n$fa-var-facebook-square: \"\\f082\";\n$fa-var-fast-backward: \"\\f049\";\n$fa-var-fast-forward: \"\\f050\";\n$fa-var-fax: \"\\f1ac\";\n$fa-var-feed: \"\\f09e\";\n$fa-var-female: \"\\f182\";\n$fa-var-fighter-jet: \"\\f0fb\";\n$fa-var-file: \"\\f15b\";\n$fa-var-file-archive-o: \"\\f1c6\";\n$fa-var-file-audio-o: \"\\f1c7\";\n$fa-var-file-code-o: \"\\f1c9\";\n$fa-var-file-excel-o: \"\\f1c3\";\n$fa-var-file-image-o: \"\\f1c5\";\n$fa-var-file-movie-o: \"\\f1c8\";\n$fa-var-file-o: \"\\f016\";\n$fa-var-file-pdf-o: \"\\f1c1\";\n$fa-var-file-photo-o: \"\\f1c5\";\n$fa-var-file-picture-o: \"\\f1c5\";\n$fa-var-file-powerpoint-o: \"\\f1c4\";\n$fa-var-file-sound-o: \"\\f1c7\";\n$fa-var-file-text: \"\\f15c\";\n$fa-var-file-text-o: \"\\f0f6\";\n$fa-var-file-video-o: \"\\f1c8\";\n$fa-var-file-word-o: \"\\f1c2\";\n$fa-var-file-zip-o: \"\\f1c6\";\n$fa-var-files-o: \"\\f0c5\";\n$fa-var-film: \"\\f008\";\n$fa-var-filter: \"\\f0b0\";\n$fa-var-fire: \"\\f06d\";\n$fa-var-fire-extinguisher: \"\\f134\";\n$fa-var-firefox: \"\\f269\";\n$fa-var-first-order: \"\\f2b0\";\n$fa-var-flag: \"\\f024\";\n$fa-var-flag-checkered: \"\\f11e\";\n$fa-var-flag-o: \"\\f11d\";\n$fa-var-flash: \"\\f0e7\";\n$fa-var-flask: \"\\f0c3\";\n$fa-var-flickr: \"\\f16e\";\n$fa-var-floppy-o: \"\\f0c7\";\n$fa-var-folder: \"\\f07b\";\n$fa-var-folder-o: \"\\f114\";\n$fa-var-folder-open: \"\\f07c\";\n$fa-var-folder-open-o: \"\\f115\";\n$fa-var-font: \"\\f031\";\n$fa-var-font-awesome: \"\\f2b4\";\n$fa-var-fonticons: \"\\f280\";\n$fa-var-fort-awesome: \"\\f286\";\n$fa-var-forumbee: \"\\f211\";\n$fa-var-forward: \"\\f04e\";\n$fa-var-foursquare: \"\\f180\";\n$fa-var-frown-o: \"\\f119\";\n$fa-var-futbol-o: \"\\f1e3\";\n$fa-var-gamepad: \"\\f11b\";\n$fa-var-gavel: \"\\f0e3\";\n$fa-var-gbp: \"\\f154\";\n$fa-var-ge: \"\\f1d1\";\n$fa-var-gear: \"\\f013\";\n$fa-var-gears: \"\\f085\";\n$fa-var-genderless: \"\\f22d\";\n$fa-var-get-pocket: \"\\f265\";\n$fa-var-gg: \"\\f260\";\n$fa-var-gg-circle: \"\\f261\";\n$fa-var-gift: \"\\f06b\";\n$fa-var-git: \"\\f1d3\";\n$fa-var-git-square: \"\\f1d2\";\n$fa-var-github: \"\\f09b\";\n$fa-var-github-alt: \"\\f113\";\n$fa-var-github-square: \"\\f092\";\n$fa-var-gitlab: \"\\f296\";\n$fa-var-gittip: \"\\f184\";\n$fa-var-glass: \"\\f000\";\n$fa-var-glide: \"\\f2a5\";\n$fa-var-glide-g: \"\\f2a6\";\n$fa-var-globe: \"\\f0ac\";\n$fa-var-google: \"\\f1a0\";\n$fa-var-google-plus: \"\\f0d5\";\n$fa-var-google-plus-circle: \"\\f2b3\";\n$fa-var-google-plus-official: \"\\f2b3\";\n$fa-var-google-plus-square: \"\\f0d4\";\n$fa-var-google-wallet: \"\\f1ee\";\n$fa-var-graduation-cap: \"\\f19d\";\n$fa-var-gratipay: \"\\f184\";\n$fa-var-group: \"\\f0c0\";\n$fa-var-h-square: \"\\f0fd\";\n$fa-var-hacker-news: \"\\f1d4\";\n$fa-var-hand-grab-o: \"\\f255\";\n$fa-var-hand-lizard-o: \"\\f258\";\n$fa-var-hand-o-down: \"\\f0a7\";\n$fa-var-hand-o-left: \"\\f0a5\";\n$fa-var-hand-o-right: \"\\f0a4\";\n$fa-var-hand-o-up: \"\\f0a6\";\n$fa-var-hand-paper-o: \"\\f256\";\n$fa-var-hand-peace-o: \"\\f25b\";\n$fa-var-hand-pointer-o: \"\\f25a\";\n$fa-var-hand-rock-o: \"\\f255\";\n$fa-var-hand-scissors-o: \"\\f257\";\n$fa-var-hand-spock-o: \"\\f259\";\n$fa-var-hand-stop-o: \"\\f256\";\n$fa-var-hard-of-hearing: \"\\f2a4\";\n$fa-var-hashtag: \"\\f292\";\n$fa-var-hdd-o: \"\\f0a0\";\n$fa-var-header: \"\\f1dc\";\n$fa-var-headphones: \"\\f025\";\n$fa-var-heart: \"\\f004\";\n$fa-var-heart-o: \"\\f08a\";\n$fa-var-heartbeat: \"\\f21e\";\n$fa-var-history: \"\\f1da\";\n$fa-var-home: \"\\f015\";\n$fa-var-hospital-o: \"\\f0f8\";\n$fa-var-hotel: \"\\f236\";\n$fa-var-hourglass: \"\\f254\";\n$fa-var-hourglass-1: \"\\f251\";\n$fa-var-hourglass-2: \"\\f252\";\n$fa-var-hourglass-3: \"\\f253\";\n$fa-var-hourglass-end: \"\\f253\";\n$fa-var-hourglass-half: \"\\f252\";\n$fa-var-hourglass-o: \"\\f250\";\n$fa-var-hourglass-start: \"\\f251\";\n$fa-var-houzz: \"\\f27c\";\n$fa-var-html5: \"\\f13b\";\n$fa-var-i-cursor: \"\\f246\";\n$fa-var-ils: \"\\f20b\";\n$fa-var-image: \"\\f03e\";\n$fa-var-inbox: \"\\f01c\";\n$fa-var-indent: \"\\f03c\";\n$fa-var-industry: \"\\f275\";\n$fa-var-info: \"\\f129\";\n$fa-var-info-circle: \"\\f05a\";\n$fa-var-inr: \"\\f156\";\n$fa-var-instagram: \"\\f16d\";\n$fa-var-institution: \"\\f19c\";\n$fa-var-internet-explorer: \"\\f26b\";\n$fa-var-intersex: \"\\f224\";\n$fa-var-ioxhost: \"\\f208\";\n$fa-var-italic: \"\\f033\";\n$fa-var-joomla: \"\\f1aa\";\n$fa-var-jpy: \"\\f157\";\n$fa-var-jsfiddle: \"\\f1cc\";\n$fa-var-key: \"\\f084\";\n$fa-var-keyboard-o: \"\\f11c\";\n$fa-var-krw: \"\\f159\";\n$fa-var-language: \"\\f1ab\";\n$fa-var-laptop: \"\\f109\";\n$fa-var-lastfm: \"\\f202\";\n$fa-var-lastfm-square: \"\\f203\";\n$fa-var-leaf: \"\\f06c\";\n$fa-var-leanpub: \"\\f212\";\n$fa-var-legal: \"\\f0e3\";\n$fa-var-lemon-o: \"\\f094\";\n$fa-var-level-down: \"\\f149\";\n$fa-var-level-up: \"\\f148\";\n$fa-var-life-bouy: \"\\f1cd\";\n$fa-var-life-buoy: \"\\f1cd\";\n$fa-var-life-ring: \"\\f1cd\";\n$fa-var-life-saver: \"\\f1cd\";\n$fa-var-lightbulb-o: \"\\f0eb\";\n$fa-var-line-chart: \"\\f201\";\n$fa-var-link: \"\\f0c1\";\n$fa-var-linkedin: \"\\f0e1\";\n$fa-var-linkedin-square: \"\\f08c\";\n$fa-var-linux: \"\\f17c\";\n$fa-var-list: \"\\f03a\";\n$fa-var-list-alt: \"\\f022\";\n$fa-var-list-ol: \"\\f0cb\";\n$fa-var-list-ul: \"\\f0ca\";\n$fa-var-location-arrow: \"\\f124\";\n$fa-var-lock: \"\\f023\";\n$fa-var-long-arrow-down: \"\\f175\";\n$fa-var-long-arrow-left: \"\\f177\";\n$fa-var-long-arrow-right: \"\\f178\";\n$fa-var-long-arrow-up: \"\\f176\";\n$fa-var-low-vision: \"\\f2a8\";\n$fa-var-magic: \"\\f0d0\";\n$fa-var-magnet: \"\\f076\";\n$fa-var-mail-forward: \"\\f064\";\n$fa-var-mail-reply: \"\\f112\";\n$fa-var-mail-reply-all: \"\\f122\";\n$fa-var-male: \"\\f183\";\n$fa-var-map: \"\\f279\";\n$fa-var-map-marker: \"\\f041\";\n$fa-var-map-o: \"\\f278\";\n$fa-var-map-pin: \"\\f276\";\n$fa-var-map-signs: \"\\f277\";\n$fa-var-mars: \"\\f222\";\n$fa-var-mars-double: \"\\f227\";\n$fa-var-mars-stroke: \"\\f229\";\n$fa-var-mars-stroke-h: \"\\f22b\";\n$fa-var-mars-stroke-v: \"\\f22a\";\n$fa-var-maxcdn: \"\\f136\";\n$fa-var-meanpath: \"\\f20c\";\n$fa-var-medium: \"\\f23a\";\n$fa-var-medkit: \"\\f0fa\";\n$fa-var-meh-o: \"\\f11a\";\n$fa-var-mercury: \"\\f223\";\n$fa-var-microphone: \"\\f130\";\n$fa-var-microphone-slash: \"\\f131\";\n$fa-var-minus: \"\\f068\";\n$fa-var-minus-circle: \"\\f056\";\n$fa-var-minus-square: \"\\f146\";\n$fa-var-minus-square-o: \"\\f147\";\n$fa-var-mixcloud: \"\\f289\";\n$fa-var-mobile: \"\\f10b\";\n$fa-var-mobile-phone: \"\\f10b\";\n$fa-var-modx: \"\\f285\";\n$fa-var-money: \"\\f0d6\";\n$fa-var-moon-o: \"\\f186\";\n$fa-var-mortar-board: \"\\f19d\";\n$fa-var-motorcycle: \"\\f21c\";\n$fa-var-mouse-pointer: \"\\f245\";\n$fa-var-music: \"\\f001\";\n$fa-var-navicon: \"\\f0c9\";\n$fa-var-neuter: \"\\f22c\";\n$fa-var-newspaper-o: \"\\f1ea\";\n$fa-var-object-group: \"\\f247\";\n$fa-var-object-ungroup: \"\\f248\";\n$fa-var-odnoklassniki: \"\\f263\";\n$fa-var-odnoklassniki-square: \"\\f264\";\n$fa-var-opencart: \"\\f23d\";\n$fa-var-openid: \"\\f19b\";\n$fa-var-opera: \"\\f26a\";\n$fa-var-optin-monster: \"\\f23c\";\n$fa-var-outdent: \"\\f03b\";\n$fa-var-pagelines: \"\\f18c\";\n$fa-var-paint-brush: \"\\f1fc\";\n$fa-var-paper-plane: \"\\f1d8\";\n$fa-var-paper-plane-o: \"\\f1d9\";\n$fa-var-paperclip: \"\\f0c6\";\n$fa-var-paragraph: \"\\f1dd\";\n$fa-var-paste: \"\\f0ea\";\n$fa-var-pause: \"\\f04c\";\n$fa-var-pause-circle: \"\\f28b\";\n$fa-var-pause-circle-o: \"\\f28c\";\n$fa-var-paw: \"\\f1b0\";\n$fa-var-paypal: \"\\f1ed\";\n$fa-var-pencil: \"\\f040\";\n$fa-var-pencil-square: \"\\f14b\";\n$fa-var-pencil-square-o: \"\\f044\";\n$fa-var-percent: \"\\f295\";\n$fa-var-phone: \"\\f095\";\n$fa-var-phone-square: \"\\f098\";\n$fa-var-photo: \"\\f03e\";\n$fa-var-picture-o: \"\\f03e\";\n$fa-var-pie-chart: \"\\f200\";\n$fa-var-pied-piper: \"\\f2ae\";\n$fa-var-pied-piper-alt: \"\\f1a8\";\n$fa-var-pied-piper-pp: \"\\f1a7\";\n$fa-var-pinterest: \"\\f0d2\";\n$fa-var-pinterest-p: \"\\f231\";\n$fa-var-pinterest-square: \"\\f0d3\";\n$fa-var-plane: \"\\f072\";\n$fa-var-play: \"\\f04b\";\n$fa-var-play-circle: \"\\f144\";\n$fa-var-play-circle-o: \"\\f01d\";\n$fa-var-plug: \"\\f1e6\";\n$fa-var-plus: \"\\f067\";\n$fa-var-plus-circle: \"\\f055\";\n$fa-var-plus-square: \"\\f0fe\";\n$fa-var-plus-square-o: \"\\f196\";\n$fa-var-power-off: \"\\f011\";\n$fa-var-print: \"\\f02f\";\n$fa-var-product-hunt: \"\\f288\";\n$fa-var-puzzle-piece: \"\\f12e\";\n$fa-var-qq: \"\\f1d6\";\n$fa-var-qrcode: \"\\f029\";\n$fa-var-question: \"\\f128\";\n$fa-var-question-circle: \"\\f059\";\n$fa-var-question-circle-o: \"\\f29c\";\n$fa-var-quote-left: \"\\f10d\";\n$fa-var-quote-right: \"\\f10e\";\n$fa-var-ra: \"\\f1d0\";\n$fa-var-random: \"\\f074\";\n$fa-var-rebel: \"\\f1d0\";\n$fa-var-recycle: \"\\f1b8\";\n$fa-var-reddit: \"\\f1a1\";\n$fa-var-reddit-alien: \"\\f281\";\n$fa-var-reddit-square: \"\\f1a2\";\n$fa-var-refresh: \"\\f021\";\n$fa-var-registered: \"\\f25d\";\n$fa-var-remove: \"\\f00d\";\n$fa-var-renren: \"\\f18b\";\n$fa-var-reorder: \"\\f0c9\";\n$fa-var-repeat: \"\\f01e\";\n$fa-var-reply: \"\\f112\";\n$fa-var-reply-all: \"\\f122\";\n$fa-var-resistance: \"\\f1d0\";\n$fa-var-retweet: \"\\f079\";\n$fa-var-rmb: \"\\f157\";\n$fa-var-road: \"\\f018\";\n$fa-var-rocket: \"\\f135\";\n$fa-var-rotate-left: \"\\f0e2\";\n$fa-var-rotate-right: \"\\f01e\";\n$fa-var-rouble: \"\\f158\";\n$fa-var-rss: \"\\f09e\";\n$fa-var-rss-square: \"\\f143\";\n$fa-var-rub: \"\\f158\";\n$fa-var-ruble: \"\\f158\";\n$fa-var-rupee: \"\\f156\";\n$fa-var-safari: \"\\f267\";\n$fa-var-save: \"\\f0c7\";\n$fa-var-scissors: \"\\f0c4\";\n$fa-var-scribd: \"\\f28a\";\n$fa-var-search: \"\\f002\";\n$fa-var-search-minus: \"\\f010\";\n$fa-var-search-plus: \"\\f00e\";\n$fa-var-sellsy: \"\\f213\";\n$fa-var-send: \"\\f1d8\";\n$fa-var-send-o: \"\\f1d9\";\n$fa-var-server: \"\\f233\";\n$fa-var-share: \"\\f064\";\n$fa-var-share-alt: \"\\f1e0\";\n$fa-var-share-alt-square: \"\\f1e1\";\n$fa-var-share-square: \"\\f14d\";\n$fa-var-share-square-o: \"\\f045\";\n$fa-var-shekel: \"\\f20b\";\n$fa-var-sheqel: \"\\f20b\";\n$fa-var-shield: \"\\f132\";\n$fa-var-ship: \"\\f21a\";\n$fa-var-shirtsinbulk: \"\\f214\";\n$fa-var-shopping-bag: \"\\f290\";\n$fa-var-shopping-basket: \"\\f291\";\n$fa-var-shopping-cart: \"\\f07a\";\n$fa-var-sign-in: \"\\f090\";\n$fa-var-sign-language: \"\\f2a7\";\n$fa-var-sign-out: \"\\f08b\";\n$fa-var-signal: \"\\f012\";\n$fa-var-signing: \"\\f2a7\";\n$fa-var-simplybuilt: \"\\f215\";\n$fa-var-sitemap: \"\\f0e8\";\n$fa-var-skyatlas: \"\\f216\";\n$fa-var-skype: \"\\f17e\";\n$fa-var-slack: \"\\f198\";\n$fa-var-sliders: \"\\f1de\";\n$fa-var-slideshare: \"\\f1e7\";\n$fa-var-smile-o: \"\\f118\";\n$fa-var-snapchat: \"\\f2ab\";\n$fa-var-snapchat-ghost: \"\\f2ac\";\n$fa-var-snapchat-square: \"\\f2ad\";\n$fa-var-soccer-ball-o: \"\\f1e3\";\n$fa-var-sort: \"\\f0dc\";\n$fa-var-sort-alpha-asc: \"\\f15d\";\n$fa-var-sort-alpha-desc: \"\\f15e\";\n$fa-var-sort-amount-asc: \"\\f160\";\n$fa-var-sort-amount-desc: \"\\f161\";\n$fa-var-sort-asc: \"\\f0de\";\n$fa-var-sort-desc: \"\\f0dd\";\n$fa-var-sort-down: \"\\f0dd\";\n$fa-var-sort-numeric-asc: \"\\f162\";\n$fa-var-sort-numeric-desc: \"\\f163\";\n$fa-var-sort-up: \"\\f0de\";\n$fa-var-soundcloud: \"\\f1be\";\n$fa-var-space-shuttle: \"\\f197\";\n$fa-var-spinner: \"\\f110\";\n$fa-var-spoon: \"\\f1b1\";\n$fa-var-spotify: \"\\f1bc\";\n$fa-var-square: \"\\f0c8\";\n$fa-var-square-o: \"\\f096\";\n$fa-var-stack-exchange: \"\\f18d\";\n$fa-var-stack-overflow: \"\\f16c\";\n$fa-var-star: \"\\f005\";\n$fa-var-star-half: \"\\f089\";\n$fa-var-star-half-empty: \"\\f123\";\n$fa-var-star-half-full: \"\\f123\";\n$fa-var-star-half-o: \"\\f123\";\n$fa-var-star-o: \"\\f006\";\n$fa-var-steam: \"\\f1b6\";\n$fa-var-steam-square: \"\\f1b7\";\n$fa-var-step-backward: \"\\f048\";\n$fa-var-step-forward: \"\\f051\";\n$fa-var-stethoscope: \"\\f0f1\";\n$fa-var-sticky-note: \"\\f249\";\n$fa-var-sticky-note-o: \"\\f24a\";\n$fa-var-stop: \"\\f04d\";\n$fa-var-stop-circle: \"\\f28d\";\n$fa-var-stop-circle-o: \"\\f28e\";\n$fa-var-street-view: \"\\f21d\";\n$fa-var-strikethrough: \"\\f0cc\";\n$fa-var-stumbleupon: \"\\f1a4\";\n$fa-var-stumbleupon-circle: \"\\f1a3\";\n$fa-var-subscript: \"\\f12c\";\n$fa-var-subway: \"\\f239\";\n$fa-var-suitcase: \"\\f0f2\";\n$fa-var-sun-o: \"\\f185\";\n$fa-var-superscript: \"\\f12b\";\n$fa-var-support: \"\\f1cd\";\n$fa-var-table: \"\\f0ce\";\n$fa-var-tablet: \"\\f10a\";\n$fa-var-tachometer: \"\\f0e4\";\n$fa-var-tag: \"\\f02b\";\n$fa-var-tags: \"\\f02c\";\n$fa-var-tasks: \"\\f0ae\";\n$fa-var-taxi: \"\\f1ba\";\n$fa-var-television: \"\\f26c\";\n$fa-var-tencent-weibo: \"\\f1d5\";\n$fa-var-terminal: \"\\f120\";\n$fa-var-text-height: \"\\f034\";\n$fa-var-text-width: \"\\f035\";\n$fa-var-th: \"\\f00a\";\n$fa-var-th-large: \"\\f009\";\n$fa-var-th-list: \"\\f00b\";\n$fa-var-themeisle: \"\\f2b2\";\n$fa-var-thumb-tack: \"\\f08d\";\n$fa-var-thumbs-down: \"\\f165\";\n$fa-var-thumbs-o-down: \"\\f088\";\n$fa-var-thumbs-o-up: \"\\f087\";\n$fa-var-thumbs-up: \"\\f164\";\n$fa-var-ticket: \"\\f145\";\n$fa-var-times: \"\\f00d\";\n$fa-var-times-circle: \"\\f057\";\n$fa-var-times-circle-o: \"\\f05c\";\n$fa-var-tint: \"\\f043\";\n$fa-var-toggle-down: \"\\f150\";\n$fa-var-toggle-left: \"\\f191\";\n$fa-var-toggle-off: \"\\f204\";\n$fa-var-toggle-on: \"\\f205\";\n$fa-var-toggle-right: \"\\f152\";\n$fa-var-toggle-up: \"\\f151\";\n$fa-var-trademark: \"\\f25c\";\n$fa-var-train: \"\\f238\";\n$fa-var-transgender: \"\\f224\";\n$fa-var-transgender-alt: \"\\f225\";\n$fa-var-trash: \"\\f1f8\";\n$fa-var-trash-o: \"\\f014\";\n$fa-var-tree: \"\\f1bb\";\n$fa-var-trello: \"\\f181\";\n$fa-var-tripadvisor: \"\\f262\";\n$fa-var-trophy: \"\\f091\";\n$fa-var-truck: \"\\f0d1\";\n$fa-var-try: \"\\f195\";\n$fa-var-tty: \"\\f1e4\";\n$fa-var-tumblr: \"\\f173\";\n$fa-var-tumblr-square: \"\\f174\";\n$fa-var-turkish-lira: \"\\f195\";\n$fa-var-tv: \"\\f26c\";\n$fa-var-twitch: \"\\f1e8\";\n$fa-var-twitter: \"\\f099\";\n$fa-var-twitter-square: \"\\f081\";\n$fa-var-umbrella: \"\\f0e9\";\n$fa-var-underline: \"\\f0cd\";\n$fa-var-undo: \"\\f0e2\";\n$fa-var-universal-access: \"\\f29a\";\n$fa-var-university: \"\\f19c\";\n$fa-var-unlink: \"\\f127\";\n$fa-var-unlock: \"\\f09c\";\n$fa-var-unlock-alt: \"\\f13e\";\n$fa-var-unsorted: \"\\f0dc\";\n$fa-var-upload: \"\\f093\";\n$fa-var-usb: \"\\f287\";\n$fa-var-usd: \"\\f155\";\n$fa-var-user: \"\\f007\";\n$fa-var-user-md: \"\\f0f0\";\n$fa-var-user-plus: \"\\f234\";\n$fa-var-user-secret: \"\\f21b\";\n$fa-var-user-times: \"\\f235\";\n$fa-var-users: \"\\f0c0\";\n$fa-var-venus: \"\\f221\";\n$fa-var-venus-double: \"\\f226\";\n$fa-var-venus-mars: \"\\f228\";\n$fa-var-viacoin: \"\\f237\";\n$fa-var-viadeo: \"\\f2a9\";\n$fa-var-viadeo-square: \"\\f2aa\";\n$fa-var-video-camera: \"\\f03d\";\n$fa-var-vimeo: \"\\f27d\";\n$fa-var-vimeo-square: \"\\f194\";\n$fa-var-vine: \"\\f1ca\";\n$fa-var-vk: \"\\f189\";\n$fa-var-volume-control-phone: \"\\f2a0\";\n$fa-var-volume-down: \"\\f027\";\n$fa-var-volume-off: \"\\f026\";\n$fa-var-volume-up: \"\\f028\";\n$fa-var-warning: \"\\f071\";\n$fa-var-wechat: \"\\f1d7\";\n$fa-var-weibo: \"\\f18a\";\n$fa-var-weixin: \"\\f1d7\";\n$fa-var-whatsapp: \"\\f232\";\n$fa-var-wheelchair: \"\\f193\";\n$fa-var-wheelchair-alt: \"\\f29b\";\n$fa-var-wifi: \"\\f1eb\";\n$fa-var-wikipedia-w: \"\\f266\";\n$fa-var-windows: \"\\f17a\";\n$fa-var-won: \"\\f159\";\n$fa-var-wordpress: \"\\f19a\";\n$fa-var-wpbeginner: \"\\f297\";\n$fa-var-wpforms: \"\\f298\";\n$fa-var-wrench: \"\\f0ad\";\n$fa-var-xing: \"\\f168\";\n$fa-var-xing-square: \"\\f169\";\n$fa-var-y-combinator: \"\\f23b\";\n$fa-var-y-combinator-square: \"\\f1d4\";\n$fa-var-yahoo: \"\\f19e\";\n$fa-var-yc: \"\\f23b\";\n$fa-var-yc-square: \"\\f1d4\";\n$fa-var-yelp: \"\\f1e9\";\n$fa-var-yen: \"\\f157\";\n$fa-var-yoast: \"\\f2b1\";\n$fa-var-youtube: \"\\f167\";\n$fa-var-youtube-play: \"\\f16a\";\n$fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "python/nav/web/sass/font-awesome/font-awesome.scss",
    "content": "/*!\n *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"larger\";\n@import \"fixed-width\";\n@import \"list\";\n@import \"bordered-pulled\";\n@import \"animated\";\n@import \"rotated-flipped\";\n@import \"stacked\";\n@import \"icons\";\n@import \"screen-reader\";\n"
  },
  {
    "path": "python/nav/web/sass/foundation/_functions.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n// This is the default html and body font-size for the base rem value.\n$rem-base: 16px !default;\n\n// IMPORT ONCE\n// We use this to prevent styles from being loaded multiple times for compenents that rely on other components.\n$modules: () !default;\n@mixin exports($name) {\n  $module_index: index($modules, $name);\n  @if (($module_index == null) or ($module_index == false)) {\n    $modules: append($modules, $name);\n    @content;\n  }\n}\n\n//\n// @functions\n//\n\n\n// RANGES\n// We use these functions to define ranges for various things, like media queries.\n@function lower-bound($range){\n  @if length($range) <= 0 {\n    @return 0;\n  }\n  @return nth($range,1);\n}\n\n@function upper-bound($range) {\n  @if length($range) < 2 {\n    @return 999999999999;\n  }\n  @return nth($range, 2);\n}\n\n// STRIP UNIT\n// It strips the unit of measure and returns it\n@function strip-unit($num) {\n  @return $num / ($num * 0 + 1);\n}\n\n// TEXT INPUT TYPES\n\n@function text-inputs( $types: all, $selector: input ) {\n\n    $return: ();\n\n    $all-text-input-types:\n      text\n      password\n      date\n      datetime\n      datetime-local\n      month\n      week\n      email\n      number\n      search\n      tel\n      time\n      url\n      color\n      textarea;\n\n    @if $types == all { $types: $all-text-input-types; }\n\n    @each $type in $types {\n        @if $type == textarea {\n            @if $selector == input {\n              $return: append($return, unquote('#{$type}'), comma)\n            } @else {\n              $return: append($return, unquote('#{$type}#{$selector}'), comma)\n            }\n        } @else {\n            $return: append($return, unquote('#{$selector}[type=\"#{$type}\"]'), comma)\n        }\n    }\n\n    @return $return;\n\n}\n\n// CONVERT TO REM\n@function convert-to-rem($value, $base-value: $rem-base)  {\n  $value: strip-unit($value) / strip-unit($base-value) * 1rem;\n  @if ($value == 0rem) { $value: 0; } // Turn 0rem into 0\n  @return $value;\n}\n\n@function data($attr) {\n  @if $namespace {\n    @return '[data-' + $namespace + '-' + $attr + ']';\n  }\n\n  @return '[data-' + $attr + ']';\n}\n\n// REM CALC\n\n// New Syntax, allows to optionally calculate on a different base value to counter compounding effect of rem's.\n// Call with 1, 2, 3 or 4 parameters, 'px' is not required but supported:\n//\n//   rem-calc(10 20 30px 40);\n//\n// Space delimited, if you want to delimit using comma's, wrap it in another pair of brackets\n//\n//   rem-calc((10, 20, 30, 40px));\n//\n// Optionally call with a different base (eg: 8px) to calculate rem.\n//\n//   rem-calc(16px 32px 48px, 8px);\n//\n// If you require to comma separate your list\n//\n//   rem-calc((16px, 32px, 48), 8px);\n\n@function rem-calc($values, $base-value: $rem-base) {\n  $max: length($values);\n\n  @if $max == 1 { @return convert-to-rem(nth($values, 1), $base-value); }\n\n  $remValues: ();\n  @for $i from 1 through $max {\n    $remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value));\n  }\n  @return $remValues;\n}\n\n// OLD EM CALC\n// Deprecated: We'll drop support for this in 5.1.0, use rem-calc()\n@function emCalc($values){\n  @return rem-calc($values);\n}\n\n// OLD EM CALC\n// Deprecated: We'll drop support for this in 5.1.0, use rem-calc()\n@function em-calc($values){\n  @return rem-calc($values);\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/_settings.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n//\n\n// Table of Contents\n// Foundation Settings\n//\n// a. Base\n// b. Grid\n// c. Global\n// d. Media Query Ranges\n// e. Typography\n// 01. Accordion\n// 02. Alert Boxes\n// 03. Block Grid\n// 04. Breadcrumbs\n// 05. Buttons\n// 06. Button Groups\n// 07. Clearing\n// 08. Dropdown\n// 09. Dropdown Buttons\n// 10. Flex Video\n// 11. Forms\n// 12. Icon Bar\n// 13. Inline Lists\n// 14. Joyride\n// 15. Keystrokes\n// 16. Labels\n// 17. Magellan\n// 18. Off-canvas\n// 19. Orbit\n// 20. Pagination\n// 21. Panels\n// 22. Pricing Tables\n// 23. Progress Bar\n// 24. Range Slider\n// 25. Reveal\n// 26. Side Nav\n// 27. Split Buttons\n// 28. Sub Nav\n// 29. Switch\n// 30. Tables\n// 31. Tabs\n// 32. Thumbnails\n// 33. Tooltips\n// 34. Top Bar\n// 36. Visibility Classes\n\n// a. Base\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// This is the default html and body font-size for the base rem value.\n// $rem-base: 16px;\n\n// Allows the use of rem-calc() or lower-bound() in your settings\n@import \"foundation/functions\";\n\n// The default font-size is set to 100% of the browser style sheet (usually 16px)\n// for compatibility with browser-based text zoom or user-set defaults.\n\n// Since the typical default browser font-size is 16px, that makes the calculation for grid size.\n// If you want your base font-size to be different and not have it affect the grid breakpoints,\n// set $rem-base to $base-font-size and make sure $base-font-size is a px value.\n// $base-font-size: 100%;\n\n// The $base-font-size is 100% while $base-line-height is 150%\n// $base-line-height: 150%;\n\n// We use this to control whether or not CSS classes come through in the gem files.\n$include-html-classes: true;\n// $include-print-styles: true;\n$include-html-global-classes: $include-html-classes;\n\n// b. Grid\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-grid-classes: $include-html-classes;\n// $include-xl-html-grid-classes: false;\n\n// $row-width: rem-calc(1000);\n// $total-columns: 12;\n// $column-gutter: rem-calc(30);\n\n// c. Global\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// We use these to define default font stacks\n// $font-family-sans-serif: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif;\n// $font-family-serif: Georgia, Cambria, \"Times New Roman\", Times, serif;\n// $font-family-monospace: Consolas, \"Liberation Mono\", Courier, monospace;\n\n// We use these to define default font weights\n// $font-weight-normal: normal !default;\n// $font-weight-bold: bold !default;\n\n// $white       : #FFFFFF;\n// $ghost       : #FAFAFA;\n// $snow        : #F9F9F9;\n// $vapor       : #F6F6F6;\n// $white-smoke : #F5F5F5;\n// $silver      : #EFEFEF;\n// $smoke       : #EEEEEE;\n// $gainsboro   : #DDDDDD;\n// $iron        : #CCCCCC;\n// $base        : #AAAAAA;\n// $aluminum    : #999999;\n// $jumbo       : #888888;\n// $monsoon     : #777777;\n// $steel       : #666666;\n// $charcoal    : #555555;\n// $tuatara     : #444444;\n// $oil         : #333333;\n// $jet         : #222222;\n// $black       : #000000;\n\n// We use these as default colors throughout\n// $primary-color: #008CBA;\n// $secondary-color: #e7e7e7;\n// $alert-color: #f04124;\n// $success-color: #43AC6A;\n// $warning-color: #f08a24;\n// $info-color: #a0d3e8;\n\n// We use these to control various global styles\n// $body-bg: $white;\n// $body-font-color: $jet;\n// $body-font-family: $font-family-sans-serif;\n// $body-font-weight: $font-weight-normal;\n// $body-font-style: normal;\n\n// We use this to control font-smoothing\n// $font-smoothing: antialiased;\n\n// We use these to control text direction settings\n// $text-direction: ltr;\n// $opposite-direction: right;\n// $default-float: left;\n// $last-child-float: $opposite-direction;\n\n// We use these to make sure border radius matches unless we want it different.\n// $global-radius: 3px;\n// $global-rounded: 1000px;\n\n// We use these to control inset shadow shiny edges and depressions.\n// $shiny-edge-size: 0 1px 0;\n// $shiny-edge-color: rgba($white, .5);\n// $shiny-edge-active-color: rgba($black, .2);\n\n// d. Media Query Ranges\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $small-range: (0em, 40em);\n// $medium-range: (40.063em, 64em);\n// $large-range: (64.063em, 90em);\n// $xlarge-range: (90.063em, 120em);\n// $xxlarge-range: (120.063em, 99999999em);\n\n// $screen: \"only screen\";\n\n// $landscape: \"#{$screen} and (orientation: landscape)\";\n// $portrait: \"#{$screen} and (orientation: portrait)\";\n\n// $small-up: $screen;\n// $small-only: \"#{$screen} and (max-width: #{upper-bound($small-range)})\";\n\n// $medium-up: \"#{$screen} and (min-width:#{lower-bound($medium-range)})\";\n// $medium-only: \"#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})\";\n\n// $large-up: \"#{$screen} and (min-width:#{lower-bound($large-range)})\";\n// $large-only: \"#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})\";\n\n// $xlarge-up: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)})\";\n// $xlarge-only: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})\";\n\n// $xxlarge-up: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)})\";\n// $xxlarge-only: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})\";\n\n// Legacy\n// $small: $medium-up;\n// $medium: $medium-up;\n// $large: $large-up;\n\n// We use this as cursors values for enabling the option of having custom cursors in the whole site's stylesheet\n// $cursor-crosshair-value: crosshair;\n// $cursor-default-value: default;\n// $cursor-pointer-value: pointer;\n// $cursor-help-value: help;\n// $cursor-text-value: text;\n\n// e. Typography\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-type-classes: $include-html-classes;\n\n// We use these to control header font styles\n// $header-font-family: $body-font-family;\n// $header-font-weight: $font-weight-normal;\n// $header-font-style: normal;\n// $header-font-color: $jet;\n// $header-line-height: 1.4;\n// $header-top-margin: .2rem;\n// $header-bottom-margin: .5rem;\n// $header-text-rendering: optimizeLegibility;\n\n// We use these to control header font sizes\n// $h1-font-size: rem-calc(44);\n// $h2-font-size: rem-calc(37);\n// $h3-font-size: rem-calc(27);\n// $h4-font-size: rem-calc(23);\n// $h5-font-size: rem-calc(18);\n// $h6-font-size: 1rem;\n\n// We use these to control header size reduction on small screens\n// $h1-font-reduction: rem-calc(10) !default;\n// $h2-font-reduction: rem-calc(10) !default;\n// $h3-font-reduction: rem-calc(5) !default;\n// $h4-font-reduction: rem-calc(5) !default;\n// $h5-font-reduction: 0 !default;\n// $h6-font-reduction: 0 !default;\n\n// These control how subheaders are styled.\n// $subheader-line-height: 1.4;\n// $subheader-font-color: scale-color($header-font-color, $lightness: 35%);\n// $subheader-font-weight: $font-weight-normal;\n// $subheader-top-margin: .2rem;\n// $subheader-bottom-margin: .5rem;\n\n// A general <small> styling\n// $small-font-size: 60%;\n// $small-font-color: scale-color($header-font-color, $lightness: 35%);\n\n// We use these to style paragraphs\n// $paragraph-font-family: inherit;\n// $paragraph-font-weight: $font-weight-normal;\n// $paragraph-font-size: 1rem;\n// $paragraph-line-height: 1.6;\n// $paragraph-margin-bottom: rem-calc(20);\n// $paragraph-aside-font-size: rem-calc(14);\n// $paragraph-aside-line-height: 1.35;\n// $paragraph-aside-font-style: italic;\n// $paragraph-text-rendering: optimizeLegibility;\n\n// We use these to style <code> tags\n// $code-color: $oil;\n// $code-font-family: $font-family-monospace;\n// $code-font-weight: $font-weight-normal;\n// $code-background-color: scale-color($secondary-color, $lightness: 70%);\n// $code-border-size: 1px;\n// $code-border-style: solid;\n// $code-border-color: scale-color($code-background-color, $lightness: -10%);\n// $code-padding: rem-calc(2) rem-calc(5) rem-calc(1);\n\n// We use these to style anchors\n// $anchor-text-decoration: none;\n// $anchor-text-decoration-hover: none;\n// $anchor-font-color: $primary-color;\n// $anchor-font-color-hover: scale-color($primary-color, $lightness: -14%);\n\n// We use these to style the <hr> element\n// $hr-border-width: 1px;\n// $hr-border-style: solid;\n// $hr-border-color: $gainsboro;\n// $hr-margin: rem-calc(20);\n\n// We use these to style lists\n// $list-font-family: $paragraph-font-family;\n// $list-font-size: $paragraph-font-size;\n// $list-line-height: $paragraph-line-height;\n// $list-margin-bottom: $paragraph-margin-bottom;\n// $list-style-position: outside;\n// $list-side-margin: 1.1rem;\n// $list-ordered-side-margin: 1.4rem;\n// $list-side-margin-no-bullet: 0;\n// $list-nested-margin: rem-calc(20);\n// $definition-list-header-weight: $font-weight-bold;\n// $definition-list-header-margin-bottom: .3rem;\n// $definition-list-margin-bottom: rem-calc(12);\n\n// We use these to style blockquotes\n// $blockquote-font-color: scale-color($header-font-color, $lightness: 35%);\n// $blockquote-padding: rem-calc(9 20 0 19);\n// $blockquote-border: 1px solid $gainsboro;\n// $blockquote-cite-font-size: rem-calc(13);\n// $blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%);\n// $blockquote-cite-link-color: $blockquote-cite-font-color;\n\n// Acronym styles\n// $acronym-underline: 1px dotted $gainsboro;\n\n// We use these to control padding and margin\n// $microformat-padding: rem-calc(10 12);\n// $microformat-margin: rem-calc(0 0 20 0);\n\n// We use these to control the border styles\n// $microformat-border-width: 1px;\n// $microformat-border-style: solid;\n// $microformat-border-color: $gainsboro;\n\n// We use these to control full name font styles\n// $microformat-fullname-font-weight: $font-weight-bold;\n// $microformat-fullname-font-size: rem-calc(15);\n\n// We use this to control the summary font styles\n// $microformat-summary-font-weight: $font-weight-bold;\n\n// We use this to control abbr padding\n// $microformat-abbr-padding: rem-calc(0 1);\n\n// We use this to control abbr font styles\n// $microformat-abbr-font-weight: $font-weight-bold;\n// $microformat-abbr-font-decoration: none;\n\n// 01. Accordion\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-accordion-classes: $include-html-classes;\n\n// $accordion-navigation-padding: rem-calc(16);\n// $accordion-navigation-bg-color: $silver;\n// $accordion-navigation-hover-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -5%);\n// $accordion-navigation-active-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -3%);\n// $accordion-navigation-font-color: $jet;\n// $accordion-navigation-font-size: rem-calc(16);\n// $accordion-navigation-font-family: $body-font-family;\n\n// $accordion-content-padding: ($column-gutter/2);\n// $accordion-content-active-bg-color: $white;\n\n// 02. Alert Boxes\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-alert-classes: $include-html-classes;\n\n// We use this to control alert padding.\n// $alert-padding-top: rem-calc(14);\n// $alert-padding-default-float: $alert-padding-top;\n// $alert-padding-opposite-direction: $alert-padding-top + rem-calc(10);\n// $alert-padding-bottom: $alert-padding-top;\n\n// We use these to control text style.\n// $alert-font-weight: $font-weight-normal;\n// $alert-font-size: rem-calc(13);\n// $alert-font-color: $white;\n// $alert-font-color-alt: scale-color($secondary-color, $lightness: -66%);\n\n// We use this for close hover effect.\n// $alert-function-factor: -14%;\n\n// We use these to control border styles.\n// $alert-border-style: solid;\n// $alert-border-width: 1px;\n// $alert-border-color: scale-color($primary-color, $lightness: $alert-function-factor);\n// $alert-bottom-margin: rem-calc(20);\n\n// We use these to style the close buttons\n// $alert-close-color: $oil;\n// $alert-close-top: 50%;\n// $alert-close-position: rem-calc(4);\n// $alert-close-font-size: rem-calc(22);\n// $alert-close-opacity: 0.3;\n// $alert-close-opacity-hover: 0.5;\n// $alert-close-padding: 9px 6px 4px;\n\n// We use this to control border radius\n// $alert-radius: $global-radius;\n\n// We use this to control transition effects\n// $alert-transition-speed: 300ms;\n// $alert-transition-ease: ease-out;\n\n// 03. Block Grid\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-block-grid-classes: $include-html-classes;\n// $include-xl-html-block-grid-classes: false;\n\n// We use this to control the maximum number of block grid elements per row\n// $block-grid-elements: 12;\n// $block-grid-default-spacing: rem-calc(20);\n// $align-block-grid-to-grid: false;\n\n// Enables media queries for block-grid classes. Set to false if writing semantic HTML.\n// $block-grid-media-queries: true;\n\n// 04. Breadcrumbs\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-nav-classes: $include-html-classes;\n\n// We use this to set the background color for the breadcrumb container.\n// $crumb-bg: scale-color($secondary-color, $lightness: 55%);\n\n// We use these to set the padding around the breadcrumbs.\n// $crumb-padding: rem-calc(9 14 9);\n// $crumb-side-padding: rem-calc(12);\n\n// We use these to control border styles.\n// $crumb-function-factor: -10%;\n// $crumb-border-size: 1px;\n// $crumb-border-style: solid;\n// $crumb-border-color: scale-color($crumb-bg, $lightness: $crumb-function-factor);\n// $crumb-radius: $global-radius;\n\n// We use these to set various text styles for breadcrumbs.\n// $crumb-font-size: rem-calc(11);\n// $crumb-font-color: $primary-color;\n// $crumb-font-color-current: $oil;\n// $crumb-font-color-unavailable: $aluminum;\n// $crumb-font-transform: uppercase;\n// $crumb-link-decor: underline;\n\n// We use these to control the slash between breadcrumbs\n// $crumb-slash-color: $base;\n// $crumb-slash: \"/\";\n\n// 05. Buttons\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-button-classes: $include-html-classes;\n\n// We use these to build padding for buttons.\n// $button-tny: rem-calc(10);\n// $button-sml: rem-calc(14);\n// $button-med: rem-calc(16);\n// $button-lrg: rem-calc(18);\n\n// We use this to control the display property.\n// $button-display: inline-block;\n// $button-margin-bottom: rem-calc(20);\n\n// We use these to control button text styles.\n// $button-font-family: $body-font-family;\n// $button-font-color: $white;\n// $button-font-color-alt: $oil;\n// $button-font-tny: rem-calc(11);\n// $button-font-sml: rem-calc(13);\n// $button-font-med: rem-calc(16);\n// $button-font-lrg: rem-calc(20);\n// $button-font-weight: $font-weight-normal;\n// $button-font-align: center;\n\n// We use these to control various hover effects.\n// $button-function-factor: -20%;\n\n// We use these to control button border and hover styles.\n// $button-border-width: 0px;\n// $button-border-style: solid;\n// $button-bg-color: $primary-color;\n// $button-bg-hover: scale-color($button-bg-color, $lightness: $button-function-factor);\n// $button-border-color: $button-bg-hover;\n// $secondary-button-bg-hover: scale-color($secondary-color, $lightness: $button-function-factor);\n// $secondary-button-border-color: $secondary-button-bg-hover;\n// $success-button-bg-hover: scale-color($success-color, $lightness: $button-function-factor);\n// $success-button-border-color: $success-button-bg-hover;\n// $alert-button-bg-hover: scale-color($alert-color, $lightness: $button-function-factor);\n// $alert-button-border-color: $alert-button-bg-hover;\n\n// We use this to set the default radius used throughout the core.\n// $button-radius: $global-radius;\n// $button-round: $global-rounded;\n\n// We use this to set default opacity and cursor for disabled buttons.\n// $button-disabled-opacity: 0.7;\n// $button-disabled-cursor: $cursor-default-value;\n\n// 06. Button Groups\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-button-classes: $include-html-classes;\n\n// Sets the margin for the right side by default, and the left margin if right-to-left direction is used\n// $button-bar-margin-opposite: rem-calc(10);\n// $button-group-border-width: 1px;\n\n// 07. Clearing\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-clearing-classes: $include-html-classes;\n\n// We use these to set the background colors for parts of Clearing.\n// $clearing-bg: $oil;\n// $clearing-caption-bg: $clearing-bg;\n// $clearing-carousel-bg: rgba(51,51,51,0.8);\n// $clearing-img-bg: $clearing-bg;\n\n// We use these to style the close button\n// $clearing-close-color: $iron;\n// $clearing-close-size: 30px;\n\n// We use these to style the arrows\n// $clearing-arrow-size: 12px;\n// $clearing-arrow-color: $clearing-close-color;\n\n// We use these to style captions\n// $clearing-caption-font-color: $iron;\n// $clearing-caption-font-size: 0.875em;\n// $clearing-caption-padding: 10px 30px 20px;\n\n// We use these to make the image and carousel height and style\n// $clearing-active-img-height: 85%;\n// $clearing-carousel-height: 120px;\n// $clearing-carousel-thumb-width: 120px;\n// $clearing-carousel-thumb-active-border: 1px solid rgb(255,255,255);\n\n// 08. Dropdown\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-dropdown-classes: $include-html-classes;\n\n// We use these to controls height and width styles.\n// $f-dropdown-max-width: 200px;\n// $f-dropdown-height: auto;\n// $f-dropdown-max-height: none;\n\n// Used for bottom position\n// $f-dropdown-margin-top: 2px;\n\n// Used for right position\n// $f-dropdown-margin-left: $f-dropdown-margin-top;\n\n// Used for left position\n// $f-dropdown-margin-right: $f-dropdown-margin-top;\n\n// Used for top position\n// $f-dropdown-margin-bottom: $f-dropdown-margin-top;\n\n// We use this to control the background color\n// $f-dropdown-bg: $white;\n\n// We use this to set the border styles for dropdowns.\n// $f-dropdown-border-style: solid;\n// $f-dropdown-border-width: 1px;\n// $f-dropdown-border-color: scale-color($white, $lightness: -20%);\n\n// We use these to style the triangle pip.\n// $f-dropdown-triangle-size: 6px;\n// $f-dropdown-triangle-color: $white;\n// $f-dropdown-triangle-side-offset: 10px;\n\n// We use these to control styles for the list elements.\n// $f-dropdown-list-style: none;\n// $f-dropdown-font-color: $charcoal;\n// $f-dropdown-font-size: rem-calc(14);\n// $f-dropdown-list-padding: rem-calc(5, 10);\n// $f-dropdown-line-height: rem-calc(18);\n// $f-dropdown-list-hover-bg: $smoke;\n// $dropdown-mobile-default-float: 0;\n\n// We use this to control the styles for when the dropdown has custom content.\n// $f-dropdown-content-padding: rem-calc(20);\n\n// Default radius for dropdown.\n// $f-dropdown-radius: $global-radius;\n\n\n// 09. Dropdown Buttons\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-button-classes: $include-html-classes;\n\n// We use these to set the color of the pip in dropdown buttons\n// $dropdown-button-pip-color: $white;\n// $dropdown-button-pip-color-alt: $oil;\n\n// $button-pip-tny: rem-calc(6);\n// $button-pip-sml: rem-calc(7);\n// $button-pip-med: rem-calc(9);\n// $button-pip-lrg: rem-calc(11);\n\n// We use these to style tiny dropdown buttons\n// $dropdown-button-padding-tny: $button-pip-tny * 7;\n// $dropdown-button-pip-size-tny: $button-pip-tny;\n// $dropdown-button-pip-opposite-tny: $button-pip-tny * 3;\n// $dropdown-button-pip-top-tny: (-$button-pip-tny / 2) + rem-calc(1);\n\n// We use these to style small dropdown buttons\n// $dropdown-button-padding-sml: $button-pip-sml * 7;\n// $dropdown-button-pip-size-sml: $button-pip-sml;\n// $dropdown-button-pip-opposite-sml: $button-pip-sml * 3;\n// $dropdown-button-pip-top-sml: (-$button-pip-sml / 2) + rem-calc(1);\n\n// We use these to style medium dropdown buttons\n// $dropdown-button-padding-med: $button-pip-med * 6 + rem-calc(3);\n// $dropdown-button-pip-size-med: $button-pip-med - rem-calc(3);\n// $dropdown-button-pip-opposite-med: $button-pip-med * 2.5;\n// $dropdown-button-pip-top-med: (-$button-pip-med / 2) + rem-calc(2);\n\n// We use these to style large dropdown buttons\n// $dropdown-button-padding-lrg: $button-pip-lrg * 5 + rem-calc(3);\n// $dropdown-button-pip-size-lrg: $button-pip-lrg - rem-calc(6);\n// $dropdown-button-pip-opposite-lrg: $button-pip-lrg * 2.5;\n// $dropdown-button-pip-top-lrg: (-$button-pip-lrg / 2) + rem-calc(3);\n\n// 10. Flex Video\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-media-classes: $include-html-classes;\n\n// We use these to control video container padding and margins\n// $flex-video-padding-top: rem-calc(25);\n// $flex-video-padding-bottom: 67.5%;\n// $flex-video-margin-bottom: rem-calc(16);\n\n// We use this to control widescreen bottom padding\n// $flex-video-widescreen-padding-bottom: 56.34%;\n\n// 11. Forms\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-form-classes: $include-html-classes;\n\n// We use this to set the base for lots of form spacing and positioning styles\n// $form-spacing: rem-calc(16);\n\n// We use these to style the labels in different ways\n// $form-label-pointer: pointer;\n// $form-label-font-size: rem-calc(14);\n// $form-label-font-weight: $font-weight-normal;\n// $form-label-line-height: 1.5;\n// $form-label-font-color: scale-color($black, $lightness: 30%);\n// $form-label-small-transform: capitalize;\n// $form-label-bottom-margin: 0;\n// $input-font-family: inherit;\n// $input-font-color: rgba(0,0,0,0.75);\n// $input-font-size: rem-calc(14);\n// $input-bg-color: $white;\n// $input-focus-bg-color: scale-color($white, $lightness: -2%);\n// $input-border-color: scale-color($white, $lightness: -20%);\n// $input-focus-border-color: scale-color($white, $lightness: -40%);\n// $input-border-style: solid;\n// $input-border-width: 1px;\n// $input-border-radius: $global-radius;\n// $input-disabled-bg: $gainsboro;\n// $input-disabled-cursor: $cursor-default-value;\n// $input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);\n\n// We use these to style the fieldset border and spacing.\n// $fieldset-border-style: solid;\n// $fieldset-border-width: 1px;\n// $fieldset-border-color: $gainsboro;\n// $fieldset-padding: rem-calc(20);\n// $fieldset-margin: rem-calc(18 0);\n\n// We use these to style the legends when you use them\n// $legend-bg: $white;\n// $legend-font-weight: $font-weight-bold;\n// $legend-padding: rem-calc(0 3);\n\n// We use these to style the prefix and postfix input elements\n// $input-prefix-bg: scale-color($white, $lightness: -5%);\n// $input-prefix-border-color: scale-color($white, $lightness: -20%);\n// $input-prefix-border-size: 1px;\n// $input-prefix-border-type: solid;\n// $input-prefix-overflow: hidden;\n// $input-prefix-font-color: $oil;\n// $input-prefix-font-color-alt: $white;\n\n// We use this setting to turn on/off HTML5 number spinners (the up/down arrows)\n// $input-number-spinners: true;\n\n// We use these to style the error states for inputs and labels\n// $input-error-message-padding: rem-calc(6 9 9);\n// $input-error-message-top: -1px;\n// $input-error-message-font-size: rem-calc(12);\n// $input-error-message-font-weight: $font-weight-normal;\n// $input-error-message-font-style: italic;\n// $input-error-message-font-color: $white;\n// $input-error-message-bg-color: $alert-color;\n// $input-error-message-font-color-alt: $oil;\n\n// We use this to style the glowing effect of inputs when focused\n// $input-include-glowing-effect: true;\n// $glowing-effect-fade-time: 0.45s;\n// $glowing-effect-color: $input-focus-border-color;\n\n// Select variables\n// $select-bg-color: $ghost;\n// $select-hover-bg-color: scale-color($select-bg-color, $lightness: -3%);\n\n// 12. Icon Bar\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// We use these to style the icon-bar and items\n// $include-html-icon-bar-classes: $include-html-classes;\n// $icon-bar-bg: $oil;\n// $icon-bar-font-color: $white;\n// $icon-bar-font-color-hover: $icon-bar-font-color;\n// $icon-bar-font-size: 1rem;\n// $icon-bar-hover-color: $primary-color;\n// $icon-bar-icon-color: $white;\n// $icon-bar-icon-color-hover: $icon-bar-icon-color;\n// $icon-bar-icon-size: 1.875rem;\n// $icon-bar-image-width: 1.875rem;\n// $icon-bar-image-height: 1.875rem;\n// $icon-bar-active-color: $primary-color;\n// $icon-bar-item-padding: 1.25rem;\n\n// 13. Inline Lists\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-inline-list-classes: $include-html-classes;\n\n// We use this to control the margins and padding of the inline list.\n// $inline-list-top-margin: 0;\n// $inline-list-opposite-margin: 0;\n// $inline-list-bottom-margin: rem-calc(17);\n// $inline-list-default-float-margin: rem-calc(-22);\n// $inline-list-default-float-list-margin: rem-calc(22);\n\n// $inline-list-padding: 0;\n\n// We use this to control the overflow of the inline list.\n// $inline-list-overflow: hidden;\n\n// We use this to control the list items\n// $inline-list-display: block;\n\n// We use this to control any elements within list items\n// $inline-list-children-display: block;\n\n// 14. Joyride\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-joyride-classes: $include-html-classes;\n\n// Controlling default Joyride styles\n// $joyride-tip-bg: $oil;\n// $joyride-tip-default-width: 300px;\n// $joyride-tip-padding: rem-calc(18 20 24);\n// $joyride-tip-border: solid 1px $charcoal;\n// $joyride-tip-radius: 4px;\n// $joyride-tip-position-offset: 22px;\n\n// Here, we're setting the tip font styles\n// $joyride-tip-font-color: $white;\n// $joyride-tip-font-size: rem-calc(14);\n// $joyride-tip-header-weight: $font-weight-bold;\n\n// This changes the nub size\n// $joyride-tip-nub-size: 10px;\n\n// This adjusts the styles for the timer when its enabled\n// $joyride-tip-timer-width: 50px;\n// $joyride-tip-timer-height: 3px;\n// $joyride-tip-timer-color: $steel;\n\n// This changes up the styles for the close button\n// $joyride-tip-close-color: $monsoon;\n// $joyride-tip-close-size: 24px;\n// $joyride-tip-close-weight: $font-weight-normal;\n\n// When Joyride is filling the screen, we use this style for the bg\n// $joyride-screenfill: rgba(0,0,0,0.5);\n\n// 15. Keystrokes\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-keystroke-classes: $include-html-classes;\n\n// We use these to control text styles.\n// $keystroke-font: \"Consolas\", \"Menlo\", \"Courier\", monospace;\n// $keystroke-font-size: inherit;\n// $keystroke-font-color: $jet;\n// $keystroke-font-color-alt: $white;\n// $keystroke-function-factor: -7%;\n\n// We use this to control keystroke padding.\n// $keystroke-padding: rem-calc(2 4 0);\n\n// We use these to control background and border styles.\n// $keystroke-bg: scale-color($white, $lightness: $keystroke-function-factor);\n// $keystroke-border-style: solid;\n// $keystroke-border-width: 1px;\n// $keystroke-border-color: scale-color($keystroke-bg, $lightness: $keystroke-function-factor);\n// $keystroke-radius: $global-radius;\n\n// 16. Labels\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-label-classes: $include-html-classes;\n\n// We use these to style the labels\n// $label-padding: rem-calc(4 8 4);\n// $label-radius: $global-radius;\n\n// We use these to style the label text\n// $label-font-sizing: rem-calc(11);\n// $label-font-weight: $font-weight-normal;\n// $label-font-color: $oil;\n// $label-font-color-alt: $white;\n// $label-font-family: $body-font-family;\n\n// 17. Magellan\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-magellan-classes: $include-html-classes;\n\n// $magellan-bg: $white;\n// $magellan-padding: 0 !important;\n\n// 18. Off-canvas\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-off-canvas-classes: $include-html-classes;\n\n// $tabbar-bg: $oil;\n// $tabbar-height: rem-calc(45);\n// $tabbar-icon-width: $tabbar-height;\n// $tabbar-line-height: $tabbar-height;\n// $tabbar-color: $white;\n// $tabbar-middle-padding: 0 rem-calc(10);\n\n// Off Canvas Divider Styles\n// $tabbar-right-section-border: solid 1px scale-color($tabbar-bg, $lightness: 13%);\n// $tabbar-left-section-border: solid 1px scale-color($tabbar-bg, $lightness: -50%);\n\n// Off Canvas Tab Bar Headers\n// $tabbar-header-color: $white;\n// $tabbar-header-weight: $font-weight-bold;\n// $tabbar-header-line-height: $tabbar-height;\n// $tabbar-header-margin: 0;\n\n// Off Canvas Menu Variables\n// $off-canvas-width: rem-calc(250);\n// $off-canvas-bg: $oil;\n// $off-canvas-bg-hover: scale-color($tabbar-bg, $lightness: -30%);\n\n// Off Canvas Menu List Variables\n// $off-canvas-label-padding: 0.3rem rem-calc(15);\n// $off-canvas-label-color: $aluminum;\n// $off-canvas-label-text-transform: uppercase;\n// $off-canvas-label-font-size: rem-calc(12);\n// $off-canvas-label-font-weight: $font-weight-bold;\n// $off-canvas-label-bg: $tuatara;\n// $off-canvas-label-border-top: 1px solid scale-color($tuatara, $lightness: 14%);\n// $off-canvas-label-border-bottom: none;\n// $off-canvas-label-margin:0;\n// $off-canvas-link-padding: rem-calc(10, 15);\n// $off-canvas-link-color: rgba($white, 0.7);\n// $off-canvas-link-border-bottom: 1px solid scale-color($off-canvas-bg, $lightness: -25%);\n// $off-canvas-back-bg: $tuatara;\n// $off-canvas-back-border-top: $off-canvas-label-border-top;\n// $off-canvas-back-border-bottom: $off-canvas-label-border-bottom;\n// $off-canvas-back-hover-bg: scale-color($off-canvas-back-bg, $lightness: -30%);\n// $off-canvas-back-hover-border-top: 1px solid scale-color($off-canvas-label-bg, $lightness: 14%);\n// $off-canvas-back-hover-border-bottom: none;\n\n// Off Canvas Menu Icon Variables\n// $tabbar-menu-icon-color: $white;\n// $tabbar-menu-icon-hover: scale-color($tabbar-menu-icon-color, $lightness: -30%);\n\n// $tabbar-menu-icon-text-indent: rem-calc(35);\n// $tabbar-menu-icon-width: $tabbar-height;\n// $tabbar-menu-icon-height: $tabbar-height;\n// $tabbar-menu-icon-padding: 0;\n\n// $tabbar-hamburger-icon-width: rem-calc(16);\n// $tabbar-hamburger-icon-left: false;\n// $tabbar-hamburger-icon-top: false;\n// $tabbar-hamburger-icon-thickness: 1px;\n// $tabbar-hamburger-icon-gap: 6px;\n\n// Off Canvas Back-Link Overlay\n// $off-canvas-overlay-transition: background 300ms ease;\n// $off-canvas-overlay-cursor: pointer;\n// $off-canvas-overlay-box-shadow: -4px 0 4px rgba($black, 0.5), 4px 0 4px rgba($black, 0.5);\n// $off-canvas-overlay-background: rgba($white, 0.2);\n// $off-canvas-overlay-background-hover: rgba($white, 0.05);\n\n// Transition Variables\n// $menu-slide: \"transform 500ms ease\";\n\n// 19. Orbit\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-orbit-classes: $include-html-classes;\n\n// We use these to control the caption styles\n// $orbit-container-bg: none;\n// $orbit-caption-bg: rgba(51,51,51, 0.8);\n// $orbit-caption-font-color: $white;\n// $orbit-caption-font-size: rem-calc(14);\n// $orbit-caption-position: \"bottom\"; // Supported values: \"bottom\", \"under\"\n// $orbit-caption-padding: rem-calc(10 14);\n// $orbit-caption-height: auto;\n\n// We use these to control the left/right nav styles\n// $orbit-nav-bg: transparent;\n// $orbit-nav-bg-hover: rgba(0,0,0,0.3);\n// $orbit-nav-arrow-color: $white;\n// $orbit-nav-arrow-color-hover: $white;\n\n// We use these to control the timer styles\n// $orbit-timer-bg: rgba(255,255,255,0.3);\n// $orbit-timer-show-progress-bar: true;\n\n// We use these to control the bullet nav styles\n// $orbit-bullet-nav-color: $iron;\n// $orbit-bullet-nav-color-active: $aluminum;\n// $orbit-bullet-radius: rem-calc(9);\n\n// We use these to controls the style of slide numbers\n// $orbit-slide-number-bg: rgba(0,0,0,0);\n// $orbit-slide-number-font-color: $white;\n// $orbit-slide-number-padding: rem-calc(5);\n\n// Hide controls on small\n// $orbit-nav-hide-for-small: true;\n// $orbit-bullet-hide-for-small: true;\n// $orbit-timer-hide-for-small: true;\n\n// Graceful Loading Wrapper and preloader\n// $wrapper-class: \"slideshow-wrapper\";\n// $preloader-class: \"preloader\";\n\n// 20. Pagination\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-pagination-classes: $include-html-classes;\n\n// We use these to control the pagination container\n// $pagination-height: rem-calc(24);\n// $pagination-margin: rem-calc(-5);\n\n// We use these to set the list-item properties\n// $pagination-li-float: $default-float;\n// $pagination-li-height: rem-calc(24);\n// $pagination-li-font-color: $jet;\n// $pagination-li-font-size: rem-calc(14);\n// $pagination-li-margin: rem-calc(5);\n\n// We use these for the pagination anchor links\n// $pagination-link-pad: rem-calc(1 10 1);\n// $pagination-link-font-color: $aluminum;\n// $pagination-link-active-bg: scale-color($white, $lightness: -10%);\n\n// We use these for disabled anchor links\n// $pagination-link-unavailable-cursor: default;\n// $pagination-link-unavailable-font-color: $aluminum;\n// $pagination-link-unavailable-bg-active: transparent;\n\n// We use these for currently selected anchor links\n// $pagination-link-current-background: $primary-color;\n// $pagination-link-current-font-color: $white;\n// $pagination-link-current-font-weight: $font-weight-bold;\n// $pagination-link-current-cursor: default;\n// $pagination-link-current-active-bg: $primary-color;\n\n// 21. Panels\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-panel-classes: $include-html-classes;\n\n// We use these to control the background and border styles\n// $panel-bg: scale-color($white, $lightness: -5%);\n// $panel-border-style: solid;\n// $panel-border-size: 1px;\n\n// We use this % to control how much we darken things on hover\n// $panel-function-factor: -11%;\n// $panel-border-color: scale-color($panel-bg, $lightness: $panel-function-factor);\n\n// We use these to set default inner padding and bottom margin\n// $panel-margin-bottom: rem-calc(20);\n// $panel-padding: rem-calc(20);\n\n// We use these to set default font colors\n// $panel-font-color: $oil;\n// $panel-font-color-alt: $white;\n\n// $panel-header-adjust: true;\n// $callout-panel-link-color: $primary-color;\n\n// 22. Pricing Tables\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-pricing-classes: $include-html-classes;\n\n// We use this to control the border color\n// $price-table-border: solid 1px $gainsboro;\n\n// We use this to control the bottom margin of the pricing table\n// $price-table-margin-bottom: rem-calc(20);\n\n// We use these to control the title styles\n// $price-title-bg: $oil;\n// $price-title-padding: rem-calc(15 20);\n// $price-title-align: center;\n// $price-title-color: $smoke;\n// $price-title-weight: $font-weight-normal;\n// $price-title-size: rem-calc(16);\n// $price-title-font-family: $body-font-family;\n\n// We use these to control the price styles\n// $price-money-bg: $vapor;\n// $price-money-padding: rem-calc(15 20);\n// $price-money-align: center;\n// $price-money-color: $oil;\n// $price-money-weight: $font-weight-normal;\n// $price-money-size: rem-calc(32);\n// $price-money-font-family: $body-font-family;\n\n// We use these to control the description styles\n// $price-bg: $white;\n// $price-desc-color: $monsoon;\n// $price-desc-padding: rem-calc(15);\n// $price-desc-align: center;\n// $price-desc-font-size: rem-calc(12);\n// $price-desc-weight: $font-weight-normal;\n// $price-desc-line-height: 1.4;\n// $price-desc-bottom-border: dotted 1px $gainsboro;\n\n// We use these to control the list item styles\n// $price-item-color: $oil;\n// $price-item-padding: rem-calc(15);\n// $price-item-align: center;\n// $price-item-font-size: rem-calc(14);\n// $price-item-weight: $font-weight-normal;\n// $price-item-bottom-border: dotted 1px $gainsboro;\n\n// We use these to control the CTA area styles\n// $price-cta-bg: $white;\n// $price-cta-align: center;\n// $price-cta-padding: rem-calc(20 20 0);\n\n// 23. Progress Bar\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-media-classes: $include-html-classes;\n\n// We use this to set the progress bar height\n// $progress-bar-height: rem-calc(25);\n// $progress-bar-color: $vapor  ;\n\n// We use these to control the border styles\n// $progress-bar-border-color: scale-color($white, $lightness: 20%);\n// $progress-bar-border-size: 1px;\n// $progress-bar-border-style: solid;\n// $progress-bar-border-radius: $global-radius;\n\n// We use these to control the margin & padding\n// $progress-bar-pad: rem-calc(2);\n// $progress-bar-margin-bottom: rem-calc(10);\n\n// We use these to set the meter colors\n// $progress-meter-color: $primary-color;\n// $progress-meter-secondary-color: $secondary-color;\n// $progress-meter-success-color: $success-color;\n// $progress-meter-alert-color: $alert-color;\n\n// 24. Range Slider\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-range-slider-classes: $include-html-classes;\n\n// These variables define the slider bar styles\n// $range-slider-bar-width: 100%;\n// $range-slider-bar-height: rem-calc(16);\n\n// $range-slider-bar-border-width: 1px;\n// $range-slider-bar-border-style: solid;\n// $range-slider-bar-border-color: $gainsboro;\n// $range-slider-radius: $global-radius;\n// $range-slider-round: $global-rounded;\n// $range-slider-bar-bg-color: $ghost;\n\n// Vertical bar styles\n// $range-slider-vertical-bar-width: rem-calc(16);\n// $range-slider-vertical-bar-height: rem-calc(200);\n\n// These variables define the slider handle styles\n// $range-slider-handle-width: rem-calc(32);\n// $range-slider-handle-height: rem-calc(22);\n// $range-slider-handle-position-top: rem-calc(-5);\n// $range-slider-handle-bg-color: $primary-color;\n// $range-slider-handle-border-width: 1px;\n// $range-slider-handle-border-style: solid;\n// $range-slider-handle-border-color: none;\n// $range-slider-handle-radius: $global-radius;\n// $range-slider-handle-round: $global-rounded;\n// $range-slider-handle-bg-hover-color: scale-color($primary-color, $lightness: -12%);\n// $range-slider-handle-cursor: pointer;\n\n// 25. Reveal\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-reveal-classes: $include-html-classes;\n\n// We use these to control the style of the reveal overlay.\n// $reveal-overlay-bg: rgba($black, .45);\n// $reveal-overlay-bg-old: $black;\n\n// We use these to control the style of the modal itself.\n// $reveal-modal-bg: $white;\n// $reveal-position-top: rem-calc(100);\n// $reveal-default-width: 80%;\n// $reveal-max-width: $row-width;\n// $reveal-modal-padding: rem-calc(20);\n// $reveal-box-shadow: 0 0 10px rgba($black,.4);\n\n// We use these to style the reveal close button\n// $reveal-close-font-size: rem-calc(40);\n// $reveal-close-top: rem-calc(8);\n// $reveal-close-side: rem-calc(11);\n// $reveal-close-color: $base;\n// $reveal-close-weight: $font-weight-bold;\n\n// We use this to set the default radius used throughout the core.\n// $reveal-radius: $global-radius;\n// $reveal-round: $global-rounded;\n\n// We use these to control the modal border\n// $reveal-border-style: solid;\n// $reveal-border-width: 1px;\n// $reveal-border-color: $steel;\n\n// $reveal-modal-class: \"reveal-modal\";\n// $close-reveal-modal-class: \"close-reveal-modal\";\n\n// 26. Side Nav\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-nav-classes: $include-html-classes;\n\n// We use this to control padding.\n// $side-nav-padding: rem-calc(14 0);\n\n// We use these to control list styles.\n// $side-nav-list-type: none;\n// $side-nav-list-position: inside;\n// $side-nav-list-margin: rem-calc(0 0 7 0);\n\n// We use these to control link styles.\n// $side-nav-link-color: $primary-color;\n// $side-nav-link-color-active: scale-color($side-nav-link-color, $lightness: 30%);\n// $side-nav-link-color-hover: scale-color($side-nav-link-color, $lightness: 30%);\n// $side-nav-link-bg-hover: hsla(0, 0, 0, 0.025);\n// $side-nav-link-margin: 0;\n// $side-nav-link-padding: rem-calc(7 14);\n// $side-nav-font-size: rem-calc(14);\n// $side-nav-font-weight: $font-weight-normal;\n// $side-nav-font-weight-active: $side-nav-font-weight;\n// $side-nav-font-family: $body-font-family;\n// $side-nav-font-family-active: $side-nav-font-family;\n\n// We use these to control heading styles.\n// $side-nav-heading-color: $side-nav-link-color;\n// $side-nav-heading-font-size: $side-nav-font-size;\n// $side-nav-heading-font-weight: bold;\n// $side-nav-heading-text-transform: uppercase;\n\n// We use these to control border styles\n// $side-nav-divider-size: 1px;\n// $side-nav-divider-style: solid;\n// $side-nav-divider-color: scale-color($white, $lightness: 10%);\n\n// 27. Split Buttons\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-button-classes: $include-html-classes;\n\n// We use these to control different shared styles for Split Buttons\n// $split-button-function-factor: 10%;\n// $split-button-pip-color: $white;\n// $split-button-pip-color-alt: $oil;\n// $split-button-active-bg-tint: rgba(0,0,0,0.1);\n\n// We use these to control tiny split buttons\n// $split-button-padding-tny: $button-pip-tny * 10;\n// $split-button-span-width-tny: $button-pip-tny * 6;\n// $split-button-pip-size-tny: $button-pip-tny;\n// $split-button-pip-top-tny: $button-pip-tny * 2;\n// $split-button-pip-default-float-tny: rem-calc(-6);\n\n// We use these to control small split buttons\n// $split-button-padding-sml: $button-pip-sml * 10;\n// $split-button-span-width-sml: $button-pip-sml * 6;\n// $split-button-pip-size-sml: $button-pip-sml;\n// $split-button-pip-top-sml: $button-pip-sml * 1.5;\n// $split-button-pip-default-float-sml: rem-calc(-6);\n\n// We use these to control medium split buttons\n// $split-button-padding-med: $button-pip-med * 9;\n// $split-button-span-width-med: $button-pip-med * 5.5;\n// $split-button-pip-size-med: $button-pip-med - rem-calc(3);\n// $split-button-pip-top-med: $button-pip-med * 1.5;\n// $split-button-pip-default-float-med: rem-calc(-6);\n\n// We use these to control large split buttons\n// $split-button-padding-lrg: $button-pip-lrg * 8;\n// $split-button-span-width-lrg: $button-pip-lrg * 5;\n// $split-button-pip-size-lrg: $button-pip-lrg - rem-calc(6);\n// $split-button-pip-top-lrg: $button-pip-lrg + rem-calc(5);\n// $split-button-pip-default-float-lrg: rem-calc(-6);\n\n// 28. Sub Nav\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-nav-classes: $include-html-classes;\n\n// We use these to control margin and padding\n// $sub-nav-list-margin: rem-calc(-4 0 18);\n// $sub-nav-list-padding-top: rem-calc(4);\n\n// We use this to control the definition\n// $sub-nav-font-family: $body-font-family;\n// $sub-nav-font-size: rem-calc(14);\n// $sub-nav-font-color: $aluminum;\n// $sub-nav-font-weight: $font-weight-normal;\n// $sub-nav-text-decoration: none;\n// $sub-nav-padding: rem-calc(3 16);\n// $sub-nav-border-radius: 3px;\n// $sub-nav-font-color-hover: scale-color($sub-nav-font-color, $lightness: -25%);\n\n// We use these to control the active item styles\n// $sub-nav-active-font-weight: $font-weight-normal;\n// $sub-nav-active-bg: $primary-color;\n// $sub-nav-active-bg-hover: scale-color($sub-nav-active-bg, $lightness: -14%);\n// $sub-nav-active-color: $white;\n// $sub-nav-active-padding: $sub-nav-padding;\n// $sub-nav-active-cursor: default;\n\n// $sub-nav-item-divider: \"\";\n// $sub-nav-item-divider-margin: rem-calc(12);\n\n// 29. Switch\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-form-classes: $include-html-classes;\n\n// Controlling border styles and background colors for the switch container\n// $switch-border-color: scale-color($white, $lightness: -20%);\n// $switch-border-style: solid;\n// $switch-border-width: 1px;\n// $switch-bg: $white;\n\n// We use these to control the switch heights for our default classes\n// $switch-height-tny: rem-calc(22);\n// $switch-height-sml: rem-calc(28);\n// $switch-height-med: rem-calc(36);\n// $switch-height-lrg: rem-calc(44);\n// $switch-bottom-margin: rem-calc(20);\n\n// We use these to control default font sizes for our classes.\n// $switch-font-size-tny: 11px;\n// $switch-font-size-sml: 12px;\n// $switch-font-size-med: 14px;\n// $switch-font-size-lrg: 17px;\n// $switch-label-side-padding: 6px;\n\n// We use these to style the switch-paddle\n// $switch-paddle-bg: $white;\n// $switch-paddle-fade-to-color: scale-color($switch-paddle-bg, $lightness: -10%);\n// $switch-paddle-border-color: scale-color($switch-paddle-bg, $lightness: -35%);\n// $switch-paddle-border-width: 1px;\n// $switch-paddle-border-style: solid;\n// $switch-paddle-transition-speed: .1s;\n// $switch-paddle-transition-ease: ease-out;\n// $switch-positive-color: scale-color($success-color, $lightness: 94%);\n// $switch-negative-color: $white-smoke;\n\n// Outline Style for tabbing through switches\n// $switch-label-outline: 1px dotted $jumbo;\n\n// 30. Tables\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-table-classes: $include-html-classes;\n\n// These control the background color for the table and even rows\n// $table-bg: $white;\n// $table-even-row-bg: $snow;\n\n// These control the table cell border style\n// $table-border-style: solid;\n// $table-border-size: 1px;\n// $table-border-color: $gainsboro;\n\n// These control the table head styles\n// $table-head-bg: $white-smoke  ;\n// $table-head-font-size: rem-calc(14);\n// $table-head-font-color: $jet;\n// $table-head-font-weight: $font-weight-bold;\n// $table-head-padding: rem-calc(8 10 10);\n\n// These control the row padding and font styles\n// $table-row-padding: rem-calc(9 10);\n// $table-row-font-size: rem-calc(14);\n// $table-row-font-color: $jet;\n// $table-line-height: rem-calc(18);\n\n// These are for controlling the layout, display and margin of tables\n// $table-layout: auto;\n// $table-display: table-cell;\n// $table-margin-bottom: rem-calc(20);\n\n// 31. Tabs\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-tabs-classes: $include-html-classes;\n\n// $tabs-navigation-padding: rem-calc(16);\n// $tabs-navigation-bg-color: $silver  ;\n// $tabs-navigation-active-bg-color: $white;\n// $tabs-navigation-hover-bg-color: scale-color($tabs-navigation-bg-color, $lightness: -6%);\n// $tabs-navigation-font-color: $jet;\n// $tabs-navigation-active-font-color: $tabs-navigation-font-color;\n// $tabs-navigation-font-size: rem-calc(16);\n// $tabs-navigation-font-family: $body-font-family;\n\n// $tabs-content-margin-bottom: rem-calc(24);\n// $tabs-content-padding: ($column-gutter/2);\n\n// $tabs-vertical-navigation-margin-bottom: 1.25rem;\n\n// 32. Thumbnails\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-media-classes: $include-html-classes;\n\n// We use these to control border styles\n// $thumb-border-style: solid;\n// $thumb-border-width: 4px;\n// $thumb-border-color: $white;\n// $thumb-box-shadow: 0 0 0 1px rgba($black,.2);\n// $thumb-box-shadow-hover: 0 0 6px 1px rgba($primary-color,0.5);\n\n// Radius and transition speed for thumbs\n// $thumb-radius: $global-radius;\n// $thumb-transition-speed: 200ms;\n\n// 33. Tooltips\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-tooltip-classes: $include-html-classes;\n\n// $has-tip-border-bottom: dotted 1px $iron;\n// $has-tip-font-weight: $font-weight-bold;\n// $has-tip-font-color: $oil;\n// $has-tip-border-bottom-hover: dotted 1px scale-color($primary-color, $lightness: -55%);\n// $has-tip-font-color-hover: $primary-color;\n// $has-tip-cursor-type: help;\n\n// $tooltip-padding: rem-calc(12);\n// $tooltip-bg: $oil;\n// $tooltip-font-size: rem-calc(14);\n// $tooltip-font-weight: $font-weight-normal;\n// $tooltip-font-color: $white;\n// $tooltip-line-height: 1.3;\n// $tooltip-close-font-size: rem-calc(10);\n// $tooltip-close-font-weight: $font-weight-normal;\n// $tooltip-close-font-color: $monsoon;\n// $tooltip-font-size-sml: rem-calc(14);\n// $tooltip-radius: $global-radius;\n// $tooltip-rounded: $global-rounded;\n// $tooltip-pip-size: 5px;\n// $tooltip-max-width: 300px;\n\n// 34. Top Bar\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-top-bar-classes: $include-html-classes;\n\n// Background color for the top bar\n// $topbar-bg-color: $oil;\n// $topbar-bg: $topbar-bg-color;\n\n// Height and margin\n// $topbar-height: 45px;\n// $topbar-margin-bottom: 0;\n\n// Controlling the styles for the title in the top bar\n// $topbar-title-weight: $font-weight-normal;\n// $topbar-title-font-size: rem-calc(17);\n\n// Style the top bar dropdown elements\n// $topbar-dropdown-bg: $oil;\n// $topbar-dropdown-link-color: $white;\n// $topbar-dropdown-link-bg: $oil;\n// $topbar-dropdown-link-bg-hover: $oil;\n// $topbar-dropdown-link-weight: $font-weight-normal;\n// $topbar-dropdown-toggle-size: 5px;\n// $topbar-dropdown-toggle-color: $white;\n// $topbar-dropdown-toggle-alpha: 0.4;\n\n// Set the link colors and styles for top-level nav\n// $topbar-link-color: $white;\n// $topbar-link-color-hover: $white;\n// $topbar-link-color-active: $white;\n// $topbar-link-color-active-hover: $white;\n// $topbar-link-weight: $font-weight-normal;\n// $topbar-link-font-size: rem-calc(13);\n// $topbar-link-hover-lightness: -10%; // Darken by 10%\n// $topbar-link-bg: $topbar-bg;\n// $topbar-link-bg-color-hover: $charcoal;\n// $topbar-link-bg-hover: $oil;\n// $topbar-link-bg-active: $primary-color;\n// $topbar-link-bg-active-hover: scale-color($primary-color, $lightness: -14%);\n// $topbar-link-font-family: $body-font-family;\n// $topbar-link-text-transform: none;\n// $topbar-link-padding: ($topbar-height / 3);\n// $topbar-back-link-size: $h5-font-size;\n// $topbar-link-dropdown-padding: 20px;\n\n// $topbar-button-font-size: 0.75rem;\n// $topbar-button-top: 7px;\n\n// $topbar-dropdown-label-color: $monsoon;\n// $topbar-dropdown-label-text-transform: uppercase;\n// $topbar-dropdown-label-font-weight: $font-weight-bold;\n// $topbar-dropdown-label-font-size: rem-calc(10);\n// $topbar-dropdown-label-bg: $oil;\n\n// Top menu icon styles\n// $topbar-menu-link-transform: uppercase;\n// $topbar-menu-link-font-size: rem-calc(13);\n// $topbar-menu-link-weight: $font-weight-bold;\n// $topbar-menu-link-color: $white;\n// $topbar-menu-icon-color: $white;\n// $topbar-menu-link-color-toggled: $jumbo;\n// $topbar-menu-icon-color-toggled: $jumbo;\n\n// Transitions and breakpoint styles\n// $topbar-transition-speed: 300ms;\n// Using rem-calc for the below breakpoint causes issues with top bar\n// $topbar-breakpoint: #{lower-bound($medium-range)}; // Change to 9999px for always mobile layout\n// $topbar-media-query: $medium-up;\n\n// Divider Styles\n// $topbar-divider-border-bottom: solid 1px  scale-color($topbar-bg-color, $lightness: 13%);\n// $topbar-divider-border-top: solid 1px scale-color($topbar-bg-color, $lightness: -50%);\n\n// Sticky Class\n// $topbar-sticky-class: \".sticky\";\n// $topbar-arrows: true; //Set false to remove the triangle icon from the menu item\n\n// 36. Visibility Classes\n// - - - - - - - - - - - - - - - - - - - - - - - - -\n\n// $include-html-visibility-classes: $include-html-classes;\n// $include-table-visibility-classes: true;\n// $include-legacy-visibility-classes: true;\n// $include-accessibility-classes: true;\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_accordion.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n\n$include-html-accordion-classes: $include-html-classes !default;\n\n$accordion-navigation-padding: rem-calc(16) !default;\n$accordion-navigation-bg-color: $silver !default;\n$accordion-navigation-hover-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -5%) !default;\n$accordion-navigation-active-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -3%) !default;\n$accordion-navigation-font-color: $jet !default;\n$accordion-navigation-font-size: rem-calc(16) !default;\n$accordion-navigation-font-family: $body-font-family !default;\n\n$accordion-content-padding: ($column-gutter/2) !default;\n$accordion-content-active-bg-color: $white !default;\n\n\n//  Mixin: accordion-container()\n//  Decription: Responsible for the container component of accordions, generating styles relating to a margin of zero and a clearfix\n//  Explicit Dependencies: a clearfix mixin *is* defined.\n//  Implicit Dependencies: None\n\n@mixin accordion-container() {\n  @include clearfix;\n  margin-bottom: 0;\n}\n\n//  Mixin: accordion-navigation( $bg, $hover-bg, $active-bg, $padding, $active_class,  $font-color, $font-size, $font-family){\n//    @params $bg-color: [ color or string ]: Specify the background color for the navigation element\n//    @params $hover-bg-color [ color or string ]: Specify the background color for the navigation element when hovered\n//    @params $active-bg [ color or string ]: Specify the background color for the navigation element when clicked and not released.\n//    @params $active_class [ string ]: Specify the class name used to keep track of which accordion tab should be visible\n//    @params $font-color [ color or string ]: Color of the font for accordion\n//    @params $font-size [ number ]: Specifiy the font-size of the text inside the navigation element\n//    @params $font-family [ string ]: Specify the font family for the text of the navigation of the accorion\n\n@mixin accordion-navigation( $bg: $accordion-navigation-bg-color, $hover-bg: $accordion-navigation-hover-bg-color, $active-bg: $accordion-navigation-active-bg-color, $padding: $accordion-navigation-padding, $active_class: 'active',  $font-color: $accordion-navigation-font-color, $font-size: $accordion-navigation-font-size, $font-family: $accordion-navigation-font-family ){\n  display: block;\n  margin-bottom: 0 !important;\n  @if type-of($active_class) != \"string\" {\n    @warn \"`#{$active_class}` isn't a valid string. A valid string is needed to correctly be interpolated as a CSS class. CSS classes cannot start with a number or consist of only numbers. CSS will not be generated for the active state of this navigation component.\"\n  }\n  @else {\n    &.#{ $active_class } > a {\n      background: $active-bg;\n    }\n  }\n  > a {\n    background: $bg;\n    color: $font-color;\n    @if type-of($padding) != number {\n      @warn \"`#{$padding}` was read as #{type-of($padding)}\";\n      @if $accordion-navigation-padding != null {\n        @warn \"#{$padding} was read as a #{type-of($padding)}\";\n        @warn \"`#{$padding}` isn't a valid number. $accordion-navigation-padding (#{$accordion-navigation-padding}) will be used instead.)\";\n        padding: $accordion-navigation-padding;\n      }\n      @else {\n        @warn \"`#{$padding}` isn't a valid number and $accordion-navigation-padding is missing. A value of `null` is returned to not output an invalid value for padding\";\n        padding: null;\n      }\n    }\n    @else {\n      padding: $padding;\n    }\n    display: block;\n    font-family: $font-family;\n    @if type-of($font-size) != number {\n      @warn \"`#{$font-size}` was read as a #{type-of($font-size)}\";\n      @if $accordion-navigation-font-size != null {\n        @warn \"`#{$font-size}` is not a valid number. The value of $accordion-navigation-font-size will be used instead (#{$accordion-navigation-font-size}).\";\n        font-size: $accordion-navigation-font-size;\n      }\n      @else{\n        @warn \"`#{$font-size}` is not a valid number and the default value of $accordion-navigation-font-size is not defined. A value of `null` will be returned to not generate an invalid value for font-size.\";\n        font-size: null;\n\n      }\n    }\n    @else {\n      font-size: $font-size;\n    }\n    &:hover {\n      background: $hover-bg;\n    }\n  }\n}\n\n//  Mixin: accordion-content($bg, $padding, $active-class)\n//    @params $padding [ number ]: Padding for the content of the container\n//    @params $bg [ color  ]: Background color for the content when it's visible\n//    @params $active_class [ string ]: Class name used to keep track of which accordion tab should be visible.\n\n@mixin accordion-content($bg: $accordion-content-active-bg-color, $padding: $accordion-content-padding, $active_class: 'active'){\n  display: none;\n  @if type-of($padding) != \"number\" {\n    @warn \"#{$padding} was read as a #{type-of($padding)}\";\n    @if $accordion-content-padding != null {\n      @warn \"`#{$padding}` isn't a valid number. $accordion-content-padding used instead\";\n      padding: $accordion-content-padding;\n    } @else {\n      @warn \"`#{$padding}` isn't a valid number and the default value of $accordion-content-padding is not defined. A value of `null` is returned to not output an invalid value for padding.\";\n      padding: null;\n    }\n  } @else {\n    padding: $padding;\n  }\n\n  @if type-of($active_class) != \"string\" {\n    @warn \"`#{$active_class}` isn't a valid string. A valid string is needed to correctly be interpolated as a CSS class. CSS classes cannot start with a number or consist of only numbers. CSS will not be generated for the active state of the content. \"\n  }\n  @else {\n    &.#{$active_class} {\n      display: block;\n      background: $bg;\n    }\n  }\n}\n\n@include exports(\"accordion\") {\n  @if $include-html-accordion-classes {\n    .accordion {\n      @include clearfix;\n      margin-bottom: 0;\n      .accordion-navigation, dd {\n        display: block;\n        margin-bottom: 0 !important;\n        &.active > a { background: $accordion-navigation-active-bg-color; }\n        > a {\n          background: $accordion-navigation-bg-color;\n          color: $accordion-navigation-font-color;\n          padding: $accordion-navigation-padding;\n          display: block;\n          font-family: $accordion-navigation-font-family;\n          font-size: $accordion-navigation-font-size;\n          &:hover { background: $accordion-navigation-hover-bg-color; }\n        }\n\n        > .content {\n          display: none;\n          padding: $accordion-content-padding;\n          &.active {\n            display: block;\n            background: $accordion-content-active-bg-color;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_alert-boxes.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// Alert Box Variables\n//\n$include-html-alert-classes: $include-html-classes !default;\n\n// We use this to control alert padding.\n$alert-padding-top: rem-calc(14) !default;\n$alert-padding-default-float: $alert-padding-top !default;\n$alert-padding-opposite-direction: $alert-padding-top + rem-calc(10) !default;\n$alert-padding-bottom: $alert-padding-top !default;\n\n// We use these to control text style.\n$alert-font-weight: $font-weight-normal !default;\n$alert-font-size: rem-calc(13) !default;\n$alert-font-color: $white !default;\n$alert-font-color-alt: scale-color($secondary-color, $lightness: -66%) !default;\n\n// We use this for close hover effect.\n$alert-function-factor: -14% !default;\n\n// We use these to control border styles.\n$alert-border-style: solid !default;\n$alert-border-width: 1px !default;\n$alert-border-color: scale-color($primary-color, $lightness: $alert-function-factor) !default;\n$alert-bottom-margin: rem-calc(20) !default;\n\n// We use these to style the close buttons\n$alert-close-color: $oil !default;\n$alert-close-top: 50% !default;\n$alert-close-position: rem-calc(4) !default;\n$alert-close-font-size: rem-calc(22) !default;\n$alert-close-opacity: 0.3 !default;\n$alert-close-opacity-hover: 0.5 !default;\n$alert-close-padding: 9px 6px 4px !default;\n$alert-close-background: inherit !default;\n\n// We use this to control border radius\n$alert-radius: $global-radius !default;\n\n$alert-transition-speed: 300ms !default;\n$alert-transition-ease: ease-out !default;\n\n//\n// Alert Mixins\n//\n\n// We use this mixin to create a default alert base.\n@mixin alert-base {\n  border-style: $alert-border-style;\n  border-width: $alert-border-width;\n  display: block;\n  font-weight: $alert-font-weight;\n  margin-bottom: $alert-bottom-margin;\n  position: relative;\n  padding: $alert-padding-top $alert-padding-opposite-direction $alert-padding-bottom $alert-padding-default-float;\n  font-size: $alert-font-size;\n  @include single-transition(opacity, $alert-transition-speed, $alert-transition-ease)\n}\n\n// We use this mixin to add alert styles\n//\n// $bg - The background of the alert. Default: $primary-color.\n@mixin alert-style($bg:$primary-color) {\n\n  // This finds the lightness percentage of the background color.\n  $bg-lightness: lightness($bg);\n\n  // We control which background color and border come through.\n  background-color: $bg;\n  border-color: scale-color($bg, $lightness: $alert-function-factor);\n\n  // We control the text color for you based on the background color.\n  @if $bg-lightness > 70% { color: $alert-font-color-alt; }\n  @else                   { color: $alert-font-color; }\n\n}\n\n// We use this to create the close button.\n@mixin alert-close {\n  font-size: $alert-close-font-size;\n  padding: $alert-close-padding;\n  line-height: 0;\n  position: absolute;\n  top: $alert-close-top;\n  margin-top: -($alert-close-font-size / 2);\n  #{$opposite-direction}: $alert-close-position;\n  color: $alert-close-color;\n  opacity: $alert-close-opacity;\n  background: $alert-close-background;\n  &:hover,\n  &:focus { opacity: $alert-close-opacity-hover; }\n}\n\n// We use this to quickly create alerts with a single mixin.\n//\n// $bg - Background of alert. Default: $primary-color.\n// $radius - Radius of alert box. Default: false.\n@mixin alert($bg:$primary-color, $radius:false) {\n  @include alert-base;\n  @include alert-style($bg);\n  @include radius($radius);\n}\n\n@include exports(\"alert-box\") {\n  @if $include-html-alert-classes {\n    .alert-box {\n      @include alert;\n\n      .close      { @include alert-close; }\n\n      &.radius    { @include radius($alert-radius); }\n      &.round     { @include radius($global-rounded); }\n\n      &.success   { @include alert-style($success-color); }\n      &.alert     { @include alert-style($alert-color); }\n      &.secondary { @include alert-style($secondary-color); }\n      &.warning { @include alert-style($warning-color); }\n      &.info { @include alert-style($info-color); }\n      &.alert-close { opacity: 0}\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_block-grid.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// Block Grid Variables\n//\n$include-html-block-grid-classes: $include-html-classes !default;\n$include-xl-html-block-grid-classes: false !default;\n\n// We use this to control the maximum number of block grid elements per row\n$block-grid-elements: 12 !default;\n$block-grid-default-spacing: rem-calc(20) !default;\n\n$align-block-grid-to-grid: false !default;\n@if $align-block-grid-to-grid {\n  $block-grid-default-spacing: $column-gutter;\n}\n\n// Enables media queries for block-grid classes. Set to false if writing semantic HTML.\n$block-grid-media-queries: true !default;\n\n//\n// Block Grid Mixins\n//\n\n// Create a custom block grid\n//\n// $per-row - # of items to display per row. Default: false.\n// $spacing - # of ems to use as padding on each block item. Default: rem-calc(20).\n// $base-style - Apply a base style to block grid. Default: true.\n@mixin block-grid(\n  $per-row:false,\n  $spacing:$block-grid-default-spacing,\n  $include-spacing:true,\n  $base-style:true) {\n\n  @if $base-style {\n    display: block;\n    padding: 0;\n    @if $align-block-grid-to-grid {\n      margin: 0;\n    } @else {\n      margin: 0 (-$spacing/2);\n    }\n    @include clearfix;\n\n    &>li {\n      display: block;\n      height: auto;\n      float: $default-float;\n      @if $include-spacing {\n        padding: 0 ($spacing/2) $spacing;\n      }\n    }\n  }\n\n  @if $per-row {\n    &>li {\n      width: 100%/$per-row;\n      @if $include-spacing {\n        padding: 0 ($spacing/2) $spacing;\n      }\n      list-style: none;\n\n      &:nth-of-type(1n) { clear: none; }\n      &:nth-of-type(#{$per-row}n+1) { clear: both; }\n      @if $align-block-grid-to-grid {\n        @include block-grid-aligned($per-row, $spacing);\n      }\n    }\n  }\n}\n\n@mixin block-grid-aligned($per-row, $spacing) {\n  @for $i from 1 through $block-grid-elements {\n    @if $per-row >= $i {\n      $grid-column: '+' + $i;\n      @if $per-row == $i {\n        $grid-column: '';\n      }\n      &:nth-of-type(#{$per-row}n#{unquote($grid-column)}) {\n        padding-left: ($spacing - (($spacing / $per-row) * ($per-row - ($i - 1))));\n        padding-right: ($spacing - (($spacing / $per-row) * $i));\n      }\n    }\n  }\n}\n\n// Generate presentational markup for block grid.\n//\n// $size - Name of class to use, i.e. \"large\" will generate .large-block-grid-1, .large-block-grid-2, etc.\n@mixin block-grid-html-classes($size,$include-spacing) {\n  @for $i from 1 through $block-grid-elements {\n    .#{$size}-block-grid-#{($i)} {\n      @include block-grid($i,$block-grid-default-spacing,$include-spacing,false);\n    }\n  }\n}\n\n@include exports(\"block-grid\") {\n  @if $include-html-block-grid-classes {\n\n    [class*=\"block-grid-\"] { @include block-grid; }\n\n    @if $block-grid-media-queries {\n      @media #{$small-up} {\n        @include block-grid-html-classes($size:small,$include-spacing:false);\n      }\n\n      @media #{$medium-up} {\n        @include block-grid-html-classes($size:medium,$include-spacing:false);\n      }\n\n      @media #{$large-up} {\n        @include block-grid-html-classes($size:large,$include-spacing:false);\n      }\n\n      @if $include-xl-html-block-grid-classes {\n        @media #{$xlarge-up} {\n          @include block-grid-html-classes($size:xlarge,$include-spacing:false);\n        }\n\n        @media #{$xxlarge-up} {\n          @include block-grid-html-classes($size:xxlarge,$include-spacing:false);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_breadcrumbs.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// Breadcrumb Variables\n//\n$include-html-nav-classes: $include-html-classes !default;\n\n// We use this to set the background color for the breadcrumb container.\n$crumb-bg: scale-color($secondary-color, $lightness: 55%) !default;\n\n// We use these to set the padding around the breadcrumbs.\n$crumb-padding: rem-calc(9 14 9) !default;\n$crumb-side-padding: rem-calc(12) !default;\n\n// We use these to control border styles.\n$crumb-function-factor: -10% !default;\n$crumb-border-size: 1px !default;\n$crumb-border-style: solid !default;\n$crumb-border-color: scale-color($crumb-bg, $lightness: $crumb-function-factor) !default;\n$crumb-radius: $global-radius !default;\n\n// We use these to set various text styles for breadcrumbs.\n$crumb-font-size: rem-calc(11) !default;\n$crumb-font-color: $primary-color !default;\n$crumb-font-color-current: $oil !default;\n$crumb-font-color-unavailable: $aluminum !default;\n$crumb-font-transform: uppercase !default;\n$crumb-link-decor: underline !default;\n\n// We use these to control the slash between breadcrumbs\n$crumb-slash-color: $base !default;\n$crumb-slash: \"/\" !default;\n\n//\n// Breadcrumb Mixins\n//\n\n// We use this mixin to create a container around our breadcrumbs\n@mixin crumb-container {\n  display: block;\n  padding: $crumb-padding;\n  overflow: hidden;\n  margin-#{$default-float}: 0;\n  list-style: none;\n  border-style: $crumb-border-style;\n  border-width: $crumb-border-size;\n\n  // We control which background color and border come through.\n  background-color: $crumb-bg;\n  border-color: $crumb-border-color;\n}\n\n// We use this mixin to create breadcrumb styles from list items.\n@mixin crumbs {\n\n  // A normal state will make the links look and act like clickable breadcrumbs.\n  margin: 0;\n  float: $default-float;\n  font-size: $crumb-font-size;\n  line-height: $crumb-font-size;\n  text-transform: $crumb-font-transform;\n  color: $crumb-font-color;\n\n  &:hover a, &:focus a { text-decoration: $crumb-link-decor; }\n\n  a {\n    color: $crumb-font-color;\n  }\n\n  // Current is for the link of the current page\n  &.current {\n    cursor: $cursor-default-value;\n    color: $crumb-font-color-current;\n    a {\n      cursor: $cursor-default-value;\n      color: $crumb-font-color-current;\n    }\n\n    &:hover, &:hover a,\n    &:focus, &:focus a { text-decoration: none; }\n  }\n\n  // Unavailable removed color and link styles so it looks inactive.\n  &.unavailable {\n    color: $crumb-font-color-unavailable;\n    a { color: $crumb-font-color-unavailable; }\n\n    &:hover,\n    &:hover a,\n    &:focus,\n    a:focus {\n      text-decoration: none;\n      color: $crumb-font-color-unavailable;\n      cursor: $cursor-default-value;\n    }\n  }\n\n  &:before {\n    content: \"#{$crumb-slash}\";\n    color: $crumb-slash-color;\n    margin: 0 $crumb-side-padding;\n    position: relative;\n    top: 1px;\n  }\n\n  &:first-child:before {\n    content: \" \";\n    margin: 0;\n  }\n}\n\n@include exports(\"breadcrumbs\") {\n  @if $include-html-nav-classes {\n    .breadcrumbs {\n      @include crumb-container;\n      @include radius($crumb-radius);\n\n      &>* {\n        @include crumbs;\n      }\n    }\n  }\n}\n\n/* Accessibility - hides the forward slash */\n[aria-label=\"breadcrumbs\"] [aria-hidden=\"true\"]:after {\n  content: \"/\";\n  }\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_button-groups.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n@import \"buttons\";\n\n//\n// Button Group Variables\n//\n$include-html-button-classes: $include-html-classes !default;\n\n// Sets the margin for the right side by default, and the left margin if right-to-left direction is used\n$button-bar-margin-opposite: rem-calc(10) !default;\n$button-group-border-width: 1px !default;\n\n//\n// Button Group Mixins\n//\n\n// We use this to add styles for a button group container\n@mixin button-group-container($styles:true, $float:false) {\n  @if $styles {\n    list-style: none;\n    margin: 0;\n    #{$default-float}: 0;\n    @include clearfix();\n  }\n  @if $float {\n    float: #{$default-float};\n    margin-#{$opposite-direction}: $button-bar-margin-opposite;\n    & div { overflow: hidden; }\n  }\n}\n\n// We use this to control styles for button groups\n@mixin button-group-style($radius:false, $even:false, $float:false, $orientation:horizontal) {\n\n  > button, .button {\n    border-#{$default-float}: $button-group-border-width solid;\n    border-color: rgba(255, 255, 255, 0.5);\n  }\n\n  &:first-child {\n    button, .button {\n      border-#{$default-float}: 0;\n    }\n  }\n\n  // We use this to control the flow, or remove those styles completely.\n  @if $float {\n    margin: 0;\n    float: $float;\n    display: list-item;\n    // Make sure the first child doesn't get the negative margin.\n    &:first-child { margin-#{$default-float}: 0; }\n  }\n  @else {\n    margin: 0 -2px;\n    display: inline-block;\n  }\n\n  @if $orientation == vertical {\n    display:block;\n    margin:0;\n    > button, .button {\n      border-top: $button-group-border-width solid;\n      border-color: rgba(255, 255, 255, 0.5);\n      border-left-width: 0;\n      margin:0;\n      display: block;\n    }\n\n    &:first-child {\n      button, .button {\n        border-top: 0;\n      }\n    }\n  }\n\n  // We use these to control left and right radius on first/last buttons in the group.\n  @if $radius == true {\n    &,\n    & > a,\n    & > button,\n    & > .button { @include radius(0); }\n    &:first-child,\n    &:first-child > a,\n    &:first-child > button,\n    &:first-child > .button {\n      @if $orientation == vertical {\n        @include side-radius(top, $button-radius);\n      }\n      @else {\n        @include side-radius($default-float, $button-radius);\n      }\n    }\n    &:last-child,\n    &:last-child > a,\n    &:last-child > button,\n    &:last-child > .button {\n      @if $orientation == vertical {\n        @include side-radius(bottom, $button-radius);\n      }\n      @else {\n        @include side-radius($opposite-direction, $button-radius);\n      }\n    }\n  }\n  @else if $radius {\n    &,\n    & > a,\n    & > button,\n    & > .button { @include radius(0); }\n    &:first-child,\n    &:first-child > a,\n    &:first-child > button,\n    &:first-child > .button {\n      @if $orientation == vertical {\n        @include side-radius(top, $radius);\n      }\n      @else {\n        @include side-radius($default-float, $radius);\n      }\n    }\n    &:last-child,\n    &:last-child > a,\n    &:last-child > button,\n    &:last-child > .button {\n      @if $orientation == vertical {\n        @include side-radius(bottom, $radius);\n      }\n      @else {\n        @include side-radius($opposite-direction, $radius);\n      }\n    }\n  }\n\n  // We use this to make the buttons even width across their container\n  @if $even {\n    width: percentage((100/$even) / 100);\n    button, .button { width: 100%; }\n  }\n}\n\n@include exports(\"button-group\") {\n  @if $include-html-button-classes {\n    .button-group { @include button-group-container;\n\n      & > li { @include button-group-style(); }\n\n      &.stack {\n        & > li { @include button-group-style($orientation:vertical); float: none; }\n      }\n\n      &.stack-for-small {\n        & > li {\n          @include button-group-style($orientation:horizontal);\n          @media #{$small-only} {\n            @include button-group-style($orientation:vertical);\n          }\n        }\n      }\n\n      &.radius > * { @include button-group-style($radius:$button-radius, $float:null); }\n      &.radius.stack > * { @include button-group-style($radius:$button-radius, $float:null, $orientation:vertical); }\n      &.radius.stack-for-small > * {\n        @media #{$medium-up} {\n          @include button-group-style($radius:$button-radius, $orientation:horizontal);\n        }\n        @media #{$small-only} {\n          @include button-group-style($radius:$button-radius, $orientation:vertical);\n        }\n      }\n\n      &.round > * { @include button-group-style($radius:$button-round, $float:null); }\n      &.round.stack > * { @include button-group-style($radius:$button-med, $float:null, $orientation:vertical); }\n      &.round.stack-for-small > * {\n        @media #{$medium-up} {\n          @include button-group-style($radius:$button-round, $orientation:horizontal);\n        }\n        @media #{$small-only} {\n          @include button-group-style($radius:$button-med, $orientation:vertical);\n        }\n      }\n\n      @for $i from 2 through 8 {\n        &.even-#{$i} li { @include button-group-style($even:$i, $float:null); }\n      }\n    }\n\n    .button-bar {\n      @include clearfix;\n      .button-group { @include button-group-container($styles:false, $float:true); }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_buttons.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-button-classes: $include-html-classes !default;\n\n// We use these to build padding for buttons.\n$button-tny: rem-calc(10) !default;\n$button-sml: rem-calc(14) !default;\n$button-med: rem-calc(16) !default;\n$button-lrg: rem-calc(18) !default;\n\n// We use this to control the display property.\n$button-display: inline-block !default;\n$button-margin-bottom: rem-calc(20) !default;\n\n// We use these to control button text styles.\n$button-font-family: $body-font-family !default;\n$button-font-color: $white !default;\n$button-font-color-alt: $oil !default;\n$button-font-tny: rem-calc(11) !default;\n$button-font-sml: rem-calc(13) !default;\n$button-font-med: rem-calc(16) !default;\n$button-font-lrg: rem-calc(20) !default;\n$button-font-weight: $font-weight-normal !default;\n$button-font-align: center !default;\n\n// We use these to control various hover effects.\n$button-function-factor: -20% !default;\n\n// We use these to control button border styles.\n$button-border-width: 0 !default;\n$button-border-style: solid !default;\n$button-bg-color: $primary-color !default;\n$button-bg-hover: scale-color($button-bg-color, $lightness: $button-function-factor) !default;\n$button-border-color: $button-bg-hover !default;\n$secondary-button-bg-hover: scale-color($secondary-color, $lightness: $button-function-factor) !default;\n$secondary-button-border-color: $secondary-button-bg-hover !default;\n$success-button-bg-hover: scale-color($success-color, $lightness: $button-function-factor) !default;\n$success-button-border-color: $success-button-bg-hover !default;\n$alert-button-bg-hover: scale-color($alert-color, $lightness: $button-function-factor) !default;\n$alert-button-border-color: $alert-button-bg-hover !default;\n$warning-button-bg-hover: scale-color($warning-color, $lightness: $button-function-factor) !default;\n$warning-button-border-color: $warning-button-bg-hover !default;\n$info-button-bg-hover: scale-color($info-color, $lightness: $button-function-factor) !default;\n$info-button-border-color: $info-button-bg-hover !default;\n\n// We use this to set the default radius used throughout the core.\n$button-radius: $global-radius !default;\n$button-round: $global-rounded !default;\n\n// We use this to set default opacity and cursor for disabled buttons.\n$button-disabled-opacity: 0.7 !default;\n$button-disabled-cursor: $cursor-default-value !default;\n\n\n//\n// @MIXIN\n//\n// We use this mixin to create a default button base.\n//\n// $style - Sets base styles. Can be set to false. Default: true.\n// $display - Used to control display property. Default: $button-display || inline-block\n\n@mixin button-base($style:true, $display:$button-display) {\n  @if $style {\n    border-style: $button-border-style;\n    border-width: $button-border-width;\n    cursor: $cursor-pointer-value;\n    font-family: $button-font-family;\n    font-weight: $button-font-weight;\n    line-height: normal;\n    margin: 0 0 $button-margin-bottom;\n    position: relative;\n    text-decoration: none;\n    text-align: $button-font-align;\n    -webkit-appearance: none;\n    border-radius:0;\n  }\n  @if $display { display: $display; }\n}\n\n// @MIXIN\n//\n// We use this mixin to add button size styles\n//\n// $padding - Used to build padding for buttons Default: $button-med ||= rem-calc(12)\n// $full-width - We can set $full-width:true to remove side padding extend width - Default: false\n\n@mixin button-size($padding:$button-med, $full-width:false) {\n\n  // We control which padding styles come through,\n  // these can be turned off by setting $padding:false\n  @if $padding {\n    padding-top: $padding;\n    padding-#{$opposite-direction}: $padding * 2;\n    padding-bottom: $padding + rem-calc(1);\n    padding-#{$default-float}: $padding * 2;\n\n    // We control the font-size based on mixin input.\n    @if      $padding == $button-med { font-size: $button-font-med; }\n    @else if $padding == $button-tny { font-size: $button-font-tny; }\n    @else if $padding == $button-sml { font-size: $button-font-sml; }\n    @else if $padding == $button-lrg { font-size: $button-font-lrg; }\n  }\n\n  // We can set $full-width:true to remove side padding extend width.\n  @if $full-width {\n    // We still need to check if $padding is set.\n    @if $padding {\n    padding-top: $padding;\n    padding-bottom: $padding + rem-calc(1);\n    } @else if $padding == false {\n      padding-top:0;\n      padding-bottom:0;\n    }\n    padding-right: 0;\n    padding-left: 0;\n    width: 100%;\n  }\n}\n\n// @MIXIN\n//\n// we use this mixin to create the button hover and border colors\n\n// @MIXIN\n//\n// We use this mixin to add button color styles\n//\n// $bg - Primary color set in settings file. Default: $button-bg.\n// $radius - If true, set to button radius which is $global-radius || explicitly set radius amount in px (ex. $radius:10px). Default: true\n// $disabled - We can set $disabled:true to create a disabled transparent button. Default: false\n// $bg-hover - Button Hover Background Color. Default: $button-bg-hover\n// $border-color - Button Border Color. Default: $button-border-color\n@mixin button-style($bg:$button-bg-color, $radius:false, $disabled:false, $bg-hover:null, $border-color:null) {\n\n  // We control which background styles are used,\n  // these can be removed by setting $bg:false\n  @if $bg {\n\n    @if $bg-hover == null {\n      $bg-hover: if($bg == $button-bg-color, $button-bg-hover, scale-color($bg, $lightness: $button-function-factor));\n    }\n\n    @if $border-color == null {\n      $border-color: if($bg == $button-bg-color, $button-border-color, scale-color($bg, $lightness: $button-function-factor));\n    }\n\n    // This find the lightness percentage of the background color.\n    $bg-lightness: lightness($bg);\n    $bg-hover-lightness: lightness($bg-hover);\n\n    background-color: $bg;\n    border-color: $border-color;\n    &:hover,\n    &:focus { background-color: $bg-hover; }\n\n    // We control the text color for you based on the background color.\n    color: if($bg-lightness > $lightness-threshold, $button-font-color-alt, $button-font-color);\n\n    &:hover,\n    &:focus {\n        color: if($bg-hover-lightness > $lightness-threshold, $button-font-color-alt, $button-font-color);\n    }\n  }\n\n  // We can set $disabled:true to create a disabled transparent button.\n  @if $disabled {\n    cursor: $button-disabled-cursor;\n    opacity: $button-disabled-opacity;\n    box-shadow: none;\n    &:hover,\n    &:focus { background-color: $bg; }\n  }\n\n  // We can control how much button radius is used.\n  @if $radius == true { @include radius($button-radius); }\n  @else if $radius { @include radius($radius); }\n\n}\n\n// @MIXIN\n//\n// We use this to quickly create buttons with a single mixin. As @jaredhardy puts it, \"the kitchen sink mixin\"\n//\n// $padding - Used to build padding for buttons Default: $button-med ||= rem-calc(12)\n// $bg - Primary color set in settings file. Default: $button-bg.\n// $radius - If true, set to button radius which is $global-radius || explicitly set radius amount in px (ex. $radius:10px). Default:false.\n// $full-width - We can set $full-width:true to remove side padding extend width. Default:false.\n// $disabled - We can set $disabled:true to create a disabled transparent button. Default:false.\n// $is-prefix - Not used? Default:false.\n// $bg-hover - Button Hover Color - Default null - see button-style mixin\n// $border-color - Button Border Color - Default null - see button-style mixin\n// $transition - We can control whether or not to include the background-color transition property - Default:true.\n@mixin button($padding:$button-med, $bg:$button-bg-color, $radius:false, $full-width:false, $disabled:false, $is-prefix:false, $bg-hover:null, $border-color:null, $transition: true) {\n  @include button-base;\n  @include button-size($padding, $full-width);\n  @include button-style($bg, $radius, $disabled, $bg-hover, $border-color);\n\n  @if $transition {\n    @include single-transition(background-color);\n  }\n}\n\n\n@include exports(\"button\") {\n  @if $include-html-button-classes {\n\n    // Default styles applied outside of media query\n    button, .button {\n      @include button-base;\n      @include button-size;\n      @include button-style;\n\n      @include single-transition(background-color);\n\n      &.secondary { @include button-style($bg:$secondary-color, $bg-hover:$secondary-button-bg-hover, $border-color:$secondary-button-border-color); }\n      &.success   { @include button-style($bg:$success-color, $bg-hover:$success-button-bg-hover, $border-color:$success-button-border-color); }\n      &.alert     { @include button-style($bg:$alert-color, $bg-hover:$alert-button-bg-hover, $border-color:$alert-button-border-color); }\n      &.warning   { @include button-style($bg:$warning-color, $bg-hover:$warning-button-bg-hover, $border-color:$warning-button-border-color); }\n      &.info      { @include button-style($bg:$info-color, $bg-hover:$info-button-bg-hover, $border-color:$info-button-border-color); }\n\n      &.large  { @include button-size($padding:$button-lrg); }\n      &.small  { @include button-size($padding:$button-sml); }\n      &.tiny   { @include button-size($padding:$button-tny); }\n      &.expand { @include button-size($padding:null,$full-width:true); }\n\n      &.left-align  { text-align: left; text-indent: rem-calc(12); }\n      &.right-align { text-align: right; padding-right: rem-calc(12); }\n\n      &.radius { @include button-style($bg:false, $radius:true); }\n      &.round  { @include button-style($bg:false, $radius:$button-round); }\n\n      &.disabled, &[disabled] { @include button-style($bg:$button-bg-color, $disabled:true, $bg-hover:$button-bg-hover, $border-color:$button-border-color);\n        &.secondary { @include button-style($bg:$secondary-color, $disabled:true, $bg-hover:$secondary-button-bg-hover, $border-color:$secondary-button-border-color); }\n        &.success { @include button-style($bg:$success-color, $disabled:true, $bg-hover:$success-button-bg-hover, $border-color:$success-button-border-color); }\n        &.alert { @include button-style($bg:$alert-color, $disabled:true, $bg-hover:$alert-button-bg-hover, $border-color:$alert-button-border-color); }\n        &.warning { @include button-style($bg:$warning-color, $disabled:true, $bg-hover:$warning-button-bg-hover, $border-color:$warning-button-border-color); }\n        &.info { @include button-style($bg:$info-color, $disabled:true, $bg-hover:$info-button-bg-hover, $border-color:$info-button-border-color); }\n      }\n    }\n\n    //firefox 2px fix\n    button::-moz-focus-inner {border:0; padding:0;}\n\n    @media #{$medium-up} {\n      button, .button {\n        @include button-base($style:false, $display:inline-block);\n        @include button-size($padding:false, $full-width:false);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_forms.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n@import \"buttons\";\n\n//\n// @variables\n//\n$include-html-form-classes: $include-html-classes !default;\n\n// We use this to set the base for lots of form spacing and positioning styles\n$form-spacing: rem-calc(16) !default;\n\n// We use these to style the labels in different ways\n$form-label-pointer: pointer !default;\n$form-label-font-size: rem-calc(14) !default;\n$form-label-font-weight: $font-weight-normal !default;\n$form-label-line-height: 1.5 !default;\n$form-label-font-color: scale-color($black, $lightness: 30%) !default;\n$form-label-small-transform: capitalize !default;\n$form-label-bottom-margin: 0 !default;\n$input-font-family: inherit !default;\n$input-font-color: rgba(0,0,0,0.75) !default;\n$input-font-size: rem-calc(14) !default;\n$input-bg-color: $white !default;\n$input-focus-bg-color: scale-color($white, $lightness: -2%) !default;\n$input-border-color: scale-color($white, $lightness: -20%) !default;\n$input-focus-border-color: scale-color($white, $lightness: -40%) !default;\n$input-border-style: solid !default;\n$input-border-width: 1px !default;\n$input-border-radius: $global-radius !default;\n$input-disabled-bg: $gainsboro !default;\n$input-disabled-cursor: $cursor-default-value !default;\n$input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1) !default;\n$input-include-glowing-effect: true !default;\n\n// We use these to style the fieldset border and spacing.\n$fieldset-border-style: solid !default;\n$fieldset-border-width: 1px !default;\n$fieldset-border-color: $gainsboro !default;\n$fieldset-padding: rem-calc(20) !default;\n$fieldset-margin: rem-calc(18 0) !default;\n\n// We use these to style the legends when you use them\n$legend-bg: $white !default;\n$legend-font-weight: $font-weight-bold !default;\n$legend-padding: rem-calc(0 3) !default;\n\n// We use these to style the prefix and postfix input elements\n$input-prefix-bg: scale-color($white, $lightness: -5%) !default;\n$input-prefix-border-color: scale-color($white, $lightness: -20%) !default;\n$input-prefix-border-size: 1px !default;\n$input-prefix-border-type: solid !default;\n$input-prefix-overflow: hidden !default;\n$input-prefix-font-color: $oil !default;\n$input-prefix-font-color-alt: $white !default;\n\n// We use this setting to turn on/off HTML5 number spinners (the up/down arrows)\n$input-number-spinners: true !default;\n\n// We use these to style the error states for inputs and labels\n$input-error-message-padding: rem-calc(6 9 9) !default;\n$input-error-message-top: -1px !default;\n$input-error-message-font-size: rem-calc(12) !default;\n$input-error-message-font-weight: $font-weight-normal !default;\n$input-error-message-font-style: italic !default;\n$input-error-message-font-color: $white !default;\n$input-error-message-bg-color: $alert-color !default;\n$input-error-message-font-color-alt: $oil !default;\n\n// We use this to style the glowing effect of inputs when focused\n$glowing-effect-fade-time: 0.45s !default;\n$glowing-effect-color: $input-focus-border-color !default;\n\n// Select variables\n$select-bg-color: $ghost !default;\n$select-hover-bg-color: scale-color($select-bg-color, $lightness: -3%) !default;\n\n//\n// @MIXINS\n//\n\n// We use this mixin to give us form styles for rows inside of forms\n@mixin form-row-base {\n  .row { margin: 0 ((-$form-spacing) / 2);\n\n    .column,\n    .columns { padding: 0 ($form-spacing / 2); }\n\n    // Use this to collapse the margins of a form row\n    &.collapse { margin: 0;\n\n      .column,\n      .columns { padding: 0; }\n      input {\n        @include side-radius($opposite-direction, 0);\n      }\n\n    }\n  }\n  input.column,\n  input.columns,\n  textarea.column,\n  textarea.columns { padding-#{$default-float}: ($form-spacing / 2); }\n}\n\n// @MIXIN\n//\n// We use this mixin to give all basic form elements their style\n@mixin form-element {\n  background-color: $input-bg-color;\n  font-family: $input-font-family;\n  border: {\n    style: $input-border-style;\n    width: $input-border-width;\n    color: $input-border-color;\n  }\n  box-shadow: $input-box-shadow;\n  color: $input-font-color;\n  display: block;\n  font-size: $input-font-size;\n  margin: 0 0 $form-spacing 0;\n  padding: $form-spacing / 2;\n  height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));\n  width: 100%;\n  @include box-sizing(border-box);\n  @if $input-include-glowing-effect {\n    @include block-glowing-effect(focus, $glowing-effect-fade-time, $glowing-effect-color);\n  }\n  // Basic focus styles\n  &:focus {\n    background: $input-focus-bg-color;\n    border-color: $input-focus-border-color;\n    outline: none;\n  }\n  // Disbaled Styles\n  &:disabled {\n    background-color: $input-disabled-bg;\n    cursor: $input-disabled-cursor;\n  }\n\n  // Disabled background input background color\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    background-color: $input-disabled-bg;\n    cursor: $input-disabled-cursor;\n  }\n}\n\n// @MIXIN\n//\n// We use this mixin to create form labels\n//\n// $alignment - Alignment options. Default: false. Options: [right, inline, false]\n// $base-style - Control whether or not the base styles come through. Default: true.\n@mixin form-label($alignment:false, $base-style:true) {\n\n  // Control whether or not the base styles come through.\n  @if $base-style {\n    font-size: $form-label-font-size;\n    color: $form-label-font-color;\n    cursor: $form-label-pointer;\n    display: block;\n    font-weight: $form-label-font-weight;\n    line-height: $form-label-line-height;\n    margin-bottom: $form-label-bottom-margin;\n  }\n\n  // Alignment options\n  @if $alignment == right {\n    float: none !important;\n    text-align: right;\n  }\n  @else if $alignment == inline {\n    margin: 0 0 $form-spacing 0;\n    padding: $form-spacing / 2 + rem-calc($input-border-width) 0;\n  }\n}\n\n// We use this mixin to create postfix/prefix form Labels\n@mixin prefix-postfix-base {\n  display: block;\n  position: relative;\n  z-index: 2;\n  text-align: center;\n  width: 100%;\n  padding-top: 0;\n  padding-bottom: 0;\n  border-style: $input-prefix-border-type;\n  border-width: $input-prefix-border-size;\n  overflow: $input-prefix-overflow;\n  font-size: $form-label-font-size;\n  height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));\n  line-height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));\n}\n\n// @MIXIN\n//\n// We use this mixin to create prefix label styles\n// $bg - Default:$input-prefix-bg || scale-color($white, $lightness: -5%) !default;\n// $is-button - Toggle position settings if prefix is a button. Default:false\n//\n@mixin prefix($bg:$input-prefix-bg, $border:$input-prefix-border-color, $is-button:false) {\n\n  @if $bg {\n    $bg-lightness: lightness($bg);\n    background: $bg;\n    border-#{$opposite-direction}: none;\n\n    // Control the font color based on background brightness\n    @if $bg-lightness > 70% or $bg == yellow { color: $input-prefix-font-color; }\n    @else { color: $input-prefix-font-color-alt; }\n  }\n\n  @if $border {\n    border-color: $border;\n  }\n\n  @if $is-button {\n    padding-#{$default-float}: 0;\n    padding-#{$opposite-direction}: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    text-align: center;\n    line-height: rem-calc(34);\n    border: none;\n  }\n\n}\n\n// @MIXIN\n//\n// We use this mixin to create postfix label styles\n// $bg - Default:$input-prefix-bg || scale-color($white, $lightness: -5%) !default;\n// $is-button - Toggle position settings if prefix is a button. Default: false\n@mixin postfix($bg:$input-prefix-bg, $border:$input-prefix-border-color, $is-button:false) {\n\n  @if $bg {\n    $bg-lightness: lightness($bg);\n    background: $bg;\n    border-#{$default-float}: none;\n\n    // Control the font color based on background brightness\n    @if $bg-lightness > 70%  or $bg == yellow { color: $input-prefix-font-color; }\n    @else { color: $input-prefix-font-color-alt; }\n  }\n\n  @if $border {\n    border-color: $border;\n  }\n\n  @if $is-button {\n    padding-#{$default-float}: 0;\n    padding-#{$opposite-direction}: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    text-align: center;\n    line-height: rem-calc(34);\n    border: none;\n  }\n\n}\n\n// We use this mixin to style fieldsets\n@mixin fieldset {\n  border: $fieldset-border-width $fieldset-border-style $fieldset-border-color;\n  padding: $fieldset-padding;\n  margin: $fieldset-margin;\n\n  // and legend styles\n  legend {\n    font-weight: $legend-font-weight;\n    background: $legend-bg;\n    padding: $legend-padding;\n    margin: 0;\n    margin-#{$default-float}: rem-calc(-3);\n  }\n}\n\n// @MIXIN\n//\n// We use this mixin to control border and background color of error inputs\n// $color - Default: $alert-color (found in settings file)\n@mixin form-error-color($color:$alert-color) {\n  border-color: $color;\n  background-color: rgba($color, 0.1);\n\n  // Go back to normal on focus\n  &:focus {\n    background: $input-focus-bg-color;\n    border-color: $input-focus-border-color;\n  }\n}\n\n// @MIXIN\n//\n// We use this simple mixin to style labels for error inputs\n// $color - Default:$alert-color. Found in settings file\n@mixin form-label-error-color($color:$alert-color) { color: $color; }\n\n// @MIXIN\n//\n// We use this mixin to create error message styles\n// $bg - Default: $alert-color (Found in settings file)\n@mixin form-error-message($bg:$input-error-message-bg-color) {\n  display: block;\n  padding: $input-error-message-padding;\n  margin-top: $input-error-message-top;\n  margin-bottom: $form-spacing;\n  font-size: $input-error-message-font-size;\n  font-weight: $input-error-message-font-weight;\n  font-style: $input-error-message-font-style;\n\n  // We can control the text color based on the brightness of the background.\n  $bg-lightness: lightness($bg);\n  background: $bg;\n  @if $bg-lightness < 70% or $bg == yellow { color: $input-error-message-font-color; }\n  @else { color: $input-error-message-font-color-alt; }\n}\n\n// We use this mixin to style select elements\n@mixin form-select  {\n  -webkit-appearance: none !important;\n  border-radius: 0;\n  background-color: $select-bg-color;\n\n  // Hide the dropdown arrow shown in newer IE versions\n  &::-ms-expand {\n    display: none;\n  }\n\n  // The custom arrow have some fake horizontal padding so we can align it\n  // from the right side of the element without relying on CSS3\n  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);\n\n  // We can safely use leftmost and rightmost now\n  background-position: if($text-direction == 'rtl', 0%, 100%) center;\n\n  background-repeat: no-repeat;\n  border: {\n    style: $input-border-style;\n    width: $input-border-width;\n    color: $input-border-color;\n  }\n  padding: ($form-spacing / 2);\n  font-size: $input-font-size;\n  font-family: $body-font-family;\n  color: $input-font-color;\n  line-height: normal;\n  @include radius(0);\n  &.radius { @include radius($global-radius); }\n  &:hover {\n    background-color: $select-hover-bg-color;\n    border-color: $input-focus-border-color;\n  }\n  // Disabled Styles\n  &:disabled {\n    background-color: $input-disabled-bg;\n    cursor: $input-disabled-cursor;\n  }\n}\n\n// We use this mixin to turn on/off HTML5 number spinners\n@mixin html5number($browser, $on:true) {\n  @if $on==false {\n      @if $browser==webkit {\n        -webkit-appearance: none;\n        margin: 0;\n      } @else if $browser==moz {\n        -moz-appearance: textfield;\n      }\n  }\n}\n\n@include exports(\"form\") {\n  @if $include-html-form-classes {\n    /* Standard Forms */\n    form { margin: 0 0 $form-spacing; }\n\n    /* Using forms within rows, we need to set some defaults */\n    form .row { @include form-row-base; }\n\n    /* Label Styles */\n    label { @include form-label;\n      &.right { @include form-label(right,false); }\n      &.inline { @include form-label(inline,false); }\n      /* Styles for required inputs */\n      small {\n        text-transform: $form-label-small-transform;\n        color: scale-color($form-label-font-color, $lightness: 15%);\n      }\n    }\n\n    /* Attach elements to the beginning or end of an input */\n    .prefix,\n    .postfix { @include prefix-postfix-base; }\n\n    /* Adjust padding, alignment and radius if pre/post element is a button */\n    .postfix.button { @include button-size(false,false); @include postfix(false, false, true); }\n    .prefix.button { @include button-size(false,false); @include prefix(false, false, true); }\n\n    .prefix.button.radius { @include radius(0); @include side-radius($default-float, $button-radius); }\n    .postfix.button.radius { @include radius(0); @include side-radius($opposite-direction, $button-radius); }\n    .prefix.button.round { @include radius(0); @include side-radius($default-float, $button-round); }\n    .postfix.button.round { @include radius(0); @include side-radius($opposite-direction, $button-round); }\n\n    /* Separate prefix and postfix styles when on span or label so buttons keep their own */\n    span.prefix,label.prefix { @include prefix(); }\n    span.postfix,label.postfix { @include postfix(); }\n\n    /* We use this to get basic styling on all basic form elements */\n    #{text-inputs(all, 'input')} {\n      -webkit-appearance: none;\n      border-radius: 0;\n      @include form-element;\n      @if $input-include-glowing-effect == false {\n          @include single-transition(all, 0.15s, linear);\n      }\n      &.radius {\n        @include radius($input-border-radius);\n      }\n    }\n\n    form {\n      .row {\n        .prefix-radius.row.collapse {\n          input,\n          textarea,\n          select { @include radius(0); @include side-radius($opposite-direction, $button-radius); }\n          .prefix { @include radius(0); @include side-radius($default-float, $button-radius); }\n        }\n        .postfix-radius.row.collapse {\n          input,\n          textarea,\n          select { @include radius(0); @include side-radius($default-float, $button-radius); }\n          .postfix { @include radius(0); @include side-radius($opposite-direction, $button-radius); }\n        }\n        .prefix-round.row.collapse {\n          input,\n          textarea,\n          select { @include radius(0); @include side-radius($opposite-direction, $button-round); }\n          .prefix { @include radius(0); @include side-radius($default-float, $button-round); }\n        }\n        .postfix-round.row.collapse {\n          input,\n          textarea,\n          select { @include radius(0); @include side-radius($default-float, $button-round); }\n          .postfix { @include radius(0); @include side-radius($opposite-direction, $button-round); }\n        }\n      }\n    }\n\n    input[type=\"submit\"] {\n      -webkit-appearance: none;\n      border-radius: 0;\n    }\n\n    /* Respect enforced amount of rows for textarea */\n    textarea[rows] {\n      height: auto;\n    }\n\n\t/* Not allow resize out of parent */\n\ttextarea {\n\t\tmax-width: 100%;\n\t}\n\n    /* Add height value for select elements to match text input height */\n    select {\n      @include form-select;\n      height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));\n    }\n\n    /* Adjust margin for form elements below */\n    input[type=\"file\"],\n    input[type=\"checkbox\"],\n    input[type=\"radio\"],\n    select {\n      margin: 0 0 $form-spacing 0;\n    }\n\n    input[type=\"checkbox\"] + label,\n    input[type=\"radio\"] + label {\n      display: inline-block;\n      margin-#{$default-float}: $form-spacing * .5;\n      margin-#{$opposite-direction}: $form-spacing;\n      margin-bottom: 0;\n      vertical-align: baseline;\n    }\n\n    /* Normalize file input width */\n    input[type=\"file\"] {\n      width:100%;\n    }\n\n    /* HTML5 Number spinners settings */\n    input[type=number] {\n      @include html5number(moz, $input-number-spinners)\n    }\n    input[type=\"number\"]::-webkit-inner-spin-button,\n    input[type=\"number\"]::-webkit-outer-spin-button {\n      @include html5number(webkit, $input-number-spinners);\n    }\n\n    /* We add basic fieldset styling */\n    fieldset {\n      @include fieldset;\n    }\n\n    /* Error Handling */\n\n    #{data('abide')} {\n      .error small.error, .error span.error, span.error, small.error {\n        @include form-error-message;\n      }\n      span.error, small.error { display: none; }\n    }\n\n    span.error, small.error {\n      @include form-error-message;\n    }\n\n    .error {\n      input,\n      textarea,\n      select {\n        margin-bottom: 0;\n      }\n\n      input[type=\"checkbox\"],\n      input[type=\"radio\"] {\n        margin-bottom: $form-spacing\n      }\n\n      label,\n      label.error {\n        @include form-label-error-color;\n      }\n\n      small.error {\n        @include form-error-message;\n      }\n\n      > label {\n        > small {\n          color: scale-color($form-label-font-color, $lightness: 15%);\n          background: transparent;\n          padding: 0;\n          text-transform: $form-label-small-transform;\n          font-style: normal;\n          font-size: 60%;\n          margin: 0;\n          display: inline;\n        }\n      }\n\n      span.error-message {\n        display: block;\n      }\n    }\n\n    input.error,\n    textarea.error,\n    select.error {\n      margin-bottom: 0;\n    }\n    label.error { @include form-label-error-color; }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_global.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"../functions\";\n//\n// Foundation Variables\n//\n\n// Data attribute namespace\n// styles get applied to [data-mysite-plugin], etc\n$namespace: false !default;\n\n// The default font-size is set to 100% of the browser style sheet (usually 16px)\n// for compatibility with browser-based text zoom or user-set defaults.\n\n// Since the typical default browser font-size is 16px, that makes the calculation for grid size.\n// If you want your base font-size to be different and not have it affect the grid breakpoints,\n// set $rem-base to $base-font-size and make sure $base-font-size is a px value.\n$base-font-size: 100% !default;\n\n// $base-line-height is 24px while $base-font-size is 16px\n$base-line-height: 1.5 !default;\n\n//\n// Global Foundation Mixins\n//\n\n// @mixins\n//\n// We use this to control border radius.\n// $radius - Default: $global-radius || 4px\n@mixin radius($radius:$global-radius) {\n  @if $radius {\n    border-radius: $radius;\n  }\n}\n\n// @mixins\n//\n// We use this to create equal side border radius on elements.\n// $side - Options: left, right, top, bottom\n@mixin side-radius($side, $radius:$global-radius) {\n  @if ($side == left or $side == right) {\n    -webkit-border-bottom-#{$side}-radius: $radius;\n    -webkit-border-top-#{$side}-radius: $radius;\n    border-bottom-#{$side}-radius: $radius;\n    border-top-#{$side}-radius: $radius;\n  } @else {\n    -webkit-#{$side}-left-radius: $radius;\n    -webkit-#{$side}-right-radius: $radius;\n    border-#{$side}-left-radius: $radius;\n    border-#{$side}-right-radius: $radius;\n  }\n}\n\n// @mixins\n//\n// We can control whether or not we have inset shadows edges.\n// $active - Default: true, Options: false\n@mixin inset-shadow($active:true) {\n  box-shadow: $shiny-edge-size $shiny-edge-color inset;\n\n  @if $active { &:active {\n    box-shadow: $shiny-edge-size $shiny-edge-active-color inset; } }\n}\n\n// @mixins\n//\n// We use this to add transitions to elements\n// $property - Default: all, Options: http://www.w3.org/TR/css3-transitions/#animatable-properties\n// $speed - Default: 300ms\n// $ease - Default:ease-out, Options: http://css-tricks.com/almanac/properties/t/transition-timing-function/\n@mixin single-transition($property:all, $speed:300ms, $ease:ease-out) {\n  transition: $property $speed $ease;\n}\n\n// @mixins\n//\n// We use this to add box-sizing across browser prefixes\n@mixin box-sizing($type:border-box) {\n  -webkit-box-sizing: $type; // Android < 2.3, iOS < 4\n     -moz-box-sizing: $type; // Firefox < 29\n          box-sizing: $type; // Chrome, IE 8+, Opera, Safari 5.1\n}\n\n// @mixins\n//\n// We use this to create isosceles triangles\n// $triangle-size - Used to set border-size. No default, set a px or em size.\n// $triangle-color - Used to set border-color which makes up triangle. No default\n// $triangle-direction - Used to determine which direction triangle points. Options: top, bottom, left, right\n@mixin css-triangle($triangle-size, $triangle-color, $triangle-direction) {\n  content: \"\";\n  display: block;\n  width: 0;\n  height: 0;\n  border: inset $triangle-size;\n  @if ($triangle-direction == top) {\n    border-color: $triangle-color transparent transparent transparent;\n    border-top-style: solid;\n  }\n  @if ($triangle-direction == bottom) {\n    border-color: transparent transparent $triangle-color transparent;\n    border-bottom-style: solid;\n  }\n  @if ($triangle-direction == left) {\n    border-color: transparent transparent transparent $triangle-color;\n    border-left-style: solid;\n  }\n  @if ($triangle-direction == right) {\n    border-color: transparent $triangle-color transparent transparent;\n    border-right-style: solid;\n  }\n}\n\n// @mixins\n//\n// We use this to create the icon with three lines aka the hamburger icon, the menu-icon or the navicon\n// $width - Width of hamburger icon in rem\n// $left - If false, icon will be centered horizontally || explicitly set value in rem\n// $top - If false, icon will be centered vertically || explicitly set value in rem\n// $thickness - thickness of lines in hamburger icon, set value in px\n// $gap - spacing between the lines in hamburger icon, set value in px\n// $color - icon color\n// $hover-color - icon color during hover\n// $offcanvas - Set to true of @include in offcanvas\n@mixin hamburger($width, $left, $top, $thickness, $gap, $color, $hover-color, $offcanvas) {\n  span::after {\n    content: \"\";\n    position: absolute;\n    display: block;\n    height: 0;\n\n    @if $offcanvas {\n      @if $top {\n        top: $top;\n      }\n      @else {\n        top: 50%;\n        margin-top: (-$width/2);\n      }\n      @if $left {\n        left: $left;\n      }\n      @else {\n        left: ($tabbar-menu-icon-width - $width)/2;\n      }\n    }\n    @else {\n      top: 50%;\n      margin-top: -($width/2);\n      #{$opposite-direction}: $topbar-link-padding;\n    }\n\n    box-shadow:\n      0 0 0 $thickness $color,\n      0 $gap + $thickness 0 $thickness $color,\n      0 (2 * $gap + 2*$thickness) 0 $thickness $color;\n    width: $width;\n  }\n  span:hover:after {\n    box-shadow:\n      0 0 0 $thickness $hover-color,\n      0 $gap + $thickness 0 $thickness $hover-color,\n      0 (2 * $gap + 2*$thickness) 0 $thickness $hover-color;\n  }\n}\n\n// We use this to do clear floats\n@mixin clearfix {\n  &:before, &:after { content: \" \"; display: table; }\n  &:after { clear: both; }\n}\n\n// @mixins\n//\n// We use this to add a glowing effect to block elements\n// $selector - Used for selector state. Default: focus, Options: hover, active, visited\n// $fade-time - Default: 300ms\n// $glowing-effect-color - Default: fade-out($primary-color, .25)\n@mixin block-glowing-effect($selector:focus, $fade-time:300ms, $glowing-effect-color:fade-out($primary-color, .25)) {\n  transition: box-shadow $fade-time, border-color $fade-time ease-in-out;\n\n  &:#{$selector} {\n    box-shadow: 0 0 5px $glowing-effect-color;\n    border-color: $glowing-effect-color;\n  }\n}\n\n// @mixins\n//\n// We use this to translate elements in 2D\n// $horizontal: Default: 0\n// $vertical: Default: 0\n@mixin translate2d($horizontal:0, $vertical:0) {\n  transform: translate($horizontal,$vertical)\n}\n\n// @mixins\n//\n// Makes an element visually hidden, but accessible.\n// @see http://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n@mixin element-invisible {\n  position: absolute !important;\n  height: 1px;\n  width: 1px;\n  overflow: hidden;\n  clip: rect(1px, 1px, 1px, 1px);\n}\n\n// @mixins\n//\n// Turns off the element-invisible effect.\n@mixin element-invisible-off {\n  position: static !important;\n  height: auto;\n  width: auto;\n  overflow: visible;\n  clip: auto;\n}\n\n$white         : #FFFFFF !default;\n$ghost         : #FAFAFA !default;\n$snow          : #F9F9F9 !default;\n$vapor         : #F6F6F6 !default;\n$white-smoke   : #F5F5F5 !default;\n$silver        : #EFEFEF !default;\n$smoke         : #EEEEEE !default;\n$gainsboro     : #DDDDDD !default;\n$iron          : #CCCCCC !default;\n$base          : #AAAAAA !default;\n$aluminum      : #999999 !default;\n$jumbo         : #888888 !default;\n$monsoon       : #777777 !default;\n$steel         : #666666 !default;\n$charcoal      : #555555 !default;\n$tuatara       : #444444 !default;\n$oil           : #333333 !default;\n$jet           : #222222 !default;\n$black         : #000000 !default;\n\n// We use these as default colors throughout\n$primary-color: #008CBA !default;   // bondi-blue\n$secondary-color: #e7e7e7 !default; // white-lilac\n$alert-color: #f04124 !default;     // cinnabar\n$success-color: #43AC6A !default;   // sea-green\n$warning-color: #f08a24 !default;   // carrot\n$info-color: #a0d3e8 !default;      // cornflower\n\n// We use these to define default font stacks\n$font-family-sans-serif: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif !default;\n$font-family-serif: Georgia, Cambria, \"Times New Roman\", Times, serif !default;\n$font-family-monospace: Consolas, \"Liberation Mono\", Courier, monospace !default;\n\n// We use these to define default font weights\n$font-weight-normal: normal !default;\n$font-weight-bold: bold !default;\n\n// We use these to control various global styles\n$body-bg: #fff !default;\n$body-font-color: #222 !default;\n$body-font-family: $font-family-sans-serif !default;\n$body-font-weight: $font-weight-normal !default;\n$body-font-style: normal !default;\n\n// We use this to control font-smoothing\n$font-smoothing: antialiased !default;\n\n// We use these to control text direction settings\n$text-direction: ltr !default;\n$default-float: left !default;\n$opposite-direction: right !default;\n@if $text-direction == ltr {\n  $default-float: left;\n  $opposite-direction: right;\n} @else {\n  $default-float: right;\n  $opposite-direction: left;\n}\n\n// We use these to make sure border radius matches unless we want it different.\n$global-radius: 3px !default;\n$global-rounded: 1000px !default;\n\n// We use these to control inset shadow shiny edges and depressions.\n$shiny-edge-size: 0 1px 0 !default;\n$shiny-edge-color: rgba(#fff, .5) !default;\n$shiny-edge-active-color: rgba(#000, .2) !default;\n\n// We use this to control whether or not CSS classes come through in the gem files.\n$include-html-classes: true !default;\n$include-print-styles: true !default;\n$include-html-global-classes: $include-html-classes !default;\n\n$column-gutter: rem-calc(30) !default;\n\n// Media Query Ranges\n$small-range: (0, 40em) !default;\n$medium-range: (40.063em, 64em) !default;\n$large-range: (64.063em, 90em) !default;\n$xlarge-range: (90.063em, 120em) !default;\n$xxlarge-range: (120.063em, 99999999em) !default;\n\n\n$screen: \"only screen\" !default;\n\n$landscape: \"#{$screen} and (orientation: landscape)\" !default;\n$portrait: \"#{$screen} and (orientation: portrait)\" !default;\n\n$small-up: $screen !default;\n$small-only: \"#{$screen} and (max-width: #{upper-bound($small-range)})\" !default;\n\n$medium-up: \"#{$screen} and (min-width:#{lower-bound($medium-range)})\" !default;\n$medium-only: \"#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})\" !default;\n\n$large-up: \"#{$screen} and (min-width:#{lower-bound($large-range)})\" !default;\n$large-only: \"#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})\" !default;\n\n$xlarge-up: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)})\" !default;\n$xlarge-only: \"#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})\" !default;\n\n$xxlarge-up: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)})\" !default;\n$xxlarge-only: \"#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})\" !default;\n\n// Legacy\n$small: $medium-up;\n$medium: $medium-up;\n$large: $large-up;\n\n\n//We use this as cursors values for enabling the option of having custom cursors in the whole site's stylesheet\n$cursor-auto-value: auto !default;\n$cursor-crosshair-value: crosshair !default;\n$cursor-default-value: default !default;\n$cursor-pointer-value: pointer !default;\n$cursor-help-value: help !default;\n$cursor-text-value: text !default;\n\n\n@include exports(\"global\") {\n\n  // Meta styles are included in all builds, as they are a dependancy of the Javascript.\n  // Used to provide media query values for javascript components.\n  // Forward slash placed around everything to convince PhantomJS to read the value.\n\n  meta.foundation-version {\n    font-family: \"/5.4.7/\";\n  }\n\n  meta.foundation-mq-small {\n    font-family: \"/\" + unquote($small-up) + \"/\";\n    width: lower-bound($small-range);\n  }\n\n  meta.foundation-mq-medium {\n    font-family: \"/\" + unquote($medium-up) + \"/\";\n    width: lower-bound($medium-range);\n  }\n\n  meta.foundation-mq-large {\n    font-family: \"/\" + unquote($large-up) + \"/\";\n    width: lower-bound($large-range);\n  }\n\n  meta.foundation-mq-xlarge {\n    font-family: \"/\" + unquote($xlarge-up) + \"/\";\n    width: lower-bound($xlarge-range);\n  }\n\n  meta.foundation-mq-xxlarge {\n    font-family: \"/\" + unquote($xxlarge-up) + \"/\";\n    width: lower-bound($xxlarge-range);\n  }\n\n  meta.foundation-data-attribute-namespace {\n    font-family: #{$namespace};\n  }\n\n  @if $include-html-global-classes {\n\n    // Must be 100% for off canvas to work\n    html, body { height: 100%; }\n\n    // Set box-sizing globally to handle padding and border widths\n    *,\n    *:before,\n    *:after {\n      @include box-sizing(border-box);\n    }\n\n    html,\n    body { font-size: $base-font-size; }\n\n    // Default body styles\n    body {\n      background: $body-bg;\n      color: $body-font-color;\n      padding: 0;\n      margin: 0;\n      font-family: $body-font-family;\n      font-weight: $body-font-weight;\n      font-style: $body-font-style;\n      line-height: $base-line-height; // Set to $base-line-height to take on browser default of 150%\n      position: relative;\n      cursor: $cursor-auto-value;\n    }\n\n  a:hover { cursor: $cursor-pointer-value; }\n\n    // Grid Defaults to get images and embeds to work properly\n    img { max-width: 100%; height: auto; }\n\n    img { -ms-interpolation-mode: bicubic; }\n\n    #map_canvas,\n    .map_canvas {\n      img,\n      embed,\n      object { max-width: none !important;\n      }\n    }\n\n    // Miscellaneous useful HTML classes\n    .left { float: left !important; }\n    .right { float: right !important; }\n    .clearfix { @include clearfix; }\n\n    // Hide visually and from screen readers\n    .hide {\n      display: none !important;\n      visibility: hidden;\n    }\n\n    // Hide visually and from screen readers, but maintain layout\n    .invisible { visibility: hidden; }\n\n    // Font smoothing\n    // Antialiased font smoothing works best for light text on a dark background.\n    // Apply to single elements instead of globally to body.\n    // Note this only applies to webkit-based desktop browsers and Firefox 25 (and later) on the Mac.\n    .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }\n\n    // Get rid of gap under images by making them display: inline-block; by default\n    img {\n      display: inline-block;\n      vertical-align: middle;\n    }\n\n    //\n    // Global resets for forms\n    //\n\n    // Make sure textarea takes on height automatically\n    textarea { height: auto; min-height: 50px; }\n\n    // Make select elements 100% width by default\n    select { width: 100%; }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_grid.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-grid-classes: $include-html-classes !default;\n$include-xl-html-grid-classes: false !default;\n\n$row-width: rem-calc(1000) !default;\n$total-columns: 12 !default;\n\n$last-child-float: $opposite-direction !default;\n\n//\n// Grid Functions\n//\n\n// Deprecated: We'll drop support for this in 5.1, use grid-calc()\n@function gridCalc($colNumber, $totalColumns) {\n  @warn \"gridCalc() is deprecated, use grid-calc()\";\n  @return grid-calc($colNumber, $totalColumns);\n}\n\n// @FUNCTION\n// $colNumber - Found in settings file\n// $totalColumns - Found in settings file\n@function grid-calc($colNumber, $totalColumns) {\n  @return percentage(($colNumber / $totalColumns));\n}\n\n//\n// @mixins\n//\n\n// For creating container, nested, and collapsed rows.\n//\n//\n// $behavior - Any special behavior for this row? Default: false. Options: nest, collapse, nest-collapse, false.\n@mixin grid-row($behavior: false) {\n\n  // use @include grid-row(nest); to include a nested row\n  @if $behavior == nest {\n    width: auto;\n    margin-#{$default-float}: -($column-gutter/2);\n    margin-#{$opposite-direction}: -($column-gutter/2);\n    margin-top: 0;\n    margin-bottom: 0;\n    max-width: none;\n  }\n\n  // use @include grid-row(collapse); to collapsed a container row margins\n  @else if $behavior == collapse {\n    width: 100%;\n    margin: 0;\n    max-width: $row-width;\n  }\n\n  // use @include grid-row(nest-collapse); to collapse outer margins on a nested row\n  @else if $behavior == nest-collapse {\n    width: auto;\n    margin: 0;\n    max-width: none;\n  }\n\n  // use @include grid-row; to use a container row\n  @else {\n    width: 100%;\n    margin-#{$default-float}: auto;\n    margin-#{$opposite-direction}: auto;\n    margin-top: 0;\n    margin-bottom: 0;\n    max-width: $row-width;\n  }\n\n  // Clearfix for all rows\n  @include clearfix();\n}\n\n// Creates a column, should be used inside of a media query to control layouts\n//\n// $columns - The number of columns this should be\n// $last-column - Is this the last column? Default: false.\n// $center - Center these columns? Default: false.\n// $offset - # of columns to offset. Default: false.\n// $push - # of columns to push. Default: false.\n// $pull - # of columns to pull. Default: false.\n// $collapse - Get rid of gutter padding on column? Default: false.\n// $float - Should this float? Default: true. Options: true, false, left, right.\n@mixin grid-column(\n  $columns:false,\n  $last-column:false,\n  $center:false,\n  $offset:false,\n  $push:false,\n  $pull:false,\n  $collapse:false,\n  $float:true,\n  $position:false) {\n\n  // If positioned for default .column, include relative position\n  // push and pull require position set\n  @if $position or $push or $pull {\n    position: relative;\n  }\n\n  // If collapsed, get rid of gutter padding\n  @if $collapse {\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  // Gutter padding whenever a column isn't set to collapse\n  // (use $collapse:null to do nothing)\n  @else if $collapse == false {\n    padding-left: ($column-gutter / 2);\n    padding-right: ($column-gutter / 2);\n  }\n\n  // If a column number is given, calculate width\n  @if $columns {\n    width: grid-calc($columns, $total-columns);\n\n    // If last column, float naturally instead of to the right\n    @if $last-column { float: $opposite-direction; }\n  }\n\n  // Source Ordering, adds left/right depending on which you use.\n  @if $push { #{$default-float}: grid-calc($push, $total-columns); #{$opposite-direction}: auto; }\n  @if $pull { #{$opposite-direction}: grid-calc($pull, $total-columns); #{$default-float}: auto; }\n\n  @if $float {\n    @if $float == left or $float == true { float: $default-float; }\n    @else if $float == right { float: $opposite-direction; }\n    @else { float: none; }\n  }\n\n  // If centered, get rid of float and add appropriate margins\n  @if $center {\n    margin-#{$default-float}: auto;\n    margin-#{$opposite-direction}: auto;\n    float: none;\n  }\n\n  // If offset, calculate appropriate margins\n  @if $offset { margin-#{$default-float}: grid-calc($offset, $total-columns) !important; }\n\n}\n\n// Create presentational classes for grid\n//\n// $size - Name of class to use, i.e. \"large\" will generate .large-1, .large-2, etc.\n@mixin grid-html-classes($size) {\n\n  @for $i from 0 through $total-columns - 1 {\n    .#{$size}-push-#{$i} {\n      @include grid-column($push:$i, $collapse:null, $float:false);\n    }\n    .#{$size}-pull-#{$i} {\n      @include grid-column($pull:$i, $collapse:null, $float:false);\n    }\n  }\n\n  .column,\n  .columns { @include grid-column($columns:false, $position:true); }\n\n\n  @for $i from 1 through $total-columns {\n    .#{$size}-#{$i} { @include grid-column($columns:$i,$collapse:null,$float:false); }\n  }\n\n  @for $i from 0 through $total-columns - 1 {\n    .#{$size}-offset-#{$i} { @include grid-column($offset:$i, $collapse:null,$float:false); }\n  }\n\n  .#{$size}-reset-order {\n    margin-#{$default-float}: 0;\n    margin-#{$opposite-direction}: 0;\n    left: auto;\n    right: auto;\n    float: $default-float;\n  }\n\n  .column.#{$size}-centered,\n  .columns.#{$size}-centered { @include grid-column($center:true, $collapse:null, $float:false); }\n\n  .column.#{$size}-uncentered,\n  .columns.#{$size}-uncentered {\n    margin-#{$default-float}: 0;\n    margin-#{$opposite-direction}: 0;\n    float: $default-float;\n  }\n\n  // Fighting [class*=\"column\"] + [class*=\"column\"]:last-child\n  .column.#{$size}-centered:last-child,\n  .columns.#{$size}-centered:last-child{\n    float: none;\n  }\n\n  // Fighting .column.<previous-size>-centered:last-child\n  .column.#{$size}-uncentered:last-child,\n  .columns.#{$size}-uncentered:last-child {\n    float: $default-float;\n  }\n\n  .column.#{$size}-uncentered.opposite,\n  .columns.#{$size}-uncentered.opposite {\n    float: $opposite-direction;\n  }\n}\n\n@include exports(\"grid\") {\n  @if $include-html-grid-classes {\n    .row {\n      @include grid-row;\n\n      &.collapse {\n         > .column,\n         > .columns { @include grid-column($collapse:true, $float:false); }\n\n        .row {margin-left:0; margin-right:0;}\n      }\n\n      .row { @include grid-row($behavior:nest);\n        &.collapse { @include grid-row($behavior:nest-collapse); }\n      }\n    }\n\n    .column,\n    .columns { @include grid-column($columns:$total-columns); }\n\n    [class*=\"column\"] + [class*=\"column\"]:last-child { float: $last-child-float; }\n    [class*=\"column\"] + [class*=\"column\"].end { float: $default-float; }\n\n    @media #{$small-up} {\n      @include grid-html-classes($size:small);\n    }\n\n    @media #{$medium-up} {\n      @include grid-html-classes($size:medium);\n      // Old push and pull classes\n      @for $i from 0 through $total-columns - 1 {\n        .push-#{$i} {\n          @include grid-column($push:$i, $collapse:null, $float:false);\n        }\n        .pull-#{$i} {\n          @include grid-column($pull:$i, $collapse:null, $float:false);\n        }\n      }\n    }\n    @media #{$large-up} {\n      @include grid-html-classes($size:large);\n      @for $i from 0 through $total-columns - 1 {\n        .push-#{$i} {\n          @include grid-column($push:$i, $collapse:null, $float:false);\n        }\n        .pull-#{$i} {\n          @include grid-column($pull:$i, $collapse:null, $float:false);\n        }\n      }\n    }\n  }\n  @if $include-xl-html-grid-classes {\n    @media #{$xlarge-up} {\n      @include grid-html-classes($size:xlarge);\n    }\n    @media #{$xxlarge-up} {\n      @include grid-html-classes($size:xxlarge);\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_inline-lists.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-inline-list-classes: $include-html-classes !default;\n\n// We use this to control the margins and padding of the inline list.\n$inline-list-top-margin: 0 !default;\n$inline-list-opposite-margin: 0 !default;\n$inline-list-bottom-margin: rem-calc(17) !default;\n$inline-list-default-float-margin: rem-calc(-22) !default;\n$inline-list-default-float-list-margin: rem-calc(22) !default;\n\n$inline-list-padding: 0 !default;\n\n// We use this to control the overflow of the inline list.\n$inline-list-overflow: hidden !default;\n\n// We use this to control the list items\n$inline-list-display: block !default;\n\n// We use this to control any elements within list items\n$inline-list-children-display: block !default;\n\n//\n// @mixins\n//\n// We use this mixin to create inline lists\n@mixin inline-list {\n  margin: $inline-list-top-margin auto $inline-list-bottom-margin auto;\n  margin-#{$default-float}: $inline-list-default-float-margin;\n  margin-#{$opposite-direction}: $inline-list-opposite-margin;\n  padding: $inline-list-padding;\n  list-style: none;\n  overflow: $inline-list-overflow;\n\n  & > li {\n    list-style: none;\n    float: $default-float;\n    margin-#{$default-float}: $inline-list-default-float-list-margin;\n    display: $inline-list-display;\n    &>* { display: $inline-list-children-display; }\n  }\n}\n\n@include exports(\"inline-list\") {\n  @if $include-html-inline-list-classes {\n    .inline-list {\n      @include inline-list();\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_keystrokes.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-keystroke-classes: $include-html-classes !default;\n\n// We use these to control text styles.\n$keystroke-font: \"Consolas\", \"Menlo\", \"Courier\", monospace !default;\n$keystroke-font-size: inherit !default;\n$keystroke-font-color: $jet !default;\n$keystroke-font-color-alt: $white !default;\n$keystroke-function-factor: -7% !default;\n\n// We use this to control keystroke padding.\n$keystroke-padding: rem-calc(2 4 0) !default;\n\n// We use these to control background and border styles.\n$keystroke-bg: scale-color($white, $lightness: $keystroke-function-factor) !default;\n$keystroke-border-style: solid !default;\n$keystroke-border-width: 1px !default;\n$keystroke-border-color: scale-color($keystroke-bg, $lightness: $keystroke-function-factor) !default;\n$keystroke-radius: $global-radius !default;\n\n//\n// @mixins\n//\n// We use this mixin to create keystroke styles.\n// $bg - Default: $keystroke-bg || scale-color($white, $lightness: $keystroke-function-factor) !default;\n@mixin keystroke($bg:$keystroke-bg) {\n  // This find the lightness percentage of the background color.\n  $bg-lightness: lightness($bg);\n\n  background-color: $bg;\n  border-color: scale-color($bg, $lightness: $keystroke-function-factor);\n\n  // We adjust the font color based on the brightness of the background.\n  @if $bg-lightness > 70% { color: $keystroke-font-color; }\n  @else { color: $keystroke-font-color-alt; }\n\n  border-style: $keystroke-border-style;\n  border-width: $keystroke-border-width;\n  margin: 0;\n  font-family: $keystroke-font;\n  font-size: $keystroke-font-size;\n  padding: $keystroke-padding;\n}\n\n@include exports(\"keystroke\") {\n  @if $include-html-keystroke-classes  {\n    .keystroke,\n    kbd {\n      @include keystroke;\n      @include radius($keystroke-radius);\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_labels.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-label-classes: $include-html-classes !default;\n\n// We use these to style the labels\n$label-padding: rem-calc(4 8 4) !default;\n$label-radius: $global-radius !default;\n\n// We use these to style the label text\n$label-font-sizing: rem-calc(11) !default;\n$label-font-weight: $font-weight-normal !default;\n$label-font-color: $oil !default;\n$label-font-color-alt: $white !default;\n$label-font-family: $body-font-family !default;\n\n//\n// @mixins\n//\n// We use this mixin to create a default label base.\n@mixin label-base {\n  font-weight: $label-font-weight;\n  font-family: $label-font-family;\n  text-align: center;\n  text-decoration: none;\n  line-height: 1;\n  white-space: nowrap;\n  display: inline-block;\n  position: relative;\n  margin-bottom: auto;\n}\n\n// @mixins\n//\n// We use this mixin to add label size styles.\n// $padding - Used to determine label padding. Default: $label-padding || rem-calc(4 8 4) !default\n// $text-size - Used to determine label text-size. Default: $text-size found in settings\n@mixin label-size($padding:$label-padding, $text-size:$label-font-sizing) {\n  @if $padding { padding: $padding; }\n  @if $text-size { font-size: $text-size; }\n}\n\n// @mixins\n//\n// We use this mixin to add label styles.\n// $bg - Default: $primary-color (found in settings file)\n// $radius - Default: false, Options: true, sets radius to $global-radius (found in settings file)\n@mixin label-style($bg:$primary-color, $radius:false) {\n\n  // We control which background color comes through\n  @if $bg {\n\n    // This find the lightness percentage of the background color.\n    $bg-lightness: lightness($bg);\n\n    background-color: $bg;\n\n    // We control the text color for you based on the background color.\n    @if $bg-lightness < $lightness-threshold { color: $label-font-color-alt; }\n    @else { color: $label-font-color; }\n  }\n\n  // We use this to control the radius on labels.\n  @if $radius == true { @include radius($label-radius); }\n  @else if $radius { @include radius($radius); }\n\n}\n\n// @mixins\n//\n// We use this to add close buttons to alerts\n// $padding - Default: $label-padding,\n// $text-size - Default: $label-font-sizing,\n// $bg - Default: $primary-color(found in settings file)\n// $radius - Default: false, Options: true which sets radius to $global-radius (found in settings file)\n@mixin label($padding:$label-padding, $text-size:$label-font-sizing, $bg:$primary-color, $radius:false) {\n\n  @include label-base;\n  @include label-size($padding, $text-size);\n  @include label-style($bg, $radius);\n}\n\n@include exports(\"label\") {\n  @if $include-html-label-classes {\n    .label {\n      @include label-base;\n      @include label-size;\n      @include label-style;\n\n      &.radius { @include label-style(false, true); }\n      &.round { @include label-style(false, $radius:1000px); }\n\n      &.alert     { @include label-style($alert-color); }\n      &.warning   { @include label-style($warning-color); }\n      &.success   { @include label-style($success-color); }\n      &.secondary { @include label-style($secondary-color); }\n      &.info      { @include label-style($info-color); }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_pagination.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-pagination-classes: $include-html-classes !default;\n\n// We use these to control the pagination container\n$pagination-height: rem-calc(24) !default;\n$pagination-margin: rem-calc(-5) !default;\n\n// We use these to set the list-item properties\n$pagination-li-float: $default-float !default;\n$pagination-li-height: rem-calc(24) !default;\n$pagination-li-font-color: $jet !default;\n$pagination-li-font-size: rem-calc(14) !default;\n$pagination-li-margin: rem-calc(5) !default;\n\n// We use these for the pagination anchor links\n$pagination-link-pad: rem-calc(1 10 1) !default;\n$pagination-link-font-color: $aluminum !default;\n$pagination-link-active-bg: scale-color($white, $lightness: -10%) !default;\n\n// We use these for disabled anchor links\n$pagination-link-unavailable-cursor: default !default;\n$pagination-link-unavailable-font-color: $aluminum !default;\n$pagination-link-unavailable-bg-active: transparent !default;\n\n// We use these for currently selected anchor links\n$pagination-link-current-background: $primary-color !default;\n$pagination-link-current-font-color: $white !default;\n$pagination-link-current-font-weight: $font-weight-bold !default;\n$pagination-link-current-cursor: default !default;\n$pagination-link-current-active-bg: $primary-color !default;\n\n// @mixins\n//\n// Style the pagination container. Currently only used when centering elements.\n// $center - Default: false, Options: true\n@mixin pagination-container($center:false) {\n  @if $center { text-align: center; }\n}\n\n// @mixins\n// Style unavailable list items\n@mixin pagination-unavailable-item {\n  a, button {\n    cursor: $pagination-link-unavailable-cursor;\n    color: $pagination-link-unavailable-font-color;\n  }\n  &:hover a,\n  & a:focus,\n\n  &:hover button,\n  & button:focus\n  { background: $pagination-link-unavailable-bg-active; }\n}\n// @mixins\n// Style the current list item. Do not assume that the current item has\n// an anchor <a> element.\n// $has-anchor - Default: true, Options: false\n@mixin pagination-current-item($has-anchor: true) {\n  @if $has-anchor {\n    a, button {\n      background: $pagination-link-current-background;\n      color: $pagination-link-current-font-color;\n      font-weight: $pagination-link-current-font-weight;\n      cursor: $pagination-link-current-cursor;\n\n      &:hover,\n      &:focus { background: $pagination-link-current-active-bg; }\n    }\n  } @else {\n    height: auto;\n    padding: $pagination-link-pad;\n    background: $pagination-link-current-background;\n    color: $pagination-link-current-font-color;\n    font-weight: $pagination-link-current-font-weight;\n    cursor: $pagination-link-current-cursor;\n    @include radius;\n\n    &:hover,\n    &:focus { background: $pagination-link-current-active-bg; }\n  }\n}\n\n// @mixins\n//\n// We use this mixin to set the properties for the creating Foundation pagination\n// $center - Left or center align the li elements. Default: false\n// $base-style - Sets base styles for pagination. Default: true, Options: false\n// $use-default-classes - Makes unavailable & current classes available for use. Default: true\n@mixin pagination($center:false, $base-style:true, $use-default-classes:true) {\n\n  @if $base-style {\n    display: block;\n    min-height: $pagination-height;\n    margin-#{$default-float}: $pagination-margin;\n\n    li {\n      height: $pagination-li-height;\n      color: $pagination-li-font-color;\n      font-size: $pagination-li-font-size;\n      margin-#{$default-float}: $pagination-li-margin;\n\n      & > a, button {\n        display: block;\n        padding: $pagination-link-pad;\n        color: $pagination-link-font-color;\n        background: none;\n        @include radius;\n        font-weight: normal;\n        font-size: 1em;\n        line-height: inherit;\n        @include single-transition(background-color);\n      }\n\n      &:hover > a,\n      a:focus,\n      &:hover button,\n      button:focus\n      { background: $pagination-link-active-bg; }\n\n      @if $use-default-classes {\n        &.unavailable { @include pagination-unavailable-item(); }\n        &.current { @include pagination-current-item(); }\n      }\n    }\n  }\n\n  // Left or center align the li elements\n  li {\n    @if $center {\n      float: none;\n      display: inline-block;\n    } @else {\n      float: $pagination-li-float;\n      display: block;\n    }\n  }\n}\n\n@include exports(\"pagination\") {\n  @if $include-pagination-classes {\n    ul.pagination {\n      @include pagination;\n    }\n\n    /* Pagination centred wrapper */\n    .pagination-centered {\n      @include pagination-container(true);\n\n      ul.pagination {\n        @include pagination(true, false);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_panels.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @variables\n//\n$include-html-panel-classes: $include-html-classes !default;\n\n// We use these to control the background and border styles\n$panel-bg: scale-color($white, $lightness: -5%) !default;\n$panel-border-style: solid !default;\n$panel-border-size: 1px !default;\n\n// We use this % to control how much we darken things on hover\n$panel-function-factor: -11% !default;\n$panel-border-color: scale-color($panel-bg, $lightness: $panel-function-factor) !default;\n\n// We use these to set default inner padding and bottom margin\n$panel-margin-bottom: rem-calc(20) !default;\n$panel-padding: rem-calc(20) !default;\n\n// We use these to set default font colors\n$panel-font-color: $oil !default;\n$panel-font-color-alt: $white !default;\n\n$panel-header-adjust: true !default;\n$callout-panel-link-color: $primary-color !default;\n$callout-panel-link-color-hover: scale-color($callout-panel-link-color, $lightness: -14%) !default;\n//\n// @mixins\n//\n// We use this mixin to create panels.\n// $bg - Sets the panel background color. Default: $panel-pg || scale-color($white, $lightness: -5%) !default\n// $padding - Sets the panel padding amount. Default: $panel-padding || rem-calc(20)\n// $adjust - Sets the font color based on the darkness of the bg & resets header line-heights for panels. Default: $panel-header-adjust || true\n@mixin panel($bg:$panel-bg, $padding:$panel-padding, $adjust:$panel-header-adjust) {\n\n  @if $bg {\n    $bg-lightness: lightness($bg);\n\n    border-style: $panel-border-style;\n    border-width: $panel-border-size;\n    border-color: scale-color($bg, $lightness: $panel-function-factor);\n    margin-bottom: $panel-margin-bottom;\n    padding: $padding;\n\n    background: $bg;\n    @if $bg-lightness >= 50% { color: $panel-font-color; }\n    @else { color: $panel-font-color-alt; }\n\n    // Respect the padding, fool.\n    &>:first-child { margin-top: 0; }\n    &>:last-child { margin-bottom: 0; }\n\n    @if $adjust {\n      // We set the font color based on the darkness of the bg.\n      @if $bg-lightness >= 50% { \n        h1,h2,h3,h4,h5,h6,p,li,dl { color: $panel-font-color; }\n      }\n      @else { \n        h1,h2,h3,h4,h5,h6,p,li,dl { color: $panel-font-color-alt; }\n      }\n\n      // reset header line-heights for panels\n      h1,h2,h3,h4,h5,h6 {\n        line-height: 1; margin-bottom: rem-calc(20) / 2;\n        &.subheader { line-height: 1.4; }\n      }\n    }\n  }\n}\n\n@include exports(\"panel\") {\n  @if $include-html-panel-classes {\n\n    /* Panels */\n    .panel { @include panel;\n\n      &.callout {\n        @include panel(scale-color($primary-color, $lightness: 94%));\n        a:not(.button) {\n          color: $callout-panel-link-color;\n\n          &:hover,\n          &:focus {\n            color: $callout-panel-link-color-hover;\n          }\n        }\n      }\n\n      &.radius {\n        @include radius;\n      }\n\n    }\n\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_reveal.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n@import \"grid\";\n\n//\n// @name _reveal.scss\n// @dependencies _global.scss\n//\n\n$include-html-reveal-classes: $include-html-classes !default;\n\n// We use these to control the style of the reveal overlay.\n$reveal-overlay-bg: rgba($black, .45) !default;\n$reveal-overlay-bg-old: $black !default;\n\n// We use these to control the style of the modal itself.\n$reveal-modal-bg: $white !default;\n$reveal-position-top: rem-calc(100) !default;\n$reveal-default-width: 80% !default;\n$reveal-max-width: $row-width !default;\n$reveal-modal-padding: rem-calc(20) !default;\n$reveal-box-shadow: 0 0 10px rgba($black,.4) !default;\n\n// We use these to style the reveal close button\n$reveal-close-font-size: rem-calc(40) !default;\n$reveal-close-top: rem-calc(8) !default;\n$reveal-close-side: rem-calc(11) !default;\n$reveal-close-color: $base !default;\n$reveal-close-weight: $font-weight-bold !default;\n\n// We use this to set the default radius used throughout the core.\n$reveal-radius: $global-radius !default;\n$reveal-round: $global-rounded !default;\n\n// We use these to control the modal border\n$reveal-border-style: solid !default;\n$reveal-border-width: 1px !default;\n$reveal-border-color: $steel !default;\n\n$reveal-modal-class: \"reveal-modal\" !default;\n$close-reveal-modal-class: \"close-reveal-modal\" !default;\n\n//\n// @mixins\n//\n\n// We use this to create the reveal background overlay styles\n@mixin reveal-bg( $include-z-index-value: true ) {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: $reveal-overlay-bg-old; // Autoprefixer should be used to avoid such variables needed when Foundation for Sites can do so in the near future.\n  background: $reveal-overlay-bg;\n  z-index: if( $include-z-index-value, 1004, auto );\n  display: none;\n  #{$default-float}: 0;\n}\n\n// We use this mixin to create the structure of a reveal modal\n//\n// $base-style - Provides reveal base styles, can be set to false to override. Default: true, Options: false\n// $width - Sets reveal width Default: $reveal-default-width || 80%\n//\n@mixin reveal-modal-base( $base-style: true, $width:$reveal-default-width, $max-width:$reveal-max-width, $border-radius: $reveal-radius) {\n  @if $base-style {\n    visibility: hidden;\n    display: none;\n    position: absolute;\n    z-index: 1005;\n    width: 100vw;\n    top:0;\n    border-radius: $border-radius;\n    #{$default-float}: 0;\n\n    @media #{$small-only} {\n      min-height:100vh;\n    }\n\n    // Make sure rows don't have a min-width on them\n    .column, .columns { min-width: 0; }\n\n    // Get rid of margin from first and last element inside modal\n    & > :first-child { margin-top: 0; }\n\n    & > :last-child { margin-bottom: 0; }\n  }\n\n  @if $width {\n    @media #{$medium-up} {\n      width: $width;\n      max-width: $max-width;\n      left: 0;\n      right: 0;\n      margin: 0 auto;\n    }\n  }\n}\n\n// We use this to style the reveal modal defaults\n//\n// $bg - Sets background color of reveal modal. Default: $reveal-modal-bg || $white\n// $padding - Padding to apply to reveal modal. Default: $reveal-modal-padding.\n// $border - Choose whether reveal uses a border. Default: true, Options: false\n// $border-style - Set reveal border style. Default: $reveal-border-style || solid\n// $border-width - Width of border (i.e. 1px). Default: $reveal-border-width.\n// $border-color - Color of border. Default: $reveal-border-color.\n// $box-shadow - Choose whether or not to include the default box-shadow. Default: true, Options: false\n// $radius - If true, set to modal radius which is $global-radius || explicitly set radius amount in px (ex. $radius:10px). Default: false\n// $top-offset - Default: $reveal-position-top || 50px\n@mixin reveal-modal-style(\n  $bg:false,\n  $padding:false,\n  $border:false,\n  $border-style:$reveal-border-style,\n  $border-width:$reveal-border-width,\n  $border-color:$reveal-border-color,\n  $box-shadow:false,\n  $radius:false,\n  $top-offset:false) {\n\n  @if $bg { background-color: $bg; }\n  @if $padding != false { padding: $padding; }\n\n  @if $border { border: $border-style $border-width $border-color; }\n\n  // We can choose whether or not to include the default box-shadow.\n  @if $box-shadow {\n    box-shadow: $reveal-box-shadow;\n  }\n\n  // We can control how much radius is used on the modal\n  @if $radius == true { @include radius($reveal-radius); }\n  @else if $radius { @include radius($radius); }\n\n  @if $top-offset {\n    @media #{$medium-up} {\n      top: $top-offset;\n    }\n  }\n}\n\n// We use this to create a close button for the reveal modal\n//\n// $color - Default: $reveal-close-color || $base\n@mixin reveal-close($color:$reveal-close-color) {\n  font-size: $reveal-close-font-size;\n  line-height: 1;\n  position: absolute;\n  top: $reveal-close-top;\n  #{$opposite-direction}: $reveal-close-side;\n  color: $color;\n  font-weight: $reveal-close-weight;\n  cursor: $cursor-pointer-value;\n}\n\n@include exports(\"reveal\") {\n  @if $include-html-reveal-classes {\n\n    // Reveal Modals\n    .reveal-modal-bg { @include reveal-bg; }\n\n    .#{$reveal-modal-class} {\n      @include reveal-modal-base;\n      @include reveal-modal-style(\n        $bg:$reveal-modal-bg,\n        $padding:$reveal-modal-padding,\n        $border:true,\n        $box-shadow:true,\n        $radius:false,\n        $top-offset:$reveal-position-top\n      );\n      @include reveal-modal-style($padding:$reveal-modal-padding * 1.5);\n\n      &.radius { @include reveal-modal-style($radius:true); }\n      &.round  { @include reveal-modal-style($radius:$reveal-round); }\n      &.collapse { @include reveal-modal-style($padding:0); }\n      &.tiny  { @include reveal-modal-base(false, 30%); }\n      &.small { @include reveal-modal-base(false, 40%); }\n      &.medium  { @include reveal-modal-base(false, 60%); }\n      &.large { @include reveal-modal-base(false, 70%); }\n      &.xlarge { @include reveal-modal-base(false, 95%); }\n      &.full {\n        @include reveal-modal-base(false, 100vw);\n        top:0;\n        left:0;\n        height:100%;\n        height: 100vh;\n        min-height:100vh;\n        max-width: none !important;\n        margin-left: 0 !important;\n      }\n\n      .#{$close-reveal-modal-class} { @include reveal-close; }\n    }\n\n    dialog {\n      @extend .#{$reveal-modal-class};\n      display: none;\n\n      &::backdrop, & + .backdrop {\n        @include reveal-bg(false);\n      }\n\n      &[open]{\n        display: block;\n      }\n    }\n\n    // Reveal Print Styles: It should be invisible, adds no value being printed.\n    @media print {\n      dialog, .#{$reveal-modal-class} { \n        display: none;\n        background: $white !important;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_sub-nav.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @name _sub-nav.scss\n// @dependencies _global.scss\n//\n\n//\n// @variables\n//\n\n$include-html-nav-classes: $include-html-classes !default;\n\n// We use these to control margin and padding\n$sub-nav-list-margin: rem-calc(-4 0 18) !default;\n$sub-nav-list-padding-top: rem-calc(4) !default;\n\n// We use this to control the definition\n$sub-nav-font-family: $body-font-family !default;\n$sub-nav-font-size: rem-calc(14) !default;\n$sub-nav-font-color: $aluminum !default;\n$sub-nav-font-weight: $font-weight-normal !default;\n$sub-nav-text-decoration: none !default;\n$sub-nav-padding: rem-calc(3 16) !default;\n$sub-nav-border-radius: 3px !default;\n$sub-nav-font-color-hover: scale-color($sub-nav-font-color, $lightness: -25%) !default;\n\n\n// We use these to control the active item styles\n\n$sub-nav-active-font-weight: $font-weight-normal !default;\n$sub-nav-active-bg: $primary-color !default;\n$sub-nav-active-bg-hover: scale-color($sub-nav-active-bg, $lightness: -14%) !default;\n$sub-nav-active-color: $white !default;\n$sub-nav-active-padding: $sub-nav-padding !default;\n$sub-nav-active-cursor: default !default;\n\n$sub-nav-item-divider: \"\" !default;\n$sub-nav-item-divider-margin: rem-calc(12) !default;\n\n//\n// @mixins\n//\n\n\n// Create a sub-nav item\n//\n// $font-color - Font color. Default: $sub-nav-font-color.\n// $font-size - Font size. Default: $sub-nav-font-size.\n// $active-bg - Background of active nav item. Default: $sub-nav-active-bg.\n// $active-bg-hover - Background of active nav item, when hovered. Default: $sub-nav-active-bg-hover.\n@mixin sub-nav(\n  $font-color: $sub-nav-font-color,\n  $font-size: $sub-nav-font-size,\n  $active-bg: $sub-nav-active-bg,\n  $active-bg-hover: $sub-nav-active-bg-hover) {\n  display: block;\n  width: auto;\n  overflow: hidden;\n  margin-bottom: $sub-nav-list-margin;\n  padding-top: $sub-nav-list-padding-top;\n\n  dt {\n    text-transform: uppercase;\n  }\n\n  dt,\n  dd,\n  li {\n    float: $default-float;\n    display: inline;\n    margin-#{$default-float}: rem-calc(16);\n    margin-bottom: 0;\n    font-family: $sub-nav-font-family;\n    font-weight: $sub-nav-font-weight;\n    font-size: $font-size;\n    color: $font-color;\n\n    a {\n      text-decoration: $sub-nav-text-decoration;\n      color: $sub-nav-font-color;\n      padding: $sub-nav-padding;\n      &:hover {\n        color: $sub-nav-font-color-hover;\n      }\n    }\n\n    &.active a {\n      @include radius($sub-nav-border-radius);\n      font-weight: $sub-nav-active-font-weight;\n      background: $active-bg;\n      padding: $sub-nav-active-padding;\n      cursor: $sub-nav-active-cursor;\n      color: $sub-nav-active-color;\n      &:hover {\n        background: $active-bg-hover;\n      }\n    }\n    @if $sub-nav-item-divider != \"\" {\n      margin-#{$default-float}: 0;\n\n      &:before {\n        content: \"#{$sub-nav-item-divider}\";\n        margin: 0 $sub-nav-item-divider-margin;\n      }\n\n      &:first-child:before {\n        content: \"\";\n        margin: 0;\n      }\n    }\n  }\n}\n\n@include exports(\"sub-nav\") {\n  @if $include-html-nav-classes {\n    .sub-nav { @include sub-nav; }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_switch.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @name\n// @dependencies _global.scss\n//\n\n//\n// @variables\n//\n\n// NOTE: Switches have been deprecated in Foundation 5 and will be removed in the future.\n\n$include-html-form-classes: $include-html-classes !default;\n\n// Controlling border styles and background colors for the switch container\n$switch-border-color: scale-color(#fff, $lightness: -20%) !default;\n$switch-border-style: solid !default;\n$switch-border-width: 1px !default;\n$switch-bg: #fff !default;\n\n// We use these to control the switch heights for our default classes\n$switch-height-tny: 22px !default;\n$switch-height-sml: 28px !default;\n$switch-height-med: 36px !default;\n$switch-height-lrg: 44px !default;\n$switch-bottom-margin: rem-calc(20) !default;\n\n// We use these to control default font sizes for our classes.\n$switch-font-size-tny: 11px !default;\n$switch-font-size-sml: 12px !default;\n$switch-font-size-med: 14px !default;\n$switch-font-size-lrg: 17px !default;\n$switch-label-side-padding: 6px !default;\n\n// We use these to style the switch-paddle\n$switch-paddle-bg: #fff !default;\n$switch-paddle-fade-to-color: scale-color($switch-paddle-bg, $lightness: -10%) !default;\n$switch-paddle-border-color: scale-color($switch-paddle-bg, $lightness: -35%) !default;\n$switch-paddle-border-width: 1px !default;\n$switch-paddle-border-style: solid !default;\n$switch-paddle-transition-speed: .1s !default;\n$switch-paddle-transition-ease: ease-out !default;\n$switch-positive-color: scale-color($success-color, $lightness: 94%) !default;\n$switch-negative-color: #f5f5f5 !default;\n\n// Outline Style for tabbing through switches\n$switch-label-outline: 1px dotted #888 !default;\n\n\n//\n// @mixins\n//\n\n// We use this mixin to create the base styles for our switch element.\n//\n// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.\n// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.\n@mixin switch-base(\n  $transition-speed:$switch-paddle-transition-speed,\n  $transition-ease:$switch-paddle-transition-ease) {\n\n  // Default position and structure for switch container.\n  position: relative;\n  padding: 0;\n  display: block;\n  overflow: hidden;\n  border-style: $switch-border-style;\n  border-width: $switch-border-width;\n  margin-bottom: $switch-bottom-margin;\n\n  // Default label styles for type and transition\n  label {\n    position: relative;\n    #{$default-float}: 0;\n    z-index: 2;\n    float: $default-float;\n    width: 50%;\n    height: 100%;\n    margin: 0;\n    font-weight: bold;\n    text-align: $default-float;\n\n    // Transition for the switch label to follow paddle\n    @include single-transition(all, $transition-speed, $transition-ease);\n  }\n\n  // So that we don't need to recreate the form with any JS, we use the\n  // existing radio button, but we cleverly position and hide it.\n  input {\n    position: absolute;\n    z-index: 3;\n    opacity: 0;\n    width: 100%;\n    height: 100%;\n    -moz-appearance: none;\n\n    // Hover and focus styles for the paddle\n    &:hover,\n    &:focus {\n      cursor: $cursor-pointer-value;\n    }\n  }\n\n  // The toggle area for radio switches. We call is a paddle.\n  span:last-child {\n    position: absolute;\n    top: -1px;\n    #{$default-float}: -1px;\n    z-index: 1;\n    display: block;\n    padding: 0;\n    border-width: $switch-paddle-border-width;\n    border-style: $switch-paddle-border-style;\n\n    // Transition for the switch paddle\n    @include single-transition(all, $transition-speed, $transition-ease);\n  }\n\n  // When a label isn't :checked, we hide it as it slides away.\n  input:not(:checked) + label { opacity: 0; }\n\n  // Controlling the position of the labels as they are toggled.\n  input:checked { display: none !important; }\n  input { #{$default-float}: 0; display: block !important; }\n\n  // Left Label alignment and position changes, including fixes for while inside a custom form\n  input:first-of-type + label,\n  input:first-of-type + span + label { #{$default-float}: -50%; }\n  input:first-of-type:checked + label,\n  input:first-of-type:checked + span + label { #{$default-float}: 0%; }\n\n  // Right Label alignment and position changes, including fixes for while inside a custom form\n  input:last-of-type + label,\n  input:last-of-type + span + label {#{$opposite-direction}: -50%; #{$default-float}: auto; text-align: $opposite-direction; }\n  input:last-of-type:checked + label,\n  input:last-of-type:checked + span + label { #{$opposite-direction}: 0%; #{$default-float}: auto; }\n\n  // Hiding custom form spans since we auto-create them\n  span.custom { display: none !important; }\n\n  // FIXME We should be able to remove this going forward.\n  // Bugfix for older Webkit, including mobile Webkit. Adapted from:\n  // http://css-tricks.com/webkit-sibling-bug/\n  // @media only screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:480px) {\n  //   @if $experimental { -webkit-animation: webkitSiblingBugfix infinite 1s; }\n  // }\n  // @media only screen and (-webkit-min-device-pixel-ratio:1.5) {\n  //   @if $experimental { -webkit-animation: none 0; }\n  // }\n\n  form.custom & .hidden-field {\n    margin-left: auto;\n    position: absolute;\n    visibility: visible;\n  }\n}\n\n// We use this mixin to create the size styles for switches.\n//\n// $height - Height (in px) of the switch. Default: $switch-height-med.\n// $font-size - Font size of text in switch. Default: $switch-font-size-med.\n// $line-height - Line height of switch. Default: 2.3rem.\n@mixin switch-size(\n  $height: $switch-height-med,\n  $font-size: $switch-font-size-med,\n  $line-height: 2.3rem) {\n\n  height: rem-calc($height);\n\n  label {\n    padding: rem-calc(0, $switch-label-side-padding);\n    line-height: $line-height;\n    font-size: rem-calc($font-size);\n  }\n\n  input {\n    // Move the paddle to the right position\n    &:first-of-type:checked ~ span:last-child {\n      #{$default-float}: 100%;\n      margin-#{$default-float}: rem-calc(-$height + 1px);\n    }\n  }\n\n  span:last-child {\n    width: rem-calc($height);\n    height: rem-calc($height);\n  }\n\n}\n\n// We use this mixin to add color and other fanciness to the switches.\n//\n// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.\n// $positive-color - Background color of positive side of switch. Default: $switch-positive-color.\n// $negative-color - Background color of negative side of switch. Default: $switch-negative-color.\n// $radius - Radius to apply to switch. Default: false.\n// $base-style - Apply base styles? Default: true.\n@mixin switch-style(\n  $paddle-bg:$switch-paddle-bg,\n  $positive-color:$switch-positive-color,\n  $negative-color:$switch-negative-color,\n  $radius:false,\n  $base-style:true) {\n\n  @if $base-style {\n    background: $switch-bg;\n    border-color: $switch-border-color;\n\n    span:last-child {\n      border-color: scale-color($paddle-bg, $lightness: -30%);\n      background: $paddle-bg;\n      @if $experimental {\n        background: -moz-linear-gradient(top, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -5%) 100%);\n        background: -webkit-linear-gradient(top, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -5%) 100%);\n      }\n      background: linear-gradient(to bottom, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -5%) 100%);\n\n      // Building the alternating colored sides of the switch\n      @if $experimental {\n        -webkit-box-shadow: 2px 0 10px 0 rgba(0,0,0,0.07),\n                            1000px 0 0 1000px $positive-color,\n                            -2px 0 10px 0 rgba(0,0,0,0.07),\n                            -1000px 0 0 1000px $negative-color;\n      }\n      box-shadow:         2px 0 10px 0 rgba(0,0,0,0.07),\n                          1000px 0 0 980px $positive-color,\n                          -2px 0 10px 0 rgba(0,0,0,0.07),\n                          -1000px 0 0 1000px $negative-color;\n    }\n\n    &:hover,\n    &:focus {\n      span:last-child {\n        background: $paddle-bg;\n        @if $experimental {\n          background: -moz-linear-gradient(top, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -10%) 100%);\n          background: -webkit-linear-gradient(top, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -10%) 100%);\n        }\n        background: linear-gradient(to bottom, $paddle-bg 0%, scale-color($paddle-bg, $lightness: -10%) 100%);\n      }\n    }\n\n    &:active { background: transparent; }\n  }\n\n  // Setting up the radius for switches\n  @if $radius == true {\n    @include radius(4px);\n    span:last-child { @include radius(3px); }\n  }\n  @else if $radius {\n    @include radius($radius);\n    span:last-child { @include radius($radius - 1px); }\n  }\n\n}\n\n// We use this to quickly create switches with a single mixin\n//\n// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.\n// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.\n// $height - Height (in px) of the switch. Default: $switch-height-med.\n// $font-size - Font size of text in switch. Default: $switch-font-size-med.\n// $line-height - Line height of switch. Default: 2.3rem.\n// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.\n// $positive-color - Background color of positive side of switch. Default: $switch-positive-color.\n// $negative-color - Background color of negative side of switch. Default: $switch-negative-color.\n// $radius - Radius to apply to switch. Default: false.\n// $base-style - Apply base styles? Default: true.\n@mixin switch(\n  $transition-speed: $switch-paddle-transition-speed,\n  $transition-ease: $switch-paddle-transition-ease,\n  $height: $switch-height-med,\n  $font-size: $switch-font-size-med,\n  $line-height: 2.3rem,\n  $paddle-bg: $switch-paddle-bg,\n  $positive-color: $switch-positive-color,\n  $negative-color: $switch-negative-color,\n  $radius:false,\n  $base-style:true) {\n    @include switch-base($transition-speed, $transition-ease);\n    @include switch-size($height, $font-size, $line-height);\n    @include switch-style($paddle-bg, $positive-color, $negative-color, $radius, $base-style);\n}\n\n@include exports(\"switch\") {\n  @if $include-html-form-classes {\n      div.switch {\n        @include switch;\n\n        // Large radio switches\n        &.large { @include switch-size($switch-height-lrg, $switch-font-size-lrg); }\n\n        // Small radio switches\n        &.small { @include switch-size($switch-height-sml, $switch-font-size-sml, 2.1rem); }\n\n        // Tiny radio switches\n        &.tiny { @include switch-size($switch-height-tny, $switch-font-size-tny, 1.9rem); }\n\n        // Add a radius to the switch\n        &.radius { @include radius(4px);\n          span:last-child{ @include radius(3px); }\n        }\n\n        // Make the switch completely round, like a pill\n        &.round { @include radius(1000px);\n          span:last-child { @include radius(999px); }\n          label { padding: rem-calc(0 $switch-label-side-padding + 3); }\n        }\n\n      }\n\n      @if $experimental { @-webkit-keyframes webkitSiblingBugfix { from { position: relative; } to { position: relative; } } }\n  }\n}"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_switches.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @name\n// @dependencies _global.scss\n//\n\n//\n// @variables\n//\n\n$include-html-form-classes: $include-html-classes !default;\n\n// Controlling background color for the switch container\n$switch-bg: $gainsboro !default;\n\n// We use these to control the switch heights for our default classes\n$switch-height-tny: 1.5rem !default;\n$switch-height-sml: 1.75rem !default;\n$switch-height-med: 2rem !default;\n$switch-height-lrg: 2.5rem !default;\n$switch-bottom-margin: 1.5rem !default;\n\n// We use these to style the switch-paddle\n$switch-paddle-bg: $white !default;\n$switch-paddle-transition-speed: .15s !default;\n$switch-paddle-transition-ease: ease-out !default;\n$switch-active-color: $primary-color !default;\n\n\n//\n// @mixins\n//\n\n// We use this mixin to create the base styles for our switch element.\n//\n// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.\n// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.\n@mixin switch-base(\n  $transition-speed:$switch-paddle-transition-speed,\n  $transition-ease:$switch-paddle-transition-ease) {\n\n  padding: 0;\n  border: none;\n  position: relative;\n  outline: 0;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n\n  // Default label styles for type and transition\n  label {\n    display: block;\n    margin-bottom: ($switch-height-med / 2);\n    position: relative;\n    color: transparent;\n    background: $switch-bg;\n    text-indent: 100%;\n    width: $switch-height-med * 2; height: $switch-height-med;\n    cursor: pointer;\n\n    // Transition for the switch label to follow paddle\n    @include single-transition(left, $transition-speed, $transition-ease);\n  }\n\n  // So that we don't need to recreate the form with any JS, we use the\n  // existing checkbox or radio button, but we cleverly position and hide it.\n  input {\n    opacity: 0;\n    position: absolute;\n    top: 9px;\n    left: 10px;\n    padding:0;\n\n    & + label { margin-left: 0; margin-right: 0; }\n  }\n\n  // The paddle for the switch is created from an after psuedoclass\n  // content element. This is sized and positioned, and reacts to\n  // the state of the input.\n\n  label:after {\n    content: \"\";\n    display: block;\n    background: $switch-paddle-bg;\n    position: absolute;\n    top: .25rem;\n    left: .25rem;\n    width: $switch-height-med - 0.5rem;\n    height: $switch-height-med - 0.5rem;\n\n    -webkit-transition: left $transition-speed $transition-ease;\n    -moz-transition: left $transition-speed $transition-ease;\n    -o-transition: translate3d(0,0,0);\n    transition: left $transition-speed $transition-ease;\n\n    -webkit-transform: translate3d(0,0,0);\n    -moz-transform: translate3d(0,0,0);\n    -o-transform: translate3d(0,0,0);\n    transform: translate3d(0,0,0);\n  }\n\n  input:checked + label {\n    background: $switch-active-color;\n  }\n\n  input:checked + label:after {\n    left: $switch-height-med + 0.25rem;\n  }\n}\n\n// We use this mixin to create the size styles for switches.\n//\n// $height - Height (in px) of the switch. Default: $switch-height-med.\n// $font-size - Font size of text in switch. Default: $switch-font-size-med.\n// $line-height - Line height of switch. Default: 2.3rem.\n@mixin switch-size($height: $switch-height-med) {\n\n  label {\n    width: $height * 2;\n    height: $height;\n  }\n\n  label:after {\n    width: $height - 0.5rem;\n    height: $height - 0.5rem;\n  }\n\n  input:checked + label:after {\n    left: $height + 0.25rem;\n  }\n\n}\n\n// We use this mixin to add color and other fanciness to the switches.\n//\n// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.\n// $active-color - Background color of positive side of switch. Default: $switch-positive-color.\n// $negative-color - Background color of negative side of switch. Default: $switch-negative-color.\n// $radius - Radius to apply to switch. Default: false.\n// $base-style - Apply base styles? Default: true.\n@mixin switch-style(\n  $paddle-bg:$switch-paddle-bg,\n  $radius:false,\n  $base-style:true) {\n\n  @if $base-style {\n\n    label {\n      color: transparent;\n      background: $switch-bg;\n    }\n\n    label:after {\n      background: $paddle-bg;\n    }\n\n    input:checked + label {\n      background: $switch-active-color;\n    }\n  }\n\n  // Setting up the radius for switches\n  @if $radius == true {\n    label {\n      border-radius: 2rem;\n    }\n    label:after {\n      border-radius: 2rem;\n    }\n  }\n  @else if $radius {\n    label {\n      border-radius: $radius;\n    }\n    label:after {\n      border-radius: $radius;\n    }\n  }\n\n}\n\n// We use this to quickly create switches with a single mixin\n//\n// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.\n// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.\n// $height - Height (in px) of the switch. Default: $switch-height-med.\n// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.\n// $active-color - Background color of an active switch. Default: $switch-active-color.\n// $radius - Radius to apply to switch. Default: false.\n// $base-style - Apply base styles? Default: true.\n@mixin switch(\n  $transition-speed: $switch-paddle-transition-speed,\n  $transition-ease: $switch-paddle-transition-ease,\n  $height: $switch-height-med,\n  $paddle-bg: $switch-paddle-bg,\n  $active-color: $switch-active-color,\n  $radius:false,\n  $base-style:true) {\n    @include switch-base($transition-speed, $transition-ease);\n    @include switch-size($height);\n    @include switch-style($paddle-bg, $radius, $base-style);\n}\n\n@include exports(\"switch\") {\n  @if $include-html-form-classes {\n      .switch {\n        @include switch;\n\n        // Large radio switches\n        &.large { @include switch-size($switch-height-lrg); }\n\n        // Small radio switches\n        &.small { @include switch-size($switch-height-sml); }\n\n        // Tiny radio switches\n        &.tiny { @include switch-size($switch-height-tny); }\n\n        // Add a radius to the switch\n        &.radius {\n          label { @include radius(4px); }\n          label:after { @include radius(3px); }\n        }\n\n        // Make the switch completely round, like a pill\n        &.round { @include radius(1000px);\n          label { @include radius(2rem); }\n          label:after { @include radius(2rem); }\n        }\n\n      }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_tables.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// @name _tables.scss\n// @dependencies _global.scss\n//\n\n//\n// @variables\n//\n\n$include-html-table-classes: $include-html-classes !default;\n\n// These control the background color for the table and even rows\n$table-bg: $white !default;\n$table-even-row-bg: $snow !default;\n\n// These control the table cell border style\n$table-border-style: solid !default;\n$table-border-size: 1px !default;\n$table-border-color: $gainsboro !default;\n\n// These control the table head styles\n$table-head-bg: $white-smoke !default;\n$table-head-font-size: rem-calc(14) !default;\n$table-head-font-color: $jet !default;\n$table-head-font-weight: $font-weight-bold !default;\n$table-head-padding: rem-calc(8 10 10) !default;\n\n// These control the table foot styles\n$table-foot-bg: $table-head-bg !default;\n$table-foot-font-size: $table-head-font-size !default;\n$table-foot-font-color: $table-head-font-color !default;\n$table-foot-font-weight: $table-head-font-weight !default;\n$table-foot-padding: $table-head-padding !default;\n\n// These control the caption\n$table-caption-bg: transparent !default;\n$table-caption-font-color: $table-head-font-color !default;\n$table-caption-font-size: rem-calc(16) !default;\n$table-caption-font-weight: bold !default;\n\n// These control the row padding and font styles\n$table-row-padding: rem-calc(9 10) !default;\n$table-row-font-size: rem-calc(14) !default;\n$table-row-font-color: $jet !default;\n$table-line-height: rem-calc(18) !default;\n\n// These are for controlling the layout, display and margin of tables\n$table-layout: auto !default;\n$table-display: table-cell !default;\n$table-margin-bottom: rem-calc(20) !default;\n\n\n//\n// @mixins\n//\n\n@mixin table {\n  background: $table-bg;\n  margin-bottom: $table-margin-bottom;\n  border: $table-border-style $table-border-size $table-border-color;\n  table-layout: $table-layout;\n\n  caption {\n    background: $table-caption-bg;\n    color: $table-caption-font-color;\n    font: {\n      size: $table-caption-font-size;\n      weight: $table-caption-font-weight;\n    }\n  }\n\n  thead {\n    background: $table-head-bg;\n\n    tr {\n      th,\n      td {\n        padding: $table-head-padding;\n        font-size: $table-head-font-size;\n        font-weight: $table-head-font-weight;\n        color: $table-head-font-color;\n      }\n    }\n  }\n\n  tfoot {\n    background: $table-foot-bg;\n\n    tr {\n      th,\n      td {\n        padding: $table-foot-padding;\n        font-size: $table-foot-font-size;\n        font-weight: $table-foot-font-weight;\n        color: $table-foot-font-color;\n      }\n    }\n  }\n\n  tr {\n    th,\n    td {\n      padding: $table-row-padding;\n      font-size: $table-row-font-size;\n      color: $table-row-font-color;\n      text-align: $default-float;\n    }\n\n    &.even,\n    &.alt,\n    &:nth-of-type(even) { background: $table-even-row-bg; }\n  }\n\n  thead tr th,\n  tfoot tr th,\n  tfoot tr td,\n  tbody tr th,\n  tbody tr td,\n  tr td { display: $table-display; line-height: $table-line-height; }\n}\n\n\n@include exports(\"table\") {\n  @if $include-html-table-classes {\n    table {\n      @include table;\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_tabs.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n@import \"grid\";\n\n//\n// @variables\n//\n\n$include-html-tabs-classes: $include-html-classes !default;\n\n$tabs-navigation-padding: rem-calc(16) !default;\n$tabs-navigation-bg-color: $silver !default;\n$tabs-navigation-active-bg-color: $white !default;\n$tabs-navigation-hover-bg-color: scale-color($tabs-navigation-bg-color, $lightness: -6%) !default;\n$tabs-navigation-font-color: $jet !default;\n$tabs-navigation-active-font-color: $tabs-navigation-font-color !default;\n$tabs-navigation-font-size: rem-calc(16) !default;\n$tabs-navigation-font-family: $body-font-family !default;\n\n$tabs-content-margin-bottom: rem-calc(24) !default;\n$tabs-content-padding: ($column-gutter/2) !default;\n\n$tabs-vertical-navigation-margin-bottom: 1.25rem !default;\n\n@include exports(\"tab\") {\n  @if $include-html-tabs-classes {\n    .tabs {\n      @include clearfix;\n      margin-bottom: 0 !important;\n      margin-left: 0;\n      dd, .tab-title {\n        position: relative;\n        margin-bottom: 0 !important;\n        list-style: none;\n        float: $default-float;\n        > a {\n          outline: none;\n          display: block;\n          background: {\n            color: $tabs-navigation-bg-color;\n          }\n          color: $tabs-navigation-font-color;\n          padding: $tabs-navigation-padding $tabs-navigation-padding * 2;\n          font-family: $tabs-navigation-font-family;\n          font-size: $tabs-navigation-font-size;\n          &:hover {\n            background: {\n              color: $tabs-navigation-hover-bg-color;\n            }\n          }\n        }\n        &.active a {\n          background: {\n            color: $tabs-navigation-active-bg-color;\n          }\n          color:$tabs-navigation-active-font-color;\n          }\n      }\n      &.radius {\n        dd:first-child, .tab:first-child {\n          a { @include side-radius($default-float, $global-radius); }\n        }\n        dd:last-child, .tab:last-child {\n          a { @include side-radius($opposite-direction, $global-radius); }\n        }\n      }\n      &.vertical {\n        dd, .tab-title {\n          position: inherit;\n          float: none;\n          display: block;\n          top: auto;\n        }\n      }\n    }\n\n    .tabs-content {\n      @include clearfix;\n      margin-bottom: $tabs-content-margin-bottom;\n      width: 100%;\n      > .content {\n        display: none;\n        float: $default-float;\n        padding: $tabs-content-padding 0;\n        width: 100%;\n        &.active { display: block; float: none; }\n        &.contained { padding: $tabs-content-padding; }\n      }\n      &.vertical {\n        display: block;\n        > .content { padding: 0 $tabs-content-padding; }\n      }\n    }\n    @media #{$medium-up} {\n      .tabs {\n        &.vertical {\n          width: 20%;\n          max-width: 20%;\n          float: $default-float;\n          margin: 0 0 $tabs-vertical-navigation-margin-bottom;\n        }\n      }\n      .tabs-content {\n        &.vertical {\n          width: 80%;\n          max-width: 80%;\n          float: $default-float;\n          margin-#{$default-float}: -1px;\n          padding-#{$default-float}: 1rem;\n        }\n      }\n    }\n    .no-js {\n      .tabs-content > .content {\n        display: block;\n        float: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_toolbar.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n// toolbar styles\n\n.toolbar {\n\tbackground: $oil;\n\twidth: 100%;\n\tfont-size: 0;\n\tdisplay: inline-block;\n\n\t&.label-bottom .tab .tab-content {\n\t\ti, img { margin-bottom: 10px; }\n\t}\n\n\t&.label-right .tab .tab-content {\n\t\ti, img { margin-right: 10px; display: inline-block;}\n\t\tlabel { display: inline-block; }\n\t}\n\n\t&.vertical.label-right .tab .tab-content {\n\t\ttext-align: left;\n\t}\n\n\t&.vertical {\n\t\theight: 100%;\n\t\twidth: auto;\n\n\t\t.tab {\n\t\t\twidth: auto;\n\t\t\tmargin: auto;\n\t\t\tfloat: none;\n\t\t}\n\t}\n\t\n\t.tab {\n\t\ttext-align: center;\n\t\twidth: 25%;\n\t\tmargin: 0 auto;\n\t\tdisplay: block;\n\t\tpadding: 20px;\n\t\tfloat: left;\n\n\t\t&:hover {\n\t\t\tbackground: rgba($white, 0.1);\n\t\t}\n\t}\n}\t\t\n\t\t\n.toolbar .tab-content {\n\tfont-size: 16px;\n\ttext-align: center;\n\n\tlabel { color: $iron; }\n\n\ti {\n\t\tfont-size: 30px;\n\t\tdisplay: block;\n\t\tmargin: 0 auto;\n\t\tcolor: $iron;\n\t\tvertical-align: middle;\n\t}\n\n\timg {\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tdisplay: block;\n\t\tmargin: 0 auto;\n\t}\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_top-bar.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n@import \"grid\";\n@import \"buttons\";\n@import \"forms\";\n\n//\n// Top Bar Variables\n//\n$include-html-top-bar-classes: $include-html-classes !default;\n\n// Background color for the top bar\n$topbar-bg-color: $oil !default;\n$topbar-bg: $topbar-bg-color !default;\n\n// Height and margin\n$topbar-height: 45px !default;\n$topbar-margin-bottom: 0 !default;\n\n// Controlling the styles for the title in the top bar\n$topbar-title-weight: $font-weight-normal !default;\n$topbar-title-font-size: rem-calc(17) !default;\n\n// Set the link colors and styles for top-level nav\n$topbar-link-color: $white !default;\n$topbar-link-color-hover: $white !default;\n$topbar-link-color-active: $white !default;\n$topbar-link-color-active-hover: $white !default;\n$topbar-link-weight: $font-weight-normal !default;\n$topbar-link-font-size: rem-calc(13) !default;\n$topbar-link-hover-lightness: -10% !default; // Darken by 10%\n$topbar-link-bg: $topbar-bg !default;\n$topbar-link-bg-hover: $oil !default;\n$topbar-link-bg-color-hover: $charcoal !default;\n$topbar-link-bg-active: $primary-color !default;\n$topbar-link-bg-active-hover: scale-color($primary-color, $lightness: -14%) !default;\n$topbar-link-font-family: $body-font-family !default;\n$topbar-link-text-transform: none !default;\n$topbar-link-padding: ($topbar-height / 3) !default;\n$topbar-back-link-size: rem-calc(18) !default;\n$topbar-link-dropdown-padding: 20px !default;\n$topbar-button-font-size: 0.75rem !default;\n$topbar-button-top: 7px !default;\n\n// Style the top bar dropdown elements\n$topbar-dropdown-bg: $oil !default;\n$topbar-dropdown-link-color: $white !default;\n$topbar-dropdown-link-color-hover: $topbar-link-color-hover !default;\n$topbar-dropdown-link-bg: $oil !default;\n$topbar-dropdown-link-bg-hover: $oil !default;\n$topbar-dropdown-link-weight: $font-weight-normal !default;\n$topbar-dropdown-toggle-size: 5px !default;\n$topbar-dropdown-toggle-color: $white !default;\n$topbar-dropdown-toggle-alpha: 0.4 !default;\n\n$topbar-dropdown-label-color: $monsoon !default;\n$topbar-dropdown-label-text-transform: uppercase !default;\n$topbar-dropdown-label-font-weight: $font-weight-bold !default;\n$topbar-dropdown-label-font-size: rem-calc(10) !default;\n$topbar-dropdown-label-bg: $oil !default;\n\n// Top menu icon styles\n$topbar-menu-link-transform: uppercase !default;\n$topbar-menu-link-font-size: rem-calc(13) !default;\n$topbar-menu-link-weight: $font-weight-bold !default;\n$topbar-menu-link-color: $white !default;\n$topbar-menu-icon-color: $white !default;\n$topbar-menu-link-color-toggled: $jumbo !default;\n$topbar-menu-icon-color-toggled: $jumbo !default;\n\n// Transitions and breakpoint styles\n$topbar-transition-speed: 300ms !default;\n// Using rem-calc for the below breakpoint causes issues with top bar\n$topbar-breakpoint: #{lower-bound($medium-range)} !default; // Change to 9999px for always mobile layout\n$topbar-media-query: $medium-up !default;\n\n// Divider Styles\n$topbar-divider-border-bottom: solid 1px scale-color($topbar-bg-color, $lightness: 13%) !default;\n$topbar-divider-border-top: solid 1px scale-color($topbar-bg-color, $lightness: -50%) !default;\n\n// Sticky Class\n$topbar-sticky-class: \".sticky\" !default;\n$topbar-arrows: true !default; //Set false to remove the triangle icon from the menu item\n$topbar-dropdown-arrows: true !default; //Set false to remove the \\00bb >> text from dropdown subnavigation li\n\n// Accessibility mixins for hiding and showing the menu dropdown items\n@mixin topbar-hide-dropdown {\n  // Makes an element visually hidden by default, but visible when focused.\n  display: block;\n  @include element-invisible();\n}\n\n@mixin topbar-show-dropdown {\n  display: block;\n  @include element-invisible-off();\n  position: absolute !important; // Reset the position from static to absolute\n}\n\n@include exports(\"top-bar\") {\n\n  @if $include-html-top-bar-classes {\n\n    // Used to provide media query values for javascript components.\n    // This class is generated despite the value of $include-html-top-bar-classes\n    // to ensure width calculations work correctly.\n    meta.foundation-mq-topbar {\n      font-family: \"/\" + unquote($topbar-media-query) + \"/\";\n      width: $topbar-breakpoint;\n    }\n\n    /* Wrapped around .top-bar to contain to grid width */\n    .contain-to-grid {\n      width: 100%;\n      background: $topbar-bg;\n\n      .top-bar { margin-bottom: $topbar-margin-bottom; }\n    }\n\n    // Wrapped around .top-bar to make it stick to the top\n    .fixed {\n      width: 100%;\n      #{$default-float}: 0;\n      position: fixed;\n      top: 0;\n      z-index: 99;\n\n      &.expanded:not(.top-bar) {\n        overflow-y: auto;\n        height: auto;\n        width: 100%;\n        max-height: 100%;\n\n        .title-area {\n          position: fixed;\n          width: 100%;\n          z-index: 99;\n        }\n        // Ensure you can scroll the menu on small screens\n        .top-bar-section {\n          z-index: 98;\n          margin-top: $topbar-height;\n        }\n      }\n    }\n\n    .top-bar {\n      overflow: hidden;\n      height: $topbar-height;\n      line-height: $topbar-height;\n      position: relative;\n      background: $topbar-bg;\n      margin-bottom: $topbar-margin-bottom;\n\n      // Topbar Global list Styles\n      ul {\n        margin-bottom: 0;\n        list-style: none;\n      }\n\n      .row { max-width: none; }\n\n      form,\n      input { margin-bottom: 0; }\n\n      input { height: 1.8rem; padding-top: .35rem; padding-bottom: .35rem; font-size: $topbar-button-font-size; }\n\n      .button, button {\n        padding-top: .35rem + rem-calc(1);\n        padding-bottom: .35rem + rem-calc(1);\n        margin-bottom: 0;\n        font-size: $topbar-button-font-size;\n        // position: relative;\n        // top: -1px;\n\n        // Corrects a slight misalignment when put next to an input field\n        @media #{$small-only} {\n          position: relative;\n          top: -1px;\n        }\n      }\n\n      // Title Area\n      .title-area {\n        position: relative;\n        margin: 0;\n      }\n\n      .name {\n        height: $topbar-height;\n        margin: 0;\n        font-size: $rem-base;\n\n        h1, h2, h3, h4, p, span {\n          line-height: $topbar-height;\n          font-size: $topbar-title-font-size;\n          margin: 0;\n          a {\n            font-weight: $topbar-title-weight;\n            color: $topbar-link-color;\n            width: 75%;\n            display: block;\n            padding: 0 $topbar-link-padding;\n          }\n        }\n      }\n\n      // Menu toggle button on small devices\n      .toggle-topbar {\n        position: absolute;\n        #{$opposite-direction}: 0;\n        top: 0;\n\n        a {\n          color: $topbar-link-color;\n          text-transform: $topbar-menu-link-transform;\n          font-size: $topbar-menu-link-font-size;\n          font-weight: $topbar-menu-link-weight;\n          position: relative;\n          display: block;\n          padding: 0 $topbar-link-padding;\n          height: $topbar-height;\n          line-height: $topbar-height;\n        }\n\n        // Adding the class \"menu-icon\" will add the 3-line icon people love and adore.\n        &.menu-icon {\n          top: 50%;\n          margin-top: -16px;\n\n          a {\n            @if $text-direction == rtl {\n              text-indent: -58px;\n            }\n            height: 34px;\n            line-height: 33px;\n            padding: 0 $topbar-link-padding+25 0 $topbar-link-padding;\n            color: $topbar-menu-link-color;\n            position: relative;\n\n            & {\n              // @include hamburger icon\n              //\n              // We use this to create the icon with three lines aka the hamburger icon, the menu-icon or the navicon\n              // $width - Width of hamburger icon\n              // $left - If false, icon will be centered horizontally || explicitly set value in rem\n              // $top - If false, icon will be centered vertically || explicitly set value in rem\n              // $thickness - thickness of lines in hamburger icon, set value in px\n              // $gap - spacing between the lines in hamburger icon, set value in px\n              // $color - icon color\n              // $hover-color - icon color during hover, here it isn't set b/c it would override $topbar-menu-icon-color-toggled\n              // $offcanvas - Set to false of @include in topbar\n              @include hamburger(16px, false, 0, 1px, 6px, $topbar-menu-icon-color, \"\", false);\n            }\n          }\n        }\n      }\n\n      // Change things up when the top-bar is expanded\n      &.expanded {\n        height: auto;\n        background: transparent;\n\n        .title-area { background: $topbar-bg; }\n\n        .toggle-topbar {\n          a { color: $topbar-menu-link-color-toggled;\n\t\t\tspan::after {\n              // Shh, don't tell, but box-shadows create the menu icon :)\n              // Change the color of the bars when the menu is expanded, using given thickness from hamburger() above\n              box-shadow: 0 0 0 1px $topbar-menu-icon-color-toggled,\n                          0 7px 0 1px $topbar-menu-icon-color-toggled,\n                          0 14px 0 1px $topbar-menu-icon-color-toggled;\n            }\n          }\n        }\n      }\n    }\n\n    // Right and Left Navigation that stacked by default\n    .top-bar-section {\n      #{$default-float}: 0;\n      position: relative;\n      width: auto;\n      @include single-transition($default-float, $topbar-transition-speed);\n\n      ul {\n        padding: 0;\n        width: 100%;\n        height: auto;\n        display: block;\n        font-size: $rem-base;\n        margin: 0;\n      }\n\n      .divider,\n      [role=\"separator\"] {\n        border-top: $topbar-divider-border-top;\n        clear: both;\n        height: 1px;\n        width: 100%;\n      }\n\n      ul li {\n        background: $topbar-dropdown-bg;\n        & > a {\n          display: block;\n          width: 100%;\n          color: $topbar-link-color;\n          padding: 12px 0 12px 0;\n          padding-#{$default-float}: $topbar-link-padding;\n          font-family: $topbar-link-font-family;\n          font-size: $topbar-link-font-size;\n          font-weight: $topbar-link-weight;\n          text-transform: $topbar-link-text-transform;\n\n          &.button {\n            font-size: $topbar-link-font-size;\n            padding-#{$opposite-direction}: $topbar-link-padding;\n            padding-#{$default-float}: $topbar-link-padding;\n            @include button-style($bg:$primary-color);\n          }\n          &.button.secondary { @include button-style($bg:$secondary-color); }\n          &.button.success { @include button-style($bg:$success-color); }\n          &.button.alert { @include button-style($bg:$alert-color); }\n          &.button.warning { @include button-style($bg:$warning-color); }\n        }\n\n        > button {\n          font-size: $topbar-link-font-size;\n          padding-#{$opposite-direction}: $topbar-link-padding;\n          padding-#{$default-float}: $topbar-link-padding;\n          @include button-style($bg:$primary-color);\n\n          &.secondary { @include button-style($bg:$secondary-color); }\n          &.success { @include button-style($bg:$success-color); }\n          &.alert { @include button-style($bg:$alert-color); }\n          &.warning { @include button-style($bg:$warning-color); }\n        }\n\n        // Apply the hover link color when it has that class\n        &:hover:not(.has-form) > a {\n          background-color: $topbar-link-bg-color-hover;\n          @if ($topbar-link-bg-hover) {\n            background: $topbar-link-bg-hover;\n          }\n          color: $topbar-link-color-hover;\n        }\n\n        // Apply the active link color when it has that class\n        &.active > a {\n          background: $topbar-link-bg-active;\n          color: $topbar-link-color-active;\n          &:hover {\n            background: $topbar-link-bg-active-hover;\n            color: $topbar-link-color-active-hover;\n          }\n        }\n      }\n\n      // Add some extra padding for list items contains buttons\n      .has-form { padding: $topbar-link-padding; }\n\n      // Styling for list items that have a dropdown within them.\n      .has-dropdown {\n        position: relative;\n\n        & > a {\n          &:after {\n            @if ($topbar-arrows){\n              @include css-triangle($topbar-dropdown-toggle-size, rgba($topbar-dropdown-toggle-color, $topbar-dropdown-toggle-alpha), $default-float);\n            }\n            margin-#{$opposite-direction}: $topbar-link-padding;\n            margin-top: -($topbar-dropdown-toggle-size / 2) - 2;\n            position: absolute;\n            top: 50%;\n            #{$opposite-direction}: 0;\n          }\n        }\n\n        &.moved { position: static;\n          & > .dropdown {\n            @include topbar-show-dropdown();\n            width: 100%;\n          }\n          & > a:after {\n            display: none;\n          }\n        }\n      }\n\n      // Styling elements inside of dropdowns\n      .dropdown {\n        padding: 0;\n        position: absolute;\n        #{$default-float}: 100%;\n        top: 0;\n        z-index: 99;\n        @include topbar-hide-dropdown();\n\n        li {\n          width: 100%;\n          height: auto;\n\n          a {\n            font-weight: $topbar-dropdown-link-weight;\n            padding: 8px $topbar-link-padding;\n            &.parent-link {\n              font-weight: $topbar-link-weight;\n            }\n          }\n\n          &.title h5, &.parent-link {\n            // Back Button\n            margin-bottom: 0;\n            margin-top: 0;\n            font-size: $topbar-back-link-size;\n            a {\n              color: $topbar-link-color;\n              // line-height: ($topbar-height / 2);\n              display: block;\n              &:hover { background:none; }\n            }\n          }\n          &.has-form { padding: 8px $topbar-link-padding; }\n          .button, button { top: auto; }\n        }\n\n        label {\n          padding: 8px $topbar-link-padding 2px;\n          margin-bottom: 0;\n          text-transform: $topbar-dropdown-label-text-transform;\n          color: $topbar-dropdown-label-color;\n          font-weight: $topbar-dropdown-label-font-weight;\n          font-size: $topbar-dropdown-label-font-size;\n        }\n      }\n    }\n\n    .js-generated { display: block; }\n\n\n    // Top Bar styles intended for screen sizes above the breakpoint.\n    @media #{$topbar-media-query} {\n      .top-bar {\n        background: $topbar-bg;\n        @include clearfix;\n        overflow: visible;\n\n        .toggle-topbar { display: none; }\n\n        .title-area { float: $default-float; }\n        .name h1 a { width: auto; }\n\n        input,\n        .button,\n        button {\n          font-size: rem-calc(14);\n          position: relative;\n          top: $topbar-button-top;\n        }\n\n        &.expanded { background: $topbar-bg; }\n      }\n\n      .contain-to-grid .top-bar {\n        max-width: $row-width;\n        margin: 0 auto;\n        margin-bottom: $topbar-margin-bottom;\n      }\n\n      .top-bar-section {\n        @include single-transition(none,0,0);\n        #{$default-float}: 0 !important;\n\n        ul {\n          width: auto;\n          height: auto !important;\n          display: inline;\n\n          li {\n            float: $default-float;\n            .js-generated { display: none; }\n          }\n        }\n\n        li {\n          &.hover {\n            > a:not(.button) {\n              background-color: $topbar-link-bg-color-hover;\n              @if ($topbar-link-bg-hover) {\n                background: $topbar-link-bg-hover;\n              }\n              color: $topbar-link-color-hover;\n            }\n          }\n          &:not(.has-form) {\n            a:not(.button) {\n              padding: 0 $topbar-link-padding;\n              line-height: $topbar-height;\n              background: $topbar-link-bg;\n              &:hover {\n                background-color: $topbar-link-bg-color-hover;\n                @if ($topbar-link-bg-hover) {\n                  background: $topbar-link-bg-hover;\n                }\n              }\n            }\n          }\n          &.active:not(.has-form) {\n            a:not(.button) {\n              padding: 0 $topbar-link-padding;\n              line-height: $topbar-height;\n              color: $topbar-link-color-active;\n              background: $topbar-link-bg-active;\n              &:hover {\n                background: $topbar-link-bg-active-hover;\n                color: $topbar-link-color-active-hover;\n              }\n            }\n          }\n        }\n\n        .has-dropdown {\n          @if($topbar-arrows){\n            & > a {\n              padding-#{$opposite-direction}: $topbar-link-padding + $topbar-link-dropdown-padding !important;\n              &:after {\n                @include css-triangle($topbar-dropdown-toggle-size, rgba($topbar-dropdown-toggle-color, $topbar-dropdown-toggle-alpha), top);\n                margin-top: -($topbar-dropdown-toggle-size / 2);\n                top: ($topbar-height / 2);\n              }\n            }\n          }\n\n          &.moved { position: relative;\n            & > .dropdown {\n              @include topbar-hide-dropdown();\n            }\n          }\n\n          &.hover, &.not-click:hover {\n            & > .dropdown {\n              @include topbar-show-dropdown();\n            }\n          }\n          > a:focus + .dropdown {\n            @include topbar-show-dropdown();\n          }\n\n          .dropdown li.has-dropdown {\n            & > a {\n              @if ($topbar-dropdown-arrows){\n                &:after {\n                  border: none;\n                  content: \"\\00bb\";\n                  top: 1rem;\n                  margin-top: -1px;\n                  #{$opposite-direction}: 5px;\n                  line-height: 1.2;\n                }\n              }\n            }\n          }\n        }\n\n        .dropdown {\n          #{$default-float}: 0;\n          top: auto;\n          background: transparent;\n          min-width: 100%;\n\n          li {\n            a {\n              color: $topbar-dropdown-link-color;\n              line-height: $topbar-height;\n              white-space: nowrap;\n              padding: 12px $topbar-link-padding;\n              background: $topbar-dropdown-link-bg;\n            }\n\n            &:not(.has-form):not(.active) {\n              & > a:not(.button) {\n                color: $topbar-dropdown-link-color;\n                background: $topbar-dropdown-link-bg;\n              }\n\n              &:hover > a:not(.button) {\n                color: $topbar-dropdown-link-color-hover;\n                background-color: $topbar-link-bg-color-hover;\n                @if ($topbar-dropdown-link-bg-hover) {\n                  background: $topbar-dropdown-link-bg-hover;\n                }\n              }\n            }\n\n            label {\n              white-space: nowrap;\n              background: $topbar-dropdown-label-bg;\n            }\n\n            // Second Level Dropdowns\n            .dropdown {\n              #{$default-float}: 100%;\n              top: 0;\n            }\n          }\n        }\n\n        & > ul > .divider,\n        & > ul > [role=\"separator\"] {\n          border-bottom: none;\n          border-top: none;\n          border-#{$opposite-direction}: $topbar-divider-border-bottom;\n          clear: none;\n          height: $topbar-height;\n          width: 0;\n        }\n\n        .has-form {\n          background: $topbar-link-bg;\n          padding: 0 ($topbar-height / 3);\n          height: $topbar-height;\n        }\n\n        // Position overrides for ul.right and ul.left\n        .#{$opposite-direction} {\n          li .dropdown {\n            #{$default-float}: auto;\n            #{$opposite-direction}: 0;\n\n            li .dropdown { #{$opposite-direction}: 100%; }\n          }\n        }\n        .#{$default-float} {\n          li .dropdown {\n            #{$opposite-direction}: auto;\n            #{$default-float}: 0;\n\n            li .dropdown { #{$default-float}: 100%; }\n          }\n        }\n      }\n\n      // Degrade gracefully when Javascript is disabled. Displays dropdown and changes\n      // background & text color on hover.\n      .no-js .top-bar-section {\n        ul li {\n          // Apply the hover link color when it has that class\n          &:hover > a {\n            background-color: $topbar-link-bg-color-hover;\n            @if ($topbar-link-bg-hover) {\n              background: $topbar-link-bg-hover;\n            }\n            color: $topbar-link-color-hover;\n          }\n\n          // Apply the active link color when it has that class\n          &:active > a {\n            background: $topbar-link-bg-active;\n            color: $topbar-link-color-active;\n          }\n        }\n\n        .has-dropdown {\n          &:hover {\n            & > .dropdown {\n              @include topbar-show-dropdown();\n            }\n          }\n          > a:focus + .dropdown {\n            @include topbar-show-dropdown();\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_type.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n$include-html-type-classes: $include-html-classes !default;\n\n// We use these to control header font styles\n$header-font-family: $body-font-family !default;\n$header-font-weight: $font-weight-normal !default;\n$header-font-style: $font-weight-normal !default;\n$header-font-color: $jet !default;\n$header-line-height: 1.4 !default;\n$header-top-margin: .2rem !default;\n$header-bottom-margin: .5rem !default;\n$header-text-rendering: optimizeLegibility !default;\n\n// We use these to control header font sizes\n$h1-font-size: rem-calc(44) !default;\n$h2-font-size: rem-calc(37) !default;\n$h3-font-size: rem-calc(27) !default;\n$h4-font-size: rem-calc(23) !default;\n$h5-font-size: rem-calc(18) !default;\n$h6-font-size: 1rem !default;\n\n// We use these to control header size reduction on small screens\n$h1-font-reduction: rem-calc(10) !default;\n$h2-font-reduction: rem-calc(10) !default;\n$h3-font-reduction: rem-calc(5) !default;\n$h4-font-reduction: rem-calc(5) !default;\n$h5-font-reduction: 0 !default;\n$h6-font-reduction: 0 !default;\n\n// These control how subheaders are styled.\n$subheader-line-height: 1.4 !default;\n$subheader-font-color: scale-color($header-font-color, $lightness: 35%) !default;\n$subheader-font-weight: $font-weight-normal !default;\n$subheader-top-margin: .2rem !default;\n$subheader-bottom-margin: .5rem !default;\n\n// A general <small> styling\n$small-font-size: 60% !default;\n$small-font-color: scale-color($header-font-color, $lightness: 35%) !default;\n\n// We use these to style paragraphs\n$paragraph-font-family: inherit !default;\n$paragraph-font-weight: $font-weight-normal !default;\n$paragraph-font-size: 1rem !default;\n$paragraph-line-height: 1.6 !default;\n$paragraph-margin-bottom: rem-calc(20) !default;\n$paragraph-aside-font-size: rem-calc(14) !default;\n$paragraph-aside-line-height: 1.35 !default;\n$paragraph-aside-font-style: italic !default;\n$paragraph-text-rendering: optimizeLegibility !default;\n\n// We use these to style <code> tags\n$code-color: $oil !default;\n$code-font-family: $font-family-monospace !default;\n$code-font-weight: $font-weight-normal !default;\n$code-background-color: scale-color($secondary-color, $lightness: 70%) !default;\n$code-border-size: 1px !default;\n$code-border-style: solid !default;\n$code-border-color: scale-color($code-background-color, $lightness: -10%) !default;\n$code-padding: rem-calc(2) rem-calc(5) rem-calc(1) !default;\n\n// We use these to style anchors\n$anchor-text-decoration: none !default;\n$anchor-text-decoration-hover: none !default;\n$anchor-font-color: $primary-color !default;\n$anchor-font-color-hover: scale-color($anchor-font-color, $lightness: -14%) !default;\n\n// We use these to style the <hr> element\n$hr-border-width: 1px !default;\n$hr-border-style: solid !default;\n$hr-border-color: $gainsboro !default;\n$hr-margin: rem-calc(20) !default;\n\n// We use these to style lists\n$list-font-family: $paragraph-font-family !default;\n$list-font-size: $paragraph-font-size !default;\n$list-line-height: $paragraph-line-height !default;\n$list-margin-bottom: $paragraph-margin-bottom !default;\n$list-style-position: outside !default;\n$list-side-margin: 1.1rem !default;\n$list-ordered-side-margin: 1.4rem !default;\n$list-side-margin-no-bullet: 0 !default;\n$list-nested-margin: rem-calc(20) !default;\n$definition-list-header-weight: $font-weight-bold !default;\n$definition-list-header-margin-bottom: .3rem !default;\n$definition-list-margin-bottom: rem-calc(12) !default;\n\n// We use these to style blockquotes\n$blockquote-font-color: scale-color($header-font-color, $lightness: 35%) !default;\n$blockquote-padding: rem-calc(9 20 0 19) !default;\n$blockquote-border: 1px solid $gainsboro !default;\n$blockquote-cite-font-size: rem-calc(13) !default;\n$blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%) !default;\n$blockquote-cite-link-color: $blockquote-cite-font-color !default;\n\n// Acronym styles\n$acronym-underline: 1px dotted $gainsboro !default;\n\n// We use these to control padding and margin\n$microformat-padding: rem-calc(10 12) !default;\n$microformat-margin: rem-calc(0 0 20 0) !default;\n\n// We use these to control the border styles\n$microformat-border-width: 1px !default;\n$microformat-border-style: solid !default;\n$microformat-border-color: $gainsboro !default;\n\n// We use these to control full name font styles\n$microformat-fullname-font-weight: $font-weight-bold !default;\n$microformat-fullname-font-size: rem-calc(15) !default;\n\n// We use this to control the summary font styles\n$microformat-summary-font-weight: $font-weight-bold !default;\n\n// We use this to control abbr padding\n$microformat-abbr-padding: rem-calc(0 1) !default;\n\n// We use this to control abbr font styles\n$microformat-abbr-font-weight: $font-weight-bold !default;\n$microformat-abbr-font-decoration: none !default;\n\n// Text alignment class names\n$align-class-names:\n  small-only,\n  small,\n  medium-only,\n  medium,\n  large-only,\n  large,\n  xlarge-only,\n  xlarge,\n  xxlarge-only,\n  xxlarge;\n\n// Text alignment breakpoints\n$align-class-breakpoints:\n  $small-only,\n  $small-up,\n  $medium-only,\n  $medium-up,\n  $large-only,\n  $large-up,\n  $xlarge-only,\n  $xlarge-up,\n  $xxlarge-only,\n  $xxlarge-up;\n\n// Generates text align and justify classes\n@mixin align-classes{\n  .text-left    { text-align: left !important; }\n  .text-right   { text-align: right !important; }\n  .text-center  { text-align: center !important; }\n  .text-justify { text-align: justify !important; }\n\n  @for $i from 1 through length($align-class-names) {\n    @media #{(nth($align-class-breakpoints, $i))} {\n      .#{(nth($align-class-names, $i))}-text-left { text-align: left !important; }\n      .#{(nth($align-class-names, $i))}-text-right   { text-align: right !important; }\n      .#{(nth($align-class-names, $i))}-text-center  { text-align: center !important; }\n      .#{(nth($align-class-names, $i))}-text-justify { text-align: justify !important; }\n    }\n  }\n}\n\n//\n// Typography Placeholders\n//\n\n// These will throw a deprecation warning if used within a media query.\n@mixin lead {\n  font-size: $paragraph-font-size + rem-calc(3.5);\n  line-height: 1.6;\n}\n\n@mixin subheader {\n  line-height: $subheader-line-height;\n  color: $subheader-font-color;\n  font-weight: $subheader-font-weight;\n  margin-top: $subheader-top-margin;\n  margin-bottom: $subheader-bottom-margin;\n}\n@include exports(\"type\") {\n  @if $include-html-type-classes {\n    // Responsive Text alignment\n    @include align-classes;\n\n    /* Typography resets */\n    div,\n    dl,\n    dt,\n    dd,\n    ul,\n    ol,\n    li,\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    pre,\n    form,\n    p,\n    blockquote,\n    th,\n    td {\n      margin:0;\n      padding:0;\n    }\n\n    /* Default Link Styles */\n    a {\n      color: $anchor-font-color;\n      text-decoration: $anchor-text-decoration;\n      line-height: inherit;\n\n      &:hover,\n      &:focus {\n        color: $anchor-font-color-hover;\n        @if $anchor-text-decoration-hover != $anchor-text-decoration {\n        \ttext-decoration: $anchor-text-decoration-hover;\n        }\n      }\n\n      img { border:none; }\n    }\n\n    /* Default paragraph styles */\n    p {\n      font-family: $paragraph-font-family;\n      font-weight: $paragraph-font-weight;\n      font-size: $paragraph-font-size;\n      line-height: $paragraph-line-height;\n      margin-bottom: $paragraph-margin-bottom;\n      text-rendering: $paragraph-text-rendering;\n\n      &.lead { @include lead; }\n\n      & aside {\n        font-size: $paragraph-aside-font-size;\n        line-height: $paragraph-aside-line-height;\n        font-style: $paragraph-aside-font-style;\n      }\n    }\n\n    /* Default header styles */\n    h1, h2, h3, h4, h5, h6 {\n      font-family: $header-font-family;\n      font-weight: $header-font-weight;\n      font-style: $header-font-style;\n      color: $header-font-color;\n      text-rendering: $header-text-rendering;\n      margin-top: $header-top-margin;\n      margin-bottom: $header-bottom-margin;\n      line-height: $header-line-height;\n\n      small {\n        font-size: $small-font-size;\n        color: $small-font-color;\n        line-height: 0;\n      }\n    }\n\n    h1 { font-size: $h1-font-size - $h1-font-reduction; }\n    h2 { font-size: $h2-font-size - $h2-font-reduction; }\n    h3 { font-size: $h3-font-size - $h3-font-reduction; }\n    h4 { font-size: $h4-font-size - $h4-font-reduction; }\n    h5 { font-size: $h5-font-size - $h5-font-reduction; }\n    h6 { font-size: $h6-font-size - $h6-font-reduction; }\n\n    .subheader { @include subheader; }\n\n    hr {\n      border: $hr-border-style $hr-border-color;\n      border-width: $hr-border-width 0 0;\n      clear: both;\n      margin: $hr-margin 0 ($hr-margin - rem-calc($hr-border-width));\n      height: 0;\n    }\n\n    /* Helpful Typography Defaults */\n    em,\n    i {\n      font-style: italic;\n      line-height: inherit;\n    }\n\n    strong,\n    b {\n      font-weight: $font-weight-bold;\n      line-height: inherit;\n    }\n\n    small {\n      font-size: $small-font-size;\n      line-height: inherit;\n    }\n\n    code {\n      font-family: $code-font-family;\n      font-weight: $code-font-weight;\n      color: $code-color;\n      background-color: $code-background-color;\n      border-width: $code-border-size;\n      border-style: $code-border-style;\n      border-color: $code-border-color;\n      padding: $code-padding;\n    }\n\n    /* Lists */\n    ul,\n    ol,\n    dl {\n      font-size: $list-font-size;\n      line-height: $list-line-height;\n      margin-bottom: $list-margin-bottom;\n      list-style-position: $list-style-position;\n      font-family: $list-font-family;\n    }\n\n    ul {\n      margin-#{$default-float}: $list-side-margin;\n      &.no-bullet {\n        margin-#{$default-float}: $list-side-margin-no-bullet;\n        li {\n          ul,\n          ol {\n            margin-#{$default-float}: $list-nested-margin;\n            margin-bottom: 0;\n            list-style: none;\n          }\n        }\n      }\n    }\n\n    /* Unordered Lists */\n    ul {\n      li {\n        ul,\n        ol {\n          margin-#{$default-float}: $list-nested-margin;\n          margin-bottom: 0;\n        }\n      }\n      &.square,\n      &.circle,\n      &.disc {\n        li ul { list-style: inherit; }\n      }\n\n      &.square { list-style-type: square; margin-#{$default-float}: $list-side-margin;}\n      &.circle { list-style-type: circle; margin-#{$default-float}: $list-side-margin;}\n      &.disc { list-style-type: disc; margin-#{$default-float}: $list-side-margin;}\n      &.no-bullet { list-style: none; }\n    }\n\n    /* Ordered Lists */\n    ol {\n      margin-#{$default-float}: $list-ordered-side-margin;\n      li {\n        ul,\n        ol {\n          margin-#{$default-float}: $list-nested-margin;\n          margin-bottom: 0;\n        }\n      }\n    }\n\n    /* Definition Lists */\n    dl {\n      dt {\n        margin-bottom: $definition-list-header-margin-bottom;\n        font-weight: $definition-list-header-weight;\n      }\n      dd { margin-bottom: $definition-list-margin-bottom; }\n    }\n\n    /* Abbreviations */\n    abbr,\n    acronym {\n      text-transform: uppercase;\n      font-size: 90%;\n      color: $body-font-color;\n      cursor: $cursor-help-value;\n    }\n    abbr {\n      text-transform: none;\n      &[title] {\n        border-bottom: $acronym-underline;\n      }\n    }\n\n    /* Blockquotes */\n    blockquote {\n      margin: 0 0 $paragraph-margin-bottom;\n      padding: $blockquote-padding;\n      border-#{$default-float}: $blockquote-border;\n\n      cite {\n        display: block;\n        font-size: $blockquote-cite-font-size;\n        color: $blockquote-cite-font-color;\n        &:before {\n          content: \"\\2014 \\0020\";\n        }\n\n        a,\n        a:visited {\n          color: $blockquote-cite-link-color;\n        }\n      }\n    }\n    blockquote,\n    blockquote p {\n      line-height: $paragraph-line-height;\n      color: $blockquote-font-color;\n    }\n\n    /* Microformats */\n    .vcard {\n      display: inline-block;\n      margin: $microformat-margin;\n      border: $microformat-border-width $microformat-border-style $microformat-border-color;\n      padding: $microformat-padding;\n\n      li {\n        margin: 0;\n        display: block;\n      }\n      .fn {\n        font-weight: $microformat-fullname-font-weight;\n        font-size: $microformat-fullname-font-size;\n      }\n    }\n\n    .vevent {\n      .summary { font-weight: $microformat-summary-font-weight; }\n\n      abbr {\n        cursor: $cursor-default-value;\n        text-decoration: $microformat-abbr-font-decoration;\n        font-weight: $microformat-abbr-font-weight;\n        border: none;\n        padding: $microformat-abbr-padding;\n      }\n    }\n\n\n    @media #{$medium-up} {\n      h1,h2,h3,h4,h5,h6 { line-height: $header-line-height; }\n      h1 { font-size: $h1-font-size; }\n      h2 { font-size: $h2-font-size; }\n      h3 { font-size: $h3-font-size; }\n      h4 { font-size: $h4-font-size; }\n      h5 { font-size: $h5-font-size; }\n      h6 { font-size: $h6-font-size; }\n    }\n\n    // Only include these styles if you want them.\n    @if $include-print-styles {\n      /*\n       * Print styles.\n       *\n       * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/\n       * Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com)\n      */\n      .print-only { display: none !important; }\n      @media print {\n        * {\n          background: transparent !important;\n          color: $black !important; /* Black prints faster: h5bp.com/s */\n          box-shadow: none !important;\n          text-shadow: none !important;\n        }\n\n        a,\n        a:visited { text-decoration: underline;}\n        a[href]:after { content: \" (\" attr(href) \")\"; }\n\n        abbr[title]:after { content: \" (\" attr(title) \")\"; }\n\n        // Don't show links for images, or javascript/internal links\n        .ir a:after,\n        a[href^=\"javascript:\"]:after,\n        a[href^=\"#\"]:after { content: \"\"; }\n\n        pre,\n        blockquote {\n          border: 1px solid $aluminum;\n          page-break-inside: avoid;\n        }\n\n        thead { display: table-header-group; /* h5bp.com/t */ }\n\n        tr,\n        img { page-break-inside: avoid; }\n\n        img { max-width: 100% !important; }\n\n        @page { margin: 0.5cm; }\n\n        p,\n        h2,\n        h3 {\n          orphans: 3;\n          widows: 3;\n        }\n\n        h2,\n        h3 { page-break-after: avoid; }\n\n        .hide-on-print { display: none !important; }\n        .print-only { display: block !important; }\n        .hide-for-print { display: none !important; }\n        .show-for-print { display: inherit !important; }\n      }\n    }\n\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/foundation/components/_visibility.scss",
    "content": "// Foundation by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n@import \"global\";\n\n//\n// Foundation Visibility Classes\n//\n$include-html-visibility-classes: $include-html-classes !default;\n$include-accessibility-classes: true !default;\n$include-table-visibility-classes: true !default;\n$include-legacy-visibility-classes: true !default;\n\n//\n// Media Class Names\n//\n// Visibility Breakpoints\n$visibility-breakpoint-sizes:\n  small,\n  medium,\n  large,\n  xlarge,\n  xxlarge;\n\n$visibility-breakpoint-queries:\n  unquote($small-up),\n  unquote($medium-up),\n  unquote($large-up),\n  unquote($xlarge-up),\n  unquote($xxlarge-up);\n\n@mixin visibility-loop {\n  @each $current-visibility-breakpoint in $visibility-breakpoint-sizes {\n    $visibility-inherit-list: ();\n    $visibility-none-list: ();\n\n    $visibility-visible-list: ();\n    $visibility-hidden-list: ();\n\n    $visibility-table-list: ();\n    $visibility-table-header-group-list: ();\n    $visibility-table-row-group-list: ();\n    $visibility-table-row-list: ();\n    $visibility-table-cell-list: ();\n\n    @each $visibility-comparison-breakpoint in $visibility-breakpoint-sizes {\n      @if index($visibility-breakpoint-sizes, $visibility-comparison-breakpoint) < index($visibility-breakpoint-sizes, $current-visibility-breakpoint) {\n        // Smaller than current breakpoint\n\n        $visibility-inherit-list: append($visibility-inherit-list, unquote(\n          '.hide-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-none-list: append($visibility-none-list, unquote(\n          '.show-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-visible-list: append($visibility-visible-list, unquote(\n          '.hidden-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-hidden-list: append($visibility-hidden-list, unquote(\n          '.visible-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-list: append($visibility-table-list, unquote(\n          'table.hide-for-#{$visibility-comparison-breakpoint}-only, table.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n          'thead.hide-for-#{$visibility-comparison-breakpoint}-only, thead.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n          'tbody.hide-for-#{$visibility-comparison-breakpoint}-only, tbody.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-list: append($visibility-table-row-list, unquote(\n          'tr.hide-for-#{$visibility-comparison-breakpoint}-only, tr.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n          'th.hide-for-#{$visibility-comparison-breakpoint}-only, td.hide-for-#{$visibility-comparison-breakpoint}-only, th.show-for-#{$visibility-comparison-breakpoint}-up, td.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n\n        // Foundation 4 compatibility:\n        // Include .show/hide-for-[size] and .show/hide-for-[size]-down classes\n        // for small, medium, and large breakpoints only\n        @if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {\n          $visibility-inherit-list: append($visibility-inherit-list, unquote(\n            '.hide-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-none-list: append($visibility-none-list, unquote(\n            '.show-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-visible-list: append($visibility-visible-list, unquote(\n            '.hidden-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-hidden-list: append($visibility-hidden-list, unquote(\n            '.visible-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-list: append($visibility-table-list, unquote(\n            'table.hide-for-#{$visibility-comparison-breakpoint}, table.hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n            'thead.hide-for-#{$visibility-comparison-breakpoint}, thead.hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n            'tbody.hide-for-#{$visibility-comparison-breakpoint}, tbody.hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-list: append($visibility-table-row-list, unquote(\n            'tr.hide-for-#{$visibility-comparison-breakpoint}, tr.hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n            'th.hide-for-#{$visibility-comparison-breakpoint}, td.hide-for-#{$visibility-comparison-breakpoint}, th.hide-for-#{$visibility-comparison-breakpoint}-down, td.hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n        }\n\n      } @else if index($visibility-breakpoint-sizes, $visibility-comparison-breakpoint) > index($visibility-breakpoint-sizes, $current-visibility-breakpoint) {\n        // Larger than current breakpoint\n\n        $visibility-inherit-list: append($visibility-inherit-list, unquote(\n          '.hide-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-none-list: append($visibility-none-list, unquote(\n          '.show-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-visible-list: append($visibility-visible-list, unquote(\n          '.hidden-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-hidden-list: append($visibility-hidden-list, unquote(\n          '.visible-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-list: append($visibility-table-list, unquote(\n          'table.hide-for-#{$visibility-comparison-breakpoint}-only, table.hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n          'thead.hide-for-#{$visibility-comparison-breakpoint}-only, thead.hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n          'tbody.hide-for-#{$visibility-comparison-breakpoint}-only, tbody.hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-list: append($visibility-table-row-list, unquote(\n          'tr.hide-for-#{$visibility-comparison-breakpoint}-only, tr.hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n          'th.hide-for-#{$visibility-comparison-breakpoint}-only, td.hide-for-#{$visibility-comparison-breakpoint}-only, th.hide-for-#{$visibility-comparison-breakpoint}-up, td.hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n\n        // Foundation 4 compatibility:\n        // Include .show/hide-for-[size] and .show/hide-for-[size]-down classes\n        // for small, medium, and large breakpoints only\n        @if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {\n          $visibility-inherit-list: append($visibility-inherit-list, unquote(\n            '.hide-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-none-list: append($visibility-none-list, unquote(\n            '.show-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-visible-list: append($visibility-visible-list, unquote(\n            '.hidden-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-hidden-list: append($visibility-hidden-list, unquote(\n            '.visible-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-list: append($visibility-table-list, unquote(\n            'table.hide-for-#{$visibility-comparison-breakpoint}, table.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n            'thead.hide-for-#{$visibility-comparison-breakpoint}, thead.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n            'tbody.hide-for-#{$visibility-comparison-breakpoint}, tbody.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-list: append($visibility-table-row-list, unquote(\n            'tr.hide-for-#{$visibility-comparison-breakpoint}, tr.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n            'th.hide-for-#{$visibility-comparison-breakpoint}, td.hide-for-#{$visibility-comparison-breakpoint}, th.show-for-#{$visibility-comparison-breakpoint}-down, td.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n        }\n\n      } @else {\n        // Current breakpoint\n\n        $visibility-inherit-list: append($visibility-inherit-list, unquote(\n          '.show-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-none-list: append($visibility-none-list, unquote(\n          '.hide-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-visible-list: append($visibility-visible-list, unquote(\n          '.visible-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-hidden-list: append($visibility-hidden-list, unquote(\n          '.hidden-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-list: append($visibility-table-list, unquote(\n          'table.show-for-#{$visibility-comparison-breakpoint}-only, table.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n          'thead.show-for-#{$visibility-comparison-breakpoint}-only, thead.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n          'tbody.show-for-#{$visibility-comparison-breakpoint}-only, tbody.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-row-list: append($visibility-table-row-list, unquote(\n          'tr.show-for-#{$visibility-comparison-breakpoint}-only, tr.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n        $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n          'th.show-for-#{$visibility-comparison-breakpoint}-only, td.show-for-#{$visibility-comparison-breakpoint}-only, th.show-for-#{$visibility-comparison-breakpoint}-up, td.show-for-#{$visibility-comparison-breakpoint}-up'\n        ), comma);\n\n        // Foundation 4 compatibility:\n        // Include .show/hide-for-[size] and .show/hide-for-[size]-down classes\n        // for small, medium, and large breakpoints only\n        @if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {\n          $visibility-inherit-list: append($visibility-inherit-list, unquote(\n            '.show-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-none-list: append($visibility-none-list, unquote(\n            '.hide-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-visible-list: append($visibility-visible-list, unquote(\n            '.visible-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-hidden-list: append($visibility-hidden-list, unquote(\n            '.hidden-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-list: append($visibility-table-list, unquote(\n            'table.show-for-#{$visibility-comparison-breakpoint}, table.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(\n            'thead.show-for-#{$visibility-comparison-breakpoint}, thead.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(\n            'tbody.show-for-#{$visibility-comparison-breakpoint}, tbody.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-row-list: append($visibility-table-row-list, unquote(\n            'tr.show-for-#{$visibility-comparison-breakpoint}, tr.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n          $visibility-table-cell-list: append($visibility-table-cell-list, unquote(\n            'th.show-for-#{$visibility-comparison-breakpoint}, td.show-for-#{$visibility-comparison-breakpoint}, th.show-for-#{$visibility-comparison-breakpoint}-down, td.show-for-#{$visibility-comparison-breakpoint}-down'\n          ), comma);\n        }\n      }\n    }\n\n    /* #{$current-visibility-breakpoint} displays */\n    @media #{nth($visibility-breakpoint-queries, index($visibility-breakpoint-sizes, $current-visibility-breakpoint))} {\n      #{$visibility-inherit-list} {\n        display: inherit !important;\n      }\n      #{$visibility-none-list} {\n        display: none !important;\n      }\n      @if $include-accessibility-classes != false {\n        #{$visibility-visible-list} {\n          @include element-invisible-off;\n        }\n        #{$visibility-hidden-list} {\n          @include element-invisible;\n        }\n      }\n      @if $include-table-visibility-classes != false {\n        #{$visibility-table-list} {\n          display: table !important;\n        }\n        #{$visibility-table-header-group-list} {\n          display: table-header-group !important;\n        }\n        #{$visibility-table-row-group-list} {\n          display: table-row-group !important;\n        }\n        #{$visibility-table-row-list} {\n          display: table-row !important;\n        }\n        #{$visibility-table-cell-list} {\n          display: table-cell !important;\n        }\n      }\n    }\n  }\n}\n\n\n@if $include-html-visibility-classes != false {\n\n  @include visibility-loop;\n\n  /* Orientation targeting */\n  .show-for-landscape,\n  .hide-for-portrait { display: inherit !important; }\n  .hide-for-landscape,\n  .show-for-portrait { display: none !important; }\n\n  /* Specific visibility for tables */\n  table {\n    &.hide-for-landscape,\n    &.show-for-portrait { display: table !important; }\n  }\n  thead {\n    &.hide-for-landscape,\n    &.show-for-portrait { display: table-header-group !important; }\n  }\n  tbody {\n    &.hide-for-landscape,\n    &.show-for-portrait { display: table-row-group !important; }\n  }\n  tr {\n    &.hide-for-landscape,\n    &.show-for-portrait { display: table-row !important; }\n  }\n  td,\n  th {\n    &.hide-for-landscape,\n    &.show-for-portrait { display: table-cell !important; }\n  }\n\n  @media #{$landscape} {\n    .show-for-landscape,\n    .hide-for-portrait { display: inherit !important; }\n    .hide-for-landscape,\n    .show-for-portrait { display: none !important; }\n\n    /* Specific visibility for tables */\n    table {\n      &.show-for-landscape,\n      &.hide-for-portrait { display: table !important; }\n    }\n    thead {\n      &.show-for-landscape,\n      &.hide-for-portrait { display: table-header-group !important; }\n    }\n    tbody {\n      &.show-for-landscape,\n      &.hide-for-portrait { display: table-row-group !important; }\n    }\n    tr {\n      &.show-for-landscape,\n      &.hide-for-portrait { display: table-row !important; }\n    }\n    td,\n    th {\n      &.show-for-landscape,\n      &.hide-for-portrait { display: table-cell !important; }\n    }\n  }\n\n  @media #{$portrait} {\n    .show-for-portrait,\n    .hide-for-landscape { display: inherit !important; }\n    .hide-for-portrait,\n    .show-for-landscape { display: none !important; }\n\n    /* Specific visibility for tables */\n    table {\n      &.show-for-portrait,\n      &.hide-for-landscape { display: table !important; }\n    }\n    thead {\n      &.show-for-portrait,\n      &.hide-for-landscape { display: table-header-group !important; }\n    }\n    tbody {\n      &.show-for-portrait,\n      &.hide-for-landscape { display: table-row-group !important; }\n    }\n    tr {\n      &.show-for-portrait,\n      &.hide-for-landscape { display: table-row !important; }\n    }\n    td,\n    th {\n      &.show-for-portrait,\n      &.hide-for-landscape { display: table-cell !important; }\n    }\n  }\n\n  /* Touch-enabled device targeting */\n  .show-for-touch { display: none !important; }\n  .hide-for-touch { display: inherit !important; }\n  .touch .show-for-touch { display: inherit !important; }\n  .touch .hide-for-touch { display: none !important; }\n\n  /* Specific visibility for tables */\n  table.hide-for-touch { display: table !important; }\n  .touch table.show-for-touch { display: table !important; }\n  thead.hide-for-touch { display: table-header-group !important; }\n  .touch thead.show-for-touch { display: table-header-group !important; }\n  tbody.hide-for-touch { display: table-row-group !important; }\n  .touch tbody.show-for-touch { display: table-row-group !important; }\n  tr.hide-for-touch { display: table-row !important; }\n  .touch tr.show-for-touch { display: table-row !important; }\n  td.hide-for-touch { display: table-cell !important; }\n  .touch td.show-for-touch { display: table-cell !important; }\n  th.hide-for-touch { display: table-cell !important; }\n  .touch th.show-for-touch { display: table-cell !important; }\n\n\n  /* Print visibility */\n  @media print {\n    .show-for-print { display: block; }\n    .hide-for-print { display: none; }\n\n    table.show-for-print { display: table !important; }\n    thead.show-for-print { display: table-header-group !important; }\n    tbody.show-for-print { display: table-row-group !important; }\n    tr.show-for-print { display: table-row !important; }\n    td.show-for-print { display: table-cell !important; }\n    th.show-for-print { display: table-cell !important; }\n\n  }\n\n}\n"
  },
  {
    "path": "python/nav/web/sass/libs/driver.css",
    "content": ".driver-active .driver-overlay,.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in .2s ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in .2s}.driver-popover{all:unset;box-sizing:border-box;color:#2d2d2d;margin:0;padding:15px;border-radius:5px;min-width:250px;max-width:300px;box-shadow:0 1px 10px #0006;z-index:1000000000;position:fixed;top:0;right:0;background-color:#fff}.driver-popover *{font-family:Helvetica Neue,Inter,ui-sans-serif,\"Apple Color Emoji\",Helvetica,Arial,sans-serif}.driver-popover-title{font:19px/normal sans-serif;font-weight:700;display:block;position:relative;line-height:1.5;zoom:1;margin:0}.driver-popover-close-btn{all:unset;position:absolute;top:0;right:0;width:32px;height:28px;cursor:pointer;font-size:18px;font-weight:500;color:#d2d2d2;z-index:1;text-align:center;transition:color;transition-duration:.2s}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{margin-bottom:0;font:14px/normal sans-serif;line-height:1.5;font-weight:400;zoom:1}.driver-popover-footer{margin-top:15px;text-align:right;zoom:1;display:flex;align-items:center;justify-content:space-between}.driver-popover-progress-text{font-size:13px;font-weight:400;color:#727272;zoom:1}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}:not(body):has(>.driver-active-element){overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}.driver-popover-navigation-btns{display:flex;flex-grow:1;justify-content:flex-end}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:\"\";position:absolute;border:5px solid #fff}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{left:100%;border-right-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-right{right:100%;border-left-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-top{top:100%;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.driver-popover-arrow-side-bottom{bottom:100%;border-left-color:transparent;border-top-color:transparent;border-right-color:transparent}.driver-popover-arrow-side-center{display:none}.driver-popover-arrow-side-left.driver-popover-arrow-align-start,.driver-popover-arrow-side-right.driver-popover-arrow-align-start{top:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-start,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-start{left:15px}.driver-popover-arrow-align-end.driver-popover-arrow-side-left,.driver-popover-arrow-align-end.driver-popover-arrow-side-right{bottom:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-end,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-end{right:15px}.driver-popover-arrow-side-left.driver-popover-arrow-align-center,.driver-popover-arrow-side-right.driver-popover-arrow-align-center{top:50%;margin-top:-5px}.driver-popover-arrow-side-top.driver-popover-arrow-align-center,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-center{left:50%;margin-left:-5px}.driver-popover-arrow-none{display:none}\n"
  },
  {
    "path": "python/nav/web/sass/libs/flatpickr.css",
    "content": ".flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/*\n      /*rtl:begin:ignore*/left:0/*\n      /*rtl:end:ignore*/}/*\n      /*rtl:begin:ignore*/\n/*\n      /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/*\n      /*rtl:begin:ignore*/right:0/*\n      /*rtl:end:ignore*/}/*\n      /*rtl:begin:ignore*/\n/*\n      /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:\"\";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:\"\";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_accordion.scss",
    "content": ".accordion {\n    > ul {\n        border: 1px solid #999999;\n        margin-left: 0;\n        > li {\n            list-style-type: none;\n            &:last-child > a {\n                border-bottom: none;\n            }\n            > a {\n                background-color: #dae1e6;\n                border-bottom: 1px solid #999999;\n                color: #333333;\n                display: block;\n                padding: 0.6em 1em;\n                &:hover {\n                    background-color: #eee;;\n                }\n            }\n        }\n    }\n    .accordion-content {\n        border-bottom: 1px solid #999999;\n        padding: 1em;\n    }\n}\n\n"
  },
  {
    "path": "python/nav/web/sass/nav/_datatables.scss",
    "content": "/* Styling for using datatables plugin on tables */\n\n/* Sorting indicators */\n\n@import '../navsettings';\n\n@mixin common_header_styles() {\n    display: inline-block;\n    padding: .6em;\n}\n\n@mixin datatables_background() {\n    border-radius: 3px;\n    border: 1px solid #dddddd;\n    display: inline-block;\n    table {\n        margin-bottom: 0;\n    }\n}\n\n.dataTables_wrapper {\n    /* Adds background styling to the datatable. This is very specific for\n       seeddb as it also floats around elements based on what is\n       enabled in seeddb */\n    &.dataTables_background, &.dataTables_background_grey {\n        background-color: #eeeeee;\n        @include datatables_background;\n    }\n    &.dataTables_background_white {\n        background-color: white;\n        @include datatables_background;\n    }\n    select {\n        width: auto;\n    }\n    label {\n        display: inline;\n    }\n    &:after {  /* Exciting - what is this? */\n        content: \".\";\n        display: block;\n        clear: both;\n        visibility: hidden;\n        line-height: 0;\n        height: 0;\n    }\n    /* Style the table header cells to indicate sort directions */\n    .dataTable {\n        th {\n            padding-right: 1.4em;\n            &.sorting_disabled {\n                background-color: #EEE;\n            }\n            // sorting (sortable column) must come before sorting_asc/desc\n            // so that the active sort direction takes precedence\n            &.sorting {\n                background: url('#{$image-path-partials}/datatables/sort_both.png') no-repeat right center #EEEEEE;\n            }\n            &.sorting_asc {\n                background: url('#{$image-path-partials}/datatables/sort_asc.png') no-repeat right center #EEEEEE;\n            }\n            &.sorting_desc {\n                background: url('#{$image-path-partials}/datatables/sort_desc.png') no-repeat right center #EEEEEE;\n            }\n        }\n    }\n    .filters {\n        @include common_header_styles;\n        display: flex;\n        flex-wrap: wrap;\n        align-items: baseline;\n        gap: 0.5em;\n\n        .dataTables_filter {\n            display: flex;\n            align-items: baseline;\n            padding: 0;\n            gap: 0.3em;\n        }\n\n        .select2-container {\n            min-width: 200px;\n            max-width: 350px;\n        }\n    }\n    .dataTables_filter {\n        @include common_header_styles;\n        // DataTables 2.x uses separate label and input elements\n        label {\n            margin-right: 0.3em;\n        }\n        input {\n            display: inline;\n            margin: 0;\n            width: auto;\n        }\n    }\n    .dataTables_length {\n        @include common_header_styles;\n        select {\n            margin: 0;\n        }\n    }\n    .dataTables_info {\n        @include common_header_styles;\n        font-size: 0.9em;\n        line-height: 1.6em;\n        clear: right;\n    }\n    .dataTables_paginate {\n        @include common_header_styles;\n        float: right;\n        // DataTables 2.x wraps buttons in a nav element\n        nav {\n            display: inline;\n        }\n        .paginate_button {\n            @include button($padding:$button-tny);\n            &.disabled {\n                @include button-style($disabled:true);\n            }\n            &.current {\n                @include button-style($bg:$secondary-color,\n                                      $bg-hover:$secondary-button-bg-hover,\n                                      $border-color:$secondary-button-border-color);\n            }\n        }\n        .button {\n            margin-bottom: 0;\n        }\n    }\n\n}\n\n\n/* Special styles for overriding global styles */\n.dataTables_scroll table, .DTFC_ScrollWrapper table {\n    border: 0;\n    margin-bottom: 0;\n    th {\n        box-sizing: content-box; /*Override when using scrolling in datatables*/\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_dialog.scss",
    "content": "// Override some styling for the jquery-ui dialog.\n\n@import \"../navsettings\";\n\n.nav-body .ui-dialog {\n    font-family: inherit;\n    font-size: inherit;\n    border-radius: 0;\n    .ui-dialog-titlebar {\n\tbackground-image: none;\n\tbackground-color: #dfdfdf;\n\tborder-radius: 0;\n    }\n    .ui-dialog-content {\n\ta {\n\t    color: $primary-color;\n\t}\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_fonts.scss",
    "content": "@import 'settings';\n\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Open Sans Light'), local('OpenSans-Light'), url('#{$assets-url}/fonts/OS300.woff') format('woff');\n}\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Open Sans'), local('OpenSans'), url('#{$assets-url}/fonts/OS400.woff') format('woff');\n}\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 600;\n  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url('#{$assets-url}/fonts/OS600.woff') format('woff');\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_footer.scss",
    "content": "@import '../navsettings';\n\n$footer-content-padding: 2.8em;\n\nfooter {\n    background-color: #ffffff;\n    border-top: 2px solid #111111;\n    color: #666666;\n    padding-top: 4em;\n    padding-bottom: 3em;\n    .column {\n        h4 {\n            font-size: 1.125rem;\n        }\n        p {\n            font-size: 0.8rem;\n        }\n        > div {\n            font-size: 0.8em;\n        }\n        &:first-child {\n            padding-left: $global-padding;\n            padding-right: $footer-content-padding;\n        }\n        &:nth-child(2) {\n            border-right: 1px solid #DDD;\n            border-left: 1px solid #DDD;\n            padding: 0 $footer-content-padding;\n        }\n        &:last-child {\n            padding-left: $footer-content-padding;\n            padding-right: $global-padding;\n        }\n    }\n    a, a:hover {\n        border-bottom: 1px dashed;\n        color: #666666;\n    }\n    .footer-logo {\n        height: 40px;\n        margin-bottom: 0.5em;\n    }\n    .content-with-icon {\n        i {\n            float: left;\n            font-size: 1.8em;\n            margin-top: 0.1em;\n            width: 35px; // Remember to adjust width of <div>\n        }\n        > div {\n            margin-left: 35px; // Remember to adjust width of <i>\n            .subheader {\n                margin: 0;\n            }\n        }\n    }\n    .about {\n        margin-bottom: 3em;\n    }\n\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_lightbox.scss",
    "content": "// Lightbox styles similar to Foundation Clearing design\n// Based on https://github.com/foundation/foundation-sites/blob/v5/scss/foundation/components/_clearing.scss\n\n$lightbox-bg: #222;\n$lightbox-close-color: #999;\n$lightbox-close-size: 30px;\n$lightbox-close-size-mobile: 24px;\n$lightbox-arrow-size: 12px;\n$lightbox-arrow-size-mobile: 8px;\n$lightbox-caption-font-color: #999;\n$lightbox-caption-font-size: 0.875em;\n$lightbox-section-padding: 20px;\n$lightbox-section-padding-mobile: 5px 15px 10px;\n$lightbox-nav-width: 40px;\n$lightbox-nav-width-mobile: 30px;\n$lightbox-thumbnail-size: 80px;\n$lightbox-thumbnail-gap: 5px;\n$lightbox-thumbnail-container-padding: 10px;\n$lightbox-thumbnail-container-padding-mobile: 5px;\n$lightbox-thumbnail-container-max-width: 300px;\n$lightbox-thumbnail-container-max-width-mobile: 200px;\n$lightbox-thumbnail-border-width: 2px;\n\n.lightbox {\n  display: none;\n  position: fixed;\n  z-index: 998;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background-color: $lightbox-bg;\n  opacity: 0;\n  transition: opacity 0.3s ease-in-out;\n\n  &.show {\n    display: block;\n    opacity: 1;\n  }\n}\n\n.lightbox-content {\n  position: relative;\n  z-index: 998;\n  height: 100%;\n  margin: 0;\n  display: flex;\n  flex-direction: column;\n}\n\n/* These styles are based on Foundation Thumbs */\n.lightbox-gallery-thumb {\n  line-height: 0;\n  display: inline-block;\n  border: solid 4px #fff;\n  max-width: 100%;\n  box-shadow: 0 0 0 1px rgba(#000, 0.2);\n  transition: all 200ms ease-out;\n\n  &:hover,\n  &:focus {\n    box-shadow: 0 0 6px 1px rgba(#008cba, 0.5);\n  }\n\n  img {\n    display: block;\n    max-width: 100%;\n    height: auto;\n  }\n}\n\n.lightbox-close {\n  z-index: 999;\n  position: absolute;\n  top: 10px;\n  right: 20px;\n  padding-left: 20px;\n  padding-top: 10px;\n  font-size: $lightbox-close-size;\n  line-height: 1;\n  color: $lightbox-close-color;\n  cursor: pointer;\n  display: block;\n\n  &:hover,\n  &:focus {\n    color: lighten($lightbox-close-color, 20%);\n  }\n}\n\n.lightbox-image-container {\n  flex: 1;\n  position: relative;\n  background: $lightbox-bg;\n  overflow: hidden;\n}\n\n.lightbox-image {\n  position: absolute;\n  margin: $lightbox-section-padding 0;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  max-height: 100%;\n  max-width: 100%;\n  object-fit: contain;\n}\n\n.lightbox-caption {\n  color: $lightbox-caption-font-color;\n  font-size: $lightbox-caption-font-size;\n  line-height: 1.3;\n  margin-bottom: 0;\n  text-align: center;\n  bottom: 0;\n  background: $lightbox-bg;\n  width: 100%;\n  padding: $lightbox-section-padding;\n  position: absolute;\n  left: 0;\n}\n\n.lightbox-nav button {\n  position: absolute;\n  height: 100%;\n  width: $lightbox-nav-width;\n  top: 0;\n  background: none;\n  border: none;\n  cursor: pointer;\n  opacity: 0.8;\n\n  &:hover {\n    opacity: 1;\n  }\n\n  &:disabled {\n    opacity: 0.3;\n  }\n\n  span {\n    position: absolute;\n    top: 50%;\n    display: block;\n    width: 0;\n    height: 0;\n  }\n}\n\n.lightbox-prev {\n  left: 0;\n\n  span {\n    left: 5px;\n    border: transparent solid $lightbox-arrow-size;\n    border-right-color: $lightbox-close-color;\n  }\n}\n\n.lightbox-next {\n  right: 0;\n\n  span {\n    right: 5px;\n    border: transparent solid $lightbox-arrow-size;\n    border-left-color: $lightbox-close-color;\n  }\n}\n\n.lightbox-thumbnails {\n  padding: 0 $lightbox-section-padding $lightbox-section-padding;\n\n  ul {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    display: flex;\n    flex-wrap: wrap;\n    gap: $lightbox-thumbnail-gap;\n  }\n\n  li {\n    cursor: pointer;\n    border: $lightbox-thumbnail-border-width solid transparent;\n    transition: border-color 0.2s ease;\n    filter: brightness(0.6);\n\n    &.active {\n      border-color: #fff;\n        filter: none;\n    }\n\n    &:hover {\n      border-color: lighten($lightbox-close-color, 40%);\n    }\n\n    img {\n      display: block;\n      max-width: calc($lightbox-thumbnail-size * 16/9);\n      height: $lightbox-thumbnail-size;\n      object-fit: cover;\n    }\n  }\n}\n\n// Mobile adjustments\n@media screen and (max-width: 767px) {\n  .lightbox-close {\n    font-size: $lightbox-close-size-mobile;\n    top: 5px;\n    right: 15px;\n    padding-left: 15px;\n    padding-top: 5px;\n  }\n\n  .lightbox-nav button {\n    width: $lightbox-nav-width-mobile;\n  }\n\n  .lightbox-image-container {\n    height: 100%;\n  }\n\n  .lightbox-thumbnails {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_modal.scss",
    "content": "// Mostly copied from python/nav/web/sass/foundation/components/_reveal.scss\n\n$default-width: 30%;\n\n.nav-modal {\n    all: unset;\n    .modal-underlay {\n        position: fixed;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        background: rgba($black, .45);\n        z-index: 1004;\n    }\n\n    .modal-content {\n        position: fixed;\n        z-index: 1005;\n        width: fit-content;\n        top: rem-calc(100);\n        left: 0;\n        right: 0;\n        margin: 0 auto;\n        border-radius: $global-radius;\n        box-shadow: 0 0 10px rgba($black,.4);\n        background-color: $white;\n        padding: rem-calc(20);\n        max-height: 80vh;\n        overflow-y: auto;\n\n        /* Animation for sliding in from top */\n        transform: translateY(-100vh);\n        animation: slideInFromTop 0.3s ease-out forwards;\n\n        .close-reveal-modal {\n            font-size: 1.5rem;\n            line-height: 1;\n            position: absolute;\n            top: 0.5rem;\n            right: 0.6875rem;\n            color: #AAAAAA;\n            font-weight: bold;\n            cursor: pointer;\n        }\n    }\n}\n\n.modal-content {\n    &.tiny {\n        width: 95%;\n        max-width: rem-calc(400);\n        padding: rem-calc(15);\n\n        @media #{$medium-up} {\n            width: 30%;\n            padding: rem-calc(20);\n        }\n    }\n\n    &.small {\n        width: 95%;\n        max-width: rem-calc(500);\n        padding: rem-calc(15);\n\n        @media #{$medium-up} {\n            width: 40%;\n            padding: rem-calc(25);\n        }\n    }\n\n    &.medium {\n        width: 95%;\n        max-width: rem-calc(700);\n        padding: rem-calc(20);\n\n        @media #{$medium-up} {\n            width: 60%;\n            padding: rem-calc(30);\n        }\n    }\n\n    &.large {\n        width: 95%;\n        max-width: rem-calc(900);\n        padding: rem-calc(20);\n\n        @media #{$medium-up} {\n            width: 80%;\n            padding: rem-calc(35);\n        }\n    }\n\n    &.fit-content {\n      padding: rem-calc(20);\n      @media #{$medium-up} {\n          padding: rem-calc(30);\n      }\n    }\n\n    &.full {\n        width: 100vw;\n        height: 100vh;\n        min-height: 100vh;\n        max-width: none;\n        margin-left: 0;\n        padding: rem-calc(15);\n\n        @media #{$medium-up} {\n            padding: rem-calc(30);\n        }\n    }\n}\n\n@keyframes slideInFromTop {\n    from {\n        transform: translateY(-100vh);\n    }\n    to {\n        transform: translateY(0);\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_popover.scss",
    "content": "// Base popover styles\n.popover {\n  position: relative;\n  width: fit-content;\n\n  // Remove margin from trigger buttons\n  > button,\n  > .button {\n    margin-bottom: 0;\n  }\n}\n\n// Content positioning by side\n.popover:not([data-side]),\n.popover[data-side=\"bottom\"] {\n  .popover-content {\n    left: 0;\n  }\n\n  &[data-align=\"end\"] .popover-content {\n    right: 0;\n    left: unset;\n  }\n}\n\n.popover[data-side=\"top\"] {\n  .popover-content {\n    bottom: 100%;\n    left: 0;\n  }\n\n  &[data-align=\"end\"] .popover-content {\n    bottom: 100%;\n    right: 0;\n    left: unset;\n  }\n}\n\n.popover[data-side=\"left\"] {\n  .popover-content {\n    top: 0;\n    right: 100%;\n  }\n\n  &[data-align=\"end\"] .popover-content {\n    bottom: 0;\n    top: unset;\n  }\n}\n\n.popover[data-side=\"right\"] {\n  .popover-content {\n    top: 0;\n    left: 100%;\n  }\n\n  &[data-align=\"end\"] .popover-content {\n    bottom: 0;\n    top: unset;\n  }\n}\n\n// Open state animations\n.popover.open .popover-content {\n  opacity: 1;\n  visibility: visible;\n  transform: translate(0, 10px);\n}\n\n.popover.open[data-side=\"left\"] .popover-content {\n  transform: translate(-10px, 0);\n}\n\n.popover.open[data-side=\"right\"] .popover-content {\n  transform: translate(10px, 0);\n}\n\n.popover.open[data-side=\"top\"] .popover-content {\n  transform: translate(0, -10px);\n}\n\n// Arrow base styles\n.popover.with-arrow .popover-content {\n  &:before,\n  &:after {\n    position: absolute;\n    content: '';\n    width: 0;\n    height: 0;\n  }\n\n  &:before {\n    border: 6px inset transparent;\n    border-bottom: 6px solid #fff;\n    z-index: 2;\n  }\n\n  &:after {\n    border: 7px inset transparent;\n    border-bottom: 7px solid #ccc;\n    z-index: 1;\n  }\n}\n\n// Arrow positioning for bottom/default\n.popover.with-arrow:not([data-side]) .popover-content,\n.popover.with-arrow[data-side=\"bottom\"] .popover-content {\n  &:before {\n    top: -12px;\n    left: 10px;\n  }\n\n  &:after {\n    top: -14px;\n    left: 9px;\n  }\n}\n\n.popover.with-arrow:not([data-side])[data-align=\"end\"] .popover-content,\n.popover.with-arrow[data-side=\"bottom\"][data-align=\"end\"] .popover-content {\n  &:before {\n    top: -12px;\n    right: 10px;\n    left: unset;\n  }\n\n  &:after {\n    top: -14px;\n    right: 9px;\n    left: unset;\n  }\n}\n\n// Arrow positioning for left side\n.popover.with-arrow[data-side=\"left\"] .popover-content {\n  &:before,\n  &:after {\n    transform: rotate(90deg);\n  }\n\n  &:before {\n    right: -12px;\n    top: 10px;\n  }\n\n  &:after {\n    right: -14px;\n    top: 9px;\n  }\n}\n\n.popover.with-arrow[data-side=\"left\"][data-align=\"end\"] .popover-content {\n  &:before {\n    bottom: 10px;\n    top: unset;\n  }\n\n  &:after {\n    bottom: 9px;\n    top: unset;\n  }\n}\n\n// Arrow positioning for right side\n.popover.with-arrow[data-side=\"right\"] .popover-content {\n  &:before,\n  &:after {\n    transform: rotate(-90deg);\n  }\n\n  &:before {\n    left: -12px;\n    top: 10px;\n  }\n\n  &:after {\n    left: -14px;\n    top: 9px;\n  }\n}\n\n.popover.with-arrow[data-side=\"right\"][data-align=\"end\"] .popover-content {\n  &:before {\n    bottom: 10px;\n    top: unset;\n  }\n\n  &:after {\n    bottom: 9px;\n    top: unset;\n  }\n}\n\n// Arrow positioning for top side\n.popover.with-arrow[data-side=\"top\"] .popover-content {\n  &:before,\n  &:after {\n    transform: rotate(180deg);\n  }\n\n  &:before {\n    bottom: -12px;\n    left: 10px;\n  }\n\n  &:after {\n    bottom: -14px;\n    left: 9px;\n  }\n}\n\n.popover.with-arrow[data-side=\"top\"][data-align=\"end\"] .popover-content {\n  &:before {\n    right: 10px;\n    left: unset;\n  }\n\n  &:after {\n    right: 9px;\n    left: unset;\n  }\n}\n\n// Popover content base styles\n.popover-content {\n  opacity: 0;\n  visibility: hidden;\n  transition: opacity 0.3s ease, transform 0.3s ease, visibility 0.3s ease;\n  position: absolute;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  padding: 1.25rem;\n  z-index: 100;\n  box-shadow: 0 2px 5px rgba(0,0,0,0.25);\n  width: max-content;\n\n  &.tiny {\n    max-width: 200px;\n  }\n\n  &.small {\n    max-width: 300px;\n  }\n\n  &.medium {\n    max-width: 500px;\n  }\n\n  &.large {\n    max-width: 800px;\n  }\n\n  // Remove bottom margin from elements to prevent extra space\n  > :last-child {\n    margin-bottom: 0;\n  }\n\n  button,\n  .button {\n    margin-bottom: 0;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_select2.scss",
    "content": "/*\n * NAV Select2 v4 customizations\n * Overrides for Select2 v4.1.0-rc.0 to match NAV styling\n */\n@import '../navsettings';\n@import 'settings';\n\n// =============================================================================\n// Base container styles\n// =============================================================================\n\n.select2-container {\n    margin: 0 0 1rem 0;\n    font-family: inherit;\n    font-size: 0.875rem;\n    box-sizing: border-box;\n}\n\n// =============================================================================\n// Single select styles\n// =============================================================================\n\n.select2-container--default .select2-selection--single {\n    height: 2.315rem;\n    border: 1px solid #ccc;\n    border-radius: 0;\n    background-color: #fafafa;\n\n    // NAV-style dropdown arrow using SVG\n    background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==\");\n    background-repeat: no-repeat;\n    background-position: calc(100% - 10px) center;\n\n    &:hover {\n        background-color: #f2f2f2;\n        border-color: #999;\n    }\n\n    .select2-selection__rendered {\n        line-height: 2.315rem;\n        padding-left: 0.5rem;\n        padding-right: 2rem;\n        color: inherit;\n    }\n\n    .select2-selection__arrow {\n        height: 100%;\n        top: 0;\n        right: 0;\n        width: 20px;\n\n        // Hide default arrow since we use background SVG\n        b {\n            display: none;\n        }\n    }\n\n    .select2-selection__placeholder {\n        color: #999;\n    }\n\n    .select2-selection__clear {\n        margin-right: 1.5rem;\n    }\n}\n\n// =============================================================================\n// Multiple select styles\n// =============================================================================\n\n.select2-container--default .select2-selection--multiple {\n    min-height: 26px;\n    border: 1px solid #aaa;\n    border-radius: 0;\n    background-color: #fff;\n    background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);\n    cursor: text;\n\n    &:hover {\n        border-color: #999;\n    }\n\n    .select2-selection__rendered {\n        display: block;\n        box-sizing: border-box;\n        list-style: none;\n        margin: 0;\n        padding: 4px 5px 0 5px;\n        width: 100%;\n\n        &::after {\n            content: \"\";\n            display: table;\n            clear: both;\n        }\n    }\n\n    .select2-selection__choice {\n        float: left;\n        margin: 2px 5px 2px 0;\n        padding: 3px 5px 3px 18px;\n        position: relative;\n        line-height: 13px;\n        color: #333;\n        border: 1px solid #aaa;\n        border-radius: 0;\n        background-color: #e4e4e4;\n        background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n        box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n        cursor: default;\n    }\n\n    .select2-selection__choice__remove {\n        position: absolute;\n        left: 3px;\n        top: 50%;\n        transform: translateY(-50%);\n        color: #999;\n        font-weight: bold;\n        margin-right: 0;\n        cursor: pointer;\n        background: none;\n        border: none;\n        padding: 0;\n        line-height: 1;\n\n        &:hover {\n            color: #333;\n        }\n    }\n\n    .select2-search--inline {\n        float: left;\n\n        .select2-search__field {\n            margin: 0;\n            padding: 0;\n            height: 22px;\n            min-height: 0;\n            line-height: 22px;\n            font-family: sans-serif;\n            font-size: 0.875rem;\n            color: #666;\n            border: none;\n            outline: 0;\n            box-shadow: none;\n            background: transparent;\n            resize: none;\n            overflow: hidden;\n        }\n    }\n}\n\n// =============================================================================\n// Focus/active states\n// =============================================================================\n\n.select2-container--default.select2-container--focus .select2-selection--single,\n.select2-container--default.select2-container--focus .select2-selection--multiple,\n.select2-container--default.select2-container--open .select2-selection--single,\n.select2-container--default.select2-container--open .select2-selection--multiple {\n    border-color: #999;\n    outline: none;\n    box-shadow: 0 0 5px #999;\n}\n\n.select2-container--default.select2-container--open .select2-selection--single {\n    border-bottom-color: transparent;\n    background-color: #fafafa;\n}\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single {\n    border-top-color: #ccc;\n    border-bottom-color: #ccc;\n}\n\n// =============================================================================\n// Dropdown styles\n// =============================================================================\n\n.select2-dropdown {\n    border: 1px solid #999;\n    border-radius: 0;\n    background-color: #fafafa;\n    box-shadow: 0 0 5px #999;\n    z-index: 9999;\n}\n\n.select2-dropdown--below {\n    border-top: 0;\n}\n\n.select2-dropdown--above {\n    border-bottom: 0;\n}\n\n// =============================================================================\n// Search field in dropdown\n// =============================================================================\n\n.select2-search--dropdown {\n    padding: 4px;\n\n    .select2-search__field {\n        width: 100%;\n        height: 28px;\n        padding: 4px 20px 4px 8px;\n        border: 1px solid #aaa;\n        border-radius: 0;\n        margin-bottom: 0;\n        outline: 0;\n        font-family: sans-serif;\n        font-size: 0.875rem;\n        box-shadow: none;\n        // The sprite has the search icon at y=-22px, center it vertically\n        background: #fff url('#{$image-path-partials}/select2/select2.png') no-repeat calc(100% - 5px) -23px;\n\n        &.select2-search__field--loading {\n            background: #fff url('#{$image-path-partials}/select2/select2-spinner.gif') no-repeat calc(100% - 5px) center;\n        }\n    }\n}\n\n// =============================================================================\n// Results/options list\n// =============================================================================\n\n.select2-results {\n    font-size: 0.875rem;\n}\n\n.select2-results__options {\n    max-height: 200px;\n    overflow-y: auto;\n    padding: 0 0.25rem;\n    margin: 0.25rem 0;\n}\n\n.select2-results__option {\n    padding: 0.25rem;\n    min-height: 1em;\n    user-select: none;\n\n    &--selected {\n        background-color: transparent;\n    }\n\n    &--highlighted.select2-results__option--selectable {\n        background-color: #3875d7;\n        color: #fff;\n    }\n\n    // Nested groups padding\n    .select2-results__option {\n        padding-left: 20px;\n    }\n}\n\n.select2-results__group {\n    font-weight: bold;\n    padding: 0.25rem;\n}\n\n// Search term highlighting\n.select2-results__option em {\n    background: #feffde;\n    font-style: normal;\n}\n\n.select2-results__option--highlighted em {\n    background: transparent;\n}\n\n// Loading and messages\n.select2-results__message {\n    padding: 0.25rem;\n    color: #999;\n    font-style: italic;\n}\n\n// =============================================================================\n// Disabled states\n// =============================================================================\n\n.select2-container--default.select2-container--disabled {\n    .select2-selection--single,\n    .select2-selection--multiple {\n        background-color: #f4f4f4;\n        background-image: none;\n        border-color: #ddd;\n        cursor: default;\n    }\n\n    .select2-selection__choice {\n        padding: 3px 5px;\n        border-color: #ddd;\n        background-image: none;\n        background-color: #f4f4f4;\n    }\n\n    .select2-selection__choice__remove {\n        display: none;\n    }\n}\n\n.select2-results__option--disabled {\n    background-color: #f4f4f4;\n    color: #666;\n    cursor: default;\n}\n\n// =============================================================================\n// Locked choices (in multi-select)\n// =============================================================================\n\n.select2-selection__choice--locked {\n    padding: 3px 5px !important;\n}\n\n// =============================================================================\n// Hidden/off-screen elements (accessibility)\n// =============================================================================\n\n.select2-hidden-accessible {\n    clip: rect(0 0 0 0) !important;\n    width: 1px !important;\n    height: 1px !important;\n    border: 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    outline: 0 !important;\n    left: 0 !important;\n    top: 0 !important;\n}\n\n// =============================================================================\n// Close mask (modal backdrop)\n// =============================================================================\n\n.select2-close-mask {\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: fixed;\n    left: 0;\n    top: 0;\n    min-height: 100%;\n    min-width: 100%;\n    height: auto;\n    width: auto;\n    opacity: 0;\n    z-index: 9998;\n    background-color: #fff;\n    filter: alpha(opacity=0);\n}\n\n// =============================================================================\n// Retina display icons\n// =============================================================================\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (min-resolution: 144dpi) {\n    .select2-search--dropdown .select2-search__field {\n        background-image: url('#{$image-path-partials}/select2/select2.png') !important;\n        background-repeat: no-repeat !important;\n        background-size: 60px 40px !important;\n        background-position: 100% -21px !important;\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_sensors.scss",
    "content": "/*\n * Styles for everything in the environment tab\n */\n\n.room-sensors {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n}\n\n.room-sensor {\n  width: 300px;\n  margin-bottom: 1em;\n\n  h5 { text-align: center; }\n  .button-wrapper { text-align: center; }\n\n  .current {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 300px;\n    height: 110px;\n    margin-bottom: 1em;\n\n    .counter-node {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n\n      background-color: steelblue;\n      color: white;\n      height: 110px;\n      width: 110px;\n      .values {\n        text-align: center;\n        .value {\n          font-size: 2em;\n        }\n      }\n    }\n  }\n\n  .rs-graph {\n    position: relative;\n    margin-bottom: 1em;\n    /* Add all jquery ui styles so that the slider appears correct */\n    .rs-ynode {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      width: 40px;\n    }\n    .rs-graphnode {\n      margin-left: 40px;\n      position: relative;\n    }\n    .rs-slidernode {\n      margin-left: 40px;\n      margin-top: 20px;\n      height: 0.8em;\n      position: relative;\n      text-align: left;\n      border: 1px solid #AAA;\n      div {\n        top: 0;\n        height: 100%;\n        border: 0 none;\n        background: url(\"../../images/jqueryui/ui-bg_highlight-soft_75_cccccc_1x100.png\") repeat-x scroll 50% 50% #cccccc;\n        position: absolute;\n        z-index: 1;\n        font-size: 0.7em;\n        display: block;\n        color: #222;\n        font-weight: bold;\n      }\n      span {\n        top: -0.25em;\n        margin-left: -0.6em;\n        position: absolute;\n        z-index: 2;\n        width: 1.2em;\n        height: 1.2em;\n        cursor: default;\n        border: 1px solid #D3D3D3;\n        background: url(\"../../images/jqueryui/ui-bg_glass_75_e6e6e6_1x400.png\") repeat-x scroll 50% 50% #e6e6e6;\n        font-weight: normal;\n        color: #555;\n      }\n    }\n  }\n}\n\n/* .rickshaw_graph is the name of the class added to graph element by RickShaw */\n.rickshaw_graph .detail {\n  z-index: 100; }\n  .rickshaw_graph .detail .date {\n    color: #a0a0a0; }\n  .rickshaw_graph .detail .x_label {\n    display: none; }\n  .rickshaw_graph .detail .item {\n    line-height: 1.4;\n    padding: 0.5em; }\n  .rickshaw_graph .detail .series_value {\n    padding-right: 20px;\n    width: 200px;\n    white-space: pre-wrap; }\n  .rickshaw_graph .detail .detail_swatch {\n    float: right;\n    display: inline-block;\n    width: 10px;\n    height: 10px;\n    margin: 2px 4px 0 0; }\n.rickshaw_graph .x_tick .title {\n  bottom: -15px;\n  left: -19px; }\n"
  },
  {
    "path": "python/nav/web/sass/nav/_settings.scss",
    "content": "// Assets path variables\n// Giving same name to  variables as in ../navsettings, and making them default in this folder\n$assets-url: '../../static' !default;\n$image-path: '#{$assets-url}/images' !default;\n$image-path-partials: '#{$assets-url}/images' !default;"
  },
  {
    "path": "python/nav/web/sass/nav/_table.scss",
    "content": "/* Stylesheet for tables in NAV style\n *\n * Copyright (C) 2006-2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n@import \"../navsettings\";\n\n/* --- Common --- */\n\n@mixin table-caption {\n    border-bottom: 2px solid #000;\n    font-weight: bold;\n    padding: 0.3em 0.5em;\n    text-align: left;\n    span.subtitle {\n        font-size: 0.9em;\n        font-weight: normal;\n    }\n    a {\n        text-decoration: underline;\n        background: transparent;\n    }\n}\n\ntable {\n    &.vertitable {\n        caption {\n            @include table-caption;\n        }\n        th {\n            text-align: right;\n            vertical-align: baseline;\n        }\n    }\n    &.listtable {\n        caption {\n            @include table-caption;\n        }\n    }\n    &.expand {\n        width: 100%;\n    }\n    &.hover {\n        tbody tr:hover {\n            background-color: #FFF5E0;\n        }\n    }\n    &.align-top, tr.align-top {\n        td, th {\n            vertical-align: baseline;\n        }\n    }\n    border-bottom: 1px solid #ddd;\n    ul {\n        font-size: inherit;\n        margin-bottom: 0  !important;\n        &.inline-list {\n            margin-left: 0;\n        }\n    }\n}\n\n/* Create a table using grid. Why? To make it responsive for small screens */\n.faketable {\n    background-color: #ffffff;\n    display: table;\n    font-size: 0.9em;\n    width: 100%;\n    > .caption {\n        @include table-caption;\n        display: table-caption;\n    }\n    > .row {\n        display: table-row;\n        &:nth-child(even) {\n            background-color: #f9f9f9;\n        }\n        input, button, form, .custom.dropdown, a.button {\n            margin-bottom: 0;\n        }\n        > .column, .columns {\n            line-height: 36px;\n            margin: 0.3em 0;\n            .long-content {\n                display: inline-block;\n                line-height: initial;\n            }\n        }\n        &.header_row {\n            background-color: #f5f5f5;\n            display: table-row;\n            font-weight: bold;\n            padding: 0.3em 0;\n        }\n    }\n    select {\n        margin: 0;\n    }\n    border-bottom: 1px solid #ddd;\n    margin-bottom: 1em;\n}\n/* --- List table with tablesort --- */\n\n.tablesorter {\n    th[role=\"columnheader\"] {\n        background-image: url('#{$image-path-partials}/tablesorter/bg.gif');\n        background-repeat: no-repeat;\n        background-position: center right;\n        padding-right: 1.5em;\n        cursor: pointer;\n\n        &[aria-sort=\"ascending\"] {\n            background-image: url('#{$image-path-partials}/tablesorter/desc.gif');\n        }\n        &[aria-sort=\"descending\"] {\n            background-image: url('#{$image-path-partials}/tablesorter/asc.gif');\n        }\n        &[data-sort-method=\"none\"] {\n            background-image: none;\n            cursor: default;\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/_tabs.scss",
    "content": "/* Stylesheet for tables in NAV style\n *\n * Copyright (C) 2007 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n@import \"../navsettings\";\n\n/* Mixins for tabs */\n @mixin tab_base {\n    display: none;\n    margin-top: 1em;\n    overflow: visible;\n }\n\n @mixin tab_ul {\n    font-size: 0.9em;\n    margin: 0;\n    padding: 0;\n }\n\n @mixin tab_li {\n    border-left: 1px solid #999999;\n    border-top: 1px solid #999999;\n    float: left;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    position: relative;\n    &:last-child {\n        border-right: 1px solid #999999;\n    }\n    &.tabactive {\n        position: relative;\n        z-index: 10;\n        a, a:hover {\n            background: white;\n            color: black;\n        }\n    }\n    a {\n        background: #dae1e6;\n        color: #333;\n        display: block;\n        line-height: 1.3em;\n        margin: 0;\n        padding: 0.6em 1em;\n        text-decoration: none;\n        &:hover {\n            background: #eee;\n            color: black;\n        }\n    }\n}\n\n@mixin tab_selected {\n    position: relative;\n    z-index: 10;\n    a, a:hover {\n        background: white;\n        color: black;\n    }\n}\n\n@mixin ui_tab_active {\n    position: relative;\n    z-index: 10;\n    a, a:hover {\n        background: white;\n        color: black;\n    }\n}\n\n@mixin tab_content {\n    border: 1px solid #999999;\n    clear: both;\n    margin-bottom: 1em;\n    padding: 1em;\n    position: relative;\n    top: -1px;\n}\n\n/* Normal tabs */\n.tabs {\n    @include tab_base;\n\n    > ul {\n        @include tab_ul;\n        \n        li {\n            @include tab_li;\n        }\n    }\n    > .tabcontent {\n        @include tab_content;\n    }\n}\n\n/* JQuery UI tabs NAV style */\n\n.ui-tabs {\n    @include tab_base;  \n    \n    .ui-tabs-nav { \n        @include tab_ul; \n\n        li {\n            @include tab_li;\n\n            &.ui-tabs-selected { \n                @include tab_selected; \n            }\n            &.ui-tabs-active {\n                @include ui_tab_active;\n            }\n            &.ui-state-error {\n                a {\n                    background-color: $alert-box-bg;\n                    color: $alert-box-color;\n                    &:after {\n                        font-family: FontAwesome;\n                        margin-left: 0.3em;\n                        top: 0;\n                        content: \"\\f06a\";\n                    }\n                }\n            }\n        }\n    }\n    .ui-tabs-panel { \n        @include tab_content; \n    }\n    .ui-tabs-hide { \n        position: absolute;\n        left: -10000px;\n    }\n}\n\n/*\n * Vertical tabs\n *\n * To adjust size of tabs, override the two marked styles\n */\n\n.tabs.tabs-vertical {\n    > ul {\n        border: 1px solid #999999;\n        border-right-width: 0;\n        float: left;\n        line-height: 1.6em;\n        padding: 0;\n        width: 200px; /* Override to adjust tabsize */\n        li {\n            border: none;\n            border-bottom: 1px solid #999999;\n            display: block;\n            float: none;\n            &:last-child {\n                border-bottom: none;\n            }\n        }\n    }\n    > .tabcontent {\n        clear: none;\n        margin-left: 200px; /* Override to adjust tabsize */\n        min-height: 550px; /* Override to adjust for long ass vertical tabs */\n        top: 0;\n        left: -1px;\n    }\n}\n\n/* Tabs inside tabs should have no border and no padding to make room for the most content possible */\n\n.tabs .tabs {\n    margin-top: 0;\n    overflow: auto;\n    > .tabcontent {\n        border: 0;\n        padding: 1em 0;\n    }\n}\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: \"\"; display: table; }\n.ui-helper-clearfix:after { clear: both; }\n.ui-helper-clearfix { zoom: 1; }\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n"
  },
  {
    "path": "python/nav/web/sass/nav/_tooltip.scss",
    "content": "\n\n.nav-tooltip {\n  display: inline-flex;\n  align-items: center;\n  position: relative;\n  width: fit-content;\n  box-sizing: border-box;\n  &:hover [role=\"tooltip\"] {\n    visibility: visible;\n    opacity: 1;\n    transform: translateY(8px);\n  }\n\n\n  [aria-describedby]:not(.unstyled-tooltip) {\n    border-bottom: dotted 1px #cccccc;\n    font-weight: bold;\n    cursor: help;\n    color: #333333;\n\n    &:hover, &:focus {\n      border-bottom: dotted 1px rgb(0.9, 55.35, 84.15);\n      color: #027bbb;\n    }\n  }\n\n  [role=\"tooltip\"] {\n    visibility: hidden;\n    opacity: 0;\n    position: absolute;\n    z-index: 1006;\n    font-weight: 400;\n    font-size: 0.875rem;\n    line-height: 1.3;\n    padding: 20px;\n    top: 100%;\n    left: calc(50% - 10px);\n    width: max-content;\n    max-width: 300px;\n    color: white;\n    background: #333;\n\n    &.show {\n      visibility: visible;\n      opacity: 1;\n      transform: translateY(8px);\n    }\n\n    // Animate\n    transform: translateY(0);\n    transition: opacity 0.2s ease, transform 0.2s ease;\n\n    h3, h5 {\n      color: white;\n    }\n\n    & > *:last-child {\n      margin-bottom: 0;\n    }\n\n    &:before {\n      content: '';\n      left: 5px;\n      position: absolute;\n      width: 0;\n      height: 0;\n      border: solid 5px;\n      border-color: transparent transparent #333 transparent;\n      top: -10px;\n      pointer-events: none;\n    }\n    &.tiny {\n      max-width: 200px;\n    }\n    &.small {\n      max-width: 300px;\n    }\n    &.medium {\n      max-width: 500px;\n    }\n    &.large {\n      max-width: 800px;\n    }\n  }\n  &[data-align='end'] {\n    [role=\"tooltip\"] {\n      right: calc(50% - 10px);\n      left: auto;\n    }\n    [role=\"tooltip\"]:before {\n      left: auto;\n      right: 5px;\n    }\n  }\n  &[data-position=\"fixed\"] [role=\"tooltip\"] {\n    position: fixed;\n  }\n}\n\n.nav-tooltip[data-side=\"top\"] {\n  [role=\"tooltip\"] {\n    transform: translateY(-8px);\n    &:before {\n      top: auto;\n      bottom: -10px;\n      border-color: #333 transparent transparent transparent;\n    }\n  }\n  &:not([data-position=\"fixed\"]) [role=\"tooltip\"] {\n    top: auto;\n    bottom: 100%;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/alertprofiles.scss",
    "content": "/* This product includes color specifications and designs developed by Cynthia\n * Brewer (http://colorbrewer.org/).\n */\n\n/* For highlighting shared \"all days\" time periods. */\n.shared0 { background: #cbd5e8; }\n.shared1 { background: #e6f5c9; }\n.shared2 { background: #fdcdac; }\n.shared3 { background: #fff2ae; }\n.shared4 { background: #b3e2cd; }\n.shared5 { background: #f4cae4; }\n.shared6 { background: #f1e2cc; }\n.shared7 { background: #cccccc; }\n\n.hilight .shared0 { background: #7570b3; }\n.hilight .shared1 { background: #66a61e; }\n.hilight .shared2 { background: #d95f02; }\n.hilight .shared3 { background: #e6ab02; }\n.hilight .shared4 { background: #1b9e77; }\n.hilight .shared5 { background: #e7298a; }\n.hilight .shared6 { background: #a6761d; }\n.hilight .shared7 { background: #666666; }\n"
  },
  {
    "path": "python/nav/web/sass/nav/arnold.scss",
    "content": "table ul {\n    margin: 0;\n}\n\ntable li {\n    display: inline;\n    list-style-type: none;\n    margin: 0 1em 0 0;\n}\n\nform table td.days input[type=\"text\"] {\n    width: 3em;\n}\n\nform table textarea, form table input[type=\"text\"] {\n    width: 260px;\n}\n\nform table textarea {\n    height: 3em;\n}\n\n.hidetrick {\n    position: absolute;\n    left: -9999px;\n    top: -9999px;\n}\n\n.interface_list ul {\n    list-style-type: none;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/business.scss",
    "content": "#report-list {\n    .button {\n        height: 100%;\n        h3 { color: white; }\n        p { margin-bottom: 2em; }\n        small {\n            position: absolute;\n            bottom: 1em;\n            left: 0;\n            right: 0;\n        }\n    }\n}\n\n\n/* Style for the incidents panel in availability records */ \n#record-table .incident-row td {\n    box-shadow: 0px 0px 6px #AAA inset;\n    background-color: #EEE;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/calendar.scss",
    "content": "/* Calendar style sheet for NAV\n *\n * Copyright (C) 2006-2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\ndiv.calendar {\n    table {\n    \twidth: 100%;\n        tr {\n            &.weekheader th {\n                background: #eee;\n                font-weight: bold;\n                border-left: 1px solid white;\n                border-right: 2px solid white;\n                padding: 5px;\n                padding-bottom: 0;\n            }\n            th {\n            \twidth: 14%;\n                &.month {\n                    background: #567899;\n                    color: white;\n                    border-bottom: 2px solid white;\n                    font-size: 1.2em;\n                    font-weight: bolder;\n                    padding: 0.3em 0.5em;\n                    text-align: left;\n                }\n            }\n            td {\n                border: 1px solid #999;\n                padding: 0;\n                height: 5em; /* Content will increase height if necessary. */\n                vertical-align: top;\n                &.today {\n                    background: #FFC;\n                    color: black;\n                }\n            }\n        }\n    }\n    .daynumber {\n        font-weight: bold;\n        margin-left: 0.3em;\n    }\n    .noday {\n        background-color: #dddddd;\n    }\n    .task ul {\n        list-style: none;\n    \tmargin: 0;\n\t    padding: 0;\n        li {\n            margin: 0;\n            padding: 0;\n            font-size: 0.8em;\n            a, a:hover {\n                color: black;\n                display: block;\n                text-decoration:none;\n            }\n            &.end a {\n                text-align: right;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/color.scss",
    "content": ".fg1light {\ncolor: #A6CEE3;\n}\n.fg1dark {\ncolor: #1F78B4;\n}\n.fg2light {\ncolor: #B2DF8A;\n}\n.fg2dark {\ncolor: #33A02C;\n}\n.fg3light {\ncolor: #FB9A99;\n}\n.fg3dark {\ncolor: #E31A1C;\n}\n.fg4light {\ncolor: #FDBF6F;\n}\n.fg4dark {\ncolor: #FF7F00;\n}\n.fg5light {\ncolor: #CAB2D6;\n}\n.fg5dark {\ncolor: #6A3D9A;\n}\n\n.bg1light {\nbackground-color: #A6CEE3;\n}\n.bg1dark {\nbackground-color: #1F78B4;\n}\n.bg2light {\nbackground-color: #B2DF8A;\n}\n.bg2dark {\nbackground-color: #33A02C;\n}\n.bg3light {\nbackground-color: #FB9A99;\n}\n.bg3dark {\nbackground-color: #E31A1C;\n}\n.bg4light {\nbackground-color: #FDBF6F;\n}\n.bg4dark {\nbackground-color: #FF7F00;\n}\n.bg5light {\nbackground-color: #CAB2D6;\n}\n.bg5dark {\nbackground-color: #6A3D9A;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/custom.scss",
    "content": "/* Custom global styles */\n@import '../navsettings';\n\n/* NAV logo top-bar style */\n.top-bar {\n    .name h1 {\n        a {\n            padding: 0;\n            .nav-logo {\n                position: relative;\n                height: 28px;\n                top: -2px;\n            }\n        }\n    }\n}\n\n@media #{$medium-up} {\n    #navbar-search-form { width: 400px; }\n    .remove-widget { max-width: 250px; }\n}\n\n#navbar-search-form {\n  top: 7px;\n  button, input {\n    top: 0;\n  }\n}\n\n#navbar-search-form-mobile {\n  button {\n    // Override foundation top-bar style\n    top: 0;\n  }\n}\n.search-input-wrapper {\n  display: flex;\n  input, button {\n    height: 1.8rem;\n  }\n  input {\n    max-width: 250px;\n  }\n}\n#navbar-search-results {\n  min-width: 100%;\n  width: fit-content;\n  max-height: 500px;\n  overflow-y: auto;\n  transform: none;\n\n  .result-group {\n    display: flex;\n    flex-direction: column;\n\n    button {\n      align-self: flex-end;\n    }\n\n    .result-item {\n      display: block;\n      width: 100%;\n      padding: 2px 0;\n    }\n    .result-item, .truncate-count {\n      border-top: 1px solid #ccc;\n      &:first-child {\n        border-top: none;\n      }\n    }\n  }\n\n  & > *:last-child {\n    margin-bottom: 0;\n  }\n}\n\n@media #{$small-only} {\n    .remove-widget { width: 100%; }\n}\n\n/* MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP  */\n#megadroptoggler {\n    i {\n        color: rgba(255, 255, 255, 0.4);\n        font-size: 16px;\n    }\n}\n\n#megadrop {\n    background-color: white;\n    border-bottom: 5px solid #027BBB;\n    position: absolute;\n    z-index: 10000;\n    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);\n    ul {\n        margin-top: 1em;\n        li {\n            margin: 1em 0;\n            a { color: black; }\n        }\n    }\n    img {\n        height: 24px;\n        width: 24px;\n        position: relative;\n        top: -2px;\n    }\n    h5 { margin-top: 1.3em; }\n}\n\n#toolboxdropdown {\n    img {\n        height: 48px;\n        width: 48px;\n    }\n}\n\n/* Dashboard control center */\n\n#widgets-actions {\n    box-shadow: 0px 3px 5px grey;\n    position: absolute;\n    right: 0;\n    top: 0;\n    width: 40px;\n    z-index: 1000;\n    .widget-action {\n        color: white;\n        background-color: $topbar-bg-color;\n        height: 40px;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        border-bottom: 1px solid gainsboro;\n        &:hover {\n            background-color: $primary-color;\n            cursor: pointer;\n        }\n        &:last-child {\n          border-bottom: none;\n        }\n    }\n    .export-action {\n      width: 100%;\n      a.widget-action {\n        width: 100%;\n        border-bottom: none;\n      }\n    }\n}\n\n#dropdown-dashboard-settings.popover {\n  width: 100%;\n  .widget-action {\n    border-bottom: none;\n  }\n  .settings-popover {\n    width: 800px;\n  }\n  .shared-settings-popover {\n    width: 600px;\n  }\n  .row {\n    margin-bottom: 1em;\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n  #toggle-dashboard-shared-form {\n    * {\n      margin-bottom: 0.5rem;\n    }\n    *:last-child {\n      margin-bottom: 0;\n    }\n  }\n}\n\n.dashboard-nav-wrapper {\n  display: flex;\n  align-items: start;\n  justify-content: space-between;\n}\n\n.dashboard-meta-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  flex-shrink: 0;\n}\n\n.badge {\n    padding: 0.2rem 0.25rem;\n    font-size: 0.75rem;\n    background: #e0e0e0;\n    border: 1px solid #ccc;\n    display: flex;\n    align-items: center;\n    gap: 0.25rem;\n\n    &.white {\n      background: #fff;\n      border-color: #bbb;\n    }\n}\n\n#dashboard-settings-feedback {\n  * {\n    margin-bottom: 0;\n  }\n}\n\n#dashboard-search-form {\n  .description {\n    color: lighten(#333, 20%);\n  }\n}\n\n#dashboard-search-results {\n  ul {\n    margin: 0;\n  }\n  .search-result-item {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    margin-bottom: 0.5rem;\n    padding: 0.5rem;\n    &:last-child {\n      margin-bottom: 0;\n    }\n\n    * {\n      margin-bottom: 0;\n    }\n  }\n\n  .search-result-name {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    .dashboard-owner {\n      font-size: 0.8em;\n      color: lighten(#333, 20%);\n    }\n  }\n}\n\n/* Padding for all pages */\n\n.top-bar, #megadrop {\n    padding-left: $global-padding;\n    padding-right: $global-padding;\n}\n\n.navbody, .breadcrumbs {\n    padding-left: $body-padding;\n    padding-right: $body-padding;\n}\n\n@media #{$small-only} {\n    footer, .top-bar, #megadrop {\n        padding-left: $global-padding-small;\n        padding-right: $global-padding-small;\n    }\n\n    .navbody, .breadcrumbs {\n        padding-left: $body-padding-small;\n        padding-right: $body-padding-small;\n    }\n}\n\n.navbody {\n    margin-bottom: 1em;\n}\n\n.breadcrumbs {\n    padding-top: 0.5625em;\n    padding-bottom: 0.5625em;\n}\n\n/* Background-color for main display elements  */\n.tabs .tabcontent, .ui-tabs .ui-tabs-panel, .accordion .tabactive {\n    background-color: #fff;\n}\n\nfieldset legend {\n    background-color: transparent;\n}\n\n\n.full-width {\n    width: 100%;\n}\n\n.break-word { word-break: break-all; }\n.float-clear { clear: both; }\n.hidden {display: none; }\n.notvisible {visibility: hidden; }\n\n/* Sudoer bar is the bar that appears when you switch users from the\n   'User Administration' page */\n.info-bar {\n    background-color: #d3d7cf;\n    border-bottom: 1px solid #555753;\n    padding-left: 2em;\n    line-height: 3em;\n    form, input {\n        margin: 0;\n    }\n    img {\n        vertical-align: middle;\n    }\n}\n\n/* Custom form styles */\n\ntable form, table input[type=\"text\"], table input[type=\"password\"],\ntable input[type=\"date\"], table input[type=\"datetime\"], table input[type=\"checkbox\"],\ntable input[type=\"datetime-local\"], table input[type=\"month\"],\ntable input[type=\"week\"], table input[type=\"email\"],\ntable input[type=\"number\"], table input[type=\"search\"], table select,\ntable input[type=\"tel\"], table input[type=\"time\"], table input[type=\"url\"],\ntable textarea, form.custom table .custom.dropdown {\n    margin: 0;\n}\n\ntable .button {\n    margin: 0;\n}\n\nfieldset.secondary {\n    background-color: #f2f2f2;\n    legend {\n        background-color: transparent;\n    }\n}\n\n/* Styles regarding use of OpenLayers maps */\n.mapwrapper {\n    margin: 1em 0;\n    img {\n        max-width: none; /* Openlayers maps need this to override a foundation style to display properly */\n    }\n}\n\n.smallmap {\n    height: 400px;\n    width: 600px;\n}\n\n.navletmap {\n    height: 400px;\n    width: auto;\n    position:relative;\n}\n\n.bigmap {\n    height: 600px;\n}\n\n\n/* jquery ui tabs */\n\nul.ui-tabs-nav {\n    font-size: 0.9em;\n}\n\n\n/* List styles */\n\nul.errorlist {\n    background-color: $alert-color;\n    color: white;\n    font-size: .7rem;\n    font-style: italic;\n    list-style-type: none;\n    margin: 0;\n    padding: 0.375rem 0.5625rem 0.5625rem;\n}\n\nsmall.error ul.errorlist {\n    margin-left: 0;\n}\n\nul.clean, ol.clean, dl.clean {\n    margin: 0;\n    list-style-type: none;\n}\n\nli.list-header {\n    background: #567899;\n    color: white;\n    font-weight: bold;\n    padding: 0.3em 0.5em;\n    text-align: left;\n}\n\n/* Lists inside vertical tables must align properly */\n.vertitable {\n    ul, ol, dl {\n        line-height: inherit;\n        li {\n            margin-bottom: 2px;\n        }\n        li:last-of-type {\n            margin-bottom: 0;\n        }\n    }\n}\n\n\n/* This class should be used with the .inline-list class */\nul.comma-separated {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: baseline;\n    li {\n        margin-left: 0;\n        &:after { content: \",\\00A0\" }\n        &:last-child:after { content: \"\" }\n    }\n    margin-left: 0;\n}\n\n/* Alert-box style */\n\n.alert-box ul, .error ul {\n    margin-bottom: 0;\n}\n\n\n/* highlighting */\n\n.highlight {\n\tbackground: #FFF7BC !important;\n}\n.highlight .highlight {\n\tbackground: #FEE391;\n}\n.highlight .highlight .highlight {\n\tbackground: #FEC44F;\n}\n\n.logo-text {\n    color:white;\n    font-size:28px;\n    position:relative;\n    top:3px;\n}\n\n\n/* Add margin to font awesome in buttons */\nbutton, .button, a {\n    > i {\n        &.pad-left {\n            margin-left: 0.4rem;\n        }\n        &.pad-right {\n            margin-right: 0.4rem;\n        }\n    }\n}\n\n/* Form styles */\n\nform.inline-form {\n    display: inline-block;\n    > * {\n        display: inline-block;\n        width: auto;\n    }\n    > .custom.dropdown {\n        display: inline-block;\n        width: auto;\n    }\n    input[type=submit] {\n        font-size: 0.875em;\n        padding-top: 0;\n        padding-bottom: 0;\n        text-align: center;\n        line-height: 2.125em;\n        height: 2.3125em;\n    }\n}\n\nform label .fa {\n    line-height: 1.5em;\n}\n\n/* Limit the vertical size of an element and display a scroll-bar instead */\n.limit-size {\n    max-height: 200px;\n    overflow: auto;\n}\n\n/*\n * Make sure the arrow in select boxes does not overflow the text.\n * 21 px refers to the size of the background-image that Foundation uses.\n */\nselect {\n    padding-right: 21px;\n}\n\n/* Reveal modal should always be as high as possible */\n//.reveal-modal {\n//    top: 0px;\n//}\n/* Alert icon */\n.deleteicon {\n    color: #d2322d;\n}\n\n\n/* NAV header */\n.nav-header {\n    h2 {\n        margin-bottom: 0;\n    }\n    h5 {\n        position: relative;\n        font-size: 1em;\n        top: -10px;\n        a {\n            margin-right: .2rem;\n        }\n    }\n}\n\n/* Debug */\n#debug {\n    background-color: #ffffff;\n}\n\n/* Foundation does strange things with select multiple */\nselect[multiple] {\n    background: #FFFFFF;\n    height: auto;\n}\n\n.graph-toggler {\n    cursor: pointer;\n}\n\n\n/* Tooltip related stylings */\n.tooltip > p {\n    font-size: inherit;\n    line-height: inherit;\n}\n\n.tooltip h3,\n.tooltip > h5\n{\n    color: white;\n}\n\n[data-tooltip] {\n    cursor: help;\n}\n\n\n/* Used for adding link to documentation from subheaders. For instance used in\n * Cabling and Patch-pages in SeedDB\n */\n.documentation-subheader {\n    font-size: .8rem;\n    line-height: 2em;\n    position: relative;\n    top: -1rem;\n}\n\n\n/**\n * Fullscreen styles\n *\n * Force browsers to resize fullscreen element to cover viewport\n * For some MOTHERFUCKING reason it will not apply if the rules are combined.\n */\n:-ms-fullscreen {\n    position: fixed;\n    width: 100%;\n    height: 100% !important;\n    top: 0;\n    background: none;\n}\n\n:-webkit-full-screen {\n    /* position: fixed; */\n    width: 100% !important;\n    height: 100% !important;\n    top: 0;\n    background: none;\n}\n\n\n#jqstooltip {\n    box-sizing: content-box;\n}\n\n\n/**\n * Fix padding for buttons in graphitegraphs\n */\n.graphitegraph button { margin-bottom: 0; }\n\n\n/* Allauth element styles */\n.mfa-panels {\n    section + section {\n        margin-top: 1.5rem;\n    }\n\n    .label.success {\n        color: white;\n    }\n}\n\n.allauth-actions {\n    list-style: none;\n    display: flex;\n    gap: 0.5rem;\n    margin: 0;\n    padding: 0;\n\n    .button {\n        margin-bottom: 0;\n    }\n}\n\n.provider-list {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0.5rem;\n\n    .button {\n        margin: 0;\n\n        &.disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n    }\n}\n\n.connected-accounts {\n    list-style: none;\n    margin: 0 0 1rem;\n    padding: 0;\n    max-width: 30rem;\n\n    .connected-account {\n        padding: 0;\n\n        label {\n            display: flex;\n            align-items: center;\n            gap: 0.75rem;\n            padding: 0.75rem;\n            border: 1px solid #ddd;\n            cursor: pointer;\n            margin: 0;\n\n            &:hover {\n                background-color: #f5f5f5;\n            }\n        }\n\n        &:first-child label {\n            border-radius: 3px 3px 0 0;\n        }\n\n        &:last-child label {\n            border-radius: 0 0 3px 3px;\n        }\n\n        &:only-child label {\n            border-radius: 3px;\n        }\n\n        & + .connected-account label {\n            border-top: none;\n        }\n\n        input[type=\"checkbox\"] {\n            margin: 0;\n        }\n\n        .connected-account-info {\n            display: flex;\n            flex-direction: column;\n            gap: 0.15rem;\n        }\n\n        .connected-account-detail {\n            font-size: 0.85em;\n            color: #666;\n        }\n    }\n}\n\n/* Geo is a microformat standard\n * https://en.wikipedia.org/wiki/Geo_(microformat)\n */\n.geo:before {\n    font-family: FontAwesome;\n    content: \"\\f0ac\";\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/devicehistory.scss",
    "content": "ul.email_message li {\n\tborder: 1px solid #729FCF;\n\tbackground-color: #acf;\n}\n\nli.sms_message {\n\tclear: both;\n    .expand_link {\n        float: right;\n    }\n    ul {\n        clear: both;\n    }\n}\n\ndiv.searchparams {\n\theight: 12em;\n\toverflow: auto;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/errorpages.scss",
    "content": "body, html {\n\tbackground:#e9e9e9;\n}\n\ncode {\n\tfont-size:14px;\n\tfont-weight:normal;\n}\n\n.hero {\n\tpadding-left:50px;\n\tbackground:#01547F;\n\tcolor:white;\n\n\th1 {\n\t\tcolor:white;\n\t\tfont-weight:600;\n\t\tfont-family: \"Open Sans\";\n\t\tfont-size:74px;\n\t}\n\n\tp {\n\t\tfont-size:20px;\n\t\tfont-weight:600;\n\t}\n}\n\n.info {\n\tpadding:50px;\n\n\t.frontpage-button {\n\t\tmargin-top:20px;\n\t}\n}\n\n.traceback-info {\n\tmargin-top:10px;\n\tbackground:white;\n\tpadding:20px;\n\tcolor:#333;\n}"
  },
  {
    "path": "python/nav/web/sass/nav/geomap.scss",
    "content": "@import \"settings\";\n\n#map {\n    height: 75vh;\n}\n\n#navbody.loading, #navbody.loading #map {\n    cursor: progress;\n}\n\n#legend {\n    table {\n        border: none;\n        background: none;\n        tr {\n            background: inherit;\n            th {\n                text-decoration: underline;\n            }\n            td {\n                height: 1.3em;\n                padding: 0 1em 0 0;\n            }\n        }\n        .colorbox {\n            width: 1em;\n            height: 1em;\n            border: thin solid black;\n\n        }\n        .edge-size-indicator {\n            background-color: black;\n            width: 80px;\n        }\n        .node-size-indicator {\n            background-color: black;\n        }\n\n    }\n}\n\n#map-container img {\n    max-width: none;\n}\n\n#time-panel .panel {\n    margin-bottom: 0;\n}\n\n#time-navigation-selected-time {\n    font-weight: bold;\n    font-size: 120%;\n}\n\n#time-navigation-prev-jump.enabled, #time-navigation-prev.enabled,\n#time-navigation-next.enabled, #time-navigation-next-jump.enabled,\n#time-navigation-last.enabled, #time-navigation-up.enabled {\n    cursor: pointer;\n}\n\n#time-navigation p {\n    margin-bottom: 0;\n}\n\n#time-navigation-prev-jump.enabled:before {\n    content: url('#{$assets-url}/images/geomap/left2.png');\n}\n\n#time-navigation-prev-jump.disabled:before {\n    content: url('#{$assets-url}/images/geomap/left2_grey.png');\n}\n\n#time-navigation-prev.enabled:before {\n    content: url('#{$assets-url}/images/geomap/left1.png');\n}\n\n#time-navigation-prev.disabled:before {\n    content: url('#{$assets-url}/images/geomap/left1_grey.png');\n}\n\n#time-navigation-next.enabled:before {\n    content: url('#{$assets-url}/images/geomap/right1.png');\n}\n\n#time-navigation-next.disabled:before {\n    content: url('#{$assets-url}/images/geomap/right1_grey.png');\n}\n\n#time-navigation-next-jump.enabled:before {\n    content: url('#{$assets-url}/images/geomap/right2.png');\n}\n\n#time-navigation-next-jump.disabled:before {\n    content: url('#{$assets-url}/images/geomap/right2_grey.png');\n}\n\n#time-navigation-last.enabled:before {\n    content: url('#{$assets-url}/images/geomap/right_last.png');\n}\n\n#time-navigation-last.disabled:before {\n    content: url('#{$assets-url}/images/geomap/right_last_grey.png');\n}\n\n#time-navigation-up.enabled:before {\n    content: url('#{$assets-url}/images/geomap/up1.png');\n}\n\n#time-navigation-up.disabled:before {\n    content: url('#{$assets-url}/images/geomap/up1_grey.png');\n}\n\n#time-navigation-down.disabled {\n    display: none;\n}\n\n#time-navigation-calendar {\n    border: 1px solid black;\n    margin-top: 1.1em;\n}\n\n#time-navigation-calendar-month {\n    border-collapse: separate;\n}\n\n#time-navigation-calendar.enabled .selected {\n    background-color: #999999;\n}\n\n#time-navigation-calendar.enabled .selectable {\n    cursor: pointer;\n    color: blue;\n}\n\n#time-navigation-calendar.enabled .selectable:hover,\n#time-navigation-calendar.enabled .selectable:hover .selectable {\n    background-color: #6666FF;\n    color: white;\n}\n\n#time-navigation-calendar-body td.today {\n    border: 1px dashed black;\n}\n\n#time-navigation-calendar.disabled {\n    background-color: #CCCCCC;\n    color: #999999;\n}\n\n#time-navigation-calendar td {\n    padding: .1em .5em;\n}\n\n#time-navigation-calendar-head-row td {\n    text-align: center;\n}\n\n#time-navigation-calendar-body td {\n    text-align: right;\n}\n\n.place-popup, .network-popup {\n    font-size: 1.1em;\n    table {\n        width: 100%;\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/index.scss",
    "content": "/* Styles for / */\n\n#index-leftcontent {\n    float: left;\n    width: 600px;\n}\n\n@media screen and (max-width: 900px) {\n\n    #index-leftcontent {\n        width: 100%;\n    }\n\n    div.boxes {\n        display: table;\n        width: 100%;\n    }\n\n    div.boxes table {\n        display: table-cell;\n        width: auto;\n        border-right: 1px solid white;\n    }\n\n    div.boxes table:last-child {\n        border: none;\n    }\n\n    div.boxes table th {\n        white-space: nowrap;\n    }\n\n}\n\n/* Smartphone landscape */\n@media only screen\nand (max-width : 480px) {\n    div.boxes {\n        display: none;\n    }\n}\n\n\n/* Dashboard and widget stuff */\n\n#dropdown-dashboard-add, #dropdown-dashboard-settings {\n    .popover-content {\n      width: 300px;\n      form {\n          margin-bottom: 1em;\n      }\n      input, select, .button {\n          margin-bottom: 0;\n      }\n      .dashboard-title { cursor: pointer; }\n      .dashboard-title i { display: none; }\n      .dashboard-title:hover i { display: inline-block; }\n      li {\n          margin: 0;\n      }\n    }\n}\n\n#form-rename-dashboard {\n    display: flex;\n    label { overflow: hidden; }\n    input[type=text] { width: 100%; }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/info_room.scss",
    "content": "\n#netboxes .dataTables_wrapper {\n    display: inline-block;\n    margin-bottom: 1em;\n    margin-right: 3em;\n    vertical-align: top;\n}\n\ntable.compact {\n    border-collapse: collapse;\n    margin-bottom: 0.5em;\n    font-size: 0.9em;\n}\n\ntable.cluttered tr td {\n    background-color: #CCDDEE;\n    padding: 0.2em;\n\n}\n\n.center-content {\n    text-align: center;\n}\n\n.pointer {\n    cursor: pointer;\n}\n\n.help {\n    cursor: help;\n}\n\n.brighten {\n    color: #777;\n}\n\nimg.textbottom {\n    vertical-align: text-bottom;\n}\n\n/* Drag styles */\n.drag {\n    cursor: grab;\n    cursor: -moz-grab;\n    cursor: -webkit-grab;\n}\n\n.drag:active {\n    cursor: grabbing;\n    cursor: -moz-grabbing;\n    cursor: -webkit-grabbing;\n}\n\n/* Image cards */\n.imagecard {\n    background-color: white;\n    border: 1px solid #DDDDDD;\n    padding: 0.5em 1em;\n    img {\n        width: 100%;\n    }\n    .actions {\n        overflow: hidden;\n        i {\n            margin-left: 0.5em;\n            cursor: pointer;\n        }\n    }\n    .meta {\n        font-size: 0.7em;\n    }\n    .heading {\n        border-bottom: 1px solid #DDDDDD;\n        input {\n            margin-bottom: 0;\n        }\n    }\n}\n\n/* Ensure lightbox captions don't overlap with the image */\n.visible-img img {\n    padding-bottom: 50px;\n}\n\n/* Prevent OpenStreetmap to show through the image clearing */\n.clearing-blackout {\n    z-index: 1010;\n}\n\n#room_map {\n    height: 300px;\n    width: auto;\n}\n\n#uploadform {\n    display: inline-block;\n}\n\n.user-feedback {\n    display: inline-block;\n    .alert-box {\n        display: inline-block;\n        padding-top: 0.5rem;\n        padding-bottom: 0.5rem;\n    }\n}\n\n/* Custom styling for netbox interfaces last seen */\n\n#lastseenfilter .form-inline {\n  display: flex;\n  align-items: baseline;\n  gap: 0.5rem;\n}\n\n/* Keep inputs no wider than is necessary */\n#lastseenfilter .form-inline select,\n#lastseenfilter .form-inline input[type=\"number\"],\n#lastseenfilter .form-inline input[type=\"text\"] {\n  max-width: 7rem;\n  flex: 0 0 auto;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/interface_browser.scss",
    "content": "@import '../navsettings';\n\n.navbody .dataTables_wrapper .dataTables_paginate {\n    float: none;\n    padding: 0;\n    .paginate_button { margin: 0; }\n}\n\n#portlist-table_wrapper {\n    display: inline-block;\n}\n\n#portlist-controls {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n}\n\n#columns-controls > div {\n    margin-right: 1em;\n}\n\n#column-toggler {\n    display: none;\n    position: relative;\n    width: 180px;\n    .toggle-header {\n        cursor: pointer;\n        margin: 0;\n        width: 100%;\n    }\n    .toggle-container {\n        background-color: white;\n        border: 2px solid $dropdown-border-color;\n        padding: 1em;\n        position: absolute;\n        width: 100%;\n        z-index: 10;\n        > ul {\n            list-style: none;\n            margin: 0;\n            > li {\n                margin-bottom: .3rem;\n                > label {\n                    display: flex;\n                    align-items: center;\n                    input { margin: 0 .3rem 0 0 ; }\n                }\n            }\n        }\n    }\n}\n\n#filters {\n    display: flex;\n    > * { margin-right: 1em; }\n    .label-netbox-filter { width: 20em; }\n    .label-vlan-filter { width: 4em; }\n    .label-query-filter { width: 20em; }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/ipam.scss",
    "content": "@import \"../navsettings\";\n\n// For grid-column, grid-row mixins\n@import \"../foundation/components/grid\";\n\n$ipam-text-color: #fff;\n\n$ipam-200: #CFD8DC;\n$ipam-400: #78909C;\n$ipam-500: #607D8B;\n$ipam-600: #546E7A;\n$ipam-700: #455A64;\n\n.toggleAdvanced {\n    font-size: 0.8em;\n}\n\n/* Style the element that contains every subtree. This means that every tree\nwith children are more and more \"padded\" */\n.prefix-tree-children-container > div {\n    padding: 1.5em;\n}\n\n// Blur all other nodes when a single node is opened\n.prefix-tree-children {\n    .prefix-tree-item {\n        opacity: 1.0;\n    }\n}\n\n.has_no_open_nodes {\n    .prefix-tree-item, .prefix-tree-item-closed {\n        opacity: 1.0 !important;\n    }\n}\n\n.has_open_nodes {\n    .prefix-tree-item.prefix-tree-item-open {\n        opacity: 1.0;\n    }\n    .prefix-tree-item-closed {\n        opacity: 0.25;\n    }\n    .prefix-tree-item:hover {\n        opacity: 1.0;\n    }\n}\n\n.prefix-tree-item-content-data {\n    padding: 20px;\n    background: #fff;\n    box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);\n    border-bottom: 10px solid $ipam-700;\n}\n\n.prefix-children-header {\n    overflow: auto;\n}\n\n.tree-control {\n    select {\n      float: right;\n        max-width: 200px;\n    }\n    button {\n        font-size: 0.8em;\n        margin-bottom: 0;\n    }\n}\n\n.prefix-tree-item-title {\n    background: $ipam-500;\n    color: $ipam-text-color;\n\n    a {\n        color: inherit;\n    }\n\n    a:hover,\n    a:visited {\n        color: inherit;\n    }\n\n    &:visited,\n    &:active,\n    &:link {\n        color: $ipam-text-color;\n    }\n\n    &:hover {\n        color: $ipam-text-color;\n        background: $ipam-600;\n    }\n\n    .ip {\n      display: flex;\n      align-items: center;\n      span.number-of-children {\n        font-size: 60%;\n        color: #333;\n        background: #90A4AE;\n        margin-left: 0.5em;\n        margin-bottom: 0;\n      }\n    }\n\n    \n\n}\n\n.prefix-tree-item {\n    border-bottom: 1px solid $ipam-600;\n}\n\n.prefix-tree-item-content {\n    background: $ipam-200 !important;\n    & > & {\n        background: $ipam-700 !important;\n    }\n}\n\n.prefix-metadata {\n    margin-bottom: 20px;\n}\n\nul.accordion {\n    margin-top: 1rem;\n    margin-left: 0;\n}\n\n.prefix-tree-flash {\n    margin-top: 20px;\n}\n\n// Container for tooltips when hovering a node in the prefix map/allocator\ndiv.prefix-tooltip {\n  position: absolute;\n  text-align: center;\n  padding: 10px;\n  font: 12px sans-serif;\n  background: #222;\n  color: #f0f0f0;\n  border: 0px;\n  border-radius: 8px;\n  pointer-events: none;\n}\n\n// Main flash msg container for the app\n#ipam-flash {\n  max-width: 350px;\n}\n\n// Search panel, forms etc. for prefix tree\n.prefix-tree-control {\n}\n\n.allocation-tree {\n    allocation-tree-info {\n        margin-top: 20px;\n    }\n    .allocation-tree-reserve-form {\n        max-width: 350px;\n    }\n}\n\n\n// === Own accordion implementation\n\n// main container\n.prefix-tree-children {\n    margin-left: 0;\n    li {\n        margin-left: 0;\n    }\n}\n\n.prefix-tree-item {\n    display: border-box;\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n\n    .prefix-tree-item-title {\n        h3 { margin: 0; }\n        padding: 10px 20px;\n        width: 100%;\n        display: block;\n    }\n}\n\n.prefix-tree-query {\n    width: 100%;\n    margin-bottom: 0.5em;\n}\n\n.prefix-tree-item-content {\n    display: none;\n}\n\n.prefix-item-open {\n    &.prefix-tree-item-title {\n        background: $ipam-500;\n        color: $ipam-text-color;\n    }\n    &.prefix-tree-item-content {\n        display: block;\n    }\n}\n\n// == BREAKPOINTS STUFF\n\n.prefix-graphs {\n    display: block;\n    font-size: 0.750em;\n    margin-top: 20px;\n}\n\n// Avoid usage graph being too tall on small screens\n.prefix-graphs svg {\n    height: 15px;\n}\n\n.ipam-sidebar .sidebar-wrapper {\n    padding: 10px 20px;\n}\n\n\n@media #{$large-up} {\n\n    .ipam-sidebar .sidebar-wrapper {\n        padding: 0;\n    }\n\n    .prefix-tree-item-title span {\n        display: inline-block;\n    }\n\n    .prefix-graphs {\n        margin: 0;\n        float: right;\n        display: inline-block;\n        .usage-graph, .allocation-graph {\n            display: inline-block;\n            max-width: 150px;\n        }\n        .usage-graph {\n            margin-right: 10px;\n        }\n    }\n\n}\n\n// For allocation tree\nsvg.matrix g.matrix-subnet text > tspan {\n    text-anchor: middle;\n}\n\nsvg.matrix g.matrix-subnet {\n    cursor: pointer;\n}\n\n.axis path {\n    display: none;\n}\n\n.axis line {\n    shape-rendering: crispEdges;\n    stroke: #000;\n}\n\n.axis .minor line {\n    stroke: #777;\n    stroke-dasharray: 2,2;\n}\n\n\n\n// Semantic layout classes\n\n@media #{$large-up} {\n    .ipam {\n        @include grid-row();\n    }\n\n    .ipam-sidebar {\n        @include grid-column(3);\n        div.row {\n            @include grid-row();\n        }\n    }\n\n    // flash button, TODO change name to something not stupid\n    #mybtn {\n        @include grid-column(12);\n    }\n\n    #prefix-tree {\n        @include grid-column(9);\n    }\n\n    .prefix-tree-control {\n\n        &-checkboxes {\n            div { @include grid-column(12, $collapse: true); }\n        }\n\n        &-timespan {\n            div { @include grid-column(6, $collapse: true); }\n        }\n\n        &-search {\n            input {\n                @include grid-column(12, $collapse: true);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/ipdevinfo.scss",
    "content": "/* Subsystem stylesheet for NAV\n *\n  * Copyright 2006-2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV)\n *\n * NAV is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n * NAV is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with NAV; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n *\n * Authors: Stein Magnus Jodal <stein.magnus.jodal@uninett.no>\n *\n */\n\n @import '../foundation/functions';\n\n/* Device details table */\n\n\n.multitable {\n    overflow: auto;\n}\n\n.multitable > table {\n    float: left;\n    margin-right: 1em;\n}\n\n#service-matrix-links {\n    float: right;\n}\n\n.indent {\n    text-indent: 1em;\n}\n.nowrap {\n\twhite-space: nowrap;\n}\n\n/* Status table */\nul {\n    &.normalize-font-size{\n        font-size: rem-calc(14);\n    }\n}\n\n/* Port view */\n.module {\n\tborder: 0px;\n\twhite-space: nowrap;\n}\n.module td {\n\tline-height: 1.5em;\n\ttext-align: center;\n\tvertical-align: middle;\n}\n\n.port {\n\tbackground: white;\n\tborder: 1px solid #666;\n}\n.port a {\n\tcolor: black;\n\tdisplay: block;\n\tpadding: 0.3em 0.5em;\n\ttext-align: center;\n\ttext-decoration: none;\n\tvertical-align: middle;\n}\n\n/* Port legend box */\n#portlegend table th, #portlegend table td {\n\tpadding: 0.5em;\n}\n#portlegend table td {\n\tpadding-right: 1em;\n}\n#portlegend table td .port {\n\tmargin-right: 0.5em;\n\tpadding: 0.2em;\n}\n\n.module, #portlegend {\n    /* Speed legend */\n    .passive {\n        background: #ccc;\n    }\n    .disabled {\n        background: #c99;\n    }\n    .Mb10 {\n        background: #deebf7;\n    }\n    .Mb100 {\n        background: #c6dbef;\n    }\n    .Mb1000 {\n        background: #aecae1;\n    }\n    .Mb10000 {\n        background: #8baed6;\n    }\n    /* Frame legend */\n    .hduplex {\n        border: 1px dashed #666;\n    }\n    .fduplex {\n        border: 1px solid #666;\n    }\n    .trunk {\n        border: 3px double #666;\n    }\n    .blocked {\n        text-decoration: line-through;\n    }\n\n    /* Activity legend */\n    .inactive {\n        border: 1px dashed #666;\n    }\n    .active {\n        border: 1px dashed #333;\n    }\n    .link {\n        border: 1px solid #666;\n    }\n}\n\n\n/* Service table */\n.status_up {\n\tbackground: #91cf60;\n\tcolor: black;\n}\n.status_down {\n\tbackground: #fc8d59;\n\tcolor: black;\n}\n.status_shadow {\n\tbackground: #fee090;\n\tcolor: black;\n}\n.status_maintenance {\n\tbackground: #eeeeee;\n\tcolor: black;\n}\n\n.hidden {\n    display: none;\n}\n\n.cell-center {\n    text-align: center;\n}\n\n.cell-right {\n    text-align: right;\n}\n\ntable.module {\n  border-collapse: separate;\n  border-spacing: 0.2em;\n}\n\ntable.module td div.portcell {\n    position: relative;\n    width: 100%;\n}\n\ntable.module td div.portcell span.oplayer {\n    position: absolute;\n    right: -6px;\n    bottom: -13px;\n    font-size: 0.8em;\n}\n\n#metrictabs.ui-tabs, #moduletabs.ui-tabs {\n\tdisplay:block;\n}\n\n#portmetrics {\n    strong {\n        margin-left: 0.4em;\n    }\n    .graphitegraph {\n        margin-left: 1.5em;\n        img {\n            border: 1px solid #DDDDDD;\n        }\n    }\n    .floatme {\n        background: #ffffff;\n        border-bottom: 2px solid white;\n        border-right: 2px solid white;\n        position: fixed;\n        top: 0px;\n        z-index: 200;\n        button, .button {\n            margin-bottom: 0;\n        }\n        .button-group:last-child {\n            margin-right: 0;\n        }\n    }\n}\n\n#poe ul {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n    li {\n        padding: 20px;\n        list-style-type: none;\n    }\n}\n\n.fixed-alert {\n    position: fixed;\n    z-index: 10;\n    right: 1rem;\n    bottom: 0.5rem;\n}\n\n.refresh-button {\n    height: 100%;\n    width: 100%;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/jquery-ui-1.8.21.custom.scss",
    "content": "/*!\n * jQuery UI CSS Framework 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n */\n\n@import \"settings\";\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: \"\"; display: table; }\n.ui-helper-clearfix:after { clear: both; }\n.ui-helper-clearfix { zoom: 1; }\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; width: 16px; height: 16px; background-image: url('#{$assets-url}/images/jqueryui/ui-icons_222222_256x240.png'); }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #aaaaaa url('#{$assets-url}/images/jqueryui/ui-bg_flat_0_aaaaaa_40x100.png') 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }\n\n\n/*!\n * jQuery UI CSS Framework 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\n */\n\n\n/* Component containers\n----------------------------------*/\n/* .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } */\n.ui-widget .ui-widget { font-size: 1em; }\n.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }\n.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url('#{$assets-url}/images/jqueryui/ui-bg_flat_75_ffffff_40x100.png') 50% 50% repeat-x; color: #222222; }\n/*.ui-widget-content a { color: #222222; }*/\n.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url('#{$assets-url}/images/jqueryui/ui-bg_highlight-soft_75_cccccc_1x100.png') 50% 50% repeat-x; color: #222222; font-weight: bold; }\n.ui-widget-header a { color: #222222; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url('#{$assets-url}/images/jqueryui/ui-bg_glass_75_e6e6e6_1x400.png') 50% 50% repeat-x; font-weight: normal; color: #555555; }\n.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url('#{$assets-url}/images/jqueryui/ui-bg_glass_75_dadada_1x400.png') 50% 50% repeat-x; font-weight: normal; color: #212121; }\n.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }\n.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url('#{$assets-url}/images/jqueryui/ui-bg_glass_65_ffffff_1x400.png') 50% 50% repeat-x; font-weight: normal; color: #212121; }\n.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }\n.ui-widget :active { outline: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url('#{$assets-url}/images/jqueryui/ui-bg_glass_55_fbf9ee_1x400.png') 50% 50% repeat-x; color: #363636; }\n.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }\n.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url('#{$assets-url}/images/jqueryui/ui-bg_glass_95_fef1ec_1x400.png') 50% 50% repeat-x; color: #cd0a0a; font-weight: normal;}\n.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }\n.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }\n.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }\n.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-widget-content .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_222222_256x240.png'); }\n.ui-widget-header .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_222222_256x240.png'); }\n.ui-state-default .ui-icon { background-image: url('#{$assets-url}/images/jqueryui/ui-icons_888888_256x240.png'); }\n.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_454545_256x240.png'); }\n.ui-state-active .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_454545_256x240.png'); }\n.ui-state-highlight .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_2e83ff_256x240.png'); }\n.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url('#{$assets-url}/images/jqueryui/ui-icons_cd0a0a_256x240.png'); }\n\n/* positioning */\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-off { background-position: -96px -144px; }\n.ui-icon-radio-on { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }\n.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }\n\n/* Overlays */\n.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url('#{$assets-url}/images/jqueryui/ui-bg_flat_0_aaaaaa_40x100.png') 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!\n * jQuery UI Resizable 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Resizable#theming\n */\n.ui-resizable { position: relative;}\n.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }\n.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }\n.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }\n.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }\n.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }\n.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!\n * jQuery UI Selectable 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Selectable#theming\n */\n.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }\n/*!\n * jQuery UI Accordion 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Accordion#theming\n */\n/* IE/Win - Fix animation bug - #4615 */\n.ui-accordion { width: 100%; }\n.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }\n.ui-accordion .ui-accordion-li-fix { display: inline; }\n.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }\n.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }\n.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }\n.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }\n.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }\n.ui-accordion .ui-accordion-content-active { display: block; }\n/*!\n * jQuery UI Autocomplete 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Autocomplete#theming\n */\n.ui-autocomplete { position: absolute; cursor: default; }\n\n/* workarounds */\n* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */\n\n/*\n * jQuery UI Menu 1.8.21\n *\n * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Menu#theming\n */\n.ui-menu {\n\tlist-style:none;\n\tpadding: 2px;\n\tmargin: 0;\n\tdisplay:block;\n\tfloat: left;\n}\n.ui-menu .ui-menu {\n\tmargin-top: -3px;\n}\n.ui-menu .ui-menu-item {\n\tmargin:0;\n\tpadding: 0;\n\tzoom: 1;\n\tfloat: left;\n\tclear: left;\n\twidth: 100%;\n}\n.ui-menu .ui-menu-item a {\n\ttext-decoration:none;\n\tdisplay:block;\n\tpadding:.2em .4em;\n\tline-height:1.5;\n\tzoom:1;\n}\n.ui-menu .ui-menu-item a.ui-state-hover,\n.ui-menu .ui-menu-item a.ui-state-active {\n\tfont-weight: normal;\n\tmargin: -1px;\n}\n/*!\n * jQuery UI Button 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Button#theming\n */\n.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */\n.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */\nbutton.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */\n.ui-button-icons-only { width: 3.4em; }\nbutton.ui-button-icons-only { width: 3.7em; }\n\n/*button text element */\n.ui-button .ui-button-text { display: block; line-height: 1.4;  }\n.ui-button-text-only .ui-button-text { padding: .4em 1em; }\n.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }\n.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }\n.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }\n.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }\n/* no icon support for input elements, provide padding by default */\ninput.ui-button { padding: .4em 1em; }\n\n/*button icon element(s) */\n.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }\n.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }\n.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }\n.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n\n/*button sets*/\n.ui-buttonset { margin-right: 7px; }\n.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }\n\n/* workarounds */\nbutton.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */\n/*!\n * jQuery UI Dialog 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Dialog#theming\n */\n.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }\n.ui-dialog .ui-dialog-titlebar { background: #567899; padding: .4em 1em; position: relative;  }\n.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; color: #FFF }\n.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }\n.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }\n.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }\n.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: #E8EDF1; overflow: auto; zoom: 1; }\n.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }\n.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }\n.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }\n.ui-draggable .ui-dialog-titlebar { cursor: move; }\n/*!\n * jQuery UI Slider 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Slider#theming\n */\n.ui-slider { position: relative; text-align: left; }\n.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }\n.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }\n\n.ui-slider-horizontal { height: .8em; }\n.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n\n.ui-slider-vertical { width: .8em; height: 100px; }\n.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!\n * jQuery UI Tabs 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Tabs#theming\n */\n.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }\n.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }\n.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }\n.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */\n.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }\n/*.ui-tabs .ui-tabs-hide { display: none !important; }*/\n.ui-tabs .ui-tabs-hide {\n    position: absolute;\n    left: -10000px;\n}\n\n/*!\n * jQuery UI Datepicker 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Datepicker#theming\n */\n.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }\n.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n.ui-datepicker .ui-datepicker-prev { left:2px; }\n.ui-datepicker .ui-datepicker-next { right:2px; }\n.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }\n.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }\n.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year { width: 49%;}\n.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }\n.ui-datepicker td { border: 0; padding: 1px; }\n.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi { width:auto; }\n.ui-datepicker-multi .ui-datepicker-group { float:left; }\n.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }\n\n/* RTL support */\n.ui-datepicker-rtl { direction: rtl; }\n.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n\n/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n.ui-datepicker-cover {\n    display: none; /*sorry for IE5*/\n    display/**/: block; /*sorry for IE5*/\n    position: absolute; /*must have*/\n    z-index: -1; /*must have*/\n    filter: mask(); /*must have*/\n    top: -4px; /*must have*/\n    left: -4px; /*must have*/\n    width: 200px; /*must have*/\n    height: 200px; /*must have*/\n}/*!\n * jQuery UI Progressbar 1.8.21\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Progressbar#theming\n */\n.ui-progressbar { height:2em; text-align: left; overflow: hidden; }\n.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }\n"
  },
  {
    "path": "python/nav/web/sass/nav/jquery-ui.scss",
    "content": "/*! jQuery UI - v1.11.1 - 2014-08-15\n* http://jqueryui.com\n* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\n* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */\n\n@import \"settings\";\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-clearfix {\n\tmin-height: 0; /* support: IE7 */\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n}\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tmin-height: 0; /* support: IE7 */\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-icons .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-header .ui-accordion-header-icon {\n\tposition: absolute;\n\tleft: .5em;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-button {\n\tdisplay: inline-block;\n\tposition: relative;\n\tpadding: 0;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\toverflow: visible; /* removes extra width in IE */\n}\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2.2em;\n}\n/* button elements seem to need a little more width */\nbutton.ui-button-icon-only {\n\twidth: 2.4em;\n}\n.ui-button-icons-only {\n\twidth: 3.4em;\n}\nbutton.ui-button-icons-only {\n\twidth: 3.7em;\n}\n\n/* button text element */\n.ui-button .ui-button-text {\n\tdisplay: block;\n\tline-height: normal;\n}\n.ui-button-text-only .ui-button-text {\n\tpadding: .4em 1em;\n}\n.ui-button-icon-only .ui-button-text,\n.ui-button-icons-only .ui-button-text {\n\tpadding: .4em;\n\ttext-indent: -9999999px;\n}\n.ui-button-text-icon-primary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 1em .4em 2.1em;\n}\n.ui-button-text-icon-secondary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 2.1em .4em 1em;\n}\n.ui-button-text-icons .ui-button-text {\n\tpadding-left: 2.1em;\n\tpadding-right: 2.1em;\n}\n/* no icon support for input elements, provide padding by default */\ninput.ui-button {\n\tpadding: .4em 1em;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon,\n.ui-button-text-icon-primary .ui-icon,\n.ui-button-text-icon-secondary .ui-icon,\n.ui-button-text-icons .ui-icon,\n.ui-button-icons-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-button-icon-only .ui-icon {\n\tleft: 50%;\n\tmargin-left: -8px;\n}\n.ui-button-text-icon-primary .ui-button-icon-primary,\n.ui-button-text-icons .ui-button-icon-primary,\n.ui-button-icons-only .ui-button-icon-primary {\n\tleft: .5em;\n}\n.ui-button-text-icon-secondary .ui-button-icon-secondary,\n.ui-button-text-icons .ui-button-icon-secondary,\n.ui-button-icons-only .ui-button-icon-secondary {\n\tright: .5em;\n}\n\n/* button sets */\n.ui-buttonset {\n\tmargin-right: 7px;\n}\n.ui-buttonset .ui-button {\n\tmargin-left: 0;\n\tmargin-right: -.3em;\n}\n\n/* workarounds */\n/* reset extra padding in Firefox, see h5bp.com/l */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n.ui-dialog {\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-se {\n\twidth: 12px;\n\theight: 12px;\n\tright: -5px;\n\tbottom: -5px;\n\tbackground-position: 16px 16px;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: none;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 3px 1em 3px .4em;\n\tcursor: pointer;\n\tmin-height: 0; /* support: IE7 */\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\t/* Support: IE7 */\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-button {\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tposition: relative;\n\ttext-decoration: none;\n\tcursor: pointer;\n}\n.ui-selectmenu-button span.ui-icon {\n\tright: 0.5em;\n\tleft: auto;\n\tmargin-top: -8px;\n\tposition: absolute;\n\ttop: 50%;\n}\n.ui-selectmenu-button span.ui-selectmenu-text {\n\ttext-align: left;\n\tpadding: 0.4em 2.1em 0.4em 1em;\n\tdisplay: block;\n\tline-height: 1.4;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 22px;\n}\n.ui-spinner-button {\n\twidth: 16px;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top: none;\n\tborder-bottom: none;\n\tborder-right: none;\n}\n/* vertically center icon */\n.ui-spinner .ui-icon {\n\tposition: absolute;\n\tmargin-top: -8px;\n\ttop: 50%;\n\tleft: 0;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n\n/* TR overrides */\n.ui-spinner .ui-icon-triangle-1-s {\n\t/* need to fix icons sprite */\n\tbackground-position: -65px -16px;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n\t-webkit-box-shadow: 0 0 5px #aaa;\n\tbox-shadow: 0 0 5px #aaa;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Verdana,Arial,sans-serif;\n\tfont-size: 1.1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Verdana,Arial,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget-content {\n\tborder: 1px solid #aaaaaa;\n\tbackground: #ffffff url(\"#{$assets-url}/images/jqueryui/ui-bg_flat_75_ffffff_40x100.png\") 50% 50% repeat-x;\n\tcolor: #222222;\n}\n.ui-widget-content a {\n\tcolor: #222222;\n}\n.ui-widget-header {\n\tborder: 1px solid #aaaaaa;\n\tbackground: #cccccc url(\"#{$assets-url}/images/jqueryui/ui-bg_highlight-soft_75_cccccc_1x100.png\") 50% 50% repeat-x;\n\tcolor: #222222;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #222222;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid #d3d3d3;\n\tbackground: #e6e6e6 url(\"#{$assets-url}/images/jqueryui/ui-bg_glass_75_e6e6e6_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: normal;\n\tcolor: #555555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555555;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #999999;\n\tbackground: #dadada url(\"#{$assets-url}/images/jqueryui/ui-bg_glass_75_dadada_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: normal;\n\tcolor: #212121;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited {\n\tcolor: #212121;\n\ttext-decoration: none;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid #aaaaaa;\n\tbackground: #ffffff url(\"#{$assets-url}/images/jqueryui/ui-bg_glass_65_ffffff_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: normal;\n\tcolor: #212121;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #212121;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #fcefa1;\n\tbackground: #fbf9ee url(\"#{$assets-url}/images/jqueryui/ui-bg_glass_55_fbf9ee_1x400.png\") 50% 50% repeat-x;\n\tcolor: #363636;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #363636;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #cd0a0a;\n\tbackground: #fef1ec url(\"#{$assets-url}/images/jqueryui/ui-bg_glass_95_fef1ec_1x400.png\") 50% 50% repeat-x;\n\tcolor: #cd0a0a;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #cd0a0a;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #cd0a0a;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_222222_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_222222_256x240.png\");\n}\n.ui-state-default .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_888888_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_454545_256x240.png\");\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_454545_256x240.png\");\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_2e83ff_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"#{$assets-url}/images/jqueryui/ui-icons_cd0a0a_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 4px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa url(\"#{$assets-url}/images/jqueryui/ui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n}\n.ui-widget-shadow {\n\tmargin: -8px 0 0 -8px;\n\tpadding: 8px;\n\tbackground: #aaaaaa url(\"#{$assets-url}/images/jqueryui/ui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n\tborder-radius: 8px;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/local_rickshaw.scss",
    "content": ".rickshaw-container {\n    background-color: white;\n    border: 1px solid gainsboro;\n    position: relative;\n    padding: 2.5em 1em .5em .5em; /* Padding here affects values for y-axis */\n\n    .rickshaw-preview {\n        margin-left: 4em;\n        margin-top: 1.2em;\n        margin-bottom: 1em;\n    }\n\n    .rickshaw-graph {\n        height: 200px;\n        margin-left: 4em;\n    }\n\n    .rickshaw-y-axis {\n        position: absolute;\n        top: 1.5em;               /* NB: Affected by padding for container */\n        bottom: 0;\n        width: 3em;\n        margin: 1em;\n    }\n\n    .rickshaw-title {\n        position: absolute;\n        text-align: center;\n        top: 0.5em;\n        left: 0;\n        right: 0;\n    }\n\n    .rickshaw-y-axis-term {\n        left: 1em;\n        position: absolute;\n        top: 50%;\n        transform: rotate(270deg) translate(-50%, -50%);\n        transform-origin: left top;\n    }\n\n    .rickshaw-legend {\n        background: none;\n        color: initial;\n        display: flex;\n        justify-content: flex-end;\n        padding: 0;\n        ul {\n            margin: initial;\n            li {\n                float: left;\n                clear: none;\n                min-width: 0;\n            }\n        }\n    }\n\n    .rickshaw_graph {\n        .x_tick {\n            display: flex;\n            align-items: flex-end;\n            justify-content: center;\n            .title {\n                position: relative;\n                margin-left: auto;\n                bottom: -1.5em;\n            }\n        }\n        .detail {\n            .x_label {\n                display: none;\n            }\n            .detail_swatch {\n                float: right;\n                display: inline-block;\n                width: 10px;\n                height: 10px;\n                margin: 4px 4px 0 0\n            }\n            .series-value {\n                margin-right: 2em;\n            }\n            .date {\n                color: #FF851B;\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/login.scss",
    "content": "/* Login stylesheet for NAV\n *\n * Copyright (C) 2007 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n@import '../navsettings';\n\nhtml, body {\n    background-color: $body-bg;\n}\n\n.logincontainer {\n    background-color: #ffffff;\n    margin-top: 100px;\n    margin-left: auto;\n    margin-right: auto;\n    width: 400px;\n    ul {\n        margin-bottom: 0;\n    }\n    .logo-wrapper {\n        margin-bottom: 1em;\n        .navlogo {\n            width: 30%;\n        }\n    }\n    .asteriskField {\n        display: none;\n    }\n    .origin {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n    .button[type=\"submit\"] {\n        margin-bottom: 0;\n    }\n    .login-options {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        margin-bottom: 1em;\n        label, input[type=\"checkbox\"] {\n            margin-bottom: 0;\n        }\n        .remember-label {\n            vertical-align: 2px;\n        }\n        a {\n            font-size: 0.8em;\n        }\n    }\n    .audit-logging-link {\n        display: inline-block;\n        margin-top: 1em;\n    }\n    .login-alt-section:not(:has(.login-alternatives > *)) {\n        display: none;\n    }\n    .login-divider {\n        display: flex;\n        align-items: center;\n        margin: 1em 0;\n        hr {\n            flex: 1;\n            margin: 0;\n        }\n        span {\n            padding: 0 0.75em;\n            color: #999;\n            font-size: 0.85em;\n        }\n    }\n    .login-alternatives {\n        display: flex;\n        flex-direction: column;\n        gap: 0.5em;\n        .button {\n            margin: 0;\n            width: 100%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 0.4em;\n            font-size: 0.85rem;\n        }\n    }\n}\n\n@media #{$small-only} {\n    .logincontainer {\n        margin-top: 1em;\n        width: 90%;\n    }\n    .logincontainer2 {\n        margin-top: 1em;\n        width: 90%;\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/machinetracker.scss",
    "content": "#search_form form {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.infobox {\n\t\tmargin-bottom: 1em;\n}\n\n.errorbox {\npadding:10px; \nmargin-bottom:10px; \nbackground-color:#ed6a6a;\nborder:1px solid #999;\n}\n\n.tablesorter .fishy-item {\n    background-color: #ffe4e4 !important;\n}\n\n/* Style the filters on the ip-address search */\n#search_form fieldset {\n    padding: 0.35em 0.625em 0.75em;\n}\n\n.machinetracker-filter {\n    line-height: 2em;\n}\n\n.machinetracker-filter .column {\n    text-align: center;\n}\n\n.machinetracker-filter-days label {\n    display: inline;\n}\n\n.machinetracker-filter-days input[type=text] {\n    margin: 0;\n    display: inline;\n    width: auto;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/maintenance.scss",
    "content": "// Maintenance task form styles\n\n#new-task-form {\n  textarea {\n    height: 8em;\n  }\n\n  select[multiple] {\n    height: 8em;\n  }\n}\n\n#component-list {\n  li {\n    overflow: auto;\n\n    div:first-child {\n      float: left;\n      width: 8em;\n    }\n\n    div:last-child {\n      margin-left: 8em;\n    }\n  }\n}\n\n.component-search-section {\n  label {\n    position: relative;\n  }\n\n  .htmx-indicator {\n    position: absolute;\n    right: 0;\n    top: 0;\n  }\n\n  input[type=\"search\"] {\n    margin-bottom: 0.25em;\n  }\n\n  .browse-hint {\n    margin: 0;\n    text-align: right;\n\n    button {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      color: #008cba;\n      cursor: pointer;\n      text-decoration: underline;\n      font-size: inherit;\n    }\n  }\n\n  #search-results:not(:empty) {\n    margin-top: 0.5em;\n  }\n}\n\n.browse-actions {\n  margin-bottom: 0;\n\n  .button {\n    margin-bottom: 0;\n  }\n}\n\n.browse-tree {\n  border: 1px solid #ddd;\n  padding: 0.5em;\n  margin-top: 0.5em;\n  max-height: 20em;\n  overflow-y: auto;\n  background:\n    linear-gradient(white 30%, rgba(255, 255, 255, 0)) top,\n    linear-gradient(rgba(255, 255, 255, 0), white 70%) bottom,\n    radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0)) top,\n    radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0)) bottom;\n  background-repeat: no-repeat;\n  background-size: 100% 2em, 100% 2em, 100% 0.6em, 100% 0.6em;\n  background-attachment: local, local, scroll, scroll;\n\n  .fa {\n    cursor: pointer;\n  }\n\n  .room-connector {\n    cursor: default;\n    color: #999;\n    font-family: monospace;\n  }\n\n  .child {\n    display: none;\n    overflow: hidden;\n\n    &.open {\n      display: block;\n    }\n  }\n\n  li {\n    list-style: none;\n    margin: 0.2em 0;\n  }\n\n  ul {\n    padding-left: 1.2em;\n    margin: 0;\n  }\n\n  .browse-item {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.3em;\n\n    .button {\n      margin-bottom: 0;\n    }\n  }\n\n  .nav-tooltip {\n    [role=\"tooltip\"] {\n      position: fixed;\n    }\n  }\n\n  .browse-description {\n    color: #666;\n    max-width: 12em;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    vertical-align: bottom;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/mixins.scss",
    "content": "/* Generally useful mixins */\n\n\n// Add drag cursor to element (with active state transition)\n@mixin drag-cursor {\n    cursor: grab;\n    cursor: -webkit-grab;\n    cursor: -moz-grab;\n    &:active {\n        cursor: grabbing;\n        cursor: -webkit-grabbing;\n        cursor: -moz-grabbing;\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/multi-select.scss",
    "content": ".ms-options-wrap {\n    position: relative;\n}\n\n.ms-options-wrap,\n.ms-options-wrap * {\n    box-sizing: border-box;\n}\n\n.ms-options-wrap > button:focus,\n.ms-options-wrap > button {\n    position: relative;\n    width: 100%;\n    text-align: left;\n    border: 1px solid #aaa;\n    background-color: #fff;\n    padding: 5px 20px 5px 5px;\n    margin-top: 1px;\n    font-size: 13px;\n    color: #aaa;\n    outline-offset: -2px;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    margin-bottom: 0;\n}\n\n.ms-options-wrap > button[disabled] {\n    background-color: #e5e9ed;\n    color: #808080;\n    opacity: 0.6;\n}\n\n.ms-options-wrap > button:after {\n    content: ' ';\n    height: 0;\n    position: absolute;\n    top: 50%;\n    right: 5px;\n    width: 0;\n    border: 6px solid rgba(0, 0, 0, 0);\n    border-top-color: #999;\n    margin-top: -3px;\n}\n\n.ms-options-wrap.ms-has-selections > button {\n    color: #333;\n}\n\n.ms-options-wrap > .ms-options {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    margin-top: 1px;\n    margin-bottom: 20px;\n    background: white;\n    z-index: 2000;\n    border: 1px solid #aaa;\n    overflow: auto;\n    visibility: hidden;\n}\n\n.ms-options-wrap.ms-active > .ms-options {\n    visibility: visible\n}\n\n.ms-options-wrap > .ms-options > .ms-search input {\n    width: 100%;\n    padding: 4px 5px;\n    border: none;\n    border-bottom: 1px groove;\n    outline: none;\n}\n\n.ms-options-wrap > .ms-options > .no-result-message {\n    padding: 4px 5px;\n    display: none;\n}\n\n.ms-options-wrap > .ms-options .ms-selectall {\n    display: inline-block;\n    font-size: .9em;\n    text-transform: lowercase;\n    text-decoration: none;\n}\n.ms-options-wrap > .ms-options .ms-selectall:hover {\n    text-decoration: underline;\n}\n\n.ms-options-wrap > .ms-options > .ms-selectall.global {\n    margin: 4px 5px;\n}\n\n.ms-options-wrap > .ms-options > ul,\n.ms-options-wrap > .ms-options > ul > li.optgroup ul {\n    list-style-type: none;\n    padding: 0;\n    margin: 0;\n}\n\n.ms-options-wrap > .ms-options > ul li.ms-hidden {\n    display: none;\n}\n\n.ms-options-wrap > .ms-options > ul > li.optgroup {\n    padding: 5px;\n}\n.ms-options-wrap > .ms-options > ul > li.optgroup + li.optgroup {\n    border-top: 1px solid #aaa;\n}\n\n.ms-options-wrap > .ms-options > ul > li.optgroup .label {\n    display: block;\n    padding: 5px 0 0 0;\n    font-weight: bold;\n}\n\n.ms-options-wrap > .ms-options > ul label {\n    position: relative;\n    display: inline-block;\n    width: 100%;\n    padding: 4px 4px 4px 20px;\n    margin: 1px 0;\n    border: 1px dotted transparent;\n}\n.ms-options-wrap > .ms-options.checkbox-autofit > ul label,\n.ms-options-wrap > .ms-options.hide-checkbox > ul label {\n    padding: 4px;\n}\n\n.ms-options-wrap > .ms-options > ul label.focused,\n.ms-options-wrap > .ms-options > ul label:hover {\n    background-color: #efefef;\n    border-color: #999;\n}\n\n.ms-options-wrap > .ms-options > ul li.selected label {\n    background-color: #efefef;\n    border-color: transparent;\n}\n\n.ms-options-wrap > .ms-options > ul input[type=\"checkbox\"] {\n    margin: 0 5px 0 0;\n    position: absolute;\n    left: 4px;\n    top: 7px;\n}\n\n.ms-options-wrap > .ms-options.hide-checkbox > ul input[type=\"checkbox\"] {\n    position: absolute !important;\n    height: 1px;\n    width: 1px;\n    overflow: hidden;\n    clip: rect(1px 1px 1px 1px);\n    clip: rect(1px, 1px, 1px, 1px);\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/my_account.scss",
    "content": "@import \"../navsettings\";\n\n#navigation-preferences {\n\t.asteriskField {\n\t\tdisplay:none;\n\t}\n\n\t.link-delete label{\n\t\tcolor:$alert-color;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t}\n\n\t.row .link-delete {\n\t\talign-self: center;\n\t}\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/navlets.scss",
    "content": "@import \"../navsettings\";\n@import \"mixins\";\n\n$fullscreen-color: #EEE;\n#navlets:fullscreen { background-color: $fullscreen-color; }\n#navlets:-webkit-full-screen { background-color: $fullscreen-color;}\n#navlets:-moz-full-screen { background-color: $fullscreen-color; }\n#navlets:-ms-fullscreen { background-color: $fullscreen-color; }\n\n.asteriskField { display: none; }\n\n#navlets .highlight {\n    background-color: #d6d6d6;\n    border: 1px solid #aaaaaa;\n    margin-bottom: 1em;\n}\n\n/* Is a column is empty, make sure it has some size to be visible */\n.navletColumn {\n    min-width: 20px;\n    min-height: 100px;\n}\n\n.navlet {\n    background-color: #ffffff;\n    border: 1px solid #DDDDDD;\n    margin-bottom: 1em;\n    padding: 0.5em 1em 1em 1.2em;\n    position: relative;\n    transition: box-shadow .5s;\n    &.loading {\n        min-height: 200px;\n    }\n    &.outline {\n        border: 1px dashed black;\n    }\n    &.mark-new {\n        box-shadow: #666 0px 5px 10px 7px;\n        z-index: 2;\n    }\n    &.colorblock-navlet, &[data-highlight=\"true\"] {\n        background-color: #1570a6;\n        color: #fff;\n        .subheader {\n            color: #fff;\n        }\n        a {\n            color: #fff;\n        }\n    }\n    .navlet-header {\n        margin-bottom: 1em;\n        .navlet-drag-button i {\n            @include drag-cursor;\n        }\n        .deprecated-warning {\n            margin-bottom: auto;\n            margin-top: 1.25rem;\n        }\n    }\n    .navlet-body {\n        max-height: 90vh;\n        overflow: auto;\n    }\n    .navlet-action-group {\n        float: right;\n        i {\n            color: darkgrey;\n            margin-left: 0.5em;\n            &:hover {\n                color: black;\n            }\n        }\n    }\n    .subheader {\n        font-size: 1.1em;\n        position: relative;\n        i {\n            font-size: 0.8em;\n            margin-left: 0.3em;\n        }\n        &[data-set-title] {\n            cursor: pointer;\n            i {\n                color: darkgrey;\n                &:hover {\n                    color: black;\n                }\n            }\n        }\n    }\n}\n\n.navlet .panel {\n    font-size: 0.9em;\n}\n\n\n/* Styling for individual navlets */\n\n.MessagesNavlet {\n    .panel {\n        .message-card-footer {\n            font-size: 0.8em;\n            color: #999;\n            overflow: hidden;\n            .message-card-publish {\n                float: left;\n            }\n            .message-card-tasks {\n                float: right;\n            }\n        }\n    }\n}\n\n.WatchDogWidget {\n    .watchdog-tests {\n        ul {\n            max-height: 200px;\n            overflow: auto;\n        }\n        li {\n            padding: 0.2em;\n            .label.alert {\n                cursor: pointer;\n            }\n            &:nth-child(odd) {\n                background-color: #F9F9F9;\n            }\n        }\n        .label {\n            line-height: 1.4em;\n            width: 60px;\n        }\n    }\n}\n\n.Status2Widget {\n    .status2-widget-footer {\n        display: flex;\n        align-items: baseline;\n        justify-content: space-between;\n    }\n    .inline-list {\n      & > *:first-child {\n        margin-left: 0;\n      }\n      margin-bottom: 1rem !important;\n    }\n}\n\n\n.SensorWidget {\n    .room-sensor {\n        display: flex;\n        justify-content: center;\n        width: auto;\n    }\n}\n\n\n.UpsWidget {\n     .io-display {\n         position: relative;\n         display: flex;\n         justify-content: space-between;\n         align-items: center;\n         overflow: hidden;\n         .panel {\n             margin-bottom: 0;\n             padding: .4rem .6rem;\n             position: relative;\n             z-index: 2;\n             .marklow { background-color: lightcoral; }\n         }\n         .line {\n             background-color: steelblue;\n             color: white;\n         }\n         .left-wrapper {\n             display: flex;\n             flex-direction: column;\n             .vertical.line {\n                 height: 50px;\n                 display: flex;\n             }\n\n             .vertical.line .left-box {\n                 background-color: white;\n                 width: 50%;\n                 z-index: 2;\n             }\n             .vertical.line .middle-box {\n                 width: 1.2rem;\n                 z-index: 2;\n                 display: flex;\n                 justify-content: center;\n                 align-items: center;\n             }\n             .vertical.line .right-box {\n                 background-color: white;\n                 width: 50%;\n             }\n\n         }\n         .horizontal.line {\n             position: absolute;\n             line-height: 1.2rem;\n             width: 100%;\n             text-align: center;\n             top: 50%;\n             left: 50%;\n             transform: translate(-50%, -50%);\n         }\n\n     }\n\n\n}\n\n.AlertWidget {\n    fieldset { padding: .3em .8em; }\n}\n\n.RoomStatus, .LocationStatus {\n    // Override the jquery ui css styles\n    .ui-accordion {\n        a { color: $primary-color; }\n        .ui-accordion-header {\n            background: $alert-box-bg;\n            border-color: $alert-box-border;\n            border-radius: 0;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            .label {\n                margin-bottom: 0;\n            }\n        }\n        .ui-accordion-content {\n            border-radius: 0;\n            padding: 1rem;\n            ul {\n                margin-bottom: 0;\n                li {\n                    font-size: 80%;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/navlets_compact.scss",
    "content": "#navlets-htmx.compact {\n    font-size: 90%;\n    .navlet {\n        margin-bottom: 0;\n        padding: 0.5em 0 0.5em;\n\n        .navlet-header {\n            margin-bottom: 0;\n        }\n\n        .navlet-body {\n            .alert-box { margin-bottom: 0; }\n\n            // Font size adjustments\n            ul { font-size: inherit; }\n            table {\n                td, th, caption { font-size: inherit; }\n            }\n            h1, h2, h3, h4, h5 {\n                font-size: initial;\n            }\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/neighbors.scss",
    "content": "#action-buttons {\n    display: inline-block;\n}\n\n#ignored-feedback {\n    display: none;\n}\n\n#unrecognized-neighbors-table {\n    display: none;  // To prevent FOUC\n    * { box-sizing: initial; }  // Needed for datatables to display properly\n    thead { border-top: 2px solid black; }\n    td.has-add-button {\n        span {\n            float: left;\n        }\n        a {\n            float: right;\n            margin-left: 1em;\n            position: relative;\n            top: 0.16rem;\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/netmap.scss",
    "content": "@import 'settings';\n$image-path: '#{$assets-url}/images';\n\n#graph-view {\n  background: #ffffff;\n  border: 1px solid #000000;\n  min-height: 600px;\n  min-width: 600px;\n  position: relative;\n}\n\n#filter-category-list {\n    li {\n        float: left;\n        width: 5rem;\n    }\n}\n\n#filter-labels {\n    .label {\n        margin-right: 0.3em;\n    }\n}\n\n.nopadding {\n  padding: 0;\n}\n\n.maxwidth {\n  width: 100%;\n}\n\n#graph-info-modal table {\n  text-align: center;\n}\n\n#traffic-gradient {\n  width: 100%\n}\n\n#traffic-gradient tr th, #traffic-gradient tr td {\n  padding: 0.2rem;\n  text-align: center;\n}\n\n.traffic-rgb {\n  height: 30px;\n}\n\n.load-arrow {\n  color: rgb(211,211,211);\n}\n\n#netmap-admin tr.current-global-default td:first-child {\n  font-weight: bold;\n  background: url('#{$image-path}/netmap/emblem-favorite.png') no-repeat center right;\n}\n\n\n/* D3JS Netmap style */\n\n#netmap-userid {\n    display: none;\n}\n\n.clear {\n    clear: both;\n}\n\n.netmap-node-menu {\n    margin: 0 0 10px 0;\n    list-style-type: none;\n}\n\n.netmap-node-menu li {\n    margin: 0;\n    display: inline;\n}\n\n.netmap-node-category {\n}\n\n#graph-info-vlan-list {\n    max-height: 350px;\n    overflow-y: scroll;\n    overflow-x: hidden;\n}\n\n#graph-info-vlan-list ul {\n    list-style: none;\n}\n\n#graph-info-vlan-list li {\n    margin:0 0 2px 0;\n    border-bottom: 1px dotted #ccc;\n}\n\n#graph-info-vlan-list .vlan {\n    display: block;\n    width:auto;\n    font-size:11px;\n    padding-left: 2.5em;\n    position: relative;\n    height:auto !important;\n    min-height: 1em;\n    cursor: pointer;\n}\n\n#graph-info-vlan-list .vlan:hover {\n    color:orange;\n}\n\n#graph-info-vlan-list .vlan > span {\n    display: block;\n    position:absolute;\n    width:1.5rem;\n    left: 0;\n    background:#577899;\n    color:#fff;\n    font-weight: normal;\n    text-align: center;\n    height: 100%;\n}\n\n#graph-info-vlan-list .selected-vlan span {\n    background: orange;\n}\n\n/* svg styles below */\n\ncircle {\n    stroke-width: 1.5px;\n}\n\nline.speed0-100 {\n    stroke-width: 2px;\n}\n\nline.speed100-512 {\n    stroke-width: 2.5px;\n}\n\nline.speed512-2048 {\n    stroke-width: 4px;\n}\n\nline.speed2048-4096 {\n    stroke-width: 5.5px;\n}\n\nline.speed4096 {\n    stroke-width: 7px;\n}\n\ncircle {\n    fill: #ccc;\n    stroke: #333;\n    stroke-width: 3px;\n}\n\ncircle.node {\n    stroke-opacity: 1;\n}\n\ntext {\n    font: 14px sans-serif;\n    pointer-events: none;\n    background: #c0c0c0;\n}\n\ntext.node {\n    font: 12pt sans-serif;\n}\n\ntext.shadow {\n    stroke: #fff;\n    stroke-width: 4px;\n}\n\n@media print {\n    nav, #nav-breadcrumbs, footer, #navigation-view, .navbody > div:first-child, .navbody > div:last-of-type {\n        display: none;\n    }\n    #graph-view {\n        border: none;\n    }\n}\n\n"
  },
  {
    "path": "python/nav/web/sass/nav/networkexplorer.scss",
    "content": "@import \"settings\";\n\n#working {\n    visibility: hidden;\n}\n\n#networktree {\n\tclear: both;\n    font-size: 14px;\n}\n\n#networktree ul {\n    line-height: 1;\n    list-style: none;\n}\n\n#networktree .node  {\n    background: url('#{$assets-url}/images/networkexplorer/vertical.gif') repeat-y top left;\n}\n\n#networktree #root {\n    background: none;\n}\n\n#root > ul.children {\n    margin-left: 0;\n}\n\n#networktree ul.children > .tree-header {\n    font-weight: bold;\n}\n\n.gwport_match {\n\tfont-weight: bold;\n\tbackground: #ddd;\n}\n.gwport_match * {\n\tfont-weight: normal;\n\tbackground: #fff;\n}\n.swport_match {\n\tfont-weight: bold;\n\tbackground: #ccc;\n}\n\n.prefixes {\n\tfont-weight: normal;\n\tfont-family: monospace;\n\tfont-size: 90%;\n\tbackground: #fff;\n\tpadding-left: 25px;\n}\n\ndl, dl dd {\n    margin: 0;\n}\n\ndl, dt, dd {\n\tpadding-left: 1em;\n\tbackground-image: url('#{$assets-url}/images/networkexplorer/vertical.gif');\n\tbackground-repeat: repeat-y;\n}\n\n.tree-navigators {\n\tbackground-image: url('#{$assets-url}/images/networkexplorer/vertical.gif');\n\tbackground-repeat: repeat-y;\n\t}\n#tree > dl, dt, dd {\n\tbackground-image: none;\n}\n\n.routers  {\n\tbackground-image: none;\n}\n\ndt dt dt {\n    font-weight: bold;\n}\n\n#search-form input[type=\"checkbox\"] {\n    margin: 0;\n}\n\n#search-form fieldset {\n    margin: 0;\n}\n\n.info {\n    clear: right;\n    border: solid 1px #DEDEDE;\n    background: #EFEFEF;\n    color: #222222;\n    display: block;\n    float: left;\n    margin: 0.5em;\n    padding: 4px;\n    text-align: center;\n}\n\n"
  },
  {
    "path": "python/nav/web/sass/nav/normalize.scss",
    "content": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\n/* ==========================================================================\n   HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n    display: block;\n}\n\n/**\n * Correct `inline-block` display not defined in IE 8/9.\n */\n\naudio,\ncanvas,\nvideo {\n    display: inline-block;\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n    display: none;\n    height: 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\n[hidden] {\n    display: none;\n}\n\n/* ==========================================================================\n   Base\n   ========================================================================== */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n    font-family: sans-serif; /* 1 */\n    -webkit-text-size-adjust: 100%; /* 2 */\n    -ms-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n    margin: 0;\n}\n\n/* ==========================================================================\n   Links\n   ========================================================================== */\n\n/**\n * Address `outline` inconsistency between Chrome and other browsers.\n */\n\na:focus {\n    outline: thin dotted;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n    outline: 0;\n}\n\n/* ==========================================================================\n   Typography\n   ========================================================================== */\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n    font-size: 2em;\n    margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n    border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n    font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n    font-style: italic;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n    -moz-box-sizing: content-box;\n    box-sizing: content-box;\n    height: 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n    background: #ff0;\n    color: #000;\n}\n\n/**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\n\ncode,\nkbd,\npre,\nsamp {\n    font-family: monospace, serif;\n    font-size: 1em;\n}\n\n/**\n * Improve readability of pre-formatted text in all browsers.\n */\n\npre {\n    white-space: pre-wrap;\n}\n\n/**\n * Set consistent quote types.\n */\n\nq {\n    quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n    font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n    font-size: 75%;\n    line-height: 0;\n    position: relative;\n    vertical-align: baseline;\n}\n\nsup {\n    top: -0.5em;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\n/* ==========================================================================\n   Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n    border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n    overflow: hidden;\n}\n\n/* ==========================================================================\n   Figures\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n    margin: 0;\n}\n\n/* ==========================================================================\n   Forms\n   ========================================================================== */\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n    border: 1px solid #c0c0c0;\n    margin: 0 2px;\n    padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n    border: 0; /* 1 */\n    padding: 0; /* 2 */\n}\n\n/**\n * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n    font-family: inherit; /* 1 */\n    font-size: 100%; /* 2 */\n    margin: 0; /* 3 */\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\nbutton,\ninput {\n    line-height: normal;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\n */\n\nbutton,\nselect {\n    text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n    -webkit-appearance: button; /* 2 */\n    cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n    cursor: default;\n}\n\n/**\n * 1. Address box sizing set to `content-box` in IE 8/9.\n * 2. Remove excess padding in IE 8/9.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n    box-sizing: border-box; /* 1 */\n    padding: 0; /* 2 */\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n    -webkit-appearance: textfield; /* 1 */\n    -moz-box-sizing: content-box;\n    -webkit-box-sizing: content-box; /* 2 */\n    box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari 5 and Chrome\n * on OS X.\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n    border: 0;\n    padding: 0;\n}\n\n/**\n * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\n\ntextarea {\n    overflow: auto; /* 1 */\n    vertical-align: top; /* 2 */\n}\n\n/* ==========================================================================\n   Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/ol.scss",
    "content": ".ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-unselectable,.ol-viewport{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{position:absolute;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}"
  },
  {
    "path": "python/nav/web/sass/nav/openlayers.scss",
    "content": "@import \"settings\";\n$ol-imagepath: '#{$assets-url}/images/openlayers';\n\ndiv.olMap {\n    z-index: 0;\n    padding: 0 !important;\n    margin: 0 !important;\n    cursor: default;\n}\n\ndiv.olMapViewport {\n    text-align: left;\n}\n\ndiv.olLayerDiv {\n   -moz-user-select: none;\n   -khtml-user-select: none;\n}\n\n.olLayerGoogleCopyright {\n    left: 2px;\n    bottom: 2px;\n}\n.olLayerGoogleV3.olLayerGoogleCopyright {\n    right: auto !important;\n}\n.olLayerGooglePoweredBy {\n    left: 2px;\n    bottom: 15px;\n}\n.olLayerGoogleV3.olLayerGooglePoweredBy {\n    bottom: 15px !important;\n}\n.olControlAttribution {\n    font-size: smaller;\n    right: 3px;\n    bottom: 4.5em;\n    position: absolute;\n    display: block;\n}\n.olControlScale {\n    right: 3px;\n    bottom: 3em;\n    display: block;\n    position: absolute;\n    font-size: smaller;\n}\n.olControlScaleLine {\n   display: block;\n   position: absolute;\n   left: 10px;\n   bottom: 15px;\n   font-size: xx-small;\n}\n.olControlScaleLineBottom {\n   border: solid 2px black;\n   border-bottom: none;\n   margin-top:-2px;\n   text-align: center;\n}\n.olControlScaleLineTop {\n   border: solid 2px black;\n   border-top: none;\n   text-align: center;\n}\n\n.olControlPermalink {\n    right: 3px;\n    bottom: 1.5em;\n    display: block;\n    position: absolute;\n    font-size: smaller;\n}\n\ndiv.olControlMousePosition {\n    bottom: 0;\n    right: 3px;\n    display: block;\n    position: absolute;\n    font-family: Arial;\n    font-size: smaller;\n}\n\n.olControlOverviewMapContainer {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n}\n\n.olControlOverviewMapElement {\n    padding: 10px 18px 10px 10px;\n    background-color: #00008B;\n    -moz-border-radius: 1em 0 0 0;\n}\n\n.olControlOverviewMapMinimizeButton,\n.olControlOverviewMapMaximizeButton {\n    height: 18px;\n    width: 18px;\n    right: 0;\n    bottom: 80px;\n    cursor: pointer;\n}\n\n.olControlOverviewMapExtentRectangle {\n    overflow: hidden;\n    background-image: url(\"#{$ol-imagepath}/blank.gif\");\n    cursor: move;\n    border: 2px dotted red;\n}\n.olControlOverviewMapRectReplacement {\n    overflow: hidden;\n    cursor: move;\n    background-image: url(\"#{$ol-imagepath}/overview_replacement.gif\");\n    background-repeat: no-repeat;\n    background-position: center;\n}\n\n.olLayerGeoRSSDescription {\n    float:left;\n    width:100%;\n    overflow:auto;\n    font-size:1.0em;\n}\n.olLayerGeoRSSClose {\n    float:right;\n    color:gray;\n    font-size:1.2em;\n    margin-right:6px;\n    font-family:sans-serif;\n}\n.olLayerGeoRSSTitle {\n    float:left;font-size:1.2em;\n}\n\n.olPopupContent {\n    padding:5px;\n    overflow: auto;\n}\n\n.olControlNavigationHistory {\n   background-image: url(\"#{$ol-imagepath}/navigation_history.png\");\n   background-repeat: no-repeat;\n   width:  24px;\n   height: 24px;\n\n}\n.olControlNavigationHistoryPreviousItemActive {\n  background-position: 0 0;\n}\n.olControlNavigationHistoryPreviousItemInactive {\n   background-position: 0 -24px;\n}\n.olControlNavigationHistoryNextItemActive {\n   background-position: -24px 0;\n}\n.olControlNavigationHistoryNextItemInactive {\n   background-position: -24px -24px;\n}\n\ndiv.olControlSaveFeaturesItemActive {\n    background-image: url('#{$ol-imagepath}/save_features_on.png');\n    background-repeat: no-repeat;\n    background-position: 0 1px;\n}\ndiv.olControlSaveFeaturesItemInactive {\n    background-image: url('#{$ol-imagepath}/save_features_off.png');\n    background-repeat: no-repeat;\n    background-position: 0 1px;\n}\n\n.olHandlerBoxZoomBox {\n    border: 2px solid red;\n    position: absolute;\n    background-color: white;\n    opacity: 0.50;\n    font-size: 1px;\n    filter: alpha(opacity=50);\n}\n.olHandlerBoxSelectFeature {\n    border: 2px solid blue;\n    position: absolute;\n    background-color: white;\n    opacity: 0.50;\n    font-size: 1px;\n    filter: alpha(opacity=50);\n}\n\n.olControlPanPanel {\n    top: 10px;\n    left: 5px;\n}\n\n.olControlPanPanel div {\n    background-image: url('#{$ol-imagepath}/pan-panel.png');\n    height: 18px;\n    width: 18px;\n    cursor: pointer;\n    position: absolute;\n}\n\n.olControlPanPanel .olControlPanNorthItemInactive {\n    top: 0;\n    left: 9px;\n    background-position: 0 0;\n}\n.olControlPanPanel .olControlPanSouthItemInactive {\n    top: 36px;\n    left: 9px;\n    background-position: 18px 0;\n}\n.olControlPanPanel .olControlPanWestItemInactive {\n    position: absolute;\n    top: 18px;\n    left: 0;\n    background-position: 0 18px;\n}\n.olControlPanPanel .olControlPanEastItemInactive {\n    top: 18px;\n    left: 18px;\n    background-position: 18px 18px;\n}\n\n.olControlZoomPanel {\n    top: 71px;\n    left: 14px;\n}\n\n.olControlZoomPanel div {\n    background-image: url('#{$ol-imagepath}/zoom-panel.png');\n    position: absolute;\n    height: 18px;\n    width: 18px;\n    cursor: pointer;\n}\n\n.olControlZoomPanel .olControlZoomInItemInactive {\n    top: 0;\n    left: 0;\n    background-position: 0 0;\n}\n\n.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {\n    top: 18px;\n    left: 0;\n    background-position: 0 -18px;\n}\n\n.olControlZoomPanel .olControlZoomOutItemInactive {\n    top: 36px;\n    left: 0;\n    background-position: 0 18px;\n}\n\n/*\n * When a potential text is bigger than the image it move the image\n * with some headers (closes #3154)\n */\n.olControlPanZoomBar div {\n    font-size: 1px;\n}\n\n.olPopupCloseBox {\n  background: url(\"#{$ol-imagepath}/close.gif\") no-repeat;\n  cursor: pointer;\n}\n\n.olFramedCloudPopupContent {\n    padding: 5px;\n    overflow: auto;\n}\n\n.olControlNoSelect {\n -moz-user-select: none;\n -khtml-user-select: none;\n}\n\n.olImageLoadError {\n    background-color: pink;\n    opacity: 0.5;\n    filter: alpha(opacity=50); /* IE */\n}\n\n/**\n * Cursor styles\n */\n\n.olCursorWait {\n    cursor: wait;\n}\n.olDragDown {\n    cursor: move;\n}\n.olDrawBox {\n    cursor: crosshair;\n}\n.olControlDragFeatureOver {\n    cursor: move;\n}\n.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown {\n    cursor: -moz-grabbing;\n}\n\n/**\n * Layer switcher\n */\n.olControlLayerSwitcher {\n    position: absolute;\n    top: 25px;\n    right: 0;\n    width: 20em;\n    font-family: sans-serif;\n    font-weight: bold;\n    margin-top: 3px;\n    margin-left: 3px;\n    margin-bottom: 3px;\n    font-size: smaller;\n    color: white;\n    background-color: transparent;\n}\n\n.olControlLayerSwitcher .layersDiv {\n    padding-top: 5px;\n    padding-left: 10px;\n    padding-bottom: 5px;\n    padding-right: 10px;\n    background-color: darkblue;\n}\n\n.olControlLayerSwitcher .layersDiv .baseLbl,\n.olControlLayerSwitcher .layersDiv .dataLbl {\n    margin-top: 3px;\n    margin-left: 3px;\n    margin-bottom: 3px;\n}\n\n.olControlLayerSwitcher .layersDiv .baseLayersDiv,\n.olControlLayerSwitcher .layersDiv .dataLayersDiv {\n    padding-left: 10px;\n}\n\n.olControlLayerSwitcher .maximizeDiv,\n.olControlLayerSwitcher .minimizeDiv {\n    width: 18px;\n    height: 18px;\n    top: 5px;\n    right: 0;\n    cursor: pointer;\n}\n\n.olBingAttribution {\n    color: #DDD;\n}\n.olBingAttribution.road {\n    color: #333;\n}\n\n.olGoogleAttribution.hybrid, .olGoogleAttribution.satellite {\n    color: #EEE;\n}\n.olGoogleAttribution {\n    color: #333;\n}\nspan.olGoogleAttribution a {\n    color: #77C;\n}\nspan.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a {\n    color: #EEE;\n}\n\n/**\n * Editing and navigation icons.\n * (using the editing_tool_bar.png sprint image)\n */\n.olControlNavToolbar ,\n.olControlEditingToolbar {\n    margin: 5px 5px 0 0;\n}\n.olControlNavToolbar div,\n.olControlEditingToolbar div {\n    background-image: url(\"#{$ol-imagepath}/editing_tool_bar.png\");\n    background-repeat: no-repeat;\n    margin: 0 0 5px 5px;\n    width: 24px;\n    height: 22px;\n    cursor: pointer\n}\n/* positions */\n.olControlEditingToolbar {\n    right: 0;\n    top: 0;\n}\n.olControlNavToolbar {\n    top: 295px;\n    left: 9px;\n}\n/* layouts */\n.olControlEditingToolbar div {\n    float: right;\n}\n/* individual controls */\n.olControlNavToolbar .olControlNavigationItemInactive,\n.olControlEditingToolbar .olControlNavigationItemInactive {\n    background-position: -103px -1px;\n}\n.olControlNavToolbar .olControlNavigationItemActive ,\n.olControlEditingToolbar .olControlNavigationItemActive  {\n    background-position: -103px -24px;\n}\n.olControlNavToolbar .olControlZoomBoxItemInactive {\n    background-position: -128px -1px;\n}\n.olControlNavToolbar .olControlZoomBoxItemActive  {\n    background-position: -128px -24px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePointItemInactive {\n    background-position: -77px -1px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePointItemActive {\n    background-position: -77px -24px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePathItemInactive {\n    background-position: -51px -1px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePathItemActive {\n    background-position: -51px -24px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{\n    background-position: -26px -1px;\n}\n.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive {\n    background-position: -26px -24px;\n}\n\ndiv.olControlZoom {\n    position: absolute;\n    top: 8px;\n    left: 8px;\n    background: rgba(255,255,255,0.4);\n    border-radius: 4px;\n    padding: 2px;\n}\ndiv.olControlZoom a {\n    display: block;\n    margin: 1px;\n    padding: 0;\n    color: white;\n    font-size: 18px;\n    font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;\n    font-weight: bold;\n    text-decoration: none;\n    text-align: center;\n    height: 22px;\n    width:22px;\n    line-height: 19px;\n    background: #130085; /* fallback for IE - IE6 requires background shorthand*/\n    background: rgba(0, 60, 136, 0.5);\n    filter: alpha(opacity=80);\n}\ndiv.olControlZoom a:hover {\n    background: #130085; /* fallback for IE */\n    background: rgba(0, 60, 136, 0.7);\n    filter: alpha(opacity=100);\n}\n@media only screen and (max-width: 600px) {\n    div.olControlZoom a:hover {\n        background: rgba(0, 60, 136, 0.5);\n    }\n}\na.olControlZoomIn {\n    border-radius: 4px 4px 0 0;\n}\na.olControlZoomOut {\n    border-radius: 0 0 4px 4px;\n}\n\n\n/**\n * Animations\n */\n\n.olLayerGrid .olTileImage {\n    -webkit-transition: opacity 0.2s linear;\n    -moz-transition: opacity 0.2s linear;\n    -o-transition: opacity 0.2s linear;\n    transition: opacity 0.2s linear;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/openlayers3.scss",
    "content": ".ol-mouse-position {\n    top: 8px;\n    right: 8px;\n    position: absolute\n}\n\n.ol-scale-line {\n    background: #95b9e6;\n    background: rgba(0, 60, 136, .3);\n    border-radius: 4px;\n    bottom: 8px;\n    left: 8px;\n    padding: 2px;\n    position: absolute\n}\n\n.ol-scale-line-inner {\n    border: 1px solid #eee;\n    border-top: none;\n    color: #eee;\n    font-size: 10px;\n    text-align: center;\n    margin: 1px;\n    padding: 0 2px\n}\n\n.ol-unsupported {\n    display: none\n}\n\n.ol-viewport .ol-unselectable {\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-tap-highlight-color: transparent\n}\n\n.ol-control {\n    position: absolute;\n    background-color: #eee;\n    background-color: rgba(255, 255, 255, .4);\n    border-radius: 4px;\n    padding: 2px\n}\n\n.ol-control:hover {\n    background-color: rgba(255, 255, 255, .6)\n}\n\n.ol-zoom {\n    top: .5em;\n    left: .5em\n}\n\n.ol-rotate {\n    top: .5em;\n    right: .5em;\n    transition: opacity .25s\n}\n\n.ol-zoom-extent {\n    top: 4.643em;\n    left: .5em\n}\n\n.ol-full-screen {\n    right: .5em;\n    top: .5em\n}\n\n@media print {\n    .ol-control {\n        display: none\n    }\n}\n\n.ol-control button {\n    display: block;\n    margin: 1px;\n    padding: 0;\n    color: #fff;\n    font-size: 1.14em;\n    font-weight: 700;\n    text-decoration: none;\n    text-align: center;\n    height: 1.375em;\n    width: 1.375em;\n    line-height: .4em;\n    background-color: #7b98bc;\n    background-color: rgba(0, 60, 136, .5);\n    border: none;\n    border-radius: 2px\n}\n\n.ol-control button::-moz-focus-inner {\n    border: none;\n    padding: 0\n}\n\n.ol-zoom-extent button {\n    line-height: 1.4em\n}\n\n.ol-compass {\n    display: block;\n    font-family: Arial;\n    font-weight: 400;\n    font-size: 1.2em\n}\n\n.ol-touch .ol-control button {\n    font-size: 1.5em\n}\n\n.ol-touch .ol-zoom-extent {\n    top: 5.5em\n}\n\n.ol-control button:focus, .ol-control button:hover {\n    text-decoration: none;\n    background-color: #4c6079;\n    background-color: rgba(0, 60, 136, .7)\n}\n\n.ol-zoom-extent button:after {\n    content: \"E\"\n}\n\n.ol-zoom .ol-zoom-in {\n    border-radius: 2px 2px 0 0\n}\n\n.ol-zoom .ol-zoom-out {\n    border-radius: 0 0 2px 2px\n}\n\nbutton.ol-full-screen-false:after {\n    content: \"\\2194\"\n}\n\nbutton.ol-full-screen-true:after {\n    content: \"\\00d7\"\n}\n\n.ol-has-tooltip [role=tooltip] {\n    position: absolute;\n    clip: rect(1px 1px 1px 1px);\n    clip: rect(1px, 1px, 1px, 1px);\n    padding: 0;\n    border: 0;\n    height: 1px;\n    width: 1px;\n    overflow: hidden;\n    font-weight: 400;\n    font-size: 14px;\n    text-shadow: 0 0 2px #fff\n}\n\n.ol-has-tooltip:focus [role=tooltip], .ol-has-tooltip:hover [role=tooltip] {\n    -moz-box-sizing: content-box;\n    -webkit-box-sizing: content-box;\n    box-sizing: content-box;\n    clip: auto;\n    padding: 0 .4em;\n    font-size: .8em;\n    height: 1.2em;\n    width: auto;\n    line-height: 1.2em;\n    z-index: 1100;\n    max-height: 100px;\n    white-space: nowrap;\n    display: inline-block;\n    background: #FFF;\n    background: rgba(255, 255, 255, .6);\n    color: #000;\n    border: 3px solid transparent;\n    border-left-width: 0;\n    border-radius: 0 4px 4px 0;\n    bottom: .3em;\n    left: 2.2em\n}\n\n.ol-touch .ol-has-tooltip:focus [role=tooltip], .ol-touch .ol-has-tooltip:hover [role=tooltip] {\n    display: none\n}\n\n.ol-zoom .ol-has-tooltip:focus [role=tooltip], .ol-zoom .ol-has-tooltip:hover [role=tooltip] {\n    top: 1.1em\n}\n\n.ol-attribution .ol-has-tooltip:focus [role=tooltip], .ol-attribution .ol-has-tooltip:hover [role=tooltip], .ol-full-screen .ol-has-tooltip:focus [role=tooltip], .ol-full-screen .ol-has-tooltip:hover [role=tooltip], .ol-rotate .ol-has-tooltip:focus [role=tooltip], .ol-rotate .ol-has-tooltip:hover [role=tooltip] {\n    right: 2.2em;\n    left: auto;\n    border-radius: 4px 0 0 4px;\n    border-left-width: 3px;\n    border-right-width: 0\n}\n\n.ol-attribution {\n    text-align: right;\n    bottom: .5em;\n    right: .5em;\n    max-width: calc(100% - 1.3em)\n}\n\n.ol-attribution ul {\n    margin: 0;\n    padding: 0 .5em;\n    font-size: .7rem;\n    line-height: 1.375em;\n    color: #000;\n    text-shadow: 0 0 2px #fff;\n    max-width: calc(100% - 3.6em)\n}\n\n.ol-attribution li {\n    display: inline;\n    list-style: none;\n    line-height: inherit\n}\n\n.ol-attribution li:not(:last-child):after {\n    content: \" \"\n}\n\n.ol-attribution img {\n    max-height: 2em\n}\n\n.ol-attribution button, .ol-attribution ul {\n    display: inline-block\n}\n\n.ol-attribution.ol-collapsed ul, .ol-attribution:not(.ol-collapsed) button:hover [role=tooltip] {\n    display: none\n}\n\n.ol-attribution.ol-logo-only ul {\n    display: block\n}\n\n.ol-attribution:not(.ol-collapsed) {\n    background: rgba(255, 255, 255, .8)\n}\n\n.ol-attribution.ol-uncollapsible {\n    bottom: 0;\n    right: 0;\n    border-radius: 4px 0 0;\n    height: 1.1em;\n    line-height: 1em\n}\n\n.ol-attribution.ol-logo-only {\n    background: 0 0;\n    bottom: .4em;\n    height: 1.1em;\n    line-height: 1em\n}\n\n.ol-attribution.ol-uncollapsible img {\n    margin-top: -.2em;\n    max-height: 1.6em\n}\n\n.ol-attribution.ol-logo-only button, .ol-attribution.ol-uncollapsible button {\n    display: none\n}\n\n.ol-zoomslider {\n    position: absolute;\n    top: 4.5em;\n    left: .5em;\n    background: #eee;\n    background: rgba(255, 255, 255, .4);\n    border-radius: 4px;\n    outline: 0;\n    overflow: hidden;\n    width: 1.5675em;\n    height: 200px;\n    padding: 3px;\n    margin: 0\n}\n\n.ol-zoomslider-thumb {\n    position: absolute;\n    display: block;\n    background: #7b98bc;\n    background: rgba(0, 60, 136, .5);\n    border-radius: 2px;\n    outline: 0;\n    overflow: hidden;\n    cursor: pointer;\n    font-size: 1.14em;\n    height: 1em;\n    width: 1.375em;\n    margin: 3px;\n    padding: 0\n}\n\n.ol-touch .ol-zoomslider {\n    top: 5.5em;\n    width: 2.052em\n}\n\n.ol-touch .ol-zoomslider-thumb {\n    width: 1.8em\n}\n\n.ol-attribution, .ol-control button, .ol-has-tooltip [role=tooltip], .ol-scale-line-inner {\n    font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/portadmin.scss",
    "content": "@import \"../navsettings\";\n\n#portadmin-wrapper {\n    &.loading .port_row {\n      opacity: 0.5;\n      pointer-events: none;\n    }\n    .changed {\n        background-color: bisque;\n    }\n    .success {\n        background-color: $success-box-bg;\n    }\n    .error {\n        background-color: $alert-box-bg;\n    }\n    .error-column {\n        line-height: inherit;\n        margin: 0;\n        .alert-box {\n            margin: 0;\n        }\n    }\n}\n\n#portadmin-feedback-modal {\n  [aria-describedby] {\n    cursor: pointer;\n    border-bottom: dotted 1px #cccccc;\n    font-weight: bold;\n  }\n  #restart-reason {\n    padding: 0.5rem;\n    margin-top: 0.25rem;\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/powersupplies.scss",
    "content": "@import \"settings\";\n\n.right { float: right; }\n.left { float: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center;}\n\n.hidden { visibility: hidden; }\n\nh4 { text-align: center; }\n\ndiv.infobox {\n\tmargin-bottom: 1em;\n}\n\ndiv#tablecontainer {\n\tfloat: left;\n\tmargin: 0px 0px 0px 20px;\n}\n\ndiv#errors {\n\tbackground-color: #FFBABA;\n}\n\n/*\n * Styles for the table\n */\n\ntable#portadmin-interfacecontainer td {\n\theight: 30px;\n\tvertical-align: middle;\n}\n\ntable#portadmin-interfacecontainer {\n\tmargin-bottom: 0px;\n}\n\ntable#portadmin-interfacecontainer input[type=\"text\"] {\n\twidth: 250px;\n}\n\n/*\n * Styles for changed rows\n */\ntable#portadmin-interfacecontainer tr td.changed {\n\tbackground-color: #BDE5F8;\n}\n\n\n/*\n * Styles for information boxes\n */\ndiv.saveinfo {\n\tposition: absolute;\n\tdisplay: none;\n}\n\ndiv#summary h4 {\n\ttext-align: center;\n}\n\ndiv#summary ul {\n\tlist-style: none;\n}\n\n.success, .error {\n\tborder: 1px solid;\n\tmargin: 2px 0px;\n\tpadding:0px 10px 0px 30px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 10px center;\n}\n\n.success {\n\tcolor: #4F8A10;\n\tbackground-color: #DFF2BF;\n\tbackground-image:url('#{$assets-url}/images/lys/green.png');\n}\n\n.error {\n\tcolor: #D8000C;\n\tbackground-color: #FFBABA;\n\tbackground-image: url('#{$assets-url}/images/lys/red.png');\n}\n\ntable#powersupplycontainer td.warning {\n    color: black;\n    background-color: #FFCC33;\n}\n\ntable#powersupplycontainer td.down {\n    color: black;\n    background-color: #FFACAC;\n}\n\ntable#powersupplycontainer td.unknown {\n    color: black;\n    background-color: #AACCFF;\n}\n\ntable#powersupplycontainer td.up {\n    color: black;\n    background-color: #66FFCC;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/rack.scss",
    "content": ".racks-container {\n    display: flex;\n    flex-wrap: wrap;\n}\n\n#add-rackitem-tabs {\n    display: none;\n}\n\n#sensormodal { height: 500px; }\n\n.rack {\n    /* Set a stronger link color due to dynamic background colors */\n    a { color: #1565c0 }\n\n    max-width: 240px;\n\n    .color-chooser {\n        .color-indicator {\n            display: inline-block;\n            width: 15px;\n            height: 15px;\n        }\n    }\n\n    margin-right: 1em;\n    form.rename-rack-form {\n        overflow: auto;\n        input {\n            margin-bottom: 0;\n        }\n    }\n\n    /* Edit-mode stuff */\n    .flex-when-noedit { display: flex; }\n    .block-when-edit { display: none; }\n    .inline-when-edit { display: none; }\n    &.editmode {\n        .flex-when-noedit { display: none; }\n        .block-when-edit { display: block; }\n        .inline-when-edit { display: inline; }\n        .rack-center { flex: 1; }\n    }\n\n    .fa {\n        &.fa-edit, &.fa-remove { cursor: pointer; }\n        &.fa-arrows { cursor: grab; }\n    }\n\n    button { margin-bottom: 0; }\n\n    &:hover .icon-container { opacity: 1; }\n    .icon-container {\n        opacity: .2;\n        margin-left: .5em;\n        i {\n            cursor: pointer;\n            font-size: 1rem;\n        }\n    }\n\n    /* Sortable */\n    .ui-sortable-helper { background-color: white; border: 1px solid black; }\n    .ui-sortable-placeholder { background-color: yellow; border: 1px solid black; }\n\n}\n\n\n.rack-heading, .rename-rack-form label {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 0;\n}\n\n\n.color-chooser {\n    display: flex;\n    justify-content: space-between;\n}\n\n.rack-body, .color-chooser .color-indicator {\n    &.bg1 { background-color: #E0E0E0; }\n    &.bg2 { background-color: #FFE0B2; }\n    &.bg3 { background-color: #C8E6C9; }\n    &.bg4 { background-color: #B3E5FC; }\n    &.bg5 { background-color: #E3DBF2; }\n}\n\n.rack-body {\n    background-color: #E0E0E0;\n    border: 1px solid #aaaaaa;\n    display: flex;\n\n    padding: .3rem;\n\n    .rack-pdu {\n        height: 100%;\n        text-align: center;\n    }\n\n    .rack-center {\n        height: 100%;\n        max-width: 150px;\n        margin: 0 .5rem;\n        .rack-sensor {\n            padding-bottom: .3rem;\n            margin-bottom: .3rem;\n            &:not(:last-child) {\n                border-bottom: 1px solid #aaaaaa;\n            }\n        }\n\n    }\n\n    .rack-sensor {\n        .alert-box {\n            padding: 0.4rem 0.8rem;\n        }\n        .heading {\n            font-size: 0.8rem;\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/report.scss",
    "content": ".reportlist > div {\n    margin-left: 1.4em;\n}\n\n.report-table-wrapper .pagination li a {\n    display: initial;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/rickshaw.scss",
    "content": ".rickshaw_graph .detail {\n\tpointer-events: none;\n\tposition: absolute;\n\ttop: 0;\n\tz-index: 2;\n\tbackground: rgba(0, 0, 0, 0.1);\n\tbottom: 0;\n\twidth: 1px;\n\ttransition: opacity 0.25s linear;\n\t-moz-transition: opacity 0.25s linear;\n\t-o-transition: opacity 0.25s linear;\n\t-webkit-transition: opacity 0.25s linear;\n}\n.rickshaw_graph .detail.inactive {\n\topacity: 0;\n}\n.rickshaw_graph .detail .item.active {\n\topacity: 1;\n}\n.rickshaw_graph .detail .x_label {\n\tfont-family: Arial, sans-serif;\n\tborder-radius: 3px;\n\tpadding: 6px;\n\topacity: 0.5;\n\tborder: 1px solid #e0e0e0;\n\tfont-size: 12px;\n\tposition: absolute;\n\tbackground: white;\n\twhite-space: nowrap;\n}\n.rickshaw_graph .detail .x_label.left {\n\tleft: 0;\n}\n.rickshaw_graph .detail .x_label.right {\n\tright: 0;\n}\n.rickshaw_graph .detail .item {\n\tposition: absolute;\n\tz-index: 2;\n\tborder-radius: 3px;\n\tpadding: 0.25em;\n\tfont-size: 12px;\n\tfont-family: Arial, sans-serif;\n\topacity: 0;\n\tbackground: rgba(0, 0, 0, 0.4);\n\tcolor: white;\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n\tmargin-top: -1em;\n\twhite-space: nowrap;\n}\n.rickshaw_graph .detail .item.left {\n\tleft: 0;\n}\n.rickshaw_graph .detail .item.right {\n\tright: 0;\n}\n.rickshaw_graph .detail .item.active {\n\topacity: 1;\n\tbackground: rgba(0, 0, 0, 0.8);\n}\n.rickshaw_graph .detail .item:after {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 0;\n\theight: 0;\n\n\tcontent: \"\";\n\n\tborder: 5px solid transparent;\n}\n.rickshaw_graph .detail .item.left:after {\n\ttop: 1em;\n\tleft: -5px;\n\tmargin-top: -5px;\n\tborder-right-color: rgba(0, 0, 0, 0.8);\n\tborder-left-width: 0;\n}\n.rickshaw_graph .detail .item.right:after {\n\ttop: 1em;\n\tright: -5px;\n\tmargin-top: -5px;\n\tborder-left-color: rgba(0, 0, 0, 0.8);\n\tborder-right-width: 0;\n}\n.rickshaw_graph .detail .dot {\n\twidth: 4px;\n\theight: 4px;\n\tmargin-left: -3px;\n\tmargin-top: -3.5px;\n\tborder-radius: 5px;\n\tposition: absolute;\n\tbox-shadow: 0 0 2px rgba(0, 0, 0, 0.6);\n\tbox-sizing: content-box;\n\t-moz-box-sizing: content-box;\n\tbackground: white;\n\tborder-width: 2px;\n\tborder-style: solid;\n\tdisplay: none;\n\tbackground-clip: padding-box;\n}\n.rickshaw_graph .detail .dot.active {\n\tdisplay: block;\n}\n/* graph */\n\n.rickshaw_graph {\n\tposition: relative;\n}\n.rickshaw_graph svg {\n\tdisplay: block;\t\n\toverflow: hidden;\n}\n\n/* ticks */\n\n.rickshaw_graph .x_tick {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\twidth: 0px;\n\tborder-left: 1px dotted rgba(0, 0, 0, 0.2);\n\tpointer-events: none;\n}\n.rickshaw_graph .x_tick .title {\n\tposition: absolute;\n\tfont-size: 12px;\n\tfont-family: Arial, sans-serif;\n\topacity: 0.5;\n\twhite-space: nowrap;\n\tmargin-left: 3px;\n\tbottom: 1px;\n}\n\n/* annotations */\n\n.rickshaw_annotation_timeline {\n\theight: 1px;\n\tborder-top: 1px solid #e0e0e0;\n\tmargin-top: 10px;\n\tposition: relative;\n}\n.rickshaw_annotation_timeline .annotation {\n\tposition: absolute;\n\theight: 6px;\n\twidth: 6px;\n\tmargin-left: -2px;\n\ttop: -3px;\n\tborder-radius: 5px;\n\tbackground-color: rgba(0, 0, 0, 0.25);\n}\n.rickshaw_graph .annotation_line {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: -6px;\n\twidth: 0px;\n\tborder-left: 2px solid rgba(0, 0, 0, 0.3);\n\tdisplay: none;\n}\n.rickshaw_graph .annotation_line.active {\n\tdisplay: block;\n}\n\n.rickshaw_graph .annotation_range {\n        background: rgba(0, 0, 0, 0.1);\n        display: none;\n        position: absolute;\n        top: 0;\n        bottom: -6px;\n}\n.rickshaw_graph .annotation_range.active {\n        display: block;\n}\n.rickshaw_graph .annotation_range.active.offscreen {\n        display: none;\n}\n\n.rickshaw_annotation_timeline .annotation .content {\n\tbackground: white;\n\tcolor: black;\n\topacity: 0.9;\n\tpadding: 5px 5px;\n\tbox-shadow: 0 0 2px rgba(0, 0, 0, 0.8);\n\tborder-radius: 3px;\n\tposition: relative;\n\tz-index: 20;\n\tfont-size: 12px;\n\tpadding: 6px 8px 8px;\n\ttop: 18px;\n\tleft: -11px;\n\twidth: 160px;\n\tdisplay: none;\n\tcursor: pointer;\n}\n.rickshaw_annotation_timeline .annotation .content:before {\n\tcontent: \"\\25b2\";\n\tposition: absolute;\n\ttop: -11px;\n\tcolor: white;\n\ttext-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8);\n}\n.rickshaw_annotation_timeline .annotation.active,\n.rickshaw_annotation_timeline .annotation:hover {\n\tbackground-color: rgba(0, 0, 0, 0.8);\n\tcursor: none;\n}\n.rickshaw_annotation_timeline .annotation .content:hover {\n\tz-index: 50;\n}\n.rickshaw_annotation_timeline .annotation.active .content {\n\tdisplay: block;\n}\n.rickshaw_annotation_timeline .annotation:hover .content {\n\tdisplay: block;\n\tz-index: 50;\n}\n.rickshaw_graph .y_axis,\n.rickshaw_graph  .x_axis_d3 {\n\tfill: none;\n}\n.rickshaw_graph .y_ticks .tick line,\n.rickshaw_graph .x_ticks_d3 .tick {\n\tstroke: rgba(0, 0, 0, 0.16);\n\tstroke-width: 2px;\n\tshape-rendering: crisp-edges;\n\tpointer-events: none;\n}\n.rickshaw_graph .y_grid .tick,\n.rickshaw_graph .x_grid_d3 .tick {\n\tz-index: -1;\n\tstroke: rgba(0, 0, 0, 0.20);\n\tstroke-width: 1px;\n\tstroke-dasharray: 1 1;\n}\n.rickshaw_graph .y_grid .tick[data-y-value=\"0\"] {\n\tstroke-dasharray: 1 0;\n}\n.rickshaw_graph .y_grid path,\n.rickshaw_graph .x_grid_d3 path  {\n\tfill: none;\n\tstroke: none;\n}\n.rickshaw_graph .y_ticks path,\n.rickshaw_graph .x_ticks_d3 path {\n\tfill: none;\n\tstroke: #808080;\n}\n.rickshaw_graph .y_ticks text,\n.rickshaw_graph .x_ticks_d3 text {\n\topacity: 0.5;\n\tfont-size: 12px;\n\tpointer-events: none;\n}\n.rickshaw_graph .x_tick.glow .title,\n.rickshaw_graph .y_ticks.glow text {\n\tfill: black;\n\tcolor: black;\n\ttext-shadow: \n\t\t-1px 1px 0 rgba(255, 255, 255, 0.1),\n\t\t1px -1px 0 rgba(255, 255, 255, 0.1),\n\t\t1px 1px 0 rgba(255, 255, 255, 0.1),\n\t\t0px 1px 0 rgba(255, 255, 255, 0.1),\n\t\t0px -1px 0 rgba(255, 255, 255, 0.1),\n\t\t1px 0px 0 rgba(255, 255, 255, 0.1),\n\t\t-1px 0px 0 rgba(255, 255, 255, 0.1),\n\t\t-1px -1px 0 rgba(255, 255, 255, 0.1);\n}\n.rickshaw_graph .x_tick.inverse .title,\n.rickshaw_graph .y_ticks.inverse text {\n\tfill: white;\n\tcolor: white;\n\ttext-shadow: \n\t\t-1px 1px 0 rgba(0, 0, 0, 0.8),\n\t\t1px -1px 0 rgba(0, 0, 0, 0.8),\n\t\t1px 1px 0 rgba(0, 0, 0, 0.8),\n\t\t0px 1px 0 rgba(0, 0, 0, 0.8),\n\t\t0px -1px 0 rgba(0, 0, 0, 0.8),\n\t\t1px 0px 0 rgba(0, 0, 0, 0.8),\n\t\t-1px 0px 0 rgba(0, 0, 0, 0.8),\n\t\t-1px -1px 0 rgba(0, 0, 0, 0.8);\n}\n.rickshaw_legend {\n\tfont-family: Arial;\n\tfont-size: 12px;\n\tcolor: white;\n\tbackground: #404040;\n\tdisplay: inline-block;\n\tpadding: 12px 5px; \n\tborder-radius: 2px;\n\tposition: relative;\n}\n.rickshaw_legend:hover {\n\tz-index: 10;\n}\n.rickshaw_legend .swatch {\n\twidth: 10px;\n\theight: 10px;\n\tborder: 1px solid rgba(0, 0, 0, 0.2);\n}\n.rickshaw_legend .line {\n\tclear: both;\n\tline-height: 140%;\n\tpadding-right: 15px;\n}\n.rickshaw_legend .line .swatch {\n\tdisplay: inline-block;\n\tmargin-right: 3px;\n\tborder-radius: 2px;\n}\n.rickshaw_legend .label {\n\tmargin: 0;\n\twhite-space: nowrap;\n\tdisplay: inline;\n\tfont-size: inherit;\n\tbackground-color: transparent;\n\tcolor: #222222;\n\tfont-weight: normal;\n\tline-height: normal;\n\tpadding: 0px;\n\ttext-shadow: none;\n}\n.rickshaw_legend .action:hover {\n\topacity: 0.6;\n}\n.rickshaw_legend .action {\n\tmargin-right: 0.2em;\n\tfont-size: 10px;\n\topacity: 0.2;\n\tcursor: pointer;\n\tfont-size: 14px;\n}\n.rickshaw_legend .line.disabled {\n\topacity: 0.4;\n}\n.rickshaw_legend ul {\n\tlist-style-type: none;\n\tmargin: 0;\n\tpadding: 0;\n\tmargin: 2px;\n\tcursor: pointer;\n}\n.rickshaw_legend li {\n\tpadding: 0 0 0 2px;\n\tmin-width: 80px;\n\twhite-space: nowrap;\n}\n.rickshaw_legend li:hover {\n\tbackground: rgba(255, 255, 255, 0.08);\n\tborder-radius: 3px;\n}\n.rickshaw_legend li:active {\n\tbackground: rgba(255, 255, 255, 0.2);\n\tborder-radius: 3px;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/seeddb.scss",
    "content": ".readonly {\n  border: none;\n}\n\n.advanced {\n  display: none;\n}\n\n/* Style the tables on the index page */\n\n.seeddbtable td:first-child {\n    width: 15%;\n}\n\n.seeddbtable td:nth-child(2) {\n    width: 70%;\n}\n\n.seeddbtable td:nth-child(3) {\n    width: 5%;\n}\n\n.seeddbtable td:last-child {\n    width: 10%;\n}\n\n.required:after {\n        content: \" *\";\n        color: #F00;\n        font-weight: bold;\n}\n\n.asteriskField {\n    color: #F00;\n    font-weight: bold;\n}\n\n/* Style the general info tables */\n\n#tablewrapper {\n    margin-bottom: 1em;\n}\n\n#seeddb-content th {\n    white-space: nowrap;\n}\n\n/* Style the form for bulk upload */\n\n#id_bulk_data {\n    height: 20em;\n}\n\n#map {\n    height: 400px;\n    width: 100%;\n}\n\n/* Make sure tables are wide enough */\n\n.tabcontent form table.edit {\n    min-width: 50%;\n}\n\n\n/* Style alias tags widget */\n.alias-tags {\n  --alias-tag-bg: #d9edf7;\n  --alias-tag-border: #bce8f1;\n\n  margin-top: 0.25rem;\n  margin-bottom: 1rem;\n\n  .alias-tags-list {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 0.35rem;\n  }\n\n  .alias-tag {\n    font-size: 0.85rem;\n    padding: 0.25rem 0.4rem;\n    background: var(--alias-tag-bg);\n    border-color: var(--alias-tag-border);\n\n    &--pending {\n      opacity: 0.5;\n    }\n  }\n\n  .alias-tag-remove {\n    all: unset;\n    cursor: pointer;\n    opacity: 0.7;\n\n    &:hover {\n      opacity: 1;\n    }\n\n    &:focus-visible {\n      outline: 2px solid currentColor;\n      outline-offset: 1px;\n    }\n  }\n\n  .alias-tags-input-wrapper {\n    flex: 1;\n    min-width: 10rem;\n    max-width: 15rem;\n    position: relative;\n  }\n\n  .alias-tags-counter {\n    position: absolute;\n    right: 0;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 0.7rem;\n    color: #888;\n    padding-right: 0.4rem;\n    pointer-events: none;\n  }\n\n  .alias-tags-input {\n    width: 100%;\n    margin-bottom: 0;\n    padding: 0.25rem 0.4rem;\n    font-size: 0.85rem;\n    line-height: inherit;\n    height: auto;\n  }\n}\n\n/* Style thekey value pairs for editing hstore fields */\n.hstoreValues {\n    .remove-hstore-row {\n        .fa {\n            margin-left: auto;\n        }\n    }\n    .column {\n        margin-bottom: 0.5em;\n    }\n}\n\n/* Sets monospaced font on the select2 dropdown that is used in \"parent\"-selections */\n.parent-element .select2-results  {\n    font-family: \"Courier New\", Courier, monospace;\n    .select2-results__option {\n        font-size: 1.2rem;\n        line-height: 1.1;\n        padding: 0;\n    }\n}\n\n\n/* Choices in form of radiobuttons. Use as is or if crispy forms wrap in div and\ngive this class  */\n.choice-radio-button {\n    ul {\n        margin-left: 0;\n        margin-bottom: 1rem;\n        list-style-type: none;\n        display: flex;\n        li {\n            margin: .5rem 1rem .5rem 0;\n            &:last-child {\n                margin-right: 0;\n            }\n            label {\n                display: flex;\n                align-items: center;\n                input {\n                    margin: 0 .2em 0 0;\n                }\n            }\n        }\n    }\n\n}\n\n/* Style SeedDB netbox form */\n#seeddb-netbox-form.loading {\n  opacity: 0.5;\n  pointer-events: none;\n}\n#check-connectivity-button {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  & > * {\n    margin-bottom: 0;\n  }\n}\n#connectivity-results {\n  *:last-child {\n    margin-bottom: 0;\n  }\n  .alert-box {\n    margin-top: 1.25rem;\n  }\n}\n\n/* Style profile dropdown options with links */\n.select2-results {\n  .profile-option-container {\n    position: relative;\n    padding-right: 35px;\n  }\n\n  .select2-results__option--highlighted .profile-link {\n    color: #fff;\n  }\n\n  .profile-link {\n    position: absolute;\n    right: 5px;\n    top: 50%;\n    transform: translateY(-50%);\n    padding: 1px 4px;\n    text-decoration: none;\n    font-size: 0.875rem;\n\n    &:hover {\n      color: #008CBA;\n      background-color: #fff;\n      text-decoration: none;\n    }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/status.scss",
    "content": "\n#status-panel { max-width: 830px; }\n\ntable.expandable {\n    /* Prevent the default alteration of row color */\n    tr.even, tr.alt, tr:nth-of-type(even) {\n        background: inherit;\n    }\n\n\n    tr {\n        /* Mark rows that has some kind of status */\n        &.hasStatus {\n\n        }\n        /* Set background and inset effect on the event info panel */\n        &.expanded td {\n                box-shadow: inset 0px 0px 6px #aaaaaa;\n                background-color: #EEEEEE;\n        }\n    }\n\n    /* Prevent cells from being selected when sorting */\n    th {\n        -webkit-touch-callout: none;\n        -webkit-user-select: none;\n        -khtml-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n    }\n\n    /* Override default font size so that text in the event info panel is not that big */\n    li, p {\n        font-size: 0.9rem;\n    }\n}\n\n#action-help-content {\n    margin: 0.5rem 0 1rem 0;\n    padding: 1rem;\n    background-color: #ffffff;\n    border: 1px solid #cccccc;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/subnet_matrix.scss",
    "content": "/* Subsystem stylesheet for NAV\n *\n * Copyright (C) 2006 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n$color_usage_high: #d2322d;\n$color_usage_medium: hsl(28, 100, 80);\n$color_usage_low: #efe0cd;\n$color_usage_vlow: #c5d2c8;\n\n$color_other: #e0c39e;\n$color_large: #ada7c8;\n\n\n#subnet-matrix {\n    td:first-child, th:first-child {\n        width: 10.4%;\n        text-align: left;\n    }\n    td, th {\n        padding-left: 0;\n        padding-right: 0;\n        text-align: center;\n        transition: color 3s, background-color 3s;\n        &.has-data {\n            border: 1px solid #FFFFFF;\n            a {\n                /* Need darker colors for links with all these different backgrounds here */\n                &:hover { text-decoration: underline; }\n            }\n            .fill-cell {\n                display: block;\n                width: 100%;\n            }\n        }\n        &.has-loaded {\n            cursor: pointer;\n        }\n    }\n    &.ipv4 {\n        td, th {\n            width: 1.4%;\n        }\n        th {\n            text-align: left;\n        }\n        td {\n            &.usage-high { background-color: $color_usage_high; a { color: white; }}\n            &.usage-medium { background-color: $color_usage_medium; }\n            &.usage-low { background-color: $color_usage_low; }\n            &.usage-vlow { background-color: $color_usage_vlow; }\n            &.subnet-other { background-color: $color_other; }\n            &.subnet-large { background-color: $color_large; }\n        }\n    }\n    &.ipv6 {\n        td, th {\n            width: 5.625%;\n        }\n    }\n}\n\n#subnet-matrix .popover {\n    margin: 0 auto;\n    .popover-trigger {\n      padding: 9px 10px;\n    }\n   .popover-content {\n      min-width: 250px;\n      text-align: left;\n      p { margin-bottom: 0.5rem; }\n      .usage-sparkline {\n          background-color: cornflowerblue;\n          margin-top: 1em;\n          padding: 5px 3px;\n      }\n  }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/syslogger.scss",
    "content": ".multitable {\n    overflow: auto;\n}\n\n.multitable > table {\n    float: left;\n    margin-right: 1em;\n}\n\n.dataTables_wrapper {\n\tpadding:5px;\n}\n\n.ctrlHolder {\n\tmargin-bottom:10px;\n}"
  },
  {
    "path": "python/nav/web/sass/nav/threshold.scss",
    "content": ".ui-autocomplete {\n    max-height: 200px;\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n\n.spinContainer {\n    width: 480px;\n    height: 250px;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/treeselect.scss",
    "content": "/* Treeselect stylesheet for NAV\n *\n * Copyright (C) 2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.treeselect label {\n\tfont-weight: bold;\n\tdisplay: block;\n}\n.treeselect select, .treeselect input {\n\tmargin-bottom: 1em;\n\twidth: 25em;\n}\n.treeselect div {\n\tfloat: left;\n\tmargin-right: 0.5em;\n}\n.treeselect:after {\n\tcontent: '.';\n\tvisibility: hidden;\n\tdisplay: block;\n\theight: 0;\n\tclear: both;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/useradmin.scss",
    "content": "/* Custom global styles */\n@import '../navsettings';\n\n/* Useradmin local styles */\n.fa.warning {\n  color: $warning-color;\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav/watchdog.scss",
    "content": ".watchdog-tests {\n    ul {\n        max-height: 300px;\n        overflow: auto;\n    }\n    li {\n        padding: 0.2em;\n        .label.alert {\n            cursor: pointer;\n        }\n        &:nth-child(odd) {\n            background-color: #F9F9F9;\n        }\n    }\n    .label {\n        line-height: 1.4em;\n        width: 60px;\n    }\n    .wd-test-description {\n        i {\n            color: gainsboro;\n            transition: color .5s;\n            &:hover {\n                color: black;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "python/nav/web/sass/nav.scss",
    "content": "// Custom fonts and icons\n@import \"fonts\";\n@import \"font-awesome/font-awesome\";\n\n// Nav settings comes first\n@import \"navsettings\";\n\n// Comment out this import if you don't want to use normalize\n@import \"normalize\";\n\n// Comment out this import if you are customizing you imports below\n@import \"foundation\";\n\n// NAV global custom css\n@import \"nav/accordion\";\n@import \"nav/datatables\";\n@import \"nav/dialog\";\n@import \"nav/tabs\";\n@import \"nav/table\";\n@import \"nav/footer\";\n@import \"nav/rickshaw\";\n@import \"nav/lightbox\";\n@import \"nav/modal\";\n@import \"nav/tooltip\";\n@import \"nav/popover\";\n@import \"nav/maintenance\";\n\n// Custom css for libraries\n@import \"libs/driver\";\n@import \"libs/flatpickr\";\n@import \"libs/select2.min\";\n\n// NAV customizations for Select2 v4\n@import \"nav/select2\";\n\n// Overriding classes and mixins\n@import \"overrides\";\n"
  },
  {
    "path": "python/nav/web/security.py",
    "content": "from pathlib import Path\n\nfrom nav.config import NavConfigParserDefaultSection\n\n\nclass WebSecurityConfigParser(NavConfigParserDefaultSection):\n    SECTION = \"security\"\n    DEFAULT_CONFIG_FILES = [str(Path('webfront') / 'webfront.conf')]\n    DEFAULT_CONFIG = \"\"\"\n[security]\nneeds_tls=no\nallow_frames=self\n\"\"\"\n    FRAMES_OPTION = 'allow_frames'\n    FRAMES_DEFAULT = 'self'\n\n    def __init__(self):\n        super().__init__(self.SECTION)\n\n    # clickjacking-settings\n\n    def get_x_frame_options(self):\n        \"Translate CSP frame ancestors to the old X-Frame-Options header\"\n        frames_flag = self.get(self.FRAMES_OPTION) or self.FRAMES_DEFAULT\n        if frames_flag == 'none':\n            return 'DENY'\n        return 'SAMEORIGIN'\n"
  },
  {
    "path": "python/nav/web/seeddb/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\nfrom nav.web.seeddb.constants import TITLE_DEFAULT, NAVPATH_DEFAULT\n\n\nclass SeeddbInfo(object):\n    active = {'index': True}\n    active_page = ''\n    caption = 'Seed Database'\n    verbose_name = ''\n    tab_template = None\n\n    _title = ''\n    _navpath = []\n\n    hide_move = False\n    hide_delete = False\n    hide_qr_code = True\n    copy_url_name = None\n    delete_url = None\n    delete_url_name = None\n    back_url = None\n    add_url = None\n    bulk_url = None\n    documentation_url = None\n\n    @property\n    def title(self):\n        sub_title = ''\n        if self._title:\n            sub_title = ' - %s' % self._title\n        return TITLE_DEFAULT + sub_title\n\n    @property\n    def navpath(self):\n        return NAVPATH_DEFAULT + self._navpath\n\n    @property\n    def template_context(self):\n        return {\n            'active': self.active,\n            'active_page': self.active_page,\n            'documentation_url': self.documentation_url,\n            'title': self.title,\n            'verbose_name': self.verbose_name,\n            'caption': self.caption,\n            'navpath': self.navpath,\n            'tab_template': self.tab_template,\n            'hide_move': self.hide_move,\n            'hide_delete': self.hide_delete,\n            'hide_qr_code': self.hide_qr_code,\n            'delete_url': self.delete_url,\n            'delete_url_name': self.delete_url_name,\n            'back_url': self.back_url,\n            'add_url': self.add_url,\n            'bulk_url': self.bulk_url,\n            'copy_url_name': self.copy_url_name,\n        }\n"
  },
  {
    "path": "python/nav/web/seeddb/constants.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom nav.models.manage import (\n    Netbox,\n    NetboxType,\n    ManagementProfile,\n    NetboxProfile,\n    Room,\n    Location,\n    Organization,\n    Device,\n    Usage,\n    Vendor,\n    NetboxGroup,\n    Vlan,\n    Prefix,\n)\nfrom nav.models.service import Service\n\nTITLE_DEFAULT = 'NAV - Seed Database'\nNAVPATH_DEFAULT = [('Home', '/'), ('Seed DB', '/seeddb/')]\nSEEDDB_EDITABLE_MODELS = (\n    Netbox,\n    NetboxType,\n    ManagementProfile,\n    NetboxProfile,\n    Room,\n    Location,\n    Organization,\n    Device,\n    Usage,\n    Vendor,\n    NetboxGroup,\n    Vlan,\n    Prefix,\n    Service,\n)\n"
  },
  {
    "path": "python/nav/web/seeddb/forms/__init__.py",
    "content": "# -*- coding: utf-8 -*-#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for seeddb pages\"\"\"\n\nimport logging\n\nfrom django import forms\nfrom django.utils.safestring import mark_safe\n\nfrom nav.django.forms import AliasListField, HStoreField\nfrom nav.models.manage import (\n    Location,\n    Room,\n    Organization,\n    NetboxType,\n    Vendor,\n    NetboxGroup,\n    Netbox,\n)\nfrom nav.models.cabling import Cabling\nfrom nav.oids import OID\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    SubmitField,\n    set_flat_form_attributes,\n)\n\n_logger = logging.getLogger(__name__)\n\n\nBOX_CHARS = {\n    'SPACE': '&nbsp;',\n    'VERTICAL': '&#9474;',  # │\n    'UP_AND_RIGHT': '&#9492;',  # └\n    'VERTICAL_AND_RIGHT': '&#9500;',  # ├\n}\nSEPARATOR = \".\"\n\n\ndef create_hierarchy(klass):\n    \"\"\"Creates a tree structure for select choices\n\n    This is used in forms that use Organization and Location fields, and will\n    visualize the tree structure of the data.\n    \"\"\"\n    roots = klass.objects.filter(parent__isnull=True).order_by('id')\n    choices = [('', '---------')]\n    for index, root in enumerate(roots):\n        is_last_root = index == roots.count() - 1\n        ancestors = []\n        choices = choices + create_choices(root, ancestors, is_last_root)\n    return choices\n\n\ndef create_choices(element, ancestors, is_last_child=False):\n    \"\"\"Recursively create a choice for the element and its children\n\n    :param element: a model instance using the TreeMixin\n    :param ancestors: list of booleans for each ancestor, indicating if that\n                      ancestor was the last child\n    :param is_last_child: indicates if this is the last child\n\n    :returns: a list of tuples meant to be used as choices in a form select. The\n              string element is padded to indicate placement in a tree-structure\n    \"\"\"\n    choices = [(element.pk, tree_pad(str(element.pk), ancestors, last=is_last_child))]\n    child_ancestors = ancestors + [is_last_child]\n    children = element.get_children()\n    num_children = children.count()\n    for index, child in enumerate(children):\n        last = index == num_children - 1\n        choices = choices + create_choices(child, child_ancestors, is_last_child=last)\n\n    return choices\n\n\ndef tree_pad(string, ancestors, last=False):\n    \"\"\"Pad the string according to ancestors and position\n\n    :param ancestors: a list of booleans for each ancestor. The value indicates\n                      if this ancestor was the last child\n    :param last: indicates if this is the last child\n\n    :returns: a string (marked safe) representing an option in a dropdown,\n              drawing it's part of the tree-structure\n    \"\"\"\n    charmap = {\n        True: BOX_CHARS['UP_AND_RIGHT'] + BOX_CHARS['SPACE'],  # └\n        False: BOX_CHARS['VERTICAL_AND_RIGHT'] + BOX_CHARS['SPACE'],  # ├\n    }\n\n    if ancestors:\n        string = \"\".join([get_prefix(ancestors), charmap[last], string])\n    return mark_safe(string)\n\n\ndef get_prefix(ancestors):\n    \"\"\"Adds characters based on ancestor last child status\"\"\"\n    charmap = {\n        True: 2 * BOX_CHARS['SPACE'],  # double space\n        False: BOX_CHARS['VERTICAL'] + BOX_CHARS['SPACE'],  # │\n    }\n    return \"\".join([charmap[x] for x in ancestors[1:]])\n\n\ndef cut_branch(field, klass, pk):\n    \"\"\"Filter choices for a field based on descendants of an instance\"\"\"\n    descendants = klass.objects.get(pk=pk).get_descendants(include_self=True)\n    descendant_ids = [d.pk for d in descendants]\n    return [c for c in field.choices if c[0] not in descendant_ids]\n\n\n# helpers\n\n\ndef get_single_layout(heading, filter_field):\n    \"\"\"Get default layout for a single filter\"\"\"\n    return set_flat_form_attributes(\n        form_class=\"custom\",\n        form_method=\"get\",\n        form_fields=[\n            FlatFieldset(\n                legend=heading,\n                fields=[\n                    FormRow(\n                        fields=[\n                            FormColumn(fields=[filter_field], css_classes=\"medium-8\"),\n                            FormColumn(\n                                fields=[\n                                    SubmitField(\n                                        value=\"Filter\",\n                                        css_classes=\"postfix\",\n                                        has_empty_label=True,\n                                    )\n                                ],\n                                css_classes=\"medium-4\",\n                            ),\n                        ]\n                    )\n                ],\n            )\n        ],\n    )\n\n\n# forms\n\n\nclass RoomFilterForm(forms.Form):\n    \"\"\"Form for filtering rooms\"\"\"\n\n    location = forms.ModelChoiceField(\n        Location.objects.order_by('id').all(), required=False\n    )\n    location.widget.attrs.update({\"class\": \"select\"})\n\n    def __init__(self, *args, **kwargs):\n        super(RoomFilterForm, self).__init__(*args, **kwargs)\n        self.attrs = get_single_layout(\n            heading=\"Filter rooms\", filter_field=self[\"location\"]\n        )\n\n\nclass RoomForm(forms.ModelForm):\n    \"\"\"Form for editing/adding rooms\"\"\"\n\n    location = forms.ChoiceField(choices=())\n    data = HStoreField(label='Attributes', required=False)\n    aliases = AliasListField(label='Aliases', required=False, verbose_name='room')\n\n    def __init__(self, *args, **kwargs):\n        super(RoomForm, self).__init__(*args, **kwargs)\n        self.fields['location'].choices = create_hierarchy(Location)\n        if self.instance and self.instance.pk:\n            self.fields['id'].widget.attrs['readonly'] = True\n\n    class Meta(object):\n        model = Room\n        fields = ('id', 'location', 'description', 'aliases', 'position', 'data')\n\n    def clean_location(self):\n        data = self.cleaned_data.get('location')\n        return Location.objects.get(pk=data)\n\n\nclass RoomMoveForm(forms.Form):\n    \"\"\"Form for moving a room to a new location\"\"\"\n\n    location = forms.ModelChoiceField(\n        Location.objects.order_by('id').all(), required=False\n    )\n\n\nclass LocationForm(forms.ModelForm):\n    \"\"\"Form for editing and adding a location\"\"\"\n\n    parent = forms.ChoiceField(required=False)\n    data = HStoreField(label='Attributes', required=False)\n    aliases = AliasListField(label='Aliases', required=False, verbose_name='location')\n\n    class Meta(object):\n        model = Location\n        fields = ('parent', 'id', 'description', 'aliases', 'data')\n\n    def __init__(self, *args, **kwargs):\n        super(LocationForm, self).__init__(*args, **kwargs)\n        field = self.fields['parent']\n        field.choices = create_hierarchy(Location)\n\n        if self.instance.id:\n            # disallow editing the primary key of existing record\n            del self.fields['id']\n            # remove self and all descendants from list of selectable parents\n            field.choices = cut_branch(field, Location, self.instance.id)\n\n    def clean_parent(self):\n        \"\"\"Provide a model as the parent.\n\n        This is needed because we use a normal ChoiceField (because of the tree\n        structure) that does not provide a model instance when selected.\n        \"\"\"\n        parent = self.cleaned_data.get('parent')\n        if parent:\n            return Location.objects.get(pk=parent)\n        else:\n            # Explicitly return None because no parent is an empty string and\n            # thus we need to return None not the empty string\n            return None\n\n\nclass OrganizationForm(forms.ModelForm):\n    \"\"\"Form for editing an organization\"\"\"\n\n    parent = forms.ChoiceField(required=False)\n    data = HStoreField(label='Attributes', required=False)\n\n    class Meta(object):\n        model = Organization\n        fields = '__all__'\n\n    def __init__(self, *args, **kwargs):\n        super(OrganizationForm, self).__init__(*args, **kwargs)\n        field = self.fields['parent']\n        field.choices = create_hierarchy(Organization)\n\n        if self.instance.id:\n            # disallow editing the primary key of existing record\n            del self.fields['id']\n            # remove self and all descendants from list of selectable parents\n            field.choices = cut_branch(field, Organization, self.instance.id)\n\n    def clean_parent(self):\n        \"\"\"Provide a model as the parent.\n\n        This is needed because we use a normal ChoiceField (because of the tree\n        structure) that does not provide a model instance when selected.\n        \"\"\"\n        parent = self.cleaned_data.get('parent')\n        if parent:\n            return Organization.objects.get(pk=parent)\n        else:\n            # Explicitly return None because no parent is an empty string and\n            # thus we need to return None, not the empty string\n            return None\n\n\nclass OrganizationMoveForm(forms.Form):\n    \"\"\"Form for moving an organization to another parent\"\"\"\n\n    parent = forms.ModelChoiceField(\n        Organization.objects.order_by('id').all(), required=False\n    )\n\n\nclass NetboxTypeFilterForm(forms.Form):\n    \"\"\"Form for filtering a netbox type by vendor\"\"\"\n\n    vendor = forms.ModelChoiceField(Vendor.objects.order_by('id').all(), required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(NetboxTypeFilterForm, self).__init__(*args, **kwargs)\n        self.attrs = get_single_layout(\n            heading=\"Filter types\", filter_field=self[\"vendor\"]\n        )\n\n\nclass NetboxTypeForm(forms.ModelForm):\n    \"\"\"Form for editing a netbox type\"\"\"\n\n    class Meta(object):\n        model = NetboxType\n        fields = '__all__'\n\n    def clean_sysobjectid(self):\n        sysobjectid = self.cleaned_data.get('sysobjectid')\n        try:\n            sysobjectid_oid = OID(sysobjectid)\n        except ValueError:\n            raise forms.ValidationError(\n                \"Sysobjectid can only contain digits and periods.\"\n            )\n        else:\n            return str(sysobjectid_oid).strip(SEPARATOR)\n\n\nclass CablingForm(forms.ModelForm):\n    \"\"\"Form for editing a cabling instance\"\"\"\n\n    class Meta(object):\n        model = Cabling\n        fields = '__all__'\n        widgets = {'room': forms.Select(attrs={'class': 'select2'})}\n\n\nclass DeviceGroupForm(forms.ModelForm):\n    \"\"\"Form for editing a device group\n\n    We need to create the netboxes field for the many to many relationship, as\n    this is only created by Django on modelforms based on the model where the\n    field is defined (in this case nav.models.manage.Netbox).\n    \"\"\"\n\n    netboxes = forms.ModelMultipleChoiceField(\n        queryset=Netbox.objects.all(), required=False\n    )\n    netboxes.widget.attrs.update({\"class\": \"select2\"})\n\n    def __init__(self, *args, **kwargs):\n        # If the form is based on an existing model instance, populate the\n        # netboxes field with netboxes from the many to many relationship\n        if 'instance' in kwargs and kwargs['instance'] is not None:\n            initial = kwargs.setdefault('initial', {})\n            initial['netboxes'] = [n.pk for n in kwargs['instance'].netboxes.all()]\n        forms.ModelForm.__init__(self, *args, **kwargs)\n\n    class Meta(object):\n        model = NetboxGroup\n        fields = '__all__'\n\n\ndef to_choice_format(objects, key, value):\n    \"\"\"Return a list of tuples from model given key and value\"\"\"\n    return [(getattr(obj, key), getattr(obj, value)) for obj in objects]\n\n\ndef get_netboxes_in_group(group):\n    if group:\n        return group.netboxes.all()\n    else:\n        return Netbox.objects.none()\n\n\ndef get_netboxes_not_in_group(group):\n    if group:\n        return Netbox.objects.exclude(\n            pk__in=group.netboxes.all().values_list('id', flat=True)\n        )\n    else:\n        return Netbox.objects.all()\n"
  },
  {
    "path": "python/nav/web/seeddb/forms/bulk.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms used for Bulk import of data\"\"\"\n\nfrom django import forms\n\nfrom nav.bulkparse import BulkParseError, CommentStripper\nfrom nav.bulkimport import BulkImportError\n\n\nclass BulkImportForm(forms.Form):\n    \"\"\"Generic bulk import form\"\"\"\n\n    bulk_file = forms.FileField(label=\"Upload a bulk data file\", required=False)\n\n    bulk_data = forms.CharField(\n        label=\"Or paste data here\",\n        required=False,\n        widget=forms.Textarea(attrs={'rows': 25, 'cols': 80}),\n    )\n\n    def __init__(self, parser, *args, **kwargs):\n        self.parser = parser\n        kwargs['initial'] = {'bulk_data': \"%s\\n\" % self.parser.get_header()}\n        super(BulkImportForm, self).__init__(*args, **kwargs)\n\n        if self.is_bound and self.is_valid():\n            self.fields['bulk_file'].widget = forms.HiddenInput()\n            self.fields['bulk_data'].widget = forms.HiddenInput()\n\n    def get_raw_data(self):\n        \"\"\"Returns the bulk data as an utf-8 encoded string\"\"\"\n        return self.cleaned_data.get('bulk_data', None)\n\n    def get_parser(self):\n        \"\"\"Returns a parser instance primed with the form's bulk data\"\"\"\n        return self.parser(self.get_raw_data())\n\n    def clean(self):\n        \"\"\"Ensures that either the bulk text is filled, or the bulk file\n        uploaded.\n\n        \"\"\"\n        if self._no_data_found() or self._is_bulk_data_unchanged():\n            raise forms.ValidationError(\"There was no data in the form\")\n\n        return self.cleaned_data\n\n    def clean_bulk_data(self):\n        \"\"\"Replaces the bulk data with the contents of the uploaded file, if any\"\"\"\n        bulk_file = self.files.get(\"bulk_file\", None)\n        if bulk_file:\n            cleaned_data = bulk_file.read().decode(\"utf-8\")\n        else:\n            cleaned_data = self.cleaned_data.get(\"bulk_data\", \"\")\n\n        if self._is_bulk_data_empty(cleaned_data):\n            raise forms.ValidationError(\"There was nothing to import\")\n        else:\n            return cleaned_data\n\n    def _no_data_found(self):\n        bulk_file = self.files.get('bulk_file', None)\n        bulk_data = self.cleaned_data.get('bulk_data', None)\n        return not bulk_file and not bulk_data\n\n    def _is_bulk_data_unchanged(self):\n        bulk_data = self.cleaned_data.get('bulk_data', '').strip()\n        bulk_initial = self.initial.get('bulk_data', '').strip()\n        return bulk_data == bulk_initial\n\n    @staticmethod\n    def _is_bulk_data_empty(bulk_data):\n        bulk_lines = bulk_data.split('\\n')\n        stripper = CommentStripper(iter(bulk_lines))\n        stripped_lines = [line for line in stripper if line.strip()]\n        return len(stripped_lines) < 1\n\n    def bulk_process_check(self, importer):\n        \"\"\"Processes the bulk data using the importer and returns a list of\n        status dictionaries for each line of the import.\n\n        \"\"\"\n        data = self.get_raw_data()\n        lines = data.split('\\n')\n        processed = []\n        for line_num, objects in importer:\n            if isinstance(objects, BulkParseError):\n                processed.append(\n                    {\n                        'status': (\n                            isinstance(objects, BulkImportError) and 'other' or 'syntax'\n                        ),\n                        'line_number': line_num,\n                        'input': lines[line_num - 1],\n                        'message': objects,\n                    }\n                )\n            else:\n                processed.append(\n                    {\n                        'status': 'ok',\n                        'line_number': line_num,\n                        'input': lines[line_num - 1],\n                        'message': '',\n                    }\n                )\n        return processed\n"
  },
  {
    "path": "python/nav/web/seeddb/page/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.shortcuts import render\n\nfrom nav.web.seeddb.constants import TITLE_DEFAULT\n\n\ndef index(request):\n    \"\"\"Index page. Nothing particularly interesting going on.\"\"\"\n    return render(\n        request,\n        'seeddb/index.html',\n        {\n            'title': TITLE_DEFAULT,\n            'navpath': [('Home', '/'), ('Seed DB', None)],\n            'active': {'index': True},\n        },\n    )\n\n\ndef not_implemented(*_args, **_kwargs):\n    \"\"\"Simple method used with the view_switcher.\n\n    Raises \"not implemented if called, but the list pages should make sure this\n    function is never called.\n    \"\"\"\n    raise NotImplementedError()\n\n\ndef view_switcher(\n    request,\n    list_view=None,\n    move_view=None,\n    delete_view=None,\n    download_qr_codes_view=None,\n):\n    \"\"\"Selects appropriate view depending on POST data.\"\"\"\n    if request.method == 'POST':\n        if 'move' in request.POST:\n            return move_view(request)\n        elif 'delete' in request.POST:\n            return delete_view(request)\n        elif 'qr_code' in request.POST:\n            return download_qr_codes_view(request)\n    return list_view(request)\n"
  },
  {
    "path": "python/nav/web/seeddb/page/cabling.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.urls import reverse_lazy\n\nfrom nav.models.cabling import Cabling\nfrom nav.models.manage import Room\nfrom nav.bulkparse import CablingBulkParser\nfrom nav.bulkimport import CablingImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\n\nfrom ..forms import CablingForm\n\n\nclass CablingInfo(SeeddbInfo):\n    active = {'cabling': True}\n    caption = 'Cabling'\n    active_page = 'cabling'\n    documentation_url = '/doc/reference/cabling_and_patch.html'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Cabling'\n    verbose_name = Cabling._meta.verbose_name\n    _navpath = [('Cabling', reverse_lazy('seeddb-cabling'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-cabling')\n    delete_url_name = 'seeddb-cabling-delete'\n    back_url = reverse_lazy('seeddb-cabling')\n    add_url = reverse_lazy('seeddb-cabling-add')\n    bulk_url = reverse_lazy('seeddb-cabling-bulk')\n\n\ndef cabling(request):\n    return view_switcher(\n        request,\n        list_view=cabling_list,\n        move_view=not_implemented,\n        delete_view=cabling_delete,\n    )\n\n\ndef cabling_list(request):\n    info = CablingInfo()\n    query = Cabling.objects.none()  # Everything is fetched by API\n    value_list = ('room', 'jack', 'building', 'target_room', 'category', 'description')\n    context = info.template_context\n    context.update({'rooms': Room.objects.all().order_by('id')})\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-cabling-edit',\n        template='seeddb/list_cables.html',\n        extra_context=context,\n    )\n\n\ndef cabling_delete(request, object_id=None):\n    info = CablingInfo()\n    return render_delete(\n        request,\n        Cabling,\n        'seeddb-cabling',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef cabling_edit(request):\n    info = CablingInfo()\n    cabling_id = request.GET.get('cablingid')\n    return render_edit(\n        request,\n        Cabling,\n        CablingForm,\n        cabling_id,\n        'seeddb-cabling-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef cabling_bulk(request):\n    info = CablingInfo()\n    return render_bulkimport(\n        request,\n        CablingBulkParser,\n        CablingImporter,\n        'seeddb-cabling',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/location.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.shortcuts import render\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import Location\nfrom nav.bulkparse import LocationBulkParser\nfrom nav.bulkimport import LocationImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.forms import LocationForm\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\n\n\nclass LocationInfo(SeeddbInfo):\n    active = {'location': True}\n    caption = 'Locations'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Locations'\n    verbose_name = Location._meta.verbose_name\n    _navpath = [('Locations', reverse_lazy('seeddb-location'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-location')\n    delete_url_name = 'seeddb-location-delete'\n    back_url = reverse_lazy('seeddb-location')\n    add_url = reverse_lazy('seeddb-location-edit')\n    bulk_url = reverse_lazy('seeddb-location-bulk')\n    copy_url_name = 'seeddb-location-copy'\n\n\ndef location(request):\n    return view_switcher(\n        request,\n        list_view=location_list,\n        move_view=not_implemented,\n        delete_view=location_delete,\n    )\n\n\ndef location_list(request):\n    info = LocationInfo()\n    context = info.template_context\n    context.update(\n        {\n            'roots': Location.objects.filter(parent=None).order_by('id'),\n            'edit_url_name': 'seeddb-location-edit',\n        }\n    )\n    return render(request, 'seeddb/list_tree.html', context)\n\n\ndef location_delete(request, object_id=None):\n    info = LocationInfo()\n    return render_delete(\n        request,\n        Location,\n        'seeddb-location',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef location_edit(request, location_id=None, action='edit'):\n    info = LocationInfo()\n    if location_id:\n        copy_url = reverse_lazy(\n            info.copy_url_name, kwargs={'action': 'copy', 'location_id': location_id}\n        )\n    else:\n        copy_url = None\n\n    _title = 'Use this location as a template for creating a new location'\n    if location_id:\n        detail_page_url = reverse_lazy(\n            'location-info', kwargs={'locationid': location_id}\n        )\n    else:\n        detail_page_url = \"\"\n    extra_context = {\n        'copy_url': copy_url,\n        'copy_title': _title,\n        'detail_page_url': detail_page_url,\n    }\n    extra_context.update(info.template_context)\n    return render_edit(\n        request,\n        Location,\n        LocationForm,\n        location_id,\n        'seeddb-location-edit',\n        extra_context=extra_context,\n        action=action,\n    )\n\n\ndef location_bulk(request):\n    info = LocationInfo()\n    return render_bulkimport(\n        request,\n        LocationBulkParser,\n        LocationImporter,\n        'seeddb-location',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/management_profile/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2017, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms and view functions for SeedDB's Management Profile view\"\"\"\n\nfrom django.db.models import Count\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render\nfrom django.urls import reverse, reverse_lazy\nfrom django.utils.html import format_html, mark_safe\n\nfrom nav.models.manage import ManagementProfile\nfrom nav.bulkparse import ManagementProfileBulkParser\nfrom nav.bulkimport import ManagementProfileImporter\nfrom nav.web.message import new_message, Messages\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\n\nfrom nav.web.seeddb.page.management_profile.forms import (\n    ManagementProfileFilterForm,\n    ManagementProfileForm,\n)\n\n\nNETBOX_LIST_PAGE = reverse_lazy('seeddb-netbox')\n\n\ndef _get_netbox_link(management_profile_id):\n    return '{}?profile={}'.format(NETBOX_LIST_PAGE, management_profile_id)\n\n\ndef add_netbox_links(rows):\n    for row in rows:\n        link_html = '0'\n        related_raw = row['values_list'][-1]\n        if related_raw:\n            link_html = format_html(\n                mark_safe(\"\"\"<a href=\"{}\">{}</a>\"\"\"),\n                _get_netbox_link(row['pk']),\n                related_raw,\n            )\n        row['values_list'][-1] = link_html\n    return rows\n\n\nclass ManagementProfileInfo(SeeddbInfo):\n    \"\"\"Management Profile info object\"\"\"\n\n    active = {'management_profile': True}\n    caption = 'Management Profile'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Management Profiles'\n    verbose_name = ManagementProfile._meta.verbose_name\n    _navpath = [('Management Profiles', reverse_lazy('seeddb-management-profile'))]\n    delete_url = reverse_lazy('seeddb-management-profile')\n    delete_url_name = 'seeddb-management-profile-delete'\n    back_url = reverse_lazy('seeddb-management-profile')\n    add_url = reverse_lazy('seeddb-management-profile-edit')\n    bulk_url = reverse_lazy('seeddb-management-profile-bulk')\n    hide_move = True\n\n\ndef management_profile(request):\n    \"\"\"Controller for listing, moving and deleting management profiles\"\"\"\n    return view_switcher(\n        request,\n        list_view=management_profile_list,\n        delete_view=management_profile_delete,\n    )\n\n\ndef management_profile_list(request):\n    \"\"\"Controller for listing management profiles. Used in\n    management_profile()\"\"\"\n    info = ManagementProfileInfo()\n    value_list = ('name', 'description', 'get_protocol_display', 'related')\n    queryset = ManagementProfile.objects.annotate(related=Count('netboxes'))\n    filter_form = ManagementProfileFilterForm(request.GET)\n    return render_list(\n        request,\n        queryset,\n        value_list,\n        edit_url='seeddb-management-profile-edit',\n        filter_form=filter_form,\n        extra_context=info.template_context,\n        add_related=add_netbox_links,\n    )\n\n\ndef management_profile_delete(request, object_id=None):\n    \"\"\"Controller for deleting management profiles. Used in\n    management_profile()\"\"\"\n    info = ManagementProfileInfo()\n    return render_delete(\n        request,\n        ManagementProfile,\n        redirect='seeddb-management-profile',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef management_profile_edit(request, management_profile_id=None):\n    \"\"\"Controller for editing a management profile.\n\n    The basic profile details are handled by the ManagementProfileForm. Protocol\n    specific configuration is stored in a JSONField, and the responsibility of\n    constructing this JSON structure is delegated to protocol-specific sub-forms.\n\n    Because of the more complicated handling of forms in this view, the standard\n    render_edit() function of SeedDB is eschewed. This leads to some redundancies\n    that can potentially be factored out whenever the mess that is SeedDB is\n    refactored or rewritten.\n\n    \"\"\"\n    try:\n        profile = ManagementProfile.objects.get(id=management_profile_id)\n        num_netboxes = profile.netboxes.distinct().count()\n    except ManagementProfile.DoesNotExist:\n        profile = None\n        num_netboxes = 0\n\n    verbose_name = ManagementProfile._meta.verbose_name\n\n    if request.method == 'POST':\n        form = ManagementProfileForm(request.POST, instance=profile)\n        if form.is_valid():\n            protocol_form = form.get_protocol_form_class()(\n                request.POST,\n                instance=form.instance,\n            )\n            if protocol_form.is_valid():\n                profile = form.save()\n\n                new_message(\n                    request, \"Saved %s %s\" % (verbose_name, profile), Messages.SUCCESS\n                )\n                return HttpResponseRedirect(\n                    reverse('seeddb-management-profile-edit', args=(profile.pk,))\n                )\n        protocol_forms = [\n            f(request.POST, instance=profile) for f in form.get_protocol_forms()\n        ]\n    else:\n        form = ManagementProfileForm(instance=profile)\n        protocol_forms = [f(instance=profile) for f in form.get_protocol_forms()]\n\n    context = {\n        'object': profile,\n        'form': form,\n        'protocol_forms': protocol_forms,\n        'title': 'Add new %s' % verbose_name,\n        'verbose_name': verbose_name,\n        'sub_active': {'add': True},\n        'num_netboxes': num_netboxes,\n    }\n    if profile and profile.pk:\n        context.update(\n            {\n                'title': 'Edit %s \"%s\"' % (verbose_name, profile),\n                'sub_active': {'edit': True},\n            }\n        )\n\n    template_context = ManagementProfileInfo().template_context\n    template_context.update(context)\n    return render(request, 'seeddb/management-profile/edit.html', template_context)\n\n\ndef management_profile_bulk(request):\n    \"\"\"Controller for bulk editing management profiles\"\"\"\n    info = ManagementProfileInfo()\n    return render_bulkimport(\n        request,\n        ManagementProfileBulkParser,\n        ManagementProfileImporter,\n        redirect='seeddb-management-profile',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/management_profile/forms.py",
    "content": "#\n# Copyright (C) 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom django import forms\n\nfrom nav.models.manage import ManagementProfile\nfrom nav.web.seeddb.forms import get_single_layout\n\nPROTOCOL_CHOICES = dict(ManagementProfile.PROTOCOL_CHOICES)\n\n\nclass ManagementProfileFilterForm(forms.Form):\n    \"\"\"Form for filtering connection profiles\"\"\"\n\n    protocol = forms.ChoiceField(\n        required=False, choices=ManagementProfile.PROTOCOL_CHOICES\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(ManagementProfileFilterForm, self).__init__(*args, **kwargs)\n\n        self.attrs = get_single_layout(\n            heading=\"Filter connection profiles\", filter_field=self[\"protocol\"]\n        )\n\n\nclass ProtocolSpecificMixIn(object):\n    \"\"\"Mixin class for protocol specific management configuration forms.\n\n    Provides the necessary functionality for translating form fields into\n    JSON-compatible configuration dicts, as required by the\n    ManagementProfile.configuration field.\n\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(ProtocolSpecificMixIn, self).__init__(*args, **kwargs)\n\n        if self.instance:\n            cfg = self.instance.configuration\n            for field in self.Meta.configuration_fields:\n                if field in cfg:\n                    self.fields[field].initial = cfg.get(field)\n\n    def _post_clean(self):\n        super(ProtocolSpecificMixIn, self)._post_clean()\n        cfg = self.instance.configuration\n        for field in self.Meta.configuration_fields:\n            if field in self.cleaned_data:\n                cfg[field] = self.cleaned_data.get(field)\n\n\nclass HttpApiForm(ProtocolSpecificMixIn, forms.ModelForm):\n    PROTOCOL = ManagementProfile.PROTOCOL_HTTP_API\n    PROTOCOL_NAME = PROTOCOL_CHOICES.get(PROTOCOL)\n\n    class Meta(object):\n        model = ManagementProfile\n        configuration_fields = ['api_key', 'service']\n        fields = []\n\n    api_key = forms.CharField(\n        label=\"API key\",\n        help_text=\"Key/token to authenticate to the service\",\n        required=True,\n    )\n\n    service = forms.ChoiceField(\n        choices=((\"Palo Alto ARP\", \"Palo Alto ARP\"),),\n        help_text=\"\",\n        required=True,\n    )\n\n\nclass DebugForm(ProtocolSpecificMixIn, forms.ModelForm):\n    PROTOCOL = ManagementProfile.PROTOCOL_DEBUG\n    PROTOCOL_NAME = PROTOCOL_CHOICES.get(PROTOCOL)\n\n    class Meta(object):\n        model = ManagementProfile\n        configuration_fields = ['foo']\n        fields = []\n\n    foo = forms.CharField(required=True)\n\n\nclass SnmpForm(ProtocolSpecificMixIn, forms.ModelForm):\n    PROTOCOL = ManagementProfile.PROTOCOL_SNMP\n    PROTOCOL_NAME = PROTOCOL_CHOICES.get(PROTOCOL)\n\n    class Meta(object):\n        model = ManagementProfile\n        configuration_fields = ['version', 'community', 'write']\n        fields = []\n\n    version = forms.ChoiceField(\n        choices=(\n            (2, '2c'),\n            (1, '1'),\n        )\n    )\n    community = forms.CharField(required=True)\n    write = forms.BooleanField(\n        required=False,\n        help_text=\"Check if this community string enables write access\",\n    )\n\n\nclass SnmpV3Form(ProtocolSpecificMixIn, forms.ModelForm):\n    PROTOCOL = ManagementProfile.PROTOCOL_SNMPV3\n    PROTOCOL_NAME = PROTOCOL_CHOICES.get(PROTOCOL)\n    NOTABENE = \"SNMPv3 is not yet fully supported in NAV\"\n\n    class Meta(object):\n        model = ManagementProfile\n        configuration_fields = [\n            \"sec_level\",\n            \"auth_protocol\",\n            \"sec_name\",\n            \"auth_password\",\n            \"priv_protocol\",\n            \"priv_password\",\n            \"write\",\n        ]\n        fields = []\n\n    sec_level = forms.ChoiceField(\n        label=\"Security level\",\n        choices=(\n            (\"noAuthNoPriv\", \"noAuthNoPriv\"),\n            (\"authNoPriv\", \"authNoPriv\"),\n            (\"authPriv\", \"authPriv\"),\n        ),\n        help_text=\"The required SNMPv3 security level\",\n    )\n    auth_protocol = forms.ChoiceField(\n        label=\"Authentication protocol\",\n        choices=(\n            (\"MD5\", \"MD5\"),\n            (\"SHA\", \"SHA\"),\n            (\"SHA-512\", \"SHA-512\"),\n            (\"SHA-384\", \"SHA-384\"),\n            (\"SHA-256\", \"SHA-256\"),\n            (\"SHA-224\", \"SHA-224\"),\n        ),\n        help_text=\"Authentication protocol to use\",\n    )\n    sec_name = forms.CharField(\n        widget=forms.TextInput(attrs={\"autocomplete\": \"off\"}),\n        label=\"Security name\",\n        help_text=(\n            \"The username to authenticate as.  This is required even if noAuthPriv \"\n            \"security mode is selected.\"\n        ),\n    )\n    auth_password = forms.CharField(\n        widget=forms.PasswordInput(render_value=True, attrs={\"autocomplete\": \"off\"}),\n        label=\"Authentication password\",\n        help_text=(\n            \"The password to authenticate the user. Required for authNoPriv or \"\n            \"authPriv security levels.\"\n        ),\n        required=False,\n    )\n    priv_protocol = forms.ChoiceField(\n        label=\"Privacy protocol\",\n        choices=(\n            (\"DES\", \"DES\"),\n            (\"AES\", \"AES\"),\n        ),\n        help_text=\"Privacy protocol to use.  Required for authPriv security level.\",\n        required=False,\n    )\n    priv_password = forms.CharField(\n        widget=forms.PasswordInput(render_value=True, attrs={\"autocomplete\": \"off\"}),\n        label=\"Privacy password\",\n        help_text=(\n            \"The password to use for DES or AES encryption.  Required for authPriv \"\n            \"security level.\"\n        ),\n        required=False,\n    )\n    write = forms.BooleanField(\n        initial=False,\n        required=False,\n        label=\"Enables write access\",\n        help_text=\"Check this if this profile enables write access\",\n    )\n\n    def clean_auth_password(self):\n        level = self.cleaned_data.get(\"sec_level\")\n        password = self.cleaned_data.get(\"auth_password\").strip()\n        if level.startswith(\"auth\") and not password:\n            raise forms.ValidationError(\n                f\"Authentication password must be set for security level {level}\"\n            )\n        return password\n\n    def clean_priv_password(self):\n        level = self.cleaned_data.get(\"sec_level\")\n        password = self.cleaned_data.get(\"priv_password\").strip()\n        if level == \"authPriv\" and not password:\n            raise forms.ValidationError(\n                f\"Privacy password must be set for security level {level}\"\n            )\n        return password\n\n\nclass NapalmForm(ProtocolSpecificMixIn, forms.ModelForm):\n    PROTOCOL = ManagementProfile.PROTOCOL_NAPALM\n    PROTOCOL_NAME = PROTOCOL_CHOICES.get(PROTOCOL)\n\n    class Meta(object):\n        model = ManagementProfile\n        configuration_fields = [\n            \"driver\",\n            \"username\",\n            \"password\",\n            \"private_key\",\n            \"use_keys\",\n            \"alternate_port\",\n            \"timeout\",\n        ]\n        fields = []\n\n    driver = forms.ChoiceField(\n        choices=((\"JunOS\", \"JunOS\"),),\n        initial=\"JunOS\",\n        help_text=\"Which NAPALM driver to use\",\n    )\n    username = forms.CharField(required=True, help_text=\"User name to use for login\")\n    password = forms.CharField(\n        required=False,\n        widget=forms.PasswordInput(render_value=True),\n        help_text=\"Password to use for login\",\n    )\n    private_key = forms.CharField(\n        required=False,\n        widget=forms.Textarea(),\n        help_text=\"SSH private key to use for login\",\n    )\n    use_keys = forms.BooleanField(\n        required=False, help_text=\"Check to try the available keys in ~/.ssh/\"\n    )\n    alternate_port = forms.IntegerField(\n        required=False,\n        help_text=\"Alternate port (default port value varies with vendor)\",\n        min_value=1,\n        max_value=65535,\n    )\n    timeout = forms.IntegerField(\n        required=False,\n        help_text=\"Timeout value in seconds\",\n        min_value=1,\n        max_value=600,\n    )\n\n\nFORM_MAPPING = {\n    form_class.PROTOCOL: form_class\n    for form_class in ProtocolSpecificMixIn.__subclasses__()\n}\n\n\nclass ManagementProfileForm(forms.ModelForm):\n    \"\"\"Form for editing/adding connection profiless\"\"\"\n\n    class Meta(object):\n        model = ManagementProfile\n        fields = ['name', 'description', 'protocol']\n\n    def __init__(self, *args, **kwargs):\n        super(ManagementProfileForm, self).__init__(*args, **kwargs)\n\n    def get_protocol_form_class(self):\n        \"\"\"Returns the protocol-specific form class that corresponds with the selected\n        management protocol of this profile.\n\n        \"\"\"\n        return FORM_MAPPING.get(self.cleaned_data['protocol'])\n\n    @staticmethod\n    def get_protocol_forms():\n        \"\"\"Returns a list of all known protocol-specific sub-form classes\"\"\"\n        return FORM_MAPPING.values()\n"
  },
  {
    "path": "python/nav/web/seeddb/page/netbox/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers for the netbox part of seedDB\"\"\"\n\nimport datetime\n\nfrom django.contrib.postgres.aggregates import ArrayAgg\nfrom django.db import transaction\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse, reverse_lazy\n\nfrom nav.models.manage import Netbox\nfrom nav.bulkparse import NetboxBulkParser\nfrom nav.bulkimport import NetboxImporter\n\nfrom nav.web import webfrontConfig\nfrom nav.web.message import new_message, Messages\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.move import move\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.page.netbox.forms import NetboxFilterForm, NetboxMoveForm\nfrom nav.web.utils import (\n    generate_qr_codes_as_zip_response,\n)\n\n\nclass NetboxInfo(SeeddbInfo):\n    \"\"\"Variable container\"\"\"\n\n    active = {'netbox': True}\n    caption = 'IP Devices'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'IP Devices'\n    verbose_name = Netbox._meta.verbose_name\n    _navpath = [('IP Devices', reverse_lazy('seeddb-netbox'))]\n    delete_url = reverse_lazy('seeddb-netbox')\n    delete_url_name = 'seeddb-netbox-delete'\n    back_url = reverse_lazy('seeddb-netbox')\n    add_url = reverse_lazy('seeddb-netbox-edit')\n    bulk_url = reverse_lazy('seeddb-netbox-bulk')\n    copy_url_name = 'seeddb-netbox-copy'\n    hide_qr_code = False\n\n\ndef netbox(request):\n    \"\"\"Controller for landing page for netboxes\"\"\"\n    return view_switcher(\n        request,\n        list_view=netbox_list,\n        move_view=netbox_move,\n        delete_view=netbox_delete,\n        download_qr_codes_view=netbox_download_qr_codes,\n    )\n\n\ndef netbox_list(request):\n    \"\"\"Controller for showing all netboxes\"\"\"\n    info = NetboxInfo()\n    query = (\n        Netbox.objects.select_related(\"room\", \"category\", \"type\", \"organization\")\n        .prefetch_related(\"profiles\")\n        .annotate(profile=ArrayAgg(\"profiles__name\"))\n    )\n    filter_form = NetboxFilterForm(request.GET)\n    value_list = (\n        'sysname',\n        'room',\n        'ip',\n        'category',\n        'organization',\n        'profile',\n        'type__name',\n    )\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-netbox-edit',\n        edit_url_attr='pk',\n        filter_form=filter_form,\n        template='seeddb/list_netbox.html',\n        extra_context=info.template_context,\n    )\n\n\ndef netbox_delete(request, object_id=None):\n    \"\"\"Controller for handling a request for deleting a netbox\"\"\"\n    info = NetboxInfo()\n    return render_delete(\n        request,\n        Netbox,\n        'seeddb-netbox',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        pre_delete_operation=netbox_pre_deletion_mark,\n        delete_operation=None,\n        object_id=object_id,\n    )\n\n\n@transaction.atomic\ndef netbox_pre_deletion_mark(queryset):\n    \"\"\"Marks all netboxes in a queryset as undergoing deletion.\n\n    :type queryset: django.db.models.QuerySet\n    \"\"\"\n    queryset.update(deleted_at=datetime.datetime.now(), up_to_date=False)\n\n\ndef netbox_download_qr_codes(request):\n    \"\"\"Controller for downloading qr codes for netboxes\"\"\"\n    if not request.POST.getlist('object'):\n        new_message(\n            request,\n            \"You need to select at least one object to generate QR codes for\",\n            Messages.ERROR,\n        )\n        return HttpResponseRedirect(reverse('seeddb-netbox'))\n\n    url_dict = dict()\n    netboxes = Netbox.objects.filter(id__in=request.POST.getlist('object'))\n\n    for netbox in netboxes:\n        url = request.build_absolute_uri(\n            reverse('ipdevinfo-details-by-id', kwargs={'netbox_id': netbox.id})\n        )\n        url_dict[str(netbox)] = url\n\n    file_format = webfrontConfig.get(\"qr_codes\", \"file_format\")\n\n    return generate_qr_codes_as_zip_response(url_dict=url_dict, file_format=file_format)\n\n\ndef netbox_move(request):\n    \"\"\"Controller for handling a move request\"\"\"\n    info = NetboxInfo()\n    return move(\n        request,\n        Netbox,\n        NetboxMoveForm,\n        'seeddb-netbox',\n        title_attr='sysname',\n        extra_context=info.template_context,\n    )\n\n\ndef netbox_bulk(request):\n    \"\"\"Controller for bulk importing netboxes\"\"\"\n    info = NetboxInfo()\n    return render_bulkimport(\n        request,\n        NetboxBulkParser,\n        NetboxImporter,\n        'seeddb-netbox',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/netbox/edit.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Controls add and edit of ip devices\"\"\"\n\nimport copy\nimport socket\nfrom socket import error as SocketError\nimport logging\n\nfrom django.db import transaction\nfrom django.contrib import messages\nfrom django.http import HttpRequest, HttpResponse\nfrom django.shortcuts import get_object_or_404, redirect, render\nfrom django.urls import reverse, reverse_lazy\nfrom django.views.decorators.http import require_POST\n\nfrom nav.auditlog.models import LogEntry\nfrom nav.models.manage import Netbox, NetboxCategory, NetboxType, NetboxProfile\nfrom nav.models.manage import NetboxInfo, ManagementProfile\nfrom nav.Snmp import safestring\nfrom nav.Snmp.errors import SnmpError\nfrom nav.Snmp.profile import get_snmp_session_for_profile\nfrom nav import napalm\nfrom nav.util import is_valid_ip\nfrom nav.web.auth.utils import get_account\nfrom nav.web.seeddb.utils.edit import resolve_ip_and_sysname\nfrom nav.web.seeddb.page.netbox import NetboxInfo as NI\nfrom nav.web.seeddb.page.netbox.forms import NetboxModelForm\n\n\n_logger = logging.getLogger(__name__)\n\n\ndef log_netbox_change(account, old, new):\n    \"\"\"Log specific user initiated changes to netboxes\"\"\"\n\n    # If this is a new netbox\n    if not old:\n        LogEntry.add_create_entry(account, new)\n        return\n\n    # Compare changes from old to new\n    attribute_list = [\n        'category',\n        'ip',\n        'room',\n        'organization',\n    ]\n    LogEntry.compare_objects(\n        account,\n        old,\n        new,\n        attribute_list,\n    )\n\n\ndef netbox_edit(request, netbox_id=None, suggestion=None, action='edit'):\n    \"\"\"Controller for edit or create of netbox\"\"\"\n    info = NI()\n    netbox = None\n    copy_url = None\n    if netbox_id:\n        netbox = get_object_or_404(Netbox, pk=netbox_id)\n        if action == 'edit':\n            copy_url = reverse_lazy(\n                info.copy_url_name, kwargs={'action': 'copy', 'netbox_id': netbox_id}\n            )\n\n    if request.method == 'POST':\n        if action == 'copy':\n            # Remove stuff that should not be copied over\n            post = request.POST.copy()\n            post.pop('sysname', None)\n            post.pop('type', None)\n            post.pop('virtual_instance', None)\n            form = NetboxModelForm(post)\n        else:\n            form = NetboxModelForm(request.POST, instance=netbox)\n        if form.is_valid():\n            old_netbox = copy.deepcopy(netbox)\n            netbox = netbox_do_save(form)\n            messages.add_message(request, messages.SUCCESS, 'IP Device saved')\n            account = get_account(request)\n            log_netbox_change(account, old_netbox, netbox)\n            return redirect(reverse('seeddb-netbox-edit', args=[netbox.pk]))\n        else:\n            messages.add_message(request, messages.ERROR, 'Form was not valid')\n    else:\n        if suggestion:\n            form = NetboxModelForm(instance=netbox, initial={'ip': suggestion})\n        else:\n            form = NetboxModelForm(instance=netbox)\n\n    page_title = \"Add new IP Device\"\n    if netbox:\n        page_title = \"Edit IP Device\"\n        if action == 'copy':\n            page_title = \"Copy IP Device\"\n    context = info.template_context\n    context.update(\n        {\n            'object': netbox,\n            'form': form,\n            'title': page_title,\n            '_navpath': [('Edit Device', reverse_lazy('seeddb-netbox-edit'))],\n            'sub_active': netbox and {'edit': True} or {'add': True},\n            'tab_template': 'seeddb/tabs_generic.html',\n            'copy_url': copy_url,\n            'copy_title': 'Use this netbox as a template for creating a new netbox',\n            'action': action,\n        }\n    )\n    return render(request, 'seeddb/netbox_wizard.html', context)\n\n\n@require_POST\ndef check_connectivity(request):\n    \"\"\"\n    HTMX endpoint to validate an IP address or hostname and\n    associated management profiles.\n\n    - Checks if both IP address and management profiles are provided.\n    - If the IP is invalid, attempts to resolve it as a hostname and\n      prompts for address selection.\n    - If the IP is valid, returns a loading status to trigger connectivity tests.\n    \"\"\"\n\n    ip_address = request.POST.get('ip', '').strip()\n    profile_ids = request.POST.getlist('profiles')\n\n    if not (ip_address and profile_ids):\n        return render(\n            request,\n            'seeddb/_seeddb_check_connectivity_response.html',\n            {\n                'status': 'error',\n                'message': (\n                    'We need an IP-address and at least one management profile '\n                    'to talk to the device.'\n                ),\n            },\n        )\n\n    if not is_valid_ip(ip_address, strict=True):\n        return _handle_invalid_ip(request, ip_address)\n\n    return render(\n        request,\n        'seeddb/_seeddb_check_connectivity_response.html',\n        {\n            'status': 'loading',\n        },\n    )\n\n\ndef _handle_invalid_ip(request: HttpRequest, ip_address: str):\n    \"\"\"\n    Handle the case where the given IP address is not valid.\n\n    Attempts to resolve it as a hostname and returns the results.\n    \"\"\"\n    try:\n        address_tuples = socket.getaddrinfo(ip_address, None, 0, socket.SOCK_STREAM)\n        sorted_tuples = sorted(\n            address_tuples, key=lambda item: socket.inet_pton(item[0], item[4][0])\n        )\n        addresses = [x[4][0] for x in sorted_tuples]\n    except (socket.error, UnicodeError) as error:\n        context = {\n            'status': 'error',\n            'message': str(error),\n        }\n    else:\n        context = {\n            'status': 'select-address',\n            'addresses': addresses,\n            'hostname': ip_address,\n        }\n\n    return render(\n        request,\n        'seeddb/_seeddb_check_connectivity_response.html',\n        context,\n    )\n\n\n@require_POST\ndef load_connectivity_test_results(request):\n    \"\"\"\n    HTMX endpoint to perform connectivity tests for given management profiles.\n\n    Returns test results, including sysname and netbox type, grouped by\n    success or failure.\n    \"\"\"\n\n    ip_address = request.POST.get('ip')\n    profile_ids = request.POST.getlist('profiles')\n    profiles = ManagementProfile.objects.filter(id__in=profile_ids)\n    _logger.debug(\n        \"testing management profiles against %s: %r = %r\",\n        ip_address,\n        profile_ids,\n        profiles,\n    )\n    if not profiles:\n        return render(\n            request,\n            'seeddb/_seeddb_check_connectivity_results.html',\n        )\n\n    sysname = get_sysname(ip_address)\n    netbox_type = None\n\n    result = {p.id: {} for p in profiles}\n    for profile in profiles:\n        if profile.is_snmp:\n            response = get_snmp_read_only_variables(ip_address, profile)\n        elif profile.protocol == profile.PROTOCOL_NAPALM:\n            response = test_napalm_connectivity(ip_address, profile)\n        else:\n            response = None\n            result[profile.id].update(\n                {\n                    \"id\": profile.id,\n                    \"name\": profile.name,\n                    \"status\": False,\n                    \"error_message\": (\n                        \"Connectivity check not supported for profile with\",\n                        f\"protocol {profile.get_protocol_display()}\",\n                    ),\n                }\n            )\n\n        if response:\n            response[\"id\"] = profile.id\n            response[\"name\"] = profile.name\n            response[\"url\"] = reverse(\n                \"seeddb-management-profile-edit\",\n                kwargs={\"management_profile_id\": profile.id},\n            )\n            result[profile.id].update(response)\n            if response.get(\"type\"):\n                netbox_type = response[\"type\"]\n\n    # split result by status for better display: status True and False\n    success_profiles = [p for p in result.values() if p.get('status')]\n    failed_profiles = [p for p in result.values() if not p.get('status')]\n\n    data = {\n        'sysname': sysname,\n        'netbox_type': netbox_type,\n        'profiles': {\n            'succeeded': success_profiles,\n            'failed': failed_profiles,\n        },\n    }\n    return render(\n        request,\n        'seeddb/_seeddb_check_connectivity_results.html',\n        data,\n    )\n\n\ndef get_snmp_read_only_variables(ip_address: str, profile: ManagementProfile):\n    \"\"\"Tests and retrieves basic netbox clasification from an SNMP profile\"\"\"\n    result = {}\n    if profile.configuration.get(\"write\"):\n        result = snmp_write_test(ip_address, profile)\n    else:\n        result[\"type\"] = get_netbox_type(ip_address, profile)\n        result[\"status\"] = check_snmp_version(ip_address, profile)\n        if not result[\"status\"]:\n            result[\"error_message\"] = \"SNMP connection failed\"\n    return result\n\n\ndef snmp_write_test(ip, profile):\n    \"\"\"Tests that an SNMP profile really has write access.\n\n    Tests by fetching sysLocation.0 and setting the same value.  This will fail if\n    the device only allows writing to other parts of its mib view.\n    \"\"\"\n\n    testresult = {\n        'error_message': '',\n        'custom_error': '',\n        'status': False,\n        'syslocation': '',\n    }\n\n    syslocation = '1.3.6.1.2.1.1.6.0'\n    value = ''\n    try:\n        snmp = get_snmp_session_for_profile(profile)(ip)\n        value = safestring(snmp.get(syslocation))\n        snmp.set(syslocation, 's', value.encode('utf-8'))\n    except SnmpError as error:\n        testresult['error_message'] = error.args[0]\n        testresult['status'] = False\n    except UnicodeDecodeError as error:\n        _logger.exception(\n            \"Could not decode SNMP response for profile %s with address %s: %s\",\n            profile.name,\n            ip,\n            error,\n        )\n        testresult['custom_error'] = 'UnicodeDecodeError'\n        testresult['error_message'] = 'Could not decode SNMP response'\n        testresult['status'] = False\n    else:\n        testresult['status'] = True\n\n    testresult['syslocation'] = value\n    return testresult\n\n\ndef check_snmp_version(ip, profile):\n    \"\"\"Check if version of snmp is supported by device\"\"\"\n    sysobjectid = '1.3.6.1.2.1.1.2.0'\n    try:\n        snmp = get_snmp_session_for_profile(profile)(ip)\n        snmp.get(sysobjectid)\n    except Exception:  # noqa: BLE001\n        return False\n    else:\n        return True\n\n\ndef test_napalm_connectivity(ip_address: str, profile: ManagementProfile) -> dict:\n    \"\"\"Tests connectivity of a NAPALM profile and returns a status dictionary\"\"\"\n    try:\n        with napalm.connect(ip_address, profile):\n            return {\"status\": True}\n    except Exception as error:  # noqa: BLE001\n        _logger.exception(\"Could not connect to %s using NAPALM profile\", ip_address)\n        error_message = str(error)\n        if error_message == 'None':\n            error_message = 'Connection failed'\n        return {\"status\": False, \"error_message\": error_message}\n\n\ndef get_sysname(ip_address):\n    \"\"\"Get sysname from equipment with the given IP-address\"\"\"\n    try:\n        _, sysname = resolve_ip_and_sysname(ip_address)\n        return sysname\n    except (SocketError, UnicodeError):\n        return None\n\n\ndef get_netbox_type(ip_addr, profile):\n    \"\"\"Gets the netbox type of the ip_addr\"\"\"\n    netbox_type = snmp_type(ip_addr, profile)\n    return netbox_type\n\n\ndef snmp_type(ip_addr, profile: ManagementProfile):\n    \"\"\"Query ip for sysobjectid using form data\"\"\"\n    snmp = get_snmp_session_for_profile(profile)(ip_addr)\n    try:\n        sysobjectid = snmp.get('.1.3.6.1.2.1.1.2.0')\n    except SnmpError:\n        return None\n    sysobjectid = str(sysobjectid).lstrip('.')\n    try:\n        netbox_type = NetboxType.objects.get(sysobjectid=sysobjectid)\n        return netbox_type\n    except NetboxType.DoesNotExist:\n        return None\n\n\n@transaction.atomic()\ndef netbox_do_save(form):\n    \"\"\"Save netbox.\n\n    Netboxgroups needs to be set manually because of database structure, thus\n    we do a commit=False save first.\n    \"\"\"\n\n    netbox = form.save(commit=False)  # Prevents saving m2m relationships\n    netbox.save()\n\n    # Save the function field\n    function = form.cleaned_data['function']\n    if function:\n        try:\n            func = NetboxInfo.objects.get(netbox=netbox, variable='function')\n        except NetboxInfo.DoesNotExist:\n            func = NetboxInfo(netbox=netbox, variable='function', value=function)\n        else:\n            func.value = function\n        func.save()\n    elif function == '':\n        NetboxInfo.objects.filter(netbox=netbox, variable='function').delete()\n\n    # Save the groups\n    netboxgroups = form.cleaned_data['groups']\n    NetboxCategory.objects.filter(netbox=netbox).delete()\n    for netboxgroup in netboxgroups:\n        NetboxCategory.objects.create(netbox=netbox, category=netboxgroup)\n\n    # Update the list of management profiles\n    current_profiles = set(form.cleaned_data['profiles'])\n    old_profiles = set(netbox.profiles.all())\n    to_add = current_profiles.difference(old_profiles)\n    to_remove = old_profiles.difference(current_profiles)\n    for profile in to_remove:\n        NetboxProfile.objects.get(netbox=netbox, profile=profile).delete()\n    for profile in to_add:\n        NetboxProfile(netbox=netbox, profile=profile).save()\n\n    return netbox\n\n\ndef validate_ip_address(request):\n    \"\"\"Endpoint to check if an address is a valid IP address\"\"\"\n    address = request.GET.get('address')\n    if not address or not is_valid_ip(address.strip(), strict=True):\n        return HttpResponse(status=400)\n    return HttpResponse(status=200)\n"
  },
  {
    "path": "python/nav/web/seeddb/page/netbox/forms.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for seeddb netbox view\"\"\"\n\nimport logging\nfrom socket import error as SocketError\n\nfrom django import forms\nfrom django.db.models import Q\nfrom django.urls import reverse\n\nfrom nav.django.forms import HStoreField\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    SubmitField,\n    set_flat_form_attributes,\n)\n\nfrom nav.models.manage import Room, Category, Organization, Netbox, ManagementProfile\nfrom nav.web.seeddb.utils.edit import (\n    resolve_ip_and_sysname,\n    does_ip_exist,\n    does_sysname_exist,\n)\nfrom nav.web.seeddb.forms import create_hierarchy\n\n_logger = logging.getLogger(__name__)\n\n\nclass MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):\n    \"\"\"\n    This class only exists to override Django's unwanted default help text\n    for ModelMultipleChoiceField\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(MyModelMultipleChoiceField, self).__init__(*args, **kwargs)\n        self.help_text = kwargs.get('help_text', '')\n\n\nclass ProfileSelectWithLinks(forms.SelectMultiple):\n    \"\"\"\n    Custom widget that renders management profiles as a Select2 multi-select dropdown\n    with links to profile detail pages via JavaScript.\n    \"\"\"\n\n    def __init__(self, attrs=None, choices=()):\n        # Only use profile-select-with-links class, not select2\n        # (we initialize Select2 manually in JS with custom options)\n        default_attrs = {'class': 'profile-select-with-links', 'style': 'width: 100%;'}\n        if attrs:\n            default_attrs.update(attrs)\n        super().__init__(attrs=default_attrs, choices=choices)\n\n\nclass NetboxModelForm(forms.ModelForm):\n    \"\"\"Modelform for netbox for use in SeedDB\"\"\"\n\n    ip = forms.CharField()\n    function = forms.CharField(required=False)\n    data = HStoreField(label='Attributes', required=False)\n    sysname = forms.CharField(required=False)\n    virtual_instance = MyModelMultipleChoiceField(\n        queryset=Netbox.objects.none(),\n        required=False,\n        label='Virtual instances',\n        help_text='The list of virtual instances inside this master device',\n    )\n\n    class Meta(object):\n        model = Netbox\n        fields = [\n            'ip',\n            'room',\n            'category',\n            'organization',\n            'groups',\n            'sysname',\n            'type',\n            'data',\n            'master',\n            'virtual_instance',\n            'profiles',\n        ]\n        help_texts = {\n            'master': 'Select a master device when this IP Device is a virtual instance'\n        }\n\n    def __init__(self, *args, **kwargs):\n        super(NetboxModelForm, self).__init__(*args, **kwargs)\n        self.fields['organization'].choices = create_hierarchy(Organization)\n\n        # Master and instance related queries\n        masters = [n.master.pk for n in Netbox.objects.filter(master__isnull=False)]\n        self.fields['master'].queryset = self.create_master_query(masters)\n        self.fields['virtual_instance'].queryset = self.create_instance_query(masters)\n        self.fields['master'].widget.attrs.update({'style': 'width: 100%;'})\n        self.fields['virtual_instance'].widget.attrs.update({'style': 'width: 100%;'})\n        if self.instance.pk:\n            # Set instances that we are master to as initial values\n            self.initial['virtual_instance'] = Netbox.objects.filter(\n                master=self.instance\n            )\n\n            # Disable fields based on current state\n            if self.instance.master:\n                self.fields['virtual_instance'].widget.attrs['disabled'] = True\n            if self.instance.pk in masters:\n                self.fields['master'].widget.attrs['disabled'] = True\n\n            # Set the inital value of the function field\n            self.fields['function'].initial = self.instance.get_function()\n\n        self.fields['groups'].widget.attrs.update({'class': 'select2'})\n        self._initialize_profiles_field()\n\n    def create_instance_query(self, masters):\n        \"\"\"Creates query for virtual instance multiselect\"\"\"\n        # - Should not see other masters\n        # - Should see those we are master for\n        # - Should see those who have no master\n        queryset = Netbox.objects.exclude(pk__in=masters).filter(\n            Q(master=self.instance.pk) | Q(master__isnull=True)\n        )\n\n        if self.instance.pk:\n            queryset = queryset.exclude(pk=self.instance.pk)\n\n        return queryset\n\n    def create_master_query(self, masters):\n        \"\"\"Creates query for master dropdown list\"\"\"\n        # - Should not set those who have master as master\n        queryset = Netbox.objects.filter(master__isnull=True)\n        if self.instance.pk:\n            queryset = queryset.exclude(pk=self.instance.pk)\n\n        return queryset\n\n    def _initialize_profiles_field(self):\n        \"\"\"Initialize the profiles field with custom widget and URL pattern.\"\"\"\n        profile_url_pattern = reverse(\n            'seeddb-management-profile-edit', kwargs={'management_profile_id': 0}\n        ).replace('/0/', '/{id}/')\n        # Set widget first, then queryset (setting queryset updates widget.choices)\n        self.fields['profiles'].widget = ProfileSelectWithLinks(\n            attrs={'data-profile-url-pattern': profile_url_pattern}\n        )\n        self.fields['profiles'].queryset = ManagementProfile.objects.all()\n        # Sync choices to the new widget\n        self.fields['profiles'].widget.choices = self.fields['profiles'].choices\n\n    def clean_ip(self):\n        \"\"\"Make sure IP-address is valid\"\"\"\n        name = self.cleaned_data['ip'].strip()\n        try:\n            ip, _ = resolve_ip_and_sysname(name)\n        except (SocketError, UnicodeError):\n            raise forms.ValidationError(\"Could not resolve name %s\" % name)\n        return str(ip)\n\n    def clean_sysname(self):\n        \"\"\"Resolve sysname if not set\"\"\"\n        sysname = self.cleaned_data.get('sysname')\n        ip = self.cleaned_data.get('ip')\n        if ip and not sysname:\n            _, sysname = resolve_ip_and_sysname(ip)\n        return sysname\n\n    def clean(self):\n        \"\"\"Make sure that categories that require communities has that\"\"\"\n        cleaned_data = self.cleaned_data\n        ip = cleaned_data.get('ip')\n        cat = cleaned_data.get('category')\n        profiles = cleaned_data.get('profiles')\n        _logger.warning(\"cleaning profiles: %r\", profiles)\n\n        if ip:\n            try:\n                self._check_existing_ip(ip)\n            except IPExistsException as error:\n                self._errors['ip'] = self.error_class(error.message_list)\n                del cleaned_data['ip']\n\n        if cat and cat.req_mgmt and not profiles:\n            self._errors['profiles'] = self.error_class(\n                [\"Category %s requires a management profile.\" % cat.id]\n            )\n            cleaned_data.pop('profiles', None)\n\n        return cleaned_data\n\n    def _check_existing_ip(self, ip):\n        msg = []\n        _, sysname = resolve_ip_and_sysname(ip)\n        if does_ip_exist(ip, self.instance.pk):\n            msg.append(\"IP (%s) is already in database\" % ip)\n        if does_sysname_exist(sysname, self.instance.pk):\n            msg.append(\"Sysname (%s) is already in database\" % sysname)\n        if msg:\n            raise IPExistsException(msg)\n\n    def save(self, commit=True):\n        netbox = super(NetboxModelForm, self).save(commit)\n        instances = self.cleaned_data.get('virtual_instance')\n\n        # Clean up instances\n        Netbox.objects.filter(master=netbox).exclude(pk__in=instances).update(\n            master=None\n        )\n\n        # Add new instances\n        for instance in instances:\n            instance.master = netbox\n            instance.save()\n\n        return netbox\n\n\nclass NetboxFilterForm(forms.Form):\n    \"\"\"Form for filtering netboxes on the list page\"\"\"\n\n    category = forms.ModelChoiceField(\n        Category.objects.order_by('id').all(), required=False\n    )\n    room = forms.ModelChoiceField(Room.objects.order_by('id').all(), required=False)\n    organization = forms.ModelChoiceField(\n        Organization.objects.order_by('id').all(), required=False\n    )\n    profile = forms.ModelChoiceField(\n        ManagementProfile.objects.order_by('id').all(), required=False\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(NetboxFilterForm, self).__init__(*args, **kwargs)\n\n        common_class = \"medium-3\"\n\n        self.attrs = set_flat_form_attributes(\n            form_method=\"get\",\n            form_class=\"custom\",\n            form_fields=[\n                FlatFieldset(\n                    \"Filter devices\",\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self[\"category\"]], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[self[\"room\"]], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[self[\"organization\"]],\n                                    css_classes=common_class,\n                                ),\n                                FormColumn(\n                                    fields=[self[\"profile\"]], css_classes=common_class\n                                ),\n                                FormColumn(\n                                    fields=[\n                                        SubmitField(\n                                            value=\"Filter\",\n                                            css_classes=\"postfix\",\n                                            has_empty_label=True,\n                                        )\n                                    ],\n                                    css_classes=common_class,\n                                ),\n                            ]\n                        )\n                    ],\n                )\n            ],\n        )\n\n    @staticmethod\n    def map_formfieldname_to_queryname(fieldname):\n        # Support for ManyToMany lookups, often called \"modelname_set\"\n        # Helps preserve consistency of UI\n        if fieldname == 'profile':\n            return 'profiles'\n        return fieldname\n\n\nclass NetboxMoveForm(forms.Form):\n    \"\"\"Form for moving netboxes to another room and/or organization\"\"\"\n\n    room = forms.ModelChoiceField(Room.objects.order_by('id').all(), required=False)\n    organization = forms.ModelChoiceField(\n        Organization.objects.order_by('id').all(), required=False\n    )\n\n\nclass IPExistsException(Exception):\n    \"\"\"Exception raised when a device with the same IP-address exists\"\"\"\n\n    def __init__(self, message_list, **kwargs):\n        \"\"\"\n        :param message_list: A list of messages associated with this error.\n        \"\"\"\n        super(IPExistsException, self).__init__(message_list, **kwargs)\n        self.message_list = message_list\n"
  },
  {
    "path": "python/nav/web/seeddb/page/netboxgroup.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport logging\n\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import NetboxGroup\nfrom nav.bulkparse import NetboxGroupBulkParser\nfrom nav.bulkimport import NetboxGroupImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.forms import DeviceGroupForm\n\n_logger = logging.getLogger(__name__)\n\n\nclass NetboxGroupInfo(SeeddbInfo):\n    active = {'netboxgroup': True}\n    caption = 'Device Groups'\n    verbose_name = NetboxGroup._meta.verbose_name\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Device Groups'\n    _navpath = [('Device Groups', reverse_lazy('seeddb-netboxgroup'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-netboxgroup')\n    delete_url_name = 'seeddb-netboxgroup-delete'\n    back_url = reverse_lazy('seeddb-netboxgroup')\n    add_url = reverse_lazy('seeddb-netboxgroup-edit')\n    bulk_url = reverse_lazy('seeddb-netboxgroup-bulk')\n\n\ndef netboxgroup(request):\n    return view_switcher(\n        request,\n        list_view=netboxgroup_list,\n        move_view=not_implemented,\n        delete_view=netboxgroup_delete,\n    )\n\n\ndef netboxgroup_list(request):\n    info = NetboxGroupInfo()\n    query = NetboxGroup.objects.all()\n    value_list = ('id', 'description')\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-netboxgroup-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef netboxgroup_delete(request, object_id=None):\n    info = NetboxGroupInfo()\n    return render_delete(\n        request,\n        NetboxGroup,\n        'seeddb-netboxgroup',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef netboxgroup_edit(request, netboxgroup_id=None):\n    if netboxgroup_id:\n        detail_page_url = reverse_lazy(\n            'netbox-group-detail', kwargs={'groupid': netboxgroup_id}\n        )\n    else:\n        detail_page_url = \"\"\n    info = NetboxGroupInfo()\n    extra_context = {\n        'detail_page_url': detail_page_url,\n    }\n    extra_context.update(info.template_context)\n    return render_edit(\n        request,\n        NetboxGroup,\n        DeviceGroupForm,\n        netboxgroup_id,\n        'seeddb-netboxgroup-edit',\n        extra_context=extra_context,\n    )\n\n\ndef netboxgroup_bulk(request):\n    info = NetboxGroupInfo()\n    return render_bulkimport(\n        request,\n        NetboxGroupBulkParser,\n        NetboxGroupImporter,\n        'seeddb-netboxgroup',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/netboxtype.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import NetboxType\nfrom nav.bulkparse import NetboxTypeBulkParser\nfrom nav.bulkimport import NetboxTypeImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\n\nfrom ..forms import NetboxTypeFilterForm, NetboxTypeForm\n\n\nclass NetboxTypeInfo(SeeddbInfo):\n    active = {'type': True}\n    caption = 'Types'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Types'\n    verbose_name = NetboxType._meta.verbose_name\n    _navpath = [('Types', reverse_lazy('seeddb-type'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-type')\n    delete_url_name = 'seeddb-type-delete'\n    back_url = reverse_lazy('seeddb-type')\n    add_url = reverse_lazy('seeddb-type-edit')\n    bulk_url = reverse_lazy('seeddb-type-bulk')\n\n\ndef netboxtype(request):\n    return view_switcher(\n        request,\n        list_view=netboxtype_list,\n        move_view=not_implemented,\n        delete_view=netboxtype_delete,\n    )\n\n\ndef netboxtype_list(request):\n    info = NetboxTypeInfo()\n    query = NetboxType.objects.select_related(\"vendor\").all()\n    filter_form = NetboxTypeFilterForm(request.GET)\n    value_list = ('name', 'vendor', 'description', 'sysobjectid')\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-type-edit',\n        filter_form=filter_form,\n        extra_context=info.template_context,\n    )\n\n\ndef netboxtype_delete(request, object_id=None):\n    info = NetboxTypeInfo()\n    return render_delete(\n        request,\n        NetboxType,\n        'seeddb-type',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef netboxtype_edit(request, type_id=None):\n    info = NetboxTypeInfo()\n    return render_edit(\n        request,\n        NetboxType,\n        NetboxTypeForm,\n        type_id,\n        'seeddb-type-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef netboxtype_bulk(request):\n    info = NetboxTypeInfo()\n    return render_bulkimport(\n        request,\n        NetboxTypeBulkParser,\n        NetboxTypeImporter,\n        'seeddb-type',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/organization.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.shortcuts import render\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import Organization\nfrom nav.bulkparse import OrgBulkParser\nfrom nav.bulkimport import OrgImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.move import move\n\nfrom ..forms import OrganizationForm, OrganizationMoveForm\n\n\nclass OrganizationInfo(SeeddbInfo):\n    active_page = 'organization'\n    active = {active_page: True}\n    caption = \"{}s\".format(active_page.capitalize())\n    _title = caption\n    tab_template = 'seeddb/tabs_generic.html'\n    verbose_name = Organization._meta.verbose_name\n    _navpath = [('Organizations', reverse_lazy('seeddb-organization'))]\n    delete_url = reverse_lazy('seeddb-organization')\n    delete_url_name = 'seeddb-organization-delete'\n    back_url = reverse_lazy('seeddb-organization')\n    add_url = reverse_lazy('seeddb-organization-edit')\n    bulk_url = reverse_lazy('seeddb-organization-bulk')\n\n\ndef organization(request):\n    return view_switcher(\n        request,\n        list_view=organization_list,\n        move_view=organization_move,\n        delete_view=organization_delete,\n    )\n\n\ndef organization_list(request):\n    info = OrganizationInfo()\n    context = info.template_context\n    context.update(\n        {\n            'roots': Organization.objects.filter(parent=None).order_by('id'),\n            'edit_url_name': 'seeddb-organization-edit',\n        }\n    )\n    return render(request, 'seeddb/list_tree.html', context)\n\n\ndef organization_move(request):\n    info = OrganizationInfo()\n    return move(\n        request,\n        Organization,\n        OrganizationMoveForm,\n        'seeddb-organization',\n        extra_context=info.template_context,\n    )\n\n\ndef organization_delete(request, object_id=None):\n    info = OrganizationInfo()\n    return render_delete(\n        request,\n        Organization,\n        'seeddb-organization',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef organization_edit(request, organization_id=None):\n    info = OrganizationInfo()\n    return render_edit(\n        request,\n        Organization,\n        OrganizationForm,\n        organization_id,\n        'seeddb-organization-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef organization_bulk(request):\n    info = OrganizationInfo()\n    return render_bulkimport(\n        request,\n        OrgBulkParser,\n        OrgImporter,\n        'seeddb-organization',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/patch/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing everything regarding patches in SeedDB\"\"\"\n\nimport logging\n\nfrom django import forms\nfrom django.shortcuts import render, get_object_or_404\nfrom django.urls import reverse_lazy\nfrom django.views.decorators.http import require_GET, require_POST\n\nfrom nav.models.cabling import Patch, Cabling\nfrom nav.models.manage import Netbox, Interface, Room\nfrom nav.bulkparse import PatchBulkParser\nfrom nav.bulkimport import PatchImporter\n\nfrom nav.web.modals import render_modal, render_modal_alert, resolve_modal\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass PatchInfo(SeeddbInfo):\n    \"\"\"Class for storing meta information related to patches in SeedDB\"\"\"\n\n    active = {'patch': True}\n    active_page = 'patch'\n    documentation_url = '/doc/reference/cabling_and_patch.html'\n    caption = 'Patch'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Patch'\n    verbose_name = Patch._meta.verbose_name\n    _navpath = [('Patch', reverse_lazy('seeddb-patch'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-patch')\n    delete_url_name = 'seeddb-patch-delete'\n    back_url = reverse_lazy('seeddb-patch')\n    add_url = reverse_lazy('seeddb-patch-edit')\n    bulk_url = reverse_lazy('seeddb-patch-bulk')\n\n\nclass PatchForm(forms.ModelForm):\n    \"\"\"Form for editing and creating patches\"\"\"\n\n    class Meta(object):\n        model = Patch\n        fields = '__all__'\n\n\ndef patch(request):\n    \"\"\"Creates a view switcher containing the appropriate views\"\"\"\n    return view_switcher(\n        request,\n        list_view=patch_list,\n        move_view=not_implemented,\n        delete_view=patch_delete,\n    )\n\n\ndef patch_list(request):\n    \"\"\"The view used when listing all patches\"\"\"\n    query = Patch.objects.none()\n    info = PatchInfo()\n    value_list = (\n        'cabling__room',\n        'interface__netbox__sysname',\n        'interface__ifname',\n        'interface__ifalias',\n        'cabling__jack',\n        'split',\n    )\n\n    context = info.template_context\n    context.update({'rooms': Room.objects.all(), 'netboxes': Netbox.objects.all()})\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-patch-edit',\n        template='seeddb/list_patches.html',\n        extra_context=context,\n    )\n\n\ndef patch_delete(request, object_id=None):\n    \"\"\"The view used when deleting patches\"\"\"\n    info = PatchInfo()\n    return render_delete(\n        request,\n        Patch,\n        'seeddb-patch',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef patch_edit(request):\n    \"\"\"Renders gui for editing patches\"\"\"\n    context = PatchInfo().template_context\n\n    try:\n        netbox = Netbox.objects.get(pk=request.GET.get('netboxid'))\n    except (ValueError, Netbox.DoesNotExist):\n        netbox = Netbox.objects.none()\n        cables = Cabling.objects.none()\n    else:\n        cables = Cabling.objects.filter(room=netbox.room)\n\n    context.update(\n        {'netboxes': Netbox.objects.all(), 'netbox': netbox, 'cables': cables}\n    )\n\n    return render(request, 'seeddb/edit_patch.html', context)\n\n\n@require_GET\ndef patch_show_modal(request):\n    \"\"\"Renders the modal for adding or editing a patch\"\"\"\n    modal = request.GET.get('modal', 'add')\n    interface_id = request.GET.get('interfaceid', None)\n    interface = get_object_or_404(Interface, pk=interface_id)\n    interface_name = f\"{interface.ifname} – {interface.ifalias}\"\n\n    if modal == 'add':\n        template = 'seeddb/_add_patch_modal.html'\n    else:\n        template = 'seeddb/_remove_patch_modal.html'\n\n    return render_modal(\n        request,\n        template,\n        {\n            'interface_id': interface_id,\n            'interface_name': interface_name,\n        },\n        'patch-modal',\n        size='tiny',\n    )\n\n\nclass PatchSaveForm(forms.Form):\n    \"\"\"Form for saving a patch\"\"\"\n\n    cableid = forms.IntegerField(required=True)\n    interfaceid = forms.IntegerField(required=True)\n    split = forms.CharField(required=False)\n\n\n@require_POST\ndef patch_save(request):\n    \"\"\"Save a patch\"\"\"\n    form = PatchSaveForm(request.POST)\n    if not form.is_valid():\n        return render_modal_alert(\n            request, \"Error: You must select a cable\", 'patch-modal'\n        )\n    interface = get_object_or_404(Interface, pk=request.POST.get('interfaceid'))\n    cable = get_object_or_404(Cabling, pk=request.POST.get('cableid'))\n    split = request.POST.get('split', '')\n    _logger.debug('Creating patch for interface %s and cable %s', interface, cable)\n\n    try:\n        Patch.objects.create(interface=interface, cabling=cable, split=split)\n    except Exception as error:  # noqa: BLE001\n        _logger.debug(error)\n        return render_modal_alert(request, \"Error creating patch\", 'patch-modal')\n\n    updated_interface = Interface.objects.get(pk=interface.id)\n    return resolve_modal(\n        request,\n        'seeddb/_patch_table_row.html',\n        {'interface': updated_interface},\n        'patch-modal',\n    )\n\n\n@require_POST\ndef patch_remove(request):\n    \"\"\"Remove all patches from an interface\"\"\"\n    interface = get_object_or_404(Interface, pk=request.POST.get('interfaceid'))\n    Patch.objects.filter(interface=interface).delete()\n    return resolve_modal(\n        request, 'seeddb/_patch_table_row.html', {'interface': interface}, 'patch-modal'\n    )\n\n\ndef patch_bulk(request):\n    \"\"\"The view used when bulk importing patches\"\"\"\n    info = PatchInfo()\n    return render_bulkimport(\n        request,\n        PatchBulkParser,\n        PatchImporter,\n        'seeddb-patch',\n        extra_context=info.template_context,\n    )\n\n\ndef load_cell(request):\n    \"\"\"Renders patches for an interface\"\"\"\n    interface = Interface.objects.get(pk=request.GET.get('interfaceid'))\n    return render(request, 'seeddb/fragments/patches.html', {'interface': interface})\n"
  },
  {
    "path": "python/nav/web/seeddb/page/prefix.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nForms and controllers for the prefix functionality in SeedDB\n\"\"\"\n\nfrom django import forms\nfrom django.db import transaction\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse, reverse_lazy\n\nfrom nav.web.message import new_message, Messages\n\nfrom nav.models.manage import Prefix, NetType, Vlan\nfrom nav.django.forms import CIDRField\nfrom nav.bulkparse import PrefixBulkParser\nfrom nav.bulkimport import PrefixImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import _get_object, render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\n\n\nclass PrefixInfo(SeeddbInfo):\n    \"\"\"Info-container for prefix\"\"\"\n\n    active = {'prefix': True}\n    caption = 'Prefix'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Prefix'\n    verbose_name = Prefix._meta.verbose_name\n    _navpath = [('Prefix', reverse_lazy('seeddb-prefix'))]\n    delete_url = reverse_lazy('seeddb-prefix')\n    delete_url_name = 'seeddb-prefix-delete'\n    back_url = reverse_lazy('seeddb-prefix')\n    add_url = reverse_lazy('seeddb-prefix-edit')\n    bulk_url = reverse_lazy('seeddb-prefix-bulk')\n    hide_move = True\n\n\nclass PrefixForm(forms.ModelForm):\n    \"\"\"Modelform for editing a prefix\"\"\"\n\n    net_address = CIDRField(label=\"Prefix/mask (CIDR)\")\n\n    class Meta(object):\n        model = Prefix\n        fields = ('net_address',)\n\n\nclass PrefixVlanForm(forms.ModelForm):\n    \"\"\"Modelform for Vlan with additional fields for editing prefixes\"\"\"\n\n    net_type = forms.ModelChoiceField(queryset=NetType.objects.filter(edit=True))\n\n    class Meta(object):\n        model = Vlan\n        fields = (\n            'description',\n            'net_ident',\n            'vlan',\n            'organization',\n            'usage',\n            'net_type',\n        )\n\n\ndef get_prefix_view(request):\n    \"\"\"Select appropriate view based on request POST data\"\"\"\n    return view_switcher(\n        request,\n        list_view=prefix_list,\n        delete_view=prefix_delete,\n        move_view=not_implemented,\n    )\n\n\ndef prefix_list(request):\n    \"\"\"Controller for listing prefixes\"\"\"\n    info = PrefixInfo()\n    query = Prefix.objects.filter(vlan__net_type__edit=True).select_related(\n        \"vlan__net_type\", \"vlan__organization\", \"vlan__usage\"\n    )\n    value_list = (\n        'net_address',\n        'vlan__net_type',\n        'vlan__organization',\n        'vlan__net_ident',\n        'vlan__usage',\n        'vlan__description',\n        'vlan__vlan',\n    )\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-prefix-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef prefix_delete(request, object_id=None):\n    \"\"\"Controller for deleting prefixes\"\"\"\n    info = PrefixInfo()\n    return render_delete(\n        request,\n        Prefix,\n        'seeddb-prefix',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef prefix_bulk(request):\n    \"\"\"Controller for bulk importing prefixes\"\"\"\n    info = PrefixInfo()\n    return render_bulkimport(\n        request,\n        PrefixBulkParser,\n        PrefixImporter,\n        'seeddb-prefix',\n        extra_context=info.template_context,\n    )\n\n\n@transaction.atomic()\ndef prefix_edit(request, prefix_id=None):\n    \"\"\"Controller for editing a prefix\"\"\"\n    info = PrefixInfo()\n    prefix, vlan = get_prefix_and_vlan(prefix_id)\n    if request.method == 'POST':\n        prefix_form = PrefixForm(request.POST, instance=prefix)\n        vlan_form = PrefixVlanForm(request.POST, instance=vlan)\n        if prefix_form.is_valid() and vlan_form.is_valid():\n            vlan = vlan_form.save()\n            prefix = prefix_form.save(commit=False)\n            prefix.vlan = vlan\n            prefix.save()\n            msg = \"Saved prefix %s\" % prefix.net_address\n            new_message(request, msg, Messages.SUCCESS)\n            return HttpResponseRedirect(\n                reverse('seeddb-prefix-edit', args=(prefix.id,))\n            )\n    else:\n        prefix_form = PrefixForm(instance=prefix, initial=request.GET.dict())\n        vlan_form = PrefixVlanForm(instance=vlan, initial=request.GET.dict())\n    if prefix_id:\n        detail_page_url = reverse_lazy(\n            'prefix-details', kwargs={'prefix_id': prefix_id}\n        )\n    else:\n        detail_page_url = \"\"\n    context = info.template_context\n    context.update(\n        {\n            'object': prefix,\n            'form': prefix_form,\n            'vlan_form': vlan_form,\n            'sub_active': prefix and {'edit': True} or {'add': True},\n            'detail_page_url': detail_page_url,\n        }\n    )\n    return render_edit(\n        request,\n        Prefix,\n        PrefixForm,\n        prefix_id,\n        \"seeddb-prefix-edit\",\n        template=\"seeddb/edit_prefix.html\",\n        extra_context=context,\n    )\n\n\ndef get_prefix_and_vlan(prefix_id):\n    \"\"\"Gets the prefix object and vlan object for this prefix id\"\"\"\n    prefix = _get_object(Prefix, prefix_id, 'pk')\n    vlan = prefix.vlan if prefix else None\n    return prefix, vlan\n"
  },
  {
    "path": "python/nav/web/seeddb/page/room.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms and view functions for SeedDB's Room view\"\"\"\n\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse, reverse_lazy\n\nfrom nav.models.manage import Room\nfrom nav.bulkparse import RoomBulkParser\nfrom nav.bulkimport import RoomImporter\n\nfrom nav.web import webfrontConfig\nfrom nav.web.message import new_message, Messages\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.move import move\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.utils import (\n    generate_qr_codes_as_zip_response,\n)\n\nfrom ..forms import RoomForm, RoomFilterForm, RoomMoveForm\n\n\nclass RoomInfo(SeeddbInfo):\n    \"\"\"Room info object\"\"\"\n\n    active = {'room': True}\n    caption = 'Rooms'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Rooms'\n    verbose_name = Room._meta.verbose_name\n    _navpath = [('Rooms', reverse_lazy('seeddb-room'))]\n    delete_url = reverse_lazy('seeddb-room')\n    delete_url_name = 'seeddb-room-delete'\n    back_url = reverse_lazy('seeddb-room')\n    add_url = reverse_lazy('seeddb-room-edit')\n    bulk_url = reverse_lazy('seeddb-room-bulk')\n    copy_url_name = 'seeddb-room-copy'\n    hide_qr_code = False\n\n\ndef room(request):\n    \"\"\"Controller for listing, moving and deleting rooms\"\"\"\n    return view_switcher(\n        request,\n        list_view=room_list,\n        move_view=room_move,\n        delete_view=room_delete,\n        download_qr_codes_view=room_download_qr_codes,\n    )\n\n\ndef room_list(request):\n    \"\"\"Controller for listing rooms. Used in room()\"\"\"\n    info = RoomInfo()\n    value_list = ('id', 'location', 'description', 'aliases_string', 'position', 'data')\n    query = Room.objects.select_related(\"location\").all()\n    filter_form = RoomFilterForm(request.GET)\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-room-edit',\n        filter_form=filter_form,\n        column_labels={'aliases_string': 'Aliases'},\n        extra_context=info.template_context,\n    )\n\n\ndef room_move(request):\n    \"\"\"Controller for moving rooms. Used in room()\"\"\"\n    info = RoomInfo()\n    return move(\n        request, Room, RoomMoveForm, 'seeddb-room', extra_context=info.template_context\n    )\n\n\ndef room_download_qr_codes(request):\n    \"\"\"Controller for downloading qr codes for rooms\"\"\"\n    if not request.POST.getlist('object'):\n        new_message(\n            request,\n            \"You need to select at least one object to generate QR codes for\",\n            Messages.ERROR,\n        )\n        return HttpResponseRedirect(reverse('seeddb-room'))\n\n    url_dict = dict()\n    ids = request.POST.getlist('object')\n\n    for id in ids:\n        url = request.build_absolute_uri(reverse('room-info', kwargs={'roomid': id}))\n        url_dict[id] = url\n\n    file_format = webfrontConfig.get(\"qr_codes\", \"file_format\")\n\n    return generate_qr_codes_as_zip_response(url_dict=url_dict, file_format=file_format)\n\n\ndef room_delete(request, object_id=None):\n    \"\"\"Controller for deleting rooms. Used in room()\"\"\"\n    info = RoomInfo()\n    return render_delete(\n        request,\n        Room,\n        'seeddb-room',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef room_edit(request, action='edit', room_id=None, lat=None, lon=None):\n    \"\"\"Controller for editing a room\"\"\"\n    info = RoomInfo()\n    if room_id:\n        copy_url = reverse_lazy(\n            info.copy_url_name, kwargs={'action': 'copy', 'room_id': room_id}\n        )\n    else:\n        copy_url = None\n    roompositions = [\n        [float(r.position[0]), float(r.position[1])]\n        for r in Room.objects.all()\n        if r.position\n    ]\n    if room_id:\n        detail_page_url = reverse_lazy('room-info', kwargs={'roomid': room_id})\n    else:\n        detail_page_url = \"\"\n    extra_context = {\n        'map': True,\n        'roompositions': roompositions,\n        'copy_url': copy_url,\n        'copy_title': 'Use this room as a template for creating a new room',\n        'detail_page_url': detail_page_url,\n    }\n\n    extra_context.update(info.template_context)\n    return render_edit(\n        request,\n        Room,\n        RoomForm,\n        room_id,\n        'seeddb-room-edit',\n        lon=lon,\n        lat=lat,\n        extra_context=extra_context,\n        action=action,\n    )\n\n\ndef room_bulk(request):\n    \"\"\"Controller for bulk editing rooms\"\"\"\n    info = RoomInfo()\n    return render_bulkimport(\n        request,\n        RoomBulkParser,\n        RoomImporter,\n        'seeddb-room',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/service/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.urls import reverse_lazy\n\nfrom nav.models.service import Service\nfrom nav.bulkparse import ServiceBulkParser\nfrom nav.bulkimport import ServiceImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\n\n\nclass ServiceInfo(SeeddbInfo):\n    active = {'service': True}\n    caption = 'Services'\n    tab_template = 'seeddb/tabs_generic.html'\n    verbose_name = Service._meta.verbose_name\n    _title = 'Services'\n    _navpath = [('Services', reverse_lazy('seeddb-service'))]\n    delete_url = reverse_lazy('seeddb-service')\n    delete_url_name = 'seeddb-service-delete'\n    back_url = reverse_lazy('seeddb-service')\n    add_url = reverse_lazy('seeddb-service-edit')\n    bulk_url = reverse_lazy('seeddb-service-bulk')\n    hide_move = True\n\n\ndef service(request):\n    return view_switcher(\n        request,\n        list_view=service_list,\n        move_view=not_implemented,\n        delete_view=service_delete,\n    )\n\n\ndef service_list(request):\n    info = ServiceInfo()\n    query = Service.objects.all()\n    value_list = ('netbox__sysname', 'handler', 'version')\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-service-edit',\n        extra_context=info.template_context,\n        add_descriptions=True,\n    )\n\n\ndef service_delete(request, object_id=None):\n    info = ServiceInfo()\n    return render_delete(\n        request,\n        Service,\n        'seeddb-service',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef service_bulk(request):\n    info = ServiceInfo()\n    return render_bulkimport(\n        request,\n        ServiceBulkParser,\n        ServiceImporter,\n        'seeddb-service',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/service/edit.py",
    "content": "\"\"\"Forms and view functions for editing services in SeedDB\"\"\"\n\n#\n# Copyright (C) 2011, 2013-2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django import forms\nfrom django.shortcuts import render\nfrom django.http import HttpResponseRedirect\nfrom django.db import transaction\nfrom django.urls import reverse\n\nfrom nav.models.service import Service, ServiceProperty\nfrom nav.models.manage import Netbox\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    SubmitField,\n    set_flat_form_attributes,\n)\nfrom nav.web.servicecheckers import get_description, load_checker_classes\nfrom nav.web.message import new_message, Messages\nfrom nav.web.seeddb.page.service import ServiceInfo\n\n\nclass ServiceChoiceForm(forms.Form):\n    \"\"\"Form for editing services\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(ServiceChoiceForm, self).__init__(*args, **kwargs)\n        # Use Select widget for Select2 v4 compatibility\n        # (v4 doesn't support input elements). Options are populated via AJAX.\n        self.fields['netbox'] = forms.CharField(\n            label='IP Device',\n            widget=forms.Select(choices=[('', '')]),\n        )\n        self.fields['service'] = forms.ChoiceField(\n            choices=sorted(self._build_checker_choices()),\n            widget=forms.Select(attrs={'class': 'select2'}),\n        )\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Add new service checker\",\n                    fields=[\n                        self[\"netbox\"],\n                        self[\"service\"],\n                        SubmitField(value=\"Continue\", css_classes='small'),\n                    ],\n                )\n            ],\n            form_id=\"service_checker_add_form\",\n        )\n\n    @staticmethod\n    def _build_checker_choices():\n        checkers = load_checker_classes()\n        choices = []\n        for checker in checkers:\n            name = checker.get_type()\n            descr = []\n            if checker.DESCRIPTION:\n                descr.append(checker.DESCRIPTION)\n            if not checker.IPV6_SUPPORT:\n                descr.append(\"Not IPv6 compatible\")\n            descr = \"; \".join(descr)\n            descr = \"%s (%s)\" % (name, descr) if descr else name\n            choices.append((name, descr))\n        return choices\n\n    @staticmethod\n    def _build_netbox_choices():\n        return [(n.id, n.sysname) for n in Netbox.objects.all().order_by('sysname')]\n\n\nclass ServiceForm(forms.Form):\n    \"\"\"Form for adding hidden fields to a service property edit\"\"\"\n\n    service = forms.IntegerField(widget=forms.HiddenInput, required=False)\n    handler = forms.CharField(widget=forms.HiddenInput)\n    netbox = forms.IntegerField(widget=forms.HiddenInput)\n\n\nclass ServicePropertyForm(forms.Form):\n    \"\"\"Form for editing service properties\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        service_description = kwargs.pop('service_args')\n        super(ServicePropertyForm, self).__init__(*args, **kwargs)\n        args = service_description.get('args')\n        opt_args = service_description.get('optargs')\n\n        if args:\n            for arg, descr in args:\n                self.fields[arg] = forms.CharField(required=True, help_text=descr)\n        if opt_args:\n            for arg, descr in opt_args:\n                self.fields[arg] = forms.CharField(required=False, help_text=descr)\n\n\ndef service_edit(request, service_id=None):\n    \"\"\"Controller for editing services\"\"\"\n    service = None\n    netbox = None\n    service_form = None\n    property_form = None\n    if service_id:\n        service = Service.objects.get(pk=service_id)\n\n    if request.method == 'POST' and 'save' in request.POST:\n        service_form = ServiceForm(request.POST)\n        if service_form.is_valid():\n            handler = service_form.cleaned_data['handler']\n            property_form = ServicePropertyForm(\n                request.POST, service_args=get_description(handler)\n            )\n            if property_form.is_valid():\n                return service_save(request, service_form, property_form)\n    else:\n        if not service_id:\n            return service_add(request)\n        else:\n            handler = service.handler\n            netbox = service.netbox\n            service_prop = ServiceProperty.objects.filter(service=service)\n            service_form = ServiceForm(\n                initial={\n                    'service': service.pk,\n                    'netbox': netbox.pk,\n                    'handler': handler,\n                }\n            )\n            initial = {prop.property: prop.value for prop in service_prop}\n            property_form = ServicePropertyForm(\n                service_args=get_description(service.handler), initial=initial\n            )\n\n    info = ServiceInfo()\n    context = info.template_context\n    context.update(\n        {\n            'object': service,\n            'handler': handler,\n            'netbox': netbox,\n            'sub_active': {'edit': True},\n            'service_form': service_form,\n            'property_form': property_form,\n        }\n    )\n    return render(request, 'seeddb/service_property_form.html', context)\n\n\ndef service_add(request):\n    \"\"\"Controller for adding services\"\"\"\n    info = ServiceInfo()\n    if request.method == 'POST':\n        choice_form = ServiceChoiceForm(request.POST)\n        if choice_form.is_valid():\n            cleaned_data = choice_form.cleaned_data\n            service_id = cleaned_data['service']\n            netbox_id = cleaned_data['netbox']\n            netbox = Netbox.objects.get(pk=netbox_id)\n\n            property_form = ServicePropertyForm(\n                service_args=get_description(service_id)\n            )\n            service_form = ServiceForm(\n                initial={\n                    'netbox': netbox_id,\n                    'handler': service_id,\n                }\n            )\n\n            context = info.template_context\n            context.update(\n                {\n                    'service_form': service_form,\n                    'property_form': property_form,\n                    'sub_active': {'add': True},\n                    'handler': service_id,\n                    'netbox': netbox,\n                }\n            )\n            return render(request, 'seeddb/service_property_form.html', context)\n    else:\n        choice_form = ServiceChoiceForm()\n\n    context = info.template_context\n    context.update(\n        {\n            'choice_form': choice_form,\n            'sub_active': {'add': True},\n        }\n    )\n    return render(request, 'seeddb/service_netbox_form.html', context)\n\n\n@transaction.atomic()\ndef service_save(request, service_form, property_form):\n    \"\"\"Saves a service based on two form inputs\"\"\"\n    service_id = service_form.cleaned_data.get('service')\n    if service_id:\n        service = Service.objects.select_related('netbox').get(pk=service_id)\n        ServiceProperty.objects.filter(service=service).delete()\n        netbox = service.netbox\n    else:\n        netbox = Netbox.objects.get(pk=service_form.cleaned_data['netbox'])\n        service = Service.objects.create(\n            netbox=netbox, handler=service_form.cleaned_data['handler']\n        )\n    for prop, value in property_form.cleaned_data.items():\n        if value:\n            ServiceProperty.objects.create(service=service, property=prop, value=value)\n    new_message(\n        request,\n        \"Saved service for handler %s on %s\" % (service.handler, netbox),\n        Messages.SUCCESS,\n    )\n    return HttpResponseRedirect(reverse('seeddb-service'))\n"
  },
  {
    "path": "python/nav/web/seeddb/page/usage.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing all things regarding usages in seeddb\"\"\"\n\nfrom django import forms\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import Usage\nfrom nav.bulkparse import UsageBulkParser\nfrom nav.bulkimport import UsageImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.delete import render_delete\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\n\n\nclass UsageInfo(SeeddbInfo):\n    \"\"\"Class for storing meta information related to editing usages\"\"\"\n\n    active = {'usage': True}\n    caption = 'Usage categories'\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Usage categories'\n    verbose_name = Usage._meta.verbose_name\n    _navpath = [('Usage', reverse_lazy('seeddb-usage'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-usage')\n    delete_url_name = 'seeddb-usage-delete'\n    back_url = reverse_lazy('seeddb-usage')\n    add_url = reverse_lazy('seeddb-usage-edit')\n    bulk_url = reverse_lazy('seeddb-usage-bulk')\n\n\nclass UsageForm(forms.ModelForm):\n    \"\"\"Form for editing and creating usages\"\"\"\n\n    class Meta(object):\n        model = Usage\n        fields = '__all__'\n\n    def __init__(self, *args, **kwargs):\n        super(UsageForm, self).__init__(*args, **kwargs)\n        if kwargs.get('instance'):\n            del self.fields['id']\n\n\ndef usage(request):\n    \"\"\"Creates a view switcher containing the appropriate views\"\"\"\n    return view_switcher(\n        request,\n        list_view=usage_list,\n        move_view=not_implemented,\n        delete_view=usage_delete,\n    )\n\n\ndef usage_list(request):\n    \"\"\"The view used when listing all usages\"\"\"\n    info = UsageInfo()\n    query = Usage.objects.all()\n    value_list = ('id', 'description')\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-usage-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef usage_delete(request, object_id=None):\n    \"\"\"The view used when deleting usages\"\"\"\n    info = UsageInfo()\n    return render_delete(\n        request,\n        Usage,\n        'seeddb-usage',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n        object_id=object_id,\n    )\n\n\ndef usage_edit(request, usage_id=None):\n    \"\"\"The view used when editing usages\"\"\"\n    info = UsageInfo()\n    return render_edit(\n        request,\n        Usage,\n        UsageForm,\n        usage_id,\n        'seeddb-usage-edit',\n        extra_context=info.template_context,\n    )\n\n\ndef usage_bulk(request):\n    \"\"\"The view used when bulk importing usages\"\"\"\n    info = UsageInfo()\n    return render_bulkimport(\n        request,\n        UsageBulkParser,\n        UsageImporter,\n        'seeddb-usage',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/vendor.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module containing everything regarding vendors in SeedDB\"\"\"\n\nfrom django import forms\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import Vendor\nfrom nav.bulkparse import VendorBulkParser\nfrom nav.bulkimport import VendorImporter\n\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.constants import SEEDDB_EDITABLE_MODELS\nfrom nav.web.seeddb.page import view_switcher, not_implemented\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\nfrom nav.web.seeddb.utils.bulk import render_bulkimport\nfrom nav.web.seeddb.utils.delete import render_delete\n\n\nclass VendorInfo(SeeddbInfo):\n    \"\"\"Class for storing meta information related to vendors in SeedDB\"\"\"\n\n    active = {'vendor': True}\n    caption = 'Vendors'\n    verbose_name = Vendor._meta.verbose_name\n    tab_template = 'seeddb/tabs_generic.html'\n    _title = 'Vendors'\n    _navpath = [('Vendors', reverse_lazy('seeddb-vendor'))]\n    hide_move = True\n    delete_url = reverse_lazy('seeddb-vendor')\n    back_url = reverse_lazy('seeddb-vendor')\n    add_url = reverse_lazy('seeddb-vendor-edit')\n    bulk_url = reverse_lazy('seeddb-vendor-bulk')\n\n\nclass VendorForm(forms.ModelForm):\n    \"\"\"Form for editing and creating vendors\"\"\"\n\n    class Meta(object):\n        model = Vendor\n        fields = '__all__'\n\n\ndef vendor(request):\n    \"\"\"Creates a view switcher containing the appropriate views\"\"\"\n    return view_switcher(\n        request,\n        list_view=vendor_list,\n        move_view=not_implemented,\n        delete_view=vendor_delete,\n    )\n\n\ndef vendor_list(request):\n    \"\"\"The view used when listing all vendors\"\"\"\n    info = VendorInfo()\n    query = Vendor.objects.all()\n    value_list = ('id',)\n    return render_list(\n        request, query, value_list, None, extra_context=info.template_context\n    )\n\n\ndef vendor_delete(request):\n    \"\"\"The view used when deleting vendors\"\"\"\n    info = VendorInfo()\n    return render_delete(\n        request,\n        Vendor,\n        'seeddb-vendor',\n        whitelist=SEEDDB_EDITABLE_MODELS,\n        extra_context=info.template_context,\n    )\n\n\ndef vendor_edit(request, vendor_id=None):\n    \"\"\"The view used when editing vendors\"\"\"\n    info = VendorInfo()\n    return render_edit(\n        request,\n        Vendor,\n        VendorForm,\n        vendor_id,\n        'seeddb-vendor',\n        extra_context=info.template_context,\n    )\n\n\ndef vendor_bulk(request):\n    \"\"\"The view used when bulk importing vendors\"\"\"\n    info = VendorInfo()\n    return render_bulkimport(\n        request,\n        VendorBulkParser,\n        VendorImporter,\n        'seeddb-vendor',\n        extra_context=info.template_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/page/vlan.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django import forms\nfrom django.urls import reverse_lazy\n\nfrom nav.models.manage import Vlan, NetType, Organization, Usage\n\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    SubmitField,\n)\nfrom nav.web.seeddb import SeeddbInfo\nfrom nav.web.seeddb.utils.list import render_list\nfrom nav.web.seeddb.utils.edit import render_edit\n\n\nclass VlanInfo(SeeddbInfo):\n    active = {'vlan': True}\n    caption = 'Vlan'\n    tab_template = 'seeddb/tabs_vlan.html'\n    _title = 'Vlan'\n    _navpath = [('Vlan', reverse_lazy('seeddb-vlan'))]\n    hide_move = True\n    hide_delete = True\n    back_url = reverse_lazy('seeddb-vlan')\n\n\nclass VlanFilterForm(forms.Form):\n    net_type = forms.ModelChoiceField(\n        NetType.objects.order_by('id').all(), required=False\n    )\n    organization = forms.ModelChoiceField(\n        Organization.objects.order_by('id').all(), required=False\n    )\n    usage = forms.ModelChoiceField(Usage.objects.order_by('id').all(), required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(VlanFilterForm, self).__init__(*args, **kwargs)\n        col_class = 'medium-3'\n\n        self.attrs = set_flat_form_attributes(\n            form_method=\"get\",\n            form_class=\"custom\",\n            form_fields=[\n                FlatFieldset(\n                    \"Filter vlans\",\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self[\"net_type\"]], css_classes=col_class\n                                ),\n                                FormColumn(\n                                    fields=[self[\"organization\"]], css_classes=col_class\n                                ),\n                                FormColumn(\n                                    fields=[self[\"usage\"]], css_classes=col_class\n                                ),\n                                FormColumn(\n                                    fields=[\n                                        SubmitField(\n                                            value=\"Filter\",\n                                            css_classes=\"postfix\",\n                                            has_empty_label=True,\n                                        )\n                                    ],\n                                    css_classes=col_class,\n                                ),\n                            ]\n                        )\n                    ],\n                )\n            ],\n        )\n\n\nclass VlanForm(forms.ModelForm):\n    class Meta(object):\n        model = Vlan\n        fields = ('vlan', 'organization', 'usage')\n\n\ndef vlan_list(request):\n    info = VlanInfo()\n    query = (\n        Vlan.objects.extra(\n            select={\n                'prefixes_list': (\n                    \"array_to_string(\"\n                    \"ARRAY(SELECT netaddr FROM prefix \"\n                    \"WHERE vlanid=vlan.vlanid), ', ')\"\n                )\n            }\n        )\n        .select_related(\"net_type\", \"organization\", \"usage\")\n        .all()\n    )\n    filter_form = VlanFilterForm(request.GET)\n    value_list = (\n        'net_type',\n        'vlan',\n        'organization',\n        'usage',\n        'net_ident',\n        'description',\n        'prefixes_list',\n    )\n    return render_list(\n        request,\n        query,\n        value_list,\n        'seeddb-vlan-edit',\n        filter_form=filter_form,\n        extra_context=info.template_context,\n    )\n\n\ndef vlan_edit(request, vlan_id=None):\n    if vlan_id:\n        detail_page_url = reverse_lazy('vlan-details', kwargs={'vlanid': vlan_id})\n    else:\n        detail_page_url = \"\"\n    info = VlanInfo()\n    extra_context = {\n        'detail_page_url': detail_page_url,\n    }\n    extra_context.update(info.template_context)\n    return render_edit(\n        request,\n        Vlan,\n        VlanForm,\n        vlan_id,\n        'seeddb-vlan-edit',\n        template='seeddb/edit_vlan.html',\n        extra_context=extra_context,\n    )\n"
  },
  {
    "path": "python/nav/web/seeddb/urls.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"SeedDB Django URL config\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\n\nfrom nav.web.seeddb import page\nfrom nav.web.seeddb.page import netbox\nfrom nav.web.seeddb.page.netbox import edit as netbox_edit\nfrom nav.web.seeddb.page import service\nfrom nav.web.seeddb.page.service import edit as service_edit\nfrom nav.web.seeddb.page import room\nfrom nav.web.seeddb.page.management_profile import (\n    management_profile,\n    management_profile_edit,\n    management_profile_delete,\n    management_profile_bulk,\n)\nfrom nav.web.seeddb.page import location\nfrom nav.web.seeddb.page import organization\nfrom nav.web.seeddb.page import usage\nfrom nav.web.seeddb.page import netboxtype\nfrom nav.web.seeddb.page import vendor\nfrom nav.web.seeddb.page import netboxgroup\nfrom nav.web.seeddb.page import vlan\nfrom nav.web.seeddb.page import prefix\nfrom nav.web.seeddb.page import cabling\nfrom nav.web.seeddb.page import patch\n\n\nurlpatterns = [\n    path('', page.index, name='seeddb-index'),\n    # Netbox\n    path('netbox/', netbox.netbox, name='seeddb-netbox'),\n    re_path(\n        r'^netbox/edit/(?P<netbox_id>(\\d+))/',\n        netbox_edit.netbox_edit,\n        name='seeddb-netbox-edit',\n    ),\n    re_path(\n        r'^netbox/delete/(?P<object_id>(\\d+))/',\n        netbox.netbox_delete,\n        name='seeddb-netbox-delete',\n    ),\n    path(\n        'netbox/add/<path:suggestion>',\n        netbox_edit.netbox_edit,\n        name='seeddb-netbox-add-suggestion',\n    ),\n    path('netbox/add/', netbox_edit.netbox_edit, name='seeddb-netbox-edit'),\n    re_path(\n        r'^netbox/(?P<action>copy)/(?P<netbox_id>(\\d+))/',\n        netbox_edit.netbox_edit,\n        name='seeddb-netbox-copy',\n    ),\n    path('netbox/bulk/', netbox.netbox_bulk, name='seeddb-netbox-bulk'),\n    path(\n        'netbox/check-connectivity/load/',\n        netbox_edit.load_connectivity_test_results,\n        name='seeddb-netbox-check-connectivity-load',\n    ),\n    path(\n        'netbox/check-connectivity/',\n        netbox_edit.check_connectivity,\n        name='seeddb-netbox-check-connectivity',\n    ),\n    re_path(\n        r'^netbox/validate-ip-address/',\n        netbox_edit.validate_ip_address,\n        name='seeddb-netbox-validate-ip-address',\n    ),\n    # Management Profile\n    path('management-profile/', management_profile, name='seeddb-management-profile'),\n    path(\n        'management-profile/edit/<str:management_profile_id>/',\n        management_profile_edit,\n        name='seeddb-management-profile-edit',\n    ),\n    path(\n        'management-profile/delete/<str:object_id>/',\n        management_profile_delete,\n        name='seeddb-management-profile-delete',\n    ),\n    path(\n        'management-profile/add/',\n        management_profile_edit,\n        name='seeddb-management-profile-edit',\n    ),\n    path(\n        'management-profile/bulk/',\n        management_profile_bulk,\n        name='seeddb-management-profile-bulk',\n    ),\n    # Service\n    path('service/', service.service, name='seeddb-service'),\n    path(\n        'service/edit/<int:service_id>',\n        service_edit.service_edit,\n        name='seeddb-service-edit',\n    ),\n    path(\n        'service/delete/<int:object_id>',\n        service.service_delete,\n        name='seeddb-service-delete',\n    ),\n    path('service/add/', service_edit.service_edit, name='seeddb-service-edit'),\n    path('service/bulk/', service.service_bulk, name='seeddb-service-bulk'),\n    # Room\n    path('room/', room.room, name='seeddb-room'),\n    path('room/edit/<path:room_id>/', room.room_edit, name='seeddb-room-edit'),\n    path('room/delete/<path:object_id>/', room.room_delete, name='seeddb-room-delete'),\n    re_path(\n        r'^room/(?P<action>copy)/(?P<room_id>.+)/$',\n        room.room_edit,\n        name='seeddb-room-copy',\n    ),\n    path('room/add/', room.room_edit, name='seeddb-room-edit'),\n    path('room/add/<str:lat>/<str:lon>/', room.room_edit, name='seeddb-room-edit'),\n    path('room/bulk/', room.room_bulk, name='seeddb-room-bulk'),\n    # Location\n    path('location/', location.location, name='seeddb-location'),\n    path(\n        'location/edit/<path:location_id>/',\n        location.location_edit,\n        name='seeddb-location-edit',\n    ),\n    path(\n        'location/delete/<path:object_id>/',\n        location.location_delete,\n        name='seeddb-location-delete',\n    ),\n    path('location/add/', location.location_edit, name='seeddb-location-edit'),\n    re_path(\n        r'^location/(?P<action>copy)/(?P<location_id>.+)/$',\n        location.location_edit,\n        name='seeddb-location-copy',\n    ),\n    path('location/bulk/', location.location_bulk, name='seeddb-location-bulk'),\n    # Organization\n    path('organization/', organization.organization, name='seeddb-organization'),\n    path(\n        'organization/edit/<path:organization_id>/',\n        organization.organization_edit,\n        name='seeddb-organization-edit',\n    ),\n    path(\n        'organization/delete/<path:object_id>/',\n        organization.organization_delete,\n        name='seeddb-organization-delete',\n    ),\n    path(\n        'organization/add/',\n        organization.organization_edit,\n        name='seeddb-organization-edit',\n    ),\n    path(\n        'organization/bulk/',\n        organization.organization_bulk,\n        name='seeddb-organization-bulk',\n    ),\n    # Usage category\n    path('usage/', usage.usage, name='seeddb-usage'),\n    path('usage/edit/<path:usage_id>/', usage.usage_edit, name='seeddb-usage-edit'),\n    path(\n        'usage/delete/<path:object_id>/',\n        usage.usage_delete,\n        name='seeddb-usage-delete',\n    ),\n    path('usage/add/', usage.usage_edit, name='seeddb-usage-edit'),\n    path('usage/bulk/', usage.usage_bulk, name='seeddb-usage-bulk'),\n    # Type\n    path('type/', netboxtype.netboxtype, name='seeddb-type'),\n    path(\n        'type/edit/<int:type_id>/',\n        netboxtype.netboxtype_edit,\n        name='seeddb-type-edit',\n    ),\n    path(\n        'type/delete/<int:object_id>/',\n        netboxtype.netboxtype_delete,\n        name='seeddb-type-delete',\n    ),\n    path('type/add/', netboxtype.netboxtype_edit, name='seeddb-type-edit'),\n    path('type/bulk/', netboxtype.netboxtype_bulk, name='seeddb-type-bulk'),\n    # Vendor\n    path('vendor/', vendor.vendor, name='seeddb-vendor'),\n    path('vendor/add/', vendor.vendor_edit, name='seeddb-vendor-edit'),\n    path('vendor/bulk/', vendor.vendor_bulk, name='seeddb-vendor-bulk'),\n    # Netbox Group\n    path('netboxgroup/', netboxgroup.netboxgroup, name='seeddb-netboxgroup'),\n    path(\n        'netboxgroup/edit/<path:netboxgroup_id>/',\n        netboxgroup.netboxgroup_edit,\n        name='seeddb-netboxgroup-edit',\n    ),\n    path(\n        'netboxgroup/delete/<path:object_id>/',\n        netboxgroup.netboxgroup_delete,\n        name='seeddb-netboxgroup-delete',\n    ),\n    path(\n        'netboxgroup/add/',\n        netboxgroup.netboxgroup_edit,\n        name='seeddb-netboxgroup-edit',\n    ),\n    path(\n        'netboxgroup/bulk/',\n        netboxgroup.netboxgroup_bulk,\n        name='seeddb-netboxgroup-bulk',\n    ),\n    # Vlan\n    path('vlan/', vlan.vlan_list, name='seeddb-vlan'),\n    path('vlan/edit/<int:vlan_id>/', vlan.vlan_edit, name='seeddb-vlan-edit'),\n    # Prefix\n    path('prefix/', prefix.get_prefix_view, name='seeddb-prefix'),\n    path(\n        'prefix/edit/<int:prefix_id>/',\n        prefix.prefix_edit,\n        name='seeddb-prefix-edit',\n    ),\n    path(\n        'prefix/delete/<int:object_id>/',\n        prefix.prefix_delete,\n        name='seeddb-prefix-delete',\n    ),\n    path('prefix/add/', prefix.prefix_edit, name='seeddb-prefix-edit'),\n    path('prefix/bulk/', prefix.prefix_bulk, name='seeddb-prefix-bulk'),\n    # Cabling\n    path('cabling/', cabling.cabling, name='seeddb-cabling'),\n    path('cabling/edit/', cabling.cabling_edit, name='seeddb-cabling-edit'),\n    path(\n        'cabling/delete/<int:object_id>/',\n        cabling.cabling_delete,\n        name='seeddb-cabling-delete',\n    ),\n    path('cabling/add/', cabling.cabling_edit, name='seeddb-cabling-add'),\n    path('cabling/bulk/', cabling.cabling_bulk, name='seeddb-cabling-bulk'),\n    # Patch\n    path('patch/', patch.patch, name='seeddb-patch'),\n    path('patch/edit/', patch.patch_edit, name='seeddb-patch-edit'),\n    path(\n        'patch/edit/show-modal/',\n        patch.patch_show_modal,\n        name='seeddb-show-patch-modal',\n    ),\n    path('patch/delete/', patch.patch_delete, name='seeddb-patch-delete'),\n    path('patch/bulk/', patch.patch_bulk, name='seeddb-patch-bulk'),\n    # XXX: too greedy\n    re_path(r'^patch/save/', patch.patch_save, name='seeddb-patch-save'),\n    re_path(r'^patch/remove/', patch.patch_remove, name='seeddb-patch-remove'),\n    re_path(r'^patch/loadcell/', patch.load_cell, name='seeddb-patch-load-cell'),\n]\n"
  },
  {
    "path": "python/nav/web/seeddb/utils/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/seeddb/utils/bulk.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module for handling bulk import requests\"\"\"\n\nfrom django.shortcuts import render\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse\n\nfrom nav.bulkimport import reset_object_foreignkeys\nfrom nav.bulkparse import BulkParseError\nfrom nav.web.message import Messages\nfrom nav.web.seeddb.forms.bulk import BulkImportForm\n\n\ndef render_bulkimport(request, parser_cls, importer_cls, redirect, extra_context=None):\n    \"\"\"Renders the bulkimport interface\"\"\"\n    extra_context = extra_context or {}\n    processed = []\n    if request.method == 'POST':\n        form = BulkImportForm(parser_cls, request.POST, request.FILES)\n        if form.is_valid():\n            confirm = request.POST.get('confirm', False)\n            parser = form.get_parser()\n            importer = importer_cls(parser)\n\n            if confirm:\n                saved = bulk_save(importer)\n                post_save_message(request, saved)\n                return HttpResponseRedirect(reverse(redirect))\n            else:\n                processed = form.bulk_process_check(importer)\n    else:\n        form = BulkImportForm(parser_cls)\n\n    info_dict = {\n        'form': form,\n        'processed_objects': processed,\n        'sub_active': {'bulk': True},\n    }\n    info_dict.update(extra_context)\n    return render(request, 'seeddb/bulk_import.html', info_dict)\n\n\ndef bulk_save(importer):\n    \"\"\"Saves the bulk data stored in the importer\"\"\"\n    saved = []\n    for _, objects in importer:\n        if not isinstance(objects, BulkParseError):\n            for obj in objects:\n                reset_object_foreignkeys(obj)\n                obj.save()\n            saved.append(objects)\n    return saved\n\n\ndef post_save_message(request, saved):\n    \"\"\"Displays information to the user about what was imported\"\"\"\n    messages = Messages(request)\n    for objects in saved:\n        for obj in objects:\n            msg = \"Saved %s %s \" % (obj._meta.verbose_name, obj)\n            messages.append({'message': msg, 'type': Messages.SUCCESS})\n    messages.save()\n"
  },
  {
    "path": "python/nav/web/seeddb/utils/delete.py",
    "content": "#\n# Copyright (C) 2011, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Functions for deleting objects from seeddb.\"\"\"\n\nimport logging\n\nfrom django.db import connection, transaction, IntegrityError\nfrom django.shortcuts import render\nfrom django.urls import reverse\nfrom django.http import HttpResponseRedirect\n\nfrom nav.django.utils import get_model_and_name, get_all_related_objects\nfrom nav.web.auth.utils import get_account\nfrom nav.web.message import new_message, Messages\nfrom nav.auditlog.models import LogEntry\n\n_logger = logging.getLogger(__name__)\n\n\n@transaction.atomic()\ndef qs_delete(queryset):\n    \"\"\"Deletes objects from the database.\n\n    Given a queryset containing the objects to be deleted, this method will\n    either delete all without error, or delete none if there's an error.\n    \"\"\"\n    quote_name = connection.ops.quote_name\n\n    pk_list = tuple([obj.pk for obj in queryset])\n    primary_key = queryset.model._meta.pk.db_column\n    table = queryset.model._meta.db_table\n\n    cursor = connection.cursor()\n    sql = \"DELETE FROM %(table)s WHERE %(field)s IN %%s\" % {\n        'table': quote_name(table),\n        'field': quote_name(primary_key),\n    }\n    cursor.execute(sql, (pk_list,))\n    return cursor.rowcount\n\n\ndef render_delete(\n    request,\n    model,\n    redirect,\n    whitelist=None,\n    extra_context=None,\n    pre_delete_operation=None,\n    delete_operation=qs_delete,\n    object_id=None,\n):\n    \"\"\"Handles input and rendering of general delete page.\"\"\"\n\n    # GET with single object_id in url or POST with object_ids as POST query\n    if not (object_id or request.method == 'POST'):\n        return HttpResponseRedirect(reverse(redirect))\n    object_ids = request.POST.getlist('object') or [object_id]\n    if not object_ids:\n        new_message(\n            request, \"You need to select at least one object to edit\", Messages.ERROR\n        )\n        return HttpResponseRedirect(reverse(redirect))\n    objects = _get_qs_to_delete(model, object_ids, whitelist)\n\n    if request.POST.get('confirm'):\n        did_delete = _try_deleting(\n            request, objects, pre_delete_operation, delete_operation\n        )\n        if did_delete:\n            return HttpResponseRedirect(reverse(redirect))\n\n    if not extra_context:\n        extra_context = {}\n    info_dict = {\n        'objects': objects,\n        'sub_active': {'list': True},\n    }\n    extra_context.update(info_dict)\n    return render(request, 'seeddb/delete.html', extra_context)\n\n\ndef _get_qs_to_delete(model, object_ids, whitelist=None):\n    \"Turn a list of object_ids for model into a queryset, with dependencies\"\n    if not whitelist:\n        whitelist = []\n\n    objects = model.objects.filter(pk__in=object_ids).order_by('pk')\n    related = dependencies(objects, whitelist)\n\n    for obj in objects:\n        if obj.pk in related:\n            obj.related_objects = related[obj.pk]\n    return objects\n\n\ndef _try_deleting(request, objects, pre_delete_operation=None, delete_operation=None):\n    try:\n        if pre_delete_operation:\n            pre_delete_operation(objects)\n        if delete_operation:\n            delete_operation(objects)\n    except IntegrityError as ex:\n        # We can't delete.\n        # Some of the objects we want to delete is referenced by another\n        # table without any ON DELETE rules.\n        msg = \"Integrity failed: %s\" % ex\n        new_message(request, msg, Messages.ERROR)\n    except Exception as ex:  # noqa: BLE001\n        # Something else went wrong\n        _logger.exception(\"Unhandled exception during delete: %r\", request)\n        msg = \"Error: %s\" % ex\n        new_message(request, msg, Messages.ERROR)\n    else:\n        account = get_account(request)\n        if delete_operation:\n            new_message(request, \"Deleted %i rows\" % len(objects), Messages.SUCCESS)\n            log_deleted(account, objects, template='{actor} deleted {object}')\n        else:\n            new_message(\n                request,\n                \"Scheduled %i rows for deletion\" % len(objects),\n                Messages.SUCCESS,\n            )\n            log_deleted(\n                account,\n                objects,\n                template='{actor} scheduled {object} for deletion',\n            )\n        return True\n    return False\n\n\ndef log_deleted(account, objects, template):\n    \"\"\"Log the deletion of each object\"\"\"\n    for obj in objects:\n        LogEntry.add_delete_entry(account, obj, template=template)\n\n\ndef dependencies(queryset, whitelist):\n    \"\"\"Looks up related objects for the provided queryset.\n    Only looks up models provided in the whitelist.\n\n    Will only display related objects, not what will happen if the user choose\n    to delete the objects in the queryset. The exact nature is defined in the\n    database, and can range from CASCADE (all dependent rows are all deleted)\n    to nothing, which will probably cause the delete statement to fail.\n    \"\"\"\n    primary_keys = [obj.pk for obj in queryset]\n    related = get_all_related_objects(queryset.model)\n\n    related_objects = {}\n    for rel in related:\n        model, name = get_model_and_name(rel)\n        if model not in whitelist:\n            continue\n        field = rel.field.name\n        lookup = \"%s__in\" % field\n        params = {lookup: primary_keys}\n        objects = model.objects.filter(**params)\n        for obj in objects:\n            obj.object_name = name\n            attr = getattr(obj, '%s_id' % field)\n            if attr not in related_objects:\n                related_objects[attr] = []\n            related_objects[attr].append(obj)\n\n    return related_objects\n"
  },
  {
    "path": "python/nav/web/seeddb/utils/edit.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Functions for editing general objects in seeddb.\n\n(Not netboxes and services).\n\"\"\"\n\nimport logging\nfrom socket import gethostbyaddr, gethostbyname, error as SocketError\n\nfrom IPy import IP\n\nfrom django.shortcuts import render, get_object_or_404\nfrom django.http import HttpResponseRedirect, Http404\nfrom django.db.models import Q\nfrom django.urls import reverse, NoReverseMatch\n\nfrom nav.web.message import new_message, Messages\nfrom nav.models.manage import Netbox, NetboxCategory, NetboxGroup\n\n_logger = logging.getLogger(__name__)\n\n\ndef render_edit(\n    request,\n    model,\n    form_model,\n    object_id,\n    redirect,\n    template='seeddb/edit.html',\n    lon=None,\n    lat=None,\n    extra_context=None,\n    action='edit',\n):\n    \"\"\"Handles editing for objects in seeddb.\"\"\"\n    if not extra_context:\n        extra_context = {}\n\n    obj = _get_object(model, object_id)\n    verbose_name = model._meta.verbose_name\n\n    if not obj and (lat and lon):\n        obj = model(position='({0},{1})'.format(lat, lon))\n\n    original_pk = getattr(obj, 'pk', None)\n    if action == 'copy' and original_pk:\n        obj.pk = None\n    if request.method == 'POST':\n        form = form_model(request.POST, instance=obj)\n        if form.is_valid():\n            # TODO: It's kinda hackish to put this here. Discuss during review\n            # Store devices in group when editing a device group (which we\n            # have no idea if we are doing or not)\n            if model == NetboxGroup:\n                netboxes = request.POST.getlist('netboxes')\n                _logger.debug('netboxes in group: %s', netboxes)\n                # Save model but make sure m2m is not saved. See\n                # https://docs.djangoproject.com/en/1.4/topics/db/models\n                # /#extra-fields-on-many-to-many-relationships\n                obj = form.save(commit=False)\n                obj.save()\n                _connect_group_to_devices(obj, netboxes)\n            else:\n                obj = form.save()\n\n            new_message(request, \"Saved %s %s\" % (verbose_name, obj), Messages.SUCCESS)\n            try:\n                return HttpResponseRedirect(reverse(redirect, args=(obj.pk,)))\n            except NoReverseMatch:\n                return HttpResponseRedirect(reverse(redirect))\n    else:\n        form = form_model(instance=obj)\n\n    context = {\n        'object': obj,\n        'form': form,\n        'title': 'Add new %s' % verbose_name,\n        'verbose_name': verbose_name,\n        'sub_active': {'add': True},\n    }\n    if obj:\n        if obj.pk:\n            context.update(\n                {\n                    'title': 'Edit %s' % verbose_name,\n                    'detail_page_name': obj,\n                    'sub_active': {'edit': True},\n                }\n            )\n        else:\n            context.update(\n                {\n                    'title': 'Copy %s \"%s\"' % (verbose_name, original_pk),\n                    'sub_active': {'edit': True},\n                }\n            )\n    context.update(extra_context)\n    return render(request, template, context)\n\n\ndef _get_object(model, object_id, identifier_attr='pk'):\n    \"\"\"Get object if it exists, else raise 404\"\"\"\n    try:\n        return get_object_or_404(model, **{identifier_attr: object_id})\n    except Http404:\n        pass\n\n\ndef resolve_ip_and_sysname(name):\n    \"\"\"Given a name that can be either an ip or a hostname/domain name, this\n    function looks up IP and hostname.\n\n    name - ip or hostname\n\n    Returns:\n     - tuple with ip-addres and sysname\n    \"\"\"\n    try:\n        ip_addr = IP(name)\n    except ValueError:\n        ip_addr = IP(gethostbyname(name))\n    try:\n        sysname = gethostbyaddr(str(ip_addr))[0]\n    except SocketError:\n        sysname = str(ip_addr)\n    return (ip_addr, sysname)\n\n\ndef does_ip_exist(ip_addr, netbox_id=None):\n    \"\"\"Checks if the given IP already exist in database.\n\n    Parameters:\n     * ip_addr   - the IP addres to look for.\n     * netbox_id - a netbox primary key that can have the given ip_addr, and\n                   the function will still return False.\n\n    Returns:\n     - True if the IP already exists in the database (and the netbox with the\n       IP is not the same as the given netbox_id).\n     - False if not.\n    \"\"\"\n    if netbox_id:\n        ip_qs = Netbox.objects.filter(Q(ip=str(ip_addr)), ~Q(id=netbox_id))\n    else:\n        ip_qs = Netbox.objects.filter(ip=str(ip_addr))\n    return ip_qs.count() > 0\n\n\ndef does_sysname_exist(sysname, netbox_id=None):\n    \"\"\"Checks if given sysname exists in database.\n\n    Parameters:\n     * sysname   - the sysname addres to look for.\n     * netbox_id - a netbox primary key that can have the given ip_addr, and\n                   the function will still return False.\n\n    Returns:\n     - True if the sysname already exists in the database (and the netbox with\n       the sysname is not the same as the given netbox_id).\n     - False if not.\n    \"\"\"\n    if netbox_id:\n        sysname_qs = Netbox.objects.filter(Q(sysname=sysname), ~Q(id=netbox_id))\n    else:\n        sysname_qs = Netbox.objects.filter(sysname=sysname)\n    return sysname_qs.count() > 0\n\n\ndef _connect_group_to_devices(group, netbox_ids):\n    \"\"\"\n    Connect a NetboxGroup and Netboxes by creating instances of\n    NetboxCategories\n\n    :param nav.models.manage.NetboxGroup group: A netboxgroup\n    :param list[str] netbox_ids: a result from a request.POST.getlist that\n                                 should contain netbox id's as strings\n    \"\"\"\n    netboxids = [int(x) for x in netbox_ids]\n\n    # Delete existing netboxcategories that are not in request\n    NetboxCategory.objects.filter(category=group).exclude(\n        netbox__pk__in=netboxids\n    ).delete()\n\n    # Add new netboxcategories that are in request\n    for netboxid in netboxids:\n        try:\n            NetboxCategory.objects.get(category=group, netbox__pk=netboxid)\n        except NetboxCategory.DoesNotExist:\n            netbox = Netbox.objects.get(pk=netboxid)\n            NetboxCategory.objects.create(category=group, netbox=netbox)\n"
  },
  {
    "path": "python/nav/web/seeddb/utils/list.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Functions for rendering seeddb list views\"\"\"\n\nfrom collections import defaultdict\nfrom functools import reduce\nfrom typing import Optional\n\nfrom django.db.models import Model\nfrom django.shortcuts import render\nfrom django.core.exceptions import FieldDoesNotExist\nfrom django.urls import reverse\n\nfrom nav.django.utils import get_verbose_name\n\n\ndef render_list(\n    request,\n    queryset,\n    value_list,\n    edit_url=None,\n    edit_url_attr='pk',\n    filter_form=None,\n    template='seeddb/list.html',\n    column_labels=None,\n    extra_context=None,\n    add_descriptions=False,\n    add_related=None,\n):\n    \"\"\"Renders a Seed DB list.\n\n    Parameters:\n     - request: HttpRequest object from Django\n     - queryset: A queryset containing all objects that should appear in the\n                 list.\n     - value_list: Tuple with field names used in Django's `value_list`\n                   queryset method.\n     - edit_url: Named URL to the edit page.\n     - edit_url_attr: Attribute used to make the URL to the edit page.\n     - filter_form: Form used to filter the queryset.\n     - template: Path to the template used.\n     - column_labels: A dictionary containing any fields that should have a different\n                      label than their field name\n     - extra_context: A dictionary containing all additional context that\n                      should be used in the template.\n    \"\"\"\n\n    if not extra_context:\n        extra_context = {}\n\n    queryset = _filter_query(filter_form, queryset)\n\n    if not edit_url:\n        rows, datakeys = _process_objects(queryset, value_list)\n    else:\n        rows, datakeys = _process_objects(queryset, value_list, edit_url, edit_url_attr)\n\n    labels = _label(queryset.model, value_list, datakeys, column_labels)\n    if add_descriptions:\n        _add_descriptions(rows, queryset)\n    if add_related is not None:\n        add_related(rows)\n\n    context = {\n        'object_list': rows,\n        'labels': labels,\n        'filter_form': filter_form,\n        'sub_active': {'list': True},\n    }\n\n    # Update extra_context with context.\n    # Doing it this way makes sure that the context dictionary overrides any\n    # user-supplied data, not the other way around.\n    extra_context.update(context)\n    return render(request, template, extra_context)\n\n\ndef _filter_query(filter_form, queryset):\n    \"\"\"Apply filter_form to queryset.\"\"\"\n    if filter_form and filter_form.is_valid():\n        # Convert UI fieldname to DB lookup\n        mapper = getattr(filter_form, \"map_formfieldname_to_queryname\", lambda x: x)\n        filter_data = filter_form.cleaned_data.items()\n        query_filter = {mapper(key): value for key, value in filter_data if value}\n        queryset = queryset.filter(**query_filter)\n    return queryset\n\n\ndef _process_objects(queryset, value_list, edit_url=None, edit_url_attr=None):\n    \"\"\"Packs values into a format the template understands.\n\n    A list contains each row.\n    Each row is a dictionary with following keys:\n     - pk: The primary key.\n     - url: URL to the edit page.\n     - values_list: A list with the values that should be displayed in the\n                    table.\n    \"\"\"\n    # pick up which values are dictionaries and make note of their existing keys\n    datakeys = defaultdict(set)\n    for obj in queryset:\n        for attr in value_list:\n            value = _getattr(obj, attr)\n            if isinstance(value, dict):\n                datakeys[attr].update(value)\n    datakeys = {k: list(sorted(v)) for k, v in datakeys.items()}\n\n    def _getvalues(obj):\n        for attr in value_list:\n            value = _getattr(obj, attr)\n            if attr in datakeys:\n                for key in datakeys[attr]:\n                    yield value.get(key, None)\n            elif isinstance(value, tuple):\n                # this only normally happens with tuples of Decimal values in Rooms\n                yield \", \".join(str(v) for v in value)\n            else:\n                yield value\n\n    rows = []\n    for obj in queryset:\n        row = {\n            'pk': obj.pk,\n            'values_list': list(_getvalues(obj)),\n            'model': obj,\n        }\n        if edit_url and edit_url_attr:\n            key = _getattr(obj, edit_url_attr)\n            row['url'] = reverse(edit_url, args=(key,))\n        rows.append(row)\n    return rows, datakeys\n\n\ndef _getattr(obj, attr):\n    \"\"\"Deep getattr for Django double underscore specs.\n\n    Should conform to the bassackwards ways of SeedDB at large.\n    \"\"\"\n    try:\n        value = reduce(getattr, attr.split('__'), obj)\n        if isinstance(value, Model):\n            return value.pk\n        else:\n            return value\n    except AttributeError:\n        pass\n\n\ndef _label(model, value_list, datakeys=None, overriden_labels: Optional[dict] = None):\n    \"\"\"Make labels for the table head.\n    Returns a list of tuples. Each tuple contains the verbose label and a key\n    that can be used for sort parameters in the URL.\n    \"\"\"\n    attrs = []\n    labels = []\n    for value in value_list:\n        if value in datakeys:\n            labels.extend(datakeys[value])\n            attrs.extend(datakeys[value])\n        else:\n            attrs.append(value)\n            if overriden_labels and value in overriden_labels:\n                labels.append(overriden_labels[value])\n            else:\n                try:\n                    labels.append(get_verbose_name(model, value))\n                except FieldDoesNotExist:\n                    labels.append(value)\n    return zip(labels, attrs)\n\n\ndef _add_descriptions(rows, queryset):\n    \"\"\"Adds a description key to all objects\"\"\"\n    for row in rows:\n        model = row['model']\n        row['description'] = getattr(model, 'description', '')\n"
  },
  {
    "path": "python/nav/web/seeddb/utils/move.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django.shortcuts import render\nfrom django.http import HttpResponseRedirect\nfrom django.urls import reverse\n\nfrom nav.django.utils import get_verbose_name\n\nfrom nav.web.message import new_message, Messages\n\nSTEP_CHANGEVALUES = 0  # Dropdown boxes with new values\nSTEP_CONFIRM = 1  # What the objects will look like afterwards\nSTEP_SAVE = 2  # Update the objects\n\n\ndef move(request, model, form_model, redirect, title_attr='id', extra_context=None):\n    if not extra_context:\n        extra_context = {}\n\n    # If no post or no objects selected, start over\n    if request.method != 'POST':\n        return HttpResponseRedirect(reverse(redirect))\n    if not request.POST.getlist('object'):\n        new_message(\n            request, \"You need to select at least one object to edit\", Messages.ERROR\n        )\n        return HttpResponseRedirect(reverse(redirect))\n\n    data = None\n    confirm = False\n    verbose_name = model._meta.verbose_name\n    objects = model.objects.filter(id__in=request.POST.getlist('object'))\n\n    # Find out what step we are on, or default to start of wizard\n    try:\n        step = int(request.POST.get('step', '0'))\n    except ValueError:\n        step = STEP_CHANGEVALUES\n\n    # Choose new values to foreign keys\n    if step == STEP_CHANGEVALUES:\n        form = form_model()\n        step = STEP_CONFIRM\n\n    # Confirm the changes\n    elif step == STEP_CONFIRM:\n        form = form_model(request.POST)\n        if form.is_valid():\n            data = form.cleaned_data\n            confirm = True\n            step = STEP_SAVE\n\n    # Update the objects\n    elif step == STEP_SAVE:\n        form = form_model(request.POST)\n        if form.is_valid():\n            foreign_keys = form.cleaned_data.keys()\n            data = dict()\n\n            # If nothing is selected, don't update\n            for key in foreign_keys:\n                if form.cleaned_data[key] is not None:\n                    data[key] = form.cleaned_data[key]\n\n            # Update\n            objects.update(**data)\n\n            # Generate message based on what was changed and redirect back\n            foreign_key_string = \", \".join(\n                [get_verbose_name(model, key) for key in data]\n            )\n\n            if foreign_key_string == \"\":\n                foreign_key_string = \"nothing\"\n\n            new_message(\n                request,\n                \"Changed %s on %i %s models\"\n                % (foreign_key_string, len(objects), verbose_name),\n                Messages.SUCCESS,\n            )\n\n            return HttpResponseRedirect(reverse(redirect))\n\n    # Keep values from the form and pass them as context\n    fields = list(form.fields.keys() if form else form_model().fields.keys())\n\n    values = objects.values('pk', title_attr, *fields)\n    object_list = _parse_value_differences(values, data, title_attr, fields)\n\n    context = {\n        'form': form or '',\n        'objects': objects,\n        'values': object_list,\n        'data': data,\n        'confirm': confirm,\n        'sub_active': {'list': True},\n        'title': 'Move %s' % verbose_name,\n        'step': step,\n    }\n\n    extra_context.update(context)\n\n    return render(request, 'seeddb/move.html', extra_context)\n\n\ndef _parse_value_differences(values, data, title_attr, fields):\n    \"\"\"Creates a data structure describing the before/after values of a\n    requested move operation.  Output can be used in templates to show a\n    preview of the changes that will be made.\n\n    \"\"\"\n    object_list = []\n    attr_list = [title_attr] + fields\n\n    for obj in values:\n        row = {\n            'pk': obj['pk'],\n            'values': [(\"Current %s\" % attr, obj[attr]) for attr in attr_list],\n        }\n\n        # If the form has data, format the fields with new values\n        if data:\n            new_values = []\n            for attr in fields:\n                if data[attr] is not None:\n                    new_values.append((\"New %s\" % attr, data[attr]))\n                else:\n                    new_values.append((\"New %s\" % attr, obj[attr]))\n\n            row['values'].extend(new_values)\n        object_list.append(row)\n\n    return object_list\n"
  },
  {
    "path": "python/nav/web/servicecheckers.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utility functions to find available servicemon checker plugins\"\"\"\n\nimport os\nimport re\nfrom nav.statemon.abstractchecker import AbstractChecker\nimport nav.statemon.checker\n\n_CHECKER_DIR = os.path.dirname(nav.statemon.checker.__file__)\n_CHECKER_PATTERN = \"Checker.py\"\n_DEFAULT_ARGS = ['port', 'timeout']\n_ASSIGNMENT_PATTERN = re.compile(r\"^([^#=]+)\\s*=\\s*([^#\\n]+)\", re.M)\n\n\ndef get_checkers():\n    \"\"\"Returns a list of available servicemon checkers\"\"\"\n    return [f[: -len(_CHECKER_PATTERN)].lower() for f in get_checker_modules()]\n\n\ndef get_descriptions(checker_names):\n    \"\"\"Returns metadata about the checkers\"\"\"\n    checker_modules = get_checker_modules_as_dict()\n    return {c: get_description(c, checker_modules) for c in checker_names}\n\n\ndef get_description(checker_name, checkers=None):\n    \"\"\"Returns a description of a service checker\"\"\"\n    if checkers is None:\n        checkers = get_checker_modules_as_dict()\n    if checker_name not in checkers:\n        return\n    checker = checkers[checker_name]\n\n    result = {\n        'description': checker.DESCRIPTION,\n        'args': checker.ARGS,\n        'optargs': checker.OPTARGS,\n    }\n    return result\n\n\ndef get_checker_modules_as_dict():\n    \"\"\"Load all checker classes and construct a dictionary of the result\"\"\"\n    return {c.get_type(): c for c in load_checker_classes()}\n\n\ndef load_checker_classes():\n    \"\"\"Imports service checker modules, returning checker classes in a list.\n\n    :returns: A list of AbstractChecker subclasses.\n\n    \"\"\"\n    module_names = (\n        \"nav.statemon.checker.%s\" % os.path.splitext(f)[0]\n        for f in get_checker_modules()\n    )\n    modules = (m for m in (_import_or_none(n) for n in module_names) if m)\n    checkers = set()\n    for mod in modules:\n        for value in vars(mod).values():\n            try:\n                if issubclass(value, AbstractChecker) and value is not AbstractChecker:\n                    checkers.add(value)\n            except TypeError:\n                pass\n\n    return checkers\n\n\ndef _import_or_none(module_name):\n    try:\n        return __import__(module_name, fromlist=['*'])\n    except ImportError:\n        return\n\n\ndef get_checker_modules():\n    \"\"\"Returns a list of available servicemon checker modules\"\"\"\n    try:\n        files = os.listdir(_CHECKER_DIR)\n    except OSError:\n        return []\n\n    return [\n        f\n        for f in files\n        if len(f) > len(_CHECKER_PATTERN) and f.endswith(_CHECKER_PATTERN)\n    ]\n"
  },
  {
    "path": "python/nav/web/session_serializer.py",
    "content": "import pickle\n\nfrom django.conf import settings\nfrom django.core.exceptions import ImproperlyConfigured\n\n\nclass PickleSerializer:\n    \"\"\"\n    Simple wrapper around pickle to be used for serializing data to be put in\n    cookies.\n\n    This was vendored from the version found in Django 4.2. JSONSerializer has\n    been the default in Django since 1.6, deprecated since 4.1 and purged from\n    the codebase since 5.0. What Django did not provide is a migration path:\n    a test showed that any access of a cookie after the serializer had been\n    changed lead to a rather useless exception.\n\n    PickleSerializer was removed due to it being danegerous in the\n    signed_cookie session backend. NAV doesn't use that see we can keep the old\n    serializer.\n\n    Changes from the original: A deprecation warning has been removed and\n    a check that it is not used with the signed_cookie session backend has been\n    added.\n    \"\"\"\n\n    def __init__(self, protocol=None):\n        if settings.SESSION_ENGINE == 'django.contrib.sessions.backends.signed_cookies':\n            raise ImproperlyConfigured(\n                \"PickleSerializer cannot be used with signed_cookies SESSION_ENGINE\"\n            )\n        self.protocol = pickle.HIGHEST_PROTOCOL if protocol is None else protocol\n\n    def dumps(self, obj):\n        return pickle.dumps(obj, self.protocol)\n\n    def loads(self, data):\n        return pickle.loads(data)\n"
  },
  {
    "path": "python/nav/web/sortedstats/__init__.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Useful crap\"\"\"\n\nfrom datetime import timedelta\n\nfrom .statmodules import (\n    StatCpuAverage,\n    StatUptime,\n    StatIfInOctets,\n    StatIfOutOctets,\n    StatIfOutErrors,\n    StatIfInErrors,\n    StatMinFreeAddresses,\n)\n\nCLASSMAP = {\n    'cpu_routers_highestmax': StatCpuAverage,\n    'uptime': StatUptime,\n    'ifinoctets': StatIfInOctets,\n    'ifoutoctets': StatIfOutOctets,\n    'ifouterrors': StatIfOutErrors,\n    'ifinerrors': StatIfInErrors,\n    'leastfreeaddresses': StatMinFreeAddresses,\n}\n\nTIMEFRAMES = {\n    'hour': {\n        'cache_timeout': 3600,\n        'descr': 'Last Hour',\n        'timedelta': timedelta(hours=1),\n    },\n    'day': {\n        'cache_timeout': 7200,\n        'descr': 'Last Day',\n        'timedelta': timedelta(days=1),\n    },\n    'week': {\n        'cache_timeout': 43200,\n        'descr': 'Last Week',\n        'timedelta': timedelta(weeks=1),\n    },\n    'month': {\n        'cache_timeout': 129600,\n        'descr': 'Last Month',\n        'timedelta': timedelta(days=30),\n    },\n}\n"
  },
  {
    "path": "python/nav/web/sortedstats/config.py",
    "content": "import logging\nimport configparser\nfrom functools import partial\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n\nfrom nav.config import NAVConfigParser\nfrom nav.web.sortedstats import CLASSMAP, TIMEFRAMES\n\n_logger = logging.getLogger(__name__)\n\n\nclass SortedStatsConfig(NAVConfigParser):\n    \"\"\"Configparser for SortedStats\"\"\"\n\n    DEFAULT_CONFIG_FILES = ('sortedstats.conf',)\n\n    def get_reports(self, timeframe):\n        reports = {}\n        for section in self.sections():\n            try:\n                get = partial(self.get, section)\n                if timeframe != get('timeframe'):\n                    continue\n                timeframe = self.validate_timeframe(get('timeframe'))\n                view = self.validate_view(get('view'))\n                rows = self.validate_rows(get('rows'))\n                reports[section] = {\n                    'timeframe': timeframe,\n                    'view': view,\n                    'rows': rows,\n                }\n            except (configparser.Error, ValueError) as error:\n                _logger.error(f\"Error reading config for report {section}: {error}\")\n        return reports\n\n    def validate_timeframe(self, timeframe):\n        if timeframe not in TIMEFRAMES:\n            raise ValueError(f\"Timeframe {timeframe} is not supported\")\n        return timeframe\n\n    def validate_view(self, view):\n        if view not in CLASSMAP:\n            raise ValueError(f\"View {view} is not supported\")\n        return view\n\n    def validate_rows(self, rows):\n        rows = int(rows)\n        if rows < 1:\n            raise ValueError(\"Rows must be 1 or higher\")\n        return rows\n"
  },
  {
    "path": "python/nav/web/sortedstats/forms.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for sorted stats\"\"\"\n\nfrom operator import itemgetter\n\nfrom django import forms\n\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    SubmitField,\n    set_flat_form_attributes,\n)\nfrom . import CLASSMAP, TIMEFRAMES\n\n\ndef get_sections_list():\n    \"\"\"Return sections list usable in form choices\"\"\"\n    return sorted([(x[0], x[1].title) for x in CLASSMAP.items()], key=itemgetter(0))\n\n\nclass NumberInput(forms.TextInput):\n    \"\"\"Input widget with type set to number\"\"\"\n\n    input_type = 'number'\n\n\nclass NumberField(forms.IntegerField):\n    \"\"\"Input field with type set to number\"\"\"\n\n    widget = NumberInput\n\n\nclass ViewForm(forms.Form):\n    \"\"\"Form the choosing which view to see on the statistics page\"\"\"\n\n    view = forms.ChoiceField(choices=get_sections_list())\n    choices = [(tf, TIMEFRAMES[tf]['descr']) for tf in TIMEFRAMES]\n    timeframe = forms.ChoiceField(choices=choices, initial=choices[1][0])\n    rows = NumberField(initial=5)\n\n    use_cache = forms.BooleanField(\n        initial=True,\n        help_text=(\n            \"Ticking this box will make it so results \"\n            \"are fetched from a cache if possible. \"\n            \"If the cache is empty, live data is fetched instead.\"\n        ),\n        required=False,\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(ViewForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_method=\"get\",\n            form_class=\"custom\",\n            form_fields=[\n                FlatFieldset(\n                    \"Choose statistic\",\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self[\"view\"]], css_classes=\"medium-5\"\n                                ),\n                                FormColumn(\n                                    fields=[self[\"timeframe\"]], css_classes=\"medium-3\"\n                                ),\n                                FormColumn(\n                                    fields=[self[\"rows\"]], css_classes=\"medium-1\"\n                                ),\n                                FormColumn(\n                                    fields=[\n                                        SubmitField(\n                                            value=\"Show statistics\",\n                                            css_classes=\"postfix\",\n                                            has_empty_label=True,\n                                        )\n                                    ],\n                                    css_classes=\"medium-3\",\n                                ),\n                                FormColumn(fields=[self[\"use_cache\"]]),\n                            ]\n                        )\n                    ],\n                )\n            ],\n        )\n"
  },
  {
    "path": "python/nav/web/sortedstats/statmodules.py",
    "content": "# coding=utf-8\n#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Contains the modules used for statistics generation\"\"\"\n\nimport logging\nfrom operator import itemgetter\n\nfrom urllib.parse import urlencode\nfrom django.urls import reverse\n\nfrom nav.metrics.data import get_metric_average, get_metric_max, get_metric_data\nfrom nav.metrics.lookup import lookup\n\n_logger = logging.getLogger(__name__)\n\n# Useful constants\nBYTES_TO_BIT = 8.0\nTIMETICKS_IN_DAY = 100 * 3600 * 24\n\n\nclass Stat(object):\n    \"\"\"Superclass for statistics generation\"\"\"\n\n    title = \"Statistics\"\n    serieslist = None\n    data_filter = ''\n    graph_filter = None\n\n    def __init__(self, start='-1d', end='now', rows=5):\n        self.start = start\n        self.end = end\n        self.rows = rows\n        self.graph_args = {'width': 1046, 'height': 448, 'template': 'nav'}\n        self.scale = None\n        self.data = None\n        self.graph_url = None\n        self.display_data = None\n\n    def collect(self):\n        \"\"\"Collect data\"\"\"\n        self.data = self.get_sorted_data()\n        if self.data:\n            self.metric_lookups = self.get_metric_lookups()\n            self.graph_url = self.get_graph_url()\n            self.display_data = self.get_display_data()\n\n    def get_sorted_data(self):\n        \"\"\"Returns the sorted version of the data\"\"\"\n        data = self.get_data()\n        return self.sort_by_value(data)\n\n    def get_data(self):\n        \"\"\"Gets the relevant data for this statistics\"\"\"\n        target = self.data_filter.format(serieslist=self.serieslist, rows=self.rows)\n        data = get_metric_average(target, start=self.start, end=self.end)\n        if self.scale:\n            data = self.upscale(data)\n        return data\n\n    def get_metric_name(self, metric):\n        \"\"\"Returns the name used for representing the metric\"\"\"\n        raise NotImplementedError\n\n    def get_metric_lookups(self):\n        \"\"\"Return a mapping of metric -> object\"\"\"\n        return {x: lookup(x) for x in self.get_graph_metrics()}\n\n    def get_graph_url(self):\n        \"\"\"Gets the graph url to display the statistics as a graph\"\"\"\n        metrics = self.get_graph_metrics()\n        if self.scale:\n            targets = [\n                \"alias(scale(%s, %s), '%s')\"\n                % (\n                    self.graph_filter.format(target=x),\n                    \"%.20f\" % self.scale,\n                    self.get_metric_name(x),\n                )\n                for x in metrics\n            ]\n        else:\n            targets = [\n                \"alias(%s, '%s')\"\n                % (self.graph_filter.format(target=x), self.get_metric_name(x))\n                for x in metrics\n            ]\n\n        self.graph_args['target'] = targets\n        self.graph_args['from'] = self.start\n        self.graph_args['until'] = self.end\n        return self.create_graph_url()\n\n    def create_graph_url(self):\n        \"\"\"Create url for getting a graph from Graphite\"\"\"\n        return reverse(\"graphite-render\") + \"?\" + urlencode(self.graph_args, True)\n\n    def get_display_data(self):\n        \"\"\"Gets the human readable version of the raw data\"\"\"\n        display_data = []\n        for key, value in self.data:\n            display_data.append(\n                (\n                    self.get_metric_name(key),\n                    self.humanize(value),\n                    self.metric_lookups[key],\n                )\n            )\n        return display_data\n\n    def get_graph_series(self):\n        \"\"\"Returns the graph series usable for graphites group function\"\"\"\n        return \",\".join(self.get_graph_metrics())\n\n    def get_graph_metrics(self):\n        \"\"\"Returns the metrics we use for graphing\"\"\"\n        return [x[0] for x in self.data]\n\n    def upscale(self, data):\n        \"\"\"Upscale data with scale\"\"\"\n        upscaled = {}\n        for key, value in data.items():\n            upscaled[key] = value * self.scale\n        return upscaled\n\n    @staticmethod\n    def sort_by_value(data):\n        \"\"\"Sort dictionary by value\"\"\"\n        return sorted(data.items(), key=itemgetter(1), reverse=True)\n\n    @staticmethod\n    def humanize(number, precision=1):\n        \"\"\"Create human readable version of a number\"\"\"\n        lookup = (\n            (10**9, 'G'),\n            (10**6, 'M'),\n            (10**3, 'k'),\n            (10**0, ''),\n            (10**-3, 'm'),\n            (10**-6, 'µ'),\n            (10**-9, 'n'),\n        )\n        factor = 1\n        suffix = ''\n        if number != 0:\n            for factor, suffix in lookup:\n                if number >= factor:\n                    break\n        return '%.*f %s' % (precision, number / factor, suffix)\n\n\nclass StatMinFreeAddresses(Stat):\n    \"\"\"Generates statistics for prefixes with high fill levels\"\"\"\n\n    title = \"Prefix utilization\"\n    netsize_to_skip = 16\n\n    def __init__(self, *args, **kwargs):\n        super(StatMinFreeAddresses, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = \"Prefix utilization (size > /28)\"\n        self.graph_args['vtitle'] = \"percent\"\n\n    def get_data(self):\n        targets = self.get_targets()\n        target = \"substr(highestAverage(group(%s), %s),0)\" % (\n            \",\".join(targets),\n            self.rows,\n        )\n        data = get_metric_average(target, start=self.start, end=self.end)\n        return data\n\n    def get_targets(self):\n        \"\"\"Queries for prefixes that has a ip-range > than netsize_to_skip\"\"\"\n        results = get_metric_data(\n            'maximumAbove(nav.prefixes.*.ip_range, %s)' % self.netsize_to_skip,\n            start=self.start,\n            end=self.end,\n        )\n        targets = []\n        for result in results:\n            metric = result['target']\n            targets.append(\n                'asPercent(%s, %s)' % (metric.replace('ip_range', 'ip_count'), metric)\n            )\n        return targets\n\n    def get_graph_url(self):\n        \"\"\"Gets the graph url to display the statistics as a graph\"\"\"\n        metrics = self.get_graph_metrics()\n        targets = []\n        for ip_count in metrics:\n            ip_range = ip_count.replace('ip_count', 'ip_range')\n            targets.append(\n                \"alias(asPercent(%s, %s), '%s')\"\n                % (ip_count, ip_range, self.get_metric_name(ip_range))\n            )\n\n        self.graph_args['target'] = targets\n        self.graph_args['from'] = self.start\n        self.graph_args['until'] = self.end\n        return self.create_graph_url()\n\n    def get_metric_name(self, metric):\n        metric = metric.replace('ip_range', 'ip_count')\n        try:\n            return self.metric_lookups[metric].net_address\n        except AttributeError:\n            return\n\n\nclass StatCpuAverage(Stat):\n    \"\"\"Generates statistics for the CPU view\"\"\"\n\n    title = 'CPU Highest Average'\n    data_filter = 'highestAverage({serieslist}, {rows})'\n    graph_filter = '{target}'\n    serieslist = (\n        'group(nav.devices.*.cpu.*.loadavg5min,nav.devices.*.cpu.cpu.utilization)'\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(StatCpuAverage, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = 'Routers with highest average cpu load'\n        self.graph_args['vtitle'] = 'Percent'\n\n    def get_metric_name(self, metric):\n        return self.metric_lookups[metric]\n\n\nclass StatUptime(Stat):\n    \"\"\"Generates statistics for the Uptime view\"\"\"\n\n    title = \"Highest uptime\"\n    data_filter = 'highestMax({serieslist}, {rows})'\n    graph_filter = '{target}'\n    serieslist = 'nav.devices.*.system.sysuptime'\n\n    def __init__(self, *args, **kwargs):\n        super(StatUptime, self).__init__(*args, **kwargs)\n        self.scale = 1.0 / TIMETICKS_IN_DAY\n        self.graph_args['title'] = 'Network devices with highest uptime'\n        self.graph_args['vtitle'] = 'Days'\n\n    def get_data(self):\n        target = self.data_filter.format(serieslist=self.serieslist, rows=self.rows)\n        data = get_metric_max(target, start=self.start, end=self.end)\n        data = self.upscale(data)\n        return data\n\n    def get_metric_name(self, metric):\n        try:\n            return self.metric_lookups[metric].sysname\n        except AttributeError:\n            # Assume the lookup returned the name directly from the metric\n            return self.metric_lookups[metric]\n\n\n# ------------------------\n#   INTERFACE STATISTICS\n# ------------------------\n\n\nclass StatIf(Stat):\n    \"\"\"Common methods for interface statistics\"\"\"\n\n    def get_metric_name(self, metric):\n        obj = self.metric_lookups[metric]\n        try:\n            return \"%s - %s\" % (obj.netbox.sysname, obj.ifname)\n        except AttributeError:\n            return\n\n\nclass StatIfOctets(StatIf):\n    \"\"\"Generates statistics for the Octets views\"\"\"\n\n    data_filter = (\n        'substr(highestAverage(scaleToSeconds('\n        'nonNegativeDerivative({serieslist}),1), {rows}), 0)'\n    )\n    graph_filter = 'nonNegativeDerivative(scaleToSeconds({target},1))'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfOctets, self).__init__(*args, **kwargs)\n        self.scale = BYTES_TO_BIT\n        self.graph_args['vtitle'] = 'bit/s'\n\n\nclass StatIfInOctets(StatIfOctets):\n    \"\"\"Generates statistics for the Ifinoctets view\"\"\"\n\n    title = 'Most traffic in to interface'\n    serieslist = 'nav.devices.*.ports.*.ifInOctets'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfInOctets, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = 'Interfaces with most average traffic in'\n\n\nclass StatIfOutOctets(StatIfOctets):\n    \"\"\"Generates statistics for the ifoutoctets view\"\"\"\n\n    title = 'Most traffic out of interface'\n    serieslist = 'nav.devices.*.ports.*.ifOutOctets'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfOutOctets, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = 'Interfaces with most average traffic out'\n\n\nclass StatIfErrors(StatIf):\n    \"\"\"Generates statistics for all the error views\"\"\"\n\n    data_filter = (\n        'substr(highestAverage(scaleToSeconds('\n        'nonNegativeDerivative({serieslist}),1),{rows}),0)'\n    )\n    graph_filter = 'scaleToSeconds(nonNegativeDerivative({target}),1)'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfErrors, self).__init__(*args, **kwargs)\n        self.graph_args['vtitle'] = 'Errors/s'\n\n    def get_data(self):\n        target = self.data_filter.format(serieslist=self.serieslist, rows=self.rows)\n        data = get_metric_average(target, start=self.start, end=self.end)\n        return data\n\n\nclass StatIfOutErrors(StatIfErrors):\n    \"\"\"Generates statistics for the ifouterrors view\"\"\"\n\n    title = 'Most errors on traffic out of interface'\n    serieslist = 'nav.devices.*.ports.*.ifOutErrors'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfOutErrors, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = 'Interfaces with most errors on traffic out'\n\n\nclass StatIfInErrors(StatIfErrors):\n    \"\"\"Generates statistics for the ifinerrors view\"\"\"\n\n    title = 'Most errors on traffic in to interface'\n    serieslist = 'nav.devices.*.ports.*.ifInErrors'\n\n    def __init__(self, *args, **kwargs):\n        super(StatIfInErrors, self).__init__(*args, **kwargs)\n        self.graph_args['title'] = 'Interfaces with most errors on traffic in'\n"
  },
  {
    "path": "python/nav/web/sortedstats/urls.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL configuration for sortedstats\"\"\"\n\nfrom django.urls import path\nfrom nav.web.sortedstats import views\n\nurlpatterns = [\n    path('', views.index, name='sortedstats'),\n]\n"
  },
  {
    "path": "python/nav/web/sortedstats/views.py",
    "content": "#\n# Copyright (C) 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Sorted statistics views.\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom zoneinfo import ZoneInfo\n\nfrom django.shortcuts import render\nfrom django.core.cache import caches\nfrom django.conf import settings\nfrom django.core.cache.backends.base import InvalidCacheBackendError\n\nfrom .forms import ViewForm\nfrom . import CLASSMAP, TIMEFRAMES\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.metrics.data import GRAPHITE_TIME_FORMAT\n\n_logger = logging.getLogger(__name__)\n\n\ndef get_cache():\n    return caches['sortedstats']\n\n\ndef cache_is_misconfigured():\n    try:\n        get_cache()\n    except InvalidCacheBackendError:\n        return True\n    else:\n        return False\n\n\ndef index(request):\n    \"\"\"Sorted stats search & result view\"\"\"\n    result = None\n    graphite_unreachable = False\n    from_cache = None\n    start_time = datetime.now()\n\n    try:\n        if 'view' in request.GET:\n            form = ViewForm(request.GET)\n            if form.is_valid():\n                result, from_cache = process_form(form)\n\n        else:\n            form = ViewForm()\n\n    except GraphiteUnreachableError:\n        graphite_unreachable = True\n\n    duration = (datetime.now() - start_time).total_seconds()\n    context = {\n        'title': 'Statistics',\n        'navpath': [('Home', '/'), ('Statistics', False)],\n        'result': result,\n        'form': form,\n        'graphite_unreachable': graphite_unreachable,\n        'from_cache': from_cache,\n        'duration': duration,\n        'cache_misconfigured': cache_is_misconfigured(),\n    }\n\n    return render(request, 'sortedstats/sortedstats.html', context)\n\n\ndef process_form(form):\n    \"\"\"Returns graphite result based on form content\"\"\"\n    result = None\n    from_cache = True\n    view = form.cleaned_data['view']\n    timeframe = form.cleaned_data['timeframe']\n    rows = form.cleaned_data['rows']\n    cache_key = get_cache_key(view, timeframe, rows)\n    if form.cleaned_data['use_cache']:\n        try:\n            cache = get_cache()\n            result = cache.get(cache_key)\n            if result and not result.data:\n                result = None\n        except InvalidCacheBackendError as e:\n            _logger.error(\"Error accessing cache for ranked statistics: %s\", e)\n            result = None\n    if not result:\n        result = collect_result(view, timeframe, rows)\n        from_cache = False\n    return result, from_cache\n\n\ndef get_result(view, start, end, rows):\n    \"\"\"\n    start/end valus must be supported by the graphite render API.\n    They represent what graphite calls from/until.\n    \"\"\"\n    cls = CLASSMAP[view]\n    return cls(start=start, end=end, rows=rows)\n\n\ndef get_cache_key(view, timeframe, rows):\n    return f\"{view}_{timeframe}_{rows}\"\n\n\ndef collect_result(view, timeframe, rows):\n    timeout = TIMEFRAMES[timeframe]['cache_timeout']\n    start, end = get_timestamps(timeframe)\n    cache_key = get_cache_key(view, timeframe, rows)\n    result = get_result(view, start, end, rows)\n    result.collect()\n    try:\n        cache = get_cache()\n        cache.set(cache_key, result, timeout=timeout)\n    except InvalidCacheBackendError as e:\n        _logger.error(\"Error accessing cache for ranked statistics: %s\", e)\n    return result\n\n\ndef get_timestamps(timeframe):\n    delta = TIMEFRAMES[timeframe]['timedelta']\n    end_dt = datetime.now(tz=ZoneInfo(settings.TIME_ZONE))\n    end_timestamp = end_dt.strftime(GRAPHITE_TIME_FORMAT)\n    start_dt = end_dt - delta\n    start_timestamp = start_dt.strftime(GRAPHITE_TIME_FORMAT)\n    return start_timestamp, end_timestamp\n"
  },
  {
    "path": "python/nav/web/static/js/build.js",
    "content": "/**\n * How to use this file - or \"We finally required node as a dependency so we\n * could optimize page loading\".\n *\n * Why optimize? Because it makes the pages load faster. By a lot.\n *\n * The base url in require_config.js must be set to '/static/js/prod' or\n * whereever the browser looks for the js-files. It's totally ok to optimize and\n * then copy.\n * \n * Command to run: r.js -o build.js\n *\n * All files defined in the modules directive below are now available in 'prod'\n * directory. \n *\n * NB: When I tested this, we had a base file called 'main' for all pages, and\n * individual files for every page. This may lead to problems if a library is\n * required by both the main and the individual script. jQuery for instance is a\n * problem. So you need to make sure jQuery is only required once, which means\n * removing all shims and all individual requires for jQuery, and then make sure\n * only main requires it. This may be the case with other libs in 'main' aswell.\n */\n\n({\n    baseUrl: '.',\n    mainConfigFile: 'require_config.js',\n    skipDirOptimize: true,\n    optimizeCss: 'none',\n    dir: 'prod',\n    modules: [\n        { name: 'src/main' },\n        { name: 'src/webfront' },\n        { name: 'src/maintenance' },\n        { name: 'src/status2/status' },\n        { name: 'src/seeddb' },\n        { name: 'src/netmap/netmap' },\n        { name: 'src/networkexplorer' },\n    ]\n});\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/Calendar.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Calendar component.\n *\n * Creates a calendar showing one month, with buttons for navigating\n * one month/year forward and back, and with selectable days.\n *\n * The calendar allows for selection of intervals, as represented by\n * TimeInterval.  This is, however, somewhat limited: The calendar has\n * no finer resolution than days (so for intervals smaller than one\n * day, it is only possible to select which day the interval should\n * lie in), and it provides no UI mechanism for changing the interval\n * size.  It is assumed that when interval selection is desired (which\n * is the case in Geomap), other mechanisms handle these issues (which\n * is the case in Geomap).\n *\n * Uses a HTML table for the days and a set of arbitrary HTML elements\n * for the navigation buttons.  All these elements must already exist\n * in the HTML document, but the table of days should be empty (all\n * its content is generated by the Calendar).\n *\n * Arguments:\n *\n * idPrefix -- prefix of id of HTML elements used by the calendar.\n *\n * changeCallback -- function to be called (with the selected time as\n * argument) when the selection is changed.\n *\n * interval -- initially selected time interval.\n *\n * dateSelectable -- predicate which takes a date (Time object) as\n * argument and determines whether that day should be selectable in\n * the calendar.\n *\n * monthSelectable -- predicate which takes a month (Time object) as\n * argument and determines whether it should be possible to navigate\n * to that month.\n *\n * {date,month}Selectable, if omitted, default to letting everything\n * be selectable.\n */\nfunction Calendar(idPrefix, changeCallback, interval,\n\t\t  dateSelectable, monthSelectable) {\n    this.idPrefix = idPrefix;\n    this.changeCallback = changeCallback;\n    this.interval = interval;\n    this.dateSelectable = dateSelectable || function() { return true; };\n    this.monthSelectable = monthSelectable || function() { return true; };\n\n    this.writeInitialHTML();\n    this.updateHTML();\n}\n\nCalendar.prototype = {\n    idPrefix: null,\n    changeCallback: null,\n    interval: null,\n    dateSelectable: null,\n    monthSelectable: null,\n\n    /*\n     * Size of the calendar (the last row is not always used).\n     */\n    num_rows: 6,\n    num_cols: 7,\n\n    /*\n     * The selection is stored as TimeInterval in this.interval, but\n     * also available (both for reading and writing) as a Time object\n     * through this.time.\n     *\n     * By the getter and setter defined here, the time property\n     * magically reflects the value in the interval property.\n     */\n    get time() { return this.interval.time; },\n    set time(t) {\n\tthis.interval = new TimeInterval(this.interval.size, t);\n    },\n\n    /*\n     * Change the calendar selection.\n     *\n     * The argument is a new selection, either a Time or TimeInterval\n     * object.\n     */\n    select: function(timeOrInterval) {\n\tif (timeOrInterval instanceof Time)\n\t    this.time = timeOrInterval;\n\telse\n\t    this.interval = timeOrInterval;\n\tthis.updateHTML();\n\tthis.changeCallback(this.time);\n    },\n\n    /*\n     * Create the HTML rows and cells for the calendar.\n     */\n    writeInitialHTML: function() {\n\tvar makeCell = encapsulate(this, function(i, j) {\n\t    return format('<td id=\"%s-cell-%d,%d\"></td>', this.idPrefix, i, j);\n\t});\n\tvar makeRow = encapsulate(this, function(i) {\n\t    return format('<tr id=\"%s-row-%d\">%s</tr>',\n\t\t\t  this.idPrefix, i,\n\t\t\t  concat(map(fix(makeCell, i), range(this.num_cols))));\n\t});\n\tvar monthElem = this.getElem('month');\n\tmonthElem.innerHTML = concat(map(makeRow, range(this.num_rows)));\n    },\n    \n    /*\n     * Update the user interface.\n     */\n    updateHTML: function() {\n\tvar cal = this; // useful for inner function which are not\n\t\t\t// called on this object\n\tvar now = new Time();\n\tvar tab = this.makeMonthTable();\n\tvar selectUnit = this.interval.getSize().unit;\n\n\t/*\n\t * Create a function which selects the given time in the\n\t * calendar.\n\t */ \n\tfunction makeSelectFunc(time) {\n\t    return function() { cal.select(time); };\n\t}\n\n\tfunction updateMovementButton(id, timeOffset) {\n\t    var elem = cal.getElem(id);\n\t    var time = cal.time.add(timeOffset);\n\t    var selectable = cal.monthSelectable(time);\n\t    \n\t    elem.onclick = selectable ? makeSelectFunc(time) : function(){};\n\t    elem.className = selectable ? 'selectable' : '';\n\t}\n\n\t/*\n\t * Is t (a Time object) today?\n\t */\n\tfunction todayp(t) {\n\t    return t.year==now.year && t.month==now.month && t.day==now.day;\n\t}\n\n\tfunction updateCell(row, col, rowSelected) {\n\t    var day = tab[row][col];\n\t    var elem = cal.getElem(format('cell-%d,%d', row, col));\n\t    var time = cal.time.relative(\n\t\t{day: day || (row == 0 ? 1 : cal.time.daysInMonth)});\n\t    var selected = (day == cal.time.day);\n\t    var selectable =\n\t\tcal.dateSelectable(time) &&\n\t\t!selected && !rowSelected &&\n\t\tselectUnit != 'month' &&\n\t\tday != null;\n\t    var classes =\n\t\t(todayp(time) ? 'today ' : '') +\n\t\t(selected ? 'selected' :\n\t\t (selectable ? 'selectable' : ''));\n\n\t    elem.innerHTML = day ? format('%d', day) : '';\n\t    elem.onclick = selectable ? makeSelectFunc(time) : function(){};\n\t    elem.className = classes;\n\t}\n\n\tfunction updateRow(row) {\n\t    var elem = cal.getElem('row-'+row);\n\t    var firstDay = firstWith(identity, tab[row], null)\n\t    var time =\n\t\t(firstDay != null ?\n\t\t cal.time.relative({day: firstDay}).weekCenter() :\n\t\t null);\n\t    var selected =\n\t\t(selectUnit == 'month' ||\n\t\t (selectUnit == 'week' &&\n\t\t  time != null && cal.interval.contains(time)));\n\t    var selectable =\n\t\ttime != null && cal.dateSelectable(time) &&\n\t\t(selectUnit == 'week') && !selected;\n\n\t    elem.className = (selected ? 'selected' :\n\t\t\t      (selectable ? 'selectable' : ''));\n\t    for (var i = 0; i < cal.num_cols; i++)\n\t\tupdateCell(row, i, selected);\n\t}\n\n\tthis.getElem().className = 'enabled';\n\n\tmap(updateMovementButton,\n\t    ['prev-year', 'next-year', 'prev-month', 'next-month'],\n\t    [{year: -1},  {year: +1},  {month: -1},  {month: +1}]);\n\n\tthis.getElem('header').innerHTML = this.time.format('%b %Y');\n\n\trange(this.num_rows).forEach(updateRow);\n    },\n\n    /*\n     * Get an element by id (without prefix).\n     */\n    getElem: function(id) {\n\tid = id ? (this.idPrefix+'-'+id) : this.idPrefix;\n\treturn document.getElementById(id);\n    },\n\n    /*\n     * Create a table of the days in the selected month.\n     *\n     * The table is represented as an array of arrays, one for each\n     * week.  The week arrays contain day numbers, with null on the\n     * positions which are outside the month.\n     */\n    makeMonthTable: function() {\n\tvar lastDay = this.time.daysInMonth;\n\tvar firstWeekday = this.time.relative({day: 1}).weekDay;\n\n\tvar cal = [];\n\tvar row, col, day;\n\tfor (row = 0, day = -firstWeekday+1; row < this.num_rows; row++) {\n\t    cal[row] = [];\n\t    for (col = 0; col < this.num_cols; col++, day++) {\n\t\tif (day < 1 || day > lastDay) {\n\t\t    cal[row][col] = null;\n\t\t} else {\n\t\t    cal[row][col] = day;\n\t\t}\n\t    }\n\t}\n\treturn cal;\n    },\n\n    toString: function() {\n\treturn format('<Calendar \"%s\", %s>',\n\t\t      this.idPrefix,\n\t\t      this.time.format('%Y-%m-%d'));\n    }\n\n};\n\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/GeomapPlugin.js",
    "content": "define(['spin', 'plugins/fullscreen'],\nfunction(Spinner, fullscreen) {\n\n    var mapSelector = \"map\",\n        spinner = new Spinner();\n\n    /**\n     * Fetch all rooms and initialize map\n     */\n    function geomap() {\n        var request = fetchRooms();\n        request.done(function(data) {\n            var roomPoints = data.rooms.map(createPoint),\n                roomPositions = new OpenLayers.Geometry.MultiPoint(roomPoints),\n                boundingBox = roomPositions.getBounds(); // Is null if no roompositions\n\n            if (boundingBox === null) {\n                showPositionHint();\n            }\n\n            init(boundingBox);\n        });\n    }\n\n\n    function fetchRooms() {\n        return $.getJSON('/ajax/open/roommapper/rooms/');\n    }\n\n\n    /**\n     * Create an Openlayers point based on a room position\n     */\n    function createPoint(room) {\n        return new OpenLayers.Geometry.Point(getLong(room.position), getLat(room.position));\n    }\n\n    function getLat(position) {\n        return parseFloat(position.split(',')[0]);\n    }\n\n    function getLong(position) {\n        return parseFloat(position.split(',')[1]);\n    }\n\n    function showPositionHint() {\n        $('#position-hint').removeClass('hidden');\n    }\n\n\n    /**\n     * Creates a map, adds the layers and zooms to the given bounds.\n     */\n    function init(boundingBox) {\n        var map = createMap();\n        addLayers(map);\n        zoomToBounds(map, boundingBox);\n        addFullScreenToggler();\n    }\n\n\n    /**\n     * Create the map and apply controls\n     */\n    function createMap() {\n        return new OpenLayers.Map(mapSelector, {\n            controls: [\n                new OpenLayers.Control.Navigation(),\n\t\tnew OpenLayers.Control.PanZoomBar(), //new OpenLayers.Control.NavToolbar(),\n                new OpenLayers.Control.Attribution(),\n\t\tnew OpenLayers.Control.LayerSwitcher()\n            ],\n            displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\n            theme: NAV.cssPath + '/openlayers.css'\n        });\n    }\n\n\n    /**\n     * Add layers to the map, and connect the layers and the time navigation\n     * panel.\n     *\n     * TODO: This is still not fully refactored. Among other things this has a\n     * circular dependency with the netLayer and timeNavigator.\n     */\n    function addLayers(map) {\n        var mapnikLayer = new OpenLayers.Layer.OSM(\n            \"OpenStreetMap\", NAV.osmTileUrl + '/${z}/${x}/${y}.png');\n        mapnikLayer.tileOptions = {crossOriginKeyword: null};\n        map.addLayer(mapnikLayer);\n\n        var netLayer;           // Todo: fix circular dependency\n        var timeNavigator = new TimeNavigator('time-navigation', function () {\n            netLayer.update();\n        });\n\n        netLayer = new NetworkLayer('Networks', 'data', {\n            start: function () {\n                return timeNavigator.interval.beginning();\n            },\n            end: function () {\n                return timeNavigator.interval.end();\n            }\n        }, {\n            eventListeners: {\n                loadstart: function() { spinner.spin(document.getElementById(mapSelector)); },\n                loadend: function() { spinner.stop(); },\n                loadcancel: function() { spinner.stop(); }\n            }\n        });\n        map.addLayer(netLayer);\n\n        try {\n            var permalink = new Permalink('permalink', map, {\n                set time(t) {\n                    timeNavigator.setInterval(new TimeInterval(t));\n                },\n                get time() {\n                    return timeNavigator.interval.toReadableString();\n                }\n            }, [timeNavigator.onChange]);\n        } catch (e) {\n            alert('Error parsing URL query string:\\n' + e);\n        }\n    }\n\n\n    /**\n     * Zoom to the correct bounds based on what we have of information\n     */\n    function zoomToBounds(map, boundingBox) {\n        var parameters = OpenLayers.Util.getParameters();\n        if (parameters.bbox) {\n\t    console.log('got bbox parameters');\n            var requestedBounds = OpenLayers.Bounds.fromArray(parameters.bbox);\n            requestedBounds.transform(map.displayProjection, map.getProjectionObject());\n            map.zoomToExtent(requestedBounds);\n        } else if (parameters.zoom !== null && parameters.zoom !== undefined) {\n            try {\n                if (parameters.lat !== null && parameters.lat !== undefined\n                    && parameters.lon !== null && parameters.lon !== undefined) {\n                    map.setView(\n                        new OpenLayers.View({\n                            center: OpenLayers.Projection.fromLonLat([parameters.lon, parameters.lat]),\n                            extent: map.getView().calculateExtent(map.getSize()),\n                            zoom: parameters.zoom\n                        })\n                    );\n                } else {\n                    map.getView.setZoom(parameters.zoom);\n                }\n                map.getView.setZoom(parameters.zoom);\n            } catch (e) {}\n        } else if (boundingBox) {\n            boundingBox.transform(map.displayProjection, map.getProjectionObject());\n            map.zoomToExtent(boundingBox);\n        } else {\n            map.zoomToMaxExtent();\n        }\n    }\n\n\n    /**\n     * Add a fullscreen toggler based on the official fullscreen API\n     */\n    function addFullScreenToggler() {\n        if (fullscreen.isFullscreenSupported()) {\n            fullscreen.createFullscreenToggler(\n                document.getElementById(mapSelector), true);\n        }\n    }\n\n    return geomap;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/MyHTTPProtocol.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Small extension of OpenLayers.Protocol.HTTP providing \"dynamic\n * parameters\".  These are like the params property of O.P.HTTP except\n * that they are not fixed at the time the Protocol object is\n * constructed.  Instead, they are specified by functions which are\n * called each time the parameters are needed.\n *\n * Dynamic parameters are specified by setting dynamicParams in the\n * options argument to the constructor.\n */\nMyHTTPProtocol = OpenLayers.Class(OpenLayers.Protocol.HTTP, {\n\n    /*\n     * Dynamic parameters, dictionary mapping parameter names to\n     * functions.  (The functions should take no arguments).\n     */\n    dynamicParams: null,\n\n    /*\n     * Overrides the read function of OpenLayers.Protocol.HTTP.\n     */\n    read: function(options) {\n\tvar dynamicParams = this.evaluateDynamicParams();\n\tvar params = extend(this.params,\n\t\t\t    extend(options.params, dynamicParams));\n\tvar extOptions = extend(options, {params: params});\n\treturn OpenLayers.Protocol.HTTP.prototype.read.apply(this,\n\t\t\t\t\t\t\t     [extOptions]);\n    },\n\n    /*\n     * Evaluate the dynamic parameters.\n     *\n     * Returns a dictionary with parameter names mapped to parameter\n     * values (results of calling the functions in dynamicParams).\n     */\n    evaluateDynamicParams: function() {\n\tvar params = {};\n\tfor (var key in this.dynamicParams)\n\t    params[key] = this.dynamicParams[key]();\n\treturn params;\n    },\n    \n    CLASS_NAME: \"MyHTTPProtocol\"\n});    \n"
  },
  {
    "path": "python/nav/web/static/js/geomap/NetworkLayer.js",
    "content": "/*\n * Copyright (C) 2009, 2010, 2015 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * NetworkLayer.js: OpenLayers layer which shows network information.\n *\n * The information is downloaded from a URL (parametrized by the\n * location, zoom level and size of the map) and reloaded when the map\n * is zoomed or moved (unless the movement is small).\n *\n * The downloaded information is expected to be in GeoJSON format,\n * with additional properties for size/color of features and text to\n * show in popup boxes when clicking on them.\n */\n\n\nDelayedBBOX = OpenLayers.Class(OpenLayers.Strategy.BBOX, {\n    /**\n     * A BBOX strategy that delays the update until a certain time has passed.\n     * This is done to avoid fetching data for each zoom and pan.\n     */\n\n    update: function (options) {\n        var self = this,\n            timeout = 500;  // Time in milliseconds to wait before requesting update\n\n        if (this.timer) {\n            clearTimeout(this.timer);\n        }\n\n        this.timer = setTimeout(function () {\n            OpenLayers.Strategy.BBOX.prototype.update.call(self, options);\n        }, timeout);\n\n    }\n});\n\n\nNetworkLayer = OpenLayers.Class(OpenLayers.Layer.Vector, {\n\n    /*\n     * Constructor.\n     *\n     * Arguments:\n     *\n     * name -- name of the layer\n     *\n     * url -- URL for retrieving network data\n     *\n     * timeInterval -- object containing two functions start and end,\n     * which should return the boundaries of the current time interval\n     *\n     * options -- arbitrary properties to set on the object\n     */\n    initialize: function(name, url, timeInterval, options) {\n\n        // Default style for points and lines:\n        var style = new OpenLayers.StyleMap({\n            pointRadius: 15,\n            strokeWidth: 10,\n            strokeOpacity: 0.9,\n            strokeLinecap: 'butt',\n            fillOpacity: 0.7,\n            fillColor: 'black',\n            strokeColor: 'red',\n            graphicZIndex: 1\n        });\n\n        // Add rules for overriding style based on properties of the\n        // objects:\n        style.addUniqueValueRules('default', 'type', {\n            node: {\n                fillColor: '${color}',\n                strokeColor: 'black',\n                strokeWidth: 3,\n                pointRadius: '${size}',\n                graphicZIndex: 2\n            },\n            edge: {\n                strokeColor: '${color}',\n                strokeWidth: '${size}',\n                graphicZIndex: 1,\n                strokeOpacity: 0.7\n            }\n        });\n\n        // From a function of no arguments returning a Time object,\n        // create a function which returns the same time formatted in\n        // RRD syntax (used for creating parameters below):\n        function formattedTime(timeFunc) {\n            return function () {\n                return timeFunc().format('%H:%M_%Y%m%d');\n            };\n        }\n\n        // A \"strategy\" takes care of automatically downloading data.\n        // The BBOX strategy reacts to moving and zooming.\n        this.bboxStrategy = new DelayedBBOX({resFactor: 1.1});\n\n        // Reference to this for use in functions below which are not\n        // called on this object:\n        var thisObj = this;\n\n        // Checkboxes that toggles map state\n        // edgeToggler: toggles whether we add edges between nodes\n        // dataToggler: toggles whether we fetch cpu and interface load\n        var edgeToggler = document.getElementById('edge-toggler'),\n            edgeStorageKey = 'nav.geomap.edge-toggler',\n            dataToggler = document.getElementById('data-toggler'),\n            dataStorageKey = 'nav.geomap.data-toggler';\n\n        // Update default values from localStorage\n        var edgeItem = localStorage.getItem(edgeStorageKey),\n            dataItem = localStorage.getItem(dataStorageKey);\n        edgeToggler.checked = !edgeItem || edgeItem === 'true';\n        dataToggler.checked = !dataItem || dataItem === 'true';\n\n        // Trigger update of map when we toggle the checkboxes\n        edgeToggler.onclick = function() {\n            localStorage.setItem(edgeStorageKey, edgeToggler.checked);\n            thisObj.update();\n        };\n        dataToggler.onclick = function() {\n            localStorage.setItem(dataStorageKey, dataToggler.checked);\n            thisObj.update();\n        };\n\n        // Add the strategy from above and a \"protocol\" (which\n        // determines how to download data), as well as the style map\n        // we created, to the options we pass to the superclass\n        // constructor:\n        options = extend({\n            strategies: [this.bboxStrategy],\n            protocol: new MyHTTPProtocol({\n                url: url,\n                params: {\n                    format: 'geojson',\n                    limit: 30,\n                },\n                dynamicParams: {\n                    viewportWidth: function () {\n                        return thisObj.map.getSize().w;\n                    },\n                    viewportHeight: function () {\n                        return thisObj.map.getSize().h;\n                    },\n                    create_edges: function() {\n                        return edgeToggler.checked;\n                    },\n                    fetch_data: function() {\n                        return dataToggler.checked;\n                    },\n                    timeStart: formattedTime(timeInterval.start),\n                    timeEnd: formattedTime(timeInterval.end)\n                },\n                format: new OpenLayers.Format.GeoJSON()\n            }),\n            styleMap: style,\n            rendererOptions: {zIndexing: true},\n        }, options);\n\n        OpenLayers.Layer.Vector.prototype.initialize.apply(this, [name, options]);\n\n        this.popupControl = new PopupControl(this);\n    },\n\n    /*\n     * Reload the network data.\n     */\n    update: function () {\n        this.bboxStrategy.triggerRead();\n    },\n\n    /*\n     * Callback function for map movement.\n     */\n    onMapMove: function () {\n        this.redraw();\n    },\n\n    /*\n     * Set the map this layer belongs to.\n     */\n    setMap: function (map) {\n        if (this.map)\n            this.map.removeControl(this.popupControl);\n        OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);\n        map.events.register('move', this, this.onMapMove);\n        map.addControl(this.popupControl);\n        this.popupControl.activate();\n    },\n\n    CLASS_NAME: \"NetworkLayer\"\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/Permalink.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Permalink.js: Maintains a link such that it always points to a page\n * with the current configuration.\n *\n * Uses OpenLayers.Control.Permalink for permalinking the\n * position/zoom and visible layers in the map, and allows the user to\n * add arbitrary extra parameters.  Takes care of both setting values\n * from the query string and creating a link containing the current\n * values.\n *\n * The parameters argument to the constructor specifies how the extra\n * parameters are read and written.  To make the link get updated when\n * the values change, the user of this class may either call the\n * update function on each change, or specify the listenHooks argument\n * to the constructor.\n *\n * Unlike OpenLayers.Control.Permalink, Permalink objects show the\n * link with a HTML element outside the map.\n */\n\n/*\n * Constructor.\n *\n * Arguments:\n *\n * htmlId -- id of HTML element (should be an A element) for the link.\n * The HREF attribute of this element is controlled by the Permalink\n * object, it is otherwise left as it is.\n *\n * mapObj -- the map object (instance of OpenLayers.Map)\n *\n * parameters -- additional parameters to use in the link (parameters\n * encoding map position/zoom and what layers are visible are\n * automatically included).  The property names of this object are\n * used as parameter names and the corresponding values as parameter\n * values.  If any of these names are specified in the query string of\n * the URL of the page being shown, the values from the query string\n * are written into the parameters object.  All values in the\n * parameters object are read each time the permalink is\n * reconstructed.  (Tip: specifying the properties of the parameters\n * object with getters and setters may be very useful).\n *\n * listenHooks -- array of hooks (see util.js) which should cause the\n * link to be updated.  The Permalink object will add a function to\n * each of these hooks.\n */\nfunction Permalink(htmlId, mapObj, parameters, listenHooks) {\n    this.htmlId = htmlId;\n    this.map = mapObj;\n    this.permalinkControl = new OpenLayers.Control.Permalink(\n\t{draw: function(){}});\n    mapObj.addControl(this.permalinkControl);\n    this.parameters = parameters;\n\n    var queryDict = OpenLayers.Util.getParameters();\n    for (var i in Object.keys(parameters)) {\n        if (i in queryDict) {\n            parameters[i] = queryDict[i];\n        }\n    }\n\n    if (listenHooks)\n\tlistenHooks.forEach(fix(addHook, encapsulate(this, this.update), 1));\n    mapObj.events.register('moveend', this, this.update);\n\n    this.update();\n}\n\nPermalink.prototype = {\n    htmlId: null,\n    map: null,\n    permalinkControl: null,\n\n    getURL: function() {\n\treturn document.location.pathname + '?' + this.getQueryString();\n    },\n\n    getQueryString: function() {\n\treturn OpenLayers.Util.getParameterString(this.getParameters());\n    },\n\n    getParameters: function() {\n\treturn extend(this.parameters, this.permalinkControl.createParams());\n    },\n\n    update: function() {\n\tvar elem = document.getElementById(this.htmlId);\n\telem.setAttribute('href', this.getURL());\n    },\n\n    toString: function() {\n\treturn format('<Permalink \"%s\">', this.htmlId);\n    }\n\n};\n\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/PopupControl.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * OpenLayers control for opening popups when clicking on features.\n *\n * In order to get a popup, a feature f must have a f.data.popup with\n * the following properties:\n *\n *  id -- identifier of the popup; must be unique among the features\n *  content -- HTML content for the popup\n *\n * A popup is always shown at the point where the mouse was clicked.\n * If the popup for a feature is already open and the feature is\n * clicked again, the popup is closed and then reopened at the\n * position of the second click.\n */\nPopupControl = OpenLayers.Class(OpenLayers.Control, {\n\n    /*\n     * The layer this control belongs to.\n     */ \n    layer: null,\n\n    /*\n     * Dictionary of generated popups indexed by id.\n     */\n    popups: null,\n\n    /*\n     * The position of the last mouse click (used for positioning\n     * popups).\n     */\n    mousePos: {x:0,y:0},\n\n    initialize: function(layer, options) {\n\tOpenLayers.Control.prototype.initialize.apply(this, [options]);\n\tthis.layer = layer;\n\tthis.popups = {};\n\n\tvar callbacks = {\n        'click': this.clickFeature\n\t};\n\n\tthis.handler = new OpenLayers.Handler.Feature(this, this.layer, callbacks);\n    },\n\n    setMap: function(map) {\n\tOpenLayers.Control.prototype.setMap.apply(this, arguments);\n\tthis.map.events.register('mousemove', this, this.mouseMoved);\n    },\n\n    /*\n     * Callback function for mouse movement.\n     */\n    mouseMoved: function(event) {\n\tthis.mousePos = this.map.events.getMousePosition(event);\n    },\n    \n    /*\n     * Callback function for 'mouse click on a feature' events.\n     */\n    clickFeature: function(feature) {\n\tthis.showPopup(feature.data.popup);\n    },\n\n    /*\n     * Get a previously created popup object for some popup data.\n     */\n    getPopup: function(popupData) {\n\tif (!popupData)\n\t    return null;\n\treturn this.popups[popupData.id];\n    },\n\n    /*\n     * Create a new popup object for the given popup data.\n     */\n    makePopup: function(popupData) {\n\tvar id = popupData.id;\n\t// set (0,0) as position now; will set correct position when\n\t// popup is shown:\n\tvar pos = new OpenLayers.LonLat(0, 0);\n\tvar size = new OpenLayers.Size(popupData.size[0], popupData.size[1]);\n\tvar content = popupData.content;\n\tvar closable = popupData.closable;\n\tvar anchor = {'size': new OpenLayers.Size(0,0),\n\t\t      'offset': new OpenLayers.Pixel(0,0)};\n\n\tvar popupclass = OpenLayers.Popup.AnchoredBubble;\n\tvar popup = new popupclass(id, pos, size, content, anchor, closable);\n\t//popup.maxSize = size;\n\tpopup.autoSize = true;\n\tthis.popups[id] = popup;\n\treturn popup;\n    },\n\n    /*\n     * Show a popup.\n     */\n    showPopup: function(popupData) {\n\tif (!popupData) return;\n\tvar existingPopup = this.getPopup(popupData);\n\tif (existingPopup)\n\t    this.map.removePopup(existingPopup);\n\tvar newPopup = this.makePopup(popupData);\n\tnewPopup.lonlat = this.map.getLonLatFromPixel(this.mousePos);\n\tthis.map.addPopup(newPopup);\n\tnewPopup.show();\n    },\n\n    /*\n     * Hide a popup.\n     */\n    hidePopup: function(popup) {\n\tif (popup) popup.hide();\n    },\n\n    CLASS_NAME: \"PopupControl\"\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/Time.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Time.js: Provides the Time type, used for representation of times\n * and time offsets.\n */\n\n\nconst TIME_UNITS = ['year', 'month', 'week', 'day', 'hour', 'minute'];\n\n/*\n * Time: Representation of a time or time offset.\n *\n * This duplicates some of the functionality of the builtin Date type,\n * but adds certain things we need here.\n *\n * The major difference between Date and Time is that Time may\n * represent either an absolute point in time (such as 2009-04-01\n * 13:37) or a time offset/duration (such as three years, one month\n * and forty-two minutes). Which of these a given Time object\n * represents is not indicated in the object itself, but certain\n * operations make sense only for one of the two (it is assumed that\n * the user of Time objects is able to avoid the meaningless\n * combinations). The only nonobvious case of this is the add method,\n * which must be called on an absolute time and with an offset as\n * argument. Properties such as week (which is the week number within\n * the year), weekDay and monthName obviously do not make sense for\n * time offsets.\n *\n * Some minor differences from Date: there is a method to get the week\n * number, months are numbered starting from 1, weeks start on\n * Mondays.\n *\n * Arguments to the constructor:\n *\n * obj -- an object whose properties are copied into this object. In\n *        addition to the Time properties year, month, day, hour,\n *        minute; week is understood as shorthand for seven days.\n *\n * absolute -- boolean telling whether the Time object should\n *             represent an absolute time. The only effect of setting\n *             this is that the month and day properties are set to 1\n *             instead of 0 if not specified otherwise.\n *\n * If obj is null or omitted, a Time object representing the current\n * time is created.\n */\nfunction Time(obj, absolute) {\n    if (obj) {\n\tif (typeof obj == 'string') {\n\t    this.read(obj);\n\t} else {\n\t    if (absolute) {\n\t\tthis.month = 1;\n\t\tthis.day = 1;\n\t    }\n\t    this.copyPropertiesFrom(obj);\n\t}\n    } else {\n\tthis.year = new Date().getFullYear();\n\tthis.month = new Date().getMonth()+1;\n\tthis.day = new Date().getDate();\n\tthis.hour = new Date().getHours();\n\tthis.minute = new Date().getMinutes();\n    }\n}\n\nTime.prototype = {\n    year: 0,\n    month: 0,\n    day: 0,\n    hour: 0,\n    minute: 0,\n\n    get weekDay() {\n\tvar d = new Date(this.year, this.month-1, this.day).getDay();\n\treturn (d + 6) % 7;\n    },\n\n    get weekDayName() {\n\treturn ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',\n\t\t'Saturday', 'Sunday'][this.weekDay];\n    },\n\n    get shortWeekDayName() {\n\treturn ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'][this.weekDay];\n    },\n\n    /*\n     * ISO 8601 week number (week 1 is the week containing the first\n     * Thursday of a year).\n     */\n    get week() {\n\tvar t = this.weekCenter();\n\tvar startYear = t.year;\n\tvar num = 0;\n\twhile (t.year == startYear) {\n\t    t = t.add({week: -1});\n\t    num++;\n\t}\n\treturn num;\n    },\n\n    get weekYear() {\n\treturn this.weekCenter().year;\n    },\n\n    get monthName() {\n\treturn ['January', 'February', 'March', 'April', 'May', 'June',\n\t\t'July', 'August', 'September', 'October',\n\t\t'November', 'December'][this.month-1];\n    },\n\n    get shortMonthName() {\n\treturn ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n\t\t'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][this.month-1];\n    },\n\n    /*\n     * The number of days in the month of this object.\n     */\n    get daysInMonth() {\n\tif (this.month == 2) {\n\t    if (this.leapYear)\n\t\treturn 29;\n\t    else\n\t\treturn 28;\n\t} else if ((this.month <= 7 && this.month % 2 == 1) ||\n\t\t   (this.month >= 8 && this.month % 2 == 0)) {\n\t    return 31;\n\t} else {\n\t    return 30;\n\t}\n    },\n\n    /*\n     * true if the year of this object is a leap year, false\n     * otherwise.\n     */\n    get leapYear() {\n\treturn ((this.year % 400 == 0) ||\n\t\t((this.year % 4 == 0) && (this.year % 100 != 0)));\n    },\n\n    /*\n     * Returns a Time object representing the Thursday in the same\n     * week as this object.\n     */\n    weekCenter: function() {\n\treturn this.add({day: 3-this.weekDay});\n    },\n\n    compare: function(t) {\n\tfor (var i = 0; i < TIME_UNITS.length; i++) {\n\t    var unit = TIME_UNITS[i];\n\t    if (unit == 'week') continue;\n\t    if (this[unit] < t[unit])\n\t\treturn -1;\n\t    if (this[unit] > t[unit])\n\t\treturn 1;\n\t}\n\treturn 0;\n    },\n\n    /*\n     * Add a time offset to this time, returning the sum (this object\n     * is not modified).\n     *\n     * offset should be either a Time object or an appropriate object\n     * for passing to the Time constructor.\n     *\n     * It is assumed that the object add is called on represents an\n     * absolute time, while the argument represents a time offset.\n     */\n    add: function(offset) {\n\n\t// adjust: Helper function (probably easier to understand by\n\t// looking at calls below than at this explanation). Adjust\n\t// (by destructively modifying) obj such that its small\n\t// property is in the interval [minval,minval+size] by\n\t// overflowing anything beyond this into the large property,\n\t// assuming that there are size small's for each large.\n\tfunction adjust(obj, large, small, size, minval) {\n\t    if (obj[small] < minval) {\n\t\tobj[large] -= Math.ceil((minval-obj[small]) / size);\n\t\tobj[small] = size + minval - (minval-obj[small]) % size;\n\t    } else if (obj[small] >= size + minval) {\n\t\tobj[large] += Math.floor((minval+obj[small]) / size);\n\t\tobj[small] = (minval+obj[small]) % size - minval;\n\t    }\n\t}\n\n\tif (!(offset instanceof Time))\n\t    offset = new Time(offset);\n\n\tvar sum = new Time({year: this.year + offset.year,\n\t\t\t    month: this.month + offset.month,\n\t\t\t    day: this.day,\n\t\t\t    hour: this.hour + offset.hour,\n\t\t\t    minute: this.minute + offset.minute});\n\tadjust(sum, 'year', 'month', 12, 1);\n\tif (sum.day > sum.daysInMonth)\n\t    sum.day = sum.daysInMonth;\n\tsum.day += offset.day;\n\tadjust(sum, 'hour', 'minute', 60, 0);\n\tadjust(sum, 'day', 'hour', 24, 0);\n\twhile (sum.day < 1) {\n\t    sum.month--;\n\t    adjust(sum, 'year', 'month', 12, 1);\n\t    sum.day += sum.daysInMonth;\n\t}\n\twhile (sum.day > sum.daysInMonth) {\n\t    sum.day -= sum.daysInMonth;\n\t    sum.month++;\n\t    adjust(sum, 'year', 'month', 12, 1);\n\t}\n\n\treturn sum;\n    },\n\n    relative: function(t) {\n\tvar newTime = new Time(this);\n\tnewTime.copyPropertiesFrom(t);\n\treturn newTime;\n    },\n\n    copyPropertiesFrom: function(t) {\n\tfor (var i in t)\n\t    if (member(i, ['year', 'month', 'day', 'hour', 'minute']))\n\t\tthis[i] = t[i];\n\tif (t.week && !(t instanceof Time))\n\t    this.day += t.week*7;\n    },\n\n    /*\n     * Returns a Date object representing the same time as this.\n     */\n    toDate: function() {\n\treturn new Date(this.year, this.month-1, this.day,\n\t\t\tthis.hour, this.minute);\n    },\n\n    /*\n     * Format this date according to a format string, in which any\n     * two-character sequence starting with '%' is magic. The format\n     * characters that may be used are a subset of those understood by\n     * date(1).\n     */\n    format: function(fstr) {\n\n\t// fcharDefs: Table of format characters, mapping each format\n\t// character to a list containing the name of the property to\n\t// look up for replacing that format character, and a format\n\t// string for formatting the value:\n\tvar fcharDefs = {\n\t    'A': ['weekDayName', '%s'],\n\t    'a': ['shortWeekDayName', '%s'],\n\t    'B': ['monthName', '%s'],\n\t    'b': ['shortMonthName', '%s'],\n\t    'd': ['day', '%02d'],\n\t    'G': ['weekYear', '%04d'],\n\t    'H': ['hour', '%02d'],\n\t    'm': ['month', '%02d'],\n\t    'M': ['minute', '%02d'],\n\t    'V': ['week', '%02d'],\n\t    'Y': ['year', '%04d']\n\t};\n\n\t// expand: Helper function which returns the replacement\n\t// string for a format sequence where the format character is\n\t// fchar.\n\tvar expand = encapsulate(this, function(fchar) {\n\t    if (fchar == '%')\n\t\treturn '%';\n\t    var def = fcharDefs[fchar];\n\t    if (def)\n\t\treturn format(def[1], this[def[0]]);\n\t    return format('[unknown format character \\'%s\\']', fchar);\n\t});\n\t\n\treturn regexpReplace(fstr, /%./, compose(expand, second));\n    },\n\n    /*\n     * Alternative implementation of format, using the toLocaleFormat\n     * method of the builtin Date type.\n     *\n     * This has the advantage that more format characters are\n     * recognized, but the following disadvantages:\n     *\n     * -- Date.toLocaleFormat is non-standard (see\n     *    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date/toLocaleFormat)\n     *\n     * -- Date.toLocaleFormat seems to mess up UTF-8 contents of the\n     *    format string, at least in my Firefox.\n     */\n    format_: function(fstr) {\n\treturn this.toDate().toLocaleFormat(fstr);\n    },\n\n    toReadableString: function() {\n\treturn this.format('%Y%m%d%H%M');\n    },\n\n    read: function(str) {\n\tm = /(\\d\\d\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)/.exec(str);\n\tif (!m)\n\t    throw new Error(format('Time.read -- not a valid time string: \"%s\"',\n\t\t\t\t   str));\n\tthis.year = Number(m[1]);\n\tthis.month = Number(m[2]);\n\tthis.day = Number(m[3]);\n\tthis.hour = Number(m[4]);\n\tthis.minute = Number(m[5]);\n    },\n\n    toString: function() {\n\treturn this.format('%Y-%m-%d %H:%M');\n    }\n};\n\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/TimeInterval.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * TimeInterval.js: Provides the TimeInterval type, which represents\n * time interval in certain fixed sizes and has methods for navigating\n * between such intervals.\n */\n\n\n/*\n * The sizes of the intervals we operate with. Each size is specified\n * as a certain number (n) of a certain time unit.\n *\n * Two format strings are supplied for each size: format specifies how\n * an interval should be displayed by itself, while shortFormat is\n * intended for displaying several intervals in the context of one of\n * a larger size (in practice: in the drop-down menu used for\n * selecting a smaller interval).\n *\n * If format is a list of two strings, they are used for formatting\n * the start and end time, respectively, and the results are\n * concatenated together.\n */\nconst TI_SIZES = [\n    {n: 1, unit: 'year', format: '%Y'},\n    {n: 1, unit: 'month', format: '%Y-%m', shortFormat: '%m'},\n    {n: 1, unit: 'week', format: '%Y, week %V', shortFormat: '%V'},\n    {n: 1, unit: 'day', format: '%Y-%m-%d', shortFormat: '%m-%d: %a'},\n    {n: 1, unit: 'hour', format: ['%Y-%m-%d %H:00','–%H:00'], shortFormat: '%H'},\n    {n: 10, unit: 'minute', format: ['%Y-%m-%d %H:%M','–%H:%M'], shortFormat: '%M'}\n];\n\n/*\n * Symbolic names for indices into TI_SIZES.\n */\nconst TI_YEAR = 0;\nconst TI_MONTH = 1;\nconst TI_WEEK = 2;\nconst TI_DAY = 3;\nconst TI_HOUR = 4;\nconst TI_10MIN = 5;\nconst TI_5MIN = 5;\n\n/*\n * Gives a nice, displayable name for an interval size (an element of\n * TI_SIZES). If omitNIfOne is true, the number part of the size is\n * omitted if it is 1.\n *\n * Examples:\n *  sizeName(TI_SIZES[TI_YEAR])        => '1 year'\n *  sizeName(TI_SIZES[TI_YEAR], true)  => 'year'\n *  sizeName(TI_SIZES[TI_5MIN])        => '5 minutes'\n *  sizeName(TI_SIZES[TI_5MIN], true)  => '5 minutes'\n */\nfunction sizeName(size, omitNIfOne) {\n    if (omitNIfOne && size.n == 1)\n\treturn size.unit;\n    return format('%d %s%s', size.n, size.unit, size.n==1?'':'s');\n}\n\n/*\n * Representation of a time interval of one of the fixed sizes\n * specified in TI_SIZES, with methods for navigating to related\n * intervals such as the next or previous of the same size, or one of\n * smaller or larger size around the same time.\n *\n * Constructor arguments:\n *\n * size -- interval size, index into TI_SIZES\n *\n * time -- Time object (or object suitable for passing to the Time\n *         constructor) representing some time inside the interval.\n *         This does not need to be the start time; e.g, the following\n *         create essentially equivalent objects:\n * \n *         new TimeInterval(TI_MONTH, {year:2009, month:4, day:15})\n *         new TimeInterval(TI_MONTH, {year:2009, month:4, day:1, hour:12})\n *\n *         If omitted, time defaults to one interval size back in time\n *         from the current time, giving the last finished interval of\n *         the given size.\n */\nfunction TimeInterval(size, time) {\n    if (typeof size == 'string') {\n\tthis.read(size);\n\treturn;\n    }\n\n    this.size = size;\n    if (time) {\n\tthis.time = new Time(time, true);\n    } else {\n\t// Find the last selectable interval.  By the rules in\n\t// TimeInterval.selectable, it must contain an interval of the\n\t// smallest size which was finished at least one interval size\n\t// ago.\n\tvar smallestSize = TI_SIZES[TI_SIZES.length-1];\n\tthis.time = new Time().add(makeObject(smallestSize.unit,\n\t\t\t\t\t      -2*smallestSize.n));\n    }\n    if (size == TI_WEEK) {\n\tthis.time = this.time.weekCenter();\n    }\n    if (this.sizeN() != 1) {\n\tthis.time[this.sizeUnit()] -=\n\t    this.time[this.sizeUnit()] % this.sizeN();\n    }\n}\n\nTimeInterval.prototype = {\n    /*\n     * Returns interval size as integer, in multiples of this.sizeUnit().\n     */\n    sizeN: function() {\n\treturn TI_SIZES[this.size].n;\n    },\n\n    /*\n     * Returns the unit of the time interval.\n     *\n     * The value is one of TIME_UNITS from Time.js.\n     */\n    sizeUnit: function() {\n\treturn TI_SIZES[this.size].unit;\n    },\n\n    /*\n     * Returns the interval size (object with properties n, unit).\n     */\n    getSize: function() {\n\treturn TI_SIZES[this.size];\n    },\n\n    /*\n     * Returns the size which is one step larger than the size of this\n     * interval.\n     */\n    largerSize: function() {\n\treturn TI_SIZES[this.size-1];\n    },\n\n    /*\n     * Returns the size which is one step larger than the size of this\n     * interval.\n     */\n    smallerSize: function() {\n\treturn TI_SIZES[this.size+1];\n    },\n\n    /*\n     * Returns a Time object representing the beginning of this\n     * interval.\n     */\n    beginning: function() {\n\tvar t = new Time({}, true);\n\tfor (var i = 0; i < TIME_UNITS.length; i++) {\n\t    var unit = TIME_UNITS[i];\n\t    if (unit == 'week') {\n\t\tt.day = this.time.day;\n\t    } else {\n\t\tt[unit] = this.time[unit];\n\t    }\n\t    if (unit == this.sizeUnit())\n\t\tbreak;\n\t}\n\tif (this.sizeUnit() == 'week') {\n\t    t = t.add({day: -3});\n\t}\n\treturn t;\n    },\n\n    /*\n     * Returns a Time object representing the end of this interval.\n     */\n    end: function() {\n\treturn this.next().beginning();\n    },\n\n    /*\n     * Predicate telling whether all of this interval is before the\n     * current time.\n     */\n    hasBeen: function() {\n\treturn this.end().compare(new Time()) <= 0;\n    },\n\n    /*\n     * Predicate telling whether the beginning of this interval is\n     * before the current time.\n     */\n    hasStarted: function() {\n\treturn this.beginning().compare(new Time()) <= 0;\n    },\n\n    /*\n     * Predicate telling whether this interval should be selectable.\n     *\n     * The rules for selectability are (these are somewhat arbitrary\n     * and ad-hoc):\n     *\n     * * An interval of the smallest size is selectable iff it ended\n     *   at least one interval size ago.\n     *\n     * * An interval of a larger size is selectable iff it contains at\n     *   least one selectable interval.\n     */\n    selectable: function() {\n\tif (this.size == TI_SIZES.length-1)\n\t    return this.next().hasBeen();\n\treturn this.next().hasBeen() || this.downChoices().length != 0;\n    },\n\n    /*\n     * Returns a new interval of the same size as this but with a\n     * different time.\n     */\n    gotoTime: function(time) {\n\treturn new TimeInterval(this.size, time);\n    },\n\n    /*\n     * Returns a new interval of the same size as this which is offset\n     * num multiples of size relative to this.\n     *\n     * size may be either an object with properties (units, n) or an\n     * index into TI_SIZES.\n     */\n    add: function(size, num) {\n\tif (typeof size == 'number')\n\t    size = TI_SIZES[size];\n\treturn this.gotoTime(this.time.add(makeObject(size.unit,\n\t\t\t\t\t\t      size.n*num)));\n    },\n\n    /*\n     * Returns the next interval of the same size as this.\n     */\n    next: function() {\n\treturn this.add(this.size, 1);\n    },\n\n    /*\n     * Predicate telling whether it should be possible to select the\n     * interval returned by this.next().\n     */\n    nextPossible: function() {\n\treturn this.next().selectable();\n    },\n\n    /*\n     * Returns the interval of the same size as this obtained by doing\n     * a 'jump' forwards in time, i.e. adding the next larger interval\n     * size.\n     */\n    nextJump: function() {\n\treturn this.add(this.size-1, 1);\n    },\n\n    /*\n     * Predicate telling whether it should be possible to select the\n     * interval returned by this.nextJump().\n     */\n    nextJumpPossible: function() {\n\treturn this.nextJump().selectable();\n    },\n\n    /*\n     * Returns the next interval of the same size as this.\n     */\n    prev: function() {\n\treturn this.add(this.size, -1);\n    },\n\n    /*\n     * Returns the interval of the same size as this obtained by doing\n     * a 'jump' forwards in time, i.e. adding the next larger interval\n     * size.\n     */\n    prevJump: function() {\n\treturn this.add(this.size-1, -1);\n    },\n\n    /*\n     * Returns the interval of one step larger size at the same time\n     * as this.\n     */\n    up: function() {\n\tif (this.size == 0)\n\t    return null;\n\treturn new TimeInterval(this.size-1, this.time);\n    },\n\n    /*\n     * Predicate telling whether it is possible to move up from this.\n     */\n    upPossible: function() {\n\treturn this.size>1;\n    },\n\n    /*\n     * Returns list of possible intervals for moving down in size from\n     * this.\n     */\n    downChoices: function() {\n\tif (this.size == TI_SIZES.length-1)\n\t    return null;\n\tvar start = this.beginning();\n\tvar choices = [];\n\tvar size = TI_SIZES[this.size+1];\n\tfor (var i = 0; i < 100*size.n; i += size.n) {\n\t    var choiceOffset = makeObject(size.unit, i);\n\t    var choiceTime = start.add(choiceOffset);\n\t    if (choiceTime[this.sizeUnit()] !=\n\t\tthis.time[this.sizeUnit()])\n\t\tbreak;\n\t    var choice = new TimeInterval(this.size+1, choiceTime);\n\t    if (!choice.selectable())\n\t\tbreak;\n\t    choices.push(choice);\n\t}\n\treturn choices;\n    },\n\n    /*\n     * Returns last selectable interval of this size.\n     */\n    last: function() {\n\treturn new TimeInterval(this.size);\n    },\n\n    /*\n     * Predicate; tells whether the Time object time is contained in\n     * this interval.\n     */\n    contains: function(time) {\n\treturn (this.beginning().compare(time) <= 0 &&\n\t\tthis.end().compare(time) > 0);\n    },\n\n    /*\n     * Make a string representation of this interval which can be read\n     * back with the read function.\n     */\n    toReadableString: function() {\n\treturn this.size + '-' + this.beginning().toReadableString();\n    },\n\n    /*\n     * Fill this object with data from a string as produced by\n     * toReadableString.\n     *\n     * Warning: This function is destructive!\n     */\n    read: function(str) {\n\tfunction err(msg) {\n\t    throw new Error('TimeInterval.read -- ' +\n\t\t\t    format.apply(null, arguments));\n\t}\n\tm = /(\\d+)-(.+)/.exec(str)\n\tif (!m)\n\t    err('not a valid interval string: \"%s\"', str);\n\tvar size = Number(m[1]);\n\tif (size >= TI_SIZES.length)\n\t    err('illegal size %d in interval string \"%s\"', size, str);\n\tvar time = new Time(m[2]);\n\tthis.size = size;\n\tthis.time = time;\n    },\n\n    /*\n     * Format this interval with the 'short format' given in the size\n     * specification (see definition of TI_SIZES).\n     */\n    toShortString: function() {\n\treturn this.time.format(this.getSize().shortFormat);\n    },\n\n    /*\n     * Format this interval with the format given in the size\n     * specification (see definition of TI_SIZES).\n     */\n    toString: function() {\n\tvar format = this.getSize().format;\n\tif (typeof format == 'string') {\n\t    return this.time.format(format);\n\t} else {\n\t    return this.beginning().format(format[0]) +\n\t\tthis.end().format(format[1]);\n\t}\n    }\n}\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/TimeNavigator.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * TimeNavigator.js: Provides time navigation in a manner similar to\n * that in Stager (http://software.uninett.no/stager/).\n *\n * An instance of TimeNavigator hooks onto a set of HTML elements with\n * certain ids; these must already be present in the HTML document.\n *\n * Some differences between the UI provided by this class and that of\n * Stager:\n *\n * * We have a menu for selecting any interval size (not only the\n *   one-step up/down selections)\n *\n * * Our calendar is smaller and more versatile (it shows only one\n *   month at a time, but can show any month, not just the last five)\n *\n * * Our calendar indicates the current selection\n */\n\n\n/*\n * Constructor.\n *\n * Arguments:\n *\n * idPrefix -- prefix of id of HTML elements controlled by this object.\n *\n * changeCallback -- function to be called (with the new interval as\n * argument) each time the selection is changed.\n *\n * initialInterval -- initially selected time interval (TimeInterval\n * object).  If omitted, the last possible interval of size TI_5MIN is\n * used.\n */\nfunction TimeNavigator(idPrefix, changeCallback, initialInterval) {\n    this.idPrefix = idPrefix;\n    if (initialInterval)\n\tthis.interval = initialInterval;\n    else\n\tthis.interval = new TimeInterval(TI_10MIN);\n\n    this.onChange = makeHook();\n    if (changeCallback)\n\taddHook(this.onChange, changeCallback);\n\n    var dateSelectable = encapsulate(this, function(time) {\n\treturn this.interval.gotoTime(time).selectable();\n    });\n    function monthSelectable(time) {\n\treturn new TimeInterval(TI_MONTH, time).selectable();\n    }\n    this.calendar = new Calendar(idPrefix+'-calendar',\n\t\t\t\t encapsulate(this, this.calendarChanged),\n\t\t\t\t this.interval,\n\t\t\t\t dateSelectable, monthSelectable);\n\n    this.updateUI();\n}\n\nTimeNavigator.prototype = {\n    /*\n     * Selected time interval (TimeInterval object).\n     */\n    interval: null,\n\n    /*\n     * Hook called with the new interval as argument each time the\n     * selection is changed. (use addHook to add more functions to\n     * this).\n     */\n    onChange: null,\n\n    /*\n     * Common prefix of id attribute of all HTML elements to be\n     * manipulated by this TimeNavigator.\n     */\n    idPrefix: null,\n\n    /*\n     * Calendar object (see Calendar.js).\n     */\n    calendar: null,\n\n    /*\n     * Select a new interval.\n     */\n    setInterval: function(newInterval) {\n\tthis.interval = newInterval;\n\tthis.updateUI();\n\tcallHook(this.onChange, newInterval);\n    },\n\n    /*\n     * Update the user interface (i.e. HTML elements) to reflect the\n     * currently selected interval.\n     */\n    updateUI: function() {\n\n\tvar getElem = encapsulate(this, function(id) {\n\t    return document.getElementById(this.idPrefix + '-' + id);\n\t});\n\n\tvar makeIntervalUpdater =\n\t    (function (setInterval) {\n\t\treturn function(func) { return compose(setInterval, func) };\n\t    })(encapsulate(this, this.setInterval));\n\n\tvar updateButton = encapsulate(this, function(button) {\n\t    var elem = getElem(button.id);\n\t    var enabled =\n\t\tbutton.enable==true || callMethod(this.interval,\n\t\t\t\t\t\t  button.enable);\n\t    var label = button.label(this.interval);\n\t    var activate =\n\t\tmakeIntervalUpdater(encapsulateMethod(this.interval,\n\t\t\t\t\t\t      button.method));\n\n\t    elem.className = enabled ? 'enabled' : 'disabled';\n\t    elem.setAttribute('title', label);\n\t    //elem.innerHTML = label;\n\t    elem.onclick = enabled ? activate : function(){};\n\t});\n\n\tfunction makeHTMLOptions(options) {\n\t    function optionHTML(option) {\n\t\tvar value = option[0];\n\t\tvar name = option[1];\n\t\tif (value != null)\n\t\t    return format('<option value=\"%s\">%s</option>',\n\t\t\t\t  value, name);\n\t\treturn format('<option>%s</option>', name);\n\t    }\n\t    return concat(map(optionHTML, options));\n\t}\n\n\t// Display the currently selected time interval:\n\tgetElem('selected-time').innerHTML = this.interval.toString();\n\n\t// Update actions, labels and enabledness of navigation buttons:\n\tthis.buttons.forEach(updateButton);\n\n\t// Create menu for selecting smaller intervals:\n\tvar downElem = getElem('down');\n\tvar choices = this.interval.downChoices();\n\tif (choices) {\n\t    var choiceSize = this.interval.smallerSize();\n\t    var options = arrayConcat(\n\t\t[[[null, sizeName(choiceSize, true) + '...']],\n\t\t zip(range(choices.length),\n\t\t     mapMethod('toShortString', choices))]);\n\t    downElem.innerHTML = makeHTMLOptions(options);\n\t    downElem.className = 'enabled';\n\t} else {\n\t    downElem.innerHTML = '';\n\t    downElem.className = 'disabled';\n\t}\n\tdownElem.onchange = makeIntervalUpdater(function () {\n\t    return choices[downElem.value];\n\t});\n\n\t// Create interval size selection menu:\n\tvar sizeElem = getElem('interval-size');\n\tvar sizeOptions = subarray(zip(range(TI_SIZES.length),\n\t\t\t\t       map(fix(sizeName, true, 1), TI_SIZES)),\n\t\t\t\t   1);\n\tsizeElem.innerHTML = makeHTMLOptions(sizeOptions);\n\tsizeElem.value = this.interval.size;\n\tsizeElem.onchange = makeIntervalUpdater(encapsulate(this, function() {\n\t    return new TimeInterval(Number(sizeElem.value),\n\t\t\t\t    this.interval.time);\n\t}));\n\n\t// Update calendar:\n\tthis.calendar.interval = this.interval;\n\tthis.calendar.updateHTML();\n    },\n\n    /*\n     * Called when the selection in the calendar is changed.\n     */\n    calendarChanged: function() {\n\tthis.setInterval(this.calendar.interval);\n    },\n\n    /*\n     * Button definitions.\n     *\n     * id -- id of HTML element for button (without prefix)\n     *\n     * method -- name of method to call on the current time interval\n     * when clicking on the button; the result is used as new time\n     * interval\n     *\n     * enable -- name of method to call on current time interval to\n     * find out whether the button should be enabled; or true for\n     * buttons which are always enabled\n     *\n     * label -- function to be called with current time interval as\n     * argument, returns text to use as label for the button\n     */\n    buttons: [\n\t{id: 'prev-jump', method: 'prevJump', enable: true,\n\t label: function(ti) {\n\t     return 'Go back ' + sizeName(ti.largerSize()) }},\n\t{id: 'prev', method: 'prev', enable: true,\n\t label: function(ti) {\n\t     return 'Go back ' + sizeName(ti.getSize()) }},\n\t{id: 'next', method: 'next', enable: 'nextPossible',\n\t label: function(ti) {\n\t     return 'Go forward ' + sizeName(ti.getSize()) }},\n\t{id: 'next-jump', method: 'nextJump', enable: 'nextJumpPossible',\n\t label: function(ti) {\n\t     return 'Go forward ' + sizeName(ti.largerSize()) }},\n\t{id: 'last', method: 'last', enable: 'nextPossible',\n\t label: function(ti) {\n\t     return 'Go to last ' + sizeName(ti.getSize(), true) }},\n\t{id: 'up', method: 'up', enable: 'upPossible',\n\t label: function(ti) {\n\t     if (ti.upPossible())\n\t\t return 'Go up to ' + sizeName(ti.largerSize(), true);\n\t     return ''; }}\n    ]\n\n};\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/coordinates.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * coordinates.js -- conversion between coordinate formats and between\n * internal and string forms of the formats.\n */\n\nvar normalProjection = new OpenLayers.Projection(\"EPSG:4326\");\nvar coordinatePrintPrecision = 7;\n\n/*\n * UTM\n */\n\n/*\n * Find the EPSG projection name to use for UTM projection in a given\n * zone and hemisphere.\n *\n * Information about EPSG projections can be found at:\n * -- http://www.epsg-registry.org/\n * -- http://spatialreference.org/\n */\nfunction utmProjectionName(zone, hemisphere) {\n    return 'EPSG:32' + (hemisphere=='N'?'6':'7') + zone;\n}\n\n/*\n * Projection object for UTM in a specified zone.\n */\nfunction utmProjection(zone, hemisphere) {\n    var projName = utmProjectionName(zone, hemisphere);\n    return new OpenLayers.Projection(projName);\n}\n\n/*\n * Parse a string containing UTM coordinates.\n *\n * The following format is expected (note: this is not the only way to\n * format UTM coordinates, and may not even be a common way to do it):\n *\n * Zone number (two digits), directly followed by hemisphere ('N'/'S');\n * whitespace;\n * northings and eastings (in this order!), separated by whitespace.\n *\n * The hemisphere may be omitted, in which case 'N' is assumed.\n *\n * Returns an object with properties zone, hemisphere, n, e.\n */\nfunction parseUtm(utmStr) {\n    var defaultHemisphere = 'N';\n    var utmRE = /^\\W*([0-9][0-9])([NS]?)\\W+([0-9]*[.]?[0-9]+)\\W+([0-9]*[.]?[0-9]+)\\W*$/;\n    var arr = utmRE.exec(utmStr);\n    if (arr == null) {\n\tthrow 'error: incorrectly formatted UTM string \"' +\n\t    utmStr + '\"';\n    }\n    var utm = {};\n    utm.zone = arr[1];\n    utm.hemisphere = (arr[2]=='' ? defaultHemisphere : arr[2]);\n    utm.n = arr[3];\n    utm.e = arr[4];\n    return utm;\n}\n\n/*\n * Format UTM coordinates as a string.\n */\nfunction utmToStr(utm) {\n    return format('%d%s %d %d',\n\t\t  utm.zone, utm.hemisphere, utm.n, utm.e);\n}\n\n\n\n/*\n * Longitude/latitude pairs.\n */\n\n/*\n * Parse a string containing latitude/longitude coordinates.\n *\n * The string is expected to be on the form latitude, comma, any\n * amount of whitespace (including none), longitude.\n *\n * Returns an instance of OpenLayers.LonLat.\n */\nfunction parseLonLat(llStr) {\n    var re = /^([0-9]*[.]?[0-9]+), *([0-9]*[.]?[0-9]+)$/;\n    var arr = re.exec(llStr);\n    if (arr == null)\n\tthrow 'error: incorrectly formatted latitude, longitude string \"' +\n\tllStr + '\"';\n    return new OpenLayers.LonLat(arr[2], arr[1]);\n}\n\n/*\n * Format a longitude/latitude object as a string.\n */\nfunction lonLatToStr(lonlat) {\n    return format('%7f, %6f', lonlat.lat, lonlat.lon);\n}\n\n\n\n/*\n * Convertions.\n */\n\n/*\n * Convert UTM coordinates given as a string to a longitude/latitude object.\n *\n * See parseUtm for expected format of the UTM string.\n *\n * Returns an instance of OpenLayers.LonLat.\n */\nfunction utmStrToLonLat(utmStr) {\n    return utmToLonLat(parseUtm(utmStr));\n}\n\n/*\n * Convert UTM coordinates to longitude/latitude.\n */\nfunction utmToLonLat(utm) {\n    var point = new OpenLayers.LonLat(utm.e, utm.n);\n    var proj = utmProjection(utm.zone, utm.hemisphere);\n    //this.utmProj = proj;\n    /*\n      for (var i = 0; i < 10000; i++)\n      if (proj.proj.readyToUse)\n      break;\n    */\n    if (!proj.proj.readyToUse)\n\tthrow 'error: projection not ready';\n    return point.transform(proj, normalProjection);\n}\n\n/*\n * Convert longitude/latitude to UTM.\n */\nfunction lonLatToUtm(lonlat) {\n    var utm = {};\n    utm.zone = utmZone(lonlat);\n    utm.hemisphere = utmHemisphere(lonlat);\n    var point = lonlat.clone();\n    var proj = utmProjection(utm.zone, utm.hemisphere);\n    if (!proj.proj.readyToUse)\n\tthrow 'error: projection not ready';\n    point.transform(normalProjection, proj);\n    utm.n = point.lat;\n    utm.e = point.lon;\n    return utm;\n}\n\n\n/*\n * Gives the UTM zone number for a (lon,lat) pair. We take into\n * account the irregular zones around Norway and Svalbard, but not the\n * four special zones for the polar regions.\n *\n * Source: http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system\n *\n * Exact positions of irregular zones stolen from the\n * LatLonUTMConversion Python file available at http://pygps.org/.\n */\nfunction utmZone(lonlat) {\n    var lon = lonlat.lon;\n    var lat = lonlat.lat;\n    \n    var zone = Math.floor((lon+180) / 6) + 1;\n    // zone 32 extended at southern part of Norway:\n    if (lat >= 56 && lat < 64 &&\n\tlon >= 3  && lon < 12)\n\tzone = 32;\n    // zones around Svalbard are completely crazy:\n    if (lat >= 72 && lat < 84) {\n\tif (lon >=  0 && lon <  9) zone = 31;\n\tif (lon >=  9 && lon < 21) zone = 33;\n\tif (lon >= 21 && lon < 33) zone = 35;\n\tif (lon >= 33 && lon < 42) zone = 37;\n    }\n    return zone;\n}\n\n/*\n * The hemisphere a (lon,lat) pair lies in. 'N' for northern\n * hemisphere, 'S' for southern.\n */\nfunction utmHemisphere(lonlat) {\n    return (lonlat.lat < 0) ? 'S' : 'N';\n}\n\n\n\n\n\nfunction fromMapCoords(lonlat, map) {\n    var newLonlat = lonlat.clone();\n    newLonlat.transform(map.getProjectionObject(),\n\t\t\tnormalProjection);\n    return newLonlat;\n}\n\nfunction toMapCoords(lonlat, map) {\n    var newLonlat = lonlat.clone();\n    newLonlat.transform(normalProjection,\n\t\t\tmap.getProjectionObject());\n    return newLonlat;\n}\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/geomap.js",
    "content": "/*\n * Copyright (C) 2009, 2010, 2015 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * geomap.js: Shows a map with a network information overlay.\n */\n\nrequire(['geomap/GeomapPlugin'], function (geomap) {\n    $(function () {\n        var $timePanelToggler = $('#time-panel-toggler'),\n            $icon = $timePanelToggler.find('i');\n        $timePanelToggler.on('click', function () {\n            $('#time-panel').slideToggle(function () {\n                var $panel = $(this);\n                if ($panel.is(':visible')) {\n                    $icon.removeClass('fa-caret-down').addClass('fa-caret-up');\n                } else {\n                    $icon.removeClass('fa-caret-up').addClass('fa-caret-down');\n                }\n            });\n        });\n    });\n\n    /* Start creating map when all content is rendered */\n    $(window).on('load', function () {\n        geomap();\n    });\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/proj4js-compressed.js",
    "content": "/*\r\n  proj4js.js -- Javascript reprojection library. \r\n  \r\n  Authors:      Mike Adair madairATdmsolutions.ca\r\n                Richard Greenwood richATgreenwoodmap.com\r\n                Didier Richard\r\n                Stephen Irons\r\n  License:      LGPL as per: http://www.gnu.org/copyleft/lesser.html \r\n                Note: This program is an almost direct port of the C library\r\n                Proj4.\r\n*/\r\nProj4js={defaultDatum:'WGS84',transform:function(source,dest,point){if(!source.readyToUse||!dest.readyToUse){this.reportError(\"Proj4js initialization for \"+source.srsCode+\" not yet complete\");return point;}\nif((source.srsProjNumber==\"900913\"&&dest.datumCode!=\"WGS84\")||(dest.srsProjNumber==\"900913\"&&source.datumCode!=\"WGS84\")){var wgs84=Proj4js.WGS84;this.transform(source,wgs84,point);source=wgs84;}\nif(source.projName==\"longlat\"){point.x*=Proj4js.common.D2R;point.y*=Proj4js.common.D2R;}else{if(source.to_meter){point.x*=source.to_meter;point.y*=source.to_meter;}\nsource.inverse(point);}\nif(source.from_greenwich){point.x+=source.from_greenwich;}\npoint=this.datum_transform(source.datum,dest.datum,point);if(dest.from_greenwich){point.x-=dest.from_greenwich;}\nif(dest.projName==\"longlat\"){point.x*=Proj4js.common.R2D;point.y*=Proj4js.common.R2D;}else{dest.forward(point);if(dest.to_meter){point.x/=dest.to_meter;point.y/=dest.to_meter;}}\nreturn point;},datum_transform:function(source,dest,point){if(source.compare_datums(dest)){return point;}\nif(source.datum_type==Proj4js.common.PJD_NODATUM||dest.datum_type==Proj4js.common.PJD_NODATUM){return point;}\nif(source.datum_type==Proj4js.common.PJD_GRIDSHIFT)\n{alert(\"ERROR: Grid shift transformations are not implemented yet.\");}\nif(dest.datum_type==Proj4js.common.PJD_GRIDSHIFT)\n{alert(\"ERROR: Grid shift transformations are not implemented yet.\");}\nif(source.es!=dest.es||source.a!=dest.a||source.datum_type==Proj4js.common.PJD_3PARAM||source.datum_type==Proj4js.common.PJD_7PARAM||dest.datum_type==Proj4js.common.PJD_3PARAM||dest.datum_type==Proj4js.common.PJD_7PARAM)\n{source.geodetic_to_geocentric(point);if(source.datum_type==Proj4js.common.PJD_3PARAM||source.datum_type==Proj4js.common.PJD_7PARAM){source.geocentric_to_wgs84(point);}\nif(dest.datum_type==Proj4js.common.PJD_3PARAM||dest.datum_type==Proj4js.common.PJD_7PARAM){dest.geocentric_from_wgs84(point);}\ndest.geocentric_to_geodetic(point);}\nif(dest.datum_type==Proj4js.common.PJD_GRIDSHIFT)\n{alert(\"ERROR: Grid shift transformations are not implemented yet.\");}\nreturn point;},reportError:function(msg){},extend:function(destination,source){destination=destination||{};if(source){for(var property in source){var value=source[property];if(value!==undefined){destination[property]=value;}}}\nreturn destination;},Class:function(){var Class=function(){this.initialize.apply(this,arguments);};var extended={};var parent;for(var i=0;i<arguments.length;++i){if(typeof arguments[i]==\"function\"){parent=arguments[i].prototype;}else{parent=arguments[i];}\nProj4js.extend(extended,parent);}\nClass.prototype=extended;return Class;},bind:function(func,object){var args=Array.prototype.slice.apply(arguments,[2]);return function(){var newArgs=args.concat(Array.prototype.slice.apply(arguments,[0]));return func.apply(object,newArgs);};},scriptName:\"proj4js.js\",defsLookupService:'http://spatialreference.org/ref',libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;var scriptName=this.scriptName;var scriptNameLen=scriptName.length;var scripts=document.getElementsByTagName('script');for(var i=0;i<scripts.length;i++){var src=scripts[i].getAttribute('src');if(src){var index=src.lastIndexOf(scriptName);if((index>-1)&&(index+scriptNameLen==src.length)){this.libPath=src.slice(0,-scriptNameLen);break;}}}\nreturn this.libPath||\"\";},loadScript:function(url,onload,onfail,loadCheck){var script=document.createElement('script');script.defer=false;script.type=\"text/javascript\";script.id=url;script.src=url;script.onload=onload;script.onerror=onfail;script.loadCheck=loadCheck;if(/MSIE/.test(navigator.userAgent)){script.onreadystatechange=this.checkReadyState;}\ndocument.getElementsByTagName('head')[0].appendChild(script);},checkReadyState:function(){if(this.readyState=='loaded'){if(!this.loadCheck()){this.onerror();}else{this.onload();}}}};Proj4js.Proj=Proj4js.Class({readyToUse:false,title:null,projName:null,units:null,datum:null,initialize:function(srsCode){this.srsCode=srsCode.toUpperCase();if(this.srsCode.indexOf(\"EPSG\")==0){this.srsCode=this.srsCode;this.srsAuth='epsg';this.srsProjNumber=this.srsCode.substring(5);}else if(this.srsCode.indexOf(\"IGNF\")==0){this.srsCode=this.srsCode;this.srsAuth='IGNF';this.srsProjNumber=this.srsCode.substring(5);}else if(this.srsCode.indexOf(\"CRS\")==0){this.srsCode=this.srsCode;this.srsAuth='CRS';this.srsProjNumber=this.srsCode.substring(4);}else{this.srsAuth='';this.srsProjNumber=this.srsCode;}\nthis.loadProjDefinition();},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode]){this.defsLoaded();return;}\nvar url=Proj4js.getScriptLocation()+'defs/'+this.srsAuth.toUpperCase()+this.srsProjNumber+'.js';Proj4js.loadScript(url,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this));},loadFromService:function(){var url=Proj4js.defsLookupService+'/'+this.srsAuth+'/'+this.srsProjNumber+'/proj4js';Proj4js.loadScript(url,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this));},defsLoaded:function(){this.parseDefs();this.loadProjCode(this.projName);},checkDefsLoaded:function(){if(Proj4js.defs[this.srsCode]){return true;}else{return false;}},defsFailed:function(){Proj4js.reportError('failed to load projection definition for: '+this.srsCode);Proj4js.extend(Proj4js.defs[this.srsCode],Proj4js.defs['WGS84']);this.defsLoaded();},loadProjCode:function(projName){if(Proj4js.Proj[projName]){this.initTransforms();return;}\nvar url=Proj4js.getScriptLocation()+'projCode/'+projName+'.js';Proj4js.loadScript(url,Proj4js.bind(this.loadProjCodeSuccess,this,projName),Proj4js.bind(this.loadProjCodeFailure,this,projName),Proj4js.bind(this.checkCodeLoaded,this,projName));},loadProjCodeSuccess:function(projName){if(Proj4js.Proj[projName].dependsOn){this.loadProjCode(Proj4js.Proj[projName].dependsOn);}else{this.initTransforms();}},loadProjCodeFailure:function(projName){Proj4js.reportError(\"failed to find projection file for: \"+projName);},checkCodeLoaded:function(projName){if(Proj4js.Proj[projName]){return true;}else{return false;}},initTransforms:function(){Proj4js.extend(this,Proj4js.Proj[this.projName]);this.init();this.readyToUse=true;},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var paramName,paramVal;var paramArray=this.defData.split(\"+\");for(var prop=0;prop<paramArray.length;prop++){var property=paramArray[prop].split(\"=\");paramName=property[0].toLowerCase();paramVal=property[1];switch(paramName.replace(/\\s/gi,\"\")){case\"\":break;case\"title\":this.title=paramVal;break;case\"proj\":this.projName=paramVal.replace(/\\s/gi,\"\");break;case\"units\":this.units=paramVal.replace(/\\s/gi,\"\");break;case\"datum\":this.datumCode=paramVal.replace(/\\s/gi,\"\");break;case\"nadgrids\":this.nagrids=paramVal.replace(/\\s/gi,\"\");break;case\"ellps\":this.ellps=paramVal.replace(/\\s/gi,\"\");break;case\"a\":this.a=parseFloat(paramVal);break;case\"b\":this.b=parseFloat(paramVal);break;case\"rf\":this.rf=parseFloat(paramVal);break;case\"lat_0\":this.lat0=paramVal*Proj4js.common.D2R;break;case\"lat_1\":this.lat1=paramVal*Proj4js.common.D2R;break;case\"lat_2\":this.lat2=paramVal*Proj4js.common.D2R;break;case\"lat_ts\":this.lat_ts=paramVal*Proj4js.common.D2R;break;case\"lon_0\":this.long0=paramVal*Proj4js.common.D2R;break;case\"alpha\":this.alpha=parseFloat(paramVal)*Proj4js.common.D2R;break;case\"lonc\":this.longc=paramVal*Proj4js.common.D2R;break;case\"x_0\":this.x0=parseFloat(paramVal);break;case\"y_0\":this.y0=parseFloat(paramVal);break;case\"k_0\":this.k0=parseFloat(paramVal);break;case\"k\":this.k0=parseFloat(paramVal);break;case\"R_A\":this.R=true;break;case\"zone\":this.zone=parseInt(paramVal);break;case\"south\":this.utmSouth=true;break;case\"towgs84\":this.datum_params=paramVal.split(\",\");break;case\"to_meter\":this.to_meter=parseFloat(paramVal);break;case\"from_greenwich\":this.from_greenwich=paramVal*Proj4js.common.D2R;break;case\"pm\":paramVal=paramVal.replace(/\\s/gi,\"\");this.from_greenwich=Proj4js.PrimeMeridian[paramVal]?Proj4js.PrimeMeridian[paramVal]:parseFloat(paramVal);this.from_greenwich*=Proj4js.common.D2R;break;case\"no_defs\":break;default:}}\nthis.deriveConstants();},deriveConstants:function(){if(this.nagrids=='@null')this.datumCode='none';if(this.datumCode&&this.datumCode!='none'){var datumDef=Proj4js.Datum[this.datumCode];if(datumDef){this.datum_params=datumDef.towgs84.split(',');this.ellps=datumDef.ellipse;this.datumName=datumDef.datumName?datumDef.datumName:this.datumCode;}}\nif(!this.a){var ellipse=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid['WGS84'];Proj4js.extend(this,ellipse);}\nif(this.rf&&!this.b)this.b=(1.0-1.0/this.rf)*this.a;if(Math.abs(this.a-this.b)<Proj4js.common.EPSLN){this.sphere=true;this.b=this.a;}\nthis.a2=this.a*this.a;this.b2=this.b*this.b;this.es=(this.a2-this.b2)/this.a2;this.e=Math.sqrt(this.es);if(this.R_A){this.a*=1.-this.es*(Proj4js.common.SIXTH+this.es*(Proj4js.RA4+this.es*Proj4js.RA6));this.a2=this.a*this.a;this.b2=this.b*this.b;this.es=0.;}\nthis.ep2=(this.a2-this.b2)/this.b2;if(!this.k0)this.k0=1.0;this.datum=new Proj4js.datum(this);}});Proj4js.Proj.longlat={init:function(){},forward:function(pt){return pt;},inverse:function(pt){return pt;}};Proj4js.defs={'WGS84':\"+title=long/lat:WGS84 +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\",'EPSG:4326':\"+title=long/lat:WGS84 +proj=longlat +a=6378137.0 +b=6356752.31424518 +ellps=WGS84 +datum=WGS84 +units=degrees\",'EPSG:4269':\"+title=long/lat:NAD83 +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\"};Proj4js.common={PI:3.141592653589793238,HALF_PI:1.570796326794896619,TWO_PI:6.283185307179586477,FORTPI:0.78539816339744833,R2D:57.29577951308232088,D2R:0.01745329251994329577,SEC_TO_RAD:4.84813681109535993589914102357e-6,EPSLN:1.0e-10,MAX_ITER:20,COS_67P5:0.38268343236508977,AD_C:1.0026000,PJD_UNKNOWN:0,PJD_3PARAM:1,PJD_7PARAM:2,PJD_GRIDSHIFT:3,PJD_WGS84:4,PJD_NODATUM:5,SRS_WGS84_SEMIMAJOR:6378137.0,SIXTH:.1666666666666666667,RA4:.04722222222222222222,RA6:.02215608465608465608,RV4:.06944444444444444444,RV6:.04243827160493827160,msfnz:function(eccent,sinphi,cosphi){var con=eccent*sinphi;return cosphi/(Math.sqrt(1.0-con*con));},tsfnz:function(eccent,phi,sinphi){var con=eccent*sinphi;var com=.5*eccent;con=Math.pow(((1.0-con)/(1.0+con)),com);return(Math.tan(.5*(this.HALF_PI-phi))/con);},phi2z:function(eccent,ts){var eccnth=.5*eccent;var con,dphi;var phi=this.HALF_PI-2*Math.atan(ts);for(i=0;i<=15;i++){con=eccent*Math.sin(phi);dphi=this.HALF_PI-2*Math.atan(ts*(Math.pow(((1.0-con)/(1.0+con)),eccnth)))-phi;phi+=dphi;if(Math.abs(dphi)<=.0000000001)return phi;}\nalert(\"phi2z has NoConvergence\");return(-9999);},qsfnz:function(eccent,sinphi,cosphi){var con;if(eccent>1.0e-7){con=eccent*sinphi;return((1.0-eccent*eccent)*(sinphi/(1.0-con*con)-(.5/eccent)*Math.log((1.0-con)/(1.0+con))));}else{return(2.0*sinphi);}},asinz:function(x){if(Math.abs(x)>1.0){x=(x>1.0)?1.0:-1.0;}\nreturn Math.asin(x);},e0fn:function(x){return(1.0-0.25*x*(1.0+x/16.0*(3.0+1.25*x)));},e1fn:function(x){return(0.375*x*(1.0+0.25*x*(1.0+0.46875*x)));},e2fn:function(x){return(0.05859375*x*x*(1.0+0.75*x));},e3fn:function(x){return(x*x*x*(35.0/3072.0));},mlfn:function(e0,e1,e2,e3,phi){return(e0*phi-e1*Math.sin(2.0*phi)+e2*Math.sin(4.0*phi)-e3*Math.sin(6.0*phi));},srat:function(esinp,exp){return(Math.pow((1.0-esinp)/(1.0+esinp),exp));},sign:function(x){if(x<0.0)return(-1);else return(1);},adjust_lon:function(x){x=(Math.abs(x)<this.PI)?x:(x-(this.sign(x)*this.TWO_PI));return x;},adjust_lat:function(x){x=(Math.abs(x)<this.HALF_PI)?x:(x-(this.sign(x)*this.PI));return x;},latiso:function(eccent,phi,sinphi)\n{if(Math.abs(phi)>this.HALF_PI)return+Number.NaN;if(phi==this.HALF_PI)return Number.POSITIVE_INFINITY;if(phi==-1.0*this.HALF_PI)return-1.0*Number.POSITIVE_INFINITY;var con=eccent*sinphi;return Math.log(Math.tan((this.HALF_PI+phi)/2.0))+eccent*Math.log((1.0-con)/(1.0+con))/2.0;},fL:function(x,L){return 2.0*Math.atan(x*Math.exp(L))-this.HALF_PI;},invlatiso:function(eccent,ts){var phi=this.fL(1.0,ts);var Iphi=0.0;var con=0.0;do{Iphi=phi;con=eccent*Math.sin(Iphi);phi=this.fL(Math.exp(eccent*Math.log((1.0+con)/(1.0-con))/2.0),ts)}while(Math.abs(phi-Iphi)>1.0e-12);return phi;},sinh:function(x)\n{var r=Math.exp(x);r=(r-1.0/r)/2.0;return r;},cosh:function(x)\n{var r=Math.exp(x);r=(r+1.0/r)/2.0;return r;},tanh:function(x)\n{var r=Math.exp(x);r=(r-1.0/r)/(r+1.0/r);return r;},asinh:function(x)\n{var s=(x>=0?1.0:-1.0);return s*(Math.log(Math.abs(x)+Math.sqrt(x*x+1.0)));},acosh:function(x)\n{return 2.0*Math.log(Math.sqrt((x+1.0)/2.0)+Math.sqrt((x-1.0)/2.0));},atanh:function(x)\n{return Math.log((x-1.0)/(x+1.0))/2.0;},gN:function(a,e,sinphi)\n{var temp=e*sinphi;return a/Math.sqrt(1.0-temp*temp);}};Proj4js.datum=Proj4js.Class({initialize:function(proj){this.datum_type=Proj4js.common.PJD_WGS84;if(proj.datumCode&&proj.datumCode=='none'){this.datum_type=Proj4js.common.PJD_NODATUM;}\nif(proj&&proj.datum_params){for(var i=0;i<proj.datum_params.length;i++){proj.datum_params[i]=parseFloat(proj.datum_params[i]);}\nif(proj.datum_params[0]!=0||proj.datum_params[1]!=0||proj.datum_params[2]!=0){this.datum_type=Proj4js.common.PJD_3PARAM;}\nif(proj.datum_params.length>3){if(proj.datum_params[3]!=0||proj.datum_params[4]!=0||proj.datum_params[5]!=0||proj.datum_params[6]!=0){this.datum_type=Proj4js.common.PJD_7PARAM;proj.datum_params[3]*=Proj4js.common.SEC_TO_RAD;proj.datum_params[4]*=Proj4js.common.SEC_TO_RAD;proj.datum_params[5]*=Proj4js.common.SEC_TO_RAD;proj.datum_params[6]=(proj.datum_params[6]/1000000.0)+1.0;}}}\nif(proj){this.a=proj.a;this.b=proj.b;this.es=proj.es;this.ep2=proj.ep2;this.datum_params=proj.datum_params;}},compare_datums:function(dest){if(this.datum_type!=dest.datum_type){return false;}else if(this.a!=dest.a||Math.abs(this.es-dest.es)>0.000000000050){return false;}else if(this.datum_type==Proj4js.common.PJD_3PARAM){return(this.datum_params[0]==dest.datum_params[0]&&this.datum_params[1]==dest.datum_params[1]&&this.datum_params[2]==dest.datum_params[2]);}else if(this.datum_type==Proj4js.common.PJD_7PARAM){return(this.datum_params[0]==dest.datum_params[0]&&this.datum_params[1]==dest.datum_params[1]&&this.datum_params[2]==dest.datum_params[2]&&this.datum_params[3]==dest.datum_params[3]&&this.datum_params[4]==dest.datum_params[4]&&this.datum_params[5]==dest.datum_params[5]&&this.datum_params[6]==dest.datum_params[6]);}else if(this.datum_type==Proj4js.common.PJD_GRIDSHIFT){return strcmp(pj_param(this.params,\"snadgrids\").s,pj_param(dest.params,\"snadgrids\").s)==0;}else{return true;}},geodetic_to_geocentric:function(p){var Longitude=p.x;var Latitude=p.y;var Height=p.z?p.z:0;var X;var Y;var Z;var Error_Code=0;var Rn;var Sin_Lat;var Sin2_Lat;var Cos_Lat;if(Latitude<-Proj4js.common.HALF_PI&&Latitude>-1.001*Proj4js.common.HALF_PI){Latitude=-Proj4js.common.HALF_PI;}else if(Latitude>Proj4js.common.HALF_PI&&Latitude<1.001*Proj4js.common.HALF_PI){Latitude=Proj4js.common.HALF_PI;}else if((Latitude<-Proj4js.common.HALF_PI)||(Latitude>Proj4js.common.HALF_PI)){Proj4js.reportError('geocent:lat out of range:'+Latitude);return null;}\nif(Longitude>Proj4js.common.PI)Longitude-=(2*Proj4js.common.PI);Sin_Lat=Math.sin(Latitude);Cos_Lat=Math.cos(Latitude);Sin2_Lat=Sin_Lat*Sin_Lat;Rn=this.a/(Math.sqrt(1.0e0-this.es*Sin2_Lat));X=(Rn+Height)*Cos_Lat*Math.cos(Longitude);Y=(Rn+Height)*Cos_Lat*Math.sin(Longitude);Z=((Rn*(1-this.es))+Height)*Sin_Lat;p.x=X;p.y=Y;p.z=Z;return Error_Code;},geocentric_to_geodetic:function(p){var genau=1.E-12;var genau2=(genau*genau);var maxiter=30;var P;var RR;var CT;var ST;var RX;var RK;var RN;var CPHI0;var SPHI0;var CPHI;var SPHI;var SDPHI;var At_Pole;var iter;var X=p.x;var Y=p.y;var Z=p.z?p.z:0.0;var Longitude;var Latitude;var Height;At_Pole=false;P=Math.sqrt(X*X+Y*Y);RR=Math.sqrt(X*X+Y*Y+Z*Z);if(P/this.a<genau){At_Pole=true;Longitude=0.0;if(RR/this.a<genau){Latitude=Proj4js.common.HALF_PI;Height=-this.b;return;}}else{Longitude=Math.atan2(Y,X);}\nCT=Z/RR;ST=P/RR;RX=1.0/Math.sqrt(1.0-this.es*(2.0-this.es)*ST*ST);CPHI0=ST*(1.0-this.es)*RX;SPHI0=CT*RX;iter=0;do\n{iter++;RN=this.a/Math.sqrt(1.0-this.es*SPHI0*SPHI0);Height=P*CPHI0+Z*SPHI0-RN*(1.0-this.es*SPHI0*SPHI0);RK=this.es*RN/(RN+Height);RX=1.0/Math.sqrt(1.0-RK*(2.0-RK)*ST*ST);CPHI=ST*(1.0-RK)*RX;SPHI=CT*RX;SDPHI=SPHI*CPHI0-CPHI*SPHI0;CPHI0=CPHI;SPHI0=SPHI;}\nwhile(SDPHI*SDPHI>genau2&&iter<maxiter);Latitude=Math.atan(SPHI/Math.abs(CPHI));p.x=Longitude;p.y=Latitude;p.z=Height;return p;},geocentric_to_geodetic_noniter:function(p){var X=p.x;var Y=p.y;var Z=p.z?p.z:0;var Longitude;var Latitude;var Height;var W;var W2;var T0;var T1;var S0;var S1;var Sin_B0;var Sin3_B0;var Cos_B0;var Sin_p1;var Cos_p1;var Rn;var Sum;var At_Pole;X=parseFloat(X);Y=parseFloat(Y);Z=parseFloat(Z);At_Pole=false;if(X!=0.0)\n{Longitude=Math.atan2(Y,X);}\nelse\n{if(Y>0)\n{Longitude=Proj4js.common.HALF_PI;}\nelse if(Y<0)\n{Longitude=-Proj4js.common.HALF_PI;}\nelse\n{At_Pole=true;Longitude=0.0;if(Z>0.0)\n{Latitude=Proj4js.common.HALF_PI;}\nelse if(Z<0.0)\n{Latitude=-Proj4js.common.HALF_PI;}\nelse\n{Latitude=Proj4js.common.HALF_PI;Height=-this.b;return;}}}\nW2=X*X+Y*Y;W=Math.sqrt(W2);T0=Z*Proj4js.common.AD_C;S0=Math.sqrt(T0*T0+W2);Sin_B0=T0/S0;Cos_B0=W/S0;Sin3_B0=Sin_B0*Sin_B0*Sin_B0;T1=Z+this.b*this.ep2*Sin3_B0;Sum=W-this.a*this.es*Cos_B0*Cos_B0*Cos_B0;S1=Math.sqrt(T1*T1+Sum*Sum);Sin_p1=T1/S1;Cos_p1=Sum/S1;Rn=this.a/Math.sqrt(1.0-this.es*Sin_p1*Sin_p1);if(Cos_p1>=Proj4js.common.COS_67P5)\n{Height=W/Cos_p1-Rn;}\nelse if(Cos_p1<=-Proj4js.common.COS_67P5)\n{Height=W/-Cos_p1-Rn;}\nelse\n{Height=Z/Sin_p1+Rn*(this.es-1.0);}\nif(At_Pole==false)\n{Latitude=Math.atan(Sin_p1/Cos_p1);}\np.x=Longitude;p.y=Latitude;p.z=Height;return p;},geocentric_to_wgs84:function(p){if(this.datum_type==Proj4js.common.PJD_3PARAM)\n{p.x+=this.datum_params[0];p.y+=this.datum_params[1];p.z+=this.datum_params[2];}\nelse if(this.datum_type==Proj4js.common.PJD_7PARAM)\n{var Dx_BF=this.datum_params[0];var Dy_BF=this.datum_params[1];var Dz_BF=this.datum_params[2];var Rx_BF=this.datum_params[3];var Ry_BF=this.datum_params[4];var Rz_BF=this.datum_params[5];var M_BF=this.datum_params[6];var x_out=M_BF*(p.x-Rz_BF*p.y+Ry_BF*p.z)+Dx_BF;var y_out=M_BF*(Rz_BF*p.x+p.y-Rx_BF*p.z)+Dy_BF;var z_out=M_BF*(-Ry_BF*p.x+Rx_BF*p.y+p.z)+Dz_BF;p.x=x_out;p.y=y_out;p.z=z_out;}},geocentric_from_wgs84:function(p){if(this.datum_type==Proj4js.common.PJD_3PARAM)\n{p.x-=this.datum_params[0];p.y-=this.datum_params[1];p.z-=this.datum_params[2];}\nelse if(this.datum_type==Proj4js.common.PJD_7PARAM)\n{var Dx_BF=this.datum_params[0];var Dy_BF=this.datum_params[1];var Dz_BF=this.datum_params[2];var Rx_BF=this.datum_params[3];var Ry_BF=this.datum_params[4];var Rz_BF=this.datum_params[5];var M_BF=this.datum_params[6];var x_tmp=(p.x-Dx_BF)/M_BF;var y_tmp=(p.y-Dy_BF)/M_BF;var z_tmp=(p.z-Dz_BF)/M_BF;p.x=x_tmp+Rz_BF*y_tmp-Ry_BF*z_tmp;p.y=-Rz_BF*x_tmp+y_tmp+Rx_BF*z_tmp;p.z=Ry_BF*x_tmp-Rx_BF*y_tmp+z_tmp;}}});Proj4js.Point=Proj4js.Class({initialize:function(x,y,z){if(typeof x=='object'){this.x=x[0];this.y=x[1];this.z=x[2]||0.0;}else if(typeof x=='string'){var coords=x.split(',');this.x=parseFloat(coords[0]);this.y=parseFloat(coords[1]);this.z=parseFloat(coords[2])||0.0;}else{this.x=x;this.y=y;this.z=z||0.0;}},clone:function(){return new Proj4js.Point(this.x,this.y,this.z);},toString:function(){return(\"x=\"+this.x+\",y=\"+this.y);},toShortString:function(){return(this.x+\", \"+this.y);}});Proj4js.PrimeMeridian={\"greenwich\":0.0,\"lisbon\":-9.131906111111,\"paris\":2.337229166667,\"bogota\":-74.080916666667,\"madrid\":-3.687938888889,\"rome\":12.452333333333,\"bern\":7.439583333333,\"jakarta\":106.807719444444,\"ferro\":-17.666666666667,\"brussels\":4.367975,\"stockholm\":18.058277777778,\"athens\":23.7163375,\"oslo\":10.722916666667};Proj4js.Ellipsoid={\"MERIT\":{a:6378137.0,rf:298.257,ellipseName:\"MERIT 1983\"},\"SGS85\":{a:6378136.0,rf:298.257,ellipseName:\"Soviet Geodetic System 85\"},\"GRS80\":{a:6378137.0,rf:298.257222101,ellipseName:\"GRS 1980(IUGG, 1980)\"},\"IAU76\":{a:6378140.0,rf:298.257,ellipseName:\"IAU 1976\"},\"airy\":{a:6377563.396,b:6356256.910,ellipseName:\"Airy 1830\"},\"APL4.\":{a:6378137,rf:298.25,ellipseName:\"Appl. Physics. 1965\"},\"NWL9D\":{a:6378145.0,rf:298.25,ellipseName:\"Naval Weapons Lab., 1965\"},\"mod_airy\":{a:6377340.189,b:6356034.446,ellipseName:\"Modified Airy\"},\"andrae\":{a:6377104.43,rf:300.0,ellipseName:\"Andrae 1876 (Den., Iclnd.)\"},\"aust_SA\":{a:6378160.0,rf:298.25,ellipseName:\"Australian Natl & S. Amer. 1969\"},\"GRS67\":{a:6378160.0,rf:298.2471674270,ellipseName:\"GRS 67(IUGG 1967)\"},\"bessel\":{a:6377397.155,rf:299.1528128,ellipseName:\"Bessel 1841\"},\"bess_nam\":{a:6377483.865,rf:299.1528128,ellipseName:\"Bessel 1841 (Namibia)\"},\"clrk66\":{a:6378206.4,b:6356583.8,ellipseName:\"Clarke 1866\"},\"clrk80\":{a:6378249.145,rf:293.4663,ellipseName:\"Clarke 1880 mod.\"},\"CPM\":{a:6375738.7,rf:334.29,ellipseName:\"Comm. des Poids et Mesures 1799\"},\"delmbr\":{a:6376428.0,rf:311.5,ellipseName:\"Delambre 1810 (Belgium)\"},\"engelis\":{a:6378136.05,rf:298.2566,ellipseName:\"Engelis 1985\"},\"evrst30\":{a:6377276.345,rf:300.8017,ellipseName:\"Everest 1830\"},\"evrst48\":{a:6377304.063,rf:300.8017,ellipseName:\"Everest 1948\"},\"evrst56\":{a:6377301.243,rf:300.8017,ellipseName:\"Everest 1956\"},\"evrst69\":{a:6377295.664,rf:300.8017,ellipseName:\"Everest 1969\"},\"evrstSS\":{a:6377298.556,rf:300.8017,ellipseName:\"Everest (Sabah & Sarawak)\"},\"fschr60\":{a:6378166.0,rf:298.3,ellipseName:\"Fischer (Mercury Datum) 1960\"},\"fschr60m\":{a:6378155.0,rf:298.3,ellipseName:\"Fischer 1960\"},\"fschr68\":{a:6378150.0,rf:298.3,ellipseName:\"Fischer 1968\"},\"helmert\":{a:6378200.0,rf:298.3,ellipseName:\"Helmert 1906\"},\"hough\":{a:6378270.0,rf:297.0,ellipseName:\"Hough\"},\"intl\":{a:6378388.0,rf:297.0,ellipseName:\"International 1909 (Hayford)\"},\"kaula\":{a:6378163.0,rf:298.24,ellipseName:\"Kaula 1961\"},\"lerch\":{a:6378139.0,rf:298.257,ellipseName:\"Lerch 1979\"},\"mprts\":{a:6397300.0,rf:191.0,ellipseName:\"Maupertius 1738\"},\"new_intl\":{a:6378157.5,b:6356772.2,ellipseName:\"New International 1967\"},\"plessis\":{a:6376523.0,rf:6355863.0,ellipseName:\"Plessis 1817 (France)\"},\"krass\":{a:6378245.0,rf:298.3,ellipseName:\"Krassovsky, 1942\"},\"SEasia\":{a:6378155.0,b:6356773.3205,ellipseName:\"Southeast Asia\"},\"walbeck\":{a:6376896.0,b:6355834.8467,ellipseName:\"Walbeck\"},\"WGS60\":{a:6378165.0,rf:298.3,ellipseName:\"WGS 60\"},\"WGS66\":{a:6378145.0,rf:298.25,ellipseName:\"WGS 66\"},\"WGS72\":{a:6378135.0,rf:298.26,ellipseName:\"WGS 72\"},\"WGS84\":{a:6378137.0,rf:298.257223563,ellipseName:\"WGS 84\"},\"sphere\":{a:6370997.0,b:6370997.0,ellipseName:\"Normal Sphere (r=6370997)\"}};Proj4js.Datum={\"WGS84\":{towgs84:\"0,0,0\",ellipse:\"WGS84\",datumName:\"WGS84\"},\"GGRS87\":{towgs84:\"-199.87,74.79,246.62\",ellipse:\"GRS80\",datumName:\"Greek_Geodetic_Reference_System_1987\"},\"NAD83\":{towgs84:\"0,0,0\",ellipse:\"GRS80\",datumName:\"North_American_Datum_1983\"},\"NAD27\":{nadgrids:\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",ellipse:\"clrk66\",datumName:\"North_American_Datum_1927\"},\"potsdam\":{towgs84:\"606.0,23.0,413.0\",ellipse:\"bessel\",datumName:\"Potsdam Rauenberg 1950 DHDN\"},\"carthage\":{towgs84:\"-263.0,6.0,431.0\",ellipse:\"clark80\",datumName:\"Carthage 1934 Tunisia\"},\"hermannskogel\":{towgs84:\"653.0,-212.0,449.0\",ellipse:\"bessel\",datumName:\"Hermannskogel\"},\"ire65\":{towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"mod_airy\",datumName:\"Ireland 1965\"},\"nzgd49\":{towgs84:\"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",ellipse:\"intl\",datumName:\"New Zealand Geodetic Datum 1949\"},\"OSGB36\":{towgs84:\"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",ellipse:\"airy\",datumName:\"Airy 1830\"}};Proj4js.WGS84=new Proj4js.Proj('WGS84');Proj4js.Datum['OSB36']=Proj4js.Datum['OSGB36'];Proj4js.Proj.aea={init:function(){if(Math.abs(this.lat1+this.lat2)<Proj4js.common.EPSLN){Proj4js.reportError(\"aeaInitEqualLatitudes\");return;}\nthis.temp=this.b/this.a;this.es=1.0-Math.pow(this.temp,2);this.e3=Math.sqrt(this.es);this.sin_po=Math.sin(this.lat1);this.cos_po=Math.cos(this.lat1);this.t1=this.sin_po\nthis.con=this.sin_po;this.ms1=Proj4js.common.msfnz(this.e3,this.sin_po,this.cos_po);this.qs1=Proj4js.common.qsfnz(this.e3,this.sin_po,this.cos_po);this.sin_po=Math.sin(this.lat2);this.cos_po=Math.cos(this.lat2);this.t2=this.sin_po;this.ms2=Proj4js.common.msfnz(this.e3,this.sin_po,this.cos_po);this.qs2=Proj4js.common.qsfnz(this.e3,this.sin_po,this.cos_po);this.sin_po=Math.sin(this.lat0);this.cos_po=Math.cos(this.lat0);this.t3=this.sin_po;this.qs0=Proj4js.common.qsfnz(this.e3,this.sin_po,this.cos_po);if(Math.abs(this.lat1-this.lat2)>Proj4js.common.EPSLN){this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1);}else{this.ns0=this.con;}\nthis.c=this.ms1*this.ms1+this.ns0*this.qs1;this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0;},forward:function(p){var lon=p.x;var lat=p.y;this.sin_phi=Math.sin(lat);this.cos_phi=Math.cos(lat);var qs=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi);var rh1=this.a*Math.sqrt(this.c-this.ns0*qs)/this.ns0;var theta=this.ns0*Proj4js.common.adjust_lon(lon-this.long0);var x=rh1*Math.sin(theta)+this.x0;var y=this.rh-rh1*Math.cos(theta)+this.y0;p.x=x;p.y=y;return p;},inverse:function(p){var rh1,qs,con,theta,lon,lat;p.x-=this.x0;p.y=this.rh-p.y+this.y0;if(this.ns0>=0){rh1=Math.sqrt(p.x*p.x+p.y*p.y);con=1.0;}else{rh1=-Math.sqrt(p.x*p.x+p.y*p.y);con=-1.0;}\ntheta=0.0;if(rh1!=0.0){theta=Math.atan2(con*p.x,con*p.y);}\ncon=rh1*this.ns0/this.a;qs=(this.c-con*con)/this.ns0;if(this.e3>=1e-10){con=1-.5*(1.0-this.es)*Math.log((1.0-this.e3)/(1.0+this.e3))/this.e3;if(Math.abs(Math.abs(con)-Math.abs(qs))>.0000000001){lat=this.phi1z(this.e3,qs);}else{if(qs>=0){lat=.5*PI;}else{lat=-.5*PI;}}}else{lat=this.phi1z(e3,qs);}\nlon=Proj4js.common.adjust_lon(theta/this.ns0+this.long0);p.x=lon;p.y=lat;return p;},phi1z:function(eccent,qs){var con,com,dphi;var phi=Proj4js.common.asinz(.5*qs);if(eccent<Proj4js.common.EPSLN)return phi;var eccnts=eccent*eccent;for(var i=1;i<=25;i++){sinphi=Math.sin(phi);cosphi=Math.cos(phi);con=eccent*sinphi;com=1.0-con*con;dphi=.5*com*com/cosphi*(qs/(1.0-eccnts)-sinphi/com+.5/eccent*Math.log((1.0-con)/(1.0+con)));phi=phi+dphi;if(Math.abs(dphi)<=1e-7)return phi;}\nProj4js.reportError(\"aea:phi1z:Convergence error\");return null;}};Proj4js.Proj.sterea={dependsOn:'gauss',init:function(){Proj4js.Proj['gauss'].init.apply(this);if(!this.rc){Proj4js.reportError(\"sterea:init:E_ERROR_0\");return;}\nthis.sinc0=Math.sin(this.phic0);this.cosc0=Math.cos(this.phic0);this.R2=2.0*this.rc;if(!this.title)this.title=\"Oblique Stereographic Alternative\";},forward:function(p){p.x=Proj4js.common.adjust_lon(p.x-this.long0);Proj4js.Proj['gauss'].forward.apply(this,[p]);sinc=Math.sin(p.y);cosc=Math.cos(p.y);cosl=Math.cos(p.x);k=this.k0*this.R2/(1.0+this.sinc0*sinc+this.cosc0*cosc*cosl);p.x=k*cosc*Math.sin(p.x);p.y=k*(this.cosc0*sinc-this.sinc0*cosc*cosl);p.x=this.a*p.x+this.x0;p.y=this.a*p.y+this.y0;return p;},inverse:function(p){var lon,lat;p.x=(p.x-this.x0)/this.a;p.y=(p.y-this.y0)/this.a;p.x/=this.k0;p.y/=this.k0;if((rho=Math.sqrt(p.x*p.x+p.y*p.y))){c=2.0*Math.atan2(rho,this.R2);sinc=Math.sin(c);cosc=Math.cos(c);lat=Math.asin(cosc*this.sinc0+p.y*sinc*this.cosc0/rho);lon=Math.atan2(p.x*sinc,rho*this.cosc0*cosc-p.y*this.sinc0*sinc);}else{lat=this.phic0;lon=0.;}\np.x=lon;p.y=lat;Proj4js.Proj['gauss'].inverse.apply(this,[p]);p.x=Proj4js.common.adjust_lon(p.x+this.long0);return p;}};function phi4z(eccent,e0,e1,e2,e3,a,b,c,phi){var sinphi,sin2ph,tanph,ml,mlp,con1,con2,con3,dphi,i;phi=a;for(i=1;i<=15;i++){sinphi=Math.sin(phi);tanphi=Math.tan(phi);c=tanphi*Math.sqrt(1.0-eccent*sinphi*sinphi);sin2ph=Math.sin(2.0*phi);ml=e0*phi-e1*sin2ph+e2*Math.sin(4.0*phi)-e3*Math.sin(6.0*phi);mlp=e0-2.0*e1*Math.cos(2.0*phi)+4.0*e2*Math.cos(4.0*phi)-6.0*e3*Math.cos(6.0*phi);con1=2.0*ml+c*(ml*ml+b)-2.0*a*(c*ml+1.0);con2=eccent*sin2ph*(ml*ml+b-2.0*a*ml)/(2.0*c);con3=2.0*(a-ml)*(c*mlp-2.0/sin2ph)-2.0*mlp;dphi=con1/(con2+con3);phi+=dphi;if(Math.abs(dphi)<=.0000000001)return(phi);}\nProj4js.reportError(\"phi4z: No convergence\");return null;}\nfunction e4fn(x){var con,com;con=1.0+x;com=1.0-x;return(Math.sqrt((Math.pow(con,con))*(Math.pow(com,com))));}\nProj4js.Proj.poly={init:function(){var temp;if(this.lat0=0)this.lat0=90;this.temp=this.b/this.a;this.es=1.0-Math.pow(this.temp,2);this.e=Math.sqrt(this.es);this.e0=Proj4js.common.e0fn(this.es);this.e1=Proj4js.common.e1fn(this.es);this.e2=Proj4js.common.e2fn(this.es);this.e3=Proj4js.common.e3fn(this.es);this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0);},forward:function(p){var sinphi,cosphi;var al;var c;var con,ml;var ms;var x,y;var lon=p.x;var lat=p.y;con=Proj4js.common.adjust_lon(lon-this.long0);if(Math.abs(lat)<=.0000001){x=this.x0+this.a*con;y=this.y0-this.a*this.ml0;}else{sinphi=Math.sin(lat);cosphi=Math.cos(lat);ml=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,lat);ms=Proj4js.common.msfnz(this.e,sinphi,cosphi);con=sinphi;x=this.x0+this.a*ms*Math.sin(con)/sinphi;y=this.y0+this.a*(ml-this.ml0+ms*(1.0-Math.cos(con))/sinphi);}\np.x=x;p.y=y;return p;},inverse:function(p){var sin_phi,cos_phi;var al;var b;var c;var con,ml;var iflg;var lon,lat;p.x-=this.x0;p.y-=this.y0;al=this.ml0+p.y/this.a;iflg=0;if(Math.abs(al)<=.0000001){lon=p.x/this.a+this.long0;lat=0.0;}else{b=al*al+(p.x/this.a)*(p.x/this.a);iflg=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,b,c,lat);if(iflg!=1)return(iflg);lon=Proj4js.common.adjust_lon((asinz(p.x*c/this.a)/Math.sin(lat))+this.long0);}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.equi={init:function(){if(!this.x0)this.x0=0;if(!this.y0)this.y0=0;if(!this.lat0)this.lat0=0;if(!this.long0)this.long0=0;},forward:function(p){var lon=p.x;var lat=p.y;var dlon=Proj4js.common.adjust_lon(lon-this.long0);var x=this.x0+this.a*dlon*Math.cos(this.lat0);var y=this.y0+this.a*lat;this.t1=x;this.t2=Math.cos(this.lat0);p.x=x;p.y=y;return p;},inverse:function(p){p.x-=this.x0;p.y-=this.y0;var lat=p.y/this.a;if(Math.abs(lat)>Proj4js.common.HALF_PI){Proj4js.reportError(\"equi:Inv:DataError\");}\nvar lon=Proj4js.common.adjust_lon(this.long0+p.x/(this.a*Math.cos(this.lat0)));p.x=lon;p.y=lat;}};Proj4js.Proj.merc={init:function(){if(this.lat_ts){if(this.sphere){this.k0=Math.cos(this.lat_ts);}else{this.k0=Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts));}}},forward:function(p){var lon=p.x;var lat=p.y;if(lat*Proj4js.common.R2D>90.0&&lat*Proj4js.common.R2D<-90.0&&lon*Proj4js.common.R2D>180.0&&lon*Proj4js.common.R2D<-180.0){Proj4js.reportError(\"merc:forward: llInputOutOfRange: \"+lon+\" : \"+lat);return null;}\nvar x,y;if(Math.abs(Math.abs(lat)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN){Proj4js.reportError(\"merc:forward: ll2mAtPoles\");return null;}else{if(this.sphere){x=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(lon-this.long0);y=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+0.5*lat));}else{var sinphi=Math.sin(lat);var ts=Proj4js.common.tsfnz(this.e,lat,sinphi);x=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(lon-this.long0);y=this.y0-this.a*this.k0*Math.log(ts);}\np.x=x;p.y=y;return p;}},inverse:function(p){var x=p.x-this.x0;var y=p.y-this.y0;var lon,lat;if(this.sphere){lat=Proj4js.common.HALF_PI-2.0*Math.atan(Math.exp(-y/this.a*this.k0));}else{var ts=Math.exp(-y/(this.a*this.k0));lat=Proj4js.common.phi2z(this.e,ts);if(lat==-9999){Proj4js.reportError(\"merc:inverse: lat = -9999\");return null;}}\nlon=Proj4js.common.adjust_lon(this.long0+x/(this.a*this.k0));p.x=lon;p.y=lat;return p;}};Proj4js.Proj.utm={dependsOn:'tmerc',init:function(){if(!this.zone){Proj4js.reportError(\"utm:init: zone must be specified for UTM\");return;}\nthis.lat0=0.0;this.long0=((6*Math.abs(this.zone))-183)*Proj4js.common.D2R;this.x0=500000.0;this.y0=this.utmSouth?10000000.0:0.0;this.k0=0.9996;Proj4js.Proj['tmerc'].init.apply(this);this.forward=Proj4js.Proj['tmerc'].forward;this.inverse=Proj4js.Proj['tmerc'].inverse;}};Proj4js.Proj.eqdc={init:function(){if(!this.mode)this.mode=0;this.temp=this.b/this.a;this.es=1.0-Math.pow(this.temp,2);this.e=Math.sqrt(this.es);this.e0=Proj4js.common.e0fn(this.es);this.e1=Proj4js.common.e1fn(this.es);this.e2=Proj4js.common.e2fn(this.es);this.e3=Proj4js.common.e3fn(this.es);this.sinphi=Math.sin(this.lat1);this.cosphi=Math.cos(this.lat1);this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi);this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1);if(this.mode!=0){if(Math.abs(this.lat1+this.lat2)<Proj4js.common.EPSLN){Proj4js.reportError(\"eqdc:Init:EqualLatitudes\");}\nthis.sinphi=Math.sin(this.lat2);this.cosphi=Math.cos(this.lat2);this.ms2=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi);this.ml2=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat2);if(Math.abs(this.lat1-this.lat2)>=Proj4js.common.EPSLN){this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1);}else{this.ns=this.sinphi;}}else{this.ns=this.sinphi;}\nthis.g=this.ml1+this.ms1/this.ns;this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0);this.rh=this.a*(this.g-this.ml0);},forward:function(p){var lon=p.x;var lat=p.y;var ml=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,lat);var rh1=this.a*(this.g-ml);var theta=this.ns*Proj4js.common.adjust_lon(lon-this.long0);var x=this.x0+rh1*Math.sin(theta);var y=this.y0+this.rh-rh1*Math.cos(theta);p.x=x;p.y=y;return p;},inverse:function(p){p.x-=this.x0;p.y=this.rh-p.y+this.y0;var con,rh1;if(this.ns>=0){var rh1=Math.sqrt(p.x*p.x+p.y*p.y);var con=1.0;}else{rh1=-Math.sqrt(p.x*p.x+p.y*p.y);con=-1.0;}\nvar theta=0.0;if(rh1!=0.0)theta=Math.atan2(con*p.x,con*p.y);var ml=this.g-rh1/this.a;var lat=this.phi3z(this.ml,this.e0,this.e1,this.e2,this.e3);var lon=Proj4js.common.adjust_lon(this.long0+theta/this.ns);p.x=lon;p.y=lat;return p;},phi3z:function(ml,e0,e1,e2,e3){var phi;var dphi;phi=ml;for(var i=0;i<15;i++){dphi=(ml+e1*Math.sin(2.0*phi)-e2*Math.sin(4.0*phi)+e3*Math.sin(6.0*phi))/e0-phi;phi+=dphi;if(Math.abs(dphi)<=.0000000001){return phi;}}\nProj4js.reportError(\"PHI3Z-CONV:Latitude failed to converge after 15 iterations\");return null;}};Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es);this.e1=Proj4js.common.e1fn(this.es);this.e2=Proj4js.common.e2fn(this.es);this.e3=Proj4js.common.e3fn(this.es);this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0);},forward:function(p){var lon=p.x;var lat=p.y;var delta_lon=Proj4js.common.adjust_lon(lon-this.long0);var con;var x,y;var sin_phi=Math.sin(lat);var cos_phi=Math.cos(lat);if(this.sphere){var b=cos_phi*Math.sin(delta_lon);if((Math.abs(Math.abs(b)-1.0))<.0000000001){Proj4js.reportError(\"tmerc:forward: Point projects into infinity\");return(93);}else{x=.5*this.a*this.k0*Math.log((1.0+b)/(1.0-b));con=Math.acos(cos_phi*Math.cos(delta_lon)/Math.sqrt(1.0-b*b));if(lat<0)con=-con;y=this.a*this.k0*(con-this.lat0);}}else{var al=cos_phi*delta_lon;var als=Math.pow(al,2);var c=this.ep2*Math.pow(cos_phi,2);var tq=Math.tan(lat);var t=Math.pow(tq,2);con=1.0-this.es*Math.pow(sin_phi,2);var n=this.a/Math.sqrt(con);var ml=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,lat);x=this.k0*n*al*(1.0+als/6.0*(1.0-t+c+als/20.0*(5.0-18.0*t+Math.pow(t,2)+72.0*c-58.0*this.ep2)))+this.x0;y=this.k0*(ml-this.ml0+n*tq*(als*(0.5+als/24.0*(5.0-t+9.0*c+4.0*Math.pow(c,2)+als/30.0*(61.0-58.0*t+Math.pow(t,2)+600.0*c-330.0*this.ep2)))))+this.y0;}\np.x=x;p.y=y;return p;},inverse:function(p){var con,phi;var delta_phi;var i;var max_iter=6;var lat,lon;if(this.sphere){var f=Math.exp(p.x/(this.a*this.k0));var g=.5*(f-1/f);var temp=this.lat0+p.y/(this.a*this.k0);var h=Math.cos(temp);con=Math.sqrt((1.0-h*h)/(1.0+g*g));lat=Math.asinz(con);if(temp<0)\nlat=-lat;if((g==0)&&(h==0)){lon=this.long0;}else{lon=Proj4js.common.adjust_lon(Math.atan2(g,h)+this.long0);}}else{var x=p.x-this.x0;var y=p.y-this.y0;con=(this.ml0+y/this.k0)/this.a;phi=con;for(i=0;;i++){delta_phi=((con+this.e1*Math.sin(2.0*phi)-this.e2*Math.sin(4.0*phi)+this.e3*Math.sin(6.0*phi))/this.e0)-phi;phi+=delta_phi;if(Math.abs(delta_phi)<=Proj4js.common.EPSLN)break;if(i>=max_iter){Proj4js.reportError(\"tmerc:inverse: Latitude failed to converge\");return(95);}}\nif(Math.abs(phi)<Proj4js.common.HALF_PI){var sin_phi=Math.sin(phi);var cos_phi=Math.cos(phi);var tan_phi=Math.tan(phi);var c=this.ep2*Math.pow(cos_phi,2);var cs=Math.pow(c,2);var t=Math.pow(tan_phi,2);var ts=Math.pow(t,2);con=1.0-this.es*Math.pow(sin_phi,2);var n=this.a/Math.sqrt(con);var r=n*(1.0-this.es)/con;var d=x/(n*this.k0);var ds=Math.pow(d,2);lat=phi-(n*tan_phi*ds/r)*(0.5-ds/24.0*(5.0+3.0*t+10.0*c-4.0*cs-9.0*this.ep2-ds/30.0*(61.0+90.0*t+298.0*c+45.0*ts-252.0*this.ep2-3.0*cs)));lon=Proj4js.common.adjust_lon(this.long0+(d*(1.0-ds/6.0*(1.0+2.0*t+c-ds/20.0*(5.0-2.0*c+28.0*t-3.0*cs+8.0*this.ep2+24.0*ts)))/cos_phi));}else{lat=Proj4js.common.HALF_PI*Proj4js.common.sign(y);lon=this.long0;}}\np.x=lon;p.y=lat;return p;}};Proj4js.defs[\"GOOGLE\"]=\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\";Proj4js.defs[\"EPSG:900913\"]=Proj4js.defs[\"GOOGLE\"];Proj4js.Proj.gstmerc={init:function(){var temp=this.b/this.a;this.e=Math.sqrt(1.0-temp*temp);this.lc=this.long0;this.rs=Math.sqrt(1.0+this.e*this.e*Math.pow(Math.cos(this.lat0),4.0)/(1.0-this.e*this.e));var sinz=Math.sin(this.lat0);var pc=Math.asin(sinz/this.rs);var sinzpc=Math.sin(pc);this.cp=Proj4js.common.latiso(0.0,pc,sinzpc)-this.rs*Proj4js.common.latiso(this.e,this.lat0,sinz);this.n2=this.k0*this.a*Math.sqrt(1.0-this.e*this.e)/(1.0-this.e*this.e*sinz*sinz);this.xs=this.x0;this.ys=this.y0-this.n2*pc;if(!this.title)this.title=\"Gauss Schreiber transverse mercator\";},forward:function(p){var lon=p.x;var lat=p.y;var L=this.rs*(lon-this.lc);var Ls=this.cp+(this.rs*Proj4js.common.latiso(this.e,lat,Math.sin(lat)));var lat1=Math.asin(Math.sin(L)/Proj4js.common.cosh(Ls));var Ls1=Proj4js.common.latiso(0.0,lat1,Math.sin(lat1));p.x=this.xs+(this.n2*Ls1);p.y=this.ys+(this.n2*Math.atan(Proj4js.common.sinh(Ls)/Math.cos(L)));return p;},inverse:function(p){var x=p.x;var y=p.y;var L=Math.atan(Proj4js.common.sinh((x-this.xs)/this.n2)/Math.cos((y-this.ys)/this.n2));var lat1=Math.asin(Math.sin((y-this.ys)/this.n2)/Proj4js.common.cosh((x-this.xs)/this.n2));var LC=Proj4js.common.latiso(0.0,lat1,Math.sin(lat1));p.x=this.lc+L/this.rs;p.y=Proj4js.common.invlatiso(this.e,(LC-this.cp)/this.rs);return p;}};Proj4js.Proj.ortho={init:function(def){;this.sin_p14=Math.sin(this.lat0);this.cos_p14=Math.cos(this.lat0);},forward:function(p){var sinphi,cosphi;var dlon;var coslon;var ksp;var g;var lon=p.x;var lat=p.y;dlon=Proj4js.common.adjust_lon(lon-this.long0);sinphi=Math.sin(lat);cosphi=Math.cos(lat);coslon=Math.cos(dlon);g=this.sin_p14*sinphi+this.cos_p14*cosphi*coslon;ksp=1.0;if((g>0)||(Math.abs(g)<=Proj4js.common.EPSLN)){var x=this.a*ksp*cosphi*Math.sin(dlon);var y=this.y0+this.a*ksp*(this.cos_p14*sinphi-this.sin_p14*cosphi*coslon);}else{Proj4js.reportError(\"orthoFwdPointError\");}\np.x=x;p.y=y;return p;},inverse:function(p){var rh;var z;var sinz,cosz;var temp;var con;var lon,lat;p.x-=this.x0;p.y-=this.y0;rh=Math.sqrt(p.x*p.x+p.y*p.y);if(rh>this.a+.0000001){Proj4js.reportError(\"orthoInvDataError\");}\nz=Proj4js.common.asinz(rh/this.a);sinz=Math.sin(z);cosi=Math.cos(z);lon=this.long0;if(Math.abs(rh)<=Proj4js.common.EPSLN){lat=this.lat0;}\nlat=Proj4js.common.asinz(cosz*this.sin_p14+(y*sinz*this.cos_p14)/rh);con=Math.abs(lat0)-Proj4js.common.HALF_PI;if(Math.abs(con)<=Proj4js.common.EPSLN){if(this.lat0>=0){lon=Proj4js.common.adjust_lon(this.long0+Math.atan2(p.x,-p.y));}else{lon=Proj4js.common.adjust_lon(this.long0-Math.atan2(-p.x,p.y));}}\ncon=cosz-this.sin_p14*Math.sin(lat);if((Math.abs(con)>=Proj4js.common.EPSLN)||(Math.abs(x)>=Proj4js.common.EPSLN)){lon=Proj4js.common.adjust_lon(this.long0+Math.atan2((p.x*sinz*this.cos_p14),(con*rh)));}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.somerc={init:function(){var phy0=this.lat0;this.lambda0=this.long0;var sinPhy0=Math.sin(phy0);var semiMajorAxis=this.a;var invF=this.rf;var flattening=1/invF;var e2=2*flattening-Math.pow(flattening,2);var e=this.e=Math.sqrt(e2);this.R=semiMajorAxis*Math.sqrt(1-e2)/(1-e2*Math.pow(sinPhy0,2.0));this.alpha=Math.sqrt(1+e2/(1-e2)*Math.pow(Math.cos(phy0),4.0));this.b0=Math.asin(sinPhy0/this.alpha);this.K=Math.log(Math.tan(Math.PI/4.0+this.b0/2.0))\n-this.alpha*Math.log(Math.tan(Math.PI/4.0+phy0/2.0))\n+this.alpha*e/2*Math.log((1+e*sinPhy0)/(1-e*sinPhy0));},forward:function(p){var Sa1=Math.log(Math.tan(Math.PI/4.0-p.y/2.0));var Sa2=this.e/2.0*Math.log((1+this.e*Math.sin(p.y))/(1-this.e*Math.sin(p.y)));var S=-this.alpha*(Sa1+Sa2)+this.K;var b=2.0*(Math.atan(Math.exp(S))-Math.PI/4.0);var I=this.alpha*(p.x-this.lambda0);var rotI=Math.atan(Math.sin(I)/(Math.sin(this.b0)*Math.tan(b)+\nMath.cos(this.b0)*Math.cos(I)));var rotB=Math.asin(Math.cos(this.b0)*Math.sin(b)-\nMath.sin(this.b0)*Math.cos(b)*Math.cos(I));p.y=this.R/2.0*Math.log((1+Math.sin(rotB))/(1-Math.sin(rotB)))\n+this.y0;p.x=this.R*rotI+this.x0;return p;},inverse:function(p){var Y=p.x-this.x0;var X=p.y-this.y0;var rotI=Y/this.R;var rotB=2*(Math.atan(Math.exp(X/this.R))-Math.PI/4.0);var b=Math.asin(Math.cos(this.b0)*Math.sin(rotB)\n+Math.sin(this.b0)*Math.cos(rotB)*Math.cos(rotI));var I=Math.atan(Math.sin(rotI)/(Math.cos(this.b0)*Math.cos(rotI)-Math.sin(this.b0)*Math.tan(rotB)));var lambda=this.lambda0+I/this.alpha;var S=0.0;var phy=b;var prevPhy=-1000.0;var iteration=0;while(Math.abs(phy-prevPhy)>0.0000001)\n{if(++iteration>20)\n{Proj4js.reportError(\"omercFwdInfinity\");return;}\nS=1.0/this.alpha*(Math.log(Math.tan(Math.PI/4.0+b/2.0))-this.K)\n+this.e*Math.log(Math.tan(Math.PI/4.0\n+Math.asin(this.e*Math.sin(phy))/2.0));prevPhy=phy;phy=2.0*Math.atan(Math.exp(S))-Math.PI/2.0;}\np.x=lambda;p.y=phy;return p;}};Proj4js.Proj.stere={ssfn_:function(phit,sinphi,eccen){sinphi*=eccen;return(Math.tan(.5*(Proj4js.common.HALF_PI+phit))*Math.pow((1.-sinphi)/(1.+sinphi),.5*eccen));},TOL:1.e-8,NITER:8,CONV:1.e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if((Math.abs(t)-Proj4js.common.HALF_PI)<Proj4js.common.EPSLN){this.mode=this.lat0<0.?this.S_POLE:this.N_POLE;}else{this.mode=t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT;}\nthis.phits=Math.abs(this.phits);if(this.es){var X;switch(this.mode){case this.N_POLE:case this.S_POLE:if(Math.abs(this.phits-Proj4js.common.HALF_PI)<Proj4js.common.EPSLN){this.akm1=2.*this.k0/Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e));}else{t=Math.sin(this.phits);this.akm1=Math.cos(this.phits)/Proj4js.common.tsfnz(this.e,this.phits,t);t*=this.e;this.akm1/=Math.sqrt(1.-t*t);}\nbreak;case this.EQUIT:this.akm1=2.*this.k0;break;case this.OBLIQ:t=Math.sin(this.lat0);X=2.*Math.atan(this.ssfn_(this.lat0,t,this.e))-Proj4js.common.HALF_PI;t*=this.e;this.akm1=2.*this.k0*Math.cos(this.lat0)/Math.sqrt(1.-t*t);this.sinX1=Math.sin(X);this.cosX1=Math.cos(X);break;}}else{switch(this.mode){case this.OBLIQ:this.sinph0=Math.sin(this.lat0);this.cosph0=Math.cos(this.lat0);case this.EQUIT:this.akm1=2.*this.k0;break;case this.S_POLE:case this.N_POLE:this.akm1=Math.abs(this.phits-Proj4js.common.HALF_PI)>=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2.*this.k0;break;}}},forward:function(p){var lon=p.x;var lat=p.y;var x,y\nif(this.sphere){var sinphi,cosphi,coslam,sinlam;sinphi=Math.sin(lat);cosphi=Math.cos(lat);coslam=Math.cos(lon);sinlam=Math.sin(lon);switch(this.mode){case this.EQUIT:y=1.+cosphi*coslam;if(y<=Proj4js.common.EPSLN){F_ERROR;}\ny=this.akm1/y;x=y*cosphi*sinlam;y*=sinphi;break;case this.OBLIQ:y=1.+this.sinph0*sinphi+this.cosph0*cosphi*coslam;if(y<=Proj4js.common.EPSLN){F_ERROR;}\ny=this.akm1/y;x=y*cosphi*sinlam;y*=this.cosph0*sinphi-this.sinph0*cosphi*coslam;break;case this.N_POLE:coslam=-coslam;lat=-lat;case this.S_POLE:if(Math.abs(lat-Proj4js.common.HALF_PI)<this.TOL){F_ERROR;}\ny=this.akm1*Math.tan(Proj4js.common.FORTPI+.5*lat)\nx=sinlam*y;y*=coslam;break;}}else{coslam=Math.cos(lon);sinlam=Math.sin(lon);sinphi=Math.sin(lat);if(this.mode==this.OBLIQ||this.mode==this.EQUIT){X=2.*Math.atan(this.ssfn_(lat,sinphi,this.e));sinX=Math.sin(X-Proj4js.common.HALF_PI);cosX=Math.cos(X);}\nswitch(this.mode){case this.OBLIQ:A=this.akm1/(this.cosX1*(1.+this.sinX1*sinX+this.cosX1*cosX*coslam));y=A*(this.cosX1*sinX-this.sinX1*cosX*coslam);x=A*cosX;break;case this.EQUIT:A=2.*this.akm1/(1.+cosX*coslam);y=A*sinX;x=A*cosX;break;case this.S_POLE:lat=-lat;coslam=-coslam;sinphi=-sinphi;case this.N_POLE:x=this.akm1*Proj4js.common.tsfnz(this.e,lat,sinphi);y=-x*coslam;break;}\nx=x*sinlam;}\np.x=x*this.a+this.x0;p.y=y*this.a+this.y0;return p;},inverse:function(p){var x=(p.x-this.x0)/this.a;var y=(p.y-this.y0)/this.a;var lon,lat\nvar cosphi,sinphi,tp=0.0,phi_l=0.0,rho,halfe=0.0,pi2=0.0;var i;if(this.sphere){var c,rh,sinc,cosc;rh=Math.sqrt(x*x+y*y);c=2.*Math.atan(rh/this.akm1);sinc=Math.sin(c);cosc=Math.cos(c);lon=0.;switch(this.mode){case this.EQUIT:if(Math.abs(rh)<=Proj4js.common.EPSLN){lat=0.;}else{lat=Math.asin(y*sinc/rh);}\nif(cosc!=0.||x!=0.)lon=Math.atan2(x*sinc,cosc*rh);break;case this.OBLIQ:if(Math.abs(rh)<=Proj4js.common.EPSLN){lat=this.phi0;}else{lat=Math.asin(cosc*sinph0+y*sinc*cosph0/rh);}\nc=cosc-sinph0*Math.sin(lat);if(c!=0.||x!=0.){lon=Math.atan2(x*sinc*cosph0,c*rh);}\nbreak;case this.N_POLE:y=-y;case this.S_POLE:if(Math.abs(rh)<=Proj4js.common.EPSLN){lat=this.phi0;}else{lat=Math.asin(this.mode==this.S_POLE?-cosc:cosc);}\nlon=(x==0.&&y==0.)?0.:Math.atan2(x,y);break;}}else{rho=Math.sqrt(x*x+y*y);switch(this.mode){case this.OBLIQ:case this.EQUIT:tp=2.*Math.atan2(rho*this.cosX1,this.akm1);cosphi=Math.cos(tp);sinphi=Math.sin(tp);if(rho==0.0){phi_l=Math.asin(cosphi*this.sinX1);}else{phi_l=Math.asin(cosphi*this.sinX1+(y*sinphi*this.cosX1/rho));}\ntp=Math.tan(.5*(Proj4js.common.HALF_PI+phi_l));x*=sinphi;y=rho*this.cosX1*cosphi-y*this.sinX1*sinphi;pi2=Proj4js.common.HALF_PI;halfe=.5*this.e;break;case this.N_POLE:y=-y;case this.S_POLE:tp=-rho/this.akm1\nphi_l=Proj4js.common.HALF_PI-2.*Math.atan(tp);pi2=-Proj4js.common.HALF_PI;halfe=-.5*this.e;break;}\nfor(i=this.NITER;i--;phi_l=lat){sinphi=this.e*Math.sin(phi_l);lat=2.*Math.atan(tp*Math.pow((1.+sinphi)/(1.-sinphi),halfe))-pi2;if(Math.abs(phi_l-lat)<this.CONV){if(this.mode==this.S_POLE)lat=-lat;lon=(x==0.&&y==0.)?0.:Math.atan2(x,y);p.x=lon;p.y=lat\nreturn p;}}}}};Proj4js.Proj.nzmg={iterations:1,init:function(){this.A=new Array();this.A[1]=+0.6399175073;this.A[2]=-0.1358797613;this.A[3]=+0.063294409;this.A[4]=-0.02526853;this.A[5]=+0.0117879;this.A[6]=-0.0055161;this.A[7]=+0.0026906;this.A[8]=-0.001333;this.A[9]=+0.00067;this.A[10]=-0.00034;this.B_re=new Array();this.B_im=new Array();this.B_re[1]=+0.7557853228;this.B_im[1]=0.0;this.B_re[2]=+0.249204646;this.B_im[2]=+0.003371507;this.B_re[3]=-0.001541739;this.B_im[3]=+0.041058560;this.B_re[4]=-0.10162907;this.B_im[4]=+0.01727609;this.B_re[5]=-0.26623489;this.B_im[5]=-0.36249218;this.B_re[6]=-0.6870983;this.B_im[6]=-1.1651967;this.C_re=new Array();this.C_im=new Array();this.C_re[1]=+1.3231270439;this.C_im[1]=0.0;this.C_re[2]=-0.577245789;this.C_im[2]=-0.007809598;this.C_re[3]=+0.508307513;this.C_im[3]=-0.112208952;this.C_re[4]=-0.15094762;this.C_im[4]=+0.18200602;this.C_re[5]=+1.01418179;this.C_im[5]=+1.64497696;this.C_re[6]=+1.9660549;this.C_im[6]=+2.5127645;this.D=new Array();this.D[1]=+1.5627014243;this.D[2]=+0.5185406398;this.D[3]=-0.03333098;this.D[4]=-0.1052906;this.D[5]=-0.0368594;this.D[6]=+0.007317;this.D[7]=+0.01220;this.D[8]=+0.00394;this.D[9]=-0.0013;},forward:function(p){var lon=p.x;var lat=p.y;var delta_lat=lat-this.lat0;var delta_lon=lon-this.long0;var d_phi=delta_lat/Proj4js.common.SEC_TO_RAD*1E-5;var d_lambda=delta_lon;var d_phi_n=1;var d_psi=0;for(n=1;n<=10;n++){d_phi_n=d_phi_n*d_phi;d_psi=d_psi+this.A[n]*d_phi_n;}\nvar th_re=d_psi;var th_im=d_lambda;var th_n_re=1;var th_n_im=0;var th_n_re1;var th_n_im1;var z_re=0;var z_im=0;for(n=1;n<=6;n++){th_n_re1=th_n_re*th_re-th_n_im*th_im;th_n_im1=th_n_im*th_re+th_n_re*th_im;th_n_re=th_n_re1;th_n_im=th_n_im1;z_re=z_re+this.B_re[n]*th_n_re-this.B_im[n]*th_n_im;z_im=z_im+this.B_im[n]*th_n_re+this.B_re[n]*th_n_im;}\nx=(z_im*this.a)+this.x0;y=(z_re*this.a)+this.y0;p.x=x;p.y=y;return p;},inverse:function(p){var x=p.x;var y=p.y;var delta_x=x-this.x0;var delta_y=y-this.y0;var z_re=delta_y/this.a;var z_im=delta_x/this.a;var z_n_re=1;var z_n_im=0;var z_n_re1;var z_n_im1;var th_re=0;var th_im=0;for(n=1;n<=6;n++){z_n_re1=z_n_re*z_re-z_n_im*z_im;z_n_im1=z_n_im*z_re+z_n_re*z_im;z_n_re=z_n_re1;z_n_im=z_n_im1;th_re=th_re+this.C_re[n]*z_n_re-this.C_im[n]*z_n_im;th_im=th_im+this.C_im[n]*z_n_re+this.C_re[n]*z_n_im;}\nfor(i=0;i<this.iterations;i++){var th_n_re=th_re;var th_n_im=th_im;var th_n_re1;var th_n_im1;var num_re=z_re;var num_im=z_im;for(n=2;n<=6;n++){th_n_re1=th_n_re*th_re-th_n_im*th_im;th_n_im1=th_n_im*th_re+th_n_re*th_im;th_n_re=th_n_re1;th_n_im=th_n_im1;num_re=num_re+(n-1)*(this.B_re[n]*th_n_re-this.B_im[n]*th_n_im);num_im=num_im+(n-1)*(this.B_im[n]*th_n_re+this.B_re[n]*th_n_im);}\nth_n_re=1;th_n_im=0;var den_re=this.B_re[1];var den_im=this.B_im[1];for(n=2;n<=6;n++){th_n_re1=th_n_re*th_re-th_n_im*th_im;th_n_im1=th_n_im*th_re+th_n_re*th_im;th_n_re=th_n_re1;th_n_im=th_n_im1;den_re=den_re+n*(this.B_re[n]*th_n_re-this.B_im[n]*th_n_im);den_im=den_im+n*(this.B_im[n]*th_n_re+this.B_re[n]*th_n_im);}\nvar den2=den_re*den_re+den_im*den_im;th_re=(num_re*den_re+num_im*den_im)/den2;th_im=(num_im*den_re-num_re*den_im)/den2;}\nvar d_psi=th_re;var d_lambda=th_im;var d_psi_n=1;var d_phi=0;for(n=1;n<=9;n++){d_psi_n=d_psi_n*d_psi;d_phi=d_phi+this.D[n]*d_psi_n;}\nvar lat=this.lat0+(d_phi*Proj4js.common.SEC_TO_RAD*1E5);var lon=this.long0+d_lambda;p.x=lon;p.y=lat;return p;}};Proj4js.Proj.mill={init:function(){},forward:function(p){var lon=p.x;var lat=p.y;dlon=Proj4js.common.adjust_lon(lon-this.long0);var x=this.x0+this.a*dlon;var y=this.y0+this.a*Math.log(Math.tan((Proj4js.common.PI/4.0)+(lat/2.5)))*1.25;p.x=x;p.y=y;return p;},inverse:function(p){p.x-=this.x0;p.y-=this.y0;var lon=Proj4js.common.adjust_lon(this.long0+p.x/this.a);var lat=2.5*(Math.atan(Math.exp(0.8*p.y/this.a))-Proj4js.common.PI/4.0);p.x=lon;p.y=lat;return p;}};Proj4js.Proj.sinu={init:function(){this.R=6370997.0;},forward:function(p){var x,y,delta_lon;var lon=p.x;var lat=p.y;delta_lon=Proj4js.common.adjust_lon(lon-this.long0);x=this.R*delta_lon*Math.cos(lat)+this.x0;y=this.R*lat+this.y0;p.x=x;p.y=y;return p;},inverse:function(p){var lat,temp,lon;p.x-=this.x0;p.y-=this.y0;lat=p.y/this.R;if(Math.abs(lat)>Proj4js.common.HALF_PI){Proj4js.reportError(\"sinu:Inv:DataError\");}\ntemp=Math.abs(lat)-Proj4js.common.HALF_PI;if(Math.abs(temp)>Proj4js.common.EPSLN){temp=this.long0+p.x/(this.R*Math.cos(lat));lon=Proj4js.common.adjust_lon(temp);}else{lon=this.long0;}\np.x=lon;p.y=lat;return p;}};var GEOCENT_LAT_ERROR=0x0001;var COS_67P5=0.38268343236508977;var AD_C=1.0026000;function cs_geodetic_to_geocentric(cs,p){var Longitude=p.x;var Latitude=p.y;var Height=p.z;var X;var Y;var Z;var Error_Code=0;var Rn;var Sin_Lat;var Sin2_Lat;var Cos_Lat;if(Latitude<-HALF_PI&&Latitude>-1.001*HALF_PI)\nLatitude=-HALF_PI;else if(Latitude>HALF_PI&&Latitude<1.001*HALF_PI)\nLatitude=HALF_PI;else if((Latitude<-HALF_PI)||(Latitude>HALF_PI))\n{Error_Code|=GEOCENT_LAT_ERROR;}\nif(!Error_Code)\n{if(Longitude>PI)\nLongitude-=(2*PI);Sin_Lat=Math.sin(Latitude);Cos_Lat=Math.cos(Latitude);Sin2_Lat=Sin_Lat*Sin_Lat;Rn=cs.a/(Math.sqrt(1.0e0-cs.es*Sin2_Lat));X=(Rn+Height)*Cos_Lat*Math.cos(Longitude);Y=(Rn+Height)*Cos_Lat*Math.sin(Longitude);Z=((Rn*(1-cs.es))+Height)*Sin_Lat;}\np.x=X;p.y=Y;p.z=Z;return Error_Code;}\nfunction cs_geocentric_to_geodetic(cs,p){var X=p.x;var Y=p.y;var Z=p.z;var Longitude;var Latitude;var Height;var W;var W2;var T0;var T1;var S0;var S1;var Sin_B0;var Sin3_B0;var Cos_B0;var Sin_p1;var Cos_p1;var Rn;var Sum;var At_Pole;X=parseFloat(X);Y=parseFloat(Y);Z=parseFloat(Z);At_Pole=false;if(X!=0.0)\n{Longitude=Math.atan2(Y,X);}\nelse\n{if(Y>0)\n{Longitude=HALF_PI;}\nelse if(Y<0)\n{Longitude=-HALF_PI;}\nelse\n{At_Pole=true;Longitude=0.0;if(Z>0.0)\n{Latitude=HALF_PI;}\nelse if(Z<0.0)\n{Latitude=-HALF_PI;}\nelse\n{Latitude=HALF_PI;Height=-cs.b;return;}}}\nW2=X*X+Y*Y;W=Math.sqrt(W2);T0=Z*AD_C;S0=Math.sqrt(T0*T0+W2);Sin_B0=T0/S0;Cos_B0=W/S0;Sin3_B0=Sin_B0*Sin_B0*Sin_B0;T1=Z+cs.b*cs.ep2*Sin3_B0;Sum=W-cs.a*cs.es*Cos_B0*Cos_B0*Cos_B0;S1=Math.sqrt(T1*T1+Sum*Sum);Sin_p1=T1/S1;Cos_p1=Sum/S1;Rn=cs.a/Math.sqrt(1.0-cs.es*Sin_p1*Sin_p1);if(Cos_p1>=COS_67P5)\n{Height=W/Cos_p1-Rn;}\nelse if(Cos_p1<=-COS_67P5)\n{Height=W/-Cos_p1-Rn;}\nelse\n{Height=Z/Sin_p1+Rn*(cs.es-1.0);}\nif(At_Pole==false)\n{Latitude=Math.atan(Sin_p1/Cos_p1);}\np.x=Longitude;p.y=Latitude;p.z=Height;return 0;}\nfunction cs_geocentric_to_wgs84(defn,p){if(defn.datum_type==PJD_3PARAM)\n{p.x+=defn.datum_params[0];p.y+=defn.datum_params[1];p.z+=defn.datum_params[2];}\nelse\n{var Dx_BF=defn.datum_params[0];var Dy_BF=defn.datum_params[1];var Dz_BF=defn.datum_params[2];var Rx_BF=defn.datum_params[3];var Ry_BF=defn.datum_params[4];var Rz_BF=defn.datum_params[5];var M_BF=defn.datum_params[6];var x_out=M_BF*(p.x-Rz_BF*p.y+Ry_BF*p.z)+Dx_BF;var y_out=M_BF*(Rz_BF*p.x+p.y-Rx_BF*p.z)+Dy_BF;var z_out=M_BF*(-Ry_BF*p.x+Rx_BF*p.y+p.z)+Dz_BF;p.x=x_out;p.y=y_out;p.z=z_out;}}\nfunction cs_geocentric_from_wgs84(defn,p){if(defn.datum_type==PJD_3PARAM)\n{p.x-=defn.datum_params[0];p.y-=defn.datum_params[1];p.z-=defn.datum_params[2];}\nelse\n{var Dx_BF=defn.datum_params[0];var Dy_BF=defn.datum_params[1];var Dz_BF=defn.datum_params[2];var Rx_BF=defn.datum_params[3];var Ry_BF=defn.datum_params[4];var Rz_BF=defn.datum_params[5];var M_BF=defn.datum_params[6];var x_tmp=(p.x-Dx_BF)/M_BF;var y_tmp=(p.y-Dy_BF)/M_BF;var z_tmp=(p.z-Dz_BF)/M_BF;p.x=x_tmp+Rz_BF*y_tmp-Ry_BF*z_tmp;p.y=-Rz_BF*x_tmp+y_tmp+Rx_BF*z_tmp;p.z=Ry_BF*x_tmp-Rx_BF*y_tmp+z_tmp;}}\nProj4js.Proj.vandg={init:function(){this.R=6370997.0;},forward:function(p){var lon=p.x;var lat=p.y;var dlon=Proj4js.common.adjust_lon(lon-this.long0);var x,y;if(Math.abs(lat)<=Proj4js.common.EPSLN){x=this.x0+this.R*dlon;y=this.y0;}\nvar theta=Proj4js.common.asinz(2.0*Math.abs(lat/Proj4js.common.PI));if((Math.abs(dlon)<=Proj4js.common.EPSLN)||(Math.abs(Math.abs(lat)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)){x=this.x0;if(lat>=0){y=this.y0+Proj4js.common.PI*this.R*Math.tan(.5*theta);}else{y=this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*theta);}}\nvar al=.5*Math.abs((Proj4js.common.PI/dlon)-(dlon/Proj4js.common.PI));var asq=al*al;var sinth=Math.sin(theta);var costh=Math.cos(theta);var g=costh/(sinth+costh-1.0);var gsq=g*g;var m=g*(2.0/sinth-1.0);var msq=m*m;var con=Proj4js.common.PI*this.R*(al*(g-msq)+Math.sqrt(asq*(g-msq)*(g-msq)-(msq+asq)*(gsq-msq)))/(msq+asq);if(dlon<0){con=-con;}\nx=this.x0+con;con=Math.abs(con/(Proj4js.common.PI*this.R));if(lat>=0){y=this.y0+Proj4js.common.PI*this.R*Math.sqrt(1.0-con*con-2.0*al*con);}else{y=this.y0-Proj4js.common.PI*this.R*Math.sqrt(1.0-con*con-2.0*al*con);}\np.x=x;p.y=y;return p;},inverse:function(p){var dlon;var xx,yy,xys,c1,c2,c3;var al,asq;var a1;var m1;var con;var th1;var d;p.x-=this.x0;p.y-=this.y0;con=Proj4js.common.PI*this.R;xx=p.x/con;yy=p.y/con;xys=xx*xx+yy*yy;c1=-Math.abs(yy)*(1.0+xys);c2=c1-2.0*yy*yy+xx*xx;c3=-2.0*c1+1.0+2.0*yy*yy+xys*xys;d=yy*yy/c3+(2.0*c2*c2*c2/c3/c3/c3-9.0*c1*c2/c3/c3)/27.0;a1=(c1-c2*c2/3.0/c3)/c3;m1=2.0*Math.sqrt(-a1/3.0);con=((3.0*d)/a1)/m1;if(Math.abs(con)>1.0){if(con>=0.0){con=1.0;}else{con=-1.0;}}\nth1=Math.acos(con)/3.0;if(p.y>=0){lat=(-m1*Math.cos(th1+Proj4js.common.PI/3.0)-c2/3.0/c3)*Proj4js.common.PI;}else{lat=-(-m1*Math.cos(th1+PI/3.0)-c2/3.0/c3)*Proj4js.common.PI;}\nif(Math.abs(xx)<Proj4js.common.EPSLN){lon=this.long0;}\nlon=Proj4js.common.adjust_lon(this.long0+Proj4js.common.PI*(xys-1.0+Math.sqrt(1.0+2.0*(xx*xx-yy*yy)+xys*xys))/2.0/xx);p.x=lon;p.y=lat;return p;}};Proj4js.Proj.eqc={init:function(){if(!this.x0)this.x0=0;if(!this.y0)this.y0=0;if(!this.lat0)this.lat0=0;if(!this.long0)this.long0=0;if(!this.lat_ts)this.lat_ts=0;if(!this.title)this.title=\"Equidistant Cylindrical (Plate Carre)\";this.rc=Math.cos(this.lat_ts);},forward:function(p){var lon=p.x;var lat=p.y;var dlon=Proj4js.common.adjust_lon(lon-this.long0);var dlat=Proj4js.common.adjust_lat(lat-this.lat0);p.x=this.x0+(this.a*dlon*this.rc);p.y=this.y0+(this.a*dlat);return p;},inverse:function(p){var x=p.x;var y=p.y;p.x=Proj4js.common.adjust_lon(this.long0+((x-this.x0)/(this.a*this.rc)));p.y=Proj4js.common.adjust_lat(this.lat0+((y-this.y0)/(this.a)));return p;}};Proj4js.Proj.gauss={init:function(){sphi=Math.sin(this.lat0);cphi=Math.cos(this.lat0);cphi*=cphi;this.rc=Math.sqrt(1.0-this.es)/(1.0-this.es*sphi*sphi);this.C=Math.sqrt(1.0+this.es*cphi*cphi/(1.0-this.es));this.phic0=Math.asin(sphi/this.C);this.ratexp=0.5*this.C*this.e;this.K=Math.tan(0.5*this.phic0+Proj4js.common.FORTPI)/(Math.pow(Math.tan(0.5*this.lat0+Proj4js.common.FORTPI),this.C)*Proj4js.common.srat(this.e*sphi,this.ratexp));},forward:function(p){var lon=p.x;var lat=p.y;p.y=2.0*Math.atan(this.K*Math.pow(Math.tan(0.5*lat+Proj4js.common.FORTPI),this.C)*Proj4js.common.srat(this.e*Math.sin(lat),this.ratexp))-Proj4js.common.HALF_PI;p.x=this.C*lon;return p;},inverse:function(p){var DEL_TOL=1e-14;var lon=p.x/this.C;var lat=p.y;num=Math.pow(Math.tan(0.5*lat+Proj4js.common.FORTPI)/this.K,1./this.C);for(var i=Proj4js.common.MAX_ITER;i>0;--i){lat=2.0*Math.atan(num*Proj4js.common.srat(this.e*Math.sin(p.y),-0.5*this.e))-Proj4js.common.HALF_PI;if(Math.abs(lat-p.y)<DEL_TOL)break;p.y=lat;}\nif(!i){Proj4js.reportError(\"gauss:inverse:convergence failed\");return null;}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.omerc={init:function(){if(!this.mode)this.mode=0;if(!this.lon1){this.lon1=0;this.mode=1;}\nif(!this.lon2)this.lon2=0;if(!this.lat2)this.lat2=0;var temp=this.b/this.a;var es=1.0-Math.pow(temp,2);var e=Math.sqrt(es);this.sin_p20=Math.sin(this.lat0);this.cos_p20=Math.cos(this.lat0);this.con=1.0-this.es*this.sin_p20*this.sin_p20;this.com=Math.sqrt(1.0-es);this.bl=Math.sqrt(1.0+this.es*Math.pow(this.cos_p20,4.0)/(1.0-es));this.al=this.a*this.bl*this.k0*this.com/this.con;if(Math.abs(this.lat0)<Proj4js.common.EPSLN){this.ts=1.0;this.d=1.0;this.el=1.0;}else{this.ts=Proj4js.common.tsfnz(this.e,this.lat0,this.sin_p20);this.con=Math.sqrt(this.con);this.d=this.bl*this.com/(this.cos_p20*this.con);if((this.d*this.d-1.0)>0.0){if(this.lat0>=0.0){this.f=this.d+Math.sqrt(this.d*this.d-1.0);}else{this.f=this.d-Math.sqrt(this.d*this.d-1.0);}}else{this.f=this.d;}\nthis.el=this.f*Math.pow(this.ts,this.bl);}\nif(this.mode!=0){this.g=.5*(this.f-1.0/this.f);this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d);this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl;this.con=Math.abs(this.lat0);if((this.con>Proj4js.common.EPSLN)&&(Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN)){this.singam=Math.sin(this.gama);this.cosgam=Math.cos(this.gama);this.sinaz=Math.sin(this.alpha);this.cosaz=Math.cos(this.alpha);if(this.lat0>=0){this.u=(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1.0)/this.cosaz);}else{this.u=-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1.0)/this.cosaz);}}else{Proj4js.reportError(\"omerc:Init:DataError\");}}else{this.sinphi=Math.sin(this.at1);this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi);this.sinphi=Math.sin(this.lat2);this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi);this.h=Math.pow(this.ts1,this.bl);this.l=Math.pow(this.ts2,this.bl);this.f=this.el/this.h;this.g=.5*(this.f-1.0/this.f);this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h);this.p=(this.l-this.h)/(this.l+this.h);this.dlon=this.lon1-this.lon2;if(this.dlon<-Proj4js.common.PI)this.lon2=this.lon2-2.0*Proj4js.common.PI;if(this.dlon>Proj4js.common.PI)this.lon2=this.lon2+2.0*Proj4js.common.PI;this.dlon=this.lon1-this.lon2;this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl;this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc);this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g);this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama));if(Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN){Proj4js.reportError(\"omercInitDataError\");}else{this.con=Math.abs(this.lat1);}\nif((this.con<=Proj4js.common.EPSLN)||(Math.abs(this.con-HALF_PI)<=Proj4js.common.EPSLN)){Proj4js.reportError(\"omercInitDataError\");}else{if(Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN){Proj4js.reportError(\"omercInitDataError\");}}\nthis.singam=Math.sin(this.gam);this.cosgam=Math.cos(this.gam);this.sinaz=Math.sin(this.alpha);this.cosaz=Math.cos(this.alpha);if(this.lat0>=0){this.u=(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1.0)/this.cosaz);}else{this.u=-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1.0)/this.cosaz);}}},forward:function(p){var theta;var sin_phi,cos_phi;var b;var c,t,tq;var con,n,ml;var q,us,vl;var ul,vs;var s;var dlon;var ts1;var lon=p.x;var lat=p.y;sin_phi=Math.sin(lat);dlon=Proj4js.common.adjust_lon(lon-this.longc);vl=Math.sin(this.bl*dlon);if(Math.abs(Math.abs(lat)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN){ts1=Proj4js.common.tsfnz(this.e,lat,sin_phi);q=this.el/(Math.pow(ts1,this.bl));s=.5*(q-1.0/q);t=.5*(q+1.0/q);ul=(s*this.singam-vl*this.cosgam)/t;con=Math.cos(this.bl*dlon);if(Math.abs(con)<.0000001){us=this.al*this.bl*dlon;}else{us=this.al*Math.atan((s*this.cosgam+vl*this.singam)/con)/this.bl;if(con<0)us=us+Proj4js.common.PI*this.al/this.bl;}}else{if(lat>=0){ul=this.singam;}else{ul=-this.singam;}\nus=this.al*lat/this.bl;}\nif(Math.abs(Math.abs(ul)-1.0)<=Proj4js.common.EPSLN){Proj4js.reportError(\"omercFwdInfinity\");}\nvs=.5*this.al*Math.log((1.0-ul)/(1.0+ul))/this.bl;us=us-this.u;var x=this.x0+vs*this.cosaz+us*this.sinaz;var y=this.y0+us*this.cosaz-vs*this.sinaz;p.x=x;p.y=y;return p;},inverse:function(p){var delta_lon;var theta;var delta_theta;var sin_phi,cos_phi;var b;var c,t,tq;var con,n,ml;var vs,us,q,s,ts1;var vl,ul,bs;var dlon;var flag;p.x-=this.x0;p.y-=this.y0;flag=0;vs=p.x*this.cosaz-p.y*this.sinaz;us=p.y*this.cosaz+p.x*this.sinaz;us=us+this.u;q=Math.exp(-this.bl*vs/this.al);s=.5*(q-1.0/q);t=.5*(q+1.0/q);vl=Math.sin(this.bl*us/this.al);ul=(vl*this.cosgam+s*this.singam)/t;if(Math.abs(Math.abs(ul)-1.0)<=Proj4js.common.EPSLN)\n{lon=this.longc;if(ul>=0.0){lat=Proj4js.common.HALF_PI;}else{lat=-Proj4js.common.HALF_PI;}}else{con=1.0/this.bl;ts1=Math.pow((this.el/Math.sqrt((1.0+ul)/(1.0-ul))),con);lat=Proj4js.common.phi2z(this.e,ts1);theta=this.longc-Math.atan2((s*this.cosgam-vl*this.singam),con)/this.bl;lon=Proj4js.common.adjust_lon(theta);}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.lcc={init:function(){if(!this.lat2){this.lat2=this.lat0;}\nif(!this.k0)this.k0=1.0;if(Math.abs(this.lat1+this.lat2)<Proj4js.common.EPSLN){Proj4js.reportError(\"lcc:init: Equal Latitudes\");return;}\nvar temp=this.b/this.a;this.e=Math.sqrt(1.0-temp*temp);var sin1=Math.sin(this.lat1);var cos1=Math.cos(this.lat1);var ms1=Proj4js.common.msfnz(this.e,sin1,cos1);var ts1=Proj4js.common.tsfnz(this.e,this.lat1,sin1);var sin2=Math.sin(this.lat2);var cos2=Math.cos(this.lat2);var ms2=Proj4js.common.msfnz(this.e,sin2,cos2);var ts2=Proj4js.common.tsfnz(this.e,this.lat2,sin2);var ts0=Proj4js.common.tsfnz(this.e,this.lat0,Math.sin(this.lat0));if(Math.abs(this.lat1-this.lat2)>Proj4js.common.EPSLN){this.ns=Math.log(ms1/ms2)/Math.log(ts1/ts2);}else{this.ns=sin1;}\nthis.f0=ms1/(this.ns*Math.pow(ts1,this.ns));this.rh=this.a*this.f0*Math.pow(ts0,this.ns);if(!this.title)this.title=\"Lambert Conformal Conic\";},forward:function(p){var lon=p.x;var lat=p.y;if(lat<=90.0&&lat>=-90.0&&lon<=180.0&&lon>=-180.0){}else{Proj4js.reportError(\"lcc:forward: llInputOutOfRange: \"+lon+\" : \"+lat);return null;}\nvar con=Math.abs(Math.abs(lat)-Proj4js.common.HALF_PI);var ts;if(con>Proj4js.common.EPSLN){ts=Proj4js.common.tsfnz(this.e,lat,Math.sin(lat));rh1=this.a*this.f0*Math.pow(ts,this.ns);}else{con=lat*this.ns;if(con<=0){Proj4js.reportError(\"lcc:forward: No Projection\");return null;}\nrh1=0;}\nvar theta=this.ns*Proj4js.common.adjust_lon(lon-this.long0);p.x=this.k0*(rh1*Math.sin(theta))+this.x0;p.y=this.k0*(this.rh-rh1*Math.cos(theta))+this.y0;return p;},inverse:function(p){var rh1,con,ts;var lat,lon;x=(p.x-this.x0)/this.k0;y=(this.rh-(p.y-this.y0)/this.k0);if(this.ns>0){rh1=Math.sqrt(x*x+y*y);con=1.0;}else{rh1=-Math.sqrt(x*x+y*y);con=-1.0;}\nvar theta=0.0;if(rh1!=0){theta=Math.atan2((con*x),(con*y));}\nif((rh1!=0)||(this.ns>0.0)){con=1.0/this.ns;ts=Math.pow((rh1/(this.a*this.f0)),con);lat=Proj4js.common.phi2z(this.e,ts);if(lat==-9999)return null;}else{lat=-Proj4js.common.HALF_PI;}\nlon=Proj4js.common.adjust_lon(theta/this.ns+this.long0);p.x=lon;p.y=lat;return p;}};Proj4js.Proj.laea={init:function(){this.sin_lat_o=Math.sin(this.lat0);this.cos_lat_o=Math.cos(this.lat0);},forward:function(p){var lon=p.x;var lat=p.y;var delta_lon=Proj4js.common.adjust_lon(lon-this.long0);var sin_lat=Math.sin(lat);var cos_lat=Math.cos(lat);var sin_delta_lon=Math.sin(delta_lon);var cos_delta_lon=Math.cos(delta_lon);var g=this.sin_lat_o*sin_lat+this.cos_lat_o*cos_lat*cos_delta_lon;if(g==-1.0){Proj4js.reportError(\"laea:fwd:Point projects to a circle of radius \"+2.0*R);return null;}\nvar ksp=this.a*Math.sqrt(2.0/(1.0+g));var x=ksp*cos_lat*sin_delta_lon+this.x0;var y=ksp*(this.cos_lat_o*sin_lat-this.sin_lat_o*cos_lat*cos_delta_lon)+this.y0;p.x=x;p.y=y\nreturn p;},inverse:function(p){p.x-=this.x0;p.y-=this.y0;var Rh=Math.sqrt(p.x*p.x+p.y*p.y);var temp=Rh/(2.0*this.a);if(temp>1){Proj4js.reportError(\"laea:Inv:DataError\");return null;}\nvar z=2.0*Proj4js.common.asinz(temp);var sin_z=Math.sin(z);var cos_z=Math.cos(z);var lon=this.long0;if(Math.abs(Rh)>Proj4js.common.EPSLN){var lat=Proj4js.common.asinz(this.sin_lat_o*cos_z+this.cos_lat_o*sin_z*p.y/Rh);var temp=Math.abs(this.lat0)-Proj4js.common.HALF_PI;if(Math.abs(temp)>Proj4js.common.EPSLN){temp=cos_z-this.sin_lat_o*Math.sin(lat);if(temp!=0.0)lon=Proj4js.common.adjust_lon(this.long0+Math.atan2(p.x*sin_z*this.cos_lat_o,temp*Rh));}else if(this.lat0<0.0){lon=Proj4js.common.adjust_lon(this.long0-Math.atan2(-p.x,p.y));}else{lon=Proj4js.common.adjust_lon(this.long0+Math.atan2(p.x,-p.y));}}else{lat=this.lat0;}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0)\nthis.cos_p12=Math.cos(this.lat0)},forward:function(p){var lon=p.x;var lat=p.y;var ksp;var sinphi=Math.sin(p.y);var cosphi=Math.cos(p.y);var dlon=Proj4js.common.adjust_lon(lon-this.long0);var coslon=Math.cos(dlon);var g=this.sin_p12*sinphi+this.cos_p12*cosphi*coslon;if(Math.abs(Math.abs(g)-1.0)<Proj4js.common.EPSLN){ksp=1.0;if(g<0.0){Proj4js.reportError(\"aeqd:Fwd:PointError\");return;}}else{var z=Math.acos(g);ksp=z/Math.sin(z);}\np.x=this.x0+this.a*ksp*cosphi*Math.sin(dlon);p.y=this.y0+this.a*ksp*(this.cos_p12*sinphi-this.sin_p12*cosphi*coslon);return p;},inverse:function(p){p.x-=this.x0;p.y-=this.y0;var rh=Math.sqrt(p.x*p.x+p.y*p.y);if(rh>(2.0*Proj4js.common.HALF_PI*this.a)){Proj4js.reportError(\"aeqdInvDataError\");return;}\nvar z=rh/this.a;var sinz=Math.sin(z)\nvar cosz=Math.cos(z)\nvar lon=this.long0;var lat;if(Math.abs(rh)<=Proj4js.common.EPSLN){lat=this.lat0;}else{lat=Proj4js.common.asinz(cosz*this.sin_p12+(p.y*sinz*this.cos_p12)/rh);var con=Math.abs(this.lat0)-Proj4js.common.HALF_PI;if(Math.abs(con)<=Proj4js.common.EPSLN){if(lat0>=0.0){lon=Proj4js.common.adjust_lon(this.long0+Math.atan2(p.x,-p.y));}else{lon=Proj4js.common.adjust_lon(this.long0-Math.atan2(-p.x,p.y));}}else{con=cosz-this.sin_p12*Math.sin(lat);if((Math.abs(con)<Proj4js.common.EPSLN)&&(Math.abs(p.x)<Proj4js.common.EPSLN)){}else{var temp=Math.atan2((p.x*sinz*this.cos_p12),(con*rh));lon=Proj4js.common.adjust_lon(this.long0+Math.atan2((p.x*sinz*this.cos_p12),(con*rh)));}}}\np.x=lon;p.y=lat;return p;}};Proj4js.Proj.moll={init:function(){},forward:function(p){var lon=p.x;var lat=p.y;var delta_lon=Proj4js.common.adjust_lon(lon-this.long0);var theta=lat;var con=Proj4js.common.PI*Math.sin(lat);for(var i=0;;i++){var delta_theta=-(theta+Math.sin(theta)-con)/(1.0+Math.cos(theta));theta+=delta_theta;if(Math.abs(delta_theta)<Proj4js.common.EPSLN)break;if(i>=50){Proj4js.reportError(\"moll:Fwd:IterationError\");}}\ntheta/=2.0;if(Proj4js.common.PI/2-Math.abs(lat)<Proj4js.common.EPSLN)delta_lon=0;var x=0.900316316158*this.a*delta_lon*Math.cos(theta)+this.x0;var y=1.4142135623731*this.a*Math.sin(theta)+this.y0;p.x=x;p.y=y;return p;},inverse:function(p){var theta;var arg;p.x-=this.x0;var arg=p.y/(1.4142135623731*this.a);if(Math.abs(arg)>0.999999999999)arg=0.999999999999;var theta=Math.asin(arg);var lon=Proj4js.common.adjust_lon(this.long0+(p.x/(0.900316316158*this.a*Math.cos(theta))));if(lon<(-Proj4js.common.PI))lon=-Proj4js.common.PI;if(lon>Proj4js.common.PI)lon=Proj4js.common.PI;arg=(2.0*theta+Math.sin(2.0*theta))/Proj4js.common.PI;if(Math.abs(arg)>1.0)arg=1.0;var lat=Math.asin(arg);p.x=lon;p.y=lat;return p;}};"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32601.js",
    "content": "Proj4js.defs[\"EPSG:32601\"] = \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32602.js",
    "content": "Proj4js.defs[\"EPSG:32602\"] = \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32603.js",
    "content": "Proj4js.defs[\"EPSG:32603\"] = \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32604.js",
    "content": "Proj4js.defs[\"EPSG:32604\"] = \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32605.js",
    "content": "Proj4js.defs[\"EPSG:32605\"] = \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32606.js",
    "content": "Proj4js.defs[\"EPSG:32606\"] = \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32607.js",
    "content": "Proj4js.defs[\"EPSG:32607\"] = \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32608.js",
    "content": "Proj4js.defs[\"EPSG:32608\"] = \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32609.js",
    "content": "Proj4js.defs[\"EPSG:32609\"] = \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32610.js",
    "content": "Proj4js.defs[\"EPSG:32610\"] = \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32611.js",
    "content": "Proj4js.defs[\"EPSG:32611\"] = \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32612.js",
    "content": "Proj4js.defs[\"EPSG:32612\"] = \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32613.js",
    "content": "Proj4js.defs[\"EPSG:32613\"] = \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32614.js",
    "content": "Proj4js.defs[\"EPSG:32614\"] = \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32615.js",
    "content": "Proj4js.defs[\"EPSG:32615\"] = \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32616.js",
    "content": "Proj4js.defs[\"EPSG:32616\"] = \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32617.js",
    "content": "Proj4js.defs[\"EPSG:32617\"] = \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32618.js",
    "content": "Proj4js.defs[\"EPSG:32618\"] = \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32619.js",
    "content": "Proj4js.defs[\"EPSG:32619\"] = \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32620.js",
    "content": "Proj4js.defs[\"EPSG:32620\"] = \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32621.js",
    "content": "Proj4js.defs[\"EPSG:32621\"] = \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32622.js",
    "content": "Proj4js.defs[\"EPSG:32622\"] = \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32623.js",
    "content": "Proj4js.defs[\"EPSG:32623\"] = \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32624.js",
    "content": "Proj4js.defs[\"EPSG:32624\"] = \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32625.js",
    "content": "Proj4js.defs[\"EPSG:32625\"] = \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32626.js",
    "content": "Proj4js.defs[\"EPSG:32626\"] = \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32627.js",
    "content": "Proj4js.defs[\"EPSG:32627\"] = \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32628.js",
    "content": "Proj4js.defs[\"EPSG:32628\"] = \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32629.js",
    "content": "Proj4js.defs[\"EPSG:32629\"] = \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32630.js",
    "content": "Proj4js.defs[\"EPSG:32630\"] = \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32631.js",
    "content": "Proj4js.defs[\"EPSG:32631\"] = \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32632.js",
    "content": "Proj4js.defs[\"EPSG:32632\"] = \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32633.js",
    "content": "Proj4js.defs[\"EPSG:32633\"] = \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32634.js",
    "content": "Proj4js.defs[\"EPSG:32634\"] = \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32635.js",
    "content": "Proj4js.defs[\"EPSG:32635\"] = \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32636.js",
    "content": "Proj4js.defs[\"EPSG:32636\"] = \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32637.js",
    "content": "Proj4js.defs[\"EPSG:32637\"] = \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32638.js",
    "content": "Proj4js.defs[\"EPSG:32638\"] = \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32639.js",
    "content": "Proj4js.defs[\"EPSG:32639\"] = \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32640.js",
    "content": "Proj4js.defs[\"EPSG:32640\"] = \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32641.js",
    "content": "Proj4js.defs[\"EPSG:32641\"] = \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32642.js",
    "content": "Proj4js.defs[\"EPSG:32642\"] = \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32643.js",
    "content": "Proj4js.defs[\"EPSG:32643\"] = \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32644.js",
    "content": "Proj4js.defs[\"EPSG:32644\"] = \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32645.js",
    "content": "Proj4js.defs[\"EPSG:32645\"] = \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32646.js",
    "content": "Proj4js.defs[\"EPSG:32646\"] = \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32647.js",
    "content": "Proj4js.defs[\"EPSG:32647\"] = \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32648.js",
    "content": "Proj4js.defs[\"EPSG:32648\"] = \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32649.js",
    "content": "Proj4js.defs[\"EPSG:32649\"] = \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32650.js",
    "content": "Proj4js.defs[\"EPSG:32650\"] = \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32651.js",
    "content": "Proj4js.defs[\"EPSG:32651\"] = \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32652.js",
    "content": "Proj4js.defs[\"EPSG:32652\"] = \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32653.js",
    "content": "Proj4js.defs[\"EPSG:32653\"] = \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32654.js",
    "content": "Proj4js.defs[\"EPSG:32654\"] = \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32655.js",
    "content": "Proj4js.defs[\"EPSG:32655\"] = \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32656.js",
    "content": "Proj4js.defs[\"EPSG:32656\"] = \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32657.js",
    "content": "Proj4js.defs[\"EPSG:32657\"] = \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32658.js",
    "content": "Proj4js.defs[\"EPSG:32658\"] = \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32659.js",
    "content": "Proj4js.defs[\"EPSG:32659\"] = \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32660.js",
    "content": "Proj4js.defs[\"EPSG:32660\"] = \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG326xx.js",
    "content": "Proj4js.defs[\"EPSG:32601\"] = \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32602\"] = \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32603\"] = \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32604\"] = \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32605\"] = \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32606\"] = \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32607\"] = \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32608\"] = \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32609\"] = \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32610\"] = \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32611\"] = \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32612\"] = \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32613\"] = \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32614\"] = \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32615\"] = \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32616\"] = \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32617\"] = \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32618\"] = \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32619\"] = \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32620\"] = \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32621\"] = \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32622\"] = \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32623\"] = \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32624\"] = \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32625\"] = \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32626\"] = \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32627\"] = \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32628\"] = \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32629\"] = \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32630\"] = \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32631\"] = \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32632\"] = \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32633\"] = \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32634\"] = \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32635\"] = \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32636\"] = \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32637\"] = \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32638\"] = \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32639\"] = \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32640\"] = \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32641\"] = \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32642\"] = \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32643\"] = \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32644\"] = \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32645\"] = \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32646\"] = \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32647\"] = \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32648\"] = \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32649\"] = \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32650\"] = \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32651\"] = \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32652\"] = \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32653\"] = \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32654\"] = \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32655\"] = \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32656\"] = \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32657\"] = \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32658\"] = \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32659\"] = \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32660\"] = \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32701.js",
    "content": "Proj4js.defs[\"EPSG:32701\"] = \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32702.js",
    "content": "Proj4js.defs[\"EPSG:32702\"] = \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32703.js",
    "content": "Proj4js.defs[\"EPSG:32703\"] = \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32704.js",
    "content": "Proj4js.defs[\"EPSG:32704\"] = \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32705.js",
    "content": "Proj4js.defs[\"EPSG:32705\"] = \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32706.js",
    "content": "Proj4js.defs[\"EPSG:32706\"] = \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32707.js",
    "content": "Proj4js.defs[\"EPSG:32707\"] = \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32708.js",
    "content": "Proj4js.defs[\"EPSG:32708\"] = \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32709.js",
    "content": "Proj4js.defs[\"EPSG:32709\"] = \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32710.js",
    "content": "Proj4js.defs[\"EPSG:32710\"] = \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32711.js",
    "content": "Proj4js.defs[\"EPSG:32711\"] = \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32712.js",
    "content": "Proj4js.defs[\"EPSG:32712\"] = \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32713.js",
    "content": "Proj4js.defs[\"EPSG:32713\"] = \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32714.js",
    "content": "Proj4js.defs[\"EPSG:32714\"] = \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32715.js",
    "content": "Proj4js.defs[\"EPSG:32715\"] = \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32716.js",
    "content": "Proj4js.defs[\"EPSG:32716\"] = \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32717.js",
    "content": "Proj4js.defs[\"EPSG:32717\"] = \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32718.js",
    "content": "Proj4js.defs[\"EPSG:32718\"] = \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32719.js",
    "content": "Proj4js.defs[\"EPSG:32719\"] = \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32720.js",
    "content": "Proj4js.defs[\"EPSG:32720\"] = \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32721.js",
    "content": "Proj4js.defs[\"EPSG:32721\"] = \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32722.js",
    "content": "Proj4js.defs[\"EPSG:32722\"] = \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32723.js",
    "content": "Proj4js.defs[\"EPSG:32723\"] = \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32724.js",
    "content": "Proj4js.defs[\"EPSG:32724\"] = \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32725.js",
    "content": "Proj4js.defs[\"EPSG:32725\"] = \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32726.js",
    "content": "Proj4js.defs[\"EPSG:32726\"] = \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32727.js",
    "content": "Proj4js.defs[\"EPSG:32727\"] = \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32728.js",
    "content": "Proj4js.defs[\"EPSG:32728\"] = \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32729.js",
    "content": "Proj4js.defs[\"EPSG:32729\"] = \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32730.js",
    "content": "Proj4js.defs[\"EPSG:32730\"] = \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32731.js",
    "content": "Proj4js.defs[\"EPSG:32731\"] = \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32732.js",
    "content": "Proj4js.defs[\"EPSG:32732\"] = \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32733.js",
    "content": "Proj4js.defs[\"EPSG:32733\"] = \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32734.js",
    "content": "Proj4js.defs[\"EPSG:32734\"] = \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32735.js",
    "content": "Proj4js.defs[\"EPSG:32735\"] = \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32736.js",
    "content": "Proj4js.defs[\"EPSG:32736\"] = \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32737.js",
    "content": "Proj4js.defs[\"EPSG:32737\"] = \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32738.js",
    "content": "Proj4js.defs[\"EPSG:32738\"] = \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32739.js",
    "content": "Proj4js.defs[\"EPSG:32739\"] = \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32740.js",
    "content": "Proj4js.defs[\"EPSG:32740\"] = \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32741.js",
    "content": "Proj4js.defs[\"EPSG:32741\"] = \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32742.js",
    "content": "Proj4js.defs[\"EPSG:32742\"] = \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32743.js",
    "content": "Proj4js.defs[\"EPSG:32743\"] = \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32744.js",
    "content": "Proj4js.defs[\"EPSG:32744\"] = \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32745.js",
    "content": "Proj4js.defs[\"EPSG:32745\"] = \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32746.js",
    "content": "Proj4js.defs[\"EPSG:32746\"] = \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32747.js",
    "content": "Proj4js.defs[\"EPSG:32747\"] = \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32748.js",
    "content": "Proj4js.defs[\"EPSG:32748\"] = \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32749.js",
    "content": "Proj4js.defs[\"EPSG:32749\"] = \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32750.js",
    "content": "Proj4js.defs[\"EPSG:32750\"] = \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32751.js",
    "content": "Proj4js.defs[\"EPSG:32751\"] = \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32752.js",
    "content": "Proj4js.defs[\"EPSG:32752\"] = \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32753.js",
    "content": "Proj4js.defs[\"EPSG:32753\"] = \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32754.js",
    "content": "Proj4js.defs[\"EPSG:32754\"] = \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32755.js",
    "content": "Proj4js.defs[\"EPSG:32755\"] = \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32756.js",
    "content": "Proj4js.defs[\"EPSG:32756\"] = \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32757.js",
    "content": "Proj4js.defs[\"EPSG:32757\"] = \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32758.js",
    "content": "Proj4js.defs[\"EPSG:32758\"] = \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32759.js",
    "content": "Proj4js.defs[\"EPSG:32759\"] = \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG32760.js",
    "content": "Proj4js.defs[\"EPSG:32760\"] = \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/EPSG327xx.js",
    "content": "Proj4js.defs[\"EPSG:32701\"] = \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32702\"] = \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32703\"] = \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32704\"] = \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32705\"] = \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32706\"] = \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32707\"] = \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32708\"] = \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32709\"] = \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32710\"] = \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32711\"] = \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32712\"] = \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32713\"] = \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32714\"] = \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32715\"] = \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32716\"] = \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32717\"] = \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32718\"] = \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32719\"] = \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32720\"] = \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32721\"] = \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32722\"] = \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32723\"] = \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32724\"] = \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32725\"] = \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32726\"] = \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32727\"] = \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32728\"] = \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32729\"] = \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32730\"] = \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32731\"] = \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32732\"] = \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32733\"] = \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32734\"] = \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32735\"] = \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32736\"] = \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32737\"] = \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32738\"] = \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32739\"] = \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32740\"] = \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32741\"] = \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32742\"] = \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32743\"] = \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32744\"] = \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32745\"] = \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32746\"] = \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32747\"] = \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32748\"] = \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32749\"] = \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32750\"] = \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32751\"] = \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32752\"] = \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32753\"] = \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32754\"] = \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32755\"] = \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32756\"] = \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32757\"] = \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32758\"] = \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32759\"] = \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\nProj4js.defs[\"EPSG:32760\"] = \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/README",
    "content": "This directory contains copies of certain projection definitions for\nProj4js[1] from Spatial Reference[2].  The files contain all necessary\ndefinitions for UTM projections (using WGS84 reference ellipsoid) of\nthe whole world (except the polar areas).\n\nProj4js will download these automatically as needed from Spatial\nReference if they are not available otherwise, but it is convenient to\nhave a local copy to avoid waiting.  The automatic download is done\nasynchronously, so it is much easier for users of Proj4js to assume\nthat all definitions are already available.  See [3].\n\n\nFile contents:\n\nEPSG326xx.js -- all definitions for the northern hemisphere\nEPSG327xx.js -- all definitions for the southern hemisphere\nEPSG32601.js |\n    .        |\n    .         > definitions for each zone\n    .        |\nEPSG32760.js |\nfetch.sh     -- script used to download the above files\n\nUsage:\n\nInclude EPSG326xx.js and EPSG327xx.js together with Proj4js.\n\nReferences:\n\n[1] Proj4js, JavaScript library for map projections: http://proj4js.org/\n\n[2] Spatial Reference: http://spatialreference.org/\n\n[3] http://trac.osgeo.org/proj4js/wiki/UserGuide#Dynamiclookupofinitializationparameters\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/projdefs/fetch.sh",
    "content": "#!/bin/bash\n\nfor i in $(seq -w 1 60)\ndo\n    wget -O EPSG326$i.js \"http://spatialreference.org/ref/epsg/326$i/proj4js/\"\n    echo>>EPSG326$i.js\n    wget -O EPSG327$i.js \"http://spatialreference.org/ref/epsg/327$i/proj4js/\"\n    echo>>EPSG327$i.js\ndone\n\ncat EPSG326*.js > EPSG326xx.js\ncat EPSG327*.js > EPSG327xx.js\n"
  },
  {
    "path": "python/nav/web/static/js/geomap/util.js",
    "content": "/*\n * Copyright (C) 2009, 2010 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * util.js: Utility functions.\n */\n\nfunction zip() {\n    var result = [];\n    var length = reduce(arguments[0].length, min, map(len, arguments));\n    for (var i = 0; i < length; i++) {\n\tresult[i] = [];\n\tfor (var j = 0; j < arguments.length; j++)\n\t    result[i][j] = arguments[j][i];\n    }\n    return result;\n}\n\nfunction subarray(arr, start, end) {\n    var result = [];\n    if (!end)\n\tend = arr.length;\n    for (var i = start; i < end; i++)\n\tresult.push(arr[i]);\n    return result;\n}\n\nfunction map(fun) {\n    var i, j;\n    var lists = subarray(arguments, 1);\n    var result = [];\n    var length = lists[0].length;\n    for (j = 1; j < lists.length; j++)\n\tif (lists[j].length < length)\n\t    length = lists[j].length;\n    for (var i = 0; i < length; i++) {\n\tvar args = [];\n\tfor (var j = 0; j < lists.length; j++)\n\t    args[j] = lists[j][i];\n\tresult[i] = fun.apply(null, args);\n    }\n    return result;\n    /*\n    var res = [];\n    var i;\n    for (i = 0; i < list.length; i++)\n\tres[i] = fun(list[i]);\n    return res;\n    */\n}\n\n/*\n * Call the same method on each object in a list, returning the\n * results as a list. Any arguments to this function beyond the first\n * two are passed as arguments in each method call.\n */\nfunction mapMethod(methodName, objects) {\n    var args = copyArray(arguments);\n    args.splice(0, 2);\n    return map(function (obj) { return obj[methodName].apply(obj, args); },\n\t       objects);\n}\n\nfunction funmap(functions, arg) {\n    return map(function(f) { return f(arg) }, functions);\n}\n\nfunction filter(pred, list) {\n    var res = [];\n    var i;\n    for (i = 0; i < list.length; i++)\n\tif (pred(list[i]))\n\t    res.push(list[i]);\n    return res;\n}\n\nfunction firstWith(pred, list, defaultValue) {\n    var i;\n    for (i = 0; i < list.length; i++)\n\tif (pred(list[i]))\n\t    return list[i];\n    return defaultValue;\n}\n\nfunction reduce(init, fun, list) {\n    var res = init;\n    var i;\n    for (i = 0; i < list.length; i++)\n\tres = fun(res, list[i]);\n    return res;\n}\n\nfunction concat(strlist) {\n    return reduce('', function(a,b) {return a+b}, strlist);\n}\n\n\n\nfunction encapsulate(obj, fun) {\n    return function() {\n\treturn fun.apply(obj, arguments);\n    };\n}\n\n\nfunction min(a, b) {\n    return (a<b) ? a : b;\n}\n\nfunction max(a, b) {\n    return (a>b) ? a : b;\n}\n\n\nfunction member(elem, arr) {\n    for (var i = 0; i < arr.length; i++) {\n\tif (arr[i] == elem)\n\t    return true;\n    }\n    return false;\n}\n\n\nfunction copyObject(obj) {\n    var cp = {};\n    for (var i in obj) {\n\tcp[i] = obj[i];\n    }\n    return cp;\n}\n\nfunction copyArray(a) {\n    var cp = [];\n    for (var i = 0; i < a.length; i++)\n\tcp[i] = a[i];\n    return cp;\n}\n\nfunction extend(obj, ext) {\n    var res = copyObject(obj);\n    for (var i in ext)\n\tres[i] = ext[i];\n    return res;\n}\n\n\nfunction square(n) {\n    return n*n;\n}\n\n\n\nfunction union(a, b) {\n    var i;\n    var u = [];\n    for (i = 0; i < a.length; i++)\n\tu.push(a[i]);\n    for (i = 0; i < b.length; i++)\n\tif (!member(b[i], u))\n\t    u.push(b[i]);\n    return u;\n}\n\nfunction difference(a, b) {\n    var i;\n    var d = [];\n    for (i = 0; i < a.length; i++)\n\tif (!member(a[i], b))\n\t    d.push(a[i]);\n    return d;\n}\n\n\n\nfunction format(fstr) {\n    //var re = /%([0-9]?)([dfs])/g;\n    var re = new RegExp(\"%((.?)([0-9]))?([dfs])\", 'g');\n    var i;\n    var lastpos = 0;\n    var result = '';\n\n    for (i = 1; i < arguments.length; i++) {\n\tvar arr = re.exec(fstr);\n\tif (arr == null)\n\t    throw 'format -- error: too many arguments for format string \"' +\n\t    fstr + '\"';\n\tresult += fstr.substring(lastpos, arr.index);\n\tresult += format_value(arguments[i], arr[4], arr[3], arr[2]);\n\tlastpos = re.lastIndex;\n    }\n\n    result += fstr.substring(lastpos);\n    return result;\n}\n\nfunction format_value(val, type, len, variant) {\n    var str;\n    var fill_char = ' ';\n    switch (type) {\n    case 'f':\n\treturn val.toPrecision(len);\n    case 'd':\n\tstr = String(Math.round(val));\n\tif (variant == '0')\n\t    fill_char = '0';\n\twhile (str.length < len)\n\t    str = fill_char + str;\n\treturn str;\n    case 's':\n\tif (len) {\n\t    str = val.substring(0, len);\n\t    while (str.length < len)\n\t\tstr += fill_char;\n\t    return str;\n\t} else {\n\t    return val;\n\t}\n    default:\n\tthrow 'format -- error: invalid conversion type \"'+type+'\"';\n    }\n}\n\n\n\n\nfunction arrayConcat(arrays) {\n    return [].concat.apply([], arrays);\n}\n\n\n\nfunction values(obj) {\n    var arr = [];\n    for (var i in obj)\n\tarr.push(obj[i]);\n    return arr;\n}\n\n\nfunction makeObject() {\n    var obj = {};\n    for (var i = 1; i < arguments.length; i += 2)\n\tobj[arguments[i-1]] = arguments[i];\n    return obj;\n}\n\n\n\nfunction callMethod(obj, method) {\n    var args = copyArray(arguments);\n    args.splice(0, 2);\n    return obj[method].apply(obj, args);\n}\n\nfunction encapsulateMethod(obj, method) {\n    return encapsulate(obj, obj[method]);\n}\n\n\nfunction identity(x) {\n    return x;\n}\n\nfunction compose() {\n    return reduce(identity,\n\t\t  function(f,g) { return function(x) { return f(g(x)); }},\n\t\t  arguments);\n}\n\nfunction fix(fun, argvalues, positions) {\n    if (!(argvalues instanceof Array))\n\targvalues = [argvalues];\n    if (!positions)\n\tpositions = 0;\n    function derived() {\n\targs = copyArray(arguments);\n\tif (typeof positions == 'number') {\n\t    args.splice.apply(args, [positions, 0].concat(argvalues));\n\t} else {\n\t    for (var i = 0; i < argvalues.length; i++) {\n\t\targs.splice(positions[i], 0, argvalues[i]);\n\t    }\n\t}\n\treturn fun.apply(this, args);\n    }\n    return derived;\n}\n\n\nfunction first(x) { return x[0]; }\nfunction second(x) { return x[1]; }\nfunction nth(n, x) { return x[n]; }\n\nfunction len(lst) { return lst.length; }\n\nfunction interleave() {\n    var result = [];\n    var maxlen = reduce(0, max, map(len, arguments));\n    for (var i = 0; i < maxlen; i++)\n\tfor (var j = 0; j < arguments.length; j++)\n\t    if (i < arguments[j].length)\n\t\tresult.push(arguments[j][i]);\n    return result;\n}\n\nfunction getAllMatches(re, str) {\n    var globalRE = new RegExp((re instanceof RegExp) ? re.source : re,\n\t\t\t      'g');\n    var matches = [];\n    var match;\n    while (match = globalRE.exec(str))\n\tmatches.push(match[0]);\n    return matches;\n}\n\n/*\n * Replace each substring m of str matching re with the result of\n * calling fun(m).\n */\nfunction regexpReplace(str, re, fun) {\n    var around = str.split(re);\n    var matches = getAllMatches(re, str);\n    var replacements = map(fun, matches);\n    return concat(interleave(around, replacements));\n}\n\nfunction range(start, end, step) {\n    if (!step)\n\tstep = 1;\n    if (!end) {\n\tend = start;\n\tstart = 0;\n    }\n    var endtest = ((step > 0) ?\n\t\t   function(i) { return i < end; } :\n\t\t   function(i) { return i > end; });\n    var result = [];\n    for (var i = start; endtest(i); i += step)\n\tresult.push(i);\n    return result;\n}\n\n\nfunction makeHook() {\n    return [];\n}\n\nfunction addHook(hook, func) {\n    hook.push(func);\n}\n\nfunction callHook(hook) {\n    var args = subarray(arguments, 1);\n    hook.forEach(function (f) { f.apply(null, args); });\n}\n"
  },
  {
    "path": "python/nav/web/static/js/libs/backbone-eventbroker.js",
    "content": "/*\n * The Backbone.EventBroker adds a general purpose Event Broker implementation\n * to Backbone based on the Backbone Events API. The EventBroker can be used\n * directly to serve as a centralized event management mechanism for an entire\n * application. Additional, context specific, namespaced brokers can also be\n * created in order to provide unique brokers within a particular part of an\n * application.\n */\nBackbone.EventBroker = Backbone.EventBroker || ( function() {\n    // Defines the cache which contains each namespaced EventBroker instance\n    var _brokers = {};\n\n    /*\n     * Implements the registering and unregistering of event/callback mappings\n     * for specific objects registered with an EventBroker.\n     */\n    var _registration = function( interests, context, broker, method ) {\n        if ( !context && interests.interests ) {\n            context   = interests;\n            interests = interests.interests;\n        }\n        for ( var event in interests ) {\n            if (interests.hasOwnProperty(event)) {\n                broker[ method ]( event, context[ interests[event] ], context );\n            }\n        }\n        return broker;\n    };\n\n    /*\n     * Defines an Event registry which allows for registering and unregistering\n     * multiple events/callbacks. This API is similar to Backbone.Events.on in\n     * that it maps events to callbacks as well as a context. The main difference\n     * is that mutliple event / callback mappings can be created as one-to-one\n     * mappings for a given context.\n     */\n    var EventRegistry = {\n        /*\n         * Provides a convenience method which is similar to Backbone.Events.on\n         * in that this method binds events to callbacks. The main difference is\n         * that this method allows for binding multiple events / callbacks which\n         * have a single context.\n         *\n         * This method can be invoked with two arguments, the first being an object\n         * of event types as keys, whose values are the callbacks to which the events\n         * are bound (as described above), and the second argument is the context\n         * object typically (this) which specifies the context against which the\n         * events and callbacks are to be invoked.\n         *\n         * This method can also be invoked with a single object which defines an\n         * 'interests' property which defines a hash containing event types as\n         * keys, and callbacks as values.\n         *\n         * <pre>\n         *\n         * // Register event/callbacks based on a hash and associated context\n         * var Users = Backbone.Collection.extend(\n         * {\n         *     broker: Backbone.EventBroker,\n         *\n         *     initialize: function()\n         *     {\n         *         this.broker.register({\n         *             'user:select'   : 'select',\n         *             'user:deselect' : 'deselect',\n         *             'user:edit'     : 'edit',\n         *             'user:update'   : 'update',\n         *             'user:remove'   : 'remove'\n         *         }, this );\n         *     },\n         *     select: function() { ... },\n         *     deselect: function() { ... },\n         *     edit: function() { ... },\n         *     update: function() { ... },\n         *     remove: function() { ... }\n         * });\n         * </pre>\n         *\n         * <pre>\n         *\n         * // Register event/callbacks based on an object's \"interest\" property.\n         * var User = Backbone.Model.extend(\n         * {\n         *     broker: Backbone.EventBroker,\n         *\n         *     interests : {\n         *         'user:select'   : 'select',\n         *         'user:deselect' : 'deselect',\n         *         'user:edit'     : 'edit',\n         *         'user:update'   : 'update',\n         *         'user:remove'   : 'remove'\n         *     },\n         *     initialize: function() {\n         *         this.broker.register( this );\n         *     },\n         *     select: function() { ... },\n         *     deselect: function() { ... },\n         *     edit: function() { ... },\n         *     update: function() { ... },\n         *     remove: function() { ... }\n         * });\n         * </pre>\n         *\n         */\n        register: function( interests, context ) {\n            if ( interests || context ) {\n                return _registration( interests, context, this, 'on' );\n            }\n            return this;\n        },\n\n        /*\n         * Provides a convenience method which is similar to Backbone.Events.off\n         * in that this method unbinds events from callbacks. The main difference\n         * is this method allows for unbinding multiple events / callbacks.\n         *\n         * This method can also be invoked with a single object which provides an\n         * 'interests' property which defines a hash containing event types as keys,\n         * and the callbacks to which the events were previosuly bound as values.\n         *\n         * This method can also be invoked with two arguments, the first being an\n         * object of event types as keys, whose values are the callbacks to which\n         * the events are bound (as described above), and the second argument is\n         * context object typically (this) which specifies the context to which the\n         * events and callbacks were bound.\n         *\n         * <pre>\n         *\n         * var UserView = Backbone.View.extend(\n         * {\n         *     interests: {\n         *         'user:select'   : 'select',\n         *         'user:deselect' : 'deselect'\n         *     },\n         *     initialize: function() {\n         *         Backbone.EventBroker.register( this );\n         *     },\n         *     remove: function() {\n         *         Backbone.EventBroker.unregister( this );\n         *     },\n         *     select: function() { ... },\n         *     deselect: function() { ... }\n         * });\n         * </pre>\n         *\n         */\n        unregister: function( interests, context ) {\n            if ( interests || context ) {\n                return _registration( interests, context, this, 'off' );\n            }\n            return this;\n        }\n    };\n\n    // creates and returns the EventBroker ...\n    return _.extend({\n        /*\n         * Defines the default EventBroker namespace - an empty string. Specific\n         * EventBrokers created via EventBroker.get( namespace ) will be created\n         * and have their namespace property assigned the value of the namespace\n         * specified.\n         *\n         */\n        namespace: '',\n\n        /*\n         * Retrieves the broker for the given namespace. If a broker has yet to\n         * have been created, it will be created for the namespace and returned.\n         * Subsequent retievals for the broker of the same namespace will return\n         * a reference to the same broker; that is, only one unique broker will\n         * be created per namespace.\n         *\n         */\n        get: function( namespace ) {\n            if ( _brokers[ namespace ] === undefined ) {\n                _brokers[ namespace ] = _.extend( { 'namespace': namespace }, Backbone.Events, EventRegistry );\n            }\n            return _brokers[ namespace ];\n        },\n\n        /*\n         * Determines if the specified broker has been created for the given\n         * namespace.\n         *\n         */\n        has: function( namespace ) {\n            return _brokers[ namespace ] !== undefined;\n        },\n\n        /*\n         * Destroys the broker for the given namespace, or multiple brokers for\n         * a space delimited string of namespaces. To destroy all brokers that\n         * have been created under any namespace, simply invoke this method with\n         * no arguments.\n         *\n         */\n        destroy: function( namespace ) {\n            if ( !namespace ) {\n                for ( namespace in _brokers ) {\n                    if (_brokers.hasOwnProperty(namespace)) {\n                        this.destroy( namespace );\n                    }\n                }\n            }\n            else if ( _brokers[ namespace ] ) {\n                _brokers[ namespace ].off();\n                delete _brokers[ namespace ];\n            }\n            return this;\n        }\n    }, Backbone.Events, EventRegistry );\n\n}());"
  },
  {
    "path": "python/nav/web/static/js/libs/ipadebug.js",
    "content": "//\n// Copyright (C) 2016 Uninett AS\n//\n// This file is part of Network Administration Visualized (NAV).\n//\n// NAV is free software: you can redistribute it and/or modify it under\n// the terms of the GNU General Public License version 3 as published by\n// the Free Software Foundation.\n//\n// This program is distributed in the hope that it will be useful, but WITHOUT\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n// more details.  You should have received a copy of the GNU General Public\n// License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n//\n// == SIMPLE NAMESPACED DEBUGGER LOGGER\n//\n// Supports colon-separated (':') namespaces. Example usage:\n//\n//   debug = require(\"ipadebug\");\n//   var logger = debug.new(\"my:name:space\")\n//   logger(\"Oh no, something went wrong\")\n//   // listen to something\n//   debug.listen(\"my:name\")\n//   // Empty argument lists all registered namespaces\n//   debug.listen()\n//   debug.unlisten()\n//   // Stop listening to namespace\n//   debug.unlisten(\"my:name\")\n//\n// If you want to bind to a field in 'window', supply it as an argument to the\n// constructor:\n//\n//   debug = require(\"libs/ipadebug\")(\"IPAM_DEBUG\")\n//   // in your JS console etc.\n//   IPAM_DEBUG.listen(\"nodes\")\n//\n// Future versions might offer more sophisticated functionality, but for now,\n// this'll do.\n\n\ndefine(function (require, exports, module) {\n\n  var _ = require(\"underscore\");\n\n  function Debugger(name) {\n    var debuggr = {};\n    _.extend(debuggr, _Debugger);\n    if (name !== null) {\n      helpString(name);\n      window[name] = debuggr;\n    }\n    return debuggr;\n  }\n\n  // Scaffold object for Debugger constructor\n  var _Debugger = {\n    registered: [],\n    ignored: [],\n    namespaces: {}\n  };\n\n  // Router for incoming data\n  _Debugger.trigger = function(data) {\n    if (this.namespaces.hasOwnProperty(data.ns)) {\n      if (_.contains(this.ignored, data.origin)) {\n        return;\n      }\n      var fn =  this.namespaces[data.ns];\n      fn(data);\n    };\n  };\n\n  // Log function factory\n  _Debugger.new = function(namespace) {\n    var self = this;\n    var namespaces = explodeNamespace(namespace);\n    // register namespace, remove duplicates\n    self.registered = registerNamespaces(self.registered, namespaces);\n    return function() {\n      var args = [].slice.call(arguments);\n      // if any parent namespaces, generate triggers for them as well\n      _.each(namespaces, function(ns) {\n        var data = {\n          ns: ns,\n          origin: namespace,\n          args: args\n        };\n        // Avoid triggering for non-enabled namespaces, to save some resources\n        self.trigger(data);\n      });\n    };\n  };\n\n  // Create a handler which listens to events from 'namespace'\n  _Debugger.listen = function(namespace) {\n    var self = this;\n    // No arguments => List available namespaces\n    if (typeof namespace === \"undefined\") {\n      listNamespaces(this.registered);\n      return;\n    }\n    if (!_.contains(self.registered, namespace)) {\n      console.log(\"[DEBUGGER] WARNING: There are no registered handlers for\", namespace);\n    }\n    console.log(\"[DEBUGGER] Listening to\", namespace);\n    self.namespaces[namespace] = debugLog;\n    // remove from ignored list\n    self.ignored = _.reject(self.ignored, function(elem) {\n      return elem == namespace;\n    });\n  };\n\n  // Remove handler for events from 'namespace'\n  _Debugger.unlisten = function(namespace) {\n    var self = this;\n    // Iterate over each namespace, deleting matching handlers (e.g. if we\n    // ignore the parent namespace, we want to ignore every child as well)\n    _.each(Object.keys(self.namespaces), function(_namespace) {\n      var exploded = explodeNamespace(_namespace);\n      if (_.contains(exploded, namespace)) {\n        console.log(\"[DEBUGGER] Stopped listening to\", _namespace);\n        delete self.namespaces[_namespace];\n      }\n    });\n    this.ignored.push(namespace);\n  };\n\n  // Add namespaces to the list of listenable namespaces\n  function registerNamespaces(registered, namespaces) {\n    var delta = _.difference(namespaces, registered);\n    console.log(\"[DEBUGGER] Registering namespace(s)\", delta);\n    registered = _.union(registered, delta);\n    registered.sort();\n    return registered;\n  };\n\n  // List all available namespaces\n  function listNamespaces(namespaces) {\n    if (namespaces.length) {\n      console.log(\"[DEBUGGER] The following namespaces can be listened to:\", namespaces);\n    } else {\n      console.log(\"[DEBUGGER] No namespaces registered!\");\n    }\n  };\n\n  var debugTmpl = _.template(\"[<%= namespace %>]\");\n  function debugLog(data) {\n    var s = debugTmpl({namespace: data.origin});\n    var body = [].slice.call(data.args);\n    var output = [s].concat(body);\n    // Chrome/Safari only, handle in Firefox later on\n    console.log.apply(console, output);\n  };\n\n  // From 'models:foo:bar', generate [models:foo:bar, models:foo, models]\n  function explodeNamespace(namespace) {\n    var _namespaces = namespace.split(\":\");\n    var acc = _.reduce(_.range(1, _namespaces.length), function(acc, idx) {\n      var tmp = _.take(_namespaces, idx);\n      acc.push(tmp.join(\":\"));\n      return acc;\n    }, [namespace]);\n    acc.sort();\n    return acc;\n  }\n\n  var helpTmpl = _.template([\n    \" .----------------.  .----------------.  .----------------. \",\n    \"| .--------------. || .--------------. || .--------------. |\",\n    \"| |     _____    | || |   ______     | || |      __      | |\",\n    \"| |    |_   _|   | || |  |_   __ \\\\   | || |     /  \\\\     | |\",\n    \"| |      | |     | || |    | |__) |  | || |    / /\\\\ \\\\    | |\",\n    \"| |      | |     | || |    |  ___/   | || |   / ____ \\\\   | |\",\n    \"| |     _| |_    | || |   _| |_      | || | _/ /    \\\\ \\\\_ | |\",\n    \"| |    |_____|   | || |  |_____|     | || ||____|  |____|| |\",\n    \"| |              | || |              | || |              | |\",\n    \"| '--------------' || '--------------' || '--------------' |\",\n    \" '----------------'  '----------------'  '----------------' \",\n    \"                                                            \",\n    \"   YOUR DEBUGGER IS STARTING. PLEASE GO GRAB A COLD BEER.   \",\n    \"   RUN 'window.<%= mountPoint %>.listen()' FOR LIST OF LOGGERS\",\n    \"                                                            \"\n  ].join(\"\\n\"));\n\n  function helpString(mountElem) {\n    var s = helpTmpl({mountPoint: mountElem});\n    console.log(s);\n  }\n\n  module.exports = Debugger;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/libs/ol-debug-4.6.5.js",
    "content": "// OpenLayers. See https://openlayers.org/\n// License: https://raw.githubusercontent.com/openlayers/openlayers/master/LICENSE.md\n// Version: v4.6.5\n;(function (root, factory) {\n  if (typeof exports === \"object\") {\n    module.exports = factory();\n  } else if (typeof define === \"function\" && define.amd) {\n    define([], factory);\n  } else {\n    root.ol = factory();\n  }\n}(this, function () {\n  var OPENLAYERS = {};\n  var goog = this.goog = {};\nthis.CLOSURE_NO_DEPS = true;\n// Copyright 2006 The Closure Library Authors. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * @fileoverview Bootstrap for the Google JS Library (Closure).\n *\n * In uncompiled mode base.js will attempt to load Closure's deps file, unless\n * the global <code>CLOSURE_NO_DEPS</code> is set to true.  This allows projects\n * to include their own deps file(s) from different locations.\n *\n * Avoid including base.js more than once. This is strictly discouraged and not\n * supported. goog.require(...) won't work properly in that case.\n *\n * @provideGoog\n */\n\n\n/**\n * @define {boolean} Overridden to true by the compiler.\n */\nvar COMPILED = false;\n\n\n/**\n * Base namespace for the Closure library.  Checks to see goog is already\n * defined in the current scope before assigning to prevent clobbering if\n * base.js is loaded more than once.\n *\n * @const\n */\nvar goog = goog || {};\n\n\n/**\n * Reference to the global context.  In most cases this will be 'window'.\n */\ngoog.global = this;\n\n\n/**\n * A hook for overriding the define values in uncompiled mode.\n *\n * In uncompiled mode, {@code CLOSURE_UNCOMPILED_DEFINES} may be defined before\n * loading base.js.  If a key is defined in {@code CLOSURE_UNCOMPILED_DEFINES},\n * {@code goog.define} will use the value instead of the default value.  This\n * allows flags to be overwritten without compilation (this is normally\n * accomplished with the compiler's \"define\" flag).\n *\n * Example:\n * <pre>\n *   var CLOSURE_UNCOMPILED_DEFINES = {'goog.DEBUG': false};\n * </pre>\n *\n * @type {Object<string, (string|number|boolean)>|undefined}\n */\ngoog.global.CLOSURE_UNCOMPILED_DEFINES;\n\n\n/**\n * A hook for overriding the define values in uncompiled or compiled mode,\n * like CLOSURE_UNCOMPILED_DEFINES but effective in compiled code.  In\n * uncompiled code CLOSURE_UNCOMPILED_DEFINES takes precedence.\n *\n * Also unlike CLOSURE_UNCOMPILED_DEFINES the values must be number, boolean or\n * string literals or the compiler will emit an error.\n *\n * While any @define value may be set, only those set with goog.define will be\n * effective for uncompiled code.\n *\n * Example:\n * <pre>\n *   var CLOSURE_DEFINES = {'goog.DEBUG': false} ;\n * </pre>\n *\n * @type {Object<string, (string|number|boolean)>|undefined}\n */\ngoog.global.CLOSURE_DEFINES;\n\n\n/**\n * Returns true if the specified value is not undefined.\n *\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is defined.\n */\ngoog.isDef = function(val) {\n  // void 0 always evaluates to undefined and hence we do not need to depend on\n  // the definition of the global variable named 'undefined'.\n  return val !== void 0;\n};\n\n/**\n * Returns true if the specified value is a string.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is a string.\n */\ngoog.isString = function(val) {\n  return typeof val == 'string';\n};\n\n\n/**\n * Returns true if the specified value is a boolean.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is boolean.\n */\ngoog.isBoolean = function(val) {\n  return typeof val == 'boolean';\n};\n\n\n/**\n * Returns true if the specified value is a number.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is a number.\n */\ngoog.isNumber = function(val) {\n  return typeof val == 'number';\n};\n\n\n/**\n * Builds an object structure for the provided namespace path, ensuring that\n * names that already exist are not overwritten. For example:\n * \"a.b.c\" -> a = {};a.b={};a.b.c={};\n * Used by goog.provide and goog.exportSymbol.\n * @param {string} name name of the object that this file defines.\n * @param {*=} opt_object the object to expose at the end of the path.\n * @param {Object=} opt_objectToExportTo The object to add the path to; default\n *     is `goog.global`.\n * @private\n */\ngoog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {\n  var parts = name.split('.');\n  var cur = opt_objectToExportTo || goog.global;\n\n  // Internet Explorer exhibits strange behavior when throwing errors from\n  // methods externed in this manner.  See the testExportSymbolExceptions in\n  // base_test.html for an example.\n  if (!(parts[0] in cur) && cur.execScript) {\n    cur.execScript('var ' + parts[0]);\n  }\n\n  for (var part; parts.length && (part = parts.shift());) {\n    if (!parts.length && goog.isDef(opt_object)) {\n      // last part and we have an object; use it\n      cur[part] = opt_object;\n    } else if (cur[part] && cur[part] !== Object.prototype[part]) {\n      cur = cur[part];\n    } else {\n      cur = cur[part] = {};\n    }\n  }\n};\n\n\n/**\n * Defines a named value. In uncompiled mode, the value is retrieved from\n * CLOSURE_DEFINES or CLOSURE_UNCOMPILED_DEFINES if the object is defined and\n * has the property specified, and otherwise used the defined defaultValue.\n * When compiled the default can be overridden using the compiler\n * options or the value set in the CLOSURE_DEFINES object.\n *\n * @param {string} name The distinguished name to provide.\n * @param {string|number|boolean} defaultValue\n */\ngoog.define = function(name, defaultValue) {\n  var value = defaultValue;\n  if (!COMPILED) {\n    if (goog.global.CLOSURE_UNCOMPILED_DEFINES &&\n        // Anti DOM-clobbering runtime check (b/37736576).\n        /** @type {?} */ (goog.global.CLOSURE_UNCOMPILED_DEFINES).nodeType ===\n            undefined &&\n        Object.prototype.hasOwnProperty.call(\n            goog.global.CLOSURE_UNCOMPILED_DEFINES, name)) {\n      value = goog.global.CLOSURE_UNCOMPILED_DEFINES[name];\n    } else if (\n        goog.global.CLOSURE_DEFINES &&\n        // Anti DOM-clobbering runtime check (b/37736576).\n        /** @type {?} */ (goog.global.CLOSURE_DEFINES).nodeType === undefined &&\n        Object.prototype.hasOwnProperty.call(\n            goog.global.CLOSURE_DEFINES, name)) {\n      value = goog.global.CLOSURE_DEFINES[name];\n    }\n  }\n  goog.exportPath_(name, value);\n};\n\n\n/**\n * @define {boolean} DEBUG is provided as a convenience so that debugging code\n * that should not be included in a production. It can be easily stripped\n * by specifying --define goog.DEBUG=false to the Closure Compiler aka\n * JSCompiler. For example, most toString() methods should be declared inside an\n * \"if (goog.DEBUG)\" conditional because they are generally used for debugging\n * purposes and it is difficult for the JSCompiler to statically determine\n * whether they are used.\n */\ngoog.define('goog.DEBUG', true);\n\n\n/**\n * @define {string} LOCALE defines the locale being used for compilation. It is\n * used to select locale specific data to be compiled in js binary. BUILD rule\n * can specify this value by \"--define goog.LOCALE=<locale_name>\" as a compiler\n * option.\n *\n * Take into account that the locale code format is important. You should use\n * the canonical Unicode format with hyphen as a delimiter. Language must be\n * lowercase, Language Script - Capitalized, Region - UPPERCASE.\n * There are few examples: pt-BR, en, en-US, sr-Latin-BO, zh-Hans-CN.\n *\n * See more info about locale codes here:\n * http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers\n *\n * For language codes you should use values defined by ISO 693-1. See it here\n * http://www.w3.org/WAI/ER/IG/ert/iso639.htm. There is only one exception from\n * this rule: the Hebrew language. For legacy reasons the old code (iw) should\n * be used instead of the new code (he).\n *\n */\ngoog.define('goog.LOCALE', 'en');  // default to en\n\n\n/**\n * @define {boolean} Whether this code is running on trusted sites.\n *\n * On untrusted sites, several native functions can be defined or overridden by\n * external libraries like Prototype, Datejs, and JQuery and setting this flag\n * to false forces closure to use its own implementations when possible.\n *\n * If your JavaScript can be loaded by a third party site and you are wary about\n * relying on non-standard implementations, specify\n * \"--define goog.TRUSTED_SITE=false\" to the compiler.\n */\ngoog.define('goog.TRUSTED_SITE', true);\n\n\n/**\n * @define {boolean} Whether a project is expected to be running in strict mode.\n *\n * This define can be used to trigger alternate implementations compatible with\n * running in EcmaScript Strict mode or warn about unavailable functionality.\n * @see https://goo.gl/PudQ4y\n *\n */\ngoog.define('goog.STRICT_MODE_COMPATIBLE', false);\n\n\n/**\n * @define {boolean} Whether code that calls {@link goog.setTestOnly} should\n *     be disallowed in the compilation unit.\n */\ngoog.define('goog.DISALLOW_TEST_ONLY_CODE', COMPILED && !goog.DEBUG);\n\n\n/**\n * @define {boolean} Whether to use a Chrome app CSP-compliant method for\n *     loading scripts via goog.require. @see appendScriptSrcNode_.\n */\ngoog.define('goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING', false);\n\n\n/**\n * Defines a namespace in Closure.\n *\n * A namespace may only be defined once in a codebase. It may be defined using\n * goog.provide() or goog.module().\n *\n * The presence of one or more goog.provide() calls in a file indicates\n * that the file defines the given objects/namespaces.\n * Provided symbols must not be null or undefined.\n *\n * In addition, goog.provide() creates the object stubs for a namespace\n * (for example, goog.provide(\"goog.foo.bar\") will create the object\n * goog.foo.bar if it does not already exist).\n *\n * Build tools also scan for provide/require/module statements\n * to discern dependencies, build dependency files (see deps.js), etc.\n *\n * @see goog.require\n * @see goog.module\n * @param {string} name Namespace provided by this file in the form\n *     \"goog.package.part\".\n */\ngoog.provide = function(name) {\n  if (goog.isInModuleLoader_()) {\n    throw new Error('goog.provide can not be used within a goog.module.');\n  }\n  if (!COMPILED) {\n    // Ensure that the same namespace isn't provided twice.\n    // A goog.module/goog.provide maps a goog.require to a specific file\n    if (goog.isProvided_(name)) {\n      throw new Error('Namespace \"' + name + '\" already declared.');\n    }\n  }\n\n  goog.constructNamespace_(name);\n};\n\n\n/**\n * @param {string} name Namespace provided by this file in the form\n *     \"goog.package.part\".\n * @param {Object=} opt_obj The object to embed in the namespace.\n * @private\n */\ngoog.constructNamespace_ = function(name, opt_obj) {\n  if (!COMPILED) {\n    delete goog.implicitNamespaces_[name];\n\n    var namespace = name;\n    while ((namespace = namespace.substring(0, namespace.lastIndexOf('.')))) {\n      if (goog.getObjectByName(namespace)) {\n        break;\n      }\n      goog.implicitNamespaces_[namespace] = true;\n    }\n  }\n\n  goog.exportPath_(name, opt_obj);\n};\n\n\n/**\n * Module identifier validation regexp.\n * Note: This is a conservative check, it is very possible to be more lenient,\n *   the primary exclusion here is \"/\" and \"\\\" and a leading \".\", these\n *   restrictions are intended to leave the door open for using goog.require\n *   with relative file paths rather than module identifiers.\n * @private\n */\ngoog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\n\n\n/**\n * Defines a module in Closure.\n *\n * Marks that this file must be loaded as a module and claims the namespace.\n *\n * A namespace may only be defined once in a codebase. It may be defined using\n * goog.provide() or goog.module().\n *\n * goog.module() has three requirements:\n * - goog.module may not be used in the same file as goog.provide.\n * - goog.module must be the first statement in the file.\n * - only one goog.module is allowed per file.\n *\n * When a goog.module annotated file is loaded, it is enclosed in\n * a strict function closure. This means that:\n * - any variables declared in a goog.module file are private to the file\n * (not global), though the compiler is expected to inline the module.\n * - The code must obey all the rules of \"strict\" JavaScript.\n * - the file will be marked as \"use strict\"\n *\n * NOTE: unlike goog.provide, goog.module does not declare any symbols by\n * itself. If declared symbols are desired, use\n * goog.module.declareLegacyNamespace().\n *\n *\n * See the public goog.module proposal: http://goo.gl/Va1hin\n *\n * @param {string} name Namespace provided by this file in the form\n *     \"goog.package.part\", is expected but not required.\n * @return {void}\n */\ngoog.module = function(name) {\n  if (!goog.isString(name) || !name ||\n      name.search(goog.VALID_MODULE_RE_) == -1) {\n    throw new Error('Invalid module identifier');\n  }\n  if (!goog.isInModuleLoader_()) {\n    throw new Error(\n        'Module ' + name + ' has been loaded incorrectly. Note, ' +\n        'modules cannot be loaded as normal scripts. They require some kind of ' +\n        'pre-processing step. You\\'re likely trying to load a module via a ' +\n        'script tag or as a part of a concatenated bundle without rewriting the ' +\n        'module. For more info see: ' +\n        'https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.');\n  }\n  if (goog.moduleLoaderState_.moduleName) {\n    throw new Error('goog.module may only be called once per module.');\n  }\n\n  // Store the module name for the loader.\n  goog.moduleLoaderState_.moduleName = name;\n  if (!COMPILED) {\n    // Ensure that the same namespace isn't provided twice.\n    // A goog.module/goog.provide maps a goog.require to a specific file\n    if (goog.isProvided_(name)) {\n      throw new Error('Namespace \"' + name + '\" already declared.');\n    }\n    delete goog.implicitNamespaces_[name];\n  }\n};\n\n\n/**\n * @param {string} name The module identifier.\n * @return {?} The module exports for an already loaded module or null.\n *\n * Note: This is not an alternative to goog.require, it does not\n * indicate a hard dependency, instead it is used to indicate\n * an optional dependency or to access the exports of a module\n * that has already been loaded.\n * @suppress {missingProvide}\n */\ngoog.module.get = function(name) {\n  return goog.module.getInternal_(name);\n};\n\n\n/**\n * @param {string} name The module identifier.\n * @return {?} The module exports for an already loaded module or null.\n * @private\n */\ngoog.module.getInternal_ = function(name) {\n  if (!COMPILED) {\n    if (name in goog.loadedModules_) {\n      return goog.loadedModules_[name];\n    } else if (!goog.implicitNamespaces_[name]) {\n      var ns = goog.getObjectByName(name);\n      return ns != null ? ns : null;\n    }\n  }\n  return null;\n};\n\n\n/**\n * @private {?{moduleName: (string|undefined), declareLegacyNamespace:boolean}}\n */\ngoog.moduleLoaderState_ = null;\n\n\n/**\n * @private\n * @return {boolean} Whether a goog.module is currently being initialized.\n */\ngoog.isInModuleLoader_ = function() {\n  return goog.moduleLoaderState_ != null;\n};\n\n\n/**\n * Provide the module's exports as a globally accessible object under the\n * module's declared name.  This is intended to ease migration to goog.module\n * for files that have existing usages.\n * @suppress {missingProvide}\n */\ngoog.module.declareLegacyNamespace = function() {\n  if (!COMPILED && !goog.isInModuleLoader_()) {\n    throw new Error(\n        'goog.module.declareLegacyNamespace must be called from ' +\n        'within a goog.module');\n  }\n  if (!COMPILED && !goog.moduleLoaderState_.moduleName) {\n    throw new Error(\n        'goog.module must be called prior to ' +\n        'goog.module.declareLegacyNamespace.');\n  }\n  goog.moduleLoaderState_.declareLegacyNamespace = true;\n};\n\n\n/**\n * Marks that the current file should only be used for testing, and never for\n * live code in production.\n *\n * In the case of unit tests, the message may optionally be an exact namespace\n * for the test (e.g. 'goog.stringTest'). The linter will then ignore the extra\n * provide (if not explicitly defined in the code).\n *\n * @param {string=} opt_message Optional message to add to the error that's\n *     raised when used in production code.\n */\ngoog.setTestOnly = function(opt_message) {\n  if (goog.DISALLOW_TEST_ONLY_CODE) {\n    opt_message = opt_message || '';\n    throw new Error(\n        'Importing test-only code into non-debug environment' +\n        (opt_message ? ': ' + opt_message : '.'));\n  }\n};\n\n\n/**\n * Forward declares a symbol. This is an indication to the compiler that the\n * symbol may be used in the source yet is not required and may not be provided\n * in compilation.\n *\n * The most common usage of forward declaration is code that takes a type as a\n * function parameter but does not need to require it. By forward declaring\n * instead of requiring, no hard dependency is made, and (if not required\n * elsewhere) the namespace may never be required and thus, not be pulled\n * into the JavaScript binary. If it is required elsewhere, it will be type\n * checked as normal.\n *\n * Before using goog.forwardDeclare, please read the documentation at\n * https://github.com/google/closure-compiler/wiki/Bad-Type-Annotation to\n * understand the options and tradeoffs when working with forward declarations.\n *\n * @param {string} name The namespace to forward declare in the form of\n *     \"goog.package.part\".\n */\ngoog.forwardDeclare = function(name) {};\n\n\n/**\n * Forward declare type information. Used to assign types to goog.global\n * referenced object that would otherwise result in unknown type references\n * and thus block property disambiguation.\n */\ngoog.forwardDeclare('Document');\ngoog.forwardDeclare('HTMLScriptElement');\ngoog.forwardDeclare('XMLHttpRequest');\n\n\nif (!COMPILED) {\n  /**\n   * Check if the given name has been goog.provided. This will return false for\n   * names that are available only as implicit namespaces.\n   * @param {string} name name of the object to look for.\n   * @return {boolean} Whether the name has been provided.\n   * @private\n   */\n  goog.isProvided_ = function(name) {\n    return (name in goog.loadedModules_) ||\n        (!goog.implicitNamespaces_[name] &&\n         goog.isDefAndNotNull(goog.getObjectByName(name)));\n  };\n\n  /**\n   * Namespaces implicitly defined by goog.provide. For example,\n   * goog.provide('goog.events.Event') implicitly declares that 'goog' and\n   * 'goog.events' must be namespaces.\n   *\n   * @type {!Object<string, (boolean|undefined)>}\n   * @private\n   */\n  goog.implicitNamespaces_ = {'goog.module': true};\n\n  // NOTE: We add goog.module as an implicit namespace as goog.module is defined\n  // here and because the existing module package has not been moved yet out of\n  // the goog.module namespace. This satisifies both the debug loader and\n  // ahead-of-time dependency management.\n}\n\n\n/**\n * Returns an object based on its fully qualified external name.  The object\n * is not found if null or undefined.  If you are using a compilation pass that\n * renames property names beware that using this function will not find renamed\n * properties.\n *\n * @param {string} name The fully qualified name.\n * @param {Object=} opt_obj The object within which to look; default is\n *     |goog.global|.\n * @return {?} The value (object or primitive) or, if not found, null.\n */\ngoog.getObjectByName = function(name, opt_obj) {\n  var parts = name.split('.');\n  var cur = opt_obj || goog.global;\n  for (var i = 0; i < parts.length; i++) {\n    cur = cur[parts[i]];\n    if (!goog.isDefAndNotNull(cur)) {\n      return null;\n    }\n  }\n  return cur;\n};\n\n\n/**\n * Globalizes a whole namespace, such as goog or goog.lang.\n *\n * @param {!Object} obj The namespace to globalize.\n * @param {Object=} opt_global The object to add the properties to.\n * @deprecated Properties may be explicitly exported to the global scope, but\n *     this should no longer be done in bulk.\n */\ngoog.globalize = function(obj, opt_global) {\n  var global = opt_global || goog.global;\n  for (var x in obj) {\n    global[x] = obj[x];\n  }\n};\n\n\n/**\n * Adds a dependency from a file to the files it requires.\n * @param {string} relPath The path to the js file.\n * @param {!Array<string>} provides An array of strings with\n *     the names of the objects this file provides.\n * @param {!Array<string>} requires An array of strings with\n *     the names of the objects this file requires.\n * @param {boolean|!Object<string>=} opt_loadFlags Parameters indicating\n *     how the file must be loaded.  The boolean 'true' is equivalent\n *     to {'module': 'goog'} for backwards-compatibility.  Valid properties\n *     and values include {'module': 'goog'} and {'lang': 'es6'}.\n */\ngoog.addDependency = function(relPath, provides, requires, opt_loadFlags) {\n  if (goog.DEPENDENCIES_ENABLED) {\n    var provide, require;\n    var path = relPath.replace(/\\\\/g, '/');\n    var deps = goog.dependencies_;\n    if (!opt_loadFlags || typeof opt_loadFlags === 'boolean') {\n      opt_loadFlags = opt_loadFlags ? {'module': 'goog'} : {};\n    }\n    for (var i = 0; provide = provides[i]; i++) {\n      deps.nameToPath[provide] = path;\n      deps.loadFlags[path] = opt_loadFlags;\n    }\n    for (var j = 0; require = requires[j]; j++) {\n      if (!(path in deps.requires)) {\n        deps.requires[path] = {};\n      }\n      deps.requires[path][require] = true;\n    }\n  }\n};\n\n\n\n\n// NOTE(nnaze): The debug DOM loader was included in base.js as an original way\n// to do \"debug-mode\" development.  The dependency system can sometimes be\n// confusing, as can the debug DOM loader's asynchronous nature.\n//\n// With the DOM loader, a call to goog.require() is not blocking -- the script\n// will not load until some point after the current script.  If a namespace is\n// needed at runtime, it needs to be defined in a previous script, or loaded via\n// require() with its registered dependencies.\n//\n// User-defined namespaces may need their own deps file. For a reference on\n// creating a deps file, see:\n// Externally: https://developers.google.com/closure/library/docs/depswriter\n//\n// Because of legacy clients, the DOM loader can't be easily removed from\n// base.js.  Work was done to make it disableable or replaceable for\n// different environments (DOM-less JavaScript interpreters like Rhino or V8,\n// for example). See bootstrap/ for more information.\n\n\n/**\n * @define {boolean} Whether to enable the debug loader.\n *\n * If enabled, a call to goog.require() will attempt to load the namespace by\n * appending a script tag to the DOM (if the namespace has been registered).\n *\n * If disabled, goog.require() will simply assert that the namespace has been\n * provided (and depend on the fact that some outside tool correctly ordered\n * the script).\n */\ngoog.define('goog.ENABLE_DEBUG_LOADER', true);\n\n\n/**\n * @param {string} msg\n * @private\n */\ngoog.logToConsole_ = function(msg) {\n  if (goog.global.console) {\n    goog.global.console['error'](msg);\n  }\n};\n\n\n/**\n * Implements a system for the dynamic resolution of dependencies that works in\n * parallel with the BUILD system. Note that all calls to goog.require will be\n * stripped by the compiler.\n * @see goog.provide\n * @param {string} name Namespace to include (as was given in goog.provide()) in\n *     the form \"goog.package.part\".\n * @return {?} If called within a goog.module file, the associated namespace or\n *     module otherwise null.\n */\ngoog.require = function(name) {\n  // If the object already exists we do not need to do anything.\n  if (!COMPILED) {\n    if (goog.ENABLE_DEBUG_LOADER && goog.IS_OLD_IE_) {\n      goog.maybeProcessDeferredDep_(name);\n    }\n\n    if (goog.isProvided_(name)) {\n      if (goog.isInModuleLoader_()) {\n        return goog.module.getInternal_(name);\n      }\n    } else if (goog.ENABLE_DEBUG_LOADER) {\n      var path = goog.getPathFromDeps_(name);\n      if (path) {\n        goog.writeScripts_(path);\n      } else {\n        var errorMessage = 'goog.require could not find: ' + name;\n        goog.logToConsole_(errorMessage);\n\n        throw new Error(errorMessage);\n      }\n    }\n\n    return null;\n  }\n};\n\n\n/**\n * Path for included scripts.\n * @type {string}\n */\ngoog.basePath = '';\n\n\n/**\n * A hook for overriding the base path.\n * @type {string|undefined}\n */\ngoog.global.CLOSURE_BASE_PATH;\n\n\n/**\n * Whether to attempt to load Closure's deps file. By default, when uncompiled,\n * deps files will attempt to be loaded.\n * @type {boolean|undefined}\n */\ngoog.global.CLOSURE_NO_DEPS;\n\n\n/**\n * A function to import a single script. This is meant to be overridden when\n * Closure is being run in non-HTML contexts, such as web workers. It's defined\n * in the global scope so that it can be set before base.js is loaded, which\n * allows deps.js to be imported properly.\n *\n * The function is passed the script source, which is a relative URI. It should\n * return true if the script was imported, false otherwise.\n * @type {(function(string): boolean)|undefined}\n */\ngoog.global.CLOSURE_IMPORT_SCRIPT;\n\n\n/**\n * Null function used for default values of callbacks, etc.\n * @return {void} Nothing.\n */\ngoog.nullFunction = function() {};\n\n\n/**\n * When defining a class Foo with an abstract method bar(), you can do:\n * Foo.prototype.bar = goog.abstractMethod\n *\n * Now if a subclass of Foo fails to override bar(), an error will be thrown\n * when bar() is invoked.\n *\n * @type {!Function}\n * @throws {Error} when invoked to indicate the method should be overridden.\n */\ngoog.abstractMethod = function() {\n  throw new Error('unimplemented abstract method');\n};\n\n\n/**\n * Adds a {@code getInstance} static method that always returns the same\n * instance object.\n * @param {!Function} ctor The constructor for the class to add the static\n *     method to.\n */\ngoog.addSingletonGetter = function(ctor) {\n  // instance_ is immediately set to prevent issues with sealed constructors\n  // such as are encountered when a constructor is returned as the export object\n  // of a goog.module in unoptimized code.\n  ctor.instance_ = undefined;\n  ctor.getInstance = function() {\n    if (ctor.instance_) {\n      return ctor.instance_;\n    }\n    if (goog.DEBUG) {\n      // NOTE: JSCompiler can't optimize away Array#push.\n      goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor;\n    }\n    return ctor.instance_ = new ctor;\n  };\n};\n\n\n/**\n * All singleton classes that have been instantiated, for testing. Don't read\n * it directly, use the {@code goog.testing.singleton} module. The compiler\n * removes this variable if unused.\n * @type {!Array<!Function>}\n * @private\n */\ngoog.instantiatedSingletons_ = [];\n\n\n/**\n * @define {boolean} Whether to load goog.modules using {@code eval} when using\n * the debug loader.  This provides a better debugging experience as the\n * source is unmodified and can be edited using Chrome Workspaces or similar.\n * However in some environments the use of {@code eval} is banned\n * so we provide an alternative.\n */\ngoog.define('goog.LOAD_MODULE_USING_EVAL', true);\n\n\n/**\n * @define {boolean} Whether the exports of goog.modules should be sealed when\n * possible.\n */\ngoog.define('goog.SEAL_MODULE_EXPORTS', goog.DEBUG);\n\n\n/**\n * The registry of initialized modules:\n * the module identifier to module exports map.\n * @private @const {!Object<string, ?>}\n */\ngoog.loadedModules_ = {};\n\n\n/**\n * True if goog.dependencies_ is available.\n * @const {boolean}\n */\ngoog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;\n\n\n/**\n * @define {string} How to decide whether to transpile.  Valid values\n * are 'always', 'never', and 'detect'.  The default ('detect') is to\n * use feature detection to determine which language levels need\n * transpilation.\n */\n// NOTE(user): we could expand this to accept a language level to bypass\n// detection: e.g. goog.TRANSPILE == 'es5' would transpile ES6 files but\n// would leave ES3 and ES5 files alone.\ngoog.define('goog.TRANSPILE', 'detect');\n\n\n/**\n * @define {string} Path to the transpiler.  Executing the script at this\n * path (relative to base.js) should define a function $jscomp.transpile.\n */\ngoog.define('goog.TRANSPILER', 'transpile.js');\n\n\nif (goog.DEPENDENCIES_ENABLED) {\n  /**\n   * This object is used to keep track of dependencies and other data that is\n   * used for loading scripts.\n   * @private\n   * @type {{\n   *   loadFlags: !Object<string, !Object<string, string>>,\n   *   nameToPath: !Object<string, string>,\n   *   requires: !Object<string, !Object<string, boolean>>,\n   *   visited: !Object<string, boolean>,\n   *   written: !Object<string, boolean>,\n   *   deferred: !Object<string, string>\n   * }}\n   */\n  goog.dependencies_ = {\n    loadFlags: {},  // 1 to 1\n\n    nameToPath: {},  // 1 to 1\n\n    requires: {},  // 1 to many\n\n    // Used when resolving dependencies to prevent us from visiting file twice.\n    visited: {},\n\n    written: {},  // Used to keep track of script files we have written.\n\n    deferred: {}  // Used to track deferred module evaluations in old IEs\n  };\n\n\n  /**\n   * Tries to detect whether is in the context of an HTML document.\n   * @return {boolean} True if it looks like HTML document.\n   * @private\n   */\n  goog.inHtmlDocument_ = function() {\n    /** @type {Document} */\n    var doc = goog.global.document;\n    return doc != null && 'write' in doc;  // XULDocument misses write.\n  };\n\n\n  /**\n   * Tries to detect the base path of base.js script that bootstraps Closure.\n   * @private\n   */\n  goog.findBasePath_ = function() {\n    if (goog.isDef(goog.global.CLOSURE_BASE_PATH) &&\n        // Anti DOM-clobbering runtime check (b/37736576).\n        goog.isString(goog.global.CLOSURE_BASE_PATH)) {\n      goog.basePath = goog.global.CLOSURE_BASE_PATH;\n      return;\n    } else if (!goog.inHtmlDocument_()) {\n      return;\n    }\n    /** @type {Document} */\n    var doc = goog.global.document;\n    // If we have a currentScript available, use it exclusively.\n    var currentScript = doc.currentScript;\n    if (currentScript) {\n      var scripts = [currentScript];\n    } else {\n      var scripts = doc.getElementsByTagName('SCRIPT');\n    }\n    // Search backwards since the current script is in almost all cases the one\n    // that has base.js.\n    for (var i = scripts.length - 1; i >= 0; --i) {\n      var script = /** @type {!HTMLScriptElement} */ (scripts[i]);\n      var src = script.src;\n      var qmark = src.lastIndexOf('?');\n      var l = qmark == -1 ? src.length : qmark;\n      if (src.substr(l - 7, 7) == 'base.js') {\n        goog.basePath = src.substr(0, l - 7);\n        return;\n      }\n    }\n  };\n\n\n  /**\n   * Imports a script if, and only if, that script hasn't already been imported.\n   * (Must be called at execution time)\n   * @param {string} src Script source.\n   * @param {string=} opt_sourceText The optionally source text to evaluate\n   * @private\n   */\n  goog.importScript_ = function(src, opt_sourceText) {\n    var importScript =\n        goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;\n    if (importScript(src, opt_sourceText)) {\n      goog.dependencies_.written[src] = true;\n    }\n  };\n\n\n  /**\n   * Whether the browser is IE9 or earlier, which needs special handling\n   * for deferred modules.\n   * @const @private {boolean}\n   */\n  goog.IS_OLD_IE_ =\n      !!(!goog.global.atob && goog.global.document && goog.global.document.all);\n\n\n  /**\n   * Whether IE9 or earlier is waiting on a dependency.  This ensures that\n   * deferred modules that have no non-deferred dependencies actually get\n   * loaded, since if we defer them and then never pull in a non-deferred\n   * script, then `goog.loadQueuedModules_` will never be called.  Instead,\n   * if not waiting on anything we simply don't defer in the first place.\n   * @private {boolean}\n   */\n  goog.oldIeWaiting_ = false;\n\n\n  /**\n   * Given a URL initiate retrieval and execution of a script that needs\n   * pre-processing.\n   * @param {string} src Script source URL.\n   * @param {boolean} isModule Whether this is a goog.module.\n   * @param {boolean} needsTranspile Whether this source needs transpilation.\n   * @private\n   */\n  goog.importProcessedScript_ = function(src, isModule, needsTranspile) {\n    // In an attempt to keep browsers from timing out loading scripts using\n    // synchronous XHRs, put each load in its own script block.\n    var bootstrap = 'goog.retrieveAndExec_(\"' + src + '\", ' + isModule + ', ' +\n        needsTranspile + ');';\n\n    goog.importScript_('', bootstrap);\n  };\n\n\n  /** @private {!Array<string>} */\n  goog.queuedModules_ = [];\n\n\n  /**\n   * Return an appropriate module text. Suitable to insert into\n   * a script tag (that is unescaped).\n   * @param {string} srcUrl\n   * @param {string} scriptText\n   * @return {string}\n   * @private\n   */\n  goog.wrapModule_ = function(srcUrl, scriptText) {\n    if (!goog.LOAD_MODULE_USING_EVAL || !goog.isDef(goog.global.JSON)) {\n      return '' +\n          'goog.loadModule(function(exports) {' +\n          '\"use strict\";' + scriptText +\n          '\\n' +  // terminate any trailing single line comment.\n          ';return exports' +\n          '});' +\n          '\\n//# sourceURL=' + srcUrl + '\\n';\n    } else {\n      return '' +\n          'goog.loadModule(' +\n          goog.global.JSON.stringify(\n              scriptText + '\\n//# sourceURL=' + srcUrl + '\\n') +\n          ');';\n    }\n  };\n\n  // On IE9 and earlier, it is necessary to handle\n  // deferred module loads. In later browsers, the\n  // code to be evaluated is simply inserted as a script\n  // block in the correct order. To eval deferred\n  // code at the right time, we piggy back on goog.require to call\n  // goog.maybeProcessDeferredDep_.\n  //\n  // The goog.requires are used both to bootstrap\n  // the loading process (when no deps are available) and\n  // declare that they should be available.\n  //\n  // Here we eval the sources, if all the deps are available\n  // either already eval'd or goog.require'd.  This will\n  // be the case when all the dependencies have already\n  // been loaded, and the dependent module is loaded.\n  //\n  // But this alone isn't sufficient because it is also\n  // necessary to handle the case where there is no root\n  // that is not deferred.  For that there we register for an event\n  // and trigger goog.loadQueuedModules_ handle any remaining deferred\n  // evaluations.\n\n  /**\n   * Handle any remaining deferred goog.module evals.\n   * @private\n   */\n  goog.loadQueuedModules_ = function() {\n    var count = goog.queuedModules_.length;\n    if (count > 0) {\n      var queue = goog.queuedModules_;\n      goog.queuedModules_ = [];\n      for (var i = 0; i < count; i++) {\n        var path = queue[i];\n        goog.maybeProcessDeferredPath_(path);\n      }\n    }\n    goog.oldIeWaiting_ = false;\n  };\n\n\n  /**\n   * Eval the named module if its dependencies are\n   * available.\n   * @param {string} name The module to load.\n   * @private\n   */\n  goog.maybeProcessDeferredDep_ = function(name) {\n    if (goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name)) {\n      var path = goog.getPathFromDeps_(name);\n      goog.maybeProcessDeferredPath_(goog.basePath + path);\n    }\n  };\n\n  /**\n   * @param {string} name The module to check.\n   * @return {boolean} Whether the name represents a\n   *     module whose evaluation has been deferred.\n   * @private\n   */\n  goog.isDeferredModule_ = function(name) {\n    var path = goog.getPathFromDeps_(name);\n    var loadFlags = path && goog.dependencies_.loadFlags[path] || {};\n    var languageLevel = loadFlags['lang'] || 'es3';\n    if (path && (loadFlags['module'] == 'goog' ||\n                 goog.needsTranspile_(languageLevel))) {\n      var abspath = goog.basePath + path;\n      return (abspath) in goog.dependencies_.deferred;\n    }\n    return false;\n  };\n\n  /**\n   * @param {string} name The module to check.\n   * @return {boolean} Whether the name represents a\n   *     module whose declared dependencies have all been loaded\n   *     (eval'd or a deferred module load)\n   * @private\n   */\n  goog.allDepsAreAvailable_ = function(name) {\n    var path = goog.getPathFromDeps_(name);\n    if (path && (path in goog.dependencies_.requires)) {\n      for (var requireName in goog.dependencies_.requires[path]) {\n        if (!goog.isProvided_(requireName) &&\n            !goog.isDeferredModule_(requireName)) {\n          return false;\n        }\n      }\n    }\n    return true;\n  };\n\n\n  /**\n   * @param {string} abspath\n   * @private\n   */\n  goog.maybeProcessDeferredPath_ = function(abspath) {\n    if (abspath in goog.dependencies_.deferred) {\n      var src = goog.dependencies_.deferred[abspath];\n      delete goog.dependencies_.deferred[abspath];\n      goog.globalEval(src);\n    }\n  };\n\n\n  /**\n   * Load a goog.module from the provided URL.  This is not a general purpose\n   * code loader and does not support late loading code, that is it should only\n   * be used during page load. This method exists to support unit tests and\n   * \"debug\" loaders that would otherwise have inserted script tags. Under the\n   * hood this needs to use a synchronous XHR and is not recommeneded for\n   * production code.\n   *\n   * The module's goog.requires must have already been satisified; an exception\n   * will be thrown if this is not the case. This assumption is that no\n   * \"deps.js\" file exists, so there is no way to discover and locate the\n   * module-to-be-loaded's dependencies and no attempt is made to do so.\n   *\n   * There should only be one attempt to load a module.  If\n   * \"goog.loadModuleFromUrl\" is called for an already loaded module, an\n   * exception will be throw.\n   *\n   * @param {string} url The URL from which to attempt to load the goog.module.\n   */\n  goog.loadModuleFromUrl = function(url) {\n    // Because this executes synchronously, we don't need to do any additional\n    // bookkeeping. When \"goog.loadModule\" the namespace will be marked as\n    // having been provided which is sufficient.\n    goog.retrieveAndExec_(url, true, false);\n  };\n\n\n  /**\n   * Writes a new script pointing to {@code src} directly into the DOM.\n   *\n   * NOTE: This method is not CSP-compliant. @see goog.appendScriptSrcNode_ for\n   * the fallback mechanism.\n   *\n   * @param {string} src The script URL.\n   * @private\n   */\n  goog.writeScriptSrcNode_ = function(src) {\n    goog.global.document.write(\n        '<script type=\"text/javascript\" src=\"' + src + '\"></' +\n        'script>');\n  };\n\n\n  /**\n   * Appends a new script node to the DOM using a CSP-compliant mechanism. This\n   * method exists as a fallback for document.write (which is not allowed in a\n   * strict CSP context, e.g., Chrome apps).\n   *\n   * NOTE: This method is not analogous to using document.write to insert a\n   * <script> tag; specifically, the user agent will execute a script added by\n   * document.write immediately after the current script block finishes\n   * executing, whereas the DOM-appended script node will not be executed until\n   * the entire document is parsed and executed. That is to say, this script is\n   * added to the end of the script execution queue.\n   *\n   * The page must not attempt to call goog.required entities until after the\n   * document has loaded, e.g., in or after the window.onload callback.\n   *\n   * @param {string} src The script URL.\n   * @private\n   */\n  goog.appendScriptSrcNode_ = function(src) {\n    /** @type {Document} */\n    var doc = goog.global.document;\n    var scriptEl =\n        /** @type {HTMLScriptElement} */ (doc.createElement('script'));\n    scriptEl.type = 'text/javascript';\n    scriptEl.src = src;\n    scriptEl.defer = false;\n    scriptEl.async = false;\n    doc.head.appendChild(scriptEl);\n  };\n\n\n  /**\n   * The default implementation of the import function. Writes a script tag to\n   * import the script.\n   *\n   * @param {string} src The script url.\n   * @param {string=} opt_sourceText The optionally source text to evaluate\n   * @return {boolean} True if the script was imported, false otherwise.\n   * @private\n   */\n  goog.writeScriptTag_ = function(src, opt_sourceText) {\n    if (goog.inHtmlDocument_()) {\n      /** @type {!HTMLDocument} */\n      var doc = goog.global.document;\n\n      // If the user tries to require a new symbol after document load,\n      // something has gone terribly wrong. Doing a document.write would\n      // wipe out the page. This does not apply to the CSP-compliant method\n      // of writing script tags.\n      if (!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING &&\n          doc.readyState == 'complete') {\n        // Certain test frameworks load base.js multiple times, which tries\n        // to write deps.js each time. If that happens, just fail silently.\n        // These frameworks wipe the page between each load of base.js, so this\n        // is OK.\n        var isDeps = /\\bdeps.js$/.test(src);\n        if (isDeps) {\n          return false;\n        } else {\n          throw new Error('Cannot write \"' + src + '\" after document load');\n        }\n      }\n\n      if (opt_sourceText === undefined) {\n        if (!goog.IS_OLD_IE_) {\n          if (goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING) {\n            goog.appendScriptSrcNode_(src);\n          } else {\n            goog.writeScriptSrcNode_(src);\n          }\n        } else {\n          goog.oldIeWaiting_ = true;\n          var state = ' onreadystatechange=\\'goog.onScriptLoad_(this, ' +\n              ++goog.lastNonModuleScriptIndex_ + ')\\' ';\n          doc.write(\n              '<script type=\"text/javascript\" src=\"' + src + '\"' + state +\n              '></' +\n              'script>');\n        }\n      } else {\n        doc.write(\n            '<script type=\"text/javascript\">' +\n            goog.protectScriptTag_(opt_sourceText) + '</' +\n            'script>');\n      }\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  /**\n   * Rewrites closing script tags in input to avoid ending an enclosing script\n   * tag.\n   *\n   * @param {string} str\n   * @return {string}\n   * @private\n   */\n  goog.protectScriptTag_ = function(str) {\n    return str.replace(/<\\/(SCRIPT)/ig, '\\\\x3c/$1');\n  };\n\n  /**\n   * Determines whether the given language needs to be transpiled.\n   * @param {string} lang\n   * @return {boolean}\n   * @private\n   */\n  goog.needsTranspile_ = function(lang) {\n    if (goog.TRANSPILE == 'always') {\n      return true;\n    } else if (goog.TRANSPILE == 'never') {\n      return false;\n    } else if (!goog.requiresTranspilation_) {\n      goog.requiresTranspilation_ = goog.createRequiresTranspilation_();\n    }\n    if (lang in goog.requiresTranspilation_) {\n      return goog.requiresTranspilation_[lang];\n    } else {\n      throw new Error('Unknown language mode: ' + lang);\n    }\n  };\n\n  /** @private {?Object<string, boolean>} */\n  goog.requiresTranspilation_ = null;\n\n\n  /** @private {number} */\n  goog.lastNonModuleScriptIndex_ = 0;\n\n\n  /**\n   * A readystatechange handler for legacy IE\n   * @param {?} script\n   * @param {number} scriptIndex\n   * @return {boolean}\n   * @private\n   */\n  goog.onScriptLoad_ = function(script, scriptIndex) {\n    // for now load the modules when we reach the last script,\n    // later allow more inter-mingling.\n    if (script.readyState == 'complete' &&\n        goog.lastNonModuleScriptIndex_ == scriptIndex) {\n      goog.loadQueuedModules_();\n    }\n    return true;\n  };\n\n  /**\n   * Resolves dependencies based on the dependencies added using addDependency\n   * and calls importScript_ in the correct order.\n   * @param {string} pathToLoad The path from which to start discovering\n   *     dependencies.\n   * @private\n   */\n  goog.writeScripts_ = function(pathToLoad) {\n    /** @type {!Array<string>} The scripts we need to write this time. */\n    var scripts = [];\n    var seenScript = {};\n    var deps = goog.dependencies_;\n\n    /** @param {string} path */\n    function visitNode(path) {\n      if (path in deps.written) {\n        return;\n      }\n\n      // We have already visited this one. We can get here if we have cyclic\n      // dependencies.\n      if (path in deps.visited) {\n        return;\n      }\n\n      deps.visited[path] = true;\n\n      if (path in deps.requires) {\n        for (var requireName in deps.requires[path]) {\n          // If the required name is defined, we assume that it was already\n          // bootstrapped by other means.\n          if (!goog.isProvided_(requireName)) {\n            if (requireName in deps.nameToPath) {\n              visitNode(deps.nameToPath[requireName]);\n            } else {\n              throw new Error('Undefined nameToPath for ' + requireName);\n            }\n          }\n        }\n      }\n\n      if (!(path in seenScript)) {\n        seenScript[path] = true;\n        scripts.push(path);\n      }\n    }\n\n    visitNode(pathToLoad);\n\n    // record that we are going to load all these scripts.\n    for (var i = 0; i < scripts.length; i++) {\n      var path = scripts[i];\n      goog.dependencies_.written[path] = true;\n    }\n\n    // If a module is loaded synchronously then we need to\n    // clear the current inModuleLoader value, and restore it when we are\n    // done loading the current \"requires\".\n    var moduleState = goog.moduleLoaderState_;\n    goog.moduleLoaderState_ = null;\n\n    for (var i = 0; i < scripts.length; i++) {\n      var path = scripts[i];\n      if (path) {\n        var loadFlags = deps.loadFlags[path] || {};\n        var languageLevel = loadFlags['lang'] || 'es3';\n        var needsTranspile = goog.needsTranspile_(languageLevel);\n        if (loadFlags['module'] == 'goog' || needsTranspile) {\n          goog.importProcessedScript_(\n              goog.basePath + path, loadFlags['module'] == 'goog',\n              needsTranspile);\n        } else {\n          goog.importScript_(goog.basePath + path);\n        }\n      } else {\n        goog.moduleLoaderState_ = moduleState;\n        throw new Error('Undefined script input');\n      }\n    }\n\n    // restore the current \"module loading state\"\n    goog.moduleLoaderState_ = moduleState;\n  };\n\n\n  /**\n   * Looks at the dependency rules and tries to determine the script file that\n   * fulfills a particular rule.\n   * @param {string} rule In the form goog.namespace.Class or project.script.\n   * @return {?string} Url corresponding to the rule, or null.\n   * @private\n   */\n  goog.getPathFromDeps_ = function(rule) {\n    if (rule in goog.dependencies_.nameToPath) {\n      return goog.dependencies_.nameToPath[rule];\n    } else {\n      return null;\n    }\n  };\n\n  goog.findBasePath_();\n\n  // Allow projects to manage the deps files themselves.\n  if (!goog.global.CLOSURE_NO_DEPS) {\n    goog.importScript_(goog.basePath + 'deps.js');\n  }\n}\n\n\n/**\n * @package {?boolean}\n * Visible for testing.\n */\ngoog.hasBadLetScoping = null;\n\n\n/**\n * @return {boolean}\n * @package Visible for testing.\n */\ngoog.useSafari10Workaround = function() {\n  if (goog.hasBadLetScoping == null) {\n    var hasBadLetScoping;\n    try {\n      hasBadLetScoping = !eval(\n          '\"use strict\";' +\n          'let x = 1; function f() { return typeof x; };' +\n          'f() == \"number\";');\n    } catch (e) {\n      // Assume that ES6 syntax isn't supported.\n      hasBadLetScoping = false;\n    }\n    goog.hasBadLetScoping = hasBadLetScoping;\n  }\n  return goog.hasBadLetScoping;\n};\n\n\n/**\n * @param {string} moduleDef\n * @return {string}\n * @package Visible for testing.\n */\ngoog.workaroundSafari10EvalBug = function(moduleDef) {\n  return '(function(){' + moduleDef +\n      '\\n' +  // Terminate any trailing single line comment.\n      ';' +   // Terminate any trailing expression.\n      '})();\\n';\n};\n\n\n/**\n * @param {function(?):?|string} moduleDef The module definition.\n */\ngoog.loadModule = function(moduleDef) {\n  // NOTE: we allow function definitions to be either in the from\n  // of a string to eval (which keeps the original source intact) or\n  // in a eval forbidden environment (CSP) we allow a function definition\n  // which in its body must call {@code goog.module}, and return the exports\n  // of the module.\n  var previousState = goog.moduleLoaderState_;\n  try {\n    goog.moduleLoaderState_ = {\n      moduleName: undefined,\n      declareLegacyNamespace: false\n    };\n    var exports;\n    if (goog.isFunction(moduleDef)) {\n      exports = moduleDef.call(undefined, {});\n    } else if (goog.isString(moduleDef)) {\n      if (goog.useSafari10Workaround()) {\n        moduleDef = goog.workaroundSafari10EvalBug(moduleDef);\n      }\n\n      exports = goog.loadModuleFromSource_.call(undefined, moduleDef);\n    } else {\n      throw new Error('Invalid module definition');\n    }\n\n    var moduleName = goog.moduleLoaderState_.moduleName;\n    if (!goog.isString(moduleName) || !moduleName) {\n      throw new Error('Invalid module name \\\"' + moduleName + '\\\"');\n    }\n\n    // Don't seal legacy namespaces as they may be uses as a parent of\n    // another namespace\n    if (goog.moduleLoaderState_.declareLegacyNamespace) {\n      goog.constructNamespace_(moduleName, exports);\n    } else if (\n        goog.SEAL_MODULE_EXPORTS && Object.seal && typeof exports == 'object' &&\n        exports != null) {\n      Object.seal(exports);\n    }\n\n    goog.loadedModules_[moduleName] = exports;\n  } finally {\n    goog.moduleLoaderState_ = previousState;\n  }\n};\n\n\n/**\n * @private @const\n */\ngoog.loadModuleFromSource_ = /** @type {function(string):?} */ (function() {\n  // NOTE: we avoid declaring parameters or local variables here to avoid\n  // masking globals or leaking values into the module definition.\n  'use strict';\n  var exports = {};\n  eval(arguments[0]);\n  return exports;\n});\n\n\n/**\n * Normalize a file path by removing redundant \"..\" and extraneous \".\" file\n * path components.\n * @param {string} path\n * @return {string}\n * @private\n */\ngoog.normalizePath_ = function(path) {\n  var components = path.split('/');\n  var i = 0;\n  while (i < components.length) {\n    if (components[i] == '.') {\n      components.splice(i, 1);\n    } else if (\n        i && components[i] == '..' && components[i - 1] &&\n        components[i - 1] != '..') {\n      components.splice(--i, 2);\n    } else {\n      i++;\n    }\n  }\n  return components.join('/');\n};\n\n\n/**\n * Provides a hook for loading a file when using Closure's goog.require() API\n * with goog.modules.  In particular this hook is provided to support Node.js.\n *\n * @type {(function(string):string)|undefined}\n */\ngoog.global.CLOSURE_LOAD_FILE_SYNC;\n\n\n/**\n * Loads file by synchronous XHR. Should not be used in production environments.\n * @param {string} src Source URL.\n * @return {?string} File contents, or null if load failed.\n * @private\n */\ngoog.loadFileSync_ = function(src) {\n  if (goog.global.CLOSURE_LOAD_FILE_SYNC) {\n    return goog.global.CLOSURE_LOAD_FILE_SYNC(src);\n  } else {\n    try {\n      /** @type {XMLHttpRequest} */\n      var xhr = new goog.global['XMLHttpRequest']();\n      xhr.open('get', src, false);\n      xhr.send();\n      // NOTE: Successful http: requests have a status of 200, but successful\n      // file: requests may have a status of zero.  Any other status, or a\n      // thrown exception (particularly in case of file: requests) indicates\n      // some sort of error, which we treat as a missing or unavailable file.\n      return xhr.status == 0 || xhr.status == 200 ? xhr.responseText : null;\n    } catch (err) {\n      // No need to rethrow or log, since errors should show up on their own.\n      return null;\n    }\n  }\n};\n\n\n/**\n * Retrieve and execute a script that needs some sort of wrapping.\n * @param {string} src Script source URL.\n * @param {boolean} isModule Whether to load as a module.\n * @param {boolean} needsTranspile Whether to transpile down to ES3.\n * @private\n */\ngoog.retrieveAndExec_ = function(src, isModule, needsTranspile) {\n  if (!COMPILED) {\n    // The full but non-canonicalized URL for later use.\n    var originalPath = src;\n    // Canonicalize the path, removing any /./ or /../ since Chrome's debugging\n    // console doesn't auto-canonicalize XHR loads as it does <script> srcs.\n    src = goog.normalizePath_(src);\n\n    var importScript =\n        goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;\n\n    var scriptText = goog.loadFileSync_(src);\n    if (scriptText == null) {\n      throw new Error('Load of \"' + src + '\" failed');\n    }\n\n    if (needsTranspile) {\n      scriptText = goog.transpile_.call(goog.global, scriptText, src);\n    }\n\n    if (isModule) {\n      scriptText = goog.wrapModule_(src, scriptText);\n    } else {\n      scriptText += '\\n//# sourceURL=' + src;\n    }\n    var isOldIE = goog.IS_OLD_IE_;\n    if (isOldIE && goog.oldIeWaiting_) {\n      goog.dependencies_.deferred[originalPath] = scriptText;\n      goog.queuedModules_.push(originalPath);\n    } else {\n      importScript(src, scriptText);\n    }\n  }\n};\n\n\n/**\n * Lazily retrieves the transpiler and applies it to the source.\n * @param {string} code JS code.\n * @param {string} path Path to the code.\n * @return {string} The transpiled code.\n * @private\n */\ngoog.transpile_ = function(code, path) {\n  var jscomp = goog.global['$jscomp'];\n  if (!jscomp) {\n    goog.global['$jscomp'] = jscomp = {};\n  }\n  var transpile = jscomp.transpile;\n  if (!transpile) {\n    var transpilerPath = goog.basePath + goog.TRANSPILER;\n    var transpilerCode = goog.loadFileSync_(transpilerPath);\n    if (transpilerCode) {\n      // This must be executed synchronously, since by the time we know we\n      // need it, we're about to load and write the ES6 code synchronously,\n      // so a normal script-tag load will be too slow.\n      eval(transpilerCode + '\\n//# sourceURL=' + transpilerPath);\n      // Even though the transpiler is optional, if $gwtExport is found, it's\n      // a sign the transpiler was loaded and the $jscomp.transpile *should*\n      // be there.\n      if (goog.global['$gwtExport'] && goog.global['$gwtExport']['$jscomp'] &&\n          !goog.global['$gwtExport']['$jscomp']['transpile']) {\n        throw new Error(\n            'The transpiler did not properly export the \"transpile\" ' +\n            'method. $gwtExport: ' + JSON.stringify(goog.global['$gwtExport']));\n      }\n      // transpile.js only exports a single $jscomp function, transpile. We\n      // grab just that and add it to the existing definition of $jscomp which\n      // contains the polyfills.\n      goog.global['$jscomp'].transpile =\n          goog.global['$gwtExport']['$jscomp']['transpile'];\n      jscomp = goog.global['$jscomp'];\n      transpile = jscomp.transpile;\n    }\n  }\n  if (!transpile) {\n    // The transpiler is an optional component.  If it's not available then\n    // replace it with a pass-through function that simply logs.\n    var suffix = ' requires transpilation but no transpiler was found.';\n    transpile = jscomp.transpile = function(code, path) {\n      // TODO(user): figure out some way to get this error to show up\n      // in test results, noting that the failure may occur in many\n      // different ways, including in loadModule() before the test\n      // runner even comes up.\n      goog.logToConsole_(path + suffix);\n      return code;\n    };\n  }\n  // Note: any transpilation errors/warnings will be logged to the console.\n  return transpile(code, path);\n};\n\n\n//==============================================================================\n// Language Enhancements\n//==============================================================================\n\n\n/**\n * This is a \"fixed\" version of the typeof operator.  It differs from the typeof\n * operator in such a way that null returns 'null' and arrays return 'array'.\n * @param {?} value The value to get the type of.\n * @return {string} The name of the type.\n */\ngoog.typeOf = function(value) {\n  var s = typeof value;\n  if (s == 'object') {\n    if (value) {\n      // Check these first, so we can avoid calling Object.prototype.toString if\n      // possible.\n      //\n      // IE improperly marshals typeof across execution contexts, but a\n      // cross-context object will still return false for \"instanceof Object\".\n      if (value instanceof Array) {\n        return 'array';\n      } else if (value instanceof Object) {\n        return s;\n      }\n\n      // HACK: In order to use an Object prototype method on the arbitrary\n      //   value, the compiler requires the value be cast to type Object,\n      //   even though the ECMA spec explicitly allows it.\n      var className = Object.prototype.toString.call(\n          /** @type {!Object} */ (value));\n      // In Firefox 3.6, attempting to access iframe window objects' length\n      // property throws an NS_ERROR_FAILURE, so we need to special-case it\n      // here.\n      if (className == '[object Window]') {\n        return 'object';\n      }\n\n      // We cannot always use constructor == Array or instanceof Array because\n      // different frames have different Array objects. In IE6, if the iframe\n      // where the array was created is destroyed, the array loses its\n      // prototype. Then dereferencing val.splice here throws an exception, so\n      // we can't use goog.isFunction. Calling typeof directly returns 'unknown'\n      // so that will work. In this case, this function will return false and\n      // most array functions will still work because the array is still\n      // array-like (supports length and []) even though it has lost its\n      // prototype.\n      // Mark Miller noticed that Object.prototype.toString\n      // allows access to the unforgeable [[Class]] property.\n      //  15.2.4.2 Object.prototype.toString ( )\n      //  When the toString method is called, the following steps are taken:\n      //      1. Get the [[Class]] property of this object.\n      //      2. Compute a string value by concatenating the three strings\n      //         \"[object \", Result(1), and \"]\".\n      //      3. Return Result(2).\n      // and this behavior survives the destruction of the execution context.\n      if ((className == '[object Array]' ||\n           // In IE all non value types are wrapped as objects across window\n           // boundaries (not iframe though) so we have to do object detection\n           // for this edge case.\n           typeof value.length == 'number' &&\n               typeof value.splice != 'undefined' &&\n               typeof value.propertyIsEnumerable != 'undefined' &&\n               !value.propertyIsEnumerable('splice')\n\n               )) {\n        return 'array';\n      }\n      // HACK: There is still an array case that fails.\n      //     function ArrayImpostor() {}\n      //     ArrayImpostor.prototype = [];\n      //     var impostor = new ArrayImpostor;\n      // this can be fixed by getting rid of the fast path\n      // (value instanceof Array) and solely relying on\n      // (value && Object.prototype.toString.vall(value) === '[object Array]')\n      // but that would require many more function calls and is not warranted\n      // unless closure code is receiving objects from untrusted sources.\n\n      // IE in cross-window calls does not correctly marshal the function type\n      // (it appears just as an object) so we cannot use just typeof val ==\n      // 'function'. However, if the object has a call property, it is a\n      // function.\n      if ((className == '[object Function]' ||\n           typeof value.call != 'undefined' &&\n               typeof value.propertyIsEnumerable != 'undefined' &&\n               !value.propertyIsEnumerable('call'))) {\n        return 'function';\n      }\n\n    } else {\n      return 'null';\n    }\n\n  } else if (s == 'function' && typeof value.call == 'undefined') {\n    // In Safari typeof nodeList returns 'function', and on Firefox typeof\n    // behaves similarly for HTML{Applet,Embed,Object}, Elements and RegExps. We\n    // would like to return object for those and we can detect an invalid\n    // function by making sure that the function object has a call method.\n    return 'object';\n  }\n  return s;\n};\n\n\n/**\n * Returns true if the specified value is null.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is null.\n */\ngoog.isNull = function(val) {\n  return val === null;\n};\n\n\n/**\n * Returns true if the specified value is defined and not null.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is defined and not null.\n */\ngoog.isDefAndNotNull = function(val) {\n  // Note that undefined == null.\n  return val != null;\n};\n\n\n/**\n * Returns true if the specified value is an array.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is an array.\n */\ngoog.isArray = function(val) {\n  return goog.typeOf(val) == 'array';\n};\n\n\n/**\n * Returns true if the object looks like an array. To qualify as array like\n * the value needs to be either a NodeList or an object with a Number length\n * property. As a special case, a function value is not array like, because its\n * length property is fixed to correspond to the number of expected arguments.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is an array.\n */\ngoog.isArrayLike = function(val) {\n  var type = goog.typeOf(val);\n  // We do not use goog.isObject here in order to exclude function values.\n  return type == 'array' || type == 'object' && typeof val.length == 'number';\n};\n\n\n/**\n * Returns true if the object looks like a Date. To qualify as Date-like the\n * value needs to be an object and have a getFullYear() function.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is a like a Date.\n */\ngoog.isDateLike = function(val) {\n  return goog.isObject(val) && typeof val.getFullYear == 'function';\n};\n\n\n/**\n * Returns true if the specified value is a function.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is a function.\n */\ngoog.isFunction = function(val) {\n  return goog.typeOf(val) == 'function';\n};\n\n\n/**\n * Returns true if the specified value is an object.  This includes arrays and\n * functions.\n * @param {?} val Variable to test.\n * @return {boolean} Whether variable is an object.\n */\ngoog.isObject = function(val) {\n  var type = typeof val;\n  return type == 'object' && val != null || type == 'function';\n  // return Object(val) === val also works, but is slower, especially if val is\n  // not an object.\n};\n\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. The unique ID is\n * guaranteed to be unique across the current session amongst objects that are\n * passed into {@code getUid}. There is no guarantee that the ID is unique or\n * consistent across sessions. It is unsafe to generate unique ID for function\n * prototypes.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {number} The unique ID for the object.\n */\ngoog.getUid = function(obj) {\n  // TODO(arv): Make the type stricter, do not accept null.\n\n  // In Opera window.hasOwnProperty exists but always returns false so we avoid\n  // using it. As a consequence the unique ID generated for BaseClass.prototype\n  // and SubClass.prototype will be the same.\n  return obj[goog.UID_PROPERTY_] ||\n      (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_);\n};\n\n\n/**\n * Whether the given object is already assigned a unique ID.\n *\n * This does not modify the object.\n *\n * @param {!Object} obj The object to check.\n * @return {boolean} Whether there is an assigned unique id for the object.\n */\ngoog.hasUid = function(obj) {\n  return !!obj[goog.UID_PROPERTY_];\n};\n\n\n/**\n * Removes the unique ID from an object. This is useful if the object was\n * previously mutated using {@code goog.getUid} in which case the mutation is\n * undone.\n * @param {Object} obj The object to remove the unique ID field from.\n */\ngoog.removeUid = function(obj) {\n  // TODO(arv): Make the type stricter, do not accept null.\n\n  // In IE, DOM nodes are not instances of Object and throw an exception if we\n  // try to delete.  Instead we try to use removeAttribute.\n  if (obj !== null && 'removeAttribute' in obj) {\n    obj.removeAttribute(goog.UID_PROPERTY_);\n  }\n\n  try {\n    delete obj[goog.UID_PROPERTY_];\n  } catch (ex) {\n  }\n};\n\n\n/**\n * Name for unique ID property. Initialized in a way to help avoid collisions\n * with other closure JavaScript on the same page.\n * @type {string}\n * @private\n */\ngoog.UID_PROPERTY_ = 'closure_uid_' + ((Math.random() * 1e9) >>> 0);\n\n\n/**\n * Counter for UID.\n * @type {number}\n * @private\n */\ngoog.uidCounter_ = 0;\n\n\n/**\n * Adds a hash code field to an object. The hash code is unique for the\n * given object.\n * @param {Object} obj The object to get the hash code for.\n * @return {number} The hash code for the object.\n * @deprecated Use goog.getUid instead.\n */\ngoog.getHashCode = goog.getUid;\n\n\n/**\n * Removes the hash code field from an object.\n * @param {Object} obj The object to remove the field from.\n * @deprecated Use goog.removeUid instead.\n */\ngoog.removeHashCode = goog.removeUid;\n\n\n/**\n * Clones a value. The input may be an Object, Array, or basic type. Objects and\n * arrays will be cloned recursively.\n *\n * WARNINGS:\n * <code>goog.cloneObject</code> does not detect reference loops. Objects that\n * refer to themselves will cause infinite recursion.\n *\n * <code>goog.cloneObject</code> is unaware of unique identifiers, and copies\n * UIDs created by <code>getUid</code> into cloned results.\n *\n * @param {*} obj The value to clone.\n * @return {*} A clone of the input value.\n * @deprecated goog.cloneObject is unsafe. Prefer the goog.object methods.\n */\ngoog.cloneObject = function(obj) {\n  var type = goog.typeOf(obj);\n  if (type == 'object' || type == 'array') {\n    if (obj.clone) {\n      return obj.clone();\n    }\n    var clone = type == 'array' ? [] : {};\n    for (var key in obj) {\n      clone[key] = goog.cloneObject(obj[key]);\n    }\n    return clone;\n  }\n\n  return obj;\n};\n\n\n/**\n * A native implementation of goog.bind.\n * @param {?function(this:T, ...)} fn A function to partially apply.\n * @param {T} selfObj Specifies the object which this should point to when the\n *     function is run.\n * @param {...*} var_args Additional arguments that are partially applied to the\n *     function.\n * @return {!Function} A partially-applied form of the function goog.bind() was\n *     invoked as a method of.\n * @template T\n * @private\n */\ngoog.bindNative_ = function(fn, selfObj, var_args) {\n  return /** @type {!Function} */ (fn.call.apply(fn.bind, arguments));\n};\n\n\n/**\n * A pure-JS implementation of goog.bind.\n * @param {?function(this:T, ...)} fn A function to partially apply.\n * @param {T} selfObj Specifies the object which this should point to when the\n *     function is run.\n * @param {...*} var_args Additional arguments that are partially applied to the\n *     function.\n * @return {!Function} A partially-applied form of the function goog.bind() was\n *     invoked as a method of.\n * @template T\n * @private\n */\ngoog.bindJs_ = function(fn, selfObj, var_args) {\n  if (!fn) {\n    throw new Error();\n  }\n\n  if (arguments.length > 2) {\n    var boundArgs = Array.prototype.slice.call(arguments, 2);\n    return function() {\n      // Prepend the bound arguments to the current arguments.\n      var newArgs = Array.prototype.slice.call(arguments);\n      Array.prototype.unshift.apply(newArgs, boundArgs);\n      return fn.apply(selfObj, newArgs);\n    };\n\n  } else {\n    return function() {\n      return fn.apply(selfObj, arguments);\n    };\n  }\n};\n\n\n/**\n * Partially applies this function to a particular 'this object' and zero or\n * more arguments. The result is a new function with some arguments of the first\n * function pre-filled and the value of this 'pre-specified'.\n *\n * Remaining arguments specified at call-time are appended to the pre-specified\n * ones.\n *\n * Also see: {@link #partial}.\n *\n * Usage:\n * <pre>var barMethBound = goog.bind(myFunction, myObj, 'arg1', 'arg2');\n * barMethBound('arg3', 'arg4');</pre>\n *\n * @param {?function(this:T, ...)} fn A function to partially apply.\n * @param {T} selfObj Specifies the object which this should point to when the\n *     function is run.\n * @param {...*} var_args Additional arguments that are partially applied to the\n *     function.\n * @return {!Function} A partially-applied form of the function goog.bind() was\n *     invoked as a method of.\n * @template T\n * @suppress {deprecated} See above.\n */\ngoog.bind = function(fn, selfObj, var_args) {\n  // TODO(nicksantos): narrow the type signature.\n  if (Function.prototype.bind &&\n      // NOTE(nicksantos): Somebody pulled base.js into the default Chrome\n      // extension environment. This means that for Chrome extensions, they get\n      // the implementation of Function.prototype.bind that calls goog.bind\n      // instead of the native one. Even worse, we don't want to introduce a\n      // circular dependency between goog.bind and Function.prototype.bind, so\n      // we have to hack this to make sure it works correctly.\n      Function.prototype.bind.toString().indexOf('native code') != -1) {\n    goog.bind = goog.bindNative_;\n  } else {\n    goog.bind = goog.bindJs_;\n  }\n  return goog.bind.apply(null, arguments);\n};\n\n\n/**\n * Like goog.bind(), except that a 'this object' is not required. Useful when\n * the target function is already bound.\n *\n * Usage:\n * var g = goog.partial(f, arg1, arg2);\n * g(arg3, arg4);\n *\n * @param {Function} fn A function to partially apply.\n * @param {...*} var_args Additional arguments that are partially applied to fn.\n * @return {!Function} A partially-applied form of the function goog.partial()\n *     was invoked as a method of.\n */\ngoog.partial = function(fn, var_args) {\n  var args = Array.prototype.slice.call(arguments, 1);\n  return function() {\n    // Clone the array (with slice()) and append additional arguments\n    // to the existing arguments.\n    var newArgs = args.slice();\n    newArgs.push.apply(newArgs, arguments);\n    return fn.apply(this, newArgs);\n  };\n};\n\n\n/**\n * Copies all the members of a source object to a target object. This method\n * does not work on all browsers for all objects that contain keys such as\n * toString or hasOwnProperty. Use goog.object.extend for this purpose.\n * @param {Object} target Target.\n * @param {Object} source Source.\n */\ngoog.mixin = function(target, source) {\n  for (var x in source) {\n    target[x] = source[x];\n  }\n\n  // For IE7 or lower, the for-in-loop does not contain any properties that are\n  // not enumerable on the prototype object (for example, isPrototypeOf from\n  // Object.prototype) but also it will not include 'replace' on objects that\n  // extend String and change 'replace' (not that it is common for anyone to\n  // extend anything except Object).\n};\n\n\n/**\n * @return {number} An integer value representing the number of milliseconds\n *     between midnight, January 1, 1970 and the current time.\n */\ngoog.now = (goog.TRUSTED_SITE && Date.now) || (function() {\n             // Unary plus operator converts its operand to a number which in\n             // the case of\n             // a date is done by calling getTime().\n             return +new Date();\n           });\n\n\n/**\n * Evals JavaScript in the global scope.  In IE this uses execScript, other\n * browsers use goog.global.eval. If goog.global.eval does not evaluate in the\n * global scope (for example, in Safari), appends a script tag instead.\n * Throws an exception if neither execScript or eval is defined.\n * @param {string} script JavaScript string.\n */\ngoog.globalEval = function(script) {\n  if (goog.global.execScript) {\n    goog.global.execScript(script, 'JavaScript');\n  } else if (goog.global.eval) {\n    // Test to see if eval works\n    if (goog.evalWorksForGlobals_ == null) {\n      goog.global.eval('var _evalTest_ = 1;');\n      if (typeof goog.global['_evalTest_'] != 'undefined') {\n        try {\n          delete goog.global['_evalTest_'];\n        } catch (ignore) {\n          // Microsoft edge fails the deletion above in strict mode.\n        }\n        goog.evalWorksForGlobals_ = true;\n      } else {\n        goog.evalWorksForGlobals_ = false;\n      }\n    }\n\n    if (goog.evalWorksForGlobals_) {\n      goog.global.eval(script);\n    } else {\n      /** @type {Document} */\n      var doc = goog.global.document;\n      var scriptElt =\n          /** @type {!HTMLScriptElement} */ (doc.createElement('SCRIPT'));\n      scriptElt.type = 'text/javascript';\n      scriptElt.defer = false;\n      // Note(user): can't use .innerHTML since \"t('<test>')\" will fail and\n      // .text doesn't work in Safari 2.  Therefore we append a text node.\n      scriptElt.appendChild(doc.createTextNode(script));\n      doc.body.appendChild(scriptElt);\n      doc.body.removeChild(scriptElt);\n    }\n  } else {\n    throw new Error('goog.globalEval not available');\n  }\n};\n\n\n/**\n * Indicates whether or not we can call 'eval' directly to eval code in the\n * global scope. Set to a Boolean by the first call to goog.globalEval (which\n * empirically tests whether eval works for globals). @see goog.globalEval\n * @type {?boolean}\n * @private\n */\ngoog.evalWorksForGlobals_ = null;\n\n\n/**\n * Optional map of CSS class names to obfuscated names used with\n * goog.getCssName().\n * @private {!Object<string, string>|undefined}\n * @see goog.setCssNameMapping\n */\ngoog.cssNameMapping_;\n\n\n/**\n * Optional obfuscation style for CSS class names. Should be set to either\n * 'BY_WHOLE' or 'BY_PART' if defined.\n * @type {string|undefined}\n * @private\n * @see goog.setCssNameMapping\n */\ngoog.cssNameMappingStyle_;\n\n\n\n/**\n * A hook for modifying the default behavior goog.getCssName. The function\n * if present, will recieve the standard output of the goog.getCssName as\n * its input.\n *\n * @type {(function(string):string)|undefined}\n */\ngoog.global.CLOSURE_CSS_NAME_MAP_FN;\n\n\n/**\n * Handles strings that are intended to be used as CSS class names.\n *\n * This function works in tandem with @see goog.setCssNameMapping.\n *\n * Without any mapping set, the arguments are simple joined with a hyphen and\n * passed through unaltered.\n *\n * When there is a mapping, there are two possible styles in which these\n * mappings are used. In the BY_PART style, each part (i.e. in between hyphens)\n * of the passed in css name is rewritten according to the map. In the BY_WHOLE\n * style, the full css name is looked up in the map directly. If a rewrite is\n * not specified by the map, the compiler will output a warning.\n *\n * When the mapping is passed to the compiler, it will replace calls to\n * goog.getCssName with the strings from the mapping, e.g.\n *     var x = goog.getCssName('foo');\n *     var y = goog.getCssName(this.baseClass, 'active');\n *  becomes:\n *     var x = 'foo';\n *     var y = this.baseClass + '-active';\n *\n * If one argument is passed it will be processed, if two are passed only the\n * modifier will be processed, as it is assumed the first argument was generated\n * as a result of calling goog.getCssName.\n *\n * @param {string} className The class name.\n * @param {string=} opt_modifier A modifier to be appended to the class name.\n * @return {string} The class name or the concatenation of the class name and\n *     the modifier.\n */\ngoog.getCssName = function(className, opt_modifier) {\n  // String() is used for compatibility with compiled soy where the passed\n  // className can be non-string objects.\n  if (String(className).charAt(0) == '.') {\n    throw new Error(\n        'className passed in goog.getCssName must not start with \".\".' +\n        ' You passed: ' + className);\n  }\n\n  var getMapping = function(cssName) {\n    return goog.cssNameMapping_[cssName] || cssName;\n  };\n\n  var renameByParts = function(cssName) {\n    // Remap all the parts individually.\n    var parts = cssName.split('-');\n    var mapped = [];\n    for (var i = 0; i < parts.length; i++) {\n      mapped.push(getMapping(parts[i]));\n    }\n    return mapped.join('-');\n  };\n\n  var rename;\n  if (goog.cssNameMapping_) {\n    rename =\n        goog.cssNameMappingStyle_ == 'BY_WHOLE' ? getMapping : renameByParts;\n  } else {\n    rename = function(a) {\n      return a;\n    };\n  }\n\n  var result =\n      opt_modifier ? className + '-' + rename(opt_modifier) : rename(className);\n\n  // The special CLOSURE_CSS_NAME_MAP_FN allows users to specify further\n  // processing of the class name.\n  if (goog.global.CLOSURE_CSS_NAME_MAP_FN) {\n    return goog.global.CLOSURE_CSS_NAME_MAP_FN(result);\n  }\n\n  return result;\n};\n\n\n/**\n * Sets the map to check when returning a value from goog.getCssName(). Example:\n * <pre>\n * goog.setCssNameMapping({\n *   \"goog\": \"a\",\n *   \"disabled\": \"b\",\n * });\n *\n * var x = goog.getCssName('goog');\n * // The following evaluates to: \"a a-b\".\n * goog.getCssName('goog') + ' ' + goog.getCssName(x, 'disabled')\n * </pre>\n * When declared as a map of string literals to string literals, the JSCompiler\n * will replace all calls to goog.getCssName() using the supplied map if the\n * --process_closure_primitives flag is set.\n *\n * @param {!Object} mapping A map of strings to strings where keys are possible\n *     arguments to goog.getCssName() and values are the corresponding values\n *     that should be returned.\n * @param {string=} opt_style The style of css name mapping. There are two valid\n *     options: 'BY_PART', and 'BY_WHOLE'.\n * @see goog.getCssName for a description.\n */\ngoog.setCssNameMapping = function(mapping, opt_style) {\n  goog.cssNameMapping_ = mapping;\n  goog.cssNameMappingStyle_ = opt_style;\n};\n\n\n/**\n * To use CSS renaming in compiled mode, one of the input files should have a\n * call to goog.setCssNameMapping() with an object literal that the JSCompiler\n * can extract and use to replace all calls to goog.getCssName(). In uncompiled\n * mode, JavaScript code should be loaded before this base.js file that declares\n * a global variable, CLOSURE_CSS_NAME_MAPPING, which is used below. This is\n * to ensure that the mapping is loaded before any calls to goog.getCssName()\n * are made in uncompiled mode.\n *\n * A hook for overriding the CSS name mapping.\n * @type {!Object<string, string>|undefined}\n */\ngoog.global.CLOSURE_CSS_NAME_MAPPING;\n\n\nif (!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING) {\n  // This does not call goog.setCssNameMapping() because the JSCompiler\n  // requires that goog.setCssNameMapping() be called with an object literal.\n  goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING;\n}\n\n\n/**\n * Gets a localized message.\n *\n * This function is a compiler primitive. If you give the compiler a localized\n * message bundle, it will replace the string at compile-time with a localized\n * version, and expand goog.getMsg call to a concatenated string.\n *\n * Messages must be initialized in the form:\n * <code>\n * var MSG_NAME = goog.getMsg('Hello {$placeholder}', {'placeholder': 'world'});\n * </code>\n *\n * This function produces a string which should be treated as plain text. Use\n * {@link goog.html.SafeHtmlFormatter} in conjunction with goog.getMsg to\n * produce SafeHtml.\n *\n * @param {string} str Translatable string, places holders in the form {$foo}.\n * @param {Object<string, string>=} opt_values Maps place holder name to value.\n * @return {string} message with placeholders filled.\n */\ngoog.getMsg = function(str, opt_values) {\n  if (opt_values) {\n    str = str.replace(/\\{\\$([^}]+)}/g, function(match, key) {\n      return (opt_values != null && key in opt_values) ? opt_values[key] :\n                                                         match;\n    });\n  }\n  return str;\n};\n\n\n/**\n * Gets a localized message. If the message does not have a translation, gives a\n * fallback message.\n *\n * This is useful when introducing a new message that has not yet been\n * translated into all languages.\n *\n * This function is a compiler primitive. Must be used in the form:\n * <code>var x = goog.getMsgWithFallback(MSG_A, MSG_B);</code>\n * where MSG_A and MSG_B were initialized with goog.getMsg.\n *\n * @param {string} a The preferred message.\n * @param {string} b The fallback message.\n * @return {string} The best translated message.\n */\ngoog.getMsgWithFallback = function(a, b) {\n  return a;\n};\n\n\n/**\n * Exposes an unobfuscated global namespace path for the given object.\n * Note that fields of the exported object *will* be obfuscated, unless they are\n * exported in turn via this function or goog.exportProperty.\n *\n * Also handy for making public items that are defined in anonymous closures.\n *\n * ex. goog.exportSymbol('public.path.Foo', Foo);\n *\n * ex. goog.exportSymbol('public.path.Foo.staticFunction', Foo.staticFunction);\n *     public.path.Foo.staticFunction();\n *\n * ex. goog.exportSymbol('public.path.Foo.prototype.myMethod',\n *                       Foo.prototype.myMethod);\n *     new public.path.Foo().myMethod();\n *\n * @param {string} publicPath Unobfuscated name to export.\n * @param {*} object Object the name should point to.\n * @param {Object=} opt_objectToExportTo The object to add the path to; default\n *     is goog.global.\n */\ngoog.exportSymbol = function(publicPath, object, opt_objectToExportTo) {\n  goog.exportPath_(publicPath, object, opt_objectToExportTo);\n};\n\n\n/**\n * Exports a property unobfuscated into the object's namespace.\n * ex. goog.exportProperty(Foo, 'staticFunction', Foo.staticFunction);\n * ex. goog.exportProperty(Foo.prototype, 'myMethod', Foo.prototype.myMethod);\n * @param {Object} object Object whose static property is being exported.\n * @param {string} publicName Unobfuscated name to export.\n * @param {*} symbol Object the name should point to.\n */\ngoog.exportProperty = function(object, publicName, symbol) {\n  object[publicName] = symbol;\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * Usage:\n * <pre>\n * function ParentClass(a, b) { }\n * ParentClass.prototype.foo = function(a) { };\n *\n * function ChildClass(a, b, c) {\n *   ChildClass.base(this, 'constructor', a, b);\n * }\n * goog.inherits(ChildClass, ParentClass);\n *\n * var child = new ChildClass('a', 'b', 'see');\n * child.foo(); // This works.\n * </pre>\n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n */\ngoog.inherits = function(childCtor, parentCtor) {\n  /** @constructor */\n  function tempCtor() {}\n  tempCtor.prototype = parentCtor.prototype;\n  childCtor.superClass_ = parentCtor.prototype;\n  childCtor.prototype = new tempCtor();\n  /** @override */\n  childCtor.prototype.constructor = childCtor;\n\n  /**\n   * Calls superclass constructor/method.\n   *\n   * This function is only available if you use goog.inherits to\n   * express inheritance relationships between classes.\n   *\n   * NOTE: This is a replacement for goog.base and for superClass_\n   * property defined in childCtor.\n   *\n   * @param {!Object} me Should always be \"this\".\n   * @param {string} methodName The method name to call. Calling\n   *     superclass constructor can be done with the special string\n   *     'constructor'.\n   * @param {...*} var_args The arguments to pass to superclass\n   *     method/constructor.\n   * @return {*} The return value of the superclass method/constructor.\n   */\n  childCtor.base = function(me, methodName, var_args) {\n    // Copying using loop to avoid deop due to passing arguments object to\n    // function. This is faster in many JS engines as of late 2014.\n    var args = new Array(arguments.length - 2);\n    for (var i = 2; i < arguments.length; i++) {\n      args[i - 2] = arguments[i];\n    }\n    return parentCtor.prototype[methodName].apply(me, args);\n  };\n};\n\n\n/**\n * Call up to the superclass.\n *\n * If this is called from a constructor, then this calls the superclass\n * constructor with arguments 1-N.\n *\n * If this is called from a prototype method, then you must pass the name of the\n * method as the second argument to this function. If you do not, you will get a\n * runtime error. This calls the superclass' method with arguments 2-N.\n *\n * This function only works if you use goog.inherits to express inheritance\n * relationships between your classes.\n *\n * This function is a compiler primitive. At compile-time, the compiler will do\n * macro expansion to remove a lot of the extra overhead that this function\n * introduces. The compiler will also enforce a lot of the assumptions that this\n * function makes, and treat it as a compiler error if you break them.\n *\n * @param {!Object} me Should always be \"this\".\n * @param {*=} opt_methodName The method name if calling a super method.\n * @param {...*} var_args The rest of the arguments.\n * @return {*} The return value of the superclass method.\n * @suppress {es5Strict} This method can not be used in strict mode, but\n *     all Closure Library consumers must depend on this file.\n * @deprecated goog.base is not strict mode compatible.  Prefer the static\n *     \"base\" method added to the constructor by goog.inherits\n *     or ES6 classes and the \"super\" keyword.\n */\ngoog.base = function(me, opt_methodName, var_args) {\n  var caller = arguments.callee.caller;\n\n  if (goog.STRICT_MODE_COMPATIBLE || (goog.DEBUG && !caller)) {\n    throw new Error(\n        'arguments.caller not defined.  goog.base() cannot be used ' +\n        'with strict mode code. See ' +\n        'http://www.ecma-international.org/ecma-262/5.1/#sec-C');\n  }\n\n  if (caller.superClass_) {\n    // Copying using loop to avoid deop due to passing arguments object to\n    // function. This is faster in many JS engines as of late 2014.\n    var ctorArgs = new Array(arguments.length - 1);\n    for (var i = 1; i < arguments.length; i++) {\n      ctorArgs[i - 1] = arguments[i];\n    }\n    // This is a constructor. Call the superclass constructor.\n    return caller.superClass_.constructor.apply(me, ctorArgs);\n  }\n\n  // Copying using loop to avoid deop due to passing arguments object to\n  // function. This is faster in many JS engines as of late 2014.\n  var args = new Array(arguments.length - 2);\n  for (var i = 2; i < arguments.length; i++) {\n    args[i - 2] = arguments[i];\n  }\n  var foundCaller = false;\n  for (var ctor = me.constructor; ctor;\n       ctor = ctor.superClass_ && ctor.superClass_.constructor) {\n    if (ctor.prototype[opt_methodName] === caller) {\n      foundCaller = true;\n    } else if (foundCaller) {\n      return ctor.prototype[opt_methodName].apply(me, args);\n    }\n  }\n\n  // If we did not find the caller in the prototype chain, then one of two\n  // things happened:\n  // 1) The caller is an instance method.\n  // 2) This method was not called by the right caller.\n  if (me[opt_methodName] === caller) {\n    return me.constructor.prototype[opt_methodName].apply(me, args);\n  } else {\n    throw new Error(\n        'goog.base called from a method of one name ' +\n        'to a method of a different name');\n  }\n};\n\n\n/**\n * Allow for aliasing within scope functions.  This function exists for\n * uncompiled code - in compiled code the calls will be inlined and the aliases\n * applied.  In uncompiled code the function is simply run since the aliases as\n * written are valid JavaScript.\n *\n *\n * @param {function()} fn Function to call.  This function can contain aliases\n *     to namespaces (e.g. \"var dom = goog.dom\") or classes\n *     (e.g. \"var Timer = goog.Timer\").\n */\ngoog.scope = function(fn) {\n  if (goog.isInModuleLoader_()) {\n    throw new Error('goog.scope is not supported within a goog.module.');\n  }\n  fn.call(goog.global);\n};\n\n\n/*\n * To support uncompiled, strict mode bundles that use eval to divide source\n * like so:\n *    eval('someSource;//# sourceUrl sourcefile.js');\n * We need to export the globally defined symbols \"goog\" and \"COMPILED\".\n * Exporting \"goog\" breaks the compiler optimizations, so we required that\n * be defined externally.\n * NOTE: We don't use goog.exportSymbol here because we don't want to trigger\n * extern generation when that compiler option is enabled.\n */\nif (!COMPILED) {\n  goog.global['COMPILED'] = COMPILED;\n}\n\n\n//==============================================================================\n// goog.defineClass implementation\n//==============================================================================\n\n\n/**\n * Creates a restricted form of a Closure \"class\":\n *   - from the compiler's perspective, the instance returned from the\n *     constructor is sealed (no new properties may be added).  This enables\n *     better checks.\n *   - the compiler will rewrite this definition to a form that is optimal\n *     for type checking and optimization (initially this will be a more\n *     traditional form).\n *\n * @param {Function} superClass The superclass, Object or null.\n * @param {goog.defineClass.ClassDescriptor} def\n *     An object literal describing\n *     the class.  It may have the following properties:\n *     \"constructor\": the constructor function\n *     \"statics\": an object literal containing methods to add to the constructor\n *        as \"static\" methods or a function that will receive the constructor\n *        function as its only parameter to which static properties can\n *        be added.\n *     all other properties are added to the prototype.\n * @return {!Function} The class constructor.\n */\ngoog.defineClass = function(superClass, def) {\n  // TODO(johnlenz): consider making the superClass an optional parameter.\n  var constructor = def.constructor;\n  var statics = def.statics;\n  // Wrap the constructor prior to setting up the prototype and static methods.\n  if (!constructor || constructor == Object.prototype.constructor) {\n    constructor = function() {\n      throw new Error(\n          'cannot instantiate an interface (no constructor defined).');\n    };\n  }\n\n  var cls = goog.defineClass.createSealingConstructor_(constructor, superClass);\n  if (superClass) {\n    goog.inherits(cls, superClass);\n  }\n\n  // Remove all the properties that should not be copied to the prototype.\n  delete def.constructor;\n  delete def.statics;\n\n  goog.defineClass.applyProperties_(cls.prototype, def);\n  if (statics != null) {\n    if (statics instanceof Function) {\n      statics(cls);\n    } else {\n      goog.defineClass.applyProperties_(cls, statics);\n    }\n  }\n\n  return cls;\n};\n\n\n/**\n * @typedef {{\n *   constructor: (!Function|undefined),\n *   statics: (Object|undefined|function(Function):void)\n * }}\n */\ngoog.defineClass.ClassDescriptor;\n\n\n/**\n * @define {boolean} Whether the instances returned by goog.defineClass should\n *     be sealed when possible.\n *\n * When sealing is disabled the constructor function will not be wrapped by\n * goog.defineClass, making it incompatible with ES6 class methods.\n */\ngoog.define('goog.defineClass.SEAL_CLASS_INSTANCES', goog.DEBUG);\n\n\n/**\n * If goog.defineClass.SEAL_CLASS_INSTANCES is enabled and Object.seal is\n * defined, this function will wrap the constructor in a function that seals the\n * results of the provided constructor function.\n *\n * @param {!Function} ctr The constructor whose results maybe be sealed.\n * @param {Function} superClass The superclass constructor.\n * @return {!Function} The replacement constructor.\n * @private\n */\ngoog.defineClass.createSealingConstructor_ = function(ctr, superClass) {\n  if (!goog.defineClass.SEAL_CLASS_INSTANCES) {\n    // Do now wrap the constructor when sealing is disabled. Angular code\n    // depends on this for injection to work properly.\n    return ctr;\n  }\n\n  // Compute whether the constructor is sealable at definition time, rather\n  // than when the instance is being constructed.\n  var superclassSealable = !goog.defineClass.isUnsealable_(superClass);\n\n  /**\n   * @this {Object}\n   * @return {?}\n   */\n  var wrappedCtr = function() {\n    // Don't seal an instance of a subclass when it calls the constructor of\n    // its super class as there is most likely still setup to do.\n    var instance = ctr.apply(this, arguments) || this;\n    instance[goog.UID_PROPERTY_] = instance[goog.UID_PROPERTY_];\n\n    if (this.constructor === wrappedCtr && superclassSealable &&\n        Object.seal instanceof Function) {\n      Object.seal(instance);\n    }\n    return instance;\n  };\n\n  return wrappedCtr;\n};\n\n\n/**\n * @param {Function} ctr The constructor to test.\n * @return {boolean} Whether the constructor has been tagged as unsealable\n *     using goog.tagUnsealableClass.\n * @private\n */\ngoog.defineClass.isUnsealable_ = function(ctr) {\n  return ctr && ctr.prototype &&\n      ctr.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];\n};\n\n\n// TODO(johnlenz): share these values with the goog.object\n/**\n * The names of the fields that are defined on Object.prototype.\n * @type {!Array<string>}\n * @private\n * @const\n */\ngoog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = [\n  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n  'toLocaleString', 'toString', 'valueOf'\n];\n\n\n// TODO(johnlenz): share this function with the goog.object\n/**\n * @param {!Object} target The object to add properties to.\n * @param {!Object} source The object to copy properties from.\n * @private\n */\ngoog.defineClass.applyProperties_ = function(target, source) {\n  // TODO(johnlenz): update this to support ES5 getters/setters\n\n  var key;\n  for (key in source) {\n    if (Object.prototype.hasOwnProperty.call(source, key)) {\n      target[key] = source[key];\n    }\n  }\n\n  // For IE the for-in-loop does not contain any properties that are not\n  // enumerable on the prototype object (for example isPrototypeOf from\n  // Object.prototype) and it will also not include 'replace' on objects that\n  // extend String and change 'replace' (not that it is common for anyone to\n  // extend anything except Object).\n  for (var i = 0; i < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; i++) {\n    key = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[i];\n    if (Object.prototype.hasOwnProperty.call(source, key)) {\n      target[key] = source[key];\n    }\n  }\n};\n\n\n/**\n * Sealing classes breaks the older idiom of assigning properties on the\n * prototype rather than in the constructor. As such, goog.defineClass\n * must not seal subclasses of these old-style classes until they are fixed.\n * Until then, this marks a class as \"broken\", instructing defineClass\n * not to seal subclasses.\n * @param {!Function} ctr The legacy constructor to tag as unsealable.\n */\ngoog.tagUnsealableClass = function(ctr) {\n  if (!COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES) {\n    ctr.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = true;\n  }\n};\n\n\n/**\n * Name for unsealable tag property.\n * @const @private {string}\n */\ngoog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = 'goog_defineClass_legacy_unsealable';\n\n\n/**\n * Returns a newly created map from language mode string to a boolean\n * indicating whether transpilation should be done for that mode.\n *\n * Guaranteed invariant:\n * For any two modes, l1 and l2 where l2 is a newer mode than l1,\n * `map[l1] == true` implies that `map[l2] == true`.\n * @private\n * @return {!Object<string, boolean>}\n */\ngoog.createRequiresTranspilation_ = function() {\n  var /** !Object<string, boolean> */ requiresTranspilation = {'es3': false};\n  var transpilationRequiredForAllLaterModes = false;\n\n  /**\n   * Adds an entry to requiresTranspliation for the given language mode.\n   *\n   * IMPORTANT: Calls must be made in order from oldest to newest language\n   * mode.\n   * @param {string} modeName\n   * @param {function(): boolean} isSupported Returns true if the JS engine\n   *     supports the given mode.\n   */\n  function addNewerLanguageTranspilationCheck(modeName, isSupported) {\n    if (transpilationRequiredForAllLaterModes) {\n      requiresTranspilation[modeName] = true;\n    } else if (isSupported()) {\n      requiresTranspilation[modeName] = false;\n    } else {\n      requiresTranspilation[modeName] = true;\n      transpilationRequiredForAllLaterModes = true;\n    }\n  }\n\n  /**\n   * Does the given code evaluate without syntax errors and return a truthy\n   * result?\n   */\n  function /** boolean */ evalCheck(/** string */ code) {\n    try {\n      return !!eval(code);\n    } catch (ignored) {\n      return false;\n    }\n  }\n\n  var userAgent = goog.global.navigator && goog.global.navigator.userAgent ?\n      goog.global.navigator.userAgent :\n      '';\n\n  // Identify ES3-only browsers by their incorrect treatment of commas.\n  addNewerLanguageTranspilationCheck('es5', function() {\n    return evalCheck('[1,].length==1');\n  });\n  addNewerLanguageTranspilationCheck('es6', function() {\n    // Edge has a non-deterministic (i.e., not reproducible) bug with ES6:\n    // https://github.com/Microsoft/ChakraCore/issues/1496.\n    var re = /Edge\\/(\\d+)(\\.\\d)*/i;\n    var edgeUserAgent = userAgent.match(re);\n    if (edgeUserAgent && Number(edgeUserAgent[1]) < 15) {\n      return false;\n    }\n    // Test es6: [FF50 (?), Edge 14 (?), Chrome 50]\n    //   (a) default params (specifically shadowing locals),\n    //   (b) destructuring, (c) block-scoped functions,\n    //   (d) for-of (const), (e) new.target/Reflect.construct\n    var es6fullTest =\n        'class X{constructor(){if(new.target!=String)throw 1;this.x=42}}' +\n        'let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof ' +\n        'String))throw 1;for(const a of[2,3]){if(a==2)continue;function ' +\n        'f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()' +\n        '==3}';\n\n    return evalCheck('(()=>{\"use strict\";' + es6fullTest + '})()');\n  });\n  // TODO(joeltine): Remove es6-impl references for b/31340605.\n  // Consider es6-impl (widely-implemented es6 features) to be supported\n  // whenever es6 is supported. Technically es6-impl is a lower level of\n  // support than es6, but we don't have tests specifically for it.\n  addNewerLanguageTranspilationCheck('es6-impl', function() {\n    return true;\n  });\n  // ** and **= are the only new features in 'es7'\n  addNewerLanguageTranspilationCheck('es7', function() {\n    return evalCheck('2 ** 2 == 4');\n  });\n  // async functions are the only new features in 'es8'\n  addNewerLanguageTranspilationCheck('es8', function() {\n    return evalCheck('async () => 1, true');\n  });\n  return requiresTranspilation;\n};\n\ngoog.provide('ol.array');\n\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array.<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function=} opt_comparator Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nol.array.binarySearch = function(haystack, needle, opt_comparator) {\n  var mid, cmp;\n  var comparator = opt_comparator || ol.array.numberSafeCompareFunction;\n  var low = 0;\n  var high = haystack.length;\n  var found = false;\n\n  while (low < high) {\n    /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n     * to double (which gives the wrong results). */\n    mid = low + (high - low >> 1);\n    cmp = +comparator(haystack[mid], needle);\n\n    if (cmp < 0.0) { /* Too low. */\n      low  = mid + 1;\n\n    } else { /* Key found or too high */\n      high = mid;\n      found = !cmp;\n    }\n  }\n\n  /* Key not found. */\n  return found ? low : ~low;\n};\n\n\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n *     argument is less than, equal to, or greater than the second.\n */\nol.array.numberSafeCompareFunction = function(a, b) {\n  return a > b ? 1 : a < b ? -1 : 0;\n};\n\n\n/**\n * Whether the array contains the given object.\n * @param {Array.<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nol.array.includes = function(arr, obj) {\n  return arr.indexOf(obj) >= 0;\n};\n\n\n/**\n * @param {Array.<number>} arr Array.\n * @param {number} target Target.\n * @param {number} direction 0 means return the nearest, > 0\n *    means return the largest nearest, < 0 means return the\n *    smallest nearest.\n * @return {number} Index.\n */\nol.array.linearFindNearest = function(arr, target, direction) {\n  var n = arr.length;\n  if (arr[0] <= target) {\n    return 0;\n  } else if (target <= arr[n - 1]) {\n    return n - 1;\n  } else {\n    var i;\n    if (direction > 0) {\n      for (i = 1; i < n; ++i) {\n        if (arr[i] < target) {\n          return i - 1;\n        }\n      }\n    } else if (direction < 0) {\n      for (i = 1; i < n; ++i) {\n        if (arr[i] <= target) {\n          return i;\n        }\n      }\n    } else {\n      for (i = 1; i < n; ++i) {\n        if (arr[i] == target) {\n          return i;\n        } else if (arr[i] < target) {\n          if (arr[i - 1] - target < target - arr[i]) {\n            return i - 1;\n          } else {\n            return i;\n          }\n        }\n      }\n    }\n    return n - 1;\n  }\n};\n\n\n/**\n * @param {Array.<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nol.array.reverseSubArray = function(arr, begin, end) {\n  while (begin < end) {\n    var tmp = arr[begin];\n    arr[begin] = arr[end];\n    arr[end] = tmp;\n    ++begin;\n    --end;\n  }\n};\n\n\n/**\n * @param {Array.<VALUE>} arr The array to modify.\n * @param {Array.<VALUE>|VALUE} data The elements or arrays of elements\n *     to add to arr.\n * @template VALUE\n */\nol.array.extend = function(arr, data) {\n  var i;\n  var extension = Array.isArray(data) ? data : [data];\n  var length = extension.length;\n  for (i = 0; i < length; i++) {\n    arr[arr.length] = extension[i];\n  }\n};\n\n\n/**\n * @param {Array.<VALUE>} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nol.array.remove = function(arr, obj) {\n  var i = arr.indexOf(obj);\n  var found = i > -1;\n  if (found) {\n    arr.splice(i, 1);\n  }\n  return found;\n};\n\n\n/**\n * @param {Array.<VALUE>} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE} The element found.\n */\nol.array.find = function(arr, func) {\n  var length = arr.length >>> 0;\n  var value;\n\n  for (var i = 0; i < length; i++) {\n    value = arr[i];\n    if (func(value, i, arr)) {\n      return value;\n    }\n  }\n  return null;\n};\n\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nol.array.equals = function(arr1, arr2) {\n  var len1 = arr1.length;\n  if (len1 !== arr2.length) {\n    return false;\n  }\n  for (var i = 0; i < len1; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n};\n\n\n/**\n * @param {Array.<*>} arr The array to sort (modifies original).\n * @param {Function} compareFnc Comparison function.\n */\nol.array.stableSort = function(arr, compareFnc) {\n  var length = arr.length;\n  var tmp = Array(arr.length);\n  var i;\n  for (i = 0; i < length; i++) {\n    tmp[i] = {index: i, value: arr[i]};\n  }\n  tmp.sort(function(a, b) {\n    return compareFnc(a.value, b.value) || a.index - b.index;\n  });\n  for (i = 0; i < arr.length; i++) {\n    arr[i] = tmp[i].value;\n  }\n};\n\n\n/**\n * @param {Array.<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nol.array.findIndex = function(arr, func) {\n  var index;\n  var found = !arr.every(function(el, idx) {\n    index = idx;\n    return !func(el, idx, arr);\n  });\n  return found ? index : -1;\n};\n\n\n/**\n * @param {Array.<*>} arr The array to test.\n * @param {Function=} opt_func Comparison function.\n * @param {boolean=} opt_strict Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nol.array.isSorted = function(arr, opt_func, opt_strict) {\n  var compare = opt_func || ol.array.numberSafeCompareFunction;\n  return arr.every(function(currentVal, index) {\n    if (index === 0) {\n      return true;\n    }\n    var res = compare(arr[index - 1], currentVal);\n    return !(res > 0 || opt_strict && res === 0);\n  });\n};\n\ngoog.provide('ol');\n\n\n/**\n * Constants defined with the define tag cannot be changed in application\n * code, but can be set at compile time.\n * Some reduce the size of the build in advanced compile mode.\n */\n\n\n/**\n * @define {boolean} Assume touch.  Default is `false`.\n */\nol.ASSUME_TOUCH = false;\n\n\n/**\n * TODO: rename this to something having to do with tile grids\n * see https://github.com/openlayers/openlayers/issues/2076\n * @define {number} Default maximum zoom for default tile grids.\n */\nol.DEFAULT_MAX_ZOOM = 42;\n\n\n/**\n * @define {number} Default min zoom level for the map view.  Default is `0`.\n */\nol.DEFAULT_MIN_ZOOM = 0;\n\n\n/**\n * @define {number} Default maximum allowed threshold  (in pixels) for\n *     reprojection triangulation. Default is `0.5`.\n */\nol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD = 0.5;\n\n\n/**\n * @define {number} Default tile size.\n */\nol.DEFAULT_TILE_SIZE = 256;\n\n\n/**\n * @define {string} Default WMS version.\n */\nol.DEFAULT_WMS_VERSION = '1.3.0';\n\n\n/**\n * @define {boolean} Enable the Canvas renderer.  Default is `true`. Setting\n *     this to false at compile time in advanced mode removes all code\n *     supporting the Canvas renderer from the build.\n */\nol.ENABLE_CANVAS = true;\n\n\n/**\n * @define {boolean} Enable integration with the Proj4js library.  Default is\n *     `true`.\n */\nol.ENABLE_PROJ4JS = true;\n\n\n/**\n * @define {boolean} Enable automatic reprojection of raster sources. Default is\n *     `true`.\n */\nol.ENABLE_RASTER_REPROJECTION = true;\n\n\n/**\n * @define {boolean} Enable the WebGL renderer.  Default is `true`. Setting\n *     this to false at compile time in advanced mode removes all code\n *     supporting the WebGL renderer from the build.\n */\nol.ENABLE_WEBGL = true;\n\n\n/**\n * @define {boolean} Include debuggable shader sources.  Default is `true`.\n *     This should be set to `false` for production builds (if `ol.ENABLE_WEBGL`\n *     is `true`).\n */\nol.DEBUG_WEBGL = true;\n\n\n/**\n * @define {number} The size in pixels of the first atlas image. Default is\n * `256`.\n */\nol.INITIAL_ATLAS_SIZE = 256;\n\n\n/**\n * @define {number} The maximum size in pixels of atlas images. Default is\n * `-1`, meaning it is not used (and `ol.WEBGL_MAX_TEXTURE_SIZE` is\n * used instead).\n */\nol.MAX_ATLAS_SIZE = -1;\n\n\n/**\n * @define {number} Maximum mouse wheel delta.\n */\nol.MOUSEWHEELZOOM_MAXDELTA = 1;\n\n\n/**\n * @define {number} Maximum width and/or height extent ratio that determines\n * when the overview map should be zoomed out.\n */\nol.OVERVIEWMAP_MAX_RATIO = 0.75;\n\n\n/**\n * @define {number} Minimum width and/or height extent ratio that determines\n * when the overview map should be zoomed in.\n */\nol.OVERVIEWMAP_MIN_RATIO = 0.1;\n\n\n/**\n * @define {number} Maximum number of source tiles for raster reprojection of\n *     a single tile.\n *     If too many source tiles are determined to be loaded to create a single\n *     reprojected tile the browser can become unresponsive or even crash.\n *     This can happen if the developer defines projections improperly and/or\n *     with unlimited extents.\n *     If too many tiles are required, no tiles are loaded and\n *     `ol.TileState.ERROR` state is set. Default is `100`.\n */\nol.RASTER_REPROJECTION_MAX_SOURCE_TILES = 100;\n\n\n/**\n * @define {number} Maximum number of subdivision steps during raster\n *     reprojection triangulation. Prevents high memory usage and large\n *     number of proj4 calls (for certain transformations and areas).\n *     At most `2*(2^this)` triangles are created for each triangulated\n *     extent (tile/image). Default is `10`.\n */\nol.RASTER_REPROJECTION_MAX_SUBDIVISION = 10;\n\n\n/**\n * @define {number} Maximum allowed size of triangle relative to world width.\n *     When transforming corners of world extent between certain projections,\n *     the resulting triangulation seems to have zero error and no subdivision\n *     is performed.\n *     If the triangle width is more than this (relative to world width; 0-1),\n *     subdivison is forced (up to `ol.RASTER_REPROJECTION_MAX_SUBDIVISION`).\n *     Default is `0.25`.\n */\nol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH = 0.25;\n\n\n/**\n * @define {number} Tolerance for geometry simplification in device pixels.\n */\nol.SIMPLIFY_TOLERANCE = 0.5;\n\n\n/**\n * @define {number} Texture cache high water mark.\n */\nol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024;\n\n\n/**\n * @define {string} OpenLayers version.\n */\nol.VERSION = '';\n\n\n/**\n * The maximum supported WebGL texture size in pixels. If WebGL is not\n * supported, the value is set to `undefined`.\n * @const\n * @type {number|undefined}\n */\nol.WEBGL_MAX_TEXTURE_SIZE; // value is set in `ol.has`\n\n\n/**\n * List of supported WebGL extensions.\n * @const\n * @type {Array.<string>}\n */\nol.WEBGL_EXTENSIONS; // value is set in `ol.has`\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * Usage:\n *\n *     function ParentClass(a, b) { }\n *     ParentClass.prototype.foo = function(a) { }\n *\n *     function ChildClass(a, b, c) {\n *       // Call parent constructor\n *       ParentClass.call(this, a, b);\n *     }\n *     ol.inherits(ChildClass, ParentClass);\n *\n *     var child = new ChildClass('a', 'b', 'see');\n *     child.foo(); // This works.\n *\n * @param {!Function} childCtor Child constructor.\n * @param {!Function} parentCtor Parent constructor.\n * @function\n * @api\n */\nol.inherits = function(childCtor, parentCtor) {\n  childCtor.prototype = Object.create(parentCtor.prototype);\n  childCtor.prototype.constructor = childCtor;\n};\n\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {undefined} Nothing.\n */\nol.nullFunction = function() {};\n\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {number} The unique ID for the object.\n */\nol.getUid = function(obj) {\n  return obj.ol_uid ||\n      (obj.ol_uid = ++ol.uidCounter_);\n};\n\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nol.uidCounter_ = 0;\n\ngoog.provide('ol.AssertionError');\n\ngoog.require('ol');\n\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error}\n * @constructor\n * @extends {Error}\n * @implements {oli.AssertionError}\n * @param {number} code Error code.\n */\nol.AssertionError = function(code) {\n\n  var path = ol.VERSION ? ol.VERSION.split('-')[0] : 'latest';\n\n  /**\n   * @type {string}\n   */\n  this.message = 'Assertion failed. See https://openlayers.org/en/' + path +\n      '/doc/errors/#' + code + ' for details.';\n\n  /**\n   * Error code. The meaning of the code can be found on\n   * {@link https://openlayers.org/en/latest/doc/errors/} (replace `latest` with\n   * the version found in the OpenLayers script's header comment if a version\n   * other than the latest is used).\n   * @type {number}\n   * @api\n   */\n  this.code = code;\n\n  this.name = 'AssertionError';\n\n};\nol.inherits(ol.AssertionError, Error);\n\ngoog.provide('ol.asserts');\n\ngoog.require('ol.AssertionError');\n\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nol.asserts.assert = function(assertion, errorCode) {\n  if (!assertion) {\n    throw new ol.AssertionError(errorCode);\n  }\n};\n\ngoog.provide('ol.TileRange');\n\n\n/**\n * A representation of a contiguous block of tiles.  A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n *\n * @constructor\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @struct\n */\nol.TileRange = function(minX, maxX, minY, maxY) {\n\n  /**\n   * @type {number}\n   */\n  this.minX = minX;\n\n  /**\n   * @type {number}\n   */\n  this.maxX = maxX;\n\n  /**\n   * @type {number}\n   */\n  this.minY = minY;\n\n  /**\n   * @type {number}\n   */\n  this.maxY = maxY;\n\n};\n\n\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {ol.TileRange|undefined} tileRange TileRange.\n * @return {ol.TileRange} Tile range.\n */\nol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) {\n  if (tileRange !== undefined) {\n    tileRange.minX = minX;\n    tileRange.maxX = maxX;\n    tileRange.minY = minY;\n    tileRange.maxY = maxY;\n    return tileRange;\n  } else {\n    return new ol.TileRange(minX, maxX, minY, maxY);\n  }\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\nol.TileRange.prototype.contains = function(tileCoord) {\n  return this.containsXY(tileCoord[1], tileCoord[2]);\n};\n\n\n/**\n * @param {ol.TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\nol.TileRange.prototype.containsTileRange = function(tileRange) {\n  return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX &&\n      this.minY <= tileRange.minY && tileRange.maxY <= this.maxY;\n};\n\n\n/**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\nol.TileRange.prototype.containsXY = function(x, y) {\n  return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n};\n\n\n/**\n * @param {ol.TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\nol.TileRange.prototype.equals = function(tileRange) {\n  return this.minX == tileRange.minX && this.minY == tileRange.minY &&\n      this.maxX == tileRange.maxX && this.maxY == tileRange.maxY;\n};\n\n\n/**\n * @param {ol.TileRange} tileRange Tile range.\n */\nol.TileRange.prototype.extend = function(tileRange) {\n  if (tileRange.minX < this.minX) {\n    this.minX = tileRange.minX;\n  }\n  if (tileRange.maxX > this.maxX) {\n    this.maxX = tileRange.maxX;\n  }\n  if (tileRange.minY < this.minY) {\n    this.minY = tileRange.minY;\n  }\n  if (tileRange.maxY > this.maxY) {\n    this.maxY = tileRange.maxY;\n  }\n};\n\n\n/**\n * @return {number} Height.\n */\nol.TileRange.prototype.getHeight = function() {\n  return this.maxY - this.minY + 1;\n};\n\n\n/**\n * @return {ol.Size} Size.\n */\nol.TileRange.prototype.getSize = function() {\n  return [this.getWidth(), this.getHeight()];\n};\n\n\n/**\n * @return {number} Width.\n */\nol.TileRange.prototype.getWidth = function() {\n  return this.maxX - this.minX + 1;\n};\n\n\n/**\n * @param {ol.TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\nol.TileRange.prototype.intersects = function(tileRange) {\n  return this.minX <= tileRange.maxX &&\n      this.maxX >= tileRange.minX &&\n      this.minY <= tileRange.maxY &&\n      this.maxY >= tileRange.minY;\n};\n\ngoog.provide('ol.math');\n\ngoog.require('ol.asserts');\n\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n *     number within the bounds.\n */\nol.math.clamp = function(value, min, max) {\n  return Math.min(Math.max(value, min), max);\n};\n\n\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nol.math.cosh = (function() {\n  // Wrapped in a iife, to save the overhead of checking for the native\n  // implementation on every invocation.\n  var cosh;\n  if ('cosh' in Math) {\n    // The environment supports the native Math.cosh function, use it…\n    cosh = Math.cosh;\n  } else {\n    // … else, use the reference implementation of MDN:\n    cosh = function(x) {\n      var y = Math.exp(x);\n      return (y + 1 / y) / 2;\n    };\n  }\n  return cosh;\n}());\n\n\n/**\n * @param {number} x X.\n * @return {number} The smallest power of two greater than or equal to x.\n */\nol.math.roundUpToPowerOfTwo = function(x) {\n  ol.asserts.assert(0 < x, 29); // `x` must be greater than `0`\n  return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2));\n};\n\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nol.math.squaredSegmentDistance = function(x, y, x1, y1, x2, y2) {\n  var dx = x2 - x1;\n  var dy = y2 - y1;\n  if (dx !== 0 || dy !== 0) {\n    var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n    if (t > 1) {\n      x1 = x2;\n      y1 = y2;\n    } else if (t > 0) {\n      x1 += dx * t;\n      y1 += dy * t;\n    }\n  }\n  return ol.math.squaredDistance(x, y, x1, y1);\n};\n\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nol.math.squaredDistance = function(x1, y1, x2, y2) {\n  var dx = x2 - x1;\n  var dy = y2 - y1;\n  return dx * dx + dy * dy;\n};\n\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array.<Array.<number>>} mat Augmented matrix (n x n + 1 column)\n *                                     in row-major order.\n * @return {Array.<number>} The resulting vector.\n */\nol.math.solveLinearSystem = function(mat) {\n  var n = mat.length;\n\n  for (var i = 0; i < n; i++) {\n    // Find max in the i-th column (ignoring i - 1 first rows)\n    var maxRow = i;\n    var maxEl = Math.abs(mat[i][i]);\n    for (var r = i + 1; r < n; r++) {\n      var absValue = Math.abs(mat[r][i]);\n      if (absValue > maxEl) {\n        maxEl = absValue;\n        maxRow = r;\n      }\n    }\n\n    if (maxEl === 0) {\n      return null; // matrix is singular\n    }\n\n    // Swap max row with i-th (current) row\n    var tmp = mat[maxRow];\n    mat[maxRow] = mat[i];\n    mat[i] = tmp;\n\n    // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n    for (var j = i + 1; j < n; j++) {\n      var coef = -mat[j][i] / mat[i][i];\n      for (var k = i; k < n + 1; k++) {\n        if (i == k) {\n          mat[j][k] = 0;\n        } else {\n          mat[j][k] += coef * mat[i][k];\n        }\n      }\n    }\n  }\n\n  // Solve Ax=b for upper triangular matrix A (mat)\n  var x = new Array(n);\n  for (var l = n - 1; l >= 0; l--) {\n    x[l] = mat[l][n] / mat[l][l];\n    for (var m = l - 1; m >= 0; m--) {\n      mat[m][n] -= mat[m][l] * x[l];\n    }\n  }\n  return x;\n};\n\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nol.math.toDegrees = function(angleInRadians) {\n  return angleInRadians * 180 / Math.PI;\n};\n\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nol.math.toRadians = function(angleInDegrees) {\n  return angleInDegrees * Math.PI / 180;\n};\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nol.math.modulo = function(a, b) {\n  var r = a % b;\n  return r * b < 0 ? r + b : r;\n};\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nol.math.lerp = function(a, b, x) {\n  return a + x * (b - a);\n};\n\ngoog.provide('ol.size');\n\n\n/**\n * Returns a buffered size.\n * @param {ol.Size} size Size.\n * @param {number} buffer Buffer.\n * @param {ol.Size=} opt_size Optional reusable size array.\n * @return {ol.Size} The buffered size.\n */\nol.size.buffer = function(size, buffer, opt_size) {\n  if (opt_size === undefined) {\n    opt_size = [0, 0];\n  }\n  opt_size[0] = size[0] + 2 * buffer;\n  opt_size[1] = size[1] + 2 * buffer;\n  return opt_size;\n};\n\n\n/**\n * Determines if a size has a positive area.\n * @param {ol.Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nol.size.hasArea = function(size) {\n  return size[0] > 0 && size[1] > 0;\n};\n\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {ol.Size} size Size.\n * @param {number} ratio Ratio.\n * @param {ol.Size=} opt_size Optional reusable size array.\n * @return {ol.Size} The scaled size.\n */\nol.size.scale = function(size, ratio, opt_size) {\n  if (opt_size === undefined) {\n    opt_size = [0, 0];\n  }\n  opt_size[0] = (size[0] * ratio + 0.5) | 0;\n  opt_size[1] = (size[1] * ratio + 0.5) | 0;\n  return opt_size;\n};\n\n\n/**\n * Returns an `ol.Size` array for the passed in number (meaning: square) or\n * `ol.Size` array.\n * (meaning: non-square),\n * @param {number|ol.Size} size Width and height.\n * @param {ol.Size=} opt_size Optional reusable size array.\n * @return {ol.Size} Size.\n * @api\n */\nol.size.toSize = function(size, opt_size) {\n  if (Array.isArray(size)) {\n    return size;\n  } else {\n    if (opt_size === undefined) {\n      opt_size = [size, size];\n    } else {\n      opt_size[0] = opt_size[1] = /** @type {number} */ (size);\n    }\n    return opt_size;\n  }\n};\n\ngoog.provide('ol.extent.Corner');\n\n/**\n * Extent corner.\n * @enum {string}\n */\nol.extent.Corner = {\n  BOTTOM_LEFT: 'bottom-left',\n  BOTTOM_RIGHT: 'bottom-right',\n  TOP_LEFT: 'top-left',\n  TOP_RIGHT: 'top-right'\n};\n\ngoog.provide('ol.extent.Relationship');\n\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nol.extent.Relationship = {\n  UNKNOWN: 0,\n  INTERSECTING: 1,\n  ABOVE: 2,\n  RIGHT: 4,\n  BELOW: 8,\n  LEFT: 16\n};\n\ngoog.provide('ol.extent');\n\ngoog.require('ol.asserts');\ngoog.require('ol.extent.Corner');\ngoog.require('ol.extent.Relationship');\n\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @return {ol.Extent} Bounding extent.\n * @api\n */\nol.extent.boundingExtent = function(coordinates) {\n  var extent = ol.extent.createEmpty();\n  for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n    ol.extent.extendCoordinate(extent, coordinates[i]);\n  }\n  return extent;\n};\n\n\n/**\n * @param {Array.<number>} xs Xs.\n * @param {Array.<number>} ys Ys.\n * @param {ol.Extent=} opt_extent Destination extent.\n * @private\n * @return {ol.Extent} Extent.\n */\nol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) {\n  var minX = Math.min.apply(null, xs);\n  var minY = Math.min.apply(null, ys);\n  var maxX = Math.max.apply(null, xs);\n  var maxY = Math.max.apply(null, ys);\n  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n};\n\n\n/**\n * Return extent increased by the provided value.\n * @param {ol.Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.extent.buffer = function(extent, value, opt_extent) {\n  if (opt_extent) {\n    opt_extent[0] = extent[0] - value;\n    opt_extent[1] = extent[1] - value;\n    opt_extent[2] = extent[2] + value;\n    opt_extent[3] = extent[3] + value;\n    return opt_extent;\n  } else {\n    return [\n      extent[0] - value,\n      extent[1] - value,\n      extent[2] + value,\n      extent[3] + value\n    ];\n  }\n};\n\n\n/**\n * Creates a clone of an extent.\n *\n * @param {ol.Extent} extent Extent to clone.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} The clone.\n */\nol.extent.clone = function(extent, opt_extent) {\n  if (opt_extent) {\n    opt_extent[0] = extent[0];\n    opt_extent[1] = extent[1];\n    opt_extent[2] = extent[2];\n    opt_extent[3] = extent[3];\n    return opt_extent;\n  } else {\n    return extent.slice();\n  }\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nol.extent.closestSquaredDistanceXY = function(extent, x, y) {\n  var dx, dy;\n  if (x < extent[0]) {\n    dx = extent[0] - x;\n  } else if (extent[2] < x) {\n    dx = x - extent[2];\n  } else {\n    dx = 0;\n  }\n  if (y < extent[1]) {\n    dy = extent[1] - y;\n  } else if (extent[3] < y) {\n    dy = y - extent[3];\n  } else {\n    dy = 0;\n  }\n  return dx * dx + dy * dy;\n};\n\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {ol.Extent} extent Extent.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nol.extent.containsCoordinate = function(extent, coordinate) {\n  return ol.extent.containsXY(extent, coordinate[0], coordinate[1]);\n};\n\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n *     first.\n * @api\n */\nol.extent.containsExtent = function(extent1, extent2) {\n  return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] &&\n      extent1[1] <= extent2[1] && extent2[3] <= extent1[3];\n};\n\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {ol.Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nol.extent.containsXY = function(extent, x, y) {\n  return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n};\n\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {ol.Extent} extent The extent.\n * @param {ol.Coordinate} coordinate The coordinate.\n * @return {number} The relationship (bitwise compare with\n *     ol.extent.Relationship).\n */\nol.extent.coordinateRelationship = function(extent, coordinate) {\n  var minX = extent[0];\n  var minY = extent[1];\n  var maxX = extent[2];\n  var maxY = extent[3];\n  var x = coordinate[0];\n  var y = coordinate[1];\n  var relationship = ol.extent.Relationship.UNKNOWN;\n  if (x < minX) {\n    relationship = relationship | ol.extent.Relationship.LEFT;\n  } else if (x > maxX) {\n    relationship = relationship | ol.extent.Relationship.RIGHT;\n  }\n  if (y < minY) {\n    relationship = relationship | ol.extent.Relationship.BELOW;\n  } else if (y > maxY) {\n    relationship = relationship | ol.extent.Relationship.ABOVE;\n  }\n  if (relationship === ol.extent.Relationship.UNKNOWN) {\n    relationship = ol.extent.Relationship.INTERSECTING;\n  }\n  return relationship;\n};\n\n\n/**\n * Create an empty extent.\n * @return {ol.Extent} Empty extent.\n * @api\n */\nol.extent.createEmpty = function() {\n  return [Infinity, Infinity, -Infinity, -Infinity];\n};\n\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {ol.Extent=} opt_extent Destination extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) {\n  if (opt_extent) {\n    opt_extent[0] = minX;\n    opt_extent[1] = minY;\n    opt_extent[2] = maxX;\n    opt_extent[3] = maxY;\n    return opt_extent;\n  } else {\n    return [minX, minY, maxX, maxY];\n  }\n};\n\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdateEmpty = function(opt_extent) {\n  return ol.extent.createOrUpdate(\n      Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdateFromCoordinate = function(coordinate, opt_extent) {\n  var x = coordinate[0];\n  var y = coordinate[1];\n  return ol.extent.createOrUpdate(x, y, x, y, opt_extent);\n};\n\n\n/**\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdateFromCoordinates = function(coordinates, opt_extent) {\n  var extent = ol.extent.createOrUpdateEmpty(opt_extent);\n  return ol.extent.extendCoordinates(extent, coordinates);\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdateFromFlatCoordinates = function(flatCoordinates, offset, end, stride, opt_extent) {\n  var extent = ol.extent.createOrUpdateEmpty(opt_extent);\n  return ol.extent.extendFlatCoordinates(\n      extent, flatCoordinates, offset, end, stride);\n};\n\n\n/**\n * @param {Array.<Array.<ol.Coordinate>>} rings Rings.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.createOrUpdateFromRings = function(rings, opt_extent) {\n  var extent = ol.extent.createOrUpdateEmpty(opt_extent);\n  return ol.extent.extendRings(extent, rings);\n};\n\n\n/**\n * Determine if two extents are equivalent.\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nol.extent.equals = function(extent1, extent2) {\n  return extent1[0] == extent2[0] && extent1[2] == extent2[2] &&\n      extent1[1] == extent2[1] && extent1[3] == extent2[3];\n};\n\n\n/**\n * Modify an extent to include another extent.\n * @param {ol.Extent} extent1 The extent to be modified.\n * @param {ol.Extent} extent2 The extent that will be included in the first.\n * @return {ol.Extent} A reference to the first (extended) extent.\n * @api\n */\nol.extent.extend = function(extent1, extent2) {\n  if (extent2[0] < extent1[0]) {\n    extent1[0] = extent2[0];\n  }\n  if (extent2[2] > extent1[2]) {\n    extent1[2] = extent2[2];\n  }\n  if (extent2[1] < extent1[1]) {\n    extent1[1] = extent2[1];\n  }\n  if (extent2[3] > extent1[3]) {\n    extent1[3] = extent2[3];\n  }\n  return extent1;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {ol.Coordinate} coordinate Coordinate.\n */\nol.extent.extendCoordinate = function(extent, coordinate) {\n  if (coordinate[0] < extent[0]) {\n    extent[0] = coordinate[0];\n  }\n  if (coordinate[0] > extent[2]) {\n    extent[2] = coordinate[0];\n  }\n  if (coordinate[1] < extent[1]) {\n    extent[1] = coordinate[1];\n  }\n  if (coordinate[1] > extent[3]) {\n    extent[3] = coordinate[1];\n  }\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @return {ol.Extent} Extent.\n */\nol.extent.extendCoordinates = function(extent, coordinates) {\n  var i, ii;\n  for (i = 0, ii = coordinates.length; i < ii; ++i) {\n    ol.extent.extendCoordinate(extent, coordinates[i]);\n  }\n  return extent;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {ol.Extent} Extent.\n */\nol.extent.extendFlatCoordinates = function(extent, flatCoordinates, offset, end, stride) {\n  for (; offset < end; offset += stride) {\n    ol.extent.extendXY(\n        extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n  }\n  return extent;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {Array.<Array.<ol.Coordinate>>} rings Rings.\n * @return {ol.Extent} Extent.\n */\nol.extent.extendRings = function(extent, rings) {\n  var i, ii;\n  for (i = 0, ii = rings.length; i < ii; ++i) {\n    ol.extent.extendCoordinates(extent, rings[i]);\n  }\n  return extent;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nol.extent.extendXY = function(extent, x, y) {\n  extent[0] = Math.min(extent[0], x);\n  extent[1] = Math.min(extent[1], y);\n  extent[2] = Math.max(extent[2], x);\n  extent[3] = Math.max(extent[3], y);\n};\n\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {ol.Extent} extent Extent.\n * @param {function(this:T, ol.Coordinate): S} callback Callback.\n * @param {T=} opt_this Value to use as `this` when executing `callback`.\n * @return {S|boolean} Value.\n * @template S, T\n */\nol.extent.forEachCorner = function(extent, callback, opt_this) {\n  var val;\n  val = callback.call(opt_this, ol.extent.getBottomLeft(extent));\n  if (val) {\n    return val;\n  }\n  val = callback.call(opt_this, ol.extent.getBottomRight(extent));\n  if (val) {\n    return val;\n  }\n  val = callback.call(opt_this, ol.extent.getTopRight(extent));\n  if (val) {\n    return val;\n  }\n  val = callback.call(opt_this, ol.extent.getTopLeft(extent));\n  if (val) {\n    return val;\n  }\n  return false;\n};\n\n\n/**\n * Get the size of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nol.extent.getArea = function(extent) {\n  var area = 0;\n  if (!ol.extent.isEmpty(extent)) {\n    area = ol.extent.getWidth(extent) * ol.extent.getHeight(extent);\n  }\n  return area;\n};\n\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {ol.Coordinate} Bottom left coordinate.\n * @api\n */\nol.extent.getBottomLeft = function(extent) {\n  return [extent[0], extent[1]];\n};\n\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {ol.Coordinate} Bottom right coordinate.\n * @api\n */\nol.extent.getBottomRight = function(extent) {\n  return [extent[2], extent[1]];\n};\n\n\n/**\n * Get the center coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {ol.Coordinate} Center.\n * @api\n */\nol.extent.getCenter = function(extent) {\n  return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n};\n\n\n/**\n * Get a corner coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @param {ol.extent.Corner} corner Corner.\n * @return {ol.Coordinate} Corner coordinate.\n */\nol.extent.getCorner = function(extent, corner) {\n  var coordinate;\n  if (corner === ol.extent.Corner.BOTTOM_LEFT) {\n    coordinate = ol.extent.getBottomLeft(extent);\n  } else if (corner === ol.extent.Corner.BOTTOM_RIGHT) {\n    coordinate = ol.extent.getBottomRight(extent);\n  } else if (corner === ol.extent.Corner.TOP_LEFT) {\n    coordinate = ol.extent.getTopLeft(extent);\n  } else if (corner === ol.extent.Corner.TOP_RIGHT) {\n    coordinate = ol.extent.getTopRight(extent);\n  } else {\n    ol.asserts.assert(false, 13); // Invalid corner\n  }\n  return /** @type {!ol.Coordinate} */ (coordinate);\n};\n\n\n/**\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nol.extent.getEnlargedArea = function(extent1, extent2) {\n  var minX = Math.min(extent1[0], extent2[0]);\n  var minY = Math.min(extent1[1], extent2[1]);\n  var maxX = Math.max(extent1[2], extent2[2]);\n  var maxY = Math.max(extent1[3], extent2[3]);\n  return (maxX - minX) * (maxY - minY);\n};\n\n\n/**\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {ol.Extent=} opt_extent Destination extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.getForViewAndSize = function(center, resolution, rotation, size, opt_extent) {\n  var dx = resolution * size[0] / 2;\n  var dy = resolution * size[1] / 2;\n  var cosRotation = Math.cos(rotation);\n  var sinRotation = Math.sin(rotation);\n  var xCos = dx * cosRotation;\n  var xSin = dx * sinRotation;\n  var yCos = dy * cosRotation;\n  var ySin = dy * sinRotation;\n  var x = center[0];\n  var y = center[1];\n  var x0 = x - xCos + ySin;\n  var x1 = x - xCos - ySin;\n  var x2 = x + xCos - ySin;\n  var x3 = x + xCos + ySin;\n  var y0 = y - xSin - yCos;\n  var y1 = y - xSin + yCos;\n  var y2 = y + xSin + yCos;\n  var y3 = y + xSin - yCos;\n  return ol.extent.createOrUpdate(\n      Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3),\n      Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3),\n      opt_extent);\n};\n\n\n/**\n * Get the height of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nol.extent.getHeight = function(extent) {\n  return extent[3] - extent[1];\n};\n\n\n/**\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nol.extent.getIntersectionArea = function(extent1, extent2) {\n  var intersection = ol.extent.getIntersection(extent1, extent2);\n  return ol.extent.getArea(intersection);\n};\n\n\n/**\n * Get the intersection of two extents.\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent 2.\n * @param {ol.Extent=} opt_extent Optional extent to populate with intersection.\n * @return {ol.Extent} Intersecting extent.\n * @api\n */\nol.extent.getIntersection = function(extent1, extent2, opt_extent) {\n  var intersection = opt_extent ? opt_extent : ol.extent.createEmpty();\n  if (ol.extent.intersects(extent1, extent2)) {\n    if (extent1[0] > extent2[0]) {\n      intersection[0] = extent1[0];\n    } else {\n      intersection[0] = extent2[0];\n    }\n    if (extent1[1] > extent2[1]) {\n      intersection[1] = extent1[1];\n    } else {\n      intersection[1] = extent2[1];\n    }\n    if (extent1[2] < extent2[2]) {\n      intersection[2] = extent1[2];\n    } else {\n      intersection[2] = extent2[2];\n    }\n    if (extent1[3] < extent2[3]) {\n      intersection[3] = extent1[3];\n    } else {\n      intersection[3] = extent2[3];\n    }\n  }\n  return intersection;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @return {number} Margin.\n */\nol.extent.getMargin = function(extent) {\n  return ol.extent.getWidth(extent) + ol.extent.getHeight(extent);\n};\n\n\n/**\n * Get the size (width, height) of an extent.\n * @param {ol.Extent} extent The extent.\n * @return {ol.Size} The extent size.\n * @api\n */\nol.extent.getSize = function(extent) {\n  return [extent[2] - extent[0], extent[3] - extent[1]];\n};\n\n\n/**\n * Get the top left coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {ol.Coordinate} Top left coordinate.\n * @api\n */\nol.extent.getTopLeft = function(extent) {\n  return [extent[0], extent[3]];\n};\n\n\n/**\n * Get the top right coordinate of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {ol.Coordinate} Top right coordinate.\n * @api\n */\nol.extent.getTopRight = function(extent) {\n  return [extent[2], extent[3]];\n};\n\n\n/**\n * Get the width of an extent.\n * @param {ol.Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nol.extent.getWidth = function(extent) {\n  return extent[2] - extent[0];\n};\n\n\n/**\n * Determine if one extent intersects another.\n * @param {ol.Extent} extent1 Extent 1.\n * @param {ol.Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nol.extent.intersects = function(extent1, extent2) {\n  return extent1[0] <= extent2[2] &&\n      extent1[2] >= extent2[0] &&\n      extent1[1] <= extent2[3] &&\n      extent1[3] >= extent2[1];\n};\n\n\n/**\n * Determine if an extent is empty.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nol.extent.isEmpty = function(extent) {\n  return extent[2] < extent[0] || extent[3] < extent[1];\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.extent.returnOrUpdate = function(extent, opt_extent) {\n  if (opt_extent) {\n    opt_extent[0] = extent[0];\n    opt_extent[1] = extent[1];\n    opt_extent[2] = extent[2];\n    opt_extent[3] = extent[3];\n    return opt_extent;\n  } else {\n    return extent;\n  }\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} value Value.\n */\nol.extent.scaleFromCenter = function(extent, value) {\n  var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n  var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n  extent[0] -= deltaX;\n  extent[2] += deltaX;\n  extent[1] -= deltaY;\n  extent[3] += deltaY;\n};\n\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {ol.Extent} extent The extent.\n * @param {ol.Coordinate} start Segment start coordinate.\n * @param {ol.Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nol.extent.intersectsSegment = function(extent, start, end) {\n  var intersects = false;\n  var startRel = ol.extent.coordinateRelationship(extent, start);\n  var endRel = ol.extent.coordinateRelationship(extent, end);\n  if (startRel === ol.extent.Relationship.INTERSECTING ||\n      endRel === ol.extent.Relationship.INTERSECTING) {\n    intersects = true;\n  } else {\n    var minX = extent[0];\n    var minY = extent[1];\n    var maxX = extent[2];\n    var maxY = extent[3];\n    var startX = start[0];\n    var startY = start[1];\n    var endX = end[0];\n    var endY = end[1];\n    var slope = (endY - startY) / (endX - startX);\n    var x, y;\n    if (!!(endRel & ol.extent.Relationship.ABOVE) &&\n        !(startRel & ol.extent.Relationship.ABOVE)) {\n      // potentially intersects top\n      x = endX - ((endY - maxY) / slope);\n      intersects = x >= minX && x <= maxX;\n    }\n    if (!intersects && !!(endRel & ol.extent.Relationship.RIGHT) &&\n        !(startRel & ol.extent.Relationship.RIGHT)) {\n      // potentially intersects right\n      y = endY - ((endX - maxX) * slope);\n      intersects = y >= minY && y <= maxY;\n    }\n    if (!intersects && !!(endRel & ol.extent.Relationship.BELOW) &&\n        !(startRel & ol.extent.Relationship.BELOW)) {\n      // potentially intersects bottom\n      x = endX - ((endY - minY) / slope);\n      intersects = x >= minX && x <= maxX;\n    }\n    if (!intersects && !!(endRel & ol.extent.Relationship.LEFT) &&\n        !(startRel & ol.extent.Relationship.LEFT)) {\n      // potentially intersects left\n      y = endY - ((endX - minX) * slope);\n      intersects = y >= minY && y <= maxY;\n    }\n\n  }\n  return intersects;\n};\n\n\n/**\n * Apply a transform function to the extent.\n * @param {ol.Extent} extent Extent.\n * @param {ol.TransformFunction} transformFn Transform function.  Called with\n * [minX, minY, maxX, maxY] extent coordinates.\n * @param {ol.Extent=} opt_extent Destination extent.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.extent.applyTransform = function(extent, transformFn, opt_extent) {\n  var coordinates = [\n    extent[0], extent[1],\n    extent[0], extent[3],\n    extent[2], extent[1],\n    extent[2], extent[3]\n  ];\n  transformFn(coordinates, coordinates, 2);\n  var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];\n  var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];\n  return ol.extent.boundingExtentXYs_(xs, ys, opt_extent);\n};\n\ngoog.provide('ol.obj');\n\n\n/**\n * Polyfill for Object.assign().  Assigns enumerable and own properties from\n * one or more source objects to a target object.\n *\n * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nol.obj.assign = (typeof Object.assign === 'function') ? Object.assign : function(target, var_sources) {\n  if (target === undefined || target === null) {\n    throw new TypeError('Cannot convert undefined or null to object');\n  }\n\n  var output = Object(target);\n  for (var i = 1, ii = arguments.length; i < ii; ++i) {\n    var source = arguments[i];\n    if (source !== undefined && source !== null) {\n      for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n          output[key] = source[key];\n        }\n      }\n    }\n  }\n  return output;\n};\n\n\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nol.obj.clear = function(object) {\n  for (var property in object) {\n    delete object[property];\n  }\n};\n\n\n/**\n * Get an array of property values from an object.\n * @param {Object<K,V>} object The object from which to get the values.\n * @return {!Array<V>} The property values.\n * @template K,V\n */\nol.obj.getValues = function(object) {\n  var values = [];\n  for (var property in object) {\n    values.push(object[property]);\n  }\n  return values;\n};\n\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nol.obj.isEmpty = function(object) {\n  var property;\n  for (property in object) {\n    return false;\n  }\n  return !property;\n};\n\ngoog.provide('ol.geom.GeometryType');\n\n\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nol.geom.GeometryType = {\n  POINT: 'Point',\n  LINE_STRING: 'LineString',\n  LINEAR_RING: 'LinearRing',\n  POLYGON: 'Polygon',\n  MULTI_POINT: 'MultiPoint',\n  MULTI_LINE_STRING: 'MultiLineString',\n  MULTI_POLYGON: 'MultiPolygon',\n  GEOMETRY_COLLECTION: 'GeometryCollection',\n  CIRCLE: 'Circle'\n};\n\n/**\n * @license\n * Latitude/longitude spherical geodesy formulae taken from\n * http://www.movable-type.co.uk/scripts/latlong.html\n * Licensed under CC-BY-3.0.\n */\n\ngoog.provide('ol.Sphere');\n\ngoog.require('ol.math');\ngoog.require('ol.geom.GeometryType');\n\n\n/**\n * @classdesc\n * Class to create objects that can be used with {@link\n * ol.geom.Polygon.circular}.\n *\n * For example to create a sphere whose radius is equal to the semi-major\n * axis of the WGS84 ellipsoid:\n *\n * ```js\n * var wgs84Sphere= new ol.Sphere(6378137);\n * ```\n *\n * @constructor\n * @param {number} radius Radius.\n * @api\n */\nol.Sphere = function(radius) {\n\n  /**\n   * @type {number}\n   */\n  this.radius = radius;\n\n};\n\n\n/**\n * Returns the geodesic area for a list of coordinates.\n *\n * [Reference](https://trs-new.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array.<ol.Coordinate>} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @return {number} Area.\n * @api\n */\nol.Sphere.prototype.geodesicArea = function(coordinates) {\n  return ol.Sphere.getArea_(coordinates, this.radius);\n};\n\n\n/**\n * Returns the distance from c1 to c2 using the haversine formula.\n *\n * @param {ol.Coordinate} c1 Coordinate 1.\n * @param {ol.Coordinate} c2 Coordinate 2.\n * @return {number} Haversine distance.\n * @api\n */\nol.Sphere.prototype.haversineDistance = function(c1, c2) {\n  return ol.Sphere.getDistance_(c1, c2, this.radius);\n};\n\n\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {ol.Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n *     point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @return {ol.Coordinate} The target point.\n */\nol.Sphere.prototype.offset = function(c1, distance, bearing) {\n  var lat1 = ol.math.toRadians(c1[1]);\n  var lon1 = ol.math.toRadians(c1[0]);\n  var dByR = distance / this.radius;\n  var lat = Math.asin(\n      Math.sin(lat1) * Math.cos(dByR) +\n      Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));\n  var lon = lon1 + Math.atan2(\n      Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),\n      Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));\n  return [ol.math.toDegrees(lon), ol.math.toDegrees(lat)];\n};\n\n\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nol.Sphere.DEFAULT_RADIUS = 6371008.8;\n\n\n/**\n * Get the spherical length of a geometry.  This length is the sum of the\n * great circle distances between coordinates.  For polygons, the length is\n * the sum of all rings.  For points, the length is zero.  For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {ol.geom.Geometry} geometry A geometry.\n * @param {olx.SphereMetricOptions=} opt_options Options for the length\n *     calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n *     You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nol.Sphere.getLength = function(geometry, opt_options) {\n  var options = opt_options || {};\n  var radius = options.radius || ol.Sphere.DEFAULT_RADIUS;\n  var projection = options.projection || 'EPSG:3857';\n  geometry = geometry.clone().transform(projection, 'EPSG:4326');\n  var type = geometry.getType();\n  var length = 0;\n  var coordinates, coords, i, ii, j, jj;\n  switch (type) {\n    case ol.geom.GeometryType.POINT:\n    case ol.geom.GeometryType.MULTI_POINT: {\n      break;\n    }\n    case ol.geom.GeometryType.LINE_STRING:\n    case ol.geom.GeometryType.LINEAR_RING: {\n      coordinates = /** @type {ol.geom.SimpleGeometry} */ (geometry).getCoordinates();\n      length = ol.Sphere.getLength_(coordinates, radius);\n      break;\n    }\n    case ol.geom.GeometryType.MULTI_LINE_STRING:\n    case ol.geom.GeometryType.POLYGON: {\n      coordinates = /** @type {ol.geom.SimpleGeometry} */ (geometry).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        length += ol.Sphere.getLength_(coordinates[i], radius);\n      }\n      break;\n    }\n    case ol.geom.GeometryType.MULTI_POLYGON: {\n      coordinates = /** @type {ol.geom.SimpleGeometry} */ (geometry).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        coords = coordinates[i];\n        for (j = 0, jj = coords.length; j < jj; ++j) {\n          length += ol.Sphere.getLength_(coords[j], radius);\n        }\n      }\n      break;\n    }\n    case ol.geom.GeometryType.GEOMETRY_COLLECTION: {\n      var geometries = /** @type {ol.geom.GeometryCollection} */ (geometry).getGeometries();\n      for (i = 0, ii = geometries.length; i < ii; ++i) {\n        length += ol.Sphere.getLength(geometries[i], opt_options);\n      }\n      break;\n    }\n    default: {\n      throw new Error('Unsupported geometry type: ' + type);\n    }\n  }\n  return length;\n};\n\n\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nol.Sphere.getLength_ = function(coordinates, radius) {\n  var length = 0;\n  for (var i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n    length += ol.Sphere.getDistance_(coordinates[i], coordinates[i + 1], radius);\n  }\n  return length;\n};\n\n\n/**\n * Get the great circle distance between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} radius The sphere radius to use.\n * @return {number} The great circle distance between the points (in meters).\n */\nol.Sphere.getDistance_ = function(c1, c2, radius) {\n  var lat1 = ol.math.toRadians(c1[1]);\n  var lat2 = ol.math.toRadians(c2[1]);\n  var deltaLatBy2 = (lat2 - lat1) / 2;\n  var deltaLonBy2 = ol.math.toRadians(c2[0] - c1[0]) / 2;\n  var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n      Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) *\n      Math.cos(lat1) * Math.cos(lat2);\n  return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n};\n\n\n/**\n * Get the spherical area of a geometry.  This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {ol.geom.Geometry} geometry A geometry.\n * @param {olx.SphereMetricOptions=} opt_options Options for the area\n *     calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n *     You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nol.Sphere.getArea = function(geometry, opt_options) {\n  var options = opt_options || {};\n  var radius = options.radius || ol.Sphere.DEFAULT_RADIUS;\n  var projection = options.projection || 'EPSG:3857';\n  geometry = geometry.clone().transform(projection, 'EPSG:4326');\n  var type = geometry.getType();\n  var area = 0;\n  var coordinates, coords, i, ii, j, jj;\n  switch (type) {\n    case ol.geom.GeometryType.POINT:\n    case ol.geom.GeometryType.MULTI_POINT:\n    case ol.geom.GeometryType.LINE_STRING:\n    case ol.geom.GeometryType.MULTI_LINE_STRING:\n    case ol.geom.GeometryType.LINEAR_RING: {\n      break;\n    }\n    case ol.geom.GeometryType.POLYGON: {\n      coordinates = /** @type {ol.geom.Polygon} */ (geometry).getCoordinates();\n      area = Math.abs(ol.Sphere.getArea_(coordinates[0], radius));\n      for (i = 1, ii = coordinates.length; i < ii; ++i) {\n        area -= Math.abs(ol.Sphere.getArea_(coordinates[i], radius));\n      }\n      break;\n    }\n    case ol.geom.GeometryType.MULTI_POLYGON: {\n      coordinates = /** @type {ol.geom.SimpleGeometry} */ (geometry).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        coords = coordinates[i];\n        area += Math.abs(ol.Sphere.getArea_(coords[0], radius));\n        for (j = 1, jj = coords.length; j < jj; ++j) {\n          area -= Math.abs(ol.Sphere.getArea_(coords[j], radius));\n        }\n      }\n      break;\n    }\n    case ol.geom.GeometryType.GEOMETRY_COLLECTION: {\n      var geometries = /** @type {ol.geom.GeometryCollection} */ (geometry).getGeometries();\n      for (i = 0, ii = geometries.length; i < ii; ++i) {\n        area += ol.Sphere.getArea(geometries[i], opt_options);\n      }\n      break;\n    }\n    default: {\n      throw new Error('Unsupported geometry type: ' + type);\n    }\n  }\n  return area;\n};\n\n\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs-new.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array.<ol.Coordinate>} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nol.Sphere.getArea_ = function(coordinates, radius) {\n  var area = 0, len = coordinates.length;\n  var x1 = coordinates[len - 1][0];\n  var y1 = coordinates[len - 1][1];\n  for (var i = 0; i < len; i++) {\n    var x2 = coordinates[i][0], y2 = coordinates[i][1];\n    area += ol.math.toRadians(x2 - x1) *\n        (2 + Math.sin(ol.math.toRadians(y1)) +\n        Math.sin(ol.math.toRadians(y2)));\n    x1 = x2;\n    y1 = y2;\n  }\n  return area * radius * radius / 2.0;\n};\n\ngoog.provide('ol.proj.Units');\n\n\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nol.proj.Units = {\n  DEGREES: 'degrees',\n  FEET: 'ft',\n  METERS: 'm',\n  PIXELS: 'pixels',\n  TILE_PIXELS: 'tile-pixels',\n  USFEET: 'us-ft'\n};\n\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object.<ol.proj.Units, number>}\n * @api\n */\nol.proj.Units.METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nol.proj.Units.METERS_PER_UNIT[ol.proj.Units.DEGREES] =\n    2 * Math.PI * 6370997 / 360;\nol.proj.Units.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048;\nol.proj.Units.METERS_PER_UNIT[ol.proj.Units.METERS] = 1;\nol.proj.Units.METERS_PER_UNIT[ol.proj.Units.USFEET] = 1200 / 3937;\n\ngoog.provide('ol.proj.proj4');\n\n\n/**\n * @private\n * @type {Proj4}\n */\nol.proj.proj4.cache_ = null;\n\n\n/**\n * Store the proj4 function.\n * @param {Proj4} proj4 The proj4 function.\n */\nol.proj.proj4.set = function(proj4) {\n  ol.proj.proj4.cache_ = proj4;\n};\n\n\n/**\n * Get proj4.\n * @return {Proj4} The proj4 function set above or available globally.\n */\nol.proj.proj4.get = function() {\n  return ol.proj.proj4.cache_ || window['proj4'];\n};\n\ngoog.provide('ol.proj.Projection');\n\ngoog.require('ol');\ngoog.require('ol.proj.Units');\ngoog.require('ol.proj.proj4');\n\n\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link ol.proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link ol.ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link ol.proj.get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n *     urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n *     http://www.opengis.net/gml/srs/epsg.xml#4326,\n *     urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n *     urn:ogc:def:crs:EPSG:6.18:3:3857,\n *     http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use proj4js, aliases can be added using `proj4.defs()`; see\n * [documentation](https://github.com/proj4js/proj4js). To set an alternative\n * namespace for proj4, use {@link ol.proj.setProj4}.\n *\n * @constructor\n * @param {olx.ProjectionOptions} options Projection options.\n * @struct\n * @api\n */\nol.proj.Projection = function(options) {\n  /**\n   * @private\n   * @type {string}\n   */\n  this.code_ = options.code;\n\n  /**\n   * Units of projected coordinates. When set to `ol.proj.Units.TILE_PIXELS`, a\n   * `this.extent_` and `this.worldExtent_` must be configured properly for each\n   * tile.\n   * @private\n   * @type {ol.proj.Units}\n   */\n  this.units_ = /** @type {ol.proj.Units} */ (options.units);\n\n  /**\n   * Validity extent of the projection in projected coordinates. For projections\n   * with `ol.proj.Units.TILE_PIXELS` units, this is the extent of the tile in\n   * tile pixel space.\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = options.extent !== undefined ? options.extent : null;\n\n  /**\n   * Extent of the world in EPSG:4326. For projections with\n   * `ol.proj.Units.TILE_PIXELS` units, this is the extent of the tile in\n   * projected coordinate space.\n   * @private\n   * @type {ol.Extent}\n   */\n  this.worldExtent_ = options.worldExtent !== undefined ?\n    options.worldExtent : null;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.axisOrientation_ = options.axisOrientation !== undefined ?\n    options.axisOrientation : 'enu';\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.global_ = options.global !== undefined ? options.global : false;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.canWrapX_ = !!(this.global_ && this.extent_);\n\n  /**\n   * @private\n   * @type {function(number, ol.Coordinate):number|undefined}\n   */\n  this.getPointResolutionFunc_ = options.getPointResolution;\n\n  /**\n   * @private\n   * @type {ol.tilegrid.TileGrid}\n   */\n  this.defaultTileGrid_ = null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.metersPerUnit_ = options.metersPerUnit;\n\n  var code = options.code;\n  if (ol.ENABLE_PROJ4JS) {\n    var proj4js = ol.proj.proj4.get();\n    if (typeof proj4js == 'function') {\n      var def = proj4js.defs(code);\n      if (def !== undefined) {\n        if (def.axis !== undefined && options.axisOrientation === undefined) {\n          this.axisOrientation_ = def.axis;\n        }\n        if (options.metersPerUnit === undefined) {\n          this.metersPerUnit_ = def.to_meter;\n        }\n        if (options.units === undefined) {\n          this.units_ = def.units;\n        }\n      }\n    }\n  }\n};\n\n\n/**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\nol.proj.Projection.prototype.canWrapX = function() {\n  return this.canWrapX_;\n};\n\n\n/**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\nol.proj.Projection.prototype.getCode = function() {\n  return this.code_;\n};\n\n\n/**\n * Get the validity extent for this projection.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.proj.Projection.prototype.getExtent = function() {\n  return this.extent_;\n};\n\n\n/**\n * Get the units of this projection.\n * @return {ol.proj.Units} Units.\n * @api\n */\nol.proj.Projection.prototype.getUnits = function() {\n  return this.units_;\n};\n\n\n/**\n * Get the amount of meters per unit of this projection.  If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\nol.proj.Projection.prototype.getMetersPerUnit = function() {\n  return this.metersPerUnit_ || ol.proj.Units.METERS_PER_UNIT[this.units_];\n};\n\n\n/**\n * Get the world extent for this projection.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.proj.Projection.prototype.getWorldExtent = function() {\n  return this.worldExtent_;\n};\n\n\n/**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n *     or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n *     \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\nol.proj.Projection.prototype.getAxisOrientation = function() {\n  return this.axisOrientation_;\n};\n\n\n/**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\nol.proj.Projection.prototype.isGlobal = function() {\n  return this.global_;\n};\n\n\n/**\n* Set if the projection is a global projection which spans the whole world\n* @param {boolean} global Whether the projection is global.\n* @api\n*/\nol.proj.Projection.prototype.setGlobal = function(global) {\n  this.global_ = global;\n  this.canWrapX_ = !!(global && this.extent_);\n};\n\n\n/**\n * @return {ol.tilegrid.TileGrid} The default tile grid.\n */\nol.proj.Projection.prototype.getDefaultTileGrid = function() {\n  return this.defaultTileGrid_;\n};\n\n\n/**\n * @param {ol.tilegrid.TileGrid} tileGrid The default tile grid.\n */\nol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) {\n  this.defaultTileGrid_ = tileGrid;\n};\n\n\n/**\n * Set the validity extent for this projection.\n * @param {ol.Extent} extent Extent.\n * @api\n */\nol.proj.Projection.prototype.setExtent = function(extent) {\n  this.extent_ = extent;\n  this.canWrapX_ = !!(this.global_ && extent);\n};\n\n\n/**\n * Set the world extent for this projection.\n * @param {ol.Extent} worldExtent World extent\n *     [minlon, minlat, maxlon, maxlat].\n * @api\n */\nol.proj.Projection.prototype.setWorldExtent = function(worldExtent) {\n  this.worldExtent_ = worldExtent;\n};\n\n\n/**\n * Set the getPointResolution function (see {@link ol.proj#getPointResolution}\n * for this projection.\n * @param {function(number, ol.Coordinate):number} func Function\n * @api\n */\nol.proj.Projection.prototype.setGetPointResolution = function(func) {\n  this.getPointResolutionFunc_ = func;\n};\n\n\n/**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, ol.Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\nol.proj.Projection.prototype.getPointResolutionFunc = function() {\n  return this.getPointResolutionFunc_;\n};\n\ngoog.provide('ol.proj.EPSG3857');\n\ngoog.require('ol');\ngoog.require('ol.math');\ngoog.require('ol.proj.Projection');\ngoog.require('ol.proj.Units');\n\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n *\n * @constructor\n * @extends {ol.proj.Projection}\n * @param {string} code Code.\n * @private\n */\nol.proj.EPSG3857.Projection_ = function(code) {\n  ol.proj.Projection.call(this, {\n    code: code,\n    units: ol.proj.Units.METERS,\n    extent: ol.proj.EPSG3857.EXTENT,\n    global: true,\n    worldExtent: ol.proj.EPSG3857.WORLD_EXTENT,\n    getPointResolution: function(resolution, point) {\n      return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS);\n    }\n  });\n};\nol.inherits(ol.proj.EPSG3857.Projection_, ol.proj.Projection);\n\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nol.proj.EPSG3857.RADIUS = 6378137;\n\n\n/**\n * @const\n * @type {number}\n */\nol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS;\n\n\n/**\n * @const\n * @type {ol.Extent}\n */\nol.proj.EPSG3857.EXTENT = [\n  -ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE,\n  ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE\n];\n\n\n/**\n * @const\n * @type {ol.Extent}\n */\nol.proj.EPSG3857.WORLD_EXTENT = [-180, -85, 180, 85];\n\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array.<ol.proj.Projection>}\n */\nol.proj.EPSG3857.PROJECTIONS = [\n  new ol.proj.EPSG3857.Projection_('EPSG:3857'),\n  new ol.proj.EPSG3857.Projection_('EPSG:102100'),\n  new ol.proj.EPSG3857.Projection_('EPSG:102113'),\n  new ol.proj.EPSG3857.Projection_('EPSG:900913'),\n  new ol.proj.EPSG3857.Projection_('urn:ogc:def:crs:EPSG:6.18:3:3857'),\n  new ol.proj.EPSG3857.Projection_('urn:ogc:def:crs:EPSG::3857'),\n  new ol.proj.EPSG3857.Projection_('http://www.opengis.net/gml/srs/epsg.xml#3857')\n];\n\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array.<number>} input Input array of coordinate values.\n * @param {Array.<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array.<number>} Output array of coordinate values.\n */\nol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) {\n  var length = input.length,\n      dimension = opt_dimension > 1 ? opt_dimension : 2,\n      output = opt_output;\n  if (output === undefined) {\n    if (dimension > 2) {\n      // preserve values beyond second dimension\n      output = input.slice();\n    } else {\n      output = new Array(length);\n    }\n  }\n  var halfSize = ol.proj.EPSG3857.HALF_SIZE;\n  for (var i = 0; i < length; i += dimension) {\n    output[i] = halfSize * input[i] / 180;\n    var y = ol.proj.EPSG3857.RADIUS *\n        Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360));\n    if (y > halfSize) {\n      y = halfSize;\n    } else if (y < -halfSize) {\n      y = -halfSize;\n    }\n    output[i + 1] = y;\n  }\n  return output;\n};\n\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array.<number>} input Input array of coordinate values.\n * @param {Array.<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array.<number>} Output array of coordinate values.\n */\nol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) {\n  var length = input.length,\n      dimension = opt_dimension > 1 ? opt_dimension : 2,\n      output = opt_output;\n  if (output === undefined) {\n    if (dimension > 2) {\n      // preserve values beyond second dimension\n      output = input.slice();\n    } else {\n      output = new Array(length);\n    }\n  }\n  for (var i = 0; i < length; i += dimension) {\n    output[i] = 180 * input[i] / ol.proj.EPSG3857.HALF_SIZE;\n    output[i + 1] = 360 * Math.atan(\n        Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90;\n  }\n  return output;\n};\n\ngoog.provide('ol.proj.EPSG4326');\n\ngoog.require('ol');\ngoog.require('ol.proj.Projection');\ngoog.require('ol.proj.Units');\n\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n *\n * @constructor\n * @extends {ol.proj.Projection}\n * @param {string} code Code.\n * @param {string=} opt_axisOrientation Axis orientation.\n * @private\n */\nol.proj.EPSG4326.Projection_ = function(code, opt_axisOrientation) {\n  ol.proj.Projection.call(this, {\n    code: code,\n    units: ol.proj.Units.DEGREES,\n    extent: ol.proj.EPSG4326.EXTENT,\n    axisOrientation: opt_axisOrientation,\n    global: true,\n    metersPerUnit: ol.proj.EPSG4326.METERS_PER_UNIT,\n    worldExtent: ol.proj.EPSG4326.EXTENT\n  });\n};\nol.inherits(ol.proj.EPSG4326.Projection_, ol.proj.Projection);\n\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nol.proj.EPSG4326.RADIUS = 6378137;\n\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {ol.Extent}\n */\nol.proj.EPSG4326.EXTENT = [-180, -90, 180, 90];\n\n\n/**\n * @const\n * @type {number}\n */\nol.proj.EPSG4326.METERS_PER_UNIT = Math.PI * ol.proj.EPSG4326.RADIUS / 180;\n\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array.<ol.proj.Projection>}\n */\nol.proj.EPSG4326.PROJECTIONS = [\n  new ol.proj.EPSG4326.Projection_('CRS:84'),\n  new ol.proj.EPSG4326.Projection_('EPSG:4326', 'neu'),\n  new ol.proj.EPSG4326.Projection_('urn:ogc:def:crs:EPSG::4326', 'neu'),\n  new ol.proj.EPSG4326.Projection_('urn:ogc:def:crs:EPSG:6.6:4326', 'neu'),\n  new ol.proj.EPSG4326.Projection_('urn:ogc:def:crs:OGC:1.3:CRS84'),\n  new ol.proj.EPSG4326.Projection_('urn:ogc:def:crs:OGC:2:84'),\n  new ol.proj.EPSG4326.Projection_('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n  new ol.proj.EPSG4326.Projection_('urn:x-ogc:def:crs:EPSG:4326', 'neu')\n];\n\ngoog.provide('ol.proj.projections');\n\n\n/**\n * @private\n * @type {Object.<string, ol.proj.Projection>}\n */\nol.proj.projections.cache_ = {};\n\n\n/**\n * Clear the projections cache.\n */\nol.proj.projections.clear = function() {\n  ol.proj.projections.cache_ = {};\n};\n\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {ol.proj.Projection} The projection (if cached).\n */\nol.proj.projections.get = function(code) {\n  var projections = ol.proj.projections.cache_;\n  return projections[code] || null;\n};\n\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {ol.proj.Projection} projection The projection to cache.\n */\nol.proj.projections.add = function(code, projection) {\n  var projections = ol.proj.projections.cache_;\n  projections[code] = projection;\n};\n\ngoog.provide('ol.proj.transforms');\n\ngoog.require('ol.obj');\n\n\n/**\n * @private\n * @type {Object.<string, Object.<string, ol.TransformFunction>>}\n */\nol.proj.transforms.cache_ = {};\n\n\n/**\n * Clear the transform cache.\n */\nol.proj.transforms.clear = function() {\n  ol.proj.transforms.cache_ = {};\n};\n\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {ol.proj.Projection} source Source.\n * @param {ol.proj.Projection} destination Destination.\n * @param {ol.TransformFunction} transformFn Transform.\n */\nol.proj.transforms.add = function(source, destination, transformFn) {\n  var sourceCode = source.getCode();\n  var destinationCode = destination.getCode();\n  var transforms = ol.proj.transforms.cache_;\n  if (!(sourceCode in transforms)) {\n    transforms[sourceCode] = {};\n  }\n  transforms[sourceCode][destinationCode] = transformFn;\n};\n\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection.  This method is used to clean up\n * cached transforms during testing.\n *\n * @param {ol.proj.Projection} source Source projection.\n * @param {ol.proj.Projection} destination Destination projection.\n * @return {ol.TransformFunction} transformFn The unregistered transform.\n */\nol.proj.transforms.remove = function(source, destination) {\n  var sourceCode = source.getCode();\n  var destinationCode = destination.getCode();\n  var transforms = ol.proj.transforms.cache_;\n  var transform = transforms[sourceCode][destinationCode];\n  delete transforms[sourceCode][destinationCode];\n  if (ol.obj.isEmpty(transforms[sourceCode])) {\n    delete transforms[sourceCode];\n  }\n  return transform;\n};\n\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {ol.TransformFunction|undefined} The transform function (if found).\n */\nol.proj.transforms.get = function(sourceCode, destinationCode) {\n  var transform;\n  var transforms = ol.proj.transforms.cache_;\n  if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n    transform = transforms[sourceCode][destinationCode];\n  }\n  return transform;\n};\n\ngoog.provide('ol.proj');\n\ngoog.require('ol');\ngoog.require('ol.Sphere');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.proj.EPSG3857');\ngoog.require('ol.proj.EPSG4326');\ngoog.require('ol.proj.Projection');\ngoog.require('ol.proj.Units');\ngoog.require('ol.proj.proj4');\ngoog.require('ol.proj.projections');\ngoog.require('ol.proj.transforms');\n\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object.<ol.proj.Units, number>}\n * @api\n */\nol.proj.METERS_PER_UNIT = ol.proj.Units.METERS_PER_UNIT;\n\n\n/**\n * A place to store the mean radius of the Earth.\n * @private\n * @type {ol.Sphere}\n */\nol.proj.SPHERE_ = new ol.Sphere(ol.Sphere.DEFAULT_RADIUS);\n\n\nif (ol.ENABLE_PROJ4JS) {\n  /**\n   * Register proj4. If not explicitly registered, it will be assumed that\n   * proj4js will be loaded in the global namespace. For example in a\n   * browserify ES6 environment you could use:\n   *\n   *     import ol from 'openlayers';\n   *     import proj4 from 'proj4';\n   *     ol.proj.setProj4(proj4);\n   *\n   * @param {Proj4} proj4 Proj4.\n   * @api\n   */\n  ol.proj.setProj4 = function(proj4) {\n    ol.proj.proj4.set(proj4);\n  };\n}\n\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the 'point' pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link ol.proj.Projection} constructor or by using\n * {@link ol.proj.Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ol.ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {ol.Coordinate} point Point to find adjusted resolution at.\n * @param {ol.proj.Units=} opt_units Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nol.proj.getPointResolution = function(projection, resolution, point, opt_units) {\n  projection = ol.proj.get(projection);\n  var pointResolution;\n  var getter = projection.getPointResolutionFunc();\n  if (getter) {\n    pointResolution = getter(resolution, point);\n  } else {\n    var units = projection.getUnits();\n    if (units == ol.proj.Units.DEGREES && !opt_units || opt_units == ol.proj.Units.DEGREES) {\n      pointResolution = resolution;\n    } else {\n      // Estimate point resolution by transforming the center pixel to EPSG:4326,\n      // measuring its width and height on the normal sphere, and taking the\n      // average of the width and height.\n      var toEPSG4326 = ol.proj.getTransformFromProjections(projection, ol.proj.get('EPSG:4326'));\n      var vertices = [\n        point[0] - resolution / 2, point[1],\n        point[0] + resolution / 2, point[1],\n        point[0], point[1] - resolution / 2,\n        point[0], point[1] + resolution / 2\n      ];\n      vertices = toEPSG4326(vertices, vertices, 2);\n      var width = ol.proj.SPHERE_.haversineDistance(\n          vertices.slice(0, 2), vertices.slice(2, 4));\n      var height = ol.proj.SPHERE_.haversineDistance(\n          vertices.slice(4, 6), vertices.slice(6, 8));\n      pointResolution = (width + height) / 2;\n      var metersPerUnit = opt_units ?\n        ol.proj.Units.METERS_PER_UNIT[opt_units] :\n        projection.getMetersPerUnit();\n      if (metersPerUnit !== undefined) {\n        pointResolution /= metersPerUnit;\n      }\n    }\n  }\n  return pointResolution;\n};\n\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array.<ol.proj.Projection>} projections Projections.\n * @api\n */\nol.proj.addEquivalentProjections = function(projections) {\n  ol.proj.addProjections(projections);\n  projections.forEach(function(source) {\n    projections.forEach(function(destination) {\n      if (source !== destination) {\n        ol.proj.transforms.add(source, destination, ol.proj.cloneTransform);\n      }\n    });\n  });\n};\n\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array.<ol.proj.Projection>} projections1 Projections with equal\n *     meaning.\n * @param {Array.<ol.proj.Projection>} projections2 Projections with equal\n *     meaning.\n * @param {ol.TransformFunction} forwardTransform Transformation from any\n *   projection in projection1 to any projection in projection2.\n * @param {ol.TransformFunction} inverseTransform Transform from any projection\n *   in projection2 to any projection in projection1..\n */\nol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTransform, inverseTransform) {\n  projections1.forEach(function(projection1) {\n    projections2.forEach(function(projection2) {\n      ol.proj.transforms.add(projection1, projection2, forwardTransform);\n      ol.proj.transforms.add(projection2, projection1, inverseTransform);\n    });\n  });\n};\n\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {ol.proj.Projection} projection Projection instance.\n * @api\n */\nol.proj.addProjection = function(projection) {\n  ol.proj.projections.add(projection.getCode(), projection);\n  ol.proj.transforms.add(projection, projection, ol.proj.cloneTransform);\n};\n\n\n/**\n * @param {Array.<ol.proj.Projection>} projections Projections.\n */\nol.proj.addProjections = function(projections) {\n  projections.forEach(ol.proj.addProjection);\n};\n\n\n/**\n * Clear all cached projections and transforms.\n */\nol.proj.clearAllProjections = function() {\n  ol.proj.projections.clear();\n  ol.proj.transforms.clear();\n};\n\n\n/**\n * @param {ol.proj.Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {ol.proj.Projection} Projection.\n */\nol.proj.createProjection = function(projection, defaultCode) {\n  if (!projection) {\n    return ol.proj.get(defaultCode);\n  } else if (typeof projection === 'string') {\n    return ol.proj.get(projection);\n  } else {\n    return /** @type {ol.proj.Projection} */ (projection);\n  }\n};\n\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ol.ProjectionLike} source Source projection.\n * @param {ol.ProjectionLike} destination Destination projection.\n * @param {function(ol.Coordinate): ol.Coordinate} forward The forward transform\n *     function (that is, from the source projection to the destination\n *     projection) that takes a {@link ol.Coordinate} as argument and returns\n *     the transformed {@link ol.Coordinate}.\n * @param {function(ol.Coordinate): ol.Coordinate} inverse The inverse transform\n *     function (that is, from the destination projection to the source\n *     projection) that takes a {@link ol.Coordinate} as argument and returns\n *     the transformed {@link ol.Coordinate}.\n * @api\n */\nol.proj.addCoordinateTransforms = function(source, destination, forward, inverse) {\n  var sourceProj = ol.proj.get(source);\n  var destProj = ol.proj.get(destination);\n  ol.proj.transforms.add(sourceProj, destProj,\n      ol.proj.createTransformFromCoordinateTransform(forward));\n  ol.proj.transforms.add(destProj, sourceProj,\n      ol.proj.createTransformFromCoordinateTransform(inverse));\n};\n\n\n/**\n * Creates a {@link ol.TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(ol.Coordinate): ol.Coordinate} transform Coordinate\n *     transform.\n * @return {ol.TransformFunction} Transform function.\n */\nol.proj.createTransformFromCoordinateTransform = function(transform) {\n  return (\n    /**\n     * @param {Array.<number>} input Input.\n     * @param {Array.<number>=} opt_output Output.\n     * @param {number=} opt_dimension Dimension.\n     * @return {Array.<number>} Output.\n     */\n    function(input, opt_output, opt_dimension) {\n      var length = input.length;\n      var dimension = opt_dimension !== undefined ? opt_dimension : 2;\n      var output = opt_output !== undefined ? opt_output : new Array(length);\n      var point, i, j;\n      for (i = 0; i < length; i += dimension) {\n        point = transform([input[i], input[i + 1]]);\n        output[i] = point[0];\n        output[i + 1] = point[1];\n        for (j = dimension - 1; j >= 2; --j) {\n          output[i + j] = input[i + j];\n        }\n      }\n      return output;\n    });\n};\n\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {ol.Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n *     an array with longitude as 1st and latitude as 2nd element.\n * @param {ol.ProjectionLike=} opt_projection Target projection. The\n *     default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {ol.Coordinate} Coordinate projected to the target projection.\n * @api\n */\nol.proj.fromLonLat = function(coordinate, opt_projection) {\n  return ol.proj.transform(coordinate, 'EPSG:4326',\n      opt_projection !== undefined ? opt_projection : 'EPSG:3857');\n};\n\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {ol.Coordinate} coordinate Projected coordinate.\n * @param {ol.ProjectionLike=} opt_projection Projection of the coordinate.\n *     The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {ol.Coordinate} Coordinate as longitude and latitude, i.e. an array\n *     with longitude as 1st and latitude as 2nd element.\n * @api\n */\nol.proj.toLonLat = function(coordinate, opt_projection) {\n  var lonLat = ol.proj.transform(coordinate,\n      opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');\n  var lon = lonLat[0];\n  if (lon < -180 || lon > 180) {\n    lonLat[0] = ol.math.modulo(lon + 180, 360) - 180;\n  }\n  return lonLat;\n};\n\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ol.ProjectionLike} projectionLike Either a code string which is\n *     a combination of authority and identifier such as \"EPSG:4326\", or an\n *     existing projection object, or undefined.\n * @return {ol.proj.Projection} Projection object, or null if not in list.\n * @api\n */\nol.proj.get = function(projectionLike) {\n  var projection = null;\n  if (projectionLike instanceof ol.proj.Projection) {\n    projection = projectionLike;\n  } else if (typeof projectionLike === 'string') {\n    var code = projectionLike;\n    projection = ol.proj.projections.get(code);\n    if (ol.ENABLE_PROJ4JS && !projection) {\n      var proj4js = ol.proj.proj4.get();\n      if (typeof proj4js == 'function' &&\n          proj4js.defs(code) !== undefined) {\n        projection = new ol.proj.Projection({code: code});\n        ol.proj.addProjection(projection);\n      }\n    }\n  }\n  return projection;\n};\n\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {ol.proj.Projection} projection1 Projection 1.\n * @param {ol.proj.Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nol.proj.equivalent = function(projection1, projection2) {\n  if (projection1 === projection2) {\n    return true;\n  }\n  var equalUnits = projection1.getUnits() === projection2.getUnits();\n  if (projection1.getCode() === projection2.getCode()) {\n    return equalUnits;\n  } else {\n    var transformFn = ol.proj.getTransformFromProjections(\n        projection1, projection2);\n    return transformFn === ol.proj.cloneTransform && equalUnits;\n  }\n};\n\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ol.ProjectionLike} source Source.\n * @param {ol.ProjectionLike} destination Destination.\n * @return {ol.TransformFunction} Transform function.\n * @api\n */\nol.proj.getTransform = function(source, destination) {\n  var sourceProjection = ol.proj.get(source);\n  var destinationProjection = ol.proj.get(destination);\n  return ol.proj.getTransformFromProjections(\n      sourceProjection, destinationProjection);\n};\n\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {ol.proj.Projection} sourceProjection Source Projection object.\n * @param {ol.proj.Projection} destinationProjection Destination Projection\n *     object.\n * @return {ol.TransformFunction} Transform function.\n */\nol.proj.getTransformFromProjections = function(sourceProjection, destinationProjection) {\n  var sourceCode = sourceProjection.getCode();\n  var destinationCode = destinationProjection.getCode();\n  var transform = ol.proj.transforms.get(sourceCode, destinationCode);\n  if (ol.ENABLE_PROJ4JS && !transform) {\n    var proj4js = ol.proj.proj4.get();\n    if (typeof proj4js == 'function') {\n      var sourceDef = proj4js.defs(sourceCode);\n      var destinationDef = proj4js.defs(destinationCode);\n\n      if (sourceDef !== undefined && destinationDef !== undefined) {\n        if (sourceDef === destinationDef) {\n          ol.proj.addEquivalentProjections([destinationProjection, sourceProjection]);\n        } else {\n          var proj4Transform = proj4js(destinationCode, sourceCode);\n          ol.proj.addCoordinateTransforms(destinationProjection, sourceProjection,\n              proj4Transform.forward, proj4Transform.inverse);\n        }\n        transform = ol.proj.transforms.get(sourceCode, destinationCode);\n      }\n    }\n  }\n  if (!transform) {\n    transform = ol.proj.identityTransform;\n  }\n  return transform;\n};\n\n\n/**\n * @param {Array.<number>} input Input coordinate array.\n * @param {Array.<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array.<number>} Input coordinate array (same array as input).\n */\nol.proj.identityTransform = function(input, opt_output, opt_dimension) {\n  if (opt_output !== undefined && input !== opt_output) {\n    for (var i = 0, ii = input.length; i < ii; ++i) {\n      opt_output[i] = input[i];\n    }\n    input = opt_output;\n  }\n  return input;\n};\n\n\n/**\n * @param {Array.<number>} input Input coordinate array.\n * @param {Array.<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array.<number>} Output coordinate array (new array, same coordinate\n *     values).\n */\nol.proj.cloneTransform = function(input, opt_output, opt_dimension) {\n  var output;\n  if (opt_output !== undefined) {\n    for (var i = 0, ii = input.length; i < ii; ++i) {\n      opt_output[i] = input[i];\n    }\n    output = opt_output;\n  } else {\n    output = input.slice();\n  }\n  return output;\n};\n\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link ol.proj.transformExtent} for extent transformation.\n * See the transform method of {@link ol.geom.Geometry} and its subclasses for\n * geometry transforms.\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.ProjectionLike} source Source projection-like.\n * @param {ol.ProjectionLike} destination Destination projection-like.\n * @return {ol.Coordinate} Coordinate.\n * @api\n */\nol.proj.transform = function(coordinate, source, destination) {\n  var transformFn = ol.proj.getTransform(source, destination);\n  return transformFn(coordinate, undefined, coordinate.length);\n};\n\n\n/**\n * Transforms an extent from source projection to destination projection.  This\n * returns a new extent (and does not modify the original).\n *\n * @param {ol.Extent} extent The extent to transform.\n * @param {ol.ProjectionLike} source Source projection-like.\n * @param {ol.ProjectionLike} destination Destination projection-like.\n * @return {ol.Extent} The transformed extent.\n * @api\n */\nol.proj.transformExtent = function(extent, source, destination) {\n  var transformFn = ol.proj.getTransform(source, destination);\n  return ol.extent.applyTransform(extent, transformFn);\n};\n\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {ol.Coordinate} point Point.\n * @param {ol.proj.Projection} sourceProjection Source projection.\n * @param {ol.proj.Projection} destinationProjection Destination projection.\n * @return {ol.Coordinate} Point.\n */\nol.proj.transformWithProjections = function(point, sourceProjection, destinationProjection) {\n  var transformFn = ol.proj.getTransformFromProjections(\n      sourceProjection, destinationProjection);\n  return transformFn(point);\n};\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857.  This function is called\n * by when this module is executed and should only need to be called again after\n * `ol.proj.clearAllProjections()` is called (e.g. in tests).\n */\nol.proj.addCommon = function() {\n  // Add transformations that don't alter coordinates to convert within set of\n  // projections with equal meaning.\n  ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS);\n  ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);\n  // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n  // coordinates and back.\n  ol.proj.addEquivalentTransforms(\n      ol.proj.EPSG4326.PROJECTIONS,\n      ol.proj.EPSG3857.PROJECTIONS,\n      ol.proj.EPSG3857.fromEPSG4326,\n      ol.proj.EPSG3857.toEPSG4326);\n};\n\nol.proj.addCommon();\n\ngoog.provide('ol.tilecoord');\n\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {ol.TileCoord=} opt_tileCoord Tile coordinate.\n * @return {ol.TileCoord} Tile coordinate.\n */\nol.tilecoord.createOrUpdate = function(z, x, y, opt_tileCoord) {\n  if (opt_tileCoord !== undefined) {\n    opt_tileCoord[0] = z;\n    opt_tileCoord[1] = x;\n    opt_tileCoord[2] = y;\n    return opt_tileCoord;\n  } else {\n    return [z, x, y];\n  }\n};\n\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nol.tilecoord.getKeyZXY = function(z, x, y) {\n  return z + '/' + x + '/' + y;\n};\n\n\n/**\n * Get the key for a tile coord.\n * @param {ol.TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nol.tilecoord.getKey = function(tileCoord) {\n  return ol.tilecoord.getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n};\n\n\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {ol.TileCoord} The tile coord.\n */\nol.tilecoord.fromKey = function(key) {\n  return key.split('/').map(Number);\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nol.tilecoord.hash = function(tileCoord) {\n  return (tileCoord[1] << tileCoord[0]) + tileCoord[2];\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coord.\n * @return {string} Quad key.\n */\nol.tilecoord.quadKey = function(tileCoord) {\n  var z = tileCoord[0];\n  var digits = new Array(z);\n  var mask = 1 << (z - 1);\n  var i, charCode;\n  for (i = 0; i < z; ++i) {\n    // 48 is charCode for 0 - '0'.charCodeAt(0)\n    charCode = 48;\n    if (tileCoord[1] & mask) {\n      charCode += 1;\n    }\n    if (tileCoord[2] & mask) {\n      charCode += 2;\n    }\n    digits[i] = String.fromCharCode(charCode);\n    mask >>= 1;\n  }\n  return digits.join('');\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nol.tilecoord.withinExtentAndZ = function(tileCoord, tileGrid) {\n  var z = tileCoord[0];\n  var x = tileCoord[1];\n  var y = tileCoord[2];\n\n  if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n    return false;\n  }\n  var extent = tileGrid.getExtent();\n  var tileRange;\n  if (!extent) {\n    tileRange = tileGrid.getFullTileRange(z);\n  } else {\n    tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n  }\n  if (!tileRange) {\n    return true;\n  } else {\n    return tileRange.containsXY(x, y);\n  }\n};\n\ngoog.provide('ol.tilegrid.TileGrid');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.TileRange');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.size');\ngoog.require('ol.tilecoord');\n\n\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n *\n * @constructor\n * @param {olx.tilegrid.TileGridOptions} options Tile grid options.\n * @struct\n * @api\n */\nol.tilegrid.TileGrid = function(options) {\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;\n\n  /**\n   * @private\n   * @type {!Array.<number>}\n   */\n  this.resolutions_ = options.resolutions;\n  ol.asserts.assert(ol.array.isSorted(this.resolutions_, function(a, b) {\n    return b - a;\n  }, true), 17); // `resolutions` must be sorted in descending order\n\n\n  // check if we've got a consistent zoom factor and origin\n  var zoomFactor;\n  if (!options.origins) {\n    for (var i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n      if (!zoomFactor) {\n        zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n      } else {\n        if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n          zoomFactor = undefined;\n          break;\n        }\n      }\n    }\n  }\n\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.zoomFactor_ = zoomFactor;\n\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.maxZoom = this.resolutions_.length - 1;\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.origin_ = options.origin !== undefined ? options.origin : null;\n\n  /**\n   * @private\n   * @type {Array.<ol.Coordinate>}\n   */\n  this.origins_ = null;\n  if (options.origins !== undefined) {\n    this.origins_ = options.origins;\n    ol.asserts.assert(this.origins_.length == this.resolutions_.length,\n        20); // Number of `origins` and `resolutions` must be equal\n  }\n\n  var extent = options.extent;\n\n  if (extent !== undefined &&\n      !this.origin_ && !this.origins_) {\n    this.origin_ = ol.extent.getTopLeft(extent);\n  }\n\n  ol.asserts.assert(\n      (!this.origin_ && this.origins_) || (this.origin_ && !this.origins_),\n      18); // Either `origin` or `origins` must be configured, never both\n\n  /**\n   * @private\n   * @type {Array.<number|ol.Size>}\n   */\n  this.tileSizes_ = null;\n  if (options.tileSizes !== undefined) {\n    this.tileSizes_ = options.tileSizes;\n    ol.asserts.assert(this.tileSizes_.length == this.resolutions_.length,\n        19); // Number of `tileSizes` and `resolutions` must be equal\n  }\n\n  /**\n   * @private\n   * @type {number|ol.Size}\n   */\n  this.tileSize_ = options.tileSize !== undefined ?\n    options.tileSize :\n    !this.tileSizes_ ? ol.DEFAULT_TILE_SIZE : null;\n  ol.asserts.assert(\n      (!this.tileSize_ && this.tileSizes_) ||\n      (this.tileSize_ && !this.tileSizes_),\n      22); // Either `tileSize` or `tileSizes` must be configured, never both\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = extent !== undefined ? extent : null;\n\n\n  /**\n   * @private\n   * @type {Array.<ol.TileRange>}\n   */\n  this.fullTileRanges_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.tmpSize_ = [0, 0];\n\n  if (options.sizes !== undefined) {\n    this.fullTileRanges_ = options.sizes.map(function(size, z) {\n      var tileRange = new ol.TileRange(\n          Math.min(0, size[0]), Math.max(size[0] - 1, -1),\n          Math.min(0, size[1]), Math.max(size[1] - 1, -1));\n      return tileRange;\n    }, this);\n  } else if (extent) {\n    this.calculateTileRanges_(extent);\n  }\n\n};\n\n\n/**\n * @private\n * @type {ol.TileCoord}\n */\nol.tilegrid.TileGrid.tmpTileCoord_ = [0, 0, 0];\n\n\n/**\n * Call a function with each tile coordinate for a given extent and zoom level.\n *\n * @param {ol.Extent} extent Extent.\n * @param {number} zoom Integer zoom level.\n * @param {function(ol.TileCoord)} callback Function called with each tile coordinate.\n * @api\n */\nol.tilegrid.TileGrid.prototype.forEachTileCoord = function(extent, zoom, callback) {\n  var tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n  for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n    for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n      callback([zoom, i, j]);\n    }\n  }\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {function(this: T, number, ol.TileRange): boolean} callback Callback.\n * @param {T=} opt_this The object to use as `this` in `callback`.\n * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object.\n * @param {ol.Extent=} opt_extent Temporary ol.Extent object.\n * @return {boolean} Callback succeeded.\n * @template T\n */\nol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) {\n  var tileRange, x, y;\n  var tileCoordExtent = null;\n  var z = tileCoord[0] - 1;\n  if (this.zoomFactor_ === 2) {\n    x = tileCoord[1];\n    y = tileCoord[2];\n  } else {\n    tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n  }\n  while (z >= this.minZoom) {\n    if (this.zoomFactor_ === 2) {\n      x = Math.floor(x / 2);\n      y = Math.floor(y / 2);\n      tileRange = ol.TileRange.createOrUpdate(x, x, y, y, opt_tileRange);\n    } else {\n      tileRange = this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange);\n    }\n    if (callback.call(opt_this, z, tileRange)) {\n      return true;\n    }\n    --z;\n  }\n  return false;\n};\n\n\n/**\n * Get the extent for this tile grid, if it was configured.\n * @return {ol.Extent} Extent.\n */\nol.tilegrid.TileGrid.prototype.getExtent = function() {\n  return this.extent_;\n};\n\n\n/**\n * Get the maximum zoom level for the grid.\n * @return {number} Max zoom.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getMaxZoom = function() {\n  return this.maxZoom;\n};\n\n\n/**\n * Get the minimum zoom level for the grid.\n * @return {number} Min zoom.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getMinZoom = function() {\n  return this.minZoom;\n};\n\n\n/**\n * Get the origin for the grid at the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {ol.Coordinate} Origin.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getOrigin = function(z) {\n  if (this.origin_) {\n    return this.origin_;\n  } else {\n    return this.origins_[z];\n  }\n};\n\n\n/**\n * Get the resolution for the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {number} Resolution.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getResolution = function(z) {\n  return this.resolutions_[z];\n};\n\n\n/**\n * Get the list of resolutions for the tile grid.\n * @return {Array.<number>} Resolutions.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getResolutions = function() {\n  return this.resolutions_;\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object.\n * @param {ol.Extent=} opt_extent Temporary ol.Extent object.\n * @return {ol.TileRange} Tile range.\n */\nol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) {\n  if (tileCoord[0] < this.maxZoom) {\n    if (this.zoomFactor_ === 2) {\n      var minX = tileCoord[1] * 2;\n      var minY = tileCoord[2] * 2;\n      return ol.TileRange.createOrUpdate(minX, minX + 1, minY, minY + 1, opt_tileRange);\n    }\n    var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n    return this.getTileRangeForExtentAndZ(\n        tileCoordExtent, tileCoord[0] + 1, opt_tileRange);\n  }\n  return null;\n};\n\n\n/**\n * Get the extent for a tile range.\n * @param {number} z Integer zoom level.\n * @param {ol.TileRange} tileRange Tile range.\n * @param {ol.Extent=} opt_extent Temporary ol.Extent object.\n * @return {ol.Extent} Extent.\n */\nol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_extent) {\n  var origin = this.getOrigin(z);\n  var resolution = this.getResolution(z);\n  var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);\n  var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;\n  var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;\n  var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;\n  var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;\n  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n};\n\n\n/**\n * Get a tile range for the given extent and integer zoom level.\n * @param {ol.Extent} extent Extent.\n * @param {number} z Integer zoom level.\n * @param {ol.TileRange=} opt_tileRange Temporary tile range object.\n * @return {ol.TileRange} Tile range.\n */\nol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {\n  var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;\n  this.getTileCoordForXYAndZ_(extent[0], extent[1], z, false, tileCoord);\n  var minX = tileCoord[1];\n  var minY = tileCoord[2];\n  this.getTileCoordForXYAndZ_(extent[2], extent[3], z, true, tileCoord);\n  return ol.TileRange.createOrUpdate(\n      minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @return {ol.Coordinate} Tile center.\n */\nol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) {\n  var origin = this.getOrigin(tileCoord[0]);\n  var resolution = this.getResolution(tileCoord[0]);\n  var tileSize = ol.size.toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n  return [\n    origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n    origin[1] + (tileCoord[2] + 0.5) * tileSize[1] * resolution\n  ];\n};\n\n\n/**\n * Get the extent of a tile coordinate.\n *\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.Extent=} opt_extent Temporary extent object.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) {\n  var origin = this.getOrigin(tileCoord[0]);\n  var resolution = this.getResolution(tileCoord[0]);\n  var tileSize = ol.size.toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n  var minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n  var minY = origin[1] + tileCoord[2] * tileSize[1] * resolution;\n  var maxX = minX + tileSize[0] * resolution;\n  var maxY = minY + tileSize[1] * resolution;\n  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n};\n\n\n/**\n * Get the tile coordinate for the given map coordinate and resolution.  This\n * method considers that coordinates that intersect tile boundaries should be\n * assigned the higher tile coordinate.\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object.\n * @return {ol.TileCoord} Tile coordinate.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coordinate, resolution, opt_tileCoord) {\n  return this.getTileCoordForXYAndResolution_(\n      coordinate[0], coordinate[1], resolution, false, opt_tileCoord);\n};\n\n\n/**\n * Note that this method should not be called for resolutions that correspond\n * to an integer zoom level.  Instead call the `getTileCoordForXYAndZ_` method.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} resolution Resolution (for a non-integer zoom level).\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n *     intersections go to the higher tile coordinate, let edge intersections\n *     go to the lower tile coordinate.\n * @param {ol.TileCoord=} opt_tileCoord Temporary ol.TileCoord object.\n * @return {ol.TileCoord} Tile coordinate.\n * @private\n */\nol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(\n    x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {\n  var z = this.getZForResolution(resolution);\n  var scale = resolution / this.getResolution(z);\n  var origin = this.getOrigin(z);\n  var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);\n\n  var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n  var adjustY = reverseIntersectionPolicy ? 0 : 0.5;\n  var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n  var yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);\n  var tileCoordX = scale * xFromOrigin / tileSize[0];\n  var tileCoordY = scale * yFromOrigin / tileSize[1];\n\n  if (reverseIntersectionPolicy) {\n    tileCoordX = Math.ceil(tileCoordX) - 1;\n    tileCoordY = Math.ceil(tileCoordY) - 1;\n  } else {\n    tileCoordX = Math.floor(tileCoordX);\n    tileCoordY = Math.floor(tileCoordY);\n  }\n\n  return ol.tilecoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord);\n};\n\n\n/**\n * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n * they should have separate implementations.  This method is for integer zoom\n * levels.  The other method should only be called for resolutions corresponding\n * to non-integer zoom levels.\n * @param {number} x Map x coordinate.\n * @param {number} y Map y coordinate.\n * @param {number} z Integer zoom level.\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n *     intersections go to the higher tile coordinate, let edge intersections\n *     go to the lower tile coordinate.\n * @param {ol.TileCoord=} opt_tileCoord Temporary ol.TileCoord object.\n * @return {ol.TileCoord} Tile coordinate.\n * @private\n */\nol.tilegrid.TileGrid.prototype.getTileCoordForXYAndZ_ = function(x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n  var origin = this.getOrigin(z);\n  var resolution = this.getResolution(z);\n  var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);\n\n  var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n  var adjustY = reverseIntersectionPolicy ? 0 : 0.5;\n  var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n  var yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);\n  var tileCoordX = xFromOrigin / tileSize[0];\n  var tileCoordY = yFromOrigin / tileSize[1];\n\n  if (reverseIntersectionPolicy) {\n    tileCoordX = Math.ceil(tileCoordX) - 1;\n    tileCoordY = Math.ceil(tileCoordY) - 1;\n  } else {\n    tileCoordX = Math.floor(tileCoordX);\n    tileCoordY = Math.floor(tileCoordY);\n  }\n\n  return ol.tilecoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord);\n};\n\n\n/**\n * Get a tile coordinate given a map coordinate and zoom level.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} z Zoom level.\n * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object.\n * @return {ol.TileCoord} Tile coordinate.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {\n  return this.getTileCoordForXYAndZ_(\n      coordinate[0], coordinate[1], z, false, opt_tileCoord);\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @return {number} Tile resolution.\n */\nol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) {\n  return this.resolutions_[tileCoord[0]];\n};\n\n\n/**\n * Get the tile size for a zoom level. The type of the return value matches the\n * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n * get an `ol.Size`, run the result through `ol.size.toSize()`.\n * @param {number} z Z.\n * @return {number|ol.Size} Tile size.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getTileSize = function(z) {\n  if (this.tileSize_) {\n    return this.tileSize_;\n  } else {\n    return this.tileSizes_[z];\n  }\n};\n\n\n/**\n * @param {number} z Zoom level.\n * @return {ol.TileRange} Extent tile range for the specified zoom level.\n */\nol.tilegrid.TileGrid.prototype.getFullTileRange = function(z) {\n  if (!this.fullTileRanges_) {\n    return null;\n  } else {\n    return this.fullTileRanges_[z];\n  }\n};\n\n\n/**\n * @param {number} resolution Resolution.\n * @param {number=} opt_direction If 0, the nearest resolution will be used.\n *     If 1, the nearest lower resolution will be used. If -1, the nearest\n *     higher resolution will be used. Default is 0.\n * @return {number} Z.\n * @api\n */\nol.tilegrid.TileGrid.prototype.getZForResolution = function(\n    resolution, opt_direction) {\n  var z = ol.array.linearFindNearest(this.resolutions_, resolution,\n      opt_direction || 0);\n  return ol.math.clamp(z, this.minZoom, this.maxZoom);\n};\n\n\n/**\n * @param {!ol.Extent} extent Extent for this tile grid.\n * @private\n */\nol.tilegrid.TileGrid.prototype.calculateTileRanges_ = function(extent) {\n  var length = this.resolutions_.length;\n  var fullTileRanges = new Array(length);\n  for (var z = this.minZoom; z < length; ++z) {\n    fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n  }\n  this.fullTileRanges_ = fullTileRanges;\n};\n\ngoog.provide('ol.tilegrid');\n\ngoog.require('ol');\ngoog.require('ol.size');\ngoog.require('ol.extent');\ngoog.require('ol.extent.Corner');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Units');\ngoog.require('ol.tilegrid.TileGrid');\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @return {!ol.tilegrid.TileGrid} Default tile grid for the passed projection.\n */\nol.tilegrid.getForProjection = function(projection) {\n  var tileGrid = projection.getDefaultTileGrid();\n  if (!tileGrid) {\n    tileGrid = ol.tilegrid.createForProjection(projection);\n    projection.setDefaultTileGrid(tileGrid);\n  }\n  return tileGrid;\n};\n\n\n/**\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.proj.Projection} projection Projection.\n * @return {ol.TileCoord} Tile coordinate.\n */\nol.tilegrid.wrapX = function(tileGrid, tileCoord, projection) {\n  var z = tileCoord[0];\n  var center = tileGrid.getTileCoordCenter(tileCoord);\n  var projectionExtent = ol.tilegrid.extentFromProjection(projection);\n  if (!ol.extent.containsCoordinate(projectionExtent, center)) {\n    var worldWidth = ol.extent.getWidth(projectionExtent);\n    var worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);\n    center[0] += worldWidth * worldsAway;\n    return tileGrid.getTileCoordForCoordAndZ(center, z);\n  } else {\n    return tileCoord;\n  }\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     ol.DEFAULT_MAX_ZOOM).\n * @param {number|ol.Size=} opt_tileSize Tile size (default uses\n *     ol.DEFAULT_TILE_SIZE).\n * @param {ol.extent.Corner=} opt_corner Extent corner (default is\n *     ol.extent.Corner.TOP_LEFT).\n * @return {!ol.tilegrid.TileGrid} TileGrid instance.\n */\nol.tilegrid.createForExtent = function(extent, opt_maxZoom, opt_tileSize, opt_corner) {\n  var corner = opt_corner !== undefined ?\n    opt_corner : ol.extent.Corner.TOP_LEFT;\n\n  var resolutions = ol.tilegrid.resolutionsFromExtent(\n      extent, opt_maxZoom, opt_tileSize);\n\n  return new ol.tilegrid.TileGrid({\n    extent: extent,\n    origin: ol.extent.getCorner(extent, corner),\n    resolutions: resolutions,\n    tileSize: opt_tileSize\n  });\n};\n\n\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {olx.tilegrid.XYZOptions=} opt_options Tile grid options.\n * @return {!ol.tilegrid.TileGrid} Tile grid instance.\n * @api\n */\nol.tilegrid.createXYZ = function(opt_options) {\n  var options = /** @type {olx.tilegrid.TileGridOptions} */ ({});\n  ol.obj.assign(options, opt_options !== undefined ?\n    opt_options : /** @type {olx.tilegrid.XYZOptions} */ ({}));\n  if (options.extent === undefined) {\n    options.extent = ol.proj.get('EPSG:3857').getExtent();\n  }\n  options.resolutions = ol.tilegrid.resolutionsFromExtent(\n      options.extent, options.maxZoom, options.tileSize);\n  delete options.maxZoom;\n\n  return new ol.tilegrid.TileGrid(options);\n};\n\n\n/**\n * Create a resolutions array from an extent.  A zoom factor of 2 is assumed.\n * @param {ol.Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     ol.DEFAULT_MAX_ZOOM).\n * @param {number|ol.Size=} opt_tileSize Tile size (default uses\n *     ol.DEFAULT_TILE_SIZE).\n * @return {!Array.<number>} Resolutions array.\n */\nol.tilegrid.resolutionsFromExtent = function(extent, opt_maxZoom, opt_tileSize) {\n  var maxZoom = opt_maxZoom !== undefined ?\n    opt_maxZoom : ol.DEFAULT_MAX_ZOOM;\n\n  var height = ol.extent.getHeight(extent);\n  var width = ol.extent.getWidth(extent);\n\n  var tileSize = ol.size.toSize(opt_tileSize !== undefined ?\n    opt_tileSize : ol.DEFAULT_TILE_SIZE);\n  var maxResolution = Math.max(\n      width / tileSize[0], height / tileSize[1]);\n\n  var length = maxZoom + 1;\n  var resolutions = new Array(length);\n  for (var z = 0; z < length; ++z) {\n    resolutions[z] = maxResolution / Math.pow(2, z);\n  }\n  return resolutions;\n};\n\n\n/**\n * @param {ol.ProjectionLike} projection Projection.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     ol.DEFAULT_MAX_ZOOM).\n * @param {number|ol.Size=} opt_tileSize Tile size (default uses\n *     ol.DEFAULT_TILE_SIZE).\n * @param {ol.extent.Corner=} opt_corner Extent corner (default is\n *     ol.extent.Corner.BOTTOM_LEFT).\n * @return {!ol.tilegrid.TileGrid} TileGrid instance.\n */\nol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize, opt_corner) {\n  var extent = ol.tilegrid.extentFromProjection(projection);\n  return ol.tilegrid.createForExtent(\n      extent, opt_maxZoom, opt_tileSize, opt_corner);\n};\n\n\n/**\n * Generate a tile grid extent from a projection.  If the projection has an\n * extent, it is used.  If not, a global extent is assumed.\n * @param {ol.ProjectionLike} projection Projection.\n * @return {ol.Extent} Extent.\n */\nol.tilegrid.extentFromProjection = function(projection) {\n  projection = ol.proj.get(projection);\n  var extent = projection.getExtent();\n  if (!extent) {\n    var half = 180 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] /\n        projection.getMetersPerUnit();\n    extent = ol.extent.createOrUpdate(-half, -half, half, half);\n  }\n  return extent;\n};\n\ngoog.provide('ol.Attribution');\n\ngoog.require('ol.TileRange');\ngoog.require('ol.math');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * An attribution for a layer source.\n *\n * Example:\n *\n *     source: new ol.source.OSM({\n *       attributions: [\n *         new ol.Attribution({\n *           html: 'All maps &copy; ' +\n *               '<a href=\"https://www.opencyclemap.org/\">OpenCycleMap</a>'\n *         }),\n *         ol.source.OSM.ATTRIBUTION\n *       ],\n *     ..\n *\n * @constructor\n * @deprecated This class is deprecated and will removed in the next major release.\n * @param {olx.AttributionOptions} options Attribution options.\n * @struct\n * @api\n */\nol.Attribution = function(options) {\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.html_ = options.html;\n\n  /**\n   * @private\n   * @type {Object.<string, Array.<ol.TileRange>>}\n   */\n  this.tileRanges_ = options.tileRanges ? options.tileRanges : null;\n\n};\n\n\n/**\n * Get the attribution markup.\n * @return {string} The attribution HTML.\n * @api\n */\nol.Attribution.prototype.getHTML = function() {\n  return this.html_;\n};\n\n\n/**\n * @param {Object.<string, ol.TileRange>} tileRanges Tile ranges.\n * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @param {!ol.proj.Projection} projection Projection.\n * @return {boolean} Intersects any tile range.\n */\nol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges, tileGrid, projection) {\n  if (!this.tileRanges_) {\n    return true;\n  }\n  var i, ii, tileRange, zKey;\n  for (zKey in tileRanges) {\n    if (!(zKey in this.tileRanges_)) {\n      continue;\n    }\n    tileRange = tileRanges[zKey];\n    var testTileRange;\n    for (i = 0, ii = this.tileRanges_[zKey].length; i < ii; ++i) {\n      testTileRange = this.tileRanges_[zKey][i];\n      if (testTileRange.intersects(tileRange)) {\n        return true;\n      }\n      var extentTileRange = tileGrid.getTileRangeForExtentAndZ(\n          ol.tilegrid.extentFromProjection(projection), parseInt(zKey, 10));\n      var width = extentTileRange.getWidth();\n      if (tileRange.minX < extentTileRange.minX ||\n          tileRange.maxX > extentTileRange.maxX) {\n        if (testTileRange.intersects(new ol.TileRange(\n            ol.math.modulo(tileRange.minX, width),\n            ol.math.modulo(tileRange.maxX, width),\n            tileRange.minY, tileRange.maxY))) {\n          return true;\n        }\n        if (tileRange.getWidth() > width &&\n            testTileRange.intersects(extentTileRange)) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\n\ngoog.provide('ol.CollectionEventType');\n\n/**\n * @enum {string}\n */\nol.CollectionEventType = {\n  /**\n   * Triggered when an item is added to the collection.\n   * @event ol.Collection.Event#add\n   * @api\n   */\n  ADD: 'add',\n  /**\n   * Triggered when an item is removed from the collection.\n   * @event ol.Collection.Event#remove\n   * @api\n   */\n  REMOVE: 'remove'\n};\n\ngoog.provide('ol.ObjectEventType');\n\n/**\n * @enum {string}\n */\nol.ObjectEventType = {\n  /**\n   * Triggered when a property is changed.\n   * @event ol.Object.Event#propertychange\n   * @api\n   */\n  PROPERTYCHANGE: 'propertychange'\n};\n\ngoog.provide('ol.events');\n\ngoog.require('ol.obj');\n\n\n/**\n * @param {ol.EventsKey} listenerObj Listener object.\n * @return {ol.EventsListenerFunctionType} Bound listener.\n */\nol.events.bindListener_ = function(listenerObj) {\n  var boundListener = function(evt) {\n    var listener = listenerObj.listener;\n    var bindTo = listenerObj.bindTo || listenerObj.target;\n    if (listenerObj.callOnce) {\n      ol.events.unlistenByKey(listenerObj);\n    }\n    return listener.call(bindTo, evt);\n  };\n  listenerObj.boundListener = boundListener;\n  return boundListener;\n};\n\n\n/**\n * Finds the matching {@link ol.EventsKey} in the given listener\n * array.\n *\n * @param {!Array<!ol.EventsKey>} listeners Array of listeners.\n * @param {!Function} listener The listener function.\n * @param {Object=} opt_this The `this` value inside the listener.\n * @param {boolean=} opt_setDeleteIndex Set the deleteIndex on the matching\n *     listener, for {@link ol.events.unlistenByKey}.\n * @return {ol.EventsKey|undefined} The matching listener object.\n * @private\n */\nol.events.findListener_ = function(listeners, listener, opt_this,\n    opt_setDeleteIndex) {\n  var listenerObj;\n  for (var i = 0, ii = listeners.length; i < ii; ++i) {\n    listenerObj = listeners[i];\n    if (listenerObj.listener === listener &&\n        listenerObj.bindTo === opt_this) {\n      if (opt_setDeleteIndex) {\n        listenerObj.deleteIndex = i;\n      }\n      return listenerObj;\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @param {ol.EventTargetLike} target Target.\n * @param {string} type Type.\n * @return {Array.<ol.EventsKey>|undefined} Listeners.\n */\nol.events.getListeners = function(target, type) {\n  var listenerMap = target.ol_lm;\n  return listenerMap ? listenerMap[type] : undefined;\n};\n\n\n/**\n * Get the lookup of listeners.  If one does not exist on the target, it is\n * created.\n * @param {ol.EventTargetLike} target Target.\n * @return {!Object.<string, Array.<ol.EventsKey>>} Map of\n *     listeners by event type.\n * @private\n */\nol.events.getListenerMap_ = function(target) {\n  var listenerMap = target.ol_lm;\n  if (!listenerMap) {\n    listenerMap = target.ol_lm = {};\n  }\n  return listenerMap;\n};\n\n\n/**\n * Clean up all listener objects of the given type.  All properties on the\n * listener objects will be removed, and if no listeners remain in the listener\n * map, it will be removed from the target.\n * @param {ol.EventTargetLike} target Target.\n * @param {string} type Type.\n * @private\n */\nol.events.removeListeners_ = function(target, type) {\n  var listeners = ol.events.getListeners(target, type);\n  if (listeners) {\n    for (var i = 0, ii = listeners.length; i < ii; ++i) {\n      target.removeEventListener(type, listeners[i].boundListener);\n      ol.obj.clear(listeners[i]);\n    }\n    listeners.length = 0;\n    var listenerMap = target.ol_lm;\n    if (listenerMap) {\n      delete listenerMap[type];\n      if (Object.keys(listenerMap).length === 0) {\n        delete target.ol_lm;\n      }\n    }\n  }\n};\n\n\n/**\n * Registers an event listener on an event target. Inspired by\n * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link ol.events.unlistenByKey}.\n *\n * @param {ol.EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ol.EventsListenerFunctionType} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @param {boolean=} opt_once If true, add the listener as one-off listener.\n * @return {ol.EventsKey} Unique key for the listener.\n */\nol.events.listen = function(target, type, listener, opt_this, opt_once) {\n  var listenerMap = ol.events.getListenerMap_(target);\n  var listeners = listenerMap[type];\n  if (!listeners) {\n    listeners = listenerMap[type] = [];\n  }\n  var listenerObj = ol.events.findListener_(listeners, listener, opt_this,\n      false);\n  if (listenerObj) {\n    if (!opt_once) {\n      // Turn one-off listener into a permanent one.\n      listenerObj.callOnce = false;\n    }\n  } else {\n    listenerObj = /** @type {ol.EventsKey} */ ({\n      bindTo: opt_this,\n      callOnce: !!opt_once,\n      listener: listener,\n      target: target,\n      type: type\n    });\n    target.addEventListener(type, ol.events.bindListener_(listenerObj));\n    listeners.push(listenerObj);\n  }\n\n  return listenerObj;\n};\n\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link ol.events.unlistenByKey} in case the listener needs to be unregistered\n * before it is called.\n *\n * When {@link ol.events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {ol.EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ol.EventsListenerFunctionType} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @return {ol.EventsKey} Key for unlistenByKey.\n */\nol.events.listenOnce = function(target, type, listener, opt_this) {\n  return ol.events.listen(target, type, listener, opt_this, true);\n};\n\n\n/**\n * Unregisters an event listener on an event target. Inspired by\n * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}\n *\n * To return a listener, this function needs to be called with the exact same\n * arguments that were used for a previous {@link ol.events.listen} call.\n *\n * @param {ol.EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ol.EventsListenerFunctionType} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n */\nol.events.unlisten = function(target, type, listener, opt_this) {\n  var listeners = ol.events.getListeners(target, type);\n  if (listeners) {\n    var listenerObj = ol.events.findListener_(listeners, listener, opt_this,\n        true);\n    if (listenerObj) {\n      ol.events.unlistenByKey(listenerObj);\n    }\n  }\n};\n\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}\n *\n * The argument passed to this function is the key returned from\n * {@link ol.events.listen} or {@link ol.events.listenOnce}.\n *\n * @param {ol.EventsKey} key The key.\n */\nol.events.unlistenByKey = function(key) {\n  if (key && key.target) {\n    key.target.removeEventListener(key.type, key.boundListener);\n    var listeners = ol.events.getListeners(key.target, key.type);\n    if (listeners) {\n      var i = 'deleteIndex' in key ? key.deleteIndex : listeners.indexOf(key);\n      if (i !== -1) {\n        listeners.splice(i, 1);\n      }\n      if (listeners.length === 0) {\n        ol.events.removeListeners_(key.target, key.type);\n      }\n    }\n    ol.obj.clear(key);\n  }\n};\n\n\n/**\n * Unregisters all event listeners on an event target. Inspired by\n * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}\n *\n * @param {ol.EventTargetLike} target Target.\n */\nol.events.unlistenAll = function(target) {\n  var listenerMap = ol.events.getListenerMap_(target);\n  for (var type in listenerMap) {\n    ol.events.removeListeners_(target, type);\n  }\n};\n\ngoog.provide('ol.Disposable');\n\ngoog.require('ol');\n\n/**\n * Objects that need to clean up after themselves.\n * @constructor\n */\nol.Disposable = function() {};\n\n/**\n * The object has already been disposed.\n * @type {boolean}\n * @private\n */\nol.Disposable.prototype.disposed_ = false;\n\n/**\n * Clean up.\n */\nol.Disposable.prototype.dispose = function() {\n  if (!this.disposed_) {\n    this.disposed_ = true;\n    this.disposeInternal();\n  }\n};\n\n/**\n * Extension point for disposable objects.\n * @protected\n */\nol.Disposable.prototype.disposeInternal = ol.nullFunction;\n\ngoog.provide('ol.events.Event');\n\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * @see {@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface}\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link ol.events.EventTarget}.\n *\n * @constructor\n * @implements {oli.events.Event}\n * @param {string} type Type.\n */\nol.events.Event = function(type) {\n\n  /**\n   * @type {boolean}\n   */\n  this.propagationStopped;\n\n  /**\n   * The event type.\n   * @type {string}\n   * @api\n   */\n  this.type = type;\n\n  /**\n   * The event target.\n   * @type {Object}\n   * @api\n   */\n  this.target = null;\n\n};\n\n\n/**\n * Stop event propagation.\n * @function\n * @override\n * @api\n */\nol.events.Event.prototype.preventDefault =\n\n  /**\n   * Stop event propagation.\n   * @function\n   * @override\n   * @api\n   */\n  ol.events.Event.prototype.stopPropagation = function() {\n    this.propagationStopped = true;\n  };\n\n\n/**\n * @param {Event|ol.events.Event} evt Event\n */\nol.events.Event.stopPropagation = function(evt) {\n  evt.stopPropagation();\n};\n\n\n/**\n * @param {Event|ol.events.Event} evt Event\n */\nol.events.Event.preventDefault = function(evt) {\n  evt.preventDefault();\n};\n\ngoog.provide('ol.events.EventTarget');\n\ngoog.require('ol');\ngoog.require('ol.Disposable');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\n\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * @see {@link https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget}\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n *    `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n *    There is no event target hierarchy. When a listener calls\n *    `stopPropagation` or `preventDefault` on an event object, it means that no\n *    more listeners after this one will be called. Same as when the listener\n *    returns false.\n *\n * @constructor\n * @extends {ol.Disposable}\n */\nol.events.EventTarget = function() {\n\n  ol.Disposable.call(this);\n\n  /**\n   * @private\n   * @type {!Object.<string, number>}\n   */\n  this.pendingRemovals_ = {};\n\n  /**\n   * @private\n   * @type {!Object.<string, number>}\n   */\n  this.dispatching_ = {};\n\n  /**\n   * @private\n   * @type {!Object.<string, Array.<ol.EventsListenerFunctionType>>}\n   */\n  this.listeners_ = {};\n\n};\nol.inherits(ol.events.EventTarget, ol.Disposable);\n\n\n/**\n * @param {string} type Type.\n * @param {ol.EventsListenerFunctionType} listener Listener.\n */\nol.events.EventTarget.prototype.addEventListener = function(type, listener) {\n  var listeners = this.listeners_[type];\n  if (!listeners) {\n    listeners = this.listeners_[type] = [];\n  }\n  if (listeners.indexOf(listener) === -1) {\n    listeners.push(listener);\n  }\n};\n\n\n/**\n * @param {{type: string,\n *     target: (EventTarget|ol.events.EventTarget|undefined)}|ol.events.Event|\n *     string} event Event or event type.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n *     event object or if any of the listeners returned false.\n */\nol.events.EventTarget.prototype.dispatchEvent = function(event) {\n  var evt = typeof event === 'string' ? new ol.events.Event(event) : event;\n  var type = evt.type;\n  evt.target = this;\n  var listeners = this.listeners_[type];\n  var propagate;\n  if (listeners) {\n    if (!(type in this.dispatching_)) {\n      this.dispatching_[type] = 0;\n      this.pendingRemovals_[type] = 0;\n    }\n    ++this.dispatching_[type];\n    for (var i = 0, ii = listeners.length; i < ii; ++i) {\n      if (listeners[i].call(this, evt) === false || evt.propagationStopped) {\n        propagate = false;\n        break;\n      }\n    }\n    --this.dispatching_[type];\n    if (this.dispatching_[type] === 0) {\n      var pendingRemovals = this.pendingRemovals_[type];\n      delete this.pendingRemovals_[type];\n      while (pendingRemovals--) {\n        this.removeEventListener(type, ol.nullFunction);\n      }\n      delete this.dispatching_[type];\n    }\n    return propagate;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.events.EventTarget.prototype.disposeInternal = function() {\n  ol.events.unlistenAll(this);\n};\n\n\n/**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array.<ol.EventsListenerFunctionType>} Listeners.\n */\nol.events.EventTarget.prototype.getListeners = function(type) {\n  return this.listeners_[type];\n};\n\n\n/**\n * @param {string=} opt_type Type. If not provided,\n *     `true` will be returned if this EventTarget has any listeners.\n * @return {boolean} Has listeners.\n */\nol.events.EventTarget.prototype.hasListener = function(opt_type) {\n  return opt_type ?\n    opt_type in this.listeners_ :\n    Object.keys(this.listeners_).length > 0;\n};\n\n\n/**\n * @param {string} type Type.\n * @param {ol.EventsListenerFunctionType} listener Listener.\n */\nol.events.EventTarget.prototype.removeEventListener = function(type, listener) {\n  var listeners = this.listeners_[type];\n  if (listeners) {\n    var index = listeners.indexOf(listener);\n    if (type in this.pendingRemovals_) {\n      // make listener a no-op, and remove later in #dispatchEvent()\n      listeners[index] = ol.nullFunction;\n      ++this.pendingRemovals_[type];\n    } else {\n      listeners.splice(index, 1);\n      if (listeners.length === 0) {\n        delete this.listeners_[type];\n      }\n    }\n  }\n};\n\ngoog.provide('ol.events.EventType');\n\n/**\n * @enum {string}\n * @const\n */\nol.events.EventType = {\n  /**\n   * Generic change event. Triggered when the revision counter is increased.\n   * @event ol.events.Event#change\n   * @api\n   */\n  CHANGE: 'change',\n\n  CLEAR: 'clear',\n  CLICK: 'click',\n  DBLCLICK: 'dblclick',\n  DRAGENTER: 'dragenter',\n  DRAGOVER: 'dragover',\n  DROP: 'drop',\n  ERROR: 'error',\n  KEYDOWN: 'keydown',\n  KEYPRESS: 'keypress',\n  LOAD: 'load',\n  MOUSEDOWN: 'mousedown',\n  MOUSEMOVE: 'mousemove',\n  MOUSEOUT: 'mouseout',\n  MOUSEUP: 'mouseup',\n  MOUSEWHEEL: 'mousewheel',\n  MSPOINTERDOWN: 'MSPointerDown',\n  RESIZE: 'resize',\n  TOUCHSTART: 'touchstart',\n  TOUCHMOVE: 'touchmove',\n  TOUCHEND: 'touchend',\n  WHEEL: 'wheel'\n};\n\ngoog.provide('ol.Observable');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.events.EventType');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link ol.Observable#changed}.\n *\n * @constructor\n * @extends {ol.events.EventTarget}\n * @fires ol.events.Event\n * @struct\n * @api\n */\nol.Observable = function() {\n\n  ol.events.EventTarget.call(this);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.revision_ = 0;\n\n};\nol.inherits(ol.Observable, ol.events.EventTarget);\n\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {ol.EventsKey|Array.<ol.EventsKey>} key The key returned by `on()`\n *     or `once()` (or an array of keys).\n * @api\n */\nol.Observable.unByKey = function(key) {\n  if (Array.isArray(key)) {\n    for (var i = 0, ii = key.length; i < ii; ++i) {\n      ol.events.unlistenByKey(key[i]);\n    }\n  } else {\n    ol.events.unlistenByKey(/** @type {ol.EventsKey} */ (key));\n  }\n};\n\n\n/**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\nol.Observable.prototype.changed = function() {\n  ++this.revision_;\n  this.dispatchEvent(ol.events.EventType.CHANGE);\n};\n\n\n/**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {{type: string,\n *     target: (EventTarget|ol.events.EventTarget|undefined)}|ol.events.Event|\n *     string} event Event object.\n * @function\n * @api\n */\nol.Observable.prototype.dispatchEvent;\n\n\n/**\n * Get the version number for this object.  Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\nol.Observable.prototype.getRevision = function() {\n  return this.revision_;\n};\n\n\n/**\n * Listen for a certain type of event.\n * @param {string|Array.<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @param {Object=} opt_this The object to use as `this` in `listener`.\n * @return {ol.EventsKey|Array.<ol.EventsKey>} Unique key for the listener. If\n *     called with an array of event types as the first argument, the return\n *     will be an array of keys.\n * @api\n */\nol.Observable.prototype.on = function(type, listener, opt_this) {\n  if (Array.isArray(type)) {\n    var len = type.length;\n    var keys = new Array(len);\n    for (var i = 0; i < len; ++i) {\n      keys[i] = ol.events.listen(this, type[i], listener, opt_this);\n    }\n    return keys;\n  } else {\n    return ol.events.listen(\n        this, /** @type {string} */ (type), listener, opt_this);\n  }\n};\n\n\n/**\n * Listen once for a certain type of event.\n * @param {string|Array.<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @param {Object=} opt_this The object to use as `this` in `listener`.\n * @return {ol.EventsKey|Array.<ol.EventsKey>} Unique key for the listener. If\n *     called with an array of event types as the first argument, the return\n *     will be an array of keys.\n * @api\n */\nol.Observable.prototype.once = function(type, listener, opt_this) {\n  if (Array.isArray(type)) {\n    var len = type.length;\n    var keys = new Array(len);\n    for (var i = 0; i < len; ++i) {\n      keys[i] = ol.events.listenOnce(this, type[i], listener, opt_this);\n    }\n    return keys;\n  } else {\n    return ol.events.listenOnce(\n        this, /** @type {string} */ (type), listener, opt_this);\n  }\n};\n\n\n/**\n * Unlisten for a certain type of event.\n * @param {string|Array.<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @param {Object=} opt_this The object which was used as `this` by the\n * `listener`.\n * @api\n */\nol.Observable.prototype.un = function(type, listener, opt_this) {\n  if (Array.isArray(type)) {\n    for (var i = 0, ii = type.length; i < ii; ++i) {\n      ol.events.unlisten(this, type[i], listener, opt_this);\n    }\n    return;\n  } else {\n    ol.events.unlisten(this, /** @type {string} */ (type), listener, opt_this);\n  }\n};\n\ngoog.provide('ol.Object');\n\ngoog.require('ol');\ngoog.require('ol.ObjectEventType');\ngoog.require('ol.Observable');\ngoog.require('ol.events.Event');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link ol.Observable} with observable properties, where each\n * property is observable as well as the object as a whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link ol.Map} has a `target` property, accessed with `getTarget()`  and\n * changed with `setTarget()`. Not all properties are however settable. There\n * are also general-purpose accessors `get()` and `set()`. For example,\n * `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link ol.View} has a `center`\n * property, so `view.on('change:center', function(evt) {...});` would call the\n * function whenever the value of the center property changes. Within the\n * function, `evt.target` would be the view, so `evt.target.getCenter()` would\n * return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link ol.Object#getProperties object.getProperties()}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @constructor\n * @extends {ol.Observable}\n * @param {Object.<string, *>=} opt_values An object with key-value pairs.\n * @fires ol.Object.Event\n * @api\n */\nol.Object = function(opt_values) {\n  ol.Observable.call(this);\n\n  // Call ol.getUid to ensure that the order of objects' ids is the same as\n  // the order in which they were created.  This also helps to ensure that\n  // object properties are always added in the same order, which helps many\n  // JavaScript engines generate faster code.\n  ol.getUid(this);\n\n  /**\n   * @private\n   * @type {!Object.<string, *>}\n   */\n  this.values_ = {};\n\n  if (opt_values !== undefined) {\n    this.setProperties(opt_values);\n  }\n};\nol.inherits(ol.Object, ol.Observable);\n\n\n/**\n * @private\n * @type {Object.<string, string>}\n */\nol.Object.changeEventTypeCache_ = {};\n\n\n/**\n * @param {string} key Key name.\n * @return {string} Change name.\n */\nol.Object.getChangeEventType = function(key) {\n  return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ?\n    ol.Object.changeEventTypeCache_[key] :\n    (ol.Object.changeEventTypeCache_[key] = 'change:' + key);\n};\n\n\n/**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\nol.Object.prototype.get = function(key) {\n  var value;\n  if (this.values_.hasOwnProperty(key)) {\n    value = this.values_[key];\n  }\n  return value;\n};\n\n\n/**\n * Get a list of object property names.\n * @return {Array.<string>} List of property names.\n * @api\n */\nol.Object.prototype.getKeys = function() {\n  return Object.keys(this.values_);\n};\n\n\n/**\n * Get an object of all property names and values.\n * @return {Object.<string, *>} Object.\n * @api\n */\nol.Object.prototype.getProperties = function() {\n  return ol.obj.assign({}, this.values_);\n};\n\n\n/**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\nol.Object.prototype.notify = function(key, oldValue) {\n  var eventType;\n  eventType = ol.Object.getChangeEventType(key);\n  this.dispatchEvent(new ol.Object.Event(eventType, key, oldValue));\n  eventType = ol.ObjectEventType.PROPERTYCHANGE;\n  this.dispatchEvent(new ol.Object.Event(eventType, key, oldValue));\n};\n\n\n/**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\nol.Object.prototype.set = function(key, value, opt_silent) {\n  if (opt_silent) {\n    this.values_[key] = value;\n  } else {\n    var oldValue = this.values_[key];\n    this.values_[key] = value;\n    if (oldValue !== value) {\n      this.notify(key, oldValue);\n    }\n  }\n};\n\n\n/**\n * Sets a collection of key-value pairs.  Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object.<string, *>} values Values.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\nol.Object.prototype.setProperties = function(values, opt_silent) {\n  var key;\n  for (key in values) {\n    this.set(key, values[key], opt_silent);\n  }\n};\n\n\n/**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean=} opt_silent Unset without triggering an event.\n * @api\n */\nol.Object.prototype.unset = function(key, opt_silent) {\n  if (key in this.values_) {\n    var oldValue = this.values_[key];\n    delete this.values_[key];\n    if (!opt_silent) {\n      this.notify(key, oldValue);\n    }\n  }\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.Object} instances are instances of this type.\n *\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n * @extends {ol.events.Event}\n * @implements {oli.Object.Event}\n * @constructor\n */\nol.Object.Event = function(type, key, oldValue) {\n  ol.events.Event.call(this, type);\n\n  /**\n   * The name of the property whose value is changing.\n   * @type {string}\n   * @api\n   */\n  this.key = key;\n\n  /**\n   * The old value. To get the new value use `e.target.get(e.key)` where\n   * `e` is the event object.\n   * @type {*}\n   * @api\n   */\n  this.oldValue = oldValue;\n\n};\nol.inherits(ol.Object.Event, ol.events.Event);\n\n/**\n * An implementation of Google Maps' MVCArray.\n * @see https://developers.google.com/maps/documentation/javascript/reference\n */\n\ngoog.provide('ol.Collection');\n\ngoog.require('ol');\ngoog.require('ol.AssertionError');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.Object');\ngoog.require('ol.events.Event');\n\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @constructor\n * @extends {ol.Object}\n * @fires ol.Collection.Event\n * @param {Array.<T>=} opt_array Array.\n * @param {olx.CollectionOptions=} opt_options Collection options.\n * @template T\n * @api\n */\nol.Collection = function(opt_array, opt_options) {\n\n  ol.Object.call(this);\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.unique_ = !!options.unique;\n\n  /**\n   * @private\n   * @type {!Array.<T>}\n   */\n  this.array_ = opt_array ? opt_array : [];\n\n  if (this.unique_) {\n    for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n      this.assertUnique_(this.array_[i], i);\n    }\n  }\n\n  this.updateLength_();\n\n};\nol.inherits(ol.Collection, ol.Object);\n\n\n/**\n * Remove all elements from the collection.\n * @api\n */\nol.Collection.prototype.clear = function() {\n  while (this.getLength() > 0) {\n    this.pop();\n  }\n};\n\n\n/**\n * Add elements to the collection.  This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array.<T>} arr Array.\n * @return {ol.Collection.<T>} This collection.\n * @api\n */\nol.Collection.prototype.extend = function(arr) {\n  var i, ii;\n  for (i = 0, ii = arr.length; i < ii; ++i) {\n    this.push(arr[i]);\n  }\n  return this;\n};\n\n\n/**\n * Iterate over each element, calling the provided callback.\n * @param {function(this: S, T, number, Array.<T>): *} f The function to call\n *     for every element. This function takes 3 arguments (the element, the\n *     index and the array). The return value is ignored.\n * @param {S=} opt_this The object to use as `this` in `f`.\n * @template S\n * @api\n */\nol.Collection.prototype.forEach = function(f, opt_this) {\n  var fn = (opt_this) ? f.bind(opt_this) : f;\n  var array = this.array_;\n  for (var i = 0, ii = array.length; i < ii; ++i) {\n    fn(array[i], i, array);\n  }\n};\n\n\n/**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array.<T>} Array.\n * @api\n */\nol.Collection.prototype.getArray = function() {\n  return this.array_;\n};\n\n\n/**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\nol.Collection.prototype.item = function(index) {\n  return this.array_[index];\n};\n\n\n/**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\nol.Collection.prototype.getLength = function() {\n  return /** @type {number} */ (this.get(ol.Collection.Property_.LENGTH));\n};\n\n\n/**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\nol.Collection.prototype.insertAt = function(index, elem) {\n  if (this.unique_) {\n    this.assertUnique_(elem);\n  }\n  this.array_.splice(index, 0, elem);\n  this.updateLength_();\n  this.dispatchEvent(\n      new ol.Collection.Event(ol.CollectionEventType.ADD, elem));\n};\n\n\n/**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\nol.Collection.prototype.pop = function() {\n  return this.removeAt(this.getLength() - 1);\n};\n\n\n/**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\nol.Collection.prototype.push = function(elem) {\n  if (this.unique_) {\n    this.assertUnique_(elem);\n  }\n  var n = this.getLength();\n  this.insertAt(n, elem);\n  return this.getLength();\n};\n\n\n/**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\nol.Collection.prototype.remove = function(elem) {\n  var arr = this.array_;\n  var i, ii;\n  for (i = 0, ii = arr.length; i < ii; ++i) {\n    if (arr[i] === elem) {\n      return this.removeAt(i);\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\nol.Collection.prototype.removeAt = function(index) {\n  var prev = this.array_[index];\n  this.array_.splice(index, 1);\n  this.updateLength_();\n  this.dispatchEvent(\n      new ol.Collection.Event(ol.CollectionEventType.REMOVE, prev));\n  return prev;\n};\n\n\n/**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\nol.Collection.prototype.setAt = function(index, elem) {\n  var n = this.getLength();\n  if (index < n) {\n    if (this.unique_) {\n      this.assertUnique_(elem, index);\n    }\n    var prev = this.array_[index];\n    this.array_[index] = elem;\n    this.dispatchEvent(\n        new ol.Collection.Event(ol.CollectionEventType.REMOVE, prev));\n    this.dispatchEvent(\n        new ol.Collection.Event(ol.CollectionEventType.ADD, elem));\n  } else {\n    var j;\n    for (j = n; j < index; ++j) {\n      this.insertAt(j, undefined);\n    }\n    this.insertAt(index, elem);\n  }\n};\n\n\n/**\n * @private\n */\nol.Collection.prototype.updateLength_ = function() {\n  this.set(ol.Collection.Property_.LENGTH, this.array_.length);\n};\n\n\n/**\n * @private\n * @param {T} elem Element.\n * @param {number=} opt_except Optional index to ignore.\n */\nol.Collection.prototype.assertUnique_ = function(elem, opt_except) {\n  for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n    if (this.array_[i] === elem && i !== opt_except) {\n      throw new ol.AssertionError(58);\n    }\n  }\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.Collection.Property_ = {\n  LENGTH: 'length'\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.Collection} instances are instances of this\n * type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.Collection.Event}\n * @param {ol.CollectionEventType} type Type.\n * @param {*=} opt_element Element.\n */\nol.Collection.Event = function(type, opt_element) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The element that is added to or removed from the collection.\n   * @type {*}\n   * @api\n   */\n  this.element = opt_element;\n\n};\nol.inherits(ol.Collection.Event, ol.events.Event);\n\ngoog.provide('ol.MapEvent');\n\ngoog.require('ol');\ngoog.require('ol.events.Event');\n\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link ol.Map} for which events trigger a map event.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.MapEvent}\n * @param {string} type Event type.\n * @param {ol.PluggableMap} map Map.\n * @param {?olx.FrameState=} opt_frameState Frame state.\n */\nol.MapEvent = function(type, map, opt_frameState) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The map where the event occurred.\n   * @type {ol.PluggableMap}\n   * @api\n   */\n  this.map = map;\n\n  /**\n   * The frame state at the time of the event.\n   * @type {?olx.FrameState}\n   * @api\n   */\n  this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n\n};\nol.inherits(ol.MapEvent, ol.events.Event);\n\ngoog.provide('ol.MapBrowserEvent');\n\ngoog.require('ol');\ngoog.require('ol.MapEvent');\n\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link ol.Map} for which events trigger a map browser event.\n *\n * @constructor\n * @extends {ol.MapEvent}\n * @implements {oli.MapBrowserEvent}\n * @param {string} type Event type.\n * @param {ol.PluggableMap} map Map.\n * @param {Event} browserEvent Browser event.\n * @param {boolean=} opt_dragging Is the map currently being dragged?\n * @param {?olx.FrameState=} opt_frameState Frame state.\n */\nol.MapBrowserEvent = function(type, map, browserEvent, opt_dragging,\n    opt_frameState) {\n\n  ol.MapEvent.call(this, type, map, opt_frameState);\n\n  /**\n   * The original browser event.\n   * @const\n   * @type {Event}\n   * @api\n   */\n  this.originalEvent = browserEvent;\n\n  /**\n   * The map pixel relative to the viewport corresponding to the original browser event.\n   * @type {ol.Pixel}\n   * @api\n   */\n  this.pixel = map.getEventPixel(browserEvent);\n\n  /**\n   * The coordinate in view projection corresponding to the original browser event.\n   * @type {ol.Coordinate}\n   * @api\n   */\n  this.coordinate = map.getCoordinateFromPixel(this.pixel);\n\n  /**\n   * Indicates if the map is currently being dragged. Only set for\n   * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n   *\n   * @type {boolean}\n   * @api\n   */\n  this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n\n};\nol.inherits(ol.MapBrowserEvent, ol.MapEvent);\n\n\n/**\n * Prevents the default browser action.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault\n * @override\n * @api\n */\nol.MapBrowserEvent.prototype.preventDefault = function() {\n  ol.MapEvent.prototype.preventDefault.call(this);\n  this.originalEvent.preventDefault();\n};\n\n\n/**\n * Prevents further propagation of the current event.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation\n * @override\n * @api\n */\nol.MapBrowserEvent.prototype.stopPropagation = function() {\n  ol.MapEvent.prototype.stopPropagation.call(this);\n  this.originalEvent.stopPropagation();\n};\n\ngoog.provide('ol.webgl');\n\n/**\n * Constants taken from goog.webgl\n */\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.ONE = 1;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.SRC_ALPHA = 0x0302;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.COLOR_ATTACHMENT0 = 0x8CE0;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.COLOR_BUFFER_BIT = 0x00004000;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TRIANGLES = 0x0004;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TRIANGLE_STRIP = 0x0005;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.ONE_MINUS_SRC_ALPHA = 0x0303;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.ARRAY_BUFFER = 0x8892;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.ELEMENT_ARRAY_BUFFER = 0x8893;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.STREAM_DRAW = 0x88E0;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.STATIC_DRAW = 0x88E4;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.DYNAMIC_DRAW = 0x88E8;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.CULL_FACE = 0x0B44;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.BLEND = 0x0BE2;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.STENCIL_TEST = 0x0B90;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.DEPTH_TEST = 0x0B71;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.SCISSOR_TEST = 0x0C11;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.UNSIGNED_BYTE = 0x1401;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.UNSIGNED_SHORT = 0x1403;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.UNSIGNED_INT = 0x1405;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.FLOAT = 0x1406;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.RGBA = 0x1908;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.FRAGMENT_SHADER = 0x8B30;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.VERTEX_SHADER = 0x8B31;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.LINK_STATUS = 0x8B82;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.LINEAR = 0x2601;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE_MAG_FILTER = 0x2800;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE_MIN_FILTER = 0x2801;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE_WRAP_S = 0x2802;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE_WRAP_T = 0x2803;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE_2D = 0x0DE1;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.TEXTURE0 = 0x84C0;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.CLAMP_TO_EDGE = 0x812F;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.COMPILE_STATUS = 0x8B81;\n\n\n/**\n * @const\n * @type {number}\n */\nol.webgl.FRAMEBUFFER = 0x8D40;\n\n\n/** end of goog.webgl constants\n */\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.webgl.CONTEXT_IDS_ = [\n  'experimental-webgl',\n  'webgl',\n  'webkit-3d',\n  'moz-webgl'\n];\n\n\n/**\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Object=} opt_attributes Attributes.\n * @return {WebGLRenderingContext} WebGL rendering context.\n */\nol.webgl.getContext = function(canvas, opt_attributes) {\n  var context, i, ii = ol.webgl.CONTEXT_IDS_.length;\n  for (i = 0; i < ii; ++i) {\n    try {\n      context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes);\n      if (context) {\n        return /** @type {!WebGLRenderingContext} */ (context);\n      }\n    } catch (e) {\n      // pass\n    }\n  }\n  return null;\n};\n\ngoog.provide('ol.has');\n\ngoog.require('ol');\ngoog.require('ol.webgl');\n\nvar ua = typeof navigator !== 'undefined' ?\n  navigator.userAgent.toLowerCase() : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nol.has.FIREFOX = ua.indexOf('firefox') !== -1;\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nol.has.SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nol.has.WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nol.has.MAC = ua.indexOf('macintosh') !== -1;\n\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nol.has.DEVICE_PIXEL_RATIO = window.devicePixelRatio || 1;\n\n\n/**\n * True if the browser's Canvas implementation implements {get,set}LineDash.\n * @type {boolean}\n */\nol.has.CANVAS_LINE_DASH = false;\n\n\n/**\n * True if both the library and browser support Canvas.  Always `false`\n * if `ol.ENABLE_CANVAS` is set to `false` at compile time.\n * @const\n * @type {boolean}\n * @api\n */\nol.has.CANVAS = ol.ENABLE_CANVAS && (\n  /**\n   * @return {boolean} Canvas supported.\n   */\n  function() {\n    if (!('HTMLCanvasElement' in window)) {\n      return false;\n    }\n    try {\n      var context = document.createElement('CANVAS').getContext('2d');\n      if (!context) {\n        return false;\n      } else {\n        if (context.setLineDash !== undefined) {\n          ol.has.CANVAS_LINE_DASH = true;\n        }\n        return true;\n      }\n    } catch (e) {\n      return false;\n    }\n  })();\n\n\n/**\n * Indicates if DeviceOrientation is supported in the user's browser.\n * @const\n * @type {boolean}\n * @api\n */\nol.has.DEVICE_ORIENTATION = 'DeviceOrientationEvent' in window;\n\n\n/**\n * Is HTML5 geolocation supported in the current browser?\n * @const\n * @type {boolean}\n * @api\n */\nol.has.GEOLOCATION = 'geolocation' in navigator;\n\n\n/**\n * True if browser supports touch events.\n * @const\n * @type {boolean}\n * @api\n */\nol.has.TOUCH = ol.ASSUME_TOUCH || 'ontouchstart' in window;\n\n\n/**\n * True if browser supports pointer events.\n * @const\n * @type {boolean}\n */\nol.has.POINTER = 'PointerEvent' in window;\n\n\n/**\n * True if browser supports ms pointer events (IE 10).\n * @const\n * @type {boolean}\n */\nol.has.MSPOINTER = !!(navigator.msPointerEnabled);\n\n\n/**\n * True if both OpenLayers and browser support WebGL.  Always `false`\n * if `ol.ENABLE_WEBGL` is set to `false` at compile time.\n * @const\n * @type {boolean}\n * @api\n */\nol.has.WEBGL;\n\n\n(function() {\n  if (ol.ENABLE_WEBGL) {\n    var hasWebGL = false;\n    var textureSize;\n    var /** @type {Array.<string>} */ extensions = [];\n\n    if ('WebGLRenderingContext' in window) {\n      try {\n        var canvas = /** @type {HTMLCanvasElement} */\n            (document.createElement('CANVAS'));\n        var gl = ol.webgl.getContext(canvas, {\n          failIfMajorPerformanceCaveat: true\n        });\n        if (gl) {\n          hasWebGL = true;\n          textureSize = /** @type {number} */\n            (gl.getParameter(gl.MAX_TEXTURE_SIZE));\n          extensions = gl.getSupportedExtensions();\n        }\n      } catch (e) {\n        // pass\n      }\n    }\n    ol.has.WEBGL = hasWebGL;\n    ol.WEBGL_EXTENSIONS = extensions;\n    ol.WEBGL_MAX_TEXTURE_SIZE = textureSize;\n  }\n})();\n\ngoog.provide('ol.MapBrowserEventType');\n\ngoog.require('ol.events.EventType');\n\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nol.MapBrowserEventType = {\n\n  /**\n   * A true single click with no dragging and no double click. Note that this\n   * event is delayed by 250 ms to ensure that it is not a double click.\n   * @event ol.MapBrowserEvent#singleclick\n   * @api\n   */\n  SINGLECLICK: 'singleclick',\n\n  /**\n   * A click with no dragging. A double click will fire two of this.\n   * @event ol.MapBrowserEvent#click\n   * @api\n   */\n  CLICK: ol.events.EventType.CLICK,\n\n  /**\n   * A true double click, with no dragging.\n   * @event ol.MapBrowserEvent#dblclick\n   * @api\n   */\n  DBLCLICK: ol.events.EventType.DBLCLICK,\n\n  /**\n   * Triggered when a pointer is dragged.\n   * @event ol.MapBrowserEvent#pointerdrag\n   * @api\n   */\n  POINTERDRAG: 'pointerdrag',\n\n  /**\n   * Triggered when a pointer is moved. Note that on touch devices this is\n   * triggered when the map is panned, so is not the same as mousemove.\n   * @event ol.MapBrowserEvent#pointermove\n   * @api\n   */\n  POINTERMOVE: 'pointermove',\n\n  POINTERDOWN: 'pointerdown',\n  POINTERUP: 'pointerup',\n  POINTEROVER: 'pointerover',\n  POINTEROUT: 'pointerout',\n  POINTERENTER: 'pointerenter',\n  POINTERLEAVE: 'pointerleave',\n  POINTERCANCEL: 'pointercancel'\n};\n\ngoog.provide('ol.MapBrowserPointerEvent');\n\ngoog.require('ol');\ngoog.require('ol.MapBrowserEvent');\n\n\n/**\n * @constructor\n * @extends {ol.MapBrowserEvent}\n * @param {string} type Event type.\n * @param {ol.PluggableMap} map Map.\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @param {boolean=} opt_dragging Is the map currently being dragged?\n * @param {?olx.FrameState=} opt_frameState Frame state.\n */\nol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_dragging,\n    opt_frameState) {\n\n  ol.MapBrowserEvent.call(this, type, map, pointerEvent.originalEvent, opt_dragging,\n      opt_frameState);\n\n  /**\n   * @const\n   * @type {ol.pointer.PointerEvent}\n   */\n  this.pointerEvent = pointerEvent;\n\n};\nol.inherits(ol.MapBrowserPointerEvent, ol.MapBrowserEvent);\n\ngoog.provide('ol.pointer.EventType');\n\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nol.pointer.EventType = {\n  POINTERMOVE: 'pointermove',\n  POINTERDOWN: 'pointerdown',\n  POINTERUP: 'pointerup',\n  POINTEROVER: 'pointerover',\n  POINTEROUT: 'pointerout',\n  POINTERENTER: 'pointerenter',\n  POINTERLEAVE: 'pointerleave',\n  POINTERCANCEL: 'pointercancel'\n};\n\ngoog.provide('ol.pointer.EventSource');\n\n\n/**\n * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.\n * @param {!Object.<string, function(Event)>} mapping Event\n *     mapping.\n * @constructor\n */\nol.pointer.EventSource = function(dispatcher, mapping) {\n  /**\n   * @type {ol.pointer.PointerEventHandler}\n   */\n  this.dispatcher = dispatcher;\n\n  /**\n   * @private\n   * @const\n   * @type {!Object.<string, function(Event)>}\n   */\n  this.mapping_ = mapping;\n};\n\n\n/**\n * List of events supported by this source.\n * @return {Array.<string>} Event names\n */\nol.pointer.EventSource.prototype.getEvents = function() {\n  return Object.keys(this.mapping_);\n};\n\n\n/**\n * Returns the handler that should handle a given event type.\n * @param {string} eventType The event type.\n * @return {function(Event)} Handler\n */\nol.pointer.EventSource.prototype.getHandlerForEvent = function(eventType) {\n  return this.mapping_[eventType];\n};\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.MouseSource');\n\ngoog.require('ol');\ngoog.require('ol.pointer.EventSource');\n\n\n/**\n * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.\n * @constructor\n * @extends {ol.pointer.EventSource}\n */\nol.pointer.MouseSource = function(dispatcher) {\n  var mapping = {\n    'mousedown': this.mousedown,\n    'mousemove': this.mousemove,\n    'mouseup': this.mouseup,\n    'mouseover': this.mouseover,\n    'mouseout': this.mouseout\n  };\n  ol.pointer.EventSource.call(this, dispatcher, mapping);\n\n  /**\n   * @const\n   * @type {!Object.<string, Event|Object>}\n   */\n  this.pointerMap = dispatcher.pointerMap;\n\n  /**\n   * @const\n   * @type {Array.<ol.Pixel>}\n   */\n  this.lastTouches = [];\n};\nol.inherits(ol.pointer.MouseSource, ol.pointer.EventSource);\n\n\n/**\n * @const\n * @type {number}\n */\nol.pointer.MouseSource.POINTER_ID = 1;\n\n\n/**\n * @const\n * @type {string}\n */\nol.pointer.MouseSource.POINTER_TYPE = 'mouse';\n\n\n/**\n * Radius around touchend that swallows mouse events.\n *\n * @const\n * @type {number}\n */\nol.pointer.MouseSource.DEDUP_DIST = 25;\n\n\n/**\n * Detect if a mouse event was simulated from a touch by\n * checking if previously there was a touch event at the\n * same position.\n *\n * FIXME - Known problem with the native Android browser on\n * Samsung GT-I9100 (Android 4.1.2):\n * In case the page is scrolled, this function does not work\n * correctly when a canvas is used (WebGL or canvas renderer).\n * Mouse listeners on canvas elements (for this browser), create\n * two mouse events: One 'good' and one 'bad' one (on other browsers or\n * when a div is used, there is only one event). For the 'bad' one,\n * clientX/clientY and also pageX/pageY are wrong when the page\n * is scrolled. Because of that, this function can not detect if\n * the events were simulated from a touch event. As result, a\n * pointer event at a wrong position is dispatched, which confuses\n * the map interactions.\n * It is unclear, how one can get the correct position for the event\n * or detect that the positions are invalid.\n *\n * @private\n * @param {Event} inEvent The in event.\n * @return {boolean} True, if the event was generated by a touch.\n */\nol.pointer.MouseSource.prototype.isEventSimulatedFromTouch_ = function(inEvent) {\n  var lts = this.lastTouches;\n  var x = inEvent.clientX, y = inEvent.clientY;\n  for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n    // simulated mouse events will be swallowed near a primary touchend\n    var dx = Math.abs(x - t[0]), dy = Math.abs(y - t[1]);\n    if (dx <= ol.pointer.MouseSource.DEDUP_DIST &&\n        dy <= ol.pointer.MouseSource.DEDUP_DIST) {\n      return true;\n    }\n  }\n  return false;\n};\n\n\n/**\n * Creates a copy of the original event that will be used\n * for the fake pointer event.\n *\n * @param {Event} inEvent The in event.\n * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.\n * @return {Object} The copied event.\n */\nol.pointer.MouseSource.prepareEvent = function(inEvent, dispatcher) {\n  var e = dispatcher.cloneEvent(inEvent, inEvent);\n\n  // forward mouse preventDefault\n  var pd = e.preventDefault;\n  e.preventDefault = function() {\n    inEvent.preventDefault();\n    pd();\n  };\n\n  e.pointerId = ol.pointer.MouseSource.POINTER_ID;\n  e.isPrimary = true;\n  e.pointerType = ol.pointer.MouseSource.POINTER_TYPE;\n\n  return e;\n};\n\n\n/**\n * Handler for `mousedown`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.mousedown = function(inEvent) {\n  if (!this.isEventSimulatedFromTouch_(inEvent)) {\n    // TODO(dfreedman) workaround for some elements not sending mouseup\n    // http://crbug/149091\n    if (ol.pointer.MouseSource.POINTER_ID.toString() in this.pointerMap) {\n      this.cancel(inEvent);\n    }\n    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n    this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()] = inEvent;\n    this.dispatcher.down(e, inEvent);\n  }\n};\n\n\n/**\n * Handler for `mousemove`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.mousemove = function(inEvent) {\n  if (!this.isEventSimulatedFromTouch_(inEvent)) {\n    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n    this.dispatcher.move(e, inEvent);\n  }\n};\n\n\n/**\n * Handler for `mouseup`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.mouseup = function(inEvent) {\n  if (!this.isEventSimulatedFromTouch_(inEvent)) {\n    var p = this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()];\n\n    if (p && p.button === inEvent.button) {\n      var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n      this.dispatcher.up(e, inEvent);\n      this.cleanupMouse();\n    }\n  }\n};\n\n\n/**\n * Handler for `mouseover`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.mouseover = function(inEvent) {\n  if (!this.isEventSimulatedFromTouch_(inEvent)) {\n    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n    this.dispatcher.enterOver(e, inEvent);\n  }\n};\n\n\n/**\n * Handler for `mouseout`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.mouseout = function(inEvent) {\n  if (!this.isEventSimulatedFromTouch_(inEvent)) {\n    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n    this.dispatcher.leaveOut(e, inEvent);\n  }\n};\n\n\n/**\n * Dispatches a `pointercancel` event.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MouseSource.prototype.cancel = function(inEvent) {\n  var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);\n  this.dispatcher.cancel(e, inEvent);\n  this.cleanupMouse();\n};\n\n\n/**\n * Remove the mouse from the list of active pointers.\n */\nol.pointer.MouseSource.prototype.cleanupMouse = function() {\n  delete this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()];\n};\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.MsSource');\n\ngoog.require('ol');\ngoog.require('ol.pointer.EventSource');\n\n\n/**\n * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.\n * @constructor\n * @extends {ol.pointer.EventSource}\n */\nol.pointer.MsSource = function(dispatcher) {\n  var mapping = {\n    'MSPointerDown': this.msPointerDown,\n    'MSPointerMove': this.msPointerMove,\n    'MSPointerUp': this.msPointerUp,\n    'MSPointerOut': this.msPointerOut,\n    'MSPointerOver': this.msPointerOver,\n    'MSPointerCancel': this.msPointerCancel,\n    'MSGotPointerCapture': this.msGotPointerCapture,\n    'MSLostPointerCapture': this.msLostPointerCapture\n  };\n  ol.pointer.EventSource.call(this, dispatcher, mapping);\n\n  /**\n   * @const\n   * @type {!Object.<string, Event|Object>}\n   */\n  this.pointerMap = dispatcher.pointerMap;\n\n  /**\n   * @const\n   * @type {Array.<string>}\n   */\n  this.POINTER_TYPES = [\n    '',\n    'unavailable',\n    'touch',\n    'pen',\n    'mouse'\n  ];\n};\nol.inherits(ol.pointer.MsSource, ol.pointer.EventSource);\n\n\n/**\n * Creates a copy of the original event that will be used\n * for the fake pointer event.\n *\n * @private\n * @param {Event} inEvent The in event.\n * @return {Object} The copied event.\n */\nol.pointer.MsSource.prototype.prepareEvent_ = function(inEvent) {\n  var e = inEvent;\n  if (typeof inEvent.pointerType === 'number') {\n    e = this.dispatcher.cloneEvent(inEvent, inEvent);\n    e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n  }\n\n  return e;\n};\n\n\n/**\n * Remove this pointer from the list of active pointers.\n * @param {number} pointerId Pointer identifier.\n */\nol.pointer.MsSource.prototype.cleanup = function(pointerId) {\n  delete this.pointerMap[pointerId.toString()];\n};\n\n\n/**\n * Handler for `msPointerDown`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerDown = function(inEvent) {\n  this.pointerMap[inEvent.pointerId.toString()] = inEvent;\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.down(e, inEvent);\n};\n\n\n/**\n * Handler for `msPointerMove`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerMove = function(inEvent) {\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.move(e, inEvent);\n};\n\n\n/**\n * Handler for `msPointerUp`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerUp = function(inEvent) {\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.up(e, inEvent);\n  this.cleanup(inEvent.pointerId);\n};\n\n\n/**\n * Handler for `msPointerOut`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerOut = function(inEvent) {\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.leaveOut(e, inEvent);\n};\n\n\n/**\n * Handler for `msPointerOver`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerOver = function(inEvent) {\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.enterOver(e, inEvent);\n};\n\n\n/**\n * Handler for `msPointerCancel`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msPointerCancel = function(inEvent) {\n  var e = this.prepareEvent_(inEvent);\n  this.dispatcher.cancel(e, inEvent);\n  this.cleanup(inEvent.pointerId);\n};\n\n\n/**\n * Handler for `msLostPointerCapture`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msLostPointerCapture = function(inEvent) {\n  var e = this.dispatcher.makeEvent('lostpointercapture',\n      inEvent, inEvent);\n  this.dispatcher.dispatchEvent(e);\n};\n\n\n/**\n * Handler for `msGotPointerCapture`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.MsSource.prototype.msGotPointerCapture = function(inEvent) {\n  var e = this.dispatcher.makeEvent('gotpointercapture',\n      inEvent, inEvent);\n  this.dispatcher.dispatchEvent(e);\n};\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.NativeSource');\n\ngoog.require('ol');\ngoog.require('ol.pointer.EventSource');\n\n\n/**\n * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.\n * @constructor\n * @extends {ol.pointer.EventSource}\n */\nol.pointer.NativeSource = function(dispatcher) {\n  var mapping = {\n    'pointerdown': this.pointerDown,\n    'pointermove': this.pointerMove,\n    'pointerup': this.pointerUp,\n    'pointerout': this.pointerOut,\n    'pointerover': this.pointerOver,\n    'pointercancel': this.pointerCancel,\n    'gotpointercapture': this.gotPointerCapture,\n    'lostpointercapture': this.lostPointerCapture\n  };\n  ol.pointer.EventSource.call(this, dispatcher, mapping);\n};\nol.inherits(ol.pointer.NativeSource, ol.pointer.EventSource);\n\n\n/**\n * Handler for `pointerdown`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerDown = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `pointermove`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerMove = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `pointerup`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerUp = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `pointerout`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerOut = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `pointerover`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerOver = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `pointercancel`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.pointerCancel = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `lostpointercapture`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.lostPointerCapture = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n\n/**\n * Handler for `gotpointercapture`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.NativeSource.prototype.gotPointerCapture = function(inEvent) {\n  this.dispatcher.fireNativeEvent(inEvent);\n};\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.PointerEvent');\n\n\ngoog.require('ol');\ngoog.require('ol.events.Event');\n\n\n/**\n * A class for pointer events.\n *\n * This class is used as an abstraction for mouse events,\n * touch events and even native pointer events.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @param {string} type The type of the event to create.\n * @param {Event} originalEvent The event.\n * @param {Object.<string, ?>=} opt_eventDict An optional dictionary of\n *    initial event properties.\n */\nol.pointer.PointerEvent = function(type, originalEvent, opt_eventDict) {\n  ol.events.Event.call(this, type);\n\n  /**\n   * @const\n   * @type {Event}\n   */\n  this.originalEvent = originalEvent;\n\n  var eventDict = opt_eventDict ? opt_eventDict : {};\n\n  /**\n   * @type {number}\n   */\n  this.buttons = this.getButtons_(eventDict);\n\n  /**\n   * @type {number}\n   */\n  this.pressure = this.getPressure_(eventDict, this.buttons);\n\n  // MouseEvent related properties\n\n  /**\n   * @type {boolean}\n   */\n  this.bubbles = 'bubbles' in eventDict ? eventDict['bubbles'] : false;\n\n  /**\n   * @type {boolean}\n   */\n  this.cancelable = 'cancelable' in eventDict ? eventDict['cancelable'] : false;\n\n  /**\n   * @type {Object}\n   */\n  this.view = 'view' in eventDict ? eventDict['view'] : null;\n\n  /**\n   * @type {number}\n   */\n  this.detail = 'detail' in eventDict ? eventDict['detail'] : null;\n\n  /**\n   * @type {number}\n   */\n  this.screenX = 'screenX' in eventDict ? eventDict['screenX'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.screenY = 'screenY' in eventDict ? eventDict['screenY'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.clientX = 'clientX' in eventDict ? eventDict['clientX'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.clientY = 'clientY' in eventDict ? eventDict['clientY'] : 0;\n\n  /**\n   * @type {boolean}\n   */\n  this.ctrlKey = 'ctrlKey' in eventDict ? eventDict['ctrlKey'] : false;\n\n  /**\n   * @type {boolean}\n   */\n  this.altKey = 'altKey' in eventDict ? eventDict['altKey'] : false;\n\n  /**\n   * @type {boolean}\n   */\n  this.shiftKey = 'shiftKey' in eventDict ? eventDict['shiftKey'] : false;\n\n  /**\n   * @type {boolean}\n   */\n  this.metaKey = 'metaKey' in eventDict ? eventDict['metaKey'] : false;\n\n  /**\n   * @type {number}\n   */\n  this.button = 'button' in eventDict ? eventDict['button'] : 0;\n\n  /**\n   * @type {Node}\n   */\n  this.relatedTarget = 'relatedTarget' in eventDict ?\n    eventDict['relatedTarget'] : null;\n\n  // PointerEvent related properties\n\n  /**\n   * @const\n   * @type {number}\n   */\n  this.pointerId = 'pointerId' in eventDict ? eventDict['pointerId'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.width = 'width' in eventDict ? eventDict['width'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.height = 'height' in eventDict ? eventDict['height'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.tiltX = 'tiltX' in eventDict ? eventDict['tiltX'] : 0;\n\n  /**\n   * @type {number}\n   */\n  this.tiltY = 'tiltY' in eventDict ? eventDict['tiltY'] : 0;\n\n  /**\n   * @type {string}\n   */\n  this.pointerType = 'pointerType' in eventDict ? eventDict['pointerType'] : '';\n\n  /**\n   * @type {number}\n   */\n  this.hwTimestamp = 'hwTimestamp' in eventDict ? eventDict['hwTimestamp'] : 0;\n\n  /**\n   * @type {boolean}\n   */\n  this.isPrimary = 'isPrimary' in eventDict ? eventDict['isPrimary'] : false;\n\n  // keep the semantics of preventDefault\n  if (originalEvent.preventDefault) {\n    this.preventDefault = function() {\n      originalEvent.preventDefault();\n    };\n  }\n};\nol.inherits(ol.pointer.PointerEvent, ol.events.Event);\n\n\n/**\n * @private\n * @param {Object.<string, ?>} eventDict The event dictionary.\n * @return {number} Button indicator.\n */\nol.pointer.PointerEvent.prototype.getButtons_ = function(eventDict) {\n  // According to the w3c spec,\n  // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-button\n  // MouseEvent.button == 0 can mean either no mouse button depressed, or the\n  // left mouse button depressed.\n  //\n  // As of now, the only way to distinguish between the two states of\n  // MouseEvent.button is by using the deprecated MouseEvent.which property, as\n  // this maps mouse buttons to positive integers > 0, and uses 0 to mean that\n  // no mouse button is held.\n  //\n  // MouseEvent.which is derived from MouseEvent.button at MouseEvent creation,\n  // but initMouseEvent does not expose an argument with which to set\n  // MouseEvent.which. Calling initMouseEvent with a buttonArg of 0 will set\n  // MouseEvent.button == 0 and MouseEvent.which == 1, breaking the expectations\n  // of app developers.\n  //\n  // The only way to propagate the correct state of MouseEvent.which and\n  // MouseEvent.button to a new MouseEvent.button == 0 and MouseEvent.which == 0\n  // is to call initMouseEvent with a buttonArg value of -1.\n  //\n  // This is fixed with DOM Level 4's use of buttons\n  var buttons;\n  if (eventDict.buttons || ol.pointer.PointerEvent.HAS_BUTTONS) {\n    buttons = eventDict.buttons;\n  } else {\n    switch (eventDict.which) {\n      case 1: buttons = 1; break;\n      case 2: buttons = 4; break;\n      case 3: buttons = 2; break;\n      default: buttons = 0;\n    }\n  }\n  return buttons;\n};\n\n\n/**\n * @private\n * @param {Object.<string, ?>} eventDict The event dictionary.\n * @param {number} buttons Button indicator.\n * @return {number} The pressure.\n */\nol.pointer.PointerEvent.prototype.getPressure_ = function(eventDict, buttons) {\n  // Spec requires that pointers without pressure specified use 0.5 for down\n  // state and 0 for up state.\n  var pressure = 0;\n  if (eventDict.pressure) {\n    pressure = eventDict.pressure;\n  } else {\n    pressure = buttons ? 0.5 : 0;\n  }\n  return pressure;\n};\n\n\n/**\n * Is the `buttons` property supported?\n * @type {boolean}\n */\nol.pointer.PointerEvent.HAS_BUTTONS = false;\n\n\n/**\n * Checks if the `buttons` property is supported.\n */\n(function() {\n  try {\n    var ev = new MouseEvent('click', {buttons: 1});\n    ol.pointer.PointerEvent.HAS_BUTTONS = ev.buttons === 1;\n  } catch (e) {\n    // pass\n  }\n})();\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.TouchSource');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.pointer.EventSource');\ngoog.require('ol.pointer.MouseSource');\n\n\n/**\n * @constructor\n * @param {ol.pointer.PointerEventHandler} dispatcher The event handler.\n * @param {ol.pointer.MouseSource} mouseSource Mouse source.\n * @extends {ol.pointer.EventSource}\n */\nol.pointer.TouchSource = function(dispatcher, mouseSource) {\n  var mapping = {\n    'touchstart': this.touchstart,\n    'touchmove': this.touchmove,\n    'touchend': this.touchend,\n    'touchcancel': this.touchcancel\n  };\n  ol.pointer.EventSource.call(this, dispatcher, mapping);\n\n  /**\n   * @const\n   * @type {!Object.<string, Event|Object>}\n   */\n  this.pointerMap = dispatcher.pointerMap;\n\n  /**\n   * @const\n   * @type {ol.pointer.MouseSource}\n   */\n  this.mouseSource = mouseSource;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.firstTouchId_ = undefined;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.clickCount_ = 0;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.resetId_ = undefined;\n};\nol.inherits(ol.pointer.TouchSource, ol.pointer.EventSource);\n\n\n/**\n * Mouse event timeout: This should be long enough to\n * ignore compat mouse events made by touch.\n * @const\n * @type {number}\n */\nol.pointer.TouchSource.DEDUP_TIMEOUT = 2500;\n\n\n/**\n * @const\n * @type {number}\n */\nol.pointer.TouchSource.CLICK_COUNT_TIMEOUT = 200;\n\n\n/**\n * @const\n * @type {string}\n */\nol.pointer.TouchSource.POINTER_TYPE = 'touch';\n\n\n/**\n * @private\n * @param {Touch} inTouch The in touch.\n * @return {boolean} True, if this is the primary touch.\n */\nol.pointer.TouchSource.prototype.isPrimaryTouch_ = function(inTouch) {\n  return this.firstTouchId_ === inTouch.identifier;\n};\n\n\n/**\n * Set primary touch if there are no pointers, or the only pointer is the mouse.\n * @param {Touch} inTouch The in touch.\n * @private\n */\nol.pointer.TouchSource.prototype.setPrimaryTouch_ = function(inTouch) {\n  var count = Object.keys(this.pointerMap).length;\n  if (count === 0 || (count === 1 &&\n      ol.pointer.MouseSource.POINTER_ID.toString() in this.pointerMap)) {\n    this.firstTouchId_ = inTouch.identifier;\n    this.cancelResetClickCount_();\n  }\n};\n\n\n/**\n * @private\n * @param {Object} inPointer The in pointer object.\n */\nol.pointer.TouchSource.prototype.removePrimaryPointer_ = function(inPointer) {\n  if (inPointer.isPrimary) {\n    this.firstTouchId_ = undefined;\n    this.resetClickCount_();\n  }\n};\n\n\n/**\n * @private\n */\nol.pointer.TouchSource.prototype.resetClickCount_ = function() {\n  this.resetId_ = setTimeout(\n      this.resetClickCountHandler_.bind(this),\n      ol.pointer.TouchSource.CLICK_COUNT_TIMEOUT);\n};\n\n\n/**\n * @private\n */\nol.pointer.TouchSource.prototype.resetClickCountHandler_ = function() {\n  this.clickCount_ = 0;\n  this.resetId_ = undefined;\n};\n\n\n/**\n * @private\n */\nol.pointer.TouchSource.prototype.cancelResetClickCount_ = function() {\n  if (this.resetId_ !== undefined) {\n    clearTimeout(this.resetId_);\n  }\n};\n\n\n/**\n * @private\n * @param {Event} browserEvent Browser event\n * @param {Touch} inTouch Touch event\n * @return {Object} A pointer object.\n */\nol.pointer.TouchSource.prototype.touchToPointer_ = function(browserEvent, inTouch) {\n  var e = this.dispatcher.cloneEvent(browserEvent, inTouch);\n  // Spec specifies that pointerId 1 is reserved for Mouse.\n  // Touch identifiers can start at 0.\n  // Add 2 to the touch identifier for compatibility.\n  e.pointerId = inTouch.identifier + 2;\n  // TODO: check if this is necessary?\n  //e.target = findTarget(e);\n  e.bubbles = true;\n  e.cancelable = true;\n  e.detail = this.clickCount_;\n  e.button = 0;\n  e.buttons = 1;\n  e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n  e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n  e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n  e.isPrimary = this.isPrimaryTouch_(inTouch);\n  e.pointerType = ol.pointer.TouchSource.POINTER_TYPE;\n\n  // make sure that the properties that are different for\n  // each `Touch` object are not copied from the BrowserEvent object\n  e.clientX = inTouch.clientX;\n  e.clientY = inTouch.clientY;\n  e.screenX = inTouch.screenX;\n  e.screenY = inTouch.screenY;\n\n  return e;\n};\n\n\n/**\n * @private\n * @param {Event} inEvent Touch event\n * @param {function(Event, Object)} inFunction In function.\n */\nol.pointer.TouchSource.prototype.processTouches_ = function(inEvent, inFunction) {\n  var touches = Array.prototype.slice.call(\n      inEvent.changedTouches);\n  var count = touches.length;\n  function preventDefault() {\n    inEvent.preventDefault();\n  }\n  var i, pointer;\n  for (i = 0; i < count; ++i) {\n    pointer = this.touchToPointer_(inEvent, touches[i]);\n    // forward touch preventDefaults\n    pointer.preventDefault = preventDefault;\n    inFunction.call(this, inEvent, pointer);\n  }\n};\n\n\n/**\n * @private\n * @param {TouchList} touchList The touch list.\n * @param {number} searchId Search identifier.\n * @return {boolean} True, if the `Touch` with the given id is in the list.\n */\nol.pointer.TouchSource.prototype.findTouch_ = function(touchList, searchId) {\n  var l = touchList.length;\n  var touch;\n  for (var i = 0; i < l; i++) {\n    touch = touchList[i];\n    if (touch.identifier === searchId) {\n      return true;\n    }\n  }\n  return false;\n};\n\n\n/**\n * In some instances, a touchstart can happen without a touchend. This\n * leaves the pointermap in a broken state.\n * Therefore, on every touchstart, we remove the touches that did not fire a\n * touchend event.\n * To keep state globally consistent, we fire a pointercancel for\n * this \"abandoned\" touch\n *\n * @private\n * @param {Event} inEvent The in event.\n */\nol.pointer.TouchSource.prototype.vacuumTouches_ = function(inEvent) {\n  var touchList = inEvent.touches;\n  // pointerMap.getCount() should be < touchList.length here,\n  // as the touchstart has not been processed yet.\n  var keys = Object.keys(this.pointerMap);\n  var count = keys.length;\n  if (count >= touchList.length) {\n    var d = [];\n    var i, key, value;\n    for (i = 0; i < count; ++i) {\n      key = keys[i];\n      value = this.pointerMap[key];\n      // Never remove pointerId == 1, which is mouse.\n      // Touch identifiers are 2 smaller than their pointerId, which is the\n      // index in pointermap.\n      if (key != ol.pointer.MouseSource.POINTER_ID &&\n          !this.findTouch_(touchList, key - 2)) {\n        d.push(value.out);\n      }\n    }\n    for (i = 0; i < d.length; ++i) {\n      this.cancelOut_(inEvent, d[i]);\n    }\n  }\n};\n\n\n/**\n * Handler for `touchstart`, triggers `pointerover`,\n * `pointerenter` and `pointerdown` events.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.TouchSource.prototype.touchstart = function(inEvent) {\n  this.vacuumTouches_(inEvent);\n  this.setPrimaryTouch_(inEvent.changedTouches[0]);\n  this.dedupSynthMouse_(inEvent);\n  this.clickCount_++;\n  this.processTouches_(inEvent, this.overDown_);\n};\n\n\n/**\n * @private\n * @param {Event} browserEvent The event.\n * @param {Object} inPointer The in pointer object.\n */\nol.pointer.TouchSource.prototype.overDown_ = function(browserEvent, inPointer) {\n  this.pointerMap[inPointer.pointerId] = {\n    target: inPointer.target,\n    out: inPointer,\n    outTarget: inPointer.target\n  };\n  this.dispatcher.over(inPointer, browserEvent);\n  this.dispatcher.enter(inPointer, browserEvent);\n  this.dispatcher.down(inPointer, browserEvent);\n};\n\n\n/**\n * Handler for `touchmove`.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.TouchSource.prototype.touchmove = function(inEvent) {\n  inEvent.preventDefault();\n  this.processTouches_(inEvent, this.moveOverOut_);\n};\n\n\n/**\n * @private\n * @param {Event} browserEvent The event.\n * @param {Object} inPointer The in pointer.\n */\nol.pointer.TouchSource.prototype.moveOverOut_ = function(browserEvent, inPointer) {\n  var event = inPointer;\n  var pointer = this.pointerMap[event.pointerId];\n  // a finger drifted off the screen, ignore it\n  if (!pointer) {\n    return;\n  }\n  var outEvent = pointer.out;\n  var outTarget = pointer.outTarget;\n  this.dispatcher.move(event, browserEvent);\n  if (outEvent && outTarget !== event.target) {\n    outEvent.relatedTarget = event.target;\n    event.relatedTarget = outTarget;\n    // recover from retargeting by shadow\n    outEvent.target = outTarget;\n    if (event.target) {\n      this.dispatcher.leaveOut(outEvent, browserEvent);\n      this.dispatcher.enterOver(event, browserEvent);\n    } else {\n      // clean up case when finger leaves the screen\n      event.target = outTarget;\n      event.relatedTarget = null;\n      this.cancelOut_(browserEvent, event);\n    }\n  }\n  pointer.out = event;\n  pointer.outTarget = event.target;\n};\n\n\n/**\n * Handler for `touchend`, triggers `pointerup`,\n * `pointerout` and `pointerleave` events.\n *\n * @param {Event} inEvent The event.\n */\nol.pointer.TouchSource.prototype.touchend = function(inEvent) {\n  this.dedupSynthMouse_(inEvent);\n  this.processTouches_(inEvent, this.upOut_);\n};\n\n\n/**\n * @private\n * @param {Event} browserEvent An event.\n * @param {Object} inPointer The inPointer object.\n */\nol.pointer.TouchSource.prototype.upOut_ = function(browserEvent, inPointer) {\n  this.dispatcher.up(inPointer, browserEvent);\n  this.dispatcher.out(inPointer, browserEvent);\n  this.dispatcher.leave(inPointer, browserEvent);\n  this.cleanUpPointer_(inPointer);\n};\n\n\n/**\n * Handler for `touchcancel`, triggers `pointercancel`,\n * `pointerout` and `pointerleave` events.\n *\n * @param {Event} inEvent The in event.\n */\nol.pointer.TouchSource.prototype.touchcancel = function(inEvent) {\n  this.processTouches_(inEvent, this.cancelOut_);\n};\n\n\n/**\n * @private\n * @param {Event} browserEvent The event.\n * @param {Object} inPointer The in pointer.\n */\nol.pointer.TouchSource.prototype.cancelOut_ = function(browserEvent, inPointer) {\n  this.dispatcher.cancel(inPointer, browserEvent);\n  this.dispatcher.out(inPointer, browserEvent);\n  this.dispatcher.leave(inPointer, browserEvent);\n  this.cleanUpPointer_(inPointer);\n};\n\n\n/**\n * @private\n * @param {Object} inPointer The inPointer object.\n */\nol.pointer.TouchSource.prototype.cleanUpPointer_ = function(inPointer) {\n  delete this.pointerMap[inPointer.pointerId];\n  this.removePrimaryPointer_(inPointer);\n};\n\n\n/**\n * Prevent synth mouse events from creating pointer events.\n *\n * @private\n * @param {Event} inEvent The in event.\n */\nol.pointer.TouchSource.prototype.dedupSynthMouse_ = function(inEvent) {\n  var lts = this.mouseSource.lastTouches;\n  var t = inEvent.changedTouches[0];\n  // only the primary finger will synth mouse events\n  if (this.isPrimaryTouch_(t)) {\n    // remember x/y of last touch\n    var lt = [t.clientX, t.clientY];\n    lts.push(lt);\n\n    setTimeout(function() {\n      // remove touch after timeout\n      ol.array.remove(lts, lt);\n    }, ol.pointer.TouchSource.DEDUP_TIMEOUT);\n  }\n};\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.pointer.PointerEventHandler');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventTarget');\n\ngoog.require('ol.has');\ngoog.require('ol.pointer.EventType');\ngoog.require('ol.pointer.MouseSource');\ngoog.require('ol.pointer.MsSource');\ngoog.require('ol.pointer.NativeSource');\ngoog.require('ol.pointer.PointerEvent');\ngoog.require('ol.pointer.TouchSource');\n\n\n/**\n * @constructor\n * @extends {ol.events.EventTarget}\n * @param {Element|HTMLDocument} element Viewport element.\n */\nol.pointer.PointerEventHandler = function(element) {\n  ol.events.EventTarget.call(this);\n\n  /**\n   * @const\n   * @private\n   * @type {Element|HTMLDocument}\n   */\n  this.element_ = element;\n\n  /**\n   * @const\n   * @type {!Object.<string, Event|Object>}\n   */\n  this.pointerMap = {};\n\n  /**\n   * @type {Object.<string, function(Event)>}\n   * @private\n   */\n  this.eventMap_ = {};\n\n  /**\n   * @type {Array.<ol.pointer.EventSource>}\n   * @private\n   */\n  this.eventSourceList_ = [];\n\n  this.registerSources();\n};\nol.inherits(ol.pointer.PointerEventHandler, ol.events.EventTarget);\n\n\n/**\n * Set up the event sources (mouse, touch and native pointers)\n * that generate pointer events.\n */\nol.pointer.PointerEventHandler.prototype.registerSources = function() {\n  if (ol.has.POINTER) {\n    this.registerSource('native', new ol.pointer.NativeSource(this));\n  } else if (ol.has.MSPOINTER) {\n    this.registerSource('ms', new ol.pointer.MsSource(this));\n  } else {\n    var mouseSource = new ol.pointer.MouseSource(this);\n    this.registerSource('mouse', mouseSource);\n\n    if (ol.has.TOUCH) {\n      this.registerSource('touch',\n          new ol.pointer.TouchSource(this, mouseSource));\n    }\n  }\n\n  // register events on the viewport element\n  this.register_();\n};\n\n\n/**\n * Add a new event source that will generate pointer events.\n *\n * @param {string} name A name for the event source\n * @param {ol.pointer.EventSource} source The source event.\n */\nol.pointer.PointerEventHandler.prototype.registerSource = function(name, source) {\n  var s = source;\n  var newEvents = s.getEvents();\n\n  if (newEvents) {\n    newEvents.forEach(function(e) {\n      var handler = s.getHandlerForEvent(e);\n\n      if (handler) {\n        this.eventMap_[e] = handler.bind(s);\n      }\n    }, this);\n    this.eventSourceList_.push(s);\n  }\n};\n\n\n/**\n * Set up the events for all registered event sources.\n * @private\n */\nol.pointer.PointerEventHandler.prototype.register_ = function() {\n  var l = this.eventSourceList_.length;\n  var eventSource;\n  for (var i = 0; i < l; i++) {\n    eventSource = this.eventSourceList_[i];\n    this.addEvents_(eventSource.getEvents());\n  }\n};\n\n\n/**\n * Remove all registered events.\n * @private\n */\nol.pointer.PointerEventHandler.prototype.unregister_ = function() {\n  var l = this.eventSourceList_.length;\n  var eventSource;\n  for (var i = 0; i < l; i++) {\n    eventSource = this.eventSourceList_[i];\n    this.removeEvents_(eventSource.getEvents());\n  }\n};\n\n\n/**\n * Calls the right handler for a new event.\n * @private\n * @param {Event} inEvent Browser event.\n */\nol.pointer.PointerEventHandler.prototype.eventHandler_ = function(inEvent) {\n  var type = inEvent.type;\n  var handler = this.eventMap_[type];\n  if (handler) {\n    handler(inEvent);\n  }\n};\n\n\n/**\n * Setup listeners for the given events.\n * @private\n * @param {Array.<string>} events List of events.\n */\nol.pointer.PointerEventHandler.prototype.addEvents_ = function(events) {\n  events.forEach(function(eventName) {\n    ol.events.listen(this.element_, eventName, this.eventHandler_, this);\n  }, this);\n};\n\n\n/**\n * Unregister listeners for the given events.\n * @private\n * @param {Array.<string>} events List of events.\n */\nol.pointer.PointerEventHandler.prototype.removeEvents_ = function(events) {\n  events.forEach(function(e) {\n    ol.events.unlisten(this.element_, e, this.eventHandler_, this);\n  }, this);\n};\n\n\n/**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} event Browser event.\n * @param {Event|Touch} inEvent An event that contains\n *    properties to copy.\n * @return {Object} An object containing shallow copies of\n *    `inEvent`'s properties.\n */\nol.pointer.PointerEventHandler.prototype.cloneEvent = function(event, inEvent) {\n  var eventCopy = {}, p;\n  for (var i = 0, ii = ol.pointer.PointerEventHandler.CLONE_PROPS.length; i < ii; i++) {\n    p = ol.pointer.PointerEventHandler.CLONE_PROPS[i][0];\n    eventCopy[p] = event[p] || inEvent[p] || ol.pointer.PointerEventHandler.CLONE_PROPS[i][1];\n  }\n\n  return eventCopy;\n};\n\n\n// EVENTS\n\n\n/**\n * Triggers a 'pointerdown' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.down = function(data, event) {\n  this.fireEvent(ol.pointer.EventType.POINTERDOWN, data, event);\n};\n\n\n/**\n * Triggers a 'pointermove' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.move = function(data, event) {\n  this.fireEvent(ol.pointer.EventType.POINTERMOVE, data, event);\n};\n\n\n/**\n * Triggers a 'pointerup' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.up = function(data, event) {\n  this.fireEvent(ol.pointer.EventType.POINTERUP, data, event);\n};\n\n\n/**\n * Triggers a 'pointerenter' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.enter = function(data, event) {\n  data.bubbles = false;\n  this.fireEvent(ol.pointer.EventType.POINTERENTER, data, event);\n};\n\n\n/**\n * Triggers a 'pointerleave' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.leave = function(data, event) {\n  data.bubbles = false;\n  this.fireEvent(ol.pointer.EventType.POINTERLEAVE, data, event);\n};\n\n\n/**\n * Triggers a 'pointerover' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.over = function(data, event) {\n  data.bubbles = true;\n  this.fireEvent(ol.pointer.EventType.POINTEROVER, data, event);\n};\n\n\n/**\n * Triggers a 'pointerout' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.out = function(data, event) {\n  data.bubbles = true;\n  this.fireEvent(ol.pointer.EventType.POINTEROUT, data, event);\n};\n\n\n/**\n * Triggers a 'pointercancel' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.cancel = function(data, event) {\n  this.fireEvent(ol.pointer.EventType.POINTERCANCEL, data, event);\n};\n\n\n/**\n * Triggers a combination of 'pointerout' and 'pointerleave' events.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.leaveOut = function(data, event) {\n  this.out(data, event);\n  if (!this.contains_(data.target, data.relatedTarget)) {\n    this.leave(data, event);\n  }\n};\n\n\n/**\n * Triggers a combination of 'pointerover' and 'pointerevents' events.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.enterOver = function(data, event) {\n  this.over(data, event);\n  if (!this.contains_(data.target, data.relatedTarget)) {\n    this.enter(data, event);\n  }\n};\n\n\n/**\n * @private\n * @param {Element} container The container element.\n * @param {Element} contained The contained element.\n * @return {boolean} Returns true if the container element\n *   contains the other element.\n */\nol.pointer.PointerEventHandler.prototype.contains_ = function(container, contained) {\n  if (!container || !contained) {\n    return false;\n  }\n  return container.contains(contained);\n};\n\n\n// EVENT CREATION AND TRACKING\n/**\n * Creates a new Event of type `inType`, based on the information in\n * `data`.\n *\n * @param {string} inType A string representing the type of event to create.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n * @return {ol.pointer.PointerEvent} A PointerEvent of type `inType`.\n */\nol.pointer.PointerEventHandler.prototype.makeEvent = function(inType, data, event) {\n  return new ol.pointer.PointerEvent(inType, event, data);\n};\n\n\n/**\n * Make and dispatch an event in one call.\n * @param {string} inType A string representing the type of event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\nol.pointer.PointerEventHandler.prototype.fireEvent = function(inType, data, event) {\n  var e = this.makeEvent(inType, data, event);\n  this.dispatchEvent(e);\n};\n\n\n/**\n * Creates a pointer event from a native pointer event\n * and dispatches this event.\n * @param {Event} event A platform event with a target.\n */\nol.pointer.PointerEventHandler.prototype.fireNativeEvent = function(event) {\n  var e = this.makeEvent(event.type, event, event);\n  this.dispatchEvent(e);\n};\n\n\n/**\n * Wrap a native mouse event into a pointer event.\n * This proxy method is required for the legacy IE support.\n * @param {string} eventType The pointer event type.\n * @param {Event} event The event.\n * @return {ol.pointer.PointerEvent} The wrapped event.\n */\nol.pointer.PointerEventHandler.prototype.wrapMouseEvent = function(eventType, event) {\n  var pointerEvent = this.makeEvent(\n      eventType, ol.pointer.MouseSource.prepareEvent(event, this), event);\n  return pointerEvent;\n};\n\n\n/**\n * @inheritDoc\n */\nol.pointer.PointerEventHandler.prototype.disposeInternal = function() {\n  this.unregister_();\n  ol.events.EventTarget.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Properties to copy when cloning an event, with default values.\n * @type {Array.<Array>}\n */\nol.pointer.PointerEventHandler.CLONE_PROPS = [\n  // MouseEvent\n  ['bubbles', false],\n  ['cancelable', false],\n  ['view', null],\n  ['detail', null],\n  ['screenX', 0],\n  ['screenY', 0],\n  ['clientX', 0],\n  ['clientY', 0],\n  ['ctrlKey', false],\n  ['altKey', false],\n  ['shiftKey', false],\n  ['metaKey', false],\n  ['button', 0],\n  ['relatedTarget', null],\n  // DOM Level 3\n  ['buttons', 0],\n  // PointerEvent\n  ['pointerId', 0],\n  ['width', 0],\n  ['height', 0],\n  ['pressure', 0],\n  ['tiltX', 0],\n  ['tiltY', 0],\n  ['pointerType', ''],\n  ['hwTimestamp', 0],\n  ['isPrimary', false],\n  // event instance\n  ['type', ''],\n  ['target', null],\n  ['currentTarget', null],\n  ['which', 0]\n];\n\ngoog.provide('ol.MapBrowserEventHandler');\n\ngoog.require('ol');\ngoog.require('ol.has');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.MapBrowserPointerEvent');\ngoog.require('ol.events');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.pointer.EventType');\ngoog.require('ol.pointer.PointerEventHandler');\n\n\n/**\n * @param {ol.PluggableMap} map The map with the viewport to listen to events on.\n * @param {number|undefined} moveTolerance The minimal distance the pointer must travel to trigger a move.\n * @constructor\n * @extends {ol.events.EventTarget}\n */\nol.MapBrowserEventHandler = function(map, moveTolerance) {\n\n  ol.events.EventTarget.call(this);\n\n  /**\n   * This is the element that we will listen to the real events on.\n   * @type {ol.PluggableMap}\n   * @private\n   */\n  this.map_ = map;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.clickTimeoutId_ = 0;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.dragging_ = false;\n\n  /**\n   * @type {!Array.<ol.EventsKey>}\n   * @private\n   */\n  this.dragListenerKeys_ = [];\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.moveTolerance_ = moveTolerance ?\n    moveTolerance * ol.has.DEVICE_PIXEL_RATIO : ol.has.DEVICE_PIXEL_RATIO;\n\n  /**\n   * The most recent \"down\" type event (or null if none have occurred).\n   * Set on pointerdown.\n   * @type {ol.pointer.PointerEvent}\n   * @private\n   */\n  this.down_ = null;\n\n  var element = this.map_.getViewport();\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.activePointers_ = 0;\n\n  /**\n   * @type {!Object.<number, boolean>}\n   * @private\n   */\n  this.trackedTouches_ = {};\n\n  /**\n   * Event handler which generates pointer events for\n   * the viewport element.\n   *\n   * @type {ol.pointer.PointerEventHandler}\n   * @private\n   */\n  this.pointerEventHandler_ = new ol.pointer.PointerEventHandler(element);\n\n  /**\n   * Event handler which generates pointer events for\n   * the document (used when dragging).\n   *\n   * @type {ol.pointer.PointerEventHandler}\n   * @private\n   */\n  this.documentPointerEventHandler_ = null;\n\n  /**\n   * @type {?ol.EventsKey}\n   * @private\n   */\n  this.pointerdownListenerKey_ = ol.events.listen(this.pointerEventHandler_,\n      ol.pointer.EventType.POINTERDOWN,\n      this.handlePointerDown_, this);\n\n  /**\n   * @type {?ol.EventsKey}\n   * @private\n   */\n  this.relayedListenerKey_ = ol.events.listen(this.pointerEventHandler_,\n      ol.pointer.EventType.POINTERMOVE,\n      this.relayEvent_, this);\n\n};\nol.inherits(ol.MapBrowserEventHandler, ol.events.EventTarget);\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.emulateClick_ = function(pointerEvent) {\n  var newEvent = new ol.MapBrowserPointerEvent(\n      ol.MapBrowserEventType.CLICK, this.map_, pointerEvent);\n  this.dispatchEvent(newEvent);\n  if (this.clickTimeoutId_ !== 0) {\n    // double-click\n    clearTimeout(this.clickTimeoutId_);\n    this.clickTimeoutId_ = 0;\n    newEvent = new ol.MapBrowserPointerEvent(\n        ol.MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n    this.dispatchEvent(newEvent);\n  } else {\n    // click\n    this.clickTimeoutId_ = setTimeout(function() {\n      this.clickTimeoutId_ = 0;\n      var newEvent = new ol.MapBrowserPointerEvent(\n          ol.MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n      this.dispatchEvent(newEvent);\n    }.bind(this), 250);\n  }\n};\n\n\n/**\n * Keeps track on how many pointers are currently active.\n *\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.updateActivePointers_ = function(pointerEvent) {\n  var event = pointerEvent;\n\n  if (event.type == ol.MapBrowserEventType.POINTERUP ||\n      event.type == ol.MapBrowserEventType.POINTERCANCEL) {\n    delete this.trackedTouches_[event.pointerId];\n  } else if (event.type == ol.MapBrowserEventType.POINTERDOWN) {\n    this.trackedTouches_[event.pointerId] = true;\n  }\n  this.activePointers_ = Object.keys(this.trackedTouches_).length;\n};\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {\n  this.updateActivePointers_(pointerEvent);\n  var newEvent = new ol.MapBrowserPointerEvent(\n      ol.MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n  this.dispatchEvent(newEvent);\n\n  // We emulate click events on left mouse button click, touch contact, and pen\n  // contact. isMouseActionButton returns true in these cases (evt.button is set\n  // to 0).\n  // See http://www.w3.org/TR/pointerevents/#button-states\n  // We only fire click, singleclick, and doubleclick if nobody has called\n  // event.stopPropagation() or event.preventDefault().\n  if (!newEvent.propagationStopped && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {\n    this.emulateClick_(this.down_);\n  }\n\n  if (this.activePointers_ === 0) {\n    this.dragListenerKeys_.forEach(ol.events.unlistenByKey);\n    this.dragListenerKeys_.length = 0;\n    this.dragging_ = false;\n    this.down_ = null;\n    this.documentPointerEventHandler_.dispose();\n    this.documentPointerEventHandler_ = null;\n  }\n};\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\nol.MapBrowserEventHandler.prototype.isMouseActionButton_ = function(pointerEvent) {\n  return pointerEvent.button === 0;\n};\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.handlePointerDown_ = function(pointerEvent) {\n  this.updateActivePointers_(pointerEvent);\n  var newEvent = new ol.MapBrowserPointerEvent(\n      ol.MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n  this.dispatchEvent(newEvent);\n\n  this.down_ = pointerEvent;\n\n  if (this.dragListenerKeys_.length === 0) {\n    /* Set up a pointer event handler on the `document`,\n     * which is required when the pointer is moved outside\n     * the viewport when dragging.\n     */\n    this.documentPointerEventHandler_ =\n        new ol.pointer.PointerEventHandler(document);\n\n    this.dragListenerKeys_.push(\n        ol.events.listen(this.documentPointerEventHandler_,\n            ol.MapBrowserEventType.POINTERMOVE,\n            this.handlePointerMove_, this),\n        ol.events.listen(this.documentPointerEventHandler_,\n            ol.MapBrowserEventType.POINTERUP,\n            this.handlePointerUp_, this),\n        /* Note that the listener for `pointercancel is set up on\n       * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n       * the `pointerup` and `pointermove` listeners.\n       *\n       * The reason for this is the following: `TouchSource.vacuumTouches_()`\n       * issues `pointercancel` events, when there was no `touchend` for a\n       * `touchstart`. Now, let's say a first `touchstart` is registered on\n       * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n       * But `documentPointerEventHandler_` doesn't know about the first\n       * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n       * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n       * only registered there.\n       */\n        ol.events.listen(this.pointerEventHandler_,\n            ol.MapBrowserEventType.POINTERCANCEL,\n            this.handlePointerUp_, this)\n    );\n  }\n};\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.handlePointerMove_ = function(pointerEvent) {\n  // Between pointerdown and pointerup, pointermove events are triggered.\n  // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n  // moved a significant distance.\n  if (this.isMoving_(pointerEvent)) {\n    this.dragging_ = true;\n    var newEvent = new ol.MapBrowserPointerEvent(\n        ol.MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent,\n        this.dragging_);\n    this.dispatchEvent(newEvent);\n  }\n\n  // Some native android browser triggers mousemove events during small period\n  // of time. See: https://code.google.com/p/android/issues/detail?id=5491 or\n  // https://code.google.com/p/android/issues/detail?id=19827\n  // ex: Galaxy Tab P3110 + Android 4.1.1\n  pointerEvent.preventDefault();\n};\n\n\n/**\n * Wrap and relay a pointer event.  Note that this requires that the type\n * string for the MapBrowserPointerEvent matches the PointerEvent type.\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @private\n */\nol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {\n  var dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n  this.dispatchEvent(new ol.MapBrowserPointerEvent(\n      pointerEvent.type, this.map_, pointerEvent, dragging));\n};\n\n\n/**\n * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.\n * @return {boolean} Is moving.\n * @private\n */\nol.MapBrowserEventHandler.prototype.isMoving_ = function(pointerEvent) {\n  return Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ ||\n      Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.MapBrowserEventHandler.prototype.disposeInternal = function() {\n  if (this.relayedListenerKey_) {\n    ol.events.unlistenByKey(this.relayedListenerKey_);\n    this.relayedListenerKey_ = null;\n  }\n  if (this.pointerdownListenerKey_) {\n    ol.events.unlistenByKey(this.pointerdownListenerKey_);\n    this.pointerdownListenerKey_ = null;\n  }\n\n  this.dragListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.dragListenerKeys_.length = 0;\n\n  if (this.documentPointerEventHandler_) {\n    this.documentPointerEventHandler_.dispose();\n    this.documentPointerEventHandler_ = null;\n  }\n  if (this.pointerEventHandler_) {\n    this.pointerEventHandler_.dispose();\n    this.pointerEventHandler_ = null;\n  }\n  ol.events.EventTarget.prototype.disposeInternal.call(this);\n};\n\ngoog.provide('ol.MapEventType');\n\n/**\n * @enum {string}\n */\nol.MapEventType = {\n\n  /**\n   * Triggered after a map frame is rendered.\n   * @event ol.MapEvent#postrender\n   * @api\n   */\n  POSTRENDER: 'postrender',\n\n  /**\n   * Triggered when the map starts moving.\n   * @event ol.MapEvent#movestart\n   * @api\n   */\n  MOVESTART: 'movestart',\n\n  /**\n   * Triggered after the map is moved.\n   * @event ol.MapEvent#moveend\n   * @api\n   */\n  MOVEEND: 'moveend'\n\n};\n\ngoog.provide('ol.MapProperty');\n\n/**\n * @enum {string}\n */\nol.MapProperty = {\n  LAYERGROUP: 'layergroup',\n  SIZE: 'size',\n  TARGET: 'target',\n  VIEW: 'view'\n};\n\ngoog.provide('ol.TileState');\n\n/**\n * @enum {number}\n */\nol.TileState = {\n  IDLE: 0,\n  LOADING: 1,\n  LOADED: 2,\n  ERROR: 3,\n  EMPTY: 4,\n  ABORT: 5\n};\n\ngoog.provide('ol.structs.PriorityQueue');\n\ngoog.require('ol.asserts');\ngoog.require('ol.obj');\n\n\n/**\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * @see http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html\n * @see http://hg.python.org/cpython/file/2.7/Lib/heapq.py\n *\n * @constructor\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n * @struct\n * @template T\n */\nol.structs.PriorityQueue = function(priorityFunction, keyFunction) {\n\n  /**\n   * @type {function(T): number}\n   * @private\n   */\n  this.priorityFunction_ = priorityFunction;\n\n  /**\n   * @type {function(T): string}\n   * @private\n   */\n  this.keyFunction_ = keyFunction;\n\n  /**\n   * @type {Array.<T>}\n   * @private\n   */\n  this.elements_ = [];\n\n  /**\n   * @type {Array.<number>}\n   * @private\n   */\n  this.priorities_ = [];\n\n  /**\n   * @type {Object.<string, boolean>}\n   * @private\n   */\n  this.queuedElements_ = {};\n\n};\n\n\n/**\n * @const\n * @type {number}\n */\nol.structs.PriorityQueue.DROP = Infinity;\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.structs.PriorityQueue.prototype.clear = function() {\n  this.elements_.length = 0;\n  this.priorities_.length = 0;\n  ol.obj.clear(this.queuedElements_);\n};\n\n\n/**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\nol.structs.PriorityQueue.prototype.dequeue = function() {\n  var elements = this.elements_;\n  var priorities = this.priorities_;\n  var element = elements[0];\n  if (elements.length == 1) {\n    elements.length = 0;\n    priorities.length = 0;\n  } else {\n    elements[0] = elements.pop();\n    priorities[0] = priorities.pop();\n    this.siftUp_(0);\n  }\n  var elementKey = this.keyFunction_(element);\n  delete this.queuedElements_[elementKey];\n  return element;\n};\n\n\n/**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\nol.structs.PriorityQueue.prototype.enqueue = function(element) {\n  ol.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_),\n      31); // Tried to enqueue an `element` that was already added to the queue\n  var priority = this.priorityFunction_(element);\n  if (priority != ol.structs.PriorityQueue.DROP) {\n    this.elements_.push(element);\n    this.priorities_.push(priority);\n    this.queuedElements_[this.keyFunction_(element)] = true;\n    this.siftDown_(0, this.elements_.length - 1);\n    return true;\n  }\n  return false;\n};\n\n\n/**\n * @return {number} Count.\n */\nol.structs.PriorityQueue.prototype.getCount = function() {\n  return this.elements_.length;\n};\n\n\n/**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\nol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) {\n  return index * 2 + 1;\n};\n\n\n/**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\nol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) {\n  return index * 2 + 2;\n};\n\n\n/**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\nol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) {\n  return (index - 1) >> 1;\n};\n\n\n/**\n * Make this a heap. O(N).\n * @private\n */\nol.structs.PriorityQueue.prototype.heapify_ = function() {\n  var i;\n  for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n    this.siftUp_(i);\n  }\n};\n\n\n/**\n * @return {boolean} Is empty.\n */\nol.structs.PriorityQueue.prototype.isEmpty = function() {\n  return this.elements_.length === 0;\n};\n\n\n/**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\nol.structs.PriorityQueue.prototype.isKeyQueued = function(key) {\n  return key in this.queuedElements_;\n};\n\n\n/**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\nol.structs.PriorityQueue.prototype.isQueued = function(element) {\n  return this.isKeyQueued(this.keyFunction_(element));\n};\n\n\n/**\n * @param {number} index The index of the node to move down.\n * @private\n */\nol.structs.PriorityQueue.prototype.siftUp_ = function(index) {\n  var elements = this.elements_;\n  var priorities = this.priorities_;\n  var count = elements.length;\n  var element = elements[index];\n  var priority = priorities[index];\n  var startIndex = index;\n\n  while (index < (count >> 1)) {\n    var lIndex = this.getLeftChildIndex_(index);\n    var rIndex = this.getRightChildIndex_(index);\n\n    var smallerChildIndex = rIndex < count &&\n        priorities[rIndex] < priorities[lIndex] ?\n      rIndex : lIndex;\n\n    elements[index] = elements[smallerChildIndex];\n    priorities[index] = priorities[smallerChildIndex];\n    index = smallerChildIndex;\n  }\n\n  elements[index] = element;\n  priorities[index] = priority;\n  this.siftDown_(startIndex, index);\n};\n\n\n/**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\nol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) {\n  var elements = this.elements_;\n  var priorities = this.priorities_;\n  var element = elements[index];\n  var priority = priorities[index];\n\n  while (index > startIndex) {\n    var parentIndex = this.getParentIndex_(index);\n    if (priorities[parentIndex] > priority) {\n      elements[index] = elements[parentIndex];\n      priorities[index] = priorities[parentIndex];\n      index = parentIndex;\n    } else {\n      break;\n    }\n  }\n  elements[index] = element;\n  priorities[index] = priority;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.structs.PriorityQueue.prototype.reprioritize = function() {\n  var priorityFunction = this.priorityFunction_;\n  var elements = this.elements_;\n  var priorities = this.priorities_;\n  var index = 0;\n  var n = elements.length;\n  var element, i, priority;\n  for (i = 0; i < n; ++i) {\n    element = elements[i];\n    priority = priorityFunction(element);\n    if (priority == ol.structs.PriorityQueue.DROP) {\n      delete this.queuedElements_[this.keyFunction_(element)];\n    } else {\n      priorities[index] = priority;\n      elements[index++] = element;\n    }\n  }\n  elements.length = index;\n  priorities.length = index;\n  this.heapify_();\n};\n\ngoog.provide('ol.TileQueue');\n\ngoog.require('ol');\ngoog.require('ol.TileState');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.structs.PriorityQueue');\n\n\n/**\n * @constructor\n * @extends {ol.structs.PriorityQueue.<Array>}\n * @param {ol.TilePriorityFunction} tilePriorityFunction\n *     Tile priority function.\n * @param {function(): ?} tileChangeCallback\n *     Function called on each tile change event.\n * @struct\n */\nol.TileQueue = function(tilePriorityFunction, tileChangeCallback) {\n\n  ol.structs.PriorityQueue.call(\n      this,\n      /**\n       * @param {Array} element Element.\n       * @return {number} Priority.\n       */\n      function(element) {\n        return tilePriorityFunction.apply(null, element);\n      },\n      /**\n       * @param {Array} element Element.\n       * @return {string} Key.\n       */\n      function(element) {\n        return /** @type {ol.Tile} */ (element[0]).getKey();\n      });\n\n  /**\n   * @private\n   * @type {function(): ?}\n   */\n  this.tileChangeCallback_ = tileChangeCallback;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.tilesLoading_ = 0;\n\n  /**\n   * @private\n   * @type {!Object.<string,boolean>}\n   */\n  this.tilesLoadingKeys_ = {};\n\n};\nol.inherits(ol.TileQueue, ol.structs.PriorityQueue);\n\n\n/**\n * @inheritDoc\n */\nol.TileQueue.prototype.enqueue = function(element) {\n  var added = ol.structs.PriorityQueue.prototype.enqueue.call(this, element);\n  if (added) {\n    var tile = element[0];\n    ol.events.listen(tile, ol.events.EventType.CHANGE,\n        this.handleTileChange, this);\n  }\n  return added;\n};\n\n\n/**\n * @return {number} Number of tiles loading.\n */\nol.TileQueue.prototype.getTilesLoading = function() {\n  return this.tilesLoading_;\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n * @protected\n */\nol.TileQueue.prototype.handleTileChange = function(event) {\n  var tile = /** @type {ol.Tile} */ (event.target);\n  var state = tile.getState();\n  if (state === ol.TileState.LOADED || state === ol.TileState.ERROR ||\n      state === ol.TileState.EMPTY || state === ol.TileState.ABORT) {\n    ol.events.unlisten(tile, ol.events.EventType.CHANGE,\n        this.handleTileChange, this);\n    var tileKey = tile.getKey();\n    if (tileKey in this.tilesLoadingKeys_) {\n      delete this.tilesLoadingKeys_[tileKey];\n      --this.tilesLoading_;\n    }\n    this.tileChangeCallback_();\n  }\n};\n\n\n/**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\nol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) {\n  var newLoads = 0;\n  var abortedTiles = false;\n  var state, tile, tileKey;\n  while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads &&\n         this.getCount() > 0) {\n    tile = /** @type {ol.Tile} */ (this.dequeue()[0]);\n    tileKey = tile.getKey();\n    state = tile.getState();\n    if (state === ol.TileState.ABORT) {\n      abortedTiles = true;\n    } else if (state === ol.TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n      this.tilesLoadingKeys_[tileKey] = true;\n      ++this.tilesLoading_;\n      ++newLoads;\n      tile.load();\n    }\n  }\n  if (newLoads === 0 && abortedTiles) {\n    // Do not stop the render loop when all wanted tiles were aborted due to\n    // a small, saturated tile cache.\n    this.tileChangeCallback_();\n  }\n};\n\ngoog.provide('ol.CenterConstraint');\n\ngoog.require('ol.math');\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @return {ol.CenterConstraintType} The constraint.\n */\nol.CenterConstraint.createExtent = function(extent) {\n  return (\n    /**\n     * @param {ol.Coordinate|undefined} center Center.\n     * @return {ol.Coordinate|undefined} Center.\n     */\n    function(center) {\n      if (center) {\n        return [\n          ol.math.clamp(center[0], extent[0], extent[2]),\n          ol.math.clamp(center[1], extent[1], extent[3])\n        ];\n      } else {\n        return undefined;\n      }\n    });\n};\n\n\n/**\n * @param {ol.Coordinate|undefined} center Center.\n * @return {ol.Coordinate|undefined} Center.\n */\nol.CenterConstraint.none = function(center) {\n  return center;\n};\n\ngoog.provide('ol.ResolutionConstraint');\n\ngoog.require('ol.array');\ngoog.require('ol.math');\n\n\n/**\n * @param {Array.<number>} resolutions Resolutions.\n * @return {ol.ResolutionConstraintType} Zoom function.\n */\nol.ResolutionConstraint.createSnapToResolutions = function(resolutions) {\n  return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} delta Delta.\n     * @param {number} direction Direction.\n     * @return {number|undefined} Resolution.\n     */\n    function(resolution, delta, direction) {\n      if (resolution !== undefined) {\n        var z =\n              ol.array.linearFindNearest(resolutions, resolution, direction);\n        z = ol.math.clamp(z + delta, 0, resolutions.length - 1);\n        var index = Math.floor(z);\n        if (z != index && index < resolutions.length - 1) {\n          var power = resolutions[index] / resolutions[index + 1];\n          return resolutions[index] / Math.pow(power, z - index);\n        } else {\n          return resolutions[index];\n        }\n      } else {\n        return undefined;\n      }\n    });\n};\n\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number=} opt_maxLevel Maximum level.\n * @return {ol.ResolutionConstraintType} Zoom function.\n */\nol.ResolutionConstraint.createSnapToPower = function(power, maxResolution, opt_maxLevel) {\n  return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} delta Delta.\n     * @param {number} direction Direction.\n     * @return {number|undefined} Resolution.\n     */\n    function(resolution, delta, direction) {\n      if (resolution !== undefined) {\n        var offset = -direction / 2 + 0.5;\n        var oldLevel = Math.floor(\n            Math.log(maxResolution / resolution) / Math.log(power) + offset);\n        var newLevel = Math.max(oldLevel + delta, 0);\n        if (opt_maxLevel !== undefined) {\n          newLevel = Math.min(newLevel, opt_maxLevel);\n        }\n        return maxResolution / Math.pow(power, newLevel);\n      } else {\n        return undefined;\n      }\n    });\n};\n\ngoog.provide('ol.RotationConstraint');\n\ngoog.require('ol.math');\n\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\nol.RotationConstraint.disable = function(rotation, delta) {\n  if (rotation !== undefined) {\n    return 0;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\nol.RotationConstraint.none = function(rotation, delta) {\n  if (rotation !== undefined) {\n    return rotation + delta;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {number} n N.\n * @return {ol.RotationConstraintType} Rotation constraint.\n */\nol.RotationConstraint.createSnapToN = function(n) {\n  var theta = 2 * Math.PI / n;\n  return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {number} delta Delta.\n     * @return {number|undefined} Rotation.\n     */\n    function(rotation, delta) {\n      if (rotation !== undefined) {\n        rotation = Math.floor((rotation + delta) / theta + 0.5) * theta;\n        return rotation;\n      } else {\n        return undefined;\n      }\n    });\n};\n\n\n/**\n * @param {number=} opt_tolerance Tolerance.\n * @return {ol.RotationConstraintType} Rotation constraint.\n */\nol.RotationConstraint.createSnapToZero = function(opt_tolerance) {\n  var tolerance = opt_tolerance || ol.math.toRadians(5);\n  return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {number} delta Delta.\n     * @return {number|undefined} Rotation.\n     */\n    function(rotation, delta) {\n      if (rotation !== undefined) {\n        if (Math.abs(rotation + delta) <= tolerance) {\n          return 0;\n        } else {\n          return rotation + delta;\n        }\n      } else {\n        return undefined;\n      }\n    });\n};\n\ngoog.provide('ol.ViewHint');\n\n/**\n * @enum {number}\n */\nol.ViewHint = {\n  ANIMATING: 0,\n  INTERACTING: 1\n};\n\ngoog.provide('ol.ViewProperty');\n\n/**\n * @enum {string}\n */\nol.ViewProperty = {\n  CENTER: 'center',\n  RESOLUTION: 'resolution',\n  ROTATION: 'rotation'\n};\n\ngoog.provide('ol.string');\n\n/**\n * @param {number} number Number to be formatted\n * @param {number} width The desired width\n * @param {number=} opt_precision Precision of the output string (i.e. number of decimal places)\n * @returns {string} Formatted string\n*/\nol.string.padNumber = function(number, width, opt_precision) {\n  var numberString = opt_precision !== undefined ? number.toFixed(opt_precision) : '' + number;\n  var decimal = numberString.indexOf('.');\n  decimal = decimal === -1 ? numberString.length : decimal;\n  return decimal > width ? numberString : new Array(1 + width - decimal).join('0') + numberString;\n};\n\n/**\n * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js\n * @param {string|number} v1 First version\n * @param {string|number} v2 Second version\n * @returns {number} Value\n */\nol.string.compareVersions = function(v1, v2) {\n  var s1 = ('' + v1).split('.');\n  var s2 = ('' + v2).split('.');\n\n  for (var i = 0; i < Math.max(s1.length, s2.length); i++) {\n    var n1 = parseInt(s1[i] || '0', 10);\n    var n2 = parseInt(s2[i] || '0', 10);\n\n    if (n1 > n2) {\n      return 1;\n    }\n    if (n2 > n1) {\n      return -1;\n    }\n  }\n\n  return 0;\n};\n\ngoog.provide('ol.coordinate');\n\ngoog.require('ol.math');\ngoog.require('ol.string');\n\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     var coord = [7.85, 47.983333];\n *     ol.coordinate.add(coord, [-2, 4]);\n *     // coord is now [5.85, 51.983333]\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.Coordinate} delta Delta.\n * @return {ol.Coordinate} The input coordinate adjusted by the given delta.\n * @api\n */\nol.coordinate.add = function(coordinate, delta) {\n  coordinate[0] += delta[0];\n  coordinate[1] += delta[1];\n  return coordinate;\n};\n\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {ol.Coordinate} coordinate The coordinate.\n * @param {ol.geom.Circle} circle The circle.\n * @return {ol.Coordinate} Closest point on the circumference\n */\nol.coordinate.closestOnCircle = function(coordinate, circle) {\n  var r = circle.getRadius();\n  var center = circle.getCenter();\n  var x0 = center[0];\n  var y0 = center[1];\n  var x1 = coordinate[0];\n  var y1 = coordinate[1];\n\n  var dx = x1 - x0;\n  var dy = y1 - y0;\n  if (dx === 0 && dy === 0) {\n    dx = 1;\n  }\n  var d = Math.sqrt(dx * dx + dy * dy);\n\n  var x, y;\n\n  x = x0 + r * dx / d;\n  y = y0 + r * dy / d;\n\n  return [x, y];\n};\n\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {ol.Coordinate} coordinate The coordinate.\n * @param {Array.<ol.Coordinate>} segment The two coordinates of the segment.\n * @return {ol.Coordinate} The foot of the perpendicular of the coordinate to\n *     the segment.\n */\nol.coordinate.closestOnSegment = function(coordinate, segment) {\n  var x0 = coordinate[0];\n  var y0 = coordinate[1];\n  var start = segment[0];\n  var end = segment[1];\n  var x1 = start[0];\n  var y1 = start[1];\n  var x2 = end[0];\n  var y2 = end[1];\n  var dx = x2 - x1;\n  var dy = y2 - y1;\n  var along = (dx === 0 && dy === 0) ? 0 :\n    ((dx * (x0 - x1)) + (dy * (y0 - y1))) / ((dx * dx + dy * dy) || 0);\n  var x, y;\n  if (along <= 0) {\n    x = x1;\n    y = y1;\n  } else if (along >= 1) {\n    x = x2;\n    y = y2;\n  } else {\n    x = x1 + along * dx;\n    y = y1 + along * dy;\n  }\n  return [x, y];\n};\n\n\n/**\n * Returns a {@link ol.CoordinateFormatType} function that can be used to format\n * a {ol.Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var stringifyFunc = ol.coordinate.createStringXY();\n *     var out = stringifyFunc(coord);\n *     // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var stringifyFunc = ol.coordinate.createStringXY(2);\n *     var out = stringifyFunc(coord);\n *     // out is now '7.85, 47.98'\n *\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {ol.CoordinateFormatType} Coordinate format.\n * @api\n */\nol.coordinate.createStringXY = function(opt_fractionDigits) {\n  return (\n    /**\n     * @param {ol.Coordinate|undefined} coordinate Coordinate.\n     * @return {string} String XY.\n     */\n    function(coordinate) {\n      return ol.coordinate.toStringXY(coordinate, opt_fractionDigits);\n    });\n};\n\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} String.\n */\nol.coordinate.degreesToStringHDMS = function(hemispheres, degrees, opt_fractionDigits) {\n  var normalizedDegrees = ol.math.modulo(degrees + 180, 360) - 180;\n  var x = Math.abs(3600 * normalizedDegrees);\n  var dflPrecision = opt_fractionDigits || 0;\n  var precision = Math.pow(10, dflPrecision);\n\n  var deg = Math.floor(x / 3600);\n  var min = Math.floor((x - deg * 3600) / 60);\n  var sec = x - (deg * 3600) - (min * 60);\n  sec = Math.ceil(sec * precision) / precision;\n\n  if (sec >= 60) {\n    sec = 0;\n    min += 1;\n  }\n\n  if (min >= 60) {\n    min = 0;\n    deg += 1;\n  }\n\n  return deg + '\\u00b0 ' + ol.string.padNumber(min, 2) + '\\u2032 ' +\n    ol.string.padNumber(sec, 2, dflPrecision) + '\\u2033' +\n    (normalizedDegrees == 0 ? '' : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0));\n};\n\n\n/**\n * Transforms the given {@link ol.Coordinate} to a string using the given string\n * template. The strings `{x}` and `{y}` in the template will be replaced with\n * the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var template = 'Coordinate is ({x}|{y}).';\n *     var out = ol.coordinate.format(coord, template);\n *     // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var template = 'Coordinate is ({x}|{y}).';\n *     var out = ol.coordinate.format(coord, template, 2);\n *     // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {ol.Coordinate|undefined} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n *     that will be replaced by first and second coordinate values.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nol.coordinate.format = function(coordinate, template, opt_fractionDigits) {\n  if (coordinate) {\n    return template\n        .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n        .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n  } else {\n    return '';\n  }\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate1 First coordinate.\n * @param {ol.Coordinate} coordinate2 Second coordinate.\n * @return {boolean} Whether the passed coordinates are equal.\n */\nol.coordinate.equals = function(coordinate1, coordinate2) {\n  var equals = true;\n  for (var i = coordinate1.length - 1; i >= 0; --i) {\n    if (coordinate1[i] != coordinate2[i]) {\n      equals = false;\n      break;\n    }\n  }\n  return equals;\n};\n\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n *     var coord = [7.85, 47.983333];\n *     var rotateRadians = Math.PI / 2; // 90 degrees\n *     ol.coordinate.rotate(coord, rotateRadians);\n *     // coord is now [-47.983333, 7.85]\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {ol.Coordinate} Coordinate.\n * @api\n */\nol.coordinate.rotate = function(coordinate, angle) {\n  var cosAngle = Math.cos(angle);\n  var sinAngle = Math.sin(angle);\n  var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n  var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n  coordinate[0] = x;\n  coordinate[1] = y;\n  return coordinate;\n};\n\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     var coord = [7.85, 47.983333];\n *     var scale = 1.2;\n *     ol.coordinate.scale(coord, scale);\n *     // coord is now [9.42, 57.5799996]\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {ol.Coordinate} Coordinate.\n */\nol.coordinate.scale = function(coordinate, scale) {\n  coordinate[0] *= scale;\n  coordinate[1] *= scale;\n  return coordinate;\n};\n\n\n/**\n * Subtract `delta` to `coordinate`. `coordinate` is modified in place and\n * returned by the function.\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.Coordinate} delta Delta.\n * @return {ol.Coordinate} Coordinate.\n */\nol.coordinate.sub = function(coordinate, delta) {\n  coordinate[0] -= delta[0];\n  coordinate[1] -= delta[1];\n  return coordinate;\n};\n\n\n/**\n * @param {ol.Coordinate} coord1 First coordinate.\n * @param {ol.Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nol.coordinate.squaredDistance = function(coord1, coord2) {\n  var dx = coord1[0] - coord2[0];\n  var dy = coord1[1] - coord2[1];\n  return dx * dx + dy * dy;\n};\n\n\n/**\n * @param {ol.Coordinate} coord1 First coordinate.\n * @param {ol.Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nol.coordinate.distance = function(coord1, coord2) {\n  return Math.sqrt(ol.coordinate.squaredDistance(coord1, coord2));\n};\n\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {ol.Coordinate} coordinate Coordinate of the point.\n * @param {Array.<ol.Coordinate>} segment Line segment (2 coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nol.coordinate.squaredDistanceToSegment = function(coordinate, segment) {\n  return ol.coordinate.squaredDistance(coordinate,\n      ol.coordinate.closestOnSegment(coordinate, segment));\n};\n\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var out = ol.coordinate.toStringHDMS(coord);\n *     // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     var coord = [7.85, 47.983333];\n *     var out = ol.coordinate.toStringHDMS(coord, 1);\n *     // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {ol.Coordinate|undefined} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nol.coordinate.toStringHDMS = function(coordinate, opt_fractionDigits) {\n  if (coordinate) {\n    return ol.coordinate.degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) + ' ' +\n        ol.coordinate.degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits);\n  } else {\n    return '';\n  }\n};\n\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n *     var coord = [7.85, 47.983333];\n *     var out = ol.coordinate.toStringXY(coord);\n *     // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     var coord = [7.85, 47.983333];\n *     var out = ol.coordinate.toStringXY(coord, 1);\n *     // out is now '7.8, 48.0'\n *\n * @param {ol.Coordinate|undefined} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nol.coordinate.toStringXY = function(coordinate, opt_fractionDigits) {\n  return ol.coordinate.format(coordinate, '{x}, {y}', opt_fractionDigits);\n};\n\ngoog.provide('ol.easing');\n\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nol.easing.easeIn = function(t) {\n  return Math.pow(t, 3);\n};\n\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nol.easing.easeOut = function(t) {\n  return 1 - ol.easing.easeIn(1 - t);\n};\n\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nol.easing.inAndOut = function(t) {\n  return 3 * t * t - 2 * t * t * t;\n};\n\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nol.easing.linear = function(t) {\n  return t;\n};\n\n\n/**\n * Start slow, speed up, and at the very end slow down again.  This has the\n * same general behavior as {@link ol.easing.inAndOut}, but the final slowdown\n * is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nol.easing.upAndDown = function(t) {\n  if (t < 0.5) {\n    return ol.easing.inAndOut(2 * t);\n  } else {\n    return 1 - ol.easing.inAndOut(2 * (t - 0.5));\n  }\n};\n\ngoog.provide('ol.geom.GeometryLayout');\n\n\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nol.geom.GeometryLayout = {\n  XY: 'XY',\n  XYZ: 'XYZ',\n  XYM: 'XYM',\n  XYZM: 'XYZM'\n};\n\ngoog.provide('ol.functions');\n\n/**\n * Always returns true.\n * @returns {boolean} true.\n */\nol.functions.TRUE = function() {\n  return true;\n};\n\n/**\n * Always returns false.\n * @returns {boolean} false.\n */\nol.functions.FALSE = function() {\n  return false;\n};\n\ngoog.provide('ol.geom.flat.transform');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {ol.Transform} transform Transform.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Transformed coordinates.\n */\nol.geom.flat.transform.transform2D = function(flatCoordinates, offset, end, stride, transform, opt_dest) {\n  var dest = opt_dest ? opt_dest : [];\n  var i = 0;\n  var j;\n  for (j = offset; j < end; j += stride) {\n    var x = flatCoordinates[j];\n    var y = flatCoordinates[j + 1];\n    dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n    dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n  }\n  if (opt_dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array.<number>} anchor Rotation anchor point.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Transformed coordinates.\n */\nol.geom.flat.transform.rotate = function(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {\n  var dest = opt_dest ? opt_dest : [];\n  var cos = Math.cos(angle);\n  var sin = Math.sin(angle);\n  var anchorX = anchor[0];\n  var anchorY = anchor[1];\n  var i = 0;\n  for (var j = offset; j < end; j += stride) {\n    var deltaX = flatCoordinates[j] - anchorX;\n    var deltaY = flatCoordinates[j + 1] - anchorY;\n    dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n    dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n    for (var k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (opt_dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n};\n\n\n/**\n * Scale the coordinates.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array.<number>} anchor Scale anchor point.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Transformed coordinates.\n */\nol.geom.flat.transform.scale = function(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {\n  var dest = opt_dest ? opt_dest : [];\n  var anchorX = anchor[0];\n  var anchorY = anchor[1];\n  var i = 0;\n  for (var j = offset; j < end; j += stride) {\n    var deltaX = flatCoordinates[j] - anchorX;\n    var deltaY = flatCoordinates[j + 1] - anchorY;\n    dest[i++] = anchorX + sx * deltaX;\n    dest[i++] = anchorY + sy * deltaY;\n    for (var k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (opt_dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Transformed coordinates.\n */\nol.geom.flat.transform.translate = function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {\n  var dest = opt_dest ? opt_dest : [];\n  var i = 0;\n  var j, k;\n  for (j = offset; j < end; j += stride) {\n    dest[i++] = flatCoordinates[j] + deltaX;\n    dest[i++] = flatCoordinates[j + 1] + deltaY;\n    for (k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (opt_dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n};\n\ngoog.provide('ol.transform');\n\ngoog.require('ol.asserts');\n\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3x3 martrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n\n/**\n * @private\n * @type {ol.Transform}\n */\nol.transform.tmp_ = new Array(6);\n\n\n/**\n * Create an identity transform.\n * @return {!ol.Transform} Identity transform.\n */\nol.transform.create = function() {\n  return [1, 0, 0, 1, 0, 0];\n};\n\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!ol.Transform} transform Transform.\n * @return {!ol.Transform} Transform.\n */\nol.transform.reset = function(transform) {\n  return ol.transform.set(transform, 1, 0, 0, 1, 0, 0);\n};\n\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!ol.Transform} transform1 Transform parameters of matrix 1.\n * @param {!ol.Transform} transform2 Transform parameters of matrix 2.\n * @return {!ol.Transform} transform1 multiplied with transform2.\n */\nol.transform.multiply = function(transform1, transform2) {\n  var a1 = transform1[0];\n  var b1 = transform1[1];\n  var c1 = transform1[2];\n  var d1 = transform1[3];\n  var e1 = transform1[4];\n  var f1 = transform1[5];\n  var a2 = transform2[0];\n  var b2 = transform2[1];\n  var c2 = transform2[2];\n  var d2 = transform2[3];\n  var e2 = transform2[4];\n  var f2 = transform2[5];\n\n  transform1[0] = a1 * a2 + c1 * b2;\n  transform1[1] = b1 * a2 + d1 * b2;\n  transform1[2] = a1 * c2 + c1 * d2;\n  transform1[3] = b1 * c2 + d1 * d2;\n  transform1[4] = a1 * e2 + c1 * f2 + e1;\n  transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n  return transform1;\n};\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!ol.Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!ol.Transform} Matrix with transform applied.\n */\nol.transform.set = function(transform, a, b, c, d, e, f) {\n  transform[0] = a;\n  transform[1] = b;\n  transform[2] = c;\n  transform[3] = d;\n  transform[4] = e;\n  transform[5] = f;\n  return transform;\n};\n\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!ol.Transform} transform1 Matrix to set transform to.\n * @param {!ol.Transform} transform2 Matrix to set transform from.\n * @return {!ol.Transform} transform1 with transform from transform2 applied.\n */\nol.transform.setFromArray = function(transform1, transform2) {\n  transform1[0] = transform2[0];\n  transform1[1] = transform2[1];\n  transform1[2] = transform2[2];\n  transform1[3] = transform2[3];\n  transform1[4] = transform2[4];\n  transform1[5] = transform2[5];\n  return transform1;\n};\n\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {ol.Transform} transform The transformation.\n * @param {ol.Coordinate|ol.Pixel} coordinate The coordinate to transform.\n * @return {ol.Coordinate|ol.Pixel} return coordinate so that operations can be\n *     chained together.\n */\nol.transform.apply = function(transform, coordinate) {\n  var x = coordinate[0], y = coordinate[1];\n  coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n  coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n  return coordinate;\n};\n\n\n/**\n * Applies rotation to the given transform.\n * @param {!ol.Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!ol.Transform} The rotated transform.\n */\nol.transform.rotate = function(transform, angle) {\n  var cos = Math.cos(angle);\n  var sin = Math.sin(angle);\n  return ol.transform.multiply(transform,\n      ol.transform.set(ol.transform.tmp_, cos, sin, -sin, cos, 0, 0));\n};\n\n\n/**\n * Applies scale to a given transform.\n * @param {!ol.Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!ol.Transform} The scaled transform.\n */\nol.transform.scale = function(transform, x, y) {\n  return ol.transform.multiply(transform,\n      ol.transform.set(ol.transform.tmp_, x, 0, 0, y, 0, 0));\n};\n\n\n/**\n * Applies translation to the given transform.\n * @param {!ol.Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!ol.Transform} The translated transform.\n */\nol.transform.translate = function(transform, dx, dy) {\n  return ol.transform.multiply(transform,\n      ol.transform.set(ol.transform.tmp_, 1, 0, 0, 1, dx, dy));\n};\n\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!ol.Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!ol.Transform} The composite transform.\n */\nol.transform.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n  var sin = Math.sin(angle);\n  var cos = Math.cos(angle);\n  transform[0] = sx * cos;\n  transform[1] = sy * sin;\n  transform[2] = -sx * sin;\n  transform[3] = sy * cos;\n  transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n  transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n  return transform;\n};\n\n\n/**\n * Invert the given transform.\n * @param {!ol.Transform} transform Transform.\n * @return {!ol.Transform} Inverse of the transform.\n */\nol.transform.invert = function(transform) {\n  var det = ol.transform.determinant(transform);\n  ol.asserts.assert(det !== 0, 32); // Transformation matrix cannot be inverted\n\n  var a = transform[0];\n  var b = transform[1];\n  var c = transform[2];\n  var d = transform[3];\n  var e = transform[4];\n  var f = transform[5];\n\n  transform[0] = d / det;\n  transform[1] = -b / det;\n  transform[2] = -c / det;\n  transform[3] = a / det;\n  transform[4] = (c * f - d * e) / det;\n  transform[5] = -(a * f - b * e) / det;\n\n  return transform;\n};\n\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!ol.Transform} mat Matrix.\n * @return {number} Determinant.\n */\nol.transform.determinant = function(mat) {\n  return mat[0] * mat[3] - mat[1] * mat[2];\n};\n\ngoog.provide('ol.geom.Geometry');\n\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Units');\ngoog.require('ol.transform');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @constructor\n * @abstract\n * @extends {ol.Object}\n * @api\n */\nol.geom.Geometry = function() {\n\n  ol.Object.call(this);\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = ol.extent.createEmpty();\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.extentRevision_ = -1;\n\n  /**\n   * @protected\n   * @type {Object.<string, ol.geom.Geometry>}\n   */\n  this.simplifiedGeometryCache = {};\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.simplifiedGeometryRevision = 0;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.tmpTransform_ = ol.transform.create();\n\n};\nol.inherits(ol.geom.Geometry, ol.Object);\n\n\n/**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!ol.geom.Geometry} Clone.\n */\nol.geom.Geometry.prototype.clone = function() {};\n\n\n/**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {ol.Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\nol.geom.Geometry.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {};\n\n\n/**\n * Return the closest point of the geometry to the passed point as\n * {@link ol.Coordinate coordinate}.\n * @param {ol.Coordinate} point Point.\n * @param {ol.Coordinate=} opt_closestPoint Closest point.\n * @return {ol.Coordinate} Closest point.\n * @api\n */\nol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) {\n  var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n  this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n  return closestPoint;\n};\n\n\n/**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\nol.geom.Geometry.prototype.intersectsCoordinate = function(coordinate) {\n  return this.containsXY(coordinate[0], coordinate[1]);\n};\n\n\n/**\n * @abstract\n * @param {ol.Extent} extent Extent.\n * @protected\n * @return {ol.Extent} extent Extent.\n */\nol.geom.Geometry.prototype.computeExtent = function(extent) {};\n\n\n/**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nol.geom.Geometry.prototype.containsXY = ol.functions.FALSE;\n\n\n/**\n * Get the extent of the geometry.\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} extent Extent.\n * @api\n */\nol.geom.Geometry.prototype.getExtent = function(opt_extent) {\n  if (this.extentRevision_ != this.getRevision()) {\n    this.extent_ = this.computeExtent(this.extent_);\n    this.extentRevision_ = this.getRevision();\n  }\n  return ol.extent.returnOrUpdate(this.extent_, opt_extent);\n};\n\n\n/**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {ol.Coordinate} anchor The rotation center.\n * @api\n */\nol.geom.Geometry.prototype.rotate = function(angle, anchor) {};\n\n\n/**\n * Scale the geometry (with an optional origin).  This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number=} opt_sy The scaling factor in the y-direction (defaults to\n *     sx).\n * @param {ol.Coordinate=} opt_anchor The scale origin (defaults to the center\n *     of the geometry extent).\n * @api\n */\nol.geom.Geometry.prototype.scale = function(sx, opt_sy, opt_anchor) {};\n\n\n/**\n * Create a simplified version of this geometry.  For linestrings, this uses\n * the the {@link\n * https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\n * Douglas Peucker} algorithm.  For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @function\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {ol.geom.Geometry} A new, simplified version of the original\n *     geometry.\n * @api\n */\nol.geom.Geometry.prototype.simplify = function(tolerance) {\n  return this.getSimplifiedGeometry(tolerance * tolerance);\n};\n\n\n/**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * @see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {ol.geom.Geometry} Simplified geometry.\n */\nol.geom.Geometry.prototype.getSimplifiedGeometry = function(squaredTolerance) {};\n\n\n/**\n * Get the type of this geometry.\n * @abstract\n * @return {ol.geom.GeometryType} Geometry type.\n */\nol.geom.Geometry.prototype.getType = function() {};\n\n\n/**\n * Apply a transform function to each coordinate of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {ol.TransformFunction} transformFn Transform.\n */\nol.geom.Geometry.prototype.applyTransform = function(transformFn) {};\n\n\n/**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {ol.Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\nol.geom.Geometry.prototype.intersectsExtent = function(extent) {};\n\n\n/**\n * Translate the geometry.  This modifies the geometry coordinates in place.  If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n */\nol.geom.Geometry.prototype.translate = function(deltaX, deltaY) {};\n\n\n/**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {ol.ProjectionLike} source The current projection.  Can be a\n *     string identifier or a {@link ol.proj.Projection} object.\n * @param {ol.ProjectionLike} destination The desired projection.  Can be a\n *     string identifier or a {@link ol.proj.Projection} object.\n * @return {ol.geom.Geometry} This geometry.  Note that original geometry is\n *     modified in place.\n * @api\n */\nol.geom.Geometry.prototype.transform = function(source, destination) {\n  var tmpTransform = this.tmpTransform_;\n  source = ol.proj.get(source);\n  var transformFn = source.getUnits() == ol.proj.Units.TILE_PIXELS ?\n    function(inCoordinates, outCoordinates, stride) {\n      var pixelExtent = source.getExtent();\n      var projectedExtent = source.getWorldExtent();\n      var scale = ol.extent.getHeight(projectedExtent) / ol.extent.getHeight(pixelExtent);\n      ol.transform.compose(tmpTransform,\n          projectedExtent[0], projectedExtent[3],\n          scale, -scale, 0,\n          0, 0);\n      ol.geom.flat.transform.transform2D(inCoordinates, 0, inCoordinates.length, stride,\n          tmpTransform, outCoordinates);\n      return ol.proj.getTransform(source, destination)(inCoordinates, outCoordinates, stride);\n    } :\n    ol.proj.getTransform(source, destination);\n  this.applyTransform(transformFn);\n  return this;\n};\n\ngoog.provide('ol.geom.SimpleGeometry');\n\ngoog.require('ol');\ngoog.require('ol.functions');\ngoog.require('ol.extent');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @constructor\n * @abstract\n * @extends {ol.geom.Geometry}\n * @api\n */\nol.geom.SimpleGeometry = function() {\n\n  ol.geom.Geometry.call(this);\n\n  /**\n   * @protected\n   * @type {ol.geom.GeometryLayout}\n   */\n  this.layout = ol.geom.GeometryLayout.XY;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.stride = 2;\n\n  /**\n   * @protected\n   * @type {Array.<number>}\n   */\n  this.flatCoordinates = null;\n\n};\nol.inherits(ol.geom.SimpleGeometry, ol.geom.Geometry);\n\n\n/**\n * @param {number} stride Stride.\n * @private\n * @return {ol.geom.GeometryLayout} layout Layout.\n */\nol.geom.SimpleGeometry.getLayoutForStride_ = function(stride) {\n  var layout;\n  if (stride == 2) {\n    layout = ol.geom.GeometryLayout.XY;\n  } else if (stride == 3) {\n    layout = ol.geom.GeometryLayout.XYZ;\n  } else if (stride == 4) {\n    layout = ol.geom.GeometryLayout.XYZM;\n  }\n  return /** @type {ol.geom.GeometryLayout} */ (layout);\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @return {number} Stride.\n */\nol.geom.SimpleGeometry.getStrideForLayout = function(layout) {\n  var stride;\n  if (layout == ol.geom.GeometryLayout.XY) {\n    stride = 2;\n  } else if (layout == ol.geom.GeometryLayout.XYZ || layout == ol.geom.GeometryLayout.XYM) {\n    stride = 3;\n  } else if (layout == ol.geom.GeometryLayout.XYZM) {\n    stride = 4;\n  }\n  return /** @type {number} */ (stride);\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.SimpleGeometry.prototype.containsXY = ol.functions.FALSE;\n\n\n/**\n * @inheritDoc\n */\nol.geom.SimpleGeometry.prototype.computeExtent = function(extent) {\n  return ol.extent.createOrUpdateFromFlatCoordinates(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      extent);\n};\n\n\n/**\n * @abstract\n * @return {Array} Coordinates.\n */\nol.geom.SimpleGeometry.prototype.getCoordinates = function() {};\n\n\n/**\n * Return the first coordinate of the geometry.\n * @return {ol.Coordinate} First coordinate.\n * @api\n */\nol.geom.SimpleGeometry.prototype.getFirstCoordinate = function() {\n  return this.flatCoordinates.slice(0, this.stride);\n};\n\n\n/**\n * @return {Array.<number>} Flat coordinates.\n */\nol.geom.SimpleGeometry.prototype.getFlatCoordinates = function() {\n  return this.flatCoordinates;\n};\n\n\n/**\n * Return the last coordinate of the geometry.\n * @return {ol.Coordinate} Last point.\n * @api\n */\nol.geom.SimpleGeometry.prototype.getLastCoordinate = function() {\n  return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);\n};\n\n\n/**\n * Return the {@link ol.geom.GeometryLayout layout} of the geometry.\n * @return {ol.geom.GeometryLayout} Layout.\n * @api\n */\nol.geom.SimpleGeometry.prototype.getLayout = function() {\n  return this.layout;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = function(squaredTolerance) {\n  if (this.simplifiedGeometryRevision != this.getRevision()) {\n    ol.obj.clear(this.simplifiedGeometryCache);\n    this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n    this.simplifiedGeometryRevision = this.getRevision();\n  }\n  // If squaredTolerance is negative or if we know that simplification will not\n  // have any effect then just return this.\n  if (squaredTolerance < 0 ||\n      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n       squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {\n    return this;\n  }\n  var key = squaredTolerance.toString();\n  if (this.simplifiedGeometryCache.hasOwnProperty(key)) {\n    return this.simplifiedGeometryCache[key];\n  } else {\n    var simplifiedGeometry =\n        this.getSimplifiedGeometryInternal(squaredTolerance);\n    var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n    if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n      this.simplifiedGeometryCache[key] = simplifiedGeometry;\n      return simplifiedGeometry;\n    } else {\n      // Simplification did not actually remove any coordinates.  We now know\n      // that any calls to getSimplifiedGeometry with a squaredTolerance less\n      // than or equal to the current squaredTolerance will also not have any\n      // effect.  This allows us to short circuit simplification (saving CPU\n      // cycles) and prevents the cache of simplified geometries from filling\n      // up with useless identical copies of this geometry (saving memory).\n      this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n      return this;\n    }\n  }\n};\n\n\n/**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {ol.geom.SimpleGeometry} Simplified geometry.\n * @protected\n */\nol.geom.SimpleGeometry.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  return this;\n};\n\n\n/**\n * @return {number} Stride.\n */\nol.geom.SimpleGeometry.prototype.getStride = function() {\n  return this.stride;\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @protected\n */\nol.geom.SimpleGeometry.prototype.setFlatCoordinatesInternal = function(layout, flatCoordinates) {\n  this.stride = ol.geom.SimpleGeometry.getStrideForLayout(layout);\n  this.layout = layout;\n  this.flatCoordinates = flatCoordinates;\n};\n\n\n/**\n * @abstract\n * @param {Array} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n */\nol.geom.SimpleGeometry.prototype.setCoordinates = function(coordinates, opt_layout) {};\n\n\n/**\n * @param {ol.geom.GeometryLayout|undefined} layout Layout.\n * @param {Array} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\nol.geom.SimpleGeometry.prototype.setLayout = function(layout, coordinates, nesting) {\n  /** @type {number} */\n  var stride;\n  if (layout) {\n    stride = ol.geom.SimpleGeometry.getStrideForLayout(layout);\n  } else {\n    var i;\n    for (i = 0; i < nesting; ++i) {\n      if (coordinates.length === 0) {\n        this.layout = ol.geom.GeometryLayout.XY;\n        this.stride = 2;\n        return;\n      } else {\n        coordinates = /** @type {Array} */ (coordinates[0]);\n      }\n    }\n    stride = coordinates.length;\n    layout = ol.geom.SimpleGeometry.getLayoutForStride_(stride);\n  }\n  this.layout = layout;\n  this.stride = stride;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {\n  if (this.flatCoordinates) {\n    transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n    this.changed();\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.SimpleGeometry.prototype.rotate = function(angle, anchor) {\n  var flatCoordinates = this.getFlatCoordinates();\n  if (flatCoordinates) {\n    var stride = this.getStride();\n    ol.geom.flat.transform.rotate(\n        flatCoordinates, 0, flatCoordinates.length,\n        stride, angle, anchor, flatCoordinates);\n    this.changed();\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.SimpleGeometry.prototype.scale = function(sx, opt_sy, opt_anchor) {\n  var sy = opt_sy;\n  if (sy === undefined) {\n    sy = sx;\n  }\n  var anchor = opt_anchor;\n  if (!anchor) {\n    anchor = ol.extent.getCenter(this.getExtent());\n  }\n  var flatCoordinates = this.getFlatCoordinates();\n  if (flatCoordinates) {\n    var stride = this.getStride();\n    ol.geom.flat.transform.scale(\n        flatCoordinates, 0, flatCoordinates.length,\n        stride, sx, sy, anchor, flatCoordinates);\n    this.changed();\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {\n  var flatCoordinates = this.getFlatCoordinates();\n  if (flatCoordinates) {\n    var stride = this.getStride();\n    ol.geom.flat.transform.translate(\n        flatCoordinates, 0, flatCoordinates.length, stride,\n        deltaX, deltaY, flatCoordinates);\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry.\n * @param {ol.Transform} transform Transform.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Transformed flat coordinates.\n */\nol.geom.SimpleGeometry.transform2D = function(simpleGeometry, transform, opt_dest) {\n  var flatCoordinates = simpleGeometry.getFlatCoordinates();\n  if (!flatCoordinates) {\n    return null;\n  } else {\n    var stride = simpleGeometry.getStride();\n    return ol.geom.flat.transform.transform2D(\n        flatCoordinates, 0, flatCoordinates.length, stride,\n        transform, opt_dest);\n  }\n};\n\ngoog.provide('ol.geom.flat.area');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nol.geom.flat.area.linearRing = function(flatCoordinates, offset, end, stride) {\n  var twiceArea = 0;\n  var x1 = flatCoordinates[end - stride];\n  var y1 = flatCoordinates[end - stride + 1];\n  for (; offset < end; offset += stride) {\n    var x2 = flatCoordinates[offset];\n    var y2 = flatCoordinates[offset + 1];\n    twiceArea += y1 * x2 - x1 * y2;\n    x1 = x2;\n    y1 = y2;\n  }\n  return twiceArea / 2;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nol.geom.flat.area.linearRings = function(flatCoordinates, offset, ends, stride) {\n  var area = 0;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    area += ol.geom.flat.area.linearRing(flatCoordinates, offset, end, stride);\n    offset = end;\n  }\n  return area;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nol.geom.flat.area.linearRingss = function(flatCoordinates, offset, endss, stride) {\n  var area = 0;\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    area +=\n        ol.geom.flat.area.linearRings(flatCoordinates, offset, ends, stride);\n    offset = ends[ends.length - 1];\n  }\n  return area;\n};\n\ngoog.provide('ol.geom.flat.closest');\n\ngoog.require('ol.math');\n\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y).  Extra\n * dimensions are linearly interpolated.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array.<number>} closestPoint Closest point.\n */\nol.geom.flat.closest.point = function(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {\n  var x1 = flatCoordinates[offset1];\n  var y1 = flatCoordinates[offset1 + 1];\n  var dx = flatCoordinates[offset2] - x1;\n  var dy = flatCoordinates[offset2 + 1] - y1;\n  var i, offset;\n  if (dx === 0 && dy === 0) {\n    offset = offset1;\n  } else {\n    var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n    if (t > 1) {\n      offset = offset2;\n    } else if (t > 0) {\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = ol.math.lerp(flatCoordinates[offset1 + i],\n            flatCoordinates[offset2 + i], t);\n      }\n      closestPoint.length = stride;\n      return;\n    } else {\n      offset = offset1;\n    }\n  }\n  for (i = 0; i < stride; ++i) {\n    closestPoint[i] = flatCoordinates[offset + i];\n  }\n  closestPoint.length = stride;\n};\n\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxSquaredDelta Max squared delta.\n * @return {number} Max squared delta.\n */\nol.geom.flat.closest.getMaxSquaredDelta = function(flatCoordinates, offset, end, stride, maxSquaredDelta) {\n  var x1 = flatCoordinates[offset];\n  var y1 = flatCoordinates[offset + 1];\n  for (offset += stride; offset < end; offset += stride) {\n    var x2 = flatCoordinates[offset];\n    var y2 = flatCoordinates[offset + 1];\n    var squaredDelta = ol.math.squaredDistance(x1, y1, x2, y2);\n    if (squaredDelta > maxSquaredDelta) {\n      maxSquaredDelta = squaredDelta;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  return maxSquaredDelta;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxSquaredDelta Max squared delta.\n * @return {number} Max squared delta.\n */\nol.geom.flat.closest.getsMaxSquaredDelta = function(flatCoordinates, offset, ends, stride, maxSquaredDelta) {\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    maxSquaredDelta = ol.geom.flat.closest.getMaxSquaredDelta(\n        flatCoordinates, offset, end, stride, maxSquaredDelta);\n    offset = end;\n  }\n  return maxSquaredDelta;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxSquaredDelta Max squared delta.\n * @return {number} Max squared delta.\n */\nol.geom.flat.closest.getssMaxSquaredDelta = function(flatCoordinates, offset, endss, stride, maxSquaredDelta) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    maxSquaredDelta = ol.geom.flat.closest.getsMaxSquaredDelta(\n        flatCoordinates, offset, ends, stride, maxSquaredDelta);\n    offset = ends[ends.length - 1];\n  }\n  return maxSquaredDelta;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array.<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array.<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nol.geom.flat.closest.getClosestPoint = function(flatCoordinates, offset, end,\n    stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n    opt_tmpPoint) {\n  if (offset == end) {\n    return minSquaredDistance;\n  }\n  var i, squaredDistance;\n  if (maxDelta === 0) {\n    // All points are identical, so just test the first point.\n    squaredDistance = ol.math.squaredDistance(\n        x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);\n    if (squaredDistance < minSquaredDistance) {\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = flatCoordinates[offset + i];\n      }\n      closestPoint.length = stride;\n      return squaredDistance;\n    } else {\n      return minSquaredDistance;\n    }\n  }\n  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n  var index = offset + stride;\n  while (index < end) {\n    ol.geom.flat.closest.point(\n        flatCoordinates, index - stride, index, stride, x, y, tmpPoint);\n    squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);\n    if (squaredDistance < minSquaredDistance) {\n      minSquaredDistance = squaredDistance;\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = tmpPoint[i];\n      }\n      closestPoint.length = stride;\n      index += stride;\n    } else {\n      // Skip ahead multiple points, because we know that all the skipped\n      // points cannot be any closer than the closest point we have found so\n      // far.  We know this because we know how close the current point is, how\n      // close the closest point we have found so far is, and the maximum\n      // distance between consecutive points.  For example, if we're currently\n      // at distance 10, the best we've found so far is 3, and that the maximum\n      // distance between consecutive points is 2, then we'll need to skip at\n      // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n      // finding a closer point.  We use Math.max(..., 1) to ensure that we\n      // always advance at least one point, to avoid an infinite loop.\n      index += stride * Math.max(\n          ((Math.sqrt(squaredDistance) -\n            Math.sqrt(minSquaredDistance)) / maxDelta) | 0, 1);\n    }\n  }\n  if (isRing) {\n    // Check the closing segment.\n    ol.geom.flat.closest.point(\n        flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);\n    squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);\n    if (squaredDistance < minSquaredDistance) {\n      minSquaredDistance = squaredDistance;\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = tmpPoint[i];\n      }\n      closestPoint.length = stride;\n    }\n  }\n  return minSquaredDistance;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array.<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array.<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends,\n    stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n    opt_tmpPoint) {\n  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    minSquaredDistance = ol.geom.flat.closest.getClosestPoint(\n        flatCoordinates, offset, end, stride,\n        maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n    offset = end;\n  }\n  return minSquaredDistance;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array.<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array.<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nol.geom.flat.closest.getssClosestPoint = function(flatCoordinates, offset,\n    endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n    opt_tmpPoint) {\n  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    minSquaredDistance = ol.geom.flat.closest.getsClosestPoint(\n        flatCoordinates, offset, ends, stride,\n        maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n    offset = ends[ends.length - 1];\n  }\n  return minSquaredDistance;\n};\n\ngoog.provide('ol.geom.flat.deflate');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nol.geom.flat.deflate.coordinate = function(flatCoordinates, offset, coordinate, stride) {\n  var i, ii;\n  for (i = 0, ii = coordinate.length; i < ii; ++i) {\n    flatCoordinates[offset++] = coordinate[i];\n  }\n  return offset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nol.geom.flat.deflate.coordinates = function(flatCoordinates, offset, coordinates, stride) {\n  var i, ii;\n  for (i = 0, ii = coordinates.length; i < ii; ++i) {\n    var coordinate = coordinates[i];\n    var j;\n    for (j = 0; j < stride; ++j) {\n      flatCoordinates[offset++] = coordinate[j];\n    }\n  }\n  return offset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<ol.Coordinate>>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array.<number>=} opt_ends Ends.\n * @return {Array.<number>} Ends.\n */\nol.geom.flat.deflate.coordinatess = function(flatCoordinates, offset, coordinatess, stride, opt_ends) {\n  var ends = opt_ends ? opt_ends : [];\n  var i = 0;\n  var j, jj;\n  for (j = 0, jj = coordinatess.length; j < jj; ++j) {\n    var end = ol.geom.flat.deflate.coordinates(\n        flatCoordinates, offset, coordinatess[j], stride);\n    ends[i++] = end;\n    offset = end;\n  }\n  ends.length = i;\n  return ends;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array.<Array.<number>>=} opt_endss Endss.\n * @return {Array.<Array.<number>>} Endss.\n */\nol.geom.flat.deflate.coordinatesss = function(flatCoordinates, offset, coordinatesss, stride, opt_endss) {\n  var endss = opt_endss ? opt_endss : [];\n  var i = 0;\n  var j, jj;\n  for (j = 0, jj = coordinatesss.length; j < jj; ++j) {\n    var ends = ol.geom.flat.deflate.coordinatess(\n        flatCoordinates, offset, coordinatesss[j], stride, endss[i]);\n    endss[i++] = ends;\n    offset = ends[ends.length - 1];\n  }\n  endss.length = i;\n  return endss;\n};\n\ngoog.provide('ol.geom.flat.inflate');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array.<ol.Coordinate>=} opt_coordinates Coordinates.\n * @return {Array.<ol.Coordinate>} Coordinates.\n */\nol.geom.flat.inflate.coordinates = function(flatCoordinates, offset, end, stride, opt_coordinates) {\n  var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n  var i = 0;\n  var j;\n  for (j = offset; j < end; j += stride) {\n    coordinates[i++] = flatCoordinates.slice(j, j + stride);\n  }\n  coordinates.length = i;\n  return coordinates;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array.<Array.<ol.Coordinate>>=} opt_coordinatess Coordinatess.\n * @return {Array.<Array.<ol.Coordinate>>} Coordinatess.\n */\nol.geom.flat.inflate.coordinatess = function(flatCoordinates, offset, ends, stride, opt_coordinatess) {\n  var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n  var i = 0;\n  var j, jj;\n  for (j = 0, jj = ends.length; j < jj; ++j) {\n    var end = ends[j];\n    coordinatess[i++] = ol.geom.flat.inflate.coordinates(\n        flatCoordinates, offset, end, stride, coordinatess[i]);\n    offset = end;\n  }\n  coordinatess.length = i;\n  return coordinatess;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array.<Array.<Array.<ol.Coordinate>>>=} opt_coordinatesss\n *     Coordinatesss.\n * @return {Array.<Array.<Array.<ol.Coordinate>>>} Coordinatesss.\n */\nol.geom.flat.inflate.coordinatesss = function(flatCoordinates, offset, endss, stride, opt_coordinatesss) {\n  var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n  var i = 0;\n  var j, jj;\n  for (j = 0, jj = endss.length; j < jj; ++j) {\n    var ends = endss[j];\n    coordinatesss[i++] = ol.geom.flat.inflate.coordinatess(\n        flatCoordinates, offset, ends, stride, coordinatesss[i]);\n    offset = ends[ends.length - 1];\n  }\n  coordinatesss.length = i;\n  return coordinatesss;\n};\n\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n//    1. Redistributions of source code must retain the above copyright notice,\n//       this list of conditions and the following disclaimer.\n//\n//    2. Redistributions in binary form must reproduce the above copyright\n//       notice, this list of conditions and the following disclaimer in the\n//       documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\ngoog.provide('ol.geom.flat.simplify');\n\ngoog.require('ol.math');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array.<number>=} opt_simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @return {Array.<number>} Simplified line string.\n */\nol.geom.flat.simplify.lineString = function(flatCoordinates, offset, end,\n    stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {\n  var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ?\n    opt_simplifiedFlatCoordinates : [];\n  if (!highQuality) {\n    end = ol.geom.flat.simplify.radialDistance(flatCoordinates, offset, end,\n        stride, squaredTolerance,\n        simplifiedFlatCoordinates, 0);\n    flatCoordinates = simplifiedFlatCoordinates;\n    offset = 0;\n    stride = 2;\n  }\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(\n      flatCoordinates, offset, end, stride, squaredTolerance,\n      simplifiedFlatCoordinates, 0);\n  return simplifiedFlatCoordinates;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.douglasPeucker = function(flatCoordinates, offset, end,\n    stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n  var n = (end - offset) / stride;\n  if (n < 3) {\n    for (; offset < end; offset += stride) {\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n          flatCoordinates[offset];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n          flatCoordinates[offset + 1];\n    }\n    return simplifiedOffset;\n  }\n  /** @type {Array.<number>} */\n  var markers = new Array(n);\n  markers[0] = 1;\n  markers[n - 1] = 1;\n  /** @type {Array.<number>} */\n  var stack = [offset, end - stride];\n  var index = 0;\n  var i;\n  while (stack.length > 0) {\n    var last = stack.pop();\n    var first = stack.pop();\n    var maxSquaredDistance = 0;\n    var x1 = flatCoordinates[first];\n    var y1 = flatCoordinates[first + 1];\n    var x2 = flatCoordinates[last];\n    var y2 = flatCoordinates[last + 1];\n    for (i = first + stride; i < last; i += stride) {\n      var x = flatCoordinates[i];\n      var y = flatCoordinates[i + 1];\n      var squaredDistance = ol.math.squaredSegmentDistance(\n          x, y, x1, y1, x2, y2);\n      if (squaredDistance > maxSquaredDistance) {\n        index = i;\n        maxSquaredDistance = squaredDistance;\n      }\n    }\n    if (maxSquaredDistance > squaredTolerance) {\n      markers[(index - offset) / stride] = 1;\n      if (first + stride < index) {\n        stack.push(first, index);\n      }\n      if (index + stride < last) {\n        stack.push(index, last);\n      }\n    }\n  }\n  for (i = 0; i < n; ++i) {\n    if (markers[i]) {\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n          flatCoordinates[offset + i * stride];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n          flatCoordinates[offset + i * stride + 1];\n    }\n  }\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array.<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.douglasPeuckers = function(flatCoordinates, offset,\n    ends, stride, squaredTolerance, simplifiedFlatCoordinates,\n    simplifiedOffset, simplifiedEnds) {\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    simplifiedOffset = ol.geom.flat.simplify.douglasPeucker(\n        flatCoordinates, offset, end, stride, squaredTolerance,\n        simplifiedFlatCoordinates, simplifiedOffset);\n    simplifiedEnds.push(simplifiedOffset);\n    offset = end;\n  }\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.douglasPeuckerss = function(\n    flatCoordinates, offset, endss, stride, squaredTolerance,\n    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    var simplifiedEnds = [];\n    simplifiedOffset = ol.geom.flat.simplify.douglasPeuckers(\n        flatCoordinates, offset, ends, stride, squaredTolerance,\n        simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n    simplifiedEndss.push(simplifiedEnds);\n    offset = ends[ends.length - 1];\n  }\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.radialDistance = function(flatCoordinates, offset, end,\n    stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n  if (end <= offset + stride) {\n    // zero or one point, no simplification possible, so copy and return\n    for (; offset < end; offset += stride) {\n      simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n          flatCoordinates[offset + 1];\n    }\n    return simplifiedOffset;\n  }\n  var x1 = flatCoordinates[offset];\n  var y1 = flatCoordinates[offset + 1];\n  // copy first point\n  simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n  var x2 = x1;\n  var y2 = y1;\n  for (offset += stride; offset < end; offset += stride) {\n    x2 = flatCoordinates[offset];\n    y2 = flatCoordinates[offset + 1];\n    if (ol.math.squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n      // copy point at offset\n      simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n      simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n      x1 = x2;\n      y1 = y2;\n    }\n  }\n  if (x2 != x1 || y2 != y1) {\n    // copy last point\n    simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n  }\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nol.geom.flat.simplify.snap = function(value, tolerance) {\n  return tolerance * Math.round(value / tolerance);\n};\n\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded.  This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string.  This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons.  This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.quantize = function(flatCoordinates, offset, end, stride,\n    tolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n  // do nothing if the line is empty\n  if (offset == end) {\n    return simplifiedOffset;\n  }\n  // snap the first coordinate (P1)\n  var x1 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);\n  var y1 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);\n  offset += stride;\n  // add the first coordinate to the output\n  simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n  // find the next coordinate that does not snap to the same value as the first\n  // coordinate (P2)\n  var x2, y2;\n  do {\n    x2 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);\n    y2 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);\n    offset += stride;\n    if (offset == end) {\n      // all coordinates snap to the same value, the line collapses to a point\n      // push the last snapped value anyway to ensure that the output contains\n      // at least two points\n      // FIXME should we really return at least two points anyway?\n      simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n      simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n      return simplifiedOffset;\n    }\n  } while (x2 == x1 && y2 == y1);\n  while (offset < end) {\n    var x3, y3;\n    // snap the next coordinate (P3)\n    x3 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);\n    y3 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);\n    offset += stride;\n    // skip P3 if it is equal to P2\n    if (x3 == x2 && y3 == y2) {\n      continue;\n    }\n    // calculate the delta between P1 and P2\n    var dx1 = x2 - x1;\n    var dy1 = y2 - y1;\n    // calculate the delta between P3 and P1\n    var dx2 = x3 - x1;\n    var dy2 = y3 - y1;\n    // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n    // P1 in the same direction then P2 is on the straight line between P1 and\n    // P3\n    if ((dx1 * dy2 == dy1 * dx2) &&\n        ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n        ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) {\n      // discard P2 and set P2 = P3\n      x2 = x3;\n      y2 = y3;\n      continue;\n    }\n    // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n    // between P3 and P1 or on the opposite half of the line to P2.  add P2,\n    // and continue with P1 = P2 and P2 = P3\n    simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n    x1 = x2;\n    y1 = y2;\n    x2 = x3;\n    y2 = y3;\n  }\n  // add the last point (P2)\n  simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array.<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.quantizes = function(\n    flatCoordinates, offset, ends, stride,\n    tolerance,\n    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    simplifiedOffset = ol.geom.flat.simplify.quantize(\n        flatCoordinates, offset, end, stride,\n        tolerance,\n        simplifiedFlatCoordinates, simplifiedOffset);\n    simplifiedEnds.push(simplifiedOffset);\n    offset = end;\n  }\n  return simplifiedOffset;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nol.geom.flat.simplify.quantizess = function(\n    flatCoordinates, offset, endss, stride,\n    tolerance,\n    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    var simplifiedEnds = [];\n    simplifiedOffset = ol.geom.flat.simplify.quantizes(\n        flatCoordinates, offset, ends, stride,\n        tolerance,\n        simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n    simplifiedEndss.push(simplifiedEnds);\n    offset = ends[ends.length - 1];\n  }\n  return simplifiedOffset;\n};\n\ngoog.provide('ol.geom.LinearRing');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.area');\ngoog.require('ol.geom.flat.closest');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.simplify');\n\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.LinearRing = function(coordinates, opt_layout) {\n\n  ol.geom.SimpleGeometry.call(this);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDelta_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDeltaRevision_ = -1;\n\n  this.setCoordinates(coordinates, opt_layout);\n\n};\nol.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry);\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.LinearRing} Clone.\n * @override\n * @api\n */\nol.geom.LinearRing.prototype.clone = function() {\n  var linearRing = new ol.geom.LinearRing(null);\n  linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice());\n  return linearRing;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.LinearRing.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  if (this.maxDeltaRevision_ != this.getRevision()) {\n    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(\n        this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n    this.maxDeltaRevision_ = this.getRevision();\n  }\n  return ol.geom.flat.closest.getClosestPoint(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n};\n\n\n/**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\nol.geom.LinearRing.prototype.getArea = function() {\n  return ol.geom.flat.area.linearRing(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n};\n\n\n/**\n * Return the coordinates of the linear ring.\n * @return {Array.<ol.Coordinate>} Coordinates.\n * @override\n * @api\n */\nol.geom.LinearRing.prototype.getCoordinates = function() {\n  return ol.geom.flat.inflate.coordinates(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.LinearRing.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  var simplifiedFlatCoordinates = [];\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      squaredTolerance, simplifiedFlatCoordinates, 0);\n  var simplifiedLinearRing = new ol.geom.LinearRing(null);\n  simplifiedLinearRing.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);\n  return simplifiedLinearRing;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.LinearRing.prototype.getType = function() {\n  return ol.geom.GeometryType.LINEAR_RING;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.LinearRing.prototype.intersectsExtent = function(extent) {};\n\n\n/**\n * Set the coordinates of the linear ring.\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.LinearRing.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);\n  } else {\n    this.setLayout(opt_layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(\n        this.flatCoordinates, 0, coordinates, this.stride);\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n */\nol.geom.LinearRing.prototype.setFlatCoordinates = function(layout, flatCoordinates) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.changed();\n};\n\ngoog.provide('ol.geom.Point');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {ol.Coordinate} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.Point = function(coordinates, opt_layout) {\n  ol.geom.SimpleGeometry.call(this);\n  this.setCoordinates(coordinates, opt_layout);\n};\nol.inherits(ol.geom.Point, ol.geom.SimpleGeometry);\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.Point} Clone.\n * @override\n * @api\n */\nol.geom.Point.prototype.clone = function() {\n  var point = new ol.geom.Point(null);\n  point.setFlatCoordinates(this.layout, this.flatCoordinates.slice());\n  return point;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Point.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  var flatCoordinates = this.flatCoordinates;\n  var squaredDistance = ol.math.squaredDistance(\n      x, y, flatCoordinates[0], flatCoordinates[1]);\n  if (squaredDistance < minSquaredDistance) {\n    var stride = this.stride;\n    var i;\n    for (i = 0; i < stride; ++i) {\n      closestPoint[i] = flatCoordinates[i];\n    }\n    closestPoint.length = stride;\n    return squaredDistance;\n  } else {\n    return minSquaredDistance;\n  }\n};\n\n\n/**\n * Return the coordinate of the point.\n * @return {ol.Coordinate} Coordinates.\n * @override\n * @api\n */\nol.geom.Point.prototype.getCoordinates = function() {\n  return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Point.prototype.computeExtent = function(extent) {\n  return ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Point.prototype.getType = function() {\n  return ol.geom.GeometryType.POINT;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Point.prototype.intersectsExtent = function(extent) {\n  return ol.extent.containsXY(extent,\n      this.flatCoordinates[0], this.flatCoordinates[1]);\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);\n  } else {\n    this.setLayout(opt_layout, coordinates, 0);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = ol.geom.flat.deflate.coordinate(\n        this.flatCoordinates, 0, coordinates, this.stride);\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n */\nol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.changed();\n};\n\ngoog.provide('ol.geom.flat.contains');\n\ngoog.require('ol.extent');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nol.geom.flat.contains.linearRingContainsExtent = function(flatCoordinates, offset, end, stride, extent) {\n  var outside = ol.extent.forEachCorner(extent,\n      /**\n       * @param {ol.Coordinate} coordinate Coordinate.\n       * @return {boolean} Contains (x, y).\n       */\n      function(coordinate) {\n        return !ol.geom.flat.contains.linearRingContainsXY(flatCoordinates,\n            offset, end, stride, coordinate[0], coordinate[1]);\n      });\n  return !outside;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nol.geom.flat.contains.linearRingContainsXY = function(flatCoordinates, offset, end, stride, x, y) {\n  // http://geomalgorithms.com/a03-_inclusion.html\n  // Copyright 2000 softSurfer, 2012 Dan Sunday\n  // This code may be freely used and modified for any purpose\n  // providing that this copyright notice is included with it.\n  // SoftSurfer makes no warranty for this code, and cannot be held\n  // liable for any real or imagined damage resulting from its use.\n  // Users of this code must verify correctness for their application.\n  var wn = 0;\n  var x1 = flatCoordinates[end - stride];\n  var y1 = flatCoordinates[end - stride + 1];\n  for (; offset < end; offset += stride) {\n    var x2 = flatCoordinates[offset];\n    var y2 = flatCoordinates[offset + 1];\n    if (y1 <= y) {\n      if (y2 > y && ((x2 - x1) * (y - y1)) - ((x - x1) * (y2 - y1)) > 0) {\n        wn++;\n      }\n    } else if (y2 <= y && ((x2 - x1) * (y - y1)) - ((x - x1) * (y2 - y1)) < 0) {\n      wn--;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  return wn !== 0;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nol.geom.flat.contains.linearRingsContainsXY = function(flatCoordinates, offset, ends, stride, x, y) {\n  if (ends.length === 0) {\n    return false;\n  }\n  if (!ol.geom.flat.contains.linearRingContainsXY(\n      flatCoordinates, offset, ends[0], stride, x, y)) {\n    return false;\n  }\n  var i, ii;\n  for (i = 1, ii = ends.length; i < ii; ++i) {\n    if (ol.geom.flat.contains.linearRingContainsXY(\n        flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nol.geom.flat.contains.linearRingssContainsXY = function(flatCoordinates, offset, endss, stride, x, y) {\n  if (endss.length === 0) {\n    return false;\n  }\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    if (ol.geom.flat.contains.linearRingsContainsXY(\n        flatCoordinates, offset, ends, stride, x, y)) {\n      return true;\n    }\n    offset = ends[ends.length - 1];\n  }\n  return false;\n};\n\ngoog.provide('ol.geom.flat.interiorpoint');\n\ngoog.require('ol.array');\ngoog.require('ol.geom.flat.contains');\n\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array.<number>} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,\n    ends, stride, flatCenters, flatCentersOffset, opt_dest) {\n  var i, ii, x, x1, x2, y1, y2;\n  var y = flatCenters[flatCentersOffset + 1];\n  /** @type {Array.<number>} */\n  var intersections = [];\n  // Calculate intersections with the horizontal line\n  for (var r = 0, rr = ends.length; r < rr; ++r) {\n    var end = ends[r];\n    x1 = flatCoordinates[end - stride];\n    y1 = flatCoordinates[end - stride + 1];\n    for (i = offset; i < end; i += stride) {\n      x2 = flatCoordinates[i];\n      y2 = flatCoordinates[i + 1];\n      if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n        x = (y - y1) / (y2 - y1) * (x2 - x1) + x1;\n        intersections.push(x);\n      }\n      x1 = x2;\n      y1 = y2;\n    }\n  }\n  // Find the longest segment of the horizontal line that has its center point\n  // inside the linear ring.\n  var pointX = NaN;\n  var maxSegmentLength = -Infinity;\n  intersections.sort(ol.array.numberSafeCompareFunction);\n  x1 = intersections[0];\n  for (i = 1, ii = intersections.length; i < ii; ++i) {\n    x2 = intersections[i];\n    var segmentLength = Math.abs(x2 - x1);\n    if (segmentLength > maxSegmentLength) {\n      x = (x1 + x2) / 2;\n      if (ol.geom.flat.contains.linearRingsContainsXY(\n          flatCoordinates, offset, ends, stride, x, y)) {\n        pointX = x;\n        maxSegmentLength = segmentLength;\n      }\n    }\n    x1 = x2;\n  }\n  if (isNaN(pointX)) {\n    // There is no horizontal line that has its center point inside the linear\n    // ring.  Use the center of the the linear ring's extent.\n    pointX = flatCenters[flatCentersOffset];\n  }\n  if (opt_dest) {\n    opt_dest.push(pointX, y, maxSegmentLength);\n    return opt_dest;\n  } else {\n    return [pointX, y, maxSegmentLength];\n  }\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array.<number>} flatCenters Flat centers.\n * @return {Array.<number>} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nol.geom.flat.interiorpoint.linearRingss = function(flatCoordinates, offset, endss, stride, flatCenters) {\n  var interiorPoints = [];\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    interiorPoints = ol.geom.flat.interiorpoint.linearRings(flatCoordinates,\n        offset, ends, stride, flatCenters, 2 * i, interiorPoints);\n    offset = ends[ends.length - 1];\n  }\n  return interiorPoints;\n};\n\ngoog.provide('ol.geom.flat.segments');\n\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(this: S, ol.Coordinate, ol.Coordinate): T} callback Function\n *     called for each segment.\n * @param {S=} opt_this The object to be used as the value of 'this'\n *     within callback.\n * @return {T|boolean} Value.\n * @template T,S\n */\nol.geom.flat.segments.forEach = function(flatCoordinates, offset, end, stride, callback, opt_this) {\n  var point1 = [flatCoordinates[offset], flatCoordinates[offset + 1]];\n  var point2 = [];\n  var ret;\n  for (; (offset + stride) < end; offset += stride) {\n    point2[0] = flatCoordinates[offset + stride];\n    point2[1] = flatCoordinates[offset + stride + 1];\n    ret = callback.call(opt_this, point1, point2);\n    if (ret) {\n      return ret;\n    }\n    point1[0] = point2[0];\n    point1[1] = point2[1];\n  }\n  return false;\n};\n\ngoog.provide('ol.geom.flat.intersectsextent');\n\ngoog.require('ol.extent');\ngoog.require('ol.geom.flat.contains');\ngoog.require('ol.geom.flat.segments');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nol.geom.flat.intersectsextent.lineString = function(flatCoordinates, offset, end, stride, extent) {\n  var coordinatesExtent = ol.extent.extendFlatCoordinates(\n      ol.extent.createEmpty(), flatCoordinates, offset, end, stride);\n  if (!ol.extent.intersects(extent, coordinatesExtent)) {\n    return false;\n  }\n  if (ol.extent.containsExtent(extent, coordinatesExtent)) {\n    return true;\n  }\n  if (coordinatesExtent[0] >= extent[0] &&\n      coordinatesExtent[2] <= extent[2]) {\n    return true;\n  }\n  if (coordinatesExtent[1] >= extent[1] &&\n      coordinatesExtent[3] <= extent[3]) {\n    return true;\n  }\n  return ol.geom.flat.segments.forEach(flatCoordinates, offset, end, stride,\n      /**\n       * @param {ol.Coordinate} point1 Start point.\n       * @param {ol.Coordinate} point2 End point.\n       * @return {boolean} `true` if the segment and the extent intersect,\n       *     `false` otherwise.\n       */\n      function(point1, point2) {\n        return ol.extent.intersectsSegment(extent, point1, point2);\n      });\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nol.geom.flat.intersectsextent.lineStrings = function(flatCoordinates, offset, ends, stride, extent) {\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    if (ol.geom.flat.intersectsextent.lineString(\n        flatCoordinates, offset, ends[i], stride, extent)) {\n      return true;\n    }\n    offset = ends[i];\n  }\n  return false;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nol.geom.flat.intersectsextent.linearRing = function(flatCoordinates, offset, end, stride, extent) {\n  if (ol.geom.flat.intersectsextent.lineString(\n      flatCoordinates, offset, end, stride, extent)) {\n    return true;\n  }\n  if (ol.geom.flat.contains.linearRingContainsXY(\n      flatCoordinates, offset, end, stride, extent[0], extent[1])) {\n    return true;\n  }\n  if (ol.geom.flat.contains.linearRingContainsXY(\n      flatCoordinates, offset, end, stride, extent[0], extent[3])) {\n    return true;\n  }\n  if (ol.geom.flat.contains.linearRingContainsXY(\n      flatCoordinates, offset, end, stride, extent[2], extent[1])) {\n    return true;\n  }\n  if (ol.geom.flat.contains.linearRingContainsXY(\n      flatCoordinates, offset, end, stride, extent[2], extent[3])) {\n    return true;\n  }\n  return false;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nol.geom.flat.intersectsextent.linearRings = function(flatCoordinates, offset, ends, stride, extent) {\n  if (!ol.geom.flat.intersectsextent.linearRing(\n      flatCoordinates, offset, ends[0], stride, extent)) {\n    return false;\n  }\n  if (ends.length === 1) {\n    return true;\n  }\n  var i, ii;\n  for (i = 1, ii = ends.length; i < ii; ++i) {\n    if (ol.geom.flat.contains.linearRingContainsExtent(\n        flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {ol.Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nol.geom.flat.intersectsextent.linearRingss = function(flatCoordinates, offset, endss, stride, extent) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    if (ol.geom.flat.intersectsextent.linearRings(\n        flatCoordinates, offset, ends, stride, extent)) {\n      return true;\n    }\n    offset = ends[ends.length - 1];\n  }\n  return false;\n};\n\ngoog.provide('ol.geom.flat.reverse');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nol.geom.flat.reverse.coordinates = function(flatCoordinates, offset, end, stride) {\n  while (offset < end - stride) {\n    var i;\n    for (i = 0; i < stride; ++i) {\n      var tmp = flatCoordinates[offset + i];\n      flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n      flatCoordinates[end - stride + i] = tmp;\n    }\n    offset += stride;\n    end -= stride;\n  }\n};\n\ngoog.provide('ol.geom.flat.orient');\n\ngoog.require('ol.geom.flat.reverse');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nol.geom.flat.orient.linearRingIsClockwise = function(flatCoordinates, offset, end, stride) {\n  // http://tinyurl.com/clockwise-method\n  // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp\n  var edge = 0;\n  var x1 = flatCoordinates[end - stride];\n  var y1 = flatCoordinates[end - stride + 1];\n  for (; offset < end; offset += stride) {\n    var x2 = flatCoordinates[offset];\n    var y2 = flatCoordinates[offset + 1];\n    edge += (x2 - x1) * (y2 + y1);\n    x1 = x2;\n    y1 = y2;\n  }\n  return edge > 0;\n};\n\n\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nol.geom.flat.orient.linearRingsAreOriented = function(flatCoordinates, offset, ends, stride, opt_right) {\n  var right = opt_right !== undefined ? opt_right : false;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(\n        flatCoordinates, offset, end, stride);\n    if (i === 0) {\n      if ((right && isClockwise) || (!right && !isClockwise)) {\n        return false;\n      }\n    } else {\n      if ((right && !isClockwise) || (!right && isClockwise)) {\n        return false;\n      }\n    }\n    offset = end;\n  }\n  return true;\n};\n\n\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nol.geom.flat.orient.linearRingssAreOriented = function(flatCoordinates, offset, endss, stride, opt_right) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    if (!ol.geom.flat.orient.linearRingsAreOriented(\n        flatCoordinates, offset, endss[i], stride, opt_right)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nol.geom.flat.orient.orientLinearRings = function(flatCoordinates, offset, ends, stride, opt_right) {\n  var right = opt_right !== undefined ? opt_right : false;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(\n        flatCoordinates, offset, end, stride);\n    var reverse = i === 0 ?\n      (right && isClockwise) || (!right && !isClockwise) :\n      (right && !isClockwise) || (!right && isClockwise);\n    if (reverse) {\n      ol.geom.flat.reverse.coordinates(flatCoordinates, offset, end, stride);\n    }\n    offset = end;\n  }\n  return offset;\n};\n\n\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nol.geom.flat.orient.orientLinearRingss = function(flatCoordinates, offset, endss, stride, opt_right) {\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    offset = ol.geom.flat.orient.orientLinearRings(\n        flatCoordinates, offset, endss[i], stride, opt_right);\n  }\n  return offset;\n};\n\ngoog.provide('ol.geom.Polygon');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LinearRing');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.area');\ngoog.require('ol.geom.flat.closest');\ngoog.require('ol.geom.flat.contains');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.interiorpoint');\ngoog.require('ol.geom.flat.intersectsextent');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.geom.flat.simplify');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<Array.<ol.Coordinate>>} coordinates Array of linear\n *     rings that define the polygon. The first linear ring of the array\n *     defines the outer-boundary or surface of the polygon. Each subsequent\n *     linear ring defines a hole in the surface of the polygon. A linear ring\n *     is an array of vertices' coordinates where the first coordinate and the\n *     last are equivalent.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.Polygon = function(coordinates, opt_layout) {\n\n  ol.geom.SimpleGeometry.call(this);\n\n  /**\n   * @type {Array.<number>}\n   * @private\n   */\n  this.ends_ = [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.flatInteriorPointRevision_ = -1;\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.flatInteriorPoint_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDelta_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDeltaRevision_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.orientedRevision_ = -1;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.orientedFlatCoordinates_ = null;\n\n  this.setCoordinates(coordinates, opt_layout);\n\n};\nol.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry);\n\n\n/**\n * Append the passed linear ring to this polygon.\n * @param {ol.geom.LinearRing} linearRing Linear ring.\n * @api\n */\nol.geom.Polygon.prototype.appendLinearRing = function(linearRing) {\n  if (!this.flatCoordinates) {\n    this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n  } else {\n    ol.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n  }\n  this.ends_.push(this.flatCoordinates.length);\n  this.changed();\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.Polygon} Clone.\n * @override\n * @api\n */\nol.geom.Polygon.prototype.clone = function() {\n  var polygon = new ol.geom.Polygon(null);\n  polygon.setFlatCoordinates(\n      this.layout, this.flatCoordinates.slice(), this.ends_.slice());\n  return polygon;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Polygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  if (this.maxDeltaRevision_ != this.getRevision()) {\n    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(\n        this.flatCoordinates, 0, this.ends_, this.stride, 0));\n    this.maxDeltaRevision_ = this.getRevision();\n  }\n  return ol.geom.flat.closest.getsClosestPoint(\n      this.flatCoordinates, 0, this.ends_, this.stride,\n      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Polygon.prototype.containsXY = function(x, y) {\n  return ol.geom.flat.contains.linearRingsContainsXY(\n      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);\n};\n\n\n/**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\nol.geom.Polygon.prototype.getArea = function() {\n  return ol.geom.flat.area.linearRings(\n      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);\n};\n\n\n/**\n * Get the coordinate array for this geometry.  This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean=} opt_right Orient coordinates according to the right-hand\n *     rule (counter-clockwise for exterior and clockwise for interior rings).\n *     If `false`, coordinates will be oriented according to the left-hand rule\n *     (clockwise for exterior and counter-clockwise for interior rings).\n *     By default, coordinate orientation will depend on how the geometry was\n *     constructed.\n * @return {Array.<Array.<ol.Coordinate>>} Coordinates.\n * @override\n * @api\n */\nol.geom.Polygon.prototype.getCoordinates = function(opt_right) {\n  var flatCoordinates;\n  if (opt_right !== undefined) {\n    flatCoordinates = this.getOrientedFlatCoordinates().slice();\n    ol.geom.flat.orient.orientLinearRings(\n        flatCoordinates, 0, this.ends_, this.stride, opt_right);\n  } else {\n    flatCoordinates = this.flatCoordinates;\n  }\n\n  return ol.geom.flat.inflate.coordinatess(\n      flatCoordinates, 0, this.ends_, this.stride);\n};\n\n\n/**\n * @return {Array.<number>} Ends.\n */\nol.geom.Polygon.prototype.getEnds = function() {\n  return this.ends_;\n};\n\n\n/**\n * @return {Array.<number>} Interior point.\n */\nol.geom.Polygon.prototype.getFlatInteriorPoint = function() {\n  if (this.flatInteriorPointRevision_ != this.getRevision()) {\n    var flatCenter = ol.extent.getCenter(this.getExtent());\n    this.flatInteriorPoint_ = ol.geom.flat.interiorpoint.linearRings(\n        this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride,\n        flatCenter, 0);\n    this.flatInteriorPointRevision_ = this.getRevision();\n  }\n  return this.flatInteriorPoint_;\n};\n\n\n/**\n * Return an interior point of the polygon.\n * @return {ol.geom.Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\nol.geom.Polygon.prototype.getInteriorPoint = function() {\n  return new ol.geom.Point(this.getFlatInteriorPoint(), ol.geom.GeometryLayout.XYM);\n};\n\n\n/**\n * Return the number of rings of the polygon,  this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\nol.geom.Polygon.prototype.getLinearRingCount = function() {\n  return this.ends_.length;\n};\n\n\n/**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {ol.geom.LinearRing} Linear ring.\n * @api\n */\nol.geom.Polygon.prototype.getLinearRing = function(index) {\n  if (index < 0 || this.ends_.length <= index) {\n    return null;\n  }\n  var linearRing = new ol.geom.LinearRing(null);\n  linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice(\n      index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));\n  return linearRing;\n};\n\n\n/**\n * Return the linear rings of the polygon.\n * @return {Array.<ol.geom.LinearRing>} Linear rings.\n * @api\n */\nol.geom.Polygon.prototype.getLinearRings = function() {\n  var layout = this.layout;\n  var flatCoordinates = this.flatCoordinates;\n  var ends = this.ends_;\n  var linearRings = [];\n  var offset = 0;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var linearRing = new ol.geom.LinearRing(null);\n    linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));\n    linearRings.push(linearRing);\n    offset = end;\n  }\n  return linearRings;\n};\n\n\n/**\n * @return {Array.<number>} Oriented flat coordinates.\n */\nol.geom.Polygon.prototype.getOrientedFlatCoordinates = function() {\n  if (this.orientedRevision_ != this.getRevision()) {\n    var flatCoordinates = this.flatCoordinates;\n    if (ol.geom.flat.orient.linearRingsAreOriented(\n        flatCoordinates, 0, this.ends_, this.stride)) {\n      this.orientedFlatCoordinates_ = flatCoordinates;\n    } else {\n      this.orientedFlatCoordinates_ = flatCoordinates.slice();\n      this.orientedFlatCoordinates_.length =\n          ol.geom.flat.orient.orientLinearRings(\n              this.orientedFlatCoordinates_, 0, this.ends_, this.stride);\n    }\n    this.orientedRevision_ = this.getRevision();\n  }\n  return this.orientedFlatCoordinates_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Polygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  var simplifiedFlatCoordinates = [];\n  var simplifiedEnds = [];\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizes(\n      this.flatCoordinates, 0, this.ends_, this.stride,\n      Math.sqrt(squaredTolerance),\n      simplifiedFlatCoordinates, 0, simplifiedEnds);\n  var simplifiedPolygon = new ol.geom.Polygon(null);\n  simplifiedPolygon.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);\n  return simplifiedPolygon;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Polygon.prototype.getType = function() {\n  return ol.geom.GeometryType.POLYGON;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Polygon.prototype.intersectsExtent = function(extent) {\n  return ol.geom.flat.intersectsextent.linearRings(\n      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);\n};\n\n\n/**\n * Set the coordinates of the polygon.\n * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);\n  } else {\n    this.setLayout(opt_layout, coordinates, 2);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    var ends = ol.geom.flat.deflate.coordinatess(\n        this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<number>} ends Ends.\n */\nol.geom.Polygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.ends_ = ends;\n  this.changed();\n};\n\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {ol.Sphere} sphere The sphere.\n * @param {ol.Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n *     the polygon vertices.\n * @param {number=} opt_n Optional number of vertices for the resulting\n *     polygon. Default is `32`.\n * @return {ol.geom.Polygon} The \"circular\" polygon.\n * @api\n */\nol.geom.Polygon.circular = function(sphere, center, radius, opt_n) {\n  var n = opt_n ? opt_n : 32;\n  /** @type {Array.<number>} */\n  var flatCoordinates = [];\n  var i;\n  for (i = 0; i < n; ++i) {\n    ol.array.extend(\n        flatCoordinates, sphere.offset(center, radius, 2 * Math.PI * i / n));\n  }\n  flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n  var polygon = new ol.geom.Polygon(null);\n  polygon.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);\n  return polygon;\n};\n\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {ol.Extent} extent The extent.\n * @return {ol.geom.Polygon} The polygon.\n * @api\n */\nol.geom.Polygon.fromExtent = function(extent) {\n  var minX = extent[0];\n  var minY = extent[1];\n  var maxX = extent[2];\n  var maxY = extent[3];\n  var flatCoordinates =\n      [minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY];\n  var polygon = new ol.geom.Polygon(null);\n  polygon.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);\n  return polygon;\n};\n\n\n/**\n * Create a regular polygon from a circle.\n * @param {ol.geom.Circle} circle Circle geometry.\n * @param {number=} opt_sides Number of sides of the polygon. Default is 32.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n *     radians. Default is 0.\n * @return {ol.geom.Polygon} Polygon geometry.\n * @api\n */\nol.geom.Polygon.fromCircle = function(circle, opt_sides, opt_angle) {\n  var sides = opt_sides ? opt_sides : 32;\n  var stride = circle.getStride();\n  var layout = circle.getLayout();\n  var polygon = new ol.geom.Polygon(null, layout);\n  var arrayLength = stride * (sides + 1);\n  var flatCoordinates = new Array(arrayLength);\n  for (var i = 0; i < arrayLength; i++) {\n    flatCoordinates[i] = 0;\n  }\n  var ends = [flatCoordinates.length];\n  polygon.setFlatCoordinates(layout, flatCoordinates, ends);\n  ol.geom.Polygon.makeRegular(\n      polygon, circle.getCenter(), circle.getRadius(), opt_angle);\n  return polygon;\n};\n\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {ol.geom.Polygon} polygon Polygon geometry.\n * @param {ol.Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n *     radians. Default is 0.\n */\nol.geom.Polygon.makeRegular = function(polygon, center, radius, opt_angle) {\n  var flatCoordinates = polygon.getFlatCoordinates();\n  var layout = polygon.getLayout();\n  var stride = polygon.getStride();\n  var ends = polygon.getEnds();\n  var sides = flatCoordinates.length / stride - 1;\n  var startAngle = opt_angle ? opt_angle : 0;\n  var angle, offset;\n  for (var i = 0; i <= sides; ++i) {\n    offset = i * stride;\n    angle = startAngle + (ol.math.modulo(i, sides) * 2 * Math.PI / sides);\n    flatCoordinates[offset] = center[0] + (radius * Math.cos(angle));\n    flatCoordinates[offset + 1] = center[1] + (radius * Math.sin(angle));\n  }\n  polygon.setFlatCoordinates(layout, flatCoordinates, ends);\n};\n\ngoog.provide('ol.View');\n\ngoog.require('ol');\ngoog.require('ol.CenterConstraint');\ngoog.require('ol.Object');\ngoog.require('ol.ResolutionConstraint');\ngoog.require('ol.RotationConstraint');\ngoog.require('ol.ViewHint');\ngoog.require('ol.ViewProperty');\ngoog.require('ol.array');\ngoog.require('ol.asserts');\ngoog.require('ol.coordinate');\ngoog.require('ol.easing');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.math');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Units');\n\n\n/**\n * @classdesc\n * An ol.View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * ### The view states\n *\n * An `ol.View` is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * An `ol.View` has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Spherical Mercator (EPSG:3857).\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view. Any value can be passed to the setters. And the value\n * that is passed to a setter will effectively be the value set in the view,\n * and returned by the corresponding getter.\n *\n * But an `ol.View` object also has a *resolution constraint*, a\n * *rotation constraint* and a *center constraint*.\n *\n * As said above, no constraints are applied when the setters are used to set\n * new states for the view. Applying constraints is done explicitly through\n * the use of the `constrain*` functions (`constrainResolution` and\n * `constrainRotation` and `constrainCenter`).\n *\n * The main users of the constraints are the interactions and the\n * controls. For example, double-clicking on the map changes the view to\n * the \"next\" resolution. And releasing the fingers after pinch-zooming\n * snaps to the closest resolution (with an animation).\n *\n * The *resolution constraint* snaps to specific resolutions. It is\n * determined by the following options: `resolutions`, `maxResolution`,\n * `maxZoom`, and `zoomFactor`. If `resolutions` is set, the other three\n * options are ignored. See documentation for each option for more\n * information.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default the rotation value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the center is not constrained at all.\n *\n * @constructor\n * @extends {ol.Object}\n * @param {olx.ViewOptions=} opt_options View options.\n * @api\n */\nol.View = function(opt_options) {\n  ol.Object.call(this);\n\n  var options = ol.obj.assign({}, opt_options);\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.hints_ = [0, 0];\n\n  /**\n   * @private\n   * @type {Array.<Array.<ol.ViewAnimation>>}\n   */\n  this.animations_ = [];\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.updateAnimationKey_;\n\n  this.updateAnimations_ = this.updateAnimations_.bind(this);\n\n  /**\n   * @private\n   * @const\n   * @type {ol.proj.Projection}\n   */\n  this.projection_ = ol.proj.createProjection(options.projection, 'EPSG:3857');\n\n  this.applyOptions_(options);\n};\nol.inherits(ol.View, ol.Object);\n\n\n/**\n * Set up the view with the given options.\n * @param {olx.ViewOptions} options View options.\n */\nol.View.prototype.applyOptions_ = function(options) {\n\n  /**\n   * @type {Object.<string, *>}\n   */\n  var properties = {};\n  properties[ol.ViewProperty.CENTER] = options.center !== undefined ?\n    options.center : null;\n\n  var resolutionConstraintInfo = ol.View.createResolutionConstraint_(\n      options);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n  /**\n   * @private\n   * @type {Array.<number>|undefined}\n   */\n  this.resolutions_ = options.resolutions;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n  var centerConstraint = ol.View.createCenterConstraint_(options);\n  var resolutionConstraint = resolutionConstraintInfo.constraint;\n  var rotationConstraint = ol.View.createRotationConstraint_(options);\n\n  /**\n   * @private\n   * @type {ol.Constraints}\n   */\n  this.constraints_ = {\n    center: centerConstraint,\n    resolution: resolutionConstraint,\n    rotation: rotationConstraint\n  };\n\n  if (options.resolution !== undefined) {\n    properties[ol.ViewProperty.RESOLUTION] = options.resolution;\n  } else if (options.zoom !== undefined) {\n    properties[ol.ViewProperty.RESOLUTION] = this.constrainResolution(\n        this.maxResolution_, options.zoom - this.minZoom_);\n\n    if (this.resolutions_) { // in case map zoom is out of min/max zoom range\n      properties[ol.ViewProperty.RESOLUTION] = ol.math.clamp(\n          Number(this.getResolution() || properties[ol.ViewProperty.RESOLUTION]),\n          this.minResolution_, this.maxResolution_);\n    }\n  }\n  properties[ol.ViewProperty.ROTATION] =\n      options.rotation !== undefined ? options.rotation : 0;\n  this.setProperties(properties);\n\n  /**\n   * @private\n   * @type {olx.ViewOptions}\n   */\n  this.options_ = options;\n\n};\n\n/**\n * Get an updated version of the view options used to construct the view.  The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options.  The provided options can be uesd to apply new min/max zoom or\n * resolution limits.\n * @param {olx.ViewOptions} newOptions New options to be applied.\n * @return {olx.ViewOptions} New options updated with the current view state.\n */\nol.View.prototype.getUpdatedOptions_ = function(newOptions) {\n  var options = ol.obj.assign({}, this.options_);\n\n  // preserve resolution (or zoom)\n  if (options.resolution !== undefined) {\n    options.resolution = this.getResolution();\n  } else {\n    options.zoom = this.getZoom();\n  }\n\n  // preserve center\n  options.center = this.getCenter();\n\n  // preserve rotation\n  options.rotation = this.getRotation();\n\n  return ol.obj.assign({}, options, newOptions);\n};\n\n\n/**\n * Animate the view.  The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states.  For example,\n * to animate the view to a new zoom level:\n *\n *     view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing.  You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link ol.easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects.  For example, to first zoom and then pan:\n *\n *     view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series.  The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(olx.AnimationOptions|function(boolean))} var_args Animation\n *     options.  Multiple animations can be run in series by passing multiple\n *     options objects.  To run multiple animations in parallel, call the method\n *     multiple times.  An optional callback can be provided as a final\n *     argument.  The callback will be called with a boolean indicating whether\n *     the animation completed without being cancelled.\n * @api\n */\nol.View.prototype.animate = function(var_args) {\n  var animationCount = arguments.length;\n  var callback;\n  if (animationCount > 1 && typeof arguments[animationCount - 1] === 'function') {\n    callback = arguments[animationCount - 1];\n    --animationCount;\n  }\n  if (!this.isDef()) {\n    // if view properties are not yet set, shortcut to the final state\n    var state = arguments[animationCount - 1];\n    if (state.center) {\n      this.setCenter(state.center);\n    }\n    if (state.zoom !== undefined) {\n      this.setZoom(state.zoom);\n    }\n    if (state.rotation !== undefined) {\n      this.setRotation(state.rotation);\n    }\n    if (callback) {\n      callback(true);\n    }\n    return;\n  }\n  var start = Date.now();\n  var center = this.getCenter().slice();\n  var resolution = this.getResolution();\n  var rotation = this.getRotation();\n  var series = [];\n  for (var i = 0; i < animationCount; ++i) {\n    var options = /** @type {olx.AnimationOptions} */ (arguments[i]);\n\n    var animation = /** @type {ol.ViewAnimation} */ ({\n      start: start,\n      complete: false,\n      anchor: options.anchor,\n      duration: options.duration !== undefined ? options.duration : 1000,\n      easing: options.easing || ol.easing.inAndOut\n    });\n\n    if (options.center) {\n      animation.sourceCenter = center;\n      animation.targetCenter = options.center;\n      center = animation.targetCenter;\n    }\n\n    if (options.zoom !== undefined) {\n      animation.sourceResolution = resolution;\n      animation.targetResolution = this.constrainResolution(\n          this.maxResolution_, options.zoom - this.minZoom_, 0);\n      resolution = animation.targetResolution;\n    } else if (options.resolution) {\n      animation.sourceResolution = resolution;\n      animation.targetResolution = options.resolution;\n      resolution = animation.targetResolution;\n    }\n\n    if (options.rotation !== undefined) {\n      animation.sourceRotation = rotation;\n      var delta = ol.math.modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n      animation.targetRotation = rotation + delta;\n      rotation = animation.targetRotation;\n    }\n\n    animation.callback = callback;\n\n    // check if animation is a no-op\n    if (ol.View.isNoopAnimation(animation)) {\n      animation.complete = true;\n      // we still push it onto the series for callback handling\n    } else {\n      start += animation.duration;\n    }\n    series.push(animation);\n  }\n  this.animations_.push(series);\n  this.setHint(ol.ViewHint.ANIMATING, 1);\n  this.updateAnimations_();\n};\n\n\n/**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\nol.View.prototype.getAnimating = function() {\n  return this.hints_[ol.ViewHint.ANIMATING] > 0;\n};\n\n\n/**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\nol.View.prototype.getInteracting = function() {\n  return this.hints_[ol.ViewHint.INTERACTING] > 0;\n};\n\n\n/**\n * Cancel any ongoing animations.\n * @api\n */\nol.View.prototype.cancelAnimations = function() {\n  this.setHint(ol.ViewHint.ANIMATING, -this.hints_[ol.ViewHint.ANIMATING]);\n  for (var i = 0, ii = this.animations_.length; i < ii; ++i) {\n    var series = this.animations_[i];\n    if (series[0].callback) {\n      series[0].callback(false);\n    }\n  }\n  this.animations_.length = 0;\n};\n\n/**\n * Update all animations.\n */\nol.View.prototype.updateAnimations_ = function() {\n  if (this.updateAnimationKey_ !== undefined) {\n    cancelAnimationFrame(this.updateAnimationKey_);\n    this.updateAnimationKey_ = undefined;\n  }\n  if (!this.getAnimating()) {\n    return;\n  }\n  var now = Date.now();\n  var more = false;\n  for (var i = this.animations_.length - 1; i >= 0; --i) {\n    var series = this.animations_[i];\n    var seriesComplete = true;\n    for (var j = 0, jj = series.length; j < jj; ++j) {\n      var animation = series[j];\n      if (animation.complete) {\n        continue;\n      }\n      var elapsed = now - animation.start;\n      var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n      if (fraction >= 1) {\n        animation.complete = true;\n        fraction = 1;\n      } else {\n        seriesComplete = false;\n      }\n      var progress = animation.easing(fraction);\n      if (animation.sourceCenter) {\n        var x0 = animation.sourceCenter[0];\n        var y0 = animation.sourceCenter[1];\n        var x1 = animation.targetCenter[0];\n        var y1 = animation.targetCenter[1];\n        var x = x0 + progress * (x1 - x0);\n        var y = y0 + progress * (y1 - y0);\n        this.set(ol.ViewProperty.CENTER, [x, y]);\n      }\n      if (animation.sourceResolution && animation.targetResolution) {\n        var resolution = progress === 1 ?\n          animation.targetResolution :\n          animation.sourceResolution + progress * (animation.targetResolution - animation.sourceResolution);\n        if (animation.anchor) {\n          this.set(ol.ViewProperty.CENTER,\n              this.calculateCenterZoom(resolution, animation.anchor));\n        }\n        this.set(ol.ViewProperty.RESOLUTION, resolution);\n      }\n      if (animation.sourceRotation !== undefined && animation.targetRotation !== undefined) {\n        var rotation = progress === 1 ?\n          ol.math.modulo(animation.targetRotation + Math.PI, 2 * Math.PI) - Math.PI :\n          animation.sourceRotation + progress * (animation.targetRotation - animation.sourceRotation);\n        if (animation.anchor) {\n          this.set(ol.ViewProperty.CENTER,\n              this.calculateCenterRotate(rotation, animation.anchor));\n        }\n        this.set(ol.ViewProperty.ROTATION, rotation);\n      }\n      more = true;\n      if (!animation.complete) {\n        break;\n      }\n    }\n    if (seriesComplete) {\n      this.animations_[i] = null;\n      this.setHint(ol.ViewHint.ANIMATING, -1);\n      var callback = series[0].callback;\n      if (callback) {\n        callback(true);\n      }\n    }\n  }\n  // prune completed series\n  this.animations_ = this.animations_.filter(Boolean);\n  if (more && this.updateAnimationKey_ === undefined) {\n    this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_);\n  }\n};\n\n/**\n * @param {number} rotation Target rotation.\n * @param {ol.Coordinate} anchor Rotation anchor.\n * @return {ol.Coordinate|undefined} Center for rotation and anchor.\n */\nol.View.prototype.calculateCenterRotate = function(rotation, anchor) {\n  var center;\n  var currentCenter = this.getCenter();\n  if (currentCenter !== undefined) {\n    center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n    ol.coordinate.rotate(center, rotation - this.getRotation());\n    ol.coordinate.add(center, anchor);\n  }\n  return center;\n};\n\n\n/**\n * @param {number} resolution Target resolution.\n * @param {ol.Coordinate} anchor Zoom anchor.\n * @return {ol.Coordinate|undefined} Center for resolution and anchor.\n */\nol.View.prototype.calculateCenterZoom = function(resolution, anchor) {\n  var center;\n  var currentCenter = this.getCenter();\n  var currentResolution = this.getResolution();\n  if (currentCenter !== undefined && currentResolution !== undefined) {\n    var x = anchor[0] -\n        resolution * (anchor[0] - currentCenter[0]) / currentResolution;\n    var y = anchor[1] -\n        resolution * (anchor[1] - currentCenter[1]) / currentResolution;\n    center = [x, y];\n  }\n  return center;\n};\n\n\n/**\n * @private\n * @return {ol.Size} Viewport size or `[100, 100]` when no viewport is found.\n */\nol.View.prototype.getSizeFromViewport_ = function() {\n  var size = [100, 100];\n  var selector = '.ol-viewport[data-view=\"' + ol.getUid(this) + '\"]';\n  var element = document.querySelector(selector);\n  if (element) {\n    var metrics = getComputedStyle(element);\n    size[0] = parseInt(metrics.width, 10);\n    size[1] = parseInt(metrics.height, 10);\n  }\n  return size;\n};\n\n\n/**\n * Get the constrained center of this view.\n * @param {ol.Coordinate|undefined} center Center.\n * @return {ol.Coordinate|undefined} Constrained center.\n * @api\n */\nol.View.prototype.constrainCenter = function(center) {\n  return this.constraints_.center(center);\n};\n\n\n/**\n * Get the constrained resolution of this view.\n * @param {number|undefined} resolution Resolution.\n * @param {number=} opt_delta Delta. Default is `0`.\n * @param {number=} opt_direction Direction. Default is `0`.\n * @return {number|undefined} Constrained resolution.\n * @api\n */\nol.View.prototype.constrainResolution = function(\n    resolution, opt_delta, opt_direction) {\n  var delta = opt_delta || 0;\n  var direction = opt_direction || 0;\n  return this.constraints_.resolution(resolution, delta, direction);\n};\n\n\n/**\n * Get the constrained rotation of this view.\n * @param {number|undefined} rotation Rotation.\n * @param {number=} opt_delta Delta. Default is `0`.\n * @return {number|undefined} Constrained rotation.\n * @api\n */\nol.View.prototype.constrainRotation = function(rotation, opt_delta) {\n  var delta = opt_delta || 0;\n  return this.constraints_.rotation(rotation, delta);\n};\n\n\n/**\n * Get the view center.\n * @return {ol.Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\nol.View.prototype.getCenter = function() {\n  return /** @type {ol.Coordinate|undefined} */ (\n    this.get(ol.ViewProperty.CENTER));\n};\n\n\n/**\n * @return {ol.Constraints} Constraints.\n */\nol.View.prototype.getConstraints = function() {\n  return this.constraints_;\n};\n\n\n/**\n * @param {Array.<number>=} opt_hints Destination array.\n * @return {Array.<number>} Hint.\n */\nol.View.prototype.getHints = function(opt_hints) {\n  if (opt_hints !== undefined) {\n    opt_hints[0] = this.hints_[0];\n    opt_hints[1] = this.hints_[1];\n    return opt_hints;\n  } else {\n    return this.hints_.slice();\n  }\n};\n\n\n/**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {ol.Size=} opt_size Box pixel size. If not provided, the size of the\n * first map that uses this view will be used.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.View.prototype.calculateExtent = function(opt_size) {\n  var size = opt_size || this.getSizeFromViewport_();\n  var center = /** @type {!ol.Coordinate} */ (this.getCenter());\n  ol.asserts.assert(center, 1); // The view center is not defined\n  var resolution = /** @type {!number} */ (this.getResolution());\n  ol.asserts.assert(resolution !== undefined, 2); // The view resolution is not defined\n  var rotation = /** @type {!number} */ (this.getRotation());\n  ol.asserts.assert(rotation !== undefined, 3); // The view rotation is not defined\n\n  return ol.extent.getForViewAndSize(center, resolution, rotation, size);\n};\n\n\n/**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\nol.View.prototype.getMaxResolution = function() {\n  return this.maxResolution_;\n};\n\n\n/**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\nol.View.prototype.getMinResolution = function() {\n  return this.minResolution_;\n};\n\n\n/**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\nol.View.prototype.getMaxZoom = function() {\n  return /** @type {number} */ (this.getZoomForResolution(this.minResolution_));\n};\n\n\n/**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\nol.View.prototype.setMaxZoom = function(zoom) {\n  this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n};\n\n\n/**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\nol.View.prototype.getMinZoom = function() {\n  return /** @type {number} */ (this.getZoomForResolution(this.maxResolution_));\n};\n\n\n/**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\nol.View.prototype.setMinZoom = function(zoom) {\n  this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n};\n\n\n/**\n * Get the view projection.\n * @return {ol.proj.Projection} The projection of the view.\n * @api\n */\nol.View.prototype.getProjection = function() {\n  return this.projection_;\n};\n\n\n/**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\nol.View.prototype.getResolution = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.ViewProperty.RESOLUTION));\n};\n\n\n/**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the {ol.View}, or undefined if none were given.\n * @return {Array.<number>|undefined} The resolutions of the view.\n * @api\n */\nol.View.prototype.getResolutions = function() {\n  return this.resolutions_;\n};\n\n\n/**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {ol.Extent} extent Extent.\n * @param {ol.Size=} opt_size Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n *     the given size.\n * @api\n */\nol.View.prototype.getResolutionForExtent = function(extent, opt_size) {\n  var size = opt_size || this.getSizeFromViewport_();\n  var xResolution = ol.extent.getWidth(extent) / size[0];\n  var yResolution = ol.extent.getHeight(extent) / size[1];\n  return Math.max(xResolution, yResolution);\n};\n\n\n/**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number=} opt_power Power.\n * @return {function(number): number} Resolution for value function.\n */\nol.View.prototype.getResolutionForValueFunction = function(opt_power) {\n  var power = opt_power || 2;\n  var maxResolution = this.maxResolution_;\n  var minResolution = this.minResolution_;\n  var max = Math.log(maxResolution / minResolution) / Math.log(power);\n  return (\n    /**\n     * @param {number} value Value.\n     * @return {number} Resolution.\n     */\n    function(value) {\n      var resolution = maxResolution / Math.pow(power, value * max);\n      return resolution;\n    });\n};\n\n\n/**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\nol.View.prototype.getRotation = function() {\n  return /** @type {number} */ (this.get(ol.ViewProperty.ROTATION));\n};\n\n\n/**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number=} opt_power Power.\n * @return {function(number): number} Value for resolution function.\n */\nol.View.prototype.getValueForResolutionFunction = function(opt_power) {\n  var power = opt_power || 2;\n  var maxResolution = this.maxResolution_;\n  var minResolution = this.minResolution_;\n  var max = Math.log(maxResolution / minResolution) / Math.log(power);\n  return (\n    /**\n     * @param {number} resolution Resolution.\n     * @return {number} Value.\n     */\n    function(resolution) {\n      var value =\n            (Math.log(maxResolution / resolution) / Math.log(power)) / max;\n      return value;\n    });\n};\n\n\n/**\n * @return {olx.ViewState} View state.\n */\nol.View.prototype.getState = function() {\n  var center = /** @type {ol.Coordinate} */ (this.getCenter());\n  var projection = this.getProjection();\n  var resolution = /** @type {number} */ (this.getResolution());\n  var rotation = this.getRotation();\n  return /** @type {olx.ViewState} */ ({\n    center: center.slice(),\n    projection: projection !== undefined ? projection : null,\n    resolution: resolution,\n    rotation: rotation,\n    zoom: this.getZoom()\n  });\n};\n\n\n/**\n * Get the current zoom level.  If you configured your view with a resolutions\n * array (this is rare), this method may return non-integer zoom levels (so\n * the zoom level is not safe to use as an index into a resolutions array).\n * @return {number|undefined} Zoom.\n * @api\n */\nol.View.prototype.getZoom = function() {\n  var zoom;\n  var resolution = this.getResolution();\n  if (resolution !== undefined) {\n    zoom = this.getZoomForResolution(resolution);\n  }\n  return zoom;\n};\n\n\n/**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\nol.View.prototype.getZoomForResolution = function(resolution) {\n  var offset = this.minZoom_ || 0;\n  var max, zoomFactor;\n  if (this.resolutions_) {\n    var nearest = ol.array.linearFindNearest(this.resolutions_, resolution, 1);\n    offset = nearest;\n    max = this.resolutions_[nearest];\n    if (nearest == this.resolutions_.length - 1) {\n      zoomFactor = 2;\n    } else {\n      zoomFactor = max / this.resolutions_[nearest + 1];\n    }\n  } else {\n    max = this.maxResolution_;\n    zoomFactor = this.zoomFactor_;\n  }\n  return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n};\n\n\n/**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\nol.View.prototype.getResolutionForZoom = function(zoom) {\n  return /** @type {number} */ (this.constrainResolution(\n      this.maxResolution_, zoom - this.minZoom_, 0));\n};\n\n\n/**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {ol.geom.SimpleGeometry|ol.Extent} geometryOrExtent The geometry or\n *     extent to fit the view to.\n * @param {olx.view.FitOptions=} opt_options Options.\n * @api\n */\nol.View.prototype.fit = function(geometryOrExtent, opt_options) {\n  var options = opt_options || {};\n  var size = options.size;\n  if (!size) {\n    size = this.getSizeFromViewport_();\n  }\n  /** @type {ol.geom.SimpleGeometry} */\n  var geometry;\n  if (!(geometryOrExtent instanceof ol.geom.SimpleGeometry)) {\n    ol.asserts.assert(Array.isArray(geometryOrExtent),\n        24); // Invalid extent or geometry provided as `geometry`\n    ol.asserts.assert(!ol.extent.isEmpty(geometryOrExtent),\n        25); // Cannot fit empty extent provided as `geometry`\n    geometry = ol.geom.Polygon.fromExtent(geometryOrExtent);\n  } else if (geometryOrExtent.getType() === ol.geom.GeometryType.CIRCLE) {\n    geometryOrExtent = geometryOrExtent.getExtent();\n    geometry = ol.geom.Polygon.fromExtent(geometryOrExtent);\n    geometry.rotate(this.getRotation(), ol.extent.getCenter(geometryOrExtent));\n  } else {\n    geometry = geometryOrExtent;\n  }\n\n  var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n  var constrainResolution = options.constrainResolution !== undefined ?\n    options.constrainResolution : true;\n  var nearest = options.nearest !== undefined ? options.nearest : false;\n  var minResolution;\n  if (options.minResolution !== undefined) {\n    minResolution = options.minResolution;\n  } else if (options.maxZoom !== undefined) {\n    minResolution = this.constrainResolution(\n        this.maxResolution_, options.maxZoom - this.minZoom_, 0);\n  } else {\n    minResolution = 0;\n  }\n  var coords = geometry.getFlatCoordinates();\n\n  // calculate rotated extent\n  var rotation = this.getRotation();\n  var cosAngle = Math.cos(-rotation);\n  var sinAngle = Math.sin(-rotation);\n  var minRotX = +Infinity;\n  var minRotY = +Infinity;\n  var maxRotX = -Infinity;\n  var maxRotY = -Infinity;\n  var stride = geometry.getStride();\n  for (var i = 0, ii = coords.length; i < ii; i += stride) {\n    var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n    var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n    minRotX = Math.min(minRotX, rotX);\n    minRotY = Math.min(minRotY, rotY);\n    maxRotX = Math.max(maxRotX, rotX);\n    maxRotY = Math.max(maxRotY, rotY);\n  }\n\n  // calculate resolution\n  var resolution = this.getResolutionForExtent(\n      [minRotX, minRotY, maxRotX, maxRotY],\n      [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);\n  resolution = isNaN(resolution) ? minResolution :\n    Math.max(resolution, minResolution);\n  if (constrainResolution) {\n    var constrainedResolution = this.constrainResolution(resolution, 0, 0);\n    if (!nearest && constrainedResolution < resolution) {\n      constrainedResolution = this.constrainResolution(\n          constrainedResolution, -1, 0);\n    }\n    resolution = constrainedResolution;\n  }\n\n  // calculate center\n  sinAngle = -sinAngle; // go back to original rotation\n  var centerRotX = (minRotX + maxRotX) / 2;\n  var centerRotY = (minRotY + maxRotY) / 2;\n  centerRotX += (padding[1] - padding[3]) / 2 * resolution;\n  centerRotY += (padding[0] - padding[2]) / 2 * resolution;\n  var centerX = centerRotX * cosAngle - centerRotY * sinAngle;\n  var centerY = centerRotY * cosAngle + centerRotX * sinAngle;\n  var center = [centerX, centerY];\n  var callback = options.callback ? options.callback : ol.nullFunction;\n\n  if (options.duration !== undefined) {\n    this.animate({\n      resolution: resolution,\n      center: center,\n      duration: options.duration,\n      easing: options.easing\n    }, callback);\n  } else {\n    this.setResolution(resolution);\n    this.setCenter(center);\n    setTimeout(callback.bind(undefined, true), 0);\n  }\n};\n\n\n/**\n * Center on coordinate and view position.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.Size} size Box pixel size.\n * @param {ol.Pixel} position Position on the view to center on.\n * @api\n */\nol.View.prototype.centerOn = function(coordinate, size, position) {\n  // calculate rotated position\n  var rotation = this.getRotation();\n  var cosAngle = Math.cos(-rotation);\n  var sinAngle = Math.sin(-rotation);\n  var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n  var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n  var resolution = this.getResolution();\n  rotX += (size[0] / 2 - position[0]) * resolution;\n  rotY += (position[1] - size[1] / 2) * resolution;\n\n  // go back to original angle\n  sinAngle = -sinAngle; // go back to original rotation\n  var centerX = rotX * cosAngle - rotY * sinAngle;\n  var centerY = rotY * cosAngle + rotX * sinAngle;\n\n  this.setCenter([centerX, centerY]);\n};\n\n\n/**\n * @return {boolean} Is defined.\n */\nol.View.prototype.isDef = function() {\n  return !!this.getCenter() && this.getResolution() !== undefined;\n};\n\n\n/**\n * Rotate the view around a given coordinate.\n * @param {number} rotation New rotation value for the view.\n * @param {ol.Coordinate=} opt_anchor The rotation center.\n * @api\n */\nol.View.prototype.rotate = function(rotation, opt_anchor) {\n  if (opt_anchor !== undefined) {\n    var center = this.calculateCenterRotate(rotation, opt_anchor);\n    this.setCenter(center);\n  }\n  this.setRotation(rotation);\n};\n\n\n/**\n * Set the center of the current view.\n * @param {ol.Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\nol.View.prototype.setCenter = function(center) {\n  this.set(ol.ViewProperty.CENTER, center);\n  if (this.getAnimating()) {\n    this.cancelAnimations();\n  }\n};\n\n\n/**\n * @param {ol.ViewHint} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\nol.View.prototype.setHint = function(hint, delta) {\n  this.hints_[hint] += delta;\n  this.changed();\n  return this.hints_[hint];\n};\n\n\n/**\n * Set the resolution for this view.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\nol.View.prototype.setResolution = function(resolution) {\n  this.set(ol.ViewProperty.RESOLUTION, resolution);\n  if (this.getAnimating()) {\n    this.cancelAnimations();\n  }\n};\n\n\n/**\n * Set the rotation for this view.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\nol.View.prototype.setRotation = function(rotation) {\n  this.set(ol.ViewProperty.ROTATION, rotation);\n  if (this.getAnimating()) {\n    this.cancelAnimations();\n  }\n};\n\n\n/**\n * Zoom to a specific zoom level.\n * @param {number} zoom Zoom level.\n * @api\n */\nol.View.prototype.setZoom = function(zoom) {\n  this.setResolution(this.getResolutionForZoom(zoom));\n};\n\n\n/**\n * @param {olx.ViewOptions} options View options.\n * @private\n * @return {ol.CenterConstraintType} The constraint.\n */\nol.View.createCenterConstraint_ = function(options) {\n  if (options.extent !== undefined) {\n    return ol.CenterConstraint.createExtent(options.extent);\n  } else {\n    return ol.CenterConstraint.none;\n  }\n};\n\n\n/**\n * @private\n * @param {olx.ViewOptions} options View options.\n * @return {{constraint: ol.ResolutionConstraintType, maxResolution: number,\n *     minResolution: number, zoomFactor: number}} The constraint.\n */\nol.View.createResolutionConstraint_ = function(options) {\n  var resolutionConstraint;\n  var maxResolution;\n  var minResolution;\n\n  // TODO: move these to be ol constants\n  // see https://github.com/openlayers/openlayers/issues/2076\n  var defaultMaxZoom = 28;\n  var defaultZoomFactor = 2;\n\n  var minZoom = options.minZoom !== undefined ?\n    options.minZoom : ol.DEFAULT_MIN_ZOOM;\n\n  var maxZoom = options.maxZoom !== undefined ?\n    options.maxZoom : defaultMaxZoom;\n\n  var zoomFactor = options.zoomFactor !== undefined ?\n    options.zoomFactor : defaultZoomFactor;\n\n  if (options.resolutions !== undefined) {\n    var resolutions = options.resolutions;\n    maxResolution = resolutions[minZoom];\n    minResolution = resolutions[maxZoom] !== undefined ?\n      resolutions[maxZoom] : resolutions[resolutions.length - 1];\n    resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(\n        resolutions);\n  } else {\n    // calculate the default min and max resolution\n    var projection = ol.proj.createProjection(options.projection, 'EPSG:3857');\n    var extent = projection.getExtent();\n    var size = !extent ?\n      // use an extent that can fit the whole world if need be\n      360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] /\n            projection.getMetersPerUnit() :\n      Math.max(ol.extent.getWidth(extent), ol.extent.getHeight(extent));\n\n    var defaultMaxResolution = size / ol.DEFAULT_TILE_SIZE / Math.pow(\n        defaultZoomFactor, ol.DEFAULT_MIN_ZOOM);\n\n    var defaultMinResolution = defaultMaxResolution / Math.pow(\n        defaultZoomFactor, defaultMaxZoom - ol.DEFAULT_MIN_ZOOM);\n\n    // user provided maxResolution takes precedence\n    maxResolution = options.maxResolution;\n    if (maxResolution !== undefined) {\n      minZoom = 0;\n    } else {\n      maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n    }\n\n    // user provided minResolution takes precedence\n    minResolution = options.minResolution;\n    if (minResolution === undefined) {\n      if (options.maxZoom !== undefined) {\n        if (options.maxResolution !== undefined) {\n          minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n        } else {\n          minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n        }\n      } else {\n        minResolution = defaultMinResolution;\n      }\n    }\n\n    // given discrete zoom levels, minResolution may be different than provided\n    maxZoom = minZoom + Math.floor(\n        Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n    minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n    resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(\n        zoomFactor, maxResolution, maxZoom - minZoom);\n  }\n  return {constraint: resolutionConstraint, maxResolution: maxResolution,\n    minResolution: minResolution, minZoom: minZoom, zoomFactor: zoomFactor};\n};\n\n\n/**\n * @private\n * @param {olx.ViewOptions} options View options.\n * @return {ol.RotationConstraintType} Rotation constraint.\n */\nol.View.createRotationConstraint_ = function(options) {\n  var enableRotation = options.enableRotation !== undefined ?\n    options.enableRotation : true;\n  if (enableRotation) {\n    var constrainRotation = options.constrainRotation;\n    if (constrainRotation === undefined || constrainRotation === true) {\n      return ol.RotationConstraint.createSnapToZero();\n    } else if (constrainRotation === false) {\n      return ol.RotationConstraint.none;\n    } else if (typeof constrainRotation === 'number') {\n      return ol.RotationConstraint.createSnapToN(constrainRotation);\n    } else {\n      return ol.RotationConstraint.none;\n    }\n  } else {\n    return ol.RotationConstraint.disable;\n  }\n};\n\n\n/**\n * Determine if an animation involves no view change.\n * @param {ol.ViewAnimation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nol.View.isNoopAnimation = function(animation) {\n  if (animation.sourceCenter && animation.targetCenter) {\n    if (!ol.coordinate.equals(animation.sourceCenter, animation.targetCenter)) {\n      return false;\n    }\n  }\n  if (animation.sourceResolution !== animation.targetResolution) {\n    return false;\n  }\n  if (animation.sourceRotation !== animation.targetRotation) {\n    return false;\n  }\n  return true;\n};\n\ngoog.provide('ol.dom');\n\n\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number=} opt_width Canvas width.\n * @param {number=} opt_height Canvas height.\n * @return {CanvasRenderingContext2D} The context.\n */\nol.dom.createCanvasContext2D = function(opt_width, opt_height) {\n  var canvas = document.createElement('CANVAS');\n  if (opt_width) {\n    canvas.width = opt_width;\n  }\n  if (opt_height) {\n    canvas.height = opt_height;\n  }\n  return canvas.getContext('2d');\n};\n\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!Element} element Element.\n * @return {number} The width.\n */\nol.dom.outerWidth = function(element) {\n  var width = element.offsetWidth;\n  var style = getComputedStyle(element);\n  width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n  return width;\n};\n\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!Element} element Element.\n * @return {number} The height.\n */\nol.dom.outerHeight = function(element) {\n  var height = element.offsetHeight;\n  var style = getComputedStyle(element);\n  height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n  return height;\n};\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nol.dom.replaceNode = function(newNode, oldNode) {\n  var parent = oldNode.parentNode;\n  if (parent) {\n    parent.replaceChild(newNode, oldNode);\n  }\n};\n\n/**\n * @param {Node} node The node to remove.\n * @returns {Node} The node that was removed or null.\n */\nol.dom.removeNode = function(node) {\n  return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n};\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nol.dom.removeChildren = function(node) {\n  while (node.lastChild) {\n    node.removeChild(node.lastChild);\n  }\n};\n\ngoog.provide('ol.layer.Property');\n\n/**\n * @enum {string}\n */\nol.layer.Property = {\n  OPACITY: 'opacity',\n  VISIBLE: 'visible',\n  EXTENT: 'extent',\n  Z_INDEX: 'zIndex',\n  MAX_RESOLUTION: 'maxResolution',\n  MIN_RESOLUTION: 'minResolution',\n  SOURCE: 'source'\n};\n\ngoog.provide('ol.layer.Base');\n\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.layer.Property');\ngoog.require('ol.math');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with `ol.layer.Base` and all its subclasses, any property set in\n * the options is set as a {@link ol.Object} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @constructor\n * @abstract\n * @extends {ol.Object}\n * @param {olx.layer.BaseOptions} options Layer options.\n * @api\n */\nol.layer.Base = function(options) {\n\n  ol.Object.call(this);\n\n  /**\n   * @type {Object.<string, *>}\n   */\n  var properties = ol.obj.assign({}, options);\n  properties[ol.layer.Property.OPACITY] =\n      options.opacity !== undefined ? options.opacity : 1;\n  properties[ol.layer.Property.VISIBLE] =\n      options.visible !== undefined ? options.visible : true;\n  properties[ol.layer.Property.Z_INDEX] =\n      options.zIndex !== undefined ? options.zIndex : 0;\n  properties[ol.layer.Property.MAX_RESOLUTION] =\n      options.maxResolution !== undefined ? options.maxResolution : Infinity;\n  properties[ol.layer.Property.MIN_RESOLUTION] =\n      options.minResolution !== undefined ? options.minResolution : 0;\n\n  this.setProperties(properties);\n\n  /**\n   * @type {ol.LayerState}\n   * @private\n   */\n  this.state_ = /** @type {ol.LayerState} */ ({\n    layer: /** @type {ol.layer.Layer} */ (this),\n    managed: true\n  });\n\n  /**\n   * The layer type.\n   * @type {ol.LayerType}\n   * @protected;\n   */\n  this.type;\n\n};\nol.inherits(ol.layer.Base, ol.Object);\n\n\n/**\n * Get the layer type (used when creating a layer renderer).\n * @return {ol.LayerType} The layer type.\n */\nol.layer.Base.prototype.getType = function() {\n  return this.type;\n};\n\n\n/**\n * @return {ol.LayerState} Layer state.\n */\nol.layer.Base.prototype.getLayerState = function() {\n  this.state_.opacity = ol.math.clamp(this.getOpacity(), 0, 1);\n  this.state_.sourceState = this.getSourceState();\n  this.state_.visible = this.getVisible();\n  this.state_.extent = this.getExtent();\n  this.state_.zIndex = this.getZIndex();\n  this.state_.maxResolution = this.getMaxResolution();\n  this.state_.minResolution = Math.max(this.getMinResolution(), 0);\n\n  return this.state_;\n};\n\n\n/**\n * @abstract\n * @param {Array.<ol.layer.Layer>=} opt_array Array of layers (to be\n *     modified in place).\n * @return {Array.<ol.layer.Layer>} Array of layers.\n */\nol.layer.Base.prototype.getLayersArray = function(opt_array) {};\n\n\n/**\n * @abstract\n * @param {Array.<ol.LayerState>=} opt_states Optional list of layer\n *     states (to be modified in place).\n * @return {Array.<ol.LayerState>} List of layer states.\n */\nol.layer.Base.prototype.getLayerStatesArray = function(opt_states) {};\n\n\n/**\n * Return the {@link ol.Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {ol.Extent|undefined} The layer extent.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getExtent = function() {\n  return /** @type {ol.Extent|undefined} */ (\n    this.get(ol.layer.Property.EXTENT));\n};\n\n\n/**\n * Return the maximum resolution of the layer.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getMaxResolution = function() {\n  return /** @type {number} */ (\n    this.get(ol.layer.Property.MAX_RESOLUTION));\n};\n\n\n/**\n * Return the minimum resolution of the layer.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getMinResolution = function() {\n  return /** @type {number} */ (\n    this.get(ol.layer.Property.MIN_RESOLUTION));\n};\n\n\n/**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getOpacity = function() {\n  return /** @type {number} */ (this.get(ol.layer.Property.OPACITY));\n};\n\n\n/**\n * @abstract\n * @return {ol.source.State} Source state.\n */\nol.layer.Base.prototype.getSourceState = function() {};\n\n\n/**\n * Return the visibility of the layer (`true` or `false`).\n * @return {boolean} The visibility of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getVisible = function() {\n  return /** @type {boolean} */ (this.get(ol.layer.Property.VISIBLE));\n};\n\n\n/**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. The default Z-index is 0.\n * @return {number} The Z-index of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.getZIndex = function() {\n  return /** @type {number} */ (this.get(ol.layer.Property.Z_INDEX));\n};\n\n\n/**\n * Set the extent at which the layer is visible.  If `undefined`, the layer\n * will be visible at all extents.\n * @param {ol.Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setExtent = function(extent) {\n  this.set(ol.layer.Property.EXTENT, extent);\n};\n\n\n/**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setMaxResolution = function(maxResolution) {\n  this.set(ol.layer.Property.MAX_RESOLUTION, maxResolution);\n};\n\n\n/**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setMinResolution = function(minResolution) {\n  this.set(ol.layer.Property.MIN_RESOLUTION, minResolution);\n};\n\n\n/**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setOpacity = function(opacity) {\n  this.set(ol.layer.Property.OPACITY, opacity);\n};\n\n\n/**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setVisible = function(visible) {\n  this.set(ol.layer.Property.VISIBLE, visible);\n};\n\n\n/**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\nol.layer.Base.prototype.setZIndex = function(zindex) {\n  this.set(ol.layer.Property.Z_INDEX, zindex);\n};\n\ngoog.provide('ol.source.State');\n\n\n/**\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n * @enum {string}\n */\nol.source.State = {\n  UNDEFINED: 'undefined',\n  LOADING: 'loading',\n  READY: 'ready',\n  ERROR: 'error'\n};\n\n\ngoog.provide('ol.layer.Group');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.Object');\ngoog.require('ol.ObjectEventType');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.layer.Base');\ngoog.require('ol.obj');\ngoog.require('ol.source.State');\n\n\n/**\n * @classdesc\n * A {@link ol.Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @constructor\n * @extends {ol.layer.Base}\n * @param {olx.layer.GroupOptions=} opt_options Layer options.\n * @api\n */\nol.layer.Group = function(opt_options) {\n\n  var options = opt_options || {};\n  var baseOptions = /** @type {olx.layer.GroupOptions} */\n      (ol.obj.assign({}, options));\n  delete baseOptions.layers;\n\n  var layers = options.layers;\n\n  ol.layer.Base.call(this, baseOptions);\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.layersListenerKeys_ = [];\n\n  /**\n   * @private\n   * @type {Object.<string, Array.<ol.EventsKey>>}\n   */\n  this.listenerKeys_ = {};\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.layer.Group.Property_.LAYERS),\n      this.handleLayersChanged_, this);\n\n  if (layers) {\n    if (Array.isArray(layers)) {\n      layers = new ol.Collection(layers.slice(), {unique: true});\n    } else {\n      ol.asserts.assert(layers instanceof ol.Collection,\n          43); // Expected `layers` to be an array or an `ol.Collection`\n      layers = layers;\n    }\n  } else {\n    layers = new ol.Collection(undefined, {unique: true});\n  }\n\n  this.setLayers(layers);\n\n};\nol.inherits(ol.layer.Group, ol.layer.Base);\n\n\n/**\n * @private\n */\nol.layer.Group.prototype.handleLayerChange_ = function() {\n  this.changed();\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n * @private\n */\nol.layer.Group.prototype.handleLayersChanged_ = function(event) {\n  this.layersListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.layersListenerKeys_.length = 0;\n\n  var layers = this.getLayers();\n  this.layersListenerKeys_.push(\n      ol.events.listen(layers, ol.CollectionEventType.ADD,\n          this.handleLayersAdd_, this),\n      ol.events.listen(layers, ol.CollectionEventType.REMOVE,\n          this.handleLayersRemove_, this));\n\n  for (var id in this.listenerKeys_) {\n    this.listenerKeys_[id].forEach(ol.events.unlistenByKey);\n  }\n  ol.obj.clear(this.listenerKeys_);\n\n  var layersArray = layers.getArray();\n  var i, ii, layer;\n  for (i = 0, ii = layersArray.length; i < ii; i++) {\n    layer = layersArray[i];\n    this.listenerKeys_[ol.getUid(layer).toString()] = [\n      ol.events.listen(layer, ol.ObjectEventType.PROPERTYCHANGE,\n          this.handleLayerChange_, this),\n      ol.events.listen(layer, ol.events.EventType.CHANGE,\n          this.handleLayerChange_, this)\n    ];\n  }\n\n  this.changed();\n};\n\n\n/**\n * @param {ol.Collection.Event} collectionEvent Collection event.\n * @private\n */\nol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) {\n  var layer = /** @type {ol.layer.Base} */ (collectionEvent.element);\n  var key = ol.getUid(layer).toString();\n  this.listenerKeys_[key] = [\n    ol.events.listen(layer, ol.ObjectEventType.PROPERTYCHANGE,\n        this.handleLayerChange_, this),\n    ol.events.listen(layer, ol.events.EventType.CHANGE,\n        this.handleLayerChange_, this)\n  ];\n  this.changed();\n};\n\n\n/**\n * @param {ol.Collection.Event} collectionEvent Collection event.\n * @private\n */\nol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) {\n  var layer = /** @type {ol.layer.Base} */ (collectionEvent.element);\n  var key = ol.getUid(layer).toString();\n  this.listenerKeys_[key].forEach(ol.events.unlistenByKey);\n  delete this.listenerKeys_[key];\n  this.changed();\n};\n\n\n/**\n * Returns the {@link ol.Collection collection} of {@link ol.layer.Layer layers}\n * in this group.\n * @return {!ol.Collection.<ol.layer.Base>} Collection of\n *   {@link ol.layer.Base layers} that are part of this group.\n * @observable\n * @api\n */\nol.layer.Group.prototype.getLayers = function() {\n  return /** @type {!ol.Collection.<ol.layer.Base>} */ (this.get(\n      ol.layer.Group.Property_.LAYERS));\n};\n\n\n/**\n * Set the {@link ol.Collection collection} of {@link ol.layer.Layer layers}\n * in this group.\n * @param {!ol.Collection.<ol.layer.Base>} layers Collection of\n *   {@link ol.layer.Base layers} that are part of this group.\n * @observable\n * @api\n */\nol.layer.Group.prototype.setLayers = function(layers) {\n  this.set(ol.layer.Group.Property_.LAYERS, layers);\n};\n\n\n/**\n * @inheritDoc\n */\nol.layer.Group.prototype.getLayersArray = function(opt_array) {\n  var array = opt_array !== undefined ? opt_array : [];\n  this.getLayers().forEach(function(layer) {\n    layer.getLayersArray(array);\n  });\n  return array;\n};\n\n\n/**\n * @inheritDoc\n */\nol.layer.Group.prototype.getLayerStatesArray = function(opt_states) {\n  var states = opt_states !== undefined ? opt_states : [];\n\n  var pos = states.length;\n\n  this.getLayers().forEach(function(layer) {\n    layer.getLayerStatesArray(states);\n  });\n\n  var ownLayerState = this.getLayerState();\n  var i, ii, layerState;\n  for (i = pos, ii = states.length; i < ii; i++) {\n    layerState = states[i];\n    layerState.opacity *= ownLayerState.opacity;\n    layerState.visible = layerState.visible && ownLayerState.visible;\n    layerState.maxResolution = Math.min(\n        layerState.maxResolution, ownLayerState.maxResolution);\n    layerState.minResolution = Math.max(\n        layerState.minResolution, ownLayerState.minResolution);\n    if (ownLayerState.extent !== undefined) {\n      if (layerState.extent !== undefined) {\n        layerState.extent = ol.extent.getIntersection(\n            layerState.extent, ownLayerState.extent);\n      } else {\n        layerState.extent = ownLayerState.extent;\n      }\n    }\n  }\n\n  return states;\n};\n\n\n/**\n * @inheritDoc\n */\nol.layer.Group.prototype.getSourceState = function() {\n  return ol.source.State.READY;\n};\n\n/**\n * @enum {string}\n * @private\n */\nol.layer.Group.Property_ = {\n  LAYERS: 'layers'\n};\n\ngoog.provide('ol.PluginType');\n\n/**\n * A plugin type used when registering a plugin.  The supported plugin types are\n * 'MAP_RENDERER', and 'LAYER_RENDERER'.\n * @enum {string}\n */\nol.PluginType = {\n  MAP_RENDERER: 'MAP_RENDERER',\n  LAYER_RENDERER: 'LAYER_RENDERER'\n};\n\ngoog.provide('ol.plugins');\n\ngoog.require('ol.PluginType');\n\n/**\n * The registry of map renderer plugins.\n * @type {Array<olx.MapRendererPlugin>}\n * @private\n */\nol.plugins.mapRendererPlugins_ = [];\n\n\n/**\n * Get all registered map renderer plugins.\n * @return {Array<olx.MapRendererPlugin>} The registered map renderer plugins.\n */\nol.plugins.getMapRendererPlugins = function() {\n  return ol.plugins.mapRendererPlugins_;\n};\n\n\n/**\n * The registry of layer renderer plugins.\n * @type {Array<olx.LayerRendererPlugin>}\n * @private\n */\nol.plugins.layerRendererPlugins_ = [];\n\n\n/**\n * Get all registered layer renderer plugins.\n * @return {Array<olx.LayerRendererPlugin>} The registered layer renderer plugins.\n */\nol.plugins.getLayerRendererPlugins = function() {\n  return ol.plugins.layerRendererPlugins_;\n};\n\n\n/**\n * Register a plugin.\n * @param {ol.PluginType} type The plugin type.\n * @param {*} plugin The plugin.\n */\nol.plugins.register = function(type, plugin) {\n  var plugins;\n  switch (type) {\n    case ol.PluginType.MAP_RENDERER: {\n      plugins = ol.plugins.mapRendererPlugins_;\n      plugins.push(/** @type {olx.MapRendererPlugin} */ (plugin));\n      break;\n    }\n    case ol.PluginType.LAYER_RENDERER: {\n      plugins = ol.plugins.layerRendererPlugins_;\n      plugins.push(/** @type {olx.LayerRendererPlugin} */ (plugin));\n      break;\n    }\n    default: {\n      throw new Error('Unsupported plugin type: ' + type);\n    }\n  }\n};\n\n\n/**\n * Register multiple plugins.\n * @param {ol.PluginType} type The plugin type.\n * @param {Array} plugins The plugins.\n */\nol.plugins.registerMultiple = function(type, plugins) {\n  for (var i = 0, ii = plugins.length; i < ii; ++i) {\n    ol.plugins.register(type, plugins[i]);\n  }\n};\n\ngoog.provide('ol.renderer.Type');\n\n\n/**\n * Available renderers: `'canvas'` or `'webgl'`.\n * @enum {string}\n */\nol.renderer.Type = {\n  CANVAS: 'canvas',\n  WEBGL: 'webgl'\n};\n\ngoog.provide('ol.PluggableMap');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.MapBrowserEvent');\ngoog.require('ol.MapBrowserEventHandler');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.MapEvent');\ngoog.require('ol.MapEventType');\ngoog.require('ol.MapProperty');\ngoog.require('ol.Object');\ngoog.require('ol.ObjectEventType');\ngoog.require('ol.TileQueue');\ngoog.require('ol.View');\ngoog.require('ol.ViewHint');\ngoog.require('ol.asserts');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.has');\ngoog.require('ol.layer.Group');\ngoog.require('ol.obj');\ngoog.require('ol.plugins');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.size');\ngoog.require('ol.structs.PriorityQueue');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.Object}\n * @param {olx.MapOptions} options Map options.\n * @fires ol.MapBrowserEvent\n * @fires ol.MapEvent\n * @fires ol.render.Event#postcompose\n * @fires ol.render.Event#precompose\n * @api\n */\nol.PluggableMap = function(options) {\n\n  ol.Object.call(this);\n\n  var optionsInternal = ol.PluggableMap.createOptionsInternal(options);\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.loadTilesWhileAnimating_ =\n      options.loadTilesWhileAnimating !== undefined ?\n        options.loadTilesWhileAnimating : false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.loadTilesWhileInteracting_ =\n      options.loadTilesWhileInteracting !== undefined ?\n        options.loadTilesWhileInteracting : false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelRatio_ = options.pixelRatio !== undefined ?\n    options.pixelRatio : ol.has.DEVICE_PIXEL_RATIO;\n\n  /**\n   * @private\n   * @type {Object.<string, string>}\n   */\n  this.logos_ = optionsInternal.logos;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.animationDelayKey_;\n\n  /**\n   * @private\n   */\n  this.animationDelay_ = function() {\n    this.animationDelayKey_ = undefined;\n    this.renderFrame_.call(this, Date.now());\n  }.bind(this);\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.coordinateToPixelTransform_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.pixelToCoordinateTransform_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.frameIndex_ = 0;\n\n  /**\n   * @private\n   * @type {?olx.FrameState}\n   */\n  this.frameState_ = null;\n\n  /**\n   * The extent at the previous 'moveend' event.\n   * @private\n   * @type {ol.Extent}\n   */\n  this.previousExtent_ = null;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.viewPropertyListenerKey_ = null;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.viewChangeListenerKey_ = null;\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.layerGroupPropertyListenerKeys_ = null;\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.viewport_ = document.createElement('DIV');\n  this.viewport_.className = 'ol-viewport' + (ol.has.TOUCH ? ' ol-touch' : '');\n  this.viewport_.style.position = 'relative';\n  this.viewport_.style.overflow = 'hidden';\n  this.viewport_.style.width = '100%';\n  this.viewport_.style.height = '100%';\n  // prevent page zoom on IE >= 10 browsers\n  this.viewport_.style.msTouchAction = 'none';\n  this.viewport_.style.touchAction = 'none';\n\n  /**\n   * @private\n   * @type {!Element}\n   */\n  this.overlayContainer_ = document.createElement('DIV');\n  this.overlayContainer_.className = 'ol-overlaycontainer';\n  this.viewport_.appendChild(this.overlayContainer_);\n\n  /**\n   * @private\n   * @type {!Element}\n   */\n  this.overlayContainerStopEvent_ = document.createElement('DIV');\n  this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n  var overlayEvents = [\n    ol.events.EventType.CLICK,\n    ol.events.EventType.DBLCLICK,\n    ol.events.EventType.MOUSEDOWN,\n    ol.events.EventType.TOUCHSTART,\n    ol.events.EventType.MSPOINTERDOWN,\n    ol.MapBrowserEventType.POINTERDOWN,\n    ol.events.EventType.MOUSEWHEEL,\n    ol.events.EventType.WHEEL\n  ];\n  for (var i = 0, ii = overlayEvents.length; i < ii; ++i) {\n    ol.events.listen(this.overlayContainerStopEvent_, overlayEvents[i],\n        ol.events.Event.stopPropagation);\n  }\n  this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n  /**\n   * @private\n   * @type {ol.MapBrowserEventHandler}\n   */\n  this.mapBrowserEventHandler_ = new ol.MapBrowserEventHandler(this, options.moveTolerance);\n  for (var key in ol.MapBrowserEventType) {\n    ol.events.listen(this.mapBrowserEventHandler_, ol.MapBrowserEventType[key],\n        this.handleMapBrowserEvent, this);\n  }\n\n  /**\n   * @private\n   * @type {Element|Document}\n   */\n  this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.keyHandlerKeys_ = null;\n\n  ol.events.listen(this.viewport_, ol.events.EventType.WHEEL,\n      this.handleBrowserEvent, this);\n  ol.events.listen(this.viewport_, ol.events.EventType.MOUSEWHEEL,\n      this.handleBrowserEvent, this);\n\n  /**\n   * @type {ol.Collection.<ol.control.Control>}\n   * @protected\n   */\n  this.controls = optionsInternal.controls || new ol.Collection();\n\n  /**\n   * @type {ol.Collection.<ol.interaction.Interaction>}\n   * @protected\n   */\n  this.interactions = optionsInternal.interactions || new ol.Collection();\n\n  /**\n   * @type {ol.Collection.<ol.Overlay>}\n   * @private\n   */\n  this.overlays_ = optionsInternal.overlays;\n\n  /**\n   * A lookup of overlays by id.\n   * @private\n   * @type {Object.<string, ol.Overlay>}\n   */\n  this.overlayIdIndex_ = {};\n\n  /**\n   * @type {ol.renderer.Map}\n   * @private\n   */\n  this.renderer_ = optionsInternal.mapRendererPlugin['create'](this.viewport_, this);\n\n  /**\n   * @type {function(Event)|undefined}\n   * @private\n   */\n  this.handleResize_;\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.focus_ = null;\n\n  /**\n   * @private\n   * @type {Array.<ol.PostRenderFunction>}\n   */\n  this.postRenderFunctions_ = [];\n\n  /**\n   * @private\n   * @type {ol.TileQueue}\n   */\n  this.tileQueue_ = new ol.TileQueue(\n      this.getTilePriority.bind(this),\n      this.handleTileChange_.bind(this));\n\n  /**\n   * Uids of features to skip at rendering time.\n   * @type {Object.<string, boolean>}\n   * @private\n   */\n  this.skippedFeatureUids_ = {};\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP),\n      this.handleLayerGroupChanged_, this);\n  ol.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.VIEW),\n      this.handleViewChanged_, this);\n  ol.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.SIZE),\n      this.handleSizeChanged_, this);\n  ol.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.TARGET),\n      this.handleTargetChanged_, this);\n\n  // setProperties will trigger the rendering of the map if the map\n  // is \"defined\" already.\n  this.setProperties(optionsInternal.values);\n\n  this.controls.forEach(\n      /**\n       * @param {ol.control.Control} control Control.\n       * @this {ol.PluggableMap}\n       */\n      function(control) {\n        control.setMap(this);\n      }, this);\n\n  ol.events.listen(this.controls, ol.CollectionEventType.ADD,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        event.element.setMap(this);\n      }, this);\n\n  ol.events.listen(this.controls, ol.CollectionEventType.REMOVE,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        event.element.setMap(null);\n      }, this);\n\n  this.interactions.forEach(\n      /**\n       * @param {ol.interaction.Interaction} interaction Interaction.\n       * @this {ol.PluggableMap}\n       */\n      function(interaction) {\n        interaction.setMap(this);\n      }, this);\n\n  ol.events.listen(this.interactions, ol.CollectionEventType.ADD,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        event.element.setMap(this);\n      }, this);\n\n  ol.events.listen(this.interactions, ol.CollectionEventType.REMOVE,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        event.element.setMap(null);\n      }, this);\n\n  this.overlays_.forEach(this.addOverlayInternal_, this);\n\n  ol.events.listen(this.overlays_, ol.CollectionEventType.ADD,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        this.addOverlayInternal_(/** @type {ol.Overlay} */ (event.element));\n      }, this);\n\n  ol.events.listen(this.overlays_, ol.CollectionEventType.REMOVE,\n      /**\n       * @param {ol.Collection.Event} event Collection event.\n       */\n      function(event) {\n        var overlay = /** @type {ol.Overlay} */ (event.element);\n        var id = overlay.getId();\n        if (id !== undefined) {\n          delete this.overlayIdIndex_[id.toString()];\n        }\n        event.element.setMap(null);\n      }, this);\n\n};\nol.inherits(ol.PluggableMap, ol.Object);\n\n\n/**\n * Add the given control to the map.\n * @param {ol.control.Control} control Control.\n * @api\n */\nol.PluggableMap.prototype.addControl = function(control) {\n  this.getControls().push(control);\n};\n\n\n/**\n * Add the given interaction to the map.\n * @param {ol.interaction.Interaction} interaction Interaction to add.\n * @api\n */\nol.PluggableMap.prototype.addInteraction = function(interaction) {\n  this.getInteractions().push(interaction);\n};\n\n\n/**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link ol.Collection}.\n * @param {ol.layer.Base} layer Layer.\n * @api\n */\nol.PluggableMap.prototype.addLayer = function(layer) {\n  var layers = this.getLayerGroup().getLayers();\n  layers.push(layer);\n};\n\n\n/**\n * Add the given overlay to the map.\n * @param {ol.Overlay} overlay Overlay.\n * @api\n */\nol.PluggableMap.prototype.addOverlay = function(overlay) {\n  this.getOverlays().push(overlay);\n};\n\n\n/**\n * This deals with map's overlay collection changes.\n * @param {ol.Overlay} overlay Overlay.\n * @private\n */\nol.PluggableMap.prototype.addOverlayInternal_ = function(overlay) {\n  var id = overlay.getId();\n  if (id !== undefined) {\n    this.overlayIdIndex_[id.toString()] = overlay;\n  }\n  overlay.setMap(this);\n};\n\n\n/**\n *\n * @inheritDoc\n */\nol.PluggableMap.prototype.disposeInternal = function() {\n  this.mapBrowserEventHandler_.dispose();\n  ol.events.unlisten(this.viewport_, ol.events.EventType.WHEEL,\n      this.handleBrowserEvent, this);\n  ol.events.unlisten(this.viewport_, ol.events.EventType.MOUSEWHEEL,\n      this.handleBrowserEvent, this);\n  if (this.handleResize_ !== undefined) {\n    window.removeEventListener(ol.events.EventType.RESIZE,\n        this.handleResize_, false);\n    this.handleResize_ = undefined;\n  }\n  if (this.animationDelayKey_) {\n    cancelAnimationFrame(this.animationDelayKey_);\n    this.animationDelayKey_ = undefined;\n  }\n  this.setTarget(null);\n  ol.Object.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {ol.Pixel} pixel Pixel.\n * @param {function(this: S, (ol.Feature|ol.render.Feature),\n *     ol.layer.Layer): T} callback Feature callback. The callback will be\n *     called with two arguments. The first argument is one\n *     {@link ol.Feature feature} or\n *     {@link ol.render.Feature render feature} at the pixel, the second is\n *     the {@link ol.layer.Layer layer} of the feature and will be null for\n *     unmanaged layers. To stop detection, callback functions can return a\n *     truthy value.\n * @param {olx.AtPixelOptions=} opt_options Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\nol.PluggableMap.prototype.forEachFeatureAtPixel = function(pixel, callback, opt_options) {\n  if (!this.frameState_) {\n    return;\n  }\n  var coordinate = this.getCoordinateFromPixel(pixel);\n  opt_options = opt_options !== undefined ? opt_options : {};\n  var hitTolerance = opt_options.hitTolerance !== undefined ?\n    opt_options.hitTolerance * this.frameState_.pixelRatio : 0;\n  var layerFilter = opt_options.layerFilter !== undefined ?\n    opt_options.layerFilter : ol.functions.TRUE;\n  return this.renderer_.forEachFeatureAtCoordinate(\n      coordinate, this.frameState_, hitTolerance, callback, null,\n      layerFilter, null);\n};\n\n\n/**\n * Get all features that intersect a pixel on the viewport.\n * @param {ol.Pixel} pixel Pixel.\n * @param {olx.AtPixelOptions=} opt_options Optional options.\n * @return {Array.<ol.Feature|ol.render.Feature>} The detected features or\n * `null` if none were found.\n * @api\n */\nol.PluggableMap.prototype.getFeaturesAtPixel = function(pixel, opt_options) {\n  var features = null;\n  this.forEachFeatureAtPixel(pixel, function(feature) {\n    if (!features) {\n      features = [];\n    }\n    features.push(feature);\n  }, opt_options);\n  return features;\n};\n\n/**\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {ol.Pixel} pixel Pixel.\n * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback\n *     Layer callback. This callback will receive two arguments: first is the\n *     {@link ol.layer.Layer layer}, second argument is an array representing\n *     [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n *     that do not currently support this argument. To stop detection, callback\n *     functions can return a truthy value.\n * @param {S=} opt_this Value to use as `this` when executing `callback`.\n * @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer\n *     filter function. The filter function will receive one argument, the\n *     {@link ol.layer.Layer layer-candidate} and it should return a boolean\n *     value. Only layers which are visible and for which this function returns\n *     `true` will be tested for features. By default, all visible layers will\n *     be tested.\n * @param {U=} opt_this2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T,U\n * @api\n */\nol.PluggableMap.prototype.forEachLayerAtPixel = function(pixel, callback, opt_this, opt_layerFilter, opt_this2) {\n  if (!this.frameState_) {\n    return;\n  }\n  var thisArg = opt_this !== undefined ? opt_this : null;\n  var layerFilter = opt_layerFilter !== undefined ?\n    opt_layerFilter : ol.functions.TRUE;\n  var thisArg2 = opt_this2 !== undefined ? opt_this2 : null;\n  return this.renderer_.forEachLayerAtPixel(\n      pixel, this.frameState_, callback, thisArg,\n      layerFilter, thisArg2);\n};\n\n\n/**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {ol.Pixel} pixel Pixel.\n * @param {olx.AtPixelOptions=} opt_options Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @template U\n * @api\n */\nol.PluggableMap.prototype.hasFeatureAtPixel = function(pixel, opt_options) {\n  if (!this.frameState_) {\n    return false;\n  }\n  var coordinate = this.getCoordinateFromPixel(pixel);\n  opt_options = opt_options !== undefined ? opt_options : {};\n  var layerFilter = opt_options.layerFilter !== undefined ?\n    opt_options.layerFilter : ol.functions.TRUE;\n  var hitTolerance = opt_options.hitTolerance !== undefined ?\n    opt_options.hitTolerance * this.frameState_.pixelRatio : 0;\n  return this.renderer_.hasFeatureAtCoordinate(\n      coordinate, this.frameState_, hitTolerance, layerFilter, null);\n};\n\n\n/**\n * Returns the coordinate in view projection for a browser event.\n * @param {Event} event Event.\n * @return {ol.Coordinate} Coordinate.\n * @api\n */\nol.PluggableMap.prototype.getEventCoordinate = function(event) {\n  return this.getCoordinateFromPixel(this.getEventPixel(event));\n};\n\n\n/**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {Event} event Event.\n * @return {ol.Pixel} Pixel.\n * @api\n */\nol.PluggableMap.prototype.getEventPixel = function(event) {\n  var viewportPosition = this.viewport_.getBoundingClientRect();\n  var eventPosition = event.changedTouches ? event.changedTouches[0] : event;\n  return [\n    eventPosition.clientX - viewportPosition.left,\n    eventPosition.clientY - viewportPosition.top\n  ];\n};\n\n\n/**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {Element|string|undefined} The Element or id of the Element that the\n *     map is rendered in.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.getTarget = function() {\n  return /** @type {Element|string|undefined} */ (\n    this.get(ol.MapProperty.TARGET));\n};\n\n\n/**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {Element} The element that the map is rendered in.\n * @api\n */\nol.PluggableMap.prototype.getTargetElement = function() {\n  var target = this.getTarget();\n  if (target !== undefined) {\n    return typeof target === 'string' ?\n      document.getElementById(target) :\n      target;\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * Get the coordinate for a given pixel.  This returns a coordinate in the\n * map view projection.\n * @param {ol.Pixel} pixel Pixel position in the map viewport.\n * @return {ol.Coordinate} The coordinate for the pixel position.\n * @api\n */\nol.PluggableMap.prototype.getCoordinateFromPixel = function(pixel) {\n  var frameState = this.frameState_;\n  if (!frameState) {\n    return null;\n  } else {\n    return ol.transform.apply(frameState.pixelToCoordinateTransform, pixel.slice());\n  }\n};\n\n\n/**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {ol.Collection.<ol.control.Control>} Controls.\n * @api\n */\nol.PluggableMap.prototype.getControls = function() {\n  return this.controls;\n};\n\n\n/**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {ol.Collection.<ol.Overlay>} Overlays.\n * @api\n */\nol.PluggableMap.prototype.getOverlays = function() {\n  return this.overlays_;\n};\n\n\n/**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {ol.Overlay} Overlay.\n * @api\n */\nol.PluggableMap.prototype.getOverlayById = function(id) {\n  var overlay = this.overlayIdIndex_[id.toString()];\n  return overlay !== undefined ? overlay : null;\n};\n\n\n/**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {ol.Collection.<ol.interaction.Interaction>} Interactions.\n * @api\n */\nol.PluggableMap.prototype.getInteractions = function() {\n  return this.interactions;\n};\n\n\n/**\n * Get the layergroup associated with this map.\n * @return {ol.layer.Group} A layer group containing the layers in this map.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.getLayerGroup = function() {\n  return /** @type {ol.layer.Group} */ (this.get(ol.MapProperty.LAYERGROUP));\n};\n\n\n/**\n * Get the collection of layers associated with this map.\n * @return {!ol.Collection.<ol.layer.Base>} Layers.\n * @api\n */\nol.PluggableMap.prototype.getLayers = function() {\n  var layers = this.getLayerGroup().getLayers();\n  return layers;\n};\n\n\n/**\n * Get the pixel for a coordinate.  This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {ol.Coordinate} coordinate A map coordinate.\n * @return {ol.Pixel} A pixel position in the map viewport.\n * @api\n */\nol.PluggableMap.prototype.getPixelFromCoordinate = function(coordinate) {\n  var frameState = this.frameState_;\n  if (!frameState) {\n    return null;\n  } else {\n    return ol.transform.apply(frameState.coordinateToPixelTransform,\n        coordinate.slice(0, 2));\n  }\n};\n\n\n/**\n * Get the map renderer.\n * @return {ol.renderer.Map} Renderer\n */\nol.PluggableMap.prototype.getRenderer = function() {\n  return this.renderer_;\n};\n\n\n/**\n * Get the size of this map.\n * @return {ol.Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.getSize = function() {\n  return /** @type {ol.Size|undefined} */ (this.get(ol.MapProperty.SIZE));\n};\n\n\n/**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {ol.View} The view that controls this map.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.getView = function() {\n  return /** @type {ol.View} */ (this.get(ol.MapProperty.VIEW));\n};\n\n\n/**\n * Get the element that serves as the map viewport.\n * @return {Element} Viewport.\n * @api\n */\nol.PluggableMap.prototype.getViewport = function() {\n  return this.viewport_;\n};\n\n\n/**\n * Get the element that serves as the container for overlays.  Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link ol.MapBrowserEvent}\n * events.\n * @return {!Element} The map's overlay container.\n */\nol.PluggableMap.prototype.getOverlayContainer = function() {\n  return this.overlayContainer_;\n};\n\n\n/**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link ol.MapBrowserEvent}.\n * @return {!Element} The map's overlay container that stops events.\n */\nol.PluggableMap.prototype.getOverlayContainerStopEvent = function() {\n  return this.overlayContainerStopEvent_;\n};\n\n\n/**\n * @param {ol.Tile} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {ol.Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nol.PluggableMap.prototype.getTilePriority = function(tile, tileSourceKey, tileCenter, tileResolution) {\n  // Filter out tiles at higher zoom levels than the current zoom level, or that\n  // are outside the visible extent.\n  var frameState = this.frameState_;\n  if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n    return ol.structs.PriorityQueue.DROP;\n  }\n  if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n    return ol.structs.PriorityQueue.DROP;\n  }\n  // Prioritize the highest zoom level tiles closest to the focus.\n  // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n  // Within a zoom level, tiles are prioritized by the distance in pixels\n  // between the center of the tile and the focus.  The factor of 65536 means\n  // that the prioritization should behave as desired for tiles up to\n  // 65536 * Math.log(2) = 45426 pixels from the focus.\n  var deltaX = tileCenter[0] - frameState.focus[0];\n  var deltaY = tileCenter[1] - frameState.focus[1];\n  return 65536 * Math.log(tileResolution) +\n      Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;\n};\n\n\n/**\n * @param {Event} browserEvent Browser event.\n * @param {string=} opt_type Type.\n */\nol.PluggableMap.prototype.handleBrowserEvent = function(browserEvent, opt_type) {\n  var type = opt_type || browserEvent.type;\n  var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent);\n  this.handleMapBrowserEvent(mapBrowserEvent);\n};\n\n\n/**\n * @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle.\n */\nol.PluggableMap.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {\n  if (!this.frameState_) {\n    // With no view defined, we cannot translate pixels into geographical\n    // coordinates so interactions cannot be used.\n    return;\n  }\n  this.focus_ = mapBrowserEvent.coordinate;\n  mapBrowserEvent.frameState = this.frameState_;\n  var interactionsArray = this.getInteractions().getArray();\n  var i;\n  if (this.dispatchEvent(mapBrowserEvent) !== false) {\n    for (i = interactionsArray.length - 1; i >= 0; i--) {\n      var interaction = interactionsArray[i];\n      if (!interaction.getActive()) {\n        continue;\n      }\n      var cont = interaction.handleEvent(mapBrowserEvent);\n      if (!cont) {\n        break;\n      }\n    }\n  }\n};\n\n\n/**\n * @protected\n */\nol.PluggableMap.prototype.handlePostRender = function() {\n\n  var frameState = this.frameState_;\n\n  // Manage the tile queue\n  // Image loads are expensive and a limited resource, so try to use them\n  // efficiently:\n  // * When the view is static we allow a large number of parallel tile loads\n  //   to complete the frame as quickly as possible.\n  // * When animating or interacting, image loads can cause janks, so we reduce\n  //   the maximum number of loads per frame and limit the number of parallel\n  //   tile loads to remain reactive to view changes and to reduce the chance of\n  //   loading tiles that will quickly disappear from view.\n  var tileQueue = this.tileQueue_;\n  if (!tileQueue.isEmpty()) {\n    var maxTotalLoading = 16;\n    var maxNewLoads = maxTotalLoading;\n    if (frameState) {\n      var hints = frameState.viewHints;\n      if (hints[ol.ViewHint.ANIMATING]) {\n        maxTotalLoading = this.loadTilesWhileAnimating_ ? 8 : 0;\n        maxNewLoads = 2;\n      }\n      if (hints[ol.ViewHint.INTERACTING]) {\n        maxTotalLoading = this.loadTilesWhileInteracting_ ? 8 : 0;\n        maxNewLoads = 2;\n      }\n    }\n    if (tileQueue.getTilesLoading() < maxTotalLoading) {\n      tileQueue.reprioritize(); // FIXME only call if view has changed\n      tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n    }\n  }\n\n  var postRenderFunctions = this.postRenderFunctions_;\n  var i, ii;\n  for (i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n    postRenderFunctions[i](this, frameState);\n  }\n  postRenderFunctions.length = 0;\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleSizeChanged_ = function() {\n  this.render();\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleTargetChanged_ = function() {\n  // target may be undefined, null, a string or an Element.\n  // If it's a string we convert it to an Element before proceeding.\n  // If it's not now an Element we remove the viewport from the DOM.\n  // If it's an Element we append the viewport element to it.\n\n  var targetElement;\n  if (this.getTarget()) {\n    targetElement = this.getTargetElement();\n  }\n\n  if (this.keyHandlerKeys_) {\n    for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n      ol.events.unlistenByKey(this.keyHandlerKeys_[i]);\n    }\n    this.keyHandlerKeys_ = null;\n  }\n\n  if (!targetElement) {\n    this.renderer_.removeLayerRenderers();\n    ol.dom.removeNode(this.viewport_);\n    if (this.handleResize_ !== undefined) {\n      window.removeEventListener(ol.events.EventType.RESIZE,\n          this.handleResize_, false);\n      this.handleResize_ = undefined;\n    }\n  } else {\n    targetElement.appendChild(this.viewport_);\n\n    var keyboardEventTarget = !this.keyboardEventTarget_ ?\n      targetElement : this.keyboardEventTarget_;\n    this.keyHandlerKeys_ = [\n      ol.events.listen(keyboardEventTarget, ol.events.EventType.KEYDOWN,\n          this.handleBrowserEvent, this),\n      ol.events.listen(keyboardEventTarget, ol.events.EventType.KEYPRESS,\n          this.handleBrowserEvent, this)\n    ];\n\n    if (!this.handleResize_) {\n      this.handleResize_ = this.updateSize.bind(this);\n      window.addEventListener(ol.events.EventType.RESIZE,\n          this.handleResize_, false);\n    }\n  }\n\n  this.updateSize();\n  // updateSize calls setSize, so no need to call this.render\n  // ourselves here.\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleTileChange_ = function() {\n  this.render();\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleViewPropertyChanged_ = function() {\n  this.render();\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleViewChanged_ = function() {\n  if (this.viewPropertyListenerKey_) {\n    ol.events.unlistenByKey(this.viewPropertyListenerKey_);\n    this.viewPropertyListenerKey_ = null;\n  }\n  if (this.viewChangeListenerKey_) {\n    ol.events.unlistenByKey(this.viewChangeListenerKey_);\n    this.viewChangeListenerKey_ = null;\n  }\n  var view = this.getView();\n  if (view) {\n    this.viewport_.setAttribute('data-view', ol.getUid(view));\n    this.viewPropertyListenerKey_ = ol.events.listen(\n        view, ol.ObjectEventType.PROPERTYCHANGE,\n        this.handleViewPropertyChanged_, this);\n    this.viewChangeListenerKey_ = ol.events.listen(\n        view, ol.events.EventType.CHANGE,\n        this.handleViewPropertyChanged_, this);\n  }\n  this.render();\n};\n\n\n/**\n * @private\n */\nol.PluggableMap.prototype.handleLayerGroupChanged_ = function() {\n  if (this.layerGroupPropertyListenerKeys_) {\n    this.layerGroupPropertyListenerKeys_.forEach(ol.events.unlistenByKey);\n    this.layerGroupPropertyListenerKeys_ = null;\n  }\n  var layerGroup = this.getLayerGroup();\n  if (layerGroup) {\n    this.layerGroupPropertyListenerKeys_ = [\n      ol.events.listen(\n          layerGroup, ol.ObjectEventType.PROPERTYCHANGE,\n          this.render, this),\n      ol.events.listen(\n          layerGroup, ol.events.EventType.CHANGE,\n          this.render, this)\n    ];\n  }\n  this.render();\n};\n\n\n/**\n * @return {boolean} Is rendered.\n */\nol.PluggableMap.prototype.isRendered = function() {\n  return !!this.frameState_;\n};\n\n\n/**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\nol.PluggableMap.prototype.renderSync = function() {\n  if (this.animationDelayKey_) {\n    cancelAnimationFrame(this.animationDelayKey_);\n  }\n  this.animationDelay_();\n};\n\n\n/**\n * Request a map rendering (at the next animation frame).\n * @api\n */\nol.PluggableMap.prototype.render = function() {\n  if (this.animationDelayKey_ === undefined) {\n    this.animationDelayKey_ = requestAnimationFrame(\n        this.animationDelay_);\n  }\n};\n\n\n/**\n * Remove the given control from the map.\n * @param {ol.control.Control} control Control.\n * @return {ol.control.Control|undefined} The removed control (or undefined\n *     if the control was not found).\n * @api\n */\nol.PluggableMap.prototype.removeControl = function(control) {\n  return this.getControls().remove(control);\n};\n\n\n/**\n * Remove the given interaction from the map.\n * @param {ol.interaction.Interaction} interaction Interaction to remove.\n * @return {ol.interaction.Interaction|undefined} The removed interaction (or\n *     undefined if the interaction was not found).\n * @api\n */\nol.PluggableMap.prototype.removeInteraction = function(interaction) {\n  return this.getInteractions().remove(interaction);\n};\n\n\n/**\n * Removes the given layer from the map.\n * @param {ol.layer.Base} layer Layer.\n * @return {ol.layer.Base|undefined} The removed layer (or undefined if the\n *     layer was not found).\n * @api\n */\nol.PluggableMap.prototype.removeLayer = function(layer) {\n  var layers = this.getLayerGroup().getLayers();\n  return layers.remove(layer);\n};\n\n\n/**\n * Remove the given overlay from the map.\n * @param {ol.Overlay} overlay Overlay.\n * @return {ol.Overlay|undefined} The removed overlay (or undefined\n *     if the overlay was not found).\n * @api\n */\nol.PluggableMap.prototype.removeOverlay = function(overlay) {\n  return this.getOverlays().remove(overlay);\n};\n\n\n/**\n * @param {number} time Time.\n * @private\n */\nol.PluggableMap.prototype.renderFrame_ = function(time) {\n  var i, ii, viewState;\n\n  var size = this.getSize();\n  var view = this.getView();\n  var extent = ol.extent.createEmpty();\n  var previousFrameState = this.frameState_;\n  /** @type {?olx.FrameState} */\n  var frameState = null;\n  if (size !== undefined && ol.size.hasArea(size) && view && view.isDef()) {\n    var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n    var layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n    var layerStates = {};\n    for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n      layerStates[ol.getUid(layerStatesArray[i].layer)] = layerStatesArray[i];\n    }\n    viewState = view.getState();\n    var center = viewState.center;\n    var pixelResolution = viewState.resolution / this.pixelRatio_;\n    center[0] = Math.round(center[0] / pixelResolution) * pixelResolution;\n    center[1] = Math.round(center[1] / pixelResolution) * pixelResolution;\n    frameState = /** @type {olx.FrameState} */ ({\n      animate: false,\n      coordinateToPixelTransform: this.coordinateToPixelTransform_,\n      extent: extent,\n      focus: !this.focus_ ? center : this.focus_,\n      index: this.frameIndex_++,\n      layerStates: layerStates,\n      layerStatesArray: layerStatesArray,\n      logos: ol.obj.assign({}, this.logos_),\n      pixelRatio: this.pixelRatio_,\n      pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n      postRenderFunctions: [],\n      size: size,\n      skippedFeatureUids: this.skippedFeatureUids_,\n      tileQueue: this.tileQueue_,\n      time: time,\n      usedTiles: {},\n      viewState: viewState,\n      viewHints: viewHints,\n      wantedTiles: {}\n    });\n  }\n\n  if (frameState) {\n    frameState.extent = ol.extent.getForViewAndSize(viewState.center,\n        viewState.resolution, viewState.rotation, frameState.size, extent);\n  }\n\n  this.frameState_ = frameState;\n  this.renderer_.renderFrame(frameState);\n\n  if (frameState) {\n    if (frameState.animate) {\n      this.render();\n    }\n    Array.prototype.push.apply(\n        this.postRenderFunctions_, frameState.postRenderFunctions);\n\n    if (previousFrameState) {\n      var moveStart = !this.previousExtent_ ||\n                  (!ol.extent.isEmpty(this.previousExtent_) &&\n                  !ol.extent.equals(frameState.extent, this.previousExtent_));\n      if (moveStart) {\n        this.dispatchEvent(\n            new ol.MapEvent(ol.MapEventType.MOVESTART, this, previousFrameState));\n        this.previousExtent_ = ol.extent.createOrUpdateEmpty(this.previousExtent_);\n      }\n    }\n\n    var idle = this.previousExtent_ &&\n        !frameState.viewHints[ol.ViewHint.ANIMATING] &&\n        !frameState.viewHints[ol.ViewHint.INTERACTING] &&\n        !ol.extent.equals(frameState.extent, this.previousExtent_);\n\n    if (idle) {\n      this.dispatchEvent(\n          new ol.MapEvent(ol.MapEventType.MOVEEND, this, frameState));\n      ol.extent.clone(frameState.extent, this.previousExtent_);\n    }\n  }\n\n  this.dispatchEvent(\n      new ol.MapEvent(ol.MapEventType.POSTRENDER, this, frameState));\n\n  setTimeout(this.handlePostRender.bind(this), 0);\n\n};\n\n\n/**\n * Sets the layergroup of this map.\n * @param {ol.layer.Group} layerGroup A layer group containing the layers in\n *     this map.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.setLayerGroup = function(layerGroup) {\n  this.set(ol.MapProperty.LAYERGROUP, layerGroup);\n};\n\n\n/**\n * Set the size of this map.\n * @param {ol.Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.setSize = function(size) {\n  this.set(ol.MapProperty.SIZE, size);\n};\n\n\n/**\n * Set the target element to render this map into.\n * @param {Element|string|undefined} target The Element or id of the Element\n *     that the map is rendered in.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.setTarget = function(target) {\n  this.set(ol.MapProperty.TARGET, target);\n};\n\n\n/**\n * Set the view for this map.\n * @param {ol.View} view The view that controls this map.\n * @observable\n * @api\n */\nol.PluggableMap.prototype.setView = function(view) {\n  this.set(ol.MapProperty.VIEW, view);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n */\nol.PluggableMap.prototype.skipFeature = function(feature) {\n  var featureUid = ol.getUid(feature).toString();\n  this.skippedFeatureUids_[featureUid] = true;\n  this.render();\n};\n\n\n/**\n * Force a recalculation of the map viewport size.  This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\nol.PluggableMap.prototype.updateSize = function() {\n  var targetElement = this.getTargetElement();\n\n  if (!targetElement) {\n    this.setSize(undefined);\n  } else {\n    var computedStyle = getComputedStyle(targetElement);\n    this.setSize([\n      targetElement.offsetWidth -\n          parseFloat(computedStyle['borderLeftWidth']) -\n          parseFloat(computedStyle['paddingLeft']) -\n          parseFloat(computedStyle['paddingRight']) -\n          parseFloat(computedStyle['borderRightWidth']),\n      targetElement.offsetHeight -\n          parseFloat(computedStyle['borderTopWidth']) -\n          parseFloat(computedStyle['paddingTop']) -\n          parseFloat(computedStyle['paddingBottom']) -\n          parseFloat(computedStyle['borderBottomWidth'])\n    ]);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n */\nol.PluggableMap.prototype.unskipFeature = function(feature) {\n  var featureUid = ol.getUid(feature).toString();\n  delete this.skippedFeatureUids_[featureUid];\n  this.render();\n};\n\n\n/**\n * @type {Array.<ol.renderer.Type>}\n * @const\n */\nol.PluggableMap.DEFAULT_RENDERER_TYPES = [\n  ol.renderer.Type.CANVAS,\n  ol.renderer.Type.WEBGL\n];\n\n\n/**\n * @const\n * @type {string}\n */\nol.PluggableMap.LOGO_URL = 'data:image/png;base64,' +\n    'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI' +\n    'WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA' +\n    'AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW' +\n    'WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY' +\n    'asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX' +\n    'H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk' +\n    'bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW' +\n    '2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP' +\n    'VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT' +\n    'acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar' +\n    'ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi' +\n    'zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn' +\n    'BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF' +\n    'hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ' +\n    'REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC' +\n    'Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe' +\n    '0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8' +\n    'a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a' +\n    'hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn' +\n    'B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg' +\n    'q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC';\n\n\n/**\n * @param {olx.MapOptions} options Map options.\n * @return {ol.MapOptionsInternal} Internal map options.\n */\nol.PluggableMap.createOptionsInternal = function(options) {\n\n  /**\n   * @type {Element|Document}\n   */\n  var keyboardEventTarget = null;\n  if (options.keyboardEventTarget !== undefined) {\n    keyboardEventTarget = typeof options.keyboardEventTarget === 'string' ?\n      document.getElementById(options.keyboardEventTarget) :\n      options.keyboardEventTarget;\n  }\n\n  /**\n   * @type {Object.<string, *>}\n   */\n  var values = {};\n\n  var logos = {};\n  if (options.logo === undefined ||\n      (typeof options.logo === 'boolean' && options.logo)) {\n    logos[ol.PluggableMap.LOGO_URL] = 'https://openlayers.org/';\n  } else {\n    var logo = options.logo;\n    if (typeof logo === 'string') {\n      logos[logo] = '';\n    } else if (logo instanceof HTMLElement) {\n      logos[ol.getUid(logo).toString()] = logo;\n    } else if (logo) {\n      ol.asserts.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.\n      ol.asserts.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.\n      logos[logo.src] = logo.href;\n    }\n  }\n\n  var layerGroup = (options.layers instanceof ol.layer.Group) ?\n    options.layers : new ol.layer.Group({layers: options.layers});\n  values[ol.MapProperty.LAYERGROUP] = layerGroup;\n\n  values[ol.MapProperty.TARGET] = options.target;\n\n  values[ol.MapProperty.VIEW] = options.view !== undefined ?\n    options.view : new ol.View();\n\n  /**\n   * @type {Array.<ol.renderer.Type>}\n   */\n  var rendererTypes;\n\n  if (options.renderer !== undefined) {\n    if (Array.isArray(options.renderer)) {\n      rendererTypes = options.renderer;\n    } else if (typeof options.renderer === 'string') {\n      rendererTypes = [options.renderer];\n    } else {\n      ol.asserts.assert(false, 46); // Incorrect format for `renderer` option\n    }\n    if (rendererTypes.indexOf(/** @type {ol.renderer.Type} */ ('dom')) >= 0) {\n      rendererTypes = rendererTypes.concat(ol.PluggableMap.DEFAULT_RENDERER_TYPES);\n    }\n  } else {\n    rendererTypes = ol.PluggableMap.DEFAULT_RENDERER_TYPES;\n  }\n\n  /**\n   * @type {olx.MapRendererPlugin}\n   */\n  var mapRendererPlugin;\n\n  var mapRendererPlugins = ol.plugins.getMapRendererPlugins();\n  outer: for (var i = 0, ii = rendererTypes.length; i < ii; ++i) {\n    var rendererType = rendererTypes[i];\n    for (var j = 0, jj = mapRendererPlugins.length; j < jj; ++j) {\n      var candidate = mapRendererPlugins[j];\n      if (candidate['handles'](rendererType)) {\n        mapRendererPlugin = candidate;\n        break outer;\n      }\n    }\n  }\n\n  if (!mapRendererPlugin) {\n    throw new Error('Unable to create a map renderer for types: ' +  rendererTypes.join(', '));\n  }\n\n  var controls;\n  if (options.controls !== undefined) {\n    if (Array.isArray(options.controls)) {\n      controls = new ol.Collection(options.controls.slice());\n    } else {\n      ol.asserts.assert(options.controls instanceof ol.Collection,\n          47); // Expected `controls` to be an array or an `ol.Collection`\n      controls = options.controls;\n    }\n  }\n\n  var interactions;\n  if (options.interactions !== undefined) {\n    if (Array.isArray(options.interactions)) {\n      interactions = new ol.Collection(options.interactions.slice());\n    } else {\n      ol.asserts.assert(options.interactions instanceof ol.Collection,\n          48); // Expected `interactions` to be an array or an `ol.Collection`\n      interactions = options.interactions;\n    }\n  }\n\n  var overlays;\n  if (options.overlays !== undefined) {\n    if (Array.isArray(options.overlays)) {\n      overlays = new ol.Collection(options.overlays.slice());\n    } else {\n      ol.asserts.assert(options.overlays instanceof ol.Collection,\n          49); // Expected `overlays` to be an array or an `ol.Collection`\n      overlays = options.overlays;\n    }\n  } else {\n    overlays = new ol.Collection();\n  }\n\n  return {\n    controls: controls,\n    interactions: interactions,\n    keyboardEventTarget: keyboardEventTarget,\n    logos: logos,\n    overlays: overlays,\n    mapRendererPlugin: mapRendererPlugin,\n    values: values\n  };\n\n};\n\ngoog.provide('ol.control.Control');\n\ngoog.require('ol');\ngoog.require('ol.MapEventType');\ngoog.require('ol.Object');\ngoog.require('ol.dom');\ngoog.require('ol.events');\n\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new ol.control.Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be `ol.Object`s in a `ol.Collection`, so you can use their\n * methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @constructor\n * @extends {ol.Object}\n * @implements {oli.control.Control}\n * @param {olx.control.ControlOptions} options Control options.\n * @api\n */\nol.control.Control = function(options) {\n\n  ol.Object.call(this);\n\n  /**\n   * @protected\n   * @type {Element}\n   */\n  this.element = options.element ? options.element : null;\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.target_ = null;\n\n  /**\n   * @private\n   * @type {ol.PluggableMap}\n   */\n  this.map_ = null;\n\n  /**\n   * @protected\n   * @type {!Array.<ol.EventsKey>}\n   */\n  this.listenerKeys = [];\n\n  /**\n   * @type {function(ol.MapEvent)}\n   */\n  this.render = options.render ? options.render : ol.nullFunction;\n\n  if (options.target) {\n    this.setTarget(options.target);\n  }\n\n};\nol.inherits(ol.control.Control, ol.Object);\n\n\n/**\n * @inheritDoc\n */\nol.control.Control.prototype.disposeInternal = function() {\n  ol.dom.removeNode(this.element);\n  ol.Object.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Get the map associated with this control.\n * @return {ol.PluggableMap} Map.\n * @api\n */\nol.control.Control.prototype.getMap = function() {\n  return this.map_;\n};\n\n\n/**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {ol.PluggableMap} map Map.\n * @override\n * @api\n */\nol.control.Control.prototype.setMap = function(map) {\n  if (this.map_) {\n    ol.dom.removeNode(this.element);\n  }\n  for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n    ol.events.unlistenByKey(this.listenerKeys[i]);\n  }\n  this.listenerKeys.length = 0;\n  this.map_ = map;\n  if (this.map_) {\n    var target = this.target_ ?\n      this.target_ : map.getOverlayContainerStopEvent();\n    target.appendChild(this.element);\n    if (this.render !== ol.nullFunction) {\n      this.listenerKeys.push(ol.events.listen(map,\n          ol.MapEventType.POSTRENDER, this.render, this));\n    }\n    map.render();\n  }\n};\n\n\n/**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {Element|string} target Target.\n * @api\n */\nol.control.Control.prototype.setTarget = function(target) {\n  this.target_ = typeof target === 'string' ?\n    document.getElementById(target) :\n    target;\n};\n\ngoog.provide('ol.css');\n\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nol.css.CLASS_HIDDEN = 'ol-hidden';\n\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nol.css.CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nol.css.CLASS_UNSELECTABLE = 'ol-unselectable';\n\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nol.css.CLASS_UNSUPPORTED = 'ol-unsupported';\n\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nol.css.CLASS_CONTROL = 'ol-control';\n\n\n/**\n * Get the list of font families from a font spec.  Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} The CSS font property.\n * @return {Object.<string>} The font families (or null if the input spec is invalid).\n */\nol.css.getFontFamilies = (function() {\n  var style;\n  var cache = {};\n  return function(font) {\n    if (!style) {\n      style = document.createElement('div').style;\n    }\n    if (!(font in cache)) {\n      style.font = font;\n      var family = style.fontFamily;\n      style.font = '';\n      if (!family) {\n        return null;\n      }\n      cache[font] = family.split(/,\\s?/);\n    }\n    return cache[font];\n  };\n})();\n\ngoog.provide('ol.render.EventType');\n\n/**\n * @enum {string}\n */\nol.render.EventType = {\n  /**\n   * @event ol.render.Event#postcompose\n   * @api\n   */\n  POSTCOMPOSE: 'postcompose',\n  /**\n   * @event ol.render.Event#precompose\n   * @api\n   */\n  PRECOMPOSE: 'precompose',\n  /**\n   * @event ol.render.Event#render\n   * @api\n   */\n  RENDER: 'render'\n};\n\ngoog.provide('ol.layer.Layer');\n\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.layer.Base');\ngoog.require('ol.layer.Property');\ngoog.require('ol.obj');\ngoog.require('ol.render.EventType');\ngoog.require('ol.source.State');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link ol.Map#addLayer}. Components\n * like {@link ol.interaction.Select} use unmanaged layers internally. These\n * unmanaged layers are associated with the map using\n * {@link ol.layer.Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * @constructor\n * @abstract\n * @extends {ol.layer.Base}\n * @fires ol.render.Event\n * @param {olx.layer.LayerOptions} options Layer options.\n * @api\n */\nol.layer.Layer = function(options) {\n\n  var baseOptions = ol.obj.assign({}, options);\n  delete baseOptions.source;\n\n  ol.layer.Base.call(this, /** @type {olx.layer.BaseOptions} */ (baseOptions));\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.mapPrecomposeKey_ = null;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.mapRenderKey_ = null;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.sourceChangeKey_ = null;\n\n  if (options.map) {\n    this.setMap(options.map);\n  }\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.layer.Property.SOURCE),\n      this.handleSourcePropertyChange_, this);\n\n  var source = options.source ? options.source : null;\n  this.setSource(source);\n};\nol.inherits(ol.layer.Layer, ol.layer.Base);\n\n\n/**\n * Return `true` if the layer is visible, and if the passed resolution is\n * between the layer's minResolution and maxResolution. The comparison is\n * inclusive for `minResolution` and exclusive for `maxResolution`.\n * @param {ol.LayerState} layerState Layer state.\n * @param {number} resolution Resolution.\n * @return {boolean} The layer is visible at the given resolution.\n */\nol.layer.Layer.visibleAtResolution = function(layerState, resolution) {\n  return layerState.visible && resolution >= layerState.minResolution &&\n      resolution < layerState.maxResolution;\n};\n\n\n/**\n * @inheritDoc\n */\nol.layer.Layer.prototype.getLayersArray = function(opt_array) {\n  var array = opt_array ? opt_array : [];\n  array.push(this);\n  return array;\n};\n\n\n/**\n * @inheritDoc\n */\nol.layer.Layer.prototype.getLayerStatesArray = function(opt_states) {\n  var states = opt_states ? opt_states : [];\n  states.push(this.getLayerState());\n  return states;\n};\n\n\n/**\n * Get the layer source.\n * @return {ol.source.Source} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\nol.layer.Layer.prototype.getSource = function() {\n  var source = this.get(ol.layer.Property.SOURCE);\n  return /** @type {ol.source.Source} */ (source) || null;\n};\n\n\n/**\n  * @inheritDoc\n  */\nol.layer.Layer.prototype.getSourceState = function() {\n  var source = this.getSource();\n  return !source ? ol.source.State.UNDEFINED : source.getState();\n};\n\n\n/**\n * @private\n */\nol.layer.Layer.prototype.handleSourceChange_ = function() {\n  this.changed();\n};\n\n\n/**\n * @private\n */\nol.layer.Layer.prototype.handleSourcePropertyChange_ = function() {\n  if (this.sourceChangeKey_) {\n    ol.events.unlistenByKey(this.sourceChangeKey_);\n    this.sourceChangeKey_ = null;\n  }\n  var source = this.getSource();\n  if (source) {\n    this.sourceChangeKey_ = ol.events.listen(source,\n        ol.events.EventType.CHANGE, this.handleSourceChange_, this);\n  }\n  this.changed();\n};\n\n\n/**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection, and the callback in\n * {@link ol.Map#forEachLayerAtPixel} will receive `null` as layer. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link ol.Map#addLayer} instead.\n * @param {ol.PluggableMap} map Map.\n * @api\n */\nol.layer.Layer.prototype.setMap = function(map) {\n  if (this.mapPrecomposeKey_) {\n    ol.events.unlistenByKey(this.mapPrecomposeKey_);\n    this.mapPrecomposeKey_ = null;\n  }\n  if (!map) {\n    this.changed();\n  }\n  if (this.mapRenderKey_) {\n    ol.events.unlistenByKey(this.mapRenderKey_);\n    this.mapRenderKey_ = null;\n  }\n  if (map) {\n    this.mapPrecomposeKey_ = ol.events.listen(\n        map, ol.render.EventType.PRECOMPOSE, function(evt) {\n          var layerState = this.getLayerState();\n          layerState.managed = false;\n          layerState.zIndex = Infinity;\n          evt.frameState.layerStatesArray.push(layerState);\n          evt.frameState.layerStates[ol.getUid(this)] = layerState;\n        }, this);\n    this.mapRenderKey_ = ol.events.listen(\n        this, ol.events.EventType.CHANGE, map.render, map);\n    this.changed();\n  }\n};\n\n\n/**\n * Set the layer source.\n * @param {ol.source.Source} source The layer source.\n * @observable\n * @api\n */\nol.layer.Layer.prototype.setSource = function(source) {\n  this.set(ol.layer.Property.SOURCE, source);\n};\n\n// FIXME handle date line wrap\n\ngoog.provide('ol.control.Attribution');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.AttributionOptions=} opt_options Attribution options.\n * @api\n */\nol.control.Attribution = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.ulElement_ = document.createElement('UL');\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.logoLi_ = document.createElement('LI');\n\n  this.ulElement_.appendChild(this.logoLi_);\n  this.logoLi_.style.display = 'none';\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.collapsible_ = options.collapsible !== undefined ?\n    options.collapsible : true;\n\n  if (!this.collapsible_) {\n    this.collapsed_ = false;\n  }\n\n  var className = options.className !== undefined ? options.className : 'ol-attribution';\n\n  var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n  var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u00BB';\n\n  if (typeof collapseLabel === 'string') {\n    /**\n     * @private\n     * @type {Node}\n     */\n    this.collapseLabel_ = document.createElement('span');\n    this.collapseLabel_.textContent = collapseLabel;\n  } else {\n    this.collapseLabel_ = collapseLabel;\n  }\n\n  var label = options.label !== undefined ? options.label : 'i';\n\n  if (typeof label === 'string') {\n    /**\n     * @private\n     * @type {Node}\n     */\n    this.label_ = document.createElement('span');\n    this.label_.textContent = label;\n  } else {\n    this.label_ = label;\n  }\n\n\n  var activeLabel = (this.collapsible_ && !this.collapsed_) ?\n    this.collapseLabel_ : this.label_;\n  var button = document.createElement('button');\n  button.setAttribute('type', 'button');\n  button.title = tipLabel;\n  button.appendChild(activeLabel);\n\n  ol.events.listen(button, ol.events.EventType.CLICK, this.handleClick_, this);\n\n  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +\n      ol.css.CLASS_CONTROL +\n      (this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +\n      (this.collapsible_ ? '' : ' ol-uncollapsible');\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(this.ulElement_);\n  element.appendChild(button);\n\n  var render = options.render ? options.render : ol.control.Attribution.render;\n\n  ol.control.Control.call(this, {\n    element: element,\n    render: render,\n    target: options.target\n  });\n\n  /**\n   * A list of currently rendered resolutions.\n   * @type {Array.<string>}\n   * @private\n   */\n  this.renderedAttributions_ = [];\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderedVisible_ = true;\n\n  /**\n   * @private\n   * @type {Object.<string, Element>}\n   */\n  this.logoElements_ = {};\n\n};\nol.inherits(ol.control.Attribution, ol.control.Control);\n\n\n/**\n * Get a list of visible attributions.\n * @param {olx.FrameState} frameState Frame state.\n * @return {Array.<string>} Attributions.\n * @private\n */\nol.control.Attribution.prototype.getSourceAttributions_ = function(frameState) {\n  /**\n   * Used to determine if an attribution already exists.\n   * @type {Object.<string, boolean>}\n   */\n  var lookup = {};\n\n  /**\n   * A list of visible attributions.\n   * @type {Array.<string>}\n   */\n  var visibleAttributions = [];\n\n  var layerStatesArray = frameState.layerStatesArray;\n  var resolution = frameState.viewState.resolution;\n  for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n    var layerState = layerStatesArray[i];\n    if (!ol.layer.Layer.visibleAtResolution(layerState, resolution)) {\n      continue;\n    }\n\n    var source = layerState.layer.getSource();\n    if (!source) {\n      continue;\n    }\n\n    var attributionGetter = source.getAttributions2();\n    if (!attributionGetter) {\n      continue;\n    }\n\n    var attributions = attributionGetter(frameState);\n    if (!attributions) {\n      continue;\n    }\n\n    if (Array.isArray(attributions)) {\n      for (var j = 0, jj = attributions.length; j < jj; ++j) {\n        if (!(attributions[j] in lookup)) {\n          visibleAttributions.push(attributions[j]);\n          lookup[attributions[j]] = true;\n        }\n      }\n    } else {\n      if (!(attributions in lookup)) {\n        visibleAttributions.push(attributions);\n        lookup[attributions] = true;\n      }\n    }\n  }\n  return visibleAttributions;\n};\n\n\n/**\n * Update the attribution element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.Attribution}\n * @api\n */\nol.control.Attribution.render = function(mapEvent) {\n  this.updateElement_(mapEvent.frameState);\n};\n\n\n/**\n * @private\n * @param {?olx.FrameState} frameState Frame state.\n */\nol.control.Attribution.prototype.updateElement_ = function(frameState) {\n  if (!frameState) {\n    if (this.renderedVisible_) {\n      this.element.style.display = 'none';\n      this.renderedVisible_ = false;\n    }\n    return;\n  }\n\n  var attributions = this.getSourceAttributions_(frameState);\n  if (ol.array.equals(attributions, this.renderedAttributions_)) {\n    return;\n  }\n\n  // remove everything but the logo\n  while (this.ulElement_.lastChild !== this.logoLi_) {\n    this.ulElement_.removeChild(this.ulElement_.lastChild);\n  }\n\n  // append the attributions\n  for (var i = 0, ii = attributions.length; i < ii; ++i) {\n    var element = document.createElement('LI');\n    element.innerHTML = attributions[i];\n    this.ulElement_.appendChild(element);\n  }\n\n\n  if (attributions.length === 0 && this.renderedAttributions_.length > 0) {\n    this.element.classList.add('ol-logo-only');\n  } else if (this.renderedAttributions_.length === 0 && attributions.length > 0) {\n    this.element.classList.remove('ol-logo-only');\n  }\n\n  var visible = attributions.length > 0 || !ol.obj.isEmpty(frameState.logos);\n  if (this.renderedVisible_ != visible) {\n    this.element.style.display = visible ? '' : 'none';\n    this.renderedVisible_ = visible;\n  }\n\n  this.renderedAttributions_ = attributions;\n  this.insertLogos_(frameState);\n};\n\n\n/**\n * @param {?olx.FrameState} frameState Frame state.\n * @private\n */\nol.control.Attribution.prototype.insertLogos_ = function(frameState) {\n\n  var logo;\n  var logos = frameState.logos;\n  var logoElements = this.logoElements_;\n\n  for (logo in logoElements) {\n    if (!(logo in logos)) {\n      ol.dom.removeNode(logoElements[logo]);\n      delete logoElements[logo];\n    }\n  }\n\n  var image, logoElement, logoKey;\n  for (logoKey in logos) {\n    var logoValue = logos[logoKey];\n    if (logoValue instanceof HTMLElement) {\n      this.logoLi_.appendChild(logoValue);\n      logoElements[logoKey] = logoValue;\n    }\n    if (!(logoKey in logoElements)) {\n      image = new Image();\n      image.src = logoKey;\n      if (logoValue === '') {\n        logoElement = image;\n      } else {\n        logoElement = document.createElement('a');\n        logoElement.href = logoValue;\n        logoElement.appendChild(image);\n      }\n      this.logoLi_.appendChild(logoElement);\n      logoElements[logoKey] = logoElement;\n    }\n  }\n\n  this.logoLi_.style.display = !ol.obj.isEmpty(logos) ? '' : 'none';\n\n};\n\n\n/**\n * @param {Event} event The event to handle\n * @private\n */\nol.control.Attribution.prototype.handleClick_ = function(event) {\n  event.preventDefault();\n  this.handleToggle_();\n};\n\n\n/**\n * @private\n */\nol.control.Attribution.prototype.handleToggle_ = function() {\n  this.element.classList.toggle('ol-collapsed');\n  if (this.collapsed_) {\n    ol.dom.replaceNode(this.collapseLabel_, this.label_);\n  } else {\n    ol.dom.replaceNode(this.label_, this.collapseLabel_);\n  }\n  this.collapsed_ = !this.collapsed_;\n};\n\n\n/**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\nol.control.Attribution.prototype.getCollapsible = function() {\n  return this.collapsible_;\n};\n\n\n/**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\nol.control.Attribution.prototype.setCollapsible = function(collapsible) {\n  if (this.collapsible_ === collapsible) {\n    return;\n  }\n  this.collapsible_ = collapsible;\n  this.element.classList.toggle('ol-uncollapsible');\n  if (!collapsible && this.collapsed_) {\n    this.handleToggle_();\n  }\n};\n\n\n/**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\nol.control.Attribution.prototype.setCollapsed = function(collapsed) {\n  if (!this.collapsible_ || this.collapsed_ === collapsed) {\n    return;\n  }\n  this.handleToggle_();\n};\n\n\n/**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\nol.control.Attribution.prototype.getCollapsed = function() {\n  return this.collapsed_;\n};\n\ngoog.provide('ol.control.Rotate');\n\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\ngoog.require('ol.easing');\n\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.RotateOptions=} opt_options Rotate options.\n * @api\n */\nol.control.Rotate = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var className = options.className !== undefined ? options.className : 'ol-rotate';\n\n  var label = options.label !== undefined ? options.label : '\\u21E7';\n\n  /**\n   * @type {Element}\n   * @private\n   */\n  this.label_ = null;\n\n  if (typeof label === 'string') {\n    this.label_ = document.createElement('span');\n    this.label_.className = 'ol-compass';\n    this.label_.textContent = label;\n  } else {\n    this.label_ = label;\n    this.label_.classList.add('ol-compass');\n  }\n\n  var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n  var button = document.createElement('button');\n  button.className = className + '-reset';\n  button.setAttribute('type', 'button');\n  button.title = tipLabel;\n  button.appendChild(this.label_);\n\n  ol.events.listen(button, ol.events.EventType.CLICK,\n      ol.control.Rotate.prototype.handleClick_, this);\n\n  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +\n      ol.css.CLASS_CONTROL;\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(button);\n\n  var render = options.render ? options.render : ol.control.Rotate.render;\n\n  this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n  ol.control.Control.call(this, {\n    element: element,\n    render: render,\n    target: options.target\n  });\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.rotation_ = undefined;\n\n  if (this.autoHide_) {\n    this.element.classList.add(ol.css.CLASS_HIDDEN);\n  }\n\n};\nol.inherits(ol.control.Rotate, ol.control.Control);\n\n\n/**\n * @param {Event} event The event to handle\n * @private\n */\nol.control.Rotate.prototype.handleClick_ = function(event) {\n  event.preventDefault();\n  if (this.callResetNorth_ !== undefined) {\n    this.callResetNorth_();\n  } else {\n    this.resetNorth_();\n  }\n};\n\n\n/**\n * @private\n */\nol.control.Rotate.prototype.resetNorth_ = function() {\n  var map = this.getMap();\n  var view = map.getView();\n  if (!view) {\n    // the map does not have a view, so we can't act\n    // upon it\n    return;\n  }\n  if (view.getRotation() !== undefined) {\n    if (this.duration_ > 0) {\n      view.animate({\n        rotation: 0,\n        duration: this.duration_,\n        easing: ol.easing.easeOut\n      });\n    } else {\n      view.setRotation(0);\n    }\n  }\n};\n\n\n/**\n * Update the rotate control element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.Rotate}\n * @api\n */\nol.control.Rotate.render = function(mapEvent) {\n  var frameState = mapEvent.frameState;\n  if (!frameState) {\n    return;\n  }\n  var rotation = frameState.viewState.rotation;\n  if (rotation != this.rotation_) {\n    var transform = 'rotate(' + rotation + 'rad)';\n    if (this.autoHide_) {\n      var contains = this.element.classList.contains(ol.css.CLASS_HIDDEN);\n      if (!contains && rotation === 0) {\n        this.element.classList.add(ol.css.CLASS_HIDDEN);\n      } else if (contains && rotation !== 0) {\n        this.element.classList.remove(ol.css.CLASS_HIDDEN);\n      }\n    }\n    this.label_.style.msTransform = transform;\n    this.label_.style.webkitTransform = transform;\n    this.label_.style.transform = transform;\n  }\n  this.rotation_ = rotation;\n};\n\ngoog.provide('ol.control.Zoom');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\ngoog.require('ol.easing');\n\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.ZoomOptions=} opt_options Zoom options.\n * @api\n */\nol.control.Zoom = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var className = options.className !== undefined ? options.className : 'ol-zoom';\n\n  var delta = options.delta !== undefined ? options.delta : 1;\n\n  var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n  var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2212';\n\n  var zoomInTipLabel = options.zoomInTipLabel !== undefined ?\n    options.zoomInTipLabel : 'Zoom in';\n  var zoomOutTipLabel = options.zoomOutTipLabel !== undefined ?\n    options.zoomOutTipLabel : 'Zoom out';\n\n  var inElement = document.createElement('button');\n  inElement.className = className + '-in';\n  inElement.setAttribute('type', 'button');\n  inElement.title = zoomInTipLabel;\n  inElement.appendChild(\n      typeof zoomInLabel === 'string' ? document.createTextNode(zoomInLabel) : zoomInLabel\n  );\n\n  ol.events.listen(inElement, ol.events.EventType.CLICK,\n      ol.control.Zoom.prototype.handleClick_.bind(this, delta));\n\n  var outElement = document.createElement('button');\n  outElement.className = className + '-out';\n  outElement.setAttribute('type', 'button');\n  outElement.title = zoomOutTipLabel;\n  outElement.appendChild(\n      typeof zoomOutLabel === 'string' ? document.createTextNode(zoomOutLabel) : zoomOutLabel\n  );\n\n  ol.events.listen(outElement, ol.events.EventType.CLICK,\n      ol.control.Zoom.prototype.handleClick_.bind(this, -delta));\n\n  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +\n      ol.css.CLASS_CONTROL;\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(inElement);\n  element.appendChild(outElement);\n\n  ol.control.Control.call(this, {\n    element: element,\n    target: options.target\n  });\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n};\nol.inherits(ol.control.Zoom, ol.control.Control);\n\n\n/**\n * @param {number} delta Zoom delta.\n * @param {Event} event The event to handle\n * @private\n */\nol.control.Zoom.prototype.handleClick_ = function(delta, event) {\n  event.preventDefault();\n  this.zoomByDelta_(delta);\n};\n\n\n/**\n * @param {number} delta Zoom delta.\n * @private\n */\nol.control.Zoom.prototype.zoomByDelta_ = function(delta) {\n  var map = this.getMap();\n  var view = map.getView();\n  if (!view) {\n    // the map does not have a view, so we can't act\n    // upon it\n    return;\n  }\n  var currentResolution = view.getResolution();\n  if (currentResolution) {\n    var newResolution = view.constrainResolution(currentResolution, delta);\n    if (this.duration_ > 0) {\n      if (view.getAnimating()) {\n        view.cancelAnimations();\n      }\n      view.animate({\n        resolution: newResolution,\n        duration: this.duration_,\n        easing: ol.easing.easeOut\n      });\n    } else {\n      view.setResolution(newResolution);\n    }\n  }\n};\n\ngoog.provide('ol.control');\n\ngoog.require('ol.Collection');\ngoog.require('ol.control.Attribution');\ngoog.require('ol.control.Rotate');\ngoog.require('ol.control.Zoom');\n\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link ol.control.Zoom}\n * * {@link ol.control.Rotate}\n * * {@link ol.control.Attribution}\n *\n * @param {olx.control.DefaultsOptions=} opt_options Defaults options.\n * @return {ol.Collection.<ol.control.Control>} Controls.\n * @api\n */\nol.control.defaults = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var controls = new ol.Collection();\n\n  var zoomControl = options.zoom !== undefined ? options.zoom : true;\n  if (zoomControl) {\n    controls.push(new ol.control.Zoom(options.zoomOptions));\n  }\n\n  var rotateControl = options.rotate !== undefined ? options.rotate : true;\n  if (rotateControl) {\n    controls.push(new ol.control.Rotate(options.rotateOptions));\n  }\n\n  var attributionControl = options.attribution !== undefined ?\n    options.attribution : true;\n  if (attributionControl) {\n    controls.push(new ol.control.Attribution(options.attributionOptions));\n  }\n\n  return controls;\n\n};\n\ngoog.provide('ol.Kinetic');\n\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @constructor\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n *     initial values (milliseconds).\n * @struct\n * @api\n */\nol.Kinetic = function(decay, minVelocity, delay) {\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.decay_ = decay;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.minVelocity_ = minVelocity;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.delay_ = delay;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.points_ = [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.angle_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.initialVelocity_ = 0;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.Kinetic.prototype.begin = function() {\n  this.points_.length = 0;\n  this.angle_ = 0;\n  this.initialVelocity_ = 0;\n};\n\n\n/**\n * @param {number} x X.\n * @param {number} y Y.\n */\nol.Kinetic.prototype.update = function(x, y) {\n  this.points_.push(x, y, Date.now());\n};\n\n\n/**\n * @return {boolean} Whether we should do kinetic animation.\n */\nol.Kinetic.prototype.end = function() {\n  if (this.points_.length < 6) {\n    // at least 2 points are required (i.e. there must be at least 6 elements\n    // in the array)\n    return false;\n  }\n  var delay = Date.now() - this.delay_;\n  var lastIndex = this.points_.length - 3;\n  if (this.points_[lastIndex + 2] < delay) {\n    // the last tracked point is too old, which means that the user stopped\n    // panning before releasing the map\n    return false;\n  }\n\n  // get the first point which still falls into the delay time\n  var firstIndex = lastIndex - 3;\n  while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n    firstIndex -= 3;\n  }\n\n  var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n  // we don't want a duration of 0 (divide by zero)\n  // we also make sure the user panned for a duration of at least one frame\n  // (1/60s) to compute sane displacement values\n  if (duration < 1000 / 60) {\n    return false;\n  }\n\n  var dx = this.points_[lastIndex] - this.points_[firstIndex];\n  var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n  this.angle_ = Math.atan2(dy, dx);\n  this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n  return this.initialVelocity_ > this.minVelocity_;\n};\n\n\n/**\n * @return {number} Total distance travelled (pixels).\n */\nol.Kinetic.prototype.getDistance = function() {\n  return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n};\n\n\n/**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\nol.Kinetic.prototype.getAngle = function() {\n  return this.angle_;\n};\n\ngoog.provide('ol.interaction.Property');\n\n/**\n * @enum {string}\n */\nol.interaction.Property = {\n  ACTIVE: 'active'\n};\n\n// FIXME factor out key precondition (shift et. al)\n\ngoog.provide('ol.interaction.Interaction');\n\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.easing');\ngoog.require('ol.interaction.Property');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link ol.interaction.KeyboardZoom} is functionally the same as\n * {@link ol.control.Zoom}, but triggered by a keyboard event not a button\n * element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n *\n * @constructor\n * @param {olx.interaction.InteractionOptions} options Options.\n * @extends {ol.Object}\n * @api\n */\nol.interaction.Interaction = function(options) {\n\n  ol.Object.call(this);\n\n  /**\n   * @private\n   * @type {ol.PluggableMap}\n   */\n  this.map_ = null;\n\n  this.setActive(true);\n\n  /**\n   * @type {function(ol.MapBrowserEvent):boolean}\n   */\n  this.handleEvent = options.handleEvent;\n\n};\nol.inherits(ol.interaction.Interaction, ol.Object);\n\n\n/**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\nol.interaction.Interaction.prototype.getActive = function() {\n  return /** @type {boolean} */ (\n    this.get(ol.interaction.Property.ACTIVE));\n};\n\n\n/**\n * Get the map associated with this interaction.\n * @return {ol.PluggableMap} Map.\n * @api\n */\nol.interaction.Interaction.prototype.getMap = function() {\n  return this.map_;\n};\n\n\n/**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\nol.interaction.Interaction.prototype.setActive = function(active) {\n  this.set(ol.interaction.Property.ACTIVE, active);\n};\n\n\n/**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {ol.PluggableMap} map Map.\n */\nol.interaction.Interaction.prototype.setMap = function(map) {\n  this.map_ = map;\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {ol.Coordinate} delta Delta.\n * @param {number=} opt_duration Duration.\n */\nol.interaction.Interaction.pan = function(view, delta, opt_duration) {\n  var currentCenter = view.getCenter();\n  if (currentCenter) {\n    var center = view.constrainCenter(\n        [currentCenter[0] + delta[0], currentCenter[1] + delta[1]]);\n    if (opt_duration) {\n      view.animate({\n        duration: opt_duration,\n        easing: ol.easing.linear,\n        center: center\n      });\n    } else {\n      view.setCenter(center);\n    }\n  }\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {number|undefined} rotation Rotation.\n * @param {ol.Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nol.interaction.Interaction.rotate = function(view, rotation, opt_anchor, opt_duration) {\n  rotation = view.constrainRotation(rotation, 0);\n  ol.interaction.Interaction.rotateWithoutConstraints(\n      view, rotation, opt_anchor, opt_duration);\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {number|undefined} rotation Rotation.\n * @param {ol.Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nol.interaction.Interaction.rotateWithoutConstraints = function(view, rotation, opt_anchor, opt_duration) {\n  if (rotation !== undefined) {\n    var currentRotation = view.getRotation();\n    var currentCenter = view.getCenter();\n    if (currentRotation !== undefined && currentCenter && opt_duration > 0) {\n      view.animate({\n        rotation: rotation,\n        anchor: opt_anchor,\n        duration: opt_duration,\n        easing: ol.easing.easeOut\n      });\n    } else {\n      view.rotate(rotation, opt_anchor);\n    }\n  }\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {number|undefined} resolution Resolution to go to.\n * @param {ol.Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n * @param {number=} opt_direction Zooming direction; > 0 indicates\n *     zooming out, in which case the constraints system will select\n *     the largest nearest resolution; < 0 indicates zooming in, in\n *     which case the constraints system will select the smallest\n *     nearest resolution; == 0 indicates that the zooming direction\n *     is unknown/not relevant, in which case the constraints system\n *     will select the nearest resolution. If not defined 0 is\n *     assumed.\n */\nol.interaction.Interaction.zoom = function(view, resolution, opt_anchor, opt_duration, opt_direction) {\n  resolution = view.constrainResolution(resolution, 0, opt_direction);\n  ol.interaction.Interaction.zoomWithoutConstraints(\n      view, resolution, opt_anchor, opt_duration);\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {ol.Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nol.interaction.Interaction.zoomByDelta = function(view, delta, opt_anchor, opt_duration) {\n  var currentResolution = view.getResolution();\n  var resolution = view.constrainResolution(currentResolution, delta, 0);\n\n  if (resolution !== undefined) {\n    var resolutions = view.getResolutions();\n    resolution = ol.math.clamp(\n        resolution,\n        view.getMinResolution() || resolutions[resolutions.length - 1],\n        view.getMaxResolution() || resolutions[0]);\n  }\n\n  // If we have a constraint on center, we need to change the anchor so that the\n  // new center is within the extent. We first calculate the new center, apply\n  // the constraint to it, and then calculate back the anchor\n  if (opt_anchor && resolution !== undefined && resolution !== currentResolution) {\n    var currentCenter = view.getCenter();\n    var center = view.calculateCenterZoom(resolution, opt_anchor);\n    center = view.constrainCenter(center);\n\n    opt_anchor = [\n      (resolution * currentCenter[0] - currentResolution * center[0]) /\n          (resolution - currentResolution),\n      (resolution * currentCenter[1] - currentResolution * center[1]) /\n          (resolution - currentResolution)\n    ];\n  }\n\n  ol.interaction.Interaction.zoomWithoutConstraints(\n      view, resolution, opt_anchor, opt_duration);\n};\n\n\n/**\n * @param {ol.View} view View.\n * @param {number|undefined} resolution Resolution to go to.\n * @param {ol.Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nol.interaction.Interaction.zoomWithoutConstraints = function(view, resolution, opt_anchor, opt_duration) {\n  if (resolution) {\n    var currentResolution = view.getResolution();\n    var currentCenter = view.getCenter();\n    if (currentResolution !== undefined && currentCenter &&\n        resolution !== currentResolution && opt_duration) {\n      view.animate({\n        resolution: resolution,\n        anchor: opt_anchor,\n        duration: opt_duration,\n        easing: ol.easing.easeOut\n      });\n    } else {\n      if (opt_anchor) {\n        var center = view.calculateCenterZoom(resolution, opt_anchor);\n        view.setCenter(center);\n      }\n      view.setResolution(resolution);\n    }\n  }\n};\n\ngoog.provide('ol.interaction.DoubleClickZoom');\n\ngoog.require('ol');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.interaction.Interaction');\n\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n *\n * @constructor\n * @extends {ol.interaction.Interaction}\n * @param {olx.interaction.DoubleClickZoomOptions=} opt_options Options.\n * @api\n */\nol.interaction.DoubleClickZoom = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.delta_ = options.delta ? options.delta : 1;\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.DoubleClickZoom.handleEvent\n  });\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n};\nol.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.DoubleClickZoom}\n * @api\n */\nol.interaction.DoubleClickZoom.handleEvent = function(mapBrowserEvent) {\n  var stopEvent = false;\n  var browserEvent = mapBrowserEvent.originalEvent;\n  if (mapBrowserEvent.type == ol.MapBrowserEventType.DBLCLICK) {\n    var map = mapBrowserEvent.map;\n    var anchor = mapBrowserEvent.coordinate;\n    var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n    var view = map.getView();\n    ol.interaction.Interaction.zoomByDelta(\n        view, delta, anchor, this.duration_);\n    mapBrowserEvent.preventDefault();\n    stopEvent = true;\n  }\n  return !stopEvent;\n};\n\ngoog.provide('ol.events.condition');\n\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.asserts');\ngoog.require('ol.functions');\ngoog.require('ol.has');\n\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nol.events.condition.altKeyOnly = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    originalEvent.altKey &&\n      !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n      !originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    originalEvent.altKey &&\n      !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n      originalEvent.shiftKey);\n};\n\n\n/**\n * Return always true.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @function\n * @api\n */\nol.events.condition.always = ol.functions.TRUE;\n\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nol.events.condition.click = function(mapBrowserEvent) {\n  return mapBrowserEvent.type == ol.MapBrowserEventType.CLICK;\n};\n\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nol.events.condition.mouseActionButton = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return originalEvent.button == 0 &&\n      !(ol.has.WEBKIT && ol.has.MAC && originalEvent.ctrlKey);\n};\n\n\n/**\n * Return always false.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @function\n * @api\n */\nol.events.condition.never = ol.functions.FALSE;\n\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nol.events.condition.pointerMove = function(mapBrowserEvent) {\n  return mapBrowserEvent.type == 'pointermove';\n};\n\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nol.events.condition.singleClick = function(mapBrowserEvent) {\n  return mapBrowserEvent.type == ol.MapBrowserEventType.SINGLECLICK;\n};\n\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nol.events.condition.doubleClick = function(mapBrowserEvent) {\n  return mapBrowserEvent.type == ol.MapBrowserEventType.DBLCLICK;\n};\n\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nol.events.condition.noModifierKeys = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    !originalEvent.altKey &&\n      !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n      !originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    !originalEvent.altKey &&\n      (ol.has.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n      !originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nol.events.condition.shiftKeyOnly = function(mapBrowserEvent) {\n  var originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    !originalEvent.altKey &&\n      !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n      originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if the target element is not editable, i.e. not a `<input>`-,\n * `<select>`- or `<textarea>`-element, `false` otherwise.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nol.events.condition.targetNotEditable = function(mapBrowserEvent) {\n  var target = mapBrowserEvent.originalEvent.target;\n  var tagName = target.tagName;\n  return (\n    tagName !== 'INPUT' &&\n      tagName !== 'SELECT' &&\n      tagName !== 'TEXTAREA');\n};\n\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nol.events.condition.mouseOnly = function(mapBrowserEvent) {\n  ol.asserts.assert(mapBrowserEvent.pointerEvent, 56); // mapBrowserEvent must originate from a pointer event\n  // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n  return /** @type {ol.MapBrowserEvent} */ (mapBrowserEvent).pointerEvent.pointerType == 'mouse';\n};\n\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * @see http://www.w3.org/TR/pointerevents/#button-states\n *\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nol.events.condition.primaryAction = function(mapBrowserEvent) {\n  var pointerEvent = mapBrowserEvent.pointerEvent;\n  return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n\ngoog.provide('ol.interaction.Pointer');\n\ngoog.require('ol');\ngoog.require('ol.functions');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.MapBrowserPointerEvent');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n *\n * @constructor\n * @param {olx.interaction.PointerOptions=} opt_options Options.\n * @extends {ol.interaction.Interaction}\n * @api\n */\nol.interaction.Pointer = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var handleEvent = options.handleEvent ?\n    options.handleEvent : ol.interaction.Pointer.handleEvent;\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: handleEvent\n  });\n\n  /**\n   * @type {function(ol.MapBrowserPointerEvent):boolean}\n   * @private\n   */\n  this.handleDownEvent_ = options.handleDownEvent ?\n    options.handleDownEvent : ol.interaction.Pointer.handleDownEvent;\n\n  /**\n   * @type {function(ol.MapBrowserPointerEvent)}\n   * @private\n   */\n  this.handleDragEvent_ = options.handleDragEvent ?\n    options.handleDragEvent : ol.interaction.Pointer.handleDragEvent;\n\n  /**\n   * @type {function(ol.MapBrowserPointerEvent)}\n   * @private\n   */\n  this.handleMoveEvent_ = options.handleMoveEvent ?\n    options.handleMoveEvent : ol.interaction.Pointer.handleMoveEvent;\n\n  /**\n   * @type {function(ol.MapBrowserPointerEvent):boolean}\n   * @private\n   */\n  this.handleUpEvent_ = options.handleUpEvent ?\n    options.handleUpEvent : ol.interaction.Pointer.handleUpEvent;\n\n  /**\n   * @type {boolean}\n   * @protected\n   */\n  this.handlingDownUpSequence = false;\n\n  /**\n   * @type {Object.<string, ol.pointer.PointerEvent>}\n   * @private\n   */\n  this.trackedPointers_ = {};\n\n  /**\n   * @type {Array.<ol.pointer.PointerEvent>}\n   * @protected\n   */\n  this.targetPointers = [];\n\n};\nol.inherits(ol.interaction.Pointer, ol.interaction.Interaction);\n\n\n/**\n * @param {Array.<ol.pointer.PointerEvent>} pointerEvents List of events.\n * @return {ol.Pixel} Centroid pixel.\n */\nol.interaction.Pointer.centroid = function(pointerEvents) {\n  var length = pointerEvents.length;\n  var clientX = 0;\n  var clientY = 0;\n  for (var i = 0; i < length; i++) {\n    clientX += pointerEvents[i].clientX;\n    clientY += pointerEvents[i].clientY;\n  }\n  return [clientX / length, clientY / length];\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Whether the event is a pointerdown, pointerdrag\n *     or pointerup event.\n * @private\n */\nol.interaction.Pointer.prototype.isPointerDraggingEvent_ = function(mapBrowserEvent) {\n  var type = mapBrowserEvent.type;\n  return (\n    type === ol.MapBrowserEventType.POINTERDOWN ||\n      type === ol.MapBrowserEventType.POINTERDRAG ||\n      type === ol.MapBrowserEventType.POINTERUP);\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @private\n */\nol.interaction.Pointer.prototype.updateTrackedPointers_ = function(mapBrowserEvent) {\n  if (this.isPointerDraggingEvent_(mapBrowserEvent)) {\n    var event = mapBrowserEvent.pointerEvent;\n\n    var id = event.pointerId.toString();\n    if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERUP) {\n      delete this.trackedPointers_[id];\n    } else if (mapBrowserEvent.type ==\n        ol.MapBrowserEventType.POINTERDOWN) {\n      this.trackedPointers_[id] = event;\n    } else if (id in this.trackedPointers_) {\n      // update only when there was a pointerdown event for this pointer\n      this.trackedPointers_[id] = event;\n    }\n    this.targetPointers = ol.obj.getValues(this.trackedPointers_);\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.Pointer}\n */\nol.interaction.Pointer.handleDragEvent = ol.nullFunction;\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Capture dragging.\n * @this {ol.interaction.Pointer}\n */\nol.interaction.Pointer.handleUpEvent = ol.functions.FALSE;\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Capture dragging.\n * @this {ol.interaction.Pointer}\n */\nol.interaction.Pointer.handleDownEvent = ol.functions.FALSE;\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.Pointer}\n */\nol.interaction.Pointer.handleMoveEvent = ol.nullFunction;\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.Pointer}\n * @api\n */\nol.interaction.Pointer.handleEvent = function(mapBrowserEvent) {\n  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {\n    return true;\n  }\n\n  var stopEvent = false;\n  this.updateTrackedPointers_(mapBrowserEvent);\n  if (this.handlingDownUpSequence) {\n    if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERDRAG) {\n      this.handleDragEvent_(mapBrowserEvent);\n    } else if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERUP) {\n      var handledUp = this.handleUpEvent_(mapBrowserEvent);\n      this.handlingDownUpSequence = handledUp && this.targetPointers.length > 0;\n    }\n  } else {\n    if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERDOWN) {\n      var handled = this.handleDownEvent_(mapBrowserEvent);\n      this.handlingDownUpSequence = handled;\n      stopEvent = this.shouldStopEvent(handled);\n    } else if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERMOVE) {\n      this.handleMoveEvent_(mapBrowserEvent);\n    }\n  }\n  return !stopEvent;\n};\n\n\n/**\n * This method is used to determine if \"down\" events should be propagated to\n * other interactions or should be stopped.\n *\n * The method receives the return code of the \"handleDownEvent\" function.\n *\n * By default this function is the \"identity\" function. It's overidden in\n * child classes.\n *\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the event be stopped?\n * @protected\n */\nol.interaction.Pointer.prototype.shouldStopEvent = function(handled) {\n  return handled;\n};\n\ngoog.provide('ol.interaction.DragPan');\n\ngoog.require('ol');\ngoog.require('ol.ViewHint');\ngoog.require('ol.coordinate');\ngoog.require('ol.easing');\ngoog.require('ol.events.condition');\ngoog.require('ol.functions');\ngoog.require('ol.interaction.Pointer');\n\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.DragPanOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragPan = function(opt_options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.DragPan.handleDownEvent_,\n    handleDragEvent: ol.interaction.DragPan.handleDragEvent_,\n    handleUpEvent: ol.interaction.DragPan.handleUpEvent_\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {ol.Kinetic|undefined}\n   */\n  this.kinetic_ = options.kinetic;\n\n  /**\n   * @type {ol.Pixel}\n   */\n  this.lastCentroid = null;\n\n  /**\n   * @type {number}\n   */\n  this.lastPointersCount_;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.noModifierKeys;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.noKinetic_ = false;\n\n};\nol.inherits(ol.interaction.DragPan, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.DragPan}\n * @private\n */\nol.interaction.DragPan.handleDragEvent_ = function(mapBrowserEvent) {\n  var targetPointers = this.targetPointers;\n  var centroid =\n      ol.interaction.Pointer.centroid(targetPointers);\n  if (targetPointers.length == this.lastPointersCount_) {\n    if (this.kinetic_) {\n      this.kinetic_.update(centroid[0], centroid[1]);\n    }\n    if (this.lastCentroid) {\n      var deltaX = this.lastCentroid[0] - centroid[0];\n      var deltaY = centroid[1] - this.lastCentroid[1];\n      var map = mapBrowserEvent.map;\n      var view = map.getView();\n      var viewState = view.getState();\n      var center = [deltaX, deltaY];\n      ol.coordinate.scale(center, viewState.resolution);\n      ol.coordinate.rotate(center, viewState.rotation);\n      ol.coordinate.add(center, viewState.center);\n      center = view.constrainCenter(center);\n      view.setCenter(center);\n    }\n  } else if (this.kinetic_) {\n    // reset so we don't overestimate the kinetic energy after\n    // after one finger down, tiny drag, second finger down\n    this.kinetic_.begin();\n  }\n  this.lastCentroid = centroid;\n  this.lastPointersCount_ = targetPointers.length;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.DragPan}\n * @private\n */\nol.interaction.DragPan.handleUpEvent_ = function(mapBrowserEvent) {\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  if (this.targetPointers.length === 0) {\n    if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n      var distance = this.kinetic_.getDistance();\n      var angle = this.kinetic_.getAngle();\n      var center = /** @type {!ol.Coordinate} */ (view.getCenter());\n      var centerpx = map.getPixelFromCoordinate(center);\n      var dest = map.getCoordinateFromPixel([\n        centerpx[0] - distance * Math.cos(angle),\n        centerpx[1] - distance * Math.sin(angle)\n      ]);\n      view.animate({\n        center: view.constrainCenter(dest),\n        duration: 500,\n        easing: ol.easing.easeOut\n      });\n    }\n    view.setHint(ol.ViewHint.INTERACTING, -1);\n    return false;\n  } else {\n    if (this.kinetic_) {\n      // reset so we don't overestimate the kinetic energy after\n      // after one finger up, tiny drag, second finger up\n      this.kinetic_.begin();\n    }\n    this.lastCentroid = null;\n    return true;\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.DragPan}\n * @private\n */\nol.interaction.DragPan.handleDownEvent_ = function(mapBrowserEvent) {\n  if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n    var map = mapBrowserEvent.map;\n    var view = map.getView();\n    this.lastCentroid = null;\n    if (!this.handlingDownUpSequence) {\n      view.setHint(ol.ViewHint.INTERACTING, 1);\n    }\n    // stop any current animation\n    if (view.getAnimating()) {\n      view.setCenter(mapBrowserEvent.frameState.viewState.center);\n    }\n    if (this.kinetic_) {\n      this.kinetic_.begin();\n    }\n    // No kinetic as soon as more than one pointer on the screen is\n    // detected. This is to prevent nasty pans after pinch.\n    this.noKinetic_ = this.targetPointers.length > 1;\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.DragPan.prototype.shouldStopEvent = ol.functions.FALSE;\n\ngoog.provide('ol.interaction.DragRotate');\n\ngoog.require('ol');\ngoog.require('ol.RotationConstraint');\ngoog.require('ol.ViewHint');\ngoog.require('ol.events.condition');\ngoog.require('ol.functions');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.interaction.Pointer');\n\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link ol.events.condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.DragRotateOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragRotate = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.DragRotate.handleDownEvent_,\n    handleDragEvent: ol.interaction.DragRotate.handleDragEvent_,\n    handleUpEvent: ol.interaction.DragRotate.handleUpEvent_\n  });\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.altShiftKeysOnly;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lastAngle_ = undefined;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n};\nol.inherits(ol.interaction.DragRotate, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.DragRotate}\n * @private\n */\nol.interaction.DragRotate.handleDragEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return;\n  }\n\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  if (view.getConstraints().rotation === ol.RotationConstraint.disable) {\n    return;\n  }\n  var size = map.getSize();\n  var offset = mapBrowserEvent.pixel;\n  var theta =\n      Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n  if (this.lastAngle_ !== undefined) {\n    var delta = theta - this.lastAngle_;\n    var rotation = view.getRotation();\n    ol.interaction.Interaction.rotateWithoutConstraints(\n        view, rotation - delta);\n  }\n  this.lastAngle_ = theta;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.DragRotate}\n * @private\n */\nol.interaction.DragRotate.handleUpEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return true;\n  }\n\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  view.setHint(ol.ViewHint.INTERACTING, -1);\n  var rotation = view.getRotation();\n  ol.interaction.Interaction.rotate(view, rotation,\n      undefined, this.duration_);\n  return false;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.DragRotate}\n * @private\n */\nol.interaction.DragRotate.handleDownEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return false;\n  }\n\n  if (ol.events.condition.mouseActionButton(mapBrowserEvent) &&\n      this.condition_(mapBrowserEvent)) {\n    var map = mapBrowserEvent.map;\n    map.getView().setHint(ol.ViewHint.INTERACTING, 1);\n    this.lastAngle_ = undefined;\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.DragRotate.prototype.shouldStopEvent = ol.functions.FALSE;\n\n// FIXME add rotation\n\ngoog.provide('ol.render.Box');\n\ngoog.require('ol');\ngoog.require('ol.Disposable');\ngoog.require('ol.geom.Polygon');\n\n\n/**\n * @constructor\n * @extends {ol.Disposable}\n * @param {string} className CSS class name.\n */\nol.render.Box = function(className) {\n\n  /**\n   * @type {ol.geom.Polygon}\n   * @private\n   */\n  this.geometry_ = null;\n\n  /**\n   * @type {HTMLDivElement}\n   * @private\n   */\n  this.element_ = /** @type {HTMLDivElement} */ (document.createElement('div'));\n  this.element_.style.position = 'absolute';\n  this.element_.className = 'ol-box ' + className;\n\n  /**\n   * @private\n   * @type {ol.PluggableMap}\n   */\n  this.map_ = null;\n\n  /**\n   * @private\n   * @type {ol.Pixel}\n   */\n  this.startPixel_ = null;\n\n  /**\n   * @private\n   * @type {ol.Pixel}\n   */\n  this.endPixel_ = null;\n\n};\nol.inherits(ol.render.Box, ol.Disposable);\n\n\n/**\n * @inheritDoc\n */\nol.render.Box.prototype.disposeInternal = function() {\n  this.setMap(null);\n};\n\n\n/**\n * @private\n */\nol.render.Box.prototype.render_ = function() {\n  var startPixel = this.startPixel_;\n  var endPixel = this.endPixel_;\n  var px = 'px';\n  var style = this.element_.style;\n  style.left = Math.min(startPixel[0], endPixel[0]) + px;\n  style.top = Math.min(startPixel[1], endPixel[1]) + px;\n  style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n  style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n};\n\n\n/**\n * @param {ol.PluggableMap} map Map.\n */\nol.render.Box.prototype.setMap = function(map) {\n  if (this.map_) {\n    this.map_.getOverlayContainer().removeChild(this.element_);\n    var style = this.element_.style;\n    style.left = style.top = style.width = style.height = 'inherit';\n  }\n  this.map_ = map;\n  if (this.map_) {\n    this.map_.getOverlayContainer().appendChild(this.element_);\n  }\n};\n\n\n/**\n * @param {ol.Pixel} startPixel Start pixel.\n * @param {ol.Pixel} endPixel End pixel.\n */\nol.render.Box.prototype.setPixels = function(startPixel, endPixel) {\n  this.startPixel_ = startPixel;\n  this.endPixel_ = endPixel;\n  this.createOrUpdateGeometry();\n  this.render_();\n};\n\n\n/**\n * Creates or updates the cached geometry.\n */\nol.render.Box.prototype.createOrUpdateGeometry = function() {\n  var startPixel = this.startPixel_;\n  var endPixel = this.endPixel_;\n  var pixels = [\n    startPixel,\n    [startPixel[0], endPixel[1]],\n    endPixel,\n    [endPixel[0], startPixel[1]]\n  ];\n  var coordinates = pixels.map(this.map_.getCoordinateFromPixel, this.map_);\n  // close the polygon\n  coordinates[4] = coordinates[0].slice();\n  if (!this.geometry_) {\n    this.geometry_ = new ol.geom.Polygon([coordinates]);\n  } else {\n    this.geometry_.setCoordinates([coordinates]);\n  }\n};\n\n\n/**\n * @return {ol.geom.Polygon} Geometry.\n */\nol.render.Box.prototype.getGeometry = function() {\n  return this.geometry_;\n};\n\n// FIXME draw drag box\ngoog.provide('ol.interaction.DragBox');\n\ngoog.require('ol.events.Event');\ngoog.require('ol');\ngoog.require('ol.events.condition');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.render.Box');\n\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link ol.events.condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link ol.interaction.DragZoom} and\n * {@link ol.interaction.DragRotateAndZoom}).\n *\n * This interaction is only supported for mouse devices.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @fires ol.interaction.DragBox.Event\n * @param {olx.interaction.DragBoxOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragBox = function(opt_options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.DragBox.handleDownEvent_,\n    handleDragEvent: ol.interaction.DragBox.handleDragEvent_,\n    handleUpEvent: ol.interaction.DragBox.handleUpEvent_\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {ol.render.Box}\n   * @private\n   */\n  this.box_ = new ol.render.Box(options.className || 'ol-dragbox');\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n\n  /**\n   * @type {ol.Pixel}\n   * @private\n   */\n  this.startPixel_ = null;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.always;\n\n  /**\n   * @private\n   * @type {ol.DragBoxEndConditionType}\n   */\n  this.boxEndCondition_ = options.boxEndCondition ?\n    options.boxEndCondition : ol.interaction.DragBox.defaultBoxEndCondition;\n};\nol.inherits(ol.interaction.DragBox, ol.interaction.Pointer);\n\n\n/**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {ol.MapBrowserEvent} mapBrowserEvent The originating MapBrowserEvent\n *     leading to the box end.\n * @param {ol.Pixel} startPixel The starting pixel of the box.\n * @param {ol.Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n * @this {ol.interaction.DragBox}\n */\nol.interaction.DragBox.defaultBoxEndCondition = function(mapBrowserEvent, startPixel, endPixel) {\n  var width = endPixel[0] - startPixel[0];\n  var height = endPixel[1] - startPixel[1];\n  return width * width + height * height >= this.minArea_;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.DragBox}\n * @private\n */\nol.interaction.DragBox.handleDragEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return;\n  }\n\n  this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n  this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType_.BOXDRAG,\n      mapBrowserEvent.coordinate, mapBrowserEvent));\n};\n\n\n/**\n * Returns geometry of last drawn box.\n * @return {ol.geom.Polygon} Geometry.\n * @api\n */\nol.interaction.DragBox.prototype.getGeometry = function() {\n  return this.box_.getGeometry();\n};\n\n\n/**\n * To be overridden by child classes.\n * FIXME: use constructor option instead of relying on overriding.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @protected\n */\nol.interaction.DragBox.prototype.onBoxEnd = ol.nullFunction;\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.DragBox}\n * @private\n */\nol.interaction.DragBox.handleUpEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return true;\n  }\n\n  this.box_.setMap(null);\n\n  if (this.boxEndCondition_(mapBrowserEvent,\n      this.startPixel_, mapBrowserEvent.pixel)) {\n    this.onBoxEnd(mapBrowserEvent);\n    this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType_.BOXEND,\n        mapBrowserEvent.coordinate, mapBrowserEvent));\n  }\n  return false;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.DragBox}\n * @private\n */\nol.interaction.DragBox.handleDownEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return false;\n  }\n\n  if (ol.events.condition.mouseActionButton(mapBrowserEvent) &&\n      this.condition_(mapBrowserEvent)) {\n    this.startPixel_ = mapBrowserEvent.pixel;\n    this.box_.setMap(mapBrowserEvent.map);\n    this.box_.setPixels(this.startPixel_, this.startPixel_);\n    this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType_.BOXSTART,\n        mapBrowserEvent.coordinate, mapBrowserEvent));\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.interaction.DragBox.EventType_ = {\n  /**\n   * Triggered upon drag box start.\n   * @event ol.interaction.DragBox.Event#boxstart\n   * @api\n   */\n  BOXSTART: 'boxstart',\n\n  /**\n   * Triggered on drag when box is active.\n   * @event ol.interaction.DragBox.Event#boxdrag\n   * @api\n   */\n  BOXDRAG: 'boxdrag',\n\n  /**\n   * Triggered upon drag box end.\n   * @event ol.interaction.DragBox.Event#boxend\n   * @api\n   */\n  BOXEND: 'boxend'\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.DragBox} instances are instances of\n * this type.\n *\n * @param {string} type The event type.\n * @param {ol.Coordinate} coordinate The event coordinate.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Originating event.\n * @extends {ol.events.Event}\n * @constructor\n * @implements {oli.DragBoxEvent}\n */\nol.interaction.DragBox.Event = function(type, coordinate, mapBrowserEvent) {\n  ol.events.Event.call(this, type);\n\n  /**\n   * The coordinate of the drag event.\n   * @const\n   * @type {ol.Coordinate}\n   * @api\n   */\n  this.coordinate = coordinate;\n\n  /**\n   * @const\n   * @type {ol.MapBrowserEvent}\n   * @api\n   */\n  this.mapBrowserEvent = mapBrowserEvent;\n\n};\nol.inherits(ol.interaction.DragBox.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.DragZoom');\n\ngoog.require('ol');\ngoog.require('ol.easing');\ngoog.require('ol.events.condition');\ngoog.require('ol.extent');\ngoog.require('ol.interaction.DragBox');\n\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link ol.events.condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n *\n * @constructor\n * @extends {ol.interaction.DragBox}\n * @param {olx.interaction.DragZoomOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragZoom = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  var condition = options.condition ?\n    options.condition : ol.events.condition.shiftKeyOnly;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.out_ = options.out !== undefined ? options.out : false;\n\n  ol.interaction.DragBox.call(this, {\n    condition: condition,\n    className: options.className || 'ol-dragzoom'\n  });\n\n};\nol.inherits(ol.interaction.DragZoom, ol.interaction.DragBox);\n\n\n/**\n * @inheritDoc\n */\nol.interaction.DragZoom.prototype.onBoxEnd = function() {\n  var map = this.getMap();\n\n  var view = /** @type {!ol.View} */ (map.getView());\n\n  var size = /** @type {!ol.Size} */ (map.getSize());\n\n  var extent = this.getGeometry().getExtent();\n\n  if (this.out_) {\n    var mapExtent = view.calculateExtent(size);\n    var boxPixelExtent = ol.extent.createOrUpdateFromCoordinates([\n      map.getPixelFromCoordinate(ol.extent.getBottomLeft(extent)),\n      map.getPixelFromCoordinate(ol.extent.getTopRight(extent))]);\n    var factor = view.getResolutionForExtent(boxPixelExtent, size);\n\n    ol.extent.scaleFromCenter(mapExtent, 1 / factor);\n    extent = mapExtent;\n  }\n\n  var resolution = view.constrainResolution(\n      view.getResolutionForExtent(extent, size));\n\n  var center = ol.extent.getCenter(extent);\n  center = view.constrainCenter(center);\n\n  view.animate({\n    resolution: resolution,\n    center: center,\n    duration: this.duration_,\n    easing: ol.easing.easeOut\n  });\n\n};\n\ngoog.provide('ol.events.KeyCode');\n\n/**\n * @enum {number}\n * @const\n */\nol.events.KeyCode = {\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40\n};\n\ngoog.provide('ol.interaction.KeyboardPan');\n\ngoog.require('ol');\ngoog.require('ol.coordinate');\ngoog.require('ol.events.EventType');\ngoog.require('ol.events.KeyCode');\ngoog.require('ol.events.condition');\ngoog.require('ol.interaction.Interaction');\n\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link ol.Map}. `document` never loses focus but, for any other element,\n * focus will have to be on, and returned to, this element if the keys are to\n * function.\n * See also {@link ol.interaction.KeyboardZoom}.\n *\n * @constructor\n * @extends {ol.interaction.Interaction}\n * @param {olx.interaction.KeyboardPanOptions=} opt_options Options.\n * @api\n */\nol.interaction.KeyboardPan = function(opt_options) {\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.KeyboardPan.handleEvent\n  });\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @param {ol.MapBrowserEvent} mapBrowserEvent Browser event.\n   * @return {boolean} Combined condition result.\n   */\n  this.defaultCondition_ = function(mapBrowserEvent) {\n    return ol.events.condition.noModifierKeys(mapBrowserEvent) &&\n      ol.events.condition.targetNotEditable(mapBrowserEvent);\n  };\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition !== undefined ?\n    options.condition : this.defaultCondition_;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelDelta_ = options.pixelDelta !== undefined ?\n    options.pixelDelta : 128;\n\n};\nol.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction);\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.KeyboardPan}\n * @api\n */\nol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) {\n  var stopEvent = false;\n  if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN) {\n    var keyEvent = mapBrowserEvent.originalEvent;\n    var keyCode = keyEvent.keyCode;\n    if (this.condition_(mapBrowserEvent) &&\n        (keyCode == ol.events.KeyCode.DOWN ||\n        keyCode == ol.events.KeyCode.LEFT ||\n        keyCode == ol.events.KeyCode.RIGHT ||\n        keyCode == ol.events.KeyCode.UP)) {\n      var map = mapBrowserEvent.map;\n      var view = map.getView();\n      var mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n      var deltaX = 0, deltaY = 0;\n      if (keyCode == ol.events.KeyCode.DOWN) {\n        deltaY = -mapUnitsDelta;\n      } else if (keyCode == ol.events.KeyCode.LEFT) {\n        deltaX = -mapUnitsDelta;\n      } else if (keyCode == ol.events.KeyCode.RIGHT) {\n        deltaX = mapUnitsDelta;\n      } else {\n        deltaY = mapUnitsDelta;\n      }\n      var delta = [deltaX, deltaY];\n      ol.coordinate.rotate(delta, view.getRotation());\n      ol.interaction.Interaction.pan(view, delta, this.duration_);\n      mapBrowserEvent.preventDefault();\n      stopEvent = true;\n    }\n  }\n  return !stopEvent;\n};\n\ngoog.provide('ol.interaction.KeyboardZoom');\n\ngoog.require('ol');\ngoog.require('ol.events.EventType');\ngoog.require('ol.events.condition');\ngoog.require('ol.interaction.Interaction');\n\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link ol.Map}. `document` never loses focus but, for any other element,\n * focus will have to be on, and returned to, this element if the keys are to\n * function.\n * See also {@link ol.interaction.KeyboardPan}.\n *\n * @constructor\n * @param {olx.interaction.KeyboardZoomOptions=} opt_options Options.\n * @extends {ol.interaction.Interaction}\n * @api\n */\nol.interaction.KeyboardZoom = function(opt_options) {\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.KeyboardZoom.handleEvent\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ? options.condition :\n    ol.events.condition.targetNotEditable;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.delta_ = options.delta ? options.delta : 1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n};\nol.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.KeyboardZoom}\n * @api\n */\nol.interaction.KeyboardZoom.handleEvent = function(mapBrowserEvent) {\n  var stopEvent = false;\n  if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN ||\n      mapBrowserEvent.type == ol.events.EventType.KEYPRESS) {\n    var keyEvent = mapBrowserEvent.originalEvent;\n    var charCode = keyEvent.charCode;\n    if (this.condition_(mapBrowserEvent) &&\n        (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {\n      var map = mapBrowserEvent.map;\n      var delta = (charCode == '+'.charCodeAt(0)) ? this.delta_ : -this.delta_;\n      var view = map.getView();\n      ol.interaction.Interaction.zoomByDelta(\n          view, delta, undefined, this.duration_);\n      mapBrowserEvent.preventDefault();\n      stopEvent = true;\n    }\n  }\n  return !stopEvent;\n};\n\ngoog.provide('ol.interaction.MouseWheelZoom');\n\ngoog.require('ol');\ngoog.require('ol.ViewHint');\ngoog.require('ol.easing');\ngoog.require('ol.events.EventType');\ngoog.require('ol.has');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n *\n * @constructor\n * @extends {ol.interaction.Interaction}\n * @param {olx.interaction.MouseWheelZoomOptions=} opt_options Options.\n * @api\n */\nol.interaction.MouseWheelZoom = function(opt_options) {\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.MouseWheelZoom.handleEvent\n  });\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.delta_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.useAnchor_ = options.useAnchor !== undefined ? options.useAnchor : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.constrainResolution_ = options.constrainResolution || false;\n\n  /**\n   * @private\n   * @type {?ol.Coordinate}\n   */\n  this.lastAnchor_ = null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.startTime_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.timeoutId_ = undefined;\n\n  /**\n   * @private\n   * @type {ol.interaction.MouseWheelZoom.Mode_|undefined}\n   */\n  this.mode_ = undefined;\n\n  /**\n   * Trackpad events separated by this delay will be considered separate\n   * interactions.\n   * @type {number}\n   */\n  this.trackpadEventGap_ = 400;\n\n  /**\n   * @type {number|undefined}\n   */\n  this.trackpadTimeoutId_ = undefined;\n\n  /**\n   * The number of delta values per zoom level\n   * @private\n   * @type {number}\n   */\n  this.trackpadDeltaPerZoom_ = 300;\n\n  /**\n   * The zoom factor by which scroll zooming is allowed to exceed the limits.\n   * @private\n   * @type {number}\n   */\n  this.trackpadZoomBuffer_ = 1.5;\n\n};\nol.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction);\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} (if it was a\n * mousewheel-event) and eventually zooms the map.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} Allow event propagation.\n * @this {ol.interaction.MouseWheelZoom}\n * @api\n */\nol.interaction.MouseWheelZoom.handleEvent = function(mapBrowserEvent) {\n  var type = mapBrowserEvent.type;\n  if (type !== ol.events.EventType.WHEEL && type !== ol.events.EventType.MOUSEWHEEL) {\n    return true;\n  }\n\n  mapBrowserEvent.preventDefault();\n\n  var map = mapBrowserEvent.map;\n  var wheelEvent = /** @type {WheelEvent} */ (mapBrowserEvent.originalEvent);\n\n  if (this.useAnchor_) {\n    this.lastAnchor_ = mapBrowserEvent.coordinate;\n  }\n\n  // Delta normalisation inspired by\n  // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n  var delta;\n  if (mapBrowserEvent.type == ol.events.EventType.WHEEL) {\n    delta = wheelEvent.deltaY;\n    if (ol.has.FIREFOX &&\n        wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      delta /= ol.has.DEVICE_PIXEL_RATIO;\n    }\n    if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n      delta *= 40;\n    }\n  } else if (mapBrowserEvent.type == ol.events.EventType.MOUSEWHEEL) {\n    delta = -wheelEvent.wheelDeltaY;\n    if (ol.has.SAFARI) {\n      delta /= 3;\n    }\n  }\n\n  if (delta === 0) {\n    return false;\n  }\n\n  var now = Date.now();\n\n  if (this.startTime_ === undefined) {\n    this.startTime_ = now;\n  }\n\n  if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n    this.mode_ = Math.abs(delta) < 4 ?\n      ol.interaction.MouseWheelZoom.Mode_.TRACKPAD :\n      ol.interaction.MouseWheelZoom.Mode_.WHEEL;\n  }\n\n  if (this.mode_ === ol.interaction.MouseWheelZoom.Mode_.TRACKPAD) {\n    var view = map.getView();\n    if (this.trackpadTimeoutId_) {\n      clearTimeout(this.trackpadTimeoutId_);\n    } else {\n      view.setHint(ol.ViewHint.INTERACTING, 1);\n    }\n    this.trackpadTimeoutId_ = setTimeout(this.decrementInteractingHint_.bind(this), this.trackpadEventGap_);\n    var resolution = view.getResolution() * Math.pow(2, delta / this.trackpadDeltaPerZoom_);\n    var minResolution = view.getMinResolution();\n    var maxResolution = view.getMaxResolution();\n    var rebound = 0;\n    if (resolution < minResolution) {\n      resolution = Math.max(resolution, minResolution / this.trackpadZoomBuffer_);\n      rebound = 1;\n    } else if (resolution > maxResolution) {\n      resolution = Math.min(resolution, maxResolution * this.trackpadZoomBuffer_);\n      rebound = -1;\n    }\n    if (this.lastAnchor_) {\n      var center = view.calculateCenterZoom(resolution, this.lastAnchor_);\n      view.setCenter(view.constrainCenter(center));\n    }\n    view.setResolution(resolution);\n\n    if (rebound === 0 && this.constrainResolution_) {\n      view.animate({\n        resolution: view.constrainResolution(resolution, delta > 0 ? -1 : 1),\n        easing: ol.easing.easeOut,\n        anchor: this.lastAnchor_,\n        duration: this.duration_\n      });\n    }\n\n    if (rebound > 0) {\n      view.animate({\n        resolution: minResolution,\n        easing: ol.easing.easeOut,\n        anchor: this.lastAnchor_,\n        duration: 500\n      });\n    } else if (rebound < 0) {\n      view.animate({\n        resolution: maxResolution,\n        easing: ol.easing.easeOut,\n        anchor: this.lastAnchor_,\n        duration: 500\n      });\n    }\n    this.startTime_ = now;\n    return false;\n  }\n\n  this.delta_ += delta;\n\n  var timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n  clearTimeout(this.timeoutId_);\n  this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft);\n\n  return false;\n};\n\n\n/**\n * @private\n */\nol.interaction.MouseWheelZoom.prototype.decrementInteractingHint_ = function() {\n  this.trackpadTimeoutId_ = undefined;\n  var view = this.getMap().getView();\n  view.setHint(ol.ViewHint.INTERACTING, -1);\n};\n\n\n/**\n * @private\n * @param {ol.PluggableMap} map Map.\n */\nol.interaction.MouseWheelZoom.prototype.handleWheelZoom_ = function(map) {\n  var view = map.getView();\n  if (view.getAnimating()) {\n    view.cancelAnimations();\n  }\n  var maxDelta = ol.MOUSEWHEELZOOM_MAXDELTA;\n  var delta = ol.math.clamp(this.delta_, -maxDelta, maxDelta);\n  ol.interaction.Interaction.zoomByDelta(view, -delta, this.lastAnchor_,\n      this.duration_);\n  this.mode_ = undefined;\n  this.delta_ = 0;\n  this.lastAnchor_ = null;\n  this.startTime_ = undefined;\n  this.timeoutId_ = undefined;\n};\n\n\n/**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\nol.interaction.MouseWheelZoom.prototype.setMouseAnchor = function(useAnchor) {\n  this.useAnchor_ = useAnchor;\n  if (!useAnchor) {\n    this.lastAnchor_ = null;\n  }\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.interaction.MouseWheelZoom.Mode_ = {\n  TRACKPAD: 'trackpad',\n  WHEEL: 'wheel'\n};\n\ngoog.provide('ol.interaction.PinchRotate');\n\ngoog.require('ol');\ngoog.require('ol.ViewHint');\ngoog.require('ol.functions');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.RotationConstraint');\n\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.PinchRotateOptions=} opt_options Options.\n * @api\n */\nol.interaction.PinchRotate = function(opt_options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.PinchRotate.handleDownEvent_,\n    handleDragEvent: ol.interaction.PinchRotate.handleDragEvent_,\n    handleUpEvent: ol.interaction.PinchRotate.handleUpEvent_\n  });\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.anchor_ = null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lastAngle_ = undefined;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.rotating_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.rotationDelta_ = 0.0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n};\nol.inherits(ol.interaction.PinchRotate, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.PinchRotate}\n * @private\n */\nol.interaction.PinchRotate.handleDragEvent_ = function(mapBrowserEvent) {\n  var rotationDelta = 0.0;\n\n  var touch0 = this.targetPointers[0];\n  var touch1 = this.targetPointers[1];\n\n  // angle between touches\n  var angle = Math.atan2(\n      touch1.clientY - touch0.clientY,\n      touch1.clientX - touch0.clientX);\n\n  if (this.lastAngle_ !== undefined) {\n    var delta = angle - this.lastAngle_;\n    this.rotationDelta_ += delta;\n    if (!this.rotating_ &&\n        Math.abs(this.rotationDelta_) > this.threshold_) {\n      this.rotating_ = true;\n    }\n    rotationDelta = delta;\n  }\n  this.lastAngle_ = angle;\n\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  if (view.getConstraints().rotation === ol.RotationConstraint.disable) {\n    return;\n  }\n\n  // rotate anchor point.\n  // FIXME: should be the intersection point between the lines:\n  //     touch0,touch1 and previousTouch0,previousTouch1\n  var viewportPosition = map.getViewport().getBoundingClientRect();\n  var centroid = ol.interaction.Pointer.centroid(this.targetPointers);\n  centroid[0] -= viewportPosition.left;\n  centroid[1] -= viewportPosition.top;\n  this.anchor_ = map.getCoordinateFromPixel(centroid);\n\n  // rotate\n  if (this.rotating_) {\n    var rotation = view.getRotation();\n    map.render();\n    ol.interaction.Interaction.rotateWithoutConstraints(view,\n        rotation + rotationDelta, this.anchor_);\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.PinchRotate}\n * @private\n */\nol.interaction.PinchRotate.handleUpEvent_ = function(mapBrowserEvent) {\n  if (this.targetPointers.length < 2) {\n    var map = mapBrowserEvent.map;\n    var view = map.getView();\n    view.setHint(ol.ViewHint.INTERACTING, -1);\n    if (this.rotating_) {\n      var rotation = view.getRotation();\n      ol.interaction.Interaction.rotate(\n          view, rotation, this.anchor_, this.duration_);\n    }\n    return false;\n  } else {\n    return true;\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.PinchRotate}\n * @private\n */\nol.interaction.PinchRotate.handleDownEvent_ = function(mapBrowserEvent) {\n  if (this.targetPointers.length >= 2) {\n    var map = mapBrowserEvent.map;\n    this.anchor_ = null;\n    this.lastAngle_ = undefined;\n    this.rotating_ = false;\n    this.rotationDelta_ = 0.0;\n    if (!this.handlingDownUpSequence) {\n      map.getView().setHint(ol.ViewHint.INTERACTING, 1);\n    }\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.PinchRotate.prototype.shouldStopEvent = ol.functions.FALSE;\n\ngoog.provide('ol.interaction.PinchZoom');\n\ngoog.require('ol');\ngoog.require('ol.ViewHint');\ngoog.require('ol.functions');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.interaction.Pointer');\n\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.PinchZoomOptions=} opt_options Options.\n * @api\n */\nol.interaction.PinchZoom = function(opt_options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.PinchZoom.handleDownEvent_,\n    handleDragEvent: ol.interaction.PinchZoom.handleDragEvent_,\n    handleUpEvent: ol.interaction.PinchZoom.handleUpEvent_\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.constrainResolution_ = options.constrainResolution || false;\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.anchor_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lastDistance_ = undefined;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.lastScaleDelta_ = 1;\n\n};\nol.inherits(ol.interaction.PinchZoom, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.PinchZoom}\n * @private\n */\nol.interaction.PinchZoom.handleDragEvent_ = function(mapBrowserEvent) {\n  var scaleDelta = 1.0;\n\n  var touch0 = this.targetPointers[0];\n  var touch1 = this.targetPointers[1];\n  var dx = touch0.clientX - touch1.clientX;\n  var dy = touch0.clientY - touch1.clientY;\n\n  // distance between touches\n  var distance = Math.sqrt(dx * dx + dy * dy);\n\n  if (this.lastDistance_ !== undefined) {\n    scaleDelta = this.lastDistance_ / distance;\n  }\n  this.lastDistance_ = distance;\n\n\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  var resolution = view.getResolution();\n  var maxResolution = view.getMaxResolution();\n  var minResolution = view.getMinResolution();\n  var newResolution = resolution * scaleDelta;\n  if (newResolution > maxResolution) {\n    scaleDelta = maxResolution / resolution;\n    newResolution = maxResolution;\n  } else if (newResolution < minResolution) {\n    scaleDelta = minResolution / resolution;\n    newResolution = minResolution;\n  }\n\n  if (scaleDelta != 1.0) {\n    this.lastScaleDelta_ = scaleDelta;\n  }\n\n  // scale anchor point.\n  var viewportPosition = map.getViewport().getBoundingClientRect();\n  var centroid = ol.interaction.Pointer.centroid(this.targetPointers);\n  centroid[0] -= viewportPosition.left;\n  centroid[1] -= viewportPosition.top;\n  this.anchor_ = map.getCoordinateFromPixel(centroid);\n\n  // scale, bypass the resolution constraint\n  map.render();\n  ol.interaction.Interaction.zoomWithoutConstraints(view, newResolution, this.anchor_);\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.PinchZoom}\n * @private\n */\nol.interaction.PinchZoom.handleUpEvent_ = function(mapBrowserEvent) {\n  if (this.targetPointers.length < 2) {\n    var map = mapBrowserEvent.map;\n    var view = map.getView();\n    view.setHint(ol.ViewHint.INTERACTING, -1);\n    var resolution = view.getResolution();\n    if (this.constrainResolution_ ||\n        resolution < view.getMinResolution() ||\n        resolution > view.getMaxResolution()) {\n      // Zoom to final resolution, with an animation, and provide a\n      // direction not to zoom out/in if user was pinching in/out.\n      // Direction is > 0 if pinching out, and < 0 if pinching in.\n      var direction = this.lastScaleDelta_ - 1;\n      ol.interaction.Interaction.zoom(view, resolution,\n          this.anchor_, this.duration_, direction);\n    }\n    return false;\n  } else {\n    return true;\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.PinchZoom}\n * @private\n */\nol.interaction.PinchZoom.handleDownEvent_ = function(mapBrowserEvent) {\n  if (this.targetPointers.length >= 2) {\n    var map = mapBrowserEvent.map;\n    this.anchor_ = null;\n    this.lastDistance_ = undefined;\n    this.lastScaleDelta_ = 1;\n    if (!this.handlingDownUpSequence) {\n      map.getView().setHint(ol.ViewHint.INTERACTING, 1);\n    }\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.PinchZoom.prototype.shouldStopEvent = ol.functions.FALSE;\n\ngoog.provide('ol.interaction');\n\ngoog.require('ol.Collection');\ngoog.require('ol.Kinetic');\ngoog.require('ol.interaction.DoubleClickZoom');\ngoog.require('ol.interaction.DragPan');\ngoog.require('ol.interaction.DragRotate');\ngoog.require('ol.interaction.DragZoom');\ngoog.require('ol.interaction.KeyboardPan');\ngoog.require('ol.interaction.KeyboardZoom');\ngoog.require('ol.interaction.MouseWheelZoom');\ngoog.require('ol.interaction.PinchRotate');\ngoog.require('ol.interaction.PinchZoom');\n\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed.  If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link ol.interaction.Interaction} instances and insert them into a\n * {@link ol.Collection} in the order you want before creating your\n * {@link ol.Map} instance. The default set of interactions, in sequence, is:\n * * {@link ol.interaction.DragRotate}\n * * {@link ol.interaction.DoubleClickZoom}\n * * {@link ol.interaction.DragPan}\n * * {@link ol.interaction.PinchRotate}\n * * {@link ol.interaction.PinchZoom}\n * * {@link ol.interaction.KeyboardPan}\n * * {@link ol.interaction.KeyboardZoom}\n * * {@link ol.interaction.MouseWheelZoom}\n * * {@link ol.interaction.DragZoom}\n *\n * @param {olx.interaction.DefaultsOptions=} opt_options Defaults options.\n * @return {ol.Collection.<ol.interaction.Interaction>} A collection of\n * interactions to be used with the ol.Map constructor's interactions option.\n * @api\n */\nol.interaction.defaults = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var interactions = new ol.Collection();\n\n  var kinetic = new ol.Kinetic(-0.005, 0.05, 100);\n\n  var altShiftDragRotate = options.altShiftDragRotate !== undefined ?\n    options.altShiftDragRotate : true;\n  if (altShiftDragRotate) {\n    interactions.push(new ol.interaction.DragRotate());\n  }\n\n  var doubleClickZoom = options.doubleClickZoom !== undefined ?\n    options.doubleClickZoom : true;\n  if (doubleClickZoom) {\n    interactions.push(new ol.interaction.DoubleClickZoom({\n      delta: options.zoomDelta,\n      duration: options.zoomDuration\n    }));\n  }\n\n  var dragPan = options.dragPan !== undefined ? options.dragPan : true;\n  if (dragPan) {\n    interactions.push(new ol.interaction.DragPan({\n      kinetic: kinetic\n    }));\n  }\n\n  var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate :\n    true;\n  if (pinchRotate) {\n    interactions.push(new ol.interaction.PinchRotate());\n  }\n\n  var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n  if (pinchZoom) {\n    interactions.push(new ol.interaction.PinchZoom({\n      constrainResolution: options.constrainResolution,\n      duration: options.zoomDuration\n    }));\n  }\n\n  var keyboard = options.keyboard !== undefined ? options.keyboard : true;\n  if (keyboard) {\n    interactions.push(new ol.interaction.KeyboardPan());\n    interactions.push(new ol.interaction.KeyboardZoom({\n      delta: options.zoomDelta,\n      duration: options.zoomDuration\n    }));\n  }\n\n  var mouseWheelZoom = options.mouseWheelZoom !== undefined ?\n    options.mouseWheelZoom : true;\n  if (mouseWheelZoom) {\n    interactions.push(new ol.interaction.MouseWheelZoom({\n      constrainResolution: options.constrainResolution,\n      duration: options.zoomDuration\n    }));\n  }\n\n  var shiftDragZoom = options.shiftDragZoom !== undefined ?\n    options.shiftDragZoom : true;\n  if (shiftDragZoom) {\n    interactions.push(new ol.interaction.DragZoom({\n      duration: options.zoomDuration\n    }));\n  }\n\n  return interactions;\n\n};\n\ngoog.provide('ol.ImageBase');\n\ngoog.require('ol');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.events.EventType');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.events.EventTarget}\n * @param {ol.Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.ImageState} state State.\n */\nol.ImageBase = function(extent, resolution, pixelRatio, state) {\n\n  ol.events.EventTarget.call(this);\n\n  /**\n   * @protected\n   * @type {ol.Extent}\n   */\n  this.extent = extent;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelRatio_ = pixelRatio;\n\n  /**\n   * @protected\n   * @type {number|undefined}\n   */\n  this.resolution = resolution;\n\n  /**\n   * @protected\n   * @type {ol.ImageState}\n   */\n  this.state = state;\n\n};\nol.inherits(ol.ImageBase, ol.events.EventTarget);\n\n\n/**\n * @protected\n */\nol.ImageBase.prototype.changed = function() {\n  this.dispatchEvent(ol.events.EventType.CHANGE);\n};\n\n\n/**\n * @return {ol.Extent} Extent.\n */\nol.ImageBase.prototype.getExtent = function() {\n  return this.extent;\n};\n\n\n/**\n * @abstract\n * @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.\n */\nol.ImageBase.prototype.getImage = function() {};\n\n\n/**\n * @return {number} PixelRatio.\n */\nol.ImageBase.prototype.getPixelRatio = function() {\n  return this.pixelRatio_;\n};\n\n\n/**\n * @return {number} Resolution.\n */\nol.ImageBase.prototype.getResolution = function() {\n  return /** @type {number} */ (this.resolution);\n};\n\n\n/**\n * @return {ol.ImageState} State.\n */\nol.ImageBase.prototype.getState = function() {\n  return this.state;\n};\n\n\n/**\n * Load not yet loaded URI.\n * @abstract\n */\nol.ImageBase.prototype.load = function() {};\n\ngoog.provide('ol.ImageState');\n\n/**\n * @enum {number}\n */\nol.ImageState = {\n  IDLE: 0,\n  LOADING: 1,\n  LOADED: 2,\n  ERROR: 3\n};\n\ngoog.provide('ol.ImageCanvas');\n\ngoog.require('ol');\ngoog.require('ol.ImageBase');\ngoog.require('ol.ImageState');\n\n\n/**\n * @constructor\n * @extends {ol.ImageBase}\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {ol.ImageCanvasLoader=} opt_loader Optional loader function to\n *     support asynchronous canvas drawing.\n */\nol.ImageCanvas = function(extent, resolution, pixelRatio, canvas, opt_loader) {\n\n  /**\n   * Optional canvas loader function.\n   * @type {?ol.ImageCanvasLoader}\n   * @private\n   */\n  this.loader_ = opt_loader !== undefined ? opt_loader : null;\n\n  var state = opt_loader !== undefined ?\n    ol.ImageState.IDLE : ol.ImageState.LOADED;\n\n  ol.ImageBase.call(this, extent, resolution, pixelRatio, state);\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = canvas;\n\n  /**\n   * @private\n   * @type {Error}\n   */\n  this.error_ = null;\n\n};\nol.inherits(ol.ImageCanvas, ol.ImageBase);\n\n\n/**\n * Get any error associated with asynchronous rendering.\n * @return {Error} Any error that occurred during rendering.\n */\nol.ImageCanvas.prototype.getError = function() {\n  return this.error_;\n};\n\n\n/**\n * Handle async drawing complete.\n * @param {Error} err Any error during drawing.\n * @private\n */\nol.ImageCanvas.prototype.handleLoad_ = function(err) {\n  if (err) {\n    this.error_ = err;\n    this.state = ol.ImageState.ERROR;\n  } else {\n    this.state = ol.ImageState.LOADED;\n  }\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n */\nol.ImageCanvas.prototype.load = function() {\n  if (this.state == ol.ImageState.IDLE) {\n    this.state = ol.ImageState.LOADING;\n    this.changed();\n    this.loader_(this.handleLoad_.bind(this));\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.ImageCanvas.prototype.getImage = function() {\n  return this.canvas_;\n};\n\ngoog.provide('ol.LayerType');\n\n/**\n * A layer type used when creating layer renderers.\n * @enum {string}\n */\nol.LayerType = {\n  IMAGE: 'IMAGE',\n  TILE: 'TILE',\n  VECTOR_TILE: 'VECTOR_TILE',\n  VECTOR: 'VECTOR'\n};\n\ngoog.provide('ol.layer.VectorRenderType');\n\n/**\n * @enum {string}\n * Render mode for vector layers:\n *  * `'image'`: Vector layers are rendered as images. Great performance, but\n *    point symbols and texts are always rotated with the view and pixels are\n *    scaled during zoom animations.\n *  * `'vector'`: Vector layers are rendered as vectors. Most accurate rendering\n *    even during animations, but slower performance.\n * @api\n */\nol.layer.VectorRenderType = {\n  IMAGE: 'image',\n  VECTOR: 'vector'\n};\n\ngoog.provide('ol.render.Event');\n\ngoog.require('ol');\ngoog.require('ol.events.Event');\n\n\n/**\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.render.Event}\n * @param {ol.render.EventType} type Type.\n * @param {ol.render.VectorContext=} opt_vectorContext Vector context.\n * @param {olx.FrameState=} opt_frameState Frame state.\n * @param {?CanvasRenderingContext2D=} opt_context Context.\n * @param {?ol.webgl.Context=} opt_glContext WebGL Context.\n */\nol.render.Event = function(\n    type, opt_vectorContext, opt_frameState, opt_context,\n    opt_glContext) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * For canvas, this is an instance of {@link ol.render.canvas.Immediate}.\n   * @type {ol.render.VectorContext|undefined}\n   * @api\n   */\n  this.vectorContext = opt_vectorContext;\n\n  /**\n   * An object representing the current render frame state.\n   * @type {olx.FrameState|undefined}\n   * @api\n   */\n  this.frameState = opt_frameState;\n\n  /**\n   * Canvas context. Only available when a Canvas renderer is used, null\n   * otherwise.\n   * @type {CanvasRenderingContext2D|null|undefined}\n   * @api\n   */\n  this.context = opt_context;\n\n  /**\n   * WebGL context. Only available when a WebGL renderer is used, null\n   * otherwise.\n   * @type {ol.webgl.Context|null|undefined}\n   * @api\n   */\n  this.glContext = opt_glContext;\n\n};\nol.inherits(ol.render.Event, ol.events.Event);\n\ngoog.provide('ol.structs.LRUCache');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.events.EventType');\n\n\n/**\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n * @constructor\n * @extends {ol.events.EventTarget}\n * @fires ol.events.Event\n * @struct\n * @template T\n * @param {number=} opt_highWaterMark High water mark.\n */\nol.structs.LRUCache = function(opt_highWaterMark) {\n\n  ol.events.EventTarget.call(this);\n\n  /**\n   * @type {number}\n   */\n  this.highWaterMark = opt_highWaterMark !== undefined ? opt_highWaterMark : 2048;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.count_ = 0;\n\n  /**\n   * @private\n   * @type {!Object.<string, ol.LRUCacheEntry>}\n   */\n  this.entries_ = {};\n\n  /**\n   * @private\n   * @type {?ol.LRUCacheEntry}\n   */\n  this.oldest_ = null;\n\n  /**\n   * @private\n   * @type {?ol.LRUCacheEntry}\n   */\n  this.newest_ = null;\n\n};\n\nol.inherits(ol.structs.LRUCache, ol.events.EventTarget);\n\n\n/**\n * @return {boolean} Can expire cache.\n */\nol.structs.LRUCache.prototype.canExpireCache = function() {\n  return this.getCount() > this.highWaterMark;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.structs.LRUCache.prototype.clear = function() {\n  this.count_ = 0;\n  this.entries_ = {};\n  this.oldest_ = null;\n  this.newest_ = null;\n  this.dispatchEvent(ol.events.EventType.CLEAR);\n};\n\n\n/**\n * @param {string} key Key.\n * @return {boolean} Contains key.\n */\nol.structs.LRUCache.prototype.containsKey = function(key) {\n  return this.entries_.hasOwnProperty(key);\n};\n\n\n/**\n * @param {function(this: S, T, string, ol.structs.LRUCache): ?} f The function\n *     to call for every entry from the oldest to the newer. This function takes\n *     3 arguments (the entry value, the entry key and the LRUCache object).\n *     The return value is ignored.\n * @param {S=} opt_this The object to use as `this` in `f`.\n * @template S\n */\nol.structs.LRUCache.prototype.forEach = function(f, opt_this) {\n  var entry = this.oldest_;\n  while (entry) {\n    f.call(opt_this, entry.value_, entry.key_, this);\n    entry = entry.newer;\n  }\n};\n\n\n/**\n * @param {string} key Key.\n * @return {T} Value.\n */\nol.structs.LRUCache.prototype.get = function(key) {\n  var entry = this.entries_[key];\n  ol.asserts.assert(entry !== undefined,\n      15); // Tried to get a value for a key that does not exist in the cache\n  if (entry === this.newest_) {\n    return entry.value_;\n  } else if (entry === this.oldest_) {\n    this.oldest_ = /** @type {ol.LRUCacheEntry} */ (this.oldest_.newer);\n    this.oldest_.older = null;\n  } else {\n    entry.newer.older = entry.older;\n    entry.older.newer = entry.newer;\n  }\n  entry.newer = null;\n  entry.older = this.newest_;\n  this.newest_.newer = entry;\n  this.newest_ = entry;\n  return entry.value_;\n};\n\n\n/**\n * Remove an entry from the cache.\n * @param {string} key The entry key.\n * @return {T} The removed entry.\n */\nol.structs.LRUCache.prototype.remove = function(key) {\n  var entry = this.entries_[key];\n  ol.asserts.assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n  if (entry === this.newest_) {\n    this.newest_ = /** @type {ol.LRUCacheEntry} */ (entry.older);\n    if (this.newest_) {\n      this.newest_.newer = null;\n    }\n  } else if (entry === this.oldest_) {\n    this.oldest_ = /** @type {ol.LRUCacheEntry} */ (entry.newer);\n    if (this.oldest_) {\n      this.oldest_.older = null;\n    }\n  } else {\n    entry.newer.older = entry.older;\n    entry.older.newer = entry.newer;\n  }\n  delete this.entries_[key];\n  --this.count_;\n  return entry.value_;\n};\n\n\n/**\n * @return {number} Count.\n */\nol.structs.LRUCache.prototype.getCount = function() {\n  return this.count_;\n};\n\n\n/**\n * @return {Array.<string>} Keys.\n */\nol.structs.LRUCache.prototype.getKeys = function() {\n  var keys = new Array(this.count_);\n  var i = 0;\n  var entry;\n  for (entry = this.newest_; entry; entry = entry.older) {\n    keys[i++] = entry.key_;\n  }\n  return keys;\n};\n\n\n/**\n * @return {Array.<T>} Values.\n */\nol.structs.LRUCache.prototype.getValues = function() {\n  var values = new Array(this.count_);\n  var i = 0;\n  var entry;\n  for (entry = this.newest_; entry; entry = entry.older) {\n    values[i++] = entry.value_;\n  }\n  return values;\n};\n\n\n/**\n * @return {T} Last value.\n */\nol.structs.LRUCache.prototype.peekLast = function() {\n  return this.oldest_.value_;\n};\n\n\n/**\n * @return {string} Last key.\n */\nol.structs.LRUCache.prototype.peekLastKey = function() {\n  return this.oldest_.key_;\n};\n\n\n/**\n * Get the key of the newest item in the cache.  Throws if the cache is empty.\n * @return {string} The newest key.\n */\nol.structs.LRUCache.prototype.peekFirstKey = function() {\n  return this.newest_.key_;\n};\n\n\n/**\n * @return {T} value Value.\n */\nol.structs.LRUCache.prototype.pop = function() {\n  var entry = this.oldest_;\n  delete this.entries_[entry.key_];\n  if (entry.newer) {\n    entry.newer.older = null;\n  }\n  this.oldest_ = /** @type {ol.LRUCacheEntry} */ (entry.newer);\n  if (!this.oldest_) {\n    this.newest_ = null;\n  }\n  --this.count_;\n  return entry.value_;\n};\n\n\n/**\n * @param {string} key Key.\n * @param {T} value Value.\n */\nol.structs.LRUCache.prototype.replace = function(key, value) {\n  this.get(key);  // update `newest_`\n  this.entries_[key].value_ = value;\n};\n\n\n/**\n * @param {string} key Key.\n * @param {T} value Value.\n */\nol.structs.LRUCache.prototype.set = function(key, value) {\n  ol.asserts.assert(!(key in this.entries_),\n      16); // Tried to set a value for a key that is used already\n  var entry = /** @type {ol.LRUCacheEntry} */ ({\n    key_: key,\n    newer: null,\n    older: this.newest_,\n    value_: value\n  });\n  if (!this.newest_) {\n    this.oldest_ = entry;\n  } else {\n    this.newest_.newer = entry;\n  }\n  this.newest_ = entry;\n  this.entries_[key] = entry;\n  ++this.count_;\n};\n\n\n/**\n * Prune the cache.\n */\nol.structs.LRUCache.prototype.prune = function() {\n  while (this.canExpireCache()) {\n    this.pop();\n  }\n};\n\ngoog.provide('ol.render.canvas');\n\n\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.obj');\ngoog.require('ol.structs.LRUCache');\ngoog.require('ol.transform');\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.canvas.defaultFont = '10px sans-serif';\n\n\n/**\n * @const\n * @type {ol.Color}\n */\nol.render.canvas.defaultFillStyle = [0, 0, 0, 1];\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.canvas.defaultLineCap = 'round';\n\n\n/**\n * @const\n * @type {Array.<number>}\n */\nol.render.canvas.defaultLineDash = [];\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.canvas.defaultLineDashOffset = 0;\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.canvas.defaultLineJoin = 'round';\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.canvas.defaultMiterLimit = 10;\n\n\n/**\n * @const\n * @type {ol.Color}\n */\nol.render.canvas.defaultStrokeStyle = [0, 0, 0, 1];\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.canvas.defaultTextAlign = 'center';\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.canvas.defaultTextBaseline = 'middle';\n\n\n/**\n * @const\n * @type {Array.<number>}\n */\nol.render.canvas.defaultPadding = [0, 0, 0, 0];\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.canvas.defaultLineWidth = 1;\n\n\n/**\n * @type {ol.structs.LRUCache.<HTMLCanvasElement>}\n */\nol.render.canvas.labelCache = new ol.structs.LRUCache();\n\n\n/**\n * @type {!Object.<string, number>}\n */\nol.render.canvas.checkedFonts_ = {};\n\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nol.render.canvas.measureContext_ = null;\n\n\n/**\n * @type {!Object.<string, number>}\n */\nol.render.canvas.textHeights_ = {};\n\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nol.render.canvas.checkFont = (function() {\n  var retries = 60;\n  var checked = ol.render.canvas.checkedFonts_;\n  var labelCache = ol.render.canvas.labelCache;\n  var font = '32px monospace';\n  var text = 'wmytzilWMYTZIL@#/&?$%10';\n  var interval, referenceWidth;\n\n  function isAvailable(fontFamily) {\n    var context = ol.render.canvas.getMeasureContext();\n    context.font = font;\n    referenceWidth = context.measureText(text).width;\n    var available = true;\n    if (fontFamily != 'monospace') {\n      context.font = '32px ' + fontFamily + ',monospace';\n      var width = context.measureText(text).width;\n      // If width and referenceWidth are the same, then the 'monospace'\n      // fallback was used instead of the font we wanted, so the font is not\n      // available.\n      available = width != referenceWidth;\n    }\n    return available;\n  }\n\n  function check() {\n    var done = true;\n    for (var font in checked) {\n      if (checked[font] < retries) {\n        if (isAvailable(font)) {\n          checked[font] = retries;\n          ol.obj.clear(ol.render.canvas.textHeights_);\n          // Make sure that loaded fonts are picked up by Safari\n          ol.render.canvas.measureContext_ = null;\n          labelCache.clear();\n        } else {\n          ++checked[font];\n          done = false;\n        }\n      }\n    }\n    if (done) {\n      window.clearInterval(interval);\n      interval = undefined;\n    }\n  }\n\n  return function(fontSpec) {\n    var fontFamilies = ol.css.getFontFamilies(fontSpec);\n    if (!fontFamilies) {\n      return;\n    }\n    for (var i = 0, ii = fontFamilies.length; i < ii; ++i) {\n      var fontFamily = fontFamilies[i];\n      if (!(fontFamily in checked)) {\n        checked[fontFamily] = retries;\n        if (!isAvailable(fontFamily)) {\n          checked[fontFamily] = 0;\n          if (interval === undefined) {\n            interval = window.setInterval(check, 32);\n          }\n        }\n      }\n    }\n  };\n})();\n\n\n/**\n * @return {CanvasRenderingContext2D} Measure context.\n */\nol.render.canvas.getMeasureContext = function() {\n  var context = ol.render.canvas.measureContext_;\n  if (!context) {\n    context = ol.render.canvas.measureContext_ = ol.dom.createCanvasContext2D(1, 1);\n  }\n  return context;\n};\n\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {ol.Size} Measurement.\n */\nol.render.canvas.measureTextHeight = (function() {\n  var span;\n  var heights = ol.render.canvas.textHeights_;\n  return function(font) {\n    var height = heights[font];\n    if (height == undefined) {\n      if (!span) {\n        span = document.createElement('span');\n        span.textContent = 'M';\n        span.style.margin = span.style.padding = '0 !important';\n        span.style.position = 'absolute !important';\n        span.style.left = '-99999px !important';\n      }\n      span.style.font = font;\n      document.body.appendChild(span);\n      height = heights[font] = span.offsetHeight;\n      document.body.removeChild(span);\n    }\n    return height;\n  };\n})();\n\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nol.render.canvas.measureTextWidth = function(font, text) {\n  var measureContext = ol.render.canvas.getMeasureContext();\n  if (font != measureContext.font) {\n    measureContext.font = font;\n  }\n  return measureContext.measureText(text).width;\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nol.render.canvas.rotateAtOffset = function(context, rotation, offsetX, offsetY) {\n  if (rotation !== 0) {\n    context.translate(offsetX, offsetY);\n    context.rotate(rotation);\n    context.translate(-offsetX, -offsetY);\n  }\n};\n\n\nol.render.canvas.resetTransform_ = ol.transform.create();\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} scale Scale.\n */\nol.render.canvas.drawImage = function(context,\n    transform, opacity, image, originX, originY, w, h, x, y, scale) {\n  var alpha;\n  if (opacity != 1) {\n    alpha = context.globalAlpha;\n    context.globalAlpha = alpha * opacity;\n  }\n  if (transform) {\n    context.setTransform.apply(context, transform);\n  }\n\n  context.drawImage(image, originX, originY, w, h, x, y, w * scale, h * scale);\n\n  if (alpha) {\n    context.globalAlpha = alpha;\n  }\n  if (transform) {\n    context.setTransform.apply(context, ol.render.canvas.resetTransform_);\n  }\n};\n\ngoog.provide('ol.color');\n\ngoog.require('ol.asserts');\ngoog.require('ol.math');\n\n\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nol.color.HEX_COLOR_RE_ = /^#(?:[0-9a-f]{3,4}){1,2}$/i;\n\n\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nol.color.NAMED_COLOR_RE_ = /^([a-z]*)$/i;\n\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {ol.Color|string} color Color.\n * @return {ol.Color} Color.\n * @api\n */\nol.color.asArray = function(color) {\n  if (Array.isArray(color)) {\n    return color;\n  } else {\n    return ol.color.fromString(/** @type {string} */ (color));\n  }\n};\n\n\n/**\n * Return the color as an rgba string.\n * @param {ol.Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nol.color.asString = function(color) {\n  if (typeof color === 'string') {\n    return color;\n  } else {\n    return ol.color.toString(color);\n  }\n};\n\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nol.color.fromNamed = function(color) {\n  var el = document.createElement('div');\n  el.style.color = color;\n  document.body.appendChild(el);\n  var rgb = getComputedStyle(el).color;\n  document.body.removeChild(el);\n  return rgb;\n};\n\n\n/**\n * @param {string} s String.\n * @return {ol.Color} Color.\n */\nol.color.fromString = (\n  function() {\n\n    // We maintain a small cache of parsed strings.  To provide cheap LRU-like\n    // semantics, whenever the cache grows too large we simply delete an\n    // arbitrary 25% of the entries.\n\n    /**\n     * @const\n     * @type {number}\n     */\n    var MAX_CACHE_SIZE = 1024;\n\n    /**\n     * @type {Object.<string, ol.Color>}\n     */\n    var cache = {};\n\n    /**\n     * @type {number}\n     */\n    var cacheSize = 0;\n\n    return (\n      /**\n       * @param {string} s String.\n       * @return {ol.Color} Color.\n       */\n      function(s) {\n        var color;\n        if (cache.hasOwnProperty(s)) {\n          color = cache[s];\n        } else {\n          if (cacheSize >= MAX_CACHE_SIZE) {\n            var i = 0;\n            var key;\n            for (key in cache) {\n              if ((i++ & 3) === 0) {\n                delete cache[key];\n                --cacheSize;\n              }\n            }\n          }\n          color = ol.color.fromStringInternal_(s);\n          cache[s] = color;\n          ++cacheSize;\n        }\n        return color;\n      });\n\n  })();\n\n\n/**\n * @param {string} s String.\n * @private\n * @return {ol.Color} Color.\n */\nol.color.fromStringInternal_ = function(s) {\n  var r, g, b, a, color, parts;\n\n  if (ol.color.NAMED_COLOR_RE_.exec(s)) {\n    s = ol.color.fromNamed(s);\n  }\n\n  if (ol.color.HEX_COLOR_RE_.exec(s)) { // hex\n    var n = s.length - 1; // number of hex digits\n    var d; // number of digits per channel\n    if (n <= 4) {\n      d = 1;\n    } else {\n      d = 2;\n    }\n    var hasAlpha = n === 4 || n === 8;\n    r = parseInt(s.substr(1 + 0 * d, d), 16);\n    g = parseInt(s.substr(1 + 1 * d, d), 16);\n    b = parseInt(s.substr(1 + 2 * d, d), 16);\n    if (hasAlpha) {\n      a = parseInt(s.substr(1 + 3 * d, d), 16);\n    } else {\n      a = 255;\n    }\n    if (d == 1) {\n      r = (r << 4) + r;\n      g = (g << 4) + g;\n      b = (b << 4) + b;\n      if (hasAlpha) {\n        a = (a << 4) + a;\n      }\n    }\n    color = [r, g, b, a / 255];\n  } else if (s.indexOf('rgba(') == 0) { // rgba()\n    parts = s.slice(5, -1).split(',').map(Number);\n    color = ol.color.normalize(parts);\n  } else if (s.indexOf('rgb(') == 0) { // rgb()\n    parts = s.slice(4, -1).split(',').map(Number);\n    parts.push(1);\n    color = ol.color.normalize(parts);\n  } else {\n    ol.asserts.assert(false, 14); // Invalid color\n  }\n  return /** @type {ol.Color} */ (color);\n};\n\n\n/**\n * @param {ol.Color} color Color.\n * @param {ol.Color=} opt_color Color.\n * @return {ol.Color} Clamped color.\n */\nol.color.normalize = function(color, opt_color) {\n  var result = opt_color || [];\n  result[0] = ol.math.clamp((color[0] + 0.5) | 0, 0, 255);\n  result[1] = ol.math.clamp((color[1] + 0.5) | 0, 0, 255);\n  result[2] = ol.math.clamp((color[2] + 0.5) | 0, 0, 255);\n  result[3] = ol.math.clamp(color[3], 0, 1);\n  return result;\n};\n\n\n/**\n * @param {ol.Color} color Color.\n * @return {string} String.\n */\nol.color.toString = function(color) {\n  var r = color[0];\n  if (r != (r | 0)) {\n    r = (r + 0.5) | 0;\n  }\n  var g = color[1];\n  if (g != (g | 0)) {\n    g = (g + 0.5) | 0;\n  }\n  var b = color[2];\n  if (b != (b | 0)) {\n    b = (b + 0.5) | 0;\n  }\n  var a = color[3] === undefined ? 1 : color[3];\n  return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n};\n\ngoog.provide('ol.colorlike');\n\ngoog.require('ol.color');\n\n\n/**\n * @param {ol.Color|ol.ColorLike} color Color.\n * @return {ol.ColorLike} The color as an ol.ColorLike\n * @api\n */\nol.colorlike.asColorLike = function(color) {\n  if (ol.colorlike.isColorLike(color)) {\n    return /** @type {string|CanvasPattern|CanvasGradient} */ (color);\n  } else {\n    return ol.color.asString(/** @type {ol.Color} */ (color));\n  }\n};\n\n\n/**\n * @param {?} color The value that is potentially an ol.ColorLike\n * @return {boolean} Whether the color is an ol.ColorLike\n */\nol.colorlike.isColorLike = function(color) {\n  return (\n    typeof color === 'string' ||\n    color instanceof CanvasPattern ||\n    color instanceof CanvasGradient\n  );\n};\n\ngoog.provide('ol.render.VectorContext');\n\n\n/**\n * Context for drawing geometries.  A vector context is available on render\n * events and does not need to be constructed directly.\n * @constructor\n * @abstract\n * @struct\n * @api\n */\nol.render.VectorContext = function() {\n};\n\n\n/**\n * Render a geometry with a custom renderer.\n *\n * @param {ol.geom.SimpleGeometry} geometry Geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {Function} renderer Renderer.\n */\nol.render.VectorContext.prototype.drawCustom = function(geometry, feature, renderer) {};\n\n\n/**\n * Render a geometry.\n *\n * @param {ol.geom.Geometry} geometry The geometry to render.\n */\nol.render.VectorContext.prototype.drawGeometry = function(geometry) {};\n\n\n/**\n * Set the rendering style.\n *\n * @param {ol.style.Style} style The rendering style.\n */\nol.render.VectorContext.prototype.setStyle = function(style) {};\n\n\n/**\n * @param {ol.geom.Circle} circleGeometry Circle geometry.\n * @param {ol.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawCircle = function(circleGeometry, feature) {};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @param {ol.style.Style} style Style.\n */\nol.render.VectorContext.prototype.drawFeature = function(feature, style) {};\n\n\n/**\n * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry\n *     collection.\n * @param {ol.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawGeometryCollection = function(geometryCollectionGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.LineString|ol.render.Feature} lineStringGeometry Line\n *     string geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawLineString = function(lineStringGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.MultiLineString|ol.render.Feature} multiLineStringGeometry\n *     MultiLineString geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.MultiPoint|ol.render.Feature} multiPointGeometry MultiPoint\n *     geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawMultiPoint = function(multiPointGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.Point|ol.render.Feature} pointGeometry Point geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawPoint = function(pointGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.Polygon|ol.render.Feature} polygonGeometry Polygon\n *     geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawPolygon = function(polygonGeometry, feature) {};\n\n\n/**\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.VectorContext.prototype.drawText = function(geometry, feature) {};\n\n\n/**\n * @param {ol.style.Fill} fillStyle Fill style.\n * @param {ol.style.Stroke} strokeStyle Stroke style.\n */\nol.render.VectorContext.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {};\n\n\n/**\n * @param {ol.style.Image} imageStyle Image style.\n * @param {ol.DeclutterGroup=} opt_declutterGroup Declutter.\n */\nol.render.VectorContext.prototype.setImageStyle = function(imageStyle, opt_declutterGroup) {};\n\n\n/**\n * @param {ol.style.Text} textStyle Text style.\n * @param {ol.DeclutterGroup=} opt_declutterGroup Declutter.\n */\nol.render.VectorContext.prototype.setTextStyle = function(textStyle, opt_declutterGroup) {};\n\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol.geom.flat.transform.transform2D?\n\ngoog.provide('ol.render.canvas.Immediate');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.colorlike');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.has');\ngoog.require('ol.render.VectorContext');\ngoog.require('ol.render.canvas');\ngoog.require('ol.transform');\n\n\n/**\n * @classdesc\n * A concrete subclass of {@link ol.render.VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link ol.render.Event} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n *\n * @constructor\n * @extends {ol.render.VectorContext}\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.Extent} extent Extent.\n * @param {ol.Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @struct\n */\nol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, viewRotation) {\n  ol.render.VectorContext.call(this);\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context_ = context;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelRatio_ = pixelRatio;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = extent;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.transform_ = transform;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.viewRotation_ = viewRotation;\n\n  /**\n   * @private\n   * @type {?ol.CanvasFillState}\n   */\n  this.contextFillState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasStrokeState}\n   */\n  this.contextStrokeState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasTextState}\n   */\n  this.contextTextState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasFillState}\n   */\n  this.fillState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasStrokeState}\n   */\n  this.strokeState_ = null;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement|HTMLVideoElement|Image}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageAnchorX_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageAnchorY_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageHeight_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageOpacity_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageOriginX_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageOriginY_ = 0;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.imageRotateWithView_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageRotation_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageScale_ = 0;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.imageSnapToPixel_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.imageWidth_ = 0;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.text_ = '';\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textOffsetX_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textOffsetY_ = 0;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.textRotateWithView_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textRotation_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textScale_ = 0;\n\n  /**\n   * @private\n   * @type {?ol.CanvasFillState}\n   */\n  this.textFillState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasStrokeState}\n   */\n  this.textStrokeState_ = null;\n\n  /**\n   * @private\n   * @type {?ol.CanvasTextState}\n   */\n  this.textState_ = null;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.pixelCoordinates_ = [];\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.tmpLocalTransform_ = ol.transform.create();\n\n};\nol.inherits(ol.render.canvas.Immediate, ol.render.VectorContext);\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\nol.render.canvas.Immediate.prototype.drawImages_ = function(flatCoordinates, offset, end, stride) {\n  if (!this.image_) {\n    return;\n  }\n  var pixelCoordinates = ol.geom.flat.transform.transform2D(\n      flatCoordinates, offset, end, 2, this.transform_,\n      this.pixelCoordinates_);\n  var context = this.context_;\n  var localTransform = this.tmpLocalTransform_;\n  var alpha = context.globalAlpha;\n  if (this.imageOpacity_ != 1) {\n    context.globalAlpha = alpha * this.imageOpacity_;\n  }\n  var rotation = this.imageRotation_;\n  if (this.imageRotateWithView_) {\n    rotation += this.viewRotation_;\n  }\n  var i, ii;\n  for (i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n    var x = pixelCoordinates[i] - this.imageAnchorX_;\n    var y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n    if (this.imageSnapToPixel_) {\n      x = Math.round(x);\n      y = Math.round(y);\n    }\n    if (rotation !== 0 || this.imageScale_ != 1) {\n      var centerX = x + this.imageAnchorX_;\n      var centerY = y + this.imageAnchorY_;\n      ol.transform.compose(localTransform,\n          centerX, centerY,\n          this.imageScale_, this.imageScale_,\n          rotation,\n          -centerX, -centerY);\n      context.setTransform.apply(context, localTransform);\n    }\n    context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_,\n        this.imageWidth_, this.imageHeight_, x, y,\n        this.imageWidth_, this.imageHeight_);\n  }\n  if (rotation !== 0 || this.imageScale_ != 1) {\n    context.setTransform(1, 0, 0, 1, 0, 0);\n  }\n  if (this.imageOpacity_ != 1) {\n    context.globalAlpha = alpha;\n  }\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\nol.render.canvas.Immediate.prototype.drawText_ = function(flatCoordinates, offset, end, stride) {\n  if (!this.textState_ || this.text_ === '') {\n    return;\n  }\n  if (this.textFillState_) {\n    this.setContextFillState_(this.textFillState_);\n  }\n  if (this.textStrokeState_) {\n    this.setContextStrokeState_(this.textStrokeState_);\n  }\n  this.setContextTextState_(this.textState_);\n  var pixelCoordinates = ol.geom.flat.transform.transform2D(\n      flatCoordinates, offset, end, stride, this.transform_,\n      this.pixelCoordinates_);\n  var context = this.context_;\n  var rotation = this.textRotation_;\n  if (this.textRotateWithView_) {\n    rotation += this.viewRotation_;\n  }\n  for (; offset < end; offset += stride) {\n    var x = pixelCoordinates[offset] + this.textOffsetX_;\n    var y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n    if (rotation !== 0 || this.textScale_ != 1) {\n      var localTransform = ol.transform.compose(this.tmpLocalTransform_,\n          x, y,\n          this.textScale_, this.textScale_,\n          rotation,\n          -x, -y);\n      context.setTransform.apply(context, localTransform);\n    }\n    if (this.textStrokeState_) {\n      context.strokeText(this.text_, x, y);\n    }\n    if (this.textFillState_) {\n      context.fillText(this.text_, x, y);\n    }\n  }\n  if (rotation !== 0 || this.textScale_ != 1) {\n    context.setTransform(1, 0, 0, 1, 0, 0);\n  }\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} close Close.\n * @private\n * @return {number} end End.\n */\nol.render.canvas.Immediate.prototype.moveToLineTo_ = function(flatCoordinates, offset, end, stride, close) {\n  var context = this.context_;\n  var pixelCoordinates = ol.geom.flat.transform.transform2D(\n      flatCoordinates, offset, end, stride, this.transform_,\n      this.pixelCoordinates_);\n  context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n  var length = pixelCoordinates.length;\n  if (close) {\n    length -= 2;\n  }\n  for (var i = 2; i < length; i += 2) {\n    context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n  }\n  if (close) {\n    context.closePath();\n  }\n  return end;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\nol.render.canvas.Immediate.prototype.drawRings_ = function(flatCoordinates, offset, ends, stride) {\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    offset = this.moveToLineTo_(\n        flatCoordinates, offset, ends[i], stride, true);\n  }\n  return offset;\n};\n\n\n/**\n * Render a circle geometry into the canvas.  Rendering is immediate and uses\n * the current fill and stroke styles.\n *\n * @param {ol.geom.Circle} geometry Circle geometry.\n * @override\n * @api\n */\nol.render.canvas.Immediate.prototype.drawCircle = function(geometry) {\n  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  if (this.fillState_ || this.strokeState_) {\n    if (this.fillState_) {\n      this.setContextFillState_(this.fillState_);\n    }\n    if (this.strokeState_) {\n      this.setContextStrokeState_(this.strokeState_);\n    }\n    var pixelCoordinates = ol.geom.SimpleGeometry.transform2D(\n        geometry, this.transform_, this.pixelCoordinates_);\n    var dx = pixelCoordinates[2] - pixelCoordinates[0];\n    var dy = pixelCoordinates[3] - pixelCoordinates[1];\n    var radius = Math.sqrt(dx * dx + dy * dy);\n    var context = this.context_;\n    context.beginPath();\n    context.arc(\n        pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);\n    if (this.fillState_) {\n      context.fill();\n    }\n    if (this.strokeState_) {\n      context.stroke();\n    }\n  }\n  if (this.text_ !== '') {\n    this.drawText_(geometry.getCenter(), 0, 2, 2);\n  }\n};\n\n\n/**\n * Set the rendering style.  Note that since this is an immediate rendering API,\n * any `zIndex` on the provided style will be ignored.\n *\n * @param {ol.style.Style} style The rendering style.\n * @override\n * @api\n */\nol.render.canvas.Immediate.prototype.setStyle = function(style) {\n  this.setFillStrokeStyle(style.getFill(), style.getStroke());\n  this.setImageStyle(style.getImage());\n  this.setTextStyle(style.getText());\n};\n\n\n/**\n * Render a geometry into the canvas.  Call\n * {@link ol.render.canvas.Immediate#setStyle} first to set the rendering style.\n *\n * @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.\n * @override\n * @api\n */\nol.render.canvas.Immediate.prototype.drawGeometry = function(geometry) {\n  var type = geometry.getType();\n  switch (type) {\n    case ol.geom.GeometryType.POINT:\n      this.drawPoint(/** @type {ol.geom.Point} */ (geometry));\n      break;\n    case ol.geom.GeometryType.LINE_STRING:\n      this.drawLineString(/** @type {ol.geom.LineString} */ (geometry));\n      break;\n    case ol.geom.GeometryType.POLYGON:\n      this.drawPolygon(/** @type {ol.geom.Polygon} */ (geometry));\n      break;\n    case ol.geom.GeometryType.MULTI_POINT:\n      this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry));\n      break;\n    case ol.geom.GeometryType.MULTI_LINE_STRING:\n      this.drawMultiLineString(/** @type {ol.geom.MultiLineString} */ (geometry));\n      break;\n    case ol.geom.GeometryType.MULTI_POLYGON:\n      this.drawMultiPolygon(/** @type {ol.geom.MultiPolygon} */ (geometry));\n      break;\n    case ol.geom.GeometryType.GEOMETRY_COLLECTION:\n      this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry));\n      break;\n    case ol.geom.GeometryType.CIRCLE:\n      this.drawCircle(/** @type {ol.geom.Circle} */ (geometry));\n      break;\n    default:\n  }\n};\n\n\n/**\n * Render a feature into the canvas.  Note that any `zIndex` on the provided\n * style will be ignored - features are rendered immediately in the order that\n * this method is called.  If you need `zIndex` support, you should be using an\n * {@link ol.layer.Vector} instead.\n *\n * @param {ol.Feature} feature Feature.\n * @param {ol.style.Style} style Style.\n * @override\n * @api\n */\nol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {\n  var geometry = style.getGeometryFunction()(feature);\n  if (!geometry ||\n      !ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  this.setStyle(style);\n  this.drawGeometry(geometry);\n};\n\n\n/**\n * Render a GeometryCollection to the canvas.  Rendering is immediate and\n * uses the current styles appropriate for each geometry in the collection.\n *\n * @param {ol.geom.GeometryCollection} geometry Geometry collection.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawGeometryCollection = function(geometry) {\n  var geometries = geometry.getGeometriesArray();\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    this.drawGeometry(geometries[i]);\n  }\n};\n\n\n/**\n * Render a Point geometry into the canvas.  Rendering is immediate and uses\n * the current style.\n *\n * @param {ol.geom.Point|ol.render.Feature} geometry Point geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawPoint = function(geometry) {\n  var flatCoordinates = geometry.getFlatCoordinates();\n  var stride = geometry.getStride();\n  if (this.image_) {\n    this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n  }\n  if (this.text_ !== '') {\n    this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n  }\n};\n\n\n/**\n * Render a MultiPoint geometry  into the canvas.  Rendering is immediate and\n * uses the current style.\n *\n * @param {ol.geom.MultiPoint|ol.render.Feature} geometry MultiPoint geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawMultiPoint = function(geometry) {\n  var flatCoordinates = geometry.getFlatCoordinates();\n  var stride = geometry.getStride();\n  if (this.image_) {\n    this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n  }\n  if (this.text_ !== '') {\n    this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n  }\n};\n\n\n/**\n * Render a LineString into the canvas.  Rendering is immediate and uses\n * the current style.\n *\n * @param {ol.geom.LineString|ol.render.Feature} geometry LineString geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawLineString = function(geometry) {\n  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  if (this.strokeState_) {\n    this.setContextStrokeState_(this.strokeState_);\n    var context = this.context_;\n    var flatCoordinates = geometry.getFlatCoordinates();\n    context.beginPath();\n    this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length,\n        geometry.getStride(), false);\n    context.stroke();\n  }\n  if (this.text_ !== '') {\n    var flatMidpoint = geometry.getFlatMidpoint();\n    this.drawText_(flatMidpoint, 0, 2, 2);\n  }\n};\n\n\n/**\n * Render a MultiLineString geometry into the canvas.  Rendering is immediate\n * and uses the current style.\n *\n * @param {ol.geom.MultiLineString|ol.render.Feature} geometry MultiLineString\n *     geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawMultiLineString = function(geometry) {\n  var geometryExtent = geometry.getExtent();\n  if (!ol.extent.intersects(this.extent_, geometryExtent)) {\n    return;\n  }\n  if (this.strokeState_) {\n    this.setContextStrokeState_(this.strokeState_);\n    var context = this.context_;\n    var flatCoordinates = geometry.getFlatCoordinates();\n    var offset = 0;\n    var ends = geometry.getEnds();\n    var stride = geometry.getStride();\n    context.beginPath();\n    var i, ii;\n    for (i = 0, ii = ends.length; i < ii; ++i) {\n      offset = this.moveToLineTo_(\n          flatCoordinates, offset, ends[i], stride, false);\n    }\n    context.stroke();\n  }\n  if (this.text_ !== '') {\n    var flatMidpoints = geometry.getFlatMidpoints();\n    this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n  }\n};\n\n\n/**\n * Render a Polygon geometry into the canvas.  Rendering is immediate and uses\n * the current style.\n *\n * @param {ol.geom.Polygon|ol.render.Feature} geometry Polygon geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawPolygon = function(geometry) {\n  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  if (this.strokeState_ || this.fillState_) {\n    if (this.fillState_) {\n      this.setContextFillState_(this.fillState_);\n    }\n    if (this.strokeState_) {\n      this.setContextStrokeState_(this.strokeState_);\n    }\n    var context = this.context_;\n    context.beginPath();\n    this.drawRings_(geometry.getOrientedFlatCoordinates(),\n        0, geometry.getEnds(), geometry.getStride());\n    if (this.fillState_) {\n      context.fill();\n    }\n    if (this.strokeState_) {\n      context.stroke();\n    }\n  }\n  if (this.text_ !== '') {\n    var flatInteriorPoint = geometry.getFlatInteriorPoint();\n    this.drawText_(flatInteriorPoint, 0, 2, 2);\n  }\n};\n\n\n/**\n * Render MultiPolygon geometry into the canvas.  Rendering is immediate and\n * uses the current style.\n * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.\n * @override\n */\nol.render.canvas.Immediate.prototype.drawMultiPolygon = function(geometry) {\n  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  if (this.strokeState_ || this.fillState_) {\n    if (this.fillState_) {\n      this.setContextFillState_(this.fillState_);\n    }\n    if (this.strokeState_) {\n      this.setContextStrokeState_(this.strokeState_);\n    }\n    var context = this.context_;\n    var flatCoordinates = geometry.getOrientedFlatCoordinates();\n    var offset = 0;\n    var endss = geometry.getEndss();\n    var stride = geometry.getStride();\n    var i, ii;\n    context.beginPath();\n    for (i = 0, ii = endss.length; i < ii; ++i) {\n      var ends = endss[i];\n      offset = this.drawRings_(flatCoordinates, offset, ends, stride);\n    }\n    if (this.fillState_) {\n      context.fill();\n    }\n    if (this.strokeState_) {\n      context.stroke();\n    }\n  }\n  if (this.text_ !== '') {\n    var flatInteriorPoints = geometry.getFlatInteriorPoints();\n    this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n  }\n};\n\n\n/**\n * @param {ol.CanvasFillState} fillState Fill state.\n * @private\n */\nol.render.canvas.Immediate.prototype.setContextFillState_ = function(fillState) {\n  var context = this.context_;\n  var contextFillState = this.contextFillState_;\n  if (!contextFillState) {\n    context.fillStyle = fillState.fillStyle;\n    this.contextFillState_ = {\n      fillStyle: fillState.fillStyle\n    };\n  } else {\n    if (contextFillState.fillStyle != fillState.fillStyle) {\n      contextFillState.fillStyle = context.fillStyle = fillState.fillStyle;\n    }\n  }\n};\n\n\n/**\n * @param {ol.CanvasStrokeState} strokeState Stroke state.\n * @private\n */\nol.render.canvas.Immediate.prototype.setContextStrokeState_ = function(strokeState) {\n  var context = this.context_;\n  var contextStrokeState = this.contextStrokeState_;\n  if (!contextStrokeState) {\n    context.lineCap = strokeState.lineCap;\n    if (ol.has.CANVAS_LINE_DASH) {\n      context.setLineDash(strokeState.lineDash);\n      context.lineDashOffset = strokeState.lineDashOffset;\n    }\n    context.lineJoin = strokeState.lineJoin;\n    context.lineWidth = strokeState.lineWidth;\n    context.miterLimit = strokeState.miterLimit;\n    context.strokeStyle = strokeState.strokeStyle;\n    this.contextStrokeState_ = {\n      lineCap: strokeState.lineCap,\n      lineDash: strokeState.lineDash,\n      lineDashOffset: strokeState.lineDashOffset,\n      lineJoin: strokeState.lineJoin,\n      lineWidth: strokeState.lineWidth,\n      miterLimit: strokeState.miterLimit,\n      strokeStyle: strokeState.strokeStyle\n    };\n  } else {\n    if (contextStrokeState.lineCap != strokeState.lineCap) {\n      contextStrokeState.lineCap = context.lineCap = strokeState.lineCap;\n    }\n    if (ol.has.CANVAS_LINE_DASH) {\n      if (!ol.array.equals(\n          contextStrokeState.lineDash, strokeState.lineDash)) {\n        context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash);\n      }\n      if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n        contextStrokeState.lineDashOffset = context.lineDashOffset =\n            strokeState.lineDashOffset;\n      }\n    }\n    if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n      contextStrokeState.lineJoin = context.lineJoin = strokeState.lineJoin;\n    }\n    if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n      contextStrokeState.lineWidth = context.lineWidth = strokeState.lineWidth;\n    }\n    if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n      contextStrokeState.miterLimit = context.miterLimit =\n          strokeState.miterLimit;\n    }\n    if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n      contextStrokeState.strokeStyle = context.strokeStyle =\n          strokeState.strokeStyle;\n    }\n  }\n};\n\n\n/**\n * @param {ol.CanvasTextState} textState Text state.\n * @private\n */\nol.render.canvas.Immediate.prototype.setContextTextState_ = function(textState) {\n  var context = this.context_;\n  var contextTextState = this.contextTextState_;\n  var textAlign = textState.textAlign ?\n    textState.textAlign : ol.render.canvas.defaultTextAlign;\n  if (!contextTextState) {\n    context.font = textState.font;\n    context.textAlign = textAlign;\n    context.textBaseline = textState.textBaseline;\n    this.contextTextState_ = {\n      font: textState.font,\n      textAlign: textAlign,\n      textBaseline: textState.textBaseline\n    };\n  } else {\n    if (contextTextState.font != textState.font) {\n      contextTextState.font = context.font = textState.font;\n    }\n    if (contextTextState.textAlign != textAlign) {\n      contextTextState.textAlign = textAlign;\n    }\n    if (contextTextState.textBaseline != textState.textBaseline) {\n      contextTextState.textBaseline = context.textBaseline =\n          textState.textBaseline;\n    }\n  }\n};\n\n\n/**\n * Set the fill and stroke style for subsequent draw operations.  To clear\n * either fill or stroke styles, pass null for the appropriate parameter.\n *\n * @param {ol.style.Fill} fillStyle Fill style.\n * @param {ol.style.Stroke} strokeStyle Stroke style.\n * @override\n */\nol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  if (!fillStyle) {\n    this.fillState_ = null;\n  } else {\n    var fillStyleColor = fillStyle.getColor();\n    this.fillState_ = {\n      fillStyle: ol.colorlike.asColorLike(fillStyleColor ?\n        fillStyleColor : ol.render.canvas.defaultFillStyle)\n    };\n  }\n  if (!strokeStyle) {\n    this.strokeState_ = null;\n  } else {\n    var strokeStyleColor = strokeStyle.getColor();\n    var strokeStyleLineCap = strokeStyle.getLineCap();\n    var strokeStyleLineDash = strokeStyle.getLineDash();\n    var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n    var strokeStyleLineJoin = strokeStyle.getLineJoin();\n    var strokeStyleWidth = strokeStyle.getWidth();\n    var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n    this.strokeState_ = {\n      lineCap: strokeStyleLineCap !== undefined ?\n        strokeStyleLineCap : ol.render.canvas.defaultLineCap,\n      lineDash: strokeStyleLineDash ?\n        strokeStyleLineDash : ol.render.canvas.defaultLineDash,\n      lineDashOffset: strokeStyleLineDashOffset ?\n        strokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset,\n      lineJoin: strokeStyleLineJoin !== undefined ?\n        strokeStyleLineJoin : ol.render.canvas.defaultLineJoin,\n      lineWidth: this.pixelRatio_ * (strokeStyleWidth !== undefined ?\n        strokeStyleWidth : ol.render.canvas.defaultLineWidth),\n      miterLimit: strokeStyleMiterLimit !== undefined ?\n        strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit,\n      strokeStyle: ol.colorlike.asColorLike(strokeStyleColor ?\n        strokeStyleColor : ol.render.canvas.defaultStrokeStyle)\n    };\n  }\n};\n\n\n/**\n * Set the image style for subsequent draw operations.  Pass null to remove\n * the image style.\n *\n * @param {ol.style.Image} imageStyle Image style.\n * @override\n */\nol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) {\n  if (!imageStyle) {\n    this.image_ = null;\n  } else {\n    var imageAnchor = imageStyle.getAnchor();\n    // FIXME pixel ratio\n    var imageImage = imageStyle.getImage(1);\n    var imageOrigin = imageStyle.getOrigin();\n    var imageSize = imageStyle.getSize();\n    this.imageAnchorX_ = imageAnchor[0];\n    this.imageAnchorY_ = imageAnchor[1];\n    this.imageHeight_ = imageSize[1];\n    this.image_ = imageImage;\n    this.imageOpacity_ = imageStyle.getOpacity();\n    this.imageOriginX_ = imageOrigin[0];\n    this.imageOriginY_ = imageOrigin[1];\n    this.imageRotateWithView_ = imageStyle.getRotateWithView();\n    this.imageRotation_ = imageStyle.getRotation();\n    this.imageScale_ = imageStyle.getScale() * this.pixelRatio_;\n    this.imageSnapToPixel_ = imageStyle.getSnapToPixel();\n    this.imageWidth_ = imageSize[0];\n  }\n};\n\n\n/**\n * Set the text style for subsequent draw operations.  Pass null to\n * remove the text style.\n *\n * @param {ol.style.Text} textStyle Text style.\n * @override\n */\nol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) {\n  if (!textStyle) {\n    this.text_ = '';\n  } else {\n    var textFillStyle = textStyle.getFill();\n    if (!textFillStyle) {\n      this.textFillState_ = null;\n    } else {\n      var textFillStyleColor = textFillStyle.getColor();\n      this.textFillState_ = {\n        fillStyle: ol.colorlike.asColorLike(textFillStyleColor ?\n          textFillStyleColor : ol.render.canvas.defaultFillStyle)\n      };\n    }\n    var textStrokeStyle = textStyle.getStroke();\n    if (!textStrokeStyle) {\n      this.textStrokeState_ = null;\n    } else {\n      var textStrokeStyleColor = textStrokeStyle.getColor();\n      var textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n      var textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n      var textStrokeStyleLineDashOffset = textStrokeStyle.getLineDashOffset();\n      var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n      var textStrokeStyleWidth = textStrokeStyle.getWidth();\n      var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n      this.textStrokeState_ = {\n        lineCap: textStrokeStyleLineCap !== undefined ?\n          textStrokeStyleLineCap : ol.render.canvas.defaultLineCap,\n        lineDash: textStrokeStyleLineDash ?\n          textStrokeStyleLineDash : ol.render.canvas.defaultLineDash,\n        lineDashOffset: textStrokeStyleLineDashOffset ?\n          textStrokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset,\n        lineJoin: textStrokeStyleLineJoin !== undefined ?\n          textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin,\n        lineWidth: textStrokeStyleWidth !== undefined ?\n          textStrokeStyleWidth : ol.render.canvas.defaultLineWidth,\n        miterLimit: textStrokeStyleMiterLimit !== undefined ?\n          textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit,\n        strokeStyle: ol.colorlike.asColorLike(textStrokeStyleColor ?\n          textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle)\n      };\n    }\n    var textFont = textStyle.getFont();\n    var textOffsetX = textStyle.getOffsetX();\n    var textOffsetY = textStyle.getOffsetY();\n    var textRotateWithView = textStyle.getRotateWithView();\n    var textRotation = textStyle.getRotation();\n    var textScale = textStyle.getScale();\n    var textText = textStyle.getText();\n    var textTextAlign = textStyle.getTextAlign();\n    var textTextBaseline = textStyle.getTextBaseline();\n    this.textState_ = {\n      font: textFont !== undefined ?\n        textFont : ol.render.canvas.defaultFont,\n      textAlign: textTextAlign !== undefined ?\n        textTextAlign : ol.render.canvas.defaultTextAlign,\n      textBaseline: textTextBaseline !== undefined ?\n        textTextBaseline : ol.render.canvas.defaultTextBaseline\n    };\n    this.text_ = textText !== undefined ? textText : '';\n    this.textOffsetX_ =\n        textOffsetX !== undefined ? (this.pixelRatio_ * textOffsetX) : 0;\n    this.textOffsetY_ =\n        textOffsetY !== undefined ? (this.pixelRatio_ * textOffsetY) : 0;\n    this.textRotateWithView_ = textRotateWithView !== undefined ? textRotateWithView : false;\n    this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n    this.textScale_ = this.pixelRatio_ * (textScale !== undefined ?\n      textScale : 1);\n  }\n};\n\ngoog.provide('ol.renderer.Layer');\n\ngoog.require('ol');\ngoog.require('ol.ImageState');\ngoog.require('ol.Observable');\ngoog.require('ol.TileState');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.functions');\ngoog.require('ol.source.State');\n\n\n/**\n * @constructor\n * @extends {ol.Observable}\n * @param {ol.layer.Layer} layer Layer.\n * @struct\n */\nol.renderer.Layer = function(layer) {\n\n  ol.Observable.call(this);\n\n  /**\n   * @private\n   * @type {ol.layer.Layer}\n   */\n  this.layer_ = layer;\n\n\n};\nol.inherits(ol.renderer.Layer, ol.Observable);\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {olx.FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(this: S, (ol.Feature|ol.render.Feature), ol.layer.Layer): T}\n *     callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @return {T|undefined} Callback result.\n * @template S,T\n */\nol.renderer.Layer.prototype.forEachFeatureAtCoordinate = ol.nullFunction;\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {olx.FrameState} frameState Frame state.\n * @return {boolean} Is there a feature at the given coordinate?\n */\nol.renderer.Layer.prototype.hasFeatureAtCoordinate = ol.functions.FALSE;\n\n\n/**\n * Create a function that adds loaded tiles to the tile lookup.\n * @param {ol.source.Tile} source Tile source.\n * @param {ol.proj.Projection} projection Projection of the tiles.\n * @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded\n *     tiles by zoom level.\n * @return {function(number, ol.TileRange):boolean} A function that can be\n *     called with a zoom level and a tile range to add loaded tiles to the\n *     lookup.\n * @protected\n */\nol.renderer.Layer.prototype.createLoadedTileFinder = function(source, projection, tiles) {\n  return (\n    /**\n     * @param {number} zoom Zoom level.\n     * @param {ol.TileRange} tileRange Tile range.\n     * @return {boolean} The tile range is fully loaded.\n     */\n    function(zoom, tileRange) {\n      function callback(tile) {\n        if (!tiles[zoom]) {\n          tiles[zoom] = {};\n        }\n        tiles[zoom][tile.tileCoord.toString()] = tile;\n      }\n      return source.forEachLoadedTile(projection, zoom, tileRange, callback);\n    });\n};\n\n\n/**\n * @return {ol.layer.Layer} Layer.\n */\nol.renderer.Layer.prototype.getLayer = function() {\n  return this.layer_;\n};\n\n\n/**\n * Handle changes in image state.\n * @param {ol.events.Event} event Image change event.\n * @private\n */\nol.renderer.Layer.prototype.handleImageChange_ = function(event) {\n  var image = /** @type {ol.Image} */ (event.target);\n  if (image.getState() === ol.ImageState.LOADED) {\n    this.renderIfReadyAndVisible();\n  }\n};\n\n\n/**\n * Load the image if not already loaded, and register the image change\n * listener if needed.\n * @param {ol.ImageBase} image Image.\n * @return {boolean} `true` if the image is already loaded, `false`\n *     otherwise.\n * @protected\n */\nol.renderer.Layer.prototype.loadImage = function(image) {\n  var imageState = image.getState();\n  if (imageState != ol.ImageState.LOADED &&\n      imageState != ol.ImageState.ERROR) {\n    ol.events.listen(image, ol.events.EventType.CHANGE,\n        this.handleImageChange_, this);\n  }\n  if (imageState == ol.ImageState.IDLE) {\n    image.load();\n    imageState = image.getState();\n  }\n  return imageState == ol.ImageState.LOADED;\n};\n\n\n/**\n * @protected\n */\nol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {\n  var layer = this.getLayer();\n  if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) {\n    this.changed();\n  }\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.source.Tile} tileSource Tile source.\n * @protected\n */\nol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) {\n  if (tileSource.canExpireCache()) {\n    /**\n     * @param {ol.source.Tile} tileSource Tile source.\n     * @param {ol.PluggableMap} map Map.\n     * @param {olx.FrameState} frameState Frame state.\n     */\n    var postRenderFunction = function(tileSource, map, frameState) {\n      var tileSourceKey = ol.getUid(tileSource).toString();\n      if (tileSourceKey in frameState.usedTiles) {\n        tileSource.expireCache(frameState.viewState.projection,\n            frameState.usedTiles[tileSourceKey]);\n      }\n    }.bind(null, tileSource);\n\n    frameState.postRenderFunctions.push(\n        /** @type {ol.PostRenderFunction} */ (postRenderFunction)\n    );\n  }\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.source.Source} source Source.\n * @protected\n */\nol.renderer.Layer.prototype.updateLogos = function(frameState, source) {\n  var logo = source.getLogo();\n  if (logo !== undefined) {\n    if (typeof logo === 'string') {\n      frameState.logos[logo] = '';\n    } else if (logo) {\n      ol.asserts.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.\n      ol.asserts.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.\n      frameState.logos[logo.src] = logo.href;\n    }\n  }\n};\n\n\n/**\n * @param {Object.<string, Object.<string, ol.TileRange>>} usedTiles Used tiles.\n * @param {ol.source.Tile} tileSource Tile source.\n * @param {number} z Z.\n * @param {ol.TileRange} tileRange Tile range.\n * @protected\n */\nol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, tileRange) {\n  // FIXME should we use tilesToDrawByZ instead?\n  var tileSourceKey = ol.getUid(tileSource).toString();\n  var zKey = z.toString();\n  if (tileSourceKey in usedTiles) {\n    if (zKey in usedTiles[tileSourceKey]) {\n      usedTiles[tileSourceKey][zKey].extend(tileRange);\n    } else {\n      usedTiles[tileSourceKey][zKey] = tileRange;\n    }\n  } else {\n    usedTiles[tileSourceKey] = {};\n    usedTiles[tileSourceKey][zKey] = tileRange;\n  }\n};\n\n\n/**\n * Manage tile pyramid.\n * This function performs a number of functions related to the tiles at the\n * current zoom and lower zoom levels:\n * - registers idle tiles in frameState.wantedTiles so that they are not\n *   discarded by the tile queue\n * - enqueues missing tiles\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.source.Tile} tileSource Tile source.\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {ol.Extent} extent Extent.\n * @param {number} currentZ Current Z.\n * @param {number} preload Load low resolution tiles up to 'preload' levels.\n * @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback.\n * @param {T=} opt_this Object to use as `this` in `opt_tileCallback`.\n * @protected\n * @template T\n */\nol.renderer.Layer.prototype.manageTilePyramid = function(\n    frameState, tileSource, tileGrid, pixelRatio, projection, extent,\n    currentZ, preload, opt_tileCallback, opt_this) {\n  var tileSourceKey = ol.getUid(tileSource).toString();\n  if (!(tileSourceKey in frameState.wantedTiles)) {\n    frameState.wantedTiles[tileSourceKey] = {};\n  }\n  var wantedTiles = frameState.wantedTiles[tileSourceKey];\n  var tileQueue = frameState.tileQueue;\n  var minZoom = tileGrid.getMinZoom();\n  var tile, tileRange, tileResolution, x, y, z;\n  for (z = minZoom; z <= currentZ; ++z) {\n    tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);\n    tileResolution = tileGrid.getResolution(z);\n    for (x = tileRange.minX; x <= tileRange.maxX; ++x) {\n      for (y = tileRange.minY; y <= tileRange.maxY; ++y) {\n        if (currentZ - z <= preload) {\n          tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n          if (tile.getState() == ol.TileState.IDLE) {\n            wantedTiles[tile.getKey()] = true;\n            if (!tileQueue.isKeyQueued(tile.getKey())) {\n              tileQueue.enqueue([tile, tileSourceKey,\n                tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]);\n            }\n          }\n          if (opt_tileCallback !== undefined) {\n            opt_tileCallback.call(opt_this, tile);\n          }\n        } else {\n          tileSource.useTile(z, x, y, projection);\n        }\n      }\n    }\n  }\n};\n\ngoog.provide('ol.renderer.canvas.Layer');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.render.Event');\ngoog.require('ol.render.EventType');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.Immediate');\ngoog.require('ol.renderer.Layer');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.renderer.Layer}\n * @param {ol.layer.Layer} layer Layer.\n */\nol.renderer.canvas.Layer = function(layer) {\n\n  ol.renderer.Layer.call(this, layer);\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.renderedResolution;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.transform_ = ol.transform.create();\n\n};\nol.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.Extent} extent Clip extent.\n * @protected\n */\nol.renderer.canvas.Layer.prototype.clip = function(context, frameState, extent) {\n  var pixelRatio = frameState.pixelRatio;\n  var width = frameState.size[0] * pixelRatio;\n  var height = frameState.size[1] * pixelRatio;\n  var rotation = frameState.viewState.rotation;\n  var topLeft = ol.extent.getTopLeft(/** @type {ol.Extent} */ (extent));\n  var topRight = ol.extent.getTopRight(/** @type {ol.Extent} */ (extent));\n  var bottomRight = ol.extent.getBottomRight(/** @type {ol.Extent} */ (extent));\n  var bottomLeft = ol.extent.getBottomLeft(/** @type {ol.Extent} */ (extent));\n\n  ol.transform.apply(frameState.coordinateToPixelTransform, topLeft);\n  ol.transform.apply(frameState.coordinateToPixelTransform, topRight);\n  ol.transform.apply(frameState.coordinateToPixelTransform, bottomRight);\n  ol.transform.apply(frameState.coordinateToPixelTransform, bottomLeft);\n\n  context.save();\n  ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);\n  context.beginPath();\n  context.moveTo(topLeft[0] * pixelRatio, topLeft[1] * pixelRatio);\n  context.lineTo(topRight[0] * pixelRatio, topRight[1] * pixelRatio);\n  context.lineTo(bottomRight[0] * pixelRatio, bottomRight[1] * pixelRatio);\n  context.lineTo(bottomLeft[0] * pixelRatio, bottomLeft[1] * pixelRatio);\n  context.clip();\n  ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);\n};\n\n\n/**\n * @param {ol.render.EventType} type Event type.\n * @param {CanvasRenderingContext2D} context Context.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.Transform=} opt_transform Transform.\n * @private\n */\nol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {\n  var layer = this.getLayer();\n  if (layer.hasListener(type)) {\n    var width = frameState.size[0] * frameState.pixelRatio;\n    var height = frameState.size[1] * frameState.pixelRatio;\n    var rotation = frameState.viewState.rotation;\n    ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);\n    var transform = opt_transform !== undefined ?\n      opt_transform : this.getTransform(frameState, 0);\n    var render = new ol.render.canvas.Immediate(\n        context, frameState.pixelRatio, frameState.extent, transform,\n        frameState.viewState.rotation);\n    var composeEvent = new ol.render.Event(type, render, frameState,\n        context, null);\n    layer.dispatchEvent(composeEvent);\n    ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);\n  }\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {olx.FrameState} frameState FrameState.\n * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n *     callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\nol.renderer.canvas.Layer.prototype.forEachLayerAtCoordinate = function(coordinate, frameState, callback, thisArg) {\n  var hasFeature = this.forEachFeatureAtCoordinate(\n      coordinate, frameState, 0, ol.functions.TRUE, this);\n\n  if (hasFeature) {\n    return callback.call(thisArg, this.getLayer(), null);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @param {ol.Transform=} opt_transform Transform.\n * @protected\n */\nol.renderer.canvas.Layer.prototype.postCompose = function(context, frameState, layerState, opt_transform) {\n  this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context,\n      frameState, opt_transform);\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.Transform=} opt_transform Transform.\n * @protected\n */\nol.renderer.canvas.Layer.prototype.preCompose = function(context, frameState, opt_transform) {\n  this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context,\n      frameState, opt_transform);\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.Transform=} opt_transform Transform.\n * @protected\n */\nol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {\n  this.dispatchComposeEvent_(ol.render.EventType.RENDER, context,\n      frameState, opt_transform);\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @param {number} offsetX Offset on the x-axis in view coordinates.\n * @protected\n * @return {!ol.Transform} Transform.\n */\nol.renderer.canvas.Layer.prototype.getTransform = function(frameState, offsetX) {\n  var viewState = frameState.viewState;\n  var pixelRatio = frameState.pixelRatio;\n  var dx1 = pixelRatio * frameState.size[0] / 2;\n  var dy1 = pixelRatio * frameState.size[1] / 2;\n  var sx = pixelRatio / viewState.resolution;\n  var sy = -sx;\n  var angle = -viewState.rotation;\n  var dx2 = -viewState.center[0] + offsetX;\n  var dy2 = -viewState.center[1];\n  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);\n};\n\n\n/**\n * @abstract\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @param {CanvasRenderingContext2D} context Context.\n */\nol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerState, context) {};\n\n/**\n * @abstract\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @return {boolean} whether composeFrame should be called.\n */\nol.renderer.canvas.Layer.prototype.prepareFrame = function(frameState, layerState) {};\n\ngoog.provide('ol.renderer.canvas.IntermediateCanvas');\n\ngoog.require('ol');\ngoog.require('ol.coordinate');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.renderer.canvas.Layer');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.renderer.canvas.Layer}\n * @param {ol.layer.Layer} layer Layer.\n */\nol.renderer.canvas.IntermediateCanvas = function(layer) {\n\n  ol.renderer.canvas.Layer.call(this, layer);\n\n  /**\n   * @protected\n   * @type {ol.Transform}\n   */\n  this.coordinateToCanvasPixelTransform = ol.transform.create();\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.hitCanvasContext_ = null;\n\n};\nol.inherits(ol.renderer.canvas.IntermediateCanvas, ol.renderer.canvas.Layer);\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.IntermediateCanvas.prototype.composeFrame = function(frameState, layerState, context) {\n\n  this.preCompose(context, frameState);\n\n  var image = this.getImage();\n  if (image) {\n\n    // clipped rendering if layer extent is set\n    var extent = layerState.extent;\n    var clipped = extent !== undefined &&\n        !ol.extent.containsExtent(extent, frameState.extent) &&\n        ol.extent.intersects(extent, frameState.extent);\n    if (clipped) {\n      this.clip(context, frameState, /** @type {ol.Extent} */ (extent));\n    }\n\n    var imageTransform = this.getImageTransform();\n    // for performance reasons, context.save / context.restore is not used\n    // to save and restore the transformation matrix and the opacity.\n    // see http://jsperf.com/context-save-restore-versus-variable\n    var alpha = context.globalAlpha;\n    context.globalAlpha = layerState.opacity;\n\n    // for performance reasons, context.setTransform is only used\n    // when the view is rotated. see http://jsperf.com/canvas-transform\n    var dx = imageTransform[4];\n    var dy = imageTransform[5];\n    var dw = image.width * imageTransform[0];\n    var dh = image.height * imageTransform[3];\n    context.drawImage(image, 0, 0, +image.width, +image.height,\n        Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));\n    context.globalAlpha = alpha;\n\n    if (clipped) {\n      context.restore();\n    }\n  }\n\n  this.postCompose(context, frameState, layerState);\n};\n\n\n/**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|Image} Canvas.\n */\nol.renderer.canvas.IntermediateCanvas.prototype.getImage = function() {};\n\n\n/**\n * @abstract\n * @return {!ol.Transform} Image transform.\n */\nol.renderer.canvas.IntermediateCanvas.prototype.getImageTransform = function() {};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.IntermediateCanvas.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  var layer = this.getLayer();\n  var source = layer.getSource();\n  var resolution = frameState.viewState.resolution;\n  var rotation = frameState.viewState.rotation;\n  var skippedFeatureUids = frameState.skippedFeatureUids;\n  return source.forEachFeatureAtCoordinate(\n      coordinate, resolution, rotation, hitTolerance, skippedFeatureUids,\n      /**\n       * @param {ol.Feature|ol.render.Feature} feature Feature.\n       * @return {?} Callback result.\n       */\n      function(feature) {\n        return callback.call(thisArg, feature, layer);\n      });\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.IntermediateCanvas.prototype.forEachLayerAtCoordinate = function(coordinate, frameState, callback, thisArg) {\n  if (!this.getImage()) {\n    return undefined;\n  }\n\n  if (this.getLayer().getSource().forEachFeatureAtCoordinate !== ol.nullFunction) {\n    // for ImageCanvas sources use the original hit-detection logic,\n    // so that for example also transparent polygons are detected\n    return ol.renderer.canvas.Layer.prototype.forEachLayerAtCoordinate.apply(this, arguments);\n  } else {\n    var pixel = ol.transform.apply(this.coordinateToCanvasPixelTransform, coordinate.slice());\n    ol.coordinate.scale(pixel, frameState.viewState.resolution / this.renderedResolution);\n\n    if (!this.hitCanvasContext_) {\n      this.hitCanvasContext_ = ol.dom.createCanvasContext2D(1, 1);\n    }\n\n    this.hitCanvasContext_.clearRect(0, 0, 1, 1);\n    this.hitCanvasContext_.drawImage(this.getImage(), pixel[0], pixel[1], 1, 1, 0, 0, 1, 1);\n\n    var imageData = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;\n    if (imageData[3] > 0) {\n      return callback.call(thisArg, this.getLayer(),  imageData);\n    } else {\n      return undefined;\n    }\n  }\n};\n\ngoog.provide('ol.renderer.canvas.ImageLayer');\n\ngoog.require('ol');\ngoog.require('ol.ImageCanvas');\ngoog.require('ol.LayerType');\ngoog.require('ol.ViewHint');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.layer.VectorRenderType');\ngoog.require('ol.obj');\ngoog.require('ol.plugins');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.canvas.IntermediateCanvas');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.canvas.IntermediateCanvas}\n * @param {ol.layer.Image} imageLayer Single image layer.\n * @api\n */\nol.renderer.canvas.ImageLayer = function(imageLayer) {\n\n  ol.renderer.canvas.IntermediateCanvas.call(this, imageLayer);\n\n  /**\n   * @private\n   * @type {?ol.ImageBase}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.imageTransform_ = ol.transform.create();\n\n  /**\n   * @type {!Array.<string>}\n   */\n  this.skippedFeatures_ = [];\n\n  /**\n   * @private\n   * @type {ol.renderer.canvas.VectorLayer}\n   */\n  this.vectorRenderer_ = null;\n\n};\nol.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.IntermediateCanvas);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.canvas.ImageLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.CANVAS && (layer.getType() === ol.LayerType.IMAGE ||\n      layer.getType() === ol.LayerType.VECTOR &&\n      /** @type {ol.layer.Vector} */ (layer).getRenderMode() === ol.layer.VectorRenderType.IMAGE);\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.canvas.ImageLayer} The layer renderer.\n */\nol.renderer.canvas.ImageLayer['create'] = function(mapRenderer, layer) {\n  var renderer = new ol.renderer.canvas.ImageLayer(/** @type {ol.layer.Image} */ (layer));\n  if (layer.getType() === ol.LayerType.VECTOR) {\n    var candidates = ol.plugins.getLayerRendererPlugins();\n    for (var i = 0, ii = candidates.length; i < ii; ++i) {\n      var candidate = /** @type {Object.<string, Function>} */ (candidates[i]);\n      if (candidate !== ol.renderer.canvas.ImageLayer && candidate['handles'](ol.renderer.Type.CANVAS, layer)) {\n        renderer.setVectorRenderer(candidate['create'](mapRenderer, layer));\n      }\n    }\n  }\n  return renderer;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.ImageLayer.prototype.getImage = function() {\n  return !this.image_ ? null : this.image_.getImage();\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.ImageLayer.prototype.getImageTransform = function() {\n  return this.imageTransform_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, layerState) {\n\n  var pixelRatio = frameState.pixelRatio;\n  var size = frameState.size;\n  var viewState = frameState.viewState;\n  var viewCenter = viewState.center;\n  var viewResolution = viewState.resolution;\n\n  var image;\n  var imageLayer = /** @type {ol.layer.Image} */ (this.getLayer());\n  var imageSource = imageLayer.getSource();\n\n  var hints = frameState.viewHints;\n\n  var renderedExtent = frameState.extent;\n  if (layerState.extent !== undefined) {\n    renderedExtent = ol.extent.getIntersection(\n        renderedExtent, layerState.extent);\n  }\n\n  if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING] &&\n      !ol.extent.isEmpty(renderedExtent)) {\n    var projection = viewState.projection;\n    if (!ol.ENABLE_RASTER_REPROJECTION) {\n      var sourceProjection = imageSource.getProjection();\n      if (sourceProjection) {\n        projection = sourceProjection;\n      }\n    }\n    var vectorRenderer = this.vectorRenderer_;\n    if (vectorRenderer) {\n      var context = vectorRenderer.context;\n      var imageFrameState = /** @type {olx.FrameState} */ (ol.obj.assign({}, frameState, {\n        size: [\n          ol.extent.getWidth(renderedExtent) / viewResolution,\n          ol.extent.getHeight(renderedExtent) / viewResolution\n        ],\n        viewState: /** @type {olx.ViewState} */ (ol.obj.assign({}, frameState.viewState, {\n          rotation: 0\n        }))\n      }));\n      var skippedFeatures = Object.keys(imageFrameState.skippedFeatureUids).sort();\n      if (vectorRenderer.prepareFrame(imageFrameState, layerState) &&\n          (vectorRenderer.replayGroupChanged ||\n          !ol.array.equals(skippedFeatures, this.skippedFeatures_))) {\n        context.canvas.width = imageFrameState.size[0] * pixelRatio;\n        context.canvas.height = imageFrameState.size[1] * pixelRatio;\n        vectorRenderer.composeFrame(imageFrameState, layerState, context);\n        this.image_ = new ol.ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas);\n        this.skippedFeatures_ = skippedFeatures;\n      }\n    } else {\n      image = imageSource.getImage(\n          renderedExtent, viewResolution, pixelRatio, projection);\n      if (image) {\n        var loaded = this.loadImage(image);\n        if (loaded) {\n          this.image_ = image;\n        }\n      }\n    }\n  }\n\n  if (this.image_) {\n    image = this.image_;\n    var imageExtent = image.getExtent();\n    var imageResolution = image.getResolution();\n    var imagePixelRatio = image.getPixelRatio();\n    var scale = pixelRatio * imageResolution /\n        (viewResolution * imagePixelRatio);\n    var transform = ol.transform.compose(this.imageTransform_,\n        pixelRatio * size[0] / 2, pixelRatio * size[1] / 2,\n        scale, scale,\n        0,\n        imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,\n        imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);\n    ol.transform.compose(this.coordinateToCanvasPixelTransform,\n        pixelRatio * size[0] / 2 - transform[4], pixelRatio * size[1] / 2 - transform[5],\n        pixelRatio / viewResolution, -pixelRatio / viewResolution,\n        0,\n        -viewCenter[0], -viewCenter[1]);\n\n    this.updateLogos(frameState, imageSource);\n    this.renderedResolution = imageResolution * pixelRatio / imagePixelRatio;\n  }\n\n  return !!this.image_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  if (this.vectorRenderer_) {\n    return this.vectorRenderer_.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, callback, thisArg);\n  } else {\n    return ol.renderer.canvas.IntermediateCanvas.prototype.forEachFeatureAtCoordinate.call(this, coordinate, frameState, hitTolerance, callback, thisArg);\n  }\n};\n\n\n/**\n * @param {ol.renderer.canvas.VectorLayer} renderer Vector renderer.\n */\nol.renderer.canvas.ImageLayer.prototype.setVectorRenderer = function(renderer) {\n  this.vectorRenderer_ = renderer;\n};\n\ngoog.provide('ol.style.IconImageCache');\n\ngoog.require('ol.color');\n\n\n/**\n * Singleton class. Available through {@link ol.style.iconImageCache}.\n * @constructor\n */\nol.style.IconImageCache = function() {\n\n  /**\n   * @type {Object.<string, ol.style.IconImage>}\n   * @private\n   */\n  this.cache_ = {};\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.cacheSize_ = 0;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxCacheSize_ = 32;\n};\n\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.Color} color Color.\n * @return {string} Cache key.\n */\nol.style.IconImageCache.getKey = function(src, crossOrigin, color) {\n  var colorString = color ? ol.color.asString(color) : 'null';\n  return crossOrigin + ':' + src + ':' + colorString;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.style.IconImageCache.prototype.clear = function() {\n  this.cache_ = {};\n  this.cacheSize_ = 0;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.style.IconImageCache.prototype.expire = function() {\n  if (this.cacheSize_ > this.maxCacheSize_) {\n    var i = 0;\n    var key, iconImage;\n    for (key in this.cache_) {\n      iconImage = this.cache_[key];\n      if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n        delete this.cache_[key];\n        --this.cacheSize_;\n      }\n    }\n  }\n};\n\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.Color} color Color.\n * @return {ol.style.IconImage} Icon image.\n */\nol.style.IconImageCache.prototype.get = function(src, crossOrigin, color) {\n  var key = ol.style.IconImageCache.getKey(src, crossOrigin, color);\n  return key in this.cache_ ? this.cache_[key] : null;\n};\n\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.Color} color Color.\n * @param {ol.style.IconImage} iconImage Icon image.\n */\nol.style.IconImageCache.prototype.set = function(src, crossOrigin, color, iconImage) {\n  var key = ol.style.IconImageCache.getKey(src, crossOrigin, color);\n  this.cache_[key] = iconImage;\n  ++this.cacheSize_;\n};\n\n\n/**\n * Set the cache size of the icon cache. Default is `32`. Change this value when\n * your map uses more than 32 different icon images and you are not caching icon\n * styles on the application level.\n * @param {number} maxCacheSize Cache max size.\n * @api\n */\nol.style.IconImageCache.prototype.setSize = function(maxCacheSize) {\n  this.maxCacheSize_ = maxCacheSize;\n  this.expire();\n};\n\ngoog.provide('ol.style');\n\ngoog.require('ol.style.IconImageCache');\n\n/**\n * The {@link ol.style.IconImageCache} for {@link ol.style.Icon} images.\n * @api\n */\nol.style.iconImageCache = new ol.style.IconImageCache();\n\ngoog.provide('ol.renderer.Map');\n\ngoog.require('ol');\ngoog.require('ol.Disposable');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.plugins');\ngoog.require('ol.style');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.Disposable}\n * @param {Element} container Container.\n * @param {ol.PluggableMap} map Map.\n * @struct\n */\nol.renderer.Map = function(container, map) {\n\n  ol.Disposable.call(this);\n\n\n  /**\n   * @private\n   * @type {ol.PluggableMap}\n   */\n  this.map_ = map;\n\n  /**\n   * @private\n   * @type {Object.<string, ol.renderer.Layer>}\n   */\n  this.layerRenderers_ = {};\n\n  /**\n   * @private\n   * @type {Object.<string, ol.EventsKey>}\n   */\n  this.layerRendererListeners_ = {};\n\n};\nol.inherits(ol.renderer.Map, ol.Disposable);\n\n\n/**\n * @param {olx.FrameState} frameState FrameState.\n * @protected\n */\nol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {\n  var viewState = frameState.viewState;\n  var coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n  var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n  ol.transform.compose(coordinateToPixelTransform,\n      frameState.size[0] / 2, frameState.size[1] / 2,\n      1 / viewState.resolution, -1 / viewState.resolution,\n      -viewState.rotation,\n      -viewState.center[0], -viewState.center[1]);\n\n  ol.transform.invert(\n      ol.transform.setFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));\n};\n\n\n/**\n * Removes all layer renderers.\n */\nol.renderer.Map.prototype.removeLayerRenderers = function() {\n  for (var key in this.layerRenderers_) {\n    this.removeLayerRendererByKey_(key).dispose();\n  }\n};\n\n\n/**\n * @param {ol.PluggableMap} map Map.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.Map.expireIconCache_ = function(map, frameState) {\n  var cache = ol.style.iconImageCache;\n  cache.expire();\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {olx.FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(this: S, (ol.Feature|ol.render.Feature),\n *     ol.layer.Layer): T} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter\n *     function, only layers which are visible and for which this function\n *     returns `true` will be tested for features.  By default, all visible\n *     layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\nol.renderer.Map.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg,\n    layerFilter, thisArg2) {\n  var result;\n  var viewState = frameState.viewState;\n  var viewResolution = viewState.resolution;\n\n  /**\n   * @param {ol.Feature|ol.render.Feature} feature Feature.\n   * @param {ol.layer.Layer} layer Layer.\n   * @return {?} Callback result.\n   */\n  function forEachFeatureAtCoordinate(feature, layer) {\n    var key = ol.getUid(feature).toString();\n    var managed = frameState.layerStates[ol.getUid(layer)].managed;\n    if (!(key in frameState.skippedFeatureUids && !managed)) {\n      return callback.call(thisArg, feature, managed ? layer : null);\n    }\n  }\n\n  var projection = viewState.projection;\n\n  var translatedCoordinate = coordinate;\n  if (projection.canWrapX()) {\n    var projectionExtent = projection.getExtent();\n    var worldWidth = ol.extent.getWidth(projectionExtent);\n    var x = coordinate[0];\n    if (x < projectionExtent[0] || x > projectionExtent[2]) {\n      var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);\n      translatedCoordinate = [x + worldWidth * worldsAway, coordinate[1]];\n    }\n  }\n\n  var layerStates = frameState.layerStatesArray;\n  var numLayers = layerStates.length;\n  var i;\n  for (i = numLayers - 1; i >= 0; --i) {\n    var layerState = layerStates[i];\n    var layer = layerState.layer;\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&\n        layerFilter.call(thisArg2, layer)) {\n      var layerRenderer = this.getLayerRenderer(layer);\n      if (layer.getSource()) {\n        result = layerRenderer.forEachFeatureAtCoordinate(\n            layer.getSource().getWrapX() ? translatedCoordinate : coordinate,\n            frameState, hitTolerance, forEachFeatureAtCoordinate, thisArg);\n      }\n      if (result) {\n        return result;\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @abstract\n * @param {ol.Pixel} pixel Pixel.\n * @param {olx.FrameState} frameState FrameState.\n * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n *     callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter\n *     function, only layers which are visible and for which this function\n *     returns `true` will be tested for features.  By default, all visible\n *     layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\nol.renderer.Map.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg,\n    layerFilter, thisArg2) {};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {olx.FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter\n *     function, only layers which are visible and for which this function\n *     returns `true` will be tested for features.  By default, all visible\n *     layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\nol.renderer.Map.prototype.hasFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, layerFilter, thisArg) {\n  var hasFeature = this.forEachFeatureAtCoordinate(\n      coordinate, frameState, hitTolerance, ol.functions.TRUE, this, layerFilter, thisArg);\n\n  return hasFeature !== undefined;\n};\n\n\n/**\n * @param {ol.layer.Layer} layer Layer.\n * @protected\n * @return {ol.renderer.Layer} Layer renderer.\n */\nol.renderer.Map.prototype.getLayerRenderer = function(layer) {\n  var layerKey = ol.getUid(layer).toString();\n  if (layerKey in this.layerRenderers_) {\n    return this.layerRenderers_[layerKey];\n  } else {\n    var layerRendererPlugins = ol.plugins.getLayerRendererPlugins();\n    var renderer;\n    var type = this.getType();\n    for (var i = 0, ii = layerRendererPlugins.length; i < ii; ++i) {\n      var plugin = layerRendererPlugins[i];\n      if (plugin['handles'](type, layer)) {\n        renderer = plugin['create'](this, layer);\n        break;\n      }\n    }\n    if (renderer) {\n      this.layerRenderers_[layerKey] = renderer;\n      this.layerRendererListeners_[layerKey] = ol.events.listen(renderer,\n          ol.events.EventType.CHANGE, this.handleLayerRendererChange_, this);\n    } else {\n      throw new Error('Unable to create renderer for layer: ' + layer.getType());\n    }\n    return renderer;\n  }\n};\n\n\n/**\n * @param {string} layerKey Layer key.\n * @protected\n * @return {ol.renderer.Layer} Layer renderer.\n */\nol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) {\n  return this.layerRenderers_[layerKey];\n};\n\n\n/**\n * @protected\n * @return {Object.<string, ol.renderer.Layer>} Layer renderers.\n */\nol.renderer.Map.prototype.getLayerRenderers = function() {\n  return this.layerRenderers_;\n};\n\n\n/**\n * @return {ol.PluggableMap} Map.\n */\nol.renderer.Map.prototype.getMap = function() {\n  return this.map_;\n};\n\n\n/**\n * @abstract\n * @return {ol.renderer.Type} Type\n */\nol.renderer.Map.prototype.getType = function() {};\n\n\n/**\n * Handle changes in a layer renderer.\n * @private\n */\nol.renderer.Map.prototype.handleLayerRendererChange_ = function() {\n  this.map_.render();\n};\n\n\n/**\n * @param {string} layerKey Layer key.\n * @return {ol.renderer.Layer} Layer renderer.\n * @private\n */\nol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {\n  var layerRenderer = this.layerRenderers_[layerKey];\n  delete this.layerRenderers_[layerKey];\n\n  ol.events.unlistenByKey(this.layerRendererListeners_[layerKey]);\n  delete this.layerRendererListeners_[layerKey];\n\n  return layerRenderer;\n};\n\n\n/**\n * Render.\n * @param {?olx.FrameState} frameState Frame state.\n */\nol.renderer.Map.prototype.renderFrame = ol.nullFunction;\n\n\n/**\n * @param {ol.PluggableMap} map Map.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.Map.prototype.removeUnusedLayerRenderers_ = function(map, frameState) {\n  var layerKey;\n  for (layerKey in this.layerRenderers_) {\n    if (!frameState || !(layerKey in frameState.layerStates)) {\n      this.removeLayerRendererByKey_(layerKey).dispose();\n    }\n  }\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @protected\n */\nol.renderer.Map.prototype.scheduleExpireIconCache = function(frameState) {\n  frameState.postRenderFunctions.push(\n      /** @type {ol.PostRenderFunction} */ (ol.renderer.Map.expireIconCache_)\n  );\n};\n\n\n/**\n * @param {!olx.FrameState} frameState Frame state.\n * @protected\n */\nol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = function(frameState) {\n  var layerKey;\n  for (layerKey in this.layerRenderers_) {\n    if (!(layerKey in frameState.layerStates)) {\n      frameState.postRenderFunctions.push(\n          /** @type {ol.PostRenderFunction} */ (this.removeUnusedLayerRenderers_.bind(this))\n      );\n      return;\n    }\n  }\n};\n\n\n/**\n * @param {ol.LayerState} state1 First layer state.\n * @param {ol.LayerState} state2 Second layer state.\n * @return {number} The zIndex difference.\n */\nol.renderer.Map.sortByZIndex = function(state1, state2) {\n  return state1.zIndex - state2.zIndex;\n};\n\n// FIXME offset panning\n\ngoog.provide('ol.renderer.canvas.Map');\n\ngoog.require('ol.transform');\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.render.Event');\ngoog.require('ol.render.EventType');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.Immediate');\ngoog.require('ol.renderer.Map');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.source.State');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.Map}\n * @param {Element} container Container.\n * @param {ol.PluggableMap} map Map.\n * @api\n */\nol.renderer.canvas.Map = function(container, map) {\n\n  ol.renderer.Map.call(this, container, map);\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context_ = ol.dom.createCanvasContext2D();\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = this.context_.canvas;\n\n  this.canvas_.style.width = '100%';\n  this.canvas_.style.height = '100%';\n  this.canvas_.style.display = 'block';\n  this.canvas_.className = ol.css.CLASS_UNSELECTABLE;\n  container.insertBefore(this.canvas_, container.childNodes[0] || null);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderedVisible_ = true;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.transform_ = ol.transform.create();\n\n};\nol.inherits(ol.renderer.canvas.Map, ol.renderer.Map);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.canvas.Map['handles'] = function(type) {\n  return type === ol.renderer.Type.CANVAS;\n};\n\n\n/**\n * Create the map renderer.\n * @param {Element} container Container.\n * @param {ol.PluggableMap} map Map.\n * @return {ol.renderer.canvas.Map} The map renderer.\n */\nol.renderer.canvas.Map['create'] = function(container, map) {\n  return new ol.renderer.canvas.Map(container, map);\n};\n\n\n/**\n * @param {ol.render.EventType} type Event type.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {\n  var map = this.getMap();\n  var context = this.context_;\n  if (map.hasListener(type)) {\n    var extent = frameState.extent;\n    var pixelRatio = frameState.pixelRatio;\n    var viewState = frameState.viewState;\n    var rotation = viewState.rotation;\n\n    var transform = this.getTransform(frameState);\n\n    var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,\n        extent, transform, rotation);\n    var composeEvent = new ol.render.Event(type, vectorContext,\n        frameState, context, null);\n    map.dispatchEvent(composeEvent);\n  }\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @protected\n * @return {!ol.Transform} Transform.\n */\nol.renderer.canvas.Map.prototype.getTransform = function(frameState) {\n  var viewState = frameState.viewState;\n  var dx1 = this.canvas_.width / 2;\n  var dy1 = this.canvas_.height / 2;\n  var sx = frameState.pixelRatio / viewState.resolution;\n  var sy = -sx;\n  var angle = -viewState.rotation;\n  var dx2 = -viewState.center[0];\n  var dy2 = -viewState.center[1];\n  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.Map.prototype.getType = function() {\n  return ol.renderer.Type.CANVAS;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {\n\n  if (!frameState) {\n    if (this.renderedVisible_) {\n      this.canvas_.style.display = 'none';\n      this.renderedVisible_ = false;\n    }\n    return;\n  }\n\n  var context = this.context_;\n  var pixelRatio = frameState.pixelRatio;\n  var width = Math.round(frameState.size[0] * pixelRatio);\n  var height = Math.round(frameState.size[1] * pixelRatio);\n  if (this.canvas_.width != width || this.canvas_.height != height) {\n    this.canvas_.width = width;\n    this.canvas_.height = height;\n  } else {\n    context.clearRect(0, 0, width, height);\n  }\n\n  var rotation = frameState.viewState.rotation;\n\n  this.calculateMatrices2D(frameState);\n\n  this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);\n\n  var layerStatesArray = frameState.layerStatesArray;\n  ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);\n\n  if (rotation) {\n    context.save();\n    ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);\n  }\n\n  var viewResolution = frameState.viewState.resolution;\n  var i, ii, layer, layerRenderer, layerState;\n  for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n    layerState = layerStatesArray[i];\n    layer = layerState.layer;\n    layerRenderer = /** @type {ol.renderer.canvas.Layer} */ (this.getLayerRenderer(layer));\n    if (!ol.layer.Layer.visibleAtResolution(layerState, viewResolution) ||\n        layerState.sourceState != ol.source.State.READY) {\n      continue;\n    }\n    if (layerRenderer.prepareFrame(frameState, layerState)) {\n      layerRenderer.composeFrame(frameState, layerState, context);\n    }\n  }\n\n  if (rotation) {\n    context.restore();\n  }\n\n  this.dispatchComposeEvent_(\n      ol.render.EventType.POSTCOMPOSE, frameState);\n\n  if (!this.renderedVisible_) {\n    this.canvas_.style.display = '';\n    this.renderedVisible_ = true;\n  }\n\n  this.scheduleRemoveUnusedLayerRenderers(frameState);\n  this.scheduleExpireIconCache(frameState);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.Map.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg,\n    layerFilter, thisArg2) {\n  var result;\n  var viewState = frameState.viewState;\n  var viewResolution = viewState.resolution;\n\n  var layerStates = frameState.layerStatesArray;\n  var numLayers = layerStates.length;\n\n  var coordinate = ol.transform.apply(\n      frameState.pixelToCoordinateTransform, pixel.slice());\n\n  var i;\n  for (i = numLayers - 1; i >= 0; --i) {\n    var layerState = layerStates[i];\n    var layer = layerState.layer;\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&\n        layerFilter.call(thisArg2, layer)) {\n      var layerRenderer = /** @type {ol.renderer.canvas.Layer} */ (this.getLayerRenderer(layer));\n      result = layerRenderer.forEachLayerAtCoordinate(\n          coordinate, frameState, callback, thisArg);\n      if (result) {\n        return result;\n      }\n    }\n  }\n  return undefined;\n};\n\ngoog.provide('ol.renderer.canvas.TileLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.TileRange');\ngoog.require('ol.TileState');\ngoog.require('ol.ViewHint');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.canvas.IntermediateCanvas');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.canvas.IntermediateCanvas}\n * @param {ol.layer.Tile|ol.layer.VectorTile} tileLayer Tile layer.\n * @api\n */\nol.renderer.canvas.TileLayer = function(tileLayer) {\n\n  ol.renderer.canvas.IntermediateCanvas.call(this, tileLayer);\n\n  /**\n   * @protected\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context = this.context === null ? null :  ol.dom.createCanvasContext2D();\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.oversampling_;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.renderedExtent_ = null;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.renderedRevision;\n\n  /**\n   * @protected\n   * @type {!Array.<ol.Tile>}\n   */\n  this.renderedTiles = [];\n\n  /**\n   * @protected\n   * @type {ol.Extent}\n   */\n  this.tmpExtent = ol.extent.createEmpty();\n\n  /**\n   * @private\n   * @type {ol.TileRange}\n   */\n  this.tmpTileRange_ = new ol.TileRange(0, 0, 0, 0);\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.imageTransform_ = ol.transform.create();\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.zDirection = 0;\n\n};\nol.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.IntermediateCanvas);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.canvas.TileLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.CANVAS && layer.getType() === ol.LayerType.TILE;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.canvas.TileLayer} The layer renderer.\n */\nol.renderer.canvas.TileLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.canvas.TileLayer(/** @type {ol.layer.Tile} */ (layer));\n};\n\n\n/**\n * @private\n * @param {ol.Tile} tile Tile.\n * @return {boolean} Tile is drawable.\n */\nol.renderer.canvas.TileLayer.prototype.isDrawableTile_ = function(tile) {\n  var tileState = tile.getState();\n  var useInterimTilesOnError = this.getLayer().getUseInterimTilesOnError();\n  return tileState == ol.TileState.LOADED ||\n      tileState == ol.TileState.EMPTY ||\n      tileState == ol.TileState.ERROR && !useInterimTilesOnError;\n};\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layerState) {\n\n  var pixelRatio = frameState.pixelRatio;\n  var size = frameState.size;\n  var viewState = frameState.viewState;\n  var projection = viewState.projection;\n  var viewResolution = viewState.resolution;\n  var viewCenter = viewState.center;\n\n  var tileLayer = this.getLayer();\n  var tileSource = /** @type {ol.source.Tile} */ (tileLayer.getSource());\n  var sourceRevision = tileSource.getRevision();\n  var tileGrid = tileSource.getTileGridForProjection(projection);\n  var z = tileGrid.getZForResolution(viewResolution, this.zDirection);\n  var tileResolution = tileGrid.getResolution(z);\n  var oversampling = Math.round(viewResolution / tileResolution) || 1;\n  var extent = frameState.extent;\n\n  if (layerState.extent !== undefined) {\n    extent = ol.extent.getIntersection(extent, layerState.extent);\n  }\n  if (ol.extent.isEmpty(extent)) {\n    // Return false to prevent the rendering of the layer.\n    return false;\n  }\n\n  var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n  var imageExtent = tileGrid.getTileRangeExtent(z, tileRange);\n\n  var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);\n\n  /**\n   * @type {Object.<number, Object.<string, ol.Tile>>}\n   */\n  var tilesToDrawByZ = {};\n  tilesToDrawByZ[z] = {};\n\n  var findLoadedTiles = this.createLoadedTileFinder(\n      tileSource, projection, tilesToDrawByZ);\n\n  var tmpExtent = this.tmpExtent;\n  var tmpTileRange = this.tmpTileRange_;\n  var newTiles = false;\n  var tile, x, y;\n  for (x = tileRange.minX; x <= tileRange.maxX; ++x) {\n    for (y = tileRange.minY; y <= tileRange.maxY; ++y) {\n      tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n      if (tile.getState() == ol.TileState.ERROR) {\n        if (!tileLayer.getUseInterimTilesOnError()) {\n          // When useInterimTilesOnError is false, we consider the error tile as loaded.\n          tile.setState(ol.TileState.LOADED);\n        } else if (tileLayer.getPreload() > 0) {\n          // Preloaded tiles for lower resolutions might have finished loading.\n          newTiles = true;\n        }\n      }\n      if (!this.isDrawableTile_(tile)) {\n        tile = tile.getInterimTile();\n      }\n      if (this.isDrawableTile_(tile)) {\n        var uid = ol.getUid(this);\n        if (tile.getState() == ol.TileState.LOADED) {\n          tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;\n          var inTransition = tile.inTransition(uid);\n          if (!newTiles && (inTransition || this.renderedTiles.indexOf(tile) === -1)) {\n            newTiles = true;\n          }\n        }\n        if (tile.getAlpha(uid, frameState.time) === 1) {\n          // don't look for alt tiles if alpha is 1\n          continue;\n        }\n      }\n\n      var childTileRange = tileGrid.getTileCoordChildTileRange(\n          tile.tileCoord, tmpTileRange, tmpExtent);\n      var covered = false;\n      if (childTileRange) {\n        covered = findLoadedTiles(z + 1, childTileRange);\n      }\n      if (!covered) {\n        tileGrid.forEachTileCoordParentTileRange(\n            tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);\n      }\n\n    }\n  }\n\n  var renderedResolution = tileResolution * pixelRatio / tilePixelRatio * oversampling;\n  var hints = frameState.viewHints;\n  var animatingOrInteracting = hints[ol.ViewHint.ANIMATING] || hints[ol.ViewHint.INTERACTING];\n  if (!(this.renderedResolution && Date.now() - frameState.time > 16 && animatingOrInteracting) && (\n    newTiles ||\n        !(this.renderedExtent_ && ol.extent.containsExtent(this.renderedExtent_, extent)) ||\n        this.renderedRevision != sourceRevision ||\n        oversampling != this.oversampling_ ||\n        !animatingOrInteracting && renderedResolution != this.renderedResolution\n  )) {\n\n    var context = this.context;\n    if (context) {\n      var tilePixelSize = tileSource.getTilePixelSize(z, pixelRatio, projection);\n      var width = Math.round(tileRange.getWidth() * tilePixelSize[0] / oversampling);\n      var height = Math.round(tileRange.getHeight() * tilePixelSize[1] / oversampling);\n      var canvas = context.canvas;\n      if (canvas.width != width || canvas.height != height) {\n        this.oversampling_ = oversampling;\n        canvas.width = width;\n        canvas.height = height;\n      } else {\n        if (this.renderedExtent_ && !ol.extent.equals(imageExtent, this.renderedExtent_)) {\n          context.clearRect(0, 0, width, height);\n        }\n        oversampling = this.oversampling_;\n      }\n    }\n\n    this.renderedTiles.length = 0;\n    /** @type {Array.<number>} */\n    var zs = Object.keys(tilesToDrawByZ).map(Number);\n    zs.sort(function(a, b) {\n      if (a === z) {\n        return 1;\n      } else if (b === z) {\n        return -1;\n      } else {\n        return a > b ? 1 : a < b ? -1 : 0;\n      }\n    });\n    var currentResolution, currentScale, currentTilePixelSize, currentZ, i, ii;\n    var tileExtent, tileGutter, tilesToDraw, w, h;\n    for (i = 0, ii = zs.length; i < ii; ++i) {\n      currentZ = zs[i];\n      currentTilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection);\n      currentResolution = tileGrid.getResolution(currentZ);\n      currentScale = currentResolution / tileResolution;\n      tileGutter = tilePixelRatio * tileSource.getGutter(projection);\n      tilesToDraw = tilesToDrawByZ[currentZ];\n      for (var tileCoordKey in tilesToDraw) {\n        tile = tilesToDraw[tileCoordKey];\n        tileExtent = tileGrid.getTileCoordExtent(tile.getTileCoord(), tmpExtent);\n        x = (tileExtent[0] - imageExtent[0]) / tileResolution * tilePixelRatio / oversampling;\n        y = (imageExtent[3] - tileExtent[3]) / tileResolution * tilePixelRatio / oversampling;\n        w = currentTilePixelSize[0] * currentScale / oversampling;\n        h = currentTilePixelSize[1] * currentScale / oversampling;\n        this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ);\n        this.renderedTiles.push(tile);\n      }\n    }\n\n    this.renderedRevision = sourceRevision;\n    this.renderedResolution = tileResolution * pixelRatio / tilePixelRatio * oversampling;\n    this.renderedExtent_ = imageExtent;\n  }\n\n  var scale = this.renderedResolution / viewResolution;\n  var transform = ol.transform.compose(this.imageTransform_,\n      pixelRatio * size[0] / 2, pixelRatio * size[1] / 2,\n      scale, scale,\n      0,\n      (this.renderedExtent_[0] - viewCenter[0]) / this.renderedResolution * pixelRatio,\n      (viewCenter[1] - this.renderedExtent_[3]) / this.renderedResolution * pixelRatio);\n  ol.transform.compose(this.coordinateToCanvasPixelTransform,\n      pixelRatio * size[0] / 2 - transform[4], pixelRatio * size[1] / 2 - transform[5],\n      pixelRatio / viewResolution, -pixelRatio / viewResolution,\n      0,\n      -viewCenter[0], -viewCenter[1]);\n\n\n  this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);\n  this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio,\n      projection, extent, z, tileLayer.getPreload());\n  this.scheduleExpireCache(frameState, tileSource);\n  this.updateLogos(frameState, tileSource);\n\n  return this.renderedTiles.length > 0;\n};\n\n\n/**\n * @param {ol.Tile} tile Tile.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @param {number} x Left of the tile.\n * @param {number} y Top of the tile.\n * @param {number} w Width of the tile.\n * @param {number} h Height of the tile.\n * @param {number} gutter Tile gutter.\n * @param {boolean} transition Apply an alpha transition.\n */\nol.renderer.canvas.TileLayer.prototype.drawTileImage = function(tile, frameState, layerState, x, y, w, h, gutter, transition) {\n  var image = tile.getImage(this.getLayer());\n  if (!image) {\n    return;\n  }\n  var uid = ol.getUid(this);\n  var alpha = transition ? tile.getAlpha(uid, frameState.time) : 1;\n  if (alpha === 1 && !this.getLayer().getSource().getOpaque(frameState.viewState.projection)) {\n    this.context.clearRect(x, y, w, h);\n  }\n  var alphaChanged = alpha !== this.context.globalAlpha;\n  if (alphaChanged) {\n    this.context.save();\n    this.context.globalAlpha = alpha;\n  }\n  this.context.drawImage(image, gutter, gutter,\n      image.width - 2 * gutter, image.height - 2 * gutter, x, y, w, h);\n\n  if (alphaChanged) {\n    this.context.restore();\n  }\n  if (alpha !== 1) {\n    frameState.animate = true;\n  } else if (transition) {\n    tile.endTransition(uid);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.TileLayer.prototype.getImage = function() {\n  var context = this.context;\n  return context ? context.canvas : null;\n};\n\n\n/**\n * @function\n * @return {ol.layer.Tile|ol.layer.VectorTile}\n */\nol.renderer.canvas.TileLayer.prototype.getLayer;\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.TileLayer.prototype.getImageTransform = function() {\n  return this.imageTransform_;\n};\n\n\n/**\n * @fileoverview\n * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, unusedLocalVariables, uselessCode, visibility}\n */\ngoog.provide('ol.ext.rbush');\n\n/** @typedef {function(*)} */\nol.ext.rbush = function() {};\n\n(function() {(function (exports) {\n'use strict';\n\nvar quickselect_1 = quickselect;\nvar default_1 = quickselect;\nfunction quickselect(arr, k, left, right, compare) {\n    quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\nfunction quickselectStep(arr, k, left, right, compare) {\n    while (right > left) {\n        if (right - left > 600) {\n            var n = right - left + 1;\n            var m = k - left + 1;\n            var z = Math.log(n);\n            var s = 0.5 * Math.exp(2 * z / 3);\n            var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselectStep(arr, k, newLeft, newRight, compare);\n        }\n        var t = arr[k];\n        var i = left;\n        var j = right;\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\nfunction swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\nquickselect_1.default = default_1;\n\nvar rbush_1 = rbush;\nfunction rbush(maxEntries, format) {\n    if (!(this instanceof rbush)) return new rbush(maxEntries, format);\n    this._maxEntries = Math.max(4, maxEntries || 9);\n    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n    if (format) {\n        this._initFormat(format);\n    }\n    this.clear();\n}\nrbush.prototype = {\n    all: function () {\n        return this._all(this.data, []);\n    },\n    search: function (bbox) {\n        var node = this.data,\n            result = [],\n            toBBox = this.toBBox;\n        if (!intersects(bbox, node)) return result;\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf) result.push(child);\n                    else if (contains(bbox, childBBox)) this._all(child, result);\n                    else nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n        return result;\n    },\n    collides: function (bbox) {\n        var node = this.data,\n            toBBox = this.toBBox;\n        if (!intersects(bbox, node)) return false;\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf || contains(bbox, childBBox)) return true;\n                    nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n        return false;\n    },\n    load: function (data) {\n        if (!(data && data.length)) return this;\n        if (data.length < this._minEntries) {\n            for (var i = 0, len = data.length; i < len; i++) {\n                this.insert(data[i]);\n            }\n            return this;\n        }\n        var node = this._build(data.slice(), 0, data.length - 1, 0);\n        if (!this.data.children.length) {\n            this.data = node;\n        } else if (this.data.height === node.height) {\n            this._splitRoot(this.data, node);\n        } else {\n            if (this.data.height < node.height) {\n                var tmpNode = this.data;\n                this.data = node;\n                node = tmpNode;\n            }\n            this._insert(node, this.data.height - node.height - 1, true);\n        }\n        return this;\n    },\n    insert: function (item) {\n        if (item) this._insert(item, this.data.height - 1);\n        return this;\n    },\n    clear: function () {\n        this.data = createNode([]);\n        return this;\n    },\n    remove: function (item, equalsFn) {\n        if (!item) return this;\n        var node = this.data,\n            bbox = this.toBBox(item),\n            path = [],\n            indexes = [],\n            i, parent, index, goingUp;\n        while (node || path.length) {\n            if (!node) {\n                node = path.pop();\n                parent = path[path.length - 1];\n                i = indexes.pop();\n                goingUp = true;\n            }\n            if (node.leaf) {\n                index = findItem(item, node.children, equalsFn);\n                if (index !== -1) {\n                    node.children.splice(index, 1);\n                    path.push(node);\n                    this._condense(path);\n                    return this;\n                }\n            }\n            if (!goingUp && !node.leaf && contains(node, bbox)) {\n                path.push(node);\n                indexes.push(i);\n                i = 0;\n                parent = node;\n                node = node.children[0];\n            } else if (parent) {\n                i++;\n                node = parent.children[i];\n                goingUp = false;\n            } else node = null;\n        }\n        return this;\n    },\n    toBBox: function (item) { return item; },\n    compareMinX: compareNodeMinX,\n    compareMinY: compareNodeMinY,\n    toJSON: function () { return this.data; },\n    fromJSON: function (data) {\n        this.data = data;\n        return this;\n    },\n    _all: function (node, result) {\n        var nodesToSearch = [];\n        while (node) {\n            if (node.leaf) result.push.apply(result, node.children);\n            else nodesToSearch.push.apply(nodesToSearch, node.children);\n            node = nodesToSearch.pop();\n        }\n        return result;\n    },\n    _build: function (items, left, right, height) {\n        var N = right - left + 1,\n            M = this._maxEntries,\n            node;\n        if (N <= M) {\n            node = createNode(items.slice(left, right + 1));\n            calcBBox(node, this.toBBox);\n            return node;\n        }\n        if (!height) {\n            height = Math.ceil(Math.log(N) / Math.log(M));\n            M = Math.ceil(N / Math.pow(M, height - 1));\n        }\n        node = createNode([]);\n        node.leaf = false;\n        node.height = height;\n        var N2 = Math.ceil(N / M),\n            N1 = N2 * Math.ceil(Math.sqrt(M)),\n            i, j, right2, right3;\n        multiSelect(items, left, right, N1, this.compareMinX);\n        for (i = left; i <= right; i += N1) {\n            right2 = Math.min(i + N1 - 1, right);\n            multiSelect(items, i, right2, N2, this.compareMinY);\n            for (j = i; j <= right2; j += N2) {\n                right3 = Math.min(j + N2 - 1, right2);\n                node.children.push(this._build(items, j, right3, height - 1));\n            }\n        }\n        calcBBox(node, this.toBBox);\n        return node;\n    },\n    _chooseSubtree: function (bbox, node, level, path) {\n        var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\n        while (true) {\n            path.push(node);\n            if (node.leaf || path.length - 1 === level) break;\n            minArea = minEnlargement = Infinity;\n            for (i = 0, len = node.children.length; i < len; i++) {\n                child = node.children[i];\n                area = bboxArea(child);\n                enlargement = enlargedArea(bbox, child) - area;\n                if (enlargement < minEnlargement) {\n                    minEnlargement = enlargement;\n                    minArea = area < minArea ? area : minArea;\n                    targetNode = child;\n                } else if (enlargement === minEnlargement) {\n                    if (area < minArea) {\n                        minArea = area;\n                        targetNode = child;\n                    }\n                }\n            }\n            node = targetNode || node.children[0];\n        }\n        return node;\n    },\n    _insert: function (item, level, isNode) {\n        var toBBox = this.toBBox,\n            bbox = isNode ? item : toBBox(item),\n            insertPath = [];\n        var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n        node.children.push(item);\n        extend(node, bbox);\n        while (level >= 0) {\n            if (insertPath[level].children.length > this._maxEntries) {\n                this._split(insertPath, level);\n                level--;\n            } else break;\n        }\n        this._adjustParentBBoxes(bbox, insertPath, level);\n    },\n    _split: function (insertPath, level) {\n        var node = insertPath[level],\n            M = node.children.length,\n            m = this._minEntries;\n        this._chooseSplitAxis(node, m, M);\n        var splitIndex = this._chooseSplitIndex(node, m, M);\n        var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n        newNode.height = node.height;\n        newNode.leaf = node.leaf;\n        calcBBox(node, this.toBBox);\n        calcBBox(newNode, this.toBBox);\n        if (level) insertPath[level - 1].children.push(newNode);\n        else this._splitRoot(node, newNode);\n    },\n    _splitRoot: function (node, newNode) {\n        this.data = createNode([node, newNode]);\n        this.data.height = node.height + 1;\n        this.data.leaf = false;\n        calcBBox(this.data, this.toBBox);\n    },\n    _chooseSplitIndex: function (node, m, M) {\n        var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\n        minOverlap = minArea = Infinity;\n        for (i = m; i <= M - m; i++) {\n            bbox1 = distBBox(node, 0, i, this.toBBox);\n            bbox2 = distBBox(node, i, M, this.toBBox);\n            overlap = intersectionArea(bbox1, bbox2);\n            area = bboxArea(bbox1) + bboxArea(bbox2);\n            if (overlap < minOverlap) {\n                minOverlap = overlap;\n                index = i;\n                minArea = area < minArea ? area : minArea;\n            } else if (overlap === minOverlap) {\n                if (area < minArea) {\n                    minArea = area;\n                    index = i;\n                }\n            }\n        }\n        return index;\n    },\n    _chooseSplitAxis: function (node, m, M) {\n        var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\n            compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\n            xMargin = this._allDistMargin(node, m, M, compareMinX),\n            yMargin = this._allDistMargin(node, m, M, compareMinY);\n        if (xMargin < yMargin) node.children.sort(compareMinX);\n    },\n    _allDistMargin: function (node, m, M, compare) {\n        node.children.sort(compare);\n        var toBBox = this.toBBox,\n            leftBBox = distBBox(node, 0, m, toBBox),\n            rightBBox = distBBox(node, M - m, M, toBBox),\n            margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\n            i, child;\n        for (i = m; i < M - m; i++) {\n            child = node.children[i];\n            extend(leftBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(leftBBox);\n        }\n        for (i = M - m - 1; i >= m; i--) {\n            child = node.children[i];\n            extend(rightBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(rightBBox);\n        }\n        return margin;\n    },\n    _adjustParentBBoxes: function (bbox, path, level) {\n        for (var i = level; i >= 0; i--) {\n            extend(path[i], bbox);\n        }\n    },\n    _condense: function (path) {\n        for (var i = path.length - 1, siblings; i >= 0; i--) {\n            if (path[i].children.length === 0) {\n                if (i > 0) {\n                    siblings = path[i - 1].children;\n                    siblings.splice(siblings.indexOf(path[i]), 1);\n                } else this.clear();\n            } else calcBBox(path[i], this.toBBox);\n        }\n    },\n    _initFormat: function (format) {\n        var compareArr = ['return a', ' - b', ';'];\n        this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));\n        this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));\n        this.toBBox = new Function('a',\n            'return {minX: a' + format[0] +\n            ', minY: a' + format[1] +\n            ', maxX: a' + format[2] +\n            ', maxY: a' + format[3] + '};');\n    }\n};\nfunction findItem(item, items, equalsFn) {\n    if (!equalsFn) return items.indexOf(item);\n    for (var i = 0; i < items.length; i++) {\n        if (equalsFn(item, items[i])) return i;\n    }\n    return -1;\n}\nfunction calcBBox(node, toBBox) {\n    distBBox(node, 0, node.children.length, toBBox, node);\n}\nfunction distBBox(node, k, p, toBBox, destNode) {\n    if (!destNode) destNode = createNode(null);\n    destNode.minX = Infinity;\n    destNode.minY = Infinity;\n    destNode.maxX = -Infinity;\n    destNode.maxY = -Infinity;\n    for (var i = k, child; i < p; i++) {\n        child = node.children[i];\n        extend(destNode, node.leaf ? toBBox(child) : child);\n    }\n    return destNode;\n}\nfunction extend(a, b) {\n    a.minX = Math.min(a.minX, b.minX);\n    a.minY = Math.min(a.minY, b.minY);\n    a.maxX = Math.max(a.maxX, b.maxX);\n    a.maxY = Math.max(a.maxY, b.maxY);\n    return a;\n}\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\nfunction bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\nfunction enlargedArea(a, b) {\n    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\nfunction intersectionArea(a, b) {\n    var minX = Math.max(a.minX, b.minX),\n        minY = Math.max(a.minY, b.minY),\n        maxX = Math.min(a.maxX, b.maxX),\n        maxY = Math.min(a.maxY, b.maxY);\n    return Math.max(0, maxX - minX) *\n           Math.max(0, maxY - minY);\n}\nfunction contains(a, b) {\n    return a.minX <= b.minX &&\n           a.minY <= b.minY &&\n           b.maxX <= a.maxX &&\n           b.maxY <= a.maxY;\n}\nfunction intersects(a, b) {\n    return b.minX <= a.maxX &&\n           b.minY <= a.maxY &&\n           b.maxX >= a.minX &&\n           b.maxY >= a.minY;\n}\nfunction createNode(children) {\n    return {\n        children: children,\n        height: 1,\n        leaf: true,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n}\nfunction multiSelect(arr, left, right, n, compare) {\n    var stack = [left, right],\n        mid;\n    while (stack.length) {\n        right = stack.pop();\n        left = stack.pop();\n        if (right - left <= n) continue;\n        mid = left + Math.ceil((right - left) / n / 2) * n;\n        quickselect_1(arr, mid, left, right, compare);\n        stack.push(left, mid, mid, right);\n    }\n}\n\nexports['default'] = rbush_1;\n\n}((this.rbush = this.rbush || {})));}).call(ol.ext);\nol.ext.rbush = ol.ext.rbush.default;\n\ngoog.provide('ol.render.ReplayGroup');\n\n\n/**\n * Base class for replay groups.\n * @constructor\n * @abstract\n */\nol.render.ReplayGroup = function() {};\n\n\n/**\n * @abstract\n * @param {number|undefined} zIndex Z index.\n * @param {ol.render.ReplayType} replayType Replay type.\n * @return {ol.render.VectorContext} Replay.\n */\nol.render.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {};\n\n\n/**\n * @abstract\n * @return {boolean} Is empty.\n */\nol.render.ReplayGroup.prototype.isEmpty = function() {};\n\ngoog.provide('ol.render.ReplayType');\n\n\n/**\n * @enum {string}\n */\nol.render.ReplayType = {\n  CIRCLE: 'Circle',\n  DEFAULT: 'Default',\n  IMAGE: 'Image',\n  LINE_STRING: 'LineString',\n  POLYGON: 'Polygon',\n  TEXT: 'Text'\n};\n\ngoog.provide('ol.geom.flat.length');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Length.\n */\nol.geom.flat.length.lineString = function(flatCoordinates, offset, end, stride) {\n  var x1 = flatCoordinates[offset];\n  var y1 = flatCoordinates[offset + 1];\n  var length = 0;\n  var i;\n  for (i = offset + stride; i < end; i += stride) {\n    var x2 = flatCoordinates[i];\n    var y2 = flatCoordinates[i + 1];\n    length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n    x1 = x2;\n    y1 = y2;\n  }\n  return length;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Perimeter.\n */\nol.geom.flat.length.linearRing = function(flatCoordinates, offset, end, stride) {\n  var perimeter =\n      ol.geom.flat.length.lineString(flatCoordinates, offset, end, stride);\n  var dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n  var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n  perimeter += Math.sqrt(dx * dx + dy * dy);\n  return perimeter;\n};\n\ngoog.provide('ol.geom.flat.textpath');\n\ngoog.require('ol.math');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Path to put text on.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @param {string} text Text to place on the path.\n * @param {function(string):number} measure Measure function returning the\n * width of the character passed as 1st argument.\n * @param {number} startM m along the path where the text starts.\n * @param {number} maxAngle Max angle between adjacent chars in radians.\n * @return {Array.<Array.<*>>} The result array of null if `maxAngle` was\n * exceeded. Entries of the array are x, y, anchorX, angle, chunk.\n */\nol.geom.flat.textpath.lineString = function(\n    flatCoordinates, offset, end, stride, text, measure, startM, maxAngle) {\n  var result = [];\n\n  // Keep text upright\n  var reverse = flatCoordinates[offset] > flatCoordinates[end - stride];\n\n  var numChars = text.length;\n\n  var x1 = flatCoordinates[offset];\n  var y1 = flatCoordinates[offset + 1];\n  offset += stride;\n  var x2 = flatCoordinates[offset];\n  var y2 = flatCoordinates[offset + 1];\n  var segmentM = 0;\n  var segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n\n  var chunk = '';\n  var chunkLength = 0;\n  var data, index, previousAngle;\n  for (var i = 0; i < numChars; ++i) {\n    index = reverse ? numChars - i - 1 : i;\n    var char = text.charAt(index);\n    chunk = reverse ? char + chunk : chunk + char;\n    var charLength = measure(chunk) - chunkLength;\n    chunkLength += charLength;\n    var charM = startM + charLength / 2;\n    while (offset < end - stride && segmentM + segmentLength < charM) {\n      x1 = x2;\n      y1 = y2;\n      offset += stride;\n      x2 = flatCoordinates[offset];\n      y2 = flatCoordinates[offset + 1];\n      segmentM += segmentLength;\n      segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n    }\n    var segmentPos = charM - segmentM;\n    var angle = Math.atan2(y2 - y1, x2 - x1);\n    if (reverse) {\n      angle += angle > 0 ? -Math.PI : Math.PI;\n    }\n    if (previousAngle !== undefined) {\n      var delta = angle - previousAngle;\n      delta += (delta > Math.PI) ? -2 * Math.PI : (delta < -Math.PI) ? 2 * Math.PI : 0;\n      if (Math.abs(delta) > maxAngle) {\n        return null;\n      }\n    }\n    var interpolate = segmentPos / segmentLength;\n    var x = ol.math.lerp(x1, x2, interpolate);\n    var y = ol.math.lerp(y1, y2, interpolate);\n    if (previousAngle == angle) {\n      if (reverse) {\n        data[0] = x;\n        data[1] = y;\n        data[2] = charLength / 2;\n      }\n      data[4] = chunk;\n    } else {\n      chunk = char;\n      chunkLength = charLength;\n      data = [x, y, charLength / 2, angle, chunk];\n      if (reverse) {\n        result.unshift(data);\n      } else {\n        result.push(data);\n      }\n      previousAngle = angle;\n    }\n    startM += charLength;\n  }\n  return result;\n};\n\ngoog.provide('ol.render.canvas.Instruction');\n\n/**\n * @enum {number}\n */\nol.render.canvas.Instruction = {\n  BEGIN_GEOMETRY: 0,\n  BEGIN_PATH: 1,\n  CIRCLE: 2,\n  CLOSE_PATH: 3,\n  CUSTOM: 4,\n  DRAW_CHARS: 5,\n  DRAW_IMAGE: 6,\n  END_GEOMETRY: 7,\n  FILL: 8,\n  MOVE_TO_LINE_TO: 9,\n  SET_FILL_STYLE: 10,\n  SET_STROKE_STYLE: 11,\n  STROKE: 12\n};\n\ngoog.provide('ol.render.replay');\n\ngoog.require('ol.render.ReplayType');\n\n\n/**\n * @const\n * @type {Array.<ol.render.ReplayType>}\n */\nol.render.replay.ORDER = [\n  ol.render.ReplayType.POLYGON,\n  ol.render.ReplayType.CIRCLE,\n  ol.render.ReplayType.LINE_STRING,\n  ol.render.ReplayType.IMAGE,\n  ol.render.ReplayType.TEXT,\n  ol.render.ReplayType.DEFAULT\n];\n\n/**\n * @const\n * @enum {number}\n */\nol.render.replay.TEXT_ALIGN = {};\nol.render.replay.TEXT_ALIGN['left'] = 0;\nol.render.replay.TEXT_ALIGN['end'] = 0;\nol.render.replay.TEXT_ALIGN['center'] = 0.5;\nol.render.replay.TEXT_ALIGN['right'] = 1;\nol.render.replay.TEXT_ALIGN['start'] = 1;\nol.render.replay.TEXT_ALIGN['top'] = 0;\nol.render.replay.TEXT_ALIGN['middle'] = 0.5;\nol.render.replay.TEXT_ALIGN['hanging'] = 0.2;\nol.render.replay.TEXT_ALIGN['alphabetic'] = 0.8;\nol.render.replay.TEXT_ALIGN['ideographic'] = 0.8;\nol.render.replay.TEXT_ALIGN['bottom'] = 1;\n\ngoog.provide('ol.render.canvas.Replay');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.colorlike');\ngoog.require('ol.extent');\ngoog.require('ol.extent.Relationship');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.length');\ngoog.require('ol.geom.flat.textpath');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.has');\ngoog.require('ol.obj');\ngoog.require('ol.render.VectorContext');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.Instruction');\ngoog.require('ol.render.replay');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.render.VectorContext}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {?} declutterTree Declutter tree.\n * @struct\n */\nol.render.canvas.Replay = function(tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {\n  ol.render.VectorContext.call(this);\n\n  /**\n   * @type {?}\n   */\n  this.declutterTree = declutterTree;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.tmpExtent_ = ol.extent.createEmpty();\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.tolerance = tolerance;\n\n  /**\n   * @protected\n   * @const\n   * @type {ol.Extent}\n   */\n  this.maxExtent = maxExtent;\n\n  /**\n   * @protected\n   * @type {boolean}\n   */\n  this.overlaps = overlaps;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.pixelRatio = pixelRatio;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.maxLineWidth = 0;\n\n  /**\n   * @protected\n   * @const\n   * @type {number}\n   */\n  this.resolution = resolution;\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.fillOrigin_;\n\n  /**\n   * @private\n   * @type {Array.<*>}\n   */\n  this.beginGeometryInstruction1_ = null;\n\n  /**\n   * @private\n   * @type {Array.<*>}\n   */\n  this.beginGeometryInstruction2_ = null;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.bufferedMaxExtent_ = null;\n\n  /**\n   * @protected\n   * @type {Array.<*>}\n   */\n  this.instructions = [];\n\n  /**\n   * @protected\n   * @type {Array.<number>}\n   */\n  this.coordinates = [];\n\n  /**\n   * @private\n   * @type {Object.<number,ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>>}\n   */\n  this.coordinateCache_ = {};\n\n  /**\n   * @private\n   * @type {!ol.Transform}\n   */\n  this.renderedTransform_ = ol.transform.create();\n\n  /**\n   * @protected\n   * @type {Array.<*>}\n   */\n  this.hitDetectionInstructions = [];\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.pixelCoordinates_ = null;\n\n  /**\n   * @protected\n   * @type {ol.CanvasFillStrokeState}\n   */\n  this.state = /** @type {ol.CanvasFillStrokeState} */ ({});\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.viewRotation_ = 0;\n\n  /**\n   * @private\n   * @type {!ol.Transform}\n   */\n  this.tmpLocalTransform_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {!ol.Transform}\n   */\n  this.resetTransform_ = ol.transform.create();\n};\nol.inherits(ol.render.canvas.Replay, ol.render.VectorContext);\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Coordinate} p1 1st point of the background box.\n * @param {ol.Coordinate} p2 2nd point of the background box.\n * @param {ol.Coordinate} p3 3rd point of the background box.\n * @param {ol.Coordinate} p4 4th point of the background box.\n * @param {Array.<*>} fillInstruction Fill instruction.\n * @param {Array.<*>} strokeInstruction Stroke instruction.\n */\nol.render.canvas.Replay.prototype.replayTextBackground_ = function(context, p1, p2, p3, p4,\n    fillInstruction, strokeInstruction) {\n  context.beginPath();\n  context.moveTo.apply(context, p1);\n  context.lineTo.apply(context, p2);\n  context.lineTo.apply(context, p3);\n  context.lineTo.apply(context, p4);\n  context.lineTo.apply(context, p1);\n  if (fillInstruction) {\n    this.fillOrigin_ = /** @type {Array.<number>} */ (fillInstruction[2]);\n    this.fill_(context);\n  }\n  if (strokeInstruction) {\n    this.setStrokeStyle_(context, /** @type {Array.<*>} */ (strokeInstruction));\n    context.stroke();\n  }\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image.\n * @param {number} anchorX Anchor X.\n * @param {number} anchorY Anchor Y.\n * @param {ol.DeclutterGroup} declutterGroup Declutter group.\n * @param {number} height Height.\n * @param {number} opacity Opacity.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} rotation Rotation.\n * @param {number} scale Scale.\n * @param {boolean} snapToPixel Snap to pixel.\n * @param {number} width Width.\n * @param {Array.<number>} padding Padding.\n * @param {Array.<*>} fillInstruction Fill instruction.\n * @param {Array.<*>} strokeInstruction Stroke instruction.\n */\nol.render.canvas.Replay.prototype.replayImage_ = function(context, x, y, image,\n    anchorX, anchorY, declutterGroup, height, opacity, originX, originY,\n    rotation, scale, snapToPixel, width, padding, fillInstruction, strokeInstruction) {\n  var fillStroke = fillInstruction || strokeInstruction;\n  var localTransform = this.tmpLocalTransform_;\n  anchorX *= scale;\n  anchorY *= scale;\n  x -= anchorX;\n  y -= anchorY;\n  if (snapToPixel) {\n    x = Math.round(x);\n    y = Math.round(y);\n  }\n\n  var w = (width + originX > image.width) ? image.width - originX : width;\n  var h = (height + originY > image.height) ? image.height - originY : height;\n  var box = this.tmpExtent_;\n  var boxW = padding[3] + w * scale + padding[1];\n  var boxH = padding[0] + h * scale + padding[2];\n  var boxX = x - padding[3];\n  var boxY = y - padding[0];\n\n  /** @type {ol.Coordinate} */\n  var p1;\n  /** @type {ol.Coordinate} */\n  var p2;\n  /** @type {ol.Coordinate} */\n  var p3;\n  /** @type {ol.Coordinate} */\n  var p4;\n  if (fillStroke || rotation !== 0) {\n    p1 = [boxX, boxY];\n    p2 = [boxX + boxW, boxY];\n    p3 = [boxX + boxW, boxY + boxH];\n    p4 = [boxX, boxY + boxH];\n  }\n\n  var transform = null;\n  if (rotation !== 0) {\n    var centerX = x + anchorX;\n    var centerY = y + anchorY;\n    transform = ol.transform.compose(localTransform,\n        centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n\n    ol.extent.createOrUpdateEmpty(box);\n    ol.extent.extendCoordinate(box, ol.transform.apply(localTransform, p1));\n    ol.extent.extendCoordinate(box, ol.transform.apply(localTransform, p2));\n    ol.extent.extendCoordinate(box, ol.transform.apply(localTransform, p3));\n    ol.extent.extendCoordinate(box, ol.transform.apply(localTransform, p4));\n  } else {\n    ol.extent.createOrUpdate(boxX, boxY, boxX + boxW, boxY + boxH, box);\n  }\n  var canvas = context.canvas;\n  var intersects = box[0] <= canvas.width && box[2] >= 0 && box[1] <= canvas.height && box[3] >= 0;\n  if (declutterGroup) {\n    if (!intersects && declutterGroup[4] == 1) {\n      return;\n    }\n    ol.extent.extend(declutterGroup, box);\n    var declutterArgs = intersects ?\n      [context, transform ? transform.slice(0) : null, opacity, image, originX, originY, w, h, x, y, scale] :\n      null;\n    if (declutterArgs && fillStroke) {\n      declutterArgs.push(fillInstruction, strokeInstruction, p1, p2, p3, p4);\n    }\n    declutterGroup.push(declutterArgs);\n  } else if (intersects) {\n    if (fillStroke) {\n      this.replayTextBackground_(context, p1, p2, p3, p4,\n          /** @type {Array.<*>} */ (fillInstruction),\n          /** @type {Array.<*>} */ (strokeInstruction));\n    }\n    ol.render.canvas.drawImage(context, transform, opacity, image, originX, originY, w, h, x, y, scale);\n  }\n};\n\n\n/**\n * @protected\n * @param {Array.<number>} dashArray Dash array.\n * @return {Array.<number>} Dash array with pixel ratio applied\n */\nol.render.canvas.Replay.prototype.applyPixelRatio = function(dashArray) {\n  var pixelRatio = this.pixelRatio;\n  return pixelRatio == 1 ? dashArray : dashArray.map(function(dash) {\n    return dash * pixelRatio;\n  });\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} closed Last input coordinate equals first.\n * @param {boolean} skipFirst Skip first coordinate.\n * @protected\n * @return {number} My end.\n */\nol.render.canvas.Replay.prototype.appendFlatCoordinates = function(flatCoordinates, offset, end, stride, closed, skipFirst) {\n\n  var myEnd = this.coordinates.length;\n  var extent = this.getBufferedMaxExtent();\n  if (skipFirst) {\n    offset += stride;\n  }\n  var lastCoord = [flatCoordinates[offset], flatCoordinates[offset + 1]];\n  var nextCoord = [NaN, NaN];\n  var skipped = true;\n\n  var i, lastRel, nextRel;\n  for (i = offset + stride; i < end; i += stride) {\n    nextCoord[0] = flatCoordinates[i];\n    nextCoord[1] = flatCoordinates[i + 1];\n    nextRel = ol.extent.coordinateRelationship(extent, nextCoord);\n    if (nextRel !== lastRel) {\n      if (skipped) {\n        this.coordinates[myEnd++] = lastCoord[0];\n        this.coordinates[myEnd++] = lastCoord[1];\n      }\n      this.coordinates[myEnd++] = nextCoord[0];\n      this.coordinates[myEnd++] = nextCoord[1];\n      skipped = false;\n    } else if (nextRel === ol.extent.Relationship.INTERSECTING) {\n      this.coordinates[myEnd++] = nextCoord[0];\n      this.coordinates[myEnd++] = nextCoord[1];\n      skipped = false;\n    } else {\n      skipped = true;\n    }\n    lastCoord[0] = nextCoord[0];\n    lastCoord[1] = nextCoord[1];\n    lastRel = nextRel;\n  }\n\n  // Last coordinate equals first or only one point to append:\n  if ((closed && skipped) || i === offset + stride) {\n    this.coordinates[myEnd++] = lastCoord[0];\n    this.coordinates[myEnd++] = lastCoord[1];\n  }\n  return myEnd;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array.<number>} replayEnds Replay ends.\n * @return {number} Offset.\n */\nol.render.canvas.Replay.prototype.drawCustomCoordinates_ = function(flatCoordinates, offset, ends, stride, replayEnds) {\n  for (var i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var replayEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false);\n    replayEnds.push(replayEnd);\n    offset = end;\n  }\n  return offset;\n};\n\n\n/**\n * @inheritDoc.\n */\nol.render.canvas.Replay.prototype.drawCustom = function(geometry, feature, renderer) {\n  this.beginGeometry(geometry, feature);\n  var type = geometry.getType();\n  var stride = geometry.getStride();\n  var replayBegin = this.coordinates.length;\n  var flatCoordinates, replayEnd, replayEnds, replayEndss;\n  var offset;\n  if (type == ol.geom.GeometryType.MULTI_POLYGON) {\n    geometry = /** @type {ol.geom.MultiPolygon} */ (geometry);\n    flatCoordinates = geometry.getOrientedFlatCoordinates();\n    replayEndss = [];\n    var endss = geometry.getEndss();\n    offset = 0;\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n      var myEnds = [];\n      offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds);\n      replayEndss.push(myEnds);\n    }\n    this.instructions.push([ol.render.canvas.Instruction.CUSTOM,\n      replayBegin, replayEndss, geometry, renderer, ol.geom.flat.inflate.coordinatesss]);\n  } else if (type == ol.geom.GeometryType.POLYGON || type == ol.geom.GeometryType.MULTI_LINE_STRING) {\n    replayEnds = [];\n    flatCoordinates = (type == ol.geom.GeometryType.POLYGON) ?\n      /** @type {ol.geom.Polygon} */ (geometry).getOrientedFlatCoordinates() :\n      geometry.getFlatCoordinates();\n    offset = this.drawCustomCoordinates_(flatCoordinates, 0,\n        /** @type {ol.geom.Polygon|ol.geom.MultiLineString} */ (geometry).getEnds(),\n        stride, replayEnds);\n    this.instructions.push([ol.render.canvas.Instruction.CUSTOM,\n      replayBegin, replayEnds, geometry, renderer, ol.geom.flat.inflate.coordinatess]);\n  } else if (type == ol.geom.GeometryType.LINE_STRING || type == ol.geom.GeometryType.MULTI_POINT) {\n    flatCoordinates = geometry.getFlatCoordinates();\n    replayEnd = this.appendFlatCoordinates(\n        flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n    this.instructions.push([ol.render.canvas.Instruction.CUSTOM,\n      replayBegin, replayEnd, geometry, renderer, ol.geom.flat.inflate.coordinates]);\n  } else if (type == ol.geom.GeometryType.POINT) {\n    flatCoordinates = geometry.getFlatCoordinates();\n    this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);\n    replayEnd = this.coordinates.length;\n    this.instructions.push([ol.render.canvas.Instruction.CUSTOM,\n      replayBegin, replayEnd, geometry, renderer]);\n  }\n  this.endGeometry(geometry, feature);\n};\n\n\n/**\n * @protected\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.canvas.Replay.prototype.beginGeometry = function(geometry, feature) {\n  this.beginGeometryInstruction1_ =\n      [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];\n  this.instructions.push(this.beginGeometryInstruction1_);\n  this.beginGeometryInstruction2_ =\n      [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];\n  this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);\n};\n\n\n/**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n */\nol.render.canvas.Replay.prototype.fill_ = function(context) {\n  if (this.fillOrigin_) {\n    var origin = ol.transform.apply(this.renderedTransform_, this.fillOrigin_.slice());\n    context.translate(origin[0], origin[1]);\n    context.rotate(this.viewRotation_);\n  }\n  context.fill();\n  if (this.fillOrigin_) {\n    context.setTransform.apply(context, ol.render.canvas.resetTransform_);\n  }\n};\n\n\n/**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {Array.<*>} instruction Instruction.\n */\nol.render.canvas.Replay.prototype.setStrokeStyle_ = function(context, instruction) {\n  context.strokeStyle = /** @type {ol.ColorLike} */ (instruction[1]);\n  context.lineWidth = /** @type {number} */ (instruction[2]);\n  context.lineCap = /** @type {string} */ (instruction[3]);\n  context.lineJoin = /** @type {string} */ (instruction[4]);\n  context.miterLimit = /** @type {number} */ (instruction[5]);\n  if (ol.has.CANVAS_LINE_DASH) {\n    context.lineDashOffset = /** @type {number} */ (instruction[7]);\n    context.setLineDash(/** @type {Array.<number>} */ (instruction[6]));\n  }\n};\n\n\n/**\n * @param {ol.DeclutterGroup} declutterGroup Declutter group.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.canvas.Replay.prototype.renderDeclutter_ = function(declutterGroup, feature) {\n  if (declutterGroup && declutterGroup.length > 5) {\n    var groupCount = declutterGroup[4];\n    if (groupCount == 1 || groupCount == declutterGroup.length - 5) {\n      /** @type {ol.RBushEntry} */\n      var box = {\n        minX: /** @type {number} */ (declutterGroup[0]),\n        minY: /** @type {number} */ (declutterGroup[1]),\n        maxX: /** @type {number} */ (declutterGroup[2]),\n        maxY: /** @type {number} */ (declutterGroup[3]),\n        value: feature\n      };\n      if (!this.declutterTree.collides(box)) {\n        this.declutterTree.insert(box);\n        var drawImage = ol.render.canvas.drawImage;\n        for (var j = 5, jj = declutterGroup.length; j < jj; ++j) {\n          var declutterData = /** @type {Array} */ (declutterGroup[j]);\n          if (declutterData) {\n            if (declutterData.length > 11) {\n              this.replayTextBackground_(declutterData[0],\n                  declutterData[13], declutterData[14], declutterData[15], declutterData[16],\n                  declutterData[11], declutterData[12]);\n            }\n            drawImage.apply(undefined, declutterData);\n          }\n        }\n      }\n      declutterGroup.length = 5;\n      ol.extent.createOrUpdateEmpty(declutterGroup);\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform} transform Transform.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *     to skip.\n * @param {Array.<*>} instructions Instructions array.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined}\n *     featureCallback Feature callback.\n * @param {ol.Extent=} opt_hitExtent Only check features that intersect this\n *     extent.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.canvas.Replay.prototype.replay_ = function(\n    context, transform, skippedFeaturesHash,\n    instructions, featureCallback, opt_hitExtent) {\n  /** @type {Array.<number>} */\n  var pixelCoordinates;\n  if (this.pixelCoordinates_ && ol.array.equals(transform, this.renderedTransform_)) {\n    pixelCoordinates = this.pixelCoordinates_;\n  } else {\n    if (!this.pixelCoordinates_) {\n      this.pixelCoordinates_ = [];\n    }\n    pixelCoordinates = ol.geom.flat.transform.transform2D(\n        this.coordinates, 0, this.coordinates.length, 2,\n        transform, this.pixelCoordinates_);\n    ol.transform.setFromArray(this.renderedTransform_, transform);\n  }\n  var skipFeatures = !ol.obj.isEmpty(skippedFeaturesHash);\n  var i = 0; // instruction index\n  var ii = instructions.length; // end of instructions\n  var d = 0; // data index\n  var dd; // end of per-instruction data\n  var anchorX, anchorY, prevX, prevY, roundX, roundY, declutterGroup, image;\n  var pendingFill = 0;\n  var pendingStroke = 0;\n  var lastFillInstruction = null;\n  var lastStrokeInstruction = null;\n  var coordinateCache = this.coordinateCache_;\n  var viewRotation = this.viewRotation_;\n\n  var state = /** @type {olx.render.State} */ ({\n    context: context,\n    pixelRatio: this.pixelRatio,\n    resolution: this.resolution,\n    rotation: viewRotation\n  });\n\n  // When the batch size gets too big, performance decreases. 200 is a good\n  // balance between batch size and number of fill/stroke instructions.\n  var batchSize =\n      this.instructions != instructions || this.overlaps ? 0 : 200;\n  while (i < ii) {\n    var instruction = instructions[i];\n    var type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]);\n    var /** @type {ol.Feature|ol.render.Feature} */ feature, x, y;\n    switch (type) {\n      case ol.render.canvas.Instruction.BEGIN_GEOMETRY:\n        feature = /** @type {ol.Feature|ol.render.Feature} */ (instruction[1]);\n        if ((skipFeatures &&\n            skippedFeaturesHash[ol.getUid(feature).toString()]) ||\n            !feature.getGeometry()) {\n          i = /** @type {number} */ (instruction[2]);\n        } else if (opt_hitExtent !== undefined && !ol.extent.intersects(\n            opt_hitExtent, feature.getGeometry().getExtent())) {\n          i = /** @type {number} */ (instruction[2]) + 1;\n        } else {\n          ++i;\n        }\n        break;\n      case ol.render.canvas.Instruction.BEGIN_PATH:\n        if (pendingFill > batchSize) {\n          this.fill_(context);\n          pendingFill = 0;\n        }\n        if (pendingStroke > batchSize) {\n          context.stroke();\n          pendingStroke = 0;\n        }\n        if (!pendingFill && !pendingStroke) {\n          context.beginPath();\n          prevX = prevY = NaN;\n        }\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.CIRCLE:\n        d = /** @type {number} */ (instruction[1]);\n        var x1 = pixelCoordinates[d];\n        var y1 = pixelCoordinates[d + 1];\n        var x2 = pixelCoordinates[d + 2];\n        var y2 = pixelCoordinates[d + 3];\n        var dx = x2 - x1;\n        var dy = y2 - y1;\n        var r = Math.sqrt(dx * dx + dy * dy);\n        context.moveTo(x1 + r, y1);\n        context.arc(x1, y1, r, 0, 2 * Math.PI, true);\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.CLOSE_PATH:\n        context.closePath();\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.CUSTOM:\n        d = /** @type {number} */ (instruction[1]);\n        dd = instruction[2];\n        var geometry = /** @type {ol.geom.SimpleGeometry} */ (instruction[3]);\n        var renderer = instruction[4];\n        var fn = instruction.length == 6 ? instruction[5] : undefined;\n        state.geometry = geometry;\n        state.feature = feature;\n        if (!(i in coordinateCache)) {\n          coordinateCache[i] = [];\n        }\n        var coords = coordinateCache[i];\n        if (fn) {\n          fn(pixelCoordinates, d, dd, 2, coords);\n        } else {\n          coords[0] = pixelCoordinates[d];\n          coords[1] = pixelCoordinates[d + 1];\n          coords.length = 2;\n        }\n        renderer(coords, state);\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.DRAW_IMAGE:\n        d = /** @type {number} */ (instruction[1]);\n        dd = /** @type {number} */ (instruction[2]);\n        image =  /** @type {HTMLCanvasElement|HTMLVideoElement|Image} */\n            (instruction[3]);\n        // Remaining arguments in DRAW_IMAGE are in alphabetical order\n        anchorX = /** @type {number} */ (instruction[4]);\n        anchorY = /** @type {number} */ (instruction[5]);\n        declutterGroup = featureCallback ? null : /** @type {ol.DeclutterGroup} */ (instruction[6]);\n        var height = /** @type {number} */ (instruction[7]);\n        var opacity = /** @type {number} */ (instruction[8]);\n        var originX = /** @type {number} */ (instruction[9]);\n        var originY = /** @type {number} */ (instruction[10]);\n        var rotateWithView = /** @type {boolean} */ (instruction[11]);\n        var rotation = /** @type {number} */ (instruction[12]);\n        var scale = /** @type {number} */ (instruction[13]);\n        var snapToPixel = /** @type {boolean} */ (instruction[14]);\n        var width = /** @type {number} */ (instruction[15]);\n\n        var padding, backgroundFill, backgroundStroke;\n        if (instruction.length > 16) {\n          padding = /** @type {Array.<number>} */ (instruction[16]);\n          backgroundFill = /** @type {boolean} */ (instruction[17]);\n          backgroundStroke = /** @type {boolean} */ (instruction[18]);\n        } else {\n          padding = ol.render.canvas.defaultPadding;\n          backgroundFill = backgroundStroke = false;\n        }\n\n        if (rotateWithView) {\n          rotation += viewRotation;\n        }\n        for (; d < dd; d += 2) {\n          this.replayImage_(context,\n              pixelCoordinates[d], pixelCoordinates[d + 1], image, anchorX, anchorY,\n              declutterGroup, height, opacity, originX, originY, rotation, scale,\n              snapToPixel, width, padding,\n              backgroundFill ? /** @type {Array.<*>} */ (lastFillInstruction) : null,\n              backgroundStroke ? /** @type {Array.<*>} */ (lastStrokeInstruction) : null);\n        }\n        this.renderDeclutter_(declutterGroup, feature);\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.DRAW_CHARS:\n        var begin = /** @type {number} */ (instruction[1]);\n        var end = /** @type {number} */ (instruction[2]);\n        var baseline = /** @type {number} */ (instruction[3]);\n        declutterGroup = featureCallback ? null : /** @type {ol.DeclutterGroup} */ (instruction[4]);\n        var overflow = /** @type {number} */ (instruction[5]);\n        var fillKey = /** @type {string} */ (instruction[6]);\n        var maxAngle = /** @type {number} */ (instruction[7]);\n        var measure = /** @type {function(string):number} */ (instruction[8]);\n        var offsetY = /** @type {number} */ (instruction[9]);\n        var strokeKey = /** @type {string} */ (instruction[10]);\n        var strokeWidth =  /** @type {number} */ (instruction[11]);\n        var text = /** @type {string} */ (instruction[12]);\n        var textKey = /** @type {string} */ (instruction[13]);\n        var textScale = /** @type {number} */ (instruction[14]);\n\n        var pathLength = ol.geom.flat.length.lineString(pixelCoordinates, begin, end, 2);\n        var textLength = measure(text);\n        if (overflow || textLength <= pathLength) {\n          var textAlign = /** @type {ol.render.canvas.TextReplay} */ (this).textStates[textKey].textAlign;\n          var startM = (pathLength - textLength) * ol.render.replay.TEXT_ALIGN[textAlign];\n          var parts = ol.geom.flat.textpath.lineString(\n              pixelCoordinates, begin, end, 2, text, measure, startM, maxAngle);\n          if (parts) {\n            var c, cc, chars, label, part;\n            if (strokeKey) {\n              for (c = 0, cc = parts.length; c < cc; ++c) {\n                part = parts[c]; // x, y, anchorX, rotation, chunk\n                chars = /** @type {string} */ (part[4]);\n                label = /** @type {ol.render.canvas.TextReplay} */ (this).getImage(chars, textKey, '', strokeKey);\n                anchorX = /** @type {number} */ (part[2]) + strokeWidth;\n                anchorY = baseline * label.height + (0.5 - baseline) * 2 * strokeWidth - offsetY;\n                this.replayImage_(context,\n                    /** @type {number} */ (part[0]), /** @type {number} */ (part[1]), label,\n                    anchorX, anchorY, declutterGroup, label.height, 1, 0, 0,\n                    /** @type {number} */ (part[3]), textScale, false, label.width,\n                    ol.render.canvas.defaultPadding, null, null);\n              }\n            }\n            if (fillKey) {\n              for (c = 0, cc = parts.length; c < cc; ++c) {\n                part = parts[c]; // x, y, anchorX, rotation, chunk\n                chars = /** @type {string} */ (part[4]);\n                label = /** @type {ol.render.canvas.TextReplay} */ (this).getImage(chars, textKey, fillKey, '');\n                anchorX = /** @type {number} */ (part[2]);\n                anchorY = baseline * label.height - offsetY;\n                this.replayImage_(context,\n                    /** @type {number} */ (part[0]), /** @type {number} */ (part[1]), label,\n                    anchorX, anchorY, declutterGroup, label.height, 1, 0, 0,\n                    /** @type {number} */ (part[3]), textScale, false, label.width,\n                    ol.render.canvas.defaultPadding, null, null);\n              }\n            }\n          }\n        }\n        this.renderDeclutter_(declutterGroup, feature);\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.END_GEOMETRY:\n        if (featureCallback !== undefined) {\n          feature = /** @type {ol.Feature|ol.render.Feature} */ (instruction[1]);\n          var result = featureCallback(feature);\n          if (result) {\n            return result;\n          }\n        }\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.FILL:\n        if (batchSize) {\n          pendingFill++;\n        } else {\n          this.fill_(context);\n        }\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.MOVE_TO_LINE_TO:\n        d = /** @type {number} */ (instruction[1]);\n        dd = /** @type {number} */ (instruction[2]);\n        x = pixelCoordinates[d];\n        y = pixelCoordinates[d + 1];\n        roundX = (x + 0.5) | 0;\n        roundY = (y + 0.5) | 0;\n        if (roundX !== prevX || roundY !== prevY) {\n          context.moveTo(x, y);\n          prevX = roundX;\n          prevY = roundY;\n        }\n        for (d += 2; d < dd; d += 2) {\n          x = pixelCoordinates[d];\n          y = pixelCoordinates[d + 1];\n          roundX = (x + 0.5) | 0;\n          roundY = (y + 0.5) | 0;\n          if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {\n            context.lineTo(x, y);\n            prevX = roundX;\n            prevY = roundY;\n          }\n        }\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.SET_FILL_STYLE:\n        lastFillInstruction = instruction;\n        this.fillOrigin_ = instruction[2];\n\n        if (pendingFill) {\n          this.fill_(context);\n          pendingFill = 0;\n          if (pendingStroke) {\n            context.stroke();\n            pendingStroke = 0;\n          }\n        }\n\n        context.fillStyle = /** @type {ol.ColorLike} */ (instruction[1]);\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.SET_STROKE_STYLE:\n        lastStrokeInstruction = instruction;\n        if (pendingStroke) {\n          context.stroke();\n          pendingStroke = 0;\n        }\n        this.setStrokeStyle_(context, /** @type {Array.<*>} */ (instruction));\n        ++i;\n        break;\n      case ol.render.canvas.Instruction.STROKE:\n        if (batchSize) {\n          pendingStroke++;\n        } else {\n          context.stroke();\n        }\n        ++i;\n        break;\n      default:\n        ++i; // consume the instruction anyway, to avoid an infinite loop\n        break;\n    }\n  }\n  if (pendingFill) {\n    this.fill_(context);\n  }\n  if (pendingStroke) {\n    context.stroke();\n  }\n  return undefined;\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *     to skip.\n */\nol.render.canvas.Replay.prototype.replay = function(\n    context, transform, viewRotation, skippedFeaturesHash) {\n  this.viewRotation_ = viewRotation;\n  this.replay_(context, transform,\n      skippedFeaturesHash, this.instructions, undefined, undefined);\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *     to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T=} opt_featureCallback\n *     Feature callback.\n * @param {ol.Extent=} opt_hitExtent Only check features that intersect this\n *     extent.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.canvas.Replay.prototype.replayHitDetection = function(\n    context, transform, viewRotation, skippedFeaturesHash,\n    opt_featureCallback, opt_hitExtent) {\n  this.viewRotation_ = viewRotation;\n  return this.replay_(context, transform, skippedFeaturesHash,\n      this.hitDetectionInstructions, opt_featureCallback, opt_hitExtent);\n};\n\n\n/**\n * Reverse the hit detection instructions.\n */\nol.render.canvas.Replay.prototype.reverseHitDetectionInstructions = function() {\n  var hitDetectionInstructions = this.hitDetectionInstructions;\n  // step 1 - reverse array\n  hitDetectionInstructions.reverse();\n  // step 2 - reverse instructions within geometry blocks\n  var i;\n  var n = hitDetectionInstructions.length;\n  var instruction;\n  var type;\n  var begin = -1;\n  for (i = 0; i < n; ++i) {\n    instruction = hitDetectionInstructions[i];\n    type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]);\n    if (type == ol.render.canvas.Instruction.END_GEOMETRY) {\n      begin = i;\n    } else if (type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) {\n      instruction[2] = i;\n      ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i);\n      begin = -1;\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.Replay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  var state = this.state;\n  if (fillStyle) {\n    var fillStyleColor = fillStyle.getColor();\n    state.fillStyle = ol.colorlike.asColorLike(fillStyleColor ?\n      fillStyleColor : ol.render.canvas.defaultFillStyle);\n  } else {\n    state.fillStyle = undefined;\n  }\n  if (strokeStyle) {\n    var strokeStyleColor = strokeStyle.getColor();\n    state.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?\n      strokeStyleColor : ol.render.canvas.defaultStrokeStyle);\n    var strokeStyleLineCap = strokeStyle.getLineCap();\n    state.lineCap = strokeStyleLineCap !== undefined ?\n      strokeStyleLineCap : ol.render.canvas.defaultLineCap;\n    var strokeStyleLineDash = strokeStyle.getLineDash();\n    state.lineDash = strokeStyleLineDash ?\n      strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;\n    var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n    state.lineDashOffset = strokeStyleLineDashOffset ?\n      strokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset;\n    var strokeStyleLineJoin = strokeStyle.getLineJoin();\n    state.lineJoin = strokeStyleLineJoin !== undefined ?\n      strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;\n    var strokeStyleWidth = strokeStyle.getWidth();\n    state.lineWidth = strokeStyleWidth !== undefined ?\n      strokeStyleWidth : ol.render.canvas.defaultLineWidth;\n    var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n    state.miterLimit = strokeStyleMiterLimit !== undefined ?\n      strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;\n\n    if (state.lineWidth > this.maxLineWidth) {\n      this.maxLineWidth = state.lineWidth;\n      // invalidate the buffered max extent cache\n      this.bufferedMaxExtent_ = null;\n    }\n  } else {\n    state.strokeStyle = undefined;\n    state.lineCap = undefined;\n    state.lineDash = null;\n    state.lineDashOffset = undefined;\n    state.lineJoin = undefined;\n    state.lineWidth = undefined;\n    state.miterLimit = undefined;\n  }\n};\n\n\n/**\n * @param {ol.CanvasFillStrokeState} state State.\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n */\nol.render.canvas.Replay.prototype.applyFill = function(state, geometry) {\n  var fillStyle = state.fillStyle;\n  var fillInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle];\n  if (typeof fillStyle !== 'string') {\n    var fillExtent = geometry.getExtent();\n    fillInstruction.push([fillExtent[0], fillExtent[3]]);\n  }\n  this.instructions.push(fillInstruction);\n};\n\n\n/**\n * @param {ol.CanvasFillStrokeState} state State.\n */\nol.render.canvas.Replay.prototype.applyStroke = function(state) {\n  this.instructions.push([\n    ol.render.canvas.Instruction.SET_STROKE_STYLE,\n    state.strokeStyle, state.lineWidth * this.pixelRatio, state.lineCap,\n    state.lineJoin, state.miterLimit,\n    this.applyPixelRatio(state.lineDash), state.lineDashOffset * this.pixelRatio\n  ]);\n};\n\n\n/**\n * @param {ol.CanvasFillStrokeState} state State.\n * @param {function(this:ol.render.canvas.Replay, ol.CanvasFillStrokeState, (ol.geom.Geometry|ol.render.Feature))} applyFill Apply fill.\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n */\nol.render.canvas.Replay.prototype.updateFillStyle = function(state, applyFill, geometry) {\n  var fillStyle = state.fillStyle;\n  if (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle) {\n    applyFill.call(this, state, geometry);\n    state.currentFillStyle = fillStyle;\n  }\n};\n\n\n/**\n * @param {ol.CanvasFillStrokeState} state State.\n * @param {function(this:ol.render.canvas.Replay, ol.CanvasFillStrokeState)} applyStroke Apply stroke.\n */\nol.render.canvas.Replay.prototype.updateStrokeStyle = function(state, applyStroke) {\n  var strokeStyle = state.strokeStyle;\n  var lineCap = state.lineCap;\n  var lineDash = state.lineDash;\n  var lineDashOffset = state.lineDashOffset;\n  var lineJoin = state.lineJoin;\n  var lineWidth = state.lineWidth;\n  var miterLimit = state.miterLimit;\n  if (state.currentStrokeStyle != strokeStyle ||\n      state.currentLineCap != lineCap ||\n      (lineDash != state.currentLineDash && !ol.array.equals(state.currentLineDash, lineDash)) ||\n      state.currentLineDashOffset != lineDashOffset ||\n      state.currentLineJoin != lineJoin ||\n      state.currentLineWidth != lineWidth ||\n      state.currentMiterLimit != miterLimit) {\n    applyStroke.call(this, state);\n    state.currentStrokeStyle = strokeStyle;\n    state.currentLineCap = lineCap;\n    state.currentLineDash = lineDash;\n    state.currentLineDashOffset = lineDashOffset;\n    state.currentLineJoin = lineJoin;\n    state.currentLineWidth = lineWidth;\n    state.currentMiterLimit = miterLimit;\n  }\n};\n\n\n/**\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n */\nol.render.canvas.Replay.prototype.endGeometry = function(geometry, feature) {\n  this.beginGeometryInstruction1_[2] = this.instructions.length;\n  this.beginGeometryInstruction1_ = null;\n  this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;\n  this.beginGeometryInstruction2_ = null;\n  var endGeometryInstruction =\n      [ol.render.canvas.Instruction.END_GEOMETRY, feature];\n  this.instructions.push(endGeometryInstruction);\n  this.hitDetectionInstructions.push(endGeometryInstruction);\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.render.canvas.Replay.prototype.finish = ol.nullFunction;\n\n\n/**\n * Get the buffered rendering extent.  Rendering will be clipped to the extent\n * provided to the constructor.  To account for symbolizers that may intersect\n * this extent, we calculate a buffered extent (e.g. based on stroke width).\n * @return {ol.Extent} The buffered rendering extent.\n * @protected\n */\nol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {\n  if (!this.bufferedMaxExtent_) {\n    this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);\n    if (this.maxLineWidth > 0) {\n      var width = this.resolution * (this.maxLineWidth + 1) / 2;\n      ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);\n    }\n  }\n  return this.bufferedMaxExtent_;\n};\n\ngoog.provide('ol.render.canvas.ImageReplay');\n\ngoog.require('ol');\ngoog.require('ol.render.canvas.Instruction');\ngoog.require('ol.render.canvas.Replay');\n\n\n/**\n * @constructor\n * @extends {ol.render.canvas.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {?} declutterTree Declutter tree.\n * @struct\n */\nol.render.canvas.ImageReplay = function(\n    tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {\n  ol.render.canvas.Replay.call(this,\n      tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);\n\n  /**\n   * @private\n   * @type {ol.DeclutterGroup}\n   */\n  this.declutterGroup_ = null;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement|HTMLVideoElement|Image}\n   */\n  this.hitDetectionImage_ = null;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement|HTMLVideoElement|Image}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.anchorX_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.anchorY_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.height_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.opacity_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.originX_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.originY_ = undefined;\n\n  /**\n   * @private\n   * @type {boolean|undefined}\n   */\n  this.rotateWithView_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.rotation_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.scale_ = undefined;\n\n  /**\n   * @private\n   * @type {boolean|undefined}\n   */\n  this.snapToPixel_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.width_ = undefined;\n\n};\nol.inherits(ol.render.canvas.ImageReplay, ol.render.canvas.Replay);\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n * @return {number} My end.\n */\nol.render.canvas.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) {\n  return this.appendFlatCoordinates(\n      flatCoordinates, offset, end, stride, false, false);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {\n  if (!this.image_) {\n    return;\n  }\n  this.beginGeometry(pointGeometry, feature);\n  var flatCoordinates = pointGeometry.getFlatCoordinates();\n  var stride = pointGeometry.getStride();\n  var myBegin = this.coordinates.length;\n  var myEnd = this.drawCoordinates_(\n      flatCoordinates, 0, flatCoordinates.length, stride);\n  this.instructions.push([\n    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_,\n    // Remaining arguments to DRAW_IMAGE are in alphabetical order\n    this.anchorX_, this.anchorY_, this.declutterGroup_, this.height_, this.opacity_,\n    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,\n    this.scale_ * this.pixelRatio, this.snapToPixel_, this.width_\n  ]);\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd,\n    this.hitDetectionImage_,\n    // Remaining arguments to DRAW_IMAGE are in alphabetical order\n    this.anchorX_, this.anchorY_, this.declutterGroup_, this.height_, this.opacity_,\n    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,\n    this.scale_, this.snapToPixel_, this.width_\n  ]);\n  this.endGeometry(pointGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {\n  if (!this.image_) {\n    return;\n  }\n  this.beginGeometry(multiPointGeometry, feature);\n  var flatCoordinates = multiPointGeometry.getFlatCoordinates();\n  var stride = multiPointGeometry.getStride();\n  var myBegin = this.coordinates.length;\n  var myEnd = this.drawCoordinates_(\n      flatCoordinates, 0, flatCoordinates.length, stride);\n  this.instructions.push([\n    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_,\n    // Remaining arguments to DRAW_IMAGE are in alphabetical order\n    this.anchorX_, this.anchorY_, this.declutterGroup_, this.height_, this.opacity_,\n    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,\n    this.scale_ * this.pixelRatio, this.snapToPixel_, this.width_\n  ]);\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd,\n    this.hitDetectionImage_,\n    // Remaining arguments to DRAW_IMAGE are in alphabetical order\n    this.anchorX_, this.anchorY_, this.declutterGroup_, this.height_, this.opacity_,\n    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,\n    this.scale_, this.snapToPixel_, this.width_\n  ]);\n  this.endGeometry(multiPointGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ImageReplay.prototype.finish = function() {\n  this.reverseHitDetectionInstructions();\n  // FIXME this doesn't really protect us against further calls to draw*Geometry\n  this.anchorX_ = undefined;\n  this.anchorY_ = undefined;\n  this.hitDetectionImage_ = null;\n  this.image_ = null;\n  this.height_ = undefined;\n  this.scale_ = undefined;\n  this.opacity_ = undefined;\n  this.originX_ = undefined;\n  this.originY_ = undefined;\n  this.rotateWithView_ = undefined;\n  this.rotation_ = undefined;\n  this.snapToPixel_ = undefined;\n  this.width_ = undefined;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ImageReplay.prototype.setImageStyle = function(imageStyle, declutterGroup) {\n  var anchor = imageStyle.getAnchor();\n  var size = imageStyle.getSize();\n  var hitDetectionImage = imageStyle.getHitDetectionImage(1);\n  var image = imageStyle.getImage(1);\n  var origin = imageStyle.getOrigin();\n  this.anchorX_ = anchor[0];\n  this.anchorY_ = anchor[1];\n  this.declutterGroup_ = /** @type {ol.DeclutterGroup} */ (declutterGroup);\n  this.hitDetectionImage_ = hitDetectionImage;\n  this.image_ = image;\n  this.height_ = size[1];\n  this.opacity_ = imageStyle.getOpacity();\n  this.originX_ = origin[0];\n  this.originY_ = origin[1];\n  this.rotateWithView_ = imageStyle.getRotateWithView();\n  this.rotation_ = imageStyle.getRotation();\n  this.scale_ = imageStyle.getScale();\n  this.snapToPixel_ = imageStyle.getSnapToPixel();\n  this.width_ = size[0];\n};\n\ngoog.provide('ol.render.canvas.LineStringReplay');\n\ngoog.require('ol');\ngoog.require('ol.render.canvas.Instruction');\ngoog.require('ol.render.canvas.Replay');\n\n\n/**\n * @constructor\n * @extends {ol.render.canvas.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {?} declutterTree Declutter tree.\n * @struct\n */\nol.render.canvas.LineStringReplay = function(\n    tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {\n  ol.render.canvas.Replay.call(this,\n      tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);\n};\nol.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay);\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n * @return {number} end.\n */\nol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = function(flatCoordinates, offset, end, stride) {\n  var myBegin = this.coordinates.length;\n  var myEnd = this.appendFlatCoordinates(\n      flatCoordinates, offset, end, stride, false, false);\n  var moveToLineToInstruction =\n      [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];\n  this.instructions.push(moveToLineToInstruction);\n  this.hitDetectionInstructions.push(moveToLineToInstruction);\n  return end;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {\n  var state = this.state;\n  var strokeStyle = state.strokeStyle;\n  var lineWidth = state.lineWidth;\n  if (strokeStyle === undefined || lineWidth === undefined) {\n    return;\n  }\n  this.updateStrokeStyle(state, this.applyStroke);\n  this.beginGeometry(lineStringGeometry, feature);\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.SET_STROKE_STYLE,\n    state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,\n    state.miterLimit, state.lineDash, state.lineDashOffset\n  ], [\n    ol.render.canvas.Instruction.BEGIN_PATH\n  ]);\n  var flatCoordinates = lineStringGeometry.getFlatCoordinates();\n  var stride = lineStringGeometry.getStride();\n  this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);\n  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);\n  this.endGeometry(lineStringGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {\n  var state = this.state;\n  var strokeStyle = state.strokeStyle;\n  var lineWidth = state.lineWidth;\n  if (strokeStyle === undefined || lineWidth === undefined) {\n    return;\n  }\n  this.updateStrokeStyle(state, this.applyStroke);\n  this.beginGeometry(multiLineStringGeometry, feature);\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.SET_STROKE_STYLE,\n    state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,\n    state.miterLimit, state.lineDash, state.lineDashOffset\n  ], [\n    ol.render.canvas.Instruction.BEGIN_PATH\n  ]);\n  var ends = multiLineStringGeometry.getEnds();\n  var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n  var stride = multiLineStringGeometry.getStride();\n  var offset = 0;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    offset = this.drawFlatCoordinates_(\n        flatCoordinates, offset, ends[i], stride);\n  }\n  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);\n  this.endGeometry(multiLineStringGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.LineStringReplay.prototype.finish = function() {\n  var state = this.state;\n  if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {\n    this.instructions.push([ol.render.canvas.Instruction.STROKE]);\n  }\n  this.reverseHitDetectionInstructions();\n  this.state = null;\n};\n\n\n/**\n * @inheritDoc.\n */\nol.render.canvas.LineStringReplay.prototype.applyStroke = function(state) {\n  if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {\n    this.instructions.push([ol.render.canvas.Instruction.STROKE]);\n    state.lastStroke = this.coordinates.length;\n  }\n  state.lastStroke = 0;\n  ol.render.canvas.Replay.prototype.applyStroke.call(this, state);\n  this.instructions.push([ol.render.canvas.Instruction.BEGIN_PATH]);\n};\n\ngoog.provide('ol.render.canvas.PolygonReplay');\n\ngoog.require('ol');\ngoog.require('ol.color');\ngoog.require('ol.geom.flat.simplify');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.Instruction');\ngoog.require('ol.render.canvas.Replay');\n\n\n/**\n * @constructor\n * @extends {ol.render.canvas.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {?} declutterTree Declutter tree.\n * @struct\n */\nol.render.canvas.PolygonReplay = function(\n    tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {\n  ol.render.canvas.Replay.call(this,\n      tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);\n};\nol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\nol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) {\n  var state = this.state;\n  var fill = state.fillStyle !== undefined;\n  var stroke = state.strokeStyle != undefined;\n  var numEnds = ends.length;\n  var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];\n  this.instructions.push(beginPathInstruction);\n  this.hitDetectionInstructions.push(beginPathInstruction);\n  for (var i = 0; i < numEnds; ++i) {\n    var end = ends[i];\n    var myBegin = this.coordinates.length;\n    var myEnd = this.appendFlatCoordinates(\n        flatCoordinates, offset, end, stride, true, !stroke);\n    var moveToLineToInstruction =\n        [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];\n    this.instructions.push(moveToLineToInstruction);\n    this.hitDetectionInstructions.push(moveToLineToInstruction);\n    if (stroke) {\n      // Performance optimization: only call closePath() when we have a stroke.\n      // Otherwise the ring is closed already (see appendFlatCoordinates above).\n      var closePathInstruction = [ol.render.canvas.Instruction.CLOSE_PATH];\n      this.instructions.push(closePathInstruction);\n      this.hitDetectionInstructions.push(closePathInstruction);\n    }\n    offset = end;\n  }\n  var fillInstruction = [ol.render.canvas.Instruction.FILL];\n  this.hitDetectionInstructions.push(fillInstruction);\n  if (fill) {\n    this.instructions.push(fillInstruction);\n  }\n  if (stroke) {\n    var strokeInstruction = [ol.render.canvas.Instruction.STROKE];\n    this.instructions.push(strokeInstruction);\n    this.hitDetectionInstructions.push(strokeInstruction);\n  }\n  return offset;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, feature) {\n  var state = this.state;\n  var fillStyle = state.fillStyle;\n  var strokeStyle = state.strokeStyle;\n  if (fillStyle === undefined && strokeStyle === undefined) {\n    return;\n  }\n  this.setFillStrokeStyles_(circleGeometry);\n  this.beginGeometry(circleGeometry, feature);\n  // always fill the circle for hit detection\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.SET_FILL_STYLE,\n    ol.color.asString(ol.render.canvas.defaultFillStyle)\n  ]);\n  if (state.strokeStyle !== undefined) {\n    this.hitDetectionInstructions.push([\n      ol.render.canvas.Instruction.SET_STROKE_STYLE,\n      state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,\n      state.miterLimit, state.lineDash, state.lineDashOffset\n    ]);\n  }\n  var flatCoordinates = circleGeometry.getFlatCoordinates();\n  var stride = circleGeometry.getStride();\n  var myBegin = this.coordinates.length;\n  this.appendFlatCoordinates(\n      flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n  var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];\n  var circleInstruction = [ol.render.canvas.Instruction.CIRCLE, myBegin];\n  this.instructions.push(beginPathInstruction, circleInstruction);\n  this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);\n  var fillInstruction = [ol.render.canvas.Instruction.FILL];\n  this.hitDetectionInstructions.push(fillInstruction);\n  if (state.fillStyle !== undefined) {\n    this.instructions.push(fillInstruction);\n  }\n  if (state.strokeStyle !== undefined) {\n    var strokeInstruction = [ol.render.canvas.Instruction.STROKE];\n    this.instructions.push(strokeInstruction);\n    this.hitDetectionInstructions.push(strokeInstruction);\n  }\n  this.endGeometry(circleGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {\n  var state = this.state;\n  this.setFillStrokeStyles_(polygonGeometry);\n  this.beginGeometry(polygonGeometry, feature);\n  // always fill the polygon for hit detection\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.SET_FILL_STYLE,\n    ol.color.asString(ol.render.canvas.defaultFillStyle)]\n  );\n  if (state.strokeStyle !== undefined) {\n    this.hitDetectionInstructions.push([\n      ol.render.canvas.Instruction.SET_STROKE_STYLE,\n      state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,\n      state.miterLimit, state.lineDash, state.lineDashOffset\n    ]);\n  }\n  var ends = polygonGeometry.getEnds();\n  var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();\n  var stride = polygonGeometry.getStride();\n  this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride);\n  this.endGeometry(polygonGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {\n  var state = this.state;\n  var fillStyle = state.fillStyle;\n  var strokeStyle = state.strokeStyle;\n  if (fillStyle === undefined && strokeStyle === undefined) {\n    return;\n  }\n  this.setFillStrokeStyles_(multiPolygonGeometry);\n  this.beginGeometry(multiPolygonGeometry, feature);\n  // always fill the multi-polygon for hit detection\n  this.hitDetectionInstructions.push([\n    ol.render.canvas.Instruction.SET_FILL_STYLE,\n    ol.color.asString(ol.render.canvas.defaultFillStyle)\n  ]);\n  if (state.strokeStyle !== undefined) {\n    this.hitDetectionInstructions.push([\n      ol.render.canvas.Instruction.SET_STROKE_STYLE,\n      state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,\n      state.miterLimit, state.lineDash, state.lineDashOffset\n    ]);\n  }\n  var endss = multiPolygonGeometry.getEndss();\n  var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();\n  var stride = multiPolygonGeometry.getStride();\n  var offset = 0;\n  var i, ii;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    offset = this.drawFlatCoordinatess_(\n        flatCoordinates, offset, endss[i], stride);\n  }\n  this.endGeometry(multiPolygonGeometry, feature);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.PolygonReplay.prototype.finish = function() {\n  this.reverseHitDetectionInstructions();\n  this.state = null;\n  // We want to preserve topology when drawing polygons.  Polygons are\n  // simplified using quantization and point elimination. However, we might\n  // have received a mix of quantized and non-quantized geometries, so ensure\n  // that all are quantized by quantizing all coordinates in the batch.\n  var tolerance = this.tolerance;\n  if (tolerance !== 0) {\n    var coordinates = this.coordinates;\n    var i, ii;\n    for (i = 0, ii = coordinates.length; i < ii; ++i) {\n      coordinates[i] = ol.geom.flat.simplify.snap(coordinates[i], tolerance);\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n */\nol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function(geometry) {\n  var state = this.state;\n  var fillStyle = state.fillStyle;\n  if (fillStyle !== undefined) {\n    this.updateFillStyle(state, this.applyFill, geometry);\n  }\n  if (state.strokeStyle !== undefined) {\n    this.updateStrokeStyle(state, this.applyStroke);\n  }\n};\n\ngoog.provide('ol.geom.flat.straightchunk');\n\n\n/**\n * @param {number} maxAngle Maximum acceptable angle delta between segments.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Array.<number>} Start and end of the first suitable chunk of the\n * given `flatCoordinates`.\n */\nol.geom.flat.straightchunk.lineString = function(maxAngle, flatCoordinates, offset, end, stride) {\n  var chunkStart = offset;\n  var chunkEnd = offset;\n  var chunkM = 0;\n  var m = 0;\n  var start = offset;\n  var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;\n  for (i = offset; i < end; i += stride) {\n    var x2 = flatCoordinates[i];\n    var y2 = flatCoordinates[i + 1];\n    if (x1 !== undefined) {\n      x23 = x2 - x1;\n      y23 = y2 - y1;\n      m23 = Math.sqrt(x23 * x23 + y23 * y23);\n      if (x12 !== undefined) {\n        m += m12;\n        acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));\n        if (acos > maxAngle) {\n          if (m > chunkM) {\n            chunkM = m;\n            chunkStart = start;\n            chunkEnd = i;\n          }\n          m = 0;\n          start = i - stride;\n        }\n      }\n      m12 = m23;\n      x12 = x23;\n      y12 = y23;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  m += m23;\n  return m > chunkM ? [start, i] : [chunkStart, chunkEnd];\n};\n\ngoog.provide('ol.style.TextPlacement');\n\n\n/**\n * Text placement. One of `'point'`, `'line'`. Default is `'point'`. Note that\n * `'line'` requires the underlying geometry to be a {@link ol.geom.LineString},\n * {@link ol.geom.Polygon}, {@link ol.geom.MultiLineString} or\n * {@link ol.geom.MultiPolygon}.\n * @enum {string}\n */\nol.style.TextPlacement = {\n  POINT: 'point',\n  LINE: 'line'\n};\n\ngoog.provide('ol.render.canvas.TextReplay');\n\ngoog.require('ol');\ngoog.require('ol.colorlike');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.geom.flat.straightchunk');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.has');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.Instruction');\ngoog.require('ol.render.canvas.Replay');\ngoog.require('ol.render.replay');\ngoog.require('ol.style.TextPlacement');\n\n\n/**\n * @constructor\n * @extends {ol.render.canvas.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {?} declutterTree Declutter tree.\n * @struct\n */\nol.render.canvas.TextReplay = function(\n    tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {\n  ol.render.canvas.Replay.call(this,\n      tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);\n\n  /**\n   * @private\n   * @type {ol.DeclutterGroup}\n   */\n  this.declutterGroup_;\n\n  /**\n   * @private\n   * @type {Array.<HTMLCanvasElement>}\n   */\n  this.labels_ = null;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.text_ = '';\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textOffsetX_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textOffsetY_ = 0;\n\n  /**\n   * @private\n   * @type {boolean|undefined}\n   */\n  this.textRotateWithView_ = undefined;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textRotation_ = 0;\n\n  /**\n   * @private\n   * @type {?ol.CanvasFillState}\n   */\n  this.textFillState_ = null;\n\n  /**\n   * @type {Object.<string, ol.CanvasFillState>}\n   */\n  this.fillStates = {};\n\n  /**\n   * @private\n   * @type {?ol.CanvasStrokeState}\n   */\n  this.textStrokeState_ = null;\n\n  /**\n   * @type {Object.<string, ol.CanvasStrokeState>}\n   */\n  this.strokeStates = {};\n\n  /**\n   * @private\n   * @type {ol.CanvasTextState}\n   */\n  this.textState_ = /** @type {ol.CanvasTextState} */ ({});\n\n  /**\n   * @type {Object.<string, ol.CanvasTextState>}\n   */\n  this.textStates = {};\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.textKey_ = '';\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.fillKey_ = '';\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.strokeKey_ = '';\n\n  /**\n   * @private\n   * @type {Object.<string, Object.<string, number>>}\n   */\n  this.widths_ = {};\n\n  var labelCache = ol.render.canvas.labelCache;\n  labelCache.prune();\n\n};\nol.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay);\n\n\n/**\n * @param {string} font Font to use for measuring.\n * @param {Array.<string>} lines Lines to measure.\n * @param {Array.<number>} widths Array will be populated with the widths of\n * each line.\n * @return {number} Width of the whole text.\n */\nol.render.canvas.TextReplay.measureTextWidths = function(font, lines, widths) {\n  var numLines = lines.length;\n  var width = 0;\n  var currentWidth, i;\n  for (i = 0; i < numLines; ++i) {\n    currentWidth = ol.render.canvas.measureTextWidth(font, lines[i]);\n    width = Math.max(width, currentWidth);\n    widths.push(currentWidth);\n  }\n  return width;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.TextReplay.prototype.drawText = function(geometry, feature) {\n  var fillState = this.textFillState_;\n  var strokeState = this.textStrokeState_;\n  var textState = this.textState_;\n  if (this.text_ === '' || !textState || (!fillState && !strokeState)) {\n    return;\n  }\n\n  var begin = this.coordinates.length;\n\n  var geometryType = geometry.getType();\n  var flatCoordinates = null;\n  var end = 2;\n  var stride = 2;\n  var i, ii;\n\n  if (textState.placement === ol.style.TextPlacement.LINE) {\n    if (!ol.extent.intersects(this.getBufferedMaxExtent(), geometry.getExtent())) {\n      return;\n    }\n    var ends;\n    flatCoordinates = geometry.getFlatCoordinates();\n    stride = geometry.getStride();\n    if (geometryType == ol.geom.GeometryType.LINE_STRING) {\n      ends = [flatCoordinates.length];\n    } else if (geometryType == ol.geom.GeometryType.MULTI_LINE_STRING) {\n      ends = geometry.getEnds();\n    } else if (geometryType == ol.geom.GeometryType.POLYGON) {\n      ends = geometry.getEnds().slice(0, 1);\n    } else if (geometryType == ol.geom.GeometryType.MULTI_POLYGON) {\n      var endss = geometry.getEndss();\n      ends = [];\n      for (i = 0, ii = endss.length; i < ii; ++i) {\n        ends.push(endss[i][0]);\n      }\n    }\n    this.beginGeometry(geometry, feature);\n    var textAlign = textState.textAlign;\n    var flatOffset = 0;\n    var flatEnd;\n    for (var o = 0, oo = ends.length; o < oo; ++o) {\n      if (textAlign == undefined) {\n        var range = ol.geom.flat.straightchunk.lineString(\n            textState.maxAngle, flatCoordinates, flatOffset, ends[o], stride);\n        flatOffset = range[0];\n        flatEnd = range[1];\n      } else {\n        flatEnd = ends[o];\n      }\n      for (i = flatOffset; i < flatEnd; i += stride) {\n        this.coordinates.push(flatCoordinates[i], flatCoordinates[i + 1]);\n      }\n      end = this.coordinates.length;\n      flatOffset = ends[o];\n      this.drawChars_(begin, end, this.declutterGroup_);\n      begin = end;\n    }\n    this.endGeometry(geometry, feature);\n\n  } else {\n    var label = this.getImage(this.text_, this.textKey_, this.fillKey_, this.strokeKey_);\n    var width = label.width / this.pixelRatio;\n    switch (geometryType) {\n      case ol.geom.GeometryType.POINT:\n      case ol.geom.GeometryType.MULTI_POINT:\n        flatCoordinates = geometry.getFlatCoordinates();\n        end = flatCoordinates.length;\n        break;\n      case ol.geom.GeometryType.LINE_STRING:\n        flatCoordinates = /** @type {ol.geom.LineString} */ (geometry).getFlatMidpoint();\n        break;\n      case ol.geom.GeometryType.CIRCLE:\n        flatCoordinates = /** @type {ol.geom.Circle} */ (geometry).getCenter();\n        break;\n      case ol.geom.GeometryType.MULTI_LINE_STRING:\n        flatCoordinates = /** @type {ol.geom.MultiLineString} */ (geometry).getFlatMidpoints();\n        end = flatCoordinates.length;\n        break;\n      case ol.geom.GeometryType.POLYGON:\n        flatCoordinates = /** @type {ol.geom.Polygon} */ (geometry).getFlatInteriorPoint();\n        if (!textState.overflow && flatCoordinates[2] / this.resolution < width) {\n          return;\n        }\n        stride = 3;\n        break;\n      case ol.geom.GeometryType.MULTI_POLYGON:\n        var interiorPoints = /** @type {ol.geom.MultiPolygon} */ (geometry).getFlatInteriorPoints();\n        flatCoordinates = [];\n        for (i = 0, ii = interiorPoints.length; i < ii; i += 3) {\n          if (textState.overflow || interiorPoints[i + 2] / this.resolution >= width) {\n            flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);\n          }\n        }\n        end = flatCoordinates.length;\n        if (end == 0) {\n          return;\n        }\n        break;\n      default:\n    }\n    end = this.appendFlatCoordinates(flatCoordinates, 0, end, stride, false, false);\n    this.beginGeometry(geometry, feature);\n    if (textState.backgroundFill || textState.backgroundStroke) {\n      this.setFillStrokeStyle(textState.backgroundFill, textState.backgroundStroke);\n      this.updateFillStyle(this.state, this.applyFill, geometry);\n      this.updateStrokeStyle(this.state, this.applyStroke);\n    }\n    this.drawTextImage_(label, begin, end);\n    this.endGeometry(geometry, feature);\n  }\n};\n\n\n/**\n * @param {string} text Text.\n * @param {string} textKey Text style key.\n * @param {string} fillKey Fill style key.\n * @param {string} strokeKey Stroke style key.\n * @return {HTMLCanvasElement} Image.\n */\nol.render.canvas.TextReplay.prototype.getImage = function(text, textKey, fillKey, strokeKey) {\n  var label;\n  var key = strokeKey + textKey + text + fillKey + this.pixelRatio;\n\n  var labelCache = ol.render.canvas.labelCache;\n  if (!labelCache.containsKey(key)) {\n    var strokeState = strokeKey ? this.strokeStates[strokeKey] || this.textStrokeState_ : null;\n    var fillState = fillKey ? this.fillStates[fillKey] || this.textFillState_ : null;\n    var textState = this.textStates[textKey] || this.textState_;\n    var pixelRatio = this.pixelRatio;\n    var scale = textState.scale * pixelRatio;\n    var align =  ol.render.replay.TEXT_ALIGN[textState.textAlign || ol.render.canvas.defaultTextAlign];\n    var strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;\n\n    var lines = text.split('\\n');\n    var numLines = lines.length;\n    var widths = [];\n    var width = ol.render.canvas.TextReplay.measureTextWidths(textState.font, lines, widths);\n    var lineHeight = ol.render.canvas.measureTextHeight(textState.font);\n    var height = lineHeight * numLines;\n    var renderWidth = (width + strokeWidth);\n    var context = ol.dom.createCanvasContext2D(\n        Math.ceil(renderWidth * scale),\n        Math.ceil((height + strokeWidth) * scale));\n    label = context.canvas;\n    labelCache.set(key, label);\n    if (scale != 1) {\n      context.scale(scale, scale);\n    }\n    context.font = textState.font;\n    if (strokeKey) {\n      context.strokeStyle = strokeState.strokeStyle;\n      context.lineWidth = strokeWidth * (ol.has.SAFARI ? scale : 1);\n      context.lineCap = strokeState.lineCap;\n      context.lineJoin = strokeState.lineJoin;\n      context.miterLimit = strokeState.miterLimit;\n      if (ol.has.CANVAS_LINE_DASH && strokeState.lineDash.length) {\n        context.setLineDash(strokeState.lineDash);\n        context.lineDashOffset = strokeState.lineDashOffset;\n      }\n    }\n    if (fillKey) {\n      context.fillStyle = fillState.fillStyle;\n    }\n    context.textBaseline = 'middle';\n    context.textAlign = 'center';\n    var leftRight = (0.5 - align);\n    var x = align * label.width / scale + leftRight * strokeWidth;\n    var i;\n    if (strokeKey) {\n      for (i = 0; i < numLines; ++i) {\n        context.strokeText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight);\n      }\n    }\n    if (fillKey) {\n      for (i = 0; i < numLines; ++i) {\n        context.fillText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight);\n      }\n    }\n  }\n  return labelCache.get(key);\n};\n\n\n/**\n * @private\n * @param {HTMLCanvasElement} label Label.\n * @param {number} begin Begin.\n * @param {number} end End.\n */\nol.render.canvas.TextReplay.prototype.drawTextImage_ = function(label, begin, end) {\n  var textState = this.textState_;\n  var strokeState = this.textStrokeState_;\n  var pixelRatio = this.pixelRatio;\n  var align = ol.render.replay.TEXT_ALIGN[textState.textAlign || ol.render.canvas.defaultTextAlign];\n  var baseline = ol.render.replay.TEXT_ALIGN[textState.textBaseline];\n  var strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;\n\n  var anchorX = align * label.width / pixelRatio + 2 * (0.5 - align) * strokeWidth;\n  var anchorY = baseline * label.height / pixelRatio + 2 * (0.5 - baseline) * strokeWidth;\n  this.instructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, begin, end,\n    label, (anchorX - this.textOffsetX_) * pixelRatio, (anchorY - this.textOffsetY_) * pixelRatio,\n    this.declutterGroup_, label.height, 1, 0, 0, this.textRotateWithView_, this.textRotation_,\n    1, true, label.width,\n    textState.padding == ol.render.canvas.defaultPadding ?\n      ol.render.canvas.defaultPadding : textState.padding.map(function(p) {\n        return p * pixelRatio;\n      }),\n    !!textState.backgroundFill, !!textState.backgroundStroke\n  ]);\n  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, begin, end,\n    label, (anchorX - this.textOffsetX_) * pixelRatio, (anchorY - this.textOffsetY_) * pixelRatio,\n    this.declutterGroup_, label.height, 1, 0, 0, this.textRotateWithView_, this.textRotation_,\n    1 / pixelRatio, true, label.width, textState.padding,\n    !!textState.backgroundFill, !!textState.backgroundStroke\n  ]);\n};\n\n\n/**\n * @private\n * @param {number} begin Begin.\n * @param {number} end End.\n * @param {ol.DeclutterGroup} declutterGroup Declutter group.\n */\nol.render.canvas.TextReplay.prototype.drawChars_ = function(begin, end, declutterGroup) {\n  var strokeState = this.textStrokeState_;\n  var textState = this.textState_;\n  var fillState = this.textFillState_;\n\n  var strokeKey = this.strokeKey_;\n  if (strokeState) {\n    if (!(strokeKey in this.strokeStates)) {\n      this.strokeStates[strokeKey] = /** @type {ol.CanvasStrokeState} */ ({\n        strokeStyle: strokeState.strokeStyle,\n        lineCap: strokeState.lineCap,\n        lineDashOffset: strokeState.lineDashOffset,\n        lineWidth: strokeState.lineWidth,\n        lineJoin: strokeState.lineJoin,\n        miterLimit: strokeState.miterLimit,\n        lineDash: strokeState.lineDash\n      });\n    }\n  }\n  var textKey = this.textKey_;\n  if (!(this.textKey_ in this.textStates)) {\n    this.textStates[this.textKey_] = /** @type {ol.CanvasTextState} */ ({\n      font: textState.font,\n      textAlign: textState.textAlign || ol.render.canvas.defaultTextAlign,\n      scale: textState.scale\n    });\n  }\n  var fillKey = this.fillKey_;\n  if (fillState) {\n    if (!(fillKey in this.fillStates)) {\n      this.fillStates[fillKey] = /** @type {ol.CanvasFillState} */ ({\n        fillStyle: fillState.fillStyle\n      });\n    }\n  }\n\n  var pixelRatio = this.pixelRatio;\n  var baseline = ol.render.replay.TEXT_ALIGN[textState.textBaseline];\n\n  var offsetY = this.textOffsetY_ * pixelRatio;\n  var text = this.text_;\n  var font = textState.font;\n  var textScale = textState.scale;\n  var strokeWidth = strokeState ? strokeState.lineWidth * textScale / 2 : 0;\n  var widths = this.widths_[font];\n  if (!widths) {\n    this.widths_[font] = widths = {};\n  }\n  this.instructions.push([ol.render.canvas.Instruction.DRAW_CHARS,\n    begin, end, baseline, declutterGroup,\n    textState.overflow, fillKey, textState.maxAngle,\n    function(text) {\n      var width = widths[text];\n      if (!width) {\n        width = widths[text] = ol.render.canvas.measureTextWidth(font, text);\n      }\n      return width * textScale * pixelRatio;\n    },\n    offsetY, strokeKey, strokeWidth * pixelRatio, text, textKey, 1\n  ]);\n  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_CHARS,\n    begin, end, baseline, declutterGroup,\n    textState.overflow, fillKey, textState.maxAngle,\n    function(text) {\n      var width = widths[text];\n      if (!width) {\n        width = widths[text] = ol.render.canvas.measureTextWidth(font, text);\n      }\n      return width * textScale;\n    },\n    offsetY, strokeKey, strokeWidth, text, textKey, 1 / pixelRatio\n  ]);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.TextReplay.prototype.setTextStyle = function(textStyle, declutterGroup) {\n  var textState, fillState, strokeState;\n  if (!textStyle) {\n    this.text_ = '';\n  } else {\n    this.declutterGroup_ = /** @type {ol.DeclutterGroup} */ (declutterGroup);\n\n    var textFillStyle = textStyle.getFill();\n    if (!textFillStyle) {\n      fillState = this.textFillState_ = null;\n    } else {\n      fillState = this.textFillState_;\n      if (!fillState) {\n        fillState = this.textFillState_ = /** @type {ol.CanvasFillState} */ ({});\n      }\n      fillState.fillStyle = ol.colorlike.asColorLike(\n          textFillStyle.getColor() || ol.render.canvas.defaultFillStyle);\n    }\n\n    var textStrokeStyle = textStyle.getStroke();\n    if (!textStrokeStyle) {\n      strokeState = this.textStrokeState_ = null;\n    } else {\n      strokeState = this.textStrokeState_;\n      if (!strokeState) {\n        strokeState = this.textStrokeState_ = /** @type {ol.CanvasStrokeState} */ ({});\n      }\n      var lineDash = textStrokeStyle.getLineDash();\n      var lineDashOffset = textStrokeStyle.getLineDashOffset();\n      var lineWidth = textStrokeStyle.getWidth();\n      var miterLimit = textStrokeStyle.getMiterLimit();\n      strokeState.lineCap = textStrokeStyle.getLineCap() || ol.render.canvas.defaultLineCap;\n      strokeState.lineDash = lineDash ? lineDash.slice() : ol.render.canvas.defaultLineDash;\n      strokeState.lineDashOffset =\n          lineDashOffset === undefined ? ol.render.canvas.defaultLineDashOffset : lineDashOffset;\n      strokeState.lineJoin = textStrokeStyle.getLineJoin() || ol.render.canvas.defaultLineJoin;\n      strokeState.lineWidth =\n          lineWidth === undefined ? ol.render.canvas.defaultLineWidth : lineWidth;\n      strokeState.miterLimit =\n          miterLimit === undefined ? ol.render.canvas.defaultMiterLimit : miterLimit;\n      strokeState.strokeStyle = ol.colorlike.asColorLike(\n          textStrokeStyle.getColor() || ol.render.canvas.defaultStrokeStyle);\n    }\n\n    textState = this.textState_;\n    var font = textStyle.getFont() || ol.render.canvas.defaultFont;\n    ol.render.canvas.checkFont(font);\n    var textScale = textStyle.getScale();\n    textState.overflow = textStyle.getOverflow();\n    textState.font = font;\n    textState.maxAngle = textStyle.getMaxAngle();\n    textState.placement = textStyle.getPlacement();\n    textState.textAlign = textStyle.getTextAlign();\n    textState.textBaseline = textStyle.getTextBaseline() || ol.render.canvas.defaultTextBaseline;\n    textState.backgroundFill = textStyle.getBackgroundFill();\n    textState.backgroundStroke = textStyle.getBackgroundStroke();\n    textState.padding = textStyle.getPadding() || ol.render.canvas.defaultPadding;\n    textState.scale = textScale === undefined ? 1 : textScale;\n\n    var textOffsetX = textStyle.getOffsetX();\n    var textOffsetY = textStyle.getOffsetY();\n    var textRotateWithView = textStyle.getRotateWithView();\n    var textRotation = textStyle.getRotation();\n    this.text_ = textStyle.getText() || '';\n    this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;\n    this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;\n    this.textRotateWithView_ = textRotateWithView === undefined ? false : textRotateWithView;\n    this.textRotation_ = textRotation === undefined ? 0 : textRotation;\n\n    this.strokeKey_ = strokeState ?\n      (typeof strokeState.strokeStyle == 'string' ? strokeState.strokeStyle : ol.getUid(strokeState.strokeStyle)) +\n      strokeState.lineCap + strokeState.lineDashOffset + '|' + strokeState.lineWidth +\n      strokeState.lineJoin + strokeState.miterLimit + '[' + strokeState.lineDash.join() + ']' :\n      '';\n    this.textKey_ = textState.font + textState.scale + (textState.textAlign || '?');\n    this.fillKey_ = fillState ?\n      (typeof fillState.fillStyle == 'string' ? fillState.fillStyle : ('|' + ol.getUid(fillState.fillStyle))) :\n      '';\n  }\n};\n\ngoog.provide('ol.render.canvas.ReplayGroup');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.obj');\ngoog.require('ol.render.ReplayGroup');\ngoog.require('ol.render.ReplayType');\ngoog.require('ol.render.canvas.Replay');\ngoog.require('ol.render.canvas.ImageReplay');\ngoog.require('ol.render.canvas.LineStringReplay');\ngoog.require('ol.render.canvas.PolygonReplay');\ngoog.require('ol.render.canvas.TextReplay');\ngoog.require('ol.render.replay');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.render.ReplayGroup}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay group can have overlapping geometries.\n * @param {?} declutterTree Declutter tree\n * for declutter processing in postrender.\n * @param {number=} opt_renderBuffer Optional rendering buffer.\n * @struct\n */\nol.render.canvas.ReplayGroup = function(\n    tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree, opt_renderBuffer) {\n  ol.render.ReplayGroup.call(this);\n\n  /**\n   * Declutter tree.\n   * @private\n   */\n  this.declutterTree_ = declutterTree;\n\n  /**\n   * @type {ol.DeclutterGroup}\n   * @private\n   */\n  this.declutterGroup_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.tolerance_ = tolerance;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.maxExtent_ = maxExtent;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.overlaps_ = overlaps;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelRatio_ = pixelRatio;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.resolution_ = resolution;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.renderBuffer_ = opt_renderBuffer;\n\n  /**\n   * @private\n   * @type {!Object.<string,\n   *        Object.<ol.render.ReplayType, ol.render.canvas.Replay>>}\n   */\n  this.replaysByZIndex_ = {};\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.hitDetectionContext_ = ol.dom.createCanvasContext2D(1, 1);\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.hitDetectionTransform_ = ol.transform.create();\n};\nol.inherits(ol.render.canvas.ReplayGroup, ol.render.ReplayGroup);\n\n\n/**\n * This cache is used for storing calculated pixel circles for increasing performance.\n * It is a static property to allow each Replaygroup to access it.\n * @type {Object.<number, Array.<Array.<(boolean|undefined)>>>}\n * @private\n */\nol.render.canvas.ReplayGroup.circleArrayCache_ = {\n  0: [[true]]\n};\n\n\n/**\n * This method fills a row in the array from the given coordinate to the\n * middle with `true`.\n * @param {Array.<Array.<(boolean|undefined)>>} array The array that will be altered.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @private\n */\nol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_ = function(array, x, y) {\n  var i;\n  var radius = Math.floor(array.length / 2);\n  if (x >= radius) {\n    for (i = radius; i < x; i++) {\n      array[i][y] = true;\n    }\n  } else if (x < radius) {\n    for (i = x + 1; i < radius; i++) {\n      array[i][y] = true;\n    }\n  }\n};\n\n\n/**\n * This methods creates a circle inside a fitting array. Points inside the\n * circle are marked by true, points on the outside are undefined.\n * It uses the midpoint circle algorithm.\n * A cache is used to increase performance.\n * @param {number} radius Radius.\n * @returns {Array.<Array.<(boolean|undefined)>>} An array with marked circle points.\n * @private\n */\nol.render.canvas.ReplayGroup.getCircleArray_ = function(radius) {\n  if (ol.render.canvas.ReplayGroup.circleArrayCache_[radius] !== undefined) {\n    return ol.render.canvas.ReplayGroup.circleArrayCache_[radius];\n  }\n\n  var arraySize = radius * 2 + 1;\n  var arr = new Array(arraySize);\n  for (var i = 0; i < arraySize; i++) {\n    arr[i] = new Array(arraySize);\n  }\n\n  var x = radius;\n  var y = 0;\n  var error = 0;\n\n  while (x >= y) {\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius + x, radius + y);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius + y, radius + x);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius - y, radius + x);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius - x, radius + y);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius - x, radius - y);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius - y, radius - x);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius + y, radius - x);\n    ol.render.canvas.ReplayGroup.fillCircleArrayRowToMiddle_(arr, radius + x, radius - y);\n\n    y++;\n    error += 1 + 2 * y;\n    if (2 * (error - x) + 1 > 0) {\n      x -= 1;\n      error += 1 - 2 * x;\n    }\n  }\n\n  ol.render.canvas.ReplayGroup.circleArrayCache_[radius] = arr;\n  return arr;\n};\n\n\n/**\n * @param {!Object.<string, Array.<*>>} declutterReplays Declutter replays.\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n */\nol.render.canvas.ReplayGroup.replayDeclutter = function(declutterReplays, context, rotation) {\n  var zs = Object.keys(declutterReplays).map(Number).sort(ol.array.numberSafeCompareFunction);\n  var skippedFeatureUids = {};\n  for (var z = 0, zz = zs.length; z < zz; ++z) {\n    var replayData = declutterReplays[zs[z].toString()];\n    for (var i = 0, ii = replayData.length; i < ii;) {\n      var replay = replayData[i++];\n      var transform = replayData[i++];\n      replay.replay(context, transform, rotation, skippedFeatureUids);\n    }\n  }\n};\n\n\n/**\n * @param {boolean} group Group with previous replay.\n * @return {ol.DeclutterGroup} Declutter instruction group.\n */\nol.render.canvas.ReplayGroup.prototype.addDeclutter = function(group) {\n  var declutter = null;\n  if (this.declutterTree_) {\n    if (group) {\n      declutter = this.declutterGroup_;\n      /** @type {number} */ (declutter[4])++;\n    } else {\n      declutter = this.declutterGroup_ = ol.extent.createEmpty();\n      declutter.push(1);\n    }\n  }\n  return declutter;\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform} transform Transform.\n */\nol.render.canvas.ReplayGroup.prototype.clip = function(context, transform) {\n  var flatClipCoords = this.getClipCoords(transform);\n  context.beginPath();\n  context.moveTo(flatClipCoords[0], flatClipCoords[1]);\n  context.lineTo(flatClipCoords[2], flatClipCoords[3]);\n  context.lineTo(flatClipCoords[4], flatClipCoords[5]);\n  context.lineTo(flatClipCoords[6], flatClipCoords[7]);\n  context.clip();\n};\n\n\n/**\n * @param {Array.<ol.render.ReplayType>} replays Replays.\n * @return {boolean} Has replays of the provided types.\n */\nol.render.canvas.ReplayGroup.prototype.hasReplays = function(replays) {\n  for (var zIndex in this.replaysByZIndex_) {\n    var candidates = this.replaysByZIndex_[zIndex];\n    for (var i = 0, ii = replays.length; i < ii; ++i) {\n      if (replays[i] in candidates) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n\n\n/**\n * FIXME empty description for jsdoc\n */\nol.render.canvas.ReplayGroup.prototype.finish = function() {\n  var zKey;\n  for (zKey in this.replaysByZIndex_) {\n    var replays = this.replaysByZIndex_[zKey];\n    var replayKey;\n    for (replayKey in replays) {\n      replays[replayKey].finish();\n    }\n  }\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *     to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T} callback Feature\n *     callback.\n * @param {Object.<string, ol.DeclutterGroup>} declutterReplays Declutter\n *     replays.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.canvas.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(\n    coordinate, resolution, rotation, hitTolerance, skippedFeaturesHash, callback, declutterReplays) {\n\n  hitTolerance = Math.round(hitTolerance);\n  var contextSize = hitTolerance * 2 + 1;\n  var transform = ol.transform.compose(this.hitDetectionTransform_,\n      hitTolerance + 0.5, hitTolerance + 0.5,\n      1 / resolution, -1 / resolution,\n      -rotation,\n      -coordinate[0], -coordinate[1]);\n  var context = this.hitDetectionContext_;\n\n  if (context.canvas.width !== contextSize || context.canvas.height !== contextSize) {\n    context.canvas.width = contextSize;\n    context.canvas.height = contextSize;\n  } else {\n    context.clearRect(0, 0, contextSize, contextSize);\n  }\n\n  /**\n   * @type {ol.Extent}\n   */\n  var hitExtent;\n  if (this.renderBuffer_ !== undefined) {\n    hitExtent = ol.extent.createEmpty();\n    ol.extent.extendCoordinate(hitExtent, coordinate);\n    ol.extent.buffer(hitExtent, resolution * (this.renderBuffer_ + hitTolerance), hitExtent);\n  }\n\n  var mask = ol.render.canvas.ReplayGroup.getCircleArray_(hitTolerance);\n  var declutteredFeatures;\n  if (this.declutterTree_) {\n    declutteredFeatures = this.declutterTree_.all().map(function(entry) {\n      return entry.value;\n    });\n  }\n\n  var replayType;\n\n  /**\n   * @param {ol.Feature|ol.render.Feature} feature Feature.\n   * @return {?} Callback result.\n   */\n  function featureCallback(feature) {\n    var imageData = context.getImageData(0, 0, contextSize, contextSize).data;\n    for (var i = 0; i < contextSize; i++) {\n      for (var j = 0; j < contextSize; j++) {\n        if (mask[i][j]) {\n          if (imageData[(j * contextSize + i) * 4 + 3] > 0) {\n            var result;\n            if (!(declutteredFeatures && (replayType == ol.render.ReplayType.IMAGE || replayType == ol.render.ReplayType.TEXT)) ||\n                declutteredFeatures.indexOf(feature) !== -1) {\n              result = callback(feature);\n            }\n            if (result) {\n              return result;\n            } else {\n              context.clearRect(0, 0, contextSize, contextSize);\n              return undefined;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /** @type {Array.<number>} */\n  var zs = Object.keys(this.replaysByZIndex_).map(Number);\n  zs.sort(ol.array.numberSafeCompareFunction);\n\n  var i, j, replays, replay, result;\n  for (i = zs.length - 1; i >= 0; --i) {\n    var zIndexKey = zs[i].toString();\n    replays = this.replaysByZIndex_[zIndexKey];\n    for (j = ol.render.replay.ORDER.length - 1; j >= 0; --j) {\n      replayType = ol.render.replay.ORDER[j];\n      replay = replays[replayType];\n      if (replay !== undefined) {\n        if (declutterReplays &&\n            (replayType == ol.render.ReplayType.IMAGE || replayType == ol.render.ReplayType.TEXT)) {\n          var declutter = declutterReplays[zIndexKey];\n          if (!declutter) {\n            declutterReplays[zIndexKey] = [replay, transform.slice(0)];\n          } else {\n            declutter.push(replay, transform.slice(0));\n          }\n        } else {\n          result = replay.replayHitDetection(context, transform, rotation,\n              skippedFeaturesHash, featureCallback, hitExtent);\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @param {ol.Transform} transform Transform.\n * @return {Array.<number>} Clip coordinates.\n */\nol.render.canvas.ReplayGroup.prototype.getClipCoords = function(transform) {\n  var maxExtent = this.maxExtent_;\n  var minX = maxExtent[0];\n  var minY = maxExtent[1];\n  var maxX = maxExtent[2];\n  var maxY = maxExtent[3];\n  var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];\n  ol.geom.flat.transform.transform2D(\n      flatClipCoords, 0, 8, 2, transform, flatClipCoords);\n  return flatClipCoords;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {\n  var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n  var replays = this.replaysByZIndex_[zIndexKey];\n  if (replays === undefined) {\n    replays = {};\n    this.replaysByZIndex_[zIndexKey] = replays;\n  }\n  var replay = replays[replayType];\n  if (replay === undefined) {\n    var Constructor = ol.render.canvas.ReplayGroup.BATCH_CONSTRUCTORS_[replayType];\n    replay = new Constructor(this.tolerance_, this.maxExtent_,\n        this.resolution_, this.pixelRatio_, this.overlaps_, this.declutterTree_);\n    replays[replayType] = replay;\n  }\n  return replay;\n};\n\n\n/**\n * @return {Object.<string, Object.<ol.render.ReplayType, ol.render.canvas.Replay>>} Replays.\n */\nol.render.canvas.ReplayGroup.prototype.getReplays = function() {\n  return this.replaysByZIndex_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.canvas.ReplayGroup.prototype.isEmpty = function() {\n  return ol.obj.isEmpty(this.replaysByZIndex_);\n};\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {ol.Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *     to skip.\n * @param {Array.<ol.render.ReplayType>=} opt_replayTypes Ordered replay types\n *     to replay. Default is {@link ol.render.replay.ORDER}\n * @param {Object.<string, ol.DeclutterGroup>=} opt_declutterReplays Declutter\n *     replays.\n */\nol.render.canvas.ReplayGroup.prototype.replay = function(context,\n    transform, viewRotation, skippedFeaturesHash, opt_replayTypes, opt_declutterReplays) {\n\n  /** @type {Array.<number>} */\n  var zs = Object.keys(this.replaysByZIndex_).map(Number);\n  zs.sort(ol.array.numberSafeCompareFunction);\n\n  // setup clipping so that the parts of over-simplified geometries are not\n  // visible outside the current extent when panning\n  context.save();\n  this.clip(context, transform);\n\n  var replayTypes = opt_replayTypes ? opt_replayTypes : ol.render.replay.ORDER;\n  var i, ii, j, jj, replays, replay;\n  for (i = 0, ii = zs.length; i < ii; ++i) {\n    var zIndexKey = zs[i].toString();\n    replays = this.replaysByZIndex_[zIndexKey];\n    for (j = 0, jj = replayTypes.length; j < jj; ++j) {\n      var replayType = replayTypes[j];\n      replay = replays[replayType];\n      if (replay !== undefined) {\n        if (opt_declutterReplays &&\n            (replayType == ol.render.ReplayType.IMAGE || replayType == ol.render.ReplayType.TEXT)) {\n          var declutter = opt_declutterReplays[zIndexKey];\n          if (!declutter) {\n            opt_declutterReplays[zIndexKey] = [replay, transform.slice(0)];\n          } else {\n            declutter.push(replay, transform.slice(0));\n          }\n        } else {\n          replay.replay(context, transform, viewRotation, skippedFeaturesHash);\n        }\n      }\n    }\n  }\n\n  context.restore();\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<ol.render.ReplayType,\n *                function(new: ol.render.canvas.Replay, number, ol.Extent,\n *                number, number, boolean, Array.<ol.DeclutterGroup>)>}\n */\nol.render.canvas.ReplayGroup.BATCH_CONSTRUCTORS_ = {\n  'Circle': ol.render.canvas.PolygonReplay,\n  'Default': ol.render.canvas.Replay,\n  'Image': ol.render.canvas.ImageReplay,\n  'LineString': ol.render.canvas.LineStringReplay,\n  'Polygon': ol.render.canvas.PolygonReplay,\n  'Text': ol.render.canvas.TextReplay\n};\n\ngoog.provide('ol.renderer.vector');\n\ngoog.require('ol');\ngoog.require('ol.ImageState');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.render.ReplayType');\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature1 Feature 1.\n * @param {ol.Feature|ol.render.Feature} feature2 Feature 2.\n * @return {number} Order.\n */\nol.renderer.vector.defaultOrder = function(feature1, feature2) {\n  return ol.getUid(feature1) - ol.getUid(feature2);\n};\n\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nol.renderer.vector.getSquaredTolerance = function(resolution, pixelRatio) {\n  var tolerance = ol.renderer.vector.getTolerance(resolution, pixelRatio);\n  return tolerance * tolerance;\n};\n\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nol.renderer.vector.getTolerance = function(resolution, pixelRatio) {\n  return ol.SIMPLIFY_TOLERANCE * resolution / pixelRatio;\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.Circle} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderCircleGeometry_ = function(replayGroup, geometry, style, feature) {\n  var fillStyle = style.getFill();\n  var strokeStyle = style.getStroke();\n  if (fillStyle || strokeStyle) {\n    var circleReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.CIRCLE);\n    circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    circleReplay.drawCircle(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {ol.style.Style} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(this: T, ol.events.Event)} listener Listener function.\n * @param {T} thisArg Value to use as `this` when executing `listener`.\n * @return {boolean} `true` if style is loading.\n * @template T\n */\nol.renderer.vector.renderFeature = function(\n    replayGroup, feature, style, squaredTolerance, listener, thisArg) {\n  var loading = false;\n  var imageStyle, imageState;\n  imageStyle = style.getImage();\n  if (imageStyle) {\n    imageState = imageStyle.getImageState();\n    if (imageState == ol.ImageState.LOADED ||\n        imageState == ol.ImageState.ERROR) {\n      imageStyle.unlistenImageChange(listener, thisArg);\n    } else {\n      if (imageState == ol.ImageState.IDLE) {\n        imageStyle.load();\n      }\n      imageState = imageStyle.getImageState();\n      imageStyle.listenImageChange(listener, thisArg);\n      loading = true;\n    }\n  }\n  ol.renderer.vector.renderFeature_(replayGroup, feature, style,\n      squaredTolerance);\n\n  return loading;\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {ol.style.Style} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @private\n */\nol.renderer.vector.renderFeature_ = function(\n    replayGroup, feature, style, squaredTolerance) {\n  var geometry = style.getGeometryFunction()(feature);\n  if (!geometry) {\n    return;\n  }\n  var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);\n  var renderer = style.getRenderer();\n  if (renderer) {\n    ol.renderer.vector.renderGeometry_(replayGroup, simplifiedGeometry, style, feature);\n  } else {\n    var geometryRenderer =\n        ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()];\n    geometryRenderer(replayGroup, simplifiedGeometry, style, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderGeometry_ = function(replayGroup, geometry, style, feature) {\n  if (geometry.getType() == ol.geom.GeometryType.GEOMETRY_COLLECTION) {\n    var geometries = /** @type {ol.geom.GeometryCollection} */ (geometry).getGeometries();\n    for (var i = 0, ii = geometries.length; i < ii; ++i) {\n      ol.renderer.vector.renderGeometry_(replayGroup, geometries[i], style, feature);\n    }\n    return;\n  }\n  var replay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.DEFAULT);\n  replay.drawCustom(/** @type {ol.geom.SimpleGeometry} */ (geometry), feature, style.getRenderer());\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.GeometryCollection} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderGeometryCollectionGeometry_ = function(replayGroup, geometry, style, feature) {\n  var geometries = geometry.getGeometriesArray();\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    var geometryRenderer =\n        ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()];\n    geometryRenderer(replayGroup, geometries[i], style, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.LineString|ol.render.Feature} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderLineStringGeometry_ = function(replayGroup, geometry, style, feature) {\n  var strokeStyle = style.getStroke();\n  if (strokeStyle) {\n    var lineStringReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.LINE_STRING);\n    lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n    lineStringReplay.drawLineString(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.MultiLineString|ol.render.Feature} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderMultiLineStringGeometry_ = function(replayGroup, geometry, style, feature) {\n  var strokeStyle = style.getStroke();\n  if (strokeStyle) {\n    var lineStringReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.LINE_STRING);\n    lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n    lineStringReplay.drawMultiLineString(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.MultiPolygon} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderMultiPolygonGeometry_ = function(replayGroup, geometry, style, feature) {\n  var fillStyle = style.getFill();\n  var strokeStyle = style.getStroke();\n  if (strokeStyle || fillStyle) {\n    var polygonReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.POLYGON);\n    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    polygonReplay.drawMultiPolygon(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.Point|ol.render.Feature} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderPointGeometry_ = function(replayGroup, geometry, style, feature) {\n  var imageStyle = style.getImage();\n  if (imageStyle) {\n    if (imageStyle.getImageState() != ol.ImageState.LOADED) {\n      return;\n    }\n    var imageReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.IMAGE);\n    imageReplay.setImageStyle(imageStyle, replayGroup.addDeclutter(false));\n    imageReplay.drawPoint(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(!!imageStyle));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.MultiPoint|ol.render.Feature} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderMultiPointGeometry_ = function(replayGroup, geometry, style, feature) {\n  var imageStyle = style.getImage();\n  if (imageStyle) {\n    if (imageStyle.getImageState() != ol.ImageState.LOADED) {\n      return;\n    }\n    var imageReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.IMAGE);\n    imageReplay.setImageStyle(imageStyle, replayGroup.addDeclutter(false));\n    imageReplay.drawMultiPoint(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(!!imageStyle));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.Polygon|ol.render.Feature} geometry Geometry.\n * @param {ol.style.Style} style Style.\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.renderer.vector.renderPolygonGeometry_ = function(replayGroup, geometry, style, feature) {\n  var fillStyle = style.getFill();\n  var strokeStyle = style.getStroke();\n  if (fillStyle || strokeStyle) {\n    var polygonReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.POLYGON);\n    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    polygonReplay.drawPolygon(geometry, feature);\n  }\n  var textStyle = style.getText();\n  if (textStyle) {\n    var textReplay = replayGroup.getReplay(\n        style.getZIndex(), ol.render.ReplayType.TEXT);\n    textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false));\n    textReplay.drawText(geometry, feature);\n  }\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<ol.geom.GeometryType,\n *                function(ol.render.ReplayGroup, ol.geom.Geometry,\n *                         ol.style.Style, Object)>}\n */\nol.renderer.vector.GEOMETRY_RENDERERS_ = {\n  'Point': ol.renderer.vector.renderPointGeometry_,\n  'LineString': ol.renderer.vector.renderLineStringGeometry_,\n  'Polygon': ol.renderer.vector.renderPolygonGeometry_,\n  'MultiPoint': ol.renderer.vector.renderMultiPointGeometry_,\n  'MultiLineString': ol.renderer.vector.renderMultiLineStringGeometry_,\n  'MultiPolygon': ol.renderer.vector.renderMultiPolygonGeometry_,\n  'GeometryCollection': ol.renderer.vector.renderGeometryCollectionGeometry_,\n  'Circle': ol.renderer.vector.renderCircleGeometry_\n};\n\ngoog.provide('ol.renderer.canvas.VectorLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.ViewHint');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.ext.rbush');\ngoog.require('ol.extent');\ngoog.require('ol.render.EventType');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.ReplayGroup');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.canvas.Layer');\ngoog.require('ol.renderer.vector');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.canvas.Layer}\n * @param {ol.layer.Vector} vectorLayer Vector layer.\n * @api\n */\nol.renderer.canvas.VectorLayer = function(vectorLayer) {\n\n  ol.renderer.canvas.Layer.call(this, vectorLayer);\n\n  /**\n   * Declutter tree.\n   * @private\n   */\n  this.declutterTree_ = vectorLayer.getDeclutter() ?\n    ol.ext.rbush(9) : null;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.dirty_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedResolution_ = NaN;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.renderedExtent_ = ol.extent.createEmpty();\n\n  /**\n   * @private\n   * @type {function(ol.Feature, ol.Feature): number|null}\n   */\n  this.renderedRenderOrder_ = null;\n\n  /**\n   * @private\n   * @type {ol.render.canvas.ReplayGroup}\n   */\n  this.replayGroup_ = null;\n\n  /**\n   * A new replay group had to be created by `prepareFrame()`\n   * @type {boolean}\n   */\n  this.replayGroupChanged = true;\n\n  /**\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context = ol.dom.createCanvasContext2D();\n\n  ol.events.listen(ol.render.canvas.labelCache, ol.events.EventType.CLEAR, this.handleFontsChanged_, this);\n\n};\nol.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.canvas.VectorLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.CANVAS && layer.getType() === ol.LayerType.VECTOR;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.canvas.VectorLayer} The layer renderer.\n */\nol.renderer.canvas.VectorLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.canvas.VectorLayer(/** @type {ol.layer.Vector} */ (layer));\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorLayer.prototype.disposeInternal = function() {\n  ol.events.unlisten(ol.render.canvas.labelCache, ol.events.EventType.CLEAR, this.handleFontsChanged_, this);\n  ol.renderer.canvas.Layer.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) {\n\n  var extent = frameState.extent;\n  var pixelRatio = frameState.pixelRatio;\n  var skippedFeatureUids = layerState.managed ?\n    frameState.skippedFeatureUids : {};\n  var viewState = frameState.viewState;\n  var projection = viewState.projection;\n  var rotation = viewState.rotation;\n  var projectionExtent = projection.getExtent();\n  var vectorSource = /** @type {ol.source.Vector} */ (this.getLayer().getSource());\n\n  var transform = this.getTransform(frameState, 0);\n\n  this.preCompose(context, frameState, transform);\n\n  // clipped rendering if layer extent is set\n  var clipExtent = layerState.extent;\n  var clipped = clipExtent !== undefined;\n  if (clipped) {\n    this.clip(context, frameState,  /** @type {ol.Extent} */ (clipExtent));\n  }\n  var replayGroup = this.replayGroup_;\n  if (replayGroup && !replayGroup.isEmpty()) {\n    if (this.declutterTree_) {\n      this.declutterTree_.clear();\n    }\n    var layer = /** @type {ol.layer.Vector} */ (this.getLayer());\n    var drawOffsetX = 0;\n    var drawOffsetY = 0;\n    var replayContext;\n    var transparentLayer = layerState.opacity !== 1;\n    var hasRenderListeners = layer.hasListener(ol.render.EventType.RENDER);\n    if (transparentLayer || hasRenderListeners) {\n      var drawWidth = context.canvas.width;\n      var drawHeight = context.canvas.height;\n      if (rotation) {\n        var drawSize = Math.round(Math.sqrt(drawWidth * drawWidth + drawHeight * drawHeight));\n        drawOffsetX = (drawSize - drawWidth) / 2;\n        drawOffsetY = (drawSize - drawHeight) / 2;\n        drawWidth = drawHeight = drawSize;\n      }\n      // resize and clear\n      this.context.canvas.width = drawWidth;\n      this.context.canvas.height = drawHeight;\n      replayContext = this.context;\n    } else {\n      replayContext = context;\n    }\n\n    var alpha = replayContext.globalAlpha;\n    if (!transparentLayer) {\n      // for performance reasons, context.save / context.restore is not used\n      // to save and restore the transformation matrix and the opacity.\n      // see http://jsperf.com/context-save-restore-versus-variable\n      replayContext.globalAlpha = layerState.opacity;\n    }\n\n    if (replayContext != context) {\n      replayContext.translate(drawOffsetX, drawOffsetY);\n    }\n\n    var width = frameState.size[0] * pixelRatio;\n    var height = frameState.size[1] * pixelRatio;\n    ol.render.canvas.rotateAtOffset(replayContext, -rotation,\n        width / 2, height / 2);\n    replayGroup.replay(replayContext, transform, rotation, skippedFeatureUids);\n    if (vectorSource.getWrapX() && projection.canWrapX() &&\n        !ol.extent.containsExtent(projectionExtent, extent)) {\n      var startX = extent[0];\n      var worldWidth = ol.extent.getWidth(projectionExtent);\n      var world = 0;\n      var offsetX;\n      while (startX < projectionExtent[0]) {\n        --world;\n        offsetX = worldWidth * world;\n        transform = this.getTransform(frameState, offsetX);\n        replayGroup.replay(replayContext, transform, rotation, skippedFeatureUids);\n        startX += worldWidth;\n      }\n      world = 0;\n      startX = extent[2];\n      while (startX > projectionExtent[2]) {\n        ++world;\n        offsetX = worldWidth * world;\n        transform = this.getTransform(frameState, offsetX);\n        replayGroup.replay(replayContext, transform, rotation, skippedFeatureUids);\n        startX -= worldWidth;\n      }\n      // restore original transform for render and compose events\n      transform = this.getTransform(frameState, 0);\n    }\n    ol.render.canvas.rotateAtOffset(replayContext, rotation,\n        width / 2, height / 2);\n\n    if (replayContext != context) {\n      if (hasRenderListeners) {\n        this.dispatchRenderEvent(replayContext, frameState, transform);\n      }\n      if (transparentLayer) {\n        var mainContextAlpha = context.globalAlpha;\n        context.globalAlpha = layerState.opacity;\n        context.drawImage(replayContext.canvas, -drawOffsetX, -drawOffsetY);\n        context.globalAlpha = mainContextAlpha;\n      } else {\n        context.drawImage(replayContext.canvas, -drawOffsetX, -drawOffsetY);\n      }\n      replayContext.translate(-drawOffsetX, -drawOffsetY);\n    }\n\n    if (!transparentLayer) {\n      replayContext.globalAlpha = alpha;\n    }\n  }\n\n  if (clipped) {\n    context.restore();\n  }\n  this.postCompose(context, frameState, layerState, transform);\n\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  if (!this.replayGroup_) {\n    return undefined;\n  } else {\n    var resolution = frameState.viewState.resolution;\n    var rotation = frameState.viewState.rotation;\n    var layer = /** @type {ol.layer.Vector} */ (this.getLayer());\n    /** @type {Object.<string, boolean>} */\n    var features = {};\n    var result = this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,\n        rotation, hitTolerance, {},\n        /**\n         * @param {ol.Feature|ol.render.Feature} feature Feature.\n         * @return {?} Callback result.\n         */\n        function(feature) {\n          var key = ol.getUid(feature).toString();\n          if (!(key in features)) {\n            features[key] = true;\n            return callback.call(thisArg, feature, layer);\n          }\n        }, null);\n    return result;\n  }\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n */\nol.renderer.canvas.VectorLayer.prototype.handleFontsChanged_ = function(event) {\n  var layer = this.getLayer();\n  if (layer.getVisible() && this.replayGroup_) {\n    layer.changed();\n  }\n};\n\n\n/**\n * Handle changes in image style state.\n * @param {ol.events.Event} event Image style change event.\n * @private\n */\nol.renderer.canvas.VectorLayer.prototype.handleStyleImageChange_ = function(event) {\n  this.renderIfReadyAndVisible();\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, layerState) {\n\n  var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());\n  var vectorSource = vectorLayer.getSource();\n\n  this.updateLogos(frameState, vectorSource);\n\n  var animating = frameState.viewHints[ol.ViewHint.ANIMATING];\n  var interacting = frameState.viewHints[ol.ViewHint.INTERACTING];\n  var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n  var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n\n  if (!this.dirty_ && (!updateWhileAnimating && animating) ||\n      (!updateWhileInteracting && interacting)) {\n    return true;\n  }\n\n  var frameStateExtent = frameState.extent;\n  var viewState = frameState.viewState;\n  var projection = viewState.projection;\n  var resolution = viewState.resolution;\n  var pixelRatio = frameState.pixelRatio;\n  var vectorLayerRevision = vectorLayer.getRevision();\n  var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n  var vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n\n  if (vectorLayerRenderOrder === undefined) {\n    vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;\n  }\n\n  var extent = ol.extent.buffer(frameStateExtent,\n      vectorLayerRenderBuffer * resolution);\n  var projectionExtent = viewState.projection.getExtent();\n\n  if (vectorSource.getWrapX() && viewState.projection.canWrapX() &&\n      !ol.extent.containsExtent(projectionExtent, frameState.extent)) {\n    // For the replay group, we need an extent that intersects the real world\n    // (-180° to +180°). To support geometries in a coordinate range from -540°\n    // to +540°, we add at least 1 world width on each side of the projection\n    // extent. If the viewport is wider than the world, we need to add half of\n    // the viewport width to make sure we cover the whole viewport.\n    var worldWidth = ol.extent.getWidth(projectionExtent);\n    var buffer = Math.max(ol.extent.getWidth(extent) / 2, worldWidth);\n    extent[0] = projectionExtent[0] - buffer;\n    extent[2] = projectionExtent[2] + buffer;\n  }\n\n  if (!this.dirty_ &&\n      this.renderedResolution_ == resolution &&\n      this.renderedRevision_ == vectorLayerRevision &&\n      this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n      ol.extent.containsExtent(this.renderedExtent_, extent)) {\n    this.replayGroupChanged = false;\n    return true;\n  }\n\n  this.replayGroup_ = null;\n\n  this.dirty_ = false;\n\n  var replayGroup = new ol.render.canvas.ReplayGroup(\n      ol.renderer.vector.getTolerance(resolution, pixelRatio), extent, resolution,\n      pixelRatio, vectorSource.getOverlaps(), this.declutterTree_, vectorLayer.getRenderBuffer());\n  vectorSource.loadFeatures(extent, resolution, projection);\n  /**\n   * @param {ol.Feature} feature Feature.\n   * @this {ol.renderer.canvas.VectorLayer}\n   */\n  var renderFeature = function(feature) {\n    var styles;\n    var styleFunction = feature.getStyleFunction();\n    if (styleFunction) {\n      styles = styleFunction.call(feature, resolution);\n    } else {\n      styleFunction = vectorLayer.getStyleFunction();\n      if (styleFunction) {\n        styles = styleFunction(feature, resolution);\n      }\n    }\n    if (styles) {\n      var dirty = this.renderFeature(\n          feature, resolution, pixelRatio, styles, replayGroup);\n      this.dirty_ = this.dirty_ || dirty;\n    }\n  }.bind(this);\n  if (vectorLayerRenderOrder) {\n    /** @type {Array.<ol.Feature>} */\n    var features = [];\n    vectorSource.forEachFeatureInExtent(extent,\n        /**\n         * @param {ol.Feature} feature Feature.\n         */\n        function(feature) {\n          features.push(feature);\n        }, this);\n    features.sort(vectorLayerRenderOrder);\n    for (var i = 0, ii = features.length; i < ii; ++i) {\n      renderFeature(features[i]);\n    }\n  } else {\n    vectorSource.forEachFeatureInExtent(extent, renderFeature, this);\n  }\n  replayGroup.finish();\n\n  this.renderedResolution_ = resolution;\n  this.renderedRevision_ = vectorLayerRevision;\n  this.renderedRenderOrder_ = vectorLayerRenderOrder;\n  this.renderedExtent_ = extent;\n  this.replayGroup_ = replayGroup;\n\n  this.replayGroupChanged = true;\n  return true;\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of\n *     styles.\n * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.\n * @return {boolean} `true` if an image is loading.\n */\nol.renderer.canvas.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styles, replayGroup) {\n  if (!styles) {\n    return false;\n  }\n  var loading = false;\n  if (Array.isArray(styles)) {\n    for (var i = 0, ii = styles.length; i < ii; ++i) {\n      loading = ol.renderer.vector.renderFeature(\n          replayGroup, feature, styles[i],\n          ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),\n          this.handleStyleImageChange_, this) || loading;\n    }\n  } else {\n    loading = ol.renderer.vector.renderFeature(\n        replayGroup, feature, styles,\n        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),\n        this.handleStyleImageChange_, this);\n  }\n  return loading;\n};\n\ngoog.provide('ol.layer.VectorTileRenderType');\n\n/**\n * @enum {string}\n * Render mode for vector tiles:\n *  * `'image'`: Vector tiles are rendered as images. Great performance, but\n *    point symbols and texts are always rotated with the view and pixels are\n *    scaled during zoom animations.\n *  * `'hybrid'`: Polygon and line elements are rendered as images, so pixels\n *    are scaled during zoom animations. Point symbols and texts are accurately\n *    rendered as vectors and can stay upright on rotated views.\n *  * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering\n *    even during animations, but slower performance than the other options.\n * @api\n */\nol.layer.VectorTileRenderType = {\n  IMAGE: 'image',\n  HYBRID: 'hybrid',\n  VECTOR: 'vector'\n};\n\ngoog.provide('ol.renderer.canvas.VectorTileLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.TileState');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.ext.rbush');\ngoog.require('ol.extent');\ngoog.require('ol.layer.VectorTileRenderType');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Units');\ngoog.require('ol.render.ReplayType');\ngoog.require('ol.render.canvas');\ngoog.require('ol.render.canvas.ReplayGroup');\ngoog.require('ol.render.replay');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.canvas.TileLayer');\ngoog.require('ol.renderer.vector');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.canvas.TileLayer}\n * @param {ol.layer.VectorTile} layer VectorTile layer.\n * @api\n */\nol.renderer.canvas.VectorTileLayer = function(layer) {\n\n  /**\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context = null;\n\n  ol.renderer.canvas.TileLayer.call(this, layer);\n\n  /**\n   * Declutter tree.\n   * @private\n     */\n  this.declutterTree_ = layer.getDeclutter() ? ol.ext.rbush(9) : null;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.dirty_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedLayerRevision_;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.tmpTransform_ = ol.transform.create();\n\n  // Use lower resolution for pure vector rendering. Closest resolution otherwise.\n  this.zDirection =\n      layer.getRenderMode() == ol.layer.VectorTileRenderType.VECTOR ? 1 : 0;\n\n  ol.events.listen(ol.render.canvas.labelCache, ol.events.EventType.CLEAR, this.handleFontsChanged_, this);\n\n};\nol.inherits(ol.renderer.canvas.VectorTileLayer, ol.renderer.canvas.TileLayer);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.canvas.VectorTileLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.CANVAS && layer.getType() === ol.LayerType.VECTOR_TILE;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.canvas.VectorTileLayer} The layer renderer.\n */\nol.renderer.canvas.VectorTileLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.canvas.VectorTileLayer(/** @type {ol.layer.VectorTile} */ (layer));\n};\n\n\n/**\n * @const\n * @type {!Object.<string, Array.<ol.render.ReplayType>>}\n */\nol.renderer.canvas.VectorTileLayer.IMAGE_REPLAYS = {\n  'image': [ol.render.ReplayType.POLYGON, ol.render.ReplayType.CIRCLE,\n    ol.render.ReplayType.LINE_STRING, ol.render.ReplayType.IMAGE, ol.render.ReplayType.TEXT],\n  'hybrid': [ol.render.ReplayType.POLYGON, ol.render.ReplayType.LINE_STRING]\n};\n\n\n/**\n * @const\n * @type {!Object.<string, Array.<ol.render.ReplayType>>}\n */\nol.renderer.canvas.VectorTileLayer.VECTOR_REPLAYS = {\n  'image': [ol.render.ReplayType.DEFAULT],\n  'hybrid': [ol.render.ReplayType.IMAGE, ol.render.ReplayType.TEXT, ol.render.ReplayType.DEFAULT],\n  'vector': ol.render.replay.ORDER\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorTileLayer.prototype.disposeInternal = function() {\n  ol.events.unlisten(ol.render.canvas.labelCache, ol.events.EventType.CLEAR, this.handleFontsChanged_, this);\n  ol.renderer.canvas.TileLayer.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorTileLayer.prototype.prepareFrame = function(frameState, layerState) {\n  var layer = this.getLayer();\n  var layerRevision = layer.getRevision();\n  if (this.renderedLayerRevision_ != layerRevision) {\n    this.renderedTiles.length = 0;\n    var renderMode = layer.getRenderMode();\n    if (!this.context && renderMode != ol.layer.VectorTileRenderType.VECTOR) {\n      this.context = ol.dom.createCanvasContext2D();\n    }\n    if (this.context && renderMode == ol.layer.VectorTileRenderType.VECTOR) {\n      this.context = null;\n    }\n  }\n  this.renderedLayerRevision_ = layerRevision;\n  return ol.renderer.canvas.TileLayer.prototype.prepareFrame.apply(this, arguments);\n};\n\n\n/**\n * @param {ol.VectorImageTile} tile Tile.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup_ = function(\n    tile, frameState) {\n  var layer = this.getLayer();\n  var pixelRatio = frameState.pixelRatio;\n  var projection = frameState.viewState.projection;\n  var revision = layer.getRevision();\n  var renderOrder = /** @type {ol.RenderOrderFunction} */\n      (layer.getRenderOrder()) || null;\n\n  var replayState = tile.getReplayState(layer);\n  if (!replayState.dirty && replayState.renderedRevision == revision &&\n      replayState.renderedRenderOrder == renderOrder) {\n    return;\n  }\n\n  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());\n  var sourceTileGrid = source.getTileGrid();\n  var tileGrid = source.getTileGridForProjection(projection);\n  var resolution = tileGrid.getResolution(tile.tileCoord[0]);\n  var tileExtent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord);\n\n  var zIndexKeys = {};\n  for (var t = 0, tt = tile.tileKeys.length; t < tt; ++t) {\n    var sourceTile = tile.getTile(tile.tileKeys[t]);\n    if (sourceTile.getState() == ol.TileState.ERROR) {\n      continue;\n    }\n\n    var sourceTileCoord = sourceTile.tileCoord;\n    var sourceTileExtent = sourceTileGrid.getTileCoordExtent(sourceTileCoord);\n    var sharedExtent = ol.extent.getIntersection(tileExtent, sourceTileExtent);\n    var bufferedExtent = ol.extent.equals(sourceTileExtent, sharedExtent) ? null :\n      ol.extent.buffer(sharedExtent, layer.getRenderBuffer() * resolution);\n    var tileProjection = sourceTile.getProjection();\n    var reproject = false;\n    if (!ol.proj.equivalent(projection, tileProjection)) {\n      reproject = true;\n      sourceTile.setProjection(projection);\n    }\n    replayState.dirty = false;\n    var replayGroup = new ol.render.canvas.ReplayGroup(0, sharedExtent, resolution,\n        pixelRatio, source.getOverlaps(), this.declutterTree_, layer.getRenderBuffer());\n    var squaredTolerance = ol.renderer.vector.getSquaredTolerance(\n        resolution, pixelRatio);\n\n    /**\n     * @param {ol.Feature|ol.render.Feature} feature Feature.\n     * @this {ol.renderer.canvas.VectorTileLayer}\n     */\n    var renderFeature = function(feature) {\n      var styles;\n      var styleFunction = feature.getStyleFunction();\n      if (styleFunction) {\n        styles = styleFunction.call(/** @type {ol.Feature} */ (feature), resolution);\n      } else {\n        styleFunction = layer.getStyleFunction();\n        if (styleFunction) {\n          styles = styleFunction(feature, resolution);\n        }\n      }\n      if (styles) {\n        var dirty = this.renderFeature(feature, squaredTolerance, styles,\n            replayGroup);\n        this.dirty_ = this.dirty_ || dirty;\n        replayState.dirty = replayState.dirty || dirty;\n      }\n    };\n\n    var features = sourceTile.getFeatures();\n    if (renderOrder && renderOrder !== replayState.renderedRenderOrder) {\n      features.sort(renderOrder);\n    }\n    var feature;\n    for (var i = 0, ii = features.length; i < ii; ++i) {\n      feature = features[i];\n      if (reproject) {\n        if (tileProjection.getUnits() == ol.proj.Units.TILE_PIXELS) {\n          // projected tile extent\n          tileProjection.setWorldExtent(sourceTileExtent);\n          // tile extent in tile pixel space\n          tileProjection.setExtent(sourceTile.getExtent());\n        }\n        feature.getGeometry().transform(tileProjection, projection);\n      }\n      if (!bufferedExtent || ol.extent.intersects(bufferedExtent, feature.getGeometry().getExtent())) {\n        renderFeature.call(this, feature);\n      }\n    }\n    replayGroup.finish();\n    for (var r in replayGroup.getReplays()) {\n      zIndexKeys[r] = true;\n    }\n    sourceTile.setReplayGroup(layer, tile.tileCoord.toString(), replayGroup);\n  }\n  replayState.renderedRevision = revision;\n  replayState.renderedRenderOrder = renderOrder;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorTileLayer.prototype.drawTileImage = function(\n    tile, frameState, layerState, x, y, w, h, gutter, transition) {\n  var vectorImageTile = /** @type {ol.VectorImageTile} */ (tile);\n  this.createReplayGroup_(vectorImageTile, frameState);\n  if (this.context) {\n    this.renderTileImage_(vectorImageTile, frameState, layerState);\n    ol.renderer.canvas.TileLayer.prototype.drawTileImage.apply(this, arguments);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorTileLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  var resolution = frameState.viewState.resolution;\n  var rotation = frameState.viewState.rotation;\n  hitTolerance = hitTolerance == undefined ? 0 : hitTolerance;\n  var layer = this.getLayer();\n  /** @type {Object.<string, boolean>} */\n  var features = {};\n\n  /** @type {Array.<ol.VectorImageTile>} */\n  var renderedTiles = this.renderedTiles;\n\n  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());\n  var tileGrid = source.getTileGridForProjection(frameState.viewState.projection);\n  var bufferedExtent, found;\n  var i, ii, replayGroup;\n  var tile, tileCoord, tileExtent;\n  for (i = 0, ii = renderedTiles.length; i < ii; ++i) {\n    tile = renderedTiles[i];\n    tileCoord = tile.wrappedTileCoord;\n    tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent);\n    bufferedExtent = ol.extent.buffer(tileExtent, hitTolerance * resolution, bufferedExtent);\n    if (!ol.extent.containsCoordinate(bufferedExtent, coordinate)) {\n      continue;\n    }\n    for (var t = 0, tt = tile.tileKeys.length; t < tt; ++t) {\n      var sourceTile = tile.getTile(tile.tileKeys[t]);\n      if (sourceTile.getState() == ol.TileState.ERROR) {\n        continue;\n      }\n      replayGroup = sourceTile.getReplayGroup(layer, tile.tileCoord.toString());\n      found = found || replayGroup.forEachFeatureAtCoordinate(\n          coordinate, resolution, rotation, hitTolerance, {},\n          /**\n           * @param {ol.Feature|ol.render.Feature} feature Feature.\n           * @return {?} Callback result.\n           */\n          function(feature) {\n            var key = ol.getUid(feature).toString();\n            if (!(key in features)) {\n              features[key] = true;\n              return callback.call(thisArg, feature, layer);\n            }\n          }, null);\n    }\n  }\n  return found;\n};\n\n\n/**\n * @param {ol.VectorTile} tile Tile.\n * @param {olx.FrameState} frameState Frame state.\n * @return {ol.Transform} transform Transform.\n * @private\n */\nol.renderer.canvas.VectorTileLayer.prototype.getReplayTransform_ = function(tile, frameState) {\n  var layer = this.getLayer();\n  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());\n  var tileGrid = source.getTileGrid();\n  var tileCoord = tile.tileCoord;\n  var tileResolution = tileGrid.getResolution(tileCoord[0]);\n  var viewState = frameState.viewState;\n  var pixelRatio = frameState.pixelRatio;\n  var renderResolution = viewState.resolution / pixelRatio;\n  var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent);\n  var center = viewState.center;\n  var origin = ol.extent.getTopLeft(tileExtent);\n  var size = frameState.size;\n  var offsetX = Math.round(pixelRatio * size[0] / 2);\n  var offsetY = Math.round(pixelRatio * size[1] / 2);\n  return ol.transform.compose(this.tmpTransform_,\n      offsetX, offsetY,\n      tileResolution / renderResolution, tileResolution / renderResolution,\n      viewState.rotation,\n      (origin[0] - center[0]) / tileResolution,\n      (center[1] - origin[1]) / tileResolution);\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n */\nol.renderer.canvas.VectorTileLayer.prototype.handleFontsChanged_ = function(event) {\n  var layer = this.getLayer();\n  if (layer.getVisible() && this.renderedLayerRevision_ !== undefined) {\n    layer.changed();\n  }\n};\n\n\n/**\n * Handle changes in image style state.\n * @param {ol.events.Event} event Image style change event.\n * @private\n */\nol.renderer.canvas.VectorTileLayer.prototype.handleStyleImageChange_ = function(event) {\n  this.renderIfReadyAndVisible();\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.canvas.VectorTileLayer.prototype.postCompose = function(context, frameState, layerState) {\n  var layer = this.getLayer();\n  var declutterReplays = layer.getDeclutter() ? {} : null;\n  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());\n  var renderMode = layer.getRenderMode();\n  var replayTypes = ol.renderer.canvas.VectorTileLayer.VECTOR_REPLAYS[renderMode];\n  var pixelRatio = frameState.pixelRatio;\n  var rotation = frameState.viewState.rotation;\n  var size = frameState.size;\n  var offsetX, offsetY;\n  if (rotation) {\n    offsetX = Math.round(pixelRatio * size[0] / 2);\n    offsetY = Math.round(pixelRatio * size[1] / 2);\n    ol.render.canvas.rotateAtOffset(context, -rotation, offsetX, offsetY);\n  }\n  if (declutterReplays) {\n    this.declutterTree_.clear();\n  }\n  var tiles = this.renderedTiles;\n  var tileGrid = source.getTileGridForProjection(frameState.viewState.projection);\n  var clips = [];\n  var zs = [];\n  for (var i = tiles.length - 1; i >= 0; --i) {\n    var tile = /** @type {ol.VectorImageTile} */ (tiles[i]);\n    if (tile.getState() == ol.TileState.ABORT) {\n      continue;\n    }\n    var tileCoord = tile.tileCoord;\n    var worldOffset = tileGrid.getTileCoordExtent(tileCoord)[0] -\n        tileGrid.getTileCoordExtent(tile.wrappedTileCoord)[0];\n    var transform = undefined;\n    for (var t = 0, tt = tile.tileKeys.length; t < tt; ++t) {\n      var sourceTile = tile.getTile(tile.tileKeys[t]);\n      if (sourceTile.getState() == ol.TileState.ERROR) {\n        continue;\n      }\n      var replayGroup = sourceTile.getReplayGroup(layer, tileCoord.toString());\n      if (renderMode != ol.layer.VectorTileRenderType.VECTOR && !replayGroup.hasReplays(replayTypes)) {\n        continue;\n      }\n      if (!transform) {\n        transform = this.getTransform(frameState, worldOffset);\n      }\n      var currentZ = sourceTile.tileCoord[0];\n      var currentClip = replayGroup.getClipCoords(transform);\n      context.save();\n      context.globalAlpha = layerState.opacity;\n      // Create a clip mask for regions in this low resolution tile that are\n      // already filled by a higher resolution tile\n      for (var j = 0, jj = clips.length; j < jj; ++j) {\n        var clip = clips[j];\n        if (currentZ < zs[j]) {\n          context.beginPath();\n          // counter-clockwise (outer ring) for current tile\n          context.moveTo(currentClip[0], currentClip[1]);\n          context.lineTo(currentClip[2], currentClip[3]);\n          context.lineTo(currentClip[4], currentClip[5]);\n          context.lineTo(currentClip[6], currentClip[7]);\n          // clockwise (inner ring) for higher resolution tile\n          context.moveTo(clip[6], clip[7]);\n          context.lineTo(clip[4], clip[5]);\n          context.lineTo(clip[2], clip[3]);\n          context.lineTo(clip[0], clip[1]);\n          context.clip();\n        }\n      }\n      replayGroup.replay(context, transform, rotation, {}, replayTypes, declutterReplays);\n      context.restore();\n      clips.push(currentClip);\n      zs.push(currentZ);\n    }\n  }\n  if (declutterReplays) {\n    ol.render.canvas.ReplayGroup.replayDeclutter(declutterReplays, context, rotation);\n  }\n  if (rotation) {\n    ol.render.canvas.rotateAtOffset(context, rotation,\n        /** @type {number} */ (offsetX), /** @type {number} */ (offsetY));\n  }\n  ol.renderer.canvas.TileLayer.prototype.postCompose.apply(this, arguments);\n};\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of\n *     styles.\n * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.\n * @return {boolean} `true` if an image is loading.\n */\nol.renderer.canvas.VectorTileLayer.prototype.renderFeature = function(feature, squaredTolerance, styles, replayGroup) {\n  if (!styles) {\n    return false;\n  }\n  var loading = false;\n  if (Array.isArray(styles)) {\n    for (var i = 0, ii = styles.length; i < ii; ++i) {\n      loading = ol.renderer.vector.renderFeature(\n          replayGroup, feature, styles[i], squaredTolerance,\n          this.handleStyleImageChange_, this) || loading;\n    }\n  } else {\n    loading = ol.renderer.vector.renderFeature(\n        replayGroup, feature, styles, squaredTolerance,\n        this.handleStyleImageChange_, this);\n  }\n  return loading;\n};\n\n\n/**\n * @param {ol.VectorImageTile} tile Tile.\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @private\n */\nol.renderer.canvas.VectorTileLayer.prototype.renderTileImage_ = function(\n    tile, frameState, layerState) {\n  var layer = this.getLayer();\n  var replayState = tile.getReplayState(layer);\n  var revision = layer.getRevision();\n  var replays = ol.renderer.canvas.VectorTileLayer.IMAGE_REPLAYS[layer.getRenderMode()];\n  if (replays && replayState.renderedTileRevision !== revision) {\n    replayState.renderedTileRevision = revision;\n    var tileCoord = tile.wrappedTileCoord;\n    var z = tileCoord[0];\n    var pixelRatio = frameState.pixelRatio;\n    var source = /** @type {ol.source.VectorTile} */ (layer.getSource());\n    var tileGrid = source.getTileGridForProjection(frameState.viewState.projection);\n    var resolution = tileGrid.getResolution(z);\n    var context = tile.getContext(layer);\n    var size = source.getTilePixelSize(z, pixelRatio, frameState.viewState.projection);\n    context.canvas.width = size[0];\n    context.canvas.height = size[1];\n    var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n    for (var i = 0, ii = tile.tileKeys.length; i < ii; ++i) {\n      var sourceTile = tile.getTile(tile.tileKeys[i]);\n      if (sourceTile.getState() == ol.TileState.ERROR) {\n        continue;\n      }\n      var pixelScale = pixelRatio / resolution;\n      var transform = ol.transform.reset(this.tmpTransform_);\n      ol.transform.scale(transform, pixelScale, -pixelScale);\n      ol.transform.translate(transform, -tileExtent[0], -tileExtent[3]);\n      var replayGroup = sourceTile.getReplayGroup(layer, tile.tileCoord.toString());\n      replayGroup.replay(context, transform, 0, {}, replays);\n    }\n  }\n};\n\ngoog.provide('ol.CanvasMap');\n\ngoog.require('ol');\ngoog.require('ol.PluggableMap');\ngoog.require('ol.PluginType');\ngoog.require('ol.control');\ngoog.require('ol.interaction');\ngoog.require('ol.obj');\ngoog.require('ol.plugins');\ngoog.require('ol.renderer.canvas.ImageLayer');\ngoog.require('ol.renderer.canvas.Map');\ngoog.require('ol.renderer.canvas.TileLayer');\ngoog.require('ol.renderer.canvas.VectorLayer');\ngoog.require('ol.renderer.canvas.VectorTileLayer');\n\n\nol.plugins.register(ol.PluginType.MAP_RENDERER, ol.renderer.canvas.Map);\nol.plugins.registerMultiple(ol.PluginType.LAYER_RENDERER, [\n  ol.renderer.canvas.ImageLayer,\n  ol.renderer.canvas.TileLayer,\n  ol.renderer.canvas.VectorLayer,\n  ol.renderer.canvas.VectorTileLayer\n]);\n\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n *     var map = new ol.CanvasMap({\n *       view: new ol.View({\n *         center: [0, 0],\n *         zoom: 1\n *       }),\n *       layers: [\n *         new ol.layer.Tile({\n *           source: new ol.source.OSM()\n *         })\n *       ],\n *       target: 'map'\n *     });\n *\n * The above snippet creates a map using a {@link ol.layer.Tile} to display\n * {@link ol.source.OSM} OSM data and render it to a DOM element with the\n * id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link ol.Overlay} for the difference). The map itself is placed in\n * a further element within the viewport.\n *\n * Layers are stored as a `ol.Collection` in layerGroups. A top-level group is\n * provided by the library. This is what is accessed by `getLayerGroup` and\n * `setLayerGroup`. Layers entered in the options are added to this group, and\n * `addLayer` and `removeLayer` change the layer collection in the group.\n * `getLayers` is a convenience function for `getLayerGroup().getLayers()`.\n * Note that `ol.layer.Group` is a subclass of `ol.layer.Base`, so layers\n * entered in the options or added with `addLayer` can be groups, which can\n * contain further groups, and so on.\n *\n * @constructor\n * @extends {ol.PluggableMap}\n * @param {olx.MapOptions} options Map options.\n * @fires ol.MapBrowserEvent\n * @fires ol.MapEvent\n * @fires ol.render.Event#postcompose\n * @fires ol.render.Event#precompose\n * @api\n */\nol.CanvasMap = function(options) {\n  options = ol.obj.assign({}, options);\n  delete options.renderer;\n  if (!options.controls) {\n    options.controls = ol.control.defaults();\n  }\n  if (!options.interactions) {\n    options.interactions = ol.interaction.defaults();\n  }\n\n  ol.PluggableMap.call(this, options);\n};\nol.inherits(ol.CanvasMap, ol.PluggableMap);\n\ngoog.provide('ol.control.FullScreen');\n\ngoog.require('ol');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\n\n\n/**\n * @classdesc\n * Provides a button that when clicked fills up the full screen with the map.\n * The full screen source element is by default the element containing the map viewport unless\n * overridden by providing the `source` option. In which case, the dom\n * element introduced using this parameter will be displayed in full screen.\n *\n * When in full screen mode, a close button is shown to exit full screen mode.\n * The [Fullscreen API](http://www.w3.org/TR/fullscreen/) is used to\n * toggle the map in full screen mode.\n *\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.FullScreenOptions=} opt_options Options.\n * @api\n */\nol.control.FullScreen = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.cssClassName_ = options.className !== undefined ? options.className :\n    'ol-full-screen';\n\n  var label = options.label !== undefined ? options.label : '\\u2922';\n\n  /**\n   * @private\n   * @type {Node}\n   */\n  this.labelNode_ = typeof label === 'string' ?\n    document.createTextNode(label) : label;\n\n  var labelActive = options.labelActive !== undefined ? options.labelActive : '\\u00d7';\n\n  /**\n   * @private\n   * @type {Node}\n   */\n  this.labelActiveNode_ = typeof labelActive === 'string' ?\n    document.createTextNode(labelActive) : labelActive;\n\n  var tipLabel = options.tipLabel ? options.tipLabel : 'Toggle full-screen';\n  var button = document.createElement('button');\n  button.className = this.cssClassName_ + '-' + ol.control.FullScreen.isFullScreen();\n  button.setAttribute('type', 'button');\n  button.title = tipLabel;\n  button.appendChild(this.labelNode_);\n\n  ol.events.listen(button, ol.events.EventType.CLICK,\n      this.handleClick_, this);\n\n  var cssClasses = this.cssClassName_ + ' ' + ol.css.CLASS_UNSELECTABLE +\n      ' ' + ol.css.CLASS_CONTROL + ' ' +\n      (!ol.control.FullScreen.isFullScreenSupported() ? ol.css.CLASS_UNSUPPORTED : '');\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(button);\n\n  ol.control.Control.call(this, {\n    element: element,\n    target: options.target\n  });\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.keys_ = options.keys !== undefined ? options.keys : false;\n\n  /**\n   * @private\n   * @type {Element|string|undefined}\n   */\n  this.source_ = options.source;\n\n};\nol.inherits(ol.control.FullScreen, ol.control.Control);\n\n\n/**\n * @param {Event} event The event to handle\n * @private\n */\nol.control.FullScreen.prototype.handleClick_ = function(event) {\n  event.preventDefault();\n  this.handleFullScreen_();\n};\n\n\n/**\n * @private\n */\nol.control.FullScreen.prototype.handleFullScreen_ = function() {\n  if (!ol.control.FullScreen.isFullScreenSupported()) {\n    return;\n  }\n  var map = this.getMap();\n  if (!map) {\n    return;\n  }\n  if (ol.control.FullScreen.isFullScreen()) {\n    ol.control.FullScreen.exitFullScreen();\n  } else {\n    var element;\n    if (this.source_) {\n      element = typeof this.source_ === 'string' ?\n        document.getElementById(this.source_) :\n        this.source_;\n    } else {\n      element = map.getTargetElement();\n    }\n    if (this.keys_) {\n      ol.control.FullScreen.requestFullScreenWithKeys(element);\n\n    } else {\n      ol.control.FullScreen.requestFullScreen(element);\n    }\n  }\n};\n\n\n/**\n * @private\n */\nol.control.FullScreen.prototype.handleFullScreenChange_ = function() {\n  var button = this.element.firstElementChild;\n  var map = this.getMap();\n  if (ol.control.FullScreen.isFullScreen()) {\n    button.className = this.cssClassName_ + '-true';\n    ol.dom.replaceNode(this.labelActiveNode_, this.labelNode_);\n  } else {\n    button.className = this.cssClassName_ + '-false';\n    ol.dom.replaceNode(this.labelNode_, this.labelActiveNode_);\n  }\n  if (map) {\n    map.updateSize();\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.control.FullScreen.prototype.setMap = function(map) {\n  ol.control.Control.prototype.setMap.call(this, map);\n  if (map) {\n    this.listenerKeys.push(ol.events.listen(document,\n        ol.control.FullScreen.getChangeType_(),\n        this.handleFullScreenChange_, this)\n    );\n  }\n};\n\n/**\n * @return {boolean} Fullscreen is supported by the current platform.\n */\nol.control.FullScreen.isFullScreenSupported = function() {\n  var body = document.body;\n  return !!(\n    body.webkitRequestFullscreen ||\n    (body.mozRequestFullScreen && document.mozFullScreenEnabled) ||\n    (body.msRequestFullscreen && document.msFullscreenEnabled) ||\n    (body.requestFullscreen && document.fullscreenEnabled)\n  );\n};\n\n/**\n * @return {boolean} Element is currently in fullscreen.\n */\nol.control.FullScreen.isFullScreen = function() {\n  return !!(\n    document.webkitIsFullScreen || document.mozFullScreen ||\n    document.msFullscreenElement || document.fullscreenElement\n  );\n};\n\n/**\n * Request to fullscreen an element.\n * @param {Node} element Element to request fullscreen\n */\nol.control.FullScreen.requestFullScreen = function(element) {\n  if (element.requestFullscreen) {\n    element.requestFullscreen();\n  } else if (element.msRequestFullscreen) {\n    element.msRequestFullscreen();\n  } else if (element.mozRequestFullScreen) {\n    element.mozRequestFullScreen();\n  } else if (element.webkitRequestFullscreen) {\n    element.webkitRequestFullscreen();\n  }\n};\n\n/**\n * Request to fullscreen an element with keyboard input.\n * @param {Node} element Element to request fullscreen\n */\nol.control.FullScreen.requestFullScreenWithKeys = function(element) {\n  if (element.mozRequestFullScreenWithKeys) {\n    element.mozRequestFullScreenWithKeys();\n  } else if (element.webkitRequestFullscreen) {\n    element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n  } else {\n    ol.control.FullScreen.requestFullScreen(element);\n  }\n};\n\n/**\n * Exit fullscreen.\n */\nol.control.FullScreen.exitFullScreen = function() {\n  if (document.exitFullscreen) {\n    document.exitFullscreen();\n  } else if (document.msExitFullscreen) {\n    document.msExitFullscreen();\n  } else if (document.mozCancelFullScreen) {\n    document.mozCancelFullScreen();\n  } else if (document.webkitExitFullscreen) {\n    document.webkitExitFullscreen();\n  }\n};\n\n/**\n * @return {string} Change type.\n * @private\n */\nol.control.FullScreen.getChangeType_ = (function() {\n  var changeType;\n  return function() {\n    if (!changeType) {\n      var body = document.body;\n      if (body.webkitRequestFullscreen) {\n        changeType = 'webkitfullscreenchange';\n      } else if (body.mozRequestFullScreen) {\n        changeType = 'mozfullscreenchange';\n      } else if (body.msRequestFullscreen) {\n        changeType = 'MSFullscreenChange';\n      } else if (body.requestFullscreen) {\n        changeType = 'fullscreenchange';\n      }\n    }\n    return changeType;\n  };\n})();\n\n// FIXME should listen on appropriate pane, once it is defined\n\ngoog.provide('ol.control.MousePosition');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.Object');\ngoog.require('ol.control.Control');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * A control to show the 2D coordinates of the mouse cursor. By default, these\n * are in the view projection, but can be in any supported projection.\n * By default the control is shown in the top right corner of the map, but this\n * can be changed by using the css selector `.ol-mouse-position`.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.MousePositionOptions=} opt_options Mouse position\n *     options.\n * @api\n */\nol.control.MousePosition = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var element = document.createElement('DIV');\n  element.className = options.className !== undefined ? options.className : 'ol-mouse-position';\n\n  var render = options.render ?\n    options.render : ol.control.MousePosition.render;\n\n  ol.control.Control.call(this, {\n    element: element,\n    render: render,\n    target: options.target\n  });\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.control.MousePosition.Property_.PROJECTION),\n      this.handleProjectionChanged_, this);\n\n  if (options.coordinateFormat) {\n    this.setCoordinateFormat(options.coordinateFormat);\n  }\n  if (options.projection) {\n    this.setProjection(options.projection);\n  }\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.undefinedHTML_ = options.undefinedHTML !== undefined ? options.undefinedHTML : '';\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.renderedHTML_ = element.innerHTML;\n\n  /**\n   * @private\n   * @type {ol.proj.Projection}\n   */\n  this.mapProjection_ = null;\n\n  /**\n   * @private\n   * @type {?ol.TransformFunction}\n   */\n  this.transform_ = null;\n\n  /**\n   * @private\n   * @type {ol.Pixel}\n   */\n  this.lastMouseMovePixel_ = null;\n\n};\nol.inherits(ol.control.MousePosition, ol.control.Control);\n\n\n/**\n * Update the mouseposition element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.MousePosition}\n * @api\n */\nol.control.MousePosition.render = function(mapEvent) {\n  var frameState = mapEvent.frameState;\n  if (!frameState) {\n    this.mapProjection_ = null;\n  } else {\n    if (this.mapProjection_ != frameState.viewState.projection) {\n      this.mapProjection_ = frameState.viewState.projection;\n      this.transform_ = null;\n    }\n  }\n  this.updateHTML_(this.lastMouseMovePixel_);\n};\n\n\n/**\n * @private\n */\nol.control.MousePosition.prototype.handleProjectionChanged_ = function() {\n  this.transform_ = null;\n};\n\n\n/**\n * Return the coordinate format type used to render the current position or\n * undefined.\n * @return {ol.CoordinateFormatType|undefined} The format to render the current\n *     position in.\n * @observable\n * @api\n */\nol.control.MousePosition.prototype.getCoordinateFormat = function() {\n  return /** @type {ol.CoordinateFormatType|undefined} */ (\n    this.get(ol.control.MousePosition.Property_.COORDINATE_FORMAT));\n};\n\n\n/**\n * Return the projection that is used to report the mouse position.\n * @return {ol.proj.Projection|undefined} The projection to report mouse\n *     position in.\n * @observable\n * @api\n */\nol.control.MousePosition.prototype.getProjection = function() {\n  return /** @type {ol.proj.Projection|undefined} */ (\n    this.get(ol.control.MousePosition.Property_.PROJECTION));\n};\n\n\n/**\n * @param {Event} event Browser event.\n * @protected\n */\nol.control.MousePosition.prototype.handleMouseMove = function(event) {\n  var map = this.getMap();\n  this.lastMouseMovePixel_ = map.getEventPixel(event);\n  this.updateHTML_(this.lastMouseMovePixel_);\n};\n\n\n/**\n * @param {Event} event Browser event.\n * @protected\n */\nol.control.MousePosition.prototype.handleMouseOut = function(event) {\n  this.updateHTML_(null);\n  this.lastMouseMovePixel_ = null;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.control.MousePosition.prototype.setMap = function(map) {\n  ol.control.Control.prototype.setMap.call(this, map);\n  if (map) {\n    var viewport = map.getViewport();\n    this.listenerKeys.push(\n        ol.events.listen(viewport, ol.events.EventType.MOUSEMOVE,\n            this.handleMouseMove, this),\n        ol.events.listen(viewport, ol.events.EventType.MOUSEOUT,\n            this.handleMouseOut, this)\n    );\n  }\n};\n\n\n/**\n * Set the coordinate format type used to render the current position.\n * @param {ol.CoordinateFormatType} format The format to render the current\n *     position in.\n * @observable\n * @api\n */\nol.control.MousePosition.prototype.setCoordinateFormat = function(format) {\n  this.set(ol.control.MousePosition.Property_.COORDINATE_FORMAT, format);\n};\n\n\n/**\n * Set the projection that is used to report the mouse position.\n * @param {ol.ProjectionLike} projection The projection to report mouse\n *     position in.\n * @observable\n * @api\n */\nol.control.MousePosition.prototype.setProjection = function(projection) {\n  this.set(ol.control.MousePosition.Property_.PROJECTION, ol.proj.get(projection));\n};\n\n\n/**\n * @param {?ol.Pixel} pixel Pixel.\n * @private\n */\nol.control.MousePosition.prototype.updateHTML_ = function(pixel) {\n  var html = this.undefinedHTML_;\n  if (pixel && this.mapProjection_) {\n    if (!this.transform_) {\n      var projection = this.getProjection();\n      if (projection) {\n        this.transform_ = ol.proj.getTransformFromProjections(\n            this.mapProjection_, projection);\n      } else {\n        this.transform_ = ol.proj.identityTransform;\n      }\n    }\n    var map = this.getMap();\n    var coordinate = map.getCoordinateFromPixel(pixel);\n    if (coordinate) {\n      this.transform_(coordinate, coordinate);\n      var coordinateFormat = this.getCoordinateFormat();\n      if (coordinateFormat) {\n        html = coordinateFormat(coordinate);\n      } else {\n        html = coordinate.toString();\n      }\n    }\n  }\n  if (!this.renderedHTML_ || html != this.renderedHTML_) {\n    this.element.innerHTML = html;\n    this.renderedHTML_ = html;\n  }\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.control.MousePosition.Property_ = {\n  PROJECTION: 'projection',\n  COORDINATE_FORMAT: 'coordinateFormat'\n};\n\ngoog.provide('ol.OverlayPositioning');\n\n/**\n * Overlay position: `'bottom-left'`, `'bottom-center'`,  `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, `'top-right'`\n * @enum {string}\n */\nol.OverlayPositioning = {\n  BOTTOM_LEFT: 'bottom-left',\n  BOTTOM_CENTER: 'bottom-center',\n  BOTTOM_RIGHT: 'bottom-right',\n  CENTER_LEFT: 'center-left',\n  CENTER_CENTER: 'center-center',\n  CENTER_RIGHT: 'center-right',\n  TOP_LEFT: 'top-left',\n  TOP_CENTER: 'top-center',\n  TOP_RIGHT: 'top-right'\n};\n\ngoog.provide('ol.Overlay');\n\ngoog.require('ol');\ngoog.require('ol.MapEventType');\ngoog.require('ol.Object');\ngoog.require('ol.OverlayPositioning');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.extent');\n\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location.  Like {@link ol.control.Control}, Overlays are visible widgets.\n * Unlike Controls, they are not in a fixed position on the screen, but are tied\n * to a geographical coordinate, so panning the map will move an Overlay but not\n * a Control.\n *\n * Example:\n *\n *     var popup = new ol.Overlay({\n *       element: document.getElementById('popup')\n *     });\n *     popup.setPosition(coordinate);\n *     map.addOverlay(popup);\n *\n * @constructor\n * @extends {ol.Object}\n * @param {olx.OverlayOptions} options Overlay options.\n * @api\n */\nol.Overlay = function(options) {\n\n  ol.Object.call(this);\n\n  /**\n   * @protected\n   * @type {olx.OverlayOptions}\n   */\n  this.options = options;\n\n  /**\n   * @protected\n   * @type {number|string|undefined}\n   */\n  this.id = options.id;\n\n  /**\n   * @protected\n   * @type {boolean}\n   */\n  this.insertFirst = options.insertFirst !== undefined ?\n    options.insertFirst : true;\n\n  /**\n   * @protected\n   * @type {boolean}\n   */\n  this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n  /**\n   * @protected\n   * @type {Element}\n   */\n  this.element = document.createElement('DIV');\n  this.element.className = options.className !== undefined ?\n    options.className : 'ol-overlay-container ' + ol.css.CLASS_SELECTABLE;\n  this.element.style.position = 'absolute';\n\n  /**\n   * @protected\n   * @type {boolean}\n   */\n  this.autoPan = options.autoPan !== undefined ? options.autoPan : false;\n\n  /**\n   * @protected\n   * @type {olx.OverlayPanOptions}\n   */\n  this.autoPanAnimation = options.autoPanAnimation ||\n    /** @type {olx.OverlayPanOptions} */ ({});\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.autoPanMargin = options.autoPanMargin !== undefined ?\n    options.autoPanMargin : 20;\n\n  /**\n   * @protected\n   * @type {{bottom_: string,\n   *         left_: string,\n   *         right_: string,\n   *         top_: string,\n   *         visible: boolean}}\n   */\n  this.rendered = {\n    bottom_: '',\n    left_: '',\n    right_: '',\n    top_: '',\n    visible: true\n  };\n\n  /**\n   * @protected\n   * @type {?ol.EventsKey}\n   */\n  this.mapPostrenderListenerKey = null;\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.Overlay.Property.ELEMENT),\n      this.handleElementChanged, this);\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.Overlay.Property.MAP),\n      this.handleMapChanged, this);\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.Overlay.Property.OFFSET),\n      this.handleOffsetChanged, this);\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.Overlay.Property.POSITION),\n      this.handlePositionChanged, this);\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.Overlay.Property.POSITIONING),\n      this.handlePositioningChanged, this);\n\n  if (options.element !== undefined) {\n    this.setElement(options.element);\n  }\n\n  this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n  this.setPositioning(options.positioning !== undefined ?\n    /** @type {ol.OverlayPositioning} */ (options.positioning) :\n    ol.OverlayPositioning.TOP_LEFT);\n\n  if (options.position !== undefined) {\n    this.setPosition(options.position);\n  }\n\n};\nol.inherits(ol.Overlay, ol.Object);\n\n\n/**\n * Get the DOM element of this overlay.\n * @return {Element|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\nol.Overlay.prototype.getElement = function() {\n  return /** @type {Element|undefined} */ (\n    this.get(ol.Overlay.Property.ELEMENT));\n};\n\n\n/**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\nol.Overlay.prototype.getId = function() {\n  return this.id;\n};\n\n\n/**\n * Get the map associated with this overlay.\n * @return {ol.PluggableMap|undefined} The map that the overlay is part of.\n * @observable\n * @api\n */\nol.Overlay.prototype.getMap = function() {\n  return /** @type {ol.PluggableMap|undefined} */ (\n    this.get(ol.Overlay.Property.MAP));\n};\n\n\n/**\n * Get the offset of this overlay.\n * @return {Array.<number>} The offset.\n * @observable\n * @api\n */\nol.Overlay.prototype.getOffset = function() {\n  return /** @type {Array.<number>} */ (\n    this.get(ol.Overlay.Property.OFFSET));\n};\n\n\n/**\n * Get the current position of this overlay.\n * @return {ol.Coordinate|undefined} The spatial point that the overlay is\n *     anchored at.\n * @observable\n * @api\n */\nol.Overlay.prototype.getPosition = function() {\n  return /** @type {ol.Coordinate|undefined} */ (\n    this.get(ol.Overlay.Property.POSITION));\n};\n\n\n/**\n * Get the current positioning of this overlay.\n * @return {ol.OverlayPositioning} How the overlay is positioned\n *     relative to its point on the map.\n * @observable\n * @api\n */\nol.Overlay.prototype.getPositioning = function() {\n  return /** @type {ol.OverlayPositioning} */ (\n    this.get(ol.Overlay.Property.POSITIONING));\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.handleElementChanged = function() {\n  ol.dom.removeChildren(this.element);\n  var element = this.getElement();\n  if (element) {\n    this.element.appendChild(element);\n  }\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.handleMapChanged = function() {\n  if (this.mapPostrenderListenerKey) {\n    ol.dom.removeNode(this.element);\n    ol.events.unlistenByKey(this.mapPostrenderListenerKey);\n    this.mapPostrenderListenerKey = null;\n  }\n  var map = this.getMap();\n  if (map) {\n    this.mapPostrenderListenerKey = ol.events.listen(map,\n        ol.MapEventType.POSTRENDER, this.render, this);\n    this.updatePixelPosition();\n    var container = this.stopEvent ?\n      map.getOverlayContainerStopEvent() : map.getOverlayContainer();\n    if (this.insertFirst) {\n      container.insertBefore(this.element, container.childNodes[0] || null);\n    } else {\n      container.appendChild(this.element);\n    }\n  }\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.render = function() {\n  this.updatePixelPosition();\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.handleOffsetChanged = function() {\n  this.updatePixelPosition();\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.handlePositionChanged = function() {\n  this.updatePixelPosition();\n  if (this.get(ol.Overlay.Property.POSITION) && this.autoPan) {\n    this.panIntoView();\n  }\n};\n\n\n/**\n * @protected\n */\nol.Overlay.prototype.handlePositioningChanged = function() {\n  this.updatePixelPosition();\n};\n\n\n/**\n * Set the DOM element to be associated with this overlay.\n * @param {Element|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\nol.Overlay.prototype.setElement = function(element) {\n  this.set(ol.Overlay.Property.ELEMENT, element);\n};\n\n\n/**\n * Set the map to be associated with this overlay.\n * @param {ol.PluggableMap|undefined} map The map that the overlay is part of.\n * @observable\n * @api\n */\nol.Overlay.prototype.setMap = function(map) {\n  this.set(ol.Overlay.Property.MAP, map);\n};\n\n\n/**\n * Set the offset for this overlay.\n * @param {Array.<number>} offset Offset.\n * @observable\n * @api\n */\nol.Overlay.prototype.setOffset = function(offset) {\n  this.set(ol.Overlay.Property.OFFSET, offset);\n};\n\n\n/**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {ol.Coordinate|undefined} position The spatial point that the overlay\n *     is anchored at.\n * @observable\n * @api\n */\nol.Overlay.prototype.setPosition = function(position) {\n  this.set(ol.Overlay.Property.POSITION, position);\n};\n\n\n/**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @protected\n */\nol.Overlay.prototype.panIntoView = function() {\n  var map = this.getMap();\n\n  if (!map || !map.getTargetElement()) {\n    return;\n  }\n\n  var mapRect = this.getRect(map.getTargetElement(), map.getSize());\n  var element = /** @type {!Element} */ (this.getElement());\n  var overlayRect = this.getRect(element,\n      [ol.dom.outerWidth(element), ol.dom.outerHeight(element)]);\n\n  var margin = this.autoPanMargin;\n  if (!ol.extent.containsExtent(mapRect, overlayRect)) {\n    // the overlay is not completely inside the viewport, so pan the map\n    var offsetLeft = overlayRect[0] - mapRect[0];\n    var offsetRight = mapRect[2] - overlayRect[2];\n    var offsetTop = overlayRect[1] - mapRect[1];\n    var offsetBottom = mapRect[3] - overlayRect[3];\n\n    var delta = [0, 0];\n    if (offsetLeft < 0) {\n      // move map to the left\n      delta[0] = offsetLeft - margin;\n    } else if (offsetRight < 0) {\n      // move map to the right\n      delta[0] = Math.abs(offsetRight) + margin;\n    }\n    if (offsetTop < 0) {\n      // move map up\n      delta[1] = offsetTop - margin;\n    } else if (offsetBottom < 0) {\n      // move map down\n      delta[1] = Math.abs(offsetBottom) + margin;\n    }\n\n    if (delta[0] !== 0 || delta[1] !== 0) {\n      var center = /** @type {ol.Coordinate} */ (map.getView().getCenter());\n      var centerPx = map.getPixelFromCoordinate(center);\n      var newCenterPx = [\n        centerPx[0] + delta[0],\n        centerPx[1] + delta[1]\n      ];\n\n      map.getView().animate({\n        center: map.getCoordinateFromPixel(newCenterPx),\n        duration: this.autoPanAnimation.duration,\n        easing: this.autoPanAnimation.easing\n      });\n    }\n  }\n};\n\n\n/**\n * Get the extent of an element relative to the document\n * @param {Element|undefined} element The element.\n * @param {ol.Size|undefined} size The size of the element.\n * @return {ol.Extent} The extent.\n * @protected\n */\nol.Overlay.prototype.getRect = function(element, size) {\n  var box = element.getBoundingClientRect();\n  var offsetX = box.left + window.pageXOffset;\n  var offsetY = box.top + window.pageYOffset;\n  return [\n    offsetX,\n    offsetY,\n    offsetX + size[0],\n    offsetY + size[1]\n  ];\n};\n\n\n/**\n * Set the positioning for this overlay.\n * @param {ol.OverlayPositioning} positioning how the overlay is\n *     positioned relative to its point on the map.\n * @observable\n * @api\n */\nol.Overlay.prototype.setPositioning = function(positioning) {\n  this.set(ol.Overlay.Property.POSITIONING, positioning);\n};\n\n\n/**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\nol.Overlay.prototype.setVisible = function(visible) {\n  if (this.rendered.visible !== visible) {\n    this.element.style.display = visible ? '' : 'none';\n    this.rendered.visible = visible;\n  }\n};\n\n\n/**\n * Update pixel position.\n * @protected\n */\nol.Overlay.prototype.updatePixelPosition = function() {\n  var map = this.getMap();\n  var position = this.getPosition();\n  if (!map || !map.isRendered() || !position) {\n    this.setVisible(false);\n    return;\n  }\n\n  var pixel = map.getPixelFromCoordinate(position);\n  var mapSize = map.getSize();\n  this.updateRenderedPosition(pixel, mapSize);\n};\n\n\n/**\n * @param {ol.Pixel} pixel The pixel location.\n * @param {ol.Size|undefined} mapSize The map size.\n * @protected\n */\nol.Overlay.prototype.updateRenderedPosition = function(pixel, mapSize) {\n  var style = this.element.style;\n  var offset = this.getOffset();\n\n  var positioning = this.getPositioning();\n\n  this.setVisible(true);\n\n  var offsetX = offset[0];\n  var offsetY = offset[1];\n  if (positioning == ol.OverlayPositioning.BOTTOM_RIGHT ||\n      positioning == ol.OverlayPositioning.CENTER_RIGHT ||\n      positioning == ol.OverlayPositioning.TOP_RIGHT) {\n    if (this.rendered.left_ !== '') {\n      this.rendered.left_ = style.left = '';\n    }\n    var right = Math.round(mapSize[0] - pixel[0] - offsetX) + 'px';\n    if (this.rendered.right_ != right) {\n      this.rendered.right_ = style.right = right;\n    }\n  } else {\n    if (this.rendered.right_ !== '') {\n      this.rendered.right_ = style.right = '';\n    }\n    if (positioning == ol.OverlayPositioning.BOTTOM_CENTER ||\n        positioning == ol.OverlayPositioning.CENTER_CENTER ||\n        positioning == ol.OverlayPositioning.TOP_CENTER) {\n      offsetX -= this.element.offsetWidth / 2;\n    }\n    var left = Math.round(pixel[0] + offsetX) + 'px';\n    if (this.rendered.left_ != left) {\n      this.rendered.left_ = style.left = left;\n    }\n  }\n  if (positioning == ol.OverlayPositioning.BOTTOM_LEFT ||\n      positioning == ol.OverlayPositioning.BOTTOM_CENTER ||\n      positioning == ol.OverlayPositioning.BOTTOM_RIGHT) {\n    if (this.rendered.top_ !== '') {\n      this.rendered.top_ = style.top = '';\n    }\n    var bottom = Math.round(mapSize[1] - pixel[1] - offsetY) + 'px';\n    if (this.rendered.bottom_ != bottom) {\n      this.rendered.bottom_ = style.bottom = bottom;\n    }\n  } else {\n    if (this.rendered.bottom_ !== '') {\n      this.rendered.bottom_ = style.bottom = '';\n    }\n    if (positioning == ol.OverlayPositioning.CENTER_LEFT ||\n        positioning == ol.OverlayPositioning.CENTER_CENTER ||\n        positioning == ol.OverlayPositioning.CENTER_RIGHT) {\n      offsetY -= this.element.offsetHeight / 2;\n    }\n    var top = Math.round(pixel[1] + offsetY) + 'px';\n    if (this.rendered.top_ != top) {\n      this.rendered.top_ = style.top = top;\n    }\n  }\n};\n\n\n/**\n * returns the options this Overlay has been created with\n * @public\n * @return {olx.OverlayOptions} overlay options\n */\nol.Overlay.prototype.getOptions = function() {\n  return this.options;\n};\n\n\n/**\n * @enum {string}\n * @protected\n */\nol.Overlay.Property = {\n  ELEMENT: 'element',\n  MAP: 'map',\n  OFFSET: 'offset',\n  POSITION: 'position',\n  POSITIONING: 'positioning'\n};\n\ngoog.provide('ol.control.OverviewMap');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.PluggableMap');\ngoog.require('ol.MapEventType');\ngoog.require('ol.MapProperty');\ngoog.require('ol.Object');\ngoog.require('ol.ObjectEventType');\ngoog.require('ol.Overlay');\ngoog.require('ol.OverlayPositioning');\ngoog.require('ol.ViewProperty');\ngoog.require('ol.control.Control');\ngoog.require('ol.coordinate');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\n\n\n/**\n * Create a new control with a map acting as an overview map for an other\n * defined map.\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.OverviewMapOptions=} opt_options OverviewMap options.\n * @api\n */\nol.control.OverviewMap = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.collapsible_ = options.collapsible !== undefined ?\n    options.collapsible : true;\n\n  if (!this.collapsible_) {\n    this.collapsed_ = false;\n  }\n\n  var className = options.className !== undefined ? options.className : 'ol-overviewmap';\n\n  var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Overview map';\n\n  var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u00AB';\n\n  if (typeof collapseLabel === 'string') {\n    /**\n     * @private\n     * @type {Node}\n     */\n    this.collapseLabel_ = document.createElement('span');\n    this.collapseLabel_.textContent = collapseLabel;\n  } else {\n    this.collapseLabel_ = collapseLabel;\n  }\n\n  var label = options.label !== undefined ? options.label : '\\u00BB';\n\n\n  if (typeof label === 'string') {\n    /**\n     * @private\n     * @type {Node}\n     */\n    this.label_ = document.createElement('span');\n    this.label_.textContent = label;\n  } else {\n    this.label_ = label;\n  }\n\n  var activeLabel = (this.collapsible_ && !this.collapsed_) ?\n    this.collapseLabel_ : this.label_;\n  var button = document.createElement('button');\n  button.setAttribute('type', 'button');\n  button.title = tipLabel;\n  button.appendChild(activeLabel);\n\n  ol.events.listen(button, ol.events.EventType.CLICK,\n      this.handleClick_, this);\n\n  /**\n   * @type {Element}\n   * @private\n   */\n  this.ovmapDiv_ = document.createElement('DIV');\n  this.ovmapDiv_.className = 'ol-overviewmap-map';\n\n  /**\n   * @type {ol.PluggableMap}\n   * @private\n   */\n  this.ovmap_ = new ol.PluggableMap({\n    controls: new ol.Collection(),\n    interactions: new ol.Collection(),\n    view: options.view\n  });\n  var ovmap = this.ovmap_;\n\n  if (options.layers) {\n    options.layers.forEach(\n        /**\n       * @param {ol.layer.Layer} layer Layer.\n       */\n        function(layer) {\n          ovmap.addLayer(layer);\n        }, this);\n  }\n\n  var box = document.createElement('DIV');\n  box.className = 'ol-overviewmap-box';\n  box.style.boxSizing = 'border-box';\n\n  /**\n   * @type {ol.Overlay}\n   * @private\n   */\n  this.boxOverlay_ = new ol.Overlay({\n    position: [0, 0],\n    positioning: ol.OverlayPositioning.BOTTOM_LEFT,\n    element: box\n  });\n  this.ovmap_.addOverlay(this.boxOverlay_);\n\n  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +\n      ol.css.CLASS_CONTROL +\n      (this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +\n      (this.collapsible_ ? '' : ' ol-uncollapsible');\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(this.ovmapDiv_);\n  element.appendChild(button);\n\n  var render = options.render ? options.render : ol.control.OverviewMap.render;\n\n  ol.control.Control.call(this, {\n    element: element,\n    render: render,\n    target: options.target\n  });\n\n  /* Interactive map */\n\n  var scope = this;\n\n  var overlay = this.boxOverlay_;\n  var overlayBox = this.boxOverlay_.getElement();\n\n  /* Functions definition */\n\n  var computeDesiredMousePosition = function(mousePosition) {\n    return {\n      clientX: mousePosition.clientX - (overlayBox.offsetWidth / 2),\n      clientY: mousePosition.clientY + (overlayBox.offsetHeight / 2)\n    };\n  };\n\n  var move = function(event) {\n    var coordinates = ovmap.getEventCoordinate(computeDesiredMousePosition(event));\n\n    overlay.setPosition(coordinates);\n  };\n\n  var endMoving = function(event) {\n    var coordinates = ovmap.getEventCoordinate(event);\n\n    scope.getMap().getView().setCenter(coordinates);\n\n    window.removeEventListener('mousemove', move);\n    window.removeEventListener('mouseup', endMoving);\n  };\n\n  /* Binding */\n\n  overlayBox.addEventListener('mousedown', function() {\n    window.addEventListener('mousemove', move);\n    window.addEventListener('mouseup', endMoving);\n  });\n};\nol.inherits(ol.control.OverviewMap, ol.control.Control);\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.control.OverviewMap.prototype.setMap = function(map) {\n  var oldMap = this.getMap();\n  if (map === oldMap) {\n    return;\n  }\n  if (oldMap) {\n    var oldView = oldMap.getView();\n    if (oldView) {\n      this.unbindView_(oldView);\n    }\n    this.ovmap_.setTarget(null);\n  }\n  ol.control.Control.prototype.setMap.call(this, map);\n\n  if (map) {\n    this.ovmap_.setTarget(this.ovmapDiv_);\n    this.listenerKeys.push(ol.events.listen(\n        map, ol.ObjectEventType.PROPERTYCHANGE,\n        this.handleMapPropertyChange_, this));\n\n    // TODO: to really support map switching, this would need to be reworked\n    if (this.ovmap_.getLayers().getLength() === 0) {\n      this.ovmap_.setLayerGroup(map.getLayerGroup());\n    }\n\n    var view = map.getView();\n    if (view) {\n      this.bindView_(view);\n      if (view.isDef()) {\n        this.ovmap_.updateSize();\n        this.resetExtent_();\n      }\n    }\n  }\n};\n\n\n/**\n * Handle map property changes.  This only deals with changes to the map's view.\n * @param {ol.Object.Event} event The propertychange event.\n * @private\n */\nol.control.OverviewMap.prototype.handleMapPropertyChange_ = function(event) {\n  if (event.key === ol.MapProperty.VIEW) {\n    var oldView = /** @type {ol.View} */ (event.oldValue);\n    if (oldView) {\n      this.unbindView_(oldView);\n    }\n    var newView = this.getMap().getView();\n    this.bindView_(newView);\n  }\n};\n\n\n/**\n * Register listeners for view property changes.\n * @param {ol.View} view The view.\n * @private\n */\nol.control.OverviewMap.prototype.bindView_ = function(view) {\n  ol.events.listen(view,\n      ol.Object.getChangeEventType(ol.ViewProperty.ROTATION),\n      this.handleRotationChanged_, this);\n};\n\n\n/**\n * Unregister listeners for view property changes.\n * @param {ol.View} view The view.\n * @private\n */\nol.control.OverviewMap.prototype.unbindView_ = function(view) {\n  ol.events.unlisten(view,\n      ol.Object.getChangeEventType(ol.ViewProperty.ROTATION),\n      this.handleRotationChanged_, this);\n};\n\n\n/**\n * Handle rotation changes to the main map.\n * TODO: This should rotate the extent rectrangle instead of the\n * overview map's view.\n * @private\n */\nol.control.OverviewMap.prototype.handleRotationChanged_ = function() {\n  this.ovmap_.getView().setRotation(this.getMap().getView().getRotation());\n};\n\n\n/**\n * Update the overview map element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.OverviewMap}\n * @api\n */\nol.control.OverviewMap.render = function(mapEvent) {\n  this.validateExtent_();\n  this.updateBox_();\n};\n\n\n/**\n * Reset the overview map extent if the box size (width or\n * height) is less than the size of the overview map size times minRatio\n * or is greater than the size of the overview size times maxRatio.\n *\n * If the map extent was not reset, the box size can fits in the defined\n * ratio sizes. This method then checks if is contained inside the overview\n * map current extent. If not, recenter the overview map to the current\n * main map center location.\n * @private\n */\nol.control.OverviewMap.prototype.validateExtent_ = function() {\n  var map = this.getMap();\n  var ovmap = this.ovmap_;\n\n  if (!map.isRendered() || !ovmap.isRendered()) {\n    return;\n  }\n\n  var mapSize = /** @type {ol.Size} */ (map.getSize());\n\n  var view = map.getView();\n  var extent = view.calculateExtent(mapSize);\n\n  var ovmapSize = /** @type {ol.Size} */ (ovmap.getSize());\n\n  var ovview = ovmap.getView();\n  var ovextent = ovview.calculateExtent(ovmapSize);\n\n  var topLeftPixel =\n      ovmap.getPixelFromCoordinate(ol.extent.getTopLeft(extent));\n  var bottomRightPixel =\n      ovmap.getPixelFromCoordinate(ol.extent.getBottomRight(extent));\n\n  var boxWidth = Math.abs(topLeftPixel[0] - bottomRightPixel[0]);\n  var boxHeight = Math.abs(topLeftPixel[1] - bottomRightPixel[1]);\n\n  var ovmapWidth = ovmapSize[0];\n  var ovmapHeight = ovmapSize[1];\n\n  if (boxWidth < ovmapWidth * ol.OVERVIEWMAP_MIN_RATIO ||\n      boxHeight < ovmapHeight * ol.OVERVIEWMAP_MIN_RATIO ||\n      boxWidth > ovmapWidth * ol.OVERVIEWMAP_MAX_RATIO ||\n      boxHeight > ovmapHeight * ol.OVERVIEWMAP_MAX_RATIO) {\n    this.resetExtent_();\n  } else if (!ol.extent.containsExtent(ovextent, extent)) {\n    this.recenter_();\n  }\n};\n\n\n/**\n * Reset the overview map extent to half calculated min and max ratio times\n * the extent of the main map.\n * @private\n */\nol.control.OverviewMap.prototype.resetExtent_ = function() {\n  if (ol.OVERVIEWMAP_MAX_RATIO === 0 || ol.OVERVIEWMAP_MIN_RATIO === 0) {\n    return;\n  }\n\n  var map = this.getMap();\n  var ovmap = this.ovmap_;\n\n  var mapSize = /** @type {ol.Size} */ (map.getSize());\n\n  var view = map.getView();\n  var extent = view.calculateExtent(mapSize);\n\n  var ovview = ovmap.getView();\n\n  // get how many times the current map overview could hold different\n  // box sizes using the min and max ratio, pick the step in the middle used\n  // to calculate the extent from the main map to set it to the overview map,\n  var steps = Math.log(\n      ol.OVERVIEWMAP_MAX_RATIO / ol.OVERVIEWMAP_MIN_RATIO) / Math.LN2;\n  var ratio = 1 / (Math.pow(2, steps / 2) * ol.OVERVIEWMAP_MIN_RATIO);\n  ol.extent.scaleFromCenter(extent, ratio);\n  ovview.fit(extent);\n};\n\n\n/**\n * Set the center of the overview map to the map center without changing its\n * resolution.\n * @private\n */\nol.control.OverviewMap.prototype.recenter_ = function() {\n  var map = this.getMap();\n  var ovmap = this.ovmap_;\n\n  var view = map.getView();\n\n  var ovview = ovmap.getView();\n\n  ovview.setCenter(view.getCenter());\n};\n\n\n/**\n * Update the box using the main map extent\n * @private\n */\nol.control.OverviewMap.prototype.updateBox_ = function() {\n  var map = this.getMap();\n  var ovmap = this.ovmap_;\n\n  if (!map.isRendered() || !ovmap.isRendered()) {\n    return;\n  }\n\n  var mapSize = /** @type {ol.Size} */ (map.getSize());\n\n  var view = map.getView();\n\n  var ovview = ovmap.getView();\n\n  var rotation = view.getRotation();\n\n  var overlay = this.boxOverlay_;\n  var box = this.boxOverlay_.getElement();\n  var extent = view.calculateExtent(mapSize);\n  var ovresolution = ovview.getResolution();\n  var bottomLeft = ol.extent.getBottomLeft(extent);\n  var topRight = ol.extent.getTopRight(extent);\n\n  // set position using bottom left coordinates\n  var rotateBottomLeft = this.calculateCoordinateRotate_(rotation, bottomLeft);\n  overlay.setPosition(rotateBottomLeft);\n\n  // set box size calculated from map extent size and overview map resolution\n  if (box) {\n    box.style.width = Math.abs((bottomLeft[0] - topRight[0]) / ovresolution) + 'px';\n    box.style.height = Math.abs((topRight[1] - bottomLeft[1]) / ovresolution) + 'px';\n  }\n};\n\n\n/**\n * @param {number} rotation Target rotation.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @return {ol.Coordinate|undefined} Coordinate for rotation and center anchor.\n * @private\n */\nol.control.OverviewMap.prototype.calculateCoordinateRotate_ = function(\n    rotation, coordinate) {\n  var coordinateRotate;\n\n  var map = this.getMap();\n  var view = map.getView();\n\n  var currentCenter = view.getCenter();\n\n  if (currentCenter) {\n    coordinateRotate = [\n      coordinate[0] - currentCenter[0],\n      coordinate[1] - currentCenter[1]\n    ];\n    ol.coordinate.rotate(coordinateRotate, rotation);\n    ol.coordinate.add(coordinateRotate, currentCenter);\n  }\n  return coordinateRotate;\n};\n\n\n/**\n * @param {Event} event The event to handle\n * @private\n */\nol.control.OverviewMap.prototype.handleClick_ = function(event) {\n  event.preventDefault();\n  this.handleToggle_();\n};\n\n\n/**\n * @private\n */\nol.control.OverviewMap.prototype.handleToggle_ = function() {\n  this.element.classList.toggle('ol-collapsed');\n  if (this.collapsed_) {\n    ol.dom.replaceNode(this.collapseLabel_, this.label_);\n  } else {\n    ol.dom.replaceNode(this.label_, this.collapseLabel_);\n  }\n  this.collapsed_ = !this.collapsed_;\n\n  // manage overview map if it had not been rendered before and control\n  // is expanded\n  var ovmap = this.ovmap_;\n  if (!this.collapsed_ && !ovmap.isRendered()) {\n    ovmap.updateSize();\n    this.resetExtent_();\n    ol.events.listenOnce(ovmap, ol.MapEventType.POSTRENDER,\n        function(event) {\n          this.updateBox_();\n        },\n        this);\n  }\n};\n\n\n/**\n * Return `true` if the overview map is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\nol.control.OverviewMap.prototype.getCollapsible = function() {\n  return this.collapsible_;\n};\n\n\n/**\n * Set whether the overview map should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\nol.control.OverviewMap.prototype.setCollapsible = function(collapsible) {\n  if (this.collapsible_ === collapsible) {\n    return;\n  }\n  this.collapsible_ = collapsible;\n  this.element.classList.toggle('ol-uncollapsible');\n  if (!collapsible && this.collapsed_) {\n    this.handleToggle_();\n  }\n};\n\n\n/**\n * Collapse or expand the overview map according to the passed parameter. Will\n * not do anything if the overview map isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\nol.control.OverviewMap.prototype.setCollapsed = function(collapsed) {\n  if (!this.collapsible_ || this.collapsed_ === collapsed) {\n    return;\n  }\n  this.handleToggle_();\n};\n\n\n/**\n * Determine if the overview map is collapsed.\n * @return {boolean} The overview map is collapsed.\n * @api\n */\nol.control.OverviewMap.prototype.getCollapsed = function() {\n  return this.collapsed_;\n};\n\n\n/**\n * Return the overview map.\n * @return {ol.PluggableMap} Overview map.\n * @api\n */\nol.control.OverviewMap.prototype.getOverviewMap = function() {\n  return this.ovmap_;\n};\n\ngoog.provide('ol.control.ScaleLineUnits');\n\n/**\n * Units for the scale line. Supported values are `'degrees'`, `'imperial'`,\n * `'nautical'`, `'metric'`, `'us'`.\n * @enum {string}\n */\nol.control.ScaleLineUnits = {\n  DEGREES: 'degrees',\n  IMPERIAL: 'imperial',\n  NAUTICAL: 'nautical',\n  METRIC: 'metric',\n  US: 'us'\n};\n\ngoog.provide('ol.control.ScaleLine');\n\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.asserts');\ngoog.require('ol.control.Control');\ngoog.require('ol.control.ScaleLineUnits');\ngoog.require('ol.css');\ngoog.require('ol.events');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Units');\n\n\n/**\n * @classdesc\n * A control displaying rough y-axis distances, calculated for the center of the\n * viewport. For conformal projections (e.g. EPSG:3857, the default view\n * projection in OpenLayers), the scale is valid for all directions.\n * No scale line will be shown when the y-axis distance of a pixel at the\n * viewport center cannot be calculated in the view projection.\n * By default the scale line will show in the bottom left portion of the map,\n * but this can be changed by using the css selector `.ol-scale-line`.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.ScaleLineOptions=} opt_options Scale line options.\n * @api\n */\nol.control.ScaleLine = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  var className = options.className !== undefined ? options.className : 'ol-scale-line';\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.innerElement_ = document.createElement('DIV');\n  this.innerElement_.className = className + '-inner';\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.element_ = document.createElement('DIV');\n  this.element_.className = className + ' ' + ol.css.CLASS_UNSELECTABLE;\n  this.element_.appendChild(this.innerElement_);\n\n  /**\n   * @private\n   * @type {?olx.ViewState}\n   */\n  this.viewState_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderedVisible_ = false;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.renderedWidth_ = undefined;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.renderedHTML_ = '';\n\n  var render = options.render ? options.render : ol.control.ScaleLine.render;\n\n  ol.control.Control.call(this, {\n    element: this.element_,\n    render: render,\n    target: options.target\n  });\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.control.ScaleLine.Property_.UNITS),\n      this.handleUnitsChanged_, this);\n\n  this.setUnits(/** @type {ol.control.ScaleLineUnits} */ (options.units) ||\n      ol.control.ScaleLineUnits.METRIC);\n\n};\nol.inherits(ol.control.ScaleLine, ol.control.Control);\n\n\n/**\n * @const\n * @type {Array.<number>}\n */\nol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5];\n\n\n/**\n * Return the units to use in the scale line.\n * @return {ol.control.ScaleLineUnits|undefined} The units to use in the scale\n *     line.\n * @observable\n * @api\n */\nol.control.ScaleLine.prototype.getUnits = function() {\n  return /** @type {ol.control.ScaleLineUnits|undefined} */ (\n    this.get(ol.control.ScaleLine.Property_.UNITS));\n};\n\n\n/**\n * Update the scale line element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.ScaleLine}\n * @api\n */\nol.control.ScaleLine.render = function(mapEvent) {\n  var frameState = mapEvent.frameState;\n  if (!frameState) {\n    this.viewState_ = null;\n  } else {\n    this.viewState_ = frameState.viewState;\n  }\n  this.updateElement_();\n};\n\n\n/**\n * @private\n */\nol.control.ScaleLine.prototype.handleUnitsChanged_ = function() {\n  this.updateElement_();\n};\n\n\n/**\n * Set the units to use in the scale line.\n * @param {ol.control.ScaleLineUnits} units The units to use in the scale line.\n * @observable\n * @api\n */\nol.control.ScaleLine.prototype.setUnits = function(units) {\n  this.set(ol.control.ScaleLine.Property_.UNITS, units);\n};\n\n\n/**\n * @private\n */\nol.control.ScaleLine.prototype.updateElement_ = function() {\n  var viewState = this.viewState_;\n\n  if (!viewState) {\n    if (this.renderedVisible_) {\n      this.element_.style.display = 'none';\n      this.renderedVisible_ = false;\n    }\n    return;\n  }\n\n  var center = viewState.center;\n  var projection = viewState.projection;\n  var units = this.getUnits();\n  var pointResolutionUnits = units == ol.control.ScaleLineUnits.DEGREES ?\n    ol.proj.Units.DEGREES :\n    ol.proj.Units.METERS;\n  var pointResolution =\n      ol.proj.getPointResolution(projection, viewState.resolution, center, pointResolutionUnits);\n  if (units != ol.control.ScaleLineUnits.DEGREES) {\n    pointResolution *= projection.getMetersPerUnit();\n  }\n\n  var nominalCount = this.minWidth_ * pointResolution;\n  var suffix = '';\n  if (units == ol.control.ScaleLineUnits.DEGREES) {\n    var metersPerDegree = ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES];\n    if (projection.getUnits() == ol.proj.Units.DEGREES) {\n      nominalCount *= metersPerDegree;\n    } else {\n      pointResolution /= metersPerDegree;\n    }\n    if (nominalCount < metersPerDegree / 60) {\n      suffix = '\\u2033'; // seconds\n      pointResolution *= 3600;\n    } else if (nominalCount < metersPerDegree) {\n      suffix = '\\u2032'; // minutes\n      pointResolution *= 60;\n    } else {\n      suffix = '\\u00b0'; // degrees\n    }\n  } else if (units == ol.control.ScaleLineUnits.IMPERIAL) {\n    if (nominalCount < 0.9144) {\n      suffix = 'in';\n      pointResolution /= 0.0254;\n    } else if (nominalCount < 1609.344) {\n      suffix = 'ft';\n      pointResolution /= 0.3048;\n    } else {\n      suffix = 'mi';\n      pointResolution /= 1609.344;\n    }\n  } else if (units == ol.control.ScaleLineUnits.NAUTICAL) {\n    pointResolution /= 1852;\n    suffix = 'nm';\n  } else if (units == ol.control.ScaleLineUnits.METRIC) {\n    if (nominalCount < 0.001) {\n      suffix = 'μm';\n      pointResolution *= 1000000;\n    } else if (nominalCount < 1) {\n      suffix = 'mm';\n      pointResolution *= 1000;\n    } else if (nominalCount < 1000) {\n      suffix = 'm';\n    } else {\n      suffix = 'km';\n      pointResolution /= 1000;\n    }\n  } else if (units == ol.control.ScaleLineUnits.US) {\n    if (nominalCount < 0.9144) {\n      suffix = 'in';\n      pointResolution *= 39.37;\n    } else if (nominalCount < 1609.344) {\n      suffix = 'ft';\n      pointResolution /= 0.30480061;\n    } else {\n      suffix = 'mi';\n      pointResolution /= 1609.3472;\n    }\n  } else {\n    ol.asserts.assert(false, 33); // Invalid units\n  }\n\n  var i = 3 * Math.floor(\n      Math.log(this.minWidth_ * pointResolution) / Math.log(10));\n  var count, width;\n  while (true) {\n    count = ol.control.ScaleLine.LEADING_DIGITS[((i % 3) + 3) % 3] *\n        Math.pow(10, Math.floor(i / 3));\n    width = Math.round(count / pointResolution);\n    if (isNaN(width)) {\n      this.element_.style.display = 'none';\n      this.renderedVisible_ = false;\n      return;\n    } else if (width >= this.minWidth_) {\n      break;\n    }\n    ++i;\n  }\n\n  var html = count + ' ' + suffix;\n  if (this.renderedHTML_ != html) {\n    this.innerElement_.innerHTML = html;\n    this.renderedHTML_ = html;\n  }\n\n  if (this.renderedWidth_ != width) {\n    this.innerElement_.style.width = width + 'px';\n    this.renderedWidth_ = width;\n  }\n\n  if (!this.renderedVisible_) {\n    this.element_.style.display = '';\n    this.renderedVisible_ = true;\n  }\n\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.control.ScaleLine.Property_ = {\n  UNITS: 'units'\n};\n\n// FIXME should possibly show tooltip when dragging?\n\ngoog.provide('ol.control.ZoomSlider');\n\ngoog.require('ol');\ngoog.require('ol.ViewHint');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\ngoog.require('ol.easing');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.math');\ngoog.require('ol.pointer.EventType');\ngoog.require('ol.pointer.PointerEventHandler');\n\n\n/**\n * @classdesc\n * A slider type of control for zooming.\n *\n * Example:\n *\n *     map.addControl(new ol.control.ZoomSlider());\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.ZoomSliderOptions=} opt_options Zoom slider options.\n * @api\n */\nol.control.ZoomSlider = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * Will hold the current resolution of the view.\n   *\n   * @type {number|undefined}\n   * @private\n   */\n  this.currentResolution_ = undefined;\n\n  /**\n   * The direction of the slider. Will be determined from actual display of the\n   * container and defaults to ol.control.ZoomSlider.Direction_.VERTICAL.\n   *\n   * @type {ol.control.ZoomSlider.Direction_}\n   * @private\n   */\n  this.direction_ = ol.control.ZoomSlider.Direction_.VERTICAL;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.dragging_;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.heightLimit_ = 0;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.widthLimit_ = 0;\n\n  /**\n   * @type {number|undefined}\n   * @private\n   */\n  this.previousX_;\n\n  /**\n   * @type {number|undefined}\n   * @private\n   */\n  this.previousY_;\n\n  /**\n   * The calculated thumb size (border box plus margins).  Set when initSlider_\n   * is called.\n   * @type {ol.Size}\n   * @private\n   */\n  this.thumbSize_ = null;\n\n  /**\n   * Whether the slider is initialized.\n   * @type {boolean}\n   * @private\n   */\n  this.sliderInitialized_ = false;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n  var className = options.className !== undefined ? options.className : 'ol-zoomslider';\n  var thumbElement = document.createElement('button');\n  thumbElement.setAttribute('type', 'button');\n  thumbElement.className = className + '-thumb ' + ol.css.CLASS_UNSELECTABLE;\n  var containerElement = document.createElement('div');\n  containerElement.className = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' + ol.css.CLASS_CONTROL;\n  containerElement.appendChild(thumbElement);\n  /**\n   * @type {ol.pointer.PointerEventHandler}\n   * @private\n   */\n  this.dragger_ = new ol.pointer.PointerEventHandler(containerElement);\n\n  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERDOWN,\n      this.handleDraggerStart_, this);\n  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERMOVE,\n      this.handleDraggerDrag_, this);\n  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERUP,\n      this.handleDraggerEnd_, this);\n\n  ol.events.listen(containerElement, ol.events.EventType.CLICK,\n      this.handleContainerClick_, this);\n  ol.events.listen(thumbElement, ol.events.EventType.CLICK,\n      ol.events.Event.stopPropagation);\n\n  var render = options.render ? options.render : ol.control.ZoomSlider.render;\n\n  ol.control.Control.call(this, {\n    element: containerElement,\n    render: render\n  });\n};\nol.inherits(ol.control.ZoomSlider, ol.control.Control);\n\n\n/**\n * @inheritDoc\n */\nol.control.ZoomSlider.prototype.disposeInternal = function() {\n  this.dragger_.dispose();\n  ol.control.Control.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * The enum for available directions.\n *\n * @enum {number}\n * @private\n */\nol.control.ZoomSlider.Direction_ = {\n  VERTICAL: 0,\n  HORIZONTAL: 1\n};\n\n\n/**\n * @inheritDoc\n */\nol.control.ZoomSlider.prototype.setMap = function(map) {\n  ol.control.Control.prototype.setMap.call(this, map);\n  if (map) {\n    map.render();\n  }\n};\n\n\n/**\n * Initializes the slider element. This will determine and set this controls\n * direction_ and also constrain the dragging of the thumb to always be within\n * the bounds of the container.\n *\n * @private\n */\nol.control.ZoomSlider.prototype.initSlider_ = function() {\n  var container = this.element;\n  var containerSize = {\n    width: container.offsetWidth, height: container.offsetHeight\n  };\n\n  var thumb = container.firstElementChild;\n  var computedStyle = getComputedStyle(thumb);\n  var thumbWidth = thumb.offsetWidth +\n      parseFloat(computedStyle['marginRight']) +\n      parseFloat(computedStyle['marginLeft']);\n  var thumbHeight = thumb.offsetHeight +\n      parseFloat(computedStyle['marginTop']) +\n      parseFloat(computedStyle['marginBottom']);\n  this.thumbSize_ = [thumbWidth, thumbHeight];\n\n  if (containerSize.width > containerSize.height) {\n    this.direction_ = ol.control.ZoomSlider.Direction_.HORIZONTAL;\n    this.widthLimit_ = containerSize.width - thumbWidth;\n  } else {\n    this.direction_ = ol.control.ZoomSlider.Direction_.VERTICAL;\n    this.heightLimit_ = containerSize.height - thumbHeight;\n  }\n  this.sliderInitialized_ = true;\n};\n\n\n/**\n * Update the zoomslider element.\n * @param {ol.MapEvent} mapEvent Map event.\n * @this {ol.control.ZoomSlider}\n * @api\n */\nol.control.ZoomSlider.render = function(mapEvent) {\n  if (!mapEvent.frameState) {\n    return;\n  }\n  if (!this.sliderInitialized_) {\n    this.initSlider_();\n  }\n  var res = mapEvent.frameState.viewState.resolution;\n  if (res !== this.currentResolution_) {\n    this.currentResolution_ = res;\n    this.setThumbPosition_(res);\n  }\n};\n\n\n/**\n * @param {Event} event The browser event to handle.\n * @private\n */\nol.control.ZoomSlider.prototype.handleContainerClick_ = function(event) {\n  var view = this.getMap().getView();\n\n  var relativePosition = this.getRelativePosition_(\n      event.offsetX - this.thumbSize_[0] / 2,\n      event.offsetY - this.thumbSize_[1] / 2);\n\n  var resolution = this.getResolutionForPosition_(relativePosition);\n\n  view.animate({\n    resolution: view.constrainResolution(resolution),\n    duration: this.duration_,\n    easing: ol.easing.easeOut\n  });\n};\n\n\n/**\n * Handle dragger start events.\n * @param {ol.pointer.PointerEvent} event The drag event.\n * @private\n */\nol.control.ZoomSlider.prototype.handleDraggerStart_ = function(event) {\n  if (!this.dragging_ && event.originalEvent.target === this.element.firstElementChild) {\n    this.getMap().getView().setHint(ol.ViewHint.INTERACTING, 1);\n    this.previousX_ = event.clientX;\n    this.previousY_ = event.clientY;\n    this.dragging_ = true;\n  }\n};\n\n\n/**\n * Handle dragger drag events.\n *\n * @param {ol.pointer.PointerEvent|Event} event The drag event.\n * @private\n */\nol.control.ZoomSlider.prototype.handleDraggerDrag_ = function(event) {\n  if (this.dragging_) {\n    var element = this.element.firstElementChild;\n    var deltaX = event.clientX - this.previousX_ + parseInt(element.style.left, 10);\n    var deltaY = event.clientY - this.previousY_ + parseInt(element.style.top, 10);\n    var relativePosition = this.getRelativePosition_(deltaX, deltaY);\n    this.currentResolution_ = this.getResolutionForPosition_(relativePosition);\n    this.getMap().getView().setResolution(this.currentResolution_);\n    this.setThumbPosition_(this.currentResolution_);\n    this.previousX_ = event.clientX;\n    this.previousY_ = event.clientY;\n  }\n};\n\n\n/**\n * Handle dragger end events.\n * @param {ol.pointer.PointerEvent|Event} event The drag event.\n * @private\n */\nol.control.ZoomSlider.prototype.handleDraggerEnd_ = function(event) {\n  if (this.dragging_) {\n    var view = this.getMap().getView();\n    view.setHint(ol.ViewHint.INTERACTING, -1);\n\n    view.animate({\n      resolution: view.constrainResolution(this.currentResolution_),\n      duration: this.duration_,\n      easing: ol.easing.easeOut\n    });\n\n    this.dragging_ = false;\n    this.previousX_ = undefined;\n    this.previousY_ = undefined;\n  }\n};\n\n\n/**\n * Positions the thumb inside its container according to the given resolution.\n *\n * @param {number} res The res.\n * @private\n */\nol.control.ZoomSlider.prototype.setThumbPosition_ = function(res) {\n  var position = this.getPositionForResolution_(res);\n  var thumb = this.element.firstElementChild;\n\n  if (this.direction_ == ol.control.ZoomSlider.Direction_.HORIZONTAL) {\n    thumb.style.left = this.widthLimit_ * position + 'px';\n  } else {\n    thumb.style.top = this.heightLimit_ * position + 'px';\n  }\n};\n\n\n/**\n * Calculates the relative position of the thumb given x and y offsets.  The\n * relative position scales from 0 to 1.  The x and y offsets are assumed to be\n * in pixel units within the dragger limits.\n *\n * @param {number} x Pixel position relative to the left of the slider.\n * @param {number} y Pixel position relative to the top of the slider.\n * @return {number} The relative position of the thumb.\n * @private\n */\nol.control.ZoomSlider.prototype.getRelativePosition_ = function(x, y) {\n  var amount;\n  if (this.direction_ === ol.control.ZoomSlider.Direction_.HORIZONTAL) {\n    amount = x / this.widthLimit_;\n  } else {\n    amount = y / this.heightLimit_;\n  }\n  return ol.math.clamp(amount, 0, 1);\n};\n\n\n/**\n * Calculates the corresponding resolution of the thumb given its relative\n * position (where 0 is the minimum and 1 is the maximum).\n *\n * @param {number} position The relative position of the thumb.\n * @return {number} The corresponding resolution.\n * @private\n */\nol.control.ZoomSlider.prototype.getResolutionForPosition_ = function(position) {\n  var fn = this.getMap().getView().getResolutionForValueFunction();\n  return fn(1 - position);\n};\n\n\n/**\n * Determines the relative position of the slider for the given resolution.  A\n * relative position of 0 corresponds to the minimum view resolution.  A\n * relative position of 1 corresponds to the maximum view resolution.\n *\n * @param {number} res The resolution.\n * @return {number} The relative position value (between 0 and 1).\n * @private\n */\nol.control.ZoomSlider.prototype.getPositionForResolution_ = function(res) {\n  var fn = this.getMap().getView().getValueForResolutionFunction();\n  return 1 - fn(res);\n};\n\ngoog.provide('ol.control.ZoomToExtent');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.control.Control');\ngoog.require('ol.css');\n\n\n/**\n * @classdesc\n * A button control which, when pressed, changes the map view to a specific\n * extent. To style this control use the css selector `.ol-zoom-extent`.\n *\n * @constructor\n * @extends {ol.control.Control}\n * @param {olx.control.ZoomToExtentOptions=} opt_options Options.\n * @api\n */\nol.control.ZoomToExtent = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {ol.Extent}\n   * @protected\n   */\n  this.extent = options.extent ? options.extent : null;\n\n  var className = options.className !== undefined ? options.className :\n    'ol-zoom-extent';\n\n  var label = options.label !== undefined ? options.label : 'E';\n  var tipLabel = options.tipLabel !== undefined ?\n    options.tipLabel : 'Fit to extent';\n  var button = document.createElement('button');\n  button.setAttribute('type', 'button');\n  button.title = tipLabel;\n  button.appendChild(\n      typeof label === 'string' ? document.createTextNode(label) : label\n  );\n\n  ol.events.listen(button, ol.events.EventType.CLICK,\n      this.handleClick_, this);\n\n  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +\n      ol.css.CLASS_CONTROL;\n  var element = document.createElement('div');\n  element.className = cssClasses;\n  element.appendChild(button);\n\n  ol.control.Control.call(this, {\n    element: element,\n    target: options.target\n  });\n};\nol.inherits(ol.control.ZoomToExtent, ol.control.Control);\n\n\n/**\n * @param {Event} event The event to handle\n * @private\n */\nol.control.ZoomToExtent.prototype.handleClick_ = function(event) {\n  event.preventDefault();\n  this.handleZoomToExtent();\n};\n\n\n/**\n * @protected\n */\nol.control.ZoomToExtent.prototype.handleZoomToExtent = function() {\n  var map = this.getMap();\n  var view = map.getView();\n  var extent = !this.extent ? view.getProjection().getExtent() : this.extent;\n  view.fit(extent);\n};\n\ngoog.provide('ol.DeviceOrientation');\n\ngoog.require('ol.events');\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.has');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * The ol.DeviceOrientation class provides access to information from\n * DeviceOrientation events.  See the [HTML 5 DeviceOrientation Specification](\n * http://www.w3.org/TR/orientation-event/) for more details.\n *\n * Many new computers, and especially mobile phones\n * and tablets, provide hardware support for device orientation. Web\n * developers targeting mobile devices will be especially interested in this\n * class.\n *\n * Device orientation data are relative to a common starting point. For mobile\n * devices, the starting point is to lay your phone face up on a table with the\n * top of the phone pointing north. This represents the zero state. All\n * angles are then relative to this state. For computers, it is the same except\n * the screen is open at 90 degrees.\n *\n * Device orientation is reported as three angles - `alpha`, `beta`, and\n * `gamma` - relative to the starting position along the three planar axes X, Y\n * and Z. The X axis runs from the left edge to the right edge through the\n * middle of the device. Similarly, the Y axis runs from the bottom to the top\n * of the device through the middle. The Z axis runs from the back to the front\n * through the middle. In the starting position, the X axis points to the\n * right, the Y axis points away from you and the Z axis points straight up\n * from the device lying flat.\n *\n * The three angles representing the device orientation are relative to the\n * three axes. `alpha` indicates how much the device has been rotated around the\n * Z axis, which is commonly interpreted as the compass heading (see note\n * below). `beta` indicates how much the device has been rotated around the X\n * axis, or how much it is tilted from front to back.  `gamma` indicates how\n * much the device has been rotated around the Y axis, or how much it is tilted\n * from left to right.\n *\n * For most browsers, the `alpha` value returns the compass heading so if the\n * device points north, it will be 0.  With Safari on iOS, the 0 value of\n * `alpha` is calculated from when device orientation was first requested.\n * ol.DeviceOrientation provides the `heading` property which normalizes this\n * behavior across all browsers for you.\n *\n * It is important to note that the HTML 5 DeviceOrientation specification\n * indicates that `alpha`, `beta` and `gamma` are in degrees while the\n * equivalent properties in ol.DeviceOrientation are in radians for consistency\n * with all other uses of angles throughout OpenLayers.\n *\n * To get notified of device orientation changes, register a listener for the\n * generic `change` event on your `ol.DeviceOrientation` instance.\n *\n * @see {@link http://www.w3.org/TR/orientation-event/}\n *\n * @deprecated This class is deprecated and will removed in the next major release.\n *\n * @constructor\n * @extends {ol.Object}\n * @param {olx.DeviceOrientationOptions=} opt_options Options.\n * @api\n */\nol.DeviceOrientation = function(opt_options) {\n\n  ol.Object.call(this);\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.listenerKey_ = null;\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.DeviceOrientation.Property_.TRACKING),\n      this.handleTrackingChanged_, this);\n\n  this.setTracking(options.tracking !== undefined ? options.tracking : false);\n\n};\nol.inherits(ol.DeviceOrientation, ol.Object);\n\n\n/**\n * @inheritDoc\n */\nol.DeviceOrientation.prototype.disposeInternal = function() {\n  this.setTracking(false);\n  ol.Object.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @private\n * @param {Event} originalEvent Event.\n */\nol.DeviceOrientation.prototype.orientationChange_ = function(originalEvent) {\n  var event = /** @type {DeviceOrientationEvent} */ (originalEvent);\n  if (event.alpha !== null) {\n    var alpha = ol.math.toRadians(event.alpha);\n    this.set(ol.DeviceOrientation.Property_.ALPHA, alpha);\n    // event.absolute is undefined in iOS.\n    if (typeof event.absolute === 'boolean' && event.absolute) {\n      this.set(ol.DeviceOrientation.Property_.HEADING, alpha);\n    } else if (typeof event.webkitCompassHeading === 'number' &&\n               event.webkitCompassAccuracy != -1) {\n      var heading = ol.math.toRadians(event.webkitCompassHeading);\n      this.set(ol.DeviceOrientation.Property_.HEADING, heading);\n    }\n  }\n  if (event.beta !== null) {\n    this.set(ol.DeviceOrientation.Property_.BETA,\n        ol.math.toRadians(event.beta));\n  }\n  if (event.gamma !== null) {\n    this.set(ol.DeviceOrientation.Property_.GAMMA,\n        ol.math.toRadians(event.gamma));\n  }\n  this.changed();\n};\n\n\n/**\n * Rotation around the device z-axis (in radians).\n * @return {number|undefined} The euler angle in radians of the device from the\n *     standard Z axis.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.getAlpha = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.DeviceOrientation.Property_.ALPHA));\n};\n\n\n/**\n * Rotation around the device x-axis (in radians).\n * @return {number|undefined} The euler angle in radians of the device from the\n *     planar X axis.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.getBeta = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.DeviceOrientation.Property_.BETA));\n};\n\n\n/**\n * Rotation around the device y-axis (in radians).\n * @return {number|undefined} The euler angle in radians of the device from the\n *     planar Y axis.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.getGamma = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.DeviceOrientation.Property_.GAMMA));\n};\n\n\n/**\n * The heading of the device relative to north (in radians).\n * @return {number|undefined} The heading of the device relative to north, in\n *     radians, normalizing for different browser behavior.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.getHeading = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.DeviceOrientation.Property_.HEADING));\n};\n\n\n/**\n * Determine if orientation is being tracked.\n * @return {boolean} Changes in device orientation are being tracked.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.getTracking = function() {\n  return /** @type {boolean} */ (\n    this.get(ol.DeviceOrientation.Property_.TRACKING));\n};\n\n\n/**\n * @private\n */\nol.DeviceOrientation.prototype.handleTrackingChanged_ = function() {\n  if (ol.has.DEVICE_ORIENTATION) {\n    var tracking = this.getTracking();\n    if (tracking && !this.listenerKey_) {\n      this.listenerKey_ = ol.events.listen(window, 'deviceorientation',\n          this.orientationChange_, this);\n    } else if (!tracking && this.listenerKey_ !== null) {\n      ol.events.unlistenByKey(this.listenerKey_);\n      this.listenerKey_ = null;\n    }\n  }\n};\n\n\n/**\n * Enable or disable tracking of device orientation events.\n * @param {boolean} tracking The status of tracking changes to alpha, beta and\n *     gamma. If true, changes are tracked and reported immediately.\n * @observable\n * @api\n */\nol.DeviceOrientation.prototype.setTracking = function(tracking) {\n  this.set(ol.DeviceOrientation.Property_.TRACKING, tracking);\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.DeviceOrientation.Property_ = {\n  ALPHA: 'alpha',\n  BETA: 'beta',\n  GAMMA: 'gamma',\n  HEADING: 'heading',\n  TRACKING: 'tracking'\n};\n\ngoog.provide('ol.style.Image');\n\n\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link ol.style.Icon}, {@link ol.style.Circle} and\n * {@link ol.style.RegularShape}.\n *\n * @constructor\n * @abstract\n * @param {ol.StyleImageOptions} options Options.\n * @api\n */\nol.style.Image = function(options) {\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.opacity_ = options.opacity;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.rotateWithView_ = options.rotateWithView;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.rotation_ = options.rotation;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.scale_ = options.scale;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.snapToPixel_ = options.snapToPixel;\n\n};\n\n\n/**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\nol.style.Image.prototype.getOpacity = function() {\n  return this.opacity_;\n};\n\n\n/**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\nol.style.Image.prototype.getRotateWithView = function() {\n  return this.rotateWithView_;\n};\n\n\n/**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\nol.style.Image.prototype.getRotation = function() {\n  return this.rotation_;\n};\n\n\n/**\n * Get the symbolizer scale.\n * @return {number} Scale.\n * @api\n */\nol.style.Image.prototype.getScale = function() {\n  return this.scale_;\n};\n\n\n/**\n * Determine whether the symbolizer should be snapped to a pixel.\n * @return {boolean} The symbolizer should snap to a pixel.\n * @api\n */\nol.style.Image.prototype.getSnapToPixel = function() {\n  return this.snapToPixel_;\n};\n\n\n/**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array.<number>} Anchor.\n */\nol.style.Image.prototype.getAnchor = function() {};\n\n\n/**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element.\n */\nol.style.Image.prototype.getImage = function(pixelRatio) {};\n\n\n/**\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element.\n */\nol.style.Image.prototype.getHitDetectionImage = function(pixelRatio) {};\n\n\n/**\n * @abstract\n * @return {ol.ImageState} Image state.\n */\nol.style.Image.prototype.getImageState = function() {};\n\n\n/**\n * @abstract\n * @return {ol.Size} Image size.\n */\nol.style.Image.prototype.getImageSize = function() {};\n\n\n/**\n * @abstract\n * @return {ol.Size} Size of the hit-detection image.\n */\nol.style.Image.prototype.getHitDetectionImageSize = function() {};\n\n\n/**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array.<number>} Origin.\n */\nol.style.Image.prototype.getOrigin = function() {};\n\n\n/**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {ol.Size} Size.\n */\nol.style.Image.prototype.getSize = function() {};\n\n\n/**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\nol.style.Image.prototype.setOpacity = function(opacity) {\n  this.opacity_ = opacity;\n};\n\n\n/**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n */\nol.style.Image.prototype.setRotateWithView = function(rotateWithView) {\n  this.rotateWithView_ = rotateWithView;\n};\n\n\n/**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\nol.style.Image.prototype.setRotation = function(rotation) {\n  this.rotation_ = rotation;\n};\n\n\n/**\n * Set the scale.\n *\n * @param {number} scale Scale.\n * @api\n */\nol.style.Image.prototype.setScale = function(scale) {\n  this.scale_ = scale;\n};\n\n\n/**\n * Set whether to snap the image to the closest pixel.\n *\n * @param {boolean} snapToPixel Snap to pixel?\n */\nol.style.Image.prototype.setSnapToPixel = function(snapToPixel) {\n  this.snapToPixel_ = snapToPixel;\n};\n\n\n/**\n * @abstract\n * @param {function(this: T, ol.events.Event)} listener Listener function.\n * @param {T} thisArg Value to use as `this` when executing `listener`.\n * @return {ol.EventsKey|undefined} Listener key.\n * @template T\n */\nol.style.Image.prototype.listenImageChange = function(listener, thisArg) {};\n\n\n/**\n * Load not yet loaded URI.\n * @abstract\n */\nol.style.Image.prototype.load = function() {};\n\n\n/**\n * @abstract\n * @param {function(this: T, ol.events.Event)} listener Listener function.\n * @param {T} thisArg Value to use as `this` when executing `listener`.\n * @template T\n */\nol.style.Image.prototype.unlistenImageChange = function(listener, thisArg) {};\n\ngoog.provide('ol.style.RegularShape');\n\ngoog.require('ol');\ngoog.require('ol.colorlike');\ngoog.require('ol.dom');\ngoog.require('ol.has');\ngoog.require('ol.ImageState');\ngoog.require('ol.render.canvas');\ngoog.require('ol.style.Image');\n\n\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n *\n * @constructor\n * @param {olx.style.RegularShapeOptions} options Options.\n * @extends {ol.style.Image}\n * @api\n */\nol.style.RegularShape = function(options) {\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.checksums_ = null;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = null;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.hitDetectionCanvas_ = null;\n\n  /**\n   * @private\n   * @type {ol.style.Fill}\n   */\n  this.fill_ = options.fill !== undefined ? options.fill : null;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.origin_ = [0, 0];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.points_ = options.points;\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.radius_ = /** @type {number} */ (options.radius !== undefined ?\n    options.radius : options.radius1);\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.radius2_ = options.radius2;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.angle_ = options.angle !== undefined ? options.angle : 0;\n\n  /**\n   * @private\n   * @type {ol.style.Stroke}\n   */\n  this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.anchor_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.size_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.imageSize_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.hitDetectionImageSize_ = null;\n\n  /**\n   * @protected\n   * @type {ol.style.AtlasManager|undefined}\n   */\n  this.atlasManager_ = options.atlasManager;\n\n  this.render_(this.atlasManager_);\n\n  /**\n   * @type {boolean}\n   */\n  var snapToPixel = options.snapToPixel !== undefined ?\n    options.snapToPixel : true;\n\n  /**\n   * @type {boolean}\n   */\n  var rotateWithView = options.rotateWithView !== undefined ?\n    options.rotateWithView : false;\n\n  ol.style.Image.call(this, {\n    opacity: 1,\n    rotateWithView: rotateWithView,\n    rotation: options.rotation !== undefined ? options.rotation : 0,\n    scale: 1,\n    snapToPixel: snapToPixel\n  });\n};\nol.inherits(ol.style.RegularShape, ol.style.Image);\n\n\n/**\n * Clones the style. If an atlasmanager was provided to the original style it will be used in the cloned style, too.\n * @return {ol.style.RegularShape} The cloned style.\n * @api\n */\nol.style.RegularShape.prototype.clone = function() {\n  var style = new ol.style.RegularShape({\n    fill: this.getFill() ? this.getFill().clone() : undefined,\n    points: this.getPoints(),\n    radius: this.getRadius(),\n    radius2: this.getRadius2(),\n    angle: this.getAngle(),\n    snapToPixel: this.getSnapToPixel(),\n    stroke: this.getStroke() ?  this.getStroke().clone() : undefined,\n    rotation: this.getRotation(),\n    rotateWithView: this.getRotateWithView(),\n    atlasManager: this.atlasManager_\n  });\n  style.setOpacity(this.getOpacity());\n  style.setScale(this.getScale());\n  return style;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.RegularShape.prototype.getAnchor = function() {\n  return this.anchor_;\n};\n\n\n/**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\nol.style.RegularShape.prototype.getAngle = function() {\n  return this.angle_;\n};\n\n\n/**\n * Get the fill style for the shape.\n * @return {ol.style.Fill} Fill style.\n * @api\n */\nol.style.RegularShape.prototype.getFill = function() {\n  return this.fill_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.getHitDetectionImage = function(pixelRatio) {\n  return this.hitDetectionCanvas_;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.RegularShape.prototype.getImage = function(pixelRatio) {\n  return this.canvas_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.getImageSize = function() {\n  return this.imageSize_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.getHitDetectionImageSize = function() {\n  return this.hitDetectionImageSize_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.getImageState = function() {\n  return ol.ImageState.LOADED;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.RegularShape.prototype.getOrigin = function() {\n  return this.origin_;\n};\n\n\n/**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\nol.style.RegularShape.prototype.getPoints = function() {\n  return this.points_;\n};\n\n\n/**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\nol.style.RegularShape.prototype.getRadius = function() {\n  return this.radius_;\n};\n\n\n/**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\nol.style.RegularShape.prototype.getRadius2 = function() {\n  return this.radius2_;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.RegularShape.prototype.getSize = function() {\n  return this.size_;\n};\n\n\n/**\n * Get the stroke style for the shape.\n * @return {ol.style.Stroke} Stroke style.\n * @api\n */\nol.style.RegularShape.prototype.getStroke = function() {\n  return this.stroke_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.listenImageChange = function(listener, thisArg) {};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.load = function() {};\n\n\n/**\n * @inheritDoc\n */\nol.style.RegularShape.prototype.unlistenImageChange = function(listener, thisArg) {};\n\n\n/**\n * @protected\n * @param {ol.style.AtlasManager|undefined} atlasManager An atlas manager.\n */\nol.style.RegularShape.prototype.render_ = function(atlasManager) {\n  var imageSize;\n  var lineCap = '';\n  var lineJoin = '';\n  var miterLimit = 0;\n  var lineDash = null;\n  var lineDashOffset = 0;\n  var strokeStyle;\n  var strokeWidth = 0;\n\n  if (this.stroke_) {\n    strokeStyle = this.stroke_.getColor();\n    if (strokeStyle === null) {\n      strokeStyle = ol.render.canvas.defaultStrokeStyle;\n    }\n    strokeStyle = ol.colorlike.asColorLike(strokeStyle);\n    strokeWidth = this.stroke_.getWidth();\n    if (strokeWidth === undefined) {\n      strokeWidth = ol.render.canvas.defaultLineWidth;\n    }\n    lineDash = this.stroke_.getLineDash();\n    lineDashOffset = this.stroke_.getLineDashOffset();\n    if (!ol.has.CANVAS_LINE_DASH) {\n      lineDash = null;\n      lineDashOffset = 0;\n    }\n    lineJoin = this.stroke_.getLineJoin();\n    if (lineJoin === undefined) {\n      lineJoin = ol.render.canvas.defaultLineJoin;\n    }\n    lineCap = this.stroke_.getLineCap();\n    if (lineCap === undefined) {\n      lineCap = ol.render.canvas.defaultLineCap;\n    }\n    miterLimit = this.stroke_.getMiterLimit();\n    if (miterLimit === undefined) {\n      miterLimit = ol.render.canvas.defaultMiterLimit;\n    }\n  }\n\n  var size = 2 * (this.radius_ + strokeWidth) + 1;\n\n  /** @type {ol.RegularShapeRenderOptions} */\n  var renderOptions = {\n    strokeStyle: strokeStyle,\n    strokeWidth: strokeWidth,\n    size: size,\n    lineCap: lineCap,\n    lineDash: lineDash,\n    lineDashOffset: lineDashOffset,\n    lineJoin: lineJoin,\n    miterLimit: miterLimit\n  };\n\n  if (atlasManager === undefined) {\n    // no atlas manager is used, create a new canvas\n    var context = ol.dom.createCanvasContext2D(size, size);\n    this.canvas_ = context.canvas;\n\n    // canvas.width and height are rounded to the closest integer\n    size = this.canvas_.width;\n    imageSize = size;\n\n    this.draw_(renderOptions, context, 0, 0);\n\n    this.createHitDetectionCanvas_(renderOptions);\n  } else {\n    // an atlas manager is used, add the symbol to an atlas\n    size = Math.round(size);\n\n    var hasCustomHitDetectionImage = !this.fill_;\n    var renderHitDetectionCallback;\n    if (hasCustomHitDetectionImage) {\n      // render the hit-detection image into a separate atlas image\n      renderHitDetectionCallback =\n          this.drawHitDetectionCanvas_.bind(this, renderOptions);\n    }\n\n    var id = this.getChecksum();\n    var info = atlasManager.add(\n        id, size, size, this.draw_.bind(this, renderOptions),\n        renderHitDetectionCallback);\n\n    this.canvas_ = info.image;\n    this.origin_ = [info.offsetX, info.offsetY];\n    imageSize = info.image.width;\n\n    if (hasCustomHitDetectionImage) {\n      this.hitDetectionCanvas_ = info.hitImage;\n      this.hitDetectionImageSize_ =\n          [info.hitImage.width, info.hitImage.height];\n    } else {\n      this.hitDetectionCanvas_ = this.canvas_;\n      this.hitDetectionImageSize_ = [imageSize, imageSize];\n    }\n  }\n\n  this.anchor_ = [size / 2, size / 2];\n  this.size_ = [size, size];\n  this.imageSize_ = [imageSize, imageSize];\n};\n\n\n/**\n * @private\n * @param {ol.RegularShapeRenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} x The origin for the symbol (x).\n * @param {number} y The origin for the symbol (y).\n */\nol.style.RegularShape.prototype.draw_ = function(renderOptions, context, x, y) {\n  var i, angle0, radiusC;\n  // reset transform\n  context.setTransform(1, 0, 0, 1, 0, 0);\n\n  // then move to (x, y)\n  context.translate(x, y);\n\n  context.beginPath();\n\n  var points = this.points_;\n  if (points === Infinity) {\n    context.arc(\n        renderOptions.size / 2, renderOptions.size / 2,\n        this.radius_, 0, 2 * Math.PI, true);\n  } else {\n    var radius2 = (this.radius2_ !== undefined) ? this.radius2_\n      : this.radius_;\n    if (radius2 !== this.radius_) {\n      points = 2 * points;\n    }\n    for (i = 0; i <= points; i++) {\n      angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_;\n      radiusC = i % 2 === 0 ? this.radius_ : radius2;\n      context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0),\n          renderOptions.size / 2 + radiusC * Math.sin(angle0));\n    }\n  }\n\n\n  if (this.fill_) {\n    var color = this.fill_.getColor();\n    if (color === null) {\n      color = ol.render.canvas.defaultFillStyle;\n    }\n    context.fillStyle = ol.colorlike.asColorLike(color);\n    context.fill();\n  }\n  if (this.stroke_) {\n    context.strokeStyle = renderOptions.strokeStyle;\n    context.lineWidth = renderOptions.strokeWidth;\n    if (renderOptions.lineDash) {\n      context.setLineDash(renderOptions.lineDash);\n      context.lineDashOffset = renderOptions.lineDashOffset;\n    }\n    context.lineCap = renderOptions.lineCap;\n    context.lineJoin = renderOptions.lineJoin;\n    context.miterLimit = renderOptions.miterLimit;\n    context.stroke();\n  }\n  context.closePath();\n};\n\n\n/**\n * @private\n * @param {ol.RegularShapeRenderOptions} renderOptions Render options.\n */\nol.style.RegularShape.prototype.createHitDetectionCanvas_ = function(renderOptions) {\n  this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];\n  if (this.fill_) {\n    this.hitDetectionCanvas_ = this.canvas_;\n    return;\n  }\n\n  // if no fill style is set, create an extra hit-detection image with a\n  // default fill style\n  var context = ol.dom.createCanvasContext2D(renderOptions.size, renderOptions.size);\n  this.hitDetectionCanvas_ = context.canvas;\n\n  this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);\n};\n\n\n/**\n * @private\n * @param {ol.RegularShapeRenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n * @param {number} x The origin for the symbol (x).\n * @param {number} y The origin for the symbol (y).\n */\nol.style.RegularShape.prototype.drawHitDetectionCanvas_ = function(renderOptions, context, x, y) {\n  // reset transform\n  context.setTransform(1, 0, 0, 1, 0, 0);\n\n  // then move to (x, y)\n  context.translate(x, y);\n\n  context.beginPath();\n\n  var points = this.points_;\n  if (points === Infinity) {\n    context.arc(\n        renderOptions.size / 2, renderOptions.size / 2,\n        this.radius_, 0, 2 * Math.PI, true);\n  } else {\n    var radius2 = (this.radius2_ !== undefined) ? this.radius2_\n      : this.radius_;\n    if (radius2 !== this.radius_) {\n      points = 2 * points;\n    }\n    var i, radiusC, angle0;\n    for (i = 0; i <= points; i++) {\n      angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_;\n      radiusC = i % 2 === 0 ? this.radius_ : radius2;\n      context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0),\n          renderOptions.size / 2 + radiusC * Math.sin(angle0));\n    }\n  }\n\n  context.fillStyle = ol.render.canvas.defaultFillStyle;\n  context.fill();\n  if (this.stroke_) {\n    context.strokeStyle = renderOptions.strokeStyle;\n    context.lineWidth = renderOptions.strokeWidth;\n    if (renderOptions.lineDash) {\n      context.setLineDash(renderOptions.lineDash);\n      context.lineDashOffset = renderOptions.lineDashOffset;\n    }\n    context.stroke();\n  }\n  context.closePath();\n};\n\n\n/**\n * @return {string} The checksum.\n */\nol.style.RegularShape.prototype.getChecksum = function() {\n  var strokeChecksum = this.stroke_ ?\n    this.stroke_.getChecksum() : '-';\n  var fillChecksum = this.fill_ ?\n    this.fill_.getChecksum() : '-';\n\n  var recalculate = !this.checksums_ ||\n      (strokeChecksum != this.checksums_[1] ||\n      fillChecksum != this.checksums_[2] ||\n      this.radius_ != this.checksums_[3] ||\n      this.radius2_ != this.checksums_[4] ||\n      this.angle_ != this.checksums_[5] ||\n      this.points_ != this.checksums_[6]);\n\n  if (recalculate) {\n    var checksum = 'r' + strokeChecksum + fillChecksum +\n        (this.radius_ !== undefined ? this.radius_.toString() : '-') +\n        (this.radius2_ !== undefined ? this.radius2_.toString() : '-') +\n        (this.angle_ !== undefined ? this.angle_.toString() : '-') +\n        (this.points_ !== undefined ? this.points_.toString() : '-');\n    this.checksums_ = [checksum, strokeChecksum, fillChecksum,\n      this.radius_, this.radius2_, this.angle_, this.points_];\n  }\n\n  return this.checksums_[0];\n};\n\ngoog.provide('ol.style.Circle');\n\ngoog.require('ol');\ngoog.require('ol.style.RegularShape');\n\n\n/**\n * @classdesc\n * Set circle style for vector features.\n *\n * @constructor\n * @param {olx.style.CircleOptions=} opt_options Options.\n * @extends {ol.style.RegularShape}\n * @api\n */\nol.style.Circle = function(opt_options) {\n\n  var options = opt_options || {};\n\n  ol.style.RegularShape.call(this, {\n    points: Infinity,\n    fill: options.fill,\n    radius: options.radius,\n    snapToPixel: options.snapToPixel,\n    stroke: options.stroke,\n    atlasManager: options.atlasManager\n  });\n\n};\nol.inherits(ol.style.Circle, ol.style.RegularShape);\n\n\n/**\n * Clones the style.  If an atlasmanager was provided to the original style it will be used in the cloned style, too.\n * @return {ol.style.Circle} The cloned style.\n * @override\n * @api\n */\nol.style.Circle.prototype.clone = function() {\n  var style = new ol.style.Circle({\n    fill: this.getFill() ? this.getFill().clone() : undefined,\n    stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n    radius: this.getRadius(),\n    snapToPixel: this.getSnapToPixel(),\n    atlasManager: this.atlasManager_\n  });\n  style.setOpacity(this.getOpacity());\n  style.setScale(this.getScale());\n  return style;\n};\n\n\n/**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\nol.style.Circle.prototype.setRadius = function(radius) {\n  this.radius_ = radius;\n  this.render_(this.atlasManager_);\n};\n\ngoog.provide('ol.style.Fill');\n\ngoog.require('ol');\ngoog.require('ol.color');\n\n\n/**\n * @classdesc\n * Set fill style for vector features.\n *\n * @constructor\n * @param {olx.style.FillOptions=} opt_options Options.\n * @api\n */\nol.style.Fill = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {ol.Color|ol.ColorLike}\n   */\n  this.color_ = options.color !== undefined ? options.color : null;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Clones the style. The color is not cloned if it is an {@link ol.ColorLike}.\n * @return {ol.style.Fill} The cloned style.\n * @api\n */\nol.style.Fill.prototype.clone = function() {\n  var color = this.getColor();\n  return new ol.style.Fill({\n    color: (color && color.slice) ? color.slice() : color || undefined\n  });\n};\n\n\n/**\n * Get the fill color.\n * @return {ol.Color|ol.ColorLike} Color.\n * @api\n */\nol.style.Fill.prototype.getColor = function() {\n  return this.color_;\n};\n\n\n/**\n * Set the color.\n *\n * @param {ol.Color|ol.ColorLike} color Color.\n * @api\n */\nol.style.Fill.prototype.setColor = function(color) {\n  this.color_ = color;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * @return {string} The checksum.\n */\nol.style.Fill.prototype.getChecksum = function() {\n  if (this.checksum_ === undefined) {\n    if (\n      this.color_ instanceof CanvasPattern ||\n        this.color_ instanceof CanvasGradient\n    ) {\n      this.checksum_ = ol.getUid(this.color_).toString();\n    } else {\n      this.checksum_ = 'f' + (this.color_ ?\n        ol.color.asString(this.color_) : '-');\n    }\n  }\n\n  return this.checksum_;\n};\n\ngoog.provide('ol.style.Stroke');\n\ngoog.require('ol');\n\n\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n *\n * @constructor\n * @param {olx.style.StrokeOptions=} opt_options Options.\n * @api\n */\nol.style.Stroke = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {ol.Color|ol.ColorLike}\n   */\n  this.color_ = options.color !== undefined ? options.color : null;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.lineCap_ = options.lineCap;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lineDashOffset_ = options.lineDashOffset;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.lineJoin_ = options.lineJoin;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.miterLimit_ = options.miterLimit;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.width_ = options.width;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Clones the style.\n * @return {ol.style.Stroke} The cloned style.\n * @api\n */\nol.style.Stroke.prototype.clone = function() {\n  var color = this.getColor();\n  return new ol.style.Stroke({\n    color: (color && color.slice) ? color.slice() : color || undefined,\n    lineCap: this.getLineCap(),\n    lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n    lineDashOffset: this.getLineDashOffset(),\n    lineJoin: this.getLineJoin(),\n    miterLimit: this.getMiterLimit(),\n    width: this.getWidth()\n  });\n};\n\n\n/**\n * Get the stroke color.\n * @return {ol.Color|ol.ColorLike} Color.\n * @api\n */\nol.style.Stroke.prototype.getColor = function() {\n  return this.color_;\n};\n\n\n/**\n * Get the line cap type for the stroke.\n * @return {string|undefined} Line cap.\n * @api\n */\nol.style.Stroke.prototype.getLineCap = function() {\n  return this.lineCap_;\n};\n\n\n/**\n * Get the line dash style for the stroke.\n * @return {Array.<number>} Line dash.\n * @api\n */\nol.style.Stroke.prototype.getLineDash = function() {\n  return this.lineDash_;\n};\n\n\n/**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\nol.style.Stroke.prototype.getLineDashOffset = function() {\n  return this.lineDashOffset_;\n};\n\n\n/**\n * Get the line join type for the stroke.\n * @return {string|undefined} Line join.\n * @api\n */\nol.style.Stroke.prototype.getLineJoin = function() {\n  return this.lineJoin_;\n};\n\n\n/**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\nol.style.Stroke.prototype.getMiterLimit = function() {\n  return this.miterLimit_;\n};\n\n\n/**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\nol.style.Stroke.prototype.getWidth = function() {\n  return this.width_;\n};\n\n\n/**\n * Set the color.\n *\n * @param {ol.Color|ol.ColorLike} color Color.\n * @api\n */\nol.style.Stroke.prototype.setColor = function(color) {\n  this.color_ = color;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the line cap.\n *\n * @param {string|undefined} lineCap Line cap.\n * @api\n */\nol.style.Stroke.prototype.setLineCap = function(lineCap) {\n  this.lineCap_ = lineCap;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array.<number>} lineDash Line dash.\n * @api\n */\nol.style.Stroke.prototype.setLineDash = function(lineDash) {\n  this.lineDash_ = lineDash;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\nol.style.Stroke.prototype.setLineDashOffset = function(lineDashOffset) {\n  this.lineDashOffset_ = lineDashOffset;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the line join.\n *\n * @param {string|undefined} lineJoin Line join.\n * @api\n */\nol.style.Stroke.prototype.setLineJoin = function(lineJoin) {\n  this.lineJoin_ = lineJoin;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\nol.style.Stroke.prototype.setMiterLimit = function(miterLimit) {\n  this.miterLimit_ = miterLimit;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\nol.style.Stroke.prototype.setWidth = function(width) {\n  this.width_ = width;\n  this.checksum_ = undefined;\n};\n\n\n/**\n * @return {string} The checksum.\n */\nol.style.Stroke.prototype.getChecksum = function() {\n  if (this.checksum_ === undefined) {\n    this.checksum_ = 's';\n    if (this.color_) {\n      if (typeof this.color_ === 'string') {\n        this.checksum_ += this.color_;\n      } else {\n        this.checksum_ += ol.getUid(this.color_).toString();\n      }\n    } else {\n      this.checksum_ += '-';\n    }\n    this.checksum_ += ',' +\n        (this.lineCap_ !== undefined ?\n          this.lineCap_.toString() : '-') + ',' +\n        (this.lineDash_ ?\n          this.lineDash_.toString() : '-') + ',' +\n        (this.lineDashOffset_ !== undefined ?\n          this.lineDashOffset_ : '-') + ',' +\n        (this.lineJoin_ !== undefined ?\n          this.lineJoin_ : '-') + ',' +\n        (this.miterLimit_ !== undefined ?\n          this.miterLimit_.toString() : '-') + ',' +\n        (this.width_ !== undefined ?\n          this.width_.toString() : '-');\n  }\n\n  return this.checksum_;\n};\n\ngoog.provide('ol.style.Style');\n\ngoog.require('ol.asserts');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.style.Circle');\ngoog.require('ol.style.Fill');\ngoog.require('ol.style.Stroke');\n\n\n/**\n * @classdesc\n * Container for vector feature rendering styles. Any changes made to the style\n * or its children through `set*()` methods will not take effect until the\n * feature or layer that uses the style is re-rendered.\n *\n * @constructor\n * @struct\n * @param {olx.style.StyleOptions=} opt_options Style options.\n * @api\n */\nol.style.Style = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {string|ol.geom.Geometry|ol.StyleGeometryFunction}\n   */\n  this.geometry_ = null;\n\n  /**\n   * @private\n   * @type {!ol.StyleGeometryFunction}\n   */\n  this.geometryFunction_ = ol.style.Style.defaultGeometryFunction;\n\n  if (options.geometry !== undefined) {\n    this.setGeometry(options.geometry);\n  }\n\n  /**\n   * @private\n   * @type {ol.style.Fill}\n   */\n  this.fill_ = options.fill !== undefined ? options.fill : null;\n\n  /**\n   * @private\n   * @type {ol.style.Image}\n   */\n  this.image_ = options.image !== undefined ? options.image : null;\n\n  /**\n   * @private\n   * @type {ol.StyleRenderFunction|null}\n   */\n  this.renderer_ = options.renderer !== undefined ? options.renderer : null;\n\n  /**\n   * @private\n   * @type {ol.style.Stroke}\n   */\n  this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n  /**\n   * @private\n   * @type {ol.style.Text}\n   */\n  this.text_ = options.text !== undefined ? options.text : null;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.zIndex_ = options.zIndex;\n\n};\n\n\n/**\n * Clones the style.\n * @return {ol.style.Style} The cloned style.\n * @api\n */\nol.style.Style.prototype.clone = function() {\n  var geometry = this.getGeometry();\n  if (geometry && geometry.clone) {\n    geometry = geometry.clone();\n  }\n  return new ol.style.Style({\n    geometry: geometry,\n    fill: this.getFill() ? this.getFill().clone() : undefined,\n    image: this.getImage() ? this.getImage().clone() : undefined,\n    stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n    text: this.getText() ? this.getText().clone() : undefined,\n    zIndex: this.getZIndex()\n  });\n};\n\n\n/**\n * Get the custom renderer function that was configured with\n * {@link #setRenderer} or the `renderer` constructor option.\n * @return {ol.StyleRenderFunction|null} Custom renderer function.\n * @api\n */\nol.style.Style.prototype.getRenderer = function() {\n  return this.renderer_;\n};\n\n\n/**\n * Sets a custom renderer function for this style. When set, `fill`, `stroke`\n * and `image` options of the style will be ignored.\n * @param {ol.StyleRenderFunction|null} renderer Custom renderer function.\n * @api\n */\nol.style.Style.prototype.setRenderer = function(renderer) {\n  this.renderer_ = renderer;\n};\n\n\n/**\n * Get the geometry to be rendered.\n * @return {string|ol.geom.Geometry|ol.StyleGeometryFunction}\n * Feature property or geometry or function that returns the geometry that will\n * be rendered with this style.\n * @api\n */\nol.style.Style.prototype.getGeometry = function() {\n  return this.geometry_;\n};\n\n\n/**\n * Get the function used to generate a geometry for rendering.\n * @return {!ol.StyleGeometryFunction} Function that is called with a feature\n * and returns the geometry to render instead of the feature's geometry.\n * @api\n */\nol.style.Style.prototype.getGeometryFunction = function() {\n  return this.geometryFunction_;\n};\n\n\n/**\n * Get the fill style.\n * @return {ol.style.Fill} Fill style.\n * @api\n */\nol.style.Style.prototype.getFill = function() {\n  return this.fill_;\n};\n\n\n/**\n * Set the fill style.\n * @param {ol.style.Fill} fill Fill style.\n * @api\n */\nol.style.Style.prototype.setFill = function(fill) {\n  this.fill_ = fill;\n};\n\n\n/**\n * Get the image style.\n * @return {ol.style.Image} Image style.\n * @api\n */\nol.style.Style.prototype.getImage = function() {\n  return this.image_;\n};\n\n\n/**\n * Set the image style.\n * @param {ol.style.Image} image Image style.\n * @api\n */\nol.style.Style.prototype.setImage = function(image) {\n  this.image_ = image;\n};\n\n\n/**\n * Get the stroke style.\n * @return {ol.style.Stroke} Stroke style.\n * @api\n */\nol.style.Style.prototype.getStroke = function() {\n  return this.stroke_;\n};\n\n\n/**\n * Set the stroke style.\n * @param {ol.style.Stroke} stroke Stroke style.\n * @api\n */\nol.style.Style.prototype.setStroke = function(stroke) {\n  this.stroke_ = stroke;\n};\n\n\n/**\n * Get the text style.\n * @return {ol.style.Text} Text style.\n * @api\n */\nol.style.Style.prototype.getText = function() {\n  return this.text_;\n};\n\n\n/**\n * Set the text style.\n * @param {ol.style.Text} text Text style.\n * @api\n */\nol.style.Style.prototype.setText = function(text) {\n  this.text_ = text;\n};\n\n\n/**\n * Get the z-index for the style.\n * @return {number|undefined} ZIndex.\n * @api\n */\nol.style.Style.prototype.getZIndex = function() {\n  return this.zIndex_;\n};\n\n\n/**\n * Set a geometry that is rendered instead of the feature's geometry.\n *\n * @param {string|ol.geom.Geometry|ol.StyleGeometryFunction} geometry\n *     Feature property or geometry or function returning a geometry to render\n *     for this style.\n * @api\n */\nol.style.Style.prototype.setGeometry = function(geometry) {\n  if (typeof geometry === 'function') {\n    this.geometryFunction_ = geometry;\n  } else if (typeof geometry === 'string') {\n    this.geometryFunction_ = function(feature) {\n      return /** @type {ol.geom.Geometry} */ (feature.get(geometry));\n    };\n  } else if (!geometry) {\n    this.geometryFunction_ = ol.style.Style.defaultGeometryFunction;\n  } else if (geometry !== undefined) {\n    this.geometryFunction_ = function() {\n      return /** @type {ol.geom.Geometry} */ (geometry);\n    };\n  }\n  this.geometry_ = geometry;\n};\n\n\n/**\n * Set the z-index.\n *\n * @param {number|undefined} zIndex ZIndex.\n * @api\n */\nol.style.Style.prototype.setZIndex = function(zIndex) {\n  this.zIndex_ = zIndex;\n};\n\n\n/**\n * Convert the provided object into a style function.  Functions passed through\n * unchanged.  Arrays of ol.style.Style or single style objects wrapped in a\n * new style function.\n * @param {ol.StyleFunction|Array.<ol.style.Style>|ol.style.Style} obj\n *     A style function, a single style, or an array of styles.\n * @return {ol.StyleFunction} A style function.\n */\nol.style.Style.createFunction = function(obj) {\n  var styleFunction;\n\n  if (typeof obj === 'function') {\n    styleFunction = obj;\n  } else {\n    /**\n     * @type {Array.<ol.style.Style>}\n     */\n    var styles;\n    if (Array.isArray(obj)) {\n      styles = obj;\n    } else {\n      ol.asserts.assert(obj instanceof ol.style.Style,\n          41); // Expected an `ol.style.Style` or an array of `ol.style.Style`\n      styles = [obj];\n    }\n    styleFunction = function() {\n      return styles;\n    };\n  }\n  return styleFunction;\n};\n\n\n/**\n * @type {Array.<ol.style.Style>}\n * @private\n */\nol.style.Style.default_ = null;\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {number} resolution Resolution.\n * @return {Array.<ol.style.Style>} Style.\n */\nol.style.Style.defaultFunction = function(feature, resolution) {\n  // We don't use an immediately-invoked function\n  // and a closure so we don't get an error at script evaluation time in\n  // browsers that do not support Canvas. (ol.style.Circle does\n  // canvas.getContext('2d') at construction time, which will cause an.error\n  // in such browsers.)\n  if (!ol.style.Style.default_) {\n    var fill = new ol.style.Fill({\n      color: 'rgba(255,255,255,0.4)'\n    });\n    var stroke = new ol.style.Stroke({\n      color: '#3399CC',\n      width: 1.25\n    });\n    ol.style.Style.default_ = [\n      new ol.style.Style({\n        image: new ol.style.Circle({\n          fill: fill,\n          stroke: stroke,\n          radius: 5\n        }),\n        fill: fill,\n        stroke: stroke\n      })\n    ];\n  }\n  return ol.style.Style.default_;\n};\n\n\n/**\n * Default styles for editing features.\n * @return {Object.<ol.geom.GeometryType, Array.<ol.style.Style>>} Styles\n */\nol.style.Style.createDefaultEditing = function() {\n  /** @type {Object.<ol.geom.GeometryType, Array.<ol.style.Style>>} */\n  var styles = {};\n  var white = [255, 255, 255, 1];\n  var blue = [0, 153, 255, 1];\n  var width = 3;\n  styles[ol.geom.GeometryType.POLYGON] = [\n    new ol.style.Style({\n      fill: new ol.style.Fill({\n        color: [255, 255, 255, 0.5]\n      })\n    })\n  ];\n  styles[ol.geom.GeometryType.MULTI_POLYGON] =\n      styles[ol.geom.GeometryType.POLYGON];\n\n  styles[ol.geom.GeometryType.LINE_STRING] = [\n    new ol.style.Style({\n      stroke: new ol.style.Stroke({\n        color: white,\n        width: width + 2\n      })\n    }),\n    new ol.style.Style({\n      stroke: new ol.style.Stroke({\n        color: blue,\n        width: width\n      })\n    })\n  ];\n  styles[ol.geom.GeometryType.MULTI_LINE_STRING] =\n      styles[ol.geom.GeometryType.LINE_STRING];\n\n  styles[ol.geom.GeometryType.CIRCLE] =\n      styles[ol.geom.GeometryType.POLYGON].concat(\n          styles[ol.geom.GeometryType.LINE_STRING]\n      );\n\n\n  styles[ol.geom.GeometryType.POINT] = [\n    new ol.style.Style({\n      image: new ol.style.Circle({\n        radius: width * 2,\n        fill: new ol.style.Fill({\n          color: blue\n        }),\n        stroke: new ol.style.Stroke({\n          color: white,\n          width: width / 2\n        })\n      }),\n      zIndex: Infinity\n    })\n  ];\n  styles[ol.geom.GeometryType.MULTI_POINT] =\n      styles[ol.geom.GeometryType.POINT];\n\n  styles[ol.geom.GeometryType.GEOMETRY_COLLECTION] =\n      styles[ol.geom.GeometryType.POLYGON].concat(\n          styles[ol.geom.GeometryType.LINE_STRING],\n          styles[ol.geom.GeometryType.POINT]\n      );\n\n  return styles;\n};\n\n\n/**\n * Function that is called with a feature and returns its default geometry.\n * @param {ol.Feature|ol.render.Feature} feature Feature to get the geometry\n *     for.\n * @return {ol.geom.Geometry|ol.render.Feature|undefined} Geometry to render.\n */\nol.style.Style.defaultGeometryFunction = function(feature) {\n  return feature.getGeometry();\n};\n\ngoog.provide('ol.Feature');\n\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link ol.Object} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature.  For example:\n *\n * ```js\n * var feature = new ol.Feature({\n *   geometry: new ol.geom.Polygon(polyCoords),\n *   labelPoint: new ol.geom.Point(labelCoords),\n *   name: 'My Polygon'\n * });\n *\n * // get the polygon geometry\n * var poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * var point = feature.getGeometry();\n * ```\n *\n * @constructor\n * @extends {ol.Object}\n * @param {ol.geom.Geometry|Object.<string, *>=} opt_geometryOrProperties\n *     You may pass a Geometry object directly, or an object literal\n *     containing properties.  If you pass an object literal, you may\n *     include a Geometry associated with a `geometry` key.\n * @api\n */\nol.Feature = function(opt_geometryOrProperties) {\n\n  ol.Object.call(this);\n\n  /**\n   * @private\n   * @type {number|string|undefined}\n   */\n  this.id_ = undefined;\n\n  /**\n   * @type {string}\n   * @private\n   */\n  this.geometryName_ = 'geometry';\n\n  /**\n   * User provided style.\n   * @private\n   * @type {ol.style.Style|Array.<ol.style.Style>|\n   *     ol.FeatureStyleFunction}\n   */\n  this.style_ = null;\n\n  /**\n   * @private\n   * @type {ol.FeatureStyleFunction|undefined}\n   */\n  this.styleFunction_ = undefined;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.geometryChangeKey_ = null;\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(this.geometryName_),\n      this.handleGeometryChanged_, this);\n\n  if (opt_geometryOrProperties !== undefined) {\n    if (opt_geometryOrProperties instanceof ol.geom.Geometry ||\n        !opt_geometryOrProperties) {\n      var geometry = opt_geometryOrProperties;\n      this.setGeometry(geometry);\n    } else {\n      /** @type {Object.<string, *>} */\n      var properties = opt_geometryOrProperties;\n      this.setProperties(properties);\n    }\n  }\n};\nol.inherits(ol.Feature, ol.Object);\n\n\n/**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {ol.Feature} The clone.\n * @api\n */\nol.Feature.prototype.clone = function() {\n  var clone = new ol.Feature(this.getProperties());\n  clone.setGeometryName(this.getGeometryName());\n  var geometry = this.getGeometry();\n  if (geometry) {\n    clone.setGeometry(geometry.clone());\n  }\n  var style = this.getStyle();\n  if (style) {\n    clone.setStyle(style);\n  }\n  return clone;\n};\n\n\n/**\n * Get the feature's default geometry.  A feature may have any number of named\n * geometries.  The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link ol.Feature#setGeometry}.\n * @return {ol.geom.Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\nol.Feature.prototype.getGeometry = function() {\n  return /** @type {ol.geom.Geometry|undefined} */ (\n    this.get(this.geometryName_));\n};\n\n\n/**\n * Get the feature identifier.  This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link ol.Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\nol.Feature.prototype.getId = function() {\n  return this.id_;\n};\n\n\n/**\n * Get the name of the feature's default geometry.  By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n *     for this feature.\n * @api\n */\nol.Feature.prototype.getGeometryName = function() {\n  return this.geometryName_;\n};\n\n\n/**\n * Get the feature's style. Will return what was provided to the\n * {@link ol.Feature#setStyle} method.\n * @return {ol.style.Style|Array.<ol.style.Style>|\n *     ol.FeatureStyleFunction|ol.StyleFunction} The feature style.\n * @api\n */\nol.Feature.prototype.getStyle = function() {\n  return this.style_;\n};\n\n\n/**\n * Get the feature's style function.\n * @return {ol.FeatureStyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\nol.Feature.prototype.getStyleFunction = function() {\n  return this.styleFunction_;\n};\n\n\n/**\n * @private\n */\nol.Feature.prototype.handleGeometryChange_ = function() {\n  this.changed();\n};\n\n\n/**\n * @private\n */\nol.Feature.prototype.handleGeometryChanged_ = function() {\n  if (this.geometryChangeKey_) {\n    ol.events.unlistenByKey(this.geometryChangeKey_);\n    this.geometryChangeKey_ = null;\n  }\n  var geometry = this.getGeometry();\n  if (geometry) {\n    this.geometryChangeKey_ = ol.events.listen(geometry,\n        ol.events.EventType.CHANGE, this.handleGeometryChange_, this);\n  }\n  this.changed();\n};\n\n\n/**\n * Set the default geometry for the feature.  This will update the property\n * with the name returned by {@link ol.Feature#getGeometryName}.\n * @param {ol.geom.Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\nol.Feature.prototype.setGeometry = function(geometry) {\n  this.set(this.geometryName_, geometry);\n};\n\n\n/**\n * Set the style for the feature.  This can be a single style object, an array\n * of styles, or a function that takes a resolution and returns an array of\n * styles. If it is `null` the feature has no style (a `null` style).\n * @param {ol.style.Style|Array.<ol.style.Style>|\n *     ol.FeatureStyleFunction|ol.StyleFunction} style Style for this feature.\n * @api\n * @fires ol.events.Event#event:change\n */\nol.Feature.prototype.setStyle = function(style) {\n  this.style_ = style;\n  this.styleFunction_ = !style ?\n    undefined : ol.Feature.createStyleFunction(style);\n  this.changed();\n};\n\n\n/**\n * Set the feature id.  The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the {@link ol.source.Vector#getFeatureById}\n * method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires ol.events.Event#event:change\n */\nol.Feature.prototype.setId = function(id) {\n  this.id_ = id;\n  this.changed();\n};\n\n\n/**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link ol.Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\nol.Feature.prototype.setGeometryName = function(name) {\n  ol.events.unlisten(\n      this, ol.Object.getChangeEventType(this.geometryName_),\n      this.handleGeometryChanged_, this);\n  this.geometryName_ = name;\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(this.geometryName_),\n      this.handleGeometryChanged_, this);\n  this.handleGeometryChanged_();\n};\n\n\n/**\n * Convert the provided object into a feature style function.  Functions passed\n * through unchanged.  Arrays of ol.style.Style or single style objects wrapped\n * in a new feature style function.\n * @param {ol.FeatureStyleFunction|!Array.<ol.style.Style>|!ol.style.Style} obj\n *     A feature style function, a single style, or an array of styles.\n * @return {ol.FeatureStyleFunction} A style function.\n */\nol.Feature.createStyleFunction = function(obj) {\n  var styleFunction;\n\n  if (typeof obj === 'function') {\n    if (obj.length == 2) {\n      styleFunction = function(resolution) {\n        return /** @type {ol.StyleFunction} */ (obj)(this, resolution);\n      };\n    } else {\n      styleFunction = obj;\n    }\n  } else {\n    /**\n     * @type {Array.<ol.style.Style>}\n     */\n    var styles;\n    if (Array.isArray(obj)) {\n      styles = obj;\n    } else {\n      ol.asserts.assert(obj instanceof ol.style.Style,\n          41); // Expected an `ol.style.Style` or an array of `ol.style.Style`\n      styles = [obj];\n    }\n    styleFunction = function() {\n      return styles;\n    };\n  }\n  return styleFunction;\n};\n\ngoog.provide('ol.format.FormatType');\n\n\n/**\n * @enum {string}\n */\nol.format.FormatType = {\n  ARRAY_BUFFER: 'arraybuffer',\n  JSON: 'json',\n  TEXT: 'text',\n  XML: 'xml'\n};\n\ngoog.provide('ol.xml');\n\ngoog.require('ol.array');\n\n\n/**\n * This document should be used when creating nodes for XML serializations. This\n * document is also used by {@link ol.xml.createElementNS} and\n * {@link ol.xml.setAttributeNS}\n * @const\n * @type {Document}\n */\nol.xml.DOCUMENT = document.implementation.createDocument('', '', null);\n\n\n/**\n * @param {string} namespaceURI Namespace URI.\n * @param {string} qualifiedName Qualified name.\n * @return {Node} Node.\n */\nol.xml.createElementNS = function(namespaceURI, qualifiedName) {\n  return ol.xml.DOCUMENT.createElementNS(namespaceURI, qualifiedName);\n};\n\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @return {string} All text content.\n * @api\n */\nol.xml.getAllTextContent = function(node, normalizeWhitespace) {\n  return ol.xml.getAllTextContent_(node, normalizeWhitespace, []).join('');\n};\n\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @param {Array.<string>} accumulator Accumulator.\n * @private\n * @return {Array.<string>} Accumulator.\n */\nol.xml.getAllTextContent_ = function(node, normalizeWhitespace, accumulator) {\n  if (node.nodeType == Node.CDATA_SECTION_NODE ||\n      node.nodeType == Node.TEXT_NODE) {\n    if (normalizeWhitespace) {\n      accumulator.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n    } else {\n      accumulator.push(node.nodeValue);\n    }\n  } else {\n    var n;\n    for (n = node.firstChild; n; n = n.nextSibling) {\n      ol.xml.getAllTextContent_(n, normalizeWhitespace, accumulator);\n    }\n  }\n  return accumulator;\n};\n\n\n/**\n * @param {?} value Value.\n * @return {boolean} Is document.\n */\nol.xml.isDocument = function(value) {\n  return value instanceof Document;\n};\n\n\n/**\n * @param {?} value Value.\n * @return {boolean} Is node.\n */\nol.xml.isNode = function(value) {\n  return value instanceof Node;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @return {string} Value\n */\nol.xml.getAttributeNS = function(node, namespaceURI, name) {\n  return node.getAttributeNS(namespaceURI, name) || '';\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @param {string|number} value Value.\n */\nol.xml.setAttributeNS = function(node, namespaceURI, name, value) {\n  node.setAttributeNS(namespaceURI, name, value);\n};\n\n\n/**\n * Parse an XML string to an XML Document.\n * @param {string} xml XML.\n * @return {Document} Document.\n * @api\n */\nol.xml.parse = function(xml) {\n  return new DOMParser().parseFromString(xml, 'application/xml');\n};\n\n\n/**\n * Make an array extender function for extending the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array.<*>): (Array.<*>|undefined)}\n *     valueReader Value reader.\n * @param {T=} opt_this The object to use as `this` in `valueReader`.\n * @return {ol.XmlParser} Parser.\n * @template T\n */\nol.xml.makeArrayExtender = function(valueReader, opt_this) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array.<*>} objectStack Object stack.\n     */\n    function(node, objectStack) {\n      var value = valueReader.call(opt_this, node, objectStack);\n      if (value !== undefined) {\n        var array = /** @type {Array.<*>} */\n              (objectStack[objectStack.length - 1]);\n        ol.array.extend(array, value);\n      }\n    });\n};\n\n\n/**\n * Make an array pusher function for pushing to the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.\n * @param {T=} opt_this The object to use as `this` in `valueReader`.\n * @return {ol.XmlParser} Parser.\n * @template T\n */\nol.xml.makeArrayPusher = function(valueReader, opt_this) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array.<*>} objectStack Object stack.\n     */\n    function(node, objectStack) {\n      var value = valueReader.call(opt_this !== undefined ? opt_this : this,\n          node, objectStack);\n      if (value !== undefined) {\n        var array = objectStack[objectStack.length - 1];\n        array.push(value);\n      }\n    });\n};\n\n\n/**\n * Make an object stack replacer function for replacing the object at the\n * top of the stack.\n * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.\n * @param {T=} opt_this The object to use as `this` in `valueReader`.\n * @return {ol.XmlParser} Parser.\n * @template T\n */\nol.xml.makeReplacer = function(valueReader, opt_this) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array.<*>} objectStack Object stack.\n     */\n    function(node, objectStack) {\n      var value = valueReader.call(opt_this !== undefined ? opt_this : this,\n          node, objectStack);\n      if (value !== undefined) {\n        objectStack[objectStack.length - 1] = value;\n      }\n    });\n};\n\n\n/**\n * Make an object property pusher function for adding a property to the\n * object at the top of the stack.\n * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.\n * @param {string=} opt_property Property.\n * @param {T=} opt_this The object to use as `this` in `valueReader`.\n * @return {ol.XmlParser} Parser.\n * @template T\n */\nol.xml.makeObjectPropertyPusher = function(valueReader, opt_property, opt_this) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array.<*>} objectStack Object stack.\n     */\n    function(node, objectStack) {\n      var value = valueReader.call(opt_this !== undefined ? opt_this : this,\n          node, objectStack);\n      if (value !== undefined) {\n        var object = /** @type {Object} */\n              (objectStack[objectStack.length - 1]);\n        var property = opt_property !== undefined ?\n          opt_property : node.localName;\n        var array;\n        if (property in object) {\n          array = object[property];\n        } else {\n          array = object[property] = [];\n        }\n        array.push(value);\n      }\n    });\n};\n\n\n/**\n * Make an object property setter function.\n * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.\n * @param {string=} opt_property Property.\n * @param {T=} opt_this The object to use as `this` in `valueReader`.\n * @return {ol.XmlParser} Parser.\n * @template T\n */\nol.xml.makeObjectPropertySetter = function(valueReader, opt_property, opt_this) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array.<*>} objectStack Object stack.\n     */\n    function(node, objectStack) {\n      var value = valueReader.call(opt_this !== undefined ? opt_this : this,\n          node, objectStack);\n      if (value !== undefined) {\n        var object = /** @type {Object} */\n              (objectStack[objectStack.length - 1]);\n        var property = opt_property !== undefined ?\n          opt_property : node.localName;\n        object[property] = value;\n      }\n    });\n};\n\n\n/**\n * Create a serializer that appends nodes written by its `nodeWriter` to its\n * designated parent. The parent is the `node` of the\n * {@link ol.XmlNodeStackItem} at the top of the `objectStack`.\n * @param {function(this: T, Node, V, Array.<*>)}\n *     nodeWriter Node writer.\n * @param {T=} opt_this The object to use as `this` in `nodeWriter`.\n * @return {ol.XmlSerializer} Serializer.\n * @template T, V\n */\nol.xml.makeChildAppender = function(nodeWriter, opt_this) {\n  return function(node, value, objectStack) {\n    nodeWriter.call(opt_this !== undefined ? opt_this : this,\n        node, value, objectStack);\n    var parent = objectStack[objectStack.length - 1];\n    var parentNode = parent.node;\n    parentNode.appendChild(node);\n  };\n};\n\n\n/**\n * Create a serializer that calls the provided `nodeWriter` from\n * {@link ol.xml.serialize}. This can be used by the parent writer to have the\n * 'nodeWriter' called with an array of values when the `nodeWriter` was\n * designed to serialize a single item. An example would be a LineString\n * geometry writer, which could be reused for writing MultiLineString\n * geometries.\n * @param {function(this: T, Node, V, Array.<*>)}\n *     nodeWriter Node writer.\n * @param {T=} opt_this The object to use as `this` in `nodeWriter`.\n * @return {ol.XmlSerializer} Serializer.\n * @template T, V\n */\nol.xml.makeArraySerializer = function(nodeWriter, opt_this) {\n  var serializersNS, nodeFactory;\n  return function(node, value, objectStack) {\n    if (serializersNS === undefined) {\n      serializersNS = {};\n      var serializers = {};\n      serializers[node.localName] = nodeWriter;\n      serializersNS[node.namespaceURI] = serializers;\n      nodeFactory = ol.xml.makeSimpleNodeFactory(node.localName);\n    }\n    ol.xml.serialize(serializersNS, nodeFactory, value, objectStack);\n  };\n};\n\n\n/**\n * Create a node factory which can use the `opt_keys` passed to\n * {@link ol.xml.serialize} or {@link ol.xml.pushSerializeAndPop} as node names,\n * or a fixed node name. The namespace of the created nodes can either be fixed,\n * or the parent namespace will be used.\n * @param {string=} opt_nodeName Fixed node name which will be used for all\n *     created nodes. If not provided, the 3rd argument to the resulting node\n *     factory needs to be provided and will be the nodeName.\n * @param {string=} opt_namespaceURI Fixed namespace URI which will be used for\n *     all created nodes. If not provided, the namespace of the parent node will\n *     be used.\n * @return {function(*, Array.<*>, string=): (Node|undefined)} Node factory.\n */\nol.xml.makeSimpleNodeFactory = function(opt_nodeName, opt_namespaceURI) {\n  var fixedNodeName = opt_nodeName;\n  return (\n    /**\n     * @param {*} value Value.\n     * @param {Array.<*>} objectStack Object stack.\n     * @param {string=} opt_nodeName Node name.\n     * @return {Node} Node.\n     */\n    function(value, objectStack, opt_nodeName) {\n      var context = objectStack[objectStack.length - 1];\n      var node = context.node;\n      var nodeName = fixedNodeName;\n      if (nodeName === undefined) {\n        nodeName = opt_nodeName;\n      }\n      var namespaceURI = opt_namespaceURI;\n      if (opt_namespaceURI === undefined) {\n        namespaceURI = node.namespaceURI;\n      }\n      return ol.xml.createElementNS(namespaceURI, /** @type {string} */ (nodeName));\n    }\n  );\n};\n\n\n/**\n * A node factory that creates a node using the parent's `namespaceURI` and the\n * `nodeName` passed by {@link ol.xml.serialize} or\n * {@link ol.xml.pushSerializeAndPop} to the node factory.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n */\nol.xml.OBJECT_PROPERTY_NODE_FACTORY = ol.xml.makeSimpleNodeFactory();\n\n\n/**\n * Create an array of `values` to be used with {@link ol.xml.serialize} or\n * {@link ol.xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as\n * `opt_key` argument.\n * @param {Object.<string, V>} object Key-value pairs for the sequence. Keys can\n *     be a subset of the `orderedKeys`.\n * @param {Array.<string>} orderedKeys Keys in the order of the sequence.\n * @return {Array.<V>} Values in the order of the sequence. The resulting array\n *     has the same length as the `orderedKeys` array. Values that are not\n *     present in `object` will be `undefined` in the resulting array.\n * @template V\n */\nol.xml.makeSequence = function(object, orderedKeys) {\n  var length = orderedKeys.length;\n  var sequence = new Array(length);\n  for (var i = 0; i < length; ++i) {\n    sequence[i] = object[orderedKeys[i]];\n  }\n  return sequence;\n};\n\n\n/**\n * Create a namespaced structure, using the same values for each namespace.\n * This can be used as a starting point for versioned parsers, when only a few\n * values are version specific.\n * @param {Array.<string>} namespaceURIs Namespace URIs.\n * @param {T} structure Structure.\n * @param {Object.<string, T>=} opt_structureNS Namespaced structure to add to.\n * @return {Object.<string, T>} Namespaced structure.\n * @template T\n */\nol.xml.makeStructureNS = function(namespaceURIs, structure, opt_structureNS) {\n  /**\n   * @type {Object.<string, *>}\n   */\n  var structureNS = opt_structureNS !== undefined ? opt_structureNS : {};\n  var i, ii;\n  for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {\n    structureNS[namespaceURIs[i]] = structure;\n  }\n  return structureNS;\n};\n\n\n/**\n * Parse a node using the parsers and object stack.\n * @param {Object.<string, Object.<string, ol.XmlParser>>} parsersNS\n *     Parsers by namespace.\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @param {*=} opt_this The object to use as `this`.\n */\nol.xml.parseNode = function(parsersNS, node, objectStack, opt_this) {\n  var n;\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    var parsers = parsersNS[n.namespaceURI];\n    if (parsers !== undefined) {\n      var parser = parsers[n.localName];\n      if (parser !== undefined) {\n        parser.call(opt_this, n, objectStack);\n      }\n    }\n  }\n};\n\n\n/**\n * Push an object on top of the stack, parse and return the popped object.\n * @param {T} object Object.\n * @param {Object.<string, Object.<string, ol.XmlParser>>} parsersNS\n *     Parsers by namespace.\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @param {*=} opt_this The object to use as `this`.\n * @return {T} Object.\n * @template T\n */\nol.xml.pushParseAndPop = function(\n    object, parsersNS, node, objectStack, opt_this) {\n  objectStack.push(object);\n  ol.xml.parseNode(parsersNS, node, objectStack, opt_this);\n  return objectStack.pop();\n};\n\n\n/**\n * Walk through an array of `values` and call a serializer for each value.\n * @param {Object.<string, Object.<string, ol.XmlSerializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array.<*>} values Values to serialize. An example would be an array\n *     of {@link ol.Feature} instances.\n * @param {Array.<*>} objectStack Node stack.\n * @param {Array.<string>=} opt_keys Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `opt_keys` has\n *     to match the length of `values`. For serializing a sequence, `opt_keys`\n *     determines the order of the sequence.\n * @param {T=} opt_this The object to use as `this` for the node factory and\n *     serializers.\n * @template T\n */\nol.xml.serialize = function(\n    serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {\n  var length = (opt_keys !== undefined ? opt_keys : values).length;\n  var value, node;\n  for (var i = 0; i < length; ++i) {\n    value = values[i];\n    if (value !== undefined) {\n      node = nodeFactory.call(opt_this, value, objectStack,\n          opt_keys !== undefined ? opt_keys[i] : undefined);\n      if (node !== undefined) {\n        serializersNS[node.namespaceURI][node.localName]\n            .call(opt_this, node, value, objectStack);\n      }\n    }\n  }\n};\n\n\n/**\n * @param {O} object Object.\n * @param {Object.<string, Object.<string, ol.XmlSerializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array.<*>} values Values to serialize. An example would be an array\n *     of {@link ol.Feature} instances.\n * @param {Array.<*>} objectStack Node stack.\n * @param {Array.<string>=} opt_keys Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `opt_keys` has\n *     to match the length of `values`. For serializing a sequence, `opt_keys`\n *     determines the order of the sequence.\n * @param {T=} opt_this The object to use as `this` for the node factory and\n *     serializers.\n * @return {O|undefined} Object.\n * @template O, T\n */\nol.xml.pushSerializeAndPop = function(object,\n    serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {\n  objectStack.push(object);\n  ol.xml.serialize(\n      serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this);\n  return objectStack.pop();\n};\n\ngoog.provide('ol.featureloader');\n\ngoog.require('ol');\ngoog.require('ol.format.FormatType');\ngoog.require('ol.xml');\n\n\n/**\n * @param {string|ol.FeatureUrlFunction} url Feature URL service.\n * @param {ol.format.Feature} format Feature format.\n * @param {function(this:ol.VectorTile, Array.<ol.Feature>, ol.proj.Projection, ol.Extent)|function(this:ol.source.Vector, Array.<ol.Feature>)} success\n *     Function called with the loaded features and optionally with the data\n *     projection. Called with the vector tile or source as `this`.\n * @param {function(this:ol.VectorTile)|function(this:ol.source.Vector)} failure\n *     Function called when loading failed. Called with the vector tile or\n *     source as `this`.\n * @return {ol.FeatureLoader} The feature loader.\n */\nol.featureloader.loadFeaturesXhr = function(url, format, success, failure) {\n  return (\n    /**\n     * @param {ol.Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {ol.proj.Projection} projection Projection.\n     * @this {ol.source.Vector|ol.VectorTile}\n     */\n    function(extent, resolution, projection) {\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET',\n          typeof url === 'function' ? url(extent, resolution, projection) : url,\n          true);\n      if (format.getType() == ol.format.FormatType.ARRAY_BUFFER) {\n        xhr.responseType = 'arraybuffer';\n      }\n      /**\n       * @param {Event} event Event.\n       * @private\n       */\n      xhr.onload = function(event) {\n        // status will be 0 for file:// urls\n        if (!xhr.status || xhr.status >= 200 && xhr.status < 300) {\n          var type = format.getType();\n          /** @type {Document|Node|Object|string|undefined} */\n          var source;\n          if (type == ol.format.FormatType.JSON ||\n                type == ol.format.FormatType.TEXT) {\n            source = xhr.responseText;\n          } else if (type == ol.format.FormatType.XML) {\n            source = xhr.responseXML;\n            if (!source) {\n              source = ol.xml.parse(xhr.responseText);\n            }\n          } else if (type == ol.format.FormatType.ARRAY_BUFFER) {\n            source = /** @type {ArrayBuffer} */ (xhr.response);\n          }\n          if (source) {\n            success.call(this, format.readFeatures(source,\n                {featureProjection: projection}),\n            format.readProjection(source), format.getLastExtent());\n          } else {\n            failure.call(this);\n          }\n        } else {\n          failure.call(this);\n        }\n      }.bind(this);\n      /**\n       * @private\n       */\n      xhr.onerror = function() {\n        failure.call(this);\n      }.bind(this);\n      xhr.send();\n    });\n};\n\n\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|ol.FeatureUrlFunction} url Feature URL service.\n * @param {ol.format.Feature} format Feature format.\n * @return {ol.FeatureLoader} The feature loader.\n * @api\n */\nol.featureloader.xhr = function(url, format) {\n  return ol.featureloader.loadFeaturesXhr(url, format,\n      /**\n       * @param {Array.<ol.Feature>} features The loaded features.\n       * @param {ol.proj.Projection} dataProjection Data projection.\n       * @this {ol.source.Vector}\n       */\n      function(features, dataProjection) {\n        this.addFeatures(features);\n      }, /* FIXME handle error */ ol.nullFunction);\n};\n\ngoog.provide('ol.format.Feature');\n\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for feature formats.\n * {ol.format.Feature} subclasses provide the ability to decode and encode\n * {@link ol.Feature} objects from a variety of commonly used geospatial\n * file formats.  See the documentation for each format for more details.\n *\n * @constructor\n * @abstract\n * @api\n */\nol.format.Feature = function() {\n\n  /**\n   * @protected\n   * @type {ol.proj.Projection}\n   */\n  this.defaultDataProjection = null;\n\n  /**\n   * @protected\n   * @type {ol.proj.Projection}\n   */\n  this.defaultFeatureProjection = null;\n\n};\n\n\n/**\n * Adds the data projection to the read options.\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @return {olx.format.ReadOptions|undefined} Options.\n * @protected\n */\nol.format.Feature.prototype.getReadOptions = function(source, opt_options) {\n  var options;\n  if (opt_options) {\n    options = {\n      dataProjection: opt_options.dataProjection ?\n        opt_options.dataProjection : this.readProjection(source),\n      featureProjection: opt_options.featureProjection\n    };\n  }\n  return this.adaptOptions(options);\n};\n\n\n/**\n * Sets the `defaultDataProjection` on the options, if no `dataProjection`\n * is set.\n * @param {olx.format.WriteOptions|olx.format.ReadOptions|undefined} options\n *     Options.\n * @protected\n * @return {olx.format.WriteOptions|olx.format.ReadOptions|undefined}\n *     Updated options.\n */\nol.format.Feature.prototype.adaptOptions = function(options) {\n  return ol.obj.assign({\n    dataProjection: this.defaultDataProjection,\n    featureProjection: this.defaultFeatureProjection\n  }, options);\n};\n\n\n/**\n * Get the extent from the source of the last {@link readFeatures} call.\n * @return {ol.Extent} Tile extent.\n */\nol.format.Feature.prototype.getLastExtent = function() {\n  return null;\n};\n\n\n/**\n * @abstract\n * @return {ol.format.FormatType} Format.\n */\nol.format.Feature.prototype.getType = function() {};\n\n\n/**\n * Read a single feature from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n */\nol.format.Feature.prototype.readFeature = function(source, opt_options) {};\n\n\n/**\n * Read all features from a source.\n *\n * @abstract\n * @param {Document|Node|ArrayBuffer|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n */\nol.format.Feature.prototype.readFeatures = function(source, opt_options) {};\n\n\n/**\n * Read a single geometry from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.Feature.prototype.readGeometry = function(source, opt_options) {};\n\n\n/**\n * Read the projection from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n */\nol.format.Feature.prototype.readProjection = function(source) {};\n\n\n/**\n * Encode a feature in this format.\n *\n * @abstract\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\nol.format.Feature.prototype.writeFeature = function(feature, opt_options) {};\n\n\n/**\n * Encode an array of features in this format.\n *\n * @abstract\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\nol.format.Feature.prototype.writeFeatures = function(features, opt_options) {};\n\n\n/**\n * Write a single geometry in this format.\n *\n * @abstract\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\nol.format.Feature.prototype.writeGeometry = function(geometry, opt_options) {};\n\n\n/**\n * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.\n * @param {boolean} write Set to true for writing, false for reading.\n * @param {(olx.format.WriteOptions|olx.format.ReadOptions)=} opt_options\n *     Options.\n * @return {ol.geom.Geometry|ol.Extent} Transformed geometry.\n * @protected\n */\nol.format.Feature.transformWithOptions = function(\n    geometry, write, opt_options) {\n  var featureProjection = opt_options ?\n    ol.proj.get(opt_options.featureProjection) : null;\n  var dataProjection = opt_options ?\n    ol.proj.get(opt_options.dataProjection) : null;\n  /**\n   * @type {ol.geom.Geometry|ol.Extent}\n   */\n  var transformed;\n  if (featureProjection && dataProjection &&\n      !ol.proj.equivalent(featureProjection, dataProjection)) {\n    if (geometry instanceof ol.geom.Geometry) {\n      transformed = (write ? geometry.clone() : geometry).transform(\n          write ? featureProjection : dataProjection,\n          write ? dataProjection : featureProjection);\n    } else {\n      // FIXME this is necessary because ol.format.GML treats extents\n      // as geometries\n      transformed = ol.proj.transformExtent(\n          geometry,\n          dataProjection,\n          featureProjection);\n    }\n  } else {\n    transformed = geometry;\n  }\n  if (write && opt_options && opt_options.decimals !== undefined) {\n    var power = Math.pow(10, opt_options.decimals);\n    // if decimals option on write, round each coordinate appropriately\n    /**\n     * @param {Array.<number>} coordinates Coordinates.\n     * @return {Array.<number>} Transformed coordinates.\n     */\n    var transform = function(coordinates) {\n      for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        coordinates[i] = Math.round(coordinates[i] * power) / power;\n      }\n      return coordinates;\n    };\n    if (transformed === geometry) {\n      transformed = transformed.clone();\n    }\n    transformed.applyTransform(transform);\n  }\n  return transformed;\n};\n\ngoog.provide('ol.format.JSONFeature');\n\ngoog.require('ol');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.FormatType');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for JSON feature formats.\n *\n * @constructor\n * @abstract\n * @extends {ol.format.Feature}\n */\nol.format.JSONFeature = function() {\n  ol.format.Feature.call(this);\n};\nol.inherits(ol.format.JSONFeature, ol.format.Feature);\n\n\n/**\n * @param {Document|Node|Object|string} source Source.\n * @private\n * @return {Object} Object.\n */\nol.format.JSONFeature.prototype.getObject_ = function(source) {\n  if (typeof source === 'string') {\n    var object = JSON.parse(source);\n    return object ? /** @type {Object} */ (object) : null;\n  } else if (source !== null) {\n    return source;\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.getType = function() {\n  return ol.format.FormatType.JSON;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.readFeature = function(source, opt_options) {\n  return this.readFeatureFromObject(\n      this.getObject_(source), this.getReadOptions(source, opt_options));\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.readFeatures = function(source, opt_options) {\n  return this.readFeaturesFromObject(\n      this.getObject_(source), this.getReadOptions(source, opt_options));\n};\n\n\n/**\n * @abstract\n * @param {Object} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {ol.Feature} Feature.\n */\nol.format.JSONFeature.prototype.readFeatureFromObject = function(object, opt_options) {};\n\n\n/**\n * @abstract\n * @param {Object} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {Array.<ol.Feature>} Features.\n */\nol.format.JSONFeature.prototype.readFeaturesFromObject = function(object, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.readGeometry = function(source, opt_options) {\n  return this.readGeometryFromObject(\n      this.getObject_(source), this.getReadOptions(source, opt_options));\n};\n\n\n/**\n * @abstract\n * @param {Object} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.JSONFeature.prototype.readGeometryFromObject = function(object, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.readProjection = function(source) {\n  return this.readProjectionFromObject(this.getObject_(source));\n};\n\n\n/**\n * @abstract\n * @param {Object} object Object.\n * @protected\n * @return {ol.proj.Projection} Projection.\n */\nol.format.JSONFeature.prototype.readProjectionFromObject = function(object) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.writeFeature = function(feature, opt_options) {\n  return JSON.stringify(this.writeFeatureObject(feature, opt_options));\n};\n\n\n/**\n * @abstract\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {Object} Object.\n */\nol.format.JSONFeature.prototype.writeFeatureObject = function(feature, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.writeFeatures = function(features, opt_options) {\n  return JSON.stringify(this.writeFeaturesObject(features, opt_options));\n};\n\n\n/**\n * @abstract\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {Object} Object.\n */\nol.format.JSONFeature.prototype.writeFeaturesObject = function(features, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.JSONFeature.prototype.writeGeometry = function(geometry, opt_options) {\n  return JSON.stringify(this.writeGeometryObject(geometry, opt_options));\n};\n\n\n/**\n * @abstract\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {Object} Object.\n */\nol.format.JSONFeature.prototype.writeGeometryObject = function(geometry, opt_options) {};\n\ngoog.provide('ol.geom.flat.interpolate');\n\ngoog.require('ol.array');\ngoog.require('ol.math');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array.<number>=} opt_dest Destination.\n * @return {Array.<number>} Destination.\n */\nol.geom.flat.interpolate.lineString = function(flatCoordinates, offset, end, stride, fraction, opt_dest) {\n  var pointX = NaN;\n  var pointY = NaN;\n  var n = (end - offset) / stride;\n  if (n === 1) {\n    pointX = flatCoordinates[offset];\n    pointY = flatCoordinates[offset + 1];\n  } else if (n == 2) {\n    pointX = (1 - fraction) * flatCoordinates[offset] +\n        fraction * flatCoordinates[offset + stride];\n    pointY = (1 - fraction) * flatCoordinates[offset + 1] +\n        fraction * flatCoordinates[offset + stride + 1];\n  } else if (n !== 0) {\n    var x1 = flatCoordinates[offset];\n    var y1 = flatCoordinates[offset + 1];\n    var length = 0;\n    var cumulativeLengths = [0];\n    var i;\n    for (i = offset + stride; i < end; i += stride) {\n      var x2 = flatCoordinates[i];\n      var y2 = flatCoordinates[i + 1];\n      length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n      cumulativeLengths.push(length);\n      x1 = x2;\n      y1 = y2;\n    }\n    var target = fraction * length;\n    var index = ol.array.binarySearch(cumulativeLengths, target);\n    if (index < 0) {\n      var t = (target - cumulativeLengths[-index - 2]) /\n          (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n      var o = offset + (-index - 2) * stride;\n      pointX = ol.math.lerp(\n          flatCoordinates[o], flatCoordinates[o + stride], t);\n      pointY = ol.math.lerp(\n          flatCoordinates[o + 1], flatCoordinates[o + stride + 1], t);\n    } else {\n      pointX = flatCoordinates[offset + index * stride];\n      pointY = flatCoordinates[offset + index * stride + 1];\n    }\n  }\n  if (opt_dest) {\n    opt_dest[0] = pointX;\n    opt_dest[1] = pointY;\n    return opt_dest;\n  } else {\n    return [pointX, pointY];\n  }\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {ol.Coordinate} Coordinate.\n */\nol.geom.flat.interpolate.lineStringCoordinateAtM = function(flatCoordinates, offset, end, stride, m, extrapolate) {\n  if (end == offset) {\n    return null;\n  }\n  var coordinate;\n  if (m < flatCoordinates[offset + stride - 1]) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(offset, offset + stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    } else {\n      return null;\n    }\n  } else if (flatCoordinates[end - 1] < m) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(end - stride, end);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    } else {\n      return null;\n    }\n  }\n  // FIXME use O(1) search\n  if (m == flatCoordinates[offset + stride - 1]) {\n    return flatCoordinates.slice(offset, offset + stride);\n  }\n  var lo = offset / stride;\n  var hi = end / stride;\n  while (lo < hi) {\n    var mid = (lo + hi) >> 1;\n    if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n      hi = mid;\n    } else {\n      lo = mid + 1;\n    }\n  }\n  var m0 = flatCoordinates[lo * stride - 1];\n  if (m == m0) {\n    return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n  }\n  var m1 = flatCoordinates[(lo + 1) * stride - 1];\n  var t = (m - m0) / (m1 - m0);\n  coordinate = [];\n  var i;\n  for (i = 0; i < stride - 1; ++i) {\n    coordinate.push(ol.math.lerp(flatCoordinates[(lo - 1) * stride + i],\n        flatCoordinates[lo * stride + i], t));\n  }\n  coordinate.push(m);\n  return coordinate;\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {ol.Coordinate} Coordinate.\n */\nol.geom.flat.interpolate.lineStringsCoordinateAtM = function(\n    flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {\n  if (interpolate) {\n    return ol.geom.flat.interpolate.lineStringCoordinateAtM(\n        flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate);\n  }\n  var coordinate;\n  if (m < flatCoordinates[stride - 1]) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(0, stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    } else {\n      return null;\n    }\n  }\n  if (flatCoordinates[flatCoordinates.length - 1] < m) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    } else {\n      return null;\n    }\n  }\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    if (offset == end) {\n      continue;\n    }\n    if (m < flatCoordinates[offset + stride - 1]) {\n      return null;\n    } else if (m <= flatCoordinates[end - 1]) {\n      return ol.geom.flat.interpolate.lineStringCoordinateAtM(\n          flatCoordinates, offset, end, stride, m, false);\n    }\n    offset = end;\n  }\n  return null;\n};\n\ngoog.provide('ol.geom.LineString');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.closest');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.interpolate');\ngoog.require('ol.geom.flat.intersectsextent');\ngoog.require('ol.geom.flat.length');\ngoog.require('ol.geom.flat.segments');\ngoog.require('ol.geom.flat.simplify');\n\n\n/**\n * @classdesc\n * Linestring geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.LineString = function(coordinates, opt_layout) {\n\n  ol.geom.SimpleGeometry.call(this);\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.flatMidpoint_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.flatMidpointRevision_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDelta_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDeltaRevision_ = -1;\n\n  this.setCoordinates(coordinates, opt_layout);\n\n};\nol.inherits(ol.geom.LineString, ol.geom.SimpleGeometry);\n\n\n/**\n * Append the passed coordinate to the coordinates of the linestring.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @api\n */\nol.geom.LineString.prototype.appendCoordinate = function(coordinate) {\n  if (!this.flatCoordinates) {\n    this.flatCoordinates = coordinate.slice();\n  } else {\n    ol.array.extend(this.flatCoordinates, coordinate);\n  }\n  this.changed();\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.LineString} Clone.\n * @override\n * @api\n */\nol.geom.LineString.prototype.clone = function() {\n  var lineString = new ol.geom.LineString(null);\n  lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice());\n  return lineString;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.LineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  if (this.maxDeltaRevision_ != this.getRevision()) {\n    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(\n        this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n    this.maxDeltaRevision_ = this.getRevision();\n  }\n  return ol.geom.flat.closest.getClosestPoint(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);\n};\n\n\n/**\n * Iterate over each segment, calling the provided callback.\n * If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n *\n * @param {function(this: S, ol.Coordinate, ol.Coordinate): T} callback Function\n *     called for each segment.\n * @param {S=} opt_this The object to be used as the value of 'this'\n *     within callback.\n * @return {T|boolean} Value.\n * @template T,S\n * @api\n */\nol.geom.LineString.prototype.forEachSegment = function(callback, opt_this) {\n  return ol.geom.flat.segments.forEach(this.flatCoordinates, 0,\n      this.flatCoordinates.length, this.stride, callback, opt_this);\n};\n\n\n/**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * @param {number} m M.\n * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.\n * @return {ol.Coordinate} Coordinate.\n * @api\n */\nol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) {\n  if (this.layout != ol.geom.GeometryLayout.XYM &&\n      this.layout != ol.geom.GeometryLayout.XYZM) {\n    return null;\n  }\n  var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n  return ol.geom.flat.interpolate.lineStringCoordinateAtM(this.flatCoordinates, 0,\n      this.flatCoordinates.length, this.stride, m, extrapolate);\n};\n\n\n/**\n * Return the coordinates of the linestring.\n * @return {Array.<ol.Coordinate>} Coordinates.\n * @override\n * @api\n */\nol.geom.LineString.prototype.getCoordinates = function() {\n  return ol.geom.flat.inflate.coordinates(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n};\n\n\n/**\n * Return the coordinate at the provided fraction along the linestring.\n * The `fraction` is a number between 0 and 1, where 0 is the start of the\n * linestring and 1 is the end.\n * @param {number} fraction Fraction.\n * @param {ol.Coordinate=} opt_dest Optional coordinate whose values will\n *     be modified. If not provided, a new coordinate will be returned.\n * @return {ol.Coordinate} Coordinate of the interpolated point.\n * @api\n */\nol.geom.LineString.prototype.getCoordinateAt = function(fraction, opt_dest) {\n  return ol.geom.flat.interpolate.lineString(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      fraction, opt_dest);\n};\n\n\n/**\n * Return the length of the linestring on projected plane.\n * @return {number} Length (on projected plane).\n * @api\n */\nol.geom.LineString.prototype.getLength = function() {\n  return ol.geom.flat.length.lineString(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n};\n\n\n/**\n * @return {Array.<number>} Flat midpoint.\n */\nol.geom.LineString.prototype.getFlatMidpoint = function() {\n  if (this.flatMidpointRevision_ != this.getRevision()) {\n    this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);\n    this.flatMidpointRevision_ = this.getRevision();\n  }\n  return this.flatMidpoint_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.LineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  var simplifiedFlatCoordinates = [];\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      squaredTolerance, simplifiedFlatCoordinates, 0);\n  var simplifiedLineString = new ol.geom.LineString(null);\n  simplifiedLineString.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);\n  return simplifiedLineString;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.LineString.prototype.getType = function() {\n  return ol.geom.GeometryType.LINE_STRING;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.LineString.prototype.intersectsExtent = function(extent) {\n  return ol.geom.flat.intersectsextent.lineString(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n      extent);\n};\n\n\n/**\n * Set the coordinates of the linestring.\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.LineString.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);\n  } else {\n    this.setLayout(opt_layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(\n        this.flatCoordinates, 0, coordinates, this.stride);\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n */\nol.geom.LineString.prototype.setFlatCoordinates = function(layout, flatCoordinates) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.changed();\n};\n\ngoog.provide('ol.geom.MultiLineString');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.closest');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.interpolate');\ngoog.require('ol.geom.flat.intersectsextent');\ngoog.require('ol.geom.flat.simplify');\n\n\n/**\n * @classdesc\n * Multi-linestring geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.MultiLineString = function(coordinates, opt_layout) {\n\n  ol.geom.SimpleGeometry.call(this);\n\n  /**\n   * @type {Array.<number>}\n   * @private\n   */\n  this.ends_ = [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDelta_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDeltaRevision_ = -1;\n\n  this.setCoordinates(coordinates, opt_layout);\n\n};\nol.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry);\n\n\n/**\n * Append the passed linestring to the multilinestring.\n * @param {ol.geom.LineString} lineString LineString.\n * @api\n */\nol.geom.MultiLineString.prototype.appendLineString = function(lineString) {\n  if (!this.flatCoordinates) {\n    this.flatCoordinates = lineString.getFlatCoordinates().slice();\n  } else {\n    ol.array.extend(\n        this.flatCoordinates, lineString.getFlatCoordinates().slice());\n  }\n  this.ends_.push(this.flatCoordinates.length);\n  this.changed();\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.MultiLineString} Clone.\n * @override\n * @api\n */\nol.geom.MultiLineString.prototype.clone = function() {\n  var multiLineString = new ol.geom.MultiLineString(null);\n  multiLineString.setFlatCoordinates(\n      this.layout, this.flatCoordinates.slice(), this.ends_.slice());\n  return multiLineString;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiLineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  if (this.maxDeltaRevision_ != this.getRevision()) {\n    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(\n        this.flatCoordinates, 0, this.ends_, this.stride, 0));\n    this.maxDeltaRevision_ = this.getRevision();\n  }\n  return ol.geom.flat.closest.getsClosestPoint(\n      this.flatCoordinates, 0, this.ends_, this.stride,\n      this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);\n};\n\n\n/**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * `opt_interpolate` controls interpolation between consecutive LineStrings\n * within the MultiLineString. If `opt_interpolate` is `true` the coordinates\n * will be linearly interpolated between the last coordinate of one LineString\n * and the first coordinate of the next LineString.  If `opt_interpolate` is\n * `false` then the function will return `null` for Ms falling between\n * LineStrings.\n *\n * @param {number} m M.\n * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.\n * @param {boolean=} opt_interpolate Interpolate. Default is `false`.\n * @return {ol.Coordinate} Coordinate.\n * @api\n */\nol.geom.MultiLineString.prototype.getCoordinateAtM = function(m, opt_extrapolate, opt_interpolate) {\n  if ((this.layout != ol.geom.GeometryLayout.XYM &&\n       this.layout != ol.geom.GeometryLayout.XYZM) ||\n      this.flatCoordinates.length === 0) {\n    return null;\n  }\n  var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n  var interpolate = opt_interpolate !== undefined ? opt_interpolate : false;\n  return ol.geom.flat.interpolate.lineStringsCoordinateAtM(this.flatCoordinates, 0,\n      this.ends_, this.stride, m, extrapolate, interpolate);\n};\n\n\n/**\n * Return the coordinates of the multilinestring.\n * @return {Array.<Array.<ol.Coordinate>>} Coordinates.\n * @override\n * @api\n */\nol.geom.MultiLineString.prototype.getCoordinates = function() {\n  return ol.geom.flat.inflate.coordinatess(\n      this.flatCoordinates, 0, this.ends_, this.stride);\n};\n\n\n/**\n * @return {Array.<number>} Ends.\n */\nol.geom.MultiLineString.prototype.getEnds = function() {\n  return this.ends_;\n};\n\n\n/**\n * Return the linestring at the specified index.\n * @param {number} index Index.\n * @return {ol.geom.LineString} LineString.\n * @api\n */\nol.geom.MultiLineString.prototype.getLineString = function(index) {\n  if (index < 0 || this.ends_.length <= index) {\n    return null;\n  }\n  var lineString = new ol.geom.LineString(null);\n  lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice(\n      index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));\n  return lineString;\n};\n\n\n/**\n * Return the linestrings of this multilinestring.\n * @return {Array.<ol.geom.LineString>} LineStrings.\n * @api\n */\nol.geom.MultiLineString.prototype.getLineStrings = function() {\n  var flatCoordinates = this.flatCoordinates;\n  var ends = this.ends_;\n  var layout = this.layout;\n  /** @type {Array.<ol.geom.LineString>} */\n  var lineStrings = [];\n  var offset = 0;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var lineString = new ol.geom.LineString(null);\n    lineString.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));\n    lineStrings.push(lineString);\n    offset = end;\n  }\n  return lineStrings;\n};\n\n\n/**\n * @return {Array.<number>} Flat midpoints.\n */\nol.geom.MultiLineString.prototype.getFlatMidpoints = function() {\n  var midpoints = [];\n  var flatCoordinates = this.flatCoordinates;\n  var offset = 0;\n  var ends = this.ends_;\n  var stride = this.stride;\n  var i, ii;\n  for (i = 0, ii = ends.length; i < ii; ++i) {\n    var end = ends[i];\n    var midpoint = ol.geom.flat.interpolate.lineString(\n        flatCoordinates, offset, end, stride, 0.5);\n    ol.array.extend(midpoints, midpoint);\n    offset = end;\n  }\n  return midpoints;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiLineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  var simplifiedFlatCoordinates = [];\n  var simplifiedEnds = [];\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeuckers(\n      this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance,\n      simplifiedFlatCoordinates, 0, simplifiedEnds);\n  var simplifiedMultiLineString = new ol.geom.MultiLineString(null);\n  simplifiedMultiLineString.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);\n  return simplifiedMultiLineString;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiLineString.prototype.getType = function() {\n  return ol.geom.GeometryType.MULTI_LINE_STRING;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiLineString.prototype.intersectsExtent = function(extent) {\n  return ol.geom.flat.intersectsextent.lineStrings(\n      this.flatCoordinates, 0, this.ends_, this.stride, extent);\n};\n\n\n/**\n * Set the coordinates of the multilinestring.\n * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.MultiLineString.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);\n  } else {\n    this.setLayout(opt_layout, coordinates, 2);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    var ends = ol.geom.flat.deflate.coordinatess(\n        this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<number>} ends Ends.\n */\nol.geom.MultiLineString.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.ends_ = ends;\n  this.changed();\n};\n\n\n/**\n * @param {Array.<ol.geom.LineString>} lineStrings LineStrings.\n */\nol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) {\n  var layout = this.getLayout();\n  var flatCoordinates = [];\n  var ends = [];\n  var i, ii;\n  for (i = 0, ii = lineStrings.length; i < ii; ++i) {\n    var lineString = lineStrings[i];\n    if (i === 0) {\n      layout = lineString.getLayout();\n    }\n    ol.array.extend(flatCoordinates, lineString.getFlatCoordinates());\n    ends.push(flatCoordinates.length);\n  }\n  this.setFlatCoordinates(layout, flatCoordinates, ends);\n};\n\ngoog.provide('ol.geom.MultiPoint');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.math');\n\n\n/**\n * @classdesc\n * Multi-point geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.MultiPoint = function(coordinates, opt_layout) {\n  ol.geom.SimpleGeometry.call(this);\n  this.setCoordinates(coordinates, opt_layout);\n};\nol.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry);\n\n\n/**\n * Append the passed point to this multipoint.\n * @param {ol.geom.Point} point Point.\n * @api\n */\nol.geom.MultiPoint.prototype.appendPoint = function(point) {\n  if (!this.flatCoordinates) {\n    this.flatCoordinates = point.getFlatCoordinates().slice();\n  } else {\n    ol.array.extend(this.flatCoordinates, point.getFlatCoordinates());\n  }\n  this.changed();\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.MultiPoint} Clone.\n * @override\n * @api\n */\nol.geom.MultiPoint.prototype.clone = function() {\n  var multiPoint = new ol.geom.MultiPoint(null);\n  multiPoint.setFlatCoordinates(this.layout, this.flatCoordinates.slice());\n  return multiPoint;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiPoint.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  var flatCoordinates = this.flatCoordinates;\n  var stride = this.stride;\n  var i, ii, j;\n  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n    var squaredDistance = ol.math.squaredDistance(\n        x, y, flatCoordinates[i], flatCoordinates[i + 1]);\n    if (squaredDistance < minSquaredDistance) {\n      minSquaredDistance = squaredDistance;\n      for (j = 0; j < stride; ++j) {\n        closestPoint[j] = flatCoordinates[i + j];\n      }\n      closestPoint.length = stride;\n    }\n  }\n  return minSquaredDistance;\n};\n\n\n/**\n * Return the coordinates of the multipoint.\n * @return {Array.<ol.Coordinate>} Coordinates.\n * @override\n * @api\n */\nol.geom.MultiPoint.prototype.getCoordinates = function() {\n  return ol.geom.flat.inflate.coordinates(\n      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n};\n\n\n/**\n * Return the point at the specified index.\n * @param {number} index Index.\n * @return {ol.geom.Point} Point.\n * @api\n */\nol.geom.MultiPoint.prototype.getPoint = function(index) {\n  var n = !this.flatCoordinates ?\n    0 : this.flatCoordinates.length / this.stride;\n  if (index < 0 || n <= index) {\n    return null;\n  }\n  var point = new ol.geom.Point(null);\n  point.setFlatCoordinates(this.layout, this.flatCoordinates.slice(\n      index * this.stride, (index + 1) * this.stride));\n  return point;\n};\n\n\n/**\n * Return the points of this multipoint.\n * @return {Array.<ol.geom.Point>} Points.\n * @api\n */\nol.geom.MultiPoint.prototype.getPoints = function() {\n  var flatCoordinates = this.flatCoordinates;\n  var layout = this.layout;\n  var stride = this.stride;\n  /** @type {Array.<ol.geom.Point>} */\n  var points = [];\n  var i, ii;\n  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n    var point = new ol.geom.Point(null);\n    point.setFlatCoordinates(layout, flatCoordinates.slice(i, i + stride));\n    points.push(point);\n  }\n  return points;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiPoint.prototype.getType = function() {\n  return ol.geom.GeometryType.MULTI_POINT;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiPoint.prototype.intersectsExtent = function(extent) {\n  var flatCoordinates = this.flatCoordinates;\n  var stride = this.stride;\n  var i, ii, x, y;\n  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n    x = flatCoordinates[i];\n    y = flatCoordinates[i + 1];\n    if (ol.extent.containsXY(extent, x, y)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n\n/**\n * Set the coordinates of the multipoint.\n * @param {Array.<ol.Coordinate>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.MultiPoint.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);\n  } else {\n    this.setLayout(opt_layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(\n        this.flatCoordinates, 0, coordinates, this.stride);\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n */\nol.geom.MultiPoint.prototype.setFlatCoordinates = function(layout, flatCoordinates) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.changed();\n};\n\ngoog.provide('ol.geom.flat.center');\n\ngoog.require('ol.extent');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array.<Array.<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array.<number>} Flat centers.\n */\nol.geom.flat.center.linearRingss = function(flatCoordinates, offset, endss, stride) {\n  var flatCenters = [];\n  var i, ii;\n  var extent = ol.extent.createEmpty();\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    extent = ol.extent.createOrUpdateFromFlatCoordinates(\n        flatCoordinates, offset, ends[0], stride);\n    flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n    offset = ends[ends.length - 1];\n  }\n  return flatCenters;\n};\n\ngoog.provide('ol.geom.MultiPolygon');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.area');\ngoog.require('ol.geom.flat.center');\ngoog.require('ol.geom.flat.closest');\ngoog.require('ol.geom.flat.contains');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.geom.flat.interiorpoint');\ngoog.require('ol.geom.flat.intersectsextent');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.geom.flat.simplify');\n\n\n/**\n * @classdesc\n * Multi-polygon geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.MultiPolygon = function(coordinates, opt_layout) {\n\n  ol.geom.SimpleGeometry.call(this);\n\n  /**\n   * @type {Array.<Array.<number>>}\n   * @private\n   */\n  this.endss_ = [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.flatInteriorPointsRevision_ = -1;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.flatInteriorPoints_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDelta_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxDeltaRevision_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.orientedRevision_ = -1;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.orientedFlatCoordinates_ = null;\n\n  this.setCoordinates(coordinates, opt_layout);\n\n};\nol.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry);\n\n\n/**\n * Append the passed polygon to this multipolygon.\n * @param {ol.geom.Polygon} polygon Polygon.\n * @api\n */\nol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {\n  /** @type {Array.<number>} */\n  var ends;\n  if (!this.flatCoordinates) {\n    this.flatCoordinates = polygon.getFlatCoordinates().slice();\n    ends = polygon.getEnds().slice();\n    this.endss_.push();\n  } else {\n    var offset = this.flatCoordinates.length;\n    ol.array.extend(this.flatCoordinates, polygon.getFlatCoordinates());\n    ends = polygon.getEnds().slice();\n    var i, ii;\n    for (i = 0, ii = ends.length; i < ii; ++i) {\n      ends[i] += offset;\n    }\n  }\n  this.endss_.push(ends);\n  this.changed();\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.MultiPolygon} Clone.\n * @override\n * @api\n */\nol.geom.MultiPolygon.prototype.clone = function() {\n  var multiPolygon = new ol.geom.MultiPolygon(null);\n\n  var len = this.endss_.length;\n  var newEndss = new Array(len);\n  for (var i = 0; i < len; ++i) {\n    newEndss[i] = this.endss_[i].slice();\n  }\n\n  multiPolygon.setFlatCoordinates(\n      this.layout, this.flatCoordinates.slice(), newEndss);\n  return multiPolygon;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiPolygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  if (this.maxDeltaRevision_ != this.getRevision()) {\n    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getssMaxSquaredDelta(\n        this.flatCoordinates, 0, this.endss_, this.stride, 0));\n    this.maxDeltaRevision_ = this.getRevision();\n  }\n  return ol.geom.flat.closest.getssClosestPoint(\n      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride,\n      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiPolygon.prototype.containsXY = function(x, y) {\n  return ol.geom.flat.contains.linearRingssContainsXY(\n      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);\n};\n\n\n/**\n * Return the area of the multipolygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\nol.geom.MultiPolygon.prototype.getArea = function() {\n  return ol.geom.flat.area.linearRingss(\n      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride);\n};\n\n\n/**\n * Get the coordinate array for this geometry.  This array has the structure\n * of a GeoJSON coordinate array for multi-polygons.\n *\n * @param {boolean=} opt_right Orient coordinates according to the right-hand\n *     rule (counter-clockwise for exterior and clockwise for interior rings).\n *     If `false`, coordinates will be oriented according to the left-hand rule\n *     (clockwise for exterior and counter-clockwise for interior rings).\n *     By default, coordinate orientation will depend on how the geometry was\n *     constructed.\n * @return {Array.<Array.<Array.<ol.Coordinate>>>} Coordinates.\n * @override\n * @api\n */\nol.geom.MultiPolygon.prototype.getCoordinates = function(opt_right) {\n  var flatCoordinates;\n  if (opt_right !== undefined) {\n    flatCoordinates = this.getOrientedFlatCoordinates().slice();\n    ol.geom.flat.orient.orientLinearRingss(\n        flatCoordinates, 0, this.endss_, this.stride, opt_right);\n  } else {\n    flatCoordinates = this.flatCoordinates;\n  }\n\n  return ol.geom.flat.inflate.coordinatesss(\n      flatCoordinates, 0, this.endss_, this.stride);\n};\n\n\n/**\n * @return {Array.<Array.<number>>} Endss.\n */\nol.geom.MultiPolygon.prototype.getEndss = function() {\n  return this.endss_;\n};\n\n\n/**\n * @return {Array.<number>} Flat interior points.\n */\nol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() {\n  if (this.flatInteriorPointsRevision_ != this.getRevision()) {\n    var flatCenters = ol.geom.flat.center.linearRingss(\n        this.flatCoordinates, 0, this.endss_, this.stride);\n    this.flatInteriorPoints_ = ol.geom.flat.interiorpoint.linearRingss(\n        this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride,\n        flatCenters);\n    this.flatInteriorPointsRevision_ = this.getRevision();\n  }\n  return this.flatInteriorPoints_;\n};\n\n\n/**\n * Return the interior points as {@link ol.geom.MultiPoint multipoint}.\n * @return {ol.geom.MultiPoint} Interior points as XYM coordinates, where M is\n * the length of the horizontal intersection that the point belongs to.\n * @api\n */\nol.geom.MultiPolygon.prototype.getInteriorPoints = function() {\n  var interiorPoints = new ol.geom.MultiPoint(null);\n  interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XYM,\n      this.getFlatInteriorPoints().slice());\n  return interiorPoints;\n};\n\n\n/**\n * @return {Array.<number>} Oriented flat coordinates.\n */\nol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() {\n  if (this.orientedRevision_ != this.getRevision()) {\n    var flatCoordinates = this.flatCoordinates;\n    if (ol.geom.flat.orient.linearRingssAreOriented(\n        flatCoordinates, 0, this.endss_, this.stride)) {\n      this.orientedFlatCoordinates_ = flatCoordinates;\n    } else {\n      this.orientedFlatCoordinates_ = flatCoordinates.slice();\n      this.orientedFlatCoordinates_.length =\n          ol.geom.flat.orient.orientLinearRingss(\n              this.orientedFlatCoordinates_, 0, this.endss_, this.stride);\n    }\n    this.orientedRevision_ = this.getRevision();\n  }\n  return this.orientedFlatCoordinates_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {\n  var simplifiedFlatCoordinates = [];\n  var simplifiedEndss = [];\n  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizess(\n      this.flatCoordinates, 0, this.endss_, this.stride,\n      Math.sqrt(squaredTolerance),\n      simplifiedFlatCoordinates, 0, simplifiedEndss);\n  var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);\n  simplifiedMultiPolygon.setFlatCoordinates(\n      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);\n  return simplifiedMultiPolygon;\n};\n\n\n/**\n * Return the polygon at the specified index.\n * @param {number} index Index.\n * @return {ol.geom.Polygon} Polygon.\n * @api\n */\nol.geom.MultiPolygon.prototype.getPolygon = function(index) {\n  if (index < 0 || this.endss_.length <= index) {\n    return null;\n  }\n  var offset;\n  if (index === 0) {\n    offset = 0;\n  } else {\n    var prevEnds = this.endss_[index - 1];\n    offset = prevEnds[prevEnds.length - 1];\n  }\n  var ends = this.endss_[index].slice();\n  var end = ends[ends.length - 1];\n  if (offset !== 0) {\n    var i, ii;\n    for (i = 0, ii = ends.length; i < ii; ++i) {\n      ends[i] -= offset;\n    }\n  }\n  var polygon = new ol.geom.Polygon(null);\n  polygon.setFlatCoordinates(\n      this.layout, this.flatCoordinates.slice(offset, end), ends);\n  return polygon;\n};\n\n\n/**\n * Return the polygons of this multipolygon.\n * @return {Array.<ol.geom.Polygon>} Polygons.\n * @api\n */\nol.geom.MultiPolygon.prototype.getPolygons = function() {\n  var layout = this.layout;\n  var flatCoordinates = this.flatCoordinates;\n  var endss = this.endss_;\n  var polygons = [];\n  var offset = 0;\n  var i, ii, j, jj;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i].slice();\n    var end = ends[ends.length - 1];\n    if (offset !== 0) {\n      for (j = 0, jj = ends.length; j < jj; ++j) {\n        ends[j] -= offset;\n      }\n    }\n    var polygon = new ol.geom.Polygon(null);\n    polygon.setFlatCoordinates(\n        layout, flatCoordinates.slice(offset, end), ends);\n    polygons.push(polygon);\n    offset = end;\n  }\n  return polygons;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiPolygon.prototype.getType = function() {\n  return ol.geom.GeometryType.MULTI_POLYGON;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.MultiPolygon.prototype.intersectsExtent = function(extent) {\n  return ol.geom.flat.intersectsextent.linearRingss(\n      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, extent);\n};\n\n\n/**\n * Set the coordinates of the multipolygon.\n * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinates Coordinates.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\nol.geom.MultiPolygon.prototype.setCoordinates = function(coordinates, opt_layout) {\n  if (!coordinates) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_);\n  } else {\n    this.setLayout(opt_layout, coordinates, 3);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    var endss = ol.geom.flat.deflate.coordinatesss(\n        this.flatCoordinates, 0, coordinates, this.stride, this.endss_);\n    if (endss.length === 0) {\n      this.flatCoordinates.length = 0;\n    } else {\n      var lastEnds = endss[endss.length - 1];\n      this.flatCoordinates.length = lastEnds.length === 0 ?\n        0 : lastEnds[lastEnds.length - 1];\n    }\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<Array.<number>>} endss Endss.\n */\nol.geom.MultiPolygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, endss) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.endss_ = endss;\n  this.changed();\n};\n\n\n/**\n * @param {Array.<ol.geom.Polygon>} polygons Polygons.\n */\nol.geom.MultiPolygon.prototype.setPolygons = function(polygons) {\n  var layout = this.getLayout();\n  var flatCoordinates = [];\n  var endss = [];\n  var i, ii, ends;\n  for (i = 0, ii = polygons.length; i < ii; ++i) {\n    var polygon = polygons[i];\n    if (i === 0) {\n      layout = polygon.getLayout();\n    }\n    var offset = flatCoordinates.length;\n    ends = polygon.getEnds();\n    var j, jj;\n    for (j = 0, jj = ends.length; j < jj; ++j) {\n      ends[j] += offset;\n    }\n    ol.array.extend(flatCoordinates, polygon.getFlatCoordinates());\n    endss.push(ends);\n  }\n  this.setFlatCoordinates(layout, flatCoordinates, endss);\n};\n\ngoog.provide('ol.format.EsriJSON');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.asserts');\ngoog.require('ol.extent');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.JSONFeature');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.LinearRing');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.flat.deflate');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the EsriJSON format.\n *\n * @constructor\n * @extends {ol.format.JSONFeature}\n * @param {olx.format.EsriJSONOptions=} opt_options Options.\n * @api\n */\nol.format.EsriJSON = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.JSONFeature.call(this);\n\n  /**\n   * Name of the geometry attribute for features.\n   * @type {string|undefined}\n   * @private\n   */\n  this.geometryName_ = options.geometryName;\n\n};\nol.inherits(ol.format.EsriJSON, ol.format.JSONFeature);\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @private\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.EsriJSON.readGeometry_ = function(object, opt_options) {\n  if (!object) {\n    return null;\n  }\n  /** @type {ol.geom.GeometryType} */\n  var type;\n  if (typeof object.x === 'number' && typeof object.y === 'number') {\n    type = ol.geom.GeometryType.POINT;\n  } else if (object.points) {\n    type = ol.geom.GeometryType.MULTI_POINT;\n  } else if (object.paths) {\n    if (object.paths.length === 1) {\n      type = ol.geom.GeometryType.LINE_STRING;\n    } else {\n      type = ol.geom.GeometryType.MULTI_LINE_STRING;\n    }\n  } else if (object.rings) {\n    var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n    var rings = ol.format.EsriJSON.convertRings_(object.rings, layout);\n    object = /** @type {EsriJSONGeometry} */(ol.obj.assign({}, object));\n    if (rings.length === 1) {\n      type = ol.geom.GeometryType.POLYGON;\n      object.rings = rings[0];\n    } else {\n      type = ol.geom.GeometryType.MULTI_POLYGON;\n      object.rings = rings;\n    }\n  }\n  var geometryReader = ol.format.EsriJSON.GEOMETRY_READERS_[type];\n  return /** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(\n        geometryReader(object), false, opt_options));\n};\n\n\n/**\n * Determines inner and outer rings.\n * Checks if any polygons in this array contain any other polygons in this\n * array. It is used for checking for holes.\n * Logic inspired by: https://github.com/Esri/terraformer-arcgis-parser\n * @param {Array.<!Array.<!Array.<number>>>} rings Rings.\n * @param {ol.geom.GeometryLayout} layout Geometry layout.\n * @private\n * @return {Array.<!Array.<!Array.<number>>>} Transformed rings.\n */\nol.format.EsriJSON.convertRings_ = function(rings, layout) {\n  var flatRing = [];\n  var outerRings = [];\n  var holes = [];\n  var i, ii;\n  for (i = 0, ii = rings.length; i < ii; ++i) {\n    flatRing.length = 0;\n    ol.geom.flat.deflate.coordinates(flatRing, 0, rings[i], layout.length);\n    // is this ring an outer ring? is it clockwise?\n    var clockwise = ol.geom.flat.orient.linearRingIsClockwise(flatRing, 0,\n        flatRing.length, layout.length);\n    if (clockwise) {\n      outerRings.push([rings[i]]);\n    } else {\n      holes.push(rings[i]);\n    }\n  }\n  while (holes.length) {\n    var hole = holes.shift();\n    var matched = false;\n    // loop over all outer rings and see if they contain our hole.\n    for (i = outerRings.length - 1; i >= 0; i--) {\n      var outerRing = outerRings[i][0];\n      var containsHole = ol.extent.containsExtent(\n          new ol.geom.LinearRing(outerRing).getExtent(),\n          new ol.geom.LinearRing(hole).getExtent()\n      );\n      if (containsHole) {\n        // the hole is contained push it into our polygon\n        outerRings[i].push(hole);\n        matched = true;\n        break;\n      }\n    }\n    if (!matched) {\n      // no outer rings contain this hole turn it into and outer\n      // ring (reverse it)\n      outerRings.push([hole.reverse()]);\n    }\n  }\n  return outerRings;\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} Point.\n */\nol.format.EsriJSON.readPointGeometry_ = function(object) {\n  var point;\n  if (object.m !== undefined && object.z !== undefined) {\n    point = new ol.geom.Point([object.x, object.y, object.z, object.m],\n        ol.geom.GeometryLayout.XYZM);\n  } else if (object.z !== undefined) {\n    point = new ol.geom.Point([object.x, object.y, object.z],\n        ol.geom.GeometryLayout.XYZ);\n  } else if (object.m !== undefined) {\n    point = new ol.geom.Point([object.x, object.y, object.m],\n        ol.geom.GeometryLayout.XYM);\n  } else {\n    point = new ol.geom.Point([object.x, object.y]);\n  }\n  return point;\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} LineString.\n */\nol.format.EsriJSON.readLineStringGeometry_ = function(object) {\n  var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n  return new ol.geom.LineString(object.paths[0], layout);\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} MultiLineString.\n */\nol.format.EsriJSON.readMultiLineStringGeometry_ = function(object) {\n  var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n  return new ol.geom.MultiLineString(object.paths, layout);\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.GeometryLayout} The geometry layout to use.\n */\nol.format.EsriJSON.getGeometryLayout_ = function(object) {\n  var layout = ol.geom.GeometryLayout.XY;\n  if (object.hasZ === true && object.hasM === true) {\n    layout = ol.geom.GeometryLayout.XYZM;\n  } else if (object.hasZ === true) {\n    layout = ol.geom.GeometryLayout.XYZ;\n  } else if (object.hasM === true) {\n    layout = ol.geom.GeometryLayout.XYM;\n  }\n  return layout;\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} MultiPoint.\n */\nol.format.EsriJSON.readMultiPointGeometry_ = function(object) {\n  var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n  return new ol.geom.MultiPoint(object.points, layout);\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} MultiPolygon.\n */\nol.format.EsriJSON.readMultiPolygonGeometry_ = function(object) {\n  var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n  return new ol.geom.MultiPolygon(\n      /** @type {Array.<Array.<Array.<Array.<number>>>>} */(object.rings),\n      layout);\n};\n\n\n/**\n * @param {EsriJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Geometry} Polygon.\n */\nol.format.EsriJSON.readPolygonGeometry_ = function(object) {\n  var layout = ol.format.EsriJSON.getGeometryLayout_(object);\n  return new ol.geom.Polygon(object.rings, layout);\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONGeometry} EsriJSON geometry.\n */\nol.format.EsriJSON.writePointGeometry_ = function(geometry, opt_options) {\n  var coordinates = /** @type {ol.geom.Point} */ (geometry).getCoordinates();\n  var esriJSON;\n  var layout = /** @type {ol.geom.Point} */ (geometry).getLayout();\n  if (layout === ol.geom.GeometryLayout.XYZ) {\n    esriJSON = /** @type {EsriJSONPoint} */ ({\n      x: coordinates[0],\n      y: coordinates[1],\n      z: coordinates[2]\n    });\n  } else if (layout === ol.geom.GeometryLayout.XYM) {\n    esriJSON = /** @type {EsriJSONPoint} */ ({\n      x: coordinates[0],\n      y: coordinates[1],\n      m: coordinates[2]\n    });\n  } else if (layout === ol.geom.GeometryLayout.XYZM) {\n    esriJSON = /** @type {EsriJSONPoint} */ ({\n      x: coordinates[0],\n      y: coordinates[1],\n      z: coordinates[2],\n      m: coordinates[3]\n    });\n  } else if (layout === ol.geom.GeometryLayout.XY) {\n    esriJSON = /** @type {EsriJSONPoint} */ ({\n      x: coordinates[0],\n      y: coordinates[1]\n    });\n  } else {\n    ol.asserts.assert(false, 34); // Invalid geometry layout\n  }\n  return /** @type {EsriJSONGeometry} */ (esriJSON);\n};\n\n\n/**\n * @param {ol.geom.SimpleGeometry} geometry Geometry.\n * @private\n * @return {Object} Object with boolean hasZ and hasM keys.\n */\nol.format.EsriJSON.getHasZM_ = function(geometry) {\n  var layout = geometry.getLayout();\n  return {\n    hasZ: (layout === ol.geom.GeometryLayout.XYZ ||\n      layout === ol.geom.GeometryLayout.XYZM),\n    hasM: (layout === ol.geom.GeometryLayout.XYM ||\n      layout === ol.geom.GeometryLayout.XYZM)\n  };\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONPolyline} EsriJSON geometry.\n */\nol.format.EsriJSON.writeLineStringGeometry_ = function(geometry, opt_options) {\n  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.LineString} */(geometry));\n  return /** @type {EsriJSONPolyline} */ ({\n    hasZ: hasZM.hasZ,\n    hasM: hasZM.hasM,\n    paths: [\n      /** @type {ol.geom.LineString} */ (geometry).getCoordinates()\n    ]\n  });\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONPolygon} EsriJSON geometry.\n */\nol.format.EsriJSON.writePolygonGeometry_ = function(geometry, opt_options) {\n  // Esri geometries use the left-hand rule\n  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.Polygon} */(geometry));\n  return /** @type {EsriJSONPolygon} */ ({\n    hasZ: hasZM.hasZ,\n    hasM: hasZM.hasM,\n    rings: /** @type {ol.geom.Polygon} */ (geometry).getCoordinates(false)\n  });\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONPolyline} EsriJSON geometry.\n */\nol.format.EsriJSON.writeMultiLineStringGeometry_ = function(geometry, opt_options) {\n  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiLineString} */(geometry));\n  return /** @type {EsriJSONPolyline} */ ({\n    hasZ: hasZM.hasZ,\n    hasM: hasZM.hasM,\n    paths: /** @type {ol.geom.MultiLineString} */ (geometry).getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONMultipoint} EsriJSON geometry.\n */\nol.format.EsriJSON.writeMultiPointGeometry_ = function(geometry, opt_options) {\n  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiPoint} */(geometry));\n  return /** @type {EsriJSONMultipoint} */ ({\n    hasZ: hasZM.hasZ,\n    hasM: hasZM.hasM,\n    points: /** @type {ol.geom.MultiPoint} */ (geometry).getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONPolygon} EsriJSON geometry.\n */\nol.format.EsriJSON.writeMultiPolygonGeometry_ = function(geometry,\n    opt_options) {\n  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiPolygon} */(geometry));\n  var coordinates = /** @type {ol.geom.MultiPolygon} */ (geometry).getCoordinates(false);\n  var output = [];\n  for (var i = 0; i < coordinates.length; i++) {\n    for (var x = coordinates[i].length - 1; x >= 0; x--) {\n      output.push(coordinates[i][x]);\n    }\n  }\n  return /** @type {EsriJSONPolygon} */ ({\n    hasZ: hasZM.hasZ,\n    hasM: hasZM.hasM,\n    rings: output\n  });\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<ol.geom.GeometryType, function(EsriJSONGeometry): ol.geom.Geometry>}\n */\nol.format.EsriJSON.GEOMETRY_READERS_ = {};\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.POINT] =\n  ol.format.EsriJSON.readPointGeometry_;\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.LINE_STRING] =\n  ol.format.EsriJSON.readLineStringGeometry_;\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.POLYGON] =\n  ol.format.EsriJSON.readPolygonGeometry_;\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_POINT] =\n  ol.format.EsriJSON.readMultiPointGeometry_;\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_LINE_STRING] =\n  ol.format.EsriJSON.readMultiLineStringGeometry_;\nol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_POLYGON] =\n  ol.format.EsriJSON.readMultiPolygonGeometry_;\n\n\n/**\n * @const\n * @private\n * @type {Object.<string, function(ol.geom.Geometry, olx.format.WriteOptions=): (EsriJSONGeometry)>}\n */\nol.format.EsriJSON.GEOMETRY_WRITERS_ = {};\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.POINT] =\n  ol.format.EsriJSON.writePointGeometry_;\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.LINE_STRING] =\n  ol.format.EsriJSON.writeLineStringGeometry_;\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.POLYGON] =\n  ol.format.EsriJSON.writePolygonGeometry_;\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_POINT] =\n  ol.format.EsriJSON.writeMultiPointGeometry_;\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_LINE_STRING] =\n  ol.format.EsriJSON.writeMultiLineStringGeometry_;\nol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_POLYGON] =\n  ol.format.EsriJSON.writeMultiPolygonGeometry_;\n\n\n/**\n * Read a feature from a EsriJSON Feature source.  Only works for Feature,\n * use `readFeatures` to read FeatureCollection source.\n *\n * @function\n * @param {ArrayBuffer|Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.EsriJSON.prototype.readFeature;\n\n\n/**\n * Read all features from a EsriJSON source.  Works with both Feature and\n * FeatureCollection sources.\n *\n * @function\n * @param {ArrayBuffer|Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.EsriJSON.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.EsriJSON.prototype.readFeatureFromObject = function(\n    object, opt_options) {\n  var esriJSONFeature = /** @type {EsriJSONFeature} */ (object);\n  var geometry = ol.format.EsriJSON.readGeometry_(esriJSONFeature.geometry,\n      opt_options);\n  var feature = new ol.Feature();\n  if (this.geometryName_) {\n    feature.setGeometryName(this.geometryName_);\n  }\n  feature.setGeometry(geometry);\n  if (opt_options && opt_options.idField &&\n    esriJSONFeature.attributes[opt_options.idField]) {\n    feature.setId(/** @type {number} */(\n      esriJSONFeature.attributes[opt_options.idField]));\n  }\n  if (esriJSONFeature.attributes) {\n    feature.setProperties(esriJSONFeature.attributes);\n  }\n  return feature;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.EsriJSON.prototype.readFeaturesFromObject = function(\n    object, opt_options) {\n  var esriJSONObject = /** @type {EsriJSONObject} */ (object);\n  var options = opt_options ? opt_options : {};\n  if (esriJSONObject.features) {\n    var esriJSONFeatureCollection = /** @type {EsriJSONFeatureCollection} */\n      (object);\n    /** @type {Array.<ol.Feature>} */\n    var features = [];\n    var esriJSONFeatures = esriJSONFeatureCollection.features;\n    var i, ii;\n    options.idField = object.objectIdFieldName;\n    for (i = 0, ii = esriJSONFeatures.length; i < ii; ++i) {\n      features.push(this.readFeatureFromObject(esriJSONFeatures[i],\n          options));\n    }\n    return features;\n  } else {\n    return [this.readFeatureFromObject(object, options)];\n  }\n};\n\n\n/**\n * Read a geometry from a EsriJSON source.\n *\n * @function\n * @param {ArrayBuffer|Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.geom.Geometry} Geometry.\n * @api\n */\nol.format.EsriJSON.prototype.readGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.EsriJSON.prototype.readGeometryFromObject = function(\n    object, opt_options) {\n  return ol.format.EsriJSON.readGeometry_(\n      /** @type {EsriJSONGeometry} */(object), opt_options);\n};\n\n\n/**\n * Read the projection from a EsriJSON source.\n *\n * @function\n * @param {ArrayBuffer|Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.EsriJSON.prototype.readProjection;\n\n\n/**\n * @inheritDoc\n */\nol.format.EsriJSON.prototype.readProjectionFromObject = function(object) {\n  var esriJSONObject = /** @type {EsriJSONObject} */ (object);\n  if (esriJSONObject.spatialReference && esriJSONObject.spatialReference.wkid) {\n    var crs = esriJSONObject.spatialReference.wkid;\n    return ol.proj.get('EPSG:' + crs);\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {EsriJSONGeometry} EsriJSON geometry.\n */\nol.format.EsriJSON.writeGeometry_ = function(geometry, opt_options) {\n  var geometryWriter = ol.format.EsriJSON.GEOMETRY_WRITERS_[geometry.getType()];\n  return geometryWriter(/** @type {ol.geom.Geometry} */(\n    ol.format.Feature.transformWithOptions(geometry, true, opt_options)),\n  opt_options);\n};\n\n\n/**\n * Encode a geometry as a EsriJSON string.\n *\n * @function\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} EsriJSON.\n * @api\n */\nol.format.EsriJSON.prototype.writeGeometry;\n\n\n/**\n * Encode a geometry as a EsriJSON object.\n *\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {EsriJSONGeometry} Object.\n * @override\n * @api\n */\nol.format.EsriJSON.prototype.writeGeometryObject = function(geometry,\n    opt_options) {\n  return ol.format.EsriJSON.writeGeometry_(geometry,\n      this.adaptOptions(opt_options));\n};\n\n\n/**\n * Encode a feature as a EsriJSON Feature string.\n *\n * @function\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} EsriJSON.\n * @api\n */\nol.format.EsriJSON.prototype.writeFeature;\n\n\n/**\n * Encode a feature as a esriJSON Feature object.\n *\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {Object} Object.\n * @override\n * @api\n */\nol.format.EsriJSON.prototype.writeFeatureObject = function(\n    feature, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var object = {};\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    object['geometry'] =\n      ol.format.EsriJSON.writeGeometry_(geometry, opt_options);\n    if (opt_options && opt_options.featureProjection) {\n      object['geometry']['spatialReference'] = /** @type {EsriJSONCRS} */({\n        wkid: ol.proj.get(\n            opt_options.featureProjection).getCode().split(':').pop()\n      });\n    }\n  }\n  var properties = feature.getProperties();\n  delete properties[feature.getGeometryName()];\n  if (!ol.obj.isEmpty(properties)) {\n    object['attributes'] = properties;\n  } else {\n    object['attributes'] = {};\n  }\n  return object;\n};\n\n\n/**\n * Encode an array of features as EsriJSON.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} EsriJSON.\n * @api\n */\nol.format.EsriJSON.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features as a EsriJSON object.\n *\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {Object} EsriJSON Object.\n * @override\n * @api\n */\nol.format.EsriJSON.prototype.writeFeaturesObject = function(features, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var objects = [];\n  var i, ii;\n  for (i = 0, ii = features.length; i < ii; ++i) {\n    objects.push(this.writeFeatureObject(features[i], opt_options));\n  }\n  return /** @type {EsriJSONFeatureCollection} */ ({\n    'features': objects\n  });\n};\n\ngoog.provide('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature filters.\n *\n * deprecated: This class will no longer be exported starting from the next major version.\n *\n * @constructor\n * @abstract\n * @param {!string} tagName The XML tag name for this filter.\n * @struct\n * @api\n */\nol.format.filter.Filter = function(tagName) {\n\n  /**\n   * @private\n   * @type {!string}\n   */\n  this.tagName_ = tagName;\n};\n\n/**\n * The XML tag name for a filter.\n * @returns {!string} Name.\n */\nol.format.filter.Filter.prototype.getTagName = function() {\n  return this.tagName_;\n};\n\ngoog.provide('ol.format.filter.LogicalNary');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature n-ary logical filters.\n *\n * @constructor\n * @abstract\n * @param {!string} tagName The XML tag name for this filter.\n * @param {...ol.format.filter.Filter} conditions Conditions.\n * @extends {ol.format.filter.Filter}\n */\nol.format.filter.LogicalNary = function(tagName, conditions) {\n\n  ol.format.filter.Filter.call(this, tagName);\n\n  /**\n   * @public\n   * @type {Array.<ol.format.filter.Filter>}\n   */\n  this.conditions = Array.prototype.slice.call(arguments, 1);\n  ol.asserts.assert(this.conditions.length >= 2, 57); // At least 2 conditions are required.\n};\nol.inherits(ol.format.filter.LogicalNary, ol.format.filter.Filter);\n\ngoog.provide('ol.format.filter.And');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.LogicalNary');\n\n/**\n * @classdesc\n * Represents a logical `<And>` operator between two or more filter conditions.\n *\n * deprecated: This class will no longer be exported starting from the next major version.\n *\n * @constructor\n * @abstract\n * @param {...ol.format.filter.Filter} conditions Conditions.\n * @extends {ol.format.filter.LogicalNary}\n * @api\n */\nol.format.filter.And = function(conditions) {\n  var params = ['And'].concat(Array.prototype.slice.call(arguments));\n  ol.format.filter.LogicalNary.apply(this, params);\n};\nol.inherits(ol.format.filter.And, ol.format.filter.LogicalNary);\n\ngoog.provide('ol.format.filter.Bbox');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Represents a `<BBOX>` operator to test whether a geometry-valued property\n * intersects a fixed bounding box\n *\n * @constructor\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.Extent} extent Extent.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @extends {ol.format.filter.Filter}\n * @api\n */\nol.format.filter.Bbox = function(geometryName, extent, opt_srsName) {\n\n  ol.format.filter.Filter.call(this, 'BBOX');\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.geometryName = geometryName;\n\n  /**\n   * @public\n   * @type {ol.Extent}\n   */\n  this.extent = extent;\n\n  /**\n   * @public\n   * @type {string|undefined}\n   */\n  this.srsName = opt_srsName;\n};\nol.inherits(ol.format.filter.Bbox, ol.format.filter.Filter);\n\ngoog.provide('ol.format.filter.Spatial');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Represents a spatial operator to test whether a geometry-valued property\n * relates to a given geometry.\n *\n * deprecated: This class will no longer be exported starting from the next major version.\n *\n * @constructor\n * @abstract\n * @param {!string} tagName The XML tag name for this filter.\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @extends {ol.format.filter.Filter}\n * @api\n */\nol.format.filter.Spatial = function(tagName, geometryName, geometry, opt_srsName) {\n\n  ol.format.filter.Filter.call(this, tagName);\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.geometryName = geometryName || 'the_geom';\n\n  /**\n   * @public\n   * @type {ol.geom.Geometry}\n   */\n  this.geometry = geometry;\n\n  /**\n   * @public\n   * @type {string|undefined}\n   */\n  this.srsName = opt_srsName;\n};\nol.inherits(ol.format.filter.Spatial, ol.format.filter.Filter);\n\ngoog.provide('ol.format.filter.Contains');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Spatial');\n\n\n/**\n * @classdesc\n * Represents a `<Contains>` operator to test whether a geometry-valued property\n * contains a given geometry.\n *\n * @constructor\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @extends {ol.format.filter.Spatial}\n * @api\n */\nol.format.filter.Contains = function(geometryName, geometry, opt_srsName) {\n\n  ol.format.filter.Spatial.call(this, 'Contains', geometryName, geometry, opt_srsName);\n\n};\nol.inherits(ol.format.filter.Contains, ol.format.filter.Spatial);\n\ngoog.provide('ol.format.filter.Comparison');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature property comparison filters.\n *\n * deprecated: This class will no longer be exported starting from the next major version.\n *\n * @constructor\n * @abstract\n * @param {!string} tagName The XML tag name for this filter.\n * @param {!string} propertyName Name of the context property to compare.\n * @extends {ol.format.filter.Filter}\n * @api\n */\nol.format.filter.Comparison = function(tagName, propertyName) {\n\n  ol.format.filter.Filter.call(this, tagName);\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.propertyName = propertyName;\n};\nol.inherits(ol.format.filter.Comparison, ol.format.filter.Filter);\n\ngoog.provide('ol.format.filter.During');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Comparison');\n\n\n/**\n * @classdesc\n * Represents a `<During>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} begin The begin date in ISO-8601 format.\n * @param {!string} end The end date in ISO-8601 format.\n * @extends {ol.format.filter.Comparison}\n * @api\n */\nol.format.filter.During = function(propertyName, begin, end) {\n  ol.format.filter.Comparison.call(this, 'During', propertyName);\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.begin = begin;\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.end = end;\n};\nol.inherits(ol.format.filter.During, ol.format.filter.Comparison);\n\ngoog.provide('ol.format.filter.ComparisonBinary');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Comparison');\n\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature property binary comparison filters.\n *\n * deprecated: This class will no longer be exported starting from the next major version.\n *\n * @constructor\n * @abstract\n * @param {!string} tagName The XML tag name for this filter.\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @extends {ol.format.filter.Comparison}\n * @api\n */\nol.format.filter.ComparisonBinary = function(\n    tagName, propertyName, expression, opt_matchCase) {\n\n  ol.format.filter.Comparison.call(this, tagName, propertyName);\n\n  /**\n   * @public\n   * @type {!(string|number)}\n   */\n  this.expression = expression;\n\n  /**\n   * @public\n   * @type {boolean|undefined}\n   */\n  this.matchCase = opt_matchCase;\n};\nol.inherits(ol.format.filter.ComparisonBinary, ol.format.filter.Comparison);\n\ngoog.provide('ol.format.filter.EqualTo');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsEqualTo>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.EqualTo = function(propertyName, expression, opt_matchCase) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsEqualTo', propertyName, expression, opt_matchCase);\n};\nol.inherits(ol.format.filter.EqualTo, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.GreaterThan');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsGreaterThan>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.GreaterThan = function(propertyName, expression) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThan', propertyName, expression);\n};\nol.inherits(ol.format.filter.GreaterThan, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.GreaterThanOrEqualTo');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsGreaterThanOrEqualTo>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.GreaterThanOrEqualTo = function(propertyName, expression) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThanOrEqualTo', propertyName, expression);\n};\nol.inherits(ol.format.filter.GreaterThanOrEqualTo, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.Intersects');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Spatial');\n\n\n/**\n * @classdesc\n * Represents a `<Intersects>` operator to test whether a geometry-valued property\n * intersects a given geometry.\n *\n * @constructor\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @extends {ol.format.filter.Spatial}\n * @api\n */\nol.format.filter.Intersects = function(geometryName, geometry, opt_srsName) {\n\n  ol.format.filter.Spatial.call(this, 'Intersects', geometryName, geometry, opt_srsName);\n\n};\nol.inherits(ol.format.filter.Intersects, ol.format.filter.Spatial);\n\ngoog.provide('ol.format.filter.IsBetween');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Comparison');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsBetween>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} lowerBoundary The lower bound of the range.\n * @param {!number} upperBoundary The upper bound of the range.\n * @extends {ol.format.filter.Comparison}\n * @api\n */\nol.format.filter.IsBetween = function(propertyName, lowerBoundary, upperBoundary) {\n  ol.format.filter.Comparison.call(this, 'PropertyIsBetween', propertyName);\n\n  /**\n   * @public\n   * @type {!number}\n   */\n  this.lowerBoundary = lowerBoundary;\n\n  /**\n   * @public\n   * @type {!number}\n   */\n  this.upperBoundary = upperBoundary;\n};\nol.inherits(ol.format.filter.IsBetween, ol.format.filter.Comparison);\n\ngoog.provide('ol.format.filter.IsLike');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Comparison');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsLike>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} pattern Text pattern.\n * @param {string=} opt_wildCard Pattern character which matches any sequence of\n *    zero or more string characters. Default is '*'.\n * @param {string=} opt_singleChar pattern character which matches any single\n *    string character. Default is '.'.\n * @param {string=} opt_escapeChar Escape character which can be used to escape\n *    the pattern characters. Default is '!'.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @extends {ol.format.filter.Comparison}\n * @api\n */\nol.format.filter.IsLike = function(propertyName, pattern,\n    opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\n  ol.format.filter.Comparison.call(this, 'PropertyIsLike', propertyName);\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.pattern = pattern;\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.wildCard = (opt_wildCard !== undefined) ? opt_wildCard : '*';\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.singleChar = (opt_singleChar !== undefined) ? opt_singleChar : '.';\n\n  /**\n   * @public\n   * @type {!string}\n   */\n  this.escapeChar = (opt_escapeChar !== undefined) ? opt_escapeChar : '!';\n\n  /**\n   * @public\n   * @type {boolean|undefined}\n   */\n  this.matchCase = opt_matchCase;\n};\nol.inherits(ol.format.filter.IsLike, ol.format.filter.Comparison);\n\ngoog.provide('ol.format.filter.IsNull');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Comparison');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsNull>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @extends {ol.format.filter.Comparison}\n * @api\n */\nol.format.filter.IsNull = function(propertyName) {\n  ol.format.filter.Comparison.call(this, 'PropertyIsNull', propertyName);\n};\nol.inherits(ol.format.filter.IsNull, ol.format.filter.Comparison);\n\ngoog.provide('ol.format.filter.LessThan');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsLessThan>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.LessThan = function(propertyName, expression) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsLessThan', propertyName, expression);\n};\nol.inherits(ol.format.filter.LessThan, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.LessThanOrEqualTo');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsLessThanOrEqualTo>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.LessThanOrEqualTo = function(propertyName, expression) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsLessThanOrEqualTo', propertyName, expression);\n};\nol.inherits(ol.format.filter.LessThanOrEqualTo, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.Not');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Filter');\n\n\n/**\n * @classdesc\n * Represents a logical `<Not>` operator for a filter condition.\n *\n * @constructor\n * @param {!ol.format.filter.Filter} condition Filter condition.\n * @extends {ol.format.filter.Filter}\n * @api\n */\nol.format.filter.Not = function(condition) {\n\n  ol.format.filter.Filter.call(this, 'Not');\n\n  /**\n   * @public\n   * @type {!ol.format.filter.Filter}\n   */\n  this.condition = condition;\n};\nol.inherits(ol.format.filter.Not, ol.format.filter.Filter);\n\ngoog.provide('ol.format.filter.NotEqualTo');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.ComparisonBinary');\n\n\n/**\n * @classdesc\n * Represents a `<PropertyIsNotEqualTo>` comparison operator.\n *\n * @constructor\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @extends {ol.format.filter.ComparisonBinary}\n * @api\n */\nol.format.filter.NotEqualTo = function(propertyName, expression, opt_matchCase) {\n  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsNotEqualTo', propertyName, expression, opt_matchCase);\n};\nol.inherits(ol.format.filter.NotEqualTo, ol.format.filter.ComparisonBinary);\n\ngoog.provide('ol.format.filter.Or');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.LogicalNary');\n\n\n/**\n * @classdesc\n * Represents a logical `<Or>` operator between two ore more filter conditions.\n *\n * @constructor\n * @param {...ol.format.filter.Filter} conditions Conditions.\n * @extends {ol.format.filter.LogicalNary}\n * @api\n */\nol.format.filter.Or = function(conditions) {\n  var params = ['Or'].concat(Array.prototype.slice.call(arguments));\n  ol.format.filter.LogicalNary.apply(this, params);\n};\nol.inherits(ol.format.filter.Or, ol.format.filter.LogicalNary);\n\ngoog.provide('ol.format.filter.Within');\n\ngoog.require('ol');\ngoog.require('ol.format.filter.Spatial');\n\n\n/**\n * @classdesc\n * Represents a `<Within>` operator to test whether a geometry-valued property\n * is within a given geometry.\n *\n * @constructor\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @extends {ol.format.filter.Spatial}\n * @api\n */\nol.format.filter.Within = function(geometryName, geometry, opt_srsName) {\n\n  ol.format.filter.Spatial.call(this, 'Within', geometryName, geometry, opt_srsName);\n\n};\nol.inherits(ol.format.filter.Within, ol.format.filter.Spatial);\n\ngoog.provide('ol.format.filter');\n\ngoog.require('ol.format.filter.And');\ngoog.require('ol.format.filter.Bbox');\ngoog.require('ol.format.filter.Contains');\ngoog.require('ol.format.filter.During');\ngoog.require('ol.format.filter.EqualTo');\ngoog.require('ol.format.filter.GreaterThan');\ngoog.require('ol.format.filter.GreaterThanOrEqualTo');\ngoog.require('ol.format.filter.Intersects');\ngoog.require('ol.format.filter.IsBetween');\ngoog.require('ol.format.filter.IsLike');\ngoog.require('ol.format.filter.IsNull');\ngoog.require('ol.format.filter.LessThan');\ngoog.require('ol.format.filter.LessThanOrEqualTo');\ngoog.require('ol.format.filter.Not');\ngoog.require('ol.format.filter.NotEqualTo');\ngoog.require('ol.format.filter.Or');\ngoog.require('ol.format.filter.Within');\n\n\n/**\n * Create a logical `<And>` operator between two or more filter conditions.\n *\n * @param {...ol.format.filter.Filter} conditions Filter conditions.\n * @returns {!ol.format.filter.And} `<And>` operator.\n * @api\n */\nol.format.filter.and = function(conditions) {\n  var params = [null].concat(Array.prototype.slice.call(arguments));\n  return new (Function.prototype.bind.apply(ol.format.filter.And, params));\n};\n\n\n/**\n * Create a logical `<Or>` operator between two or more filter conditions.\n *\n * @param {...ol.format.filter.Filter} conditions Filter conditions.\n * @returns {!ol.format.filter.Or} `<Or>` operator.\n * @api\n */\nol.format.filter.or = function(conditions) {\n  var params = [null].concat(Array.prototype.slice.call(arguments));\n  return new (Function.prototype.bind.apply(ol.format.filter.Or, params));\n};\n\n\n/**\n * Represents a logical `<Not>` operator for a filter condition.\n *\n * @param {!ol.format.filter.Filter} condition Filter condition.\n * @returns {!ol.format.filter.Not} `<Not>` operator.\n * @api\n */\nol.format.filter.not = function(condition) {\n  return new ol.format.filter.Not(condition);\n};\n\n\n/**\n * Create a `<BBOX>` operator to test whether a geometry-valued property\n * intersects a fixed bounding box\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.Extent} extent Extent.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @returns {!ol.format.filter.Bbox} `<BBOX>` operator.\n * @api\n */\nol.format.filter.bbox = function(geometryName, extent, opt_srsName) {\n  return new ol.format.filter.Bbox(geometryName, extent, opt_srsName);\n};\n\n/**\n * Create a `<Contains>` operator to test whether a geometry-valued property\n * contains a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @returns {!ol.format.filter.Contains} `<Contains>` operator.\n * @api\n */\nol.format.filter.contains = function(geometryName, geometry, opt_srsName) {\n  return new ol.format.filter.Contains(geometryName, geometry, opt_srsName);\n};\n\n/**\n * Create a `<Intersects>` operator to test whether a geometry-valued property\n * intersects a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @returns {!ol.format.filter.Intersects} `<Intersects>` operator.\n * @api\n */\nol.format.filter.intersects = function(geometryName, geometry, opt_srsName) {\n  return new ol.format.filter.Intersects(geometryName, geometry, opt_srsName);\n};\n\n/**\n * Create a `<Within>` operator to test whether a geometry-valued property\n * is within a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!ol.geom.Geometry} geometry Geometry.\n * @param {string=} opt_srsName SRS name. No srsName attribute will be\n *    set on geometries when this is not provided.\n * @returns {!ol.format.filter.Within} `<Within>` operator.\n * @api\n */\nol.format.filter.within = function(geometryName, geometry, opt_srsName) {\n  return new ol.format.filter.Within(geometryName, geometry, opt_srsName);\n};\n\n\n/**\n * Creates a `<PropertyIsEqualTo>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @returns {!ol.format.filter.EqualTo} `<PropertyIsEqualTo>` operator.\n * @api\n */\nol.format.filter.equalTo = function(propertyName, expression, opt_matchCase) {\n  return new ol.format.filter.EqualTo(propertyName, expression, opt_matchCase);\n};\n\n\n/**\n * Creates a `<PropertyIsNotEqualTo>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @returns {!ol.format.filter.NotEqualTo} `<PropertyIsNotEqualTo>` operator.\n * @api\n */\nol.format.filter.notEqualTo = function(propertyName, expression, opt_matchCase) {\n  return new ol.format.filter.NotEqualTo(propertyName, expression, opt_matchCase);\n};\n\n\n/**\n * Creates a `<PropertyIsLessThan>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @returns {!ol.format.filter.LessThan} `<PropertyIsLessThan>` operator.\n * @api\n */\nol.format.filter.lessThan = function(propertyName, expression) {\n  return new ol.format.filter.LessThan(propertyName, expression);\n};\n\n\n/**\n * Creates a `<PropertyIsLessThanOrEqualTo>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @returns {!ol.format.filter.LessThanOrEqualTo} `<PropertyIsLessThanOrEqualTo>` operator.\n * @api\n */\nol.format.filter.lessThanOrEqualTo = function(propertyName, expression) {\n  return new ol.format.filter.LessThanOrEqualTo(propertyName, expression);\n};\n\n\n/**\n * Creates a `<PropertyIsGreaterThan>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @returns {!ol.format.filter.GreaterThan} `<PropertyIsGreaterThan>` operator.\n * @api\n */\nol.format.filter.greaterThan = function(propertyName, expression) {\n  return new ol.format.filter.GreaterThan(propertyName, expression);\n};\n\n\n/**\n * Creates a `<PropertyIsGreaterThanOrEqualTo>` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @returns {!ol.format.filter.GreaterThanOrEqualTo} `<PropertyIsGreaterThanOrEqualTo>` operator.\n * @api\n */\nol.format.filter.greaterThanOrEqualTo = function(propertyName, expression) {\n  return new ol.format.filter.GreaterThanOrEqualTo(propertyName, expression);\n};\n\n\n/**\n * Creates a `<PropertyIsNull>` comparison operator to test whether a property value\n * is null.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @returns {!ol.format.filter.IsNull} `<PropertyIsNull>` operator.\n * @api\n */\nol.format.filter.isNull = function(propertyName) {\n  return new ol.format.filter.IsNull(propertyName);\n};\n\n\n/**\n * Creates a `<PropertyIsBetween>` comparison operator to test whether an expression\n * value lies within a range given by a lower and upper bound (inclusive).\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} lowerBoundary The lower bound of the range.\n * @param {!number} upperBoundary The upper bound of the range.\n * @returns {!ol.format.filter.IsBetween} `<PropertyIsBetween>` operator.\n * @api\n */\nol.format.filter.between = function(propertyName, lowerBoundary, upperBoundary) {\n  return new ol.format.filter.IsBetween(propertyName, lowerBoundary, upperBoundary);\n};\n\n\n/**\n * Represents a `<PropertyIsLike>` comparison operator that matches a string property\n * value against a text pattern.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} pattern Text pattern.\n * @param {string=} opt_wildCard Pattern character which matches any sequence of\n *    zero or more string characters. Default is '*'.\n * @param {string=} opt_singleChar pattern character which matches any single\n *    string character. Default is '.'.\n * @param {string=} opt_escapeChar Escape character which can be used to escape\n *    the pattern characters. Default is '!'.\n * @param {boolean=} opt_matchCase Case-sensitive?\n * @returns {!ol.format.filter.IsLike} `<PropertyIsLike>` operator.\n * @api\n */\nol.format.filter.like = function(propertyName, pattern,\n    opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\n  return new ol.format.filter.IsLike(propertyName, pattern,\n      opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase);\n};\n\n\n/**\n * Create a `<During>` temporal operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} begin The begin date in ISO-8601 format.\n * @param {!string} end The end date in ISO-8601 format.\n * @returns {!ol.format.filter.During} `<During>` operator.\n * @api\n */\nol.format.filter.during = function(propertyName, begin, end) {\n  return new ol.format.filter.During(propertyName, begin, end);\n};\n\ngoog.provide('ol.geom.GeometryCollection');\n\ngoog.require('ol');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * An array of {@link ol.geom.Geometry} objects.\n *\n * @constructor\n * @extends {ol.geom.Geometry}\n * @param {Array.<ol.geom.Geometry>=} opt_geometries Geometries.\n * @api\n */\nol.geom.GeometryCollection = function(opt_geometries) {\n\n  ol.geom.Geometry.call(this);\n\n  /**\n   * @private\n   * @type {Array.<ol.geom.Geometry>}\n   */\n  this.geometries_ = opt_geometries ? opt_geometries : null;\n\n  this.listenGeometriesChange_();\n};\nol.inherits(ol.geom.GeometryCollection, ol.geom.Geometry);\n\n\n/**\n * @param {Array.<ol.geom.Geometry>} geometries Geometries.\n * @private\n * @return {Array.<ol.geom.Geometry>} Cloned geometries.\n */\nol.geom.GeometryCollection.cloneGeometries_ = function(geometries) {\n  var clonedGeometries = [];\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    clonedGeometries.push(geometries[i].clone());\n  }\n  return clonedGeometries;\n};\n\n\n/**\n * @private\n */\nol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() {\n  var i, ii;\n  if (!this.geometries_) {\n    return;\n  }\n  for (i = 0, ii = this.geometries_.length; i < ii; ++i) {\n    ol.events.unlisten(\n        this.geometries_[i], ol.events.EventType.CHANGE,\n        this.changed, this);\n  }\n};\n\n\n/**\n * @private\n */\nol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() {\n  var i, ii;\n  if (!this.geometries_) {\n    return;\n  }\n  for (i = 0, ii = this.geometries_.length; i < ii; ++i) {\n    ol.events.listen(\n        this.geometries_[i], ol.events.EventType.CHANGE,\n        this.changed, this);\n  }\n};\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.GeometryCollection} Clone.\n * @override\n * @api\n */\nol.geom.GeometryCollection.prototype.clone = function() {\n  var geometryCollection = new ol.geom.GeometryCollection(null);\n  geometryCollection.setGeometries(this.geometries_);\n  return geometryCollection;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.GeometryCollection.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  if (minSquaredDistance <\n      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {\n    return minSquaredDistance;\n  }\n  var geometries = this.geometries_;\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    minSquaredDistance = geometries[i].closestPointXY(\n        x, y, closestPoint, minSquaredDistance);\n  }\n  return minSquaredDistance;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.GeometryCollection.prototype.containsXY = function(x, y) {\n  var geometries = this.geometries_;\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    if (geometries[i].containsXY(x, y)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.GeometryCollection.prototype.computeExtent = function(extent) {\n  ol.extent.createOrUpdateEmpty(extent);\n  var geometries = this.geometries_;\n  for (var i = 0, ii = geometries.length; i < ii; ++i) {\n    ol.extent.extend(extent, geometries[i].getExtent());\n  }\n  return extent;\n};\n\n\n/**\n * Return the geometries that make up this geometry collection.\n * @return {Array.<ol.geom.Geometry>} Geometries.\n * @api\n */\nol.geom.GeometryCollection.prototype.getGeometries = function() {\n  return ol.geom.GeometryCollection.cloneGeometries_(this.geometries_);\n};\n\n\n/**\n * @return {Array.<ol.geom.Geometry>} Geometries.\n */\nol.geom.GeometryCollection.prototype.getGeometriesArray = function() {\n  return this.geometries_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.GeometryCollection.prototype.getSimplifiedGeometry = function(squaredTolerance) {\n  if (this.simplifiedGeometryRevision != this.getRevision()) {\n    ol.obj.clear(this.simplifiedGeometryCache);\n    this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n    this.simplifiedGeometryRevision = this.getRevision();\n  }\n  if (squaredTolerance < 0 ||\n      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n       squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)) {\n    return this;\n  }\n  var key = squaredTolerance.toString();\n  if (this.simplifiedGeometryCache.hasOwnProperty(key)) {\n    return this.simplifiedGeometryCache[key];\n  } else {\n    var simplifiedGeometries = [];\n    var geometries = this.geometries_;\n    var simplified = false;\n    var i, ii;\n    for (i = 0, ii = geometries.length; i < ii; ++i) {\n      var geometry = geometries[i];\n      var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);\n      simplifiedGeometries.push(simplifiedGeometry);\n      if (simplifiedGeometry !== geometry) {\n        simplified = true;\n      }\n    }\n    if (simplified) {\n      var simplifiedGeometryCollection = new ol.geom.GeometryCollection(null);\n      simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);\n      this.simplifiedGeometryCache[key] = simplifiedGeometryCollection;\n      return simplifiedGeometryCollection;\n    } else {\n      this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n      return this;\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.GeometryCollection.prototype.getType = function() {\n  return ol.geom.GeometryType.GEOMETRY_COLLECTION;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.GeometryCollection.prototype.intersectsExtent = function(extent) {\n  var geometries = this.geometries_;\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    if (geometries[i].intersectsExtent(extent)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n\n/**\n * @return {boolean} Is empty.\n */\nol.geom.GeometryCollection.prototype.isEmpty = function() {\n  return this.geometries_.length === 0;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.GeometryCollection.prototype.rotate = function(angle, anchor) {\n  var geometries = this.geometries_;\n  for (var i = 0, ii = geometries.length; i < ii; ++i) {\n    geometries[i].rotate(angle, anchor);\n  }\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.GeometryCollection.prototype.scale = function(sx, opt_sy, opt_anchor) {\n  var anchor = opt_anchor;\n  if (!anchor) {\n    anchor = ol.extent.getCenter(this.getExtent());\n  }\n  var geometries = this.geometries_;\n  for (var i = 0, ii = geometries.length; i < ii; ++i) {\n    geometries[i].scale(sx, opt_sy, anchor);\n  }\n  this.changed();\n};\n\n\n/**\n * Set the geometries that make up this geometry collection.\n * @param {Array.<ol.geom.Geometry>} geometries Geometries.\n * @api\n */\nol.geom.GeometryCollection.prototype.setGeometries = function(geometries) {\n  this.setGeometriesArray(\n      ol.geom.GeometryCollection.cloneGeometries_(geometries));\n};\n\n\n/**\n * @param {Array.<ol.geom.Geometry>} geometries Geometries.\n */\nol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) {\n  this.unlistenGeometriesChange_();\n  this.geometries_ = geometries;\n  this.listenGeometriesChange_();\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.GeometryCollection.prototype.applyTransform = function(transformFn) {\n  var geometries = this.geometries_;\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    geometries[i].applyTransform(transformFn);\n  }\n  this.changed();\n};\n\n\n/**\n * Translate the geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @override\n * @api\n */\nol.geom.GeometryCollection.prototype.translate = function(deltaX, deltaY) {\n  var geometries = this.geometries_;\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    geometries[i].translate(deltaX, deltaY);\n  }\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.GeometryCollection.prototype.disposeInternal = function() {\n  this.unlistenGeometriesChange_();\n  ol.geom.Geometry.prototype.disposeInternal.call(this);\n};\n\n// TODO: serialize dataProjection as crs member when writing\n// see https://github.com/openlayers/openlayers/issues/2078\n\ngoog.provide('ol.format.GeoJSON');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.JSONFeature');\ngoog.require('ol.geom.GeometryCollection');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GeoJSON format.\n *\n * @constructor\n * @extends {ol.format.JSONFeature}\n * @param {olx.format.GeoJSONOptions=} opt_options Options.\n * @api\n */\nol.format.GeoJSON = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.JSONFeature.call(this);\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get(\n      options.defaultDataProjection ?\n        options.defaultDataProjection : 'EPSG:4326');\n\n\n  if (options.featureProjection) {\n    this.defaultFeatureProjection = ol.proj.get(options.featureProjection);\n  }\n\n  /**\n   * Name of the geometry attribute for features.\n   * @type {string|undefined}\n   * @private\n   */\n  this.geometryName_ = options.geometryName;\n\n  /**\n   * Look for the geometry name in the feature GeoJSON\n   * @type {boolean|undefined}\n   * @private\n   */\n  this.extractGeometryName_ = options.extractGeometryName;\n\n};\nol.inherits(ol.format.GeoJSON, ol.format.JSONFeature);\n\n\n/**\n * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @private\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.GeoJSON.readGeometry_ = function(object, opt_options) {\n  if (!object) {\n    return null;\n  }\n  var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];\n  return /** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(\n        geometryReader(object), false, opt_options));\n};\n\n\n/**\n * @param {GeoJSONGeometryCollection} object Object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @private\n * @return {ol.geom.GeometryCollection} Geometry collection.\n */\nol.format.GeoJSON.readGeometryCollectionGeometry_ = function(\n    object, opt_options) {\n  var geometries = object.geometries.map(\n      /**\n       * @param {GeoJSONGeometry} geometry Geometry.\n       * @return {ol.geom.Geometry} geometry Geometry.\n       */\n      function(geometry) {\n        return ol.format.GeoJSON.readGeometry_(geometry, opt_options);\n      });\n  return new ol.geom.GeometryCollection(geometries);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Point} Point.\n */\nol.format.GeoJSON.readPointGeometry_ = function(object) {\n  return new ol.geom.Point(object.coordinates);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.LineString} LineString.\n */\nol.format.GeoJSON.readLineStringGeometry_ = function(object) {\n  return new ol.geom.LineString(object.coordinates);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.MultiLineString} MultiLineString.\n */\nol.format.GeoJSON.readMultiLineStringGeometry_ = function(object) {\n  return new ol.geom.MultiLineString(object.coordinates);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.MultiPoint} MultiPoint.\n */\nol.format.GeoJSON.readMultiPointGeometry_ = function(object) {\n  return new ol.geom.MultiPoint(object.coordinates);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.MultiPolygon} MultiPolygon.\n */\nol.format.GeoJSON.readMultiPolygonGeometry_ = function(object) {\n  return new ol.geom.MultiPolygon(object.coordinates);\n};\n\n\n/**\n * @param {GeoJSONGeometry} object Object.\n * @private\n * @return {ol.geom.Polygon} Polygon.\n */\nol.format.GeoJSON.readPolygonGeometry_ = function(object) {\n  return new ol.geom.Polygon(object.coordinates);\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry|GeoJSONGeometryCollection} GeoJSON geometry.\n */\nol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) {\n  var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];\n  return geometryWriter(/** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(geometry, true, opt_options)),\n  opt_options);\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @private\n * @return {GeoJSONGeometryCollection} Empty GeoJSON geometry collection.\n */\nol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ = function(geometry) {\n  return /** @type {GeoJSONGeometryCollection} */ ({\n    type: 'GeometryCollection',\n    geometries: []\n  });\n};\n\n\n/**\n * @param {ol.geom.GeometryCollection} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.\n */\nol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(\n    geometry, opt_options) {\n  var geometries = geometry.getGeometriesArray().map(function(geometry) {\n    var options = ol.obj.assign({}, opt_options);\n    delete options.featureProjection;\n    return ol.format.GeoJSON.writeGeometry_(geometry, options);\n  });\n  return /** @type {GeoJSONGeometryCollection} */ ({\n    type: 'GeometryCollection',\n    geometries: geometries\n  });\n};\n\n\n/**\n * @param {ol.geom.LineString} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writeLineStringGeometry_ = function(geometry, opt_options) {\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'LineString',\n    coordinates: geometry.getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.MultiLineString} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writeMultiLineStringGeometry_ = function(geometry, opt_options) {\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'MultiLineString',\n    coordinates: geometry.getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.MultiPoint} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writeMultiPointGeometry_ = function(geometry, opt_options) {\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'MultiPoint',\n    coordinates: geometry.getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.MultiPolygon} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry, opt_options) {\n  var right;\n  if (opt_options) {\n    right = opt_options.rightHanded;\n  }\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'MultiPolygon',\n    coordinates: geometry.getCoordinates(right)\n  });\n};\n\n\n/**\n * @param {ol.geom.Point} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writePointGeometry_ = function(geometry, opt_options) {\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'Point',\n    coordinates: geometry.getCoordinates()\n  });\n};\n\n\n/**\n * @param {ol.geom.Polygon} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @private\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nol.format.GeoJSON.writePolygonGeometry_ = function(geometry, opt_options) {\n  var right;\n  if (opt_options) {\n    right = opt_options.rightHanded;\n  }\n  return /** @type {GeoJSONGeometry} */ ({\n    type: 'Polygon',\n    coordinates: geometry.getCoordinates(right)\n  });\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<string, function(GeoJSONObject): ol.geom.Geometry>}\n */\nol.format.GeoJSON.GEOMETRY_READERS_ = {\n  'Point': ol.format.GeoJSON.readPointGeometry_,\n  'LineString': ol.format.GeoJSON.readLineStringGeometry_,\n  'Polygon': ol.format.GeoJSON.readPolygonGeometry_,\n  'MultiPoint': ol.format.GeoJSON.readMultiPointGeometry_,\n  'MultiLineString': ol.format.GeoJSON.readMultiLineStringGeometry_,\n  'MultiPolygon': ol.format.GeoJSON.readMultiPolygonGeometry_,\n  'GeometryCollection': ol.format.GeoJSON.readGeometryCollectionGeometry_\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<string, function(ol.geom.Geometry, olx.format.WriteOptions=): (GeoJSONGeometry|GeoJSONGeometryCollection)>}\n */\nol.format.GeoJSON.GEOMETRY_WRITERS_ = {\n  'Point': ol.format.GeoJSON.writePointGeometry_,\n  'LineString': ol.format.GeoJSON.writeLineStringGeometry_,\n  'Polygon': ol.format.GeoJSON.writePolygonGeometry_,\n  'MultiPoint': ol.format.GeoJSON.writeMultiPointGeometry_,\n  'MultiLineString': ol.format.GeoJSON.writeMultiLineStringGeometry_,\n  'MultiPolygon': ol.format.GeoJSON.writeMultiPolygonGeometry_,\n  'GeometryCollection': ol.format.GeoJSON.writeGeometryCollectionGeometry_,\n  'Circle': ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_\n};\n\n\n/**\n * Read a feature from a GeoJSON Feature source.  Only works for Feature or\n * geometry types.  Use {@link ol.format.GeoJSON#readFeatures} to read\n * FeatureCollection source. If feature at source has an id, it will be used\n * as Feature id by calling {@link ol.Feature#setId} internally.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.GeoJSON.prototype.readFeature;\n\n\n/**\n * Read all features from a GeoJSON source.  Works for all GeoJSON types.\n * If the source includes only geometries, features will be created with those\n * geometries.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.GeoJSON.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.GeoJSON.prototype.readFeatureFromObject = function(\n    object, opt_options) {\n  /**\n   * @type {GeoJSONFeature}\n   */\n  var geoJSONFeature = null;\n  if (object.type === 'Feature') {\n    geoJSONFeature = /** @type {GeoJSONFeature} */ (object);\n  } else {\n    geoJSONFeature = /** @type {GeoJSONFeature} */ ({\n      type: 'Feature',\n      geometry: /** @type {GeoJSONGeometry|GeoJSONGeometryCollection} */ (object)\n    });\n  }\n\n  var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry, opt_options);\n  var feature = new ol.Feature();\n  if (this.geometryName_) {\n    feature.setGeometryName(this.geometryName_);\n  } else if (this.extractGeometryName_ && geoJSONFeature.geometry_name !== undefined) {\n    feature.setGeometryName(geoJSONFeature.geometry_name);\n  }\n  feature.setGeometry(geometry);\n  if (geoJSONFeature.id !== undefined) {\n    feature.setId(geoJSONFeature.id);\n  }\n  if (geoJSONFeature.properties) {\n    feature.setProperties(geoJSONFeature.properties);\n  }\n  return feature;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.GeoJSON.prototype.readFeaturesFromObject = function(\n    object, opt_options) {\n  var geoJSONObject = /** @type {GeoJSONObject} */ (object);\n  /** @type {Array.<ol.Feature>} */\n  var features = null;\n  if (geoJSONObject.type === 'FeatureCollection') {\n    var geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */\n        (object);\n    features = [];\n    var geoJSONFeatures = geoJSONFeatureCollection.features;\n    var i, ii;\n    for (i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {\n      features.push(this.readFeatureFromObject(geoJSONFeatures[i],\n          opt_options));\n    }\n  } else {\n    features = [this.readFeatureFromObject(object, opt_options)];\n  }\n  return features;\n};\n\n\n/**\n * Read a geometry from a GeoJSON source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.geom.Geometry} Geometry.\n * @api\n */\nol.format.GeoJSON.prototype.readGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.GeoJSON.prototype.readGeometryFromObject = function(\n    object, opt_options) {\n  return ol.format.GeoJSON.readGeometry_(\n      /** @type {GeoJSONGeometry} */ (object), opt_options);\n};\n\n\n/**\n * Read the projection from a GeoJSON source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.GeoJSON.prototype.readProjection;\n\n\n/**\n * @inheritDoc\n */\nol.format.GeoJSON.prototype.readProjectionFromObject = function(object) {\n  var geoJSONObject = /** @type {GeoJSONObject} */ (object);\n  var crs = geoJSONObject.crs;\n  var projection;\n  if (crs) {\n    if (crs.type == 'name') {\n      projection = ol.proj.get(crs.properties.name);\n    } else {\n      ol.asserts.assert(false, 36); // Unknown SRS type\n    }\n  } else {\n    projection = this.defaultDataProjection;\n  }\n  return /** @type {ol.proj.Projection} */ (projection);\n};\n\n\n/**\n * Encode a feature as a GeoJSON Feature string.\n *\n * @function\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} GeoJSON.\n * @override\n * @api\n */\nol.format.GeoJSON.prototype.writeFeature;\n\n\n/**\n * Encode a feature as a GeoJSON Feature object.\n *\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {GeoJSONFeature} Object.\n * @override\n * @api\n */\nol.format.GeoJSON.prototype.writeFeatureObject = function(feature, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n\n  var object = /** @type {GeoJSONFeature} */ ({\n    'type': 'Feature'\n  });\n  var id = feature.getId();\n  if (id !== undefined) {\n    object.id = id;\n  }\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    object.geometry =\n        ol.format.GeoJSON.writeGeometry_(geometry, opt_options);\n  } else {\n    object.geometry = null;\n  }\n  var properties = feature.getProperties();\n  delete properties[feature.getGeometryName()];\n  if (!ol.obj.isEmpty(properties)) {\n    object.properties = properties;\n  } else {\n    object.properties = null;\n  }\n  return object;\n};\n\n\n/**\n * Encode an array of features as GeoJSON.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} GeoJSON.\n * @api\n */\nol.format.GeoJSON.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features as a GeoJSON object.\n *\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {GeoJSONFeatureCollection} GeoJSON Object.\n * @override\n * @api\n */\nol.format.GeoJSON.prototype.writeFeaturesObject = function(features, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var objects = [];\n  var i, ii;\n  for (i = 0, ii = features.length; i < ii; ++i) {\n    objects.push(this.writeFeatureObject(features[i], opt_options));\n  }\n  return /** @type {GeoJSONFeatureCollection} */ ({\n    type: 'FeatureCollection',\n    features: objects\n  });\n};\n\n\n/**\n * Encode a geometry as a GeoJSON string.\n *\n * @function\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} GeoJSON.\n * @api\n */\nol.format.GeoJSON.prototype.writeGeometry;\n\n\n/**\n * Encode a geometry as a GeoJSON object.\n *\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.\n * @override\n * @api\n */\nol.format.GeoJSON.prototype.writeGeometryObject = function(geometry,\n    opt_options) {\n  return ol.format.GeoJSON.writeGeometry_(geometry,\n      this.adaptOptions(opt_options));\n};\n\ngoog.provide('ol.format.XMLFeature');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.FormatType');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for XML feature formats.\n *\n * @constructor\n * @abstract\n * @extends {ol.format.Feature}\n */\nol.format.XMLFeature = function() {\n\n  /**\n   * @type {XMLSerializer}\n   * @private\n   */\n  this.xmlSerializer_ = new XMLSerializer();\n\n  ol.format.Feature.call(this);\n};\nol.inherits(ol.format.XMLFeature, ol.format.Feature);\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.getType = function() {\n  return ol.format.FormatType.XML;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.readFeature = function(source, opt_options) {\n  if (ol.xml.isDocument(source)) {\n    return this.readFeatureFromDocument(\n        /** @type {Document} */ (source), opt_options);\n  } else if (ol.xml.isNode(source)) {\n    return this.readFeatureFromNode(/** @type {Node} */ (source), opt_options);\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readFeatureFromDocument(doc, opt_options);\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @return {ol.Feature} Feature.\n */\nol.format.XMLFeature.prototype.readFeatureFromDocument = function(\n    doc, opt_options) {\n  var features = this.readFeaturesFromDocument(doc, opt_options);\n  if (features.length > 0) {\n    return features[0];\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @return {ol.Feature} Feature.\n */\nol.format.XMLFeature.prototype.readFeatureFromNode = function(node, opt_options) {\n  return null; // not implemented\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.readFeatures = function(source, opt_options) {\n  if (ol.xml.isDocument(source)) {\n    return this.readFeaturesFromDocument(\n        /** @type {Document} */ (source), opt_options);\n  } else if (ol.xml.isNode(source)) {\n    return this.readFeaturesFromNode(/** @type {Node} */ (source), opt_options);\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readFeaturesFromDocument(doc, opt_options);\n  } else {\n    return [];\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @protected\n * @return {Array.<ol.Feature>} Features.\n */\nol.format.XMLFeature.prototype.readFeaturesFromDocument = function(\n    doc, opt_options) {\n  /** @type {Array.<ol.Feature>} */\n  var features = [];\n  var n;\n  for (n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      ol.array.extend(features, this.readFeaturesFromNode(n, opt_options));\n    }\n  }\n  return features;\n};\n\n\n/**\n * @abstract\n * @param {Node} node Node.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @protected\n * @return {Array.<ol.Feature>} Features.\n */\nol.format.XMLFeature.prototype.readFeaturesFromNode = function(node, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.readGeometry = function(source, opt_options) {\n  if (ol.xml.isDocument(source)) {\n    return this.readGeometryFromDocument(\n        /** @type {Document} */ (source), opt_options);\n  } else if (ol.xml.isNode(source)) {\n    return this.readGeometryFromNode(/** @type {Node} */ (source), opt_options);\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readGeometryFromDocument(doc, opt_options);\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @protected\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.XMLFeature.prototype.readGeometryFromDocument = function(doc, opt_options) {\n  return null; // not implemented\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @protected\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.XMLFeature.prototype.readGeometryFromNode = function(node, opt_options) {\n  return null; // not implemented\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.readProjection = function(source) {\n  if (ol.xml.isDocument(source)) {\n    return this.readProjectionFromDocument(/** @type {Document} */ (source));\n  } else if (ol.xml.isNode(source)) {\n    return this.readProjectionFromNode(/** @type {Node} */ (source));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readProjectionFromDocument(doc);\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @protected\n * @return {ol.proj.Projection} Projection.\n */\nol.format.XMLFeature.prototype.readProjectionFromDocument = function(doc) {\n  return this.defaultDataProjection;\n};\n\n\n/**\n * @param {Node} node Node.\n * @protected\n * @return {ol.proj.Projection} Projection.\n */\nol.format.XMLFeature.prototype.readProjectionFromNode = function(node) {\n  return this.defaultDataProjection;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.writeFeature = function(feature, opt_options) {\n  var node = this.writeFeatureNode(feature, opt_options);\n  return this.xmlSerializer_.serializeToString(node);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @protected\n * @return {Node} Node.\n */\nol.format.XMLFeature.prototype.writeFeatureNode = function(feature, opt_options) {\n  return null; // not implemented\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.writeFeatures = function(features, opt_options) {\n  var node = this.writeFeaturesNode(features, opt_options);\n  return this.xmlSerializer_.serializeToString(node);\n};\n\n\n/**\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n */\nol.format.XMLFeature.prototype.writeFeaturesNode = function(features, opt_options) {\n  return null; // not implemented\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.XMLFeature.prototype.writeGeometry = function(geometry, opt_options) {\n  var node = this.writeGeometryNode(geometry, opt_options);\n  return this.xmlSerializer_.serializeToString(node);\n};\n\n\n/**\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n */\nol.format.XMLFeature.prototype.writeGeometryNode = function(geometry, opt_options) {\n  return null; // not implemented\n};\n\n// FIXME Envelopes should not be treated as geometries! readEnvelope_ is part\n// of GEOMETRY_PARSERS_ and methods using GEOMETRY_PARSERS_ do not expect\n// envelopes/extents, only geometries!\ngoog.provide('ol.format.GMLBase');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.LinearRing');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Feature base format for reading and writing data in the GML format.\n * This class cannot be instantiated, it contains only base content that\n * is shared with versioned format classes ol.format.GML2 and\n * ol.format.GML3.\n *\n * @constructor\n * @abstract\n * @param {olx.format.GMLOptions=} opt_options\n *     Optional configuration object.\n * @extends {ol.format.XMLFeature}\n */\nol.format.GMLBase = function(opt_options) {\n  var options = /** @type {olx.format.GMLOptions} */\n      (opt_options ? opt_options : {});\n\n  /**\n   * @protected\n   * @type {Array.<string>|string|undefined}\n   */\n  this.featureType = options.featureType;\n\n  /**\n   * @protected\n   * @type {Object.<string, string>|string|undefined}\n   */\n  this.featureNS = options.featureNS;\n\n  /**\n   * @protected\n   * @type {string}\n   */\n  this.srsName = options.srsName;\n\n  /**\n   * @protected\n   * @type {string}\n   */\n  this.schemaLocation = '';\n\n  /**\n   * @type {Object.<string, Object.<string, Object>>}\n   */\n  this.FEATURE_COLLECTION_PARSERS = {};\n  this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS] = {\n    'featureMember': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readFeaturesInternal),\n    'featureMembers': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readFeaturesInternal)\n  };\n\n  ol.format.XMLFeature.call(this);\n};\nol.inherits(ol.format.GMLBase, ol.format.XMLFeature);\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.GMLBase.GMLNS = 'http://www.opengis.net/gml';\n\n\n/**\n * A regular expression that matches if a string only contains whitespace\n * characters. It will e.g. match `''`, `' '`, `'\\n'` etc. The non-breaking\n * space (0xa0) is explicitly included as IE doesn't include it in its\n * definition of `\\s`.\n *\n * Information from `goog.string.isEmptyOrWhitespace`: https://github.com/google/closure-library/blob/e877b1e/closure/goog/string/string.js#L156-L160\n *\n * @const\n * @type {RegExp}\n * @private\n */\nol.format.GMLBase.ONLY_WHITESPACE_RE_ = /^[\\s\\xa0]*$/;\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Array.<ol.Feature> | undefined} Features.\n */\nol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {\n  var localName = node.localName;\n  var features = null;\n  if (localName == 'FeatureCollection') {\n    if (node.namespaceURI === 'http://www.opengis.net/wfs') {\n      features = ol.xml.pushParseAndPop([],\n          this.FEATURE_COLLECTION_PARSERS, node,\n          objectStack, this);\n    } else {\n      features = ol.xml.pushParseAndPop(null,\n          this.FEATURE_COLLECTION_PARSERS, node,\n          objectStack, this);\n    }\n  } else if (localName == 'featureMembers' || localName == 'featureMember') {\n    var context = objectStack[0];\n    var featureType = context['featureType'];\n    var featureNS = context['featureNS'];\n    var i, ii, prefix = 'p', defaultPrefix = 'p0';\n    if (!featureType && node.childNodes) {\n      featureType = [], featureNS = {};\n      for (i = 0, ii = node.childNodes.length; i < ii; ++i) {\n        var child = node.childNodes[i];\n        if (child.nodeType === 1) {\n          var ft = child.nodeName.split(':').pop();\n          if (featureType.indexOf(ft) === -1) {\n            var key = '';\n            var count = 0;\n            var uri = child.namespaceURI;\n            for (var candidate in featureNS) {\n              if (featureNS[candidate] === uri) {\n                key = candidate;\n                break;\n              }\n              ++count;\n            }\n            if (!key) {\n              key = prefix + count;\n              featureNS[key] = uri;\n            }\n            featureType.push(key + ':' + ft);\n          }\n        }\n      }\n      if (localName != 'featureMember') {\n        // recheck featureType for each featureMember\n        context['featureType'] = featureType;\n        context['featureNS'] = featureNS;\n      }\n    }\n    if (typeof featureNS === 'string') {\n      var ns = featureNS;\n      featureNS = {};\n      featureNS[defaultPrefix] = ns;\n    }\n    var parsersNS = {};\n    var featureTypes = Array.isArray(featureType) ? featureType : [featureType];\n    for (var p in featureNS) {\n      var parsers = {};\n      for (i = 0, ii = featureTypes.length; i < ii; ++i) {\n        var featurePrefix = featureTypes[i].indexOf(':') === -1 ?\n          defaultPrefix : featureTypes[i].split(':')[0];\n        if (featurePrefix === p) {\n          parsers[featureTypes[i].split(':').pop()] =\n              (localName == 'featureMembers') ?\n                ol.xml.makeArrayPusher(this.readFeatureElement, this) :\n                ol.xml.makeReplacer(this.readFeatureElement, this);\n        }\n      }\n      parsersNS[featureNS[p]] = parsers;\n    }\n    if (localName == 'featureMember') {\n      features = ol.xml.pushParseAndPop(undefined, parsersNS, node, objectStack);\n    } else {\n      features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);\n    }\n  }\n  if (features === null) {\n    features = [];\n  }\n  return features;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.Geometry|undefined} Geometry.\n */\nol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {\n  var context = /** @type {Object} */ (objectStack[0]);\n  context['srsName'] = node.firstElementChild.getAttribute('srsName');\n  context['srsDimension'] = node.firstElementChild.getAttribute('srsDimension');\n  /** @type {ol.geom.Geometry} */\n  var geometry = ol.xml.pushParseAndPop(null,\n      this.GEOMETRY_PARSERS_, node, objectStack, this);\n  if (geometry) {\n    return /** @type {ol.geom.Geometry} */ (\n      ol.format.Feature.transformWithOptions(geometry, false, context));\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.Feature} Feature.\n */\nol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {\n  var n;\n  var fid = node.getAttribute('fid') ||\n      ol.xml.getAttributeNS(node, ol.format.GMLBase.GMLNS, 'id');\n  var values = {}, geometryName;\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    var localName = n.localName;\n    // Assume attribute elements have one child node and that the child\n    // is a text or CDATA node (to be treated as text).\n    // Otherwise assume it is a geometry node.\n    if (n.childNodes.length === 0 ||\n        (n.childNodes.length === 1 &&\n        (n.firstChild.nodeType === 3 || n.firstChild.nodeType === 4))) {\n      var value = ol.xml.getAllTextContent(n, false);\n      if (ol.format.GMLBase.ONLY_WHITESPACE_RE_.test(value)) {\n        value = undefined;\n      }\n      values[localName] = value;\n    } else {\n      // boundedBy is an extent and must not be considered as a geometry\n      if (localName !== 'boundedBy') {\n        geometryName = localName;\n      }\n      values[localName] = this.readGeometryElement(n, objectStack);\n    }\n  }\n  var feature = new ol.Feature(values);\n  if (geometryName) {\n    feature.setGeometryName(geometryName);\n  }\n  if (fid) {\n    feature.setId(fid);\n  }\n  return feature;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.Point|undefined} Point.\n */\nol.format.GMLBase.prototype.readPoint = function(node, objectStack) {\n  var flatCoordinates =\n      this.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var point = new ol.geom.Point(null);\n    point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    return point;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.MultiPoint|undefined} MultiPoint.\n */\nol.format.GMLBase.prototype.readMultiPoint = function(node, objectStack) {\n  /** @type {Array.<Array.<number>>} */\n  var coordinates = ol.xml.pushParseAndPop([],\n      this.MULTIPOINT_PARSERS_, node, objectStack, this);\n  if (coordinates) {\n    return new ol.geom.MultiPoint(coordinates);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.MultiLineString|undefined} MultiLineString.\n */\nol.format.GMLBase.prototype.readMultiLineString = function(node, objectStack) {\n  /** @type {Array.<ol.geom.LineString>} */\n  var lineStrings = ol.xml.pushParseAndPop([],\n      this.MULTILINESTRING_PARSERS_, node, objectStack, this);\n  if (lineStrings) {\n    var multiLineString = new ol.geom.MultiLineString(null);\n    multiLineString.setLineStrings(lineStrings);\n    return multiLineString;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.MultiPolygon|undefined} MultiPolygon.\n */\nol.format.GMLBase.prototype.readMultiPolygon = function(node, objectStack) {\n  /** @type {Array.<ol.geom.Polygon>} */\n  var polygons = ol.xml.pushParseAndPop([],\n      this.MULTIPOLYGON_PARSERS_, node, objectStack, this);\n  if (polygons) {\n    var multiPolygon = new ol.geom.MultiPolygon(null);\n    multiPolygon.setPolygons(polygons);\n    return multiPolygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GMLBase.prototype.pointMemberParser_ = function(node, objectStack) {\n  ol.xml.parseNode(this.POINTMEMBER_PARSERS_,\n      node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GMLBase.prototype.lineStringMemberParser_ = function(node, objectStack) {\n  ol.xml.parseNode(this.LINESTRINGMEMBER_PARSERS_,\n      node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GMLBase.prototype.polygonMemberParser_ = function(node, objectStack) {\n  ol.xml.parseNode(this.POLYGONMEMBER_PARSERS_, node,\n      objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.LineString|undefined} LineString.\n */\nol.format.GMLBase.prototype.readLineString = function(node, objectStack) {\n  var flatCoordinates =\n      this.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var lineString = new ol.geom.LineString(null);\n    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    return lineString;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} LinearRing flat coordinates.\n */\nol.format.GMLBase.prototype.readFlatLinearRing_ = function(node, objectStack) {\n  var ring = ol.xml.pushParseAndPop(null,\n      this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,\n      objectStack, this);\n  if (ring) {\n    return ring;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.LinearRing|undefined} LinearRing.\n */\nol.format.GMLBase.prototype.readLinearRing = function(node, objectStack) {\n  var flatCoordinates =\n      this.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var ring = new ol.geom.LinearRing(null);\n    ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    return ring;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.geom.Polygon|undefined} Polygon.\n */\nol.format.GMLBase.prototype.readPolygon = function(node, objectStack) {\n  /** @type {Array.<Array.<number>>} */\n  var flatLinearRings = ol.xml.pushParseAndPop([null],\n      this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);\n  if (flatLinearRings && flatLinearRings[0]) {\n    var polygon = new ol.geom.Polygon(null);\n    var flatCoordinates = flatLinearRings[0];\n    var ends = [flatCoordinates.length];\n    var i, ii;\n    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n      ol.array.extend(flatCoordinates, flatLinearRings[i]);\n      ends.push(flatCoordinates.length);\n    }\n    polygon.setFlatCoordinates(\n        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);\n    return polygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>} Flat coordinates.\n */\nol.format.GMLBase.prototype.readFlatCoordinatesFromNode_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(null,\n      this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,\n      objectStack, this);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.MULTIPOINT_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'pointMember': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.pointMemberParser_),\n    'pointMembers': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.pointMemberParser_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.MULTILINESTRING_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'lineStringMember': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.lineStringMemberParser_),\n    'lineStringMembers': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.lineStringMemberParser_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.MULTIPOLYGON_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'polygonMember': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.polygonMemberParser_),\n    'polygonMembers': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.polygonMemberParser_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.POINTMEMBER_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'Point': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.readFlatCoordinatesFromNode_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.LINESTRINGMEMBER_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'LineString': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.readLineString)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GMLBase.prototype.POLYGONMEMBER_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'Polygon': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.readPolygon)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @protected\n */\nol.format.GMLBase.prototype.RING_PARSERS = {\n  'http://www.opengis.net/gml': {\n    'LinearRing': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readFlatLinearRing_)\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.GMLBase.prototype.readGeometryFromNode = function(node, opt_options) {\n  var geometry = this.readGeometryElement(node,\n      [this.getReadOptions(node, opt_options ? opt_options : {})]);\n  return geometry ? geometry : null;\n};\n\n\n/**\n * Read all features from a GML FeatureCollection.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.GMLBase.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.GMLBase.prototype.readFeaturesFromNode = function(node, opt_options) {\n  var options = {\n    featureType: this.featureType,\n    featureNS: this.featureNS\n  };\n  if (opt_options) {\n    ol.obj.assign(options, this.getReadOptions(node, opt_options));\n  }\n  var features = this.readFeaturesInternal(node, [options]);\n  return features || [];\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.GMLBase.prototype.readProjectionFromNode = function(node) {\n  return ol.proj.get(this.srsName ? this.srsName :\n    node.firstElementChild.getAttribute('srsName'));\n};\n\ngoog.provide('ol.format.XSD');\n\ngoog.require('ol.xml');\ngoog.require('ol.string');\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.XSD.NAMESPACE_URI = 'http://www.w3.org/2001/XMLSchema';\n\n\n/**\n * @param {Node} node Node.\n * @return {boolean|undefined} Boolean.\n */\nol.format.XSD.readBoolean = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  return ol.format.XSD.readBooleanString(s);\n};\n\n\n/**\n * @param {string} string String.\n * @return {boolean|undefined} Boolean.\n */\nol.format.XSD.readBooleanString = function(string) {\n  var m = /^\\s*(true|1)|(false|0)\\s*$/.exec(string);\n  if (m) {\n    return m[1] !== undefined || false;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} DateTime in seconds.\n */\nol.format.XSD.readDateTime = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  var dateTime = Date.parse(s);\n  return isNaN(dateTime) ? undefined : dateTime / 1000;\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Decimal.\n */\nol.format.XSD.readDecimal = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  return ol.format.XSD.readDecimalString(s);\n};\n\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Decimal.\n */\nol.format.XSD.readDecimalString = function(string) {\n  // FIXME check spec\n  var m = /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*$/i.exec(string);\n  if (m) {\n    return parseFloat(m[1]);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Non negative integer.\n */\nol.format.XSD.readNonNegativeInteger = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  return ol.format.XSD.readNonNegativeIntegerString(s);\n};\n\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Non negative integer.\n */\nol.format.XSD.readNonNegativeIntegerString = function(string) {\n  var m = /^\\s*(\\d+)\\s*$/.exec(string);\n  if (m) {\n    return parseInt(m[1], 10);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {string|undefined} String.\n */\nol.format.XSD.readString = function(node) {\n  return ol.xml.getAllTextContent(node, false).trim();\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the boolean to.\n * @param {boolean} bool Boolean.\n */\nol.format.XSD.writeBooleanTextNode = function(node, bool) {\n  ol.format.XSD.writeStringTextNode(node, (bool) ? '1' : '0');\n};\n\n\n/**\n * @param {Node} node Node to append a CDATA Section with the string to.\n * @param {string} string String.\n */\nol.format.XSD.writeCDATASection = function(node, string) {\n  node.appendChild(ol.xml.DOCUMENT.createCDATASection(string));\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the dateTime to.\n * @param {number} dateTime DateTime in seconds.\n */\nol.format.XSD.writeDateTimeTextNode = function(node, dateTime) {\n  var date = new Date(dateTime * 1000);\n  var string = date.getUTCFullYear() + '-' +\n      ol.string.padNumber(date.getUTCMonth() + 1, 2) + '-' +\n      ol.string.padNumber(date.getUTCDate(), 2) + 'T' +\n      ol.string.padNumber(date.getUTCHours(), 2) + ':' +\n      ol.string.padNumber(date.getUTCMinutes(), 2) + ':' +\n      ol.string.padNumber(date.getUTCSeconds(), 2) + 'Z';\n  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} decimal Decimal.\n */\nol.format.XSD.writeDecimalTextNode = function(node, decimal) {\n  var string = decimal.toPrecision();\n  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} nonNegativeInteger Non negative integer.\n */\nol.format.XSD.writeNonNegativeIntegerTextNode = function(node, nonNegativeInteger) {\n  var string = nonNegativeInteger.toString();\n  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the string to.\n * @param {string} string String.\n */\nol.format.XSD.writeStringTextNode = function(node, string) {\n  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));\n};\n\ngoog.provide('ol.format.GML3');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.GMLBase');\ngoog.require('ol.format.XSD');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GML format\n * version 3.1.1.\n * Currently only supports GML 3.1.1 Simple Features profile.\n *\n * @constructor\n * @param {olx.format.GMLOptions=} opt_options\n *     Optional configuration object.\n * @extends {ol.format.GMLBase}\n * @api\n */\nol.format.GML3 = function(opt_options) {\n  var options = /** @type {olx.format.GMLOptions} */\n      (opt_options ? opt_options : {});\n\n  ol.format.GMLBase.call(this, options);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.surface_ = options.surface !== undefined ? options.surface : false;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.curve_ = options.curve !== undefined ? options.curve : false;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.multiCurve_ = options.multiCurve !== undefined ?\n    options.multiCurve : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.multiSurface_ = options.multiSurface !== undefined ?\n    options.multiSurface : true;\n\n  /**\n   * @inheritDoc\n   */\n  this.schemaLocation = options.schemaLocation ?\n    options.schemaLocation : ol.format.GML3.schemaLocation_;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hasZ = options.hasZ !== undefined ?\n    options.hasZ : false;\n\n};\nol.inherits(ol.format.GML3, ol.format.GMLBase);\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.GML3.schemaLocation_ = ol.format.GMLBase.GMLNS +\n    ' http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +\n    '1.0.0/gmlsf.xsd';\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.MultiLineString|undefined} MultiLineString.\n */\nol.format.GML3.prototype.readMultiCurve_ = function(node, objectStack) {\n  /** @type {Array.<ol.geom.LineString>} */\n  var lineStrings = ol.xml.pushParseAndPop([],\n      this.MULTICURVE_PARSERS_, node, objectStack, this);\n  if (lineStrings) {\n    var multiLineString = new ol.geom.MultiLineString(null);\n    multiLineString.setLineStrings(lineStrings);\n    return multiLineString;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.MultiPolygon|undefined} MultiPolygon.\n */\nol.format.GML3.prototype.readMultiSurface_ = function(node, objectStack) {\n  /** @type {Array.<ol.geom.Polygon>} */\n  var polygons = ol.xml.pushParseAndPop([],\n      this.MULTISURFACE_PARSERS_, node, objectStack, this);\n  if (polygons) {\n    var multiPolygon = new ol.geom.MultiPolygon(null);\n    multiPolygon.setPolygons(polygons);\n    return multiPolygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML3.prototype.curveMemberParser_ = function(node, objectStack) {\n  ol.xml.parseNode(this.CURVEMEMBER_PARSERS_, node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML3.prototype.surfaceMemberParser_ = function(node, objectStack) {\n  ol.xml.parseNode(this.SURFACEMEMBER_PARSERS_,\n      node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<(Array.<number>)>|undefined} flat coordinates.\n */\nol.format.GML3.prototype.readPatch_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop([null],\n      this.PATCHES_PARSERS_, node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} flat coordinates.\n */\nol.format.GML3.prototype.readSegment_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop([null],\n      this.SEGMENTS_PARSERS_, node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<(Array.<number>)>|undefined} flat coordinates.\n */\nol.format.GML3.prototype.readPolygonPatch_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop([null],\n      this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} flat coordinates.\n */\nol.format.GML3.prototype.readLineStringSegment_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop([null],\n      this.GEOMETRY_FLAT_COORDINATES_PARSERS_,\n      node, objectStack, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML3.prototype.interiorParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      this.RING_PARSERS, node, objectStack, this);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings.push(flatLinearRing);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML3.prototype.exteriorParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      this.RING_PARSERS, node, objectStack, this);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings[0] = flatLinearRing;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.Polygon|undefined} Polygon.\n */\nol.format.GML3.prototype.readSurface_ = function(node, objectStack) {\n  /** @type {Array.<Array.<number>>} */\n  var flatLinearRings = ol.xml.pushParseAndPop([null],\n      this.SURFACE_PARSERS_, node, objectStack, this);\n  if (flatLinearRings && flatLinearRings[0]) {\n    var polygon = new ol.geom.Polygon(null);\n    var flatCoordinates = flatLinearRings[0];\n    var ends = [flatCoordinates.length];\n    var i, ii;\n    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n      ol.array.extend(flatCoordinates, flatLinearRings[i]);\n      ends.push(flatCoordinates.length);\n    }\n    polygon.setFlatCoordinates(\n        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);\n    return polygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.LineString|undefined} LineString.\n */\nol.format.GML3.prototype.readCurve_ = function(node, objectStack) {\n  /** @type {Array.<number>} */\n  var flatCoordinates = ol.xml.pushParseAndPop([null],\n      this.CURVE_PARSERS_, node, objectStack, this);\n  if (flatCoordinates) {\n    var lineString = new ol.geom.LineString(null);\n    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    return lineString;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Extent|undefined} Envelope.\n */\nol.format.GML3.prototype.readEnvelope_ = function(node, objectStack) {\n  /** @type {Array.<number>} */\n  var flatCoordinates = ol.xml.pushParseAndPop([null],\n      this.ENVELOPE_PARSERS_, node, objectStack, this);\n  return ol.extent.createOrUpdate(flatCoordinates[1][0],\n      flatCoordinates[1][1], flatCoordinates[2][0],\n      flatCoordinates[2][1]);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} Flat coordinates.\n */\nol.format.GML3.prototype.readFlatPos_ = function(node, objectStack) {\n  var s = ol.xml.getAllTextContent(node, false);\n  var re = /^\\s*([+\\-]?\\d*\\.?\\d+(?:[eE][+\\-]?\\d+)?)\\s*/;\n  /** @type {Array.<number>} */\n  var flatCoordinates = [];\n  var m;\n  while ((m = re.exec(s))) {\n    flatCoordinates.push(parseFloat(m[1]));\n    s = s.substr(m[0].length);\n  }\n  if (s !== '') {\n    return undefined;\n  }\n  var context = objectStack[0];\n  var containerSrs = context['srsName'];\n  var axisOrientation = 'enu';\n  if (containerSrs) {\n    var proj = ol.proj.get(containerSrs);\n    axisOrientation = proj.getAxisOrientation();\n  }\n  if (axisOrientation === 'neu') {\n    var i, ii;\n    for (i = 0, ii = flatCoordinates.length; i < ii; i += 3) {\n      var y = flatCoordinates[i];\n      var x = flatCoordinates[i + 1];\n      flatCoordinates[i] = x;\n      flatCoordinates[i + 1] = y;\n    }\n  }\n  var len = flatCoordinates.length;\n  if (len == 2) {\n    flatCoordinates.push(0);\n  }\n  if (len === 0) {\n    return undefined;\n  }\n  return flatCoordinates;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} Flat coordinates.\n */\nol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {\n  var s = ol.xml.getAllTextContent(node, false).replace(/^\\s*|\\s*$/g, '');\n  var context = objectStack[0];\n  var containerSrs = context['srsName'];\n  var contextDimension = context['srsDimension'];\n  var axisOrientation = 'enu';\n  if (containerSrs) {\n    var proj = ol.proj.get(containerSrs);\n    axisOrientation = proj.getAxisOrientation();\n  }\n  var coords = s.split(/\\s+/);\n  // The \"dimension\" attribute is from the GML 3.0.1 spec.\n  var dim = 2;\n  if (node.getAttribute('srsDimension')) {\n    dim = ol.format.XSD.readNonNegativeIntegerString(\n        node.getAttribute('srsDimension'));\n  } else if (node.getAttribute('dimension')) {\n    dim = ol.format.XSD.readNonNegativeIntegerString(\n        node.getAttribute('dimension'));\n  } else if (node.parentNode.getAttribute('srsDimension')) {\n    dim = ol.format.XSD.readNonNegativeIntegerString(\n        node.parentNode.getAttribute('srsDimension'));\n  } else if (contextDimension) {\n    dim = ol.format.XSD.readNonNegativeIntegerString(contextDimension);\n  }\n  var x, y, z;\n  var flatCoordinates = [];\n  for (var i = 0, ii = coords.length; i < ii; i += dim) {\n    x = parseFloat(coords[i]);\n    y = parseFloat(coords[i + 1]);\n    z = (dim === 3) ? parseFloat(coords[i + 2]) : 0;\n    if (axisOrientation.substr(0, 2) === 'en') {\n      flatCoordinates.push(x, y, z);\n    } else {\n      flatCoordinates.push(y, x, z);\n    }\n  }\n  return flatCoordinates;\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'pos': ol.xml.makeReplacer(ol.format.GML3.prototype.readFlatPos_),\n    'posList': ol.xml.makeReplacer(ol.format.GML3.prototype.readFlatPosList_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.FLAT_LINEAR_RINGS_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'interior': ol.format.GML3.prototype.interiorParser_,\n    'exterior': ol.format.GML3.prototype.exteriorParser_\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.GEOMETRY_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'Point': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPoint),\n    'MultiPoint': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiPoint),\n    'LineString': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readLineString),\n    'MultiLineString': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiLineString),\n    'LinearRing': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readLinearRing),\n    'Polygon': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPolygon),\n    'MultiPolygon': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiPolygon),\n    'Surface': ol.xml.makeReplacer(ol.format.GML3.prototype.readSurface_),\n    'MultiSurface': ol.xml.makeReplacer(\n        ol.format.GML3.prototype.readMultiSurface_),\n    'Curve': ol.xml.makeReplacer(ol.format.GML3.prototype.readCurve_),\n    'MultiCurve': ol.xml.makeReplacer(\n        ol.format.GML3.prototype.readMultiCurve_),\n    'Envelope': ol.xml.makeReplacer(ol.format.GML3.prototype.readEnvelope_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.MULTICURVE_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'curveMember': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.curveMemberParser_),\n    'curveMembers': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.curveMemberParser_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.MULTISURFACE_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'surfaceMember': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.surfaceMemberParser_),\n    'surfaceMembers': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.surfaceMemberParser_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.CURVEMEMBER_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'LineString': ol.xml.makeArrayPusher(\n        ol.format.GMLBase.prototype.readLineString),\n    'Curve': ol.xml.makeArrayPusher(ol.format.GML3.prototype.readCurve_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.SURFACEMEMBER_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'Polygon': ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readPolygon),\n    'Surface': ol.xml.makeArrayPusher(ol.format.GML3.prototype.readSurface_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.SURFACE_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'patches': ol.xml.makeReplacer(ol.format.GML3.prototype.readPatch_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.CURVE_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'segments': ol.xml.makeReplacer(ol.format.GML3.prototype.readSegment_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.ENVELOPE_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'lowerCorner': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.readFlatPosList_),\n    'upperCorner': ol.xml.makeArrayPusher(\n        ol.format.GML3.prototype.readFlatPosList_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.PATCHES_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'PolygonPatch': ol.xml.makeReplacer(\n        ol.format.GML3.prototype.readPolygonPatch_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML3.prototype.SEGMENTS_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'LineStringSegment': ol.xml.makeReplacer(\n        ol.format.GML3.prototype.readLineStringSegment_)\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Point} value Point geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsDimension = hasZ ? 3 : 2;\n  node.setAttribute('srsDimension', srsDimension);\n  var srsName = context['srsName'];\n  var axisOrientation = 'enu';\n  if (srsName) {\n    axisOrientation = ol.proj.get(srsName).getAxisOrientation();\n  }\n  var point = value.getCoordinates();\n  var coords;\n  // only 2d for simple features profile\n  if (axisOrientation.substr(0, 2) === 'en') {\n    coords = (point[0] + ' ' + point[1]);\n  } else {\n    coords = (point[1] + ' ' + point[0]);\n  }\n  if (hasZ) {\n    // For newly created points, Z can be undefined.\n    var z = point[2] || 0;\n    coords += ' ' + z;\n  }\n  ol.format.XSD.writeStringTextNode(node, coords);\n};\n\n\n/**\n * @param {Array.<number>} point Point geometry.\n * @param {string=} opt_srsName Optional srsName\n * @param {boolean=} opt_hasZ whether the geometry has a Z coordinate (is 3D) or not.\n * @return {string} The coords string.\n * @private\n */\nol.format.GML3.prototype.getCoords_ = function(point, opt_srsName, opt_hasZ) {\n  var axisOrientation = 'enu';\n  if (opt_srsName) {\n    axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation();\n  }\n  var coords = ((axisOrientation.substr(0, 2) === 'en') ?\n    point[0] + ' ' + point[1] :\n    point[1] + ' ' + point[0]);\n  if (opt_hasZ) {\n    // For newly created points, Z can be undefined.\n    var z = point[2] || 0;\n    coords += ' ' + z;\n  }\n\n  return coords;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString|ol.geom.LinearRing} value Geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsDimension = hasZ ? 3 : 2;\n  node.setAttribute('srsDimension', srsDimension);\n  var srsName = context['srsName'];\n  // only 2d for simple features profile\n  var points = value.getCoordinates();\n  var len = points.length;\n  var parts = new Array(len);\n  var point;\n  for (var i = 0; i < len; ++i) {\n    point = points[i];\n    parts[i] = this.getCoords_(point, srsName, hasZ);\n  }\n  ol.format.XSD.writeStringTextNode(node, parts.join(' '));\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Point} geometry Point geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writePoint_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var pos = ol.xml.createElementNS(node.namespaceURI, 'pos');\n  node.appendChild(pos);\n  this.writePos_(pos, geometry, objectStack);\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.ENVELOPE_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'lowerCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n    'upperCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Extent} extent Extent.\n * @param {Array.<*>} objectStack Node stack.\n */\nol.format.GML3.prototype.writeEnvelope = function(node, extent, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var keys = ['lowerCorner', 'upperCorner'];\n  var values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      ({node: node}), ol.format.GML3.ENVELOPE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values,\n      objectStack, keys, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LinearRing} geometry LinearRing geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeLinearRing_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');\n  node.appendChild(posList);\n  this.writePosList_(posList, geometry, objectStack);\n};\n\n\n/**\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node} Node.\n * @private\n */\nol.format.GML3.prototype.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var context = objectStack[objectStack.length - 1];\n  var parentNode = context.node;\n  var exteriorWritten = context['exteriorWritten'];\n  if (exteriorWritten === undefined) {\n    context['exteriorWritten'] = true;\n  }\n  return ol.xml.createElementNS(parentNode.namespaceURI,\n      exteriorWritten !== undefined ? 'interior' : 'exterior');\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} geometry Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  if (node.nodeName !== 'PolygonPatch' && srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {\n    var rings = geometry.getLinearRings();\n    ol.xml.pushSerializeAndPop(\n        {node: node, hasZ: hasZ, srsName: srsName},\n        ol.format.GML3.RING_SERIALIZERS_,\n        this.RING_NODE_FACTORY_,\n        rings, objectStack, undefined, this);\n  } else if (node.nodeName === 'Surface') {\n    var patches = ol.xml.createElementNS(node.namespaceURI, 'patches');\n    node.appendChild(patches);\n    this.writeSurfacePatches_(\n        patches, geometry, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} geometry LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeCurveOrLineString_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (node.nodeName !== 'LineStringSegment' && srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  if (node.nodeName === 'LineString' ||\n      node.nodeName === 'LineStringSegment') {\n    var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');\n    node.appendChild(posList);\n    this.writePosList_(posList, geometry, objectStack);\n  } else if (node.nodeName === 'Curve') {\n    var segments = ol.xml.createElementNS(node.namespaceURI, 'segments');\n    node.appendChild(segments);\n    this.writeCurveSegments_(segments,\n        geometry, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeMultiSurfaceOrPolygon_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  var surface = context['surface'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var polygons = geometry.getPolygons();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName, surface: surface},\n      ol.format.GML3.SURFACEORPOLYGONMEMBER_SERIALIZERS_,\n      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiPoint} geometry MultiPoint geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeMultiPoint_ = function(node, geometry,\n    objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  var hasZ = context['hasZ'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var points = geometry.getPoints();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName},\n      ol.format.GML3.POINTMEMBER_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory('pointMember'), points,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiLineString} geometry MultiLineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeMultiCurveOrLineString_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  var curve = context['curve'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var lines = geometry.getLineStrings();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName, curve: curve},\n      ol.format.GML3.LINESTRINGORCURVEMEMBER_SERIALIZERS_,\n      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LinearRing} ring LinearRing geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeRing_ = function(node, ring, objectStack) {\n  var linearRing = ol.xml.createElementNS(node.namespaceURI, 'LinearRing');\n  node.appendChild(linearRing);\n  this.writeLinearRing_(linearRing, ring, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} polygon Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) {\n  var child = this.GEOMETRY_NODE_FACTORY_(\n      polygon, objectStack);\n  if (child) {\n    node.appendChild(child);\n    this.writeSurfaceOrPolygon_(child, polygon, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Point} point Point geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writePointMember_ = function(node, point, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI, 'Point');\n  node.appendChild(child);\n  this.writePoint_(child, point, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} line LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeLineStringOrCurveMember_ = function(node, line, objectStack) {\n  var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);\n  if (child) {\n    node.appendChild(child);\n    this.writeCurveOrLineString_(child, line, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} polygon Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeSurfacePatches_ = function(node, polygon, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI, 'PolygonPatch');\n  node.appendChild(child);\n  this.writeSurfaceOrPolygon_(child, polygon, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} line LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeCurveSegments_ = function(node, line, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI,\n      'LineStringSegment');\n  node.appendChild(child);\n  this.writeCurveOrLineString_(child, line, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.\n * @param {Array.<*>} objectStack Node stack.\n */\nol.format.GML3.prototype.writeGeometryElement = function(node, geometry, objectStack) {\n  var context = /** @type {olx.format.WriteOptions} */ (objectStack[objectStack.length - 1]);\n  var item = ol.obj.assign({}, context);\n  item.node = node;\n  var value;\n  if (Array.isArray(geometry)) {\n    if (context.dataProjection) {\n      value = ol.proj.transformExtent(\n          geometry, context.featureProjection, context.dataProjection);\n    } else {\n      value = geometry;\n    }\n  } else {\n    value =\n        ol.format.Feature.transformWithOptions(/** @type {ol.geom.Geometry} */ (geometry), true, context);\n  }\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      (item), ol.format.GML3.GEOMETRY_SERIALIZERS_,\n      this.GEOMETRY_NODE_FACTORY_, [value],\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Node stack.\n */\nol.format.GML3.prototype.writeFeatureElement = function(node, feature, objectStack) {\n  var fid = feature.getId();\n  if (fid) {\n    node.setAttribute('fid', fid);\n  }\n  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var featureNS = context['featureNS'];\n  var geometryName = feature.getGeometryName();\n  if (!context.serializers) {\n    context.serializers = {};\n    context.serializers[featureNS] = {};\n  }\n  var properties = feature.getProperties();\n  var keys = [], values = [];\n  for (var key in properties) {\n    var value = properties[key];\n    if (value !== null) {\n      keys.push(key);\n      values.push(value);\n      if (key == geometryName || value instanceof ol.geom.Geometry) {\n        if (!(key in context.serializers[featureNS])) {\n          context.serializers[featureNS][key] = ol.xml.makeChildAppender(\n              this.writeGeometryElement, this);\n        }\n      } else {\n        if (!(key in context.serializers[featureNS])) {\n          context.serializers[featureNS][key] = ol.xml.makeChildAppender(\n              ol.format.XSD.writeStringTextNode);\n        }\n      }\n    }\n  }\n  var item = ol.obj.assign({}, context);\n  item.node = node;\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      (item), context.serializers,\n      ol.xml.makeSimpleNodeFactory(undefined, featureNS),\n      values,\n      objectStack, keys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<ol.Feature>} features Features.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML3.prototype.writeFeatureMembers_ = function(node, features, objectStack) {\n  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var featureType = context['featureType'];\n  var featureNS = context['featureNS'];\n  var serializers = {};\n  serializers[featureNS] = {};\n  serializers[featureNS][featureType] = ol.xml.makeChildAppender(\n      this.writeFeatureElement, this);\n  var item = ol.obj.assign({}, context);\n  item.node = node;\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      (item),\n      serializers,\n      ol.xml.makeSimpleNodeFactory(featureType, featureNS), features,\n      objectStack);\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'surfaceMember': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeSurfaceOrPolygonMember_),\n    'polygonMember': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeSurfaceOrPolygonMember_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.POINTMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'pointMember': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writePointMember_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'lineStringMember': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeLineStringOrCurveMember_),\n    'curveMember': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeLineStringOrCurveMember_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.RING_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'exterior': ol.xml.makeChildAppender(ol.format.GML3.prototype.writeRing_),\n    'interior': ol.xml.makeChildAppender(ol.format.GML3.prototype.writeRing_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML3.GEOMETRY_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'Curve': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeCurveOrLineString_),\n    'MultiCurve': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeMultiCurveOrLineString_),\n    'Point': ol.xml.makeChildAppender(ol.format.GML3.prototype.writePoint_),\n    'MultiPoint': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeMultiPoint_),\n    'LineString': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeCurveOrLineString_),\n    'MultiLineString': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeMultiCurveOrLineString_),\n    'LinearRing': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeLinearRing_),\n    'Polygon': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeSurfaceOrPolygon_),\n    'MultiPolygon': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_),\n    'Surface': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeSurfaceOrPolygon_),\n    'MultiSurface': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_),\n    'Envelope': ol.xml.makeChildAppender(\n        ol.format.GML3.prototype.writeEnvelope)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, string>}\n * @private\n */\nol.format.GML3.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {\n  'MultiLineString': 'lineStringMember',\n  'MultiCurve': 'curveMember',\n  'MultiPolygon': 'polygonMember',\n  'MultiSurface': 'surfaceMember'\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.GML3.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var parentNode = objectStack[objectStack.length - 1].node;\n  return ol.xml.createElementNS('http://www.opengis.net/gml',\n      ol.format.GML3.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]);\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.GML3.prototype.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var context = objectStack[objectStack.length - 1];\n  var multiSurface = context['multiSurface'];\n  var surface = context['surface'];\n  var curve = context['curve'];\n  var multiCurve = context['multiCurve'];\n  var nodeName;\n  if (!Array.isArray(value)) {\n    nodeName = /** @type {ol.geom.Geometry} */ (value).getType();\n    if (nodeName === 'MultiPolygon' && multiSurface === true) {\n      nodeName = 'MultiSurface';\n    } else if (nodeName === 'Polygon' && surface === true) {\n      nodeName = 'Surface';\n    } else if (nodeName === 'LineString' && curve === true) {\n      nodeName = 'Curve';\n    } else if (nodeName === 'MultiLineString' && multiCurve === true) {\n      nodeName = 'MultiCurve';\n    }\n  } else {\n    nodeName = 'Envelope';\n  }\n  return ol.xml.createElementNS('http://www.opengis.net/gml',\n      nodeName);\n};\n\n\n/**\n * Encode a geometry in GML 3.1.1 Simple Features.\n *\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n * @override\n * @api\n */\nol.format.GML3.prototype.writeGeometryNode = function(geometry, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var geom = ol.xml.createElementNS('http://www.opengis.net/gml', 'geom');\n  var context = {node: geom, hasZ: this.hasZ, srsName: this.srsName,\n    curve: this.curve_, surface: this.surface_,\n    multiSurface: this.multiSurface_, multiCurve: this.multiCurve_};\n  if (opt_options) {\n    ol.obj.assign(context, opt_options);\n  }\n  this.writeGeometryElement(geom, geometry, [context]);\n  return geom;\n};\n\n\n/**\n * Encode an array of features in GML 3.1.1 Simple Features.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {string} Result.\n * @api\n */\nol.format.GML3.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features in the GML 3.1.1 format as an XML node.\n *\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n * @override\n * @api\n */\nol.format.GML3.prototype.writeFeaturesNode = function(features, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var node = ol.xml.createElementNS('http://www.opengis.net/gml',\n      'featureMembers');\n  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',\n      'xsi:schemaLocation', this.schemaLocation);\n  var context = {\n    srsName: this.srsName,\n    hasZ: this.hasZ,\n    curve: this.curve_,\n    surface: this.surface_,\n    multiSurface: this.multiSurface_,\n    multiCurve: this.multiCurve_,\n    featureNS: this.featureNS,\n    featureType: this.featureType\n  };\n  if (opt_options) {\n    ol.obj.assign(context, opt_options);\n  }\n  this.writeFeatureMembers_(node, features, [context]);\n  return node;\n};\n\ngoog.provide('ol.format.GML');\n\ngoog.require('ol.format.GML3');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GML format\n * version 3.1.1.\n * Currently only supports GML 3.1.1 Simple Features profile.\n *\n * @constructor\n * @param {olx.format.GMLOptions=} opt_options\n *     Optional configuration object.\n * @extends {ol.format.GMLBase}\n * @api\n */\nol.format.GML = ol.format.GML3;\n\n\n/**\n * Encode an array of features in GML 3.1.1 Simple Features.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {string} Result.\n * @api\n */\nol.format.GML.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features in the GML 3.1.1 format as an XML node.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n * @api\n */\nol.format.GML.prototype.writeFeaturesNode;\n\ngoog.provide('ol.format.GML2');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.GMLBase');\ngoog.require('ol.format.XSD');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GML format,\n * version 2.1.2.\n *\n * @constructor\n * @param {olx.format.GMLOptions=} opt_options Optional configuration object.\n * @extends {ol.format.GMLBase}\n * @api\n */\nol.format.GML2 = function(opt_options) {\n  var options = /** @type {olx.format.GMLOptions} */\n      (opt_options ? opt_options : {});\n\n  ol.format.GMLBase.call(this, options);\n\n  this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][\n      'featureMember'] =\n      ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readFeaturesInternal);\n\n  /**\n   * @inheritDoc\n   */\n  this.schemaLocation = options.schemaLocation ?\n    options.schemaLocation : ol.format.GML2.schemaLocation_;\n\n};\nol.inherits(ol.format.GML2, ol.format.GMLBase);\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.GML2.schemaLocation_ = ol.format.GMLBase.GMLNS +\n    ' http://schemas.opengis.net/gml/2.1.2/feature.xsd';\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>|undefined} Flat coordinates.\n */\nol.format.GML2.prototype.readFlatCoordinates_ = function(node, objectStack) {\n  var s = ol.xml.getAllTextContent(node, false).replace(/^\\s*|\\s*$/g, '');\n  var context = /** @type {ol.XmlNodeStackItem} */ (objectStack[0]);\n  var containerSrs = context['srsName'];\n  var axisOrientation = 'enu';\n  if (containerSrs) {\n    var proj = ol.proj.get(containerSrs);\n    if (proj) {\n      axisOrientation = proj.getAxisOrientation();\n    }\n  }\n  var coordsGroups = s.trim().split(/\\s+/);\n  var x, y, z;\n  var flatCoordinates = [];\n  for (var i = 0, ii = coordsGroups.length; i < ii; i++) {\n    var coords = coordsGroups[i].split(/,+/);\n    x = parseFloat(coords[0]);\n    y = parseFloat(coords[1]);\n    z = (coords.length === 3) ? parseFloat(coords[2]) : 0;\n    if (axisOrientation.substr(0, 2) === 'en') {\n      flatCoordinates.push(x, y, z);\n    } else {\n      flatCoordinates.push(y, x, z);\n    }\n  }\n  return flatCoordinates;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Extent|undefined} Envelope.\n */\nol.format.GML2.prototype.readBox_ = function(node, objectStack) {\n  /** @type {Array.<number>} */\n  var flatCoordinates = ol.xml.pushParseAndPop([null],\n      this.BOX_PARSERS_, node, objectStack, this);\n  return ol.extent.createOrUpdate(flatCoordinates[1][0],\n      flatCoordinates[1][1], flatCoordinates[1][3],\n      flatCoordinates[1][4]);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML2.prototype.innerBoundaryIsParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      this.RING_PARSERS, node, objectStack, this);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings.push(flatLinearRing);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GML2.prototype.outerBoundaryIsParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      this.RING_PARSERS, node, objectStack, this);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings[0] = flatLinearRing;\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML2.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'coordinates': ol.xml.makeReplacer(\n        ol.format.GML2.prototype.readFlatCoordinates_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML2.prototype.FLAT_LINEAR_RINGS_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'innerBoundaryIs': ol.format.GML2.prototype.innerBoundaryIsParser_,\n    'outerBoundaryIs': ol.format.GML2.prototype.outerBoundaryIsParser_\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML2.prototype.BOX_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'coordinates': ol.xml.makeArrayPusher(\n        ol.format.GML2.prototype.readFlatCoordinates_)\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GML2.prototype.GEOMETRY_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'Point': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPoint),\n    'MultiPoint': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiPoint),\n    'LineString': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readLineString),\n    'MultiLineString': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiLineString),\n    'LinearRing': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readLinearRing),\n    'Polygon': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPolygon),\n    'MultiPolygon': ol.xml.makeReplacer(\n        ol.format.GMLBase.prototype.readMultiPolygon),\n    'Box': ol.xml.makeReplacer(ol.format.GML2.prototype.readBox_)\n  }\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.GML2.prototype.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var context = objectStack[objectStack.length - 1];\n  var multiSurface = context['multiSurface'];\n  var surface = context['surface'];\n  var multiCurve = context['multiCurve'];\n  var nodeName;\n  if (!Array.isArray(value)) {\n    nodeName = /** @type {ol.geom.Geometry} */ (value).getType();\n    if (nodeName === 'MultiPolygon' && multiSurface === true) {\n      nodeName = 'MultiSurface';\n    } else if (nodeName === 'Polygon' && surface === true) {\n      nodeName = 'Surface';\n    } else if (nodeName === 'MultiLineString' && multiCurve === true) {\n      nodeName = 'MultiCurve';\n    }\n  } else {\n    nodeName = 'Envelope';\n  }\n  return ol.xml.createElementNS('http://www.opengis.net/gml',\n      nodeName);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Node stack.\n */\nol.format.GML2.prototype.writeFeatureElement = function(node, feature, objectStack) {\n  var fid = feature.getId();\n  if (fid) {\n    node.setAttribute('fid', fid);\n  }\n  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var featureNS = context['featureNS'];\n  var geometryName = feature.getGeometryName();\n  if (!context.serializers) {\n    context.serializers = {};\n    context.serializers[featureNS] = {};\n  }\n  var properties = feature.getProperties();\n  var keys = [], values = [];\n  for (var key in properties) {\n    var value = properties[key];\n    if (value !== null) {\n      keys.push(key);\n      values.push(value);\n      if (key == geometryName || value instanceof ol.geom.Geometry) {\n        if (!(key in context.serializers[featureNS])) {\n          context.serializers[featureNS][key] = ol.xml.makeChildAppender(\n              this.writeGeometryElement, this);\n        }\n      } else {\n        if (!(key in context.serializers[featureNS])) {\n          context.serializers[featureNS][key] = ol.xml.makeChildAppender(\n              ol.format.XSD.writeStringTextNode);\n        }\n      }\n    }\n  }\n  var item = ol.obj.assign({}, context);\n  item.node = node;\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      (item), context.serializers,\n      ol.xml.makeSimpleNodeFactory(undefined, featureNS),\n      values,\n      objectStack, keys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.\n * @param {Array.<*>} objectStack Node stack.\n */\nol.format.GML2.prototype.writeGeometryElement = function(node, geometry, objectStack) {\n  var context = /** @type {olx.format.WriteOptions} */ (objectStack[objectStack.length - 1]);\n  var item = ol.obj.assign({}, context);\n  item.node = node;\n  var value;\n  if (Array.isArray(geometry)) {\n    if (context.dataProjection) {\n      value = ol.proj.transformExtent(\n          geometry, context.featureProjection, context.dataProjection);\n    } else {\n      value = geometry;\n    }\n  } else {\n    value =\n        ol.format.Feature.transformWithOptions(/** @type {ol.geom.Geometry} */ (geometry), true, context);\n  }\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      (item), ol.format.GML2.GEOMETRY_SERIALIZERS_,\n      this.GEOMETRY_NODE_FACTORY_, [value],\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} geometry LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeCurveOrLineString_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (node.nodeName !== 'LineStringSegment' && srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  if (node.nodeName === 'LineString' ||\n      node.nodeName === 'LineStringSegment') {\n    var coordinates = this.createCoordinatesNode_(node.namespaceURI);\n    node.appendChild(coordinates);\n    this.writeCoordinates_(coordinates, geometry, objectStack);\n  } else if (node.nodeName === 'Curve') {\n    var segments = ol.xml.createElementNS(node.namespaceURI, 'segments');\n    node.appendChild(segments);\n    this.writeCurveSegments_(segments,\n        geometry, objectStack);\n  }\n};\n\n\n/**\n * @param {string} namespaceURI XML namespace.\n * @returns {Node} coordinates node.\n * @private\n */\nol.format.GML2.prototype.createCoordinatesNode_ = function(namespaceURI) {\n  var coordinates = ol.xml.createElementNS(namespaceURI, 'coordinates');\n  coordinates.setAttribute('decimal', '.');\n  coordinates.setAttribute('cs', ',');\n  coordinates.setAttribute('ts', ' ');\n\n  return coordinates;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString|ol.geom.LinearRing} value Geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeCoordinates_ = function(node, value, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  // only 2d for simple features profile\n  var points = value.getCoordinates();\n  var len = points.length;\n  var parts = new Array(len);\n  var point;\n  for (var i = 0; i < len; ++i) {\n    point = points[i];\n    parts[i] = this.getCoords_(point, srsName, hasZ);\n  }\n  ol.format.XSD.writeStringTextNode(node, parts.join(' '));\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} line LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeCurveSegments_ = function(node, line, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI,\n      'LineStringSegment');\n  node.appendChild(child);\n  this.writeCurveOrLineString_(child, line, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} geometry Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  if (node.nodeName !== 'PolygonPatch' && srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {\n    var rings = geometry.getLinearRings();\n    ol.xml.pushSerializeAndPop(\n        {node: node, hasZ: hasZ, srsName: srsName},\n        ol.format.GML2.RING_SERIALIZERS_,\n        this.RING_NODE_FACTORY_,\n        rings, objectStack, undefined, this);\n  } else if (node.nodeName === 'Surface') {\n    var patches = ol.xml.createElementNS(node.namespaceURI, 'patches');\n    node.appendChild(patches);\n    this.writeSurfacePatches_(\n        patches, geometry, objectStack);\n  }\n};\n\n\n/**\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node} Node.\n * @private\n */\nol.format.GML2.prototype.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var context = objectStack[objectStack.length - 1];\n  var parentNode = context.node;\n  var exteriorWritten = context['exteriorWritten'];\n  if (exteriorWritten === undefined) {\n    context['exteriorWritten'] = true;\n  }\n  return ol.xml.createElementNS(parentNode.namespaceURI,\n      exteriorWritten !== undefined ? 'innerBoundaryIs' : 'outerBoundaryIs');\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} polygon Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeSurfacePatches_ = function(node, polygon, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI, 'PolygonPatch');\n  node.appendChild(child);\n  this.writeSurfaceOrPolygon_(child, polygon, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LinearRing} ring LinearRing geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeRing_ = function(node, ring, objectStack) {\n  var linearRing = ol.xml.createElementNS(node.namespaceURI, 'LinearRing');\n  node.appendChild(linearRing);\n  this.writeLinearRing_(linearRing, ring, objectStack);\n};\n\n\n/**\n * @param {Array.<number>} point Point geometry.\n * @param {string=} opt_srsName Optional srsName\n * @param {boolean=} opt_hasZ whether the geometry has a Z coordinate (is 3D) or not.\n * @return {string} The coords string.\n * @private\n */\nol.format.GML2.prototype.getCoords_ = function(point, opt_srsName, opt_hasZ) {\n  var axisOrientation = 'enu';\n  if (opt_srsName) {\n    axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation();\n  }\n  var coords = ((axisOrientation.substr(0, 2) === 'en') ?\n    point[0] + ',' + point[1] :\n    point[1] + ',' + point[0]);\n  if (opt_hasZ) {\n    // For newly created points, Z can be undefined.\n    var z = point[2] || 0;\n    coords += ',' + z;\n  }\n\n  return coords;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiLineString} geometry MultiLineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeMultiCurveOrLineString_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  var curve = context['curve'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var lines = geometry.getLineStrings();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName, curve: curve},\n      ol.format.GML2.LINESTRINGORCURVEMEMBER_SERIALIZERS_,\n      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Point} geometry Point geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writePoint_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var coordinates = this.createCoordinatesNode_(node.namespaceURI);\n  node.appendChild(coordinates);\n  var point = geometry.getCoordinates();\n  var coord = this.getCoords_(point, srsName, hasZ);\n  ol.format.XSD.writeStringTextNode(coordinates, coord);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiPoint} geometry MultiPoint geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeMultiPoint_ = function(node, geometry,\n    objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var points = geometry.getPoints();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName},\n      ol.format.GML2.POINTMEMBER_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory('pointMember'), points,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Point} point Point geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writePointMember_ = function(node, point, objectStack) {\n  var child = ol.xml.createElementNS(node.namespaceURI, 'Point');\n  node.appendChild(child);\n  this.writePoint_(child, point, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} line LineString geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeLineStringOrCurveMember_ = function(node, line, objectStack) {\n  var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);\n  if (child) {\n    node.appendChild(child);\n    this.writeCurveOrLineString_(child, line, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LinearRing} geometry LinearRing geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeLinearRing_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var coordinates = this.createCoordinatesNode_(node.namespaceURI);\n  node.appendChild(coordinates);\n  this.writeCoordinates_(coordinates, geometry, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeMultiSurfaceOrPolygon_ = function(node, geometry, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var hasZ = context['hasZ'];\n  var srsName = context['srsName'];\n  var surface = context['surface'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var polygons = geometry.getPolygons();\n  ol.xml.pushSerializeAndPop({node: node, hasZ: hasZ, srsName: srsName, surface: surface},\n      ol.format.GML2.SURFACEORPOLYGONMEMBER_SERIALIZERS_,\n      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons,\n      objectStack, undefined, this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} polygon Polygon geometry.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) {\n  var child = this.GEOMETRY_NODE_FACTORY_(\n      polygon, objectStack);\n  if (child) {\n    node.appendChild(child);\n    this.writeSurfaceOrPolygon_(child, polygon, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Extent} extent Extent.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GML2.prototype.writeEnvelope = function(node, extent, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var srsName = context['srsName'];\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  var keys = ['lowerCorner', 'upperCorner'];\n  var values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      ({node: node}), ol.format.GML2.ENVELOPE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values,\n      objectStack, keys, this);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.GEOMETRY_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'Curve': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeCurveOrLineString_),\n    'MultiCurve': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeMultiCurveOrLineString_),\n    'Point': ol.xml.makeChildAppender(ol.format.GML2.prototype.writePoint_),\n    'MultiPoint': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeMultiPoint_),\n    'LineString': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeCurveOrLineString_),\n    'MultiLineString': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeMultiCurveOrLineString_),\n    'LinearRing': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeLinearRing_),\n    'Polygon': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeSurfaceOrPolygon_),\n    'MultiPolygon': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeMultiSurfaceOrPolygon_),\n    'Surface': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeSurfaceOrPolygon_),\n    'MultiSurface': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeMultiSurfaceOrPolygon_),\n    'Envelope': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeEnvelope)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.RING_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'outerBoundaryIs': ol.xml.makeChildAppender(ol.format.GML2.prototype.writeRing_),\n    'innerBoundaryIs': ol.xml.makeChildAppender(ol.format.GML2.prototype.writeRing_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.POINTMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'pointMember': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writePointMember_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'lineStringMember': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeLineStringOrCurveMember_),\n    'curveMember': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeLineStringOrCurveMember_)\n  }\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.GML2.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var parentNode = objectStack[objectStack.length - 1].node;\n  return ol.xml.createElementNS('http://www.opengis.net/gml',\n      ol.format.GML2.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]);\n};\n\n/**\n * @const\n * @type {Object.<string, string>}\n * @private\n */\nol.format.GML2.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {\n  'MultiLineString': 'lineStringMember',\n  'MultiCurve': 'curveMember',\n  'MultiPolygon': 'polygonMember',\n  'MultiSurface': 'surfaceMember'\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'surfaceMember': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeSurfaceOrPolygonMember_),\n    'polygonMember': ol.xml.makeChildAppender(\n        ol.format.GML2.prototype.writeSurfaceOrPolygonMember_)\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GML2.ENVELOPE_SERIALIZERS_ = {\n  'http://www.opengis.net/gml': {\n    'lowerCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n    'upperCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)\n  }\n};\n\ngoog.provide('ol.format.GPX');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.array');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.format.XSD');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.Point');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GPX format.\n *\n * @constructor\n * @extends {ol.format.XMLFeature}\n * @param {olx.format.GPXOptions=} opt_options Options.\n * @api\n */\nol.format.GPX = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.XMLFeature.call(this);\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get('EPSG:4326');\n\n  /**\n   * @type {function(ol.Feature, Node)|undefined}\n   * @private\n   */\n  this.readExtensions_ = options.readExtensions;\n};\nol.inherits(ol.format.GPX, ol.format.XMLFeature);\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.format.GPX.NAMESPACE_URIS_ = [\n  null,\n  'http://www.topografix.com/GPX/1/0',\n  'http://www.topografix.com/GPX/1/1'\n];\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.GPX.SCHEMA_LOCATION_ = 'http://www.topografix.com/GPX/1/1 ' +\n    'http://www.topografix.com/GPX/1/1/gpx.xsd';\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {ol.LayoutOptions} layoutOptions Layout options.\n * @param {Node} node Node.\n * @param {Object} values Values.\n * @private\n * @return {Array.<number>} Flat coordinates.\n */\nol.format.GPX.appendCoordinate_ = function(flatCoordinates, layoutOptions, node, values) {\n  flatCoordinates.push(\n      parseFloat(node.getAttribute('lon')),\n      parseFloat(node.getAttribute('lat')));\n  if ('ele' in values) {\n    flatCoordinates.push(/** @type {number} */ (values['ele']));\n    delete values['ele'];\n    layoutOptions.hasZ = true;\n  } else {\n    flatCoordinates.push(0);\n  }\n  if ('time' in values) {\n    flatCoordinates.push(/** @type {number} */ (values['time']));\n    delete values['time'];\n    layoutOptions.hasM = true;\n  } else {\n    flatCoordinates.push(0);\n  }\n  return flatCoordinates;\n};\n\n\n/**\n * Choose GeometryLayout based on flags in layoutOptions and adjust flatCoordinates\n * and ends arrays by shrinking them accordingly (removing unused zero entries).\n *\n * @param {ol.LayoutOptions} layoutOptions Layout options.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<number>=} ends Ends.\n * @return {ol.geom.GeometryLayout} Layout.\n */\nol.format.GPX.applyLayoutOptions_ = function(layoutOptions, flatCoordinates, ends) {\n  var layout = ol.geom.GeometryLayout.XY;\n  var stride = 2;\n  if (layoutOptions.hasZ && layoutOptions.hasM) {\n    layout = ol.geom.GeometryLayout.XYZM;\n    stride = 4;\n  } else if (layoutOptions.hasZ) {\n    layout = ol.geom.GeometryLayout.XYZ;\n    stride = 3;\n  } else if (layoutOptions.hasM) {\n    layout = ol.geom.GeometryLayout.XYM;\n    stride = 3;\n  }\n  if (stride !== 4) {\n    var i, ii;\n    for (i = 0, ii = flatCoordinates.length / 4; i < ii; i++) {\n      flatCoordinates[i * stride] = flatCoordinates[i * 4];\n      flatCoordinates[i * stride + 1] = flatCoordinates[i * 4 + 1];\n      if (layoutOptions.hasZ) {\n        flatCoordinates[i * stride + 2] = flatCoordinates[i * 4 + 2];\n      }\n      if (layoutOptions.hasM) {\n        flatCoordinates[i * stride + 2] = flatCoordinates[i * 4 + 3];\n      }\n    }\n    flatCoordinates.length = flatCoordinates.length / 4 * stride;\n    if (ends) {\n      for (i = 0, ii = ends.length; i < ii; i++) {\n        ends[i] = ends[i] / 4 * stride;\n      }\n    }\n  }\n  return layout;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.parseLink_ = function(node, objectStack) {\n  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var href = node.getAttribute('href');\n  if (href !== null) {\n    values['link'] = href;\n  }\n  ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.parseExtensions_ = function(node, objectStack) {\n  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  values['extensionsNode_'] = node;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.parseRtePt_ = function(node, objectStack) {\n  var values = ol.xml.pushParseAndPop(\n      {}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack);\n  if (values) {\n    var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n    var flatCoordinates = /** @type {Array.<number>} */\n        (rteValues['flatCoordinates']);\n    var layoutOptions = /** @type {ol.LayoutOptions} */\n        (rteValues['layoutOptions']);\n    ol.format.GPX.appendCoordinate_(flatCoordinates, layoutOptions, node, values);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.parseTrkPt_ = function(node, objectStack) {\n  var values = ol.xml.pushParseAndPop(\n      {}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack);\n  if (values) {\n    var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n    var flatCoordinates = /** @type {Array.<number>} */\n        (trkValues['flatCoordinates']);\n    var layoutOptions = /** @type {ol.LayoutOptions} */\n        (trkValues['layoutOptions']);\n    ol.format.GPX.appendCoordinate_(flatCoordinates, layoutOptions, node, values);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.parseTrkSeg_ = function(node, objectStack) {\n  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  ol.xml.parseNode(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);\n  var flatCoordinates = /** @type {Array.<number>} */\n      (values['flatCoordinates']);\n  var ends = /** @type {Array.<number>} */ (values['ends']);\n  ends.push(flatCoordinates.length);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Feature|undefined} Track.\n */\nol.format.GPX.readRte_ = function(node, objectStack) {\n  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);\n  var values = ol.xml.pushParseAndPop({\n    'flatCoordinates': [],\n    'layoutOptions': {}\n  }, ol.format.GPX.RTE_PARSERS_, node, objectStack);\n  if (!values) {\n    return undefined;\n  }\n  var flatCoordinates = /** @type {Array.<number>} */\n      (values['flatCoordinates']);\n  delete values['flatCoordinates'];\n  var layoutOptions = /** @type {ol.LayoutOptions} */ (values['layoutOptions']);\n  delete values['layoutOptions'];\n  var layout = ol.format.GPX.applyLayoutOptions_(layoutOptions, flatCoordinates);\n  var geometry = new ol.geom.LineString(null);\n  geometry.setFlatCoordinates(layout, flatCoordinates);\n  ol.format.Feature.transformWithOptions(geometry, false, options);\n  var feature = new ol.Feature(geometry);\n  feature.setProperties(values);\n  return feature;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Feature|undefined} Track.\n */\nol.format.GPX.readTrk_ = function(node, objectStack) {\n  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);\n  var values = ol.xml.pushParseAndPop({\n    'flatCoordinates': [],\n    'ends': [],\n    'layoutOptions': {}\n  }, ol.format.GPX.TRK_PARSERS_, node, objectStack);\n  if (!values) {\n    return undefined;\n  }\n  var flatCoordinates = /** @type {Array.<number>} */\n      (values['flatCoordinates']);\n  delete values['flatCoordinates'];\n  var ends = /** @type {Array.<number>} */ (values['ends']);\n  delete values['ends'];\n  var layoutOptions = /** @type {ol.LayoutOptions} */ (values['layoutOptions']);\n  delete values['layoutOptions'];\n  var layout = ol.format.GPX.applyLayoutOptions_(layoutOptions, flatCoordinates, ends);\n  var geometry = new ol.geom.MultiLineString(null);\n  geometry.setFlatCoordinates(layout, flatCoordinates, ends);\n  ol.format.Feature.transformWithOptions(geometry, false, options);\n  var feature = new ol.Feature(geometry);\n  feature.setProperties(values);\n  return feature;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Feature|undefined} Waypoint.\n */\nol.format.GPX.readWpt_ = function(node, objectStack) {\n  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);\n  var values = ol.xml.pushParseAndPop(\n      {}, ol.format.GPX.WPT_PARSERS_, node, objectStack);\n  if (!values) {\n    return undefined;\n  }\n  var layoutOptions = /** @type {ol.LayoutOptions} */ ({});\n  var coordinates = ol.format.GPX.appendCoordinate_([], layoutOptions, node, values);\n  var layout = ol.format.GPX.applyLayoutOptions_(layoutOptions, coordinates);\n  var geometry = new ol.geom.Point(coordinates, layout);\n  ol.format.Feature.transformWithOptions(geometry, false, options);\n  var feature = new ol.Feature(geometry);\n  feature.setProperties(values);\n  return feature;\n};\n\n\n/**\n * @const\n * @type {Object.<string, function(Node, Array.<*>): (ol.Feature|undefined)>}\n * @private\n */\nol.format.GPX.FEATURE_READER_ = {\n  'rte': ol.format.GPX.readRte_,\n  'trk': ol.format.GPX.readTrk_,\n  'wpt': ol.format.GPX.readWpt_\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.GPX_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'rte': ol.xml.makeArrayPusher(ol.format.GPX.readRte_),\n      'trk': ol.xml.makeArrayPusher(ol.format.GPX.readTrk_),\n      'wpt': ol.xml.makeArrayPusher(ol.format.GPX.readWpt_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.LINK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'text':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkText'),\n      'type':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkType')\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.RTE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'link': ol.format.GPX.parseLink_,\n      'number':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),\n      'extensions': ol.format.GPX.parseExtensions_,\n      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'rtept': ol.format.GPX.parseRtePt_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.TRK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'link': ol.format.GPX.parseLink_,\n      'number':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),\n      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'extensions': ol.format.GPX.parseExtensions_,\n      'trkseg': ol.format.GPX.parseTrkSeg_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'trkpt': ol.format.GPX.parseTrkPt_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.GPX.WPT_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime),\n      'magvar': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'geoidheight': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'link': ol.format.GPX.parseLink_,\n      'sym': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'fix': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'sat': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'hdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'vdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'pdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'ageofdgpsdata':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'dgpsid':\n          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),\n      'extensions': ol.format.GPX.parseExtensions_\n    });\n\n\n/**\n * @param {Array.<ol.Feature>} features List of features.\n * @private\n */\nol.format.GPX.prototype.handleReadExtensions_ = function(features) {\n  if (!features) {\n    features = [];\n  }\n  for (var i = 0, ii = features.length; i < ii; ++i) {\n    var feature = features[i];\n    if (this.readExtensions_) {\n      var extensionsNode = feature.get('extensionsNode_') || null;\n      this.readExtensions_(feature, extensionsNode);\n    }\n    feature.set('extensionsNode_', undefined);\n  }\n};\n\n\n/**\n * Read the first feature from a GPX source.\n * Routes (`<rte>`) are converted into LineString geometries, and tracks (`<trk>`)\n * into MultiLineString. Any properties on route and track waypoints are ignored.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.GPX.prototype.readFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.GPX.prototype.readFeatureFromNode = function(node, opt_options) {\n  if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {\n    return null;\n  }\n  var featureReader = ol.format.GPX.FEATURE_READER_[node.localName];\n  if (!featureReader) {\n    return null;\n  }\n  var feature = featureReader(node, [this.getReadOptions(node, opt_options)]);\n  if (!feature) {\n    return null;\n  }\n  this.handleReadExtensions_([feature]);\n  return feature;\n};\n\n\n/**\n * Read all features from a GPX source.\n * Routes (`<rte>`) are converted into LineString geometries, and tracks (`<trk>`)\n * into MultiLineString. Any properties on route and track waypoints are ignored.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.GPX.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.GPX.prototype.readFeaturesFromNode = function(node, opt_options) {\n  if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {\n    return [];\n  }\n  if (node.localName == 'gpx') {\n    /** @type {Array.<ol.Feature>} */\n    var features = ol.xml.pushParseAndPop([], ol.format.GPX.GPX_PARSERS_,\n        node, [this.getReadOptions(node, opt_options)]);\n    if (features) {\n      this.handleReadExtensions_(features);\n      return features;\n    } else {\n      return [];\n    }\n  }\n  return [];\n};\n\n\n/**\n * Read the projection from a GPX source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.GPX.prototype.readProjection;\n\n\n/**\n * @param {Node} node Node.\n * @param {string} value Value for the link's `href` attribute.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.GPX.writeLink_ = function(node, value, objectStack) {\n  node.setAttribute('href', value);\n  var context = objectStack[objectStack.length - 1];\n  var properties = context['properties'];\n  var link = [\n    properties['linkText'],\n    properties['linkType']\n  ];\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ ({node: node}),\n      ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      link, objectStack, ol.format.GPX.LINK_SEQUENCE_);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var parentNode = context.node;\n  var namespaceURI = parentNode.namespaceURI;\n  var properties = context['properties'];\n  //FIXME Projection handling\n  ol.xml.setAttributeNS(node, null, 'lat', coordinate[1]);\n  ol.xml.setAttributeNS(node, null, 'lon', coordinate[0]);\n  var geometryLayout = context['geometryLayout'];\n  switch (geometryLayout) {\n    case ol.geom.GeometryLayout.XYZM:\n      if (coordinate[3] !== 0) {\n        properties['time'] = coordinate[3];\n      }\n      // fall through\n    case ol.geom.GeometryLayout.XYZ:\n      if (coordinate[2] !== 0) {\n        properties['ele'] = coordinate[2];\n      }\n      break;\n    case ol.geom.GeometryLayout.XYM:\n      if (coordinate[2] !== 0) {\n        properties['time'] = coordinate[2];\n      }\n      break;\n    default:\n      // pass\n  }\n  var orderedKeys = (node.nodeName == 'rtept') ?\n    ol.format.GPX.RTEPT_TYPE_SEQUENCE_[namespaceURI] :\n    ol.format.GPX.WPT_TYPE_SEQUENCE_[namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      ({node: node, 'properties': properties}),\n      ol.format.GPX.WPT_TYPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.writeRte_ = function(node, feature, objectStack) {\n  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);\n  var properties = feature.getProperties();\n  var context = {node: node, 'properties': properties};\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    geometry = /** @type {ol.geom.LineString} */\n      (ol.format.Feature.transformWithOptions(geometry, true, options));\n    context['geometryLayout'] = geometry.getLayout();\n    properties['rtept'] = geometry.getCoordinates();\n  }\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.GPX.RTE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.writeTrk_ = function(node, feature, objectStack) {\n  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);\n  var properties = feature.getProperties();\n  /** @type {ol.XmlNodeStackItem} */\n  var context = {node: node, 'properties': properties};\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    geometry = /** @type {ol.geom.MultiLineString} */\n      (ol.format.Feature.transformWithOptions(geometry, true, options));\n    properties['trkseg'] = geometry.getLineStrings();\n  }\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.GPX.TRK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LineString} lineString LineString.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.writeTrkSeg_ = function(node, lineString, objectStack) {\n  /** @type {ol.XmlNodeStackItem} */\n  var context = {node: node, 'geometryLayout': lineString.getLayout(),\n    'properties': {}};\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.GPX.TRKSEG_SERIALIZERS_, ol.format.GPX.TRKSEG_NODE_FACTORY_,\n      lineString.getCoordinates(), objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.GPX.writeWpt_ = function(node, feature, objectStack) {\n  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);\n  var context = objectStack[objectStack.length - 1];\n  context['properties'] = feature.getProperties();\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    geometry = /** @type {ol.geom.Point} */\n      (ol.format.Feature.transformWithOptions(geometry, true, options));\n    context['geometryLayout'] = geometry.getLayout();\n    ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack);\n  }\n};\n\n\n/**\n * @const\n * @type {Array.<string>}\n * @private\n */\nol.format.GPX.LINK_SEQUENCE_ = ['text', 'type'];\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.LINK_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'text': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.GPX.RTE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, [\n      'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'rtept'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.RTE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),\n      'number': ol.xml.makeChildAppender(\n          ol.format.XSD.writeNonNegativeIntegerTextNode),\n      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'rtept': ol.xml.makeArraySerializer(ol.xml.makeChildAppender(\n          ol.format.GPX.writeWptType_))\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.GPX.RTEPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, [\n      'ele', 'time'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.GPX.TRK_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, [\n      'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'trkseg'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),\n      'number': ol.xml.makeChildAppender(\n          ol.format.XSD.writeNonNegativeIntegerTextNode),\n      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'trkseg': ol.xml.makeArraySerializer(ol.xml.makeChildAppender(\n          ol.format.GPX.writeTrkSeg_))\n    });\n\n\n/**\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('trkpt');\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.TRKSEG_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'trkpt': ol.xml.makeChildAppender(ol.format.GPX.writeWptType_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.GPX.WPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, [\n      'ele', 'time', 'magvar', 'geoidheight', 'name', 'cmt', 'desc', 'src',\n      'link', 'sym', 'type', 'fix', 'sat', 'hdop', 'vdop', 'pdop',\n      'ageofdgpsdata', 'dgpsid'\n    ]);\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.WPT_TYPE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'ele': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'time': ol.xml.makeChildAppender(ol.format.XSD.writeDateTimeTextNode),\n      'magvar': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'geoidheight': ol.xml.makeChildAppender(\n          ol.format.XSD.writeDecimalTextNode),\n      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),\n      'sym': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'fix': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'sat': ol.xml.makeChildAppender(\n          ol.format.XSD.writeNonNegativeIntegerTextNode),\n      'hdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'vdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'pdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'ageofdgpsdata': ol.xml.makeChildAppender(\n          ol.format.XSD.writeDecimalTextNode),\n      'dgpsid': ol.xml.makeChildAppender(\n          ol.format.XSD.writeNonNegativeIntegerTextNode)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, string>}\n * @private\n */\nol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_ = {\n  'Point': 'wpt',\n  'LineString': 'rte',\n  'MultiLineString': 'trk'\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  var geometry = /** @type {ol.Feature} */ (value).getGeometry();\n  if (geometry) {\n    var nodeName = ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_[geometry.getType()];\n    if (nodeName) {\n      var parentNode = objectStack[objectStack.length - 1].node;\n      return ol.xml.createElementNS(parentNode.namespaceURI, nodeName);\n    }\n  }\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.GPX.NAMESPACE_URIS_, {\n      'rte': ol.xml.makeChildAppender(ol.format.GPX.writeRte_),\n      'trk': ol.xml.makeChildAppender(ol.format.GPX.writeTrk_),\n      'wpt': ol.xml.makeChildAppender(ol.format.GPX.writeWpt_)\n    });\n\n\n/**\n * Encode an array of features in the GPX format.\n * LineString geometries are output as routes (`<rte>`), and MultiLineString\n * as tracks (`<trk>`).\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} Result.\n * @api\n */\nol.format.GPX.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features in the GPX format as an XML node.\n * LineString geometries are output as routes (`<rte>`), and MultiLineString\n * as tracks (`<trk>`).\n *\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n * @override\n * @api\n */\nol.format.GPX.prototype.writeFeaturesNode = function(features, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  //FIXME Serialize metadata\n  var gpx = ol.xml.createElementNS('http://www.topografix.com/GPX/1/1', 'gpx');\n  var xmlnsUri = 'http://www.w3.org/2000/xmlns/';\n  var xmlSchemaInstanceUri = 'http://www.w3.org/2001/XMLSchema-instance';\n  ol.xml.setAttributeNS(gpx, xmlnsUri, 'xmlns:xsi', xmlSchemaInstanceUri);\n  ol.xml.setAttributeNS(gpx, xmlSchemaInstanceUri, 'xsi:schemaLocation',\n      ol.format.GPX.SCHEMA_LOCATION_);\n  gpx.setAttribute('version', '1.1');\n  gpx.setAttribute('creator', 'OpenLayers');\n\n  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */\n      ({node: gpx}), ol.format.GPX.GPX_SERIALIZERS_,\n      ol.format.GPX.GPX_NODE_FACTORY_, features, [opt_options]);\n  return gpx;\n};\n\ngoog.provide('ol.format.IGCZ');\n\n/**\n * IGC altitude/z. One of 'barometric', 'gps', 'none'.\n * @enum {string}\n */\nol.format.IGCZ = {\n  BAROMETRIC: 'barometric',\n  GPS: 'gps',\n  NONE: 'none'\n};\n\ngoog.provide('ol.format.TextFeature');\n\ngoog.require('ol');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.FormatType');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for text feature formats.\n *\n * @constructor\n * @abstract\n * @extends {ol.format.Feature}\n */\nol.format.TextFeature = function() {\n  ol.format.Feature.call(this);\n};\nol.inherits(ol.format.TextFeature, ol.format.Feature);\n\n\n/**\n * @param {Document|Node|Object|string} source Source.\n * @private\n * @return {string} Text.\n */\nol.format.TextFeature.prototype.getText_ = function(source) {\n  if (typeof source === 'string') {\n    return source;\n  } else {\n    return '';\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.getType = function() {\n  return ol.format.FormatType.TEXT;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.readFeature = function(source, opt_options) {\n  return this.readFeatureFromText(\n      this.getText_(source), this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {string} text Text.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {ol.Feature} Feature.\n */\nol.format.TextFeature.prototype.readFeatureFromText = function(text, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.readFeatures = function(source, opt_options) {\n  return this.readFeaturesFromText(\n      this.getText_(source), this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {string} text Text.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {Array.<ol.Feature>} Features.\n */\nol.format.TextFeature.prototype.readFeaturesFromText = function(text, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.readGeometry = function(source, opt_options) {\n  return this.readGeometryFromText(\n      this.getText_(source), this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {string} text Text.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @protected\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.TextFeature.prototype.readGeometryFromText = function(text, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.readProjection = function(source) {\n  return this.readProjectionFromText(this.getText_(source));\n};\n\n\n/**\n * @param {string} text Text.\n * @protected\n * @return {ol.proj.Projection} Projection.\n */\nol.format.TextFeature.prototype.readProjectionFromText = function(text) {\n  return this.defaultDataProjection;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.writeFeature = function(feature, opt_options) {\n  return this.writeFeatureText(feature, this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {ol.Feature} feature Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @protected\n * @return {string} Text.\n */\nol.format.TextFeature.prototype.writeFeatureText = function(feature, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.writeFeatures = function(\n    features, opt_options) {\n  return this.writeFeaturesText(features, this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @protected\n * @return {string} Text.\n */\nol.format.TextFeature.prototype.writeFeaturesText = function(features, opt_options) {};\n\n\n/**\n * @inheritDoc\n */\nol.format.TextFeature.prototype.writeGeometry = function(\n    geometry, opt_options) {\n  return this.writeGeometryText(geometry, this.adaptOptions(opt_options));\n};\n\n\n/**\n * @abstract\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @protected\n * @return {string} Text.\n */\nol.format.TextFeature.prototype.writeGeometryText = function(geometry, opt_options) {};\n\ngoog.provide('ol.format.IGC');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.IGCZ');\ngoog.require('ol.format.TextFeature');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Feature format for `*.igc` flight recording files.\n *\n * @constructor\n * @extends {ol.format.TextFeature}\n * @param {olx.format.IGCOptions=} opt_options Options.\n * @api\n */\nol.format.IGC = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.TextFeature.call(this);\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get('EPSG:4326');\n\n  /**\n   * @private\n   * @type {ol.format.IGCZ}\n   */\n  this.altitudeMode_ = options.altitudeMode ?\n    options.altitudeMode : ol.format.IGCZ.NONE;\n\n};\nol.inherits(ol.format.IGC, ol.format.TextFeature);\n\n\n/**\n * @const\n * @type {RegExp}\n * @private\n */\nol.format.IGC.B_RECORD_RE_ =\n    /^B(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{5})([NS])(\\d{3})(\\d{5})([EW])([AV])(\\d{5})(\\d{5})/;\n\n\n/**\n * @const\n * @type {RegExp}\n * @private\n */\nol.format.IGC.H_RECORD_RE_ = /^H.([A-Z]{3}).*?:(.*)/;\n\n\n/**\n * @const\n * @type {RegExp}\n * @private\n */\nol.format.IGC.HFDTE_RECORD_RE_ = /^HFDTE(\\d{2})(\\d{2})(\\d{2})/;\n\n\n/**\n * A regular expression matching the newline characters `\\r\\n`, `\\r` and `\\n`.\n *\n * @const\n * @type {RegExp}\n * @private\n */\nol.format.IGC.NEWLINE_RE_ = /\\r\\n|\\r|\\n/;\n\n\n/**\n * Read the feature from the IGC source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.IGC.prototype.readFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.IGC.prototype.readFeatureFromText = function(text, opt_options) {\n  var altitudeMode = this.altitudeMode_;\n  var lines = text.split(ol.format.IGC.NEWLINE_RE_);\n  /** @type {Object.<string, string>} */\n  var properties = {};\n  var flatCoordinates = [];\n  var year = 2000;\n  var month = 0;\n  var day = 1;\n  var lastDateTime = -1;\n  var i, ii;\n  for (i = 0, ii = lines.length; i < ii; ++i) {\n    var line = lines[i];\n    var m;\n    if (line.charAt(0) == 'B') {\n      m = ol.format.IGC.B_RECORD_RE_.exec(line);\n      if (m) {\n        var hour = parseInt(m[1], 10);\n        var minute = parseInt(m[2], 10);\n        var second = parseInt(m[3], 10);\n        var y = parseInt(m[4], 10) + parseInt(m[5], 10) / 60000;\n        if (m[6] == 'S') {\n          y = -y;\n        }\n        var x = parseInt(m[7], 10) + parseInt(m[8], 10) / 60000;\n        if (m[9] == 'W') {\n          x = -x;\n        }\n        flatCoordinates.push(x, y);\n        if (altitudeMode != ol.format.IGCZ.NONE) {\n          var z;\n          if (altitudeMode == ol.format.IGCZ.GPS) {\n            z = parseInt(m[11], 10);\n          } else if (altitudeMode == ol.format.IGCZ.BAROMETRIC) {\n            z = parseInt(m[12], 10);\n          } else {\n            z = 0;\n          }\n          flatCoordinates.push(z);\n        }\n        var dateTime = Date.UTC(year, month, day, hour, minute, second);\n        // Detect UTC midnight wrap around.\n        if (dateTime < lastDateTime) {\n          dateTime = Date.UTC(year, month, day + 1, hour, minute, second);\n        }\n        flatCoordinates.push(dateTime / 1000);\n        lastDateTime = dateTime;\n      }\n    } else if (line.charAt(0) == 'H') {\n      m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line);\n      if (m) {\n        day = parseInt(m[1], 10);\n        month = parseInt(m[2], 10) - 1;\n        year = 2000 + parseInt(m[3], 10);\n      } else {\n        m = ol.format.IGC.H_RECORD_RE_.exec(line);\n        if (m) {\n          properties[m[1]] = m[2].trim();\n        }\n      }\n    }\n  }\n  if (flatCoordinates.length === 0) {\n    return null;\n  }\n  var lineString = new ol.geom.LineString(null);\n  var layout = altitudeMode == ol.format.IGCZ.NONE ?\n    ol.geom.GeometryLayout.XYM : ol.geom.GeometryLayout.XYZM;\n  lineString.setFlatCoordinates(layout, flatCoordinates);\n  var feature = new ol.Feature(ol.format.Feature.transformWithOptions(\n      lineString, false, opt_options));\n  feature.setProperties(properties);\n  return feature;\n};\n\n\n/**\n * Read the feature from the source. As IGC sources contain a single\n * feature, this will return the feature in an array.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.IGC.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.IGC.prototype.readFeaturesFromText = function(text, opt_options) {\n  var feature = this.readFeatureFromText(text, opt_options);\n  if (feature) {\n    return [feature];\n  } else {\n    return [];\n  }\n};\n\n\n/**\n * Read the projection from the IGC source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.IGC.prototype.readProjection;\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.IGC.prototype.writeFeatureText = function(feature, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.IGC.prototype.writeFeaturesText = function(features, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.IGC.prototype.writeGeometryText = function(geometry, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.IGC.prototype.readGeometryFromText = function(text, opt_options) {};\n\ngoog.provide('ol.style.IconAnchorUnits');\n\n/**\n * Icon anchor units. One of 'fraction', 'pixels'.\n * @enum {string}\n */\nol.style.IconAnchorUnits = {\n  FRACTION: 'fraction',\n  PIXELS: 'pixels'\n};\n\ngoog.provide('ol.style.IconImage');\n\ngoog.require('ol');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.events.EventType');\ngoog.require('ol.ImageState');\ngoog.require('ol.style');\n\n\n/**\n * @constructor\n * @param {Image|HTMLCanvasElement} image Image.\n * @param {string|undefined} src Src.\n * @param {ol.Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.ImageState} imageState Image state.\n * @param {ol.Color} color Color.\n * @extends {ol.events.EventTarget}\n */\nol.style.IconImage = function(image, src, size, crossOrigin, imageState,\n    color) {\n\n  ol.events.EventTarget.call(this);\n\n  /**\n   * @private\n   * @type {Image|HTMLCanvasElement}\n   */\n  this.hitDetectionImage_ = null;\n\n  /**\n   * @private\n   * @type {Image|HTMLCanvasElement}\n   */\n  this.image_ = !image ? new Image() : image;\n\n  if (crossOrigin !== null) {\n    this.image_.crossOrigin = crossOrigin;\n  }\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = color ?\n    /** @type {HTMLCanvasElement} */ (document.createElement('CANVAS')) :\n    null;\n\n  /**\n   * @private\n   * @type {ol.Color}\n   */\n  this.color_ = color;\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.imageListenerKeys_ = null;\n\n  /**\n   * @private\n   * @type {ol.ImageState}\n   */\n  this.imageState_ = imageState;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.size_ = size;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.src_ = src;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.tainting_ = false;\n  if (this.imageState_ == ol.ImageState.LOADED) {\n    this.determineTainting_();\n  }\n\n};\nol.inherits(ol.style.IconImage, ol.events.EventTarget);\n\n\n/**\n * @param {Image|HTMLCanvasElement} image Image.\n * @param {string} src Src.\n * @param {ol.Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.ImageState} imageState Image state.\n * @param {ol.Color} color Color.\n * @return {ol.style.IconImage} Icon image.\n */\nol.style.IconImage.get = function(image, src, size, crossOrigin, imageState,\n    color) {\n  var iconImageCache = ol.style.iconImageCache;\n  var iconImage = iconImageCache.get(src, crossOrigin, color);\n  if (!iconImage) {\n    iconImage = new ol.style.IconImage(\n        image, src, size, crossOrigin, imageState, color);\n    iconImageCache.set(src, crossOrigin, color, iconImage);\n  }\n  return iconImage;\n};\n\n\n/**\n * @private\n */\nol.style.IconImage.prototype.determineTainting_ = function() {\n  var context = ol.dom.createCanvasContext2D(1, 1);\n  try {\n    context.drawImage(this.image_, 0, 0);\n    context.getImageData(0, 0, 1, 1);\n  } catch (e) {\n    this.tainting_ = true;\n  }\n};\n\n\n/**\n * @private\n */\nol.style.IconImage.prototype.dispatchChangeEvent_ = function() {\n  this.dispatchEvent(ol.events.EventType.CHANGE);\n};\n\n\n/**\n * @private\n */\nol.style.IconImage.prototype.handleImageError_ = function() {\n  this.imageState_ = ol.ImageState.ERROR;\n  this.unlistenImage_();\n  this.dispatchChangeEvent_();\n};\n\n\n/**\n * @private\n */\nol.style.IconImage.prototype.handleImageLoad_ = function() {\n  this.imageState_ = ol.ImageState.LOADED;\n  if (this.size_) {\n    this.image_.width = this.size_[0];\n    this.image_.height = this.size_[1];\n  }\n  this.size_ = [this.image_.width, this.image_.height];\n  this.unlistenImage_();\n  this.determineTainting_();\n  this.replaceColor_();\n  this.dispatchChangeEvent_();\n};\n\n\n/**\n * @param {number} pixelRatio Pixel ratio.\n * @return {Image|HTMLCanvasElement} Image or Canvas element.\n */\nol.style.IconImage.prototype.getImage = function(pixelRatio) {\n  return this.canvas_ ? this.canvas_ : this.image_;\n};\n\n\n/**\n * @return {ol.ImageState} Image state.\n */\nol.style.IconImage.prototype.getImageState = function() {\n  return this.imageState_;\n};\n\n\n/**\n * @param {number} pixelRatio Pixel ratio.\n * @return {Image|HTMLCanvasElement} Image element.\n */\nol.style.IconImage.prototype.getHitDetectionImage = function(pixelRatio) {\n  if (!this.hitDetectionImage_) {\n    if (this.tainting_) {\n      var width = this.size_[0];\n      var height = this.size_[1];\n      var context = ol.dom.createCanvasContext2D(width, height);\n      context.fillRect(0, 0, width, height);\n      this.hitDetectionImage_ = context.canvas;\n    } else {\n      this.hitDetectionImage_ = this.image_;\n    }\n  }\n  return this.hitDetectionImage_;\n};\n\n\n/**\n * @return {ol.Size} Image size.\n */\nol.style.IconImage.prototype.getSize = function() {\n  return this.size_;\n};\n\n\n/**\n * @return {string|undefined} Image src.\n */\nol.style.IconImage.prototype.getSrc = function() {\n  return this.src_;\n};\n\n\n/**\n * Load not yet loaded URI.\n */\nol.style.IconImage.prototype.load = function() {\n  if (this.imageState_ == ol.ImageState.IDLE) {\n    this.imageState_ = ol.ImageState.LOADING;\n    this.imageListenerKeys_ = [\n      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,\n          this.handleImageError_, this),\n      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,\n          this.handleImageLoad_, this)\n    ];\n    try {\n      this.image_.src = this.src_;\n    } catch (e) {\n      this.handleImageError_();\n    }\n  }\n};\n\n\n/**\n * @private\n */\nol.style.IconImage.prototype.replaceColor_ = function() {\n  if (this.tainting_ || this.color_ === null) {\n    return;\n  }\n\n  this.canvas_.width = this.image_.width;\n  this.canvas_.height = this.image_.height;\n\n  var ctx = this.canvas_.getContext('2d');\n  ctx.drawImage(this.image_, 0, 0);\n\n  var imgData = ctx.getImageData(0, 0, this.image_.width, this.image_.height);\n  var data = imgData.data;\n  var r = this.color_[0] / 255.0;\n  var g = this.color_[1] / 255.0;\n  var b = this.color_[2] / 255.0;\n\n  for (var i = 0, ii = data.length; i < ii; i += 4) {\n    data[i] *= r;\n    data[i + 1] *= g;\n    data[i + 2] *= b;\n  }\n  ctx.putImageData(imgData, 0, 0);\n};\n\n\n/**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\nol.style.IconImage.prototype.unlistenImage_ = function() {\n  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.imageListenerKeys_ = null;\n};\n\ngoog.provide('ol.style.IconOrigin');\n\n/**\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n * @enum {string}\n */\nol.style.IconOrigin = {\n  BOTTOM_LEFT: 'bottom-left',\n  BOTTOM_RIGHT: 'bottom-right',\n  TOP_LEFT: 'top-left',\n  TOP_RIGHT: 'top-right'\n};\n\ngoog.provide('ol.style.Icon');\n\ngoog.require('ol');\ngoog.require('ol.ImageState');\ngoog.require('ol.asserts');\ngoog.require('ol.color');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.style.IconAnchorUnits');\ngoog.require('ol.style.IconImage');\ngoog.require('ol.style.IconOrigin');\ngoog.require('ol.style.Image');\n\n\n/**\n * @classdesc\n * Set icon style for vector features.\n *\n * @constructor\n * @param {olx.style.IconOptions=} opt_options Options.\n * @extends {ol.style.Image}\n * @api\n */\nol.style.Icon = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.normalizedAnchor_ = null;\n\n  /**\n   * @private\n   * @type {ol.style.IconOrigin}\n   */\n  this.anchorOrigin_ = options.anchorOrigin !== undefined ?\n    options.anchorOrigin : ol.style.IconOrigin.TOP_LEFT;\n\n  /**\n   * @private\n   * @type {ol.style.IconAnchorUnits}\n   */\n  this.anchorXUnits_ = options.anchorXUnits !== undefined ?\n    options.anchorXUnits : ol.style.IconAnchorUnits.FRACTION;\n\n  /**\n   * @private\n   * @type {ol.style.IconAnchorUnits}\n   */\n  this.anchorYUnits_ = options.anchorYUnits !== undefined ?\n    options.anchorYUnits : ol.style.IconAnchorUnits.FRACTION;\n\n  /**\n   * @private\n   * @type {?string}\n   */\n  this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n  /**\n   * @type {Image|HTMLCanvasElement}\n   */\n  var image = options.img !== undefined ? options.img : null;\n\n  /**\n   * @type {ol.Size}\n   */\n  var imgSize = options.imgSize !== undefined ? options.imgSize : null;\n\n  /**\n   * @type {string|undefined}\n   */\n  var src = options.src;\n\n  ol.asserts.assert(!(src !== undefined && image),\n      4); // `image` and `src` cannot be provided at the same time\n  ol.asserts.assert(!image || (image && imgSize),\n      5); // `imgSize` must be set when `image` is provided\n\n  if ((src === undefined || src.length === 0) && image) {\n    src = image.src || ol.getUid(image).toString();\n  }\n  ol.asserts.assert(src !== undefined && src.length > 0,\n      6); // A defined and non-empty `src` or `image` must be provided\n\n  /**\n   * @type {ol.ImageState}\n   */\n  var imageState = options.src !== undefined ?\n    ol.ImageState.IDLE : ol.ImageState.LOADED;\n\n  /**\n   * @private\n   * @type {ol.Color}\n   */\n  this.color_ = options.color !== undefined ? ol.color.asArray(options.color) :\n    null;\n\n  /**\n   * @private\n   * @type {ol.style.IconImage}\n   */\n  this.iconImage_ = ol.style.IconImage.get(\n      image, /** @type {string} */ (src), imgSize, this.crossOrigin_, imageState, this.color_);\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n\n  /**\n   * @private\n   * @type {ol.style.IconOrigin}\n   */\n  this.offsetOrigin_ = options.offsetOrigin !== undefined ?\n    options.offsetOrigin : ol.style.IconOrigin.TOP_LEFT;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.origin_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.size_ = options.size !== undefined ? options.size : null;\n\n  /**\n   * @type {number}\n   */\n  var opacity = options.opacity !== undefined ? options.opacity : 1;\n\n  /**\n   * @type {boolean}\n   */\n  var rotateWithView = options.rotateWithView !== undefined ?\n    options.rotateWithView : false;\n\n  /**\n   * @type {number}\n   */\n  var rotation = options.rotation !== undefined ? options.rotation : 0;\n\n  /**\n   * @type {number}\n   */\n  var scale = options.scale !== undefined ? options.scale : 1;\n\n  /**\n   * @type {boolean}\n   */\n  var snapToPixel = options.snapToPixel !== undefined ?\n    options.snapToPixel : true;\n\n  ol.style.Image.call(this, {\n    opacity: opacity,\n    rotation: rotation,\n    scale: scale,\n    snapToPixel: snapToPixel,\n    rotateWithView: rotateWithView\n  });\n\n};\nol.inherits(ol.style.Icon, ol.style.Image);\n\n\n/**\n * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n * @return {ol.style.Icon} The cloned style.\n * @api\n */\nol.style.Icon.prototype.clone = function() {\n  return new ol.style.Icon({\n    anchor: this.anchor_.slice(),\n    anchorOrigin: this.anchorOrigin_,\n    anchorXUnits: this.anchorXUnits_,\n    anchorYUnits: this.anchorYUnits_,\n    crossOrigin: this.crossOrigin_,\n    color: (this.color_ && this.color_.slice) ? this.color_.slice() : this.color_ || undefined,\n    src: this.getSrc(),\n    offset: this.offset_.slice(),\n    offsetOrigin: this.offsetOrigin_,\n    size: this.size_ !== null ? this.size_.slice() : undefined,\n    opacity: this.getOpacity(),\n    scale: this.getScale(),\n    snapToPixel: this.getSnapToPixel(),\n    rotation: this.getRotation(),\n    rotateWithView: this.getRotateWithView()\n  });\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.Icon.prototype.getAnchor = function() {\n  if (this.normalizedAnchor_) {\n    return this.normalizedAnchor_;\n  }\n  var anchor = this.anchor_;\n  var size = this.getSize();\n  if (this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION ||\n      this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) {\n    if (!size) {\n      return null;\n    }\n    anchor = this.anchor_.slice();\n    if (this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION) {\n      anchor[0] *= size[0];\n    }\n    if (this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) {\n      anchor[1] *= size[1];\n    }\n  }\n\n  if (this.anchorOrigin_ != ol.style.IconOrigin.TOP_LEFT) {\n    if (!size) {\n      return null;\n    }\n    if (anchor === this.anchor_) {\n      anchor = this.anchor_.slice();\n    }\n    if (this.anchorOrigin_ == ol.style.IconOrigin.TOP_RIGHT ||\n        this.anchorOrigin_ == ol.style.IconOrigin.BOTTOM_RIGHT) {\n      anchor[0] = -anchor[0] + size[0];\n    }\n    if (this.anchorOrigin_ == ol.style.IconOrigin.BOTTOM_LEFT ||\n        this.anchorOrigin_ == ol.style.IconOrigin.BOTTOM_RIGHT) {\n      anchor[1] = -anchor[1] + size[1];\n    }\n  }\n  this.normalizedAnchor_ = anchor;\n  return this.normalizedAnchor_;\n};\n\n\n/**\n * Get the icon color.\n * @return {ol.Color} Color.\n * @api\n */\nol.style.Icon.prototype.getColor = function() {\n  return this.color_;\n};\n\n\n/**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {Image|HTMLCanvasElement} Image or Canvas element.\n * @override\n * @api\n */\nol.style.Icon.prototype.getImage = function(pixelRatio) {\n  return this.iconImage_.getImage(pixelRatio);\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.getImageSize = function() {\n  return this.iconImage_.getSize();\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.getHitDetectionImageSize = function() {\n  return this.getImageSize();\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.getImageState = function() {\n  return this.iconImage_.getImageState();\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.getHitDetectionImage = function(pixelRatio) {\n  return this.iconImage_.getHitDetectionImage(pixelRatio);\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.Icon.prototype.getOrigin = function() {\n  if (this.origin_) {\n    return this.origin_;\n  }\n  var offset = this.offset_;\n\n  if (this.offsetOrigin_ != ol.style.IconOrigin.TOP_LEFT) {\n    var size = this.getSize();\n    var iconImageSize = this.iconImage_.getSize();\n    if (!size || !iconImageSize) {\n      return null;\n    }\n    offset = offset.slice();\n    if (this.offsetOrigin_ == ol.style.IconOrigin.TOP_RIGHT ||\n        this.offsetOrigin_ == ol.style.IconOrigin.BOTTOM_RIGHT) {\n      offset[0] = iconImageSize[0] - size[0] - offset[0];\n    }\n    if (this.offsetOrigin_ == ol.style.IconOrigin.BOTTOM_LEFT ||\n        this.offsetOrigin_ == ol.style.IconOrigin.BOTTOM_RIGHT) {\n      offset[1] = iconImageSize[1] - size[1] - offset[1];\n    }\n  }\n  this.origin_ = offset;\n  return this.origin_;\n};\n\n\n/**\n * Get the image URL.\n * @return {string|undefined} Image src.\n * @api\n */\nol.style.Icon.prototype.getSrc = function() {\n  return this.iconImage_.getSrc();\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.style.Icon.prototype.getSize = function() {\n  return !this.size_ ? this.iconImage_.getSize() : this.size_;\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.listenImageChange = function(listener, thisArg) {\n  return ol.events.listen(this.iconImage_, ol.events.EventType.CHANGE,\n      listener, thisArg);\n};\n\n\n/**\n * Load not yet loaded URI.\n * When rendering a feature with an icon style, the vector renderer will\n * automatically call this method. However, you might want to call this\n * method yourself for preloading or other purposes.\n * @override\n * @api\n */\nol.style.Icon.prototype.load = function() {\n  this.iconImage_.load();\n};\n\n\n/**\n * @override\n */\nol.style.Icon.prototype.unlistenImageChange = function(listener, thisArg) {\n  ol.events.unlisten(this.iconImage_, ol.events.EventType.CHANGE,\n      listener, thisArg);\n};\n\ngoog.provide('ol.style.Text');\n\n\ngoog.require('ol.style.Fill');\ngoog.require('ol.style.TextPlacement');\n\n\n/**\n * @classdesc\n * Set text style for vector features.\n *\n * @constructor\n * @param {olx.style.TextOptions=} opt_options Options.\n * @api\n */\nol.style.Text = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.font_ = options.font;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.rotation_ = options.rotation;\n\n  /**\n   * @private\n   * @type {boolean|undefined}\n   */\n  this.rotateWithView_ = options.rotateWithView;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.scale_ = options.scale;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.text_ = options.text;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.textAlign_ = options.textAlign;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.textBaseline_ = options.textBaseline;\n\n  /**\n   * @private\n   * @type {ol.style.Fill}\n   */\n  this.fill_ = options.fill !== undefined ? options.fill :\n    new ol.style.Fill({color: ol.style.Text.DEFAULT_FILL_COLOR_});\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxAngle_ = options.maxAngle !== undefined ? options.maxAngle : Math.PI / 4;\n\n  /**\n   * @private\n   * @type {ol.style.TextPlacement|string}\n   */\n  this.placement_ = options.placement !== undefined ? options.placement : ol.style.TextPlacement.POINT;\n\n  //TODO Use options.overflow directly after removing @deprecated exceedLength\n  var overflow = options.overflow === undefined ? options.exceedLength : options.overflow;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.overflow_ = overflow !== undefined ? overflow : false;\n\n  /**\n   * @private\n   * @type {ol.style.Stroke}\n   */\n  this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;\n\n  /**\n   * @private\n   * @type {ol.style.Fill}\n   */\n  this.backgroundFill_ = options.backgroundFill ? options.backgroundFill : null;\n\n  /**\n   * @private\n   * @type {ol.style.Stroke}\n   */\n  this.backgroundStroke_ = options.backgroundStroke ? options.backgroundStroke : null;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.padding_ = options.padding === undefined ? null : options.padding;\n};\n\n\n/**\n * The default fill color to use if no fill was set at construction time; a\n * blackish `#333`.\n *\n * @const {string}\n * @private\n */\nol.style.Text.DEFAULT_FILL_COLOR_ = '#333';\n\n\n/**\n * Clones the style.\n * @return {ol.style.Text} The cloned style.\n * @api\n */\nol.style.Text.prototype.clone = function() {\n  return new ol.style.Text({\n    font: this.getFont(),\n    placement: this.getPlacement(),\n    maxAngle: this.getMaxAngle(),\n    overflow: this.getOverflow(),\n    rotation: this.getRotation(),\n    rotateWithView: this.getRotateWithView(),\n    scale: this.getScale(),\n    text: this.getText(),\n    textAlign: this.getTextAlign(),\n    textBaseline: this.getTextBaseline(),\n    fill: this.getFill() ? this.getFill().clone() : undefined,\n    stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n    offsetX: this.getOffsetX(),\n    offsetY: this.getOffsetY()\n  });\n};\n\n\n/**\n * Get the `overflow` configuration.\n * @return {boolean} Let text overflow the length of the path they follow.\n * @api\n */\nol.style.Text.prototype.getOverflow = function() {\n  return this.overflow_;\n};\n\n\n/**\n * Get the font name.\n * @return {string|undefined} Font.\n * @api\n */\nol.style.Text.prototype.getFont = function() {\n  return this.font_;\n};\n\n\n/**\n * Get the maximum angle between adjacent characters.\n * @return {number} Angle in radians.\n * @api\n */\nol.style.Text.prototype.getMaxAngle = function() {\n  return this.maxAngle_;\n};\n\n\n/**\n * Get the label placement.\n * @return {ol.style.TextPlacement|string} Text placement.\n * @api\n */\nol.style.Text.prototype.getPlacement = function() {\n  return this.placement_;\n};\n\n\n/**\n * Get the x-offset for the text.\n * @return {number} Horizontal text offset.\n * @api\n */\nol.style.Text.prototype.getOffsetX = function() {\n  return this.offsetX_;\n};\n\n\n/**\n * Get the y-offset for the text.\n * @return {number} Vertical text offset.\n * @api\n */\nol.style.Text.prototype.getOffsetY = function() {\n  return this.offsetY_;\n};\n\n\n/**\n * Get the fill style for the text.\n * @return {ol.style.Fill} Fill style.\n * @api\n */\nol.style.Text.prototype.getFill = function() {\n  return this.fill_;\n};\n\n\n/**\n * Determine whether the text rotates with the map.\n * @return {boolean|undefined} Rotate with map.\n * @api\n */\nol.style.Text.prototype.getRotateWithView = function() {\n  return this.rotateWithView_;\n};\n\n\n/**\n * Get the text rotation.\n * @return {number|undefined} Rotation.\n * @api\n */\nol.style.Text.prototype.getRotation = function() {\n  return this.rotation_;\n};\n\n\n/**\n * Get the text scale.\n * @return {number|undefined} Scale.\n * @api\n */\nol.style.Text.prototype.getScale = function() {\n  return this.scale_;\n};\n\n\n/**\n * Get the stroke style for the text.\n * @return {ol.style.Stroke} Stroke style.\n * @api\n */\nol.style.Text.prototype.getStroke = function() {\n  return this.stroke_;\n};\n\n\n/**\n * Get the text to be rendered.\n * @return {string|undefined} Text.\n * @api\n */\nol.style.Text.prototype.getText = function() {\n  return this.text_;\n};\n\n\n/**\n * Get the text alignment.\n * @return {string|undefined} Text align.\n * @api\n */\nol.style.Text.prototype.getTextAlign = function() {\n  return this.textAlign_;\n};\n\n\n/**\n * Get the text baseline.\n * @return {string|undefined} Text baseline.\n * @api\n */\nol.style.Text.prototype.getTextBaseline = function() {\n  return this.textBaseline_;\n};\n\n\n/**\n * Get the background fill style for the text.\n * @return {ol.style.Fill} Fill style.\n * @api\n */\nol.style.Text.prototype.getBackgroundFill = function() {\n  return this.backgroundFill_;\n};\n\n\n/**\n * Get the background stroke style for the text.\n * @return {ol.style.Stroke} Stroke style.\n * @api\n */\nol.style.Text.prototype.getBackgroundStroke = function() {\n  return this.backgroundStroke_;\n};\n\n\n/**\n * Get the padding for the text.\n * @return {Array.<number>} Padding.\n * @api\n */\nol.style.Text.prototype.getPadding = function() {\n  return this.padding_;\n};\n\n\n/**\n * Set the `overflow` property.\n *\n * @param {boolean} overflow Let text overflow the path that it follows.\n * @api\n */\nol.style.Text.prototype.setOverflow = function(overflow) {\n  this.overflow_ = overflow;\n};\n\n\n/**\n * Set the font.\n *\n * @param {string|undefined} font Font.\n * @api\n */\nol.style.Text.prototype.setFont = function(font) {\n  this.font_ = font;\n};\n\n\n/**\n * Set the maximum angle between adjacent characters.\n *\n * @param {number} maxAngle Angle in radians.\n * @api\n */\nol.style.Text.prototype.setMaxAngle = function(maxAngle) {\n  this.maxAngle_ = maxAngle;\n};\n\n\n/**\n * Set the x offset.\n *\n * @param {number} offsetX Horizontal text offset.\n * @api\n */\nol.style.Text.prototype.setOffsetX = function(offsetX) {\n  this.offsetX_ = offsetX;\n};\n\n\n/**\n * Set the y offset.\n *\n * @param {number} offsetY Vertical text offset.\n * @api\n */\nol.style.Text.prototype.setOffsetY = function(offsetY) {\n  this.offsetY_ = offsetY;\n};\n\n\n/**\n * Set the text placement.\n *\n * @param {ol.style.TextPlacement|string} placement Placement.\n * @api\n */\nol.style.Text.prototype.setPlacement = function(placement) {\n  this.placement_ = placement;\n};\n\n\n/**\n * Set the fill.\n *\n * @param {ol.style.Fill} fill Fill style.\n * @api\n */\nol.style.Text.prototype.setFill = function(fill) {\n  this.fill_ = fill;\n};\n\n\n/**\n * Set the rotation.\n *\n * @param {number|undefined} rotation Rotation.\n * @api\n */\nol.style.Text.prototype.setRotation = function(rotation) {\n  this.rotation_ = rotation;\n};\n\n\n/**\n * Set the scale.\n *\n * @param {number|undefined} scale Scale.\n * @api\n */\nol.style.Text.prototype.setScale = function(scale) {\n  this.scale_ = scale;\n};\n\n\n/**\n * Set the stroke.\n *\n * @param {ol.style.Stroke} stroke Stroke style.\n * @api\n */\nol.style.Text.prototype.setStroke = function(stroke) {\n  this.stroke_ = stroke;\n};\n\n\n/**\n * Set the text.\n *\n * @param {string|undefined} text Text.\n * @api\n */\nol.style.Text.prototype.setText = function(text) {\n  this.text_ = text;\n};\n\n\n/**\n * Set the text alignment.\n *\n * @param {string|undefined} textAlign Text align.\n * @api\n */\nol.style.Text.prototype.setTextAlign = function(textAlign) {\n  this.textAlign_ = textAlign;\n};\n\n\n/**\n * Set the text baseline.\n *\n * @param {string|undefined} textBaseline Text baseline.\n * @api\n */\nol.style.Text.prototype.setTextBaseline = function(textBaseline) {\n  this.textBaseline_ = textBaseline;\n};\n\n\n/**\n * Set the background fill.\n *\n * @param {ol.style.Fill} fill Fill style.\n * @api\n */\nol.style.Text.prototype.setBackgroundFill = function(fill) {\n  this.backgroundFill_ = fill;\n};\n\n\n/**\n * Set the background stroke.\n *\n * @param {ol.style.Stroke} stroke Stroke style.\n * @api\n */\nol.style.Text.prototype.setBackgroundStroke = function(stroke) {\n  this.backgroundStroke_ = stroke;\n};\n\n\n/**\n * Set the padding (`[top, right, bottom, left]`).\n *\n * @param {!Array.<number>} padding Padding.\n * @api\n */\nol.style.Text.prototype.setPadding = function(padding) {\n  this.padding_ = padding;\n};\n\n// FIXME http://earth.google.com/kml/1.0 namespace?\n// FIXME why does node.getAttribute return an unknown type?\n// FIXME serialize arbitrary feature properties\n// FIXME don't parse style if extractStyles is false\n\ngoog.provide('ol.format.KML');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.array');\ngoog.require('ol.asserts');\ngoog.require('ol.color');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.format.XSD');\ngoog.require('ol.geom.GeometryCollection');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.math');\ngoog.require('ol.proj');\ngoog.require('ol.style.Fill');\ngoog.require('ol.style.Icon');\ngoog.require('ol.style.IconAnchorUnits');\ngoog.require('ol.style.IconOrigin');\ngoog.require('ol.style.Stroke');\ngoog.require('ol.style.Style');\ngoog.require('ol.style.Text');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the KML format.\n *\n * Note that the KML format uses the URL() constructor. Older browsers such as IE\n * which do not support this will need a URL polyfill to be loaded before use.\n *\n * @constructor\n * @extends {ol.format.XMLFeature}\n * @param {olx.format.KMLOptions=} opt_options Options.\n * @api\n */\nol.format.KML = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.XMLFeature.call(this);\n\n  if (!ol.format.KML.DEFAULT_STYLE_ARRAY_) {\n    ol.format.KML.createStyleDefaults_();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get('EPSG:4326');\n\n  /**\n   * @private\n   * @type {Array.<ol.style.Style>}\n   */\n  this.defaultStyle_ = options.defaultStyle ?\n    options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.extractStyles_ = options.extractStyles !== undefined ?\n    options.extractStyles : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.writeStyles_ = options.writeStyles !== undefined ?\n    options.writeStyles : true;\n\n  /**\n   * @private\n   * @type {Object.<string, (Array.<ol.style.Style>|string)>}\n   */\n  this.sharedStyles_ = {};\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.showPointNames_ = options.showPointNames !== undefined ?\n    options.showPointNames : true;\n\n};\nol.inherits(ol.format.KML, ol.format.XMLFeature);\n\n\n/**\n * @const\n * @type {Array.<string>}\n * @private\n */\nol.format.KML.GX_NAMESPACE_URIS_ = [\n  'http://www.google.com/kml/ext/2.2'\n];\n\n\n/**\n * @const\n * @type {Array.<string>}\n * @private\n */\nol.format.KML.NAMESPACE_URIS_ = [\n  null,\n  'http://earth.google.com/kml/2.0',\n  'http://earth.google.com/kml/2.1',\n  'http://earth.google.com/kml/2.2',\n  'http://www.opengis.net/kml/2.2'\n];\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.KML.SCHEMA_LOCATION_ = 'http://www.opengis.net/kml/2.2 ' +\n    'https://developers.google.com/kml/schema/kml22gx.xsd';\n\n\n/**\n * @return {Array.<ol.style.Style>} Default style.\n * @private\n */\nol.format.KML.createStyleDefaults_ = function() {\n  /**\n   * @const\n   * @type {ol.Color}\n   * @private\n   */\n  ol.format.KML.DEFAULT_COLOR_ = [255, 255, 255, 1];\n\n  /**\n   * @const\n   * @type {ol.style.Fill}\n   * @private\n   */\n  ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({\n    color: ol.format.KML.DEFAULT_COLOR_\n  });\n\n  /**\n   * @const\n   * @type {ol.Size}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [20, 2]; // FIXME maybe [8, 32] ?\n\n  /**\n   * @const\n   * @type {ol.style.IconAnchorUnits}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_ =\n      ol.style.IconAnchorUnits.PIXELS;\n\n  /**\n   * @const\n   * @type {ol.style.IconAnchorUnits}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ =\n      ol.style.IconAnchorUnits.PIXELS;\n\n  /**\n   * @const\n   * @type {ol.Size}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [64, 64];\n\n  /**\n   * @const\n   * @type {string}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ =\n      'https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png';\n\n  /**\n   * @const\n   * @type {number}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_ = 0.5;\n\n  /**\n   * @const\n   * @type {ol.style.Image}\n   * @private\n   */\n  ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({\n    anchor: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_,\n    anchorOrigin: ol.style.IconOrigin.BOTTOM_LEFT,\n    anchorXUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_,\n    anchorYUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_,\n    crossOrigin: 'anonymous',\n    rotation: 0,\n    scale: ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_,\n    size: ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_,\n    src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_\n  });\n\n  /**\n   * @const\n   * @type {string}\n   * @private\n   */\n  ol.format.KML.DEFAULT_NO_IMAGE_STYLE_ = 'NO_IMAGE';\n\n  /**\n   * @const\n   * @type {ol.style.Stroke}\n   * @private\n   */\n  ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({\n    color: ol.format.KML.DEFAULT_COLOR_,\n    width: 1\n  });\n\n  /**\n   * @const\n   * @type {ol.style.Stroke}\n   * @private\n   */\n  ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_ = new ol.style.Stroke({\n    color: [51, 51, 51, 1],\n    width: 2\n  });\n\n  /**\n   * @const\n   * @type {ol.style.Text}\n   * @private\n   */\n  ol.format.KML.DEFAULT_TEXT_STYLE_ = new ol.style.Text({\n    font: 'bold 16px Helvetica',\n    fill: ol.format.KML.DEFAULT_FILL_STYLE_,\n    stroke: ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_,\n    scale: 0.8\n  });\n\n  /**\n   * @const\n   * @type {ol.style.Style}\n   * @private\n   */\n  ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({\n    fill: ol.format.KML.DEFAULT_FILL_STYLE_,\n    image: ol.format.KML.DEFAULT_IMAGE_STYLE_,\n    text: ol.format.KML.DEFAULT_TEXT_STYLE_,\n    stroke: ol.format.KML.DEFAULT_STROKE_STYLE_,\n    zIndex: 0\n  });\n\n  /**\n   * @const\n   * @type {Array.<ol.style.Style>}\n   * @private\n   */\n  ol.format.KML.DEFAULT_STYLE_ARRAY_ = [ol.format.KML.DEFAULT_STYLE_];\n\n  return ol.format.KML.DEFAULT_STYLE_ARRAY_;\n};\n\n\n/**\n * @const\n * @type {Object.<string, ol.style.IconAnchorUnits>}\n * @private\n */\nol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {\n  'fraction': ol.style.IconAnchorUnits.FRACTION,\n  'pixels': ol.style.IconAnchorUnits.PIXELS,\n  'insetPixels': ol.style.IconAnchorUnits.PIXELS\n};\n\n\n/**\n * @param {ol.style.Style|undefined} foundStyle Style.\n * @param {string} name Name.\n * @return {ol.style.Style} style Style.\n * @private\n */\nol.format.KML.createNameStyleFunction_ = function(foundStyle, name) {\n  var textStyle = null;\n  var textOffset = [0, 0];\n  var textAlign = 'start';\n  if (foundStyle.getImage()) {\n    var imageSize = foundStyle.getImage().getImageSize();\n    if (imageSize === null) {\n      imageSize = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;\n    }\n    if (imageSize.length == 2) {\n      var imageScale = foundStyle.getImage().getScale();\n      // Offset the label to be centered to the right of the icon, if there is\n      // one.\n      textOffset[0] = imageScale * imageSize[0] / 2;\n      textOffset[1] = -imageScale * imageSize[1] / 2;\n      textAlign = 'left';\n    }\n  }\n  if (foundStyle.getText() !== null) {\n    // clone the text style, customizing it with name, alignments and offset.\n    // Note that kml does not support many text options that OpenLayers does (rotation, textBaseline).\n    var foundText = foundStyle.getText();\n    textStyle = foundText.clone();\n    textStyle.setFont(foundText.getFont() || ol.format.KML.DEFAULT_TEXT_STYLE_.getFont());\n    textStyle.setScale(foundText.getScale() || ol.format.KML.DEFAULT_TEXT_STYLE_.getScale());\n    textStyle.setFill(foundText.getFill() || ol.format.KML.DEFAULT_TEXT_STYLE_.getFill());\n    textStyle.setStroke(foundText.getStroke() || ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_);\n  } else {\n    textStyle = ol.format.KML.DEFAULT_TEXT_STYLE_.clone();\n  }\n  textStyle.setText(name);\n  textStyle.setOffsetX(textOffset[0]);\n  textStyle.setOffsetY(textOffset[1]);\n  textStyle.setTextAlign(textAlign);\n\n  var nameStyle = new ol.style.Style({\n    text: textStyle\n  });\n  return nameStyle;\n};\n\n\n/**\n * @param {Array.<ol.style.Style>|undefined} style Style.\n * @param {string} styleUrl Style URL.\n * @param {Array.<ol.style.Style>} defaultStyle Default style.\n * @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles Shared\n *          styles.\n * @param {boolean|undefined} showPointNames true to show names for point\n *          placemarks.\n * @return {ol.FeatureStyleFunction} Feature style function.\n * @private\n */\nol.format.KML.createFeatureStyleFunction_ = function(style, styleUrl,\n    defaultStyle, sharedStyles, showPointNames) {\n\n  return (\n  /**\n       * @param {number} resolution Resolution.\n       * @return {Array.<ol.style.Style>} Style.\n       * @this {ol.Feature}\n       */\n    function(resolution) {\n      var drawName = showPointNames;\n      /** @type {ol.style.Style|undefined} */\n      var nameStyle;\n      var name = '';\n      if (drawName) {\n        if (this.getGeometry()) {\n          drawName = (this.getGeometry().getType() ===\n                        ol.geom.GeometryType.POINT);\n        }\n      }\n\n      if (drawName) {\n        name = /** @type {string} */ (this.get('name'));\n        drawName = drawName && name;\n      }\n\n      if (style) {\n        if (drawName) {\n          nameStyle = ol.format.KML.createNameStyleFunction_(style[0],\n              name);\n          return style.concat(nameStyle);\n        }\n        return style;\n      }\n      if (styleUrl) {\n        var foundStyle = ol.format.KML.findStyle_(styleUrl, defaultStyle,\n            sharedStyles);\n        if (drawName) {\n          nameStyle = ol.format.KML.createNameStyleFunction_(foundStyle[0],\n              name);\n          return foundStyle.concat(nameStyle);\n        }\n        return foundStyle;\n      }\n      if (drawName) {\n        nameStyle = ol.format.KML.createNameStyleFunction_(defaultStyle[0],\n            name);\n        return defaultStyle.concat(nameStyle);\n      }\n      return defaultStyle;\n    });\n};\n\n\n/**\n * @param {Array.<ol.style.Style>|string|undefined} styleValue Style value.\n * @param {Array.<ol.style.Style>} defaultStyle Default style.\n * @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles\n * Shared styles.\n * @return {Array.<ol.style.Style>} Style.\n * @private\n */\nol.format.KML.findStyle_ = function(styleValue, defaultStyle, sharedStyles) {\n  if (Array.isArray(styleValue)) {\n    return styleValue;\n  } else if (typeof styleValue === 'string') {\n    // KML files in the wild occasionally forget the leading `#` on styleUrls\n    // defined in the same document.  Add a leading `#` if it enables to find\n    // a style.\n    if (!(styleValue in sharedStyles) && ('#' + styleValue in sharedStyles)) {\n      styleValue = '#' + styleValue;\n    }\n    return ol.format.KML.findStyle_(\n        sharedStyles[styleValue], defaultStyle, sharedStyles);\n  } else {\n    return defaultStyle;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @private\n * @return {ol.Color|undefined} Color.\n */\nol.format.KML.readColor_ = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  // The KML specification states that colors should not include a leading `#`\n  // but we tolerate them.\n  var m = /^\\s*#?\\s*([0-9A-Fa-f]{8})\\s*$/.exec(s);\n  if (m) {\n    var hexColor = m[1];\n    return [\n      parseInt(hexColor.substr(6, 2), 16),\n      parseInt(hexColor.substr(4, 2), 16),\n      parseInt(hexColor.substr(2, 2), 16),\n      parseInt(hexColor.substr(0, 2), 16) / 255\n    ];\n\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @private\n * @return {Array.<number>|undefined} Flat coordinates.\n */\nol.format.KML.readFlatCoordinates_ = function(node) {\n  var s = ol.xml.getAllTextContent(node, false);\n  var flatCoordinates = [];\n  // The KML specification states that coordinate tuples should not include\n  // spaces, but we tolerate them.\n  var re =\n      /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*,\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)(?:\\s*,\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?))?\\s*/i;\n  var m;\n  while ((m = re.exec(s))) {\n    var x = parseFloat(m[1]);\n    var y = parseFloat(m[2]);\n    var z = m[3] ? parseFloat(m[3]) : 0;\n    flatCoordinates.push(x, y, z);\n    s = s.substr(m[0].length);\n  }\n  if (s !== '') {\n    return undefined;\n  }\n  return flatCoordinates;\n};\n\n\n/**\n * @param {Node} node Node.\n * @private\n * @return {string} URI.\n */\nol.format.KML.readURI_ = function(node) {\n  var s = ol.xml.getAllTextContent(node, false).trim();\n  var baseURI = node.baseURI;\n  if (!baseURI || baseURI == 'about:blank') {\n    baseURI = window.location.href;\n  }\n  if (baseURI) {\n    var url = new URL(s, baseURI);\n    return url.href;\n  } else {\n    return s;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @private\n * @return {ol.KMLVec2_} Vec2.\n */\nol.format.KML.readVec2_ = function(node) {\n  var xunits = node.getAttribute('xunits');\n  var yunits = node.getAttribute('yunits');\n  var origin;\n  if (xunits !== 'insetPixels') {\n    if (yunits !== 'insetPixels') {\n      origin = ol.style.IconOrigin.BOTTOM_LEFT;\n    } else {\n      origin = ol.style.IconOrigin.TOP_LEFT;\n    }\n  } else {\n    if (yunits !== 'insetPixels') {\n      origin = ol.style.IconOrigin.BOTTOM_RIGHT;\n    } else {\n      origin = ol.style.IconOrigin.TOP_RIGHT;\n    }\n  }\n  return {\n    x: parseFloat(node.getAttribute('x')),\n    xunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[xunits],\n    y: parseFloat(node.getAttribute('y')),\n    yunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[yunits],\n    origin: origin\n  };\n};\n\n\n/**\n * @param {Node} node Node.\n * @private\n * @return {number|undefined} Scale.\n */\nol.format.KML.readScale_ = function(node) {\n  return ol.format.XSD.readDecimal(node);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<ol.style.Style>|string|undefined} StyleMap.\n */\nol.format.KML.readStyleMapValue_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(undefined,\n      ol.format.KML.STYLE_MAP_PARSERS_, node, objectStack);\n};\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.IconStyleParser_ = function(node, objectStack) {\n  // FIXME refreshMode\n  // FIXME refreshInterval\n  // FIXME viewRefreshTime\n  // FIXME viewBoundScale\n  // FIXME viewFormat\n  // FIXME httpQuery\n  var object = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var IconObject = 'Icon' in object ? object['Icon'] : {};\n  var drawIcon = (!('Icon' in object) || Object.keys(IconObject).length > 0);\n  var src;\n  var href = /** @type {string|undefined} */\n      (IconObject['href']);\n  if (href) {\n    src = href;\n  } else if (drawIcon) {\n    src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_;\n  }\n  var anchor, anchorXUnits, anchorYUnits;\n  var anchorOrigin = ol.style.IconOrigin.BOTTOM_LEFT;\n  var hotSpot = /** @type {ol.KMLVec2_|undefined} */\n      (object['hotSpot']);\n  if (hotSpot) {\n    anchor = [hotSpot.x, hotSpot.y];\n    anchorXUnits = hotSpot.xunits;\n    anchorYUnits = hotSpot.yunits;\n    anchorOrigin = hotSpot.origin;\n  } else if (src === ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {\n    anchor = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_;\n    anchorXUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_;\n    anchorYUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_;\n  } else if (/^http:\\/\\/maps\\.(?:google|gstatic)\\.com\\//.test(src)) {\n    anchor = [0.5, 0];\n    anchorXUnits = ol.style.IconAnchorUnits.FRACTION;\n    anchorYUnits = ol.style.IconAnchorUnits.FRACTION;\n  }\n\n  var offset;\n  var x = /** @type {number|undefined} */\n      (IconObject['x']);\n  var y = /** @type {number|undefined} */\n      (IconObject['y']);\n  if (x !== undefined && y !== undefined) {\n    offset = [x, y];\n  }\n\n  var size;\n  var w = /** @type {number|undefined} */\n      (IconObject['w']);\n  var h = /** @type {number|undefined} */\n      (IconObject['h']);\n  if (w !== undefined && h !== undefined) {\n    size = [w, h];\n  }\n\n  var rotation;\n  var heading = /** @type {number} */\n      (object['heading']);\n  if (heading !== undefined) {\n    rotation = ol.math.toRadians(heading);\n  }\n\n  var scale = /** @type {number|undefined} */\n      (object['scale']);\n\n  if (drawIcon) {\n    if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {\n      size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;\n      if (scale === undefined) {\n        scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;\n      }\n    }\n\n    var imageStyle = new ol.style.Icon({\n      anchor: anchor,\n      anchorOrigin: anchorOrigin,\n      anchorXUnits: anchorXUnits,\n      anchorYUnits: anchorYUnits,\n      crossOrigin: 'anonymous', // FIXME should this be configurable?\n      offset: offset,\n      offsetOrigin: ol.style.IconOrigin.BOTTOM_LEFT,\n      rotation: rotation,\n      scale: scale,\n      size: size,\n      src: src\n    });\n    styleObject['imageStyle'] = imageStyle;\n  } else {\n    // handle the case when we explicitly want to draw no icon.\n    styleObject['imageStyle'] = ol.format.KML.DEFAULT_NO_IMAGE_STYLE_;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.LabelStyleParser_ = function(node, objectStack) {\n  // FIXME colorMode\n  var object = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.LABEL_STYLE_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var styleObject = objectStack[objectStack.length - 1];\n  var textStyle = new ol.style.Text({\n    fill: new ol.style.Fill({\n      color: /** @type {ol.Color} */\n          ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)\n    }),\n    scale: /** @type {number|undefined} */\n        (object['scale'])\n  });\n  styleObject['textStyle'] = textStyle;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.LineStyleParser_ = function(node, objectStack) {\n  // FIXME colorMode\n  // FIXME gx:outerColor\n  // FIXME gx:outerWidth\n  // FIXME gx:physicalWidth\n  // FIXME gx:labelVisibility\n  var object = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var styleObject = objectStack[objectStack.length - 1];\n  var strokeStyle = new ol.style.Stroke({\n    color: /** @type {ol.Color} */\n        ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_),\n    width: /** @type {number} */ ('width' in object ? object['width'] : 1)\n  });\n  styleObject['strokeStyle'] = strokeStyle;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.PolyStyleParser_ = function(node, objectStack) {\n  // FIXME colorMode\n  var object = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var styleObject = objectStack[objectStack.length - 1];\n  var fillStyle = new ol.style.Fill({\n    color: /** @type {ol.Color} */\n        ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)\n  });\n  styleObject['fillStyle'] = fillStyle;\n  var fill = /** @type {boolean|undefined} */ (object['fill']);\n  if (fill !== undefined) {\n    styleObject['fill'] = fill;\n  }\n  var outline =\n      /** @type {boolean|undefined} */ (object['outline']);\n  if (outline !== undefined) {\n    styleObject['outline'] = outline;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>} LinearRing flat coordinates.\n */\nol.format.KML.readFlatLinearRing_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(null,\n      ol.format.KML.FLAT_LINEAR_RING_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.gxCoordParser_ = function(node, objectStack) {\n  var gxTrackObject = /** @type {ol.KMLGxTrackObject_} */\n      (objectStack[objectStack.length - 1]);\n  var flatCoordinates = gxTrackObject.flatCoordinates;\n  var s = ol.xml.getAllTextContent(node, false);\n  var re =\n      /^\\s*([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s*$/i;\n  var m = re.exec(s);\n  if (m) {\n    var x = parseFloat(m[1]);\n    var y = parseFloat(m[2]);\n    var z = parseFloat(m[3]);\n    flatCoordinates.push(x, y, z, 0);\n  } else {\n    flatCoordinates.push(0, 0, 0, 0);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.MultiLineString|undefined} MultiLineString.\n */\nol.format.KML.readGxMultiTrack_ = function(node, objectStack) {\n  var lineStrings = ol.xml.pushParseAndPop([],\n      ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack);\n  if (!lineStrings) {\n    return undefined;\n  }\n  var multiLineString = new ol.geom.MultiLineString(null);\n  multiLineString.setLineStrings(lineStrings);\n  return multiLineString;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.LineString|undefined} LineString.\n */\nol.format.KML.readGxTrack_ = function(node, objectStack) {\n  var gxTrackObject = ol.xml.pushParseAndPop(\n      /** @type {ol.KMLGxTrackObject_} */ ({\n        flatCoordinates: [],\n        whens: []\n      }), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack);\n  if (!gxTrackObject) {\n    return undefined;\n  }\n  var flatCoordinates = gxTrackObject.flatCoordinates;\n  var whens = gxTrackObject.whens;\n  var i, ii;\n  for (i = 0, ii = Math.min(flatCoordinates.length, whens.length); i < ii;\n    ++i) {\n    flatCoordinates[4 * i + 3] = whens[i];\n  }\n  var lineString = new ol.geom.LineString(null);\n  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);\n  return lineString;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object} Icon object.\n */\nol.format.KML.readIcon_ = function(node, objectStack) {\n  var iconObject = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.ICON_PARSERS_, node, objectStack);\n  if (iconObject) {\n    return iconObject;\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<number>} Flat coordinates.\n */\nol.format.KML.readFlatCoordinatesFromNode_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(null,\n      ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.LineString|undefined} LineString.\n */\nol.format.KML.readLineString_ = function(node, objectStack) {\n  var properties = ol.xml.pushParseAndPop({},\n      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,\n      objectStack);\n  var flatCoordinates =\n      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var lineString = new ol.geom.LineString(null);\n    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    lineString.setProperties(properties);\n    return lineString;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.Polygon|undefined} Polygon.\n */\nol.format.KML.readLinearRing_ = function(node, objectStack) {\n  var properties = ol.xml.pushParseAndPop({},\n      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,\n      objectStack);\n  var flatCoordinates =\n      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var polygon = new ol.geom.Polygon(null);\n    polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates,\n        [flatCoordinates.length]);\n    polygon.setProperties(properties);\n    return polygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.Geometry} Geometry.\n */\nol.format.KML.readMultiGeometry_ = function(node, objectStack) {\n  var geometries = ol.xml.pushParseAndPop([],\n      ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack);\n  if (!geometries) {\n    return null;\n  }\n  if (geometries.length === 0) {\n    return new ol.geom.GeometryCollection(geometries);\n  }\n  /** @type {ol.geom.Geometry} */\n  var multiGeometry;\n  var homogeneous = true;\n  var type = geometries[0].getType();\n  var geometry, i, ii;\n  for (i = 1, ii = geometries.length; i < ii; ++i) {\n    geometry = geometries[i];\n    if (geometry.getType() != type) {\n      homogeneous = false;\n      break;\n    }\n  }\n  if (homogeneous) {\n    var layout;\n    var flatCoordinates;\n    if (type == ol.geom.GeometryType.POINT) {\n      var point = geometries[0];\n      layout = point.getLayout();\n      flatCoordinates = point.getFlatCoordinates();\n      for (i = 1, ii = geometries.length; i < ii; ++i) {\n        geometry = geometries[i];\n        ol.array.extend(flatCoordinates, geometry.getFlatCoordinates());\n      }\n      multiGeometry = new ol.geom.MultiPoint(null);\n      multiGeometry.setFlatCoordinates(layout, flatCoordinates);\n      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);\n    } else if (type == ol.geom.GeometryType.LINE_STRING) {\n      multiGeometry = new ol.geom.MultiLineString(null);\n      multiGeometry.setLineStrings(geometries);\n      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);\n    } else if (type == ol.geom.GeometryType.POLYGON) {\n      multiGeometry = new ol.geom.MultiPolygon(null);\n      multiGeometry.setPolygons(geometries);\n      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);\n    } else if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {\n      multiGeometry = new ol.geom.GeometryCollection(geometries);\n    } else {\n      ol.asserts.assert(false, 37); // Unknown geometry type found\n    }\n  } else {\n    multiGeometry = new ol.geom.GeometryCollection(geometries);\n  }\n  return /** @type {ol.geom.Geometry} */ (multiGeometry);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.Point|undefined} Point.\n */\nol.format.KML.readPoint_ = function(node, objectStack) {\n  var properties = ol.xml.pushParseAndPop({},\n      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,\n      objectStack);\n  var flatCoordinates =\n      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);\n  if (flatCoordinates) {\n    var point = new ol.geom.Point(null);\n    point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);\n    point.setProperties(properties);\n    return point;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.geom.Polygon|undefined} Polygon.\n */\nol.format.KML.readPolygon_ = function(node, objectStack) {\n  var properties = ol.xml.pushParseAndPop(/** @type {Object<string,*>} */ ({}),\n      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,\n      objectStack);\n  var flatLinearRings = ol.xml.pushParseAndPop([null],\n      ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack);\n  if (flatLinearRings && flatLinearRings[0]) {\n    var polygon = new ol.geom.Polygon(null);\n    var flatCoordinates = flatLinearRings[0];\n    var ends = [flatCoordinates.length];\n    var i, ii;\n    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n      ol.array.extend(flatCoordinates, flatLinearRings[i]);\n      ends.push(flatCoordinates.length);\n    }\n    polygon.setFlatCoordinates(\n        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);\n    polygon.setProperties(properties);\n    return polygon;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<ol.style.Style>} Style.\n */\nol.format.KML.readStyle_ = function(node, objectStack) {\n  var styleObject = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.STYLE_PARSERS_, node, objectStack);\n  if (!styleObject) {\n    return null;\n  }\n  var fillStyle = /** @type {ol.style.Fill} */\n      ('fillStyle' in styleObject ?\n        styleObject['fillStyle'] : ol.format.KML.DEFAULT_FILL_STYLE_);\n  var fill = /** @type {boolean|undefined} */ (styleObject['fill']);\n  if (fill !== undefined && !fill) {\n    fillStyle = null;\n  }\n  var imageStyle = /** @type {ol.style.Image} */\n      ('imageStyle' in styleObject ?\n        styleObject['imageStyle'] : ol.format.KML.DEFAULT_IMAGE_STYLE_);\n  if (imageStyle == ol.format.KML.DEFAULT_NO_IMAGE_STYLE_) {\n    imageStyle = undefined;\n  }\n  var textStyle = /** @type {ol.style.Text} */\n      ('textStyle' in styleObject ?\n        styleObject['textStyle'] : ol.format.KML.DEFAULT_TEXT_STYLE_);\n  var strokeStyle = /** @type {ol.style.Stroke} */\n      ('strokeStyle' in styleObject ?\n        styleObject['strokeStyle'] : ol.format.KML.DEFAULT_STROKE_STYLE_);\n  var outline = /** @type {boolean|undefined} */\n      (styleObject['outline']);\n  if (outline !== undefined && !outline) {\n    strokeStyle = null;\n  }\n  return [new ol.style.Style({\n    fill: fillStyle,\n    image: imageStyle,\n    stroke: strokeStyle,\n    text: textStyle,\n    zIndex: undefined // FIXME\n  })];\n};\n\n\n/**\n * Reads an array of geometries and creates arrays for common geometry\n * properties. Then sets them to the multi geometry.\n * @param {ol.geom.MultiPoint|ol.geom.MultiLineString|ol.geom.MultiPolygon}\n *     multiGeometry A multi-geometry.\n * @param {Array.<ol.geom.Geometry>} geometries List of geometries.\n * @private\n */\nol.format.KML.setCommonGeometryProperties_ = function(multiGeometry,\n    geometries) {\n  var ii = geometries.length;\n  var extrudes = new Array(geometries.length);\n  var tessellates = new Array(geometries.length);\n  var altitudeModes = new Array(geometries.length);\n  var geometry, i, hasExtrude, hasTessellate, hasAltitudeMode;\n  hasExtrude = hasTessellate = hasAltitudeMode = false;\n  for (i = 0; i < ii; ++i) {\n    geometry = geometries[i];\n    extrudes[i] = geometry.get('extrude');\n    tessellates[i] = geometry.get('tessellate');\n    altitudeModes[i] = geometry.get('altitudeMode');\n    hasExtrude = hasExtrude || extrudes[i] !== undefined;\n    hasTessellate = hasTessellate || tessellates[i] !== undefined;\n    hasAltitudeMode = hasAltitudeMode || altitudeModes[i];\n  }\n  if (hasExtrude) {\n    multiGeometry.set('extrude', extrudes);\n  }\n  if (hasTessellate) {\n    multiGeometry.set('tessellate', tessellates);\n  }\n  if (hasAltitudeMode) {\n    multiGeometry.set('altitudeMode', altitudeModes);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.DataParser_ = function(node, objectStack) {\n  var name = node.getAttribute('name');\n  ol.xml.parseNode(ol.format.KML.DATA_PARSERS_, node, objectStack);\n  var featureObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  if (name !== null) {\n    featureObject[name] = featureObject.value;\n  } else if (featureObject.displayName !== null) {\n    featureObject[featureObject.displayName] = featureObject.value;\n  }\n  delete featureObject['value'];\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.ExtendedDataParser_ = function(node, objectStack) {\n  ol.xml.parseNode(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack);\n};\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.RegionParser_ = function(node, objectStack) {\n  ol.xml.parseNode(ol.format.KML.REGION_PARSERS_, node, objectStack);\n};\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.PairDataParser_ = function(node, objectStack) {\n  var pairObject = ol.xml.pushParseAndPop(\n      {}, ol.format.KML.PAIR_PARSERS_, node, objectStack);\n  if (!pairObject) {\n    return;\n  }\n  var key = /** @type {string|undefined} */\n      (pairObject['key']);\n  if (key && key == 'normal') {\n    var styleUrl = /** @type {string|undefined} */\n        (pairObject['styleUrl']);\n    if (styleUrl) {\n      objectStack[objectStack.length - 1] = styleUrl;\n    }\n    var Style = /** @type {ol.style.Style} */\n        (pairObject['Style']);\n    if (Style) {\n      objectStack[objectStack.length - 1] = Style;\n    }\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {\n  var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);\n  if (!styleMapValue) {\n    return;\n  }\n  var placemarkObject = objectStack[objectStack.length - 1];\n  if (Array.isArray(styleMapValue)) {\n    placemarkObject['Style'] = styleMapValue;\n  } else if (typeof styleMapValue === 'string') {\n    placemarkObject['styleUrl'] = styleMapValue;\n  } else {\n    ol.asserts.assert(false, 38); // `styleMapValue` has an unknown type\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.SchemaDataParser_ = function(node, objectStack) {\n  ol.xml.parseNode(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.SimpleDataParser_ = function(node, objectStack) {\n  var name = node.getAttribute('name');\n  if (name !== null) {\n    var data = ol.format.XSD.readString(node);\n    var featureObject =\n        /** @type {Object} */ (objectStack[objectStack.length - 1]);\n    featureObject[name] = data;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.LatLonAltBoxParser_ = function(node, objectStack) {\n  var object = ol.xml.pushParseAndPop({}, ol.format.KML.LAT_LON_ALT_BOX_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var regionObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var extent = [\n    parseFloat(object['west']),\n    parseFloat(object['south']),\n    parseFloat(object['east']),\n    parseFloat(object['north'])\n  ];\n  regionObject['extent'] = extent;\n  regionObject['altitudeMode'] = object['altitudeMode'];\n  regionObject['minAltitude'] = parseFloat(object['minAltitude']);\n  regionObject['maxAltitude'] = parseFloat(object['maxAltitude']);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.LodParser_ = function(node, objectStack) {\n  var object = ol.xml.pushParseAndPop({}, ol.format.KML.LOD_PARSERS_, node, objectStack);\n  if (!object) {\n    return;\n  }\n  var lodObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  lodObject['minLodPixels'] = parseFloat(object['minLodPixels']);\n  lodObject['maxLodPixels'] = parseFloat(object['maxLodPixels']);\n  lodObject['minFadeExtent'] = parseFloat(object['minFadeExtent']);\n  lodObject['maxFadeExtent'] = parseFloat(object['maxFadeExtent']);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings.push(flatLinearRing);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) {\n  /** @type {Array.<number>|undefined} */\n  var flatLinearRing = ol.xml.pushParseAndPop(undefined,\n      ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack);\n  if (flatLinearRing) {\n    var flatLinearRings = /** @type {Array.<Array.<number>>} */\n        (objectStack[objectStack.length - 1]);\n    flatLinearRings[0] = flatLinearRing;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.LinkParser_ = function(node, objectStack) {\n  ol.xml.parseNode(ol.format.KML.LINK_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.whenParser_ = function(node, objectStack) {\n  var gxTrackObject = /** @type {ol.KMLGxTrackObject_} */\n      (objectStack[objectStack.length - 1]);\n  var whens = gxTrackObject.whens;\n  var s = ol.xml.getAllTextContent(node, false);\n  var when = Date.parse(s);\n  whens.push(isNaN(when) ? 0 : when);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.DATA_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'displayName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'value': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Data': ol.format.KML.DataParser_,\n      'SchemaData': ol.format.KML.SchemaDataParser_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.REGION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LatLonAltBox': ol.format.KML.LatLonAltBoxParser_,\n      'Lod': ol.format.KML.LodParser_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.LAT_LON_ALT_BOX_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'minAltitude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'maxAltitude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'north': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'south': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'east': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'west': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.LOD_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'minLodPixels': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'maxLodPixels': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'minFadeExtent': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'maxFadeExtent': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'extrude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),\n      'tessellate': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),\n      'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'innerBoundaryIs': ol.format.KML.innerBoundaryIsParser_,\n      'outerBoundaryIs': ol.format.KML.outerBoundaryIsParser_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'when': ol.format.KML.whenParser_\n    }, ol.xml.makeStructureNS(\n        ol.format.KML.GX_NAMESPACE_URIS_, {\n          'coord': ol.format.KML.gxCoordParser_\n        }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.ICON_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)\n    }, ol.xml.makeStructureNS(\n        ol.format.KML.GX_NAMESPACE_URIS_, {\n          'x': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n          'y': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n          'w': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n          'h': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)\n        }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Icon': ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_),\n      'heading': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),\n      'hotSpot': ol.xml.makeObjectPropertySetter(ol.format.KML.readVec2_),\n      'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),\n      'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),\n      'width': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LineString': ol.xml.makeArrayPusher(ol.format.KML.readLineString_),\n      'LinearRing': ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_),\n      'MultiGeometry': ol.xml.makeArrayPusher(ol.format.KML.readMultiGeometry_),\n      'Point': ol.xml.makeArrayPusher(ol.format.KML.readPoint_),\n      'Polygon': ol.xml.makeArrayPusher(ol.format.KML.readPolygon_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.GX_NAMESPACE_URIS_, {\n      'Track': ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'ExtendedData': ol.format.KML.ExtendedDataParser_,\n      'Region': ol.format.KML.RegionParser_,\n      'Link': ol.format.KML.LinkParser_,\n      'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),\n      'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.LINK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.PAIR_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_),\n      'key': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'ExtendedData': ol.format.KML.ExtendedDataParser_,\n      'Region': ol.format.KML.RegionParser_,\n      'MultiGeometry': ol.xml.makeObjectPropertySetter(\n          ol.format.KML.readMultiGeometry_, 'geometry'),\n      'LineString': ol.xml.makeObjectPropertySetter(\n          ol.format.KML.readLineString_, 'geometry'),\n      'LinearRing': ol.xml.makeObjectPropertySetter(\n          ol.format.KML.readLinearRing_, 'geometry'),\n      'Point': ol.xml.makeObjectPropertySetter(\n          ol.format.KML.readPoint_, 'geometry'),\n      'Polygon': ol.xml.makeObjectPropertySetter(\n          ol.format.KML.readPolygon_, 'geometry'),\n      'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_),\n      'StyleMap': ol.format.KML.PlacemarkStyleMapParser_,\n      'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),\n      'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_),\n      'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)\n    }, ol.xml.makeStructureNS(\n        ol.format.KML.GX_NAMESPACE_URIS_, {\n          'MultiTrack': ol.xml.makeObjectPropertySetter(\n              ol.format.KML.readGxMultiTrack_, 'geometry'),\n          'Track': ol.xml.makeObjectPropertySetter(\n              ol.format.KML.readGxTrack_, 'geometry')\n        }\n    ));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),\n      'fill': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),\n      'outline': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'SimpleData': ol.format.KML.SimpleDataParser_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'IconStyle': ol.format.KML.IconStyleParser_,\n      'LabelStyle': ol.format.KML.LabelStyleParser_,\n      'LineStyle': ol.format.KML.LineStyleParser_,\n      'PolyStyle': ol.format.KML.PolyStyleParser_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Pair': ol.format.KML.PairDataParser_\n    });\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<ol.Feature>|undefined} Features.\n */\nol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) {\n  // FIXME use scope somehow\n  var parsersNS = ol.xml.makeStructureNS(\n      ol.format.KML.NAMESPACE_URIS_, {\n        'Document': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),\n        'Folder': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),\n        'Placemark': ol.xml.makeArrayPusher(this.readPlacemark_, this),\n        'Style': this.readSharedStyle_.bind(this),\n        'StyleMap': this.readSharedStyleMap_.bind(this)\n      });\n  /** @type {Array.<ol.Feature>} */\n  var features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack, this);\n  if (features) {\n    return features;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {ol.Feature|undefined} Feature.\n */\nol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {\n  var object = ol.xml.pushParseAndPop({'geometry': null},\n      ol.format.KML.PLACEMARK_PARSERS_, node, objectStack);\n  if (!object) {\n    return undefined;\n  }\n  var feature = new ol.Feature();\n  var id = node.getAttribute('id');\n  if (id !== null) {\n    feature.setId(id);\n  }\n  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);\n\n  var geometry = object['geometry'];\n  if (geometry) {\n    ol.format.Feature.transformWithOptions(geometry, false, options);\n  }\n  feature.setGeometry(geometry);\n  delete object['geometry'];\n\n  if (this.extractStyles_) {\n    var style = object['Style'];\n    var styleUrl = object['styleUrl'];\n    var styleFunction = ol.format.KML.createFeatureStyleFunction_(\n        style, styleUrl, this.defaultStyle_, this.sharedStyles_,\n        this.showPointNames_);\n    feature.setStyle(styleFunction);\n  }\n  delete object['Style'];\n  // we do not remove the styleUrl property from the object, so it\n  // gets stored on feature when setProperties is called\n\n  feature.setProperties(object);\n\n  return feature;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) {\n  var id = node.getAttribute('id');\n  if (id !== null) {\n    var style = ol.format.KML.readStyle_(node, objectStack);\n    if (style) {\n      var styleUri;\n      var baseURI = node.baseURI;\n      if (!baseURI || baseURI == 'about:blank') {\n        baseURI = window.location.href;\n      }\n      if (baseURI) {\n        var url = new URL('#' + id, baseURI);\n        styleUri = url.href;\n      } else {\n        styleUri = '#' + id;\n      }\n      this.sharedStyles_[styleUri] = style;\n    }\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) {\n  var id = node.getAttribute('id');\n  if (id === null) {\n    return;\n  }\n  var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);\n  if (!styleMapValue) {\n    return;\n  }\n  var styleUri;\n  var baseURI = node.baseURI;\n  if (!baseURI || baseURI == 'about:blank') {\n    baseURI = window.location.href;\n  }\n  if (baseURI) {\n    var url = new URL('#' + id, baseURI);\n    styleUri = url.href;\n  } else {\n    styleUri = '#' + id;\n  }\n  this.sharedStyles_[styleUri] = styleMapValue;\n};\n\n\n/**\n * Read the first feature from a KML source. MultiGeometries are converted into\n * GeometryCollections if they are a mix of geometry types, and into MultiPoint/\n * MultiLineString/MultiPolygon if they are all of the same type.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.KML.prototype.readFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.KML.prototype.readFeatureFromNode = function(node, opt_options) {\n  if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {\n    return null;\n  }\n  var feature = this.readPlacemark_(\n      node, [this.getReadOptions(node, opt_options)]);\n  if (feature) {\n    return feature;\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * Read all features from a KML source. MultiGeometries are converted into\n * GeometryCollections if they are a mix of geometry types, and into MultiPoint/\n * MultiLineString/MultiPolygon if they are all of the same type.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.KML.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {\n  if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {\n    return [];\n  }\n  var features;\n  var localName = node.localName;\n  if (localName == 'Document' || localName == 'Folder') {\n    features = this.readDocumentOrFolder_(\n        node, [this.getReadOptions(node, opt_options)]);\n    if (features) {\n      return features;\n    } else {\n      return [];\n    }\n  } else if (localName == 'Placemark') {\n    var feature = this.readPlacemark_(\n        node, [this.getReadOptions(node, opt_options)]);\n    if (feature) {\n      return [feature];\n    } else {\n      return [];\n    }\n  } else if (localName == 'kml') {\n    features = [];\n    var n;\n    for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n      var fs = this.readFeaturesFromNode(n, opt_options);\n      if (fs) {\n        ol.array.extend(features, fs);\n      }\n    }\n    return features;\n  } else {\n    return [];\n  }\n};\n\n\n/**\n * Read the name of the KML.\n *\n * @param {Document|Node|string} source Souce.\n * @return {string|undefined} Name.\n * @api\n */\nol.format.KML.prototype.readName = function(source) {\n  if (ol.xml.isDocument(source)) {\n    return this.readNameFromDocument(/** @type {Document} */ (source));\n  } else if (ol.xml.isNode(source)) {\n    return this.readNameFromNode(/** @type {Node} */ (source));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readNameFromDocument(doc);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @return {string|undefined} Name.\n */\nol.format.KML.prototype.readNameFromDocument = function(doc) {\n  var n;\n  for (n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      var name = this.readNameFromNode(n);\n      if (name) {\n        return name;\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {string|undefined} Name.\n */\nol.format.KML.prototype.readNameFromNode = function(node) {\n  var n;\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        n.localName == 'name') {\n      return ol.format.XSD.readString(n);\n    }\n  }\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    var localName = n.localName;\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        (localName == 'Document' ||\n         localName == 'Folder' ||\n         localName == 'Placemark' ||\n         localName == 'kml')) {\n      var name = this.readNameFromNode(n);\n      if (name) {\n        return name;\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * Read the network links of the KML.\n *\n * @param {Document|Node|string} source Source.\n * @return {Array.<Object>} Network links.\n * @api\n */\nol.format.KML.prototype.readNetworkLinks = function(source) {\n  var networkLinks = [];\n  if (ol.xml.isDocument(source)) {\n    ol.array.extend(networkLinks, this.readNetworkLinksFromDocument(\n        /** @type {Document} */ (source)));\n  } else if (ol.xml.isNode(source)) {\n    ol.array.extend(networkLinks, this.readNetworkLinksFromNode(\n        /** @type {Node} */ (source)));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    ol.array.extend(networkLinks, this.readNetworkLinksFromDocument(doc));\n  }\n  return networkLinks;\n};\n\n\n/**\n * @param {Document} doc Document.\n * @return {Array.<Object>} Network links.\n */\nol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) {\n  var n, networkLinks = [];\n  for (n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      ol.array.extend(networkLinks, this.readNetworkLinksFromNode(n));\n    }\n  }\n  return networkLinks;\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {Array.<Object>} Network links.\n */\nol.format.KML.prototype.readNetworkLinksFromNode = function(node) {\n  var n, networkLinks = [];\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        n.localName == 'NetworkLink') {\n      var obj = ol.xml.pushParseAndPop({}, ol.format.KML.NETWORK_LINK_PARSERS_,\n          n, []);\n      networkLinks.push(obj);\n    }\n  }\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    var localName = n.localName;\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        (localName == 'Document' ||\n         localName == 'Folder' ||\n         localName == 'kml')) {\n      ol.array.extend(networkLinks, this.readNetworkLinksFromNode(n));\n    }\n  }\n  return networkLinks;\n};\n\n\n/**\n * Read the regions of the KML.\n *\n * @param {Document|Node|string} source Source.\n * @return {Array.<Object>} Regions.\n * @api\n */\nol.format.KML.prototype.readRegion = function(source) {\n  var regions = [];\n  if (ol.xml.isDocument(source)) {\n    ol.array.extend(regions, this.readRegionFromDocument(\n        /** @type {Document} */ (source)));\n  } else if (ol.xml.isNode(source)) {\n    ol.array.extend(regions, this.readRegionFromNode(\n        /** @type {Node} */ (source)));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    ol.array.extend(regions, this.readRegionFromDocument(doc));\n  }\n  return regions;\n};\n\n\n/**\n * @param {Document} doc Document.\n * @return {Array.<Object>} Region.\n */\nol.format.KML.prototype.readRegionFromDocument = function(doc) {\n  var n, regions = [];\n  for (n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      ol.array.extend(regions, this.readRegionFromNode(n));\n    }\n  }\n  return regions;\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {Array.<Object>} Region.\n * @api\n */\nol.format.KML.prototype.readRegionFromNode = function(node) {\n  var n, regions = [];\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        n.localName == 'Region') {\n      var obj = ol.xml.pushParseAndPop({}, ol.format.KML.REGION_PARSERS_,\n          n, []);\n      regions.push(obj);\n    }\n  }\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    var localName = n.localName;\n    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&\n        (localName == 'Document' ||\n         localName == 'Folder' ||\n         localName == 'kml')) {\n      ol.array.extend(regions, this.readRegionFromNode(n));\n    }\n  }\n  return regions;\n};\n\n\n/**\n * Read the projection from a KML source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.KML.prototype.readProjection;\n\n\n/**\n * @param {Node} node Node to append a TextNode with the color to.\n * @param {ol.Color|string} color Color.\n * @private\n */\nol.format.KML.writeColorTextNode_ = function(node, color) {\n  var rgba = ol.color.asArray(color);\n  var opacity = (rgba.length == 4) ? rgba[3] : 1;\n  var abgr = [opacity * 255, rgba[2], rgba[1], rgba[0]];\n  var i;\n  for (i = 0; i < 4; ++i) {\n    var hex = parseInt(abgr[i], 10).toString(16);\n    abgr[i] = (hex.length == 1) ? '0' + hex : hex;\n  }\n  ol.format.XSD.writeStringTextNode(node, abgr.join(''));\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the coordinates to.\n * @param {Array.<number>} coordinates Coordinates.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeCoordinatesTextNode_ = function(node, coordinates, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n\n  var layout = context['layout'];\n  var stride = context['stride'];\n\n  var dimension;\n  if (layout == ol.geom.GeometryLayout.XY ||\n      layout == ol.geom.GeometryLayout.XYM) {\n    dimension = 2;\n  } else if (layout == ol.geom.GeometryLayout.XYZ ||\n      layout == ol.geom.GeometryLayout.XYZM) {\n    dimension = 3;\n  } else {\n    ol.asserts.assert(false, 34); // Invalid geometry layout\n  }\n\n  var d, i;\n  var ii = coordinates.length;\n  var text = '';\n  if (ii > 0) {\n    text += coordinates[0];\n    for (d = 1; d < dimension; ++d) {\n      text += ',' + coordinates[d];\n    }\n    for (i = stride; i < ii; i += stride) {\n      text += ' ' + coordinates[i];\n      for (d = 1; d < dimension; ++d) {\n        text += ',' + coordinates[i + d];\n      }\n    }\n  }\n  ol.format.XSD.writeStringTextNode(node, text);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {{name: *, value: *}} pair Name value pair.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeDataNode_ = function(node, pair, objectStack) {\n  node.setAttribute('name', pair.name);\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var value = pair.value;\n\n  if (typeof value == 'object') {\n    if (value !== null && value.displayName) {\n      ol.xml.pushSerializeAndPop(context, ol.format.KML.EXTENDEDDATA_NODE_SERIALIZERS_,\n          ol.xml.OBJECT_PROPERTY_NODE_FACTORY, [value.displayName], objectStack, ['displayName']);\n    }\n\n    if (value !== null && value.value) {\n      ol.xml.pushSerializeAndPop(context, ol.format.KML.EXTENDEDDATA_NODE_SERIALIZERS_,\n          ol.xml.OBJECT_PROPERTY_NODE_FACTORY, [value.value], objectStack, ['value']);\n    }\n  } else {\n    ol.xml.pushSerializeAndPop(context, ol.format.KML.EXTENDEDDATA_NODE_SERIALIZERS_,\n        ol.xml.OBJECT_PROPERTY_NODE_FACTORY, [value], objectStack, ['value']);\n  }\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the name to.\n * @param {string} name DisplayName.\n * @private\n */\nol.format.KML.writeDataNodeName_ = function(node, name) {\n  ol.format.XSD.writeCDATASection(node, name);\n};\n\n\n/**\n * @param {Node} node Node to append a CDATA Section with the value to.\n * @param {string} value Value.\n * @private\n */\nol.format.KML.writeDataNodeValue_ = function(node, value) {\n  ol.format.XSD.writeStringTextNode(node, value);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<ol.Feature>} features Features.\n * @param {Array.<*>} objectStack Object stack.\n * @this {ol.format.KML}\n * @private\n */\nol.format.KML.writeDocument_ = function(node, features, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.DOCUMENT_SERIALIZERS_,\n      ol.format.KML.DOCUMENT_NODE_FACTORY_, features, objectStack, undefined,\n      this);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {{names: Array<string>, values: (Array<*>)}} namesAndValues Names and values.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeExtendedData_ = function(node, namesAndValues, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var names = namesAndValues.names, values = namesAndValues.values;\n  var length = names.length;\n\n  for (var i = 0; i < length; i++) {\n    ol.xml.pushSerializeAndPop(context, ol.format.KML.EXTENDEDDATA_NODE_SERIALIZERS_,\n        ol.format.KML.DATA_NODE_FACTORY_, [{name: names[i], value: values[i]}], objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Object} icon Icon object.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeIcon_ = function(node, icon, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.ICON_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(icon, orderedKeys);\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.KML.ICON_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,\n      values, objectStack, orderedKeys);\n  orderedKeys =\n      ol.format.KML.ICON_SEQUENCE_[ol.format.KML.GX_NAMESPACE_URIS_[0]];\n  values = ol.xml.makeSequence(icon, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.ICON_SERIALIZERS_,\n      ol.format.KML.GX_NODE_FACTORY_, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.style.Icon} style Icon style.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeIconStyle_ = function(node, style, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var properties = {};\n  var src = style.getSrc();\n  var size = style.getSize();\n  var iconImageSize = style.getImageSize();\n  var iconProperties = {\n    'href': src\n  };\n\n  if (size) {\n    iconProperties['w'] = size[0];\n    iconProperties['h'] = size[1];\n    var anchor = style.getAnchor(); // top-left\n    var origin = style.getOrigin(); // top-left\n\n    if (origin && iconImageSize && origin[0] !== 0 && origin[1] !== size[1]) {\n      iconProperties['x'] = origin[0];\n      iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]);\n    }\n\n    if (anchor && (anchor[0] !== size[0] / 2 || anchor[1] !== size[1] / 2)) {\n      var /** @type {ol.KMLVec2_} */ hotSpot = {\n        x: anchor[0],\n        xunits: ol.style.IconAnchorUnits.PIXELS,\n        y: size[1] - anchor[1],\n        yunits: ol.style.IconAnchorUnits.PIXELS\n      };\n      properties['hotSpot'] = hotSpot;\n    }\n  }\n\n  properties['Icon'] = iconProperties;\n\n  var scale = style.getScale();\n  if (scale !== 1) {\n    properties['scale'] = scale;\n  }\n\n  var rotation = style.getRotation();\n  if (rotation !== 0) {\n    properties['heading'] = rotation; // 0-360\n  }\n\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.ICON_STYLE_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.ICON_STYLE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.style.Text} style style.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeLabelStyle_ = function(node, style, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var properties = {};\n  var fill = style.getFill();\n  if (fill) {\n    properties['color'] = fill.getColor();\n  }\n  var scale = style.getScale();\n  if (scale && scale !== 1) {\n    properties['scale'] = scale;\n  }\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys =\n      ol.format.KML.LABEL_STYLE_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.LABEL_STYLE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.style.Stroke} style style.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeLineStyle_ = function(node, style, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var properties = {\n    'color': style.getColor(),\n    'width': style.getWidth()\n  };\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.LINE_STYLE_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.LINE_STYLE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeMultiGeometry_ = function(node, geometry, objectStack) {\n  /** @type {ol.XmlNodeStackItem} */\n  var context = {node: node};\n  var type = geometry.getType();\n  /** @type {Array.<ol.geom.Geometry>} */\n  var geometries;\n  /** @type {function(*, Array.<*>, string=): (Node|undefined)} */\n  var factory;\n  if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {\n    geometries = /** @type {ol.geom.GeometryCollection} */ (geometry).getGeometries();\n    factory = ol.format.KML.GEOMETRY_NODE_FACTORY_;\n  } else if (type == ol.geom.GeometryType.MULTI_POINT) {\n    geometries = /** @type {ol.geom.MultiPoint} */ (geometry).getPoints();\n    factory = ol.format.KML.POINT_NODE_FACTORY_;\n  } else if (type == ol.geom.GeometryType.MULTI_LINE_STRING) {\n    geometries =\n        (/** @type {ol.geom.MultiLineString} */ (geometry)).getLineStrings();\n    factory = ol.format.KML.LINE_STRING_NODE_FACTORY_;\n  } else if (type == ol.geom.GeometryType.MULTI_POLYGON) {\n    geometries =\n        (/** @type {ol.geom.MultiPolygon} */ (geometry)).getPolygons();\n    factory = ol.format.KML.POLYGON_NODE_FACTORY_;\n  } else {\n    ol.asserts.assert(false, 39); // Unknown geometry type\n  }\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.KML.MULTI_GEOMETRY_SERIALIZERS_, factory,\n      geometries, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.LinearRing} linearRing Linear ring.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeBoundaryIs_ = function(node, linearRing, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.KML.BOUNDARY_IS_SERIALIZERS_,\n      ol.format.KML.LINEAR_RING_NODE_FACTORY_, [linearRing], objectStack);\n};\n\n\n/**\n * FIXME currently we do serialize arbitrary/custom feature properties\n * (ExtendedData).\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Object stack.\n * @this {ol.format.KML}\n * @private\n */\nol.format.KML.writePlacemark_ = function(node, feature, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n\n  // set id\n  if (feature.getId()) {\n    node.setAttribute('id', feature.getId());\n  }\n\n  // serialize properties (properties unknown to KML are not serialized)\n  var properties = feature.getProperties();\n\n  // don't export these to ExtendedData\n  var filter = {'address': 1, 'description': 1, 'name': 1, 'open': 1,\n    'phoneNumber': 1, 'styleUrl': 1, 'visibility': 1};\n  filter[feature.getGeometryName()] = 1;\n  var keys = Object.keys(properties || {}).sort().filter(function(v) {\n    return !filter[v];\n  });\n\n  if (keys.length > 0) {\n    var sequence = ol.xml.makeSequence(properties, keys);\n    var namesAndValues = {names: keys, values: sequence};\n    ol.xml.pushSerializeAndPop(context, ol.format.KML.PLACEMARK_SERIALIZERS_,\n        ol.format.KML.EXTENDEDDATA_NODE_FACTORY_, [namesAndValues], objectStack);\n  }\n\n  var styleFunction = feature.getStyleFunction();\n  if (styleFunction) {\n    // FIXME the styles returned by the style function are supposed to be\n    // resolution-independent here\n    var styles = styleFunction.call(feature, 0);\n    if (styles) {\n      var style = Array.isArray(styles) ? styles[0] : styles;\n      if (this.writeStyles_) {\n        properties['Style'] = style;\n      }\n      var textStyle = style.getText();\n      if (textStyle) {\n        properties['name'] = textStyle.getText();\n      }\n    }\n  }\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.PLACEMARK_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.PLACEMARK_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n\n  // serialize geometry\n  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    geometry =\n        ol.format.Feature.transformWithOptions(geometry, true, options);\n  }\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.PLACEMARK_SERIALIZERS_,\n      ol.format.KML.GEOMETRY_NODE_FACTORY_, [geometry], objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.SimpleGeometry} geometry Geometry.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writePrimitiveGeometry_ = function(node, geometry, objectStack) {\n  var flatCoordinates = geometry.getFlatCoordinates();\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  context['layout'] = geometry.getLayout();\n  context['stride'] = geometry.getStride();\n\n  // serialize properties (properties unknown to KML are not serialized)\n  var properties = geometry.getProperties();\n  properties.coordinates = flatCoordinates;\n\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.PRIMITIVE_GEOMETRY_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.geom.Polygon} polygon Polygon.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writePolygon_ = function(node, polygon, objectStack) {\n  var linearRings = polygon.getLinearRings();\n  var outerRing = linearRings.shift();\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  // inner rings\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.KML.POLYGON_SERIALIZERS_,\n      ol.format.KML.INNER_BOUNDARY_NODE_FACTORY_,\n      linearRings, objectStack);\n  // outer ring\n  ol.xml.pushSerializeAndPop(context,\n      ol.format.KML.POLYGON_SERIALIZERS_,\n      ol.format.KML.OUTER_BOUNDARY_NODE_FACTORY_,\n      [outerRing], objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.style.Fill} style Style.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writePolyStyle_ = function(node, style, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.POLY_STYLE_SERIALIZERS_,\n      ol.format.KML.COLOR_NODE_FACTORY_, [style.getColor()], objectStack);\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the scale to.\n * @param {number|undefined} scale Scale.\n * @private\n */\nol.format.KML.writeScaleTextNode_ = function(node, scale) {\n  // the Math is to remove any excess decimals created by float arithmetic\n  ol.format.XSD.writeDecimalTextNode(node,\n      Math.round(scale * 1e6) / 1e6);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.style.Style} style Style.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.KML.writeStyle_ = function(node, style, objectStack) {\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};\n  var properties = {};\n  var fillStyle = style.getFill();\n  var strokeStyle = style.getStroke();\n  var imageStyle = style.getImage();\n  var textStyle = style.getText();\n  if (imageStyle instanceof ol.style.Icon) {\n    properties['IconStyle'] = imageStyle;\n  }\n  if (textStyle) {\n    properties['LabelStyle'] = textStyle;\n  }\n  if (strokeStyle) {\n    properties['LineStyle'] = strokeStyle;\n  }\n  if (fillStyle) {\n    properties['PolyStyle'] = fillStyle;\n  }\n  var parentNode = objectStack[objectStack.length - 1].node;\n  var orderedKeys = ol.format.KML.STYLE_SEQUENCE_[parentNode.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.STYLE_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\n};\n\n\n/**\n * @param {Node} node Node to append a TextNode with the Vec2 to.\n * @param {ol.KMLVec2_} vec2 Vec2.\n * @private\n */\nol.format.KML.writeVec2_ = function(node, vec2) {\n  node.setAttribute('x', vec2.x);\n  node.setAttribute('y', vec2.y);\n  node.setAttribute('xunits', vec2.xunits);\n  node.setAttribute('yunits', vec2.yunits);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.KML_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'Document', 'Placemark'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.KML_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Document': ol.xml.makeChildAppender(ol.format.KML.writeDocument_),\n      'Placemark': ol.xml.makeChildAppender(ol.format.KML.writePlacemark_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.DOCUMENT_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Placemark': ol.xml.makeChildAppender(ol.format.KML.writePlacemark_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.EXTENDEDDATA_NODE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Data': ol.xml.makeChildAppender(ol.format.KML.writeDataNode_),\n      'value': ol.xml.makeChildAppender(ol.format.KML.writeDataNodeValue_),\n      'displayName': ol.xml.makeChildAppender(ol.format.KML.writeDataNodeName_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, string>}\n * @private\n */\nol.format.KML.GEOMETRY_TYPE_TO_NODENAME_ = {\n  'Point': 'Point',\n  'LineString': 'LineString',\n  'LinearRing': 'LinearRing',\n  'Polygon': 'Polygon',\n  'MultiPoint': 'MultiGeometry',\n  'MultiLineString': 'MultiGeometry',\n  'MultiPolygon': 'MultiGeometry',\n  'GeometryCollection': 'MultiGeometry'\n};\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.ICON_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'href'\n    ],\n    ol.xml.makeStructureNS(ol.format.KML.GX_NAMESPACE_URIS_, [\n      'x', 'y', 'w', 'h'\n    ]));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.ICON_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'href': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)\n    }, ol.xml.makeStructureNS(\n        ol.format.KML.GX_NAMESPACE_URIS_, {\n          'x': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n          'y': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n          'w': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n          'h': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode)\n        }));\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.ICON_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'scale', 'heading', 'Icon', 'hotSpot'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.ICON_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'Icon': ol.xml.makeChildAppender(ol.format.KML.writeIcon_),\n      'heading': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),\n      'hotSpot': ol.xml.makeChildAppender(ol.format.KML.writeVec2_),\n      'scale': ol.xml.makeChildAppender(ol.format.KML.writeScaleTextNode_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.LABEL_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'color', 'scale'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.LABEL_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_),\n      'scale': ol.xml.makeChildAppender(ol.format.KML.writeScaleTextNode_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.LINE_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'color', 'width'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.LINE_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_),\n      'width': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.BOUNDARY_IS_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LinearRing': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.MULTI_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'LineString': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_),\n      'Point': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_),\n      'Polygon': ol.xml.makeChildAppender(ol.format.KML.writePolygon_),\n      'GeometryCollection': ol.xml.makeChildAppender(\n          ol.format.KML.writeMultiGeometry_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.PLACEMARK_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'name', 'open', 'visibility', 'address', 'phoneNumber', 'description',\n      'styleUrl', 'Style'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.PLACEMARK_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'ExtendedData': ol.xml.makeChildAppender(\n          ol.format.KML.writeExtendedData_),\n      'MultiGeometry': ol.xml.makeChildAppender(\n          ol.format.KML.writeMultiGeometry_),\n      'LineString': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_),\n      'LinearRing': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_),\n      'Point': ol.xml.makeChildAppender(\n          ol.format.KML.writePrimitiveGeometry_),\n      'Polygon': ol.xml.makeChildAppender(ol.format.KML.writePolygon_),\n      'Style': ol.xml.makeChildAppender(ol.format.KML.writeStyle_),\n      'address': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'description': ol.xml.makeChildAppender(\n          ol.format.XSD.writeStringTextNode),\n      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'open': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),\n      'phoneNumber': ol.xml.makeChildAppender(\n          ol.format.XSD.writeStringTextNode),\n      'styleUrl': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'visibility': ol.xml.makeChildAppender(\n          ol.format.XSD.writeBooleanTextNode)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.PRIMITIVE_GEOMETRY_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'extrude', 'tessellate', 'altitudeMode', 'coordinates'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'extrude': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),\n      'tessellate': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),\n      'altitudeMode': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),\n      'coordinates': ol.xml.makeChildAppender(\n          ol.format.KML.writeCoordinatesTextNode_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.POLYGON_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'outerBoundaryIs': ol.xml.makeChildAppender(\n          ol.format.KML.writeBoundaryIs_),\n      'innerBoundaryIs': ol.xml.makeChildAppender(\n          ol.format.KML.writeBoundaryIs_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.POLY_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Array.<string>>}\n * @private\n */\nol.format.KML.STYLE_SEQUENCE_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, [\n      'IconStyle', 'LabelStyle', 'LineStyle', 'PolyStyle'\n    ]);\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.KML.STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(\n    ol.format.KML.NAMESPACE_URIS_, {\n      'IconStyle': ol.xml.makeChildAppender(ol.format.KML.writeIconStyle_),\n      'LabelStyle': ol.xml.makeChildAppender(ol.format.KML.writeLabelStyle_),\n      'LineStyle': ol.xml.makeChildAppender(ol.format.KML.writeLineStyle_),\n      'PolyStyle': ol.xml.makeChildAppender(ol.format.KML.writePolyStyle_)\n    });\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.KML.GX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {\n  return ol.xml.createElementNS(ol.format.KML.GX_NAMESPACE_URIS_[0],\n      'gx:' + opt_nodeName);\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.KML.DOCUMENT_NODE_FACTORY_ = function(value, objectStack,\n    opt_nodeName) {\n  var parentNode = objectStack[objectStack.length - 1].node;\n  return ol.xml.createElementNS(parentNode.namespaceURI, 'Placemark');\n};\n\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array.<*>} objectStack Object stack.\n * @param {string=} opt_nodeName Node name.\n * @return {Node|undefined} Node.\n * @private\n */\nol.format.KML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack,\n    opt_nodeName) {\n  if (value) {\n    var parentNode = objectStack[objectStack.length - 1].node;\n    return ol.xml.createElementNS(parentNode.namespaceURI,\n        ol.format.KML.GEOMETRY_TYPE_TO_NODENAME_[/** @type {ol.geom.Geometry} */ (value).getType()]);\n  }\n};\n\n\n/**\n * A factory for creating coordinates nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.COLOR_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('color');\n\n\n/**\n * A factory for creating Data nodes.\n * @const\n * @type {function(*, Array.<*>): (Node|undefined)}\n * @private\n */\nol.format.KML.DATA_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('Data');\n\n\n/**\n * A factory for creating ExtendedData nodes.\n * @const\n * @type {function(*, Array.<*>): (Node|undefined)}\n * @private\n */\nol.format.KML.EXTENDEDDATA_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('ExtendedData');\n\n\n/**\n * A factory for creating innerBoundaryIs nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.INNER_BOUNDARY_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('innerBoundaryIs');\n\n\n/**\n * A factory for creating Point nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.POINT_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('Point');\n\n\n/**\n * A factory for creating LineString nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.LINE_STRING_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('LineString');\n\n\n/**\n * A factory for creating LinearRing nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.LINEAR_RING_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('LinearRing');\n\n\n/**\n * A factory for creating Polygon nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.POLYGON_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('Polygon');\n\n\n/**\n * A factory for creating outerBoundaryIs nodes.\n * @const\n * @type {function(*, Array.<*>, string=): (Node|undefined)}\n * @private\n */\nol.format.KML.OUTER_BOUNDARY_NODE_FACTORY_ =\n    ol.xml.makeSimpleNodeFactory('outerBoundaryIs');\n\n\n/**\n * Encode an array of features in the KML format. GeometryCollections, MultiPoints,\n * MultiLineStrings, and MultiPolygons are output as MultiGeometries.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {string} Result.\n * @api\n */\nol.format.KML.prototype.writeFeatures;\n\n\n/**\n * Encode an array of features in the KML format as an XML node. GeometryCollections,\n * MultiPoints, MultiLineStrings, and MultiPolygons are output as MultiGeometries.\n *\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Options.\n * @return {Node} Node.\n * @override\n * @api\n */\nol.format.KML.prototype.writeFeaturesNode = function(features, opt_options) {\n  opt_options = this.adaptOptions(opt_options);\n  var kml = ol.xml.createElementNS(ol.format.KML.NAMESPACE_URIS_[4], 'kml');\n  var xmlnsUri = 'http://www.w3.org/2000/xmlns/';\n  var xmlSchemaInstanceUri = 'http://www.w3.org/2001/XMLSchema-instance';\n  ol.xml.setAttributeNS(kml, xmlnsUri, 'xmlns:gx',\n      ol.format.KML.GX_NAMESPACE_URIS_[0]);\n  ol.xml.setAttributeNS(kml, xmlnsUri, 'xmlns:xsi', xmlSchemaInstanceUri);\n  ol.xml.setAttributeNS(kml, xmlSchemaInstanceUri, 'xsi:schemaLocation',\n      ol.format.KML.SCHEMA_LOCATION_);\n\n  var /** @type {ol.XmlNodeStackItem} */ context = {node: kml};\n  var properties = {};\n  if (features.length > 1) {\n    properties['Document'] = features;\n  } else if (features.length == 1) {\n    properties['Placemark'] = features[0];\n  }\n  var orderedKeys = ol.format.KML.KML_SEQUENCE_[kml.namespaceURI];\n  var values = ol.xml.makeSequence(properties, orderedKeys);\n  ol.xml.pushSerializeAndPop(context, ol.format.KML.KML_SERIALIZERS_,\n      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, [opt_options], orderedKeys,\n      this);\n  return kml;\n};\n\n\n/**\n * @fileoverview\n * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, unusedLocalVariables, uselessCode, visibility}\n */\ngoog.provide('ol.ext.PBF');\n\n/** @typedef {function(*)} */\nol.ext.PBF = function() {};\n\n(function() {(function (exports) {\n'use strict';\n\nvar read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = (nBytes * 8) - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? (nBytes - 1) : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n  i += d;\n  e = s & ((1 << (-nBits)) - 1);\n  s >>= (-nBits);\n  nBits += eLen;\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n  m = e & ((1 << (-nBits)) - 1);\n  e >>= (-nBits);\n  nBits += mLen;\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n};\nvar write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = (nBytes * 8) - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n  var i = isLE ? 0 : (nBytes - 1);\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n  value = Math.abs(value);\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n  e = (e << mLen) | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n  buffer[offset + i - d] |= s * 128;\n};\nvar ieee754 = {\n\tread: read,\n\twrite: write\n};\n\nvar pbf = Pbf;\nfunction Pbf(buf) {\n    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n    this.pos = 0;\n    this.type = 0;\n    this.length = this.buf.length;\n}\nPbf.Varint  = 0;\nPbf.Fixed64 = 1;\nPbf.Bytes   = 2;\nPbf.Fixed32 = 5;\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nvar SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\nPbf.prototype = {\n    destroy: function() {\n        this.buf = null;\n    },\n    readFields: function(readField, result, end) {\n        end = end || this.length;\n        while (this.pos < end) {\n            var val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n            this.type = val & 0x7;\n            readField(tag, result, this);\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    },\n    readMessage: function(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    },\n    readFixed32: function() {\n        var val = readUInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n    readSFixed32: function() {\n        var val = readInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n    readFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n    readSFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n    readFloat: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n        this.pos += 4;\n        return val;\n    },\n    readDouble: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n        this.pos += 8;\n        return val;\n    },\n    readVarint: function(isSigned) {\n        var buf = this.buf,\n            val, b;\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n        return readVarintRemainder(val, isSigned, this);\n    },\n    readVarint64: function() {\n        return this.readVarint(true);\n    },\n    readSVarint: function() {\n        var num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2;\n    },\n    readBoolean: function() {\n        return Boolean(this.readVarint());\n    },\n    readString: function() {\n        var end = this.readVarint() + this.pos,\n            str = readUtf8(this.buf, this.pos, end);\n        this.pos = end;\n        return str;\n    },\n    readBytes: function() {\n        var end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    },\n    readPackedVarint: function(arr, isSigned) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    },\n    readPackedSVarint: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    },\n    readPackedBoolean: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    },\n    readPackedFloat: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    },\n    readPackedDouble: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    },\n    readPackedFixed32: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    },\n    readPackedSFixed32: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    },\n    readPackedFixed64: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    },\n    readPackedSFixed64: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    },\n    skip: function(val) {\n        var type = val & 0x7;\n        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n        else if (type === Pbf.Fixed32) this.pos += 4;\n        else if (type === Pbf.Fixed64) this.pos += 8;\n        else throw new Error('Unimplemented type: ' + type);\n    },\n    writeTag: function(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    },\n    realloc: function(min) {\n        var length = this.length || 16;\n        while (length < this.pos + min) length *= 2;\n        if (length !== this.length) {\n            var buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.length = length;\n        }\n    },\n    finish: function() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    },\n    writeFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n    writeSFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n    writeFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n    writeSFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n    writeVarint: function(val) {\n        val = +val || 0;\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n        this.realloc(4);\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    },\n    writeSVarint: function(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    },\n    writeBoolean: function(val) {\n        this.writeVarint(Boolean(val));\n    },\n    writeString: function(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n        this.pos++;\n        var startPos = this.pos;\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        var len = this.pos - startPos;\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n    writeFloat: function(val) {\n        this.realloc(4);\n        ieee754.write(this.buf, val, this.pos, true, 23, 4);\n        this.pos += 4;\n    },\n    writeDouble: function(val) {\n        this.realloc(8);\n        ieee754.write(this.buf, val, this.pos, true, 52, 8);\n        this.pos += 8;\n    },\n    writeBytes: function(buffer) {\n        var len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    },\n    writeRawMessage: function(fn, obj) {\n        this.pos++;\n        var startPos = this.pos;\n        fn(obj, this);\n        var len = this.pos - startPos;\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n    writeMessage: function(tag, fn, obj) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeRawMessage(fn, obj);\n    },\n    writePackedVarint:   function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr);   },\n    writePackedSVarint:  function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr);  },\n    writePackedBoolean:  function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr);  },\n    writePackedFloat:    function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr);    },\n    writePackedDouble:   function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr);   },\n    writePackedFixed32:  function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr);  },\n    writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },\n    writePackedFixed64:  function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr);  },\n    writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },\n    writeBytesField: function(tag, buffer) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeBytes(buffer);\n    },\n    writeFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFixed32(val);\n    },\n    writeSFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeSFixed32(val);\n    },\n    writeFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeFixed64(val);\n    },\n    writeSFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeSFixed64(val);\n    },\n    writeVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeVarint(val);\n    },\n    writeSVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeSVarint(val);\n    },\n    writeStringField: function(tag, str) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeString(str);\n    },\n    writeFloatField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFloat(val);\n    },\n    writeDoubleField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeDouble(val);\n    },\n    writeBooleanField: function(tag, val) {\n        this.writeVarintField(tag, Boolean(val));\n    }\n};\nfunction readVarintRemainder(l, s, p) {\n    var buf = p.buf,\n        h, b;\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n    throw new Error('Expected varint not more than 10 bytes');\n}\nfunction readPackedEnd(pbf) {\n    return pbf.type === Pbf.Bytes ?\n        pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\nfunction toNum(low, high, isSigned) {\n    if (isSigned) {\n        return high * 0x100000000 + (low >>> 0);\n    }\n    return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\nfunction writeBigVarint(val, pbf) {\n    var low, high;\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n    pbf.realloc(10);\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\nfunction writeBigVarintHigh(high, pbf) {\n    var lsb = (high & 0x07) << 4;\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    var extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));\n    pbf.realloc(extraLen);\n    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\nfunction writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }\nfunction writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }\nfunction writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }\nfunction writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }\nfunction writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }\nfunction writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\nfunction readUInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] * 0x1000000);\n}\nfunction writeInt32(buf, val, pos) {\n    buf[pos] = val;\n    buf[pos + 1] = (val >>> 8);\n    buf[pos + 2] = (val >>> 16);\n    buf[pos + 3] = (val >>> 24);\n}\nfunction readInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] << 24);\n}\nfunction readUtf8(buf, pos, end) {\n    var str = '';\n    var i = pos;\n    while (i < end) {\n        var b0 = buf[i];\n        var c = null;\n        var bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n        if (i + bytesPerSequence > end) break;\n        var b1, b2, b3;\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n    return str;\n}\nfunction writeUtf8(buf, str, pos) {\n    for (var i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i);\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n\nexports['default'] = pbf;\n\n}((this.PBF = this.PBF || {})));}).call(ol.ext);\nol.ext.PBF = ol.ext.PBF.default;\n\ngoog.provide('ol.render.Feature');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.flat.center');\ngoog.require('ol.geom.flat.interiorpoint');\ngoog.require('ol.geom.flat.interpolate');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.transform');\n\n\n/**\n * Lightweight, read-only, {@link ol.Feature} and {@link ol.geom.Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n *\n * @constructor\n * @param {ol.geom.GeometryType} type Geometry type.\n * @param {Array.<number>} flatCoordinates Flat coordinates. These always need\n *     to be right-handed for polygons.\n * @param {Array.<number>|Array.<Array.<number>>} ends Ends or Endss.\n * @param {Object.<string, *>} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\nol.render.Feature = function(type, flatCoordinates, ends, properties, id) {\n  /**\n   * @private\n   * @type {ol.Extent|undefined}\n   */\n  this.extent_;\n\n  /**\n   * @private\n   * @type {number|string|undefined}\n   */\n  this.id_ = id;\n\n  /**\n   * @private\n   * @type {ol.geom.GeometryType}\n   */\n  this.type_ = type;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.flatCoordinates_ = flatCoordinates;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.flatInteriorPoints_ = null;\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.flatMidpoints_ = null;\n\n  /**\n   * @private\n   * @type {Array.<number>|Array.<Array.<number>>}\n   */\n  this.ends_ = ends;\n\n  /**\n   * @private\n   * @type {Object.<string, *>}\n   */\n  this.properties_ = properties;\n\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.tmpTransform_ = ol.transform.create();\n};\n\n\n/**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\nol.render.Feature.prototype.get = function(key) {\n  return this.properties_[key];\n};\n\n\n/**\n * @return {Array.<number>|Array.<Array.<number>>} Ends or endss.\n */\nol.render.Feature.prototype.getEnds =\nol.render.Feature.prototype.getEndss = function() {\n  return this.ends_;\n};\n\n\n/**\n * Get the extent of this feature's geometry.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.render.Feature.prototype.getExtent = function() {\n  if (!this.extent_) {\n    this.extent_ = this.type_ === ol.geom.GeometryType.POINT ?\n      ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates_) :\n      ol.extent.createOrUpdateFromFlatCoordinates(\n          this.flatCoordinates_, 0, this.flatCoordinates_.length, 2);\n\n  }\n  return this.extent_;\n};\n\n\n/**\n * @return {Array.<number>} Flat interior points.\n */\nol.render.Feature.prototype.getFlatInteriorPoint = function() {\n  if (!this.flatInteriorPoints_) {\n    var flatCenter = ol.extent.getCenter(this.getExtent());\n    this.flatInteriorPoints_ = ol.geom.flat.interiorpoint.linearRings(\n        this.flatCoordinates_, 0, this.ends_, 2, flatCenter, 0);\n  }\n  return this.flatInteriorPoints_;\n};\n\n\n/**\n * @return {Array.<number>} Flat interior points.\n */\nol.render.Feature.prototype.getFlatInteriorPoints = function() {\n  if (!this.flatInteriorPoints_) {\n    var flatCenters = ol.geom.flat.center.linearRingss(\n        this.flatCoordinates_, 0, this.ends_, 2);\n    this.flatInteriorPoints_ = ol.geom.flat.interiorpoint.linearRingss(\n        this.flatCoordinates_, 0, this.ends_, 2, flatCenters);\n  }\n  return this.flatInteriorPoints_;\n};\n\n\n/**\n * @return {Array.<number>} Flat midpoint.\n */\nol.render.Feature.prototype.getFlatMidpoint = function() {\n  if (!this.flatMidpoints_) {\n    this.flatMidpoints_ = ol.geom.flat.interpolate.lineString(\n        this.flatCoordinates_, 0, this.flatCoordinates_.length, 2, 0.5);\n  }\n  return this.flatMidpoints_;\n};\n\n\n/**\n * @return {Array.<number>} Flat midpoints.\n */\nol.render.Feature.prototype.getFlatMidpoints = function() {\n  if (!this.flatMidpoints_) {\n    this.flatMidpoints_ = [];\n    var flatCoordinates = this.flatCoordinates_;\n    var offset = 0;\n    var ends = this.ends_;\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n      var end = ends[i];\n      var midpoint = ol.geom.flat.interpolate.lineString(\n          flatCoordinates, offset, end, 2, 0.5);\n      ol.array.extend(this.flatMidpoints_, midpoint);\n      offset = end;\n    }\n  }\n  return this.flatMidpoints_;\n};\n\n/**\n * Get the feature identifier.  This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\nol.render.Feature.prototype.getId = function() {\n  return this.id_;\n};\n\n\n/**\n * @return {Array.<number>} Flat coordinates.\n */\nol.render.Feature.prototype.getOrientedFlatCoordinates = function() {\n  return this.flatCoordinates_;\n};\n\n\n/**\n * @return {Array.<number>} Flat coordinates.\n */\nol.render.Feature.prototype.getFlatCoordinates =\n    ol.render.Feature.prototype.getOrientedFlatCoordinates;\n\n\n/**\n * For API compatibility with {@link ol.Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {ol.render.Feature} Feature.\n * @api\n */\nol.render.Feature.prototype.getGeometry = function() {\n  return this;\n};\n\n\n/**\n * Get the feature properties.\n * @return {Object.<string, *>} Feature properties.\n * @api\n */\nol.render.Feature.prototype.getProperties = function() {\n  return this.properties_;\n};\n\n\n/**\n * Get the feature for working with its geometry.\n * @return {ol.render.Feature} Feature.\n */\nol.render.Feature.prototype.getSimplifiedGeometry =\n    ol.render.Feature.prototype.getGeometry;\n\n\n/**\n * @return {number} Stride.\n */\nol.render.Feature.prototype.getStride = function() {\n  return 2;\n};\n\n\n/**\n * @return {undefined}\n */\nol.render.Feature.prototype.getStyleFunction = ol.nullFunction;\n\n\n/**\n * Get the type of this feature's geometry.\n * @return {ol.geom.GeometryType} Geometry type.\n * @api\n */\nol.render.Feature.prototype.getType = function() {\n  return this.type_;\n};\n\n/**\n * Transform geometry coordinates from tile pixel space to projected.\n * The SRS of the source and destination are expected to be the same.\n *\n * @param {ol.ProjectionLike} source The current projection\n * @param {ol.ProjectionLike} destination The desired projection.\n */\nol.render.Feature.prototype.transform = function(source, destination) {\n  var pixelExtent = source.getExtent();\n  var projectedExtent = source.getWorldExtent();\n  var scale = ol.extent.getHeight(projectedExtent) / ol.extent.getHeight(pixelExtent);\n  var transform = this.tmpTransform_;\n  ol.transform.compose(transform,\n      projectedExtent[0], projectedExtent[3],\n      scale, -scale, 0,\n      0, 0);\n  ol.geom.flat.transform.transform2D(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2,\n      transform, this.flatCoordinates_);\n};\n\n//FIXME Implement projection handling\n\ngoog.provide('ol.format.MVT');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.ext.PBF');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.FormatType');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.proj.Projection');\ngoog.require('ol.proj.Units');\ngoog.require('ol.render.Feature');\n\n\n/**\n * @classdesc\n * Feature format for reading data in the Mapbox MVT format.\n *\n * @constructor\n * @extends {ol.format.Feature}\n * @param {olx.format.MVTOptions=} opt_options Options.\n * @api\n */\nol.format.MVT = function(opt_options) {\n\n  ol.format.Feature.call(this);\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {ol.proj.Projection}\n   */\n  this.defaultDataProjection = new ol.proj.Projection({\n    code: 'EPSG:3857',\n    units: ol.proj.Units.TILE_PIXELS\n  });\n\n  /**\n   * @private\n   * @type {function((ol.geom.Geometry|Object.<string,*>)=)|\n   *     function(ol.geom.GeometryType,Array.<number>,\n   *         (Array.<number>|Array.<Array.<number>>),Object.<string,*>,number)}\n   */\n  this.featureClass_ = options.featureClass ?\n    options.featureClass : ol.render.Feature;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.geometryName_ = options.geometryName;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.layerName_ = options.layerName ? options.layerName : 'layer';\n\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.layers_ = options.layers ? options.layers : null;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = null;\n\n};\nol.inherits(ol.format.MVT, ol.format.Feature);\n\n\n/**\n * Reader callbacks for parsing the PBF.\n * @type {Object.<string, function(number, Object, ol.ext.PBF)>}\n */\nol.format.MVT.pbfReaders_ = {\n  layers: function(tag, layers, pbf) {\n    if (tag === 3) {\n      var layer = {\n        keys: [],\n        values: [],\n        features: []\n      };\n      var end = pbf.readVarint() + pbf.pos;\n      pbf.readFields(ol.format.MVT.pbfReaders_.layer, layer, end);\n      layer.length = layer.features.length;\n      if (layer.length) {\n        layers[layer.name] = layer;\n      }\n    }\n  },\n  layer: function(tag, layer, pbf) {\n    if (tag === 15) {\n      layer.version = pbf.readVarint();\n    } else if (tag === 1) {\n      layer.name = pbf.readString();\n    } else if (tag === 5) {\n      layer.extent = pbf.readVarint();\n    } else if (tag === 2) {\n      layer.features.push(pbf.pos);\n    } else if (tag === 3) {\n      layer.keys.push(pbf.readString());\n    } else if (tag === 4) {\n      var value = null;\n      var end = pbf.readVarint() + pbf.pos;\n      while (pbf.pos < end) {\n        tag = pbf.readVarint() >> 3;\n        value = tag === 1 ? pbf.readString() :\n          tag === 2 ? pbf.readFloat() :\n            tag === 3 ? pbf.readDouble() :\n              tag === 4 ? pbf.readVarint64() :\n                tag === 5 ? pbf.readVarint() :\n                  tag === 6 ? pbf.readSVarint() :\n                    tag === 7 ? pbf.readBoolean() : null;\n      }\n      layer.values.push(value);\n    }\n  },\n  feature: function(tag, feature, pbf) {\n    if (tag == 1) {\n      feature.id = pbf.readVarint();\n    } else if (tag == 2) {\n      var end = pbf.readVarint() + pbf.pos;\n      while (pbf.pos < end) {\n        var key = feature.layer.keys[pbf.readVarint()];\n        var value = feature.layer.values[pbf.readVarint()];\n        feature.properties[key] = value;\n      }\n    } else if (tag == 3) {\n      feature.type = pbf.readVarint();\n    } else if (tag == 4) {\n      feature.geometry = pbf.pos;\n    }\n  }\n};\n\n\n/**\n * Read a raw feature from the pbf offset stored at index `i` in the raw layer.\n * @suppress {missingProperties}\n * @private\n * @param {ol.ext.PBF} pbf PBF.\n * @param {Object} layer Raw layer.\n * @param {number} i Index of the feature in the raw layer's `features` array.\n * @return {Object} Raw feature.\n */\nol.format.MVT.readRawFeature_ = function(pbf, layer, i) {\n  pbf.pos = layer.features[i];\n  var end = pbf.readVarint() + pbf.pos;\n\n  var feature = {\n    layer: layer,\n    type: 0,\n    properties: {}\n  };\n  pbf.readFields(ol.format.MVT.pbfReaders_.feature, feature, end);\n  return feature;\n};\n\n\n/**\n * Read the raw geometry from the pbf offset stored in a raw feature's geometry\n * proeprty.\n * @suppress {missingProperties}\n * @private\n * @param {ol.ext.PBF} pbf PBF.\n * @param {Object} feature Raw feature.\n * @param {Array.<number>} flatCoordinates Array to store flat coordinates in.\n * @param {Array.<number>} ends Array to store ends in.\n */\nol.format.MVT.readRawGeometry_ = function(pbf, feature, flatCoordinates, ends) {\n  pbf.pos = feature.geometry;\n\n  var end = pbf.readVarint() + pbf.pos;\n  var cmd = 1;\n  var length = 0;\n  var x = 0;\n  var y = 0;\n  var coordsLen = 0;\n  var currentEnd = 0;\n\n  while (pbf.pos < end) {\n    if (!length) {\n      var cmdLen = pbf.readVarint();\n      cmd = cmdLen & 0x7;\n      length = cmdLen >> 3;\n    }\n\n    length--;\n\n    if (cmd === 1 || cmd === 2) {\n      x += pbf.readSVarint();\n      y += pbf.readSVarint();\n\n      if (cmd === 1) { // moveTo\n        if (coordsLen > currentEnd) {\n          ends.push(coordsLen);\n          currentEnd = coordsLen;\n        }\n      }\n\n      flatCoordinates.push(x, y);\n      coordsLen += 2;\n\n    } else if (cmd === 7) {\n\n      if (coordsLen > currentEnd) {\n        // close polygon\n        flatCoordinates.push(\n            flatCoordinates[currentEnd], flatCoordinates[currentEnd + 1]);\n        coordsLen += 2;\n      }\n\n    } else {\n      ol.asserts.assert(false, 59); // Invalid command found in the PBF\n    }\n  }\n\n  if (coordsLen > currentEnd) {\n    ends.push(coordsLen);\n    currentEnd = coordsLen;\n  }\n\n};\n\n\n/**\n * @suppress {missingProperties}\n * @private\n * @param {number} type The raw feature's geometry type\n * @param {number} numEnds Number of ends of the flat coordinates of the\n * geometry.\n * @return {ol.geom.GeometryType} The geometry type.\n */\nol.format.MVT.getGeometryType_ = function(type, numEnds) {\n  /** @type {ol.geom.GeometryType} */\n  var geometryType;\n  if (type === 1) {\n    geometryType = numEnds === 1 ?\n      ol.geom.GeometryType.POINT : ol.geom.GeometryType.MULTI_POINT;\n  } else if (type === 2) {\n    geometryType = numEnds === 1 ?\n      ol.geom.GeometryType.LINE_STRING :\n      ol.geom.GeometryType.MULTI_LINE_STRING;\n  } else if (type === 3) {\n    geometryType = ol.geom.GeometryType.POLYGON;\n    // MultiPolygon not relevant for rendering - winding order determines\n    // outer rings of polygons.\n  }\n  return geometryType;\n};\n\n/**\n * @private\n * @param {ol.ext.PBF} pbf PBF\n * @param {Object} rawFeature Raw Mapbox feature.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature|ol.render.Feature} Feature.\n */\nol.format.MVT.prototype.createFeature_ = function(pbf, rawFeature, opt_options) {\n  var type = rawFeature.type;\n  if (type === 0) {\n    return null;\n  }\n\n  var feature;\n  var id = rawFeature.id;\n  var values = rawFeature.properties;\n  values[this.layerName_] = rawFeature.layer.name;\n\n  var flatCoordinates = [];\n  var ends = [];\n  ol.format.MVT.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);\n\n  var geometryType = ol.format.MVT.getGeometryType_(type, ends.length);\n\n  if (this.featureClass_ === ol.render.Feature) {\n    feature = new this.featureClass_(geometryType, flatCoordinates, ends, values, id);\n  } else {\n    var geom;\n    if (geometryType == ol.geom.GeometryType.POLYGON) {\n      var endss = [];\n      var offset = 0;\n      var prevEndIndex = 0;\n      for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        if (!ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates, offset, end, 2)) {\n          endss.push(ends.slice(prevEndIndex, i));\n          prevEndIndex = i;\n        }\n        offset = end;\n      }\n      if (endss.length > 1) {\n        ends = endss;\n        geom = new ol.geom.MultiPolygon(null);\n      } else {\n        geom = new ol.geom.Polygon(null);\n      }\n    } else {\n      geom = geometryType === ol.geom.GeometryType.POINT ? new ol.geom.Point(null) :\n        geometryType === ol.geom.GeometryType.LINE_STRING ? new ol.geom.LineString(null) :\n          geometryType === ol.geom.GeometryType.POLYGON ? new ol.geom.Polygon(null) :\n            geometryType === ol.geom.GeometryType.MULTI_POINT ? new ol.geom.MultiPoint (null) :\n              geometryType === ol.geom.GeometryType.MULTI_LINE_STRING ? new ol.geom.MultiLineString(null) :\n                null;\n    }\n    geom.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, ends);\n    feature = new this.featureClass_();\n    if (this.geometryName_) {\n      feature.setGeometryName(this.geometryName_);\n    }\n    var geometry = ol.format.Feature.transformWithOptions(geom, false, this.adaptOptions(opt_options));\n    feature.setGeometry(geometry);\n    feature.setId(id);\n    feature.setProperties(values);\n  }\n\n  return feature;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.format.MVT.prototype.getLastExtent = function() {\n  return this.extent_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.MVT.prototype.getType = function() {\n  return ol.format.FormatType.ARRAY_BUFFER;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.format.MVT.prototype.readFeatures = function(source, opt_options) {\n  var layers = this.layers_;\n\n  var pbf = new ol.ext.PBF(/** @type {ArrayBuffer} */ (source));\n  var pbfLayers = pbf.readFields(ol.format.MVT.pbfReaders_.layers, {});\n  /** @type {Array.<ol.Feature|ol.render.Feature>} */\n  var features = [];\n  var pbfLayer;\n  for (var name in pbfLayers) {\n    if (layers && layers.indexOf(name) == -1) {\n      continue;\n    }\n    pbfLayer = pbfLayers[name];\n\n    var rawFeature;\n    for (var i = 0, ii = pbfLayer.length; i < ii; ++i) {\n      rawFeature = ol.format.MVT.readRawFeature_(pbf, pbfLayer, i);\n      features.push(this.createFeature_(pbf, rawFeature));\n    }\n    this.extent_ = pbfLayer ? [0, 0, pbfLayer.extent, pbfLayer.extent] : null;\n  }\n\n  return features;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.format.MVT.prototype.readProjection = function(source) {\n  return this.defaultDataProjection;\n};\n\n\n/**\n * Sets the layers that features will be read from.\n * @param {Array.<string>} layers Layers.\n * @api\n */\nol.format.MVT.prototype.setLayers = function(layers) {\n  this.layers_ = layers;\n};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.MVT.prototype.readFeature = function() {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.MVT.prototype.readGeometry = function() {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.MVT.prototype.writeFeature = function() {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.MVT.prototype.writeGeometry = function() {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.MVT.prototype.writeFeatures = function() {};\n\n// FIXME add typedef for stack state objects\ngoog.provide('ol.format.OSMXML');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading data in the\n * [OSMXML format](http://wiki.openstreetmap.org/wiki/OSM_XML).\n *\n * @constructor\n * @extends {ol.format.XMLFeature}\n * @api\n */\nol.format.OSMXML = function() {\n  ol.format.XMLFeature.call(this);\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get('EPSG:4326');\n};\nol.inherits(ol.format.OSMXML, ol.format.XMLFeature);\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.OSMXML.readNode_ = function(node, objectStack) {\n  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);\n  var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var id = node.getAttribute('id');\n  /** @type {ol.Coordinate} */\n  var coordinates = [\n    parseFloat(node.getAttribute('lon')),\n    parseFloat(node.getAttribute('lat'))\n  ];\n  state.nodes[id] = coordinates;\n\n  var values = ol.xml.pushParseAndPop({\n    tags: {}\n  }, ol.format.OSMXML.NODE_PARSERS_, node, objectStack);\n  if (!ol.obj.isEmpty(values.tags)) {\n    var geometry = new ol.geom.Point(coordinates);\n    ol.format.Feature.transformWithOptions(geometry, false, options);\n    var feature = new ol.Feature(geometry);\n    feature.setId(id);\n    feature.setProperties(values.tags);\n    state.features.push(feature);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.OSMXML.readWay_ = function(node, objectStack) {\n  var id = node.getAttribute('id');\n  var values = ol.xml.pushParseAndPop({\n    id: id,\n    ndrefs: [],\n    tags: {}\n  }, ol.format.OSMXML.WAY_PARSERS_, node, objectStack);\n  var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  state.ways.push(values);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.OSMXML.readNd_ = function(node, objectStack) {\n  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  values.ndrefs.push(node.getAttribute('ref'));\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.OSMXML.readTag_ = function(node, objectStack) {\n  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  values.tags[node.getAttribute('k')] = node.getAttribute('v');\n};\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.format.OSMXML.NAMESPACE_URIS_ = [\n  null\n];\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OSMXML.NAMESPACE_URIS_, {\n      'nd': ol.format.OSMXML.readNd_,\n      'tag': ol.format.OSMXML.readTag_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OSMXML.PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OSMXML.NAMESPACE_URIS_, {\n      'node': ol.format.OSMXML.readNode_,\n      'way': ol.format.OSMXML.readWay_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OSMXML.NAMESPACE_URIS_, {\n      'tag': ol.format.OSMXML.readTag_\n    });\n\n\n/**\n * Read all features from an OSM source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.OSMXML.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {\n  var options = this.getReadOptions(node, opt_options);\n  if (node.localName == 'osm') {\n    var state = ol.xml.pushParseAndPop({\n      nodes: {},\n      ways: [],\n      features: []\n    }, ol.format.OSMXML.PARSERS_, node, [options]);\n    // parse nodes in ways\n    for (var j = 0; j < state.ways.length; j++) {\n      var values = /** @type {Object} */ (state.ways[j]);\n      /** @type {Array.<number>} */\n      var flatCoordinates = [];\n      for (var i = 0, ii = values.ndrefs.length; i < ii; i++) {\n        var point = state.nodes[values.ndrefs[i]];\n        ol.array.extend(flatCoordinates, point);\n      }\n      var geometry;\n      if (values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) {\n        // closed way\n        geometry = new ol.geom.Polygon(null);\n        geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,\n            [flatCoordinates.length]);\n      } else {\n        geometry = new ol.geom.LineString(null);\n        geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);\n      }\n      ol.format.Feature.transformWithOptions(geometry, false, options);\n      var feature = new ol.Feature(geometry);\n      feature.setId(values.id);\n      feature.setProperties(values.tags);\n      state.features.push(feature);\n    }\n    if (state.features) {\n      return state.features;\n    }\n  }\n  return [];\n};\n\n\n/**\n * Read the projection from an OSM source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.OSMXML.prototype.readProjection;\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.OSMXML.prototype.writeFeatureNode = function(feature, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.OSMXML.prototype.writeFeaturesNode = function(features, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.OSMXML.prototype.writeGeometryNode = function(geometry, opt_options) {};\n\ngoog.provide('ol.format.XLink');\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.XLink.NAMESPACE_URI = 'http://www.w3.org/1999/xlink';\n\n\n/**\n * @param {Node} node Node.\n * @return {boolean|undefined} Boolean.\n */\nol.format.XLink.readHref = function(node) {\n  return node.getAttributeNS(ol.format.XLink.NAMESPACE_URI, 'href');\n};\n\ngoog.provide('ol.format.XML');\n\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Generic format for reading non-feature XML data\n *\n * @constructor\n * @abstract\n * @struct\n */\nol.format.XML = function() {\n};\n\n\n/**\n * @param {Document|Node|string} source Source.\n * @return {Object} The parsed result.\n */\nol.format.XML.prototype.read = function(source) {\n  if (ol.xml.isDocument(source)) {\n    return this.readFromDocument(/** @type {Document} */ (source));\n  } else if (ol.xml.isNode(source)) {\n    return this.readFromNode(/** @type {Node} */ (source));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readFromDocument(doc);\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * @abstract\n * @param {Document} doc Document.\n * @return {Object} Object\n */\nol.format.XML.prototype.readFromDocument = function(doc) {};\n\n\n/**\n * @abstract\n * @param {Node} node Node.\n * @return {Object} Object\n */\nol.format.XML.prototype.readFromNode = function(node) {};\n\ngoog.provide('ol.format.OWS');\n\ngoog.require('ol');\ngoog.require('ol.format.XLink');\ngoog.require('ol.format.XML');\ngoog.require('ol.format.XSD');\ngoog.require('ol.xml');\n\n\n/**\n * @constructor\n * @extends {ol.format.XML}\n */\nol.format.OWS = function() {\n  ol.format.XML.call(this);\n};\nol.inherits(ol.format.OWS, ol.format.XML);\n\n\n/**\n * @inheritDoc\n */\nol.format.OWS.prototype.readFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readFromNode(n);\n    }\n  }\n  return null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.OWS.prototype.readFromNode = function(node) {\n  var owsObject = ol.xml.pushParseAndPop({},\n      ol.format.OWS.PARSERS_, node, []);\n  return owsObject ? owsObject : null;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The address.\n */\nol.format.OWS.readAddress_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.ADDRESS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The values.\n */\nol.format.OWS.readAllowedValues_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.ALLOWED_VALUES_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The constraint.\n */\nol.format.OWS.readConstraint_ = function(node, objectStack) {\n  var name = node.getAttribute('name');\n  if (!name) {\n    return undefined;\n  }\n  return ol.xml.pushParseAndPop({'name': name},\n      ol.format.OWS.CONSTRAINT_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The contact info.\n */\nol.format.OWS.readContactInfo_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.CONTACT_INFO_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The DCP.\n */\nol.format.OWS.readDcp_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.DCP_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The GET object.\n */\nol.format.OWS.readGet_ = function(node, objectStack) {\n  var href = ol.format.XLink.readHref(node);\n  if (!href) {\n    return undefined;\n  }\n  return ol.xml.pushParseAndPop({'href': href},\n      ol.format.OWS.REQUEST_METHOD_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The HTTP object.\n */\nol.format.OWS.readHttp_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({}, ol.format.OWS.HTTP_PARSERS_,\n      node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The operation.\n */\nol.format.OWS.readOperation_ = function(node, objectStack) {\n  var name = node.getAttribute('name');\n  var value = ol.xml.pushParseAndPop({},\n      ol.format.OWS.OPERATION_PARSERS_, node, objectStack);\n  if (!value) {\n    return undefined;\n  }\n  var object = /** @type {Object} */\n      (objectStack[objectStack.length - 1]);\n  object[name] = value;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The operations metadata.\n */\nol.format.OWS.readOperationsMetadata_ = function(node,\n    objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.OPERATIONS_METADATA_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The phone.\n */\nol.format.OWS.readPhone_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.OWS.PHONE_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The service identification.\n */\nol.format.OWS.readServiceIdentification_ = function(node,\n    objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The service contact.\n */\nol.format.OWS.readServiceContact_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.OWS.SERVICE_CONTACT_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} The service provider.\n */\nol.format.OWS.readServiceProvider_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.OWS.SERVICE_PROVIDER_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {string|undefined} The value.\n */\nol.format.OWS.readValue_ = function(node, objectStack) {\n  return ol.format.XSD.readString(node);\n};\n\n\n/**\n * @const\n * @type {Array.<string>}\n * @private\n */\nol.format.OWS.NAMESPACE_URIS_ = [\n  null,\n  'http://www.opengis.net/ows/1.1'\n];\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'ServiceIdentification': ol.xml.makeObjectPropertySetter(\n          ol.format.OWS.readServiceIdentification_),\n      'ServiceProvider': ol.xml.makeObjectPropertySetter(\n          ol.format.OWS.readServiceProvider_),\n      'OperationsMetadata': ol.xml.makeObjectPropertySetter(\n          ol.format.OWS.readOperationsMetadata_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'DeliveryPoint': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'AdministrativeArea': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'PostalCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Country': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'ElectronicMailAddress': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Value': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readValue_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'AllowedValues': ol.xml.makeObjectPropertySetter(\n          ol.format.OWS.readAllowedValues_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Phone': ol.xml.makeObjectPropertySetter(ol.format.OWS.readPhone_),\n      'Address': ol.xml.makeObjectPropertySetter(ol.format.OWS.readAddress_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.DCP_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'HTTP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readHttp_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.HTTP_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Get': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readGet_),\n      'Post': undefined // TODO\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'DCP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readDcp_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Operation': ol.format.OWS.readOperation_\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.PHONE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Voice': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Facsimile': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.OWS.NAMESPACE_URIS_, {\n      'Constraint': ol.xml.makeObjectPropertyPusher(\n          ol.format.OWS.readConstraint_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.SERVICE_CONTACT_PARSERS_ =\n    ol.xml.makeStructureNS(\n        ol.format.OWS.NAMESPACE_URIS_, {\n          'IndividualName': ol.xml.makeObjectPropertySetter(\n              ol.format.XSD.readString),\n          'PositionName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'ContactInfo': ol.xml.makeObjectPropertySetter(\n              ol.format.OWS.readContactInfo_)\n        });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =\n    ol.xml.makeStructureNS(\n        ol.format.OWS.NAMESPACE_URIS_, {\n          'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'AccessConstraints': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'Fees': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'ServiceTypeVersion': ol.xml.makeObjectPropertySetter(\n              ol.format.XSD.readString),\n          'ServiceType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)\n        });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.OWS.SERVICE_PROVIDER_PARSERS_ =\n    ol.xml.makeStructureNS(\n        ol.format.OWS.NAMESPACE_URIS_, {\n          'ProviderName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n          'ProviderSite': ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref),\n          'ServiceContact': ol.xml.makeObjectPropertySetter(\n              ol.format.OWS.readServiceContact_)\n        });\n\ngoog.provide('ol.geom.flat.flip');\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array.<number>=} opt_dest Destination.\n * @param {number=} opt_destOffset Destination offset.\n * @return {Array.<number>} Flat coordinates.\n */\nol.geom.flat.flip.flipXY = function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) {\n  var dest, destOffset;\n  if (opt_dest !== undefined) {\n    dest = opt_dest;\n    destOffset = opt_destOffset !== undefined ? opt_destOffset : 0;\n  } else {\n    dest = [];\n    destOffset = 0;\n  }\n  var j = offset;\n  while (j < end) {\n    var x = flatCoordinates[j++];\n    dest[destOffset++] = flatCoordinates[j++];\n    dest[destOffset++] = x;\n    for (var k = 2; k < stride; ++k) {\n      dest[destOffset++] = flatCoordinates[j++];\n    }\n  }\n  dest.length = destOffset;\n  return dest;\n};\n\ngoog.provide('ol.format.Polyline');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.TextFeature');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.flip');\ngoog.require('ol.geom.flat.inflate');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the Encoded\n * Polyline Algorithm Format.\n *\n * @constructor\n * @extends {ol.format.TextFeature}\n * @param {olx.format.PolylineOptions=} opt_options\n *     Optional configuration object.\n * @api\n */\nol.format.Polyline = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.TextFeature.call(this);\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get('EPSG:4326');\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.factor_ = options.factor ? options.factor : 1e5;\n\n  /**\n   * @private\n   * @type {ol.geom.GeometryLayout}\n   */\n  this.geometryLayout_ = options.geometryLayout ?\n    options.geometryLayout : ol.geom.GeometryLayout.XY;\n};\nol.inherits(ol.format.Polyline, ol.format.TextFeature);\n\n\n/**\n * Encode a list of n-dimensional points and return an encoded string\n *\n * Attention: This function will modify the passed array!\n *\n * @param {Array.<number>} numbers A list of n-dimensional points.\n * @param {number} stride The number of dimension of the points in the list.\n * @param {number=} opt_factor The factor by which the numbers will be\n *     multiplied. The remaining decimal places will get rounded away.\n *     Default is `1e5`.\n * @return {string} The encoded string.\n * @api\n */\nol.format.Polyline.encodeDeltas = function(numbers, stride, opt_factor) {\n  var factor = opt_factor ? opt_factor : 1e5;\n  var d;\n\n  var lastNumbers = new Array(stride);\n  for (d = 0; d < stride; ++d) {\n    lastNumbers[d] = 0;\n  }\n\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii;) {\n    for (d = 0; d < stride; ++d, ++i) {\n      var num = numbers[i];\n      var delta = num - lastNumbers[d];\n      lastNumbers[d] = num;\n\n      numbers[i] = delta;\n    }\n  }\n\n  return ol.format.Polyline.encodeFloats(numbers, factor);\n};\n\n\n/**\n * Decode a list of n-dimensional points from an encoded string\n *\n * @param {string} encoded An encoded string.\n * @param {number} stride The number of dimension of the points in the\n *     encoded string.\n * @param {number=} opt_factor The factor by which the resulting numbers will\n *     be divided. Default is `1e5`.\n * @return {Array.<number>} A list of n-dimensional points.\n * @api\n */\nol.format.Polyline.decodeDeltas = function(encoded, stride, opt_factor) {\n  var factor = opt_factor ? opt_factor : 1e5;\n  var d;\n\n  /** @type {Array.<number>} */\n  var lastNumbers = new Array(stride);\n  for (d = 0; d < stride; ++d) {\n    lastNumbers[d] = 0;\n  }\n\n  var numbers = ol.format.Polyline.decodeFloats(encoded, factor);\n\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii;) {\n    for (d = 0; d < stride; ++d, ++i) {\n      lastNumbers[d] += numbers[i];\n\n      numbers[i] = lastNumbers[d];\n    }\n  }\n\n  return numbers;\n};\n\n\n/**\n * Encode a list of floating point numbers and return an encoded string\n *\n * Attention: This function will modify the passed array!\n *\n * @param {Array.<number>} numbers A list of floating point numbers.\n * @param {number=} opt_factor The factor by which the numbers will be\n *     multiplied. The remaining decimal places will get rounded away.\n *     Default is `1e5`.\n * @return {string} The encoded string.\n * @api\n */\nol.format.Polyline.encodeFloats = function(numbers, opt_factor) {\n  var factor = opt_factor ? opt_factor : 1e5;\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii; ++i) {\n    numbers[i] = Math.round(numbers[i] * factor);\n  }\n\n  return ol.format.Polyline.encodeSignedIntegers(numbers);\n};\n\n\n/**\n * Decode a list of floating point numbers from an encoded string\n *\n * @param {string} encoded An encoded string.\n * @param {number=} opt_factor The factor by which the result will be divided.\n *     Default is `1e5`.\n * @return {Array.<number>} A list of floating point numbers.\n * @api\n */\nol.format.Polyline.decodeFloats = function(encoded, opt_factor) {\n  var factor = opt_factor ? opt_factor : 1e5;\n  var numbers = ol.format.Polyline.decodeSignedIntegers(encoded);\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii; ++i) {\n    numbers[i] /= factor;\n  }\n  return numbers;\n};\n\n\n/**\n * Encode a list of signed integers and return an encoded string\n *\n * Attention: This function will modify the passed array!\n *\n * @param {Array.<number>} numbers A list of signed integers.\n * @return {string} The encoded string.\n */\nol.format.Polyline.encodeSignedIntegers = function(numbers) {\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii; ++i) {\n    var num = numbers[i];\n    numbers[i] = (num < 0) ? ~(num << 1) : (num << 1);\n  }\n  return ol.format.Polyline.encodeUnsignedIntegers(numbers);\n};\n\n\n/**\n * Decode a list of signed integers from an encoded string\n *\n * @param {string} encoded An encoded string.\n * @return {Array.<number>} A list of signed integers.\n */\nol.format.Polyline.decodeSignedIntegers = function(encoded) {\n  var numbers = ol.format.Polyline.decodeUnsignedIntegers(encoded);\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii; ++i) {\n    var num = numbers[i];\n    numbers[i] = (num & 1) ? ~(num >> 1) : (num >> 1);\n  }\n  return numbers;\n};\n\n\n/**\n * Encode a list of unsigned integers and return an encoded string\n *\n * @param {Array.<number>} numbers A list of unsigned integers.\n * @return {string} The encoded string.\n */\nol.format.Polyline.encodeUnsignedIntegers = function(numbers) {\n  var encoded = '';\n  var i, ii;\n  for (i = 0, ii = numbers.length; i < ii; ++i) {\n    encoded += ol.format.Polyline.encodeUnsignedInteger(numbers[i]);\n  }\n  return encoded;\n};\n\n\n/**\n * Decode a list of unsigned integers from an encoded string\n *\n * @param {string} encoded An encoded string.\n * @return {Array.<number>} A list of unsigned integers.\n */\nol.format.Polyline.decodeUnsignedIntegers = function(encoded) {\n  var numbers = [];\n  var current = 0;\n  var shift = 0;\n  var i, ii;\n  for (i = 0, ii = encoded.length; i < ii; ++i) {\n    var b = encoded.charCodeAt(i) - 63;\n    current |= (b & 0x1f) << shift;\n    if (b < 0x20) {\n      numbers.push(current);\n      current = 0;\n      shift = 0;\n    } else {\n      shift += 5;\n    }\n  }\n  return numbers;\n};\n\n\n/**\n * Encode one single unsigned integer and return an encoded string\n *\n * @param {number} num Unsigned integer that should be encoded.\n * @return {string} The encoded string.\n */\nol.format.Polyline.encodeUnsignedInteger = function(num) {\n  var value, encoded = '';\n  while (num >= 0x20) {\n    value = (0x20 | (num & 0x1f)) + 63;\n    encoded += String.fromCharCode(value);\n    num >>= 5;\n  }\n  value = num + 63;\n  encoded += String.fromCharCode(value);\n  return encoded;\n};\n\n\n/**\n * Read the feature from the Polyline source. The coordinates are assumed to be\n * in two dimensions and in latitude, longitude order.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.Polyline.prototype.readFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.readFeatureFromText = function(text, opt_options) {\n  var geometry = this.readGeometryFromText(text, opt_options);\n  return new ol.Feature(geometry);\n};\n\n\n/**\n * Read the feature from the source. As Polyline sources contain a single\n * feature, this will return the feature in an array.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.Polyline.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.readFeaturesFromText = function(text, opt_options) {\n  var feature = this.readFeatureFromText(text, opt_options);\n  return [feature];\n};\n\n\n/**\n * Read the geometry from the source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.geom.Geometry} Geometry.\n * @api\n */\nol.format.Polyline.prototype.readGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.readGeometryFromText = function(text, opt_options) {\n  var stride = ol.geom.SimpleGeometry.getStrideForLayout(this.geometryLayout_);\n  var flatCoordinates = ol.format.Polyline.decodeDeltas(\n      text, stride, this.factor_);\n  ol.geom.flat.flip.flipXY(\n      flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates);\n  var coordinates = ol.geom.flat.inflate.coordinates(\n      flatCoordinates, 0, flatCoordinates.length, stride);\n\n  return /** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(\n        new ol.geom.LineString(coordinates, this.geometryLayout_), false,\n        this.adaptOptions(opt_options)));\n};\n\n\n/**\n * Read the projection from a Polyline source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.format.Polyline.prototype.readProjection;\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.writeFeatureText = function(feature, opt_options) {\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    return this.writeGeometryText(geometry, opt_options);\n  } else {\n    ol.asserts.assert(false, 40); // Expected `feature` to have a geometry\n    return '';\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.writeFeaturesText = function(features, opt_options) {\n  return this.writeFeatureText(features[0], opt_options);\n};\n\n\n/**\n * Write a single geometry in Polyline format.\n *\n * @function\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} Geometry.\n * @api\n */\nol.format.Polyline.prototype.writeGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.Polyline.prototype.writeGeometryText = function(geometry, opt_options) {\n  geometry = /** @type {ol.geom.LineString} */\n    (ol.format.Feature.transformWithOptions(\n        geometry, true, this.adaptOptions(opt_options)));\n  var flatCoordinates = geometry.getFlatCoordinates();\n  var stride = geometry.getStride();\n  ol.geom.flat.flip.flipXY(\n      flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates);\n  return ol.format.Polyline.encodeDeltas(flatCoordinates, stride, this.factor_);\n};\n\ngoog.provide('ol.format.TopoJSON');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.JSONFeature');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Feature format for reading data in the TopoJSON format.\n *\n * @constructor\n * @extends {ol.format.JSONFeature}\n * @param {olx.format.TopoJSONOptions=} opt_options Options.\n * @api\n */\nol.format.TopoJSON = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.JSONFeature.call(this);\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.layerName_ = options.layerName;\n\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.layers_ = options.layers ? options.layers : null;\n\n  /**\n   * @inheritDoc\n   */\n  this.defaultDataProjection = ol.proj.get(\n      options.defaultDataProjection ?\n        options.defaultDataProjection : 'EPSG:4326');\n\n};\nol.inherits(ol.format.TopoJSON, ol.format.JSONFeature);\n\n\n/**\n * Concatenate arcs into a coordinate array.\n * @param {Array.<number>} indices Indices of arcs to concatenate.  Negative\n *     values indicate arcs need to be reversed.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs (already\n *     transformed).\n * @return {Array.<ol.Coordinate>} Coordinates array.\n * @private\n */\nol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) {\n  /** @type {Array.<ol.Coordinate>} */\n  var coordinates = [];\n  var index, arc;\n  var i, ii;\n  var j, jj;\n  for (i = 0, ii = indices.length; i < ii; ++i) {\n    index = indices[i];\n    if (i > 0) {\n      // splicing together arcs, discard last point\n      coordinates.pop();\n    }\n    if (index >= 0) {\n      // forward arc\n      arc = arcs[index];\n    } else {\n      // reverse arc\n      arc = arcs[~index].slice().reverse();\n    }\n    coordinates.push.apply(coordinates, arc);\n  }\n  // provide fresh copies of coordinate arrays\n  for (j = 0, jj = coordinates.length; j < jj; ++j) {\n    coordinates[j] = coordinates[j].slice();\n  }\n  return coordinates;\n};\n\n\n/**\n * Create a point from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @return {ol.geom.Point} Geometry.\n * @private\n */\nol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) {\n  var coordinates = object.coordinates;\n  if (scale && translate) {\n    ol.format.TopoJSON.transformVertex_(coordinates, scale, translate);\n  }\n  return new ol.geom.Point(coordinates);\n};\n\n\n/**\n * Create a multi-point from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @return {ol.geom.MultiPoint} Geometry.\n * @private\n */\nol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale,\n    translate) {\n  var coordinates = object.coordinates;\n  var i, ii;\n  if (scale && translate) {\n    for (i = 0, ii = coordinates.length; i < ii; ++i) {\n      ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate);\n    }\n  }\n  return new ol.geom.MultiPoint(coordinates);\n};\n\n\n/**\n * Create a linestring from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @return {ol.geom.LineString} Geometry.\n * @private\n */\nol.format.TopoJSON.readLineStringGeometry_ = function(object, arcs) {\n  var coordinates = ol.format.TopoJSON.concatenateArcs_(object.arcs, arcs);\n  return new ol.geom.LineString(coordinates);\n};\n\n\n/**\n * Create a multi-linestring from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @return {ol.geom.MultiLineString} Geometry.\n * @private\n */\nol.format.TopoJSON.readMultiLineStringGeometry_ = function(object, arcs) {\n  var coordinates = [];\n  var i, ii;\n  for (i = 0, ii = object.arcs.length; i < ii; ++i) {\n    coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs);\n  }\n  return new ol.geom.MultiLineString(coordinates);\n};\n\n\n/**\n * Create a polygon from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @return {ol.geom.Polygon} Geometry.\n * @private\n */\nol.format.TopoJSON.readPolygonGeometry_ = function(object, arcs) {\n  var coordinates = [];\n  var i, ii;\n  for (i = 0, ii = object.arcs.length; i < ii; ++i) {\n    coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs);\n  }\n  return new ol.geom.Polygon(coordinates);\n};\n\n\n/**\n * Create a multi-polygon from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @return {ol.geom.MultiPolygon} Geometry.\n * @private\n */\nol.format.TopoJSON.readMultiPolygonGeometry_ = function(object, arcs) {\n  var coordinates = [];\n  var polyArray, ringCoords, j, jj;\n  var i, ii;\n  for (i = 0, ii = object.arcs.length; i < ii; ++i) {\n    // for each polygon\n    polyArray = object.arcs[i];\n    ringCoords = [];\n    for (j = 0, jj = polyArray.length; j < jj; ++j) {\n      // for each ring\n      ringCoords[j] = ol.format.TopoJSON.concatenateArcs_(polyArray[j], arcs);\n    }\n    coordinates[i] = ringCoords;\n  }\n  return new ol.geom.MultiPolygon(coordinates);\n};\n\n\n/**\n * Create features from a TopoJSON GeometryCollection object.\n *\n * @param {TopoJSONGeometryCollection} collection TopoJSON Geometry\n *     object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @param {string|undefined} property Property to set the `GeometryCollection`'s parent\n *     object to.\n * @param {string} name Name of the `Topology`'s child object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Array of features.\n * @private\n */\nol.format.TopoJSON.readFeaturesFromGeometryCollection_ = function(\n    collection, arcs, scale, translate, property, name, opt_options) {\n  var geometries = collection.geometries;\n  var features = [];\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    features[i] = ol.format.TopoJSON.readFeatureFromGeometry_(\n        geometries[i], arcs, scale, translate, property, name, opt_options);\n  }\n  return features;\n};\n\n\n/**\n * Create a feature from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON geometry object.\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @param {string|undefined} property Property to set the `GeometryCollection`'s parent\n *     object to.\n * @param {string} name Name of the `Topology`'s child object.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @private\n */\nol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs,\n    scale, translate, property, name, opt_options) {\n  var geometry;\n  var type = object.type;\n  var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type];\n  if ((type === 'Point') || (type === 'MultiPoint')) {\n    geometry = geometryReader(object, scale, translate);\n  } else {\n    geometry = geometryReader(object, arcs);\n  }\n  var feature = new ol.Feature();\n  feature.setGeometry(/** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(geometry, false, opt_options)));\n  if (object.id !== undefined) {\n    feature.setId(object.id);\n  }\n  var properties = object.properties;\n  if (property) {\n    if (!properties) {\n      properties = {};\n    }\n    properties[property] = name;\n  }\n  if (properties) {\n    feature.setProperties(properties);\n  }\n  return feature;\n};\n\n\n/**\n * Read all features from a TopoJSON source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.TopoJSON.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.TopoJSON.prototype.readFeaturesFromObject = function(\n    object, opt_options) {\n  if (object.type == 'Topology') {\n    var topoJSONTopology = /** @type {TopoJSONTopology} */ (object);\n    var transform, scale = null, translate = null;\n    if (topoJSONTopology.transform) {\n      transform = topoJSONTopology.transform;\n      scale = transform.scale;\n      translate = transform.translate;\n    }\n    var arcs = topoJSONTopology.arcs;\n    if (transform) {\n      ol.format.TopoJSON.transformArcs_(arcs, scale, translate);\n    }\n    /** @type {Array.<ol.Feature>} */\n    var features = [];\n    var topoJSONFeatures = topoJSONTopology.objects;\n    var property = this.layerName_;\n    var objectName, feature;\n    for (objectName in topoJSONFeatures) {\n      if (this.layers_ && this.layers_.indexOf(objectName) == -1) {\n        continue;\n      }\n      if (topoJSONFeatures[objectName].type === 'GeometryCollection') {\n        feature = /** @type {TopoJSONGeometryCollection} */\n          (topoJSONFeatures[objectName]);\n        features.push.apply(features,\n            ol.format.TopoJSON.readFeaturesFromGeometryCollection_(\n                feature, arcs, scale, translate, property, objectName, opt_options));\n      } else {\n        feature = /** @type {TopoJSONGeometry} */\n          (topoJSONFeatures[objectName]);\n        features.push(ol.format.TopoJSON.readFeatureFromGeometry_(\n            feature, arcs, scale, translate, property, objectName, opt_options));\n      }\n    }\n    return features;\n  } else {\n    return [];\n  }\n};\n\n\n/**\n * Apply a linear transform to array of arcs.  The provided array of arcs is\n * modified in place.\n *\n * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @private\n */\nol.format.TopoJSON.transformArcs_ = function(arcs, scale, translate) {\n  var i, ii;\n  for (i = 0, ii = arcs.length; i < ii; ++i) {\n    ol.format.TopoJSON.transformArc_(arcs[i], scale, translate);\n  }\n};\n\n\n/**\n * Apply a linear transform to an arc.  The provided arc is modified in place.\n *\n * @param {Array.<ol.Coordinate>} arc Arc.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @private\n */\nol.format.TopoJSON.transformArc_ = function(arc, scale, translate) {\n  var x = 0;\n  var y = 0;\n  var vertex;\n  var i, ii;\n  for (i = 0, ii = arc.length; i < ii; ++i) {\n    vertex = arc[i];\n    x += vertex[0];\n    y += vertex[1];\n    vertex[0] = x;\n    vertex[1] = y;\n    ol.format.TopoJSON.transformVertex_(vertex, scale, translate);\n  }\n};\n\n\n/**\n * Apply a linear transform to a vertex.  The provided vertex is modified in\n * place.\n *\n * @param {ol.Coordinate} vertex Vertex.\n * @param {Array.<number>} scale Scale for each dimension.\n * @param {Array.<number>} translate Translation for each dimension.\n * @private\n */\nol.format.TopoJSON.transformVertex_ = function(vertex, scale, translate) {\n  vertex[0] = vertex[0] * scale[0] + translate[0];\n  vertex[1] = vertex[1] * scale[1] + translate[1];\n};\n\n\n/**\n * Read the projection from a TopoJSON source.\n *\n * @param {Document|Node|Object|string} object Source.\n * @return {ol.proj.Projection} Projection.\n * @override\n * @api\n */\nol.format.TopoJSON.prototype.readProjection;\n\n\n/**\n * @inheritDoc\n */\nol.format.TopoJSON.prototype.readProjectionFromObject = function(object) {\n  return this.defaultDataProjection;\n};\n\n\n/**\n * @const\n * @private\n * @type {Object.<string, function(TopoJSONGeometry, Array, ...Array): ol.geom.Geometry>}\n */\nol.format.TopoJSON.GEOMETRY_READERS_ = {\n  'Point': ol.format.TopoJSON.readPointGeometry_,\n  'LineString': ol.format.TopoJSON.readLineStringGeometry_,\n  'Polygon': ol.format.TopoJSON.readPolygonGeometry_,\n  'MultiPoint': ol.format.TopoJSON.readMultiPointGeometry_,\n  'MultiLineString': ol.format.TopoJSON.readMultiLineStringGeometry_,\n  'MultiPolygon': ol.format.TopoJSON.readMultiPolygonGeometry_\n};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.TopoJSON.prototype.writeFeatureObject = function(feature, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.TopoJSON.prototype.writeFeaturesObject = function(features, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.TopoJSON.prototype.writeGeometryObject = function(geometry, opt_options) {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.TopoJSON.prototype.readGeometryFromObject = function() {};\n\n\n/**\n * Not implemented.\n * @override\n */\nol.format.TopoJSON.prototype.readFeatureFromObject = function() {};\n\ngoog.provide('ol.format.WFS');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.format.GML2');\ngoog.require('ol.format.GML3');\ngoog.require('ol.format.GMLBase');\ngoog.require('ol.format.filter');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.format.XSD');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the WFS format.\n * By default, supports WFS version 1.1.0. You can pass a GML format\n * as option if you want to read a WFS that contains GML2 (WFS 1.0.0).\n * Also see {@link ol.format.GMLBase} which is used by this format.\n *\n * @constructor\n * @param {olx.format.WFSOptions=} opt_options\n *     Optional configuration object.\n * @extends {ol.format.XMLFeature}\n * @api\n */\nol.format.WFS = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {Array.<string>|string|undefined}\n   */\n  this.featureType_ = options.featureType;\n\n  /**\n   * @private\n   * @type {Object.<string, string>|string|undefined}\n   */\n  this.featureNS_ = options.featureNS;\n\n  /**\n   * @private\n   * @type {ol.format.GMLBase}\n   */\n  this.gmlFormat_ = options.gmlFormat ?\n    options.gmlFormat : new ol.format.GML3();\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.schemaLocation_ = options.schemaLocation ?\n    options.schemaLocation :\n    ol.format.WFS.SCHEMA_LOCATIONS[ol.format.WFS.DEFAULT_VERSION];\n\n  ol.format.XMLFeature.call(this);\n};\nol.inherits(ol.format.WFS, ol.format.XMLFeature);\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.FEATURE_PREFIX = 'feature';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.XMLNS = 'http://www.w3.org/2000/xmlns/';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.OGCNS = 'http://www.opengis.net/ogc';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.WFSNS = 'http://www.opengis.net/wfs';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.FESNS = 'http://www.opengis.net/fes';\n\n\n/**\n * @const\n * @type {Object.<string, string>}\n */\nol.format.WFS.SCHEMA_LOCATIONS = {\n  '1.1.0': 'http://www.opengis.net/wfs ' +\n      'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd',\n  '1.0.0': 'http://www.opengis.net/wfs ' +\n      'http://schemas.opengis.net/wfs/1.0.0/wfs.xsd'\n};\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WFS.DEFAULT_VERSION = '1.1.0';\n\n\n/**\n * @return {Array.<string>|string|undefined} featureType\n */\nol.format.WFS.prototype.getFeatureType = function() {\n  return this.featureType_;\n};\n\n\n/**\n * @param {Array.<string>|string|undefined} featureType Feature type(s) to parse.\n */\nol.format.WFS.prototype.setFeatureType = function(featureType) {\n  this.featureType_ = featureType;\n};\n\n\n/**\n * Read all features from a WFS FeatureCollection.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.WFS.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {\n  var context = /** @type {ol.XmlNodeStackItem} */ ({\n    'featureType': this.featureType_,\n    'featureNS': this.featureNS_\n  });\n  ol.obj.assign(context, this.getReadOptions(node,\n      opt_options ? opt_options : {}));\n  var objectStack = [context];\n  this.gmlFormat_.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][\n      'featureMember'] =\n      ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readFeaturesInternal);\n  var features = ol.xml.pushParseAndPop([],\n      this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,\n      objectStack, this.gmlFormat_);\n  if (!features) {\n    features = [];\n  }\n  return features;\n};\n\n\n/**\n * Read transaction response of the source.\n *\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.WFSTransactionResponse|undefined} Transaction response.\n * @api\n */\nol.format.WFS.prototype.readTransactionResponse = function(source) {\n  if (ol.xml.isDocument(source)) {\n    return this.readTransactionResponseFromDocument(\n        /** @type {Document} */ (source));\n  } else if (ol.xml.isNode(source)) {\n    return this.readTransactionResponseFromNode(/** @type {Node} */ (source));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readTransactionResponseFromDocument(doc);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * Read feature collection metadata of the source.\n *\n * @param {Document|Node|Object|string} source Source.\n * @return {ol.WFSFeatureCollectionMetadata|undefined}\n *     FeatureCollection metadata.\n * @api\n */\nol.format.WFS.prototype.readFeatureCollectionMetadata = function(source) {\n  if (ol.xml.isDocument(source)) {\n    return this.readFeatureCollectionMetadataFromDocument(\n        /** @type {Document} */ (source));\n  } else if (ol.xml.isNode(source)) {\n    return this.readFeatureCollectionMetadataFromNode(\n        /** @type {Node} */ (source));\n  } else if (typeof source === 'string') {\n    var doc = ol.xml.parse(source);\n    return this.readFeatureCollectionMetadataFromDocument(doc);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @return {ol.WFSFeatureCollectionMetadata|undefined}\n *     FeatureCollection metadata.\n */\nol.format.WFS.prototype.readFeatureCollectionMetadataFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readFeatureCollectionMetadataFromNode(n);\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WFS.FEATURE_COLLECTION_PARSERS_ = {\n  'http://www.opengis.net/gml': {\n    'boundedBy': ol.xml.makeObjectPropertySetter(\n        ol.format.GMLBase.prototype.readGeometryElement, 'bounds')\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {ol.WFSFeatureCollectionMetadata|undefined}\n *     FeatureCollection metadata.\n */\nol.format.WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {\n  var result = {};\n  var value = ol.format.XSD.readNonNegativeIntegerString(\n      node.getAttribute('numberOfFeatures'));\n  result['numberOfFeatures'] = value;\n  return ol.xml.pushParseAndPop(\n      /** @type {ol.WFSFeatureCollectionMetadata} */ (result),\n      ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, [], this.gmlFormat_);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WFS.TRANSACTION_SUMMARY_PARSERS_ = {\n  'http://www.opengis.net/wfs': {\n    'totalInserted': ol.xml.makeObjectPropertySetter(\n        ol.format.XSD.readNonNegativeInteger),\n    'totalUpdated': ol.xml.makeObjectPropertySetter(\n        ol.format.XSD.readNonNegativeInteger),\n    'totalDeleted': ol.xml.makeObjectPropertySetter(\n        ol.format.XSD.readNonNegativeInteger)\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Transaction Summary.\n * @private\n */\nol.format.WFS.readTransactionSummary_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WFS.TRANSACTION_SUMMARY_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WFS.OGC_FID_PARSERS_ = {\n  'http://www.opengis.net/ogc': {\n    'FeatureId': ol.xml.makeArrayPusher(function(node, objectStack) {\n      return node.getAttribute('fid');\n    })\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n */\nol.format.WFS.fidParser_ = function(node, objectStack) {\n  ol.xml.parseNode(ol.format.WFS.OGC_FID_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WFS.INSERT_RESULTS_PARSERS_ = {\n  'http://www.opengis.net/wfs': {\n    'Feature': ol.format.WFS.fidParser_\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Array.<string>|undefined} Insert results.\n * @private\n */\nol.format.WFS.readInsertResults_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      [], ol.format.WFS.INSERT_RESULTS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WFS.TRANSACTION_RESPONSE_PARSERS_ = {\n  'http://www.opengis.net/wfs': {\n    'TransactionSummary': ol.xml.makeObjectPropertySetter(\n        ol.format.WFS.readTransactionSummary_, 'transactionSummary'),\n    'InsertResults': ol.xml.makeObjectPropertySetter(\n        ol.format.WFS.readInsertResults_, 'insertIds')\n  }\n};\n\n\n/**\n * @param {Document} doc Document.\n * @return {ol.WFSTransactionResponse|undefined} Transaction response.\n */\nol.format.WFS.prototype.readTransactionResponseFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readTransactionResponseFromNode(n);\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @param {Node} node Node.\n * @return {ol.WFSTransactionResponse|undefined} Transaction response.\n */\nol.format.WFS.prototype.readTransactionResponseFromNode = function(node) {\n  return ol.xml.pushParseAndPop(\n      /** @type {ol.WFSTransactionResponse} */({}),\n      ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_, node, []);\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.WFS.QUERY_SERIALIZERS_ = {\n  'http://www.opengis.net/wfs': {\n    'PropertyName': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeFeature_ = function(node, feature, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  var featureType = context['featureType'];\n  var featureNS = context['featureNS'];\n  var gmlVersion = context['gmlVersion'];\n  var child = ol.xml.createElementNS(featureNS, featureType);\n  node.appendChild(child);\n  if (gmlVersion === 2) {\n    ol.format.GML2.prototype.writeFeatureElement(child, feature, objectStack);\n  } else {\n    ol.format.GML3.prototype.writeFeatureElement(child, feature, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {number|string} fid Feature identifier.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeOgcFidFilter_ = function(node, fid, objectStack) {\n  var filter = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'Filter');\n  var child = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'FeatureId');\n  filter.appendChild(child);\n  child.setAttribute('fid', fid);\n  node.appendChild(filter);\n};\n\n\n/**\n * @param {string|undefined} featurePrefix The prefix of the feature.\n * @param {string} featureType The type of the feature.\n * @returns {string} The value of the typeName property.\n * @private\n */\nol.format.WFS.getTypeName_ = function(featurePrefix, featureType) {\n  featurePrefix = featurePrefix ? featurePrefix :\n    ol.format.WFS.FEATURE_PREFIX;\n  var prefix = featurePrefix + ':';\n  // The featureType already contains the prefix.\n  if (featureType.indexOf(prefix) === 0) {\n    return featureType;\n  } else {\n    return prefix + featureType;\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeDelete_ = function(node, feature, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  ol.asserts.assert(feature.getId() !== undefined, 26); // Features must have an id set\n  var featureType = context['featureType'];\n  var featurePrefix = context['featurePrefix'];\n  var featureNS = context['featureNS'];\n  var typeName = ol.format.WFS.getTypeName_(featurePrefix, featureType);\n  node.setAttribute('typeName', typeName);\n  ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,\n      featureNS);\n  var fid = feature.getId();\n  if (fid !== undefined) {\n    ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.Feature} feature Feature.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  ol.asserts.assert(feature.getId() !== undefined, 27); // Features must have an id set\n  var featureType = context['featureType'];\n  var featurePrefix = context['featurePrefix'];\n  var featureNS = context['featureNS'];\n  var typeName = ol.format.WFS.getTypeName_(featurePrefix, featureType);\n  var geometryName = feature.getGeometryName();\n  node.setAttribute('typeName', typeName);\n  ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,\n      featureNS);\n  var fid = feature.getId();\n  if (fid !== undefined) {\n    var keys = feature.getKeys();\n    var values = [];\n    for (var i = 0, ii = keys.length; i < ii; i++) {\n      var value = feature.get(keys[i]);\n      if (value !== undefined) {\n        var name = keys[i];\n        if (value instanceof ol.geom.Geometry) {\n          name = geometryName;\n        }\n        values.push({name: name, value: value});\n      }\n    }\n    ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ (\n      {'gmlVersion': context['gmlVersion'], node: node,\n        'hasZ': context['hasZ'], 'srsName': context['srsName']}),\n    ol.format.WFS.TRANSACTION_SERIALIZERS_,\n    ol.xml.makeSimpleNodeFactory('Property'), values,\n    objectStack);\n    ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Object} pair Property name and value.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeProperty_ = function(node, pair, objectStack) {\n  var name = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Name');\n  var context = objectStack[objectStack.length - 1];\n  var gmlVersion = context['gmlVersion'];\n  node.appendChild(name);\n  ol.format.XSD.writeStringTextNode(name, pair.name);\n  if (pair.value !== undefined && pair.value !== null) {\n    var value = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Value');\n    node.appendChild(value);\n    if (pair.value instanceof ol.geom.Geometry) {\n      if (gmlVersion === 2) {\n        ol.format.GML2.prototype.writeGeometryElement(value,\n            pair.value, objectStack);\n      } else {\n        ol.format.GML3.prototype.writeGeometryElement(value,\n            pair.value, objectStack);\n      }\n    } else {\n      ol.format.XSD.writeStringTextNode(value, pair.value);\n    }\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {{vendorId: string, safeToIgnore: boolean, value: string}}\n *     nativeElement The native element.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeNative_ = function(node, nativeElement, objectStack) {\n  if (nativeElement.vendorId) {\n    node.setAttribute('vendorId', nativeElement.vendorId);\n  }\n  if (nativeElement.safeToIgnore !== undefined) {\n    node.setAttribute('safeToIgnore', nativeElement.safeToIgnore);\n  }\n  if (nativeElement.value !== undefined) {\n    ol.format.XSD.writeStringTextNode(node, nativeElement.value);\n  }\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.WFS.TRANSACTION_SERIALIZERS_ = {\n  'http://www.opengis.net/wfs': {\n    'Insert': ol.xml.makeChildAppender(ol.format.WFS.writeFeature_),\n    'Update': ol.xml.makeChildAppender(ol.format.WFS.writeUpdate_),\n    'Delete': ol.xml.makeChildAppender(ol.format.WFS.writeDelete_),\n    'Property': ol.xml.makeChildAppender(ol.format.WFS.writeProperty_),\n    'Native': ol.xml.makeChildAppender(ol.format.WFS.writeNative_)\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {string} featureType Feature type.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {\n  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var featurePrefix = context['featurePrefix'];\n  var featureNS = context['featureNS'];\n  var propertyNames = context['propertyNames'];\n  var srsName = context['srsName'];\n  var typeName;\n  // If feature prefix is not defined, we must not use the default prefix.\n  if (featurePrefix) {\n    typeName = ol.format.WFS.getTypeName_(featurePrefix, featureType);\n  } else {\n    typeName = featureType;\n  }\n  node.setAttribute('typeName', typeName);\n  if (srsName) {\n    node.setAttribute('srsName', srsName);\n  }\n  if (featureNS) {\n    ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,\n        featureNS);\n  }\n  var item = /** @type {ol.XmlNodeStackItem} */ (ol.obj.assign({}, context));\n  item.node = node;\n  ol.xml.pushSerializeAndPop(item,\n      ol.format.WFS.QUERY_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory('PropertyName'), propertyNames,\n      objectStack);\n  var filter = context['filter'];\n  if (filter) {\n    var child = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'Filter');\n    node.appendChild(child);\n    ol.format.WFS.writeFilterCondition_(child, filter, objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Filter} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeFilterCondition_ = function(node, filter, objectStack) {\n  /** @type {ol.XmlNodeStackItem} */\n  var item = {node: node};\n  ol.xml.pushSerializeAndPop(item,\n      ol.format.WFS.GETFEATURE_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory(filter.getTagName()),\n      [filter], objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Bbox} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeBboxFilter_ = function(node, filter, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  context['srsName'] = filter.srsName;\n\n  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);\n  ol.format.GML3.prototype.writeGeometryElement(node, filter.extent, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Contains} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeContainsFilter_ = function(node, filter, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  context['srsName'] = filter.srsName;\n\n  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);\n  ol.format.GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Intersects} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeIntersectsFilter_ = function(node, filter, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  context['srsName'] = filter.srsName;\n\n  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);\n  ol.format.GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Within} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeWithinFilter_ = function(node, filter, objectStack) {\n  var context = objectStack[objectStack.length - 1];\n  context['srsName'] = filter.srsName;\n\n  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);\n  ol.format.GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.During} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeDuringFilter_ = function(node, filter, objectStack) {\n\n  var valueReference = ol.xml.createElementNS(ol.format.WFS.FESNS, 'ValueReference');\n  ol.format.XSD.writeStringTextNode(valueReference, filter.propertyName);\n  node.appendChild(valueReference);\n\n  var timePeriod = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'TimePeriod');\n\n  node.appendChild(timePeriod);\n\n  var begin = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'begin');\n  timePeriod.appendChild(begin);\n  ol.format.WFS.writeTimeInstant_(begin, filter.begin);\n\n  var end = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'end');\n  timePeriod.appendChild(end);\n  ol.format.WFS.writeTimeInstant_(end, filter.end);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.LogicalNary} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeLogicalFilter_ = function(node, filter, objectStack) {\n  /** @type {ol.XmlNodeStackItem} */\n  var item = {node: node};\n  var conditions = filter.conditions;\n  for (var i = 0, ii = conditions.length; i < ii; ++i) {\n    var condition = conditions[i];\n    ol.xml.pushSerializeAndPop(item,\n        ol.format.WFS.GETFEATURE_SERIALIZERS_,\n        ol.xml.makeSimpleNodeFactory(condition.getTagName()),\n        [condition], objectStack);\n  }\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.Not} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeNotFilter_ = function(node, filter, objectStack) {\n  /** @type {ol.XmlNodeStackItem} */\n  var item = {node: node};\n  var condition = filter.condition;\n  ol.xml.pushSerializeAndPop(item,\n      ol.format.WFS.GETFEATURE_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory(condition.getTagName()),\n      [condition], objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.ComparisonBinary} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeComparisonFilter_ = function(node, filter, objectStack) {\n  if (filter.matchCase !== undefined) {\n    node.setAttribute('matchCase', filter.matchCase.toString());\n  }\n  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);\n  ol.format.WFS.writeOgcLiteral_(node, '' + filter.expression);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.IsNull} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeIsNullFilter_ = function(node, filter, objectStack) {\n  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.IsBetween} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeIsBetweenFilter_ = function(node, filter, objectStack) {\n  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);\n\n  var lowerBoundary = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'LowerBoundary');\n  node.appendChild(lowerBoundary);\n  ol.format.WFS.writeOgcLiteral_(lowerBoundary, '' + filter.lowerBoundary);\n\n  var upperBoundary = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'UpperBoundary');\n  node.appendChild(upperBoundary);\n  ol.format.WFS.writeOgcLiteral_(upperBoundary, '' + filter.upperBoundary);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {ol.format.filter.IsLike} filter Filter.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeIsLikeFilter_ = function(node, filter, objectStack) {\n  node.setAttribute('wildCard', filter.wildCard);\n  node.setAttribute('singleChar', filter.singleChar);\n  node.setAttribute('escapeChar', filter.escapeChar);\n  if (filter.matchCase !== undefined) {\n    node.setAttribute('matchCase', filter.matchCase.toString());\n  }\n  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);\n  ol.format.WFS.writeOgcLiteral_(node, '' + filter.pattern);\n};\n\n\n/**\n * @param {string} tagName Tag name.\n * @param {Node} node Node.\n * @param {string} value Value.\n * @private\n */\nol.format.WFS.writeOgcExpression_ = function(tagName, node, value) {\n  var property = ol.xml.createElementNS(ol.format.WFS.OGCNS, tagName);\n  ol.format.XSD.writeStringTextNode(property, value);\n  node.appendChild(property);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {string} value PropertyName value.\n * @private\n */\nol.format.WFS.writeOgcPropertyName_ = function(node, value) {\n  ol.format.WFS.writeOgcExpression_('PropertyName', node, value);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {string} value PropertyName value.\n * @private\n */\nol.format.WFS.writeOgcLiteral_ = function(node, value) {\n  ol.format.WFS.writeOgcExpression_('Literal', node, value);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {string} time PropertyName value.\n * @private\n */\nol.format.WFS.writeTimeInstant_ = function(node, time) {\n  var timeInstant = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'TimeInstant');\n  node.appendChild(timeInstant);\n\n  var timePosition = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'timePosition');\n  timeInstant.appendChild(timePosition);\n  ol.format.XSD.writeStringTextNode(timePosition, time);\n};\n\n\n/**\n * @type {Object.<string, Object.<string, ol.XmlSerializer>>}\n * @private\n */\nol.format.WFS.GETFEATURE_SERIALIZERS_ = {\n  'http://www.opengis.net/wfs': {\n    'Query': ol.xml.makeChildAppender(ol.format.WFS.writeQuery_)\n  },\n  'http://www.opengis.net/ogc': {\n    'During': ol.xml.makeChildAppender(ol.format.WFS.writeDuringFilter_),\n    'And': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),\n    'Or': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),\n    'Not': ol.xml.makeChildAppender(ol.format.WFS.writeNotFilter_),\n    'BBOX': ol.xml.makeChildAppender(ol.format.WFS.writeBboxFilter_),\n    'Contains': ol.xml.makeChildAppender(ol.format.WFS.writeContainsFilter_),\n    'Intersects': ol.xml.makeChildAppender(ol.format.WFS.writeIntersectsFilter_),\n    'Within': ol.xml.makeChildAppender(ol.format.WFS.writeWithinFilter_),\n    'PropertyIsEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsNotEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsLessThan': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsLessThanOrEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsGreaterThan': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsGreaterThanOrEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),\n    'PropertyIsNull': ol.xml.makeChildAppender(ol.format.WFS.writeIsNullFilter_),\n    'PropertyIsBetween': ol.xml.makeChildAppender(ol.format.WFS.writeIsBetweenFilter_),\n    'PropertyIsLike': ol.xml.makeChildAppender(ol.format.WFS.writeIsLikeFilter_)\n  }\n};\n\n\n/**\n * Encode filter as WFS `Filter` and return the Node.\n *\n * @param {ol.format.filter.Filter} filter Filter.\n * @return {Node} Result.\n * @api\n */\nol.format.WFS.writeFilter = function(filter) {\n  var child = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'Filter');\n  ol.format.WFS.writeFilterCondition_(child, filter, []);\n  return child;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<string>} featureTypes Feature types.\n * @param {Array.<*>} objectStack Node stack.\n * @private\n */\nol.format.WFS.writeGetFeature_ = function(node, featureTypes, objectStack) {\n  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  var item = /** @type {ol.XmlNodeStackItem} */ (ol.obj.assign({}, context));\n  item.node = node;\n  ol.xml.pushSerializeAndPop(item,\n      ol.format.WFS.GETFEATURE_SERIALIZERS_,\n      ol.xml.makeSimpleNodeFactory('Query'), featureTypes,\n      objectStack);\n};\n\n\n/**\n * Encode format as WFS `GetFeature` and return the Node.\n *\n * @param {olx.format.WFSWriteGetFeatureOptions} options Options.\n * @return {Node} Result.\n * @api\n */\nol.format.WFS.prototype.writeGetFeature = function(options) {\n  var node = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'GetFeature');\n  node.setAttribute('service', 'WFS');\n  node.setAttribute('version', '1.1.0');\n  var filter;\n  if (options) {\n    if (options.handle) {\n      node.setAttribute('handle', options.handle);\n    }\n    if (options.outputFormat) {\n      node.setAttribute('outputFormat', options.outputFormat);\n    }\n    if (options.maxFeatures !== undefined) {\n      node.setAttribute('maxFeatures', options.maxFeatures);\n    }\n    if (options.resultType) {\n      node.setAttribute('resultType', options.resultType);\n    }\n    if (options.startIndex !== undefined) {\n      node.setAttribute('startIndex', options.startIndex);\n    }\n    if (options.count !== undefined) {\n      node.setAttribute('count', options.count);\n    }\n    filter = options.filter;\n    if (options.bbox) {\n      ol.asserts.assert(options.geometryName,\n          12); // `options.geometryName` must also be provided when `options.bbox` is set\n      var bbox = ol.format.filter.bbox(\n          /** @type {string} */ (options.geometryName), options.bbox, options.srsName);\n      if (filter) {\n        // if bbox and filter are both set, combine the two into a single filter\n        filter = ol.format.filter.and(filter, bbox);\n      } else {\n        filter = bbox;\n      }\n    }\n  }\n  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',\n      'xsi:schemaLocation', this.schemaLocation_);\n  /** @type {ol.XmlNodeStackItem} */\n  var context = {\n    node: node,\n    'srsName': options.srsName,\n    'featureNS': options.featureNS ? options.featureNS : this.featureNS_,\n    'featurePrefix': options.featurePrefix,\n    'geometryName': options.geometryName,\n    'filter': filter,\n    'propertyNames': options.propertyNames ? options.propertyNames : []\n  };\n  ol.asserts.assert(Array.isArray(options.featureTypes),\n      11); // `options.featureTypes` should be an Array\n  ol.format.WFS.writeGetFeature_(node, /** @type {!Array.<string>} */ (options.featureTypes), [context]);\n  return node;\n};\n\n\n/**\n * Encode format as WFS `Transaction` and return the Node.\n *\n * @param {Array.<ol.Feature>} inserts The features to insert.\n * @param {Array.<ol.Feature>} updates The features to update.\n * @param {Array.<ol.Feature>} deletes The features to delete.\n * @param {olx.format.WFSWriteTransactionOptions} options Write options.\n * @return {Node} Result.\n * @api\n */\nol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes,\n    options) {\n  var objectStack = [];\n  var node = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Transaction');\n  var version = options.version ?\n    options.version : ol.format.WFS.DEFAULT_VERSION;\n  var gmlVersion = version === '1.0.0' ? 2 : 3;\n  node.setAttribute('service', 'WFS');\n  node.setAttribute('version', version);\n  var baseObj;\n  /** @type {ol.XmlNodeStackItem} */\n  var obj;\n  if (options) {\n    baseObj = options.gmlOptions ? options.gmlOptions : {};\n    if (options.handle) {\n      node.setAttribute('handle', options.handle);\n    }\n  }\n  var schemaLocation = ol.format.WFS.SCHEMA_LOCATIONS[version];\n  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',\n      'xsi:schemaLocation', schemaLocation);\n  var featurePrefix = options.featurePrefix ? options.featurePrefix : ol.format.WFS.FEATURE_PREFIX;\n  if (inserts) {\n    obj = {node: node, 'featureNS': options.featureNS,\n      'featureType': options.featureType, 'featurePrefix': featurePrefix,\n      'gmlVersion': gmlVersion, 'hasZ': options.hasZ, 'srsName': options.srsName};\n    ol.obj.assign(obj, baseObj);\n    ol.xml.pushSerializeAndPop(obj,\n        ol.format.WFS.TRANSACTION_SERIALIZERS_,\n        ol.xml.makeSimpleNodeFactory('Insert'), inserts,\n        objectStack);\n  }\n  if (updates) {\n    obj = {node: node, 'featureNS': options.featureNS,\n      'featureType': options.featureType, 'featurePrefix': featurePrefix,\n      'gmlVersion': gmlVersion, 'hasZ': options.hasZ, 'srsName': options.srsName};\n    ol.obj.assign(obj, baseObj);\n    ol.xml.pushSerializeAndPop(obj,\n        ol.format.WFS.TRANSACTION_SERIALIZERS_,\n        ol.xml.makeSimpleNodeFactory('Update'), updates,\n        objectStack);\n  }\n  if (deletes) {\n    ol.xml.pushSerializeAndPop({node: node, 'featureNS': options.featureNS,\n      'featureType': options.featureType, 'featurePrefix': featurePrefix,\n      'gmlVersion': gmlVersion, 'srsName': options.srsName},\n    ol.format.WFS.TRANSACTION_SERIALIZERS_,\n    ol.xml.makeSimpleNodeFactory('Delete'), deletes,\n    objectStack);\n  }\n  if (options.nativeElements) {\n    ol.xml.pushSerializeAndPop({node: node, 'featureNS': options.featureNS,\n      'featureType': options.featureType, 'featurePrefix': featurePrefix,\n      'gmlVersion': gmlVersion, 'srsName': options.srsName},\n    ol.format.WFS.TRANSACTION_SERIALIZERS_,\n    ol.xml.makeSimpleNodeFactory('Native'), options.nativeElements,\n    objectStack);\n  }\n  return node;\n};\n\n\n/**\n * Read the projection from a WFS source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @return {?ol.proj.Projection} Projection.\n * @api\n */\nol.format.WFS.prototype.readProjection;\n\n\n/**\n * @inheritDoc\n */\nol.format.WFS.prototype.readProjectionFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readProjectionFromNode(n);\n    }\n  }\n  return null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.WFS.prototype.readProjectionFromNode = function(node) {\n  if (node.firstElementChild &&\n      node.firstElementChild.firstElementChild) {\n    node = node.firstElementChild.firstElementChild;\n    for (var n = node.firstElementChild; n; n = n.nextElementSibling) {\n      if (!(n.childNodes.length === 0 ||\n          (n.childNodes.length === 1 &&\n          n.firstChild.nodeType === 3))) {\n        var objectStack = [{}];\n        this.gmlFormat_.readGeometryElement(n, objectStack);\n        return ol.proj.get(objectStack.pop().srsName);\n      }\n    }\n  }\n\n  return null;\n};\n\ngoog.provide('ol.format.WKT');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.TextFeature');\ngoog.require('ol.geom.GeometryCollection');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.SimpleGeometry');\n\n\n/**\n * @classdesc\n * Geometry format for reading and writing data in the `WellKnownText` (WKT)\n * format.\n *\n * @constructor\n * @extends {ol.format.TextFeature}\n * @param {olx.format.WKTOptions=} opt_options Options.\n * @api\n */\nol.format.WKT = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.format.TextFeature.call(this);\n\n  /**\n   * Split GeometryCollection into multiple features.\n   * @type {boolean}\n   * @private\n   */\n  this.splitCollection_ = options.splitCollection !== undefined ?\n    options.splitCollection : false;\n\n};\nol.inherits(ol.format.WKT, ol.format.TextFeature);\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WKT.EMPTY = 'EMPTY';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WKT.Z = 'Z';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WKT.M = 'M';\n\n\n/**\n * @const\n * @type {string}\n */\nol.format.WKT.ZM = 'ZM';\n\n\n/**\n * @param {ol.geom.Point} geom Point geometry.\n * @return {string} Coordinates part of Point as WKT.\n * @private\n */\nol.format.WKT.encodePointGeometry_ = function(geom) {\n  var coordinates = geom.getCoordinates();\n  if (coordinates.length === 0) {\n    return '';\n  }\n  return coordinates.join(' ');\n};\n\n\n/**\n * @param {ol.geom.MultiPoint} geom MultiPoint geometry.\n * @return {string} Coordinates part of MultiPoint as WKT.\n * @private\n */\nol.format.WKT.encodeMultiPointGeometry_ = function(geom) {\n  var array = [];\n  var components = geom.getPoints();\n  for (var i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + ol.format.WKT.encodePointGeometry_(components[i]) + ')');\n  }\n  return array.join(',');\n};\n\n\n/**\n * @param {ol.geom.GeometryCollection} geom GeometryCollection geometry.\n * @return {string} Coordinates part of GeometryCollection as WKT.\n * @private\n */\nol.format.WKT.encodeGeometryCollectionGeometry_ = function(geom) {\n  var array = [];\n  var geoms = geom.getGeometries();\n  for (var i = 0, ii = geoms.length; i < ii; ++i) {\n    array.push(ol.format.WKT.encode_(geoms[i]));\n  }\n  return array.join(',');\n};\n\n\n/**\n * @param {ol.geom.LineString|ol.geom.LinearRing} geom LineString geometry.\n * @return {string} Coordinates part of LineString as WKT.\n * @private\n */\nol.format.WKT.encodeLineStringGeometry_ = function(geom) {\n  var coordinates = geom.getCoordinates();\n  var array = [];\n  for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n    array.push(coordinates[i].join(' '));\n  }\n  return array.join(',');\n};\n\n\n/**\n * @param {ol.geom.MultiLineString} geom MultiLineString geometry.\n * @return {string} Coordinates part of MultiLineString as WKT.\n * @private\n */\nol.format.WKT.encodeMultiLineStringGeometry_ = function(geom) {\n  var array = [];\n  var components = geom.getLineStrings();\n  for (var i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + ol.format.WKT.encodeLineStringGeometry_(\n        components[i]) + ')');\n  }\n  return array.join(',');\n};\n\n\n/**\n * @param {ol.geom.Polygon} geom Polygon geometry.\n * @return {string} Coordinates part of Polygon as WKT.\n * @private\n */\nol.format.WKT.encodePolygonGeometry_ = function(geom) {\n  var array = [];\n  var rings = geom.getLinearRings();\n  for (var i = 0, ii = rings.length; i < ii; ++i) {\n    array.push('(' + ol.format.WKT.encodeLineStringGeometry_(\n        rings[i]) + ')');\n  }\n  return array.join(',');\n};\n\n\n/**\n * @param {ol.geom.MultiPolygon} geom MultiPolygon geometry.\n * @return {string} Coordinates part of MultiPolygon as WKT.\n * @private\n */\nol.format.WKT.encodeMultiPolygonGeometry_ = function(geom) {\n  var array = [];\n  var components = geom.getPolygons();\n  for (var i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + ol.format.WKT.encodePolygonGeometry_(\n        components[i]) + ')');\n  }\n  return array.join(',');\n};\n\n/**\n * @param {ol.geom.SimpleGeometry} geom SimpleGeometry geometry.\n * @return {string} Potential dimensional information for WKT type.\n * @private\n */\nol.format.WKT.encodeGeometryLayout_ = function(geom) {\n  var layout = geom.getLayout();\n  var dimInfo = '';\n  if (layout === ol.geom.GeometryLayout.XYZ || layout === ol.geom.GeometryLayout.XYZM) {\n    dimInfo += ol.format.WKT.Z;\n  }\n  if (layout === ol.geom.GeometryLayout.XYM || layout === ol.geom.GeometryLayout.XYZM) {\n    dimInfo += ol.format.WKT.M;\n  }\n  return dimInfo;\n};\n\n\n/**\n * Encode a geometry as WKT.\n * @param {ol.geom.Geometry} geom The geometry to encode.\n * @return {string} WKT string for the geometry.\n * @private\n */\nol.format.WKT.encode_ = function(geom) {\n  var type = geom.getType();\n  var geometryEncoder = ol.format.WKT.GeometryEncoder_[type];\n  var enc = geometryEncoder(geom);\n  type = type.toUpperCase();\n  if (geom instanceof ol.geom.SimpleGeometry) {\n    var dimInfo = ol.format.WKT.encodeGeometryLayout_(geom);\n    if (dimInfo.length > 0) {\n      type += ' ' + dimInfo;\n    }\n  }\n  if (enc.length === 0) {\n    return type + ' ' + ol.format.WKT.EMPTY;\n  }\n  return type + '(' + enc + ')';\n};\n\n\n/**\n * @const\n * @type {Object.<string, function(ol.geom.Geometry): string>}\n * @private\n */\nol.format.WKT.GeometryEncoder_ = {\n  'Point': ol.format.WKT.encodePointGeometry_,\n  'LineString': ol.format.WKT.encodeLineStringGeometry_,\n  'Polygon': ol.format.WKT.encodePolygonGeometry_,\n  'MultiPoint': ol.format.WKT.encodeMultiPointGeometry_,\n  'MultiLineString': ol.format.WKT.encodeMultiLineStringGeometry_,\n  'MultiPolygon': ol.format.WKT.encodeMultiPolygonGeometry_,\n  'GeometryCollection': ol.format.WKT.encodeGeometryCollectionGeometry_\n};\n\n\n/**\n * Parse a WKT string.\n * @param {string} wkt WKT string.\n * @return {ol.geom.Geometry|undefined}\n *     The geometry created.\n * @private\n */\nol.format.WKT.prototype.parse_ = function(wkt) {\n  var lexer = new ol.format.WKT.Lexer(wkt);\n  var parser = new ol.format.WKT.Parser(lexer);\n  return parser.parse();\n};\n\n\n/**\n * Read a feature from a WKT source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.Feature} Feature.\n * @api\n */\nol.format.WKT.prototype.readFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.readFeatureFromText = function(text, opt_options) {\n  var geom = this.readGeometryFromText(text, opt_options);\n  if (geom) {\n    var feature = new ol.Feature();\n    feature.setGeometry(geom);\n    return feature;\n  }\n  return null;\n};\n\n\n/**\n * Read all features from a WKT source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.WKT.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.readFeaturesFromText = function(text, opt_options) {\n  var geometries = [];\n  var geometry = this.readGeometryFromText(text, opt_options);\n  if (this.splitCollection_ &&\n      geometry.getType() == ol.geom.GeometryType.GEOMETRY_COLLECTION) {\n    geometries = (/** @type {ol.geom.GeometryCollection} */ (geometry))\n        .getGeometriesArray();\n  } else {\n    geometries = [geometry];\n  }\n  var feature, features = [];\n  for (var i = 0, ii = geometries.length; i < ii; ++i) {\n    feature = new ol.Feature();\n    feature.setGeometry(geometries[i]);\n    features.push(feature);\n  }\n  return features;\n};\n\n\n/**\n * Read a single geometry from a WKT source.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Read options.\n * @return {ol.geom.Geometry} Geometry.\n * @api\n */\nol.format.WKT.prototype.readGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.readGeometryFromText = function(text, opt_options) {\n  var geometry = this.parse_(text);\n  if (geometry) {\n    return /** @type {ol.geom.Geometry} */ (\n      ol.format.Feature.transformWithOptions(geometry, false, opt_options));\n  } else {\n    return null;\n  }\n};\n\n\n/**\n * Encode a feature as a WKT string.\n *\n * @function\n * @param {ol.Feature} feature Feature.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} WKT string.\n * @api\n */\nol.format.WKT.prototype.writeFeature;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.writeFeatureText = function(feature, opt_options) {\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    return this.writeGeometryText(geometry, opt_options);\n  }\n  return '';\n};\n\n\n/**\n * Encode an array of features as a WKT string.\n *\n * @function\n * @param {Array.<ol.Feature>} features Features.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} WKT string.\n * @api\n */\nol.format.WKT.prototype.writeFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.writeFeaturesText = function(features, opt_options) {\n  if (features.length == 1) {\n    return this.writeFeatureText(features[0], opt_options);\n  }\n  var geometries = [];\n  for (var i = 0, ii = features.length; i < ii; ++i) {\n    geometries.push(features[i].getGeometry());\n  }\n  var collection = new ol.geom.GeometryCollection(geometries);\n  return this.writeGeometryText(collection, opt_options);\n};\n\n\n/**\n * Write a single geometry as a WKT string.\n *\n * @function\n * @param {ol.geom.Geometry} geometry Geometry.\n * @param {olx.format.WriteOptions=} opt_options Write options.\n * @return {string} WKT string.\n * @api\n */\nol.format.WKT.prototype.writeGeometry;\n\n\n/**\n * @inheritDoc\n */\nol.format.WKT.prototype.writeGeometryText = function(geometry, opt_options) {\n  return ol.format.WKT.encode_(/** @type {ol.geom.Geometry} */ (\n    ol.format.Feature.transformWithOptions(geometry, true, opt_options)));\n};\n\n\n/**\n * @const\n * @enum {number}\n * @private\n */\nol.format.WKT.TokenType_ = {\n  TEXT: 1,\n  LEFT_PAREN: 2,\n  RIGHT_PAREN: 3,\n  NUMBER: 4,\n  COMMA: 5,\n  EOF: 6\n};\n\n\n/**\n * Class to tokenize a WKT string.\n * @param {string} wkt WKT string.\n * @constructor\n * @protected\n */\nol.format.WKT.Lexer = function(wkt) {\n\n  /**\n   * @type {string}\n   */\n  this.wkt = wkt;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.index_ = -1;\n};\n\n\n/**\n * @param {string} c Character.\n * @return {boolean} Whether the character is alphabetic.\n * @private\n */\nol.format.WKT.Lexer.prototype.isAlpha_ = function(c) {\n  return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';\n};\n\n\n/**\n * @param {string} c Character.\n * @param {boolean=} opt_decimal Whether the string number\n *     contains a dot, i.e. is a decimal number.\n * @return {boolean} Whether the character is numeric.\n * @private\n */\nol.format.WKT.Lexer.prototype.isNumeric_ = function(c, opt_decimal) {\n  var decimal = opt_decimal !== undefined ? opt_decimal : false;\n  return c >= '0' && c <= '9' || c == '.' && !decimal;\n};\n\n\n/**\n * @param {string} c Character.\n * @return {boolean} Whether the character is whitespace.\n * @private\n */\nol.format.WKT.Lexer.prototype.isWhiteSpace_ = function(c) {\n  return c == ' ' || c == '\\t' || c == '\\r' || c == '\\n';\n};\n\n\n/**\n * @return {string} Next string character.\n * @private\n */\nol.format.WKT.Lexer.prototype.nextChar_ = function() {\n  return this.wkt.charAt(++this.index_);\n};\n\n\n/**\n * Fetch and return the next token.\n * @return {!ol.WKTToken} Next string token.\n */\nol.format.WKT.Lexer.prototype.nextToken = function() {\n  var c = this.nextChar_();\n  var token = {position: this.index_, value: c};\n\n  if (c == '(') {\n    token.type = ol.format.WKT.TokenType_.LEFT_PAREN;\n  } else if (c == ',') {\n    token.type = ol.format.WKT.TokenType_.COMMA;\n  } else if (c == ')') {\n    token.type = ol.format.WKT.TokenType_.RIGHT_PAREN;\n  } else if (this.isNumeric_(c) || c == '-') {\n    token.type = ol.format.WKT.TokenType_.NUMBER;\n    token.value = this.readNumber_();\n  } else if (this.isAlpha_(c)) {\n    token.type = ol.format.WKT.TokenType_.TEXT;\n    token.value = this.readText_();\n  } else if (this.isWhiteSpace_(c)) {\n    return this.nextToken();\n  } else if (c === '') {\n    token.type = ol.format.WKT.TokenType_.EOF;\n  } else {\n    throw new Error('Unexpected character: ' + c);\n  }\n\n  return token;\n};\n\n\n/**\n * @return {number} Numeric token value.\n * @private\n */\nol.format.WKT.Lexer.prototype.readNumber_ = function() {\n  var c, index = this.index_;\n  var decimal = false;\n  var scientificNotation = false;\n  do {\n    if (c == '.') {\n      decimal = true;\n    } else if (c == 'e' || c == 'E') {\n      scientificNotation = true;\n    }\n    c = this.nextChar_();\n  } while (\n    this.isNumeric_(c, decimal) ||\n      // if we haven't detected a scientific number before, 'e' or 'E'\n      // hint that we should continue to read\n      !scientificNotation && (c == 'e' || c == 'E') ||\n      // once we know that we have a scientific number, both '-' and '+'\n      // are allowed\n      scientificNotation && (c == '-' || c == '+')\n  );\n  return parseFloat(this.wkt.substring(index, this.index_--));\n};\n\n\n/**\n * @return {string} String token value.\n * @private\n */\nol.format.WKT.Lexer.prototype.readText_ = function() {\n  var c, index = this.index_;\n  do {\n    c = this.nextChar_();\n  } while (this.isAlpha_(c));\n  return this.wkt.substring(index, this.index_--).toUpperCase();\n};\n\n\n/**\n * Class to parse the tokens from the WKT string.\n * @param {ol.format.WKT.Lexer} lexer The lexer.\n * @constructor\n * @protected\n */\nol.format.WKT.Parser = function(lexer) {\n\n  /**\n   * @type {ol.format.WKT.Lexer}\n   * @private\n   */\n  this.lexer_ = lexer;\n\n  /**\n   * @type {ol.WKTToken}\n   * @private\n   */\n  this.token_;\n\n  /**\n   * @type {ol.geom.GeometryLayout}\n   * @private\n   */\n  this.layout_ = ol.geom.GeometryLayout.XY;\n};\n\n\n/**\n * Fetch the next token form the lexer and replace the active token.\n * @private\n */\nol.format.WKT.Parser.prototype.consume_ = function() {\n  this.token_ = this.lexer_.nextToken();\n};\n\n/**\n * Tests if the given type matches the type of the current token.\n * @param {ol.format.WKT.TokenType_} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\nol.format.WKT.Parser.prototype.isTokenType = function(type) {\n  var isMatch = this.token_.type == type;\n  return isMatch;\n};\n\n\n/**\n * If the given type matches the current token, consume it.\n * @param {ol.format.WKT.TokenType_} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\nol.format.WKT.Parser.prototype.match = function(type) {\n  var isMatch = this.isTokenType(type);\n  if (isMatch) {\n    this.consume_();\n  }\n  return isMatch;\n};\n\n\n/**\n * Try to parse the tokens provided by the lexer.\n * @return {ol.geom.Geometry} The geometry.\n */\nol.format.WKT.Parser.prototype.parse = function() {\n  this.consume_();\n  var geometry = this.parseGeometry_();\n  return geometry;\n};\n\n\n/**\n * Try to parse the dimensional info.\n * @return {ol.geom.GeometryLayout} The layout.\n * @private\n */\nol.format.WKT.Parser.prototype.parseGeometryLayout_ = function() {\n  var layout = ol.geom.GeometryLayout.XY;\n  var dimToken = this.token_;\n  if (this.isTokenType(ol.format.WKT.TokenType_.TEXT)) {\n    var dimInfo = dimToken.value;\n    if (dimInfo === ol.format.WKT.Z) {\n      layout = ol.geom.GeometryLayout.XYZ;\n    } else if (dimInfo === ol.format.WKT.M) {\n      layout = ol.geom.GeometryLayout.XYM;\n    } else if (dimInfo === ol.format.WKT.ZM) {\n      layout = ol.geom.GeometryLayout.XYZM;\n    }\n    if (layout !== ol.geom.GeometryLayout.XY) {\n      this.consume_();\n    }\n  }\n  return layout;\n};\n\n\n/**\n * @return {!ol.geom.Geometry} The geometry.\n * @private\n */\nol.format.WKT.Parser.prototype.parseGeometry_ = function() {\n  var token = this.token_;\n  if (this.match(ol.format.WKT.TokenType_.TEXT)) {\n    var geomType = token.value;\n    this.layout_ = this.parseGeometryLayout_();\n    if (geomType == ol.geom.GeometryType.GEOMETRY_COLLECTION.toUpperCase()) {\n      var geometries = this.parseGeometryCollectionText_();\n      return new ol.geom.GeometryCollection(geometries);\n    } else {\n      var parser = ol.format.WKT.Parser.GeometryParser_[geomType];\n      var ctor = ol.format.WKT.Parser.GeometryConstructor_[geomType];\n      if (!parser || !ctor) {\n        throw new Error('Invalid geometry type: ' + geomType);\n      }\n      var coordinates = parser.call(this);\n      return new ctor(coordinates, this.layout_);\n    }\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<ol.geom.Geometry>} A collection of geometries.\n * @private\n */\nol.format.WKT.Parser.prototype.parseGeometryCollectionText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var geometries = [];\n    do {\n      geometries.push(this.parseGeometry_());\n    } while (this.match(ol.format.WKT.TokenType_.COMMA));\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return geometries;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {Array.<number>} All values in a point.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePointText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates = this.parsePoint_();\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return null;\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} All points in a linestring.\n * @private\n */\nol.format.WKT.Parser.prototype.parseLineStringText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates = this.parsePointList_();\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} All points in a polygon.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePolygonText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates = this.parseLineStringTextList_();\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} All points in a multipoint.\n * @private\n */\nol.format.WKT.Parser.prototype.parseMultiPointText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates;\n    if (this.token_.type == ol.format.WKT.TokenType_.LEFT_PAREN) {\n      coordinates = this.parsePointTextList_();\n    } else {\n      coordinates = this.parsePointList_();\n    }\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} All linestring points\n *                                        in a multilinestring.\n * @private\n */\nol.format.WKT.Parser.prototype.parseMultiLineStringText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates = this.parseLineStringTextList_();\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} All polygon points in a multipolygon.\n * @private\n */\nol.format.WKT.Parser.prototype.parseMultiPolygonText_ = function() {\n  if (this.match(ol.format.WKT.TokenType_.LEFT_PAREN)) {\n    var coordinates = this.parsePolygonTextList_();\n    if (this.match(ol.format.WKT.TokenType_.RIGHT_PAREN)) {\n      return coordinates;\n    }\n  } else if (this.isEmptyGeometry_()) {\n    return [];\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<number>} A point.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePoint_ = function() {\n  var coordinates = [];\n  var dimensions = this.layout_.length;\n  for (var i = 0; i < dimensions; ++i) {\n    var token = this.token_;\n    if (this.match(ol.format.WKT.TokenType_.NUMBER)) {\n      coordinates.push(token.value);\n    } else {\n      break;\n    }\n  }\n  if (coordinates.length == dimensions) {\n    return coordinates;\n  }\n  throw new Error(this.formatErrorMessage_());\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} An array of points.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePointList_ = function() {\n  var coordinates = [this.parsePoint_()];\n  while (this.match(ol.format.WKT.TokenType_.COMMA)) {\n    coordinates.push(this.parsePoint_());\n  }\n  return coordinates;\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} An array of points.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePointTextList_ = function() {\n  var coordinates = [this.parsePointText_()];\n  while (this.match(ol.format.WKT.TokenType_.COMMA)) {\n    coordinates.push(this.parsePointText_());\n  }\n  return coordinates;\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} An array of points.\n * @private\n */\nol.format.WKT.Parser.prototype.parseLineStringTextList_ = function() {\n  var coordinates = [this.parseLineStringText_()];\n  while (this.match(ol.format.WKT.TokenType_.COMMA)) {\n    coordinates.push(this.parseLineStringText_());\n  }\n  return coordinates;\n};\n\n\n/**\n * @return {!Array.<!Array.<number>>} An array of points.\n * @private\n */\nol.format.WKT.Parser.prototype.parsePolygonTextList_ = function() {\n  var coordinates = [this.parsePolygonText_()];\n  while (this.match(ol.format.WKT.TokenType_.COMMA)) {\n    coordinates.push(this.parsePolygonText_());\n  }\n  return coordinates;\n};\n\n\n/**\n * @return {boolean} Whether the token implies an empty geometry.\n * @private\n */\nol.format.WKT.Parser.prototype.isEmptyGeometry_ = function() {\n  var isEmpty = this.isTokenType(ol.format.WKT.TokenType_.TEXT) &&\n      this.token_.value == ol.format.WKT.EMPTY;\n  if (isEmpty) {\n    this.consume_();\n  }\n  return isEmpty;\n};\n\n\n/**\n * Create an error message for an unexpected token error.\n * @return {string} Error message.\n * @private\n */\nol.format.WKT.Parser.prototype.formatErrorMessage_ = function() {\n  return 'Unexpected `' + this.token_.value + '` at position ' +\n      this.token_.position + ' in `' + this.lexer_.wkt + '`';\n};\n\n\n/**\n * @enum {function (new:ol.geom.Geometry, Array, ol.geom.GeometryLayout)}\n * @private\n */\nol.format.WKT.Parser.GeometryConstructor_ = {\n  'POINT': ol.geom.Point,\n  'LINESTRING': ol.geom.LineString,\n  'POLYGON': ol.geom.Polygon,\n  'MULTIPOINT': ol.geom.MultiPoint,\n  'MULTILINESTRING': ol.geom.MultiLineString,\n  'MULTIPOLYGON': ol.geom.MultiPolygon\n};\n\n\n/**\n * @enum {(function(): Array)}\n * @private\n */\nol.format.WKT.Parser.GeometryParser_ = {\n  'POINT': ol.format.WKT.Parser.prototype.parsePointText_,\n  'LINESTRING': ol.format.WKT.Parser.prototype.parseLineStringText_,\n  'POLYGON': ol.format.WKT.Parser.prototype.parsePolygonText_,\n  'MULTIPOINT': ol.format.WKT.Parser.prototype.parseMultiPointText_,\n  'MULTILINESTRING': ol.format.WKT.Parser.prototype.parseMultiLineStringText_,\n  'MULTIPOLYGON': ol.format.WKT.Parser.prototype.parseMultiPolygonText_\n};\n\ngoog.provide('ol.format.WMSCapabilities');\n\ngoog.require('ol');\ngoog.require('ol.format.XLink');\ngoog.require('ol.format.XML');\ngoog.require('ol.format.XSD');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Format for reading WMS capabilities data\n *\n * @constructor\n * @extends {ol.format.XML}\n * @api\n */\nol.format.WMSCapabilities = function() {\n\n  ol.format.XML.call(this);\n\n  /**\n   * @type {string|undefined}\n   */\n  this.version = undefined;\n};\nol.inherits(ol.format.WMSCapabilities, ol.format.XML);\n\n\n/**\n * Read a WMS capabilities document.\n *\n * @function\n * @param {Document|Node|string} source The XML source.\n * @return {Object} An object representing the WMS capabilities.\n * @api\n */\nol.format.WMSCapabilities.prototype.read;\n\n\n/**\n * @inheritDoc\n */\nol.format.WMSCapabilities.prototype.readFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readFromNode(n);\n    }\n  }\n  return null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.WMSCapabilities.prototype.readFromNode = function(node) {\n  this.version = node.getAttribute('version').trim();\n  var wmsCapabilityObject = ol.xml.pushParseAndPop({\n    'version': this.version\n  }, ol.format.WMSCapabilities.PARSERS_, node, []);\n  return wmsCapabilityObject ? wmsCapabilityObject : null;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nol.format.WMSCapabilities.readAttribution_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object} Bounding box object.\n */\nol.format.WMSCapabilities.readBoundingBox_ = function(node, objectStack) {\n  var extent = [\n    ol.format.XSD.readDecimalString(node.getAttribute('minx')),\n    ol.format.XSD.readDecimalString(node.getAttribute('miny')),\n    ol.format.XSD.readDecimalString(node.getAttribute('maxx')),\n    ol.format.XSD.readDecimalString(node.getAttribute('maxy'))\n  ];\n\n  var resolutions = [\n    ol.format.XSD.readDecimalString(node.getAttribute('resx')),\n    ol.format.XSD.readDecimalString(node.getAttribute('resy'))\n  ];\n\n  return {\n    'crs': node.getAttribute('CRS'),\n    'extent': extent,\n    'res': resolutions\n  };\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {ol.Extent|undefined} Bounding box object.\n */\nol.format.WMSCapabilities.readEXGeographicBoundingBox_ = function(node, objectStack) {\n  var geographicBoundingBox = ol.xml.pushParseAndPop(\n      {},\n      ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_,\n      node, objectStack);\n  if (!geographicBoundingBox) {\n    return undefined;\n  }\n  var westBoundLongitude = /** @type {number|undefined} */\n        (geographicBoundingBox['westBoundLongitude']);\n  var southBoundLatitude = /** @type {number|undefined} */\n        (geographicBoundingBox['southBoundLatitude']);\n  var eastBoundLongitude = /** @type {number|undefined} */\n        (geographicBoundingBox['eastBoundLongitude']);\n  var northBoundLatitude = /** @type {number|undefined} */\n        (geographicBoundingBox['northBoundLatitude']);\n  if (westBoundLongitude === undefined || southBoundLatitude === undefined ||\n        eastBoundLongitude === undefined || northBoundLatitude === undefined) {\n    return undefined;\n  }\n  return [\n    westBoundLongitude, southBoundLatitude,\n    eastBoundLongitude, northBoundLatitude\n  ];\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Capability object.\n */\nol.format.WMSCapabilities.readCapability_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.CAPABILITY_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Service object.\n */\nol.format.WMSCapabilities.readService_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.SERVICE_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Contact information object.\n */\nol.format.WMSCapabilities.readContactInformation_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_,\n      node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Contact person object.\n */\nol.format.WMSCapabilities.readContactPersonPrimary_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_,\n      node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Contact address object.\n */\nol.format.WMSCapabilities.readContactAddress_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_,\n      node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Array.<string>|undefined} Format array.\n */\nol.format.WMSCapabilities.readException_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      [], ol.format.WMSCapabilities.EXCEPTION_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @private\n * @return {Object|undefined} Layer object.\n */\nol.format.WMSCapabilities.readCapabilityLayer_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Layer object.\n */\nol.format.WMSCapabilities.readLayer_ = function(node, objectStack) {\n  var parentLayerObject = /**  @type {Object.<string,*>} */\n        (objectStack[objectStack.length - 1]);\n\n  var layerObject = ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack);\n\n  if (!layerObject) {\n    return undefined;\n  }\n  var queryable =\n        ol.format.XSD.readBooleanString(node.getAttribute('queryable'));\n  if (queryable === undefined) {\n    queryable = parentLayerObject['queryable'];\n  }\n  layerObject['queryable'] = queryable !== undefined ? queryable : false;\n\n  var cascaded = ol.format.XSD.readNonNegativeIntegerString(\n      node.getAttribute('cascaded'));\n  if (cascaded === undefined) {\n    cascaded = parentLayerObject['cascaded'];\n  }\n  layerObject['cascaded'] = cascaded;\n\n  var opaque = ol.format.XSD.readBooleanString(node.getAttribute('opaque'));\n  if (opaque === undefined) {\n    opaque = parentLayerObject['opaque'];\n  }\n  layerObject['opaque'] = opaque !== undefined ? opaque : false;\n\n  var noSubsets =\n        ol.format.XSD.readBooleanString(node.getAttribute('noSubsets'));\n  if (noSubsets === undefined) {\n    noSubsets = parentLayerObject['noSubsets'];\n  }\n  layerObject['noSubsets'] = noSubsets !== undefined ? noSubsets : false;\n\n  var fixedWidth =\n        ol.format.XSD.readDecimalString(node.getAttribute('fixedWidth'));\n  if (!fixedWidth) {\n    fixedWidth = parentLayerObject['fixedWidth'];\n  }\n  layerObject['fixedWidth'] = fixedWidth;\n\n  var fixedHeight =\n        ol.format.XSD.readDecimalString(node.getAttribute('fixedHeight'));\n  if (!fixedHeight) {\n    fixedHeight = parentLayerObject['fixedHeight'];\n  }\n  layerObject['fixedHeight'] = fixedHeight;\n\n  // See 7.2.4.8\n  var addKeys = ['Style', 'CRS', 'AuthorityURL'];\n  addKeys.forEach(function(key) {\n    if (key in parentLayerObject) {\n      var childValue = layerObject[key] || [];\n      layerObject[key] = childValue.concat(parentLayerObject[key]);\n    }\n  });\n\n  var replaceKeys = ['EX_GeographicBoundingBox', 'BoundingBox', 'Dimension',\n    'Attribution', 'MinScaleDenominator', 'MaxScaleDenominator'];\n  replaceKeys.forEach(function(key) {\n    if (!(key in layerObject)) {\n      var parentValue = parentLayerObject[key];\n      layerObject[key] = parentValue;\n    }\n  });\n\n  return layerObject;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object} Dimension object.\n */\nol.format.WMSCapabilities.readDimension_ = function(node, objectStack) {\n  var dimensionObject = {\n    'name': node.getAttribute('name'),\n    'units': node.getAttribute('units'),\n    'unitSymbol': node.getAttribute('unitSymbol'),\n    'default': node.getAttribute('default'),\n    'multipleValues': ol.format.XSD.readBooleanString(\n        node.getAttribute('multipleValues')),\n    'nearestValue': ol.format.XSD.readBooleanString(\n        node.getAttribute('nearestValue')),\n    'current': ol.format.XSD.readBooleanString(node.getAttribute('current')),\n    'values': ol.format.XSD.readString(node)\n  };\n  return dimensionObject;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Online resource object.\n */\nol.format.WMSCapabilities.readFormatOnlineresource_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_,\n      node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Request object.\n */\nol.format.WMSCapabilities.readRequest_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.REQUEST_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} DCP type object.\n */\nol.format.WMSCapabilities.readDCPType_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.DCPTYPE_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} HTTP object.\n */\nol.format.WMSCapabilities.readHTTP_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.HTTP_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Operation type object.\n */\nol.format.WMSCapabilities.readOperationType_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Online resource object.\n */\nol.format.WMSCapabilities.readSizedFormatOnlineresource_ = function(node, objectStack) {\n  var formatOnlineresource =\n        ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);\n  if (formatOnlineresource) {\n    var size = [\n      ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('width')),\n      ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('height'))\n    ];\n    formatOnlineresource['size'] = size;\n    return formatOnlineresource;\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Authority URL object.\n */\nol.format.WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {\n  var authorityObject =\n        ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);\n  if (authorityObject) {\n    authorityObject['name'] = node.getAttribute('name');\n    return authorityObject;\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Metadata URL object.\n */\nol.format.WMSCapabilities.readMetadataURL_ = function(node, objectStack) {\n  var metadataObject =\n        ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);\n  if (metadataObject) {\n    metadataObject['type'] = node.getAttribute('type');\n    return metadataObject;\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nol.format.WMSCapabilities.readStyle_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      {}, ol.format.WMSCapabilities.STYLE_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Array.<string>|undefined} Keyword list.\n */\nol.format.WMSCapabilities.readKeywordList_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop(\n      [], ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.format.WMSCapabilities.NAMESPACE_URIS_ = [\n  null,\n  'http://www.opengis.net/wms'\n];\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Service': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readService_),\n      'Capability': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readCapability_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Request': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readRequest_),\n      'Exception': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readException_),\n      'Layer': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readCapabilityLayer_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'KeywordList': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readKeywordList_),\n      'OnlineResource': ol.xml.makeObjectPropertySetter(\n          ol.format.XLink.readHref),\n      'ContactInformation': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readContactInformation_),\n      'Fees': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'AccessConstraints': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'LayerLimit': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MaxWidth': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MaxHeight': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'ContactPersonPrimary': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readContactPersonPrimary_),\n      'ContactPosition': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'ContactAddress': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readContactAddress_),\n      'ContactVoiceTelephone': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'ContactFacsimileTelephone': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'ContactElectronicMailAddress': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'ContactPerson': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'ContactOrganization': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'AddressType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'StateOrProvince': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'PostCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Country': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Format': ol.xml.makeArrayPusher(ol.format.XSD.readString)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'KeywordList': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readKeywordList_),\n      'CRS': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),\n      'EX_GeographicBoundingBox': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readEXGeographicBoundingBox_),\n      'BoundingBox': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readBoundingBox_),\n      'Dimension': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readDimension_),\n      'Attribution': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readAttribution_),\n      'AuthorityURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readAuthorityURL_),\n      'Identifier': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),\n      'MetadataURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readMetadataURL_),\n      'DataURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readFormatOnlineresource_),\n      'FeatureListURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readFormatOnlineresource_),\n      'Style': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readStyle_),\n      'MinScaleDenominator': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'MaxScaleDenominator': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'Layer': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readLayer_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'OnlineResource': ol.xml.makeObjectPropertySetter(\n          ol.format.XLink.readHref),\n      'LogoURL': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readSizedFormatOnlineresource_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ =\n    ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'westBoundLongitude': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'eastBoundLongitude': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'southBoundLatitude': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'northBoundLatitude': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'GetCapabilities': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readOperationType_),\n      'GetMap': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readOperationType_),\n      'GetFeatureInfo': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readOperationType_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Format': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),\n      'DCPType': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readDCPType_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'HTTP': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readHTTP_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Get': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readFormatOnlineresource_),\n      'Post': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readFormatOnlineresource_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'LegendURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMSCapabilities.readSizedFormatOnlineresource_),\n      'StyleSheetURL': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readFormatOnlineresource_),\n      'StyleURL': ol.xml.makeObjectPropertySetter(\n          ol.format.WMSCapabilities.readFormatOnlineresource_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ =\n    ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Format': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),\n      'OnlineResource': ol.xml.makeObjectPropertySetter(\n          ol.format.XLink.readHref)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMSCapabilities.KEYWORDLIST_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMSCapabilities.NAMESPACE_URIS_, {\n      'Keyword': ol.xml.makeArrayPusher(ol.format.XSD.readString)\n    });\n\ngoog.provide('ol.format.WMSGetFeatureInfo');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.format.GML2');\ngoog.require('ol.format.XMLFeature');\ngoog.require('ol.obj');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Format for reading WMSGetFeatureInfo format. It uses\n * {@link ol.format.GML2} to read features.\n *\n * @constructor\n * @extends {ol.format.XMLFeature}\n * @param {olx.format.WMSGetFeatureInfoOptions=} opt_options Options.\n * @api\n */\nol.format.WMSGetFeatureInfo = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.featureNS_ = 'http://mapserver.gis.umn.edu/mapserver';\n\n\n  /**\n   * @private\n   * @type {ol.format.GML2}\n   */\n  this.gmlFormat_ = new ol.format.GML2();\n\n\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.layers_ = options.layers ? options.layers : null;\n\n  ol.format.XMLFeature.call(this);\n};\nol.inherits(ol.format.WMSGetFeatureInfo, ol.format.XMLFeature);\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.WMSGetFeatureInfo.featureIdentifier_ = '_feature';\n\n\n/**\n * @const\n * @type {string}\n * @private\n */\nol.format.WMSGetFeatureInfo.layerIdentifier_ = '_layer';\n\n\n/**\n * @return {Array.<string>} layers\n */\nol.format.WMSGetFeatureInfo.prototype.getLayers = function() {\n  return this.layers_;\n};\n\n\n/**\n * @param {Array.<string>} layers Layers to parse.\n */\nol.format.WMSGetFeatureInfo.prototype.setLayers = function(layers) {\n  this.layers_ = layers;\n};\n\n\n/**\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Array.<ol.Feature>} Features.\n * @private\n */\nol.format.WMSGetFeatureInfo.prototype.readFeatures_ = function(node, objectStack) {\n  node.setAttribute('namespaceURI', this.featureNS_);\n  var localName = node.localName;\n  /** @type {Array.<ol.Feature>} */\n  var features = [];\n  if (node.childNodes.length === 0) {\n    return features;\n  }\n  if (localName == 'msGMLOutput') {\n    for (var i = 0, ii = node.childNodes.length; i < ii; i++) {\n      var layer = node.childNodes[i];\n      if (layer.nodeType !== Node.ELEMENT_NODE) {\n        continue;\n      }\n      var context = objectStack[0];\n\n      var toRemove = ol.format.WMSGetFeatureInfo.layerIdentifier_;\n      var layerName = layer.localName.replace(toRemove, '');\n\n      if (this.layers_ && !ol.array.includes(this.layers_, layerName)) {\n        continue;\n      }\n\n      var featureType = layerName +\n          ol.format.WMSGetFeatureInfo.featureIdentifier_;\n\n      context['featureType'] = featureType;\n      context['featureNS'] = this.featureNS_;\n\n      var parsers = {};\n      parsers[featureType] = ol.xml.makeArrayPusher(\n          this.gmlFormat_.readFeatureElement, this.gmlFormat_);\n      var parsersNS = ol.xml.makeStructureNS(\n          [context['featureNS'], null], parsers);\n      layer.setAttribute('namespaceURI', this.featureNS_);\n      var layerFeatures = ol.xml.pushParseAndPop(\n          [], parsersNS, layer, objectStack, this.gmlFormat_);\n      if (layerFeatures) {\n        ol.array.extend(features, layerFeatures);\n      }\n    }\n  }\n  if (localName == 'FeatureCollection') {\n    var gmlFeatures = ol.xml.pushParseAndPop([],\n        this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,\n        [{}], this.gmlFormat_);\n    if (gmlFeatures) {\n      features = gmlFeatures;\n    }\n  }\n  return features;\n};\n\n\n/**\n * Read all features from a WMSGetFeatureInfo response.\n *\n * @function\n * @param {Document|Node|Object|string} source Source.\n * @param {olx.format.ReadOptions=} opt_options Options.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.format.WMSGetFeatureInfo.prototype.readFeatures;\n\n\n/**\n * @inheritDoc\n */\nol.format.WMSGetFeatureInfo.prototype.readFeaturesFromNode = function(node, opt_options) {\n  var options = {};\n  if (opt_options) {\n    ol.obj.assign(options, this.getReadOptions(node, opt_options));\n  }\n  return this.readFeatures_(node, [options]);\n};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.WMSGetFeatureInfo.prototype.writeFeatureNode = function(feature, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.WMSGetFeatureInfo.prototype.writeFeaturesNode = function(features, opt_options) {};\n\n\n/**\n * Not implemented.\n * @inheritDoc\n */\nol.format.WMSGetFeatureInfo.prototype.writeGeometryNode = function(geometry, opt_options) {};\n\ngoog.provide('ol.format.WMTSCapabilities');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.format.OWS');\ngoog.require('ol.format.XLink');\ngoog.require('ol.format.XML');\ngoog.require('ol.format.XSD');\ngoog.require('ol.xml');\n\n\n/**\n * @classdesc\n * Format for reading WMTS capabilities data.\n *\n * @constructor\n * @extends {ol.format.XML}\n * @api\n */\nol.format.WMTSCapabilities = function() {\n  ol.format.XML.call(this);\n\n  /**\n   * @type {ol.format.OWS}\n   * @private\n   */\n  this.owsParser_ = new ol.format.OWS();\n};\nol.inherits(ol.format.WMTSCapabilities, ol.format.XML);\n\n\n/**\n * Read a WMTS capabilities document.\n *\n * @function\n * @param {Document|Node|string} source The XML source.\n * @return {Object} An object representing the WMTS capabilities.\n * @api\n */\nol.format.WMTSCapabilities.prototype.read;\n\n\n/**\n * @inheritDoc\n */\nol.format.WMTSCapabilities.prototype.readFromDocument = function(doc) {\n  for (var n = doc.firstChild; n; n = n.nextSibling) {\n    if (n.nodeType == Node.ELEMENT_NODE) {\n      return this.readFromNode(n);\n    }\n  }\n  return null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.format.WMTSCapabilities.prototype.readFromNode = function(node) {\n  var version = node.getAttribute('version').trim();\n  var WMTSCapabilityObject = this.owsParser_.readFromNode(node);\n  if (!WMTSCapabilityObject) {\n    return null;\n  }\n  WMTSCapabilityObject['version'] = version;\n  WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject,\n      ol.format.WMTSCapabilities.PARSERS_, node, []);\n  return WMTSCapabilityObject ? WMTSCapabilityObject : null;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nol.format.WMTSCapabilities.readContents_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.CONTENTS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Layers object.\n */\nol.format.WMTSCapabilities.readLayer_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.LAYER_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set object.\n */\nol.format.WMTSCapabilities.readTileMatrixSet_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.TMS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nol.format.WMTSCapabilities.readStyle_ = function(node, objectStack) {\n  var style = ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.STYLE_PARSERS_, node, objectStack);\n  if (!style) {\n    return undefined;\n  }\n  var isDefault = node.getAttribute('isDefault') === 'true';\n  style['isDefault'] = isDefault;\n  return style;\n\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set Link object.\n */\nol.format.WMTSCapabilities.readTileMatrixSetLink_ = function(node,\n    objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Dimension object.\n */\nol.format.WMTSCapabilities.readDimensions_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.DIMENSION_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Resource URL object.\n */\nol.format.WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {\n  var format = node.getAttribute('format');\n  var template = node.getAttribute('template');\n  var resourceType = node.getAttribute('resourceType');\n  var resource = {};\n  if (format) {\n    resource['format'] = format;\n  }\n  if (template) {\n    resource['template'] = template;\n  }\n  if (resourceType) {\n    resource['resourceType'] = resourceType;\n  }\n  return resource;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} WGS84 BBox object.\n */\nol.format.WMTSCapabilities.readWgs84BoundingBox_ = function(node, objectStack) {\n  var coordinates = ol.xml.pushParseAndPop([],\n      ol.format.WMTSCapabilities.WGS84_BBOX_READERS_, node, objectStack);\n  if (coordinates.length != 2) {\n    return undefined;\n  }\n  return ol.extent.boundingExtent(coordinates);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Legend object.\n */\nol.format.WMTSCapabilities.readLegendUrl_ = function(node, objectStack) {\n  var legend = {};\n  legend['format'] = node.getAttribute('format');\n  legend['href'] = ol.format.XLink.readHref(node);\n  return legend;\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} Coordinates object.\n */\nol.format.WMTSCapabilities.readCoordinates_ = function(node, objectStack) {\n  var coordinates = ol.format.XSD.readString(node).split(' ');\n  if (!coordinates || coordinates.length != 2) {\n    return undefined;\n  }\n  var x = +coordinates[0];\n  var y = +coordinates[1];\n  if (isNaN(x) || isNaN(y)) {\n    return undefined;\n  }\n  return [x, y];\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrix object.\n */\nol.format.WMTSCapabilities.readTileMatrix_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.TM_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixSetLimits Object.\n */\nol.format.WMTSCapabilities.readTileMatrixLimitsList_ = function(node,\n    objectStack) {\n  return ol.xml.pushParseAndPop([],\n      ol.format.WMTSCapabilities.TMS_LIMITS_LIST_PARSERS_, node,\n      objectStack);\n};\n\n\n/**\n * @private\n * @param {Node} node Node.\n * @param {Array.<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixLimits Array.\n */\nol.format.WMTSCapabilities.readTileMatrixLimits_ = function(node, objectStack) {\n  return ol.xml.pushParseAndPop({},\n      ol.format.WMTSCapabilities.TMS_LIMITS_PARSERS_, node, objectStack);\n};\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.format.WMTSCapabilities.NAMESPACE_URIS_ = [\n  null,\n  'http://www.opengis.net/wmts/1.0'\n];\n\n\n/**\n * @const\n * @private\n * @type {Array.<string>}\n */\nol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_ = [\n  null,\n  'http://www.opengis.net/ows/1.1'\n];\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'Contents': ol.xml.makeObjectPropertySetter(\n          ol.format.WMTSCapabilities.readContents_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'Layer': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readLayer_),\n      'TileMatrixSet': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readTileMatrixSet_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'Style': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readStyle_),\n      'Format': ol.xml.makeObjectPropertyPusher(\n          ol.format.XSD.readString),\n      'TileMatrixSetLink': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readTileMatrixSetLink_),\n      'Dimension': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readDimensions_),\n      'ResourceURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readResourceUrl_)\n    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'Title': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'Abstract': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'WGS84BoundingBox': ol.xml.makeObjectPropertySetter(\n          ol.format.WMTSCapabilities.readWgs84BoundingBox_),\n      'Identifier': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'LegendURL': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readLegendUrl_)\n    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'Title': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'Identifier': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'TileMatrixSet': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'TileMatrixSetLimits': ol.xml.makeObjectPropertySetter(\n          ol.format.WMTSCapabilities.readTileMatrixLimitsList_)\n    });\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.TMS_LIMITS_LIST_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'TileMatrixLimits': ol.xml.makeArrayPusher(\n          ol.format.WMTSCapabilities.readTileMatrixLimits_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.TMS_LIMITS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'TileMatrix': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'MinTileRow': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MaxTileRow': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MinTileCol': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MaxTileCol': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.DIMENSION_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'Default': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'Value': ol.xml.makeObjectPropertyPusher(\n          ol.format.XSD.readString)\n    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'Identifier': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'LowerCorner': ol.xml.makeArrayPusher(\n          ol.format.WMTSCapabilities.readCoordinates_),\n      'UpperCorner': ol.xml.makeArrayPusher(\n          ol.format.WMTSCapabilities.readCoordinates_)\n    });\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'WellKnownScaleSet': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'TileMatrix': ol.xml.makeObjectPropertyPusher(\n          ol.format.WMTSCapabilities.readTileMatrix_)\n    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'SupportedCRS': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString),\n      'Identifier': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    }));\n\n\n/**\n * @const\n * @type {Object.<string, Object.<string, ol.XmlParser>>}\n * @private\n */\nol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeStructureNS(\n    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {\n      'TopLeftCorner': ol.xml.makeObjectPropertySetter(\n          ol.format.WMTSCapabilities.readCoordinates_),\n      'ScaleDenominator': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readDecimal),\n      'TileWidth': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'TileHeight': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MatrixWidth': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger),\n      'MatrixHeight': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readNonNegativeInteger)\n    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {\n      'Identifier': ol.xml.makeObjectPropertySetter(\n          ol.format.XSD.readString)\n    }));\n\ngoog.provide('ol.GeolocationProperty');\n\n\n/**\n * @enum {string}\n */\nol.GeolocationProperty = {\n  ACCURACY: 'accuracy',\n  ACCURACY_GEOMETRY: 'accuracyGeometry',\n  ALTITUDE: 'altitude',\n  ALTITUDE_ACCURACY: 'altitudeAccuracy',\n  HEADING: 'heading',\n  POSITION: 'position',\n  PROJECTION: 'projection',\n  SPEED: 'speed',\n  TRACKING: 'tracking',\n  TRACKING_OPTIONS: 'trackingOptions'\n};\n\n// FIXME handle geolocation not supported\n\ngoog.provide('ol.Geolocation');\n\ngoog.require('ol');\ngoog.require('ol.GeolocationProperty');\ngoog.require('ol.Object');\ngoog.require('ol.Sphere');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.has');\ngoog.require('ol.math');\ngoog.require('ol.proj');\ngoog.require('ol.proj.EPSG4326');\n\n\n/**\n * @classdesc\n * Helper class for providing HTML5 Geolocation capabilities.\n * The [Geolocation API](http://www.w3.org/TR/geolocation-API/)\n * is used to locate a user's position.\n *\n * To get notified of position changes, register a listener for the generic\n * `change` event on your instance of `ol.Geolocation`.\n *\n * Example:\n *\n *     var geolocation = new ol.Geolocation({\n *       // take the projection to use from the map's view\n *       projection: view.getProjection()\n *     });\n *     // listen to changes in position\n *     geolocation.on('change', function(evt) {\n *       window.console.log(geolocation.getPosition());\n *     });\n *\n * @fires error\n * @constructor\n * @extends {ol.Object}\n * @param {olx.GeolocationOptions=} opt_options Options.\n * @api\n */\nol.Geolocation = function(opt_options) {\n\n  ol.Object.call(this);\n\n  var options = opt_options || {};\n\n  /**\n   * The unprojected (EPSG:4326) device position.\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.position_ = null;\n\n  /**\n   * @private\n   * @type {ol.TransformFunction}\n   */\n  this.transform_ = ol.proj.identityTransform;\n\n  /**\n   * @private\n   * @type {ol.Sphere}\n   */\n  this.sphere_ = new ol.Sphere(ol.proj.EPSG4326.RADIUS);\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.watchId_ = undefined;\n\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.GeolocationProperty.PROJECTION),\n      this.handleProjectionChanged_, this);\n  ol.events.listen(\n      this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING),\n      this.handleTrackingChanged_, this);\n\n  if (options.projection !== undefined) {\n    this.setProjection(options.projection);\n  }\n  if (options.trackingOptions !== undefined) {\n    this.setTrackingOptions(options.trackingOptions);\n  }\n\n  this.setTracking(options.tracking !== undefined ? options.tracking : false);\n\n};\nol.inherits(ol.Geolocation, ol.Object);\n\n\n/**\n * @inheritDoc\n */\nol.Geolocation.prototype.disposeInternal = function() {\n  this.setTracking(false);\n  ol.Object.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @private\n */\nol.Geolocation.prototype.handleProjectionChanged_ = function() {\n  var projection = this.getProjection();\n  if (projection) {\n    this.transform_ = ol.proj.getTransformFromProjections(\n        ol.proj.get('EPSG:4326'), projection);\n    if (this.position_) {\n      this.set(\n          ol.GeolocationProperty.POSITION, this.transform_(this.position_));\n    }\n  }\n};\n\n\n/**\n * @private\n */\nol.Geolocation.prototype.handleTrackingChanged_ = function() {\n  if (ol.has.GEOLOCATION) {\n    var tracking = this.getTracking();\n    if (tracking && this.watchId_ === undefined) {\n      this.watchId_ = navigator.geolocation.watchPosition(\n          this.positionChange_.bind(this),\n          this.positionError_.bind(this),\n          this.getTrackingOptions());\n    } else if (!tracking && this.watchId_ !== undefined) {\n      navigator.geolocation.clearWatch(this.watchId_);\n      this.watchId_ = undefined;\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {GeolocationPosition} position position event.\n */\nol.Geolocation.prototype.positionChange_ = function(position) {\n  var coords = position.coords;\n  this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy);\n  this.set(ol.GeolocationProperty.ALTITUDE,\n      coords.altitude === null ? undefined : coords.altitude);\n  this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY,\n      coords.altitudeAccuracy === null ?\n        undefined : coords.altitudeAccuracy);\n  this.set(ol.GeolocationProperty.HEADING, coords.heading === null ?\n    undefined : ol.math.toRadians(coords.heading));\n  if (!this.position_) {\n    this.position_ = [coords.longitude, coords.latitude];\n  } else {\n    this.position_[0] = coords.longitude;\n    this.position_[1] = coords.latitude;\n  }\n  var projectedPosition = this.transform_(this.position_);\n  this.set(ol.GeolocationProperty.POSITION, projectedPosition);\n  this.set(ol.GeolocationProperty.SPEED,\n      coords.speed === null ? undefined : coords.speed);\n  var geometry = ol.geom.Polygon.circular(\n      this.sphere_, this.position_, coords.accuracy);\n  geometry.applyTransform(this.transform_);\n  this.set(ol.GeolocationProperty.ACCURACY_GEOMETRY, geometry);\n  this.changed();\n};\n\n/**\n * Triggered when the Geolocation returns an error.\n * @event error\n * @api\n */\n\n/**\n * @private\n * @param {GeolocationPositionError} error error object.\n */\nol.Geolocation.prototype.positionError_ = function(error) {\n  error.type = ol.events.EventType.ERROR;\n  this.setTracking(false);\n  this.dispatchEvent(/** @type {{type: string, target: undefined}} */ (error));\n};\n\n\n/**\n * Get the accuracy of the position in meters.\n * @return {number|undefined} The accuracy of the position measurement in\n *     meters.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getAccuracy = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.GeolocationProperty.ACCURACY));\n};\n\n\n/**\n * Get a geometry of the position accuracy.\n * @return {?ol.geom.Polygon} A geometry of the position accuracy.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getAccuracyGeometry = function() {\n  return /** @type {?ol.geom.Polygon} */ (\n    this.get(ol.GeolocationProperty.ACCURACY_GEOMETRY) || null);\n};\n\n\n/**\n * Get the altitude associated with the position.\n * @return {number|undefined} The altitude of the position in meters above mean\n *     sea level.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getAltitude = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.GeolocationProperty.ALTITUDE));\n};\n\n\n/**\n * Get the altitude accuracy of the position.\n * @return {number|undefined} The accuracy of the altitude measurement in\n *     meters.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getAltitudeAccuracy = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.GeolocationProperty.ALTITUDE_ACCURACY));\n};\n\n\n/**\n * Get the heading as radians clockwise from North.\n * @return {number|undefined} The heading of the device in radians from north.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getHeading = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.GeolocationProperty.HEADING));\n};\n\n\n/**\n * Get the position of the device.\n * @return {ol.Coordinate|undefined} The current position of the device reported\n *     in the current projection.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getPosition = function() {\n  return /** @type {ol.Coordinate|undefined} */ (\n    this.get(ol.GeolocationProperty.POSITION));\n};\n\n\n/**\n * Get the projection associated with the position.\n * @return {ol.proj.Projection|undefined} The projection the position is\n *     reported in.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getProjection = function() {\n  return /** @type {ol.proj.Projection|undefined} */ (\n    this.get(ol.GeolocationProperty.PROJECTION));\n};\n\n\n/**\n * Get the speed in meters per second.\n * @return {number|undefined} The instantaneous speed of the device in meters\n *     per second.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getSpeed = function() {\n  return /** @type {number|undefined} */ (\n    this.get(ol.GeolocationProperty.SPEED));\n};\n\n\n/**\n * Determine if the device location is being tracked.\n * @return {boolean} The device location is being tracked.\n * @observable\n * @api\n */\nol.Geolocation.prototype.getTracking = function() {\n  return /** @type {boolean} */ (\n    this.get(ol.GeolocationProperty.TRACKING));\n};\n\n\n/**\n * Get the tracking options.\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n * @return {GeolocationPositionOptions|undefined} PositionOptions as defined by\n *     the [HTML5 Geolocation spec\n *     ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\nol.Geolocation.prototype.getTrackingOptions = function() {\n  return /** @type {GeolocationPositionOptions|undefined} */ (\n    this.get(ol.GeolocationProperty.TRACKING_OPTIONS));\n};\n\n\n/**\n * Set the projection to use for transforming the coordinates.\n * @param {ol.ProjectionLike} projection The projection the position is\n *     reported in.\n * @observable\n * @api\n */\nol.Geolocation.prototype.setProjection = function(projection) {\n  this.set(ol.GeolocationProperty.PROJECTION, ol.proj.get(projection));\n};\n\n\n/**\n * Enable or disable tracking.\n * @param {boolean} tracking Enable tracking.\n * @observable\n * @api\n */\nol.Geolocation.prototype.setTracking = function(tracking) {\n  this.set(ol.GeolocationProperty.TRACKING, tracking);\n};\n\n\n/**\n * Set the tracking options.\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n * @param {GeolocationPositionOptions} options PositionOptions as defined by the\n *     [HTML5 Geolocation spec\n *     ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\nol.Geolocation.prototype.setTrackingOptions = function(options) {\n  this.set(ol.GeolocationProperty.TRACKING_OPTIONS, options);\n};\n\ngoog.provide('ol.geom.Circle');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.geom.flat.deflate');\n\n\n/**\n * @classdesc\n * Circle geometry.\n *\n * @constructor\n * @extends {ol.geom.SimpleGeometry}\n * @param {ol.Coordinate} center Center.\n * @param {number=} opt_radius Radius.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.Circle = function(center, opt_radius, opt_layout) {\n  ol.geom.SimpleGeometry.call(this);\n  var radius = opt_radius ? opt_radius : 0;\n  this.setCenterAndRadius(center, radius, opt_layout);\n};\nol.inherits(ol.geom.Circle, ol.geom.SimpleGeometry);\n\n\n/**\n * Make a complete copy of the geometry.\n * @return {!ol.geom.Circle} Clone.\n * @override\n * @api\n */\nol.geom.Circle.prototype.clone = function() {\n  var circle = new ol.geom.Circle(null);\n  circle.setFlatCoordinates(this.layout, this.flatCoordinates.slice());\n  return circle;\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Circle.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {\n  var flatCoordinates = this.flatCoordinates;\n  var dx = x - flatCoordinates[0];\n  var dy = y - flatCoordinates[1];\n  var squaredDistance = dx * dx + dy * dy;\n  if (squaredDistance < minSquaredDistance) {\n    var i;\n    if (squaredDistance === 0) {\n      for (i = 0; i < this.stride; ++i) {\n        closestPoint[i] = flatCoordinates[i];\n      }\n    } else {\n      var delta = this.getRadius() / Math.sqrt(squaredDistance);\n      closestPoint[0] = flatCoordinates[0] + delta * dx;\n      closestPoint[1] = flatCoordinates[1] + delta * dy;\n      for (i = 2; i < this.stride; ++i) {\n        closestPoint[i] = flatCoordinates[i];\n      }\n    }\n    closestPoint.length = this.stride;\n    return squaredDistance;\n  } else {\n    return minSquaredDistance;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Circle.prototype.containsXY = function(x, y) {\n  var flatCoordinates = this.flatCoordinates;\n  var dx = x - flatCoordinates[0];\n  var dy = y - flatCoordinates[1];\n  return dx * dx + dy * dy <= this.getRadiusSquared_();\n};\n\n\n/**\n * Return the center of the circle as {@link ol.Coordinate coordinate}.\n * @return {ol.Coordinate} Center.\n * @api\n */\nol.geom.Circle.prototype.getCenter = function() {\n  return this.flatCoordinates.slice(0, this.stride);\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Circle.prototype.computeExtent = function(extent) {\n  var flatCoordinates = this.flatCoordinates;\n  var radius = flatCoordinates[this.stride] - flatCoordinates[0];\n  return ol.extent.createOrUpdate(\n      flatCoordinates[0] - radius, flatCoordinates[1] - radius,\n      flatCoordinates[0] + radius, flatCoordinates[1] + radius,\n      extent);\n};\n\n\n/**\n * Return the radius of the circle.\n * @return {number} Radius.\n * @api\n */\nol.geom.Circle.prototype.getRadius = function() {\n  return Math.sqrt(this.getRadiusSquared_());\n};\n\n\n/**\n * @private\n * @return {number} Radius squared.\n */\nol.geom.Circle.prototype.getRadiusSquared_ = function() {\n  var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];\n  var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];\n  return dx * dx + dy * dy;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Circle.prototype.getType = function() {\n  return ol.geom.GeometryType.CIRCLE;\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.geom.Circle.prototype.intersectsExtent = function(extent) {\n  var circleExtent = this.getExtent();\n  if (ol.extent.intersects(extent, circleExtent)) {\n    var center = this.getCenter();\n\n    if (extent[0] <= center[0] && extent[2] >= center[0]) {\n      return true;\n    }\n    if (extent[1] <= center[1] && extent[3] >= center[1]) {\n      return true;\n    }\n\n    return ol.extent.forEachCorner(extent, this.intersectsCoordinate, this);\n  }\n  return false;\n\n};\n\n\n/**\n * Set the center of the circle as {@link ol.Coordinate coordinate}.\n * @param {ol.Coordinate} center Center.\n * @api\n */\nol.geom.Circle.prototype.setCenter = function(center) {\n  var stride = this.stride;\n  var radius = this.flatCoordinates[stride] - this.flatCoordinates[0];\n  var flatCoordinates = center.slice();\n  flatCoordinates[stride] = flatCoordinates[0] + radius;\n  var i;\n  for (i = 1; i < stride; ++i) {\n    flatCoordinates[stride + i] = center[i];\n  }\n  this.setFlatCoordinates(this.layout, flatCoordinates);\n};\n\n\n/**\n * Set the center (as {@link ol.Coordinate coordinate}) and the radius (as\n * number) of the circle.\n * @param {ol.Coordinate} center Center.\n * @param {number} radius Radius.\n * @param {ol.geom.GeometryLayout=} opt_layout Layout.\n * @api\n */\nol.geom.Circle.prototype.setCenterAndRadius = function(center, radius, opt_layout) {\n  if (!center) {\n    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);\n  } else {\n    this.setLayout(opt_layout, center, 0);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    /** @type {Array.<number>} */\n    var flatCoordinates = this.flatCoordinates;\n    var offset = ol.geom.flat.deflate.coordinate(\n        flatCoordinates, 0, center, this.stride);\n    flatCoordinates[offset++] = flatCoordinates[0] + radius;\n    var i, ii;\n    for (i = 1, ii = this.stride; i < ii; ++i) {\n      flatCoordinates[offset++] = flatCoordinates[i];\n    }\n    flatCoordinates.length = offset;\n    this.changed();\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Circle.prototype.getCoordinates = function() {};\n\n\n/**\n * @inheritDoc\n */\nol.geom.Circle.prototype.setCoordinates = function(coordinates, opt_layout) {};\n\n\n/**\n * @param {ol.geom.GeometryLayout} layout Layout.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n */\nol.geom.Circle.prototype.setFlatCoordinates = function(layout, flatCoordinates) {\n  this.setFlatCoordinatesInternal(layout, flatCoordinates);\n  this.changed();\n};\n\n\n/**\n * Set the radius of the circle. The radius is in the units of the projection.\n * @param {number} radius Radius.\n * @api\n */\nol.geom.Circle.prototype.setRadius = function(radius) {\n  this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;\n  this.changed();\n};\n\n\n/**\n * Transform each coordinate of the circle from one coordinate reference system\n * to another. The geometry is modified in place.\n * If you do not want the geometry modified in place, first clone() it and\n * then use this function on the clone.\n *\n * Internally a circle is currently represented by two points: the center of\n * the circle `[cx, cy]`, and the point to the right of the circle\n * `[cx + r, cy]`. This `transform` function just transforms these two points.\n * So the resulting geometry is also a circle, and that circle does not\n * correspond to the shape that would be obtained by transforming every point\n * of the original circle.\n *\n * @param {ol.ProjectionLike} source The current projection.  Can be a\n *     string identifier or a {@link ol.proj.Projection} object.\n * @param {ol.ProjectionLike} destination The desired projection.  Can be a\n *     string identifier or a {@link ol.proj.Projection} object.\n * @return {ol.geom.Circle} This geometry.  Note that original geometry is\n *     modified in place.\n * @function\n * @api\n */\nol.geom.Circle.prototype.transform;\n\ngoog.provide('ol.geom.flat.geodesic');\n\ngoog.require('ol.math');\ngoog.require('ol.proj');\n\n\n/**\n * @private\n * @param {function(number): ol.Coordinate} interpolate Interpolate function.\n * @param {ol.TransformFunction} transform Transform from longitude/latitude to\n *     projected coordinates.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array.<number>} Flat coordinates.\n */\nol.geom.flat.geodesic.line_ = function(interpolate, transform, squaredTolerance) {\n  // FIXME reduce garbage generation\n  // FIXME optimize stack operations\n\n  /** @type {Array.<number>} */\n  var flatCoordinates = [];\n\n  var geoA = interpolate(0);\n  var geoB = interpolate(1);\n\n  var a = transform(geoA);\n  var b = transform(geoB);\n\n  /** @type {Array.<ol.Coordinate>} */\n  var geoStack = [geoB, geoA];\n  /** @type {Array.<ol.Coordinate>} */\n  var stack = [b, a];\n  /** @type {Array.<number>} */\n  var fractionStack = [1, 0];\n\n  /** @type {Object.<string, boolean>} */\n  var fractions = {};\n\n  var maxIterations = 1e5;\n  var geoM, m, fracA, fracB, fracM, key;\n\n  while (--maxIterations > 0 && fractionStack.length > 0) {\n    // Pop the a coordinate off the stack\n    fracA = fractionStack.pop();\n    geoA = geoStack.pop();\n    a = stack.pop();\n    // Add the a coordinate if it has not been added yet\n    key = fracA.toString();\n    if (!(key in fractions)) {\n      flatCoordinates.push(a[0], a[1]);\n      fractions[key] = true;\n    }\n    // Pop the b coordinate off the stack\n    fracB = fractionStack.pop();\n    geoB = geoStack.pop();\n    b = stack.pop();\n    // Find the m point between the a and b coordinates\n    fracM = (fracA + fracB) / 2;\n    geoM = interpolate(fracM);\n    m = transform(geoM);\n    if (ol.math.squaredSegmentDistance(m[0], m[1], a[0], a[1],\n        b[0], b[1]) < squaredTolerance) {\n      // If the m point is sufficiently close to the straight line, then we\n      // discard it.  Just use the b coordinate and move on to the next line\n      // segment.\n      flatCoordinates.push(b[0], b[1]);\n      key = fracB.toString();\n      fractions[key] = true;\n    } else {\n      // Otherwise, we need to subdivide the current line segment.  Split it\n      // into two and push the two line segments onto the stack.\n      fractionStack.push(fracB, fracM, fracM, fracA);\n      stack.push(b, m, m, a);\n      geoStack.push(geoB, geoM, geoM, geoA);\n    }\n  }\n\n  return flatCoordinates;\n};\n\n\n/**\n* Generate a great-circle arcs between two lat/lon points.\n* @param {number} lon1 Longitude 1 in degrees.\n* @param {number} lat1 Latitude 1 in degrees.\n* @param {number} lon2 Longitude 2 in degrees.\n* @param {number} lat2 Latitude 2 in degrees.\n * @param {ol.proj.Projection} projection Projection.\n* @param {number} squaredTolerance Squared tolerance.\n* @return {Array.<number>} Flat coordinates.\n*/\nol.geom.flat.geodesic.greatCircleArc = function(\n    lon1, lat1, lon2, lat2, projection, squaredTolerance) {\n\n  var geoProjection = ol.proj.get('EPSG:4326');\n\n  var cosLat1 = Math.cos(ol.math.toRadians(lat1));\n  var sinLat1 = Math.sin(ol.math.toRadians(lat1));\n  var cosLat2 = Math.cos(ol.math.toRadians(lat2));\n  var sinLat2 = Math.sin(ol.math.toRadians(lat2));\n  var cosDeltaLon = Math.cos(ol.math.toRadians(lon2 - lon1));\n  var sinDeltaLon = Math.sin(ol.math.toRadians(lon2 - lon1));\n  var d = sinLat1 * sinLat2 + cosLat1 * cosLat2 * cosDeltaLon;\n\n  return ol.geom.flat.geodesic.line_(\n      /**\n       * @param {number} frac Fraction.\n       * @return {ol.Coordinate} Coordinate.\n       */\n      function(frac) {\n        if (1 <= d) {\n          return [lon2, lat2];\n        }\n        var D = frac * Math.acos(d);\n        var cosD = Math.cos(D);\n        var sinD = Math.sin(D);\n        var y = sinDeltaLon * cosLat2;\n        var x = cosLat1 * sinLat2 - sinLat1 * cosLat2 * cosDeltaLon;\n        var theta = Math.atan2(y, x);\n        var lat = Math.asin(sinLat1 * cosD + cosLat1 * sinD * Math.cos(theta));\n        var lon = ol.math.toRadians(lon1) +\n            Math.atan2(Math.sin(theta) * sinD * cosLat1,\n                cosD - sinLat1 * Math.sin(lat));\n        return [ol.math.toDegrees(lon), ol.math.toDegrees(lat)];\n      }, ol.proj.getTransform(geoProjection, projection), squaredTolerance);\n};\n\n\n/**\n * Generate a meridian (line at constant longitude).\n * @param {number} lon Longitude.\n * @param {number} lat1 Latitude 1.\n * @param {number} lat2 Latitude 2.\n * @param {ol.proj.Projection} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array.<number>} Flat coordinates.\n */\nol.geom.flat.geodesic.meridian = function(lon, lat1, lat2, projection, squaredTolerance) {\n  var epsg4326Projection = ol.proj.get('EPSG:4326');\n  return ol.geom.flat.geodesic.line_(\n      /**\n       * @param {number} frac Fraction.\n       * @return {ol.Coordinate} Coordinate.\n       */\n      function(frac) {\n        return [lon, lat1 + ((lat2 - lat1) * frac)];\n      },\n      ol.proj.getTransform(epsg4326Projection, projection), squaredTolerance);\n};\n\n\n/**\n * Generate a parallel (line at constant latitude).\n * @param {number} lat Latitude.\n * @param {number} lon1 Longitude 1.\n * @param {number} lon2 Longitude 2.\n * @param {ol.proj.Projection} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array.<number>} Flat coordinates.\n */\nol.geom.flat.geodesic.parallel = function(lat, lon1, lon2, projection, squaredTolerance) {\n  var epsg4326Projection = ol.proj.get('EPSG:4326');\n  return ol.geom.flat.geodesic.line_(\n      /**\n       * @param {number} frac Fraction.\n       * @return {ol.Coordinate} Coordinate.\n       */\n      function(frac) {\n        return [lon1 + ((lon2 - lon1) * frac), lat];\n      },\n      ol.proj.getTransform(epsg4326Projection, projection), squaredTolerance);\n};\n\ngoog.provide('ol.geom.flat.topology');\n\ngoog.require('ol.geom.flat.area');\n\n/**\n * Check if the linestring is a boundary.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} The linestring is a boundary.\n */\nol.geom.flat.topology.lineStringIsClosed = function(flatCoordinates, offset, end, stride) {\n  var lastCoord = end - stride;\n  if (flatCoordinates[offset] === flatCoordinates[lastCoord] &&\n      flatCoordinates[offset + 1] === flatCoordinates[lastCoord + 1] && (end - offset) / stride > 3) {\n    return !!ol.geom.flat.area.linearRing(flatCoordinates, offset, end, stride);\n  }\n  return false;\n};\n\ngoog.provide('ol.Graticule');\n\ngoog.require('ol.coordinate');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryLayout');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.flat.geodesic');\ngoog.require('ol.math');\ngoog.require('ol.proj');\ngoog.require('ol.render.EventType');\ngoog.require('ol.style.Fill');\ngoog.require('ol.style.Stroke');\ngoog.require('ol.style.Text');\n\n\n/**\n * Render a grid for a coordinate system on a map.\n * @constructor\n * @param {olx.GraticuleOptions=} opt_options Options.\n * @api\n */\nol.Graticule = function(opt_options) {\n  var options = opt_options || {};\n\n  /**\n   * @type {ol.PluggableMap}\n   * @private\n   */\n  this.map_ = null;\n\n  /**\n   * @type {ol.proj.Projection}\n   * @private\n   */\n  this.projection_ = null;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxLat_ = Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxLon_ = Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.minLat_ = -Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.minLon_ = -Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxLatP_ = Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxLonP_ = Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.minLatP_ = -Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.minLonP_ = -Infinity;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.targetSize_ = options.targetSize !== undefined ?\n    options.targetSize : 100;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.maxLines_ = options.maxLines !== undefined ? options.maxLines : 100;\n\n  /**\n   * @type {Array.<ol.geom.LineString>}\n   * @private\n   */\n  this.meridians_ = [];\n\n  /**\n   * @type {Array.<ol.geom.LineString>}\n   * @private\n   */\n  this.parallels_ = [];\n\n  /**\n   * @type {ol.style.Stroke}\n   * @private\n   */\n  this.strokeStyle_ = options.strokeStyle !== undefined ?\n    options.strokeStyle : ol.Graticule.DEFAULT_STROKE_STYLE_;\n\n  /**\n   * @type {ol.TransformFunction|undefined}\n   * @private\n   */\n  this.fromLonLatTransform_ = undefined;\n\n  /**\n   * @type {ol.TransformFunction|undefined}\n   * @private\n   */\n  this.toLonLatTransform_ = undefined;\n\n  /**\n   * @type {ol.Coordinate}\n   * @private\n   */\n  this.projectionCenterLonLat_ = null;\n\n  /**\n   * @type {Array.<ol.GraticuleLabelDataType>}\n   * @private\n   */\n  this.meridiansLabels_ = null;\n\n  /**\n   * @type {Array.<ol.GraticuleLabelDataType>}\n   * @private\n   */\n  this.parallelsLabels_ = null;\n\n  if (options.showLabels == true) {\n    var degreesToString = ol.coordinate.degreesToStringHDMS;\n\n    /**\n     * @type {null|function(number):string}\n     * @private\n     */\n    this.lonLabelFormatter_ = options.lonLabelFormatter == undefined ?\n      degreesToString.bind(this, 'EW') : options.lonLabelFormatter;\n\n    /**\n     * @type {function(number):string}\n     * @private\n     */\n    this.latLabelFormatter_ = options.latLabelFormatter == undefined ?\n      degreesToString.bind(this, 'NS') : options.latLabelFormatter;\n\n    /**\n     * Longitude label position in fractions (0..1) of view extent. 0 means\n     * bottom, 1 means top.\n     * @type {number}\n     * @private\n     */\n    this.lonLabelPosition_ = options.lonLabelPosition == undefined ? 0 :\n      options.lonLabelPosition;\n\n    /**\n     * Latitude Label position in fractions (0..1) of view extent. 0 means left, 1\n     * means right.\n     * @type {number}\n     * @private\n     */\n    this.latLabelPosition_ = options.latLabelPosition == undefined ? 1 :\n      options.latLabelPosition;\n\n    /**\n     * @type {ol.style.Text}\n     * @private\n     */\n    this.lonLabelStyle_ = options.lonLabelStyle !== undefined ? options.lonLabelStyle :\n      new ol.style.Text({\n        font: '12px Calibri,sans-serif',\n        textBaseline: 'bottom',\n        fill: new ol.style.Fill({\n          color: 'rgba(0,0,0,1)'\n        }),\n        stroke: new ol.style.Stroke({\n          color: 'rgba(255,255,255,1)',\n          width: 3\n        })\n      });\n\n    /**\n     * @type {ol.style.Text}\n     * @private\n     */\n    this.latLabelStyle_ = options.latLabelStyle !== undefined ? options.latLabelStyle :\n      new ol.style.Text({\n        font: '12px Calibri,sans-serif',\n        textAlign: 'end',\n        fill: new ol.style.Fill({\n          color: 'rgba(0,0,0,1)'\n        }),\n        stroke: new ol.style.Stroke({\n          color: 'rgba(255,255,255,1)',\n          width: 3\n        })\n      });\n\n    this.meridiansLabels_ = [];\n    this.parallelsLabels_ = [];\n  }\n\n  this.setMap(options.map !== undefined ? options.map : null);\n};\n\n\n/**\n * @type {ol.style.Stroke}\n * @private\n * @const\n */\nol.Graticule.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({\n  color: 'rgba(0,0,0,0.2)'\n});\n\n\n/**\n * TODO can be configurable\n * @type {Array.<number>}\n * @private\n */\nol.Graticule.intervals_ = [90, 45, 30, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05,\n  0.01, 0.005, 0.002, 0.001];\n\n\n/**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {ol.Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\nol.Graticule.prototype.addMeridian_ = function(lon, minLat, maxLat, squaredTolerance, extent, index) {\n  var lineString = this.getMeridian_(lon, minLat, maxLat,\n      squaredTolerance, index);\n  if (ol.extent.intersects(lineString.getExtent(), extent)) {\n    if (this.meridiansLabels_) {\n      var textPoint = this.getMeridianPoint_(lineString, extent, index);\n      this.meridiansLabels_[index] = {\n        geom: textPoint,\n        text: this.lonLabelFormatter_(lon)\n      };\n    }\n    this.meridians_[index++] = lineString;\n  }\n  return index;\n};\n\n/**\n * @param {ol.geom.LineString} lineString Meridian\n * @param {ol.Extent} extent Extent.\n * @param {number} index Index.\n * @return {ol.geom.Point} Meridian point.\n * @private\n */\nol.Graticule.prototype.getMeridianPoint_ = function(lineString, extent, index) {\n  var flatCoordinates = lineString.getFlatCoordinates();\n  var clampedBottom = Math.max(extent[1], flatCoordinates[1]);\n  var clampedTop = Math.min(extent[3], flatCoordinates[flatCoordinates.length - 1]);\n  var lat = ol.math.clamp(\n      extent[1] + Math.abs(extent[1] - extent[3]) * this.lonLabelPosition_,\n      clampedBottom, clampedTop);\n  var coordinate = [flatCoordinates[0], lat];\n  var point = this.meridiansLabels_[index] !== undefined ?\n    this.meridiansLabels_[index].geom : new ol.geom.Point(null);\n  point.setCoordinates(coordinate);\n  return point;\n};\n\n\n/**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {ol.Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\nol.Graticule.prototype.addParallel_ = function(lat, minLon, maxLon, squaredTolerance, extent, index) {\n  var lineString = this.getParallel_(lat, minLon, maxLon, squaredTolerance,\n      index);\n  if (ol.extent.intersects(lineString.getExtent(), extent)) {\n    if (this.parallelsLabels_) {\n      var textPoint = this.getParallelPoint_(lineString, extent, index);\n      this.parallelsLabels_[index] = {\n        geom: textPoint,\n        text: this.latLabelFormatter_(lat)\n      };\n    }\n    this.parallels_[index++] = lineString;\n  }\n  return index;\n};\n\n\n/**\n * @param {ol.geom.LineString} lineString Parallels.\n * @param {ol.Extent} extent Extent.\n * @param {number} index Index.\n * @return {ol.geom.Point} Parallel point.\n * @private\n */\nol.Graticule.prototype.getParallelPoint_ = function(lineString, extent, index) {\n  var flatCoordinates = lineString.getFlatCoordinates();\n  var clampedLeft = Math.max(extent[0], flatCoordinates[0]);\n  var clampedRight = Math.min(extent[2], flatCoordinates[flatCoordinates.length - 2]);\n  var lon = ol.math.clamp(\n      extent[0] + Math.abs(extent[0] - extent[2]) * this.latLabelPosition_,\n      clampedLeft, clampedRight);\n  var coordinate = [lon, flatCoordinates[1]];\n  var point = this.parallelsLabels_[index] !== undefined ?\n    this.parallelsLabels_[index].geom : new ol.geom.Point(null);\n  point.setCoordinates(coordinate);\n  return point;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} squaredTolerance Squared tolerance.\n * @private\n */\nol.Graticule.prototype.createGraticule_ = function(extent, center, resolution, squaredTolerance) {\n\n  var interval = this.getInterval_(resolution);\n  if (interval == -1) {\n    this.meridians_.length = this.parallels_.length = 0;\n    if (this.meridiansLabels_) {\n      this.meridiansLabels_.length = 0;\n    }\n    if (this.parallelsLabels_) {\n      this.parallelsLabels_.length = 0;\n    }\n    return;\n  }\n\n  var centerLonLat = this.toLonLatTransform_(center);\n  var centerLon = centerLonLat[0];\n  var centerLat = centerLonLat[1];\n  var maxLines = this.maxLines_;\n  var cnt, idx, lat, lon;\n\n  var validExtent = [\n    Math.max(extent[0], this.minLonP_),\n    Math.max(extent[1], this.minLatP_),\n    Math.min(extent[2], this.maxLonP_),\n    Math.min(extent[3], this.maxLatP_)\n  ];\n\n  validExtent = ol.proj.transformExtent(validExtent, this.projection_,\n      'EPSG:4326');\n  var maxLat = validExtent[3];\n  var maxLon = validExtent[2];\n  var minLat = validExtent[1];\n  var minLon = validExtent[0];\n\n  // Create meridians\n\n  centerLon = Math.floor(centerLon / interval) * interval;\n  lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);\n\n  idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);\n\n  cnt = 0;\n  while (lon != this.minLon_ && cnt++ < maxLines) {\n    lon = Math.max(lon - interval, this.minLon_);\n    idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);\n  }\n\n  lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);\n\n  cnt = 0;\n  while (lon != this.maxLon_ && cnt++ < maxLines) {\n    lon = Math.min(lon + interval, this.maxLon_);\n    idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);\n  }\n\n  this.meridians_.length = idx;\n  if (this.meridiansLabels_) {\n    this.meridiansLabels_.length = idx;\n  }\n\n  // Create parallels\n\n  centerLat = Math.floor(centerLat / interval) * interval;\n  lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);\n\n  idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);\n\n  cnt = 0;\n  while (lat != this.minLat_ && cnt++ < maxLines) {\n    lat = Math.max(lat - interval, this.minLat_);\n    idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);\n  }\n\n  lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);\n\n  cnt = 0;\n  while (lat != this.maxLat_ && cnt++ < maxLines) {\n    lat = Math.min(lat + interval, this.maxLat_);\n    idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);\n  }\n\n  this.parallels_.length = idx;\n  if (this.parallelsLabels_) {\n    this.parallelsLabels_.length = idx;\n  }\n\n};\n\n\n/**\n * @param {number} resolution Resolution.\n * @return {number} The interval in degrees.\n * @private\n */\nol.Graticule.prototype.getInterval_ = function(resolution) {\n  var centerLon = this.projectionCenterLonLat_[0];\n  var centerLat = this.projectionCenterLonLat_[1];\n  var interval = -1;\n  var i, ii, delta, dist;\n  var target = Math.pow(this.targetSize_ * resolution, 2);\n  /** @type {Array.<number>} **/\n  var p1 = [];\n  /** @type {Array.<number>} **/\n  var p2 = [];\n  for (i = 0, ii = ol.Graticule.intervals_.length; i < ii; ++i) {\n    delta = ol.Graticule.intervals_[i] / 2;\n    p1[0] = centerLon - delta;\n    p1[1] = centerLat - delta;\n    p2[0] = centerLon + delta;\n    p2[1] = centerLat + delta;\n    this.fromLonLatTransform_(p1, p1);\n    this.fromLonLatTransform_(p2, p2);\n    dist = Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2);\n    if (dist <= target) {\n      break;\n    }\n    interval = ol.Graticule.intervals_[i];\n  }\n  return interval;\n};\n\n\n/**\n * Get the map associated with this graticule.\n * @return {ol.PluggableMap} The map.\n * @api\n */\nol.Graticule.prototype.getMap = function() {\n  return this.map_;\n};\n\n\n/**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {ol.geom.LineString} The meridian line string.\n * @param {number} index Index.\n * @private\n */\nol.Graticule.prototype.getMeridian_ = function(lon, minLat, maxLat,\n    squaredTolerance, index) {\n  var flatCoordinates = ol.geom.flat.geodesic.meridian(lon,\n      minLat, maxLat, this.projection_, squaredTolerance);\n  var lineString = this.meridians_[index] !== undefined ?\n    this.meridians_[index] : new ol.geom.LineString(null);\n  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);\n  return lineString;\n};\n\n\n/**\n * Get the list of meridians.  Meridians are lines of equal longitude.\n * @return {Array.<ol.geom.LineString>} The meridians.\n * @api\n */\nol.Graticule.prototype.getMeridians = function() {\n  return this.meridians_;\n};\n\n\n/**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {ol.geom.LineString} The parallel line string.\n * @param {number} index Index.\n * @private\n */\nol.Graticule.prototype.getParallel_ = function(lat, minLon, maxLon,\n    squaredTolerance, index) {\n  var flatCoordinates = ol.geom.flat.geodesic.parallel(lat,\n      minLon, maxLon, this.projection_, squaredTolerance);\n  var lineString = this.parallels_[index] !== undefined ?\n    this.parallels_[index] : new ol.geom.LineString(null);\n  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);\n  return lineString;\n};\n\n\n/**\n * Get the list of parallels.  Parallels are lines of equal latitude.\n * @return {Array.<ol.geom.LineString>} The parallels.\n * @api\n */\nol.Graticule.prototype.getParallels = function() {\n  return this.parallels_;\n};\n\n\n/**\n * @param {ol.render.Event} e Event.\n * @private\n */\nol.Graticule.prototype.handlePostCompose_ = function(e) {\n  var vectorContext = e.vectorContext;\n  var frameState = e.frameState;\n  var extent = frameState.extent;\n  var viewState = frameState.viewState;\n  var center = viewState.center;\n  var projection = viewState.projection;\n  var resolution = viewState.resolution;\n  var pixelRatio = frameState.pixelRatio;\n  var squaredTolerance =\n      resolution * resolution / (4 * pixelRatio * pixelRatio);\n\n  var updateProjectionInfo = !this.projection_ ||\n      !ol.proj.equivalent(this.projection_, projection);\n\n  if (updateProjectionInfo) {\n    this.updateProjectionInfo_(projection);\n  }\n\n  this.createGraticule_(extent, center, resolution, squaredTolerance);\n\n  // Draw the lines\n  vectorContext.setFillStrokeStyle(null, this.strokeStyle_);\n  var i, l, line;\n  for (i = 0, l = this.meridians_.length; i < l; ++i) {\n    line = this.meridians_[i];\n    vectorContext.drawGeometry(line);\n  }\n  for (i = 0, l = this.parallels_.length; i < l; ++i) {\n    line = this.parallels_[i];\n    vectorContext.drawGeometry(line);\n  }\n  var labelData;\n  if (this.meridiansLabels_) {\n    for (i = 0, l = this.meridiansLabels_.length; i < l; ++i) {\n      labelData = this.meridiansLabels_[i];\n      this.lonLabelStyle_.setText(labelData.text);\n      vectorContext.setTextStyle(this.lonLabelStyle_);\n      vectorContext.drawGeometry(labelData.geom);\n    }\n  }\n  if (this.parallelsLabels_) {\n    for (i = 0, l = this.parallelsLabels_.length; i < l; ++i) {\n      labelData = this.parallelsLabels_[i];\n      this.latLabelStyle_.setText(labelData.text);\n      vectorContext.setTextStyle(this.latLabelStyle_);\n      vectorContext.drawGeometry(labelData.geom);\n    }\n  }\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @private\n */\nol.Graticule.prototype.updateProjectionInfo_ = function(projection) {\n  var epsg4326Projection = ol.proj.get('EPSG:4326');\n\n  var extent = projection.getExtent();\n  var worldExtent = projection.getWorldExtent();\n  var worldExtentP = ol.proj.transformExtent(worldExtent,\n      epsg4326Projection, projection);\n\n  var maxLat = worldExtent[3];\n  var maxLon = worldExtent[2];\n  var minLat = worldExtent[1];\n  var minLon = worldExtent[0];\n\n  var maxLatP = worldExtentP[3];\n  var maxLonP = worldExtentP[2];\n  var minLatP = worldExtentP[1];\n  var minLonP = worldExtentP[0];\n\n  this.maxLat_ = maxLat;\n  this.maxLon_ = maxLon;\n  this.minLat_ = minLat;\n  this.minLon_ = minLon;\n\n  this.maxLatP_ = maxLatP;\n  this.maxLonP_ = maxLonP;\n  this.minLatP_ = minLatP;\n  this.minLonP_ = minLonP;\n\n\n  this.fromLonLatTransform_ = ol.proj.getTransform(\n      epsg4326Projection, projection);\n\n  this.toLonLatTransform_ = ol.proj.getTransform(\n      projection, epsg4326Projection);\n\n  this.projectionCenterLonLat_ = this.toLonLatTransform_(\n      ol.extent.getCenter(extent));\n\n  this.projection_ = projection;\n};\n\n\n/**\n * Set the map for this graticule.  The graticule will be rendered on the\n * provided map.\n * @param {ol.PluggableMap} map Map.\n * @api\n */\nol.Graticule.prototype.setMap = function(map) {\n  if (this.map_) {\n    this.map_.un(ol.render.EventType.POSTCOMPOSE,\n        this.handlePostCompose_, this);\n    this.map_.render();\n  }\n  if (map) {\n    map.on(ol.render.EventType.POSTCOMPOSE,\n        this.handlePostCompose_, this);\n    map.render();\n  }\n  this.map_ = map;\n};\n\ngoog.provide('ol.Image');\n\ngoog.require('ol');\ngoog.require('ol.ImageBase');\ngoog.require('ol.ImageState');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\n\n\n/**\n * @constructor\n * @extends {ol.ImageBase}\n * @param {ol.Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.\n */\nol.Image = function(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {\n\n  ol.ImageBase.call(this, extent, resolution, pixelRatio, ol.ImageState.IDLE);\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.src_ = src;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement|Image|HTMLVideoElement}\n   */\n  this.image_ = new Image();\n  if (crossOrigin !== null) {\n    this.image_.crossOrigin = crossOrigin;\n  }\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.imageListenerKeys_ = null;\n\n  /**\n   * @protected\n   * @type {ol.ImageState}\n   */\n  this.state = ol.ImageState.IDLE;\n\n  /**\n   * @private\n   * @type {ol.ImageLoadFunctionType}\n   */\n  this.imageLoadFunction_ = imageLoadFunction;\n\n};\nol.inherits(ol.Image, ol.ImageBase);\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.Image.prototype.getImage = function() {\n  return this.image_;\n};\n\n\n/**\n * Tracks loading or read errors.\n *\n * @private\n */\nol.Image.prototype.handleImageError_ = function() {\n  this.state = ol.ImageState.ERROR;\n  this.unlistenImage_();\n  this.changed();\n};\n\n\n/**\n * Tracks successful image load.\n *\n * @private\n */\nol.Image.prototype.handleImageLoad_ = function() {\n  if (this.resolution === undefined) {\n    this.resolution = ol.extent.getHeight(this.extent) / this.image_.height;\n  }\n  this.state = ol.ImageState.LOADED;\n  this.unlistenImage_();\n  this.changed();\n};\n\n\n/**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @override\n * @api\n */\nol.Image.prototype.load = function() {\n  if (this.state == ol.ImageState.IDLE || this.state == ol.ImageState.ERROR) {\n    this.state = ol.ImageState.LOADING;\n    this.changed();\n    this.imageListenerKeys_ = [\n      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,\n          this.handleImageError_, this),\n      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,\n          this.handleImageLoad_, this)\n    ];\n    this.imageLoadFunction_(this, this.src_);\n  }\n};\n\n\n/**\n * @param {HTMLCanvasElement|Image|HTMLVideoElement} image Image.\n */\nol.Image.prototype.setImage = function(image) {\n  this.image_ = image;\n};\n\n\n/**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\nol.Image.prototype.unlistenImage_ = function() {\n  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.imageListenerKeys_ = null;\n};\n\ngoog.provide('ol.Tile');\n\ngoog.require('ol');\ngoog.require('ol.TileState');\ngoog.require('ol.easing');\ngoog.require('ol.events.EventTarget');\ngoog.require('ol.events.EventType');\n\n\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @constructor\n * @abstract\n * @extends {ol.events.EventTarget}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {olx.TileOptions=} opt_options Tile options.\n */\nol.Tile = function(tileCoord, state, opt_options) {\n  ol.events.EventTarget.call(this);\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {ol.TileCoord}\n   */\n  this.tileCoord = tileCoord;\n\n  /**\n   * @protected\n   * @type {ol.TileState}\n   */\n  this.state = state;\n\n  /**\n   * An \"interim\" tile for this tile. The interim tile may be used while this\n   * one is loading, for \"smooth\" transitions when changing params/dimensions\n   * on the source.\n   * @type {ol.Tile}\n   */\n  this.interimTile = null;\n\n  /**\n   * A key assigned to the tile. This is used by the tile source to determine\n   * if this tile can effectively be used, or if a new tile should be created\n   * and this one be used as an interim tile for this new tile.\n   * @type {string}\n   */\n  this.key = '';\n\n  /**\n   * The duration for the opacity transition.\n   * @type {number}\n   */\n  this.transition_ = options.transition === undefined ?\n    250 : options.transition;\n\n  /**\n   * Lookup of start times for rendering transitions.  If the start time is\n   * equal to -1, the transition is complete.\n   * @type {Object.<number, number>}\n   */\n  this.transitionStarts_ = {};\n\n};\nol.inherits(ol.Tile, ol.events.EventTarget);\n\n\n/**\n * @protected\n */\nol.Tile.prototype.changed = function() {\n  this.dispatchEvent(ol.events.EventType.CHANGE);\n};\n\n\n/**\n * @return {string} Key.\n */\nol.Tile.prototype.getKey = function() {\n  return this.key + '/' + this.tileCoord;\n};\n\n/**\n * Get the interim tile most suitable for rendering using the chain of interim\n * tiles. This corresponds to the  most recent tile that has been loaded, if no\n * such tile exists, the original tile is returned.\n * @return {!ol.Tile} Best tile for rendering.\n */\nol.Tile.prototype.getInterimTile = function() {\n  if (!this.interimTile) {\n    //empty chain\n    return this;\n  }\n  var tile = this.interimTile;\n\n  // find the first loaded tile and return it. Since the chain is sorted in\n  // decreasing order of creation time, there is no need to search the remainder\n  // of the list (all those tiles correspond to older requests and will be\n  // cleaned up by refreshInterimChain)\n  do {\n    if (tile.getState() == ol.TileState.LOADED) {\n      return tile;\n    }\n    tile = tile.interimTile;\n  } while (tile);\n\n  // we can not find a better tile\n  return this;\n};\n\n/**\n * Goes through the chain of interim tiles and discards sections of the chain\n * that are no longer relevant.\n */\nol.Tile.prototype.refreshInterimChain = function() {\n  if (!this.interimTile) {\n    return;\n  }\n\n  var tile = this.interimTile;\n  var prev = this;\n\n  do {\n    if (tile.getState() == ol.TileState.LOADED) {\n      //we have a loaded tile, we can discard the rest of the list\n      //we would could abort any LOADING tile request\n      //older than this tile (i.e. any LOADING tile following this entry in the chain)\n      tile.interimTile = null;\n      break;\n    } else if (tile.getState() == ol.TileState.LOADING) {\n      //keep this LOADING tile any loaded tiles later in the chain are\n      //older than this tile, so we're still interested in the request\n      prev = tile;\n    } else if (tile.getState() == ol.TileState.IDLE) {\n      //the head of the list is the most current tile, we don't need\n      //to start any other requests for this chain\n      prev.interimTile = tile.interimTile;\n    } else {\n      prev = tile;\n    }\n    tile = prev.interimTile;\n  } while (tile);\n};\n\n/**\n * Get the tile coordinate for this tile.\n * @return {ol.TileCoord} The tile coordinate.\n * @api\n */\nol.Tile.prototype.getTileCoord = function() {\n  return this.tileCoord;\n};\n\n\n/**\n * @return {ol.TileState} State.\n */\nol.Tile.prototype.getState = function() {\n  return this.state;\n};\n\n/**\n * @param {ol.TileState} state State.\n */\nol.Tile.prototype.setState = function(state) {\n  this.state = state;\n  this.changed();\n};\n\n/**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @abstract\n * @api\n */\nol.Tile.prototype.load = function() {};\n\n/**\n * Get the alpha value for rendering.\n * @param {number} id An id for the renderer.\n * @param {number} time The render frame time.\n * @return {number} A number between 0 and 1.\n */\nol.Tile.prototype.getAlpha = function(id, time) {\n  if (!this.transition_) {\n    return 1;\n  }\n\n  var start = this.transitionStarts_[id];\n  if (!start) {\n    start = time;\n    this.transitionStarts_[id] = start;\n  } else if (start === -1) {\n    return 1;\n  }\n\n  var delta = time - start + (1000 / 60); // avoid rendering at 0\n  if (delta >= this.transition_) {\n    return 1;\n  }\n  return ol.easing.easeIn(delta / this.transition_);\n};\n\n/**\n * Determine if a tile is in an alpha transition.  A tile is considered in\n * transition if tile.getAlpha() has not yet been called or has been called\n * and returned 1.\n * @param {number} id An id for the renderer.\n * @return {boolean} The tile is in transition.\n */\nol.Tile.prototype.inTransition = function(id) {\n  if (!this.transition_) {\n    return false;\n  }\n  return this.transitionStarts_[id] !== -1;\n};\n\n/**\n * Mark a transition as complete.\n * @param {number} id An id for the renderer.\n */\nol.Tile.prototype.endTransition = function(id) {\n  if (this.transition_) {\n    this.transitionStarts_[id] = -1;\n  }\n};\n\ngoog.provide('ol.ImageTile');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\n\n\n/**\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.\n * @param {olx.TileOptions=} opt_options Tile options.\n */\nol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {\n\n  ol.Tile.call(this, tileCoord, state, opt_options);\n\n  /**\n   * @private\n   * @type {?string}\n   */\n  this.crossOrigin_ = crossOrigin;\n\n  /**\n   * Image URI\n   *\n   * @private\n   * @type {string}\n   */\n  this.src_ = src;\n\n  /**\n   * @private\n   * @type {Image|HTMLCanvasElement}\n   */\n  this.image_ = new Image();\n  if (crossOrigin !== null) {\n    this.image_.crossOrigin = crossOrigin;\n  }\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.imageListenerKeys_ = null;\n\n  /**\n   * @private\n   * @type {ol.TileLoadFunctionType}\n   */\n  this.tileLoadFunction_ = tileLoadFunction;\n\n};\nol.inherits(ol.ImageTile, ol.Tile);\n\n\n/**\n * @inheritDoc\n */\nol.ImageTile.prototype.disposeInternal = function() {\n  if (this.state == ol.TileState.LOADING) {\n    this.unlistenImage_();\n    this.image_ = ol.ImageTile.getBlankImage();\n  }\n  if (this.interimTile) {\n    this.interimTile.dispose();\n  }\n  this.state = ol.TileState.ABORT;\n  this.changed();\n  ol.Tile.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\nol.ImageTile.prototype.getImage = function() {\n  return this.image_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.ImageTile.prototype.getKey = function() {\n  return this.src_;\n};\n\n\n/**\n * Tracks loading or read errors.\n *\n * @private\n */\nol.ImageTile.prototype.handleImageError_ = function() {\n  this.state = ol.TileState.ERROR;\n  this.unlistenImage_();\n  this.image_ = ol.ImageTile.getBlankImage();\n  this.changed();\n};\n\n\n/**\n * Tracks successful image load.\n *\n * @private\n */\nol.ImageTile.prototype.handleImageLoad_ = function() {\n  if (this.image_.naturalWidth && this.image_.naturalHeight) {\n    this.state = ol.TileState.LOADED;\n  } else {\n    this.state = ol.TileState.EMPTY;\n  }\n  this.unlistenImage_();\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.ImageTile.prototype.load = function() {\n  if (this.state == ol.TileState.ERROR) {\n    this.state = ol.TileState.IDLE;\n    this.image_ = new Image();\n    if (this.crossOrigin_ !== null) {\n      this.image_.crossOrigin = this.crossOrigin_;\n    }\n  }\n  if (this.state == ol.TileState.IDLE) {\n    this.state = ol.TileState.LOADING;\n    this.changed();\n    this.imageListenerKeys_ = [\n      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,\n          this.handleImageError_, this),\n      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,\n          this.handleImageLoad_, this)\n    ];\n    this.tileLoadFunction_(this, this.src_);\n  }\n};\n\n\n/**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\nol.ImageTile.prototype.unlistenImage_ = function() {\n  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.imageListenerKeys_ = null;\n};\n\n\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nol.ImageTile.getBlankImage = function() {\n  var ctx = ol.dom.createCanvasContext2D(1, 1);\n  ctx.fillStyle = 'rgba(0,0,0,0)';\n  ctx.fillRect(0, 0, 1, 1);\n  return ctx.canvas;\n};\n\n// FIXME should handle all geo-referenced data, not just vector data\n\ngoog.provide('ol.interaction.DragAndDrop');\n\ngoog.require('ol');\ngoog.require('ol.functions');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Handles input of vector data by drag and drop.\n *\n * @constructor\n * @extends {ol.interaction.Interaction}\n * @fires ol.interaction.DragAndDrop.Event\n * @param {olx.interaction.DragAndDropOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragAndDrop = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.DragAndDrop.handleEvent\n  });\n\n  /**\n   * @private\n   * @type {Array.<function(new: ol.format.Feature)>}\n   */\n  this.formatConstructors_ = options.formatConstructors ?\n    options.formatConstructors : [];\n\n  /**\n   * @private\n   * @type {ol.proj.Projection}\n   */\n  this.projection_ = options.projection ?\n    ol.proj.get(options.projection) : null;\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.dropListenKeys_ = null;\n\n  /**\n   * @private\n   * @type {ol.source.Vector}\n   */\n  this.source_ = options.source || null;\n\n  /**\n   * @private\n   * @type {Element}\n   */\n  this.target = options.target ? options.target : null;\n\n};\nol.inherits(ol.interaction.DragAndDrop, ol.interaction.Interaction);\n\n\n/**\n * @param {Event} event Event.\n * @this {ol.interaction.DragAndDrop}\n * @private\n */\nol.interaction.DragAndDrop.handleDrop_ = function(event) {\n  var files = event.dataTransfer.files;\n  var i, ii, file;\n  for (i = 0, ii = files.length; i < ii; ++i) {\n    file = files.item(i);\n    var reader = new FileReader();\n    reader.addEventListener(ol.events.EventType.LOAD,\n        this.handleResult_.bind(this, file));\n    reader.readAsText(file);\n  }\n};\n\n\n/**\n * @param {Event} event Event.\n * @private\n */\nol.interaction.DragAndDrop.handleStop_ = function(event) {\n  event.stopPropagation();\n  event.preventDefault();\n  event.dataTransfer.dropEffect = 'copy';\n};\n\n\n/**\n * @param {File} file File.\n * @param {Event} event Load event.\n * @private\n */\nol.interaction.DragAndDrop.prototype.handleResult_ = function(file, event) {\n  var result = event.target.result;\n  var map = this.getMap();\n  var projection = this.projection_;\n  if (!projection) {\n    var view = map.getView();\n    projection = view.getProjection();\n  }\n\n  var formatConstructors = this.formatConstructors_;\n  var features = [];\n  var i, ii;\n  for (i = 0, ii = formatConstructors.length; i < ii; ++i) {\n    /**\n     * Avoid \"cannot instantiate abstract class\" error.\n     * @type {Function}\n     */\n    var formatConstructor = formatConstructors[i];\n    /**\n     * @type {ol.format.Feature}\n     */\n    var format = new formatConstructor();\n    features = this.tryReadFeatures_(format, result, {\n      featureProjection: projection\n    });\n    if (features && features.length > 0) {\n      break;\n    }\n  }\n  if (this.source_) {\n    this.source_.clear();\n    this.source_.addFeatures(features);\n  }\n  this.dispatchEvent(\n      new ol.interaction.DragAndDrop.Event(\n          ol.interaction.DragAndDrop.EventType_.ADD_FEATURES, file,\n          features, projection));\n};\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} unconditionally and\n * neither prevents the browser default nor stops event propagation.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.DragAndDrop}\n * @api\n */\nol.interaction.DragAndDrop.handleEvent = ol.functions.TRUE;\n\n\n/**\n * @private\n */\nol.interaction.DragAndDrop.prototype.registerListeners_ = function() {\n  var map = this.getMap();\n  if (map) {\n    var dropArea = this.target ? this.target : map.getViewport();\n    this.dropListenKeys_ = [\n      ol.events.listen(dropArea, ol.events.EventType.DROP,\n          ol.interaction.DragAndDrop.handleDrop_, this),\n      ol.events.listen(dropArea, ol.events.EventType.DRAGENTER,\n          ol.interaction.DragAndDrop.handleStop_, this),\n      ol.events.listen(dropArea, ol.events.EventType.DRAGOVER,\n          ol.interaction.DragAndDrop.handleStop_, this),\n      ol.events.listen(dropArea, ol.events.EventType.DROP,\n          ol.interaction.DragAndDrop.handleStop_, this)\n    ];\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.DragAndDrop.prototype.setActive = function(active) {\n  ol.interaction.Interaction.prototype.setActive.call(this, active);\n  if (active) {\n    this.registerListeners_();\n  } else {\n    this.unregisterListeners_();\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.DragAndDrop.prototype.setMap = function(map) {\n  this.unregisterListeners_();\n  ol.interaction.Interaction.prototype.setMap.call(this, map);\n  if (this.getActive()) {\n    this.registerListeners_();\n  }\n};\n\n\n/**\n * @param {ol.format.Feature} format Format.\n * @param {string} text Text.\n * @param {olx.format.ReadOptions} options Read options.\n * @private\n * @return {Array.<ol.Feature>} Features.\n */\nol.interaction.DragAndDrop.prototype.tryReadFeatures_ = function(format, text, options) {\n  try {\n    return format.readFeatures(text, options);\n  } catch (e) {\n    return null;\n  }\n};\n\n\n/**\n * @private\n */\nol.interaction.DragAndDrop.prototype.unregisterListeners_ = function() {\n  if (this.dropListenKeys_) {\n    this.dropListenKeys_.forEach(ol.events.unlistenByKey);\n    this.dropListenKeys_ = null;\n  }\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.interaction.DragAndDrop.EventType_ = {\n  /**\n   * Triggered when features are added\n   * @event ol.interaction.DragAndDrop.Event#addfeatures\n   * @api\n   */\n  ADD_FEATURES: 'addfeatures'\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.DragAndDrop} instances are instances\n * of this type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.interaction.DragAndDropEvent}\n * @param {ol.interaction.DragAndDrop.EventType_} type Type.\n * @param {File} file File.\n * @param {Array.<ol.Feature>=} opt_features Features.\n * @param {ol.proj.Projection=} opt_projection Projection.\n */\nol.interaction.DragAndDrop.Event = function(type, file, opt_features, opt_projection) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The features parsed from dropped data.\n   * @type {Array.<ol.Feature>|undefined}\n   * @api\n   */\n  this.features = opt_features;\n\n  /**\n   * The dropped file.\n   * @type {File}\n   * @api\n   */\n  this.file = file;\n\n  /**\n   * The feature projection.\n   * @type {ol.proj.Projection|undefined}\n   * @api\n   */\n  this.projection = opt_projection;\n\n};\nol.inherits(ol.interaction.DragAndDrop.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.DragRotateAndZoom');\n\ngoog.require('ol');\ngoog.require('ol.RotationConstraint');\ngoog.require('ol.ViewHint');\ngoog.require('ol.events.condition');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.interaction.Pointer');\n\n\n/**\n * @classdesc\n * Allows the user to zoom and rotate the map by clicking and dragging\n * on the map.  By default, this interaction is limited to when the shift\n * key is held down.\n *\n * This interaction is only supported for mouse devices.\n *\n * And this interaction is not included in the default interactions.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.DragRotateAndZoomOptions=} opt_options Options.\n * @api\n */\nol.interaction.DragRotateAndZoom = function(opt_options) {\n\n  var options = opt_options ? opt_options : {};\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.DragRotateAndZoom.handleDownEvent_,\n    handleDragEvent: ol.interaction.DragRotateAndZoom.handleDragEvent_,\n    handleUpEvent: ol.interaction.DragRotateAndZoom.handleUpEvent_\n  });\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.shiftKeyOnly;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lastAngle_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.lastMagnitude_ = undefined;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.lastScaleDelta_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n};\nol.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @this {ol.interaction.DragRotateAndZoom}\n * @private\n */\nol.interaction.DragRotateAndZoom.handleDragEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return;\n  }\n\n  var map = mapBrowserEvent.map;\n  var size = map.getSize();\n  var offset = mapBrowserEvent.pixel;\n  var deltaX = offset[0] - size[0] / 2;\n  var deltaY = size[1] / 2 - offset[1];\n  var theta = Math.atan2(deltaY, deltaX);\n  var magnitude = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n  var view = map.getView();\n  if (view.getConstraints().rotation !== ol.RotationConstraint.disable && this.lastAngle_ !== undefined) {\n    var angleDelta = theta - this.lastAngle_;\n    ol.interaction.Interaction.rotateWithoutConstraints(\n        view, view.getRotation() - angleDelta);\n  }\n  this.lastAngle_ = theta;\n  if (this.lastMagnitude_ !== undefined) {\n    var resolution = this.lastMagnitude_ * (view.getResolution() / magnitude);\n    ol.interaction.Interaction.zoomWithoutConstraints(view, resolution);\n  }\n  if (this.lastMagnitude_ !== undefined) {\n    this.lastScaleDelta_ = this.lastMagnitude_ / magnitude;\n  }\n  this.lastMagnitude_ = magnitude;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.DragRotateAndZoom}\n * @private\n */\nol.interaction.DragRotateAndZoom.handleUpEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return true;\n  }\n\n  var map = mapBrowserEvent.map;\n  var view = map.getView();\n  view.setHint(ol.ViewHint.INTERACTING, -1);\n  var direction = this.lastScaleDelta_ - 1;\n  ol.interaction.Interaction.rotate(view, view.getRotation());\n  ol.interaction.Interaction.zoom(view, view.getResolution(),\n      undefined, this.duration_, direction);\n  this.lastScaleDelta_ = 0;\n  return false;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.DragRotateAndZoom}\n * @private\n */\nol.interaction.DragRotateAndZoom.handleDownEvent_ = function(mapBrowserEvent) {\n  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {\n    return false;\n  }\n\n  if (this.condition_(mapBrowserEvent)) {\n    mapBrowserEvent.map.getView().setHint(ol.ViewHint.INTERACTING, 1);\n    this.lastAngle_ = undefined;\n    this.lastMagnitude_ = undefined;\n    return true;\n  } else {\n    return false;\n  }\n};\n\ngoog.provide('ol.interaction.DrawEventType');\n\n\n/**\n * @enum {string}\n */\nol.interaction.DrawEventType = {\n  /**\n   * Triggered upon feature draw start\n   * @event ol.interaction.Draw.Event#drawstart\n   * @api\n   */\n  DRAWSTART: 'drawstart',\n  /**\n   * Triggered upon feature draw end\n   * @event ol.interaction.Draw.Event#drawend\n   * @api\n   */\n  DRAWEND: 'drawend'\n};\n\ngoog.provide('ol.layer.Vector');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.layer.VectorRenderType');\ngoog.require('ol.obj');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link ol.Object}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @constructor\n * @extends {ol.layer.Layer}\n * @fires ol.render.Event\n * @param {olx.layer.VectorOptions=} opt_options Options.\n * @api\n */\nol.layer.Vector = function(opt_options) {\n  var options = opt_options ?\n    opt_options : /** @type {olx.layer.VectorOptions} */ ({});\n\n  var baseOptions = ol.obj.assign({}, options);\n\n  delete baseOptions.style;\n  delete baseOptions.renderBuffer;\n  delete baseOptions.updateWhileAnimating;\n  delete baseOptions.updateWhileInteracting;\n  ol.layer.Layer.call(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.declutter_ = options.declutter !== undefined ? options.declutter : false;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.renderBuffer_ = options.renderBuffer !== undefined ?\n    options.renderBuffer : 100;\n\n  /**\n   * User provided style.\n   * @type {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}\n   * @private\n   */\n  this.style_ = null;\n\n  /**\n   * Style function for use within the library.\n   * @type {ol.StyleFunction|undefined}\n   * @private\n   */\n  this.styleFunction_ = undefined;\n\n  this.setStyle(options.style);\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.updateWhileAnimating_ = options.updateWhileAnimating !== undefined ?\n    options.updateWhileAnimating : false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.updateWhileInteracting_ = options.updateWhileInteracting !== undefined ?\n    options.updateWhileInteracting : false;\n\n  /**\n   * @private\n   * @type {ol.layer.VectorTileRenderType|string}\n   */\n  this.renderMode_ = options.renderMode || ol.layer.VectorRenderType.VECTOR;\n\n  /**\n   * The layer type.\n   * @protected\n   * @type {ol.LayerType}\n   */\n  this.type = ol.LayerType.VECTOR;\n\n};\nol.inherits(ol.layer.Vector, ol.layer.Layer);\n\n\n/**\n * @return {boolean} Declutter.\n */\nol.layer.Vector.prototype.getDeclutter = function() {\n  return this.declutter_;\n};\n\n\n/**\n * @param {boolean} declutter Declutter.\n */\nol.layer.Vector.prototype.setDeclutter = function(declutter) {\n  this.declutter_ = declutter;\n};\n\n\n/**\n * @return {number|undefined} Render buffer.\n */\nol.layer.Vector.prototype.getRenderBuffer = function() {\n  return this.renderBuffer_;\n};\n\n\n/**\n * @return {function(ol.Feature, ol.Feature): number|null|undefined} Render\n *     order.\n */\nol.layer.Vector.prototype.getRenderOrder = function() {\n  return /** @type {ol.RenderOrderFunction|null|undefined} */ (\n    this.get(ol.layer.Vector.Property_.RENDER_ORDER));\n};\n\n\n/**\n * Return the associated {@link ol.source.Vector vectorsource} of the layer.\n * @function\n * @return {ol.source.Vector} Source.\n * @api\n */\nol.layer.Vector.prototype.getSource;\n\n\n/**\n * Get the style for features.  This returns whatever was passed to the `style`\n * option at construction or to the `setStyle` method.\n * @return {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}\n *     Layer style.\n * @api\n */\nol.layer.Vector.prototype.getStyle = function() {\n  return this.style_;\n};\n\n\n/**\n * Get the style function.\n * @return {ol.StyleFunction|undefined} Layer style function.\n * @api\n */\nol.layer.Vector.prototype.getStyleFunction = function() {\n  return this.styleFunction_;\n};\n\n\n/**\n * @return {boolean} Whether the rendered layer should be updated while\n *     animating.\n */\nol.layer.Vector.prototype.getUpdateWhileAnimating = function() {\n  return this.updateWhileAnimating_;\n};\n\n\n/**\n * @return {boolean} Whether the rendered layer should be updated while\n *     interacting.\n */\nol.layer.Vector.prototype.getUpdateWhileInteracting = function() {\n  return this.updateWhileInteracting_;\n};\n\n\n/**\n * @param {ol.RenderOrderFunction|null|undefined} renderOrder\n *     Render order.\n */\nol.layer.Vector.prototype.setRenderOrder = function(renderOrder) {\n  this.set(ol.layer.Vector.Property_.RENDER_ORDER, renderOrder);\n};\n\n\n/**\n * Set the style for features.  This can be a single style object, an array\n * of styles, or a function that takes a feature and resolution and returns\n * an array of styles. If it is `undefined` the default style is used. If\n * it is `null` the layer has no style (a `null` style), so only features\n * that have their own styles will be rendered in the layer. See\n * {@link ol.style} for information on the default style.\n * @param {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|null|undefined}\n *     style Layer style.\n * @api\n */\nol.layer.Vector.prototype.setStyle = function(style) {\n  this.style_ = style !== undefined ? style : ol.style.Style.defaultFunction;\n  this.styleFunction_ = style === null ?\n    undefined : ol.style.Style.createFunction(this.style_);\n  this.changed();\n};\n\n\n/**\n * @return {ol.layer.VectorRenderType|string} The render mode.\n */\nol.layer.Vector.prototype.getRenderMode = function() {\n  return this.renderMode_;\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.layer.Vector.Property_ = {\n  RENDER_ORDER: 'renderOrder'\n};\n\ngoog.provide('ol.loadingstrategy');\n\n\n/**\n * Strategy function for loading all features with a single request.\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array.<ol.Extent>} Extents.\n * @api\n */\nol.loadingstrategy.all = function(extent, resolution) {\n  return [[-Infinity, -Infinity, Infinity, Infinity]];\n};\n\n\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array.<ol.Extent>} Extents.\n * @api\n */\nol.loadingstrategy.bbox = function(extent, resolution) {\n  return [extent];\n};\n\n\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @return {function(ol.Extent, number): Array.<ol.Extent>} Loading strategy.\n * @api\n */\nol.loadingstrategy.tile = function(tileGrid) {\n  return (\n  /**\n       * @param {ol.Extent} extent Extent.\n       * @param {number} resolution Resolution.\n       * @return {Array.<ol.Extent>} Extents.\n       */\n    function(extent, resolution) {\n      var z = tileGrid.getZForResolution(resolution);\n      var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n      /** @type {Array.<ol.Extent>} */\n      var extents = [];\n      /** @type {ol.TileCoord} */\n      var tileCoord = [z, 0, 0];\n      for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX;\n        ++tileCoord[1]) {\n        for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY;\n          ++tileCoord[2]) {\n          extents.push(tileGrid.getTileCoordExtent(tileCoord));\n        }\n      }\n      return extents;\n    });\n};\n\ngoog.provide('ol.source.Source');\n\ngoog.require('ol');\ngoog.require('ol.Attribution');\ngoog.require('ol.Object');\ngoog.require('ol.proj');\ngoog.require('ol.source.State');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for {@link ol.layer.Layer} sources.\n *\n * A generic `change` event is triggered when the state of the source changes.\n *\n * @constructor\n * @abstract\n * @extends {ol.Object}\n * @param {ol.SourceSourceOptions} options Source options.\n * @api\n */\nol.source.Source = function(options) {\n\n  ol.Object.call(this);\n\n  /**\n   * @private\n   * @type {ol.proj.Projection}\n   */\n  this.projection_ = ol.proj.get(options.projection);\n\n  /**\n   * @private\n   * @type {Array.<ol.Attribution>}\n   */\n  this.attributions_ = null;\n\n  /**\n   * @private\n   * @type {?ol.Attribution2}\n   */\n  this.attributions2_ = this.adaptAttributions_(options.attributions);\n\n  /**\n   * @private\n   * @type {string|olx.LogoOptions|undefined}\n   */\n  this.logo_ = options.logo;\n\n  /**\n   * @private\n   * @type {ol.source.State}\n   */\n  this.state_ = options.state !== undefined ?\n    options.state : ol.source.State.READY;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;\n\n};\nol.inherits(ol.source.Source, ol.Object);\n\n/**\n * Turns the attributions option into an attributions function.\n * @suppress {deprecated}\n * @param {ol.AttributionLike|undefined} attributionLike The attribution option.\n * @return {?ol.Attribution2} An attribution function (or null).\n */\nol.source.Source.prototype.adaptAttributions_ = function(attributionLike) {\n  if (!attributionLike) {\n    return null;\n  }\n  if (attributionLike instanceof ol.Attribution) {\n\n    // TODO: remove attributions_ in next major release\n    this.attributions_ = [attributionLike];\n\n    return function(frameState) {\n      return [attributionLike.getHTML()];\n    };\n  }\n  if (Array.isArray(attributionLike)) {\n    if (attributionLike[0] instanceof ol.Attribution) {\n\n      // TODO: remove attributions_ in next major release\n      this.attributions_ = attributionLike;\n\n      var attributions = attributionLike.map(function(attribution) {\n        return attribution.getHTML();\n      });\n      return function(frameState) {\n        return attributions;\n      };\n    }\n\n    // TODO: remove attributions_ in next major release\n    this.attributions_ = attributionLike.map(function(attribution) {\n      return new ol.Attribution({html: attribution});\n    });\n\n    return function(frameState) {\n      return attributionLike;\n    };\n  }\n\n  if (typeof attributionLike === 'function') {\n    return attributionLike;\n  }\n\n  // TODO: remove attributions_ in next major release\n  this.attributions_ = [\n    new ol.Attribution({html: attributionLike})\n  ];\n\n  return function(frameState) {\n    return [attributionLike];\n  };\n};\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {Object.<string, boolean>} skippedFeatureUids Skipped feature uids.\n * @param {function((ol.Feature|ol.render.Feature)): T} callback Feature\n *     callback.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.source.Source.prototype.forEachFeatureAtCoordinate = ol.nullFunction;\n\n\n/**\n * Get the attributions of the source.\n * @return {Array.<ol.Attribution>} Attributions.\n * @api\n */\nol.source.Source.prototype.getAttributions = function() {\n  return this.attributions_;\n};\n\n\n/**\n * Get the attribution function for the source.\n * @return {?ol.Attribution2} Attribution function.\n */\nol.source.Source.prototype.getAttributions2 = function() {\n  return this.attributions2_;\n};\n\n\n/**\n * Get the logo of the source.\n * @return {string|olx.LogoOptions|undefined} Logo.\n * @api\n */\nol.source.Source.prototype.getLogo = function() {\n  return this.logo_;\n};\n\n\n/**\n * Get the projection of the source.\n * @return {ol.proj.Projection} Projection.\n * @api\n */\nol.source.Source.prototype.getProjection = function() {\n  return this.projection_;\n};\n\n\n/**\n * @abstract\n * @return {Array.<number>|undefined} Resolutions.\n */\nol.source.Source.prototype.getResolutions = function() {};\n\n\n/**\n * Get the state of the source, see {@link ol.source.State} for possible states.\n * @return {ol.source.State} State.\n * @api\n */\nol.source.Source.prototype.getState = function() {\n  return this.state_;\n};\n\n\n/**\n * @return {boolean|undefined} Wrap X.\n */\nol.source.Source.prototype.getWrapX = function() {\n  return this.wrapX_;\n};\n\n\n/**\n * Refreshes the source and finally dispatches a 'change' event.\n * @api\n */\nol.source.Source.prototype.refresh = function() {\n  this.changed();\n};\n\n\n/**\n * Set the attributions of the source.\n * @param {ol.AttributionLike|undefined} attributions Attributions.\n *     Can be passed as `string`, `Array<string>`, `{@link ol.Attribution2}`,\n *     or `undefined`.\n * @api\n */\nol.source.Source.prototype.setAttributions = function(attributions) {\n  this.attributions2_ = this.adaptAttributions_(attributions);\n  this.changed();\n};\n\n\n/**\n * Set the logo of the source.\n * @param {string|olx.LogoOptions|undefined} logo Logo.\n */\nol.source.Source.prototype.setLogo = function(logo) {\n  this.logo_ = logo;\n};\n\n\n/**\n * Set the state of the source.\n * @param {ol.source.State} state State.\n * @protected\n */\nol.source.Source.prototype.setState = function(state) {\n  this.state_ = state;\n  this.changed();\n};\n\ngoog.provide('ol.source.VectorEventType');\n\n/**\n * @enum {string}\n */\nol.source.VectorEventType = {\n  /**\n   * Triggered when a feature is added to the source.\n   * @event ol.source.Vector.Event#addfeature\n   * @api\n   */\n  ADDFEATURE: 'addfeature',\n\n  /**\n   * Triggered when a feature is updated.\n   * @event ol.source.Vector.Event#changefeature\n   * @api\n   */\n  CHANGEFEATURE: 'changefeature',\n\n  /**\n   * Triggered when the clear method is called on the source.\n   * @event ol.source.Vector.Event#clear\n   * @api\n   */\n  CLEAR: 'clear',\n\n  /**\n   * Triggered when a feature is removed from the source.\n   * See {@link ol.source.Vector#clear source.clear()} for exceptions.\n   * @event ol.source.Vector.Event#removefeature\n   * @api\n   */\n  REMOVEFEATURE: 'removefeature'\n};\n\ngoog.provide('ol.structs.RBush');\n\ngoog.require('ol');\ngoog.require('ol.ext.rbush');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\n\n\n/**\n * Wrapper around the RBush by Vladimir Agafonkin.\n *\n * @constructor\n * @param {number=} opt_maxEntries Max entries.\n * @see https://github.com/mourner/rbush\n * @struct\n * @template T\n */\nol.structs.RBush = function(opt_maxEntries) {\n\n  /**\n   * @private\n   */\n  this.rbush_ = ol.ext.rbush(opt_maxEntries);\n\n  /**\n   * A mapping between the objects added to this rbush wrapper\n   * and the objects that are actually added to the internal rbush.\n   * @private\n   * @type {Object.<number, ol.RBushEntry>}\n   */\n  this.items_ = {};\n\n};\n\n\n/**\n * Insert a value into the RBush.\n * @param {ol.Extent} extent Extent.\n * @param {T} value Value.\n */\nol.structs.RBush.prototype.insert = function(extent, value) {\n  /** @type {ol.RBushEntry} */\n  var item = {\n    minX: extent[0],\n    minY: extent[1],\n    maxX: extent[2],\n    maxY: extent[3],\n    value: value\n  };\n\n  this.rbush_.insert(item);\n  this.items_[ol.getUid(value)] = item;\n};\n\n\n/**\n * Bulk-insert values into the RBush.\n * @param {Array.<ol.Extent>} extents Extents.\n * @param {Array.<T>} values Values.\n */\nol.structs.RBush.prototype.load = function(extents, values) {\n  var items = new Array(values.length);\n  for (var i = 0, l = values.length; i < l; i++) {\n    var extent = extents[i];\n    var value = values[i];\n\n    /** @type {ol.RBushEntry} */\n    var item = {\n      minX: extent[0],\n      minY: extent[1],\n      maxX: extent[2],\n      maxY: extent[3],\n      value: value\n    };\n    items[i] = item;\n    this.items_[ol.getUid(value)] = item;\n  }\n  this.rbush_.load(items);\n};\n\n\n/**\n * Remove a value from the RBush.\n * @param {T} value Value.\n * @return {boolean} Removed.\n */\nol.structs.RBush.prototype.remove = function(value) {\n  var uid = ol.getUid(value);\n\n  // get the object in which the value was wrapped when adding to the\n  // internal rbush. then use that object to do the removal.\n  var item = this.items_[uid];\n  delete this.items_[uid];\n  return this.rbush_.remove(item) !== null;\n};\n\n\n/**\n * Update the extent of a value in the RBush.\n * @param {ol.Extent} extent Extent.\n * @param {T} value Value.\n */\nol.structs.RBush.prototype.update = function(extent, value) {\n  var item = this.items_[ol.getUid(value)];\n  var bbox = [item.minX, item.minY, item.maxX, item.maxY];\n  if (!ol.extent.equals(bbox, extent)) {\n    this.remove(value);\n    this.insert(extent, value);\n  }\n};\n\n\n/**\n * Return all values in the RBush.\n * @return {Array.<T>} All.\n */\nol.structs.RBush.prototype.getAll = function() {\n  var items = this.rbush_.all();\n  return items.map(function(item) {\n    return item.value;\n  });\n};\n\n\n/**\n * Return all values in the given extent.\n * @param {ol.Extent} extent Extent.\n * @return {Array.<T>} All in extent.\n */\nol.structs.RBush.prototype.getInExtent = function(extent) {\n  /** @type {ol.RBushEntry} */\n  var bbox = {\n    minX: extent[0],\n    minY: extent[1],\n    maxX: extent[2],\n    maxY: extent[3]\n  };\n  var items = this.rbush_.search(bbox);\n  return items.map(function(item) {\n    return item.value;\n  });\n};\n\n\n/**\n * Calls a callback function with each value in the tree.\n * If the callback returns a truthy value, this value is returned without\n * checking the rest of the tree.\n * @param {function(this: S, T): *} callback Callback.\n * @param {S=} opt_this The object to use as `this` in `callback`.\n * @return {*} Callback return value.\n * @template S\n */\nol.structs.RBush.prototype.forEach = function(callback, opt_this) {\n  return this.forEach_(this.getAll(), callback, opt_this);\n};\n\n\n/**\n * Calls a callback function with each value in the provided extent.\n * @param {ol.Extent} extent Extent.\n * @param {function(this: S, T): *} callback Callback.\n * @param {S=} opt_this The object to use as `this` in `callback`.\n * @return {*} Callback return value.\n * @template S\n */\nol.structs.RBush.prototype.forEachInExtent = function(extent, callback, opt_this) {\n  return this.forEach_(this.getInExtent(extent), callback, opt_this);\n};\n\n\n/**\n * @param {Array.<T>} values Values.\n * @param {function(this: S, T): *} callback Callback.\n * @param {S=} opt_this The object to use as `this` in `callback`.\n * @private\n * @return {*} Callback return value.\n * @template S\n */\nol.structs.RBush.prototype.forEach_ = function(values, callback, opt_this) {\n  var result;\n  for (var i = 0, l = values.length; i < l; i++) {\n    result = callback.call(opt_this, values[i]);\n    if (result) {\n      return result;\n    }\n  }\n  return result;\n};\n\n\n/**\n * @return {boolean} Is empty.\n */\nol.structs.RBush.prototype.isEmpty = function() {\n  return ol.obj.isEmpty(this.items_);\n};\n\n\n/**\n * Remove all values from the RBush.\n */\nol.structs.RBush.prototype.clear = function() {\n  this.rbush_.clear();\n  this.items_ = {};\n};\n\n\n/**\n * @param {ol.Extent=} opt_extent Extent.\n * @return {ol.Extent} Extent.\n */\nol.structs.RBush.prototype.getExtent = function(opt_extent) {\n  // FIXME add getExtent() to rbush\n  var data = this.rbush_.data;\n  return ol.extent.createOrUpdate(data.minX, data.minY, data.maxX, data.maxY, opt_extent);\n};\n\n\n/**\n * @param {ol.structs.RBush} rbush R-Tree.\n */\nol.structs.RBush.prototype.concat = function(rbush) {\n  this.rbush_.load(rbush.rbush_.all());\n  for (var i in rbush.items_) {\n    this.items_[i | 0] = rbush.items_[i | 0];\n  }\n};\n\n// FIXME bulk feature upload - suppress events\n// FIXME make change-detection more refined (notably, geometry hint)\n\ngoog.provide('ol.source.Vector');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.ObjectEventType');\ngoog.require('ol.array');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.featureloader');\ngoog.require('ol.functions');\ngoog.require('ol.loadingstrategy');\ngoog.require('ol.obj');\ngoog.require('ol.source.Source');\ngoog.require('ol.source.State');\ngoog.require('ol.source.VectorEventType');\ngoog.require('ol.structs.RBush');\n\n\n/**\n * @classdesc\n * Provides a source of features for vector layers. Vector features provided\n * by this source are suitable for editing. See {@link ol.source.VectorTile} for\n * vector data that is optimized for rendering.\n *\n * @constructor\n * @extends {ol.source.Source}\n * @fires ol.source.Vector.Event\n * @param {olx.source.VectorOptions=} opt_options Vector source options.\n * @api\n */\nol.source.Vector = function(opt_options) {\n\n  var options = opt_options || {};\n\n  ol.source.Source.call(this, {\n    attributions: options.attributions,\n    logo: options.logo,\n    projection: undefined,\n    state: ol.source.State.READY,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true\n  });\n\n  /**\n   * @private\n   * @type {ol.FeatureLoader}\n   */\n  this.loader_ = ol.nullFunction;\n\n  /**\n   * @private\n   * @type {ol.format.Feature|undefined}\n   */\n  this.format_ = options.format;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;\n\n  /**\n   * @private\n   * @type {string|ol.FeatureUrlFunction|undefined}\n   */\n  this.url_ = options.url;\n\n  if (options.loader !== undefined) {\n    this.loader_ = options.loader;\n  } else if (this.url_ !== undefined) {\n    ol.asserts.assert(this.format_, 7); // `format` must be set when `url` is set\n    // create a XHR feature loader for \"url\" and \"format\"\n    this.loader_ = ol.featureloader.xhr(this.url_, /** @type {ol.format.Feature} */ (this.format_));\n  }\n\n  /**\n   * @private\n   * @type {ol.LoadingStrategy}\n   */\n  this.strategy_ = options.strategy !== undefined ? options.strategy :\n    ol.loadingstrategy.all;\n\n  var useSpatialIndex =\n      options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;\n\n  /**\n   * @private\n   * @type {ol.structs.RBush.<ol.Feature>}\n   */\n  this.featuresRtree_ = useSpatialIndex ? new ol.structs.RBush() : null;\n\n  /**\n   * @private\n   * @type {ol.structs.RBush.<{extent: ol.Extent}>}\n   */\n  this.loadedExtentsRtree_ = new ol.structs.RBush();\n\n  /**\n   * @private\n   * @type {Object.<string, ol.Feature>}\n   */\n  this.nullGeometryFeatures_ = {};\n\n  /**\n   * A lookup of features by id (the return from feature.getId()).\n   * @private\n   * @type {Object.<string, ol.Feature>}\n   */\n  this.idIndex_ = {};\n\n  /**\n   * A lookup of features without id (keyed by ol.getUid(feature)).\n   * @private\n   * @type {Object.<string, ol.Feature>}\n   */\n  this.undefIdIndex_ = {};\n\n  /**\n   * @private\n   * @type {Object.<string, Array.<ol.EventsKey>>}\n   */\n  this.featureChangeKeys_ = {};\n\n  /**\n   * @private\n   * @type {ol.Collection.<ol.Feature>}\n   */\n  this.featuresCollection_ = null;\n\n  var collection, features;\n  if (options.features instanceof ol.Collection) {\n    collection = options.features;\n    features = collection.getArray();\n  } else if (Array.isArray(options.features)) {\n    features = options.features;\n  }\n  if (!useSpatialIndex && collection === undefined) {\n    collection = new ol.Collection(features);\n  }\n  if (features !== undefined) {\n    this.addFeaturesInternal(features);\n  }\n  if (collection !== undefined) {\n    this.bindFeaturesCollection_(collection);\n  }\n\n};\nol.inherits(ol.source.Vector, ol.source.Source);\n\n\n/**\n * Add a single feature to the source.  If you want to add a batch of features\n * at once, call {@link ol.source.Vector#addFeatures source.addFeatures()}\n * instead. A feature will not be added to the source if feature with\n * the same id is already there. The reason for this behavior is to avoid\n * feature duplication when using bbox or tile loading strategies.\n * @param {ol.Feature} feature Feature to add.\n * @api\n */\nol.source.Vector.prototype.addFeature = function(feature) {\n  this.addFeatureInternal(feature);\n  this.changed();\n};\n\n\n/**\n * Add a feature without firing a `change` event.\n * @param {ol.Feature} feature Feature.\n * @protected\n */\nol.source.Vector.prototype.addFeatureInternal = function(feature) {\n  var featureKey = ol.getUid(feature).toString();\n\n  if (!this.addToIndex_(featureKey, feature)) {\n    return;\n  }\n\n  this.setupChangeEvents_(featureKey, feature);\n\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    var extent = geometry.getExtent();\n    if (this.featuresRtree_) {\n      this.featuresRtree_.insert(extent, feature);\n    }\n  } else {\n    this.nullGeometryFeatures_[featureKey] = feature;\n  }\n\n  this.dispatchEvent(\n      new ol.source.Vector.Event(ol.source.VectorEventType.ADDFEATURE, feature));\n};\n\n\n/**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {ol.Feature} feature The feature.\n * @private\n */\nol.source.Vector.prototype.setupChangeEvents_ = function(featureKey, feature) {\n  this.featureChangeKeys_[featureKey] = [\n    ol.events.listen(feature, ol.events.EventType.CHANGE,\n        this.handleFeatureChange_, this),\n    ol.events.listen(feature, ol.ObjectEventType.PROPERTYCHANGE,\n        this.handleFeatureChange_, this)\n  ];\n};\n\n\n/**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {ol.Feature} feature The feature.\n * @return {boolean} The feature is \"valid\", in the sense that it is also a\n *     candidate for insertion into the Rtree.\n * @private\n */\nol.source.Vector.prototype.addToIndex_ = function(featureKey, feature) {\n  var valid = true;\n  var id = feature.getId();\n  if (id !== undefined) {\n    if (!(id.toString() in this.idIndex_)) {\n      this.idIndex_[id.toString()] = feature;\n    } else {\n      valid = false;\n    }\n  } else {\n    ol.asserts.assert(!(featureKey in this.undefIdIndex_),\n        30); // The passed `feature` was already added to the source\n    this.undefIdIndex_[featureKey] = feature;\n  }\n  return valid;\n};\n\n\n/**\n * Add a batch of features to the source.\n * @param {Array.<ol.Feature>} features Features to add.\n * @api\n */\nol.source.Vector.prototype.addFeatures = function(features) {\n  this.addFeaturesInternal(features);\n  this.changed();\n};\n\n\n/**\n * Add features without firing a `change` event.\n * @param {Array.<ol.Feature>} features Features.\n * @protected\n */\nol.source.Vector.prototype.addFeaturesInternal = function(features) {\n  var featureKey, i, length, feature;\n\n  var extents = [];\n  var newFeatures = [];\n  var geometryFeatures = [];\n\n  for (i = 0, length = features.length; i < length; i++) {\n    feature = features[i];\n    featureKey = ol.getUid(feature).toString();\n    if (this.addToIndex_(featureKey, feature)) {\n      newFeatures.push(feature);\n    }\n  }\n\n  for (i = 0, length = newFeatures.length; i < length; i++) {\n    feature = newFeatures[i];\n    featureKey = ol.getUid(feature).toString();\n    this.setupChangeEvents_(featureKey, feature);\n\n    var geometry = feature.getGeometry();\n    if (geometry) {\n      var extent = geometry.getExtent();\n      extents.push(extent);\n      geometryFeatures.push(feature);\n    } else {\n      this.nullGeometryFeatures_[featureKey] = feature;\n    }\n  }\n  if (this.featuresRtree_) {\n    this.featuresRtree_.load(extents, geometryFeatures);\n  }\n\n  for (i = 0, length = newFeatures.length; i < length; i++) {\n    this.dispatchEvent(new ol.source.Vector.Event(\n        ol.source.VectorEventType.ADDFEATURE, newFeatures[i]));\n  }\n};\n\n\n/**\n * @param {!ol.Collection.<ol.Feature>} collection Collection.\n * @private\n */\nol.source.Vector.prototype.bindFeaturesCollection_ = function(collection) {\n  var modifyingCollection = false;\n  ol.events.listen(this, ol.source.VectorEventType.ADDFEATURE,\n      function(evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          collection.push(evt.feature);\n          modifyingCollection = false;\n        }\n      });\n  ol.events.listen(this, ol.source.VectorEventType.REMOVEFEATURE,\n      function(evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          collection.remove(evt.feature);\n          modifyingCollection = false;\n        }\n      });\n  ol.events.listen(collection, ol.CollectionEventType.ADD,\n      function(evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          this.addFeature(/** @type {ol.Feature} */ (evt.element));\n          modifyingCollection = false;\n        }\n      }, this);\n  ol.events.listen(collection, ol.CollectionEventType.REMOVE,\n      function(evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          this.removeFeature(/** @type {ol.Feature} */ (evt.element));\n          modifyingCollection = false;\n        }\n      }, this);\n  this.featuresCollection_ = collection;\n};\n\n\n/**\n * Remove all features from the source.\n * @param {boolean=} opt_fast Skip dispatching of {@link removefeature} events.\n * @api\n */\nol.source.Vector.prototype.clear = function(opt_fast) {\n  if (opt_fast) {\n    for (var featureId in this.featureChangeKeys_) {\n      var keys = this.featureChangeKeys_[featureId];\n      keys.forEach(ol.events.unlistenByKey);\n    }\n    if (!this.featuresCollection_) {\n      this.featureChangeKeys_ = {};\n      this.idIndex_ = {};\n      this.undefIdIndex_ = {};\n    }\n  } else {\n    if (this.featuresRtree_) {\n      this.featuresRtree_.forEach(this.removeFeatureInternal, this);\n      for (var id in this.nullGeometryFeatures_) {\n        this.removeFeatureInternal(this.nullGeometryFeatures_[id]);\n      }\n    }\n  }\n  if (this.featuresCollection_) {\n    this.featuresCollection_.clear();\n  }\n\n  if (this.featuresRtree_) {\n    this.featuresRtree_.clear();\n  }\n  this.loadedExtentsRtree_.clear();\n  this.nullGeometryFeatures_ = {};\n\n  var clearEvent = new ol.source.Vector.Event(ol.source.VectorEventType.CLEAR);\n  this.dispatchEvent(clearEvent);\n  this.changed();\n};\n\n\n/**\n * Iterate through all features on the source, calling the provided callback\n * with each one.  If the callback returns any \"truthy\" value, iteration will\n * stop and the function will return the same value.\n *\n * @param {function(this: T, ol.Feature): S} callback Called with each feature\n *     on the source.  Return a truthy value to stop iteration.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @return {S|undefined} The return value from the last call to the callback.\n * @template T,S\n * @api\n */\nol.source.Vector.prototype.forEachFeature = function(callback, opt_this) {\n  if (this.featuresRtree_) {\n    return this.featuresRtree_.forEach(callback, opt_this);\n  } else if (this.featuresCollection_) {\n    return this.featuresCollection_.forEach(callback, opt_this);\n  }\n};\n\n\n/**\n * Iterate through all features whose geometries contain the provided\n * coordinate, calling the callback with each feature.  If the callback returns\n * a \"truthy\" value, iteration will stop and the function will return the same\n * value.\n *\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {function(this: T, ol.Feature): S} callback Called with each feature\n *     whose goemetry contains the provided coordinate.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @return {S|undefined} The return value from the last call to the callback.\n * @template T,S\n */\nol.source.Vector.prototype.forEachFeatureAtCoordinateDirect = function(coordinate, callback, opt_this) {\n  var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];\n  return this.forEachFeatureInExtent(extent, function(feature) {\n    var geometry = feature.getGeometry();\n    if (geometry.intersectsCoordinate(coordinate)) {\n      return callback.call(opt_this, feature);\n    } else {\n      return undefined;\n    }\n  });\n};\n\n\n/**\n * Iterate through all features whose bounding box intersects the provided\n * extent (note that the feature's geometry may not intersect the extent),\n * calling the callback with each feature.  If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you are interested in features whose geometry intersects an extent, call\n * the {@link ol.source.Vector#forEachFeatureIntersectingExtent\n * source.forEachFeatureIntersectingExtent()} method instead.\n *\n * When `useSpatialIndex` is set to false, this method will loop through all\n * features, equivalent to {@link ol.source.Vector#forEachFeature}.\n *\n * @param {ol.Extent} extent Extent.\n * @param {function(this: T, ol.Feature): S} callback Called with each feature\n *     whose bounding box intersects the provided extent.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @return {S|undefined} The return value from the last call to the callback.\n * @template T,S\n * @api\n */\nol.source.Vector.prototype.forEachFeatureInExtent = function(extent, callback, opt_this) {\n  if (this.featuresRtree_) {\n    return this.featuresRtree_.forEachInExtent(extent, callback, opt_this);\n  } else if (this.featuresCollection_) {\n    return this.featuresCollection_.forEach(callback, opt_this);\n  }\n};\n\n\n/**\n * Iterate through all features whose geometry intersects the provided extent,\n * calling the callback with each feature.  If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you only want to test for bounding box intersection, call the\n * {@link ol.source.Vector#forEachFeatureInExtent\n * source.forEachFeatureInExtent()} method instead.\n *\n * @param {ol.Extent} extent Extent.\n * @param {function(this: T, ol.Feature): S} callback Called with each feature\n *     whose geometry intersects the provided extent.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @return {S|undefined} The return value from the last call to the callback.\n * @template T,S\n * @api\n */\nol.source.Vector.prototype.forEachFeatureIntersectingExtent = function(extent, callback, opt_this) {\n  return this.forEachFeatureInExtent(extent,\n      /**\n       * @param {ol.Feature} feature Feature.\n       * @return {S|undefined} The return value from the last call to the callback.\n       * @template S\n       */\n      function(feature) {\n        var geometry = feature.getGeometry();\n        if (geometry.intersectsExtent(extent)) {\n          var result = callback.call(opt_this, feature);\n          if (result) {\n            return result;\n          }\n        }\n      });\n};\n\n\n/**\n * Get the features collection associated with this source. Will be `null`\n * unless the source was configured with `useSpatialIndex` set to `false`, or\n * with an {@link ol.Collection} as `features`.\n * @return {ol.Collection.<ol.Feature>} The collection of features.\n * @api\n */\nol.source.Vector.prototype.getFeaturesCollection = function() {\n  return this.featuresCollection_;\n};\n\n\n/**\n * Get all features on the source in random order.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.source.Vector.prototype.getFeatures = function() {\n  var features;\n  if (this.featuresCollection_) {\n    features = this.featuresCollection_.getArray();\n  } else if (this.featuresRtree_) {\n    features = this.featuresRtree_.getAll();\n    if (!ol.obj.isEmpty(this.nullGeometryFeatures_)) {\n      ol.array.extend(\n          features, ol.obj.getValues(this.nullGeometryFeatures_));\n    }\n  }\n  return /** @type {Array.<ol.Feature>} */ (features);\n};\n\n\n/**\n * Get all features whose geometry intersects the provided coordinate.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.source.Vector.prototype.getFeaturesAtCoordinate = function(coordinate) {\n  var features = [];\n  this.forEachFeatureAtCoordinateDirect(coordinate, function(feature) {\n    features.push(feature);\n  });\n  return features;\n};\n\n\n/**\n * Get all features in the provided extent.  Note that this returns an array of\n * all features intersecting the given extent in random order (so it may include\n * features whose geometries do not intersect the extent).\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {ol.Extent} extent Extent.\n * @return {Array.<ol.Feature>} Features.\n * @api\n */\nol.source.Vector.prototype.getFeaturesInExtent = function(extent) {\n  return this.featuresRtree_.getInExtent(extent);\n};\n\n\n/**\n * Get the closest feature to the provided coordinate.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {function(ol.Feature):boolean=} opt_filter Feature filter function.\n *     The filter function will receive one argument, the {@link ol.Feature feature}\n *     and it should return a boolean value. By default, no filtering is made.\n * @return {ol.Feature} Closest feature.\n * @api\n */\nol.source.Vector.prototype.getClosestFeatureToCoordinate = function(coordinate, opt_filter) {\n  // Find the closest feature using branch and bound.  We start searching an\n  // infinite extent, and find the distance from the first feature found.  This\n  // becomes the closest feature.  We then compute a smaller extent which any\n  // closer feature must intersect.  We continue searching with this smaller\n  // extent, trying to find a closer feature.  Every time we find a closer\n  // feature, we update the extent being searched so that any even closer\n  // feature must intersect it.  We continue until we run out of features.\n  var x = coordinate[0];\n  var y = coordinate[1];\n  var closestFeature = null;\n  var closestPoint = [NaN, NaN];\n  var minSquaredDistance = Infinity;\n  var extent = [-Infinity, -Infinity, Infinity, Infinity];\n  var filter = opt_filter ? opt_filter : ol.functions.TRUE;\n  this.featuresRtree_.forEachInExtent(extent,\n      /**\n       * @param {ol.Feature} feature Feature.\n       */\n      function(feature) {\n        if (filter(feature)) {\n          var geometry = feature.getGeometry();\n          var previousMinSquaredDistance = minSquaredDistance;\n          minSquaredDistance = geometry.closestPointXY(\n              x, y, closestPoint, minSquaredDistance);\n          if (minSquaredDistance < previousMinSquaredDistance) {\n            closestFeature = feature;\n            // This is sneaky.  Reduce the extent that it is currently being\n            // searched while the R-Tree traversal using this same extent object\n            // is still in progress.  This is safe because the new extent is\n            // strictly contained by the old extent.\n            var minDistance = Math.sqrt(minSquaredDistance);\n            extent[0] = x - minDistance;\n            extent[1] = y - minDistance;\n            extent[2] = x + minDistance;\n            extent[3] = y + minDistance;\n          }\n        }\n      });\n  return closestFeature;\n};\n\n\n/**\n * Get the extent of the features currently in the source.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {ol.Extent=} opt_extent Destination extent. If provided, no new extent\n *     will be created. Instead, that extent's coordinates will be overwritten.\n * @return {ol.Extent} Extent.\n * @api\n */\nol.source.Vector.prototype.getExtent = function(opt_extent) {\n  return this.featuresRtree_.getExtent(opt_extent);\n};\n\n\n/**\n * Get a feature by its identifier (the value returned by feature.getId()).\n * Note that the index treats string and numeric identifiers as the same.  So\n * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.\n *\n * @param {string|number} id Feature identifier.\n * @return {ol.Feature} The feature (or `null` if not found).\n * @api\n */\nol.source.Vector.prototype.getFeatureById = function(id) {\n  var feature = this.idIndex_[id.toString()];\n  return feature !== undefined ? feature : null;\n};\n\n\n/**\n * Get the format associated with this source.\n *\n * @return {ol.format.Feature|undefined} The feature format.\n * @api\n */\nol.source.Vector.prototype.getFormat = function() {\n  return this.format_;\n};\n\n\n/**\n * @return {boolean} The source can have overlapping geometries.\n */\nol.source.Vector.prototype.getOverlaps = function() {\n  return this.overlaps_;\n};\n\n\n/**\n * @override\n */\nol.source.Vector.prototype.getResolutions = function() {};\n\n\n/**\n * Get the url associated with this source.\n *\n * @return {string|ol.FeatureUrlFunction|undefined} The url.\n * @api\n */\nol.source.Vector.prototype.getUrl = function() {\n  return this.url_;\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n * @private\n */\nol.source.Vector.prototype.handleFeatureChange_ = function(event) {\n  var feature = /** @type {ol.Feature} */ (event.target);\n  var featureKey = ol.getUid(feature).toString();\n  var geometry = feature.getGeometry();\n  if (!geometry) {\n    if (!(featureKey in this.nullGeometryFeatures_)) {\n      if (this.featuresRtree_) {\n        this.featuresRtree_.remove(feature);\n      }\n      this.nullGeometryFeatures_[featureKey] = feature;\n    }\n  } else {\n    var extent = geometry.getExtent();\n    if (featureKey in this.nullGeometryFeatures_) {\n      delete this.nullGeometryFeatures_[featureKey];\n      if (this.featuresRtree_) {\n        this.featuresRtree_.insert(extent, feature);\n      }\n    } else {\n      if (this.featuresRtree_) {\n        this.featuresRtree_.update(extent, feature);\n      }\n    }\n  }\n  var id = feature.getId();\n  if (id !== undefined) {\n    var sid = id.toString();\n    if (featureKey in this.undefIdIndex_) {\n      delete this.undefIdIndex_[featureKey];\n      this.idIndex_[sid] = feature;\n    } else {\n      if (this.idIndex_[sid] !== feature) {\n        this.removeFromIdIndex_(feature);\n        this.idIndex_[sid] = feature;\n      }\n    }\n  } else {\n    if (!(featureKey in this.undefIdIndex_)) {\n      this.removeFromIdIndex_(feature);\n      this.undefIdIndex_[featureKey] = feature;\n    }\n  }\n  this.changed();\n  this.dispatchEvent(new ol.source.Vector.Event(\n      ol.source.VectorEventType.CHANGEFEATURE, feature));\n};\n\n\n/**\n * @return {boolean} Is empty.\n */\nol.source.Vector.prototype.isEmpty = function() {\n  return this.featuresRtree_.isEmpty() &&\n      ol.obj.isEmpty(this.nullGeometryFeatures_);\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {ol.proj.Projection} projection Projection.\n */\nol.source.Vector.prototype.loadFeatures = function(\n    extent, resolution, projection) {\n  var loadedExtentsRtree = this.loadedExtentsRtree_;\n  var extentsToLoad = this.strategy_(extent, resolution);\n  var i, ii;\n  for (i = 0, ii = extentsToLoad.length; i < ii; ++i) {\n    var extentToLoad = extentsToLoad[i];\n    var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad,\n        /**\n         * @param {{extent: ol.Extent}} object Object.\n         * @return {boolean} Contains.\n         */\n        function(object) {\n          return ol.extent.containsExtent(object.extent, extentToLoad);\n        });\n    if (!alreadyLoaded) {\n      this.loader_.call(this, extentToLoad, resolution, projection);\n      loadedExtentsRtree.insert(extentToLoad, {extent: extentToLoad.slice()});\n    }\n  }\n};\n\n\n/**\n * Remove an extent from the list of loaded extents.\n * @param {ol.Extent} extent Extent.\n * @api\n */\nol.source.Vector.prototype.removeLoadedExtent = function(extent) {\n  var loadedExtentsRtree = this.loadedExtentsRtree_;\n  var obj;\n  loadedExtentsRtree.forEachInExtent(extent, function(object) {\n    if (ol.extent.equals(object.extent, extent)) {\n      obj = object;\n      return true;\n    }\n  });\n  if (obj) {\n    loadedExtentsRtree.remove(obj);\n  }\n};\n\n\n/**\n * Remove a single feature from the source.  If you want to remove all features\n * at once, use the {@link ol.source.Vector#clear source.clear()} method\n * instead.\n * @param {ol.Feature} feature Feature to remove.\n * @api\n */\nol.source.Vector.prototype.removeFeature = function(feature) {\n  var featureKey = ol.getUid(feature).toString();\n  if (featureKey in this.nullGeometryFeatures_) {\n    delete this.nullGeometryFeatures_[featureKey];\n  } else {\n    if (this.featuresRtree_) {\n      this.featuresRtree_.remove(feature);\n    }\n  }\n  this.removeFeatureInternal(feature);\n  this.changed();\n};\n\n\n/**\n * Remove feature without firing a `change` event.\n * @param {ol.Feature} feature Feature.\n * @protected\n */\nol.source.Vector.prototype.removeFeatureInternal = function(feature) {\n  var featureKey = ol.getUid(feature).toString();\n  this.featureChangeKeys_[featureKey].forEach(ol.events.unlistenByKey);\n  delete this.featureChangeKeys_[featureKey];\n  var id = feature.getId();\n  if (id !== undefined) {\n    delete this.idIndex_[id.toString()];\n  } else {\n    delete this.undefIdIndex_[featureKey];\n  }\n  this.dispatchEvent(new ol.source.Vector.Event(\n      ol.source.VectorEventType.REMOVEFEATURE, feature));\n};\n\n\n/**\n * Remove a feature from the id index.  Called internally when the feature id\n * may have changed.\n * @param {ol.Feature} feature The feature.\n * @return {boolean} Removed the feature from the index.\n * @private\n */\nol.source.Vector.prototype.removeFromIdIndex_ = function(feature) {\n  var removed = false;\n  for (var id in this.idIndex_) {\n    if (this.idIndex_[id] === feature) {\n      delete this.idIndex_[id];\n      removed = true;\n      break;\n    }\n  }\n  return removed;\n};\n\n\n/**\n * Set the new loader of the source. The next loadFeatures call will use the\n * new loader.\n * @param {ol.FeatureLoader} loader The loader to set.\n * @api\n */\nol.source.Vector.prototype.setLoader = function(loader) {\n  this.loader_ = loader;\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.source.Vector} instances are instances of this\n * type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.source.Vector.Event}\n * @param {string} type Type.\n * @param {ol.Feature=} opt_feature Feature.\n */\nol.source.Vector.Event = function(type, opt_feature) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The feature being added or removed.\n   * @type {ol.Feature|undefined}\n   * @api\n   */\n  this.feature = opt_feature;\n\n};\nol.inherits(ol.source.Vector.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.Draw');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.Object');\ngoog.require('ol.coordinate');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.condition');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.geom.Circle');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.interaction.DrawEventType');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.interaction.Property');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.source.Vector');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * Interaction for drawing feature geometries.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @fires ol.interaction.Draw.Event\n * @param {olx.interaction.DrawOptions} options Options.\n * @api\n */\nol.interaction.Draw = function(options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.Draw.handleDownEvent_,\n    handleEvent: ol.interaction.Draw.handleEvent,\n    handleUpEvent: ol.interaction.Draw.handleUpEvent_\n  });\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.shouldHandle_ = false;\n\n  /**\n   * @type {ol.Pixel}\n   * @private\n   */\n  this.downPx_ = null;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.freehand_ = false;\n\n  /**\n   * Target source for drawn features.\n   * @type {ol.source.Vector}\n   * @private\n   */\n  this.source_ = options.source ? options.source : null;\n\n  /**\n   * Target collection for drawn features.\n   * @type {ol.Collection.<ol.Feature>}\n   * @private\n   */\n  this.features_ = options.features ? options.features : null;\n\n  /**\n   * Pixel distance for snapping.\n   * @type {number}\n   * @private\n   */\n  this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;\n\n  /**\n   * Geometry type.\n   * @type {ol.geom.GeometryType}\n   * @private\n   */\n  this.type_ = /** @type {ol.geom.GeometryType} */ (options.type);\n\n  /**\n   * Drawing mode (derived from geometry type.\n   * @type {ol.interaction.Draw.Mode_}\n   * @private\n   */\n  this.mode_ = ol.interaction.Draw.getMode_(this.type_);\n\n  /**\n   * Stop click, singleclick, and doubleclick events from firing during drawing.\n   * Default is `false`.\n   * @type {boolean}\n   * @private\n   */\n  this.stopClick_ = !!options.stopClick;\n\n  /**\n   * The number of points that must be drawn before a polygon ring or line\n   * string can be finished.  The default is 3 for polygon rings and 2 for\n   * line strings.\n   * @type {number}\n   * @private\n   */\n  this.minPoints_ = options.minPoints ?\n    options.minPoints :\n    (this.mode_ === ol.interaction.Draw.Mode_.POLYGON ? 3 : 2);\n\n  /**\n   * The number of points that can be drawn before a polygon ring or line string\n   * is finished. The default is no restriction.\n   * @type {number}\n   * @private\n   */\n  this.maxPoints_ = options.maxPoints ? options.maxPoints : Infinity;\n\n  /**\n   * A function to decide if a potential finish coordinate is permissible\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.finishCondition_ = options.finishCondition ? options.finishCondition : ol.functions.TRUE;\n\n  var geometryFunction = options.geometryFunction;\n  if (!geometryFunction) {\n    if (this.type_ === ol.geom.GeometryType.CIRCLE) {\n      /**\n       * @param {!Array.<ol.Coordinate>} coordinates\n       *     The coordinates.\n       * @param {ol.geom.SimpleGeometry=} opt_geometry Optional geometry.\n       * @return {ol.geom.SimpleGeometry} A geometry.\n       */\n      geometryFunction = function(coordinates, opt_geometry) {\n        var circle = opt_geometry ? /** @type {ol.geom.Circle} */ (opt_geometry) :\n          new ol.geom.Circle([NaN, NaN]);\n        var squaredLength = ol.coordinate.squaredDistance(\n            coordinates[0], coordinates[1]);\n        circle.setCenterAndRadius(coordinates[0], Math.sqrt(squaredLength));\n        return circle;\n      };\n    } else {\n      var Constructor;\n      var mode = this.mode_;\n      if (mode === ol.interaction.Draw.Mode_.POINT) {\n        Constructor = ol.geom.Point;\n      } else if (mode === ol.interaction.Draw.Mode_.LINE_STRING) {\n        Constructor = ol.geom.LineString;\n      } else if (mode === ol.interaction.Draw.Mode_.POLYGON) {\n        Constructor = ol.geom.Polygon;\n      }\n      /**\n       * @param {!Array.<ol.Coordinate>} coordinates\n       *     The coordinates.\n       * @param {ol.geom.SimpleGeometry=} opt_geometry Optional geometry.\n       * @return {ol.geom.SimpleGeometry} A geometry.\n       */\n      geometryFunction = function(coordinates, opt_geometry) {\n        var geometry = opt_geometry;\n        if (geometry) {\n          if (mode === ol.interaction.Draw.Mode_.POLYGON) {\n            if (coordinates[0].length) {\n              // Add a closing coordinate to match the first\n              geometry.setCoordinates([coordinates[0].concat([coordinates[0][0]])]);\n            } else {\n              geometry.setCoordinates([]);\n            }\n          } else {\n            geometry.setCoordinates(coordinates);\n          }\n        } else {\n          geometry = new Constructor(coordinates);\n        }\n        return geometry;\n      };\n    }\n  }\n\n  /**\n   * @type {ol.DrawGeometryFunctionType}\n   * @private\n   */\n  this.geometryFunction_ = geometryFunction;\n\n  /**\n   * Finish coordinate for the feature (first point for polygons, last point for\n   * linestrings).\n   * @type {ol.Coordinate}\n   * @private\n   */\n  this.finishCoordinate_ = null;\n\n  /**\n   * Sketch feature.\n   * @type {ol.Feature}\n   * @private\n   */\n  this.sketchFeature_ = null;\n\n  /**\n   * Sketch point.\n   * @type {ol.Feature}\n   * @private\n   */\n  this.sketchPoint_ = null;\n\n  /**\n   * Sketch coordinates. Used when drawing a line or polygon.\n   * @type {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>}\n   * @private\n   */\n  this.sketchCoords_ = null;\n\n  /**\n   * Sketch line. Used when drawing polygon.\n   * @type {ol.Feature}\n   * @private\n   */\n  this.sketchLine_ = null;\n\n  /**\n   * Sketch line coordinates. Used when drawing a polygon or circle.\n   * @type {Array.<ol.Coordinate>}\n   * @private\n   */\n  this.sketchLineCoords_ = null;\n\n  /**\n   * Squared tolerance for handling up events.  If the squared distance\n   * between a down and up event is greater than this tolerance, up events\n   * will not be handled.\n   * @type {number}\n   * @private\n   */\n  this.squaredClickTolerance_ = options.clickTolerance ?\n    options.clickTolerance * options.clickTolerance : 36;\n\n  /**\n   * Draw overlay where our sketch features are drawn.\n   * @type {ol.layer.Vector}\n   * @private\n   */\n  this.overlay_ = new ol.layer.Vector({\n    source: new ol.source.Vector({\n      useSpatialIndex: false,\n      wrapX: options.wrapX ? options.wrapX : false\n    }),\n    style: options.style ? options.style :\n      ol.interaction.Draw.getDefaultStyleFunction()\n  });\n\n  /**\n   * Name of the geometry attribute for newly created features.\n   * @type {string|undefined}\n   * @private\n   */\n  this.geometryName_ = options.geometryName;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.noModifierKeys;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.freehandCondition_;\n  if (options.freehand) {\n    this.freehandCondition_ = ol.events.condition.always;\n  } else {\n    this.freehandCondition_ = options.freehandCondition ?\n      options.freehandCondition : ol.events.condition.shiftKeyOnly;\n  }\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.interaction.Property.ACTIVE),\n      this.updateState_, this);\n\n};\nol.inherits(ol.interaction.Draw, ol.interaction.Pointer);\n\n\n/**\n * @return {ol.StyleFunction} Styles.\n */\nol.interaction.Draw.getDefaultStyleFunction = function() {\n  var styles = ol.style.Style.createDefaultEditing();\n  return function(feature, resolution) {\n    return styles[feature.getGeometry().getType()];\n  };\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Draw.prototype.setMap = function(map) {\n  ol.interaction.Pointer.prototype.setMap.call(this, map);\n  this.updateState_();\n};\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} and may actually\n * draw or finish the drawing.\n * @param {ol.MapBrowserEvent} event Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.Draw}\n * @api\n */\nol.interaction.Draw.handleEvent = function(event) {\n  this.freehand_ = this.mode_ !== ol.interaction.Draw.Mode_.POINT && this.freehandCondition_(event);\n  var pass = true;\n  if (this.freehand_ &&\n      event.type === ol.MapBrowserEventType.POINTERDRAG &&\n      this.sketchFeature_ !== null) {\n    this.addToDrawing_(event);\n    pass = false;\n  } else if (this.freehand_ &&\n      event.type === ol.MapBrowserEventType.POINTERDOWN) {\n    pass = false;\n  } else if (event.type === ol.MapBrowserEventType.POINTERMOVE) {\n    pass = this.handlePointerMove_(event);\n  } else if (event.type === ol.MapBrowserEventType.DBLCLICK) {\n    pass = false;\n  }\n  return ol.interaction.Pointer.handleEvent.call(this, event) && pass;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} event Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.Draw}\n * @private\n */\nol.interaction.Draw.handleDownEvent_ = function(event) {\n  this.shouldHandle_ = !this.freehand_;\n\n  if (this.freehand_) {\n    this.downPx_ = event.pixel;\n    if (!this.finishCoordinate_) {\n      this.startDrawing_(event);\n    }\n    return true;\n  } else if (this.condition_(event)) {\n    this.downPx_ = event.pixel;\n    return true;\n  } else {\n    return false;\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} event Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.Draw}\n * @private\n */\nol.interaction.Draw.handleUpEvent_ = function(event) {\n  var pass = true;\n\n  this.handlePointerMove_(event);\n\n  var circleMode = this.mode_ === ol.interaction.Draw.Mode_.CIRCLE;\n\n  if (this.shouldHandle_) {\n    if (!this.finishCoordinate_) {\n      this.startDrawing_(event);\n      if (this.mode_ === ol.interaction.Draw.Mode_.POINT) {\n        this.finishDrawing();\n      }\n    } else if (this.freehand_ || circleMode) {\n      this.finishDrawing();\n    } else if (this.atFinish_(event)) {\n      if (this.finishCondition_(event)) {\n        this.finishDrawing();\n      }\n    } else {\n      this.addToDrawing_(event);\n    }\n    pass = false;\n  } else if (this.freehand_) {\n    this.finishCoordinate_ = null;\n    this.abortDrawing_();\n  }\n  if (!pass && this.stopClick_) {\n    event.stopPropagation();\n  }\n  return pass;\n};\n\n\n/**\n * Handle move events.\n * @param {ol.MapBrowserEvent} event A move event.\n * @return {boolean} Pass the event to other interactions.\n * @private\n */\nol.interaction.Draw.prototype.handlePointerMove_ = function(event) {\n  if (this.downPx_ &&\n      ((!this.freehand_ && this.shouldHandle_) ||\n      (this.freehand_ && !this.shouldHandle_))) {\n    var downPx = this.downPx_;\n    var clickPx = event.pixel;\n    var dx = downPx[0] - clickPx[0];\n    var dy = downPx[1] - clickPx[1];\n    var squaredDistance = dx * dx + dy * dy;\n    this.shouldHandle_ = this.freehand_ ?\n      squaredDistance > this.squaredClickTolerance_ :\n      squaredDistance <= this.squaredClickTolerance_;\n  }\n\n  if (this.finishCoordinate_) {\n    this.modifyDrawing_(event);\n  } else {\n    this.createOrUpdateSketchPoint_(event);\n  }\n  return true;\n};\n\n\n/**\n * Determine if an event is within the snapping tolerance of the start coord.\n * @param {ol.MapBrowserEvent} event Event.\n * @return {boolean} The event is within the snapping tolerance of the start.\n * @private\n */\nol.interaction.Draw.prototype.atFinish_ = function(event) {\n  var at = false;\n  if (this.sketchFeature_) {\n    var potentiallyDone = false;\n    var potentiallyFinishCoordinates = [this.finishCoordinate_];\n    if (this.mode_ === ol.interaction.Draw.Mode_.LINE_STRING) {\n      potentiallyDone = this.sketchCoords_.length > this.minPoints_;\n    } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n      potentiallyDone = this.sketchCoords_[0].length >\n          this.minPoints_;\n      potentiallyFinishCoordinates = [this.sketchCoords_[0][0],\n        this.sketchCoords_[0][this.sketchCoords_[0].length - 2]];\n    }\n    if (potentiallyDone) {\n      var map = event.map;\n      for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {\n        var finishCoordinate = potentiallyFinishCoordinates[i];\n        var finishPixel = map.getPixelFromCoordinate(finishCoordinate);\n        var pixel = event.pixel;\n        var dx = pixel[0] - finishPixel[0];\n        var dy = pixel[1] - finishPixel[1];\n        var snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;\n        at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;\n        if (at) {\n          this.finishCoordinate_ = finishCoordinate;\n          break;\n        }\n      }\n    }\n  }\n  return at;\n};\n\n\n/**\n * @param {ol.MapBrowserEvent} event Event.\n * @private\n */\nol.interaction.Draw.prototype.createOrUpdateSketchPoint_ = function(event) {\n  var coordinates = event.coordinate.slice();\n  if (!this.sketchPoint_) {\n    this.sketchPoint_ = new ol.Feature(new ol.geom.Point(coordinates));\n    this.updateSketchFeatures_();\n  } else {\n    var sketchPointGeom = /** @type {ol.geom.Point} */ (this.sketchPoint_.getGeometry());\n    sketchPointGeom.setCoordinates(coordinates);\n  }\n};\n\n\n/**\n * Start the drawing.\n * @param {ol.MapBrowserEvent} event Event.\n * @private\n */\nol.interaction.Draw.prototype.startDrawing_ = function(event) {\n  var start = event.coordinate;\n  this.finishCoordinate_ = start;\n  if (this.mode_ === ol.interaction.Draw.Mode_.POINT) {\n    this.sketchCoords_ = start.slice();\n  } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n    this.sketchCoords_ = [[start.slice(), start.slice()]];\n    this.sketchLineCoords_ = this.sketchCoords_[0];\n  } else {\n    this.sketchCoords_ = [start.slice(), start.slice()];\n    if (this.mode_ === ol.interaction.Draw.Mode_.CIRCLE) {\n      this.sketchLineCoords_ = this.sketchCoords_;\n    }\n  }\n  if (this.sketchLineCoords_) {\n    this.sketchLine_ = new ol.Feature(\n        new ol.geom.LineString(this.sketchLineCoords_));\n  }\n  var geometry = this.geometryFunction_(this.sketchCoords_);\n  this.sketchFeature_ = new ol.Feature();\n  if (this.geometryName_) {\n    this.sketchFeature_.setGeometryName(this.geometryName_);\n  }\n  this.sketchFeature_.setGeometry(geometry);\n  this.updateSketchFeatures_();\n  this.dispatchEvent(new ol.interaction.Draw.Event(\n      ol.interaction.DrawEventType.DRAWSTART, this.sketchFeature_));\n};\n\n\n/**\n * Modify the drawing.\n * @param {ol.MapBrowserEvent} event Event.\n * @private\n */\nol.interaction.Draw.prototype.modifyDrawing_ = function(event) {\n  var coordinate = event.coordinate;\n  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());\n  var coordinates, last;\n  if (this.mode_ === ol.interaction.Draw.Mode_.POINT) {\n    last = this.sketchCoords_;\n  } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n    coordinates = this.sketchCoords_[0];\n    last = coordinates[coordinates.length - 1];\n    if (this.atFinish_(event)) {\n      // snap to finish\n      coordinate = this.finishCoordinate_.slice();\n    }\n  } else {\n    coordinates = this.sketchCoords_;\n    last = coordinates[coordinates.length - 1];\n  }\n  last[0] = coordinate[0];\n  last[1] = coordinate[1];\n  this.geometryFunction_(/** @type {!Array.<ol.Coordinate>} */ (this.sketchCoords_), geometry);\n  if (this.sketchPoint_) {\n    var sketchPointGeom = /** @type {ol.geom.Point} */ (this.sketchPoint_.getGeometry());\n    sketchPointGeom.setCoordinates(coordinate);\n  }\n  var sketchLineGeom;\n  if (geometry instanceof ol.geom.Polygon &&\n      this.mode_ !== ol.interaction.Draw.Mode_.POLYGON) {\n    if (!this.sketchLine_) {\n      this.sketchLine_ = new ol.Feature(new ol.geom.LineString(null));\n    }\n    var ring = geometry.getLinearRing(0);\n    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());\n    sketchLineGeom.setFlatCoordinates(\n        ring.getLayout(), ring.getFlatCoordinates());\n  } else if (this.sketchLineCoords_) {\n    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());\n    sketchLineGeom.setCoordinates(this.sketchLineCoords_);\n  }\n  this.updateSketchFeatures_();\n};\n\n\n/**\n * Add a new coordinate to the drawing.\n * @param {ol.MapBrowserEvent} event Event.\n * @private\n */\nol.interaction.Draw.prototype.addToDrawing_ = function(event) {\n  var coordinate = event.coordinate;\n  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());\n  var done;\n  var coordinates;\n  if (this.mode_ === ol.interaction.Draw.Mode_.LINE_STRING) {\n    this.finishCoordinate_ = coordinate.slice();\n    coordinates = this.sketchCoords_;\n    if (coordinates.length >= this.maxPoints_) {\n      if (this.freehand_) {\n        coordinates.pop();\n      } else {\n        done = true;\n      }\n    }\n    coordinates.push(coordinate.slice());\n    this.geometryFunction_(coordinates, geometry);\n  } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n    coordinates = this.sketchCoords_[0];\n    if (coordinates.length >= this.maxPoints_) {\n      if (this.freehand_) {\n        coordinates.pop();\n      } else {\n        done = true;\n      }\n    }\n    coordinates.push(coordinate.slice());\n    if (done) {\n      this.finishCoordinate_ = coordinates[0];\n    }\n    this.geometryFunction_(this.sketchCoords_, geometry);\n  }\n  this.updateSketchFeatures_();\n  if (done) {\n    this.finishDrawing();\n  }\n};\n\n\n/**\n * Remove last point of the feature currently being drawn.\n * @api\n */\nol.interaction.Draw.prototype.removeLastPoint = function() {\n  if (!this.sketchFeature_) {\n    return;\n  }\n  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());\n  var coordinates, sketchLineGeom;\n  if (this.mode_ === ol.interaction.Draw.Mode_.LINE_STRING) {\n    coordinates = this.sketchCoords_;\n    coordinates.splice(-2, 1);\n    this.geometryFunction_(coordinates, geometry);\n    if (coordinates.length >= 2) {\n      this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();\n    }\n  } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n    coordinates = this.sketchCoords_[0];\n    coordinates.splice(-2, 1);\n    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());\n    sketchLineGeom.setCoordinates(coordinates);\n    this.geometryFunction_(this.sketchCoords_, geometry);\n  }\n\n  if (coordinates.length === 0) {\n    this.finishCoordinate_ = null;\n  }\n\n  this.updateSketchFeatures_();\n};\n\n\n/**\n * Stop drawing and add the sketch feature to the target layer.\n * The {@link ol.interaction.DrawEventType.DRAWEND} event is dispatched before\n * inserting the feature.\n * @api\n */\nol.interaction.Draw.prototype.finishDrawing = function() {\n  var sketchFeature = this.abortDrawing_();\n  var coordinates = this.sketchCoords_;\n  var geometry = /** @type {ol.geom.SimpleGeometry} */ (sketchFeature.getGeometry());\n  if (this.mode_ === ol.interaction.Draw.Mode_.LINE_STRING) {\n    // remove the redundant last point\n    coordinates.pop();\n    this.geometryFunction_(coordinates, geometry);\n  } else if (this.mode_ === ol.interaction.Draw.Mode_.POLYGON) {\n    // remove the redundant last point in ring\n    coordinates[0].pop();\n    this.geometryFunction_(coordinates, geometry);\n    coordinates = geometry.getCoordinates();\n  }\n\n  // cast multi-part geometries\n  if (this.type_ === ol.geom.GeometryType.MULTI_POINT) {\n    sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates]));\n  } else if (this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) {\n    sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates]));\n  } else if (this.type_ === ol.geom.GeometryType.MULTI_POLYGON) {\n    sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates]));\n  }\n\n  // First dispatch event to allow full set up of feature\n  this.dispatchEvent(new ol.interaction.Draw.Event(\n      ol.interaction.DrawEventType.DRAWEND, sketchFeature));\n\n  // Then insert feature\n  if (this.features_) {\n    this.features_.push(sketchFeature);\n  }\n  if (this.source_) {\n    this.source_.addFeature(sketchFeature);\n  }\n};\n\n\n/**\n * Stop drawing without adding the sketch feature to the target layer.\n * @return {ol.Feature} The sketch feature (or null if none).\n * @private\n */\nol.interaction.Draw.prototype.abortDrawing_ = function() {\n  this.finishCoordinate_ = null;\n  var sketchFeature = this.sketchFeature_;\n  if (sketchFeature) {\n    this.sketchFeature_ = null;\n    this.sketchPoint_ = null;\n    this.sketchLine_ = null;\n    this.overlay_.getSource().clear(true);\n  }\n  return sketchFeature;\n};\n\n\n/**\n * Extend an existing geometry by adding additional points. This only works\n * on features with `LineString` geometries, where the interaction will\n * extend lines by adding points to the end of the coordinates array.\n * @param {!ol.Feature} feature Feature to be extended.\n * @api\n */\nol.interaction.Draw.prototype.extend = function(feature) {\n  var geometry = feature.getGeometry();\n  var lineString = /** @type {ol.geom.LineString} */ (geometry);\n  this.sketchFeature_ = feature;\n  this.sketchCoords_ = lineString.getCoordinates();\n  var last = this.sketchCoords_[this.sketchCoords_.length - 1];\n  this.finishCoordinate_ = last.slice();\n  this.sketchCoords_.push(last.slice());\n  this.updateSketchFeatures_();\n  this.dispatchEvent(new ol.interaction.Draw.Event(\n      ol.interaction.DrawEventType.DRAWSTART, this.sketchFeature_));\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Draw.prototype.shouldStopEvent = ol.functions.FALSE;\n\n\n/**\n * Redraw the sketch features.\n * @private\n */\nol.interaction.Draw.prototype.updateSketchFeatures_ = function() {\n  var sketchFeatures = [];\n  if (this.sketchFeature_) {\n    sketchFeatures.push(this.sketchFeature_);\n  }\n  if (this.sketchLine_) {\n    sketchFeatures.push(this.sketchLine_);\n  }\n  if (this.sketchPoint_) {\n    sketchFeatures.push(this.sketchPoint_);\n  }\n  var overlaySource = this.overlay_.getSource();\n  overlaySource.clear(true);\n  overlaySource.addFeatures(sketchFeatures);\n};\n\n\n/**\n * @private\n */\nol.interaction.Draw.prototype.updateState_ = function() {\n  var map = this.getMap();\n  var active = this.getActive();\n  if (!map || !active) {\n    this.abortDrawing_();\n  }\n  this.overlay_.setMap(active ? map : null);\n};\n\n\n/**\n * Create a `geometryFunction` for `type: 'Circle'` that will create a regular\n * polygon with a user specified number of sides and start angle instead of an\n * `ol.geom.Circle` geometry.\n * @param {number=} opt_sides Number of sides of the regular polygon. Default is\n *     32.\n * @param {number=} opt_angle Angle of the first point in radians. 0 means East.\n *     Default is the angle defined by the heading from the center of the\n *     regular polygon to the current pointer position.\n * @return {ol.DrawGeometryFunctionType} Function that draws a\n *     polygon.\n * @api\n */\nol.interaction.Draw.createRegularPolygon = function(opt_sides, opt_angle) {\n  return (\n  /**\n       * @param {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>} coordinates\n       * @param {ol.geom.SimpleGeometry=} opt_geometry\n       * @return {ol.geom.SimpleGeometry}\n       */\n    function(coordinates, opt_geometry) {\n      var center = coordinates[0];\n      var end = coordinates[1];\n      var radius = Math.sqrt(\n          ol.coordinate.squaredDistance(center, end));\n      var geometry = opt_geometry ? /** @type {ol.geom.Polygon} */ (opt_geometry) :\n        ol.geom.Polygon.fromCircle(new ol.geom.Circle(center), opt_sides);\n      var angle = opt_angle ? opt_angle :\n        Math.atan((end[1] - center[1]) / (end[0] - center[0]));\n      ol.geom.Polygon.makeRegular(geometry, center, radius, angle);\n      return geometry;\n    }\n  );\n};\n\n\n/**\n * Create a `geometryFunction` that will create a box-shaped polygon (aligned\n * with the coordinate system axes).  Use this with the draw interaction and\n * `type: 'Circle'` to return a box instead of a circle geometry.\n * @return {ol.DrawGeometryFunctionType} Function that draws a box-shaped polygon.\n * @api\n */\nol.interaction.Draw.createBox = function() {\n  return (\n    /**\n     * @param {Array.<ol.Coordinate>} coordinates\n     * @param {ol.geom.SimpleGeometry=} opt_geometry\n     * @return {ol.geom.SimpleGeometry}\n     */\n    function(coordinates, opt_geometry) {\n      var extent = ol.extent.boundingExtent(coordinates);\n      var geometry = opt_geometry || new ol.geom.Polygon(null);\n      geometry.setCoordinates([[\n        ol.extent.getBottomLeft(extent),\n        ol.extent.getBottomRight(extent),\n        ol.extent.getTopRight(extent),\n        ol.extent.getTopLeft(extent),\n        ol.extent.getBottomLeft(extent)\n      ]]);\n      return geometry;\n    }\n  );\n};\n\n\n/**\n * Get the drawing mode.  The mode for mult-part geometries is the same as for\n * their single-part cousins.\n * @param {ol.geom.GeometryType} type Geometry type.\n * @return {ol.interaction.Draw.Mode_} Drawing mode.\n * @private\n */\nol.interaction.Draw.getMode_ = function(type) {\n  var mode;\n  if (type === ol.geom.GeometryType.POINT ||\n      type === ol.geom.GeometryType.MULTI_POINT) {\n    mode = ol.interaction.Draw.Mode_.POINT;\n  } else if (type === ol.geom.GeometryType.LINE_STRING ||\n      type === ol.geom.GeometryType.MULTI_LINE_STRING) {\n    mode = ol.interaction.Draw.Mode_.LINE_STRING;\n  } else if (type === ol.geom.GeometryType.POLYGON ||\n      type === ol.geom.GeometryType.MULTI_POLYGON) {\n    mode = ol.interaction.Draw.Mode_.POLYGON;\n  } else if (type === ol.geom.GeometryType.CIRCLE) {\n    mode = ol.interaction.Draw.Mode_.CIRCLE;\n  }\n  return /** @type {!ol.interaction.Draw.Mode_} */ (mode);\n};\n\n\n/**\n * Draw mode.  This collapses multi-part geometry types with their single-part\n * cousins.\n * @enum {string}\n * @private\n */\nol.interaction.Draw.Mode_ = {\n  POINT: 'Point',\n  LINE_STRING: 'LineString',\n  POLYGON: 'Polygon',\n  CIRCLE: 'Circle'\n};\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.Draw} instances are instances of\n * this type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.DrawEvent}\n * @param {ol.interaction.DrawEventType} type Type.\n * @param {ol.Feature} feature The feature drawn.\n */\nol.interaction.Draw.Event = function(type, feature) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The feature being drawn.\n   * @type {ol.Feature}\n   * @api\n   */\n  this.feature = feature;\n\n};\nol.inherits(ol.interaction.Draw.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.ExtentEventType');\n\n\n/**\n * @enum {string}\n */\nol.interaction.ExtentEventType = {\n  /**\n   * Triggered after the extent is changed\n   * @event ol.interaction.Extent.Event#extentchanged\n   * @api\n   */\n  EXTENTCHANGED: 'extentchanged'\n};\n\ngoog.provide('ol.interaction.Extent');\n\ngoog.require('ol');\ngoog.require('ol.Feature');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.MapBrowserPointerEvent');\ngoog.require('ol.coordinate');\ngoog.require('ol.events.Event');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.interaction.ExtentEventType');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.source.Vector');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map.\n * Once drawn, the vector box can be modified by dragging its vertices or edges.\n * This interaction is only supported for mouse devices.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @fires ol.interaction.Extent.Event\n * @param {olx.interaction.ExtentOptions=} opt_options Options.\n * @api\n */\nol.interaction.Extent = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * Extent of the drawn box\n   * @type {ol.Extent}\n   * @private\n   */\n  this.extent_ = null;\n\n  /**\n   * Handler for pointer move events\n   * @type {function (ol.Coordinate): ol.Extent|null}\n   * @private\n   */\n  this.pointerHandler_ = null;\n\n  /**\n   * Pixel threshold to snap to extent\n   * @type {number}\n   * @private\n   */\n  this.pixelTolerance_ = options.pixelTolerance !== undefined ?\n    options.pixelTolerance : 10;\n\n  /**\n   * Is the pointer snapped to an extent vertex\n   * @type {boolean}\n   * @private\n   */\n  this.snappedToVertex_ = false;\n\n  /**\n   * Feature for displaying the visible extent\n   * @type {ol.Feature}\n   * @private\n   */\n  this.extentFeature_ = null;\n\n  /**\n   * Feature for displaying the visible pointer\n   * @type {ol.Feature}\n   * @private\n   */\n  this.vertexFeature_ = null;\n\n  if (!opt_options) {\n    opt_options = {};\n  }\n\n  /* Inherit ol.interaction.Pointer */\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.Extent.handleDownEvent_,\n    handleDragEvent: ol.interaction.Extent.handleDragEvent_,\n    handleEvent: ol.interaction.Extent.handleEvent_,\n    handleUpEvent: ol.interaction.Extent.handleUpEvent_\n  });\n\n  /**\n   * Layer for the extentFeature\n   * @type {ol.layer.Vector}\n   * @private\n   */\n  this.extentOverlay_ = new ol.layer.Vector({\n    source: new ol.source.Vector({\n      useSpatialIndex: false,\n      wrapX: !!opt_options.wrapX\n    }),\n    style: opt_options.boxStyle ? opt_options.boxStyle : ol.interaction.Extent.getDefaultExtentStyleFunction_(),\n    updateWhileAnimating: true,\n    updateWhileInteracting: true\n  });\n\n  /**\n   * Layer for the vertexFeature\n   * @type {ol.layer.Vector}\n   * @private\n   */\n  this.vertexOverlay_ = new ol.layer.Vector({\n    source: new ol.source.Vector({\n      useSpatialIndex: false,\n      wrapX: !!opt_options.wrapX\n    }),\n    style: opt_options.pointerStyle ? opt_options.pointerStyle : ol.interaction.Extent.getDefaultPointerStyleFunction_(),\n    updateWhileAnimating: true,\n    updateWhileInteracting: true\n  });\n\n  if (opt_options.extent) {\n    this.setExtent(opt_options.extent);\n  }\n};\n\nol.inherits(ol.interaction.Extent, ol.interaction.Pointer);\n\n/**\n * @param {ol.MapBrowserEvent} mapBrowserEvent Event.\n * @return {boolean} Propagate event?\n * @this {ol.interaction.Extent}\n * @private\n */\nol.interaction.Extent.handleEvent_ = function(mapBrowserEvent) {\n  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {\n    return true;\n  }\n  //display pointer (if not dragging)\n  if (mapBrowserEvent.type == ol.MapBrowserEventType.POINTERMOVE && !this.handlingDownUpSequence) {\n    this.handlePointerMove_(mapBrowserEvent);\n  }\n  //call pointer to determine up/down/drag\n  ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent);\n  //return false to stop propagation\n  return false;\n};\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Event handled?\n * @this {ol.interaction.Extent}\n * @private\n */\nol.interaction.Extent.handleDownEvent_ = function(mapBrowserEvent) {\n  var pixel = mapBrowserEvent.pixel;\n  var map = mapBrowserEvent.map;\n\n  var extent = this.getExtent();\n  var vertex = this.snapToVertex_(pixel, map);\n\n  //find the extent corner opposite the passed corner\n  var getOpposingPoint = function(point) {\n    var x_ = null;\n    var y_ = null;\n    if (point[0] == extent[0]) {\n      x_ = extent[2];\n    } else if (point[0] == extent[2]) {\n      x_ = extent[0];\n    }\n    if (point[1] == extent[1]) {\n      y_ = extent[3];\n    } else if (point[1] == extent[3]) {\n      y_ = extent[1];\n    }\n    if (x_ !== null && y_ !== null) {\n      return [x_, y_];\n    }\n    return null;\n  };\n  if (vertex && extent) {\n    var x = (vertex[0] == extent[0] || vertex[0] == extent[2]) ? vertex[0] : null;\n    var y = (vertex[1] == extent[1] || vertex[1] == extent[3]) ? vertex[1] : null;\n\n    //snap to point\n    if (x !== null && y !== null) {\n      this.pointerHandler_ = ol.interaction.Extent.getPointHandler_(getOpposingPoint(vertex));\n    //snap to edge\n    } else if (x !== null) {\n      this.pointerHandler_ = ol.interaction.Extent.getEdgeHandler_(\n          getOpposingPoint([x, extent[1]]),\n          getOpposingPoint([x, extent[3]])\n      );\n    } else if (y !== null) {\n      this.pointerHandler_ = ol.interaction.Extent.getEdgeHandler_(\n          getOpposingPoint([extent[0], y]),\n          getOpposingPoint([extent[2], y])\n      );\n    }\n  //no snap - new bbox\n  } else {\n    vertex = map.getCoordinateFromPixel(pixel);\n    this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);\n    this.pointerHandler_ = ol.interaction.Extent.getPointHandler_(vertex);\n  }\n  return true; //event handled; start downup sequence\n};\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Event handled?\n * @this {ol.interaction.Extent}\n * @private\n */\nol.interaction.Extent.handleDragEvent_ = function(mapBrowserEvent) {\n  if (this.pointerHandler_) {\n    var pixelCoordinate = mapBrowserEvent.coordinate;\n    this.setExtent(this.pointerHandler_(pixelCoordinate));\n    this.createOrUpdatePointerFeature_(pixelCoordinate);\n  }\n  return true;\n};\n\n/**\n * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.Extent}\n * @private\n */\nol.interaction.Extent.handleUpEvent_ = function(mapBrowserEvent) {\n  this.pointerHandler_ = null;\n  //If bbox is zero area, set to null;\n  var extent = this.getExtent();\n  if (!extent || ol.extent.getArea(extent) === 0) {\n    this.setExtent(null);\n  }\n  return false; //Stop handling downup sequence\n};\n\n/**\n * Returns the default style for the drawn bbox\n *\n * @return {ol.StyleFunction} Default Extent style\n * @private\n */\nol.interaction.Extent.getDefaultExtentStyleFunction_ = function() {\n  var style = ol.style.Style.createDefaultEditing();\n  return function(feature, resolution) {\n    return style[ol.geom.GeometryType.POLYGON];\n  };\n};\n\n/**\n * Returns the default style for the pointer\n *\n * @return {ol.StyleFunction} Default pointer style\n * @private\n */\nol.interaction.Extent.getDefaultPointerStyleFunction_ = function() {\n  var style = ol.style.Style.createDefaultEditing();\n  return function(feature, resolution) {\n    return style[ol.geom.GeometryType.POINT];\n  };\n};\n\n/**\n * @param {ol.Coordinate} fixedPoint corner that will be unchanged in the new extent\n * @returns {function (ol.Coordinate): ol.Extent} event handler\n * @private\n */\nol.interaction.Extent.getPointHandler_ = function(fixedPoint) {\n  return function(point) {\n    return ol.extent.boundingExtent([fixedPoint, point]);\n  };\n};\n\n/**\n * @param {ol.Coordinate} fixedP1 first corner that will be unchanged in the new extent\n * @param {ol.Coordinate} fixedP2 second corner that will be unchanged in the new extent\n * @returns {function (ol.Coordinate): ol.Extent|null} event handler\n * @private\n */\nol.interaction.Extent.getEdgeHandler_ = function(fixedP1, fixedP2) {\n  if (fixedP1[0] == fixedP2[0]) {\n    return function(point) {\n      return ol.extent.boundingExtent([fixedP1, [point[0], fixedP2[1]]]);\n    };\n  } else if (fixedP1[1] == fixedP2[1]) {\n    return function(point) {\n      return ol.extent.boundingExtent([fixedP1, [fixedP2[0], point[1]]]);\n    };\n  } else {\n    return null;\n  }\n};\n\n/**\n * @param {ol.Extent} extent extent\n * @returns {Array<Array<ol.Coordinate>>} extent line segments\n * @private\n */\nol.interaction.Extent.getSegments_ = function(extent) {\n  return [\n    [[extent[0], extent[1]], [extent[0], extent[3]]],\n    [[extent[0], extent[3]], [extent[2], extent[3]]],\n    [[extent[2], extent[3]], [extent[2], extent[1]]],\n    [[extent[2], extent[1]], [extent[0], extent[1]]]\n  ];\n};\n\n/**\n * @param {ol.Pixel} pixel cursor location\n * @param {ol.PluggableMap} map map\n * @returns {ol.Coordinate|null} snapped vertex on extent\n * @private\n */\nol.interaction.Extent.prototype.snapToVertex_ = function(pixel, map) {\n  var pixelCoordinate = map.getCoordinateFromPixel(pixel);\n  var sortByDistance = function(a, b) {\n    return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a) -\n        ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b);\n  };\n  var extent = this.getExtent();\n  if (extent) {\n    //convert extents to line segments and find the segment closest to pixelCoordinate\n    var segments = ol.interaction.Extent.getSegments_(extent);\n    segments.sort(sortByDistance);\n    var closestSegment = segments[0];\n\n    var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,\n        closestSegment));\n    var vertexPixel = map.getPixelFromCoordinate(vertex);\n\n    //if the distance is within tolerance, snap to the segment\n    if (ol.coordinate.distance(pixel, vertexPixel) <= this.pixelTolerance_) {\n      //test if we should further snap to a vertex\n      var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);\n      var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);\n      var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);\n      var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);\n      var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n      this.snappedToVertex_ = dist <= this.pixelTolerance_;\n      if (this.snappedToVertex_) {\n        vertex = squaredDist1 > squaredDist2 ?\n          closestSegment[1] : closestSegment[0];\n      }\n      return vertex;\n    }\n  }\n  return null;\n};\n\n/**\n * @param {ol.MapBrowserEvent} mapBrowserEvent pointer move event\n * @private\n */\nol.interaction.Extent.prototype.handlePointerMove_ = function(mapBrowserEvent) {\n  var pixel = mapBrowserEvent.pixel;\n  var map = mapBrowserEvent.map;\n\n  var vertex = this.snapToVertex_(pixel, map);\n  if (!vertex) {\n    vertex = map.getCoordinateFromPixel(pixel);\n  }\n  this.createOrUpdatePointerFeature_(vertex);\n};\n\n/**\n * @param {ol.Extent} extent extent\n * @returns {ol.Feature} extent as featrue\n * @private\n */\nol.interaction.Extent.prototype.createOrUpdateExtentFeature_ = function(extent) {\n  var extentFeature = this.extentFeature_;\n\n  if (!extentFeature) {\n    if (!extent) {\n      extentFeature = new ol.Feature({});\n    } else {\n      extentFeature = new ol.Feature(ol.geom.Polygon.fromExtent(extent));\n    }\n    this.extentFeature_ = extentFeature;\n    this.extentOverlay_.getSource().addFeature(extentFeature);\n  } else {\n    if (!extent) {\n      extentFeature.setGeometry(undefined);\n    } else {\n      extentFeature.setGeometry(ol.geom.Polygon.fromExtent(extent));\n    }\n  }\n  return extentFeature;\n};\n\n\n/**\n * @param {ol.Coordinate} vertex location of feature\n * @returns {ol.Feature} vertex as feature\n * @private\n */\nol.interaction.Extent.prototype.createOrUpdatePointerFeature_ = function(vertex) {\n  var vertexFeature = this.vertexFeature_;\n  if (!vertexFeature) {\n    vertexFeature = new ol.Feature(new ol.geom.Point(vertex));\n    this.vertexFeature_ = vertexFeature;\n    this.vertexOverlay_.getSource().addFeature(vertexFeature);\n  } else {\n    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());\n    geometry.setCoordinates(vertex);\n  }\n  return vertexFeature;\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Extent.prototype.setMap = function(map) {\n  this.extentOverlay_.setMap(map);\n  this.vertexOverlay_.setMap(map);\n  ol.interaction.Pointer.prototype.setMap.call(this, map);\n};\n\n/**\n * Returns the current drawn extent in the view projection\n *\n * @return {ol.Extent} Drawn extent in the view projection.\n * @api\n */\nol.interaction.Extent.prototype.getExtent = function() {\n  return this.extent_;\n};\n\n/**\n * Manually sets the drawn extent, using the view projection.\n *\n * @param {ol.Extent} extent Extent\n * @api\n */\nol.interaction.Extent.prototype.setExtent = function(extent) {\n  //Null extent means no bbox\n  this.extent_ = extent ? extent : null;\n  this.createOrUpdateExtentFeature_(extent);\n  this.dispatchEvent(new ol.interaction.Extent.Event(this.extent_));\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.Extent} instances are instances of\n * this type.\n *\n * @constructor\n * @implements {oli.ExtentEvent}\n * @param {ol.Extent} extent the new extent\n * @extends {ol.events.Event}\n */\nol.interaction.Extent.Event = function(extent) {\n  ol.events.Event.call(this, ol.interaction.ExtentEventType.EXTENTCHANGED);\n\n  /**\n   * The current extent.\n   * @type {ol.Extent}\n   * @api\n   */\n  this.extent = extent;\n\n};\nol.inherits(ol.interaction.Extent.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.ModifyEventType');\n\n\n/**\n * @enum {string}\n */\nol.interaction.ModifyEventType = {\n  /**\n   * Triggered upon feature modification start\n   * @event ol.interaction.Modify.Event#modifystart\n   * @api\n   */\n  MODIFYSTART: 'modifystart',\n  /**\n   * Triggered upon feature modification end\n   * @event ol.interaction.Modify.Event#modifyend\n   * @api\n   */\n  MODIFYEND: 'modifyend'\n};\n\ngoog.provide('ol.interaction.Modify');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.Feature');\ngoog.require('ol.MapBrowserEventType');\ngoog.require('ol.MapBrowserPointerEvent');\ngoog.require('ol.array');\ngoog.require('ol.coordinate');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.events.condition');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.Point');\ngoog.require('ol.interaction.ModifyEventType');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.source.Vector');\ngoog.require('ol.source.VectorEventType');\ngoog.require('ol.structs.RBush');\ngoog.require('ol.style.Style');\n\n/**\n * @classdesc\n * Interaction for modifying feature geometries.  To modify features that have\n * been added to an existing source, construct the modify interaction with the\n * `source` option.  If you want to modify features in a collection (for example,\n * the collection used by a select interaction), construct the interaction with\n * the `features` option.  The interaction must be constructed with either a\n * `source` or `features` option.\n *\n * By default, the interaction will allow deletion of vertices when the `alt`\n * key is pressed.  To configure the interaction with a different condition\n * for deletion, use the `deleteCondition` option.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.ModifyOptions} options Options.\n * @fires ol.interaction.Modify.Event\n * @api\n */\nol.interaction.Modify = function(options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.Modify.handleDownEvent_,\n    handleDragEvent: ol.interaction.Modify.handleDragEvent_,\n    handleEvent: ol.interaction.Modify.handleEvent,\n    handleUpEvent: ol.interaction.Modify.handleUpEvent_\n  });\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.primaryAction;\n\n\n  /**\n   * @private\n   * @param {ol.MapBrowserEvent} mapBrowserEvent Browser event.\n   * @return {boolean} Combined condition result.\n   */\n  this.defaultDeleteCondition_ = function(mapBrowserEvent) {\n    return ol.events.condition.altKeyOnly(mapBrowserEvent) &&\n      ol.events.condition.singleClick(mapBrowserEvent);\n  };\n\n  /**\n   * @type {ol.EventsConditionType}\n   * @private\n   */\n  this.deleteCondition_ = options.deleteCondition ?\n    options.deleteCondition : this.defaultDeleteCondition_;\n\n  /**\n   * @type {ol.EventsConditionType}\n   * @private\n   */\n  this.insertVertexCondition_ = options.insertVertexCondition ?\n    options.insertVertexCondition : ol.events.condition.always;\n\n  /**\n   * Editing vertex.\n   * @type {ol.Feature}\n   * @private\n   */\n  this.vertexFeature_ = null;\n\n  /**\n   * Segments intersecting {@link this.vertexFeature_} by segment uid.\n   * @type {Object.<string, boolean>}\n   * @private\n   */\n  this.vertexSegments_ = null;\n\n  /**\n   * @type {ol.Pixel}\n   * @private\n   */\n  this.lastPixel_ = [0, 0];\n\n  /**\n   * Tracks if the next `singleclick` event should be ignored to prevent\n   * accidental deletion right after vertex creation.\n   * @type {boolean}\n   * @private\n   */\n  this.ignoreNextSingleClick_ = false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.modified_ = false;\n\n  /**\n   * Segment RTree for each layer\n   * @type {ol.structs.RBush.<ol.ModifySegmentDataType>}\n   * @private\n   */\n  this.rBush_ = new ol.structs.RBush();\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.pixelTolerance_ = options.pixelTolerance !== undefined ?\n    options.pixelTolerance : 10;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.snappedToVertex_ = false;\n\n  /**\n   * Indicate whether the interaction is currently changing a feature's\n   * coordinates.\n   * @type {boolean}\n   * @private\n   */\n  this.changingFeature_ = false;\n\n  /**\n   * @type {Array}\n   * @private\n   */\n  this.dragSegments_ = [];\n\n  /**\n   * Draw overlay where sketch features are drawn.\n   * @type {ol.layer.Vector}\n   * @private\n   */\n  this.overlay_ = new ol.layer.Vector({\n    source: new ol.source.Vector({\n      useSpatialIndex: false,\n      wrapX: !!options.wrapX\n    }),\n    style: options.style ? options.style :\n      ol.interaction.Modify.getDefaultStyleFunction(),\n    updateWhileAnimating: true,\n    updateWhileInteracting: true\n  });\n\n  /**\n  * @const\n  * @private\n  * @type {Object.<string, function(ol.Feature, ol.geom.Geometry)>}\n  */\n  this.SEGMENT_WRITERS_ = {\n    'Point': this.writePointGeometry_,\n    'LineString': this.writeLineStringGeometry_,\n    'LinearRing': this.writeLineStringGeometry_,\n    'Polygon': this.writePolygonGeometry_,\n    'MultiPoint': this.writeMultiPointGeometry_,\n    'MultiLineString': this.writeMultiLineStringGeometry_,\n    'MultiPolygon': this.writeMultiPolygonGeometry_,\n    'Circle': this.writeCircleGeometry_,\n    'GeometryCollection': this.writeGeometryCollectionGeometry_\n  };\n\n\n  /**\n   * @type {ol.source.Vector}\n   * @private\n   */\n  this.source_ = null;\n\n  var features;\n  if (options.source) {\n    this.source_ = options.source;\n    features = new ol.Collection(this.source_.getFeatures());\n    ol.events.listen(this.source_, ol.source.VectorEventType.ADDFEATURE,\n        this.handleSourceAdd_, this);\n    ol.events.listen(this.source_, ol.source.VectorEventType.REMOVEFEATURE,\n        this.handleSourceRemove_, this);\n  } else {\n    features = options.features;\n  }\n  if (!features) {\n    throw new Error('The modify interaction requires features or a source');\n  }\n\n  /**\n   * @type {ol.Collection.<ol.Feature>}\n   * @private\n   */\n  this.features_ = features;\n\n  this.features_.forEach(this.addFeature_, this);\n  ol.events.listen(this.features_, ol.CollectionEventType.ADD,\n      this.handleFeatureAdd_, this);\n  ol.events.listen(this.features_, ol.CollectionEventType.REMOVE,\n      this.handleFeatureRemove_, this);\n\n  /**\n   * @type {ol.MapBrowserPointerEvent}\n   * @private\n   */\n  this.lastPointerEvent_ = null;\n\n};\nol.inherits(ol.interaction.Modify, ol.interaction.Pointer);\n\n\n/**\n * @define {number} The segment index assigned to a circle's center when\n * breaking up a cicrle into ModifySegmentDataType segments.\n */\nol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CENTER_INDEX = 0;\n\n/**\n * @define {number} The segment index assigned to a circle's circumference when\n * breaking up a circle into ModifySegmentDataType segments.\n */\nol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX = 1;\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.interaction.Modify.prototype.addFeature_ = function(feature) {\n  var geometry = feature.getGeometry();\n  if (geometry && geometry.getType() in this.SEGMENT_WRITERS_) {\n    this.SEGMENT_WRITERS_[geometry.getType()].call(this, feature, geometry);\n  }\n  var map = this.getMap();\n  if (map && map.isRendered() && this.getActive()) {\n    this.handlePointerAtPixel_(this.lastPixel_, map);\n  }\n  ol.events.listen(feature, ol.events.EventType.CHANGE,\n      this.handleFeatureChange_, this);\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} evt Map browser event\n * @private\n */\nol.interaction.Modify.prototype.willModifyFeatures_ = function(evt) {\n  if (!this.modified_) {\n    this.modified_ = true;\n    this.dispatchEvent(new ol.interaction.Modify.Event(\n        ol.interaction.ModifyEventType.MODIFYSTART, this.features_, evt));\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.interaction.Modify.prototype.removeFeature_ = function(feature) {\n  this.removeFeatureSegmentData_(feature);\n  // Remove the vertex feature if the collection of canditate features\n  // is empty.\n  if (this.vertexFeature_ && this.features_.getLength() === 0) {\n    this.overlay_.getSource().removeFeature(this.vertexFeature_);\n    this.vertexFeature_ = null;\n  }\n  ol.events.unlisten(feature, ol.events.EventType.CHANGE,\n      this.handleFeatureChange_, this);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.interaction.Modify.prototype.removeFeatureSegmentData_ = function(feature) {\n  var rBush = this.rBush_;\n  var /** @type {Array.<ol.ModifySegmentDataType>} */ nodesToRemove = [];\n  rBush.forEach(\n      /**\n       * @param {ol.ModifySegmentDataType} node RTree node.\n       */\n      function(node) {\n        if (feature === node.feature) {\n          nodesToRemove.push(node);\n        }\n      });\n  for (var i = nodesToRemove.length - 1; i >= 0; --i) {\n    rBush.remove(nodesToRemove[i]);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Modify.prototype.setActive = function(active) {\n  if (this.vertexFeature_ && !active) {\n    this.overlay_.getSource().removeFeature(this.vertexFeature_);\n    this.vertexFeature_ = null;\n  }\n  ol.interaction.Pointer.prototype.setActive.call(this, active);\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Modify.prototype.setMap = function(map) {\n  this.overlay_.setMap(map);\n  ol.interaction.Pointer.prototype.setMap.call(this, map);\n};\n\n\n/**\n * @param {ol.source.Vector.Event} event Event.\n * @private\n */\nol.interaction.Modify.prototype.handleSourceAdd_ = function(event) {\n  if (event.feature) {\n    this.features_.push(event.feature);\n  }\n};\n\n\n/**\n * @param {ol.source.Vector.Event} event Event.\n * @private\n */\nol.interaction.Modify.prototype.handleSourceRemove_ = function(event) {\n  if (event.feature) {\n    this.features_.remove(event.feature);\n  }\n};\n\n\n/**\n * @param {ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Modify.prototype.handleFeatureAdd_ = function(evt) {\n  this.addFeature_(/** @type {ol.Feature} */ (evt.element));\n};\n\n\n/**\n * @param {ol.events.Event} evt Event.\n * @private\n */\nol.interaction.Modify.prototype.handleFeatureChange_ = function(evt) {\n  if (!this.changingFeature_) {\n    var feature = /** @type {ol.Feature} */ (evt.target);\n    this.removeFeature_(feature);\n    this.addFeature_(feature);\n  }\n};\n\n\n/**\n * @param {ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Modify.prototype.handleFeatureRemove_ = function(evt) {\n  var feature = /** @type {ol.Feature} */ (evt.element);\n  this.removeFeature_(feature);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.Point} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writePointGeometry_ = function(feature, geometry) {\n  var coordinates = geometry.getCoordinates();\n  var segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n    feature: feature,\n    geometry: geometry,\n    segment: [coordinates, coordinates]\n  });\n  this.rBush_.insert(geometry.getExtent(), segmentData);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiPoint} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeMultiPointGeometry_ = function(feature, geometry) {\n  var points = geometry.getCoordinates();\n  var coordinates, i, ii, segmentData;\n  for (i = 0, ii = points.length; i < ii; ++i) {\n    coordinates = points[i];\n    segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n      feature: feature,\n      geometry: geometry,\n      depth: [i],\n      index: i,\n      segment: [coordinates, coordinates]\n    });\n    this.rBush_.insert(geometry.getExtent(), segmentData);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.LineString} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeLineStringGeometry_ = function(feature, geometry) {\n  var coordinates = geometry.getCoordinates();\n  var i, ii, segment, segmentData;\n  for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n    segment = coordinates.slice(i, i + 2);\n    segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n      feature: feature,\n      geometry: geometry,\n      index: i,\n      segment: segment\n    });\n    this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiLineString} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) {\n  var lines = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, segment, segmentData;\n  for (j = 0, jj = lines.length; j < jj; ++j) {\n    coordinates = lines[j];\n    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n      segment = coordinates.slice(i, i + 2);\n      segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n        feature: feature,\n        geometry: geometry,\n        depth: [j],\n        index: i,\n        segment: segment\n      });\n      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.Polygon} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writePolygonGeometry_ = function(feature, geometry) {\n  var rings = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, segment, segmentData;\n  for (j = 0, jj = rings.length; j < jj; ++j) {\n    coordinates = rings[j];\n    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n      segment = coordinates.slice(i, i + 2);\n      segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n        feature: feature,\n        geometry: geometry,\n        depth: [j],\n        index: i,\n        segment: segment\n      });\n      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiPolygon} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) {\n  var polygons = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, k, kk, rings, segment, segmentData;\n  for (k = 0, kk = polygons.length; k < kk; ++k) {\n    rings = polygons[k];\n    for (j = 0, jj = rings.length; j < jj; ++j) {\n      coordinates = rings[j];\n      for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n        segment = coordinates.slice(i, i + 2);\n        segmentData = /** @type {ol.ModifySegmentDataType} */ ({\n          feature: feature,\n          geometry: geometry,\n          depth: [j, k],\n          index: i,\n          segment: segment\n        });\n        this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n      }\n    }\n  }\n};\n\n\n/**\n * We convert a circle into two segments.  The segment at index\n * {@link ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CENTER_INDEX} is the\n * circle's center (a point).  The segment at index\n * {@link ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX} is\n * the circumference, and is not a line segment.\n *\n * @param {ol.Feature} feature Feature.\n * @param {ol.geom.Circle} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeCircleGeometry_ = function(feature, geometry) {\n  var coordinates = geometry.getCenter();\n  var centerSegmentData = /** @type {ol.ModifySegmentDataType} */ ({\n    feature: feature,\n    geometry: geometry,\n    index: ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CENTER_INDEX,\n    segment: [coordinates, coordinates]\n  });\n  var circumferenceSegmentData = /** @type {ol.ModifySegmentDataType} */ ({\n    feature: feature,\n    geometry: geometry,\n    index: ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX,\n    segment: [coordinates, coordinates]\n  });\n  var featureSegments = [centerSegmentData, circumferenceSegmentData];\n  centerSegmentData.featureSegments = circumferenceSegmentData.featureSegments = featureSegments;\n  this.rBush_.insert(ol.extent.createOrUpdateFromCoordinate(coordinates), centerSegmentData);\n  this.rBush_.insert(geometry.getExtent(), circumferenceSegmentData);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.GeometryCollection} geometry Geometry.\n * @private\n */\nol.interaction.Modify.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) {\n  var i, geometries = geometry.getGeometriesArray();\n  for (i = 0; i < geometries.length; ++i) {\n    this.SEGMENT_WRITERS_[geometries[i].getType()].call(\n        this, feature, geometries[i]);\n  }\n};\n\n\n/**\n * @param {ol.Coordinate} coordinates Coordinates.\n * @return {ol.Feature} Vertex feature.\n * @private\n */\nol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = function(coordinates) {\n  var vertexFeature = this.vertexFeature_;\n  if (!vertexFeature) {\n    vertexFeature = new ol.Feature(new ol.geom.Point(coordinates));\n    this.vertexFeature_ = vertexFeature;\n    this.overlay_.getSource().addFeature(vertexFeature);\n  } else {\n    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());\n    geometry.setCoordinates(coordinates);\n  }\n  return vertexFeature;\n};\n\n\n/**\n * @param {ol.ModifySegmentDataType} a The first segment data.\n * @param {ol.ModifySegmentDataType} b The second segment data.\n * @return {number} The difference in indexes.\n * @private\n */\nol.interaction.Modify.compareIndexes_ = function(a, b) {\n  return a.index - b.index;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} evt Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.Modify}\n * @private\n */\nol.interaction.Modify.handleDownEvent_ = function(evt) {\n  if (!this.condition_(evt)) {\n    return false;\n  }\n  this.handlePointerAtPixel_(evt.pixel, evt.map);\n  var pixelCoordinate = evt.map.getCoordinateFromPixel(evt.pixel);\n  this.dragSegments_.length = 0;\n  this.modified_ = false;\n  var vertexFeature = this.vertexFeature_;\n  if (vertexFeature) {\n    var insertVertices = [];\n    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());\n    var vertex = geometry.getCoordinates();\n    var vertexExtent = ol.extent.boundingExtent([vertex]);\n    var segmentDataMatches = this.rBush_.getInExtent(vertexExtent);\n    var componentSegments = {};\n    segmentDataMatches.sort(ol.interaction.Modify.compareIndexes_);\n    for (var i = 0, ii = segmentDataMatches.length; i < ii; ++i) {\n      var segmentDataMatch = segmentDataMatches[i];\n      var segment = segmentDataMatch.segment;\n      var uid = ol.getUid(segmentDataMatch.feature);\n      var depth = segmentDataMatch.depth;\n      if (depth) {\n        uid += '-' + depth.join('-'); // separate feature components\n      }\n      if (!componentSegments[uid]) {\n        componentSegments[uid] = new Array(2);\n      }\n      if (segmentDataMatch.geometry.getType() === ol.geom.GeometryType.CIRCLE &&\n      segmentDataMatch.index === ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX) {\n\n        var closestVertex = ol.interaction.Modify.closestOnSegmentData_(pixelCoordinate, segmentDataMatch);\n        if (ol.coordinate.equals(closestVertex, vertex) && !componentSegments[uid][0]) {\n          this.dragSegments_.push([segmentDataMatch, 0]);\n          componentSegments[uid][0] = segmentDataMatch;\n        }\n      } else if (ol.coordinate.equals(segment[0], vertex) &&\n          !componentSegments[uid][0]) {\n        this.dragSegments_.push([segmentDataMatch, 0]);\n        componentSegments[uid][0] = segmentDataMatch;\n      } else if (ol.coordinate.equals(segment[1], vertex) &&\n          !componentSegments[uid][1]) {\n\n        // prevent dragging closed linestrings by the connecting node\n        if ((segmentDataMatch.geometry.getType() ===\n            ol.geom.GeometryType.LINE_STRING ||\n            segmentDataMatch.geometry.getType() ===\n            ol.geom.GeometryType.MULTI_LINE_STRING) &&\n            componentSegments[uid][0] &&\n            componentSegments[uid][0].index === 0) {\n          continue;\n        }\n\n        this.dragSegments_.push([segmentDataMatch, 1]);\n        componentSegments[uid][1] = segmentDataMatch;\n      } else if (this.insertVertexCondition_(evt) && ol.getUid(segment) in this.vertexSegments_ &&\n          (!componentSegments[uid][0] && !componentSegments[uid][1])) {\n        insertVertices.push([segmentDataMatch, vertex]);\n      }\n    }\n    if (insertVertices.length) {\n      this.willModifyFeatures_(evt);\n    }\n    for (var j = insertVertices.length - 1; j >= 0; --j) {\n      this.insertVertex_.apply(this, insertVertices[j]);\n    }\n  }\n  return !!this.vertexFeature_;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} evt Event.\n * @this {ol.interaction.Modify}\n * @private\n */\nol.interaction.Modify.handleDragEvent_ = function(evt) {\n  this.ignoreNextSingleClick_ = false;\n  this.willModifyFeatures_(evt);\n\n  var vertex = evt.coordinate;\n  for (var i = 0, ii = this.dragSegments_.length; i < ii; ++i) {\n    var dragSegment = this.dragSegments_[i];\n    var segmentData = dragSegment[0];\n    var depth = segmentData.depth;\n    var geometry = segmentData.geometry;\n    var coordinates;\n    var segment = segmentData.segment;\n    var index = dragSegment[1];\n\n    while (vertex.length < geometry.getStride()) {\n      vertex.push(segment[index][vertex.length]);\n    }\n\n    switch (geometry.getType()) {\n      case ol.geom.GeometryType.POINT:\n        coordinates = vertex;\n        segment[0] = segment[1] = vertex;\n        break;\n      case ol.geom.GeometryType.MULTI_POINT:\n        coordinates = geometry.getCoordinates();\n        coordinates[segmentData.index] = vertex;\n        segment[0] = segment[1] = vertex;\n        break;\n      case ol.geom.GeometryType.LINE_STRING:\n        coordinates = geometry.getCoordinates();\n        coordinates[segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case ol.geom.GeometryType.MULTI_LINE_STRING:\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[0]][segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case ol.geom.GeometryType.POLYGON:\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[0]][segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case ol.geom.GeometryType.MULTI_POLYGON:\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[1]][depth[0]][segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case ol.geom.GeometryType.CIRCLE:\n        segment[0] = segment[1] = vertex;\n        if (segmentData.index === ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CENTER_INDEX) {\n          this.changingFeature_ = true;\n          geometry.setCenter(vertex);\n          this.changingFeature_ = false;\n        } else { // We're dragging the circle's circumference:\n          this.changingFeature_ = true;\n          geometry.setRadius(ol.coordinate.distance(geometry.getCenter(), vertex));\n          this.changingFeature_ = false;\n        }\n        break;\n      default:\n        // pass\n    }\n\n    if (coordinates) {\n      this.setGeometryCoordinates_(geometry, coordinates);\n    }\n  }\n  this.createOrUpdateVertexFeature_(vertex);\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} evt Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.Modify}\n * @private\n */\nol.interaction.Modify.handleUpEvent_ = function(evt) {\n  var segmentData;\n  var geometry;\n  for (var i = this.dragSegments_.length - 1; i >= 0; --i) {\n    segmentData = this.dragSegments_[i][0];\n    geometry = segmentData.geometry;\n    if (geometry.getType() === ol.geom.GeometryType.CIRCLE) {\n      // Update a circle object in the R* bush:\n      var coordinates = geometry.getCenter();\n      var centerSegmentData = segmentData.featureSegments[0];\n      var circumferenceSegmentData = segmentData.featureSegments[1];\n      centerSegmentData.segment[0] = centerSegmentData.segment[1] = coordinates;\n      circumferenceSegmentData.segment[0] = circumferenceSegmentData.segment[1] = coordinates;\n      this.rBush_.update(ol.extent.createOrUpdateFromCoordinate(coordinates), centerSegmentData);\n      this.rBush_.update(geometry.getExtent(), circumferenceSegmentData);\n    } else {\n      this.rBush_.update(ol.extent.boundingExtent(segmentData.segment),\n          segmentData);\n    }\n  }\n  if (this.modified_) {\n    this.dispatchEvent(new ol.interaction.Modify.Event(\n        ol.interaction.ModifyEventType.MODIFYEND, this.features_, evt));\n    this.modified_ = false;\n  }\n  return false;\n};\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} and may modify the\n * geometry.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.Modify}\n * @api\n */\nol.interaction.Modify.handleEvent = function(mapBrowserEvent) {\n  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {\n    return true;\n  }\n  this.lastPointerEvent_ = mapBrowserEvent;\n\n  var handled;\n  if (!mapBrowserEvent.map.getView().getInteracting() &&\n      mapBrowserEvent.type == ol.MapBrowserEventType.POINTERMOVE &&\n      !this.handlingDownUpSequence) {\n    this.handlePointerMove_(mapBrowserEvent);\n  }\n  if (this.vertexFeature_ && this.deleteCondition_(mapBrowserEvent)) {\n    if (mapBrowserEvent.type != ol.MapBrowserEventType.SINGLECLICK ||\n        !this.ignoreNextSingleClick_) {\n      handled = this.removePoint();\n    } else {\n      handled = true;\n    }\n  }\n\n  if (mapBrowserEvent.type == ol.MapBrowserEventType.SINGLECLICK) {\n    this.ignoreNextSingleClick_ = false;\n  }\n\n  return ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent) &&\n      !handled;\n};\n\n\n/**\n * @param {ol.MapBrowserEvent} evt Event.\n * @private\n */\nol.interaction.Modify.prototype.handlePointerMove_ = function(evt) {\n  this.lastPixel_ = evt.pixel;\n  this.handlePointerAtPixel_(evt.pixel, evt.map);\n};\n\n\n/**\n * @param {ol.Pixel} pixel Pixel\n * @param {ol.PluggableMap} map Map.\n * @private\n */\nol.interaction.Modify.prototype.handlePointerAtPixel_ = function(pixel, map) {\n  var pixelCoordinate = map.getCoordinateFromPixel(pixel);\n  var sortByDistance = function(a, b) {\n    return ol.interaction.Modify.pointDistanceToSegmentDataSquared_(pixelCoordinate, a) -\n        ol.interaction.Modify.pointDistanceToSegmentDataSquared_(pixelCoordinate, b);\n  };\n\n  var box = ol.extent.buffer(\n      ol.extent.createOrUpdateFromCoordinate(pixelCoordinate),\n      map.getView().getResolution() * this.pixelTolerance_);\n\n  var rBush = this.rBush_;\n  var nodes = rBush.getInExtent(box);\n  if (nodes.length > 0) {\n    nodes.sort(sortByDistance);\n    var node = nodes[0];\n    var closestSegment = node.segment;\n    var vertex = ol.interaction.Modify.closestOnSegmentData_(pixelCoordinate, node);\n    var vertexPixel = map.getPixelFromCoordinate(vertex);\n    var dist = ol.coordinate.distance(pixel, vertexPixel);\n    if (dist <= this.pixelTolerance_) {\n      var vertexSegments = {};\n\n      if (node.geometry.getType() === ol.geom.GeometryType.CIRCLE &&\n      node.index === ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX) {\n\n        this.snappedToVertex_ = true;\n        this.createOrUpdateVertexFeature_(vertex);\n      } else {\n        var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);\n        var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);\n        var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);\n        var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);\n        dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n        this.snappedToVertex_ = dist <= this.pixelTolerance_;\n        if (this.snappedToVertex_) {\n          vertex = squaredDist1 > squaredDist2 ?\n            closestSegment[1] : closestSegment[0];\n        }\n        this.createOrUpdateVertexFeature_(vertex);\n        var segment;\n        for (var i = 1, ii = nodes.length; i < ii; ++i) {\n          segment = nodes[i].segment;\n          if ((ol.coordinate.equals(closestSegment[0], segment[0]) &&\n              ol.coordinate.equals(closestSegment[1], segment[1]) ||\n              (ol.coordinate.equals(closestSegment[0], segment[1]) &&\n              ol.coordinate.equals(closestSegment[1], segment[0])))) {\n            vertexSegments[ol.getUid(segment)] = true;\n          } else {\n            break;\n          }\n        }\n      }\n\n      vertexSegments[ol.getUid(closestSegment)] = true;\n      this.vertexSegments_ = vertexSegments;\n      return;\n    }\n  }\n  if (this.vertexFeature_) {\n    this.overlay_.getSource().removeFeature(this.vertexFeature_);\n    this.vertexFeature_ = null;\n  }\n};\n\n\n/**\n * Returns the distance from a point to a line segment.\n *\n * @param {ol.Coordinate} pointCoordinates The coordinates of the point from\n *        which to calculate the distance.\n * @param {ol.ModifySegmentDataType} segmentData The object describing the line\n *        segment we are calculating the distance to.\n * @return {number} The square of the distance between a point and a line segment.\n */\nol.interaction.Modify.pointDistanceToSegmentDataSquared_ = function(pointCoordinates, segmentData) {\n  var geometry = segmentData.geometry;\n\n  if (geometry.getType() === ol.geom.GeometryType.CIRCLE) {\n    var circleGeometry = /** @type {ol.geom.Circle} */ (geometry);\n\n    if (segmentData.index === ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX) {\n      var distanceToCenterSquared =\n            ol.coordinate.squaredDistance(circleGeometry.getCenter(), pointCoordinates);\n      var distanceToCircumference =\n            Math.sqrt(distanceToCenterSquared) - circleGeometry.getRadius();\n      return distanceToCircumference * distanceToCircumference;\n    }\n  }\n  return ol.coordinate.squaredDistanceToSegment(pointCoordinates, segmentData.segment);\n};\n\n/**\n * Returns the point closest to a given line segment.\n *\n * @param {ol.Coordinate} pointCoordinates The point to which a closest point\n *        should be found.\n * @param {ol.ModifySegmentDataType} segmentData The object describing the line\n *        segment which should contain the closest point.\n * @return {ol.Coordinate} The point closest to the specified line segment.\n */\nol.interaction.Modify.closestOnSegmentData_ = function(pointCoordinates, segmentData) {\n  var geometry = segmentData.geometry;\n\n  if (geometry.getType() === ol.geom.GeometryType.CIRCLE &&\n  segmentData.index === ol.interaction.Modify.MODIFY_SEGMENT_CIRCLE_CIRCUMFERENCE_INDEX) {\n    return geometry.getClosestPoint(pointCoordinates);\n  }\n  return ol.coordinate.closestOnSegment(pointCoordinates, segmentData.segment);\n};\n\n\n/**\n * @param {ol.ModifySegmentDataType} segmentData Segment data.\n * @param {ol.Coordinate} vertex Vertex.\n * @private\n */\nol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) {\n  var segment = segmentData.segment;\n  var feature = segmentData.feature;\n  var geometry = segmentData.geometry;\n  var depth = segmentData.depth;\n  var index = /** @type {number} */ (segmentData.index);\n  var coordinates;\n\n  while (vertex.length < geometry.getStride()) {\n    vertex.push(0);\n  }\n\n  switch (geometry.getType()) {\n    case ol.geom.GeometryType.MULTI_LINE_STRING:\n      coordinates = geometry.getCoordinates();\n      coordinates[depth[0]].splice(index + 1, 0, vertex);\n      break;\n    case ol.geom.GeometryType.POLYGON:\n      coordinates = geometry.getCoordinates();\n      coordinates[depth[0]].splice(index + 1, 0, vertex);\n      break;\n    case ol.geom.GeometryType.MULTI_POLYGON:\n      coordinates = geometry.getCoordinates();\n      coordinates[depth[1]][depth[0]].splice(index + 1, 0, vertex);\n      break;\n    case ol.geom.GeometryType.LINE_STRING:\n      coordinates = geometry.getCoordinates();\n      coordinates.splice(index + 1, 0, vertex);\n      break;\n    default:\n      return;\n  }\n\n  this.setGeometryCoordinates_(geometry, coordinates);\n  var rTree = this.rBush_;\n  rTree.remove(segmentData);\n  this.updateSegmentIndices_(geometry, index, depth, 1);\n  var newSegmentData = /** @type {ol.ModifySegmentDataType} */ ({\n    segment: [segment[0], vertex],\n    feature: feature,\n    geometry: geometry,\n    depth: depth,\n    index: index\n  });\n  rTree.insert(ol.extent.boundingExtent(newSegmentData.segment),\n      newSegmentData);\n  this.dragSegments_.push([newSegmentData, 1]);\n\n  var newSegmentData2 = /** @type {ol.ModifySegmentDataType} */ ({\n    segment: [vertex, segment[1]],\n    feature: feature,\n    geometry: geometry,\n    depth: depth,\n    index: index + 1\n  });\n  rTree.insert(ol.extent.boundingExtent(newSegmentData2.segment),\n      newSegmentData2);\n  this.dragSegments_.push([newSegmentData2, 0]);\n  this.ignoreNextSingleClick_ = true;\n};\n\n/**\n * Removes the vertex currently being pointed.\n * @return {boolean} True when a vertex was removed.\n * @api\n */\nol.interaction.Modify.prototype.removePoint = function() {\n  if (this.lastPointerEvent_ && this.lastPointerEvent_.type != ol.MapBrowserEventType.POINTERDRAG) {\n    var evt = this.lastPointerEvent_;\n    this.willModifyFeatures_(evt);\n    this.removeVertex_();\n    this.dispatchEvent(new ol.interaction.Modify.Event(\n        ol.interaction.ModifyEventType.MODIFYEND, this.features_, evt));\n    this.modified_ = false;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Removes a vertex from all matching features.\n * @return {boolean} True when a vertex was removed.\n * @private\n */\nol.interaction.Modify.prototype.removeVertex_ = function() {\n  var dragSegments = this.dragSegments_;\n  var segmentsByFeature = {};\n  var deleted = false;\n  var component, coordinates, dragSegment, geometry, i, index, left;\n  var newIndex, right, segmentData, uid;\n  for (i = dragSegments.length - 1; i >= 0; --i) {\n    dragSegment = dragSegments[i];\n    segmentData = dragSegment[0];\n    uid = ol.getUid(segmentData.feature);\n    if (segmentData.depth) {\n      // separate feature components\n      uid += '-' + segmentData.depth.join('-');\n    }\n    if (!(uid in segmentsByFeature)) {\n      segmentsByFeature[uid] = {};\n    }\n    if (dragSegment[1] === 0) {\n      segmentsByFeature[uid].right = segmentData;\n      segmentsByFeature[uid].index = segmentData.index;\n    } else if (dragSegment[1] == 1) {\n      segmentsByFeature[uid].left = segmentData;\n      segmentsByFeature[uid].index = segmentData.index + 1;\n    }\n\n  }\n  for (uid in segmentsByFeature) {\n    right = segmentsByFeature[uid].right;\n    left = segmentsByFeature[uid].left;\n    index = segmentsByFeature[uid].index;\n    newIndex = index - 1;\n    if (left !== undefined) {\n      segmentData = left;\n    } else {\n      segmentData = right;\n    }\n    if (newIndex < 0) {\n      newIndex = 0;\n    }\n    geometry = segmentData.geometry;\n    coordinates = geometry.getCoordinates();\n    component = coordinates;\n    deleted = false;\n    switch (geometry.getType()) {\n      case ol.geom.GeometryType.MULTI_LINE_STRING:\n        if (coordinates[segmentData.depth[0]].length > 2) {\n          coordinates[segmentData.depth[0]].splice(index, 1);\n          deleted = true;\n        }\n        break;\n      case ol.geom.GeometryType.LINE_STRING:\n        if (coordinates.length > 2) {\n          coordinates.splice(index, 1);\n          deleted = true;\n        }\n        break;\n      case ol.geom.GeometryType.MULTI_POLYGON:\n        component = component[segmentData.depth[1]];\n        /* falls through */\n      case ol.geom.GeometryType.POLYGON:\n        component = component[segmentData.depth[0]];\n        if (component.length > 4) {\n          if (index == component.length - 1) {\n            index = 0;\n          }\n          component.splice(index, 1);\n          deleted = true;\n          if (index === 0) {\n            // close the ring again\n            component.pop();\n            component.push(component[0]);\n            newIndex = component.length - 1;\n          }\n        }\n        break;\n      default:\n        // pass\n    }\n\n    if (deleted) {\n      this.setGeometryCoordinates_(geometry, coordinates);\n      var segments = [];\n      if (left !== undefined) {\n        this.rBush_.remove(left);\n        segments.push(left.segment[0]);\n      }\n      if (right !== undefined) {\n        this.rBush_.remove(right);\n        segments.push(right.segment[1]);\n      }\n      if (left !== undefined && right !== undefined) {\n        var newSegmentData = /** @type {ol.ModifySegmentDataType} */ ({\n          depth: segmentData.depth,\n          feature: segmentData.feature,\n          geometry: segmentData.geometry,\n          index: newIndex,\n          segment: segments\n        });\n        this.rBush_.insert(ol.extent.boundingExtent(newSegmentData.segment),\n            newSegmentData);\n      }\n      this.updateSegmentIndices_(geometry, index, segmentData.depth, -1);\n      if (this.vertexFeature_) {\n        this.overlay_.getSource().removeFeature(this.vertexFeature_);\n        this.vertexFeature_ = null;\n      }\n      dragSegments.length = 0;\n    }\n\n  }\n  return deleted;\n};\n\n\n/**\n * @param {ol.geom.SimpleGeometry} geometry Geometry.\n * @param {Array} coordinates Coordinates.\n * @private\n */\nol.interaction.Modify.prototype.setGeometryCoordinates_ = function(geometry, coordinates) {\n  this.changingFeature_ = true;\n  geometry.setCoordinates(coordinates);\n  this.changingFeature_ = false;\n};\n\n\n/**\n * @param {ol.geom.SimpleGeometry} geometry Geometry.\n * @param {number} index Index.\n * @param {Array.<number>|undefined} depth Depth.\n * @param {number} delta Delta (1 or -1).\n * @private\n */\nol.interaction.Modify.prototype.updateSegmentIndices_ = function(\n    geometry, index, depth, delta) {\n  this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentDataMatch) {\n    if (segmentDataMatch.geometry === geometry &&\n        (depth === undefined || segmentDataMatch.depth === undefined ||\n        ol.array.equals(segmentDataMatch.depth, depth)) &&\n        segmentDataMatch.index > index) {\n      segmentDataMatch.index += delta;\n    }\n  });\n};\n\n\n/**\n * @return {ol.StyleFunction} Styles.\n */\nol.interaction.Modify.getDefaultStyleFunction = function() {\n  var style = ol.style.Style.createDefaultEditing();\n  return function(feature, resolution) {\n    return style[ol.geom.GeometryType.POINT];\n  };\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.Modify} instances are instances of\n * this type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.ModifyEvent}\n * @param {ol.interaction.ModifyEventType} type Type.\n * @param {ol.Collection.<ol.Feature>} features The features modified.\n * @param {ol.MapBrowserPointerEvent} mapBrowserPointerEvent Associated\n *     {@link ol.MapBrowserPointerEvent}.\n */\nol.interaction.Modify.Event = function(type, features, mapBrowserPointerEvent) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The features being modified.\n   * @type {ol.Collection.<ol.Feature>}\n   * @api\n   */\n  this.features = features;\n\n  /**\n   * Associated {@link ol.MapBrowserEvent}.\n   * @type {ol.MapBrowserEvent}\n   * @api\n   */\n  this.mapBrowserEvent = mapBrowserPointerEvent;\n};\nol.inherits(ol.interaction.Modify.Event, ol.events.Event);\n\ngoog.provide('ol.interaction.Select');\n\ngoog.require('ol');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.array');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.condition');\ngoog.require('ol.functions');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.obj');\ngoog.require('ol.source.Vector');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * Interaction for selecting vector features. By default, selected features are\n * styled differently, so this interaction can be used for visual highlighting,\n * as well as selecting features for other actions, such as modification or\n * output. There are three ways of controlling which features are selected:\n * using the browser event as defined by the `condition` and optionally the\n * `toggle`, `add`/`remove`, and `multi` options; a `layers` filter; and a\n * further feature filter using the `filter` option.\n *\n * Selected features are added to an internal unmanaged layer.\n *\n * @constructor\n * @extends {ol.interaction.Interaction}\n * @param {olx.interaction.SelectOptions=} opt_options Options.\n * @fires ol.interaction.Select.Event\n * @api\n */\nol.interaction.Select = function(opt_options) {\n\n  ol.interaction.Interaction.call(this, {\n    handleEvent: ol.interaction.Select.handleEvent\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.condition_ = options.condition ?\n    options.condition : ol.events.condition.singleClick;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.addCondition_ = options.addCondition ?\n    options.addCondition : ol.events.condition.never;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.removeCondition_ = options.removeCondition ?\n    options.removeCondition : ol.events.condition.never;\n\n  /**\n   * @private\n   * @type {ol.EventsConditionType}\n   */\n  this.toggleCondition_ = options.toggleCondition ?\n    options.toggleCondition : ol.events.condition.shiftKeyOnly;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.multi_ = options.multi ? options.multi : false;\n\n  /**\n   * @private\n   * @type {ol.SelectFilterFunction}\n   */\n  this.filter_ = options.filter ? options.filter :\n    ol.functions.TRUE;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;\n\n  var featureOverlay = new ol.layer.Vector({\n    source: new ol.source.Vector({\n      useSpatialIndex: false,\n      features: options.features,\n      wrapX: options.wrapX\n    }),\n    style: options.style ? options.style :\n      ol.interaction.Select.getDefaultStyleFunction(),\n    updateWhileAnimating: true,\n    updateWhileInteracting: true\n  });\n\n  /**\n   * @private\n   * @type {ol.layer.Vector}\n   */\n  this.featureOverlay_ = featureOverlay;\n\n  /** @type {function(ol.layer.Layer): boolean} */\n  var layerFilter;\n  if (options.layers) {\n    if (typeof options.layers === 'function') {\n      layerFilter = options.layers;\n    } else {\n      var layers = options.layers;\n      layerFilter = function(layer) {\n        return ol.array.includes(layers, layer);\n      };\n    }\n  } else {\n    layerFilter = ol.functions.TRUE;\n  }\n\n  /**\n   * @private\n   * @type {function(ol.layer.Layer): boolean}\n   */\n  this.layerFilter_ = layerFilter;\n\n  /**\n   * An association between selected feature (key)\n   * and layer (value)\n   * @private\n   * @type {Object.<number, ol.layer.Layer>}\n   */\n  this.featureLayerAssociation_ = {};\n\n  var features = this.featureOverlay_.getSource().getFeaturesCollection();\n  ol.events.listen(features, ol.CollectionEventType.ADD,\n      this.addFeature_, this);\n  ol.events.listen(features, ol.CollectionEventType.REMOVE,\n      this.removeFeature_, this);\n\n};\nol.inherits(ol.interaction.Select, ol.interaction.Interaction);\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {ol.layer.Layer} layer Layer.\n * @private\n */\nol.interaction.Select.prototype.addFeatureLayerAssociation_ = function(feature, layer) {\n  var key = ol.getUid(feature);\n  this.featureLayerAssociation_[key] = layer;\n};\n\n\n/**\n * Get the selected features.\n * @return {ol.Collection.<ol.Feature>} Features collection.\n * @api\n */\nol.interaction.Select.prototype.getFeatures = function() {\n  return this.featureOverlay_.getSource().getFeaturesCollection();\n};\n\n\n/**\n * Returns the Hit-detection tolerance.\n * @returns {number} Hit tolerance in pixels.\n * @api\n */\nol.interaction.Select.prototype.getHitTolerance = function() {\n  return this.hitTolerance_;\n};\n\n\n/**\n * Returns the associated {@link ol.layer.Vector vectorlayer} of\n * the (last) selected feature. Note that this will not work with any\n * programmatic method like pushing features to\n * {@link ol.interaction.Select#getFeatures collection}.\n * @param {ol.Feature|ol.render.Feature} feature Feature\n * @return {ol.layer.Vector} Layer.\n * @api\n */\nol.interaction.Select.prototype.getLayer = function(feature) {\n  var key = ol.getUid(feature);\n  return /** @type {ol.layer.Vector} */ (this.featureLayerAssociation_[key]);\n};\n\n\n/**\n * Handles the {@link ol.MapBrowserEvent map browser event} and may change the\n * selected state of features.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {ol.interaction.Select}\n * @api\n */\nol.interaction.Select.handleEvent = function(mapBrowserEvent) {\n  if (!this.condition_(mapBrowserEvent)) {\n    return true;\n  }\n  var add = this.addCondition_(mapBrowserEvent);\n  var remove = this.removeCondition_(mapBrowserEvent);\n  var toggle = this.toggleCondition_(mapBrowserEvent);\n  var set = !add && !remove && !toggle;\n  var map = mapBrowserEvent.map;\n  var features = this.featureOverlay_.getSource().getFeaturesCollection();\n  var deselected = [];\n  var selected = [];\n  if (set) {\n    // Replace the currently selected feature(s) with the feature(s) at the\n    // pixel, or clear the selected feature(s) if there is no feature at\n    // the pixel.\n    ol.obj.clear(this.featureLayerAssociation_);\n    map.forEachFeatureAtPixel(mapBrowserEvent.pixel,\n        (\n          /**\n           * @param {ol.Feature|ol.render.Feature} feature Feature.\n           * @param {ol.layer.Layer} layer Layer.\n           * @return {boolean|undefined} Continue to iterate over the features.\n           */\n          function(feature, layer) {\n            if (this.filter_(feature, layer)) {\n              selected.push(feature);\n              this.addFeatureLayerAssociation_(feature, layer);\n              return !this.multi_;\n            }\n          }).bind(this), {\n          layerFilter: this.layerFilter_,\n          hitTolerance: this.hitTolerance_\n        });\n    var i;\n    for (i = features.getLength() - 1; i >= 0; --i) {\n      var feature = features.item(i);\n      var index = selected.indexOf(feature);\n      if (index > -1) {\n        // feature is already selected\n        selected.splice(index, 1);\n      } else {\n        features.remove(feature);\n        deselected.push(feature);\n      }\n    }\n    if (selected.length !== 0) {\n      features.extend(selected);\n    }\n  } else {\n    // Modify the currently selected feature(s).\n    map.forEachFeatureAtPixel(mapBrowserEvent.pixel,\n        (\n          /**\n           * @param {ol.Feature|ol.render.Feature} feature Feature.\n           * @param {ol.layer.Layer} layer Layer.\n           * @return {boolean|undefined} Continue to iterate over the features.\n           */\n          function(feature, layer) {\n            if (this.filter_(feature, layer)) {\n              if ((add || toggle) &&\n                !ol.array.includes(features.getArray(), feature)) {\n                selected.push(feature);\n                this.addFeatureLayerAssociation_(feature, layer);\n              } else if ((remove || toggle) &&\n                ol.array.includes(features.getArray(), feature)) {\n                deselected.push(feature);\n                this.removeFeatureLayerAssociation_(feature);\n              }\n              return !this.multi_;\n            }\n          }).bind(this), {\n          layerFilter: this.layerFilter_,\n          hitTolerance: this.hitTolerance_\n        });\n    var j;\n    for (j = deselected.length - 1; j >= 0; --j) {\n      features.remove(deselected[j]);\n    }\n    features.extend(selected);\n  }\n  if (selected.length > 0 || deselected.length > 0) {\n    this.dispatchEvent(\n        new ol.interaction.Select.Event(ol.interaction.Select.EventType_.SELECT,\n            selected, deselected, mapBrowserEvent));\n  }\n  return ol.events.condition.pointerMove(mapBrowserEvent);\n};\n\n\n/**\n * Hit-detection tolerance. Pixels inside the radius around the given position\n * will be checked for features. This only works for the canvas renderer and\n * not for WebGL.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @api\n */\nol.interaction.Select.prototype.setHitTolerance = function(hitTolerance) {\n  this.hitTolerance_ = hitTolerance;\n};\n\n\n/**\n * Remove the interaction from its current map, if any,  and attach it to a new\n * map, if any. Pass `null` to just remove the interaction from the current map.\n * @param {ol.PluggableMap} map Map.\n * @override\n * @api\n */\nol.interaction.Select.prototype.setMap = function(map) {\n  var currentMap = this.getMap();\n  var selectedFeatures =\n      this.featureOverlay_.getSource().getFeaturesCollection();\n  if (currentMap) {\n    selectedFeatures.forEach(currentMap.unskipFeature, currentMap);\n  }\n  ol.interaction.Interaction.prototype.setMap.call(this, map);\n  this.featureOverlay_.setMap(map);\n  if (map) {\n    selectedFeatures.forEach(map.skipFeature, map);\n  }\n};\n\n\n/**\n * @return {ol.StyleFunction} Styles.\n */\nol.interaction.Select.getDefaultStyleFunction = function() {\n  var styles = ol.style.Style.createDefaultEditing();\n  ol.array.extend(styles[ol.geom.GeometryType.POLYGON],\n      styles[ol.geom.GeometryType.LINE_STRING]);\n  ol.array.extend(styles[ol.geom.GeometryType.GEOMETRY_COLLECTION],\n      styles[ol.geom.GeometryType.LINE_STRING]);\n\n  return function(feature, resolution) {\n    if (!feature.getGeometry()) {\n      return null;\n    }\n    return styles[feature.getGeometry().getType()];\n  };\n};\n\n\n/**\n * @param {ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Select.prototype.addFeature_ = function(evt) {\n  var map = this.getMap();\n  if (map) {\n    map.skipFeature(/** @type {ol.Feature} */ (evt.element));\n  }\n};\n\n\n/**\n * @param {ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Select.prototype.removeFeature_ = function(evt) {\n  var map = this.getMap();\n  if (map) {\n    map.unskipFeature(/** @type {ol.Feature} */ (evt.element));\n  }\n};\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @private\n */\nol.interaction.Select.prototype.removeFeatureLayerAssociation_ = function(feature) {\n  var key = ol.getUid(feature);\n  delete this.featureLayerAssociation_[key];\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.Select} instances are instances of\n * this type.\n *\n * @param {ol.interaction.Select.EventType_} type The event type.\n * @param {Array.<ol.Feature>} selected Selected features.\n * @param {Array.<ol.Feature>} deselected Deselected features.\n * @param {ol.MapBrowserEvent} mapBrowserEvent Associated\n *     {@link ol.MapBrowserEvent}.\n * @implements {oli.SelectEvent}\n * @extends {ol.events.Event}\n * @constructor\n */\nol.interaction.Select.Event = function(type, selected, deselected, mapBrowserEvent) {\n  ol.events.Event.call(this, type);\n\n  /**\n   * Selected features array.\n   * @type {Array.<ol.Feature>}\n   * @api\n   */\n  this.selected = selected;\n\n  /**\n   * Deselected features array.\n   * @type {Array.<ol.Feature>}\n   * @api\n   */\n  this.deselected = deselected;\n\n  /**\n   * Associated {@link ol.MapBrowserEvent}.\n   * @type {ol.MapBrowserEvent}\n   * @api\n   */\n  this.mapBrowserEvent = mapBrowserEvent;\n};\nol.inherits(ol.interaction.Select.Event, ol.events.Event);\n\n\n/**\n * @enum {string}\n * @private\n */\nol.interaction.Select.EventType_ = {\n  /**\n   * Triggered when feature(s) has been (de)selected.\n   * @event ol.interaction.Select.Event#select\n   * @api\n   */\n  SELECT: 'select'\n};\n\ngoog.provide('ol.interaction.Snap');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.CollectionEventType');\ngoog.require('ol.coordinate');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.obj');\ngoog.require('ol.source.Vector');\ngoog.require('ol.source.VectorEventType');\ngoog.require('ol.structs.RBush');\n\n\n/**\n * @classdesc\n * Handles snapping of vector features while modifying or drawing them.  The\n * features can come from a {@link ol.source.Vector} or {@link ol.Collection}\n * Any interaction object that allows the user to interact\n * with the features using the mouse can benefit from the snapping, as long\n * as it is added before.\n *\n * The snap interaction modifies map browser event `coordinate` and `pixel`\n * properties to force the snap to occur to any interaction that them.\n *\n * Example:\n *\n *     var snap = new ol.interaction.Snap({\n *       source: source\n *     });\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @param {olx.interaction.SnapOptions=} opt_options Options.\n * @api\n */\nol.interaction.Snap = function(opt_options) {\n\n  ol.interaction.Pointer.call(this, {\n    handleEvent: ol.interaction.Snap.handleEvent_,\n    handleDownEvent: ol.functions.TRUE,\n    handleUpEvent: ol.interaction.Snap.handleUpEvent_\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * @type {ol.source.Vector}\n   * @private\n   */\n  this.source_ = options.source ? options.source : null;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.vertex_ = options.vertex !== undefined ? options.vertex : true;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.edge_ = options.edge !== undefined ? options.edge : true;\n\n  /**\n   * @type {ol.Collection.<ol.Feature>}\n   * @private\n   */\n  this.features_ = options.features ? options.features : null;\n\n  /**\n   * @type {Array.<ol.EventsKey>}\n   * @private\n   */\n  this.featuresListenerKeys_ = [];\n\n  /**\n   * @type {Object.<number, ol.EventsKey>}\n   * @private\n   */\n  this.featureChangeListenerKeys_ = {};\n\n  /**\n   * Extents are preserved so indexed segment can be quickly removed\n   * when its feature geometry changes\n   * @type {Object.<number, ol.Extent>}\n   * @private\n   */\n  this.indexedFeaturesExtents_ = {};\n\n  /**\n   * If a feature geometry changes while a pointer drag|move event occurs, the\n   * feature doesn't get updated right away.  It will be at the next 'pointerup'\n   * event fired.\n   * @type {Object.<number, ol.Feature>}\n   * @private\n   */\n  this.pendingFeatures_ = {};\n\n  /**\n   * Used for distance sorting in sortByDistance_\n   * @type {ol.Coordinate}\n   * @private\n   */\n  this.pixelCoordinate_ = null;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.pixelTolerance_ = options.pixelTolerance !== undefined ?\n    options.pixelTolerance : 10;\n\n  /**\n   * @type {function(ol.SnapSegmentDataType, ol.SnapSegmentDataType): number}\n   * @private\n   */\n  this.sortByDistance_ = ol.interaction.Snap.sortByDistance.bind(this);\n\n\n  /**\n  * Segment RTree for each layer\n  * @type {ol.structs.RBush.<ol.SnapSegmentDataType>}\n  * @private\n  */\n  this.rBush_ = new ol.structs.RBush();\n\n\n  /**\n  * @const\n  * @private\n  * @type {Object.<string, function(ol.Feature, ol.geom.Geometry)>}\n  */\n  this.SEGMENT_WRITERS_ = {\n    'Point': this.writePointGeometry_,\n    'LineString': this.writeLineStringGeometry_,\n    'LinearRing': this.writeLineStringGeometry_,\n    'Polygon': this.writePolygonGeometry_,\n    'MultiPoint': this.writeMultiPointGeometry_,\n    'MultiLineString': this.writeMultiLineStringGeometry_,\n    'MultiPolygon': this.writeMultiPolygonGeometry_,\n    'GeometryCollection': this.writeGeometryCollectionGeometry_,\n    'Circle': this.writeCircleGeometry_\n  };\n};\nol.inherits(ol.interaction.Snap, ol.interaction.Pointer);\n\n\n/**\n * Add a feature to the collection of features that we may snap to.\n * @param {ol.Feature} feature Feature.\n * @param {boolean=} opt_listen Whether to listen to the feature change or not\n *     Defaults to `true`.\n * @api\n */\nol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) {\n  var listen = opt_listen !== undefined ? opt_listen : true;\n  var feature_uid = ol.getUid(feature);\n  var geometry = feature.getGeometry();\n  if (geometry) {\n    var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];\n    if (segmentWriter) {\n      this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(\n          ol.extent.createEmpty());\n      segmentWriter.call(this, feature, geometry);\n    }\n  }\n\n  if (listen) {\n    this.featureChangeListenerKeys_[feature_uid] = ol.events.listen(\n        feature,\n        ol.events.EventType.CHANGE,\n        this.handleFeatureChange_, this);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.interaction.Snap.prototype.forEachFeatureAdd_ = function(feature) {\n  this.addFeature(feature);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @private\n */\nol.interaction.Snap.prototype.forEachFeatureRemove_ = function(feature) {\n  this.removeFeature(feature);\n};\n\n\n/**\n * @return {ol.Collection.<ol.Feature>|Array.<ol.Feature>} Features.\n * @private\n */\nol.interaction.Snap.prototype.getFeatures_ = function() {\n  var features;\n  if (this.features_) {\n    features = this.features_;\n  } else if (this.source_) {\n    features = this.source_.getFeatures();\n  }\n  return /** @type {!Array.<ol.Feature>|!ol.Collection.<ol.Feature>} */ (features);\n};\n\n\n/**\n * @param {ol.source.Vector.Event|ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Snap.prototype.handleFeatureAdd_ = function(evt) {\n  var feature;\n  if (evt instanceof ol.source.Vector.Event) {\n    feature = evt.feature;\n  } else if (evt instanceof ol.Collection.Event) {\n    feature = evt.element;\n  }\n  this.addFeature(/** @type {ol.Feature} */ (feature));\n};\n\n\n/**\n * @param {ol.source.Vector.Event|ol.Collection.Event} evt Event.\n * @private\n */\nol.interaction.Snap.prototype.handleFeatureRemove_ = function(evt) {\n  var feature;\n  if (evt instanceof ol.source.Vector.Event) {\n    feature = evt.feature;\n  } else if (evt instanceof ol.Collection.Event) {\n    feature = evt.element;\n  }\n  this.removeFeature(/** @type {ol.Feature} */ (feature));\n};\n\n\n/**\n * @param {ol.events.Event} evt Event.\n * @private\n */\nol.interaction.Snap.prototype.handleFeatureChange_ = function(evt) {\n  var feature = /** @type {ol.Feature} */ (evt.target);\n  if (this.handlingDownUpSequence) {\n    var uid = ol.getUid(feature);\n    if (!(uid in this.pendingFeatures_)) {\n      this.pendingFeatures_[uid] = feature;\n    }\n  } else {\n    this.updateFeature_(feature);\n  }\n};\n\n\n/**\n * Remove a feature from the collection of features that we may snap to.\n * @param {ol.Feature} feature Feature\n * @param {boolean=} opt_unlisten Whether to unlisten to the feature change\n *     or not. Defaults to `true`.\n * @api\n */\nol.interaction.Snap.prototype.removeFeature = function(feature, opt_unlisten) {\n  var unlisten = opt_unlisten !== undefined ? opt_unlisten : true;\n  var feature_uid = ol.getUid(feature);\n  var extent = this.indexedFeaturesExtents_[feature_uid];\n  if (extent) {\n    var rBush = this.rBush_;\n    var i, nodesToRemove = [];\n    rBush.forEachInExtent(extent, function(node) {\n      if (feature === node.feature) {\n        nodesToRemove.push(node);\n      }\n    });\n    for (i = nodesToRemove.length - 1; i >= 0; --i) {\n      rBush.remove(nodesToRemove[i]);\n    }\n  }\n\n  if (unlisten) {\n    ol.events.unlistenByKey(this.featureChangeListenerKeys_[feature_uid]);\n    delete this.featureChangeListenerKeys_[feature_uid];\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Snap.prototype.setMap = function(map) {\n  var currentMap = this.getMap();\n  var keys = this.featuresListenerKeys_;\n  var features = this.getFeatures_();\n\n  if (currentMap) {\n    keys.forEach(ol.events.unlistenByKey);\n    keys.length = 0;\n    features.forEach(this.forEachFeatureRemove_, this);\n  }\n  ol.interaction.Pointer.prototype.setMap.call(this, map);\n\n  if (map) {\n    if (this.features_) {\n      keys.push(\n          ol.events.listen(this.features_, ol.CollectionEventType.ADD,\n              this.handleFeatureAdd_, this),\n          ol.events.listen(this.features_, ol.CollectionEventType.REMOVE,\n              this.handleFeatureRemove_, this)\n      );\n    } else if (this.source_) {\n      keys.push(\n          ol.events.listen(this.source_, ol.source.VectorEventType.ADDFEATURE,\n              this.handleFeatureAdd_, this),\n          ol.events.listen(this.source_, ol.source.VectorEventType.REMOVEFEATURE,\n              this.handleFeatureRemove_, this)\n      );\n    }\n    features.forEach(this.forEachFeatureAdd_, this);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Snap.prototype.shouldStopEvent = ol.functions.FALSE;\n\n\n/**\n * @param {ol.Pixel} pixel Pixel\n * @param {ol.Coordinate} pixelCoordinate Coordinate\n * @param {ol.PluggableMap} map Map.\n * @return {ol.SnapResultType} Snap result\n */\nol.interaction.Snap.prototype.snapTo = function(pixel, pixelCoordinate, map) {\n\n  var lowerLeft = map.getCoordinateFromPixel(\n      [pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);\n  var upperRight = map.getCoordinateFromPixel(\n      [pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);\n  var box = ol.extent.boundingExtent([lowerLeft, upperRight]);\n\n  var segments = this.rBush_.getInExtent(box);\n\n  // If snapping on vertices only, don't consider circles\n  if (this.vertex_ && !this.edge_) {\n    segments = segments.filter(function(segment) {\n      return segment.feature.getGeometry().getType() !==\n          ol.geom.GeometryType.CIRCLE;\n    });\n  }\n\n  var snappedToVertex = false;\n  var snapped = false;\n  var vertex = null;\n  var vertexPixel = null;\n  var dist, pixel1, pixel2, squaredDist1, squaredDist2;\n  if (segments.length > 0) {\n    this.pixelCoordinate_ = pixelCoordinate;\n    segments.sort(this.sortByDistance_);\n    var closestSegment = segments[0].segment;\n    var isCircle = segments[0].feature.getGeometry().getType() ===\n        ol.geom.GeometryType.CIRCLE;\n    if (this.vertex_ && !this.edge_) {\n      pixel1 = map.getPixelFromCoordinate(closestSegment[0]);\n      pixel2 = map.getPixelFromCoordinate(closestSegment[1]);\n      squaredDist1 = ol.coordinate.squaredDistance(pixel, pixel1);\n      squaredDist2 = ol.coordinate.squaredDistance(pixel, pixel2);\n      dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n      snappedToVertex = dist <= this.pixelTolerance_;\n      if (snappedToVertex) {\n        snapped = true;\n        vertex = squaredDist1 > squaredDist2 ?\n          closestSegment[1] : closestSegment[0];\n        vertexPixel = map.getPixelFromCoordinate(vertex);\n      }\n    } else if (this.edge_) {\n      if (isCircle) {\n        vertex = ol.coordinate.closestOnCircle(pixelCoordinate,\n            /** @type {ol.geom.Circle} */ (segments[0].feature.getGeometry()));\n      } else {\n        vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,\n            closestSegment));\n      }\n      vertexPixel = map.getPixelFromCoordinate(vertex);\n      if (ol.coordinate.distance(pixel, vertexPixel) <= this.pixelTolerance_) {\n        snapped = true;\n        if (this.vertex_ && !isCircle) {\n          pixel1 = map.getPixelFromCoordinate(closestSegment[0]);\n          pixel2 = map.getPixelFromCoordinate(closestSegment[1]);\n          squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);\n          squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);\n          dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n          snappedToVertex = dist <= this.pixelTolerance_;\n          if (snappedToVertex) {\n            vertex = squaredDist1 > squaredDist2 ?\n              closestSegment[1] : closestSegment[0];\n            vertexPixel = map.getPixelFromCoordinate(vertex);\n          }\n        }\n      }\n    }\n    if (snapped) {\n      vertexPixel = [Math.round(vertexPixel[0]), Math.round(vertexPixel[1])];\n    }\n  }\n  return /** @type {ol.SnapResultType} */ ({\n    snapped: snapped,\n    vertex: vertex,\n    vertexPixel: vertexPixel\n  });\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @private\n */\nol.interaction.Snap.prototype.updateFeature_ = function(feature) {\n  this.removeFeature(feature, false);\n  this.addFeature(feature, false);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.Circle} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeCircleGeometry_ = function(feature, geometry) {\n  var polygon = ol.geom.Polygon.fromCircle(geometry);\n  var coordinates = polygon.getCoordinates()[0];\n  var i, ii, segment, segmentData;\n  for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n    segment = coordinates.slice(i, i + 2);\n    segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n      feature: feature,\n      segment: segment\n    });\n    this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.GeometryCollection} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) {\n  var i, geometries = geometry.getGeometriesArray();\n  for (i = 0; i < geometries.length; ++i) {\n    var segmentWriter = this.SEGMENT_WRITERS_[geometries[i].getType()];\n    if (segmentWriter) {\n      segmentWriter.call(this, feature, geometries[i]);\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.LineString} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeLineStringGeometry_ = function(feature, geometry) {\n  var coordinates = geometry.getCoordinates();\n  var i, ii, segment, segmentData;\n  for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n    segment = coordinates.slice(i, i + 2);\n    segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n      feature: feature,\n      segment: segment\n    });\n    this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiLineString} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) {\n  var lines = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, segment, segmentData;\n  for (j = 0, jj = lines.length; j < jj; ++j) {\n    coordinates = lines[j];\n    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n      segment = coordinates.slice(i, i + 2);\n      segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n        feature: feature,\n        segment: segment\n      });\n      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiPoint} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeMultiPointGeometry_ = function(feature, geometry) {\n  var points = geometry.getCoordinates();\n  var coordinates, i, ii, segmentData;\n  for (i = 0, ii = points.length; i < ii; ++i) {\n    coordinates = points[i];\n    segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n      feature: feature,\n      segment: [coordinates, coordinates]\n    });\n    this.rBush_.insert(geometry.getExtent(), segmentData);\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.MultiPolygon} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) {\n  var polygons = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, k, kk, rings, segment, segmentData;\n  for (k = 0, kk = polygons.length; k < kk; ++k) {\n    rings = polygons[k];\n    for (j = 0, jj = rings.length; j < jj; ++j) {\n      coordinates = rings[j];\n      for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n        segment = coordinates.slice(i, i + 2);\n        segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n          feature: feature,\n          segment: segment\n        });\n        this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n      }\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.Point} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writePointGeometry_ = function(feature, geometry) {\n  var coordinates = geometry.getCoordinates();\n  var segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n    feature: feature,\n    segment: [coordinates, coordinates]\n  });\n  this.rBush_.insert(geometry.getExtent(), segmentData);\n};\n\n\n/**\n * @param {ol.Feature} feature Feature\n * @param {ol.geom.Polygon} geometry Geometry.\n * @private\n */\nol.interaction.Snap.prototype.writePolygonGeometry_ = function(feature, geometry) {\n  var rings = geometry.getCoordinates();\n  var coordinates, i, ii, j, jj, segment, segmentData;\n  for (j = 0, jj = rings.length; j < jj; ++j) {\n    coordinates = rings[j];\n    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n      segment = coordinates.slice(i, i + 2);\n      segmentData = /** @type {ol.SnapSegmentDataType} */ ({\n        feature: feature,\n        segment: segment\n      });\n      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);\n    }\n  }\n};\n\n\n/**\n * Handle all pointer events events.\n * @param {ol.MapBrowserEvent} evt A move event.\n * @return {boolean} Pass the event to other interactions.\n * @this {ol.interaction.Snap}\n * @private\n */\nol.interaction.Snap.handleEvent_ = function(evt) {\n  var result = this.snapTo(evt.pixel, evt.coordinate, evt.map);\n  if (result.snapped) {\n    evt.coordinate = result.vertex.slice(0, 2);\n    evt.pixel = result.vertexPixel;\n  }\n  return ol.interaction.Pointer.handleEvent.call(this, evt);\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} evt Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.Snap}\n * @private\n */\nol.interaction.Snap.handleUpEvent_ = function(evt) {\n  var featuresToUpdate = ol.obj.getValues(this.pendingFeatures_);\n  if (featuresToUpdate.length) {\n    featuresToUpdate.forEach(this.updateFeature_, this);\n    this.pendingFeatures_ = {};\n  }\n  return false;\n};\n\n\n/**\n * Sort segments by distance, helper function\n * @param {ol.SnapSegmentDataType} a The first segment data.\n * @param {ol.SnapSegmentDataType} b The second segment data.\n * @return {number} The difference in distance.\n * @this {ol.interaction.Snap}\n */\nol.interaction.Snap.sortByDistance = function(a, b) {\n  return ol.coordinate.squaredDistanceToSegment(\n      this.pixelCoordinate_, a.segment) -\n      ol.coordinate.squaredDistanceToSegment(\n          this.pixelCoordinate_, b.segment);\n};\n\ngoog.provide('ol.interaction.TranslateEventType');\n\n\n/**\n * @enum {string}\n */\nol.interaction.TranslateEventType = {\n  /**\n   * Triggered upon feature translation start.\n   * @event ol.interaction.Translate.Event#translatestart\n   * @api\n   */\n  TRANSLATESTART: 'translatestart',\n  /**\n   * Triggered upon feature translation.\n   * @event ol.interaction.Translate.Event#translating\n   * @api\n   */\n  TRANSLATING: 'translating',\n  /**\n   * Triggered upon feature translation end.\n   * @event ol.interaction.Translate.Event#translateend\n   * @api\n   */\n  TRANSLATEEND: 'translateend'\n};\n\ngoog.provide('ol.interaction.Translate');\n\ngoog.require('ol');\ngoog.require('ol.Collection');\ngoog.require('ol.Object');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.functions');\ngoog.require('ol.array');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.interaction.Property');\ngoog.require('ol.interaction.TranslateEventType');\n\n\n/**\n * @classdesc\n * Interaction for translating (moving) features.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @fires ol.interaction.Translate.Event\n * @param {olx.interaction.TranslateOptions=} opt_options Options.\n * @api\n */\nol.interaction.Translate = function(opt_options) {\n  ol.interaction.Pointer.call(this, {\n    handleDownEvent: ol.interaction.Translate.handleDownEvent_,\n    handleDragEvent: ol.interaction.Translate.handleDragEvent_,\n    handleMoveEvent: ol.interaction.Translate.handleMoveEvent_,\n    handleUpEvent: ol.interaction.Translate.handleUpEvent_\n  });\n\n  var options = opt_options ? opt_options : {};\n\n  /**\n   * The last position we translated to.\n   * @type {ol.Coordinate}\n   * @private\n   */\n  this.lastCoordinate_ = null;\n\n\n  /**\n   * @type {ol.Collection.<ol.Feature>}\n   * @private\n   */\n  this.features_ = options.features !== undefined ? options.features : null;\n\n  /** @type {function(ol.layer.Layer): boolean} */\n  var layerFilter;\n  if (options.layers) {\n    if (typeof options.layers === 'function') {\n      layerFilter = options.layers;\n    } else {\n      var layers = options.layers;\n      layerFilter = function(layer) {\n        return ol.array.includes(layers, layer);\n      };\n    }\n  } else {\n    layerFilter = ol.functions.TRUE;\n  }\n\n  /**\n   * @private\n   * @type {function(ol.layer.Layer): boolean}\n   */\n  this.layerFilter_ = layerFilter;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;\n\n  /**\n   * @type {ol.Feature}\n   * @private\n   */\n  this.lastFeature_ = null;\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.interaction.Property.ACTIVE),\n      this.handleActiveChanged_, this);\n\n};\nol.inherits(ol.interaction.Translate, ol.interaction.Pointer);\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} event Event.\n * @return {boolean} Start drag sequence?\n * @this {ol.interaction.Translate}\n * @private\n */\nol.interaction.Translate.handleDownEvent_ = function(event) {\n  this.lastFeature_ = this.featuresAtPixel_(event.pixel, event.map);\n  if (!this.lastCoordinate_ && this.lastFeature_) {\n    this.lastCoordinate_ = event.coordinate;\n    ol.interaction.Translate.handleMoveEvent_.call(this, event);\n\n    var features = this.features_ || new ol.Collection([this.lastFeature_]);\n\n    this.dispatchEvent(\n        new ol.interaction.Translate.Event(\n            ol.interaction.TranslateEventType.TRANSLATESTART, features,\n            event.coordinate));\n    return true;\n  }\n  return false;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} event Event.\n * @return {boolean} Stop drag sequence?\n * @this {ol.interaction.Translate}\n * @private\n */\nol.interaction.Translate.handleUpEvent_ = function(event) {\n  if (this.lastCoordinate_) {\n    this.lastCoordinate_ = null;\n    ol.interaction.Translate.handleMoveEvent_.call(this, event);\n\n    var features = this.features_ || new ol.Collection([this.lastFeature_]);\n\n    this.dispatchEvent(\n        new ol.interaction.Translate.Event(\n            ol.interaction.TranslateEventType.TRANSLATEEND, features,\n            event.coordinate));\n    return true;\n  }\n  return false;\n};\n\n\n/**\n * @param {ol.MapBrowserPointerEvent} event Event.\n * @this {ol.interaction.Translate}\n * @private\n */\nol.interaction.Translate.handleDragEvent_ = function(event) {\n  if (this.lastCoordinate_) {\n    var newCoordinate = event.coordinate;\n    var deltaX = newCoordinate[0] - this.lastCoordinate_[0];\n    var deltaY = newCoordinate[1] - this.lastCoordinate_[1];\n\n    var features = this.features_ || new ol.Collection([this.lastFeature_]);\n\n    features.forEach(function(feature) {\n      var geom = feature.getGeometry();\n      geom.translate(deltaX, deltaY);\n      feature.setGeometry(geom);\n    });\n\n    this.lastCoordinate_ = newCoordinate;\n    this.dispatchEvent(\n        new ol.interaction.Translate.Event(\n            ol.interaction.TranslateEventType.TRANSLATING, features,\n            newCoordinate));\n  }\n};\n\n\n/**\n * @param {ol.MapBrowserEvent} event Event.\n * @this {ol.interaction.Translate}\n * @private\n */\nol.interaction.Translate.handleMoveEvent_ = function(event) {\n  var elem = event.map.getViewport();\n\n  // Change the cursor to grab/grabbing if hovering any of the features managed\n  // by the interaction\n  if (this.featuresAtPixel_(event.pixel, event.map)) {\n    elem.classList.remove(this.lastCoordinate_ ? 'ol-grab' : 'ol-grabbing');\n    elem.classList.add(this.lastCoordinate_ ? 'ol-grabbing' : 'ol-grab');\n  } else {\n    elem.classList.remove('ol-grab', 'ol-grabbing');\n  }\n};\n\n\n/**\n * Tests to see if the given coordinates intersects any of our selected\n * features.\n * @param {ol.Pixel} pixel Pixel coordinate to test for intersection.\n * @param {ol.PluggableMap} map Map to test the intersection on.\n * @return {ol.Feature} Returns the feature found at the specified pixel\n * coordinates.\n * @private\n */\nol.interaction.Translate.prototype.featuresAtPixel_ = function(pixel, map) {\n  return map.forEachFeatureAtPixel(pixel,\n      function(feature) {\n        if (!this.features_ ||\n            ol.array.includes(this.features_.getArray(), feature)) {\n          return feature;\n        }\n      }.bind(this), {\n        layerFilter: this.layerFilter_,\n        hitTolerance: this.hitTolerance_\n      });\n};\n\n\n/**\n * Returns the Hit-detection tolerance.\n * @returns {number} Hit tolerance in pixels.\n * @api\n */\nol.interaction.Translate.prototype.getHitTolerance = function() {\n  return this.hitTolerance_;\n};\n\n\n/**\n * Hit-detection tolerance. Pixels inside the radius around the given position\n * will be checked for features. This only works for the canvas renderer and\n * not for WebGL.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @api\n */\nol.interaction.Translate.prototype.setHitTolerance = function(hitTolerance) {\n  this.hitTolerance_ = hitTolerance;\n};\n\n\n/**\n * @inheritDoc\n */\nol.interaction.Translate.prototype.setMap = function(map) {\n  var oldMap = this.getMap();\n  ol.interaction.Pointer.prototype.setMap.call(this, map);\n  this.updateState_(oldMap);\n};\n\n\n/**\n * @private\n */\nol.interaction.Translate.prototype.handleActiveChanged_ = function() {\n  this.updateState_(null);\n};\n\n\n/**\n * @param {ol.PluggableMap} oldMap Old map.\n * @private\n */\nol.interaction.Translate.prototype.updateState_ = function(oldMap) {\n  var map = this.getMap();\n  var active = this.getActive();\n  if (!map || !active) {\n    map = map || oldMap;\n    if (map) {\n      var elem = map.getViewport();\n      elem.classList.remove('ol-grab', 'ol-grabbing');\n    }\n  }\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.interaction.Translate} instances are instances of\n * this type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.interaction.TranslateEvent}\n * @param {ol.interaction.TranslateEventType} type Type.\n * @param {ol.Collection.<ol.Feature>} features The features translated.\n * @param {ol.Coordinate} coordinate The event coordinate.\n */\nol.interaction.Translate.Event = function(type, features, coordinate) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The features being translated.\n   * @type {ol.Collection.<ol.Feature>}\n   * @api\n   */\n  this.features = features;\n\n  /**\n   * The coordinate of the drag event.\n   * @const\n   * @type {ol.Coordinate}\n   * @api\n   */\n  this.coordinate = coordinate;\n};\nol.inherits(ol.interaction.Translate.Event, ol.events.Event);\n\ngoog.provide('ol.layer.Heatmap');\n\ngoog.require('ol.events');\ngoog.require('ol');\ngoog.require('ol.Object');\ngoog.require('ol.dom');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.math');\ngoog.require('ol.obj');\ngoog.require('ol.render.EventType');\ngoog.require('ol.style.Icon');\ngoog.require('ol.style.Style');\n\n\n/**\n * @classdesc\n * Layer for rendering vector data as a heatmap.\n * Note that any property set in the options is set as a {@link ol.Object}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @constructor\n * @extends {ol.layer.Vector}\n * @fires ol.render.Event\n * @param {olx.layer.HeatmapOptions=} opt_options Options.\n * @api\n */\nol.layer.Heatmap = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  var baseOptions = ol.obj.assign({}, options);\n\n  delete baseOptions.gradient;\n  delete baseOptions.radius;\n  delete baseOptions.blur;\n  delete baseOptions.shadow;\n  delete baseOptions.weight;\n  ol.layer.Vector.call(this, /** @type {olx.layer.VectorOptions} */ (baseOptions));\n\n  /**\n   * @private\n   * @type {Uint8ClampedArray}\n   */\n  this.gradient_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.shadow_ = options.shadow !== undefined ? options.shadow : 250;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.circleImage_ = undefined;\n\n  /**\n   * @private\n   * @type {Array.<Array.<ol.style.Style>>}\n   */\n  this.styleCache_ = null;\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.layer.Heatmap.Property_.GRADIENT),\n      this.handleGradientChanged_, this);\n\n  this.setGradient(options.gradient ?\n    options.gradient : ol.layer.Heatmap.DEFAULT_GRADIENT);\n\n  this.setBlur(options.blur !== undefined ? options.blur : 15);\n\n  this.setRadius(options.radius !== undefined ? options.radius : 8);\n\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.layer.Heatmap.Property_.BLUR),\n      this.handleStyleChanged_, this);\n  ol.events.listen(this,\n      ol.Object.getChangeEventType(ol.layer.Heatmap.Property_.RADIUS),\n      this.handleStyleChanged_, this);\n\n  this.handleStyleChanged_();\n\n  var weight = options.weight ? options.weight : 'weight';\n  var weightFunction;\n  if (typeof weight === 'string') {\n    weightFunction = function(feature) {\n      return feature.get(weight);\n    };\n  } else {\n    weightFunction = weight;\n  }\n\n  this.setStyle(function(feature, resolution) {\n    var weight = weightFunction(feature);\n    var opacity = weight !== undefined ? ol.math.clamp(weight, 0, 1) : 1;\n    // cast to 8 bits\n    var index = (255 * opacity) | 0;\n    var style = this.styleCache_[index];\n    if (!style) {\n      style = [\n        new ol.style.Style({\n          image: new ol.style.Icon({\n            opacity: opacity,\n            src: this.circleImage_\n          })\n        })\n      ];\n      this.styleCache_[index] = style;\n    }\n    return style;\n  }.bind(this));\n\n  // For performance reasons, don't sort the features before rendering.\n  // The render order is not relevant for a heatmap representation.\n  this.setRenderOrder(null);\n\n  ol.events.listen(this, ol.render.EventType.RENDER, this.handleRender_, this);\n};\nol.inherits(ol.layer.Heatmap, ol.layer.Vector);\n\n\n/**\n * @const\n * @type {Array.<string>}\n */\nol.layer.Heatmap.DEFAULT_GRADIENT = ['#00f', '#0ff', '#0f0', '#ff0', '#f00'];\n\n\n/**\n * @param {Array.<string>} colors A list of colored.\n * @return {Uint8ClampedArray} An array.\n * @private\n */\nol.layer.Heatmap.createGradient_ = function(colors) {\n  var width = 1;\n  var height = 256;\n  var context = ol.dom.createCanvasContext2D(width, height);\n\n  var gradient = context.createLinearGradient(0, 0, width, height);\n  var step = 1 / (colors.length - 1);\n  for (var i = 0, ii = colors.length; i < ii; ++i) {\n    gradient.addColorStop(i * step, colors[i]);\n  }\n\n  context.fillStyle = gradient;\n  context.fillRect(0, 0, width, height);\n\n  return context.getImageData(0, 0, width, height).data;\n};\n\n\n/**\n * @return {string} Data URL for a circle.\n * @private\n */\nol.layer.Heatmap.prototype.createCircle_ = function() {\n  var radius = this.getRadius();\n  var blur = this.getBlur();\n  var halfSize = radius + blur + 1;\n  var size = 2 * halfSize;\n  var context = ol.dom.createCanvasContext2D(size, size);\n  context.shadowOffsetX = context.shadowOffsetY = this.shadow_;\n  context.shadowBlur = blur;\n  context.shadowColor = '#000';\n  context.beginPath();\n  var center = halfSize - this.shadow_;\n  context.arc(center, center, radius, 0, Math.PI * 2, true);\n  context.fill();\n  return context.canvas.toDataURL();\n};\n\n\n/**\n * Return the blur size in pixels.\n * @return {number} Blur size in pixels.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.getBlur = function() {\n  return /** @type {number} */ (this.get(ol.layer.Heatmap.Property_.BLUR));\n};\n\n\n/**\n * Return the gradient colors as array of strings.\n * @return {Array.<string>} Colors.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.getGradient = function() {\n  return /** @type {Array.<string>} */ (\n    this.get(ol.layer.Heatmap.Property_.GRADIENT));\n};\n\n\n/**\n * Return the size of the radius in pixels.\n * @return {number} Radius size in pixel.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.getRadius = function() {\n  return /** @type {number} */ (this.get(ol.layer.Heatmap.Property_.RADIUS));\n};\n\n\n/**\n * @private\n */\nol.layer.Heatmap.prototype.handleGradientChanged_ = function() {\n  this.gradient_ = ol.layer.Heatmap.createGradient_(this.getGradient());\n};\n\n\n/**\n * @private\n */\nol.layer.Heatmap.prototype.handleStyleChanged_ = function() {\n  this.circleImage_ = this.createCircle_();\n  this.styleCache_ = new Array(256);\n  this.changed();\n};\n\n\n/**\n * @param {ol.render.Event} event Post compose event\n * @private\n */\nol.layer.Heatmap.prototype.handleRender_ = function(event) {\n  var context = event.context;\n  var canvas = context.canvas;\n  var image = context.getImageData(0, 0, canvas.width, canvas.height);\n  var view8 = image.data;\n  var i, ii, alpha;\n  for (i = 0, ii = view8.length; i < ii; i += 4) {\n    alpha = view8[i + 3] * 4;\n    if (alpha) {\n      view8[i] = this.gradient_[alpha];\n      view8[i + 1] = this.gradient_[alpha + 1];\n      view8[i + 2] = this.gradient_[alpha + 2];\n    }\n  }\n  context.putImageData(image, 0, 0);\n};\n\n\n/**\n * Set the blur size in pixels.\n * @param {number} blur Blur size in pixels.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.setBlur = function(blur) {\n  this.set(ol.layer.Heatmap.Property_.BLUR, blur);\n};\n\n\n/**\n * Set the gradient colors as array of strings.\n * @param {Array.<string>} colors Gradient.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.setGradient = function(colors) {\n  this.set(ol.layer.Heatmap.Property_.GRADIENT, colors);\n};\n\n\n/**\n * Set the size of the radius in pixels.\n * @param {number} radius Radius size in pixel.\n * @api\n * @observable\n */\nol.layer.Heatmap.prototype.setRadius = function(radius) {\n  this.set(ol.layer.Heatmap.Property_.RADIUS, radius);\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.layer.Heatmap.Property_ = {\n  BLUR: 'blur',\n  GRADIENT: 'gradient',\n  RADIUS: 'radius'\n};\n\ngoog.provide('ol.layer.Image');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.layer.Layer');\n\n\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link ol.Object}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @constructor\n * @extends {ol.layer.Layer}\n * @fires ol.render.Event\n * @param {olx.layer.ImageOptions=} opt_options Layer options.\n * @api\n */\nol.layer.Image = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n  ol.layer.Layer.call(this,  /** @type {olx.layer.LayerOptions} */ (options));\n\n  /**\n   * The layer type.\n   * @protected\n   * @type {ol.LayerType}\n   */\n  this.type = ol.LayerType.IMAGE;\n\n};\nol.inherits(ol.layer.Image, ol.layer.Layer);\n\n\n/**\n * Return the associated {@link ol.source.Image source} of the image layer.\n * @function\n * @return {ol.source.Image} Source.\n * @api\n */\nol.layer.Image.prototype.getSource;\n\ngoog.provide('ol.layer.TileProperty');\n\n/**\n * @enum {string}\n */\nol.layer.TileProperty = {\n  PRELOAD: 'preload',\n  USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError'\n};\n\ngoog.provide('ol.layer.Tile');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.layer.TileProperty');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link ol.Object}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @constructor\n * @extends {ol.layer.Layer}\n * @fires ol.render.Event\n * @param {olx.layer.TileOptions=} opt_options Tile layer options.\n * @api\n */\nol.layer.Tile = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  var baseOptions = ol.obj.assign({}, options);\n\n  delete baseOptions.preload;\n  delete baseOptions.useInterimTilesOnError;\n  ol.layer.Layer.call(this,  /** @type {olx.layer.LayerOptions} */ (baseOptions));\n\n  this.setPreload(options.preload !== undefined ? options.preload : 0);\n  this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined ?\n    options.useInterimTilesOnError : true);\n\n  /**\n   * The layer type.\n   * @protected\n   * @type {ol.LayerType}\n   */\n  this.type = ol.LayerType.TILE;\n\n};\nol.inherits(ol.layer.Tile, ol.layer.Layer);\n\n\n/**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\nol.layer.Tile.prototype.getPreload = function() {\n  return /** @type {number} */ (this.get(ol.layer.TileProperty.PRELOAD));\n};\n\n\n/**\n * Return the associated {@link ol.source.Tile tilesource} of the layer.\n * @function\n * @return {ol.source.Tile} Source.\n * @api\n */\nol.layer.Tile.prototype.getSource;\n\n\n/**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\nol.layer.Tile.prototype.setPreload = function(preload) {\n  this.set(ol.layer.TileProperty.PRELOAD, preload);\n};\n\n\n/**\n * Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\nol.layer.Tile.prototype.getUseInterimTilesOnError = function() {\n  return /** @type {boolean} */ (\n    this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR));\n};\n\n\n/**\n * Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\nol.layer.Tile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) {\n  this.set(\n      ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n};\n\ngoog.provide('ol.layer.VectorTile');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.asserts');\ngoog.require('ol.layer.TileProperty');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.layer.VectorTileRenderType');\ngoog.require('ol.obj');\n\n\n/**\n * @classdesc\n * Layer for vector tile data that is rendered client-side.\n * Note that any property set in the options is set as a {@link ol.Object}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @constructor\n * @extends {ol.layer.Vector}\n * @param {olx.layer.VectorTileOptions=} opt_options Options.\n * @api\n */\nol.layer.VectorTile = function(opt_options) {\n  var options = opt_options ? opt_options : {};\n\n  var renderMode = options.renderMode || ol.layer.VectorTileRenderType.HYBRID;\n  ol.asserts.assert(renderMode == undefined ||\n      renderMode == ol.layer.VectorTileRenderType.IMAGE ||\n      renderMode == ol.layer.VectorTileRenderType.HYBRID ||\n      renderMode == ol.layer.VectorTileRenderType.VECTOR,\n  28); // `renderMode` must be `'image'`, `'hybrid'` or `'vector'`\n  if (options.declutter && renderMode == ol.layer.VectorTileRenderType.IMAGE) {\n    renderMode = ol.layer.VectorTileRenderType.HYBRID;\n  }\n  options.renderMode = renderMode;\n\n  var baseOptions = ol.obj.assign({}, options);\n\n  delete baseOptions.preload;\n  delete baseOptions.useInterimTilesOnError;\n  ol.layer.Vector.call(this,  /** @type {olx.layer.VectorOptions} */ (baseOptions));\n\n  this.setPreload(options.preload ? options.preload : 0);\n  this.setUseInterimTilesOnError(options.useInterimTilesOnError ?\n    options.useInterimTilesOnError : true);\n\n  /**\n   * The layer type.\n   * @protected\n   * @type {ol.LayerType}\n   */\n  this.type = ol.LayerType.VECTOR_TILE;\n\n};\nol.inherits(ol.layer.VectorTile, ol.layer.Vector);\n\n\n/**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\nol.layer.VectorTile.prototype.getPreload = function() {\n  return /** @type {number} */ (this.get(ol.layer.TileProperty.PRELOAD));\n};\n\n\n/**\n * Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\nol.layer.VectorTile.prototype.getUseInterimTilesOnError = function() {\n  return /** @type {boolean} */ (\n    this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR));\n};\n\n\n/**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\nol.layer.VectorTile.prototype.setPreload = function(preload) {\n  this.set(ol.layer.TileProperty.PRELOAD, preload);\n};\n\n\n/**\n * Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\nol.layer.VectorTile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) {\n  this.set(\n      ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n};\n\n\n/**\n * Return the associated {@link ol.source.VectorTile vectortilesource} of the layer.\n * @function\n * @return {ol.source.VectorTile} Source.\n * @api\n */\nol.layer.VectorTile.prototype.getSource;\n\ngoog.provide('ol.webgl.Shader');\n\ngoog.require('ol.functions');\n\n\n/**\n * @constructor\n * @abstract\n * @param {string} source Source.\n * @struct\n */\nol.webgl.Shader = function(source) {\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.source_ = source;\n\n};\n\n\n/**\n * @abstract\n * @return {number} Type.\n */\nol.webgl.Shader.prototype.getType = function() {};\n\n\n/**\n * @return {string} Source.\n */\nol.webgl.Shader.prototype.getSource = function() {\n  return this.source_;\n};\n\n\n/**\n * @return {boolean} Is animated?\n */\nol.webgl.Shader.prototype.isAnimated = ol.functions.FALSE;\n\ngoog.provide('ol.webgl.Fragment');\n\ngoog.require('ol');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Shader');\n\n\n/**\n * @constructor\n * @extends {ol.webgl.Shader}\n * @param {string} source Source.\n * @struct\n */\nol.webgl.Fragment = function(source) {\n  ol.webgl.Shader.call(this, source);\n};\nol.inherits(ol.webgl.Fragment, ol.webgl.Shader);\n\n\n/**\n * @inheritDoc\n */\nol.webgl.Fragment.prototype.getType = function() {\n  return ol.webgl.FRAGMENT_SHADER;\n};\n\ngoog.provide('ol.webgl.Vertex');\n\ngoog.require('ol');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Shader');\n\n\n/**\n * @constructor\n * @extends {ol.webgl.Shader}\n * @param {string} source Source.\n * @struct\n */\nol.webgl.Vertex = function(source) {\n  ol.webgl.Shader.call(this, source);\n};\nol.inherits(ol.webgl.Vertex, ol.webgl.Shader);\n\n\n/**\n * @inheritDoc\n */\nol.webgl.Vertex.prototype.getType = function() {\n  return ol.webgl.VERTEX_SHADER;\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.circlereplay.defaultshader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.render.webgl.circlereplay.defaultshader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\nvarying vec2 v_center;\\nvarying vec2 v_offset;\\nvarying float v_halfWidth;\\nvarying float v_pixelRatio;\\n\\n\\n\\nuniform float u_opacity;\\nuniform vec4 u_fillColor;\\nuniform vec4 u_strokeColor;\\nuniform vec2 u_size;\\n\\nvoid main(void) {\\n  vec2 windowCenter = vec2((v_center.x + 1.0) / 2.0 * u_size.x * v_pixelRatio,\\n      (v_center.y + 1.0) / 2.0 * u_size.y * v_pixelRatio);\\n  vec2 windowOffset = vec2((v_offset.x + 1.0) / 2.0 * u_size.x * v_pixelRatio,\\n      (v_offset.y + 1.0) / 2.0 * u_size.y * v_pixelRatio);\\n  float radius = length(windowCenter - windowOffset);\\n  float dist = length(windowCenter - gl_FragCoord.xy);\\n  if (dist > radius + v_halfWidth) {\\n    if (u_strokeColor.a == 0.0) {\\n      gl_FragColor = u_fillColor;\\n    } else {\\n      gl_FragColor = u_strokeColor;\\n    }\\n    gl_FragColor.a = gl_FragColor.a - (dist - (radius + v_halfWidth));\\n  } else if (u_fillColor.a == 0.0) {\\n    // Hooray, no fill, just stroke. We can use real antialiasing.\\n    gl_FragColor = u_strokeColor;\\n    if (dist < radius - v_halfWidth) {\\n      gl_FragColor.a = gl_FragColor.a - (radius - v_halfWidth - dist);\\n    }\\n  } else {\\n    gl_FragColor = u_fillColor;\\n    float strokeDist = radius - v_halfWidth;\\n    float antialias = 2.0 * v_pixelRatio;\\n    if (dist > strokeDist) {\\n      gl_FragColor = u_strokeColor;\\n    } else if (dist >= strokeDist - antialias) {\\n      float step = smoothstep(strokeDist - antialias, strokeDist, dist);\\n      gl_FragColor = mix(u_fillColor, u_strokeColor, step);\\n    }\\n  }\\n  gl_FragColor.a = gl_FragColor.a * u_opacity;\\n  if (gl_FragColor.a <= 0.0) {\\n    discard;\\n  }\\n}\\n' :\n  'precision mediump float;varying vec2 a;varying vec2 b;varying float c;varying float d;uniform float m;uniform vec4 n;uniform vec4 o;uniform vec2 p;void main(void){vec2 windowCenter=vec2((a.x+1.0)/2.0*p.x*d,(a.y+1.0)/2.0*p.y*d);vec2 windowOffset=vec2((b.x+1.0)/2.0*p.x*d,(b.y+1.0)/2.0*p.y*d);float radius=length(windowCenter-windowOffset);float dist=length(windowCenter-gl_FragCoord.xy);if(dist>radius+c){if(o.a==0.0){gl_FragColor=n;}else{gl_FragColor=o;}gl_FragColor.a=gl_FragColor.a-(dist-(radius+c));}else if(n.a==0.0){gl_FragColor=o;if(dist<radius-c){gl_FragColor.a=gl_FragColor.a-(radius-c-dist);}} else{gl_FragColor=n;float strokeDist=radius-c;float antialias=2.0*d;if(dist>strokeDist){gl_FragColor=o;}else if(dist>=strokeDist-antialias){float step=smoothstep(strokeDist-antialias,strokeDist,dist);gl_FragColor=mix(n,o,step);}} gl_FragColor.a=gl_FragColor.a*m;if(gl_FragColor.a<=0.0){discard;}}');\n\nol.render.webgl.circlereplay.defaultshader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  'varying vec2 v_center;\\nvarying vec2 v_offset;\\nvarying float v_halfWidth;\\nvarying float v_pixelRatio;\\n\\n\\nattribute vec2 a_position;\\nattribute float a_instruction;\\nattribute float a_radius;\\n\\nuniform mat4 u_projectionMatrix;\\nuniform mat4 u_offsetScaleMatrix;\\nuniform mat4 u_offsetRotateMatrix;\\nuniform float u_lineWidth;\\nuniform float u_pixelRatio;\\n\\nvoid main(void) {\\n  mat4 offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\\n  v_center = vec4(u_projectionMatrix * vec4(a_position, 0.0, 1.0)).xy;\\n  v_pixelRatio = u_pixelRatio;\\n  float lineWidth = u_lineWidth * u_pixelRatio;\\n  v_halfWidth = lineWidth / 2.0;\\n  if (lineWidth == 0.0) {\\n    lineWidth = 2.0 * u_pixelRatio;\\n  }\\n  vec2 offset;\\n  // Radius with anitaliasing (roughly).\\n  float radius = a_radius + 3.0 * u_pixelRatio;\\n  // Until we get gl_VertexID in WebGL, we store an instruction.\\n  if (a_instruction == 0.0) {\\n    // Offsetting the edges of the triangle by lineWidth / 2 is necessary, however\\n    // we should also leave some space for the antialiasing, thus we offset by lineWidth.\\n    offset = vec2(-1.0, 1.0);\\n  } else if (a_instruction == 1.0) {\\n    offset = vec2(-1.0, -1.0);\\n  } else if (a_instruction == 2.0) {\\n    offset = vec2(1.0, -1.0);\\n  } else {\\n    offset = vec2(1.0, 1.0);\\n  }\\n\\n  gl_Position = u_projectionMatrix * vec4(a_position + offset * radius, 0.0, 1.0) +\\n      offsetMatrix * vec4(offset * lineWidth, 0.0, 0.0);\\n  v_offset = vec4(u_projectionMatrix * vec4(a_position.x + a_radius, a_position.y,\\n      0.0, 1.0)).xy;\\n\\n  if (distance(v_center, v_offset) > 20000.0) {\\n    gl_Position = vec4(v_center, 0.0, 1.0);\\n  }\\n}\\n\\n\\n' :\n  'varying vec2 a;varying vec2 b;varying float c;varying float d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;uniform float k;uniform float l;void main(void){mat4 offsetMatrix=i*j;a=vec4(h*vec4(e,0.0,1.0)).xy;d=l;float lineWidth=k*l;c=lineWidth/2.0;if(lineWidth==0.0){lineWidth=2.0*l;}vec2 offset;float radius=g+3.0*l;//Until we get gl_VertexID in WebGL,we store an instruction.if(f==0.0){//Offsetting the edges of the triangle by lineWidth/2 is necessary,however//we should also leave some space for the antialiasing,thus we offset by lineWidth.offset=vec2(-1.0,1.0);}else if(f==1.0){offset=vec2(-1.0,-1.0);}else if(f==2.0){offset=vec2(1.0,-1.0);}else{offset=vec2(1.0,1.0);}gl_Position=h*vec4(e+offset*radius,0.0,1.0)+offsetMatrix*vec4(offset*lineWidth,0.0,0.0);b=vec4(h*vec4(e.x+g,e.y,0.0,1.0)).xy;if(distance(a,b)>20000.0){gl_Position=vec4(a,0.0,1.0);}}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.circlereplay.defaultshader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.render.webgl.circlereplay.defaultshader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_projectionMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_projectionMatrix' : 'h');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetScaleMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetScaleMatrix' : 'i');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetRotateMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetRotateMatrix' : 'j');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_lineWidth = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_lineWidth' : 'k');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_pixelRatio = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_pixelRatio' : 'l');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_opacity = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_opacity' : 'm');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_fillColor = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_fillColor' : 'n');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_strokeColor = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_strokeColor' : 'o');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_size = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_size' : 'p');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'e');\n\n  /**\n   * @type {number}\n   */\n  this.a_instruction = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_instruction' : 'f');\n\n  /**\n   * @type {number}\n   */\n  this.a_radius = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_radius' : 'g');\n};\n\ngoog.provide('ol.vec.Mat4');\n\n\n/**\n * @return {Array.<number>} 4x4 matrix representing a 3D identity transform.\n */\nol.vec.Mat4.create = function() {\n  return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n};\n\n\n/**\n * @param {Array.<number>} mat4 Flattened 4x4 matrix receiving the result.\n * @param {ol.Transform} transform Transformation matrix.\n * @return {Array.<number>} 2D transformation matrix as flattened 4x4 matrix.\n */\nol.vec.Mat4.fromTransform = function(mat4, transform) {\n  mat4[0] = transform[0];\n  mat4[1] = transform[1];\n  mat4[4] = transform[2];\n  mat4[5] = transform[3];\n  mat4[12] = transform[4];\n  mat4[13] = transform[5];\n  return mat4;\n};\n\ngoog.provide('ol.render.webgl.Replay');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.render.VectorContext');\ngoog.require('ol.transform');\ngoog.require('ol.vec.Mat4');\ngoog.require('ol.webgl');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.render.VectorContext}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.Replay = function(tolerance, maxExtent) {\n  ol.render.VectorContext.call(this);\n\n  /**\n   * @protected\n   * @type {number}\n   */\n  this.tolerance = tolerance;\n\n  /**\n   * @protected\n   * @const\n   * @type {ol.Extent}\n   */\n  this.maxExtent = maxExtent;\n\n  /**\n   * The origin of the coordinate system for the point coordinates sent to\n   * the GPU. To eliminate jitter caused by precision problems in the GPU\n   * we use the \"Rendering Relative to Eye\" technique described in the \"3D\n   * Engine Design for Virtual Globes\" book.\n   * @protected\n   * @type {ol.Coordinate}\n   */\n  this.origin = ol.extent.getCenter(maxExtent);\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.projectionMatrix_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.offsetRotateMatrix_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.offsetScaleMatrix_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.tmpMat4_ = ol.vec.Mat4.create();\n\n  /**\n   * @protected\n   * @type {Array.<number>}\n   */\n  this.indices = [];\n\n  /**\n   * @protected\n   * @type {?ol.webgl.Buffer}\n   */\n  this.indicesBuffer = null;\n\n  /**\n   * Start index per feature (the index).\n   * @protected\n   * @type {Array.<number>}\n   */\n  this.startIndices = [];\n\n  /**\n   * Start index per feature (the feature).\n   * @protected\n   * @type {Array.<ol.Feature|ol.render.Feature>}\n   */\n  this.startIndicesFeature = [];\n\n  /**\n   * @protected\n   * @type {Array.<number>}\n   */\n  this.vertices = [];\n\n  /**\n   * @protected\n   * @type {?ol.webgl.Buffer}\n   */\n  this.verticesBuffer = null;\n\n  /**\n   * Optional parameter for PolygonReplay instances.\n   * @protected\n   * @type {ol.render.webgl.LineStringReplay|undefined}\n   */\n  this.lineStringReplay = undefined;\n\n};\nol.inherits(ol.render.webgl.Replay, ol.render.VectorContext);\n\n\n/**\n * @abstract\n * @param {ol.webgl.Context} context WebGL context.\n * @return {function()} Delete resources function.\n */\nol.render.webgl.Replay.prototype.getDeleteResourcesFunction = function(context) {};\n\n\n/**\n * @abstract\n * @param {ol.webgl.Context} context Context.\n */\nol.render.webgl.Replay.prototype.finish = function(context) {};\n\n\n/**\n * @abstract\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @return {ol.render.webgl.circlereplay.defaultshader.Locations|\n            ol.render.webgl.linestringreplay.defaultshader.Locations|\n            ol.render.webgl.polygonreplay.defaultshader.Locations|\n            ol.render.webgl.texturereplay.defaultshader.Locations} Locations.\n */\nol.render.webgl.Replay.prototype.setUpProgram = function(gl, context, size, pixelRatio) {};\n\n\n/**\n * @abstract\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.render.webgl.circlereplay.defaultshader.Locations|\n           ol.render.webgl.linestringreplay.defaultshader.Locations|\n           ol.render.webgl.polygonreplay.defaultshader.Locations|\n           ol.render.webgl.texturereplay.defaultshader.Locations} locations Locations.\n */\nol.render.webgl.Replay.prototype.shutDownProgram = function(gl, locations) {};\n\n\n/**\n * @abstract\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {boolean} hitDetection Hit detection mode.\n */\nol.render.webgl.Replay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) {};\n\n\n/**\n * @abstract\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.\n * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting\n *  this extent are checked.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.Replay.prototype.drawHitDetectionReplayOneByOne = function(gl, context, skippedFeaturesHash, featureCallback, opt_hitExtent) {};\n\n\n/**\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.\n * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.\n * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting\n *  this extent are checked.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.Replay.prototype.drawHitDetectionReplay = function(gl, context, skippedFeaturesHash,\n    featureCallback, oneByOne, opt_hitExtent) {\n  if (!oneByOne) {\n    // draw all hit-detection features in \"once\" (by texture group)\n    return this.drawHitDetectionReplayAll(gl, context,\n        skippedFeaturesHash, featureCallback);\n  } else {\n    // draw hit-detection features one by one\n    return this.drawHitDetectionReplayOneByOne(gl, context,\n        skippedFeaturesHash, featureCallback, opt_hitExtent);\n  }\n};\n\n\n/**\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.Replay.prototype.drawHitDetectionReplayAll = function(gl, context, skippedFeaturesHash,\n    featureCallback) {\n  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n  this.drawReplay(gl, context, skippedFeaturesHash, true);\n\n  var result = featureCallback(null);\n  if (result) {\n    return result;\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} opacity Global opacity.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.\n * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.\n * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting\n *  this extent are checked.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.Replay.prototype.replay = function(context,\n    center, resolution, rotation, size, pixelRatio,\n    opacity, skippedFeaturesHash,\n    featureCallback, oneByOne, opt_hitExtent) {\n  var gl = context.getGL();\n  var tmpStencil, tmpStencilFunc, tmpStencilMaskVal, tmpStencilRef, tmpStencilMask,\n      tmpStencilOpFail, tmpStencilOpPass, tmpStencilOpZFail;\n\n  if (this.lineStringReplay) {\n    tmpStencil = gl.isEnabled(gl.STENCIL_TEST);\n    tmpStencilFunc = gl.getParameter(gl.STENCIL_FUNC);\n    tmpStencilMaskVal = gl.getParameter(gl.STENCIL_VALUE_MASK);\n    tmpStencilRef = gl.getParameter(gl.STENCIL_REF);\n    tmpStencilMask = gl.getParameter(gl.STENCIL_WRITEMASK);\n    tmpStencilOpFail = gl.getParameter(gl.STENCIL_FAIL);\n    tmpStencilOpPass = gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);\n    tmpStencilOpZFail = gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);\n\n    gl.enable(gl.STENCIL_TEST);\n    gl.clear(gl.STENCIL_BUFFER_BIT);\n    gl.stencilMask(255);\n    gl.stencilFunc(gl.ALWAYS, 1, 255);\n    gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);\n\n    this.lineStringReplay.replay(context,\n        center, resolution, rotation, size, pixelRatio,\n        opacity, skippedFeaturesHash,\n        featureCallback, oneByOne, opt_hitExtent);\n\n    gl.stencilMask(0);\n    gl.stencilFunc(gl.NOTEQUAL, 1, 255);\n  }\n\n  context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.verticesBuffer);\n\n  context.bindBuffer(ol.webgl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\n  var locations = this.setUpProgram(gl, context, size, pixelRatio);\n\n  // set the \"uniform\" values\n  var projectionMatrix = ol.transform.reset(this.projectionMatrix_);\n  ol.transform.scale(projectionMatrix, 2 / (resolution * size[0]), 2 / (resolution * size[1]));\n  ol.transform.rotate(projectionMatrix, -rotation);\n  ol.transform.translate(projectionMatrix, -(center[0] - this.origin[0]), -(center[1] - this.origin[1]));\n\n  var offsetScaleMatrix = ol.transform.reset(this.offsetScaleMatrix_);\n  ol.transform.scale(offsetScaleMatrix, 2 / size[0], 2 / size[1]);\n\n  var offsetRotateMatrix = ol.transform.reset(this.offsetRotateMatrix_);\n  if (rotation !== 0) {\n    ol.transform.rotate(offsetRotateMatrix, -rotation);\n  }\n\n  gl.uniformMatrix4fv(locations.u_projectionMatrix, false,\n      ol.vec.Mat4.fromTransform(this.tmpMat4_, projectionMatrix));\n  gl.uniformMatrix4fv(locations.u_offsetScaleMatrix, false,\n      ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetScaleMatrix));\n  gl.uniformMatrix4fv(locations.u_offsetRotateMatrix, false,\n      ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetRotateMatrix));\n  gl.uniform1f(locations.u_opacity, opacity);\n\n  // draw!\n  var result;\n  if (featureCallback === undefined) {\n    this.drawReplay(gl, context, skippedFeaturesHash, false);\n  } else {\n    // draw feature by feature for the hit-detection\n    result = this.drawHitDetectionReplay(gl, context, skippedFeaturesHash,\n        featureCallback, oneByOne, opt_hitExtent);\n  }\n\n  // disable the vertex attrib arrays\n  this.shutDownProgram(gl, locations);\n\n  if (this.lineStringReplay) {\n    if (!tmpStencil) {\n      gl.disable(gl.STENCIL_TEST);\n    }\n    gl.clear(gl.STENCIL_BUFFER_BIT);\n    gl.stencilFunc(/** @type {number} */ (tmpStencilFunc),\n        /** @type {number} */ (tmpStencilRef), /** @type {number} */ (tmpStencilMaskVal));\n    gl.stencilMask(/** @type {number} */ (tmpStencilMask));\n    gl.stencilOp(/** @type {number} */ (tmpStencilOpFail),\n        /** @type {number} */ (tmpStencilOpZFail), /** @type {number} */ (tmpStencilOpPass));\n  }\n\n  return result;\n};\n\n/**\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {number} start Start index.\n * @param {number} end End index.\n */\nol.render.webgl.Replay.prototype.drawElements = function(\n    gl, context, start, end) {\n  var elementType = context.hasOESElementIndexUint ?\n    ol.webgl.UNSIGNED_INT : ol.webgl.UNSIGNED_SHORT;\n  var elementSize = context.hasOESElementIndexUint ? 4 : 2;\n\n  var numItems = end - start;\n  var offsetInBytes = start * elementSize;\n  gl.drawElements(ol.webgl.TRIANGLES, numItems, elementType, offsetInBytes);\n};\n\ngoog.provide('ol.render.webgl');\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.webgl.defaultFont = '10px sans-serif';\n\n\n/**\n * @const\n * @type {ol.Color}\n */\nol.render.webgl.defaultFillStyle = [0.0, 0.0, 0.0, 1.0];\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.webgl.defaultLineCap = 'round';\n\n\n/**\n * @const\n * @type {Array.<number>}\n */\nol.render.webgl.defaultLineDash = [];\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.defaultLineDashOffset = 0;\n\n\n/**\n * @const\n * @type {string}\n */\nol.render.webgl.defaultLineJoin = 'round';\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.defaultMiterLimit = 10;\n\n/**\n * @const\n * @type {ol.Color}\n */\nol.render.webgl.defaultStrokeStyle = [0.0, 0.0, 0.0, 1.0];\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.defaultTextAlign = 0.5;\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.defaultTextBaseline = 0.5;\n\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.defaultLineWidth = 1;\n\n/**\n * Calculates the orientation of a triangle based on the determinant method.\n * @param {number} x1 First X coordinate.\n * @param {number} y1 First Y coordinate.\n * @param {number} x2 Second X coordinate.\n * @param {number} y2 Second Y coordinate.\n * @param {number} x3 Third X coordinate.\n * @param {number} y3 Third Y coordinate.\n * @return {boolean|undefined} Triangle is clockwise.\n */\nol.render.webgl.triangleIsCounterClockwise = function(x1, y1, x2, y2, x3, y3) {\n  var area = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);\n  return (area <= ol.render.webgl.EPSILON && area >= -ol.render.webgl.EPSILON) ?\n    undefined : area > 0;\n};\n\n/**\n * @const\n * @type {number}\n */\nol.render.webgl.EPSILON = Number.EPSILON || 2.220446049250313e-16;\n\ngoog.provide('ol.webgl.Buffer');\n\ngoog.require('ol.webgl');\n\n\n/**\n * @constructor\n * @param {Array.<number>=} opt_arr Array.\n * @param {number=} opt_usage Usage.\n * @struct\n */\nol.webgl.Buffer = function(opt_arr, opt_usage) {\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.arr_ = opt_arr !== undefined ? opt_arr : [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.usage_ = opt_usage !== undefined ?\n    opt_usage : ol.webgl.Buffer.Usage_.STATIC_DRAW;\n\n};\n\n\n/**\n * @return {Array.<number>} Array.\n */\nol.webgl.Buffer.prototype.getArray = function() {\n  return this.arr_;\n};\n\n\n/**\n * @return {number} Usage.\n */\nol.webgl.Buffer.prototype.getUsage = function() {\n  return this.usage_;\n};\n\n\n/**\n * @enum {number}\n * @private\n */\nol.webgl.Buffer.Usage_ = {\n  STATIC_DRAW: ol.webgl.STATIC_DRAW,\n  STREAM_DRAW: ol.webgl.STREAM_DRAW,\n  DYNAMIC_DRAW: ol.webgl.DYNAMIC_DRAW\n};\n\ngoog.provide('ol.render.webgl.CircleReplay');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.color');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.render.webgl.circlereplay.defaultshader');\ngoog.require('ol.render.webgl.circlereplay.defaultshader.Locations');\ngoog.require('ol.render.webgl.Replay');\ngoog.require('ol.render.webgl');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.render.webgl.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.CircleReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.Replay.call(this, tolerance, maxExtent);\n\n  /**\n   * @private\n   * @type {ol.render.webgl.circlereplay.defaultshader.Locations}\n   */\n  this.defaultLocations_ = null;\n\n  /**\n   * @private\n   * @type {Array.<Array.<Array.<number>|number>>}\n   */\n  this.styles_ = [];\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.styleIndices_ = [];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.radius_ = 0;\n\n  /**\n   * @private\n   * @type {{fillColor: (Array.<number>|null),\n   *         strokeColor: (Array.<number>|null),\n   *         lineDash: Array.<number>,\n   *         lineDashOffset: (number|undefined),\n   *         lineWidth: (number|undefined),\n   *         changed: boolean}|null}\n   */\n  this.state_ = {\n    fillColor: null,\n    strokeColor: null,\n    lineDash: null,\n    lineDashOffset: undefined,\n    lineWidth: undefined,\n    changed: false\n  };\n\n};\nol.inherits(ol.render.webgl.CircleReplay, ol.render.webgl.Replay);\n\n\n/**\n * @private\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nol.render.webgl.CircleReplay.prototype.drawCoordinates_ = function(\n    flatCoordinates, offset, end, stride) {\n  var numVertices = this.vertices.length;\n  var numIndices = this.indices.length;\n  var n = numVertices / 4;\n  var i, ii;\n  for (i = offset, ii = end; i < ii; i += stride) {\n    this.vertices[numVertices++] = flatCoordinates[i];\n    this.vertices[numVertices++] = flatCoordinates[i + 1];\n    this.vertices[numVertices++] = 0;\n    this.vertices[numVertices++] = this.radius_;\n\n    this.vertices[numVertices++] = flatCoordinates[i];\n    this.vertices[numVertices++] = flatCoordinates[i + 1];\n    this.vertices[numVertices++] = 1;\n    this.vertices[numVertices++] = this.radius_;\n\n    this.vertices[numVertices++] = flatCoordinates[i];\n    this.vertices[numVertices++] = flatCoordinates[i + 1];\n    this.vertices[numVertices++] = 2;\n    this.vertices[numVertices++] = this.radius_;\n\n    this.vertices[numVertices++] = flatCoordinates[i];\n    this.vertices[numVertices++] = flatCoordinates[i + 1];\n    this.vertices[numVertices++] = 3;\n    this.vertices[numVertices++] = this.radius_;\n\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = n + 1;\n    this.indices[numIndices++] = n + 2;\n\n    this.indices[numIndices++] = n + 2;\n    this.indices[numIndices++] = n + 3;\n    this.indices[numIndices++] = n;\n\n    n += 4;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.drawCircle = function(circleGeometry, feature) {\n  var radius = circleGeometry.getRadius();\n  var stride = circleGeometry.getStride();\n  if (radius) {\n    this.startIndices.push(this.indices.length);\n    this.startIndicesFeature.push(feature);\n    if (this.state_.changed) {\n      this.styleIndices_.push(this.indices.length);\n      this.state_.changed = false;\n    }\n\n    this.radius_ = radius;\n    var flatCoordinates = circleGeometry.getFlatCoordinates();\n    flatCoordinates = ol.geom.flat.transform.translate(flatCoordinates, 0, 2,\n        stride, -this.origin[0], -this.origin[1]);\n    this.drawCoordinates_(flatCoordinates, 0, 2, stride);\n  } else {\n    if (this.state_.changed) {\n      this.styles_.pop();\n      if (this.styles_.length) {\n        var lastState = this.styles_[this.styles_.length - 1];\n        this.state_.fillColor =  /** @type {Array.<number>} */ (lastState[0]);\n        this.state_.strokeColor = /** @type {Array.<number>} */ (lastState[1]);\n        this.state_.lineWidth = /** @type {number} */ (lastState[2]);\n        this.state_.changed = false;\n      }\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n **/\nol.render.webgl.CircleReplay.prototype.finish = function(context) {\n  // create, bind, and populate the vertices buffer\n  this.verticesBuffer = new ol.webgl.Buffer(this.vertices);\n\n  // create, bind, and populate the indices buffer\n  this.indicesBuffer = new ol.webgl.Buffer(this.indices);\n\n  this.startIndices.push(this.indices.length);\n\n  //Clean up, if there is nothing to draw\n  if (this.styleIndices_.length === 0 && this.styles_.length > 0) {\n    this.styles_ = [];\n  }\n\n  this.vertices = null;\n  this.indices = null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.getDeleteResourcesFunction = function(context) {\n  // We only delete our stuff here. The shaders and the program may\n  // be used by other CircleReplay instances (for other layers). And\n  // they will be deleted when disposing of the ol.webgl.Context\n  // object.\n  var verticesBuffer = this.verticesBuffer;\n  var indicesBuffer = this.indicesBuffer;\n  return function() {\n    context.deleteBuffer(verticesBuffer);\n    context.deleteBuffer(indicesBuffer);\n  };\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.setUpProgram = function(gl, context, size, pixelRatio) {\n  // get the program\n  var fragmentShader, vertexShader;\n  fragmentShader = ol.render.webgl.circlereplay.defaultshader.fragment;\n  vertexShader = ol.render.webgl.circlereplay.defaultshader.vertex;\n  var program = context.getProgram(fragmentShader, vertexShader);\n\n  // get the locations\n  var locations;\n  if (!this.defaultLocations_) {\n    locations = new ol.render.webgl.circlereplay.defaultshader.Locations(gl, program);\n    this.defaultLocations_ = locations;\n  } else {\n    locations = this.defaultLocations_;\n  }\n\n  context.useProgram(program);\n\n  // enable the vertex attrib arrays\n  gl.enableVertexAttribArray(locations.a_position);\n  gl.vertexAttribPointer(locations.a_position, 2, ol.webgl.FLOAT,\n      false, 16, 0);\n\n  gl.enableVertexAttribArray(locations.a_instruction);\n  gl.vertexAttribPointer(locations.a_instruction, 1, ol.webgl.FLOAT,\n      false, 16, 8);\n\n  gl.enableVertexAttribArray(locations.a_radius);\n  gl.vertexAttribPointer(locations.a_radius, 1, ol.webgl.FLOAT,\n      false, 16, 12);\n\n  // Enable renderer specific uniforms.\n  gl.uniform2fv(locations.u_size, size);\n  gl.uniform1f(locations.u_pixelRatio, pixelRatio);\n\n  return locations;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.shutDownProgram = function(gl, locations) {\n  gl.disableVertexAttribArray(locations.a_position);\n  gl.disableVertexAttribArray(locations.a_instruction);\n  gl.disableVertexAttribArray(locations.a_radius);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) {\n  if (!ol.obj.isEmpty(skippedFeaturesHash)) {\n    this.drawReplaySkipping_(gl, context, skippedFeaturesHash);\n  } else {\n    //Draw by style groups to minimize drawElements() calls.\n    var i, start, end, nextStyle;\n    end = this.startIndices[this.startIndices.length - 1];\n    for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n      start = this.styleIndices_[i];\n      nextStyle = this.styles_[i];\n      this.setFillStyle_(gl, /** @type {Array.<number>} */ (nextStyle[0]));\n      this.setStrokeStyle_(gl, /** @type {Array.<number>} */ (nextStyle[1]),\n          /** @type {number} */ (nextStyle[2]));\n      this.drawElements(gl, context, start, end);\n      end = start;\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.drawHitDetectionReplayOneByOne = function(gl, context, skippedFeaturesHash,\n    featureCallback, opt_hitExtent) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex;\n  featureIndex = this.startIndices.length - 2;\n  end = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setFillStyle_(gl, /** @type {Array.<number>} */ (nextStyle[0]));\n    this.setStrokeStyle_(gl, /** @type {Array.<number>} */ (nextStyle[1]),\n        /** @type {number} */ (nextStyle[2]));\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      start = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid] === undefined &&\n          feature.getGeometry() &&\n          (opt_hitExtent === undefined || ol.extent.intersects(\n              /** @type {Array<number>} */ (opt_hitExtent),\n              feature.getGeometry().getExtent()))) {\n        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        this.drawElements(gl, context, start, end);\n\n        var result = featureCallback(feature);\n\n        if (result) {\n          return result;\n        }\n\n      }\n      featureIndex--;\n      end = start;\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object} skippedFeaturesHash Ids of features to skip.\n */\nol.render.webgl.CircleReplay.prototype.drawReplaySkipping_ = function(gl, context, skippedFeaturesHash) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex, featureStart;\n  featureIndex = this.startIndices.length - 2;\n  end = start = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setFillStyle_(gl, /** @type {Array.<number>} */ (nextStyle[0]));\n    this.setStrokeStyle_(gl, /** @type {Array.<number>} */ (nextStyle[1]),\n        /** @type {number} */ (nextStyle[2]));\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      featureStart = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid]) {\n        if (start !== end) {\n          this.drawElements(gl, context, start, end);\n        }\n        end = featureStart;\n      }\n      featureIndex--;\n      start = featureStart;\n    }\n    if (start !== end) {\n      this.drawElements(gl, context, start, end);\n    }\n    start = end = groupStart;\n  }\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {Array.<number>} color Color.\n */\nol.render.webgl.CircleReplay.prototype.setFillStyle_ = function(gl, color) {\n  gl.uniform4fv(this.defaultLocations_.u_fillColor, color);\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {Array.<number>} color Color.\n * @param {number} lineWidth Line width.\n */\nol.render.webgl.CircleReplay.prototype.setStrokeStyle_ = function(gl, color, lineWidth) {\n  gl.uniform4fv(this.defaultLocations_.u_strokeColor, color);\n  gl.uniform1f(this.defaultLocations_.u_lineWidth, lineWidth);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.CircleReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  var strokeStyleColor, strokeStyleWidth;\n  if (strokeStyle) {\n    var strokeStyleLineDash = strokeStyle.getLineDash();\n    this.state_.lineDash = strokeStyleLineDash ?\n      strokeStyleLineDash : ol.render.webgl.defaultLineDash;\n    var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n    this.state_.lineDashOffset = strokeStyleLineDashOffset ?\n      strokeStyleLineDashOffset : ol.render.webgl.defaultLineDashOffset;\n    strokeStyleColor = strokeStyle.getColor();\n    if (!(strokeStyleColor instanceof CanvasGradient) &&\n        !(strokeStyleColor instanceof CanvasPattern)) {\n      strokeStyleColor = ol.color.asArray(strokeStyleColor).map(function(c, i) {\n        return i != 3 ? c / 255 : c;\n      }) || ol.render.webgl.defaultStrokeStyle;\n    } else {\n      strokeStyleColor = ol.render.webgl.defaultStrokeStyle;\n    }\n    strokeStyleWidth = strokeStyle.getWidth();\n    strokeStyleWidth = strokeStyleWidth !== undefined ?\n      strokeStyleWidth : ol.render.webgl.defaultLineWidth;\n  } else {\n    strokeStyleColor = [0, 0, 0, 0];\n    strokeStyleWidth = 0;\n  }\n  var fillStyleColor = fillStyle ? fillStyle.getColor() : [0, 0, 0, 0];\n  if (!(fillStyleColor instanceof CanvasGradient) &&\n      !(fillStyleColor instanceof CanvasPattern)) {\n    fillStyleColor = ol.color.asArray(fillStyleColor).map(function(c, i) {\n      return i != 3 ? c / 255 : c;\n    }) || ol.render.webgl.defaultFillStyle;\n  } else {\n    fillStyleColor = ol.render.webgl.defaultFillStyle;\n  }\n  if (!this.state_.strokeColor || !ol.array.equals(this.state_.strokeColor, strokeStyleColor) ||\n      !this.state_.fillColor || !ol.array.equals(this.state_.fillColor, fillStyleColor) ||\n      this.state_.lineWidth !== strokeStyleWidth) {\n    this.state_.changed = true;\n    this.state_.fillColor = fillStyleColor;\n    this.state_.strokeColor = strokeStyleColor;\n    this.state_.lineWidth = strokeStyleWidth;\n    this.styles_.push([fillStyleColor, strokeStyleColor, strokeStyleWidth]);\n  }\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.texturereplay.defaultshader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.render.webgl.texturereplay.defaultshader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\nvarying vec2 v_texCoord;\\nvarying float v_opacity;\\n\\nuniform float u_opacity;\\nuniform sampler2D u_image;\\n\\nvoid main(void) {\\n  vec4 texColor = texture2D(u_image, v_texCoord);\\n  gl_FragColor.rgb = texColor.rgb;\\n  float alpha = texColor.a * v_opacity * u_opacity;\\n  if (alpha == 0.0) {\\n    discard;\\n  }\\n  gl_FragColor.a = alpha;\\n}\\n' :\n  'precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}');\n\nol.render.webgl.texturereplay.defaultshader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  'varying vec2 v_texCoord;\\nvarying float v_opacity;\\n\\nattribute vec2 a_position;\\nattribute vec2 a_texCoord;\\nattribute vec2 a_offsets;\\nattribute float a_opacity;\\nattribute float a_rotateWithView;\\n\\nuniform mat4 u_projectionMatrix;\\nuniform mat4 u_offsetScaleMatrix;\\nuniform mat4 u_offsetRotateMatrix;\\n\\nvoid main(void) {\\n  mat4 offsetMatrix = u_offsetScaleMatrix;\\n  if (a_rotateWithView == 1.0) {\\n    offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\\n  }\\n  vec4 offsets = offsetMatrix * vec4(a_offsets, 0.0, 0.0);\\n  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\\n  v_texCoord = a_texCoord;\\n  v_opacity = a_opacity;\\n}\\n\\n\\n' :\n  'varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.0,0.0);gl_Position=h*vec4(c,0.0,1.0)+offsets;a=d;b=f;}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.texturereplay.defaultshader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.render.webgl.texturereplay.defaultshader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_projectionMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_projectionMatrix' : 'h');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetScaleMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetScaleMatrix' : 'i');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetRotateMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetRotateMatrix' : 'j');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_opacity = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_opacity' : 'k');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_image = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_image' : 'l');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'c');\n\n  /**\n   * @type {number}\n   */\n  this.a_texCoord = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_texCoord' : 'd');\n\n  /**\n   * @type {number}\n   */\n  this.a_offsets = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_offsets' : 'e');\n\n  /**\n   * @type {number}\n   */\n  this.a_opacity = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_opacity' : 'f');\n\n  /**\n   * @type {number}\n   */\n  this.a_rotateWithView = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_rotateWithView' : 'g');\n};\n\ngoog.provide('ol.webgl.ContextEventType');\n\n\n/**\n * @enum {string}\n */\nol.webgl.ContextEventType = {\n  LOST: 'webglcontextlost',\n  RESTORED: 'webglcontextrestored'\n};\n\ngoog.provide('ol.webgl.Context');\n\ngoog.require('ol');\ngoog.require('ol.Disposable');\ngoog.require('ol.array');\ngoog.require('ol.events');\ngoog.require('ol.obj');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.ContextEventType');\n\n\n/**\n * @classdesc\n * A WebGL context for accessing low-level WebGL capabilities.\n *\n * @constructor\n * @extends {ol.Disposable}\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {WebGLRenderingContext} gl GL.\n */\nol.webgl.Context = function(canvas, gl) {\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = canvas;\n\n  /**\n   * @private\n   * @type {WebGLRenderingContext}\n   */\n  this.gl_ = gl;\n\n  /**\n   * @private\n   * @type {Object.<string, ol.WebglBufferCacheEntry>}\n   */\n  this.bufferCache_ = {};\n\n  /**\n   * @private\n   * @type {Object.<string, WebGLShader>}\n   */\n  this.shaderCache_ = {};\n\n  /**\n   * @private\n   * @type {Object.<string, WebGLProgram>}\n   */\n  this.programCache_ = {};\n\n  /**\n   * @private\n   * @type {WebGLProgram}\n   */\n  this.currentProgram_ = null;\n\n  /**\n   * @private\n   * @type {WebGLFramebuffer}\n   */\n  this.hitDetectionFramebuffer_ = null;\n\n  /**\n   * @private\n   * @type {WebGLTexture}\n   */\n  this.hitDetectionTexture_ = null;\n\n  /**\n   * @private\n   * @type {WebGLRenderbuffer}\n   */\n  this.hitDetectionRenderbuffer_ = null;\n\n  /**\n   * @type {boolean}\n   */\n  this.hasOESElementIndexUint = ol.array.includes(\n      ol.WEBGL_EXTENSIONS, 'OES_element_index_uint');\n\n  // use the OES_element_index_uint extension if available\n  if (this.hasOESElementIndexUint) {\n    gl.getExtension('OES_element_index_uint');\n  }\n\n  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.LOST,\n      this.handleWebGLContextLost, this);\n  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.RESTORED,\n      this.handleWebGLContextRestored, this);\n\n};\nol.inherits(ol.webgl.Context, ol.Disposable);\n\n\n/**\n * Just bind the buffer if it's in the cache. Otherwise create\n * the WebGL buffer, bind it, populate it, and add an entry to\n * the cache.\n * @param {number} target Target.\n * @param {ol.webgl.Buffer} buf Buffer.\n */\nol.webgl.Context.prototype.bindBuffer = function(target, buf) {\n  var gl = this.getGL();\n  var arr = buf.getArray();\n  var bufferKey = String(ol.getUid(buf));\n  if (bufferKey in this.bufferCache_) {\n    var bufferCacheEntry = this.bufferCache_[bufferKey];\n    gl.bindBuffer(target, bufferCacheEntry.buffer);\n  } else {\n    var buffer = gl.createBuffer();\n    gl.bindBuffer(target, buffer);\n    var /** @type {ArrayBufferView} */ arrayBuffer;\n    if (target == ol.webgl.ARRAY_BUFFER) {\n      arrayBuffer = new Float32Array(arr);\n    } else if (target == ol.webgl.ELEMENT_ARRAY_BUFFER) {\n      arrayBuffer = this.hasOESElementIndexUint ?\n        new Uint32Array(arr) : new Uint16Array(arr);\n    }\n    gl.bufferData(target, arrayBuffer, buf.getUsage());\n    this.bufferCache_[bufferKey] = {\n      buf: buf,\n      buffer: buffer\n    };\n  }\n};\n\n\n/**\n * @param {ol.webgl.Buffer} buf Buffer.\n */\nol.webgl.Context.prototype.deleteBuffer = function(buf) {\n  var gl = this.getGL();\n  var bufferKey = String(ol.getUid(buf));\n  var bufferCacheEntry = this.bufferCache_[bufferKey];\n  if (!gl.isContextLost()) {\n    gl.deleteBuffer(bufferCacheEntry.buffer);\n  }\n  delete this.bufferCache_[bufferKey];\n};\n\n\n/**\n * @inheritDoc\n */\nol.webgl.Context.prototype.disposeInternal = function() {\n  ol.events.unlistenAll(this.canvas_);\n  var gl = this.getGL();\n  if (!gl.isContextLost()) {\n    var key;\n    for (key in this.bufferCache_) {\n      gl.deleteBuffer(this.bufferCache_[key].buffer);\n    }\n    for (key in this.programCache_) {\n      gl.deleteProgram(this.programCache_[key]);\n    }\n    for (key in this.shaderCache_) {\n      gl.deleteShader(this.shaderCache_[key]);\n    }\n    // delete objects for hit-detection\n    gl.deleteFramebuffer(this.hitDetectionFramebuffer_);\n    gl.deleteRenderbuffer(this.hitDetectionRenderbuffer_);\n    gl.deleteTexture(this.hitDetectionTexture_);\n  }\n};\n\n\n/**\n * @return {HTMLCanvasElement} Canvas.\n */\nol.webgl.Context.prototype.getCanvas = function() {\n  return this.canvas_;\n};\n\n\n/**\n * Get the WebGL rendering context\n * @return {WebGLRenderingContext} The rendering context.\n * @api\n */\nol.webgl.Context.prototype.getGL = function() {\n  return this.gl_;\n};\n\n\n/**\n * Get the frame buffer for hit detection.\n * @return {WebGLFramebuffer} The hit detection frame buffer.\n */\nol.webgl.Context.prototype.getHitDetectionFramebuffer = function() {\n  if (!this.hitDetectionFramebuffer_) {\n    this.initHitDetectionFramebuffer_();\n  }\n  return this.hitDetectionFramebuffer_;\n};\n\n\n/**\n * Get shader from the cache if it's in the cache. Otherwise, create\n * the WebGL shader, compile it, and add entry to cache.\n * @param {ol.webgl.Shader} shaderObject Shader object.\n * @return {WebGLShader} Shader.\n */\nol.webgl.Context.prototype.getShader = function(shaderObject) {\n  var shaderKey = String(ol.getUid(shaderObject));\n  if (shaderKey in this.shaderCache_) {\n    return this.shaderCache_[shaderKey];\n  } else {\n    var gl = this.getGL();\n    var shader = gl.createShader(shaderObject.getType());\n    gl.shaderSource(shader, shaderObject.getSource());\n    gl.compileShader(shader);\n    this.shaderCache_[shaderKey] = shader;\n    return shader;\n  }\n};\n\n\n/**\n * Get the program from the cache if it's in the cache. Otherwise create\n * the WebGL program, attach the shaders to it, and add an entry to the\n * cache.\n * @param {ol.webgl.Fragment} fragmentShaderObject Fragment shader.\n * @param {ol.webgl.Vertex} vertexShaderObject Vertex shader.\n * @return {WebGLProgram} Program.\n */\nol.webgl.Context.prototype.getProgram = function(\n    fragmentShaderObject, vertexShaderObject) {\n  var programKey =\n      ol.getUid(fragmentShaderObject) + '/' + ol.getUid(vertexShaderObject);\n  if (programKey in this.programCache_) {\n    return this.programCache_[programKey];\n  } else {\n    var gl = this.getGL();\n    var program = gl.createProgram();\n    gl.attachShader(program, this.getShader(fragmentShaderObject));\n    gl.attachShader(program, this.getShader(vertexShaderObject));\n    gl.linkProgram(program);\n    this.programCache_[programKey] = program;\n    return program;\n  }\n};\n\n\n/**\n * FIXME empy description for jsdoc\n */\nol.webgl.Context.prototype.handleWebGLContextLost = function() {\n  ol.obj.clear(this.bufferCache_);\n  ol.obj.clear(this.shaderCache_);\n  ol.obj.clear(this.programCache_);\n  this.currentProgram_ = null;\n  this.hitDetectionFramebuffer_ = null;\n  this.hitDetectionTexture_ = null;\n  this.hitDetectionRenderbuffer_ = null;\n};\n\n\n/**\n * FIXME empy description for jsdoc\n */\nol.webgl.Context.prototype.handleWebGLContextRestored = function() {\n};\n\n\n/**\n * Creates a 1x1 pixel framebuffer for the hit-detection.\n * @private\n */\nol.webgl.Context.prototype.initHitDetectionFramebuffer_ = function() {\n  var gl = this.gl_;\n  var framebuffer = gl.createFramebuffer();\n  gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n\n  var texture = ol.webgl.Context.createEmptyTexture(gl, 1, 1);\n  var renderbuffer = gl.createRenderbuffer();\n  gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);\n  gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 1, 1);\n  gl.framebufferTexture2D(\n      gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n  gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,\n      gl.RENDERBUFFER, renderbuffer);\n\n  gl.bindTexture(gl.TEXTURE_2D, null);\n  gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n  gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n  this.hitDetectionFramebuffer_ = framebuffer;\n  this.hitDetectionTexture_ = texture;\n  this.hitDetectionRenderbuffer_ = renderbuffer;\n};\n\n\n/**\n * Use a program.  If the program is already in use, this will return `false`.\n * @param {WebGLProgram} program Program.\n * @return {boolean} Changed.\n * @api\n */\nol.webgl.Context.prototype.useProgram = function(program) {\n  if (program == this.currentProgram_) {\n    return false;\n  } else {\n    var gl = this.getGL();\n    gl.useProgram(program);\n    this.currentProgram_ = program;\n    return true;\n  }\n};\n\n\n/**\n * @param {WebGLRenderingContext} gl WebGL rendering context.\n * @param {number=} opt_wrapS wrapS.\n * @param {number=} opt_wrapT wrapT.\n * @return {WebGLTexture} The texture.\n * @private\n */\nol.webgl.Context.createTexture_ = function(gl, opt_wrapS, opt_wrapT) {\n  var texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_2D, texture);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\n  if (opt_wrapS !== undefined) {\n    gl.texParameteri(\n        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_S, opt_wrapS);\n  }\n  if (opt_wrapT !== undefined) {\n    gl.texParameteri(\n        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_T, opt_wrapT);\n  }\n\n  return texture;\n};\n\n\n/**\n * @param {WebGLRenderingContext} gl WebGL rendering context.\n * @param {number} width Width.\n * @param {number} height Height.\n * @param {number=} opt_wrapS wrapS.\n * @param {number=} opt_wrapT wrapT.\n * @return {WebGLTexture} The texture.\n */\nol.webgl.Context.createEmptyTexture = function(\n    gl, width, height, opt_wrapS, opt_wrapT) {\n  var texture = ol.webgl.Context.createTexture_(gl, opt_wrapS, opt_wrapT);\n  gl.texImage2D(\n      gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE,\n      null);\n\n  return texture;\n};\n\n\n/**\n * @param {WebGLRenderingContext} gl WebGL rendering context.\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n * @param {number=} opt_wrapS wrapS.\n * @param {number=} opt_wrapT wrapT.\n * @return {WebGLTexture} The texture.\n */\nol.webgl.Context.createTexture = function(gl, image, opt_wrapS, opt_wrapT) {\n  var texture = ol.webgl.Context.createTexture_(gl, opt_wrapS, opt_wrapT);\n  gl.texImage2D(\n      gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n\n  return texture;\n};\n\ngoog.provide('ol.render.webgl.TextureReplay');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.render.webgl.texturereplay.defaultshader');\ngoog.require('ol.render.webgl.texturereplay.defaultshader.Locations');\ngoog.require('ol.render.webgl.Replay');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Context');\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.render.webgl.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.TextureReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.Replay.call(this, tolerance, maxExtent);\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.anchorX = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.anchorY = undefined;\n\n  /**\n   * @type {Array.<number>}\n   * @protected\n   */\n  this.groupIndices = [];\n\n  /**\n   * @type {Array.<number>}\n   * @protected\n   */\n  this.hitDetectionGroupIndices = [];\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.height = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.imageHeight = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.imageWidth = undefined;\n\n  /**\n   * @protected\n   * @type {ol.render.webgl.texturereplay.defaultshader.Locations}\n   */\n  this.defaultLocations = null;\n\n  /**\n   * @protected\n   * @type {number|undefined}\n   */\n  this.opacity = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.originX = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.originY = undefined;\n\n  /**\n   * @protected\n   * @type {boolean|undefined}\n   */\n  this.rotateWithView = undefined;\n\n  /**\n   * @protected\n   * @type {number|undefined}\n   */\n  this.rotation = undefined;\n\n  /**\n   * @protected\n   * @type {number|undefined}\n   */\n  this.scale = undefined;\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.width = undefined;\n};\nol.inherits(ol.render.webgl.TextureReplay, ol.render.webgl.Replay);\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.getDeleteResourcesFunction = function(context) {\n  var verticesBuffer = this.verticesBuffer;\n  var indicesBuffer = this.indicesBuffer;\n  var textures = this.getTextures(true);\n  var gl = context.getGL();\n  return function() {\n    if (!gl.isContextLost()) {\n      var i, ii;\n      for (i = 0, ii = textures.length; i < ii; ++i) {\n        gl.deleteTexture(textures[i]);\n      }\n    }\n    context.deleteBuffer(verticesBuffer);\n    context.deleteBuffer(indicesBuffer);\n  };\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} My end.\n * @protected\n */\nol.render.webgl.TextureReplay.prototype.drawCoordinates = function(flatCoordinates, offset, end, stride) {\n  var anchorX = /** @type {number} */ (this.anchorX);\n  var anchorY = /** @type {number} */ (this.anchorY);\n  var height = /** @type {number} */ (this.height);\n  var imageHeight = /** @type {number} */ (this.imageHeight);\n  var imageWidth = /** @type {number} */ (this.imageWidth);\n  var opacity = /** @type {number} */ (this.opacity);\n  var originX = /** @type {number} */ (this.originX);\n  var originY = /** @type {number} */ (this.originY);\n  var rotateWithView = this.rotateWithView ? 1.0 : 0.0;\n  // this.rotation_ is anti-clockwise, but rotation is clockwise\n  var rotation = /** @type {number} */ (-this.rotation);\n  var scale = /** @type {number} */ (this.scale);\n  var width = /** @type {number} */ (this.width);\n  var cos = Math.cos(rotation);\n  var sin = Math.sin(rotation);\n  var numIndices = this.indices.length;\n  var numVertices = this.vertices.length;\n  var i, n, offsetX, offsetY, x, y;\n  for (i = offset; i < end; i += stride) {\n    x = flatCoordinates[i] - this.origin[0];\n    y = flatCoordinates[i + 1] - this.origin[1];\n\n    // There are 4 vertices per [x, y] point, one for each corner of the\n    // rectangle we're going to draw. We'd use 1 vertex per [x, y] point if\n    // WebGL supported Geometry Shaders (which can emit new vertices), but that\n    // is not currently the case.\n    //\n    // And each vertex includes 8 values: the x and y coordinates, the x and\n    // y offsets used to calculate the position of the corner, the u and\n    // v texture coordinates for the corner, the opacity, and whether the\n    // the image should be rotated with the view (rotateWithView).\n\n    n = numVertices / 8;\n\n    // bottom-left corner\n    offsetX = -scale * anchorX;\n    offsetY = -scale * (height - anchorY);\n    this.vertices[numVertices++] = x;\n    this.vertices[numVertices++] = y;\n    this.vertices[numVertices++] = offsetX * cos - offsetY * sin;\n    this.vertices[numVertices++] = offsetX * sin + offsetY * cos;\n    this.vertices[numVertices++] = originX / imageWidth;\n    this.vertices[numVertices++] = (originY + height) / imageHeight;\n    this.vertices[numVertices++] = opacity;\n    this.vertices[numVertices++] = rotateWithView;\n\n    // bottom-right corner\n    offsetX = scale * (width - anchorX);\n    offsetY = -scale * (height - anchorY);\n    this.vertices[numVertices++] = x;\n    this.vertices[numVertices++] = y;\n    this.vertices[numVertices++] = offsetX * cos - offsetY * sin;\n    this.vertices[numVertices++] = offsetX * sin + offsetY * cos;\n    this.vertices[numVertices++] = (originX + width) / imageWidth;\n    this.vertices[numVertices++] = (originY + height) / imageHeight;\n    this.vertices[numVertices++] = opacity;\n    this.vertices[numVertices++] = rotateWithView;\n\n    // top-right corner\n    offsetX = scale * (width - anchorX);\n    offsetY = scale * anchorY;\n    this.vertices[numVertices++] = x;\n    this.vertices[numVertices++] = y;\n    this.vertices[numVertices++] = offsetX * cos - offsetY * sin;\n    this.vertices[numVertices++] = offsetX * sin + offsetY * cos;\n    this.vertices[numVertices++] = (originX + width) / imageWidth;\n    this.vertices[numVertices++] = originY / imageHeight;\n    this.vertices[numVertices++] = opacity;\n    this.vertices[numVertices++] = rotateWithView;\n\n    // top-left corner\n    offsetX = -scale * anchorX;\n    offsetY = scale * anchorY;\n    this.vertices[numVertices++] = x;\n    this.vertices[numVertices++] = y;\n    this.vertices[numVertices++] = offsetX * cos - offsetY * sin;\n    this.vertices[numVertices++] = offsetX * sin + offsetY * cos;\n    this.vertices[numVertices++] = originX / imageWidth;\n    this.vertices[numVertices++] = originY / imageHeight;\n    this.vertices[numVertices++] = opacity;\n    this.vertices[numVertices++] = rotateWithView;\n\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = n + 1;\n    this.indices[numIndices++] = n + 2;\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = n + 2;\n    this.indices[numIndices++] = n + 3;\n  }\n\n  return numVertices;\n};\n\n\n/**\n * @protected\n * @param {Array.<WebGLTexture>} textures Textures.\n * @param {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>} images\n *    Images.\n * @param {Object.<string, WebGLTexture>} texturePerImage Texture cache.\n * @param {WebGLRenderingContext} gl Gl.\n */\nol.render.webgl.TextureReplay.prototype.createTextures = function(textures, images, texturePerImage, gl) {\n  var texture, image, uid, i;\n  var ii = images.length;\n  for (i = 0; i < ii; ++i) {\n    image = images[i];\n\n    uid = ol.getUid(image).toString();\n    if (uid in texturePerImage) {\n      texture = texturePerImage[uid];\n    } else {\n      texture = ol.webgl.Context.createTexture(\n          gl, image, ol.webgl.CLAMP_TO_EDGE, ol.webgl.CLAMP_TO_EDGE);\n      texturePerImage[uid] = texture;\n    }\n    textures[i] = texture;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.setUpProgram = function(gl, context, size, pixelRatio) {\n  // get the program\n  var fragmentShader = ol.render.webgl.texturereplay.defaultshader.fragment;\n  var vertexShader = ol.render.webgl.texturereplay.defaultshader.vertex;\n  var program = context.getProgram(fragmentShader, vertexShader);\n\n  // get the locations\n  var locations;\n  if (!this.defaultLocations) {\n    locations = new ol.render.webgl.texturereplay.defaultshader.Locations(gl, program);\n    this.defaultLocations = locations;\n  } else {\n    locations = this.defaultLocations;\n  }\n\n  // use the program (FIXME: use the return value)\n  context.useProgram(program);\n\n  // enable the vertex attrib arrays\n  gl.enableVertexAttribArray(locations.a_position);\n  gl.vertexAttribPointer(locations.a_position, 2, ol.webgl.FLOAT,\n      false, 32, 0);\n\n  gl.enableVertexAttribArray(locations.a_offsets);\n  gl.vertexAttribPointer(locations.a_offsets, 2, ol.webgl.FLOAT,\n      false, 32, 8);\n\n  gl.enableVertexAttribArray(locations.a_texCoord);\n  gl.vertexAttribPointer(locations.a_texCoord, 2, ol.webgl.FLOAT,\n      false, 32, 16);\n\n  gl.enableVertexAttribArray(locations.a_opacity);\n  gl.vertexAttribPointer(locations.a_opacity, 1, ol.webgl.FLOAT,\n      false, 32, 24);\n\n  gl.enableVertexAttribArray(locations.a_rotateWithView);\n  gl.vertexAttribPointer(locations.a_rotateWithView, 1, ol.webgl.FLOAT,\n      false, 32, 28);\n\n  return locations;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.shutDownProgram = function(gl, locations) {\n  gl.disableVertexAttribArray(locations.a_position);\n  gl.disableVertexAttribArray(locations.a_offsets);\n  gl.disableVertexAttribArray(locations.a_texCoord);\n  gl.disableVertexAttribArray(locations.a_opacity);\n  gl.disableVertexAttribArray(locations.a_rotateWithView);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) {\n  var textures = hitDetection ? this.getHitDetectionTextures() : this.getTextures();\n  var groupIndices = hitDetection ? this.hitDetectionGroupIndices : this.groupIndices;\n\n  if (!ol.obj.isEmpty(skippedFeaturesHash)) {\n    this.drawReplaySkipping(\n        gl, context, skippedFeaturesHash, textures, groupIndices);\n  } else {\n    var i, ii, start;\n    for (i = 0, ii = textures.length, start = 0; i < ii; ++i) {\n      gl.bindTexture(ol.webgl.TEXTURE_2D, textures[i]);\n      var end = groupIndices[i];\n      this.drawElements(gl, context, start, end);\n      start = end;\n    }\n  }\n};\n\n\n/**\n * Draw the replay while paying attention to skipped features.\n *\n * This functions creates groups of features that can be drawn to together,\n * so that the number of `drawElements` calls is minimized.\n *\n * For example given the following texture groups:\n *\n *    Group 1: A B C\n *    Group 2: D [E] F G\n *\n * If feature E should be skipped, the following `drawElements` calls will be\n * made:\n *\n *    drawElements with feature A, B and C\n *    drawElements with feature D\n *    drawElements with feature F and G\n *\n * @protected\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {Array.<WebGLTexture>} textures Textures.\n * @param {Array.<number>} groupIndices Texture group indices.\n */\nol.render.webgl.TextureReplay.prototype.drawReplaySkipping = function(gl, context, skippedFeaturesHash, textures,\n    groupIndices) {\n  var featureIndex = 0;\n\n  var i, ii;\n  for (i = 0, ii = textures.length; i < ii; ++i) {\n    gl.bindTexture(ol.webgl.TEXTURE_2D, textures[i]);\n    var groupStart = (i > 0) ? groupIndices[i - 1] : 0;\n    var groupEnd = groupIndices[i];\n\n    var start = groupStart;\n    var end = groupStart;\n    while (featureIndex < this.startIndices.length &&\n        this.startIndices[featureIndex] <= groupEnd) {\n      var feature = this.startIndicesFeature[featureIndex];\n\n      var featureUid = ol.getUid(feature).toString();\n      if (skippedFeaturesHash[featureUid] !== undefined) {\n        // feature should be skipped\n        if (start !== end) {\n          // draw the features so far\n          this.drawElements(gl, context, start, end);\n        }\n        // continue with the next feature\n        start = (featureIndex === this.startIndices.length - 1) ?\n          groupEnd : this.startIndices[featureIndex + 1];\n        end = start;\n      } else {\n        // the feature is not skipped, augment the end index\n        end = (featureIndex === this.startIndices.length - 1) ?\n          groupEnd : this.startIndices[featureIndex + 1];\n      }\n      featureIndex++;\n    }\n\n    if (start !== end) {\n      // draw the remaining features (in case there was no skipped feature\n      // in this texture group, all features of a group are drawn together)\n      this.drawElements(gl, context, start, end);\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.drawHitDetectionReplayOneByOne = function(gl, context, skippedFeaturesHash,\n    featureCallback, opt_hitExtent) {\n  var i, groupStart, start, end, feature, featureUid;\n  var featureIndex = this.startIndices.length - 1;\n  var hitDetectionTextures = this.getHitDetectionTextures();\n  for (i = hitDetectionTextures.length - 1; i >= 0; --i) {\n    gl.bindTexture(ol.webgl.TEXTURE_2D, hitDetectionTextures[i]);\n    groupStart = (i > 0) ? this.hitDetectionGroupIndices[i - 1] : 0;\n    end = this.hitDetectionGroupIndices[i];\n\n    // draw all features for this texture group\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      start = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid] === undefined &&\n          feature.getGeometry() &&\n          (opt_hitExtent === undefined || ol.extent.intersects(\n              /** @type {Array<number>} */ (opt_hitExtent),\n              feature.getGeometry().getExtent()))) {\n        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        this.drawElements(gl, context, start, end);\n\n        var result = featureCallback(feature);\n        if (result) {\n          return result;\n        }\n      }\n\n      end = start;\n      featureIndex--;\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextureReplay.prototype.finish = function(context) {\n  this.anchorX = undefined;\n  this.anchorY = undefined;\n  this.height = undefined;\n  this.imageHeight = undefined;\n  this.imageWidth = undefined;\n  this.indices = null;\n  this.opacity = undefined;\n  this.originX = undefined;\n  this.originY = undefined;\n  this.rotateWithView = undefined;\n  this.rotation = undefined;\n  this.scale = undefined;\n  this.vertices = null;\n  this.width = undefined;\n};\n\n\n/**\n * @abstract\n * @protected\n * @param {boolean=} opt_all Return hit detection textures with regular ones.\n * @returns {Array.<WebGLTexture>} Textures.\n */\nol.render.webgl.TextureReplay.prototype.getTextures = function(opt_all) {};\n\n\n/**\n * @abstract\n * @protected\n * @returns {Array.<WebGLTexture>} Textures.\n */\nol.render.webgl.TextureReplay.prototype.getHitDetectionTextures = function() {};\n\ngoog.provide('ol.render.webgl.ImageReplay');\n\ngoog.require('ol');\ngoog.require('ol.render.webgl.TextureReplay');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.render.webgl.TextureReplay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.ImageReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.TextureReplay.call(this, tolerance, maxExtent);\n\n  /**\n   * @type {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>}\n   * @protected\n   */\n  this.images_ = [];\n\n  /**\n   * @type {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>}\n   * @protected\n   */\n  this.hitDetectionImages_ = [];\n\n  /**\n   * @type {Array.<WebGLTexture>}\n   * @private\n   */\n  this.textures_ = [];\n\n  /**\n   * @type {Array.<WebGLTexture>}\n   * @private\n   */\n  this.hitDetectionTextures_ = [];\n\n};\nol.inherits(ol.render.webgl.ImageReplay, ol.render.webgl.TextureReplay);\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {\n  this.startIndices.push(this.indices.length);\n  this.startIndicesFeature.push(feature);\n  var flatCoordinates = multiPointGeometry.getFlatCoordinates();\n  var stride = multiPointGeometry.getStride();\n  this.drawCoordinates(\n      flatCoordinates, 0, flatCoordinates.length, stride);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {\n  this.startIndices.push(this.indices.length);\n  this.startIndicesFeature.push(feature);\n  var flatCoordinates = pointGeometry.getFlatCoordinates();\n  var stride = pointGeometry.getStride();\n  this.drawCoordinates(\n      flatCoordinates, 0, flatCoordinates.length, stride);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.finish = function(context) {\n  var gl = context.getGL();\n\n  this.groupIndices.push(this.indices.length);\n  this.hitDetectionGroupIndices.push(this.indices.length);\n\n  // create, bind, and populate the vertices buffer\n  this.verticesBuffer = new ol.webgl.Buffer(this.vertices);\n\n  var indices = this.indices;\n\n  // create, bind, and populate the indices buffer\n  this.indicesBuffer = new ol.webgl.Buffer(indices);\n\n  // create textures\n  /** @type {Object.<string, WebGLTexture>} */\n  var texturePerImage = {};\n\n  this.createTextures(this.textures_, this.images_, texturePerImage, gl);\n\n  this.createTextures(this.hitDetectionTextures_, this.hitDetectionImages_,\n      texturePerImage, gl);\n\n  this.images_ = null;\n  this.hitDetectionImages_ = null;\n  ol.render.webgl.TextureReplay.prototype.finish.call(this, context);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.setImageStyle = function(imageStyle) {\n  var anchor = imageStyle.getAnchor();\n  var image = imageStyle.getImage(1);\n  var imageSize = imageStyle.getImageSize();\n  var hitDetectionImage = imageStyle.getHitDetectionImage(1);\n  var opacity = imageStyle.getOpacity();\n  var origin = imageStyle.getOrigin();\n  var rotateWithView = imageStyle.getRotateWithView();\n  var rotation = imageStyle.getRotation();\n  var size = imageStyle.getSize();\n  var scale = imageStyle.getScale();\n\n  var currentImage;\n  if (this.images_.length === 0) {\n    this.images_.push(image);\n  } else {\n    currentImage = this.images_[this.images_.length - 1];\n    if (ol.getUid(currentImage) != ol.getUid(image)) {\n      this.groupIndices.push(this.indices.length);\n      this.images_.push(image);\n    }\n  }\n\n  if (this.hitDetectionImages_.length === 0) {\n    this.hitDetectionImages_.push(hitDetectionImage);\n  } else {\n    currentImage =\n        this.hitDetectionImages_[this.hitDetectionImages_.length - 1];\n    if (ol.getUid(currentImage) != ol.getUid(hitDetectionImage)) {\n      this.hitDetectionGroupIndices.push(this.indices.length);\n      this.hitDetectionImages_.push(hitDetectionImage);\n    }\n  }\n\n  this.anchorX = anchor[0];\n  this.anchorY = anchor[1];\n  this.height = size[1];\n  this.imageHeight = imageSize[1];\n  this.imageWidth = imageSize[0];\n  this.opacity = opacity;\n  this.originX = origin[0];\n  this.originY = origin[1];\n  this.rotation = rotation;\n  this.rotateWithView = rotateWithView;\n  this.scale = scale;\n  this.width = size[0];\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.getTextures = function(opt_all) {\n  return opt_all ? this.textures_.concat(this.hitDetectionTextures_) : this.textures_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ImageReplay.prototype.getHitDetectionTextures = function() {\n  return this.hitDetectionTextures_;\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.linestringreplay.defaultshader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.render.webgl.linestringreplay.defaultshader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\nvarying float v_round;\\nvarying vec2 v_roundVertex;\\nvarying float v_halfWidth;\\n\\n\\n\\nuniform float u_opacity;\\nuniform vec4 u_color;\\nuniform vec2 u_size;\\nuniform float u_pixelRatio;\\n\\nvoid main(void) {\\n  if (v_round > 0.0) {\\n    vec2 windowCoords = vec2((v_roundVertex.x + 1.0) / 2.0 * u_size.x * u_pixelRatio,\\n        (v_roundVertex.y + 1.0) / 2.0 * u_size.y * u_pixelRatio);\\n    if (length(windowCoords - gl_FragCoord.xy) > v_halfWidth * u_pixelRatio) {\\n      discard;\\n    }\\n  }\\n  gl_FragColor = u_color;\\n  float alpha = u_color.a * u_opacity;\\n  if (alpha == 0.0) {\\n    discard;\\n  }\\n  gl_FragColor.a = alpha;\\n}\\n' :\n  'precision mediump float;varying float a;varying vec2 aVertex;varying float c;uniform float m;uniform vec4 n;uniform vec2 o;uniform float p;void main(void){if(a>0.0){vec2 windowCoords=vec2((aVertex.x+1.0)/2.0*o.x*p,(aVertex.y+1.0)/2.0*o.y*p);if(length(windowCoords-gl_FragCoord.xy)>c*p){discard;}} gl_FragColor=n;float alpha=n.a*m;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}');\n\nol.render.webgl.linestringreplay.defaultshader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  'varying float v_round;\\nvarying vec2 v_roundVertex;\\nvarying float v_halfWidth;\\n\\n\\nattribute vec2 a_lastPos;\\nattribute vec2 a_position;\\nattribute vec2 a_nextPos;\\nattribute float a_direction;\\n\\nuniform mat4 u_projectionMatrix;\\nuniform mat4 u_offsetScaleMatrix;\\nuniform mat4 u_offsetRotateMatrix;\\nuniform float u_lineWidth;\\nuniform float u_miterLimit;\\n\\nbool nearlyEquals(in float value, in float ref) {\\n  float epsilon = 0.000000000001;\\n  return value >= ref - epsilon && value <= ref + epsilon;\\n}\\n\\nvoid alongNormal(out vec2 offset, in vec2 nextP, in float turnDir, in float direction) {\\n  vec2 dirVect = nextP - a_position;\\n  vec2 normal = normalize(vec2(-turnDir * dirVect.y, turnDir * dirVect.x));\\n  offset = u_lineWidth / 2.0 * normal * direction;\\n}\\n\\nvoid miterUp(out vec2 offset, out float round, in bool isRound, in float direction) {\\n  float halfWidth = u_lineWidth / 2.0;\\n  vec2 tangent = normalize(normalize(a_nextPos - a_position) + normalize(a_position - a_lastPos));\\n  vec2 normal = vec2(-tangent.y, tangent.x);\\n  vec2 dirVect = a_nextPos - a_position;\\n  vec2 tmpNormal = normalize(vec2(-dirVect.y, dirVect.x));\\n  float miterLength = abs(halfWidth / dot(normal, tmpNormal));\\n  offset = normal * direction * miterLength;\\n  round = 0.0;\\n  if (isRound) {\\n    round = 1.0;\\n  } else if (miterLength > u_miterLimit + u_lineWidth) {\\n    offset = halfWidth * tmpNormal * direction;\\n  }\\n}\\n\\nbool miterDown(out vec2 offset, in vec4 projPos, in mat4 offsetMatrix, in float direction) {\\n  bool degenerate = false;\\n  vec2 tangent = normalize(normalize(a_nextPos - a_position) + normalize(a_position - a_lastPos));\\n  vec2 normal = vec2(-tangent.y, tangent.x);\\n  vec2 dirVect = a_lastPos - a_position;\\n  vec2 tmpNormal = normalize(vec2(-dirVect.y, dirVect.x));\\n  vec2 longOffset, shortOffset, longVertex;\\n  vec4 shortProjVertex;\\n  float halfWidth = u_lineWidth / 2.0;\\n  if (length(a_nextPos - a_position) > length(a_lastPos - a_position)) {\\n    longOffset = tmpNormal * direction * halfWidth;\\n    shortOffset = normalize(vec2(dirVect.y, -dirVect.x)) * direction * halfWidth;\\n    longVertex = a_nextPos;\\n    shortProjVertex = u_projectionMatrix * vec4(a_lastPos, 0.0, 1.0);\\n  } else {\\n    shortOffset = tmpNormal * direction * halfWidth;\\n    longOffset = normalize(vec2(dirVect.y, -dirVect.x)) * direction * halfWidth;\\n    longVertex = a_lastPos;\\n    shortProjVertex = u_projectionMatrix * vec4(a_nextPos, 0.0, 1.0);\\n  }\\n  //Intersection algorithm based on theory by Paul Bourke (http://paulbourke.net/geometry/pointlineplane/).\\n  vec4 p1 = u_projectionMatrix * vec4(longVertex, 0.0, 1.0) + offsetMatrix * vec4(longOffset, 0.0, 0.0);\\n  vec4 p2 = projPos + offsetMatrix * vec4(longOffset, 0.0, 0.0);\\n  vec4 p3 = shortProjVertex + offsetMatrix * vec4(-shortOffset, 0.0, 0.0);\\n  vec4 p4 = shortProjVertex + offsetMatrix * vec4(shortOffset, 0.0, 0.0);\\n  float denom = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);\\n  float firstU = ((p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x)) / denom;\\n  float secondU = ((p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x)) / denom;\\n  float epsilon = 0.000000000001;\\n  if (firstU > epsilon && firstU < 1.0 - epsilon && secondU > epsilon && secondU < 1.0 - epsilon) {\\n    shortProjVertex.x = p1.x + firstU * (p2.x - p1.x);\\n    shortProjVertex.y = p1.y + firstU * (p2.y - p1.y);\\n    offset = shortProjVertex.xy;\\n    degenerate = true;\\n  } else {\\n    float miterLength = abs(halfWidth / dot(normal, tmpNormal));\\n    offset = normal * direction * miterLength;\\n  }\\n  return degenerate;\\n}\\n\\nvoid squareCap(out vec2 offset, out float round, in bool isRound, in vec2 nextP,\\n    in float turnDir, in float direction) {\\n  round = 0.0;\\n  vec2 dirVect = a_position - nextP;\\n  vec2 firstNormal = normalize(dirVect);\\n  vec2 secondNormal = vec2(turnDir * firstNormal.y * direction, -turnDir * firstNormal.x * direction);\\n  vec2 hypotenuse = normalize(firstNormal - secondNormal);\\n  vec2 normal = vec2(turnDir * hypotenuse.y * direction, -turnDir * hypotenuse.x * direction);\\n  float length = sqrt(v_halfWidth * v_halfWidth * 2.0);\\n  offset = normal * length;\\n  if (isRound) {\\n    round = 1.0;\\n  }\\n}\\n\\nvoid main(void) {\\n  bool degenerate = false;\\n  float direction = float(sign(a_direction));\\n  mat4 offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\\n  vec2 offset;\\n  vec4 projPos = u_projectionMatrix * vec4(a_position, 0.0, 1.0);\\n  bool round = nearlyEquals(mod(a_direction, 2.0), 0.0);\\n\\n  v_round = 0.0;\\n  v_halfWidth = u_lineWidth / 2.0;\\n  v_roundVertex = projPos.xy;\\n\\n  if (nearlyEquals(mod(a_direction, 3.0), 0.0) || nearlyEquals(mod(a_direction, 17.0), 0.0)) {\\n    alongNormal(offset, a_nextPos, 1.0, direction);\\n  } else if (nearlyEquals(mod(a_direction, 5.0), 0.0) || nearlyEquals(mod(a_direction, 13.0), 0.0)) {\\n    alongNormal(offset, a_lastPos, -1.0, direction);\\n  } else if (nearlyEquals(mod(a_direction, 23.0), 0.0)) {\\n    miterUp(offset, v_round, round, direction);\\n  } else if (nearlyEquals(mod(a_direction, 19.0), 0.0)) {\\n    degenerate = miterDown(offset, projPos, offsetMatrix, direction);\\n  } else if (nearlyEquals(mod(a_direction, 7.0), 0.0)) {\\n    squareCap(offset, v_round, round, a_nextPos, 1.0, direction);\\n  } else if (nearlyEquals(mod(a_direction, 11.0), 0.0)) {\\n    squareCap(offset, v_round, round, a_lastPos, -1.0, direction);\\n  }\\n  if (!degenerate) {\\n    vec4 offsets = offsetMatrix * vec4(offset, 0.0, 0.0);\\n    gl_Position = projPos + offsets;\\n  } else {\\n    gl_Position = vec4(offset, 0.0, 1.0);\\n  }\\n}\\n\\n\\n' :\n  'varying float a;varying vec2 aVertex;varying float c;attribute vec2 d;attribute vec2 e;attribute vec2 f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;uniform float k;uniform float l;bool nearlyEquals(in float value,in float ref){float epsilon=0.000000000001;return value>=ref-epsilon&&value<=ref+epsilon;}void alongNormal(out vec2 offset,in vec2 nextP,in float turnDir,in float direction){vec2 dirVect=nextP-e;vec2 normal=normalize(vec2(-turnDir*dirVect.y,turnDir*dirVect.x));offset=k/2.0*normal*direction;}void miterUp(out vec2 offset,out float round,in bool isRound,in float direction){float halfWidth=k/2.0;vec2 tangent=normalize(normalize(f-e)+normalize(e-d));vec2 normal=vec2(-tangent.y,tangent.x);vec2 dirVect=f-e;vec2 tmpNormal=normalize(vec2(-dirVect.y,dirVect.x));float miterLength=abs(halfWidth/dot(normal,tmpNormal));offset=normal*direction*miterLength;round=0.0;if(isRound){round=1.0;}else if(miterLength>l+k){offset=halfWidth*tmpNormal*direction;}} bool miterDown(out vec2 offset,in vec4 projPos,in mat4 offsetMatrix,in float direction){bool degenerate=false;vec2 tangent=normalize(normalize(f-e)+normalize(e-d));vec2 normal=vec2(-tangent.y,tangent.x);vec2 dirVect=d-e;vec2 tmpNormal=normalize(vec2(-dirVect.y,dirVect.x));vec2 longOffset,shortOffset,longVertex;vec4 shortProjVertex;float halfWidth=k/2.0;if(length(f-e)>length(d-e)){longOffset=tmpNormal*direction*halfWidth;shortOffset=normalize(vec2(dirVect.y,-dirVect.x))*direction*halfWidth;longVertex=f;shortProjVertex=h*vec4(d,0.0,1.0);}else{shortOffset=tmpNormal*direction*halfWidth;longOffset=normalize(vec2(dirVect.y,-dirVect.x))*direction*halfWidth;longVertex=d;shortProjVertex=h*vec4(f,0.0,1.0);}vec4 p1=h*vec4(longVertex,0.0,1.0)+offsetMatrix*vec4(longOffset,0.0,0.0);vec4 p2=projPos+offsetMatrix*vec4(longOffset,0.0,0.0);vec4 p3=shortProjVertex+offsetMatrix*vec4(-shortOffset,0.0,0.0);vec4 p4=shortProjVertex+offsetMatrix*vec4(shortOffset,0.0,0.0);float denom=(p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y);float firstU=((p4.x-p3.x)*(p1.y-p3.y)-(p4.y-p3.y)*(p1.x-p3.x))/denom;float secondU=((p2.x-p1.x)*(p1.y-p3.y)-(p2.y-p1.y)*(p1.x-p3.x))/denom;float epsilon=0.000000000001;if(firstU>epsilon&&firstU<1.0-epsilon&&secondU>epsilon&&secondU<1.0-epsilon){shortProjVertex.x=p1.x+firstU*(p2.x-p1.x);shortProjVertex.y=p1.y+firstU*(p2.y-p1.y);offset=shortProjVertex.xy;degenerate=true;}else{float miterLength=abs(halfWidth/dot(normal,tmpNormal));offset=normal*direction*miterLength;}return degenerate;}void squareCap(out vec2 offset,out float round,in bool isRound,in vec2 nextP,in float turnDir,in float direction){round=0.0;vec2 dirVect=e-nextP;vec2 firstNormal=normalize(dirVect);vec2 secondNormal=vec2(turnDir*firstNormal.y*direction,-turnDir*firstNormal.x*direction);vec2 hypotenuse=normalize(firstNormal-secondNormal);vec2 normal=vec2(turnDir*hypotenuse.y*direction,-turnDir*hypotenuse.x*direction);float length=sqrt(c*c*2.0);offset=normal*length;if(isRound){round=1.0;}} void main(void){bool degenerate=false;float direction=float(sign(g));mat4 offsetMatrix=i*j;vec2 offset;vec4 projPos=h*vec4(e,0.0,1.0);bool round=nearlyEquals(mod(g,2.0),0.0);a=0.0;c=k/2.0;aVertex=projPos.xy;if(nearlyEquals(mod(g,3.0),0.0)||nearlyEquals(mod(g,17.0),0.0)){alongNormal(offset,f,1.0,direction);}else if(nearlyEquals(mod(g,5.0),0.0)||nearlyEquals(mod(g,13.0),0.0)){alongNormal(offset,d,-1.0,direction);}else if(nearlyEquals(mod(g,23.0),0.0)){miterUp(offset,a,round,direction);}else if(nearlyEquals(mod(g,19.0),0.0)){degenerate=miterDown(offset,projPos,offsetMatrix,direction);}else if(nearlyEquals(mod(g,7.0),0.0)){squareCap(offset,a,round,f,1.0,direction);}else if(nearlyEquals(mod(g,11.0),0.0)){squareCap(offset,a,round,d,-1.0,direction);}if(!degenerate){vec4 offsets=offsetMatrix*vec4(offset,0.0,0.0);gl_Position=projPos+offsets;}else{gl_Position=vec4(offset,0.0,1.0);}}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.linestringreplay.defaultshader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.render.webgl.linestringreplay.defaultshader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_projectionMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_projectionMatrix' : 'h');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetScaleMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetScaleMatrix' : 'i');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetRotateMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetRotateMatrix' : 'j');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_lineWidth = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_lineWidth' : 'k');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_miterLimit = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_miterLimit' : 'l');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_opacity = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_opacity' : 'm');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_color = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_color' : 'n');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_size = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_size' : 'o');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_pixelRatio = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_pixelRatio' : 'p');\n\n  /**\n   * @type {number}\n   */\n  this.a_lastPos = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_lastPos' : 'd');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'e');\n\n  /**\n   * @type {number}\n   */\n  this.a_nextPos = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_nextPos' : 'f');\n\n  /**\n   * @type {number}\n   */\n  this.a_direction = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_direction' : 'g');\n};\n\ngoog.provide('ol.render.webgl.LineStringReplay');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.color');\ngoog.require('ol.extent');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.geom.flat.topology');\ngoog.require('ol.obj');\ngoog.require('ol.render.webgl');\ngoog.require('ol.render.webgl.Replay');\ngoog.require('ol.render.webgl.linestringreplay.defaultshader');\ngoog.require('ol.render.webgl.linestringreplay.defaultshader.Locations');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.render.webgl.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.LineStringReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.Replay.call(this, tolerance, maxExtent);\n\n  /**\n   * @private\n   * @type {ol.render.webgl.linestringreplay.defaultshader.Locations}\n   */\n  this.defaultLocations_ = null;\n\n  /**\n   * @private\n   * @type {Array.<Array.<?>>}\n   */\n  this.styles_ = [];\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.styleIndices_ = [];\n\n  /**\n   * @private\n   * @type {{strokeColor: (Array.<number>|null),\n   *         lineCap: (string|undefined),\n   *         lineDash: Array.<number>,\n   *         lineDashOffset: (number|undefined),\n   *         lineJoin: (string|undefined),\n   *         lineWidth: (number|undefined),\n   *         miterLimit: (number|undefined),\n   *         changed: boolean}|null}\n   */\n  this.state_ = {\n    strokeColor: null,\n    lineCap: undefined,\n    lineDash: null,\n    lineDashOffset: undefined,\n    lineJoin: undefined,\n    lineWidth: undefined,\n    miterLimit: undefined,\n    changed: false\n  };\n\n};\nol.inherits(ol.render.webgl.LineStringReplay, ol.render.webgl.Replay);\n\n\n/**\n * Draw one segment.\n * @private\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nol.render.webgl.LineStringReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) {\n\n  var i, ii;\n  var numVertices = this.vertices.length;\n  var numIndices = this.indices.length;\n  //To save a vertex, the direction of a point is a product of the sign (1 or -1), a prime from\n  //ol.render.webgl.LineStringReplay.Instruction_, and a rounding factor (1 or 2). If the product is even,\n  //we round it. If it is odd, we don't.\n  var lineJoin = this.state_.lineJoin === 'bevel' ? 0 :\n    this.state_.lineJoin === 'miter' ? 1 : 2;\n  var lineCap = this.state_.lineCap === 'butt' ? 0 :\n    this.state_.lineCap === 'square' ? 1 : 2;\n  var closed = ol.geom.flat.topology.lineStringIsClosed(flatCoordinates, offset, end, stride);\n  var startCoords, sign, n;\n  var lastIndex = numIndices;\n  var lastSign = 1;\n  //We need the adjacent vertices to define normals in joins. p0 = last, p1 = current, p2 = next.\n  var p0, p1, p2;\n\n  for (i = offset, ii = end; i < ii; i += stride) {\n\n    n = numVertices / 7;\n\n    p0 = p1;\n    p1 = p2 || [flatCoordinates[i], flatCoordinates[i + 1]];\n    //First vertex.\n    if (i === offset) {\n      p2 = [flatCoordinates[i + stride], flatCoordinates[i + stride + 1]];\n      if (end - offset === stride * 2 && ol.array.equals(p1, p2)) {\n        break;\n      }\n      if (closed) {\n        //A closed line! Complete the circle.\n        p0 = [flatCoordinates[end - stride * 2],\n          flatCoordinates[end - stride * 2 + 1]];\n\n        startCoords = p2;\n      } else {\n        //Add the first two/four vertices.\n\n        if (lineCap) {\n          numVertices = this.addVertices_([0, 0], p1, p2,\n              lastSign * ol.render.webgl.LineStringReplay.Instruction_.BEGIN_LINE_CAP * lineCap, numVertices);\n\n          numVertices = this.addVertices_([0, 0], p1, p2,\n              -lastSign * ol.render.webgl.LineStringReplay.Instruction_.BEGIN_LINE_CAP * lineCap, numVertices);\n\n          this.indices[numIndices++] = n + 2;\n          this.indices[numIndices++] = n;\n          this.indices[numIndices++] = n + 1;\n\n          this.indices[numIndices++] = n + 1;\n          this.indices[numIndices++] = n + 3;\n          this.indices[numIndices++] = n + 2;\n\n        }\n\n        numVertices = this.addVertices_([0, 0], p1, p2,\n            lastSign * ol.render.webgl.LineStringReplay.Instruction_.BEGIN_LINE * (lineCap || 1), numVertices);\n\n        numVertices = this.addVertices_([0, 0], p1, p2,\n            -lastSign * ol.render.webgl.LineStringReplay.Instruction_.BEGIN_LINE * (lineCap || 1), numVertices);\n\n        lastIndex = numVertices / 7 - 1;\n\n        continue;\n      }\n    } else if (i === end - stride) {\n      //Last vertex.\n      if (closed) {\n        //Same as the first vertex.\n        p2 = startCoords;\n        break;\n      } else {\n        p0 = p0 || [0, 0];\n\n        numVertices = this.addVertices_(p0, p1, [0, 0],\n            lastSign * ol.render.webgl.LineStringReplay.Instruction_.END_LINE * (lineCap || 1), numVertices);\n\n        numVertices = this.addVertices_(p0, p1, [0, 0],\n            -lastSign * ol.render.webgl.LineStringReplay.Instruction_.END_LINE * (lineCap || 1), numVertices);\n\n        this.indices[numIndices++] = n;\n        this.indices[numIndices++] = lastIndex - 1;\n        this.indices[numIndices++] = lastIndex;\n\n        this.indices[numIndices++] = lastIndex;\n        this.indices[numIndices++] = n + 1;\n        this.indices[numIndices++] = n;\n\n        if (lineCap) {\n          numVertices = this.addVertices_(p0, p1, [0, 0],\n              lastSign * ol.render.webgl.LineStringReplay.Instruction_.END_LINE_CAP * lineCap, numVertices);\n\n          numVertices = this.addVertices_(p0, p1, [0, 0],\n              -lastSign * ol.render.webgl.LineStringReplay.Instruction_.END_LINE_CAP * lineCap, numVertices);\n\n          this.indices[numIndices++] = n + 2;\n          this.indices[numIndices++] = n;\n          this.indices[numIndices++] = n + 1;\n\n          this.indices[numIndices++] = n + 1;\n          this.indices[numIndices++] = n + 3;\n          this.indices[numIndices++] = n + 2;\n\n        }\n\n        break;\n      }\n    } else {\n      p2 = [flatCoordinates[i + stride], flatCoordinates[i + stride + 1]];\n    }\n\n    // We group CW and straight lines, thus the not so inituitive CCW checking function.\n    sign = ol.render.webgl.triangleIsCounterClockwise(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1])\n      ? -1 : 1;\n\n    numVertices = this.addVertices_(p0, p1, p2,\n        sign * ol.render.webgl.LineStringReplay.Instruction_.BEVEL_FIRST * (lineJoin || 1), numVertices);\n\n    numVertices = this.addVertices_(p0, p1, p2,\n        sign * ol.render.webgl.LineStringReplay.Instruction_.BEVEL_SECOND * (lineJoin || 1), numVertices);\n\n    numVertices = this.addVertices_(p0, p1, p2,\n        -sign * ol.render.webgl.LineStringReplay.Instruction_.MITER_BOTTOM * (lineJoin || 1), numVertices);\n\n    if (i > offset) {\n      this.indices[numIndices++] = n;\n      this.indices[numIndices++] = lastIndex - 1;\n      this.indices[numIndices++] = lastIndex;\n\n      this.indices[numIndices++] = n + 2;\n      this.indices[numIndices++] = n;\n      this.indices[numIndices++] = lastSign * sign > 0 ? lastIndex : lastIndex - 1;\n    }\n\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = n + 2;\n    this.indices[numIndices++] = n + 1;\n\n    lastIndex = n + 2;\n    lastSign = sign;\n\n    //Add miter\n    if (lineJoin) {\n      numVertices = this.addVertices_(p0, p1, p2,\n          sign * ol.render.webgl.LineStringReplay.Instruction_.MITER_TOP * lineJoin, numVertices);\n\n      this.indices[numIndices++] = n + 1;\n      this.indices[numIndices++] = n + 3;\n      this.indices[numIndices++] = n;\n    }\n  }\n\n  if (closed) {\n    n = n || numVertices / 7;\n    sign = ol.geom.flat.orient.linearRingIsClockwise([p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]], 0, 6, 2)\n      ? 1 : -1;\n\n    numVertices = this.addVertices_(p0, p1, p2,\n        sign * ol.render.webgl.LineStringReplay.Instruction_.BEVEL_FIRST * (lineJoin || 1), numVertices);\n\n    numVertices = this.addVertices_(p0, p1, p2,\n        -sign * ol.render.webgl.LineStringReplay.Instruction_.MITER_BOTTOM * (lineJoin || 1), numVertices);\n\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = lastIndex - 1;\n    this.indices[numIndices++] = lastIndex;\n\n    this.indices[numIndices++] = n + 1;\n    this.indices[numIndices++] = n;\n    this.indices[numIndices++] = lastSign * sign > 0 ? lastIndex : lastIndex - 1;\n  }\n};\n\n/**\n * @param {Array.<number>} p0 Last coordinates.\n * @param {Array.<number>} p1 Current coordinates.\n * @param {Array.<number>} p2 Next coordinates.\n * @param {number} product Sign, instruction, and rounding product.\n * @param {number} numVertices Vertex counter.\n * @return {number} Vertex counter.\n * @private\n */\nol.render.webgl.LineStringReplay.prototype.addVertices_ = function(p0, p1, p2, product, numVertices) {\n  this.vertices[numVertices++] = p0[0];\n  this.vertices[numVertices++] = p0[1];\n  this.vertices[numVertices++] = p1[0];\n  this.vertices[numVertices++] = p1[1];\n  this.vertices[numVertices++] = p2[0];\n  this.vertices[numVertices++] = p2[1];\n  this.vertices[numVertices++] = product;\n\n  return numVertices;\n};\n\n/**\n * Check if the linestring can be drawn (i. e. valid).\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} The linestring can be drawn.\n * @private\n */\nol.render.webgl.LineStringReplay.prototype.isValid_ = function(flatCoordinates, offset, end, stride) {\n  var range = end - offset;\n  if (range < stride * 2) {\n    return false;\n  } else if (range === stride * 2) {\n    var firstP = [flatCoordinates[offset], flatCoordinates[offset + 1]];\n    var lastP = [flatCoordinates[offset + stride], flatCoordinates[offset + stride + 1]];\n    return !ol.array.equals(firstP, lastP);\n  }\n\n  return true;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {\n  var flatCoordinates = lineStringGeometry.getFlatCoordinates();\n  var stride = lineStringGeometry.getStride();\n  if (this.isValid_(flatCoordinates, 0, flatCoordinates.length, stride)) {\n    flatCoordinates = ol.geom.flat.transform.translate(flatCoordinates, 0, flatCoordinates.length,\n        stride, -this.origin[0], -this.origin[1]);\n    if (this.state_.changed) {\n      this.styleIndices_.push(this.indices.length);\n      this.state_.changed = false;\n    }\n    this.startIndices.push(this.indices.length);\n    this.startIndicesFeature.push(feature);\n    this.drawCoordinates_(\n        flatCoordinates, 0, flatCoordinates.length, stride);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {\n  var indexCount = this.indices.length;\n  var ends = multiLineStringGeometry.getEnds();\n  ends.unshift(0);\n  var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n  var stride = multiLineStringGeometry.getStride();\n  var i, ii;\n  if (ends.length > 1) {\n    for (i = 1, ii = ends.length; i < ii; ++i) {\n      if (this.isValid_(flatCoordinates, ends[i - 1], ends[i], stride)) {\n        var lineString = ol.geom.flat.transform.translate(flatCoordinates, ends[i - 1], ends[i],\n            stride, -this.origin[0], -this.origin[1]);\n        this.drawCoordinates_(\n            lineString, 0, lineString.length, stride);\n      }\n    }\n  }\n  if (this.indices.length > indexCount) {\n    this.startIndices.push(indexCount);\n    this.startIndicesFeature.push(feature);\n    if (this.state_.changed) {\n      this.styleIndices_.push(indexCount);\n      this.state_.changed = false;\n    }\n  }\n};\n\n\n/**\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<Array.<number>>} holeFlatCoordinates Hole flat coordinates.\n * @param {number} stride Stride.\n */\nol.render.webgl.LineStringReplay.prototype.drawPolygonCoordinates = function(\n    flatCoordinates, holeFlatCoordinates, stride) {\n  if (!ol.geom.flat.topology.lineStringIsClosed(flatCoordinates, 0,\n      flatCoordinates.length, stride)) {\n    flatCoordinates.push(flatCoordinates[0]);\n    flatCoordinates.push(flatCoordinates[1]);\n  }\n  this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);\n  if (holeFlatCoordinates.length) {\n    var i, ii;\n    for (i = 0, ii = holeFlatCoordinates.length; i < ii; ++i) {\n      if (!ol.geom.flat.topology.lineStringIsClosed(holeFlatCoordinates[i], 0,\n          holeFlatCoordinates[i].length, stride)) {\n        holeFlatCoordinates[i].push(holeFlatCoordinates[i][0]);\n        holeFlatCoordinates[i].push(holeFlatCoordinates[i][1]);\n      }\n      this.drawCoordinates_(holeFlatCoordinates[i], 0,\n          holeFlatCoordinates[i].length, stride);\n    }\n  }\n};\n\n\n/**\n * @param {ol.Feature|ol.render.Feature} feature Feature.\n * @param {number=} opt_index Index count.\n */\nol.render.webgl.LineStringReplay.prototype.setPolygonStyle = function(feature, opt_index) {\n  var index = opt_index === undefined ? this.indices.length : opt_index;\n  this.startIndices.push(index);\n  this.startIndicesFeature.push(feature);\n  if (this.state_.changed) {\n    this.styleIndices_.push(index);\n    this.state_.changed = false;\n  }\n};\n\n\n/**\n * @return {number} Current index.\n */\nol.render.webgl.LineStringReplay.prototype.getCurrentIndex = function() {\n  return this.indices.length;\n};\n\n\n/**\n * @inheritDoc\n **/\nol.render.webgl.LineStringReplay.prototype.finish = function(context) {\n  // create, bind, and populate the vertices buffer\n  this.verticesBuffer = new ol.webgl.Buffer(this.vertices);\n\n  // create, bind, and populate the indices buffer\n  this.indicesBuffer = new ol.webgl.Buffer(this.indices);\n\n  this.startIndices.push(this.indices.length);\n\n  //Clean up, if there is nothing to draw\n  if (this.styleIndices_.length === 0 && this.styles_.length > 0) {\n    this.styles_ = [];\n  }\n\n  this.vertices = null;\n  this.indices = null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.getDeleteResourcesFunction = function(context) {\n  var verticesBuffer = this.verticesBuffer;\n  var indicesBuffer = this.indicesBuffer;\n  return function() {\n    context.deleteBuffer(verticesBuffer);\n    context.deleteBuffer(indicesBuffer);\n  };\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.setUpProgram = function(gl, context, size, pixelRatio) {\n  // get the program\n  var fragmentShader, vertexShader;\n  fragmentShader = ol.render.webgl.linestringreplay.defaultshader.fragment;\n  vertexShader = ol.render.webgl.linestringreplay.defaultshader.vertex;\n  var program = context.getProgram(fragmentShader, vertexShader);\n\n  // get the locations\n  var locations;\n  if (!this.defaultLocations_) {\n    locations = new ol.render.webgl.linestringreplay.defaultshader.Locations(gl, program);\n    this.defaultLocations_ = locations;\n  } else {\n    locations = this.defaultLocations_;\n  }\n\n  context.useProgram(program);\n\n  // enable the vertex attrib arrays\n  gl.enableVertexAttribArray(locations.a_lastPos);\n  gl.vertexAttribPointer(locations.a_lastPos, 2, ol.webgl.FLOAT,\n      false, 28, 0);\n\n  gl.enableVertexAttribArray(locations.a_position);\n  gl.vertexAttribPointer(locations.a_position, 2, ol.webgl.FLOAT,\n      false, 28, 8);\n\n  gl.enableVertexAttribArray(locations.a_nextPos);\n  gl.vertexAttribPointer(locations.a_nextPos, 2, ol.webgl.FLOAT,\n      false, 28, 16);\n\n  gl.enableVertexAttribArray(locations.a_direction);\n  gl.vertexAttribPointer(locations.a_direction, 1, ol.webgl.FLOAT,\n      false, 28, 24);\n\n  // Enable renderer specific uniforms.\n  gl.uniform2fv(locations.u_size, size);\n  gl.uniform1f(locations.u_pixelRatio, pixelRatio);\n\n  return locations;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.shutDownProgram = function(gl, locations) {\n  gl.disableVertexAttribArray(locations.a_lastPos);\n  gl.disableVertexAttribArray(locations.a_position);\n  gl.disableVertexAttribArray(locations.a_nextPos);\n  gl.disableVertexAttribArray(locations.a_direction);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) {\n  //Save GL parameters.\n  var tmpDepthFunc = /** @type {number} */ (gl.getParameter(gl.DEPTH_FUNC));\n  var tmpDepthMask = /** @type {boolean} */ (gl.getParameter(gl.DEPTH_WRITEMASK));\n\n  if (!hitDetection) {\n    gl.enable(gl.DEPTH_TEST);\n    gl.depthMask(true);\n    gl.depthFunc(gl.NOTEQUAL);\n  }\n\n  if (!ol.obj.isEmpty(skippedFeaturesHash)) {\n    this.drawReplaySkipping_(gl, context, skippedFeaturesHash);\n  } else {\n    //Draw by style groups to minimize drawElements() calls.\n    var i, start, end, nextStyle;\n    end = this.startIndices[this.startIndices.length - 1];\n    for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n      start = this.styleIndices_[i];\n      nextStyle = this.styles_[i];\n      this.setStrokeStyle_(gl, nextStyle[0], nextStyle[1], nextStyle[2]);\n      this.drawElements(gl, context, start, end);\n      gl.clear(gl.DEPTH_BUFFER_BIT);\n      end = start;\n    }\n  }\n  if (!hitDetection) {\n    gl.disable(gl.DEPTH_TEST);\n    gl.clear(gl.DEPTH_BUFFER_BIT);\n    //Restore GL parameters.\n    gl.depthMask(tmpDepthMask);\n    gl.depthFunc(tmpDepthFunc);\n  }\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object} skippedFeaturesHash Ids of features to skip.\n */\nol.render.webgl.LineStringReplay.prototype.drawReplaySkipping_ = function(gl, context, skippedFeaturesHash) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex, featureStart;\n  featureIndex = this.startIndices.length - 2;\n  end = start = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setStrokeStyle_(gl, nextStyle[0], nextStyle[1], nextStyle[2]);\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      featureStart = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid]) {\n        if (start !== end) {\n          this.drawElements(gl, context, start, end);\n          gl.clear(gl.DEPTH_BUFFER_BIT);\n        }\n        end = featureStart;\n      }\n      featureIndex--;\n      start = featureStart;\n    }\n    if (start !== end) {\n      this.drawElements(gl, context, start, end);\n      gl.clear(gl.DEPTH_BUFFER_BIT);\n    }\n    start = end = groupStart;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.drawHitDetectionReplayOneByOne = function(gl, context, skippedFeaturesHash,\n    featureCallback, opt_hitExtent) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex;\n  featureIndex = this.startIndices.length - 2;\n  end = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setStrokeStyle_(gl, nextStyle[0], nextStyle[1], nextStyle[2]);\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      start = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid] === undefined &&\n          feature.getGeometry() &&\n          (opt_hitExtent === undefined || ol.extent.intersects(\n              /** @type {Array<number>} */ (opt_hitExtent),\n              feature.getGeometry().getExtent()))) {\n        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        this.drawElements(gl, context, start, end);\n\n        var result = featureCallback(feature);\n\n        if (result) {\n          return result;\n        }\n\n      }\n      featureIndex--;\n      end = start;\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {Array.<number>} color Color.\n * @param {number} lineWidth Line width.\n * @param {number} miterLimit Miter limit.\n */\nol.render.webgl.LineStringReplay.prototype.setStrokeStyle_ = function(gl, color, lineWidth, miterLimit) {\n  gl.uniform4fv(this.defaultLocations_.u_color, color);\n  gl.uniform1f(this.defaultLocations_.u_lineWidth, lineWidth);\n  gl.uniform1f(this.defaultLocations_.u_miterLimit, miterLimit);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.LineStringReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  var strokeStyleLineCap = strokeStyle.getLineCap();\n  this.state_.lineCap = strokeStyleLineCap !== undefined ?\n    strokeStyleLineCap : ol.render.webgl.defaultLineCap;\n  var strokeStyleLineDash = strokeStyle.getLineDash();\n  this.state_.lineDash = strokeStyleLineDash ?\n    strokeStyleLineDash : ol.render.webgl.defaultLineDash;\n  var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n  this.state_.lineDashOffset = strokeStyleLineDashOffset ?\n    strokeStyleLineDashOffset : ol.render.webgl.defaultLineDashOffset;\n  var strokeStyleLineJoin = strokeStyle.getLineJoin();\n  this.state_.lineJoin = strokeStyleLineJoin !== undefined ?\n    strokeStyleLineJoin : ol.render.webgl.defaultLineJoin;\n  var strokeStyleColor = strokeStyle.getColor();\n  if (!(strokeStyleColor instanceof CanvasGradient) &&\n      !(strokeStyleColor instanceof CanvasPattern)) {\n    strokeStyleColor = ol.color.asArray(strokeStyleColor).map(function(c, i) {\n      return i != 3 ? c / 255 : c;\n    }) || ol.render.webgl.defaultStrokeStyle;\n  } else {\n    strokeStyleColor = ol.render.webgl.defaultStrokeStyle;\n  }\n  var strokeStyleWidth = strokeStyle.getWidth();\n  strokeStyleWidth = strokeStyleWidth !== undefined ?\n    strokeStyleWidth : ol.render.webgl.defaultLineWidth;\n  var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n  strokeStyleMiterLimit = strokeStyleMiterLimit !== undefined ?\n    strokeStyleMiterLimit : ol.render.webgl.defaultMiterLimit;\n  if (!this.state_.strokeColor || !ol.array.equals(this.state_.strokeColor, strokeStyleColor) ||\n      this.state_.lineWidth !== strokeStyleWidth || this.state_.miterLimit !== strokeStyleMiterLimit) {\n    this.state_.changed = true;\n    this.state_.strokeColor = strokeStyleColor;\n    this.state_.lineWidth = strokeStyleWidth;\n    this.state_.miterLimit = strokeStyleMiterLimit;\n    this.styles_.push([strokeStyleColor, strokeStyleWidth, strokeStyleMiterLimit]);\n  }\n};\n\n/**\n * @enum {number}\n * @private\n */\nol.render.webgl.LineStringReplay.Instruction_ = {\n  ROUND: 2,\n  BEGIN_LINE: 3,\n  END_LINE: 5,\n  BEGIN_LINE_CAP: 7,\n  END_LINE_CAP: 11,\n  BEVEL_FIRST: 13,\n  BEVEL_SECOND: 17,\n  MITER_BOTTOM: 19,\n  MITER_TOP: 23\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.polygonreplay.defaultshader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.render.webgl.polygonreplay.defaultshader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\n\\n\\n\\nuniform vec4 u_color;\\nuniform float u_opacity;\\n\\nvoid main(void) {\\n  gl_FragColor = u_color;\\n  float alpha = u_color.a * u_opacity;\\n  if (alpha == 0.0) {\\n    discard;\\n  }\\n  gl_FragColor.a = alpha;\\n}\\n' :\n  'precision mediump float;uniform vec4 e;uniform float f;void main(void){gl_FragColor=e;float alpha=e.a*f;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}');\n\nol.render.webgl.polygonreplay.defaultshader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  '\\n\\nattribute vec2 a_position;\\n\\nuniform mat4 u_projectionMatrix;\\nuniform mat4 u_offsetScaleMatrix;\\nuniform mat4 u_offsetRotateMatrix;\\n\\nvoid main(void) {\\n  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0);\\n}\\n\\n\\n' :\n  'attribute vec2 a;uniform mat4 b;uniform mat4 c;uniform mat4 d;void main(void){gl_Position=b*vec4(a,0.0,1.0);}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.render.webgl.polygonreplay.defaultshader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.render.webgl.polygonreplay.defaultshader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_projectionMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_projectionMatrix' : 'b');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetScaleMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetScaleMatrix' : 'c');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_offsetRotateMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_offsetRotateMatrix' : 'd');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_color = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_color' : 'e');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_opacity = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_opacity' : 'f');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'a');\n};\n\ngoog.provide('ol.structs.LinkedList');\n\n/**\n * Creates an empty linked list structure.\n *\n * @constructor\n * @struct\n * @param {boolean=} opt_circular The last item is connected to the first one,\n * and the first item to the last one. Default is true.\n */\nol.structs.LinkedList = function(opt_circular) {\n\n  /**\n   * @private\n   * @type {ol.LinkedListItem|undefined}\n   */\n  this.first_ = undefined;\n\n  /**\n   * @private\n   * @type {ol.LinkedListItem|undefined}\n   */\n  this.last_ = undefined;\n\n  /**\n   * @private\n   * @type {ol.LinkedListItem|undefined}\n   */\n  this.head_ = undefined;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.circular_ = opt_circular === undefined ? true : opt_circular;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.length_ = 0;\n};\n\n/**\n * Inserts an item into the linked list right after the current one.\n *\n * @param {?} data Item data.\n */\nol.structs.LinkedList.prototype.insertItem = function(data) {\n\n  /** @type {ol.LinkedListItem} */\n  var item = {\n    prev: undefined,\n    next: undefined,\n    data: data\n  };\n\n  var head = this.head_;\n\n  //Initialize the list.\n  if (!head) {\n    this.first_ = item;\n    this.last_ = item;\n    if (this.circular_) {\n      item.next = item;\n      item.prev = item;\n    }\n  } else {\n    //Link the new item to the adjacent ones.\n    var next = head.next;\n    item.prev = head;\n    item.next = next;\n    head.next = item;\n    if (next) {\n      next.prev = item;\n    }\n\n    if (head === this.last_) {\n      this.last_ = item;\n    }\n  }\n  this.head_ = item;\n  this.length_++;\n};\n\n/**\n * Removes the current item from the list. Sets the cursor to the next item,\n * if possible.\n */\nol.structs.LinkedList.prototype.removeItem = function() {\n  var head = this.head_;\n  if (head) {\n    var next = head.next;\n    var prev = head.prev;\n    if (next) {\n      next.prev = prev;\n    }\n    if (prev) {\n      prev.next = next;\n    }\n    this.head_ = next || prev;\n\n    if (this.first_ === this.last_) {\n      this.head_ = undefined;\n      this.first_ = undefined;\n      this.last_ = undefined;\n    } else if (this.first_ === head) {\n      this.first_ = this.head_;\n    } else if (this.last_ === head) {\n      this.last_ = prev ? this.head_.prev : this.head_;\n    }\n    this.length_--;\n  }\n};\n\n/**\n * Sets the cursor to the first item, and returns the associated data.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.firstItem = function() {\n  this.head_ = this.first_;\n  if (this.head_) {\n    return this.head_.data;\n  }\n  return undefined;\n};\n\n/**\n* Sets the cursor to the last item, and returns the associated data.\n*\n* @return {?} Item data.\n*/\nol.structs.LinkedList.prototype.lastItem = function() {\n  this.head_ = this.last_;\n  if (this.head_) {\n    return this.head_.data;\n  }\n  return undefined;\n};\n\n/**\n * Sets the cursor to the next item, and returns the associated data.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.nextItem = function() {\n  if (this.head_ && this.head_.next) {\n    this.head_ = this.head_.next;\n    return this.head_.data;\n  }\n  return undefined;\n};\n\n/**\n * Returns the next item's data without moving the cursor.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.getNextItem = function() {\n  if (this.head_ && this.head_.next) {\n    return this.head_.next.data;\n  }\n  return undefined;\n};\n\n/**\n * Sets the cursor to the previous item, and returns the associated data.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.prevItem = function() {\n  if (this.head_ && this.head_.prev) {\n    this.head_ = this.head_.prev;\n    return this.head_.data;\n  }\n  return undefined;\n};\n\n/**\n * Returns the previous item's data without moving the cursor.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.getPrevItem = function() {\n  if (this.head_ && this.head_.prev) {\n    return this.head_.prev.data;\n  }\n  return undefined;\n};\n\n/**\n * Returns the current item's data.\n *\n * @return {?} Item data.\n */\nol.structs.LinkedList.prototype.getCurrItem = function() {\n  if (this.head_) {\n    return this.head_.data;\n  }\n  return undefined;\n};\n\n/**\n * Sets the first item of the list. This only works for circular lists, and sets\n * the last item accordingly.\n */\nol.structs.LinkedList.prototype.setFirstItem = function() {\n  if (this.circular_ && this.head_) {\n    this.first_ = this.head_;\n    this.last_ = this.head_.prev;\n  }\n};\n\n/**\n * Concatenates two lists.\n * @param {ol.structs.LinkedList} list List to merge into the current list.\n */\nol.structs.LinkedList.prototype.concat = function(list) {\n  if (list.head_) {\n    if (this.head_) {\n      var end = this.head_.next;\n      this.head_.next = list.first_;\n      list.first_.prev = this.head_;\n      end.prev = list.last_;\n      list.last_.next = end;\n      this.length_ += list.length_;\n    } else {\n      this.head_ = list.head_;\n      this.first_ = list.first_;\n      this.last_ = list.last_;\n      this.length_ = list.length_;\n    }\n    list.head_ = undefined;\n    list.first_ = undefined;\n    list.last_ = undefined;\n    list.length_ = 0;\n  }\n};\n\n/**\n * Returns the current length of the list.\n *\n * @return {number} Length.\n */\nol.structs.LinkedList.prototype.getLength = function() {\n  return this.length_;\n};\n\ngoog.provide('ol.render.webgl.PolygonReplay');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.color');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.geom.flat.contains');\ngoog.require('ol.geom.flat.orient');\ngoog.require('ol.geom.flat.transform');\ngoog.require('ol.render.webgl.polygonreplay.defaultshader');\ngoog.require('ol.render.webgl.polygonreplay.defaultshader.Locations');\ngoog.require('ol.render.webgl.LineStringReplay');\ngoog.require('ol.render.webgl.Replay');\ngoog.require('ol.render.webgl');\ngoog.require('ol.style.Stroke');\ngoog.require('ol.structs.LinkedList');\ngoog.require('ol.structs.RBush');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.render.webgl.Replay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.PolygonReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.Replay.call(this, tolerance, maxExtent);\n\n  this.lineStringReplay = new ol.render.webgl.LineStringReplay(\n      tolerance, maxExtent);\n\n  /**\n   * @private\n   * @type {ol.render.webgl.polygonreplay.defaultshader.Locations}\n   */\n  this.defaultLocations_ = null;\n\n  /**\n   * @private\n   * @type {Array.<Array.<number>>}\n   */\n  this.styles_ = [];\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.styleIndices_ = [];\n\n  /**\n   * @private\n   * @type {{fillColor: (Array.<number>|null),\n   *         changed: boolean}|null}\n   */\n  this.state_ = {\n    fillColor: null,\n    changed: false\n  };\n\n};\nol.inherits(ol.render.webgl.PolygonReplay, ol.render.webgl.Replay);\n\n\n/**\n * Draw one polygon.\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {Array.<Array.<number>>} holeFlatCoordinates Hole flat coordinates.\n * @param {number} stride Stride.\n * @private\n */\nol.render.webgl.PolygonReplay.prototype.drawCoordinates_ = function(\n    flatCoordinates, holeFlatCoordinates, stride) {\n  // Triangulate the polygon\n  var outerRing = new ol.structs.LinkedList();\n  var rtree = new ol.structs.RBush();\n  // Initialize the outer ring\n  this.processFlatCoordinates_(flatCoordinates, stride, outerRing, rtree, true);\n  var maxCoords = this.getMaxCoords_(outerRing);\n\n  // Eliminate holes, if there are any\n  if (holeFlatCoordinates.length) {\n    var i, ii;\n    var holeLists = [];\n    for (i = 0, ii = holeFlatCoordinates.length; i < ii; ++i) {\n      var holeList = {\n        list: new ol.structs.LinkedList(),\n        maxCoords: undefined,\n        rtree: new ol.structs.RBush()\n      };\n      holeLists.push(holeList);\n      this.processFlatCoordinates_(holeFlatCoordinates[i],\n          stride, holeList.list, holeList.rtree, false);\n      this.classifyPoints_(holeList.list, holeList.rtree, true);\n      holeList.maxCoords = this.getMaxCoords_(holeList.list);\n    }\n    holeLists.sort(function(a, b) {\n      return b.maxCoords[0] === a.maxCoords[0] ?\n        a.maxCoords[1] - b.maxCoords[1] : b.maxCoords[0] - a.maxCoords[0];\n    });\n    for (i = 0; i < holeLists.length; ++i) {\n      var currList = holeLists[i].list;\n      var start = currList.firstItem();\n      var currItem = start;\n      var intersection;\n      do {\n        //TODO: Triangulate holes when they intersect the outer ring.\n        if (this.getIntersections_(currItem, rtree).length) {\n          intersection = true;\n          break;\n        }\n        currItem = currList.nextItem();\n      } while (start !== currItem);\n      if (!intersection) {\n        if (this.bridgeHole_(currList, holeLists[i].maxCoords[0], outerRing, maxCoords[0], rtree)) {\n          rtree.concat(holeLists[i].rtree);\n          this.classifyPoints_(outerRing, rtree, false);\n        }\n      }\n    }\n  } else {\n    this.classifyPoints_(outerRing, rtree, false);\n  }\n  this.triangulate_(outerRing, rtree);\n};\n\n\n/**\n * Inserts flat coordinates in a linked list and adds them to the vertex buffer.\n * @private\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} stride Stride.\n * @param {ol.structs.LinkedList} list Linked list.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean} clockwise Coordinate order should be clockwise.\n */\nol.render.webgl.PolygonReplay.prototype.processFlatCoordinates_ = function(\n    flatCoordinates, stride, list, rtree, clockwise) {\n  var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates,\n      0, flatCoordinates.length, stride);\n  var i, ii;\n  var n = this.vertices.length / 2;\n  /** @type {ol.WebglPolygonVertex} */\n  var start;\n  /** @type {ol.WebglPolygonVertex} */\n  var p0;\n  /** @type {ol.WebglPolygonVertex} */\n  var p1;\n  var extents = [];\n  var segments = [];\n  if (clockwise === isClockwise) {\n    start = this.createPoint_(flatCoordinates[0], flatCoordinates[1], n++);\n    p0 = start;\n    for (i = stride, ii = flatCoordinates.length; i < ii; i += stride) {\n      p1 = this.createPoint_(flatCoordinates[i], flatCoordinates[i + 1], n++);\n      segments.push(this.insertItem_(p0, p1, list));\n      extents.push([Math.min(p0.x, p1.x), Math.min(p0.y, p1.y), Math.max(p0.x, p1.x),\n        Math.max(p0.y, p1.y)]);\n      p0 = p1;\n    }\n    segments.push(this.insertItem_(p1, start, list));\n    extents.push([Math.min(p0.x, p1.x), Math.min(p0.y, p1.y), Math.max(p0.x, p1.x),\n      Math.max(p0.y, p1.y)]);\n  } else {\n    var end = flatCoordinates.length - stride;\n    start = this.createPoint_(flatCoordinates[end], flatCoordinates[end + 1], n++);\n    p0 = start;\n    for (i = end - stride, ii = 0; i >= ii; i -= stride) {\n      p1 = this.createPoint_(flatCoordinates[i], flatCoordinates[i + 1], n++);\n      segments.push(this.insertItem_(p0, p1, list));\n      extents.push([Math.min(p0.x, p1.x), Math.min(p0.y, p1.y), Math.max(p0.x, p1.x),\n        Math.max(p0.y, p1.y)]);\n      p0 = p1;\n    }\n    segments.push(this.insertItem_(p1, start, list));\n    extents.push([Math.min(p0.x, p1.x), Math.min(p0.y, p1.y), Math.max(p0.x, p1.x),\n      Math.max(p0.y, p1.y)]);\n  }\n  rtree.load(extents, segments);\n};\n\n\n/**\n * Returns the rightmost coordinates of a polygon on the X axis.\n * @private\n * @param {ol.structs.LinkedList} list Polygons ring.\n * @return {Array.<number>} Max X coordinates.\n */\nol.render.webgl.PolygonReplay.prototype.getMaxCoords_ = function(list) {\n  var start = list.firstItem();\n  var seg = start;\n  var maxCoords = [seg.p0.x, seg.p0.y];\n\n  do {\n    seg = list.nextItem();\n    if (seg.p0.x > maxCoords[0]) {\n      maxCoords = [seg.p0.x, seg.p0.y];\n    }\n  } while (seg !== start);\n\n  return maxCoords;\n};\n\n\n/**\n * Classifies the points of a polygon list as convex, reflex. Removes collinear vertices.\n * @private\n * @param {ol.structs.LinkedList} list Polygon ring.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean} ccw The orientation of the polygon is counter-clockwise.\n * @return {boolean} There were reclassified points.\n */\nol.render.webgl.PolygonReplay.prototype.classifyPoints_ = function(list, rtree, ccw) {\n  var start = list.firstItem();\n  var s0 = start;\n  var s1 = list.nextItem();\n  var pointsReclassified = false;\n  do {\n    var reflex = ccw ? ol.render.webgl.triangleIsCounterClockwise(s1.p1.x,\n        s1.p1.y, s0.p1.x, s0.p1.y, s0.p0.x, s0.p0.y) :\n      ol.render.webgl.triangleIsCounterClockwise(s0.p0.x, s0.p0.y, s0.p1.x,\n          s0.p1.y, s1.p1.x, s1.p1.y);\n    if (reflex === undefined) {\n      this.removeItem_(s0, s1, list, rtree);\n      pointsReclassified = true;\n      if (s1 === start) {\n        start = list.getNextItem();\n      }\n      s1 = s0;\n      list.prevItem();\n    } else if (s0.p1.reflex !== reflex) {\n      s0.p1.reflex = reflex;\n      pointsReclassified = true;\n    }\n    s0 = s1;\n    s1 = list.nextItem();\n  } while (s0 !== start);\n  return pointsReclassified;\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} hole Linked list of the hole.\n * @param {number} holeMaxX Maximum X value of the hole.\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {number} listMaxX Maximum X value of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @return {boolean} Bridging was successful.\n */\nol.render.webgl.PolygonReplay.prototype.bridgeHole_ = function(hole, holeMaxX,\n    list, listMaxX, rtree) {\n  var seg = hole.firstItem();\n  while (seg.p1.x !== holeMaxX) {\n    seg = hole.nextItem();\n  }\n\n  var p1 = seg.p1;\n  /** @type {ol.WebglPolygonVertex} */\n  var p2 = {x: listMaxX, y: p1.y, i: -1};\n  var minDist = Infinity;\n  var i, ii, bestPoint;\n  /** @type {ol.WebglPolygonVertex} */\n  var p5;\n\n  var intersectingSegments = this.getIntersections_({p0: p1, p1: p2}, rtree, true);\n  for (i = 0, ii = intersectingSegments.length; i < ii; ++i) {\n    var currSeg = intersectingSegments[i];\n    var intersection = this.calculateIntersection_(p1, p2, currSeg.p0,\n        currSeg.p1, true);\n    var dist = Math.abs(p1.x - intersection[0]);\n    if (dist < minDist && ol.render.webgl.triangleIsCounterClockwise(p1.x, p1.y,\n        currSeg.p0.x, currSeg.p0.y, currSeg.p1.x, currSeg.p1.y) !== undefined) {\n      minDist = dist;\n      p5 = {x: intersection[0], y: intersection[1], i: -1};\n      seg = currSeg;\n    }\n  }\n  if (minDist === Infinity) {\n    return false;\n  }\n  bestPoint = seg.p1;\n\n  if (minDist > 0) {\n    var pointsInTriangle = this.getPointsInTriangle_(p1, p5, seg.p1, rtree);\n    if (pointsInTriangle.length) {\n      var theta = Infinity;\n      for (i = 0, ii = pointsInTriangle.length; i < ii; ++i) {\n        var currPoint = pointsInTriangle[i];\n        var currTheta = Math.atan2(p1.y - currPoint.y, p2.x - currPoint.x);\n        if (currTheta < theta || (currTheta === theta && currPoint.x < bestPoint.x)) {\n          theta = currTheta;\n          bestPoint = currPoint;\n        }\n      }\n    }\n  }\n\n  seg = list.firstItem();\n  while (seg.p1.x !== bestPoint.x || seg.p1.y !== bestPoint.y) {\n    seg = list.nextItem();\n  }\n\n  //We clone the bridge points as they can have different convexity.\n  var p0Bridge = {x: p1.x, y: p1.y, i: p1.i, reflex: undefined};\n  var p1Bridge = {x: seg.p1.x, y: seg.p1.y, i: seg.p1.i, reflex: undefined};\n\n  hole.getNextItem().p0 = p0Bridge;\n  this.insertItem_(p1, seg.p1, hole, rtree);\n  this.insertItem_(p1Bridge, p0Bridge, hole, rtree);\n  seg.p1 = p1Bridge;\n  hole.setFirstItem();\n  list.concat(hole);\n\n  return true;\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n */\nol.render.webgl.PolygonReplay.prototype.triangulate_ = function(list, rtree) {\n  var ccw = false;\n  var simple = this.isSimple_(list, rtree);\n\n  // Start clipping ears\n  while (list.getLength() > 3) {\n    if (simple) {\n      if (!this.clipEars_(list, rtree, simple, ccw)) {\n        if (!this.classifyPoints_(list, rtree, ccw)) {\n          // Due to the behavior of OL's PIP algorithm, the ear clipping cannot\n          // introduce touching segments. However, the original data may have some.\n          if (!this.resolveSelfIntersections_(list, rtree, true)) {\n            break;\n          }\n        }\n      }\n    } else {\n      if (!this.clipEars_(list, rtree, simple, ccw)) {\n        // We ran out of ears, try to reclassify.\n        if (!this.classifyPoints_(list, rtree, ccw)) {\n          // We have a bad polygon, try to resolve local self-intersections.\n          if (!this.resolveSelfIntersections_(list, rtree)) {\n            simple = this.isSimple_(list, rtree);\n            if (!simple) {\n              // We have a really bad polygon, try more time consuming methods.\n              this.splitPolygon_(list, rtree);\n              break;\n            } else {\n              ccw = !this.isClockwise_(list);\n              this.classifyPoints_(list, rtree, ccw);\n            }\n          }\n        }\n      }\n    }\n  }\n  if (list.getLength() === 3) {\n    var numIndices = this.indices.length;\n    this.indices[numIndices++] = list.getPrevItem().p0.i;\n    this.indices[numIndices++] = list.getCurrItem().p0.i;\n    this.indices[numIndices++] = list.getNextItem().p0.i;\n  }\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean} simple The polygon is simple.\n * @param {boolean} ccw Orientation of the polygon is counter-clockwise.\n * @return {boolean} There were processed ears.\n */\nol.render.webgl.PolygonReplay.prototype.clipEars_ = function(list, rtree, simple, ccw) {\n  var numIndices = this.indices.length;\n  var start = list.firstItem();\n  var s0 = list.getPrevItem();\n  var s1 = start;\n  var s2 = list.nextItem();\n  var s3 = list.getNextItem();\n  var p0, p1, p2;\n  var processedEars = false;\n  do {\n    p0 = s1.p0;\n    p1 = s1.p1;\n    p2 = s2.p1;\n    if (p1.reflex === false) {\n      // We might have a valid ear\n      var variableCriterion;\n      if (simple) {\n        variableCriterion = this.getPointsInTriangle_(p0, p1, p2, rtree, true).length === 0;\n      } else {\n        variableCriterion = ccw ? this.diagonalIsInside_(s3.p1, p2, p1, p0,\n            s0.p0) : this.diagonalIsInside_(s0.p0, p0, p1, p2, s3.p1);\n      }\n      if ((simple || this.getIntersections_({p0: p0, p1: p2}, rtree).length === 0) &&\n          variableCriterion) {\n        //The diagonal is completely inside the polygon\n        if (simple || p0.reflex === false || p2.reflex === false ||\n            ol.geom.flat.orient.linearRingIsClockwise([s0.p0.x, s0.p0.y, p0.x,\n              p0.y, p1.x, p1.y, p2.x, p2.y, s3.p1.x, s3.p1.y], 0, 10, 2) === !ccw) {\n          //The diagonal is persumably valid, we have an ear\n          this.indices[numIndices++] = p0.i;\n          this.indices[numIndices++] = p1.i;\n          this.indices[numIndices++] = p2.i;\n          this.removeItem_(s1, s2, list, rtree);\n          if (s2 === start) {\n            start = s3;\n          }\n          processedEars = true;\n        }\n      }\n    }\n    // Else we have a reflex point.\n    s0 = list.getPrevItem();\n    s1 = list.getCurrItem();\n    s2 = list.nextItem();\n    s3 = list.getNextItem();\n  } while (s1 !== start && list.getLength() > 3);\n\n  return processedEars;\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean=} opt_touch Resolve touching segments.\n * @return {boolean} There were resolved intersections.\n*/\nol.render.webgl.PolygonReplay.prototype.resolveSelfIntersections_ = function(\n    list, rtree, opt_touch) {\n  var start = list.firstItem();\n  list.nextItem();\n  var s0 = start;\n  var s1 = list.nextItem();\n  var resolvedIntersections = false;\n\n  do {\n    var intersection = this.calculateIntersection_(s0.p0, s0.p1, s1.p0, s1.p1,\n        opt_touch);\n    if (intersection) {\n      var breakCond = false;\n      var numVertices = this.vertices.length;\n      var numIndices = this.indices.length;\n      var n = numVertices / 2;\n      var seg = list.prevItem();\n      list.removeItem();\n      rtree.remove(seg);\n      breakCond = (seg === start);\n      var p;\n      if (opt_touch) {\n        if (intersection[0] === s0.p0.x && intersection[1] === s0.p0.y) {\n          list.prevItem();\n          p = s0.p0;\n          s1.p0 = p;\n          rtree.remove(s0);\n          breakCond = breakCond || (s0 === start);\n        } else {\n          p = s1.p1;\n          s0.p1 = p;\n          rtree.remove(s1);\n          breakCond = breakCond || (s1 === start);\n        }\n        list.removeItem();\n      } else {\n        p = this.createPoint_(intersection[0], intersection[1], n);\n        s0.p1 = p;\n        s1.p0 = p;\n        rtree.update([Math.min(s0.p0.x, s0.p1.x), Math.min(s0.p0.y, s0.p1.y),\n          Math.max(s0.p0.x, s0.p1.x), Math.max(s0.p0.y, s0.p1.y)], s0);\n        rtree.update([Math.min(s1.p0.x, s1.p1.x), Math.min(s1.p0.y, s1.p1.y),\n          Math.max(s1.p0.x, s1.p1.x), Math.max(s1.p0.y, s1.p1.y)], s1);\n      }\n\n      this.indices[numIndices++] = seg.p0.i;\n      this.indices[numIndices++] = seg.p1.i;\n      this.indices[numIndices++] = p.i;\n\n      resolvedIntersections = true;\n      if (breakCond) {\n        break;\n      }\n    }\n\n    s0 = list.getPrevItem();\n    s1 = list.nextItem();\n  } while (s0 !== start);\n  return resolvedIntersections;\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @return {boolean} The polygon is simple.\n */\nol.render.webgl.PolygonReplay.prototype.isSimple_ = function(list, rtree) {\n  var start = list.firstItem();\n  var seg = start;\n  do {\n    if (this.getIntersections_(seg, rtree).length) {\n      return false;\n    }\n    seg = list.nextItem();\n  } while (seg !== start);\n  return true;\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @return {boolean} Orientation is clockwise.\n */\nol.render.webgl.PolygonReplay.prototype.isClockwise_ = function(list) {\n  var length = list.getLength() * 2;\n  var flatCoordinates = new Array(length);\n  var start = list.firstItem();\n  var seg = start;\n  var i = 0;\n  do {\n    flatCoordinates[i++] = seg.p0.x;\n    flatCoordinates[i++] = seg.p0.y;\n    seg = list.nextItem();\n  } while (seg !== start);\n  return ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates, 0, length, 2);\n};\n\n\n/**\n * @private\n * @param {ol.structs.LinkedList} list Linked list of the polygon.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n */\nol.render.webgl.PolygonReplay.prototype.splitPolygon_ = function(list, rtree) {\n  var start = list.firstItem();\n  var s0 = start;\n  do {\n    var intersections = this.getIntersections_(s0, rtree);\n    if (intersections.length) {\n      var s1 = intersections[0];\n      var n = this.vertices.length / 2;\n      var intersection = this.calculateIntersection_(s0.p0,\n          s0.p1, s1.p0, s1.p1);\n      var p = this.createPoint_(intersection[0], intersection[1], n);\n      var newPolygon = new ol.structs.LinkedList();\n      var newRtree = new ol.structs.RBush();\n      this.insertItem_(p, s0.p1, newPolygon, newRtree);\n      s0.p1 = p;\n      rtree.update([Math.min(s0.p0.x, p.x), Math.min(s0.p0.y, p.y),\n        Math.max(s0.p0.x, p.x), Math.max(s0.p0.y, p.y)], s0);\n      var currItem = list.nextItem();\n      while (currItem !== s1) {\n        this.insertItem_(currItem.p0, currItem.p1, newPolygon, newRtree);\n        rtree.remove(currItem);\n        list.removeItem();\n        currItem = list.getCurrItem();\n      }\n      this.insertItem_(s1.p0, p, newPolygon, newRtree);\n      s1.p0 = p;\n      rtree.update([Math.min(s1.p1.x, p.x), Math.min(s1.p1.y, p.y),\n        Math.max(s1.p1.x, p.x), Math.max(s1.p1.y, p.y)], s1);\n      this.classifyPoints_(list, rtree, false);\n      this.triangulate_(list, rtree);\n      this.classifyPoints_(newPolygon, newRtree, false);\n      this.triangulate_(newPolygon, newRtree);\n      break;\n    }\n    s0 = list.nextItem();\n  } while (s0 !== start);\n};\n\n\n/**\n * @private\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @param {number} i Index.\n * @return {ol.WebglPolygonVertex} List item.\n */\nol.render.webgl.PolygonReplay.prototype.createPoint_ = function(x, y, i) {\n  var numVertices = this.vertices.length;\n  this.vertices[numVertices++] = x;\n  this.vertices[numVertices++] = y;\n  /** @type {ol.WebglPolygonVertex} */\n  var p = {\n    x: x,\n    y: y,\n    i: i,\n    reflex: undefined\n  };\n  return p;\n};\n\n\n/**\n * @private\n * @param {ol.WebglPolygonVertex} p0 First point of segment.\n * @param {ol.WebglPolygonVertex} p1 Second point of segment.\n * @param {ol.structs.LinkedList} list Polygon ring.\n * @param {ol.structs.RBush=} opt_rtree Insert the segment into the R-Tree.\n * @return {ol.WebglPolygonSegment} segment.\n */\nol.render.webgl.PolygonReplay.prototype.insertItem_ = function(p0, p1, list, opt_rtree) {\n  var seg = {\n    p0: p0,\n    p1: p1\n  };\n  list.insertItem(seg);\n  if (opt_rtree) {\n    opt_rtree.insert([Math.min(p0.x, p1.x), Math.min(p0.y, p1.y),\n      Math.max(p0.x, p1.x), Math.max(p0.y, p1.y)], seg);\n  }\n  return seg;\n};\n\n\n/**\n  * @private\n  * @param {ol.WebglPolygonSegment} s0 Segment before the remove candidate.\n  * @param {ol.WebglPolygonSegment} s1 Remove candidate segment.\n  * @param {ol.structs.LinkedList} list Polygon ring.\n  * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n  */\nol.render.webgl.PolygonReplay.prototype.removeItem_ = function(s0, s1, list, rtree) {\n  if (list.getCurrItem() === s1) {\n    list.removeItem();\n    s0.p1 = s1.p1;\n    rtree.remove(s1);\n    rtree.update([Math.min(s0.p0.x, s0.p1.x), Math.min(s0.p0.y, s0.p1.y),\n      Math.max(s0.p0.x, s0.p1.x), Math.max(s0.p0.y, s0.p1.y)], s0);\n  }\n};\n\n\n/**\n * @private\n * @param {ol.WebglPolygonVertex} p0 First point.\n * @param {ol.WebglPolygonVertex} p1 Second point.\n * @param {ol.WebglPolygonVertex} p2 Third point.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean=} opt_reflex Only include reflex points.\n * @return {Array.<ol.WebglPolygonVertex>} Points in the triangle.\n */\nol.render.webgl.PolygonReplay.prototype.getPointsInTriangle_ = function(p0, p1,\n    p2, rtree, opt_reflex) {\n  var i, ii, j, p;\n  var result = [];\n  var segmentsInExtent = rtree.getInExtent([Math.min(p0.x, p1.x, p2.x),\n    Math.min(p0.y, p1.y, p2.y), Math.max(p0.x, p1.x, p2.x), Math.max(p0.y,\n        p1.y, p2.y)]);\n  for (i = 0, ii = segmentsInExtent.length; i < ii; ++i) {\n    for (j in segmentsInExtent[i]) {\n      p = segmentsInExtent[i][j];\n      if (typeof p === 'object' && (!opt_reflex || p.reflex)) {\n        if ((p.x !== p0.x || p.y !== p0.y) && (p.x !== p1.x || p.y !== p1.y) &&\n            (p.x !== p2.x || p.y !== p2.y) && result.indexOf(p) === -1 &&\n            ol.geom.flat.contains.linearRingContainsXY([p0.x, p0.y, p1.x, p1.y,\n              p2.x, p2.y], 0, 6, 2, p.x, p.y)) {\n          result.push(p);\n        }\n      }\n    }\n  }\n  return result;\n};\n\n\n/**\n * @private\n * @param {ol.WebglPolygonSegment} segment Segment.\n * @param {ol.structs.RBush} rtree R-Tree of the polygon.\n * @param {boolean=} opt_touch Touching segments should be considered an intersection.\n * @return {Array.<ol.WebglPolygonSegment>} Intersecting segments.\n */\nol.render.webgl.PolygonReplay.prototype.getIntersections_ = function(segment, rtree, opt_touch) {\n  var p0 = segment.p0;\n  var p1 = segment.p1;\n  var segmentsInExtent = rtree.getInExtent([Math.min(p0.x, p1.x),\n    Math.min(p0.y, p1.y), Math.max(p0.x, p1.x), Math.max(p0.y, p1.y)]);\n  var result = [];\n  var i, ii;\n  for (i = 0, ii = segmentsInExtent.length; i < ii; ++i) {\n    var currSeg = segmentsInExtent[i];\n    if (segment !== currSeg && (opt_touch || currSeg.p0 !== p1 || currSeg.p1 !== p0) &&\n        this.calculateIntersection_(p0, p1, currSeg.p0, currSeg.p1, opt_touch)) {\n      result.push(currSeg);\n    }\n  }\n  return result;\n};\n\n\n/**\n * Line intersection algorithm by Paul Bourke.\n * @see http://paulbourke.net/geometry/pointlineplane/\n *\n * @private\n * @param {ol.WebglPolygonVertex} p0 First point.\n * @param {ol.WebglPolygonVertex} p1 Second point.\n * @param {ol.WebglPolygonVertex} p2 Third point.\n * @param {ol.WebglPolygonVertex} p3 Fourth point.\n * @param {boolean=} opt_touch Touching segments should be considered an intersection.\n * @return {Array.<number>|undefined} Intersection coordinates.\n */\nol.render.webgl.PolygonReplay.prototype.calculateIntersection_ = function(p0,\n    p1, p2, p3, opt_touch) {\n  var denom = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n  if (denom !== 0) {\n    var ua = ((p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x)) / denom;\n    var ub = ((p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x)) / denom;\n    if ((!opt_touch && ua > ol.render.webgl.EPSILON && ua < 1 - ol.render.webgl.EPSILON &&\n        ub > ol.render.webgl.EPSILON && ub < 1 - ol.render.webgl.EPSILON) || (opt_touch &&\n        ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1)) {\n      return [p0.x + ua * (p1.x - p0.x), p0.y + ua * (p1.y - p0.y)];\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {ol.WebglPolygonVertex} p0 Point before the start of the diagonal.\n * @param {ol.WebglPolygonVertex} p1 Start point of the diagonal.\n * @param {ol.WebglPolygonVertex} p2 Ear candidate.\n * @param {ol.WebglPolygonVertex} p3 End point of the diagonal.\n * @param {ol.WebglPolygonVertex} p4 Point after the end of the diagonal.\n * @return {boolean} Diagonal is inside the polygon.\n */\nol.render.webgl.PolygonReplay.prototype.diagonalIsInside_ = function(p0, p1, p2, p3, p4) {\n  if (p1.reflex === undefined || p3.reflex === undefined) {\n    return false;\n  }\n  var p1IsLeftOf = (p2.x - p3.x) * (p1.y - p3.y) > (p2.y - p3.y) * (p1.x - p3.x);\n  var p1IsRightOf = (p4.x - p3.x) * (p1.y - p3.y) < (p4.y - p3.y) * (p1.x - p3.x);\n  var p3IsLeftOf = (p0.x - p1.x) * (p3.y - p1.y) > (p0.y - p1.y) * (p3.x - p1.x);\n  var p3IsRightOf = (p2.x - p1.x) * (p3.y - p1.y) < (p2.y - p1.y) * (p3.x - p1.x);\n  var p1InCone = p3.reflex ? p1IsRightOf || p1IsLeftOf : p1IsRightOf && p1IsLeftOf;\n  var p3InCone = p1.reflex ? p3IsRightOf || p3IsLeftOf : p3IsRightOf && p3IsLeftOf;\n  return p1InCone && p3InCone;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {\n  var endss = multiPolygonGeometry.getEndss();\n  var stride = multiPolygonGeometry.getStride();\n  var currIndex = this.indices.length;\n  var currLineIndex = this.lineStringReplay.getCurrentIndex();\n  var flatCoordinates = multiPolygonGeometry.getFlatCoordinates();\n  var i, ii, j, jj;\n  var start = 0;\n  for (i = 0, ii = endss.length; i < ii; ++i) {\n    var ends = endss[i];\n    if (ends.length > 0) {\n      var outerRing = ol.geom.flat.transform.translate(flatCoordinates, start, ends[0],\n          stride, -this.origin[0], -this.origin[1]);\n      if (outerRing.length) {\n        var holes = [];\n        var holeFlatCoords;\n        for (j = 1, jj = ends.length; j < jj; ++j) {\n          if (ends[j] !== ends[j - 1]) {\n            holeFlatCoords = ol.geom.flat.transform.translate(flatCoordinates, ends[j - 1],\n                ends[j], stride, -this.origin[0], -this.origin[1]);\n            holes.push(holeFlatCoords);\n          }\n        }\n        this.lineStringReplay.drawPolygonCoordinates(outerRing, holes, stride);\n        this.drawCoordinates_(outerRing, holes, stride);\n      }\n    }\n    start = ends[ends.length - 1];\n  }\n  if (this.indices.length > currIndex) {\n    this.startIndices.push(currIndex);\n    this.startIndicesFeature.push(feature);\n    if (this.state_.changed) {\n      this.styleIndices_.push(currIndex);\n      this.state_.changed = false;\n    }\n  }\n  if (this.lineStringReplay.getCurrentIndex() > currLineIndex) {\n    this.lineStringReplay.setPolygonStyle(feature, currLineIndex);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {\n  var ends = polygonGeometry.getEnds();\n  var stride = polygonGeometry.getStride();\n  if (ends.length > 0) {\n    var flatCoordinates = polygonGeometry.getFlatCoordinates().map(Number);\n    var outerRing = ol.geom.flat.transform.translate(flatCoordinates, 0, ends[0],\n        stride, -this.origin[0], -this.origin[1]);\n    if (outerRing.length) {\n      var holes = [];\n      var i, ii, holeFlatCoords;\n      for (i = 1, ii = ends.length; i < ii; ++i) {\n        if (ends[i] !== ends[i - 1]) {\n          holeFlatCoords = ol.geom.flat.transform.translate(flatCoordinates, ends[i - 1],\n              ends[i], stride, -this.origin[0], -this.origin[1]);\n          holes.push(holeFlatCoords);\n        }\n      }\n\n      this.startIndices.push(this.indices.length);\n      this.startIndicesFeature.push(feature);\n      if (this.state_.changed) {\n        this.styleIndices_.push(this.indices.length);\n        this.state_.changed = false;\n      }\n      this.lineStringReplay.setPolygonStyle(feature);\n\n      this.lineStringReplay.drawPolygonCoordinates(outerRing, holes, stride);\n      this.drawCoordinates_(outerRing, holes, stride);\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n **/\nol.render.webgl.PolygonReplay.prototype.finish = function(context) {\n  // create, bind, and populate the vertices buffer\n  this.verticesBuffer = new ol.webgl.Buffer(this.vertices);\n\n  // create, bind, and populate the indices buffer\n  this.indicesBuffer = new ol.webgl.Buffer(this.indices);\n\n  this.startIndices.push(this.indices.length);\n\n  this.lineStringReplay.finish(context);\n\n  //Clean up, if there is nothing to draw\n  if (this.styleIndices_.length === 0 && this.styles_.length > 0) {\n    this.styles_ = [];\n  }\n\n  this.vertices = null;\n  this.indices = null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.getDeleteResourcesFunction = function(context) {\n  var verticesBuffer = this.verticesBuffer;\n  var indicesBuffer = this.indicesBuffer;\n  var lineDeleter = this.lineStringReplay.getDeleteResourcesFunction(context);\n  return function() {\n    context.deleteBuffer(verticesBuffer);\n    context.deleteBuffer(indicesBuffer);\n    lineDeleter();\n  };\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.setUpProgram = function(gl, context, size, pixelRatio) {\n  // get the program\n  var fragmentShader, vertexShader;\n  fragmentShader = ol.render.webgl.polygonreplay.defaultshader.fragment;\n  vertexShader = ol.render.webgl.polygonreplay.defaultshader.vertex;\n  var program = context.getProgram(fragmentShader, vertexShader);\n\n  // get the locations\n  var locations;\n  if (!this.defaultLocations_) {\n    locations = new ol.render.webgl.polygonreplay.defaultshader.Locations(gl, program);\n    this.defaultLocations_ = locations;\n  } else {\n    locations = this.defaultLocations_;\n  }\n\n  context.useProgram(program);\n\n  // enable the vertex attrib arrays\n  gl.enableVertexAttribArray(locations.a_position);\n  gl.vertexAttribPointer(locations.a_position, 2, ol.webgl.FLOAT,\n      false, 8, 0);\n\n  return locations;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.shutDownProgram = function(gl, locations) {\n  gl.disableVertexAttribArray(locations.a_position);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) {\n  //Save GL parameters.\n  var tmpDepthFunc = /** @type {number} */ (gl.getParameter(gl.DEPTH_FUNC));\n  var tmpDepthMask = /** @type {boolean} */ (gl.getParameter(gl.DEPTH_WRITEMASK));\n\n  if (!hitDetection) {\n    gl.enable(gl.DEPTH_TEST);\n    gl.depthMask(true);\n    gl.depthFunc(gl.NOTEQUAL);\n  }\n\n  if (!ol.obj.isEmpty(skippedFeaturesHash)) {\n    this.drawReplaySkipping_(gl, context, skippedFeaturesHash);\n  } else {\n    //Draw by style groups to minimize drawElements() calls.\n    var i, start, end, nextStyle;\n    end = this.startIndices[this.startIndices.length - 1];\n    for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n      start = this.styleIndices_[i];\n      nextStyle = this.styles_[i];\n      this.setFillStyle_(gl, nextStyle);\n      this.drawElements(gl, context, start, end);\n      end = start;\n    }\n  }\n  if (!hitDetection) {\n    gl.disable(gl.DEPTH_TEST);\n    gl.clear(gl.DEPTH_BUFFER_BIT);\n    //Restore GL parameters.\n    gl.depthMask(tmpDepthMask);\n    gl.depthFunc(tmpDepthFunc);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.drawHitDetectionReplayOneByOne = function(gl, context, skippedFeaturesHash,\n    featureCallback, opt_hitExtent) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex;\n  featureIndex = this.startIndices.length - 2;\n  end = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setFillStyle_(gl, nextStyle);\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      start = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid] === undefined &&\n          feature.getGeometry() &&\n          (opt_hitExtent === undefined || ol.extent.intersects(\n              /** @type {Array<number>} */ (opt_hitExtent),\n              feature.getGeometry().getExtent()))) {\n        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        this.drawElements(gl, context, start, end);\n\n        var result = featureCallback(feature);\n\n        if (result) {\n          return result;\n        }\n\n      }\n      featureIndex--;\n      end = start;\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {ol.webgl.Context} context Context.\n * @param {Object} skippedFeaturesHash Ids of features to skip.\n */\nol.render.webgl.PolygonReplay.prototype.drawReplaySkipping_ = function(gl, context, skippedFeaturesHash) {\n  var i, start, end, nextStyle, groupStart, feature, featureUid, featureIndex, featureStart;\n  featureIndex = this.startIndices.length - 2;\n  end = start = this.startIndices[featureIndex + 1];\n  for (i = this.styleIndices_.length - 1; i >= 0; --i) {\n    nextStyle = this.styles_[i];\n    this.setFillStyle_(gl, nextStyle);\n    groupStart = this.styleIndices_[i];\n\n    while (featureIndex >= 0 &&\n        this.startIndices[featureIndex] >= groupStart) {\n      featureStart = this.startIndices[featureIndex];\n      feature = this.startIndicesFeature[featureIndex];\n      featureUid = ol.getUid(feature).toString();\n\n      if (skippedFeaturesHash[featureUid]) {\n        if (start !== end) {\n          this.drawElements(gl, context, start, end);\n          gl.clear(gl.DEPTH_BUFFER_BIT);\n        }\n        end = featureStart;\n      }\n      featureIndex--;\n      start = featureStart;\n    }\n    if (start !== end) {\n      this.drawElements(gl, context, start, end);\n      gl.clear(gl.DEPTH_BUFFER_BIT);\n    }\n    start = end = groupStart;\n  }\n};\n\n\n/**\n * @private\n * @param {WebGLRenderingContext} gl gl.\n * @param {Array.<number>} color Color.\n */\nol.render.webgl.PolygonReplay.prototype.setFillStyle_ = function(gl, color) {\n  gl.uniform4fv(this.defaultLocations_.u_color, color);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.PolygonReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  var fillStyleColor = fillStyle ? fillStyle.getColor() : [0, 0, 0, 0];\n  if (!(fillStyleColor instanceof CanvasGradient) &&\n      !(fillStyleColor instanceof CanvasPattern)) {\n    fillStyleColor = ol.color.asArray(fillStyleColor).map(function(c, i) {\n      return i != 3 ? c / 255 : c;\n    }) || ol.render.webgl.defaultFillStyle;\n  } else {\n    fillStyleColor = ol.render.webgl.defaultFillStyle;\n  }\n  if (!this.state_.fillColor || !ol.array.equals(fillStyleColor, this.state_.fillColor)) {\n    this.state_.fillColor = fillStyleColor;\n    this.state_.changed = true;\n    this.styles_.push(fillStyleColor);\n  }\n  //Provide a null stroke style, if no strokeStyle is provided. Required for the draw interaction to work.\n  if (strokeStyle) {\n    this.lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n  } else {\n    var nullStrokeStyle = new ol.style.Stroke({\n      color: [0, 0, 0, 0],\n      lineWidth: 0\n    });\n    this.lineStringReplay.setFillStrokeStyle(null, nullStrokeStyle);\n  }\n};\n\ngoog.provide('ol.style.Atlas');\n\ngoog.require('ol.dom');\n\n\n/**\n * This class facilitates the creation of image atlases.\n *\n * Images added to an atlas will be rendered onto a single\n * atlas canvas. The distribution of images on the canvas is\n * managed with the bin packing algorithm described in:\n * http://www.blackpawn.com/texts/lightmaps/\n *\n * @constructor\n * @struct\n * @param {number} size The size in pixels of the sprite image.\n * @param {number} space The space in pixels between images.\n *    Because texture coordinates are float values, the edges of\n *    images might not be completely correct (in a way that the\n *    edges overlap when being rendered). To avoid this we add a\n *    padding around each image.\n */\nol.style.Atlas = function(size, space) {\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.space_ = space;\n\n  /**\n   * @private\n   * @type {Array.<ol.AtlasBlock>}\n   */\n  this.emptyBlocks_ = [{x: 0, y: 0, width: size, height: size}];\n\n  /**\n   * @private\n   * @type {Object.<string, ol.AtlasInfo>}\n   */\n  this.entries_ = {};\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.context_ = ol.dom.createCanvasContext2D(size, size);\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = this.context_.canvas;\n};\n\n\n/**\n * @param {string} id The identifier of the entry to check.\n * @return {?ol.AtlasInfo} The atlas info.\n */\nol.style.Atlas.prototype.get = function(id) {\n  return this.entries_[id] || null;\n};\n\n\n/**\n * @param {string} id The identifier of the entry to add.\n * @param {number} width The width.\n * @param {number} height The height.\n * @param {function(CanvasRenderingContext2D, number, number)} renderCallback\n *    Called to render the new image onto an atlas image.\n * @param {Object=} opt_this Value to use as `this` when executing\n *    `renderCallback`.\n * @return {?ol.AtlasInfo} The position and atlas image for the entry.\n */\nol.style.Atlas.prototype.add = function(id, width, height, renderCallback, opt_this) {\n  var block, i, ii;\n  for (i = 0, ii = this.emptyBlocks_.length; i < ii; ++i) {\n    block = this.emptyBlocks_[i];\n    if (block.width >= width + this.space_ &&\n        block.height >= height + this.space_) {\n      // we found a block that is big enough for our entry\n      var entry = {\n        offsetX: block.x + this.space_,\n        offsetY: block.y + this.space_,\n        image: this.canvas_\n      };\n      this.entries_[id] = entry;\n\n      // render the image on the atlas image\n      renderCallback.call(opt_this, this.context_,\n          block.x + this.space_, block.y + this.space_);\n\n      // split the block after the insertion, either horizontally or vertically\n      this.split_(i, block, width + this.space_, height + this.space_);\n\n      return entry;\n    }\n  }\n\n  // there is no space for the new entry in this atlas\n  return null;\n};\n\n\n/**\n * @private\n * @param {number} index The index of the block.\n * @param {ol.AtlasBlock} block The block to split.\n * @param {number} width The width of the entry to insert.\n * @param {number} height The height of the entry to insert.\n */\nol.style.Atlas.prototype.split_ = function(index, block, width, height) {\n  var deltaWidth = block.width - width;\n  var deltaHeight = block.height - height;\n\n  /** @type {ol.AtlasBlock} */\n  var newBlock1;\n  /** @type {ol.AtlasBlock} */\n  var newBlock2;\n\n  if (deltaWidth > deltaHeight) {\n    // split vertically\n    // block right of the inserted entry\n    newBlock1 = {\n      x: block.x + width,\n      y: block.y,\n      width: block.width - width,\n      height: block.height\n    };\n\n    // block below the inserted entry\n    newBlock2 = {\n      x: block.x,\n      y: block.y + height,\n      width: width,\n      height: block.height - height\n    };\n    this.updateBlocks_(index, newBlock1, newBlock2);\n  } else {\n    // split horizontally\n    // block right of the inserted entry\n    newBlock1 = {\n      x: block.x + width,\n      y: block.y,\n      width: block.width - width,\n      height: height\n    };\n\n    // block below the inserted entry\n    newBlock2 = {\n      x: block.x,\n      y: block.y + height,\n      width: block.width,\n      height: block.height - height\n    };\n    this.updateBlocks_(index, newBlock1, newBlock2);\n  }\n};\n\n\n/**\n * Remove the old block and insert new blocks at the same array position.\n * The new blocks are inserted at the same position, so that splitted\n * blocks (that are potentially smaller) are filled first.\n * @private\n * @param {number} index The index of the block to remove.\n * @param {ol.AtlasBlock} newBlock1 The 1st block to add.\n * @param {ol.AtlasBlock} newBlock2 The 2nd block to add.\n */\nol.style.Atlas.prototype.updateBlocks_ = function(index, newBlock1, newBlock2) {\n  var args = [index, 1];\n  if (newBlock1.width > 0 && newBlock1.height > 0) {\n    args.push(newBlock1);\n  }\n  if (newBlock2.width > 0 && newBlock2.height > 0) {\n    args.push(newBlock2);\n  }\n  this.emptyBlocks_.splice.apply(this.emptyBlocks_, args);\n};\n\ngoog.provide('ol.style.AtlasManager');\n\ngoog.require('ol');\ngoog.require('ol.style.Atlas');\n\n\n/**\n * Manages the creation of image atlases.\n *\n * Images added to this manager will be inserted into an atlas, which\n * will be used for rendering.\n * The `size` given in the constructor is the size for the first\n * atlas. After that, when new atlases are created, they will have\n * twice the size as the latest atlas (until `maxSize` is reached).\n *\n * If an application uses many images or very large images, it is recommended\n * to set a higher `size` value to avoid the creation of too many atlases.\n *\n * @constructor\n * @struct\n * @api\n * @param {olx.style.AtlasManagerOptions=} opt_options Options.\n */\nol.style.AtlasManager = function(opt_options) {\n\n  var options = opt_options || {};\n\n  /**\n   * The size in pixels of the latest atlas image.\n   * @private\n   * @type {number}\n   */\n  this.currentSize_ = options.initialSize !== undefined ?\n    options.initialSize : ol.INITIAL_ATLAS_SIZE;\n\n  /**\n   * The maximum size in pixels of atlas images.\n   * @private\n   * @type {number}\n   */\n  this.maxSize_ = options.maxSize !== undefined ?\n    options.maxSize : ol.MAX_ATLAS_SIZE != -1 ?\n      ol.MAX_ATLAS_SIZE : ol.WEBGL_MAX_TEXTURE_SIZE !== undefined ?\n        ol.WEBGL_MAX_TEXTURE_SIZE : 2048;\n\n  /**\n   * The size in pixels between images.\n   * @private\n   * @type {number}\n   */\n  this.space_ = options.space !== undefined ? options.space : 1;\n\n  /**\n   * @private\n   * @type {Array.<ol.style.Atlas>}\n   */\n  this.atlases_ = [new ol.style.Atlas(this.currentSize_, this.space_)];\n\n  /**\n   * The size in pixels of the latest atlas image for hit-detection images.\n   * @private\n   * @type {number}\n   */\n  this.currentHitSize_ = this.currentSize_;\n\n  /**\n   * @private\n   * @type {Array.<ol.style.Atlas>}\n   */\n  this.hitAtlases_ = [new ol.style.Atlas(this.currentHitSize_, this.space_)];\n};\n\n\n/**\n * @param {string} id The identifier of the entry to check.\n * @return {?ol.AtlasManagerInfo} The position and atlas image for the\n *    entry, or `null` if the entry is not part of the atlas manager.\n */\nol.style.AtlasManager.prototype.getInfo = function(id) {\n  /** @type {?ol.AtlasInfo} */\n  var info = this.getInfo_(this.atlases_, id);\n\n  if (!info) {\n    return null;\n  }\n  var hitInfo = /** @type {ol.AtlasInfo} */ (this.getInfo_(this.hitAtlases_, id));\n\n  return this.mergeInfos_(info, hitInfo);\n};\n\n\n/**\n * @private\n * @param {Array.<ol.style.Atlas>} atlases The atlases to search.\n * @param {string} id The identifier of the entry to check.\n * @return {?ol.AtlasInfo} The position and atlas image for the entry,\n *    or `null` if the entry is not part of the atlases.\n */\nol.style.AtlasManager.prototype.getInfo_ = function(atlases, id) {\n  var atlas, info, i, ii;\n  for (i = 0, ii = atlases.length; i < ii; ++i) {\n    atlas = atlases[i];\n    info = atlas.get(id);\n    if (info) {\n      return info;\n    }\n  }\n  return null;\n};\n\n\n/**\n * @private\n * @param {ol.AtlasInfo} info The info for the real image.\n * @param {ol.AtlasInfo} hitInfo The info for the hit-detection\n *    image.\n * @return {?ol.AtlasManagerInfo} The position and atlas image for the\n *    entry, or `null` if the entry is not part of the atlases.\n */\nol.style.AtlasManager.prototype.mergeInfos_ = function(info, hitInfo) {\n  return /** @type {ol.AtlasManagerInfo} */ ({\n    offsetX: info.offsetX,\n    offsetY: info.offsetY,\n    image: info.image,\n    hitImage: hitInfo.image\n  });\n};\n\n\n/**\n * Add an image to the atlas manager.\n *\n * If an entry for the given id already exists, the entry will\n * be overridden (but the space on the atlas graphic will not be freed).\n *\n * If `renderHitCallback` is provided, the image (or the hit-detection version\n * of the image) will be rendered into a separate hit-detection atlas image.\n *\n * @param {string} id The identifier of the entry to add.\n * @param {number} width The width.\n * @param {number} height The height.\n * @param {function(CanvasRenderingContext2D, number, number)} renderCallback\n *    Called to render the new image onto an atlas image.\n * @param {function(CanvasRenderingContext2D, number, number)=}\n *    opt_renderHitCallback Called to render a hit-detection image onto a hit\n *    detection atlas image.\n * @param {Object=} opt_this Value to use as `this` when executing\n *    `renderCallback` and `renderHitCallback`.\n * @return {?ol.AtlasManagerInfo}  The position and atlas image for the\n *    entry, or `null` if the image is too big.\n */\nol.style.AtlasManager.prototype.add = function(id, width, height,\n    renderCallback, opt_renderHitCallback, opt_this) {\n  if (width + this.space_ > this.maxSize_ ||\n      height + this.space_ > this.maxSize_) {\n    return null;\n  }\n\n  /** @type {?ol.AtlasInfo} */\n  var info = this.add_(false,\n      id, width, height, renderCallback, opt_this);\n  if (!info) {\n    return null;\n  }\n\n  // even if no hit-detection entry is requested, we insert a fake entry into\n  // the hit-detection atlas, to make sure that the offset is the same for\n  // the original image and the hit-detection image.\n  var renderHitCallback = opt_renderHitCallback !== undefined ?\n    opt_renderHitCallback : ol.nullFunction;\n\n  var hitInfo = /** @type {ol.AtlasInfo} */ (this.add_(true,\n      id, width, height, renderHitCallback, opt_this));\n\n  return this.mergeInfos_(info, hitInfo);\n};\n\n\n/**\n * @private\n * @param {boolean} isHitAtlas If the hit-detection atlases are used.\n * @param {string} id The identifier of the entry to add.\n * @param {number} width The width.\n * @param {number} height The height.\n * @param {function(CanvasRenderingContext2D, number, number)} renderCallback\n *    Called to render the new image onto an atlas image.\n * @param {Object=} opt_this Value to use as `this` when executing\n *    `renderCallback` and `renderHitCallback`.\n * @return {?ol.AtlasInfo}  The position and atlas image for the entry,\n *    or `null` if the image is too big.\n */\nol.style.AtlasManager.prototype.add_ = function(isHitAtlas, id, width, height,\n    renderCallback, opt_this) {\n  var atlases = (isHitAtlas) ? this.hitAtlases_ : this.atlases_;\n  var atlas, info, i, ii;\n  for (i = 0, ii = atlases.length; i < ii; ++i) {\n    atlas = atlases[i];\n    info = atlas.add(id, width, height, renderCallback, opt_this);\n    if (info) {\n      return info;\n    } else if (!info && i === ii - 1) {\n      // the entry could not be added to one of the existing atlases,\n      // create a new atlas that is twice as big and try to add to this one.\n      var size;\n      if (isHitAtlas) {\n        size = Math.min(this.currentHitSize_ * 2, this.maxSize_);\n        this.currentHitSize_ = size;\n      } else {\n        size = Math.min(this.currentSize_ * 2, this.maxSize_);\n        this.currentSize_ = size;\n      }\n      atlas = new ol.style.Atlas(size, this.space_);\n      atlases.push(atlas);\n      // run the loop another time\n      ++ii;\n    }\n  }\n  return null;\n};\n\ngoog.provide('ol.render.webgl.TextReplay');\n\ngoog.require('ol');\ngoog.require('ol.colorlike');\ngoog.require('ol.dom');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.has');\ngoog.require('ol.render.replay');\ngoog.require('ol.render.webgl');\ngoog.require('ol.render.webgl.TextureReplay');\ngoog.require('ol.style.AtlasManager');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.render.webgl.TextureReplay}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @struct\n */\nol.render.webgl.TextReplay = function(tolerance, maxExtent) {\n  ol.render.webgl.TextureReplay.call(this, tolerance, maxExtent);\n\n  /**\n   * @private\n   * @type {Array.<HTMLCanvasElement>}\n   */\n  this.images_ = [];\n\n  /**\n   * @private\n   * @type {Array.<WebGLTexture>}\n   */\n  this.textures_ = [];\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.measureCanvas_ = ol.dom.createCanvasContext2D(0, 0).canvas;\n\n  /**\n   * @private\n   * @type {{strokeColor: (ol.ColorLike|null),\n   *         lineCap: (string|undefined),\n   *         lineDash: Array.<number>,\n   *         lineDashOffset: (number|undefined),\n   *         lineJoin: (string|undefined),\n   *         lineWidth: number,\n   *         miterLimit: (number|undefined),\n   *         fillColor: (ol.ColorLike|null),\n   *         font: (string|undefined),\n   *         scale: (number|undefined)}}\n   */\n  this.state_ = {\n    strokeColor: null,\n    lineCap: undefined,\n    lineDash: null,\n    lineDashOffset: undefined,\n    lineJoin: undefined,\n    lineWidth: 0,\n    miterLimit: undefined,\n    fillColor: null,\n    font: undefined,\n    scale: undefined\n  };\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.text_ = '';\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.textAlign_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.textBaseline_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.offsetX_ = undefined;\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.offsetY_ = undefined;\n\n  /**\n   * @private\n   * @type {Object.<string, ol.WebglGlyphAtlas>}\n   */\n  this.atlases_ = {};\n\n  /**\n   * @private\n   * @type {ol.WebglGlyphAtlas|undefined}\n   */\n  this.currAtlas_ = undefined;\n\n  this.scale = 1;\n\n  this.opacity = 1;\n\n};\nol.inherits(ol.render.webgl.TextReplay, ol.render.webgl.TextureReplay);\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextReplay.prototype.drawText = function(geometry, feature) {\n  if (this.text_) {\n    var flatCoordinates = null;\n    var offset = 0;\n    var end = 2;\n    var stride = 2;\n    switch (geometry.getType()) {\n      case ol.geom.GeometryType.POINT:\n      case ol.geom.GeometryType.MULTI_POINT:\n        flatCoordinates = geometry.getFlatCoordinates();\n        end = flatCoordinates.length;\n        stride = geometry.getStride();\n        break;\n      case ol.geom.GeometryType.CIRCLE:\n        flatCoordinates = /** @type {ol.geom.Circle} */ (geometry).getCenter();\n        break;\n      case ol.geom.GeometryType.LINE_STRING:\n        flatCoordinates = /** @type {ol.geom.LineString} */ (geometry).getFlatMidpoint();\n        break;\n      case ol.geom.GeometryType.MULTI_LINE_STRING:\n        flatCoordinates = /** @type {ol.geom.MultiLineString} */ (geometry).getFlatMidpoints();\n        end = flatCoordinates.length;\n        break;\n      case ol.geom.GeometryType.POLYGON:\n        flatCoordinates = /** @type {ol.geom.Polygon} */ (geometry).getFlatInteriorPoint();\n        break;\n      case ol.geom.GeometryType.MULTI_POLYGON:\n        flatCoordinates = /** @type {ol.geom.MultiPolygon} */ (geometry).getFlatInteriorPoints();\n        end = flatCoordinates.length;\n        break;\n      default:\n    }\n    this.startIndices.push(this.indices.length);\n    this.startIndicesFeature.push(feature);\n\n    var glyphAtlas = this.currAtlas_;\n    var lines = this.text_.split('\\n');\n    var textSize = this.getTextSize_(lines);\n    var i, ii, j, jj, currX, currY, charArr, charInfo;\n    var anchorX = Math.round(textSize[0] * this.textAlign_ - this.offsetX_);\n    var anchorY = Math.round(textSize[1] * this.textBaseline_ - this.offsetY_);\n    var lineWidth = (this.state_.lineWidth / 2) * this.state_.scale;\n\n    for (i = 0, ii = lines.length; i < ii; ++i) {\n      currX = 0;\n      currY = glyphAtlas.height * i;\n      charArr = lines[i].split('');\n\n      for (j = 0, jj = charArr.length; j < jj; ++j) {\n        charInfo = glyphAtlas.atlas.getInfo(charArr[j]);\n\n        if (charInfo) {\n          var image = charInfo.image;\n\n          this.anchorX = anchorX - currX;\n          this.anchorY = anchorY - currY;\n          this.originX = j === 0 ? charInfo.offsetX - lineWidth : charInfo.offsetX;\n          this.originY = charInfo.offsetY;\n          this.height = glyphAtlas.height;\n          this.width = j === 0 || j === charArr.length - 1 ?\n            glyphAtlas.width[charArr[j]] + lineWidth : glyphAtlas.width[charArr[j]];\n          this.imageHeight = image.height;\n          this.imageWidth = image.width;\n\n          var currentImage;\n          if (this.images_.length === 0) {\n            this.images_.push(image);\n          } else {\n            currentImage = this.images_[this.images_.length - 1];\n            if (ol.getUid(currentImage) != ol.getUid(image)) {\n              this.groupIndices.push(this.indices.length);\n              this.images_.push(image);\n            }\n          }\n\n          this.drawText_(flatCoordinates, offset, end, stride);\n        }\n        currX += this.width;\n      }\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {Array.<string>} lines Label to draw split to lines.\n * @return {Array.<number>} Size of the label in pixels.\n */\nol.render.webgl.TextReplay.prototype.getTextSize_ = function(lines) {\n  var self = this;\n  var glyphAtlas = this.currAtlas_;\n  var textHeight = lines.length * glyphAtlas.height;\n  //Split every line to an array of chars, sum up their width, and select the longest.\n  var textWidth = lines.map(function(str) {\n    var sum = 0;\n    var i, ii;\n    for (i = 0, ii = str.length; i < ii; ++i) {\n      var curr = str[i];\n      if (!glyphAtlas.width[curr]) {\n        self.addCharToAtlas_(curr);\n      }\n      sum += glyphAtlas.width[curr] ? glyphAtlas.width[curr] : 0;\n    }\n    return sum;\n  }).reduce(function(max, curr) {\n    return Math.max(max, curr);\n  });\n\n  return [textWidth, textHeight];\n};\n\n\n/**\n * @private\n * @param {Array.<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nol.render.webgl.TextReplay.prototype.drawText_ = function(flatCoordinates, offset,\n    end, stride) {\n  var i, ii;\n  for (i = offset, ii = end; i < ii; i += stride) {\n    this.drawCoordinates(flatCoordinates, offset, end, stride);\n  }\n};\n\n\n/**\n * @private\n * @param {string} char Character.\n */\nol.render.webgl.TextReplay.prototype.addCharToAtlas_ = function(char) {\n  if (char.length === 1) {\n    var glyphAtlas = this.currAtlas_;\n    var state = this.state_;\n    var mCtx = this.measureCanvas_.getContext('2d');\n    mCtx.font = state.font;\n    var width = Math.ceil(mCtx.measureText(char).width * state.scale);\n\n    var info = glyphAtlas.atlas.add(char, width, glyphAtlas.height,\n        function(ctx, x, y) {\n          //Parameterize the canvas\n          ctx.font = /** @type {string} */ (state.font);\n          ctx.fillStyle = state.fillColor;\n          ctx.strokeStyle = state.strokeColor;\n          ctx.lineWidth = state.lineWidth;\n          ctx.lineCap = /*** @type {string} */ (state.lineCap);\n          ctx.lineJoin = /** @type {string} */ (state.lineJoin);\n          ctx.miterLimit = /** @type {number} */ (state.miterLimit);\n          ctx.textAlign = 'left';\n          ctx.textBaseline = 'top';\n          if (ol.has.CANVAS_LINE_DASH && state.lineDash) {\n            //FIXME: use pixelRatio\n            ctx.setLineDash(state.lineDash);\n            ctx.lineDashOffset = /** @type {number} */ (state.lineDashOffset);\n          }\n          if (state.scale !== 1) {\n            //FIXME: use pixelRatio\n            ctx.setTransform(/** @type {number} */ (state.scale), 0, 0,\n                /** @type {number} */ (state.scale), 0, 0);\n          }\n\n          //Draw the character on the canvas\n          if (state.strokeColor) {\n            ctx.strokeText(char, x, y);\n          }\n          if (state.fillColor) {\n            ctx.fillText(char, x, y);\n          }\n        });\n\n    if (info) {\n      glyphAtlas.width[char] = width;\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextReplay.prototype.finish = function(context) {\n  var gl = context.getGL();\n\n  this.groupIndices.push(this.indices.length);\n  this.hitDetectionGroupIndices = this.groupIndices;\n\n  // create, bind, and populate the vertices buffer\n  this.verticesBuffer = new ol.webgl.Buffer(this.vertices);\n\n  // create, bind, and populate the indices buffer\n  this.indicesBuffer = new ol.webgl.Buffer(this.indices);\n\n  // create textures\n  /** @type {Object.<string, WebGLTexture>} */\n  var texturePerImage = {};\n\n  this.createTextures(this.textures_, this.images_, texturePerImage, gl);\n\n  this.state_ = {\n    strokeColor: null,\n    lineCap: undefined,\n    lineDash: null,\n    lineDashOffset: undefined,\n    lineJoin: undefined,\n    lineWidth: 0,\n    miterLimit: undefined,\n    fillColor: null,\n    font: undefined,\n    scale: undefined\n  };\n  this.text_ = '';\n  this.textAlign_ = undefined;\n  this.textBaseline_ = undefined;\n  this.offsetX_ = undefined;\n  this.offsetY_ = undefined;\n  this.images_ = null;\n  this.atlases_ = {};\n  this.currAtlas_ = undefined;\n  ol.render.webgl.TextureReplay.prototype.finish.call(this, context);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextReplay.prototype.setTextStyle = function(textStyle) {\n  var state = this.state_;\n  var textFillStyle = textStyle.getFill();\n  var textStrokeStyle = textStyle.getStroke();\n  if (!textStyle || !textStyle.getText() || (!textFillStyle && !textStrokeStyle)) {\n    this.text_ = '';\n  } else {\n    if (!textFillStyle) {\n      state.fillColor = null;\n    } else {\n      var textFillStyleColor = textFillStyle.getColor();\n      state.fillColor = ol.colorlike.asColorLike(textFillStyleColor ?\n        textFillStyleColor : ol.render.webgl.defaultFillStyle);\n    }\n    if (!textStrokeStyle) {\n      state.strokeColor = null;\n      state.lineWidth = 0;\n    } else {\n      var textStrokeStyleColor = textStrokeStyle.getColor();\n      state.strokeColor = ol.colorlike.asColorLike(textStrokeStyleColor ?\n        textStrokeStyleColor : ol.render.webgl.defaultStrokeStyle);\n      state.lineWidth = textStrokeStyle.getWidth() || ol.render.webgl.defaultLineWidth;\n      state.lineCap = textStrokeStyle.getLineCap() || ol.render.webgl.defaultLineCap;\n      state.lineDashOffset = textStrokeStyle.getLineDashOffset() || ol.render.webgl.defaultLineDashOffset;\n      state.lineJoin = textStrokeStyle.getLineJoin() || ol.render.webgl.defaultLineJoin;\n      state.miterLimit = textStrokeStyle.getMiterLimit() || ol.render.webgl.defaultMiterLimit;\n      var lineDash = textStrokeStyle.getLineDash();\n      state.lineDash = lineDash ? lineDash.slice() : ol.render.webgl.defaultLineDash;\n    }\n    state.font = textStyle.getFont() || ol.render.webgl.defaultFont;\n    state.scale = textStyle.getScale() || 1;\n    this.text_ = /** @type {string} */ (textStyle.getText());\n    var textAlign = ol.render.replay.TEXT_ALIGN[textStyle.getTextAlign()];\n    var textBaseline = ol.render.replay.TEXT_ALIGN[textStyle.getTextBaseline()];\n    this.textAlign_ = textAlign === undefined ?\n      ol.render.webgl.defaultTextAlign : textAlign;\n    this.textBaseline_ = textBaseline === undefined ?\n      ol.render.webgl.defaultTextBaseline : textBaseline;\n    this.offsetX_ = textStyle.getOffsetX() || 0;\n    this.offsetY_ = textStyle.getOffsetY() || 0;\n    this.rotateWithView = !!textStyle.getRotateWithView();\n    this.rotation = textStyle.getRotation() || 0;\n\n    this.currAtlas_ = this.getAtlas_(state);\n  }\n};\n\n\n/**\n * @private\n * @param {Object} state Font attributes.\n * @return {ol.WebglGlyphAtlas} Glyph atlas.\n */\nol.render.webgl.TextReplay.prototype.getAtlas_ = function(state) {\n  var params = [];\n  var i;\n  for (i in state) {\n    if (state[i] || state[i] === 0) {\n      if (Array.isArray(state[i])) {\n        params = params.concat(state[i]);\n      } else {\n        params.push(state[i]);\n      }\n    }\n  }\n  var hash = this.calculateHash_(params);\n  if (!this.atlases_[hash]) {\n    var mCtx = this.measureCanvas_.getContext('2d');\n    mCtx.font = state.font;\n    var height = Math.ceil((mCtx.measureText('M').width * 1.5 +\n        state.lineWidth / 2) * state.scale);\n\n    this.atlases_[hash] = {\n      atlas: new ol.style.AtlasManager({\n        space: state.lineWidth + 1\n      }),\n      width: {},\n      height: height\n    };\n  }\n  return this.atlases_[hash];\n};\n\n\n/**\n * @private\n * @param {Array.<string|number>} params Array of parameters.\n * @return {string} Hash string.\n */\nol.render.webgl.TextReplay.prototype.calculateHash_ = function(params) {\n  //TODO: Create a more performant, reliable, general hash function.\n  var i, ii;\n  var hash = '';\n  for (i = 0, ii = params.length; i < ii; ++i) {\n    hash += params[i];\n  }\n  return hash;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextReplay.prototype.getTextures = function(opt_all) {\n  return this.textures_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.TextReplay.prototype.getHitDetectionTextures = function() {\n  return this.textures_;\n};\n\ngoog.provide('ol.render.webgl.ReplayGroup');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.render.replay');\ngoog.require('ol.render.ReplayGroup');\ngoog.require('ol.render.webgl.CircleReplay');\ngoog.require('ol.render.webgl.ImageReplay');\ngoog.require('ol.render.webgl.LineStringReplay');\ngoog.require('ol.render.webgl.PolygonReplay');\ngoog.require('ol.render.webgl.TextReplay');\n\n\n/**\n * @constructor\n * @extends {ol.render.ReplayGroup}\n * @param {number} tolerance Tolerance.\n * @param {ol.Extent} maxExtent Max extent.\n * @param {number=} opt_renderBuffer Render buffer.\n * @struct\n */\nol.render.webgl.ReplayGroup = function(tolerance, maxExtent, opt_renderBuffer) {\n  ol.render.ReplayGroup.call(this);\n\n  /**\n   * @type {ol.Extent}\n   * @private\n   */\n  this.maxExtent_ = maxExtent;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.tolerance_ = tolerance;\n\n  /**\n   * @type {number|undefined}\n   * @private\n   */\n  this.renderBuffer_ = opt_renderBuffer;\n\n  /**\n   * @private\n   * @type {!Object.<string,\n   *        Object.<ol.render.ReplayType, ol.render.webgl.Replay>>}\n   */\n  this.replaysByZIndex_ = {};\n\n};\nol.inherits(ol.render.webgl.ReplayGroup, ol.render.ReplayGroup);\n\n\n/**\n * @param {ol.style.Style} style Style.\n * @param {boolean} group Group with previous replay.\n */\nol.render.webgl.ReplayGroup.prototype.addDeclutter = function(style, group) {};\n\n\n/**\n * @param {ol.webgl.Context} context WebGL context.\n * @return {function()} Delete resources function.\n */\nol.render.webgl.ReplayGroup.prototype.getDeleteResourcesFunction = function(context) {\n  var functions = [];\n  var zKey;\n  for (zKey in this.replaysByZIndex_) {\n    var replays = this.replaysByZIndex_[zKey];\n    var replayKey;\n    for (replayKey in replays) {\n      functions.push(\n          replays[replayKey].getDeleteResourcesFunction(context));\n    }\n  }\n  return function() {\n    var length = functions.length;\n    var result;\n    for (var i = 0; i < length; i++) {\n      result = functions[i].apply(this, arguments);\n    }\n    return result;\n  };\n};\n\n\n/**\n * @param {ol.webgl.Context} context Context.\n */\nol.render.webgl.ReplayGroup.prototype.finish = function(context) {\n  var zKey;\n  for (zKey in this.replaysByZIndex_) {\n    var replays = this.replaysByZIndex_[zKey];\n    var replayKey;\n    for (replayKey in replays) {\n      replays[replayKey].finish(context);\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {\n  var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n  var replays = this.replaysByZIndex_[zIndexKey];\n  if (replays === undefined) {\n    replays = {};\n    this.replaysByZIndex_[zIndexKey] = replays;\n  }\n  var replay = replays[replayType];\n  if (replay === undefined) {\n    /**\n     * @type {Function}\n     */\n    var Constructor = ol.render.webgl.ReplayGroup.BATCH_CONSTRUCTORS_[replayType];\n    replay = new Constructor(this.tolerance_, this.maxExtent_);\n    replays[replayType] = replay;\n  }\n  return replay;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.ReplayGroup.prototype.isEmpty = function() {\n  return ol.obj.isEmpty(this.replaysByZIndex_);\n};\n\n\n/**\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} opacity Global opacity.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n */\nol.render.webgl.ReplayGroup.prototype.replay = function(context,\n    center, resolution, rotation, size, pixelRatio,\n    opacity, skippedFeaturesHash) {\n  /** @type {Array.<number>} */\n  var zs = Object.keys(this.replaysByZIndex_).map(Number);\n  zs.sort(ol.array.numberSafeCompareFunction);\n\n  var i, ii, j, jj, replays, replay;\n  for (i = 0, ii = zs.length; i < ii; ++i) {\n    replays = this.replaysByZIndex_[zs[i].toString()];\n    for (j = 0, jj = ol.render.replay.ORDER.length; j < jj; ++j) {\n      replay = replays[ol.render.replay.ORDER[j]];\n      if (replay !== undefined) {\n        replay.replay(context,\n            center, resolution, rotation, size, pixelRatio,\n            opacity, skippedFeaturesHash,\n            undefined, false);\n      }\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} opacity Global opacity.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.\n * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.\n * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting\n *  this extent are checked.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.ReplayGroup.prototype.replayHitDetection_ = function(context,\n    center, resolution, rotation, size, pixelRatio, opacity,\n    skippedFeaturesHash, featureCallback, oneByOne, opt_hitExtent) {\n  /** @type {Array.<number>} */\n  var zs = Object.keys(this.replaysByZIndex_).map(Number);\n  zs.sort(function(a, b) {\n    return b - a;\n  });\n\n  var i, ii, j, replays, replay, result;\n  for (i = 0, ii = zs.length; i < ii; ++i) {\n    replays = this.replaysByZIndex_[zs[i].toString()];\n    for (j = ol.render.replay.ORDER.length - 1; j >= 0; --j) {\n      replay = replays[ol.render.replay.ORDER[j]];\n      if (replay !== undefined) {\n        result = replay.replay(context,\n            center, resolution, rotation, size, pixelRatio, opacity,\n            skippedFeaturesHash, featureCallback, oneByOne, opt_hitExtent);\n        if (result) {\n          return result;\n        }\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} opacity Global opacity.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @param {function((ol.Feature|ol.render.Feature)): T|undefined} callback Feature callback.\n * @return {T|undefined} Callback result.\n * @template T\n */\nol.render.webgl.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(\n    coordinate, context, center, resolution, rotation, size, pixelRatio,\n    opacity, skippedFeaturesHash,\n    callback) {\n  var gl = context.getGL();\n  gl.bindFramebuffer(\n      gl.FRAMEBUFFER, context.getHitDetectionFramebuffer());\n\n\n  /**\n   * @type {ol.Extent}\n   */\n  var hitExtent;\n  if (this.renderBuffer_ !== undefined) {\n    // build an extent around the coordinate, so that only features that\n    // intersect this extent are checked\n    hitExtent = ol.extent.buffer(\n        ol.extent.createOrUpdateFromCoordinate(coordinate),\n        resolution * this.renderBuffer_);\n  }\n\n  return this.replayHitDetection_(context,\n      coordinate, resolution, rotation, ol.render.webgl.ReplayGroup.HIT_DETECTION_SIZE_,\n      pixelRatio, opacity, skippedFeaturesHash,\n      /**\n       * @param {ol.Feature|ol.render.Feature} feature Feature.\n       * @return {?} Callback result.\n       */\n      function(feature) {\n        var imageData = new Uint8Array(4);\n        gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n\n        if (imageData[3] > 0) {\n          var result = callback(feature);\n          if (result) {\n            return result;\n          }\n        }\n      }, true, hitExtent);\n};\n\n\n/**\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} opacity Global opacity.\n * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features\n *  to skip.\n * @return {boolean} Is there a feature at the given coordinate?\n */\nol.render.webgl.ReplayGroup.prototype.hasFeatureAtCoordinate = function(\n    coordinate, context, center, resolution, rotation, size, pixelRatio,\n    opacity, skippedFeaturesHash) {\n  var gl = context.getGL();\n  gl.bindFramebuffer(\n      gl.FRAMEBUFFER, context.getHitDetectionFramebuffer());\n\n  var hasFeature = this.replayHitDetection_(context,\n      coordinate, resolution, rotation, ol.render.webgl.ReplayGroup.HIT_DETECTION_SIZE_,\n      pixelRatio, opacity, skippedFeaturesHash,\n      /**\n       * @param {ol.Feature|ol.render.Feature} feature Feature.\n       * @return {boolean} Is there a feature?\n       */\n      function(feature) {\n        var imageData = new Uint8Array(4);\n        gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n        return imageData[3] > 0;\n      }, false);\n\n  return hasFeature !== undefined;\n};\n\n/**\n * @const\n * @private\n * @type {Array.<number>}\n */\nol.render.webgl.ReplayGroup.HIT_DETECTION_SIZE_ = [1, 1];\n\n/**\n * @const\n * @private\n * @type {Object.<ol.render.ReplayType,\n *                function(new: ol.render.webgl.Replay, number,\n *                ol.Extent)>}\n */\nol.render.webgl.ReplayGroup.BATCH_CONSTRUCTORS_ = {\n  'Circle': ol.render.webgl.CircleReplay,\n  'Image': ol.render.webgl.ImageReplay,\n  'LineString': ol.render.webgl.LineStringReplay,\n  'Polygon': ol.render.webgl.PolygonReplay,\n  'Text': ol.render.webgl.TextReplay\n};\n\ngoog.provide('ol.render.webgl.Immediate');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.geom.GeometryType');\ngoog.require('ol.render.ReplayType');\ngoog.require('ol.render.VectorContext');\ngoog.require('ol.render.webgl.ReplayGroup');\n\n\n/**\n * @constructor\n * @extends {ol.render.VectorContext}\n * @param {ol.webgl.Context} context Context.\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {ol.Size} size Size.\n * @param {ol.Extent} extent Extent.\n * @param {number} pixelRatio Pixel ratio.\n * @struct\n */\nol.render.webgl.Immediate = function(context, center, resolution, rotation, size, extent, pixelRatio) {\n  ol.render.VectorContext.call(this);\n\n  /**\n   * @private\n   */\n  this.context_ = context;\n\n  /**\n   * @private\n   */\n  this.center_ = center;\n\n  /**\n   * @private\n   */\n  this.extent_ = extent;\n\n  /**\n   * @private\n   */\n  this.pixelRatio_ = pixelRatio;\n\n  /**\n   * @private\n   */\n  this.size_ = size;\n\n  /**\n   * @private\n   */\n  this.rotation_ = rotation;\n\n  /**\n   * @private\n   */\n  this.resolution_ = resolution;\n\n  /**\n   * @private\n   * @type {ol.style.Image}\n   */\n  this.imageStyle_ = null;\n\n  /**\n   * @private\n   * @type {ol.style.Fill}\n   */\n  this.fillStyle_ = null;\n\n  /**\n   * @private\n   * @type {ol.style.Stroke}\n   */\n  this.strokeStyle_ = null;\n\n  /**\n   * @private\n   * @type {ol.style.Text}\n   */\n  this.textStyle_ = null;\n\n};\nol.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);\n\n\n/**\n * @param {ol.render.webgl.ReplayGroup} replayGroup Replay group.\n * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.\n * @private\n */\nol.render.webgl.Immediate.prototype.drawText_ = function(replayGroup, geometry) {\n  var context = this.context_;\n  var replay = /** @type {ol.render.webgl.TextReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.TEXT));\n  replay.setTextStyle(this.textStyle_);\n  replay.drawText(geometry, null);\n  replay.finish(context);\n  // default colors\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n};\n\n\n/**\n * Set the rendering style.  Note that since this is an immediate rendering API,\n * any `zIndex` on the provided style will be ignored.\n *\n * @param {ol.style.Style} style The rendering style.\n * @override\n * @api\n */\nol.render.webgl.Immediate.prototype.setStyle = function(style) {\n  this.setFillStrokeStyle(style.getFill(), style.getStroke());\n  this.setImageStyle(style.getImage());\n  this.setTextStyle(style.getText());\n};\n\n\n/**\n * Render a geometry into the canvas.  Call\n * {@link ol.render.webgl.Immediate#setStyle} first to set the rendering style.\n *\n * @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.\n * @override\n * @api\n */\nol.render.webgl.Immediate.prototype.drawGeometry = function(geometry) {\n  var type = geometry.getType();\n  switch (type) {\n    case ol.geom.GeometryType.POINT:\n      this.drawPoint(/** @type {ol.geom.Point} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.LINE_STRING:\n      this.drawLineString(/** @type {ol.geom.LineString} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.POLYGON:\n      this.drawPolygon(/** @type {ol.geom.Polygon} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.MULTI_POINT:\n      this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.MULTI_LINE_STRING:\n      this.drawMultiLineString(/** @type {ol.geom.MultiLineString} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.MULTI_POLYGON:\n      this.drawMultiPolygon(/** @type {ol.geom.MultiPolygon} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.GEOMETRY_COLLECTION:\n      this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry), null);\n      break;\n    case ol.geom.GeometryType.CIRCLE:\n      this.drawCircle(/** @type {ol.geom.Circle} */ (geometry), null);\n      break;\n    default:\n      // pass\n  }\n};\n\n\n/**\n * @inheritDoc\n * @api\n */\nol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) {\n  var geometry = style.getGeometryFunction()(feature);\n  if (!geometry ||\n      !ol.extent.intersects(this.extent_, geometry.getExtent())) {\n    return;\n  }\n  this.setStyle(style);\n  this.drawGeometry(geometry);\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawGeometryCollection = function(geometry, data) {\n  var geometries = geometry.getGeometriesArray();\n  var i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    this.drawGeometry(geometries[i]);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawPoint = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.ImageReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));\n  replay.setImageStyle(this.imageStyle_);\n  replay.drawPoint(geometry, data);\n  replay.finish(context);\n  // default colors\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawMultiPoint = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.ImageReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));\n  replay.setImageStyle(this.imageStyle_);\n  replay.drawMultiPoint(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawLineString = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.LineStringReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.LINE_STRING));\n  replay.setFillStrokeStyle(null, this.strokeStyle_);\n  replay.drawLineString(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawMultiLineString = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.LineStringReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.LINE_STRING));\n  replay.setFillStrokeStyle(null, this.strokeStyle_);\n  replay.drawMultiLineString(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawPolygon = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.PolygonReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.POLYGON));\n  replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_);\n  replay.drawPolygon(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawMultiPolygon = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.PolygonReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.POLYGON));\n  replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_);\n  replay.drawMultiPolygon(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.drawCircle = function(geometry, data) {\n  var context = this.context_;\n  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);\n  var replay = /** @type {ol.render.webgl.CircleReplay} */ (\n    replayGroup.getReplay(0, ol.render.ReplayType.CIRCLE));\n  replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_);\n  replay.drawCircle(geometry, data);\n  replay.finish(context);\n  var opacity = 1;\n  var skippedFeatures = {};\n  var featureCallback;\n  var oneByOne = false;\n  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,\n      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,\n      oneByOne);\n  replay.getDeleteResourcesFunction(context)();\n\n  if (this.textStyle_) {\n    this.drawText_(replayGroup, geometry);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) {\n  this.imageStyle_ = imageStyle;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {\n  this.fillStyle_ = fillStyle;\n  this.strokeStyle_ = strokeStyle;\n};\n\n\n/**\n * @inheritDoc\n */\nol.render.webgl.Immediate.prototype.setTextStyle = function(textStyle) {\n  this.textStyle_ = textStyle;\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.renderer.webgl.defaultmapshader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.renderer.webgl.defaultmapshader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\nvarying vec2 v_texCoord;\\n\\n\\nuniform float u_opacity;\\nuniform sampler2D u_texture;\\n\\nvoid main(void) {\\n  vec4 texColor = texture2D(u_texture, v_texCoord);\\n  gl_FragColor.rgb = texColor.rgb;\\n  gl_FragColor.a = texColor.a * u_opacity;\\n}\\n' :\n  'precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}');\n\nol.renderer.webgl.defaultmapshader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  'varying vec2 v_texCoord;\\n\\n\\nattribute vec2 a_position;\\nattribute vec2 a_texCoord;\\n\\nuniform mat4 u_texCoordMatrix;\\nuniform mat4 u_projectionMatrix;\\n\\nvoid main(void) {\\n  gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\\n  v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\\n}\\n\\n\\n' :\n  'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.renderer.webgl.defaultmapshader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.renderer.webgl.defaultmapshader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_texCoordMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_texCoordMatrix' : 'd');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_projectionMatrix = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_projectionMatrix' : 'e');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_opacity = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_opacity' : 'f');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_texture = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_texture' : 'g');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'b');\n\n  /**\n   * @type {number}\n   */\n  this.a_texCoord = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_texCoord' : 'c');\n};\n\ngoog.provide('ol.renderer.webgl.Layer');\n\ngoog.require('ol');\ngoog.require('ol.render.Event');\ngoog.require('ol.render.EventType');\ngoog.require('ol.render.webgl.Immediate');\ngoog.require('ol.renderer.Layer');\ngoog.require('ol.renderer.webgl.defaultmapshader');\ngoog.require('ol.renderer.webgl.defaultmapshader.Locations');\ngoog.require('ol.transform');\ngoog.require('ol.vec.Mat4');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Buffer');\ngoog.require('ol.webgl.Context');\n\n\n/**\n * @constructor\n * @abstract\n * @extends {ol.renderer.Layer}\n * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.\n * @param {ol.layer.Layer} layer Layer.\n */\nol.renderer.webgl.Layer = function(mapRenderer, layer) {\n\n  ol.renderer.Layer.call(this, layer);\n\n  /**\n   * @protected\n   * @type {ol.renderer.webgl.Map}\n   */\n  this.mapRenderer = mapRenderer;\n\n  /**\n   * @private\n   * @type {ol.webgl.Buffer}\n   */\n  this.arrayBuffer_ = new ol.webgl.Buffer([\n    -1, -1, 0, 0,\n    1, -1, 1, 0,\n    -1, 1, 0, 1,\n    1, 1, 1, 1\n  ]);\n\n  /**\n   * @protected\n   * @type {WebGLTexture}\n   */\n  this.texture = null;\n\n  /**\n   * @protected\n   * @type {WebGLFramebuffer}\n   */\n  this.framebuffer = null;\n\n  /**\n   * @protected\n   * @type {number|undefined}\n   */\n  this.framebufferDimension = undefined;\n\n  /**\n   * @protected\n   * @type {ol.Transform}\n   */\n  this.texCoordMatrix = ol.transform.create();\n\n  /**\n   * @protected\n   * @type {ol.Transform}\n   */\n  this.projectionMatrix = ol.transform.create();\n\n  /**\n   * @type {Array.<number>}\n   * @private\n   */\n  this.tmpMat4_ = ol.vec.Mat4.create();\n\n  /**\n   * @private\n   * @type {ol.renderer.webgl.defaultmapshader.Locations}\n   */\n  this.defaultLocations_ = null;\n\n};\nol.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer);\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @param {number} framebufferDimension Framebuffer dimension.\n * @protected\n */\nol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) {\n\n  var gl = this.mapRenderer.getGL();\n\n  if (this.framebufferDimension === undefined ||\n      this.framebufferDimension != framebufferDimension) {\n    /**\n     * @param {WebGLRenderingContext} gl GL.\n     * @param {WebGLFramebuffer} framebuffer Framebuffer.\n     * @param {WebGLTexture} texture Texture.\n     */\n    var postRenderFunction = function(gl, framebuffer, texture) {\n      if (!gl.isContextLost()) {\n        gl.deleteFramebuffer(framebuffer);\n        gl.deleteTexture(texture);\n      }\n    }.bind(null, gl, this.framebuffer, this.texture);\n\n    frameState.postRenderFunctions.push(\n        /** @type {ol.PostRenderFunction} */ (postRenderFunction)\n    );\n\n    var texture = ol.webgl.Context.createEmptyTexture(\n        gl, framebufferDimension, framebufferDimension);\n\n    var framebuffer = gl.createFramebuffer();\n    gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, framebuffer);\n    gl.framebufferTexture2D(ol.webgl.FRAMEBUFFER,\n        ol.webgl.COLOR_ATTACHMENT0, ol.webgl.TEXTURE_2D, texture, 0);\n\n    this.texture = texture;\n    this.framebuffer = framebuffer;\n    this.framebufferDimension = framebufferDimension;\n\n  } else {\n    gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, this.framebuffer);\n  }\n\n};\n\n\n/**\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @param {ol.webgl.Context} context Context.\n */\nol.renderer.webgl.Layer.prototype.composeFrame = function(frameState, layerState, context) {\n\n  this.dispatchComposeEvent_(\n      ol.render.EventType.PRECOMPOSE, context, frameState);\n\n  context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.arrayBuffer_);\n\n  var gl = context.getGL();\n\n  var fragmentShader = ol.renderer.webgl.defaultmapshader.fragment;\n  var vertexShader = ol.renderer.webgl.defaultmapshader.vertex;\n\n  var program = context.getProgram(fragmentShader, vertexShader);\n\n  var locations;\n  if (!this.defaultLocations_) {\n    locations = new ol.renderer.webgl.defaultmapshader.Locations(gl, program);\n    this.defaultLocations_ = locations;\n  } else {\n    locations = this.defaultLocations_;\n  }\n\n  if (context.useProgram(program)) {\n    gl.enableVertexAttribArray(locations.a_position);\n    gl.vertexAttribPointer(\n        locations.a_position, 2, ol.webgl.FLOAT, false, 16, 0);\n    gl.enableVertexAttribArray(locations.a_texCoord);\n    gl.vertexAttribPointer(\n        locations.a_texCoord, 2, ol.webgl.FLOAT, false, 16, 8);\n    gl.uniform1i(locations.u_texture, 0);\n  }\n\n  gl.uniformMatrix4fv(locations.u_texCoordMatrix, false,\n      ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getTexCoordMatrix()));\n  gl.uniformMatrix4fv(locations.u_projectionMatrix, false,\n      ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getProjectionMatrix()));\n  gl.uniform1f(locations.u_opacity, layerState.opacity);\n  gl.bindTexture(ol.webgl.TEXTURE_2D, this.getTexture());\n  gl.drawArrays(ol.webgl.TRIANGLE_STRIP, 0, 4);\n\n  this.dispatchComposeEvent_(\n      ol.render.EventType.POSTCOMPOSE, context, frameState);\n\n};\n\n\n/**\n * @param {ol.render.EventType} type Event type.\n * @param {ol.webgl.Context} context WebGL context.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState) {\n  var layer = this.getLayer();\n  if (layer.hasListener(type)) {\n    var viewState = frameState.viewState;\n    var resolution = viewState.resolution;\n    var pixelRatio = frameState.pixelRatio;\n    var extent = frameState.extent;\n    var center = viewState.center;\n    var rotation = viewState.rotation;\n    var size = frameState.size;\n\n    var render = new ol.render.webgl.Immediate(\n        context, center, resolution, rotation, size, extent, pixelRatio);\n    var composeEvent = new ol.render.Event(\n        type, render, frameState, null, context);\n    layer.dispatchEvent(composeEvent);\n  }\n};\n\n\n/**\n * @return {!ol.Transform} Matrix.\n */\nol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {\n  return this.texCoordMatrix;\n};\n\n\n/**\n * @return {WebGLTexture} Texture.\n */\nol.renderer.webgl.Layer.prototype.getTexture = function() {\n  return this.texture;\n};\n\n\n/**\n * @return {!ol.Transform} Matrix.\n */\nol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {\n  return this.projectionMatrix;\n};\n\n\n/**\n * Handle webglcontextlost.\n */\nol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() {\n  this.texture = null;\n  this.framebuffer = null;\n  this.framebufferDimension = undefined;\n};\n\n\n/**\n * @abstract\n * @param {olx.FrameState} frameState Frame state.\n * @param {ol.LayerState} layerState Layer state.\n * @param {ol.webgl.Context} context Context.\n * @return {boolean} whether composeFrame should be called.\n */\nol.renderer.webgl.Layer.prototype.prepareFrame = function(frameState, layerState, context) {};\n\n\n/**\n * @abstract\n * @param {ol.Pixel} pixel Pixel.\n * @param {olx.FrameState} frameState FrameState.\n * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n *     callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\nol.renderer.webgl.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {};\n\ngoog.provide('ol.renderer.webgl.ImageLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.ViewHint');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.functions');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.webgl.Layer');\ngoog.require('ol.transform');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Context');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.webgl.Layer}\n * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.\n * @param {ol.layer.Image} imageLayer Tile layer.\n * @api\n */\nol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {\n\n  ol.renderer.webgl.Layer.call(this, mapRenderer, imageLayer);\n\n  /**\n   * The last rendered image.\n   * @private\n   * @type {?ol.ImageBase}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.hitCanvasContext_ = null;\n\n  /**\n   * @private\n   * @type {?ol.Transform}\n   */\n  this.hitTransformationMatrix_ = null;\n\n};\nol.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.webgl.ImageLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.WEBGL && layer.getType() === ol.LayerType.IMAGE;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.webgl.ImageLayer} The layer renderer.\n */\nol.renderer.webgl.ImageLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.webgl.ImageLayer(\n      /** @type {ol.renderer.webgl.Map} */ (mapRenderer),\n      /** @type {ol.layer.Image} */ (layer)\n  );\n};\n\n\n/**\n * @param {ol.ImageBase} image Image.\n * @private\n * @return {WebGLTexture} Texture.\n */\nol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) {\n\n  // We meet the conditions to work with non-power of two textures.\n  // http://www.khronos.org/webgl/wiki/WebGL_and_OpenGL_Differences#Non-Power_of_Two_Texture_Support\n  // http://learningwebgl.com/blog/?p=2101\n\n  var imageElement = image.getImage();\n  var gl = this.mapRenderer.getGL();\n\n  return ol.webgl.Context.createTexture(\n      gl, imageElement, ol.webgl.CLAMP_TO_EDGE, ol.webgl.CLAMP_TO_EDGE);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  var layer = this.getLayer();\n  var source = layer.getSource();\n  var resolution = frameState.viewState.resolution;\n  var rotation = frameState.viewState.rotation;\n  var skippedFeatureUids = frameState.skippedFeatureUids;\n  return source.forEachFeatureAtCoordinate(\n      coordinate, resolution, rotation, hitTolerance, skippedFeatureUids,\n\n      /**\n       * @param {ol.Feature|ol.render.Feature} feature Feature.\n       * @return {?} Callback result.\n       */\n      function(feature) {\n        return callback.call(thisArg, feature, layer);\n      });\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layerState, context) {\n\n  var gl = this.mapRenderer.getGL();\n\n  var pixelRatio = frameState.pixelRatio;\n  var viewState = frameState.viewState;\n  var viewCenter = viewState.center;\n  var viewResolution = viewState.resolution;\n  var viewRotation = viewState.rotation;\n\n  var image = this.image_;\n  var texture = this.texture;\n  var imageLayer = /** @type {ol.layer.Image} */ (this.getLayer());\n  var imageSource = imageLayer.getSource();\n\n  var hints = frameState.viewHints;\n\n  var renderedExtent = frameState.extent;\n  if (layerState.extent !== undefined) {\n    renderedExtent = ol.extent.getIntersection(\n        renderedExtent, layerState.extent);\n  }\n  if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING] &&\n      !ol.extent.isEmpty(renderedExtent)) {\n    var projection = viewState.projection;\n    if (!ol.ENABLE_RASTER_REPROJECTION) {\n      var sourceProjection = imageSource.getProjection();\n      if (sourceProjection) {\n        projection = sourceProjection;\n      }\n    }\n    var image_ = imageSource.getImage(renderedExtent, viewResolution,\n        pixelRatio, projection);\n    if (image_) {\n      var loaded = this.loadImage(image_);\n      if (loaded) {\n        image = image_;\n        texture = this.createTexture_(image_);\n        if (this.texture) {\n          /**\n           * @param {WebGLRenderingContext} gl GL.\n           * @param {WebGLTexture} texture Texture.\n           */\n          var postRenderFunction = function(gl, texture) {\n            if (!gl.isContextLost()) {\n              gl.deleteTexture(texture);\n            }\n          }.bind(null, gl, this.texture);\n          frameState.postRenderFunctions.push(\n              /** @type {ol.PostRenderFunction} */ (postRenderFunction)\n          );\n        }\n      }\n    }\n  }\n\n  if (image) {\n    var canvas = this.mapRenderer.getContext().getCanvas();\n\n    this.updateProjectionMatrix_(canvas.width, canvas.height,\n        pixelRatio, viewCenter, viewResolution, viewRotation,\n        image.getExtent());\n    this.hitTransformationMatrix_ = null;\n\n    // Translate and scale to flip the Y coord.\n    var texCoordMatrix = this.texCoordMatrix;\n    ol.transform.reset(texCoordMatrix);\n    ol.transform.scale(texCoordMatrix, 1, -1);\n    ol.transform.translate(texCoordMatrix, 0, -1);\n\n    this.image_ = image;\n    this.texture = texture;\n\n    this.updateLogos(frameState, imageSource);\n  }\n\n  return !!image;\n};\n\n\n/**\n * @param {number} canvasWidth Canvas width.\n * @param {number} canvasHeight Canvas height.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.Coordinate} viewCenter View center.\n * @param {number} viewResolution View resolution.\n * @param {number} viewRotation View rotation.\n * @param {ol.Extent} imageExtent Image extent.\n * @private\n */\nol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvasWidth, canvasHeight, pixelRatio,\n    viewCenter, viewResolution, viewRotation, imageExtent) {\n\n  var canvasExtentWidth = canvasWidth * viewResolution;\n  var canvasExtentHeight = canvasHeight * viewResolution;\n\n  var projectionMatrix = this.projectionMatrix;\n  ol.transform.reset(projectionMatrix);\n  ol.transform.scale(projectionMatrix,\n      pixelRatio * 2 / canvasExtentWidth,\n      pixelRatio * 2 / canvasExtentHeight);\n  ol.transform.rotate(projectionMatrix, -viewRotation);\n  ol.transform.translate(projectionMatrix,\n      imageExtent[0] - viewCenter[0],\n      imageExtent[1] - viewCenter[1]);\n  ol.transform.scale(projectionMatrix,\n      (imageExtent[2] - imageExtent[0]) / 2,\n      (imageExtent[3] - imageExtent[1]) / 2);\n  ol.transform.translate(projectionMatrix, 1, 1);\n\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.ImageLayer.prototype.hasFeatureAtCoordinate = function(coordinate, frameState) {\n  var hasFeature = this.forEachFeatureAtCoordinate(\n      coordinate, frameState, 0, ol.functions.TRUE, this);\n  return hasFeature !== undefined;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {\n  if (!this.image_ || !this.image_.getImage()) {\n    return undefined;\n  }\n\n  if (this.getLayer().getSource().forEachFeatureAtCoordinate !== ol.nullFunction) {\n    // for ImageCanvas sources use the original hit-detection logic,\n    // so that for example also transparent polygons are detected\n    var coordinate = ol.transform.apply(\n        frameState.pixelToCoordinateTransform, pixel.slice());\n    var hasFeature = this.forEachFeatureAtCoordinate(\n        coordinate, frameState, 0, ol.functions.TRUE, this);\n\n    if (hasFeature) {\n      return callback.call(thisArg, this.getLayer(), null);\n    } else {\n      return undefined;\n    }\n  } else {\n    var imageSize =\n        [this.image_.getImage().width, this.image_.getImage().height];\n\n    if (!this.hitTransformationMatrix_) {\n      this.hitTransformationMatrix_ = this.getHitTransformationMatrix_(\n          frameState.size, imageSize);\n    }\n\n    var pixelOnFrameBuffer = ol.transform.apply(\n        this.hitTransformationMatrix_, pixel.slice());\n\n    if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||\n        pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {\n      // outside the image, no need to check\n      return undefined;\n    }\n\n    if (!this.hitCanvasContext_) {\n      this.hitCanvasContext_ = ol.dom.createCanvasContext2D(1, 1);\n    }\n\n    this.hitCanvasContext_.clearRect(0, 0, 1, 1);\n    this.hitCanvasContext_.drawImage(this.image_.getImage(),\n        pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1, 0, 0, 1, 1);\n\n    var imageData = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;\n    if (imageData[3] > 0) {\n      return callback.call(thisArg, this.getLayer(),  imageData);\n    } else {\n      return undefined;\n    }\n  }\n};\n\n\n/**\n * The transformation matrix to get the pixel on the image for a\n * pixel on the map.\n * @param {ol.Size} mapSize The map size.\n * @param {ol.Size} imageSize The image size.\n * @return {ol.Transform} The transformation matrix.\n * @private\n */\nol.renderer.webgl.ImageLayer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {\n  // the first matrix takes a map pixel, flips the y-axis and scales to\n  // a range between -1 ... 1\n  var mapCoordTransform = ol.transform.create();\n  ol.transform.translate(mapCoordTransform, -1, -1);\n  ol.transform.scale(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);\n  ol.transform.translate(mapCoordTransform, 0, mapSize[1]);\n  ol.transform.scale(mapCoordTransform, 1, -1);\n\n  // the second matrix is the inverse of the projection matrix used in the\n  // shader for drawing\n  var projectionMatrixInv = ol.transform.invert(this.projectionMatrix.slice());\n\n  // the third matrix scales to the image dimensions and flips the y-axis again\n  var transform = ol.transform.create();\n  ol.transform.translate(transform, 0, imageSize[1]);\n  ol.transform.scale(transform, 1, -1);\n  ol.transform.scale(transform, imageSize[0] / 2, imageSize[1] / 2);\n  ol.transform.translate(transform, 1, 1);\n\n  ol.transform.multiply(transform, projectionMatrixInv);\n  ol.transform.multiply(transform, mapCoordTransform);\n\n  return transform;\n};\n\n// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)\n\ngoog.provide('ol.renderer.webgl.Map');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.css');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.has');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.render.Event');\ngoog.require('ol.render.EventType');\ngoog.require('ol.render.webgl.Immediate');\ngoog.require('ol.renderer.Map');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.source.State');\ngoog.require('ol.structs.LRUCache');\ngoog.require('ol.structs.PriorityQueue');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Context');\ngoog.require('ol.webgl.ContextEventType');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.Map}\n * @param {Element} container Container.\n * @param {ol.PluggableMap} map Map.\n * @api\n */\nol.renderer.webgl.Map = function(container, map) {\n  ol.renderer.Map.call(this, container, map);\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = /** @type {HTMLCanvasElement} */\n    (document.createElement('CANVAS'));\n  this.canvas_.style.width = '100%';\n  this.canvas_.style.height = '100%';\n  this.canvas_.style.display = 'block';\n  this.canvas_.className = ol.css.CLASS_UNSELECTABLE;\n  container.insertBefore(this.canvas_, container.childNodes[0] || null);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.clipTileCanvasWidth_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.clipTileCanvasHeight_ = 0;\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.clipTileContext_ = ol.dom.createCanvasContext2D();\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderedVisible_ = true;\n\n  /**\n   * @private\n   * @type {WebGLRenderingContext}\n   */\n  this.gl_ = ol.webgl.getContext(this.canvas_, {\n    antialias: true,\n    depth: true,\n    failIfMajorPerformanceCaveat: true,\n    preserveDrawingBuffer: false,\n    stencil: true\n  });\n\n  /**\n   * @private\n   * @type {ol.webgl.Context}\n   */\n  this.context_ = new ol.webgl.Context(this.canvas_, this.gl_);\n\n  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.LOST,\n      this.handleWebGLContextLost, this);\n  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.RESTORED,\n      this.handleWebGLContextRestored, this);\n\n  /**\n   * @private\n   * @type {ol.structs.LRUCache.<ol.WebglTextureCacheEntry|null>}\n   */\n  this.textureCache_ = new ol.structs.LRUCache();\n\n  /**\n   * @private\n   * @type {ol.Coordinate}\n   */\n  this.focus_ = null;\n\n  /**\n   * @private\n   * @type {ol.structs.PriorityQueue.<Array>}\n   */\n  this.tileTextureQueue_ = new ol.structs.PriorityQueue(\n      /**\n       * @param {Array.<*>} element Element.\n       * @return {number} Priority.\n       * @this {ol.renderer.webgl.Map}\n       */\n      (function(element) {\n        var tileCenter = /** @type {ol.Coordinate} */ (element[1]);\n        var tileResolution = /** @type {number} */ (element[2]);\n        var deltaX = tileCenter[0] - this.focus_[0];\n        var deltaY = tileCenter[1] - this.focus_[1];\n        return 65536 * Math.log(tileResolution) +\n            Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;\n      }).bind(this),\n      /**\n       * @param {Array.<*>} element Element.\n       * @return {string} Key.\n       */\n      function(element) {\n        return /** @type {ol.Tile} */ (element[0]).getKey();\n      });\n\n\n  /**\n   * @param {ol.PluggableMap} map Map.\n   * @param {?olx.FrameState} frameState Frame state.\n   * @return {boolean} false.\n   * @this {ol.renderer.webgl.Map}\n   */\n  this.loadNextTileTexture_ =\n      function(map, frameState) {\n        if (!this.tileTextureQueue_.isEmpty()) {\n          this.tileTextureQueue_.reprioritize();\n          var element = this.tileTextureQueue_.dequeue();\n          var tile = /** @type {ol.Tile} */ (element[0]);\n          var tileSize = /** @type {ol.Size} */ (element[3]);\n          var tileGutter = /** @type {number} */ (element[4]);\n          this.bindTileTexture(\n              tile, tileSize, tileGutter, ol.webgl.LINEAR, ol.webgl.LINEAR);\n        }\n        return false;\n      }.bind(this);\n\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.textureCacheFrameMarkerCount_ = 0;\n\n  this.initializeGL_();\n};\nol.inherits(ol.renderer.webgl.Map, ol.renderer.Map);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.webgl.Map['handles'] = function(type) {\n  return ol.has.WEBGL && type === ol.renderer.Type.WEBGL;\n};\n\n\n/**\n * Create the map renderer.\n * @param {Element} container Container.\n * @param {ol.PluggableMap} map Map.\n * @return {ol.renderer.webgl.Map} The map renderer.\n */\nol.renderer.webgl.Map['create'] = function(container, map) {\n  return new ol.renderer.webgl.Map(container, map);\n};\n\n\n/**\n * @param {ol.Tile} tile Tile.\n * @param {ol.Size} tileSize Tile size.\n * @param {number} tileGutter Tile gutter.\n * @param {number} magFilter Mag filter.\n * @param {number} minFilter Min filter.\n */\nol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, tileSize, tileGutter, magFilter, minFilter) {\n  var gl = this.getGL();\n  var tileKey = tile.getKey();\n  if (this.textureCache_.containsKey(tileKey)) {\n    var textureCacheEntry = this.textureCache_.get(tileKey);\n    gl.bindTexture(ol.webgl.TEXTURE_2D, textureCacheEntry.texture);\n    if (textureCacheEntry.magFilter != magFilter) {\n      gl.texParameteri(\n          ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MAG_FILTER, magFilter);\n      textureCacheEntry.magFilter = magFilter;\n    }\n    if (textureCacheEntry.minFilter != minFilter) {\n      gl.texParameteri(\n          ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MIN_FILTER, minFilter);\n      textureCacheEntry.minFilter = minFilter;\n    }\n  } else {\n    var texture = gl.createTexture();\n    gl.bindTexture(ol.webgl.TEXTURE_2D, texture);\n    if (tileGutter > 0) {\n      var clipTileCanvas = this.clipTileContext_.canvas;\n      var clipTileContext = this.clipTileContext_;\n      if (this.clipTileCanvasWidth_ !== tileSize[0] ||\n          this.clipTileCanvasHeight_ !== tileSize[1]) {\n        clipTileCanvas.width = tileSize[0];\n        clipTileCanvas.height = tileSize[1];\n        this.clipTileCanvasWidth_ = tileSize[0];\n        this.clipTileCanvasHeight_ = tileSize[1];\n      } else {\n        clipTileContext.clearRect(0, 0, tileSize[0], tileSize[1]);\n      }\n      clipTileContext.drawImage(tile.getImage(), tileGutter, tileGutter,\n          tileSize[0], tileSize[1], 0, 0, tileSize[0], tileSize[1]);\n      gl.texImage2D(ol.webgl.TEXTURE_2D, 0,\n          ol.webgl.RGBA, ol.webgl.RGBA,\n          ol.webgl.UNSIGNED_BYTE, clipTileCanvas);\n    } else {\n      gl.texImage2D(ol.webgl.TEXTURE_2D, 0,\n          ol.webgl.RGBA, ol.webgl.RGBA,\n          ol.webgl.UNSIGNED_BYTE, tile.getImage());\n    }\n    gl.texParameteri(\n        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MAG_FILTER, magFilter);\n    gl.texParameteri(\n        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MIN_FILTER, minFilter);\n    gl.texParameteri(ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_S,\n        ol.webgl.CLAMP_TO_EDGE);\n    gl.texParameteri(ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_T,\n        ol.webgl.CLAMP_TO_EDGE);\n    this.textureCache_.set(tileKey, {\n      texture: texture,\n      magFilter: magFilter,\n      minFilter: minFilter\n    });\n  }\n};\n\n\n/**\n * @param {ol.render.EventType} type Event type.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {\n  var map = this.getMap();\n  if (map.hasListener(type)) {\n    var context = this.context_;\n\n    var extent = frameState.extent;\n    var size = frameState.size;\n    var viewState = frameState.viewState;\n    var pixelRatio = frameState.pixelRatio;\n\n    var resolution = viewState.resolution;\n    var center = viewState.center;\n    var rotation = viewState.rotation;\n\n    var vectorContext = new ol.render.webgl.Immediate(context,\n        center, resolution, rotation, size, extent, pixelRatio);\n    var composeEvent = new ol.render.Event(type, vectorContext,\n        frameState, null, context);\n    map.dispatchEvent(composeEvent);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.disposeInternal = function() {\n  var gl = this.getGL();\n  if (!gl.isContextLost()) {\n    this.textureCache_.forEach(\n        /**\n         * @param {?ol.WebglTextureCacheEntry} textureCacheEntry\n         *     Texture cache entry.\n         */\n        function(textureCacheEntry) {\n          if (textureCacheEntry) {\n            gl.deleteTexture(textureCacheEntry.texture);\n          }\n        });\n  }\n  this.context_.dispose();\n  ol.renderer.Map.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @param {ol.PluggableMap} map Map.\n * @param {olx.FrameState} frameState Frame state.\n * @private\n */\nol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) {\n  var gl = this.getGL();\n  var textureCacheEntry;\n  while (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ >\n      ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {\n    textureCacheEntry = this.textureCache_.peekLast();\n    if (!textureCacheEntry) {\n      if (+this.textureCache_.peekLastKey() == frameState.index) {\n        break;\n      } else {\n        --this.textureCacheFrameMarkerCount_;\n      }\n    } else {\n      gl.deleteTexture(textureCacheEntry.texture);\n    }\n    this.textureCache_.pop();\n  }\n};\n\n\n/**\n * @return {ol.webgl.Context} The context.\n */\nol.renderer.webgl.Map.prototype.getContext = function() {\n  return this.context_;\n};\n\n\n/**\n * @return {WebGLRenderingContext} GL.\n */\nol.renderer.webgl.Map.prototype.getGL = function() {\n  return this.gl_;\n};\n\n\n/**\n * @return {ol.structs.PriorityQueue.<Array>} Tile texture queue.\n */\nol.renderer.webgl.Map.prototype.getTileTextureQueue = function() {\n  return this.tileTextureQueue_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.getType = function() {\n  return ol.renderer.Type.WEBGL;\n};\n\n\n/**\n * @param {ol.events.Event} event Event.\n * @protected\n */\nol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {\n  event.preventDefault();\n  this.textureCache_.clear();\n  this.textureCacheFrameMarkerCount_ = 0;\n\n  var renderers = this.getLayerRenderers();\n  for (var id in renderers) {\n    var renderer = /** @type {ol.renderer.webgl.Layer} */ (renderers[id]);\n    renderer.handleWebGLContextLost();\n  }\n};\n\n\n/**\n * @protected\n */\nol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() {\n  this.initializeGL_();\n  this.getMap().render();\n};\n\n\n/**\n * @private\n */\nol.renderer.webgl.Map.prototype.initializeGL_ = function() {\n  var gl = this.gl_;\n  gl.activeTexture(ol.webgl.TEXTURE0);\n  gl.blendFuncSeparate(\n      ol.webgl.SRC_ALPHA, ol.webgl.ONE_MINUS_SRC_ALPHA,\n      ol.webgl.ONE, ol.webgl.ONE_MINUS_SRC_ALPHA);\n  gl.disable(ol.webgl.CULL_FACE);\n  gl.disable(ol.webgl.DEPTH_TEST);\n  gl.disable(ol.webgl.SCISSOR_TEST);\n  gl.disable(ol.webgl.STENCIL_TEST);\n};\n\n\n/**\n * @param {ol.Tile} tile Tile.\n * @return {boolean} Is tile texture loaded.\n */\nol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) {\n  return this.textureCache_.containsKey(tile.getKey());\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {\n\n  var context = this.getContext();\n  var gl = this.getGL();\n\n  if (gl.isContextLost()) {\n    return false;\n  }\n\n  if (!frameState) {\n    if (this.renderedVisible_) {\n      this.canvas_.style.display = 'none';\n      this.renderedVisible_ = false;\n    }\n    return false;\n  }\n\n  this.focus_ = frameState.focus;\n\n  this.textureCache_.set((-frameState.index).toString(), null);\n  ++this.textureCacheFrameMarkerCount_;\n\n  this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);\n\n  /** @type {Array.<ol.LayerState>} */\n  var layerStatesToDraw = [];\n  var layerStatesArray = frameState.layerStatesArray;\n  ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);\n\n  var viewResolution = frameState.viewState.resolution;\n  var i, ii, layerRenderer, layerState;\n  for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n    layerState = layerStatesArray[i];\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&\n        layerState.sourceState == ol.source.State.READY) {\n      layerRenderer = /** @type {ol.renderer.webgl.Layer} */ (this.getLayerRenderer(layerState.layer));\n      if (layerRenderer.prepareFrame(frameState, layerState, context)) {\n        layerStatesToDraw.push(layerState);\n      }\n    }\n  }\n\n  var width = frameState.size[0] * frameState.pixelRatio;\n  var height = frameState.size[1] * frameState.pixelRatio;\n  if (this.canvas_.width != width || this.canvas_.height != height) {\n    this.canvas_.width = width;\n    this.canvas_.height = height;\n  }\n\n  gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, null);\n\n  gl.clearColor(0, 0, 0, 0);\n  gl.clear(ol.webgl.COLOR_BUFFER_BIT);\n  gl.enable(ol.webgl.BLEND);\n  gl.viewport(0, 0, this.canvas_.width, this.canvas_.height);\n\n  for (i = 0, ii = layerStatesToDraw.length; i < ii; ++i) {\n    layerState = layerStatesToDraw[i];\n    layerRenderer = /** @type {ol.renderer.webgl.Layer} */ (this.getLayerRenderer(layerState.layer));\n    layerRenderer.composeFrame(frameState, layerState, context);\n  }\n\n  if (!this.renderedVisible_) {\n    this.canvas_.style.display = '';\n    this.renderedVisible_ = true;\n  }\n\n  this.calculateMatrices2D(frameState);\n\n  if (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ >\n      ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {\n    frameState.postRenderFunctions.push(\n        /** @type {ol.PostRenderFunction} */ (this.expireCache_.bind(this))\n    );\n  }\n\n  if (!this.tileTextureQueue_.isEmpty()) {\n    frameState.postRenderFunctions.push(this.loadNextTileTexture_);\n    frameState.animate = true;\n  }\n\n  this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState);\n\n  this.scheduleRemoveUnusedLayerRenderers(frameState);\n  this.scheduleExpireIconCache(frameState);\n\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg,\n    layerFilter, thisArg2) {\n  var result;\n\n  if (this.getGL().isContextLost()) {\n    return false;\n  }\n\n  var viewState = frameState.viewState;\n\n  var layerStates = frameState.layerStatesArray;\n  var numLayers = layerStates.length;\n  var i;\n  for (i = numLayers - 1; i >= 0; --i) {\n    var layerState = layerStates[i];\n    var layer = layerState.layer;\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&\n        layerFilter.call(thisArg2, layer)) {\n      var layerRenderer = this.getLayerRenderer(layer);\n      result = layerRenderer.forEachFeatureAtCoordinate(\n          coordinate, frameState, hitTolerance, callback, thisArg);\n      if (result) {\n        return result;\n      }\n    }\n  }\n  return undefined;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.hasFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, layerFilter, thisArg) {\n  var hasFeature = false;\n\n  if (this.getGL().isContextLost()) {\n    return false;\n  }\n\n  var viewState = frameState.viewState;\n\n  var layerStates = frameState.layerStatesArray;\n  var numLayers = layerStates.length;\n  var i;\n  for (i = numLayers - 1; i >= 0; --i) {\n    var layerState = layerStates[i];\n    var layer = layerState.layer;\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&\n        layerFilter.call(thisArg, layer)) {\n      var layerRenderer = this.getLayerRenderer(layer);\n      hasFeature =\n          layerRenderer.hasFeatureAtCoordinate(coordinate, frameState);\n      if (hasFeature) {\n        return true;\n      }\n    }\n  }\n  return hasFeature;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.Map.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg,\n    layerFilter, thisArg2) {\n  if (this.getGL().isContextLost()) {\n    return false;\n  }\n\n  var viewState = frameState.viewState;\n  var result;\n\n  var layerStates = frameState.layerStatesArray;\n  var numLayers = layerStates.length;\n  var i;\n  for (i = numLayers - 1; i >= 0; --i) {\n    var layerState = layerStates[i];\n    var layer = layerState.layer;\n    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&\n        layerFilter.call(thisArg, layer)) {\n      var layerRenderer = /** @type {ol.renderer.webgl.Layer} */ (this.getLayerRenderer(layer));\n      result = layerRenderer.forEachLayerAtPixel(\n          pixel, frameState, callback, thisArg);\n      if (result) {\n        return result;\n      }\n    }\n  }\n  return undefined;\n};\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.renderer.webgl.tilelayershader');\n\ngoog.require('ol');\ngoog.require('ol.webgl.Fragment');\ngoog.require('ol.webgl.Vertex');\n\n\nol.renderer.webgl.tilelayershader.fragment = new ol.webgl.Fragment(ol.DEBUG_WEBGL ?\n  'precision mediump float;\\nvarying vec2 v_texCoord;\\n\\n\\nuniform sampler2D u_texture;\\n\\nvoid main(void) {\\n  gl_FragColor = texture2D(u_texture, v_texCoord);\\n}\\n' :\n  'precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}');\n\nol.renderer.webgl.tilelayershader.vertex = new ol.webgl.Vertex(ol.DEBUG_WEBGL ?\n  'varying vec2 v_texCoord;\\n\\n\\nattribute vec2 a_position;\\nattribute vec2 a_texCoord;\\nuniform vec4 u_tileOffset;\\n\\nvoid main(void) {\\n  gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\\n  v_texCoord = a_texCoord;\\n}\\n\\n\\n' :\n  'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}');\n\n// This file is automatically generated, do not edit\ngoog.provide('ol.renderer.webgl.tilelayershader.Locations');\n\ngoog.require('ol');\n\n\n/**\n * @constructor\n * @param {WebGLRenderingContext} gl GL.\n * @param {WebGLProgram} program Program.\n * @struct\n */\nol.renderer.webgl.tilelayershader.Locations = function(gl, program) {\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_tileOffset = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_tileOffset' : 'd');\n\n  /**\n   * @type {WebGLUniformLocation}\n   */\n  this.u_texture = gl.getUniformLocation(\n      program, ol.DEBUG_WEBGL ? 'u_texture' : 'e');\n\n  /**\n   * @type {number}\n   */\n  this.a_position = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_position' : 'b');\n\n  /**\n   * @type {number}\n   */\n  this.a_texCoord = gl.getAttribLocation(\n      program, ol.DEBUG_WEBGL ? 'a_texCoord' : 'c');\n};\n\n// FIXME large resolutions lead to too large framebuffers :-(\n// FIXME animated shaders! check in redraw\n\ngoog.provide('ol.renderer.webgl.TileLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.TileRange');\ngoog.require('ol.TileState');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.webgl.Layer');\ngoog.require('ol.renderer.webgl.tilelayershader');\ngoog.require('ol.renderer.webgl.tilelayershader.Locations');\ngoog.require('ol.size');\ngoog.require('ol.transform');\ngoog.require('ol.webgl');\ngoog.require('ol.webgl.Buffer');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.webgl.Layer}\n * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.\n * @param {ol.layer.Tile} tileLayer Tile layer.\n * @api\n */\nol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {\n\n  ol.renderer.webgl.Layer.call(this, mapRenderer, tileLayer);\n\n  /**\n   * @private\n   * @type {ol.webgl.Fragment}\n   */\n  this.fragmentShader_ = ol.renderer.webgl.tilelayershader.fragment;\n\n  /**\n   * @private\n   * @type {ol.webgl.Vertex}\n   */\n  this.vertexShader_ = ol.renderer.webgl.tilelayershader.vertex;\n\n  /**\n   * @private\n   * @type {ol.renderer.webgl.tilelayershader.Locations}\n   */\n  this.locations_ = null;\n\n  /**\n   * @private\n   * @type {ol.webgl.Buffer}\n   */\n  this.renderArrayBuffer_ = new ol.webgl.Buffer([\n    0, 0, 0, 1,\n    1, 0, 1, 1,\n    0, 1, 0, 0,\n    1, 1, 1, 0\n  ]);\n\n  /**\n   * @private\n   * @type {ol.TileRange}\n   */\n  this.renderedTileRange_ = null;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.renderedFramebufferExtent_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = -1;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.tmpSize_ = [0, 0];\n\n};\nol.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.webgl.TileLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.WEBGL && layer.getType() === ol.LayerType.TILE;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.webgl.TileLayer} The layer renderer.\n */\nol.renderer.webgl.TileLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.webgl.TileLayer(\n      /** @type {ol.renderer.webgl.Map} */ (mapRenderer),\n      /** @type {ol.layer.Tile} */ (layer)\n  );\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {\n  var context = this.mapRenderer.getContext();\n  context.deleteBuffer(this.renderArrayBuffer_);\n  ol.renderer.webgl.Layer.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.TileLayer.prototype.createLoadedTileFinder = function(source, projection, tiles) {\n  var mapRenderer = this.mapRenderer;\n\n  return (\n    /**\n     * @param {number} zoom Zoom level.\n     * @param {ol.TileRange} tileRange Tile range.\n     * @return {boolean} The tile range is fully loaded.\n     */\n    function(zoom, tileRange) {\n      function callback(tile) {\n        var loaded = mapRenderer.isTileTextureLoaded(tile);\n        if (loaded) {\n          if (!tiles[zoom]) {\n            tiles[zoom] = {};\n          }\n          tiles[zoom][tile.tileCoord.toString()] = tile;\n        }\n        return loaded;\n      }\n      return source.forEachLoadedTile(projection, zoom, tileRange, callback);\n    });\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() {\n  ol.renderer.webgl.Layer.prototype.handleWebGLContextLost.call(this);\n  this.locations_ = null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerState, context) {\n\n  var mapRenderer = this.mapRenderer;\n  var gl = context.getGL();\n\n  var viewState = frameState.viewState;\n  var projection = viewState.projection;\n\n  var tileLayer = /** @type {ol.layer.Tile} */ (this.getLayer());\n  var tileSource = tileLayer.getSource();\n  var tileGrid = tileSource.getTileGridForProjection(projection);\n  var z = tileGrid.getZForResolution(viewState.resolution);\n  var tileResolution = tileGrid.getResolution(z);\n\n  var tilePixelSize =\n      tileSource.getTilePixelSize(z, frameState.pixelRatio, projection);\n  var pixelRatio = tilePixelSize[0] /\n      ol.size.toSize(tileGrid.getTileSize(z), this.tmpSize_)[0];\n  var tilePixelResolution = tileResolution / pixelRatio;\n  var tileGutter = tileSource.getTilePixelRatio(pixelRatio) * tileSource.getGutter(projection);\n\n  var center = viewState.center;\n  var extent = frameState.extent;\n  var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n\n  var framebufferExtent;\n  if (this.renderedTileRange_ &&\n      this.renderedTileRange_.equals(tileRange) &&\n      this.renderedRevision_ == tileSource.getRevision()) {\n    framebufferExtent = this.renderedFramebufferExtent_;\n  } else {\n\n    var tileRangeSize = tileRange.getSize();\n\n    var maxDimension = Math.max(\n        tileRangeSize[0] * tilePixelSize[0],\n        tileRangeSize[1] * tilePixelSize[1]);\n    var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension);\n    var framebufferExtentDimension = tilePixelResolution * framebufferDimension;\n    var origin = tileGrid.getOrigin(z);\n    var minX = origin[0] +\n        tileRange.minX * tilePixelSize[0] * tilePixelResolution;\n    var minY = origin[1] +\n        tileRange.minY * tilePixelSize[1] * tilePixelResolution;\n    framebufferExtent = [\n      minX, minY,\n      minX + framebufferExtentDimension, minY + framebufferExtentDimension\n    ];\n\n    this.bindFramebuffer(frameState, framebufferDimension);\n    gl.viewport(0, 0, framebufferDimension, framebufferDimension);\n\n    gl.clearColor(0, 0, 0, 0);\n    gl.clear(ol.webgl.COLOR_BUFFER_BIT);\n    gl.disable(ol.webgl.BLEND);\n\n    var program = context.getProgram(this.fragmentShader_, this.vertexShader_);\n    context.useProgram(program);\n    if (!this.locations_) {\n      this.locations_ = new ol.renderer.webgl.tilelayershader.Locations(gl, program);\n    }\n\n    context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.renderArrayBuffer_);\n    gl.enableVertexAttribArray(this.locations_.a_position);\n    gl.vertexAttribPointer(\n        this.locations_.a_position, 2, ol.webgl.FLOAT, false, 16, 0);\n    gl.enableVertexAttribArray(this.locations_.a_texCoord);\n    gl.vertexAttribPointer(\n        this.locations_.a_texCoord, 2, ol.webgl.FLOAT, false, 16, 8);\n    gl.uniform1i(this.locations_.u_texture, 0);\n\n    /**\n     * @type {Object.<number, Object.<string, ol.Tile>>}\n     */\n    var tilesToDrawByZ = {};\n    tilesToDrawByZ[z] = {};\n\n    var findLoadedTiles = this.createLoadedTileFinder(\n        tileSource, projection, tilesToDrawByZ);\n\n    var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();\n    var allTilesLoaded = true;\n    var tmpExtent = ol.extent.createEmpty();\n    var tmpTileRange = new ol.TileRange(0, 0, 0, 0);\n    var childTileRange, drawable, fullyLoaded, tile, tileState;\n    var x, y, tileExtent;\n    for (x = tileRange.minX; x <= tileRange.maxX; ++x) {\n      for (y = tileRange.minY; y <= tileRange.maxY; ++y) {\n\n        tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n        if (layerState.extent !== undefined) {\n          // ignore tiles outside layer extent\n          tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);\n          if (!ol.extent.intersects(tileExtent, layerState.extent)) {\n            continue;\n          }\n        }\n        tileState = tile.getState();\n        drawable = tileState == ol.TileState.LOADED ||\n            tileState == ol.TileState.EMPTY ||\n            tileState == ol.TileState.ERROR && !useInterimTilesOnError;\n        if (!drawable) {\n          tile = tile.getInterimTile();\n        }\n        tileState = tile.getState();\n        if (tileState == ol.TileState.LOADED) {\n          if (mapRenderer.isTileTextureLoaded(tile)) {\n            tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;\n            continue;\n          }\n        } else if (tileState == ol.TileState.EMPTY ||\n                   (tileState == ol.TileState.ERROR &&\n                    !useInterimTilesOnError)) {\n          continue;\n        }\n\n        allTilesLoaded = false;\n        fullyLoaded = tileGrid.forEachTileCoordParentTileRange(\n            tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);\n        if (!fullyLoaded) {\n          childTileRange = tileGrid.getTileCoordChildTileRange(\n              tile.tileCoord, tmpTileRange, tmpExtent);\n          if (childTileRange) {\n            findLoadedTiles(z + 1, childTileRange);\n          }\n        }\n\n      }\n\n    }\n\n    /** @type {Array.<number>} */\n    var zs = Object.keys(tilesToDrawByZ).map(Number);\n    zs.sort(ol.array.numberSafeCompareFunction);\n    var u_tileOffset = new Float32Array(4);\n    var i, ii, tileKey, tilesToDraw;\n    for (i = 0, ii = zs.length; i < ii; ++i) {\n      tilesToDraw = tilesToDrawByZ[zs[i]];\n      for (tileKey in tilesToDraw) {\n        tile = tilesToDraw[tileKey];\n        tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);\n        u_tileOffset[0] = 2 * (tileExtent[2] - tileExtent[0]) /\n            framebufferExtentDimension;\n        u_tileOffset[1] = 2 * (tileExtent[3] - tileExtent[1]) /\n            framebufferExtentDimension;\n        u_tileOffset[2] = 2 * (tileExtent[0] - framebufferExtent[0]) /\n            framebufferExtentDimension - 1;\n        u_tileOffset[3] = 2 * (tileExtent[1] - framebufferExtent[1]) /\n            framebufferExtentDimension - 1;\n        gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);\n        mapRenderer.bindTileTexture(tile, tilePixelSize,\n            tileGutter * pixelRatio, ol.webgl.LINEAR, ol.webgl.LINEAR);\n        gl.drawArrays(ol.webgl.TRIANGLE_STRIP, 0, 4);\n      }\n    }\n\n    if (allTilesLoaded) {\n      this.renderedTileRange_ = tileRange;\n      this.renderedFramebufferExtent_ = framebufferExtent;\n      this.renderedRevision_ = tileSource.getRevision();\n    } else {\n      this.renderedTileRange_ = null;\n      this.renderedFramebufferExtent_ = null;\n      this.renderedRevision_ = -1;\n      frameState.animate = true;\n    }\n\n  }\n\n  this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);\n  var tileTextureQueue = mapRenderer.getTileTextureQueue();\n  this.manageTilePyramid(\n      frameState, tileSource, tileGrid, pixelRatio, projection, extent, z,\n      tileLayer.getPreload(),\n      /**\n       * @param {ol.Tile} tile Tile.\n       */\n      function(tile) {\n        if (tile.getState() == ol.TileState.LOADED &&\n            !mapRenderer.isTileTextureLoaded(tile) &&\n            !tileTextureQueue.isKeyQueued(tile.getKey())) {\n          tileTextureQueue.enqueue([\n            tile,\n            tileGrid.getTileCoordCenter(tile.tileCoord),\n            tileGrid.getResolution(tile.tileCoord[0]),\n            tilePixelSize, tileGutter * pixelRatio\n          ]);\n        }\n      }, this);\n  this.scheduleExpireCache(frameState, tileSource);\n  this.updateLogos(frameState, tileSource);\n\n  var texCoordMatrix = this.texCoordMatrix;\n  ol.transform.reset(texCoordMatrix);\n  ol.transform.translate(texCoordMatrix,\n      (Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) /\n          (framebufferExtent[2] - framebufferExtent[0]),\n      (Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) /\n          (framebufferExtent[3] - framebufferExtent[1]));\n  if (viewState.rotation !== 0) {\n    ol.transform.rotate(texCoordMatrix, viewState.rotation);\n  }\n  ol.transform.scale(texCoordMatrix,\n      frameState.size[0] * viewState.resolution /\n          (framebufferExtent[2] - framebufferExtent[0]),\n      frameState.size[1] * viewState.resolution /\n          (framebufferExtent[3] - framebufferExtent[1]));\n  ol.transform.translate(texCoordMatrix, -0.5, -0.5);\n\n  return true;\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {\n  if (!this.framebuffer) {\n    return undefined;\n  }\n\n  var pixelOnMapScaled = [\n    pixel[0] / frameState.size[0],\n    (frameState.size[1] - pixel[1]) / frameState.size[1]];\n\n  var pixelOnFrameBufferScaled = ol.transform.apply(\n      this.texCoordMatrix, pixelOnMapScaled.slice());\n  var pixelOnFrameBuffer = [\n    pixelOnFrameBufferScaled[0] * this.framebufferDimension,\n    pixelOnFrameBufferScaled[1] * this.framebufferDimension];\n\n  var gl = this.mapRenderer.getContext().getGL();\n  gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);\n  var imageData = new Uint8Array(4);\n  gl.readPixels(pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1,\n      gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n\n  if (imageData[3] > 0) {\n    return callback.call(thisArg, this.getLayer(), imageData);\n  } else {\n    return undefined;\n  }\n};\n\ngoog.provide('ol.renderer.webgl.VectorLayer');\n\ngoog.require('ol');\ngoog.require('ol.LayerType');\ngoog.require('ol.ViewHint');\ngoog.require('ol.extent');\ngoog.require('ol.render.webgl.ReplayGroup');\ngoog.require('ol.renderer.Type');\ngoog.require('ol.renderer.vector');\ngoog.require('ol.renderer.webgl.Layer');\ngoog.require('ol.transform');\n\n\n/**\n * @constructor\n * @extends {ol.renderer.webgl.Layer}\n * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.\n * @param {ol.layer.Vector} vectorLayer Vector layer.\n * @api\n */\nol.renderer.webgl.VectorLayer = function(mapRenderer, vectorLayer) {\n\n  ol.renderer.webgl.Layer.call(this, mapRenderer, vectorLayer);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.dirty_ = false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = -1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedResolution_ = NaN;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.renderedExtent_ = ol.extent.createEmpty();\n\n  /**\n   * @private\n   * @type {function(ol.Feature, ol.Feature): number|null}\n   */\n  this.renderedRenderOrder_ = null;\n\n  /**\n   * @private\n   * @type {ol.render.webgl.ReplayGroup}\n   */\n  this.replayGroup_ = null;\n\n  /**\n   * The last layer state.\n   * @private\n   * @type {?ol.LayerState}\n   */\n  this.layerState_ = null;\n\n};\nol.inherits(ol.renderer.webgl.VectorLayer, ol.renderer.webgl.Layer);\n\n\n/**\n * Determine if this renderer handles the provided layer.\n * @param {ol.renderer.Type} type The renderer type.\n * @param {ol.layer.Layer} layer The candidate layer.\n * @return {boolean} The renderer can render the layer.\n */\nol.renderer.webgl.VectorLayer['handles'] = function(type, layer) {\n  return type === ol.renderer.Type.WEBGL && layer.getType() === ol.LayerType.VECTOR;\n};\n\n\n/**\n * Create a layer renderer.\n * @param {ol.renderer.Map} mapRenderer The map renderer.\n * @param {ol.layer.Layer} layer The layer to be rendererd.\n * @return {ol.renderer.webgl.VectorLayer} The layer renderer.\n */\nol.renderer.webgl.VectorLayer['create'] = function(mapRenderer, layer) {\n  return new ol.renderer.webgl.VectorLayer(\n      /** @type {ol.renderer.webgl.Map} */ (mapRenderer),\n      /** @type {ol.layer.Vector} */ (layer)\n  );\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) {\n  this.layerState_ = layerState;\n  var viewState = frameState.viewState;\n  var replayGroup = this.replayGroup_;\n  var size = frameState.size;\n  var pixelRatio = frameState.pixelRatio;\n  var gl = this.mapRenderer.getGL();\n  if (replayGroup && !replayGroup.isEmpty()) {\n    gl.enable(gl.SCISSOR_TEST);\n    gl.scissor(0, 0, size[0] * pixelRatio, size[1] * pixelRatio);\n    replayGroup.replay(context,\n        viewState.center, viewState.resolution, viewState.rotation,\n        size, pixelRatio, layerState.opacity,\n        layerState.managed ? frameState.skippedFeatureUids : {});\n    gl.disable(gl.SCISSOR_TEST);\n  }\n\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.disposeInternal = function() {\n  var replayGroup = this.replayGroup_;\n  if (replayGroup) {\n    var context = this.mapRenderer.getContext();\n    replayGroup.getDeleteResourcesFunction(context)();\n    this.replayGroup_ = null;\n  }\n  ol.renderer.webgl.Layer.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, hitTolerance, callback, thisArg) {\n  if (!this.replayGroup_ || !this.layerState_) {\n    return undefined;\n  } else {\n    var context = this.mapRenderer.getContext();\n    var viewState = frameState.viewState;\n    var layer = this.getLayer();\n    var layerState = this.layerState_;\n    /** @type {Object.<string, boolean>} */\n    var features = {};\n    return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,\n        context, viewState.center, viewState.resolution, viewState.rotation,\n        frameState.size, frameState.pixelRatio, layerState.opacity,\n        {},\n        /**\n         * @param {ol.Feature|ol.render.Feature} feature Feature.\n         * @return {?} Callback result.\n         */\n        function(feature) {\n          var key = ol.getUid(feature).toString();\n          if (!(key in features)) {\n            features[key] = true;\n            return callback.call(thisArg, feature, layer);\n          }\n        });\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = function(coordinate, frameState) {\n  if (!this.replayGroup_ || !this.layerState_) {\n    return false;\n  } else {\n    var context = this.mapRenderer.getContext();\n    var viewState = frameState.viewState;\n    var layerState = this.layerState_;\n    return this.replayGroup_.hasFeatureAtCoordinate(coordinate,\n        context, viewState.center, viewState.resolution, viewState.rotation,\n        frameState.size, frameState.pixelRatio, layerState.opacity,\n        frameState.skippedFeatureUids);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {\n  var coordinate = ol.transform.apply(\n      frameState.pixelToCoordinateTransform, pixel.slice());\n  var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);\n\n  if (hasFeature) {\n    return callback.call(thisArg, this.getLayer(), null);\n  } else {\n    return undefined;\n  }\n};\n\n\n/**\n * Handle changes in image style state.\n * @param {ol.events.Event} event Image style change event.\n * @private\n */\nol.renderer.webgl.VectorLayer.prototype.handleStyleImageChange_ = function(event) {\n  this.renderIfReadyAndVisible();\n};\n\n\n/**\n * @inheritDoc\n */\nol.renderer.webgl.VectorLayer.prototype.prepareFrame = function(frameState, layerState, context) {\n\n  var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());\n  var vectorSource = vectorLayer.getSource();\n\n  this.updateLogos(frameState, vectorSource);\n\n  var animating = frameState.viewHints[ol.ViewHint.ANIMATING];\n  var interacting = frameState.viewHints[ol.ViewHint.INTERACTING];\n  var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n  var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n\n  if (!this.dirty_ && (!updateWhileAnimating && animating) ||\n      (!updateWhileInteracting && interacting)) {\n    return true;\n  }\n\n  var frameStateExtent = frameState.extent;\n  var viewState = frameState.viewState;\n  var projection = viewState.projection;\n  var resolution = viewState.resolution;\n  var pixelRatio = frameState.pixelRatio;\n  var vectorLayerRevision = vectorLayer.getRevision();\n  var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n  var vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n\n  if (vectorLayerRenderOrder === undefined) {\n    vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;\n  }\n\n  var extent = ol.extent.buffer(frameStateExtent,\n      vectorLayerRenderBuffer * resolution);\n\n  if (!this.dirty_ &&\n      this.renderedResolution_ == resolution &&\n      this.renderedRevision_ == vectorLayerRevision &&\n      this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n      ol.extent.containsExtent(this.renderedExtent_, extent)) {\n    return true;\n  }\n\n  if (this.replayGroup_) {\n    frameState.postRenderFunctions.push(\n        this.replayGroup_.getDeleteResourcesFunction(context));\n  }\n\n  this.dirty_ = false;\n\n  var replayGroup = new ol.render.webgl.ReplayGroup(\n      ol.renderer.vector.getTolerance(resolution, pixelRatio),\n      extent, vectorLayer.getRenderBuffer());\n  vectorSource.loadFeatures(extent, resolution, projection);\n  /**\n   * @param {ol.Feature} feature Feature.\n   * @this {ol.renderer.webgl.VectorLayer}\n   */\n  var renderFeature = function(feature) {\n    var styles;\n    var styleFunction = feature.getStyleFunction();\n    if (styleFunction) {\n      styles = styleFunction.call(feature, resolution);\n    } else {\n      styleFunction = vectorLayer.getStyleFunction();\n      if (styleFunction) {\n        styles = styleFunction(feature, resolution);\n      }\n    }\n    if (styles) {\n      var dirty = this.renderFeature(\n          feature, resolution, pixelRatio, styles, replayGroup);\n      this.dirty_ = this.dirty_ || dirty;\n    }\n  };\n  if (vectorLayerRenderOrder) {\n    /** @type {Array.<ol.Feature>} */\n    var features = [];\n    vectorSource.forEachFeatureInExtent(extent,\n        /**\n         * @param {ol.Feature} feature Feature.\n         */\n        function(feature) {\n          features.push(feature);\n        }, this);\n    features.sort(vectorLayerRenderOrder);\n    features.forEach(renderFeature, this);\n  } else {\n    vectorSource.forEachFeatureInExtent(extent, renderFeature, this);\n  }\n  replayGroup.finish(context);\n\n  this.renderedResolution_ = resolution;\n  this.renderedRevision_ = vectorLayerRevision;\n  this.renderedRenderOrder_ = vectorLayerRenderOrder;\n  this.renderedExtent_ = extent;\n  this.replayGroup_ = replayGroup;\n\n  return true;\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of\n *     styles.\n * @param {ol.render.webgl.ReplayGroup} replayGroup Replay group.\n * @return {boolean} `true` if an image is loading.\n */\nol.renderer.webgl.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styles, replayGroup) {\n  if (!styles) {\n    return false;\n  }\n  var loading = false;\n  if (Array.isArray(styles)) {\n    for (var i = styles.length - 1, ii = 0; i >= ii; --i) {\n      loading = ol.renderer.vector.renderFeature(\n          replayGroup, feature, styles[i],\n          ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),\n          this.handleStyleImageChange_, this) || loading;\n    }\n  } else {\n    loading = ol.renderer.vector.renderFeature(\n        replayGroup, feature, styles,\n        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),\n        this.handleStyleImageChange_, this) || loading;\n  }\n  return loading;\n};\n\ngoog.provide('ol.Map');\n\ngoog.require('ol');\ngoog.require('ol.PluggableMap');\ngoog.require('ol.PluginType');\ngoog.require('ol.control');\ngoog.require('ol.interaction');\ngoog.require('ol.obj');\ngoog.require('ol.plugins');\ngoog.require('ol.renderer.canvas.ImageLayer');\ngoog.require('ol.renderer.canvas.Map');\ngoog.require('ol.renderer.canvas.TileLayer');\ngoog.require('ol.renderer.canvas.VectorLayer');\ngoog.require('ol.renderer.canvas.VectorTileLayer');\ngoog.require('ol.renderer.webgl.ImageLayer');\ngoog.require('ol.renderer.webgl.Map');\ngoog.require('ol.renderer.webgl.TileLayer');\ngoog.require('ol.renderer.webgl.VectorLayer');\n\n\nif (ol.ENABLE_CANVAS) {\n  ol.plugins.register(ol.PluginType.MAP_RENDERER, ol.renderer.canvas.Map);\n  ol.plugins.registerMultiple(ol.PluginType.LAYER_RENDERER, [\n    ol.renderer.canvas.ImageLayer,\n    ol.renderer.canvas.TileLayer,\n    ol.renderer.canvas.VectorLayer,\n    ol.renderer.canvas.VectorTileLayer\n  ]);\n}\n\nif (ol.ENABLE_WEBGL) {\n  ol.plugins.register(ol.PluginType.MAP_RENDERER, ol.renderer.webgl.Map);\n  ol.plugins.registerMultiple(ol.PluginType.LAYER_RENDERER, [\n    ol.renderer.webgl.ImageLayer,\n    ol.renderer.webgl.TileLayer,\n    ol.renderer.webgl.VectorLayer\n  ]);\n}\n\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n *     var map = new ol.Map({\n *       view: new ol.View({\n *         center: [0, 0],\n *         zoom: 1\n *       }),\n *       layers: [\n *         new ol.layer.Tile({\n *           source: new ol.source.OSM()\n *         })\n *       ],\n *       target: 'map'\n *     });\n *\n * The above snippet creates a map using a {@link ol.layer.Tile} to display\n * {@link ol.source.OSM} OSM data and render it to a DOM element with the\n * id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link ol.Overlay} for the difference). The map itself is placed in\n * a further element within the viewport.\n *\n * Layers are stored as a `ol.Collection` in layerGroups. A top-level group is\n * provided by the library. This is what is accessed by `getLayerGroup` and\n * `setLayerGroup`. Layers entered in the options are added to this group, and\n * `addLayer` and `removeLayer` change the layer collection in the group.\n * `getLayers` is a convenience function for `getLayerGroup().getLayers()`.\n * Note that `ol.layer.Group` is a subclass of `ol.layer.Base`, so layers\n * entered in the options or added with `addLayer` can be groups, which can\n * contain further groups, and so on.\n *\n * @constructor\n * @extends {ol.PluggableMap}\n * @param {olx.MapOptions} options Map options.\n * @fires ol.MapBrowserEvent\n * @fires ol.MapEvent\n * @fires ol.render.Event#postcompose\n * @fires ol.render.Event#precompose\n * @api\n */\nol.Map = function(options) {\n  options = ol.obj.assign({}, options);\n  if (!options.controls) {\n    options.controls = ol.control.defaults();\n  }\n  if (!options.interactions) {\n    options.interactions = ol.interaction.defaults();\n  }\n\n  ol.PluggableMap.call(this, options);\n};\nol.inherits(ol.Map, ol.PluggableMap);\n\ngoog.provide('ol.net');\n\ngoog.require('ol');\n\n\n/**\n * Simple JSONP helper. Supports error callbacks and a custom callback param.\n * The error callback will be called when no JSONP is executed after 10 seconds.\n *\n * @param {string} url Request url. A 'callback' query parameter will be\n *     appended.\n * @param {Function} callback Callback on success.\n * @param {function()=} opt_errback Callback on error.\n * @param {string=} opt_callbackParam Custom query parameter for the JSONP\n *     callback. Default is 'callback'.\n */\nol.net.jsonp = function(url, callback, opt_errback, opt_callbackParam) {\n  var script = document.createElement('script');\n  var key = 'olc_' + ol.getUid(callback);\n  function cleanup() {\n    delete window[key];\n    script.parentNode.removeChild(script);\n  }\n  script.async = true;\n  script.src = url + (url.indexOf('?') == -1 ? '?' : '&') +\n      (opt_callbackParam || 'callback') + '=' + key;\n  var timer = setTimeout(function() {\n    cleanup();\n    if (opt_errback) {\n      opt_errback();\n    }\n  }, 10000);\n  window[key] = function(data) {\n    clearTimeout(timer);\n    cleanup();\n    callback(data);\n  };\n  document.getElementsByTagName('head')[0].appendChild(script);\n};\n\ngoog.provide('ol.proj.common');\n\ngoog.require('ol.proj');\n\n\n/**\n * Deprecated.  Transforms between EPSG:4326 and EPSG:3857 are now included by\n * default.  There is no need to call this function in application code and it\n * will be removed in a future major release.\n * @deprecated This function is no longer necessary.\n * @api\n */\nol.proj.common.add = ol.proj.addCommon;\n\ngoog.provide('ol.render');\n\ngoog.require('ol.has');\ngoog.require('ol.transform');\ngoog.require('ol.render.canvas.Immediate');\n\n\n/**\n * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries\n * to the context's canvas.\n *\n * The units for geometry coordinates are css pixels relative to the top left\n * corner of the canvas element.\n * ```js\n * var canvas = document.createElement('canvas');\n * var render = ol.render.toContext(canvas.getContext('2d'),\n *     { size: [100, 100] });\n * render.setFillStrokeStyle(new ol.style.Fill({ color: blue }));\n * render.drawPolygon(\n *     new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));\n * ```\n *\n * @param {CanvasRenderingContext2D} context Canvas context.\n * @param {olx.render.ToContextOptions=} opt_options Options.\n * @return {ol.render.canvas.Immediate} Canvas Immediate.\n * @api\n */\nol.render.toContext = function(context, opt_options) {\n  var canvas = context.canvas;\n  var options = opt_options ? opt_options : {};\n  var pixelRatio = options.pixelRatio || ol.has.DEVICE_PIXEL_RATIO;\n  var size = options.size;\n  if (size) {\n    canvas.width = size[0] * pixelRatio;\n    canvas.height = size[1] * pixelRatio;\n    canvas.style.width = size[0] + 'px';\n    canvas.style.height = size[1] + 'px';\n  }\n  var extent = [0, 0, canvas.width, canvas.height];\n  var transform = ol.transform.scale(ol.transform.create(), pixelRatio, pixelRatio);\n  return new ol.render.canvas.Immediate(context, pixelRatio, extent, transform,\n      0);\n};\n\ngoog.provide('ol.reproj');\n\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.proj');\n\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {ol.proj.Projection} sourceProj Source projection.\n * @param {ol.proj.Projection} targetProj Target projection.\n * @param {ol.Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nol.reproj.calculateSourceResolution = function(sourceProj, targetProj,\n    targetCenter, targetResolution) {\n\n  var sourceCenter = ol.proj.transform(targetCenter, targetProj, sourceProj);\n\n  // calculate the ideal resolution of the source data\n  var sourceResolution =\n      ol.proj.getPointResolution(targetProj, targetResolution, targetCenter);\n\n  var targetMetersPerUnit = targetProj.getMetersPerUnit();\n  if (targetMetersPerUnit !== undefined) {\n    sourceResolution *= targetMetersPerUnit;\n  }\n  var sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n  if (sourceMetersPerUnit !== undefined) {\n    sourceResolution /= sourceMetersPerUnit;\n  }\n\n  // Based on the projection properties, the point resolution at the specified\n  // coordinates may be slightly different. We need to reverse-compensate this\n  // in order to achieve optimal results.\n\n  var sourceExtent = sourceProj.getExtent();\n  if (!sourceExtent || ol.extent.containsCoordinate(sourceExtent, sourceCenter)) {\n    var compensationFactor =\n        ol.proj.getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n        sourceResolution;\n    if (isFinite(compensationFactor) && compensationFactor > 0) {\n      sourceResolution /= compensationFactor;\n    }\n  }\n\n  return sourceResolution;\n};\n\n\n/**\n * Enlarge the clipping triangle point by 1 pixel to ensure the edges overlap\n * in order to mask gaps caused by antialiasing.\n *\n * @param {number} centroidX Centroid of the triangle (x coordinate in pixels).\n * @param {number} centroidY Centroid of the triangle (y coordinate in pixels).\n * @param {number} x X coordinate of the point (in pixels).\n * @param {number} y Y coordinate of the point (in pixels).\n * @return {ol.Coordinate} New point 1 px farther from the centroid.\n * @private\n */\nol.reproj.enlargeClipPoint_ = function(centroidX, centroidY, x, y) {\n  var dX = x - centroidX, dY = y - centroidY;\n  var distance = Math.sqrt(dX * dX + dY * dY);\n  return [Math.round(x + dX / distance), Math.round(y + dY / distance)];\n};\n\n\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {ol.Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {ol.Extent} targetExtent Target extent.\n * @param {ol.reproj.Triangulation} triangulation Calculated triangulation.\n * @param {Array.<{extent: ol.Extent,\n *                 image: (HTMLCanvasElement|Image|HTMLVideoElement)}>} sources\n *             Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n * @return {HTMLCanvasElement} Canvas with reprojected data.\n */\nol.reproj.render = function(width, height, pixelRatio,\n    sourceResolution, sourceExtent, targetResolution, targetExtent,\n    triangulation, sources, gutter, opt_renderEdges) {\n\n  var context = ol.dom.createCanvasContext2D(Math.round(pixelRatio * width),\n      Math.round(pixelRatio * height));\n\n  if (sources.length === 0) {\n    return context.canvas;\n  }\n\n  context.scale(pixelRatio, pixelRatio);\n\n  var sourceDataExtent = ol.extent.createEmpty();\n  sources.forEach(function(src, i, arr) {\n    ol.extent.extend(sourceDataExtent, src.extent);\n  });\n\n  var canvasWidthInUnits = ol.extent.getWidth(sourceDataExtent);\n  var canvasHeightInUnits = ol.extent.getHeight(sourceDataExtent);\n  var stitchContext = ol.dom.createCanvasContext2D(\n      Math.round(pixelRatio * canvasWidthInUnits / sourceResolution),\n      Math.round(pixelRatio * canvasHeightInUnits / sourceResolution));\n\n  var stitchScale = pixelRatio / sourceResolution;\n\n  sources.forEach(function(src, i, arr) {\n    var xPos = src.extent[0] - sourceDataExtent[0];\n    var yPos = -(src.extent[3] - sourceDataExtent[3]);\n    var srcWidth = ol.extent.getWidth(src.extent);\n    var srcHeight = ol.extent.getHeight(src.extent);\n\n    stitchContext.drawImage(\n        src.image,\n        gutter, gutter,\n        src.image.width - 2 * gutter, src.image.height - 2 * gutter,\n        xPos * stitchScale, yPos * stitchScale,\n        srcWidth * stitchScale, srcHeight * stitchScale);\n  });\n\n  var targetTopLeft = ol.extent.getTopLeft(targetExtent);\n\n  triangulation.getTriangles().forEach(function(triangle, i, arr) {\n    /* Calculate affine transform (src -> dst)\n     * Resulting matrix can be used to transform coordinate\n     * from `sourceProjection` to destination pixels.\n     *\n     * To optimize number of context calls and increase numerical stability,\n     * we also do the following operations:\n     * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n     * here before solving the linear system so [ui, vi] are pixel coordinates.\n     *\n     * Src points: xi, yi\n     * Dst points: ui, vi\n     * Affine coefficients: aij\n     *\n     * | x0 y0 1  0  0 0 |   |a00|   |u0|\n     * | x1 y1 1  0  0 0 |   |a01|   |u1|\n     * | x2 y2 1  0  0 0 | x |a02| = |u2|\n     * |  0  0 0 x0 y0 1 |   |a10|   |v0|\n     * |  0  0 0 x1 y1 1 |   |a11|   |v1|\n     * |  0  0 0 x2 y2 1 |   |a12|   |v2|\n     */\n    var source = triangle.source, target = triangle.target;\n    var x0 = source[0][0], y0 = source[0][1],\n        x1 = source[1][0], y1 = source[1][1],\n        x2 = source[2][0], y2 = source[2][1];\n    var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution,\n        v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n    var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution,\n        v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n    var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution,\n        v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n    // Shift all the source points to improve numerical stability\n    // of all the subsequent calculations. The [x0, y0] is used here.\n    // This is also used to simplify the linear system.\n    var sourceNumericalShiftX = x0, sourceNumericalShiftY = y0;\n    x0 = 0;\n    y0 = 0;\n    x1 -= sourceNumericalShiftX;\n    y1 -= sourceNumericalShiftY;\n    x2 -= sourceNumericalShiftX;\n    y2 -= sourceNumericalShiftY;\n\n    var augmentedMatrix = [\n      [x1, y1, 0, 0, u1 - u0],\n      [x2, y2, 0, 0, u2 - u0],\n      [0, 0, x1, y1, v1 - v0],\n      [0, 0, x2, y2, v2 - v0]\n    ];\n    var affineCoefs = ol.math.solveLinearSystem(augmentedMatrix);\n    if (!affineCoefs) {\n      return;\n    }\n\n    context.save();\n    context.beginPath();\n    var centroidX = (u0 + u1 + u2) / 3, centroidY = (v0 + v1 + v2) / 3;\n    var p0 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u0, v0);\n    var p1 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u1, v1);\n    var p2 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u2, v2);\n\n    context.moveTo(p1[0], p1[1]);\n    context.lineTo(p0[0], p0[1]);\n    context.lineTo(p2[0], p2[1]);\n    context.clip();\n\n    context.transform(\n        affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);\n\n    context.translate(sourceDataExtent[0] - sourceNumericalShiftX,\n        sourceDataExtent[3] - sourceNumericalShiftY);\n\n    context.scale(sourceResolution / pixelRatio,\n        -sourceResolution / pixelRatio);\n\n    context.drawImage(stitchContext.canvas, 0, 0);\n    context.restore();\n  });\n\n  if (opt_renderEdges) {\n    context.save();\n\n    context.strokeStyle = 'black';\n    context.lineWidth = 1;\n\n    triangulation.getTriangles().forEach(function(triangle, i, arr) {\n      var target = triangle.target;\n      var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution,\n          v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n      var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution,\n          v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n      var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution,\n          v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n      context.beginPath();\n      context.moveTo(u1, v1);\n      context.lineTo(u0, v0);\n      context.lineTo(u2, v2);\n      context.closePath();\n      context.stroke();\n    });\n\n    context.restore();\n  }\n  return context.canvas;\n};\n\ngoog.provide('ol.reproj.Triangulation');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.proj');\n\n\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n *\n * @param {ol.proj.Projection} sourceProj Source projection.\n * @param {ol.proj.Projection} targetProj Target projection.\n * @param {ol.Extent} targetExtent Target extent to triangulate.\n * @param {ol.Extent} maxSourceExtent Maximal source extent that can be used.\n * @param {number} errorThreshold Acceptable error (in source units).\n * @constructor\n */\nol.reproj.Triangulation = function(sourceProj, targetProj, targetExtent,\n    maxSourceExtent, errorThreshold) {\n\n  /**\n   * @type {ol.proj.Projection}\n   * @private\n   */\n  this.sourceProj_ = sourceProj;\n\n  /**\n   * @type {ol.proj.Projection}\n   * @private\n   */\n  this.targetProj_ = targetProj;\n\n  /** @type {!Object.<string, ol.Coordinate>} */\n  var transformInvCache = {};\n  var transformInv = ol.proj.getTransform(this.targetProj_, this.sourceProj_);\n\n  /**\n   * @param {ol.Coordinate} c A coordinate.\n   * @return {ol.Coordinate} Transformed coordinate.\n   * @private\n   */\n  this.transformInv_ = function(c) {\n    var key = c[0] + '/' + c[1];\n    if (!transformInvCache[key]) {\n      transformInvCache[key] = transformInv(c);\n    }\n    return transformInvCache[key];\n  };\n\n  /**\n   * @type {ol.Extent}\n   * @private\n   */\n  this.maxSourceExtent_ = maxSourceExtent;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n\n  /**\n   * @type {Array.<ol.ReprojTriangle>}\n   * @private\n   */\n  this.triangles_ = [];\n\n  /**\n   * Indicates that the triangulation crosses edge of the source projection.\n   * @type {boolean}\n   * @private\n   */\n  this.wrapsXInSource_ = false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this.canWrapXInSource_ = this.sourceProj_.canWrapX() &&\n      !!maxSourceExtent &&\n      !!this.sourceProj_.getExtent() &&\n      (ol.extent.getWidth(maxSourceExtent) ==\n       ol.extent.getWidth(this.sourceProj_.getExtent()));\n\n  /**\n   * @type {?number}\n   * @private\n   */\n  this.sourceWorldWidth_ = this.sourceProj_.getExtent() ?\n    ol.extent.getWidth(this.sourceProj_.getExtent()) : null;\n\n  /**\n   * @type {?number}\n   * @private\n   */\n  this.targetWorldWidth_ = this.targetProj_.getExtent() ?\n    ol.extent.getWidth(this.targetProj_.getExtent()) : null;\n\n  var destinationTopLeft = ol.extent.getTopLeft(targetExtent);\n  var destinationTopRight = ol.extent.getTopRight(targetExtent);\n  var destinationBottomRight = ol.extent.getBottomRight(targetExtent);\n  var destinationBottomLeft = ol.extent.getBottomLeft(targetExtent);\n  var sourceTopLeft = this.transformInv_(destinationTopLeft);\n  var sourceTopRight = this.transformInv_(destinationTopRight);\n  var sourceBottomRight = this.transformInv_(destinationBottomRight);\n  var sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n\n  this.addQuad_(\n      destinationTopLeft, destinationTopRight,\n      destinationBottomRight, destinationBottomLeft,\n      sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft,\n      ol.RASTER_REPROJECTION_MAX_SUBDIVISION);\n\n  if (this.wrapsXInSource_) {\n    var leftBound = Infinity;\n    this.triangles_.forEach(function(triangle, i, arr) {\n      leftBound = Math.min(leftBound,\n          triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);\n    });\n\n    // Shift triangles to be as close to `leftBound` as possible\n    // (if the distance is more than `worldWidth / 2` it can be closer.\n    this.triangles_.forEach(function(triangle) {\n      if (Math.max(triangle.source[0][0], triangle.source[1][0],\n          triangle.source[2][0]) - leftBound > this.sourceWorldWidth_ / 2) {\n        var newTriangle = [[triangle.source[0][0], triangle.source[0][1]],\n          [triangle.source[1][0], triangle.source[1][1]],\n          [triangle.source[2][0], triangle.source[2][1]]];\n        if ((newTriangle[0][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n          newTriangle[0][0] -= this.sourceWorldWidth_;\n        }\n        if ((newTriangle[1][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n          newTriangle[1][0] -= this.sourceWorldWidth_;\n        }\n        if ((newTriangle[2][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n          newTriangle[2][0] -= this.sourceWorldWidth_;\n        }\n\n        // Rarely (if the extent contains both the dateline and prime meridian)\n        // the shift can in turn break some triangles.\n        // Detect this here and don't shift in such cases.\n        var minX = Math.min(\n            newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n        var maxX = Math.max(\n            newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n        if ((maxX - minX) < this.sourceWorldWidth_ / 2) {\n          triangle.source = newTriangle;\n        }\n      }\n    }, this);\n  }\n\n  transformInvCache = {};\n};\n\n\n/**\n * Adds triangle to the triangulation.\n * @param {ol.Coordinate} a The target a coordinate.\n * @param {ol.Coordinate} b The target b coordinate.\n * @param {ol.Coordinate} c The target c coordinate.\n * @param {ol.Coordinate} aSrc The source a coordinate.\n * @param {ol.Coordinate} bSrc The source b coordinate.\n * @param {ol.Coordinate} cSrc The source c coordinate.\n * @private\n */\nol.reproj.Triangulation.prototype.addTriangle_ = function(a, b, c,\n    aSrc, bSrc, cSrc) {\n  this.triangles_.push({\n    source: [aSrc, bSrc, cSrc],\n    target: [a, b, c]\n  });\n};\n\n\n/**\n * Adds quad (points in clock-wise order) to the triangulation\n * (and reprojects the vertices) if valid.\n * Performs quad subdivision if needed to increase precision.\n *\n * @param {ol.Coordinate} a The target a coordinate.\n * @param {ol.Coordinate} b The target b coordinate.\n * @param {ol.Coordinate} c The target c coordinate.\n * @param {ol.Coordinate} d The target d coordinate.\n * @param {ol.Coordinate} aSrc The source a coordinate.\n * @param {ol.Coordinate} bSrc The source b coordinate.\n * @param {ol.Coordinate} cSrc The source c coordinate.\n * @param {ol.Coordinate} dSrc The source d coordinate.\n * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n * @private\n */\nol.reproj.Triangulation.prototype.addQuad_ = function(a, b, c, d,\n    aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n\n  var sourceQuadExtent = ol.extent.boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n  var sourceCoverageX = this.sourceWorldWidth_ ?\n    ol.extent.getWidth(sourceQuadExtent) / this.sourceWorldWidth_ : null;\n  var sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n\n  // when the quad is wrapped in the source projection\n  // it covers most of the projection extent, but not fully\n  var wrapsX = this.sourceProj_.canWrapX() &&\n               sourceCoverageX > 0.5 && sourceCoverageX < 1;\n\n  var needsSubdivision = false;\n\n  if (maxSubdivision > 0) {\n    if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n      var targetQuadExtent = ol.extent.boundingExtent([a, b, c, d]);\n      var targetCoverageX =\n          ol.extent.getWidth(targetQuadExtent) / this.targetWorldWidth_;\n      needsSubdivision |=\n          targetCoverageX > ol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH;\n    }\n    if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n      needsSubdivision |=\n          sourceCoverageX > ol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH;\n    }\n  }\n\n  if (!needsSubdivision && this.maxSourceExtent_) {\n    if (!ol.extent.intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n      // whole quad outside source projection extent -> ignore\n      return;\n    }\n  }\n\n  if (!needsSubdivision) {\n    if (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ||\n        !isFinite(bSrc[0]) || !isFinite(bSrc[1]) ||\n        !isFinite(cSrc[0]) || !isFinite(cSrc[1]) ||\n        !isFinite(dSrc[0]) || !isFinite(dSrc[1])) {\n      if (maxSubdivision > 0) {\n        needsSubdivision = true;\n      } else {\n        return;\n      }\n    }\n  }\n\n  if (maxSubdivision > 0) {\n    if (!needsSubdivision) {\n      var center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n      var centerSrc = this.transformInv_(center);\n\n      var dx;\n      if (wrapsX) {\n        var centerSrcEstimX =\n            (ol.math.modulo(aSrc[0], sourceWorldWidth) +\n             ol.math.modulo(cSrc[0], sourceWorldWidth)) / 2;\n        dx = centerSrcEstimX -\n            ol.math.modulo(centerSrc[0], sourceWorldWidth);\n      } else {\n        dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n      }\n      var dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n      var centerSrcErrorSquared = dx * dx + dy * dy;\n      needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n    }\n    if (needsSubdivision) {\n      if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n        // split horizontally (top & bottom)\n        var bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n        var bcSrc = this.transformInv_(bc);\n        var da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n        var daSrc = this.transformInv_(da);\n\n        this.addQuad_(\n            a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);\n        this.addQuad_(\n            da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);\n      } else {\n        // split vertically (left & right)\n        var ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n        var abSrc = this.transformInv_(ab);\n        var cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n        var cdSrc = this.transformInv_(cd);\n\n        this.addQuad_(\n            a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);\n        this.addQuad_(\n            ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);\n      }\n      return;\n    }\n  }\n\n  if (wrapsX) {\n    if (!this.canWrapXInSource_) {\n      return;\n    }\n    this.wrapsXInSource_ = true;\n  }\n\n  this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n  this.addTriangle_(a, b, c, aSrc, bSrc, cSrc);\n};\n\n\n/**\n * Calculates extent of the 'source' coordinates from all the triangles.\n *\n * @return {ol.Extent} Calculated extent.\n */\nol.reproj.Triangulation.prototype.calculateSourceExtent = function() {\n  var extent = ol.extent.createEmpty();\n\n  this.triangles_.forEach(function(triangle, i, arr) {\n    var src = triangle.source;\n    ol.extent.extendCoordinate(extent, src[0]);\n    ol.extent.extendCoordinate(extent, src[1]);\n    ol.extent.extendCoordinate(extent, src[2]);\n  });\n\n  return extent;\n};\n\n\n/**\n * @return {Array.<ol.ReprojTriangle>} Array of the calculated triangles.\n */\nol.reproj.Triangulation.prototype.getTriangles = function() {\n  return this.triangles_;\n};\n\ngoog.provide('ol.reproj.Image');\n\ngoog.require('ol');\ngoog.require('ol.ImageBase');\ngoog.require('ol.ImageState');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.reproj');\ngoog.require('ol.reproj.Triangulation');\n\n\n/**\n * @classdesc\n * Class encapsulating single reprojected image.\n * See {@link ol.source.Image}.\n *\n * @constructor\n * @extends {ol.ImageBase}\n * @param {ol.proj.Projection} sourceProj Source projection (of the data).\n * @param {ol.proj.Projection} targetProj Target projection.\n * @param {ol.Extent} targetExtent Target extent.\n * @param {number} targetResolution Target resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.ReprojImageFunctionType} getImageFunction\n *     Function returning source images (extent, resolution, pixelRatio).\n */\nol.reproj.Image = function(sourceProj, targetProj,\n    targetExtent, targetResolution, pixelRatio, getImageFunction) {\n\n  /**\n   * @private\n   * @type {ol.proj.Projection}\n   */\n  this.targetProj_ = targetProj;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.maxSourceExtent_ = sourceProj.getExtent();\n  var maxTargetExtent = targetProj.getExtent();\n\n  var limitedTargetExtent = maxTargetExtent ?\n    ol.extent.getIntersection(targetExtent, maxTargetExtent) : targetExtent;\n\n  var targetCenter = ol.extent.getCenter(limitedTargetExtent);\n  var sourceResolution = ol.reproj.calculateSourceResolution(\n      sourceProj, targetProj, targetCenter, targetResolution);\n\n  var errorThresholdInPixels = ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD;\n\n  /**\n   * @private\n   * @type {!ol.reproj.Triangulation}\n   */\n  this.triangulation_ = new ol.reproj.Triangulation(\n      sourceProj, targetProj, limitedTargetExtent, this.maxSourceExtent_,\n      sourceResolution * errorThresholdInPixels);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.targetResolution_ = targetResolution;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.targetExtent_ = targetExtent;\n\n  var sourceExtent = this.triangulation_.calculateSourceExtent();\n\n  /**\n   * @private\n   * @type {ol.ImageBase}\n   */\n  this.sourceImage_ =\n      getImageFunction(sourceExtent, sourceResolution, pixelRatio);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.sourcePixelRatio_ =\n      this.sourceImage_ ? this.sourceImage_.getPixelRatio() : 1;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = null;\n\n  /**\n   * @private\n   * @type {?ol.EventsKey}\n   */\n  this.sourceListenerKey_ = null;\n\n\n  var state = ol.ImageState.LOADED;\n\n  if (this.sourceImage_) {\n    state = ol.ImageState.IDLE;\n  }\n\n  ol.ImageBase.call(this, targetExtent, targetResolution, this.sourcePixelRatio_, state);\n};\nol.inherits(ol.reproj.Image, ol.ImageBase);\n\n\n/**\n * @inheritDoc\n */\nol.reproj.Image.prototype.disposeInternal = function() {\n  if (this.state == ol.ImageState.LOADING) {\n    this.unlistenSource_();\n  }\n  ol.ImageBase.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @inheritDoc\n */\nol.reproj.Image.prototype.getImage = function() {\n  return this.canvas_;\n};\n\n\n/**\n * @return {ol.proj.Projection} Projection.\n */\nol.reproj.Image.prototype.getProjection = function() {\n  return this.targetProj_;\n};\n\n\n/**\n * @private\n */\nol.reproj.Image.prototype.reproject_ = function() {\n  var sourceState = this.sourceImage_.getState();\n  if (sourceState == ol.ImageState.LOADED) {\n    var width = ol.extent.getWidth(this.targetExtent_) / this.targetResolution_;\n    var height =\n        ol.extent.getHeight(this.targetExtent_) / this.targetResolution_;\n\n    this.canvas_ = ol.reproj.render(width, height, this.sourcePixelRatio_,\n        this.sourceImage_.getResolution(), this.maxSourceExtent_,\n        this.targetResolution_, this.targetExtent_, this.triangulation_, [{\n          extent: this.sourceImage_.getExtent(),\n          image: this.sourceImage_.getImage()\n        }], 0);\n  }\n  this.state = sourceState;\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n */\nol.reproj.Image.prototype.load = function() {\n  if (this.state == ol.ImageState.IDLE) {\n    this.state = ol.ImageState.LOADING;\n    this.changed();\n\n    var sourceState = this.sourceImage_.getState();\n    if (sourceState == ol.ImageState.LOADED ||\n        sourceState == ol.ImageState.ERROR) {\n      this.reproject_();\n    } else {\n      this.sourceListenerKey_ = ol.events.listen(this.sourceImage_,\n          ol.events.EventType.CHANGE, function(e) {\n            var sourceState = this.sourceImage_.getState();\n            if (sourceState == ol.ImageState.LOADED ||\n                sourceState == ol.ImageState.ERROR) {\n              this.unlistenSource_();\n              this.reproject_();\n            }\n          }, this);\n      this.sourceImage_.load();\n    }\n  }\n};\n\n\n/**\n * @private\n */\nol.reproj.Image.prototype.unlistenSource_ = function() {\n  ol.events.unlistenByKey(/** @type {!ol.EventsKey} */ (this.sourceListenerKey_));\n  this.sourceListenerKey_ = null;\n};\n\ngoog.provide('ol.reproj.Tile');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.reproj');\ngoog.require('ol.reproj.Triangulation');\n\n\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link ol.source.TileImage}.\n *\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.proj.Projection} sourceProj Source projection.\n * @param {ol.tilegrid.TileGrid} sourceTileGrid Source tile grid.\n * @param {ol.proj.Projection} targetProj Target projection.\n * @param {ol.tilegrid.TileGrid} targetTileGrid Target tile grid.\n * @param {ol.TileCoord} tileCoord Coordinate of the tile.\n * @param {ol.TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} gutter Gutter of the source tiles.\n * @param {ol.ReprojTileFunctionType} getTileFunction\n *     Function returning source tiles (z, x, y, pixelRatio).\n * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n */\nol.reproj.Tile = function(sourceProj, sourceTileGrid,\n    targetProj, targetTileGrid, tileCoord, wrappedTileCoord,\n    pixelRatio, gutter, getTileFunction,\n    opt_errorThreshold, opt_renderEdges) {\n  ol.Tile.call(this, tileCoord, ol.TileState.IDLE);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.pixelRatio_ = pixelRatio;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.gutter_ = gutter;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = null;\n\n  /**\n   * @private\n   * @type {ol.tilegrid.TileGrid}\n   */\n  this.sourceTileGrid_ = sourceTileGrid;\n\n  /**\n   * @private\n   * @type {ol.tilegrid.TileGrid}\n   */\n  this.targetTileGrid_ = targetTileGrid;\n\n  /**\n   * @private\n   * @type {ol.TileCoord}\n   */\n  this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n\n  /**\n   * @private\n   * @type {!Array.<ol.Tile>}\n   */\n  this.sourceTiles_ = [];\n\n  /**\n   * @private\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.sourcesListenerKeys_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.sourceZ_ = 0;\n\n  var targetExtent = targetTileGrid.getTileCoordExtent(this.wrappedTileCoord_);\n  var maxTargetExtent = this.targetTileGrid_.getExtent();\n  var maxSourceExtent = this.sourceTileGrid_.getExtent();\n\n  var limitedTargetExtent = maxTargetExtent ?\n    ol.extent.getIntersection(targetExtent, maxTargetExtent) : targetExtent;\n\n  if (ol.extent.getArea(limitedTargetExtent) === 0) {\n    // Tile is completely outside range -> EMPTY\n    // TODO: is it actually correct that the source even creates the tile ?\n    this.state = ol.TileState.EMPTY;\n    return;\n  }\n\n  var sourceProjExtent = sourceProj.getExtent();\n  if (sourceProjExtent) {\n    if (!maxSourceExtent) {\n      maxSourceExtent = sourceProjExtent;\n    } else {\n      maxSourceExtent = ol.extent.getIntersection(\n          maxSourceExtent, sourceProjExtent);\n    }\n  }\n\n  var targetResolution = targetTileGrid.getResolution(\n      this.wrappedTileCoord_[0]);\n\n  var targetCenter = ol.extent.getCenter(limitedTargetExtent);\n  var sourceResolution = ol.reproj.calculateSourceResolution(\n      sourceProj, targetProj, targetCenter, targetResolution);\n\n  if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n    // invalid sourceResolution -> EMPTY\n    // probably edges of the projections when no extent is defined\n    this.state = ol.TileState.EMPTY;\n    return;\n  }\n\n  var errorThresholdInPixels = opt_errorThreshold !== undefined ?\n    opt_errorThreshold : ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD;\n\n  /**\n   * @private\n   * @type {!ol.reproj.Triangulation}\n   */\n  this.triangulation_ = new ol.reproj.Triangulation(\n      sourceProj, targetProj, limitedTargetExtent, maxSourceExtent,\n      sourceResolution * errorThresholdInPixels);\n\n  if (this.triangulation_.getTriangles().length === 0) {\n    // no valid triangles -> EMPTY\n    this.state = ol.TileState.EMPTY;\n    return;\n  }\n\n  this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n  var sourceExtent = this.triangulation_.calculateSourceExtent();\n\n  if (maxSourceExtent) {\n    if (sourceProj.canWrapX()) {\n      sourceExtent[1] = ol.math.clamp(\n          sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);\n      sourceExtent[3] = ol.math.clamp(\n          sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);\n    } else {\n      sourceExtent = ol.extent.getIntersection(sourceExtent, maxSourceExtent);\n    }\n  }\n\n  if (!ol.extent.getArea(sourceExtent)) {\n    this.state = ol.TileState.EMPTY;\n  } else {\n    var sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(\n        sourceExtent, this.sourceZ_);\n\n    for (var srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n      for (var srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n        var tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);\n        if (tile) {\n          this.sourceTiles_.push(tile);\n        }\n      }\n    }\n\n    if (this.sourceTiles_.length === 0) {\n      this.state = ol.TileState.EMPTY;\n    }\n  }\n};\nol.inherits(ol.reproj.Tile, ol.Tile);\n\n\n/**\n * @inheritDoc\n */\nol.reproj.Tile.prototype.disposeInternal = function() {\n  if (this.state == ol.TileState.LOADING) {\n    this.unlistenSources_();\n  }\n  ol.Tile.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Get the HTML Canvas element for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\nol.reproj.Tile.prototype.getImage = function() {\n  return this.canvas_;\n};\n\n\n/**\n * @private\n */\nol.reproj.Tile.prototype.reproject_ = function() {\n  var sources = [];\n  this.sourceTiles_.forEach(function(tile, i, arr) {\n    if (tile && tile.getState() == ol.TileState.LOADED) {\n      sources.push({\n        extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),\n        image: tile.getImage()\n      });\n    }\n  }, this);\n  this.sourceTiles_.length = 0;\n\n  if (sources.length === 0) {\n    this.state = ol.TileState.ERROR;\n  } else {\n    var z = this.wrappedTileCoord_[0];\n    var size = this.targetTileGrid_.getTileSize(z);\n    var width = typeof size === 'number' ? size : size[0];\n    var height = typeof size === 'number' ? size : size[1];\n    var targetResolution = this.targetTileGrid_.getResolution(z);\n    var sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);\n\n    var targetExtent = this.targetTileGrid_.getTileCoordExtent(\n        this.wrappedTileCoord_);\n    this.canvas_ = ol.reproj.render(width, height, this.pixelRatio_,\n        sourceResolution, this.sourceTileGrid_.getExtent(),\n        targetResolution, targetExtent, this.triangulation_, sources,\n        this.gutter_, this.renderEdges_);\n\n    this.state = ol.TileState.LOADED;\n  }\n  this.changed();\n};\n\n\n/**\n * @inheritDoc\n */\nol.reproj.Tile.prototype.load = function() {\n  if (this.state == ol.TileState.IDLE) {\n    this.state = ol.TileState.LOADING;\n    this.changed();\n\n    var leftToLoad = 0;\n\n    this.sourcesListenerKeys_ = [];\n    this.sourceTiles_.forEach(function(tile, i, arr) {\n      var state = tile.getState();\n      if (state == ol.TileState.IDLE || state == ol.TileState.LOADING) {\n        leftToLoad++;\n\n        var sourceListenKey;\n        sourceListenKey = ol.events.listen(tile, ol.events.EventType.CHANGE,\n            function(e) {\n              var state = tile.getState();\n              if (state == ol.TileState.LOADED ||\n                  state == ol.TileState.ERROR ||\n                  state == ol.TileState.EMPTY) {\n                ol.events.unlistenByKey(sourceListenKey);\n                leftToLoad--;\n                if (leftToLoad === 0) {\n                  this.unlistenSources_();\n                  this.reproject_();\n                }\n              }\n            }, this);\n        this.sourcesListenerKeys_.push(sourceListenKey);\n      }\n    }, this);\n\n    this.sourceTiles_.forEach(function(tile, i, arr) {\n      var state = tile.getState();\n      if (state == ol.TileState.IDLE) {\n        tile.load();\n      }\n    });\n\n    if (leftToLoad === 0) {\n      setTimeout(this.reproject_.bind(this), 0);\n    }\n  }\n};\n\n\n/**\n * @private\n */\nol.reproj.Tile.prototype.unlistenSources_ = function() {\n  this.sourcesListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.sourcesListenerKeys_ = null;\n};\n\ngoog.provide('ol.TileUrlFunction');\n\ngoog.require('ol.asserts');\ngoog.require('ol.math');\ngoog.require('ol.tilecoord');\n\n\n/**\n * @param {string} template Template.\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @return {ol.TileUrlFunctionType} Tile URL function.\n */\nol.TileUrlFunction.createFromTemplate = function(template, tileGrid) {\n  var zRegEx = /\\{z\\}/g;\n  var xRegEx = /\\{x\\}/g;\n  var yRegEx = /\\{y\\}/g;\n  var dashYRegEx = /\\{-y\\}/g;\n  return (\n    /**\n     * @param {ol.TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {ol.proj.Projection} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function(tileCoord, pixelRatio, projection) {\n      if (!tileCoord) {\n        return undefined;\n      } else {\n        return template.replace(zRegEx, tileCoord[0].toString())\n            .replace(xRegEx, tileCoord[1].toString())\n            .replace(yRegEx, function() {\n              var y = -tileCoord[2] - 1;\n              return y.toString();\n            })\n            .replace(dashYRegEx, function() {\n              var z = tileCoord[0];\n              var range = tileGrid.getFullTileRange(z);\n              ol.asserts.assert(range, 55); // The {-y} placeholder requires a tile grid with extent\n              var y = range.getHeight() + tileCoord[2];\n              return y.toString();\n            });\n      }\n    });\n};\n\n\n/**\n * @param {Array.<string>} templates Templates.\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.\n * @return {ol.TileUrlFunctionType} Tile URL function.\n */\nol.TileUrlFunction.createFromTemplates = function(templates, tileGrid) {\n  var len = templates.length;\n  var tileUrlFunctions = new Array(len);\n  for (var i = 0; i < len; ++i) {\n    tileUrlFunctions[i] = ol.TileUrlFunction.createFromTemplate(\n        templates[i], tileGrid);\n  }\n  return ol.TileUrlFunction.createFromTileUrlFunctions(tileUrlFunctions);\n};\n\n\n/**\n * @param {Array.<ol.TileUrlFunctionType>} tileUrlFunctions Tile URL Functions.\n * @return {ol.TileUrlFunctionType} Tile URL function.\n */\nol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) {\n  if (tileUrlFunctions.length === 1) {\n    return tileUrlFunctions[0];\n  }\n  return (\n    /**\n     * @param {ol.TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {ol.proj.Projection} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function(tileCoord, pixelRatio, projection) {\n      if (!tileCoord) {\n        return undefined;\n      } else {\n        var h = ol.tilecoord.hash(tileCoord);\n        var index = ol.math.modulo(h, tileUrlFunctions.length);\n        return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n      }\n    });\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, pixelRatio, projection) {\n  return undefined;\n};\n\n\n/**\n * @param {string} url URL.\n * @return {Array.<string>} Array of urls.\n */\nol.TileUrlFunction.expandUrl = function(url) {\n  var urls = [];\n  var match = /\\{([a-z])-([a-z])\\}/.exec(url);\n  if (match) {\n    // char range\n    var startCharCode = match[1].charCodeAt(0);\n    var stopCharCode = match[2].charCodeAt(0);\n    var charCode;\n    for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n      urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n    }\n    return urls;\n  }\n  match = match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n  if (match) {\n    // number range\n    var stop = parseInt(match[2], 10);\n    for (var i = parseInt(match[1], 10); i <= stop; i++) {\n      urls.push(url.replace(match[0], i.toString()));\n    }\n    return urls;\n  }\n  urls.push(url);\n  return urls;\n};\n\ngoog.provide('ol.TileCache');\n\ngoog.require('ol');\ngoog.require('ol.structs.LRUCache');\ngoog.require('ol.tilecoord');\n\n\n/**\n * @constructor\n * @extends {ol.structs.LRUCache.<ol.Tile>}\n * @param {number=} opt_highWaterMark High water mark.\n * @struct\n */\nol.TileCache = function(opt_highWaterMark) {\n\n  ol.structs.LRUCache.call(this, opt_highWaterMark);\n\n};\nol.inherits(ol.TileCache, ol.structs.LRUCache);\n\n\n/**\n * @param {Object.<string, ol.TileRange>} usedTiles Used tiles.\n */\nol.TileCache.prototype.expireCache = function(usedTiles) {\n  var tile, zKey;\n  while (this.canExpireCache()) {\n    tile = this.peekLast();\n    zKey = tile.tileCoord[0].toString();\n    if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) {\n      break;\n    } else {\n      this.pop().dispose();\n    }\n  }\n};\n\n\n/**\n * Prune all tiles from the cache that don't have the same z as the newest tile.\n */\nol.TileCache.prototype.pruneExceptNewestZ = function() {\n  if (this.getCount() === 0) {\n    return;\n  }\n  var key = this.peekFirstKey();\n  var tileCoord = ol.tilecoord.fromKey(key);\n  var z = tileCoord[0];\n  this.forEach(function(tile) {\n    if (tile.tileCoord[0] !== z) {\n      this.remove(ol.tilecoord.getKey(tile.tileCoord));\n      tile.dispose();\n    }\n  }, this);\n};\n\ngoog.provide('ol.source.Tile');\n\ngoog.require('ol');\ngoog.require('ol.TileCache');\ngoog.require('ol.TileState');\ngoog.require('ol.events.Event');\ngoog.require('ol.proj');\ngoog.require('ol.size');\ngoog.require('ol.source.Source');\ngoog.require('ol.tilecoord');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing images divided into a tile grid.\n *\n * @constructor\n * @abstract\n * @extends {ol.source.Source}\n * @param {ol.SourceTileOptions} options Tile source options.\n * @api\n */\nol.source.Tile = function(options) {\n\n  ol.source.Source.call(this, {\n    attributions: options.attributions,\n    extent: options.extent,\n    logo: options.logo,\n    projection: options.projection,\n    state: options.state,\n    wrapX: options.wrapX\n  });\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.opaque_ = options.opaque !== undefined ? options.opaque : false;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.tilePixelRatio_ = options.tilePixelRatio !== undefined ?\n    options.tilePixelRatio : 1;\n\n  /**\n   * @protected\n   * @type {ol.tilegrid.TileGrid}\n   */\n  this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;\n\n  /**\n   * @protected\n   * @type {ol.TileCache}\n   */\n  this.tileCache = new ol.TileCache(options.cacheSize);\n\n  /**\n   * @protected\n   * @type {ol.Size}\n   */\n  this.tmpSize = [0, 0];\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.key_ = '';\n\n  /**\n   * @protected\n   * @type {olx.TileOptions}\n   */\n  this.tileOptions = {transition: options.transition};\n\n};\nol.inherits(ol.source.Tile, ol.source.Source);\n\n\n/**\n * @return {boolean} Can expire cache.\n */\nol.source.Tile.prototype.canExpireCache = function() {\n  return this.tileCache.canExpireCache();\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @param {Object.<string, ol.TileRange>} usedTiles Used tiles.\n */\nol.source.Tile.prototype.expireCache = function(projection, usedTiles) {\n  var tileCache = this.getTileCacheForProjection(projection);\n  if (tileCache) {\n    tileCache.expireCache(usedTiles);\n  }\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @param {number} z Zoom level.\n * @param {ol.TileRange} tileRange Tile range.\n * @param {function(ol.Tile):(boolean|undefined)} callback Called with each\n *     loaded tile.  If the callback returns `false`, the tile will not be\n *     considered loaded.\n * @return {boolean} The tile range is fully covered with loaded tiles.\n */\nol.source.Tile.prototype.forEachLoadedTile = function(projection, z, tileRange, callback) {\n  var tileCache = this.getTileCacheForProjection(projection);\n  if (!tileCache) {\n    return false;\n  }\n\n  var covered = true;\n  var tile, tileCoordKey, loaded;\n  for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {\n    for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {\n      tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n      loaded = false;\n      if (tileCache.containsKey(tileCoordKey)) {\n        tile = /** @type {!ol.Tile} */ (tileCache.get(tileCoordKey));\n        loaded = tile.getState() === ol.TileState.LOADED;\n        if (loaded) {\n          loaded = (callback(tile) !== false);\n        }\n      }\n      if (!loaded) {\n        covered = false;\n      }\n    }\n  }\n  return covered;\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @return {number} Gutter.\n */\nol.source.Tile.prototype.getGutter = function(projection) {\n  return 0;\n};\n\n\n/**\n * Return the key to be used for all tiles in the source.\n * @return {string} The key for all tiles.\n * @protected\n */\nol.source.Tile.prototype.getKey = function() {\n  return this.key_;\n};\n\n\n/**\n * Set the value to be used as the key for all tiles in the source.\n * @param {string} key The key for tiles.\n * @protected\n */\nol.source.Tile.prototype.setKey = function(key) {\n  if (this.key_ !== key) {\n    this.key_ = key;\n    this.changed();\n  }\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @return {boolean} Opaque.\n */\nol.source.Tile.prototype.getOpaque = function(projection) {\n  return this.opaque_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.Tile.prototype.getResolutions = function() {\n  return this.tileGrid.getResolutions();\n};\n\n\n/**\n * @abstract\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @return {!ol.Tile} Tile.\n */\nol.source.Tile.prototype.getTile = function(z, x, y, pixelRatio, projection) {};\n\n\n/**\n * Return the tile grid of the tile source.\n * @return {ol.tilegrid.TileGrid} Tile grid.\n * @api\n */\nol.source.Tile.prototype.getTileGrid = function() {\n  return this.tileGrid;\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @return {!ol.tilegrid.TileGrid} Tile grid.\n */\nol.source.Tile.prototype.getTileGridForProjection = function(projection) {\n  if (!this.tileGrid) {\n    return ol.tilegrid.getForProjection(projection);\n  } else {\n    return this.tileGrid;\n  }\n};\n\n\n/**\n * @param {ol.proj.Projection} projection Projection.\n * @return {ol.TileCache} Tile cache.\n * @protected\n */\nol.source.Tile.prototype.getTileCacheForProjection = function(projection) {\n  var thisProj = this.getProjection();\n  if (thisProj && !ol.proj.equivalent(thisProj, projection)) {\n    return null;\n  } else {\n    return this.tileCache;\n  }\n};\n\n\n/**\n * Get the tile pixel ratio for this source. Subclasses may override this\n * method, which is meant to return a supported pixel ratio that matches the\n * provided `pixelRatio` as close as possible.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Tile pixel ratio.\n */\nol.source.Tile.prototype.getTilePixelRatio = function(pixelRatio) {\n  return this.tilePixelRatio_;\n};\n\n\n/**\n * @param {number} z Z.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @return {ol.Size} Tile size.\n */\nol.source.Tile.prototype.getTilePixelSize = function(z, pixelRatio, projection) {\n  var tileGrid = this.getTileGridForProjection(projection);\n  var tilePixelRatio = this.getTilePixelRatio(pixelRatio);\n  var tileSize = ol.size.toSize(tileGrid.getTileSize(z), this.tmpSize);\n  if (tilePixelRatio == 1) {\n    return tileSize;\n  } else {\n    return ol.size.scale(tileSize, tilePixelRatio, this.tmpSize);\n  }\n};\n\n\n/**\n * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate\n * is outside the resolution and extent range of the tile grid, `null` will be\n * returned.\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.proj.Projection=} opt_projection Projection.\n * @return {ol.TileCoord} Tile coordinate to be passed to the tileUrlFunction or\n *     null if no tile URL should be created for the passed `tileCoord`.\n */\nol.source.Tile.prototype.getTileCoordForTileUrlFunction = function(tileCoord, opt_projection) {\n  var projection = opt_projection !== undefined ?\n    opt_projection : this.getProjection();\n  var tileGrid = this.getTileGridForProjection(projection);\n  if (this.getWrapX() && projection.isGlobal()) {\n    tileCoord = ol.tilegrid.wrapX(tileGrid, tileCoord, projection);\n  }\n  return ol.tilecoord.withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.Tile.prototype.refresh = function() {\n  this.tileCache.clear();\n  this.changed();\n};\n\n\n/**\n * Marks a tile coord as being used, without triggering a load.\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {ol.proj.Projection} projection Projection.\n */\nol.source.Tile.prototype.useTile = ol.nullFunction;\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.source.Tile} instances are instances of this\n * type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.source.Tile.Event}\n * @param {string} type Type.\n * @param {ol.Tile} tile The tile.\n */\nol.source.Tile.Event = function(type, tile) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The tile related to the event.\n   * @type {ol.Tile}\n   * @api\n   */\n  this.tile = tile;\n\n};\nol.inherits(ol.source.Tile.Event, ol.events.Event);\n\ngoog.provide('ol.source.TileEventType');\n\n/**\n * @enum {string}\n */\nol.source.TileEventType = {\n\n  /**\n   * Triggered when a tile starts loading.\n   * @event ol.source.Tile.Event#tileloadstart\n   * @api\n   */\n  TILELOADSTART: 'tileloadstart',\n\n  /**\n   * Triggered when a tile finishes loading, either when its data is loaded,\n   * or when loading was aborted because the tile is no longer needed.\n   * @event ol.source.Tile.Event#tileloadend\n   * @api\n   */\n  TILELOADEND: 'tileloadend',\n\n  /**\n   * Triggered if tile loading results in an error.\n   * @event ol.source.Tile.Event#tileloaderror\n   * @api\n   */\n  TILELOADERROR: 'tileloaderror'\n\n};\n\ngoog.provide('ol.source.UrlTile');\n\ngoog.require('ol');\ngoog.require('ol.TileState');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.source.Tile');\ngoog.require('ol.source.TileEventType');\ngoog.require('ol.tilecoord');\n\n\n/**\n * @classdesc\n * Base class for sources providing tiles divided into a tile grid over http.\n *\n * @constructor\n * @abstract\n * @fires ol.source.Tile.Event\n * @extends {ol.source.Tile}\n * @param {ol.SourceUrlTileOptions} options Image tile options.\n */\nol.source.UrlTile = function(options) {\n\n  ol.source.Tile.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    extent: options.extent,\n    logo: options.logo,\n    opaque: options.opaque,\n    projection: options.projection,\n    state: options.state,\n    tileGrid: options.tileGrid,\n    tilePixelRatio: options.tilePixelRatio,\n    wrapX: options.wrapX,\n    transition: options.transition\n  });\n\n  /**\n   * @protected\n   * @type {ol.TileLoadFunctionType}\n   */\n  this.tileLoadFunction = options.tileLoadFunction;\n\n  /**\n   * @protected\n   * @type {ol.TileUrlFunctionType}\n   */\n  this.tileUrlFunction = this.fixedTileUrlFunction ?\n    this.fixedTileUrlFunction.bind(this) :\n    ol.TileUrlFunction.nullTileUrlFunction;\n\n  /**\n   * @protected\n   * @type {!Array.<string>|null}\n   */\n  this.urls = null;\n\n  if (options.urls) {\n    this.setUrls(options.urls);\n  } else if (options.url) {\n    this.setUrl(options.url);\n  }\n  if (options.tileUrlFunction) {\n    this.setTileUrlFunction(options.tileUrlFunction);\n  }\n\n  /**\n   * @private\n   * @type {Object.<number, boolean>}\n   */\n  this.tileLoadingKeys_ = {};\n\n};\nol.inherits(ol.source.UrlTile, ol.source.Tile);\n\n\n/**\n * @type {ol.TileUrlFunctionType|undefined}\n * @protected\n */\nol.source.UrlTile.prototype.fixedTileUrlFunction;\n\n/**\n * Return the tile load function of the source.\n * @return {ol.TileLoadFunctionType} TileLoadFunction\n * @api\n */\nol.source.UrlTile.prototype.getTileLoadFunction = function() {\n  return this.tileLoadFunction;\n};\n\n\n/**\n * Return the tile URL function of the source.\n * @return {ol.TileUrlFunctionType} TileUrlFunction\n * @api\n */\nol.source.UrlTile.prototype.getTileUrlFunction = function() {\n  return this.tileUrlFunction;\n};\n\n\n/**\n * Return the URLs used for this source.\n * When a tileUrlFunction is used instead of url or urls,\n * null will be returned.\n * @return {!Array.<string>|null} URLs.\n * @api\n */\nol.source.UrlTile.prototype.getUrls = function() {\n  return this.urls;\n};\n\n\n/**\n * Handle tile change events.\n * @param {ol.events.Event} event Event.\n * @protected\n */\nol.source.UrlTile.prototype.handleTileChange = function(event) {\n  var tile = /** @type {ol.Tile} */ (event.target);\n  var uid = ol.getUid(tile);\n  var tileState = tile.getState();\n  var type;\n  if (tileState == ol.TileState.LOADING) {\n    this.tileLoadingKeys_[uid] = true;\n    type = ol.source.TileEventType.TILELOADSTART;\n  } else if (uid in this.tileLoadingKeys_) {\n    delete this.tileLoadingKeys_[uid];\n    type = tileState == ol.TileState.ERROR ? ol.source.TileEventType.TILELOADERROR :\n      (tileState == ol.TileState.LOADED || tileState == ol.TileState.ABORT) ?\n        ol.source.TileEventType.TILELOADEND : undefined;\n  }\n  if (type != undefined) {\n    this.dispatchEvent(new ol.source.Tile.Event(type, tile));\n  }\n};\n\n\n/**\n * Set the tile load function of the source.\n * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.\n * @api\n */\nol.source.UrlTile.prototype.setTileLoadFunction = function(tileLoadFunction) {\n  this.tileCache.clear();\n  this.tileLoadFunction = tileLoadFunction;\n  this.changed();\n};\n\n\n/**\n * Set the tile URL function of the source.\n * @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function.\n * @param {string=} opt_key Optional new tile key for the source.\n * @api\n */\nol.source.UrlTile.prototype.setTileUrlFunction = function(tileUrlFunction, opt_key) {\n  this.tileUrlFunction = tileUrlFunction;\n  this.tileCache.pruneExceptNewestZ();\n  if (typeof opt_key !== 'undefined') {\n    this.setKey(opt_key);\n  } else {\n    this.changed();\n  }\n};\n\n\n/**\n * Set the URL to use for requests.\n * @param {string} url URL.\n * @api\n */\nol.source.UrlTile.prototype.setUrl = function(url) {\n  var urls = this.urls = ol.TileUrlFunction.expandUrl(url);\n  this.setTileUrlFunction(this.fixedTileUrlFunction ?\n    this.fixedTileUrlFunction.bind(this) :\n    ol.TileUrlFunction.createFromTemplates(urls, this.tileGrid), url);\n};\n\n\n/**\n * Set the URLs to use for requests.\n * @param {Array.<string>} urls URLs.\n * @api\n */\nol.source.UrlTile.prototype.setUrls = function(urls) {\n  this.urls = urls;\n  var key = urls.join('\\n');\n  this.setTileUrlFunction(this.fixedTileUrlFunction ?\n    this.fixedTileUrlFunction.bind(this) :\n    ol.TileUrlFunction.createFromTemplates(urls, this.tileGrid), key);\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.UrlTile.prototype.useTile = function(z, x, y) {\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  if (this.tileCache.containsKey(tileCoordKey)) {\n    this.tileCache.get(tileCoordKey);\n  }\n};\n\ngoog.provide('ol.source.TileImage');\n\ngoog.require('ol');\ngoog.require('ol.ImageTile');\ngoog.require('ol.TileCache');\ngoog.require('ol.TileState');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.proj');\ngoog.require('ol.reproj.Tile');\ngoog.require('ol.source.UrlTile');\ngoog.require('ol.tilecoord');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Base class for sources providing images divided into a tile grid.\n *\n * @constructor\n * @fires ol.source.Tile.Event\n * @extends {ol.source.UrlTile}\n * @param {olx.source.TileImageOptions} options Image tile options.\n * @api\n */\nol.source.TileImage = function(options) {\n\n  ol.source.UrlTile.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    extent: options.extent,\n    logo: options.logo,\n    opaque: options.opaque,\n    projection: options.projection,\n    state: options.state,\n    tileGrid: options.tileGrid,\n    tileLoadFunction: options.tileLoadFunction ?\n      options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction,\n    tilePixelRatio: options.tilePixelRatio,\n    tileUrlFunction: options.tileUrlFunction,\n    url: options.url,\n    urls: options.urls,\n    wrapX: options.wrapX,\n    transition: options.transition\n  });\n\n  /**\n   * @protected\n   * @type {?string}\n   */\n  this.crossOrigin =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n  /**\n   * @protected\n   * @type {function(new: ol.ImageTile, ol.TileCoord, ol.TileState, string,\n   *        ?string, ol.TileLoadFunctionType, olx.TileOptions=)}\n   */\n  this.tileClass = options.tileClass !== undefined ?\n    options.tileClass : ol.ImageTile;\n\n  /**\n   * @protected\n   * @type {Object.<string, ol.TileCache>}\n   */\n  this.tileCacheForProjection = {};\n\n  /**\n   * @protected\n   * @type {Object.<string, ol.tilegrid.TileGrid>}\n   */\n  this.tileGridForProjection = {};\n\n  /**\n   * @private\n   * @type {number|undefined}\n   */\n  this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.renderReprojectionEdges_ = false;\n};\nol.inherits(ol.source.TileImage, ol.source.UrlTile);\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.canExpireCache = function() {\n  if (!ol.ENABLE_RASTER_REPROJECTION) {\n    return ol.source.UrlTile.prototype.canExpireCache.call(this);\n  }\n  if (this.tileCache.canExpireCache()) {\n    return true;\n  } else {\n    for (var key in this.tileCacheForProjection) {\n      if (this.tileCacheForProjection[key].canExpireCache()) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.expireCache = function(projection, usedTiles) {\n  if (!ol.ENABLE_RASTER_REPROJECTION) {\n    ol.source.UrlTile.prototype.expireCache.call(this, projection, usedTiles);\n    return;\n  }\n  var usedTileCache = this.getTileCacheForProjection(projection);\n\n  this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});\n  for (var id in this.tileCacheForProjection) {\n    var tileCache = this.tileCacheForProjection[id];\n    tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.getGutter = function(projection) {\n  if (ol.ENABLE_RASTER_REPROJECTION &&\n      this.getProjection() && projection &&\n      !ol.proj.equivalent(this.getProjection(), projection)) {\n    return 0;\n  } else {\n    return this.getGutterInternal();\n  }\n};\n\n\n/**\n * @protected\n * @return {number} Gutter.\n */\nol.source.TileImage.prototype.getGutterInternal = function() {\n  return 0;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.getOpaque = function(projection) {\n  if (ol.ENABLE_RASTER_REPROJECTION &&\n      this.getProjection() && projection &&\n      !ol.proj.equivalent(this.getProjection(), projection)) {\n    return false;\n  } else {\n    return ol.source.UrlTile.prototype.getOpaque.call(this, projection);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.getTileGridForProjection = function(projection) {\n  if (!ol.ENABLE_RASTER_REPROJECTION) {\n    return ol.source.UrlTile.prototype.getTileGridForProjection.call(this, projection);\n  }\n  var thisProj = this.getProjection();\n  if (this.tileGrid &&\n      (!thisProj || ol.proj.equivalent(thisProj, projection))) {\n    return this.tileGrid;\n  } else {\n    var projKey = ol.getUid(projection).toString();\n    if (!(projKey in this.tileGridForProjection)) {\n      this.tileGridForProjection[projKey] =\n          ol.tilegrid.getForProjection(projection);\n    }\n    return /** @type {!ol.tilegrid.TileGrid} */ (this.tileGridForProjection[projKey]);\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.getTileCacheForProjection = function(projection) {\n  if (!ol.ENABLE_RASTER_REPROJECTION) {\n    return ol.source.UrlTile.prototype.getTileCacheForProjection.call(this, projection);\n  }\n  var thisProj = this.getProjection();\n  if (!thisProj || ol.proj.equivalent(thisProj, projection)) {\n    return this.tileCache;\n  } else {\n    var projKey = ol.getUid(projection).toString();\n    if (!(projKey in this.tileCacheForProjection)) {\n      this.tileCacheForProjection[projKey] = new ol.TileCache(this.tileCache.highWaterMark);\n    }\n    return this.tileCacheForProjection[projKey];\n  }\n};\n\n\n/**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {string} key The key set on the tile.\n * @return {!ol.Tile} Tile.\n * @private\n */\nol.source.TileImage.prototype.createTile_ = function(z, x, y, pixelRatio, projection, key) {\n  var tileCoord = [z, x, y];\n  var urlTileCoord = this.getTileCoordForTileUrlFunction(\n      tileCoord, projection);\n  var tileUrl = urlTileCoord ?\n    this.tileUrlFunction(urlTileCoord, pixelRatio, projection) : undefined;\n  var tile = new this.tileClass(\n      tileCoord,\n      tileUrl !== undefined ? ol.TileState.IDLE : ol.TileState.EMPTY,\n      tileUrl !== undefined ? tileUrl : '',\n      this.crossOrigin,\n      this.tileLoadFunction,\n      this.tileOptions);\n  tile.key = key;\n  ol.events.listen(tile, ol.events.EventType.CHANGE,\n      this.handleTileChange, this);\n  return tile;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileImage.prototype.getTile = function(z, x, y, pixelRatio, projection) {\n  var sourceProjection = /** @type {!ol.proj.Projection} */ (this.getProjection());\n  if (!ol.ENABLE_RASTER_REPROJECTION ||\n      !sourceProjection || !projection ||\n      ol.proj.equivalent(sourceProjection, projection)) {\n    return this.getTileInternal(z, x, y, pixelRatio, sourceProjection || projection);\n  } else {\n    var cache = this.getTileCacheForProjection(projection);\n    var tileCoord = [z, x, y];\n    var tile;\n    var tileCoordKey = ol.tilecoord.getKey(tileCoord);\n    if (cache.containsKey(tileCoordKey)) {\n      tile = /** @type {!ol.Tile} */ (cache.get(tileCoordKey));\n    }\n    var key = this.getKey();\n    if (tile && tile.key == key) {\n      return tile;\n    } else {\n      var sourceTileGrid = this.getTileGridForProjection(sourceProjection);\n      var targetTileGrid = this.getTileGridForProjection(projection);\n      var wrappedTileCoord =\n          this.getTileCoordForTileUrlFunction(tileCoord, projection);\n      var newTile = new ol.reproj.Tile(\n          sourceProjection, sourceTileGrid,\n          projection, targetTileGrid,\n          tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio),\n          this.getGutterInternal(),\n          function(z, x, y, pixelRatio) {\n            return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);\n          }.bind(this), this.reprojectionErrorThreshold_,\n          this.renderReprojectionEdges_);\n      newTile.key = key;\n\n      if (tile) {\n        newTile.interimTile = tile;\n        newTile.refreshInterimChain();\n        cache.replace(tileCoordKey, newTile);\n      } else {\n        cache.set(tileCoordKey, newTile);\n      }\n      return newTile;\n    }\n  }\n};\n\n\n/**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {!ol.proj.Projection} projection Projection.\n * @return {!ol.Tile} Tile.\n * @protected\n */\nol.source.TileImage.prototype.getTileInternal = function(z, x, y, pixelRatio, projection) {\n  var tile = null;\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  var key = this.getKey();\n  if (!this.tileCache.containsKey(tileCoordKey)) {\n    tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n    this.tileCache.set(tileCoordKey, tile);\n  } else {\n    tile = this.tileCache.get(tileCoordKey);\n    if (tile.key != key) {\n      // The source's params changed. If the tile has an interim tile and if we\n      // can use it then we use it. Otherwise we create a new tile.  In both\n      // cases we attempt to assign an interim tile to the new tile.\n      var interimTile = tile;\n      tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n\n      //make the new tile the head of the list,\n      if (interimTile.getState() == ol.TileState.IDLE) {\n        //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it\n        tile.interimTile = interimTile.interimTile;\n      } else {\n        tile.interimTile = interimTile;\n      }\n      tile.refreshInterimChain();\n      this.tileCache.replace(tileCoordKey, tile);\n    }\n  }\n  return tile;\n};\n\n\n/**\n * Sets whether to render reprojection edges or not (usually for debugging).\n * @param {boolean} render Render the edges.\n * @api\n */\nol.source.TileImage.prototype.setRenderReprojectionEdges = function(render) {\n  if (!ol.ENABLE_RASTER_REPROJECTION ||\n      this.renderReprojectionEdges_ == render) {\n    return;\n  }\n  this.renderReprojectionEdges_ = render;\n  for (var id in this.tileCacheForProjection) {\n    this.tileCacheForProjection[id].clear();\n  }\n  this.changed();\n};\n\n\n/**\n * Sets the tile grid to use when reprojecting the tiles to the given\n * projection instead of the default tile grid for the projection.\n *\n * This can be useful when the default tile grid cannot be created\n * (e.g. projection has no extent defined) or\n * for optimization reasons (custom tile size, resolutions, ...).\n *\n * @param {ol.ProjectionLike} projection Projection.\n * @param {ol.tilegrid.TileGrid} tilegrid Tile grid to use for the projection.\n * @api\n */\nol.source.TileImage.prototype.setTileGridForProjection = function(projection, tilegrid) {\n  if (ol.ENABLE_RASTER_REPROJECTION) {\n    var proj = ol.proj.get(projection);\n    if (proj) {\n      var projKey = ol.getUid(proj).toString();\n      if (!(projKey in this.tileGridForProjection)) {\n        this.tileGridForProjection[projKey] = tilegrid;\n      }\n    }\n  }\n};\n\n\n/**\n * @param {ol.ImageTile} imageTile Image tile.\n * @param {string} src Source.\n */\nol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) {\n  imageTile.getImage().src = src;\n};\n\ngoog.provide('ol.source.BingMaps');\n\ngoog.require('ol');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.extent');\ngoog.require('ol.net');\ngoog.require('ol.proj');\ngoog.require('ol.source.State');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.tilecoord');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Layer source for Bing Maps tile data.\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.BingMapsOptions} options Bing Maps options.\n * @api\n */\nol.source.BingMaps = function(options) {\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : false;\n\n  ol.source.TileImage.call(this, {\n    cacheSize: options.cacheSize,\n    crossOrigin: 'anonymous',\n    opaque: true,\n    projection: ol.proj.get('EPSG:3857'),\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    state: ol.source.State.LOADING,\n    tileLoadFunction: options.tileLoadFunction,\n    tilePixelRatio: this.hidpi_ ? 2 : 1,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    transition: options.transition\n  });\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.culture_ = options.culture !== undefined ? options.culture : 'en-us';\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.maxZoom_ = options.maxZoom !== undefined ? options.maxZoom : -1;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.apiKey_ = options.key;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.imagerySet_ = options.imagerySet;\n\n  var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/' +\n      this.imagerySet_ +\n      '?uriScheme=https&include=ImageryProviders&key=' + this.apiKey_ +\n      '&c=' + this.culture_;\n\n  ol.net.jsonp(url, this.handleImageryMetadataResponse.bind(this), undefined,\n      'jsonp');\n\n};\nol.inherits(ol.source.BingMaps, ol.source.TileImage);\n\n\n/**\n * The attribution containing a link to the Microsoft® Bing™ Maps Platform APIs’\n * Terms Of Use.\n * @const\n * @type {string}\n * @api\n */\nol.source.BingMaps.TOS_ATTRIBUTION = '<a class=\"ol-attribution-bing-tos\" ' +\n      'href=\"https://www.microsoft.com/maps/product/terms.html\">' +\n      'Terms of Use</a>';\n\n\n/**\n * Get the api key used for this source.\n *\n * @return {string} The api key.\n * @api\n */\nol.source.BingMaps.prototype.getApiKey = function() {\n  return this.apiKey_;\n};\n\n\n/**\n * Get the imagery set associated with this source.\n *\n * @return {string} The imagery set.\n * @api\n */\nol.source.BingMaps.prototype.getImagerySet = function() {\n  return this.imagerySet_;\n};\n\n\n/**\n * @param {BingMapsImageryMetadataResponse} response Response.\n */\nol.source.BingMaps.prototype.handleImageryMetadataResponse = function(response) {\n  if (response.statusCode != 200 ||\n      response.statusDescription != 'OK' ||\n      response.authenticationResultCode != 'ValidCredentials' ||\n      response.resourceSets.length != 1 ||\n      response.resourceSets[0].resources.length != 1) {\n    this.setState(ol.source.State.ERROR);\n    return;\n  }\n\n  var brandLogoUri = response.brandLogoUri;\n  if (brandLogoUri.indexOf('https') == -1) {\n    brandLogoUri = brandLogoUri.replace('http', 'https');\n  }\n  //var copyright = response.copyright;  // FIXME do we need to display this?\n  var resource = response.resourceSets[0].resources[0];\n  var maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;\n\n  var sourceProjection = this.getProjection();\n  var extent = ol.tilegrid.extentFromProjection(sourceProjection);\n  var tileSize = resource.imageWidth == resource.imageHeight ?\n    resource.imageWidth : [resource.imageWidth, resource.imageHeight];\n  var tileGrid = ol.tilegrid.createXYZ({\n    extent: extent,\n    minZoom: resource.zoomMin,\n    maxZoom: maxZoom,\n    tileSize: tileSize / (this.hidpi_ ? 2 : 1)\n  });\n  this.tileGrid = tileGrid;\n\n  var culture = this.culture_;\n  var hidpi = this.hidpi_;\n  this.tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(\n      resource.imageUrlSubdomains.map(function(subdomain) {\n        var quadKeyTileCoord = [0, 0, 0];\n        var imageUrl = resource.imageUrl\n            .replace('{subdomain}', subdomain)\n            .replace('{culture}', culture);\n        return (\n          /**\n           * @param {ol.TileCoord} tileCoord Tile coordinate.\n           * @param {number} pixelRatio Pixel ratio.\n           * @param {ol.proj.Projection} projection Projection.\n           * @return {string|undefined} Tile URL.\n           */\n          function(tileCoord, pixelRatio, projection) {\n            if (!tileCoord) {\n              return undefined;\n            } else {\n              ol.tilecoord.createOrUpdate(tileCoord[0], tileCoord[1],\n                  -tileCoord[2] - 1, quadKeyTileCoord);\n              var url = imageUrl;\n              if (hidpi) {\n                url += '&dpi=d1&device=mobile';\n              }\n              return url.replace('{quadkey}', ol.tilecoord.quadKey(\n                  quadKeyTileCoord));\n            }\n          });\n      }));\n\n  if (resource.imageryProviders) {\n    var transform = ol.proj.getTransformFromProjections(\n        ol.proj.get('EPSG:4326'), this.getProjection());\n\n    this.setAttributions(function(frameState) {\n      var attributions = [];\n      var zoom = frameState.viewState.zoom;\n      resource.imageryProviders.map(function(imageryProvider) {\n        var intersects = false;\n        var coverageAreas = imageryProvider.coverageAreas;\n        for (var i = 0, ii = coverageAreas.length; i < ii; ++i) {\n          var coverageArea = coverageAreas[i];\n          if (zoom >= coverageArea.zoomMin && zoom <= coverageArea.zoomMax) {\n            var bbox = coverageArea.bbox;\n            var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];\n            var extent = ol.extent.applyTransform(epsg4326Extent, transform);\n            if (ol.extent.intersects(extent, frameState.extent)) {\n              intersects = true;\n              break;\n            }\n          }\n        }\n        if (intersects) {\n          attributions.push(imageryProvider.attribution);\n        }\n      });\n\n      attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);\n      return attributions;\n    });\n  }\n\n  this.setLogo(brandLogoUri);\n\n  this.setState(ol.source.State.READY);\n};\n\ngoog.provide('ol.source.XYZ');\n\ngoog.require('ol');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Layer source for tile data with URLs in a set XYZ format that are\n * defined in a URL template. By default, this follows the widely-used\n * Google grid where `x` 0 and `y` 0 are in the top left. Grids like\n * TMS where `x` 0 and `y` 0 are in the bottom left can be used by\n * using the `{-y}` placeholder in the URL template, so long as the\n * source does not have a custom tile grid. In this case,\n * {@link ol.source.TileImage} can be used with a `tileUrlFunction`\n * such as:\n *\n *  tileUrlFunction: function(coordinate) {\n *    return 'http://mapserver.com/' + coordinate[0] + '/' +\n *        coordinate[1] + '/' + coordinate[2] + '.png';\n *    }\n *\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.XYZOptions=} opt_options XYZ options.\n * @api\n */\nol.source.XYZ = function(opt_options) {\n  var options = opt_options || {};\n  var projection = options.projection !== undefined ?\n    options.projection : 'EPSG:3857';\n\n  var tileGrid = options.tileGrid !== undefined ? options.tileGrid :\n    ol.tilegrid.createXYZ({\n      extent: ol.tilegrid.extentFromProjection(projection),\n      maxZoom: options.maxZoom,\n      minZoom: options.minZoom,\n      tileSize: options.tileSize\n    });\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    opaque: options.opaque,\n    projection: projection,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileGrid: tileGrid,\n    tileLoadFunction: options.tileLoadFunction,\n    tilePixelRatio: options.tilePixelRatio,\n    tileUrlFunction: options.tileUrlFunction,\n    url: options.url,\n    urls: options.urls,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    transition: options.transition\n  });\n\n};\nol.inherits(ol.source.XYZ, ol.source.TileImage);\n\ngoog.provide('ol.source.CartoDB');\n\ngoog.require('ol');\ngoog.require('ol.obj');\ngoog.require('ol.source.State');\ngoog.require('ol.source.XYZ');\n\n\n/**\n * @classdesc\n * Layer source for the CartoDB Maps API.\n *\n * @constructor\n * @extends {ol.source.XYZ}\n * @param {olx.source.CartoDBOptions} options CartoDB options.\n * @api\n */\nol.source.CartoDB = function(options) {\n\n  /**\n   * @type {string}\n   * @private\n   */\n  this.account_ = options.account;\n\n  /**\n   * @type {string}\n   * @private\n   */\n  this.mapId_ = options.map || '';\n\n  /**\n   * @type {!Object}\n   * @private\n   */\n  this.config_ = options.config || {};\n\n  /**\n   * @type {!Object.<string, CartoDBLayerInfo>}\n   * @private\n   */\n  this.templateCache_ = {};\n\n  ol.source.XYZ.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    maxZoom: options.maxZoom !== undefined ? options.maxZoom : 18,\n    minZoom: options.minZoom,\n    projection: options.projection,\n    state: ol.source.State.LOADING,\n    wrapX: options.wrapX\n  });\n  this.initializeMap_();\n};\nol.inherits(ol.source.CartoDB, ol.source.XYZ);\n\n\n/**\n * Returns the current config.\n * @return {!Object} The current configuration.\n * @api\n */\nol.source.CartoDB.prototype.getConfig = function() {\n  return this.config_;\n};\n\n\n/**\n * Updates the carto db config.\n * @param {Object} config a key-value lookup. Values will replace current values\n *     in the config.\n * @api\n */\nol.source.CartoDB.prototype.updateConfig = function(config) {\n  ol.obj.assign(this.config_, config);\n  this.initializeMap_();\n};\n\n\n/**\n * Sets the CartoDB config\n * @param {Object} config In the case of anonymous maps, a CartoDB configuration\n *     object.\n * If using named maps, a key-value lookup with the template parameters.\n * @api\n */\nol.source.CartoDB.prototype.setConfig = function(config) {\n  this.config_ = config || {};\n  this.initializeMap_();\n};\n\n\n/**\n * Issue a request to initialize the CartoDB map.\n * @private\n */\nol.source.CartoDB.prototype.initializeMap_ = function() {\n  var paramHash = JSON.stringify(this.config_);\n  if (this.templateCache_[paramHash]) {\n    this.applyTemplate_(this.templateCache_[paramHash]);\n    return;\n  }\n  var mapUrl = 'https://' + this.account_ + '.carto.com/api/v1/map';\n\n  if (this.mapId_) {\n    mapUrl += '/named/' + this.mapId_;\n  }\n\n  var client = new XMLHttpRequest();\n  client.addEventListener('load', this.handleInitResponse_.bind(this, paramHash));\n  client.addEventListener('error', this.handleInitError_.bind(this));\n  client.open('POST', mapUrl);\n  client.setRequestHeader('Content-type', 'application/json');\n  client.send(JSON.stringify(this.config_));\n};\n\n\n/**\n * Handle map initialization response.\n * @param {string} paramHash a hash representing the parameter set that was used\n *     for the request\n * @param {Event} event Event.\n * @private\n */\nol.source.CartoDB.prototype.handleInitResponse_ = function(paramHash, event) {\n  var client = /** @type {XMLHttpRequest} */ (event.target);\n  // status will be 0 for file:// urls\n  if (!client.status || client.status >= 200 && client.status < 300) {\n    var response;\n    try {\n      response = /** @type {CartoDBLayerInfo} */(JSON.parse(client.responseText));\n    } catch (err) {\n      this.setState(ol.source.State.ERROR);\n      return;\n    }\n    this.applyTemplate_(response);\n    this.templateCache_[paramHash] = response;\n    this.setState(ol.source.State.READY);\n  } else {\n    this.setState(ol.source.State.ERROR);\n  }\n};\n\n\n/**\n * @private\n * @param {Event} event Event.\n */\nol.source.CartoDB.prototype.handleInitError_ = function(event) {\n  this.setState(ol.source.State.ERROR);\n};\n\n\n/**\n * Apply the new tile urls returned by carto db\n * @param {CartoDBLayerInfo} data Result of carto db call.\n * @private\n */\nol.source.CartoDB.prototype.applyTemplate_ = function(data) {\n  var tilesUrl = 'https://' + data.cdn_url.https + '/' + this.account_ +\n      '/api/v1/map/' + data.layergroupid + '/{z}/{x}/{y}.png';\n  this.setUrl(tilesUrl);\n};\n\n// FIXME keep cluster cache by resolution ?\n// FIXME distance not respected because of the centroid\n\ngoog.provide('ol.source.Cluster');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.Feature');\ngoog.require('ol.coordinate');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.geom.Point');\ngoog.require('ol.source.Vector');\n\n\n/**\n * @classdesc\n * Layer source to cluster vector data. Works out of the box with point\n * geometries. For other geometry types, or if not all geometries should be\n * considered for clustering, a custom `geometryFunction` can be defined.\n *\n * @constructor\n * @param {olx.source.ClusterOptions} options Constructor options.\n * @extends {ol.source.Vector}\n * @api\n */\nol.source.Cluster = function(options) {\n  ol.source.Vector.call(this, {\n    attributions: options.attributions,\n    extent: options.extent,\n    logo: options.logo,\n    projection: options.projection,\n    wrapX: options.wrapX\n  });\n\n  /**\n   * @type {number|undefined}\n   * @protected\n   */\n  this.resolution = undefined;\n\n  /**\n   * @type {number}\n   * @protected\n   */\n  this.distance = options.distance !== undefined ? options.distance : 20;\n\n  /**\n   * @type {Array.<ol.Feature>}\n   * @protected\n   */\n  this.features = [];\n\n  /**\n   * @param {ol.Feature} feature Feature.\n   * @return {ol.geom.Point} Cluster calculation point.\n   * @protected\n   */\n  this.geometryFunction = options.geometryFunction || function(feature) {\n    var geometry = /** @type {ol.geom.Point} */ (feature.getGeometry());\n    ol.asserts.assert(geometry instanceof ol.geom.Point,\n        10); // The default `geometryFunction` can only handle `ol.geom.Point` geometries\n    return geometry;\n  };\n\n  /**\n   * @type {ol.source.Vector}\n   * @protected\n   */\n  this.source = options.source;\n\n  this.source.on(ol.events.EventType.CHANGE,\n      ol.source.Cluster.prototype.refresh, this);\n};\nol.inherits(ol.source.Cluster, ol.source.Vector);\n\n\n/**\n * Get the distance in pixels between clusters.\n * @return {number} Distance.\n * @api\n */\nol.source.Cluster.prototype.getDistance = function() {\n  return this.distance;\n};\n\n\n/**\n * Get a reference to the wrapped source.\n * @return {ol.source.Vector} Source.\n * @api\n */\nol.source.Cluster.prototype.getSource = function() {\n  return this.source;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.Cluster.prototype.loadFeatures = function(extent, resolution,\n    projection) {\n  this.source.loadFeatures(extent, resolution, projection);\n  if (resolution !== this.resolution) {\n    this.clear();\n    this.resolution = resolution;\n    this.cluster();\n    this.addFeatures(this.features);\n  }\n};\n\n\n/**\n * Set the distance in pixels between clusters.\n * @param {number} distance The distance in pixels.\n * @api\n */\nol.source.Cluster.prototype.setDistance = function(distance) {\n  this.distance = distance;\n  this.refresh();\n};\n\n\n/**\n * handle the source changing\n * @override\n */\nol.source.Cluster.prototype.refresh = function() {\n  this.clear();\n  this.cluster();\n  this.addFeatures(this.features);\n  ol.source.Vector.prototype.refresh.call(this);\n};\n\n\n/**\n * @protected\n */\nol.source.Cluster.prototype.cluster = function() {\n  if (this.resolution === undefined) {\n    return;\n  }\n  this.features.length = 0;\n  var extent = ol.extent.createEmpty();\n  var mapDistance = this.distance * this.resolution;\n  var features = this.source.getFeatures();\n\n  /**\n   * @type {!Object.<string, boolean>}\n   */\n  var clustered = {};\n\n  for (var i = 0, ii = features.length; i < ii; i++) {\n    var feature = features[i];\n    if (!(ol.getUid(feature).toString() in clustered)) {\n      var geometry = this.geometryFunction(feature);\n      if (geometry) {\n        var coordinates = geometry.getCoordinates();\n        ol.extent.createOrUpdateFromCoordinate(coordinates, extent);\n        ol.extent.buffer(extent, mapDistance, extent);\n\n        var neighbors = this.source.getFeaturesInExtent(extent);\n        neighbors = neighbors.filter(function(neighbor) {\n          var uid = ol.getUid(neighbor).toString();\n          if (!(uid in clustered)) {\n            clustered[uid] = true;\n            return true;\n          } else {\n            return false;\n          }\n        });\n        this.features.push(this.createCluster(neighbors));\n      }\n    }\n  }\n};\n\n\n/**\n * @param {Array.<ol.Feature>} features Features\n * @return {ol.Feature} The cluster feature.\n * @protected\n */\nol.source.Cluster.prototype.createCluster = function(features) {\n  var centroid = [0, 0];\n  for (var i = features.length - 1; i >= 0; --i) {\n    var geometry = this.geometryFunction(features[i]);\n    if (geometry) {\n      ol.coordinate.add(centroid, geometry.getCoordinates());\n    } else {\n      features.splice(i, 1);\n    }\n  }\n  ol.coordinate.scale(centroid, 1 / features.length);\n\n  var cluster = new ol.Feature(new ol.geom.Point(centroid));\n  cluster.set('features', features);\n  return cluster;\n};\n\ngoog.provide('ol.source.Image');\n\ngoog.require('ol');\ngoog.require('ol.ImageState');\ngoog.require('ol.array');\ngoog.require('ol.events.Event');\ngoog.require('ol.extent');\ngoog.require('ol.proj');\ngoog.require('ol.reproj.Image');\ngoog.require('ol.source.Source');\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing a single image.\n *\n * @constructor\n * @abstract\n * @extends {ol.source.Source}\n * @param {ol.SourceImageOptions} options Single image source options.\n * @api\n */\nol.source.Image = function(options) {\n  ol.source.Source.call(this, {\n    attributions: options.attributions,\n    extent: options.extent,\n    logo: options.logo,\n    projection: options.projection,\n    state: options.state\n  });\n\n  /**\n   * @private\n   * @type {Array.<number>}\n   */\n  this.resolutions_ = options.resolutions !== undefined ?\n    options.resolutions : null;\n\n\n  /**\n   * @private\n   * @type {ol.reproj.Image}\n   */\n  this.reprojectedImage_ = null;\n\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.reprojectedRevision_ = 0;\n};\nol.inherits(ol.source.Image, ol.source.Source);\n\n\n/**\n * @return {Array.<number>} Resolutions.\n * @override\n */\nol.source.Image.prototype.getResolutions = function() {\n  return this.resolutions_;\n};\n\n\n/**\n * @protected\n * @param {number} resolution Resolution.\n * @return {number} Resolution.\n */\nol.source.Image.prototype.findNearestResolution = function(resolution) {\n  if (this.resolutions_) {\n    var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0);\n    resolution = this.resolutions_[idx];\n  }\n  return resolution;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @return {ol.ImageBase} Single image.\n */\nol.source.Image.prototype.getImage = function(extent, resolution, pixelRatio, projection) {\n  var sourceProjection = this.getProjection();\n  if (!ol.ENABLE_RASTER_REPROJECTION ||\n      !sourceProjection ||\n      !projection ||\n      ol.proj.equivalent(sourceProjection, projection)) {\n    if (sourceProjection) {\n      projection = sourceProjection;\n    }\n    return this.getImageInternal(extent, resolution, pixelRatio, projection);\n  } else {\n    if (this.reprojectedImage_) {\n      if (this.reprojectedRevision_ == this.getRevision() &&\n          ol.proj.equivalent(\n              this.reprojectedImage_.getProjection(), projection) &&\n          this.reprojectedImage_.getResolution() == resolution &&\n          ol.extent.equals(this.reprojectedImage_.getExtent(), extent)) {\n        return this.reprojectedImage_;\n      }\n      this.reprojectedImage_.dispose();\n      this.reprojectedImage_ = null;\n    }\n\n    this.reprojectedImage_ = new ol.reproj.Image(\n        sourceProjection, projection, extent, resolution, pixelRatio,\n        function(extent, resolution, pixelRatio) {\n          return this.getImageInternal(extent, resolution,\n              pixelRatio, sourceProjection);\n        }.bind(this));\n    this.reprojectedRevision_ = this.getRevision();\n\n    return this.reprojectedImage_;\n  }\n};\n\n\n/**\n * @abstract\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @return {ol.ImageBase} Single image.\n * @protected\n */\nol.source.Image.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {};\n\n\n/**\n * Handle image change events.\n * @param {ol.events.Event} event Event.\n * @protected\n */\nol.source.Image.prototype.handleImageChange = function(event) {\n  var image = /** @type {ol.Image} */ (event.target);\n  switch (image.getState()) {\n    case ol.ImageState.LOADING:\n      this.dispatchEvent(\n          new ol.source.Image.Event(ol.source.Image.EventType_.IMAGELOADSTART,\n              image));\n      break;\n    case ol.ImageState.LOADED:\n      this.dispatchEvent(\n          new ol.source.Image.Event(ol.source.Image.EventType_.IMAGELOADEND,\n              image));\n      break;\n    case ol.ImageState.ERROR:\n      this.dispatchEvent(\n          new ol.source.Image.Event(ol.source.Image.EventType_.IMAGELOADERROR,\n              image));\n      break;\n    default:\n      // pass\n  }\n};\n\n\n/**\n * Default image load function for image sources that use ol.Image image\n * instances.\n * @param {ol.Image} image Image.\n * @param {string} src Source.\n */\nol.source.Image.defaultImageLoadFunction = function(image, src) {\n  image.getImage().src = src;\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.source.Image} instances are instances of this\n * type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.source.ImageEvent}\n * @param {string} type Type.\n * @param {ol.Image} image The image.\n */\nol.source.Image.Event = function(type, image) {\n\n  ol.events.Event.call(this, type);\n\n  /**\n   * The image related to the event.\n   * @type {ol.Image}\n   * @api\n   */\n  this.image = image;\n\n};\nol.inherits(ol.source.Image.Event, ol.events.Event);\n\n\n/**\n * @enum {string}\n * @private\n */\nol.source.Image.EventType_ = {\n\n  /**\n   * Triggered when an image starts loading.\n   * @event ol.source.Image.Event#imageloadstart\n   * @api\n   */\n  IMAGELOADSTART: 'imageloadstart',\n\n  /**\n   * Triggered when an image finishes loading.\n   * @event ol.source.Image.Event#imageloadend\n   * @api\n   */\n  IMAGELOADEND: 'imageloadend',\n\n  /**\n   * Triggered if image loading results in an error.\n   * @event ol.source.Image.Event#imageloaderror\n   * @api\n   */\n  IMAGELOADERROR: 'imageloaderror'\n\n};\n\ngoog.provide('ol.uri');\n\n\n/**\n * Appends query parameters to a URI.\n *\n * @param {string} uri The original URI, which may already have query data.\n * @param {!Object} params An object where keys are URI-encoded parameter keys,\n *     and the values are arbitrary types or arrays.\n * @return {string} The new URI.\n */\nol.uri.appendParams = function(uri, params) {\n  var keyParams = [];\n  // Skip any null or undefined parameter values\n  Object.keys(params).forEach(function(k) {\n    if (params[k] !== null && params[k] !== undefined) {\n      keyParams.push(k + '=' + encodeURIComponent(params[k]));\n    }\n  });\n  var qs = keyParams.join('&');\n  // remove any trailing ? or &\n  uri = uri.replace(/[?&]$/, '');\n  // append ? or & depending on whether uri has existing parameters\n  uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';\n  return uri + qs;\n};\n\ngoog.provide('ol.source.ImageArcGISRest');\n\ngoog.require('ol');\ngoog.require('ol.Image');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.source.Image');\ngoog.require('ol.uri');\n\n\n/**\n * @classdesc\n * Source for data from ArcGIS Rest services providing single, untiled images.\n * Useful when underlying map service has labels.\n *\n * If underlying map service is not using labels,\n * take advantage of ol image caching and use\n * {@link ol.source.TileArcGISRest} data source.\n *\n * @constructor\n * @fires ol.source.Image.Event\n * @extends {ol.source.Image}\n * @param {olx.source.ImageArcGISRestOptions=} opt_options Image ArcGIS Rest Options.\n * @api\n */\nol.source.ImageArcGISRest = function(opt_options) {\n\n  var options = opt_options || {};\n\n  ol.source.Image.call(this, {\n    attributions: options.attributions,\n    logo: options.logo,\n    projection: options.projection,\n    resolutions: options.resolutions\n  });\n\n  /**\n   * @private\n   * @type {?string}\n   */\n  this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.url_ = options.url;\n\n  /**\n   * @private\n   * @type {ol.ImageLoadFunctionType}\n   */\n  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?\n    options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;\n\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.params_ = options.params || {};\n\n  /**\n   * @private\n   * @type {ol.Image}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.imageSize_ = [0, 0];\n\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;\n\n};\nol.inherits(ol.source.ImageArcGISRest, ol.source.Image);\n\n\n/**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\nol.source.ImageArcGISRest.prototype.getParams = function() {\n  return this.params_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageArcGISRest.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {\n\n  if (this.url_ === undefined) {\n    return null;\n  }\n\n  resolution = this.findNearestResolution(resolution);\n  pixelRatio = this.hidpi_ ? pixelRatio : 1;\n\n  var image = this.image_;\n  if (image &&\n      this.renderedRevision_ == this.getRevision() &&\n      image.getResolution() == resolution &&\n      image.getPixelRatio() == pixelRatio &&\n      ol.extent.containsExtent(image.getExtent(), extent)) {\n    return image;\n  }\n\n  var params = {\n    'F': 'image',\n    'FORMAT': 'PNG32',\n    'TRANSPARENT': true\n  };\n  ol.obj.assign(params, this.params_);\n\n  extent = extent.slice();\n  var centerX = (extent[0] + extent[2]) / 2;\n  var centerY = (extent[1] + extent[3]) / 2;\n  if (this.ratio_ != 1) {\n    var halfWidth = this.ratio_ * ol.extent.getWidth(extent) / 2;\n    var halfHeight = this.ratio_ * ol.extent.getHeight(extent) / 2;\n    extent[0] = centerX - halfWidth;\n    extent[1] = centerY - halfHeight;\n    extent[2] = centerX + halfWidth;\n    extent[3] = centerY + halfHeight;\n  }\n\n  var imageResolution = resolution / pixelRatio;\n\n  // Compute an integer width and height.\n  var width = Math.ceil(ol.extent.getWidth(extent) / imageResolution);\n  var height = Math.ceil(ol.extent.getHeight(extent) / imageResolution);\n\n  // Modify the extent to match the integer width and height.\n  extent[0] = centerX - imageResolution * width / 2;\n  extent[2] = centerX + imageResolution * width / 2;\n  extent[1] = centerY - imageResolution * height / 2;\n  extent[3] = centerY + imageResolution * height / 2;\n\n  this.imageSize_[0] = width;\n  this.imageSize_[1] = height;\n\n  var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio,\n      projection, params);\n\n  this.image_ = new ol.Image(extent, resolution, pixelRatio,\n      url, this.crossOrigin_, this.imageLoadFunction_);\n\n  this.renderedRevision_ = this.getRevision();\n\n  ol.events.listen(this.image_, ol.events.EventType.CHANGE,\n      this.handleImageChange, this);\n\n  return this.image_;\n\n};\n\n\n/**\n * Return the image load function of the source.\n * @return {ol.ImageLoadFunctionType} The image load function.\n * @api\n */\nol.source.ImageArcGISRest.prototype.getImageLoadFunction = function() {\n  return this.imageLoadFunction_;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {Object} params Params.\n * @return {string} Request URL.\n * @private\n */\nol.source.ImageArcGISRest.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) {\n  // ArcGIS Server only wants the numeric portion of the projection ID.\n  var srid = projection.getCode().split(':').pop();\n\n  params['SIZE'] = size[0] + ',' + size[1];\n  params['BBOX'] = extent.join(',');\n  params['BBOXSR'] = srid;\n  params['IMAGESR'] = srid;\n  params['DPI'] = Math.round(90 * pixelRatio);\n\n  var url = this.url_;\n\n  var modifiedUrl = url\n      .replace(/MapServer\\/?$/, 'MapServer/export')\n      .replace(/ImageServer\\/?$/, 'ImageServer/exportImage');\n  if (modifiedUrl == url) {\n    ol.asserts.assert(false, 50); // `options.featureTypes` should be an Array\n  }\n  return ol.uri.appendParams(modifiedUrl, params);\n};\n\n\n/**\n * Return the URL used for this ArcGIS source.\n * @return {string|undefined} URL.\n * @api\n */\nol.source.ImageArcGISRest.prototype.getUrl = function() {\n  return this.url_;\n};\n\n\n/**\n * Set the image load function of the source.\n * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.\n * @api\n */\nol.source.ImageArcGISRest.prototype.setImageLoadFunction = function(imageLoadFunction) {\n  this.image_ = null;\n  this.imageLoadFunction_ = imageLoadFunction;\n  this.changed();\n};\n\n\n/**\n * Set the URL to use for requests.\n * @param {string|undefined} url URL.\n * @api\n */\nol.source.ImageArcGISRest.prototype.setUrl = function(url) {\n  if (url != this.url_) {\n    this.url_ = url;\n    this.image_ = null;\n    this.changed();\n  }\n};\n\n\n/**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\nol.source.ImageArcGISRest.prototype.updateParams = function(params) {\n  ol.obj.assign(this.params_, params);\n  this.image_ = null;\n  this.changed();\n};\n\ngoog.provide('ol.source.ImageCanvas');\n\ngoog.require('ol');\ngoog.require('ol.ImageCanvas');\ngoog.require('ol.extent');\ngoog.require('ol.source.Image');\n\n\n/**\n * @classdesc\n * Base class for image sources where a canvas element is the image.\n *\n * @constructor\n * @extends {ol.source.Image}\n * @param {olx.source.ImageCanvasOptions} options Constructor options.\n * @api\n */\nol.source.ImageCanvas = function(options) {\n\n  ol.source.Image.call(this, {\n    attributions: options.attributions,\n    logo: options.logo,\n    projection: options.projection,\n    resolutions: options.resolutions,\n    state: options.state\n  });\n\n  /**\n   * @private\n   * @type {ol.CanvasFunctionType}\n   */\n  this.canvasFunction_ = options.canvasFunction;\n\n  /**\n   * @private\n   * @type {ol.ImageCanvas}\n   */\n  this.canvas_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.ratio_ = options.ratio !== undefined ?\n    options.ratio : 1.5;\n\n};\nol.inherits(ol.source.ImageCanvas, ol.source.Image);\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageCanvas.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {\n  resolution = this.findNearestResolution(resolution);\n\n  var canvas = this.canvas_;\n  if (canvas &&\n      this.renderedRevision_ == this.getRevision() &&\n      canvas.getResolution() == resolution &&\n      canvas.getPixelRatio() == pixelRatio &&\n      ol.extent.containsExtent(canvas.getExtent(), extent)) {\n    return canvas;\n  }\n\n  extent = extent.slice();\n  ol.extent.scaleFromCenter(extent, this.ratio_);\n  var width = ol.extent.getWidth(extent) / resolution;\n  var height = ol.extent.getHeight(extent) / resolution;\n  var size = [width * pixelRatio, height * pixelRatio];\n\n  var canvasElement = this.canvasFunction_(\n      extent, resolution, pixelRatio, size, projection);\n  if (canvasElement) {\n    canvas = new ol.ImageCanvas(extent, resolution, pixelRatio, canvasElement);\n  }\n  this.canvas_ = canvas;\n  this.renderedRevision_ = this.getRevision();\n\n  return canvas;\n};\n\ngoog.provide('ol.source.ImageMapGuide');\n\ngoog.require('ol');\ngoog.require('ol.Image');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.source.Image');\ngoog.require('ol.uri');\n\n\n/**\n * @classdesc\n * Source for images from Mapguide servers\n *\n * @constructor\n * @fires ol.source.Image.Event\n * @extends {ol.source.Image}\n * @param {olx.source.ImageMapGuideOptions} options Options.\n * @api\n */\nol.source.ImageMapGuide = function(options) {\n\n  ol.source.Image.call(this, {\n    projection: options.projection,\n    resolutions: options.resolutions\n  });\n\n  /**\n   * @private\n   * @type {?string}\n   */\n  this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.displayDpi_ = options.displayDpi !== undefined ?\n    options.displayDpi : 96;\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.params_ = options.params || {};\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.url_ = options.url;\n\n  /**\n   * @private\n   * @type {ol.ImageLoadFunctionType}\n   */\n  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?\n    options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.metersPerUnit_ = options.metersPerUnit !== undefined ?\n    options.metersPerUnit : 1;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.ratio_ = options.ratio !== undefined ? options.ratio : 1;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.useOverlay_ = options.useOverlay !== undefined ?\n    options.useOverlay : false;\n\n  /**\n   * @private\n   * @type {ol.Image}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = 0;\n\n};\nol.inherits(ol.source.ImageMapGuide, ol.source.Image);\n\n\n/**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\nol.source.ImageMapGuide.prototype.getParams = function() {\n  return this.params_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageMapGuide.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {\n  resolution = this.findNearestResolution(resolution);\n  pixelRatio = this.hidpi_ ? pixelRatio : 1;\n\n  var image = this.image_;\n  if (image &&\n      this.renderedRevision_ == this.getRevision() &&\n      image.getResolution() == resolution &&\n      image.getPixelRatio() == pixelRatio &&\n      ol.extent.containsExtent(image.getExtent(), extent)) {\n    return image;\n  }\n\n  if (this.ratio_ != 1) {\n    extent = extent.slice();\n    ol.extent.scaleFromCenter(extent, this.ratio_);\n  }\n  var width = ol.extent.getWidth(extent) / resolution;\n  var height = ol.extent.getHeight(extent) / resolution;\n  var size = [width * pixelRatio, height * pixelRatio];\n\n  if (this.url_ !== undefined) {\n    var imageUrl = this.getUrl(this.url_, this.params_, extent, size,\n        projection);\n    image = new ol.Image(extent, resolution, pixelRatio,\n        imageUrl, this.crossOrigin_,\n        this.imageLoadFunction_);\n    ol.events.listen(image, ol.events.EventType.CHANGE,\n        this.handleImageChange, this);\n  } else {\n    image = null;\n  }\n  this.image_ = image;\n  this.renderedRevision_ = this.getRevision();\n\n  return image;\n};\n\n\n/**\n * Return the image load function of the source.\n * @return {ol.ImageLoadFunctionType} The image load function.\n * @api\n */\nol.source.ImageMapGuide.prototype.getImageLoadFunction = function() {\n  return this.imageLoadFunction_;\n};\n\n\n/**\n * @param {ol.Extent} extent The map extents.\n * @param {ol.Size} size The viewport size.\n * @param {number} metersPerUnit The meters-per-unit value.\n * @param {number} dpi The display resolution.\n * @return {number} The computed map scale.\n */\nol.source.ImageMapGuide.getScale = function(extent, size, metersPerUnit, dpi) {\n  var mcsW = ol.extent.getWidth(extent);\n  var mcsH = ol.extent.getHeight(extent);\n  var devW = size[0];\n  var devH = size[1];\n  var mpp = 0.0254 / dpi;\n  if (devH * mcsW > devW * mcsH) {\n    return mcsW * metersPerUnit / (devW * mpp); // width limited\n  } else {\n    return mcsH * metersPerUnit / (devH * mpp); // height limited\n  }\n};\n\n\n/**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\nol.source.ImageMapGuide.prototype.updateParams = function(params) {\n  ol.obj.assign(this.params_, params);\n  this.changed();\n};\n\n\n/**\n * @param {string} baseUrl The mapagent url.\n * @param {Object.<string, string|number>} params Request parameters.\n * @param {ol.Extent} extent Extent.\n * @param {ol.Size} size Size.\n * @param {ol.proj.Projection} projection Projection.\n * @return {string} The mapagent map image request URL.\n */\nol.source.ImageMapGuide.prototype.getUrl = function(baseUrl, params, extent, size, projection) {\n  var scale = ol.source.ImageMapGuide.getScale(extent, size,\n      this.metersPerUnit_, this.displayDpi_);\n  var center = ol.extent.getCenter(extent);\n  var baseParams = {\n    'OPERATION': this.useOverlay_ ? 'GETDYNAMICMAPOVERLAYIMAGE' : 'GETMAPIMAGE',\n    'VERSION': '2.0.0',\n    'LOCALE': 'en',\n    'CLIENTAGENT': 'ol.source.ImageMapGuide source',\n    'CLIP': '1',\n    'SETDISPLAYDPI': this.displayDpi_,\n    'SETDISPLAYWIDTH': Math.round(size[0]),\n    'SETDISPLAYHEIGHT': Math.round(size[1]),\n    'SETVIEWSCALE': scale,\n    'SETVIEWCENTERX': center[0],\n    'SETVIEWCENTERY': center[1]\n  };\n  ol.obj.assign(baseParams, params);\n  return ol.uri.appendParams(baseUrl, baseParams);\n};\n\n\n/**\n * Set the image load function of the MapGuide source.\n * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.\n * @api\n */\nol.source.ImageMapGuide.prototype.setImageLoadFunction = function(\n    imageLoadFunction) {\n  this.image_ = null;\n  this.imageLoadFunction_ = imageLoadFunction;\n  this.changed();\n};\n\ngoog.provide('ol.source.ImageStatic');\n\ngoog.require('ol');\ngoog.require('ol.Image');\ngoog.require('ol.ImageState');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.proj');\ngoog.require('ol.source.Image');\n\n\n/**\n * @classdesc\n * A layer source for displaying a single, static image.\n *\n * @constructor\n * @extends {ol.source.Image}\n * @param {olx.source.ImageStaticOptions} options Options.\n * @api\n */\nol.source.ImageStatic = function(options) {\n  var imageExtent = options.imageExtent;\n\n  var crossOrigin = options.crossOrigin !== undefined ?\n    options.crossOrigin : null;\n\n  var /** @type {ol.ImageLoadFunctionType} */ imageLoadFunction =\n      options.imageLoadFunction !== undefined ?\n        options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;\n\n  ol.source.Image.call(this, {\n    attributions: options.attributions,\n    logo: options.logo,\n    projection: ol.proj.get(options.projection)\n  });\n\n  /**\n   * @private\n   * @type {ol.Image}\n   */\n  this.image_ = new ol.Image(imageExtent, undefined, 1, options.url, crossOrigin, imageLoadFunction);\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.imageSize_ = options.imageSize ? options.imageSize : null;\n\n  ol.events.listen(this.image_, ol.events.EventType.CHANGE,\n      this.handleImageChange, this);\n\n};\nol.inherits(ol.source.ImageStatic, ol.source.Image);\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageStatic.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {\n  if (ol.extent.intersects(extent, this.image_.getExtent())) {\n    return this.image_;\n  }\n  return null;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageStatic.prototype.handleImageChange = function(evt) {\n  if (this.image_.getState() == ol.ImageState.LOADED) {\n    var imageExtent = this.image_.getExtent();\n    var image = this.image_.getImage();\n    var imageWidth, imageHeight;\n    if (this.imageSize_) {\n      imageWidth = this.imageSize_[0];\n      imageHeight = this.imageSize_[1];\n    } else {\n      imageWidth = image.width;\n      imageHeight = image.height;\n    }\n    var resolution = ol.extent.getHeight(imageExtent) / imageHeight;\n    var targetWidth = Math.ceil(ol.extent.getWidth(imageExtent) / resolution);\n    if (targetWidth != imageWidth) {\n      var context = ol.dom.createCanvasContext2D(targetWidth, imageHeight);\n      var canvas = context.canvas;\n      context.drawImage(image, 0, 0, imageWidth, imageHeight,\n          0, 0, canvas.width, canvas.height);\n      this.image_.setImage(canvas);\n    }\n  }\n  ol.source.Image.prototype.handleImageChange.call(this, evt);\n};\n\ngoog.provide('ol.source.ImageVector');\n\ngoog.require('ol');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.ext.rbush');\ngoog.require('ol.extent');\ngoog.require('ol.render.canvas.ReplayGroup');\ngoog.require('ol.renderer.vector');\ngoog.require('ol.source.ImageCanvas');\ngoog.require('ol.style.Style');\ngoog.require('ol.transform');\n\n\n/**\n * @deprecated\n * @classdesc\n * **Deprecated**. Use an `ol.layer.Vector` with `renderMode: 'image'` and an\n * `ol.source.Vector` instead.\n *\n * An image source whose images are canvas elements into which vector features\n * read from a vector source (`ol.source.Vector`) are drawn. An\n * `ol.source.ImageVector` object is to be used as the `source` of an image\n * layer (`ol.layer.Image`). Image layers are rotated, scaled, and translated,\n * as opposed to being re-rendered, during animations and interactions. So, like\n * any other image layer, an image layer configured with an\n * `ol.source.ImageVector` will exhibit this behaviour. This is in contrast to a\n * vector layer, where vector features are re-drawn during animations and\n * interactions.\n *\n * @constructor\n * @extends {ol.source.ImageCanvas}\n * @param {olx.source.ImageVectorOptions} options Options.\n * @api\n */\nol.source.ImageVector = function(options) {\n\n  /**\n   * @private\n   * @type {ol.source.Vector}\n   */\n  this.source_ = options.source;\n\n  /**\n   * @private\n   * @type {ol.Transform}\n   */\n  this.transform_ = ol.transform.create();\n\n  /**\n   * @private\n   * @type {CanvasRenderingContext2D}\n   */\n  this.canvasContext_ = ol.dom.createCanvasContext2D();\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.canvasSize_ = [0, 0];\n\n  /**\n   * Declutter tree.\n   * @private\n   */\n  this.declutterTree_ = ol.ext.rbush(9);\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderBuffer_ = options.renderBuffer == undefined ? 100 : options.renderBuffer;\n\n  /**\n   * @private\n   * @type {ol.render.canvas.ReplayGroup}\n   */\n  this.replayGroup_ = null;\n\n  ol.source.ImageCanvas.call(this, {\n    attributions: options.attributions,\n    canvasFunction: this.canvasFunctionInternal_.bind(this),\n    logo: options.logo,\n    projection: options.projection,\n    ratio: options.ratio,\n    resolutions: options.resolutions,\n    state: this.source_.getState()\n  });\n\n  /**\n   * User provided style.\n   * @type {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}\n   * @private\n   */\n  this.style_ = null;\n\n  /**\n   * Style function for use within the library.\n   * @type {ol.StyleFunction|undefined}\n   * @private\n   */\n  this.styleFunction_ = undefined;\n\n  this.setStyle(options.style);\n\n  ol.events.listen(this.source_, ol.events.EventType.CHANGE,\n      this.handleSourceChange_, this);\n\n};\nol.inherits(ol.source.ImageVector, ol.source.ImageCanvas);\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.Size} size Size.\n * @param {ol.proj.Projection} projection Projection;\n * @return {HTMLCanvasElement} Canvas element.\n * @private\n */\nol.source.ImageVector.prototype.canvasFunctionInternal_ = function(extent, resolution, pixelRatio, size, projection) {\n\n  var replayGroup = new ol.render.canvas.ReplayGroup(\n      ol.renderer.vector.getTolerance(resolution, pixelRatio), extent,\n      resolution, pixelRatio, this.source_.getOverlaps(), this.declutterTree_, this.renderBuffer_);\n\n  this.source_.loadFeatures(extent, resolution, projection);\n\n  var loading = false;\n  this.source_.forEachFeatureInExtent(extent,\n      /**\n       * @param {ol.Feature} feature Feature.\n       */\n      function(feature) {\n        loading = loading ||\n            this.renderFeature_(feature, resolution, pixelRatio, replayGroup);\n      }, this);\n  replayGroup.finish();\n\n  if (loading) {\n    return null;\n  }\n\n  if (this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) {\n    this.canvasContext_.canvas.width = size[0];\n    this.canvasContext_.canvas.height = size[1];\n    this.canvasSize_[0] = size[0];\n    this.canvasSize_[1] = size[1];\n  } else {\n    this.canvasContext_.clearRect(0, 0, size[0], size[1]);\n  }\n\n  this.declutterTree_.clear();\n\n  var transform = this.getTransform_(ol.extent.getCenter(extent),\n      resolution, pixelRatio, size);\n  replayGroup.replay(this.canvasContext_, transform, 0, {});\n\n  this.replayGroup_ = replayGroup;\n\n  return this.canvasContext_.canvas;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageVector.prototype.forEachFeatureAtCoordinate = function(\n    coordinate, resolution, rotation, hitTolerance, skippedFeatureUids, callback) {\n  if (!this.replayGroup_) {\n    return undefined;\n  } else {\n    /** @type {Object.<string, boolean>} */\n    var features = {};\n    var result = this.replayGroup_.forEachFeatureAtCoordinate(\n        coordinate, resolution, 0, hitTolerance, skippedFeatureUids,\n        /**\n         * @param {ol.Feature|ol.render.Feature} feature Feature.\n         * @return {?} Callback result.\n         */\n        function(feature) {\n          var key = ol.getUid(feature).toString();\n          if (!(key in features)) {\n            features[key] = true;\n            return callback(feature);\n          }\n        }, null);\n    return result;\n  }\n};\n\n\n/**\n * Get a reference to the wrapped source.\n * @return {ol.source.Vector} Source.\n * @api\n */\nol.source.ImageVector.prototype.getSource = function() {\n  return this.source_;\n};\n\n\n/**\n * Get the style for features.  This returns whatever was passed to the `style`\n * option at construction or to the `setStyle` method.\n * @return {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}\n *     Layer style.\n * @api\n */\nol.source.ImageVector.prototype.getStyle = function() {\n  return this.style_;\n};\n\n\n/**\n * Get the style function.\n * @return {ol.StyleFunction|undefined} Layer style function.\n * @api\n */\nol.source.ImageVector.prototype.getStyleFunction = function() {\n  return this.styleFunction_;\n};\n\n\n/**\n * @param {ol.Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.Size} size Size.\n * @return {!ol.Transform} Transform.\n * @private\n */\nol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) {\n  var dx1 = size[0] / 2;\n  var dy1 = size[1] / 2;\n  var sx = pixelRatio / resolution;\n  var sy = -sx;\n  var dx2 = -center[0];\n  var dy2 = -center[1];\n\n  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, 0, dx2, dy2);\n};\n\n\n/**\n * Handle changes in image style state.\n * @param {ol.events.Event} event Image style change event.\n * @private\n */\nol.source.ImageVector.prototype.handleImageChange_ = function(event) {\n  this.changed();\n};\n\n\n/**\n * @private\n */\nol.source.ImageVector.prototype.handleSourceChange_ = function() {\n  // setState will trigger a CHANGE event, so we always rely\n  // change events by calling setState.\n  this.setState(this.source_.getState());\n};\n\n\n/**\n * @param {ol.Feature} feature Feature.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.\n * @return {boolean} `true` if an image is loading.\n * @private\n */\nol.source.ImageVector.prototype.renderFeature_ = function(feature, resolution, pixelRatio, replayGroup) {\n  var styles;\n  var styleFunction = feature.getStyleFunction();\n  if (styleFunction) {\n    styles = styleFunction.call(feature, resolution);\n  } else if (this.styleFunction_) {\n    styles = this.styleFunction_(feature, resolution);\n  }\n  if (!styles) {\n    return false;\n  }\n  var i, ii, loading = false;\n  if (!Array.isArray(styles)) {\n    styles = [styles];\n  }\n  for (i = 0, ii = styles.length; i < ii; ++i) {\n    loading = ol.renderer.vector.renderFeature(\n        replayGroup, feature, styles[i],\n        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),\n        this.handleImageChange_, this) || loading;\n  }\n  return loading;\n};\n\n\n/**\n * Set the style for features.  This can be a single style object, an array\n * of styles, or a function that takes a feature and resolution and returns\n * an array of styles. If it is `undefined` the default style is used. If\n * it is `null` the layer has no style (a `null` style), so only features\n * that have their own styles will be rendered in the layer. See\n * {@link ol.style} for information on the default style.\n * @param {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|undefined}\n *     style Layer style.\n * @api\n */\nol.source.ImageVector.prototype.setStyle = function(style) {\n  this.style_ = style !== undefined ? style : ol.style.Style.defaultFunction;\n  this.styleFunction_ = !style ?\n    undefined : ol.style.Style.createFunction(this.style_);\n  this.changed();\n};\n\ngoog.provide('ol.source.WMSServerType');\n\n\n/**\n * Available server types: `'carmentaserver'`, `'geoserver'`, `'mapserver'`,\n *     `'qgis'`. These are servers that have vendor parameters beyond the WMS\n *     specification that OpenLayers can make use of.\n * @enum {string}\n */\nol.source.WMSServerType = {\n  CARMENTA_SERVER: 'carmentaserver',\n  GEOSERVER: 'geoserver',\n  MAPSERVER: 'mapserver',\n  QGIS: 'qgis'\n};\n\n// FIXME cannot be shared between maps with different projections\n\ngoog.provide('ol.source.ImageWMS');\n\ngoog.require('ol');\ngoog.require('ol.Image');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.reproj');\ngoog.require('ol.source.Image');\ngoog.require('ol.source.WMSServerType');\ngoog.require('ol.string');\ngoog.require('ol.uri');\n\n\n/**\n * @classdesc\n * Source for WMS servers providing single, untiled images.\n *\n * @constructor\n * @fires ol.source.Image.Event\n * @extends {ol.source.Image}\n * @param {olx.source.ImageWMSOptions=} opt_options Options.\n * @api\n */\nol.source.ImageWMS = function(opt_options) {\n\n  var options = opt_options || {};\n\n  ol.source.Image.call(this, {\n    attributions: options.attributions,\n    logo: options.logo,\n    projection: options.projection,\n    resolutions: options.resolutions\n  });\n\n  /**\n   * @private\n   * @type {?string}\n   */\n  this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.url_ = options.url;\n\n  /**\n   * @private\n   * @type {ol.ImageLoadFunctionType}\n   */\n  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?\n    options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.params_ = options.params || {};\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.v13_ = true;\n  this.updateV13_();\n\n  /**\n   * @private\n   * @type {ol.source.WMSServerType|undefined}\n   */\n  this.serverType_ = /** @type {ol.source.WMSServerType|undefined} */ (options.serverType);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n  /**\n   * @private\n   * @type {ol.Image}\n   */\n  this.image_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.imageSize_ = [0, 0];\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.renderedRevision_ = 0;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;\n\n};\nol.inherits(ol.source.ImageWMS, ol.source.Image);\n\n\n/**\n * @const\n * @type {ol.Size}\n * @private\n */\nol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_ = [101, 101];\n\n\n/**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {ol.ProjectionLike} projection Projection.\n * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should\n *     be provided. If `QUERY_LAYERS` is not provided then the layers specified\n *     in the `LAYERS` parameter will be used. `VERSION` should not be\n *     specified here.\n * @return {string|undefined} GetFeatureInfo URL.\n * @api\n */\nol.source.ImageWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {\n  if (this.url_ === undefined) {\n    return undefined;\n  }\n  var projectionObj = ol.proj.get(projection);\n  var sourceProjectionObj = this.getProjection();\n\n  if (sourceProjectionObj && sourceProjectionObj !== projectionObj) {\n    resolution = ol.reproj.calculateSourceResolution(sourceProjectionObj, projectionObj, coordinate, resolution);\n    coordinate = ol.proj.transform(coordinate, projectionObj, sourceProjectionObj);\n  }\n\n  var extent = ol.extent.getForViewAndSize(\n      coordinate, resolution, 0,\n      ol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_);\n\n  var baseParams = {\n    'SERVICE': 'WMS',\n    'VERSION': ol.DEFAULT_WMS_VERSION,\n    'REQUEST': 'GetFeatureInfo',\n    'FORMAT': 'image/png',\n    'TRANSPARENT': true,\n    'QUERY_LAYERS': this.params_['LAYERS']\n  };\n  ol.obj.assign(baseParams, this.params_, params);\n\n  var x = Math.floor((coordinate[0] - extent[0]) / resolution);\n  var y = Math.floor((extent[3] - coordinate[1]) / resolution);\n  baseParams[this.v13_ ? 'I' : 'X'] = x;\n  baseParams[this.v13_ ? 'J' : 'Y'] = y;\n\n  return this.getRequestUrl_(\n      extent, ol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_,\n      1, sourceProjectionObj || projectionObj, baseParams);\n};\n\n\n/**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\nol.source.ImageWMS.prototype.getParams = function() {\n  return this.params_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.ImageWMS.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {\n\n  if (this.url_ === undefined) {\n    return null;\n  }\n\n  resolution = this.findNearestResolution(resolution);\n\n  if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {\n    pixelRatio = 1;\n  }\n\n  var imageResolution = resolution / pixelRatio;\n\n  var center = ol.extent.getCenter(extent);\n  var viewWidth = Math.ceil(ol.extent.getWidth(extent) / imageResolution);\n  var viewHeight = Math.ceil(ol.extent.getHeight(extent) / imageResolution);\n  var viewExtent = ol.extent.getForViewAndSize(center, imageResolution, 0,\n      [viewWidth, viewHeight]);\n  var requestWidth = Math.ceil(this.ratio_ * ol.extent.getWidth(extent) / imageResolution);\n  var requestHeight = Math.ceil(this.ratio_ * ol.extent.getHeight(extent) / imageResolution);\n  var requestExtent = ol.extent.getForViewAndSize(center, imageResolution, 0,\n      [requestWidth, requestHeight]);\n\n  var image = this.image_;\n  if (image &&\n      this.renderedRevision_ == this.getRevision() &&\n      image.getResolution() == resolution &&\n      image.getPixelRatio() == pixelRatio &&\n      ol.extent.containsExtent(image.getExtent(), viewExtent)) {\n    return image;\n  }\n\n  var params = {\n    'SERVICE': 'WMS',\n    'VERSION': ol.DEFAULT_WMS_VERSION,\n    'REQUEST': 'GetMap',\n    'FORMAT': 'image/png',\n    'TRANSPARENT': true\n  };\n  ol.obj.assign(params, this.params_);\n\n  this.imageSize_[0] = Math.round(ol.extent.getWidth(requestExtent) / imageResolution);\n  this.imageSize_[1] = Math.round(ol.extent.getHeight(requestExtent) / imageResolution);\n\n  var url = this.getRequestUrl_(requestExtent, this.imageSize_, pixelRatio,\n      projection, params);\n\n  this.image_ = new ol.Image(requestExtent, resolution, pixelRatio,\n      url, this.crossOrigin_, this.imageLoadFunction_);\n\n  this.renderedRevision_ = this.getRevision();\n\n  ol.events.listen(this.image_, ol.events.EventType.CHANGE,\n      this.handleImageChange, this);\n\n  return this.image_;\n\n};\n\n\n/**\n * Return the image load function of the source.\n * @return {ol.ImageLoadFunctionType} The image load function.\n * @api\n */\nol.source.ImageWMS.prototype.getImageLoadFunction = function() {\n  return this.imageLoadFunction_;\n};\n\n\n/**\n * @param {ol.Extent} extent Extent.\n * @param {ol.Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {Object} params Params.\n * @return {string} Request URL.\n * @private\n */\nol.source.ImageWMS.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) {\n\n  ol.asserts.assert(this.url_ !== undefined, 9); // `url` must be configured or set using `#setUrl()`\n\n  params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode();\n\n  if (!('STYLES' in this.params_)) {\n    params['STYLES'] = '';\n  }\n\n  if (pixelRatio != 1) {\n    switch (this.serverType_) {\n      case ol.source.WMSServerType.GEOSERVER:\n        var dpi = (90 * pixelRatio + 0.5) | 0;\n        if ('FORMAT_OPTIONS' in params) {\n          params['FORMAT_OPTIONS'] += ';dpi:' + dpi;\n        } else {\n          params['FORMAT_OPTIONS'] = 'dpi:' + dpi;\n        }\n        break;\n      case ol.source.WMSServerType.MAPSERVER:\n        params['MAP_RESOLUTION'] = 90 * pixelRatio;\n        break;\n      case ol.source.WMSServerType.CARMENTA_SERVER:\n      case ol.source.WMSServerType.QGIS:\n        params['DPI'] = 90 * pixelRatio;\n        break;\n      default:\n        ol.asserts.assert(false, 8); // Unknown `serverType` configured\n        break;\n    }\n  }\n\n  params['WIDTH'] = size[0];\n  params['HEIGHT'] = size[1];\n\n  var axisOrientation = projection.getAxisOrientation();\n  var bbox;\n  if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') {\n    bbox = [extent[1], extent[0], extent[3], extent[2]];\n  } else {\n    bbox = extent;\n  }\n  params['BBOX'] = bbox.join(',');\n\n  return ol.uri.appendParams(/** @type {string} */ (this.url_), params);\n};\n\n\n/**\n * Return the URL used for this WMS source.\n * @return {string|undefined} URL.\n * @api\n */\nol.source.ImageWMS.prototype.getUrl = function() {\n  return this.url_;\n};\n\n\n/**\n * Set the image load function of the source.\n * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.\n * @api\n */\nol.source.ImageWMS.prototype.setImageLoadFunction = function(\n    imageLoadFunction) {\n  this.image_ = null;\n  this.imageLoadFunction_ = imageLoadFunction;\n  this.changed();\n};\n\n\n/**\n * Set the URL to use for requests.\n * @param {string|undefined} url URL.\n * @api\n */\nol.source.ImageWMS.prototype.setUrl = function(url) {\n  if (url != this.url_) {\n    this.url_ = url;\n    this.image_ = null;\n    this.changed();\n  }\n};\n\n\n/**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\nol.source.ImageWMS.prototype.updateParams = function(params) {\n  ol.obj.assign(this.params_, params);\n  this.updateV13_();\n  this.image_ = null;\n  this.changed();\n};\n\n\n/**\n * @private\n */\nol.source.ImageWMS.prototype.updateV13_ = function() {\n  var version = this.params_['VERSION'] || ol.DEFAULT_WMS_VERSION;\n  this.v13_ = ol.string.compareVersions(version, '1.3') >= 0;\n};\n\ngoog.provide('ol.source.OSM');\n\ngoog.require('ol');\ngoog.require('ol.source.XYZ');\n\n\n/**\n * @classdesc\n * Layer source for the OpenStreetMap tile server.\n *\n * @constructor\n * @extends {ol.source.XYZ}\n * @param {olx.source.OSMOptions=} opt_options Open Street Map options.\n * @api\n */\nol.source.OSM = function(opt_options) {\n\n  var options = opt_options || {};\n\n  var attributions;\n  if (options.attributions !== undefined) {\n    attributions = options.attributions;\n  } else {\n    attributions = [ol.source.OSM.ATTRIBUTION];\n  }\n\n  var crossOrigin = options.crossOrigin !== undefined ?\n    options.crossOrigin : 'anonymous';\n\n  var url = options.url !== undefined ?\n    options.url : 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n\n  ol.source.XYZ.call(this, {\n    attributions: attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: crossOrigin,\n    opaque: options.opaque !== undefined ? options.opaque : true,\n    maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileLoadFunction: options.tileLoadFunction,\n    url: url,\n    wrapX: options.wrapX\n  });\n\n};\nol.inherits(ol.source.OSM, ol.source.XYZ);\n\n\n/**\n * The attribution containing a link to the OpenStreetMap Copyright and License\n * page.\n * @const\n * @type {string}\n * @api\n */\nol.source.OSM.ATTRIBUTION = '&copy; ' +\n      '<a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> ' +\n      'contributors.';\n\n\n/**\n * @fileoverview\n * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, unusedLocalVariables, uselessCode, visibility}\n */\ngoog.provide('ol.ext.pixelworks.Processor');\n\n/** @typedef {function(*)} */\nol.ext.pixelworks.Processor = function() {};\n\n(function() {(function (exports) {\n'use strict';\n\nvar hasImageData = true;\ntry {\n  new ImageData(10, 10);\n} catch (_) {\n  hasImageData = false;\n}\nvar context = document.createElement('canvas').getContext('2d');\nfunction newImageData$1(data, width, height) {\n  if (hasImageData) {\n    return new ImageData(data, width, height);\n  } else {\n    var imageData = context.createImageData(width, height);\n    imageData.data.set(data);\n    return imageData;\n  }\n}\nvar newImageData_1 = newImageData$1;\nvar util = {\n\tnewImageData: newImageData_1\n};\n\nvar newImageData = util.newImageData;\nfunction createMinion(operation) {\n  var workerHasImageData = true;\n  try {\n    new ImageData(10, 10);\n  } catch (_) {\n    workerHasImageData = false;\n  }\n  function newWorkerImageData(data, width, height) {\n    if (workerHasImageData) {\n      return new ImageData(data, width, height);\n    } else {\n      return {data: data, width: width, height: height};\n    }\n  }\n  return function(data) {\n    var buffers = data['buffers'];\n    var meta = data['meta'];\n    var imageOps = data['imageOps'];\n    var width = data['width'];\n    var height = data['height'];\n    var numBuffers = buffers.length;\n    var numBytes = buffers[0].byteLength;\n    var output, b;\n    if (imageOps) {\n      var images = new Array(numBuffers);\n      for (b = 0; b < numBuffers; ++b) {\n        images[b] = newWorkerImageData(\n            new Uint8ClampedArray(buffers[b]), width, height);\n      }\n      output = operation(images, meta).data;\n    } else {\n      output = new Uint8ClampedArray(numBytes);\n      var arrays = new Array(numBuffers);\n      var pixels = new Array(numBuffers);\n      for (b = 0; b < numBuffers; ++b) {\n        arrays[b] = new Uint8ClampedArray(buffers[b]);\n        pixels[b] = [0, 0, 0, 0];\n      }\n      for (var i = 0; i < numBytes; i += 4) {\n        for (var j = 0; j < numBuffers; ++j) {\n          var array = arrays[j];\n          pixels[j][0] = array[i];\n          pixels[j][1] = array[i + 1];\n          pixels[j][2] = array[i + 2];\n          pixels[j][3] = array[i + 3];\n        }\n        var pixel = operation(pixels, meta);\n        output[i] = pixel[0];\n        output[i + 1] = pixel[1];\n        output[i + 2] = pixel[2];\n        output[i + 3] = pixel[3];\n      }\n    }\n    return output.buffer;\n  };\n}\nfunction createWorker(config, onMessage) {\n  var lib = Object.keys(config.lib || {}).map(function(name) {\n    return 'var ' + name + ' = ' + config.lib[name].toString() + ';';\n  });\n  var lines = lib.concat([\n    'var __minion__ = (' + createMinion.toString() + ')(', config.operation.toString(), ');',\n    'self.addEventListener(\"message\", function(event) {',\n    '  var buffer = __minion__(event.data);',\n    '  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);',\n    '});'\n  ]);\n  var blob = new Blob(lines, {type: 'text/javascript'});\n  var source = URL.createObjectURL(blob);\n  var worker = new Worker(source);\n  worker.addEventListener('message', onMessage);\n  return worker;\n}\nfunction createFauxWorker(config, onMessage) {\n  var minion = createMinion(config.operation);\n  return {\n    postMessage: function(data) {\n      setTimeout(function() {\n        onMessage({'data': {'buffer': minion(data), 'meta': data['meta']}});\n      }, 0);\n    }\n  };\n}\nfunction Processor(config) {\n  this._imageOps = !!config.imageOps;\n  var threads;\n  if (config.threads === 0) {\n    threads = 0;\n  } else if (this._imageOps) {\n    threads = 1;\n  } else {\n    threads = config.threads || 1;\n  }\n  var workers = [];\n  if (threads) {\n    for (var i = 0; i < threads; ++i) {\n      workers[i] = createWorker(config, this._onWorkerMessage.bind(this, i));\n    }\n  } else {\n    workers[0] = createFauxWorker(config, this._onWorkerMessage.bind(this, 0));\n  }\n  this._workers = workers;\n  this._queue = [];\n  this._maxQueueLength = config.queue || Infinity;\n  this._running = 0;\n  this._dataLookup = {};\n  this._job = null;\n}\nProcessor.prototype.process = function(inputs, meta, callback) {\n  this._enqueue({\n    inputs: inputs,\n    meta: meta,\n    callback: callback\n  });\n  this._dispatch();\n};\nProcessor.prototype.destroy = function() {\n  for (var key in this) {\n    this[key] = null;\n  }\n  this._destroyed = true;\n};\nProcessor.prototype._enqueue = function(job) {\n  this._queue.push(job);\n  while (this._queue.length > this._maxQueueLength) {\n    this._queue.shift().callback(null, null);\n  }\n};\nProcessor.prototype._dispatch = function() {\n  if (this._running === 0 && this._queue.length > 0) {\n    var job = this._job = this._queue.shift();\n    var width = job.inputs[0].width;\n    var height = job.inputs[0].height;\n    var buffers = job.inputs.map(function(input) {\n      return input.data.buffer;\n    });\n    var threads = this._workers.length;\n    this._running = threads;\n    if (threads === 1) {\n      this._workers[0].postMessage({\n        'buffers': buffers,\n        'meta': job.meta,\n        'imageOps': this._imageOps,\n        'width': width,\n        'height': height\n      }, buffers);\n    } else {\n      var length = job.inputs[0].data.length;\n      var segmentLength = 4 * Math.ceil(length / 4 / threads);\n      for (var i = 0; i < threads; ++i) {\n        var offset = i * segmentLength;\n        var slices = [];\n        for (var j = 0, jj = buffers.length; j < jj; ++j) {\n          slices.push(buffers[i].slice(offset, offset + segmentLength));\n        }\n        this._workers[i].postMessage({\n          'buffers': slices,\n          'meta': job.meta,\n          'imageOps': this._imageOps,\n          'width': width,\n          'height': height\n        }, slices);\n      }\n    }\n  }\n};\nProcessor.prototype._onWorkerMessage = function(index, event) {\n  if (this._destroyed) {\n    return;\n  }\n  this._dataLookup[index] = event.data;\n  --this._running;\n  if (this._running === 0) {\n    this._resolveJob();\n  }\n};\nProcessor.prototype._resolveJob = function() {\n  var job = this._job;\n  var threads = this._workers.length;\n  var data, meta;\n  if (threads === 1) {\n    data = new Uint8ClampedArray(this._dataLookup[0]['buffer']);\n    meta = this._dataLookup[0]['meta'];\n  } else {\n    var length = job.inputs[0].data.length;\n    data = new Uint8ClampedArray(length);\n    meta = new Array(length);\n    var segmentLength = 4 * Math.ceil(length / 4 / threads);\n    for (var i = 0; i < threads; ++i) {\n      var buffer = this._dataLookup[i]['buffer'];\n      var offset = i * segmentLength;\n      data.set(new Uint8ClampedArray(buffer), offset);\n      meta[i] = this._dataLookup[i]['meta'];\n    }\n  }\n  this._job = null;\n  this._dataLookup = {};\n  job.callback(null,\n      newImageData(data, job.inputs[0].width, job.inputs[0].height), meta);\n  this._dispatch();\n};\nvar processor = Processor;\n\nvar Processor_1 = processor;\nvar lib = {\n\tProcessor: Processor_1\n};\n\nexports['default'] = lib;\nexports.Processor = Processor_1;\n\n}((this.pixelworks = this.pixelworks || {})));}).call(ol.ext);\n\ngoog.provide('ol.source.RasterOperationType');\n\n/**\n * Raster operation type. Supported values are `'pixel'` and `'image'`.\n * @enum {string}\n */\nol.source.RasterOperationType = {\n  PIXEL: 'pixel',\n  IMAGE: 'image'\n};\n\ngoog.provide('ol.source.Raster');\n\ngoog.require('ol');\ngoog.require('ol.ImageCanvas');\ngoog.require('ol.TileQueue');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.EventType');\ngoog.require('ol.ext.pixelworks.Processor');\ngoog.require('ol.extent');\ngoog.require('ol.layer.Image');\ngoog.require('ol.layer.Tile');\ngoog.require('ol.obj');\ngoog.require('ol.renderer.canvas.ImageLayer');\ngoog.require('ol.renderer.canvas.TileLayer');\ngoog.require('ol.source.Image');\ngoog.require('ol.source.RasterOperationType');\ngoog.require('ol.source.State');\ngoog.require('ol.source.Tile');\ngoog.require('ol.transform');\n\n\n/**\n * @classdesc\n * A source that transforms data from any number of input sources using an\n * {@link ol.RasterOperation} function to transform input pixel values into\n * output pixel values.\n *\n * @constructor\n * @extends {ol.source.Image}\n * @fires ol.source.Raster.Event\n * @param {olx.source.RasterOptions} options Options.\n * @api\n */\nol.source.Raster = function(options) {\n\n  /**\n   * @private\n   * @type {*}\n   */\n  this.worker_ = null;\n\n  /**\n   * @private\n   * @type {ol.source.RasterOperationType}\n   */\n  this.operationType_ = options.operationType !== undefined ?\n    options.operationType : ol.source.RasterOperationType.PIXEL;\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.threads_ = options.threads !== undefined ? options.threads : 1;\n\n  /**\n   * @private\n   * @type {Array.<ol.renderer.canvas.Layer>}\n   */\n  this.renderers_ = ol.source.Raster.createRenderers_(options.sources);\n\n  for (var r = 0, rr = this.renderers_.length; r < rr; ++r) {\n    ol.events.listen(this.renderers_[r], ol.events.EventType.CHANGE,\n        this.changed, this);\n  }\n\n  /**\n   * @private\n   * @type {ol.TileQueue}\n   */\n  this.tileQueue_ = new ol.TileQueue(\n      function() {\n        return 1;\n      },\n      this.changed.bind(this));\n\n  var layerStatesArray = ol.source.Raster.getLayerStatesArray_(this.renderers_);\n  var layerStates = {};\n  for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n    layerStates[ol.getUid(layerStatesArray[i].layer)] = layerStatesArray[i];\n  }\n\n  /**\n   * The most recently requested frame state.\n   * @type {olx.FrameState}\n   * @private\n   */\n  this.requestedFrameState_;\n\n  /**\n   * The most recently rendered image canvas.\n   * @type {ol.ImageCanvas}\n   * @private\n   */\n  this.renderedImageCanvas_ = null;\n\n  /**\n   * The most recently rendered revision.\n   * @type {number}\n   */\n  this.renderedRevision_;\n\n  /**\n   * @private\n   * @type {olx.FrameState}\n   */\n  this.frameState_ = {\n    animate: false,\n    coordinateToPixelTransform: ol.transform.create(),\n    extent: null,\n    focus: null,\n    index: 0,\n    layerStates: layerStates,\n    layerStatesArray: layerStatesArray,\n    logos: {},\n    pixelRatio: 1,\n    pixelToCoordinateTransform: ol.transform.create(),\n    postRenderFunctions: [],\n    size: [0, 0],\n    skippedFeatureUids: {},\n    tileQueue: this.tileQueue_,\n    time: Date.now(),\n    usedTiles: {},\n    viewState: /** @type {olx.ViewState} */ ({\n      rotation: 0\n    }),\n    viewHints: [],\n    wantedTiles: {}\n  };\n\n  ol.source.Image.call(this, {});\n\n  if (options.operation !== undefined) {\n    this.setOperation(options.operation, options.lib);\n  }\n\n};\nol.inherits(ol.source.Raster, ol.source.Image);\n\n\n/**\n * Set the operation.\n * @param {ol.RasterOperation} operation New operation.\n * @param {Object=} opt_lib Functions that will be available to operations run\n *     in a worker.\n * @api\n */\nol.source.Raster.prototype.setOperation = function(operation, opt_lib) {\n  this.worker_ = new ol.ext.pixelworks.Processor({\n    operation: operation,\n    imageOps: this.operationType_ === ol.source.RasterOperationType.IMAGE,\n    queue: 1,\n    lib: opt_lib,\n    threads: this.threads_\n  });\n  this.changed();\n};\n\n\n/**\n * Update the stored frame state.\n * @param {ol.Extent} extent The view extent (in map units).\n * @param {number} resolution The view resolution.\n * @param {ol.proj.Projection} projection The view projection.\n * @return {olx.FrameState} The updated frame state.\n * @private\n */\nol.source.Raster.prototype.updateFrameState_ = function(extent, resolution, projection) {\n\n  var frameState = /** @type {olx.FrameState} */ (\n    ol.obj.assign({}, this.frameState_));\n\n  frameState.viewState = /** @type {olx.ViewState} */ (\n    ol.obj.assign({}, frameState.viewState));\n\n  var center = ol.extent.getCenter(extent);\n\n  frameState.extent = extent.slice();\n  frameState.focus = center;\n  frameState.size[0] = Math.round(ol.extent.getWidth(extent) / resolution);\n  frameState.size[1] = Math.round(ol.extent.getHeight(extent) / resolution);\n  frameState.time = Date.now();\n  frameState.animate = false;\n\n  var viewState = frameState.viewState;\n  viewState.center = center;\n  viewState.projection = projection;\n  viewState.resolution = resolution;\n  return frameState;\n};\n\n\n/**\n * Determine if all sources are ready.\n * @return {boolean} All sources are ready.\n * @private\n */\nol.source.Raster.prototype.allSourcesReady_ = function() {\n  var ready = true;\n  var source;\n  for (var i = 0, ii = this.renderers_.length; i < ii; ++i) {\n    source = this.renderers_[i].getLayer().getSource();\n    if (source.getState() !== ol.source.State.READY) {\n      ready = false;\n      break;\n    }\n  }\n  return ready;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.Raster.prototype.getImage = function(extent, resolution, pixelRatio, projection) {\n  if (!this.allSourcesReady_()) {\n    return null;\n  }\n\n  var frameState = this.updateFrameState_(extent, resolution, projection);\n  this.requestedFrameState_ = frameState;\n\n  // check if we can't reuse the existing ol.ImageCanvas\n  if (this.renderedImageCanvas_) {\n    var renderedResolution = this.renderedImageCanvas_.getResolution();\n    var renderedExtent = this.renderedImageCanvas_.getExtent();\n    if (resolution !== renderedResolution || !ol.extent.equals(extent, renderedExtent)) {\n      this.renderedImageCanvas_ = null;\n    }\n  }\n\n  if (!this.renderedImageCanvas_ || this.getRevision() !== this.renderedRevision_) {\n    this.processSources_();\n  }\n\n  frameState.tileQueue.loadMoreTiles(16, 16);\n\n  if (frameState.animate) {\n    requestAnimationFrame(this.changed.bind(this));\n  }\n\n  return this.renderedImageCanvas_;\n};\n\n\n/**\n * Start processing source data.\n * @private\n */\nol.source.Raster.prototype.processSources_ = function() {\n  var frameState = this.requestedFrameState_;\n  var len = this.renderers_.length;\n  var imageDatas = new Array(len);\n  for (var i = 0; i < len; ++i) {\n    var imageData = ol.source.Raster.getImageData_(\n        this.renderers_[i], frameState, frameState.layerStatesArray[i]);\n    if (imageData) {\n      imageDatas[i] = imageData;\n    } else {\n      return;\n    }\n  }\n\n  var data = {};\n  this.dispatchEvent(new ol.source.Raster.Event(\n      ol.source.Raster.EventType_.BEFOREOPERATIONS, frameState, data));\n  this.worker_.process(imageDatas, data,\n      this.onWorkerComplete_.bind(this, frameState));\n};\n\n\n/**\n * Called when pixel processing is complete.\n * @param {olx.FrameState} frameState The frame state.\n * @param {Error} err Any error during processing.\n * @param {ImageData} output The output image data.\n * @param {Object} data The user data.\n * @private\n */\nol.source.Raster.prototype.onWorkerComplete_ = function(frameState, err, output, data) {\n  if (err || !output) {\n    return;\n  }\n\n  // do nothing if extent or resolution changed\n  var extent = frameState.extent;\n  var resolution = frameState.viewState.resolution;\n  if (resolution !== this.requestedFrameState_.viewState.resolution ||\n      !ol.extent.equals(extent, this.requestedFrameState_.extent)) {\n    return;\n  }\n\n  var context;\n  if (this.renderedImageCanvas_) {\n    context = this.renderedImageCanvas_.getImage().getContext('2d');\n  } else {\n    var width = Math.round(ol.extent.getWidth(extent) / resolution);\n    var height = Math.round(ol.extent.getHeight(extent) / resolution);\n    context = ol.dom.createCanvasContext2D(width, height);\n    this.renderedImageCanvas_ = new ol.ImageCanvas(extent, resolution, 1, context.canvas);\n  }\n  context.putImageData(output, 0, 0);\n\n  this.changed();\n  this.renderedRevision_ = this.getRevision();\n\n  this.dispatchEvent(new ol.source.Raster.Event(\n      ol.source.Raster.EventType_.AFTEROPERATIONS, frameState, data));\n};\n\n\n/**\n * Get image data from a renderer.\n * @param {ol.renderer.canvas.Layer} renderer Layer renderer.\n * @param {olx.FrameState} frameState The frame state.\n * @param {ol.LayerState} layerState The layer state.\n * @return {ImageData} The image data.\n * @private\n */\nol.source.Raster.getImageData_ = function(renderer, frameState, layerState) {\n  if (!renderer.prepareFrame(frameState, layerState)) {\n    return null;\n  }\n  var width = frameState.size[0];\n  var height = frameState.size[1];\n  if (!ol.source.Raster.context_) {\n    ol.source.Raster.context_ = ol.dom.createCanvasContext2D(width, height);\n  } else {\n    var canvas = ol.source.Raster.context_.canvas;\n    if (canvas.width !== width || canvas.height !== height) {\n      ol.source.Raster.context_ = ol.dom.createCanvasContext2D(width, height);\n    } else {\n      ol.source.Raster.context_.clearRect(0, 0, width, height);\n    }\n  }\n  renderer.composeFrame(frameState, layerState, ol.source.Raster.context_);\n  return ol.source.Raster.context_.getImageData(0, 0, width, height);\n};\n\n\n/**\n * A reusable canvas context.\n * @type {CanvasRenderingContext2D}\n * @private\n */\nol.source.Raster.context_ = null;\n\n\n/**\n * Get a list of layer states from a list of renderers.\n * @param {Array.<ol.renderer.canvas.Layer>} renderers Layer renderers.\n * @return {Array.<ol.LayerState>} The layer states.\n * @private\n */\nol.source.Raster.getLayerStatesArray_ = function(renderers) {\n  return renderers.map(function(renderer) {\n    return renderer.getLayer().getLayerState();\n  });\n};\n\n\n/**\n * Create renderers for all sources.\n * @param {Array.<ol.source.Source>} sources The sources.\n * @return {Array.<ol.renderer.canvas.Layer>} Array of layer renderers.\n * @private\n */\nol.source.Raster.createRenderers_ = function(sources) {\n  var len = sources.length;\n  var renderers = new Array(len);\n  for (var i = 0; i < len; ++i) {\n    renderers[i] = ol.source.Raster.createRenderer_(sources[i]);\n  }\n  return renderers;\n};\n\n\n/**\n * Create a renderer for the provided source.\n * @param {ol.source.Source} source The source.\n * @return {ol.renderer.canvas.Layer} The renderer.\n * @private\n */\nol.source.Raster.createRenderer_ = function(source) {\n  var renderer = null;\n  if (source instanceof ol.source.Tile) {\n    renderer = ol.source.Raster.createTileRenderer_(source);\n  } else if (source instanceof ol.source.Image) {\n    renderer = ol.source.Raster.createImageRenderer_(source);\n  }\n  return renderer;\n};\n\n\n/**\n * Create an image renderer for the provided source.\n * @param {ol.source.Image} source The source.\n * @return {ol.renderer.canvas.Layer} The renderer.\n * @private\n */\nol.source.Raster.createImageRenderer_ = function(source) {\n  var layer = new ol.layer.Image({source: source});\n  return new ol.renderer.canvas.ImageLayer(layer);\n};\n\n\n/**\n * Create a tile renderer for the provided source.\n * @param {ol.source.Tile} source The source.\n * @return {ol.renderer.canvas.Layer} The renderer.\n * @private\n */\nol.source.Raster.createTileRenderer_ = function(source) {\n  var layer = new ol.layer.Tile({source: source});\n  return new ol.renderer.canvas.TileLayer(layer);\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link ol.source.Raster} instances are instances of this\n * type.\n *\n * @constructor\n * @extends {ol.events.Event}\n * @implements {oli.source.RasterEvent}\n * @param {string} type Type.\n * @param {olx.FrameState} frameState The frame state.\n * @param {Object} data An object made available to operations.\n */\nol.source.Raster.Event = function(type, frameState, data) {\n  ol.events.Event.call(this, type);\n\n  /**\n   * The raster extent.\n   * @type {ol.Extent}\n   * @api\n   */\n  this.extent = frameState.extent;\n\n  /**\n   * The pixel resolution (map units per pixel).\n   * @type {number}\n   * @api\n   */\n  this.resolution = frameState.viewState.resolution / frameState.pixelRatio;\n\n  /**\n   * An object made available to all operations.  This can be used by operations\n   * as a storage object (e.g. for calculating statistics).\n   * @type {Object}\n   * @api\n   */\n  this.data = data;\n\n};\nol.inherits(ol.source.Raster.Event, ol.events.Event);\n\n\n/**\n * @override\n */\nol.source.Raster.prototype.getImageInternal = function() {\n  return null; // not implemented\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nol.source.Raster.EventType_ = {\n  /**\n   * Triggered before operations are run.\n   * @event ol.source.Raster.Event#beforeoperations\n   * @api\n   */\n  BEFOREOPERATIONS: 'beforeoperations',\n\n  /**\n   * Triggered after operations are run.\n   * @event ol.source.Raster.Event#afteroperations\n   * @api\n   */\n  AFTEROPERATIONS: 'afteroperations'\n};\n\ngoog.provide('ol.source.Stamen');\n\ngoog.require('ol');\ngoog.require('ol.source.OSM');\ngoog.require('ol.source.XYZ');\n\n\n/**\n * @classdesc\n * Layer source for the Stamen tile server.\n *\n * @constructor\n * @extends {ol.source.XYZ}\n * @param {olx.source.StamenOptions} options Stamen options.\n * @api\n */\nol.source.Stamen = function(options) {\n  var i = options.layer.indexOf('-');\n  var provider = i == -1 ? options.layer : options.layer.slice(0, i);\n  var providerConfig = ol.source.Stamen.ProviderConfig[provider];\n\n  var layerConfig = ol.source.Stamen.LayerConfig[options.layer];\n\n  var url = options.url !== undefined ? options.url :\n    'https://stamen-tiles-{a-d}.a.ssl.fastly.net/' + options.layer +\n      '/{z}/{x}/{y}.' + layerConfig.extension;\n\n  ol.source.XYZ.call(this, {\n    attributions: ol.source.Stamen.ATTRIBUTIONS,\n    cacheSize: options.cacheSize,\n    crossOrigin: 'anonymous',\n    maxZoom: options.maxZoom != undefined ? options.maxZoom : providerConfig.maxZoom,\n    minZoom: options.minZoom != undefined ? options.minZoom : providerConfig.minZoom,\n    opaque: layerConfig.opaque,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileLoadFunction: options.tileLoadFunction,\n    url: url,\n    wrapX: options.wrapX\n  });\n};\nol.inherits(ol.source.Stamen, ol.source.XYZ);\n\n\n/**\n * @const\n * @type {Array.<string>}\n */\nol.source.Stamen.ATTRIBUTIONS = [\n  'Map tiles by <a href=\"https://stamen.com/\">Stamen Design</a>, ' +\n        'under <a href=\"https://creativecommons.org/licenses/by/3.0/\">CC BY' +\n        ' 3.0</a>.',\n  ol.source.OSM.ATTRIBUTION\n];\n\n/**\n * @type {Object.<string, {extension: string, opaque: boolean}>}\n */\nol.source.Stamen.LayerConfig = {\n  'terrain': {\n    extension: 'jpg',\n    opaque: true\n  },\n  'terrain-background': {\n    extension: 'jpg',\n    opaque: true\n  },\n  'terrain-labels': {\n    extension: 'png',\n    opaque: false\n  },\n  'terrain-lines': {\n    extension: 'png',\n    opaque: false\n  },\n  'toner-background': {\n    extension: 'png',\n    opaque: true\n  },\n  'toner': {\n    extension: 'png',\n    opaque: true\n  },\n  'toner-hybrid': {\n    extension: 'png',\n    opaque: false\n  },\n  'toner-labels': {\n    extension: 'png',\n    opaque: false\n  },\n  'toner-lines': {\n    extension: 'png',\n    opaque: false\n  },\n  'toner-lite': {\n    extension: 'png',\n    opaque: true\n  },\n  'watercolor': {\n    extension: 'jpg',\n    opaque: true\n  }\n};\n\n/**\n * @type {Object.<string, {minZoom: number, maxZoom: number}>}\n */\nol.source.Stamen.ProviderConfig = {\n  'terrain': {\n    minZoom: 4,\n    maxZoom: 18\n  },\n  'toner': {\n    minZoom: 0,\n    maxZoom: 20\n  },\n  'watercolor': {\n    minZoom: 1,\n    maxZoom: 16\n  }\n};\n\ngoog.provide('ol.source.TileArcGISRest');\n\ngoog.require('ol');\ngoog.require('ol.extent');\ngoog.require('ol.math');\ngoog.require('ol.obj');\ngoog.require('ol.size');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.tilecoord');\ngoog.require('ol.uri');\n\n\n/**\n * @classdesc\n * Layer source for tile data from ArcGIS Rest services. Map and Image\n * Services are supported.\n *\n * For cached ArcGIS services, better performance is available using the\n * {@link ol.source.XYZ} data source.\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.TileArcGISRestOptions=} opt_options Tile ArcGIS Rest\n *     options.\n * @api\n */\nol.source.TileArcGISRest = function(opt_options) {\n\n  var options = opt_options || {};\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    projection: options.projection,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileGrid: options.tileGrid,\n    tileLoadFunction: options.tileLoadFunction,\n    url: options.url,\n    urls: options.urls,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    transition: options.transition\n  });\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.params_ = options.params || {};\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.tmpExtent_ = ol.extent.createEmpty();\n\n  this.setKey(this.getKeyForParams_());\n};\nol.inherits(ol.source.TileArcGISRest, ol.source.TileImage);\n\n\n/**\n * @private\n * @return {string} The key for the current params.\n */\nol.source.TileArcGISRest.prototype.getKeyForParams_ = function() {\n  var i = 0;\n  var res = [];\n  for (var key in this.params_) {\n    res[i++] = key + '-' + this.params_[key];\n  }\n  return res.join('/');\n};\n\n\n/**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\nol.source.TileArcGISRest.prototype.getParams = function() {\n  return this.params_;\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.Size} tileSize Tile size.\n * @param {ol.Extent} tileExtent Tile extent.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {Object} params Params.\n * @return {string|undefined} Request URL.\n * @private\n */\nol.source.TileArcGISRest.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent,\n    pixelRatio, projection, params) {\n\n  var urls = this.urls;\n  if (!urls) {\n    return undefined;\n  }\n\n  // ArcGIS Server only wants the numeric portion of the projection ID.\n  var srid = projection.getCode().split(':').pop();\n\n  params['SIZE'] = tileSize[0] + ',' + tileSize[1];\n  params['BBOX'] = tileExtent.join(',');\n  params['BBOXSR'] = srid;\n  params['IMAGESR'] = srid;\n  params['DPI'] = Math.round(\n      params['DPI'] ? params['DPI'] * pixelRatio : 90 * pixelRatio\n  );\n\n  var url;\n  if (urls.length == 1) {\n    url = urls[0];\n  } else {\n    var index = ol.math.modulo(ol.tilecoord.hash(tileCoord), urls.length);\n    url = urls[index];\n  }\n\n  var modifiedUrl = url\n      .replace(/MapServer\\/?$/, 'MapServer/export')\n      .replace(/ImageServer\\/?$/, 'ImageServer/exportImage');\n  return ol.uri.appendParams(modifiedUrl, params);\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileArcGISRest.prototype.getTilePixelRatio = function(pixelRatio) {\n  return /** @type {number} */ (pixelRatio);\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileArcGISRest.prototype.fixedTileUrlFunction = function(tileCoord, pixelRatio, projection) {\n\n  var tileGrid = this.getTileGrid();\n  if (!tileGrid) {\n    tileGrid = this.getTileGridForProjection(projection);\n  }\n\n  if (tileGrid.getResolutions().length <= tileCoord[0]) {\n    return undefined;\n  }\n\n  var tileExtent = tileGrid.getTileCoordExtent(\n      tileCoord, this.tmpExtent_);\n  var tileSize = ol.size.toSize(\n      tileGrid.getTileSize(tileCoord[0]), this.tmpSize);\n\n  if (pixelRatio != 1) {\n    tileSize = ol.size.scale(tileSize, pixelRatio, this.tmpSize);\n  }\n\n  // Apply default params and override with user specified values.\n  var baseParams = {\n    'F': 'image',\n    'FORMAT': 'PNG32',\n    'TRANSPARENT': true\n  };\n  ol.obj.assign(baseParams, this.params_);\n\n  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,\n      pixelRatio, projection, baseParams);\n};\n\n\n/**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\nol.source.TileArcGISRest.prototype.updateParams = function(params) {\n  ol.obj.assign(this.params_, params);\n  this.setKey(this.getKeyForParams_());\n};\n\ngoog.provide('ol.source.TileDebug');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\ngoog.require('ol.dom');\ngoog.require('ol.size');\ngoog.require('ol.source.Tile');\ngoog.require('ol.tilecoord');\n\n\n/**\n * @classdesc\n * A pseudo tile source, which does not fetch tiles from a server, but renders\n * a grid outline for the tile grid/projection along with the coordinates for\n * each tile. See examples/canvas-tiles for an example.\n *\n * Uses Canvas context2d, so requires Canvas support.\n *\n * @constructor\n * @extends {ol.source.Tile}\n * @param {olx.source.TileDebugOptions} options Debug tile options.\n * @api\n */\nol.source.TileDebug = function(options) {\n\n  ol.source.Tile.call(this, {\n    opaque: false,\n    projection: options.projection,\n    tileGrid: options.tileGrid,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true\n  });\n\n};\nol.inherits(ol.source.TileDebug, ol.source.Tile);\n\n\n/**\n * @inheritDoc\n */\nol.source.TileDebug.prototype.getTile = function(z, x, y) {\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  if (this.tileCache.containsKey(tileCoordKey)) {\n    return /** @type {!ol.source.TileDebug.Tile_} */ (this.tileCache.get(tileCoordKey));\n  } else {\n    var tileSize = ol.size.toSize(this.tileGrid.getTileSize(z));\n    var tileCoord = [z, x, y];\n    var textTileCoord = this.getTileCoordForTileUrlFunction(tileCoord);\n    var text = !textTileCoord ? '' :\n      this.getTileCoordForTileUrlFunction(textTileCoord).toString();\n    var tile = new ol.source.TileDebug.Tile_(tileCoord, tileSize, text);\n    this.tileCache.set(tileCoordKey, tile);\n    return tile;\n  }\n};\n\n\n/**\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.Size} tileSize Tile size.\n * @param {string} text Text.\n * @private\n */\nol.source.TileDebug.Tile_ = function(tileCoord, tileSize, text) {\n\n  ol.Tile.call(this, tileCoord, ol.TileState.LOADED);\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.tileSize_ = tileSize;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.text_ = text;\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement}\n   */\n  this.canvas_ = null;\n\n};\nol.inherits(ol.source.TileDebug.Tile_, ol.Tile);\n\n\n/**\n * Get the image element for this tile.\n * @return {HTMLCanvasElement} Image.\n */\nol.source.TileDebug.Tile_.prototype.getImage = function() {\n  if (this.canvas_) {\n    return this.canvas_;\n  } else {\n    var tileSize = this.tileSize_;\n    var context = ol.dom.createCanvasContext2D(tileSize[0], tileSize[1]);\n\n    context.strokeStyle = 'black';\n    context.strokeRect(0.5, 0.5, tileSize[0] + 0.5, tileSize[1] + 0.5);\n\n    context.fillStyle = 'black';\n    context.textAlign = 'center';\n    context.textBaseline = 'middle';\n    context.font = '24px sans-serif';\n    context.fillText(this.text_, tileSize[0] / 2, tileSize[1] / 2);\n\n    this.canvas_ = context.canvas;\n    return context.canvas;\n  }\n};\n\n\n/**\n * @override\n */\nol.source.TileDebug.Tile_.prototype.load = function() {};\n\n// FIXME check order of async callbacks\n\n/**\n * @see http://mapbox.com/developers/api/\n */\n\ngoog.provide('ol.source.TileJSON');\n\ngoog.require('ol');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.asserts');\ngoog.require('ol.extent');\ngoog.require('ol.net');\ngoog.require('ol.proj');\ngoog.require('ol.source.State');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Layer source for tile data in TileJSON format.\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.TileJSONOptions} options TileJSON options.\n * @api\n */\nol.source.TileJSON = function(options) {\n\n  /**\n   * @type {TileJSON}\n   * @private\n   */\n  this.tileJSON_ = null;\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    projection: ol.proj.get('EPSG:3857'),\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    state: ol.source.State.LOADING,\n    tileLoadFunction: options.tileLoadFunction,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    transition: options.transition\n  });\n\n  if (options.url) {\n    if (options.jsonp) {\n      ol.net.jsonp(options.url, this.handleTileJSONResponse.bind(this),\n          this.handleTileJSONError.bind(this));\n    } else {\n      var client = new XMLHttpRequest();\n      client.addEventListener('load', this.onXHRLoad_.bind(this));\n      client.addEventListener('error', this.onXHRError_.bind(this));\n      client.open('GET', options.url);\n      client.send();\n    }\n  } else if (options.tileJSON) {\n    this.handleTileJSONResponse(options.tileJSON);\n  } else {\n    ol.asserts.assert(false, 51); // Either `url` or `tileJSON` options must be provided\n  }\n\n};\nol.inherits(ol.source.TileJSON, ol.source.TileImage);\n\n\n/**\n * @private\n * @param {Event} event The load event.\n */\nol.source.TileJSON.prototype.onXHRLoad_ = function(event) {\n  var client = /** @type {XMLHttpRequest} */ (event.target);\n  // status will be 0 for file:// urls\n  if (!client.status || client.status >= 200 && client.status < 300) {\n    var response;\n    try {\n      response = /** @type {TileJSON} */(JSON.parse(client.responseText));\n    } catch (err) {\n      this.handleTileJSONError();\n      return;\n    }\n    this.handleTileJSONResponse(response);\n  } else {\n    this.handleTileJSONError();\n  }\n};\n\n\n/**\n * @private\n * @param {Event} event The error event.\n */\nol.source.TileJSON.prototype.onXHRError_ = function(event) {\n  this.handleTileJSONError();\n};\n\n\n/**\n * @return {TileJSON} The tilejson object.\n * @api\n */\nol.source.TileJSON.prototype.getTileJSON = function() {\n  return this.tileJSON_;\n};\n\n\n/**\n * @protected\n * @param {TileJSON} tileJSON Tile JSON.\n */\nol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {\n\n  var epsg4326Projection = ol.proj.get('EPSG:4326');\n\n  var sourceProjection = this.getProjection();\n  var extent;\n  if (tileJSON.bounds !== undefined) {\n    var transform = ol.proj.getTransformFromProjections(\n        epsg4326Projection, sourceProjection);\n    extent = ol.extent.applyTransform(tileJSON.bounds, transform);\n  }\n\n  var minZoom = tileJSON.minzoom || 0;\n  var maxZoom = tileJSON.maxzoom || 22;\n  var tileGrid = ol.tilegrid.createXYZ({\n    extent: ol.tilegrid.extentFromProjection(sourceProjection),\n    maxZoom: maxZoom,\n    minZoom: minZoom\n  });\n  this.tileGrid = tileGrid;\n\n  this.tileUrlFunction =\n      ol.TileUrlFunction.createFromTemplates(tileJSON.tiles, tileGrid);\n\n  if (tileJSON.attribution !== undefined && !this.getAttributions2()) {\n    var attributionExtent = extent !== undefined ?\n      extent : epsg4326Projection.getExtent();\n\n    this.setAttributions(function(frameState) {\n      if (ol.extent.intersects(attributionExtent, frameState.extent)) {\n        return [tileJSON.attribution];\n      }\n      return null;\n    });\n\n  }\n  this.tileJSON_ = tileJSON;\n  this.setState(ol.source.State.READY);\n\n};\n\n\n/**\n * @protected\n */\nol.source.TileJSON.prototype.handleTileJSONError = function() {\n  this.setState(ol.source.State.ERROR);\n};\n\ngoog.provide('ol.source.TileUTFGrid');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.asserts');\ngoog.require('ol.events');\ngoog.require('ol.events.EventType');\ngoog.require('ol.extent');\ngoog.require('ol.net');\ngoog.require('ol.proj');\ngoog.require('ol.source.State');\ngoog.require('ol.source.Tile');\ngoog.require('ol.tilecoord');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Layer source for UTFGrid interaction data loaded from TileJSON format.\n *\n * @constructor\n * @extends {ol.source.Tile}\n * @param {olx.source.TileUTFGridOptions} options Source options.\n * @api\n */\nol.source.TileUTFGrid = function(options) {\n  ol.source.Tile.call(this, {\n    projection: ol.proj.get('EPSG:3857'),\n    state: ol.source.State.LOADING\n  });\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.preemptive_ = options.preemptive !== undefined ?\n    options.preemptive : true;\n\n  /**\n   * @private\n   * @type {!ol.TileUrlFunctionType}\n   */\n  this.tileUrlFunction_ = ol.TileUrlFunction.nullTileUrlFunction;\n\n  /**\n   * @private\n   * @type {string|undefined}\n   */\n  this.template_ = undefined;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.jsonp_ = options.jsonp || false;\n\n  if (options.url) {\n    if (this.jsonp_) {\n      ol.net.jsonp(options.url, this.handleTileJSONResponse.bind(this),\n          this.handleTileJSONError.bind(this));\n    } else {\n      var client = new XMLHttpRequest();\n      client.addEventListener('load', this.onXHRLoad_.bind(this));\n      client.addEventListener('error', this.onXHRError_.bind(this));\n      client.open('GET', options.url);\n      client.send();\n    }\n  } else if (options.tileJSON) {\n    this.handleTileJSONResponse(options.tileJSON);\n  } else {\n    ol.asserts.assert(false, 51); // Either `url` or `tileJSON` options must be provided\n  }\n};\nol.inherits(ol.source.TileUTFGrid, ol.source.Tile);\n\n\n/**\n * @private\n * @param {Event} event The load event.\n */\nol.source.TileUTFGrid.prototype.onXHRLoad_ = function(event) {\n  var client = /** @type {XMLHttpRequest} */ (event.target);\n  // status will be 0 for file:// urls\n  if (!client.status || client.status >= 200 && client.status < 300) {\n    var response;\n    try {\n      response = /** @type {TileJSON} */(JSON.parse(client.responseText));\n    } catch (err) {\n      this.handleTileJSONError();\n      return;\n    }\n    this.handleTileJSONResponse(response);\n  } else {\n    this.handleTileJSONError();\n  }\n};\n\n\n/**\n * @private\n * @param {Event} event The error event.\n */\nol.source.TileUTFGrid.prototype.onXHRError_ = function(event) {\n  this.handleTileJSONError();\n};\n\n\n/**\n * Return the template from TileJSON.\n * @return {string|undefined} The template from TileJSON.\n * @api\n */\nol.source.TileUTFGrid.prototype.getTemplate = function() {\n  return this.template_;\n};\n\n\n/**\n * Calls the callback (synchronously by default) with the available data\n * for given coordinate and resolution (or `null` if not yet loaded or\n * in case of an error).\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {function(this: T, *)} callback Callback.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @param {boolean=} opt_request If `true` the callback is always async.\n *                               The tile data is requested if not yet loaded.\n * @template T\n * @api\n */\nol.source.TileUTFGrid.prototype.forDataAtCoordinateAndResolution = function(\n    coordinate, resolution, callback, opt_this, opt_request) {\n  if (this.tileGrid) {\n    var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(\n        coordinate, resolution);\n    var tile = /** @type {!ol.source.TileUTFGrid.Tile_} */(this.getTile(\n        tileCoord[0], tileCoord[1], tileCoord[2], 1, this.getProjection()));\n    tile.forDataAtCoordinate(coordinate, callback, opt_this, opt_request);\n  } else {\n    if (opt_request === true) {\n      setTimeout(function() {\n        callback.call(opt_this, null);\n      }, 0);\n    } else {\n      callback.call(opt_this, null);\n    }\n  }\n};\n\n\n/**\n * @protected\n */\nol.source.TileUTFGrid.prototype.handleTileJSONError = function() {\n  this.setState(ol.source.State.ERROR);\n};\n\n\n/**\n * TODO: very similar to ol.source.TileJSON#handleTileJSONResponse\n * @protected\n * @param {TileJSON} tileJSON Tile JSON.\n */\nol.source.TileUTFGrid.prototype.handleTileJSONResponse = function(tileJSON) {\n\n  var epsg4326Projection = ol.proj.get('EPSG:4326');\n\n  var sourceProjection = this.getProjection();\n  var extent;\n  if (tileJSON.bounds !== undefined) {\n    var transform = ol.proj.getTransformFromProjections(\n        epsg4326Projection, sourceProjection);\n    extent = ol.extent.applyTransform(tileJSON.bounds, transform);\n  }\n\n  var minZoom = tileJSON.minzoom || 0;\n  var maxZoom = tileJSON.maxzoom || 22;\n  var tileGrid = ol.tilegrid.createXYZ({\n    extent: ol.tilegrid.extentFromProjection(sourceProjection),\n    maxZoom: maxZoom,\n    minZoom: minZoom\n  });\n  this.tileGrid = tileGrid;\n\n  this.template_ = tileJSON.template;\n\n  var grids = tileJSON.grids;\n  if (!grids) {\n    this.setState(ol.source.State.ERROR);\n    return;\n  }\n\n  this.tileUrlFunction_ =\n      ol.TileUrlFunction.createFromTemplates(grids, tileGrid);\n\n  if (tileJSON.attribution !== undefined) {\n    var attributionExtent = extent !== undefined ?\n      extent : epsg4326Projection.getExtent();\n\n    this.setAttributions(function(frameState) {\n      if (ol.extent.intersects(attributionExtent, frameState.extent)) {\n        return [tileJSON.attribution];\n      }\n      return null;\n    });\n  }\n\n  this.setState(ol.source.State.READY);\n\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileUTFGrid.prototype.getTile = function(z, x, y, pixelRatio, projection) {\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  if (this.tileCache.containsKey(tileCoordKey)) {\n    return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));\n  } else {\n    var tileCoord = [z, x, y];\n    var urlTileCoord =\n        this.getTileCoordForTileUrlFunction(tileCoord, projection);\n    var tileUrl = this.tileUrlFunction_(urlTileCoord, pixelRatio, projection);\n    var tile = new ol.source.TileUTFGrid.Tile_(\n        tileCoord,\n        tileUrl !== undefined ? ol.TileState.IDLE : ol.TileState.EMPTY,\n        tileUrl !== undefined ? tileUrl : '',\n        this.tileGrid.getTileCoordExtent(tileCoord),\n        this.preemptive_,\n        this.jsonp_);\n    this.tileCache.set(tileCoordKey, tile);\n    return tile;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileUTFGrid.prototype.useTile = function(z, x, y) {\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  if (this.tileCache.containsKey(tileCoordKey)) {\n    this.tileCache.get(tileCoordKey);\n  }\n};\n\n\n/**\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {string} src Image source URI.\n * @param {ol.Extent} extent Extent of the tile.\n * @param {boolean} preemptive Load the tile when visible (before it's needed).\n * @param {boolean} jsonp Load the tile as a script.\n * @private\n */\nol.source.TileUTFGrid.Tile_ = function(tileCoord, state, src, extent, preemptive, jsonp) {\n\n  ol.Tile.call(this, tileCoord, state);\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.src_ = src;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = extent;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.preemptive_ = preemptive;\n\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.grid_ = null;\n\n  /**\n   * @private\n   * @type {Array.<string>}\n   */\n  this.keys_ = null;\n\n  /**\n   * @private\n   * @type {Object.<string, Object>|undefined}\n   */\n  this.data_ = null;\n\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.jsonp_ = jsonp;\n\n};\nol.inherits(ol.source.TileUTFGrid.Tile_, ol.Tile);\n\n\n/**\n * Get the image element for this tile.\n * @return {Image} Image.\n */\nol.source.TileUTFGrid.Tile_.prototype.getImage = function() {\n  return null;\n};\n\n\n/**\n * Synchronously returns data at given coordinate (if available).\n * @param {ol.Coordinate} coordinate Coordinate.\n * @return {*} The data.\n */\nol.source.TileUTFGrid.Tile_.prototype.getData = function(coordinate) {\n  if (!this.grid_ || !this.keys_) {\n    return null;\n  }\n  var xRelative = (coordinate[0] - this.extent_[0]) /\n      (this.extent_[2] - this.extent_[0]);\n  var yRelative = (coordinate[1] - this.extent_[1]) /\n      (this.extent_[3] - this.extent_[1]);\n\n  var row = this.grid_[Math.floor((1 - yRelative) * this.grid_.length)];\n\n  if (typeof row !== 'string') {\n    return null;\n  }\n\n  var code = row.charCodeAt(Math.floor(xRelative * row.length));\n  if (code >= 93) {\n    code--;\n  }\n  if (code >= 35) {\n    code--;\n  }\n  code -= 32;\n\n  var data = null;\n  if (code in this.keys_) {\n    var id = this.keys_[code];\n    if (this.data_ && id in this.data_) {\n      data = this.data_[id];\n    } else {\n      data = id;\n    }\n  }\n  return data;\n};\n\n\n/**\n * Calls the callback (synchronously by default) with the available data\n * for given coordinate (or `null` if not yet loaded).\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {function(this: T, *)} callback Callback.\n * @param {T=} opt_this The object to use as `this` in the callback.\n * @param {boolean=} opt_request If `true` the callback is always async.\n *                               The tile data is requested if not yet loaded.\n * @template T\n */\nol.source.TileUTFGrid.Tile_.prototype.forDataAtCoordinate = function(coordinate, callback, opt_this, opt_request) {\n  if (this.state == ol.TileState.IDLE && opt_request === true) {\n    ol.events.listenOnce(this, ol.events.EventType.CHANGE, function(e) {\n      callback.call(opt_this, this.getData(coordinate));\n    }, this);\n    this.loadInternal_();\n  } else {\n    if (opt_request === true) {\n      setTimeout(function() {\n        callback.call(opt_this, this.getData(coordinate));\n      }.bind(this), 0);\n    } else {\n      callback.call(opt_this, this.getData(coordinate));\n    }\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileUTFGrid.Tile_.prototype.getKey = function() {\n  return this.src_;\n};\n\n\n/**\n * @private\n */\nol.source.TileUTFGrid.Tile_.prototype.handleError_ = function() {\n  this.state = ol.TileState.ERROR;\n  this.changed();\n};\n\n\n/**\n * @param {!UTFGridJSON} json UTFGrid data.\n * @private\n */\nol.source.TileUTFGrid.Tile_.prototype.handleLoad_ = function(json) {\n  this.grid_ = json.grid;\n  this.keys_ = json.keys;\n  this.data_ = json.data;\n\n  this.state = ol.TileState.EMPTY;\n  this.changed();\n};\n\n\n/**\n * @private\n */\nol.source.TileUTFGrid.Tile_.prototype.loadInternal_ = function() {\n  if (this.state == ol.TileState.IDLE) {\n    this.state = ol.TileState.LOADING;\n    if (this.jsonp_) {\n      ol.net.jsonp(this.src_, this.handleLoad_.bind(this),\n          this.handleError_.bind(this));\n    } else {\n      var client = new XMLHttpRequest();\n      client.addEventListener('load', this.onXHRLoad_.bind(this));\n      client.addEventListener('error', this.onXHRError_.bind(this));\n      client.open('GET', this.src_);\n      client.send();\n    }\n  }\n};\n\n\n/**\n * @private\n * @param {Event} event The load event.\n */\nol.source.TileUTFGrid.Tile_.prototype.onXHRLoad_ = function(event) {\n  var client = /** @type {XMLHttpRequest} */ (event.target);\n  // status will be 0 for file:// urls\n  if (!client.status || client.status >= 200 && client.status < 300) {\n    var response;\n    try {\n      response = /** @type {!UTFGridJSON} */(JSON.parse(client.responseText));\n    } catch (err) {\n      this.handleError_();\n      return;\n    }\n    this.handleLoad_(response);\n  } else {\n    this.handleError_();\n  }\n};\n\n\n/**\n * @private\n * @param {Event} event The error event.\n */\nol.source.TileUTFGrid.Tile_.prototype.onXHRError_ = function(event) {\n  this.handleError_();\n};\n\n\n/**\n * @override\n */\nol.source.TileUTFGrid.Tile_.prototype.load = function() {\n  if (this.preemptive_) {\n    this.loadInternal_();\n  }\n};\n\n// FIXME add minZoom support\n// FIXME add date line wrap (tile coord transform)\n// FIXME cannot be shared between maps with different projections\n\ngoog.provide('ol.source.TileWMS');\n\ngoog.require('ol');\ngoog.require('ol.asserts');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.math');\ngoog.require('ol.proj');\ngoog.require('ol.reproj');\ngoog.require('ol.size');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.source.WMSServerType');\ngoog.require('ol.tilecoord');\ngoog.require('ol.string');\ngoog.require('ol.uri');\n\n/**\n * @classdesc\n * Layer source for tile data from WMS servers.\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.TileWMSOptions=} opt_options Tile WMS options.\n * @api\n */\nol.source.TileWMS = function(opt_options) {\n\n  var options = opt_options || {};\n\n  var params = options.params || {};\n\n  var transparent = 'TRANSPARENT' in params ? params['TRANSPARENT'] : true;\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    opaque: !transparent,\n    projection: options.projection,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileClass: options.tileClass,\n    tileGrid: options.tileGrid,\n    tileLoadFunction: options.tileLoadFunction,\n    url: options.url,\n    urls: options.urls,\n    wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    transition: options.transition\n  });\n\n  /**\n   * @private\n   * @type {number}\n   */\n  this.gutter_ = options.gutter !== undefined ? options.gutter : 0;\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.params_ = params;\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.v13_ = true;\n\n  /**\n   * @private\n   * @type {ol.source.WMSServerType|undefined}\n   */\n  this.serverType_ = /** @type {ol.source.WMSServerType|undefined} */ (options.serverType);\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.tmpExtent_ = ol.extent.createEmpty();\n\n  this.updateV13_();\n  this.setKey(this.getKeyForParams_());\n\n};\nol.inherits(ol.source.TileWMS, ol.source.TileImage);\n\n\n/**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {ol.ProjectionLike} projection Projection.\n * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should\n *     be provided. If `QUERY_LAYERS` is not provided then the layers specified\n *     in the `LAYERS` parameter will be used. `VERSION` should not be\n *     specified here.\n * @return {string|undefined} GetFeatureInfo URL.\n * @api\n */\nol.source.TileWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {\n  var projectionObj = ol.proj.get(projection);\n  var sourceProjectionObj = this.getProjection();\n\n  var tileGrid = this.getTileGrid();\n  if (!tileGrid) {\n    tileGrid = this.getTileGridForProjection(projectionObj);\n  }\n\n  var tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);\n\n  if (tileGrid.getResolutions().length <= tileCoord[0]) {\n    return undefined;\n  }\n\n  var tileResolution = tileGrid.getResolution(tileCoord[0]);\n  var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);\n  var tileSize = ol.size.toSize(tileGrid.getTileSize(tileCoord[0]), this.tmpSize);\n\n\n  var gutter = this.gutter_;\n  if (gutter !== 0) {\n    tileSize = ol.size.buffer(tileSize, gutter, this.tmpSize);\n    tileExtent = ol.extent.buffer(tileExtent, tileResolution * gutter, tileExtent);\n  }\n\n  if (sourceProjectionObj && sourceProjectionObj !== projectionObj) {\n    tileResolution = ol.reproj.calculateSourceResolution(sourceProjectionObj, projectionObj, coordinate, tileResolution);\n    tileExtent = ol.proj.transformExtent(tileExtent, projectionObj, sourceProjectionObj);\n    coordinate = ol.proj.transform(coordinate, projectionObj, sourceProjectionObj);\n  }\n\n  var baseParams = {\n    'SERVICE': 'WMS',\n    'VERSION': ol.DEFAULT_WMS_VERSION,\n    'REQUEST': 'GetFeatureInfo',\n    'FORMAT': 'image/png',\n    'TRANSPARENT': true,\n    'QUERY_LAYERS': this.params_['LAYERS']\n  };\n  ol.obj.assign(baseParams, this.params_, params);\n\n  var x = Math.floor((coordinate[0] - tileExtent[0]) / tileResolution);\n  var y = Math.floor((tileExtent[3] - coordinate[1]) / tileResolution);\n\n  baseParams[this.v13_ ? 'I' : 'X'] = x;\n  baseParams[this.v13_ ? 'J' : 'Y'] = y;\n\n  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,\n      1, sourceProjectionObj || projectionObj, baseParams);\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileWMS.prototype.getGutterInternal = function() {\n  return this.gutter_;\n};\n\n\n/**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\nol.source.TileWMS.prototype.getParams = function() {\n  return this.params_;\n};\n\n\n/**\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.Size} tileSize Tile size.\n * @param {ol.Extent} tileExtent Tile extent.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {Object} params Params.\n * @return {string|undefined} Request URL.\n * @private\n */\nol.source.TileWMS.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent,\n    pixelRatio, projection, params) {\n\n  var urls = this.urls;\n  if (!urls) {\n    return undefined;\n  }\n\n  params['WIDTH'] = tileSize[0];\n  params['HEIGHT'] = tileSize[1];\n\n  params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode();\n\n  if (!('STYLES' in this.params_)) {\n    params['STYLES'] = '';\n  }\n\n  if (pixelRatio != 1) {\n    switch (this.serverType_) {\n      case ol.source.WMSServerType.GEOSERVER:\n        var dpi = (90 * pixelRatio + 0.5) | 0;\n        if ('FORMAT_OPTIONS' in params) {\n          params['FORMAT_OPTIONS'] += ';dpi:' + dpi;\n        } else {\n          params['FORMAT_OPTIONS'] = 'dpi:' + dpi;\n        }\n        break;\n      case ol.source.WMSServerType.MAPSERVER:\n        params['MAP_RESOLUTION'] = 90 * pixelRatio;\n        break;\n      case ol.source.WMSServerType.CARMENTA_SERVER:\n      case ol.source.WMSServerType.QGIS:\n        params['DPI'] = 90 * pixelRatio;\n        break;\n      default:\n        ol.asserts.assert(false, 52); // Unknown `serverType` configured\n        break;\n    }\n  }\n\n  var axisOrientation = projection.getAxisOrientation();\n  var bbox = tileExtent;\n  if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') {\n    var tmp;\n    tmp = tileExtent[0];\n    bbox[0] = tileExtent[1];\n    bbox[1] = tmp;\n    tmp = tileExtent[2];\n    bbox[2] = tileExtent[3];\n    bbox[3] = tmp;\n  }\n  params['BBOX'] = bbox.join(',');\n\n  var url;\n  if (urls.length == 1) {\n    url = urls[0];\n  } else {\n    var index = ol.math.modulo(ol.tilecoord.hash(tileCoord), urls.length);\n    url = urls[index];\n  }\n  return ol.uri.appendParams(url, params);\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileWMS.prototype.getTilePixelRatio = function(pixelRatio) {\n  return (!this.hidpi_ || this.serverType_ === undefined) ? 1 :\n  /** @type {number} */ (pixelRatio);\n};\n\n\n/**\n * @private\n * @return {string} The key for the current params.\n */\nol.source.TileWMS.prototype.getKeyForParams_ = function() {\n  var i = 0;\n  var res = [];\n  for (var key in this.params_) {\n    res[i++] = key + '-' + this.params_[key];\n  }\n  return res.join('/');\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.TileWMS.prototype.fixedTileUrlFunction = function(tileCoord, pixelRatio, projection) {\n\n  var tileGrid = this.getTileGrid();\n  if (!tileGrid) {\n    tileGrid = this.getTileGridForProjection(projection);\n  }\n\n  if (tileGrid.getResolutions().length <= tileCoord[0]) {\n    return undefined;\n  }\n\n  if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {\n    pixelRatio = 1;\n  }\n\n  var tileResolution = tileGrid.getResolution(tileCoord[0]);\n  var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);\n  var tileSize = ol.size.toSize(\n      tileGrid.getTileSize(tileCoord[0]), this.tmpSize);\n\n  var gutter = this.gutter_;\n  if (gutter !== 0) {\n    tileSize = ol.size.buffer(tileSize, gutter, this.tmpSize);\n    tileExtent = ol.extent.buffer(tileExtent,\n        tileResolution * gutter, tileExtent);\n  }\n\n  if (pixelRatio != 1) {\n    tileSize = ol.size.scale(tileSize, pixelRatio, this.tmpSize);\n  }\n\n  var baseParams = {\n    'SERVICE': 'WMS',\n    'VERSION': ol.DEFAULT_WMS_VERSION,\n    'REQUEST': 'GetMap',\n    'FORMAT': 'image/png',\n    'TRANSPARENT': true\n  };\n  ol.obj.assign(baseParams, this.params_);\n\n  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,\n      pixelRatio, projection, baseParams);\n};\n\n/**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\nol.source.TileWMS.prototype.updateParams = function(params) {\n  ol.obj.assign(this.params_, params);\n  this.updateV13_();\n  this.setKey(this.getKeyForParams_());\n};\n\n\n/**\n * @private\n */\nol.source.TileWMS.prototype.updateV13_ = function() {\n  var version = this.params_['VERSION'] || ol.DEFAULT_WMS_VERSION;\n  this.v13_ = ol.string.compareVersions(version, '1.3') >= 0;\n};\n\ngoog.provide('ol.VectorImageTile');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\ngoog.require('ol.dom');\ngoog.require('ol.events');\ngoog.require('ol.extent');\ngoog.require('ol.events.EventType');\ngoog.require('ol.featureloader');\n\n\n/**\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {number} sourceRevision Source revision.\n * @param {ol.format.Feature} format Feature format.\n * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.\n * @param {ol.TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n * @param {ol.TileUrlFunctionType} tileUrlFunction Tile url function.\n * @param {ol.tilegrid.TileGrid} sourceTileGrid Tile grid of the source.\n * @param {ol.tilegrid.TileGrid} tileGrid Tile grid of the renderer.\n * @param {Object.<string,ol.VectorTile>} sourceTiles Source tiles.\n * @param {number} pixelRatio Pixel ratio.\n * @param {ol.proj.Projection} projection Projection.\n * @param {function(new: ol.VectorTile, ol.TileCoord, ol.TileState, string,\n *     ol.format.Feature, ol.TileLoadFunctionType)} tileClass Class to\n *     instantiate for source tiles.\n * @param {function(this: ol.source.VectorTile, ol.events.Event)} handleTileChange\n *     Function to call when a source tile's state changes.\n * @param {olx.TileOptions=} opt_options Tile options.\n */\nol.VectorImageTile = function(tileCoord, state, sourceRevision, format,\n    tileLoadFunction, urlTileCoord, tileUrlFunction, sourceTileGrid, tileGrid,\n    sourceTiles, pixelRatio, projection, tileClass, handleTileChange, opt_options) {\n\n  ol.Tile.call(this, tileCoord, state, opt_options);\n\n  /**\n   * @private\n   * @type {Object.<string, CanvasRenderingContext2D>}\n   */\n  this.context_ = {};\n\n  /**\n   * @private\n   * @type {ol.FeatureLoader}\n   */\n  this.loader_;\n\n  /**\n   * @private\n   * @type {Object.<string, ol.TileReplayState>}\n   */\n  this.replayState_ = {};\n\n  /**\n   * @private\n   * @type {Object.<string,ol.VectorTile>}\n   */\n  this.sourceTiles_ = sourceTiles;\n\n  /**\n   * Keys of source tiles used by this tile. Use with {@link #getTile}.\n   * @type {Array.<string>}\n   */\n  this.tileKeys = [];\n\n  /**\n   * @type {number}\n   */\n  this.sourceRevision_ = sourceRevision;\n\n  /**\n   * @type {ol.TileCoord}\n   */\n  this.wrappedTileCoord = urlTileCoord;\n\n  /**\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.loadListenerKeys_ = [];\n\n  /**\n   * @type {Array.<ol.EventsKey>}\n   */\n  this.sourceTileListenerKeys_ = [];\n\n  if (urlTileCoord) {\n    var extent = tileGrid.getTileCoordExtent(urlTileCoord);\n    var resolution = tileGrid.getResolution(tileCoord[0]);\n    var sourceZ = sourceTileGrid.getZForResolution(resolution);\n    sourceTileGrid.forEachTileCoord(extent, sourceZ, function(sourceTileCoord) {\n      var sharedExtent = ol.extent.getIntersection(extent,\n          sourceTileGrid.getTileCoordExtent(sourceTileCoord));\n      var sourceExtent = sourceTileGrid.getExtent();\n      if (sourceExtent) {\n        sharedExtent = ol.extent.getIntersection(sharedExtent, sourceExtent);\n      }\n      if (ol.extent.getWidth(sharedExtent) / resolution >= 0.5 &&\n          ol.extent.getHeight(sharedExtent) / resolution >= 0.5) {\n        // only include source tile if overlap is at least 1 pixel\n        var sourceTileKey = sourceTileCoord.toString();\n        var sourceTile = sourceTiles[sourceTileKey];\n        if (!sourceTile) {\n          var tileUrl = tileUrlFunction(sourceTileCoord, pixelRatio, projection);\n          sourceTile = sourceTiles[sourceTileKey] = new tileClass(sourceTileCoord,\n              tileUrl == undefined ? ol.TileState.EMPTY : ol.TileState.IDLE,\n              tileUrl == undefined ? '' : tileUrl,\n              format, tileLoadFunction);\n          this.sourceTileListenerKeys_.push(\n              ol.events.listen(sourceTile, ol.events.EventType.CHANGE, handleTileChange));\n        }\n        sourceTile.consumers++;\n        this.tileKeys.push(sourceTileKey);\n      }\n    }.bind(this));\n  }\n\n};\nol.inherits(ol.VectorImageTile, ol.Tile);\n\n\n/**\n * @inheritDoc\n */\nol.VectorImageTile.prototype.disposeInternal = function() {\n  for (var i = 0, ii = this.tileKeys.length; i < ii; ++i) {\n    var sourceTileKey = this.tileKeys[i];\n    var sourceTile = this.getTile(sourceTileKey);\n    sourceTile.consumers--;\n    if (sourceTile.consumers == 0) {\n      delete this.sourceTiles_[sourceTileKey];\n      sourceTile.dispose();\n    }\n  }\n  this.tileKeys.length = 0;\n  this.sourceTiles_ = null;\n  this.loadListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.loadListenerKeys_.length = 0;\n  if (this.interimTile) {\n    this.interimTile.dispose();\n  }\n  this.state = ol.TileState.ABORT;\n  this.changed();\n  this.sourceTileListenerKeys_.forEach(ol.events.unlistenByKey);\n  this.sourceTileListenerKeys_.length = 0;\n  ol.Tile.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * @param {ol.layer.Layer} layer Layer.\n * @return {CanvasRenderingContext2D} The rendering context.\n */\nol.VectorImageTile.prototype.getContext = function(layer) {\n  var key = ol.getUid(layer).toString();\n  if (!(key in this.context_)) {\n    this.context_[key] = ol.dom.createCanvasContext2D();\n  }\n  return this.context_[key];\n};\n\n\n/**\n * Get the Canvas for this tile.\n * @param {ol.layer.Layer} layer Layer.\n * @return {HTMLCanvasElement} Canvas.\n */\nol.VectorImageTile.prototype.getImage = function(layer) {\n  return this.getReplayState(layer).renderedTileRevision == -1 ?\n    null : this.getContext(layer).canvas;\n};\n\n\n/**\n * @param {ol.layer.Layer} layer Layer.\n * @return {ol.TileReplayState} The replay state.\n */\nol.VectorImageTile.prototype.getReplayState = function(layer) {\n  var key = ol.getUid(layer).toString();\n  if (!(key in this.replayState_)) {\n    this.replayState_[key] = {\n      dirty: false,\n      renderedRenderOrder: null,\n      renderedRevision: -1,\n      renderedTileRevision: -1\n    };\n  }\n  return this.replayState_[key];\n};\n\n\n/**\n * @inheritDoc\n */\nol.VectorImageTile.prototype.getKey = function() {\n  return this.tileKeys.join('/') + '-' + this.sourceRevision_;\n};\n\n\n/**\n * @param {string} tileKey Key (tileCoord) of the source tile.\n * @return {ol.VectorTile} Source tile.\n */\nol.VectorImageTile.prototype.getTile = function(tileKey) {\n  return this.sourceTiles_[tileKey];\n};\n\n\n/**\n * @inheritDoc\n */\nol.VectorImageTile.prototype.load = function() {\n  // Source tiles with LOADED state - we just count them because once they are\n  // loaded, we're no longer listening to state changes.\n  var leftToLoad = 0;\n  // Source tiles with ERROR state - we track them because they can still have\n  // an ERROR state after another load attempt.\n  var errorSourceTiles = {};\n\n  if (this.state == ol.TileState.IDLE) {\n    this.setState(ol.TileState.LOADING);\n  }\n  if (this.state == ol.TileState.LOADING) {\n    this.tileKeys.forEach(function(sourceTileKey) {\n      var sourceTile = this.getTile(sourceTileKey);\n      if (sourceTile.state == ol.TileState.IDLE) {\n        sourceTile.setLoader(this.loader_);\n        sourceTile.load();\n      }\n      if (sourceTile.state == ol.TileState.LOADING) {\n        var key = ol.events.listen(sourceTile, ol.events.EventType.CHANGE, function(e) {\n          var state = sourceTile.getState();\n          if (state == ol.TileState.LOADED ||\n              state == ol.TileState.ERROR) {\n            var uid = ol.getUid(sourceTile);\n            if (state == ol.TileState.ERROR) {\n              errorSourceTiles[uid] = true;\n            } else {\n              --leftToLoad;\n              delete errorSourceTiles[uid];\n            }\n            if (leftToLoad - Object.keys(errorSourceTiles).length == 0) {\n              this.finishLoading_();\n            }\n          }\n        }.bind(this));\n        this.loadListenerKeys_.push(key);\n        ++leftToLoad;\n      }\n    }.bind(this));\n  }\n  if (leftToLoad - Object.keys(errorSourceTiles).length == 0) {\n    setTimeout(this.finishLoading_.bind(this), 0);\n  }\n};\n\n\n/**\n * @private\n */\nol.VectorImageTile.prototype.finishLoading_ = function() {\n  var loaded = this.tileKeys.length;\n  var empty = 0;\n  for (var i = loaded - 1; i >= 0; --i) {\n    var state = this.getTile(this.tileKeys[i]).getState();\n    if (state != ol.TileState.LOADED) {\n      --loaded;\n    }\n    if (state == ol.TileState.EMPTY) {\n      ++empty;\n    }\n  }\n  if (loaded == this.tileKeys.length) {\n    this.loadListenerKeys_.forEach(ol.events.unlistenByKey);\n    this.loadListenerKeys_.length = 0;\n    this.setState(ol.TileState.LOADED);\n  } else {\n    this.setState(empty == this.tileKeys.length ? ol.TileState.EMPTY : ol.TileState.ERROR);\n  }\n};\n\n\n/**\n * Sets the loader for a tile.\n * @param {ol.VectorTile} tile Vector tile.\n * @param {string} url URL.\n */\nol.VectorImageTile.defaultLoadFunction = function(tile, url) {\n  var loader = ol.featureloader.loadFeaturesXhr(\n      url, tile.getFormat(), tile.onLoad.bind(tile), tile.onError.bind(tile));\n\n  tile.setLoader(loader);\n};\n\ngoog.provide('ol.VectorTile');\n\ngoog.require('ol');\ngoog.require('ol.Tile');\ngoog.require('ol.TileState');\n\n\n/**\n * @constructor\n * @extends {ol.Tile}\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {string} src Data source url.\n * @param {ol.format.Feature} format Feature format.\n * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.\n * @param {olx.TileOptions=} opt_options Tile options.\n */\nol.VectorTile = function(tileCoord, state, src, format, tileLoadFunction, opt_options) {\n\n  ol.Tile.call(this, tileCoord, state, opt_options);\n\n  /**\n   * @type {number}\n   */\n  this.consumers = 0;\n\n  /**\n   * @private\n   * @type {ol.Extent}\n   */\n  this.extent_ = null;\n\n  /**\n   * @private\n   * @type {ol.format.Feature}\n   */\n  this.format_ = format;\n\n  /**\n   * @private\n   * @type {Array.<ol.Feature>}\n   */\n  this.features_ = null;\n\n  /**\n   * @private\n   * @type {ol.FeatureLoader}\n   */\n  this.loader_;\n\n  /**\n   * Data projection\n   * @private\n   * @type {ol.proj.Projection}\n   */\n  this.projection_;\n\n  /**\n   * @private\n   * @type {Object.<string, ol.render.ReplayGroup>}\n   */\n  this.replayGroups_ = {};\n\n  /**\n   * @private\n   * @type {ol.TileLoadFunctionType}\n   */\n  this.tileLoadFunction_ = tileLoadFunction;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.url_ = src;\n\n};\nol.inherits(ol.VectorTile, ol.Tile);\n\n\n/**\n * @inheritDoc\n */\nol.VectorTile.prototype.disposeInternal = function() {\n  this.features_ = null;\n  this.replayGroups_ = {};\n  this.state = ol.TileState.ABORT;\n  this.changed();\n  ol.Tile.prototype.disposeInternal.call(this);\n};\n\n\n/**\n * Gets the extent of the vector tile.\n * @return {ol.Extent} The extent.\n * @api\n */\nol.VectorTile.prototype.getExtent = function() {\n  return this.extent_ || ol.VectorTile.DEFAULT_EXTENT;\n};\n\n\n/**\n * Get the feature format assigned for reading this tile's features.\n * @return {ol.format.Feature} Feature format.\n * @api\n */\nol.VectorTile.prototype.getFormat = function() {\n  return this.format_;\n};\n\n\n/**\n * Get the features for this tile. Geometries will be in the projection returned\n * by {@link ol.VectorTile#getProjection}.\n * @return {Array.<ol.Feature|ol.render.Feature>} Features.\n * @api\n */\nol.VectorTile.prototype.getFeatures = function() {\n  return this.features_;\n};\n\n\n/**\n * @inheritDoc\n */\nol.VectorTile.prototype.getKey = function() {\n  return this.url_;\n};\n\n\n/**\n * Get the feature projection of features returned by\n * {@link ol.VectorTile#getFeatures}.\n * @return {ol.proj.Projection} Feature projection.\n * @api\n */\nol.VectorTile.prototype.getProjection = function() {\n  return this.projection_;\n};\n\n\n/**\n * @param {ol.layer.Layer} layer Layer.\n * @param {string} key Key.\n * @return {ol.render.ReplayGroup} Replay group.\n */\nol.VectorTile.prototype.getReplayGroup = function(layer, key) {\n  return this.replayGroups_[ol.getUid(layer) + ',' + key];\n};\n\n\n/**\n * @inheritDoc\n */\nol.VectorTile.prototype.load = function() {\n  if (this.state == ol.TileState.IDLE) {\n    this.setState(ol.TileState.LOADING);\n    this.tileLoadFunction_(this, this.url_);\n    this.loader_(null, NaN, null);\n  }\n};\n\n\n/**\n * Handler for successful tile load.\n * @param {Array.<ol.Feature>} features The loaded features.\n * @param {ol.proj.Projection} dataProjection Data projection.\n * @param {ol.Extent} extent Extent.\n */\nol.VectorTile.prototype.onLoad = function(features, dataProjection, extent) {\n  this.setProjection(dataProjection);\n  this.setFeatures(features);\n  this.setExtent(extent);\n};\n\n\n/**\n * Handler for tile load errors.\n */\nol.VectorTile.prototype.onError = function() {\n  this.setState(ol.TileState.ERROR);\n};\n\n\n/**\n * Function for use in an {@link ol.source.VectorTile}'s `tileLoadFunction`.\n * Sets the extent of the vector tile. This is only required for tiles in\n * projections with `tile-pixels` as units. The extent should be set to\n * `[0, 0, tilePixelSize, tilePixelSize]`, where `tilePixelSize` is calculated\n * by multiplying the tile size with the tile pixel ratio. For sources using\n * {@link ol.format.MVT} as feature format, the\n * {@link ol.format.MVT#getLastExtent} method will return the correct extent.\n * The default is `[0, 0, 4096, 4096]`.\n * @param {ol.Extent} extent The extent.\n * @api\n */\nol.VectorTile.prototype.setExtent = function(extent) {\n  this.extent_ = extent;\n};\n\n\n/**\n * Function for use in an {@link ol.source.VectorTile}'s `tileLoadFunction`.\n * Sets the features for the tile.\n * @param {Array.<ol.Feature>} features Features.\n * @api\n */\nol.VectorTile.prototype.setFeatures = function(features) {\n  this.features_ = features;\n  this.setState(ol.TileState.LOADED);\n};\n\n\n/**\n * Function for use in an {@link ol.source.VectorTile}'s `tileLoadFunction`.\n * Sets the projection of the features that were added with\n * {@link ol.VectorTile#setFeatures}.\n * @param {ol.proj.Projection} projection Feature projection.\n * @api\n */\nol.VectorTile.prototype.setProjection = function(projection) {\n  this.projection_ = projection;\n};\n\n\n/**\n * @param {ol.layer.Layer} layer Layer.\n * @param {string} key Key.\n * @param {ol.render.ReplayGroup} replayGroup Replay group.\n */\nol.VectorTile.prototype.setReplayGroup = function(layer, key, replayGroup) {\n  this.replayGroups_[ol.getUid(layer) + ',' + key] = replayGroup;\n};\n\n\n/**\n * Set the feature loader for reading this tile's features.\n * @param {ol.FeatureLoader} loader Feature loader.\n * @api\n */\nol.VectorTile.prototype.setLoader = function(loader) {\n  this.loader_ = loader;\n};\n\n\n/**\n * @const\n * @type {ol.Extent}\n */\nol.VectorTile.DEFAULT_EXTENT = [0, 0, 4096, 4096];\n\ngoog.provide('ol.source.VectorTile');\n\ngoog.require('ol');\ngoog.require('ol.TileState');\ngoog.require('ol.VectorImageTile');\ngoog.require('ol.VectorTile');\ngoog.require('ol.size');\ngoog.require('ol.source.UrlTile');\ngoog.require('ol.tilecoord');\ngoog.require('ol.tilegrid');\n\n\n/**\n * @classdesc\n * Class for layer sources providing vector data divided into a tile grid, to be\n * used with {@link ol.layer.VectorTile}. Although this source receives tiles\n * with vector features from the server, it is not meant for feature editing.\n * Features are optimized for rendering, their geometries are clipped at or near\n * tile boundaries and simplified for a view resolution. See\n * {@link ol.source.Vector} for vector sources that are suitable for feature\n * editing.\n *\n * @constructor\n * @fires ol.source.Tile.Event\n * @extends {ol.source.UrlTile}\n * @param {olx.source.VectorTileOptions} options Vector tile options.\n * @api\n */\nol.source.VectorTile = function(options) {\n  var projection = options.projection || 'EPSG:3857';\n\n  var extent = options.extent || ol.tilegrid.extentFromProjection(projection);\n\n  var tileGrid = options.tileGrid || ol.tilegrid.createXYZ({\n    extent: extent,\n    maxZoom: options.maxZoom || 22,\n    minZoom: options.minZoom,\n    tileSize: options.tileSize || 512\n  });\n\n  ol.source.UrlTile.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,\n    extent: extent,\n    logo: options.logo,\n    opaque: false,\n    projection: projection,\n    state: options.state,\n    tileGrid: tileGrid,\n    tileLoadFunction: options.tileLoadFunction ?\n      options.tileLoadFunction : ol.VectorImageTile.defaultLoadFunction,\n    tileUrlFunction: options.tileUrlFunction,\n    url: options.url,\n    urls: options.urls,\n    wrapX: options.wrapX === undefined ? true : options.wrapX,\n    transition: options.transition\n  });\n\n  /**\n   * @private\n   * @type {ol.format.Feature}\n   */\n  this.format_ = options.format ? options.format : null;\n\n  /**\n   * @private\n   * @type {Object.<string,ol.VectorTile>}\n   */\n  this.sourceTiles_ = {};\n\n  /**\n   * @private\n   * @type {boolean}\n   */\n  this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;\n\n  /**\n   * @protected\n   * @type {function(new: ol.VectorTile, ol.TileCoord, ol.TileState, string,\n   *        ol.format.Feature, ol.TileLoadFunctionType)}\n   */\n  this.tileClass = options.tileClass ? options.tileClass : ol.VectorTile;\n\n  /**\n   * @private\n   * @type {Object.<string,ol.tilegrid.TileGrid>}\n   */\n  this.tileGrids_ = {};\n\n};\nol.inherits(ol.source.VectorTile, ol.source.UrlTile);\n\n\n/**\n * @return {boolean} The source can have overlapping geometries.\n */\nol.source.VectorTile.prototype.getOverlaps = function() {\n  return this.overlaps_;\n};\n\n/**\n * clear {@link ol.TileCache} and delete all source tiles\n * @api\n */\nol.source.VectorTile.prototype.clear = function() {\n  this.tileCache.clear();\n  this.sourceTiles_ = {};\n};\n\n/**\n * @inheritDoc\n */\nol.source.VectorTile.prototype.getTile = function(z, x, y, pixelRatio, projection) {\n  var tileCoordKey = ol.tilecoord.getKeyZXY(z, x, y);\n  if (this.tileCache.containsKey(tileCoordKey)) {\n    return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));\n  } else {\n    var tileCoord = [z, x, y];\n    var urlTileCoord = this.getTileCoordForTileUrlFunction(\n        tileCoord, projection);\n    var tile = new ol.VectorImageTile(\n        tileCoord,\n        urlTileCoord !== null ? ol.TileState.IDLE : ol.TileState.EMPTY,\n        this.getRevision(),\n        this.format_, this.tileLoadFunction, urlTileCoord, this.tileUrlFunction,\n        this.tileGrid, this.getTileGridForProjection(projection),\n        this.sourceTiles_, pixelRatio, projection, this.tileClass,\n        this.handleTileChange.bind(this),\n        this.tileOptions);\n\n    this.tileCache.set(tileCoordKey, tile);\n    return tile;\n  }\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.VectorTile.prototype.getTileGridForProjection = function(projection) {\n  var code = projection.getCode();\n  var tileGrid = this.tileGrids_[code];\n  if (!tileGrid) {\n    // A tile grid that matches the tile size of the source tile grid is more\n    // likely to have 1:1 relationships between source tiles and rendered tiles.\n    var sourceTileGrid = this.tileGrid;\n    tileGrid = this.tileGrids_[code] = ol.tilegrid.createForProjection(projection, undefined,\n        sourceTileGrid ? sourceTileGrid.getTileSize(sourceTileGrid.getMinZoom()) : undefined);\n  }\n  return tileGrid;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.VectorTile.prototype.getTilePixelRatio = function(pixelRatio) {\n  return pixelRatio;\n};\n\n\n/**\n * @inheritDoc\n */\nol.source.VectorTile.prototype.getTilePixelSize = function(z, pixelRatio, projection) {\n  var tileSize = ol.size.toSize(this.getTileGridForProjection(projection).getTileSize(z));\n  return [Math.round(tileSize[0] * pixelRatio), Math.round(tileSize[1] * pixelRatio)];\n};\n\ngoog.provide('ol.source.WMTSRequestEncoding');\n\n/**\n * Request encoding. One of 'KVP', 'REST'.\n * @enum {string}\n */\nol.source.WMTSRequestEncoding = {\n  KVP: 'KVP',  // see spec §8\n  REST: 'REST' // see spec §10\n};\n\ngoog.provide('ol.tilegrid.WMTS');\n\ngoog.require('ol');\ngoog.require('ol.array');\ngoog.require('ol.proj');\ngoog.require('ol.tilegrid.TileGrid');\n\n\n/**\n * @classdesc\n * Set the grid pattern for sources accessing WMTS tiled-image servers.\n *\n * @constructor\n * @extends {ol.tilegrid.TileGrid}\n * @param {olx.tilegrid.WMTSOptions} options WMTS options.\n * @struct\n * @api\n */\nol.tilegrid.WMTS = function(options) {\n  /**\n   * @private\n   * @type {!Array.<string>}\n   */\n  this.matrixIds_ = options.matrixIds;\n  // FIXME: should the matrixIds become optional?\n\n  ol.tilegrid.TileGrid.call(this, {\n    extent: options.extent,\n    origin: options.origin,\n    origins: options.origins,\n    resolutions: options.resolutions,\n    tileSize: options.tileSize,\n    tileSizes: options.tileSizes,\n    sizes: options.sizes\n  });\n};\nol.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid);\n\n\n/**\n * @param {number} z Z.\n * @return {string} MatrixId..\n */\nol.tilegrid.WMTS.prototype.getMatrixId = function(z) {\n  return this.matrixIds_[z];\n};\n\n\n/**\n * Get the list of matrix identifiers.\n * @return {Array.<string>} MatrixIds.\n * @api\n */\nol.tilegrid.WMTS.prototype.getMatrixIds = function() {\n  return this.matrixIds_;\n};\n\n\n/**\n * Create a tile grid from a WMTS capabilities matrix set and an\n * optional TileMatrixSetLimits.\n * @param {Object} matrixSet An object representing a matrixSet in the\n *     capabilities document.\n * @param {ol.Extent=} opt_extent An optional extent to restrict the tile\n *     ranges the server provides.\n * @param {Array.<Object>=} opt_matrixLimits An optional object representing\n *     the available matrices for tileGrid.\n * @return {ol.tilegrid.WMTS} WMTS tileGrid instance.\n * @api\n */\nol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet, opt_extent,\n    opt_matrixLimits) {\n\n  /** @type {!Array.<number>} */\n  var resolutions = [];\n  /** @type {!Array.<string>} */\n  var matrixIds = [];\n  /** @type {!Array.<ol.Coordinate>} */\n  var origins = [];\n  /** @type {!Array.<ol.Size>} */\n  var tileSizes = [];\n  /** @type {!Array.<ol.Size>} */\n  var sizes = [];\n\n  var matrixLimits = opt_matrixLimits !== undefined ? opt_matrixLimits : [];\n\n  var supportedCRSPropName = 'SupportedCRS';\n  var matrixIdsPropName = 'TileMatrix';\n  var identifierPropName = 'Identifier';\n  var scaleDenominatorPropName = 'ScaleDenominator';\n  var topLeftCornerPropName = 'TopLeftCorner';\n  var tileWidthPropName = 'TileWidth';\n  var tileHeightPropName = 'TileHeight';\n\n  var code = matrixSet[supportedCRSPropName];\n  var projection = ol.proj.get(code.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/, '$1:$3')) ||\n      ol.proj.get(code);\n  var metersPerUnit = projection.getMetersPerUnit();\n  // swap origin x and y coordinates if axis orientation is lat/long\n  var switchOriginXY = projection.getAxisOrientation().substr(0, 2) == 'ne';\n\n  matrixSet[matrixIdsPropName].sort(function(a, b) {\n    return b[scaleDenominatorPropName] - a[scaleDenominatorPropName];\n  });\n\n  matrixSet[matrixIdsPropName].forEach(function(elt, index, array) {\n\n    var matrixAvailable;\n    // use of matrixLimits to filter TileMatrices from GetCapabilities\n    // TileMatrixSet from unavailable matrix levels.\n    if (matrixLimits.length > 0) {\n      matrixAvailable = ol.array.find(matrixLimits,\n          function(elt_ml, index_ml, array_ml) {\n            return elt[identifierPropName] == elt_ml[matrixIdsPropName];\n          });\n    } else {\n      matrixAvailable = true;\n    }\n\n    if (matrixAvailable) {\n      matrixIds.push(elt[identifierPropName]);\n      var resolution = elt[scaleDenominatorPropName] * 0.28E-3 / metersPerUnit;\n      var tileWidth = elt[tileWidthPropName];\n      var tileHeight = elt[tileHeightPropName];\n      if (switchOriginXY) {\n        origins.push([elt[topLeftCornerPropName][1],\n          elt[topLeftCornerPropName][0]]);\n      } else {\n        origins.push(elt[topLeftCornerPropName]);\n      }\n      resolutions.push(resolution);\n      tileSizes.push(tileWidth == tileHeight ?\n        tileWidth : [tileWidth, tileHeight]);\n      // top-left origin, so height is negative\n      sizes.push([elt['MatrixWidth'], -elt['MatrixHeight']]);\n    }\n  });\n\n  return new ol.tilegrid.WMTS({\n    extent: opt_extent,\n    origins: origins,\n    resolutions: resolutions,\n    matrixIds: matrixIds,\n    tileSizes: tileSizes,\n    sizes: sizes\n  });\n};\n\ngoog.provide('ol.source.WMTS');\n\ngoog.require('ol');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.array');\ngoog.require('ol.extent');\ngoog.require('ol.obj');\ngoog.require('ol.proj');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.source.WMTSRequestEncoding');\ngoog.require('ol.tilegrid.WMTS');\ngoog.require('ol.uri');\n\n\n/**\n * @classdesc\n * Layer source for tile data from WMTS servers.\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.WMTSOptions} options WMTS options.\n * @api\n */\nol.source.WMTS = function(options) {\n\n  // TODO: add support for TileMatrixLimits\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.version_ = options.version !== undefined ? options.version : '1.0.0';\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.format_ = options.format !== undefined ? options.format : 'image/jpeg';\n\n  /**\n   * @private\n   * @type {!Object}\n   */\n  this.dimensions_ = options.dimensions !== undefined ? options.dimensions : {};\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.layer_ = options.layer;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.matrixSet_ = options.matrixSet;\n\n  /**\n   * @private\n   * @type {string}\n   */\n  this.style_ = options.style;\n\n  var urls = options.urls;\n  if (urls === undefined && options.url !== undefined) {\n    urls = ol.TileUrlFunction.expandUrl(options.url);\n  }\n\n  // FIXME: should we guess this requestEncoding from options.url(s)\n  //        structure? that would mean KVP only if a template is not provided.\n\n  /**\n   * @private\n   * @type {ol.source.WMTSRequestEncoding}\n   */\n  this.requestEncoding_ = options.requestEncoding !== undefined ?\n    /** @type {ol.source.WMTSRequestEncoding} */ (options.requestEncoding) :\n    ol.source.WMTSRequestEncoding.KVP;\n\n  var requestEncoding = this.requestEncoding_;\n\n  // FIXME: should we create a default tileGrid?\n  // we could issue a getCapabilities xhr to retrieve missing configuration\n  var tileGrid = options.tileGrid;\n\n  // context property names are lower case to allow for a case insensitive\n  // replacement as some services use different naming conventions\n  var context = {\n    'layer': this.layer_,\n    'style': this.style_,\n    'tilematrixset': this.matrixSet_\n  };\n\n  if (requestEncoding == ol.source.WMTSRequestEncoding.KVP) {\n    ol.obj.assign(context, {\n      'Service': 'WMTS',\n      'Request': 'GetTile',\n      'Version': this.version_,\n      'Format': this.format_\n    });\n  }\n\n  var dimensions = this.dimensions_;\n\n  /**\n   * @param {string} template Template.\n   * @return {ol.TileUrlFunctionType} Tile URL function.\n   * @private\n   */\n  this.createFromWMTSTemplate_ = function(template) {\n\n    // TODO: we may want to create our own appendParams function so that params\n    // order conforms to wmts spec guidance, and so that we can avoid to escape\n    // special template params\n\n    template = (requestEncoding == ol.source.WMTSRequestEncoding.KVP) ?\n      ol.uri.appendParams(template, context) :\n      template.replace(/\\{(\\w+?)\\}/g, function(m, p) {\n        return (p.toLowerCase() in context) ? context[p.toLowerCase()] : m;\n      });\n\n    return (\n      /**\n       * @param {ol.TileCoord} tileCoord Tile coordinate.\n       * @param {number} pixelRatio Pixel ratio.\n       * @param {ol.proj.Projection} projection Projection.\n       * @return {string|undefined} Tile URL.\n       */\n      function(tileCoord, pixelRatio, projection) {\n        if (!tileCoord) {\n          return undefined;\n        } else {\n          var localContext = {\n            'TileMatrix': tileGrid.getMatrixId(tileCoord[0]),\n            'TileCol': tileCoord[1],\n            'TileRow': -tileCoord[2] - 1\n          };\n          ol.obj.assign(localContext, dimensions);\n          var url = template;\n          if (requestEncoding == ol.source.WMTSRequestEncoding.KVP) {\n            url = ol.uri.appendParams(url, localContext);\n          } else {\n            url = url.replace(/\\{(\\w+?)\\}/g, function(m, p) {\n              return localContext[p];\n            });\n          }\n          return url;\n        }\n      });\n  };\n\n  var tileUrlFunction = (urls && urls.length > 0) ?\n    ol.TileUrlFunction.createFromTileUrlFunctions(\n        urls.map(this.createFromWMTSTemplate_)) :\n    ol.TileUrlFunction.nullTileUrlFunction;\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    projection: options.projection,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileClass: options.tileClass,\n    tileGrid: tileGrid,\n    tileLoadFunction: options.tileLoadFunction,\n    tilePixelRatio: options.tilePixelRatio,\n    tileUrlFunction: tileUrlFunction,\n    urls: urls,\n    wrapX: options.wrapX !== undefined ? options.wrapX : false,\n    transition: options.transition\n  });\n\n  this.setKey(this.getKeyForDimensions_());\n\n};\nol.inherits(ol.source.WMTS, ol.source.TileImage);\n\n/**\n * Set the URLs to use for requests.\n * URLs may contain OCG conform URL Template Variables: {TileMatrix}, {TileRow}, {TileCol}.\n * @override\n */\nol.source.WMTS.prototype.setUrls = function(urls) {\n  this.urls = urls;\n  var key = urls.join('\\n');\n  this.setTileUrlFunction(this.fixedTileUrlFunction ?\n    this.fixedTileUrlFunction.bind(this) :\n    ol.TileUrlFunction.createFromTileUrlFunctions(urls.map(this.createFromWMTSTemplate_.bind(this))), key);\n};\n\n/**\n * Get the dimensions, i.e. those passed to the constructor through the\n * \"dimensions\" option, and possibly updated using the updateDimensions\n * method.\n * @return {!Object} Dimensions.\n * @api\n */\nol.source.WMTS.prototype.getDimensions = function() {\n  return this.dimensions_;\n};\n\n\n/**\n * Return the image format of the WMTS source.\n * @return {string} Format.\n * @api\n */\nol.source.WMTS.prototype.getFormat = function() {\n  return this.format_;\n};\n\n\n/**\n * Return the layer of the WMTS source.\n * @return {string} Layer.\n * @api\n */\nol.source.WMTS.prototype.getLayer = function() {\n  return this.layer_;\n};\n\n\n/**\n * Return the matrix set of the WMTS source.\n * @return {string} MatrixSet.\n * @api\n */\nol.source.WMTS.prototype.getMatrixSet = function() {\n  return this.matrixSet_;\n};\n\n\n/**\n * Return the request encoding, either \"KVP\" or \"REST\".\n * @return {ol.source.WMTSRequestEncoding} Request encoding.\n * @api\n */\nol.source.WMTS.prototype.getRequestEncoding = function() {\n  return this.requestEncoding_;\n};\n\n\n/**\n * Return the style of the WMTS source.\n * @return {string} Style.\n * @api\n */\nol.source.WMTS.prototype.getStyle = function() {\n  return this.style_;\n};\n\n\n/**\n * Return the version of the WMTS source.\n * @return {string} Version.\n * @api\n */\nol.source.WMTS.prototype.getVersion = function() {\n  return this.version_;\n};\n\n\n/**\n * @private\n * @return {string} The key for the current dimensions.\n */\nol.source.WMTS.prototype.getKeyForDimensions_ = function() {\n  var i = 0;\n  var res = [];\n  for (var key in this.dimensions_) {\n    res[i++] = key + '-' + this.dimensions_[key];\n  }\n  return res.join('/');\n};\n\n\n/**\n * Update the dimensions.\n * @param {Object} dimensions Dimensions.\n * @api\n */\nol.source.WMTS.prototype.updateDimensions = function(dimensions) {\n  ol.obj.assign(this.dimensions_, dimensions);\n  this.setKey(this.getKeyForDimensions_());\n};\n\n\n/**\n * Generate source options from a capabilities object.\n * @param {Object} wmtsCap An object representing the capabilities document.\n * @param {Object} config Configuration properties for the layer.  Defaults for\n *                  the layer will apply if not provided.\n *\n * Required config properties:\n *  - layer - {string} The layer identifier.\n *\n * Optional config properties:\n *  - matrixSet - {string} The matrix set identifier, required if there is\n *       more than one matrix set in the layer capabilities.\n *  - projection - {string} The desired CRS when no matrixSet is specified.\n *       eg: \"EPSG:3857\". If the desired projection is not available,\n *       an error is thrown.\n *  - requestEncoding - {string} url encoding format for the layer. Default is\n *       the first tile url format found in the GetCapabilities response.\n *  - style - {string} The name of the style\n *  - format - {string} Image format for the layer. Default is the first\n *       format returned in the GetCapabilities response.\n *  - crossOrigin - {string|null|undefined} Cross origin. Default is `undefined`.\n * @return {?olx.source.WMTSOptions} WMTS source options object or `null` if the layer was not found.\n * @api\n */\nol.source.WMTS.optionsFromCapabilities = function(wmtsCap, config) {\n  var layers = wmtsCap['Contents']['Layer'];\n  var l = ol.array.find(layers, function(elt, index, array) {\n    return elt['Identifier'] == config['layer'];\n  });\n  if (l === null) {\n    return null;\n  }\n  var tileMatrixSets = wmtsCap['Contents']['TileMatrixSet'];\n  var idx, matrixSet, matrixLimits;\n  if (l['TileMatrixSetLink'].length > 1) {\n    if ('projection' in config) {\n      idx = ol.array.findIndex(l['TileMatrixSetLink'],\n          function(elt, index, array) {\n            var tileMatrixSet = ol.array.find(tileMatrixSets, function(el) {\n              return el['Identifier'] == elt['TileMatrixSet'];\n            });\n            var supportedCRS = tileMatrixSet['SupportedCRS'];\n            var proj1 = ol.proj.get(supportedCRS.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/, '$1:$3')) ||\n                ol.proj.get(supportedCRS);\n            var proj2 = ol.proj.get(config['projection']);\n            if (proj1 && proj2) {\n              return ol.proj.equivalent(proj1, proj2);\n            } else {\n              return supportedCRS == config['projection'];\n            }\n          });\n    } else {\n      idx = ol.array.findIndex(l['TileMatrixSetLink'],\n          function(elt, index, array) {\n            return elt['TileMatrixSet'] == config['matrixSet'];\n          });\n    }\n  } else {\n    idx = 0;\n  }\n  if (idx < 0) {\n    idx = 0;\n  }\n  matrixSet = /** @type {string} */\n    (l['TileMatrixSetLink'][idx]['TileMatrixSet']);\n  matrixLimits = /** @type {Array.<Object>} */\n    (l['TileMatrixSetLink'][idx]['TileMatrixSetLimits']);\n\n  var format = /** @type {string} */ (l['Format'][0]);\n  if ('format' in config) {\n    format = config['format'];\n  }\n  idx = ol.array.findIndex(l['Style'], function(elt, index, array) {\n    if ('style' in config) {\n      return elt['Title'] == config['style'];\n    } else {\n      return elt['isDefault'];\n    }\n  });\n  if (idx < 0) {\n    idx = 0;\n  }\n  var style = /** @type {string} */ (l['Style'][idx]['Identifier']);\n\n  var dimensions = {};\n  if ('Dimension' in l) {\n    l['Dimension'].forEach(function(elt, index, array) {\n      var key = elt['Identifier'];\n      var value = elt['Default'];\n      if (value === undefined) {\n        value = elt['Value'][0];\n      }\n      dimensions[key] = value;\n    });\n  }\n\n  var matrixSets = wmtsCap['Contents']['TileMatrixSet'];\n  var matrixSetObj = ol.array.find(matrixSets, function(elt, index, array) {\n    return elt['Identifier'] == matrixSet;\n  });\n\n  var projection;\n  var code = matrixSetObj['SupportedCRS'];\n  if (code) {\n    projection = ol.proj.get(code.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/, '$1:$3')) ||\n        ol.proj.get(code);\n  }\n  if ('projection' in config) {\n    var projConfig = ol.proj.get(config['projection']);\n    if (projConfig) {\n      if (!projection || ol.proj.equivalent(projConfig, projection)) {\n        projection = projConfig;\n      }\n    }\n  }\n\n  var wgs84BoundingBox = l['WGS84BoundingBox'];\n  var extent, wrapX;\n  if (wgs84BoundingBox !== undefined) {\n    var wgs84ProjectionExtent = ol.proj.get('EPSG:4326').getExtent();\n    wrapX = (wgs84BoundingBox[0] == wgs84ProjectionExtent[0] &&\n        wgs84BoundingBox[2] == wgs84ProjectionExtent[2]);\n    extent = ol.proj.transformExtent(\n        wgs84BoundingBox, 'EPSG:4326', projection);\n    var projectionExtent = projection.getExtent();\n    if (projectionExtent) {\n      // If possible, do a sanity check on the extent - it should never be\n      // bigger than the validity extent of the projection of a matrix set.\n      if (!ol.extent.containsExtent(projectionExtent, extent)) {\n        extent = undefined;\n      }\n    }\n  }\n\n  var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(\n      matrixSetObj, extent, matrixLimits);\n\n  /** @type {!Array.<string>} */\n  var urls = [];\n  var requestEncoding = config['requestEncoding'];\n  requestEncoding = requestEncoding !== undefined ? requestEncoding : '';\n\n  if ('OperationsMetadata' in wmtsCap && 'GetTile' in wmtsCap['OperationsMetadata']) {\n    var gets = wmtsCap['OperationsMetadata']['GetTile']['DCP']['HTTP']['Get'];\n\n    for (var i = 0, ii = gets.length; i < ii; ++i) {\n      if (gets[i]['Constraint']) {\n        var constraint = ol.array.find(gets[i]['Constraint'], function(element) {\n          return element['name'] == 'GetEncoding';\n        });\n        var encodings = constraint['AllowedValues']['Value'];\n\n        if (requestEncoding === '') {\n          // requestEncoding not provided, use the first encoding from the list\n          requestEncoding = encodings[0];\n        }\n        if (requestEncoding === ol.source.WMTSRequestEncoding.KVP) {\n          if (ol.array.includes(encodings, ol.source.WMTSRequestEncoding.KVP)) {\n            urls.push(/** @type {string} */ (gets[i]['href']));\n          }\n        } else {\n          break;\n        }\n      } else if (gets[i]['href']) {\n        requestEncoding = ol.source.WMTSRequestEncoding.KVP;\n        urls.push(/** @type {string} */ (gets[i]['href']));\n      }\n    }\n  }\n  if (urls.length === 0) {\n    requestEncoding = ol.source.WMTSRequestEncoding.REST;\n    l['ResourceURL'].forEach(function(element) {\n      if (element['resourceType'] === 'tile') {\n        format = element['format'];\n        urls.push(/** @type {string} */ (element['template']));\n      }\n    });\n  }\n\n  return {\n    urls: urls,\n    layer: config['layer'],\n    matrixSet: matrixSet,\n    format: format,\n    projection: projection,\n    requestEncoding: requestEncoding,\n    tileGrid: tileGrid,\n    style: style,\n    dimensions: dimensions,\n    wrapX: wrapX,\n    crossOrigin: config['crossOrigin']\n  };\n};\n\ngoog.provide('ol.source.Zoomify');\n\ngoog.require('ol');\ngoog.require('ol.ImageTile');\ngoog.require('ol.TileState');\ngoog.require('ol.TileUrlFunction');\ngoog.require('ol.asserts');\ngoog.require('ol.dom');\ngoog.require('ol.extent');\ngoog.require('ol.size');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.tilegrid.TileGrid');\n\n\n/**\n * @classdesc\n * Layer source for tile data in Zoomify format (both Zoomify and Internet\n * Imaging Protocol are supported).\n *\n * @constructor\n * @extends {ol.source.TileImage}\n * @param {olx.source.ZoomifyOptions=} opt_options Options.\n * @api\n */\nol.source.Zoomify = function(opt_options) {\n\n  var options = opt_options || {};\n\n  var size = options.size;\n  var tierSizeCalculation = options.tierSizeCalculation !== undefined ?\n    options.tierSizeCalculation :\n    ol.source.Zoomify.TierSizeCalculation_.DEFAULT;\n\n  var imageWidth = size[0];\n  var imageHeight = size[1];\n  var extent = options.extent || [0, -size[1], size[0], 0];\n  var tierSizeInTiles = [];\n  var tileSize = options.tileSize || ol.DEFAULT_TILE_SIZE;\n  var tileSizeForTierSizeCalculation = tileSize;\n\n  switch (tierSizeCalculation) {\n    case ol.source.Zoomify.TierSizeCalculation_.DEFAULT:\n      while (imageWidth > tileSizeForTierSizeCalculation || imageHeight > tileSizeForTierSizeCalculation) {\n        tierSizeInTiles.push([\n          Math.ceil(imageWidth / tileSizeForTierSizeCalculation),\n          Math.ceil(imageHeight / tileSizeForTierSizeCalculation)\n        ]);\n        tileSizeForTierSizeCalculation += tileSizeForTierSizeCalculation;\n      }\n      break;\n    case ol.source.Zoomify.TierSizeCalculation_.TRUNCATED:\n      var width = imageWidth;\n      var height = imageHeight;\n      while (width > tileSizeForTierSizeCalculation || height > tileSizeForTierSizeCalculation) {\n        tierSizeInTiles.push([\n          Math.ceil(width / tileSizeForTierSizeCalculation),\n          Math.ceil(height / tileSizeForTierSizeCalculation)\n        ]);\n        width >>= 1;\n        height >>= 1;\n      }\n      break;\n    default:\n      ol.asserts.assert(false, 53); // Unknown `tierSizeCalculation` configured\n      break;\n  }\n\n  tierSizeInTiles.push([1, 1]);\n  tierSizeInTiles.reverse();\n\n  var resolutions = [1];\n  var tileCountUpToTier = [0];\n  var i, ii;\n  for (i = 1, ii = tierSizeInTiles.length; i < ii; i++) {\n    resolutions.push(1 << i);\n    tileCountUpToTier.push(\n        tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] +\n        tileCountUpToTier[i - 1]\n    );\n  }\n  resolutions.reverse();\n\n  var tileGrid = new ol.tilegrid.TileGrid({\n    tileSize: tileSize,\n    extent: extent,\n    origin: ol.extent.getTopLeft(extent),\n    resolutions: resolutions\n  });\n\n  var url = options.url;\n  if (url && url.indexOf('{TileGroup}') == -1 && url.indexOf('{tileIndex}') == -1) {\n    url += '{TileGroup}/{z}-{x}-{y}.jpg';\n  }\n  var urls = ol.TileUrlFunction.expandUrl(url);\n\n  /**\n   * @param {string} template Template.\n   * @return {ol.TileUrlFunctionType} Tile URL function.\n   */\n  function createFromTemplate(template) {\n\n    return (\n      /**\n       * @param {ol.TileCoord} tileCoord Tile Coordinate.\n       * @param {number} pixelRatio Pixel ratio.\n       * @param {ol.proj.Projection} projection Projection.\n       * @return {string|undefined} Tile URL.\n       */\n      function(tileCoord, pixelRatio, projection) {\n        if (!tileCoord) {\n          return undefined;\n        } else {\n          var tileCoordZ = tileCoord[0];\n          var tileCoordX = tileCoord[1];\n          var tileCoordY = -tileCoord[2] - 1;\n          var tileIndex =\n              tileCoordX +\n              tileCoordY * tierSizeInTiles[tileCoordZ][0];\n          var tileSize = tileGrid.getTileSize(tileCoordZ);\n          var tileGroup = ((tileIndex + tileCountUpToTier[tileCoordZ]) / tileSize) | 0;\n          var localContext = {\n            'z': tileCoordZ,\n            'x': tileCoordX,\n            'y': tileCoordY,\n            'tileIndex': tileIndex,\n            'TileGroup': 'TileGroup' + tileGroup\n          };\n          return template.replace(/\\{(\\w+?)\\}/g, function(m, p) {\n            return localContext[p];\n          });\n        }\n      });\n  }\n\n  var tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(urls.map(createFromTemplate));\n\n  var ZoomifyTileClass = ol.source.Zoomify.Tile_.bind(null, tileGrid);\n\n  ol.source.TileImage.call(this, {\n    attributions: options.attributions,\n    cacheSize: options.cacheSize,\n    crossOrigin: options.crossOrigin,\n    logo: options.logo,\n    projection: options.projection,\n    reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n    tileClass: ZoomifyTileClass,\n    tileGrid: tileGrid,\n    tileUrlFunction: tileUrlFunction,\n    transition: options.transition\n  });\n\n};\nol.inherits(ol.source.Zoomify, ol.source.TileImage);\n\n/**\n * @constructor\n * @extends {ol.ImageTile}\n * @param {ol.tilegrid.TileGrid} tileGrid TileGrid that the tile belongs to.\n * @param {ol.TileCoord} tileCoord Tile coordinate.\n * @param {ol.TileState} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.\n * @param {olx.TileOptions=} opt_options Tile options.\n * @private\n */\nol.source.Zoomify.Tile_ = function(\n    tileGrid, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {\n\n  ol.ImageTile.call(this, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options);\n\n  /**\n   * @private\n   * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n   */\n  this.zoomifyImage_ = null;\n\n  /**\n   * @private\n   * @type {ol.Size}\n   */\n  this.tileSize_ = ol.size.toSize(tileGrid.getTileSize(tileCoord[0]));\n};\nol.inherits(ol.source.Zoomify.Tile_, ol.ImageTile);\n\n\n/**\n * @inheritDoc\n */\nol.source.Zoomify.Tile_.prototype.getImage = function() {\n  if (this.zoomifyImage_) {\n    return this.zoomifyImage_;\n  }\n  var image = ol.ImageTile.prototype.getImage.call(this);\n  if (this.state == ol.TileState.LOADED) {\n    var tileSize = this.tileSize_;\n    if (image.width == tileSize[0] && image.height == tileSize[1]) {\n      this.zoomifyImage_ = image;\n      return image;\n    } else {\n      var context = ol.dom.createCanvasContext2D(tileSize[0], tileSize[1]);\n      context.drawImage(image, 0, 0);\n      this.zoomifyImage_ = context.canvas;\n      return context.canvas;\n    }\n  } else {\n    return image;\n  }\n};\n\n/**\n * @enum {string}\n * @private\n */\nol.source.Zoomify.TierSizeCalculation_ = {\n  DEFAULT: 'default',\n  TRUNCATED: 'truncated'\n};\n\n// Copyright 2009 The Closure Library Authors.\n// All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n// This file has been auto-generated by GenJsDeps, please do not edit.\n\ngoog.addDependency(\n    'demos/editor/equationeditor.js', ['goog.demos.editor.EquationEditor'],\n    ['goog.ui.equation.EquationEditorDialog']);\ngoog.addDependency(\n    'demos/editor/helloworld.js', ['goog.demos.editor.HelloWorld'],\n    ['goog.dom', 'goog.dom.TagName', 'goog.editor.Plugin']);\ngoog.addDependency(\n    'demos/editor/helloworlddialog.js',\n    [\n      'goog.demos.editor.HelloWorldDialog',\n      'goog.demos.editor.HelloWorldDialog.OkEvent'\n    ],\n    [\n      'goog.dom.TagName', 'goog.events.Event', 'goog.string',\n      'goog.ui.editor.AbstractDialog', 'goog.ui.editor.AbstractDialog.Builder',\n      'goog.ui.editor.AbstractDialog.EventType'\n    ]);\ngoog.addDependency(\n    'demos/editor/helloworlddialogplugin.js',\n    [\n      'goog.demos.editor.HelloWorldDialogPlugin',\n      'goog.demos.editor.HelloWorldDialogPlugin.Command'\n    ],\n    [\n      'goog.demos.editor.HelloWorldDialog', 'goog.dom.TagName',\n      'goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.range',\n      'goog.functions', 'goog.ui.editor.AbstractDialog.EventType'\n    ]);\n\n/**\n * @fileoverview Custom exports file.\n * @suppress {checkVars,extraRequire}\n */\n\ngoog.require('ol');\ngoog.require('ol.AssertionError');\ngoog.require('ol.Attribution');\ngoog.require('ol.CanvasMap');\ngoog.require('ol.Collection');\ngoog.require('ol.DeviceOrientation');\ngoog.require('ol.Feature');\ngoog.require('ol.Geolocation');\ngoog.require('ol.Graticule');\ngoog.require('ol.Image');\ngoog.require('ol.ImageTile');\ngoog.require('ol.Kinetic');\ngoog.require('ol.Map');\ngoog.require('ol.MapBrowserEvent');\ngoog.require('ol.MapEvent');\ngoog.require('ol.Object');\ngoog.require('ol.Observable');\ngoog.require('ol.Overlay');\ngoog.require('ol.PluggableMap');\ngoog.require('ol.Sphere');\ngoog.require('ol.Tile');\ngoog.require('ol.VectorTile');\ngoog.require('ol.View');\ngoog.require('ol.color');\ngoog.require('ol.colorlike');\ngoog.require('ol.control');\ngoog.require('ol.control.Attribution');\ngoog.require('ol.control.Control');\ngoog.require('ol.control.FullScreen');\ngoog.require('ol.control.MousePosition');\ngoog.require('ol.control.OverviewMap');\ngoog.require('ol.control.Rotate');\ngoog.require('ol.control.ScaleLine');\ngoog.require('ol.control.Zoom');\ngoog.require('ol.control.ZoomSlider');\ngoog.require('ol.control.ZoomToExtent');\ngoog.require('ol.coordinate');\ngoog.require('ol.easing');\ngoog.require('ol.events.Event');\ngoog.require('ol.events.condition');\ngoog.require('ol.extent');\ngoog.require('ol.featureloader');\ngoog.require('ol.format.EsriJSON');\ngoog.require('ol.format.Feature');\ngoog.require('ol.format.GML');\ngoog.require('ol.format.GML2');\ngoog.require('ol.format.GML3');\ngoog.require('ol.format.GMLBase');\ngoog.require('ol.format.GPX');\ngoog.require('ol.format.GeoJSON');\ngoog.require('ol.format.IGC');\ngoog.require('ol.format.KML');\ngoog.require('ol.format.MVT');\ngoog.require('ol.format.OSMXML');\ngoog.require('ol.format.Polyline');\ngoog.require('ol.format.TopoJSON');\ngoog.require('ol.format.WFS');\ngoog.require('ol.format.WKT');\ngoog.require('ol.format.WMSCapabilities');\ngoog.require('ol.format.WMSGetFeatureInfo');\ngoog.require('ol.format.WMTSCapabilities');\ngoog.require('ol.format.filter');\ngoog.require('ol.format.filter.And');\ngoog.require('ol.format.filter.Bbox');\ngoog.require('ol.format.filter.Comparison');\ngoog.require('ol.format.filter.ComparisonBinary');\ngoog.require('ol.format.filter.Contains');\ngoog.require('ol.format.filter.During');\ngoog.require('ol.format.filter.EqualTo');\ngoog.require('ol.format.filter.Filter');\ngoog.require('ol.format.filter.GreaterThan');\ngoog.require('ol.format.filter.GreaterThanOrEqualTo');\ngoog.require('ol.format.filter.Intersects');\ngoog.require('ol.format.filter.IsBetween');\ngoog.require('ol.format.filter.IsLike');\ngoog.require('ol.format.filter.IsNull');\ngoog.require('ol.format.filter.LessThan');\ngoog.require('ol.format.filter.LessThanOrEqualTo');\ngoog.require('ol.format.filter.Not');\ngoog.require('ol.format.filter.NotEqualTo');\ngoog.require('ol.format.filter.Or');\ngoog.require('ol.format.filter.Spatial');\ngoog.require('ol.format.filter.Within');\ngoog.require('ol.geom.Circle');\ngoog.require('ol.geom.Geometry');\ngoog.require('ol.geom.GeometryCollection');\ngoog.require('ol.geom.LineString');\ngoog.require('ol.geom.LinearRing');\ngoog.require('ol.geom.MultiLineString');\ngoog.require('ol.geom.MultiPoint');\ngoog.require('ol.geom.MultiPolygon');\ngoog.require('ol.geom.Point');\ngoog.require('ol.geom.Polygon');\ngoog.require('ol.geom.SimpleGeometry');\ngoog.require('ol.has');\ngoog.require('ol.interaction');\ngoog.require('ol.interaction.DoubleClickZoom');\ngoog.require('ol.interaction.DragAndDrop');\ngoog.require('ol.interaction.DragBox');\ngoog.require('ol.interaction.DragPan');\ngoog.require('ol.interaction.DragRotate');\ngoog.require('ol.interaction.DragRotateAndZoom');\ngoog.require('ol.interaction.DragZoom');\ngoog.require('ol.interaction.Draw');\ngoog.require('ol.interaction.Extent');\ngoog.require('ol.interaction.Interaction');\ngoog.require('ol.interaction.KeyboardPan');\ngoog.require('ol.interaction.KeyboardZoom');\ngoog.require('ol.interaction.Modify');\ngoog.require('ol.interaction.MouseWheelZoom');\ngoog.require('ol.interaction.PinchRotate');\ngoog.require('ol.interaction.PinchZoom');\ngoog.require('ol.interaction.Pointer');\ngoog.require('ol.interaction.Select');\ngoog.require('ol.interaction.Snap');\ngoog.require('ol.interaction.Translate');\ngoog.require('ol.layer.Base');\ngoog.require('ol.layer.Group');\ngoog.require('ol.layer.Heatmap');\ngoog.require('ol.layer.Image');\ngoog.require('ol.layer.Layer');\ngoog.require('ol.layer.Tile');\ngoog.require('ol.layer.Vector');\ngoog.require('ol.layer.VectorTile');\ngoog.require('ol.loadingstrategy');\ngoog.require('ol.proj');\ngoog.require('ol.proj.Projection');\ngoog.require('ol.proj.Units');\ngoog.require('ol.proj.common');\ngoog.require('ol.render');\ngoog.require('ol.render.Event');\ngoog.require('ol.render.Feature');\ngoog.require('ol.render.VectorContext');\ngoog.require('ol.render.canvas.Immediate');\ngoog.require('ol.render.webgl.Immediate');\ngoog.require('ol.renderer.canvas.ImageLayer');\ngoog.require('ol.renderer.canvas.Map');\ngoog.require('ol.renderer.canvas.TileLayer');\ngoog.require('ol.renderer.canvas.VectorLayer');\ngoog.require('ol.renderer.canvas.VectorTileLayer');\ngoog.require('ol.renderer.webgl.ImageLayer');\ngoog.require('ol.renderer.webgl.Map');\ngoog.require('ol.renderer.webgl.TileLayer');\ngoog.require('ol.renderer.webgl.VectorLayer');\ngoog.require('ol.size');\ngoog.require('ol.source.BingMaps');\ngoog.require('ol.source.CartoDB');\ngoog.require('ol.source.Cluster');\ngoog.require('ol.source.Image');\ngoog.require('ol.source.ImageArcGISRest');\ngoog.require('ol.source.ImageCanvas');\ngoog.require('ol.source.ImageMapGuide');\ngoog.require('ol.source.ImageStatic');\ngoog.require('ol.source.ImageVector');\ngoog.require('ol.source.ImageWMS');\ngoog.require('ol.source.OSM');\ngoog.require('ol.source.Raster');\ngoog.require('ol.source.Source');\ngoog.require('ol.source.Stamen');\ngoog.require('ol.source.Tile');\ngoog.require('ol.source.TileArcGISRest');\ngoog.require('ol.source.TileDebug');\ngoog.require('ol.source.TileImage');\ngoog.require('ol.source.TileJSON');\ngoog.require('ol.source.TileUTFGrid');\ngoog.require('ol.source.TileWMS');\ngoog.require('ol.source.UrlTile');\ngoog.require('ol.source.Vector');\ngoog.require('ol.source.VectorTile');\ngoog.require('ol.source.WMTS');\ngoog.require('ol.source.XYZ');\ngoog.require('ol.source.Zoomify');\ngoog.require('ol.style');\ngoog.require('ol.style.AtlasManager');\ngoog.require('ol.style.Circle');\ngoog.require('ol.style.Fill');\ngoog.require('ol.style.Icon');\ngoog.require('ol.style.IconImageCache');\ngoog.require('ol.style.Image');\ngoog.require('ol.style.RegularShape');\ngoog.require('ol.style.Stroke');\ngoog.require('ol.style.Style');\ngoog.require('ol.style.Text');\ngoog.require('ol.tilegrid');\ngoog.require('ol.tilegrid.TileGrid');\ngoog.require('ol.tilegrid.WMTS');\ngoog.require('ol.webgl.Context');\ngoog.require('ol.xml');\n\n\n\ngoog.exportProperty(\n    ol.AssertionError.prototype,\n    'code',\n    ol.AssertionError.prototype.code);\n\ngoog.exportSymbol(\n    'ol.Attribution',\n    ol.Attribution,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Attribution.prototype,\n    'getHTML',\n    ol.Attribution.prototype.getHTML);\n\ngoog.exportSymbol(\n    'ol.CanvasMap',\n    ol.CanvasMap,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Collection',\n    ol.Collection,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'clear',\n    ol.Collection.prototype.clear);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'extend',\n    ol.Collection.prototype.extend);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'forEach',\n    ol.Collection.prototype.forEach);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'getArray',\n    ol.Collection.prototype.getArray);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'item',\n    ol.Collection.prototype.item);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'getLength',\n    ol.Collection.prototype.getLength);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'insertAt',\n    ol.Collection.prototype.insertAt);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'pop',\n    ol.Collection.prototype.pop);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'push',\n    ol.Collection.prototype.push);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'remove',\n    ol.Collection.prototype.remove);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'removeAt',\n    ol.Collection.prototype.removeAt);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'setAt',\n    ol.Collection.prototype.setAt);\n\ngoog.exportProperty(\n    ol.Collection.Event.prototype,\n    'element',\n    ol.Collection.Event.prototype.element);\n\ngoog.exportSymbol(\n    'ol.color.asArray',\n    ol.color.asArray,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.color.asString',\n    ol.color.asString,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.colorlike.asColorLike',\n    ol.colorlike.asColorLike,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.defaults',\n    ol.control.defaults,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.add',\n    ol.coordinate.add,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.createStringXY',\n    ol.coordinate.createStringXY,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.format',\n    ol.coordinate.format,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.rotate',\n    ol.coordinate.rotate,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.toStringHDMS',\n    ol.coordinate.toStringHDMS,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.coordinate.toStringXY',\n    ol.coordinate.toStringXY,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.DeviceOrientation',\n    ol.DeviceOrientation,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getAlpha',\n    ol.DeviceOrientation.prototype.getAlpha);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getBeta',\n    ol.DeviceOrientation.prototype.getBeta);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getGamma',\n    ol.DeviceOrientation.prototype.getGamma);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getHeading',\n    ol.DeviceOrientation.prototype.getHeading);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getTracking',\n    ol.DeviceOrientation.prototype.getTracking);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'setTracking',\n    ol.DeviceOrientation.prototype.setTracking);\n\ngoog.exportSymbol(\n    'ol.easing.easeIn',\n    ol.easing.easeIn,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.easing.easeOut',\n    ol.easing.easeOut,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.easing.inAndOut',\n    ol.easing.inAndOut,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.easing.linear',\n    ol.easing.linear,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.easing.upAndDown',\n    ol.easing.upAndDown,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.boundingExtent',\n    ol.extent.boundingExtent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.buffer',\n    ol.extent.buffer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.containsCoordinate',\n    ol.extent.containsCoordinate,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.containsExtent',\n    ol.extent.containsExtent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.containsXY',\n    ol.extent.containsXY,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.createEmpty',\n    ol.extent.createEmpty,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.equals',\n    ol.extent.equals,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.extend',\n    ol.extent.extend,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getArea',\n    ol.extent.getArea,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getBottomLeft',\n    ol.extent.getBottomLeft,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getBottomRight',\n    ol.extent.getBottomRight,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getCenter',\n    ol.extent.getCenter,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getHeight',\n    ol.extent.getHeight,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getIntersection',\n    ol.extent.getIntersection,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getSize',\n    ol.extent.getSize,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getTopLeft',\n    ol.extent.getTopLeft,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getTopRight',\n    ol.extent.getTopRight,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.getWidth',\n    ol.extent.getWidth,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.intersects',\n    ol.extent.intersects,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.isEmpty',\n    ol.extent.isEmpty,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.extent.applyTransform',\n    ol.extent.applyTransform,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Feature',\n    ol.Feature,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'clone',\n    ol.Feature.prototype.clone);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getGeometry',\n    ol.Feature.prototype.getGeometry);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getId',\n    ol.Feature.prototype.getId);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getGeometryName',\n    ol.Feature.prototype.getGeometryName);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getStyle',\n    ol.Feature.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getStyleFunction',\n    ol.Feature.prototype.getStyleFunction);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'setGeometry',\n    ol.Feature.prototype.setGeometry);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'setStyle',\n    ol.Feature.prototype.setStyle);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'setId',\n    ol.Feature.prototype.setId);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'setGeometryName',\n    ol.Feature.prototype.setGeometryName);\n\ngoog.exportSymbol(\n    'ol.featureloader.xhr',\n    ol.featureloader.xhr,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Geolocation',\n    ol.Geolocation,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getAccuracy',\n    ol.Geolocation.prototype.getAccuracy);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getAccuracyGeometry',\n    ol.Geolocation.prototype.getAccuracyGeometry);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getAltitude',\n    ol.Geolocation.prototype.getAltitude);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getAltitudeAccuracy',\n    ol.Geolocation.prototype.getAltitudeAccuracy);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getHeading',\n    ol.Geolocation.prototype.getHeading);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getPosition',\n    ol.Geolocation.prototype.getPosition);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getProjection',\n    ol.Geolocation.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getSpeed',\n    ol.Geolocation.prototype.getSpeed);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getTracking',\n    ol.Geolocation.prototype.getTracking);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getTrackingOptions',\n    ol.Geolocation.prototype.getTrackingOptions);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'setProjection',\n    ol.Geolocation.prototype.setProjection);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'setTracking',\n    ol.Geolocation.prototype.setTracking);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'setTrackingOptions',\n    ol.Geolocation.prototype.setTrackingOptions);\n\ngoog.exportSymbol(\n    'ol.Graticule',\n    ol.Graticule,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Graticule.prototype,\n    'getMap',\n    ol.Graticule.prototype.getMap);\n\ngoog.exportProperty(\n    ol.Graticule.prototype,\n    'getMeridians',\n    ol.Graticule.prototype.getMeridians);\n\ngoog.exportProperty(\n    ol.Graticule.prototype,\n    'getParallels',\n    ol.Graticule.prototype.getParallels);\n\ngoog.exportProperty(\n    ol.Graticule.prototype,\n    'setMap',\n    ol.Graticule.prototype.setMap);\n\ngoog.exportSymbol(\n    'ol.has.DEVICE_PIXEL_RATIO',\n    ol.has.DEVICE_PIXEL_RATIO,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.has.CANVAS',\n    ol.has.CANVAS,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.has.DEVICE_ORIENTATION',\n    ol.has.DEVICE_ORIENTATION,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.has.GEOLOCATION',\n    ol.has.GEOLOCATION,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.has.TOUCH',\n    ol.has.TOUCH,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.has.WEBGL',\n    ol.has.WEBGL,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Image.prototype,\n    'getImage',\n    ol.Image.prototype.getImage);\n\ngoog.exportProperty(\n    ol.Image.prototype,\n    'load',\n    ol.Image.prototype.load);\n\ngoog.exportProperty(\n    ol.ImageTile.prototype,\n    'getImage',\n    ol.ImageTile.prototype.getImage);\n\ngoog.exportSymbol(\n    'ol.inherits',\n    ol.inherits,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.defaults',\n    ol.interaction.defaults,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Kinetic',\n    ol.Kinetic,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.loadingstrategy.all',\n    ol.loadingstrategy.all,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.loadingstrategy.bbox',\n    ol.loadingstrategy.bbox,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.loadingstrategy.tile',\n    ol.loadingstrategy.tile,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Map',\n    ol.Map,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'originalEvent',\n    ol.MapBrowserEvent.prototype.originalEvent);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'pixel',\n    ol.MapBrowserEvent.prototype.pixel);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'coordinate',\n    ol.MapBrowserEvent.prototype.coordinate);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'dragging',\n    ol.MapBrowserEvent.prototype.dragging);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'map',\n    ol.MapEvent.prototype.map);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'frameState',\n    ol.MapEvent.prototype.frameState);\n\ngoog.exportSymbol(\n    'ol.Object',\n    ol.Object,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'get',\n    ol.Object.prototype.get);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'getKeys',\n    ol.Object.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'getProperties',\n    ol.Object.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'set',\n    ol.Object.prototype.set);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'setProperties',\n    ol.Object.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'unset',\n    ol.Object.prototype.unset);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'key',\n    ol.Object.Event.prototype.key);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'oldValue',\n    ol.Object.Event.prototype.oldValue);\n\ngoog.exportSymbol(\n    'ol.Observable',\n    ol.Observable,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Observable.unByKey',\n    ol.Observable.unByKey,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'changed',\n    ol.Observable.prototype.changed);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'dispatchEvent',\n    ol.Observable.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'getRevision',\n    ol.Observable.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'on',\n    ol.Observable.prototype.on);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'once',\n    ol.Observable.prototype.once);\n\ngoog.exportProperty(\n    ol.Observable.prototype,\n    'un',\n    ol.Observable.prototype.un);\n\ngoog.exportSymbol(\n    'ol.Overlay',\n    ol.Overlay,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getElement',\n    ol.Overlay.prototype.getElement);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getId',\n    ol.Overlay.prototype.getId);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getMap',\n    ol.Overlay.prototype.getMap);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getOffset',\n    ol.Overlay.prototype.getOffset);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getPosition',\n    ol.Overlay.prototype.getPosition);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getPositioning',\n    ol.Overlay.prototype.getPositioning);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setElement',\n    ol.Overlay.prototype.setElement);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setMap',\n    ol.Overlay.prototype.setMap);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setOffset',\n    ol.Overlay.prototype.setOffset);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setPosition',\n    ol.Overlay.prototype.setPosition);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setPositioning',\n    ol.Overlay.prototype.setPositioning);\n\ngoog.exportSymbol(\n    'ol.PluggableMap',\n    ol.PluggableMap,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'addControl',\n    ol.PluggableMap.prototype.addControl);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'addInteraction',\n    ol.PluggableMap.prototype.addInteraction);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'addLayer',\n    ol.PluggableMap.prototype.addLayer);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'addOverlay',\n    ol.PluggableMap.prototype.addOverlay);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'forEachFeatureAtPixel',\n    ol.PluggableMap.prototype.forEachFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getFeaturesAtPixel',\n    ol.PluggableMap.prototype.getFeaturesAtPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'forEachLayerAtPixel',\n    ol.PluggableMap.prototype.forEachLayerAtPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'hasFeatureAtPixel',\n    ol.PluggableMap.prototype.hasFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getEventCoordinate',\n    ol.PluggableMap.prototype.getEventCoordinate);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getEventPixel',\n    ol.PluggableMap.prototype.getEventPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getTarget',\n    ol.PluggableMap.prototype.getTarget);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getTargetElement',\n    ol.PluggableMap.prototype.getTargetElement);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getCoordinateFromPixel',\n    ol.PluggableMap.prototype.getCoordinateFromPixel);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getControls',\n    ol.PluggableMap.prototype.getControls);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getOverlays',\n    ol.PluggableMap.prototype.getOverlays);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getOverlayById',\n    ol.PluggableMap.prototype.getOverlayById);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getInteractions',\n    ol.PluggableMap.prototype.getInteractions);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getLayerGroup',\n    ol.PluggableMap.prototype.getLayerGroup);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getLayers',\n    ol.PluggableMap.prototype.getLayers);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getPixelFromCoordinate',\n    ol.PluggableMap.prototype.getPixelFromCoordinate);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getSize',\n    ol.PluggableMap.prototype.getSize);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getView',\n    ol.PluggableMap.prototype.getView);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getViewport',\n    ol.PluggableMap.prototype.getViewport);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'renderSync',\n    ol.PluggableMap.prototype.renderSync);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'render',\n    ol.PluggableMap.prototype.render);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'removeControl',\n    ol.PluggableMap.prototype.removeControl);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'removeInteraction',\n    ol.PluggableMap.prototype.removeInteraction);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'removeLayer',\n    ol.PluggableMap.prototype.removeLayer);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'removeOverlay',\n    ol.PluggableMap.prototype.removeOverlay);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'setLayerGroup',\n    ol.PluggableMap.prototype.setLayerGroup);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'setSize',\n    ol.PluggableMap.prototype.setSize);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'setTarget',\n    ol.PluggableMap.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'setView',\n    ol.PluggableMap.prototype.setView);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'updateSize',\n    ol.PluggableMap.prototype.updateSize);\n\ngoog.exportSymbol(\n    'ol.proj.METERS_PER_UNIT',\n    ol.proj.METERS_PER_UNIT,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.setProj4',\n    ol.proj.setProj4,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.getPointResolution',\n    ol.proj.getPointResolution,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.addEquivalentProjections',\n    ol.proj.addEquivalentProjections,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.addProjection',\n    ol.proj.addProjection,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.addCoordinateTransforms',\n    ol.proj.addCoordinateTransforms,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.fromLonLat',\n    ol.proj.fromLonLat,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.toLonLat',\n    ol.proj.toLonLat,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.get',\n    ol.proj.get,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.equivalent',\n    ol.proj.equivalent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.getTransform',\n    ol.proj.getTransform,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.transform',\n    ol.proj.transform,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.transformExtent',\n    ol.proj.transformExtent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.render.toContext',\n    ol.render.toContext,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.size.toSize',\n    ol.size.toSize,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Sphere',\n    ol.Sphere,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Sphere.prototype,\n    'geodesicArea',\n    ol.Sphere.prototype.geodesicArea);\n\ngoog.exportProperty(\n    ol.Sphere.prototype,\n    'haversineDistance',\n    ol.Sphere.prototype.haversineDistance);\n\ngoog.exportSymbol(\n    'ol.Sphere.getLength',\n    ol.Sphere.getLength,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.Sphere.getArea',\n    ol.Sphere.getArea,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.style.iconImageCache',\n    ol.style.iconImageCache,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Tile.prototype,\n    'getTileCoord',\n    ol.Tile.prototype.getTileCoord);\n\ngoog.exportProperty(\n    ol.Tile.prototype,\n    'load',\n    ol.Tile.prototype.load);\n\ngoog.exportSymbol(\n    'ol.tilegrid.createXYZ',\n    ol.tilegrid.createXYZ,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'getExtent',\n    ol.VectorTile.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'getFormat',\n    ol.VectorTile.prototype.getFormat);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'getFeatures',\n    ol.VectorTile.prototype.getFeatures);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'getProjection',\n    ol.VectorTile.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'setExtent',\n    ol.VectorTile.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'setFeatures',\n    ol.VectorTile.prototype.setFeatures);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'setProjection',\n    ol.VectorTile.prototype.setProjection);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'setLoader',\n    ol.VectorTile.prototype.setLoader);\n\ngoog.exportSymbol(\n    'ol.View',\n    ol.View,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'animate',\n    ol.View.prototype.animate);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getAnimating',\n    ol.View.prototype.getAnimating);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getInteracting',\n    ol.View.prototype.getInteracting);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'cancelAnimations',\n    ol.View.prototype.cancelAnimations);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'constrainCenter',\n    ol.View.prototype.constrainCenter);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'constrainResolution',\n    ol.View.prototype.constrainResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'constrainRotation',\n    ol.View.prototype.constrainRotation);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getCenter',\n    ol.View.prototype.getCenter);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'calculateExtent',\n    ol.View.prototype.calculateExtent);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getMaxResolution',\n    ol.View.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getMinResolution',\n    ol.View.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getMaxZoom',\n    ol.View.prototype.getMaxZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setMaxZoom',\n    ol.View.prototype.setMaxZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getMinZoom',\n    ol.View.prototype.getMinZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setMinZoom',\n    ol.View.prototype.setMinZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getProjection',\n    ol.View.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getResolution',\n    ol.View.prototype.getResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getResolutions',\n    ol.View.prototype.getResolutions);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getResolutionForExtent',\n    ol.View.prototype.getResolutionForExtent);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getRotation',\n    ol.View.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getZoom',\n    ol.View.prototype.getZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getZoomForResolution',\n    ol.View.prototype.getZoomForResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getResolutionForZoom',\n    ol.View.prototype.getResolutionForZoom);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'fit',\n    ol.View.prototype.fit);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'centerOn',\n    ol.View.prototype.centerOn);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'rotate',\n    ol.View.prototype.rotate);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setCenter',\n    ol.View.prototype.setCenter);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setResolution',\n    ol.View.prototype.setResolution);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setRotation',\n    ol.View.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setZoom',\n    ol.View.prototype.setZoom);\n\ngoog.exportSymbol(\n    'ol.xml.getAllTextContent',\n    ol.xml.getAllTextContent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.xml.parse',\n    ol.xml.parse,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.webgl.Context.prototype,\n    'getGL',\n    ol.webgl.Context.prototype.getGL);\n\ngoog.exportProperty(\n    ol.webgl.Context.prototype,\n    'useProgram',\n    ol.webgl.Context.prototype.useProgram);\n\ngoog.exportSymbol(\n    'ol.tilegrid.TileGrid',\n    ol.tilegrid.TileGrid,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'forEachTileCoord',\n    ol.tilegrid.TileGrid.prototype.forEachTileCoord);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getMaxZoom',\n    ol.tilegrid.TileGrid.prototype.getMaxZoom);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getMinZoom',\n    ol.tilegrid.TileGrid.prototype.getMinZoom);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getOrigin',\n    ol.tilegrid.TileGrid.prototype.getOrigin);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getResolution',\n    ol.tilegrid.TileGrid.prototype.getResolution);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getResolutions',\n    ol.tilegrid.TileGrid.prototype.getResolutions);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getTileCoordExtent',\n    ol.tilegrid.TileGrid.prototype.getTileCoordExtent);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getTileCoordForCoordAndResolution',\n    ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getTileCoordForCoordAndZ',\n    ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getTileSize',\n    ol.tilegrid.TileGrid.prototype.getTileSize);\n\ngoog.exportProperty(\n    ol.tilegrid.TileGrid.prototype,\n    'getZForResolution',\n    ol.tilegrid.TileGrid.prototype.getZForResolution);\n\ngoog.exportSymbol(\n    'ol.tilegrid.WMTS',\n    ol.tilegrid.WMTS,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getMatrixIds',\n    ol.tilegrid.WMTS.prototype.getMatrixIds);\n\ngoog.exportSymbol(\n    'ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet',\n    ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.style.AtlasManager',\n    ol.style.AtlasManager,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.style.Circle',\n    ol.style.Circle,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'setRadius',\n    ol.style.Circle.prototype.setRadius);\n\ngoog.exportSymbol(\n    'ol.style.Fill',\n    ol.style.Fill,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Fill.prototype,\n    'clone',\n    ol.style.Fill.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Fill.prototype,\n    'getColor',\n    ol.style.Fill.prototype.getColor);\n\ngoog.exportProperty(\n    ol.style.Fill.prototype,\n    'setColor',\n    ol.style.Fill.prototype.setColor);\n\ngoog.exportSymbol(\n    'ol.style.Icon',\n    ol.style.Icon,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'clone',\n    ol.style.Icon.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getAnchor',\n    ol.style.Icon.prototype.getAnchor);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getColor',\n    ol.style.Icon.prototype.getColor);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getImage',\n    ol.style.Icon.prototype.getImage);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getOrigin',\n    ol.style.Icon.prototype.getOrigin);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getSrc',\n    ol.style.Icon.prototype.getSrc);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getSize',\n    ol.style.Icon.prototype.getSize);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'load',\n    ol.style.Icon.prototype.load);\n\ngoog.exportProperty(\n    ol.style.IconImageCache.prototype,\n    'setSize',\n    ol.style.IconImageCache.prototype.setSize);\n\ngoog.exportSymbol(\n    'ol.style.Image',\n    ol.style.Image,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'getOpacity',\n    ol.style.Image.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'getRotateWithView',\n    ol.style.Image.prototype.getRotateWithView);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'getRotation',\n    ol.style.Image.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'getScale',\n    ol.style.Image.prototype.getScale);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'getSnapToPixel',\n    ol.style.Image.prototype.getSnapToPixel);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'setOpacity',\n    ol.style.Image.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'setRotation',\n    ol.style.Image.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.style.Image.prototype,\n    'setScale',\n    ol.style.Image.prototype.setScale);\n\ngoog.exportSymbol(\n    'ol.style.RegularShape',\n    ol.style.RegularShape,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'clone',\n    ol.style.RegularShape.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getAnchor',\n    ol.style.RegularShape.prototype.getAnchor);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getAngle',\n    ol.style.RegularShape.prototype.getAngle);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getFill',\n    ol.style.RegularShape.prototype.getFill);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getImage',\n    ol.style.RegularShape.prototype.getImage);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getOrigin',\n    ol.style.RegularShape.prototype.getOrigin);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getPoints',\n    ol.style.RegularShape.prototype.getPoints);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getRadius',\n    ol.style.RegularShape.prototype.getRadius);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getRadius2',\n    ol.style.RegularShape.prototype.getRadius2);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getSize',\n    ol.style.RegularShape.prototype.getSize);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getStroke',\n    ol.style.RegularShape.prototype.getStroke);\n\ngoog.exportSymbol(\n    'ol.style.Stroke',\n    ol.style.Stroke,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'clone',\n    ol.style.Stroke.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getColor',\n    ol.style.Stroke.prototype.getColor);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getLineCap',\n    ol.style.Stroke.prototype.getLineCap);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getLineDash',\n    ol.style.Stroke.prototype.getLineDash);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getLineDashOffset',\n    ol.style.Stroke.prototype.getLineDashOffset);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getLineJoin',\n    ol.style.Stroke.prototype.getLineJoin);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getMiterLimit',\n    ol.style.Stroke.prototype.getMiterLimit);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'getWidth',\n    ol.style.Stroke.prototype.getWidth);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setColor',\n    ol.style.Stroke.prototype.setColor);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setLineCap',\n    ol.style.Stroke.prototype.setLineCap);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setLineDash',\n    ol.style.Stroke.prototype.setLineDash);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setLineDashOffset',\n    ol.style.Stroke.prototype.setLineDashOffset);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setLineJoin',\n    ol.style.Stroke.prototype.setLineJoin);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setMiterLimit',\n    ol.style.Stroke.prototype.setMiterLimit);\n\ngoog.exportProperty(\n    ol.style.Stroke.prototype,\n    'setWidth',\n    ol.style.Stroke.prototype.setWidth);\n\ngoog.exportSymbol(\n    'ol.style.Style',\n    ol.style.Style,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'clone',\n    ol.style.Style.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getRenderer',\n    ol.style.Style.prototype.getRenderer);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setRenderer',\n    ol.style.Style.prototype.setRenderer);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getGeometry',\n    ol.style.Style.prototype.getGeometry);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getGeometryFunction',\n    ol.style.Style.prototype.getGeometryFunction);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getFill',\n    ol.style.Style.prototype.getFill);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setFill',\n    ol.style.Style.prototype.setFill);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getImage',\n    ol.style.Style.prototype.getImage);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setImage',\n    ol.style.Style.prototype.setImage);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getStroke',\n    ol.style.Style.prototype.getStroke);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setStroke',\n    ol.style.Style.prototype.setStroke);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getText',\n    ol.style.Style.prototype.getText);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setText',\n    ol.style.Style.prototype.setText);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'getZIndex',\n    ol.style.Style.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setGeometry',\n    ol.style.Style.prototype.setGeometry);\n\ngoog.exportProperty(\n    ol.style.Style.prototype,\n    'setZIndex',\n    ol.style.Style.prototype.setZIndex);\n\ngoog.exportSymbol(\n    'ol.style.Text',\n    ol.style.Text,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'clone',\n    ol.style.Text.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getOverflow',\n    ol.style.Text.prototype.getOverflow);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getFont',\n    ol.style.Text.prototype.getFont);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getMaxAngle',\n    ol.style.Text.prototype.getMaxAngle);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getPlacement',\n    ol.style.Text.prototype.getPlacement);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getOffsetX',\n    ol.style.Text.prototype.getOffsetX);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getOffsetY',\n    ol.style.Text.prototype.getOffsetY);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getFill',\n    ol.style.Text.prototype.getFill);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getRotateWithView',\n    ol.style.Text.prototype.getRotateWithView);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getRotation',\n    ol.style.Text.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getScale',\n    ol.style.Text.prototype.getScale);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getStroke',\n    ol.style.Text.prototype.getStroke);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getText',\n    ol.style.Text.prototype.getText);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getTextAlign',\n    ol.style.Text.prototype.getTextAlign);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getTextBaseline',\n    ol.style.Text.prototype.getTextBaseline);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getBackgroundFill',\n    ol.style.Text.prototype.getBackgroundFill);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getBackgroundStroke',\n    ol.style.Text.prototype.getBackgroundStroke);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'getPadding',\n    ol.style.Text.prototype.getPadding);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setOverflow',\n    ol.style.Text.prototype.setOverflow);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setFont',\n    ol.style.Text.prototype.setFont);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setMaxAngle',\n    ol.style.Text.prototype.setMaxAngle);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setOffsetX',\n    ol.style.Text.prototype.setOffsetX);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setOffsetY',\n    ol.style.Text.prototype.setOffsetY);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setPlacement',\n    ol.style.Text.prototype.setPlacement);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setFill',\n    ol.style.Text.prototype.setFill);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setRotation',\n    ol.style.Text.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setScale',\n    ol.style.Text.prototype.setScale);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setStroke',\n    ol.style.Text.prototype.setStroke);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setText',\n    ol.style.Text.prototype.setText);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setTextAlign',\n    ol.style.Text.prototype.setTextAlign);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setTextBaseline',\n    ol.style.Text.prototype.setTextBaseline);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setBackgroundFill',\n    ol.style.Text.prototype.setBackgroundFill);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setBackgroundStroke',\n    ol.style.Text.prototype.setBackgroundStroke);\n\ngoog.exportProperty(\n    ol.style.Text.prototype,\n    'setPadding',\n    ol.style.Text.prototype.setPadding);\n\ngoog.exportSymbol(\n    'ol.source.BingMaps',\n    ol.source.BingMaps,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.BingMaps.TOS_ATTRIBUTION',\n    ol.source.BingMaps.TOS_ATTRIBUTION,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getApiKey',\n    ol.source.BingMaps.prototype.getApiKey);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getImagerySet',\n    ol.source.BingMaps.prototype.getImagerySet);\n\ngoog.exportSymbol(\n    'ol.source.CartoDB',\n    ol.source.CartoDB,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getConfig',\n    ol.source.CartoDB.prototype.getConfig);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'updateConfig',\n    ol.source.CartoDB.prototype.updateConfig);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setConfig',\n    ol.source.CartoDB.prototype.setConfig);\n\ngoog.exportSymbol(\n    'ol.source.Cluster',\n    ol.source.Cluster,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getDistance',\n    ol.source.Cluster.prototype.getDistance);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getSource',\n    ol.source.Cluster.prototype.getSource);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'setDistance',\n    ol.source.Cluster.prototype.setDistance);\n\ngoog.exportSymbol(\n    'ol.source.Image',\n    ol.source.Image,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Image.Event.prototype,\n    'image',\n    ol.source.Image.Event.prototype.image);\n\ngoog.exportSymbol(\n    'ol.source.ImageArcGISRest',\n    ol.source.ImageArcGISRest,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getParams',\n    ol.source.ImageArcGISRest.prototype.getParams);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getImageLoadFunction',\n    ol.source.ImageArcGISRest.prototype.getImageLoadFunction);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getUrl',\n    ol.source.ImageArcGISRest.prototype.getUrl);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'setImageLoadFunction',\n    ol.source.ImageArcGISRest.prototype.setImageLoadFunction);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'setUrl',\n    ol.source.ImageArcGISRest.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'updateParams',\n    ol.source.ImageArcGISRest.prototype.updateParams);\n\ngoog.exportSymbol(\n    'ol.source.ImageCanvas',\n    ol.source.ImageCanvas,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.ImageMapGuide',\n    ol.source.ImageMapGuide,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getParams',\n    ol.source.ImageMapGuide.prototype.getParams);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getImageLoadFunction',\n    ol.source.ImageMapGuide.prototype.getImageLoadFunction);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'updateParams',\n    ol.source.ImageMapGuide.prototype.updateParams);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'setImageLoadFunction',\n    ol.source.ImageMapGuide.prototype.setImageLoadFunction);\n\ngoog.exportSymbol(\n    'ol.source.ImageStatic',\n    ol.source.ImageStatic,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.ImageVector',\n    ol.source.ImageVector,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getSource',\n    ol.source.ImageVector.prototype.getSource);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getStyle',\n    ol.source.ImageVector.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getStyleFunction',\n    ol.source.ImageVector.prototype.getStyleFunction);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'setStyle',\n    ol.source.ImageVector.prototype.setStyle);\n\ngoog.exportSymbol(\n    'ol.source.ImageWMS',\n    ol.source.ImageWMS,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getGetFeatureInfoUrl',\n    ol.source.ImageWMS.prototype.getGetFeatureInfoUrl);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getParams',\n    ol.source.ImageWMS.prototype.getParams);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getImageLoadFunction',\n    ol.source.ImageWMS.prototype.getImageLoadFunction);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getUrl',\n    ol.source.ImageWMS.prototype.getUrl);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'setImageLoadFunction',\n    ol.source.ImageWMS.prototype.setImageLoadFunction);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'setUrl',\n    ol.source.ImageWMS.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'updateParams',\n    ol.source.ImageWMS.prototype.updateParams);\n\ngoog.exportSymbol(\n    'ol.source.OSM',\n    ol.source.OSM,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.OSM.ATTRIBUTION',\n    ol.source.OSM.ATTRIBUTION,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.Raster',\n    ol.source.Raster,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'setOperation',\n    ol.source.Raster.prototype.setOperation);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'extent',\n    ol.source.Raster.Event.prototype.extent);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'resolution',\n    ol.source.Raster.Event.prototype.resolution);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'data',\n    ol.source.Raster.Event.prototype.data);\n\ngoog.exportSymbol(\n    'ol.source.Source',\n    ol.source.Source,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getAttributions',\n    ol.source.Source.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getLogo',\n    ol.source.Source.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getProjection',\n    ol.source.Source.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getState',\n    ol.source.Source.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'refresh',\n    ol.source.Source.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'setAttributions',\n    ol.source.Source.prototype.setAttributions);\n\ngoog.exportSymbol(\n    'ol.source.Stamen',\n    ol.source.Stamen,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.Tile',\n    ol.source.Tile,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getTileGrid',\n    ol.source.Tile.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.Tile.Event.prototype,\n    'tile',\n    ol.source.Tile.Event.prototype.tile);\n\ngoog.exportSymbol(\n    'ol.source.TileArcGISRest',\n    ol.source.TileArcGISRest,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getParams',\n    ol.source.TileArcGISRest.prototype.getParams);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'updateParams',\n    ol.source.TileArcGISRest.prototype.updateParams);\n\ngoog.exportSymbol(\n    'ol.source.TileDebug',\n    ol.source.TileDebug,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.TileImage',\n    ol.source.TileImage,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.TileImage.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setTileGridForProjection',\n    ol.source.TileImage.prototype.setTileGridForProjection);\n\ngoog.exportSymbol(\n    'ol.source.TileJSON',\n    ol.source.TileJSON,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getTileJSON',\n    ol.source.TileJSON.prototype.getTileJSON);\n\ngoog.exportSymbol(\n    'ol.source.TileUTFGrid',\n    ol.source.TileUTFGrid,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getTemplate',\n    ol.source.TileUTFGrid.prototype.getTemplate);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'forDataAtCoordinateAndResolution',\n    ol.source.TileUTFGrid.prototype.forDataAtCoordinateAndResolution);\n\ngoog.exportSymbol(\n    'ol.source.TileWMS',\n    ol.source.TileWMS,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getGetFeatureInfoUrl',\n    ol.source.TileWMS.prototype.getGetFeatureInfoUrl);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getParams',\n    ol.source.TileWMS.prototype.getParams);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'updateParams',\n    ol.source.TileWMS.prototype.updateParams);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getTileLoadFunction',\n    ol.source.UrlTile.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getTileUrlFunction',\n    ol.source.UrlTile.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getUrls',\n    ol.source.UrlTile.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setTileLoadFunction',\n    ol.source.UrlTile.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setTileUrlFunction',\n    ol.source.UrlTile.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setUrl',\n    ol.source.UrlTile.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setUrls',\n    ol.source.UrlTile.prototype.setUrls);\n\ngoog.exportSymbol(\n    'ol.source.Vector',\n    ol.source.Vector,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'addFeature',\n    ol.source.Vector.prototype.addFeature);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'addFeatures',\n    ol.source.Vector.prototype.addFeatures);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'clear',\n    ol.source.Vector.prototype.clear);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'forEachFeature',\n    ol.source.Vector.prototype.forEachFeature);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'forEachFeatureInExtent',\n    ol.source.Vector.prototype.forEachFeatureInExtent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'forEachFeatureIntersectingExtent',\n    ol.source.Vector.prototype.forEachFeatureIntersectingExtent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFeaturesCollection',\n    ol.source.Vector.prototype.getFeaturesCollection);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFeatures',\n    ol.source.Vector.prototype.getFeatures);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFeaturesAtCoordinate',\n    ol.source.Vector.prototype.getFeaturesAtCoordinate);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFeaturesInExtent',\n    ol.source.Vector.prototype.getFeaturesInExtent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getClosestFeatureToCoordinate',\n    ol.source.Vector.prototype.getClosestFeatureToCoordinate);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getExtent',\n    ol.source.Vector.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFeatureById',\n    ol.source.Vector.prototype.getFeatureById);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getFormat',\n    ol.source.Vector.prototype.getFormat);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getUrl',\n    ol.source.Vector.prototype.getUrl);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'removeLoadedExtent',\n    ol.source.Vector.prototype.removeLoadedExtent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'removeFeature',\n    ol.source.Vector.prototype.removeFeature);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'setLoader',\n    ol.source.Vector.prototype.setLoader);\n\ngoog.exportProperty(\n    ol.source.Vector.Event.prototype,\n    'feature',\n    ol.source.Vector.Event.prototype.feature);\n\ngoog.exportSymbol(\n    'ol.source.VectorTile',\n    ol.source.VectorTile,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'clear',\n    ol.source.VectorTile.prototype.clear);\n\ngoog.exportSymbol(\n    'ol.source.WMTS',\n    ol.source.WMTS,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getDimensions',\n    ol.source.WMTS.prototype.getDimensions);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getFormat',\n    ol.source.WMTS.prototype.getFormat);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getLayer',\n    ol.source.WMTS.prototype.getLayer);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getMatrixSet',\n    ol.source.WMTS.prototype.getMatrixSet);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getRequestEncoding',\n    ol.source.WMTS.prototype.getRequestEncoding);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getStyle',\n    ol.source.WMTS.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getVersion',\n    ol.source.WMTS.prototype.getVersion);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'updateDimensions',\n    ol.source.WMTS.prototype.updateDimensions);\n\ngoog.exportSymbol(\n    'ol.source.WMTS.optionsFromCapabilities',\n    ol.source.WMTS.optionsFromCapabilities,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.XYZ',\n    ol.source.XYZ,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.source.Zoomify',\n    ol.source.Zoomify,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.webgl.ImageLayer',\n    ol.renderer.webgl.ImageLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.webgl.Map',\n    ol.renderer.webgl.Map,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.webgl.TileLayer',\n    ol.renderer.webgl.TileLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.webgl.VectorLayer',\n    ol.renderer.webgl.VectorLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.canvas.ImageLayer',\n    ol.renderer.canvas.ImageLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.canvas.Map',\n    ol.renderer.canvas.Map,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.canvas.TileLayer',\n    ol.renderer.canvas.TileLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.canvas.VectorLayer',\n    ol.renderer.canvas.VectorLayer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.renderer.canvas.VectorTileLayer',\n    ol.renderer.canvas.VectorTileLayer,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'vectorContext',\n    ol.render.Event.prototype.vectorContext);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'frameState',\n    ol.render.Event.prototype.frameState);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'context',\n    ol.render.Event.prototype.context);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'glContext',\n    ol.render.Event.prototype.glContext);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'get',\n    ol.render.Feature.prototype.get);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'getExtent',\n    ol.render.Feature.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'getId',\n    ol.render.Feature.prototype.getId);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'getGeometry',\n    ol.render.Feature.prototype.getGeometry);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'getProperties',\n    ol.render.Feature.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.render.Feature.prototype,\n    'getType',\n    ol.render.Feature.prototype.getType);\n\ngoog.exportSymbol(\n    'ol.render.VectorContext',\n    ol.render.VectorContext,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.render.webgl.Immediate.prototype,\n    'setStyle',\n    ol.render.webgl.Immediate.prototype.setStyle);\n\ngoog.exportProperty(\n    ol.render.webgl.Immediate.prototype,\n    'drawGeometry',\n    ol.render.webgl.Immediate.prototype.drawGeometry);\n\ngoog.exportProperty(\n    ol.render.webgl.Immediate.prototype,\n    'drawFeature',\n    ol.render.webgl.Immediate.prototype.drawFeature);\n\ngoog.exportProperty(\n    ol.render.canvas.Immediate.prototype,\n    'drawCircle',\n    ol.render.canvas.Immediate.prototype.drawCircle);\n\ngoog.exportProperty(\n    ol.render.canvas.Immediate.prototype,\n    'setStyle',\n    ol.render.canvas.Immediate.prototype.setStyle);\n\ngoog.exportProperty(\n    ol.render.canvas.Immediate.prototype,\n    'drawGeometry',\n    ol.render.canvas.Immediate.prototype.drawGeometry);\n\ngoog.exportProperty(\n    ol.render.canvas.Immediate.prototype,\n    'drawFeature',\n    ol.render.canvas.Immediate.prototype.drawFeature);\n\ngoog.exportSymbol(\n    'ol.proj.common.add',\n    ol.proj.common.add,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.proj.Projection',\n    ol.proj.Projection,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getCode',\n    ol.proj.Projection.prototype.getCode);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getExtent',\n    ol.proj.Projection.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getUnits',\n    ol.proj.Projection.prototype.getUnits);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getMetersPerUnit',\n    ol.proj.Projection.prototype.getMetersPerUnit);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getWorldExtent',\n    ol.proj.Projection.prototype.getWorldExtent);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'getAxisOrientation',\n    ol.proj.Projection.prototype.getAxisOrientation);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'isGlobal',\n    ol.proj.Projection.prototype.isGlobal);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'setGlobal',\n    ol.proj.Projection.prototype.setGlobal);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'setExtent',\n    ol.proj.Projection.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'setWorldExtent',\n    ol.proj.Projection.prototype.setWorldExtent);\n\ngoog.exportProperty(\n    ol.proj.Projection.prototype,\n    'setGetPointResolution',\n    ol.proj.Projection.prototype.setGetPointResolution);\n\ngoog.exportSymbol(\n    'ol.proj.Units.METERS_PER_UNIT',\n    ol.proj.Units.METERS_PER_UNIT,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.layer.Base',\n    ol.layer.Base,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getExtent',\n    ol.layer.Base.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getMaxResolution',\n    ol.layer.Base.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getMinResolution',\n    ol.layer.Base.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getOpacity',\n    ol.layer.Base.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getVisible',\n    ol.layer.Base.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getZIndex',\n    ol.layer.Base.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setExtent',\n    ol.layer.Base.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setMaxResolution',\n    ol.layer.Base.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setMinResolution',\n    ol.layer.Base.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setOpacity',\n    ol.layer.Base.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setVisible',\n    ol.layer.Base.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setZIndex',\n    ol.layer.Base.prototype.setZIndex);\n\ngoog.exportSymbol(\n    'ol.layer.Group',\n    ol.layer.Group,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getLayers',\n    ol.layer.Group.prototype.getLayers);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setLayers',\n    ol.layer.Group.prototype.setLayers);\n\ngoog.exportSymbol(\n    'ol.layer.Heatmap',\n    ol.layer.Heatmap,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getBlur',\n    ol.layer.Heatmap.prototype.getBlur);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getGradient',\n    ol.layer.Heatmap.prototype.getGradient);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getRadius',\n    ol.layer.Heatmap.prototype.getRadius);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setBlur',\n    ol.layer.Heatmap.prototype.setBlur);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setGradient',\n    ol.layer.Heatmap.prototype.setGradient);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setRadius',\n    ol.layer.Heatmap.prototype.setRadius);\n\ngoog.exportSymbol(\n    'ol.layer.Image',\n    ol.layer.Image,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getSource',\n    ol.layer.Image.prototype.getSource);\n\ngoog.exportSymbol(\n    'ol.layer.Layer',\n    ol.layer.Layer,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getSource',\n    ol.layer.Layer.prototype.getSource);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setMap',\n    ol.layer.Layer.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setSource',\n    ol.layer.Layer.prototype.setSource);\n\ngoog.exportSymbol(\n    'ol.layer.Tile',\n    ol.layer.Tile,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getPreload',\n    ol.layer.Tile.prototype.getPreload);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getSource',\n    ol.layer.Tile.prototype.getSource);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setPreload',\n    ol.layer.Tile.prototype.setPreload);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getUseInterimTilesOnError',\n    ol.layer.Tile.prototype.getUseInterimTilesOnError);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setUseInterimTilesOnError',\n    ol.layer.Tile.prototype.setUseInterimTilesOnError);\n\ngoog.exportSymbol(\n    'ol.layer.Vector',\n    ol.layer.Vector,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getSource',\n    ol.layer.Vector.prototype.getSource);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getStyle',\n    ol.layer.Vector.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getStyleFunction',\n    ol.layer.Vector.prototype.getStyleFunction);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setStyle',\n    ol.layer.Vector.prototype.setStyle);\n\ngoog.exportSymbol(\n    'ol.layer.VectorTile',\n    ol.layer.VectorTile,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getPreload',\n    ol.layer.VectorTile.prototype.getPreload);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getUseInterimTilesOnError',\n    ol.layer.VectorTile.prototype.getUseInterimTilesOnError);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setPreload',\n    ol.layer.VectorTile.prototype.setPreload);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setUseInterimTilesOnError',\n    ol.layer.VectorTile.prototype.setUseInterimTilesOnError);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getSource',\n    ol.layer.VectorTile.prototype.getSource);\n\ngoog.exportSymbol(\n    'ol.interaction.DoubleClickZoom',\n    ol.interaction.DoubleClickZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DoubleClickZoom.handleEvent',\n    ol.interaction.DoubleClickZoom.handleEvent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DragAndDrop',\n    ol.interaction.DragAndDrop,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DragAndDrop.handleEvent',\n    ol.interaction.DragAndDrop.handleEvent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'features',\n    ol.interaction.DragAndDrop.Event.prototype.features);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'file',\n    ol.interaction.DragAndDrop.Event.prototype.file);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'projection',\n    ol.interaction.DragAndDrop.Event.prototype.projection);\n\ngoog.exportSymbol(\n    'ol.interaction.DragBox',\n    ol.interaction.DragBox,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getGeometry',\n    ol.interaction.DragBox.prototype.getGeometry);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'coordinate',\n    ol.interaction.DragBox.Event.prototype.coordinate);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'mapBrowserEvent',\n    ol.interaction.DragBox.Event.prototype.mapBrowserEvent);\n\ngoog.exportSymbol(\n    'ol.interaction.DragPan',\n    ol.interaction.DragPan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DragRotate',\n    ol.interaction.DragRotate,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DragRotateAndZoom',\n    ol.interaction.DragRotateAndZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.DragZoom',\n    ol.interaction.DragZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Draw',\n    ol.interaction.Draw,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Draw.handleEvent',\n    ol.interaction.Draw.handleEvent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'removeLastPoint',\n    ol.interaction.Draw.prototype.removeLastPoint);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'finishDrawing',\n    ol.interaction.Draw.prototype.finishDrawing);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'extend',\n    ol.interaction.Draw.prototype.extend);\n\ngoog.exportSymbol(\n    'ol.interaction.Draw.createRegularPolygon',\n    ol.interaction.Draw.createRegularPolygon,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Draw.createBox',\n    ol.interaction.Draw.createBox,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Draw.Event.prototype,\n    'feature',\n    ol.interaction.Draw.Event.prototype.feature);\n\ngoog.exportSymbol(\n    'ol.interaction.Extent',\n    ol.interaction.Extent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getExtent',\n    ol.interaction.Extent.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'setExtent',\n    ol.interaction.Extent.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.interaction.Extent.Event.prototype,\n    'extent',\n    ol.interaction.Extent.Event.prototype.extent);\n\ngoog.exportSymbol(\n    'ol.interaction.Interaction',\n    ol.interaction.Interaction,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'getActive',\n    ol.interaction.Interaction.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'getMap',\n    ol.interaction.Interaction.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'setActive',\n    ol.interaction.Interaction.prototype.setActive);\n\ngoog.exportSymbol(\n    'ol.interaction.KeyboardPan',\n    ol.interaction.KeyboardPan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.KeyboardPan.handleEvent',\n    ol.interaction.KeyboardPan.handleEvent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.KeyboardZoom',\n    ol.interaction.KeyboardZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.KeyboardZoom.handleEvent',\n    ol.interaction.KeyboardZoom.handleEvent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Modify',\n    ol.interaction.Modify,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Modify.handleEvent',\n    ol.interaction.Modify.handleEvent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'removePoint',\n    ol.interaction.Modify.prototype.removePoint);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'features',\n    ol.interaction.Modify.Event.prototype.features);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'mapBrowserEvent',\n    ol.interaction.Modify.Event.prototype.mapBrowserEvent);\n\ngoog.exportSymbol(\n    'ol.interaction.MouseWheelZoom',\n    ol.interaction.MouseWheelZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.MouseWheelZoom.handleEvent',\n    ol.interaction.MouseWheelZoom.handleEvent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'setMouseAnchor',\n    ol.interaction.MouseWheelZoom.prototype.setMouseAnchor);\n\ngoog.exportSymbol(\n    'ol.interaction.PinchRotate',\n    ol.interaction.PinchRotate,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.PinchZoom',\n    ol.interaction.PinchZoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Pointer',\n    ol.interaction.Pointer,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Pointer.handleEvent',\n    ol.interaction.Pointer.handleEvent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.interaction.Select',\n    ol.interaction.Select,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getFeatures',\n    ol.interaction.Select.prototype.getFeatures);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getHitTolerance',\n    ol.interaction.Select.prototype.getHitTolerance);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getLayer',\n    ol.interaction.Select.prototype.getLayer);\n\ngoog.exportSymbol(\n    'ol.interaction.Select.handleEvent',\n    ol.interaction.Select.handleEvent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'setHitTolerance',\n    ol.interaction.Select.prototype.setHitTolerance);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'setMap',\n    ol.interaction.Select.prototype.setMap);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'selected',\n    ol.interaction.Select.Event.prototype.selected);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'deselected',\n    ol.interaction.Select.Event.prototype.deselected);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'mapBrowserEvent',\n    ol.interaction.Select.Event.prototype.mapBrowserEvent);\n\ngoog.exportSymbol(\n    'ol.interaction.Snap',\n    ol.interaction.Snap,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'addFeature',\n    ol.interaction.Snap.prototype.addFeature);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'removeFeature',\n    ol.interaction.Snap.prototype.removeFeature);\n\ngoog.exportSymbol(\n    'ol.interaction.Translate',\n    ol.interaction.Translate,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getHitTolerance',\n    ol.interaction.Translate.prototype.getHitTolerance);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'setHitTolerance',\n    ol.interaction.Translate.prototype.setHitTolerance);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'features',\n    ol.interaction.Translate.Event.prototype.features);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'coordinate',\n    ol.interaction.Translate.Event.prototype.coordinate);\n\ngoog.exportSymbol(\n    'ol.geom.Circle',\n    ol.geom.Circle,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'clone',\n    ol.geom.Circle.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getCenter',\n    ol.geom.Circle.prototype.getCenter);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getRadius',\n    ol.geom.Circle.prototype.getRadius);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getType',\n    ol.geom.Circle.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'intersectsExtent',\n    ol.geom.Circle.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'setCenter',\n    ol.geom.Circle.prototype.setCenter);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'setCenterAndRadius',\n    ol.geom.Circle.prototype.setCenterAndRadius);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'setRadius',\n    ol.geom.Circle.prototype.setRadius);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'transform',\n    ol.geom.Circle.prototype.transform);\n\ngoog.exportSymbol(\n    'ol.geom.Geometry',\n    ol.geom.Geometry,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'getClosestPoint',\n    ol.geom.Geometry.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'intersectsCoordinate',\n    ol.geom.Geometry.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'getExtent',\n    ol.geom.Geometry.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'rotate',\n    ol.geom.Geometry.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'scale',\n    ol.geom.Geometry.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'simplify',\n    ol.geom.Geometry.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'transform',\n    ol.geom.Geometry.prototype.transform);\n\ngoog.exportSymbol(\n    'ol.geom.GeometryCollection',\n    ol.geom.GeometryCollection,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'clone',\n    ol.geom.GeometryCollection.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getGeometries',\n    ol.geom.GeometryCollection.prototype.getGeometries);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getType',\n    ol.geom.GeometryCollection.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'intersectsExtent',\n    ol.geom.GeometryCollection.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'setGeometries',\n    ol.geom.GeometryCollection.prototype.setGeometries);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'applyTransform',\n    ol.geom.GeometryCollection.prototype.applyTransform);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'translate',\n    ol.geom.GeometryCollection.prototype.translate);\n\ngoog.exportSymbol(\n    'ol.geom.LinearRing',\n    ol.geom.LinearRing,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'clone',\n    ol.geom.LinearRing.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getArea',\n    ol.geom.LinearRing.prototype.getArea);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getCoordinates',\n    ol.geom.LinearRing.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getType',\n    ol.geom.LinearRing.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'setCoordinates',\n    ol.geom.LinearRing.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.LineString',\n    ol.geom.LineString,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'appendCoordinate',\n    ol.geom.LineString.prototype.appendCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'clone',\n    ol.geom.LineString.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'forEachSegment',\n    ol.geom.LineString.prototype.forEachSegment);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getCoordinateAtM',\n    ol.geom.LineString.prototype.getCoordinateAtM);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getCoordinates',\n    ol.geom.LineString.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getCoordinateAt',\n    ol.geom.LineString.prototype.getCoordinateAt);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getLength',\n    ol.geom.LineString.prototype.getLength);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getType',\n    ol.geom.LineString.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'intersectsExtent',\n    ol.geom.LineString.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'setCoordinates',\n    ol.geom.LineString.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.MultiLineString',\n    ol.geom.MultiLineString,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'appendLineString',\n    ol.geom.MultiLineString.prototype.appendLineString);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'clone',\n    ol.geom.MultiLineString.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getCoordinateAtM',\n    ol.geom.MultiLineString.prototype.getCoordinateAtM);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getCoordinates',\n    ol.geom.MultiLineString.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getLineString',\n    ol.geom.MultiLineString.prototype.getLineString);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getLineStrings',\n    ol.geom.MultiLineString.prototype.getLineStrings);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getType',\n    ol.geom.MultiLineString.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'intersectsExtent',\n    ol.geom.MultiLineString.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'setCoordinates',\n    ol.geom.MultiLineString.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.MultiPoint',\n    ol.geom.MultiPoint,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'appendPoint',\n    ol.geom.MultiPoint.prototype.appendPoint);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'clone',\n    ol.geom.MultiPoint.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getCoordinates',\n    ol.geom.MultiPoint.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getPoint',\n    ol.geom.MultiPoint.prototype.getPoint);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getPoints',\n    ol.geom.MultiPoint.prototype.getPoints);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getType',\n    ol.geom.MultiPoint.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'intersectsExtent',\n    ol.geom.MultiPoint.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'setCoordinates',\n    ol.geom.MultiPoint.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.MultiPolygon',\n    ol.geom.MultiPolygon,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'appendPolygon',\n    ol.geom.MultiPolygon.prototype.appendPolygon);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'clone',\n    ol.geom.MultiPolygon.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getArea',\n    ol.geom.MultiPolygon.prototype.getArea);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getCoordinates',\n    ol.geom.MultiPolygon.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getInteriorPoints',\n    ol.geom.MultiPolygon.prototype.getInteriorPoints);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getPolygon',\n    ol.geom.MultiPolygon.prototype.getPolygon);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getPolygons',\n    ol.geom.MultiPolygon.prototype.getPolygons);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getType',\n    ol.geom.MultiPolygon.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'intersectsExtent',\n    ol.geom.MultiPolygon.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'setCoordinates',\n    ol.geom.MultiPolygon.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.Point',\n    ol.geom.Point,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'clone',\n    ol.geom.Point.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getCoordinates',\n    ol.geom.Point.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getType',\n    ol.geom.Point.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'intersectsExtent',\n    ol.geom.Point.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'setCoordinates',\n    ol.geom.Point.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.Polygon',\n    ol.geom.Polygon,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'appendLinearRing',\n    ol.geom.Polygon.prototype.appendLinearRing);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'clone',\n    ol.geom.Polygon.prototype.clone);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getArea',\n    ol.geom.Polygon.prototype.getArea);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getCoordinates',\n    ol.geom.Polygon.prototype.getCoordinates);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getInteriorPoint',\n    ol.geom.Polygon.prototype.getInteriorPoint);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getLinearRingCount',\n    ol.geom.Polygon.prototype.getLinearRingCount);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getLinearRing',\n    ol.geom.Polygon.prototype.getLinearRing);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getLinearRings',\n    ol.geom.Polygon.prototype.getLinearRings);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getType',\n    ol.geom.Polygon.prototype.getType);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'intersectsExtent',\n    ol.geom.Polygon.prototype.intersectsExtent);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'setCoordinates',\n    ol.geom.Polygon.prototype.setCoordinates);\n\ngoog.exportSymbol(\n    'ol.geom.Polygon.circular',\n    ol.geom.Polygon.circular,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.geom.Polygon.fromExtent',\n    ol.geom.Polygon.fromExtent,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.geom.Polygon.fromCircle',\n    ol.geom.Polygon.fromCircle,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.geom.SimpleGeometry',\n    ol.geom.SimpleGeometry,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getFirstCoordinate',\n    ol.geom.SimpleGeometry.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getLastCoordinate',\n    ol.geom.SimpleGeometry.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getLayout',\n    ol.geom.SimpleGeometry.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'applyTransform',\n    ol.geom.SimpleGeometry.prototype.applyTransform);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'translate',\n    ol.geom.SimpleGeometry.prototype.translate);\n\ngoog.exportSymbol(\n    'ol.format.EsriJSON',\n    ol.format.EsriJSON,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'readFeature',\n    ol.format.EsriJSON.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'readFeatures',\n    ol.format.EsriJSON.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'readGeometry',\n    ol.format.EsriJSON.prototype.readGeometry);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'readProjection',\n    ol.format.EsriJSON.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeGeometry',\n    ol.format.EsriJSON.prototype.writeGeometry);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeGeometryObject',\n    ol.format.EsriJSON.prototype.writeGeometryObject);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeFeature',\n    ol.format.EsriJSON.prototype.writeFeature);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeFeatureObject',\n    ol.format.EsriJSON.prototype.writeFeatureObject);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeFeatures',\n    ol.format.EsriJSON.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.EsriJSON.prototype,\n    'writeFeaturesObject',\n    ol.format.EsriJSON.prototype.writeFeaturesObject);\n\ngoog.exportSymbol(\n    'ol.format.Feature',\n    ol.format.Feature,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.and',\n    ol.format.filter.and,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.or',\n    ol.format.filter.or,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.not',\n    ol.format.filter.not,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.bbox',\n    ol.format.filter.bbox,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.contains',\n    ol.format.filter.contains,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.intersects',\n    ol.format.filter.intersects,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.within',\n    ol.format.filter.within,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.equalTo',\n    ol.format.filter.equalTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.notEqualTo',\n    ol.format.filter.notEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.lessThan',\n    ol.format.filter.lessThan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.lessThanOrEqualTo',\n    ol.format.filter.lessThanOrEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.greaterThan',\n    ol.format.filter.greaterThan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.greaterThanOrEqualTo',\n    ol.format.filter.greaterThanOrEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.isNull',\n    ol.format.filter.isNull,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.between',\n    ol.format.filter.between,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.like',\n    ol.format.filter.like,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.during',\n    ol.format.filter.during,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.GeoJSON',\n    ol.format.GeoJSON,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'readFeature',\n    ol.format.GeoJSON.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'readFeatures',\n    ol.format.GeoJSON.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'readGeometry',\n    ol.format.GeoJSON.prototype.readGeometry);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'readProjection',\n    ol.format.GeoJSON.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeFeature',\n    ol.format.GeoJSON.prototype.writeFeature);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeFeatureObject',\n    ol.format.GeoJSON.prototype.writeFeatureObject);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeFeatures',\n    ol.format.GeoJSON.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeFeaturesObject',\n    ol.format.GeoJSON.prototype.writeFeaturesObject);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeGeometry',\n    ol.format.GeoJSON.prototype.writeGeometry);\n\ngoog.exportProperty(\n    ol.format.GeoJSON.prototype,\n    'writeGeometryObject',\n    ol.format.GeoJSON.prototype.writeGeometryObject);\n\ngoog.exportSymbol(\n    'ol.format.GML',\n    ol.format.GML,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.GML.prototype,\n    'writeFeatures',\n    ol.format.GML.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.GML.prototype,\n    'writeFeaturesNode',\n    ol.format.GML.prototype.writeFeaturesNode);\n\ngoog.exportSymbol(\n    'ol.format.GML2',\n    ol.format.GML2,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.GML3',\n    ol.format.GML3,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.GML3.prototype,\n    'writeGeometryNode',\n    ol.format.GML3.prototype.writeGeometryNode);\n\ngoog.exportProperty(\n    ol.format.GML3.prototype,\n    'writeFeatures',\n    ol.format.GML3.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.GML3.prototype,\n    'writeFeaturesNode',\n    ol.format.GML3.prototype.writeFeaturesNode);\n\ngoog.exportProperty(\n    ol.format.GMLBase.prototype,\n    'readFeatures',\n    ol.format.GMLBase.prototype.readFeatures);\n\ngoog.exportSymbol(\n    'ol.format.GPX',\n    ol.format.GPX,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.GPX.prototype,\n    'readFeature',\n    ol.format.GPX.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.GPX.prototype,\n    'readFeatures',\n    ol.format.GPX.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.GPX.prototype,\n    'readProjection',\n    ol.format.GPX.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.GPX.prototype,\n    'writeFeatures',\n    ol.format.GPX.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.GPX.prototype,\n    'writeFeaturesNode',\n    ol.format.GPX.prototype.writeFeaturesNode);\n\ngoog.exportSymbol(\n    'ol.format.IGC',\n    ol.format.IGC,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.IGC.prototype,\n    'readFeature',\n    ol.format.IGC.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.IGC.prototype,\n    'readFeatures',\n    ol.format.IGC.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.IGC.prototype,\n    'readProjection',\n    ol.format.IGC.prototype.readProjection);\n\ngoog.exportSymbol(\n    'ol.format.KML',\n    ol.format.KML,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readFeature',\n    ol.format.KML.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readFeatures',\n    ol.format.KML.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readName',\n    ol.format.KML.prototype.readName);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readNetworkLinks',\n    ol.format.KML.prototype.readNetworkLinks);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readRegion',\n    ol.format.KML.prototype.readRegion);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readRegionFromNode',\n    ol.format.KML.prototype.readRegionFromNode);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'readProjection',\n    ol.format.KML.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'writeFeatures',\n    ol.format.KML.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.KML.prototype,\n    'writeFeaturesNode',\n    ol.format.KML.prototype.writeFeaturesNode);\n\ngoog.exportSymbol(\n    'ol.format.MVT',\n    ol.format.MVT,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.MVT.prototype,\n    'getLastExtent',\n    ol.format.MVT.prototype.getLastExtent);\n\ngoog.exportProperty(\n    ol.format.MVT.prototype,\n    'readFeatures',\n    ol.format.MVT.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.MVT.prototype,\n    'readProjection',\n    ol.format.MVT.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.MVT.prototype,\n    'setLayers',\n    ol.format.MVT.prototype.setLayers);\n\ngoog.exportSymbol(\n    'ol.format.OSMXML',\n    ol.format.OSMXML,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.OSMXML.prototype,\n    'readFeatures',\n    ol.format.OSMXML.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.OSMXML.prototype,\n    'readProjection',\n    ol.format.OSMXML.prototype.readProjection);\n\ngoog.exportSymbol(\n    'ol.format.Polyline',\n    ol.format.Polyline,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.Polyline.encodeDeltas',\n    ol.format.Polyline.encodeDeltas,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.Polyline.decodeDeltas',\n    ol.format.Polyline.decodeDeltas,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.Polyline.encodeFloats',\n    ol.format.Polyline.encodeFloats,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.Polyline.decodeFloats',\n    ol.format.Polyline.decodeFloats,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.Polyline.prototype,\n    'readFeature',\n    ol.format.Polyline.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.Polyline.prototype,\n    'readFeatures',\n    ol.format.Polyline.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.Polyline.prototype,\n    'readGeometry',\n    ol.format.Polyline.prototype.readGeometry);\n\ngoog.exportProperty(\n    ol.format.Polyline.prototype,\n    'readProjection',\n    ol.format.Polyline.prototype.readProjection);\n\ngoog.exportProperty(\n    ol.format.Polyline.prototype,\n    'writeGeometry',\n    ol.format.Polyline.prototype.writeGeometry);\n\ngoog.exportSymbol(\n    'ol.format.TopoJSON',\n    ol.format.TopoJSON,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.TopoJSON.prototype,\n    'readFeatures',\n    ol.format.TopoJSON.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.TopoJSON.prototype,\n    'readProjection',\n    ol.format.TopoJSON.prototype.readProjection);\n\ngoog.exportSymbol(\n    'ol.format.WFS',\n    ol.format.WFS,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'readFeatures',\n    ol.format.WFS.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'readTransactionResponse',\n    ol.format.WFS.prototype.readTransactionResponse);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'readFeatureCollectionMetadata',\n    ol.format.WFS.prototype.readFeatureCollectionMetadata);\n\ngoog.exportSymbol(\n    'ol.format.WFS.writeFilter',\n    ol.format.WFS.writeFilter,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'writeGetFeature',\n    ol.format.WFS.prototype.writeGetFeature);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'writeTransaction',\n    ol.format.WFS.prototype.writeTransaction);\n\ngoog.exportProperty(\n    ol.format.WFS.prototype,\n    'readProjection',\n    ol.format.WFS.prototype.readProjection);\n\ngoog.exportSymbol(\n    'ol.format.WKT',\n    ol.format.WKT,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'readFeature',\n    ol.format.WKT.prototype.readFeature);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'readFeatures',\n    ol.format.WKT.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'readGeometry',\n    ol.format.WKT.prototype.readGeometry);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'writeFeature',\n    ol.format.WKT.prototype.writeFeature);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'writeFeatures',\n    ol.format.WKT.prototype.writeFeatures);\n\ngoog.exportProperty(\n    ol.format.WKT.prototype,\n    'writeGeometry',\n    ol.format.WKT.prototype.writeGeometry);\n\ngoog.exportSymbol(\n    'ol.format.WMSCapabilities',\n    ol.format.WMSCapabilities,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WMSCapabilities.prototype,\n    'read',\n    ol.format.WMSCapabilities.prototype.read);\n\ngoog.exportSymbol(\n    'ol.format.WMSGetFeatureInfo',\n    ol.format.WMSGetFeatureInfo,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WMSGetFeatureInfo.prototype,\n    'readFeatures',\n    ol.format.WMSGetFeatureInfo.prototype.readFeatures);\n\ngoog.exportSymbol(\n    'ol.format.WMTSCapabilities',\n    ol.format.WMTSCapabilities,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.format.WMTSCapabilities.prototype,\n    'read',\n    ol.format.WMTSCapabilities.prototype.read);\n\ngoog.exportSymbol(\n    'ol.format.filter.And',\n    ol.format.filter.And,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Bbox',\n    ol.format.filter.Bbox,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Comparison',\n    ol.format.filter.Comparison,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.ComparisonBinary',\n    ol.format.filter.ComparisonBinary,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Contains',\n    ol.format.filter.Contains,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.During',\n    ol.format.filter.During,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.EqualTo',\n    ol.format.filter.EqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Filter',\n    ol.format.filter.Filter,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.GreaterThan',\n    ol.format.filter.GreaterThan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.GreaterThanOrEqualTo',\n    ol.format.filter.GreaterThanOrEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Intersects',\n    ol.format.filter.Intersects,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.IsBetween',\n    ol.format.filter.IsBetween,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.IsLike',\n    ol.format.filter.IsLike,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.IsNull',\n    ol.format.filter.IsNull,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.LessThan',\n    ol.format.filter.LessThan,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.LessThanOrEqualTo',\n    ol.format.filter.LessThanOrEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Not',\n    ol.format.filter.Not,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.NotEqualTo',\n    ol.format.filter.NotEqualTo,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Or',\n    ol.format.filter.Or,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Spatial',\n    ol.format.filter.Spatial,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.format.filter.Within',\n    ol.format.filter.Within,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.altKeyOnly',\n    ol.events.condition.altKeyOnly,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.altShiftKeysOnly',\n    ol.events.condition.altShiftKeysOnly,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.always',\n    ol.events.condition.always,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.click',\n    ol.events.condition.click,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.never',\n    ol.events.condition.never,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.pointerMove',\n    ol.events.condition.pointerMove,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.singleClick',\n    ol.events.condition.singleClick,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.doubleClick',\n    ol.events.condition.doubleClick,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.noModifierKeys',\n    ol.events.condition.noModifierKeys,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.platformModifierKeyOnly',\n    ol.events.condition.platformModifierKeyOnly,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.shiftKeyOnly',\n    ol.events.condition.shiftKeyOnly,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.targetNotEditable',\n    ol.events.condition.targetNotEditable,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.mouseOnly',\n    ol.events.condition.mouseOnly,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.events.condition.primaryAction',\n    ol.events.condition.primaryAction,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.events.Event.prototype,\n    'type',\n    ol.events.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.events.Event.prototype,\n    'target',\n    ol.events.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.events.Event.prototype,\n    'preventDefault',\n    ol.events.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.events.Event.prototype,\n    'stopPropagation',\n    ol.events.Event.prototype.stopPropagation);\n\ngoog.exportSymbol(\n    'ol.control.Attribution',\n    ol.control.Attribution,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.Attribution.render',\n    ol.control.Attribution.render,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getCollapsible',\n    ol.control.Attribution.prototype.getCollapsible);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'setCollapsible',\n    ol.control.Attribution.prototype.setCollapsible);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'setCollapsed',\n    ol.control.Attribution.prototype.setCollapsed);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getCollapsed',\n    ol.control.Attribution.prototype.getCollapsed);\n\ngoog.exportSymbol(\n    'ol.control.Control',\n    ol.control.Control,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'getMap',\n    ol.control.Control.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'setMap',\n    ol.control.Control.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'setTarget',\n    ol.control.Control.prototype.setTarget);\n\ngoog.exportSymbol(\n    'ol.control.FullScreen',\n    ol.control.FullScreen,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.MousePosition',\n    ol.control.MousePosition,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.MousePosition.render',\n    ol.control.MousePosition.render,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getCoordinateFormat',\n    ol.control.MousePosition.prototype.getCoordinateFormat);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getProjection',\n    ol.control.MousePosition.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'setCoordinateFormat',\n    ol.control.MousePosition.prototype.setCoordinateFormat);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'setProjection',\n    ol.control.MousePosition.prototype.setProjection);\n\ngoog.exportSymbol(\n    'ol.control.OverviewMap',\n    ol.control.OverviewMap,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.OverviewMap.render',\n    ol.control.OverviewMap.render,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getCollapsible',\n    ol.control.OverviewMap.prototype.getCollapsible);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'setCollapsible',\n    ol.control.OverviewMap.prototype.setCollapsible);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'setCollapsed',\n    ol.control.OverviewMap.prototype.setCollapsed);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getCollapsed',\n    ol.control.OverviewMap.prototype.getCollapsed);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getOverviewMap',\n    ol.control.OverviewMap.prototype.getOverviewMap);\n\ngoog.exportSymbol(\n    'ol.control.Rotate',\n    ol.control.Rotate,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.Rotate.render',\n    ol.control.Rotate.render,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.ScaleLine',\n    ol.control.ScaleLine,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'getUnits',\n    ol.control.ScaleLine.prototype.getUnits);\n\ngoog.exportSymbol(\n    'ol.control.ScaleLine.render',\n    ol.control.ScaleLine.render,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'setUnits',\n    ol.control.ScaleLine.prototype.setUnits);\n\ngoog.exportSymbol(\n    'ol.control.Zoom',\n    ol.control.Zoom,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.ZoomSlider',\n    ol.control.ZoomSlider,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.ZoomSlider.render',\n    ol.control.ZoomSlider.render,\n    OPENLAYERS);\n\ngoog.exportSymbol(\n    'ol.control.ZoomToExtent',\n    ol.control.ZoomToExtent,\n    OPENLAYERS);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'changed',\n    ol.Object.prototype.changed);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'dispatchEvent',\n    ol.Object.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'getRevision',\n    ol.Object.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'on',\n    ol.Object.prototype.on);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'once',\n    ol.Object.prototype.once);\n\ngoog.exportProperty(\n    ol.Object.prototype,\n    'un',\n    ol.Object.prototype.un);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'get',\n    ol.PluggableMap.prototype.get);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getKeys',\n    ol.PluggableMap.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getProperties',\n    ol.PluggableMap.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'set',\n    ol.PluggableMap.prototype.set);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'setProperties',\n    ol.PluggableMap.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'unset',\n    ol.PluggableMap.prototype.unset);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'changed',\n    ol.PluggableMap.prototype.changed);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'dispatchEvent',\n    ol.PluggableMap.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'getRevision',\n    ol.PluggableMap.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'on',\n    ol.PluggableMap.prototype.on);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'once',\n    ol.PluggableMap.prototype.once);\n\ngoog.exportProperty(\n    ol.PluggableMap.prototype,\n    'un',\n    ol.PluggableMap.prototype.un);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'addControl',\n    ol.CanvasMap.prototype.addControl);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'addInteraction',\n    ol.CanvasMap.prototype.addInteraction);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'addLayer',\n    ol.CanvasMap.prototype.addLayer);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'addOverlay',\n    ol.CanvasMap.prototype.addOverlay);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'forEachFeatureAtPixel',\n    ol.CanvasMap.prototype.forEachFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getFeaturesAtPixel',\n    ol.CanvasMap.prototype.getFeaturesAtPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'forEachLayerAtPixel',\n    ol.CanvasMap.prototype.forEachLayerAtPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'hasFeatureAtPixel',\n    ol.CanvasMap.prototype.hasFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getEventCoordinate',\n    ol.CanvasMap.prototype.getEventCoordinate);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getEventPixel',\n    ol.CanvasMap.prototype.getEventPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getTarget',\n    ol.CanvasMap.prototype.getTarget);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getTargetElement',\n    ol.CanvasMap.prototype.getTargetElement);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getCoordinateFromPixel',\n    ol.CanvasMap.prototype.getCoordinateFromPixel);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getControls',\n    ol.CanvasMap.prototype.getControls);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getOverlays',\n    ol.CanvasMap.prototype.getOverlays);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getOverlayById',\n    ol.CanvasMap.prototype.getOverlayById);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getInteractions',\n    ol.CanvasMap.prototype.getInteractions);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getLayerGroup',\n    ol.CanvasMap.prototype.getLayerGroup);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getLayers',\n    ol.CanvasMap.prototype.getLayers);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getPixelFromCoordinate',\n    ol.CanvasMap.prototype.getPixelFromCoordinate);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getSize',\n    ol.CanvasMap.prototype.getSize);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getView',\n    ol.CanvasMap.prototype.getView);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getViewport',\n    ol.CanvasMap.prototype.getViewport);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'renderSync',\n    ol.CanvasMap.prototype.renderSync);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'render',\n    ol.CanvasMap.prototype.render);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'removeControl',\n    ol.CanvasMap.prototype.removeControl);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'removeInteraction',\n    ol.CanvasMap.prototype.removeInteraction);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'removeLayer',\n    ol.CanvasMap.prototype.removeLayer);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'removeOverlay',\n    ol.CanvasMap.prototype.removeOverlay);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'setLayerGroup',\n    ol.CanvasMap.prototype.setLayerGroup);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'setSize',\n    ol.CanvasMap.prototype.setSize);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'setTarget',\n    ol.CanvasMap.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'setView',\n    ol.CanvasMap.prototype.setView);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'updateSize',\n    ol.CanvasMap.prototype.updateSize);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'get',\n    ol.CanvasMap.prototype.get);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getKeys',\n    ol.CanvasMap.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getProperties',\n    ol.CanvasMap.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'set',\n    ol.CanvasMap.prototype.set);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'setProperties',\n    ol.CanvasMap.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'unset',\n    ol.CanvasMap.prototype.unset);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'changed',\n    ol.CanvasMap.prototype.changed);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'dispatchEvent',\n    ol.CanvasMap.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'getRevision',\n    ol.CanvasMap.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'on',\n    ol.CanvasMap.prototype.on);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'once',\n    ol.CanvasMap.prototype.once);\n\ngoog.exportProperty(\n    ol.CanvasMap.prototype,\n    'un',\n    ol.CanvasMap.prototype.un);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'get',\n    ol.Collection.prototype.get);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'getKeys',\n    ol.Collection.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'getProperties',\n    ol.Collection.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'set',\n    ol.Collection.prototype.set);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'setProperties',\n    ol.Collection.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'unset',\n    ol.Collection.prototype.unset);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'changed',\n    ol.Collection.prototype.changed);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'dispatchEvent',\n    ol.Collection.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'getRevision',\n    ol.Collection.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'on',\n    ol.Collection.prototype.on);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'once',\n    ol.Collection.prototype.once);\n\ngoog.exportProperty(\n    ol.Collection.prototype,\n    'un',\n    ol.Collection.prototype.un);\n\ngoog.exportProperty(\n    ol.Collection.Event.prototype,\n    'type',\n    ol.Collection.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.Collection.Event.prototype,\n    'target',\n    ol.Collection.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.Collection.Event.prototype,\n    'preventDefault',\n    ol.Collection.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.Collection.Event.prototype,\n    'stopPropagation',\n    ol.Collection.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'get',\n    ol.DeviceOrientation.prototype.get);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getKeys',\n    ol.DeviceOrientation.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getProperties',\n    ol.DeviceOrientation.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'set',\n    ol.DeviceOrientation.prototype.set);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'setProperties',\n    ol.DeviceOrientation.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'unset',\n    ol.DeviceOrientation.prototype.unset);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'changed',\n    ol.DeviceOrientation.prototype.changed);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'dispatchEvent',\n    ol.DeviceOrientation.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'getRevision',\n    ol.DeviceOrientation.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'on',\n    ol.DeviceOrientation.prototype.on);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'once',\n    ol.DeviceOrientation.prototype.once);\n\ngoog.exportProperty(\n    ol.DeviceOrientation.prototype,\n    'un',\n    ol.DeviceOrientation.prototype.un);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'get',\n    ol.Feature.prototype.get);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getKeys',\n    ol.Feature.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getProperties',\n    ol.Feature.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'set',\n    ol.Feature.prototype.set);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'setProperties',\n    ol.Feature.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'unset',\n    ol.Feature.prototype.unset);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'changed',\n    ol.Feature.prototype.changed);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'dispatchEvent',\n    ol.Feature.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'getRevision',\n    ol.Feature.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'on',\n    ol.Feature.prototype.on);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'once',\n    ol.Feature.prototype.once);\n\ngoog.exportProperty(\n    ol.Feature.prototype,\n    'un',\n    ol.Feature.prototype.un);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'get',\n    ol.Geolocation.prototype.get);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getKeys',\n    ol.Geolocation.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getProperties',\n    ol.Geolocation.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'set',\n    ol.Geolocation.prototype.set);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'setProperties',\n    ol.Geolocation.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'unset',\n    ol.Geolocation.prototype.unset);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'changed',\n    ol.Geolocation.prototype.changed);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'dispatchEvent',\n    ol.Geolocation.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'getRevision',\n    ol.Geolocation.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'on',\n    ol.Geolocation.prototype.on);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'once',\n    ol.Geolocation.prototype.once);\n\ngoog.exportProperty(\n    ol.Geolocation.prototype,\n    'un',\n    ol.Geolocation.prototype.un);\n\ngoog.exportProperty(\n    ol.ImageTile.prototype,\n    'getTileCoord',\n    ol.ImageTile.prototype.getTileCoord);\n\ngoog.exportProperty(\n    ol.ImageTile.prototype,\n    'load',\n    ol.ImageTile.prototype.load);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'addControl',\n    ol.Map.prototype.addControl);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'addInteraction',\n    ol.Map.prototype.addInteraction);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'addLayer',\n    ol.Map.prototype.addLayer);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'addOverlay',\n    ol.Map.prototype.addOverlay);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'forEachFeatureAtPixel',\n    ol.Map.prototype.forEachFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getFeaturesAtPixel',\n    ol.Map.prototype.getFeaturesAtPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'forEachLayerAtPixel',\n    ol.Map.prototype.forEachLayerAtPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'hasFeatureAtPixel',\n    ol.Map.prototype.hasFeatureAtPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getEventCoordinate',\n    ol.Map.prototype.getEventCoordinate);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getEventPixel',\n    ol.Map.prototype.getEventPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getTarget',\n    ol.Map.prototype.getTarget);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getTargetElement',\n    ol.Map.prototype.getTargetElement);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getCoordinateFromPixel',\n    ol.Map.prototype.getCoordinateFromPixel);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getControls',\n    ol.Map.prototype.getControls);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getOverlays',\n    ol.Map.prototype.getOverlays);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getOverlayById',\n    ol.Map.prototype.getOverlayById);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getInteractions',\n    ol.Map.prototype.getInteractions);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getLayerGroup',\n    ol.Map.prototype.getLayerGroup);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getLayers',\n    ol.Map.prototype.getLayers);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getPixelFromCoordinate',\n    ol.Map.prototype.getPixelFromCoordinate);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getSize',\n    ol.Map.prototype.getSize);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getView',\n    ol.Map.prototype.getView);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getViewport',\n    ol.Map.prototype.getViewport);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'renderSync',\n    ol.Map.prototype.renderSync);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'render',\n    ol.Map.prototype.render);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'removeControl',\n    ol.Map.prototype.removeControl);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'removeInteraction',\n    ol.Map.prototype.removeInteraction);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'removeLayer',\n    ol.Map.prototype.removeLayer);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'removeOverlay',\n    ol.Map.prototype.removeOverlay);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'setLayerGroup',\n    ol.Map.prototype.setLayerGroup);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'setSize',\n    ol.Map.prototype.setSize);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'setTarget',\n    ol.Map.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'setView',\n    ol.Map.prototype.setView);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'updateSize',\n    ol.Map.prototype.updateSize);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'get',\n    ol.Map.prototype.get);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getKeys',\n    ol.Map.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getProperties',\n    ol.Map.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'set',\n    ol.Map.prototype.set);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'setProperties',\n    ol.Map.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'unset',\n    ol.Map.prototype.unset);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'changed',\n    ol.Map.prototype.changed);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'dispatchEvent',\n    ol.Map.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'getRevision',\n    ol.Map.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'on',\n    ol.Map.prototype.on);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'once',\n    ol.Map.prototype.once);\n\ngoog.exportProperty(\n    ol.Map.prototype,\n    'un',\n    ol.Map.prototype.un);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'type',\n    ol.MapEvent.prototype.type);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'target',\n    ol.MapEvent.prototype.target);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'preventDefault',\n    ol.MapEvent.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.MapEvent.prototype,\n    'stopPropagation',\n    ol.MapEvent.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'map',\n    ol.MapBrowserEvent.prototype.map);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'frameState',\n    ol.MapBrowserEvent.prototype.frameState);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'type',\n    ol.MapBrowserEvent.prototype.type);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'target',\n    ol.MapBrowserEvent.prototype.target);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'preventDefault',\n    ol.MapBrowserEvent.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.MapBrowserEvent.prototype,\n    'stopPropagation',\n    ol.MapBrowserEvent.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'originalEvent',\n    ol.MapBrowserPointerEvent.prototype.originalEvent);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'pixel',\n    ol.MapBrowserPointerEvent.prototype.pixel);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'coordinate',\n    ol.MapBrowserPointerEvent.prototype.coordinate);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'dragging',\n    ol.MapBrowserPointerEvent.prototype.dragging);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'preventDefault',\n    ol.MapBrowserPointerEvent.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'stopPropagation',\n    ol.MapBrowserPointerEvent.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'map',\n    ol.MapBrowserPointerEvent.prototype.map);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'frameState',\n    ol.MapBrowserPointerEvent.prototype.frameState);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'type',\n    ol.MapBrowserPointerEvent.prototype.type);\n\ngoog.exportProperty(\n    ol.MapBrowserPointerEvent.prototype,\n    'target',\n    ol.MapBrowserPointerEvent.prototype.target);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'type',\n    ol.Object.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'target',\n    ol.Object.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'preventDefault',\n    ol.Object.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.Object.Event.prototype,\n    'stopPropagation',\n    ol.Object.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'get',\n    ol.Overlay.prototype.get);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getKeys',\n    ol.Overlay.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getProperties',\n    ol.Overlay.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'set',\n    ol.Overlay.prototype.set);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'setProperties',\n    ol.Overlay.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'unset',\n    ol.Overlay.prototype.unset);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'changed',\n    ol.Overlay.prototype.changed);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'dispatchEvent',\n    ol.Overlay.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'getRevision',\n    ol.Overlay.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'on',\n    ol.Overlay.prototype.on);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'once',\n    ol.Overlay.prototype.once);\n\ngoog.exportProperty(\n    ol.Overlay.prototype,\n    'un',\n    ol.Overlay.prototype.un);\n\ngoog.exportProperty(\n    ol.VectorImageTile.prototype,\n    'getTileCoord',\n    ol.VectorImageTile.prototype.getTileCoord);\n\ngoog.exportProperty(\n    ol.VectorImageTile.prototype,\n    'load',\n    ol.VectorImageTile.prototype.load);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'getTileCoord',\n    ol.VectorTile.prototype.getTileCoord);\n\ngoog.exportProperty(\n    ol.VectorTile.prototype,\n    'load',\n    ol.VectorTile.prototype.load);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'get',\n    ol.View.prototype.get);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getKeys',\n    ol.View.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getProperties',\n    ol.View.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'set',\n    ol.View.prototype.set);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'setProperties',\n    ol.View.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'unset',\n    ol.View.prototype.unset);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'changed',\n    ol.View.prototype.changed);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'dispatchEvent',\n    ol.View.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'getRevision',\n    ol.View.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'on',\n    ol.View.prototype.on);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'once',\n    ol.View.prototype.once);\n\ngoog.exportProperty(\n    ol.View.prototype,\n    'un',\n    ol.View.prototype.un);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'forEachTileCoord',\n    ol.tilegrid.WMTS.prototype.forEachTileCoord);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getMaxZoom',\n    ol.tilegrid.WMTS.prototype.getMaxZoom);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getMinZoom',\n    ol.tilegrid.WMTS.prototype.getMinZoom);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getOrigin',\n    ol.tilegrid.WMTS.prototype.getOrigin);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getResolution',\n    ol.tilegrid.WMTS.prototype.getResolution);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getResolutions',\n    ol.tilegrid.WMTS.prototype.getResolutions);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getTileCoordExtent',\n    ol.tilegrid.WMTS.prototype.getTileCoordExtent);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getTileCoordForCoordAndResolution',\n    ol.tilegrid.WMTS.prototype.getTileCoordForCoordAndResolution);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getTileCoordForCoordAndZ',\n    ol.tilegrid.WMTS.prototype.getTileCoordForCoordAndZ);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getTileSize',\n    ol.tilegrid.WMTS.prototype.getTileSize);\n\ngoog.exportProperty(\n    ol.tilegrid.WMTS.prototype,\n    'getZForResolution',\n    ol.tilegrid.WMTS.prototype.getZForResolution);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getOpacity',\n    ol.style.RegularShape.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getRotateWithView',\n    ol.style.RegularShape.prototype.getRotateWithView);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getRotation',\n    ol.style.RegularShape.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getScale',\n    ol.style.RegularShape.prototype.getScale);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'getSnapToPixel',\n    ol.style.RegularShape.prototype.getSnapToPixel);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'setOpacity',\n    ol.style.RegularShape.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'setRotation',\n    ol.style.RegularShape.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.style.RegularShape.prototype,\n    'setScale',\n    ol.style.RegularShape.prototype.setScale);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'clone',\n    ol.style.Circle.prototype.clone);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getAngle',\n    ol.style.Circle.prototype.getAngle);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getFill',\n    ol.style.Circle.prototype.getFill);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getPoints',\n    ol.style.Circle.prototype.getPoints);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getRadius',\n    ol.style.Circle.prototype.getRadius);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getRadius2',\n    ol.style.Circle.prototype.getRadius2);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getStroke',\n    ol.style.Circle.prototype.getStroke);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getOpacity',\n    ol.style.Circle.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getRotateWithView',\n    ol.style.Circle.prototype.getRotateWithView);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getRotation',\n    ol.style.Circle.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getScale',\n    ol.style.Circle.prototype.getScale);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'getSnapToPixel',\n    ol.style.Circle.prototype.getSnapToPixel);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'setOpacity',\n    ol.style.Circle.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'setRotation',\n    ol.style.Circle.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.style.Circle.prototype,\n    'setScale',\n    ol.style.Circle.prototype.setScale);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getOpacity',\n    ol.style.Icon.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getRotateWithView',\n    ol.style.Icon.prototype.getRotateWithView);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getRotation',\n    ol.style.Icon.prototype.getRotation);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getScale',\n    ol.style.Icon.prototype.getScale);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'getSnapToPixel',\n    ol.style.Icon.prototype.getSnapToPixel);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'setOpacity',\n    ol.style.Icon.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'setRotation',\n    ol.style.Icon.prototype.setRotation);\n\ngoog.exportProperty(\n    ol.style.Icon.prototype,\n    'setScale',\n    ol.style.Icon.prototype.setScale);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'get',\n    ol.source.Source.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getKeys',\n    ol.source.Source.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getProperties',\n    ol.source.Source.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'set',\n    ol.source.Source.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'setProperties',\n    ol.source.Source.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'unset',\n    ol.source.Source.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'changed',\n    ol.source.Source.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'dispatchEvent',\n    ol.source.Source.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'getRevision',\n    ol.source.Source.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'on',\n    ol.source.Source.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'once',\n    ol.source.Source.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Source.prototype,\n    'un',\n    ol.source.Source.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getAttributions',\n    ol.source.Tile.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getLogo',\n    ol.source.Tile.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getProjection',\n    ol.source.Tile.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getState',\n    ol.source.Tile.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'refresh',\n    ol.source.Tile.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'setAttributions',\n    ol.source.Tile.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'get',\n    ol.source.Tile.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getKeys',\n    ol.source.Tile.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getProperties',\n    ol.source.Tile.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'set',\n    ol.source.Tile.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'setProperties',\n    ol.source.Tile.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'unset',\n    ol.source.Tile.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'changed',\n    ol.source.Tile.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'dispatchEvent',\n    ol.source.Tile.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'getRevision',\n    ol.source.Tile.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'on',\n    ol.source.Tile.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'once',\n    ol.source.Tile.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Tile.prototype,\n    'un',\n    ol.source.Tile.prototype.un);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getTileGrid',\n    ol.source.UrlTile.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'refresh',\n    ol.source.UrlTile.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getAttributions',\n    ol.source.UrlTile.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getLogo',\n    ol.source.UrlTile.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getProjection',\n    ol.source.UrlTile.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getState',\n    ol.source.UrlTile.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setAttributions',\n    ol.source.UrlTile.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'get',\n    ol.source.UrlTile.prototype.get);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getKeys',\n    ol.source.UrlTile.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getProperties',\n    ol.source.UrlTile.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'set',\n    ol.source.UrlTile.prototype.set);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'setProperties',\n    ol.source.UrlTile.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'unset',\n    ol.source.UrlTile.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'changed',\n    ol.source.UrlTile.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'dispatchEvent',\n    ol.source.UrlTile.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'getRevision',\n    ol.source.UrlTile.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'on',\n    ol.source.UrlTile.prototype.on);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'once',\n    ol.source.UrlTile.prototype.once);\n\ngoog.exportProperty(\n    ol.source.UrlTile.prototype,\n    'un',\n    ol.source.UrlTile.prototype.un);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getTileLoadFunction',\n    ol.source.TileImage.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getTileUrlFunction',\n    ol.source.TileImage.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getUrls',\n    ol.source.TileImage.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setTileLoadFunction',\n    ol.source.TileImage.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setTileUrlFunction',\n    ol.source.TileImage.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setUrl',\n    ol.source.TileImage.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setUrls',\n    ol.source.TileImage.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getTileGrid',\n    ol.source.TileImage.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'refresh',\n    ol.source.TileImage.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getAttributions',\n    ol.source.TileImage.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getLogo',\n    ol.source.TileImage.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getProjection',\n    ol.source.TileImage.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getState',\n    ol.source.TileImage.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setAttributions',\n    ol.source.TileImage.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'get',\n    ol.source.TileImage.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getKeys',\n    ol.source.TileImage.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getProperties',\n    ol.source.TileImage.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'set',\n    ol.source.TileImage.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'setProperties',\n    ol.source.TileImage.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'unset',\n    ol.source.TileImage.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'changed',\n    ol.source.TileImage.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'dispatchEvent',\n    ol.source.TileImage.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'getRevision',\n    ol.source.TileImage.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'on',\n    ol.source.TileImage.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'once',\n    ol.source.TileImage.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileImage.prototype,\n    'un',\n    ol.source.TileImage.prototype.un);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.BingMaps.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setTileGridForProjection',\n    ol.source.BingMaps.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getTileLoadFunction',\n    ol.source.BingMaps.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getTileUrlFunction',\n    ol.source.BingMaps.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getUrls',\n    ol.source.BingMaps.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setTileLoadFunction',\n    ol.source.BingMaps.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setTileUrlFunction',\n    ol.source.BingMaps.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setUrl',\n    ol.source.BingMaps.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setUrls',\n    ol.source.BingMaps.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getTileGrid',\n    ol.source.BingMaps.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'refresh',\n    ol.source.BingMaps.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getAttributions',\n    ol.source.BingMaps.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getLogo',\n    ol.source.BingMaps.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getProjection',\n    ol.source.BingMaps.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getState',\n    ol.source.BingMaps.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setAttributions',\n    ol.source.BingMaps.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'get',\n    ol.source.BingMaps.prototype.get);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getKeys',\n    ol.source.BingMaps.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getProperties',\n    ol.source.BingMaps.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'set',\n    ol.source.BingMaps.prototype.set);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'setProperties',\n    ol.source.BingMaps.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'unset',\n    ol.source.BingMaps.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'changed',\n    ol.source.BingMaps.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'dispatchEvent',\n    ol.source.BingMaps.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'getRevision',\n    ol.source.BingMaps.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'on',\n    ol.source.BingMaps.prototype.on);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'once',\n    ol.source.BingMaps.prototype.once);\n\ngoog.exportProperty(\n    ol.source.BingMaps.prototype,\n    'un',\n    ol.source.BingMaps.prototype.un);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.XYZ.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setTileGridForProjection',\n    ol.source.XYZ.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getTileLoadFunction',\n    ol.source.XYZ.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getTileUrlFunction',\n    ol.source.XYZ.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getUrls',\n    ol.source.XYZ.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setTileLoadFunction',\n    ol.source.XYZ.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setTileUrlFunction',\n    ol.source.XYZ.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setUrl',\n    ol.source.XYZ.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setUrls',\n    ol.source.XYZ.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getTileGrid',\n    ol.source.XYZ.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'refresh',\n    ol.source.XYZ.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getAttributions',\n    ol.source.XYZ.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getLogo',\n    ol.source.XYZ.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getProjection',\n    ol.source.XYZ.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getState',\n    ol.source.XYZ.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setAttributions',\n    ol.source.XYZ.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'get',\n    ol.source.XYZ.prototype.get);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getKeys',\n    ol.source.XYZ.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getProperties',\n    ol.source.XYZ.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'set',\n    ol.source.XYZ.prototype.set);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'setProperties',\n    ol.source.XYZ.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'unset',\n    ol.source.XYZ.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'changed',\n    ol.source.XYZ.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'dispatchEvent',\n    ol.source.XYZ.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'getRevision',\n    ol.source.XYZ.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'on',\n    ol.source.XYZ.prototype.on);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'once',\n    ol.source.XYZ.prototype.once);\n\ngoog.exportProperty(\n    ol.source.XYZ.prototype,\n    'un',\n    ol.source.XYZ.prototype.un);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.CartoDB.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setTileGridForProjection',\n    ol.source.CartoDB.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getTileLoadFunction',\n    ol.source.CartoDB.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getTileUrlFunction',\n    ol.source.CartoDB.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getUrls',\n    ol.source.CartoDB.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setTileLoadFunction',\n    ol.source.CartoDB.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setTileUrlFunction',\n    ol.source.CartoDB.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setUrl',\n    ol.source.CartoDB.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setUrls',\n    ol.source.CartoDB.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getTileGrid',\n    ol.source.CartoDB.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'refresh',\n    ol.source.CartoDB.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getAttributions',\n    ol.source.CartoDB.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getLogo',\n    ol.source.CartoDB.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getProjection',\n    ol.source.CartoDB.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getState',\n    ol.source.CartoDB.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setAttributions',\n    ol.source.CartoDB.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'get',\n    ol.source.CartoDB.prototype.get);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getKeys',\n    ol.source.CartoDB.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getProperties',\n    ol.source.CartoDB.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'set',\n    ol.source.CartoDB.prototype.set);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'setProperties',\n    ol.source.CartoDB.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'unset',\n    ol.source.CartoDB.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'changed',\n    ol.source.CartoDB.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'dispatchEvent',\n    ol.source.CartoDB.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'getRevision',\n    ol.source.CartoDB.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'on',\n    ol.source.CartoDB.prototype.on);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'once',\n    ol.source.CartoDB.prototype.once);\n\ngoog.exportProperty(\n    ol.source.CartoDB.prototype,\n    'un',\n    ol.source.CartoDB.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getAttributions',\n    ol.source.Vector.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getLogo',\n    ol.source.Vector.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getProjection',\n    ol.source.Vector.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getState',\n    ol.source.Vector.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'refresh',\n    ol.source.Vector.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'setAttributions',\n    ol.source.Vector.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'get',\n    ol.source.Vector.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getKeys',\n    ol.source.Vector.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getProperties',\n    ol.source.Vector.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'set',\n    ol.source.Vector.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'setProperties',\n    ol.source.Vector.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'unset',\n    ol.source.Vector.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'changed',\n    ol.source.Vector.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'dispatchEvent',\n    ol.source.Vector.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'getRevision',\n    ol.source.Vector.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'on',\n    ol.source.Vector.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'once',\n    ol.source.Vector.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Vector.prototype,\n    'un',\n    ol.source.Vector.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'addFeature',\n    ol.source.Cluster.prototype.addFeature);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'addFeatures',\n    ol.source.Cluster.prototype.addFeatures);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'clear',\n    ol.source.Cluster.prototype.clear);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'forEachFeature',\n    ol.source.Cluster.prototype.forEachFeature);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'forEachFeatureInExtent',\n    ol.source.Cluster.prototype.forEachFeatureInExtent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'forEachFeatureIntersectingExtent',\n    ol.source.Cluster.prototype.forEachFeatureIntersectingExtent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFeaturesCollection',\n    ol.source.Cluster.prototype.getFeaturesCollection);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFeatures',\n    ol.source.Cluster.prototype.getFeatures);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFeaturesAtCoordinate',\n    ol.source.Cluster.prototype.getFeaturesAtCoordinate);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFeaturesInExtent',\n    ol.source.Cluster.prototype.getFeaturesInExtent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getClosestFeatureToCoordinate',\n    ol.source.Cluster.prototype.getClosestFeatureToCoordinate);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getExtent',\n    ol.source.Cluster.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFeatureById',\n    ol.source.Cluster.prototype.getFeatureById);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getFormat',\n    ol.source.Cluster.prototype.getFormat);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getUrl',\n    ol.source.Cluster.prototype.getUrl);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'removeLoadedExtent',\n    ol.source.Cluster.prototype.removeLoadedExtent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'removeFeature',\n    ol.source.Cluster.prototype.removeFeature);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'setLoader',\n    ol.source.Cluster.prototype.setLoader);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getAttributions',\n    ol.source.Cluster.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getLogo',\n    ol.source.Cluster.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getProjection',\n    ol.source.Cluster.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getState',\n    ol.source.Cluster.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'refresh',\n    ol.source.Cluster.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'setAttributions',\n    ol.source.Cluster.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'get',\n    ol.source.Cluster.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getKeys',\n    ol.source.Cluster.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getProperties',\n    ol.source.Cluster.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'set',\n    ol.source.Cluster.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'setProperties',\n    ol.source.Cluster.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'unset',\n    ol.source.Cluster.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'changed',\n    ol.source.Cluster.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'dispatchEvent',\n    ol.source.Cluster.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'getRevision',\n    ol.source.Cluster.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'on',\n    ol.source.Cluster.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'once',\n    ol.source.Cluster.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Cluster.prototype,\n    'un',\n    ol.source.Cluster.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getAttributions',\n    ol.source.Image.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getLogo',\n    ol.source.Image.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getProjection',\n    ol.source.Image.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getState',\n    ol.source.Image.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'refresh',\n    ol.source.Image.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'setAttributions',\n    ol.source.Image.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'get',\n    ol.source.Image.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getKeys',\n    ol.source.Image.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getProperties',\n    ol.source.Image.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'set',\n    ol.source.Image.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'setProperties',\n    ol.source.Image.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'unset',\n    ol.source.Image.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'changed',\n    ol.source.Image.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'dispatchEvent',\n    ol.source.Image.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'getRevision',\n    ol.source.Image.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'on',\n    ol.source.Image.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'once',\n    ol.source.Image.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Image.prototype,\n    'un',\n    ol.source.Image.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Image.Event.prototype,\n    'type',\n    ol.source.Image.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.source.Image.Event.prototype,\n    'target',\n    ol.source.Image.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.source.Image.Event.prototype,\n    'preventDefault',\n    ol.source.Image.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.source.Image.Event.prototype,\n    'stopPropagation',\n    ol.source.Image.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getAttributions',\n    ol.source.ImageArcGISRest.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getLogo',\n    ol.source.ImageArcGISRest.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getProjection',\n    ol.source.ImageArcGISRest.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getState',\n    ol.source.ImageArcGISRest.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'refresh',\n    ol.source.ImageArcGISRest.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'setAttributions',\n    ol.source.ImageArcGISRest.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'get',\n    ol.source.ImageArcGISRest.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getKeys',\n    ol.source.ImageArcGISRest.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getProperties',\n    ol.source.ImageArcGISRest.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'set',\n    ol.source.ImageArcGISRest.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'setProperties',\n    ol.source.ImageArcGISRest.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'unset',\n    ol.source.ImageArcGISRest.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'changed',\n    ol.source.ImageArcGISRest.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'dispatchEvent',\n    ol.source.ImageArcGISRest.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'getRevision',\n    ol.source.ImageArcGISRest.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'on',\n    ol.source.ImageArcGISRest.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'once',\n    ol.source.ImageArcGISRest.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageArcGISRest.prototype,\n    'un',\n    ol.source.ImageArcGISRest.prototype.un);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getAttributions',\n    ol.source.ImageCanvas.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getLogo',\n    ol.source.ImageCanvas.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getProjection',\n    ol.source.ImageCanvas.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getState',\n    ol.source.ImageCanvas.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'refresh',\n    ol.source.ImageCanvas.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'setAttributions',\n    ol.source.ImageCanvas.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'get',\n    ol.source.ImageCanvas.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getKeys',\n    ol.source.ImageCanvas.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getProperties',\n    ol.source.ImageCanvas.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'set',\n    ol.source.ImageCanvas.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'setProperties',\n    ol.source.ImageCanvas.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'unset',\n    ol.source.ImageCanvas.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'changed',\n    ol.source.ImageCanvas.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'dispatchEvent',\n    ol.source.ImageCanvas.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'getRevision',\n    ol.source.ImageCanvas.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'on',\n    ol.source.ImageCanvas.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'once',\n    ol.source.ImageCanvas.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageCanvas.prototype,\n    'un',\n    ol.source.ImageCanvas.prototype.un);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getAttributions',\n    ol.source.ImageMapGuide.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getLogo',\n    ol.source.ImageMapGuide.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getProjection',\n    ol.source.ImageMapGuide.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getState',\n    ol.source.ImageMapGuide.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'refresh',\n    ol.source.ImageMapGuide.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'setAttributions',\n    ol.source.ImageMapGuide.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'get',\n    ol.source.ImageMapGuide.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getKeys',\n    ol.source.ImageMapGuide.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getProperties',\n    ol.source.ImageMapGuide.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'set',\n    ol.source.ImageMapGuide.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'setProperties',\n    ol.source.ImageMapGuide.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'unset',\n    ol.source.ImageMapGuide.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'changed',\n    ol.source.ImageMapGuide.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'dispatchEvent',\n    ol.source.ImageMapGuide.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'getRevision',\n    ol.source.ImageMapGuide.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'on',\n    ol.source.ImageMapGuide.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'once',\n    ol.source.ImageMapGuide.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageMapGuide.prototype,\n    'un',\n    ol.source.ImageMapGuide.prototype.un);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getAttributions',\n    ol.source.ImageStatic.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getLogo',\n    ol.source.ImageStatic.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getProjection',\n    ol.source.ImageStatic.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getState',\n    ol.source.ImageStatic.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'refresh',\n    ol.source.ImageStatic.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'setAttributions',\n    ol.source.ImageStatic.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'get',\n    ol.source.ImageStatic.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getKeys',\n    ol.source.ImageStatic.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getProperties',\n    ol.source.ImageStatic.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'set',\n    ol.source.ImageStatic.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'setProperties',\n    ol.source.ImageStatic.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'unset',\n    ol.source.ImageStatic.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'changed',\n    ol.source.ImageStatic.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'dispatchEvent',\n    ol.source.ImageStatic.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'getRevision',\n    ol.source.ImageStatic.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'on',\n    ol.source.ImageStatic.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'once',\n    ol.source.ImageStatic.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageStatic.prototype,\n    'un',\n    ol.source.ImageStatic.prototype.un);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getAttributions',\n    ol.source.ImageVector.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getLogo',\n    ol.source.ImageVector.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getProjection',\n    ol.source.ImageVector.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getState',\n    ol.source.ImageVector.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'refresh',\n    ol.source.ImageVector.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'setAttributions',\n    ol.source.ImageVector.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'get',\n    ol.source.ImageVector.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getKeys',\n    ol.source.ImageVector.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getProperties',\n    ol.source.ImageVector.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'set',\n    ol.source.ImageVector.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'setProperties',\n    ol.source.ImageVector.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'unset',\n    ol.source.ImageVector.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'changed',\n    ol.source.ImageVector.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'dispatchEvent',\n    ol.source.ImageVector.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'getRevision',\n    ol.source.ImageVector.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'on',\n    ol.source.ImageVector.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'once',\n    ol.source.ImageVector.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageVector.prototype,\n    'un',\n    ol.source.ImageVector.prototype.un);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getAttributions',\n    ol.source.ImageWMS.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getLogo',\n    ol.source.ImageWMS.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getProjection',\n    ol.source.ImageWMS.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getState',\n    ol.source.ImageWMS.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'refresh',\n    ol.source.ImageWMS.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'setAttributions',\n    ol.source.ImageWMS.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'get',\n    ol.source.ImageWMS.prototype.get);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getKeys',\n    ol.source.ImageWMS.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getProperties',\n    ol.source.ImageWMS.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'set',\n    ol.source.ImageWMS.prototype.set);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'setProperties',\n    ol.source.ImageWMS.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'unset',\n    ol.source.ImageWMS.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'changed',\n    ol.source.ImageWMS.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'dispatchEvent',\n    ol.source.ImageWMS.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'getRevision',\n    ol.source.ImageWMS.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'on',\n    ol.source.ImageWMS.prototype.on);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'once',\n    ol.source.ImageWMS.prototype.once);\n\ngoog.exportProperty(\n    ol.source.ImageWMS.prototype,\n    'un',\n    ol.source.ImageWMS.prototype.un);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.OSM.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setTileGridForProjection',\n    ol.source.OSM.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getTileLoadFunction',\n    ol.source.OSM.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getTileUrlFunction',\n    ol.source.OSM.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getUrls',\n    ol.source.OSM.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setTileLoadFunction',\n    ol.source.OSM.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setTileUrlFunction',\n    ol.source.OSM.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setUrl',\n    ol.source.OSM.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setUrls',\n    ol.source.OSM.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getTileGrid',\n    ol.source.OSM.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'refresh',\n    ol.source.OSM.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getAttributions',\n    ol.source.OSM.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getLogo',\n    ol.source.OSM.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getProjection',\n    ol.source.OSM.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getState',\n    ol.source.OSM.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setAttributions',\n    ol.source.OSM.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'get',\n    ol.source.OSM.prototype.get);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getKeys',\n    ol.source.OSM.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getProperties',\n    ol.source.OSM.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'set',\n    ol.source.OSM.prototype.set);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'setProperties',\n    ol.source.OSM.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'unset',\n    ol.source.OSM.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'changed',\n    ol.source.OSM.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'dispatchEvent',\n    ol.source.OSM.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'getRevision',\n    ol.source.OSM.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'on',\n    ol.source.OSM.prototype.on);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'once',\n    ol.source.OSM.prototype.once);\n\ngoog.exportProperty(\n    ol.source.OSM.prototype,\n    'un',\n    ol.source.OSM.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getAttributions',\n    ol.source.Raster.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getLogo',\n    ol.source.Raster.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getProjection',\n    ol.source.Raster.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getState',\n    ol.source.Raster.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'refresh',\n    ol.source.Raster.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'setAttributions',\n    ol.source.Raster.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'get',\n    ol.source.Raster.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getKeys',\n    ol.source.Raster.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getProperties',\n    ol.source.Raster.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'set',\n    ol.source.Raster.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'setProperties',\n    ol.source.Raster.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'unset',\n    ol.source.Raster.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'changed',\n    ol.source.Raster.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'dispatchEvent',\n    ol.source.Raster.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'getRevision',\n    ol.source.Raster.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'on',\n    ol.source.Raster.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'once',\n    ol.source.Raster.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Raster.prototype,\n    'un',\n    ol.source.Raster.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'type',\n    ol.source.Raster.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'target',\n    ol.source.Raster.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'preventDefault',\n    ol.source.Raster.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.source.Raster.Event.prototype,\n    'stopPropagation',\n    ol.source.Raster.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.Stamen.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setTileGridForProjection',\n    ol.source.Stamen.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getTileLoadFunction',\n    ol.source.Stamen.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getTileUrlFunction',\n    ol.source.Stamen.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getUrls',\n    ol.source.Stamen.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setTileLoadFunction',\n    ol.source.Stamen.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setTileUrlFunction',\n    ol.source.Stamen.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setUrl',\n    ol.source.Stamen.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setUrls',\n    ol.source.Stamen.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getTileGrid',\n    ol.source.Stamen.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'refresh',\n    ol.source.Stamen.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getAttributions',\n    ol.source.Stamen.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getLogo',\n    ol.source.Stamen.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getProjection',\n    ol.source.Stamen.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getState',\n    ol.source.Stamen.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setAttributions',\n    ol.source.Stamen.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'get',\n    ol.source.Stamen.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getKeys',\n    ol.source.Stamen.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getProperties',\n    ol.source.Stamen.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'set',\n    ol.source.Stamen.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'setProperties',\n    ol.source.Stamen.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'unset',\n    ol.source.Stamen.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'changed',\n    ol.source.Stamen.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'dispatchEvent',\n    ol.source.Stamen.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'getRevision',\n    ol.source.Stamen.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'on',\n    ol.source.Stamen.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'once',\n    ol.source.Stamen.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Stamen.prototype,\n    'un',\n    ol.source.Stamen.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Tile.Event.prototype,\n    'type',\n    ol.source.Tile.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.source.Tile.Event.prototype,\n    'target',\n    ol.source.Tile.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.source.Tile.Event.prototype,\n    'preventDefault',\n    ol.source.Tile.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.source.Tile.Event.prototype,\n    'stopPropagation',\n    ol.source.Tile.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.TileArcGISRest.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setTileGridForProjection',\n    ol.source.TileArcGISRest.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getTileLoadFunction',\n    ol.source.TileArcGISRest.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getTileUrlFunction',\n    ol.source.TileArcGISRest.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getUrls',\n    ol.source.TileArcGISRest.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setTileLoadFunction',\n    ol.source.TileArcGISRest.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setTileUrlFunction',\n    ol.source.TileArcGISRest.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setUrl',\n    ol.source.TileArcGISRest.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setUrls',\n    ol.source.TileArcGISRest.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getTileGrid',\n    ol.source.TileArcGISRest.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'refresh',\n    ol.source.TileArcGISRest.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getAttributions',\n    ol.source.TileArcGISRest.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getLogo',\n    ol.source.TileArcGISRest.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getProjection',\n    ol.source.TileArcGISRest.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getState',\n    ol.source.TileArcGISRest.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setAttributions',\n    ol.source.TileArcGISRest.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'get',\n    ol.source.TileArcGISRest.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getKeys',\n    ol.source.TileArcGISRest.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getProperties',\n    ol.source.TileArcGISRest.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'set',\n    ol.source.TileArcGISRest.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'setProperties',\n    ol.source.TileArcGISRest.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'unset',\n    ol.source.TileArcGISRest.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'changed',\n    ol.source.TileArcGISRest.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'dispatchEvent',\n    ol.source.TileArcGISRest.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'getRevision',\n    ol.source.TileArcGISRest.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'on',\n    ol.source.TileArcGISRest.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'once',\n    ol.source.TileArcGISRest.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileArcGISRest.prototype,\n    'un',\n    ol.source.TileArcGISRest.prototype.un);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getTileGrid',\n    ol.source.TileDebug.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'refresh',\n    ol.source.TileDebug.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getAttributions',\n    ol.source.TileDebug.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getLogo',\n    ol.source.TileDebug.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getProjection',\n    ol.source.TileDebug.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getState',\n    ol.source.TileDebug.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'setAttributions',\n    ol.source.TileDebug.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'get',\n    ol.source.TileDebug.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getKeys',\n    ol.source.TileDebug.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getProperties',\n    ol.source.TileDebug.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'set',\n    ol.source.TileDebug.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'setProperties',\n    ol.source.TileDebug.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'unset',\n    ol.source.TileDebug.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'changed',\n    ol.source.TileDebug.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'dispatchEvent',\n    ol.source.TileDebug.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'getRevision',\n    ol.source.TileDebug.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'on',\n    ol.source.TileDebug.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'once',\n    ol.source.TileDebug.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileDebug.prototype,\n    'un',\n    ol.source.TileDebug.prototype.un);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.TileJSON.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setTileGridForProjection',\n    ol.source.TileJSON.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getTileLoadFunction',\n    ol.source.TileJSON.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getTileUrlFunction',\n    ol.source.TileJSON.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getUrls',\n    ol.source.TileJSON.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setTileLoadFunction',\n    ol.source.TileJSON.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setTileUrlFunction',\n    ol.source.TileJSON.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setUrl',\n    ol.source.TileJSON.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setUrls',\n    ol.source.TileJSON.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getTileGrid',\n    ol.source.TileJSON.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'refresh',\n    ol.source.TileJSON.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getAttributions',\n    ol.source.TileJSON.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getLogo',\n    ol.source.TileJSON.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getProjection',\n    ol.source.TileJSON.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getState',\n    ol.source.TileJSON.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setAttributions',\n    ol.source.TileJSON.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'get',\n    ol.source.TileJSON.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getKeys',\n    ol.source.TileJSON.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getProperties',\n    ol.source.TileJSON.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'set',\n    ol.source.TileJSON.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'setProperties',\n    ol.source.TileJSON.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'unset',\n    ol.source.TileJSON.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'changed',\n    ol.source.TileJSON.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'dispatchEvent',\n    ol.source.TileJSON.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'getRevision',\n    ol.source.TileJSON.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'on',\n    ol.source.TileJSON.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'once',\n    ol.source.TileJSON.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileJSON.prototype,\n    'un',\n    ol.source.TileJSON.prototype.un);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getTileGrid',\n    ol.source.TileUTFGrid.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'refresh',\n    ol.source.TileUTFGrid.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getAttributions',\n    ol.source.TileUTFGrid.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getLogo',\n    ol.source.TileUTFGrid.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getProjection',\n    ol.source.TileUTFGrid.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getState',\n    ol.source.TileUTFGrid.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'setAttributions',\n    ol.source.TileUTFGrid.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'get',\n    ol.source.TileUTFGrid.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getKeys',\n    ol.source.TileUTFGrid.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getProperties',\n    ol.source.TileUTFGrid.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'set',\n    ol.source.TileUTFGrid.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'setProperties',\n    ol.source.TileUTFGrid.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'unset',\n    ol.source.TileUTFGrid.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'changed',\n    ol.source.TileUTFGrid.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'dispatchEvent',\n    ol.source.TileUTFGrid.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'getRevision',\n    ol.source.TileUTFGrid.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'on',\n    ol.source.TileUTFGrid.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'once',\n    ol.source.TileUTFGrid.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileUTFGrid.prototype,\n    'un',\n    ol.source.TileUTFGrid.prototype.un);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.TileWMS.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setTileGridForProjection',\n    ol.source.TileWMS.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getTileLoadFunction',\n    ol.source.TileWMS.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getTileUrlFunction',\n    ol.source.TileWMS.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getUrls',\n    ol.source.TileWMS.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setTileLoadFunction',\n    ol.source.TileWMS.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setTileUrlFunction',\n    ol.source.TileWMS.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setUrl',\n    ol.source.TileWMS.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setUrls',\n    ol.source.TileWMS.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getTileGrid',\n    ol.source.TileWMS.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'refresh',\n    ol.source.TileWMS.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getAttributions',\n    ol.source.TileWMS.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getLogo',\n    ol.source.TileWMS.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getProjection',\n    ol.source.TileWMS.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getState',\n    ol.source.TileWMS.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setAttributions',\n    ol.source.TileWMS.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'get',\n    ol.source.TileWMS.prototype.get);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getKeys',\n    ol.source.TileWMS.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getProperties',\n    ol.source.TileWMS.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'set',\n    ol.source.TileWMS.prototype.set);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'setProperties',\n    ol.source.TileWMS.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'unset',\n    ol.source.TileWMS.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'changed',\n    ol.source.TileWMS.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'dispatchEvent',\n    ol.source.TileWMS.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'getRevision',\n    ol.source.TileWMS.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'on',\n    ol.source.TileWMS.prototype.on);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'once',\n    ol.source.TileWMS.prototype.once);\n\ngoog.exportProperty(\n    ol.source.TileWMS.prototype,\n    'un',\n    ol.source.TileWMS.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Vector.Event.prototype,\n    'type',\n    ol.source.Vector.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.source.Vector.Event.prototype,\n    'target',\n    ol.source.Vector.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.source.Vector.Event.prototype,\n    'preventDefault',\n    ol.source.Vector.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.source.Vector.Event.prototype,\n    'stopPropagation',\n    ol.source.Vector.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getTileLoadFunction',\n    ol.source.VectorTile.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getTileUrlFunction',\n    ol.source.VectorTile.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getUrls',\n    ol.source.VectorTile.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setTileLoadFunction',\n    ol.source.VectorTile.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setTileUrlFunction',\n    ol.source.VectorTile.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setUrl',\n    ol.source.VectorTile.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setUrls',\n    ol.source.VectorTile.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getTileGrid',\n    ol.source.VectorTile.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'refresh',\n    ol.source.VectorTile.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getAttributions',\n    ol.source.VectorTile.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getLogo',\n    ol.source.VectorTile.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getProjection',\n    ol.source.VectorTile.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getState',\n    ol.source.VectorTile.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setAttributions',\n    ol.source.VectorTile.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'get',\n    ol.source.VectorTile.prototype.get);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getKeys',\n    ol.source.VectorTile.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getProperties',\n    ol.source.VectorTile.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'set',\n    ol.source.VectorTile.prototype.set);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'setProperties',\n    ol.source.VectorTile.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'unset',\n    ol.source.VectorTile.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'changed',\n    ol.source.VectorTile.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'dispatchEvent',\n    ol.source.VectorTile.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'getRevision',\n    ol.source.VectorTile.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'on',\n    ol.source.VectorTile.prototype.on);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'once',\n    ol.source.VectorTile.prototype.once);\n\ngoog.exportProperty(\n    ol.source.VectorTile.prototype,\n    'un',\n    ol.source.VectorTile.prototype.un);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.WMTS.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setTileGridForProjection',\n    ol.source.WMTS.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getTileLoadFunction',\n    ol.source.WMTS.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getTileUrlFunction',\n    ol.source.WMTS.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getUrls',\n    ol.source.WMTS.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setTileLoadFunction',\n    ol.source.WMTS.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setTileUrlFunction',\n    ol.source.WMTS.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setUrl',\n    ol.source.WMTS.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setUrls',\n    ol.source.WMTS.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getTileGrid',\n    ol.source.WMTS.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'refresh',\n    ol.source.WMTS.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getAttributions',\n    ol.source.WMTS.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getLogo',\n    ol.source.WMTS.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getProjection',\n    ol.source.WMTS.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getState',\n    ol.source.WMTS.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setAttributions',\n    ol.source.WMTS.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'get',\n    ol.source.WMTS.prototype.get);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getKeys',\n    ol.source.WMTS.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getProperties',\n    ol.source.WMTS.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'set',\n    ol.source.WMTS.prototype.set);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'setProperties',\n    ol.source.WMTS.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'unset',\n    ol.source.WMTS.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'changed',\n    ol.source.WMTS.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'dispatchEvent',\n    ol.source.WMTS.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'getRevision',\n    ol.source.WMTS.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'on',\n    ol.source.WMTS.prototype.on);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'once',\n    ol.source.WMTS.prototype.once);\n\ngoog.exportProperty(\n    ol.source.WMTS.prototype,\n    'un',\n    ol.source.WMTS.prototype.un);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setRenderReprojectionEdges',\n    ol.source.Zoomify.prototype.setRenderReprojectionEdges);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setTileGridForProjection',\n    ol.source.Zoomify.prototype.setTileGridForProjection);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getTileLoadFunction',\n    ol.source.Zoomify.prototype.getTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getTileUrlFunction',\n    ol.source.Zoomify.prototype.getTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getUrls',\n    ol.source.Zoomify.prototype.getUrls);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setTileLoadFunction',\n    ol.source.Zoomify.prototype.setTileLoadFunction);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setTileUrlFunction',\n    ol.source.Zoomify.prototype.setTileUrlFunction);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setUrl',\n    ol.source.Zoomify.prototype.setUrl);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setUrls',\n    ol.source.Zoomify.prototype.setUrls);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getTileGrid',\n    ol.source.Zoomify.prototype.getTileGrid);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'refresh',\n    ol.source.Zoomify.prototype.refresh);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getAttributions',\n    ol.source.Zoomify.prototype.getAttributions);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getLogo',\n    ol.source.Zoomify.prototype.getLogo);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getProjection',\n    ol.source.Zoomify.prototype.getProjection);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getState',\n    ol.source.Zoomify.prototype.getState);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setAttributions',\n    ol.source.Zoomify.prototype.setAttributions);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'get',\n    ol.source.Zoomify.prototype.get);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getKeys',\n    ol.source.Zoomify.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getProperties',\n    ol.source.Zoomify.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'set',\n    ol.source.Zoomify.prototype.set);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'setProperties',\n    ol.source.Zoomify.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'unset',\n    ol.source.Zoomify.prototype.unset);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'changed',\n    ol.source.Zoomify.prototype.changed);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'dispatchEvent',\n    ol.source.Zoomify.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'getRevision',\n    ol.source.Zoomify.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'on',\n    ol.source.Zoomify.prototype.on);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'once',\n    ol.source.Zoomify.prototype.once);\n\ngoog.exportProperty(\n    ol.source.Zoomify.prototype,\n    'un',\n    ol.source.Zoomify.prototype.un);\n\ngoog.exportProperty(\n    ol.reproj.Tile.prototype,\n    'getTileCoord',\n    ol.reproj.Tile.prototype.getTileCoord);\n\ngoog.exportProperty(\n    ol.reproj.Tile.prototype,\n    'load',\n    ol.reproj.Tile.prototype.load);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'changed',\n    ol.renderer.Layer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'dispatchEvent',\n    ol.renderer.Layer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'getRevision',\n    ol.renderer.Layer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'on',\n    ol.renderer.Layer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'once',\n    ol.renderer.Layer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.Layer.prototype,\n    'un',\n    ol.renderer.Layer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'changed',\n    ol.renderer.webgl.Layer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'dispatchEvent',\n    ol.renderer.webgl.Layer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'getRevision',\n    ol.renderer.webgl.Layer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'on',\n    ol.renderer.webgl.Layer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'once',\n    ol.renderer.webgl.Layer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.webgl.Layer.prototype,\n    'un',\n    ol.renderer.webgl.Layer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'changed',\n    ol.renderer.webgl.ImageLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.webgl.ImageLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'getRevision',\n    ol.renderer.webgl.ImageLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'on',\n    ol.renderer.webgl.ImageLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'once',\n    ol.renderer.webgl.ImageLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.webgl.ImageLayer.prototype,\n    'un',\n    ol.renderer.webgl.ImageLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'changed',\n    ol.renderer.webgl.TileLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.webgl.TileLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'getRevision',\n    ol.renderer.webgl.TileLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'on',\n    ol.renderer.webgl.TileLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'once',\n    ol.renderer.webgl.TileLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.webgl.TileLayer.prototype,\n    'un',\n    ol.renderer.webgl.TileLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'changed',\n    ol.renderer.webgl.VectorLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.webgl.VectorLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'getRevision',\n    ol.renderer.webgl.VectorLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'on',\n    ol.renderer.webgl.VectorLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'once',\n    ol.renderer.webgl.VectorLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.webgl.VectorLayer.prototype,\n    'un',\n    ol.renderer.webgl.VectorLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'changed',\n    ol.renderer.canvas.Layer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.Layer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'getRevision',\n    ol.renderer.canvas.Layer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'on',\n    ol.renderer.canvas.Layer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'once',\n    ol.renderer.canvas.Layer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.Layer.prototype,\n    'un',\n    ol.renderer.canvas.Layer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'changed',\n    ol.renderer.canvas.IntermediateCanvas.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.IntermediateCanvas.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'getRevision',\n    ol.renderer.canvas.IntermediateCanvas.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'on',\n    ol.renderer.canvas.IntermediateCanvas.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'once',\n    ol.renderer.canvas.IntermediateCanvas.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.IntermediateCanvas.prototype,\n    'un',\n    ol.renderer.canvas.IntermediateCanvas.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'changed',\n    ol.renderer.canvas.ImageLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.ImageLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'getRevision',\n    ol.renderer.canvas.ImageLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'on',\n    ol.renderer.canvas.ImageLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'once',\n    ol.renderer.canvas.ImageLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.ImageLayer.prototype,\n    'un',\n    ol.renderer.canvas.ImageLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'changed',\n    ol.renderer.canvas.TileLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.TileLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'getRevision',\n    ol.renderer.canvas.TileLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'on',\n    ol.renderer.canvas.TileLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'once',\n    ol.renderer.canvas.TileLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.TileLayer.prototype,\n    'un',\n    ol.renderer.canvas.TileLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'changed',\n    ol.renderer.canvas.VectorLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.VectorLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'getRevision',\n    ol.renderer.canvas.VectorLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'on',\n    ol.renderer.canvas.VectorLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'once',\n    ol.renderer.canvas.VectorLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorLayer.prototype,\n    'un',\n    ol.renderer.canvas.VectorLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'changed',\n    ol.renderer.canvas.VectorTileLayer.prototype.changed);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'dispatchEvent',\n    ol.renderer.canvas.VectorTileLayer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'getRevision',\n    ol.renderer.canvas.VectorTileLayer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'on',\n    ol.renderer.canvas.VectorTileLayer.prototype.on);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'once',\n    ol.renderer.canvas.VectorTileLayer.prototype.once);\n\ngoog.exportProperty(\n    ol.renderer.canvas.VectorTileLayer.prototype,\n    'un',\n    ol.renderer.canvas.VectorTileLayer.prototype.un);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'type',\n    ol.render.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'target',\n    ol.render.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'preventDefault',\n    ol.render.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.render.Event.prototype,\n    'stopPropagation',\n    ol.render.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.pointer.PointerEvent.prototype,\n    'type',\n    ol.pointer.PointerEvent.prototype.type);\n\ngoog.exportProperty(\n    ol.pointer.PointerEvent.prototype,\n    'target',\n    ol.pointer.PointerEvent.prototype.target);\n\ngoog.exportProperty(\n    ol.pointer.PointerEvent.prototype,\n    'preventDefault',\n    ol.pointer.PointerEvent.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.pointer.PointerEvent.prototype,\n    'stopPropagation',\n    ol.pointer.PointerEvent.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'get',\n    ol.layer.Base.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getKeys',\n    ol.layer.Base.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getProperties',\n    ol.layer.Base.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'set',\n    ol.layer.Base.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'setProperties',\n    ol.layer.Base.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'unset',\n    ol.layer.Base.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'changed',\n    ol.layer.Base.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'dispatchEvent',\n    ol.layer.Base.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'getRevision',\n    ol.layer.Base.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'on',\n    ol.layer.Base.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'once',\n    ol.layer.Base.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Base.prototype,\n    'un',\n    ol.layer.Base.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getExtent',\n    ol.layer.Group.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getMaxResolution',\n    ol.layer.Group.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getMinResolution',\n    ol.layer.Group.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getOpacity',\n    ol.layer.Group.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getVisible',\n    ol.layer.Group.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getZIndex',\n    ol.layer.Group.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setExtent',\n    ol.layer.Group.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setMaxResolution',\n    ol.layer.Group.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setMinResolution',\n    ol.layer.Group.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setOpacity',\n    ol.layer.Group.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setVisible',\n    ol.layer.Group.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setZIndex',\n    ol.layer.Group.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'get',\n    ol.layer.Group.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getKeys',\n    ol.layer.Group.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getProperties',\n    ol.layer.Group.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'set',\n    ol.layer.Group.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'setProperties',\n    ol.layer.Group.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'unset',\n    ol.layer.Group.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'changed',\n    ol.layer.Group.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'dispatchEvent',\n    ol.layer.Group.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'getRevision',\n    ol.layer.Group.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'on',\n    ol.layer.Group.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'once',\n    ol.layer.Group.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Group.prototype,\n    'un',\n    ol.layer.Group.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getExtent',\n    ol.layer.Layer.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getMaxResolution',\n    ol.layer.Layer.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getMinResolution',\n    ol.layer.Layer.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getOpacity',\n    ol.layer.Layer.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getVisible',\n    ol.layer.Layer.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getZIndex',\n    ol.layer.Layer.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setExtent',\n    ol.layer.Layer.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setMaxResolution',\n    ol.layer.Layer.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setMinResolution',\n    ol.layer.Layer.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setOpacity',\n    ol.layer.Layer.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setVisible',\n    ol.layer.Layer.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setZIndex',\n    ol.layer.Layer.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'get',\n    ol.layer.Layer.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getKeys',\n    ol.layer.Layer.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getProperties',\n    ol.layer.Layer.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'set',\n    ol.layer.Layer.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'setProperties',\n    ol.layer.Layer.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'unset',\n    ol.layer.Layer.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'changed',\n    ol.layer.Layer.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'dispatchEvent',\n    ol.layer.Layer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'getRevision',\n    ol.layer.Layer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'on',\n    ol.layer.Layer.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'once',\n    ol.layer.Layer.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Layer.prototype,\n    'un',\n    ol.layer.Layer.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setMap',\n    ol.layer.Vector.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setSource',\n    ol.layer.Vector.prototype.setSource);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getExtent',\n    ol.layer.Vector.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getMaxResolution',\n    ol.layer.Vector.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getMinResolution',\n    ol.layer.Vector.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getOpacity',\n    ol.layer.Vector.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getVisible',\n    ol.layer.Vector.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getZIndex',\n    ol.layer.Vector.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setExtent',\n    ol.layer.Vector.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setMaxResolution',\n    ol.layer.Vector.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setMinResolution',\n    ol.layer.Vector.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setOpacity',\n    ol.layer.Vector.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setVisible',\n    ol.layer.Vector.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setZIndex',\n    ol.layer.Vector.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'get',\n    ol.layer.Vector.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getKeys',\n    ol.layer.Vector.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getProperties',\n    ol.layer.Vector.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'set',\n    ol.layer.Vector.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'setProperties',\n    ol.layer.Vector.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'unset',\n    ol.layer.Vector.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'changed',\n    ol.layer.Vector.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'dispatchEvent',\n    ol.layer.Vector.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'getRevision',\n    ol.layer.Vector.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'on',\n    ol.layer.Vector.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'once',\n    ol.layer.Vector.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Vector.prototype,\n    'un',\n    ol.layer.Vector.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getSource',\n    ol.layer.Heatmap.prototype.getSource);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getStyle',\n    ol.layer.Heatmap.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getStyleFunction',\n    ol.layer.Heatmap.prototype.getStyleFunction);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setStyle',\n    ol.layer.Heatmap.prototype.setStyle);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setMap',\n    ol.layer.Heatmap.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setSource',\n    ol.layer.Heatmap.prototype.setSource);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getExtent',\n    ol.layer.Heatmap.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getMaxResolution',\n    ol.layer.Heatmap.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getMinResolution',\n    ol.layer.Heatmap.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getOpacity',\n    ol.layer.Heatmap.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getVisible',\n    ol.layer.Heatmap.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getZIndex',\n    ol.layer.Heatmap.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setExtent',\n    ol.layer.Heatmap.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setMaxResolution',\n    ol.layer.Heatmap.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setMinResolution',\n    ol.layer.Heatmap.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setOpacity',\n    ol.layer.Heatmap.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setVisible',\n    ol.layer.Heatmap.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setZIndex',\n    ol.layer.Heatmap.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'get',\n    ol.layer.Heatmap.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getKeys',\n    ol.layer.Heatmap.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getProperties',\n    ol.layer.Heatmap.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'set',\n    ol.layer.Heatmap.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'setProperties',\n    ol.layer.Heatmap.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'unset',\n    ol.layer.Heatmap.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'changed',\n    ol.layer.Heatmap.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'dispatchEvent',\n    ol.layer.Heatmap.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'getRevision',\n    ol.layer.Heatmap.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'on',\n    ol.layer.Heatmap.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'once',\n    ol.layer.Heatmap.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Heatmap.prototype,\n    'un',\n    ol.layer.Heatmap.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setMap',\n    ol.layer.Image.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setSource',\n    ol.layer.Image.prototype.setSource);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getExtent',\n    ol.layer.Image.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getMaxResolution',\n    ol.layer.Image.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getMinResolution',\n    ol.layer.Image.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getOpacity',\n    ol.layer.Image.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getVisible',\n    ol.layer.Image.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getZIndex',\n    ol.layer.Image.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setExtent',\n    ol.layer.Image.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setMaxResolution',\n    ol.layer.Image.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setMinResolution',\n    ol.layer.Image.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setOpacity',\n    ol.layer.Image.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setVisible',\n    ol.layer.Image.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setZIndex',\n    ol.layer.Image.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'get',\n    ol.layer.Image.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getKeys',\n    ol.layer.Image.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getProperties',\n    ol.layer.Image.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'set',\n    ol.layer.Image.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'setProperties',\n    ol.layer.Image.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'unset',\n    ol.layer.Image.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'changed',\n    ol.layer.Image.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'dispatchEvent',\n    ol.layer.Image.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'getRevision',\n    ol.layer.Image.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'on',\n    ol.layer.Image.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'once',\n    ol.layer.Image.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Image.prototype,\n    'un',\n    ol.layer.Image.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setMap',\n    ol.layer.Tile.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setSource',\n    ol.layer.Tile.prototype.setSource);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getExtent',\n    ol.layer.Tile.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getMaxResolution',\n    ol.layer.Tile.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getMinResolution',\n    ol.layer.Tile.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getOpacity',\n    ol.layer.Tile.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getVisible',\n    ol.layer.Tile.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getZIndex',\n    ol.layer.Tile.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setExtent',\n    ol.layer.Tile.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setMaxResolution',\n    ol.layer.Tile.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setMinResolution',\n    ol.layer.Tile.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setOpacity',\n    ol.layer.Tile.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setVisible',\n    ol.layer.Tile.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setZIndex',\n    ol.layer.Tile.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'get',\n    ol.layer.Tile.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getKeys',\n    ol.layer.Tile.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getProperties',\n    ol.layer.Tile.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'set',\n    ol.layer.Tile.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'setProperties',\n    ol.layer.Tile.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'unset',\n    ol.layer.Tile.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'changed',\n    ol.layer.Tile.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'dispatchEvent',\n    ol.layer.Tile.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'getRevision',\n    ol.layer.Tile.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'on',\n    ol.layer.Tile.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'once',\n    ol.layer.Tile.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.Tile.prototype,\n    'un',\n    ol.layer.Tile.prototype.un);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getStyle',\n    ol.layer.VectorTile.prototype.getStyle);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getStyleFunction',\n    ol.layer.VectorTile.prototype.getStyleFunction);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setStyle',\n    ol.layer.VectorTile.prototype.setStyle);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setMap',\n    ol.layer.VectorTile.prototype.setMap);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setSource',\n    ol.layer.VectorTile.prototype.setSource);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getExtent',\n    ol.layer.VectorTile.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getMaxResolution',\n    ol.layer.VectorTile.prototype.getMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getMinResolution',\n    ol.layer.VectorTile.prototype.getMinResolution);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getOpacity',\n    ol.layer.VectorTile.prototype.getOpacity);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getVisible',\n    ol.layer.VectorTile.prototype.getVisible);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getZIndex',\n    ol.layer.VectorTile.prototype.getZIndex);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setExtent',\n    ol.layer.VectorTile.prototype.setExtent);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setMaxResolution',\n    ol.layer.VectorTile.prototype.setMaxResolution);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setMinResolution',\n    ol.layer.VectorTile.prototype.setMinResolution);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setOpacity',\n    ol.layer.VectorTile.prototype.setOpacity);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setVisible',\n    ol.layer.VectorTile.prototype.setVisible);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setZIndex',\n    ol.layer.VectorTile.prototype.setZIndex);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'get',\n    ol.layer.VectorTile.prototype.get);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getKeys',\n    ol.layer.VectorTile.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getProperties',\n    ol.layer.VectorTile.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'set',\n    ol.layer.VectorTile.prototype.set);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'setProperties',\n    ol.layer.VectorTile.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'unset',\n    ol.layer.VectorTile.prototype.unset);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'changed',\n    ol.layer.VectorTile.prototype.changed);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'dispatchEvent',\n    ol.layer.VectorTile.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'getRevision',\n    ol.layer.VectorTile.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'on',\n    ol.layer.VectorTile.prototype.on);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'once',\n    ol.layer.VectorTile.prototype.once);\n\ngoog.exportProperty(\n    ol.layer.VectorTile.prototype,\n    'un',\n    ol.layer.VectorTile.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'get',\n    ol.interaction.Interaction.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'getKeys',\n    ol.interaction.Interaction.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'getProperties',\n    ol.interaction.Interaction.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'set',\n    ol.interaction.Interaction.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'setProperties',\n    ol.interaction.Interaction.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'unset',\n    ol.interaction.Interaction.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'changed',\n    ol.interaction.Interaction.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'dispatchEvent',\n    ol.interaction.Interaction.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'getRevision',\n    ol.interaction.Interaction.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'on',\n    ol.interaction.Interaction.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'once',\n    ol.interaction.Interaction.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Interaction.prototype,\n    'un',\n    ol.interaction.Interaction.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'getActive',\n    ol.interaction.DoubleClickZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'getMap',\n    ol.interaction.DoubleClickZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'setActive',\n    ol.interaction.DoubleClickZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'get',\n    ol.interaction.DoubleClickZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'getKeys',\n    ol.interaction.DoubleClickZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'getProperties',\n    ol.interaction.DoubleClickZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'set',\n    ol.interaction.DoubleClickZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'setProperties',\n    ol.interaction.DoubleClickZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'unset',\n    ol.interaction.DoubleClickZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'changed',\n    ol.interaction.DoubleClickZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.DoubleClickZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'getRevision',\n    ol.interaction.DoubleClickZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'on',\n    ol.interaction.DoubleClickZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'once',\n    ol.interaction.DoubleClickZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DoubleClickZoom.prototype,\n    'un',\n    ol.interaction.DoubleClickZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'getActive',\n    ol.interaction.DragAndDrop.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'getMap',\n    ol.interaction.DragAndDrop.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'setActive',\n    ol.interaction.DragAndDrop.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'get',\n    ol.interaction.DragAndDrop.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'getKeys',\n    ol.interaction.DragAndDrop.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'getProperties',\n    ol.interaction.DragAndDrop.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'set',\n    ol.interaction.DragAndDrop.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'setProperties',\n    ol.interaction.DragAndDrop.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'unset',\n    ol.interaction.DragAndDrop.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'changed',\n    ol.interaction.DragAndDrop.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'dispatchEvent',\n    ol.interaction.DragAndDrop.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'getRevision',\n    ol.interaction.DragAndDrop.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'on',\n    ol.interaction.DragAndDrop.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'once',\n    ol.interaction.DragAndDrop.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.prototype,\n    'un',\n    ol.interaction.DragAndDrop.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'type',\n    ol.interaction.DragAndDrop.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'target',\n    ol.interaction.DragAndDrop.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'preventDefault',\n    ol.interaction.DragAndDrop.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.DragAndDrop.Event.prototype,\n    'stopPropagation',\n    ol.interaction.DragAndDrop.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'getActive',\n    ol.interaction.Pointer.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'getMap',\n    ol.interaction.Pointer.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'setActive',\n    ol.interaction.Pointer.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'get',\n    ol.interaction.Pointer.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'getKeys',\n    ol.interaction.Pointer.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'getProperties',\n    ol.interaction.Pointer.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'set',\n    ol.interaction.Pointer.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'setProperties',\n    ol.interaction.Pointer.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'unset',\n    ol.interaction.Pointer.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'changed',\n    ol.interaction.Pointer.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'dispatchEvent',\n    ol.interaction.Pointer.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'getRevision',\n    ol.interaction.Pointer.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'on',\n    ol.interaction.Pointer.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'once',\n    ol.interaction.Pointer.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Pointer.prototype,\n    'un',\n    ol.interaction.Pointer.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getActive',\n    ol.interaction.DragBox.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getMap',\n    ol.interaction.DragBox.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'setActive',\n    ol.interaction.DragBox.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'get',\n    ol.interaction.DragBox.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getKeys',\n    ol.interaction.DragBox.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getProperties',\n    ol.interaction.DragBox.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'set',\n    ol.interaction.DragBox.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'setProperties',\n    ol.interaction.DragBox.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'unset',\n    ol.interaction.DragBox.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'changed',\n    ol.interaction.DragBox.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'dispatchEvent',\n    ol.interaction.DragBox.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'getRevision',\n    ol.interaction.DragBox.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'on',\n    ol.interaction.DragBox.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'once',\n    ol.interaction.DragBox.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.prototype,\n    'un',\n    ol.interaction.DragBox.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'type',\n    ol.interaction.DragBox.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'target',\n    ol.interaction.DragBox.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'preventDefault',\n    ol.interaction.DragBox.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.DragBox.Event.prototype,\n    'stopPropagation',\n    ol.interaction.DragBox.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'getActive',\n    ol.interaction.DragPan.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'getMap',\n    ol.interaction.DragPan.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'setActive',\n    ol.interaction.DragPan.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'get',\n    ol.interaction.DragPan.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'getKeys',\n    ol.interaction.DragPan.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'getProperties',\n    ol.interaction.DragPan.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'set',\n    ol.interaction.DragPan.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'setProperties',\n    ol.interaction.DragPan.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'unset',\n    ol.interaction.DragPan.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'changed',\n    ol.interaction.DragPan.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'dispatchEvent',\n    ol.interaction.DragPan.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'getRevision',\n    ol.interaction.DragPan.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'on',\n    ol.interaction.DragPan.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'once',\n    ol.interaction.DragPan.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragPan.prototype,\n    'un',\n    ol.interaction.DragPan.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'getActive',\n    ol.interaction.DragRotate.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'getMap',\n    ol.interaction.DragRotate.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'setActive',\n    ol.interaction.DragRotate.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'get',\n    ol.interaction.DragRotate.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'getKeys',\n    ol.interaction.DragRotate.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'getProperties',\n    ol.interaction.DragRotate.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'set',\n    ol.interaction.DragRotate.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'setProperties',\n    ol.interaction.DragRotate.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'unset',\n    ol.interaction.DragRotate.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'changed',\n    ol.interaction.DragRotate.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'dispatchEvent',\n    ol.interaction.DragRotate.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'getRevision',\n    ol.interaction.DragRotate.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'on',\n    ol.interaction.DragRotate.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'once',\n    ol.interaction.DragRotate.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragRotate.prototype,\n    'un',\n    ol.interaction.DragRotate.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'getActive',\n    ol.interaction.DragRotateAndZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'getMap',\n    ol.interaction.DragRotateAndZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'setActive',\n    ol.interaction.DragRotateAndZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'get',\n    ol.interaction.DragRotateAndZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'getKeys',\n    ol.interaction.DragRotateAndZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'getProperties',\n    ol.interaction.DragRotateAndZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'set',\n    ol.interaction.DragRotateAndZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'setProperties',\n    ol.interaction.DragRotateAndZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'unset',\n    ol.interaction.DragRotateAndZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'changed',\n    ol.interaction.DragRotateAndZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.DragRotateAndZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'getRevision',\n    ol.interaction.DragRotateAndZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'on',\n    ol.interaction.DragRotateAndZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'once',\n    ol.interaction.DragRotateAndZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragRotateAndZoom.prototype,\n    'un',\n    ol.interaction.DragRotateAndZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getGeometry',\n    ol.interaction.DragZoom.prototype.getGeometry);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getActive',\n    ol.interaction.DragZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getMap',\n    ol.interaction.DragZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'setActive',\n    ol.interaction.DragZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'get',\n    ol.interaction.DragZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getKeys',\n    ol.interaction.DragZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getProperties',\n    ol.interaction.DragZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'set',\n    ol.interaction.DragZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'setProperties',\n    ol.interaction.DragZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'unset',\n    ol.interaction.DragZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'changed',\n    ol.interaction.DragZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.DragZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'getRevision',\n    ol.interaction.DragZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'on',\n    ol.interaction.DragZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'once',\n    ol.interaction.DragZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.DragZoom.prototype,\n    'un',\n    ol.interaction.DragZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'getActive',\n    ol.interaction.Draw.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'getMap',\n    ol.interaction.Draw.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'setActive',\n    ol.interaction.Draw.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'get',\n    ol.interaction.Draw.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'getKeys',\n    ol.interaction.Draw.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'getProperties',\n    ol.interaction.Draw.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'set',\n    ol.interaction.Draw.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'setProperties',\n    ol.interaction.Draw.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'unset',\n    ol.interaction.Draw.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'changed',\n    ol.interaction.Draw.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'dispatchEvent',\n    ol.interaction.Draw.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'getRevision',\n    ol.interaction.Draw.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'on',\n    ol.interaction.Draw.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'once',\n    ol.interaction.Draw.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Draw.prototype,\n    'un',\n    ol.interaction.Draw.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Draw.Event.prototype,\n    'type',\n    ol.interaction.Draw.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.Draw.Event.prototype,\n    'target',\n    ol.interaction.Draw.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.Draw.Event.prototype,\n    'preventDefault',\n    ol.interaction.Draw.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.Draw.Event.prototype,\n    'stopPropagation',\n    ol.interaction.Draw.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getActive',\n    ol.interaction.Extent.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getMap',\n    ol.interaction.Extent.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'setActive',\n    ol.interaction.Extent.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'get',\n    ol.interaction.Extent.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getKeys',\n    ol.interaction.Extent.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getProperties',\n    ol.interaction.Extent.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'set',\n    ol.interaction.Extent.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'setProperties',\n    ol.interaction.Extent.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'unset',\n    ol.interaction.Extent.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'changed',\n    ol.interaction.Extent.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'dispatchEvent',\n    ol.interaction.Extent.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'getRevision',\n    ol.interaction.Extent.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'on',\n    ol.interaction.Extent.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'once',\n    ol.interaction.Extent.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Extent.prototype,\n    'un',\n    ol.interaction.Extent.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Extent.Event.prototype,\n    'type',\n    ol.interaction.Extent.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.Extent.Event.prototype,\n    'target',\n    ol.interaction.Extent.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.Extent.Event.prototype,\n    'preventDefault',\n    ol.interaction.Extent.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.Extent.Event.prototype,\n    'stopPropagation',\n    ol.interaction.Extent.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'getActive',\n    ol.interaction.KeyboardPan.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'getMap',\n    ol.interaction.KeyboardPan.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'setActive',\n    ol.interaction.KeyboardPan.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'get',\n    ol.interaction.KeyboardPan.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'getKeys',\n    ol.interaction.KeyboardPan.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'getProperties',\n    ol.interaction.KeyboardPan.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'set',\n    ol.interaction.KeyboardPan.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'setProperties',\n    ol.interaction.KeyboardPan.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'unset',\n    ol.interaction.KeyboardPan.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'changed',\n    ol.interaction.KeyboardPan.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'dispatchEvent',\n    ol.interaction.KeyboardPan.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'getRevision',\n    ol.interaction.KeyboardPan.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'on',\n    ol.interaction.KeyboardPan.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'once',\n    ol.interaction.KeyboardPan.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardPan.prototype,\n    'un',\n    ol.interaction.KeyboardPan.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'getActive',\n    ol.interaction.KeyboardZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'getMap',\n    ol.interaction.KeyboardZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'setActive',\n    ol.interaction.KeyboardZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'get',\n    ol.interaction.KeyboardZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'getKeys',\n    ol.interaction.KeyboardZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'getProperties',\n    ol.interaction.KeyboardZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'set',\n    ol.interaction.KeyboardZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'setProperties',\n    ol.interaction.KeyboardZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'unset',\n    ol.interaction.KeyboardZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'changed',\n    ol.interaction.KeyboardZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.KeyboardZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'getRevision',\n    ol.interaction.KeyboardZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'on',\n    ol.interaction.KeyboardZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'once',\n    ol.interaction.KeyboardZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.KeyboardZoom.prototype,\n    'un',\n    ol.interaction.KeyboardZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'getActive',\n    ol.interaction.Modify.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'getMap',\n    ol.interaction.Modify.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'setActive',\n    ol.interaction.Modify.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'get',\n    ol.interaction.Modify.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'getKeys',\n    ol.interaction.Modify.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'getProperties',\n    ol.interaction.Modify.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'set',\n    ol.interaction.Modify.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'setProperties',\n    ol.interaction.Modify.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'unset',\n    ol.interaction.Modify.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'changed',\n    ol.interaction.Modify.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'dispatchEvent',\n    ol.interaction.Modify.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'getRevision',\n    ol.interaction.Modify.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'on',\n    ol.interaction.Modify.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'once',\n    ol.interaction.Modify.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Modify.prototype,\n    'un',\n    ol.interaction.Modify.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'type',\n    ol.interaction.Modify.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'target',\n    ol.interaction.Modify.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'preventDefault',\n    ol.interaction.Modify.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.Modify.Event.prototype,\n    'stopPropagation',\n    ol.interaction.Modify.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'getActive',\n    ol.interaction.MouseWheelZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'getMap',\n    ol.interaction.MouseWheelZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'setActive',\n    ol.interaction.MouseWheelZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'get',\n    ol.interaction.MouseWheelZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'getKeys',\n    ol.interaction.MouseWheelZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'getProperties',\n    ol.interaction.MouseWheelZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'set',\n    ol.interaction.MouseWheelZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'setProperties',\n    ol.interaction.MouseWheelZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'unset',\n    ol.interaction.MouseWheelZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'changed',\n    ol.interaction.MouseWheelZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.MouseWheelZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'getRevision',\n    ol.interaction.MouseWheelZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'on',\n    ol.interaction.MouseWheelZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'once',\n    ol.interaction.MouseWheelZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.MouseWheelZoom.prototype,\n    'un',\n    ol.interaction.MouseWheelZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'getActive',\n    ol.interaction.PinchRotate.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'getMap',\n    ol.interaction.PinchRotate.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'setActive',\n    ol.interaction.PinchRotate.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'get',\n    ol.interaction.PinchRotate.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'getKeys',\n    ol.interaction.PinchRotate.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'getProperties',\n    ol.interaction.PinchRotate.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'set',\n    ol.interaction.PinchRotate.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'setProperties',\n    ol.interaction.PinchRotate.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'unset',\n    ol.interaction.PinchRotate.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'changed',\n    ol.interaction.PinchRotate.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'dispatchEvent',\n    ol.interaction.PinchRotate.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'getRevision',\n    ol.interaction.PinchRotate.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'on',\n    ol.interaction.PinchRotate.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'once',\n    ol.interaction.PinchRotate.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.PinchRotate.prototype,\n    'un',\n    ol.interaction.PinchRotate.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'getActive',\n    ol.interaction.PinchZoom.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'getMap',\n    ol.interaction.PinchZoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'setActive',\n    ol.interaction.PinchZoom.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'get',\n    ol.interaction.PinchZoom.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'getKeys',\n    ol.interaction.PinchZoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'getProperties',\n    ol.interaction.PinchZoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'set',\n    ol.interaction.PinchZoom.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'setProperties',\n    ol.interaction.PinchZoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'unset',\n    ol.interaction.PinchZoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'changed',\n    ol.interaction.PinchZoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'dispatchEvent',\n    ol.interaction.PinchZoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'getRevision',\n    ol.interaction.PinchZoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'on',\n    ol.interaction.PinchZoom.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'once',\n    ol.interaction.PinchZoom.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.PinchZoom.prototype,\n    'un',\n    ol.interaction.PinchZoom.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getActive',\n    ol.interaction.Select.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getMap',\n    ol.interaction.Select.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'setActive',\n    ol.interaction.Select.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'get',\n    ol.interaction.Select.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getKeys',\n    ol.interaction.Select.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getProperties',\n    ol.interaction.Select.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'set',\n    ol.interaction.Select.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'setProperties',\n    ol.interaction.Select.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'unset',\n    ol.interaction.Select.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'changed',\n    ol.interaction.Select.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'dispatchEvent',\n    ol.interaction.Select.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'getRevision',\n    ol.interaction.Select.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'on',\n    ol.interaction.Select.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'once',\n    ol.interaction.Select.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Select.prototype,\n    'un',\n    ol.interaction.Select.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'type',\n    ol.interaction.Select.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'target',\n    ol.interaction.Select.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'preventDefault',\n    ol.interaction.Select.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.Select.Event.prototype,\n    'stopPropagation',\n    ol.interaction.Select.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'getActive',\n    ol.interaction.Snap.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'getMap',\n    ol.interaction.Snap.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'setActive',\n    ol.interaction.Snap.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'get',\n    ol.interaction.Snap.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'getKeys',\n    ol.interaction.Snap.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'getProperties',\n    ol.interaction.Snap.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'set',\n    ol.interaction.Snap.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'setProperties',\n    ol.interaction.Snap.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'unset',\n    ol.interaction.Snap.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'changed',\n    ol.interaction.Snap.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'dispatchEvent',\n    ol.interaction.Snap.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'getRevision',\n    ol.interaction.Snap.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'on',\n    ol.interaction.Snap.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'once',\n    ol.interaction.Snap.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Snap.prototype,\n    'un',\n    ol.interaction.Snap.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getActive',\n    ol.interaction.Translate.prototype.getActive);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getMap',\n    ol.interaction.Translate.prototype.getMap);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'setActive',\n    ol.interaction.Translate.prototype.setActive);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'get',\n    ol.interaction.Translate.prototype.get);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getKeys',\n    ol.interaction.Translate.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getProperties',\n    ol.interaction.Translate.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'set',\n    ol.interaction.Translate.prototype.set);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'setProperties',\n    ol.interaction.Translate.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'unset',\n    ol.interaction.Translate.prototype.unset);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'changed',\n    ol.interaction.Translate.prototype.changed);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'dispatchEvent',\n    ol.interaction.Translate.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'getRevision',\n    ol.interaction.Translate.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'on',\n    ol.interaction.Translate.prototype.on);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'once',\n    ol.interaction.Translate.prototype.once);\n\ngoog.exportProperty(\n    ol.interaction.Translate.prototype,\n    'un',\n    ol.interaction.Translate.prototype.un);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'type',\n    ol.interaction.Translate.Event.prototype.type);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'target',\n    ol.interaction.Translate.Event.prototype.target);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'preventDefault',\n    ol.interaction.Translate.Event.prototype.preventDefault);\n\ngoog.exportProperty(\n    ol.interaction.Translate.Event.prototype,\n    'stopPropagation',\n    ol.interaction.Translate.Event.prototype.stopPropagation);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'get',\n    ol.geom.Geometry.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'getKeys',\n    ol.geom.Geometry.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'getProperties',\n    ol.geom.Geometry.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'set',\n    ol.geom.Geometry.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'setProperties',\n    ol.geom.Geometry.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'unset',\n    ol.geom.Geometry.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'changed',\n    ol.geom.Geometry.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'dispatchEvent',\n    ol.geom.Geometry.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'getRevision',\n    ol.geom.Geometry.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'on',\n    ol.geom.Geometry.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'once',\n    ol.geom.Geometry.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.Geometry.prototype,\n    'un',\n    ol.geom.Geometry.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getClosestPoint',\n    ol.geom.SimpleGeometry.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'intersectsCoordinate',\n    ol.geom.SimpleGeometry.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getExtent',\n    ol.geom.SimpleGeometry.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'rotate',\n    ol.geom.SimpleGeometry.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'scale',\n    ol.geom.SimpleGeometry.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'simplify',\n    ol.geom.SimpleGeometry.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'transform',\n    ol.geom.SimpleGeometry.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'get',\n    ol.geom.SimpleGeometry.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getKeys',\n    ol.geom.SimpleGeometry.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getProperties',\n    ol.geom.SimpleGeometry.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'set',\n    ol.geom.SimpleGeometry.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'setProperties',\n    ol.geom.SimpleGeometry.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'unset',\n    ol.geom.SimpleGeometry.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'changed',\n    ol.geom.SimpleGeometry.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'dispatchEvent',\n    ol.geom.SimpleGeometry.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'getRevision',\n    ol.geom.SimpleGeometry.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'on',\n    ol.geom.SimpleGeometry.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'once',\n    ol.geom.SimpleGeometry.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.SimpleGeometry.prototype,\n    'un',\n    ol.geom.SimpleGeometry.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getFirstCoordinate',\n    ol.geom.Circle.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getLastCoordinate',\n    ol.geom.Circle.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getLayout',\n    ol.geom.Circle.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'rotate',\n    ol.geom.Circle.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'scale',\n    ol.geom.Circle.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getClosestPoint',\n    ol.geom.Circle.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'intersectsCoordinate',\n    ol.geom.Circle.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getExtent',\n    ol.geom.Circle.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'simplify',\n    ol.geom.Circle.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'get',\n    ol.geom.Circle.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getKeys',\n    ol.geom.Circle.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getProperties',\n    ol.geom.Circle.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'set',\n    ol.geom.Circle.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'setProperties',\n    ol.geom.Circle.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'unset',\n    ol.geom.Circle.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'changed',\n    ol.geom.Circle.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'dispatchEvent',\n    ol.geom.Circle.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'getRevision',\n    ol.geom.Circle.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'on',\n    ol.geom.Circle.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'once',\n    ol.geom.Circle.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.Circle.prototype,\n    'un',\n    ol.geom.Circle.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getClosestPoint',\n    ol.geom.GeometryCollection.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'intersectsCoordinate',\n    ol.geom.GeometryCollection.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getExtent',\n    ol.geom.GeometryCollection.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'rotate',\n    ol.geom.GeometryCollection.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'scale',\n    ol.geom.GeometryCollection.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'simplify',\n    ol.geom.GeometryCollection.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'transform',\n    ol.geom.GeometryCollection.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'get',\n    ol.geom.GeometryCollection.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getKeys',\n    ol.geom.GeometryCollection.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getProperties',\n    ol.geom.GeometryCollection.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'set',\n    ol.geom.GeometryCollection.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'setProperties',\n    ol.geom.GeometryCollection.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'unset',\n    ol.geom.GeometryCollection.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'changed',\n    ol.geom.GeometryCollection.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'dispatchEvent',\n    ol.geom.GeometryCollection.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'getRevision',\n    ol.geom.GeometryCollection.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'on',\n    ol.geom.GeometryCollection.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'once',\n    ol.geom.GeometryCollection.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.GeometryCollection.prototype,\n    'un',\n    ol.geom.GeometryCollection.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getFirstCoordinate',\n    ol.geom.LinearRing.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getLastCoordinate',\n    ol.geom.LinearRing.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getLayout',\n    ol.geom.LinearRing.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'rotate',\n    ol.geom.LinearRing.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'scale',\n    ol.geom.LinearRing.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getClosestPoint',\n    ol.geom.LinearRing.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'intersectsCoordinate',\n    ol.geom.LinearRing.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getExtent',\n    ol.geom.LinearRing.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'simplify',\n    ol.geom.LinearRing.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'transform',\n    ol.geom.LinearRing.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'get',\n    ol.geom.LinearRing.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getKeys',\n    ol.geom.LinearRing.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getProperties',\n    ol.geom.LinearRing.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'set',\n    ol.geom.LinearRing.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'setProperties',\n    ol.geom.LinearRing.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'unset',\n    ol.geom.LinearRing.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'changed',\n    ol.geom.LinearRing.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'dispatchEvent',\n    ol.geom.LinearRing.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'getRevision',\n    ol.geom.LinearRing.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'on',\n    ol.geom.LinearRing.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'once',\n    ol.geom.LinearRing.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.LinearRing.prototype,\n    'un',\n    ol.geom.LinearRing.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getFirstCoordinate',\n    ol.geom.LineString.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getLastCoordinate',\n    ol.geom.LineString.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getLayout',\n    ol.geom.LineString.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'rotate',\n    ol.geom.LineString.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'scale',\n    ol.geom.LineString.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getClosestPoint',\n    ol.geom.LineString.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'intersectsCoordinate',\n    ol.geom.LineString.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getExtent',\n    ol.geom.LineString.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'simplify',\n    ol.geom.LineString.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'transform',\n    ol.geom.LineString.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'get',\n    ol.geom.LineString.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getKeys',\n    ol.geom.LineString.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getProperties',\n    ol.geom.LineString.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'set',\n    ol.geom.LineString.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'setProperties',\n    ol.geom.LineString.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'unset',\n    ol.geom.LineString.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'changed',\n    ol.geom.LineString.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'dispatchEvent',\n    ol.geom.LineString.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'getRevision',\n    ol.geom.LineString.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'on',\n    ol.geom.LineString.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'once',\n    ol.geom.LineString.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.LineString.prototype,\n    'un',\n    ol.geom.LineString.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getFirstCoordinate',\n    ol.geom.MultiLineString.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getLastCoordinate',\n    ol.geom.MultiLineString.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getLayout',\n    ol.geom.MultiLineString.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'rotate',\n    ol.geom.MultiLineString.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'scale',\n    ol.geom.MultiLineString.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getClosestPoint',\n    ol.geom.MultiLineString.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'intersectsCoordinate',\n    ol.geom.MultiLineString.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getExtent',\n    ol.geom.MultiLineString.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'simplify',\n    ol.geom.MultiLineString.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'transform',\n    ol.geom.MultiLineString.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'get',\n    ol.geom.MultiLineString.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getKeys',\n    ol.geom.MultiLineString.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getProperties',\n    ol.geom.MultiLineString.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'set',\n    ol.geom.MultiLineString.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'setProperties',\n    ol.geom.MultiLineString.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'unset',\n    ol.geom.MultiLineString.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'changed',\n    ol.geom.MultiLineString.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'dispatchEvent',\n    ol.geom.MultiLineString.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'getRevision',\n    ol.geom.MultiLineString.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'on',\n    ol.geom.MultiLineString.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'once',\n    ol.geom.MultiLineString.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.MultiLineString.prototype,\n    'un',\n    ol.geom.MultiLineString.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getFirstCoordinate',\n    ol.geom.MultiPoint.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getLastCoordinate',\n    ol.geom.MultiPoint.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getLayout',\n    ol.geom.MultiPoint.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'rotate',\n    ol.geom.MultiPoint.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'scale',\n    ol.geom.MultiPoint.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getClosestPoint',\n    ol.geom.MultiPoint.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'intersectsCoordinate',\n    ol.geom.MultiPoint.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getExtent',\n    ol.geom.MultiPoint.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'simplify',\n    ol.geom.MultiPoint.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'transform',\n    ol.geom.MultiPoint.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'get',\n    ol.geom.MultiPoint.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getKeys',\n    ol.geom.MultiPoint.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getProperties',\n    ol.geom.MultiPoint.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'set',\n    ol.geom.MultiPoint.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'setProperties',\n    ol.geom.MultiPoint.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'unset',\n    ol.geom.MultiPoint.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'changed',\n    ol.geom.MultiPoint.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'dispatchEvent',\n    ol.geom.MultiPoint.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'getRevision',\n    ol.geom.MultiPoint.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'on',\n    ol.geom.MultiPoint.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'once',\n    ol.geom.MultiPoint.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.MultiPoint.prototype,\n    'un',\n    ol.geom.MultiPoint.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getFirstCoordinate',\n    ol.geom.MultiPolygon.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getLastCoordinate',\n    ol.geom.MultiPolygon.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getLayout',\n    ol.geom.MultiPolygon.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'rotate',\n    ol.geom.MultiPolygon.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'scale',\n    ol.geom.MultiPolygon.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getClosestPoint',\n    ol.geom.MultiPolygon.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'intersectsCoordinate',\n    ol.geom.MultiPolygon.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getExtent',\n    ol.geom.MultiPolygon.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'simplify',\n    ol.geom.MultiPolygon.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'transform',\n    ol.geom.MultiPolygon.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'get',\n    ol.geom.MultiPolygon.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getKeys',\n    ol.geom.MultiPolygon.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getProperties',\n    ol.geom.MultiPolygon.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'set',\n    ol.geom.MultiPolygon.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'setProperties',\n    ol.geom.MultiPolygon.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'unset',\n    ol.geom.MultiPolygon.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'changed',\n    ol.geom.MultiPolygon.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'dispatchEvent',\n    ol.geom.MultiPolygon.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'getRevision',\n    ol.geom.MultiPolygon.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'on',\n    ol.geom.MultiPolygon.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'once',\n    ol.geom.MultiPolygon.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.MultiPolygon.prototype,\n    'un',\n    ol.geom.MultiPolygon.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getFirstCoordinate',\n    ol.geom.Point.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getLastCoordinate',\n    ol.geom.Point.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getLayout',\n    ol.geom.Point.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'rotate',\n    ol.geom.Point.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'scale',\n    ol.geom.Point.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getClosestPoint',\n    ol.geom.Point.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'intersectsCoordinate',\n    ol.geom.Point.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getExtent',\n    ol.geom.Point.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'simplify',\n    ol.geom.Point.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'transform',\n    ol.geom.Point.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'get',\n    ol.geom.Point.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getKeys',\n    ol.geom.Point.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getProperties',\n    ol.geom.Point.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'set',\n    ol.geom.Point.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'setProperties',\n    ol.geom.Point.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'unset',\n    ol.geom.Point.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'changed',\n    ol.geom.Point.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'dispatchEvent',\n    ol.geom.Point.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'getRevision',\n    ol.geom.Point.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'on',\n    ol.geom.Point.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'once',\n    ol.geom.Point.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.Point.prototype,\n    'un',\n    ol.geom.Point.prototype.un);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getFirstCoordinate',\n    ol.geom.Polygon.prototype.getFirstCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getLastCoordinate',\n    ol.geom.Polygon.prototype.getLastCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getLayout',\n    ol.geom.Polygon.prototype.getLayout);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'rotate',\n    ol.geom.Polygon.prototype.rotate);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'scale',\n    ol.geom.Polygon.prototype.scale);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getClosestPoint',\n    ol.geom.Polygon.prototype.getClosestPoint);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'intersectsCoordinate',\n    ol.geom.Polygon.prototype.intersectsCoordinate);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getExtent',\n    ol.geom.Polygon.prototype.getExtent);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'simplify',\n    ol.geom.Polygon.prototype.simplify);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'transform',\n    ol.geom.Polygon.prototype.transform);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'get',\n    ol.geom.Polygon.prototype.get);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getKeys',\n    ol.geom.Polygon.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getProperties',\n    ol.geom.Polygon.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'set',\n    ol.geom.Polygon.prototype.set);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'setProperties',\n    ol.geom.Polygon.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'unset',\n    ol.geom.Polygon.prototype.unset);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'changed',\n    ol.geom.Polygon.prototype.changed);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'dispatchEvent',\n    ol.geom.Polygon.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'getRevision',\n    ol.geom.Polygon.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'on',\n    ol.geom.Polygon.prototype.on);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'once',\n    ol.geom.Polygon.prototype.once);\n\ngoog.exportProperty(\n    ol.geom.Polygon.prototype,\n    'un',\n    ol.geom.Polygon.prototype.un);\n\ngoog.exportProperty(\n    ol.format.GML.prototype,\n    'readFeatures',\n    ol.format.GML.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.GML2.prototype,\n    'readFeatures',\n    ol.format.GML2.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.format.GML3.prototype,\n    'readFeatures',\n    ol.format.GML3.prototype.readFeatures);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'get',\n    ol.control.Control.prototype.get);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'getKeys',\n    ol.control.Control.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'getProperties',\n    ol.control.Control.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'set',\n    ol.control.Control.prototype.set);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'setProperties',\n    ol.control.Control.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'unset',\n    ol.control.Control.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'changed',\n    ol.control.Control.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'dispatchEvent',\n    ol.control.Control.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'getRevision',\n    ol.control.Control.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'on',\n    ol.control.Control.prototype.on);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'once',\n    ol.control.Control.prototype.once);\n\ngoog.exportProperty(\n    ol.control.Control.prototype,\n    'un',\n    ol.control.Control.prototype.un);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getMap',\n    ol.control.Attribution.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'setMap',\n    ol.control.Attribution.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'setTarget',\n    ol.control.Attribution.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'get',\n    ol.control.Attribution.prototype.get);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getKeys',\n    ol.control.Attribution.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getProperties',\n    ol.control.Attribution.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'set',\n    ol.control.Attribution.prototype.set);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'setProperties',\n    ol.control.Attribution.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'unset',\n    ol.control.Attribution.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'changed',\n    ol.control.Attribution.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'dispatchEvent',\n    ol.control.Attribution.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'getRevision',\n    ol.control.Attribution.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'on',\n    ol.control.Attribution.prototype.on);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'once',\n    ol.control.Attribution.prototype.once);\n\ngoog.exportProperty(\n    ol.control.Attribution.prototype,\n    'un',\n    ol.control.Attribution.prototype.un);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'getMap',\n    ol.control.FullScreen.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'setMap',\n    ol.control.FullScreen.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'setTarget',\n    ol.control.FullScreen.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'get',\n    ol.control.FullScreen.prototype.get);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'getKeys',\n    ol.control.FullScreen.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'getProperties',\n    ol.control.FullScreen.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'set',\n    ol.control.FullScreen.prototype.set);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'setProperties',\n    ol.control.FullScreen.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'unset',\n    ol.control.FullScreen.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'changed',\n    ol.control.FullScreen.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'dispatchEvent',\n    ol.control.FullScreen.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'getRevision',\n    ol.control.FullScreen.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'on',\n    ol.control.FullScreen.prototype.on);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'once',\n    ol.control.FullScreen.prototype.once);\n\ngoog.exportProperty(\n    ol.control.FullScreen.prototype,\n    'un',\n    ol.control.FullScreen.prototype.un);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getMap',\n    ol.control.MousePosition.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'setMap',\n    ol.control.MousePosition.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'setTarget',\n    ol.control.MousePosition.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'get',\n    ol.control.MousePosition.prototype.get);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getKeys',\n    ol.control.MousePosition.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getProperties',\n    ol.control.MousePosition.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'set',\n    ol.control.MousePosition.prototype.set);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'setProperties',\n    ol.control.MousePosition.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'unset',\n    ol.control.MousePosition.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'changed',\n    ol.control.MousePosition.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'dispatchEvent',\n    ol.control.MousePosition.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'getRevision',\n    ol.control.MousePosition.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'on',\n    ol.control.MousePosition.prototype.on);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'once',\n    ol.control.MousePosition.prototype.once);\n\ngoog.exportProperty(\n    ol.control.MousePosition.prototype,\n    'un',\n    ol.control.MousePosition.prototype.un);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getMap',\n    ol.control.OverviewMap.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'setMap',\n    ol.control.OverviewMap.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'setTarget',\n    ol.control.OverviewMap.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'get',\n    ol.control.OverviewMap.prototype.get);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getKeys',\n    ol.control.OverviewMap.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getProperties',\n    ol.control.OverviewMap.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'set',\n    ol.control.OverviewMap.prototype.set);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'setProperties',\n    ol.control.OverviewMap.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'unset',\n    ol.control.OverviewMap.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'changed',\n    ol.control.OverviewMap.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'dispatchEvent',\n    ol.control.OverviewMap.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'getRevision',\n    ol.control.OverviewMap.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'on',\n    ol.control.OverviewMap.prototype.on);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'once',\n    ol.control.OverviewMap.prototype.once);\n\ngoog.exportProperty(\n    ol.control.OverviewMap.prototype,\n    'un',\n    ol.control.OverviewMap.prototype.un);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'getMap',\n    ol.control.Rotate.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'setMap',\n    ol.control.Rotate.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'setTarget',\n    ol.control.Rotate.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'get',\n    ol.control.Rotate.prototype.get);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'getKeys',\n    ol.control.Rotate.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'getProperties',\n    ol.control.Rotate.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'set',\n    ol.control.Rotate.prototype.set);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'setProperties',\n    ol.control.Rotate.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'unset',\n    ol.control.Rotate.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'changed',\n    ol.control.Rotate.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'dispatchEvent',\n    ol.control.Rotate.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'getRevision',\n    ol.control.Rotate.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'on',\n    ol.control.Rotate.prototype.on);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'once',\n    ol.control.Rotate.prototype.once);\n\ngoog.exportProperty(\n    ol.control.Rotate.prototype,\n    'un',\n    ol.control.Rotate.prototype.un);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'getMap',\n    ol.control.ScaleLine.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'setMap',\n    ol.control.ScaleLine.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'setTarget',\n    ol.control.ScaleLine.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'get',\n    ol.control.ScaleLine.prototype.get);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'getKeys',\n    ol.control.ScaleLine.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'getProperties',\n    ol.control.ScaleLine.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'set',\n    ol.control.ScaleLine.prototype.set);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'setProperties',\n    ol.control.ScaleLine.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'unset',\n    ol.control.ScaleLine.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'changed',\n    ol.control.ScaleLine.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'dispatchEvent',\n    ol.control.ScaleLine.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'getRevision',\n    ol.control.ScaleLine.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'on',\n    ol.control.ScaleLine.prototype.on);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'once',\n    ol.control.ScaleLine.prototype.once);\n\ngoog.exportProperty(\n    ol.control.ScaleLine.prototype,\n    'un',\n    ol.control.ScaleLine.prototype.un);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'getMap',\n    ol.control.Zoom.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'setMap',\n    ol.control.Zoom.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'setTarget',\n    ol.control.Zoom.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'get',\n    ol.control.Zoom.prototype.get);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'getKeys',\n    ol.control.Zoom.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'getProperties',\n    ol.control.Zoom.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'set',\n    ol.control.Zoom.prototype.set);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'setProperties',\n    ol.control.Zoom.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'unset',\n    ol.control.Zoom.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'changed',\n    ol.control.Zoom.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'dispatchEvent',\n    ol.control.Zoom.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'getRevision',\n    ol.control.Zoom.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'on',\n    ol.control.Zoom.prototype.on);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'once',\n    ol.control.Zoom.prototype.once);\n\ngoog.exportProperty(\n    ol.control.Zoom.prototype,\n    'un',\n    ol.control.Zoom.prototype.un);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'getMap',\n    ol.control.ZoomSlider.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'setMap',\n    ol.control.ZoomSlider.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'setTarget',\n    ol.control.ZoomSlider.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'get',\n    ol.control.ZoomSlider.prototype.get);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'getKeys',\n    ol.control.ZoomSlider.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'getProperties',\n    ol.control.ZoomSlider.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'set',\n    ol.control.ZoomSlider.prototype.set);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'setProperties',\n    ol.control.ZoomSlider.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'unset',\n    ol.control.ZoomSlider.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'changed',\n    ol.control.ZoomSlider.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'dispatchEvent',\n    ol.control.ZoomSlider.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'getRevision',\n    ol.control.ZoomSlider.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'on',\n    ol.control.ZoomSlider.prototype.on);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'once',\n    ol.control.ZoomSlider.prototype.once);\n\ngoog.exportProperty(\n    ol.control.ZoomSlider.prototype,\n    'un',\n    ol.control.ZoomSlider.prototype.un);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'getMap',\n    ol.control.ZoomToExtent.prototype.getMap);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'setMap',\n    ol.control.ZoomToExtent.prototype.setMap);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'setTarget',\n    ol.control.ZoomToExtent.prototype.setTarget);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'get',\n    ol.control.ZoomToExtent.prototype.get);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'getKeys',\n    ol.control.ZoomToExtent.prototype.getKeys);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'getProperties',\n    ol.control.ZoomToExtent.prototype.getProperties);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'set',\n    ol.control.ZoomToExtent.prototype.set);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'setProperties',\n    ol.control.ZoomToExtent.prototype.setProperties);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'unset',\n    ol.control.ZoomToExtent.prototype.unset);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'changed',\n    ol.control.ZoomToExtent.prototype.changed);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'dispatchEvent',\n    ol.control.ZoomToExtent.prototype.dispatchEvent);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'getRevision',\n    ol.control.ZoomToExtent.prototype.getRevision);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'on',\n    ol.control.ZoomToExtent.prototype.on);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'once',\n    ol.control.ZoomToExtent.prototype.once);\n\ngoog.exportProperty(\n    ol.control.ZoomToExtent.prototype,\n    'un',\n    ol.control.ZoomToExtent.prototype.un);\nol.VERSION = 'v4.6.5';\nOPENLAYERS.ol = ol;\n\n  return OPENLAYERS.ol;\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/statist.js",
    "content": "//\n// Copyright (C) 2016 Uninett AS\n//\n// This file is part of Network Administration Visualized (NAV).\n//\n// NAV is free software: you can redistribute it and/or modify it under\n// the terms of the GNU General Public License version 3 as published by\n// the Free Software Foundation.\n//\n// This program is distributed in the hope that it will be useful, but WITHOUT\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n// more details.  You should have received a copy of the GNU General Public\n// License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n//\n// == STATIST, A SIMPLE FSM LIBRARY\n//\n// Simple FSM shim. It simply maps states to state maps, which in turn map\n// events to the next state. The next state might also be a function, which is\n// called (and passed any event data) and returns the next state. The state map\n// is validated upon initialization, to ensure that we never enter an undefined\n// or invalid state. It also supports listening to when a a state is entered\n// ('.on', '.once'), usually for asynchronous operations like global resets.\n// These listeners are passed any event data leading into the desired state.\n//\n// Do note that events that map to null are considered no-ops, and will not be\n// handled in any way. This is to allow for clean override.\n//\n// The purpose of this shim is to make sure somewhat more complex components\n// (typically views) always have a well-defined, verified state, which\n// simplifies business logic. It can also be used to ensure certain events have\n// been fired, without using model variables like 'hasGreetedUserOnce'.\n//\n// Example usage:\n//\n//     var fsm = new FSM({\n//       init: { activate: \"active\" }\n//       active: { reset: \"init\" }\n//     })\n//     fsm.state // => \"init\"\n//     fsm.step(\"activate\") // => \"active\"\n//     fsm.step(fsm.events.activate) // equivalent\n//     fsm.state // => \"active\"\n//     fsm.step(null) // not matched, retains \"active\" state\n//     fsm.on(\"active\", function() { console.log(\"woho\"); }) // called every time active is entered\n//     fsm.once(\"active\", function() { console.log(\"woho\"); }) // called only once\n//     fsm.setstate(\"undefined\") // throws an error\n//     fsm.setState(fsm.states.init)\n//\n// For mixins and inheritance, we offer two similar function:\n// extends(originalState, mixinOrAnotherState) and mixin(originalState,\n// mixinOrAnotherState). In the former case, any value in originalState will\n// override the one defined in the argument, e.g. it works like typical OOP\n// inheritance. With mixin(), the mixin or state we're extending from will\n// always override any values defined in originalState. Do note that these\n// operations also are validated and subject to the same requirements as\n// defining the map up front, but allows for explicit reuse of components via\n// mixins or simple parent-child inheritance.\n\ndefine(function (require, exports, module) {\n  var _ = require(\"underscore\");\n\n  var FSM = function(stateMap) {\n    var defaultMap = { INIT: {} };\n    // Maps states to event handlers (state maps), which map events to new states\n    this.fsm = defaultMap;\n    _.extend(this.fsm, stateMap);\n    // By convention, \"INIT\" is the default state and always defined\n    this.state = \"INIT\";\n    // Trigger for when a new state is entered\n    this.__onChange = [];\n    // List of all possible actions (enum-like) for each state\n    this.events = this.getEvents();\n    // Friendly list of all possible states (enum-like), probably useful\n    this.states = this.getStates();\n    // Initialize listeners\n    this.listeners = _.reduce(this.states, function(memo, state) {\n      memo[state] = [];\n      return memo;\n    }, {});\n    // Freeze fsm to avoid mutation\n    Object.freeze(this.fsm);\n    Object.freeze(this.states);\n    Object.freeze(this.events);\n    // Return validation value\n    return this.validate();\n  };\n\n  // Returns the events the FSM can respond to (enum-like)\n  FSM.prototype.getEvents = function() {\n    return _.reduce(this.fsm, function(memo, stateMap) {\n      _.each(stateMap, function(state, event) {\n        memo[event] = event;\n      });\n      return memo;\n    }, {});\n  };\n\n  // Returns a list of states the FSM can be in (enum-like)\n  FSM.prototype.getStates = function() {\n    var states = _.keys(this.fsm);\n    return _.reduce(states, function(memo, state) {\n      memo[state] = state;\n      return memo;\n    }, {});\n  };\n\n  // Validate the whole stateMap to ensure we are able to reach all possible\n  // states, and that we only reach defined states.\n  var noStateTemplate = _.template(\"FSM error: Trying to move from '<%= currentState %>' to '<%= state %>' (via <%= via %>), which is not defined\");\n  var notReachableTemplate = _.template(\"FSM warning: State '<%= state %>' cannot be reached from any other state\");\n  FSM.prototype.validate = function() {\n    var self = this;\n    // Map of each state we can reach\n    var reachable = _.reduce(_.keys(self.fsm), function(memo, state) {\n      memo[state] = state === \"INIT\" ? true : false;\n      return memo;\n    }, {});\n    _.each(self.fsm, function(stateMap, state) {\n      _.each(stateMap, function(nextState, action) {\n        // Cannot validate functions just now\n        if (_.isFunction(nextState)) {\n          return;\n        }\n        if (!_.has(self.fsm, nextState)) {\n          var s = noStateTemplate({\n            state: nextState,\n            currentState: state,\n            via: \"event '\" + action + \"'\"\n          });\n          throw new Error(s);\n        }\n        reachable[nextState] = true;\n      });\n    });\n    _.each(reachable, function(isReachable, state) {\n      if (!isReachable) {\n        var s = notReachableTemplate({ state: state });\n        console.log(s);\n      }\n    });\n    return true;\n  };\n\n  // Notify all listeners of the current state\n  FSM.prototype.notifyAll = function(eventData) {\n    var self = this;\n    var state = this.state;\n    // Return true if we want to remove the listener\n    this.listeners[state] = _.reject(self.listeners[state], function(callbackMap) {\n      callbackMap.fn(eventData);\n      return callbackMap.type === \"once\";\n    });\n  };\n\n  // Update current state to nextState and notify listeners\n  FSM.prototype.setState = function(nextState, eventData) {\n    var self = this;\n    if (_.isFunction(nextState)) {\n      nextState = nextState(eventData);\n    }\n    if (!_.has(self.fsm, nextState)) {\n      var s = noStateTemplate({ state: nextState, currentState: self.state, via: \"setState()\" });\n      throw new Error(s);\n    }\n    this.state = nextState;\n    // Call onChange callbacks\n    _.each(self.__onChange, function (callback) {\n      callback(nextState);\n    });\n    this.notifyAll(eventData);\n    return nextState;\n  };\n\n  // Make the FSM react to some event\n  FSM.prototype.step = function(event, eventData) {\n    var currentStateMap = this.fsm[this.state];\n    // Ignore events for which no next state is defined\n    if (!_.has(currentStateMap, event)) {\n      var stack = new Error().stack;\n      console.log(\"Warning: Couldn't catch event\", event, \", therefore ignoring. Current state:\", this.state, \" Stack:\", stack);\n      return this.currentState;\n    }\n    var nextState = currentStateMap[event];\n    // Events that return null should not be handled\n    if (nextState === null) {\n      return this.currentState;\n    }\n    return this.setState(nextState, eventData);\n  };\n\n  // Utility function to register functions\n  FSM.prototype.__addListener = function(desiredState, callbackMap) {\n    var self = this;\n    if (!_.has(self.listeners, desiredState)) {\n      console.log(\"Warning: Trying to listen to state\", desiredState, \", which is undefined. Ignoring.\");\n      return;\n    }\n    this.listeners[desiredState].push(callbackMap);\n  };\n\n  // Calls callback every time desiredState is entered\n  FSM.prototype.on = function(desiredState, callback) {\n    this.__addListener(desiredState, {\n      fn: callback,\n      type: \"on\"\n    });\n  };\n\n  // Calls callback *once* if desiredState is entered\n  FSM.prototype.once = function(desiredState, callback) {\n    this.__addListener(desiredState, {\n      fn: callback,\n      type: \"once\"\n    });\n  };\n\n  // Called whenever the state changes\n  FSM.prototype.onChange = function(callback) {\n    this.__onChange.push(callback);\n  };\n\n  // Make targetState inherit values from an existing state or state map. Does\n  // not override any values already defined in targetStat\n  FSM.prototype.extends = function(targetState, stateOrStateMap) {\n    this.__inherit(targetState, stateOrStateMap, false);\n  };\n\n  // Make targetState inherit values from an existing state or state map. Does\n  // override any values already defined in targetStat\n  FSM.prototype.mixin = function(targetState, stateOrStateMap) {\n    this.__inherit(targetState, stateOrStateMap, true);\n  };\n\n  // Utility function to update an existing state and either make it inherit\n  // from a statemap or be extended by it. See .mixin() and .extends()\n  var missingTemplate = _.template(\"Trying to extend existing state '<%= state %>', but it doesn't exist.\");\n  FSM.prototype.__inherit = function(toExtend, stateOrStateMap, destructiveExtend) {\n    // Check that the state we have defined is defined\n    if (!_.has(this.fsm, toExtend)) {\n      throw new Error(missingTemplate({ state: toExtend }));\n    };\n    // We're trying to inherit from another state\n    if (_.isString(stateOrStateMap)) {\n      if (!_.has(this.fsm, stateOrStateMap)) {\n        throw new Error(missingTemplate({ state: stateOrStateMap }));\n      }\n      stateOrStateMap = this.fsm[stateOrStateMap];\n    }\n    // Temporarily unfreeze FSM\n    var tmp = {};\n    _.extend(tmp, this.fsm);\n    this.fsm = tmp;\n    var originalState = this.fsm[toExtend];\n    var newState = {};\n    if (destructiveExtend) {\n      _.extend(newState, originalState, stateOrStateMap);\n    } else {\n      _.extend(newState, stateOrStateMap, originalState);\n    }\n    this.fsm[toExtend] = newState;\n    // Update public API to reflect any changes, if any\n    this.states = this.getStates();\n    this.events = this.getEvents();\n    // Refreeze\n    Object.freeze(this.fsm);\n    Object.freeze(this.states);\n    Object.freeze(this.events);\n    // Make sure we validate afterwards\n    this.validate();\n  };\n\n  module.exports = FSM;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/IPv6.js",
    "content": "/*!\n * URI.js - Mutating URLs\n * IPv6 Support\n *\n * Version: 1.18.1\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory();\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(factory);\n  } else {\n    // Browser globals (root is window)\n    root.IPv6 = factory(root);\n  }\n}(this, function (root) {\n  'use strict';\n\n  /*\n  var _in = \"fe80:0000:0000:0000:0204:61ff:fe9d:f156\";\n  var _out = IPv6.best(_in);\n  var _expected = \"fe80::204:61ff:fe9d:f156\";\n\n  console.log(_in, _out, _expected, _out === _expected);\n  */\n\n  // save current IPv6 variable, if any\n  var _IPv6 = root && root.IPv6;\n\n  function bestPresentation(address) {\n    // based on:\n    // Javascript to test an IPv6 address for proper format, and to\n    // present the \"best text representation\" according to IETF Draft RFC at\n    // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04\n    // 8 Feb 2010 Rich Brown, Dartware, LLC\n    // Please feel free to use this code as long as you provide a link to\n    // http://www.intermapper.com\n    // http://intermapper.com/support/tools/IPV6-Validator.aspx\n    // http://download.dartware.com/thirdparty/ipv6validator.js\n\n    var _address = address.toLowerCase();\n    var segments = _address.split(':');\n    var length = segments.length;\n    var total = 8;\n\n    // trim colons (:: or ::a:b:c… or …a:b:c::)\n    if (segments[0] === '' && segments[1] === '' && segments[2] === '') {\n      // must have been ::\n      // remove first two items\n      segments.shift();\n      segments.shift();\n    } else if (segments[0] === '' && segments[1] === '') {\n      // must have been ::xxxx\n      // remove the first item\n      segments.shift();\n    } else if (segments[length - 1] === '' && segments[length - 2] === '') {\n      // must have been xxxx::\n      segments.pop();\n    }\n\n    length = segments.length;\n\n    // adjust total segments for IPv4 trailer\n    if (segments[length - 1].indexOf('.') !== -1) {\n      // found a \".\" which means IPv4\n      total = 7;\n    }\n\n    // fill empty segments them with \"0000\"\n    var pos;\n    for (pos = 0; pos < length; pos++) {\n      if (segments[pos] === '') {\n        break;\n      }\n    }\n\n    if (pos < total) {\n      segments.splice(pos, 1, '0000');\n      while (segments.length < total) {\n        segments.splice(pos, 0, '0000');\n      }\n    }\n\n    // strip leading zeros\n    var _segments;\n    for (var i = 0; i < total; i++) {\n      _segments = segments[i].split('');\n      for (var j = 0; j < 3 ; j++) {\n        if (_segments[0] === '0' && _segments.length > 1) {\n          _segments.splice(0,1);\n        } else {\n          break;\n        }\n      }\n\n      segments[i] = _segments.join('');\n    }\n\n    // find longest sequence of zeroes and coalesce them into one segment\n    var best = -1;\n    var _best = 0;\n    var _current = 0;\n    var current = -1;\n    var inzeroes = false;\n    // i; already declared\n\n    for (i = 0; i < total; i++) {\n      if (inzeroes) {\n        if (segments[i] === '0') {\n          _current += 1;\n        } else {\n          inzeroes = false;\n          if (_current > _best) {\n            best = current;\n            _best = _current;\n          }\n        }\n      } else {\n        if (segments[i] === '0') {\n          inzeroes = true;\n          current = i;\n          _current = 1;\n        }\n      }\n    }\n\n    if (_current > _best) {\n      best = current;\n      _best = _current;\n    }\n\n    if (_best > 1) {\n      segments.splice(best, _best, '');\n    }\n\n    length = segments.length;\n\n    // assemble remaining segments\n    var result = '';\n    if (segments[0] === '')  {\n      result = ':';\n    }\n\n    for (i = 0; i < length; i++) {\n      result += segments[i];\n      if (i === length - 1) {\n        break;\n      }\n\n      result += ':';\n    }\n\n    if (segments[length - 1] === '') {\n      result += ':';\n    }\n\n    return result;\n  }\n\n  function noConflict() {\n    /*jshint validthis: true */\n    if (root.IPv6 === this) {\n      root.IPv6 = _IPv6;\n    }\n  \n    return this;\n  }\n\n  return {\n    best: bestPresentation,\n    noConflict: noConflict\n  };\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/SecondLevelDomains.js",
    "content": "/*!\n * URI.js - Mutating URLs\n * Second Level Domain (SLD) Support\n *\n * Version: 1.18.1\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory();\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(factory);\n  } else {\n    // Browser globals (root is window)\n    root.SecondLevelDomains = factory(root);\n  }\n}(this, function (root) {\n  'use strict';\n\n  // save current SecondLevelDomains variable, if any\n  var _SecondLevelDomains = root && root.SecondLevelDomains;\n\n  var SLD = {\n    // list of known Second Level Domains\n    // converted list of SLDs from https://github.com/gavingmiller/second-level-domains\n    // ----\n    // publicsuffix.org is more current and actually used by a couple of browsers internally.\n    // downside is it also contains domains like \"dyndns.org\" - which is fine for the security\n    // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js\n    // ----\n    list: {\n      'ac':' com gov mil net org ',\n      'ae':' ac co gov mil name net org pro sch ',\n      'af':' com edu gov net org ',\n      'al':' com edu gov mil net org ',\n      'ao':' co ed gv it og pb ',\n      'ar':' com edu gob gov int mil net org tur ',\n      'at':' ac co gv or ',\n      'au':' asn com csiro edu gov id net org ',\n      'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',\n      'bb':' biz co com edu gov info net org store tv ',\n      'bh':' biz cc com edu gov info net org ',\n      'bn':' com edu gov net org ',\n      'bo':' com edu gob gov int mil net org tv ',\n      'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',\n      'bs':' com edu gov net org ',\n      'bz':' du et om ov rg ',\n      'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',\n      'ck':' biz co edu gen gov info net org ',\n      'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',\n      'co':' com edu gov mil net nom org ',\n      'cr':' ac c co ed fi go or sa ',\n      'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',\n      'do':' art com edu gob gov mil net org sld web ',\n      'dz':' art asso com edu gov net org pol ',\n      'ec':' com edu fin gov info med mil net org pro ',\n      'eg':' com edu eun gov mil name net org sci ',\n      'er':' com edu gov ind mil net org rochest w ',\n      'es':' com edu gob nom org ',\n      'et':' biz com edu gov info name net org ',\n      'fj':' ac biz com info mil name net org pro ',\n      'fk':' ac co gov net nom org ',\n      'fr':' asso com f gouv nom prd presse tm ',\n      'gg':' co net org ',\n      'gh':' com edu gov mil org ',\n      'gn':' ac com gov net org ',\n      'gr':' com edu gov mil net org ',\n      'gt':' com edu gob ind mil net org ',\n      'gu':' com edu gov net org ',\n      'hk':' com edu gov idv net org ',\n      'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',\n      'id':' ac co go mil net or sch web ',\n      'il':' ac co gov idf k12 muni net org ',\n      'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',\n      'iq':' com edu gov i mil net org ',\n      'ir':' ac co dnssec gov i id net org sch ',\n      'it':' edu gov ',\n      'je':' co net org ',\n      'jo':' com edu gov mil name net org sch ',\n      'jp':' ac ad co ed go gr lg ne or ',\n      'ke':' ac co go info me mobi ne or sc ',\n      'kh':' com edu gov mil net org per ',\n      'ki':' biz com de edu gov info mob net org tel ',\n      'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',\n      'kn':' edu gov net org ',\n      'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',\n      'kw':' com edu gov net org ',\n      'ky':' com edu gov net org ',\n      'kz':' com edu gov mil net org ',\n      'lb':' com edu gov net org ',\n      'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',\n      'lr':' com edu gov net org ',\n      'lv':' asn com conf edu gov id mil net org ',\n      'ly':' com edu gov id med net org plc sch ',\n      'ma':' ac co gov m net org press ',\n      'mc':' asso tm ',\n      'me':' ac co edu gov its net org priv ',\n      'mg':' com edu gov mil nom org prd tm ',\n      'mk':' com edu gov inf name net org pro ',\n      'ml':' com edu gov net org presse ',\n      'mn':' edu gov org ',\n      'mo':' com edu gov net org ',\n      'mt':' com edu gov net org ',\n      'mv':' aero biz com coop edu gov info int mil museum name net org pro ',\n      'mw':' ac co com coop edu gov int museum net org ',\n      'mx':' com edu gob net org ',\n      'my':' com edu gov mil name net org sch ',\n      'nf':' arts com firm info net other per rec store web ',\n      'ng':' biz com edu gov mil mobi name net org sch ',\n      'ni':' ac co com edu gob mil net nom org ',\n      'np':' com edu gov mil net org ',\n      'nr':' biz com edu gov info net org ',\n      'om':' ac biz co com edu gov med mil museum net org pro sch ',\n      'pe':' com edu gob mil net nom org sld ',\n      'ph':' com edu gov i mil net ngo org ',\n      'pk':' biz com edu fam gob gok gon gop gos gov net org web ',\n      'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',\n      'pr':' ac biz com edu est gov info isla name net org pro prof ',\n      'ps':' com edu gov net org plo sec ',\n      'pw':' belau co ed go ne or ',\n      'ro':' arts com firm info nom nt org rec store tm www ',\n      'rs':' ac co edu gov in org ',\n      'sb':' com edu gov net org ',\n      'sc':' com edu gov net org ',\n      'sh':' co com edu gov net nom org ',\n      'sl':' com edu gov net org ',\n      'st':' co com consulado edu embaixada gov mil net org principe saotome store ',\n      'sv':' com edu gob org red ',\n      'sz':' ac co org ',\n      'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',\n      'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',\n      'tw':' club com ebiz edu game gov idv mil net org ',\n      'mu':' ac co com gov net or org ',\n      'mz':' ac co edu gov org ',\n      'na':' co com ',\n      'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',\n      'pa':' abo ac com edu gob ing med net nom org sld ',\n      'pt':' com edu gov int net nome org publ ',\n      'py':' com edu gov mil net org ',\n      'qa':' com edu gov mil net org ',\n      're':' asso com nom ',\n      'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',\n      'rw':' ac co com edu gouv gov int mil net ',\n      'sa':' com edu gov med net org pub sch ',\n      'sd':' com edu gov info med net org tv ',\n      'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',\n      'sg':' com edu gov idn net org per ',\n      'sn':' art com edu gouv org perso univ ',\n      'sy':' com edu gov mil net news org ',\n      'th':' ac co go in mi net or ',\n      'tj':' ac biz co com edu go gov info int mil name net nic org test web ',\n      'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',\n      'tz':' ac co go ne or ',\n      'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',\n      'ug':' ac co go ne or org sc ',\n      'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',\n      'us':' dni fed isa kids nsn ',\n      'uy':' com edu gub mil net org ',\n      've':' co com edu gob info mil net org web ',\n      'vi':' co com k12 net org ',\n      'vn':' ac biz com edu gov health info int name net org pro ',\n      'ye':' co com gov ltd me net org plc ',\n      'yu':' ac co edu gov org ',\n      'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',\n      'zm':' ac co com edu gov net org sch '\n    },\n    // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost\n    // in both performance and memory footprint. No initialization required.\n    // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4\n    // Following methods use lastIndexOf() rather than array.split() in order\n    // to avoid any memory allocations.\n    has: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return false;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n        return false;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return false;\n      }\n      return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;\n    },\n    is: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return false;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset >= 0) {\n        return false;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return false;\n      }\n      return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;\n    },\n    get: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return null;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n        return null;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return null;\n      }\n      if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {\n        return null;\n      }\n      return domain.slice(sldOffset+1);\n    },\n    noConflict: function(){\n      if (root.SecondLevelDomains === this) {\n        root.SecondLevelDomains = _SecondLevelDomains;\n      }\n      return this;\n    }\n  };\n\n  return SLD;\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/URI.fragmentQuery.js",
    "content": "/*\n * Extending URI.js for fragment abuse\n */\n\n// --------------------------------------------------------------------------------\n// EXAMPLE: storing application/x-www-form-urlencoded data in the fragment\n// possibly helpful for Google's hashbangs\n// see http://code.google.com/web/ajaxcrawling/\n// --------------------------------------------------------------------------------\n\n// Note: make sure this is the last file loaded!\n\n// USAGE:\n// var uri = URI(\"http://example.org/#?foo=bar\");\n// uri.fragment(true) === {foo: \"bar\"};\n// uri.fragment({bar: \"foo\"});\n// uri.toString() === \"http://example.org/#?bar=foo\";\n// uri.addFragment(\"name\", \"value\");\n// uri.toString() === \"http://example.org/#?bar=foo&name=value\";\n// uri.removeFragment(\"name\");\n// uri.toString() === \"http://example.org/#?bar=foo\";\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory(require('./URI'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['./URI'], factory);\n  } else {\n    // Browser globals (root is window)\n    factory(root.URI);\n  }\n}(this, function (URI) {\n  'use strict';\n\n  var p = URI.prototype;\n  // old fragment handler we need to wrap\n  var f = p.fragment;\n\n  // make fragmentPrefix configurable\n  URI.fragmentPrefix = '?';\n  var _parts = URI._parts;\n  URI._parts = function() {\n    var parts = _parts();\n    parts.fragmentPrefix = URI.fragmentPrefix;\n    return parts;\n  };\n  p.fragmentPrefix = function(v) {\n    this._parts.fragmentPrefix = v;\n    return this;\n  };\n\n  // add fragment(true) and fragment({key: value}) signatures\n  p.fragment = function(v, build) {\n    var prefix = this._parts.fragmentPrefix;\n    var fragment = this._parts.fragment || '';\n  \n    if (v === true) {\n      if (fragment.substring(0, prefix.length) !== prefix) {\n        return {};\n      }\n    \n      return URI.parseQuery(fragment.substring(prefix.length));\n    } else if (v !== undefined && typeof v !== 'string') {\n      this._parts.fragment = prefix + URI.buildQuery(v);\n      this.build(!build);\n      return this;\n    } else {\n      return f.call(this, v, build);\n    }\n  };\n  p.addFragment = function(name, value, build) {\n    var prefix = this._parts.fragmentPrefix;\n    var data = URI.parseQuery((this._parts.fragment || '').substring(prefix.length));\n    URI.addQuery(data, name, value);\n    this._parts.fragment = prefix + URI.buildQuery(data);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.removeFragment = function(name, value, build) {\n    var prefix = this._parts.fragmentPrefix;\n    var data = URI.parseQuery((this._parts.fragment || '').substring(prefix.length));\n    URI.removeQuery(data, name, value);\n    this._parts.fragment = prefix + URI.buildQuery(data);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.addHash = p.addFragment;\n  p.removeHash = p.removeFragment;\n\n  // extending existing object rather than defining something new\n  return URI;\n}));"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/URI.fragmentURI.js",
    "content": "/*\n * Extending URI.js for fragment abuse\n */\n\n// --------------------------------------------------------------------------------\n// EXAMPLE: storing a relative URL in the fragment (\"FragmentURI\")\n// possibly helpful when working with backbone.js or sammy.js\n// inspired by https://github.com/medialize/URI.js/pull/2\n// --------------------------------------------------------------------------------\n\n// Note: make sure this is the last file loaded!\n\n// USAGE:\n// var uri = URI(\"http://example.org/#!/foo/bar/baz.html\");\n// var furi = uri.fragment(true);\n// furi.pathname() === '/foo/bar/baz.html';\n// furi.pathname('/hello.html');\n// uri.toString() === \"http://example.org/#!/hello.html\"\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory(require('./URI'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['./URI'], factory);\n  } else {\n    // Browser globals (root is window)\n    factory(root.URI);\n  }\n}(this, function (URI) {\n  'use strict';\n\n  var p = URI.prototype;\n  // old handlers we need to wrap\n  var f = p.fragment;\n  var b = p.build;\n\n  // make fragmentPrefix configurable\n  URI.fragmentPrefix = '!';\n  var _parts = URI._parts;\n  URI._parts = function() {\n    var parts = _parts();\n    parts.fragmentPrefix = URI.fragmentPrefix;\n    return parts;\n  };\n  p.fragmentPrefix = function(v) {\n    this._parts.fragmentPrefix = v;\n    return this;\n  };\n\n  // add fragment(true) and fragment(URI) signatures  \n  p.fragment = function(v, build) {\n    var prefix = this._parts.fragmentPrefix;\n    var fragment = this._parts.fragment || '';\n    var furi;\n\n    if (v === true) {\n      if (fragment.substring(0, prefix.length) !== prefix) {\n        furi = URI('');\n      } else {\n        furi = new URI(fragment.substring(prefix.length));\n      }\n    \n      this._fragmentURI = furi;\n      furi._parentURI = this;\n      return furi;\n    } else if (v !== undefined && typeof v !== 'string') {\n      this._fragmentURI = v;\n      v._parentURI = v;\n      this._parts.fragment = prefix + v.toString();\n      this.build(!build);\n      return this;\n    } else if (typeof v === 'string') {\n      this._fragmentURI = undefined;\n    }\n\n    return f.call(this, v, build);\n  };\n\n  // make .build() of the actual URI aware of the FragmentURI\n  p.build = function(deferBuild) {\n    var t = b.call(this, deferBuild);\n  \n    if (deferBuild !== false && this._parentURI) {\n      // update the parent\n      this._parentURI.fragment(this);\n    }\n\n    return t;\n  };\n\n  // extending existing object rather than defining something new\n  return URI;\n}));"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/URI.js",
    "content": "/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.18.1\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n  } else {\n    // Browser globals (root is window)\n    root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n  }\n}(this, function (punycode, IPv6, SLD, root) {\n  'use strict';\n  /*global location, escape, unescape */\n  // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n  /*jshint camelcase: false */\n\n  // save current URI variable, if any\n  var _URI = root && root.URI;\n\n  function URI(url, base) {\n    var _urlSupplied = arguments.length >= 1;\n    var _baseSupplied = arguments.length >= 2;\n\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof URI)) {\n      if (_urlSupplied) {\n        if (_baseSupplied) {\n          return new URI(url, base);\n        }\n\n        return new URI(url);\n      }\n\n      return new URI();\n    }\n\n    if (url === undefined) {\n      if (_urlSupplied) {\n        throw new TypeError('undefined is not a valid argument for URI');\n      }\n\n      if (typeof location !== 'undefined') {\n        url = location.href + '';\n      } else {\n        url = '';\n      }\n    }\n\n    this.href(url);\n\n    // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n    if (base !== undefined) {\n      return this.absoluteTo(base);\n    }\n\n    return this;\n  }\n\n  URI.version = '1.18.1';\n\n  var p = URI.prototype;\n  var hasOwn = Object.prototype.hasOwnProperty;\n\n  function escapeRegEx(string) {\n    // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n    return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n  }\n\n  function getType(value) {\n    // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n    if (value === undefined) {\n      return 'Undefined';\n    }\n\n    return String(Object.prototype.toString.call(value)).slice(8, -1);\n  }\n\n  function isArray(obj) {\n    return getType(obj) === 'Array';\n  }\n\n  function filterArrayValues(data, value) {\n    var lookup = {};\n    var i, length;\n\n    if (getType(value) === 'RegExp') {\n      lookup = null;\n    } else if (isArray(value)) {\n      for (i = 0, length = value.length; i < length; i++) {\n        lookup[value[i]] = true;\n      }\n    } else {\n      lookup[value] = true;\n    }\n\n    for (i = 0, length = data.length; i < length; i++) {\n      /*jshint laxbreak: true */\n      var _match = lookup && lookup[data[i]] !== undefined\n        || !lookup && value.test(data[i]);\n      /*jshint laxbreak: false */\n      if (_match) {\n        data.splice(i, 1);\n        length--;\n        i--;\n      }\n    }\n\n    return data;\n  }\n\n  function arrayContains(list, value) {\n    var i, length;\n\n    // value may be string, number, array, regexp\n    if (isArray(value)) {\n      // Note: this can be optimized to O(n) (instead of current O(m * n))\n      for (i = 0, length = value.length; i < length; i++) {\n        if (!arrayContains(list, value[i])) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    var _type = getType(value);\n    for (i = 0, length = list.length; i < length; i++) {\n      if (_type === 'RegExp') {\n        if (typeof list[i] === 'string' && list[i].match(value)) {\n          return true;\n        }\n      } else if (list[i] === value) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function arraysEqual(one, two) {\n    if (!isArray(one) || !isArray(two)) {\n      return false;\n    }\n\n    // arrays can't be equal if they have different amount of content\n    if (one.length !== two.length) {\n      return false;\n    }\n\n    one.sort();\n    two.sort();\n\n    for (var i = 0, l = one.length; i < l; i++) {\n      if (one[i] !== two[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function trimSlashes(text) {\n    var trim_expression = /^\\/+|\\/+$/g;\n    return text.replace(trim_expression, '');\n  }\n\n  URI._parts = function() {\n    return {\n      protocol: null,\n      username: null,\n      password: null,\n      hostname: null,\n      urn: null,\n      port: null,\n      path: null,\n      query: null,\n      fragment: null,\n      // state\n      duplicateQueryParameters: URI.duplicateQueryParameters,\n      escapeQuerySpace: URI.escapeQuerySpace\n    };\n  };\n  // state: allow duplicate query parameters (a=1&a=1)\n  URI.duplicateQueryParameters = false;\n  // state: replaces + with %20 (space in query strings)\n  URI.escapeQuerySpace = true;\n  // static properties\n  URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n  URI.idn_expression = /[^a-z0-9\\.-]/i;\n  URI.punycode_expression = /(xn--)/i;\n  // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n  URI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n  // credits to Rich Brown\n  // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n  // specification: http://www.ietf.org/rfc/rfc4291.txt\n  URI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n  // expression used is \"gruber revised\" (@gruber v2) determined to be the\n  // best solution in a regex-golf we did a couple of ages ago at\n  // * http://mathiasbynens.be/demo/url-regex\n  // * http://rodneyrehm.de/t/url-regex.html\n  URI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n  URI.findUri = {\n    // valid \"scheme://\" or \"www.\"\n    start: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n    // everything up to the next whitespace\n    end: /[\\s\\r\\n]|$/,\n    // trim trailing punctuation captured by end RegExp\n    trim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/\n  };\n  // http://www.iana.org/assignments/uri-schemes.html\n  // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n  URI.defaultPorts = {\n    http: '80',\n    https: '443',\n    ftp: '21',\n    gopher: '70',\n    ws: '80',\n    wss: '443'\n  };\n  // allowed hostname characters according to RFC 3986\n  // ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n  // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . -\n  URI.invalid_hostname_characters = /[^a-zA-Z0-9\\.-]/;\n  // map DOM Elements to their URI attribute\n  URI.domAttributes = {\n    'a': 'href',\n    'blockquote': 'cite',\n    'link': 'href',\n    'base': 'href',\n    'script': 'src',\n    'form': 'action',\n    'img': 'src',\n    'area': 'href',\n    'iframe': 'src',\n    'embed': 'src',\n    'source': 'src',\n    'track': 'src',\n    'input': 'src', // but only if type=\"image\"\n    'audio': 'src',\n    'video': 'src'\n  };\n  URI.getDomAttribute = function(node) {\n    if (!node || !node.nodeName) {\n      return undefined;\n    }\n\n    var nodeName = node.nodeName.toLowerCase();\n    // <input> should only expose src for type=\"image\"\n    if (nodeName === 'input' && node.type !== 'image') {\n      return undefined;\n    }\n\n    return URI.domAttributes[nodeName];\n  };\n\n  function escapeForDumbFirefox36(value) {\n    // https://github.com/medialize/URI.js/issues/91\n    return escape(value);\n  }\n\n  // encoding / decoding according to RFC3986\n  function strictEncodeURIComponent(string) {\n    // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n    return encodeURIComponent(string)\n      .replace(/[!'()*]/g, escapeForDumbFirefox36)\n      .replace(/\\*/g, '%2A');\n  }\n  URI.encode = strictEncodeURIComponent;\n  URI.decode = decodeURIComponent;\n  URI.iso8859 = function() {\n    URI.encode = escape;\n    URI.decode = unescape;\n  };\n  URI.unicode = function() {\n    URI.encode = strictEncodeURIComponent;\n    URI.decode = decodeURIComponent;\n  };\n  URI.characters = {\n    pathname: {\n      encode: {\n        // RFC3986 2.1: For consistency, URI producers and normalizers should\n        // use uppercase hexadecimal digits for all percent-encodings.\n        expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n        map: {\n          // -._~!'()*\n          '%24': '$',\n          '%26': '&',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '=',\n          '%3A': ':',\n          '%40': '@'\n        }\n      },\n      decode: {\n        expression: /[\\/\\?#]/g,\n        map: {\n          '/': '%2F',\n          '?': '%3F',\n          '#': '%23'\n        }\n      }\n    },\n    reserved: {\n      encode: {\n        // RFC3986 2.1: For consistency, URI producers and normalizers should\n        // use uppercase hexadecimal digits for all percent-encodings.\n        expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n        map: {\n          // gen-delims\n          '%3A': ':',\n          '%2F': '/',\n          '%3F': '?',\n          '%23': '#',\n          '%5B': '[',\n          '%5D': ']',\n          '%40': '@',\n          // sub-delims\n          '%21': '!',\n          '%24': '$',\n          '%26': '&',\n          '%27': '\\'',\n          '%28': '(',\n          '%29': ')',\n          '%2A': '*',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '='\n        }\n      }\n    },\n    urnpath: {\n      // The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n      // for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n      // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n      // note that the colon character is not featured in the encoding map; this is because URI.js\n      // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n      // should not appear unencoded in a segment itself.\n      // See also the note above about RFC3986 and capitalalized hex digits.\n      encode: {\n        expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n        map: {\n          '%21': '!',\n          '%24': '$',\n          '%27': '\\'',\n          '%28': '(',\n          '%29': ')',\n          '%2A': '*',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '=',\n          '%40': '@'\n        }\n      },\n      // These characters are the characters called out by RFC2141 as \"reserved\" characters that\n      // should never appear in a URN, plus the colon character (see note above).\n      decode: {\n        expression: /[\\/\\?#:]/g,\n        map: {\n          '/': '%2F',\n          '?': '%3F',\n          '#': '%23',\n          ':': '%3A'\n        }\n      }\n    }\n  };\n  URI.encodeQuery = function(string, escapeQuerySpace) {\n    var escaped = URI.encode(string + '');\n    if (escapeQuerySpace === undefined) {\n      escapeQuerySpace = URI.escapeQuerySpace;\n    }\n\n    return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n  };\n  URI.decodeQuery = function(string, escapeQuerySpace) {\n    string += '';\n    if (escapeQuerySpace === undefined) {\n      escapeQuerySpace = URI.escapeQuerySpace;\n    }\n\n    try {\n      return URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n    } catch(e) {\n      // we're not going to mess with weird encodings,\n      // give up and return the undecoded original string\n      // see https://github.com/medialize/URI.js/issues/87\n      // see https://github.com/medialize/URI.js/issues/92\n      return string;\n    }\n  };\n  // generate encode/decode path functions\n  var _parts = {'encode':'encode', 'decode':'decode'};\n  var _part;\n  var generateAccessor = function(_group, _part) {\n    return function(string) {\n      try {\n        return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n          return URI.characters[_group][_part].map[c];\n        });\n      } catch (e) {\n        // we're not going to mess with weird encodings,\n        // give up and return the undecoded original string\n        // see https://github.com/medialize/URI.js/issues/87\n        // see https://github.com/medialize/URI.js/issues/92\n        return string;\n      }\n    };\n  };\n\n  for (_part in _parts) {\n    URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n    URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n  }\n\n  var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n    return function(string) {\n      // Why pass in names of functions, rather than the function objects themselves? The\n      // definitions of some functions (but in particular, URI.decode) will occasionally change due\n      // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n      // that the functions we use here are \"fresh\".\n      var actualCodingFunc;\n      if (!_innerCodingFuncName) {\n        actualCodingFunc = URI[_codingFuncName];\n      } else {\n        actualCodingFunc = function(string) {\n          return URI[_codingFuncName](URI[_innerCodingFuncName](string));\n        };\n      }\n\n      var segments = (string + '').split(_sep);\n\n      for (var i = 0, length = segments.length; i < length; i++) {\n        segments[i] = actualCodingFunc(segments[i]);\n      }\n\n      return segments.join(_sep);\n    };\n  };\n\n  // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n  URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n  URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n  URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n  URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n  URI.encodeReserved = generateAccessor('reserved', 'encode');\n\n  URI.parse = function(string, parts) {\n    var pos;\n    if (!parts) {\n      parts = {};\n    }\n    // [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n    // extract fragment\n    pos = string.indexOf('#');\n    if (pos > -1) {\n      // escaping?\n      parts.fragment = string.substring(pos + 1) || null;\n      string = string.substring(0, pos);\n    }\n\n    // extract query\n    pos = string.indexOf('?');\n    if (pos > -1) {\n      // escaping?\n      parts.query = string.substring(pos + 1) || null;\n      string = string.substring(0, pos);\n    }\n\n    // extract protocol\n    if (string.substring(0, 2) === '//') {\n      // relative-scheme\n      parts.protocol = null;\n      string = string.substring(2);\n      // extract \"user:pass@host:port\"\n      string = URI.parseAuthority(string, parts);\n    } else {\n      pos = string.indexOf(':');\n      if (pos > -1) {\n        parts.protocol = string.substring(0, pos) || null;\n        if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n          // : may be within the path\n          parts.protocol = undefined;\n        } else if (string.substring(pos + 1, pos + 3) === '//') {\n          string = string.substring(pos + 3);\n\n          // extract \"user:pass@host:port\"\n          string = URI.parseAuthority(string, parts);\n        } else {\n          string = string.substring(pos + 1);\n          parts.urn = true;\n        }\n      }\n    }\n\n    // what's left must be the path\n    parts.path = string;\n\n    // and we're done\n    return parts;\n  };\n  URI.parseHost = function(string, parts) {\n    // Copy chrome, IE, opera backslash-handling behavior.\n    // Back slashes before the query string get converted to forward slashes\n    // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n    // See: https://code.google.com/p/chromium/issues/detail?id=25916\n    // https://github.com/medialize/URI.js/pull/233\n    string = string.replace(/\\\\/g, '/');\n\n    // extract host:port\n    var pos = string.indexOf('/');\n    var bracketPos;\n    var t;\n\n    if (pos === -1) {\n      pos = string.length;\n    }\n\n    if (string.charAt(0) === '[') {\n      // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n      // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n      // IPv6+port in the format [2001:db8::1]:80 (for the time being)\n      bracketPos = string.indexOf(']');\n      parts.hostname = string.substring(1, bracketPos) || null;\n      parts.port = string.substring(bracketPos + 2, pos) || null;\n      if (parts.port === '/') {\n        parts.port = null;\n      }\n    } else {\n      var firstColon = string.indexOf(':');\n      var firstSlash = string.indexOf('/');\n      var nextColon = string.indexOf(':', firstColon + 1);\n      if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n        // IPv6 host contains multiple colons - but no port\n        // this notation is actually not allowed by RFC 3986, but we're a liberal parser\n        parts.hostname = string.substring(0, pos) || null;\n        parts.port = null;\n      } else {\n        t = string.substring(0, pos).split(':');\n        parts.hostname = t[0] || null;\n        parts.port = t[1] || null;\n      }\n    }\n\n    if (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n      pos++;\n      string = '/' + string;\n    }\n\n    return string.substring(pos) || '/';\n  };\n  URI.parseAuthority = function(string, parts) {\n    string = URI.parseUserinfo(string, parts);\n    return URI.parseHost(string, parts);\n  };\n  URI.parseUserinfo = function(string, parts) {\n    // extract username:password\n    var firstSlash = string.indexOf('/');\n    var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n    var t;\n\n    // authority@ must come before /path\n    if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n      t = string.substring(0, pos).split(':');\n      parts.username = t[0] ? URI.decode(t[0]) : null;\n      t.shift();\n      parts.password = t[0] ? URI.decode(t.join(':')) : null;\n      string = string.substring(pos + 1);\n    } else {\n      parts.username = null;\n      parts.password = null;\n    }\n\n    return string;\n  };\n  URI.parseQuery = function(string, escapeQuerySpace) {\n    if (!string) {\n      return {};\n    }\n\n    // throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n    string = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n    if (!string) {\n      return {};\n    }\n\n    var items = {};\n    var splits = string.split('&');\n    var length = splits.length;\n    var v, name, value;\n\n    for (var i = 0; i < length; i++) {\n      v = splits[i].split('=');\n      name = URI.decodeQuery(v.shift(), escapeQuerySpace);\n      // no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n      value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n      if (hasOwn.call(items, name)) {\n        if (typeof items[name] === 'string' || items[name] === null) {\n          items[name] = [items[name]];\n        }\n\n        items[name].push(value);\n      } else {\n        items[name] = value;\n      }\n    }\n\n    return items;\n  };\n\n  URI.build = function(parts) {\n    var t = '';\n\n    if (parts.protocol) {\n      t += parts.protocol + ':';\n    }\n\n    if (!parts.urn && (t || parts.hostname)) {\n      t += '//';\n    }\n\n    t += (URI.buildAuthority(parts) || '');\n\n    if (typeof parts.path === 'string') {\n      if (parts.path.charAt(0) !== '/' && typeof parts.hostname === 'string') {\n        t += '/';\n      }\n\n      t += parts.path;\n    }\n\n    if (typeof parts.query === 'string' && parts.query) {\n      t += '?' + parts.query;\n    }\n\n    if (typeof parts.fragment === 'string' && parts.fragment) {\n      t += '#' + parts.fragment;\n    }\n    return t;\n  };\n  URI.buildHost = function(parts) {\n    var t = '';\n\n    if (!parts.hostname) {\n      return '';\n    } else if (URI.ip6_expression.test(parts.hostname)) {\n      t += '[' + parts.hostname + ']';\n    } else {\n      t += parts.hostname;\n    }\n\n    if (parts.port) {\n      t += ':' + parts.port;\n    }\n\n    return t;\n  };\n  URI.buildAuthority = function(parts) {\n    return URI.buildUserinfo(parts) + URI.buildHost(parts);\n  };\n  URI.buildUserinfo = function(parts) {\n    var t = '';\n\n    if (parts.username) {\n      t += URI.encode(parts.username);\n    }\n\n    if (parts.password) {\n      t += ':' + URI.encode(parts.password);\n    }\n\n    if (t) {\n      t += '@';\n    }\n\n    return t;\n  };\n  URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n    // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n    // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n    // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n    // URI.js treats the query string as being application/x-www-form-urlencoded\n    // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n    var t = '';\n    var unique, key, i, length;\n    for (key in data) {\n      if (hasOwn.call(data, key) && key) {\n        if (isArray(data[key])) {\n          unique = {};\n          for (i = 0, length = data[key].length; i < length; i++) {\n            if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n              t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n              if (duplicateQueryParameters !== true) {\n                unique[data[key][i] + ''] = true;\n              }\n            }\n          }\n        } else if (data[key] !== undefined) {\n          t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n        }\n      }\n    }\n\n    return t.substring(1);\n  };\n  URI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n    // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n    // don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n    return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n  };\n\n  URI.addQuery = function(data, name, value) {\n    if (typeof name === 'object') {\n      for (var key in name) {\n        if (hasOwn.call(name, key)) {\n          URI.addQuery(data, key, name[key]);\n        }\n      }\n    } else if (typeof name === 'string') {\n      if (data[name] === undefined) {\n        data[name] = value;\n        return;\n      } else if (typeof data[name] === 'string') {\n        data[name] = [data[name]];\n      }\n\n      if (!isArray(value)) {\n        value = [value];\n      }\n\n      data[name] = (data[name] || []).concat(value);\n    } else {\n      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n    }\n  };\n  URI.removeQuery = function(data, name, value) {\n    var i, length, key;\n\n    if (isArray(name)) {\n      for (i = 0, length = name.length; i < length; i++) {\n        data[name[i]] = undefined;\n      }\n    } else if (getType(name) === 'RegExp') {\n      for (key in data) {\n        if (name.test(key)) {\n          data[key] = undefined;\n        }\n      }\n    } else if (typeof name === 'object') {\n      for (key in name) {\n        if (hasOwn.call(name, key)) {\n          URI.removeQuery(data, key, name[key]);\n        }\n      }\n    } else if (typeof name === 'string') {\n      if (value !== undefined) {\n        if (getType(value) === 'RegExp') {\n          if (!isArray(data[name]) && value.test(data[name])) {\n            data[name] = undefined;\n          } else {\n            data[name] = filterArrayValues(data[name], value);\n          }\n        } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n          data[name] = undefined;\n        } else if (isArray(data[name])) {\n          data[name] = filterArrayValues(data[name], value);\n        }\n      } else {\n        data[name] = undefined;\n      }\n    } else {\n      throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n    }\n  };\n  URI.hasQuery = function(data, name, value, withinArray) {\n    switch (getType(name)) {\n      case 'String':\n        // Nothing to do here\n        break;\n\n      case 'RegExp':\n        for (var key in data) {\n          if (hasOwn.call(data, key)) {\n            if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n\n      case 'Object':\n        for (var _key in name) {\n          if (hasOwn.call(name, _key)) {\n            if (!URI.hasQuery(data, _key, name[_key])) {\n              return false;\n            }\n          }\n        }\n\n        return true;\n\n      default:\n        throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');\n    }\n\n    switch (getType(value)) {\n      case 'Undefined':\n        // true if exists (but may be empty)\n        return name in data; // data[name] !== undefined;\n\n      case 'Boolean':\n        // true if exists and non-empty\n        var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n        return value === _booly;\n\n      case 'Function':\n        // allow complex comparison\n        return !!value(data[name], name, data);\n\n      case 'Array':\n        if (!isArray(data[name])) {\n          return false;\n        }\n\n        var op = withinArray ? arrayContains : arraysEqual;\n        return op(data[name], value);\n\n      case 'RegExp':\n        if (!isArray(data[name])) {\n          return Boolean(data[name] && data[name].match(value));\n        }\n\n        if (!withinArray) {\n          return false;\n        }\n\n        return arrayContains(data[name], value);\n\n      case 'Number':\n        value = String(value);\n        /* falls through */\n      case 'String':\n        if (!isArray(data[name])) {\n          return data[name] === value;\n        }\n\n        if (!withinArray) {\n          return false;\n        }\n\n        return arrayContains(data[name], value);\n\n      default:\n        throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n    }\n  };\n\n\n  URI.joinPaths = function() {\n    var input = [];\n    var segments = [];\n    var nonEmptySegments = 0;\n\n    for (var i = 0; i < arguments.length; i++) {\n      var url = new URI(arguments[i]);\n      input.push(url);\n      var _segments = url.segment();\n      for (var s = 0; s < _segments.length; s++) {\n        if (typeof _segments[s] === 'string') {\n          segments.push(_segments[s]);\n        }\n\n        if (_segments[s]) {\n          nonEmptySegments++;\n        }\n      }\n    }\n\n    if (!segments.length || !nonEmptySegments) {\n      return new URI('');\n    }\n\n    var uri = new URI('').segment(segments);\n\n    if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {\n      uri.path('/' + uri.path());\n    }\n\n    return uri.normalize();\n  };\n\n  URI.commonPath = function(one, two) {\n    var length = Math.min(one.length, two.length);\n    var pos;\n\n    // find first non-matching character\n    for (pos = 0; pos < length; pos++) {\n      if (one.charAt(pos) !== two.charAt(pos)) {\n        pos--;\n        break;\n      }\n    }\n\n    if (pos < 1) {\n      return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n    }\n\n    // revert to last /\n    if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n      pos = one.substring(0, pos).lastIndexOf('/');\n    }\n\n    return one.substring(0, pos + 1);\n  };\n\n  URI.withinString = function(string, callback, options) {\n    options || (options = {});\n    var _start = options.start || URI.findUri.start;\n    var _end = options.end || URI.findUri.end;\n    var _trim = options.trim || URI.findUri.trim;\n    var _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n    _start.lastIndex = 0;\n    while (true) {\n      var match = _start.exec(string);\n      if (!match) {\n        break;\n      }\n\n      var start = match.index;\n      if (options.ignoreHtml) {\n        // attribut(e=[\"']?$)\n        var attributeOpen = string.slice(Math.max(start - 3, 0), start);\n        if (attributeOpen && _attributeOpen.test(attributeOpen)) {\n          continue;\n        }\n      }\n\n      var end = start + string.slice(start).search(_end);\n      var slice = string.slice(start, end).replace(_trim, '');\n      if (options.ignore && options.ignore.test(slice)) {\n        continue;\n      }\n\n      end = start + slice.length;\n      var result = callback(slice, start, end, string);\n      string = string.slice(0, start) + result + string.slice(end);\n      _start.lastIndex = start + result.length;\n    }\n\n    _start.lastIndex = 0;\n    return string;\n  };\n\n  URI.ensureValidHostname = function(v) {\n    // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n    // they are not part of DNS and therefore ignored by URI.js\n\n    if (v.match(URI.invalid_hostname_characters)) {\n      // test punycode\n      if (!punycode) {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-] and Punycode.js is not available');\n      }\n\n      if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n    }\n  };\n\n  // noConflict\n  URI.noConflict = function(removeAll) {\n    if (removeAll) {\n      var unconflicted = {\n        URI: this.noConflict()\n      };\n\n      if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n        unconflicted.URITemplate = root.URITemplate.noConflict();\n      }\n\n      if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n        unconflicted.IPv6 = root.IPv6.noConflict();\n      }\n\n      if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n        unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n      }\n\n      return unconflicted;\n    } else if (root.URI === this) {\n      root.URI = _URI;\n    }\n\n    return this;\n  };\n\n  p.build = function(deferBuild) {\n    if (deferBuild === true) {\n      this._deferred_build = true;\n    } else if (deferBuild === undefined || this._deferred_build) {\n      this._string = URI.build(this._parts);\n      this._deferred_build = false;\n    }\n\n    return this;\n  };\n\n  p.clone = function() {\n    return new URI(this);\n  };\n\n  p.valueOf = p.toString = function() {\n    return this.build(false)._string;\n  };\n\n\n  function generateSimpleAccessor(_part){\n    return function(v, build) {\n      if (v === undefined) {\n        return this._parts[_part] || '';\n      } else {\n        this._parts[_part] = v || null;\n        this.build(!build);\n        return this;\n      }\n    };\n  }\n\n  function generatePrefixAccessor(_part, _key){\n    return function(v, build) {\n      if (v === undefined) {\n        return this._parts[_part] || '';\n      } else {\n        if (v !== null) {\n          v = v + '';\n          if (v.charAt(0) === _key) {\n            v = v.substring(1);\n          }\n        }\n\n        this._parts[_part] = v;\n        this.build(!build);\n        return this;\n      }\n    };\n  }\n\n  p.protocol = generateSimpleAccessor('protocol');\n  p.username = generateSimpleAccessor('username');\n  p.password = generateSimpleAccessor('password');\n  p.hostname = generateSimpleAccessor('hostname');\n  p.port = generateSimpleAccessor('port');\n  p.query = generatePrefixAccessor('query', '?');\n  p.fragment = generatePrefixAccessor('fragment', '#');\n\n  p.search = function(v, build) {\n    var t = this.query(v, build);\n    return typeof t === 'string' && t.length ? ('?' + t) : t;\n  };\n  p.hash = function(v, build) {\n    var t = this.fragment(v, build);\n    return typeof t === 'string' && t.length ? ('#' + t) : t;\n  };\n\n  p.pathname = function(v, build) {\n    if (v === undefined || v === true) {\n      var res = this._parts.path || (this._parts.hostname ? '/' : '');\n      return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n    } else {\n      if (this._parts.urn) {\n        this._parts.path = v ? URI.recodeUrnPath(v) : '';\n      } else {\n        this._parts.path = v ? URI.recodePath(v) : '/';\n      }\n      this.build(!build);\n      return this;\n    }\n  };\n  p.path = p.pathname;\n  p.href = function(href, build) {\n    var key;\n\n    if (href === undefined) {\n      return this.toString();\n    }\n\n    this._string = '';\n    this._parts = URI._parts();\n\n    var _URI = href instanceof URI;\n    var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n    if (href.nodeName) {\n      var attribute = URI.getDomAttribute(href);\n      href = href[attribute] || '';\n      _object = false;\n    }\n\n    // window.location is reported to be an object, but it's not the sort\n    // of object we're looking for:\n    // * location.protocol ends with a colon\n    // * location.query != object.search\n    // * location.hash != object.fragment\n    // simply serializing the unknown object should do the trick\n    // (for location, not for everything...)\n    if (!_URI && _object && href.pathname !== undefined) {\n      href = href.toString();\n    }\n\n    if (typeof href === 'string' || href instanceof String) {\n      this._parts = URI.parse(String(href), this._parts);\n    } else if (_URI || _object) {\n      var src = _URI ? href._parts : href;\n      for (key in src) {\n        if (hasOwn.call(this._parts, key)) {\n          this._parts[key] = src[key];\n        }\n      }\n    } else {\n      throw new TypeError('invalid input');\n    }\n\n    this.build(!build);\n    return this;\n  };\n\n  // identification accessors\n  p.is = function(what) {\n    var ip = false;\n    var ip4 = false;\n    var ip6 = false;\n    var name = false;\n    var sld = false;\n    var idn = false;\n    var punycode = false;\n    var relative = !this._parts.urn;\n\n    if (this._parts.hostname) {\n      relative = false;\n      ip4 = URI.ip4_expression.test(this._parts.hostname);\n      ip6 = URI.ip6_expression.test(this._parts.hostname);\n      ip = ip4 || ip6;\n      name = !ip;\n      sld = name && SLD && SLD.has(this._parts.hostname);\n      idn = name && URI.idn_expression.test(this._parts.hostname);\n      punycode = name && URI.punycode_expression.test(this._parts.hostname);\n    }\n\n    switch (what.toLowerCase()) {\n      case 'relative':\n        return relative;\n\n      case 'absolute':\n        return !relative;\n\n      // hostname identification\n      case 'domain':\n      case 'name':\n        return name;\n\n      case 'sld':\n        return sld;\n\n      case 'ip':\n        return ip;\n\n      case 'ip4':\n      case 'ipv4':\n      case 'inet4':\n        return ip4;\n\n      case 'ip6':\n      case 'ipv6':\n      case 'inet6':\n        return ip6;\n\n      case 'idn':\n        return idn;\n\n      case 'url':\n        return !this._parts.urn;\n\n      case 'urn':\n        return !!this._parts.urn;\n\n      case 'punycode':\n        return punycode;\n    }\n\n    return null;\n  };\n\n  // component specific input validation\n  var _protocol = p.protocol;\n  var _port = p.port;\n  var _hostname = p.hostname;\n\n  p.protocol = function(v, build) {\n    if (v !== undefined) {\n      if (v) {\n        // accept trailing ://\n        v = v.replace(/:(\\/\\/)?$/, '');\n\n        if (!v.match(URI.protocol_expression)) {\n          throw new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n        }\n      }\n    }\n    return _protocol.call(this, v, build);\n  };\n  p.scheme = p.protocol;\n  p.port = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v !== undefined) {\n      if (v === 0) {\n        v = null;\n      }\n\n      if (v) {\n        v += '';\n        if (v.charAt(0) === ':') {\n          v = v.substring(1);\n        }\n\n        if (v.match(/[^0-9]/)) {\n          throw new TypeError('Port \"' + v + '\" contains characters other than [0-9]');\n        }\n      }\n    }\n    return _port.call(this, v, build);\n  };\n  p.hostname = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v !== undefined) {\n      var x = {};\n      var res = URI.parseHost(v, x);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      v = x.hostname;\n    }\n    return _hostname.call(this, v, build);\n  };\n\n  // compound accessors\n  p.origin = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      var protocol = this.protocol();\n      var authority = this.authority();\n      if (!authority) {\n        return '';\n      }\n\n      return (protocol ? protocol + '://' : '') + this.authority();\n    } else {\n      var origin = URI(v);\n      this\n        .protocol(origin.protocol())\n        .authority(origin.authority())\n        .build(!build);\n      return this;\n    }\n  };\n  p.host = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      return this._parts.hostname ? URI.buildHost(this._parts) : '';\n    } else {\n      var res = URI.parseHost(v, this._parts);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.authority = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      return this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n    } else {\n      var res = URI.parseAuthority(v, this._parts);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.userinfo = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      var t = URI.buildUserinfo(this._parts);\n      return t ? t.substring(0, t.length -1) : t;\n    } else {\n      if (v[v.length-1] !== '@') {\n        v += '@';\n      }\n\n      URI.parseUserinfo(v, this._parts);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.resource = function(v, build) {\n    var parts;\n\n    if (v === undefined) {\n      return this.path() + this.search() + this.hash();\n    }\n\n    parts = URI.parse(v);\n    this._parts.path = parts.path;\n    this._parts.query = parts.query;\n    this._parts.fragment = parts.fragment;\n    this.build(!build);\n    return this;\n  };\n\n  // fraction accessors\n  p.subdomain = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    // convenience, return \"www\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      // grab domain and add another segment\n      var end = this._parts.hostname.length - this.domain().length - 1;\n      return this._parts.hostname.substring(0, end) || '';\n    } else {\n      var e = this._parts.hostname.length - this.domain().length;\n      var sub = this._parts.hostname.substring(0, e);\n      var replace = new RegExp('^' + escapeRegEx(sub));\n\n      if (v && v.charAt(v.length - 1) !== '.') {\n        v += '.';\n      }\n\n      if (v) {\n        URI.ensureValidHostname(v);\n      }\n\n      this._parts.hostname = this._parts.hostname.replace(replace, v);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.domain = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (typeof v === 'boolean') {\n      build = v;\n      v = undefined;\n    }\n\n    // convenience, return \"example.org\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      // if hostname consists of 1 or 2 segments, it must be the domain\n      var t = this._parts.hostname.match(/\\./g);\n      if (t && t.length < 2) {\n        return this._parts.hostname;\n      }\n\n      // grab tld and add another segment\n      var end = this._parts.hostname.length - this.tld(build).length - 1;\n      end = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n      return this._parts.hostname.substring(end) || '';\n    } else {\n      if (!v) {\n        throw new TypeError('cannot set domain empty');\n      }\n\n      URI.ensureValidHostname(v);\n\n      if (!this._parts.hostname || this.is('IP')) {\n        this._parts.hostname = v;\n      } else {\n        var replace = new RegExp(escapeRegEx(this.domain()) + '$');\n        this._parts.hostname = this._parts.hostname.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.tld = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (typeof v === 'boolean') {\n      build = v;\n      v = undefined;\n    }\n\n    // return \"org\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      var pos = this._parts.hostname.lastIndexOf('.');\n      var tld = this._parts.hostname.substring(pos + 1);\n\n      if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n        return SLD.get(this._parts.hostname) || tld;\n      }\n\n      return tld;\n    } else {\n      var replace;\n\n      if (!v) {\n        throw new TypeError('cannot set TLD empty');\n      } else if (v.match(/[^a-zA-Z0-9-]/)) {\n        if (SLD && SLD.is(v)) {\n          replace = new RegExp(escapeRegEx(this.tld()) + '$');\n          this._parts.hostname = this._parts.hostname.replace(replace, v);\n        } else {\n          throw new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n        }\n      } else if (!this._parts.hostname || this.is('IP')) {\n        throw new ReferenceError('cannot set TLD on non-domain host');\n      } else {\n        replace = new RegExp(escapeRegEx(this.tld()) + '$');\n        this._parts.hostname = this._parts.hostname.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.directory = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined || v === true) {\n      if (!this._parts.path && !this._parts.hostname) {\n        return '';\n      }\n\n      if (this._parts.path === '/') {\n        return '/';\n      }\n\n      var end = this._parts.path.length - this.filename().length - 1;\n      var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n      return v ? URI.decodePath(res) : res;\n\n    } else {\n      var e = this._parts.path.length - this.filename().length;\n      var directory = this._parts.path.substring(0, e);\n      var replace = new RegExp('^' + escapeRegEx(directory));\n\n      // fully qualifier directories begin with a slash\n      if (!this.is('relative')) {\n        if (!v) {\n          v = '/';\n        }\n\n        if (v.charAt(0) !== '/') {\n          v = '/' + v;\n        }\n      }\n\n      // directories always end with a slash\n      if (v && v.charAt(v.length - 1) !== '/') {\n        v += '/';\n      }\n\n      v = URI.recodePath(v);\n      this._parts.path = this._parts.path.replace(replace, v);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.filename = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined || v === true) {\n      if (!this._parts.path || this._parts.path === '/') {\n        return '';\n      }\n\n      var pos = this._parts.path.lastIndexOf('/');\n      var res = this._parts.path.substring(pos+1);\n\n      return v ? URI.decodePathSegment(res) : res;\n    } else {\n      var mutatedDirectory = false;\n\n      if (v.charAt(0) === '/') {\n        v = v.substring(1);\n      }\n\n      if (v.match(/\\.?\\//)) {\n        mutatedDirectory = true;\n      }\n\n      var replace = new RegExp(escapeRegEx(this.filename()) + '$');\n      v = URI.recodePath(v);\n      this._parts.path = this._parts.path.replace(replace, v);\n\n      if (mutatedDirectory) {\n        this.normalizePath(build);\n      } else {\n        this.build(!build);\n      }\n\n      return this;\n    }\n  };\n  p.suffix = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined || v === true) {\n      if (!this._parts.path || this._parts.path === '/') {\n        return '';\n      }\n\n      var filename = this.filename();\n      var pos = filename.lastIndexOf('.');\n      var s, res;\n\n      if (pos === -1) {\n        return '';\n      }\n\n      // suffix may only contain alnum characters (yup, I made this up.)\n      s = filename.substring(pos+1);\n      res = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n      return v ? URI.decodePathSegment(res) : res;\n    } else {\n      if (v.charAt(0) === '.') {\n        v = v.substring(1);\n      }\n\n      var suffix = this.suffix();\n      var replace;\n\n      if (!suffix) {\n        if (!v) {\n          return this;\n        }\n\n        this._parts.path += '.' + URI.recodePath(v);\n      } else if (!v) {\n        replace = new RegExp(escapeRegEx('.' + suffix) + '$');\n      } else {\n        replace = new RegExp(escapeRegEx(suffix) + '$');\n      }\n\n      if (replace) {\n        v = URI.recodePath(v);\n        this._parts.path = this._parts.path.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.segment = function(segment, v, build) {\n    var separator = this._parts.urn ? ':' : '/';\n    var path = this.path();\n    var absolute = path.substring(0, 1) === '/';\n    var segments = path.split(separator);\n\n    if (segment !== undefined && typeof segment !== 'number') {\n      build = v;\n      v = segment;\n      segment = undefined;\n    }\n\n    if (segment !== undefined && typeof segment !== 'number') {\n      throw new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n    }\n\n    if (absolute) {\n      segments.shift();\n    }\n\n    if (segment < 0) {\n      // allow negative indexes to address from the end\n      segment = Math.max(segments.length + segment, 0);\n    }\n\n    if (v === undefined) {\n      /*jshint laxbreak: true */\n      return segment === undefined\n        ? segments\n        : segments[segment];\n      /*jshint laxbreak: false */\n    } else if (segment === null || segments[segment] === undefined) {\n      if (isArray(v)) {\n        segments = [];\n        // collapse empty elements within array\n        for (var i=0, l=v.length; i < l; i++) {\n          if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n            continue;\n          }\n\n          if (segments.length && !segments[segments.length -1].length) {\n            segments.pop();\n          }\n\n          segments.push(trimSlashes(v[i]));\n        }\n      } else if (v || typeof v === 'string') {\n        v = trimSlashes(v);\n        if (segments[segments.length -1] === '') {\n          // empty trailing elements have to be overwritten\n          // to prevent results such as /foo//bar\n          segments[segments.length -1] = v;\n        } else {\n          segments.push(v);\n        }\n      }\n    } else {\n      if (v) {\n        segments[segment] = trimSlashes(v);\n      } else {\n        segments.splice(segment, 1);\n      }\n    }\n\n    if (absolute) {\n      segments.unshift('');\n    }\n\n    return this.path(segments.join(separator), build);\n  };\n  p.segmentCoded = function(segment, v, build) {\n    var segments, i, l;\n\n    if (typeof segment !== 'number') {\n      build = v;\n      v = segment;\n      segment = undefined;\n    }\n\n    if (v === undefined) {\n      segments = this.segment(segment, v, build);\n      if (!isArray(segments)) {\n        segments = segments !== undefined ? URI.decode(segments) : undefined;\n      } else {\n        for (i = 0, l = segments.length; i < l; i++) {\n          segments[i] = URI.decode(segments[i]);\n        }\n      }\n\n      return segments;\n    }\n\n    if (!isArray(v)) {\n      v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n    } else {\n      for (i = 0, l = v.length; i < l; i++) {\n        v[i] = URI.encode(v[i]);\n      }\n    }\n\n    return this.segment(segment, v, build);\n  };\n\n  // mutating query string\n  var q = p.query;\n  p.query = function(v, build) {\n    if (v === true) {\n      return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    } else if (typeof v === 'function') {\n      var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n      var result = v.call(this, data);\n      this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n      this.build(!build);\n      return this;\n    } else if (v !== undefined && typeof v !== 'string') {\n      this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n      this.build(!build);\n      return this;\n    } else {\n      return q.call(this, v, build);\n    }\n  };\n  p.setQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n    if (typeof name === 'string' || name instanceof String) {\n      data[name] = value !== undefined ? value : null;\n    } else if (typeof name === 'object') {\n      for (var key in name) {\n        if (hasOwn.call(name, key)) {\n          data[key] = name[key];\n        }\n      }\n    } else {\n      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n    }\n\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.addQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    URI.addQuery(data, name, value === undefined ? null : value);\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.removeQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    URI.removeQuery(data, name, value);\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.hasQuery = function(name, value, withinArray) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    return URI.hasQuery(data, name, value, withinArray);\n  };\n  p.setSearch = p.setQuery;\n  p.addSearch = p.addQuery;\n  p.removeSearch = p.removeQuery;\n  p.hasSearch = p.hasQuery;\n\n  // sanitizing URLs\n  p.normalize = function() {\n    if (this._parts.urn) {\n      return this\n        .normalizeProtocol(false)\n        .normalizePath(false)\n        .normalizeQuery(false)\n        .normalizeFragment(false)\n        .build();\n    }\n\n    return this\n      .normalizeProtocol(false)\n      .normalizeHostname(false)\n      .normalizePort(false)\n      .normalizePath(false)\n      .normalizeQuery(false)\n      .normalizeFragment(false)\n      .build();\n  };\n  p.normalizeProtocol = function(build) {\n    if (typeof this._parts.protocol === 'string') {\n      this._parts.protocol = this._parts.protocol.toLowerCase();\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeHostname = function(build) {\n    if (this._parts.hostname) {\n      if (this.is('IDN') && punycode) {\n        this._parts.hostname = punycode.toASCII(this._parts.hostname);\n      } else if (this.is('IPv6') && IPv6) {\n        this._parts.hostname = IPv6.best(this._parts.hostname);\n      }\n\n      this._parts.hostname = this._parts.hostname.toLowerCase();\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizePort = function(build) {\n    // remove port of it's the protocol's default\n    if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n      this._parts.port = null;\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizePath = function(build) {\n    var _path = this._parts.path;\n    if (!_path) {\n      return this;\n    }\n\n    if (this._parts.urn) {\n      this._parts.path = URI.recodeUrnPath(this._parts.path);\n      this.build(!build);\n      return this;\n    }\n\n    if (this._parts.path === '/') {\n      return this;\n    }\n\n    _path = URI.recodePath(_path);\n\n    var _was_relative;\n    var _leadingParents = '';\n    var _parent, _pos;\n\n    // handle relative paths\n    if (_path.charAt(0) !== '/') {\n      _was_relative = true;\n      _path = '/' + _path;\n    }\n\n    // handle relative files (as opposed to directories)\n    if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n      _path += '/';\n    }\n\n    // resolve simples\n    _path = _path\n      .replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n      .replace(/\\/{2,}/g, '/');\n\n    // remember leading parents\n    if (_was_relative) {\n      _leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n      if (_leadingParents) {\n        _leadingParents = _leadingParents[0];\n      }\n    }\n\n    // resolve parents\n    while (true) {\n      _parent = _path.search(/\\/\\.\\.(\\/|$)/);\n      if (_parent === -1) {\n        // no more ../ to resolve\n        break;\n      } else if (_parent === 0) {\n        // top level cannot be relative, skip it\n        _path = _path.substring(3);\n        continue;\n      }\n\n      _pos = _path.substring(0, _parent).lastIndexOf('/');\n      if (_pos === -1) {\n        _pos = _parent;\n      }\n      _path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n    }\n\n    // revert to relative\n    if (_was_relative && this.is('relative')) {\n      _path = _leadingParents + _path.substring(1);\n    }\n\n    this._parts.path = _path;\n    this.build(!build);\n    return this;\n  };\n  p.normalizePathname = p.normalizePath;\n  p.normalizeQuery = function(build) {\n    if (typeof this._parts.query === 'string') {\n      if (!this._parts.query.length) {\n        this._parts.query = null;\n      } else {\n        this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n      }\n\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeFragment = function(build) {\n    if (!this._parts.fragment) {\n      this._parts.fragment = null;\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeSearch = p.normalizeQuery;\n  p.normalizeHash = p.normalizeFragment;\n\n  p.iso8859 = function() {\n    // expect unicode input, iso8859 output\n    var e = URI.encode;\n    var d = URI.decode;\n\n    URI.encode = escape;\n    URI.decode = decodeURIComponent;\n    try {\n      this.normalize();\n    } finally {\n      URI.encode = e;\n      URI.decode = d;\n    }\n    return this;\n  };\n\n  p.unicode = function() {\n    // expect iso8859 input, unicode output\n    var e = URI.encode;\n    var d = URI.decode;\n\n    URI.encode = strictEncodeURIComponent;\n    URI.decode = unescape;\n    try {\n      this.normalize();\n    } finally {\n      URI.encode = e;\n      URI.decode = d;\n    }\n    return this;\n  };\n\n  p.readable = function() {\n    var uri = this.clone();\n    // removing username, password, because they shouldn't be displayed according to RFC 3986\n    uri.username('').password('').normalize();\n    var t = '';\n    if (uri._parts.protocol) {\n      t += uri._parts.protocol + '://';\n    }\n\n    if (uri._parts.hostname) {\n      if (uri.is('punycode') && punycode) {\n        t += punycode.toUnicode(uri._parts.hostname);\n        if (uri._parts.port) {\n          t += ':' + uri._parts.port;\n        }\n      } else {\n        t += uri.host();\n      }\n    }\n\n    if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n      t += '/';\n    }\n\n    t += uri.path(true);\n    if (uri._parts.query) {\n      var q = '';\n      for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n        var kv = (qp[i] || '').split('=');\n        q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n          .replace(/&/g, '%26');\n\n        if (kv[1] !== undefined) {\n          q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n            .replace(/&/g, '%26');\n        }\n      }\n      t += '?' + q.substring(1);\n    }\n\n    t += URI.decodeQuery(uri.hash(), true);\n    return t;\n  };\n\n  // resolving relative and absolute URLs\n  p.absoluteTo = function(base) {\n    var resolved = this.clone();\n    var properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n    var basedir, i, p;\n\n    if (this._parts.urn) {\n      throw new Error('URNs do not have any generally defined hierarchical components');\n    }\n\n    if (!(base instanceof URI)) {\n      base = new URI(base);\n    }\n\n    if (!resolved._parts.protocol) {\n      resolved._parts.protocol = base._parts.protocol;\n    }\n\n    if (this._parts.hostname) {\n      return resolved;\n    }\n\n    for (i = 0; (p = properties[i]); i++) {\n      resolved._parts[p] = base._parts[p];\n    }\n\n    if (!resolved._parts.path) {\n      resolved._parts.path = base._parts.path;\n      if (!resolved._parts.query) {\n        resolved._parts.query = base._parts.query;\n      }\n    } else if (resolved._parts.path.substring(-2) === '..') {\n      resolved._parts.path += '/';\n    }\n\n    if (resolved.path().charAt(0) !== '/') {\n      basedir = base.directory();\n      basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n      resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n      resolved.normalizePath();\n    }\n\n    resolved.build();\n    return resolved;\n  };\n  p.relativeTo = function(base) {\n    var relative = this.clone().normalize();\n    var relativeParts, baseParts, common, relativePath, basePath;\n\n    if (relative._parts.urn) {\n      throw new Error('URNs do not have any generally defined hierarchical components');\n    }\n\n    base = new URI(base).normalize();\n    relativeParts = relative._parts;\n    baseParts = base._parts;\n    relativePath = relative.path();\n    basePath = base.path();\n\n    if (relativePath.charAt(0) !== '/') {\n      throw new Error('URI is already relative');\n    }\n\n    if (basePath.charAt(0) !== '/') {\n      throw new Error('Cannot calculate a URI relative to another relative URI');\n    }\n\n    if (relativeParts.protocol === baseParts.protocol) {\n      relativeParts.protocol = null;\n    }\n\n    if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n      return relative.build();\n    }\n\n    if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n      return relative.build();\n    }\n\n    if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n      relativeParts.hostname = null;\n      relativeParts.port = null;\n    } else {\n      return relative.build();\n    }\n\n    if (relativePath === basePath) {\n      relativeParts.path = '';\n      return relative.build();\n    }\n\n    // determine common sub path\n    common = URI.commonPath(relativePath, basePath);\n\n    // If the paths have nothing in common, return a relative URL with the absolute path.\n    if (!common) {\n      return relative.build();\n    }\n\n    var parents = baseParts.path\n      .substring(common.length)\n      .replace(/[^\\/]*$/, '')\n      .replace(/.*?\\//g, '../');\n\n    relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n    return relative.build();\n  };\n\n  // comparing URIs\n  p.equals = function(uri) {\n    var one = this.clone();\n    var two = new URI(uri);\n    var one_map = {};\n    var two_map = {};\n    var checked = {};\n    var one_query, two_query, key;\n\n    one.normalize();\n    two.normalize();\n\n    // exact match\n    if (one.toString() === two.toString()) {\n      return true;\n    }\n\n    // extract query string\n    one_query = one.query();\n    two_query = two.query();\n    one.query('');\n    two.query('');\n\n    // definitely not equal if not even non-query parts match\n    if (one.toString() !== two.toString()) {\n      return false;\n    }\n\n    // query parameters have the same length, even if they're permuted\n    if (one_query.length !== two_query.length) {\n      return false;\n    }\n\n    one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n    two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n    for (key in one_map) {\n      if (hasOwn.call(one_map, key)) {\n        if (!isArray(one_map[key])) {\n          if (one_map[key] !== two_map[key]) {\n            return false;\n          }\n        } else if (!arraysEqual(one_map[key], two_map[key])) {\n          return false;\n        }\n\n        checked[key] = true;\n      }\n    }\n\n    for (key in two_map) {\n      if (hasOwn.call(two_map, key)) {\n        if (!checked[key]) {\n          // two contains a parameter not present in one\n          return false;\n        }\n      }\n    }\n\n    return true;\n  };\n\n  // state\n  p.duplicateQueryParameters = function(v) {\n    this._parts.duplicateQueryParameters = !!v;\n    return this;\n  };\n\n  p.escapeQuerySpace = function(v) {\n    this._parts.escapeQuerySpace = !!v;\n    return this;\n  };\n\n  return URI;\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/URITemplate.js",
    "content": "/*!\n * URI.js - Mutating URLs\n * URI Template Support - http://tools.ietf.org/html/rfc6570\n *\n * Version: 1.18.1\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory(require('./URI'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['./URI'], factory);\n  } else {\n    // Browser globals (root is window)\n    root.URITemplate = factory(root.URI, root);\n  }\n}(this, function (URI, root) {\n  'use strict';\n  // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n  /*jshint camelcase: false */\n\n  // save current URITemplate variable, if any\n  var _URITemplate = root && root.URITemplate;\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  function URITemplate(expression) {\n    // serve from cache where possible\n    if (URITemplate._cache[expression]) {\n      return URITemplate._cache[expression];\n    }\n\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof URITemplate)) {\n      return new URITemplate(expression);\n    }\n\n    this.expression = expression;\n    URITemplate._cache[expression] = this;\n    return this;\n  }\n\n  function Data(data) {\n    this.data = data;\n    this.cache = {};\n  }\n\n  var p = URITemplate.prototype;\n  // list of operators and their defined options\n  var operators = {\n    // Simple string expansion\n    '' : {\n      prefix: '',\n      separator: ',',\n      named: false,\n      empty_name_separator: false,\n      encode : 'encode'\n    },\n    // Reserved character strings\n    '+' : {\n      prefix: '',\n      separator: ',',\n      named: false,\n      empty_name_separator: false,\n      encode : 'encodeReserved'\n    },\n    // Fragment identifiers prefixed by '#'\n    '#' : {\n      prefix: '#',\n      separator: ',',\n      named: false,\n      empty_name_separator: false,\n      encode : 'encodeReserved'\n    },\n    // Name labels or extensions prefixed by '.'\n    '.' : {\n      prefix: '.',\n      separator: '.',\n      named: false,\n      empty_name_separator: false,\n      encode : 'encode'\n    },\n    // Path segments prefixed by '/'\n    '/' : {\n      prefix: '/',\n      separator: '/',\n      named: false,\n      empty_name_separator: false,\n      encode : 'encode'\n    },\n    // Path parameter name or name=value pairs prefixed by ';'\n    ';' : {\n      prefix: ';',\n      separator: ';',\n      named: true,\n      empty_name_separator: false,\n      encode : 'encode'\n    },\n    // Query component beginning with '?' and consisting\n    // of name=value pairs separated by '&'; an\n    '?' : {\n      prefix: '?',\n      separator: '&',\n      named: true,\n      empty_name_separator: true,\n      encode : 'encode'\n    },\n    // Continuation of query-style &name=value pairs\n    // within a literal query component.\n    '&' : {\n      prefix: '&',\n      separator: '&',\n      named: true,\n      empty_name_separator: true,\n      encode : 'encode'\n    }\n\n    // The operator characters equals (\"=\"), comma (\",\"), exclamation (\"!\"),\n    // at sign (\"@\"), and pipe (\"|\") are reserved for future extensions.\n  };\n\n  // storage for already parsed templates\n  URITemplate._cache = {};\n  // pattern to identify expressions [operator, variable-list] in template\n  URITemplate.EXPRESSION_PATTERN = /\\{([^a-zA-Z0-9%_]?)([^\\}]+)(\\}|$)/g;\n  // pattern to identify variables [name, explode, maxlength] in variable-list\n  URITemplate.VARIABLE_PATTERN = /^([^*:.](?:\\.?[^*:.])*)((\\*)|:(\\d+))?$/;\n  // pattern to verify variable name integrity\n  URITemplate.VARIABLE_NAME_PATTERN = /[^a-zA-Z0-9%_.]/;\n  // pattern to verify literal integrity\n  URITemplate.LITERAL_PATTERN = /[<>{}'\"`^| \\\\]/;\n\n  // expand parsed expression (expression, not template!)\n  URITemplate.expand = function(expression, data) {\n    // container for defined options for the given operator\n    var options = operators[expression.operator];\n    // expansion type (include keys or not)\n    var type = options.named ? 'Named' : 'Unnamed';\n    // list of variables within the expression\n    var variables = expression.variables;\n    // result buffer for evaluating the expression\n    var buffer = [];\n    var d, variable, i;\n\n    for (i = 0; (variable = variables[i]); i++) {\n      // fetch simplified data source\n      d = data.get(variable.name);\n      if (!d.val.length) {\n        if (d.type) {\n          // empty variables (empty string)\n          // still lead to a separator being appended!\n          buffer.push('');\n        }\n        // no data, no action\n        continue;\n      }\n\n      if (d.type > 1 && variable.maxlength) {\n        // composite variable cannot specify maxlength\n        throw new Error('Invalid expression: Prefix modifier not applicable to variable \"' + variable.name + '\"');\n      }\n\n      // expand the given variable\n      buffer.push(URITemplate['expand' + type](\n        d,\n        options,\n        variable.explode,\n        variable.explode && options.separator || ',',\n        variable.maxlength,\n        variable.name\n      ));\n    }\n\n    if (buffer.length) {\n      return options.prefix + buffer.join(options.separator);\n    } else {\n      // prefix is not prepended for empty expressions\n      return '';\n    }\n  };\n  // expand a named variable\n  URITemplate.expandNamed = function(d, options, explode, separator, length, name) {\n    // variable result buffer\n    var result = '';\n    // peformance crap\n    var encode = options.encode;\n    var empty_name_separator = options.empty_name_separator;\n    // flag noting if values are already encoded\n    var _encode = !d[encode].length;\n    // key for named expansion\n    var _name = d.type === 2 ? '': URI[encode](name);\n    var _value, i, l;\n\n    // for each found value\n    for (i = 0, l = d.val.length; i < l; i++) {\n      if (length) {\n        // maxlength must be determined before encoding can happen\n        _value = URI[encode](d.val[i][1].substring(0, length));\n        if (d.type === 2) {\n          // apply maxlength to keys of objects as well\n          _name = URI[encode](d.val[i][0].substring(0, length));\n        }\n      } else if (_encode) {\n        // encode value\n        _value = URI[encode](d.val[i][1]);\n        if (d.type === 2) {\n          // encode name and cache encoded value\n          _name = URI[encode](d.val[i][0]);\n          d[encode].push([_name, _value]);\n        } else {\n          // cache encoded value\n          d[encode].push([undefined, _value]);\n        }\n      } else {\n        // values are already encoded and can be pulled from cache\n        _value = d[encode][i][1];\n        if (d.type === 2) {\n          _name = d[encode][i][0];\n        }\n      }\n\n      if (result) {\n        // unless we're the first value, prepend the separator\n        result += separator;\n      }\n\n      if (!explode) {\n        if (!i) {\n          // first element, so prepend variable name\n          result += URI[encode](name) + (empty_name_separator || _value ? '=' : '');\n        }\n\n        if (d.type === 2) {\n          // without explode-modifier, keys of objects are returned comma-separated\n          result += _name + ',';\n        }\n\n        result += _value;\n      } else {\n        // only add the = if it is either default (?&) or there actually is a value (;)\n        result += _name + (empty_name_separator || _value ? '=' : '') + _value;\n      }\n    }\n\n    return result;\n  };\n  // expand an unnamed variable\n  URITemplate.expandUnnamed = function(d, options, explode, separator, length) {\n    // variable result buffer\n    var result = '';\n    // performance crap\n    var encode = options.encode;\n    var empty_name_separator = options.empty_name_separator;\n    // flag noting if values are already encoded\n    var _encode = !d[encode].length;\n    var _name, _value, i, l;\n\n    // for each found value\n    for (i = 0, l = d.val.length; i < l; i++) {\n      if (length) {\n        // maxlength must be determined before encoding can happen\n        _value = URI[encode](d.val[i][1].substring(0, length));\n      } else if (_encode) {\n        // encode and cache value\n        _value = URI[encode](d.val[i][1]);\n        d[encode].push([\n          d.type === 2 ? URI[encode](d.val[i][0]) : undefined,\n          _value\n        ]);\n      } else {\n        // value already encoded, pull from cache\n        _value = d[encode][i][1];\n      }\n\n      if (result) {\n        // unless we're the first value, prepend the separator\n        result += separator;\n      }\n\n      if (d.type === 2) {\n        if (length) {\n          // maxlength also applies to keys of objects\n          _name = URI[encode](d.val[i][0].substring(0, length));\n        } else {\n          // at this point the name must already be encoded\n          _name = d[encode][i][0];\n        }\n\n        result += _name;\n        if (explode) {\n          // explode-modifier separates name and value by \"=\"\n          result += (empty_name_separator || _value ? '=' : '');\n        } else {\n          // no explode-modifier separates name and value by \",\"\n          result += ',';\n        }\n      }\n\n      result += _value;\n    }\n\n    return result;\n  };\n\n  URITemplate.noConflict = function() {\n    if (root.URITemplate === URITemplate) {\n      root.URITemplate = _URITemplate;\n    }\n\n    return URITemplate;\n  };\n\n  // expand template through given data map\n  p.expand = function(data) {\n    var result = '';\n\n    if (!this.parts || !this.parts.length) {\n      // lazilyy parse the template\n      this.parse();\n    }\n\n    if (!(data instanceof Data)) {\n      // make given data available through the\n      // optimized data handling thingie\n      data = new Data(data);\n    }\n\n    for (var i = 0, l = this.parts.length; i < l; i++) {\n      /*jshint laxbreak: true */\n      result += typeof this.parts[i] === 'string'\n        // literal string\n        ? this.parts[i]\n        // expression\n        : URITemplate.expand(this.parts[i], data);\n      /*jshint laxbreak: false */\n    }\n\n    return result;\n  };\n  // parse template into action tokens\n  p.parse = function() {\n    // performance crap\n    var expression = this.expression;\n    var ePattern = URITemplate.EXPRESSION_PATTERN;\n    var vPattern = URITemplate.VARIABLE_PATTERN;\n    var nPattern = URITemplate.VARIABLE_NAME_PATTERN;\n    var lPattern = URITemplate.LITERAL_PATTERN;\n    // token result buffer\n    var parts = [];\n      // position within source template\n    var pos = 0;\n    var variables, eMatch, vMatch;\n\n    var checkLiteral = function(literal) {\n      if (literal.match(lPattern)) {\n        throw new Error('Invalid Literal \"' + literal + '\"');\n      }\n      return literal;\n    };\n\n    // RegExp is shared accross all templates,\n    // which requires a manual reset\n    ePattern.lastIndex = 0;\n    // I don't like while(foo = bar()) loops,\n    // to make things simpler I go while(true) and break when required\n    while (true) {\n      eMatch = ePattern.exec(expression);\n      if (eMatch === null) {\n        // push trailing literal\n        parts.push(checkLiteral(expression.substring(pos)));\n        break;\n      } else {\n        // push leading literal\n        parts.push(checkLiteral(expression.substring(pos, eMatch.index)));\n        pos = eMatch.index + eMatch[0].length;\n      }\n\n      if (!operators[eMatch[1]]) {\n        throw new Error('Unknown Operator \"' + eMatch[1]  + '\" in \"' + eMatch[0] + '\"');\n      } else if (!eMatch[3]) {\n        throw new Error('Unclosed Expression \"' + eMatch[0]  + '\"');\n      }\n\n      // parse variable-list\n      variables = eMatch[2].split(',');\n      for (var i = 0, l = variables.length; i < l; i++) {\n        vMatch = variables[i].match(vPattern);\n        if (vMatch === null) {\n          throw new Error('Invalid Variable \"' + variables[i] + '\" in \"' + eMatch[0] + '\"');\n        } else if (vMatch[1].match(nPattern)) {\n          throw new Error('Invalid Variable Name \"' + vMatch[1] + '\" in \"' + eMatch[0] + '\"');\n        }\n\n        variables[i] = {\n          name: vMatch[1],\n          explode: !!vMatch[3],\n          maxlength: vMatch[4] && parseInt(vMatch[4], 10)\n        };\n      }\n\n      if (!variables.length) {\n        throw new Error('Expression Missing Variable(s) \"' + eMatch[0] + '\"');\n      }\n\n      parts.push({\n        expression: eMatch[0],\n        operator: eMatch[1],\n        variables: variables\n      });\n    }\n\n    if (!parts.length) {\n      // template doesn't contain any expressions\n      // so it is a simple literal string\n      // this probably should fire a warning or something?\n      parts.push(checkLiteral(expression));\n    }\n\n    this.parts = parts;\n    return this;\n  };\n\n  // simplify data structures\n  Data.prototype.get = function(key) {\n    // performance crap\n    var data = this.data;\n    // cache for processed data-point\n    var d = {\n      // type of data 0: undefined/null, 1: string, 2: object, 3: array\n      type: 0,\n      // original values (except undefined/null)\n      val: [],\n      // cache for encoded values (only for non-maxlength expansion)\n      encode: [],\n      encodeReserved: []\n    };\n    var i, l, value;\n\n    if (this.cache[key] !== undefined) {\n      // we've already processed this key\n      return this.cache[key];\n    }\n\n    this.cache[key] = d;\n\n    if (String(Object.prototype.toString.call(data)) === '[object Function]') {\n      // data itself is a callback (global callback)\n      value = data(key);\n    } else if (String(Object.prototype.toString.call(data[key])) === '[object Function]') {\n      // data is a map of callbacks (local callback)\n      value = data[key](key);\n    } else {\n      // data is a map of data\n      value = data[key];\n    }\n\n    // generalize input into [ [name1, value1], [name2, value2], … ]\n    // so expansion has to deal with a single data structure only\n    if (value === undefined || value === null) {\n      // undefined and null values are to be ignored completely\n      return d;\n    } else if (String(Object.prototype.toString.call(value)) === '[object Array]') {\n      for (i = 0, l = value.length; i < l; i++) {\n        if (value[i] !== undefined && value[i] !== null) {\n          // arrays don't have names\n          d.val.push([undefined, String(value[i])]);\n        }\n      }\n\n      if (d.val.length) {\n        // only treat non-empty arrays as arrays\n        d.type = 3; // array\n      }\n    } else if (String(Object.prototype.toString.call(value)) === '[object Object]') {\n      for (i in value) {\n        if (hasOwn.call(value, i) && value[i] !== undefined && value[i] !== null) {\n          // objects have keys, remember them for named expansion\n          d.val.push([i, String(value[i])]);\n        }\n      }\n\n      if (d.val.length) {\n        // only treat non-empty objects as objects\n        d.type = 2; // object\n      }\n    } else {\n      d.type = 1; // primitive string (could've been string, number, boolean and objects with a toString())\n      // arrays don't have names\n      d.val.push([undefined, String(value)]);\n    }\n\n    return d;\n  };\n\n  // hook into URI for fluid access\n  URI.expand = function(expression, data) {\n    var template = new URITemplate(expression);\n    var expansion = template.expand(data);\n\n    return new URI(expansion);\n  };\n\n  return URITemplate;\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/jquery.URI.js",
    "content": "/*!\n * URI.js - Mutating URLs\n * jQuery Plugin\n *\n * Version: 1.18.1\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/jquery-uri-plugin.html\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof exports === 'object') {\n    // Node\n    module.exports = factory(require('jquery'), require('./URI'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery', './URI'], factory);\n  } else {\n    // Browser globals (root is window)\n    factory(root.jQuery, root.URI);\n  }\n}(this, function ($, URI) {\n  'use strict';\n  // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n  /*jshint camelcase: false */\n\n  var comparable = {};\n  var compare = {\n    // equals \n    '=': function(value, target) {\n      return value === target;\n    },\n    // ~= translates to value.match((?:^|\\s)target(?:\\s|$)) which is useless for URIs\n    // |= translates to value.match((?:\\b)target(?:-|\\s|$)) which is useless for URIs\n    // begins with\n    '^=': function(value, target) {\n      return !!(value + '').match(new RegExp('^' + escapeRegEx(target), 'i'));\n    },\n    // ends with\n    '$=': function(value, target) {\n      return !!(value + '').match(new RegExp(escapeRegEx(target) + '$', 'i'));\n    },\n    // contains\n    '*=': function(value, target, property) {\n      if (property === 'directory') {\n        // add trailing slash so /dir/ will match the deep-end as well\n        value += '/';\n      }\n    \n      return !!(value + '').match(new RegExp(escapeRegEx(target), 'i'));\n    },\n    'equals:': function(uri, target) {\n      return uri.equals(target);\n    },\n    'is:': function(uri, target) {\n      return uri.is(target);\n    }\n  };\n\n  function escapeRegEx(string) {\n    // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n    return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n  }\n\n  function getUriProperty(elem) {\n    var nodeName = elem.nodeName.toLowerCase();\n    var property = URI.domAttributes[nodeName];\n    if (nodeName === 'input' && elem.type !== 'image') {\n      // compensate ambiguous <input> that is not an image\n      return undefined;\n    }\n  \n    // NOTE: as we use a static mapping from element to attribute,\n    // the HTML5 attribute issue should not come up again\n    // https://github.com/medialize/URI.js/issues/69\n    return property;\n  }\n\n  function generateAccessor(property) {\n    return {\n      get: function(elem) {\n        return $(elem).uri()[property]();\n      },\n      set: function(elem, value) {\n        $(elem).uri()[property](value);\n        return value;\n      }\n    };\n  }\n\n  // populate lookup table and register $.attr('uri:accessor') handlers\n  $.each('origin authority directory domain filename fragment hash host hostname href password path pathname port protocol query resource scheme search subdomain suffix tld username'.split(' '), function(k, v) {\n    comparable[v] = true;\n    $.attrHooks['uri:' + v] = generateAccessor(v);\n  });\n\n  // pipe $.attr('src') and $.attr('href') through URI.js\n  var _attrHooks = {\n    get: function(elem) {\n      return $(elem).uri();\n    },\n    set: function(elem, value) {\n      return $(elem).uri().href(value).toString();\n    }\n  };\n  $.each(['src', 'href', 'action', 'uri', 'cite'], function(k, v) {\n    $.attrHooks[v] = {\n      set: _attrHooks.set\n    };\n  });\n  $.attrHooks.uri.get = _attrHooks.get;\n\n  // general URI accessor\n  $.fn.uri = function(uri) {\n    var $this = this.first();\n    var elem = $this.get(0);\n    var property = getUriProperty(elem);\n  \n    if (!property) {\n      throw new Error('Element \"' + elem.nodeName + '\" does not have either property: href, src, action, cite');\n    }\n  \n    if (uri !== undefined) {\n      var old = $this.data('uri');\n      if (old) {\n        return old.href(uri);\n      }\n    \n      if (!(uri instanceof URI)) {\n        uri = URI(uri || '');\n      }\n    } else {\n      uri = $this.data('uri');\n      if (uri) {\n        return uri;\n      } else {\n        uri = URI($this.attr(property) || '');\n      }\n    }\n  \n    uri._dom_element = elem;\n    uri._dom_attribute = property;\n    uri.normalize();\n    $this.data('uri', uri);\n    return uri;\n  };\n\n  // overwrite URI.build() to update associated DOM element if necessary\n  URI.prototype.build = function(deferBuild) {\n    if (this._dom_element) {\n      // cannot defer building when hooked into a DOM element\n      this._string = URI.build(this._parts);\n      this._deferred_build = false;\n      this._dom_element.setAttribute(this._dom_attribute, this._string);\n      this._dom_element[this._dom_attribute] = this._string;\n    } else if (deferBuild === true) {\n      this._deferred_build = true;\n    } else if (deferBuild === undefined || this._deferred_build) {\n      this._string = URI.build(this._parts);\n      this._deferred_build = false;\n    }\n  \n    return this;\n  };\n\n  // add :uri() pseudo class selector to sizzle\n  var uriSizzle;\n  var pseudoArgs = /^([a-zA-Z]+)\\s*([\\^\\$*]?=|:)\\s*(['\"]?)(.+)\\3|^\\s*([a-zA-Z0-9]+)\\s*$/;\n  function uriPseudo (elem, text) {\n    var match, property, uri;\n  \n    // skip anything without src|href|action and bad :uri() syntax\n    if (!getUriProperty(elem) || !text) {\n      return false;\n    }\n  \n    match = text.match(pseudoArgs);\n\n    if (!match || (!match[5] && match[2] !== ':' && !compare[match[2]])) {\n      // abort because the given selector cannot be executed\n      // filers seem to fail silently\n      return false;\n    }\n\n    uri = $(elem).uri();\n  \n    if (match[5]) {\n      return uri.is(match[5]);\n    } else if (match[2] === ':') {\n      property = match[1].toLowerCase() + ':';\n      if (!compare[property]) {\n        // filers seem to fail silently\n        return false;\n      }\n    \n      return compare[property](uri, match[4]);\n    } else {\n      property = match[1].toLowerCase();\n      if (!comparable[property]) {\n        // filers seem to fail silently\n        return false;\n      }\n    \n      return compare[match[2]](uri[property](), match[4], property);\n    }\n\n    return false;\n  }\n\n  if ($.expr.createPseudo) {\n    // jQuery >= 1.8\n    uriSizzle = $.expr.createPseudo(function (text) {\n      return function (elem) {\n        return uriPseudo(elem, text);\n      };\n    });\n  } else {\n    // jQuery < 1.8\n    uriSizzle = function (elem, i, match) {\n      return uriPseudo(elem, match[3]);\n    };\n  }\n\n  $.expr[':'].uri = uriSizzle;\n\n  // extending existing object rather than defining something new,\n  // return jQuery anyway\n  return $;\n}));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/urijs/punycode.js",
    "content": "/*! https://mths.be/punycode v1.4.0 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n"
  },
  {
    "path": "python/nav/web/static/js/libs/vue-2.2.0.js",
    "content": "/*!\n * Vue.js v2.2.0\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Vue = factory());\n}(this, (function () { 'use strict';\n\n/*  */\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction _toString (val) {\n  return val == null\n    ? ''\n    : typeof val === 'object'\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n  return typeof value === 'string' || typeof value === 'number'\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /([^-])([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str\n    .replace(hyphenateRE, '$1-$2')\n    .replace(hyphenateRE, '$1-$2')\n    .toLowerCase()\n});\n\n/**\n * Simple bind, faster than native\n */\nfunction bind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n  // record original fn length\n  boundFn._length = fn.length;\n  return boundFn\n}\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nvar toString = Object.prototype.toString;\nvar OBJECT_STRING = '[object Object]';\nfunction isPlainObject (obj) {\n  return toString.call(obj) === OBJECT_STRING\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/**\n * Perform no operation.\n */\nfunction noop () {}\n\n/**\n * Always return false.\n */\nvar no = function () { return false; };\n\n/**\n * Return same value\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a static keys string from compiler modules.\n */\nfunction genStaticKeys (modules) {\n  return modules.reduce(function (keys, m) {\n    return keys.concat(m.staticKeys || [])\n  }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    return JSON.stringify(a) === JSON.stringify(b)\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn();\n    }\n  }\n}\n\n/*  */\n\nvar config = {\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: \"development\" !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"development\" !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: \"development\" !== 'production',\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * List of asset types that a component can own.\n   */\n  _assetTypes: [\n    'component',\n    'directive',\n    'filter'\n  ],\n\n  /**\n   * List of lifecycle hooks.\n   */\n  _lifecycleHooks: [\n    'beforeCreate',\n    'created',\n    'beforeMount',\n    'mounted',\n    'beforeUpdate',\n    'updated',\n    'beforeDestroy',\n    'destroyed',\n    'activated',\n    'deactivated'\n  ],\n\n  /**\n   * Max circular updates allowed in a scheduler flush cycle.\n   */\n  _maxUpdateCount: 100\n};\n\n/*  */\n/* globals MutationObserver */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = UA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\n/**\n * Defer a task to execute it asynchronously.\n */\nvar nextTick = (function () {\n  var callbacks = [];\n  var pending = false;\n  var timerFunc;\n\n  function nextTickHandler () {\n    pending = false;\n    var copies = callbacks.slice(0);\n    callbacks.length = 0;\n    for (var i = 0; i < copies.length; i++) {\n      copies[i]();\n    }\n  }\n\n  // the nextTick behavior leverages the microtask queue, which can be accessed\n  // via either native Promise.then or MutationObserver.\n  // MutationObserver has wider support, however it is seriously bugged in\n  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n  // completely stops working after triggering a few times... so, if native\n  // Promise is available, we will use it:\n  /* istanbul ignore if */\n  if (typeof Promise !== 'undefined' && isNative(Promise)) {\n    var p = Promise.resolve();\n    var logError = function (err) { console.error(err); };\n    timerFunc = function () {\n      p.then(nextTickHandler).catch(logError);\n      // in problematic UIWebViews, Promise.then doesn't completely break, but\n      // it can get stuck in a weird state where callbacks are pushed into the\n      // microtask queue but the queue isn't being flushed, until the browser\n      // needs to do some other work, e.g. handle a timer. Therefore we can\n      // \"force\" the microtask queue to be flushed by adding an empty timer.\n      if (isIOS) { setTimeout(noop); }\n    };\n  } else if (typeof MutationObserver !== 'undefined' && (\n    isNative(MutationObserver) ||\n    // PhantomJS and iOS 7.x\n    MutationObserver.toString() === '[object MutationObserverConstructor]'\n  )) {\n    // use MutationObserver where native Promise is not available,\n    // e.g. PhantomJS IE11, iOS7, Android 4.4\n    var counter = 1;\n    var observer = new MutationObserver(nextTickHandler);\n    var textNode = document.createTextNode(String(counter));\n    observer.observe(textNode, {\n      characterData: true\n    });\n    timerFunc = function () {\n      counter = (counter + 1) % 2;\n      textNode.data = String(counter);\n    };\n  } else {\n    // fallback to setTimeout\n    /* istanbul ignore next */\n    timerFunc = function () {\n      setTimeout(nextTickHandler, 0);\n    };\n  }\n\n  return function queueNextTick (cb, ctx) {\n    var _resolve;\n    callbacks.push(function () {\n      if (cb) { cb.call(ctx); }\n      if (_resolve) { _resolve(ctx); }\n    });\n    if (!pending) {\n      pending = true;\n      timerFunc();\n    }\n    if (!cb && typeof Promise !== 'undefined') {\n      return new Promise(function (resolve) {\n        _resolve = resolve;\n      })\n    }\n  }\n})();\n\nvar _Set;\n/* istanbul ignore if */\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = (function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\nvar perf;\n\n{\n  perf = inBrowser && window.performance;\n  if (perf && (!perf.mark || !perf.measure)) {\n    perf = undefined;\n  }\n}\n\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w.$]/;\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  } else {\n    var segments = path.split('.');\n    return function (obj) {\n      for (var i = 0; i < segments.length; i++) {\n        if (!obj) { return }\n        obj = obj[segments[i]];\n      }\n      return obj\n    }\n  }\n}\n\nvar warn = noop;\nvar tip = noop;\nvar formatComponentName;\n\n{\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.error(\"[Vue warn]: \" + msg + \" \" + (\n        vm ? formatLocation(formatComponentName(vm)) : ''\n      ));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + \" \" + (\n        vm ? formatLocation(formatComponentName(vm)) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var name = vm._isVue\n      ? vm.$options.name || vm.$options._componentTag\n      : vm.name;\n\n    var file = vm._isVue && vm.$options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var formatLocation = function (str) {\n    if (str === \"<Anonymous>\") {\n      str += \" - use the \\\"name\\\" option for better debugging messages.\";\n    }\n    return (\"\\n(found in \" + str + \")\")\n  };\n}\n\n/*  */\n\n\nvar uid$1 = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid$1++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stablize the subscriber list first\n  var subs = this.subs.slice();\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (_target) {\n  if (Dep.target) { targetStack.push(Dep.target); }\n  Dep.target = _target;\n}\n\nfunction popTarget () {\n  Dep.target = targetStack.pop();\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);[\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n]\n.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var arguments$1 = arguments;\n\n    // avoid leaking arguments:\n    // http://jsperf.com/closure-with-arguments\n    var i = arguments.length;\n    var args = new Array(i);\n    while (i--) {\n      args[i] = arguments$1[i];\n    }\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n        inserted = args;\n        break\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * By default, when a reactive property is set, the new value is\n * also converted to become reactive. However when passing down props,\n * we don't want to force conversion because the value may be a nested value\n * under a frozen data structure. Converting it would defeat the optimization.\n */\nvar observerState = {\n  shouldConvert: true,\n  isSettingProps: false\n};\n\n/**\n * Observer class that are attached to each observed\n * object. Once attached, the observer converts target\n * object's property keys into getter/setters that\n * collect dependencies and dispatches updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    var augment = hasProto\n      ? protoAugment\n      : copyAugment;\n    augment(value, arrayMethods, arrayKeys);\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i], obj[keys[i]]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value)) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    observerState.shouldConvert &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n\n  var childOb = observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n        }\n        if (Array.isArray(value)) {\n          dependArray(value);\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if (\"development\" !== 'production' && customSetter) {\n        customSetter();\n      }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (obj, key, val) {\n  if (Array.isArray(obj)) {\n    obj.length = Math.max(obj.length, key);\n    obj.splice(key, 1, val);\n    return val\n  }\n  if (hasOwn(obj, key)) {\n    obj[key] = val;\n    return\n  }\n  var ob = obj.__ob__;\n  if (obj._isVue || (ob && ob.vmCount)) {\n    \"development\" !== 'production' && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return\n  }\n  if (!ob) {\n    obj[key] = val;\n    return\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (obj, key) {\n  if (Array.isArray(obj)) {\n    obj.splice(key, 1);\n    return\n  }\n  var ob = obj.__ob__;\n  if (obj._isVue || (ob && ob.vmCount)) {\n    \"development\" !== 'production' && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(obj, key)) {\n    return\n  }\n  delete obj[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\n{\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n  var keys = Object.keys(from);\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (typeof childVal !== 'function') {\n      \"development\" !== 'production' && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        childVal.call(this),\n        parentVal.call(this)\n      )\n    }\n  } else if (parentVal || childVal) {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm)\n        : undefined;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  return childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal\n}\n\nconfig._lifecycleHooks.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (parentVal, childVal) {\n  var res = Object.create(parentVal || null);\n  return childVal\n    ? extend(res, childVal)\n    : res\n}\n\nconfig._assetTypes.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (parentVal, childVal) {\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key in childVal) {\n    var parent = ret[key];\n    var child = childVal[key];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key] = parent\n      ? parent.concat(child)\n      : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.computed = function (parentVal, childVal) {\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  extend(ret, childVal);\n  return ret\n};\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    var lower = key.toLowerCase();\n    if (isBuiltInTag(lower) || config.isReservedTag(lower)) {\n      warn(\n        'Do not use built-in or reserved HTML elements as component ' +\n        'id: ' + key\n      );\n    }\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  }\n  options.props = res;\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def = dirs[key];\n      if (typeof def === 'function') {\n        dirs[key] = { bind: def, update: def };\n      }\n    }\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  {\n    checkComponents(child);\n  }\n  normalizeProps(child);\n  normalizeDirectives(child);\n  var extendsFrom = child.extends;\n  if (extendsFrom) {\n    parent = typeof extendsFrom === 'function'\n      ? mergeOptions(parent, extendsFrom.options, vm)\n      : mergeOptions(parent, extendsFrom, vm);\n  }\n  if (child.mixins) {\n    for (var i = 0, l = child.mixins.length; i < l; i++) {\n      var mixin = child.mixins[i];\n      if (mixin.prototype instanceof Vue$3) {\n        mixin = mixin.options;\n      }\n      parent = mergeOptions(parent, mixin, vm);\n    }\n  }\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if (\"development\" !== 'production' && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // handle boolean props\n  if (isType(Boolean, prop.type)) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {\n      value = true;\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldConvert = observerState.shouldConvert;\n    observerState.shouldConvert = true;\n    observe(value);\n    observerState.shouldConvert = prevShouldConvert;\n  }\n  {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if (\"development\" !== 'production' && isObject(def)) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n  if (!valid) {\n    warn(\n      'Invalid prop: type check failed for prop \"' + name + '\".' +\n      ' Expected ' + expectedTypes.map(capitalize).join(', ') +\n      ', got ' + Object.prototype.toString.call(value).slice(8, -1) + '.',\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\n/**\n * Assert the type of a value\n */\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (expectedType === 'String') {\n    valid = typeof value === (expectedType = 'string');\n  } else if (expectedType === 'Number') {\n    valid = typeof value === (expectedType = 'number');\n  } else if (expectedType === 'Boolean') {\n    valid = typeof value === (expectedType = 'boolean');\n  } else if (expectedType === 'Function') {\n    valid = typeof value === (expectedType = 'function');\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match && match[1]\n}\n\nfunction isType (type, fn) {\n  if (!Array.isArray(fn)) {\n    return getType(fn) === getType(type)\n  }\n  for (var i = 0, len = fn.length; i < len; i++) {\n    if (getType(fn[i]) === getType(type)) {\n      return true\n    }\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction handleError (err, vm, type) {\n  if (config.errorHandler) {\n    config.errorHandler.call(null, err, vm, type);\n  } else {\n    {\n      warn((\"Error in \" + type + \":\"), vm);\n    }\n    /* istanbul ignore else */\n    if (inBrowser && typeof console !== 'undefined') {\n      console.error(err);\n    } else {\n      throw err\n    }\n  }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\n{\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      \"referenced during render. Make sure to declare reactive data \" +\n      \"properties in the data option.\",\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' &&\n    Proxy.toString().match(/native code/);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';\n      if (!has && !isAllowed) {\n        warnNonPresent(target, key);\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        warnNonPresent(target, key);\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.functionalContext = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n};\n\nvar prototypeAccessors = { child: {} };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function () {\n  var node = new VNode();\n  node.text = '';\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    vnode.children,\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isCloned = true;\n  return cloned\n}\n\nfunction cloneVNodes (vnodes) {\n  var res = new Array(vnodes.length);\n  for (var i = 0; i < vnodes.length; i++) {\n    res[i] = cloneVNode(vnodes[i]);\n  }\n  return res\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture\n  }\n});\n\nfunction createFnInvoker (fns) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      for (var i = 0; i < fns.length; i++) {\n        fns[i].apply(null, arguments$1);\n      }\n    } else {\n      // return handler return value for single handlers\n      return fns.apply(null, arguments)\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  vm\n) {\n  var name, cur, old, event;\n  for (name in on) {\n    cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (!cur) {\n      \"development\" !== 'production' && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (!old) {\n      if (!cur.fns) {\n        cur = on[name] = createFnInvoker(cur);\n      }\n      add(event.name, cur, event.once, event.capture);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (!on[name]) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (!oldHook) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (oldHook.fns && oldHook.merged) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constrcuts that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (c == null || typeof c === 'boolean') { continue }\n    last = res[res.length - 1];\n    //  nested\n    if (Array.isArray(c)) {\n      res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i)));\n    } else if (isPrimitive(c)) {\n      if (last && last.text) {\n        last.text += String(c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (c.text && last && last.text) {\n        res[res.length - 1] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (c.tag && c.key == null && nestedIndex != null) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  return children && children.filter(function (c) { return c && c.componentOptions; })[0]\n}\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn, once$$1) {\n  if (once$$1) {\n    target.$once(event, fn);\n  } else {\n    target.$on(event, fn);\n  }\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, vm);\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var this$1 = this;\n\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        this$1.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (arguments.length === 1) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        cbs[i].apply(vm, args);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  var slots = {};\n  if (!children) {\n    return slots\n  }\n  var defaultSlot = [];\n  var name, child;\n  for (var i = 0, l = children.length; i < l; i++) {\n    child = children[i];\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.functionalContext === context) &&\n        child.data && (name = child.data.slot)) {\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      defaultSlot.push(child);\n    }\n  }\n  // ignore single whitespace\n  if (defaultSlot.length && !(\n    defaultSlot.length === 1 &&\n    (defaultSlot[0].text === ' ' || defaultSlot[0].isComment)\n  )) {\n    slots.default = defaultSlot;\n  }\n  return slots\n}\n\nfunction resolveScopedSlots (\n  fns\n) {\n  var res = {};\n  for (var i = 0; i < fns.length; i++) {\n    res[fns[i][0]] = fns[i][1];\n  }\n  return res\n}\n\n/*  */\n\nvar activeInstance = null;\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    if (vm._isMounted) {\n      callHook(vm, 'beforeUpdate');\n    }\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var prevActiveInstance = activeInstance;\n    activeInstance = vm;\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(\n        vm.$el, vnode, hydrating, false /* removeOnly */,\n        vm.$options._parentElm,\n        vm.$options._refElm\n      );\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    activeInstance = prevActiveInstance;\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    {\n      /* istanbul ignore if */\n      if (vm.$options.template && vm.$options.template.charAt(0) !== '#') {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'option is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if (\"development\" !== 'production' && config.performance && perf) {\n    updateComponent = function () {\n      var name = vm._name;\n      var startTag = \"start \" + name;\n      var endTag = \"end \" + name;\n      perf.mark(startTag);\n      var vnode = vm._render();\n      perf.mark(endTag);\n      perf.measure((name + \" render\"), startTag, endTag);\n      perf.mark(startTag);\n      vm._update(vnode, hydrating);\n      perf.mark(endTag);\n      perf.measure((name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  vm._watcher = new Watcher(vm, updateComponent, noop);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren\n  var hasChildren = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    parentVnode.data.scopedSlots || // has new scoped slots\n    vm.$scopedSlots !== emptyObject // has old scoped slots\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    observerState.shouldConvert = false;\n    {\n      observerState.isSettingProps = true;\n    }\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      props[key] = validateProp(key, vm.$options.props, propsData, vm);\n    }\n    observerState.shouldConvert = true;\n    {\n      observerState.isSettingProps = false;\n    }\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n  // update listeners\n  if (listeners) {\n    var oldListeners = vm.$options._parentListeners;\n    vm.$options._parentListeners = listeners;\n    updateComponentListeners(vm, listeners, oldListeners);\n  }\n  // resolve slots + force update if has children\n  if (hasChildren) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive == null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  var handlers = vm.$options[hook];\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      try {\n        handlers[i].call(vm);\n      } catch (e) {\n        handleError(e, vm, (hook + \" hook\"));\n      }\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n}\n\n/*  */\n\n\nvar queue = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  queue.length = 0;\n  has = {};\n  {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  flushing = true;\n  var watcher, id, vm;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if (\"development\" !== 'production' && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > config._maxUpdateCount) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // call updated hooks\n  index = queue.length;\n  while (index--) {\n    watcher = queue[index];\n    vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted) {\n      callHook(vm, 'updated');\n    }\n  }\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n\n  resetSchedulerState();\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i >= 0 && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(Math.max(i, index) + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options\n) {\n  this.vm = vm;\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression = expOrFn.toString();\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = function () {};\n      \"development\" !== 'production' && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  if (this.user) {\n    try {\n      value = this.getter.call(vm, vm);\n    } catch (e) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    }\n  } else {\n    value = this.getter.call(vm, vm);\n  }\n  // \"touch\" every property so they are all tracked as\n  // dependencies for deep watching\n  if (this.deep) {\n    traverse(value);\n  }\n  popTarget();\n  this.cleanupDeps();\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n    var this$1 = this;\n\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this$1.deps[i];\n    if (!this$1.newDepIds.has(dep.id)) {\n      dep.removeSub(this$1);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n    var this$1 = this;\n\n  var i = this.deps.length;\n  while (i--) {\n    this$1.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n    var this$1 = this;\n\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this$1.deps[i].removeSub(this$1);\n    }\n    this.active = false;\n  }\n};\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nvar seenObjects = new _Set();\nfunction traverse (val) {\n  seenObjects.clear();\n  _traverse(val, seenObjects);\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch) { initWatch(vm, opts.watch); }\n}\n\nvar isReservedProp = { key: 1, ref: 1, slot: 1 };\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  observerState.shouldConvert = isRoot;\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    {\n      if (isReservedProp[key]) {\n        warn(\n          (\"\\\"\" + key + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (vm.$parent && !observerState.isSettingProps) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    }\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  observerState.shouldConvert = true;\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? data.call(vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n    \"development\" !== 'production' && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var i = keys.length;\n  while (i--) {\n    if (props && hasOwn(props, keys[i])) {\n      \"development\" !== 'production' && warn(\n        \"The data property \\\"\" + (keys[i]) + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(keys[i])) {\n      proxy(vm, \"_data\", keys[i]);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  var watchers = vm._computedWatchers = Object.create(null);\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    // create internal watcher for the computed property.\n    watchers[key] = new Watcher(vm, getter, noop, computedWatcherOptions);\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    }\n  }\n}\n\nfunction defineComputed (target, key, userDef) {\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = createComputedGetter(key);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? userDef.cache !== false\n        ? createComputedGetter(key)\n        : userDef.get\n      : noop;\n    sharedPropertyDefinition.set = userDef.set\n      ? userDef.set\n      : noop;\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    vm[key] = methods[key] == null ? noop : bind(methods[key], vm);\n    {\n      if (methods[key] == null) {\n        warn(\n          \"method \\\"\" + key + \"\\\" has an undefined value in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n    }\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (vm, key, handler) {\n  var options;\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  vm.$watch(key, handler, options);\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  {\n    dataDef.set = function (newData) {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      cb.call(vm, watcher.value);\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar hooks = { init: init, prepatch: prepatch, insert: insert, destroy: destroy };\nvar hooksToMerge = Object.keys(hooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (!Ctor) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  if (typeof Ctor !== 'function') {\n    {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  if (!Ctor.cid) {\n    if (Ctor.resolved) {\n      Ctor = Ctor.resolved;\n    } else {\n      Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {\n        // it's ok to queue this on every render because\n        // $forceUpdate is buffered by the scheduler.\n        context.$forceUpdate();\n      });\n      if (!Ctor) {\n        // return nothing if this is indeed an async component\n        // wait for the callback to trigger parent update.\n        return\n      }\n    }\n  }\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  data = data || {};\n\n  // transform component v-model data into props & events\n  if (data.model) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractProps(data, Ctor);\n\n  // functional component\n  if (Ctor.options.functional) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  data.on = data.nativeOn;\n\n  if (Ctor.options.abstract) {\n    // abstract components do not keep anything\n    // other than props & listeners\n    data = {};\n  }\n\n  // merge component management hooks onto the placeholder node\n  mergeHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }\n  );\n  return vnode\n}\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  context,\n  children\n) {\n  var props = {};\n  var propOptions = Ctor.options.props;\n  if (propOptions) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData);\n    }\n  }\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var _context = Object.create(context);\n  var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };\n  var vnode = Ctor.options.render.call(null, h, {\n    props: props,\n    data: data,\n    parent: context,\n    children: children,\n    slots: function () { return resolveSlots(children, context); }\n  });\n  if (vnode instanceof VNode) {\n    vnode.functionalContext = context;\n    if (data.slot) {\n      (vnode.data || (vnode.data = {})).slot = data.slot;\n    }\n  }\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent, // activeInstance in lifecycle state\n  parentElm,\n  refElm\n) {\n  var vnodeComponentOptions = vnode.componentOptions;\n  var options = {\n    _isComponent: true,\n    parent: parent,\n    propsData: vnodeComponentOptions.propsData,\n    _componentTag: vnodeComponentOptions.tag,\n    _parentVnode: vnode,\n    _parentListeners: vnodeComponentOptions.listeners,\n    _renderChildren: vnodeComponentOptions.children,\n    _parentElm: parentElm || null,\n    _refElm: refElm || null\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (inlineTemplate) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnodeComponentOptions.Ctor(options)\n}\n\nfunction init (\n  vnode,\n  hydrating,\n  parentElm,\n  refElm\n) {\n  if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {\n    var child = vnode.componentInstance = createComponentInstanceForVnode(\n      vnode,\n      activeInstance,\n      parentElm,\n      refElm\n    );\n    child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n  } else if (vnode.data.keepAlive) {\n    // kept-alive components, treat as a patch\n    var mountedNode = vnode; // work around flow\n    prepatch(mountedNode, mountedNode);\n  }\n}\n\nfunction prepatch (\n  oldVnode,\n  vnode\n) {\n  var options = vnode.componentOptions;\n  var child = vnode.componentInstance = oldVnode.componentInstance;\n  updateChildComponent(\n    child,\n    options.propsData, // updated props\n    options.listeners, // updated listeners\n    vnode, // new parent vnode\n    options.children // new children\n  );\n}\n\nfunction insert (vnode) {\n  if (!vnode.componentInstance._isMounted) {\n    vnode.componentInstance._isMounted = true;\n    callHook(vnode.componentInstance, 'mounted');\n  }\n  if (vnode.data.keepAlive) {\n    activateChildComponent(vnode.componentInstance, true /* direct */);\n  }\n}\n\nfunction destroy (vnode) {\n  if (!vnode.componentInstance._isDestroyed) {\n    if (!vnode.data.keepAlive) {\n      vnode.componentInstance.$destroy();\n    } else {\n      deactivateChildComponent(vnode.componentInstance, true /* direct */);\n    }\n  }\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor,\n  cb\n) {\n  if (factory.requested) {\n    // pool callbacks\n    factory.pendingCallbacks.push(cb);\n  } else {\n    factory.requested = true;\n    var cbs = factory.pendingCallbacks = [cb];\n    var sync = true;\n\n    var resolve = function (res) {\n      if (isObject(res)) {\n        res = baseCtor.extend(res);\n      }\n      // cache resolved\n      factory.resolved = res;\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        for (var i = 0, l = cbs.length; i < l; i++) {\n          cbs[i](res);\n        }\n      }\n    };\n\n    var reject = function (reason) {\n      \"development\" !== 'production' && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n    };\n\n    var res = factory(resolve, reject);\n\n    // handle promise\n    if (res && typeof res.then === 'function' && !factory.resolved) {\n      res.then(resolve, reject);\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.resolved\n  }\n}\n\nfunction extractProps (data, Ctor) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (!propOptions) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  var domProps = data.domProps;\n  if (attrs || props || domProps) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey) ||\n      checkProp(res, domProps, key, altKey);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (hash) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\nfunction mergeHooks (data) {\n  if (!data.hook) {\n    data.hook = {};\n  }\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var fromParent = data.hook[key];\n    var ours = hooks[key];\n    data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;\n  }\n}\n\nfunction mergeHook$1 (one, two) {\n  return function (a, b, c, d) {\n    one(a, b, c, d);\n    two(a, b, c, d);\n  }\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  if (on[event]) {\n    on[event] = [data.model.callback].concat(on[event]);\n  } else {\n    on[event] = data.model.callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (data && data.__ob__) {\n    \"development\" !== 'production' && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n      typeof children[0] === 'function') {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (vnode) {\n    if (ns) { applyNS(vnode, ns); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    return\n  }\n  if (vnode.children) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (child.tag && !child.ns) {\n        applyNS(child, ns);\n      }\n    }\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    keys = Object.keys(val);\n    ret = new Array(keys.length);\n    for (i = 0, l = keys.length; i < l; i++) {\n      key = keys[i];\n      ret[i] = render(val[key], key, i);\n    }\n  }\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      extend(props, bindObject);\n    }\n    return scopedSlotFn(props) || fallback\n  } else {\n    var slotNodes = this.$slots[name];\n    // warn duplicate slot usage\n    if (slotNodes && \"development\" !== 'production') {\n      slotNodes._rendered && warn(\n        \"Duplicate presence of slot \\\"\" + name + \"\\\" found in the same render tree \" +\n        \"- this will likely cause render errors.\",\n        this\n      );\n      slotNodes._rendered = true;\n    }\n    return slotNodes || fallback\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\n/**\n * Runtime helper for checking keyCodes from config.\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInAlias\n) {\n  var keyCodes = config.keyCodes[key] || builtInAlias;\n  if (Array.isArray(keyCodes)) {\n    return keyCodes.indexOf(eventKeyCode) === -1\n  } else {\n    return keyCodes !== eventKeyCode\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp\n) {\n  if (value) {\n    if (!isObject(value)) {\n      \"development\" !== 'production' && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      for (var key in value) {\n        if (key === 'class' || key === 'style') {\n          data[key] = value[key];\n        } else {\n          var type = data.attrs && data.attrs.type;\n          var hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n          hash[key] = value[key];\n        }\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var tree = this._staticTrees[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree by doing a shallow clone.\n  if (tree && !isInFor) {\n    return Array.isArray(tree)\n      ? cloneVNodes(tree)\n      : cloneVNode(tree)\n  }\n  // otherwise, render a fresh tree.\n  tree = this._staticTrees[index] =\n    this.$options.staticRenderFns[index].call(this._renderProxy);\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm.$vnode = null; // the placeholder node in parent tree\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null;\n  var parentVnode = vm.$options._parentVnode;\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n}\n\nfunction renderMixin (Vue) {\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var staticRenderFns = ref.staticRenderFns;\n    var _parentVnode = ref._parentVnode;\n\n    if (vm._isMounted) {\n      // clone slot nodes on re-renders\n      for (var key in vm.$slots) {\n        vm.$slots[key] = cloneVNodes(vm.$slots[key]);\n      }\n    }\n\n    vm.$scopedSlots = (_parentVnode && _parentVnode.data.scopedSlots) || emptyObject;\n\n    if (staticRenderFns && !vm._staticTrees) {\n      vm._staticTrees = [];\n    }\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render function\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      {\n        vnode = vm.$options.renderError\n          ? vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e)\n          : vm._vnode;\n      }\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if (\"development\" !== 'production' && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n\n  // internal render helpers.\n  // these are exposed on the instance prototype to reduce generated render\n  // code size.\n  Vue.prototype._o = markOnce;\n  Vue.prototype._n = toNumber;\n  Vue.prototype._s = _toString;\n  Vue.prototype._l = renderList;\n  Vue.prototype._t = renderSlot;\n  Vue.prototype._q = looseEqual;\n  Vue.prototype._i = looseIndexOf;\n  Vue.prototype._m = renderStatic;\n  Vue.prototype._f = resolveFilter;\n  Vue.prototype._k = checkKeyCodes;\n  Vue.prototype._b = bindObjectProps;\n  Vue.prototype._v = createTextVNode;\n  Vue.prototype._e = createEmptyVNode;\n  Vue.prototype._u = resolveScopedSlots;\n}\n\n/*  */\n\nfunction initInjections (vm) {\n  var provide = vm.$options.provide;\n  var inject = vm.$options.inject;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    // isArray here\n    var isArray = Array.isArray(inject);\n    var keys = isArray\n      ? inject\n      : hasSymbol\n        ? Reflect.ownKeys(inject)\n        : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var provideKey = isArray ? key : inject[key];\n      var source = vm;\n      while (source) {\n        if (source._provided && source._provided[provideKey]) {\n          vm[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n    }\n  }\n}\n\n/*  */\n\nvar uid = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    /* istanbul ignore if */\n    if (\"development\" !== 'production' && config.performance && perf) {\n      perf.mark('init');\n    }\n\n    var vm = this;\n    // a uid\n    vm._uid = uid++;\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    {\n      initProxy(vm);\n    }\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initState(vm);\n    initInjections(vm);\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if (\"development\" !== 'production' && config.performance && perf) {\n      vm._name = formatComponentName(vm, false);\n      perf.mark('init end');\n      perf.measure(((vm._name) + \" init\"), 'init', 'init end');\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  opts.parent = options.parent;\n  opts.propsData = options.propsData;\n  opts._parentVnode = options._parentVnode;\n  opts._parentListeners = options._parentListeners;\n  opts._renderChildren = options._renderChildren;\n  opts._componentTag = options._componentTag;\n  opts._parentElm = options._parentElm;\n  opts._refElm = options._refElm;\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = dedupe(latest[key], sealed[key]);\n    }\n  }\n  return modified\n}\n\nfunction dedupe (latest, sealed) {\n  // compare latest and sealed to ensure lifecycle hooks won't be duplicated\n  // between merges\n  if (Array.isArray(latest)) {\n    var res = [];\n    sealed = Array.isArray(sealed) ? sealed : [sealed];\n    for (var i = 0; i < latest.length; i++) {\n      if (sealed.indexOf(latest[i]) < 0) {\n        res.push(latest[i]);\n      }\n    }\n    return res\n  } else {\n    return latest\n  }\n}\n\nfunction Vue$3 (options) {\n  if (\"development\" !== 'production' &&\n    !(this instanceof Vue$3)) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue$3);\nstateMixin(Vue$3);\neventsMixin(Vue$3);\nlifecycleMixin(Vue$3);\nrenderMixin(Vue$3);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    /* istanbul ignore if */\n    if (plugin.installed) {\n      return\n    }\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    plugin.installed = true;\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    {\n      if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n        warn(\n          'Invalid component name: \"' + name + '\". Component names ' +\n          'can only contain alphanumeric characters and the hyphen, ' +\n          'and must start with a letter.'\n        );\n      }\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    config._assetTypes.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  config._assetTypes.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        {\n          if (type === 'component' && config.isReservedTag(id)) {\n            warn(\n              'Do not use built-in or reserved HTML elements as component ' +\n              'id: ' + id\n            );\n          }\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\nvar patternTypes = [String, RegExp];\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (pattern instanceof RegExp) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (cache, filter) {\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cachedNode);\n        cache[key] = null;\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (vnode) {\n  if (vnode) {\n    if (!vnode.componentInstance._inactive) {\n      callHook(vnode.componentInstance, 'deactivated');\n    }\n    vnode.componentInstance.$destroy();\n  }\n}\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n  },\n\n  destroyed: function destroyed () {\n    var this$1 = this;\n\n    for (var key in this$1.cache) {\n      pruneCacheEntry(this$1.cache[key]);\n    }\n  },\n\n  watch: {\n    include: function include (val) {\n      pruneCache(this.cache, function (name) { return matches(val, name); });\n    },\n    exclude: function exclude (val) {\n      pruneCache(this.cache, function (name) { return !matches(val, name); });\n    }\n  },\n\n  render: function render () {\n    var vnode = getFirstComponentChild(this.$slots.default);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      if (name && (\n        (this.include && !matches(this.include, name)) ||\n        (this.exclude && matches(this.exclude, name))\n      )) {\n        return vnode\n      }\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (this.cache[key]) {\n        vnode.componentInstance = this.cache[key].componentInstance;\n      } else {\n        this.cache[key] = vnode;\n      }\n      vnode.data.keepAlive = true;\n    }\n    return vnode\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  Vue.options = Object.create(null);\n  config._assetTypes.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue$3);\n\nObject.defineProperty(Vue$3.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nVue$3.version = '2.2.0';\n\n/*  */\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (childNode.componentInstance) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return genClassFromData(data)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: child.class\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction genClassFromData (data) {\n  var dynamicClass = data.class;\n  var staticClass = data.staticClass;\n  if (staticClass || dynamicClass) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  var res = '';\n  if (!value) {\n    return res\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  if (Array.isArray(value)) {\n    var stringified;\n    for (var i = 0, l = value.length; i < l; i++) {\n      if (value[i]) {\n        if ((stringified = stringifyClass(value[i]))) {\n          res += stringified + ' ';\n        }\n      }\n    }\n    return res.slice(0, -1)\n  }\n  if (isObject(value)) {\n    for (var key in value) {\n      if (value[key]) { res += key + ' '; }\n    }\n    return res.slice(0, -1)\n  }\n  /* istanbul ignore next */\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n      \"development\" !== 'production' && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setAttribute (node, key, val) {\n  node.setAttribute(key, val);\n}\n\n\nvar nodeOps = Object.freeze({\n\tcreateElement: createElement$1,\n\tcreateElementNS: createElementNS,\n\tcreateTextNode: createTextNode,\n\tcreateComment: createComment,\n\tinsertBefore: insertBefore,\n\tremoveChild: removeChild,\n\tappendChild: appendChild,\n\tparentNode: parentNode,\n\tnextSibling: nextSibling,\n\ttagName: tagName,\n\tsetTextContent: setTextContent,\n\tsetAttribute: setAttribute\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!key) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (Array.isArray(refs[key]) && refs[key].indexOf(ref) < 0) {\n        refs[key].push(ref);\n      } else {\n        refs[key] = [ref];\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n\n/*\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks$1 = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction isUndef (s) {\n  return s == null\n}\n\nfunction isDef (s) {\n  return s != null\n}\n\nfunction sameVnode (vnode1, vnode2) {\n  return (\n    vnode1.key === vnode2.key &&\n    vnode1.tag === vnode2.tag &&\n    vnode1.isComment === vnode2.isComment &&\n    !vnode1.data === !vnode2.data\n  )\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks$1.length; ++i) {\n    cbs[hooks$1[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (modules[j][hooks$1[i]] !== undefined) { cbs[hooks$1[i]].push(modules[j][hooks$1[i]]); }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (parent) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  var inPre = 0;\n  function createElm (vnode, insertedVnodeQueue, parentElm, refElm, nested) {\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      {\n        if (data && data.pre) {\n          inPre++;\n        }\n        if (\n          !inPre &&\n          !vnode.ns &&\n          !(config.ignoredElements.length && config.ignoredElements.indexOf(tag) > -1) &&\n          config.isUnknownElement(tag)\n        ) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if (\"development\" !== 'production' && data && data.pre) {\n        inPre--;\n      }\n    } else if (vnode.isComment) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */, parentElm, refElm);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        if (isReactivated) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (vnode.data.pendingInsert) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref) {\n    if (parent) {\n      if (ref) {\n        nodeOps.insertBefore(parent, elm, ref);\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (i.create) { i.create(emptyNode, vnode); }\n      if (i.insert) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    var ancestor = vnode;\n    while (ancestor) {\n      if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n        nodeOps.setAttribute(vnode.elm, i, '');\n      }\n      ancestor = ancestor.parent;\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n        i !== vnode.context &&\n        isDef(i = i.$options._scopeId)) {\n      nodeOps.setAttribute(vnode.elm, i, '');\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (rm || isDef(vnode.data)) {\n      var listeners = cbs.remove.length + 1;\n      if (!rm) {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      } else {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, elmToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : null;\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);\n          newStartVnode = newCh[++newStartIdx];\n        } else {\n          elmToMove = oldCh[idxInOld];\n          /* istanbul ignore if */\n          if (\"development\" !== 'production' && !elmToMove) {\n            warn(\n              'It seems there are duplicate keys that is causing an update error. ' +\n              'Make sure each v-for item has a unique key.'\n            );\n          }\n          if (sameVnode(elmToMove, newStartVnode)) {\n            patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, newStartVnode.elm, oldStartVnode.elm);\n            newStartVnode = newCh[++newStartIdx];\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);\n            newStartVnode = newCh[++newStartIdx];\n          }\n        }\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {\n    if (oldVnode === vnode) {\n      return\n    }\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (vnode.isStatic &&\n        oldVnode.isStatic &&\n        vnode.key === oldVnode.key &&\n        (vnode.isCloned || vnode.isOnce)) {\n      vnode.elm = oldVnode.elm;\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n    var i;\n    var data = vnode.data;\n    var hasData = isDef(data);\n    if (hasData && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n    var elm = vnode.elm = oldVnode.elm;\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (hasData && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (hasData) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (initial && vnode.parent) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var bailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  var isRenderedModule = makeMap('attrs,style,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue) {\n    {\n      if (!assertNodeMatch(elm, vnode)) {\n        return false\n      }\n    }\n    vnode.elm = elm;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          var childrenMatch = true;\n          var childNode = elm.firstChild;\n          for (var i$1 = 0; i$1 < children.length; i$1++) {\n            if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue)) {\n              childrenMatch = false;\n              break\n            }\n            childNode = childNode.nextSibling;\n          }\n          // if childNode is not null, it means the actual childNodes list is\n          // longer than the virtual children list.\n          if (!childrenMatch || childNode) {\n            if (\"development\" !== 'production' &&\n                typeof console !== 'undefined' &&\n                !bailed) {\n              bailed = true;\n              console.warn('Parent: ', elm);\n              console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n            }\n            return false\n          }\n        }\n      }\n      if (isDef(data)) {\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode) {\n    if (vnode.tag) {\n      return (\n        vnode.tag.indexOf('vue-component') === 0 ||\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {\n    if (!vnode) {\n      if (oldVnode) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (!oldVnode) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue, parentElm, refElm);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute('server-rendered')) {\n            oldVnode.removeAttribute('server-rendered');\n            hydrating = true;\n          }\n          if (hydrating) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm$1 = nodeOps.parentNode(oldElm);\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm$1,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        if (vnode.parent) {\n          // component root element replaced.\n          // update parent placeholder node element, recursively\n          var ancestor = vnode.parent;\n          while (ancestor) {\n            ancestor.elm = vnode.elm;\n            ancestor = ancestor.parent;\n          }\n          if (isPatchable(vnode)) {\n            for (var i = 0; i < cbs.create.length; ++i) {\n              cbs.create[i](emptyNode, vnode.parent);\n            }\n          }\n        }\n\n        if (parentElm$1 !== null) {\n          removeVnodes(parentElm$1, [oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  if (!oldVnode.data.attrs && !vnode.data.attrs) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (attrs.__ob__) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  /* istanbul ignore if */\n  if (isIE9 && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (attrs[key] == null) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(key, key);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(key, value);\n    }\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (!data.staticClass && !data.class &&\n      (!oldData || (!oldData.staticClass && !oldData.class))) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (transitionClass) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n  var inSingle = false;\n  var inDouble = false;\n  var inTemplateString = false;\n  var inRegex = false;\n  var curly = 0;\n  var square = 0;\n  var paren = 0;\n  var lastFilterIndex = 0;\n  var c, prev, i, expression, filters;\n\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n    } else if (inDouble) {\n      if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n    } else if (inTemplateString) {\n      if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n    } else if (inRegex) {\n      if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n    } else if (\n      c === 0x7C && // pipe\n      exp.charCodeAt(i + 1) !== 0x7C &&\n      exp.charCodeAt(i - 1) !== 0x7C &&\n      !curly && !square && !paren\n    ) {\n      if (expression === undefined) {\n        // first filter, end of expression\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 0x22: inDouble = true; break         // \"\n        case 0x27: inSingle = true; break         // '\n        case 0x60: inTemplateString = true; break // `\n        case 0x28: paren++; break                 // (\n        case 0x29: paren--; break                 // )\n        case 0x5B: square++; break                // [\n        case 0x5D: square--; break                // ]\n        case 0x7B: curly++; break                 // {\n        case 0x7D: curly--; break                 // }\n      }\n      if (c === 0x2f) { // /\n        var j = i - 1;\n        var p = (void 0);\n        // find first non-whitespace prev char\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== ' ') { break }\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n\n  if (expression === undefined) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n\n  function pushFilter () {\n    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n\n  if (filters) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i]);\n    }\n  }\n\n  return expression\n}\n\nfunction wrapFilter (exp, filter) {\n  var i = filter.indexOf('(');\n  if (i < 0) {\n    // _f: resolveFilter\n    return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n  } else {\n    var name = filter.slice(0, i);\n    var args = filter.slice(i + 1);\n    return (\"_f(\\\"\" + name + \"\\\")(\" + exp + \",\" + args)\n  }\n}\n\n/*  */\n\nfunction baseWarn (msg) {\n  console.error((\"[Vue compiler]: \" + msg));\n}\n\nfunction pluckModuleFunction (\n  modules,\n  key\n) {\n  return modules\n    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n    : []\n}\n\nfunction addProp (el, name, value) {\n  (el.props || (el.props = [])).push({ name: name, value: value });\n}\n\nfunction addAttr (el, name, value) {\n  (el.attrs || (el.attrs = [])).push({ name: name, value: value });\n}\n\nfunction addDirective (\n  el,\n  name,\n  rawName,\n  value,\n  arg,\n  modifiers\n) {\n  (el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers });\n}\n\nfunction addHandler (\n  el,\n  name,\n  value,\n  modifiers,\n  important\n) {\n  // check capture modifier\n  if (modifiers && modifiers.capture) {\n    delete modifiers.capture;\n    name = '!' + name; // mark the event as captured\n  }\n  if (modifiers && modifiers.once) {\n    delete modifiers.once;\n    name = '~' + name; // mark the event as once\n  }\n  var events;\n  if (modifiers && modifiers.native) {\n    delete modifiers.native;\n    events = el.nativeEvents || (el.nativeEvents = {});\n  } else {\n    events = el.events || (el.events = {});\n  }\n  var newHandler = { value: value, modifiers: modifiers };\n  var handlers = events[name];\n  /* istanbul ignore if */\n  if (Array.isArray(handlers)) {\n    important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n  } else if (handlers) {\n    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n  } else {\n    events[name] = newHandler;\n  }\n}\n\nfunction getBindingAttr (\n  el,\n  name,\n  getStatic\n) {\n  var dynamicValue =\n    getAndRemoveAttr(el, ':' + name) ||\n    getAndRemoveAttr(el, 'v-bind:' + name);\n  if (dynamicValue != null) {\n    return parseFilters(dynamicValue)\n  } else if (getStatic !== false) {\n    var staticValue = getAndRemoveAttr(el, name);\n    if (staticValue != null) {\n      return JSON.stringify(staticValue)\n    }\n  }\n}\n\nfunction getAndRemoveAttr (el, name) {\n  var val;\n  if ((val = el.attrsMap[name]) != null) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n      if (list[i].name === name) {\n        list.splice(i, 1);\n        break\n      }\n    }\n  }\n  return val\n}\n\n/*  */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n  el,\n  value,\n  modifiers\n) {\n  var ref = modifiers || {};\n  var number = ref.number;\n  var trim = ref.trim;\n\n  var baseValueExpression = '$$v';\n  var valueExpression = baseValueExpression;\n  if (trim) {\n    valueExpression =\n      \"(typeof \" + baseValueExpression + \" === 'string'\" +\n        \"? \" + baseValueExpression + \".trim()\" +\n        \": \" + baseValueExpression + \")\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n  var assignment = genAssignmentCode(value, valueExpression);\n\n  el.model = {\n    value: (\"(\" + value + \")\"),\n    callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n  };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n  value,\n  assignment\n) {\n  var modelRs = parseModel(value);\n  if (modelRs.idx === null) {\n    return (value + \"=\" + assignment)\n  } else {\n    return \"var $$exp = \" + (modelRs.exp) + \", $$idx = \" + (modelRs.idx) + \";\" +\n      \"if (!Array.isArray($$exp)){\" +\n        value + \"=\" + assignment + \"}\" +\n      \"else{$$exp.splice($$idx, 1, \" + assignment + \")}\"\n  }\n}\n\n/**\n * parse directive model to do the array update transform. a[idx] = val => $$a.splice($$idx, 1, val)\n *\n * for loop possible cases:\n *\n * - test\n * - test[idx]\n * - test[test1[idx]]\n * - test[\"a\"][idx]\n * - xxx.test[a[a].test1[idx]]\n * - test.xxx.a[\"asa\"][test1[idx]]\n *\n */\n\nvar len;\nvar str;\nvar chr;\nvar index$1;\nvar expressionPos;\nvar expressionEndPos;\n\nfunction parseModel (val) {\n  str = val;\n  len = str.length;\n  index$1 = expressionPos = expressionEndPos = 0;\n\n  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n    return {\n      exp: val,\n      idx: null\n    }\n  }\n\n  while (!eof()) {\n    chr = next();\n    /* istanbul ignore if */\n    if (isStringStart(chr)) {\n      parseString(chr);\n    } else if (chr === 0x5B) {\n      parseBracket(chr);\n    }\n  }\n\n  return {\n    exp: val.substring(0, expressionPos),\n    idx: val.substring(expressionPos + 1, expressionEndPos)\n  }\n}\n\nfunction next () {\n  return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n  return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n  return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n  var inBracket = 1;\n  expressionPos = index$1;\n  while (!eof()) {\n    chr = next();\n    if (isStringStart(chr)) {\n      parseString(chr);\n      continue\n    }\n    if (chr === 0x5B) { inBracket++; }\n    if (chr === 0x5D) { inBracket--; }\n    if (inBracket === 0) {\n      expressionEndPos = index$1;\n      break\n    }\n  }\n}\n\nfunction parseString (chr) {\n  var stringQuote = chr;\n  while (!eof()) {\n    chr = next();\n    if (chr === stringQuote) {\n      break\n    }\n  }\n}\n\n/*  */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n  el,\n  dir,\n  _warn\n) {\n  warn$1 = _warn;\n  var value = dir.value;\n  var modifiers = dir.modifiers;\n  var tag = el.tag;\n  var type = el.attrsMap.type;\n\n  {\n    var dynamicType = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n    if (tag === 'input' && dynamicType) {\n      warn$1(\n        \"<input :type=\\\"\" + dynamicType + \"\\\" v-model=\\\"\" + value + \"\\\">:\\n\" +\n        \"v-model does not support dynamic input types. Use v-if branches instead.\"\n      );\n    }\n    // inputs with type=\"file\" are read only and setting the input's\n    // value will throw an error.\n    if (tag === 'input' && type === 'file') {\n      warn$1(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n        \"File inputs are read only. Use a v-on:change listener instead.\"\n      );\n    }\n  }\n\n  if (tag === 'select') {\n    genSelect(el, value, modifiers);\n  } else if (tag === 'input' && type === 'checkbox') {\n    genCheckboxModel(el, value, modifiers);\n  } else if (tag === 'input' && type === 'radio') {\n    genRadioModel(el, value, modifiers);\n  } else if (tag === 'input' || tag === 'textarea') {\n    genDefaultModel(el, value, modifiers);\n  } else if (!config.isReservedTag(tag)) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n      \"v-model is not supported on this element type. \" +\n      'If you are working with contenteditable, it\\'s recommended to ' +\n      'wrap a library dedicated for that purpose inside a custom component.'\n    );\n  }\n\n  // ensure runtime directive metadata\n  return true\n}\n\nfunction genCheckboxModel (\n  el,\n  value,\n  modifiers\n) {\n  if (\"development\" !== 'production' &&\n    el.attrsMap.checked != null) {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n      \"inline checked attributes will be ignored when using v-model. \" +\n      'Declare initial values in the component\\'s data option instead.'\n    );\n  }\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n  addProp(el, 'checked',\n    \"Array.isArray(\" + value + \")\" +\n      \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n        trueValueBinding === 'true'\n          ? (\":(\" + value + \")\")\n          : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n      )\n  );\n  addHandler(el, CHECKBOX_RADIO_TOKEN,\n    \"var $$a=\" + value + \",\" +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n    'if(Array.isArray($$a)){' +\n      \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n          '$$i=_i($$a,$$v);' +\n      \"if($$c){$$i<0&&(\" + value + \"=$$a.concat($$v))}\" +\n      \"else{$$i>-1&&(\" + value + \"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}\" +\n    \"}else{\" + value + \"=$$c}\",\n    null, true\n  );\n}\n\nfunction genRadioModel (\n    el,\n    value,\n    modifiers\n) {\n  if (\"development\" !== 'production' &&\n    el.attrsMap.checked != null) {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n      \"inline checked attributes will be ignored when using v-model. \" +\n      'Declare initial values in the component\\'s data option instead.'\n    );\n  }\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n  addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n  addHandler(el, CHECKBOX_RADIO_TOKEN, genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n    el,\n    value,\n    modifiers\n) {\n  {\n    el.children.some(checkOptionWarning);\n  }\n\n  var number = modifiers && modifiers.number;\n  var selectedVal = \"Array.prototype.filter\" +\n    \".call($event.target.options,function(o){return o.selected})\" +\n    \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n    \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n  var code = \"var $$selectedVal = \" + selectedVal + \";\";\n  code = code + \" \" + (genAssignmentCode(value, assignment));\n  addHandler(el, 'change', code, null, true);\n}\n\nfunction checkOptionWarning (option) {\n  if (option.type === 1 &&\n    option.tag === 'option' &&\n    option.attrsMap.selected != null) {\n    warn$1(\n      \"<select v-model=\\\"\" + (option.parent.attrsMap['v-model']) + \"\\\">:\\n\" +\n      'inline selected attributes on <option> will be ignored when using v-model. ' +\n      'Declare initial values in the component\\'s data option instead.'\n    );\n    return true\n  }\n  return false\n}\n\nfunction genDefaultModel (\n  el,\n  value,\n  modifiers\n) {\n  var type = el.attrsMap.type;\n  var ref = modifiers || {};\n  var lazy = ref.lazy;\n  var number = ref.number;\n  var trim = ref.trim;\n  var needCompositionGuard = !lazy && type !== 'range';\n  var event = lazy\n    ? 'change'\n    : type === 'range'\n      ? RANGE_TOKEN\n      : 'input';\n\n  var valueExpression = '$event.target.value';\n  if (trim) {\n    valueExpression = \"$event.target.value.trim()\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n\n  var code = genAssignmentCode(value, valueExpression);\n  if (needCompositionGuard) {\n    code = \"if($event.target.composing)return;\" + code;\n  }\n\n  addProp(el, 'value', (\"(\" + value + \")\"));\n  addHandler(el, event, code, null, true);\n  if (trim || number || type === 'number') {\n    addHandler(el, 'blur', '$forceUpdate()');\n  }\n}\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  var event;\n  /* istanbul ignore if */\n  if (on[RANGE_TOKEN]) {\n    // IE input[type=range] only supports `change` event\n    event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  if (on[CHECKBOX_RADIO_TOKEN]) {\n    // Chrome fires microtasks in between click/change, leads to #4521\n    event = isChrome ? 'click' : 'change';\n    on[event] = [].concat(on[CHECKBOX_RADIO_TOKEN], on[event] || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction add$1 (\n  event,\n  handler,\n  once,\n  capture\n) {\n  if (once) {\n    var oldHandler = handler;\n    var _target = target$1; // save current target element in closure\n    handler = function (ev) {\n      var res = arguments.length === 1\n        ? oldHandler(ev)\n        : oldHandler.apply(null, arguments);\n      if (res !== null) {\n        remove$2(event, handler, capture, _target);\n      }\n    };\n  }\n  target$1.addEventListener(event, handler, capture);\n}\n\nfunction remove$2 (\n  event,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(event, handler, capture);\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (!oldVnode.data.on && !vnode.data.on) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, vnode.context);\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (!oldVnode.data.domProps && !vnode.data.domProps) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (props.__ob__) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (props[key] == null) {\n      elm[key] = '';\n    }\n  }\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n    }\n\n    if (key === 'value') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = cur == null ? '' : String(cur);\n      if (shouldUpdateValue(elm, vnode, strCur)) {\n        elm.value = strCur;\n      }\n    } else {\n      elm[key] = cur;\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (\n  elm,\n  vnode,\n  checkVal\n) {\n  return (!elm.composing && (\n    vnode.tag === 'option' ||\n    isDirty(elm, checkVal) ||\n    isInputChanged(elm, checkVal)\n  ))\n}\n\nfunction isDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is not equal to the updated value\n  return document.activeElement !== elm && elm.value !== checkVal\n}\n\nfunction isInputChanged (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if ((modifiers && modifiers.number) || elm.type === 'number') {\n    return toNumber(value) !== toNumber(newVal)\n  }\n  if (modifiers && modifiers.trim) {\n    return value.trim() !== newVal.trim()\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (childNode.data && (styleData = normalizeStyleData(childNode.data))) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(name, val.replace(importantRE, ''), 'important');\n  } else {\n    el.style[normalize(name)] = val;\n  }\n};\n\nvar prefixes = ['Webkit', 'Moz', 'ms'];\n\nvar testEl;\nvar normalize = cached(function (prop) {\n  testEl = testEl || document.createElement('div');\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in testEl.style)) {\n    return prop\n  }\n  var upper = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefixed = prefixes[i] + upper;\n    if (prefixed in testEl.style) {\n      return prefixed\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (!data.staticStyle && !data.style &&\n      !oldData.staticStyle && !oldData.style) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldVnode.data.staticStyle;\n  var oldStyleBinding = oldVnode.data.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  vnode.data.style = style.__ob__ ? extend({}, style) : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (newStyle[name] == null) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    el.setAttribute('class', cur.trim());\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser && window.requestAnimationFrame\n  ? window.requestAnimationFrame.bind(window)\n  : setTimeout;\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  (el._transitionClasses || (el._transitionClasses = [])).push(cls);\n  addClass(el, cls);\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  var transitioneDelays = styles[transitionProp + 'Delay'].split(', ');\n  var transitionDurations = styles[transitionProp + 'Duration'].split(', ');\n  var transitionTimeout = getTimeout(transitioneDelays, transitionDurations);\n  var animationDelays = styles[animationProp + 'Delay'].split(', ');\n  var animationDurations = styles[animationProp + 'Duration'].split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\nfunction toMs (s) {\n  return Number(s.slice(0, -1)) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (el._leaveCb) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (!data) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (el._enterCb || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    transitionNode = transitionNode.parent;\n    context = transitionNode.context;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if (\"development\" !== 'production' && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookAgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n          pendingNode.tag === vnode.tag &&\n          pendingNode.elm._leaveCb) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      addTransitionClass(el, toClass);\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled && !userWantsControl) {\n        if (isValidDuration(explicitEnterDuration)) {\n          setTimeout(cb, explicitEnterDuration);\n        } else {\n          whenTransitionEnds(el, type, cb);\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (el._enterCb) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (!data) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (el._leaveCb || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookAgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if (\"development\" !== 'production' && explicitLeaveDuration != null) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        addTransitionClass(el, leaveToClass);\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled && !userWantsControl) {\n          if (isValidDuration(explicitLeaveDuration)) {\n            setTimeout(cb, explicitLeaveDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookAgumentsLength (fn) {\n  if (!fn) { return false }\n  var invokerFns = fn.fns;\n  if (invokerFns) {\n    // invoker\n    return getHookAgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (!vnode.data.show) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (!vnode.data.show) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar model$1 = {\n  inserted: function inserted (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      var cb = function () {\n        setSelected(el, binding, vnode.context);\n      };\n      cb();\n      /* istanbul ignore if */\n      if (isIE || isEdge) {\n        setTimeout(cb, 0);\n      }\n    } else if (vnode.tag === 'textarea' || el.type === 'text') {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        if (!isAndroid) {\n          el.addEventListener('compositionstart', onCompositionStart);\n          el.addEventListener('compositionend', onCompositionEnd);\n        }\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var needReset = el.multiple\n        ? binding.value.some(function (v) { return hasNoMatchingOption(v, el.options); })\n        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, el.options);\n      if (needReset) {\n        trigger(el, 'change');\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n    \"development\" !== 'production' && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  for (var i = 0, l = options.length; i < l; i++) {\n    if (looseEqual(getValue(options[i]), value)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition && !isIE9) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (value === oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition = vnode.data && vnode.data.transition;\n    if (transition && !isIE9) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: model$1,\n  show: show\n};\n\n/*  */\n\n// Provides transition support for a single element/component.\n// supports transition mode (out-in / in-out)\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  return /\\d-keep-alive$/.test(rawChild.tag)\n    ? h('keep-alive')\n    : null\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(function (c) { return c.tag; });\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if (\"development\" !== 'production' && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if (\"development\" !== 'production' &&\n        mode && mode !== 'in-out' && mode !== 'out-in') {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {\n      child.data.show = true;\n    }\n\n    if (oldChild && oldChild.data && !isSameChild(child, oldChild)) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild && (oldChild.data.transition = extend({}, data));\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\n// Provides transition support for list items.\n// supports move transitions using the FLIP technique.\n\n// Because the vdom's children update algorithm is \"unstable\" - i.e.\n// it doesn't guarantee the relative positioning of removed elements,\n// we force transition-group to update its children into two passes:\n// in the first pass, we remove all nodes that need to be removed,\n// triggering their leaving transition; in the second pass, we insert/move\n// into the final disired state. This way in the second pass removed\n// nodes will remain where they should be.\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  beforeUpdate: function beforeUpdate () {\n    // force removing pass\n    this.__patch__(\n      this._vnode,\n      this.kept,\n      false, // hydrating\n      true // removeOnly (!important, avoids unnecessary moves)\n    );\n    this._vnode = this.kept;\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    var body = document.body;\n    var f = body.offsetHeight; // eslint-disable-line\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      if (this._hasMove != null) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue$3.config.mustUseProp = mustUseProp;\nVue$3.config.isReservedTag = isReservedTag;\nVue$3.config.getTagNamespace = getTagNamespace;\nVue$3.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue$3.options.directives, platformDirectives);\nextend(Vue$3.options.components, platformComponents);\n\n// install platform patch function\nVue$3.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue$3.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nsetTimeout(function () {\n  if (config.devtools) {\n    if (devtools) {\n      devtools.emit('init', Vue$3);\n    } else if (\"development\" !== 'production' && isChrome) {\n      console[console.info ? 'info' : 'log'](\n        'Download the Vue Devtools extension for a better development experience:\\n' +\n        'https://github.com/vuejs/vue-devtools'\n      );\n    }\n  }\n  if (\"development\" !== 'production' &&\n      config.productionTip !== false &&\n      inBrowser && typeof console !== 'undefined') {\n    console[console.info ? 'info' : 'log'](\n      \"You are running Vue in development mode.\\n\" +\n      \"Make sure to turn on production mode when deploying for production.\\n\" +\n      \"See more tips at https://vuejs.org/guide/deployment.html\"\n    );\n  }\n}, 0);\n\n/*  */\n\n// check whether current browser encodes a char inside attribute values\nfunction shouldDecode (content, encoded) {\n  var div = document.createElement('div');\n  div.innerHTML = \"<div a=\\\"\" + content + \"\\\">\";\n  return div.innerHTML.indexOf(encoded) > 0\n}\n\n// #3663\n// IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? shouldDecode('\\n', '&#10;') : false;\n\n/*  */\n\nvar isUnaryTag = makeMap(\n  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n  'link,meta,param,source,track,wbr',\n  true\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',\n  true\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n  'title,tr,track',\n  true\n);\n\n/*  */\n\nvar decoder;\n\nfunction decode (html) {\n  decoder = decoder || document.createElement('div');\n  decoder.innerHTML = html;\n  return decoder.textContent\n}\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n/*!\n * HTML Parser By John Resig (ejohn.org)\n * Modified by Juriy \"kangax\" Zaytsev\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n */\n\n// Regular Expressions for parsing tags and attributes\nvar singleAttrIdentifier = /([^\\s\"'<>/=]+)/;\nvar singleAttrAssign = /(?:=)/;\nvar singleAttrValues = [\n  // attr value double quotes\n  /\"([^\"]*)\"+/.source,\n  // attr value, single quotes\n  /'([^']*)'+/.source,\n  // attr value, no quotes\n  /([^\\s\"'=<>`]+)/.source\n];\nvar attribute = new RegExp(\n  '^\\\\s*' + singleAttrIdentifier.source +\n  '(?:\\\\s*(' + singleAttrAssign.source + ')' +\n  '\\\\s*(?:' + singleAttrValues.join('|') + '))?'\n);\n\n// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName\n// but for Vue templates we can enforce a simple charset\nvar ncname = '[a-zA-Z_][\\\\w\\\\-\\\\.]*';\nvar qnameCapture = '((?:' + ncname + '\\\\:)?' + ncname + ')';\nvar startTagOpen = new RegExp('^<' + qnameCapture);\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp('^<\\\\/' + qnameCapture + '[^>]*>');\nvar doctype = /^<!DOCTYPE [^>]+>/i;\nvar comment = /^<!--/;\nvar conditionalComment = /^<!\\[/;\n\nvar IS_REGEX_CAPTURING_BROKEN = false;\n'x'.replace(/x(.)?/g, function (m, g) {\n  IS_REGEX_CAPTURING_BROKEN = g === '';\n});\n\n// Special Elements (can contain anything)\nvar isScriptOrStyle = makeMap('script,style', true);\nvar reCache = {};\n\nvar decodingMap = {\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&amp;': '&',\n  '&#10;': '\\n'\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#10);/g;\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n  return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n  var stack = [];\n  var expectHTML = options.expectHTML;\n  var isUnaryTag$$1 = options.isUnaryTag || no;\n  var index = 0;\n  var last, lastTag;\n  while (html) {\n    last = html;\n    // Make sure we're not in a script or style element\n    if (!lastTag || !isScriptOrStyle(lastTag)) {\n      var textEnd = html.indexOf('<');\n      if (textEnd === 0) {\n        // Comment:\n        if (comment.test(html)) {\n          var commentEnd = html.indexOf('-->');\n\n          if (commentEnd >= 0) {\n            advance(commentEnd + 3);\n            continue\n          }\n        }\n\n        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n        if (conditionalComment.test(html)) {\n          var conditionalEnd = html.indexOf(']>');\n\n          if (conditionalEnd >= 0) {\n            advance(conditionalEnd + 2);\n            continue\n          }\n        }\n\n        // Doctype:\n        var doctypeMatch = html.match(doctype);\n        if (doctypeMatch) {\n          advance(doctypeMatch[0].length);\n          continue\n        }\n\n        // End tag:\n        var endTagMatch = html.match(endTag);\n        if (endTagMatch) {\n          var curIndex = index;\n          advance(endTagMatch[0].length);\n          parseEndTag(endTagMatch[1], curIndex, index);\n          continue\n        }\n\n        // Start tag:\n        var startTagMatch = parseStartTag();\n        if (startTagMatch) {\n          handleStartTag(startTagMatch);\n          continue\n        }\n      }\n\n      var text = (void 0), rest$1 = (void 0), next = (void 0);\n      if (textEnd >= 0) {\n        rest$1 = html.slice(textEnd);\n        while (\n          !endTag.test(rest$1) &&\n          !startTagOpen.test(rest$1) &&\n          !comment.test(rest$1) &&\n          !conditionalComment.test(rest$1)\n        ) {\n          // < in plain text, be forgiving and treat it as text\n          next = rest$1.indexOf('<', 1);\n          if (next < 0) { break }\n          textEnd += next;\n          rest$1 = html.slice(textEnd);\n        }\n        text = html.substring(0, textEnd);\n        advance(textEnd);\n      }\n\n      if (textEnd < 0) {\n        text = html;\n        html = '';\n      }\n\n      if (options.chars && text) {\n        options.chars(text);\n      }\n    } else {\n      var stackedTag = lastTag.toLowerCase();\n      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n      var endTagLength = 0;\n      var rest = html.replace(reStackedTag, function (all, text, endTag) {\n        endTagLength = endTag.length;\n        if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') {\n          text = text\n            .replace(/<!--([\\s\\S]*?)-->/g, '$1')\n            .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n        }\n        if (options.chars) {\n          options.chars(text);\n        }\n        return ''\n      });\n      index += html.length - rest.length;\n      html = rest;\n      parseEndTag(stackedTag, index - endTagLength, index);\n    }\n\n    if (html === last) {\n      options.chars && options.chars(html);\n      if (\"development\" !== 'production' && !stack.length && options.warn) {\n        options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"));\n      }\n      break\n    }\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function advance (n) {\n    index += n;\n    html = html.substring(n);\n  }\n\n  function parseStartTag () {\n    var start = html.match(startTagOpen);\n    if (start) {\n      var match = {\n        tagName: start[1],\n        attrs: [],\n        start: index\n      };\n      advance(start[0].length);\n      var end, attr;\n      while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n        advance(attr[0].length);\n        match.attrs.push(attr);\n      }\n      if (end) {\n        match.unarySlash = end[1];\n        advance(end[0].length);\n        match.end = index;\n        return match\n      }\n    }\n  }\n\n  function handleStartTag (match) {\n    var tagName = match.tagName;\n    var unarySlash = match.unarySlash;\n\n    if (expectHTML) {\n      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n        parseEndTag(lastTag);\n      }\n      if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\n        parseEndTag(tagName);\n      }\n    }\n\n    var unary = isUnaryTag$$1(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash;\n\n    var l = match.attrs.length;\n    var attrs = new Array(l);\n    for (var i = 0; i < l; i++) {\n      var args = match.attrs[i];\n      // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n      if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n        if (args[3] === '') { delete args[3]; }\n        if (args[4] === '') { delete args[4]; }\n        if (args[5] === '') { delete args[5]; }\n      }\n      var value = args[3] || args[4] || args[5] || '';\n      attrs[i] = {\n        name: args[1],\n        value: decodeAttr(\n          value,\n          options.shouldDecodeNewlines\n        )\n      };\n    }\n\n    if (!unary) {\n      stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs });\n      lastTag = tagName;\n    }\n\n    if (options.start) {\n      options.start(tagName, attrs, unary, match.start, match.end);\n    }\n  }\n\n  function parseEndTag (tagName, start, end) {\n    var pos, lowerCasedTagName;\n    if (start == null) { start = index; }\n    if (end == null) { end = index; }\n\n    if (tagName) {\n      lowerCasedTagName = tagName.toLowerCase();\n    }\n\n    // Find the closest opened tag of the same type\n    if (tagName) {\n      for (pos = stack.length - 1; pos >= 0; pos--) {\n        if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n          break\n        }\n      }\n    } else {\n      // If no tag name is provided, clean shop\n      pos = 0;\n    }\n\n    if (pos >= 0) {\n      // Close all the open elements, up the stack\n      for (var i = stack.length - 1; i >= pos; i--) {\n        if (\"development\" !== 'production' &&\n            (i > pos || !tagName) &&\n            options.warn) {\n          options.warn(\n            (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\")\n          );\n        }\n        if (options.end) {\n          options.end(stack[i].tag, start, end);\n        }\n      }\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n      lastTag = pos && stack[pos - 1].tag;\n    } else if (lowerCasedTagName === 'br') {\n      if (options.start) {\n        options.start(tagName, [], true, start, end);\n      }\n    } else if (lowerCasedTagName === 'p') {\n      if (options.start) {\n        options.start(tagName, [], false, start, end);\n      }\n      if (options.end) {\n        options.end(tagName, start, end);\n      }\n    }\n  }\n}\n\n/*  */\n\nvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n  var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n  var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n  return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\nfunction parseText (\n  text,\n  delimiters\n) {\n  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n  if (!tagRE.test(text)) {\n    return\n  }\n  var tokens = [];\n  var lastIndex = tagRE.lastIndex = 0;\n  var match, index;\n  while ((match = tagRE.exec(text))) {\n    index = match.index;\n    // push text token\n    if (index > lastIndex) {\n      tokens.push(JSON.stringify(text.slice(lastIndex, index)));\n    }\n    // tag token\n    var exp = parseFilters(match[1].trim());\n    tokens.push((\"_s(\" + exp + \")\"));\n    lastIndex = index + match[0].length;\n  }\n  if (lastIndex < text.length) {\n    tokens.push(JSON.stringify(text.slice(lastIndex)));\n  }\n  return tokens.join('+')\n}\n\n/*  */\n\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /(.*?)\\s+(?:in|of)\\s+(.*)/;\nvar forIteratorRE = /\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/;\nvar bindRE = /^:|^v-bind:/;\nvar onRE = /^@|^v-on:/;\nvar argRE = /:(.*)$/;\nvar modifierRE = /\\.[^.]+/g;\n\nvar decodeHTMLCached = cached(decode);\n\n// configurable state\nvar warn$2;\nvar platformGetTagNamespace;\nvar platformMustUseProp;\nvar platformIsPreTag;\nvar preTransforms;\nvar transforms;\nvar postTransforms;\nvar delimiters;\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n  template,\n  options\n) {\n  warn$2 = options.warn || baseWarn;\n  platformGetTagNamespace = options.getTagNamespace || no;\n  platformMustUseProp = options.mustUseProp || no;\n  platformIsPreTag = options.isPreTag || no;\n  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n  transforms = pluckModuleFunction(options.modules, 'transformNode');\n  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n  delimiters = options.delimiters;\n\n  var stack = [];\n  var preserveWhitespace = options.preserveWhitespace !== false;\n  var root;\n  var currentParent;\n  var inVPre = false;\n  var inPre = false;\n  var warned = false;\n\n  function endPre (element) {\n    // check pre state\n    if (element.pre) {\n      inVPre = false;\n    }\n    if (platformIsPreTag(element.tag)) {\n      inPre = false;\n    }\n  }\n\n  parseHTML(template, {\n    warn: warn$2,\n    expectHTML: options.expectHTML,\n    isUnaryTag: options.isUnaryTag,\n    shouldDecodeNewlines: options.shouldDecodeNewlines,\n    start: function start (tag, attrs, unary) {\n      // check namespace.\n      // inherit parent ns if there is one\n      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n      // handle IE svg bug\n      /* istanbul ignore if */\n      if (isIE && ns === 'svg') {\n        attrs = guardIESVGBug(attrs);\n      }\n\n      var element = {\n        type: 1,\n        tag: tag,\n        attrsList: attrs,\n        attrsMap: makeAttrsMap(attrs),\n        parent: currentParent,\n        children: []\n      };\n      if (ns) {\n        element.ns = ns;\n      }\n\n      if (isForbiddenTag(element) && !isServerRendering()) {\n        element.forbidden = true;\n        \"development\" !== 'production' && warn$2(\n          'Templates should only be responsible for mapping the state to the ' +\n          'UI. Avoid placing tags with side-effects in your templates, such as ' +\n          \"<\" + tag + \">\" + ', as they will not be parsed.'\n        );\n      }\n\n      // apply pre-transforms\n      for (var i = 0; i < preTransforms.length; i++) {\n        preTransforms[i](element, options);\n      }\n\n      if (!inVPre) {\n        processPre(element);\n        if (element.pre) {\n          inVPre = true;\n        }\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = true;\n      }\n      if (inVPre) {\n        processRawAttrs(element);\n      } else {\n        processFor(element);\n        processIf(element);\n        processOnce(element);\n        processKey(element);\n\n        // determine whether this is a plain element after\n        // removing structural attributes\n        element.plain = !element.key && !attrs.length;\n\n        processRef(element);\n        processSlot(element);\n        processComponent(element);\n        for (var i$1 = 0; i$1 < transforms.length; i$1++) {\n          transforms[i$1](element, options);\n        }\n        processAttrs(element);\n      }\n\n      function checkRootConstraints (el) {\n        if (\"development\" !== 'production' && !warned) {\n          if (el.tag === 'slot' || el.tag === 'template') {\n            warned = true;\n            warn$2(\n              \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n              'contain multiple nodes.'\n            );\n          }\n          if (el.attrsMap.hasOwnProperty('v-for')) {\n            warned = true;\n            warn$2(\n              'Cannot use v-for on stateful component root element because ' +\n              'it renders multiple elements.'\n            );\n          }\n        }\n      }\n\n      // tree management\n      if (!root) {\n        root = element;\n        checkRootConstraints(root);\n      } else if (!stack.length) {\n        // allow root elements with v-if, v-else-if and v-else\n        if (root.if && (element.elseif || element.else)) {\n          checkRootConstraints(element);\n          addIfCondition(root, {\n            exp: element.elseif,\n            block: element\n          });\n        } else if (\"development\" !== 'production' && !warned) {\n          warned = true;\n          warn$2(\n            \"Component template should contain exactly one root element. \" +\n            \"If you are using v-if on multiple elements, \" +\n            \"use v-else-if to chain them instead.\"\n          );\n        }\n      }\n      if (currentParent && !element.forbidden) {\n        if (element.elseif || element.else) {\n          processIfConditions(element, currentParent);\n        } else if (element.slotScope) { // scoped slot\n          currentParent.plain = false;\n          var name = element.slotTarget || '\"default\"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n        } else {\n          currentParent.children.push(element);\n          element.parent = currentParent;\n        }\n      }\n      if (!unary) {\n        currentParent = element;\n        stack.push(element);\n      } else {\n        endPre(element);\n      }\n      // apply post-transforms\n      for (var i$2 = 0; i$2 < postTransforms.length; i$2++) {\n        postTransforms[i$2](element, options);\n      }\n    },\n\n    end: function end () {\n      // remove trailing whitespace\n      var element = stack[stack.length - 1];\n      var lastNode = element.children[element.children.length - 1];\n      if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {\n        element.children.pop();\n      }\n      // pop stack\n      stack.length -= 1;\n      currentParent = stack[stack.length - 1];\n      endPre(element);\n    },\n\n    chars: function chars (text) {\n      if (!currentParent) {\n        if (\"development\" !== 'production' && !warned && text === template) {\n          warned = true;\n          warn$2(\n            'Component template requires a root element, rather than just text.'\n          );\n        }\n        return\n      }\n      // IE textarea placeholder bug\n      /* istanbul ignore if */\n      if (isIE &&\n          currentParent.tag === 'textarea' &&\n          currentParent.attrsMap.placeholder === text) {\n        return\n      }\n      var children = currentParent.children;\n      text = inPre || text.trim()\n        ? decodeHTMLCached(text)\n        // only preserve whitespace if its not right after a starting tag\n        : preserveWhitespace && children.length ? ' ' : '';\n      if (text) {\n        var expression;\n        if (!inVPre && text !== ' ' && (expression = parseText(text, delimiters))) {\n          children.push({\n            type: 2,\n            expression: expression,\n            text: text\n          });\n        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n          children.push({\n            type: 3,\n            text: text\n          });\n        }\n      }\n    }\n  });\n  return root\n}\n\nfunction processPre (el) {\n  if (getAndRemoveAttr(el, 'v-pre') != null) {\n    el.pre = true;\n  }\n}\n\nfunction processRawAttrs (el) {\n  var l = el.attrsList.length;\n  if (l) {\n    var attrs = el.attrs = new Array(l);\n    for (var i = 0; i < l; i++) {\n      attrs[i] = {\n        name: el.attrsList[i].name,\n        value: JSON.stringify(el.attrsList[i].value)\n      };\n    }\n  } else if (!el.pre) {\n    // non root node in pre blocks with no attributes\n    el.plain = true;\n  }\n}\n\nfunction processKey (el) {\n  var exp = getBindingAttr(el, 'key');\n  if (exp) {\n    if (\"development\" !== 'production' && el.tag === 'template') {\n      warn$2(\"<template> cannot be keyed. Place the key on real elements instead.\");\n    }\n    el.key = exp;\n  }\n}\n\nfunction processRef (el) {\n  var ref = getBindingAttr(el, 'ref');\n  if (ref) {\n    el.ref = ref;\n    el.refInFor = checkInFor(el);\n  }\n}\n\nfunction processFor (el) {\n  var exp;\n  if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n    var inMatch = exp.match(forAliasRE);\n    if (!inMatch) {\n      \"development\" !== 'production' && warn$2(\n        (\"Invalid v-for expression: \" + exp)\n      );\n      return\n    }\n    el.for = inMatch[2].trim();\n    var alias = inMatch[1].trim();\n    var iteratorMatch = alias.match(forIteratorRE);\n    if (iteratorMatch) {\n      el.alias = iteratorMatch[1].trim();\n      el.iterator1 = iteratorMatch[2].trim();\n      if (iteratorMatch[3]) {\n        el.iterator2 = iteratorMatch[3].trim();\n      }\n    } else {\n      el.alias = alias;\n    }\n  }\n}\n\nfunction processIf (el) {\n  var exp = getAndRemoveAttr(el, 'v-if');\n  if (exp) {\n    el.if = exp;\n    addIfCondition(el, {\n      exp: exp,\n      block: el\n    });\n  } else {\n    if (getAndRemoveAttr(el, 'v-else') != null) {\n      el.else = true;\n    }\n    var elseif = getAndRemoveAttr(el, 'v-else-if');\n    if (elseif) {\n      el.elseif = elseif;\n    }\n  }\n}\n\nfunction processIfConditions (el, parent) {\n  var prev = findPrevElement(parent.children);\n  if (prev && prev.if) {\n    addIfCondition(prev, {\n      exp: el.elseif,\n      block: el\n    });\n  } else {\n    warn$2(\n      \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n      \"used on element <\" + (el.tag) + \"> without corresponding v-if.\"\n    );\n  }\n}\n\nfunction findPrevElement (children) {\n  var i = children.length;\n  while (i--) {\n    if (children[i].type === 1) {\n      return children[i]\n    } else {\n      if (\"development\" !== 'production' && children[i].text !== ' ') {\n        warn$2(\n          \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n          \"will be ignored.\"\n        );\n      }\n      children.pop();\n    }\n  }\n}\n\nfunction addIfCondition (el, condition) {\n  if (!el.ifConditions) {\n    el.ifConditions = [];\n  }\n  el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n  var once$$1 = getAndRemoveAttr(el, 'v-once');\n  if (once$$1 != null) {\n    el.once = true;\n  }\n}\n\nfunction processSlot (el) {\n  if (el.tag === 'slot') {\n    el.slotName = getBindingAttr(el, 'name');\n    if (\"development\" !== 'production' && el.key) {\n      warn$2(\n        \"`key` does not work on <slot> because slots are abstract outlets \" +\n        \"and can possibly expand into multiple elements. \" +\n        \"Use the key on a wrapping element instead.\"\n      );\n    }\n  } else {\n    var slotTarget = getBindingAttr(el, 'slot');\n    if (slotTarget) {\n      el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n    }\n    if (el.tag === 'template') {\n      el.slotScope = getAndRemoveAttr(el, 'scope');\n    }\n  }\n}\n\nfunction processComponent (el) {\n  var binding;\n  if ((binding = getBindingAttr(el, 'is'))) {\n    el.component = binding;\n  }\n  if (getAndRemoveAttr(el, 'inline-template') != null) {\n    el.inlineTemplate = true;\n  }\n}\n\nfunction processAttrs (el) {\n  var list = el.attrsList;\n  var i, l, name, rawName, value, arg, modifiers, isProp;\n  for (i = 0, l = list.length; i < l; i++) {\n    name = rawName = list[i].name;\n    value = list[i].value;\n    if (dirRE.test(name)) {\n      // mark element as dynamic\n      el.hasBindings = true;\n      // modifiers\n      modifiers = parseModifiers(name);\n      if (modifiers) {\n        name = name.replace(modifierRE, '');\n      }\n      if (bindRE.test(name)) { // v-bind\n        name = name.replace(bindRE, '');\n        value = parseFilters(value);\n        isProp = false;\n        if (modifiers) {\n          if (modifiers.prop) {\n            isProp = true;\n            name = camelize(name);\n            if (name === 'innerHtml') { name = 'innerHTML'; }\n          }\n          if (modifiers.camel) {\n            name = camelize(name);\n          }\n        }\n        if (isProp || platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n          addProp(el, name, value);\n        } else {\n          addAttr(el, name, value);\n        }\n      } else if (onRE.test(name)) { // v-on\n        name = name.replace(onRE, '');\n        addHandler(el, name, value, modifiers);\n      } else { // normal directives\n        name = name.replace(dirRE, '');\n        // parse arg\n        var argMatch = name.match(argRE);\n        if (argMatch && (arg = argMatch[1])) {\n          name = name.slice(0, -(arg.length + 1));\n        }\n        addDirective(el, name, rawName, value, arg, modifiers);\n        if (\"development\" !== 'production' && name === 'model') {\n          checkForAliasModel(el, value);\n        }\n      }\n    } else {\n      // literal attribute\n      {\n        var expression = parseText(value, delimiters);\n        if (expression) {\n          warn$2(\n            name + \"=\\\"\" + value + \"\\\": \" +\n            'Interpolation inside attributes has been removed. ' +\n            'Use v-bind or the colon shorthand instead. For example, ' +\n            'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.'\n          );\n        }\n      }\n      addAttr(el, name, JSON.stringify(value));\n    }\n  }\n}\n\nfunction checkInFor (el) {\n  var parent = el;\n  while (parent) {\n    if (parent.for !== undefined) {\n      return true\n    }\n    parent = parent.parent;\n  }\n  return false\n}\n\nfunction parseModifiers (name) {\n  var match = name.match(modifierRE);\n  if (match) {\n    var ret = {};\n    match.forEach(function (m) { ret[m.slice(1)] = true; });\n    return ret\n  }\n}\n\nfunction makeAttrsMap (attrs) {\n  var map = {};\n  for (var i = 0, l = attrs.length; i < l; i++) {\n    if (\"development\" !== 'production' && map[attrs[i].name] && !isIE) {\n      warn$2('duplicate attribute: ' + attrs[i].name);\n    }\n    map[attrs[i].name] = attrs[i].value;\n  }\n  return map\n}\n\nfunction isForbiddenTag (el) {\n  return (\n    el.tag === 'style' ||\n    (el.tag === 'script' && (\n      !el.attrsMap.type ||\n      el.attrsMap.type === 'text/javascript'\n    ))\n  )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n  var res = [];\n  for (var i = 0; i < attrs.length; i++) {\n    var attr = attrs[i];\n    if (!ieNSBug.test(attr.name)) {\n      attr.name = attr.name.replace(ieNSPrefix, '');\n      res.push(attr);\n    }\n  }\n  return res\n}\n\nfunction checkForAliasModel (el, value) {\n  var _el = el;\n  while (_el) {\n    if (_el.for && _el.alias === value) {\n      warn$2(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n        \"You are binding v-model directly to a v-for iteration alias. \" +\n        \"This will not be able to modify the v-for source array because \" +\n        \"writing to the alias is like modifying a function local variable. \" +\n        \"Consider using an array of objects and use v-model on an object property instead.\"\n      );\n    }\n    _el = _el.parent;\n  }\n}\n\n/*  */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n  if (!root) { return }\n  isStaticKey = genStaticKeysCached(options.staticKeys || '');\n  isPlatformReservedTag = options.isReservedTag || no;\n  // first pass: mark all non-static nodes.\n  markStatic$1(root);\n  // second pass: mark static roots.\n  markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n  return makeMap(\n    'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +\n    (keys ? ',' + keys : '')\n  )\n}\n\nfunction markStatic$1 (node) {\n  node.static = isStatic(node);\n  if (node.type === 1) {\n    // do not make component slot content static. this avoids\n    // 1. components not able to mutate slot nodes\n    // 2. static slot content fails for hot-reloading\n    if (\n      !isPlatformReservedTag(node.tag) &&\n      node.tag !== 'slot' &&\n      node.attrsMap['inline-template'] == null\n    ) {\n      return\n    }\n    for (var i = 0, l = node.children.length; i < l; i++) {\n      var child = node.children[i];\n      markStatic$1(child);\n      if (!child.static) {\n        node.static = false;\n      }\n    }\n  }\n}\n\nfunction markStaticRoots (node, isInFor) {\n  if (node.type === 1) {\n    if (node.static || node.once) {\n      node.staticInFor = isInFor;\n    }\n    // For a node to qualify as a static root, it should have children that\n    // are not just static text. Otherwise the cost of hoisting out will\n    // outweigh the benefits and it's better off to just always render it fresh.\n    if (node.static && node.children.length && !(\n      node.children.length === 1 &&\n      node.children[0].type === 3\n    )) {\n      node.staticRoot = true;\n      return\n    } else {\n      node.staticRoot = false;\n    }\n    if (node.children) {\n      for (var i = 0, l = node.children.length; i < l; i++) {\n        markStaticRoots(node.children[i], isInFor || !!node.for);\n      }\n    }\n    if (node.ifConditions) {\n      walkThroughConditionsBlocks(node.ifConditions, isInFor);\n    }\n  }\n}\n\nfunction walkThroughConditionsBlocks (conditionBlocks, isInFor) {\n  for (var i = 1, len = conditionBlocks.length; i < len; i++) {\n    markStaticRoots(conditionBlocks[i].block, isInFor);\n  }\n}\n\nfunction isStatic (node) {\n  if (node.type === 2) { // expression\n    return false\n  }\n  if (node.type === 3) { // text\n    return true\n  }\n  return !!(node.pre || (\n    !node.hasBindings && // no dynamic bindings\n    !node.if && !node.for && // not v-if or v-for or v-else\n    !isBuiltInTag(node.tag) && // not a built-in\n    isPlatformReservedTag(node.tag) && // not a component\n    !isDirectChildOfTemplateFor(node) &&\n    Object.keys(node).every(isStaticKey)\n  ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n  while (node.parent) {\n    node = node.parent;\n    if (node.tag !== 'template') {\n      return false\n    }\n    if (node.for) {\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\nvar fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/;\nvar simplePathRE = /^\\s*[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?']|\\[\".*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*\\s*$/;\n\n// keyCode aliases\nvar keyCodes = {\n  esc: 27,\n  tab: 9,\n  enter: 13,\n  space: 32,\n  up: 38,\n  left: 37,\n  right: 39,\n  down: 40,\n  'delete': [8, 46]\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n  stop: '$event.stopPropagation();',\n  prevent: '$event.preventDefault();',\n  self: genGuard(\"$event.target !== $event.currentTarget\"),\n  ctrl: genGuard(\"!$event.ctrlKey\"),\n  shift: genGuard(\"!$event.shiftKey\"),\n  alt: genGuard(\"!$event.altKey\"),\n  meta: genGuard(\"!$event.metaKey\"),\n  left: genGuard(\"$event.button !== 0\"),\n  middle: genGuard(\"$event.button !== 1\"),\n  right: genGuard(\"$event.button !== 2\")\n};\n\nfunction genHandlers (events, native) {\n  var res = native ? 'nativeOn:{' : 'on:{';\n  for (var name in events) {\n    res += \"\\\"\" + name + \"\\\":\" + (genHandler(name, events[name])) + \",\";\n  }\n  return res.slice(0, -1) + '}'\n}\n\nfunction genHandler (\n  name,\n  handler\n) {\n  if (!handler) {\n    return 'function(){}'\n  } else if (Array.isArray(handler)) {\n    return (\"[\" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + \"]\")\n  } else if (!handler.modifiers) {\n    return fnExpRE.test(handler.value) || simplePathRE.test(handler.value)\n      ? handler.value\n      : (\"function($event){\" + (handler.value) + \"}\")\n  } else {\n    var code = '';\n    var keys = [];\n    for (var key in handler.modifiers) {\n      if (modifierCode[key]) {\n        code += modifierCode[key];\n      } else {\n        keys.push(key);\n      }\n    }\n    if (keys.length) {\n      code = genKeyFilter(keys) + code;\n    }\n    var handlerCode = simplePathRE.test(handler.value)\n      ? handler.value + '($event)'\n      : handler.value;\n    return (\"function($event){\" + code + handlerCode + \"}\")\n  }\n}\n\nfunction genKeyFilter (keys) {\n  return (\"if(\" + (keys.map(genFilterCode).join('&&')) + \")return null;\")\n}\n\nfunction genFilterCode (key) {\n  var keyVal = parseInt(key, 10);\n  if (keyVal) {\n    return (\"$event.keyCode!==\" + keyVal)\n  }\n  var alias = keyCodes[key];\n  return (\"_k($event.keyCode,\" + (JSON.stringify(key)) + (alias ? ',' + JSON.stringify(alias) : '') + \")\")\n}\n\n/*  */\n\nfunction bind$1 (el, dir) {\n  el.wrapData = function (code) {\n    return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + (dir.modifiers && dir.modifiers.prop ? ',true' : '') + \")\")\n  };\n}\n\n/*  */\n\nvar baseDirectives = {\n  bind: bind$1,\n  cloak: noop\n};\n\n/*  */\n\n// configurable state\nvar warn$3;\nvar transforms$1;\nvar dataGenFns;\nvar platformDirectives$1;\nvar isPlatformReservedTag$1;\nvar staticRenderFns;\nvar onceCount;\nvar currentOptions;\n\nfunction generate (\n  ast,\n  options\n) {\n  // save previous staticRenderFns so generate calls can be nested\n  var prevStaticRenderFns = staticRenderFns;\n  var currentStaticRenderFns = staticRenderFns = [];\n  var prevOnceCount = onceCount;\n  onceCount = 0;\n  currentOptions = options;\n  warn$3 = options.warn || baseWarn;\n  transforms$1 = pluckModuleFunction(options.modules, 'transformCode');\n  dataGenFns = pluckModuleFunction(options.modules, 'genData');\n  platformDirectives$1 = options.directives || {};\n  isPlatformReservedTag$1 = options.isReservedTag || no;\n  var code = ast ? genElement(ast) : '_c(\"div\")';\n  staticRenderFns = prevStaticRenderFns;\n  onceCount = prevOnceCount;\n  return {\n    render: (\"with(this){return \" + code + \"}\"),\n    staticRenderFns: currentStaticRenderFns\n  }\n}\n\nfunction genElement (el) {\n  if (el.staticRoot && !el.staticProcessed) {\n    return genStatic(el)\n  } else if (el.once && !el.onceProcessed) {\n    return genOnce(el)\n  } else if (el.for && !el.forProcessed) {\n    return genFor(el)\n  } else if (el.if && !el.ifProcessed) {\n    return genIf(el)\n  } else if (el.tag === 'template' && !el.slotTarget) {\n    return genChildren(el) || 'void 0'\n  } else if (el.tag === 'slot') {\n    return genSlot(el)\n  } else {\n    // component or element\n    var code;\n    if (el.component) {\n      code = genComponent(el.component, el);\n    } else {\n      var data = el.plain ? undefined : genData(el);\n\n      var children = el.inlineTemplate ? null : genChildren(el, true);\n      code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n    }\n    // module transforms\n    for (var i = 0; i < transforms$1.length; i++) {\n      code = transforms$1[i](el, code);\n    }\n    return code\n  }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el) {\n  el.staticProcessed = true;\n  staticRenderFns.push((\"with(this){return \" + (genElement(el)) + \"}\"));\n  return (\"_m(\" + (staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el) {\n  el.onceProcessed = true;\n  if (el.if && !el.ifProcessed) {\n    return genIf(el)\n  } else if (el.staticInFor) {\n    var key = '';\n    var parent = el.parent;\n    while (parent) {\n      if (parent.for) {\n        key = parent.key;\n        break\n      }\n      parent = parent.parent;\n    }\n    if (!key) {\n      \"development\" !== 'production' && warn$3(\n        \"v-once can only be used inside v-for that is keyed. \"\n      );\n      return genElement(el)\n    }\n    return (\"_o(\" + (genElement(el)) + \",\" + (onceCount++) + (key ? (\",\" + key) : \"\") + \")\")\n  } else {\n    return genStatic(el)\n  }\n}\n\nfunction genIf (el) {\n  el.ifProcessed = true; // avoid recursion\n  return genIfConditions(el.ifConditions.slice())\n}\n\nfunction genIfConditions (conditions) {\n  if (!conditions.length) {\n    return '_e()'\n  }\n\n  var condition = conditions.shift();\n  if (condition.exp) {\n    return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions)))\n  } else {\n    return (\"\" + (genTernaryExp(condition.block)))\n  }\n\n  // v-if with v-once should generate code like (a)?_m(0):_m(1)\n  function genTernaryExp (el) {\n    return el.once ? genOnce(el) : genElement(el)\n  }\n}\n\nfunction genFor (el) {\n  var exp = el.for;\n  var alias = el.alias;\n  var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n  var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n  if (\n    \"development\" !== 'production' &&\n    maybeComponent(el) && el.tag !== 'slot' && el.tag !== 'template' && !el.key\n  ) {\n    warn$3(\n      \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n      \"v-for should have explicit keys. \" +\n      \"See https://vuejs.org/guide/list.html#key for more info.\",\n      true /* tip */\n    );\n  }\n\n  el.forProcessed = true; // avoid recursion\n  return \"_l((\" + exp + \"),\" +\n    \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n      \"return \" + (genElement(el)) +\n    '})'\n}\n\nfunction genData (el) {\n  var data = '{';\n\n  // directives first.\n  // directives may mutate the el's other properties before they are generated.\n  var dirs = genDirectives(el);\n  if (dirs) { data += dirs + ','; }\n\n  // key\n  if (el.key) {\n    data += \"key:\" + (el.key) + \",\";\n  }\n  // ref\n  if (el.ref) {\n    data += \"ref:\" + (el.ref) + \",\";\n  }\n  if (el.refInFor) {\n    data += \"refInFor:true,\";\n  }\n  // pre\n  if (el.pre) {\n    data += \"pre:true,\";\n  }\n  // record original tag name for components using \"is\" attribute\n  if (el.component) {\n    data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n  }\n  // module data generation functions\n  for (var i = 0; i < dataGenFns.length; i++) {\n    data += dataGenFns[i](el);\n  }\n  // attributes\n  if (el.attrs) {\n    data += \"attrs:{\" + (genProps(el.attrs)) + \"},\";\n  }\n  // DOM props\n  if (el.props) {\n    data += \"domProps:{\" + (genProps(el.props)) + \"},\";\n  }\n  // event handlers\n  if (el.events) {\n    data += (genHandlers(el.events)) + \",\";\n  }\n  if (el.nativeEvents) {\n    data += (genHandlers(el.nativeEvents, true)) + \",\";\n  }\n  // slot target\n  if (el.slotTarget) {\n    data += \"slot:\" + (el.slotTarget) + \",\";\n  }\n  // scoped slots\n  if (el.scopedSlots) {\n    data += (genScopedSlots(el.scopedSlots)) + \",\";\n  }\n  // component v-model\n  if (el.model) {\n    data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \"},\";\n  }\n  // inline-template\n  if (el.inlineTemplate) {\n    var inlineTemplate = genInlineTemplate(el);\n    if (inlineTemplate) {\n      data += inlineTemplate + \",\";\n    }\n  }\n  data = data.replace(/,$/, '') + '}';\n  // v-bind data wrap\n  if (el.wrapData) {\n    data = el.wrapData(data);\n  }\n  return data\n}\n\nfunction genDirectives (el) {\n  var dirs = el.directives;\n  if (!dirs) { return }\n  var res = 'directives:[';\n  var hasRuntime = false;\n  var i, l, dir, needRuntime;\n  for (i = 0, l = dirs.length; i < l; i++) {\n    dir = dirs[i];\n    needRuntime = true;\n    var gen = platformDirectives$1[dir.name] || baseDirectives[dir.name];\n    if (gen) {\n      // compile-time directive that manipulates AST.\n      // returns true if it also needs a runtime counterpart.\n      needRuntime = !!gen(el, dir, warn$3);\n    }\n    if (needRuntime) {\n      hasRuntime = true;\n      res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\\\"\" + (dir.arg) + \"\\\"\") : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n    }\n  }\n  if (hasRuntime) {\n    return res.slice(0, -1) + ']'\n  }\n}\n\nfunction genInlineTemplate (el) {\n  var ast = el.children[0];\n  if (\"development\" !== 'production' && (\n    el.children.length > 1 || ast.type !== 1\n  )) {\n    warn$3('Inline-template components must have exactly one child element.');\n  }\n  if (ast.type === 1) {\n    var inlineRenderFns = generate(ast, currentOptions);\n    return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n  }\n}\n\nfunction genScopedSlots (slots) {\n  return (\"scopedSlots:_u([\" + (Object.keys(slots).map(function (key) { return genScopedSlot(key, slots[key]); }).join(',')) + \"])\")\n}\n\nfunction genScopedSlot (key, el) {\n  return \"[\" + key + \",function(\" + (String(el.attrsMap.scope)) + \"){\" +\n    \"return \" + (el.tag === 'template'\n      ? genChildren(el) || 'void 0'\n      : genElement(el)) + \"}]\"\n}\n\nfunction genChildren (el, checkSkip) {\n  var children = el.children;\n  if (children.length) {\n    var el$1 = children[0];\n    // optimize single v-for\n    if (children.length === 1 &&\n        el$1.for &&\n        el$1.tag !== 'template' &&\n        el$1.tag !== 'slot') {\n      return genElement(el$1)\n    }\n    var normalizationType = getNormalizationType(children);\n    return (\"[\" + (children.map(genNode).join(',')) + \"]\" + (checkSkip\n        ? normalizationType ? (\",\" + normalizationType) : ''\n        : ''))\n  }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (children) {\n  var res = 0;\n  for (var i = 0; i < children.length; i++) {\n    var el = children[i];\n    if (el.type !== 1) {\n      continue\n    }\n    if (needsNormalization(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n      res = 2;\n      break\n    }\n    if (maybeComponent(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n      res = 1;\n    }\n  }\n  return res\n}\n\nfunction needsNormalization (el) {\n  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction maybeComponent (el) {\n  return !isPlatformReservedTag$1(el.tag)\n}\n\nfunction genNode (node) {\n  if (node.type === 1) {\n    return genElement(node)\n  } else {\n    return genText(node)\n  }\n}\n\nfunction genText (text) {\n  return (\"_v(\" + (text.type === 2\n    ? text.expression // no need for () because already wrapped in _s()\n    : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genSlot (el) {\n  var slotName = el.slotName || '\"default\"';\n  var children = genChildren(el);\n  var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n  var attrs = el.attrs && (\"{\" + (el.attrs.map(function (a) { return ((camelize(a.name)) + \":\" + (a.value)); }).join(',')) + \"}\");\n  var bind$$1 = el.attrsMap['v-bind'];\n  if ((attrs || bind$$1) && !children) {\n    res += \",null\";\n  }\n  if (attrs) {\n    res += \",\" + attrs;\n  }\n  if (bind$$1) {\n    res += (attrs ? '' : ',null') + \",\" + bind$$1;\n  }\n  return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (componentName, el) {\n  var children = el.inlineTemplate ? null : genChildren(el, true);\n  return (\"_c(\" + componentName + \",\" + (genData(el)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n  var res = '';\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i];\n    res += \"\\\"\" + (prop.name) + \"\\\":\" + (transformSpecialNewlines(prop.value)) + \",\";\n  }\n  return res.slice(0, -1)\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n  return text\n    .replace(/\\u2028/g, '\\\\u2028')\n    .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/*  */\n\n// operators like typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n  'super,throw,while,yield,delete,export,import,return,switch,default,' +\n  'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n// check valid identifier for v-for\nvar identRE = /[A-Za-z_$][\\w$]*/;\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast) {\n  var errors = [];\n  if (ast) {\n    checkNode(ast, errors);\n  }\n  return errors\n}\n\nfunction checkNode (node, errors) {\n  if (node.type === 1) {\n    for (var name in node.attrsMap) {\n      if (dirRE.test(name)) {\n        var value = node.attrsMap[name];\n        if (value) {\n          if (name === 'v-for') {\n            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), errors);\n          } else {\n            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n          }\n        }\n      }\n    }\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        checkNode(node.children[i], errors);\n      }\n    }\n  } else if (node.type === 2) {\n    checkExpression(node.expression, node.text, errors);\n  }\n}\n\nfunction checkFor (node, text, errors) {\n  checkExpression(node.for || '', text, errors);\n  checkIdentifier(node.alias, 'v-for alias', text, errors);\n  checkIdentifier(node.iterator1, 'v-for iterator', text, errors);\n  checkIdentifier(node.iterator2, 'v-for iterator', text, errors);\n}\n\nfunction checkIdentifier (ident, type, text, errors) {\n  if (typeof ident === 'string' && !identRE.test(ident)) {\n    errors.push((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())));\n  }\n}\n\nfunction checkExpression (exp, text, errors) {\n  try {\n    new Function((\"return \" + exp));\n  } catch (e) {\n    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n    if (keywordMatch) {\n      errors.push(\n        \"avoid using JavaScript keyword as property name: \" +\n        \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim())\n      );\n    } else {\n      errors.push((\"invalid expression: \" + (text.trim())));\n    }\n  }\n}\n\n/*  */\n\nfunction baseCompile (\n  template,\n  options\n) {\n  var ast = parse(template.trim(), options);\n  optimize(ast, options);\n  var code = generate(ast, options);\n  return {\n    ast: ast,\n    render: code.render,\n    staticRenderFns: code.staticRenderFns\n  }\n}\n\nfunction makeFunction (code, errors) {\n  try {\n    return new Function(code)\n  } catch (err) {\n    errors.push({ err: err, code: code });\n    return noop\n  }\n}\n\nfunction createCompiler (baseOptions) {\n  var functionCompileCache = Object.create(null);\n\n  function compile (\n    template,\n    options\n  ) {\n    var finalOptions = Object.create(baseOptions);\n    var errors = [];\n    var tips = [];\n    finalOptions.warn = function (msg, tip$$1) {\n      (tip$$1 ? tips : errors).push(msg);\n    };\n\n    if (options) {\n      // merge custom modules\n      if (options.modules) {\n        finalOptions.modules = (baseOptions.modules || []).concat(options.modules);\n      }\n      // merge custom directives\n      if (options.directives) {\n        finalOptions.directives = extend(\n          Object.create(baseOptions.directives),\n          options.directives\n        );\n      }\n      // copy other options\n      for (var key in options) {\n        if (key !== 'modules' && key !== 'directives') {\n          finalOptions[key] = options[key];\n        }\n      }\n    }\n\n    var compiled = baseCompile(template, finalOptions);\n    {\n      errors.push.apply(errors, detectErrors(compiled.ast));\n    }\n    compiled.errors = errors;\n    compiled.tips = tips;\n    return compiled\n  }\n\n  function compileToFunctions (\n    template,\n    options,\n    vm\n  ) {\n    options = options || {};\n\n    /* istanbul ignore if */\n    {\n      // detect possible CSP restriction\n      try {\n        new Function('return 1');\n      } catch (e) {\n        if (e.toString().match(/unsafe-eval|CSP/)) {\n          warn(\n            'It seems you are using the standalone build of Vue.js in an ' +\n            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n            'The template compiler cannot work in this environment. Consider ' +\n            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n            'templates into render functions.'\n          );\n        }\n      }\n    }\n\n    // check cache\n    var key = options.delimiters\n      ? String(options.delimiters) + template\n      : template;\n    if (functionCompileCache[key]) {\n      return functionCompileCache[key]\n    }\n\n    // compile\n    var compiled = compile(template, options);\n\n    // check compilation errors/tips\n    {\n      if (compiled.errors && compiled.errors.length) {\n        warn(\n          \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n          compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n          vm\n        );\n      }\n      if (compiled.tips && compiled.tips.length) {\n        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n      }\n    }\n\n    // turn code into functions\n    var res = {};\n    var fnGenErrors = [];\n    res.render = makeFunction(compiled.render, fnGenErrors);\n    var l = compiled.staticRenderFns.length;\n    res.staticRenderFns = new Array(l);\n    for (var i = 0; i < l; i++) {\n      res.staticRenderFns[i] = makeFunction(compiled.staticRenderFns[i], fnGenErrors);\n    }\n\n    // check function generation errors.\n    // this should only happen if there is a bug in the compiler itself.\n    // mostly for codegen development use\n    /* istanbul ignore if */\n    {\n      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n        warn(\n          \"Failed to generate render function:\\n\\n\" +\n          fnGenErrors.map(function (ref) {\n            var err = ref.err;\n            var code = ref.code;\n\n            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n        }).join('\\n'),\n          vm\n        );\n      }\n    }\n\n    return (functionCompileCache[key] = res)\n  }\n\n  return {\n    compile: compile,\n    compileToFunctions: compileToFunctions\n  }\n}\n\n/*  */\n\nfunction transformNode (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticClass = getAndRemoveAttr(el, 'class');\n  if (\"development\" !== 'production' && staticClass) {\n    var expression = parseText(staticClass, options.delimiters);\n    if (expression) {\n      warn(\n        \"class=\\\"\" + staticClass + \"\\\": \" +\n        'Interpolation inside attributes has been removed. ' +\n        'Use v-bind or the colon shorthand instead. For example, ' +\n        'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.'\n      );\n    }\n  }\n  if (staticClass) {\n    el.staticClass = JSON.stringify(staticClass);\n  }\n  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n  if (classBinding) {\n    el.classBinding = classBinding;\n  }\n}\n\nfunction genData$1 (el) {\n  var data = '';\n  if (el.staticClass) {\n    data += \"staticClass:\" + (el.staticClass) + \",\";\n  }\n  if (el.classBinding) {\n    data += \"class:\" + (el.classBinding) + \",\";\n  }\n  return data\n}\n\nvar klass$1 = {\n  staticKeys: ['staticClass'],\n  transformNode: transformNode,\n  genData: genData$1\n};\n\n/*  */\n\nfunction transformNode$1 (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticStyle = getAndRemoveAttr(el, 'style');\n  if (staticStyle) {\n    /* istanbul ignore if */\n    {\n      var expression = parseText(staticStyle, options.delimiters);\n      if (expression) {\n        warn(\n          \"style=\\\"\" + staticStyle + \"\\\": \" +\n          'Interpolation inside attributes has been removed. ' +\n          'Use v-bind or the colon shorthand instead. For example, ' +\n          'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.'\n        );\n      }\n    }\n    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n  }\n\n  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n  if (styleBinding) {\n    el.styleBinding = styleBinding;\n  }\n}\n\nfunction genData$2 (el) {\n  var data = '';\n  if (el.staticStyle) {\n    data += \"staticStyle:\" + (el.staticStyle) + \",\";\n  }\n  if (el.styleBinding) {\n    data += \"style:(\" + (el.styleBinding) + \"),\";\n  }\n  return data\n}\n\nvar style$1 = {\n  staticKeys: ['staticStyle'],\n  transformNode: transformNode$1,\n  genData: genData$2\n};\n\nvar modules$1 = [\n  klass$1,\n  style$1\n];\n\n/*  */\n\nfunction text (el, dir) {\n  if (dir.value) {\n    addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"));\n  }\n}\n\n/*  */\n\nfunction html (el, dir) {\n  if (dir.value) {\n    addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"));\n  }\n}\n\nvar directives$1 = {\n  model: model,\n  text: text,\n  html: html\n};\n\n/*  */\n\nvar baseOptions = {\n  expectHTML: true,\n  modules: modules$1,\n  directives: directives$1,\n  isPreTag: isPreTag,\n  isUnaryTag: isUnaryTag,\n  mustUseProp: mustUseProp,\n  isReservedTag: isReservedTag,\n  getTagNamespace: getTagNamespace,\n  staticKeys: genStaticKeys(modules$1)\n};\n\nvar ref$1 = createCompiler(baseOptions);\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/*  */\n\nvar idToTemplate = cached(function (id) {\n  var el = query(id);\n  return el && el.innerHTML\n});\n\nvar mount = Vue$3.prototype.$mount;\nVue$3.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && query(el);\n\n  /* istanbul ignore if */\n  if (el === document.body || el === document.documentElement) {\n    \"development\" !== 'production' && warn(\n      \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n    );\n    return this\n  }\n\n  var options = this.$options;\n  // resolve template/el and convert to render function\n  if (!options.render) {\n    var template = options.template;\n    if (template) {\n      if (typeof template === 'string') {\n        if (template.charAt(0) === '#') {\n          template = idToTemplate(template);\n          /* istanbul ignore if */\n          if (\"development\" !== 'production' && !template) {\n            warn(\n              (\"Template element not found or is empty: \" + (options.template)),\n              this\n            );\n          }\n        }\n      } else if (template.nodeType) {\n        template = template.innerHTML;\n      } else {\n        {\n          warn('invalid template option:' + template, this);\n        }\n        return this\n      }\n    } else if (el) {\n      template = getOuterHTML(el);\n    }\n    if (template) {\n      /* istanbul ignore if */\n      if (\"development\" !== 'production' && config.performance && perf) {\n        perf.mark('compile');\n      }\n\n      var ref = compileToFunctions(template, {\n        shouldDecodeNewlines: shouldDecodeNewlines,\n        delimiters: options.delimiters\n      }, this);\n      var render = ref.render;\n      var staticRenderFns = ref.staticRenderFns;\n      options.render = render;\n      options.staticRenderFns = staticRenderFns;\n\n      /* istanbul ignore if */\n      if (\"development\" !== 'production' && config.performance && perf) {\n        perf.mark('compile end');\n        perf.measure(((this._name) + \" compile\"), 'compile', 'compile end');\n      }\n    }\n  }\n  return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n  if (el.outerHTML) {\n    return el.outerHTML\n  } else {\n    var container = document.createElement('div');\n    container.appendChild(el.cloneNode(true));\n    return container.innerHTML\n  }\n}\n\nVue$3.compile = compileToFunctions;\n\nreturn Vue$3;\n\n})));\n"
  },
  {
    "path": "python/nav/web/static/js/netmap.js",
    "content": "var TRAFFIC_META = {\n    'tib': 1099511627776,\n    'gib': 1073741824,\n    'mib': 1048576,\n    'kib': 1024,\n    'tb':  1000000000000,\n    'gb':  1000000000,\n    'mb':  1000000,\n    'kb':  1000\n};\n\n\n// SI Units, http://en.wikipedia.org/wiki/SI_prefix\nfunction convert_bits_to_si(bits) {\n    if (bits >= TRAFFIC_META.tb) {\n        return '{0}Tbps'.format(Math.round(((bits / TRAFFIC_META.tb) * 100) / 100));\n    } else if (bits >= TRAFFIC_META.gb) {\n        return '{0}Gbps'.format(Math.round(((bits / TRAFFIC_META.gb) * 100) / 100));\n    } else if (bits >= TRAFFIC_META.mb) {\n        return '{0}Mbps'.format(Math.round(((bits / TRAFFIC_META.mb) * 100) / 100));\n    } else if (bits >= TRAFFIC_META.kb) {\n        return '{0}Kbps'.format(Math.round(((bits / TRAFFIC_META.kb) * 100) / 100));\n    }\n\n    return '{0}b/s'.format(Math.round((bits * 100) / 100));\n}\n\n\nString.prototype.format = function () {\n    var args = arguments;\n    return this.replace(/\\{(\\d+)\\}/g, function (match, number) {\n        return typeof args[number] !== 'undefined' ? args[number] : match;\n\n    });\n};\n"
  },
  {
    "path": "python/nav/web/static/js/networkexplorer.js",
    "content": "/**\n\tJavaScript functions for NetworkExplorer\n**/\n\n$(document).ready(\n    function() {\n        $('#working').css('visibility', 'hidden');\n    }\n);\n\n/* Search-handler  */\n\n$(function(){\n    // Catch the submit action\n    $('#searchForm').submit(function(){\n\t// Get all the parameters we can get from the form\n\tvar parameters = {};\n\t$(':input', this).each(function(){\n            if (this.type == \"checkbox\"){\n                if (this.checked){\n\t\t    console.debug(this.checked);\n                    parameters[this.name] = \"on\";\n                } else {\n                    parameters[this.name] = \"off\";\n                }\n            } else {\n                parameters[this.name] = escape($(this).val());\n            }\n\t});\n\n\t$('#searchForm').fadeTo(\"normal\", 0.25);\n\n\t$.ajax({\n\t    url: '/networkexplorer/search',\n\t    dataType: 'json',\n\t    data: parameters,\n\t    beforeSend: before_send,\n\t    error: request_error,\n\t    success: parse_result\n\t});\n\n\treturn false;\n    });\n});\n\n\nfunction before_send() {\n    $('#navbody span.info').remove();\n}\n\nfunction request_error() {\n    fade_to_normal();\n    inform_user('An error occured during search');\n}\n\nfunction visualize_not_found() {\n    fade_to_normal();\n    inform_user('Search result was empty');\n}\n\nfunction inform_user(text) {\n    var infonode = $('<span class=\"info\" />');\n    infonode.text(text);\n    $('#searchForm').after(infonode);\n}\n\nfunction fade_to_normal() {\n    $('#searchForm').fadeTo(\"normal\", 1.0);\n}\n\nfunction parse_result(data) {\n    if (data.routers.length == 0){\n\tvisualize_not_found();\n\treturn;\n    }\n\n    // We dont want to bring the server down by requesting to much in parallel\n    $.ajaxSetup({\n\tasync: false\n    });\n\n    // Process all the router matches\n    $.each(data.routers, process_router);\n\n    // Process all the gwport matches\n    $.each(data.gwports, process_gwport);\n\n    // Process all the swport matches\n    $.each(data.swports, process_swport);\n\n    scroll_to_result(data.routers, data.gwports, data.swports);\n\n    // Done parsing all data.\n    fade_to_normal();\n}\n\nfunction scroll_to_result(routers, gwports, swports) {\n    if (swports.length > 0) {\n\tdocument.location = '#swport-' + swports[0][0];\n    } else if (gwports.length > 0) {\n\tdocument.location = '#gwport-' + gwports[0][0];\n    } else if (routers.length > 0) {\n\tdocument.location = '#router-' + routers[0][0];\n    }\n}\n\nfunction process_router(i, _router){\n    var router = $('#router-' + _router[0]);\n    var data = _router[1];\n\n    router.css('font-weigth', 'bold');\n    append_data(router, data);\n    switch_icon(router);\n}\n\nfunction process_gwport(i, _gwport){\n    var gwport = $('#gwport-' + _gwport[0]);\n    var data = _gwport[1];\n\n    gwport.addClass('highlight');\n    append_data(gwport, data);\n    switch_icon(gwport);\n}\n\nfunction process_swport(i, _swport){\n    var swport = $('#swport-' + _swport[0]);\n    var data = _swport[1];\n\n    swport.addClass('highlight');\n    swport.children().addClass('service_match'); // TODO: Misleading name\n    append_data(swport, data);\n    switch_icon(swport);\n}\n\nfunction append_data(data_node, data) {\n    // Append the data to the node\n    data_node.append(data);\n\n    // We dont want to load this node again from the server\n    data_node.data(\"loaded\",\"true\");\n\n    // Show the newly added children\n    data_node.children().select(\"dl\").not(\"img\").show();\n}\n\n\n// Change tree-icon to collapsed\nfunction switch_icon(node) {\n    var collapseImage = NAV.imagePath + '/images/networkexplorer/collapse.gif';\n    $(node.children().select(\"img[src$='expand.gif']\")).attr('src', collapseImage);\n}\n\n\nfunction openNode(img){\n    var expand_type = $(img).parent().attr('id').substr(0,6);\n    var expand_id   = $(img).parent().attr('id').substr(7);\n\n    // Check if we are expanding a vlan on a switch\n    var vlans = $(img).parent('dd').children(\"a[name^='switch-']\").attr(\"name\");\n    if (vlans != null) {\n\texpand_type = 'switch';\n\tvar values = vlans.split(\"-\");\n\texpand_id = values[1];\n\tvar vlan_id = values[2];\n    }\n\n    // We dont want to double-load data and such,\n    // so we set/check a state for that tree-node\n    if ($(img).parent('dd').data('working') == \"true\"){\n\treturn false;\n    } else {\n\t$(img).parent('dd').data('working', 'true');\n    }\n\n    if ($(img).parent('dd').data(\"loaded\") == \"true\"){\n\t$(img).parent('dd').data('working', 'false');\n\t$(img).parent('dd').children().select(\"dl\").not(\"img\").not(\"a\").not('abbr').slideToggle(\"fast\",\n        function () {\n            if ($(img).parent('dd').children().select(\"dl\").not(\"img\").css('display') == 'block') {\n                $(img).attr('src', NAV.imagePath + '/images/networkexplorer/collapse.gif');\n            } else {\n                $(img).attr('src', NAV.imagePath + '/images/networkexplorer/expand.gif');\n            }\n        });\n\n        return false;\n    }\n\n    $(img).attr('src', NAV.imagePath + '/images/main/process-working.gif');\n    // We want to show/hide nodes when we actually have any data to show/hide\n    $(img).parent('dd').ajaxSuccess(\n\tfunction(){\n\t    $(img).parent('dd').data('working', \"false\");\n\t});\n\n    if (expand_type == \"router\"){\n\t$.get('/networkexplorer/expand/router',\n\t      { 'netboxid': expand_id },\n\t      function(data){\n\t\t  $(img).parent('dd').append(data);\n\t\t  $(img).parent('dd').data(\"loaded\", \"true\");\n\t\t  $(img).attr('src', NAV.imagePath + '/images/networkexplorer/collapse.gif');\n\t      });\n    }\n    if (expand_type == \"switch\"){\n\t$.get('/networkexplorer/expand/switch',\n\t      { 'netboxid': expand_id, 'vlanid': vlan_id },\n\t      function(data){\n\t\t  $(img).parent('dd').append(data);\n\t\t  $(img).parent('dd').data(\"loaded\", \"true\");\n\t\t  $(img).attr('src', NAV.imagePath + '/images/networkexplorer/collapse.gif');\n\t      });\n    }\n    if (expand_type == \"gwport\"){\n\t$.get('/networkexplorer/expand/gwport',\n\t      { 'gwportid': expand_id },\n\t      function(data){\n\t\t  $(img).parent('dd').append(data);\n\t\t  $(img).parent('dd').data(\"loaded\", \"true\");\n\t\t  $(img).attr('src', NAV.imagePath + '/images/networkexplorer/collapse.gif');\n\t      });\n    }\n    if (expand_type == \"swport\"){\n\t$.get('/networkexplorer/expand/swport',\n\t      { 'swportid': expand_id },\n\t      function(data){\n\t\t  $(img).parent('dd').append(data);\n\t\t  $(img).parent('dd').data(\"loaded\", \"true\");\n\t\t  $(img).attr('src', NAV.imagePath + '/images/networkexplorer/collapse.gif');\n\t      });\n    }\n};\n\n"
  },
  {
    "path": "python/nav/web/static/js/package.json",
    "content": "{\n    \"name\": \"NAV\",\n    \"description\": \"Network Administration Visualized\",\n    \"version\": \"5.5-dev\",\n    \"private\": true,\n    \"devDependencies\": {\n        \"chai\": \"~4.3.4\",\n        \"jshint\": \"~2.13.6\",\n        \"karma\": \"~6.3.16\",\n        \"karma-chai\": \"~0.1.0\",\n        \"karma-chrome-launcher\": \"~3.1.0\",\n        \"karma-coverage\": \"~2.1.0\",\n        \"karma-junit-reporter\": \"~2.0.1\",\n        \"karma-mocha\": \"~2.0.1\",\n        \"karma-requirejs\": \"~1.1.0\",\n        \"mocha\": \"~5.2.0\",\n        \"requirejs\": \"~2.3.7\"\n    },\n    \"scripts\": {\n        \"test\": \"karma start test/karma.conf.buildserver.js\"\n    }\n}\n"
  },
  {
    "path": "python/nav/web/static/js/require_config.js",
    "content": "var require = {\n    baseUrl: '/static/js',\n    waitSeconds: 90, // default 7\n    paths: {\n        \"libs\": \"libs\",\n        \"moment\": \"libs/moment-2.18.1.min\",\n        \"resources\": \"resources\",\n        \"libs-amd\": \"resources/libs\",\n        \"plugins\": \"src/plugins\",\n        \"dt_plugins\": \"src/dt_plugins\",\n        \"dt_config\": \"src/dt_config\",\n        \"info\": \"src/info\",\n        \"netmap\": \"src/netmap\",\n        \"status\": \"src/status2\",\n        \"d3\": \"libs/d3-3.5.5.min\",  // rickshaw needs the d3 target defined\n        \"d3v7\": \"libs/d3-7.8.3.min\",\n        \"d3tip\": \"libs/d3tip.min\",\n        \"ol-debug\": \"libs/ol-debug-4.6.5\",\n        \"openlayers\": \"libs/openlayers-2.12.min\",\n        \"datatables\": \"libs/datatables-2.2.2.min\",\n        \"handlebars\": \"libs/handlebars-5.0.0-alpha.1.min\",\n        \"spin\": \"libs/spin-2.3.2.min\",\n        \"nav-url-utils\": \"src/plugins/nav-url-utils\",\n        \"rickshaw-utils\": \"src/plugins/rickshaw-utils\",\n        \"backbone\": \"libs/backbone-1.0.0.min\",\n        \"underscore\": \"libs/underscore-1.7.0.min\",\n        \"marionette\": \"libs/backbone.marionette-4.1.3.min\",\n        \"backbone.radio\": \"libs/backbone.radio-2.0.0.min\",\n        \"vue\": \"libs/vue-2.2.0.min\",\n        \"driver\": \"libs/driver-1.3.6.min\",\n        \"flatpickr\": \"libs/flatpickr-4.6.13.min\",\n        \"jquery\": \"libs/jquery-4.0.0.min\",\n        \"jquery-ui\": \"libs/jquery-ui-1.14.0.min\",\n        \"tablesort\": \"libs/tablesort-5.7.0.min\",\n        \"jquery-multi-select\": \"libs/jquery.multiselect-2.4.24.min\",\n        \"select2\": \"libs/select2-4.1.0-rc.0.min\",\n    },\n    shim: {\n        'underscore': {\n            exports: '_'\n        },\n        'backbone': {\n            deps: [\"underscore\"],\n            exports: 'Backbone'\n        },\n        'backbone.radio': {\n            deps: [\"backbone\"],\n            exports: \"Backbone.Radio\"\n        },\n        'marionette': {\n            deps: [\"backbone\", \"backbone.radio\"],\n            exports: \"Marionette\"\n        },\n        'libs/backbone-eventbroker': ['backbone'],\n        'datatables': {\n            deps: ['jquery']\n        },\n        'select2': {\n            deps: ['jquery']\n        },\n        'tablesort': {\n            exports: 'Tablesort'\n        },\n    },\n    deps: ['jquery']\n};\n"
  },
  {
    "path": "python/nav/web/static/js/require_config_dev.js",
    "content": "// require is an object defined in require_config.js\n// Use this file to override require config for developement purposes\nrequire.paths.vue = 'libs/vue-2.2.0';\n"
  },
  {
    "path": "python/nav/web/static/js/resources/libs/text.js",
    "content": "/**\n * @license RequireJS text 2.0.3 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/requirejs/text for details\n */\n/*jslint regexp: true */\n/*global require: false, XMLHttpRequest: false, ActiveXObject: false,\n define: false, window: false, process: false, Packages: false,\n java: false, location: false */\n\ndefine(['module'], function (module) {\n    'use strict';\n\n    var text, fs,\n        progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],\n        xmlRegExp = /^\\s*<\\?xml(\\s)+version=[\\'\\\"](\\d)*.(\\d)*[\\'\\\"](\\s)*\\?>/im,\n        bodyRegExp = /<body[^>]*>\\s*([\\s\\S]+)\\s*<\\/body>/im,\n        hasLocation = typeof location !== 'undefined' && location.href,\n        defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\\:/, ''),\n        defaultHostName = hasLocation && location.hostname,\n        defaultPort = hasLocation && (location.port || undefined),\n        buildMap = [],\n        masterConfig = (module.config && module.config()) || {};\n\n    text = {\n        version: '2.0.3',\n\n        strip: function (content) {\n            //Strips <?xml ...?> declarations so that external SVG and XML\n            //documents can be added to a document without worry. Also, if the string\n            //is an HTML document, only the part inside the body tag is returned.\n            if (content) {\n                content = content.replace(xmlRegExp, \"\");\n                var matches = content.match(bodyRegExp);\n                if (matches) {\n                    content = matches[1];\n                }\n            } else {\n                content = \"\";\n            }\n            return content;\n        },\n\n        jsEscape: function (content) {\n            return content.replace(/(['\\\\])/g, '\\\\$1')\n                .replace(/[\\f]/g, \"\\\\f\")\n                .replace(/[\\b]/g, \"\\\\b\")\n                .replace(/[\\n]/g, \"\\\\n\")\n                .replace(/[\\t]/g, \"\\\\t\")\n                .replace(/[\\r]/g, \"\\\\r\")\n                .replace(/[\\u2028]/g, \"\\\\u2028\")\n                .replace(/[\\u2029]/g, \"\\\\u2029\");\n        },\n\n        createXhr: masterConfig.createXhr || function () {\n            //Would love to dump the ActiveX crap in here. Need IE 6 to die first.\n            var xhr, i, progId;\n            if (typeof XMLHttpRequest !== \"undefined\") {\n                return new XMLHttpRequest();\n            } else if (typeof ActiveXObject !== \"undefined\") {\n                for (i = 0; i < 3; i += 1) {\n                    progId = progIds[i];\n                    try {\n                        xhr = new ActiveXObject(progId);\n                    } catch (e) {}\n\n                    if (xhr) {\n                        progIds = [progId];  // so faster next time\n                        break;\n                    }\n                }\n            }\n\n            return xhr;\n        },\n\n        /**\n         * Parses a resource name into its component parts. Resource names\n         * look like: module/name.ext!strip, where the !strip part is\n         * optional.\n         * @param {String} name the resource name\n         * @returns {Object} with properties \"moduleName\", \"ext\" and \"strip\"\n         * where strip is a boolean.\n         */\n        parseName: function (name) {\n            var strip = false, index = name.indexOf(\".\"),\n                modName = name.substring(0, index),\n                ext = name.substring(index + 1, name.length);\n\n            index = ext.indexOf(\"!\");\n            if (index !== -1) {\n                //Pull off the strip arg.\n                strip = ext.substring(index + 1, ext.length);\n                strip = strip === \"strip\";\n                ext = ext.substring(0, index);\n            }\n\n            return {\n                moduleName: modName,\n                ext: ext,\n                strip: strip\n            };\n        },\n\n        xdRegExp: /^((\\w+)\\:)?\\/\\/([^\\/\\\\]+)/,\n\n        /**\n         * Is an URL on another domain. Only works for browser use, returns\n         * false in non-browser environments. Only used to know if an\n         * optimized .js version of a text resource should be loaded\n         * instead.\n         * @param {String} url\n         * @returns Boolean\n         */\n        useXhr: function (url, protocol, hostname, port) {\n            var uProtocol, uHostName, uPort,\n                match = text.xdRegExp.exec(url);\n            if (!match) {\n                return true;\n            }\n            uProtocol = match[2];\n            uHostName = match[3];\n\n            uHostName = uHostName.split(':');\n            uPort = uHostName[1];\n            uHostName = uHostName[0];\n\n            return (!uProtocol || uProtocol === protocol) &&\n                (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&\n                ((!uPort && !uHostName) || uPort === port);\n        },\n\n        finishLoad: function (name, strip, content, onLoad) {\n            content = strip ? text.strip(content) : content;\n            if (masterConfig.isBuild) {\n                buildMap[name] = content;\n            }\n            onLoad(content);\n        },\n\n        load: function (name, req, onLoad, config) {\n            //Name has format: some.module.filext!strip\n            //The strip part is optional.\n            //if strip is present, then that means only get the string contents\n            //inside a body tag in an HTML string. For XML/SVG content it means\n            //removing the <?xml ...?> declarations so the content can be inserted\n            //into the current doc without problems.\n\n            // Do not bother with the work if a build and text will\n            // not be inlined.\n            if (config.isBuild && !config.inlineText) {\n                onLoad();\n                return;\n            }\n\n            masterConfig.isBuild = config.isBuild;\n\n            var parsed = text.parseName(name),\n                nonStripName = parsed.moduleName + '.' + parsed.ext,\n                url = req.toUrl(nonStripName),\n                useXhr = (masterConfig.useXhr) ||\n                    text.useXhr;\n\n            //Load the text. Use XHR if possible and in a browser.\n            if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {\n                text.get(url, function (content) {\n                    text.finishLoad(name, parsed.strip, content, onLoad);\n                }, function (err) {\n                    if (onLoad.error) {\n                        onLoad.error(err);\n                    }\n                });\n            } else {\n                //Need to fetch the resource across domains. Assume\n                //the resource has been optimized into a JS module. Fetch\n                //by the module name + extension, but do not include the\n                //!strip part to avoid file system issues.\n                req([nonStripName], function (content) {\n                    text.finishLoad(parsed.moduleName + '.' + parsed.ext,\n                        parsed.strip, content, onLoad);\n                });\n            }\n        },\n\n        write: function (pluginName, moduleName, write, config) {\n            if (buildMap.hasOwnProperty(moduleName)) {\n                var content = text.jsEscape(buildMap[moduleName]);\n                write.asModule(pluginName + \"!\" + moduleName,\n                    \"define(function () { return '\" +\n                        content +\n                        \"';});\\n\");\n            }\n        },\n\n        writeFile: function (pluginName, moduleName, req, write, config) {\n            var parsed = text.parseName(moduleName),\n                nonStripName = parsed.moduleName + '.' + parsed.ext,\n            //Use a '.js' file name so that it indicates it is a\n            //script that can be loaded across domains.\n                fileName = req.toUrl(parsed.moduleName + '.' +\n                    parsed.ext) + '.js';\n\n            //Leverage own load() method to load plugin value, but only\n            //write out values that do not have the strip argument,\n            //to avoid any potential issues with ! in file names.\n            text.load(nonStripName, req, function (value) {\n                //Use own write() method to construct full module value.\n                //But need to create shell that translates writeFile's\n                //write() to the right interface.\n                var textWrite = function (contents) {\n                    return write(fileName, contents);\n                };\n                textWrite.asModule = function (moduleName, contents) {\n                    return write.asModule(moduleName, fileName, contents);\n                };\n\n                text.write(pluginName, nonStripName, textWrite, config);\n            }, config);\n        }\n    };\n\n    if (masterConfig.env === 'node' || (!masterConfig.env &&\n        typeof process !== \"undefined\" &&\n        process.versions &&\n        !!process.versions.node)) {\n        //Using special require.nodeRequire, something added by r.js.\n        fs = require.nodeRequire('fs');\n\n        text.get = function (url, callback) {\n            var file = fs.readFileSync(url, 'utf8');\n            //Remove BOM (Byte Mark Order) from utf8 files if it is there.\n            if (file.indexOf('\\uFEFF') === 0) {\n                file = file.substring(1);\n            }\n            callback(file);\n        };\n    } else if (masterConfig.env === 'xhr' || (!masterConfig.env &&\n        text.createXhr())) {\n        text.get = function (url, callback, errback) {\n            var xhr = text.createXhr();\n            xhr.open('GET', url, true);\n\n            //Allow overrides specified in config\n            if (masterConfig.onXhr) {\n                masterConfig.onXhr(xhr, url);\n            }\n\n            xhr.onreadystatechange = function (evt) {\n                var status, err;\n                //Do not explicitly handle errors, those should be\n                //visible via console output in the browser.\n                if (xhr.readyState === 4) {\n                    status = xhr.status;\n                    if (status > 399 && status < 600) {\n                        //An http 4xx or 5xx error. Signal an error.\n                        err = new Error(url + ' HTTP status: ' + status);\n                        err.xhr = xhr;\n                        errback(err);\n                    } else {\n                        callback(xhr.responseText);\n                    }\n                }\n            };\n            xhr.send(null);\n        };\n    } else if (masterConfig.env === 'rhino' || (!masterConfig.env &&\n        typeof Packages !== 'undefined' && typeof java !== 'undefined')) {\n        //Why Java, why is this so awkward?\n        text.get = function (url, callback) {\n            var stringBuffer, line,\n                encoding = \"utf-8\",\n                file = new java.io.File(url),\n                lineSeparator = java.lang.System.getProperty(\"line.separator\"),\n                input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),\n                content = '';\n            try {\n                stringBuffer = new java.lang.StringBuffer();\n                line = input.readLine();\n\n                // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324\n                // http://www.unicode.org/faq/utf_bom.html\n\n                // Note that when we use utf-8, the BOM should appear as \"EF BB BF\", but it doesn't due to this bug in the JDK:\n                // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058\n                if (line && line.length() && line.charAt(0) === 0xfeff) {\n                    // Eat the BOM, since we've already found the encoding on this file,\n                    // and we plan to concatenating this buffer with others; the BOM should\n                    // only appear at the top of a file.\n                    line = line.substring(1);\n                }\n\n                stringBuffer.append(line);\n\n                while ((line = input.readLine()) !== null) {\n                    stringBuffer.append(lineSeparator);\n                    stringBuffer.append(line);\n                }\n                //Make sure we return a JavaScript string and not a Java string.\n                content = String(stringBuffer.toString()); //String\n            } finally {\n                input.close();\n            }\n            callback(content);\n        };\n    }\n\n    return text;\n});"
  },
  {
    "path": "python/nav/web/static/js/resources/netmap/layer2_link_info.html",
    "content": "<div id=\"graph-info-modal\" class=\"link-info\">\n\n  <div class=\"row\">\n    <div class=\"small-12 columns nopadding\">\n      <table>\n\n        <thead>\n\n        <tr>\n          <th><img src=\"{{ sourceImg }}\" alt=\"{{ source.category }}\" width=\"24px\" height=\"24px\"></th>\n          <th><a href=\"{{ source.ipdevinfo_link }}\">{{ source.sysname }}</a></th>\n          <th></th>\n        </tr>\n        <tr>\n          <th></th>\n          <th><a class=\"right\" href=\"{{ target.ipdevinfo_link }}\">{{ target.sysname }}</a></th>\n          <th><img src=\"{{ targetImg }}\" alt=\"{{ target.category }}\" width=\"24px\" height=\"24px\"></th>\n        </tr>\n\n        </thead>\n\n\n        <tbody>\n        {{#each edges }}\n          <tr>\n            <td>\n              {{#if this.source.interface.ifname }}\n                {{#if this.source.interface.ipdevinfo_link }}\n                  <a href=\"{{ this.source.interface.ipdevinfo_link }}\">\n                    {{ this.source.interface.ifname }}\n                  </a>\n                {{else}}\n                  {{ this.source.interface.ifname }}\n                {{/if }}\n              {{else}}\n                N/A\n              {{/if }}\n            </td>\n            <td>\n              <small>{{traffic_data this.traffic.source }}</small>\n              <span class=\"load-arrow\"\n                {{# if this.traffic.source.css }}\n                  style=\"color: rgb({{ this.traffic.source.css }});\"\n                {{/if }}\n                >&#10096;</span>\n              {{ this.link_speed }} mbps\n              <span class=\"load-arrow\"\n                {{#if this.traffic.target.css }}\n                  style=\"color: rgb({{ this.traffic.target.css }});\"\n                {{/if }}\n                >&#10097;</span>\n              <small>{{traffic_data this.traffic.target }}</small>\n            </td>\n            <td>\n              {{#if this.target.interface.ifname }}\n                {{#if this.target.interface.ipdevinfo_link}}\n                  <a href=\"{{this.target.interface.ipdevinfo_link}}\">\n                    {{this.target.interface.ifname}}\n                  </a>\n                {{else}}\n                  {{this.target.interface.ifname}}\n                {{/if }}\n              {{else}}\n                N/A\n              {{/if }}\n            </td>\n          </tr>\n        {{/each }}\n        </tbody>\n      </table>\n    </div>\n  </div>\n\n  {{#if vlans }}\n    <div class=\"row\">\n      <div id=\"graph-info-vlan-list\" class=\"small-12 columns nopadding\">\n        <ul>\n          {{#each vlans }}\n            <li>\n              <a class=\"vlan {{#if this.isSelected }}selected-vlan{{/if }}\" data-nav-vlan=\"{{this.nav_vlan}}\" title=\"{{this.vlan}} - {{this.net_ident}}\">\n                <span>{{this.vlan}}</span>\n                {{#if this.net_ident }}\n                  {{this.net_ident}}\n                {{else}}\n                  N/A\n                {{/if }}\n              </a>\n            </li>\n          {{/each }}\n        </ul>\n      </div>\n    </div>\n  {{/if }}\n\n</div>"
  },
  {
    "path": "python/nav/web/static/js/resources/netmap/layer3_link_info.html",
    "content": "<div id=\"graph-info-modal\" class=\"vlan-info\">\n\n  {{#if warning }}\n    <div class=\"row\">\n      <div class=\"medium-12 columns\">\n        <span class=\"alert-box alert\">{{ warning }}</span>\n      </div>\n    </div>\n  {{/if }}\n\n  <div class=\"row\">\n    <div class=\"small-12 columns nopadding\">\n\n      <table>\n\n        <thead>\n\n        <tr>\n          <th>\n            <img src=\"{{ sourceImg }}\" alt=\"{{ source.category }}\" width=\"16px\" height=\"16px\">\n            <a href=\"{{ source.ipdevinfo_link }}\">{{ source.sysname }}</a>\n          </th>\n\n          <th>\n            <img src=\"{{ targetImg }}\" alt=\"{{ target.category }}\" width=\"16px\" height=\"16px\">\n            <a href=\"{{ target.ipdevinfo_link }}\">{{ target.sysname }}</a>\n          </th>\n        </tr>\n\n        </thead>\n\n        <tbody>\n          <tr>\n            <td colspan=\"2\">\n              {{traffic_data traffic.traffic_data.source }}\n              <span class=\"load-arrow\"\n                {{# if traffic.traffic_data.source.css }}\n                  style=\"color: rgb({{ traffic.traffic_data.source.css }});\"\n                {{/if }}\n                >&#10096;</span>\n              <span class=\"load-arrow\"\n                {{#if traffic.traffic_data.target.css }}\n                  style=\"color: rgb({{ traffic.traffic_data.target.css }});\"\n                {{/if }}\n                >&#10097;</span>\n              {{traffic_data traffic.traffic_data.target }}\n            </td>\n          </tr>\n\n        {{#each edges }}\n\n          <thead>\n            <tr>\n              <th colspan=\"2\">\n                <h6>{{ this.vlan.net_ident }}</h6>\n                <h6 class=\"subheader\">{{ this.vlan.description }}</h6>\n              </th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {{#each this.edges }}\n              <tr>\n                <td colspan=\"2\">\n                  <a href=\"{{ this.prefix.report_link }}\">{{ this.prefix.net_address }}</a>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  {{#if this.source.interface.ifname }}\n                    {{#if this.source.interface.ipdevinfo_link }}\n                      <a href=\"{{ this.source.interface.ipdevinfo_link }}\">{{ this.source.interface.ifname }}</a>\n                    {{else }}\n                      {{ this.source.interface.ifname }}\n                    {{/if }}\n                  {{else }}\n                    N/A\n                  {{/if }}\n                </td>\n                <td>\n                  {{#if this.target.interface.ifname }}\n                    {{#if this.target.interface.ipdevinfo_link }}\n                      <a href=\"{{ this.target.interface.ipdevinfo_link }}\">{{ this.target.interface.ifname }}</a>\n                    {{else }}\n                      {{ this.target.interface.ifname }}\n                    {{/if }}\n                  {{else }}\n                    N/A\n                  {{/if }}\n                </td>\n              </tr>\n              <tr>\n                <td>{{ this.source.gw_ip }}</td>\n                <td>{{ this.target.gw_ip }}</td>\n              </tr>\n            {{/each }}\n          </tbody>\n\n        {{/each }}\n        </tbody>\n\n      </table>\n\n    </div>\n  </div>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/netmap/node_info.html",
    "content": "<div id=\"graph-info-modal\" class=\"node-info\">\n  <img src=\"{{ img }}\" width=\"32px\" height=\"32px\">\n  <img src=\"/static/images/lys/{{ up_image }}\" alt=\"{{ up }}\" class=\"right\">\n  <ul class=\"no-bullet\">\n    {{#unless is_elink_node }}\n      <li><a href=\"{{ ipdevinfo_link }}\">{{ ip }}</a></li>\n    {{/unless }}\n      <li><b>Category:</b> {{ category }}</li>\n    {{#unless is_elink_node  }}\n      <li><b>Room:</b> {{#if room }}{{ room }}{{else}}N/A{{/if }}</li>\n      <li><b>Location:</b> {{#if location }}{{ location }}{{else}}N/A{{/if }}</li>\n    {{/unless }}\n  </ul>\n  {{#if vlans }}\n    <div id=\"graph-info-vlan-list\">\n      <ul>\n        {{#each vlans }}\n          <li>\n            <a class=\"vlan {{#if this.isSelected }}selected-vlan{{/if }}\" data-nav-vlan=\"{{this.nav_vlan}}\" title=\"{{this.vlan}} - {{this.net_ident}}\">\n              <span>{{this.vlan}}</span>\n              {{#if this.net_ident }}\n                {{this.net_ident}}\n              {{else}}\n                N/A\n              {{/if }}\n            </a>\n          </li>\n        {{/each }}\n      </ul>\n    </div>\n  {{/if }}\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/networkexplorer/gwport.html",
    "content": "<img id=\"expand-gwport-{{pk}}\"\n     {{#if expandable }}\n      {{#equal state \"expanded\" }}\n        src=\"{{ navImagePath }}/networkexplorer/collapse.gif\">\n      {{else }}\n        src=\"{{ navImagePath }}/networkexplorer/expand.gif\">\n      {{/equal }}\n     {{else }}\n      src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n     {{/if }}\n\n<a href=\"/ipdevinfo/{{sysname}}/interface={{pk}}/\">{{fields.ifname}}</a>\n{{#if netbox_sysname }}\n  {{#if trunk_port }}\n    <abbr title=\"trunk port\">⇉</abbr>\n  {{else}}\n    <abbr title=\"non-trunk port\">→</abbr>\n  {{/if }}\n  {{netbox_sysname}}\n{{/if }}\n{{#if prefixes.length }}\n  <ul>\n    <li class=\"tree-header\">Prefixes:</li>\n    <ul class=\"prefixes\">\n      {{#each prefixes }}\n        <li>\n          ({{this.display_addr }}, {{this.net_type }}, {{this.net_ident }})\n        </li>\n      {{/each }}\n    </ul>\n  </ul>\n{{/if }}\n\n{{#if expandable }}\n  <ul class=\"children\">\n    {{#equal state \"expanded\" }}\n      <li class=\"tree-header\">Connected swports:</li>\n    {{/equal }}\n  </ul>\n{{/if }}\n"
  },
  {
    "path": "python/nav/web/static/js/resources/networkexplorer/router.html",
    "content": "<img id=\"expand-router-{{pk}}\"\n     {{#if expandable }}\n      {{#equal state \"expanded\" }}\n        src=\"{{ navImagePath }}/networkexplorer/collapse.gif\">\n      {{else }}\n        src=\"{{ navImagePath }}/networkexplorer/expand.gif\">\n      {{/equal }}\n     {{else }}\n      {{#if end }}\n        src=\"{{ navImagePath }}/networkexplorer/end.gif\">\n      {{else }}\n        src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n      {{/if }}\n     {{/if }}\n\n<a href=\"/ipdevinfo/{{fields.sysname}}/\">{{fields.sysname}}</a>\n\n{{#if expandable }}\n  <ul class=\"children\">\n    {{#equal state \"expanded\" }}\n      <li class=\"tree-header\">Router ports:</li>\n    {{/equal }}\n  </ul>\n{{/if }}\n"
  },
  {
    "path": "python/nav/web/static/js/resources/networkexplorer/switch.html",
    "content": "<img\n     {{#if expandable }}\n      {{#equal state \"expanded\" }}\n        src=\"{{ navImagePath }}/networkexplorer/collapse.gif\">\n      {{else }}\n        src=\"{{ navImagePath }}/networkexplorer/expand.gif\">\n      {{/equal }}\n     {{else }}\n      src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n     {{/if }}\n\n<a href=\"/ipdevinfo/{{interface_netbox_sysname}}/\">{{interface_netbox_sysname}}</a>\n[{{interface.ifname}}]\n\n{{#if interface.ifalias }}\n  ({{ interface.ifalias }})\n{{/if }}\n\n{{#if connected_to }}\n  {{#if interface.trunk }}\n    <abbr title=\"trunk port\">⇉</abbr>\n  {{else }}\n    <abbr title=\"non-trunk port\">→</abbr>\n  {{/if }}\n    <a href=\"/ipdevinfo/{{ connected_to.sysname }}/\">{{ connected_to.short }}</a>\n{{else }}\n  ({{ interface.ifalias }})\n  {{#if interface.trunk }}\n    <abbr title=\"trunk port\">(trunk)</abbr>\n  {{/if }}\n{{/if }}\n"
  },
  {
    "path": "python/nav/web/static/js/resources/networkexplorer/swport.html",
    "content": "<img id=\"expand-swport-{{pk}}\"\n     {{#if expandable }}\n      {{#equal state \"expanded\" }}\n        src=\"{{ navImagePath }}/networkexplorer/collapse.gif\">\n      {{else }}\n        src=\"{{ navImagePath }}/networkexplorer/expand.gif\">\n      {{/equal }}\n     {{else }}\n      src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n     {{/if }}\n\n<a href=\"/ipdevinfo/{{netbox_sysname }}/\">{{module_netbox_sysname }}</a>\n[{{interface.ifname }}]\n\n{{#if connected_to }}\n  {{#if interface.trunk }}\n    <abbr title=\"trunk port\">⇉</abbr>\n  {{else }}\n    <abbr title=\"non-trunk port\">→</abbr>\n  {{/if }}\n    <a href=\"/ipdevinfo/{{ connected_to.sysname }}/\">{{ connected_to.short }}</a>\n{{else }}\n  ({{ interface.ifalias }})\n  {{#if interface.trunk }}\n    <abbr title=\"trunk port\">(trunk)</abbr>\n  {{/if }}\n{{/if }}\n\n\n{{#if expandable }}\n  <ul class=\"children\">\n    {{#equal state \"expanded\" }}\n      {{#if connected_to_switch }}\n        <li class=\"tree-header\">Swports on Vlan{{ subheader_vlan }} on {{ subheader_netbox }}</li>\n      {{/if }}\n    {{/equal }}\n  </ul>\n{{/if }}\n"
  },
  {
    "path": "python/nav/web/static/js/resources/networkexplorer/swport_leaf.html",
    "content": "{{#if services }}\n  {{#each services }}\n    <img src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n    {{ service.handler }} - Status: {{ service.up }}\n\n    <ul>\n      {{#if active_hosts }}\n        <li>>Active hosts behind port</li>\n        {{#each active_hosts }}\n          <li>\n            <img src=\"{{ navImagePath }}/networkexplorer/vertical-bound.gif\">\n            {{ host }}\n          </li>\n        {{/each }}\n      {{/if }}\n    </ul>\n  {{/each }}\n{{/if }}\n"
  },
  {
    "path": "python/nav/web/static/js/resources/rickshawgraph/graphtemplate.hbs",
    "content": "<div class=\"rickshaw-title\">{{ graph_title }}</div>\n<div class=\"rickshaw-y-axis-term\">{{ graph_y_axis }}</div>\n<div class=\"rickshaw-y-axis\"></div>\n<div class=\"rickshaw-graph\"></div>\n<div class=\"rickshaw-preview\"></div>\n<div class=\"rickshaw-legend\"></div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/room/counter.html",
    "content": "<div class=\"counter-node\">\n    <div class=\"values\">\n        <div class=\"value\">{{ value }}</div>\n        <div class=\"unit\">{{ unit }}</div>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/room/detail.html",
    "content": "<span class=\"detail_swatch\" style=\"background-color: {{ color }}\"></span>\n<div class=\"series_value\">{{ name }}: {{ number }}</div>\n<div class=\"date\">{{ date }}</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/room/sensor.html",
    "content": "<div style=\"position: relative\">\n\n  <h5 title=\"{{ legend }}\">\n    {{ legend }}\n  </h5>\n\n  <div id=\"current{{ sensorid }}\" class=\"current\"></div>\n\n  {{#if showGraph}}\n  <div class=\"rs-graph\">\n    <div class=\"rs-ynode\"></div>\n    <div id=\"graph{{ sensorid }}\" class=\"rs-graphnode\"></div>\n    <div class=\"rs-slidernode\"></div>\n  </div>\n  {{/if}}\n\n  {{#if dashboardUrl}}\n  <div class=\"button-wrapper\">\n    <a href=\"\" class=\"button tiny secondary add-to-dashboard\"\n       title=\"Add sensor to dashboard\"\n       data-url=\"{{ dashboardUrl }}\">\n      Add sensor to dashboard\n    </a>\n  </div>\n  {{/if}}\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/seeddb/hstore_container.html",
    "content": "<div class=\"hstoreValues\">\n    <div class=\"nav-tooltip\">\n        <i class=\"fa fa-info-circle\" aria-describedby=\"attributes-custom-information\"></i>\n        <span id=\"attributes-custom-information\" role=\"tooltip\">\n            These are attributes for storing custom informaton. It may be used for storing additional contacts, phone numbers and so on.\n        </span>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/seeddb/hstore_row.html",
    "content": "<div class=\"row collapse\">\n  <div class=\"small-5 column\">\n    <input type=\"text\" value=\"{{ this.key }}\" placeholder=\"Key\">\n  </div>\n  <div class=\"small-6 column\">\n    <input type=\"text\" value=\"{{ this.value }}\" class=\"hstore_value\" placeholder=\"Value\">\n  </div>\n  <div class=\"small-1 column\">\n    <a class=\"button secondary postfix remove-hstore-row\"><i class=\"fa fa-times\"></i></a>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/status2/event_template.hbs",
    "content": "<td class=\"action-cell\">\n  <label>\n    <input class='alert-action' type=\"checkbox\" />\n  </label>\n</td>\n\n<td>\n  {{#if on_maintenance}}<i class=\"fa fa-wrench fa-lg\" title=\"On maintenance\"></i>{{/if}}\n  {{#if acknowledgement}}<i class=\"fa fa-check-circle-o fa-lg\" title=\"Acknowledged\"></i>{{/if}}\n</td>\n\n<td class=\"toggle-info-cell\">\n    <div id=\"popover-info-{{id}}\" class=\"popover with-arrow\">\n        <a\n            data-popover-target=\"#popover-info-{{id}}\"\n            aria-expanded=\"false\"\n            aria-haspopup=\"true\"\n            ><i class=\"fa fa-info-circle\"></i></a>\n        <div class=\"popover-content medium\">\n            <ul>\n              <li><a href=\"{{event_details_url}}\">Event details</a></li>\n              <li><a href=\"{{event_history_url}}\">History for {{alert_type.name}}</a></li>\n              {{#if netbox_history_url}}\n              <li><a href=\"{{netbox_history_url}}\">History for {{subject}}</a></li>\n              {{/if}}\n            </ul>\n            <div class='api-html'></div>\n        </div>\n   </div>\n</td>\n\n<td>\n  {{#if subject_url }}<a href=\"{{ subject_url }}\">{{ subject }}</a>\n  {{else}}{{ subject }}{{/if}}\n</td>\n\n<td><span title=\"{{ alert_type.description }}\">{{ alert_type.name }}</span></td>\n\n<td>\n    {{ dateFormat start_time }}\n</td>\n\n<td>\n    {{#if end_time}}\n        {{ timeSince start_time }}\n    {{/if}}\n</td>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/vue/environment_rack.html",
    "content": "<div class=\"rack\" v-if=\"rack\">\n  <h5 class=\"rack-heading\">\n    <span class=\"rackname\">{{ rack.rackname }}</span>\n  </h5>\n\n  <div class=\"rack-body\">\n    <div>\n      <left-item v-for=\"item in rack.configuration.left\"\n                 :item=\"item\"\n                 :key=\"item.id\"></left-item>\n    </div>\n\n    <div class=\"rack-center rack-column\">\n      <center-item v-for=\"item in rack.configuration.center\"\n                   :item=\"item\"\n                   :key=\"item.id\"></center-item>\n    </div>\n\n    <div>\n      <right-item v-for=\"item in rack.configuration.right\"\n                  :item=\"item\"\n                  :key=\"item.id\"></right-item>\n    </div>\n\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/vue/environment_rack_item.html",
    "content": "<div class=\"rack-sensor\"\n     :title=\"item.title\">\n  <div class=\"heading\">\n    <a :href=\"item.absolute_url\">\n      {{ item.human_readable }}\n    </a>\n  </div>\n  <div v-if=\"item.unit_of_measurement == 'boolean'\">\n    <div v-if=\"item.value == item.display_configuration.on_state\" :class=\"['alert-box', item.display_configuration.alert_type]\">{{ item.display_configuration.on_message }}</div>\n    <div v-else class=\"alert-box success\">{{ item.display_configuration.off_message }}</div>\n  </div>\n  <div v-else>\n    <div class=\"sparkline\"></div>\n    <small class=\"textvalue\">{{ item.value }}</small>\n    <small>{{ item.unit_of_measurement }}</small>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/resources/vue/environment_rack_pdu_item.html",
    "content": "<div class=\"rack-sensor\"\n     :title=\"item.title\">\n  <a :href=\"item.absolute_url\">\n    <div class=\"pdu-gauge\"></div>\n  </a>\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/src/500.js",
    "content": "require([\"jquery\"], function () {\n\n\t$(function () {\n\n\t\tvar toggleTraceback = function () {\n\t\t\t$('#chevron').toggleClass('fa-chevron-up');\n\t\t\t$('#chevron').toggleClass('fa-chevron-down');\n\t\t\t$('.traceback-info').toggle();\n\t\t}\n\n\t\t$('#traceback').on('click', function (e) {\n\t\t\te.preventDefault();\n\t\t\ttoggleTraceback();\n\t\t});\n\t});\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/alertprofiles.js",
    "content": "/* JavaScripts for Alert the Profiles subsystem in NAV\n *\n * Copyright (C) 2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under the\n * terms of the GNU General Public License version 3 as published by the Free\n * Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nrequire([], function() {\n\n    var containerSelector = \"#timeperiods_table_container\";\n    \n\n    /**\n     * Finds and returns the class that starts with 'period_' for the given\n     * element. The class is prepended a dot (.) for use in jQuery selectors.\n     *\n     * @param {HTMLElement} element Element that has the class\n     */\n    var findSharedClass = function(element) {\n        return element.className.split(' ').filter(function(klass){\n            return klass.match(/period_/);\n        }).map(function(klass) {\n            return '.' + klass;\n        }).join(' ');        \n    };\n    \n\n    /**\n     * Highlights shared time-periods\n     */\n    var doHighlight = function() {\n        $(findSharedClass(this)).addClass('hilight');\n    };\n\n\n    /**\n     * Removes highlight from shared time-periods\n     */\n    var removeHighlight = function() {\n        $(findSharedClass(this)).removeClass('hilight');\n    };\n\n    \n    /**\n     * Switch between multiple and single select list in the expression form\n     */\n    var switchMultiple = function() {\n\tif ($(\"select#id_operator\").val() === \"11\") {\n\t    $(\"select#id_value\").attr('multiple', 'multiple');\n\t} else {\n\t    $(\"select#id_value\").removeAttr('multiple');\n\t}\n    };\n\n\n    /**\n     * When toggling a period that is shared with another period, toggle the\n     * other period aswell.\n     */\n    var checkMultiple = function() {\n        var that = this,\n            sharedClass = $(this).closest('td').attr('class'),\n            selector = '.' + sharedClass + ' input';\n        \n        $(containerSelector).find(selector).filter(function() {\n            return this !== that;\n        }).prop('checked', this.checked);\n    };\n\n    $(function() {\n        var $timePeriods = $(containerSelector).find(\"tr.all_days_period\"),\n            $operator = $(\"select#id_operator\");\n\t$timePeriods.hover(doHighlight, removeHighlight);\n\t$timePeriods.find(\"input\").click(checkMultiple);\n\t$operator.ready(switchMultiple);\n\t$operator.change(switchMultiple);\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/arnold.js",
    "content": "require(['src/libs/tablesort_extensions'], function (tablesort) {\n    const profileForm = document.querySelector('form.profileDetentionForm');\n    if (profileForm) {\n        addVlanToggler(document.getElementById('id_detention_type'));\n    }\n\n    const manualForm = document.querySelector('form.manualDetentionForm');\n    if (manualForm) {\n        addVlanToggler(document.getElementById('id_method'));\n    }\n\n    // Add tablesorter to history table\n    const historyTable = document.querySelector('.arnold-history');\n    if (historyTable?.querySelector('tbody')) {\n        tablesort.init(historyTable, {\n            headers: {\n                0: { sorter: 'ip-address' },\n                7: { sorter: 'iso-datetime' },\n                8: { sorter: false }\n            }\n        });\n    }\n\n    // Add tablesorter to detained ports table\n    const detainedTable = document.querySelector('.arnold-detainedports');\n    if (detainedTable?.querySelector('tbody')) {\n        tablesort.init(detainedTable, {\n            headers: {\n                0: { sorter: 'ip-address' },\n                6: { sorter: 'iso-datetime' },\n                7: { sorter: false },\n                8: { sorter: false }\n            }\n        });\n    }\n\n    function addVlanToggler(selectNode) {\n        const row = document.querySelector('.qvlanrow');\n        if (!row || !selectNode) return;\n\n        if (selectNode.value !== 'quarantine') {\n            row.classList.add('hidetrick');\n        }\n\n        selectNode.addEventListener('change', function () {\n            if (this.value === 'quarantine') {\n                row.classList.remove('hidetrick');\n            } else {\n                row.classList.add('hidetrick');\n            }\n        });\n    }\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/business.js",
    "content": "require(['jquery'], function() {\n\n    var subscriptionReloadEvent = \"nav.events.reload-subscription-list\";\n    var storageKey = 'nav-business-deleted-subscription';\n    var $undoContainer = $(\"#undounsubscribe\");\n\n    /**\n     * Set even height on all report cards\n     */\n    function setMaxHeight($listElements) {\n        console.log('Resizing');\n        var maxHeight = 0;\n\n        $listElements.height('auto');\n\n        $listElements.each(function() {\n            var height = $(this).height();\n            if (height > maxHeight) {\n                maxHeight = height;\n            }\n        });\n\n        $listElements.height(maxHeight);\n\n    }\n\n\n    /**\n     * Wait for page load\n     */\n    $(function() {\n\n        // Make sure all report links are of same height\n        var $listElements = $('#report-list li');\n        if ($listElements.length > 1) {\n            setMaxHeight($listElements);\n            $(window).on('resize', function() {\n                setMaxHeight($listElements);\n            });\n        }\n\n\n        // For availability reports, toggle incidents on click\n        $('#record-table').on('click', function(event){\n           var $target = $(event.target);\n           if ($target.hasClass('toggle-incident')) {\n               var $incident = $target.closest('.record-row').next();\n               if ($incident.hasClass('hidden')) {\n                   $incident.removeClass('hidden');\n                   $target.text('Hide');\n               } else {\n                   $incident.addClass('hidden');\n                   $target.text('Show');\n               }\n           }\n        });\n\n\n        addSubscriptionListener();\n        addRefreshSubscriptionListListener();\n        addRemoveSubscriptionListener();\n        addUndoUnsubscribeListener();\n    });\n\n    /**\n     * Listen to form submits for adding subscriptions. Submit form by ajax and\n     * reload subscription list\n     */\n    function addSubscriptionListener() {\n        $('#subscription-form').on('submit', function(event) {\n            event.preventDefault();\n            var $form = $(this);\n            $.post($form.attr(\"action\"), $form.serialize())\n             .then(function() {\n                 if (_.has($form.get(0).elements, 'new_address')) {\n                     window.location.reload();\n                 } else {\n                     $('body').trigger(subscriptionReloadEvent);\n                 }\n             });\n        })\n    }\n\n    /** Reload subscription list when subscription reload events are triggered */\n    function addRefreshSubscriptionListListener() {\n        var $subscriptionList = $('#subscription-list');\n        $('body').on(subscriptionReloadEvent, function() {\n            $.get(NAV.urls.render_report_subscriptions, function(html) {\n                $subscriptionList.html(html);\n            })\n        })\n    }\n\n    /** Remove subscription when unsubscribe button is clicked, then reload subscription list */\n    function addRemoveSubscriptionListener() {\n        var $subscriptionList = $('#subscription-list');\n        $subscriptionList.on('click', 'button', function(event) {\n            var serializedSubscription = $(this).data('subscriptionObject');\n            $.post(NAV.urls.remove_report_subscription, {\n                subscriptionId: $(this).data('subscriptionId')\n            }).then(function() {\n                localStorage.setItem(storageKey, JSON.stringify(serializedSubscription));\n                $('body').trigger(subscriptionReloadEvent);\n                $undoContainer.css('display', 'flex');\n            })\n        })\n    }\n\n    function addUndoUnsubscribeListener() {\n        $undoContainer.on('click', 'button', function() {\n            var data = JSON.parse(localStorage.getItem(storageKey));\n            $.post(NAV.urls.save_report_subscription, data)\n             .then(function() {\n                 $('body').trigger(subscriptionReloadEvent);\n                 $undoContainer.hide();\n             })\n        })\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_config.js",
    "content": "/**\n * DataTables 2.x configuration for legacy class name compatibility.\n * This ensures existing CSS continues to work after upgrading from 1.x.\n */\ndefine(['datatables'], function () {\n    const DataTable = $.fn.DataTable;\n\n    // Configure legacy class names for CSS compatibility\n    $.extend(true, DataTable.ext.classes, {\n        container: 'dataTables_wrapper',\n        search: {\n            container: 'dataTables_filter',\n            input: ''\n        },\n        length: {\n            container: 'dataTables_length',\n            select: ''\n        },\n        info: {\n            container: 'dataTables_info'\n        },\n        paging: {\n            container: 'dataTables_paginate',\n            button: 'paginate_button',\n            active: 'current',\n            disabled: 'disabled',\n            nav: ''\n        },\n        // Use legacy layout classes (empty to avoid new grid system)\n        layout: {\n            row: '',\n            cell: '',\n            tableRow: '',\n            tableCell: '',\n            start: '',\n            end: '',\n            full: ''\n        },\n        // Sorting classes - these go under 'order' in 2.x\n        order: {\n            canAsc: 'sorting',\n            canDesc: 'sorting',\n            isAsc: 'sorting_asc',\n            isDesc: 'sorting_desc',\n            none: 'sorting_disabled',\n            position: 'sorting_'\n        },\n        table: 'dataTable',\n        thead: {\n            cell: '',\n            row: ''\n        },\n        tbody: {\n            cell: '',\n            row: ''\n        },\n        tfoot: {\n            cell: '',\n            row: ''\n        }\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/altsort.js",
    "content": "define(['datatables'], function () {\n    $.fn.DataTable.ext.type.order['alt-string-pre'] = (data) => {\n        return data.match(/alt=\"(.*?)\"/)[1].toLowerCase();\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/date_title_sort.js",
    "content": "define(['datatables'], function () {\n    /* Custom sort on date in title - created for NAV */\n    $.fn.DataTable.ext.type.order['title-date-pre'] = (data) => {\n        if (/Never/.test(data)) {\n            return 2;\n        } else if (/title=\"(.*?)\"/.test(data)) {\n            const timestamp = data.match(/title=\"(.*?)\"/)[1];\n            if (timestamp.trim() !== '') {\n                const [dateStr, timeStr] = timestamp.trim().split(' ');\n                const dates = dateStr.split('-');\n                const times = timeStr.split(':');\n                return (dates[0] + dates[1] + dates[2] + times[0] + times[1]) * 1;\n            }\n        }\n        return 1;\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/ip_address_sort.js",
    "content": "/*\n * Copied from http://www.datatables.net/plug-ins/sorting\n * Author: Brad Wasson\n */\nrequire(['datatables'], function () {\n    $.fn.DataTable.ext.type.order['ip-address-pre'] = (data) => {\n        return data.split('.').map((octet) => octet.padStart(3, '0')).join('');\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/ip_address_typedetect.js",
    "content": "/*\n * Copied from http://www.datatables.net/plug-ins/type-detection\n * Author: Brad Wasson\n */\n\nrequire(['datatables'], function () {\n    $.fn.DataTable.ext.type.detect.unshift((data) => {\n        if (/^\\d{1,3}[.]\\d{1,3}[.]\\d{1,3}[.]\\d{1,3}$/.test(data)) {\n            return 'ip-address';\n        }\n        return null;\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/modulesort.js",
    "content": "/*\n This module is used for sorting based on module-name in NAV. It's highly\n targetted at sorting specifically Cisco modules based on module-number\n */\ndefine(['dt_plugins/natsort', 'datatables'], function (naturalSort) {\n    function moduleSort(a, b) {\n        a = stripTags(a);\n        b = stripTags(b);\n        if (bothAreStrings(a, b) && bothAreCiscoInterfaceNames(a, b)) {\n            return naturalSort(\n                a.slice(a.search(/\\d/)),\n                b.slice(b.search(/\\d/))\n            );\n        } else {\n            return naturalSort(a, b);\n        }\n    }\n\n    function bothAreCiscoInterfaceNames(a, b) {\n        return isCiscoInterfaceName(a) && isCiscoInterfaceName(b);\n    }\n\n    function isCiscoInterfaceName(ifname) {\n        return ifname.match(/(gi|fa|te)\\d+\\/\\d+/i);\n    }\n\n    function bothAreStrings(a, b) {\n        return typeof a === 'string' && typeof b === 'string';\n    }\n\n    function stripTags(input) {\n        return $(`<div>${input}</div>`).text();\n    }\n\n    $.fn.DataTable.ext.type.order['module-pre'] = (data) => data;\n\n    $.fn.DataTable.ext.type.order['module-asc'] = (a, b) => moduleSort(a, b);\n\n    $.fn.DataTable.ext.type.order['module-desc'] = (first, second) => moduleSort(second, first);\n\n    return moduleSort;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/natsort.js",
    "content": "define(['datatables'], function () {\n    /*\n     * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\n     * Author: Jim Palmer (based on chunking idea from Dave Koelle)\n     * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo\n     * See: http://js-naturalsort.googlecode.com/svn/trunk/naturalSort.js\n     */\n    function naturalSort(a, b) {\n        const re = /(^-?[0-9]+(\\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;\n        const sre = /(^[ ]*|[ ]*$)/g;\n        const ore = /^0/;\n        // convert all to strings and trim()\n        const x = a.toString().replace(sre, '') || '';\n        const y = b.toString().replace(sre, '') || '';\n        // chunk/tokenize\n        const xN = x.replace(re, '\\0$1\\0').replace(/\\0$/, '').replace(/^\\0/, '').split('\\0');\n        const yN = y.replace(re, '\\0$1\\0').replace(/\\0$/, '').replace(/^\\0/, '').split('\\0');\n        // natural sorting through split numeric strings and default strings\n        const numS = Math.max(xN.length, yN.length);\n        for (let cLoc = 0; cLoc < numS; cLoc++) {\n            // find floats not starting with '0', string or 0 if not defined (Clint Priest)\n            let oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\n            let oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\n            // handle numeric vs string comparison - number < string - (Kyle Adams)\n            if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return isNaN(oFxNcL) ? 1 : -1;\n            // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n            else if (typeof oFxNcL !== typeof oFyNcL) {\n                oFxNcL += '';\n                oFyNcL += '';\n            }\n            if (oFxNcL < oFyNcL) return -1;\n            if (oFxNcL > oFyNcL) return 1;\n        }\n        return 0;\n    }\n\n    $.fn.DataTable.ext.type.order['natural-pre'] = (data) => data;\n\n    $.fn.DataTable.ext.type.order['natural-asc'] = (a, b) => naturalSort(a, b);\n\n    $.fn.DataTable.ext.type.order['natural-desc'] = (a, b) => naturalSort(a, b) * -1;\n\n    return naturalSort;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/numeric_html.js",
    "content": "/*\n    Copied from: http://legacy.datatables.net/plug-ins/sorting\n    Author: Allan Jardine\n*/\nrequire(['datatables'], function () {\n    $.fn.DataTable.ext.type.order['num-html-pre'] = (data) => {\n        const x = String(data).replaceAll(/[<>]/g, '');\n        return parseFloat(x);\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/dt_plugins/percent_sort.js",
    "content": "/*\n    Copied from: http://legacy.datatables.net/plug-ins/sorting\n    Author: Jonathan Romley\n*/\nrequire(['datatables'], function () {\n    $.fn.DataTable.ext.type.order['percent-pre'] = (data) => {\n        const x = data === '-' ? 0 : data.replace(/%/, '');\n        return parseFloat(x);\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/getting_started_wizard.js",
    "content": "define(['driver'], function () {\n    'use strict';\n\n    function initGettingStartedWizard() {\n        const driver = window.driver.js.driver;\n\n        function handleDone(_element, _step, options) {\n            window.scrollTo({ top: 0, behavior: 'smooth' });\n            options.driver.destroy();\n        }\n\n        const desktopSteps = [\n            {\n                element: \"#getting-started-wizard\",\n                popover: {\n                    title: 'Welcome to NAV!',\n                    description: '<p>This 30 second tour will show you the basics.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '#navbar-search-form',\n                popover: {\n                    title: 'Search',\n                    description: '<p>Search for IP Devices, rooms, interfaces, VLANs and so forth here.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '#megadroptoggler',\n                popover: {\n                    title: 'Your Tools',\n                    description: '<p>All your tools can be found here.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '#widgets-action-add',\n                popover: {\n                    title: 'Widgets',\n                    description: '<p>More widgets can be added by using this button.</p>',\n                    side: 'left'\n                }\n            },\n            {\n                element: '.navlet-action-group',\n                popover: {\n                    title: 'Widget Controls',\n                    description: '<p>Move or remove the widget. In many cases you will also see an edit option so that you can personalize the display.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '#footer-documentation-link',\n                popover: {\n                    description: '<p>Our documentation and wiki pages are stuffed with more information about NAV. A <a href=\"/doc\" title=\"local documentation\">local copy of the documentation</a> is also available.</p>',\n                    side: 'top',\n                    onNextClick: handleDone\n                }\n            }\n        ];\n\n        const mobileSteps = [\n            {\n                popover: {\n                    title: 'Welcome to NAV!',\n                    description: '<p>This 30 second tour will show you the basics.</p>'\n                }\n            },\n            {\n                element: '.toggle-topbar',\n                popover: {\n                    title: 'Search and Tools',\n                    description: '<p>Open the menu on the top right to get access to search and tools.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '.navlet-action-group',\n                popover: {\n                    title: 'Widget Controls',\n                    description: '<p>Move or remove the widget by using the icons. In many cases you will also see an edit option so that you can personalize the display.</p>',\n                    side: 'bottom'\n                }\n            },\n            {\n                element: '#footer-documentation-link',\n                popover: {\n                    description: '<p>Our documentation and wiki pages are stuffed with more information about NAV. A <a href=\"/doc\" title=\"local documentation\">local copy of the documentation</a> is also available.</p>',\n                    side: 'top',\n                    onNextClick: handleDone\n                }\n            }\n        ];\n\n        const isMobile = window.innerWidth <= 768;\n        const steps = isMobile ? mobileSteps : desktopSteps;\n\n        const driverObj = driver({\n            showProgress: true,\n            smoothScroll: true,\n            steps: steps\n        });\n\n        driverObj.drive();\n    }\n\n    return {\n        start: initGettingStartedWizard\n    }\n})\n"
  },
  {
    "path": "python/nav/web/static/js/src/image_upload.js",
    "content": "require(['plugins/csrf-utils', 'jquery-ui'], function (CsrfUtils) {\n\n    const csrfToken = CsrfUtils.getCsrfToken();\n    var $container = $('#editimages');\n\n    $(function () {\n        var $cards = $container.find('.imagecard');\n\n        $cards.each(addButtonListeners);\n\n        if ($container.find('.imagecard').length >= 2) {\n            addOrdering();\n        }\n\n        setTimeout(function () {\n            $('.user-feedback .alert-box.success').each(function () {\n                removeAlertBox($(this));\n            });\n        }, 3000);\n\n        /* Remove all feedback when clicked on */\n        $('.user-feedback').click(function (event) {\n            $(event.target).closest('.alert-box').remove();\n        });\n        var input = document.querySelector('.inputfile');\n        var label = input.nextElementSibling,\n            labelVal = label.innerHTML;\n\n        input.addEventListener('change', function (e) {\n            var fileName = '', title = '';\n            if (this.files && this.files.length > 1) {\n                console.log(this.files);\n                fileName = ( this.getAttribute('data-multiple-caption') || '' ).replace('{count}', this.files.length);\n                var names = [];\n                for (var i = 0; i < this.files.length; i++) {\n                    names.push(this.files[i].name);\n                }\n                title = names.join('\\n');\n            } else {\n                fileName = e.target.value.split('\\\\').pop();\n            }\n\n            if (fileName) {\n                label.querySelector('span').innerHTML = fileName;\n            } else {\n                label.innerHTML = labelVal;\n            }\n            label.setAttribute('title', title);\n\n        });\n    });\n\n    function addButtonListeners(index, element) {\n        var $element = $(element);\n        addEditHandler($element);\n        addDeleteHandler($element);\n    }\n\n    function addEditHandler($element) {\n        $element.on('click', '.actions .edit', function () {\n            var $titlecell = $element.find('.heading');\n            if ($titlecell.find('input').length > 0) {\n                return;\n            }\n            var titletext = $titlecell.html(),\n                $input = $('<input type=\"text\">').val(titletext);\n\n            $input.keydown(function (event) {\n                // Enter\n                if (event.which === 13) {\n                    saveTitle($(this));\n                }\n                // Escape\n                if (event.which === 27) {\n                    $titlecell.html(titletext);\n                }\n            });\n\n            $titlecell.empty().append($input);\n        });\n    }\n\n    function saveTitle($element) {\n        var $card = $element.parents('.imagecard'),\n            imageid = $card.attr('data-imageid'),\n            $titlecell = $card.find('.heading'),\n            title = $titlecell.find('input').val(),\n            jqxhr = $.ajax({\n                url: NAV.urls['image-update-title'],\n                type: 'POST',\n                data: {'id': imageid, 'title': title},\n                headers: {'X-CSRFToken': csrfToken}\n            });\n\n        jqxhr.done(function () {\n            $titlecell.html(title);\n            createFeedback('Title updated', 'success');\n        });\n\n        jqxhr.fail(function () {\n            createFeedback('Failed to update title', 'error');\n        });\n\n    }\n\n    function addDeleteHandler($element) {\n        $element.on('click', '.actions .delete', function (event) {\n            if (confirm('Do you want to delete this image?')) {\n                const $this = $(this),\n                    $row = $this.parents('.imagecard'),\n                    $imageid = $row.attr('data-imageid'),\n                    jqxhr = $.ajax({\n                        url: NAV.urls['image-delete-image'],\n                        type: 'POST',\n                        data: {'id': $imageid},\n                        headers: {'X-CSRFToken': csrfToken}\n                    });\n\n                jqxhr.done(function () {\n                    location.reload();\n                });\n\n                jqxhr.fail(function () {\n                    createFeedback('Failed to delete image', 'error');\n                });\n            }\n        });\n    }\n\n    function addOrdering() {\n        $container.sortable({\n            items: '.imagecardcontainer',\n            handle: '.drag',\n            update: saveOrder,\n            placeholder: \"ui-state-highlight\",\n            forcePlaceholderSize: true\n        });\n        $container.find('.drag').disableSelection();\n    }\n\n    function saveOrder() {\n        const jqxhr = $.ajax({\n            url: NAV.urls['image-update-priority'],\n            type: 'POST',\n            data: get_image_priorities(),\n            headers: {'X-CSRFToken': csrfToken}\n        });\n        jqxhr.done(function () {\n            createFeedback('Image order has been saved', 'success');\n        });\n        jqxhr.fail(function () {\n            createFeedback('Could not save image order', 'error');\n        });\n    }\n\n    function get_image_priorities() {\n        var priorities = {};\n        $container.find('.imagecard').each(function (index, element) {\n            priorities[$(element).attr('data-imageid')] = index;\n        });\n        return priorities;\n    }\n\n    function createFeedback(message, type) {\n        const $alertBox = $('<div>').addClass('alert-box').addClass(type).attr('data-nav-alert', '').html(message),\n            $close = $('<a href=\"#\">').addClass('close').html('&times;').click(function () {\n                removeAlertBox($alertBox);\n        });\n\n        $alertBox.append($close).appendTo('.user-feedback');\n        setTimeout(function () {\n            removeAlertBox($alertBox);\n        }, 2000);\n    }\n\n    function removeAlertBox($alertBox) {\n        $alertBox.fadeOut(function () {\n            $(this.remove());\n        });\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/info/global_dt_filters.js",
    "content": "define(['datatables', 'dt_config'], function () {\n    /*\n     * Primary filter is the main filter run on all tables\n     * Secondary filters are run together with the primary filter\n     */\n\n    var tables = [];\n    var primary_node = '';\n\n    function add_filters(node, input_tables, secondary_filters) {\n        if (!node) {\n            throw new Error('Need node to attach primary filter to');\n        }\n        add_primary_filter(node, input_tables);\n        add_secondary_filters(secondary_filters);\n    }\n\n    function add_primary_filter(node, input_tables) {\n        primary_node = node;\n        tables = input_tables;\n        $(primary_node).keyup(do_primary_filter);\n    }\n\n    function do_primary_filter() {\n        var filter = remove_keywords($(primary_node).val());\n        for (var i = 0; i < tables.length; i++) {\n            $(tables[i]).DataTable().search(filter).draw();\n        }\n    }\n\n    function remove_keywords(input) {\n        var words = input.split(' ');\n        var notkeywords = [];\n        for (var i=0; i<words.length; i++) {\n            if (words[i].slice(0, 1) !== '$') {\n                notkeywords.push(words[i]);\n            }\n        }\n        return notkeywords.join(' ');\n    }\n\n    /*\n     * Add all secondary filters\n     * filters_to_enable: list of config-objects\n     * config-object:\n     *    - name: name of existing filter\n     *    - node (optional): node to attach keylistener\n     */\n    function add_secondary_filters(filters_to_enable) {\n        for (var i = 0; i < filters_to_enable.length; i++) {\n            var filter = filters_to_enable[i];\n\n            if (!filters[filter]) {\n                throw new Error('filter ' + filter + ' does not exist.');\n            }\n\n            register_filter(filters[filter]);\n        }\n    }\n\n    /* Attach keylistener and register filter to datatable plugin */\n    function register_filter(config) {\n        $.fn.DataTable.ext.search.push(config.runner);\n        $('#' + config.node + ' input').keyup(do_primary_filter);\n    }\n\n    /*\n     * Secondary filters\n     */\n\n    var last_seen_mode = 'ago';\n\n    function set_last_seen_mode(mode) {\n        last_seen_mode = mode;\n    }\n    /* Filter on column 5 (last active) when column 4 (vlan) is not trunk.\n     * Very reusable code! ;-P */\n    function filter_last_seen(oSettings, aData, iDataIndex) {\n        const days = get_keyword(/\\$days:\\w+/) || getInputValue(filters.last_seen.node);\n        if (days) {\n            const rowdate = extract_date(aData[4]);\n            const isMoreThanMode = last_seen_mode === 'ago';\n            const diff = daysince(rowdate);\n            return !is_trunk(aData[3]) && (isMoreThanMode ? diff >= days : diff <= days);\n        }\n        return true;\n    }\n\n\n    /* Filter on vlan */\n    function filter_vlan(oSettings, aData, iDataIndex) {\n        var vlan = get_keyword(/\\$vlan:\\w+/) || getInputValue(filters.vlan.node);\n        if (vlan) {\n            return vlan === aData[3];\n        }\n        return true;\n    }\n\n    /*\n     * Helper functions\n     */\n    function get_keyword(regexp) {\n        var input = $(primary_node).val();\n        var keyword = input.match(regexp);\n        if (keyword) {\n            return keyword[0].split(':')[1];\n        }\n        return '';\n    }\n\n\n    function getInputValue(node) {\n        return $('#' + node).find('input').val();\n    }\n\n    /* Extract date without time from string */\n    function extract_date(cell) {\n        var match = cell.match(/\\d{4}-\\d{2}-\\d{2}/);\n        if (match) {\n            return new Date(match[0]);\n        } else {\n            return new Date('1970-01-01');\n        }\n    }\n\n\n    /* Find days since input date */\n    function daysince(date) {\n        var one_day = 1000 * 60 * 60 * 24;\n        var now = new Date();\n        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n        var reset_date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n        return Math.round((today - reset_date) / one_day);\n    }\n\n\n    /* Find if cell is trunk or not */\n    function is_trunk(cell) {\n        return /trunk/i.test(cell);\n    }\n\n    var filters = {\n        last_seen: {\n            name: 'Last Seen',\n            node: 'lastseenfilter',\n            runner: filter_last_seen\n        },\n        vlan: {\n            name: 'Vlan',\n            node: 'vlanfilter',\n            runner: filter_vlan\n        }\n    };\n\n    return {\n        add_filters: add_filters,\n        filter_last_seen: filter_last_seen,\n        filter_vlan: filter_vlan,\n        extract_date: extract_date,\n        daysince: daysince,\n        is_trunk: is_trunk,\n        remove_keywords: remove_keywords,\n        set_last_seen_mode: set_last_seen_mode,\n        refresh: do_primary_filter\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/info/table_info_converter.js",
    "content": "define([], function () {\n\n    /*\n     * Return a textstring representing the table as csv suitable for\n     * import in spreadsheets\n     */\n    function create_csv(tables) {\n        var content = [];\n\n        $(tables).each(function (index, table) {\n            var sysname = find_sysname(table);\n            $(table).find('tbody tr').each(function (index, row) {\n                var rowdata = [sysname].concat(format_rowdata(row));\n                content.push(rowdata.join(';'));\n            });\n        });\n\n        return content.join('\\n');\n    }\n\n    function find_sysname(table) {\n        return $(table).find('caption a').text().trim();\n    }\n\n    /*\n     * Grab the text from the cells and return it as elements of an array\n     * NB: Special case for index 2, need rewrite to be generic\n     */\n    function format_rowdata(row) {\n        if(typeof(String.prototype.trim) === \"undefined\") {\n            String.prototype.trim = function() {\n                return String(this).replace(/^\\s+|\\s+$/g, '');\n            };\n        }\n        var rowdata = [];\n        $(row).find('td').each(function (index, cell) {\n            if (index == 2) {\n                rowdata.push($(cell).find('img').attr('alt'));\n            } else {\n                rowdata.push($(cell).text().trim());\n            }\n        });\n        return rowdata;\n    }\n\n\n    return {\n        create_csv: create_csv,\n        find_sysname: find_sysname,\n        format_rowdata: format_rowdata\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/info_location.js",
    "content": "require(\n    [\n        \"plugins/tab_navigation\",\n        \"plugins/room_mapper\",\n        \"plugins/jquery_ui_helpers\",\n        \"jquery\",\n        \"jquery-ui\",\n        \"plugins/lightbox\"\n    ],\n    function(tab_navigation, RoomMapper, JUIHelpers) {\n        /* Run javascript at document ready */\n        $(function () {\n            if ($('#infotabs').length) {\n                add_tabs();\n                add_navigation();\n            }\n        });\n\n        /* Add tabs to locationview content */\n        function add_tabs() {\n            var tabconfig = {\n                beforeLoad: JUIHelpers.cacheRequest,\n                load: function (event, ui) {\n                },\n                create: function () {\n                    setTimeout(function () {\n                        // If the room_map element is visible 100 ms after the\n                        // tabs are created, create the map\n                        if (document.querySelector('#room_map').offsetParent) {\n                            add_streetmap();\n                        }\n                    }, 200);\n                },\n                activate: function (event, ui) {\n                    if (ui.newTab.attr('aria-controls') === 'locationinfo') {\n                        add_streetmap();\n                    }\n                }\n            };\n            var tabs = $('#infotabs').tabs(tabconfig);\n            tabs.show();\n        }\n\n        /* Add navigation to jQuery ui tabs */\n        function add_navigation() {\n            var wrapper = $('#infotabs');\n            tab_navigation.add(wrapper);\n        }\n\n        function add_streetmap() {\n            var position_node = $('#locationinfo td.locationid');\n            var locationname = $(position_node).attr('data-locationid');\n            if (document.querySelector('#room_map').childElementCount === 0) {\n                new RoomMapper('room_map', {\n                    location: locationname\n                });\n            }\n        }\n    }\n);\n"
  },
  {
    "path": "python/nav/web/static/js/src/info_netboxgroup.js",
    "content": "require([\n    'plugins/multiple_select',\n    'datatables',\n    'dt_config',\n    'src/dt_plugins/numeric_html',\n    'src/dt_plugins/ip_address_sort',\n    'src/dt_plugins/ip_address_typedetect',\n    'src/dt_plugins/percent_sort',\n],\nfunction (MultipleSelect) {\n    $(function () {\n        new MultipleSelect();\n\n        $('.netbox_availability_list').DataTable({\n            'bPaginate': false,\n            'bLengthChange': false,\n            'bFilter': false,\n            'bInfo': false,\n            'aoColumns': [\n                null,  // name\n                null,  // ip-address\n                null,  // category\n                null,  // type\n                null,  // organization\n                {'sType': 'num-html'},  // swp\n                {'sType': 'num-html'},  // gwp\n                null,    // up\n                {'sType': 'percent'},  // availability week\n                {'sType': 'percent'}  // availability month\n            ]\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/info_room.js",
    "content": "require(\n    [\n        \"plugins/tab_navigation\",\n        \"info/global_dt_filters\",\n        \"info/table_info_converter\",\n        \"plugins/room_mapper\",\n        \"plugins/sensors_controller\",\n        \"plugins/jquery_ui_helpers\",\n        \"dt_plugins/natsort\",\n        \"dt_plugins/altsort\",\n        \"dt_plugins/date_title_sort\",\n        \"dt_plugins/modulesort\",\n        \"jquery\",\n        \"jquery-ui\",\n        \"datatables\",\n        \"dt_config\",\n        \"plugins/lightbox\"\n    ],\n    function(tab_navigation, global_dt_filters, table_info_converter, RoomMapper, SensorsController, JUIHelpers) {\n        /* Run javascript at document ready */\n        $(function () {\n            if ($('#infotabs').length) {\n                add_tabs();\n                add_navigation();\n            }\n\n            var $mapContainer = $('#mapcontainer');\n            if ($mapContainer.length) {\n                fetchRoomPositions($mapContainer);\n            }\n        });\n\n        /* Add tabs to roomview content */\n        function add_tabs() {\n            var tabconfig = {\n                beforeLoad: JUIHelpers.cacheRequest,\n                load: function (event, ui) {\n                    if (ui.tab.attr('aria-controls') === 'sensors') {\n                        applyEnvironmentHandlers();\n                    } else if (ui.tab.attr('aria-controls') === 'netboxinterfaces') {\n                        applyNetboxInterfacesHandlers();\n                    }\n                },\n                create: function () {\n                    setTimeout(function () {\n                        // If the room_map element is visible 100 ms after the\n                        // tabs are created, create the map\n                        if (document.querySelector('#room_map').offsetParent) {\n                            add_streetmap();\n                        }\n                    }, 200);\n                },\n                activate: function (event, ui) {\n                    if (ui.newTab.attr('aria-controls') === 'roominfo') {\n                        add_streetmap();\n                    }\n                }\n            };\n            var tabs = $('#infotabs').tabs(tabconfig);\n            tabs.show();\n        }\n\n        function request_error(xhr, status, error) {\n            console.error('Request error');\n            $('<div class=\"messages error\">Could not load netbox interfaces</div>').appendTo('#ui-tabs-1');\n        }\n\n        function applyNetboxInterfacesHandlers() {\n            enrich_tables();\n            add_filters();\n            add_csv_download();\n            // Necessary for HTMX to process content added by AJAX request\n            htmx.process(document.getElementById(\"netboxes\"))\n        }\n\n        /* Add navigation to jQuery ui tabs */\n        function add_navigation() {\n            var wrapper = $('#infotabs');\n            tab_navigation.add(wrapper);\n        }\n\n        function add_streetmap() {\n            var position_node = $('#roominfo td.position');\n            var roomname = $(position_node).attr('data-roomname');\n            if (document.querySelector('#room_map').childElementCount === 0) {\n                new RoomMapper('room_map', { room: roomname });\n            }\n        }\n\n\n        /* Enrich tables with dataTables module */\n        function enrich_tables() {\n            var dt_config = {\n                bAutoWidth: false,\n                bFilter: true,\n                bInfo: true,\n                bLengthChange: false,\n                bPaginate: false,\n                bSort: true,\n                aoColumns: [\n                    {'sType': 'module'},\n                    {'sType': 'string'},\n                    {'sType': 'alt-string'},\n                    {'sType': 'natural'},\n                    {'sType': 'title-date'}\n                ],\n                sDom: '<\"H\"i>t<\"F\">',\n                fnInfoCallback: format_filter_text\n            };\n\n            $('table.netbox').dataTable(dt_config);\n\n        }\n\n        /* Custom format of search filter text */\n        function format_filter_text(oSettings, iStart, iEnd, iMax, iTotal, sPre) {\n            if (iEnd === iMax) {\n                return \"Showing \" + iMax + \" entries.\";\n            } else {\n                var entrytext = iEnd === 1 ? \"entry\" : \"entries\";\n                return \"Showing \" + iEnd + \" \" + entrytext + \" (filtered from \" + iMax + \" entries).\";\n            }\n        }\n\n        /* Add global filtering to the tables */\n        function add_filters() {\n            const tables = $.fn.DataTable.tables();\n            var primary_node = $('#netbox-global-search');\n            var filters = ['last_seen', 'vlan'];\n\n\n            $('#lastseen-mode').on('change', function () {\n                global_dt_filters.set_last_seen_mode(this.value);\n                global_dt_filters.refresh();\n            });\n            try {\n                global_dt_filters.add_filters(primary_node, tables, filters);\n            } catch (error) {\n                console.error(error.message);\n            }\n        }\n\n        function add_csv_download() {\n            var tables = $('#netboxes').find('table.netbox');\n            var $form = $('#csv-download-form');\n            $form.submit(function () {\n                $form.find('[name=rows]').val(table_info_converter.create_csv(tables));\n            });\n        }\n\n        function fetchRoomPositions(mapcontainer) {\n            new RoomMapper(mapcontainer.get(0));\n        }\n\n        function applyEnvironmentHandlers() {\n            /* Does stuff with the environment tab when it's loaded */\n            var $page = $('#sensors'),\n                $sensors = $page.find('.room-sensor'),\n                $filters = $page.find('.sub-nav dd');\n\n\n            // Apply controller for each sensor\n            var _controller = new SensorsController($sensors);\n\n            // Filter controls\n            $filters.on('click', function (event) {\n                var $target = $(event.target),\n                    $parent = $target.parent('dd');\n                $filters.removeClass('active');\n                $parent.addClass('active');\n\n                switch ($target.attr('data-action')) {\n                    case 'all':\n                        $page.find('.rs-graph').show();\n                        $page.find('.current').show();\n                        break;\n                    case 'charts':\n                        $page.find('.rs-graph').show();\n                        $page.find('.current').hide();\n                        break;\n                    case 'gauges':\n                        $page.find('.rs-graph').hide();\n                        $page.find('.current').show();\n                        break;\n                }\n            });\n        }\n    }\n);\n"
  },
  {
    "path": "python/nav/web/static/js/src/info_room_rack.js",
    "content": "/**\n * Matches all search terms when searching in Select2\n * Updated for Select2 v4 - matcher signature changed from (term, text) to (params, data)\n */\nfunction select2MultipleMatcher(params, data) {\n    // If there are no search terms, return all data\n    if (!params.term || params.term.trim() === '') {\n        return data;\n    }\n    // Check if text matches all search terms\n    let has = true;\n    const words = params.term.toUpperCase().split(\" \");\n    const text = data.text || '';\n    words.forEach((word, idx) => {\n        has = has && (text.toUpperCase().indexOf(word) >= 0);\n    })\n    // Return null if no match, or the data object if it matches\n    return has ? data : null;\n}\n\nrequire([\n    'plugins/csrf-utils',\n    'plugins/linear_gauge',\n    'plugins/symbols',\n    'plugins/d3_sparkline'\n], function (CsrfUtils, LinearGauge, symbol, d3Sparkline) {\n\n    const csrfToken = CsrfUtils.getCsrfToken();\n\n    /**\n     * TODO:\n     * - How to set min and max values for the different sensors\n     * - Naming - is it really racks?\n     */\n\n\n    var unitMapping = {\n        'celsius': 'celsius'\n    };\n\n\n\n    /**\n     * Rounds something that may be a number to max n decimals.\n     * If you want a specific number of decimals use toFixed.\n     */\n    function round(number, n) {\n        n = n === undefined ? 2 : n;\n        if (number === null) {\n            return number;\n        }\n\n        try {\n            return parseFloat(Number(number).toFixed(n));\n        } catch (e) {\n            return number;\n        }\n    }\n\n\n    /**\n     * Applies listeners when modal for adding sensors is loaded\n     * - form submit\n     * - cancel click\n     * - select2 component\n     */\n    function addSensorModalListeners($sensorModal) {\n        document.body.addEventListener('htmx:afterSwap', function() {\n            const $sensorModal = $('#add-sensor-modal');\n            if (!$sensorModal.length) {\n                return;\n            }\n            $sensorModal.find('#add-rackitem-tabs').tabs().show();\n            const sumSelectClone = $sensorModal.find('.sumsensors').closest('label').clone();\n            $sensorModal.find('.sensordropdown').select2({\n                matcher: select2MultipleMatcher\n            });\n            $sensorModal.find('.sensordropdown').select2('open');\n\n            $sensorModal.find('.sumform').on('change', '.sumsensors', function (event) {\n                const label = $(event.target).closest('label');\n                const clone = sumSelectClone.clone();\n                clone.find('select').select2({\n                    matcher: select2MultipleMatcher\n                });\n                label.after(clone);\n            });\n            $sensorModal.find('.cancelbutton').on('click', function (event) {\n                event.preventDefault();\n                $sensorModal.remove();\n            });\n        });\n\n        document.body.addEventListener('room.rack.added', function () {\n            $('[data-id=\"no-racks-alert\"]').remove()\n        })\n\n        /* Form submission is handled by htmx, we just need to add a listener for\n           when the sensor is added to update it with data */\n        document.body.addEventListener('room.rack.sensorAdded', function(event) {\n            const { rackId, sensorId } = event.detail;\n            // Use a small delay to ensure HTMX swap is complete\n            setTimeout(() => {\n                const $sensor = $(`#item_${rackId}_${sensorId}`);\n                if ($sensor.length) {\n                    updateSingleSensor($sensor);\n                }\n            }, 100);\n        });\n    }\n\n\n    /**\n     * Updates a single sensor element\n     */\n    function updateSingleSensor($sensor) {\n        var thisIsPDU = $sensor.find('.pdu-gauge').length;\n        if (thisIsPDU) {\n            getData(getMetric($sensor), updatePDU);\n        } else {\n            getData(getMetric($sensor), updateSensor);\n        }\n    }\n\n\n    /**\n     * Creates mapping between metric and element id for all data-metric elements\n     */\n    function getMetrics($element) {\n        return _.object($element.find('[data-metric]').map(function () {\n            return [[this.id, this.dataset.metric]];\n        }));\n    }\n\n    /**\n     * Creates mapping between element id and metric for a single element\n     */\n    function getMetric($element) {\n        var element = $element[0];\n        var obj = {};\n        obj[element.id] = element.dataset.metric;\n        return obj;\n    }\n\n    /**\n     * Gets the correct single value from the datapoints returned from Graphite\n     */\n    function getValue(datapoints) {\n        var point = _.find(datapoints.reverse(), function (datapoint) {\n            return datapoint[0] != null;\n        });\n\n        return point ? point[0] : null;\n    }\n\n    /**\n     * Map result list to {target: datapoints}\n     * @param {array} results - A list of {'target': 'metric', 'datapoints', [[value, timestamp]]}\n     */\n    function createResultMap(results) {\n        var resultMap = {};\n        _.each(results, function(result) {\n            resultMap[result.target] = result.datapoints;\n        });\n        return resultMap;\n    }\n\n\n    /**\n     * Get min and max value for the item to display\n     */\n    function getMinMax(rackitem) {\n        try {\n            return rackitem.data('displayRange');\n        } catch (e) {\n            console.log('No minmax set for', rackitem);\n            return [0, 50];\n        }\n    }\n\n\n    /**\n     * Updates all sensors in the metricMap.\n     */\n    function updateSensors(results, metricMap, updateFunc) {\n        var resultMap = createResultMap(results);\n\n        _.each(metricMap, function (target, elementId) {\n            var datapoints = resultMap[target];\n            var value = round(datapoints ? getValue(datapoints) : null);\n            var $element = $(document.getElementById(elementId));\n            updateFunc($element, value, getMinMax($element));\n        });\n    }\n\n\n    /** Update a sensor in the middle column (not PDU) */\n    function updateSensor($element, value, minMax) {\n        var unit = $element.data('unit') ? $element.data('unit').toLowerCase() : \"\";\n        if (unit === 'boolean') {\n            var on_state = $element.data('on-state');\n            if (value === on_state ) {\n                $element.find(\".off\").addClass('hidden');\n                $element.find(\".on\").removeClass('hidden');\n            } else {\n                $element.find(\".on\").addClass('hidden');\n                $element.find(\".off\").removeClass('hidden');\n            }\n            return;\n        }\n        var unitIsKnown = _.has(unitMapping, unit);\n        var textvalue = value === null ? 'NaN' : value + symbol(unit);\n        var min = minMax[0], max = minMax[1];\n        $element.find('.textvalue').html(textvalue);\n\n        if (unitIsKnown) {\n            // Create sparkline if unit is known only\n            d3Sparkline.bullet($element.find('.sparkline'), [null, value, max], {\n                performanceColor: 'lightsteelblue',\n                rangeColors: ['#fff']\n            });\n        }\n\n    }\n\n\n    /** Update a PDU sensor */\n    function updatePDU($element, value, minMax) {\n        var gaugeElement = $element.find('.pdu-gauge')[0];\n\n        if ($.data(gaugeElement, 'gauge')) {\n            $.data(gaugeElement, 'gauge').update(value);\n        } else {\n            var gauge = new LinearGauge({\n                nodeId: gaugeElement.id,\n                precision: 2,\n                height: 100,\n                max: minMax[1]\n            });\n            gauge.update(value);\n            $.data(gaugeElement, 'gauge', gauge);\n        }\n\n    }\n\n\n    /**\n     * Fetches data for all metrics in the metricmap and runs updatefunc\n     */\n    function getData(metricMap, updateFunc) {\n        var targets = _.values(metricMap);\n        if (!targets.length) { return; }\n        var url = '/graphite/render';\n        var request = $.getJSON(url,\n            {\n                target: targets,\n                format: 'json',\n                from: '-5min',\n                until: 'now'\n            }\n        );\n\n        request.done(function (data) {\n            updateSensors(data, metricMap, updateFunc);\n        });\n\n        request.fail(function () {\n            console.log(\"Error on data request\");\n        });\n\n\n    }\n\n    /**\n     * Updates a single rack\n     */\n    function updateRack($rack) {\n        getData(getMetrics($rack.find('.rack-body .rack-center')), updateSensor);\n        getData(getMetrics($rack.find('.rack-body .rack-pdu')), updatePDU);\n    }\n\n    /**\n     * Updates all racks\n     */\n    function updateRacks() {\n        $('.rack').each(function () {\n            updateRack($(this));\n        });\n    }\n\n\n    /**\n     * Listener for removing sensors\n     */\n    function addSensorRemoveListener() {\n        $('#racks').on('click', '.remove-sensor', function () {\n            const rackSensor = $(this).closest('.rack-sensor');\n            const rack = $(this).closest('.rack');\n            const request = $.ajax({\n                url: NAV.urls.remove_sensor,\n                type: 'POST',\n                data: {\n                    id: rackSensor.data('id'),\n                    column: rackSensor.data('column'),\n                    rackid: rack.data('rackid')\n                },\n                headers: {'X-CSRFToken': csrfToken}\n            });\n            request.done(function () {\n                rackSensor.remove();\n            });\n        });\n    }\n\n\n    /**\n     * Listener for removing racks\n     */\n    function addRackRemoveListener() {\n        $('#racks').on('click', '.remove-rack', function (event) {\n            // event.preventDefault();\n            const yes = confirm('Really remove this rack?');\n            if (yes) {\n                const rack = $(this).closest('.rack');\n                const request = $.ajax({\n                    url: NAV.urls.remove_rack,\n                    type: 'POST',\n                    data: {rackid: rack.data('rackid')},\n                    headers: {'X-CSRFToken': csrfToken}\n                });\n                request.done(function () {\n                    rack.remove();\n                });\n            }\n        });\n    }\n\n\n    /**\n     * Add listeners for displaying and hiding edit mode\n     */\n    function addEditModeListener() {\n        var $racks = $('#racks');\n\n        function switchMode(func) {\n            var $this = $(this);\n            var $rack = $this.closest('.rack');\n            $rack[func]('editmode');\n        }\n\n        $racks.on('click', '.edit-rack', function() {\n            switchMode.call(this, 'addClass');\n        });\n\n        $racks.on('click', '.close-edit-rack', function() {\n            switchMode.call(this, 'removeClass');\n        });\n    }\n\n\n    // Toggle editmode on for empty racks\n    function toggleEditEmptyRack() {\n        $('.rack').each(function () {\n            var $rack = $(this);\n            if (!$rack.find('.rack-sensor').length) {\n                $rack.find('.edit-rack').click();\n            }\n        });\n    }\n\n\n    function addRenameRackListener() {\n        $('#racks').on('submit', '.rename-rack-form', function(event) {\n            event.preventDefault();\n            const $form = $(this);\n            const request = $.ajax({\n                url: $form.attr('action'),\n                type: 'POST',\n                data: $form.serialize(),\n                headers: {'X-CSRFToken': csrfToken}\n            });\n            request.fail(function () {\n                console.log(\"Failed to rename rack\");\n            });\n            request.done(function (name) {\n                // Give a little flash to indicate success\n                var $submit = $form.find('[type=\"submit\"]');\n                $submit.addClass('success');\n                setTimeout(function () {\n                    $submit.removeClass('success');\n                }, 1000);\n                $form.siblings('.rack-heading').find('.rackname').text(name);\n            });\n        });\n    }\n\n\n    function addSensorSort() {\n        $('.rack').find('.rack-column .sensors').each(function() {\n            $(this).sortable({\n                tolerance: 'pointer',\n                handle: '.fa-arrows',\n                forcePlaceholderSize: true,\n                placeholder: 'highlight',\n                update: function(event, ui) {\n                    var serialized = $(this).sortable('serialize', {\n                        attribute: 'data-sortid'\n                    });\n                    var rack = $(this).closest('.rack');\n                    var column = $(this).data('column');\n                    serialized += '&column=' + column;\n                    serialized += '&rackid=' + rack.data('rackid');\n                    $.ajax({\n                        url: NAV.urls.save_sensor_order,\n                        type: 'POST',\n                        data: serialized,\n                        headers: {'X-CSRFToken': csrfToken}\n                    });\n                }\n            });\n        });\n    }\n\n\n    function addRackSort() {\n        $('#racks-container').sortable({\n            tolerance: 'pointer',\n            handle: '.icon-container .fa-arrows',\n            forcePlaceholderSize: true,\n            placeholder: 'highlight',\n            update: function (event, ui) {\n                const serialized = $(this).sortable('serialize');\n                $.ajax({\n                    url: NAV.urls.save_rack_order,\n                    type: 'POST',\n                    data: serialized,\n                    headers: {'X-CSRFToken': csrfToken}\n                });\n            }\n        });\n    }\n\n\n    function addColorChooser() {\n        $('#racks-container').on('change', 'form.color-chooser', function(event) {\n            var classes = _.map(this.querySelectorAll(\"input[type=radio]\"), function(element) {\n                return element.value;\n            }).join(' ');\n\n            var $radio = $(event.target),\n                html_class = $radio.val(),\n                rackid = $radio.closest('.rack').data('rackid');\n\n            $.ajax({\n                url: NAV.urls.save_rack_color,\n                type: 'POST',\n                data: {\n                    rackid: rackid,\n                    class: html_class\n                },\n                headers: {'X-CSRFToken': csrfToken}\n            }).done(function() {\n                $radio.closest('.rack').find('.rack-body').removeClass(classes).addClass(html_class);\n            }).fail(function() {\n                console.error('Failed updating html class');\n            });\n        });\n    }\n\n\n    /**\n     * Runs on page load. Setup page\n     */\n    $(function () {\n\n        // Add listener to edit-button, toggle edit-mode for empty racks\n        addEditModeListener();\n        toggleEditEmptyRack();\n\n        addSensorModalListeners();\n\n        addRackRemoveListener();\n        addSensorRemoveListener();\n\n        addRenameRackListener();\n\n        addRackSort();\n        addSensorSort();\n\n        addColorChooser();\n\n        // Start updating racks with data\n        updateRacks();\n        setInterval(updateRacks, 60000);\n\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/interface_browser.js",
    "content": "define(function(require) {\n\n    var DataTables = require('datatables');\n    require('dt_config');\n    var columnToggler = require('src/interface_browser_column_toggler');\n    var filterController = require('src/interface_browser_filter_controller');\n    var dynamicColumnsController = require('src/interface_browser_dynamic_columns_controller');\n    var stateController = require('src/plugins/state_controller');\n\n    var storageKey = 'DataTables_portlist-table_/formstate/';\n\n    var selectors = {\n        table: '#portlist-table',\n        filterForm: '#filters',\n    }\n\n\n    /*\n     * dtColumns defines the data we want to use from the result set from the\n     * api. They are in order of appearance in the table - changes here may need\n     * changes in the template aswell.\n     *\n     * More information about the options for each column can be seen at\n     * https://datatables.net/reference/option/ -> columns\n     */\n    var dtColumns = [\n        {\n            name: 'portadmin-link',\n            render: function(data, type, row, meta) {\n                if (isSwPort(row)) {\n                    return '<a href=\"' + NAV.urls.portadmin_index + row.id + '\" title=\"Configure port in Portadmin\"><img src=\"' + NAV.imagePath + '/toolbox/portadmin.svg\" style=\"height: 1em; width: 1em\" /></a>';\n                }\n                return '';\n            },\n            orderable: false,\n            title: '<img src=\"' + NAV.imagePath + '/toolbox/portadmin.svg\" style=\"height: 1em; width: 1em\" />'\n        },\n\n        {\n            data: \"netbox.sysname\",\n            name: 'netbox',\n            render: function(data, type, row, meta) {\n                return '<a href=\"' + row.netbox.object_url + '\">' + data + '</a>';\n            },\n            title: 'Device'\n        },\n\n        {\n            data: \"ifname\",\n            name: 'ifname',\n            type: \"module\",\n            render: function(data, type, row, meta) {\n                return '<a href=\"' + row.object_url + '\">' + data + '</a>';\n            },\n            title: 'Port'\n        },\n\n        {\n            data: \"ifalias\",\n            name: 'ifalias',\n            render: function(data, type, row, meta) {\n                return '<a href=\"' + row.object_url + '\">' + data + '</a>';\n            },\n            title: 'Port Description'\n        },\n\n        {\n            data: 'module',\n            name: 'module',\n            render: function(data, type, row, meta) {\n                return data\n                     ? '<a href=\"' + data.object_url + '\">' + data.name + '</a>'\n                     : '';\n            },\n            title: 'Module'\n        },\n\n        {\n            data: \"ifadminstatus\",\n            name: 'adminstatus',\n            type: \"statuslight\",\n            render: renderStatus,\n            title: 'Admin'\n        },\n\n        {\n            data: \"ifoperstatus\",\n            name: 'operstatus',\n            type: \"statuslight\",\n            render: renderStatus,\n            title: 'Link'\n        },\n\n        {\n            data: \"vlan\",\n            name: 'vlan',\n            render: function(data, type, row, meta) {\n                if (isSwPort(row)) {\n                    data = data === null ? \"\" : data;\n                } else {\n                    data = \"\"\n                }\n\n                if (row['trunk']) {\n                    return \"<span title='Trunk' style='border: 3px double black; padding: 0 5px'>\" + data + \"</span>\"\n                }\n\n                return \"<a href='\" + NAV.urls.vlan_index + \"?query=\" + data + \"'>\" + data + \"</a>\";\n            },\n            title: 'Vlan'\n        },\n\n        {\n            data: \"speed\",\n            name: 'speed',\n            render: function(data, type, row, meta) {\n                if (row.duplex === 'h') {\n                    return data + '<span class=\"label warning\" title=\"Half duplex\" style=\"margin-left: .3rem\">HD</span>';\n                }\n                return row.speed ? data : \"\";\n            },\n            title: 'Speed'\n        },\n\n        {\n            data: 'to_netbox',\n            name: 'to-netbox',\n            render: function(data, type, row, meta) {\n                return data\n                     ? '<a href=\"' + data.object_url + '\">' + data.sysname + '</a>'\n                     : '';\n            },\n            title: 'To Device'\n        },\n\n        {\n            data: 'to_interface',\n            name: 'to-interface',\n            render: function(data, type, row, meta) {\n                return data\n                     ? '<a href=\"' + data.object_url + '\">' + data.ifname + '</a>'\n                     : '';\n            },\n            title: 'To Port'\n        },\n\n        {\n            data: null,\n            name: 'traffic-ifoutoctets',\n            orderable: false,\n            render: function() { return ''; },\n            visible: false,\n            title: 'OutOctets'\n        },\n\n        {\n            data: null,\n            name: 'traffic-ifinoctets',\n            orderable: false,\n            render: function() { return ''; },\n            visible: false,\n            title: 'InOctets'\n        },\n\n        {\n            data: null,\n            name: 'traffic-ifouterrors',\n            orderable: false,\n            render: function() { return ''; },\n            visible: false,\n            title: 'OutErrors'\n        },\n\n        {\n            data: null,\n            name: 'traffic-ifinerrors',\n            orderable: false,\n            render: function() { return ''; },\n            visible: false,\n            title: 'InErrors'\n        },\n\n        {\n            data: null,\n            name: 'last_used',\n            orderable: false,\n            render: function() { return ''; },\n            visible: false,\n            title: 'Last Used'\n        },\n\n    ];\n\n\n    /** Renders a light indicating status (red or green) */\n    function renderStatus(data, type, row, meta) {\n        var color = data === 2 ? 'red' : 'green';\n        return '<img src=\"' + NAV.imagePath + '/lys/' + color + '.png\">';\n    }\n\n    /* Returns if this is a swport or not */\n    function isSwPort(row) {\n        return row.baseport !== null;\n    }\n\n\n    /* Create the datatable */\n    function createTable() {\n        var initialize = true;  // Stops loading when table is initialized\n        return $(selectors.table).DataTable({\n            autoWidth: false,\n            paging: true,\n            pagingType: 'simple',\n            orderClasses: false,\n            processing: true,\n            ajax: function(data, callback, settings) {\n                if (initialize) {\n                    initialize = false;\n                    callback({data: []});\n                } else {\n                    var results = [];\n                    function loadMoreData(_data) {\n                        results = results.concat(_data.results);\n                        if (_data.next) {\n                            $.getJSON(_data.next, loadMoreData);\n                        } else {\n                            callback({data: results});\n                        }\n                    }\n\n                    $.getJSON(filterController.getUrl(), loadMoreData)\n                }\n            },\n            columns: dtColumns,\n            order: [[1, 'asc']],\n            dom: '<\"#portlist-controls\"<\"#columns-controls\"p>r<il>>t',\n            language: {\n                info: \"_TOTAL_ entries\",\n                processing: \"<div class='alert-box inside-table'>Loading...</div>\",\n            },\n            stateSave: true,\n        });\n    }\n\n\n    /** TABLE INITIATION */\n\n    function Browser() {\n        var form = document.querySelector(selectors.filterForm);\n        /* Set filters based on localstorage. Remember there are two filters,\n        the ones we control and the ones DataTable controls. */\n        stateController.setFormState(form, storageKey);\n\n        var table = createTable();\n\n        columnToggler({\n            table: table,\n            container: $('#column-toggler')\n        });\n\n        // Move the column toggler to the correct element\n        $('#columns-controls').prepend($('#column-toggler').css('display', 'inline-block'));\n\n        // Enable the different filters and column toggle functions\n        filterController.controller(table);\n        dynamicColumnsController(table);\n\n        // Save form state on datatable state save\n        table.on('stateSaveParams.dt', function() {\n            stateController.setFormStateInStorage(form, storageKey);\n        });\n    }\n\n    return Browser;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/interface_browser_column_toggler.js",
    "content": "define([], function() {\n\n    /** Toggle visibility of the buttons for toggling columns */\n    function addContainerToggler($toggler, $toggleTarget) {\n        $toggler.on('click', function() {\n            $toggleTarget.slideToggle(function() {\n                $toggler.find('i').toggleClass('fa-caret-right fa-caret-down');\n            });\n        });\n    }\n\n    /** Create a toggler for each th in the table */\n    function createColumnTogglers(table, $container) {\n        var $buttonList = $container.find('ul');\n        table.columns().every(function() {\n            var checked = this.visible() ? 'checked=checked': '';\n            var $switcher = $('<li><label><input type=\"checkbox\" ' + checked + '>' + this.header().innerHTML + '</label></li>');\n            $buttonList.append($switcher);\n        });\n\n        $container.on('change', function(e) {\n            var index = $buttonList.find('li').index($(e.target).closest('li'));\n            var column = table.column(index);\n            column.visible(!column.visible());\n            $(e.target).toggleClass('disabled', !column.visible());  // Toggle button class\n        })\n    }\n\n\n    function ColumnToggler(config) {\n        var containerToggler = config.container.find('.toggle-header');\n        var container = config.container.find('.toggle-container');\n        addContainerToggler(containerToggler, container);\n        createColumnTogglers(config.table, container);\n    }\n\n    return ColumnToggler;\n\n})\n"
  },
  {
    "path": "python/nav/web/static/js/src/interface_browser_dynamic_columns_controller.js",
    "content": "define(function(require) {\n\n    var URI = require('libs/urijs/URI');\n    var Moment = require('moment');\n    const d3Sparkline = require('plugins/d3_sparkline');\n\n    var storedMetricsRequests = {};\n    var storedDataRequests = {};\n\n    function isEmpty(cell) {\n        return $(cell.node()).is(':empty');\n    }\n\n    /** Adds sparklines to the cells in this column on the current page\n\n       - For each cell, fetch the metrics for that interface.\n       - Then find and modify the url for the metric/suffix we are looking for.\n       - Use this url to fetch data.\n       - Create a sparkline showing these data.\n\n     */\n    function addSparklines(table, column, suffix) {\n        table.cells(null, column, {page: 'current'}).every(function() {\n            var cell = this;\n            if (isEmpty(cell)) {\n                addSparkLine(table, cell, suffix);\n            }\n        });\n    }\n\n    function addSparkLine(table, cell, suffix) {\n        var interfaceId = getInterfaceId(table, cell);\n\n        if (!storedMetricsRequests[interfaceId]) {\n            storedMetricsRequests[interfaceId] = $.getJSON(NAV.urls.api_interface_list + interfaceId + '/metrics/');\n        }\n\n        storedMetricsRequests[interfaceId]\n         .then(function(metrics) {\n             return getGraphiteUri(metrics, suffix)[0];\n         })\n         .then(function(uri) {\n             if (uri) {\n                 var requestKey = [interfaceId, suffix].join(':');\n                 if (!storedDataRequests[requestKey]) {\n                     storedDataRequests[requestKey] = $.getJSON(uri.toString());\n                 }\n                 return storedDataRequests[requestKey];\n             }\n             return [];\n         })\n         .then(function(response) {\n             response.forEach(function(data) {\n                 createSparkLine(createSparkContainer(cell), convertToSparkLine(data));\n             });\n         })\n\n    }\n\n    function getRow(table, cell) {\n        return table.row(cell.index().row);\n    }\n\n    /* Gets the interface id from the row-data of this cell */\n    function getInterfaceId(table, cell) {\n        return getRow(table, cell).data().id;\n    }\n\n    /*\n     * Finds the correct url based on the suffix and modifies it for fetching data\n     */\n    function getGraphiteUri(metrics, suffix) {\n        return metrics.filter(function(m) {\n            return m.suffix === suffix;\n        }).map(function(m) {\n            console.log(m.url);\n            return new URI(m.url)\n                .removeSearch(['height', 'width', 'template', 'vtitle'])\n                .addSearch('format', 'json');\n        });\n    }\n\n    /* Creates a container for a sparkline inside a cell */\n    function createSparkContainer(cell) {\n        var $cell = $(cell.node());\n        var $container = $('<div>').addClass('sparkline');\n        $cell.append($container);\n        return $container;\n    }\n\n    /* Maps data from graphite to format sparkline understands */\n    function convertToSparkLine(data) {\n        return data.datapoints.map(function(point) {\n            return [point[1], Number(point[0]).toFixed()];\n        });\n    }\n\n    function createSparkLine($container, dataPoints) {\n        d3Sparkline.line($container, dataPoints, {\n            width: 100\n        });\n    }\n\n\n    /* Adds last used to a column */\n    function addLastUsed(table, column) {\n        table.cells(null, column, {page: 'current'}).every(function() {\n            var cell = this;\n            if (isEmpty(cell)) {\n                var fetchLastUsed = $.getJSON(NAV.urls.api_interface_list + getInterfaceId(table, cell) + '/last_used/');\n                fetchLastUsed.then(function(response) {\n                    var hasLink = table.row(cell.index().row).data().ifoperstatus === 1;\n                    var timestamp = response.last_used ? Moment(response.last_used) : null;\n                    if ((timestamp && timestamp.year() === 9999) || hasLink) {\n                        cell.node().innerHTML = 'In use';\n                    } else if (timestamp) {\n                        cell.node().innerHTML = timestamp.format('YYYY-MM-DD HH:mm:ss');\n                    } else {\n                        cell.node().innerHTML = \"N/A\"\n                    }\n                });\n            }\n        });\n    }\n\n    /** Check if we need to update columns with dynamic content\n\n       Dynamic content is data that is not gotten directly from the API-query,\n       but need to be inserted in a custom way.  */\n    function checkDynamicColumns(table) {\n\n        // Define what columns are dynamic and the action to take\n        var columnActions = {\n            'traffic-ifoutoctets:name': function() {\n                addSparklines(table, 'traffic-ifoutoctets:name', 'ifOutOctets');\n            },\n            'traffic-ifinoctets:name': function() {\n                addSparklines(table, 'traffic-ifinoctets:name', 'ifInOctets');\n            },\n            'traffic-ifouterrors:name': function() {\n                addSparklines(table, 'traffic-ifouterrors:name', 'ifOutErrors');\n            },\n            'traffic-ifinerrors:name': function() {\n                addSparklines(table, 'traffic-ifinerrors:name', 'ifInErrors');\n            },\n            'last_used:name': function() {\n                addLastUsed(table, 'last_used:name')\n            }\n        }\n\n        for (var selector in columnActions) {\n            var column = table.column(selector);\n            if (column.visible()) {\n                // If the column is visible, execute the action.\n                columnActions[selector]();\n            }\n        }\n    }\n\n    function updateDynamicColumns(table) {\n        // Update columns when the user toggles a column on/off\n        table.on('column-visibility.dt', function(e, settings, column, state) {\n            checkDynamicColumns(table);\n        })\n\n        // Update columns when the table is (re)drawn\n        table.on('draw.dt', function() {\n            checkDynamicColumns(table);\n        });\n    }\n\n    function controller(table) {\n        updateDynamicColumns(table);\n    }\n\n    return controller;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/interface_browser_filter_controller.js",
    "content": "define(function(require) {\n\n    var URI = require('libs/urijs/URI');\n    require('select2');\n\n    var selectors = {\n        ifclassfilter: '#ifclassfilter',\n        queryfilter: '#queryfilter',\n        vlanfilter: '#vlanfilter',\n        netboxfilter: '#netbox-filter',\n        operstatusfilter: '#operstatus-filter',\n        filterForm: '#filters'\n    };\n\n    /* Create url based on filter functions. Each filter is responsible for\n       creating a parameter and value */\n    function addFilterParameters(uri) {\n        filters = [netboxFilter, ifClassFilter, queryFilter, linkFilter, vlanFilter];\n        uri.addSearch(filters.reduce(function(obj, func) {\n            return _.extend(obj, func());\n        }, {}));\n        console.log(uri.toString());\n        return uri;\n    }\n\n    function vlanFilter() {\n        return { vlan: $(selectors.vlanfilter).val() }\n    }\n\n    function linkFilter() {\n        return { ifoperstatus: $(selectors.operstatusfilter).val() }\n    }\n\n    function netboxFilter() {\n        var value = $(selectors.netboxfilter).val();\n        if (!value) {\n            return {};\n        }\n        // Handle both string (legacy) and array/number (Select2 v4) formats\n        if (Array.isArray(value)) {\n            return { netbox: value };\n        }\n        if (typeof value === 'string') {\n            return { netbox: value.split(',') };\n        }\n        return { netbox: [value] };\n    }\n\n    function ifClassFilter() {\n        return { ifclass: $(selectors.ifclassfilter).val() }\n    }\n\n    function queryFilter() {\n        var search = $(selectors.queryfilter).val()\n        return search ? { search: search } : search;\n    }\n\n    /** Adds select2 component to netboxfilter */\n    function addNetboxFilter() {\n        var url = NAV.urls.api_netbox_list;\n        $(selectors.netboxfilter).select2({\n            placeholder: 'Search for device...',\n            ajax: {\n                url: url,\n                dataType: 'json',\n                delay: 500,\n                data: function(params) {\n                    return { search: params.term }\n                },\n                processResults: function(data, params) {\n                    return {results: data.results.map(function(d) {\n                        return {text: d.sysname, id: d.id}\n                    })};\n                }\n            },\n            minimumInputLength: 2\n        });\n    }\n\n    /* Reloads data from the api */\n    function reload(table) {\n        table.ajax.reload();\n    }\n\n    /* Adds listeners for reloading when the filters change */\n    function reloadOnFilterChange(table) {\n        var reloadInterval = 500  // ms\n        var _reload = reload.bind(this, table)\n        var throttledReload = _.throttle(_reload, reloadInterval, {leading: false});\n\n        $(selectors.filterForm).on('change', _reload);\n        $(selectors.filterForm).on('keyup', '#queryfilter', function(event) {\n            var isWordCharacter = event.key.length === 1;\n            var isBackspaceOrDelete = (event.keyCode === 8 || event.keyCode === 46);\n            if (isWordCharacter || isBackspaceOrDelete) {\n                throttledReload();\n            }\n        });\n    }\n\n    /* Initialize everything with given config */\n    function filterController(table) {\n        addNetboxFilter();\n        addSubmitListener(table);\n        /*         reloadOnFilterChange(table);*/\n    }\n\n    function addSubmitListener(table) {\n        $(selectors.filterForm).on('submit', function(e){\n            e.preventDefault();\n            table.ajax.reload();\n        })\n    }\n\n    /* Creates the url for fetching data from the API*/\n    function getUrl() {\n        var baseUri = URI(NAV.urls.api_interface_list);\n        var uri = addFilterParameters(baseUri);\n        return uri.toString();\n    }\n\n    return {\n        controller: filterController,\n        getUrl: getUrl\n    };\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/app.js",
    "content": "// Main point of entry for the IPAM application itself.\n\ndefine(function(require, exports, module) {\n  const _ = require(\"underscore\");\n  require(\"backbone\");\n  const Marionette = require(\"marionette\");\n  const Radio = require(\"backbone.radio\");\n\n  // Configure Marionette v4 to handle template selectors like \"#template-id\"\n  // (Marionette v2 did this automatically, v4 requires explicit configuration)\n  Marionette.setRenderer(function(template, data) {\n    if (typeof template === 'function') {\n      return template(data);\n    }\n    if (typeof template === 'string' && template.startsWith('#')) {\n      const templateHtml = $(template).html();\n      return _.template(templateHtml)(data);\n    }\n    return template;\n  });\n\n  const Models = require(\"src/ipam/models\");\n  const Views = require(\"src/ipam/views/index\");\n\n  const util = require(\"src/ipam/util\");\n\n  // == APP SINGLETON\n  const App = new Marionette.Application();\n  const debug = util.ipam_debug.new(\"app\");\n\n  // Global radio channel for app-wide events (replaces App.vent from Wreqr)\n  const globalCh = Radio.channel(\"global\");\n\n  // Create regions (v4 style - regions are created separately)\n  const mainRegion = new Marionette.Region({ el: \"#prefix-tree\" });\n  const controlsRegion = new Marionette.Region({ el: \"#ipam-controls\" });\n\n  // Instantiate application by fetching a tree and drawing stuff\n  App.on(\"start\", function() {\n    debug(\"Trying to render prefix tree...\");\n    mainRegion.show(new Views.RootView({\n      collection: new Models.PrefixNodes(),\n      childView: Views.NodeView\n    }));\n\n    controlsRegion.show(new Views.ControlView({\n      model: new Models.Control()\n    }));\n\n    debug(\"Didn't crash. Great success!\");\n  });\n\n  // Handle flash messages\n  const flash_debug = util.ipam_debug.new(\"flash\");\n  globalCh.on(\"flash\", function(klass, msg) {\n    flash_debug(\"Flashed a message\");\n    const template = _.template(\"<div class='<%= klass %>'><%= content %></div>\");\n    const content = template({\n      klass: klass,\n      content: msg\n    });\n    $(\"#ipam-flash\").html(content);\n  });\n\n  globalCh.on(\"flash:reset\", function() {\n    flash_debug(\"Reset flash\");\n    $(\"#ipam-flash\").html(null);\n  });\n\n  // Debug button\n  $(\"#mybtn\").on(\"click\", function() {\n    globalCh.trigger(\"fetch:all\");\n  });\n\n  //util.debugListen(\"available_subnets\");\n  //util.ipam_debug.listen(\"app\");\n  //util.ipam_debug.listen(\"models\");\n  //util.ipam_debug.listen(\"views\");\n  //util.ipam_debug.unlisten(\"models:usage\");\n  //util.ipam_debug.unlisten(\"views:available_subnets\");\n  util.ipam_debug.unlisten(\"views:nodeview\");\n\n  module.exports = App;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/ipam.js",
    "content": "// Starts the IPAM application\n\ndefine(function(require, exports, module) {\n  var viz = require(\"src/ipam/viz\");\n  var util = require(\"src/ipam/util\");\n  var App = require(\"src/ipam/app\");\n  var _ = require(\"underscore\");\n\n  // Mount prefix tree on DOM\n  App.start();\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/models.js",
    "content": "define(function(require, exports, module) {\n  var _ = require(\"underscore\");\n  var Backbone = require(\"backbone\");\n  var debug = require(\"src/ipam/util\").ipam_debug;\n  var FSM = require(\"src/ipam/util\").FSM;\n\n  var PrefixNode = Backbone.Model.extend({\n    debug: debug.new(\"models:prefixnode\"),\n    defaults: {\n      // plaintext description of VLAN\n      description: \"\",\n      // VLAN organization\n      \"organization\": \"\",\n      // usage of VLAN\n      \"vlan_usage\": null,\n      // Primary key (in DB)\n      \"pk\": null,\n      start: new Date().toISOString(),\n      end: null,\n      // Percentwise usage (active_addr/max_addr),\n      usage: 0.0,\n      // Percent of prefix allocated to other scopes/reservations\n      allocated: 0.0\n    },\n\n    hasChildren: function() {\n      var children = this.get(\"children\") || this.children.models;\n      if (_.isUndefined(children) || _.isEmpty(children)) {\n        return false;\n      }\n      return true;\n    },\n\n    // Check if a node or its children matches a filter TODO: Reconsider this.\n    // Probably not a smart idea. Rather, filter the list of prefix nodes\n    // directly and then construct a new view of the resulting collection.\n    matches: function(filter) {\n      if (!filter || _.isUndefined(filter)) {\n        return true;\n      }\n      return true;\n    },\n\n    // TODO: validate: function() {}\n\n    initialize: function() {\n      // Recursively instantiate any children\n      var children = this.get(\"children\");\n      if (children) {\n        this.children = new PrefixNodes(children);\n        this.unset(\"children\");\n      }\n    }\n  });\n\n  // Container for trees (and subtrees)\n  var PrefixNodes = Backbone.Collection.extend({\n    debug: debug.new(\"models:prefixnodes\"),\n    model: PrefixNode,\n    baseUrl: \"/ipam/api/?\",\n    // Default query params\n    queryParams: null,\n\n    initialize: function(models, args) {\n      var self = this;\n      this.url = function() {\n        var params = decodeURIComponent($.param(self.queryParams, true));\n        return self.baseUrl + params;\n      };\n      this.parse = function(resp) {\n        this.debug(\"Received response from \" + this.url(), resp);\n        return resp;\n      };\n    }\n  });\n\n  // Calls to the total usage API\n  var Usage = Backbone.Model.extend({\n    debug: debug.new(\"models:usage\"),\n    urlTemplate: _.template(\"/ipam/api/<%= pk %>/usage/\"),\n    defaults: {\n      pk: null,\n      usage: 0,\n      queryParams: {}\n    },\n\n    initialize: function() {\n      var self = this;\n      this.url = function() {\n        var queryParams = self.get(\"queryParams\");\n        var pk = self.get(\"pk\");\n        var params = decodeURIComponent($.param(queryParams, true));\n        var baseUrl = self.urlTemplate({ pk: pk });\n        return baseUrl + params;\n      };\n      this.parse = function(resp) {\n        this.debug(\"Received response from \" + this.url(), resp);\n        return resp;\n      };\n    }\n\n  });\n\n  // Calls to available subnets API\n  var AvailableSubnets = Backbone.Model.extend({\n    debug: debug.new(\"models:availablesubnets\"),\n    urlTemplate: _.template(\"/ipam/api/?net_type=all&within=<%= prefix %>&show_all=True\"),\n\n    defaults: {\n      state: \"Initial state\",\n      // Currently focused node in treemap\n      focused_node: {},\n      raw_data: {},\n      data: [],\n      hide: true,\n      queryParams: {\n        prefix: \"10.0.0.0/16\"\n      }\n    },\n\n    initialize: function() {\n      var self = this;\n      this.url = function() {\n        var queryParams = this.get(\"queryParams\");\n        return self.urlTemplate(queryParams);\n      };\n      this.parse = function(resp) {\n        this.debug(\"Received response from \" + this.url(), resp);\n        this.set(\"hide\", false);\n        return { raw_data: resp };\n      };\n    }\n  });\n\n  // State/model for control form subview\n  var Control = Backbone.Model.extend({\n    defaults: {\n      state: \"Initial state\",\n      advancedSearch: false,\n      queryParams: {\n        ip: null,\n        type: [\"ipv4\", \"ipv6\", \"rfc1918\"],\n        net_type: [\"scope\"],\n        search: null,\n        timestart: null,\n        timeend: null,\n        organization: null,\n        usage: null,\n        vlan: null,\n        description: null,\n        prefix: null\n      }\n    }\n  });\n\n  var Tree = Backbone.Model.extend({\n    defaults: {\n      open_nodes: 0,\n      currentComparator: \"prefix\",\n      parent: null\n    }\n  });\n\n  module.exports = {\n    \"PrefixNodes\": PrefixNodes,\n    \"PrefixNode\": PrefixNode,\n    \"AvailableSubnets\": AvailableSubnets,\n    \"Control\": Control,\n    \"Usage\": Usage,\n    \"Tree\": Tree\n  };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/util.js",
    "content": "// Everything that doesn't belong anywhere else\n\ndefine(function (require, exports, module) {\n\n  // Needed for Backbone.Wreqr\n  var _ = require(\"underscore\");\n\n  // Get the number of available addresses in a prefix (CIDR notation, e.g.\n  // '10.0.0.0/8'), given all matching sub-prefixes\n  function calculateAvailable(prefixlen, family) {\n    var total_bits = family === 4 ? 32 : 128;\n    return Math.pow(2, total_bits - prefixlen);\n  }\n\n  // Utility for translate statements, in lack of proper string templates for\n  // ES5 (and any good reasons to transpile from ES6)\n  function translate(x, y) {\n    var fmt = _.template(\"translate(<%= xOffset %>, <%= yOffset %>)\");\n    return fmt({xOffset: x, yOffset: y});\n  }\n\n  // Remove zero elements and calculate relative steps (spanning [0, 1]) for\n  // each data element, e.g. normalization. 'valueFieldOrFunction' is a function\n  // that takes a data row and returns a numeric or value, or the field which\n  // will be scaled during this step to calculate the step delta. row.delta0\n  // denotes the start of the step, and delta1 denotes the end\n  function normalize(arrayOfObj, valueFieldOrFunction, scaleFn) {\n    var lookup = valueFieldOrFunction;\n    if (!_.isFunction(valueFieldOrFunction)) {\n      lookup = function(row) {\n        return row[valueFieldOrFunction];\n      };\n    }\n    // initialize step\n    var step = 0;\n    var newData = arrayOfObj;\n    // parse options\n    var _scaleFn = scaleFn || function(n) { return n; };\n    // remove zero rows\n    newData = _.reject(newData, function (row) {\n      return lookup(row) === 0;\n    });\n    // calculate steps\n    newData = _.map(newData, function (row) {\n      row.delta0 = step;\n      step += _scaleFn(lookup(row));\n      row.delta1 = step;\n      return row;\n    });\n    // normalize steps\n    newData = _.map(newData, function (row) {\n      row.delta0 /= step;\n      row.delta1 /= step;\n      return row;\n    });\n    return newData;\n  }\n\n  // Export debugger util lib\n  var Debugger = require(\"libs/ipadebug\");\n  // Export state machine util lib\n  var FSM = require(\"libs/statist\");\n\n  module.exports = {\n    \"calculateAvailable\": calculateAvailable,\n    \"normalize\": normalize,\n    \"translate\": translate,\n    \"ipam_debug\": Debugger(\"IPAM_DEBUG\"),\n    \"FSM\": FSM\n  };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/behaviors.js",
    "content": "define(function(require, exports, module) {\n\n  const _ = require(\"underscore\");\n  const Backbone = require(\"backbone\");\n  const Marionette = require(\"marionette\");\n  const FSM = require(\"libs/statist\");\n\n  // Simple mixin to add a state machine to a view. See 'subnetallocator.js' for\n  // example usage.\n  //\n  // In Marionette v4, behaviors are referenced directly by class using\n  // `behaviorClass` in the view's behaviors hash.\n  const StateMachine = Marionette.Behavior.extend({\n    initialize: function() {\n      // In Marionette v4, use getOption() to access options with defaults\n      const states = this.getOption('states') || {};\n      const modelField = this.getOption('modelField');\n      const initFn = this.getOption('init') || function(fsm) { return fsm; };\n      const handlers = this.getOption('handlers') || {};\n\n      const fsm = initFn(new FSM(states));\n      if (!_.isObject(fsm)) {\n        throw new Error(\"FSM init error: Didn't (or forgot to) return FSM object in 'init' function\");\n      }\n      const self = this.view;\n      // Update model with current state if modelField given\n      if (modelField) {\n        fsm.onChange(function (nextState) {\n          self.model.set(modelField, nextState);\n        });\n      }\n      // Mount handlers (if any). This is used to make a single function\n      // responsible for any state in the state machine.\n      _.each(handlers, function(handler, state) {\n        const fn = self[handler];\n        if (!_.isFunction(fn)) {\n          throw new Error(\"Handler \" + handler + \" is not a function (or undefined)\");\n        }\n        fsm.on(state, self[handler].bind(this, self));\n      });\n      self.fsm = fsm;\n    }\n  });\n\n  // Export behaviors directly for use with behaviorClass in Marionette v4\n  module.exports = {\n    StateMachine: StateMachine\n  };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/control.js",
    "content": "define(function(require, exports, module) {\n  const _ = require(\"underscore\");\n  require(\"backbone\");\n  const Marionette = require(\"marionette\");\n  const Radio = require(\"backbone.radio\");\n\n  const Behaviors = require(\"src/ipam/views/behaviors\");\n  require(\"src/ipam/models\");\n  require(\"src/ipam/viz\");\n\n  const debug = require(\"src/ipam/util\").ipam_debug;\n  const globalCh = Radio.channel(\"global\");\n\n  const viewStates = {\n    \"SEARCH\": {\n      \"RESET\": \"SEARCH\"\n    }\n  };\n\n\n  // Control form for tree\n  module.exports = Marionette.View.extend({\n    debug: debug.new(\"views:control\"),\n    template: \"#prefix-control-form\",\n\n    behaviors: {\n      StateMachine: {\n        behaviorClass: Behaviors.StateMachine,\n        states: viewStates,\n        modelField: \"state\",\n        handlers: {\n          \"SEARCH\": \"advancedSearch\"\n        }\n      }\n    },\n\n    regions: {\n      \"advanced\": \".prefix-control-form-advanced\"\n    },\n\n    events: {\n      \"click .submit-search\": \"updateSearch\",\n      \"click .submit-reset\": \"resetSearch\",\n      \"keypress .search-param\": \"forceSearch\"\n    },\n\n    // Default parameters for the different kinds of searches\n    simpleSearchDefaults: {\n      net_type: [\"scope\"],\n      ip: null,\n      search: null\n    },\n    advancedSearchDefaults: {\n      type: [\"ipv4\", \"ipv6\", \"rfc1918\"],\n      net_type: [\"scope\"],\n      organization: null,\n      usage: null,\n      vlan: null,\n      description: null\n    },\n\n    advancedSearch: function(self) {\n      // Reset model TODO load from localstorage?\n      self.debug(\"Reset query params\");\n      self.model.set(\"queryParams\", self.advancedSearchDefaults);\n      self.doSearch();\n    },\n\n    onRender: function() {\n      // Detect select2 inputs\n      this.$el.find(\".select2\").select2();\n      // Set up remote fetching of prefixes for form auto-completion\n      const prefixSelect = this.$el.find(\"#prefix-search-box\");\n      prefixSelect.select2({\n        placeholder: 'Search for prefix...',\n        minimumInputLength: 1,\n        allowClear: true,\n        ajax: {\n          url: \"/api/prefix/search/\",\n          dataType: 'json',\n          type: \"GET\",\n          delay: 250,\n          data: function (params) {\n            return {\n              net_address: params.term, // search term\n              page: params.page || 1\n            };\n          },\n          processResults: function (data, params) {\n            return {\n              results: $.map(data, function (item) {\n                return {\n                  text: item.net_address,\n                  id: item.net_address\n                };\n              })\n            };\n          },\n          cache: true\n        }\n      });\n      prefixSelect.on('change', this.forceSearch.bind(this));\n      // Make sure net_type select always reflects default value. This is mostly\n      // needed for the initial rendering.\n      this.$el.find(\"#prefix-net-type\").val(this.model.get(\"queryParams\").net_type).trigger('change');\n    },\n\n    // If the user triggers a search by hitting enter\n    forceSearch: function(evt) {\n      if (evt.which === 13 || !evt.which) {\n        evt.preventDefault();\n        this.updateSearch();\n      }\n    },\n\n    // Update search parameters and execute a search\n    updateSearch: function() {\n      this.model.set(\"queryParams\", this.$el.find('form').serializeObject());\n      this.doSearch();\n    },\n\n    resetSearch: function() {\n      // I am a simple man. I click \"reset\", and reload the page\n      location.reload();\n    },\n\n    doSearch: function() {\n      globalCh.trigger(\"search:update\", this.model.get('queryParams'));\n    },\n\n    initialize: function() {\n      this.fsm.setState(\"SEARCH\");\n    }\n\n  });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/index.js",
    "content": "define(function(require, exports, module) {\n\n  // TODO: Import all\n\n  var Tree = require(\"src/ipam/views/tree\");\n  exports.NodeView = Tree.NodeView;\n  exports.RootView = Tree.RootView;\n\n  exports.ControlView = require(\"src/ipam/views/control\");\n  exports.UsageGraph = require(\"src/ipam/views/usage\");\n  exports.SubnetAllocator = require(\"src/ipam/views/subnetallocator\");\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/prefixmap.js",
    "content": "// D3 component for displaying and exploring allocated prefixes. Expects an\n// options object with the following fields defined:\n//\n// - `mountElem`, the selector for the element to mount the SVG elem upon.\n//\n// - `width`, `height` - self-explanatory, but do note that this element only\n// enforces the relative aspect ratio of the width and height, and expands to\n// fill the whole container width.\n//\n// - `selectNodeCallBack`, which is invoked with the selected node as its\n// argument when the user clicks on a prefix.\n//\n// - `data`, which is the JSON serialization of a PrefixHeap (see NAV API docs).\n// It is expected that the top level is a \"virtual\" prefix (\"*\") with the rest\n// of tree as its child.\n\n\ndefine(function(require, exports, module) {\n\n  const _ = require(\"underscore\");\n  const d3 = require(\"d3v7\");\n\n  var viewbox = _.template(\"0 0 <%= width %> <%= height %>\");\n  var tooltipTmpl = _.template(\"<%= prefix %> <% if (vlan_number) { %> (vlan <%= vlan_number %>)<% } %> - <%= description %>\");\n\n  var PrefixMap = function(opts) {\n    var width = opts.width;\n    var height = opts.height;\n    var mountElem = opts.mountElem;\n    var data = opts.data.children[0];\n    var selectNodeCallback = opts.selectNodeCallBack;\n\n    // Minor constants\n    var BRUSH_BOX_HEIGHT = 20;\n    var BRUSH_BOX_PADDING = 20;\n\n    // Canonical xScale is needed to preserve original between different zoom\n    // extents, e.g. recover original scale.\n    var xScale = d3.scaleLinear().range([0, width]);\n    var canonicalXScale = d3.scaleLinear().range([0, width]);\n    var yScale = d3.scaleLinear().range([0, height]);\n\n    // Split into hierarchical data (a tree), weighted by prefix length\n    var partition = d3.partition();\n    var root = d3.hierarchy(data);\n    root.each(function (node) {\n      if (_.isUndefined(node.data.prefixlen === \"undefined\")) return;\n      node.value = Math.pow(2, 32 - node.data.prefixlen);\n    });\n    partition(root);\n\n    // Main container. We use a viewbox as a simple responsive solution for the viz\n    var svg = d3.select(mountElem).select(\".viz\")\n          .append(\"svg\")\n          .attr(\"viewBox\", viewbox({width: width, height: height + BRUSH_BOX_PADDING + BRUSH_BOX_HEIGHT}))\n          .attr(\"class\", \"matrix\")\n          .append(\"g\");\n\n    var rootTmpl = _.template(\"<%= prefix %> <% if (description) {%>- <%= description %><% } %>\");\n\n    // Container for tooltip on nodes\n    var div = d3.select(\"body\").append(\"div\")\n          .attr(\"class\", \"prefix-tooltip\")\n          .style(\"opacity\", 0);\n\n    // Draw static top node, e.g. not enhanced by zoom\n    var rootElem = _.first(root.descendants());\n    var rootNode = svg.selectAll(\"g\")\n          .data([rootElem])\n          .enter()\n          .append(\"g\")\n          .attr(\"transform\", \"translate(\" + xScale(rootElem.x0) + \",\" + yScale(rootElem.y0) + \")\")\n          .attr(\"class\", \"matrix-subnet-root\");\n    rootNode.append(\"rect\")\n      .attr(\"class\", \"matrix-subnet-root-rect\")\n      .attr(\"fill\", colors)\n      .attr(\"stroke\", colors(rootElem).darker(1))\n      .attr(\"width\", xScale(rootElem.x1) - xScale(rootElem.x0))\n      .attr(\"height\", yScale(rootElem.y1) - yScale(rootElem.y0))\n      .on(\"mouseover\", function(event, d) {\n        div.transition()\n          .duration(200)\n          .style(\"opacity\", .9);\n        div.html(tooltipTmpl(rootElem.data))\n          .style(\"left\", (event.pageX) + \"px\")\n          .style(\"top\", (event.pageY - 28) + \"px\");\n      })\n      .on(\"mouseout\", function(event, d) {\n        div.transition()\n          .duration(500)\n          .style(\"opacity\", 0);\n      });\n    rootNode\n      .append(\"text\")\n      .attr(\"visibility\", \"visible\")\n      .attr(\"x\", 0.5 * (xScale(rootElem.x1) - xScale(rootElem.x0)))\n      .attr(\"y\", 0.5 * (yScale(rootElem.y1) - yScale(rootElem.y0)))\n      .attr(\"class\", \"matrix-subnet-root-prefix\")\n      .append(\"tspan\")\n      .text(rootTmpl(rootElem.data))\n      .attr(\"x\", 0.5 * (xScale(rootElem.x1) - xScale(rootElem.x0)))\n      .attr(\"y\", 0.5 * (yScale(rootElem.y1) - yScale(rootElem.y0)));\n\n    // Add containers/rects for each node in the prefix tree\n    var subnet = svg.selectAll(\"g\")\n          .data(root.descendants())\n          .enter()\n          .append(\"g\")\n          .attr(\"transform\", function(d) { return \"translate(\" + xScale(d.x0) + \",\" + yScale(d.y0) + \")\"; })\n          .attr(\"class\", \"matrix-subnet\");\n    var subnetRect = subnet.append(\"rect\")\n          .attr(\"class\", \"matrix-subnet-rect\")\n          .attr(\"fill\", colors)\n          .attr(\"stroke\", function(d) { return colors(d).darker(1); })\n          .on(\"click\", function(event, d) {\n            selectNodeCallback(d.data);\n          })\n          .on(\"mouseover\", function(event, d) {\n            div.transition()\n              .duration(200)\n              .style(\"opacity\", .9);\n            div.html(tooltipTmpl(d.data))\n              .style(\"left\", (event.pageX) + \"px\")\n              .style(\"top\", (event.pageY - 28) + \"px\");\n          })\n          .on(\"mouseout\", function(event, d) {\n            div.transition()\n              .duration(500)\n              .style(\"opacity\", 0);\n          });\n    calculateNodes();\n\n    // Annotate the nodes with text\n    var subnetText = subnet.append(\"text\");\n    var subnetPrefix = subnetText.append(\"tspan\")\n          .attr(\"class\", \"matrix-subnet-prefix\")\n          .on(\"click\", function(event, d) {\n            selectNodeCallback(d.data);\n          });\n    calculateText();\n\n    // Draw legends for the viz\n    var legend = d3.select(mountElem).select(\".legends\").selectAll(\".legends\")\n          .data(_.keys(colorMap))\n          .enter()\n          .append(\"g\");\n    var legendDot = legend\n          .append(\"div\")\n          .style(\"display\", \"inline-block\")\n          .style(\"border\", \"1px solid #666\")\n          .style(\"width\", \"30px\")\n          .style(\"height\", \"10px\")\n          .style(\"margin-right\", \"5px\")\n          .style(\"background-color\", function(d) { return colorMap[d]; });\n    var legendText = legend\n          .append(\"span\")\n          .style(\"margin-right\", \"10px\")\n          .text(function(d) { return d.toString(); });\n\n    // Calculates the appropriate dimensions of all nodes depending on the domain of the xScale\n    function calculateNodes() {\n      // Only calculate bottom nodes\n      subnet.transition()\n        .duration(750)\n        .attr(\"transform\", function(d) {\n          return \"translate(\" + xScale(d.x0) + \",\" + yScale(d.y0) + \")\";\n        });\n      subnetRect.transition()\n        .duration(750)\n        .attr(\"width\", function(d) {\n          return xScale(d.x1) - xScale(d.x0);\n        })\n        .attr(\"height\", function(d) {\n          return yScale(d.y1) - yScale(d.y0);\n        });\n    }\n\n    // Calculate what (if any) text should be shown for each prefix. TODO:\n    // Should use the bounding box of the text instead.\n    function calculateText() {\n      subnetText.selectAll(\"tspan\").transition()\n        .duration(750)\n        .attr(\"visibility\", function(d) {\n          return xScale(d.x0 + (d.x1 - d.x0)) - xScale(d.x0) > 30 ? \"visible\" : \"hidden\";\n        })\n        .attr(\"x\", function(d) { return 0.5 * (xScale(d.x1) - xScale(d.x0)); })\n        .attr(\"y\", function(d) { return 0.5 * (yScale(d.y1) - yScale(d.y0)); })\n        .text(function(d) {\n          var _width = xScale(d.x1) - xScale(d.x0);\n          if (_width > 100) {\n            return d.data.prefix;\n          } else if (_width > 50) {\n            return \"/\" + d.data.prefixlen;\n          } else {\n            return \"\";\n          }\n        });\n      // Center text\n      subnetText.selectAll(\"tspan\")\n        .attr(\"x\", function(d) { return 0.5 * (xScale(d.x1) - xScale(d.x0)); })\n        .attr(\"y\", function(d) { return 0.5 * (yScale(d.y1) - yScale(d.y0)); });\n    }\n\n    // Add a context which we can mount our brush and axis on\n    var context = svg.append(\"g\")\n          .attr(\"transform\", \"translate(0, \" + (height + BRUSH_BOX_PADDING) + \")\")\n          .attr(\"class\", \"context\");\n\n    // Construct brush behavior\n    var brush = d3.brushX()\n          .extent([[0, 0], [width, BRUSH_BOX_HEIGHT]])\n          .on(\"end\", brushended);\n    var brushBox = context\n          .append(\"rect\")\n          .attr(\"class\", \"brush-box\")\n          .attr(\"fill\", \"lightgrey\")\n          .attr(\"height\", BRUSH_BOX_HEIGHT)\n          .attr(\"width\", width);\n    context.append(\"g\")\n      .attr(\"class\", \"brush\")\n      .call(brush);\n\n    // Construct zoom behavior\n    var zoom = d3.zoom()\n          .scaleExtent([1, Infinity])\n          .translateExtent([[0, 0], [width, height]])\n          .extent([[0, 0], [width, height]])\n          .on(\"zoom\", zoomed);\n    svg.call(zoom);\n\n    // TODO: Create small axis \"grid\" to draw this brush upon\n    function brushended(event) {\n      if (event.sourceEvent && event.sourceEvent.type === \"zoom\") return;\n      if (!event.sourceEvent) return; // Only transition after input.\n      const s = event.selection || canonicalXScale.range();\n      xScale.domain(canonicalXScale.domain());\n      xScale.domain(s.map(canonicalXScale.invert, xScale));\n      // redraw stuff\n      calculateText();\n      calculateNodes();\n      // update zoom selection to reflect brush selection\n      svg.call(zoom.transform, d3.zoomIdentity\n               .scale(width / (s[1] - s[0]))\n               .translate(-s[0], 0));\n    }\n\n    function zoomed(event) {\n      if (event.sourceEvent && event.sourceEvent.type === \"brush\") return;\n      const t = event.transform;\n      xScale.domain(t.rescaleX(canonicalXScale).domain());\n      // redraw stuff\n      calculateText();\n      calculateNodes();\n      // update brush selection to reflect zoom level\n      context.select(\".brush\").call(brush.move, xScale.range().map(t.invertX, t));\n    }\n\n  };\n\n  // Maps different types of nodes to different colors\n  var colorMap = {\n    \"used\": d3.hsl(52, 1.0, 0.5),\n    \"reserved\": d3.hsl(210, 0.79, 0.46),\n    \"available\": d3.hsl(0, 0, 1),\n    \"scope\": d3.hsl(0, 0, 0.87)\n  };\n  // Map a node type to its particular color.\n  function colors(d) {\n    // root node\n    if (d.depth === 0) {\n      return d3.hsl(199, 0.91, 0.64);\n    }\n    if (_.has(colorMap, d.data.net_type)) {\n      return colorMap[d.data.net_type];\n    }\n    return colorMap[\"used\"];\n  }\n\n  module.exports = PrefixMap;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/subnetallocator.js",
    "content": "// Major view component for viewing allocated subnets and reserving available\n// ranges. Might be refactored into a standalone app at some point.\n//\n// A quick note about the architecture: This component is modelled as a simple\n// state machine, using a simple homegrown shim (statist.js). Most actions,\n// events will be handled by triggering a certain signal within the FSM,\n// ensuring we always maintain a consistent state.\n\ndefine(function(require, exports, module) {\n\n  const _ = require(\"underscore\");\n  const Backbone = require(\"backbone\");\n  const Marionette = require(\"marionette\");\n  const Radio = require(\"backbone.radio\");\n  const debug = require(\"src/ipam/util\").ipam_debug.new(\"views:available_subnets\");\n\n  const Behaviors = require(\"src/ipam/views/behaviors\");\n  const Models = require(\"src/ipam/models\");\n  const PrefixMap = require(\"src/ipam/views/prefixmap\");\n\n  // Event broker\n  const globalCh = Radio.channel(\"global\");\n\n  const InfoView = Marionette.View.extend({\n    template: \"#prefix-allocate-info\",\n\n    events: {\n      \"click .reserve-subnet\": \"reserveSubnet\"\n    },\n\n    initialize: function(opts) {\n      this.fsm = opts.fsm;\n      this.node = opts.node;\n      this.model = new Backbone.Model(this.node);\n    },\n\n    serializeData: function(opts) {\n      return {\n        node: this.model.toJSON(),\n        state: this.fsm.state\n      };\n    },\n\n    reserveSubnet: function() {\n      this.fsm.step(\"RESERVE\", this.node);\n      this.render();\n    }\n\n  });\n\n  // For simplicity reasons, use a state singleton\n  const viewStates = {\n    INIT: {\n      FETCH_STATS: \"FETCHING_STATS\",\n      SHOW_TREEMAP: \"SHOWING_TREEMAP\"\n    },\n    FETCHING_STATS: {\n      FETCHING_DONE: \"SHOWING_TREEMAP\"\n    },\n    SHOWING_TREEMAP: {\n      HIDE: \"HIDING_TREEMAP\",\n      FOCUS_NODE: \"FOCUSED_NODE\"\n    },\n    HIDING_TREEMAP: {\n      DONE: \"INIT\"\n    },\n    CREATING_RESERVATION: {\n      FOCUS_NODE: \"HIDING_RESERVATION\",\n      HIDE: \"HIDING_RESERVATION\"\n    },\n    HIDING_RESERVATION: {\n      DONE: \"FOCUSED_NODE\"\n    },\n    FOCUSED_NODE: {\n      RESET: \"INIT\",\n      RESERVE: \"CREATING_RESERVATION\",\n      FOCUS_NODE: \"FOCUSED_NODE\"\n    }\n  };\n\n  // Main container for subnet allocator.\n  const AvailableSubnetsView = Marionette.View.extend({\n    debug: debug,\n    template: \"#prefix-available-subnets\",\n\n    behaviors: {\n      StateMachine: {\n        behaviorClass: Behaviors.StateMachine,\n        states: viewStates,\n        modelField: \"state\",\n        handlers: {\n          \"SHOWING_TREEMAP\": \"showingTreemap\",\n          \"HIDING_TREEMAP\": \"hidingTreemap\",\n          \"FOCUSED_NODE\": \"focusedNode\",\n          \"CREATING_RESERVATION\": \"creatingReservation\",\n          \"HIDING_RESERVATION\": \"hideReservation\",\n          \"FETCHING_STATS\": \"fetchingStats\"\n        }\n      }\n    },\n\n    regions: {\n      allocationTree: \".allocation-tree:first\",\n      nodeInfo: \".allocation-tree-info:first\",\n      reservation: \".allocation-tree-reservation:first\"\n    },\n\n    initialize: function(opts) {\n      const self = this;\n      this.model = new Models.AvailableSubnets({\n        queryParams: {\n          prefix: opts.prefix\n        }\n      });\n      // Log some stuff\n      this.debug(\"Mounted subnet component for\", opts.prefix);\n      this.fsm.onChange(function(nextState) {\n        self.debug(\"Moving into state\", nextState);\n      });\n      // Start application by fetching\n      this.fetch();\n    },\n\n    // STATE MACHINE START\n\n    // When we're focused on a particular node in the tree and displaying some\n    // information about it\n    focusedNode: function(self, node) {\n      self.debug(\"Focused on\", node);\n      self.model.set(\"focused_node\", node);\n      const payload = {\n        node: node,\n        fsm: self.fsm\n      };\n      self.showChildView(\"nodeInfo\", new InfoView(payload));\n    },\n\n    // Initial state. The tree has the data it needs to draw itself.\n    showingTreemap: function(self) {\n      self.render();\n      self.debug(\"Showing subnet treemap\");\n      const target = self.$el.find(\".allocation-tree:first\");\n      const treeMap = target.find(\".treemap\").get(0);\n      const data = self.model.get(\"raw_data\");\n      const notify = function(__node) {\n        if (__node.net_type == \"scope\") {\n          globalCh.trigger(\"scrollto\", __node);\n        }\n        self.fsm.step(\"FOCUS_NODE\", __node);\n      };\n      // Signal state change, do stuff\n      PrefixMap({\n        data: { prefix: \"*\", children: data },\n        mountElem: treeMap,\n        width: 1024,\n        height: 200,\n        selectNodeCallBack: notify\n      });\n      // Ensure htmx processes the opened tree to enable hx-* attributes\n      htmx.process(self.$el.get(0));\n    },\n\n    hidingTreemap: function(self) {\n      self.debug(\"Hiding subnet treemap\");\n      self.$el.find(\".subnets:first\").hide();\n      self.model.set(\"hide\", true);\n      self.fsm.step(self.fsm.events.DONE);\n    },\n\n    // The user is trying to reserve a new prefix for some particular purpose\n    creatingReservation: function(self, node) {\n      self.debug(\"Creating reservation for\", node);\n      const payload = {\n        node: node,\n        fsm: self.fsm\n      };\n      self.showChildView(\"reservation\", new ReservationView(payload));\n    },\n\n    // When deleting reservation, just return to new or currently focused node\n    hideReservation: function(self, node) {\n      self.debug(\"Destroying reservation\");\n      const region = self.getRegion(\"reservation\");\n      if (region) {\n        region.empty();\n      }\n      self.fsm.step(\"DONE\", node);\n    },\n\n    // Loading state, e.g. trying to get some data to display to the user\n    fetchingStats: function(self) {\n      const prefix = self.model.get(\"queryParams\").prefix;\n      self.debug(\"Trying to get subnets for \" + prefix);\n      // cache xhr object\n      self.xhr = self.model.fetch({reset: true});\n      self.xhr.done(self.onReceive.bind(this, self));\n    },\n\n    // STATE MACHINE END\n\n    onBeforeDestroy: function() {\n      // Kill pending fetches upon destroying this component\n      if (!_.isUndefined(this.xhr)) {\n        this.xhr.abort();\n      }\n    },\n\n    onReceive: function(self) {\n      self.fsm.step(self.fsm.events.FETCHING_DONE);\n    },\n\n    fetch: function() {\n      this.fsm.step(\"FETCH_STATS\");\n    }\n  });\n\n\n  const reservationStates = {\n    INIT: {\n      CHOOSE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\",\n      STORE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\"\n    },\n    CHOSEN_RESERVATION_SIZE: {\n      CHOOSE_SUBNET: \"CHOSEN_SUBNET\",\n      CHOOSE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\",\n      STORE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\"\n    },\n    CHOSEN_SUBNET: {\n      CHOOSE_SUBNET: \"CHOSEN_SUBNET\",\n      CHOOSE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\",\n      STORE_RESERVATION_SIZE: \"CHOSEN_RESERVATION_SIZE\"\n    }\n  };\n\n  const ReservationView = Marionette.View.extend({\n    template: \"#prefix-allocate-reservation\",\n    baseUrl: \"/seeddb/prefix/add/?\",\n\n    behaviors: {\n      StateMachine: {\n        behaviorClass: Behaviors.StateMachine,\n        states: reservationStates\n      }\n    },\n\n    events: {\n      \"change .size-of-network\": \"onNetworkSizeChange\",\n      \"keypress .size-of-network\": \"onNetworkSizeKeypress\",\n      \"click .cancel-reservation:first\": \"cancelReservation\",\n      \"select2:select .prefix-list\": \"onSelectPrefix\",\n      \"click .choose-network-size\": \"chooseNetworkSize\"\n    },\n\n    initialize: function(opts) {\n      this.parent_fsm = opts.fsm;\n      this.node = opts.node;\n      this.model = new Backbone.Model(this.node);\n      this.model.set(\"creation_url\", null);\n      // Since template uses states, rerender on new state\n      this.fsm.onChange(this.render.bind(this));\n      this.fsm.onChange(function (state) {\n        console.log(\"RESERVATION went into state\", state);\n      });\n    },\n\n    onNetworkSizeKeypress: function(evt) {\n      if (evt.which === 13) {\n        this.chooseNetworkSize(evt);\n      }\n    },\n\n    chooseNetworkSize: function(evt) {\n      evt.preventDefault();\n      this.getAndStoreNetworkSize();\n      const networkSize = this.model.get(\"network_size\");\n      if (networkSize === '' || !networkSize) {\n        return;\n      }\n      this.fsm.step(\"CHOOSE_RESERVATION_SIZE\");\n    },\n\n    onNetworkSizeChange: function(evt) {\n      evt.preventDefault();\n      this.getAndStoreNetworkSize();\n      this.fsm.step(\"STORE_RESERVATION_SIZE\");\n    },\n\n    getAndStoreNetworkSize: function() {\n      const sizeOfNetwork = this.$el.find(\".size-of-network\").val();\n      this.model.set(\"network_size\", sizeOfNetwork);\n      this.model.set(\"selected_prefix\", null);\n    },\n\n    onSelectPrefix: function(evt) {\n      // Don't handle empty values from user\n      // In Select2 v4, the selected data is in evt.params.data\n      const selectedData = evt.params?.data;\n      if (!selectedData?.id) {\n        return;\n      }\n      const params = {\n        \"net_address\": selectedData.id,\n        \"net_type\": \"reserved\"\n      };\n      this.model.set(\"creation_url\", this.baseUrl + decodeURIComponent($.param(params, true)));\n      this.model.set(\"selected_prefix\", selectedData.id);\n      this.fsm.step(\"CHOOSE_SUBNET\");\n    },\n\n    serializeData: function(opts) {\n      return {\n        node: this.model.toJSON(),\n        creation_url: this.model.get(\"creation_url\"),\n        selected_prefix: this.model.get(\"selected_prefix\"),\n        network_size: this.model.get(\"network_size\"),\n        state: this.fsm.state\n      };\n    },\n\n    onRender: function(self) {\n      // Mount select2 if found\n      const selectElem = self.$el.find(\".prefix-list:first\");\n      const sizeOfNetwork = self.model.get(\"network_size\");\n      const prefix = self.model.get(\"prefix\");\n      if (!(sizeOfNetwork && prefix)) {\n        return;\n      }\n      const optionTemplate = _.template(\"<%= prefix %> (<%= start%>-<%= end %>)\");\n      const pageSize = 10;\n      selectElem.select2({\n        placeholder: self.model.get(\"selected_prefix\") || \"Select a subnet\",\n        ajax: {\n          url: \"/ipam/api/suggest/\",\n          dataType: 'json',\n          data: function(params) {\n            const page = params.page || 1;\n            return {\n              n: pageSize,\n              prefixlen: sizeOfNetwork,\n              prefix: prefix,\n              offset: pageSize * (page - 1)\n            };\n          },\n          processResults: function(data, params) {\n            console.log(data);\n            const transformed = _.map(data.candidates, function (prefixMap) {\n              return {\n                text: optionTemplate(prefixMap),\n                id: prefixMap.prefix\n              };\n            });\n            params.page = params.page || 1;\n            return { results: transformed, pagination: { more: data.more } };\n          }\n        }\n      });\n    },\n\n    cancelReservation: function() {\n      this.parent_fsm.step(\"HIDE\", this.node);\n    },\n\n    // Animate stuff\n    onBeforeAttach: function() {\n      this.$el.fadeIn(\"slow\");\n    },\n    onBeforeDestroy: function() {\n      this.$el.fadeOut(\"slow\");\n    }\n\n  });\n\n  // This is where the hard part starts: The viz of the network layout. TODO:\n  // Consider moving this into a separate file.\n\n  module.exports = AvailableSubnetsView;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/tree.js",
    "content": "// This file contains all components related to the drawing of the main prefix\n// tree. It works recursively, hence the same components (NodeView and TreeView)\n// are used to display any descendants of our root nodes.\n\ndefine(function(require, exports, module) {\n  var _ = require(\"underscore\");\n  require(\"backbone\");\n  var Marionette = require(\"marionette\");\n  const Radio = require(\"backbone.radio\");\n\n  const Behaviors = require(\"src/ipam/views/behaviors\");\n  var Models = require(\"src/ipam/models\");\n  var Views = require(\"src/ipam/views/index\");\n  require(\"src/ipam/viz\");\n\n  var debug = require(\"src/ipam/util\").ipam_debug;\n  const globalCh = Radio.channel(\"global\");\n\n\n  // Simple utility object to flash messages. Might be moved into utils.js at\n  // some point.\n  var flash = {\n    call: function(klass, msg) {\n      globalCh.trigger(\"flash\", klass, msg);\n    },\n\n    noResult: function(searchParams) {\n      var tmpl = _.template(\"No results<% if (query) { %> for <strong>'<%- query %>'</strong><% } %>.\");\n      this.call(\"alert-box alert with-icon\", tmpl({query: searchParams}));\n    },\n\n    fetch: function() {\n      var tmpl = _.template(\"<i class='fa fa-spinner fa-spin'></i> <span>Fetching</span>\");\n      this.call(\"alert-box\", tmpl());\n    },\n\n    reset: function() {\n      globalCh.trigger(\"flash:reset\");\n    }\n  };\n\n  // Base of tree (e.g. only top nodes of our prefix tree)\n  const RootView = Marionette.View.extend({\n    debug: debug.new(\"views:rootview\"),\n    regions: {\n      \"tree\": \".prefix-tree-root\"\n    },\n    template: \"#prefix-list\",\n\n    // Check if we have an empty tree\n    isEmpty: function() {\n      return !this.collection || this.collection.length === 0;\n    },\n\n    // Handles fetching, cancels previous fetches if any etc.\n    refetch: function() {\n      // Cancel existing fetches to avoid happy mistakes\n      if (typeof this.xhr !== \"undefined\") {\n        this.debug(\"Aborted previous fetch!\");\n        this.xhr.abort();\n      }\n      // Don't fetch if no query params\n      if (!this.collection.queryParams) {\n        return;\n      }\n      // Keep a pointer to the fetch object, for tracking all fetches\n      this.xhr = this.collection.fetch({reset: true});\n      // Hide children while fetching\n      const treeRegion = this.getRegion('tree');\n      if (treeRegion?.$el) {\n        treeRegion.$el.hide();\n        const self = this;\n        this.xhr.done(function (){\n          const region = self.getRegion('tree');\n          if (region?.$el) {\n            region.$el.show();\n          }\n        });\n      }\n      flash.fetch();\n    },\n\n    initialize: function() {\n      // Don't mess with the ordering\n      this.sort = false;\n      // Don't render before fetch of collection returns\n      this.collection = new Models.PrefixNodes();\n      this.refetch();\n      // Handle reset events, e.g. when a fetch is done\n      this.collection.bind(\"reset\", this.onRender, this);\n      this.collection.bind(\"fetch\", this.onRender, this);\n      // Set up global handlers for requests etc\n      var self = this;\n      globalCh.on(\"fetch:all\", function() { self.refetch(); });\n      globalCh.on(\"search:update\", function(params) {\n        self.debug(\"Got new search params\", params);\n        self.collection.queryParams = params;\n        self.refetch();\n      });\n      var scrolltoHandler = function(node) {\n        self.debug(\"Trying to scroll to\", node);\n        var elem = $(\"#prefix-\" + node.pk);\n        // Element not found in DOM\n        if (!elem.length && node.parent_pk) {\n          globalCh.trigger(\"open_node\", node.parent_pk);\n          setTimeout(function(){\n            scrolltoHandler(node);\n          }, 1000);\n          return;\n        }\n        // Calculate offset and move to the desired node\n        globalCh.trigger(\"open_node\", node.pk);\n        self.debug(\"Scrolling to\", node.pk);\n        $(\"html, body\").animate({\n          scrollTop: elem.offset().top\n        }, \"slow\");\n      };\n      globalCh.on(\"scrollto\", scrolltoHandler);\n    },\n\n    /* Whether or not we're currently fetching some data */\n    isFetching: function() {\n      if (typeof this.xhr === \"undefined\") {\n        return false;\n      }\n      switch (this.xhr.readyState) {\n      case 1:\n      case 2:\n      case 3:\n        return true;\n      default:\n        return false;\n      }\n    },\n\n    // Flash some messages depending on the state of our tree.\n    onRender: function() {\n      // Show tree child view after render (moved from onBeforeShow for v4 compatibility)\n      this.showChildView(\"tree\", new TreeView({\n        model: new Models.Tree(),\n        collection: this.collection\n      }));\n\n      if (this.isFetching()) {\n        return flash.fetch();\n      }\n      if (this.isEmpty() && this.collection.queryParams) {\n        var searchParams = this.collection.queryParams.search;\n        return flash.noResult(searchParams);\n      } else {\n        return flash.reset();\n      }\n    },\n\n    onBeforeDestroy: function() {\n      // Kill pending fetches upon destroying this component\n      if (!_.isUndefined(this.xhr)) {\n        this.xhr.abort();\n      }\n    }\n\n  });\n\n  // TODO: Do blur using global channel or something\n  var nodeViewStates = {\n    INIT: {\n      \"TOGGLE_OPEN\": \"OPENING_NODE\",\n      \"FETCH_STATS\": \"FETCHING_STATS\"\n    },\n    OPENING_NODE: {\n      \"OPENED_NODE\": \"OPEN_NODE\"\n    },\n    FETCHING_STATS: {\n      \"DONE_FETCHING_STATS\": \"LOADING_STATS\"\n    },\n    LOADING_STATS: {\n      \"DONE_LOADING_STATS\": \"INIT\"\n    },\n    OPEN_NODE: {\n      \"SHOW_CHILDREN\": \"SHOWING_CHILDREN\",\n      \"TOGGLE_OPEN\": \"CLOSING_NODE\"\n    },\n    CLOSING_NODE: {\n      \"CLOSED_NODE\": \"INIT\"\n    },\n    \"SHOWING_CHILDREN\": {\n      \"DONE_SHOWING_CHILDREN\": \"OPEN_NODE\",\n      \"TOGGLE_OPEN\": \"CLOSING_NODE\"\n    }\n  };\n\n  // Main view of our tree nodes, e.g. prefixes. Handles all main concerns like\n  // toggling them open/closed and so on.\n  const NodeView = Marionette.View.extend({\n    tagName: \"li\",\n    className: \"prefix-tree-item prefix-tree-item-closed\",\n    template: \"#prefix-tree-node\",\n\n    regions: {\n      usage_graph: \".prefix-graphs:first\",\n      children: \".prefix-tree-children-container\",\n      available_subnets: \".prefix-tree-available-subnets:first\"\n    },\n\n    events: {\n      \"click a.prefix-tree-item-title:first\": \"toggleOpen\",\n      \"touchstart a.prefix-tree-item-title:first\": \"toggleOpen\"\n    },\n\n    behaviors: {\n      StateMachine: {\n        behaviorClass: Behaviors.StateMachine,\n        states: nodeViewStates,\n        handlers: {\n          \"LOADING_STATS\": \"loadingStats\",\n          \"SHOWING_CHILDREN\": \"showingChildren\",\n          \"OPENING_NODE\": \"openingNode\",\n          \"CLOSING_NODE\": \"closingNode\",\n          \"OPEN_NODE\": \"openNode\"\n        }\n      }\n    },\n\n    onBeforeDestroy: function() {\n      // Remove marker class for open node in tree, so new results (upon\n      // searching/filtering) aren't blurred.\n      this.$el.parent().removeClass(\"prefix-tree-open\");\n      if (this.ch) {\n        this.ch.off(\"open_node\");\n      }\n    },\n\n    initialize: function() {\n      var self = this;\n      var pk = this.model.get(\"pk\");\n      // In this case, initialize the node with an unique identifier, so it's\n      // easier to track down edge cases for certain prefixes.\n      this.debug = debug.new(\"views:nodeview:\" + pk);\n      this.debug(\"Mounted node #\", pk);\n      this.fsm.onChange(function(nextState) {\n        self.debug(\"Moving into state\", nextState);\n      });\n      this.ch = Radio.channel(\"global\");\n      this.ch.on(\"open_node\", function(__pk) {\n        if (__pk !== pk) {\n          return;\n        }\n        self.fsm.step(\"TOGGLE_OPEN\");\n      });\n    },\n\n    // STATE MACHINE START\n\n    // When the node has been opened by the user.\n    openNode: function(self) {\n      self.fsm.step(\"SHOW_CHILDREN\");\n    },\n\n    // Handle everything related to opening and displaying the node.\n    openingNode: function(self) {\n      self.debug(\"Opening node\", self.model.get(\"pk\"));\n      self.fsm.step(\"OPENED_NODE\");\n      // mark parent tree as having open node\n      self.$el.addClass(\"prefix-tree-item-open\");\n      self.$el.removeClass(\"prefix-tree-item-closed\");\n      self.trigger(\"open_node\");\n      // open the node itself\n      var content = self.$el.find(\".prefix-tree-item-content:first\");\n      var title = self.$el.find(\".prefix-tree-item-title:first\");\n      content.slideToggle(200);//.toggleClass(\"prefix-item-open\");\n      title.addClass(\"prefix-item-open\");\n      // Mount subnet allocator\n      var prefix = self.model.get(\"prefix\");\n      self.showChildView(\"available_subnets\", new Views.SubnetAllocator({\n        prefix: prefix\n      }));\n    },\n\n    closingNode: function(self) {\n      self.debug(\"Closing node\", self.model.get(\"pk\"));\n      self.fsm.step(\"CLOSED_NODE\");\n      // TODO replace this with message passing and parent.mode.(\"hasopenchildren\")\n      self.$el.removeClass(\"prefix-tree-item-open\");\n      self.$el.addClass(\"prefix-tree-item-closed\");\n      self.trigger(\"close_node\");\n      // close the node itself\n      var content = self.$el.find(\".prefix-tree-item-content:first\");\n      var title = self.$el.find(\".prefix-tree-item-title:first\");\n      content.slideToggle(200);//.toggleClass(\"prefix-item-open\");\n      title.removeClass(\"prefix-item-open\");\n    },\n\n    // We're currently trying to fetch some usage stats (see 'views/usage.js').\n    // In this case, the event also sends some data, namely the usage stats\n    // themselves.\n    loadingStats: function(self, statMap) {\n      self.model.set(\"usage\", statMap.usage);\n      self.model.set(\"allocated\", statMap.allocated);\n      self.debug(\"Updated stats of prefix #\", self.model.get(\"pk\"), \"to\", statMap);\n      self.fsm.step(\"DONE_LOADING_STATS\");\n    },\n\n    // We defer drawing children to return a shallow tree faster to the user\n    // TODO: Look into bug where the debug function is registered multiple times\n    // when sorting. Probably not killing all the child nodes or something\n    showingChildren: function(self) {\n      if (!self.model.hasChildren()) {\n        return;\n      }\n      self.debug(\"Rendering children for\", self.model.get(\"pk\"));\n      var children = self.model.children;\n      var model = new Models.Tree();\n      model.set('parent', self.model.get('prefix'));\n      var payload = {\n        model: model,\n        collection: children\n      };\n      self.showChildView(\"children\", new TreeView(payload));\n    },\n\n    // STATE MACHINE END\n\n    toggleOpen: function(evt) {\n      if (_.isObject(evt)) {\n        evt.preventDefault();\n      }\n      this.fsm.step(\"TOGGLE_OPEN\");\n    },\n\n    // Defer drawing usage to speed up rendering\n    onAttach: function() {\n      // Don't get usage for fake nodes, e.g. usually RFC1918. TODO: Maybe\n      // rewrite API to use prefix instead of PK? Seems more sensible.\n      if (this.model.get(\"is_mock_node\", true)) {\n        return;\n      }\n      var self = this;\n      var utilization = this.model.get(\"utilization\");\n      var pk = this.model.get(\"pk\");\n      var net_type = this.model.get(\"net_type\");\n      this.showChildView(\"usage_graph\", new Views.UsageGraph({\n        fsm: self.fsm,\n        model: new Models.Usage({ pk: pk, net_type: net_type }),\n        utilization: utilization\n      }));\n    }\n  });\n\n  // Container for prefix nodes, nested or otherwise\n  const TreeView = Marionette.CollectionView.extend({\n    debug: debug.new(\"views:treeview\"),\n    template: \"#prefix-children\",\n    childView: NodeView,\n    childViewContainer: \".prefix-tree-children\",\n    reorderOnSort: true,\n\n    childViewEvents: {\n      \"open_node\": \"incrementOpenNodes\",\n      \"close_node\": \"decrementOpenNodes\"\n    },\n\n    events: {\n      \"change .sort-by\": \"onSortBy\",\n      \"click .close-all\": \"resetOpenNodes\"\n    },\n\n    // Functions used to determine the sorting order of the tree's children.\n    // In Marionette v4, viewComparator receives child views, not models\n    comparators: {\n      prefix: null,\n      vlan: function(view) {\n        return -1 * view.model.get(\"vlan_number\", 0);\n      },\n      usage: function(view) {\n        return -1 * view.model.get(\"usage\", 0);\n      },\n      allocated: function(view) {\n        return -1 * view.model.get(\"allocated\", 0);\n      }\n    },\n\n    // Provide data for the wrapper template\n    serializeData: function() {\n      return {\n        parent: this.model ? this.model.get('parent') : null,\n        currentComparator: this.model ? this.model.get('currentComparator') : null\n      };\n    },\n\n    initialize: function() {\n      var self = this;\n      // Reset sort to default when we fetch new tree data\n      this.collection.bind(\"sync\", this.resetSort.bind(this, this));\n      // Default state: No nodes are open\n      this.$el.addClass(\"has_no_open_nodes\");\n    },\n\n    // Handle open nodes, i.e. blur all non-open nodes if one or more nodes are open\n    incrementOpenNodes: function(evt) {\n      this.updateOpenNodes(1);\n    },\n    decrementOpenNodes: function(evt) {\n      this.updateOpenNodes(-1);\n    },\n    updateOpenNodes: function(delta) {\n      var currentCount = this.model.get(\"open_nodes\");\n      var newCount = currentCount + delta;\n      this.model.set(\"open_nodes\", newCount);\n      this.debug(\"Current open nodes\", newCount);\n      if (newCount > 0) {\n        this.$el.addClass(\"has_open_nodes\");\n        this.$el.removeClass(\"has_no_open_nodes\");\n      } else {\n        this.$el.addClass(\"has_no_open_nodes\");\n        this.$el.removeClass(\"has_open_nodes\");\n      }\n    },\n    resetOpenNodes: function() {\n      this.debug(\"Resetting number of open nodes to 0\");\n      // close all open nodes via hard reset, just to be safe\n      this.render();\n      // update model\n      this.model.set(\"open_nodes\", 0);\n    },\n\n    // Revert to default order (e.g. order returned by API, where the nodes are\n    // sorted by their prefixes).\n    resetSort: function() {\n      this.model.set(\"currentComparator\", null);\n      this.resetOpenNodes();\n      this.render();\n    },\n\n    // Force the tree to resort itself\n    resort: function(self) {\n      if (_.isUndefined(self.model)) {\n        return;\n      }\n      // all nodes will be closed, so reset counter\n      self.resetOpenNodes();\n      var currentComparator = self.model.get(\"currentComparator\");\n      var comparatorFn = self.comparators[currentComparator] || null;\n      self.viewComparator = comparatorFn;\n      // In Marionette v4, call sort() to apply the new viewComparator\n      self.sort();\n    },\n\n    // Utility function to show any children of the prefix node in a different\n    // order than insertion (e.g. the result returned by the API). This allows\n    // us to prevent a different view without proxying the underlying collection\n    // (for example, it is rather cumbersome to cache the original object to\n    // revert to insertion order if desired by the user).\n    onSortBy: function(evt) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      var value = this.$(evt.target).val();\n      this.debug(\"Ordering children by\", value);\n      this.model.set(\"currentComparator\", value);\n      this.resort(this);\n    }\n\n  });\n\n  exports.RootView = RootView;\n  exports.NodeView = NodeView;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/views/usage.js",
    "content": "define(function(require, exports, module) {\n  const _ = require(\"underscore\");\n  require(\"backbone\");\n  const Marionette = require(\"marionette\");\n  const Radio = require(\"backbone.radio\");\n\n  require(\"src/ipam/models\");\n  const Viz = require(\"src/ipam/viz\");\n\n  const debug = require(\"src/ipam/util\").ipam_debug;\n  Radio.channel(\"global\");\n\n  // Responsible for fetching and display usage/allocation stats. Also\n  // propagates these values to the parent.\n  const SubnetAllocator = Marionette.View.extend({\n    template: \"#prefix-graphs\",\n    debug: debug.new(\"views:usagegraph\"),\n    // mock - for catching dhcp treshold change in parent?\n    triggers: {\n      \"click svg\": \"update:dhcp_treshold\"\n    },\n\n    initialize: function(opts) {\n      this.fsm = opts.fsm;\n      this.debug(\"Mounting usage view.\");\n      // Fetch usage data, then draw\n      this.fsm.step(\"FETCH_STATS\");\n      this.xhr = this.model.fetch();\n      this.xhr.done(this.onReceive.bind(this, this));\n    },\n\n    onBeforeDestroy: function() {\n      // Kill pending fetches upon destroying this component\n      if (!_.isUndefined(this.xhr)) {\n        this.xhr.abort();\n      }\n    },\n\n    // Handle a successful fetch\n    onReceive: function() {\n      this.debug(\"Received usage data\");\n      const usage = this.model.get(\"usage\");\n      const allocated = this.model.get(\"allocated\");\n      // Bubble up captured value to parent model\n      this.fsm.step(\"DONE_FETCHING_STATS\", {\n        usage: usage,\n        allocated: allocated\n      });\n      // don't draw unless we have some usage\n      if (typeof usage === \"undefined\" || typeof allocated === \"undefined\") {\n        return;\n      }\n      // Don't show allocation stats for things that aren't scopes, as this\n      // makes no sense\n      if (this.model.get(\"net_type\") === \"scope\") {\n        const allocationElem = this.$el.find(\".allocation-graph:first\");\n        const allocationTmpl = _.template(\"<span title='Ratio of the scope that has been allocated to subnets'>Allocated: <%= percent %> %</span>\");\n        allocationElem.append(allocationTmpl({percent: (allocated * 100).toFixed(2)}));\n        Viz.usageChart({\n          mountElem: allocationElem.get(0),\n          width: 100,\n          height: 10,\n          data: [{\n            fill: \"white\",\n            name: \"Available\",\n            value: 1.0 - allocated\n          }, {\n            fill: \"lightsteelblue\",\n            name: \"Allocated\",\n            value: allocated\n          }]\n        });\n      }\n\n      const usageElem = this.$el.find(\".usage-graph:first\");\n      const usageTmpl = _.template(\"<span title='Based on current active IP addresses'>Current usage: <%= percent %> %</span>\");\n      usageElem.append(usageTmpl({percent: (usage * 100).toFixed(2)}));\n      Viz.usageChart({\n        mountElem: usageElem.get(0),\n        width: 100,\n        height: 10,\n        data: [{\n          fill: \"white\",\n          name: \"Available\",\n          value: 1.0 - usage\n        }, {\n          fill: \"lightsteelblue\",\n          name: \"Used\",\n          value: usage\n        }]\n      });\n    }\n  });\n\n  module.exports = SubnetAllocator;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipam/viz.js",
    "content": "// Vizualization plugin for displaying simple graphs about subnets (stacked,\n// normalized barcharts with annotations). Accepts raw data from NAV's APIs\n// (/api/).\n\n// Using CommonJS wrapper in RequireJS for niceness. Should be easy to convert\n// if it turns out to not work that well\n\ndefine(function (require, exports, module) {\n  var d3 = require(\"d3\");\n  var _ = require(\"underscore\");\n  var util = require(\"src/ipam/util\");\n  var d3tip = require(\"d3tip\");\n\n  // === Tooltip (+ template)\n  var tip = d3tip()\n        .attr('class', 'd3-tip')\n        .offset([-10, 0])\n        .html(function(d) {\n          var fmt = _.template(\"<strong><%= prefix %></strong>: <%= addr %>\");\n          return fmt({prefix: d.prefix, addr: d.max_addresses});\n        });\n\n\n  // Simple viewbox template\n  var viewbox = _.template(\"0 0 <%= width %> <%= height %>\");\n\n  // TODO: Consider dropping rows to not draw too much at once (for usability\n  // reasons)\n\n  var DEFAULT_OPTS = {\n    // layout settings\n    width: 400,\n    height: 50,\n    margin: { top: 10, bottom: 10, left: 10, right: 10 },\n    padding: 1,\n    // the id of the element to mount the graph on\n    mountElem: null,\n    // data to display\n    data: [{\n      prefix: \"10.0.0.0/8\",\n      parts: [ /* same datastructure*/ ]\n    }],\n    // function to scale the values (in the x dimension)\n    scaleFn: function(n) { return n; }\n  };\n\n  function normalizeData(data, opts) {\n    return _.map(opts.data, function (row) {\n      row.parts = _.map(row.parts, function(d) {\n        if (d.prefix !== \"available\") {\n          d.usage = Math.random();\n        }\n        return d;\n      });\n      row.parts = util.normalize(row.parts, \"max_addresses\", opts.scaleFn);\n      return row;\n    });\n  }\n\n  // Draw a subnet chart.\n  function subnetChart(inOpts) {\n    // parse options\n    var opts = _.extend(DEFAULT_OPTS, inOpts);\n    var mountElem = opts.mountElem;\n    var inData = opts.data;\n    // size options\n    var width = opts.width;\n    var height = opts.height;\n    var margin = opts.margin;\n    var padding = opts.padding;\n\n    if (!(inData.length && inData[0].parts.length)) {\n      console.log(\"No data to display\");\n      return;\n    }\n    // get bounds of mountElem to responsively set width\n    // var bounds = d3.select(mountElem).node().getBoundingClientRect();\n\n    // normalize data\n    var data = normalizeData(inData, opts);\n\n    // === Drawing settings\n    // [width, 0] makes the normalization step easier/prettier\n    var xScale = d3.scale.linear()\n          .range([width, 0]);\n\n    var yScale = d3.scale.ordinal()\n          .rangeRoundBands([0, height], .1);\n\n    // Adapt yScale to data dimensions to ensure consistent spacing\n    yScale.domain(_.map(data, function(d) { return d.prefix; }));\n\n    var colors = d3.scale.category20();\n\n    var svg;\n    if (d3.select(mountElem).select(\"svg\").empty()) {\n      // Mount main SVG element\n      svg = d3.select(mountElem)\n        .append(\"svg\")\n        .attr(\"preserveAspectRatio\", \"xMaxYMin meet\")\n        .attr(\"viewBox\", viewbox({width: width, height: height}))\n        .append(\"g\");\n    } else {\n      console.log(\"Already drawn. Trying to redraw?\");\n      svg = d3.select(mountElem).select(\"svg\").select(\"g\");\n      // remove existing elements. this is stupid, should probably use lifetimes\n      // (.update) etc instead\n      d3.selectAll(\".prefix\").remove();\n    }\n\n    svg.call(tip);\n\n    // Start drawing each prefix\n    var prefixes = svg.selectAll(\".graph-prefixes\")\n          .data(data)\n          .enter()\n          .append(\"g\")\n          .attr(\"class\", \"graph-prefixes\")\n          .attr(\"transform\", function(d) {\n            return util.translate(0, yScale(d.prefix));\n          });\n\n    // draw each bar for each prefix this prefix spans\n    var prefix = prefixes.selectAll(\".graph-prefix\")\n          .data(function (d) { return d.parts; })\n          .enter()\n          .append(\"g\")\n          .attr(\"class\", \"graph-prefix\");\n\n    // Attach tooltip to prefix\n    prefix\n      .on(\"mouseover\", tip.show)\n      .on(\"mouseout\", tip.hide);\n\n    // Draw available addresses (main graph)\n    var bar = prefix.append(\"rect\")\n          .attr(\"height\", yScale.rangeBand())\n          .style(\"stroke\", function(d) {\n            return \"#ccc\";\n          })\n          .style(\"stroke-width\", 0.25)\n          .attr(\"x\", function(d) { return xScale(d.delta1); })\n          .attr(\"width\", function(d) { return xScale(d.delta0) - xScale(d.delta1) - padding; })\n          .style(\"fill\", function(d) {\n            if (d.prefix === \"available\") {\n              // TODO: Use some kind of green highlight color?\n              return \"#000\";\n            }\n            return \"lightsteelblue\";\n          });\n\n    function getMaskHeight(d) {\n      return d.usage * yScale.rangeBand();\n    }\n\n    // Add usage mask. TODO: BTW, there has got to be a better way of doing\n    // this. Maybe we should be able to set the rect to grow from the bottom of\n    // the <g> instead of the top? Investigate...\n    prefix.append(\"rect\")\n      .attr(\"height\", getMaskHeight)\n      .attr(\"transform\", function(d) {\n        return util.translate(0, yScale.rangeBand() - getMaskHeight(d));\n      })\n      .attr(\"x\", function(d) { return xScale(d.delta1); })\n      .attr(\"width\", function(d) { return xScale(d.delta0) - xScale(d.delta1) - padding; })\n      .style(\"fill\", \"steelblue\")\n      .on(\"mouseover\", function(d) { console.log(d); });\n  }\n\n  // Simple percent vertical bar chart.\n  function usageChart(inOpts) {\n    // parse options\n    var opts = _.extend(DEFAULT_OPTS, inOpts);\n    var mountElem = opts.mountElem;\n    var inData = opts.data;\n    // size options\n    var width = opts.width;\n    var height = opts.height;\n    var margin = opts.margin;\n    var padding = opts.padding;\n\n    // Normalize data based on value field\n    var data = util.normalize(inData, \"value\", opts.scaleFn);\n\n    // === Drawing settings\n    var xScale = d3.scale.linear().range([width, 0]);\n    var yScale = d3.scale.ordinal().rangeRoundBands([0, height], .1);\n    var colors = d3.scale.category20();\n\n    // === Drawing phase\n    var svg = d3.select(mountElem)\n          .append(\"svg\")\n          .attr(\"preserveAspectRatio\", \"xMinYMax slice\")\n          .attr(\"viewBox\", viewbox({width: width, height: height}))\n          .append(\"g\");\n\n    var bars = svg.selectAll(\".usage-graph-bar\")\n          .data(data)\n          .enter()\n          .append(\"g\")\n          .attr(\"class\", \"usage-graph-bar\");\n\n    bars.append(\"rect\")\n      .attr(\"x\", function(d) { return xScale(d.delta1); })\n      .style(\"fill\", function(d) {\n        if (typeof d.fill === \"undefined\") {\n          return colors(d.name);\n        }\n        return d.fill;\n      })\n      .attr(\"height\", yScale.rangeBand())\n      .attr(\"width\", function(d) { return xScale(d.delta0) - xScale(d.delta1); });\n\n    // TODO: add tooltip\n  }\n\n\n\n\n  // SUBnet matrix impl\n\n  var IP_BITS = 32;\n  var MATRIX_BITS = 8;\n  function rowSpan(row) {\n    return Math.pow(2, IP_BITS - MATRIX_BITS - row.prefixlen);\n  }\n\n\n  function subnetMatrix(inOpts) {\n    var opts = _.extend(DEFAULT_OPTS, inOpts);\n    var mountElem = opts.mountElem;\n    var inData = opts.data;\n    // size options\n    var width = opts.width;\n    var height = opts.height;\n    var margin = opts.margin;\n    var padding = opts.padding;\n    var bitsInMatrix = 8;\n\n    // todo: calculate height of each element (rowspan), use this to create offset.\n    // width will be proportional to prefixlen (row width = 32 bits for IPv4)\n\n    // Normalize data and calculate steps for height\n    var data = util.normalize(inData, function(row) {\n        return 32 - row.prefixlen;\n    }, opts.scaleFn);\n    console.log(data);\n\n    // Width is based on host octet (assumed  to be last octet)\n    var xScale = d3.scale.linear().range([width, 0]).domain([1, 32]);\n    var xOffset = d3.scale.linear().range([width, 0]).domain([255, 0]);\n\n    // Height is based on number of potential subnets (see rowHeight)\n    var yScale = d3.scale.linear().range([0, height]).domain([0, 1]);\n\n    var colors = d3.scale.category20();\n    colors.domain(_.map(data, function(d){ return d.prefix; }));\n\n\n    // === Drawing phase\n    var svg = d3.select(mountElem)\n          .append(\"svg\")\n          //.attr(\"preserveAspectRatio\", \"xMinYMax slice\")\n          .attr(\"viewBox\", viewbox({width: width, height: height}))\n          .append(\"g\");\n\n    var subnets = svg.selectAll(\".subnets\")\n          .data(data)\n          .enter()\n          .append(\"g\")\n          .attr(\"class\", \"subnets\");\n\n    subnets.append(\"rect\")\n      .attr(\"x\", function (d) {\n        return xOffset(d.last_octet);\n      }).attr(\"y\", function (d) {\n        return yScale(d.delta0);\n      })\n      .style(\"fill\", function(d) {\n        return colors(d.prefix);\n      })\n      .attr(\"height\", function (d) { return yScale(d.delta1 - d.delta0); } )\n      .attr(\"width\", function(d) { return xScale(d.prefixlen); });\n\n    subnets.append(\"text\")\n      .attr(\"x\", function (d) {\n        return xOffset(d.last_octet);\n      }).attr(\"y\", function (d) {\n        var middle = Math.abs((d.delta1 - d.delta0) / 2.0);\n        return yScale(d.delta0 + middle);\n      })\n      .text(function(d) {\n        return d.prefix + \": \" + d.description;\n      });\n  }\n\n  module.exports = {\n    \"subnetChart\": subnetChart,\n    \"usageChart\": usageChart,\n    \"subnetMatrix\": subnetMatrix\n  };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/ipdevinfo.js",
    "content": "require([\n    \"plugins/table_utils\",\n    \"plugins/tab_navigation\",\n    \"plugins/jquery_ui_helpers\",\n    \"plugins/d3_sparkline\",\n    \"plugins/graphfetcher_controller\",\n    \"jquery\",\n    \"jquery-ui\",\n    \"plugins/rickshaw_graph\"\n], function (TableUtil, TabNavigation, JUIHelpers, d3Sparkline) {\n\n    var mainTabsSelector = '#ipdevinfotabs';\n    var metricTabsSelector = \"#metrictabs\";\n    var moduleTabsSelector = '#moduletabs';\n    var activityRecheckSelector = '#switchport_activity_recheck';\n\n    $(document).ready(function () {\n        // Plug row toggler on datasources\n        new TableUtil($('#hostinfo')).addRowToggleTrigger();\n\n\n        if ($(mainTabsSelector).length !== 0) {\n            addModuleTabs();\n            addMetricTabs();\n            addMainTabs();\n\n            /* Add tab navigating here to avoid race conditions */\n            TabNavigation.add(mainTabsSelector);\n            TabNavigation.add(moduleTabsSelector, mainTabsSelector);\n            TabNavigation.add(metricTabsSelector, mainTabsSelector);\n        }\n\n        addSparkLinesToJobs();\n        loadSensorValues();\n    });\n\n    const ipdevpollJobsContainer = document.querySelector(\"#ipdevpoll-jobs\");\n    if (ipdevpollJobsContainer) {\n        ipdevpollJobsContainer.addEventListener(\"htmx:afterSwap\", function() {\n            addSparkLinesToJobs();\n        });\n    }\n\n    function loadSensorValues() {\n        var metricMap = {};\n        $('.sensor-value').each(function(i, element) {\n            metricMap[$(element).data('metric')] = element;\n        });\n        if (_.isEmpty(metricMap)) { return; }\n        getSensorData(metricMap, function(data, metricMap) {\n            $.each(data, function(i, metricData) {\n                var target = metricData.target;\n                var datapoints = metricData.datapoints;\n                for (var i = datapoints.length - 1; i >= 0; i--) {\n                    var value = datapoints[i][0];\n                    if (value !== null) {\n                        $(metricMap[target]).html(value);\n                        break;\n                    }\n                }\n            });\n        });\n    }\n\n    function commonPrefix(array){\n        var arr = array.concat().sort(),\n            a1 = arr[0], a2 = arr[arr.length-1], len = a1.length, i = 0;\n        while (i<len && a1.charAt(i) === a2.charAt(i)) i++;\n        return a1.substring(0, i);\n    }\n\n    function getSensorData(metricMap, updateFunc) {\n        var url = NAV.graphiteRenderUrl;\n        // under the assumption that all sensors on a single device have a\n        // common parent node in the metric tree:\n        var target = commonPrefix(_.keys(metricMap)) + '*';\n        var data = $.param({\n            target: target,\n            format: 'json',\n            from: '-5min',\n            until: 'now'\n        }, true);\n        var request = $.post(url, data);\n\n        request.done(function (data) {\n            updateFunc(data, metricMap);\n        });\n\n        request.fail(function () {\n            console.log(\"Error on data request\");\n        });\n\n    }\n\n    function addModuleTabs() {\n        var tabconfig = {\n            beforeLoad: JUIHelpers.cacheRequest,\n            load: addActivityButtonListener\n        };\n        $(moduleTabsSelector).tabs(tabconfig);\n\n        /* Toggle port legend */\n        $('#ports').on('click', '.portlegendToggler', function () {\n            $(this).next().toggle();\n        });\n    }\n\n    function addMainTabs() {\n        var tabs = $(mainTabsSelector).tabs({\n            beforeLoad: JUIHelpers.cacheRequest\n        });\n        markErrorTabs(tabs);\n        tabs.show();\n        addFloatingGlobalControls();\n    }\n\n    function addMetricTabs() {\n        var tabs = $(metricTabsSelector).tabs({\n            beforeLoad: JUIHelpers.cacheRequest\n        });\n        tabs.show();\n    }\n\n    function addFloatingGlobalControls() {\n        /* Floats the global controls for all graphs on the Port Metrics tab */\n        var toBeFixed = $('.toBeFixed'),\n            wrapper = toBeFixed.parent('.toBeFixed-wrapper'),\n            toBeFixedClone;\n        $(window).scroll(function () {\n            var currentY = $(window).scrollTop(),\n                startPosY = wrapper.offset().top;\n            /* This clone is needed to prevent the page from jumping when 'position: fixed' is set */\n            toBeFixedClone = toBeFixedClone ? toBeFixedClone : toBeFixed.clone().hide().appendTo(wrapper);\n\n            if (currentY > startPosY && !toBeFixed.hasClass('floatme')) {\n                toBeFixed.addClass('floatme');\n                toBeFixedClone.show();\n            } else if (currentY <= startPosY && toBeFixed.hasClass('floatme')) {\n                toBeFixedClone.hide();\n                toBeFixed.removeClass('floatme');\n            }\n        });\n    }\n\n    /*\n     * Set error-class on tabs marked as error by template\n     */\n    function markErrorTabs(tabs) {\n        $('li[data-mark-as-error=\"True\"]', tabs).removeClass('ui-state-default').addClass('ui-state-error');\n    }\n\n    /*\n     * Specific for module tabs\n     * Add listener to button to recheck switch port activity\n     */\n    function addActivityButtonListener(event, element) {\n        if (element.tab.attr('id') === 'swportactivetab') {\n            $(activityRecheckSelector).find('input[type=submit]').on('click', function (event) {\n                event.preventDefault();\n                addIntervalToRequest();\n                $(moduleTabsSelector).tabs('load', element.tab.index());\n            });\n        }\n    }\n\n    function addIntervalToRequest() {\n        $(moduleTabsSelector).tabs({\n            beforeLoad: function(event, ui) {\n                ui.ajaxSettings.url += '?interval=' + getActivityInterval();\n            }\n        });\n    }\n\n    function getActivityInterval() {\n        return $(activityRecheckSelector).find('input[id=id_interval]').val();\n    }\n\n    function addSparkLinesToJobs() {\n        var formatter = function(data) {\n            /* The x value is seconds since epoch in local timezone. As\n               toLocaleString converts based on UTC values, we cheat and say\n             that the timeZone is UTC while keeping the formatting local */\n            var date = new Date(data.x * 1000).toLocaleString({}, {timeZone: 'UTC'});\n            return '<div class=\"jqsfield\"><span style=\"color: ' + data.color + '\">&#9679</span> ' + data.y + '<br/> ' + date + '</div>';\n        };\n\n        var options = {\n            width: '100%',\n            height: 20,\n            tooltipFormatter: formatter\n        };\n\n        $('#ipdevpoll-jobs .sparkline').each(function() {\n            var $element = $(this);\n            d3Sparkline.line($element, $element.data('values'), options);\n        });\n\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/libs/tablesort_extensions.js",
    "content": "/**\n * Custom tablesort extensions for NAV\n * Provides IP address sorting and datetime sorting\n */\ndefine(['tablesort'], function(Tablesort) {\n\n    /**\n     * Extract IPv4 address from a string that may contain other text\n     */\n    function extractIP(str) {\n        const match = str.match(/(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})/);\n        return match ? match[1] : str;\n    }\n\n    /**\n     * Pad IP octets to 3 digits for correct string comparison\n     * e.g., \"192.168.1.1\" becomes \"192168001001\"\n     */\n    function padOctets(ip) {\n        const extracted = extractIP(ip);\n        return extracted.split('.').map(function(octet) {\n            return ('00' + octet).slice(-3);\n        }).join('');\n    }\n\n    /**\n     * Get sortable value for datetime, handling special values\n     */\n    function getDatetimeValue(val) {\n        const trimmed = val.trim();\n        if (trimmed === 'last') return Number.NEGATIVE_INFINITY;\n        if (trimmed === 'first' || trimmed === 'Still active') return Number.POSITIVE_INFINITY;\n        return new Date(trimmed).getTime();\n    }\n\n    /**\n     * Numeric sorting extension\n     * Extracts numbers from strings like \">6\", \"<10\", \">=28\", \"5.5\", etc.\n     */\n    Tablesort.extend('number', function(item) {\n        // Match strings containing numbers (with optional operators/units)\n        return /[−-]?\\d+\\.?\\d*/.test(item);\n    }, function(a, b) {\n        // Extract first number from each string (handle minus sign variants)\n        const aMatch = a.replace('−', '-').match(/-?\\d+\\.?\\d*/);\n        const bMatch = b.replace('−', '-').match(/-?\\d+\\.?\\d*/);\n        const aNum = aMatch ? Number.parseFloat(aMatch[0]) : 0;\n        const bNum = bMatch ? Number.parseFloat(bMatch[0]) : 0;\n        return bNum - aNum;\n    });\n\n    /**\n     * IP Address sorting extension\n     * Pads each octet to 3 digits for correct string comparison\n     * e.g., \"192.168.1.1\" becomes \"192168001001\"\n     */\n    Tablesort.extend('ip-address', function(item) {\n        // Match strings containing IPv4 addresses\n        return /\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/.test(item);\n    }, function(a, b) {\n        const aPadded = padOctets(a);\n        const bPadded = padOctets(b);\n        return bPadded.localeCompare(aPadded);\n    });\n\n    /**\n     * ISO datetime sorting extension\n     * Handles special values \"first\", \"last\", and \"Still active\" for sorting\n     */\n    Tablesort.extend('iso-datetime', function(item) {\n        // Match ISO datetime or special values\n        const trimmed = item.trim();\n        return /^\\d{4}-\\d{2}-\\d{2}/.test(trimmed) || trimmed === 'first' || trimmed === 'last' || trimmed === 'Still active';\n    }, function(a, b) {\n        const aVal = getDatetimeValue(a);\n        const bVal = getDatetimeValue(b);\n        // Handle equal values to avoid NaN from infinity - infinity\n        if (aVal === bVal) return 0;\n        return bVal - aVal;\n    });\n\n    /**\n     * Helper function to initialize tablesort with jquery-tablesorter-like config\n     *\n     * @param {HTMLElement} table - The table element to sort\n     * @param {Object} options - Configuration options\n     * @param {Object} options.headers - Column configuration (0-indexed)\n     *   - { sorter: false } disables sorting\n     *   - { sorter: 'ip-address' } sets sort method\n     * @param {Object} options.textExtraction - Custom text extraction functions\n     * @param {boolean} options.descending - Sort descending by default\n     * @param {Array} options.sortList - Initial sort [[columnIndex, direction]]\n     *   where direction is 0 for ascending, 1 for descending\n     */\n    function initTableSort(table, options) {\n        options = options || {};\n        const headers = table.querySelectorAll('thead th');\n\n        // Check if a column has all identical values (sorting would be meaningless)\n        function hasIdenticalValues(colIndex) {\n            const cells = table.querySelectorAll(`tbody tr td:nth-child(${colIndex + 1})`);\n            const values = new Set([...cells].map(cell => {\n                // Use data-sort attribute if present, otherwise textContent\n                return cell.dataset.sort ?? cell.textContent.trim();\n            }));\n            return values.size <= 1;\n        }\n\n        // Apply header configurations\n        // Set 'alpha' as default for all columns to prevent auto-detection issues\n        // (empty columns cause [].every() to return true, selecting wrong sorter)\n        headers.forEach(function(header, index) {\n            // Disable sorting for columns with all identical values\n            if (hasIdenticalValues(index)) {\n                header.dataset.sortMethod = 'none';\n                return;\n            }\n\n            const config = options.headers?.[index];\n            if (config) {\n                if (config.sorter === false) {\n                    header.dataset.sortMethod = 'none';\n                } else if (config.sorter) {\n                    header.dataset.sortMethod = config.sorter;\n                }\n            } else if (!header.dataset.sortMethod) {\n                header.dataset.sortMethod = 'alpha';\n            }\n        });\n\n        // Apply text extraction by setting data-sort attributes on cells\n        if (options.textExtraction) {\n            const rows = table.querySelectorAll('tbody tr');\n            rows.forEach(function(row) {\n                const cells = row.querySelectorAll('td');\n                Object.keys(options.textExtraction).forEach(function(index) {\n                    const extractFn = options.textExtraction[index];\n                    const cell = cells[Number.parseInt(index, 10)];\n                    if (cell && typeof extractFn === 'function') {\n                        const sortValue = extractFn(cell);\n                        cell.dataset.sort = sortValue;\n                    }\n                });\n            });\n        }\n\n        // Handle initial sort via sortList option\n        // Format: [[columnIndex, direction]] where direction 0=asc, 1=desc\n        if (options.sortList && options.sortList.length > 0) {\n            const sortCol = options.sortList[0][0];\n            const sortDir = options.sortList[0][1];\n            const sortHeader = headers[sortCol];\n            if (sortHeader) {\n                sortHeader.dataset.sortDefault = '';\n                if (sortDir === 1) {\n                    sortHeader.dataset.sortReverse = '';\n                }\n            }\n        }\n\n        // Initialize tablesort\n        const sortOptions = {};\n        if (options.descending) {\n            sortOptions.descending = true;\n        }\n\n        return new Tablesort(table, sortOptions);\n    }\n\n    return {\n        Tablesort: Tablesort,\n        init: initTableSort\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/machinetracker.js",
    "content": "require([\"src/libs/tablesort_extensions\", \"jquery\"], function (tablesort) {\n\n    var ns = \"nav.machinetracker\",\n        elementIds = ['id_netbios', 'id_dns'],\n        searchFormId = 'search_form';\n\n    /**\n     * Enable setting and getting of local search settings (checkboxes only)\n     * using localstorage. Do not do this when following links, only on clean\n     * url\n     */\n    function addLocalStateSettings() {\n        var form = $('#' + searchFormId);\n        if (!window.location.search && window.localStorage && form.length) {\n            addSettingsListener(form);\n            setElementState();\n        }\n    }\n\n    /**\n     * Add listener for changes in selected elements. Store changes in\n     * localstorage.\n     */\n    function addSettingsListener(form) {\n        form.on('change', function(event) {\n            var element = event.target;\n            if (elementIds.indexOf(element.id) >= 0) {\n                localStorage.setItem(getKey(element), element.checked);\n            }\n        });\n    }\n\n    /**\n     * Set element checked state based on localstorage\n     */\n    function setElementState() {\n        for(var i = 0, l = elementIds.length; i < l; i++) {\n            var element = document.getElementById(elementIds[i]);\n            if (element) {\n                element.checked = getLocalSetting(element);\n            }\n        }\n    }\n\n    /**\n     * Returns the value of the local setting\n     * @param {object} element A DOM element with an ID attribute\n     * @returns {boolean}\n     */\n    function getLocalSetting(element) {\n        return localStorage.getItem(getKey(element)) === 'true';\n    }\n\n    /**\n     * Create the key used for storing the state of this element in\n     * localstorage\n     * @param {object} element A DOM element with an ID attribute\n     * @returns {string}\n     */\n    function getKey(element) {\n        return [ns, element.id].join('.');\n    }\n\n\n    $(document).ready(function () {\n\n        // Data parameters for tablesorter\n        var headerData = {},\n            textExtractionData = {},\n            trackerTable = document.getElementById('tracker-table');\n\n        if (!trackerTable) {\n            addLocalStateSettings();\n            return;\n        }\n\n        const headings = trackerTable.querySelectorAll('thead tr th');\n\n        // Configure sorters based on column headers\n        headings.forEach(function(cell, index) {\n            const header = cell.innerHTML.trim();\n\n            if (header === \"\") {\n                headerData[index] = { sorter: false };\n            } else if (header === \"IP\") {\n                textExtractionData[index] = function(node) {\n                    const span = node.querySelector('span');\n                    return span ? span.textContent : node.textContent;\n                };\n                headerData[index] = { sorter: 'ip-address' };\n            } else if (header === \"Start time\" || header === \"End time\") {\n                headerData[index] = { sorter: 'iso-datetime' };\n            }\n        });\n\n        tablesort.init(trackerTable, {\n            headers: headerData,\n            textExtraction: textExtractionData\n        });\n\n        // If the form is reloaded, display correct data\n        var $days = $('#id_days'), $hide = $('#id_hide');\n        if ($days.val() === \"-1\") {\n            $hide.attr('checked', 'true');\n            $days.attr('disabled', 'disabled');\n            $days.val(\"7\");\n        }\n\n        addLocalStateSettings();\n\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/main.js",
    "content": "define('jquery', [], function() {\n    return jQuery;\n});\n\n// Global CSRF token setup for all jQuery AJAX requests.\n// This approach is used because we have 17+ locations in the codebase with\n// jQuery $.post() calls that lack CSRF tokens, which would break when CSRF\n// protection is enabled. A global handler provides a safety net for both\n// existing code and future additions.\n// See: https://docs.djangoproject.com/en/5.0/howto/csrf/\nrequire(['plugins/csrf-utils'], function(CsrfUtils) {\n    function csrfSafeMethod(method) {\n        return /^(GET|HEAD|OPTIONS|TRACE)$/i.test(method);\n    }\n    jQuery.ajaxSetup({\n        beforeSend: function(xhr, settings) {\n            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n                const token = CsrfUtils.getCsrfToken();\n                if (token) {\n                    xhr.setRequestHeader('X-CSRFToken', token);\n                }\n            }\n        }\n    });\n});\n\nrequire([\n    'plugins/accordion_maker',\n    'select2',\n    'plugins/megadrop',\n    'plugins/alert',\n    'plugins/popover',\n    'plugins/tooltip',\n    'underscore'\n], function (accordionMaker) {\n    /** Enable slash to navigate to search, whereas escape removes focus from search */\n    function addSearchFocusHandlers() {\n        var $searchInput = $('#query');\n\n        // Listen to keypress for slash, go to search if pressed.\n        $(document).keypress(function (event) {\n            if (event.keyCode === 47) {\n                event.preventDefault();\n                $searchInput.focus();\n            }\n        });\n\n        // Remove focus when escape is pressed\n        $searchInput.keyup(function (event) {\n            if (event.keyCode === 27) {\n                $searchInput.blur();\n            }\n        });\n\n    }\n\n    function refreshSession() {\n        $.post(NAV.urls.refresh_session);\n    }\n\n\n    /** Should we put polyfills here maybe? Lets try */\n    $.fn.serializeObject = function()\n    {\n        var o = {};\n        var a = this.serializeArray();\n        $.each(a, function() {\n            if (o[this.name] !== undefined) {\n                if (!o[this.name].push) {\n                    o[this.name] = [o[this.name]];\n                }\n                o[this.name].push(this.value || '');\n            } else {\n                o[this.name] = this.value || '';\n            }\n        });\n        return o;\n    };\n\n    function addTopbarHandlers() {\n        // Toggle topbar on small screens\n        $('.top-bar').on('click', '.toggle-topbar', function (e) {\n            e.preventDefault();\n            const $this = $(this);\n            const $topbar = $this.closest('.top-bar');\n            $topbar.toggleClass('expanded');\n        });\n\n        // Handle dropdown visibility using Foundation's hover class\n        // This is necessary because the elements are considered \"invisible\" without the hover class\n        // and thus not processable by htmx\n        $('.has-dropdown').on('click', function(e) {\n            const $this = $(this);\n\n            if ($this.hasClass('hover')) {\n                $this.removeClass('hover');\n            } else {\n                $('.has-dropdown').removeClass('hover');\n                $this.addClass('hover');\n            }\n\n            e.stopPropagation();\n        });\n\n        // Close dropdowns when clicking outside\n        $(document).on('click', function(e) {\n            if (!$(e.target).closest('.has-dropdown').length) {\n                $('.has-dropdown').removeClass('hover');\n            }\n        });\n\n        // Cleanup topbar if we resize to large screen\n        $(window).on('resize', _.throttle(function () {\n            if (window.matchMedia('(min-width: 40em)').matches) {\n                $('.top-bar').removeClass('expanded');\n            }\n        }, 200));\n    }\n\n    $(function () {\n        /* Add redirect to login on AJAX-requests if session has timed out */\n        $(document).ajaxError(function (event, request) {\n            if (request.status === 401) {\n                window.location = '/index/login/?origin=' + encodeURIComponent(window.location.href);\n            }\n        });\n\n        accordionMaker($('.tabs')); // Apply accordionmaker for tabs\n        $('select.select2').select2();\n\n        // addSearchFocusHandlers();  Fix this to not grab every / before activating\n        addTopbarHandlers();\n\n        // Refresh session on page load and then periodically\n        var ten_minutes = 10 * 60 * 1000;\n        refreshSession();\n        setInterval(refreshSession, ten_minutes);\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/maintenance.js",
    "content": "require(['plugins/hover_highlight', \"flatpickr\"], function (HoverHighlight, flatpickr) {\n    var calendar = $('.calendar');\n\n    if (calendar.length) {\n        new HoverHighlight(calendar);\n    }\n\n    $(document).ready(function(){\n        $('#id_no_end_time').change(function(){\n            toggleEndTime(this);\n        });\n\n        flatpickr('.datetimepicker', {\n            enableTime: true,\n            dateFormat: \"Y-m-d H:i\",\n            time_24hr: true,\n            allowInput: true\n        })\n    });\n\n    function toggleEndTime(checkBox){\n        var endTime = $('#id_end_time');\n        if ($(checkBox).prop('checked')){\n            $(endTime).attr('disabled', 'disabled');\n        } else {\n            $(endTime).removeAttr('disabled');\n        }\n    }\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/messages.js",
    "content": "require([\"flatpickr\"], function (flatpickr) {\n    $(function () {\n        flatpickr('.datetimepicker', {\n            enableTime: true,\n            dateFormat: \"Y-m-d H:i\",\n            time_24hr: true,\n            allowInput: true\n        })\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/navigation_preferences.js",
    "content": "require([], function () {\n    $(function () {\n        // Find all delete buttons in the link form\n        // Slice so we get the last two empty elements\n        // Clear the content so the checkboxes are removed\n        var length = $('.link-delete').length;\n        $('.link-delete').slice(length-2,length).empty()      \n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/neighbors.js",
    "content": "/* Javascript forced and smeared on the Unrecognized Neighbors page. No tests, no fuzz :p */\nrequire(['datatables', 'dt_config'], function() {\n\n    console.log('Neighbors script loaded');\n\n    /* Global variables */\n    var $table = $('#unrecognized-neighbors-table'),\n        $tableBody = $table.find('tbody'),\n        dataTable,\n        $feedback = $('#ignored-feedback'),\n\n        // Elements regarding selection\n        $selectAll = $('#select_all'),\n        $ignoreSelected = $('#ignore-selected'),\n        $unignoreSelected = $('#unignore-selected'),\n\n        // Element for toggling display of ignored neighbors\n        toggleIgnored = document.getElementById('toggle-ignored'),\n\n        ignoredSinceIndex = 6,    // The index of the 'Ignored since' column\n\n        setIgnoredUrl = NAV.urls.neighbors.neighbors_set_state;\n\n\n    /** Apply all listeners */\n    function applyListeners() {\n        addToggleIgnoredHandler(dataTable);\n        addToggleAllCheckBoxesListener();\n\n        $ignoreSelected.click(function() {\n            setIgnoredState('ignore');\n        });\n\n        $unignoreSelected.click(function() {\n            setIgnoredState('unignore');\n        });\n    }\n\n\n    /** Add handler for what happens when the toggleIgnored is clicked */\n    function addToggleIgnoredHandler() {\n        $('#toggle-ignored').click(function() {\n            setIgnoredSinceVisibility();\n            dataTable.draw(); // Redraw table\n        });\n    }\n\n\n    /** Set visibility on the 'ignored since' column based on toggleIgnored state */\n    function setIgnoredSinceVisibility() {\n        dataTable.column(ignoredSinceIndex).visible(toggleIgnored.checked);\n    }\n\n\n    /** Listen to clicks on checkbox for toggling all checkboxes in column */\n    function addToggleAllCheckBoxesListener() {\n        $selectAll.on('change', function() {\n            var checkboxes = $tableBody.find('input[type=checkbox]');\n            if (this.checked) {\n                checkboxes.prop('checked', true);\n            } else {\n                checkboxes.prop('checked', false);\n            }\n        });\n    }\n\n    /** Returns values of all checkboxes as a list */\n    function getCheckboxIds(checkboxes) {\n        return checkboxes.map(function() {\n            return this.value;\n        }).get();\n    }\n\n    function setIgnoredState(action) {\n        var checkboxes = $tableBody.find(':checked');\n\n        if (checkboxes.length <= 0) {\n            return;\n        }\n\n        var neighborids = getCheckboxIds(checkboxes),\n            $rows = checkboxes.closest('tr');\n\n        var request = $.post(setIgnoredUrl, {\n            neighborids: neighborids,\n            action: action,\n            csrfmiddlewaretoken: $('[name=csrfmiddlewaretoken]').val()\n        });\n\n        $feedback.hide();\n        request.done(function(response) {\n            console.log('Request was successful');\n\n            // Reset all checkboxes\n            checkboxes.prop('checked', false);\n            $selectAll.prop('checked', false);\n\n            // Update datasets with new values. Set value of ignored since column\n            if (action === 'ignore') {\n                feedback('Neighbors ignored');\n                $rows.each(function() {\n                    this.dataset.ignored = 'true';\n                    dataTable.cell(this, ignoredSinceIndex).data(response);\n                });\n            } else {\n                feedback('Neighbors unignored');\n                $rows.each(function() {\n                    this.dataset.ignored = 'false';\n                    dataTable.cell(this, ignoredSinceIndex).data('');\n                });\n            }\n            dataTable.draw();\n        });\n\n        request.fail(function() {\n            feedbackFail('Request failed');\n            console.log('Request failed');\n        });\n\n    }\n\n\n    function feedbackSuccess(text) {\n        feedback(text, 'success');\n    }\n\n    function feedbackFail(text) {\n        feedback(text, 'alert');\n    }\n\n    function feedback(text, type) {\n        type = typeof type === 'undefined' ? 'success' : 'alert';\n        $feedback.removeClass('success alert').addClass(type).html(text);\n        $feedback.show();\n    }\n\n\n    /** Apply datatables plugin to table */\n    function applyDatatable() {\n        // Register new filtering function based on neighbor state\n        $.fn.DataTable.ext.search.push(filterNeighborState);\n\n        return $table.DataTable({\n            \"bFilter\": true,      // Explicitly set filtering\n            \"bSort\": true,        // Explicitly set sorting\n            \"bPaginate\": true,   // Do show pagination\n            \"bAutoWidth\": false,  // Do not calculate row width\n            \"oLanguage\": {\n                \"sInfo\": \"_TOTAL_ neighbors\",  // Format for number of entries visible\n                \"sSearch\": \"Filter:\"\n            },\n            \"sDom\": \"<flp>t<i>\",   // display order of metainfo (lengthchange, info, pagination)\n            \"sPaginationType\": \"full_numbers\", // Display page numbers in pagination\n            \"aoColumnDefs\": [\n                { 'bSortable': false, 'aTargets': [ 0 ] }  // Do not sort on first column\n            ],\n            \"fnDrawCallback\": function (oSettings) {\n                /* Run this on redraw of table */\n                $('.ellipsis').addClass('button tiny secondary disabled paginate_button');\n            },\n            \"initComplete\": function () {\n                /* Add custom class to the wrapper element */\n                $(this.api().table().container()).addClass('dataTables_background_white');\n            }\n        });\n    }\n\n\n    /**\n     * Filter rows based on neighbor state. This function is called\n     * for every filtering event\n     */\n    function filterNeighborState(oSettings, aData, iDataIndex) {\n        var row = oSettings.aoData[iDataIndex].nTr;\n\n        if (toggleIgnored.checked) {\n            return true;        // Show everything\n        } else {\n            return row.dataset.ignored === 'false';\n        }\n    }\n\n\n    /** If a query parameter named filter is found, use that to run an initial filter */\n    function filterQueryParameters(dataTable) {\n        var params = window.location.search.substr(1).split('=');\n        if (params[0] === 'filter') {\n            dataTable.search(params[1]).draw();\n        }\n    }\n\n    /** On page ready the following happens */\n    $(function() {\n        console.log('Neighbors ready');\n\n        dataTable = applyDatatable();\n        setIgnoredSinceVisibility();\n        applyListeners();\n\n        filterQueryParameters(dataTable);\n\n        $table.show();\n        console.log('Neighbors done initializing');\n    });\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/collections.js",
    "content": "define([\n    'netmap/models',\n    'backbone'\n], function (Models) {\n\n    /**\n     * Collections for Netmap\n     */\n\n    var NodeCollection = Backbone.Collection.extend({\n\n        model: Models.Node,\n\n        populate: function (nodes) {\n\n            var models = _.map(nodes, function (node) {\n                return new Models.Node (node);\n            });\n\n            this.reset(models);\n            return this;\n        },\n\n        getGraphObjects: function () {\n            return this.map(function (node) {\n                return node.attributes;\n            });\n        }\n    });\n\n    var LinkCollection = Backbone.Collection.extend({\n\n        model: Models.Link,\n\n        populate: function (links) {\n\n            var models = _.map(links, function (link) {\n                return new Models.Link (link);\n            });\n\n            this.reset(models);\n            return this;\n        },\n\n        getGraphObjects: function () {\n            return this.map(function (link) {\n                return link.attributes;\n            });\n        }\n    });\n\n    var VlanCollection = Backbone.Collection.extend({\n\n        model: Models.Vlan,\n        comparator: function (a, b) { return a.vlan - b.vlan; },\n\n        populate: function (vlans) {\n\n            var models = _.map(vlans, function (vlan) {\n                return new Models.Vlan (vlan);\n            });\n\n            this.reset(models);\n            return this;\n        },\n\n        getGraphObjects: function () {\n            return this.map(function (vlan) {\n                return vlan.attributes;\n            });\n        }\n    });\n\n    var NetmapViewCollection = Backbone.Collection.extend({\n\n        model: Models.NetmapView,\n        url: 'views/',\n\n        parse: function (data) { console.log('NetmapView collection parse');\n\n            console.log(data);\n\n            return data;\n        }\n    });\n\n    return {\n        NodeCollection: NodeCollection,\n        LinkCollection: LinkCollection,\n        VlanCollection: VlanCollection,\n        NetmapViewCollection: NetmapViewCollection\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/control_view.js",
    "content": "define([\n    'netmap/collections',\n    'netmap/models',\n    'netmap/graph',\n    'plugins/csrf-utils',\n    'backbone',\n    'libs/backbone-eventbroker',\n    'jquery-ui'\n], function (Collections, Models, Graph, CsrfUtils) {\n\n    const csrfToken = CsrfUtils.getCsrfToken();\n\n    /**\n     * This view is responsible for responding to DOM events\n     * and dispatching the necessary event on to th GraphView.\n     */\n    var ControlView = Backbone.View.extend({\n\n        el: '#navigation-view',\n        interests: {\n            // For when we have saved the view and updated all its cached nodes,\n            // e.g. positions and other view-specific settings\n            'netmap:saveSuccessful': 'saveSuccessful'\n        },\n        events: {\n            'submit #graph-search-form': 'searchGraph',\n            'reset #graph-search-form': 'resetSearch',\n            'click #netmap-view-create': 'displayCreateView',\n            'submit #filter-room-location-form': 'filterByRoomOrLocation',\n            'change #graph-layer-select': 'changeTopologyLayer',\n            'change #graph-view-select': 'changeNetmapView',\n            'click .filter-category': 'updateCategoryFilter',\n            'click .filter-string-remove': 'removeRoomOrLocationFilter',\n            'click #filter-orphan-nodes': 'updateOrphanNodesFilter',\n            'click #netmap-view-save': 'saveCurrentView',\n            'click #netmap-view-edit': 'displayEditView',\n            'click #netmap-view-delete': 'deleteCurrentView',\n            'click #netmap-view-default': 'setCurrentViewDefault',\n            'click #netmap-view-panel-toggle': 'toggleNetmapViewPanel',\n            'click #netmap-view-zoom-to-extent': 'fireZoomToExtent',\n            'click #netmap-view-reset-zoom': 'fireResetZoom',\n            'click #netmap-view-reset-transparency': 'fireResetTransparency',\n            'click #refresh-interval input[type=radio]': 'setRefreshInterval',\n            'click #refresh-interval input[type=checkbox]': 'setRefreshTrafficOnly',\n            'click #netmap-view-unfix-nodes': 'fireUnfixNodes',\n            'click #netmap-view-fix-nodes': 'fireFixNodes',\n            'click #netmap-view-toggle-force': 'fireToggleForce'\n        },\n\n        filterLabelTemplate: _.template('' +\n            '<span class=\"label secondary\" data-string=\"<%= filter %>\">' +\n            '<%= filter %> <i class=\"fa fa-times filter-string-remove\"></i>' +\n            '</span>'),\n\n        initialize: function () {\n\n            // Initialize the available views from the\n            // window-object.\n            this.netmapViews = new Collections.NetmapViewCollection();\n            this.netmapViews.reset(window.netmapData.views);\n\n            // Set current view to the users default view. If no default view is\n            // set, set the current view to be the first in the list of available\n            // views. If none are available use the default object\n            this.currentView = this.netmapViews.get(window.netmapData.defaultView) ||\n                this.netmapViews.at(0) || new Models.NetmapView();\n\n            this.refreshInterval = null;\n            this.updateFavoriteViewEnabled = true;\n            this.saveDeleteViewEnabled = true;\n\n            this.initializeDOM();\n            this.initializeDialogs();\n\n            Backbone.EventBroker.register(this);\n        },\n\n        /** Initializes and/or caches any necessary DOM elements. */\n        initializeDOM: function () {\n\n            this.netmapViewPanel = this.$('#netmap-view-panel');\n            this.middleAlertContainer = this.$('#netmap-middle-alert-container');\n            this.leftAlertContainer = this.$('#netmap-left-alert-container');\n\n            this.$('#filter-room-location-form input[type=text]', this.netmapViewPanel).autocomplete({\n                source: window.netmapData.roomsAndLocations,\n                autoFocus: true\n            });\n\n            this.$('#graph-view-select option[value=\"' + this.currentView.id + '\"]').prop(\n                'selected',\n                true\n            );\n\n            this.updateControlsForCurrentView();\n        },\n\n        initializeDialogs: function () {\n            var self = this;\n\n            /** Create dialog */\n            this.createNewViewForm = $('#netmap-view-create-form');\n            this.createNewViewForm.dialog({\n                autoOpen: false,\n                modal: true,\n                title: 'Create new view'\n            });\n\n            this.createNewViewForm.submit(function(e){\n                e.preventDefault();\n                self.createView.call(self);\n            });\n\n            /** Edit dialog */\n            this.editViewForm = $('#netmap-view-edit-form');\n            this.editViewForm.dialog({\n                autoOpen: false,\n                modal: true,\n                title: 'Edit ' + this.currentView.get('title')\n            });\n\n            this.editViewForm.submit(function(e){\n                e.preventDefault();\n                self.editCurrentView.call(self);\n            });\n\n\n        },\n        toggleNetmapViewPanel: function (e) {\n            $('#netmap-view-panel').toggle(this.updateEqualizers);\n            this.$(e.currentTarget.children).toggleClass('fa-caret-down fa-caret-up');\n        },\n        updateEqualizers: function () {\n            $('[data-equalizer]').each(function () {\n                const $watched = $(this).find('[data-equalizer-watch]');\n                $watched.css('height', 'auto');\n                const maxHeight = $watched.toArray().reduce((max, element) => {\n                    return Math.max(max, $(element).outerHeight());\n                }, 0);\n                $watched.css('height', maxHeight);\n            });\n        },\n        fireZoomToExtent: function () {\n            Backbone.EventBroker.trigger('netmap:zoomToExtent');\n        },\n\n        fireResetZoom: function () {\n            Backbone.EventBroker.trigger('netmap:resetZoom');\n        },\n\n        fireResetTransparency: function () {\n            Backbone.EventBroker.trigger('netmap:resetTransparency');\n        },\n\n        fireUnfixNodes: function () {\n            Backbone.EventBroker.trigger('netmap:unfixNodes');\n        },\n\n        fireFixNodes: function () {\n            Backbone.EventBroker.trigger('netmap:fixNodes');\n        },\n\n        /**\n         * Triggers when the topology layer is changed. Updates the\n         * view and fires an event to the graph model\n         */\n        changeTopologyLayer: function (e) {\n            var layer = parseInt(e.currentTarget.value);\n            this.currentView.set('topology', layer);\n            this.currentView.trigger('attributeChange');\n            Backbone.EventBroker.trigger('netmap:topologyLayerChanged', layer);\n        },\n\n        /**\n         * Change the controls to reflect view change and notify the GraphView\n         */\n        changeNetmapView: function (e) {\n            var viewId = $(e.currentTarget).find(':selected').val();\n            this.currentView = this.netmapViews.get(viewId);\n\n            if (!this.currentView) {\n                // This clause is not needed for Backbone>=0.9.9, but should\n                // cause no harm after upgrade.\n                this.currentView = this.netmapViews.getByCid(viewId);\n            }\n\n            this.updateControlsForCurrentView();\n\n            Backbone.EventBroker.trigger('netmap:netmapViewChanged', this.currentView);\n        },\n\n        /**\n         * Triggers on category select/unselect. Updates the current netmapView\n         * and notifies the GraphView.\n         */\n        updateCategoryFilter: function (e) {\n\n            var categoryId = e.currentTarget.value;\n            var checked = e.currentTarget.checked;\n            var categories = this.currentView.get('categories');\n\n            if (checked) {\n                categories.push(categoryId);\n            } else {\n                categories.splice(categories.indexOf(categoryId), 1);\n            }\n\n            this.currentView.trigger('attributeChange');\n            Backbone.EventBroker.trigger('netmap:filterCategoriesChanged', categoryId, checked);\n        },\n\n        updateOrphanNodesFilter: function (e) {\n            this.currentView.set('display_orphans', e.currentTarget.checked);\n            this.currentView.trigger('attributeChange');\n            Backbone.EventBroker.trigger('netmap:updateGraph');\n        },\n\n        saveCurrentView: function () {\n            console.log('saveCurrentView');\n\n            if (!this.saveDeleteViewEnabled) {\n                // This control is disabled\n                return;\n            }\n\n            // Update `display_elinks` and remove 'ELINKS' from categories if present\n            var categories = this.currentView.get('categories');\n            this.currentView.set('display_elinks', _.indexOf(categories, 'ELINK') >= 0);\n            this.currentView.set('categories', _.without(categories, 'ELINK'));\n            this.currentView.set('last_modified', new Date());\n            this.currentView.set('location_room_filter', this.currentView.filterStrings.join('|'));\n            this.currentView.baseZoom = this.currentView.get('zoom');\n            var isNew = this.currentView.isNew();\n\n            var self = this;\n            this.currentView.save(this.currentView.attributes,\n                {\n                    beforeSend: function(xhr) {\n                        xhr.setRequestHeader('X-CSRFToken', csrfToken);\n                    },\n                    success: function (model) {\n                        Backbone.EventBroker.trigger('netmap:saveNodePositions', model, {'isNew': isNew}, self.middleAlertContainer);\n                    },\n                    error: function (model, resp) {\n                        self.saveError.call(self, resp.responseText);\n                    }\n                }\n            );\n        },\n\n        displayEditView: function () {\n            console.log('displayEditView');\n\n            $('input:text', this.editViewForm).val(this.currentView.get('title'));\n            $('textarea', this.editViewForm).val(this.currentView.get('description'));\n            $('input:checkbox', this.editViewForm).attr('checked', this.currentView.get('is_public'));\n            this.editViewForm.dialog('open');\n\n        },\n\n        editCurrentView: function () {\n            console.log('editCurrentView');\n            if (!this.saveDeleteViewEnabled) {\n                // This control is disabled\n                return;\n            }\n\n            // Set all necessary attributes\n            var self = this,\n                form = $('#netmap-view-edit-form');\n\n            var data = {\n                title: $('input:text', form).val(),\n                description: $('textarea', form).val(),\n                is_public: $('input:checkbox', form).is(':checked')\n            };\n\n            this.currentView.save(data, {\n                beforeSend: function(xhr) {\n                    xhr.setRequestHeader('X-CSRFToken', csrfToken);\n                },\n                success: function (model) {\n                    console.log(model);\n                    Backbone.EventBroker.trigger('netmap:saveNodePositions', model, {'isUpdated': true}, self.leftAlertContainer);\n                },\n                error: function (model, resp) {\n                    self.saveError.call(self, resp.responseText);\n                }\n            });\n\n            this.editViewForm.dialog('close');\n\n        },\n\n        deleteCurrentView: function () {\n\n            if (!this.saveDeleteViewEnabled) {\n                // This control is disabled\n                return;\n            }\n\n            if(confirm('Delete this view?')) {\n                if (!this.currentView.isNew()) {\n                    var self = this;\n                    this.currentView.destroy({\n                        beforeSend: function(xhr) {\n                            xhr.setRequestHeader('X-CSRFToken', csrfToken);\n                        },\n                        success: function () {\n                            self.deleteSuccessful.call(self, false);\n                        },\n                        error: function (model, resp) {\n                            self.deleteError.call(self, resp.responseText);\n                        },\n                        wait: true\n                    });\n                } else {\n                    this.deleteSuccessful(true);\n                }\n            }\n\n        },\n\n        /** Saves the current view as default for the current user */\n        setCurrentViewDefault: function () {\n\n            if (!this.updateFavoriteViewEnabled) {\n                // This control is disabled\n                return;\n            }\n\n            var self = this;\n\n            $.ajax({\n                type: 'PUT',\n                url: 'views/default/' + window.netmapData.userID + '/',\n                data: {view: this.currentView.id, owner: window.netmapData.userID}\n            })\n            .done(function () {\n                var alert = self.leftAlertContainer.html(\n                    '<span class=\"alert-box success\">View set as default</span>'\n                );\n                setTimeout(function () {\n                    $('span', alert).fadeOut(function () {\n                        this.remove();\n                    });\n                }, 3000);\n            })\n            .fail(function () {\n                var alert = self.leftAlertContainer.html(\n                    '<span class=\"alert-box alert\">Error setting default view' +\n                    '<a href=\"#\" class=\"close\">&times;</a></span>'\n                );\n                $(alert).click(function () {\n                    $(alert).fadeOut(function () {\n                        this.remove();\n                    }) ;\n                });\n            });\n        },\n\n        displayCreateView: function () {\n            console.log('displayCreateView');\n            this.createNewViewForm.dialog('open');\n        },\n\n        createView: function () {\n            var newView = new Models.NetmapView(_.omit(\n                this.currentView.attributes, 'viewid', 'title', 'description', 'is_public'));\n            newView.set({owner: window.netmapData.userLogin});\n            this.netmapViews.add(newView);\n            this.currentView = newView;\n\n            // Set all necessary attributes\n            var form = $('#netmap-view-create-form');\n            this.currentView.set('title', $('input:text', form).val());\n            this.currentView.set('description', $('textarea', form).val());\n            this.currentView.set('is_public', $('input:checkbox', form).is(':checked'));\n\n            var viewSelect = this.$('#graph-view-select');\n            viewSelect.append(new Option(this.currentView.get('title') + ' (' +\n                window.netmapData.userLogin + ')',\n                this.currentView.cid, true, true));\n\n            this.updateControlsForCurrentView();\n            this.saveCurrentView();\n            this.createNewViewForm.dialog('close');\n\n            Backbone.EventBroker.trigger('netmap:netmapViewChanged', this.currentView);\n        },\n\n        /**  Triggers a graph search for the given query */\n        searchGraph: function (e) {\n            e.preventDefault();\n            var query = $('#graph-search-input', e.currentTarget).val();\n            if (query) {\n                Backbone.EventBroker.trigger('netmap:searchGraph', query);\n            } else {\n                this.resetSearch(e);\n            }\n        },\n\n        /** Triggers resets for zoom and transparency */\n        resetSearch: function (e) {\n            Backbone.EventBroker.trigger('netmap:resetTransparency');\n            Backbone.EventBroker.trigger('netmap:resetZoom');\n        },\n\n        /** Fires when a new location-/room-filter is added */\n        filterByRoomOrLocation: function (e) {\n            e.preventDefault();\n            var query = $('input[type=\"text\"]', e.currentTarget).val();\n            e.currentTarget.reset();\n            $('#filter-labels', this.netmapViewPanel).append(this.filterLabelTemplate({filter: query}));\n            Backbone.EventBroker.trigger('netmap:filterByRoomOrLocation', query);\n        },\n\n\n        removeRoomOrLocationFilter: function (e) {\n            e.preventDefault();\n            var elem = $(e.currentTarget).parent();\n            var filterString = elem.data('string');\n            elem.remove();\n            Backbone.EventBroker.trigger('netmap:removeFilter', filterString);\n        },\n\n        saveSuccessful: function (model, state, alertContainer) {\n\n            if (state.isNew) {\n                /* If the model was new we need to set its value as\n                 * the id given by the database.\n                 */\n                this.$('#graph-view-select option[value=\"' + model.cid + '\"]')\n                    .attr('id', model.id)\n                    .attr('value', model.id)\n                    .html(model.get('title') + ' (' + model.get('owner') + ')');\n            } else if (state.isUpdated) {\n                this.$('#graph-view-select option[value=\"' + model.id + '\"]')\n                    .html(model.get('title') + ' (' + model.get('owner') + ')');\n            }\n\n            this.setUpdateFavoriteViewEnables(true);\n\n            var alert = alertContainer.html('<span class=\"alert-box success\">View saved successfully</span>');\n            setTimeout(function () {\n                $('span', alert).fadeOut(function () {\n                    this.remove();\n                });\n            }, 3000);\n        },\n\n        deleteSuccessful: function (isNew) {\n\n            var value;\n            if (isNew) {\n                value = this.currentView.cid;\n            } else {\n                value = this.currentView.id;\n            }\n\n            this.$('#graph-view-select option[value=\"' + value + '\"]').remove();\n            var selected = this.$('#graph-view-select option:selected').val();\n            this.currentView = this.netmapViews.get(selected) || new Models.NetmapView();\n            this.updateControlsForCurrentView();\n\n            Backbone.EventBroker.trigger('netmap:netmapViewChanged', this.currentView);\n\n            var alert = this.leftAlertContainer.html('<span class=\"alert-box success\">Successfully deleted view</span>');\n            setTimeout(function () {\n                $('span', alert).fadeOut(function () {\n                    this.remove();\n                });\n            }, 3000);\n        },\n\n        saveError: function (resp) { console.log(resp);\n\n            var alert = this.leftAlertContainer.html(\n                '<span class=\"alert-box alert\">Save unsuccessful!' +\n                    '<a href=\"#\" class=\"close\">&times;</a></span>'\n            );\n            $('span a', alert).click(function () {\n                $('span', alert).fadeOut(function () {\n                    this.remove();\n                }) ;\n            });\n        },\n\n        deleteError: function (resp) { console.log(resp);\n\n            var alert = this.leftAlertContainer.html(\n                '<span class=\"alert-box alert\">Delete unsuccessful!' +\n                    '<a href=\"#\" class=\"close\">&times;</a></span>'\n            );\n            $('span a', alert).click(function () {\n                $('span', alert).fadeOut(function () {\n                    this.remove();\n                }) ;\n            });\n        },\n\n        updateControlsForCurrentView: function () {\n            this.setCategoriesForCurrentView();\n            this.setLocationRoomFilterForCurrentView();\n            this.setTopologySelectForCurrentView();\n            this.setViewButtonsForCurrentView();\n            this.resetRefreshControls();\n        },\n\n        fireToggleForce: function (e) {\n            var targetElem = this.$(e.currentTarget);\n            var statusOn = targetElem.data('status') === 'on';\n            if (statusOn) {\n                targetElem.data('status', 'off');\n                targetElem.html('Start animation <i class=\"fa fa-play\"></i>');\n            } else { // off\n                targetElem.data('status', 'on');\n                targetElem.html('Stop animation <i class=\"fa fa-stop\"></i>');\n            }\n            Backbone.EventBroker.trigger('netmap:toggleForce', statusOn);\n        },\n\n        setCategoriesForCurrentView: function () {\n\n            var newCategories = this.currentView.get('categories');\n            _.each(this.$('.filter-category'), function (elem) {\n                elem.checked = _.contains(newCategories, elem.value);\n            });\n            this.$('#filter-orphan-nodes').prop(\n                'checked',\n                this.currentView.get('display_orphans')\n            );\n        },\n\n        setLocationRoomFilterForCurrentView: function () {\n\n            var self = this;\n            var elem = $('#filter-labels', this.netmapViewPanel).empty();\n            var filters = this.currentView.get('location_room_filter');\n\n            if (filters) {\n                filters = filters.split('|');\n                _.each(filters, function (filter) {\n                    elem.append(self.filterLabelTemplate({filter: filter}));\n                });\n                this.currentView.filterStrings = filters;\n            } else {\n                this.currentView.filterStrings = [];\n            }\n        },\n\n        setTopologySelectForCurrentView: function () {\n\n            var layer = this.currentView.get('topology');\n\n            this.$('#graph-layer-select option[value=\"' + layer + '\"]').prop(\n                'selected',\n                layer\n            );\n        },\n\n        /**\n         * Enables/disables the appropriate buttons for the current view\n         */\n        setViewButtonsForCurrentView: function () {\n\n            // No view exists\n            if (!this.netmapViews.length) {\n                this.setUpdateFavoriteViewEnables(false);\n                this.setSaveDeleteViewEnabled(false);\n\n            // User does not own selected view\n            } else if (!window.netmapData.admin &&\n                    this.currentView.get('owner') !== window.netmapData.userLogin) {\n                this.setUpdateFavoriteViewEnables(true);\n                this.setSaveDeleteViewEnabled(false);\n\n            // View is unsaved\n            } else if (this.currentView.isNew()) {\n                this.setUpdateFavoriteViewEnables(false);\n                this.setSaveDeleteViewEnabled(true);\n\n            // User owns the selected view\n            } else {\n                this.setUpdateFavoriteViewEnables(true);\n                this.setSaveDeleteViewEnabled(true);\n            }\n        },\n\n        setRefreshInterval: function (e) {\n\n            var self = this;\n            var val = parseInt(e.currentTarget.value);\n\n            if (val === -1) {\n                if (this.refreshInterval !== null) {\n                    // Clear old interval function\n                    clearInterval(this.refreshInterval);\n                }\n                $('#refresh-counter').html('');\n            } else {\n                // Clear old interval function\n                clearInterval(this.refreshInterval);\n                var counter = val * 60;\n\n                // Create a refresh interval function which dispatches a\n                // refresh event to the GraphView when the counter reaches 0\n                this.refreshInterval = setInterval(function () {\n                    counter--;\n                    if (counter === 0) {\n                        Backbone.EventBroker.trigger('netmap:refreshGraph');\n                        counter = val * 60;\n                    }\n                    $('#refresh-counter').html(\n                        '<small>Refreshing in ' + counter + ' sec</small>'\n                    );\n                }, 1000);\n            }\n        },\n\n        resetRefreshControls: function () {\n\n            this.currentView.refreshTrafficOnly = false;\n            this.$('#refresh-interval input[type=checkbox]').attr('checked', false);\n\n            this.$('#refresh-interval input[type=radio]')[0].checked = true;\n\n            clearInterval(this.refreshInterval);\n            this.$('#refresh-counter').html('');\n        },\n\n        setRefreshTrafficOnly: function (e) {\n            this.currentView.refreshTrafficOnly = e.currentTarget.checked;\n        },\n\n\n        setUpdateFavoriteViewEnables: function (enabled) {\n\n            this.updateFavoriteViewEnabled = enabled;\n            var setFavoriteViewButton = $('#netmap-view-default', this.netmapViewPanel);\n            setFavoriteViewButton.toggleClass('disabled', !enabled);\n        },\n\n        setSaveDeleteViewEnabled: function (enabled) {\n\n            this.saveDeleteViewEnabled = enabled;\n            var saveViewButton = $('#netmap-view-save', this.netmapViewPanel);\n            var deleteViewButton = $('#netmap-view-delete', this.netmapViewPanel);\n            saveViewButton.toggleClass('disabled', !enabled);\n            deleteViewButton.toggleClass('disabled', !enabled);\n        }\n    });\n\n    return ControlView;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/graph.js",
    "content": "define([\n    'netmap/collections',\n    'backbone',\n    'libs/backbone-eventbroker'\n], function (Collections) {\n\n    /**\n     * This is the backbone model representing the topology graph itself,\n     * without any filters or options from the netmap-view.\n     * It is placed in its own file to avoid a circular dependency.\n     */\n    var Graph = Backbone.Model.extend({\n\n        defaults: {\n            layer: 2,\n            viewId: null,\n            baseUrl: 'graph/layer',\n            nodeCollection: new Collections.NodeCollection(),\n            linkCollection: new Collections.LinkCollection(),\n            vlanCollection: new Collections.VlanCollection(),\n            // Determines what locations we fetch traffic data for, as this is a\n            // somewhat expensive operation.\n            locations: [],\n            filter_categories: [\n            // temp deactivating to avoid overhead\n                {name: 'GSW', checked: false},\n                {name: 'GW', checked: false},\n                {name: 'SW', checked: true},\n                {name: 'OTHER', checked: true},\n                {name: 'WLAN', checked: true},\n                {name: 'SRV', checked: true},\n                {name: 'EDGE', checked: true},\n                {name: 'ELINK', checked: true},\n                {name: 'ENV', checked: true},\n                {name: 'POWER', checked: true}\n            ],\n            loadingTraffic: false\n        },\n        interests: {},\n\n        initialize: function () {\n            Backbone.EventBroker.register(this);\n        },\n\n        url: function () {\n\n            var url = this.get('baseUrl') + this.get('layer') + '/';\n            var viewId = this.get('viewId');\n\n            if (viewId) {\n                url += this.get('viewId') + '/';\n            }\n\n            return url;\n        },\n\n        parse: function (response, options) {\n\n            console.log(\"Got response\". response);\n\n            var nodes = this.get('nodeCollection').populate(response.nodes);\n            var links = this.get('linkCollection').populate(response.links);\n            var vlans = this.get('vlanCollection').populate(response.vlans);\n\n            // Replace the source/target attribute of each link, which is\n            // the node-id with the actual node object\n            links.each(function (link) {\n                var sourceId = link.get('source');\n                var targetId = link.get('target');\n\n                var source = nodes.get(sourceId).attributes;\n                if (!source) {\n                    source = vlans.get(sourceId).attributes;\n                }\n                var target = nodes.get(targetId).attributes;\n                if (!target) {\n                    target = vlans.get(targetId).attributes;\n                }\n\n                link.set('source', source);\n                link.set('target', target);\n            });\n\n            // Since we set the models data explicitly through the collections'\n            // populate-methods, we don't return any parsed data here.\n            return {};\n        },\n\n        /**\n         * Load traffic data from the server for nodes matching the\n         * filterStrings. If the filterStrings is empty (e.g. a null list), get\n         * traffic data for all netboxes found in NAV (this is a HUGE\n         * bottleneck). Done asynchronously after page load to reduce perceived\n         * slowness of the app.\n         */\n        loadTraffic: function (filterStrings) {\n            var self = this;\n            var layer = this.get(\"layer\");\n\n            if (!filterStrings.length) {\n                $.getJSON('traffic/layer' + layer + '/')\n                    .done(function (data) {\n                        self.trafficSuccess.call(self, \"all\", data);\n                    })\n                    .fail(this.trafficError)\n                    .always(function() {\n                        self.set('loadingTraffic', false);\n                    });\n                return;\n            }\n\n            this.set('loadingTraffic', true);\n            console.log('Start fetching traffic data');\n            _.each(filterStrings, function(location) {\n                $.getJSON('traffic/layer' + layer + '/' + location)\n                    .done(function (data) {\n                        self.trafficSuccess.call(self, location, data);\n                    })\n                    .fail(this.trafficError)\n                    .always(function() {\n                        self.set('loadingTraffic', false);\n                    });\n            });\n        },\n\n        trafficSuccess: function (location, data) {\n            console.log('Traffic data received for', location, '- processing.');\n            var links = this.get('linkCollection');\n\n            // Extend the link-objects with traffic data\n            links.each(function (link) {\n                var source = parseInt(link.get('source').id);\n                var target = parseInt(link.get('target').id);\n                var traffic = _.find(data, function (o) {\n                    return source === o.source && target === o.target;\n                });\n                if (traffic === undefined) {\n                    // The source/target relationship might be\n                    // reversed between links and edges in some cases.\n                    traffic = _.find(data, function (o) {\n                        return source === o.target && target === o.source;\n                    });\n                }\n                link.set('traffic', traffic);\n            });\n\n            Backbone.EventBroker.trigger('netmap:updateGraph');\n        },\n\n        trafficError: function (jqXHR, textStatus, errorThrown) {\n            console.log('Failed to fetch traffic: ' + textStatus + ' / ' + errorThrown);\n        }\n    });\n\n    return Graph;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/graph_info_view.js",
    "content": "define([\n    'netmap/collections',\n    'plugins/netmap-extras',\n    'libs-amd/text!resources/netmap/node_info.html',\n    'libs-amd/text!resources/netmap/layer2_link_info.html',\n    'libs-amd/text!resources/netmap/layer3_link_info.html',\n    'handlebars',\n    'backbone',\n    'jquery-ui'\n], function (Collections, NetmapExtras ,NodeTemplate, LinkTemplate, VlanTemplate, Handlebars) {\n\n    /**\n     * View for rendering a modal with detailed node-/link-info\n     */\n\n    // Template helper for formatting traffic data\n    Handlebars.registerHelper('traffic_data', function (node) {\n        if (node) {\n            var traffic = NetmapExtras.convert_bits_to_si(node.in_bps);\n            var percent = node.percent_by_speed ? '(' + node.percent_by_speed + '%' + ')' : '';\n            return traffic + ' ' + percent;\n        } else {\n            return node;\n        }\n    });\n\n    var nodeTemplate = Handlebars.compile(NodeTemplate);\n    var linkTemplate = Handlebars.compile(LinkTemplate);\n    var vlanTemplate = Handlebars.compile(VlanTemplate);\n\n    return Backbone.View.extend({\n\n        el: '#graph-info-view',\n\n        events: {\n            'click #graph-info-vlan-list .vlan': 'selectVlan'\n        },\n\n        interests: {},\n\n        initialize: function () {\n\n            this.$el.dialog({\n                position: {\n                    my: 'left top',\n                    at: 'left top',\n                    of: this.options.parent\n                },\n                autoOpen: false,\n                resizable: false,\n                width: 'auto',\n                appendTo: this.options.parent\n            });\n\n            this.selectedVlan = -1;\n            Backbone.EventBroker.register(this);\n        },\n\n        render: function () {\n\n            this.$el.html(this.template(this.model));\n\n            if (!this.$el.dialog('isOpen')) {\n                this.$el.dialog('open');\n            }\n        },\n\n        /**\n         * Changes the model to be represented in this view.\n         */\n        setModel: function (_model) {\n\n            var title;\n            var model = _.extend({}, _model); // Make a copy\n\n            if (model.sysname) { // Model is a node\n\n                this.template = nodeTemplate;\n                this.attachNodeMeta(model);\n                title = model.sysname;\n\n            } else if (_.isArray(model.edges)) { // Model is a layer2 link\n\n                this.template = linkTemplate;\n                this.attachLayer2LinkMeta(model);\n                title = 'Layer 2 link';\n\n            } else { // Model is a layer2 link\n\n                this.template = vlanTemplate;\n                this.attachLayer3LinkMeta(model);\n                title = 'Layer 3 link';\n            }\n\n            this.model = model;\n\n            this.$el.dialog('option', 'title', title);\n        },\n\n        /**\n         * Extend the model with metadata for a node detail view\n         */\n        attachNodeMeta: function (model) {\n\n            model.img = window.netmapData.staticURL +\n                model.category.toLowerCase() + '.png';\n\n            model.vlans = _.map(model.vlans, function (vlanId) {\n                var vlan = this.vlans.get(vlanId).attributes;\n                vlan.isSelected = vlanId === this.selectedVlan;\n                return vlan;\n            }, this);\n\n            return model;\n        },\n\n        /**\n         * Extend the model with metadata for a layer2 link detail view\n         */\n        attachLayer2LinkMeta: function (model) {\n\n            model.sourceImg = window.netmapData.staticURL +\n                    model.source.category.toLowerCase() + '.png';\n            model.targetImg = window.netmapData.staticURL +\n                model.target.category.toLowerCase() + '.png';\n\n            model.vlans = _.map(_.uniq(model.vlans), function (vlanId) {\n                var vlan = this.vlans.get(vlanId).attributes;\n                vlan.isSelected = vlanId === this.selectedVlan;\n                return vlan;\n            }, this).sort(function (a, b) { return a.vlan - b.vlan; });\n\n            _.each(model.edges, function (edge) {\n                if (model.traffic === undefined) return;\n                edge.traffic = _.find(model.traffic.edges, function (traffic) {\n                    var sourceTraffic, targetTraffic;\n                    if (edge.source.interface) {\n                        sourceTraffic = edge.source.interface.ifname === traffic.source_ifname ||\n                            edge.source.interface.ifname === traffic.target_ifname;\n                    }\n                    if (edge.target.interface) {\n                        targetTraffic = edge.target.interface.ifname === traffic.target_ifname ||\n                            edge.target.interface.ifname === traffic.source_ifname;\n                    }\n                    return sourceTraffic || targetTraffic;\n                });\n            });\n\n            return model;\n        },\n\n        /**\n         * Extend the model with metadata for a layer3 link detail view\n         */\n        attachLayer3LinkMeta: function (model) {\n\n            model.sourceImg = window.netmapData.staticURL +\n                    model.source.category.toLowerCase() + '.png';\n            model.targetImg = window.netmapData.staticURL +\n                model.target.category.toLowerCase() + '.png';\n\n            model.edges = _.map(model.edges, function (edges, vlanId) {\n                return  {\n                    vlan: this.vlans.get(vlanId).attributes,\n                    edges: edges\n                };\n            }, this);\n\n            /*\n             * Sometimes the backend will supply multiple linknets.\n             * The cause is usually wrongful categorization, perhaps due\n             * to improper configuration. There is no way to know which is\n             * the correct linknet from this end, so we display them all\n             * along with a warning message.\n             */\n            if (model.edges.length > 1) { // TODO: Better warning message\n                model.warning = 'Found multiple linknets! This can mean ' +\n                'improper categorization by NAV or improper configuration';\n            }\n\n            return model;\n        },\n\n        /** Triggers when a specific vlan is selected. Notifies the GraphView */\n        selectVlan: function (e) {\n\n            var target = $(e.currentTarget);\n            var vlanId = target.data('nav-vlan');\n\n            if (vlanId === this.selectedVlan) {\n                this.selectedVlan = -1;\n                target.removeClass('selected-vlan');\n                Backbone.EventBroker.trigger('netmap:resetTransparency');\n                return;\n            }\n\n            this.selectedVlan = vlanId;\n\n            this.$('#graph-info-vlan-list .selected-vlan').removeClass('selected-vlan');\n            target.addClass('selected-vlan');\n\n            Backbone.EventBroker.trigger('netmap:selectedVlanChanged', vlanId);\n        },\n\n        /** Resets the view */\n        reset: function () {\n            this.selectedVlan = -1;\n            this.$el.dialog('close');\n        },\n\n        /** Set the list of vlans in this network */\n        setVlans: function (vlans) {\n            this.vlans = vlans;\n        }\n\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/graph_view.js",
    "content": "define([\n    'netmap/graph',\n    'netmap/models',\n    'netmap/graph_info_view',\n    'plugins/fullscreen',\n    'underscore',\n    'backbone',\n    'libs/backbone-eventbroker',\n    'd3'\n], function (Graph, Models, GraphInfoView, Fullscreen) {\n\n    var Transparent = 0.2;\n    var TransitionDuration = 500;\n    var UndefinedLoad = '211,211,211';\n\n    var GraphView = Backbone.View.extend({\n\n        el: '#graph-view',\n\n        interests: {\n            'netmap:topologyLayerChanged': 'updateTopologyLayer',\n            'netmap:netmapViewChanged': 'updateNetmapView',\n            'netmap:filterCategoriesChanged': 'updateCategories',\n            'netmap:filterByRoomOrLocation': 'addFilterString',\n            'netmap:removeFilter': 'removeRoomOrLocationFilter',\n            'netmap:selectedVlanChanged': 'updateSelectedVlan',\n            'netmap:updateGraph': 'update',\n            'netmap:refreshGraph': 'refresh',\n            'netmap:searchGraph': 'search',\n            'netmap:saveNodePositions': 'saveNodePositions',\n            'netmap:zoomToExtent': 'zoomToExtent',\n            'netmap:resetTransparency': 'resetTransparency',\n            'netmap:resetZoom': 'resetZoom',\n            'netmap:fixNodes': 'fixNodes',\n            'netmap:unfixNodes': 'unfixNodes',\n            'netmap:toggleForce': 'toggleForce'\n        },\n\n        initialize: function () {\n            this.w = this.$el.width();\n            this.h = $(window).height();\n\n            // Initial d3 graph state\n            this.force = d3.layout.force()\n                .gravity(0.1)\n                .charge(-2500)\n                .linkDistance(250)\n                .size([this.w, this.h]);\n\n            this.forceEnabled = false;\n            this.nodes = this.force.nodes();\n            this.links = this.force.links();\n            this.isLoadingForTheFirstTime = true;\n\n            Backbone.EventBroker.register(this);\n\n            this.model = new Graph();\n            this.netmapView = this.options.netmapView;\n\n            this.model.set(\"locations\", this.netmapView.filterStrings);\n\n            // Indicators\n            this.indicatorHolder = this.createIndicatorHolder();\n            this.loadingGraphIndicator = this.createLoadingGraphIndicator();\n            this.loadingGraphIndicator.appendTo(this.indicatorHolder).hide();\n            this.loadingTrafficIndicator = this.createLoadingTrafficIndicator();\n            this.loadingTrafficIndicator.appendTo(this.indicatorHolder).hide();\n            this.listenTo(this.model, 'change:loadingTraffic', this.toggleLoadingTraffic);\n\n            this.graphInfoView = new GraphInfoView({parent: this.el});\n\n            this.initializeDOM();\n            this.bindEvents();\n            this.initializeNetmapView();\n            this.fetchGraphModel();\n        },\n\n\n        createIndicatorHolder: function() {\n            return $('<div>')\n                .css({\n                    position: 'absolute',\n                    top: '10px',\n                    left: '10px'\n                })\n                .appendTo(this.el);\n        },\n\n\n        createLoadingGraphIndicator: function() {\n            return $('<div class=\"alert-box info\">')\n                .css({ width: '200px' })\n                .html('Loading graph');\n        },\n\n\n        createLoadingTrafficIndicator: function() {\n            return $('<div class=\"alert-box info\">')\n                .css({ width: '200px' })\n                .html('Loading traffic data');\n        },\n\n\n        toggleLoadingTraffic: function() {\n            if (this.model.get('loadingTraffic') === true) {\n                console.log('We are loading traffic');\n                this.loadingTrafficIndicator.show();\n            } else {\n                console.log('We stopped loading traffic');\n                this.loadingTrafficIndicator.hide('slow');\n            }\n        },\n\n\n        /**\n         * Initializes the graph model from the initially selected\n         * or default netmapview.\n         */\n        initializeNetmapView: function () {\n\n            if (this.netmapView === null) { console.log('netmapView === null');\n                this.netmapView = new Models.NetmapView();\n            }\n\n            this.model.set('viewId', this.netmapView.id);\n            this.model.set('layer', this.netmapView.get('topology'));\n\n            var zoomParts = this.getTranslationsAndScale();\n            this.netmapView.baseZoom = zoomParts;\n            this.trans = zoomParts[0];\n            this.scale = zoomParts[1];\n            this.zoom.translate(this.trans);\n            this.zoom.scale(this.scale);\n\n            var selectedCategories = this.netmapView.get('categories');\n            _.each(this.model.get('filter_categories'), function (category) {\n                category.checked = _.indexOf(selectedCategories, category.name) >= 0;\n            });\n        },\n\n        addFullscreenToggler: function () {\n            var self = this;\n\n            if (Fullscreen.isFullscreenSupported()) {\n                var fullscreenToggler = $('<button class=\"tiny\"><i class=\"fa fa-arrows-alt fa-lg\"></i></button>');\n                fullscreenToggler.css({\n                    'position': 'absolute',\n                    'right': '10px',\n                    'top': '10px'\n                });\n                this.$el.append(fullscreenToggler);\n                fullscreenToggler.on('click', function () {\n                    Fullscreen.toggleFullscreen(self.el);\n                });\n            }\n        },\n\n        getTranslationsAndScale: function() {\n            var zoomParts = this.netmapView.get('zoom').split(';');\n            var translations = this.getTranslations(zoomParts[0]);\n            var scale = this.getScale(zoomParts[1]);\n            return [translations, scale];\n        },\n\n        /**\n         * Get translation or set sensible defaults\n         */\n        getTranslations: function(zoom) {\n            var translations = zoom.split(',');\n            if (isNaN(translations[0]) || isNaN(translations[1])) {\n                translations = [\"0\",\"0\"];\n            }\n            return translations;\n        },\n\n        /**\n         * Get scale or set sensible default\n         */\n        getScale: function(scale) {\n            return +scale ? scale : \"0.5\";\n        },\n\n        /**\n         * Initialize the SVG DOM elements\n         */\n        initializeDOM: function () {\n            this.addFullscreenToggler();\n\n            this.svg = d3.select(this.el)\n                .append('svg')\n                .attr('width', this.w)\n                .attr('height', this.h)\n                .attr('viewBox', '0 0 ' + this.w + ' ' + this.h)\n                .attr('pointer-events', 'all')\n                .attr('overflow', 'hidden');\n\n            this.boundingBox = this.svg.append('g')\n                .attr('id', 'boundingbox');\n\n            // Markers for link cardinality\n            var bundleLinkMarkerStart = this.boundingBox.append('marker')\n                .attr('id', 'bundlelinkstart')\n                .attr('markerWidth', 8)\n                .attr('markerHeight', 12)\n                .attr('refX', -80)\n                .attr('refY', 0)\n                .attr('viewBox', '-4 -6 8 12')\n                .attr('markerUnits', 'userSpaceOnUse')\n                .attr('orient', 'auto');\n            bundleLinkMarkerStart.append('rect')\n                .attr('x', -3)\n                .attr('y', -5)\n                .attr('width', 2)\n                .attr('height', 10);\n            bundleLinkMarkerStart.append('rect')\n                .attr('x', 1)\n                .attr('y', -5)\n                .attr('width', 2)\n                .attr('height', 10);\n            var bundleLinkMarkerEnd = this.boundingBox.append('marker')\n                .attr('id', 'bundlelinkend')\n                .attr('markerWidth', 8)\n                .attr('markerHeight', 12)\n                .attr('refX', 80)\n                .attr('refY', 0)\n                .attr('viewBox', '-4 -6 8 12')\n                .attr('markerUnits', 'userSpaceOnUse')\n                .attr('orient', 'auto');\n            bundleLinkMarkerEnd.append('rect')\n                .attr('x', -3)\n                .attr('y', -5)\n                .attr('width', 2)\n                .attr('height', 10);\n            bundleLinkMarkerEnd.append('rect')\n                .attr('x', 1)\n                .attr('y', -5)\n                .attr('width', 2)\n                .attr('height', 10);\n\n            // Needed to control the layering of elements\n            this.linkGroup = this.boundingBox.append('g').attr('id', 'link-group');\n            this.nodeGroup = this.boundingBox.append('g').attr('id', 'node-group');\n\n            this.link = d3.selectAll('.link').data([]);\n            this.node = d3.selectAll('.node').data([]);\n\n        },\n\n        /**\n         * Bind d3 events\n         */\n        bindEvents: function() {\n\n            var self = this;\n\n            // Set up zoom listener\n            this.zoom = d3.behavior.zoom().center([this.w / 2, this.h / 2]);\n            this.svg.call(this.zoom.on('zoom', function () {\n               self.zoomCallback.call(self);\n            }));\n\n            // Set up node dragging listener\n            this.drag = d3.behavior.drag()\n                .on('dragstart', function (node) {\n                    self.dragStart.call(this, node, self);\n                })\n                .on('drag', function (node) {\n                    self.dragMove.call(this, node, self);\n                })\n                .on('dragend', function (node) {\n                    self.dragEnd.call(this, node, self);\n                });\n\n            // Set up resize on window resize\n            $(window).resize(function () {\n                self.w = self.$el.width();\n                self.h = $(window).height();\n                self.svg.attr('width', self.w)\n                    .attr('height', self.h);\n            });\n\n            // Set up tick event\n            this.force.on('tick', function () {\n                self.tick.call(self);\n            });\n        },\n\n        tick: function () {\n\n            this.link.attr('x1', function (o) {\n                return o.source.x;\n            }).attr('y1', function (o) {\n                return o.source.y;\n            }).attr('x2', function (o) {\n                return o.target.x;\n            }).attr('y2', function (o) {\n                return o.target.y;\n            });\n\n            this.node.attr('transform', function(o) {\n                return 'translate(' + o.x + \",\" + o.y + ')';\n            });\n        },\n\n        /**\n         * Gets the nodes and links from the model and filters out\n         * those that should not be displayed\n         */\n        updateNodesAndLinks: function () {\n\n            // Get selected categories\n            var categories = _.pluck(_.filter(\n                this.model.get('filter_categories'),\n                function (category) {\n                    return category.checked;\n            }), 'name');\n\n            var nodes = this.model.get('nodeCollection').getGraphObjects();\n            var links = this.model.get('linkCollection').getGraphObjects();\n            nodes = filterNodesByCategories(nodes, categories);\n            links = filterLinksByCategories(links, categories);\n            if (this.netmapView.filterStrings.length) {\n                nodes = filterNodesByRoomsOrLocations(nodes, this.netmapView.filterStrings);\n                links = filterLinksByRoomsOrLocations(links, this.netmapView.filterStrings);\n            }\n\n            this.graphInfoView.setVlans(this.model.get('vlanCollection'));\n\n            if (!this.netmapView.get('display_orphans')) {\n                nodes = removeOrphanNodes(nodes, links);\n            }\n\n            this.force.links(links).nodes(nodes);\n\n            this.nodes = this.force.nodes();\n            this.links = this.force.links();\n\n            // Set fixed positions\n            _.each(this.nodes, function (node) {\n                if (node.position) {\n                    node.x = node.position.x;\n                    node.y = node.position.y;\n                    node.fixed = true;\n                } else {\n                    node.fixed = false;\n                }\n            });\n        },\n\n        update: function () {\n\n            // You wouldn't want this running while updating\n            this.force.stop();\n\n            if (this.isLoadingForTheFirstTime) {\n                this.isLoadingForTheFirstTime = false;\n            }\n\n            this.updateNodesAndLinks();\n            this.transformGraph();\n            this.render();\n            // Make sure the rendered nodes are evenly distributed\n            this.forceEnabled = true;\n            this.force.start();\n        },\n\n        render: function () {\n            var self = this;\n\n            this.link = this.linkGroup.selectAll('.link')\n                .data(this.links, function (link) {\n                    return link.source.id + '-' + link.target.id;\n                })\n                .style('opacity', 1);\n\n            this.link.enter()\n                .append('line')\n                .on('click', function (link) {\n                    self.clickLink.call(this, link, self);\n                })\n                .attr('class', function (o) {\n                    return 'link ' + linkSpeedAsString(findLinkMaxSpeed(o));\n                })\n                .attr('stroke', function (o) {\n                    return 'url(#linkload' + o.source.id + '-' + o.target.id + ')';\n                })\n                .attr('marker-start', function (o) {\n                    if (o.edges.length > 1) {\n                        return 'url(#bundlelinkstart)';\n                    }\n                })\n                .attr('marker-end', function (o) {\n                    if (o.edges.length > 1) {\n                        return 'url(#bundlelinkend)';\n                    }\n                })\n                .attr('opacity', 0)\n                .transition()\n                .duration(TransitionDuration)\n                .attr('opacity', 1);\n\n\n            this.link.exit().transition()\n                .duration(TransitionDuration)\n                .style('opacity', 0)\n                .remove();\n\n            this.node = this.nodeGroup.selectAll('.node')\n                .data(this.nodes, function (node) {\n                    return node.id;\n                })\n                .style('opacity', 1);\n\n            var nodeElement = this.node.enter()\n                .append('g')\n                .attr('class', 'node')\n                .on('click', function (node) {\n                    self.clickNode.call(this, node, self);\n                })\n                .call(this.drag);\n\n            nodeElement.append('image')\n                .attr('xlink:href', function (o) {\n                    return '/static/images/netmap/' + o.category.toLowerCase() + '.png';\n                })\n                .attr('x', -16)\n                .attr('y', -16)\n                .attr('width', 32)\n                .attr('height', 32);\n\n            nodeElement.append('text')\n                .attr('class', 'sysname')\n                .attr('dy', '1.5em')\n                .attr('text-anchor', 'middle')\n                .text(function (o) {\n                    return o.sysname;\n                });\n\n            nodeElement.attr('opacity', 0)\n                .transition()\n                .duration(TransitionDuration)\n                .style('opacity', 1);\n\n            this.node.exit()\n                .transition()\n                .duration(TransitionDuration)\n                .style('opacity', 0)\n                .remove();\n\n            this.linkGroup.selectAll('.linkload').remove();\n\n            var gradient = this.linkGroup.selectAll('.linkload')\n                .data(this.links);\n            gradient.enter().append('linearGradient')\n                .attr('class', 'linkload')\n                .attr('id', function (link) {\n                    return 'linkload' + link.source.id + '-' + link.target.id;\n                })\n                .attr('x1', '0%')\n                .attr('x2', '0%')\n                .attr('y1', '0%')\n                .attr('y2', '100%');\n\n            var stops = gradient.selectAll('stop')\n                .data(getTrafficCSSforLink);\n            stops.enter()\n                .append('stop')\n                .attr('offset', function (gradient) {\n                    return gradient.percent + '%';\n                })\n                .attr('style', function (gradient) {\n                    if (gradient.css) {\n                        return 'stop-color:rgb(' + gradient.css + '); stop-opacity:1';\n                    }\n                    else {\n                        return 'stop-color:rgb(0,0,0);stop-opacity:1';\n                    }\n                });\n\n            stops.exit().remove();\n        },\n\n        refresh: function () {\n\n            if (this.netmapView.refreshTrafficOnly) {\n                this.model.loadTraffic(this.netmapView.filterStrings);\n            } else {\n                this.fetchGraphModel();\n            }\n        },\n\n        fetchGraphModel: function () {\n\n            var self = this;\n\n            this.loadingGraphIndicator.show();\n            this.graphInfoView.reset();\n\n            var jqxhr = this.model.fetch({\n                success: function () {\n                    self.update();\n                    self.model.loadTraffic(self.netmapView.filterStrings);\n                },\n                error: function () { // TODO: Use alert message instead\n                    alert('Error loading graph, please try to reload the page');\n                }\n            });\n\n            jqxhr.always(function() {\n                self.loadingGraphIndicator.hide('slow');\n            });\n\n        },\n\n        updateTopologyLayer: function (layer) {\n\n            this.model.set('layer', layer);\n            this.fetchGraphModel();\n        },\n\n        updateNetmapView: function (view) {\n\n            this.netmapView = view;\n            this.model.set('viewId', this.netmapView.id);\n            this.model.set('layer', this.netmapView.get('topology'));\n            this.model.set(\"locations\", this.netmapView.filterStrings);\n\n            var zoomParts = this.getTranslationsAndScale();\n            this.netmapView.baseZoom = zoomParts;\n            this.trans = zoomParts[0];\n            this.scale = zoomParts[1];\n            this.zoom.translate(this.trans);\n            this.zoom.scale(this.scale);\n\n            var selectedCategories = this.netmapView.get('categories');\n            _.each(this.model.get('filter_categories'), function (category) {\n                category.checked = _.indexOf(selectedCategories, category.name) >= 0;\n            });\n\n            this.fetchGraphModel();\n        },\n\n        updateCategories: function (categoryId, checked) {\n\n            var categories = this.model.get('filter_categories');\n            _.find(categories, function (category) {\n                return category.name === categoryId;\n            }).checked = checked;\n\n            this.update();\n        },\n\n        toggleForce: function (statusOn) {\n            if (statusOn) {\n                this.force.stop();\n            } else {\n                this.force.resume();\n            }\n            this.forceEnabled = !this.forceEnabled;\n        },\n\n        addFilterString: function (filter) {\n            this.netmapView.filterStrings.push(filter);\n            this.model.set(\"locations\", this.netmapView.filterStrings);\n            this.update();\n        },\n\n        removeRoomOrLocationFilter: function (filter) {\n            this.netmapView.filterStrings = _.without(\n                this.netmapView.filterStrings, filter.toString());\n            this.update();\n        },\n\n        saveNodePositions: function (model, state, alertContainer) {\n\n            var self = this;\n\n            var dirtyNodes = _.map(\n                _.filter(this.force.nodes(), function (node) {\n                    return node.fixed && node.category && !node.is_elink_node;\n                }),\n                function (dirtyNode) {\n                    return {\n                        viewid: self.netmapView.id,\n                        netbox: dirtyNode.id,\n                        x: dirtyNode.x,\n                        y: dirtyNode.y\n                    };\n                }\n            );\n\n            if (dirtyNodes.length) {\n\n                console.log(\"Saving dirty nodes\", dirtyNodes);\n\n                var nodePositions = new Models.NodePositions().set({\n                    'data': dirtyNodes,\n                    'viewid': this.netmapView.id\n                });\n\n                nodePositions.save(nodePositions.get('data'), {\n                    success: function () {\n                        console.log('Node positions saved');\n                        // Notify control view of change, so it can display a green\n                        // \"updated\" box to the user\n                        Backbone.EventBroker.trigger('netmap:saveSuccessful', model, state, alertContainer);\n                    },\n                    error: function (model, resp, opt) {\n                        console.log(\"Failed\", resp.responseText);\n                    }\n                });\n            }\n        },\n\n        updateSelectedVlan: function (vlanId) {\n\n            var nodesInVlan = _.filter(this.nodes, function (node) {\n                return _.contains(node.vlans, vlanId);\n            });\n\n            var linksInVlan = _.filter(this.links, function (link) {\n                return _.contains(link.vlans, vlanId);\n            });\n\n            this.nodeGroup.selectAll('.node').style('opacity', 1)\n                .filter(function (node) {\n                    return !_.contains(nodesInVlan, node);\n                })\n                .transition()\n                .duration(TransitionDuration)\n                .style('opacity', Transparent);\n\n            this.linkGroup.selectAll('.link').style('opacity', 1)\n                .filter(function (link) {\n                    return !_.contains(linksInVlan, link);\n                })\n                .transition()\n                .duration(TransitionDuration)\n                .style('opacity', Transparent);\n        },\n\n        zoomToExtent: function () {\n            var bounds = findBoundingBox(this.nodes);\n            this.transformGraphFromBounds(bounds);\n            this.netmapView.set('zoom', this.trans.join(',') + ';' + this.scale);\n        },\n\n        resetTransparency: function () {\n            this.render();\n        },\n\n        resetZoom: function () {\n            var zoomParts = this.netmapView.baseZoom;\n            this.trans = zoomParts[0];\n            this.scale = zoomParts[1];\n            this.zoom.translate(this.trans);\n            this.zoom.scale(this.scale);\n            this.transformGraphTransition();\n        },\n\n        unfixNodes: function () {\n\n            _.each(this.nodes, function (node) {\n                node.fixed = false;\n            });\n            if (this.forceEnabled) {\n                console.log(\"resume force\");\n                this.force.resume();\n            }\n        },\n\n        fixNodes: function () {\n            console.log(\"Fixing nodes\");\n            _.each(this.nodes, function (node) {\n                node.fixed = true;\n            });\n        },\n\n        /**\n         * Applies the current translation and scale transformations\n         * to the graph\n         */\n        transformGraph: function () {\n            this.boundingBox.attr(\n                'transform',\n                'translate(' + this.trans +\n                ') scale(' + this.scale + ')'\n            );\n        },\n\n        transformGraphTransition: function () {\n               this.boundingBox.transition()\n                   .duration(TransitionDuration)\n                   .attr('transform',\n                        'translate(' + this.trans +\n                        ') scale(' + this.scale + ')');\n        },\n\n        transformGraphFromBounds: function (bounds) {\n\n            var widthRatio = this.scale * (this.w / ((bounds.width + 300) * this.scale));\n            var heightRatio = this.scale * (this.h / ((bounds.height + 300) * this.scale));\n\n            if (widthRatio < heightRatio) {\n                this.scale = widthRatio;\n            } else {\n                this.scale = heightRatio;\n            }\n\n            this.trans = [(-(bounds.xCenter * this.scale) + (this.w / 2)), (-(bounds.yCenter * this.scale) + (this.h / 2))];\n            this.zoom.translate(this.trans);\n            this.zoom.scale(this.scale);\n            this.transformGraphTransition();\n        },\n\n        search: function (query) {\n\n            this.nodeGroup.selectAll('.node').style('opacity', 1);\n\n            var matchingNodes = _.filter(this.nodes, function (node) {\n                    return node.sysname.search(query) !== -1;\n                }\n            );\n\n            if (!matchingNodes.length) {\n                // TODO: Inform of no matches\n                return;\n            } else {\n                var bounds = findBoundingBox(matchingNodes);\n                this.transformGraphFromBounds(bounds);\n\n                this.nodeGroup.selectAll('.node')\n                    .filter(function (node) {\n                        return !_.contains(matchingNodes, node);\n                    })\n                    .transition()\n                    .duration(TransitionDuration)\n                    .style('opacity', Transparent);\n\n                this.linkGroup.selectAll('.link')\n                    .transition()\n                    .duration(TransitionDuration)\n                    .style('opacity', Transparent);\n            }\n        },\n\n        /* d3 callback functions  */\n\n        dragStart: function (node, self) {\n            d3.event.sourceEvent.stopPropagation();\n            d3.select(this).insert('circle', 'image').attr('r', 20);\n        },\n\n        dragMove: function(node, self) {\n            node.px += d3.event.dx;\n            node.py += d3.event.dy;\n            node.x += d3.event.dx;\n            node.y += d3.event.dy;\n            node.fixed = true;\n            self.tick();\n        },\n\n        dragEnd: function (node, self) {\n            d3.select(this).select('circle').remove();\n            if (self.forceEnabled) {\n                self.force.resume();\n            }\n        },\n\n        zoomCallback: function () {\n\n            this.trans = d3.event.translate;\n            this.scale = d3.event.scale;\n            this.transformGraph();\n            this.netmapView.set('zoom', this.trans.join(',') + ';' + this.scale);\n        },\n\n        clickNode: function (node, self) {\n            if (d3.event.defaultPrevented) {\n                return;\n            }\n            self.graphInfoView.setModel(node);\n            self.graphInfoView.render();\n        },\n\n        clickLink: function (link, self) {\n            self.graphInfoView.setModel(link);\n            self.graphInfoView.render();\n        }\n\n    });\n\n    /* Helper functions */\n\n    /**\n     * Helper function for filtering a list of nodes by a list of categories.\n     * @param nodes\n     * @param categories\n     */\n    function filterNodesByCategories(nodes, categories) {\n\n        return _.filter(nodes, function (node) {\n            return _.contains(categories, node.category.toUpperCase());\n        });\n    }\n\n    /**\n     * Helper function for filtering a list of nodes by a list of\n     * room or locations id's.\n     * @param nodes\n     * @param filters\n     */\n    function filterNodesByRoomsOrLocations(nodes, filters) {\n        return _.filter(nodes, function (node) {\n            return _.some(filters, function (filter) {\n                return filter === node.roomid || filter === node.locationid;\n            });\n        });\n    }\n\n    /**\n     * Helper function for filtering a list of links by a list of categories.\n     * @param links\n     * @param categories\n     */\n    function filterLinksByCategories(links, categories) {\n\n        return _.filter(links, function (link) {\n            return _.contains(categories, link.source.category.toUpperCase()) &&\n                _.contains(categories, link.target.category.toUpperCase());\n        });\n    }\n\n    /**\n     * Helper function for filtering a list of links by a list of\n     * room or location id's.\n     * @param links\n     * @param filters\n     */\n    function filterLinksByRoomsOrLocations(links, filters) {\n\n        return _.filter(links, function (link) {\n            return (_.contains(filters, link.source.roomid) && _.contains(filters, link.target.roomid) ||\n                _.contains(filters, link.source.locationid) && _.contains(filters, link.target.locationid));\n        });\n\n    }\n\n    /**\n     * Helper function for removing any orphaned nodes from the nodes list\n     * @param nodes\n     * @param links\n     * @returns {*}\n     */\n    function removeOrphanNodes(nodes, links) {\n\n        return _.filter(nodes, function (node) {\n            return _.some(links, function (link) {\n                return node.id === link.source.id || node.id === link.target.id;\n            });\n        });\n    }\n\n    /**\n     * Helper function for filtering out any links whose source or target\n     * is not in the node list.\n     * @param nodes\n     * @param links\n     * @returns {*}\n     */\n    function filterLinksByNodes(nodes, links) {\n\n        return _.filter(links, function (link) {\n           return _.contains(nodes, link.source) && _.contains(nodes, link.target);\n        });\n    }\n\n\n    /**\n     * Helper function to find the max speed of a link objects\n     * multiple edges, regardless of the layer\n     * @param link\n     */\n    function findLinkMaxSpeed(link) {\n\n        /*\n        This is a kind of 'hacky' approach to find out which layer\n        the link belongs to. This is needed because the JSON format\n        of the object will be different depending on the layer.\n         */\n        var speed;\n        if (_.isArray(link.edges)) {\n            speed = _.max(_.pluck(link.edges, 'link_speed'));\n        } else {\n            speed = _.max(_.pluck(_.flatten(_.values(link.edges)), 'link_speed'));\n        }\n        return speed;\n    }\n\n    /**\n     * Helper function for converting the given speed into\n     * the appropriate range class.\n     * @param speed\n     * @returns {*}\n     */\n    function linkSpeedAsString(speed) {\n        var speedClass;\n        if (speed <= 100) {\n            speedClass = 'speed0-100';\n        }\n        else if (speed > 100 && speed <= 512) {\n            speedClass = 'speed100-512';\n        }\n        else if (speed > 512 && speed <= 2048) {\n            speedClass = 'speed512-2048';\n        }\n        else if (speed > 2048 && speed <= 4096) {\n            speedClass = 'speed2048-4096';\n        }\n        else if (speed > 4096) {\n            speedClass = 'speed4096';\n        }\n        else {\n            speedClass = 'speedunknown';\n        }\n        return speedClass;\n    }\n\n    /**\n     * Helper function for finding the smallest bounding box\n     * of a list of nodes.\n     * @param nodes\n     */\n    function findBoundingBox(nodes) {\n\n        var topLeft = {x: Number.MAX_VALUE, y: Number.MAX_VALUE};\n        var topRight = {x: -Number.MAX_VALUE, y: Number.MAX_VALUE};\n        var botLeft = {x: Number.MAX_VALUE, y: -Number.MAX_VALUE};\n        var botRight = {x: -Number.MAX_VALUE, y: -Number.MAX_VALUE};\n\n        _.each(nodes, function (node) {\n\n            if (node.y < (topLeft.y && topRight.y)) {\n                topLeft.y = topRight.y = node.y;\n            }\n            if (node.y > (botLeft.y && botRight.y)) {\n                botLeft.y = botRight.y = node.y;\n            }\n            if (node.x < (topLeft.x && botLeft.x)) {\n                topLeft.x = botLeft.x = node.x;\n            }\n            if (node.x > (topRight.x && botRight.x)) {\n                topRight.x = botRight.x = node.x;\n            }\n        });\n\n        var dimensions = {\n            width: Math.abs(botLeft.x - topRight.x),\n            height: Math.abs(botRight.y - topLeft.y)\n        };\n\n        var center = {\n            xCenter: (topLeft.x + botRight.x) / 2,\n            yCenter: (topRight.y + botLeft.y) / 2\n        };\n\n        return _.extend({\n            topLeft: topLeft,\n            topRight: topRight,\n            botLeft: botLeft,\n            botRight: botRight\n        }, dimensions, center);\n    }\n\n\n    function getTrafficCSSforLink(link) {\n        var inCss = UndefinedLoad;\n        var outCss = UndefinedLoad;\n\n        if (link.traffic !== undefined && !_.isEmpty(link.traffic)) {\n\n            if (_.isArray(link.edges)) {\n                inCss = _.max(link.traffic.edges, function (edge) {\n                    return edge.source.load_in_percent;\n                }).source.css;\n                outCss = _.max(link.traffic.edges, function (edge) {\n                    return edge.target.load_in_percent;\n                }).target.css;\n            } else if (link.traffic.traffic_data !== undefined) {\n                inCss = link.traffic.traffic_data.source.css;\n                outCss = link.traffic.traffic_data.target.css;\n            }\n\n        }\n\n        return [\n            {percent: 0, css: inCss},\n            {percent: 50, css: inCss},\n            {percent: 51, css: outCss},\n            {percent: 100, css: outCss}\n        ];\n    }\n\n    return GraphView;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/models.js",
    "content": "define([\n    'plugins/csrf-utils',\n    'underscore',\n    'backbone'\n], function (CsrfUtils) {\n    /**\n     * Models for Netmap\n     */\n\n    const Node = Backbone.Model.extend({\n        idAttribute: 'id',\n\n        initialize: function () {\n            this.set('node', this.get('id'));\n        }\n    });\n    const csrfToken = CsrfUtils.getCsrfToken();\n    const NodePositions = Backbone.Model.extend({\n        idAttribute: 'viewid',\n        defaults: {\n            data: []\n        },\n\n        url: function () {\n            return 'views/' + this.get('viewid') + '/nodepositions/update/';\n        },\n\n        save: function (attrs, options) {\n            options = options || {};\n            options.headers = {\n                ...options.headers,\n                'X-CSRFToken': csrfToken\n            };\n            return Backbone.Model.prototype.save.call(this, attrs, options);\n        }\n    });\n\n    const Link = Backbone.Model.extend({\n        defaults: {\n            traffic: {}\n        }\n    });\n\n    const Vlan = Backbone.Model.extend({\n        idAttribute: 'nav_vlan'\n    });\n\n    /**\n     * Not to be confused with the 'view'-concept in backbone itself.\n     * This is a data model which encapsulates a number of options and filters\n     * over how the netmap topology graph is displayed.\n     */\n    const NetmapView = Backbone.Model.extend({\n        idAttribute: 'viewid',\n\n        defaults: {\n            timestamp: new Date(),\n            title: 'New view',\n            description: '',\n            is_public: true,\n            is_user_default: false,\n            topology: 2,\n            zoom: '0,0;0.5',\n            display_orphans: false,\n            display_elinks: false,\n            displayTopologyErrors: false,\n\n            categories: [\n                'GW', 'GSW', 'SW', 'EDGE', 'WLAN', 'SRV', 'OTHER', 'ENV', 'POWER'\n            ],\n            location_room_filter: ''\n        },\n\n        initialize: function () {\n\n            if (this.get('display_elinks')) {\n                this.get('categories').push('ELINK');\n            }\n        },\n\n        url: function () {\n            if (this.isNew()) {\n                return 'views/create/';\n            }\n            return 'views/' + this.id + '/';\n        }\n    });\n\n    return {\n        Node: Node,\n        NodePositions: NodePositions,\n        Link: Link,\n        Vlan: Vlan,\n        NetmapView: NetmapView\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/netmap/netmap.js",
    "content": "require([\n    'netmap/graph_view',\n    'netmap/control_view',\n\n], function (GraphView, ControlView) {\n\n    $(function () {\n\n        // Test if browser is IE and, if so, is it supported.\n        if (navigator.appVersion.indexOf('MSIE') !== -1) {\n            var version = parseFloat(navigator.appVersion.split(\"MSIE\")[1]);\n            var docMode = document.documentMode ? document.documentMode : 0;\n            if (version < 9 || docMode < 9) {\n                alert('Your version of Internet Explorer is too old to run Netmap.' +\n                    ' Please upgrade to IE9 or make sure DocumentMode is set to 9 or newer');\n            }\n        }\n\n        // Disable caching for netmap\n        $.ajaxSetup({ cache: false });\n        $.ajaxSetup({ timeout: 240000 });\n\n        var controlView = new ControlView();\n        new GraphView({netmapView: controlView.currentView});\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/networkexplorer.js",
    "content": "require(['plugins/network_tree'], function (NetworkTree) {\n\n    function fadeIn(search_form) {\n        search_form.fadeTo('normal', 1.0);\n    }\n    function fadeOut(search_form) {\n        search_form.fadeTo('normal', 0.5);\n    }\n    function submitForm(networkTree, search_form, working) {\n        fadeOut(search_form);\n        working.css('visibility', 'visible');\n\n        $.getJSON(\n            'search/',\n            search_form.serialize()\n        )\n            .done(function (data) { parseResult(networkTree, data); })\n            .fail(function (response) {\n                const errors = response?.responseJSON?.errors;\n                if (!errors) {\n                    return notifyFail('Search failed!');\n                }\n                const errorMsg = Object.values(errors)\n                    .flat()\n                    .join(', ');\n                notifyFail(errorMsg);\n            })\n            .always(\n                function () {\n                    fadeIn(search_form);\n                    working.css('visibility', 'hidden');\n                }\n            );\n    }\n    function parseResult(networkTree, data) {\n        networkTree.search(data);\n    }\n    function notifyFail(text) {\n        var notify_area = $('#notify_area');\n        notify_area.html(\n            '<div data-nav-alert class=\"alert-box error\">' +\n                text +\n                '<a href=\"#\" class=\"close\">&times;</a>' +\n            '</div>'\n        );\n    }\n\n    $(document).ready(function () {\n        var working = $('#working');\n        var search_form = $('#search-form');\n        var networkTree = new NetworkTree.TreeView({\n            model: new NetworkTree.Tree()\n        });\n        search_form.submit(function (e) {\n            e.preventDefault();\n            submitForm(networkTree, search_form, working);\n        });\n\n        networkTree.model.expand();\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/accordion_maker.js",
    "content": "define([], function () {\n\n    var triggerWidth = 640;  // Width to trigger accordion on\n\n    function accordionMaker($elements) {\n        showContent($elements);\n\n        $(window).resize(function () {\n            showContent($elements);\n        });\n    }\n\n    function showContent($elements) {\n        if ($(window).width() > triggerWidth && isAccordion($elements)) {\n            convertToTabs($elements);\n        } else if ($(window).width() < triggerWidth && !isAccordion($elements)) {\n            convertToAccordion($elements);\n        }\n        $elements.show();\n    }\n\n    function convertToTabs($elements) {\n        $elements.each(function (index, element) {\n            var $element = $(element),\n                $content = $element.find('.accordion-content:first'),\n                $active = $element.find('.tabactive:first');\n\n            $element.hide();\n            $element.removeClass('accordion').addClass('tabs');\n            $content.removeClass('accordion-content').addClass('tabcontent');\n            $content.appendTo($element);\n        });\n    }\n\n    function convertToAccordion($elements) {\n        $elements.each(function (index, element) {\n            var $element = $(element),\n                $content = $element.find('.tabcontent:first'),\n                $active = $element.find('.tabactive:first');\n\n            $element.hide();\n            $element.removeClass('tabs').addClass('accordion');\n            $content.removeClass('tabcontent').addClass('accordion-content');\n            $content.appendTo($active);\n        });\n\n    }\n\n    function isAccordion($elements) {\n        return $elements.hasClass('accordion');\n    }\n\n    return accordionMaker;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/alert.js",
    "content": "define([], function () {\n    \"use strict\";\n\n    function init() {\n        // Prevent double initialization\n        if (document.body.dataset.alertInitialized) return;\n        document.body.dataset.alertInitialized = \"true\";\n\n        // Target clicks specifically within alert boxes\n        document.addEventListener('click', function (e) {\n            const alertBox = e.target.closest('[data-nav-alert]');\n            if (!alertBox) return;\n\n            // Handle close buttons\n            if (e.target.closest('.close')) {\n                e.preventDefault();\n                e.stopPropagation();\n                closeAlert(alertBox);\n            }\n        });\n    }\n\n    function closeAlert(alertBox) {\n        if (!alertBox) return;\n\n        alertBox.classList.add('alert-close');\n\n        const handleTransitionEnd = function (e) {\n            if (e.target === alertBox) {\n                alertBox.removeEventListener('transitionend', handleTransitionEnd);\n                alertBox.remove();\n            }\n        };\n\n        alertBox.addEventListener('transitionend', handleTransitionEnd);\n    }\n\n    // Auto-initialize when DOM is ready\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n\n    return {\n        init: init,\n        close: closeAlert,\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/checkbox_selector.js",
    "content": "define([], function () {\n    /*\n     * Create a checkbox on node, that when clicked on\n     * checks and unchecks the checkboxes with selector\n     */\n\n    function CheckboxSelector(node, selector) {\n        this.node = typeof node === 'string' ? $(node) : node;\n        this.selector = selector;\n    }\n\n    CheckboxSelector.prototype.add = function () {\n        var checkbox = $('<input type=\"checkbox\"/>');\n        var that = this;\n        this.node.append(checkbox);\n        checkbox.change(function() {\n            $(that.selector).prop(\"checked\", checkbox.prop('checked'));\n        });\n    };\n\n    return CheckboxSelector;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/counterdisplay.js",
    "content": "define([\"jquery\"], function () {\n    function CounterDisplay(template, parentId, value, unit) {\n        this.template = template;\n        this.unit = unit;\n        this.node = $('#' + parentId);\n        this.refresh(value);\n    }\n\n    CounterDisplay.prototype.refresh = function (value) {\n        this.node.html(this.template({ 'value': value, 'unit': this.unit }));\n    };\n\n    return CounterDisplay;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/csrf-utils.js",
    "content": "/**\n * CSRF utility functions for AJAX requests.\n * Django's recommended approach is to read the token from the cookie.\n * See: https://docs.djangoproject.com/en/5.0/howto/csrf/\n *\n * This module works as both a standalone script (exposes window.getCsrfToken)\n * and as a RequireJS module for compatibility with existing code.\n */\n(function(root) {\n    function getCsrfToken() {\n        const name = 'csrftoken=';\n        if (document.cookie && document.cookie !== '') {\n            for (const part of document.cookie.split(';')) {\n                const cookie = part.trim();\n                if (cookie.startsWith(name)) {\n                    return decodeURIComponent(cookie.substring(name.length));\n                }\n            }\n        }\n        return null;\n    }\n\n    // Expose globally for standalone usage\n    root.getCsrfToken = getCsrfToken;\n\n    // Also define as RequireJS module if available\n    if (typeof define === 'function' && define.amd) {\n        define([], function () {\n            return {\n                getCsrfToken: getCsrfToken\n            };\n        });\n    }\n})(window);\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/d3_sparkline.js",
    "content": "/**\n * D3-based sparkline charts to replace jquery-sparkline\n *\n * Supports two chart types:\n * - line: Simple line chart with optional tooltips\n * - bullet: Horizontal bar showing value against max with optional color ranges\n *\n * Tooltip formatter signature:\n * - Line: tooltipFormatter({x, y, color}) - x/y are data point values\n * - Bullet: tooltipFormatter({el, values}) - el is the container DOM element, values is data array\n */\ndefine(function (require) {\n\n    const d3 = require('d3v7');\n\n    const defaults = {\n        line: {\n            width: 100,\n            height: 20,\n            strokeColor: '#00f',\n            strokeWidth: 1,\n            fillColor: 'rgba(0, 0, 255, 0.1)',\n            spotColor: '#f80',\n            minSpotColor: '#f80',\n            maxSpotColor: '#f80',\n            spotRadius: 1.5,\n            tooltipFormatter: null\n        },\n        bullet: {\n            width: null,  // null means 100%\n            height: 20,\n            performanceColor: 'lightsteelblue',\n            rangeColors: ['#fff'],\n            tooltipFormatter: null\n        }\n    };\n\n    /**\n     * Create a line sparkline\n     * @param {HTMLElement|jQuery} container - Container element\n     * @param {Array} data - Array of [x, y] pairs or just y values\n     * @param {Object} options - Configuration options\n     */\n    function lineSparkline(container, data, options) {\n        const el = container.jquery ? container[0] : container;\n        if (!el) {\n            return;\n        }\n        const opts = mergeOptions(defaults.line, options);\n\n        // Clear any existing content\n        el.innerHTML = '';\n\n        if (!data || data.length === 0) {\n            return;\n        }\n\n        // Normalize data to [x, y] pairs\n        const normalizedData = normalizeLineData(data);\n\n        // Handle percentage width (e.g. '100%') or use numeric value\n        let width = opts.width;\n        if (typeof opts.width === 'string' && opts.width.endsWith('%')) {\n            width = el.clientWidth || 100;\n        }\n        const height = opts.height;\n\n        const svg = d3.select(el).append('svg')\n            .attr('width', width)\n            .attr('height', height)\n            .style('display', 'inline-block');\n\n        const xExtent = d3.extent(normalizedData, d => d[0]);\n        const yExtent = d3.extent(normalizedData, d => d[1]);\n\n        // Ensure y range is not zero\n        if (yExtent[0] === yExtent[1]) {\n            yExtent[0] = yExtent[0] - 1;\n            yExtent[1] = yExtent[1] + 1;\n        }\n\n        const x = d3.scaleLinear()\n            .domain(xExtent)\n            .range([1, width - 1]);\n\n        const y = d3.scaleLinear()\n            .domain(yExtent)\n            .range([height - 2, 2]);\n\n        const line = d3.line()\n            .x(d => x(d[0]))\n            .y(d => y(d[1]))\n            .defined(d => d[1] !== null);\n\n        // Draw fill area if fillColor is set\n        if (opts.fillColor) {\n            const area = d3.area()\n                .x(d => x(d[0]))\n                .y0(height)\n                .y1(d => d[1] === null ? height : y(d[1]))\n                .defined(d => d[1] !== null);\n\n            svg.append('path')\n                .datum(normalizedData)\n                .attr('d', area)\n                .attr('fill', opts.fillColor);\n        }\n\n        // Draw line\n        svg.append('path')\n            .datum(normalizedData)\n            .attr('d', line)\n            .attr('fill', 'none')\n            .attr('stroke', opts.strokeColor)\n            .attr('stroke-width', opts.strokeWidth);\n\n        // Draw spot dots at min, max, and last data points\n        drawSpots(svg, normalizedData, x, y, opts);\n\n        // Add tooltip functionality if formatter provided\n        if (opts.tooltipFormatter) {\n            addLineTooltip(svg, normalizedData, x, y, opts, width, height);\n        }\n\n        return svg;\n    }\n\n    /**\n     * Create a bullet sparkline (horizontal bar with value indicator)\n     * @param {HTMLElement|jQuery} container - Container element\n     * @param {Array} data - Array: [null, value, ...ranges] - first null is ignored, second is value, rest are range boundaries\n     * @param {Object} options - Configuration options\n     */\n    function bulletSparkline(container, data, options) {\n        const el = container.jquery ? container[0] : container;\n        if (!el) {\n            return;\n        }\n        const opts = mergeOptions(defaults.bullet, options);\n\n        // Clear any existing content\n        el.innerHTML = '';\n\n        if (!data || data.length < 2) {\n            return;\n        }\n\n        // Parse bullet data: [null, value, max] or [null, value, threshold1, threshold2, ...]\n        const value = data[1];\n        const ranges = data.slice(2).filter(v => v !== null);\n\n        if (ranges.length === 0) {\n            return;\n        }\n\n        const max = Math.max(...ranges);\n\n        let width = el.clientWidth || 100;\n        if (opts.width && opts.width !== '100%') {\n            width = opts.width;\n        }\n        const height = opts.height;\n\n        const svg = d3.select(el).append('svg')\n            .attr('width', width)\n            .attr('height', height)\n            .style('display', 'inline-block');\n\n        const x = d3.scaleLinear()\n            .domain([0, max])\n            .range([0, width]);\n\n        // Draw range backgrounds (from largest to smallest so colors layer correctly)\n        const sortedRanges = ranges.slice().sort((a, b) => b - a);\n        const rangeColors = opts.rangeColors.slice();\n\n        // Extend colors if not enough provided\n        while (rangeColors.length < sortedRanges.length) {\n            rangeColors.push(rangeColors[rangeColors.length - 1] || '#ddd');\n        }\n\n        sortedRanges.forEach((rangeVal, i) => {\n            svg.append('rect')\n                .attr('x', 0)\n                .attr('y', 0)\n                .attr('width', x(rangeVal))\n                .attr('height', height)\n                .attr('fill', rangeColors[i]);\n        });\n\n        // Draw value bar\n        if (value !== null) {\n            const barHeight = height * 0.4;\n            const barY = (height - barHeight) / 2;\n\n            svg.append('rect')\n                .attr('x', 0)\n                .attr('y', barY)\n                .attr('width', x(Math.min(value, max)))\n                .attr('height', barHeight)\n                .attr('fill', opts.performanceColor);\n        }\n\n        // Add tooltip if formatter provided\n        if (opts.tooltipFormatter) {\n            addBulletTooltip(svg, el, data, opts);\n        }\n\n        return svg;\n    }\n\n    /**\n     * Draw spot dots at min, max, and last data points\n     */\n    function drawSpots(svg, data, xScale, yScale, opts) {\n        const validData = data.filter(d => d[1] !== null);\n        if (validData.length === 0) {\n            return;\n        }\n\n        let minPoint = validData[0];\n        let maxPoint = validData[0];\n        for (const d of validData) {\n            if (d[1] < minPoint[1]) minPoint = d;\n            if (d[1] > maxPoint[1]) maxPoint = d;\n        }\n\n        const drawDot = (point, color) => {\n            if (color) {\n                svg.append('circle')\n                    .attr('cx', xScale(point[0]))\n                    .attr('cy', yScale(point[1]))\n                    .attr('r', opts.spotRadius)\n                    .attr('fill', color);\n            }\n        };\n\n        drawDot(minPoint, opts.minSpotColor);\n        drawDot(maxPoint, opts.maxSpotColor);\n        drawDot(validData[validData.length - 1], opts.spotColor);\n    }\n\n    /**\n     * Normalize line data to [x, y] pairs\n     */\n    function normalizeLineData(data) {\n        if (!Array.isArray(data[0])) {\n            // Just y values, generate x indices\n            return data.map((y, i) => [i, y]);\n        }\n        return data;\n    }\n\n    /**\n     * Merge user options with defaults\n     */\n    function mergeOptions(defaults, options) {\n        const result = { ...defaults };\n        if (options) {\n            Object.assign(result, options);\n        }\n        return result;\n    }\n\n    /**\n     * Add tooltip functionality to line sparkline\n     */\n    function addLineTooltip(svg, data, xScale, yScale, opts, width, height) {\n        const tooltip = createTooltip();\n\n        // Create invisible overlay for mouse tracking\n        const overlay = svg.append('rect')\n            .attr('width', width)\n            .attr('height', height)\n            .attr('fill', 'transparent')\n            .style('cursor', 'crosshair');\n\n        // Add vertical line indicator\n        const indicator = svg.append('line')\n            .attr('y1', 0)\n            .attr('y2', height)\n            .attr('stroke', '#666')\n            .attr('stroke-width', 1)\n            .style('display', 'none');\n\n        // Add dot indicator\n        const dot = svg.append('circle')\n            .attr('r', 3)\n            .attr('fill', opts.strokeColor)\n            .style('display', 'none');\n\n        overlay.on('mousemove', function(event) {\n            const mouse = d3.pointer(event, this);\n            const xValue = xScale.invert(mouse[0]);\n\n            // Find closest data point\n            const closest = findClosestPoint(data, xValue);\n            if (closest && closest[1] !== null) {\n                const px = xScale(closest[0]);\n                const py = yScale(closest[1]);\n\n                indicator\n                    .attr('x1', px)\n                    .attr('x2', px)\n                    .style('display', null);\n\n                dot\n                    .attr('cx', px)\n                    .attr('cy', py)\n                    .style('display', null);\n\n                const tooltipData = {\n                    x: closest[0],\n                    y: closest[1],\n                    color: opts.strokeColor\n                };\n                const html = opts.tooltipFormatter(tooltipData);\n                showTooltip(tooltip, html, event);\n            }\n        });\n\n        overlay.on('mouseout', () => {\n            indicator.style('display', 'none');\n            dot.style('display', 'none');\n            hideTooltip(tooltip);\n        });\n    }\n\n    /**\n     * Add tooltip functionality to bullet sparkline\n     */\n    function addBulletTooltip(svg, el, data, opts) {\n        const tooltip = createTooltip();\n\n        svg.on('mouseover', (event) => {\n            const tooltipData = {\n                el: el,\n                values: data\n            };\n            const html = opts.tooltipFormatter(tooltipData);\n            showTooltip(tooltip, html, event);\n        });\n\n        svg.on('mouseout', () => {\n            hideTooltip(tooltip);\n        });\n    }\n\n    /**\n     * Find the closest data point to a given x value using binary search\n     */\n    function findClosestPoint(data, xValue) {\n        if (data.length === 0) {\n            return null;\n        }\n        if (data.length === 1) {\n            return data[0];\n        }\n\n        let low = 0;\n        let high = data.length - 1;\n\n        while (high - low > 1) {\n            const mid = Math.floor((low + high) / 2);\n            if (data[mid][0] <= xValue) {\n                low = mid;\n            } else {\n                high = mid;\n            }\n        }\n\n        // Return the closer of the two adjacent points\n        const distLow = Math.abs(data[low][0] - xValue);\n        const distHigh = Math.abs(data[high][0] - xValue);\n        return distLow <= distHigh ? data[low] : data[high];\n    }\n\n    /**\n     * Create tooltip element\n     */\n    function createTooltip() {\n        const existing = document.getElementById('d3-sparkline-tooltip');\n        if (existing) {\n            return existing;\n        }\n\n        const tooltip = document.createElement('div');\n        tooltip.id = 'd3-sparkline-tooltip';\n        tooltip.className = 'jqstooltip';  // Reuse existing sparkline tooltip styles\n        tooltip.style.cssText = `position: fixed; display: none; z-index: 10000;\n            background: #333; color: #fff; padding: 5px 10px; border-radius: 3px;\n            font-size: 12px; pointer-events: none;`;\n        document.body.appendChild(tooltip);\n        return tooltip;\n    }\n\n    /**\n     * Show tooltip at mouse position\n     */\n    function showTooltip(tooltip, html, event) {\n        tooltip.innerHTML = html;\n        tooltip.style.display = 'block';\n\n        // Position near mouse\n        let x = event.clientX + 10;\n        let y = event.clientY + 10;\n\n        // Keep on screen\n        const rect = tooltip.getBoundingClientRect();\n        if (x + rect.width > window.innerWidth) {\n            x = event.clientX - rect.width - 10;\n        }\n        if (y + rect.height > window.innerHeight) {\n            y = event.clientY - rect.height - 10;\n        }\n\n        tooltip.style.left = `${x}px`;\n        tooltip.style.top = `${y}px`;\n    }\n\n    /**\n     * Hide tooltip\n     */\n    function hideTooltip(tooltip) {\n        tooltip.style.display = 'none';\n    }\n\n    // Export API\n    return {\n        line: lineSparkline,\n        bullet: bulletSparkline\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/fullscreen.js",
    "content": "/**\n * Big thanks to https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode\n *\n * NOTE: Fullscreen requests need to be called from within an event handler\n * or otherwise they will be denied.\n *\n * Written to be jQuery independent\n *\n * Usage:\n * var map = document.getElementById(mapSelector),\n * toggler = fullscreen.createFullscreenToggler(map, true);\n *\n * Overwrite default style:\n * var toggler = fullscreen.createFullscreenToggler(map, true);\n * toggler.style.right = 20px;\n * toggler.style['background-color'] = 'black';\n */\ndefine([], function () {\n\n    /**\n     * Toggle fullscreen mode for an element or document if none\n     * @param {HTMLElement} [element] Element to toggle fullscreen for\n     */\n    function toggleFullscreen(element) {\n        if (isFullscreenSupported()) {\n            if (isInFullscreen()) {\n                exitFullscreen();\n            } else {\n                requestFullscreen(element);\n            }\n        } else {\n            console.log(\"Fullscreen is not supported by this browser\");\n        }\n    }\n\n    /**\n     * Returns if fullscreen mode is supported in this browser or not\n     * @returns {boolean}\n     */\n    function isFullscreenSupported() {\n        return document.fullscreenEnabled ||\n            document.webkitFullscreenEnabled ||\n            document.mozFullScreenEnabled ||\n            document.msFullscreenEnabled || false;\n    }\n\n    /**\n     * Returns if we are in fullscreen mode or not\n     * @returns {boolean}\n     */\n    function isInFullscreen() {\n        return document.fullscreenElement ||\n            document.mozFullScreenElement ||\n            document.webkitFullscreenElement ||\n            document.msFullscreenElement || false;\n    }\n\n    /**\n     * Exit fullscreen mode\n     */\n    function exitFullscreen() {\n        if (document.exitFullscreen) {\n            document.exitFullscreen();\n        } else if (document.msExitFullscreen) {\n            document.msExitFullscreen();\n        } else if (document.mozCancelFullScreen) {\n            document.mozCancelFullScreen();\n        } else if (document.webkitExitFullscreen) {\n            document.webkitExitFullscreen();\n        }\n    }\n\n    /**\n     * Request fullscreen for this element or the document if none\n     * @param {HTMLElement} [element] Element to toggle fullscreen for\n     */\n    function requestFullscreen(element) {\n        element = element || document.documentElement;\n        if (element.requestFullscreen) {\n            element.requestFullscreen();\n        } else if (element.msRequestFullscreen) {\n            element.msRequestFullscreen();\n        } else if (element.mozRequestFullScreen) {\n            element.mozRequestFullScreen();\n        } else if (element.webkitRequestFullscreen) {\n            element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n        }\n    }\n\n    /**\n     * Example fullscreentoggler. Adjust styles as needed. Remember to\n     * add it to document, or set append flag.\n     * @param {HTMLElement} [element] Optional element to trigger fullscreen on\n     * @param {boolean} [append] Append trigger to element or not, default false\n     * @returns {HTMLElement}\n     */\n    function createFullscreenToggler(element, append) {\n        element.style.position = 'relative';\n        var button = document.createElement('button'),\n            icon = document.createElement('i');\n        button.className = 'tiny';\n        icon.className = 'fa fa-arrows-alt fa-lg';\n        button.appendChild(icon);\n\n        button.style.position = 'absolute';\n        button.style.right = '10px';\n        button.style.top = '10px';\n        button.style['z-index'] = 999;\n\n        if (typeof element !== 'undefined') {\n            if (element instanceof jQuery) {\n                element = element[0];\n            }\n            button.onclick = function() {\n                toggleFullscreen(element);\n            };\n        }\n\n        if (append) {\n            element.appendChild(button);\n        }\n\n        return button;\n    }\n\n\n    return {\n        'toggleFullscreen': toggleFullscreen,\n        'isFullscreenSupported': isFullscreenSupported,\n        'isInFullscreen': isInFullscreen,\n        'exitFullscreen': exitFullscreen,\n        'requestFullscreen': requestFullscreen,\n        'createFullscreenToggler': createFullscreenToggler\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/gauge.js",
    "content": "define(function (require, exports, module) {\n\n    var d3 = require('d3');\n\n    /*\n     Gauge implementation in D3. Heavily inspired by JustGage - http://justgage.com/\n\n     TODO: Scale fonts based on radius\n     TODO: Proper inner shadow on both arcs.\n\n     */\n\n    function JohnGauge(config) {\n        var node = config.node,\n            radius = config.radius || 100,\n            width = 2 * radius,\n            ir = radius * 0.6,\n            pi = Math.PI,\n            min = config.min || 0,\n            max = config.max || 100,\n            value = config.value || 0,\n            url = config.url || null,\n            refreshInterval = config.refreshInterval || 60, // seconds\n            invertScale = config.invertScale,\n            thresholds = config.thresholds || [];\n\n        this.symbol = config.symbol || '';\n        this.unit = config.unit || '';\n        this.animationSpeed = 1000;  // Speed of value transitions\n\n        /* Create SVG element */\n        var vis = d3.select(node).append('svg')\n            .attr(\"width\", width)\n            .attr(\"height\", radius)\n            .append(\"svg:g\")\n            .attr(\"transform\", \"translate(\" + radius + \",\" + radius + \")\");\n        this.vis = vis;\n\n        /* Create linear scale for start and end points */\n        this.myScale = d3.scale.linear().domain([min, max]).range([-90 * (pi/180), 90 * (pi/180)]);\n\n        /* Create linear scale for color transitions */\n        this.color = this.createColorScale(min, max, thresholds, invertScale);\n\n        this.fontSizeScale = d3.scale.linear().domain([50, 150]).range([14, 30]);\n        this.smallfontSizeScale = d3.scale.linear().domain([50, 150]).range([8, 20]);\n\n        /* Define arc */\n        this.arc = d3.svg.arc().outerRadius(radius).innerRadius(ir).startAngle(this.myScale(min));\n\n        /* Create background arc with gradient */\n        var gradientId = this.createGradient(node);\n        vis.append('path')\n            .datum({ endAngle: this.myScale(max)})\n            .attr('d', this.arc)\n            .attr('fill', 'url(#' + gradientId + ')');\n\n        /* Create value arc */\n        this.valueArc = vis.append('path')\n            .datum({endAngle: this.myScale(min)})\n            .attr('fill', this.color(min))\n            .attr('opacity', '0.9')\n            .attr('d', this.arc);\n\n        /* Draw text elements */\n        this.valueText = this.createTexts(radius, ir, min, max);\n\n        /* Draw thresholds */\n        this.drawThresholds(thresholds);\n\n        /* If an url is set, fetch data from it */\n        if (url !== null) {\n            var self = this;\n            setInterval(function () {\n                self.loadData(url);\n            }, refreshInterval * 1000);\n            this.loadData(url);\n        } else {\n            /* Initialize gauge with given value */\n            this.refresh(value);\n        }\n    }\n\n    JohnGauge.prototype = {\n        loadData: function (url) {\n            var self = this;\n            d3.json(url, function (error, json) {\n                var datapoints = json[0].datapoints,\n                    value = datapoints[datapoints.length - 1][0] ||\n                            datapoints[datapoints.length - 2][0];\n                self.refresh(value);\n            });\n        },\n        refresh: function (inputValue) {\n            var self = this;\n            var value = Number(inputValue);\n\n            if (inputValue === null) {\n                this.valueText.text('N/A');\n                value = 0;\n            } else {\n                this.valueText.text(+(value.toFixed(1)) + this.symbol);\n            }\n\n            /* Transition arc and color to new value */\n            this.valueArc.transition().duration(this.animationSpeed).call(arcTween, value)\n                .transition().duration(this.animationSpeed).attr('fill', this.color(value));\n\n            function arcTween(transition, newValue) {\n                /* Calculates end angles while transitioning */\n                transition.attrTween('d', function (d) {\n                    var interpolate = d3.interpolate(d.endAngle, self.myScale(newValue));\n                    return function (t) {\n                        d.endAngle = interpolate(t);\n                        return self.arc(d);\n                    };\n                });\n            }\n\n        },\n        createTexts: function (radius, ir, min, max) {\n            /* Create text that displays value */\n            var valueText = this.vis.append('text')\n                .text(min + this.symbol)\n                .attr('y', -ir/2 + this.fontSizeScale(radius) / 2)\n                .attr('font-size', this.fontSizeScale(radius) + 'px')\n                .attr('fill', 'black')\n                .attr('font-weight', 'bold')\n                .attr('text-anchor', 'middle'),\n\n            /* Create text displaying min value */\n                minText = this.vis.append('text')\n                .text(min)\n                .attr('fill', '#b3b3b3')\n                .attr('font-size', this.smallfontSizeScale(radius) + 'px')\n                .attr('y', '0')\n                .attr('x', 5 - ir)\n                .attr('text-anchor', 'start'),\n\n            /* Create text displaying max value */\n                maxText = this.vis.append('text')\n                .text(max)\n                .attr('fill', '#b3b3b3')\n                .attr('font-size', this.smallfontSizeScale(radius) + 'px')\n                .attr('y', '0')\n                .attr('x', ir - 5)\n                .attr('text-anchor', 'end');\n\n            /* Create text displaying unit */\n                maxText = this.vis.append('text')\n                .text(this.addEllipsis(this.unit, 10))\n                .attr('fill', '#b3b3b3')\n                .attr('font-size', this.smallfontSizeScale(radius) + 'px')\n                .attr('y', '0')\n                .attr('text-anchor', 'middle');\n\n            return valueText;\n        },\n        addEllipsis: function(text, maxLength) {\n            if (text.length > maxLength) {\n                return text.substr(0, maxLength - 3) + '...';\n            }\n            return text;\n        },\n        getDomain: function(min, max, steps) {\n            var step = (max - min) / (steps - 1);\n            return _.range(steps).map(function(m) {\n                return min + (step * m);\n            });\n        },\n        getConfigThresholds: function(values) {\n            var min = this.findThreshold(values.thresholds, '<', _.max);\n            var max = this.findThreshold(values.thresholds, '>', _.min);\n            var colors = values.colors;\n\n            /* Create special range where the mid-range between the > and < is\n                considered \"green\" and the rest is considered out of bounds - \"red\"\n            */\n            if (min !== undefined && max !== undefined) {\n                colors = ['#FF4136', '#FFDC00', '#2ECC40', '#FFDC00', '#FF4136'];\n                if (max < min) {\n                    colors = ['#FF4136', '#FF4136'];\n                }\n            } else if (min !== undefined) {\n                colors = values.colors.reverse();\n            }\n            if (min === undefined) {\n                min = values.min;\n            }\n            if (max === undefined) {\n                max = values.max;\n            }\n            return {\n                min: min,\n                max: max,\n                colors: colors\n            };\n        },\n        createColorScale: function (min, max, thresholds, invert) {\n            var defaults = {\n                min: min,\n                max: max,\n                colors: ['#2ECC40', '#FFDC00', '#FF4136'],\n                thresholds: thresholds\n            };\n\n            var config = _.extend(defaults, this.getConfigThresholds(defaults));\n            var domain = this.getDomain(config.min, config.max, config.colors.length);\n\n            /* Special case for negative minimum - let it start blue and then\n               continue as normal after 0. This really doesn't work well with\n               inverse or several thresholds */\n            if (config.min < 0) {\n                config.colors = ['#0000FF'].concat(defaults.colors);\n                domain = [config.min, 0, config.max / 2, config.max];\n            }\n\n            if (invert) {\n                config.colors.reverse();\n            }\n\n            var scale = d3.scale.linear()\n                          .domain(domain)\n                          .interpolate(d3.interpolateRgb)\n                          .range(config.colors);\n            scale.clamp(true);  // Dont extrapolate\n            return scale;\n        },\n        createGradient: function (node) {\n            /* Greate gradient for background arc */\n            var gradientId = node.id + 'gradient';\n            var grads = this.vis.append(\"defs\")\n                .append(\"radialGradient\")\n                .attr(\"gradientUnits\", \"userSpaceOnUse\")\n                .attr(\"cx\", 0)\n                .attr(\"cy\", 0)\n                .attr(\"r\", \"100%\")\n                .attr(\"id\", gradientId);\n            grads.append(\"stop\").attr(\"offset\", \"10%\").style(\"stop-color\", \"gainsboro\");\n            grads.append(\"stop\").attr(\"offset\", \"50%\").style(\"stop-color\", \"#edebeb\");\n            grads.append(\"stop\").attr(\"offset\", \"90%\").style(\"stop-color\", \"gainsboro\");\n\n            return gradientId;\n        },\n        drawThresholds: function (thresholds) {\n            var self = this;\n            thresholds\n                .map(this.trimThreshold)\n                .forEach(this.createLineFromValue, this);\n        },\n        createLineFromValue: function (value) {\n            try {\n                var points = this.getLineCoords(value);\n                this.vis.append(\"line\")\n                    .attr('stroke-width', 1).attr('stroke', 'black')\n                    .attr(\"x1\", points.x1).attr(\"y1\", points.y1)\n                    .attr(\"x2\", points.x2).attr(\"y2\", points.y2);\n            } catch (error) {\n                console.log(\"Value outside max, cant draw threshold\");\n            }\n        },\n        getLineCoords: function (value) {\n            /* Get x and y coordinates for a specific value */\n            var path = this.arc({ endAngle: this.myScale(value)}),\n                defs = path.split(' '),\n                lineCoords = defs[3].split('A')[0].split('L'),\n                startPoint = lineCoords[0].split(','),\n                endPoint = lineCoords[1].split(',');\n\n            return { x1: startPoint[0], y1: startPoint[1], x2: endPoint[0], y2: endPoint[1]};\n        },\n        trimThreshold: function(threshold) {\n            return +threshold.replace(/\\D/, '');\n        },\n        findThreshold: function(thresholds, prefix, selectFunction) {\n            var candidates = _.map(_.filter(thresholds, function(t) {\n                return t.substr(0, 1) === prefix;\n            }), this.trimThreshold);\n            if (candidates.length > 0) {\n                return selectFunction(candidates);\n            }\n            return undefined;\n        }\n    };\n\n\n    return JohnGauge;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/graphfetcher.js",
    "content": "define([\n    'plugins/rickshaw_graph',\n    'libs/urijs/URI',\n    'spin'\n], function (RickshawGraph, URI, Spinner) {\n    /*\n     * GraphFetcher\n     *\n     * Automatically loads graphite graphs based on class attributes.\n     *\n     * See 'graphfetcher_controller' for global controls.\n     *\n     * Every graph needs the following:\n     * class='graphitegraph'\n     * data-url: The url of the controller returning the graph image\n     *   (you need to write this controller). GraphFetcher adds a 'timeframe'\n     *   parameter indicating timeframe. Valid timeframes are in the buttons\n     *   list.\n     * data-handler-id: If you have a button or something that shows the\n     *   graph, set this to the id of that element. Otherwise the graph is\n     *   loaded on page load.\n     *\n     * NB: Expected icon for indicating expandable is 'fa-chevron-right'\n     *\n     * config options:\n     * - hideAddGraphButton: Hides the button for adding graph as widget\n     * - linkTarget: if set will wrap a link around image (only valid if graph\n         is an image)\n     */\n\n    function GraphFetcher(node, urls, config) {\n        this.checkInput(node, urls);\n        this.node = node;\n        this.graphContainer = this.node.find('.rickshaw-container')[0];\n        this.urls = urls.split(';');\n        this.lastUrlIndex = -1;\n        this.urlIndex = 0;  // Index of this.urls\n        this.config = _.extend({}, config);\n\n        this.buttons = {\n            'day': 'Day',\n            'week': 'Week',\n            'month': 'Month',\n            'year': 'Year'\n        };\n        this.lastTimeFrame = '';\n        this.timeframe = 'day';\n        this.isOpen = false;\n        this.spinner = this.createSpinner();\n\n        this.isInitialized = false;\n        var handlerId = this.node.attr('data-handler-id');\n        if (handlerId) {\n            this.handler = $('#' + handlerId);\n            this.icon = this.handler.find('i');\n            this.addToggleHandler();\n        } else {\n            this.init();\n        }\n        return this;\n    }\n\n    GraphFetcher.prototype = {\n        init: function () {\n            if (!this.config.hideTimeIntervalButtons) {\n                this.addButtons();\n            }\n            this.loadGraph();\n            this.isInitialized = true;\n        },\n        addToggleHandler: function () {\n            var self = this;\n            $(this.handler).click(function () {\n                if (self.node.is(':visible')) {\n                    self.close();\n                } else {\n                    self.open();\n                }\n            });\n        },\n        close: function () {\n            this.isOpen = false;\n            this.node.hide();\n            this.icon.removeClass('fa-chevron-down').addClass('fa-chevron-right');\n        },\n        open: function () {\n            if (!this.isInitialized) {\n                this.init();\n            }\n            if (this.shouldReloadGraph()) {\n                this.loadGraph();\n            }\n            this.node.show();\n            this.isOpen = true;\n            this.icon.removeClass('fa-chevron-right').addClass('fa-chevron-down');\n        },\n        shouldReloadGraph: function () {\n            return (this.lastTimeFrame !== this.timeframe) || (this.lastUrlIndex !== this.urlIndex);\n        },\n        changeUrlIndex: function (index) {\n            if (this.urls.length > index) {\n                this.urlIndex = index;\n            }\n        },\n        checkInput: function (node, url) {\n            if (!(node instanceof jQuery && node.length)) {\n                throw new Error('Need a valid node to attach to');\n            }\n            if (typeof url !== \"string\") {\n                throw new Error('Need a string as url');\n            }\n        },\n        addButtons: function () {\n            var headerNode = $('<div>').appendTo(this.node);\n            this.headerNode = headerNode;\n\n            for (var key in this.buttons) {\n                if (this.buttons.hasOwnProperty(key)) {\n                    this.addButton(headerNode, key, this.buttons[key]);\n                }\n            }\n            if (this.graphContainer) {\n                this.appendToggleTrendCheckbox();\n            }\n            if (!this.config.hideAddGraphButton) {\n                this.appendAddGraphButton();\n            }\n        },\n        addButton: function (node, timeframe, text) {\n            var that = this;\n            var button = $('<button>').addClass('tiny secondary graph-button-' + timeframe).html(text);\n            button.click(function () {\n                that.timeframe = timeframe;\n                that.loadGraph();\n            });\n            button.appendTo(node);\n        },\n        appendAddGraphButton: function () {\n            var self = this,\n                button = $('<button>').addClass('tiny secondary right').text('Add graph to dashboard');\n            button.click(function () {\n                /* Image url is a redirect to graphite. Fetch proxy url and use\n                 that as preference for graph widget */\n                var url = new URI(self.generatedURL).removeQuery('format', ''),\n                    headRequest = $.ajax(url.toString(), {'type': 'HEAD'});\n                headRequest.done(function (data, status, xhr) {\n                    var proxyUrl = xhr.getResponseHeader('X-Where-Am-I');\n                    if (proxyUrl) {\n                        var request = $.post(NAV.addGraphWidgetUrl,\n                            {\n                                'url': new URI(proxyUrl).removeQuery('format').toString(),\n                                'target': window.location.pathname + window.location.hash\n                            });\n                        request.done(function () {\n                            button.removeClass('secondary').addClass('success');\n                        });\n                        request.fail(function () {\n                            button.removeClass('secondary').addClass('alert');\n                        });\n                    }\n                });\n            });\n            this.headerNode.append(button);\n        },\n        appendToggleTrendCheckbox: function () {\n            this.trends = $('<input type=\"checkbox\">');\n            var trendLabel = $('<label>').html('Show trends ').css({\n                display: 'inline-block',\n                'margin-left': '1em'\n            });\n            trendLabel.append(this.trends);\n            this.headerNode.append(trendLabel);\n            trendLabel.change(this.loadGraph.bind(this));\n        },\n        selectButton: function () {\n            $('button', this.headerNode).each(function (index, element) {\n                $(element).removeClass('active');\n            });\n            this.node.find('button.graph-button-' + this.timeframe).addClass('active');\n        },\n        loadGraph: function () {\n            this.lastTimeFrame = this.timeframe;\n            this.lastUrlIndex = this.urlIndex;\n            this.displayGraph(this.getUrl());\n            this.selectButton();\n        },\n        displayGraph: function (url) {\n            var self = this;\n\n            if (!this.graphContainer) {\n                // If we have no container, assume old loading with images.\n                var image = new Image();\n                image.src = url;\n                image.onload = function () {\n                    self.node.find('img, a').remove();\n                    self.node.prepend(image);\n                    if (self.config.linkTarget) {\n                        var link = $('<a>').attr('href', self.config.linkTarget);\n                        self.node.find('img').wrap(link);\n                    }\n                };\n                image.onerror = function () {\n                    self.node.find('img').remove();\n                    self.node.append(\"<span class='alert-box alert'>Error loading image</span>\");\n                };\n            } else {\n                $.get(url, function (data) {\n                    self.rickshawgraph = self.getMin(data) < 0 ?\n                                         new RickshawGraph(self.graphContainer, data, url, 'auto'):\n                                         new RickshawGraph(self.graphContainer, data, url);\n                });\n            }\n        },\n\n        /**\n         * Find minimum value for a dataset from Graphite\n         */\n        getMin: function(data) {\n            return _.min(data.map(function(d) {\n                return _.min(\n                    d.datapoints.filter(function(point) {\n                        return point[0] !== null;\n                    }).map(function(point) {\n                        return point[0];\n                    }));\n            }));\n        },\n\n        /**\n         * We expect the urls to be urls to graphite. This means that they\n         * should have parameters specifiying how to draw the graph.\n         */\n        getUrl: function () {\n            var self = this;\n            var url = this.urls[this.urlIndex];\n            var uri = new URI(url);\n            var addTimeShift = this.graphContainer && this.trends.is(':checked');\n\n            if (url.indexOf('?') >= 0) {\n                // If we have timeframe buttons use those for interval\n                // If we don't have buttons use 'from'-parameter\n                // If we have neither use default timeframe\n                var interval;\n                if (this.config.hideTimeIntervalButtons && uri.hasQuery('from')) {\n                    interval = uri.query(true).from;\n                } else {\n                    interval = '-1' + this.timeframe;\n                }\n\n                uri.setQuery({\n                    from: interval,\n                    width: this.node.width()\n                });\n\n                if (addTimeShift) {\n                    var targets = [].concat(uri.query(true).target);  // target is either list or string\n                    uri.addQuery('target', targets.map(function (target) {\n                        var timeshiftCall = 'timeShift(' + target + ',\"' + interval + '\")';\n                        var targetAlias = getSeriesName(target) + ' (' + getTimeDescription(self.timeframe) + ')';\n                        return 'alias(' + timeshiftCall + ', \"' + targetAlias + '\")';\n                    }));\n                }\n            } else {\n                uri.setQuery('timeframe', this.timeframe);\n            }\n\n            var generatedURL = uri.toString();\n            this.generatedURL = generatedURL;\n            return generatedURL;\n        },\n\n        createSpinner: function () {\n            var options = {};  // Who knows, maybe in the future?\n            return new Spinner(options);\n        }\n    };\n\n    /**\n     * @param {string} timeframe - Timeframe to map from */\n    function getTimeDescription(timeframe) {\n        var mappings = {\n            'd': 'day',\n            'w': 'week',\n            'm': 'month',\n            'y': 'year'\n        };\n\n        for (var time in mappings) {\n            if (mappings.hasOwnProperty(time)) {\n                if (timeframe.substr(0, 1) === time) {\n                    return '1 ' + mappings[time] + ' ago';\n                }\n            }\n        }\n    }\n\n    /** Assume optimistically that alias is always the last wrapped function */\n    function getSeriesName(target) {\n        if (target.match(/alias/)) {\n            var parts = target.split(',');\n            return parts[parts.length - 1].replace(/[\")]/g, '');\n        }\n        return target;\n    }\n\n    return GraphFetcher;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/graphfetcher_controller.js",
    "content": "require(['plugins/graphfetcher'], function (GraphFetcher) {\n    /*\n     * This plugin will provide global controls to the graphs if\n     * you wrap your graphs in an element with class 'nav-metrics-container'\n     * and provide some more elements.\n     *\n     * Example:\n     * <div class='nav-metrics-container'>\n     *   <div class=\"graphitegraph\" data-url=\"{% url 'interface-counter-graph' port.id 'Octets' %}\"></div>\n     *   <div class=\"graphitegraph\" data-url=\"{% url 'interface-counter-graph' port.id 'Octets' %}\"></div>\n     * </div>\n     *\n     * You can create buttons inside 'nav-metrics-controller' to open and\n     * close all graphs. These need the class 'all-graph-opener' and\n     * 'all-graph-closer' respectively.\n     *\n     * If you provide an element with the class 'all-graph-buttons', it will\n     * be populated with buttons for choosing timeframe for all graphs\n     */\n\n\n    /**\n     * A little helper thingie to make lazyloading a bit less messier\n     */\n    function GraphHandler($container, graphs) {\n        this.$container = $container;\n        this.graphs = graphs;\n        this.lastOpenedIndex = null;\n    }\n\n    GraphHandler.prototype = {\n        getLastOpenedNode: function() {\n            return this.lastOpenedIndex === null ? null : this.graphs[this.lastOpenedIndex].node[0];\n        },\n        openNext: function() {\n            var index = this.lastOpenedIndex === null ? 0 : this.lastOpenedIndex + 1;\n            if (index < this.graphs.length) {\n                this.graphs[index].open();\n                this.lastOpenedIndex = index;\n                return index;\n            }\n            return null;\n        },\n        openVisible: function() {\n            // Check if we are on a visible tab\n            if (!this.$container.is(':visible')) {\n                return;\n            }\n\n            var shouldOpenNext = false;\n            if (this.lastOpenedIndex === null) {\n                // Always open if nothing has been opened before\n                shouldOpenNext = true;\n            } else {\n                var bounds = this.getLastOpenedNode().getBoundingClientRect(),\n                    screenIsBelowLastGraph = bounds.bottom - $(window).height() < 0;\n                shouldOpenNext = screenIsBelowLastGraph && this.nextExists();\n            }\n\n            if (shouldOpenNext) {\n                this.openNext();\n                this.openVisible();\n            }\n        },\n        nextExists: function() {\n            return this.lastOpenedIndex < this.graphs.length - 1;\n        },\n        closeAll: function() {\n            for (var i = 0, l = this.graphs.length; i < l; i++) {\n                this.graphs[i].close();\n            }\n            this.lastOpenedIndex = null;\n        }\n    };\n    \n    /**\n     * Handler for showing and hiding all graphs. We apply a lazyloader when\n     * opening all graphs, so that graphs are opened when scrolling down the\n     * page.\n     */\n    function addToggleListeners($parent, graphs) {\n\n        var handler = new GraphHandler($parent, graphs);\n        \n        // Handler for the scroll event. Remember that this runs MANY times\n        var scrollHandler = function() {\n            handler.openVisible();\n        };\n\n        // Open button clicked. Open visible graphs and add scroll event handler\n        // for lazy loading\n        $parent.find('.all-graph-opener').click(function () {\n            handler.openVisible();\n            $(window).on('scroll', scrollHandler);\n        });\n\n        // Hide-button clicked. unbind event handler and close all graphs.\n        $parent.find('.all-graph-closer').click(function () {\n            handler.closeAll();\n            $(window).off('scroll', scrollHandler);\n        });\n    }\n\n    function addGraphUrlSwitcher($parent, graphs) {\n        /* Switch graph url index based on graph-switcher index */\n        $parent.find('.all-graph-url-switcher').each(function () {\n            var $switchers = $(this).find('.graph-switcher');\n            $switchers.each(function (index, element) {\n                if (index === 0) {\n                    $(element).addClass('active');\n                }\n                $(element).click(function () {\n                    $switchers.removeClass('active');\n                    $(this).addClass('active');\n                    for (var i = 0, l = graphs.length; i < l; i++) {\n                        graphs[i].changeUrlIndex(index);\n                        if (graphs[i].isOpen) {\n                            graphs[i].loadGraph();\n                        }\n                    }\n                });\n            });\n        });\n    }\n\n    function addTimeframeSwitcher($parent, graphs) {\n        /* Add buttons for choosing timeframe for all graphs */\n        $parent.find('.all-graph-buttons').each(function () {\n            var buttons = graphs[0].buttons, // We assume at least one graph\n                $container = $(this), first = true;\n\n            for (var key in buttons) {\n                if (buttons.hasOwnProperty(key)) {\n                    var button = $('<button>').addClass('tiny secondary graph-button-' + key).html(buttons[key]).appendTo(this);\n                    if (first) {\n                        button.addClass('active');\n                        first = false;\n                    }\n                }\n            }\n            $container.on('click', 'button', function (event) {\n                var $button = $(event.target), buttonClass = $button.attr('class'), timeframe = buttonClass.match(/graph-button-[a-z]+/)[0].split('-')[2];\n                for (var i = 0, l = graphs.length; i < l; i++) {\n                    graphs[i].timeframe = timeframe;\n                    if (graphs[i].isOpen) {\n                        graphs[i].loadGraph();\n                    }\n                }\n                $container.find('button').removeClass('active');\n                $button.addClass('active');\n            });\n        });\n    }\n\n    $(function () {\n        $('.nav-metrics-container').each(function (index, element) {\n            var $parent = $(element),\n                graphs = [];\n\n            /* Create all graphs and store them */\n            $parent.find('.graphitegraph').each(function () {\n                var $node = $(this);\n                try {\n                    graphs.push(new GraphFetcher($node, $node.attr('data-url')));\n                } catch (error) {\n                    console.error('Error initializing graphloader');\n                }\n            });\n\n            if (graphs.length > 0) {\n                addToggleListeners($parent, graphs);\n                addGraphUrlSwitcher($parent, graphs);\n                addTimeframeSwitcher($parent, graphs);\n            }\n\n        });\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/hover_highlight.js",
    "content": "define([], function () {\n\n    function HoverHighlight(node) {\n        this.node = typeof node === 'string' ? $(node) : node;\n        addHighlight(this.node);\n    }\n\n    function addHighlight(topNode) {\n        var bg_colors = {};\n        $('a[class^=\"task_\"]', topNode).hover(function () {\n            var shared_id = $(this).attr('class').match(/(task_\\d+)/)[1];\n            var color_id = $(this).attr('class').match(/bg(\\d{1})light/)[1];\n            bg_colors[shared_id] = color_id;\n            $(\".\" + shared_id).removeClass(\"bg\" + color_id + \"light\");\n            $(\".\" + shared_id).addClass(\"bg\" + color_id + \"dark\");\n        }, function () {\n            var shared_id = $(this).attr('class').match(/(task_\\d+)/)[1];\n            var color_id = bg_colors[shared_id];\n            $(\".\" + shared_id).removeClass(\"bg\" + color_id + \"dark\");\n            $(\".\" + shared_id).addClass(\"bg\" + color_id + \"light\");\n        });\n\n    }\n\n    return HoverHighlight;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/jquery_ui_helpers.js",
    "content": "/* The new jquery ui removes some trades some functionality\n   for flexibility. This means we need some helper functions */\ndefine([\"spin\", \"jquery\"], function (Spinner) {\n\n    function cacheRequest(event, ui) {\n        /* Cache is removed as an option in jquery-ui-1.10. Reimplement it */\n        if (ui.tab.data(\"loaded\")) {\n            event.preventDefault();\n            return;\n        }\n\n        ui.panel.css('min-height', '100px');\n        var spinner = new Spinner({'top': 10,'left': 10}).spin(ui.panel.get(0));\n        ui.jqXHR.done(function () {\n            ui.tab.data(\"loaded\", true);\n        });\n        ui.jqXHR.always(function () {\n            spinner.stop();\n        });\n    }\n\n    return {\n        'cacheRequest': cacheRequest\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/lightbox.js",
    "content": "define([\"jquery\"], function () {\n\n    let currentLightbox = null;\n    let currentIndex = 0;\n    let currentImages = [];\n\n    function init() {\n        // Use event delegation to handle all lightbox triggers and controls\n        document.addEventListener('click', handleClick);\n        document.addEventListener('keydown', handleKeydown);\n        return { openGallery, close: closeLightbox };\n    }\n\n    function handleClick(event) {\n        const trigger = event.target.closest('[data-lightbox]');\n        if (trigger) {\n            event.preventDefault();\n            openGallery(trigger.dataset.lightbox, trigger.href);\n            return;\n        }\n\n        if (!currentLightbox) return;\n\n        // Handle all lightbox controls through event delegation\n        if (event.target.matches('.lightbox-close') || event.target === currentLightbox) {\n            closeLightbox();\n        } else if (event.target.closest('.lightbox-prev')) {\n            navigate(-1);\n        } else if (event.target.closest('.lightbox-next')) {\n            navigate(1);\n        } else {\n            const thumbnail = event.target.closest('.lightbox-thumbnail-list li');\n            if (thumbnail) {\n                // Convert NodeList to array to use indexOf\n                const index = [...thumbnail.parentNode.children].indexOf(thumbnail);\n                showImage(index);\n            }\n        }\n    }\n\n    function handleKeydown(event) {\n        if (!currentLightbox?.classList.contains('show')) return;\n\n        const keyMap = {\n            'Escape': closeLightbox,\n            'ArrowRight': () => navigate(1),\n            'ArrowLeft': () => navigate(-1)\n        };\n\n        keyMap[event.key]?.();\n    }\n\n    function openGallery(galleryId, selectedSrc = null) {\n        currentLightbox = document.getElementById(`lightbox-${galleryId}`);\n        if (!currentLightbox) return;\n\n        // Build image collection from all triggers with the same gallery ID\n        currentImages = [...document.querySelectorAll(`[data-lightbox=\"${galleryId}\"]`)].map(trigger => ({\n            src: trigger.href,\n            thumbUrl: trigger.querySelector('img')?.src || trigger.href,\n            caption: trigger.dataset.title || trigger.title || ''\n        }));\n\n        // Find the selected image index, defaulting to 0 if not found\n        currentIndex = Math.max(0, currentImages.findIndex(img => img.src === selectedSrc));\n        showLightbox();\n    }\n\n    function showLightbox() {\n        currentLightbox.classList.add('show');\n        currentLightbox.style.display = 'block';\n        document.body.style.overflow = 'hidden'; // Prevent body scrolling\n\n        generateThumbnails();\n        showImage(currentIndex);\n    }\n\n    function closeLightbox() {\n        if (!currentLightbox) return;\n\n        currentLightbox.classList.remove('show');\n        // Delay hiding to allow CSS transitions to complete\n        setTimeout(() => {\n            currentLightbox.style.display = 'none';\n            document.body.style.overflow = '';\n            currentLightbox = null;\n        }, 300);\n    }\n\n    function generateThumbnails() {\n        const thumbnailList = currentLightbox.querySelector('.lightbox-thumbnail-list');\n        if (!thumbnailList) return;\n\n        // Generate thumbnails using template literals for better performance\n        thumbnailList.innerHTML = currentImages.map((image, index) =>\n            `<li><img src=\"${image.thumbUrl}\" alt=\"${image.caption}\" loading=\"lazy\"></li>`\n        ).join('');\n    }\n\n    function showImage(index) {\n        if (index < 0 || index >= currentImages.length) return;\n\n        currentIndex = index;\n        const image = currentImages[index];\n\n        const img = currentLightbox.querySelector('.lightbox-image');\n        const caption = currentLightbox.querySelector('.lightbox-caption');\n\n        if (img) {\n            img.src = image.src;\n            img.alt = image.caption;\n        }\n        if (caption) caption.textContent = image.caption;\n\n        // Update thumbnail selection state\n        currentLightbox.querySelectorAll('.lightbox-thumbnail-list li').forEach((thumb, i) => {\n            thumb.classList.toggle('active', i === index);\n        });\n    }\n\n    function navigate(direction) {\n        if (currentImages.length <= 1) return;\n\n        // Use modulo arithmetic for circular navigation\n        const newIndex = (currentIndex + direction + currentImages.length) % currentImages.length;\n        showImage(newIndex);\n    }\n\n    // Initialize when DOM is ready\n    $(() => {\n        const api = init();\n        window.openLightboxGallery = api.openGallery;\n    });\n\n    return { init };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/linear_gauge.js",
    "content": "define(function (require, exports, module) {\n\n    var d3 = require('d3');\n\n    /* Need a random id for the gradient */\n    function guid() {\n        function s4() {\n            return Math.floor((1 + Math.random()) * 0x10000)\n                .toString(16)\n                .substring(1);\n        }\n        return 'g' + s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n            s4() + '-' + s4() + s4() + s4();\n    }\n\n    /* Draw a vertical gauge that animates value changes */\n\n    function LinearGauge(config) {\n        this.element = config.element || document.querySelector('#' + config.nodeId);\n        this.url = config.url || null;\n        this.max = config.max || 8;\n        this.height = config.height || 150;\n        this.width = config.width || 40;\n        this.animationSpeed = 1500;\n        this.refreshInterval = 60;  // In seconds\n        this.precision = config.precision || null;  // Number of decimals for value\n        this.threshold = config.threshold || null;\n        this.color = config.color;  // Set a single color instead of using the gradient\n        this.gradientId = guid();\n        this.fill = config.color ? this.color : 'url(#' + this.gradientId + ')';\n\n        this.container = d3.select(this.element).append('svg')\n            .attr('width', this.width).attr('height', this.height)\n            .style('background-color', '#eee')\n            .style('border', '1px solid #aaaaaa');\n        this.createGradient();\n\n        var self = this;\n\n        // Specify scaling for y-axis\n        this.y = d3.scale.linear().domain([0, this.max]).range([this.height, 0]);\n\n        // Set data to zero, add group element\n        var group = this.container.selectAll('g'),\n            groupUpdate = group.data([0]),\n            groupEnter = groupUpdate.enter().append('g');\n\n        // Draw bar that indicates value\n        this.bar = groupEnter.append('rect').attr('y', function (d) {\n                return self.y(d);\n            }).attr('width', this.width).attr('height', function (d) {\n                return self.height - self.y(d);\n            }).attr('fill', this.fill);\n\n        // Draw value on bar\n        this.barText = groupEnter.append('text')\n            .attr('fill', '#555')\n            .attr('text-anchor', 'middle')\n            .attr('x', this.width / 2).attr('y', function (d) {\n                return self.y(d) + 3;\n            }).attr('dy', '0.85em').text(function (d) {\n                return d;\n            });\n\n        // Draw a line to better indicate value\n        this.barLine = groupEnter.append('line')\n            .attr('stroke', '#555')\n            .attr('x1', 0).attr('y1', function (d) {\n                return self.y(d);\n            }).attr('x2', this.width).attr('y2', function (d) {\n                return self.y(d);\n            });\n\n        if (this.url !== null) {\n            setInterval(function () {\n                self.loadData();\n            }, this.refreshInterval * 1000);\n            this.loadData();\n        } else {\n            self.update(0);\n        }\n    }\n\n    LinearGauge.prototype = {\n        createGradient: function () {\n            /* Create gradient to indicate severity of value */\n            var gradient = this.container\n                .append(\"svg:defs\").append(\"svg:linearGradient\")\n                .attr(\"id\", this.gradientId).attr(\"x1\", \"100%\").attr(\"y1\", \"100%\")\n                .attr(\"x2\", \"100%\").attr(\"y2\", \"0%\").attr('gradientUnits', 'userSpaceOnUse');\n            gradient.append(\"svg:stop\").attr(\"offset\", \"0%\").attr(\"stop-color\", \"lightgreen\");\n            gradient.append(\"svg:stop\").attr(\"offset\", \"50%\").attr(\"stop-color\", \"yellow\");\n            gradient.append(\"svg:stop\").attr(\"offset\", \"100%\").attr(\"stop-color\", \"red\");\n        },\n        loadData: function() {\n\n            var self = this;\n            d3.json(this.url, function (json, error) {\n                var datapoints = json[0].datapoints,\n                    value = datapoints[datapoints.length - 1][0] || datapoints[datapoints.length - 2][0];\n\n                if (self.precision !== null) {\n                    value = new Number(value).toFixed(self.precision);\n                }\n                self.update(value);\n            });\n    /*\n             var value = Math.floor(Math.random() * (this.max + 1));\n             this.update([value]);\n    */\n        },\n        update: function (data) {\n            var self = this;\n\n            if (this.precision != null && data > 0) {\n                data = data.toFixed(this.precision);\n            }\n\n            // Set a data attribute to indicate current value\n            this.container.attr('data-currentvalue', data);\n\n            // Update and transition bar\n            this.bar.data([data])\n                .transition()\n                .duration(this.animationSpeed)\n                .attr('y', function (d) {\n                    return self.y(d);\n                }).attr('height', function (d) {\n                    return self.height - self.y(d);\n                });\n\n            /* Make bar red if threshold is passed */\n            if (this.threshold && data > this.threshold) {\n                this.bar.attr('fill', 'red');\n                this.thresholdPassed = true;\n            } else if (this.thresholdPassed && data < this.threshold) {\n                this.bar.attr('fill', self.fill);\n            }\n\n            // Update and transition value\n            var fontSize = '16px';\n            if (data > 10) { fontSize = '14px'; }\n            if (data > 100) { fontSize = '12px'; }\n\n            this.barText.data([data])\n                .transition()\n                .duration(this.animationSpeed)\n                .attr('style', 'font-size: ' + fontSize)\n                .attr('y', function (d) {\n                    if (d > self.max) {\n                        return self.y(self.max) + 3;\n                    } else if (d > (self.max * 0.5)) {\n                        return self.y(d) + 3;\n                    } else {\n                        return self.y(d) - 20;\n                    }\n                }).text(function (d) {\n                    return d;\n                });\n\n            // Update and transition line\n            this.barLine.data([data])\n                .transition()\n                .duration(this.animationSpeed)\n                .attr('y1', function (d) {\n                    return self.y(d);\n                }).attr('y2', function (d) {\n                    return self.y(d);\n               });\n        }\n    };\n\n    return LinearGauge;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/megadrop.js",
    "content": "/* Javascript for MegaDrop functionality in NAV */\nrequire([], function () {\n    $(function () {\n        var megadropSelector = 'megadrop',\n            megadropTogglerSelector = 'megadroptoggler',\n            $megadrop = $(document.getElementById(megadropSelector)),\n            $megadroptoggler = $(document.getElementById(megadropTogglerSelector)),\n            $caret = $megadroptoggler.find('i'),\n            caretDownClass = 'fa-caret-down',\n            caretUpClass = 'fa-caret-up',\n            slidespeed = 300;\n\n        function hideMegaDrop() {\n            $megadrop.slideUp(slidespeed, function () {\n                $caret.removeClass(caretUpClass).addClass(caretDownClass);\n            });\n        }\n\n        function showMegaDrop() {\n            $megadrop.slideDown(slidespeed, function () {\n                $caret.removeClass(caretDownClass).addClass(caretUpClass);\n            });\n        }\n\n        $megadroptoggler.click(function () {\n            if ($megadrop.is(':visible')) {\n                hideMegaDrop();\n            } else {\n                showMegaDrop();\n            }\n        });\n\n        /*\n            Hide megadrop when clicking outside it. See special case for\n            top-bar dropdowns below\n        */\n        $(document).click(function (event) {\n            if ($megadrop.is(\":visible\")) {\n                var $target = $(event.target),\n                    clickIsOutsideMegadrop = $target.parents('#' + megadropSelector).length <= 0,\n                    clickIsOnToggler = $target[0] === $megadroptoggler[0] || $target.parent()[0] === $megadroptoggler[0];\n\n                if (clickIsOutsideMegadrop && !clickIsOnToggler) {\n                    hideMegaDrop();\n                }\n            }\n        });\n\n        /* Special case for top bar dropdown menus (event does not propagate to document) */\n        $('.top-bar .has-dropdown').click(function () {\n            if ($megadrop.is(\":visible\")) {\n                hideMegaDrop();\n            }\n        });\n\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/multiple_select.js",
    "content": "define([], function () {\n\n    /**\n     * MultipleSelect - an alternative to QuickSelect\n     * ----------------------------------------------\n     *\n     * Todo:\n     * - Get rid of the rigid html format.\n     * - The redraw is simple and slow, make it more efficient.\n     *\n     * This plugin depends on some formatting from the template.\n     * It expects:\n     * - A container with the class 'multiple-select-container' where\n     *   the two multi selects reside.\n     * - Two multi selects with the classes\n     *   '.multiple-select-choices' and '.multiple-select-initial'.\n     *   Choices are what the user can add and initial is the initial state.\n     * - Everything must be wrapped in a form.\n     *\n     */\n\n    const collator = new Intl.Collator(undefined, { sensitivity: 'base', numeric: true });\n\n    function sortOptions(selectElement) {\n        const options = [...selectElement.options];\n        options.sort((a, b) => collator.compare(a.textContent, b.textContent));\n        for (const option of options) {\n            selectElement.appendChild(option);\n        }\n    }\n\n    function MultipleSelect(config = {}) {\n        this.containerSelector = config.containerNodeSelector || '.multiple-select-container';\n        this.container = $(this.containerSelector);\n        this.choiceNodeSelector = config.choiceNodeSelector || '.multiple-select-choices';\n        this.initialNodeSelector = config.initialNodeSelector || '.multiple-select-initial';\n        this.choiceNode = $(this.choiceNodeSelector);\n        this.initialNode = $(this.initialNodeSelector);\n\n        if (!(this.container.length && this.choiceNode.length && this.initialNode.length)) {\n            console.error('Could not find needed elements');\n            return;\n        }\n\n        this.form = this.container.parents('form:first');\n        this.addSubmitHandler();\n\n        // Create the data structures\n        this.findOptions();\n        this.orig_choices = this.choiceNode.clone();\n\n        this.addClickListeners();\n        this.searchfield = config.searchField || this.container.find($(\"[type='search']\"));\n        if (this.searchfield.length) {\n            this.addSearchListener();\n        }\n    }\n\n    MultipleSelect.prototype = {\n        findOptions() {\n            this.findChoiceOptions();\n            this.findInitialOptions();\n        },\n        findChoiceOptions() {\n            this.choices = this.choiceNode.find('option');\n        },\n        findInitialOptions() {\n            this.initial = this.initialNode.find('option');\n        },\n        addClickListeners() {\n            this.container.on('click', 'option', (event) => {\n                this.move($(event.target));\n            });\n        },\n        move($node) {\n            if ($node.parent().is(this.choiceNode)) {\n                $node.appendTo(this.initialNode);\n                $node.prop('selected', false);\n                this.orig_choices.find('[value=\"' + $node.val() + '\"]').remove();\n                sortOptions(this.initialNode[0]);\n            } else if ($node.parent().is(this.initialNode)) {\n                $node.appendTo(this.choiceNode);\n                $node.prop('selected', false);\n                this.orig_choices.append($node.clone());\n                sortOptions(this.choiceNode[0]);\n            } else {\n                console.error(\"Could not find parent of \", $node);\n            }\n        },\n        addSubmitHandler() {\n            this.form.submit(() => {\n                this.initialNode.find('option').prop('selected', true);\n            });\n        },\n        addSearchListener() {\n            this.searchfield.on('keyup', () => {\n                this.doSearch();\n            });\n        },\n        doSearch() {\n            const searchstring = this.searchfield.val();\n\n            if (searchstring.length < 3) {\n                if (this.choices.length !== this.orig_choices.find('option').length) {\n                    this.choices = this.orig_choices.find(\"option\").clone();\n                    this.reDraw();\n                }\n            } else {\n                this.choices = this.orig_choices.find(\"option:contains('\" + searchstring + \"')\").clone();\n                this.reDraw();\n            }\n        },\n        reDraw() {\n            this.choiceNode.empty();\n            this.choiceNode.append(this.choices);\n        }\n    };\n\n    return MultipleSelect;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/nav-url-utils.js",
    "content": "define([], function() {\n\n    /**\n     * http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n     *\n     * Returns querystring as a key => list[value] construct\n     */\n    function deSerialize(query) {\n        query = typeof query === 'undefined' ?\n            window.location.search.substring(1) :\n            query.split('?').pop().split('#').shift();\n        var urlParams;\n        var match,\n            pl     = /\\+/g,  // Regex for replacing addition symbol with a space\n            search = /([^&=]+)=?([^&]*)/g,\n            decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); };\n        urlParams = {};\n        while ((match = search.exec(query))) {\n            var key = decode(match[1]);\n            if (key in urlParams) {\n                urlParams[key].push(decode(match[2]));\n            } else {\n                urlParams[key] = [decode(match[2])];\n            }\n        }\n        return urlParams;\n    }\n\n\n    /**\n     * http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object\n     * \n     * Serialize object to querystring\n     */\n    function serialize(obj) {\n        var str = [];\n        for(var p in obj)\n            if (obj.hasOwnProperty(p)) {\n                str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]));\n            }\n        return str.join(\"&\");\n    }\n\n\n    /**\n     * Removes an url parameter from the querystring\n     */\n    function removeURLParameter(url, parameter) {\n        //prefer to use l.search if you have a location/link object\n        var urlparts= url.split('?');   \n        if (urlparts.length>=2) {\n\n            var prefix= encodeURIComponent(parameter)+'=';\n            var pars= urlparts[1].split(/[&;]/g);\n\n            //reverse iteration as may be destructive\n            for (var i= pars.length; i-- > 0;) {    \n                //idiom for string.startsWith\n                if (pars[i].lastIndexOf(prefix, 0) !== -1) {  \n                    pars.splice(i, 1);\n                }\n            }\n\n            url= urlparts[0]+'?'+pars.join('&');\n            return url;\n        } else {\n            return url;\n        }\n    }\n\n\n    return {\n        'deSerialize': deSerialize,\n        'serialize': serialize,\n        'removeURLParameter': removeURLParameter\n    };\n    \n});\n\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlet_alert.js",
    "content": "define((require, exports, module) => {\n\n    const DEFAULT_OPTIONS ={\n        alertType: '',\n        dataUrl: '',\n        onState: null,\n        onMessage: 'No on message provided',\n        offMessage: 'No off message provided'\n    }\n\n    function AlertController($navlet, options) {\n        this.$navlet = $navlet;\n        this.$alertBox = $navlet.find('.alert-box');\n        this.$timestamp = $navlet.find('.alert-update-timestamp span');\n        this.options = {...DEFAULT_OPTIONS, ...options};\n        this.text = {\n         on: options.onMessage,\n         off: options.offMessage,\n         unknown: 'N/A'\n        };\n        this.alertType = options.alertType;\n        this.isDestroyed = false;\n\n        this.update();\n        this.refreshHandler = this.update.bind(this);\n        this.cleanupHandler = this.cleanup.bind(this);\n        $navlet.on('refresh', this.refreshHandler);\n        $navlet.on('htmx:beforeSwap', this.cleanupHandler);\n    }\n\n    AlertController.prototype.cleanup = function() {\n        if (this.isDestroyed) return;\n        this.$navlet.off('refresh', this.refreshHandler);\n        this.$navlet.off('htmx:beforeSwap', this.cleanupHandler);\n        this.isDestroyed = true;\n    }\n\n    AlertController.prototype.feedBack = function(text, klass) {\n        this.$alertBox.attr('class', 'alert-box with-icon');\n        if (klass) {\n         this.$alertBox.addClass(klass);\n        }\n        this.$alertBox.html(text);\n    }\n\n    AlertController.prototype.update = function() {\n        if (this.isDestroyed) return;\n        const request = $.get(this.options.dataUrl);\n\n        request.done((data) => {\n         if (!data || data.length === 0) {\n             this.feedBack('<strong>Got no data from Graphite</strong> - perhaps the metric name is wrong?');\n             return;\n         }\n\n         if (!data[0]?.datapoints) {\n             this.feedBack('<strong>Got invalid data from Graphite</strong>');\n             return;\n         }\n\n         const datapoints = data[0].datapoints.reverse();\n\n         this.$timestamp.text('N/A');\n\n         for (let i=0; i<datapoints.length; i++) {\n             const value = datapoints[i][0];\n             const epoch = datapoints[i][1];\n             if (value !== null) {\n                 if (value === this.state.onState) {\n                     this.feedBack(this.text.on, this.alertType);\n                 } else {\n                     this.feedBack(this.text.off, 'success');\n                 }\n                 this.$timestamp.text(new Date(epoch * 1000).toLocaleString());\n                 break;\n             }\n             if (i >= 3) {\n                 this.feedBack(this.text.unknown);\n             }\n         }\n        });\n\n        // Very basic error handling\n        request.fail((jqXhr, textStatus, errorThrown) => {\n         this.feedBack(['<strong>Error updating widget:</strong>', jqXhr.status, jqXhr.statusText].join(' '));\n        });\n    }\n\n    module.exports = AlertController;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlet_controller.js",
    "content": "define(['libs/urijs/URI', 'spin'], function (URI, Spinner) {\n\n    /*\n    * Controller for a specific Navlet\n    *\n    * container: A wrapper for all Navlets containing data-attributes useful for the navlet\n    * renderNode: In case of columns or other structures, this is the node the navlet should render in\n    * navlet: An object containing the id for the navlet and the url to display it\n    *\n    * The controller initiates a request to the url given in the navlet object,\n    * puts the result in its own node and add it to the renderNode.\n    *\n    * If the request fails for some reason, we need to make another request to\n    * fetch the base template with the buttons and title rendered. This is\n    * suboptimal, but only leads to overhead on errors.\n    *\n    */\n\n    var NavletController = function (container, renderNode, navlet, forceFirst) {\n        this.container = container;    // Navlet container\n        this.renderNode = renderNode;  // The column this navlet should render in\n        this.navlet = navlet;          // Object containing navlet information\n        this.spinner = new Spinner({zIndex: 10});  // Spinner showing on load\n        this.forceFirst = typeof forceFirst === 'undefined' ? false : true;\n        this.node = this.createNode(); // The complete node for this navlet\n        this.removeUrl = this.container.attr('data-remove-navlet');           // Url to use to remove a navlet from this user\n        this.baseTemplateUrl = this.container.attr('data-base-template-url'); // Url to use to fetch base template for this navlet\n\n        this.renderNavlet('VIEW');\n    };\n\n    NavletController.prototype = {\n        createNode: function () {\n            /* Creates the node that the navlet will loaded into */\n            var self = this;\n            var $div = $('<div/>');\n            $div.attr({\n                'data-id': this.navlet.id,\n                'class': 'navlet'\n            });\n\n            $div.addClass(this.navlet.navlet_class);\n\n            if (this.navlet.highlight) {\n                $div.addClass('colorblock-navlet');\n            }\n\n            if (this.forceFirst) {\n                this.renderNode.prepend($div);\n                $div.on('mouseover', function() {\n                    $div.removeClass('mark-new');\n                    self.forceFirst = false;\n                });\n            } else {\n                this.renderNode.append($div);\n            }\n            return $div;\n        },\n        renderNavlet: function (mode) {\n            /* Renders the navlet and inserts the html */\n            var that = this;\n\n            if (mode === undefined) {\n                mode = 'VIEW';\n            }\n\n            var request = $.ajax({\n                url: this.navlet.url,\n                data: {'mode': mode},\n                beforeSend: function () {\n                    that.spinner.spin(that.node.get(0));\n                }\n            });\n            request.done(function (html) {\n                that.handleSuccessfulRequest(html, mode);\n            });\n            request.fail(function (jqxhr, textStatus, errorThrown) {\n                that.handleErrorRequest(jqxhr);\n            });\n            request.always(function () {\n                that.spinner.stop();\n            });\n\n        },\n        handleSuccessfulRequest: function (html, mode) {\n            this.node.html(html);\n\n            /*\n            Process the new navlet with htmx to initialize any hx-* attributes\n            Required because content loaded via jQuery AJAX is not automatically processed by htmx.\n            */\n            htmx.process(this.node.get(0));\n\n            if (this.forceFirst) {\n                this.node.addClass('mark-new');\n            }\n            this.applyListeners();\n            this.addReloader(mode);\n        },\n        handleErrorRequest: function (jqxhr) {\n            /*\n             * Fetch base template for this navlet, display that and error\n             */\n            var that = this,\n                request = $.get(this.baseTemplateUrl, {id: this.navlet.id});\n            request.done(function (html) {\n                that.node.html(html);\n                that.applyListeners();\n                if (jqxhr.status === 401 || jqxhr.status === 403) {\n                    that.displayError('Not allowed');\n                } else {\n                    that.displayError('Could not load widget');\n                }\n            });\n            request.fail(function () {\n                that.displayError('Could not load widget');\n            });\n        },\n        addReloader: function (mode) {\n            /*\n             * Reload periodically based on preferences\n             * Remember to stop refreshing on edit\n             */\n            var that = this,\n                preferences = this.navlet.preferences;\n\n            if (mode === 'VIEW' && preferences && preferences.refresh_interval) {\n                /* If this is a reload of image only */\n                if (this.navlet.image_reload) {\n                    this.refresh = setInterval(function () {\n                        // Find image each time because of async loading\n                        var image = that.node.find('img[data-image-reload], [data-image-reload] img');\n                        if (image.length) {\n                            // Add bust parameter to url to prevent caching\n                            var uri = new URI(image.get(0)).setSearch('bust', Math.random());\n                            image.attr('src', uri.href());\n                        }\n                    }, preferences.refresh_interval);\n                } else if (this.navlet.ajax_reload) {\n                    this.refresh = setInterval(function () {\n                        that.node.trigger('refresh', [that.node]);\n                    }, preferences.refresh_interval);\n                } else {\n                    this.refresh = setTimeout(function () {\n                        that.renderNavlet.call(that);\n                    }, preferences.refresh_interval);\n                }\n            } else if (mode === 'EDIT' && this.refresh) {\n                clearTimeout(this.refresh);\n                clearInterval(this.refresh);\n            }\n        },\n        getModeSwitch: function () {\n            /* Return edit-button */\n            return this.node.find('.navlet-mode-switch');\n        },\n        getRenderMode: function () {\n            /* Return mode based on edit-button. If it does not exist return VIEW */\n            var modeSwitch = this.getModeSwitch(),\n                mode = 'VIEW';\n            if (modeSwitch.length) {\n                mode = modeSwitch.attr('data-mode');\n            }\n            return mode;\n        },\n        applyListeners: function () {\n            /* Applies listeners to the relevant elements */\n            this.applyModeListener();\n//            this.applyReloadListener();\n            this.applySubmitListener();\n            if (this.navlet.is_title_editable && this.node.find('.subheader[data-set-title]').get(0)) {\n                this.applyTitleListener();\n            }\n            this.applyOnRenderedListener();\n        },\n        applyModeListener: function () {\n            /* Renders the navlet in the correct mode (view or edit) when clicking the switch button */\n            var that = this,\n                modeSwitch = this.getModeSwitch();\n\n            if (modeSwitch.length > 0) {\n                var mode = this.getRenderMode() === 'VIEW' ? 'EDIT' : 'VIEW';\n\n                modeSwitch.click(function () {\n                    that.node.trigger('render', [mode]);\n                    that.renderNavlet(mode);\n                });\n            }\n        },\n        applyReloadListener: function () {\n            var that = this,\n                reloadButton = this.node.find('.navlet-reload-button');\n            reloadButton.on('click', function () {\n                that.renderNavlet();\n            });\n        },\n        applySubmitListener: function () {\n            /*\n             * Make sure a form in edit-mode is submitted by ajax, so that the\n             * page does not reload.\n             *\n             * Preferences may be returned, handle and store them\n             */\n            if (this.getRenderMode() === 'EDIT') {\n                var that = this,\n                    form = this.node.find('form');\n\n                form.submit(function (event) {\n                    event.preventDefault();\n                    var request = $.post(form.attr('action'), $(this).serialize());\n                    request.done(function (data) {\n                        // Update preferences if they are sent back from controller\n                        if (data) {\n                            that.navlet.preferences = JSON.parse(data);\n                        }\n                        that.renderNavlet('VIEW');\n                    });\n                    request.fail(function (jqxhr) {\n                        try {\n                            // Result may be json, try to parse it (specific for form errors)\n                            var json = JSON.parse(jqxhr.responseText);\n                            var $ul = $('<ul class=\"no-bullet\">');\n                            for (var field in json) {\n                                var errors = $('<li>').html(field + ': ' + json[field].map(function(x) {\n                                    return x.message ? x.message : x;\n                                }).join(', '));\n                                $ul.append(errors);\n                            }\n                            that.displayError($ul);\n                        } catch (e) {\n                            that.displayError('Could not save changes: ' + jqxhr.responseText);\n                        }\n                    });\n                });\n\n                this.node.find('.cancel-button').on('click', function() {\n                    that.getModeSwitch().click();\n                });\n            }\n        },\n        applyTitleListener: function () {\n            /* Feel free to refactor this mess */\n            var self = this;\n            this.node.find('.subheader').click(function () {\n                var $header = $(this),\n                    $container = $($header.parents('.title-container').get(0)),\n                    $input = $('<input type=\"text\">').val($header.find('.navlet-title').text());\n\n                $header.hide();\n                $container.append($input);\n                $input.on('keydown', function (event) {\n                    if (event.which === 13) {\n                        const csrfToken = $('#navlets-action-form input[name=\"csrfmiddlewaretoken\"]').val();\n                        const request = $.post({\n                            url: $header.attr('data-set-title'),\n                            type: 'POST',\n                            data: {\n                                'id': self.navlet.id,\n                                'preferences': JSON.stringify({\n                                    'title': $input.val()\n                                })\n                            },\n                            headers: {\n                                'X-CSRFToken': csrfToken\n                            }\n                        });\n                        request.done(function () {\n                            $header.find('.navlet-title').text($input.val());\n                        });\n                        request.fail(function () {\n                            alert(\"The Oompa Loompas didn't want to change the title (an error occured) - sorry!\");\n                        });\n                        request.always(function () {\n                            $input.remove();\n                            $header.show();\n                        });\n                    }\n                });\n            });\n        },\n        applyOnRenderedListener: function () {\n            this.container.trigger('navlet-rendered', [this.node]);\n        },\n        displayError: function (errorMessage) {\n            this.getOrCreateErrorElement().html(errorMessage);\n        },\n        getOrCreateErrorElement: function () {\n            /* If error element is already created, return existing element */\n            var $element = this.node.find('.alert-box.alert');\n\n            if (!$element.length) {\n                $element = $('<span class=\"alert-box alert\"/>');\n                $element.appendTo(this.node);\n            }\n\n            return $element;\n        }\n\n    };\n\n    return NavletController;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlet_handlers.js",
    "content": "/**\n * Navlet Handlers\n *\n * Provides widget-specific initialization handlers for navlets after HTMX content swaps.\n * Manages interactive components within dashboard widgets and Select2 dropdowns.\n */\ndefine([\n    'plugins/room_mapper',\n    'plugins/sensors_controller',\n    'src/getting_started_wizard'\n], function(RoomMapper, SensorsController, GettingStartedWizard) {\n\n    const NAVLET_TYPES = {\n        ROOM_MAP: 'RoomMapNavlet',\n        SENSOR: 'SensorWidget',\n        GETTING_STARTED: 'GettingStartedWidget',\n        WATCHDOG: 'WatchDogWidget'\n    }\n    const NAVLET_SET = new Set(Object.values(NAVLET_TYPES));\n    // If the element has the `select2-offscreen` class, it means select2 was previously initialized.\n    // TODO: Update class detection when upgrading to select2 v4.\n    //  See: https://select2.org/programmatic-control/methods#checking-if-the-plugin-is-initialized\n    const SELECT2_INITIALIZED_CLASS = 'select2-initialized';\n    const SELECT2_REINIT_DELAY_MS = 100;\n\n    const handlers = {\n        [NAVLET_TYPES.ROOM_MAP]: function ($node) {\n            const room_map = $node.find('#room_map');\n            if (!room_map.length) return;\n            const map_wrapper = $node.find('.mapwrapper');\n            map_wrapper.show();\n            // Constructor is used for side effects. NOSONAR\n            new RoomMapper(room_map.get(0));\n        },\n\n        [NAVLET_TYPES.SENSOR]: function ($node) {\n            const sensors = $node.find('.room-sensor');\n            if (sensors.length) {\n                // Constructor is used for side effects. NOSONAR\n                new SensorsController(sensors);\n            }\n        },\n\n        [NAVLET_TYPES.GETTING_STARTED]: function ($node) {\n            $node.on('click', '#getting-started-wizard', function () {\n                GettingStartedWizard.start();\n            });\n        },\n\n        [NAVLET_TYPES.WATCHDOG]: function ($node) {\n            $node.on('click', '.watchdog-tests .label.alert', function (event) {\n                $(event.target).closest('li').find('ul').toggle();\n            });\n        }\n    };\n\n    function getNavletType($node) {\n        const classes = $node.attr('class').split(' ').filter(cls => NAVLET_SET.has(cls));\n        return classes.length ? classes[0] : null;\n    }\n\n    function handleNavletType($node) {\n        const navletType = getNavletType($node);\n        if (!navletType) return;\n\n        const handler = handlers[navletType];\n        if (!handler) return;\n        try {\n            handler($node);\n        } catch (error) {\n            console.error(`Failed to initialize ${navletType}:`, error);\n        }\n    }\n\n    function handleTitleEditing(node) {\n        const header = node.querySelector('.subheader[data-set-title]');\n        if (!header) return;\n\n        header.addEventListener('click', function () {\n            const title = header.querySelector('.navlet-title');\n            const input = document.createElement('input');\n            input.type = 'text';\n            input.value = title.textContent;\n\n            header.hidden = true;\n            header.closest('.title-container').append(input);\n            input.focus();\n\n            input.addEventListener('blur', function () {\n                input.remove();\n                header.hidden = false;\n            });\n            input.addEventListener('keydown', function (event) {\n                if (event.key === 'Enter') {\n                    const newTitle = input.value;\n                    const body = new URLSearchParams({\n                        'id': node.dataset.id,\n                        'preferences': JSON.stringify({ 'title': newTitle })\n                    });\n                    fetch(header.dataset.setTitle, {\n                        method: 'POST',\n                        headers: { 'X-CSRFToken': getCsrfToken() },\n                        body: body\n                    }).then(response => {\n                        if (response.ok) title.textContent = newTitle;\n                    });\n                }\n                if (event.key === 'Enter' || event.key === 'Escape') {\n                    input.blur();\n                }\n            });\n        });\n    }\n\n    function handleSelect2Initialization($swappedNode) {\n        const $selectElements = $swappedNode.find('select');\n\n        if ($selectElements.length > 0) {\n            $selectElements.each((_, element) => {\n                if ($(element).hasClass(SELECT2_INITIALIZED_CLASS)) {\n                    // Re-initialize after a short delay to allow destroy to complete\n                    // Timeout value selected based on manual testing\n                    setTimeout(() => {\n                        $(element).select2();\n                    }, SELECT2_REINIT_DELAY_MS);\n                } else {\n                    $(element).select2();\n                }\n            });\n        }\n    }\n\n    return {\n        handle: function (swappedNode) {\n            const $swappedNode = $(swappedNode);\n            handleNavletType($swappedNode);\n            handleTitleEditing(swappedNode);\n            handleSelect2Initialization($swappedNode);\n        },\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlet_pdu.js",
    "content": "define(function(require, exports, module) {\n\n    const d3Sparkline = require(\"plugins/d3_sparkline\");\n\n\n    /**\n     * Based solely on the totally insane assumption that we have three banks\n     * and that the first is the sum of the two following.\n     */\n    function PduController($navlet, dataUrl, metrics) {\n        this.$navlet = $navlet;\n        this.feedBack = this.$navlet.find('.alert-box.alert');\n        this.timestamp = this.$navlet.find('.alert-update-timestamp span');\n        this.dataUrl = dataUrl;\n        this.limits = getLimits(this.$navlet.find('.pdu-load-status').data('limits')).sort().reverse();\n        this.config = getConfig(this.limits.length);\n        this.parameters = getParameters(metrics);\n        this.isDestroyed = false;\n\n        this.update();\n        this.refreshHandler = this.update.bind(this);\n        this.cleanupHandler = this.cleanup.bind(this);\n        $navlet.on('refresh', this.refreshHandler);\n        $navlet.on('htmx:beforeSwap', this.cleanupHandler);\n    }\n\n    PduController.prototype.cleanup = function() {\n        if (this.isDestroyed) return;\n        this.$navlet.off('refresh');\n        this.$navlet.off('htmx:beforeSwap');\n        this.isDestroyed = true;\n    }\n\n    PduController.prototype.update = function() {\n        this.feedBack.hide();\n        const self = this;\n\n        const request = $.post(this.dataUrl, this.parameters, function(response) {\n            _.each(response, function(data) {\n                const $el = self.$navlet.find('[data-metric=\"' + data.target + '\"]');\n\n                const point = _.find(data.datapoints.reverse(), function(datapoint) {\n                    return datapoint[0] !== null;\n                });\n\n                if (!point) {\n                    $el.html('<small>No data</small>');\n                    return;\n                }\n                const load = point[0];\n\n                // Recalculate limits for the total column\n                const limits = isTotal(data.target) ?\n                    self.limits.map(t => t * 2) :\n                    self.limits;\n\n                d3Sparkline.bullet($el, [null, load].concat(limits), self.config);\n            });\n            self.timestamp.text(new Date().toLocaleString());\n        });\n        request.fail(function() {\n            self.feedBack.html('Error fetching data').show();\n        });\n    };\n\n\n    /** Constructs config for the sparkline */\n    function getConfig(numLimits) {\n        //                  green      yellow     red\n        let rangeColors = ['#A5D6A7', '#FFEE58', '#EF9A9A'];\n        // The splice is necessary because of the way sparklines.js applies the colors.\n        rangeColors = rangeColors.splice(0, numLimits);\n\n        return {\n            performanceColor: '#333333',\n            rangeColors: rangeColors.reverse(),\n            tooltipFormatter: function(data) {\n                const prefix = isTotal(data.el.dataset.metric) ? 'Total load' : 'Load';\n                return `${prefix} ${data.values[1]} (limits: ${data.values.slice(2).reverse()})`;\n            }\n        };\n    }\n\n    /** Returns if the metric is the 'total'-metric, the metric that displays\n     * the sum of the others */\n    function isTotal(metric) {\n        return strEndsWith(metric, 1);\n    }\n\n\n    function strEndsWith(str, suffix) {\n        return str.match(suffix+\"$\") == suffix;\n    }\n\n    /**\n     * @param {string} limit - comma separated string with numeric thresholds\n     * @returns {Array.<integer>} An array of integer limits\n     */\n    function getLimits(limit) {\n        if (typeof limit === 'number') {\n            return [limit];  // single limit\n        }\n        return limit.length === 0 ? [] :\n            limit.split(',').map(function(t) {return +t;});\n    }\n\n    /**\n     * Constructs the parameters for the data request\n     */\n    function getParameters(metrics) {\n        return {\n            from: '-5min',\n            format: 'json',\n            target: metrics\n        };\n    }\n\n    module.exports = PduController;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlet_ups.js",
    "content": "define(function(require, exports, module) {\n\n    /**\n     * @param {jQuery} $navlet - The navlet element (the one with data-id)\n     */\n    function Poller($navlet) {\n        var self = this;\n        this.$navlet = $navlet;\n        this.$updateTime = $navlet.find('.update-time');\n\n        // Build sensors dict where metric path is key and node is value\n        this.sensors = {};\n        $navlet.find('[data-metric]').each(function() {\n            var $node = $(this);\n            self.sensors[$node.attr('data-metric')] = $node;\n        });\n\n        this.metricList = _.keys(this.sensors);\n        this.isDestroyed = false;\n\n        // Run collection and listen to events\n        this.update();\n        this.refreshHandler = this.update.bind(this);\n        this.cleanupHandler = this.cleanup.bind(this);\n        $navlet.on('refresh', this.refreshHandler);\n        $navlet.on('htmx:beforeSwap', this.cleanupHandler);\n    }\n\n    Poller.prototype.cleanup = function() {\n        if (this.isDestroyed) return;\n        this.$navlet.off('refresh');\n        this.$navlet.off('htmx:beforeSwap');\n        this.isDestroyed = true;\n    }\n\n    Poller.prototype.update = function() {\n        var self = this;\n        var request = $.post(NAV.graphiteRenderUrl,\n                             {target: this.metricList, from: '-5min', format: 'json'});\n        request.done(function(response){\n            // For each metric, update the related node\n            response.forEach(function(data) {\n                var datapoints = data.datapoints.reverse();\n                // Find the first point that has data and use that.\n                var point = _.find(datapoints, function(point){\n                    return point[0] !== null;\n                });\n                var $node = self.sensors[data.target];\n                var value = point ? point[0] : 'N/A';\n\n                // Convert value if applicable\n                var converted = convertValue($node, value);\n                if (_.isArray(converted)) {\n                    value = converted[0] || 'N/A';\n                    $node.parent().find('.unit-of-measurement').text(converted[1]);\n                }\n\n                // If value is less than 200 and it is a voltage (indicated in template), mark it\n                if (value < 200) {\n                    $node.closest('.ups-voltage-indicator').addClass('marklow');\n                }\n\n                $node.html(value);\n            });\n            self.$updateTime.html(new Date().toLocaleString());\n        });\n    };\n\n    /** Convert value based on unit of measurement. Converted values returns as\n     * an array where the first value is the converted value and the second is\n     * the new unit */\n    function convertValue($node, value) {\n        var uom = $node.data('uom');\n        var convert = {\n            Seconds: function() {\n                // Seconds is converted to minutes\n                return [(+value / 60).toFixed(0), 'Minutes'];\n            }\n        };\n        try {\n            return convert[uom]();\n        } catch (e) {\n            return value;\n        }\n    }\n\n    module.exports = Poller;\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/navlets_htmx_controller.js",
    "content": "/**\n * Navlets HTMX Controller\n *\n * Manages the interactive dashboard widget system with drag-and-drop functionality,\n * HTMX integration, and dynamic widget lifecycle management.\n *\n * Features:\n * - Sortable widget columns with drag-and-drop reordering\n * - HTMX event handling for dynamic content updates\n * - Automatic widget initialization and cleanup\n * - Order persistence to backend via AJAX\n * - Visual feedback for user interactions\n */\ndefine([\n    'plugins/navlet_handlers'\n], function (NavletHandlers) {\n\n    const NAVLETS_CONTAINER_ID = 'navlets-htmx';\n\n    const CSS_CLASSES = {\n        NAVLET: 'navlet',\n        OUTLINE: 'outline',\n        MARK_NEW: 'mark-new',\n    };\n\n    const SELECTORS = {\n        NAVLET: '.navlet',\n        SORTER: '.navletColumn',\n        DRAG_HANDLE: '.navlet-drag-button',\n        CSRF_TOKEN: '#navlets-action-form input[name=\"csrfmiddlewaretoken\"]',\n        NO_WIDGETS_MESSAGE: '#no-widgets-message'\n    };\n\n    const EVENTS = {\n        HTMX_AFTER_SWAP: 'htmx:afterSwap',\n        NAVLET_ADDED: 'nav.navlet.added',\n        NAVLET_REMOVED: 'nav.navlet.removed'\n    };\n\n    function NavletsHtmxController() {\n        this.container = $('#' + NAVLETS_CONTAINER_ID);\n        if (this.container.length === 0) {\n            console.warn(`Container with ID '${NAVLETS_CONTAINER_ID}' not found`);\n            return;\n        }\n        this.save_ordering_url = this.container.attr('data-save-order-url');\n        this.initSortable();\n        this.initializeExistingNavlets();\n    }\n\n    NavletsHtmxController.prototype = {\n        initSortable: function () {\n            const $sorterSelectors = this.container.find(SELECTORS.SORTER);\n            if ($sorterSelectors.length === 0) {\n                return;\n            }\n            $sorterSelectors.sortable({\n                connectWith: SELECTORS.SORTER,\n                forcePlaceholderSize: true,\n                handle: SELECTORS.DRAG_HANDLE,\n                placeholder: 'highlight',\n                tolerance: 'pointer',\n                start: () => this.toggleNavletOutline(true),\n                stop: () => this.toggleNavletOutline(false),\n                update: () => this.updateOrder()\n            });\n        },\n\n        toggleNavletOutline: function (show) {\n            this.getNavlets().toggleClass(CSS_CLASSES.OUTLINE, show);\n        },\n\n        updateOrder: function () {\n            const ordering = this.findOrder();\n            this.saveOrder(ordering);\n        },\n\n        findOrder: function () {\n            return this.container.find(SELECTORS.SORTER).toArray().map((column) => {\n                const columnNavlets = {};\n                this.getNavlets(column).each((idx, navlet) => {\n                    const navletId = $(navlet).attr('data-id');\n                    if (navletId) {\n                        columnNavlets[navletId] = idx;\n                    }\n                });\n                return columnNavlets;\n            });\n        },\n\n        saveOrder: function (ordering) {\n            const csrfToken = $(SELECTORS.CSRF_TOKEN).val();\n            if (!csrfToken) {\n                console.error('CSRF token not found');\n                return;\n            }\n\n            $.ajax({\n                url: this.save_ordering_url,\n                type: 'POST',\n                data: JSON.stringify(ordering),\n                contentType: 'application/json',\n                headers: {\n                    'X-CSRFToken': csrfToken\n                }\n            }).fail(function (xhr, status, error) {\n                console.error('Failed to save widget order:', error);\n            });\n        },\n\n        getNavlets: function (column) {\n            return column ? $(column).find(SELECTORS.NAVLET) : this.container.find(SELECTORS.NAVLET);\n        },\n\n        isNavlet: function (node) {\n            return node?.dataset?.id && node.classList.contains(CSS_CLASSES.NAVLET);\n        },\n\n        reinitializeSortable: function () {\n            const $sorterSelectors = this.container.find(SELECTORS.SORTER);\n            $sorterSelectors.sortable('destroy');\n            this.initSortable();\n        },\n\n        handleHtmxAfterSwap: function (event) {\n            const swappedNode = event.detail.elt;\n\n            if (swappedNode.id === NAVLETS_CONTAINER_ID) {\n                this.reinitializeSortable();\n            }\n            if (this.isNavlet(swappedNode)) {\n                NavletHandlers.handle(swappedNode);\n            }\n        },\n\n        handleNavletAdded: function (event) {\n            this.updateOrder();\n\n            const navlet = document.querySelector(`[data-id=\"${event.detail.navlet_id}\"]`);\n            if (navlet) {\n                navlet.classList.add(CSS_CLASSES.MARK_NEW);\n                navlet.addEventListener(\"mouseenter\", function removeMarkNew() {\n                    navlet.classList.remove(CSS_CLASSES.MARK_NEW);\n                    navlet.removeEventListener(\"mouseenter\", removeMarkNew);\n                });\n            }\n\n            const noWidgetsMessage = document.querySelector(SELECTORS.NO_WIDGETS_MESSAGE);\n            noWidgetsMessage?.remove();\n        },\n\n        handleNavletRemoved: function () {\n            this.updateOrder();\n        },\n\n        initializeExistingNavlets: function () {\n            const existingNavlets = document.querySelectorAll(`#${NAVLETS_CONTAINER_ID} ${SELECTORS.NAVLET}`);\n            existingNavlets.forEach(navlet => NavletHandlers.handle(navlet));\n        }\n    };\n\n\n\n    function initialize() {\n        const controller = new NavletsHtmxController();\n\n        document.body.addEventListener(\n            EVENTS.HTMX_AFTER_SWAP,\n            (event) => controller.handleHtmxAfterSwap(event)\n        );\n        document.body.addEventListener(\n            EVENTS.NAVLET_ADDED,\n            (event) => controller.handleNavletAdded(event)\n        );\n        document.body.addEventListener(\n            EVENTS.NAVLET_REMOVED, () => controller.handleNavletRemoved()\n        );\n    }\n\n    return {\n        initialize: initialize\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/neighbor-map.js",
    "content": "define(function (require, exports, module) {\n\n    var d3 = require('d3v7');\n    var _ = require('underscore');\n\n    function NeighborMap(node) {\n        this.motherNode = d3.select(node);  // Use this for selecting prior to svg\n        this.netboxid = parseInt(this.motherNode.attr('data-netboxid'), 10);\n        if (!this.netboxid) {\n            console.log('No netboxid found');\n            return;\n        }\n\n        /* Size of svg container */\n        this.width = 800;\n        this.height = 700;\n\n        /* Node and link properties */\n        this.linkDistance = 250;\n        var imagePath = NAV.imagePath + '/netmap';\n        this.nodeImages = {\n            'GSW': imagePath + '/gsw.png',\n            'SW': imagePath + '/sw.png',\n            'GW': imagePath + '/gw.png',\n            'ELINK': imagePath + '/elink.png',\n            'EDGE': imagePath + '/edge.png',\n            'OTHER': imagePath + '/other.png',\n            'SRV': imagePath + '/srv.png',\n            'WLAN': imagePath + '/wlan.png',\n            'UNRECOGNIZED': imagePath + '/unrecognized.png'\n        };\n\n        this.selectors = {\n            nodes: '.node',\n            links: 'line.link',\n            linkLabelFromCenter: '.linkLabelFromCenter',\n            linkLabelToCenter: '.linkLabelToCenter'\n        };\n\n        this.filterForm = $('#neighbor-category-filters');\n        this.initialize();\n        this.activatePanel();\n        this.fetchData();\n    }\n\n    NeighborMap.prototype = {\n        /** Create svg element */\n        initialize: function () {\n            this.svg = this.motherNode.append(\"svg\")\n                           .attr(\"width\", this.width)\n                           .attr(\"height\", this.height)\n                           .style(\"border\", '1px solid black');\n            /* The order of the elements in the dom determines what is drawn\n            above other stuff. To make sure nodes always are at the top and\n            links always are on the bottom we put them into groups.*/\n            this.svg.append(\"g\").attr(\"id\", \"links\");\n            this.svg.append(\"g\").attr(\"id\", \"linklabels\");\n            this.svg.append(\"g\").attr(\"id\", \"nodes\");\n        },\n\n        activatePanel: function () {\n            this.filterForm.on('change', this.render.bind(this));\n        },\n\n        /** Fetch neighbourhood data for this netbox */\n        fetchData: function () {\n            var self = this;\n            d3.json('/ajax/open/neighbormap/' + this.netboxid).then(function (json) {\n                if (json) {\n                    // Filter duplicates\n                    json.nodes = _.uniq(json.nodes, function(node) { return node.netboxid; });\n\n                    self.data = json;\n                    self.render();\n                }\n            });\n        },\n\n        /** Indicates if this node is the special focusnode */\n        isFocusNode: function(node) {\n            return node.netboxid === this.netboxid;\n        },\n\n        /** Create and display all objects and svg elements */\n        render: function () {\n            var data = this.data;\n\n            data = this.filterByCategories(data, this.getCategories());\n\n            this.setCenterNode(data.nodes);\n            this.createSvgNodes(data.nodes);\n            this.createSvgLinks(data.links);\n            this.createLinkLabels(data.links);\n            this.createSimulation(data);\n        },\n\n        getCategories: function() {\n            var categories = []\n            this.filterForm.find('[type=checkbox]:checked').each(function(index, element) {\n                categories.push(element.value);\n            });\n            return categories;\n        },\n\n        /** Filter nodes based on categories */\n        filterByCategories: function (data, categories) {\n            var self = this;\n\n            var nodeLookup = {};  // Temporary lookup for nodes\n            data.nodes.forEach(function(node) {\n                nodeLookup[node.netboxid] = node;\n            });\n\n            return {\n                'nodes': data.nodes.filter(function(node) {\n                    return _.contains(categories, node.category) || node.netboxid === self.netboxid;\n                }),\n                'links': data.links.filter(function(link) {\n                    if (link.target.category) {\n                        return _.contains(categories, link.target.category);\n                    } else {\n                        return _.contains(categories, nodeLookup[link.target].category);\n                    }\n                })\n            };\n        },\n\n        /** Sets the node to be in the center */\n        setCenterNode: function(nodes) {\n            var centerNode = _.find(nodes, this.isFocusNode.bind(this));\n            centerNode.fx = this.width / 2;\n            centerNode.fy = this.height / 2;\n        },\n\n        /** Create all the visible links between the nodes */\n        createSvgLinks: function (dataLinks) {\n            var svgLinks = this\n                .svg\n                .select('#links')\n                .selectAll(this.selectors.links)\n                .data(dataLinks, function(d) {\n                    return d.target.netboxid ? d.target.netboxid : d.target;\n                });\n            var svgLinksEnter = svgLinks\n                .enter()\n                .append('line')\n                .attr('class', 'link')\n                .style('stroke-width', function (link) {\n                    var strokeWidth = 2;\n                    if (link.ifname.length > 1) {\n                        strokeWidth = 4;\n                    }\n                    return strokeWidth;\n                })\n                .style('stroke', '#ddd');\n            svgLinks.exit().remove();\n\n            this.svgLinks = svgLinks.merge(svgLinksEnter);\n        },\n\n        /** Create the link labels, in this case interface names */\n        createLinkLabels: function (dataLinks) {\n            var svgLinkLabelFromCenter, svgLinkLabelToCenter;\n\n            svgLinkLabelFromCenter = this\n                .svg\n                .select('#linklabels')\n                .selectAll(this.selectors.linkLabelFromCenter)\n                .data(dataLinks, function(d) {\n                    return d.target.netboxid ? d.target.netboxid : d.target;\n                });\n\n            svgLinkLabelFromCenter\n                .enter()\n                .append('g')\n                .attr('class', 'linkLabelFromCenter')\n                .append('text')\n                .style('font-size', '0.8em')\n                .attr('text-anchor', 'middle')\n                .text(function (link) {\n                    return link.ifname;\n                });\n            svgLinkLabelFromCenter.exit().remove();\n\n            svgLinkLabelToCenter = this\n                .svg\n                .select('#linklabels')\n                .selectAll(this.selectors.linkLabelToCenter)\n                .data(dataLinks, function(d) {\n                    return d.target.netboxid ? d.target.netboxid : d.target;\n                });\n\n            svgLinkLabelToCenter\n                .enter()\n                .append('g')\n                .attr('class', 'linkLabelToCenter')\n                .append('text')\n                .style('font-size', '0.8em')\n                .attr('text-anchor', 'middle')\n                .text(function (link) {\n                    return link.to_ifname;\n                });\n            svgLinkLabelToCenter.exit().remove();\n\n            this.svgLinkLabelFromCenter = this.svg.selectAll(this.selectors.linkLabelFromCenter);\n            this.svgLinkLabelToCenter = this.svg.selectAll(this.selectors.linkLabelToCenter);\n        },\n\n        /** Create all the visible nodes */\n        createSvgNodes: function (dataNodes) {\n            var self = this,\n                svgNodes = this\n                    .svg.select('#nodes')\n                    .selectAll(this.selectors.nodes)\n                    .data(dataNodes, function (node) {\n                        return node.netboxid;\n                    }),\n                newNodes = svgNodes\n                    .enter()\n                    .append('g')\n                    .attr('class', 'node');\n\n            svgNodes.exit().remove();\n\n            this.svgNodes = svgNodes.merge(newNodes);\n            // Reorder nodes to make sure new lines does not overwrite old nodes\n            this.svgNodes.order();\n\n            this.appendImagesToNodes(newNodes);\n            this.appendTextToNodes(newNodes);\n            this.appendClickListeners(newNodes);\n        },\n\n        createSimulation: function(data) {\n            var simulation = d3.forceSimulation(data.nodes)\n                    .force('aversion', d3.forceCollide(50))\n                    .force('links', d3.forceLink(data.links)\n                           .distance(this.linkDistance)\n                           .id(function(d) {return d.netboxid;}));\n\n            if (data.nodes.length > 2) {\n                simulation.force('center', d3.forceCenter(this.width / 2, this.height / 2));\n            }\n\n            simulation.on('tick', this.tick.bind(this));\n\n            this.addDrag(simulation);\n        },\n\n        /** Update all positions for each tick of the force algorithm */\n        tick: function () {\n            var self = this;\n\n            this.svgLinks\n                .attr('x1', function (link) { return link.source.x; })\n                .attr('y1', function (link) { return link.source.y; })\n                .attr('x2', function (link) { return link.target.x; })\n                .attr('y2', function (link) { return link.target.y; });\n\n            this.svgLinkLabelFromCenter.attr('transform', function (link) {\n                return self.calculateLinePoint(link.source, link.target, self.getLabelDistance(link));\n            });\n\n            this.svgLinkLabelToCenter.attr('transform', function (link) {\n                return self.calculateLinePoint(link.target, link.source, 50);\n            });\n\n            this.svgNodes.attr(\"transform\", function (node) {\n                return \"translate(\" + node.x + \",\" + node.y + \")\";\n            });\n        },\n\n        /** Append the correct images to the nodes */\n        appendImagesToNodes: function (svgNodes) {\n            var self = this;\n            svgNodes.append('image')\n                .attr('xlink:href', function (node) {\n                    return self.nodeImages[node.category];\n                })\n                .attr(\"x\", -16)\n                .attr(\"y\", -16)\n                .attr('width', 32)\n                .attr('height', 32)\n                .style('cursor', 'pointer');\n        },\n\n        /** Append correct text to the nodes */\n        appendTextToNodes: function (svgNodes) {\n            svgNodes.append(\"text\")\n                .attr(\"dx\", -16)\n                .attr(\"dy\", 25)\n                .attr(\"text-anchor\", \"middle\")\n                .text(function (node) {\n                    return node.name;\n                });\n        },\n\n        /** Go to other page when node is clicked */\n        appendClickListeners: function (svgNodes) {\n            var self = this;\n            svgNodes.on('click', function (event, node) {\n                if (node.category !== self.unrecognized) {\n                    location.href = '/ipdevinfo/' + node.sysname + '/#!neighbors';\n                }\n            });\n        },\n\n        /**\n         * Given source and target coords - calculate a point along the line\n         * between source and target with length 'distance' from the source\n         */\n        calculateLinePoint: function (source, target, distance) {\n            var m, x, y,\n                x0 = source.x,\n                x1 = target.x,\n                y0 = source.y,\n                y1 = target.y;\n\n            m = (y1 - y0) / (x1 - x0);  // Line gradient\n            if (x0 < x1) {\n                x = x0 + (distance / Math.sqrt(1 + (m * m)));\n            } else {\n                x = x0 - (distance / Math.sqrt(1 + (m * m)));\n            }\n            y = m * (x - x0) + y0;\n            return \"translate(\" + x + ',' +  y + ')';\n        },\n        getLabelDistance: function (link) {\n            var baseDistance = 70,\n                ifnameBasedDistance = baseDistance * (1 + (link.ifname.length - 1) * 0.3);\n            return ifnameBasedDistance < this.linkDistance ? ifnameBasedDistance : this.linkDistance;\n        },\n\n        /** Add drag behaviour to nodes */\n        addDrag: function(simulation) {\n            function dragStarted(event, d) {\n                if (!event.active) simulation.alphaTarget(0.3).restart();\n                d.fx = d.x;\n                d.fy = d.y;\n            }\n\n            function dragEnded(event, d) {\n                if (!event.active) simulation.alphaTarget(0);\n                d.fx = null;\n                d.fy = null;\n            }\n\n            var self = this;\n            this.svgNodes.call(\n                d3.drag()\n                    .filter(function(event, node) {\n                        // Set focus node to not be draggable\n                        return !self.isFocusNode(node);\n                    })\n                    .on('start', dragStarted)\n                    .on('drag', dragging)\n                    .on('end', dragEnded)\n            );\n        }\n    };\n\n    function dragging(event, d) {\n        d.fx = event.x;\n        d.fy = event.y;\n    }\n\n    return NeighborMap;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/netmap-extras.js",
    "content": "define(function () {\n\n\n    var _this; // proxy variable\n\n    var _TRAFFIC_META = {\n        'tib': 1099511627776,\n        'gib': 1073741824,\n        'mib': 1048576,\n        'kib': 1024,\n        'tb':  1000000000000,\n        'gb':  1000000000,\n        'mb':  1000000,\n        'kb':  1000\n    };\n\n    String.prototype.format = function () {\n        var args = arguments;\n        return this.replace(/\\{(\\d+)\\}/g, function (match, number) {\n            return typeof args[number] !== 'undefined' ? args[number] : match;\n\n        });\n    };\n\n    var publicMethods = {\n        // SI Units, http://en.wikipedia.org/wiki/SI_prefix\n        convert_bits_to_si: function (bits) {\n            if (bits >= _TRAFFIC_META.tb) {\n                return '{0}Tbps'.format(Math.round(((bits / _TRAFFIC_META.tb) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.gb) {\n                return '{0}Gbps'.format(Math.round(((bits / _TRAFFIC_META.gb) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.mb) {\n                return '{0}Mbps'.format(Math.round(((bits / _TRAFFIC_META.mb) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.kb) {\n                return '{0}Kbps'.format(Math.round(((bits / _TRAFFIC_META.kb) * 100) / 100));\n            }\n\n            return '{0}bps'.format(Math.round((bits * 100) / 100));\n        },\n        // IEC binary units: http://en.wikipedia.org/wiki/Kibibyte\n        convert_bits_to_iec: function (bits) {\n            if (bits >= _TRAFFIC_META.tib) {\n                return '{0}Tib/s'.format(Math.round(((bits / _TRAFFIC_META.tib) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.gib) {\n                return '{0}Gib/s'.format(Math.round(((bits / _TRAFFIC_META.gib) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.mib) {\n                return '{0}Mib/s'.format(Math.round(((bits / _TRAFFIC_META.mib) * 100) / 100));\n            } else if (bits >= _TRAFFIC_META.kib) {\n                return '{0}Kib/s'.format(Math.round(((bits / _TRAFFIC_META.kib) * 100) / 100));\n            }\n\n            return '{0}b/s'.format(Math.round((bits * 100) / 100));\n        }\n\n    };\n\n    _this = publicMethods;\n    return _this;\n});\n\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/network_tree.js",
    "content": "define([\n    'libs-amd/text!resources/networkexplorer/router.html',\n    'libs-amd/text!resources/networkexplorer/gwport.html',\n    'libs-amd/text!resources/networkexplorer/swport.html',\n    'libs-amd/text!resources/networkexplorer/switch.html',\n    'libs-amd/text!resources/networkexplorer/swport_leaf.html',\n    'handlebars',\n    'backbone',\n    'libs/backbone-eventbroker'\n                     ], function (routerTemplate,\n                                  gwportTemplate,\n                                  swportTemplate,\n                                  switchTemplate,\n                                  leafTemplate,\n                                  Handlebars\n                                 ) {\n\n\n    Handlebars.registerHelper('equal', function(lvalue, rvalue, options) {\n        if (arguments.length < 3) {\n            throw new Error(\"Handlebars Helper equal needs 2 parameters\");\n        } else if(lvalue !== rvalue) {\n            return options.inverse(this);\n        } else {\n            return options.fn(this);\n        }\n    });\n\n\n    const Node = Backbone.Model.extend({\n\n        /*\n         * An object representing a node in the network tree.\n         * Can be any kind of device/interface.\n         */\n\n        idAttribute: 'pk',\n\n        defaults: {\n            pk: -1,\n            type: 'root',\n            state: 'collapsed',\n            expandable: false,\n            matched: false,\n            navImagePath: NAV.imagePath\n        },\n\n        initialize: function () {\n            this.setUrl();\n        },\n\n        setUrl: function () {\n            switch (this.get('type')) {\n                 case 'root':\n                    this.url = 'routers/';\n                    break;\n                case 'router':\n                    this.url = `expand/router/${this.get('pk')}/`;\n                    break;\n                case 'gwport':\n                    this.url = `expand/gwport/${this.get('pk')}/`;\n                    break;\n                case 'swport': {\n                    const switchId = this.get('switch_id');\n                    if (switchId) {\n                        const vlanId = this.get('vlan_id');\n                        this.url = vlanId\n                            ? `expand/switch/${switchId}/vlan/${vlanId}/`\n                            : `expand/switch/${switchId}/`;\n                    } else {\n                        this.url = `expand/swport/${this.get('pk')}/`;\n                    }\n                }\n                    break;\n            }\n        },\n\n        elementId: function () {\n            if (this.get('type') !== 'root') {\n                return `${this.get('type')}-${this.get('pk')}`;\n            } else {\n                return 'root';\n            }\n        },\n\n        expand: function (d) {\n\n            /*\n             * Expands the node if its expandable and not currently\n             * processing. Fetches the nodes children from the\n             * server if necessary. Triggers a rerender of the\n             * node and it's subtree.\n             */\n\n            console.log('in expand');\n\n            if (!this.get('expandable') || this.get('state') === 'processing') {\n                console.log('can not expand');\n                return;\n            }\n\n            this.set('state', 'processing');\n\n            const children = this.getChildren();\n\n            if (children.length === 0) {\n                children.fetch({\n                    success: () => {\n                        this.set('state', 'expanded');\n                        Backbone.EventBroker.trigger('tree:render', this);\n                        if (d?.resolve) d.resolve();\n                    },\n                    error: (collection, response) => {\n                        if (response.status === 401) {\n                            // If no longer authorized, reload the page\n                            location.reload();\n                        }\n                        console.log('Error fetching children nodes');\n                        this.set('state', 'collapsed');\n                        if (d?.reject) d.reject();\n                    }\n                });\n            } else {\n                console.log('Yay! children already fetched');\n                this.set('state', 'expanded');\n                Backbone.EventBroker.trigger('tree:render', this);\n                if (d?.resolve) d.resolve();\n            }\n        },\n\n        collapse: function () {\n\n            /*\n             * Collapses the nodes subtree and triggers a\n             * rerender. The nodes children are kept.\n             */\n\n            console.log('collapsing node');\n\n            if (this.get('state') === 'collapsed') {\n                return;\n            }\n\n            this.set('state', 'collapsed');\n            Backbone.EventBroker.trigger('tree:render', this);\n        },\n\n        getChildren: function () {\n            if (!this.get('children')) {\n                this.set('children', new NodeCollection());\n            }\n            const collection = this.get('children');\n            collection.url = this.url;\n            return collection;\n        },\n\n        match: function (d) {\n            Backbone.EventBroker.trigger('node:match', this, d);\n        }\n    });\n\n    const NodeCollection = Backbone.Collection.extend({\n\n        /*\n         * A collection for Node-models. Used to hold\n         * a nodes children.\n         */\n\n        model: Node\n    });\n\n    const Tree = Backbone.Model.extend({\n\n        /*\n         * A Container-model for the tree.\n         *\n         * NOTE: Might not be necessary\n         */\n\n        defaults: {\n            root: new Node({expandable: true})\n        },\n\n        expand: function () {\n\n            this.get('root').expand({});\n        },\n\n        collapse: function () {\n\n            this.get('root').collapse();\n        }\n    });\n\n\n    const TreeView = Backbone.View.extend({\n\n        /*\n         * View-object for the Tree model.\n         */\n\n        el: '#networktree',\n\n        interests: {\n            'tree:search': 'search',\n            'tree:render': 'render'\n        },\n\n        initialize: function () {\n\n            // Registering for events\n            Backbone.EventBroker.register(this);\n        },\n\n        search: function (data) {\n\n            /*\n             * Depth first search in the network tree that expands\n             * and highlights matching nodes from the search response.\n             */\n\n            this.$el.find('.highlight').removeClass('highlight').addClass('node');\n\n            const root = this.model.get('root');\n            const routers = root.get('children');\n\n            const hasResults = data.routers.length > 0 ||\n                data.gwports.length > 0 ||\n                data.swports.length > 0;\n\n            routers.each((router) => {\n                if (!hasResults && router.get('state') === 'expanded') {\n                    router.collapse();\n                    return;\n                }\n\n                if (data.routers.includes(router.get('pk'))) {\n                    const dRouters = $.Deferred();\n                    router.match(dRouters);\n                    dRouters.done(() => this.expandMatchingGwports(router, data));\n                }\n            });\n        },\n\n        expandMatchingGwports: function (router, data) {\n            const gwports = router.get('children');\n            gwports.each((gwport) => {\n                if (data.gwports.includes(gwport.get('pk'))) {\n                    const dGWPorts = $.Deferred();\n                    gwport.match(dGWPorts);\n                    dGWPorts.done(() => this.highlightMatchingSwports(gwport, data));\n                }\n            });\n        },\n\n        highlightMatchingSwports: function (gwport, data) {\n            const swports = gwport.get('children');\n            swports.each((swport) => {\n                if (data.swports.includes(swport.get('pk'))) {\n                    swport.match();\n                }\n            });\n        },\n\n        render: function (node) {\n\n            /*\n             * Renders the tree recursively starting either\n             * with the root or the node which triggered a\n             * rerender-event.\n             */\n\n            if (node.get('type') === 'root') {\n                console.log('rendering from root');\n                const rootView = new NodeView({model: node});\n                const nodes = $('<ul>');\n                nodes.html(rootView.render().el);\n                this.$el.html(nodes);\n            } else {\n                console.log(`rendering from ${node.elementId()}`);\n                const nodeView = new NodeView({model: node});\n                const element = this.$el.find(`#${node.elementId()}`);\n                nodeView.setElement(element);\n                nodeView.render();\n            }\n\n            return this;\n        }\n    });\n\n    const NodeView = Backbone.View.extend({\n\n        /*\n         * View-object for the Node model\n         */\n\n        tagName: 'li',\n        className: 'node',\n\n        interests: {\n            'node:match': 'match'\n        },\n\n        initialize: function () {\n            let template;\n            switch (this.model.get('type')) {\n                case 'router':\n                    template = routerTemplate;\n                    break;\n                case 'gwport':\n                    template = gwportTemplate;\n                    break;\n                case 'swport':\n                    template = swportTemplate;\n                    break;\n                case 'switch':\n                    template = switchTemplate;\n                    break;\n                case 'swport-leaf':\n                    template = leafTemplate;\n                    break;\n            }\n\n            if (template) {\n                this.template = Handlebars.compile(template);\n            }\n            Backbone.EventBroker.register(this);\n\n            this.listenTo(this.model.getChildren(), 'error', this.handleError);\n            this.$el.attr('id', this.model.elementId());\n        },\n\n        handleError: function (collection, response) {\n            this.hideSpinner();\n            this.showError(`The request for more data failed (${response.status} - ${response.statusText}).`);\n        },\n\n        showError: function (text) {\n            if (!this.errorElement) {\n                this.errorElement = this.createErrorElement();\n                this.errorElement.appendTo(this.$el);\n            }\n            this.errorElement.text(text).show();\n            return this.errorElement;\n        },\n\n        createErrorElement: function () {\n            return $('<span class=\"alert-box alert\"></span>').on('click', function () {\n                $(this).hide();\n            });\n        },\n\n        render: function () {\n\n            /*\n             * Renders the node, and also its children if the\n             * node is expanded.\n             */\n\n            if (this.model.get('type') !== 'root') {\n\n                this.$el.html(this.template(this.model.toJSON()));\n                this.registerExpandTrigger();\n            } else {\n                // The node is root and we don't need\n                // to render it\n               this.$el.html($('<ul class=\"children\">'));\n            }\n\n            if (this.model.get('state') === 'expanded') {\n                const children = this.model.get('children');\n                const childrenElem = this.$('.children');\n                const lastIndex = children.length - 1;\n\n                children.each((child, i) => {\n                    const childView = new NodeView({model: child});\n                    if (i === lastIndex) {\n                        child.set('end', true);\n                    }\n\n                    childrenElem.append(childView.render().el);\n                });\n            }\n            return this;\n        },\n\n        showSpinner: function () {\n            this.$('img').attr('src', `${NAV.imagePath}/main/process-working.gif`);\n        },\n\n        hideSpinner: function () {\n            // This should only be called on a node that fails to expand\n            // and therefore we know it's expandable.\n            this.$('img').attr('src', `${NAV.imagePath}/networkexplorer/expand.gif`);\n        },\n\n        registerExpandTrigger: function () {\n\n            // Bind 'triggerExpand' event to the collapse/expand image\n            // if the node is expandable.\n            if (this.model.get('expandable')) {\n                const expandButton = this.$('img');\n                expandButton.on('click', (e) => this.triggerExpand(e));\n            }\n        },\n\n        triggerExpand: function (d) {\n\n            /*\n             * Expands or collapses a node based on its state.\n             * Is bound to click event on the expand-/collapse-icon\n             */\n\n            console.log(`caught expand on ${this.model.elementId()}`);\n\n            if (this.model.get('state') === 'collapsed' &&\n                    this.model.get('expandable')) {\n                this.showSpinner();\n                this.model.expand(d);\n            } else if (this.model.get('state') === 'expanded') {\n                this.model.collapse();\n            }\n        },\n\n        match: function (node, d) {\n            if (node === this.model) {\n                if (this.model.get('type') !== 'router') {\n                    this.$el.attr('class', 'highlight');\n                }\n                this.model.set('matched', true);\n                if (this.model.get('state') === 'expanded') {\n                    this.model.collapse();\n                }\n                this.triggerExpand(d);\n            }\n        }\n    });\n\n    // Return a container exposing all objects\n    return {\n        Node: Node,\n        Tree: Tree,\n        NodeCollection: NodeCollection,\n        NodeView: NodeView,\n        TreeView: TreeView\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/popover.js",
    "content": "define([], function () {\n  \"use strict\";\n\n  function init() {\n    if (!document.body) {\n        document.addEventListener('DOMContentLoaded', init);\n        return;\n    }\n\n    // Prevent double initialization\n    if (document.body.dataset.popoverInitialized) return;\n    document.body.dataset.popoverInitialized = \"true\";\n\n    // Single click handler for all popover interactions\n    document.addEventListener('click', handleClick);\n    document.addEventListener('popover.open', (e) => {\n        const id = e.detail?.id;\n        if (!id) return;\n        const popover = document.getElementById(id);\n        if (popover) openPopover(popover);\n    });\n    document.addEventListener(\"popover.close\", (e) => {\n        const id = e.detail?.id;\n        if (!id) return;\n        const popover = document.getElementById(id);\n        if (popover) closePopover(popover);\n    })\n  }\n\n  function handleClick(e) {\n    // Handle popover triggers\n    const trigger = e.target.closest('[data-popover-target]');\n    if (trigger) {\n      togglePopover(trigger);\n      return;\n    }\n\n    // Handle close buttons\n    const closeButton = e.target.closest('[data-close-popover]');\n    if (closeButton) {\n      closePopover(closeButton.closest('.popover'));\n      return;\n    }\n\n    // Handle outside clicks - close all open popovers\n    closeOpenPopovers(e.target);\n  }\n\n  function togglePopover(trigger) {\n    const target = document.querySelector(trigger.dataset.popoverTarget);\n    if (!target) return;\n\n    const isOpen = target.classList.contains('open');\n\n    // Close other popovers first\n    closeAllPopovers();\n\n    if (!isOpen) {\n      target.classList.add('open');\n      trigger.setAttribute('aria-expanded', 'true');\n    } else {\n      target.classList.remove('open');\n      trigger.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  function openPopover(popover) {\n    if (!popover) return;\n    const trigger = document.querySelector(`[data-popover-target=\"#${popover.id}\"]`);\n    popover.classList.add('open');\n    if (trigger) {\n      trigger.setAttribute('aria-expanded', 'true');\n    }\n  }\n\n  function closePopover(popover) {\n    if (!popover) return;\n\n    const trigger = document.querySelector(`[data-popover-target=\"#${popover.id}\"]`);\n    popover.classList.remove('open');\n    if (trigger) {\n      trigger.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  function closeOpenPopovers(clickTarget) {\n    document.querySelectorAll('.popover.open').forEach(popover => {\n      const trigger = document.querySelector(`[data-popover-target=\"#${popover.id}\"]`);\n\n      // Don't close if click was inside popover or on trigger\n      if (!popover.contains(clickTarget) && !trigger?.contains(clickTarget)) {\n        closePopover(popover);\n      }\n    });\n  }\n\n  function closeAllPopovers() {\n    document.querySelectorAll('.popover.open').forEach(closePopover);\n  }\n\n  init();\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/rickshaw-utils.js",
    "content": "/** Helper functions for Rickshaw */\ndefine([], function () {\n\n    /**\n     * Create the series objects containing meta info about the series and\n     * the datapoints formatted correctly.\n     */\n    function createSeries(data) {\n        var palette = new Rickshaw.Color.Palette({scheme: 'munin'});\n\n        return data.map(function (series, index) {\n            return {\n                key: index,\n                name: series.target,\n                color: palette.color(),\n                data: series.datapoints.map(convertToRickshaw)\n            };\n        });\n    }\n\n\n    /**\n     * Rickshaw demands  {x: timestamp, y: value}\n     * Graphite delivers [value, timestamp]\n     */\n    function convertToRickshaw(dataPoint) {\n        return {\n            x: dataPoint[1],\n            y: dataPoint[0]\n        };\n    }\n\n\n    /**\n     * Series names are often wrapped in function calls. Remove the calls.\n     * Ex:\n     * keepLastValue(nav.devices.buick_lab_uninett_no.ipdevpoll.1minstats.runtime)\n     * => nav.devices.buick_lab_uninett_no.ipdevpoll.1minstats.runtime\n     */\n    function filterFunctionCalls(name) {\n        var serieMatch = name.match(/nav\\.[.\\w]+/);\n        if (serieMatch) {\n            var serie = serieMatch[0];\n            // Remove all functions and return the rest\n            return serie + removeFunctionCalls(name);\n        } else {\n            return name;\n        }\n\n    }\n\n\n    /**\n     * Remove all function calls from a string. We do it recursively starting\n     * at the innermost one\n     */\n    function removeFunctionCalls(string) {\n        var functionRegex = /(\\w+\\([^()]+\\))/;\n        var functionMatch = string.match(functionRegex);\n        if (functionMatch) {\n            string = string.replace(functionRegex, '');\n            string = removeFunctionCalls(string);\n        }\n        return string;\n    }\n\n\n    /** NAVs way of presenting si-numbers */\n    function siNumbers(y, toInteger, spacer) {\n        if (y === null || y === 0) {\n            return y;\n        }\n\n        var precision = typeof toInteger === 'undefined' ? 2: 0;\n        var space = typeof spacer === 'undefined' ? ' ': spacer;\n        var convert = function(value, converter) {\n            return (value / converter).toFixed(precision);\n        };\n\n        var value = Number(y);\n        var absvalue = Math.abs(value);\n        if (absvalue >= 1000000000000) { return convert(value, 1000000000000) + space + \"T\"; }\n        else if (absvalue >= 1000000000) { return convert(value, 1000000000) + space + \"G\"; }\n        else if (absvalue >= 1000000) { return convert(value, 1000000) + space + \"M\"; }\n        else if (absvalue >= 1000) { return convert(value, 1000) + space + \"k\"; }\n        else if (absvalue <= 0.0000000001) { return convert(value, 1/1000000000000 ) + space + \"p\"; }\n        else if (absvalue <= 0.0000001) { return convert(value, 1/1000000000 ) + space + \"n\"; }\n        else if (absvalue <= 0.0001) { return convert(value, 1/1000000 ) + space + \"µ\"; }\n        else if (absvalue <= 0.01) { return convert(value, 1/1000) + space + \"m\"; }\n        else { return value.toFixed(precision); }\n    }\n\n    // Replaces Rickshaw's builtin formatKMBT for tick formatting (as the B makes no sense)\n    function formatKMGT(y) {\n        var abs_y = Math.abs(y);\n        if (abs_y >= 1000000000000) { return y / 1000000000000 + \"T\" }\n        else if (abs_y >= 1000000000) { return y / 1000000000 + \"G\" }\n        else if (abs_y >= 1000000) { return y / 1000000 + \"M\" }\n        else if (abs_y >= 1000) { return y / 1000 + \"K\" }\n        else if (abs_y < 1 && y > 0) { return y.toFixed(2) }\n        else if (abs_y === 0) { return '' }\n        else { return y }\n    };\n\n    function resizeGraph(graph) {\n        var boundingRect = graph.element.getBoundingClientRect();\n        graph.configure({\n            width: boundingRect.width,\n            height: boundingRect.height\n        });\n        graph.render();\n    }\n\n\n    return {\n        createSeries: createSeries,\n        convertToRickshaw: convertToRickshaw,\n        filterFunctionCalls: filterFunctionCalls,\n        removeFunctionCalls: removeFunctionCalls,\n        resizeGraph: resizeGraph,\n        siNumbers: siNumbers,\n        formatKMGT: formatKMGT\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/rickshaw_graph.js",
    "content": "define([\n    'libs/rickshaw.min',\n    'libs-amd/text!resources/rickshawgraph/graphtemplate.hbs',\n    'libs/urijs/URI',\n    'rickshaw-utils',\n    'handlebars'\n], function (Rickshaw, Template, URI, RickshawUtils, Handlebars) {\n\n    var template = Handlebars.compile(Template);\n    var resizeTimeout = 250;  // resize throttled at resizeTimeout ms\n\n    function RickshawGraph(container, data, url, minValue) {\n        container.innerHTML = template({\n            graph_title: container.dataset.title,\n            graph_unit: container.dataset.unit,\n            graph_y_axis: container.dataset.unit\n        });\n\n        var element = container.getElementsByClassName('rickshaw-graph')[0];\n        var graph = new Rickshaw.Graph({\n            element: element,\n            series: RickshawUtils.createSeries(data),\n            renderer: 'line',\n            min: typeof minValue === 'undefined' ? 0 : minValue,\n            stack: false  // Need to set this so that data is not stacked\n        });\n\n        addUtility(container, graph, url);\n        graph.render();\n\n        // Throttle resize\n        var timer = null;\n        $(window).on('resize', function () {\n            if (!timer) {\n                timer = setTimeout(function () {\n                    RickshawUtils.resizeGraph(graph);\n                    timer = null;\n                }, resizeTimeout);\n            }\n        });\n\n        return graph;\n    }\n\n\n    function buildObject(parts) {\n        var obj = {};\n        for(var i = 0; i < parts.length; i++) {\n            var keyValue = parts[i].split('=');\n            obj[keyValue[0]] = keyValue[1];\n        }\n        return obj;\n    }\n\n    function getSeriesMeta(name) {\n        return name.split(';;');\n    }\n\n    /** Add all utility stuff to the graph */\n    function addUtility(container, graph, url) {\n        var $element = $(graph.element);\n        var urlParams = URI.parseQuery(url);\n\n        graph.setRenderer('multi');\n        graph.series.forEach(function (serie) {\n            var metaParts = getSeriesMeta(serie.name),\n                name = metaParts.pop(),\n                meta = buildObject(metaParts);\n            serie.key = name;\n            serie.name = RickshawUtils.filterFunctionCalls(name);\n            serie.renderer = meta.renderer ? meta.renderer : 'line';\n            if (meta.color !== undefined) {\n                serie.color = meta.color;\n            }\n\n            // If this is a nav-metric, typically very long, display only the last two \"parts\"\n            if (serie.name.substr(0, 4) === 'nav.') {\n                var parts = serie.name.split('.');\n                serie.name = [parts[parts.length - 2], parts[parts.length - 1]].join('.');\n            }\n\n        });\n\n        new Rickshaw.Graph.Axis.Time({\n            graph: graph,\n            timeFixture: new Rickshaw.Fixtures.Time.Local()\n        });\n\n        new Rickshaw.Graph.Axis.Y({\n            graph: graph,\n            orientation: 'left',\n            element: $element.siblings('.rickshaw-y-axis')[0],\n            tickFormat: RickshawUtils.formatKMGT\n        });\n\n        // Display information about series when hovering over the graph\n        new NavHover({\n            graph: graph,\n            yFormatter: RickshawUtils.siNumbers,\n            urlparams: urlParams\n        });\n\n        // Add legend for each data series\n        var legend = new Rickshaw.Graph.Legend({\n            graph: graph,\n            element: $element.siblings('.rickshaw-legend')[0]\n        });\n\n\n        // Highlight data series when user mouses over legend.\n        new Rickshaw.Graph.Behavior.Series.Highlight({\n            graph: graph,\n            legend: legend\n        });\n\n        // Toggle visibility of data series\n        new Rickshaw.Graph.Behavior.Series.Toggle({\n            graph: graph,\n            legend: legend\n        });\n\n        // Add preview of all data that can be zoomed with sliders.\n        var preview = new Rickshaw.Graph.RangeSlider.Preview({\n            graph: graph,\n            element: $element.siblings('.rickshaw-preview')[0]\n        });\n\n        updateMeta(container, urlParams);\n\n    }\n\n\n    /**\n     * Update the title and unit based on url-parameters.\n     * @param {HTMLElement} container - The rickshaw container element\n     * @param {object} params - object containing all url parameters\n     */\n    function updateMeta(container, params) {\n        var $container = $(container);\n        // Try to set title\n        if (!$container.data('title') && params.title) {\n            $container.find('.rickshaw-title').html(params.title);\n        }\n        // Try to set units on y-axis\n        if (!$container.data('unit') && params.vtitle) {\n            $container.find('.rickshaw-y-axis-term').html(params.vtitle);\n        }\n        return params;\n    }\n\n\n    /** Create a hover detail that displays all series at the same time */\n    var NavHover = Rickshaw.Class.create(Rickshaw.Graph.HoverDetail, {\n        initialize: function ($super, args) {\n            $super(args);\n            this.urlparams = args.urlparams;\n        },\n\n        createHoverElements: function (args) {\n            if (typeof this.hoverElements !== 'undefined') {\n                return this.hoverElements;\n            }\n            var container = document.createElement('div');\n            container.className = 'item';\n\n            var date = document.createElement('span');\n            date.className = 'date';\n\n            var lines = {};\n            var dots = {};\n\n            this.graph.series.forEach(function (serie) {\n                lines[serie.key] = document.createElement('div');\n\n                var dot = document.createElement('div');\n                dot.style.borderColor = serie.color;\n                dot.className = 'dot';\n                dots[serie.key] = dot;\n            });\n\n            this.hoverElements = {\n                container: container,\n                date: date,\n                lines: lines,\n                dots: dots\n            };\n\n            return this.hoverElements;\n        },\n\n        formatter: function (series, x, actualY, something, formattedY) {\n            var unit = 'vtitle' in this.urlparams ? this.urlparams.vtitle : '';\n            // If the formatted y-value contains a symbol, we do not want a spacer value\n            var spacer = isNaN(+formattedY) ? '' : ' ';\n            var swatch = '<span class=\"detail_swatch\" style=\"background-color: ' + series.color + '\"></span>',\n                seriesValue = '<span class=\"series-value\">' + series.name + \": \" + formattedY + spacer + unit + '</span>';\n            return swatch + seriesValue;\n        },\n\n        render: function (args) {\n            var hoverElements = this.createHoverElements(args);\n            var container = hoverElements.container,\n                date = hoverElements.date;\n\n            // Put a date at the top of the container\n            container.innerHTML = '';\n            date.innerHTML = new Date(args.points[0].value.x * 1000).toLocaleString();\n            container.appendChild(date);\n\n            // Add all targets and dots\n            args.points.sort(function (a, b) {\n                return a.order - b.order;\n            }).forEach(function (point) {\n                var series = point.series;\n                var actualY = series.scale ? series.scale.invert(point.value.y) : point.value.y;\n\n                // Each line describes a target\n                var line = hoverElements.lines[series.key];\n                line.innerHTML = this.formatter(series, point.value.x, actualY, point.formattedXValue, point.formattedYValue, point);\n                container.appendChild(line);\n\n                // Place dots - remember that they are not part of container\n                var dot = hoverElements.dots[series.key];\n                dot.style.top = this.graph.y(point.value.y0 + point.value.y) + 'px';\n                dot.classList.add('active');\n                this.element.appendChild(dot);\n            }, this);\n\n            // Decide on which side of line to put hover element\n            container.classList.remove('left', 'right');\n            container.classList.add('active', 'right');\n\n            // Put element next to mouse\n            container.style.top = args.mouseY + 'px';\n\n            this.element.appendChild(container);\n            this.show();\n\n            // If it is positioned badly, change side\n            if (this._calcLayoutError([container]) > 0) {\n                container.classList.remove('right');\n                container.classList.add('left');\n            }\n\n        }\n    });\n\n    return RickshawGraph;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/room_mapper.js",
    "content": "define(['ol-debug'], function (ol) {\n\n    var imagePath = NAV.imagePath + '/openlayers/';\n    var primaryMarkerImage = imagePath + 'marker-blue.png';\n    var focusMarkerImage = imagePath + 'marker-gold.png';\n\n    /**\n     * Mapper creates an OpenStreetMap on the node given rooms from NAV\n     *\n     * @param {string|node} node: the map node\n     * @param {object} options: handled options are {string} 'room' or {string} 'location'\n     *\n     * if room is set it is highlighted and set as center for the map\n     * if location is set only rooms for that location is displayed\n     *\n     */\n    function RoomMapper(node, options) {\n        this.node = typeof node === 'string' ? document.getElementById(node) : node;\n\n        this.options = _.extend({}, options);\n        this.room_id = this.options.room;\n        this.location_id = this.options.location;\n\n        this.overlays = {};\n        this.overlaysVisible = false;\n\n        this.clusterDistance = 30; // Distance in pixels for clustering to happen\n        this.maxZoom = 20;\n\n        addCssToHead(NAV.cssPath + '/ol.css');\n        this.initialize();\n    }\n\n    RoomMapper.prototype = {\n        initialize: function () {\n            // Create clusters based on all rooms\n            this.markerSource = this.createMarkerSource();\n            this.clusterSource = this.createClusterSource();\n            var clusters = new ol.layer.Vector({\n                source: this.clusterSource,\n                style: getComponentStyle\n            });\n\n            this.map = this.createMap(clusters);\n            this.view = this.map.getView();\n\n            var self = this;\n            // Center and fit when features are loaded\n            $(this.node).on('addfeatures', function() {\n                self.centerAndFit.apply(self);\n                self.addOverlappingNodesDetection();\n            });\n\n            addClickNavigation(this.map);\n        },\n\n        createMap: function(clusters) {\n            return new ol.Map({\n                target: this.node,\n                view: this.createView(),\n                layers: [\n                    new ol.layer.Tile({\n                        source: getOSMsource()\n                    }),\n                    clusters\n                ],\n                controls: ol.control.defaults().extend(\n                    [\n                        new ol.control.FullScreen(),\n                        new OverlayToggler(this)\n                    ])\n            });\n        },\n\n        createView: function() {\n            return new ol.View({\n                zoom: this.maxZoom,\n                maxZoom: this.maxZoom,\n                center: [0,0]\n            });\n        },\n\n        centerAndFit: function() {\n            if (this.room_id) {\n                var room_id = this.room_id;\n                var focusRoom = this.markerSource.getFeatures().find(function(room) {\n                    return room.get('name') === room_id;\n                });\n                this.view.setCenter(focusRoom.getGeometry().getCoordinates());\n            } else {\n                this.view.fit(this.markerSource.getExtent());\n            }\n        },\n\n        createClusterSource: function() {\n            return new ol.source.Cluster({\n                source: this.markerSource,\n                distance: this.clusterDistance\n            });\n        },\n\n        /**\n         * Loads all rooms from API and creates features of those with position\n         */\n        createMarkerSource: function () {\n            var self = this;\n            var source = new ol.source.Vector();\n            var loader = function() {\n                var url = self.location_id ?\n                          NAV.urls.api_room_list + '?location=' + self.location_id :\n                          NAV.urls.api_room_list;\n                $.getJSON(url, self.getFeatures.bind(self, source));\n            };\n            source.setLoader(loader);\n            return source;\n        },\n\n        getFeatures: function (source, data) {\n            var self = this;\n            var features = data.results.filter(function(room) {\n                return room.position;\n            }).map(function(room) {\n                return self.createFeature(room);\n            });\n            source.addFeatures(features);\n            if (data.next) {\n                $.getJSON(data.next, this.getFeatures.bind(this, source))\n            } else {\n                $(this.node).trigger('addfeatures');\n            }\n        },\n\n        createFeature: function (room) {\n            return new ol.Feature({\n                geometry: new ol.geom.Point(transformPosition(room)),\n                name: room.id,\n                description: room.description,\n                focus: this.room_id && room.id === this.room_id\n            });\n        },\n\n        /**\n         * Detects overlapping nodes on threshold zoom and creates an overlay\n         * displaying the rooms that overlap.\n         */\n        addOverlappingNodesDetection: function() {\n            var self = this;\n            var _detectMaxZoom = function() {\n                if (self.overlaysVisible || self.view.getZoom() >= self.view.getMaxZoom()) {\n                    self.showOverlays();\n                } else {\n                    self.hideOverlays();\n                }\n            };\n\n            // Throttle the zoom detection\n            var throttleInterval = 200;  // ms\n            var detectMaxZoom = _.throttle(_detectMaxZoom, throttleInterval, {leading: false});\n            this.view.on('change:resolution', detectMaxZoom);\n            _detectMaxZoom();\n        },\n\n        /**\n         * Shows overlays for all clusternodes that exist on max zoom\n         */\n        showOverlays: function() {\n            var self = this;\n            var extent = this.view.calculateExtent(this.map.getSize());\n\n            // Find features that are clusters\n            var featuresToDraw = this.clusterSource.getFeaturesInExtent(extent).filter(function(feature) {\n                var features = feature.get('features');\n                return features.length > 1;\n            });\n\n            // Draw the overlay for all the clusters\n            if (featuresToDraw.length >= 1) {\n                this.hideOverlays();\n                featuresToDraw.forEach(function(feature) {\n                    var id = feature.get('features').map(function(f) {\n                        return f.get('name');\n                    }).join('-');\n                    self.showOverlay(id, feature);\n                });\n                this.overlaysVisible = true;\n                $(this.node).trigger('changeOverlaysVisibility');\n            }\n        },\n\n        /**\n         * If overlay already exists, display it, otherwise create and display it.\n         */\n        showOverlay: function(id, feature) {\n            if (id in this.overlays) {\n                this.overlays[id].setPosition(feature.getGeometry().getCoordinates());\n            } else {\n                var overlay = this.createOverlay(feature);\n                this.overlays[id] = overlay;\n                this.map.addOverlay(overlay);\n            }\n        },\n\n        hideOverlays: function() {\n            _.each(this.overlays, function(overlay) {\n                overlay.setPosition(undefined);\n            });\n            this.overlaysVisible = false;\n            $(this.node).trigger('changeOverlaysVisibility');\n        },\n\n        createOverlay: function(feature) {\n            var $list = $('<ul class=no-bullet>');\n            $list.css({\n                \"background-color\": \"white\",\n                \"border\": \"1px solid #ccc\",\n                \"opacity\": \".7\",\n                \"padding\": \"0 .5em\",\n                \"margin\": \"1em 0 0 0\"\n            });\n            var features = feature.get('features');\n            features.sort(function(a, b) {\n                var nameA = a.get('name');\n                var nameB = b.get('name');\n                return nameA.localeCompare(nameB);\n            });\n            $list.append(features.map(function(feature) {\n                var name = feature.get('name');\n                var imageSrc = feature.get('focus') ? focusMarkerImage : primaryMarkerImage;\n                var $link = $('<a>')\n                    .attr('href', NAV.urls.room_info_base + name)\n                    .attr('title', feature.get('description'))\n                    .html(name)\n                    .css('margin-left', '.5em');\n                var $image = $('<img>').attr('src', imageSrc).css('height', '1em');\n                return $(\"<li>\").append($image, $link);\n            }));\n            return new ol.Overlay({\n                element: $list.get(0),\n                position: feature.getGeometry().getCoordinates(),\n                positioning: 'top-center',\n            });\n        },\n\n    };\n\n    function OverlayToggler(opt_options) {\n        var roomMapper = opt_options;\n        var button = document.createElement('button');\n        button.innerHTML = 'O';\n\n        function handleClick() {\n            roomMapper.overlaysVisible = !roomMapper.overlaysVisible;\n            if (roomMapper.overlaysVisible) {\n                roomMapper.showOverlays();\n            } else {\n                roomMapper.hideOverlays();\n            }\n        }\n\n        button.addEventListener('click', handleClick, false);\n        button.addEventListener('touchstart', handleClick, false);\n        $(roomMapper.node).on('changeOverlaysVisibility', function() {\n            button.style.backgroundColor = roomMapper.overlaysVisible ? '#b8bb6f' : '';\n        });\n\n\n        var element = document.createElement('div');\n        element.className = 'toggle-overlay ol-control';\n        element.title = 'Toggle showing overlapping rooms as a list';\n        element.style.top = '65px';\n        element.style.left = '.5em';\n        element.appendChild(button);\n\n        ol.control.Control.call(this, {\n            element: element,\n        });\n    }\n    ol.inherits(OverlayToggler, ol.control.Control);\n\n\n    /** Return OpenStreeMap source for OpenLayers3 */\n    function getOSMsource() {\n        return new ol.source.OSM({\n            url: NAV.osmTileUrl + '/{z}/{x}/{y}.png',\n            crossOrigin: null\n        });\n    }\n\n    function transformPosition(room) {\n        var point = [getLong(room), getLat(room)];\n        return ol.proj.transform(point, 'EPSG:4326', 'EPSG:3857');\n    }\n\n    function getLat(room) {\n        return parseFloat(room.position[0]);\n    }\n\n    function getLong(room) {\n        return parseFloat(room.position[1]);\n    }\n\n    /**\n     * Creates styles for the different cluster components\n     */\n    function getComponentStyle(feature) {\n        var features = feature.get('features');\n        var size = features.length;\n        if (size <= 1) {\n            return getRoomStyle(features[0]);\n        } else {\n            return getClusterStyle(size);\n        }\n    }\n\n    /**\n     * Gets the style for a given room\n     * @param {string} room - the room id/name\n     */\n    function getRoomStyle(room) {\n        var name = room.get('name');\n        var focusRoom = room.get('focus');\n        return focusRoom ?\n               getFocusMarkerStyle(name) :\n               getMainMarkerStyle(name);\n    }\n\n    /**\n     * Gets the style for a cluster\n     * @param {int} size - the number of rooms in the cluster\n     */\n    function getClusterStyle(size) {\n        return new ol.style.Style({\n            image: new ol.style.Circle({\n                radius: 15,\n                stroke: new ol.style.Stroke({\n                    color: '#fff'\n                }),\n                fill: new ol.style.Fill({\n                    color: '#1976D2'\n                })\n            }),\n            text: new ol.style.Text({\n                text: size.toString(),\n                fill: new ol.style.Fill({\n                    color: '#fff'\n                }),\n                font: '12px sans-serif'\n            })\n        });\n    }\n\n    function addCssToHead(src) {\n        var style = document.createElement('link');\n        style.rel = 'stylesheet';\n        style.href = src;\n        document.getElementsByTagName('head')[0].appendChild(style);\n    }\n\n    /**\n     * On click on marker, go to room info for that room\n     * On click on cluster, zoom to rooms in that cluster\n     */\n    function addClickNavigation(map) {\n        var selectClick = new ol.interaction.Select({\n            condition: ol.events.condition.click,\n            style: new ol.style.Style({\n                // Set invisible style on select\n                fill: new ol.style.Fill({color: [255,255,255,0]}),\n            })\n        });\n        map.addInteraction(selectClick);\n        selectClick.on('select', function(e) {\n            if (e.selected.length) {\n                var selected = e.selected[0];\n                var features = selected.get('features');\n                if (features.length === 1) {\n                    // This is a single marker and should navigate to room on click\n                    var feature = features[0];\n                    feature.setStyle(null);  // Otherwise it disappears\n                    window.location = NAV.urls.room_info_base + feature.get('name');\n                } else {\n                    // This is a cluster of markers and should zoom to extent of markers in cluster\n                    var collection = new ol.geom.GeometryCollection(features.map(function(feature) {\n                        return feature.getGeometry();\n                    }));\n                    map.getView().fit(collection.getExtent());\n                }\n            }\n        })\n    }\n\n\n    function getMarkerStyle(text, image) {\n        return new ol.style.Style({\n            image: new ol.style.Icon({\n                src: image,\n            }),\n            text: new ol.style.Text({\n                text: text,\n                font: '12px sans-serif',\n                offsetY: 20,\n                backgroundFill: new ol.style.Fill({color: [255, 255, 255, 0.7]}),\n                padding: [0, 3, 0, 3]\n            })\n        });\n    }\n\n    function getFocusMarkerStyle(text) {\n        return getMarkerStyle(text, focusMarkerImage);\n    }\n\n    function getMainMarkerStyle(text) {\n        return getMarkerStyle(text, primaryMarkerImage);\n    }\n\n    return RoomMapper;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/seeddb_datatables.js",
    "content": "define([\n    'datatables',\n    'dt_config',\n],\n\nfunction() {\n\n    var tableWrapper = '#tablewrapper',\n        tableSelector = '#seeddb-content';\n    var $dataTable = $(tableSelector),\n        $tableWrapper = $(tableWrapper);\n\n\n    function enrichTable(tableType) {\n        var config = prepareDataTable(),\n            $wrapper = config.wrapper,\n            key = config.key;\n\n        var tableTypes = {\n            'default': applyDefaultDataTable,\n            'cabling': applyCablingDataTable,\n            'patch': applyPatchDataTable\n        };\n\n        var table = tableTypes[tableType](config);\n\n        /* Store rowcount when user changes it */\n        if (window.localStorage) {\n            $wrapper.find('.dataTables_length select').change(function (event) {\n                var newValue = $(event.target).val();\n                localStorage.setItem(key, newValue);\n            });\n        }\n    }\n\n    function prepareDataTable() {\n        var $wrapper = $(tableWrapper),\n            keyPrefix = 'nav.seeddb.rowcount',\n            key = [keyPrefix, $wrapper.attr('data-forpage')].join('.'),\n            numRows = 10;\n        if (window.localStorage) {\n            var value = localStorage.getItem(key);\n            if (value !== null) { numRows = +value; }\n        }\n\n        /* If neither a delete nor a move button is detected, no\n         * action is available and thus the checkboxes for marking\n         * action rows should not be displayed. */\n        var showCheckBoxes = true;\n        if (! ($(\"input[name='delete']\").length || $(\"input[name='move']\").length)) {\n            showCheckBoxes = false;\n        }\n\n        return {\n            wrapper: $wrapper,\n            key: key,\n            numRows: numRows,\n            showCheckBoxes: showCheckBoxes\n        };\n    }\n\n    function getPageConfig(numRows) {\n        // Enable and configure paging\n        return {\n            paging: true,\n            pagingType: 'full_numbers',\n            lengthChange: true,  // Change number of visible rows\n            lengthMenu: [\n                [10, 25, 50, -1],   // Choices for number of rows to display\n                [10, 25, 50, \"All\"] // Text for the choices\n            ],\n            pageLength: numRows  // The default number of rows to display\n        };\n    }\n\n    /* Runs on redraw of DataTable */\n    function drawCallback(oSettings) {\n        $('.paginate_button').removeClass('secondary').addClass('button tiny');\n        $('.paginate_button.current').addClass('secondary');\n        $('.ellipsis').addClass('button tiny secondary disabled paginate_button');\n        $(tableWrapper).removeClass('notvisible');\n    }\n\n    /* Runs once when DataTable is initialized */\n    function initComplete() {\n        /* Add custom class to the wrapper element */\n        $(this.api().table().container()).addClass('dataTables_background');\n    }\n\n    function applyDefaultDataTable(options) {\n        var numRows = options.numRows,\n            showCheckBoxes = options.showCheckBoxes;\n\n        var config = {\n            // Enable and configure ordering\n            ordering: true,  // Sort when clicking on headers\n            order: [[1, 'asc']],\n            columnDefs: [\n                {\n                    orderable: false,  // Do not sort\n                    visible: showCheckBoxes, // Display or not based on 'showCheckBoxes'\n                    targets: 0  // On this column\n                }\n            ],\n            info: true,  // Show number of entries visible\n            language: {\n                info: '_START_ - _END_ of _TOTAL_'\n            },\n\n            dom: \"<lip>t\",   // display order of metainfo (lengthchange, info, pagination)\n            drawCallback: drawCallback,\n            initComplete: initComplete\n        };\n        $.extend(config, getPageConfig(numRows));\n\n        /* Apply default DataTable */\n        return $(tableSelector).DataTable(config);\n\n    }\n\n    function applyCablingDataTable(options) {\n        var numRows = options.numRows,\n            showCheckBoxes = options.showCheckBoxes;\n\n        var columns = {\n            0: 'id', 1: 'room', 2: 'jack', 3: 'building', 4: 'target_room',\n            5: 'category', 6: 'description'\n        };\n\n        var config = {\n            processing: true,  // Indicate on long loading times\n            serverSide: true,  // https://datatables.net/manual/server-side\n            ajax: {\n                url: '/api/1/cabling?format=json',\n                data: function(d) {\n                    d.page = d.start / d.length + 1;\n                    d.page_size = d.length;\n                    d.search = d.search.value;\n                    d.room = $('#id_room').val();\n                    d.ordering = d.order.map(function(order) {\n                        var direction = order.dir === 'asc' ? '' : '-';\n                        return direction + columns[order.column];\n                    }).join(',');\n                },\n                dataFilter: function(data){\n                    const json = JSON.parse( data );\n                    json.recordsTotal = json.count;\n                    json.recordsFiltered = json.count;\n                    json.data = json.results;\n                    return JSON.stringify( json );\n                }\n            },\n            columns: [\n                { data: columns[0] },\n                { data: columns[1] },\n                { data: columns[2] },\n                { data: columns[3] },\n                { data: columns[4] },\n                { data: columns[5] },\n                { data: columns[6] }\n            ],\n            searching: true,\n            // Enable and configure ordering\n            ordering: true,  // Sort when clicking on headers\n            order: [[1, 'asc']],\n            columnDefs: [\n                {\n                    orderable: false,  // Do not sort\n                    visible: showCheckBoxes, // Display or not based on 'showCheckBoxes'\n                    render: function(data, type, row) {\n                        return '<input type=\"checkbox\" name=\"object\" class=\"selector\" value=\"' + data + '\">';\n                    },\n                    targets: 0  // On this column (column 0)\n                },\n                {\n                    targets: 2,\n                    render: function(data, type, obj) {\n                        return '<a href=\"' + NAV.urls.seeddb_cabling_edit + '?cablingid=' + obj.id + '\">' + data + '</a>';\n                    }\n                }\n            ],\n\n            info: true,  // Show number of entries visible\n            language: {\n                info: '_START_ - _END_ of _TOTAL_'\n            },\n            dom: \"<'filters'f><lip>t\",   // display order of metainfo (lengthchange, info, pagination)\n            drawCallback: drawCallback,\n            initComplete: initComplete\n        };\n        $.extend(config, getPageConfig(numRows));\n\n\n        /* Apply DataTable */\n        const table = $(tableSelector).DataTable(config);\n\n        /*\n         Add a dropdown to select room. The dropdown is prepopulated. Do a new\n         query when using the dropdown.\n         */\n        $('#id_room').appendTo('.filters').change(function() {\n            table.draw();\n        });\n\n        $('#id_room').select2({ width: '350px' });\n\n        return table;\n    }\n\n    function applyPatchDataTable(options) {\n        var numRows = options.numRows,\n            showCheckBoxes = options.showCheckBoxes;\n\n        var columns = {\n            0: 'id', 1: 'cabling.room.id', 2: 'interface.netbox.sysname',\n            3: 'interface.ifname', 4: 'interface.ifalias', 5: 'cabling.jack', 6: 'split'\n        };\n\n        var config = {\n            processing: true,  // Indicate on long loading times\n            serverSide: true,  // https://datatables.net/manual/server-side\n            ajax: {\n                url: '/api/1/patch?format=json',\n                data: function(d) {\n                    d.page = d.start / d.length + 1;\n                    d.page_size = d.length;\n                    d.search = d.search.value;\n                    d.cabling__room = $('#id_room').val();\n                    d.interface__netbox = $('#id_netbox').val();\n                    d.ordering = d.order.map(function(order) {\n                        var direction = order.dir === 'asc' ? '' : '-';\n                        return direction + columns[order.column].split('.').join('__');\n                    }).join(',');\n                },\n                dataFilter: function(data){\n                    const json = JSON.parse( data );\n                    json.recordsTotal = json.count;\n                    json.recordsFiltered = json.count;\n                    json.data = json.results;\n                    return JSON.stringify( json );\n                }\n            },\n            columns: [\n                { data: columns[0] },\n                { data: columns[1] },\n                { data: columns[2] },\n                { data: columns[3] },\n                { data: columns[4] },\n                { data: columns[5] },\n                { data: columns[6] },\n            ],\n            searching: true,\n            // Enable and configure ordering\n            ordering: true,  // Sort when clicking on headers\n            order: [[1, 'asc']],\n            columnDefs: [\n                {\n                    orderable: false,  // Do not sort\n                    visible: showCheckBoxes, // Display or not based on 'showCheckBoxes'\n                    render: function(data, type, row) {\n                        return '<input type=\"checkbox\" name=\"object\" class=\"selector\" value=\"' + data + '\">';\n                    },\n                    targets: 0  // On this column (column 0)\n                },\n                {\n                    render: function(data, type, obj) {\n                        return '<a href=\"' + NAV.urls.seeddb_patch_edit + '?netboxid=' + obj.interface.netbox.id + '\">' + data + '</a>';\n                    },\n                    targets: 2\n                }\n            ],\n\n            info: true,  // Show number of entries visible\n            language: {\n                info: '_START_ - _END_ of _TOTAL_'\n            },\n            dom: \"<'filters'f><lip>t\",   // display order of metainfo (lengthchange, info, pagination)\n            drawCallback: drawCallback,\n            initComplete: initComplete\n        };\n        $.extend(config, getPageConfig(numRows));\n\n\n        /* Apply DataTable */\n        var table = $(tableSelector).DataTable(config);\n\n        /*\n         Add dropdowns to select room and netbox. The dropdowns are\n         prepopulated. Do a new query when using the dropdowns. They reset each\n         other.\n         */\n        const $roomdropdown = $('#id_room'),\n              $netboxdropdown = $('#id_netbox');\n        let clearing = false;\n        $roomdropdown.appendTo('.filters').change(function() {\n            if (clearing) return;\n            clearing = true;\n            $netboxdropdown.val(null).trigger('change');\n            clearing = false;\n            table.draw();\n        });\n        $roomdropdown.select2({ width: '350px' });\n\n        $netboxdropdown.appendTo('.filters').change(function() {\n            if (clearing) return;\n            clearing = true;\n            $roomdropdown.val(null).trigger('change');\n            clearing = false;\n            table.draw();\n        });\n        $netboxdropdown.select2({ width: '350px' });\n\n        return table;\n    }\n\n    return {\n        enrichTable: enrichTable,\n        $dataTable: $dataTable,\n        $tableWrapper: $tableWrapper\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/seeddb_hstore.js",
    "content": "define([\n    \"libs-amd/text!resources/seeddb/hstore_container.html\",\n    \"libs-amd/text!resources/seeddb/hstore_row.html\",\n    'handlebars'\n],\nfunction (hstore_container_source, hstore_row_source, Handlebars) {\n    /*\n     An HStore field displays in the form of a textarea with a dict in it.\n     This module parses the dict, and presents a form to the user for editing\n     the dict and adding and deleting key-value pairs.\n     */\n    function HstoreForm($element) {\n        var $container = $element.parent(),\n            pairs = this.parseDict($element.val()),\n            that = this;\n\n        $element.hide();\n\n        /* Compile templates */\n        this.hstore_container_template = Handlebars.compile(hstore_container_source);\n        this.hstore_row_template = Handlebars.compile(hstore_row_source);\n\n        /* Create container for input fields. Add button for adding rows. */\n        this.hstore_container = $(this.hstore_container_template());\n        $container.append(this.hstore_container);\n        this.addDeleteListener();\n        this.addNewRowListener();\n        $container.append(this.createAddButton());\n\n        /* Append the existing input fields */\n        this.appendRows(pairs);\n\n        /* Update textarea on form submit */\n        var form = $($element.parents('form')[0]);\n        form.submit(function (event) {\n            that.writeDict($container, $element);\n        });\n    }\n\n    HstoreForm.prototype = {\n        'parseDict': function (dict) {\n            var obj, keys = [], objs = [];\n            obj = dict ? JSON.parse(dict) : {};\n            for (var key in obj) {\n                if (obj.hasOwnProperty(key)) {\n                    keys.push(key);\n                }\n            }\n            keys.sort();\n            for (var i = 0, l = keys.length; i < l; i++) {\n                objs.push({'key': keys[i], 'value': obj[keys[i]]});\n            }\n            return objs;\n        },\n        'createAddButton': function () {\n            var that = this,\n                button = $('<a class=\"button small secondary\" href=\"javascript:void(0);\">Add row</a>');\n\n            button.on('click', function () {\n                that.addRow();\n            });\n            return button;\n        },\n        'addDeleteListener': function () {\n            this.hstore_container.on('click', '.button.remove-hstore-row', function (event) {\n                $($(event.target).parents('.row')[0]).remove();\n            });\n        },\n        'addNewRowListener': function () {\n            /* Automatically add a new row if the last value field got focus\n               and the key attribute is not empty */\n            var that = this;\n            this.hstore_container.on('keyup', '.hstore_value', function (event) {\n                var value_fields = that.hstore_container.find('.hstore_value');\n                if (event.target === value_fields[value_fields.length - 1] && event.target.value.length > 0) {\n                    that.addRow();\n                }\n            });\n        },\n        'addRow': function (data) {\n            if (data === undefined) {\n                data = {key: '', value: ''};\n            }\n            this.hstore_container.append(this.hstore_row_template(data));\n        },\n        'removeRow': function () {\n\n        },\n        'appendRows': function (pairs) {\n            for (var i = 0, l = pairs.length; i < l; i++) {\n                this.addRow(pairs[i]);\n            }\n            this.addRow();\n        },\n        'writeDict': function ($container, $element) {\n            var data = {};\n            $container.find('.hstoreValues div.row').each(function () {\n                var $inputs = $(this).find('input'),\n                    key = $inputs[0].value;\n                if (key) {\n                    data[key] = $inputs[1].value;\n                }\n            });\n            $element.val(JSON.stringify(data));\n        }\n    };\n\n    return HstoreForm;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/seeddb_management_profile.js",
    "content": "require([],\nfunction () {\n\n    function executeOnLoad() {\n        /**\n         * Verifies we're on the Management Profiles edit form page before\n         * initializing the magic form switching code.\n         */\n        var $formElement = $('#seeddb-management-profile-form')\n        if ($formElement.length) {\n            protocolChanged();\n            $('#id_protocol').change(protocolChanged);\n        }\n    }\n\n    function protocolChanged() {\n        var $selected_protocol = $('#id_protocol').val();\n        $('fieldset.protocol-configuration').hide();\n        $('fieldset.protocol-configuration input').prop(\"disabled\", true);\n        var $show_id = '#protocol-' + $selected_protocol;\n        console.log('Enabling ' + $show_id);\n        $($show_id + ' input').prop(\"disabled\", false);\n        $($show_id).show();\n\n    }\n\n    /* Internet Explorer caching leads to onload event firing before\n     * script is loaded - thus we never get the load event. This code\n     * will at least make it usable. */\n    if (document.readyState === 'complete') {\n        executeOnLoad();\n    } else {\n        $(window).on('load', executeOnLoad);\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/seeddb_map.js",
    "content": "define(['plugins/fullscreen', 'openlayers'], function(fullscreen) {\n\n    /**\n     * Display map for editing room position in seedDB\n     * @param {string} mapElementId The id of the map element\n     * @param {string} positionFieldId The id of the form position field\n     * @param {string} getLocationTrigger The id of the trigger for getting a\n     * location\n     */\n    function SeedDBMap(mapElementId, positionFieldId, getLocationTrigger) {\n        var map = initMap(mapElementId);\n        var positionField = $('#' + positionFieldId);\n        var marker = populateMap(map, positionField);\n        $('#' + getLocationTrigger).on('click', function() {\n            getAndSetLocation(map, marker, positionField);\n        });\n    }\n\n\n    /**\n     * Create the map and add the base layer\n     * @param {string} mapElementId The id of the map container element\n     * @returns {OpenLayers.Map}\n     */\n    function initMap(mapElementId) {\n        OpenLayers.ImgPath = NAV.imagePath + '/openlayers/';\n        var map = new OpenLayers.Map(mapElementId, {\n            displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\n            controls: [\n                new OpenLayers.Control.PanZoomBar(),\n                new OpenLayers.Control.Navigation()\n            ],\n            theme: NAV.cssPath + '/openlayers.css'\n        }),\n            mapLayer = new OpenLayers.Layer.OSM(\n                'OpenStreetMap', NAV.osmTileUrl + '/${z}/${x}/${y}.png');\n\n        mapLayer.tileOptions = {crossOriginKeyword: null};\n        map.addLayer(mapLayer);\n        fullscreen.createFullscreenToggler(map.div, true);\n        return map;\n    }\n\n\n    /**\n     * Add marker, center map and initiate click control\n     * @param {OpenLayers.Map} map\n     * @param {jQueryDomElement} positionField\n     * @returns {OpenLayers.Marker}\n     */\n    function populateMap(map, positionField) {\n        var center = getCenter(map, positionField.val()),\n            marker = addMarkerToLayer(center, addMarkerLayer(map));\n\n        if (isDefaultPoint(center)) {\n            // rooms is populated in the template\n            if (rooms.length) {\n                var bounds = new OpenLayers.Bounds();\n                for (var i = 0; i < rooms.length; i++) {\n                    bounds.extend(new OpenLayers.LonLat(rooms[i][1], rooms[i][0]));\n                }\n                map.zoomToExtent(bounds.transform(new OpenLayers.Projection(\"EPSG:4326\"), new OpenLayers.Projection(\"EPSG:900913\")));\n            } else {\n                map.zoomToMaxExtent();\n            }\n        } else {\n            map.zoomTo(14);\n            moveTo(center, map, marker);\n        }\n        initGetLonLatOnClickControl(map, marker, positionField);\n        return marker;\n    }\n\n\n    /**\n     * Get point given or default coords\n     * @param {OpenLayers.Map} map\n     * @param {string} positionValue The value from the form position field\n     * @returns {OpenLayers.LonLat}\n     */\n    function getCenter(map, positionValue) {\n        var center = getPoint(map, [0, 0]);\n        if (positionValue) {\n            try {\n                var coords = parsePositionValue(positionValue.slice(1, -1));\n                center = getPoint(map, coords);\n            } catch (err) {\n                console.error(err);\n            }\n        }\n\n        return center;\n    }\n\n    /**\n     * Parse a string to find longitude and latitude\n     * @param {string} position The string to parse\n     * @returns {OpenLayers.LonLat}\n     */\n    function parsePositionValue(position) {\n        var re = /^(-?[0-9]*[.]?[0-9]+), *(-?[0-9]*[.]?[0-9]+)$/;\n        var arr = re.exec(position);\n        if (arr === null) {\n            throw 'error: incorrectly formatted latitude, longitude string \"' +\n                position + '\"';\n        }\n        return [arr[2], arr[1]];\n    }\n\n    /**\n     * Create a LonLat object from coords and transform it to map projection\n     * @param {OpenLayers.Map} map\n     * @param {array} coords [longitude, latitude]\n     * @returns {OpenLayers.LonLat}\n     */\n    function getPoint(map, coords) {\n        var lonLat = new OpenLayers.LonLat(coords[0], coords[1]);\n        lonLat.transform(map.displayProjection, map.getProjectionObject());\n        return lonLat;\n    }\n\n\n    /**\n     * Returns if the lonlat is default point. Because of rounding errors when\n     * applying transformations we cannot simply check for 0.\n     * @param {OpenLayers.LonLat} lonlat\n     * @returns {boolean}\n     */\n    function isDefaultPoint(lonlat) {\n        return Math.abs(lonlat.lon) < 1 && Math.abs(lonlat.lat) < 1;\n    }\n\n\n    function addMarkerLayer(map) {\n        var markerLayer = new OpenLayers.Layer.Vector('MarkerLayer');\n        markerLayer.setVisibility(false);\n        map.addLayer(markerLayer);\n        return markerLayer;\n    }\n\n    function addMarkerToLayer(lonlat, layer) {\n        var geometry = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);\n        var marker = new OpenLayers.Feature.Vector(geometry, null, {\n            externalGraphic: NAV.imagePath + '/openlayers/marker-green.png',\n            graphicHeight: 25,\n            graphicYOffset: -25\n        });\n        layer.addFeatures([marker]);\n        return marker;\n    }\n\n    /**\n     * Define and activate the control for selecting a point from the map\n     */\n    function initGetLonLatOnClickControl(map, marker, position_input)\n    {\n        map.addControl(new OpenLayers.Control.MousePosition());\n\n        OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {\n            defaultHandlerOptions: {\n                'single': true,\n                'double': false,\n                'pixelTolerance': 0,\n                'stopSingle': false,\n                'stopDouble': false\n            },\n\n            initialize: function(options) {\n                this.handlerOptions = OpenLayers.Util.extend(\n                    {}, this.defaultHandlerOptions\n                );\n                OpenLayers.Control.prototype.initialize.apply(\n                    this, arguments\n                );\n                this.handler = new OpenLayers.Handler.Click(\n                    this, {\n                        'click': this.trigger\n                    }, this.handlerOptions\n                );\n            },\n\n            trigger: function(event) {\n                var lonlat = map.getLonLatFromPixel(event.xy);\n                moveTo(lonlat, map, marker);\n                updatePosition(position_input, lonlat, map);\n            }\n        });\n\n        var click = new OpenLayers.Control.Click();\n        map.addControl(click);\n        click.activate();\n    }\n\n    /**\n     * Set position in form\n     * @param {jQueryDomElement} positionField A jQuery dom element\n     * @param {OpenLayers.LonLat} lonlat A transformed lonlat\n     * @param {OpenLayers.Map} map\n     */\n    function updatePosition(positionField, lonlat, map) {\n        positionField.val(lonLatToStr(lonlat.transform(\n            map.getProjectionObject(), map.displayProjection)));\n    }\n\n    /**\n     * Create a string from a point suitable for the form position field\n     * @param {OpenLayers.LonLat} lonlat\n     * @returns {string}\n     */\n    function lonLatToStr(lonlat) {\n        return '(' + [lonlat.lat, lonlat.lon].join() + ')';\n    }\n\n    /**\n     * Get and set location using geolocation api.\n     * @param {OpenLayers.Map} map\n     * @param {OpenLayers.Feature.Vector} marker\n     * @param {jQueryDomElement} positionField\n     */\n    function getAndSetLocation(map, marker, positionField) {\n        function gotPosition(position) {\n            var lonlat = getPoint(map, [\n                position.coords.longitude,\n                position.coords.latitude\n            ]);\n            moveTo(lonlat, map, marker);\n            updatePosition(positionField, lonlat, map);\n            map.zoomTo(12);\n        }\n\n        function errorGettingPosition(error) {\n            console.log(error);\n            alert(error.message);\n        }\n\n        if (navigator && \"geolocation\" in navigator) {\n            navigator.geolocation.getCurrentPosition(\n                gotPosition,\n                errorGettingPosition,\n                {timeout: 10000}  // Default is infinity, yay. No map for you.\n            );\n        } else {\n            alert('Your browser does not support geolocation');\n        }\n    }\n\n\n    /**\n     * Move the map and marker to a point\n     */\n    function moveTo(point, map, marker) {\n        map.setCenter(point);\n        marker.move(point);\n        getMarkerLayer(map).setVisibility(true);\n    }\n\n\n    /**\n     * Get the layer containing the map marker\n     * @param {OpenLayers.Map} map\n     * @returns {OpenLayers.Layer.Vector}\n     */\n    function getMarkerLayer(map) {\n        return map.getLayersByName('MarkerLayer')[0];\n    }\n\n    return SeedDBMap;\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/sensor_controller.js",
    "content": "define(function(require) {\n\n    var moment = require(\"moment\");\n    var CounterDisplay = require(\"plugins/counterdisplay\");\n    var JohnGauge = require(\"plugins/gauge\");\n    var Rickshaw = require(\"libs/rickshaw.min\");\n    var _handlebars = require(\"handlebars\");\n\n    function SensorController($node, templates) {\n        this.$node = $node;\n        this.url = this.$node.attr('data-url') + '&format=json';\n        this.unit = this.$node.attr('data-unit');\n        this.sensorid = this.$node.attr('data-sensorid');\n        this.sensorname = this.$node.attr('data-sensorname');\n        this.displayRange = this.$node.data('displayRange');\n        this.dashboardUrl = this.$node.attr('data-dashboard_url') || '';\n        this.showGraph = ! _.contains([false, 'False', 'false', 0, '0'], this.$node.data('showGraph'));\n        this.thresholds = this.parseThresholds();\n\n        this.displayGauge = true;\n        this.minValue = null;\n        this.maxValue = null;\n        if (this.displayRange) {\n            this.minValue = this.displayRange[0];\n            this.maxValue = this.displayRange[1];\n        } else {\n            if (this.unit.toLowerCase() === 'percent' || this.unit.substr(0, 1) === '%') {\n                this.maxValue = 100;  // Max value for graphs and gauges\n                this.sensorsymbol = '%';\n            } else if (['celsius', 'degrees'].indexOf(this.unit.toLowerCase()) >= 0) {\n                this.maxValue = 50;  // Max value for graphs and gauges\n                this.sensorsymbol = '\\u00B0';\n            } else {\n                this.displayGauge = false;\n            }\n\n        }\n\n        var $html = this.render(templates.sensorTemplate);\n        this.graphNode = $html.find('.rs-graphnode');\n        this.graphYnode = $html.find('.rs-ynode');\n        this.currentNode = $html.find('.current');\n        this.sliderNode = $html.find('.rs-slidernode');\n\n        this.addDashboardListener($html);\n\n        this.detailTemplate = templates.detailsTemplate;\n        this.counterTemplate = templates.counterTemplate;\n\n        this.update();\n        var self = this;\n        setInterval(function () {\n            self.update();\n        }, 60000);\n    }\n\n    SensorController.prototype = {\n        render: function (template) {\n            var $html = $(template({\n                legend: this.sensorname,\n                dashboardUrl: this.dashboardUrl,\n                sensorid: this.sensorid,\n                showGraph: this.showGraph\n            }));\n            $html.appendTo(this.$node);\n            if (this.displayGauge) {\n                $html.find('.current').addClass('gauge');\n            } else {\n                $html.find('.current').addClass('counter');\n            }\n            return $html;\n        },\n        addDashboardListener: function ($html) {\n            var self = this;\n            $html.find('.add-to-dashboard').one('click', function(event) {\n                var $element = $(this);\n                event.preventDefault();\n                var request = $.post(this.dataset.url);\n                request.done(function() {\n                    $element.removeClass('secondary').addClass('success');\n                });\n                request.fail(function() {\n                    $element.removeClass('secondary').addClass('failure');\n                });\n            });\n        },\n        parseThresholds: function () {\n            var input = this.$node.attr('data-thresholds');\n            return input ? input.split(',') : null;\n        },\n        update: function () {\n            this.loadData();\n        },\n        loadData: function () {\n            var self = this;\n            $.getJSON(this.url, function (data) {\n                if (data && data.length) {\n                    var datapoints = data[0].datapoints.map(function (point) {\n                        return {\n                            x: point[1],\n                            y: point[0]\n                        };\n                    });\n                    var last = datapoints[datapoints.length - 1].y || datapoints[datapoints.length - 2].y;\n\n                    self.updateCurrent(last);\n                    if (self.showGraph) {\n                        self.updateGraph(datapoints);\n                    }\n                }\n            });\n        },\n        updateCurrent: function (value) {\n            if (!this.current) {\n                this.current = this.createCurrent(value);\n            }\n            this.current.refresh(value);\n        },\n        createCurrent: function (value) {\n            if (this.displayGauge) {\n                return new JohnGauge({\n                    node: this.currentNode.get(0),\n                    min: this.minValue === null ? 0 : this.minValue,\n                    value: value,\n                    max: this.maxValue,\n                    thresholds: this.thresholds,\n                    unit: this.unit,\n                    symbol: this.sensorsymbol,\n                    radius: 110\n                });\n            } else {\n                return new CounterDisplay(this.counterTemplate, this.currentNode.prop('id'), 9999, this.unit);\n            }\n        },\n        updateGraph: function (values) {\n            if (!this.graph) {\n                this.graph = this.createGraph();\n            }\n            this.graph.series[0].data = values;\n            this.graph.render();\n        },\n        createGraph: function () {\n            var graph = new Rickshaw.Graph({\n                element: this.graphNode.get(0),\n                width: 230,\n                height: 100,\n                renderer: 'line',\n                min: 'auto',\n                series: [{\n                    color: 'steelblue',\n                    data: [{x: 0, y: 0}], // Data is overridden on update\n                    name: this.sensorname\n                }]\n            });\n            var slider = new Rickshaw.Graph.RangeSlider({\n                graph: graph,\n                element: this.sliderNode.get(0)\n            });\n            // Time formatter for the x-axis\n            var unit_formatter = {\n                name: '6 hours',\n                seconds: 3600 * 6,\n                formatter: function (d) {\n                    return moment(d).format('HH:mm');\n                }\n            };\n            var x_axis = new Rickshaw.Graph.Axis.Time({\n                graph: graph,\n                timeUnit: unit_formatter\n            });\n            var y_axis = new Rickshaw.Graph.Axis.Y({\n                graph: graph,\n                orientation: 'left',\n                element: this.graphYnode.get(0),\n                ticks: 4\n            });\n            // Enables details on hover.\n            var self = this;\n            var hoverDetail = new Rickshaw.Graph.HoverDetail({\n                graph: graph,\n                formatter: function (series, x, y) {\n                    var date = moment(new Date(x * 1000)).format('DD-MM-YYYY HH:mm');\n                    return self.detailTemplate({\n                        color: series.color,\n                        name: series.name,\n                        date: date,\n                        number: +y.toFixed(2)\n                    });\n                }\n            });\n\n            return graph;\n        }\n    };\n\n    return SensorController;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/sensors_controller.js",
    "content": "define([\n    \"libs-amd/text!resources/room/sensor.html\",\n    \"libs-amd/text!resources/room/detail.html\",\n    \"libs-amd/text!resources/room/counter.html\",\n    \"handlebars\",\n    \"plugins/sensor_controller\"],\nfunction (sensorTemplate, detailTemplate, counterTemplate, Handlebars, SensorController) {\n\n    function SensorsController($sensors) {\n        var templates = {\n            'sensorTemplate': Handlebars.compile(sensorTemplate),\n            'detailsTemplate': Handlebars.compile(detailTemplate),\n            'counterTemplate': Handlebars.compile(counterTemplate)\n        };\n\n        $sensors.each(function (index, element) {\n            var _controller = new SensorController($(element), templates);\n        });\n    }\n\n    return SensorsController;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/state_controller.js",
    "content": "/**\n * Functions for saving form state to localstorage and retrieving and setting it\n */\ndefine(function(require) {\n\n    // Requires jQuery which is always required in NAV.\n\n    function _getFormState(form) {\n        // [{name: \"name1\", value: \"value1\"}, {name: \"name2\", value: \"value1\"}]\n        // => { \"name1\": \"value1\", \"name2\": \"value2\"}\n        return _.reduce($(form).serializeArray(), function(result, obj) {\n            result[obj.name] = obj.value;\n            return result;\n        }, {});\n    }\n\n    function _setFormState(form, storageKey) {\n        _.each(_getFormStateFromStorage(storageKey), function(value, key) {\n            form.elements[key].value = value;\n        })\n    }\n\n    function _getFormStateFromStorage(storageKey) {\n        return JSON.parse(localStorage.getItem(storageKey));\n    }\n\n    function _setFormStateInStorage(form, storageKey) {\n        localStorage.setItem(storageKey, JSON.stringify(_getFormState(form)));\n    }\n\n    return {\n        getFormState: _getFormState,\n        getFormStateFromStorage: _getFormStateFromStorage,\n        setFormState: _setFormState,\n        setFormStateInStorage: _setFormStateInStorage,\n    }\n\n})\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/symbols.js",
    "content": "define(function (require) {\n\n    var map = {\n        'ampere': 'A',\n        'celsius': '&#176;'\n    };\n\n    function symbol(unit) {\n        unit = unit.toLowerCase();\n        return map[unit] ? map[unit] : '';\n    }\n\n    return symbol;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/tab_navigation.js",
    "content": "define(['jquery-ui'], function () {\n\n    function setTitle(fragment) {\n        if (fragment && fragment !== \"#undefined\") {\n            var old = document.title;\n            var hashIndex = old.lastIndexOf('#');\n            if (hashIndex === -1) {\n                document.title = old + fragment;\n            } else {\n                document.title = old.substring(0, hashIndex) + fragment;\n            }\n        }\n    }\n\n    function add(selector, parent) {\n\n        var $selector = typeof (selector) === 'string' ? $(selector) : selector;\n        var $parent;\n        if (parent) {\n            $parent = typeof(parent) === 'string' ? $(parent) : parent;\n        }\n\n        /* Set hash fragment based on what tab was activated */\n        $selector.bind('tabsactivate', function (event, ui) {\n            //* Check if this is the tabs we're hooked to *//\n            if (event.target.id === $selector.attr('id')) {\n                var hashValue = '#' + ui.newPanel.attr('id');\n                if (ui.newTab.index() != 0 || window.location.hash) {\n                    var hashes = window.location.hash.split('!');\n                    if (parent) {\n                        hashes[2] = hashValue.substring(1);\n                        hashes[0] = ''; // Overwrite #\n                        window.location.hash = hashes.join('!');\n                    } else {\n                        window.location.hash = '!' + hashValue.substring(1);\n                    }\n                    setTitle(hashValue);\n                }\n            }\n        });\n\n        /* Runs on load of page only */\n        function navigate() {\n            var hashes = window.location.hash.split('!');\n            var tabIndex = 0;\n            var tabLabel = null;\n\n            if (hashes.length === 1 && !parent) {\n                $selector.tabs('option', 'active', tabIndex);\n            } else if (hashes.length === 2 && !parent) {\n                selectedTab = $selector.find('[aria-controls=' + hashes[1] + ']');\n                $selector.tabs('option', 'active', selectedTab.index());\n            } else if (hashes.length === 3 && parent) {\n                selectedTab = $selector.find('[aria-controls=' + hashes[2] + ']');\n                if (selectedTab.length > 0) {\n                    selectedParentTab = $parent.find('[aria-controls=' + hashes[1] + ']');\n                    $parent.tabs('option', 'active', selectedParentTab.index());\n                    $selector.tabs('option', 'active', selectedTab.index());\n                }\n            }\n        }\n\n        navigate();\n\n        var $selectedTab = $selector.children('.ui-tabs-panel:not(.ui-tabs-hide)');\n        setTitle(\"#\" + $selectedTab.prop('id'));\n    }\n\n    return {\n        add: add\n    };\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/table_utils.js",
    "content": "define([\"jquery\"], function () {\n\n    function TableUtil(node, limit) {\n        this.node = node;\n        this.limit = limit || 10;\n    }\n\n    TableUtil.prototype = {\n        addRowToggleTrigger: function () {\n            var container = $('tbody', this.node).length > 0 ? $('tbody', this.node) : this.node;\n            var rows = $('tr', container);\n\n            if (rows.length > this.limit) {\n                var that = this;\n                var colspan = rows.first().find('td').length;\n                var numRows = rows.length;\n                var hiddenRows = rows.slice(this.limit);\n                var clickNode = createToggleRow(getShowText(numRows), colspan);\n\n                hiddenRows.hide();\n                clickNode.toggle(function () {\n                    hiddenRows.show();\n                    $('.hellip', clickNode).hide();\n                    $('.toggle-infotext', clickNode).text(getHideText());\n                }, function () {\n                    hiddenRows.hide();\n                    $('.hellip', clickNode).show();\n                    $('.toggle-infotext', clickNode).text(getShowText(numRows));\n                });\n                clickNode.appendTo(container);\n            }\n        }\n    };\n\n    function createToggleRow(nodeText, colspan) {\n        var toggleRow = $('<tr class=\"toggletrigger\"></tr>');\n        var toggleCell = $('<td></td>');\n        toggleCell.attr('colspan', colspan);\n        toggleRow.append(toggleCell);\n\n        var hellip = $('<span class=\"hellip\">&hellip;</span>');\n        var infoText = $('<span class=\"toggle-infotext\">' + nodeText + '</span>');\n        toggleCell.append(hellip, infoText);\n        return toggleRow;\n    }\n\n    function getShowText(numRows) {\n        return \"Show all \" + numRows + \" rows\";\n    }\n\n    function getHideText() {\n        return \"Show less\";\n    }\n\n    return TableUtil\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/tooltip.js",
    "content": "require([], function () {\n    const MARGIN = 16;\n    const DEFAULT_TOOLTIP_HEIGHT = 40;\n\n    function initializeTooltips(container = document) {\n        const tooltips = container.querySelectorAll(\n            '.nav-tooltip [role=\"tooltip\"]:not([data-initialized])'\n        );\n        for (const tooltip of tooltips) {\n            if (!tooltip.parentElement) continue;\n            if (tooltip.parentElement.dataset.position === 'fixed') {\n                initializeFixedTooltip(tooltip);\n            } else {\n                adjustTooltipAlignment(tooltip);\n            }\n            tooltip.dataset.initialized = 'true';\n        }\n    }\n\n\n    function adjustTooltipAlignment(tooltip) {\n        const vw = window.innerWidth;\n        const vh = window.innerHeight;\n        const parent = tooltip.parentElement;\n        const rect = tooltip.getBoundingClientRect();\n\n        if (rect.right > vw) {\n            parent.dataset.align = 'end';\n            tooltip.style.maxWidth = (vw - rect.left - MARGIN) + 'px';\n        } else if (rect.left < 0) {\n            parent.dataset.align = 'start';\n            tooltip.style.maxWidth = (rect.right - MARGIN) + 'px';\n        } else {\n            tooltip.style.maxWidth = '';\n        }\n\n        if (rect.bottom > vh) {\n            parent.dataset.side = 'top';\n        } else {\n            parent.dataset.side = 'bottom';\n        }\n    }\n\n    function initializeFixedTooltip(tooltip) {\n        const parent = tooltip.parentElement;\n        const positionHandler = () => positionTooltip(tooltip);\n        parent.addEventListener('mouseenter', positionHandler);\n\n        // Store observer for potential cleanup\n        const observer = new MutationObserver(positionHandler);\n        observer.observe(tooltip, { childList: true, subtree: true, characterData: true });\n        tooltip._observer = observer;\n    }\n\n    function positionTooltip(tooltip) {\n        const parent = tooltip.parentElement;\n        if (!parent || parent.dataset.position !== 'fixed') return;\n\n        const rect = parent.getBoundingClientRect();\n        const tooltipHeight = tooltip.offsetHeight || DEFAULT_TOOLTIP_HEIGHT;\n\n        let top;\n        if (rect.bottom + tooltipHeight > window.innerHeight) {\n            top = Math.max(rect.top - tooltipHeight, 0);\n            parent.dataset.side = \"top\";\n        } else {\n            top = rect.bottom;\n            parent.dataset.side = \"bottom\";\n        }\n        tooltip.style.top = `${top}px`;\n\n        if (parent.dataset.align === 'end') {\n            tooltip.style.right = `${window.innerWidth - rect.right}px`;\n            tooltip.style.left = '';\n        } else {\n            tooltip.style.left = `${Math.max(rect.left, 0)}px`;\n            tooltip.style.right = '';\n        }\n    }\n\n    // Delay so tooltips have time to render their content\n    globalThis.initializeTooltips = initializeTooltips;\n    setTimeout(() => initializeTooltips(), 100)\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/plugins/vue_rack.js",
    "content": "define(function (require) {\n    var Vue = require('vue');\n    var d3Sparkline = require('plugins/d3_sparkline');\n    var LinearGauge = require('plugins/linear_gauge');\n    var rackTemplate = require('libs-amd/text!resources/vue/environment_rack.html');\n    var rackItemTemplate = require('libs-amd/text!resources/vue/environment_rack_item.html');\n    var rackPduTemplate = require('libs-amd/text!resources/vue/environment_rack_pdu_item.html');\n\n\n    /**\n     * Rounds something that may be a number to max n decimals.\n     * If you want a specific number of decimals use toFixed.\n     */\n    function round(number, n) {\n        n = n === undefined ? 2 : n;\n        if (number === null) {\n            return number;\n        }\n\n        try {\n            return parseFloat(Number(number).toFixed(n));\n        } catch (e) {\n            return number;\n        }\n    }\n\n\n    /** Gets the first relevant value from the datapoints */\n    function getValue(datapoints) {\n        var point = _.find(datapoints.reverse(), function (datapoint) {\n            return datapoint[0] != null;\n        });\n\n        return point ? point[0] : null;\n    }\n\n\n    var RackPduItem = {\n        template: rackPduTemplate,\n        props: ['item'],\n\n        methods: {\n            createGauge: function () {\n                var self = this;\n                return new LinearGauge({\n                    element: $(self.$el).find('.pdu-gauge')[0],\n                    precision: 2,\n                    color: 'lightsteelblue',\n                    height: 100,\n                    max: self.item.display_range[1]\n                });\n            }\n        },\n        watch: {\n            'item.value': function () {\n                if (!this.gauge) {\n                    this.gauge = this.createGauge();\n                }\n                this.gauge.update(this.item.value);\n            }\n        }\n\n    };\n\n    var RackItem = {\n        template: rackItemTemplate,\n        props: ['item'],\n        methods: {\n            drawSparkline: function () {\n                var max = this.item.display_range[1];\n                d3Sparkline.bullet($(this.$el).find('.sparkline'), [null, this.item.value, max], {\n                    performanceColor: 'lightsteelblue',\n                    rangeColors: ['#fff']\n                });\n            }\n        },\n        watch: {\n            'item.value': function () {\n                if (this.item.unit_of_measurement != 'boolean') {\n                    this.item.value = round(this.item.value);\n                    this.drawSparkline();\n                }\n            }\n        }\n    };\n\n    var Rack = {\n        template: rackTemplate,\n        components: {\n            'left-item': RackPduItem,\n            'center-item': RackItem,\n            'right-item': RackPduItem\n        },\n        props: ['rack'],\n        methods: {\n            /** Loads Graphite data for all items in the rack updates by setting value */\n            loadGraphiteData: function () {\n                var rackitems = _.union(\n                    this.rack.configuration.left,\n                    this.rack.configuration.center,\n                    this.rack.configuration.right);\n                var url = '/graphite/render';\n                var request = $.getJSON(url,\n                    {\n                        target: rackitems.map(function (obj) {\n                            return obj.metric;\n                        }),\n                        format: 'json',\n                        from: '-5min',\n                        until: 'now'\n                    });\n                request.done(function (data) {\n                    var mapping = {};\n                    data.forEach(function (result) {\n                        mapping[result.target] = result.datapoints;\n                    });\n                    rackitems.forEach(function (obj) {\n                        if (mapping[obj.metric]) {\n                            Vue.set(obj, 'value', getValue(mapping[obj.metric]));\n                        }\n                    });\n                });\n\n            }\n        },\n        watch: {\n            rack: function () {\n                var oneMinute = 60 * 1000;\n                this.loadGraphiteData();\n                setInterval(this.loadGraphiteData, oneMinute);\n                // console.log(this);\n            }\n        }\n    };\n\n    return Rack;\n\n    /* Example usage\n    var vm = new Vue({\n        el: '#test',\n        data: {\n            racks: [],\n            rack: null,\n            id: 306\n        },\n        components: {\n            'my-rack': Rack\n        },\n        methods: {\n            loadRacks: function () {\n                var self = this;\n                $.getJSON('/api/1/rack/', function (data) {\n                    self.racks = data.results;\n                });\n            },\n            loadRack: function () {\n                var self = this;\n                $.getJSON('/api/1/rack/' + this.id, function (data) {\n                    console.log(data);\n                    self.rack = data;\n                });\n            }\n        },\n        mounted: function () {\n            // this.loadRacks();\n            this.loadRack();\n        }\n    });\n     */\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/portadmin.js",
    "content": "require(['spin', 'jquery-ui'], function (Spinner) {\n\n    /**\n     * Helper object to manipulate the modal and give feedback\n     */\n    function Feedbacker(modal) {\n        this.modal = null;\n        this.isOpen = false;\n        this.list = null;\n        this.closeButton = null;\n    }\n\n    Feedbacker.prototype = {\n        modalOpen: function() {\n            if (this.isOpen) {\n                return;\n            }\n            const template = document.getElementById('portadmin-feedback-template');\n            document.body.appendChild(template.content.cloneNode(true));\n            this.modal = document.getElementById('portadmin-feedback-modal');\n            this.list = this.modal.querySelector('ul');\n            this.isOpen = true;\n        },\n        modalClose: function() {\n            this.modal.remove();\n            this.closeButton.remove();\n            this.isOpen = false;\n            this.modal = null;\n            this.list = null;\n            this.closeButton = null;\n        },\n        addCloseButton: function() {\n            const self = this;\n            const button = document.createElement('button');\n            button.className = 'button small';\n            button.textContent = 'Close';\n            button.style.marginBottom = '0';\n            button.onclick = function() {\n                self.modalClose();\n            };\n            this.modal.querySelector('.modal-content').appendChild(button);\n            this.closeButton = button;\n        },\n        /**\n         * The cancel button will empty the queue of interfaces to handle, but\n         * the commit configuration request will still be sent.\n         * NB: Currently not in use\n         */\n        addCancelButton: function() {\n            var self = this;\n            var $button = $('<button class=\"button secondary small pull-right\">Cancel</button>');\n            this.modal.append($button);\n            $button.on('click', function() {\n                emptyQueue();\n                self.addFeedback('Jobs cancelled');\n                $button.attr('disabled', true);\n            });\n            this.cancelButton = $button;\n        },\n        addFeedback: async function(text, status, message) {\n            await this.modalOpen();\n            const listItem = $('<li>').appendTo(this.list).html(text);\n            if (typeof status !== 'undefined') {\n                listItem.append(this.createAlert(status, message));\n            }\n            return listItem;\n        },\n        createAlert: function(status, message) {\n            var alert = $('<span class=\"label\" style=\"margin-left: 1em;\">').attr('title', message);\n            switch (status) {\n            case 'success':\n                alert.addClass(status).html('Ok');\n                break;\n            case 'alert':\n                alert.addClass(status).html('Failed');\n                break;\n            }\n            return alert;\n        },\n        createProgress: function() {\n            return $('<progress style=\"margin-left: 1em; width: 50px; vertical-align: sub\"></progress>');\n        },\n        savingInterface: function($row) {\n            var self = this;\n            return this.addFeedback('Configuring interface ' + $row.find('.port-name').text())\n                .then(function(listItem) {\n                    if (listItem) {\n                        listItem.append(self.createProgress());\n                    }\n                    return listItem;\n                });\n        },\n        restartingInterfaces: async function() {\n            const restartReason = \"A computer connected to a port does not detect that the vlan changes. When that happens the computer will have the IP-address from the old vlan and it will lose connectivity. But if the link goes down and up (a 'restart') the computer will send a request for a new address. 'Restarting' interfaces is only done when changing vlans.\";\n            const why = $('<span aria-describedby=\"restart-tooltip\">(why?)</span>');\n            why.on('click', () => {\n                $('#restart-reason').toggleClass('hidden');\n            })\n            const listItem = await this.addFeedback('Restarting interfaces ');\n            listItem.append(why, this.createProgress());\n            const restartReasonElement = $(\n                '<div id=\"restart-reason\" class=\"hidden panel\">' +\n                '<small>' + restartReason + '</small' +\n                '</div>'\n            );\n            listItem.append(restartReasonElement);\n            return listItem;\n        },\n        committingConfig: function() {\n            const self = this;\n            return this.addFeedback('Committing configuration changes')\n                .then(function(listItem) {\n                    if (listItem) {\n                        listItem.append(self.createProgress());\n                    }\n                    return listItem;\n                });\n        },\n        endProgress: function(listItem, status, message) {\n            status = typeof status === 'undefined' ? 'success' : status;\n            message = typeof message === 'undefined' ? '' : message;\n\n            const alertElement = this.createAlert(status);\n            const progressElement = listItem.find('progress');\n            progressElement.replaceWith(alertElement);\n\n            if (status !== 'success') {\n                const errorElement = $('<small style=\"margin-left: 1em\">').text(message);\n                errorElement.insertAfter(alertElement);\n            }\n        }\n    };\n\n\n    if(!Array.indexOf){\n        Array.prototype.indexOf = function(obj){\n            for(var i=0; i<this.length; i++){\n                if (this[i] === obj) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    var restart_queue = [];  // Queue for interfaces that are restarting\n    var nav_ajax_queue = [];  // Queue for cards we are saving\n    var queue_data = {};  // Object containing data for ajax requests\n\n    /* Mapping for ifadminstatus */\n    var ifAdminStatusMapping = {\n        1: true,\n        2: false\n    };\n\n    /* Generic spinner created for display in the middle of a cell */\n    // var spinner = new Spinner({length: 3, width: 2, radius: 5});\n    var parentSelector = '.port_row';\n    var feedback;\n\n    $(document).ready(function(){\n        feedback = new Feedbacker();\n\n        // Initialize listeners after htmx has swapped in new content\n        $(document).on(\"htmx:afterSwap\", \"#port-details\", function() {\n            var $wrapper = $('#portadmin-wrapper');\n\n            if ($wrapper.length) {\n                addTrunkSelectedListener($wrapper);\n                addChangeListener($wrapper);\n                addSaveListener($wrapper);\n                addSaveAllListener($wrapper);\n            }\n        });\n    });\n\n    /*\n     * If user selects the trunk value in a drop-down list, the user shall\n     * be redirected to the trunk edit page.\n     */\n    function addTrunkSelectedListener($wrapper) {\n        $wrapper.find('.vlanlist').on('change click', function (event) {\n            var $select = $(this);\n            if ($select.val() === 'trunk') {\n                event.stopPropagation();\n                location.href = $select.find(':selected').attr('data-url');\n            }\n        });\n    }\n\n    /*\n     * Add changelisteners the wrapper. Also split up events to avoid acting\n     * on irrelevant changes.\n     */\n    function addChangeListener($wrapper) {\n        $wrapper.on('keyup change', '.ifalias', function (event) {\n            actOnChange($(event.target).parents(parentSelector));\n        });\n        $wrapper.on('change', '.vlanlist', function (event) {\n            actOnChange($(event.target).parents(parentSelector));\n        });\n        $wrapper.on('click', '.voicevlan', function (event) {\n            actOnChange($(event.target).parents(parentSelector));\n        });\n        $wrapper.on('change', '.ifadminstatus', function (event) {\n            actOnChange($(event.target).parents(parentSelector));\n        });\n        $wrapper.on('change', '.poelist', function (event) {\n            actOnChange($(event.target).parents(parentSelector));\n        });\n    }\n\n    /*\n     * Mark card changed or not based on values in card\n     */\n    function actOnChange(row) {\n        if (textFieldChanged(row) || dropDownChanged(row) || voiceVlanChanged(row) || adminStatusChanged(row) || poeDropDownChanged(row)) {\n            markAsChanged(row);\n        } else {\n            markAsUnchanged(row);\n        }\n    }\n\n    function addSaveListener($wrapper) {\n        /* Save when clicking on the save buttons. */\n        $wrapper.on('click', '.changed .portadmin-save', async function (event) {\n            var $row = $(event.target).parents(parentSelector);\n            await saveRow($row);\n        });\n    }\n\n    function addSaveAllListener(element) {\n        $('.saveall_button').click(bulkSave);\n    }\n\n    function bulkSave() {\n        $(\".changed\").each(async function (index, card) {\n            await saveRow($(card));\n        });\n    }\n\n    function textFieldChanged(row) {\n        var element = $(row).find(\".ifalias\");\n        return $(element).attr('data-orig') !== $(element).val();\n    }\n\n    function dropDownChanged(row) {\n        var dropdown = $(row).find(\".vlanlist\");\n        var origOption = $('[data-orig]', dropdown)[0];\n        var selectedOption = $('option:selected', dropdown)[0];\n        return origOption !== selectedOption;\n    }\n\n    function poeDropDownChanged(row) {\n        var dropdown = $(row).find(\".poelist\");\n        var origOption = $('[data-orig]', dropdown)[0];\n        var selectedOption = $('option:selected', dropdown)[0];\n        return origOption !== selectedOption;\n    }\n\n    function voiceVlanChanged(row) {\n        /*\n         * XOR checkbox checked and original value to see if changed\n         */\n        var $checkbox = $(row).find('.voicevlan');\n        if ($checkbox.length) {\n            var origOption = $checkbox.attr('data-orig').toLowerCase() === 'true';\n            var checkedValue = $checkbox.prop('checked');\n            return checkedValue ^ origOption;\n        } else {\n            return false;\n        }\n    }\n\n    function adminStatusChanged(row) {\n        var $checkbox = $(row).find('.ifadminstatus');\n        if ($checkbox.length) {\n            var origOption = ifAdminStatusMapping[$checkbox.attr('data-orig')];\n            var checkedValue = $checkbox.prop('checked');\n            return origOption ^ checkedValue;\n        } else {\n            return false;\n        }\n    }\n\n    function markAsChanged(row) {\n        var $row = $(row);\n        if (!$row.hasClass('changed')) {\n            $row.find('.portadmin-save').removeClass('secondary');\n            $row.addClass(\"changed\");\n        }\n    }\n\n    function markAsUnchanged(row) {\n        var $row = $(row);\n        if ($row.hasClass('changed')) {\n            $row.find('.portadmin-save').addClass('secondary');\n            $row.removeClass(\"changed\");\n        }\n    }\n\n    function clearChangedState(row) {\n        markAsUnchanged(row);\n    }\n\n    async function saveRow($row) {\n        /*\n         * This funcion does an ajax call to save the information given by the user\n         * when the save-button is clicked.\n         */\n\n        var rowid = $row.prop('id');\n        if (!rowid) {\n            console.log('Could not find id of card ' + $row);\n            return;\n        }\n\n        // Post data and wait for json-formatted returndata. Display status information to user\n        await saveInterface(create_ajax_data($row));\n    }\n\n    function create_ajax_data($row) {\n        /*\n         Create the object used in the ajax call.\n         */\n        var data = {};\n        data.interfaceid = $row.prop('id');\n        if (textFieldChanged($row)) {\n            data.ifalias = $row.find(\".ifalias\").val();\n        }\n        if (dropDownChanged($row)) {\n            data.vlan = $row.find(\".vlanlist\").val();\n        }\n        if (voiceVlanChanged($row)) {\n            data.voicevlan = $row.find(\".voicevlan\").prop('checked');\n        }\n        if (adminStatusChanged($row)) {\n            var adminStatusChecked = $row.find(\".ifadminstatus\").prop('checked');\n            if (adminStatusChecked) {\n                data.ifadminstatus = 1;\n            } else {\n                data.ifadminstatus = 2;\n            }\n        }\n        if (poeDropDownChanged($row)) {\n            data.poe_state = $row.find(\".poelist\").val();\n        }\n        if ($row.find(\".voicevlan\").prop('checked')) {\n            data.voice_activated = true;\n        }\n        return data;\n    }\n\n    async function saveInterface(interfaceData) {\n        var rowid = interfaceData.interfaceid;\n        // If a save on this card is already in progress, do nothing.\n        if (nav_ajax_queue.indexOf(rowid) > -1) {\n            return;\n        }\n        disableSaveallButtons();\n        nav_ajax_queue.push(rowid);\n        queue_data[rowid] = interfaceData;\n\n        // Do not send more than one request at the time.\n        if (nav_ajax_queue.length > 1) {\n            return;\n        }\n\n        await doAjaxRequest(rowid);\n    }\n\n    async function doAjaxRequest(rowid) {\n        console.log('Saving interface with id ' + rowid);\n        const $row = $('#' + rowid);\n        const interfaceData = queue_data[rowid];\n\n        let listItem = null;\n\n        try {\n            // Wait for the feedback modal to open and get the list item\n            listItem = await feedback.savingInterface($row);\n            const csrfToken = $('#save-changes-form input[name=\"csrfmiddlewaretoken\"]').val();\n\n            // Perform the AJAX request\n            await $.ajax({\n                url: \"save_interfaceinfo\",\n                data: interfaceData,\n                dataType: 'json',\n                type: 'POST',\n                beforeSend: function () {\n                    disableButtons($row);\n                },\n                headers: {\n                    'X-CSRFToken': csrfToken\n                },\n                success: function () {\n                    clearChangedState($row);\n                    updateDefaults($row, interfaceData);\n                    feedback.endProgress(listItem);\n                    // Restart the interface if a vlan change was made.\n                    if (interfaceData.hasOwnProperty('vlan')) {\n                        restart_queue.push(interfaceData.interfaceid);\n                    }\n                    $(document).trigger('nav-portadmin-ajax-success');\n                },\n                error: function (jqXhr) {\n                    console.log(jqXhr.responseText);\n                    var messages;\n                    try {\n                        messages = JSON.parse(jqXhr.responseText).messages;\n                    } catch (error) {\n                        messages = [{'message': 'Error saving changes'}];\n                    }\n                    indicateError($row, messages);\n                    feedback.endProgress(listItem, 'alert', messages.map(function(message){\n                        return message['message'];\n                    }).join(', '));\n                }\n            });\n\n        } catch (error) {\n            console.error('Error in doAjaxRequest:', error);\n            // Handle any errors that occurred during the process\n            feedback.endProgress(listItem, 'alert', 'An unexpected error occurred');\n        } finally {\n            // Always execute cleanup code\n            removeFromQueue(rowid);\n            enableButtons($row);\n\n            if (nav_ajax_queue.length === 0) {\n                enableSaveallButtons();\n                await commitConfig(interfaceData.interfaceid);\n            } else {\n                // Process next entry in queue\n                await doAjaxRequest(nav_ajax_queue[0]);\n            }\n        }\n    }\n\n    /**\n     * Commits configuration changes and then link cycles / restarts all\n     * interfaces that had their access VLAN changed.\n     */\n    async function commitConfig(interfaceid) {\n        /** Do a request to commit changes to startup config */\n        console.log('Sending commit configuration request');\n\n        const status = await feedback.committingConfig();\n        const csrfToken = $('#save-changes-form input[name=\"csrfmiddlewaretoken\"]').val();\n        const request = $.ajax({\n            url: 'commit_configuration',\n            type: 'POST',\n            data: {'interfaceid': interfaceid},\n            headers: {\n                'X-CSRFToken': csrfToken\n            },\n        });\n        request.done(function() {\n            feedback.endProgress(status, 'success', request.responseText);\n            restartInterfaces();\n        });\n        request.fail(function(err) {\n            feedback.endProgress(status, 'alert', request.responseText);\n            feedback.addCloseButton();\n        });\n    }\n\n    async function restartInterfaces() {\n        // Sends a request to restart all interfaces in the restart queue, if any, and then add\n        if (restart_queue.length == 0) {\n            feedback.addCloseButton();\n            return;\n        }\n\n        const listItem = await feedback.restartingInterfaces();\n        const request = $.post('restart_interfaces', {'interfaceid': restart_queue});\n        request.done(function() {\n            console.log(\"Interfaces restarted: \" + restart_queue)\n            feedback.endProgress(listItem, 'success');\n        });\n        request.fail(function() {\n            console.log(\"Interfaces restarted: \" + restart_queue)\n            feedback.endProgress(listItem, \"alert\", request.responseText);\n        });\n        request.always(function() {\n           restart_queue.length = 0;\n            feedback.addCloseButton();\n        });\n    }\n\n    function disableButtons(row) {\n        $(row).find('button').prop('disabled', true);\n    }\n\n    function enableButtons(row) {\n        $(row).find('button').prop('disabled', false);\n    }\n\n    function indicateSuccess($row) {\n        /* Highlight card to indicate success */\n        removeAlerts($row);\n        $row.addClass('success');\n        setTimeout(function () {\n            $row.removeClass('success');\n        }, 1500);\n    }\n\n    function indicateError($row, messages) {\n        var rowid = $row.prop('id'),\n            $errorContainer = $('#' + rowid + '-errors');\n        removeAlerts($errorContainer);\n        for (var x = 0, l = messages.length; x < l; x++) {\n            var $alertBox = $('<div>').addClass('alert-box alert').html(messages[x].message);\n            $errorContainer.append($alertBox);\n            $alertBox.click(function () {\n                $(this).remove();\n            });\n        }\n        $errorContainer.show();\n    }\n\n    function removeAlerts($container) {\n        $container.find('.alert-box').remove();\n    }\n\n    function updateDefaults($row, data) {\n        if ('ifalias' in data) {\n            updateIfAliasDefault($row, data.ifalias);\n        }\n        if ('vlan' in data) {\n            updateVlanDefault($row, data.vlan);\n        }\n        if ('voicevlan' in data) {\n            updateVoiceDefault($row, data.voicevlan);\n        }\n        if ('ifadminstatus' in data) {\n            updateAdminStatusDefault($row, data.ifadminstatus);\n        }\n        if ('poe_state' in data) {\n            updatePoeDefault($row, data.poe_state);\n        }\n    }\n\n    function updateIfAliasDefault($row, ifalias) {\n        var old_ifalias = $row.find(\".ifalias\").attr('data-orig');\n        if (old_ifalias !== ifalias) {\n            $row.find(\".ifalias\").attr('data-orig', ifalias);\n        }\n    }\n\n    function updateVlanDefault($row, vlan) {\n        var old_vlan = $row.find('option[data-orig]').val();\n        if (old_vlan !== vlan) {\n            console.log('Updating vlan default from ' + old_vlan + ' to ' + vlan);\n            $row.find('option[data-orig]').removeAttr('data-orig');\n            $row.find('option[value=' + vlan + ']').attr('data-orig', vlan);\n        }\n    }\n\n    function updateVoiceDefault($row, new_value) {\n        var $voice_element = $row.find(\".voicevlan\");\n        if ($voice_element.length) {\n            var old_value = $voice_element.attr('data-orig');\n            if (old_value !== new_value) {\n                $voice_element.attr('data-orig', new_value);\n            }\n        }\n    }\n\n    function updateAdminStatusDefault($row, new_value) {\n        var $adminStatusCheckbox = $row.find('.ifadminstatus');\n        var old_value = $adminStatusCheckbox.attr('data-orig');\n        if (old_value !== new_value) {\n            $adminStatusCheckbox.attr('data-orig', new_value);\n        }\n    }\n\n    function updatePoeDefault($row, new_value) {\n        var old_value = $row.find('option[data-orig]').val();\n        if (old_value !== new_value) {\n            console.log('Updating PoE state default from ' + old_value + ' to ' + new_value);\n            $row.find('option[data-orig]').removeAttr('data-orig');\n            $row.find('option[value=' + new_value + ']').attr('data-orig', new_value);\n        }\n    }\n\n    function removeFromQueue(id) {\n        if (queue_data.hasOwnProperty(id)) {\n            delete queue_data[id];\n        }\n        var index = nav_ajax_queue.indexOf(id);\n        if (index > -1) {\n            nav_ajax_queue.splice(index, 1);\n        }\n    }\n\n    function emptyQueue() {\n        for(var prop in queue_data) {\n            if (queue_data.hasOwnProperty(prop)) {\n                delete queue_data[prop];\n            }\n        }\n        nav_ajax_queue.splice(0, nav_ajax_queue.length);\n    }\n\n    function disableSaveallButtons() {\n        $(\"input.saveall_button\").attr('disabled', 'disabled');\n    }\n\n    function enableSaveallButtons() {\n        $(\"input.saveall_button\").removeAttr('disabled');\n    }\n\n    $(document).ready(function() {\n        $(\".toggle-all\").click(function() {\n            var $checkboxes = $(this).parents().find('input[type=checkbox]');\n        $checkboxes.prop('checked', $(this).is(':checked'));\n        });\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/porttable.js",
    "content": "define(function(require) {\n\n    var DataTables = require('datatables');\n    require('dt_config');\n    var moduleSort = require('dt_plugins/modulesort');\n    var URI = require('libs/urijs/URI');\n    var Moment = require('moment');\n\n\n    /*\n     * dtColumns defines the data we want to use from the result set from the\n     * api. They are in order of appearance in the table - changes here may need\n     * changes in the template aswell.\n     *\n     * More information about the options for each column can be seen at\n     * https://datatables.net/reference/option/ -> columns\n     */\n    var dtColumns = [\n        {\n            render: function(data, type, row, meta) {\n                if (isSwPort(row)) {\n                    return '<a href=\"' + NAV.urls.portadmin_index + row.id + '\" title=\"Configure port in Portadmin\"><img src=\"/static/images/toolbox/portadmin.svg\" style=\"height: 1em; width: 1em\" /></a>';\n                }\n                return '';\n            },\n            orderable: false\n        },\n\n        {\n            data: \"ifname\",\n            type: \"module\",\n            render: function(data, type, row, meta) {\n                return '<a href=\"' + row.object_url + '\">' + data + '</a>';\n            }\n        },\n\n        {\n            data: \"ifalias\",\n            render: function(data, type, row, meta) {\n                return '<a href=\"' + row.object_url + '\">' + data + '</a>';\n            }\n        },\n\n        {\n            data: 'module',\n            render: function(data, type, row, meta) {\n                return data\n                    ? '<a href=\"' + data.object_url + '\">' + data.name + '</a>'\n                    : '';\n            }\n        },\n\n        {\n            data: \"ifadminstatus\",\n            type: \"statuslight\",\n            render: renderStatus\n        },\n\n        {\n            data: \"ifoperstatus\",\n            type: \"statuslight\",\n            render: renderStatus\n        },\n\n        {\n            data: \"vlan\",\n            render: function(data, type, row, meta) {\n                if (row['trunk']) {\n                    return \"<span title='Trunk' style='border: 3px double black; padding: 0 5px'>\" + data + \"</span>\"\n                }\n                return data;\n            }\n        },\n\n        {\n            data: \"vlan_netident\",\n            render: function(data, type, row, meta) {\n                return data;\n            }\n        },\n\n        {\n            data: \"speed\",\n            render: function(data, type, row, meta) {\n                if (row.duplex === 'h') {\n                    return data + '<span class=\"label warning\" title=\"Half duplex\" style=\"margin-left: .3rem\">HD</span>';\n                }\n                return row.speed ? data : \"\";\n            }\n        },\n\n        // Last used\n        {\n            render: function(data, type, row, meta) {\n                // If this is not a swport last_used is meaningless\n                if (!isSwPort(row)) {\n                    return '';\n                }\n\n                if (row.last_used) {\n                    var date = new Date(row.last_used.end_time);\n                    return date.getYear() > 5000 ? \"Now\" : Moment(row.last_used.end_time).format('YYYY-MM-DD HH:mm:ss');\n                } else {\n                    if (row.last_used === undefined) {\n                        // Display this when no data loaded\n                        return ''\n                    }\n                    if (row.last_used === null) {\n                        // Display this for no last used in dataset\n                        return '<span class=\"dim\">Never</span>';\n                    }\n                    return '';\n                }\n            },\n            visible: false\n        },\n\n        {\n            data: 'to_netbox',\n            render: function(data, type, row, meta) {\n                return data\n                    ? '<a href=\"' + data.object_url + '\">' + data.sysname + '</a>'\n                    : '';\n            }\n        },\n\n        {\n            data: 'to_interface',\n            render: function(data, type, row, meta) {\n                return data\n                    ? '<a href=\"' + data.object_url + '\">' + data.ifname + '</a>'\n                    : '';\n            }\n        },\n\n    ];\n\n\n    /** Renders a light indicating status (red or green) */\n    function renderStatus(data, type, row, meta) {\n        var color = data === 2 ? 'red' : 'green';\n        return '<img src=\"/static/images/lys/' + color + '.png\">';\n    }\n\n\n    /* Returns if this is a swport or not */\n    function isSwPort(row) {\n        return row.baseport !== null;\n    }\n\n\n\n    /**\n     * The table to be instantiated\n     * @param {string} selector - the jQuery selector for the table\n     * @param {int} netboxid - the netboxid of the device to list ports for\n     */\n    function PortTable(selector, netboxid) {\n        this.netboxid = netboxid;\n\n        this.selectors = {\n            table: selector,\n            formContainer: '#ifclasses',\n            form: 'portlistform'\n        }\n\n        // Initialize dataTable and add all custom stuff\n        this.dataTable = this.createDataTable();\n        addLoadingIndicator(this.selectors.table);\n        addCustomOrdering();\n        fixSearchDelay(this.dataTable);\n\n        // Special treatment for the last used column that is an optional column\n        var lastUsedColIndex = 9;\n        var lastUsedColumn = this.dataTable.column(lastUsedColIndex);\n\n        // Create form, add handlers\n        var $form = createForm(this.selectors.form, this.selectors.formContainer);\n        setFormFields($form);\n        formListener(this, $form);\n        toggleLastUsedOnXHR(this.selectors.table, lastUsedColumn, $form);\n    }\n\n    PortTable.prototype = {\n        createDataTable: function() {\n            // https://datatables.net/reference/option/\n            return $(this.selectors.table).DataTable({\n                autoWidth: false,\n                paging: false,\n                processing: true,\n                orderClasses: false,\n                ajax: {\n                    url: this.getUrl(),\n                    dataFilter: translateData\n                },\n                columns: dtColumns,\n                order: [[1, 'asc']],\n                dom: \"f<'#ifclasses'><'#infoprocessing'ir>t\",\n                language: {\n                    info: \"_TOTAL_ entries\",\n                    processing: \"Loading...\",\n                }\n            });\n        },\n\n        getUrl: function() {\n            return URI(\"/api/1/interface/\")\n                .addSearch('page_size', 10000)\n                .addSearch('netbox', this.netboxid)\n                .addSearch(getLocalStorageValues())\n                .toString();\n        },\n\n        /**\n         * Load data using custom request because of chunked loading\n         * I'm leaving this here as an example although it's not in use\n         * Remember to adjust page_size\n         */\n        loadData: function() {\n            var self = this;\n\n            function loadMoreData(data) {\n                self.dataTable.rows.add(data.results).draw();\n                if (data.next) {\n                    $.get(data.next, loadMoreData);\n                } else {\n                    $('#portlist_processing').hide();\n                }\n            }\n\n            $('#portlist_processing').show();\n            $.get(this.getUrl(), loadMoreData)\n        }\n    }\n\n\n    /**\n     *\n     * Form related stuff\n     *\n     */\n\n    var localStorageKey = 'nav.porttable.filters'; // Key for local storage of form values\n\n    /**\n     * The form for filtering data\n     */\n    function createForm(formID, formContainer) {\n        var $form = $(\"<form id='\" + formID + \"'>\").appendTo(formContainer);\n        var fs1 = $('<fieldset>').appendTo($form);\n        var fs2 = $('<fieldset>').appendTo($form);\n        fs1.append('<legend>Port filters</legend>')\n        fs1.append('<label><input type=\"radio\" name=\"ifclass\" value=\"all\">All ports</label>');\n        fs1.append('<label><input type=\"radio\" name=\"ifclass\" value=\"swport\">Switch ports</label>');\n        fs1.append('<label><input type=\"radio\" name=\"ifclass\" value=\"gwport\">Router ports</label>');\n        fs1.append('<label><input type=\"radio\" name=\"ifclass\" value=\"physicalport\">Physical ports</label>');\n        fs1.append('<label><input type=\"radio\" name=\"ifclass\" value=\"trunk\">Trunks</label>');\n\n        fs2.append('<legend>Optional</legend>')\n        fs2.append('<label><input type=\"checkbox\" name=\"last_used\">Last used</label>');\n        return $form;\n    }\n\n    // Set form values based on localstorage values\n    function setFormFields($form) {\n        var localStorageValues = getLocalStorageValues();\n        if (localStorageValues) {\n            $form.find('[value=\"' + localStorageValues.ifclass + '\"]').prop('checked', true);\n            $form.find('[name=\"last_used\"]').prop('checked', localStorageValues.last_used);\n        } else {\n            $form.find('[value=\"all\"]').prop('checked', true);\n        }\n    }\n\n    function getLocalStorageValues() {\n        return JSON.parse(localStorage.getItem(localStorageKey));\n    }\n\n    function setLocalStorageValues($form) {\n        var formData = $form.serializeObject();\n        localStorage.setItem(localStorageKey, JSON.stringify(formData));\n        return formData;\n    }\n\n    function formListener(dt, $form) {\n        $form.on('change', function() {\n            var formData = setLocalStorageValues($form);\n            dt.dataTable.ajax.url(dt.getUrl()).load();\n        });\n    }\n\n\n    function addLoadingIndicator(tableSelector) {\n        $(tableSelector).on('processing.dt', function(event, settings, processing) {\n            if (processing) {\n                $(this).css('opacity', .5);\n            } else {\n                $(this).css('opacity', 1);\n            }\n        })\n    }\n\n    /** Custom ordering for statuslight as it cant sort on html elements */\n    function addCustomOrdering() {\n        $.fn.dataTable.ext.type.order['statuslight-pre'] = function ( data ) {\n            return data;\n        };\n    }\n\n    /**\n     * Translate data keys from response to something datatables understand\n     */\n    function translateData(data) {\n        const json = JSON.parse( data );\n        json.recordsTotal = json.count;\n        json.data = json.results;\n        return JSON.stringify( json );\n    }\n\n\n    /**\n     * The searchdelay in DataTables starts whenever you start to write\n     * (weird). Make it work so that the delay kicks in until you're actually\n     * done typing.\n     */\n    function fixSearchDelay(dataTable) {\n        $('#ports div.dataTables_filter input').off('keyup.DT input.DT');\n\n        var searchDelay = null,\n            prevSearch = null;\n\n        $('#ports div.dataTables_filter input').on('keyup', function() {\n            var search = $('#ports div.dataTables_filter input').val();\n\n            clearTimeout(searchDelay);\n\n            if (search !== prevSearch) {\n                searchDelay = setTimeout(function() {\n                    prevSearch = search;\n                    dataTable.search(search).draw();\n                }, 400);\n            }\n        });\n    }\n\n    function toggleLastUsedOnXHR(tableSelector, column, $form) {\n        $(tableSelector).on('xhr.dt', function(e, settings, json, xhr) {\n            column.visible($form.get(0).elements.last_used.checked);\n        });\n    }\n\n\n    return PortTable;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/radius.js",
    "content": "require(['datatables', 'dt_config', 'src/dt_plugins/ip_address_sort', 'src/dt_plugins/ip_address_typedetect'], function () {\n\n    function initTimeField() {\n        var time_field = $('#id_time_1');\n\n        // Disable input if all time is pre-selected\n        if ($('#id_time_0 :selected').val() === '') {\n            time_field.attr('disabled', 'disabled');\n        }\n\n        $('#id_time_0').change(function() {\n            var selected = $(this, 'option:selected');\n\n            if (selected.val() === '') {\n                time_field.val('');\n                slack_help.hide();\n                time_field.attr('disabled', 'disabled');\n            } else {\n                time_field.removeAttr('disabled');\n                if (selected.val() === 'timestamp') {\n                    time_field.val('YYYY-MM-DD hh:mm|slack');\n                } else {\n                    time_field.val('');\n                }\n            }\n        });\n    }\n    function addTableCellListener(resulttable, datatable) {\n        resulttable.on('click', 'td', function() {\n            var filter = $(this).data('filter');\n            if (filter) {\n                datatable.search(filter).draw();\n            }\n        });\n    }\n    function addFilterInputListener(resulttable, datatable) {\n        var filter_input = $('#resulttable_filter input');\n        filter_input.off();\n        filter_input.keypress(function(e) {\n            // i.e. enter was pressed\n            if (e.keyCode === 13) {\n                datatable.search(filter_input.val()).draw();\n            }\n        });\n    }\n    function initResulttable(resulttable) {\n        // Add classes\n        var nosort = resulttable.children('thead').data('nosort');\n\n        // Initialize\n        var datatable = resulttable.DataTable({\n            'iDisplayLength': 50,\n            'bPaginate': false,\n            \"aaSorting\": [],\n            'aoColumnDefs': [\n                {'bSortable': false, 'aTargets': nosort}\n            ],\n            'sDom': '<\"ftable\"<f><\"info\"i>>t',\n            'oLanguage': {'sSearch': 'Filter results:'}\n        });\n\n        // Add listeners\n        addTableCellListener(resulttable, datatable);\n        addFilterInputListener(resulttable, datatable);\n    }\n\n    $(document).ready(function () {\n\n        initTimeField();\n\n        var resulttable = $('#resulttable');\n        if (resulttable.length) {\n            initResulttable(resulttable);\n        }\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/report.js",
    "content": "require(['plugins/csrf-utils'], function (CsrfUtils) {\n\n    const csrfToken = CsrfUtils.getCsrfToken();\n\n\n    function addToggleFiltersListener() {\n        $('#advToggle').click(function() {\n            $('#advblock').toggle();\n            var old_text = $(this).html().trim();\n            var new_text;\n            if (old_text === 'Report filters') {\n                new_text = 'Close report filters';\n            }\n            else {\n                new_text = 'Report filters';\n            }\n            $(this).html(new_text);\n        });\n    }\n\n\n    function addReportWidgetListener() {\n        var $wrapper = $('#add-report-widget-wrapper'),\n            $feedback = $wrapper.find('span'),\n            $button = $wrapper.find('button');\n\n        function displayFeedback() {\n            $feedback.fadeIn('fast', function () {\n                setTimeout(function () {\n                    $feedback.fadeOut('slow');\n                }, 2000);\n            });\n        }\n\n        $button.click(function () {\n            console.log(\"Adding widget\");\n            const request = $.ajax({\n                url: $button.data(\"report_url\"),\n                type: 'POST',\n                data: {\n                    report_id: $button.data(\"report_id\"),\n                    query_string: $button.data(\"report_qs\")\n                },\n                headers: {'X-CSRFToken': csrfToken}\n            });\n\n            request.done(function () {\n                $feedback.removeClass('error').addClass('success').text('Widget added');\n                displayFeedback();\n            });\n\n            request.fail(function () {\n                $feedback.removeClass('success').addClass('error').text('Error adding widget');\n                displayFeedback();\n            });\n        });\n    }\n\n\n    function addTogglePageSizeListener() {\n        var form = $('#reportPageSize');\n        form.change(function(event) {\n            var filters = $('#report_filters_form, #reportPageSize').serialize();\n            window.location = window.location.pathname + '?' + filters;\n        });\n    }\n\n\n    $(document).ready(function () {\n        addToggleFiltersListener();\n        addReportWidgetListener();\n        addTogglePageSizeListener();\n    });\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/seeddb.js",
    "content": "require([\n    'plugins/seeddb_datatables',\n    'plugins/checkbox_selector',\n    'plugins/seeddb_hstore',\n    'plugins/seeddb_management_profile',\n    'plugins/seeddb_map'],\nfunction (datatables, CheckboxSelector, FormFuck, ManagementProfile, seedDBRoomMap) {\n\n    function executeOnLoad() {\n        /**\n         * Checks if we are on the DeviceGroup page. If so, initialize the\n         * select multiple.\n         */\n        var $formElement = $('#id_netboxes'),\n            $searchField = $('#device-group-select2');\n        if ($formElement.length && $searchField.length) {\n            initDeviceGroupSelectMultiple($formElement, $searchField);\n        }\n\n        /**\n         * Checks if we are on the service page. If so, initalize the ajax\n         * search for IP device and service handler\n         */\n        var $serviceCheckerAddForm = $('#service_checker_add_form');\n        if ($serviceCheckerAddForm.length) {\n            initSearchForIpDevice();\n        }\n\n        if ($('#map').length && $('#id_position').length) {\n            seedDBRoomMap('map', 'id_position', 'get_location_trigger');\n        }\n\n        /* The Datatables plugin works best when content is rendered. Thus\n         * we activate it on load */\n        if (datatables.$tableWrapper.data('page') === 'cabling') {\n            datatables.enrichTable('cabling');\n        } else if (datatables.$tableWrapper.data('page') === 'patch') {\n            datatables.enrichTable('patch');\n        } else if (datatables.$dataTable.find('tbody tr').length > 1) {\n            datatables.enrichTable('default');\n        } else {\n            datatables.$tableWrapper.removeClass('notvisible');\n        }\n\n        new CheckboxSelector('#select', '.selector').add();\n\n        /* Add form to hstore fields in room */\n        var $textarea = $('textarea#id_data');\n        if ($textarea.length) {\n            var _formfuck = new FormFuck($textarea);\n        }\n\n        activateIpDeviceFormPlugins();\n        addConfirmLeavePage();\n\n        addParentSelect2();\n    }\n\n\n    /* Internet Explorer caching leads to onload event firing before\n     * script is loaded - thus we never get the load event. This code\n     * will at least make it usable. */\n    if (document.readyState === 'complete') {\n        executeOnLoad();\n    } else {\n        $(window).on('load', executeOnLoad);\n    }\n\n\n    /**\n     * Uses select2 to search for and display netboxes. Executes the search in\n     * AJAX-requests.\n     */\n    function initDeviceGroupSelectMultiple($formElement, $searchField) {\n        // Pre-populate with existing selections from the form element\n        const initialData = [];\n        $formElement.find(':selected').each(function (index, option) {\n            initialData.push({\n                id: option.value,\n                text: option.innerHTML\n            });\n        });\n\n        $searchField.select2({\n            multiple: true,\n            ajax: {\n                url: NAV.urls.api_netbox_list,\n                dataType: 'json',\n                delay: 250,\n                data: function(params) {\n                    return {\n                        search: params.term\n                    };\n                },\n                processResults: netboxListSelect2\n            },\n            minimumInputLength: 3\n        });\n\n        // Set initial selection if there are pre-selected values\n        if (initialData.length > 0) {\n            // For Select2 v4, we need to add option elements and trigger change\n            initialData.forEach(function(item) {\n                if ($searchField.find('option[value=\"' + item.id + '\"]').length === 0) {\n                    const option = new Option(item.text, item.id, true, true);\n                    $searchField.append(option);\n                }\n            });\n            $searchField.trigger('change');\n        }\n\n        /**\n         * Sets the selected values in the form element to be the same as in\n         * the select2 element when the form is submitted.\n         */\n        $('form.seeddb-edit').submit(function () {\n            $formElement.val($searchField.val());\n        });\n    }\n\n    function activateIpDeviceFormPlugins() {\n        // The connectivity checker\n        var $form = $('#seeddb-netbox-form'),\n            $addressField = $('#id_ip');\n\n        $form.on('submit', function (event, validated) {\n            if (!validated) {\n                event.preventDefault();\n                const verification = $.get(\n                    NAV.urls.seeddb.validateIpAddress,\n                    {'address': $addressField.val()}\n                );\n                verification.done(function () {\n                    $form.trigger('submit', true);\n                })\n            }\n        });\n    }\n\n\n    /**\n     * Some forms are complex enough to varrant a confirmation if the user tries\n     * to leave the page without saving the changed form.\n     *\n     * This function sets the return value on the beforeunload event if the\n     * forms are changed but not saved before leaving the page, in effect\n     * triggering the browsers \"Are you sure you want to leave this\n     * page\"-confirmation.\n     */\n    function addConfirmLeavePage() {\n        var setReturnValue = function (event) {\n            event.returnValue = 'You have unsaved changes.';\n        };\n\n        var forms = $('#seeddb-netbox-form');\n\n        forms.one('change', function() {\n            window.addEventListener('beforeunload', setReturnValue);\n        });\n        forms.on('submit', function() {\n            window.removeEventListener('beforeunload', setReturnValue);\n        });\n    }\n\n    function netboxListSelect2(data, _params) {\n        const results = data.results;\n        results.sort(function(a, b) {\n            if (a.sysname.toLowerCase() < b.sysname.toLowerCase()) {\n                return -1;\n            } else {\n                return 1;\n            }\n        });\n        return {\n            results: data.results.map(function(obj) {\n                return { id: obj.id, text: obj.sysname };\n            })\n        };\n    }\n\n    function initSearchForIpDevice() {\n        $('#id_netbox').select2({\n            placeholder: 'Search for IP device',\n            minimumInputLength: 3,\n            ajax: {\n                url: NAV.urls.api_netbox_list,\n                dataType: 'json',\n                delay: 250,\n                data: function(params) {\n                    return {\n                        search: params.term\n                    };\n                },\n                processResults: netboxListSelect2\n            }\n        });\n    }\n\n\n    /** Add Select2 to parent fields. They demand extra styling and thus special treatment */\n    function addParentSelect2() {\n        $('#id_parent').select2({\n            dropdownCssClass: 'parent-element'\n        });\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/seeddb_netbox.js",
    "content": "require(['select2'], function() {\n    $(function() {\n        var toggleTrigger = $('.advanced-toggle'),\n            fa = toggleTrigger.find('.fa'),\n            advanced = $('.advanced'),\n            storageKey = 'NAV.seeddb.advanced.show';\n\n        function isHidden(element) {\n            return element.offsetParent === null;\n        }\n\n        function toggle() {\n            advanced.slideToggle(function(){\n                if (isHidden(this)) {\n                    console.log('Setting storagekey to ', 0);\n                    localStorage.setItem(storageKey, '0');\n                } else {\n                    console.log('Setting storagekey to ', 1);\n                    localStorage.setItem(storageKey, '1');\n                }\n            });\n            fa.toggleClass('fa-caret-square-o-right fa-caret-square-o-down');\n        }\n\n        toggleTrigger.on('click', function(event) {\n            event.preventDefault();\n            toggle();\n        });\n\n        // Show element if localstorage says so\n        if (+localStorage.getItem(storageKey) === 1) {\n            advanced.show();\n            fa.toggleClass('fa-caret-square-o-right fa-caret-square-o-down');\n        }\n\n\n        // Master- and instancefield are mutually exclusive. Try to enforce that.\n        var $masterField = $('#id_master').select2();\n        var $instanceField = $('#id_virtual_instance').select2();\n\n        function hasValue($field) {\n            const val = $field.val();\n            // Check for actual value - empty options have \"\", null, undefined, or [] for multi-select\n            if (val == null || val === '') {\n                return false;\n            }\n            // Handle multi-select which returns an array\n            if (Array.isArray(val)) {\n                return val.length > 0;\n            }\n            return true;\n        }\n\n        function checkFields() {\n            const masterHasValue = hasValue($masterField);\n            const instanceHasValue = hasValue($instanceField);\n\n            // If master has a value, disable instance field\n            // If instance has a value, disable master field\n            // If neither has a value, enable both\n            $instanceField.prop('disabled', masterHasValue);\n            $masterField.prop('disabled', instanceHasValue);\n        }\n\n        $masterField.on('change', checkFields);\n        $instanceField.on('change', checkFields);\n\n        // Run on page load to set initial state (after Select2 finishes initializing)\n        setTimeout(checkFields, 0);\n\n        // Initialize profiles select with links to profile detail pages\n        const $profilesField = $('#id_profiles');\n        if ($profilesField.length && $profilesField.hasClass('profile-select-with-links')) {\n            const urlPattern = $profilesField.data('profile-url-pattern');\n\n            // Format dropdown items with \"Open\" links\n            function formatProfileResult(item) {\n                if (!item.id) {\n                    return item.text;\n                }\n\n                const profileUrl = urlPattern.replace('{id}', item.id);\n                const $container = $('<div class=\"profile-option-container\"></div>');\n                $container.append($('<span class=\"profile-name\"></span>').text(item.text));\n                $container.append(\n                    $('<a class=\"profile-link\" target=\"_blank\" title=\"Open profile in new tab\">Open</a>')\n                        .attr('href', profileUrl)\n                        .attr('data-profile-url', profileUrl)\n                );\n                return $container;\n            }\n\n            // Initialize Select2 with custom template\n            $profilesField.select2({\n                templateResult: formatProfileResult,\n            });\n\n            // Helper function to find closest profile link element\n            function findProfileLink(element) {\n                if (element.closest) {\n                    return element.closest('.profile-link');\n                }\n                // Fallback for older browsers\n                let current = element;\n                while (current && current !== document.body) {\n                    if (current.classList?.contains('profile-link')) {\n                        return current;\n                    }\n                    current = current.parentElement;\n                }\n                return null;\n            }\n\n            // Intercept clicks on profile links using capture phase (fires before Select2)\n            document.addEventListener('mousedown', function(e) {\n                const linkElement = findProfileLink(e.target);\n                if (linkElement) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    e.stopImmediatePropagation();\n\n                    const url = linkElement.dataset.profileUrl;\n                    if (url) {\n                        window.open(url, '_blank');\n                    }\n                }\n            }, true);\n        }\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/seeddb_netbox_wizard.js",
    "content": "require(['driver'], function () {\n    function initNetboxWizard() {\n        const driver = window.driver.js.driver;\n\n        const driverObj = driver({\n            showProgress: true,\n            smoothScroll: true,\n            steps: [\n                {\n                    element: '#add-netbox-form',\n                    popover: {\n                        title: 'Add IP Device',\n                        description: 'To enable NAV to collect information from an IP Device, you need to give some basic information about it.',\n                        side: 'top'\n                    }\n                },\n                {\n                    element: \"#id_ip\",\n                    popover: {\n                        title: 'IP Address',\n                        description: 'The IP address of the device is needed. Both IPv4 and IPv6 addresses are supported.',\n                        side: 'bottom'\n                    },\n                },\n                {\n                    element: '#id_room',\n                    popover: {\n                        title: 'Physical Location',\n                        description: `\n                            <p>The room is the physical location/wiring closet of the device.\n                            You can add more rooms by clicking the <em>\"Room\"</em> tab.</p>\n                            <p>A room can be given a position that enables map placement in some of NAV's tools.</p>\n                        `,\n                        side: 'bottom'\n                    }\n                },\n                {\n                    element: '#id_category',\n                    popover: {\n                        title: 'Device Category',\n                        description: `\n                          <p>The category determines how NAV collects data from the device. More\n                            information about categories can be found\n                            <a href=\"/doc/intro/getting-started.html#selecting-a-device-category\"\n                               target=\"_blank\" title=\"Selecting a device category\">in the documentation</a>.\n                          </p>\n                        `,\n                        side: 'bottom'\n                    }\n                },\n                {\n                    element: '#id_organization',\n                    popover: {\n                        title: 'Organization',\n                        description: 'The organization indicates who is operationally responsible for the equipment.',\n                        side: 'bottom'\n                    }\n                },\n                {\n                    element: '#div_id_profiles',\n                    popover: {\n                        title: 'Management Profile',\n                        description: `\n                          <p>Selecting a management profile is essential. Without the correct profile,\n                            NAV has no means to collect information from the device.</p>\n                          <p>Management profiles can be configured in a separate SeedDB tab. For example,\n                            you can create an SNMP v2c management profile that can be shared among many\n                            of your devices.</p>\n                        `,\n                        side: 'bottom'\n                    },\n                },\n                {\n                    popover: {\n                        title: 'Bulk Import Option',\n                        description: `\n                          <p>\n                            If you have a big network with many devices you should check out the\n                            <a href=\"/doc/intro/getting-started.html#importing-multiple-devices-in-bulk\" target=\"_blank\"\n                               title=\"Link to bulk import information\">bulk import</a> functionality\n                            in NAV. Bulk import enables you to import all your devices from comma (or colon) separated text files.\n                          </p>\n                        `\n                    }\n                },\n                {\n                    popover: {\n                        title: 'Learn More',\n                        description: `\n                          <p>\n                            If you want more information about using the Seed Database tool to organize your data, please read the\n                            <a href=\"/doc/intro/getting-started.html\" title=\"Getting started\" target=\"_blank\">&laquo;Getting started&raquo;</a>\n                            and the\n                            <a href=\"/doc/intro/getting-organized.html\" title=\"Getting organized\" target=\"_blank\">&laquo;Getting organized&raquo;</a>\n                            guides.\n                          </p>\n                          <p>We wish you a great NAV experience!</p>\n                        `\n                    }\n                }\n            ]\n        });\n        driverObj.drive();\n    }\n\n    const urlParams = new URLSearchParams(window.location.search);\n    if (urlParams.get('guide') === 'true') {\n        initNetboxWizard();\n    }\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/sensor_details.js",
    "content": "require([\n    \"plugins/graphfetcher_controller\",\n    \"plugins/gauge\",\n], function(graphfetcher_controller, Gauge) {\n    $(function() {\n        var $gauge = $('.sensor-gauge');\n        if ($gauge.length) {\n            var thresholds = $gauge.data('thresholds') ? $gauge.data('thresholds').split(',') : [];\n            var _gauge = new Gauge({\n                node: $gauge[0],\n                min: $gauge.data('min'),\n                max: $gauge.data('max'),\n                url: $gauge.data('url'),\n                symbol: ' ',\n                unit: $gauge.data('unit'),\n                thresholds: thresholds\n            });\n        } else {\n            var $sensor = $('.sensor');\n            var request = $.get($sensor.data('url'));\n\n            request.done(function(data) {\n                if (data.length === 0) {\n                    return;\n                }\n\n                var datapoints = data[0].datapoints.reverse();\n\n                for (var i=0; i<datapoints.length; i++) {\n                    var value = datapoints[i][0];\n                    var epoch = datapoints[i][1];\n                    if (value !== null) {\n                        var on_state = $sensor.data('on-state');\n                        if (value === on_state ) {\n                            $(\".off\").addClass('hidden');\n                            $(\".on\").removeClass('hidden');\n                        } else {\n                            $(\".on\").addClass('hidden');\n                            $(\".off\").removeClass('hidden');\n                        }\n                        break;\n                    }\n                }\n            });\n        }\n\n        $('#add-to-dashboard-button').on('click', function (event) {\n            event.preventDefault();\n            var $button = $(this);\n            var request = $.post($button.data('dashboardUrl'));\n            request.done(function() {\n                $button.removeClass('secondary').addClass('success');\n            });\n            request.fail(function() {\n                $button.removeClass('secondary').addClass('failure');\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/statistics.js",
    "content": "require([], function () {\n    $(function () {\n        var $graph = $('.statistics-chart');\n\n        $('#line-chart').click(function () {\n            addGraphType('line');\n            setActiveButton($(this));\n        });\n\n        $('#pie-chart').click(function () {\n            addGraphType('pie');\n            setActiveButton($(this));\n        });\n\n        function setActiveButton($button) {\n            $button.parents('ul:first').find('a').removeClass('active');\n            $button.addClass('active');\n        }\n\n        function addGraphType(type) {\n            var src = $graph.attr('src');\n            if (src.indexOf('graphType') >= 0) {\n                src = src.replace(/graphType=(line|pie)/, 'graphType=' + type);\n            } else {\n                src += '&graphType=' + type;\n            }\n            $graph.attr('src', src);\n        }\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/status2/collections.js",
    "content": "define([\n    'backbone',\n    'status/models'\n], function (Backbone, Models) {\n\n    /**\n     * Collections for Status\n     */\n    var EventCollection = Backbone.Collection.extend({\n        model: Models.EventModel,\n\n        sortAttribute: 'start_time',\n        sortDirection: -1,\n\n        initialize: function () {\n            console.log('A new eventcollection was made');\n        },\n\n        sortEvents: function (attribute, direction) {\n            this.sortAttribute = attribute;\n            this.sortDirection = direction;\n            this.sort();\n        },\n\n        comparator: function (a, b) {\n            var value1, value2, sortAttributes = this.sortAttribute.split('.');\n            if (sortAttributes.length > 1) {\n                /** Support one level nesting */\n                value1 = a.get(sortAttributes[0])[sortAttributes[1]].toLowerCase();\n                value2 = b.get(sortAttributes[0])[sortAttributes[1]].toLowerCase();\n            } else {\n                /** No nesting */\n                value1 = a.get(this.sortAttribute).toLowerCase();\n                value2 = b.get(this.sortAttribute).toLowerCase();\n            }\n\n            if (value1 === value2) { return 0; }\n            if (this.sortDirection === 1) {\n                return value1 > value2 ? 1 : -1;\n            } else {\n                return value1 < value2 ? 1 : -1;\n            }\n\n        },\n        parse: function (response) {\n            return response.results;\n        }\n    });\n\n    var ChangeCollection = Backbone.Collection.extend({\n        model: Models.EventModel\n    });\n\n    return {\n        EventCollection: EventCollection,\n        ChangeCollection: ChangeCollection\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/status2/handlebars-helpers.js",
    "content": "require(['moment', 'handlebars'], function (moment, Handlebars) {\n\n    //  format an ISO date using Moment.js\n    //  http://momentjs.com/\n    //  moment syntax example: moment(Date(\"2011-07-18T15:50:52\")).format(\"MMMM YYYY\")\n    //  usage: {{dateFormat creation_date format=\"MMMM YYYY\"}}\n    // Credits: https://gist.github.com/stephentcannon/3409103\n    Handlebars.registerHelper('dateFormat', function(context, block) {\n        var today = moment(),\n            date = moment(context),\n            defaultFormat = 'DD.MMM HH:mm:ss';\n\n        if (!today.isSame(date, 'year')) {\n            defaultFormat = \"YYYY-MM-DD HH:mm:ss\";\n        } else if (today.isSame(date, 'day')) {\n            defaultFormat = 'HH:mm:ss';\n        }\n        var f = block.hash.format || defaultFormat;\n        return date.format(f);\n    });\n\n    Handlebars.registerHelper('timeSince', function(context) {\n        var date = moment(context);\n        return date.fromNow(true);\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/status2/models.js",
    "content": "define([\n    'backbone',\n], function (Backbone) {\n\n    var EventModel = Backbone.Model.extend({\n        urlRoot: NAV.urls.status2_clear_alert\n    });\n\n    return {\n        EventModel: EventModel\n    };\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/status2/status.js",
    "content": "require([\n    'status/views',\n    'backbone',\n], function (StatusView) {\n\n    var selectors = {\n        filterFormId: 'status-form', // Id of the form for filtering statuses\n        filterClearId: 'clear-status-form', // Id of the button for clearing the form\n        statelessDaysId: 'id_stateless_threshold' // Id of the stateless days input\n    };\n\n    /**\n     * Clear, not reset, the status form.\n     */\n    function clearFilterForm() {\n        var $form = $('#' + selectors.filterFormId);\n        $form.find('.select2').each(function() {\n            $(this).val(null).trigger('change');\n        });\n        $form.find('input:checkbox').removeAttr('checked');\n        $form.find('#' + selectors.statelessDaysId).val('24');\n    }\n\n    /**\n     * Wait for ready signal to start doing stuff\n     */\n    $(function() {\n        console.log('Initializing app');\n        var statusView = new StatusView();\n\n        $('#' + selectors.filterClearId).click(clearFilterForm);\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/status2/views.js",
    "content": "define([\n    'spin',\n    'status/collections',\n    'libs-amd/text!resources/status2/event_template.hbs',\n    'moment',\n    'handlebars',\n    'status/handlebars-helpers',\n    'backbone',\n    'libs/backbone-eventbroker'\n], function (Spinner, Collections, EventTemplate, moment, Handlebars) {\n\n    // This collection contains all the event-models that are to be cleared/acknowledged etc.\n    var alertsToChange = new Collections.ChangeCollection();\n\n    var spinner = new Spinner({position: 'relative', top: '0.5em', left: '-1em', scale: 0.5});\n\n    /** The main view containing the panel and the results list */\n    var StatusView = Backbone.View.extend({\n        el: '#status-page',\n\n        localStorageShowPanelKey: 'nav.web.status.showPanel',\n        toggleButtonText: {\n            show: 'Show status filter',\n            hide: 'Hide status filter'\n        },\n\n        events: {\n            'click .set-default': 'setDefaultStatusOptions',\n            'click .toggle-panel': 'togglePanel'\n        },\n\n        initialize: function () {\n            var eventCollection = new Collections.EventCollection();\n\n            new EventsView({ collection: eventCollection });\n            this.panelView = new PanelView({ collection: eventCollection });\n            new ActionView({ collection: eventCollection });\n\n            this.setDefaultButton = this.$el.find('.set-default');\n            this.toggleButton = this.$('.toggle-panel');\n            this.checkStorage();\n            $('#status-page').show();\n\n        },\n\n        checkStorage: function () {\n            if (localStorage.getItem(this.localStorageShowPanelKey) === 'yes') {\n                this.panelView.$el.show().removeClass('hidden');\n                this.toggleButton.html(this.toggleButtonText.hide);\n            } else {\n                this.toggleButton.html(this.toggleButtonText.show);\n            }\n        },\n\n        setDefaultStatusOptions: function () {\n            var self = this;\n            var request = $.post(\n                NAV.urls.status2_save_preferences,\n                this.$el.find('#status-panel form').serialize()\n            );\n\n            self.setDefaultButton.removeClass('alert');  // Remove errorclass if an error occured on last try\n\n            request.done(function(){\n                self.setDefaultButton.addClass('success').removeClass('secondary');\n                setTimeout(function () {\n                    self.setDefaultButton.addClass('secondary').removeClass('success');\n                }, 1000);\n                console.log('Default status set');\n            });\n            request.fail(function(){\n                self.setDefaultButton.addClass('alert').removeClass('secondary');\n                console.log('Setting status failed');\n            });\n        },\n\n        togglePanel: function () {\n            var self = this;\n            this.panelView.$el.slideToggle(function () {\n                if (self.panelView.$el.is(':visible')) {\n                    localStorage.setItem(self.localStorageShowPanelKey, 'yes');\n                    self.toggleButton.html(self.toggleButtonText.hide);\n                } else {\n                    localStorage.setItem(self.localStorageShowPanelKey, 'no');\n                    self.toggleButton.html(self.toggleButtonText.show);\n                }\n            });\n        }\n\n    });\n\n    function startSpinner() {\n        spinner.spin();\n        $('#fetch-spinner').append(spinner.el);\n    }\n\n    function stopSpinner() {\n        spinner.stop();\n    }\n\n    /** The main panel for filtering events */\n    var PanelView = Backbone.View.extend({\n        el: '#status-panel',\n\n        refreshInterval: 1000 * 60 * 5,  // 5 minutes\n\n        initialize: function () {\n            console.log('Initializing panel view');\n            // This is not the \"correct\" way of doing this.\n            this.alertBox = $('#status-page-fetch-alert');\n            this.fieldList = this.$el.find('.field_list > div');\n            this.presentFilters();\n            this.fetchData();\n            this.updateRefreshInterval();\n            this.listenTo(this.collection, 'reset', this.updateRefreshInterval);\n        },\n\n        events: {\n            'select2:select #id_status_filters': 'toggleFilters',\n            'select2:unselect #id_status_filters': 'toggleFilters',\n            'change form': 'fetchData',\n            'submit form': 'preventSubmit'\n        },\n\n        /**\n         * When the page loads hide all filters then display all filters that\n         * the user has selected options in\n         */\n        presentFilters: function () {\n            this.fieldList.hide();\n            var selectedOptions = this.fieldList.find('[selected]');\n            selectedOptions.closest('.ctrlHolder').show();\n            var filtersWithValue = $.map(selectedOptions.closest('select'), function (element) {\n                return element.name;\n            });\n            $('#id_status_filters').val(filtersWithValue).trigger('change');\n        },\n\n        /* Event driven methods */\n        /**\n         * Toggle filters based on the user selecting and deselecting filters.\n         * When removing a filter also unselect the selected options from that\n         * filter.\n         */\n        toggleFilters: function (event) {\n            event.stopPropagation();\n            // In Select2 v4, added/removed data is in event.params.data\n            const params = event.params || {};\n            if (params.data && event.type === 'select2:select') {\n                this.$el.find('#id_' + params.data.id).closest('.ctrlHolder').show();\n            }\n            if (params.data && event.type === 'select2:unselect') {\n                const removed = this.$el.find('#id_' + params.data.id);\n                removed.closest('.ctrlHolder').hide();\n                removed.val(null).trigger('change');  // Unselect all options\n                // Unselecting does not trigger the change-event that again\n                // triggers fetching data, so we have to do it ourself\n                this.fetchData();\n            }\n        },\n\n        fetchData: function () {\n            var self = this;\n            console.log('Fetching data...');\n            startSpinner();\n            this.alertBox.addClass('hidden');\n            this.collection.url = NAV.urls.status2_api_alerthistory + '?' + this.$('form').serialize();\n            console.log(this.collection.url);\n            var request = this.collection.fetch({ reset: true, data: {page_size: 1000} });\n            request.done(function () {\n                console.log('data fetched');\n                stopSpinner();\n            });\n            request.fail(function () {\n                console.log('Failed to fetch data');\n                self.alertBox.removeClass('hidden');\n            });\n        },\n\n        updateRefreshInterval: function () {\n            console.log('Updating refresh interval');\n            var self = this;\n            clearTimeout(this.refreshCounterId);\n            this.refreshCounterId = setTimeout(function () {\n                self.fetchData();\n            }, this.refreshInterval);\n        },\n\n        preventSubmit: function (event) {\n            event.preventDefault();\n        }\n    });\n\n\n    /** The action panel for manipulation alerts */\n    var ActionView = Backbone.View.extend({\n        el: '#action-panel-revised',\n\n        events: {\n            'click .submit-action': 'submitAction',\n            'change select': 'showOrHideCommentField',\n            'click .help-toggle': 'toggleHelp'\n        },\n        helpToggleText: {\n            show: 'Show action details',\n            hide: 'Hide action details'\n        },\n        initialize: function () {\n            this.actionSelect = this.$('select');\n            this.comment = this.$('.usercomment');\n            this.commentWrapper = this.$('.usercomment-wrapper');\n            this.feedback = this.$('.feedback');\n            this.helpContent = this.$('#action-help-content');\n            this.helpToggle = this.$('.help-toggle');\n            this.helpText = this.$('.help-text');\n        },\n        toggleHelp: function(event) {\n            event.preventDefault();\n            const self = this;\n\n            this.helpContent.slideToggle(200, function() {\n                if (self.helpContent.is(':visible')) {\n                    self.helpText.text(self.helpToggleText.hide);\n                    self.helpToggle.attr('aria-expanded', 'true');\n                } else {\n                    self.helpText.text(self.helpToggleText.show);\n                    self.helpToggle.attr('aria-expanded', 'false');\n                }\n            });\n        },\n        submitAction: function() {\n            var self = this,\n                action = this.actionSelect.val();\n\n            console.log('Action:' + action);\n            this.feedback.hide(); // Hide previous feedback\n\n            var actions = {\n                'acknowledge': this.acknowledgeAlerts,\n                'clear': this.resolveAlerts,\n                'maintenance': this.putOnMaintenance,\n                'delete': this.deleteModuleOrChassis\n            };\n\n            if (action && alertsToChange.length > 0) {\n                actions[action].call(this);\n            } else if (!action) {\n                this.give_warning_feedback('You must choose an action');\n            } else if (alertsToChange.length <= 0) {\n                this.give_warning_feedback('You must choose one or more alerts');\n            }\n\n            console.log(alertsToChange);\n\n        },\n\n        showOrHideCommentField: function() {\n            var actionsWithComment = ['acknowledge', 'maintenance'];\n            if (actionsWithComment.indexOf(this.actionSelect.val()) >= 0) {\n                this.commentWrapper.show();\n            } else {\n                this.commentWrapper.hide();\n            }\n        },\n\n        give_feedback: function(msg, klass) {\n            klass = typeof klass !== 'undefined' ? klass : 'success';\n            this.feedback.removeClass('alert warning').addClass(klass).html(msg);\n            this.feedback.fadeIn();\n        },\n\n        give_error_feedback: function(msg) {\n            this.give_feedback(msg, 'alert');\n        },\n\n        give_warning_feedback: function(msg) {\n            this.give_feedback(msg, 'warning');\n        },\n\n        acknowledgeAlerts: function () {\n            var self = this;\n\n            var request = $.post(NAV.urls.status2_acknowledge_alert, {\n                id: alertsToChange.pluck('id'),\n                comment: this.comment.val(),\n                csrfmiddlewaretoken: $('#action-panel-revised [name=csrfmiddlewaretoken]').val()\n            });\n\n            request.done(function () {\n                self.collection.fetch();\n                self.give_feedback('Alerts acknowledged');\n                Backbone.EventBroker.trigger('eventsview:reset');\n            });\n\n            request.fail(function () {\n                self.give_error_feedback('Error acknowledging alerts');\n            });\n        },\n\n        resolveAlerts: function () {\n            console.log('resolveAlerts');\n            var self = this;\n\n            var request = $.post(NAV.urls.status2_clear_alert, {\n                id: alertsToChange.pluck('id'),\n                csrfmiddlewaretoken: $('#action-panel-revised [name=csrfmiddlewaretoken]').val()\n            });\n\n            request.done(function () {\n                self.collection.remove(alertsToChange.models);\n                self.give_feedback('Alerts cleared');\n                Backbone.EventBroker.trigger('eventsview:reset');\n            });\n\n            request.fail(function () {\n                self.give_error_feedback('Error clearing alerts');\n            });\n        },\n\n        putOnMaintenance: function () {\n            console.log('putOnMaintenance');\n            var ids = [],\n                self = this,\n                description = this.$('.usercomment').val();\n            alertsToChange.each(function (model) {\n                if (model.get('subject_type') === 'Netbox') {\n                    ids.push(model.get('id'));\n                }\n            });\n\n            if (ids.length > 0) {\n                var request = $.post(NAV.urls.status2_put_on_maintenance, {\n                    id: ids,\n                    description: description,\n                    csrfmiddlewaretoken: this.$('[name=csrfmiddlewaretoken]').val()\n                });\n\n                request.done(function () {\n                    self.collection.fetch();\n                    self.give_feedback('Maintenances created');\n                    Backbone.EventBroker.trigger('eventsview:reset');\n                });\n\n                request.fail(function () {\n                    self.give_error_feedback('Error putting on maintenance');\n                });\n            } else {\n                self.give_error_feedback('None of the subjects are netboxes or services');\n            }\n        },\n\n        deleteModuleOrChassis: function() {\n            console.log('putOnMaintenance');\n            var ids = [],\n                self = this,\n                description = this.$('.usercomment').val();\n            alertsToChange.each(function (model) {\n                if (['Module', 'NetboxEntity'].indexOf(model.get('subject_type')) >= 0) {\n                    ids.push(model.get('id'));\n                }\n            });\n\n            if (ids.length > 0) {\n                var request = $.post(NAV.urls.status2_delete_module_or_chassis, {\n                    id: ids,\n                    description: description,\n                    csrfmiddlewaretoken: this.$('[name=csrfmiddlewaretoken]').val()\n                });\n\n                request.done(function () {\n                    self.collection.fetch();\n                    self.give_feedback('Modules or chassis deleted');\n                    Backbone.EventBroker.trigger('eventsview:reset');\n                });\n\n                request.fail(function () {\n                    self.give_error_feedback('Error deleting module or chassis');\n                });\n            } else {\n                self.give_error_feedback('None of the subjects are modules or chassis');\n            }\n\n        }\n\n    });\n\n\n    /** The list of status events */\n    var EventsView = Backbone.View.extend({\n        el: '#events-list',\n\n        // Used in EventBroker\n        interests: {\n            'eventsview:reset': 'reset'\n        },\n\n        events: {\n            'click thead .alert-action': 'toggleCheckboxes',\n            'click thead .header': 'headerSort'\n        },\n\n        // Map columnindex to model attribute for sorting\n        sortMap: {\n            3: 'subject',\n            4: 'alert_type.name',\n            5: 'start_time'\n        },\n\n        initialize: function () {\n            console.log('Initializing events view');\n\n            this.body = this.$('tbody');\n            this.headers = this.$('thead th');\n            this.checkBox = this.$('thead .alert-action');\n\n            this.applySort();\n\n            this.listenTo(this.collection, 'sort', this.updateSortIndicators);\n            this.listenTo(this.collection, 'reset', this.updateSortIndicators);\n            this.listenTo(this.collection, 'reset', this.render);\n\n            Backbone.EventBroker.register(this); // Register interests\n        },\n\n        applySort: function () {\n            /** Add the header class to all cells that should be sortable */\n            var self = this;\n            this.$('thead th').each(function (index, element) {\n                if (self.sortMap[index]) {\n                    $(element).addClass('header');\n                }\n            });\n        },\n\n        updateSortIndicators: function () {\n            /** Update sort indicators on sort */\n            console.log('updateSortIndicators');\n\n            var cellIndex = -1;\n\n            // It's worth noting that this requires unique values in sortMap\n            for (var index in this.sortMap) {\n                if (this.sortMap.hasOwnProperty(index)) {\n                    if (this.sortMap[index] === this.collection.sortAttribute) {\n                        cellIndex = index;\n                    }\n                }\n            }\n\n            if (cellIndex >= 0) {\n                var $element = $(this.headers[cellIndex]);\n                this.headers.removeClass('headerSortUp headerSortDown');\n                if (this.collection.sortDirection === -1) {\n                    $element.addClass('headerSortUp');\n                } else {\n                    $element.addClass('headerSortDown');\n                }\n            }\n        },\n\n        headerSort: function (event) {\n            /** Sort collection when sort-cell is clicked */\n            console.log('headerSort');\n            var direction = 1;\n\n            // If we sort on the same cell twice, reverse direction\n            if (this.sortMap[event.currentTarget.cellIndex] === this.collection.sortAttribute) {\n                direction = this.collection.sortDirection * -1;  // Reverse direction\n            }\n            this.collection.sortEvents(\n                this.sortMap[event.currentTarget.cellIndex], direction);\n            this.render();\n        },\n\n        render: function () {\n            console.log('Rendering table');\n            this.$('.last-changed').html(moment().format('YYYY-MM-DD HH:mm:ss'));\n            this.body.html('');\n            this.collection.each(this.renderEvent, this);\n        },\n\n        renderEvent: function (nav_event) {\n            var nav_event_view = new EventView({model: nav_event});\n            this.body.append(nav_event_view.el);\n        },\n\n        toggleCheckboxes: function () {\n            /** Toggle all checkboxes when 'main' checkbox in thead is toggled */\n            if (this.checkBox.prop('checked')) {\n                alertsToChange.reset(this.collection.models);\n            } else {\n                alertsToChange.reset();\n            }\n        },\n\n        reset: function() {\n            alertsToChange.reset();\n            this.checkBox.prop('checked', false);\n        }\n\n    });\n\n\n    /** The view displaying a single status event */\n    var compiledEventTemplate = Handlebars.compile(EventTemplate);\n    var EventView = Backbone.View.extend({\n        tagName: 'tr',\n\n        events: {\n            'click .alert-action': 'toggleChangeState',\n            'click .toggle-info-cell': 'renderExpandedInfo'\n        },\n\n        attributes: {\n            class: 'master'\n        },\n\n        template: compiledEventTemplate,\n\n        initialize: function () {\n            this.render();\n            this.markStatus();\n\n            this.listenTo(this.model, 'remove', this.unRender);\n            this.listenTo(this.model, 'change', this.render);\n            this.listenTo(alertsToChange, 'reset', this.toggleSelect);\n        },\n\n        markStatus: function () {\n            var statuses = ['on_maintenance', 'acknowledgement'];\n            for (var i = 0, l = statuses.length; i < l; i++) {\n                if (this.model.get(statuses[i])) {\n                    this.$el.addClass('hasStatus');\n                    return;\n                }\n            }\n        },\n\n        renderExpandedInfo: function () {\n            var $container = this.$el.find('.api-html');\n            if ($container.is(':empty')) {\n                this.loadApiHtml($container).show();\n            }\n        },\n\n        loadApiHtml: function($container) {\n            var url = NAV.urls.alert_endpoint + this.model.get('id') + '/';\n            var request = $.ajax(url, {\n                headers: { accept: 'text/x-nav-html' }\n            });\n            request.done(function (response) {\n                $container.html(response);\n            });\n            request.fail(function () {\n                $container.html('<div class=\"alert-box alert\">Error fetching status details</div>');\n            });\n        },\n\n        toggleChangeState: function (event) {\n            /** React to click on checkbox and add/remove from change-collection. */\n            event.stopImmediatePropagation();\n            if (alertsToChange.contains(this.model)) {\n                alertsToChange.remove(this.model);\n            } else {\n                alertsToChange.add(this.model);\n            }\n            this.toggleSelect();\n        },\n\n        toggleSelect: function () {\n            /** Highlight row and tick/untick checkbox. We separate this from\n             *  the click event so that this can be run on change-collection\n             *  changes */\n            var checkBox = this.$('.alert-action');\n\n            if (alertsToChange.contains(this.model)) {\n                checkBox.prop('checked', true);\n                this.highlight(true);\n            } else {\n                checkBox.prop('checked', false);\n                this.highlight(false);\n            }\n        },\n\n        render: function () {\n            this.$el.html(this.template(this.model.attributes));\n        },\n\n        unRender: function (model, collection) {\n            /* Remove the html element associated with the view. We need to\n               check that the correct collection sends the event */\n            var self = this;\n            if (collection.constructor === Collections.EventCollection) {\n                this.$el.fadeOut(function () {\n                    self.remove();\n                });\n            }\n        },\n\n        highlight: function (flag) {\n            this.$el.toggleClass('highlight', flag);\n        }\n\n    });\n\n    return StatusView;\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/subnetmatrix.js",
    "content": "require(['underscore', 'plugins/d3_sparkline'], function(_, d3Sparkline) {\n\n    function UsageFetcher(container) {\n        this.page_size = 10;  // Results per query\n        this.container = container;\n        this.family = this.container.data('family') || 4;\n        this.scope = this.container.data('scope');\n        this.feedbackContainer = $('#subnet-matrix-feedback');\n        this.color_mapping = {\n            80: 'usage-high',\n            50: 'usage-medium',\n            10: 'usage-low',\n            0: ' usage-vlow'\n        };\n        this.popoverTemplateV4 = _.template(\n            '<h5><%= heading %></h5>' +\n                '<p>Active IPs: <%= active %> (of max <%= max %>)<br>' +\n                'Usage: <%= usage %>%<br>' +\n                '<% if (vlan_id) { %>VLAN: <%= vlan_id %><br><% } %>' +\n                '<% if (net_ident) { %>netident: <%= net_ident %><br><% } %></p>' +\n                '<a href=\"<%= url_machinetracker %>\" title=\"<%= title_machinetracker %>\">' +\n                '<%= linktext_machinetracker %></a><br>' +\n                '<a href=\"<%= url_report %>\" title=\"<%= title_report %>\">' +\n                '<%= linktext_report %></a><br>' +\n                '<a href=\"<%= url_vlan %>\" title=\"<%= title_vlan %>\">' +\n                '<%= linktext_vlan %></a>'\n        );\n        this.popoverTemplateV6 = _.template(\n            '<h5><%= heading %></h5>' +\n                '<p>Active IPs: <%= active %><br>' +\n                '<% if (vlan_id) { %>VLAN: <%= vlan_id %><br><% } %>' +\n                '<% if (net_ident) { %>netident: <%= net_ident %><br><% } %></p>' +\n                '<a href=\"<%= url_machinetracker %>\" title=\"<%= title_machinetracker %>\">' +\n                '<%= linktext_machinetracker %></a><br>' +\n                '<a href=\"<%= url_report %>\" title=\"<%= title_report %>\">' +\n                '<%= linktext_report %></a><br>' +\n                '<a href=\"<%= url_vlan %>\" title=\"<%= title_vlan %>\">' +\n                '<%= linktext_vlan %></a>'\n        );\n    }\n\n    UsageFetcher.prototype = {\n\n        /** Fetch the usages for all elements */\n        fetchUsage: function(nextUrl) {\n            var self = this;\n            var url = nextUrl || this.getUrl();\n            var request = $.getJSON(url);\n            request.done(function(data) {\n                if (data.next) {\n                    self.fetchUsage(data.next);\n                }\n                self.handleData(data);\n            });\n            request.fail(function() {\n                self.feedbackContainer.html('Some or all of the prefix usage data could not be loaded. If you want to try again, you must reload the page.');\n                self.feedbackContainer.removeClass('hidden');\n            });\n        },\n\n        getUrl: function() {\n            var params = ['page_size=' + this.page_size,\n                          'scope=' + encodeURIComponent(this.scope)];\n            var query = params.join('&');\n            return NAV.urls.api_prefix_usage_list + '?' + query;\n        },\n\n        /** Handles the responsedata */\n        handleData: function(data) {\n            // For each result, modify the cell based on the result data\n            for (var i = 0, l = data.results.length; i < l; i++) {\n                var result = data.results[i];\n                var $element = this.container.find('[data-netaddr=\"' + result.prefix + '\"]');\n\n                if (this.is_v4()) {\n                    this.modifyV4Cell($element, result);\n                } else {\n                    this.modifyV6Cell($element, result);\n                }\n                $element.addClass('has-loaded');\n            }\n        },\n\n        modifyV4Cell: function($element, result) {\n            // Add correct class based on usage\n            $element.removeClass(this.getColorClasses).addClass(this.getClass(result));\n            if ($element.attr('colspan') > 4) {\n                // Add link and text for usage if colspan is large enough\n                const triggerElement = $element.find('[aria-haspopup]');\n                triggerElement.append(this.usageString(result));\n            }\n            this.createPopoverText($element, this.popoverTemplateV4, result);\n        },\n\n        modifyV6Cell: function($element, result) {\n            $element.attr('style', 'background-color: ' + this.getIpv6Color(result));\n            this.createPopoverText($element, this.popoverTemplateV6, result);\n        },\n\n\n        /** Remove the color related classes */\n        getColorClasses: function(index, classString) {\n            return classString.split(/\\s+/).filter(function(klass) {\n                return klass.match(/^(subnet|usage)/);\n            }).join(' ');\n        },\n\n\n        /** Returns correct css-class based on usage */\n        getClass: function(result) {\n            var values = Object.keys(this.color_mapping).map(Number).sort();\n            values.reverse();\n            for (var i = 0; i < values.length; i++) {\n                var value = values[i];\n                if (result.usage >= value) {\n                    return this.color_mapping[value];\n                }\n            }\n\n            return 'subnet-other';\n        },\n\n\n        createPopoverText: function($element, template, data) {\n            var text = template({\n                heading: data.prefix,\n                active: data.active_addresses,\n                max: data.max_hosts,\n                usage: data.usage.toFixed(1),\n                url_machinetracker: data.url_machinetracker,\n                net_ident: data.net_ident,\n                vlan_id: data.vlan_id,\n                title_machinetracker: \"View active addresses in MachineTracker\",\n                linktext_machinetracker: \"View active addresses\",\n                url_report: data.url_report,\n                title_report: \"View report for \" + data.prefix,\n                linktext_report: \"View report\",\n                url_vlan: data.url_vlan,\n                title_vlan: \"View vlan info for related vlan\",\n                linktext_vlan: \"View vlan info\"\n            });\n            const popoverContent = $element.find('.popover-content');\n            popoverContent.html(text);\n        },\n\n\n        /** String used for displaying usage */\n        usageString: function(data) {\n            return '(' + data.usage.toFixed(0) + '%' + ')';\n        },\n\n\n        is_v4: function() {return this.family === 4;},\n        is_v6: function() {return this.family === 6;},\n\n\n        doubleLog: function(count) {\n            return Math.log(Math.log(count + 1) + 1);\n        },\n\n\n        /** Returns a color based on active addresses using a mysterious formula */\n        getIpv6Color: function(result) {\n            if (result.active_addresses === 0) {\n                return \"#CCC\";\n            }\n            var smallNumber1 = this.doubleLog(result.active_addresses);\n            var smallNumber2 = this.doubleLog(Math.pow(2, 64));\n            var new_color = 100 - parseInt(100 * smallNumber1 / smallNumber2);\n            return \"hsl(200,100%,\" + new_color + \"%)\";\n        }\n\n    };\n\n\n    /**\n     * Handler for adding and manipulating cell popovers\n     */\n    function PopoverHandler(container) {\n        this.container = container;\n    }\n\n    PopoverHandler.prototype = {\n        addListeners: function() {\n            const self = this;\n            // When a cell is clicked, adjust the popover position and add sparkline if needed\n            this.container.on('click', function(event) {\n                const $cell = event.target.nodeName === 'TD' ? $(event.target) : $(event.target).closest('td');\n                self.adjustPopoverPosition($cell);\n                self.addSparkline($cell);\n            });\n        },\n\n        /**\n         * Adjust the position of the cell popover if it would go off screen\n         * @param cell\n         */\n        adjustPopoverPosition: function (cell) {\n            const popover = cell.find('.popover');\n            const popoverContent = cell.find('.popover-content');\n            const rect = popoverContent[0].getBoundingClientRect();\n            if (rect.right > window.innerWidth) {\n              popover[0].dataset.align = \"end\";\n            }\n        },\n\n        /**\n         * Add sparklines to popovers.\n         */\n        addSparkline: function($target) {\n            const self = this;\n            const $popoverContent = $target.find('.popover-content').first();\n\n            if ($popoverContent.find('.usage-sparkline').length === 0) {\n                var request = $.getJSON($target.data('url'));\n                var sparkContainer = $('<div class=\"usage-sparkline\">&nbsp;</div>');\n                sparkContainer.appendTo($popoverContent);\n\n                request.done(function(response) {\n                    if (response.length > 0) {\n                        var data = response[0],\n                            dataPoints = data.datapoints.map(function(point) {\n                                return [point[1], point[0]];\n                            });\n\n                        d3Sparkline.line(sparkContainer, dataPoints, {\n                            tooltipFormatter: self.formatter,\n                            width: '100%'\n                        });\n                    } else {\n                        sparkContainer.html('No data from Graphite');\n                    }\n                });\n\n                request.fail(function() {\n                    sparkContainer.html('Error fetching data from Graphite');\n                });\n            }\n        },\n\n        /**\n         * Formatter for sparkline tooltip\n         */\n        formatter: function(data) {\n            const date = new Date(data.x * 1000).toLocaleString();\n            return '<div class=\"jqsfield\"><span style=\"color:' + data.color + '\">&#9679</span> ' + data.y + '<br/> ' + date + '</div>';\n        }\n\n    };\n\n\n    // Initialize stuff on page load\n    $(function() {\n        const $container = $('#subnet-matrix');\n        if ($container.length) {\n            const popoverHandler = new PopoverHandler($container);\n            popoverHandler.addListeners();\n            const fetcher = new UsageFetcher($container);\n            fetcher.fetchUsage();\n        }\n    });\n\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/syslogger.js",
    "content": "require([\n    \"plugins/table_utils\",\n    \"plugins/tab_navigation\",\n    \"plugins/jquery_ui_helpers\",\n    \"spin\",\n    \"jquery\",\n    \"jquery-ui\",\n    \"datatables\",\n    \"dt_config\"\n], function (TableUtil, TabNavigation, JUIHelpers, Spinner) {\n\n    var mainTabsSelector = '#loggerinfotabs';\n\n    var opts = {\n        lines: 9, // The number of lines to draw\n        length: 16, // The length of each line\n        width: 9, // The line thickness\n        radius: 21, // The radius of the inner circle\n        corners: 1, // Corner roundness (0..1)\n        rotate: 0, // The rotation offset\n        color: '#000', // #rgb or #rrggbb\n        speed: 1, // Rounds per second\n        trail: 60, // Afterglow percentage\n        shadow: true, // Whether to render a shadow\n        hwaccel: true, // Whether to use hardware acceleration\n        className: 'spinner', // The CSS class to assign to the spinner\n        zIndex: 2e9, // The z-index (defaults to 2000000000)\n        top: 'auto', // Top position relative to parent in px\n        left: 'auto' // Left position relative to parent in px\n    };\n\n    $.fn.spin = function(opts) {\n        this.each(function() {\n            var $this = $(this),\n                data = $this.data();\n\n            if (data.spinner) {\n                data.spinner.stop();\n                delete data.spinner;\n            }\n            if (opts !== false) {\n                data.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this);\n            }\n        });\n        return this;\n    };\n\n    $(document).ready(function () {\n        if ($(mainTabsSelector).length != 0) {\n            addMainTabs();\n        }\n    });\n\n    function addMainTabs() {\n        var tabconfig = {\n            beforeLoad: JUIHelpers.cacheRequest,\n            load: eventLoadingComplete\n        };\n        var tabs = $(mainTabsSelector).tabs(tabconfig);\n        tabs.show();\n        TabNavigation.add(mainTabsSelector);\n    }\n\n    /* Enrich tables with dataTables module */\n    function enrich_tables(tables, extra_opts) {\n        var dt_config = {\n            bAutoWidth: false,\n            bFilter: true,\n            bInfo: true,\n            bLengthChange: false,\n            bPaginate: false,\n            bSort: true\n        };\n        if (extra_opts) {\n            dt_config.update(extra_opts);\n        }\n        tables.dataTable(dt_config);\n    }\n\n    function stripDomainSuffixOrigin(dom, suffixes) {\n        dom.each(function (index, option) {\n            for (var i = 0; i < suffixes.length; i++) {\n                var suffix = suffixes[i];\n\n                if (option.value && option.value.indexOf(suffix) !== -1) {\n                    $(option).text(option.value.slice(0, option.value.length-suffix.length));\n                } else if (option.tagName.toLowerCase() == 'td' && option.innerHTML && option.innerHTML.indexOf(suffix) !== -1) {\n                    $(option).html(option.innerHTML.slice(0, option.innerHTML.length-suffix.length));\n                } else if (option.text && option.text.indexOf(suffix) !== -1) {\n                    $(option).text(option.text.slice(0, option.text.length-suffix.length));\n                }\n            }\n        });\n    }\n\n    function eventLoadingComplete(event, ui) {\n        if ($(ui.tab).text().trim() === 'Search') {\n            var suffixes = JSON.parse($('#domain_strip').text());\n            stripDomainSuffixOrigin($('#id_origin option'), suffixes);\n            updateFormFromRequestArguments();\n            attachButtonListeners();\n        }\n    }\n\n    function attachButtonListeners() {\n        $('#syslog_search_form button').on('click', function (event) {\n            event.preventDefault();\n            searchSyslog($(this).data('target'));\n        });\n    }\n\n    function checkDataAndUpdateSelection(dataTarget, data) {\n        var update_target = $('#id_'+dataTarget+' option');\n        for (var i = 0; i < update_target.length; i++) {\n            var select_box = update_target[i];\n            if (select_box.value === data) {\n                $(select_box).attr('selected', 'selected');\n                break;\n            }\n        }\n    }\n\n    function setSelectedOption(name, field) {\n        var options = $('#id_'+name+' option');\n        for (var i = 0; i < options.length; i++) {\n            var option = options[i];\n            if (option.value  && option.value.trim() === field.trim()) {\n                $(option).prop('selected', 'selected');\n                break;\n            }\n        }\n    }\n\n    function convertToBoolean(value) {\n        if (!value || value === 'undefined') return false;\n\n        if (typeof value === 'string') {\n            switch (value.toLowerCase()) {\n                case 'true':\n                case 'yes':\n                case '1':\n                case 'on':\n                    return true;\n                case 'false':\n                case 'no':\n                case '0':\n                case 'off':\n                    return false;\n            }\n        }\n        return Boolean(value);\n    }\n\n    function setSelectedValue(name, field) {\n        $('#id_'+name).val(decodeURIComponent((field.trim()).replace(/\\+/g, '%20')));\n    }\n\n    function setSelectedCheckbox(name, field) {\n        if (convertToBoolean(field)) {\n            $('#id_'+name).attr('checked', (field));\n        }\n    }\n\n    function updateFormFromRequestArguments() {\n        var request = {};\n        var pairs = location.search.substring(1).split('&');\n        for (var i = 0; i < pairs.length; i++) {\n            var pair = pairs[i].split('=');\n            request[pair[0]] = pair[1];\n        }\n\n        if (request.timestamp_from) { setSelectedValue('timestamp_from', request.timestamp_from); }\n        if (request.timestamp_to) { setSelectedValue('timestamp_to', request.timestamp_to); }\n        if (request.priority) { setSelectedOption('priority', request.priority); }\n        if (request.facility) { setSelectedOption('facility', request.facility); }\n        if (request.mnemonic) { setSelectedOption('mnemonic', request.mnemonic); }\n        if (request.origin) { setSelectedOption('origin', request.origin); }\n        if (request.category) { setSelectedOption('category', request.category); }\n        if (request.show_log) { setSelectedCheckbox('show_log', request.show_log); }\n    }\n\n    function showLogIfEnoughFilteringEnabled() {\n        var matches = {};\n        $('#syslog_search_form select option:selected').each(function (index, value) {\n            if ($(value).val()) {\n                matches[$(value).parent().attr('name')] = true;\n            }\n        });\n\n        if ((matches.facility && matches.priority && matches.mnemonic) ||\n            (matches.origin && matches.priority)) {\n            showLog();\n        }\n    }\n    function showLog() {\n        $(\"#id_show_log\").attr('checked', 'checked');\n    }\n\n    function searchSyslog(target) {\n        $(\"#syslog_loader\").spin(opts);\n        $.get(target, $(\"#syslog_search_form\").serialize(), function (data) {\n            $('#syslog_search').html(data);\n            var suffixes = JSON.parse($('#domain_strip').text());\n            stripDomainSuffixOrigin($('#id_origin option'), suffixes);\n            stripDomainSuffixOrigin($('.syslog_origin'), suffixes);\n\n            $('.logger_search_results a').on('click', function (event) {\n                event.preventDefault();\n                var eventTarget = event.target;\n                var update_target;\n                var data = $(eventTarget).data();\n\n                if (data.origin) {\n                    checkDataAndUpdateSelection('origin', data.origin);\n                }\n                if (data.facility) {\n                    checkDataAndUpdateSelection('facility', data.facility);\n                }\n                if (data.mnemonic) {\n                    checkDataAndUpdateSelection('mnemonic', data.mnemonic);\n                }\n                if (data.priority) {\n                    checkDataAndUpdateSelection('priority', data.priority);\n                }\n                if (data.show_log) {\n                    showLog();\n                } else {\n                    showLogIfEnoughFilteringEnabled();\n                }\n                searchSyslog(target);\n\n            });\n            attachButtonListeners();\n        }).fail(function (data) {\n                $('.results').html(\"<p>Failed to load search results, please try again</p>\");\n        }).always(function () {\n                $(\"#syslog_loader\").spin(false);\n                enrich_tables($('.logger_search_results table.listtable.log'));\n        });\n    }\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/threshold.js",
    "content": "require(['spin', 'jquery-ui'], function (Spinner) {\n    /* The global variable metric is set in the base template of the threshold page */\n\n    var $inputElement = $('#id_target'),\n        $rawButton = $('#id_raw'),\n        $refreshButton = $('#refresh-graph'),\n        $dataElement = $inputElement.parents('.dataelement'),\n        metric = $dataElement.attr('data-metric'),\n        $metricGraph = $('.metricGraph'),\n        fetching = false,\n        spinner = new Spinner();\n\n    $(function () {\n        $inputElement.autocomplete(\n            {\n                'delay': 300,\n                'minLength': 3,\n                'source': function(query, callback) {\n                    var url = $dataElement.attr('data-url');\n                    $.getJSON(url, query, function(data) {\n                        callback(data.items);\n                    });\n                },\n                'select': handleSelect\n            }\n        );\n\n        /* Prevent form submission on enter, draw graph instead */\n        $inputElement.keydown(function (event) {\n            if (event.which === 13) {\n                event.preventDefault();\n                displayMetricInfo($inputElement.val());\n            }\n        });\n\n        if (metric) {\n            displayMetricInfo(metric);\n        }\n\n        /* Redraw graph when raw checkbox is clicked */\n        $rawButton.on('click', function () {\n            displayMetricInfo($inputElement.val());\n        });\n\n        /* Redraw graph when refreshbutton is clicked */\n        $refreshButton.on('click', function () {\n            displayMetricInfo($inputElement.val());\n        });\n    });\n\n    function handleSelect(event, ui) {\n        if (ui.item.expandable) {\n            window.setTimeout(\n                function() {\n                    $inputElement.autocomplete('search', ui.item.value + '.');\n                }, 0);\n        } else {\n            displayMetricInfo(ui.item.value);\n        }\n    }\n\n    function displayMetricInfo(metric) {\n        if (fetching) {\n            return;\n        }\n        fetching = true;\n        $metricGraph.empty();\n        startSpinner();\n        var image = new Image();\n        var url = $dataElement.attr('data-renderurl') + '?metric=' + encodeURIComponent(metric);\n        if ($rawButton.prop('checked')) {\n            url += '&raw=true';\n        }\n        image.src = url;\n        image.onload = function () {\n            stopSpinner();\n            $(image).appendTo($metricGraph);\n            fetching = false;\n        };\n        image.onerror = function () {\n            stopSpinner();\n            $metricGraph.append('<span class=\"alert-box alert\">Error loading graph</span>');\n            fetching = false;\n        };\n    }\n\n    function startSpinner() {\n        $metricGraph.addClass('spinContainer');\n        spinner.spin($metricGraph.get(0));  // Remember that spin does not accept jquery objects\n    }\n\n    function stopSpinner() {\n        spinner.stop();\n        $metricGraph.removeClass('spinContainer');\n    }\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/watchdog.js",
    "content": "require([], function () {\n\n    /** Adds click handler on the status test labels */\n    function addLabelClickHandlers() {\n        $('#watchdog-tests').on('click', '.label.alert', function (event) {\n            $(event.target).closest('li').find('ul').toggle();\n        });\n    }\n\n\n    /** Fetch and display data for the overview */\n    function populateOverview() {\n        var arpElement = document.getElementById('arp-count'),\n            camElement = document.getElementById('cam-count'),\n            netboxElement = document.getElementById('netbox-count'),\n            dbSizeElement = document.getElementById('db-size');\n            activeAddressesElement = document.getElementById('active-addresses'),\n            serialNumbers = document.getElementById('serial-numbers');\n\n        doRequest(arpElement, '/watchdog/cam_and_arp', function(data) {\n            arpElement.innerHTML = '~' + intComma(data.arp);\n            if (data.oldest_arp) {\n                arpElement.innerHTML += ' <em>(Since ' + data.oldest_arp + ')</em>'\n            }\n            camElement.innerHTML = '~' + intComma(data.cam);\n            if (data.oldest_cam) {\n                camElement.innerHTML += ' <em>(Since ' + data.oldest_cam + ')</em>'\n            }\n        });\n\n        doRequest(dbSizeElement, '/watchdog/db_size/', function(data) {\n            dbSizeElement.innerHTML = data.size;\n        });\n\n        doRequest(netboxElement, '/api/netbox', function(data) {\n            netboxElement.innerHTML = intComma(data.count);\n        });\n\n        doRequest(activeAddressesElement, '/watchdog/active_addresses', function(data) {\n            var activity = intComma(data.active) + ' (' +\n                    intComma(data.ipv4) + '/' +\n                    intComma(data.ipv6) + ')';\n            activeAddressesElement.innerHTML = activity;\n        });\n\n        doRequest(serialNumbers, '/watchdog/serial_numbers', function(data) {\n            serialNumbers.innerHTML = intComma(data.count);\n        });\n\n    }\n\n    /** Do a request and report errors if any */\n    function doRequest(element, url, fun) {\n        var request = $.getJSON(url, fun);\n        var timer = setTimeout(function() {\n            element.innerHTML = 'Still fetching...';\n        }, 10000);\n        request.fail(function() {\n            // This is not terribly important so we do not want a red background or anything\n            element.innerHTML = '<span>Error fetching data</span>';\n        });\n        request.always(function() {\n            clearTimeout(timer);\n        });\n    }\n\n    /** Adds thousand separators to numbers */\n    function intComma(x) {\n        return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    }\n\n\n    /** Do this on page ready */\n    $(function () {\n        addLabelClickHandlers();\n        populateOverview();\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/src/webfront.js",
    "content": "require([\n    'plugins/navlets_htmx_controller',\n    'plugins/fullscreen',\n    'jquery-ui',\n], function (NavletsHtmxController, fullscreen, _,) {\n    'use strict';\n\n    const $navletsContainer = $('#navlets-htmx');\n    const $dashboardNavigator = $('#dashboard-nav');\n\n    /**\n     * Keyboard navigation to switch dashboards\n     */\n    function addDashboardKeyNavigation() {\n        // Find available dashboards\n        var $dashboardButtons = $dashboardNavigator.find('[data-dashboard]');\n        var dashboards = $.map($dashboardButtons, function (element) {\n            return $(element).data('dashboard');\n        });\n        var current = $dashboardNavigator.find('.current a').data('dashboard');\n        var currentIndex = dashboards.indexOf(current);\n\n        var fetchPreviousDashboard = function () {\n            var previousId = dashboards[currentIndex === 0 ? dashboards.length - 1 : currentIndex - 1];\n            $navletsContainer.css('position', 'relative').animate({'left': '4000px'}, function () {\n                window.location = $dashboardButtons.filter('[data-dashboard=\"' + previousId + '\"]').attr('href');\n            });\n        };\n        var fetchNextDashboard = function () {\n            var nextId = dashboards[currentIndex === dashboards.length - 1 ? 0 : currentIndex + 1];\n            $navletsContainer.css('position', 'relative').animate({'right': '4000px'}, function () {\n                window.location = $dashboardButtons.filter('[data-dashboard=\"' + nextId + '\"]').attr('href');\n            });\n        };\n\n        $(document).keydown(function (event) {\n            var ignoreEvent = event.target.form || event.target.nodeName === 'INPUT' || dashboards.length <= 1;\n            if (!ignoreEvent) {\n                switch (event.which) {\n                    case 37: // left\n                        fetchPreviousDashboard();\n                        break;\n                    case 39: // right\n                        fetchNextDashboard();\n                        break;\n                }\n            }\n        });\n\n    }\n\n\n    /**\n     * Droppable dashboard targets\n     */\n    function addDroppableDashboardTargets() {\n        var $dashboardButtons = $dashboardNavigator.find('[data-dashboard]');\n        var timeoutId = 0;  // When dragging the widget between droptargets,\n                            // we don't want to fade in and out all the time\n        $dashboardButtons.not(function () {\n            return $(this).closest('li').hasClass('current');\n        }).droppable({\n            activeClass: \"drop-active\",\n            hoverClass: \"drop-hover\",\n            tolerance: \"pointer\",\n            drop: function (event, ui) {\n                removeDropIndicator(event);\n                var request = $.post(this.dataset.url, {'widget_id': ui.draggable.data('id')});\n                request.done(function () {\n                    // On successful request make it green and add text to indicate success\n                    indicateSuccessMove(event, ui);\n                    ui.draggable.fadeOut(function () {\n                        $(this).remove();\n                    });\n                    setTimeout(function () {\n                        removeDropIndicator(event);\n                    }, 2000);\n                });\n                request.fail(function () {\n                    indicateFailedMove(event, ui);\n                });\n            },\n            over: function (event, ui) {\n                // Tell the user he can drop the widget\n                indicateDrop(event, ui);\n                clearInterval(timeoutId);\n                ui.draggable.fadeTo('fast', 0.5);\n            },\n            out: function (event, ui) {\n                removeDropIndicator(event);\n                timeoutId = setInterval(function () {\n                    ui.draggable.fadeTo('fast', 1);\n                }, 500);\n            }\n        });\n\n        /* Returns the feedback element for this droptarget */\n        function getDropFeedback(event) {\n            return $(event.target).prev();\n        }\n\n        function getWidgetTitle(ui) {\n            return ui.draggable.find('.navlet-title').text();\n        }\n\n        function getDashboardName(event) {\n            return getDropFeedback(event).data('dashboardname');\n        }\n\n        function indicateDrop(event, ui) {\n            var text = 'Move «' + getWidgetTitle(ui) + '» to «' + getDashboardName(event) + '»';\n            getDropFeedback(event).addClass('warning').html(text).removeClass('hidden');\n        }\n\n        function removeDropIndicator(event) {\n            getDropFeedback(event).addClass('hidden').removeClass('alert warning success');\n        }\n\n        function indicateSuccessMove(event, ui) {\n            var text = '«' + getWidgetTitle(ui) + '» moved to «' + getDashboardName(event) + '»';\n            getDropFeedback(event).addClass('success').html(text).removeClass('hidden');\n        }\n\n        function indicateFailedMove(event, ui) {\n            var text = 'Failed to move «' + getWidgetTitle(ui) + '»';\n            getDropFeedback(event).addClass('alert').html(text).removeClass('hidden');\n        }\n\n    }\n\n\n    function createFeedbackElements() {\n        var $dashboardSettingsPanel = $('#dashboard-settings-feedback');\n        var errorElement = $('<small class=\"error\">Name the dashboard</small>');\n\n        function removeAlertbox() {\n            $dashboardSettingsPanel.empty();\n        }\n\n        function addFeedback(text, klass) {\n            klass = klass ? klass : 'success';\n            $dashboardSettingsPanel.empty();\n            $('<div class=\"alert-box\">').addClass(klass).text(text).appendTo($dashboardSettingsPanel);\n        }\n\n        $dashboardSettingsPanel.on('closed', removeAlertbox);\n\n        return {\n            removeAlertbox: removeAlertbox,\n            addFeedback: addFeedback,\n            errorElement: errorElement\n        };\n    }\n\n\n    /** Listnener to show fullscreen */\n    function addFullscreenListener() {\n        $('#widgets-show-fullscreen').on('click', function () {\n            fullscreen.requestFullscreen($navletsContainer.get(0));\n        });\n    }\n\n\n    /** Change display density for widgets and save it */\n    function addDisplayDensityListener() {\n        var preferenceData = {};\n        $('#widgets-layout-compact').on('click', function (event) {\n            $navletsContainer.find('> .row').addClass('collapse');\n            $navletsContainer.addClass('compact');\n            preferenceData[NAV.preference_keys.widget_display_density] = 'compact';\n            $('.widgets-layout-toggler').toggleClass('hide');\n            $.get(NAV.urls.set_account_preference, preferenceData);\n        });\n        $('#widgets-layout-normal').on('click', function (event) {\n            $navletsContainer.find('> .row').removeClass('collapse');\n            $navletsContainer.removeClass('compact');\n            preferenceData[NAV.preference_keys.widget_display_density] = 'normal';\n            $('.widgets-layout-toggler').toggleClass('hide');\n            $.get(NAV.urls.set_account_preference, preferenceData);\n        });\n    }\n\n\n    /** Functions for handling setting of default dashboard */\n    function addDefaultDashboardListener(feedback) {\n        const defaultDashboardContainer = $('#default-dashboard-container'),\n            setDefaultDashboardForm = $('#form-set-default-dashboard'),\n            isDefaultDashboardAlert = $('#is-default-dashboard-alert'),\n            deleteDashboardForm = $('#form-delete-dashboard');\n\n        if (defaultDashboardContainer.data('is-default-dashboard')) {\n            setDefaultDashboardForm.hide();\n        } else {\n            isDefaultDashboardAlert.hide();\n        }\n\n        // Handle UI updates when default dashboard changes\n        document.body.addEventListener('nav.dashboard.defaultChanged', function () {\n            setDefaultDashboardForm.hide();\n            isDefaultDashboardAlert.show();\n            deleteDashboardForm.hide();\n            $dashboardNavigator.find('.fa-star').addClass('hidden');\n            $dashboardNavigator.find('.current .fa-star').removeClass('hidden');\n        });\n    }\n\n\n    /** Functions for creating a new dashboard */\n    function addCreateDashboardListener(feedback) {\n        $('#form-add-dashboard').submit(function (event) {\n            event.preventDefault();\n\n            // Validate dashboard name\n            feedback.errorElement.detach();\n            var nameElement = this.elements[\"dashboard-name\"];\n            if (nameElement.value.length === 0) {\n                feedback.errorElement.insertAfter(nameElement);\n                return;\n            }\n\n            var request = $.post(this.getAttribute('action'), $(this).serialize());\n            request.done(function (response) {\n                window.location = NAV.urls.dashboard_index + response.dashboard_id;\n            });\n        });\n    }\n\n\n    /** Functions for renaming a dashboard */\n    function addRenameDashboardListener(feedback) {\n        var $formRenameDashboard = $('#form-rename-dashboard');\n        $formRenameDashboard.submit(function (event) {\n            event.preventDefault();\n            feedback.removeAlertbox();\n            var self = this;\n            var request = $.post(this.getAttribute('action'), $(this).serialize());\n            request.done(function (responseText) {\n                var newName = self.elements['dashboard-name'].value;\n\n                // Alter name in tab title\n                NAV.setTitle(newName);\n\n                // Alter name in dashboard navigation\n                $('#dashboard-nav').find('.current a span').text(newName);\n\n                feedback.addFeedback(responseText);\n            });\n        });\n    }\n\n\n    /**\n     * Load runner - runs on page load\n     */\n    $(function () {\n        NavletsHtmxController.initialize();\n\n        /**\n         * DASHBOARD related stuff\n         */\n\n        addDashboardKeyNavigation();\n        addDroppableDashboardTargets();\n\n        /**\n         * The following listeners are applied to buttons on the right hand side\n         * when on the dashboard\n         */\n        addFullscreenListener();\n        addDisplayDensityListener();\n\n        /**\n         * The following listeners apply to the dashboard controls, that is\n         * changing dashboards, adding new ones and setting default\n         */\n\n        var feedback = createFeedbackElements();\n        addDefaultDashboardListener(feedback);\n        addCreateDashboardListener(feedback);\n        addRenameDashboardListener(feedback);\n    });\n\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/div/graph-test.js",
    "content": "/** Tests regarding Rickshaw and graphs */\ndefine(['rickshaw-utils'], function (RickshawUtils) {\n\n    describe(\"convertToRickshaw\", function () {\n        var timestamp = 1457425529;\n        var value = 3;\n        var datapoint = [value, timestamp];\n        var result = RickshawUtils.convertToRickshaw(datapoint);\n\n        it(\"should return an object with an x and y member\", function () {\n            assert.notStrictEqual(typeof result.x, 'undefined',\n                'returned object has no x-member');\n            assert.notStrictEqual(typeof result.y, 'undefined',\n                'returned object has no y-member');\n        });\n        it(\"should set x to be the timestamp\", function () {\n            assert.strictEqual(result.x, timestamp);\n        });\n        it(\"should set y to be the value\", function () {\n            assert.strictEqual(result.y, value);\n        });\n    });\n\n    describe(\"filterFunctionCalls\", function () {\n        var singleCall = \"keepLastValue(nav.devices.buick_lab_uninett_no.ipdevpoll.1minstats.runtime)\";\n        var singleCallWithArguments = 'scale(nav.devices.buick_lab_uninett_no.system.sysuptime, 0.00000011574074074074)';\n        var doubleCall = \"alias(scale(nav.devices.buick_lab_uninett_no.system.sysuptime, 0.00000011574074074074), 'buick')\";\n        var singleCallWithTrend = \"keepLastValue(nav.devices.buick_lab_uninett_no) (1 day ago)\";\n        var doubleCallWithTrend = \"alias(scale(nav.devices.buick_lab_uninett_no.system.sysuptime, 0.00000011574074074074), 'buick') (1 week ago)\";\n\n        it(\"should remove a single function call\", function () {\n            var result = RickshawUtils.filterFunctionCalls(singleCall);\n            assert.strictEqual(result, 'nav.devices.buick_lab_uninett_no.ipdevpoll.1minstats.runtime');\n        });\n        it(\"should remove a single function call with arguments\", function () {\n            var result = RickshawUtils.filterFunctionCalls(singleCallWithArguments);\n            assert.strictEqual(result, 'nav.devices.buick_lab_uninett_no.system.sysuptime');\n        });\n        it(\"should remove a single function call with extra\", function () {\n            var result = RickshawUtils.filterFunctionCalls(singleCallWithTrend);\n            assert.strictEqual(result, 'nav.devices.buick_lab_uninett_no (1 day ago)');\n        });\n        it(\"should remove a double function call\", function () {\n            var result = RickshawUtils.filterFunctionCalls(doubleCall);\n            assert.strictEqual(result, 'nav.devices.buick_lab_uninett_no.system.sysuptime');\n        });\n        it(\"should remove a double function call\", function () {\n            var result = RickshawUtils.filterFunctionCalls(doubleCallWithTrend);\n            assert.strictEqual(result, 'nav.devices.buick_lab_uninett_no.system.sysuptime (1 week ago)');\n        });\n        it(\"should not remove other stuff\", function () {\n            var result = RickshawUtils.filterFunctionCalls('buick');\n            assert.strictEqual(result, 'buick');\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/div/numbers-test.js",
    "content": "define([], function () {\n    describe(\"toFixed\", function () {\n        it(\"returns a string\", function() {\n            assert.strictEqual(Number('0.200').toFixed(2), '0.20');\n        });\n    });\n    describe(\"Numbers\", function() {\n        it(\"removes padding zeroes\", function() {\n            assert.strictEqual(+'0.1000', 0.1);\n        });\n        it(\"type is 'number'\", function() {\n            assert.equal(typeof +'1', 'number');\n        });\n        it(\"combines with toFixed for removing padding zeroes\", function() {\n            var number = +'0.2200';\n            assert.strictEqual(+(number.toFixed(3)), 0.22);\n        });\n        it(\"with input 'null' is 0\", function() {\n            assert.strictEqual(Number(null), 0);\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/info/global_dt_filters-test.js",
    "content": "\ndefine(['info/global_dt_filters', 'jquery'], function (plugin) {\n    describe(\"Global DT Filters\", function () {\n        beforeEach(function () {\n            this.trunk_cell = '<span class=\"pointer\" title=\"Allowed vlans: 21,40,130\">Trunk</span>';\n            this.vlan_cell = '130';\n            this.last_seen_cell = '<td title=\"2012-06-11 18:19\" class=\"numeric  \">51 days<span class=\"ui-helper-hidden\" title=\"2012-06-11 18:19:30.491431\"></span></td>';\n\n        });\n\n        describe(\"add filters\", function () {\n            it(\"should throw error if no node to attach filters to\", function () {\n                assert.throw(plugin.add_filters, Error);\n            });\n        });\n\n        describe(\"is_trunk\", function () {\n            it(\"should match trunk string\", function () {\n                assert.isTrue(plugin.is_trunk(this.trunk_cell));\n            });\n\n            it(\"should match case insensitive\", function () {\n                assert.isTrue(plugin.is_trunk('trunk'));\n            });\n\n            it(\"should not match not trunk string\", function () {\n                assert.isFalse(plugin.is_trunk('trun'));\n            });\n        });\n\n        describe(\"extract_date\", function () {\n            it(\"correctly from string\", function () {\n                var d = new Date('2008-02-04');\n                assert.deepEqual(plugin.extract_date('asdajkl2008-02-04 12:12:12').getTime(), d.getTime());\n            });\n\n            it(\"with no date in string should return oldest date\", function () {\n                var d = new Date('1970', '01', '01');\n                assert.equal(plugin.extract_date('asdajkl').getFullYear(), d.getFullYear());\n            });\n        });\n\n        describe(\"day_since\", function () {\n            it(\"yesterday is 1 day since today\", function () {\n                var today = new Date();\n                var yesterday = new Date(today.getTime() - 86400000);\n                assert.strictEqual(plugin.daysince(yesterday), 1);\n            });\n        });\n\n        describe(\"remove keywords\", function () {\n            it(\"should remove one keyword from search\", function () {\n                assert.equal(\n                    plugin.remove_keywords('this $is a test'),\n                    'this a test'\n                );\n            });\n            it(\"should remove several keyword from search\", function () {\n                assert.equal(\n                    plugin.remove_keywords('this $is a $test sentence'),\n                    'this a sentence'\n                );\n            });\n        });\n\n        describe(\"filter\", function () {\n            beforeEach(function () {\n                this.wrapper = document.createElement(\"div\");\n                document.body.appendChild(this.wrapper);\n                this.wrapper.innerHTML = '' + '<input id=\"last_seen\" type=\"text\" size=\"3\" />';\n                this.input = this.wrapper.getElementsByTagName('input')[0];\n                this.data = ['', '', '', this.vlan_cell, this.last_seen_cell, ''];\n                plugin.add_filters(this.input, [], []);\n            });\n            describe(\"last seen\", function () {\n                it(\"with no value should return true\", function () {\n                    assert.isTrue(plugin.filter_last_seen('', this.data, ''));\n                });\n\n                describe(\"more than mode\", function () {\n                    beforeEach(function () {\n                        plugin.set_last_seen_mode('ago');\n                    });\n\n                    it(\"with cellvalue 0 should return true\", function () {\n                        this.input.value = '$days:0';\n                        assert.isTrue(plugin.filter_last_seen('', this.data, ''));\n                    });\n\n                    it(\"with value greater than cellvalue should return false\", function () {\n                        this.input.value = '$days:10000';\n                        assert.isFalse(plugin.filter_last_seen('', this.data, ''));\n                    });\n                    it(\"with value less than cellvalue should return true\", function () {\n                        this.input.value = '$days:3';\n                        assert.isTrue(plugin.filter_last_seen('', this.data, ''));\n                    });\n                });\n\n                describe(\"less than mode\", function () {\n                    beforeEach(function () {\n                        plugin.set_last_seen_mode('since');\n                    });\n\n                    it(\"with cellvalue 0 should return false\", function () {\n                        this.input.value = '$days:0';\n                        assert.isFalse(plugin.filter_last_seen('', this.data, ''));\n                    });\n\n                    it(\"with value greater than cellvalue should return true\", function () {\n                        this.input.value = '$days:10000';\n                        assert.isTrue(plugin.filter_last_seen('', this.data, ''));\n                    });\n                    it(\"with value less than cellvalue should return false\", function () {\n                        this.input.value = '$days:3';\n                        assert.isFalse(plugin.filter_last_seen('', this.data, ''));\n                    });\n                });\n\n\n                describe(\"on trunk\", function () {\n                    beforeEach(function () {\n                        this.data[3] = this.trunk_cell;\n                    });\n                    it(\"with value should return false\", function () {\n                        this.input.value = '$days:3';\n                        assert.isFalse(plugin.filter_last_seen('', this.data, ''));\n                    });\n                    it(\"without value should return true\", function () {\n                        this.input.value = '';\n                        assert.isTrue(plugin.filter_last_seen('', this.data, ''));\n                    });\n                });\n            });\n            describe(\"vlan\", function () {\n                it(\"should not hit on missing vlan\", function() {\n                    this.input.value = '$vlan:as';\n                    assert.isFalse(plugin.filter_vlan('', this.data, ''));\n                });\n                it(\"should hit basic vlan number\", function () {\n                    this.input.value = '$vlan:130';\n                    assert.isTrue(plugin.filter_vlan('', this.data, ''));\n                });\n                it(\"should not hit substring match\", function() {\n                    this.input.value = '$vlan:13';\n                    assert.isFalse(plugin.filter_vlan('', this.data, ''));\n                });\n                it(\"should return true on no vlan\", function () {\n                    this.input.value = '$vlan:';\n                    assert.isTrue(plugin.filter_vlan('', this.data, ''));\n                });\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/info/modulesort-test.js",
    "content": "define([\n    'dt_plugins/modulesort', 'datatables'\n], function (modulesort, DataTables) {\n    describe(\"modulesort\", function () {\n        it(\"basic numeric sort should work\", function () {\n            var l = [2, 1];\n            assert.deepEqual(l.sort(modulesort), [1, 2]);\n        });\n        it(\"basic text sorting should work\", function () {\n            var l = ['john', 'magne', 'bredal'];\n            assert.deepEqual(l.sort(modulesort), ['bredal', 'john', 'magne']);\n        });\n        it(\"basic natural sort should work\", function () {\n            var l = ['Fa2/10', 'Fa2/2', 'Gi3/20', 'Gi3/1'];\n            assert.deepEqual(l.sort(modulesort), ['Fa2/2', 'Fa2/10', 'Gi3/1', 'Gi3/20']);\n        });\n        it(\"should sort correctly on ifnames without prefix\", function() {\n            var l = ['5/10', '5/2', '3/20', '3/1', '4/1'];\n            assert.deepEqual(l.sort(modulesort), ['3/1', '3/20', '4/1', '5/2', '5/10']);\n        });\n        it(\"should sort correctly on cisco interfaces\", function() {\n            var l = ['Fa5/10', 'Fa5/2', 'Gi3/20', 'Gi3/1', 'Te4/1'];\n            assert.deepEqual(l.sort(modulesort), ['Gi3/1', 'Gi3/20', 'Te4/1', 'Fa5/2', 'Fa5/10']);\n        });\n        it(\"should sort correctly on mixed input\", function() {\n            var l = ['ge-3/0/0', 'ge-2/1/0', 'fxp0'];\n            assert.deepEqual(l.sort(modulesort), ['fxp0', 'ge-2/1/0', 'ge-3/0/0']);\n        });\n        it(\"should sort correctly on other modules\", function() {\n            var l = ['ge-3/0/0', 'ge-1/1/0', 'ge-0/1/2'];\n            assert.deepEqual(l.sort(modulesort), ['ge-0/1/2', 'ge-1/1/0','ge-3/0/0']);\n        });\n        it(\"should sort correctly on triple modules\", function() {\n            var l = ['Gi2/5/38', 'Gi2/2/44', 'Te1/3/8', 'Te1/2/2', 'Gi1/1/1'];\n            assert.deepEqual(l.sort(modulesort), ['Gi1/1/1', 'Te1/2/2', 'Te1/3/8', 'Gi2/2/44', 'Gi2/5/38']);\n        });\n        it(\"should sort correctly on mixed modules\", function() {\n            var l = ['ge-0/0/0', 'em0', 'fxp0', 'bcm0', 'ge-1/0/9', 'ge-0/3/0'];\n            assert.deepEqual(l.sort(modulesort), ['bcm0', 'em0', 'fxp0', 'ge-0/0/0', 'ge-0/3/0', 'ge-1/0/9']);\n        });\n        it(\"should sort correctly on input with spaces\", function() {\n            var l = ['ge-0/0/0', 'em0', '  fxp0 ', ' bcm0', 'ge-1/0/9   ', '    ge-0/3/0'];\n            var j = [];\n            var sorted = l.sort(modulesort);\n            for (var i=0; i<sorted.length; i++) {\n                j.push(sorted[i].trim());\n            }\n            assert.deepEqual(j, ['bcm0', 'em0', 'fxp0', 'ge-0/0/0', 'ge-0/3/0', 'ge-1/0/9']);\n        });\n        it(\"should sort correctly on input inside links\", function() {\n            var l = [\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=337/\"> ge-0/2/0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=395/\"> ge-0/0/0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=383/\"> em0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=367/\"> fxp0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=355/\"> bcm0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=361/\"> ge-1/1/0 </a>'\n                ];\n            var j = [\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=355/\"> bcm0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=383/\"> em0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=367/\"> fxp0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=395/\"> ge-0/0/0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=337/\"> ge-0/2/0 </a>',\n                '<a href=\"/ipdevinfo/trd-gw1.uninett.no/interface=361/\"> ge-1/1/0 </a>'\n                ];\n\n            assert.deepEqual(l.sort(modulesort), j);\n        });\n        describe(\"module-asc\", function () {\n            it(\"should be appended to jquery datatable\", function () {\n                assert.isFunction(DataTables.ext.oSort['module-asc']);\n            });\n            it(\"should sort modules ascending\", function () {\n                var l = [1, 2];\n                assert.deepEqual(\n                    l.sort(DataTables.ext.oSort['module-asc']),\n                    [1, 2]\n                );\n            });\n        });\n        describe(\"module-desc\", function () {\n            it(\"should be appended to jquery datatable\", function () {\n                assert.isFunction(DataTables.ext.oSort['module-desc']);\n            });\n            it(\"should sort modules ascending\", function () {\n                var l = [1, 2];\n                assert.deepEqual(\n                    l.sort(DataTables.ext.oSort['module-desc']),\n                    [2, 1]\n                );\n            });\n        });\n\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/info/natsort-test.js",
    "content": "define([\n    'dt_plugins/natsort', 'datatables'\n], function (natsort, DataTable) {\n    describe(\"natsort\", function () {\n        it(\"should sort basic numbers\", function () {\n            var l = [2, 1];\n            assert.deepEqual(l.sort(natsort), [1, 2]);\n        });\n        it(\"should sort equal stuff\", function () {\n            var l = [2, 2];\n            assert.deepEqual(l.sort(natsort), [2, 2]);\n        });\n        it(\"should sort basic text\", function () {\n            var l = ['john', 'magne', 'bredal'];\n            assert.deepEqual(l.sort(natsort), ['bredal', 'john', 'magne']);\n        });\n        it(\"should sort natural sort\", function () {\n            var l = ['Fa2/10', 'Fa2/2', 'Gi3/20', 'Gi3/1'];\n            assert.deepEqual(l.sort(natsort), ['Fa2/2', 'Fa2/10', 'Gi3/1', 'Gi3/20']);\n        });\n        it(\"should sort correctly on ifnames without prefix\", function() {\n            var l = ['5/10', '5/2', '3/20', '3/1', '4/1'];\n            assert.deepEqual(l.sort(natsort), ['3/1', '3/20', '4/1', '5/2', '5/10']);\n        });\n        it(\"should sort correctly on mixed input\", function() {\n            var l = ['ge-3/0/0', 'ge-2/1/0', 'fxp0'];\n            assert.deepEqual(l.sort(natsort), ['fxp0', 'ge-2/1/0', 'ge-3/0/0']);\n        });\n        it(\"should sort correctly on other modules\", function() {\n            var l = ['ge-3/0/0', 'ge-1/1/0', 'ge-0/1/2'];\n            assert.deepEqual(l.sort(natsort), ['ge-0/1/2', 'ge-1/1/0','ge-3/0/0']);\n        });\n        it(\"should sort correctly on triple modules\", function() {\n            var l = ['2/5/3', '2/2/4', '1/3/8', '1/2/2', '1/1/1'];\n            assert.deepEqual(l.sort(natsort), ['1/1/1', '1/2/2', '1/3/8', '2/2/4', '2/5/3']);\n        });\n        describe(\"sort ascending\", function () {\n            it(\"should be appended to jquery datatable\", function () {\n                assert.isFunction(DataTable.ext.oSort['natural-asc']);\n            });\n            it(\"should sort ascending\",function () {\n               var l = [1, 2];\n               assert.deepEqual(\n                   l.sort(DataTable.ext.oSort['natural-asc']),\n                   [1, 2]\n               );\n            });\n        });\n        describe(\"sort descending\", function () {\n            it(\"should be appended to jquery datatable\", function () {\n                assert.isFunction(DataTable.ext.oSort['natural-desc']);\n            });\n            it(\"should sort descending\", function () {\n                var l = [1, 2];\n                assert.deepEqual(\n                    l.sort(DataTable.ext.oSort['natural-desc']),\n                    [2, 1]\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/info/table_info_converter-test.js",
    "content": "define(['info/table_info_converter', 'jquery'], function (converter) {\n    describe(\"table info converter\", function () {\n        beforeEach(function () {\n            this.wrapper = $('<div></div>');\n            var table = $('<table><caption><a href=\"\"> uninett-gw.uninett.no   \\n</a> - blapp</caption><thead></thead><tbody></tbody></table>');\n            $(this.wrapper).append(table);\n\n            var row = $('<tr></tr>');\n            var cell1 = $('<td></td>').html('1');\n            var cell2 = $('<td></td>').html('2');\n            var cell3 = $('<td></td>').html('<img alt=\"3\"/>');\n            var cell4 = $('<td></td>').html(' 4 ');\n            var cell5 = $('<td></td>').html('5');\n            $(row).append(cell1, cell2, cell3, cell4, cell5);\n\n            $(table).find('tbody').append(row, row.clone());\n        });\n        describe(\"create csv\", function () {\n            it(\"should concatenate properly\", function () {\n                var tables = $(this.wrapper).find('table');\n                var result = converter.create_csv(tables);\n                assert.strictEqual(\n                    result,\n                    'uninett-gw.uninett.no;1;2;3;4;5\\nuninett-gw.uninett.no;1;2;3;4;5'\n                );\n            });\n        });\n        describe(\"format rowdata\", function () {\n            it(\"should return a list of the cells values\", function () {\n                var row = $(this.wrapper).find('tbody tr')[0];\n                var result = converter.format_rowdata(row);\n                assert.deepEqual(result, ['1', '2', '3', '4', '5']);\n            });\n            it(\"should create own trim function if it does not exist\", function () {\n                String.prototype.trim = undefined;\n                var row = $(this.wrapper).find('tbody tr')[0];\n                var result = converter.format_rowdata(row);\n                assert.deepEqual(result, ['1', '2', '3', '4', '5']);\n            });\n        });\n        describe(\"find sysname\", function () {\n            it(\"should find correct sysname from caption\", function () {\n                var table = $(this.wrapper).find('table')[0];\n                assert.strictEqual(converter.find_sysname($(table)), 'uninett-gw.uninett.no');\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/karma.conf.buildserver.js",
    "content": "var devConfig = require('./karma.conf.js');\n\nmodule.exports = function (config) {\n    var buildServerConfig = devConfig(config);\n\n    buildServerConfig.set({\n        reporters: ['dots', 'coverage', 'junit'],\n        coverageReporter: {\n          type : 'cobertura',\n          dir : '../../../../../reports/javascript/coverage/'\n        },\n        junitReporter: {\n            outputDir: '../../../../../reports/javascript',\n            outputFile: 'javascript-results.xml',\n                suite: ''\n        },\n        browsers:      ['ChromeHeadlessNoSandbox'],\n        autoWatch:      false,\n        singleRun: true,\n        colors: false,\n\n        customLaunchers: {\n            ChromeHeadlessNoSandbox: {\n                base: 'ChromeHeadless',\n                flags: ['--no-sandbox']\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "python/nav/web/static/js/test/karma.conf.js",
    "content": "module.exports = function (config) {\n    config.set({\n        // base path, that will be used to resolve files and exclude\n        basePath:       '..',\n\n\n        // frameworks to use\n        frameworks:     ['mocha', 'requirejs', 'chai'],\n\n        // list of files / patterns to load in the browser\n        files:          [\n            'require_config.js',\n            'libs/jquery-4.0.0.min.js',\n            {pattern: 'libs/**/*.js', included: false},\n            {pattern: 'src/**/*.js', included: false},\n            {pattern: 'src/**/*.html', included: false},\n            {pattern: 'resources/**/*.js', included: false},\n            {pattern: 'test/resources/**/*.html', included: false},\n            'test/main_test.js',\n            {pattern: 'test/**/*.js', included: false}\n        ],\n\n\n        // list of files to exclude\n        exclude:        [\n\n        ],\n\n        preprocessors: {\n                       'src/**/*.js': 'coverage'\n        },\n\n\n        // test results reporter to use\n        // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'\n        reporters:      ['dots', 'coverage'],\n\n        coverageReporter: {\n          type : 'html',\n          dir : 'coverage/'\n        },\n        junitReporter: {\n          outputFile: 'javascript-results.xml',\n          suite: ''\n        },\n\n\n        // web server port\n        port:           9876,\n\n\n        // cli runner port\n        runnerPort:     9100,\n\n\n        // enable / disable colors in the output (reporters and logs)\n        colors:         true,\n\n\n        // level of logging\n        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG\n        logLevel:       config.LOG_INFO,\n\n\n        // enable / disable watching file and executing tests whenever any file changes\n        autoWatch:      true,\n\n\n        browsers:       ['ChromeHeadless'],\n\n\n        // If browser does not capture in given timeout [ms], kill it\n        captureTimeout: 60000,\n\n\n        // Continuous Integration mode\n        // if true, it capture browsers, run tests and exit\n        singleRun:      false\n    });\n    return config;\n};\n"
  },
  {
    "path": "python/nav/web/static/js/test/main_test.js",
    "content": "var tests = [];\nfor (var file in window.__karma__.files) {\n    if (/-test\\.js$/.test(file)) {\n        tests.push(file);\n    }\n}\n\nrequire.baseUrl = '/base';\nrequire.paths['testResources'] = 'test/resources';\nrequire.deps = tests;\nrequire.callback = window.__karma__.start;\nrequirejs(require);\n"
  },
  {
    "path": "python/nav/web/static/js/test/plugins/checkbox_selector-test.js",
    "content": "define(['plugins/checkbox_selector', 'jquery'], function (CheckboxSelector) {\n    describe(\"Checkbox Selector\", function () {\n        beforeEach(function () {\n            this.table = $('<table><tr><th id=\"blapp\"></th></tr><tr><td><input type=\"checkbox\" class=\"selector\" /><input type=\"checkbox\" class=\"selector\" /></td></tr></table>');\n            $('body').append(this.table);\n            this.cs = new CheckboxSelector($(\"#blapp\", this.table), '.selector');\n            this.cs.add();\n        });\n        it(\"should create a checkbox in the node\", function () {\n            assert.strictEqual(\n                this.table.find('#blapp input[type=checkbox]').length, 1);\n        });\n        it(\"should toggle on all the other checkboxes based on main one\", function () {\n            var mainCheckbox = this.table.find('#blapp input[type=checkbox]');\n            mainCheckbox.click();\n            var toggled = 0;\n            this.table.find('.selector').each(function () {\n                if ($(this).prop('checked')) {\n                    toggled++;\n                }\n            });\n            assert.equal(toggled, 2);\n        });\n        afterEach(function () {\n           $('body').empty();\n        });\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/plugins/multiple_select-test.js",
    "content": "/* TODO: Rewrite during rewrite of multiple-select\ndefine(['plugins/multiple-select',\n    'libs-amd/text!testResources/templates/multipleselect.html',\n    'libs/jquery'],\n    function (MultipleSelect, html) {\n        describe(\"MultipleSelect\", function () {\n            beforeEach(function () {\n                $('body').empty();\n                $('body').html(html);\n                this.mselect = new MultipleSelect();\n            });\n\n            it('should create a list of option elements', function () {\n            assert.equal(this.mselect.choices.length, 3);\n            });\n            it('should find correct parent node on choices', function () {\n                var $node = $('.multiple-select-choices option:first');\n                assert.isTrue(this.mselect.isChoiceNode($node));\n            });\n            it('should find correct parent node on initial', function () {\n                var $node = $('.multiple-select-initial option:first');\n                assert.isFalse(this.mselect.isChoiceNode($node));\n            });\n            describe('move', function () {\n                it('should move option from choice to inital', function () {\n                    var $node = $('.multiple-select-choices option:first');\n                    this.mselect.move($node);\n                    assert.equal(this.mselect.choiceNode.find('option').length, 2);\n                    assert.equal(this.mselect.initialNode.find('option').length, 4);\n                });\n                it('should move option from initial to choice', function () {\n                    var $node = $('.multiple-select-initial option:first');\n                    this.mselect.move($node);\n                    assert.equal(this.mselect.choiceNode.find('option').length, 4);\n                    assert.equal(this.mselect.initialNode.find('option').length, 2);\n                });\n            });\n            describe('sort', function () {\n                it('should sort initial when new node is appended', function () {\n                    var $node = $('.multiple-select-choices option:first');\n                    this.mselect.move($node);\n                    assert.equal($('.multiple-select-initial option:first').val(), '1');\n                });\n                it('should sort choices when new node is appended', function () {\n                    var $node = $('.multiple-select-initial option:first');\n                    this.mselect.move($node);\n                    assert.equal($('.multiple-select-choices option:last').val(), '9');\n                });\n            });\n            describe('redraw', function () {\n                it('should redraw choices sorted on html', function () {\n                    this.mselect.reDraw();\n                    var keys = [];\n                    $(this.mselect.choiceNode).find('option').each(function () {\n                        keys.push(this.value);\n                    });\n                    assert.deepEqual(keys, ['1', '39', '69']);\n                });\n            });\n            describe('search', function () {\n                it('should have a searchfield', function () {\n                    assert(this.mselect.searchfield.length);\n                });\n                it('should skip searches that are too short', function () {\n                    this.mselect.searchfield.val('ab').keyup();\n                    assert.strictEqual(this.mselect.choiceNode.find('option').length, 3);\n                });\n                it('should do searches on third character', function () {\n                    this.mselect.searchfield.val('bla').keyup();\n                    assert.equal(this.mselect.choices.length, 1);\n                });\n                it('should display all results when backspacing to less than 3 chars', function () {\n                    this.mselect.searchfield.val('bla').keyup();\n                    this.mselect.searchfield.val('bl').keyup();\n                    assert.strictEqual(this.mselect.choiceNode.find('option').length, 3);\n                });\n                it('should return matches based on values not keys', function () {\n                    this.mselect.searchfield.val('uninett').keyup();\n                    assert.equal(this.mselect.choiceNode.find('option').length, 2);\n                });\n                it('should return to original after search and move', function () {\n                    this.mselect.searchfield.val('bla').keyup();\n                    this.mselect.move(this.mselect.choices.eq(0));\n                    this.mselect.searchfield.val('').keyup();\n                    assert.equal(this.mselect.choiceNode.find('option').length, 2);\n                });\n            });\n        });\n    }\n);\n*/\n"
  },
  {
    "path": "python/nav/web/static/js/test/plugins/network_tree-test.js",
    "content": "/* TODO: Rewrite to chai\ndefine(['plugins/network_tree'], function (NetworkTree) {\n\n    var Node = NetworkTree.Node;\n    var NodeView = NetworkTree.NodeView;\n    var NodeCollection = NetworkTree.NodeCollection;\n    var Tree = NetworkTree.Tree;\n    var TreeView = NetworkTree.TreeView;\n\n    buster.testCase('Node model', {\n\n        setUp: function () {\n            this.Nodes = {\n                'root': new Node({expandable: true}),\n                'router': new Node({pk:1, type:'router', expandable:true}),\n                'gwport': new Node({pk:2, type:'gwport', expandable:true}),\n                'swport': new Node({pk:3, type:'swport', expandable:true}),\n                'switch': new Node({pk:4, type:'swport', switch_id:1})\n            };\n            var routers = new NodeCollection([this.Nodes.router]);\n            var gwports = new NodeCollection([this.Nodes.gwport]);\n            var swports = new NodeCollection([this.Nodes.swport, this.Nodes.switch]);\n            this.Nodes.root.set('children', routers);\n            this.Nodes.router.set('children', gwports);\n            this.Nodes.gwport.set('children', swports);\n            this.NodeViews = {\n                'rootView': new NodeView({model:this.Nodes.root}),\n                'routerView': new NodeView({model:this.Nodes.router}),\n                'gwportView': new NodeView({model:this.Nodes.gwport}),\n                'swportView': new NodeView({model:this.Nodes.swport}),\n                'switchView': new NodeView({model:this.Nodes.switch})\n            };\n            this.Tree = new Tree({root: this.Nodes.root});\n        },\n        'is defined': function () {\n            assert.defined(NetworkTree);\n        },\n        'nodes have correct urls': function () {\n\n            var n = this.Nodes;\n            var expectedRootUrl = 'routers/';\n            var expectedRouterUrl = 'expand/router/' + n.router.get('pk') + '/';\n            var expectedGWPortUrl = 'expand/gwport/' + n.gwport.get('pk') + '/';\n            var expectedSWPortUrl = 'expand/swport/' + n.swport.get('pk') + '/';\n            var expectedSwitchUrl = 'expand/switch/' + n.switch.get('switch_id') + '/';\n\n            assert.equals(n.root.url, expectedRootUrl);\n            assert.equals(n.router.url, expectedRouterUrl);\n            assert.equals(n.gwport.url, expectedGWPortUrl);\n            assert.equals(n.swport.url, expectedSWPortUrl);\n            assert.equals(n.switch.url, expectedSwitchUrl);\n        },\n        'nodes have correct elementId': function () {\n\n            var n = this.Nodes;\n            var expextedRootId = 'root';\n            var expectedRouterId = 'router-' + n.router.get('pk');\n            var expectedGWPortId = 'gwport-' + n.gwport.get('pk');\n            var expectedSWPortId = 'swport-' + n.swport.get('pk');\n            var expectedSwitchId = 'swport-' + n.switch.get('pk');\n\n            assert.equals(n.root.elementId(), expextedRootId);\n            assert.equals(n.router.elementId(), expectedRouterId);\n            assert.equals(n.gwport.elementId(), expectedGWPortId);\n            assert.equals(n.swport.elementId(), expectedSWPortId);\n            assert.equals(n.switch.elementId(), expectedSwitchId);\n        },\n        'nodes do not expand when not expandable': function () {\n\n            var node = new Node({expandable: false, state: 'collapsed'});\n\n            node.expand();\n            assert.equals(node.get('state'), 'collapsed');\n        },\n        'node do not expand when already processing': function () {\n\n            var node = new Node({expandable: true, state: 'processing'});\n\n            node.expand();\n            assert.equals(node.get('state'), 'processing');\n        },\n        'collapse works': function () {\n\n            var node = new Node({state: 'expanded'});\n\n            node.collapse();\n            assert.equals(node.get('state'), 'collapsed');\n        },\n        'event triggered on successful expand': function () {\n\n            // TODO: Make this work :-/\n//            var node = this.Nodes.root;\n//            var treeView = new TreeView({model: this.Tree});\n//            this.stub(treeView, 'render');\n//\n//            node.expand();\n//            assert.calledOnce(treeView.render);\n            assert(true);\n        },\n        'match works': function () {\n\n            var node = new Node({expandable: true});\n            var nodeView = new NodeView({model: node});\n\n            this.stub(nodeView, 'triggerExpand');\n\n            nodeView.match(node);\n            assert.calledOnce(nodeView.triggerExpand);\n        },\n        'getChildren works': function () {\n\n            var node = new Node({expandable: true});\n            var children = node.getChildren();\n\n            refute.equals(node.get('children'), children);\n            assert.equals(node.url, children.url);\n\n            node.set('children', children);\n            assert.equals(node.get('children'), node.getChildren());\n        },\n        'node-views have templates': function () {\n\n            var v = this.NodeViews;\n            var n = this.Nodes;\n            assert(v.routerView.template(n.router.toJSON()));\n            assert(v.gwportView.template(n.gwport.toJSON()));\n            assert(v.swportView.template(n.swport.toJSON()));\n            assert(v.switchView.template(n.switch.toJSON()));\n        }\n    });\n});\n*/\n"
  },
  {
    "path": "python/nav/web/static/js/test/plugins/rickshaw-utils-test.js",
    "content": "define([\n    'rickshaw-utils',\n    'jquery'], function (plugin) {\n    describe(\"siNumbers\", function () {\n        it(\"should format two-digit numbers right\", function() {\n            assert.equal(plugin.siNumbers(42.0), \"42.00\");\n        });\n\n        it(\"should format milli-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(0.0042), \"4.20 m\");\n        });\n\n        it(\"should format micro-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(0.0000042), \"4.20 µ\");\n        });\n\n        it(\"should format nano-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(0.0000000042), \"4.20 n\");\n        });\n\n        it(\"should format pico-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(0.0000000000042), \"4.20 p\");\n        });\n\n        it(\"should format mega-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(42420000), \"42.42 M\");\n        });\n\n        it(\"should format giga-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(42420000000), \"42.42 G\");\n        });\n\n        it(\"should format tera-scale numbers right\", function() {\n            assert.equal(plugin.siNumbers(42420000000000), \"42.42 T\");\n        });\n\n        it(\"should format negative numbers right\", function() {\n            assert.equal(plugin.siNumbers(-0.0042), \"-4.20 m\");\n        });\n\n    });\n});\n"
  },
  {
    "path": "python/nav/web/static/js/test/require_config.test.js",
    "content": "require.baseUrl = '/base';\nrequire.paths['testResources'] = 'test/resources';\n"
  },
  {
    "path": "python/nav/web/static/js/test/resources/plugins/header_footer_minimize/header.html",
    "content": "<div id=\"header\">\n\n    <div id=\"navlogo\">\n        <h1><a href=\"/\">\n            Network Administration Visualized</a></h1>\n    </div>\n    <div id=\"navbar\">\n        <table>\n            <tr>\n                <td>\n                    <div id=\"navpath\">\n                        <a href=\"/\">Home</a>\n                        &gt;\n                        Netmapdev\n                    </div>\n                </td>\n                <td class=\"spacer\"></td>\n                <td class=\"entry\">\n                    <form action=\"/info/\" method=\"get\">\n                        <input id=\"query\" type=\"text\" name=\"query\" maxlength=\"100\" size=\"12\"/>\n                        <button type=\"submit\">Search</button>\n                    </form>\n                </td>\n\n                <td class=\"entry\">\n                    <a href=\"/preferences\" class=\"navbar\">Preferences</a>\n                </td>\n\n                <td class=\"entry\">\n                    <a href=\"/toolbox\" class=\"navbar\">Toolbox</a>\n                </td>\n\n                <td class=\"entry\">\n                    <a href=\"/useradmin/\" class=\"navbar\">Useradmin</a>\n                </td>\n\n                <td class=\"entry\">\n                    <a href=\"/userinfo/\" class=\"navbar\">Userinfo</a>\n                </td>\n\n\n                <td class=\"entry\">\n\n                    <a class=\"navbar\" href=\"{{ logout }}\">Logout admin</a>\n\n                </td>\n            </tr>\n        </table>\n    </div>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/static/js/test/resources/templates/multipleselect.html",
    "content": "<form>\n<div class=\"multiple-select-container\">\n\n    <div class=\"multiple-select-choices\">\n        <h4>Add devices</h4>\n        <input type=\"search\">\n        <select multiple=\"multiple\" class=\"multiple-select\">\n            <option value=\"1\">absint.online.ntnu.no</option>\n            <option value=\"39\">blaasal-sw.uninett.no</option>\n            <option value=\"69\">buick.lab.uninett.no</option>\n        </select>\n    </div>\n\n    <div class=\"multiple-select-initial\">\n        <h4>Remove devices</h4>\n        <select multiple=\"multiple\" name=\"netboxes\" class=\"multiple-select\">\n            <option value=\"9\">kanari.uninett.no</option>\n            <option value=\"12\">mi6-old.uninett.no</option>\n            <option value=\"34\">ufisa.uninett.no</option>\n        </select>\n    </div>\n\n</div>\n</form>\n"
  },
  {
    "path": "python/nav/web/static/js/treeselect.js",
    "content": "/* Treeselelct JavaScripts for NAV\n *\n * Copyright (C) 2008 Uninett AS\n *\n * This file is part of Network Administration Visualized (NAV).\n *\n * NAV is free software: you can redistribute it and/or modify it under\n * the terms of the GNU General Public License version 3 as published by\n * the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n * more details.  You should have received a copy of the GNU General Public\n * License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n$(function() {\n    $('.treeselect').each(function() {\n        var treeselect = $(this);\n        var search = $('<label>Search <input tyoe=\"text\" /></label>');\n\n        search.find('input').keyup(function() {\n\n            var keywords = $(this).val().split(/\\s+/);\n\n            if (keywords[0] == '') {\n                // Show all options when our search is empty\n                treeselect.find(\"option\").show();\n\n            } else {\n                // Hide all options an show the ones that match our keywords.\n                treeselect.find(\"option\").hide();\n                for (var i = 0; i < keywords.length; i++) {\n                    if(keywords[i]) {\n                        treeselect.find(\"option:contains('\" + keywords[i] + \"')\").show();\n                    }\n                }\n            }\n        });\n\n        // Add our search field :)\n        treeselect.prepend(search);\n    });\n});\n"
  },
  {
    "path": "python/nav/web/status2/__init__.py",
    "content": "\"\"\"The place global constants come to die\"\"\"\n\nSTATELESS_THRESHOLD = 24\nSTATUS_PREFERENCE_PROPERTY = 'status-preferences'\n"
  },
  {
    "path": "python/nav/web/status2/forms.py",
    "content": "#\n# Copyright (C) 2014, 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for the status page\"\"\"\n\nfrom collections import defaultdict\nfrom operator import itemgetter\n\nfrom django import forms\nfrom django.forms.utils import pretty_name\n\nfrom nav.models.event import EventType, AlertType\nfrom nav.models.manage import Organization, Category, NetboxGroup, Location\nfrom nav.web.crispyforms import (\n    NumberField,\n    set_flat_form_attributes,\n    FormRow,\n    FormColumn,\n    FlatFieldset,\n    SubmitField,\n)\nfrom . import STATELESS_THRESHOLD\n\n\nclass Select2Multiple(forms.SelectMultiple):\n    \"\"\"A SelectMultiple widget with select2 styling and full width\"\"\"\n\n    def __init__(self, attrs=None, choices=()):\n        default_attrs = {'class': 'select2', 'style': 'width: 100%'}\n        if attrs:\n            default_attrs.update(attrs)\n        super().__init__(attrs=default_attrs, choices=choices)\n\n\nclass StatusPanelForm(forms.Form):\n    \"\"\"Form representing the status panel options for the user\"\"\"\n\n    stateless = forms.BooleanField(required=False, help_text='Show stateless events')\n    stateless_threshold = NumberField(\n        required=True,\n        initial=STATELESS_THRESHOLD,\n        help_text='Hours back in time to look for stateless events',\n    )\n    on_maintenance = forms.BooleanField(required=False)\n    acknowledged = forms.BooleanField(required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(StatusPanelForm, self).__init__(*args, **kwargs)\n\n        alert_types = get_alert_types()\n\n        self.fields['event_type'] = forms.MultipleChoiceField(\n            choices=get_event_types(), required=False, widget=Select2Multiple()\n        )\n        self.fields['alert_type'] = forms.MultipleChoiceField(\n            choices=alert_types, required=False, widget=Select2Multiple()\n        )\n        self.fields['category'] = forms.MultipleChoiceField(\n            choices=get_categories(), required=False, widget=Select2Multiple()\n        )\n        self.fields['organization'] = forms.MultipleChoiceField(\n            choices=get_organizations(), required=False, widget=Select2Multiple()\n        )\n        self.fields['device_group'] = forms.MultipleChoiceField(\n            choices=get_device_groups(), required=False, widget=Select2Multiple()\n        )\n        self.fields['location'] = forms.MultipleChoiceField(\n            choices=get_locations(), required=False, widget=Select2Multiple()\n        )\n        self.fields['severity'] = forms.MultipleChoiceField(\n            choices=get_severity(), required=False, widget=Select2Multiple()\n        )\n\n        self.fields['not_event_type'] = forms.MultipleChoiceField(\n            choices=get_event_types(), required=False, widget=Select2Multiple()\n        )\n        self.fields['not_alert_type'] = forms.MultipleChoiceField(\n            choices=alert_types, required=False, widget=Select2Multiple()\n        )\n        self.fields['not_category'] = forms.MultipleChoiceField(\n            choices=get_categories(), required=False, widget=Select2Multiple()\n        )\n        self.fields['not_organization'] = forms.MultipleChoiceField(\n            choices=get_organizations(), required=False, widget=Select2Multiple()\n        )\n        self.fields['not_device_group'] = forms.MultipleChoiceField(\n            choices=get_device_groups(), required=False, widget=Select2Multiple()\n        )\n        self.fields['not_location'] = forms.MultipleChoiceField(\n            choices=get_locations(), required=False, widget=Select2Multiple()\n        )\n        self.fields['not_severity'] = forms.MultipleChoiceField(\n            choices=get_severity(), required=False, widget=Select2Multiple()\n        )\n\n        self.fields['status_filters'] = forms.MultipleChoiceField(\n            choices=[\n                (t, pretty_name(t))\n                for t, f in self.fields.items()\n                if isinstance(f, forms.MultipleChoiceField)\n            ],\n            required=False,\n            label='Choose fields to filter status by',\n            widget=Select2Multiple(),\n        )\n\n        column_class = 'medium-6'\n\n        self.attrs = set_flat_form_attributes(\n            form_id='status-form',\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[\n                                self['status_filters'],\n                                FlatFieldset(\n                                    'Status filters',\n                                    fields=[\n                                        self['alert_type'],\n                                        self['category'],\n                                        self['device_group'],\n                                        self['event_type'],\n                                        self['location'],\n                                        self['organization'],\n                                        self['severity'],\n                                        self['not_alert_type'],\n                                        self['not_category'],\n                                        self['not_device_group'],\n                                        self['not_event_type'],\n                                        self['not_location'],\n                                        self['not_organization'],\n                                        self['not_severity'],\n                                    ],\n                                    css_class='field_list',\n                                ),\n                            ],\n                            css_classes=column_class,\n                        ),\n                        FormColumn(\n                            fields=[\n                                self['stateless'],\n                                self['stateless_threshold'],\n                                self['acknowledged'],\n                                self['on_maintenance'],\n                            ],\n                            css_classes=column_class,\n                        ),\n                    ]\n                )\n            ],\n        )\n\n    def clean_stateless_threshold(self):\n        \"\"\"Set default stateless threshold\"\"\"\n        field = 'stateless_threshold'\n        data = self.cleaned_data[field]\n        if not data:\n            data = STATELESS_THRESHOLD\n        return data\n\n\nclass StatusWidgetForm(StatusPanelForm):\n    \"\"\"\n    This form is used in the status widget and is more suitable for a smaller\n    screen size.\n    \"\"\"\n\n    extra_columns = forms.MultipleChoiceField(\n        required=False,\n        choices=(\n            ('room.location', 'Location'),\n            ('room', 'Room'),\n            ('organization', 'Organization'),\n        ),\n    )\n\n    interval = forms.IntegerField(\n        required=True,\n        min_value=1,\n        label='Refresh interval (seconds)',\n        widget=forms.NumberInput(attrs={'min': 1, 'step': 1}),\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(StatusWidgetForm, self).__init__(*args, **kwargs)\n\n        column_class = 'medium-6'\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(fields=[FormColumn(fields=[self[\"interval\"]])]),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"event_type\"]], css_classes=column_class\n                        ),\n                        FormColumn(\n                            fields=[self[\"not_event_type\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"category\"]], css_classes=column_class),\n                        FormColumn(\n                            fields=[self[\"not_category\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"alert_type\"]], css_classes=column_class\n                        ),\n                        FormColumn(\n                            fields=[self[\"not_alert_type\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"organization\"]], css_classes=column_class\n                        ),\n                        FormColumn(\n                            fields=[self[\"not_organization\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"device_group\"]], css_classes=column_class\n                        ),\n                        FormColumn(\n                            fields=[self[\"not_device_group\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"location\"]], css_classes=column_class),\n                        FormColumn(\n                            fields=[self[\"not_location\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"severity\"]], css_classes=column_class),\n                        FormColumn(\n                            fields=[self[\"not_severity\"]], css_classes=column_class\n                        ),\n                    ]\n                ),\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[self[\"stateless\"], self[\"stateless_threshold\"]],\n                            css_classes=column_class,\n                        ),\n                        FormColumn(\n                            fields=[\n                                self[\"acknowledged\"],\n                                self[\"on_maintenance\"],\n                                self[\"extra_columns\"],\n                            ],\n                            css_classes=column_class,\n                        ),\n                    ]\n                ),\n            ],\n            submit_field=SubmitField(value=\"Save\"),\n        )\n\n\ndef get_event_types():\n    \"\"\"Get all event types formatted as choices\"\"\"\n    return [(e.id, e.id) for e in EventType.objects.all().order_by('id')]\n\n\ndef get_alert_types():\n    \"\"\"\n    Creates a tuple structure of the alert types grouped by event types\n    suitable for the choices of a MultipleChoiceField with optgroups\n    [\n      (event_type, [(alert_type, alert_type), (alert_type, alert_type)]),\n      (event_type, [(alert_type, alert_type), (alert_type, alert_type)])\n    ]\n\n    \"\"\"\n    alert_types = defaultdict(list)\n    for alert_type in AlertType.objects.all():\n        alert_types[alert_type.event_type_id].append((alert_type.name, alert_type.name))\n\n    return sorted(alert_types.items(), key=itemgetter(0))\n\n\ndef get_categories():\n    \"\"\"Get all categories formatted as choices\"\"\"\n    return [(c.id, c.id) for c in Category.objects.all()]\n\n\ndef get_organizations():\n    \"\"\"Get all organizations formatted as choices\"\"\"\n    return [(o.id, o.id) for o in Organization.objects.all()]\n\n\ndef get_device_groups():\n    \"\"\"Get all device groups formatted as choices\"\"\"\n    return [(n.id, n.id) for n in NetboxGroup.objects.all()]\n\n\ndef get_locations():\n    \"\"\"Gets all locations formatted as choices\"\"\"\n    return [\n        (location.id, f\"{location.id} ({location.aliases_string})\")\n        if location.aliases\n        else (location.id, location.id)\n        for location in Location.objects.all()\n    ]\n\n\ndef get_severity():\n    \"\"\"Gets all severity values formatted as choices\"\"\"\n    return [(i, i) for i in range(1, 6)]\n"
  },
  {
    "path": "python/nav/web/status2/urls.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration for new status tool\"\"\"\n\nfrom django.urls import re_path, path\nfrom nav.web.status2 import views\n\n\nurlpatterns = [\n    path('', views.StatusView.as_view(), name='status2-index'),\n    # XXX: This hits more than just \"save_preferences/\"...\n    re_path(\n        r'^save_preferences/',\n        views.save_status_preferences,\n        name='status2_save_preferences',\n    ),\n    re_path(\n        r'^alert/resolve/', views.handle_resolve_alerts, name='status2_clear_alert'\n    ),\n    re_path(\n        r'^alert/acknowledge/',\n        views.acknowledge_alert,\n        name='status2_acknowledge_alert',\n    ),\n    re_path(\n        r'^alert/put_on_maintenance/',\n        views.put_on_maintenance,\n        name='status2_put_on_maintenance',\n    ),\n    re_path(\n        r'^alert/delete_module_or_chassis/',\n        views.delete_module_or_chassis,\n        name='status2_delete_module_or_chassis',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/status2/views.py",
    "content": "#\n# Copyright (C) 2014, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"NAV status app views\"\"\"\n\nimport base64\nimport datetime\nimport logging\nimport pickle\n\nfrom django.shortcuts import render\nfrom django.views.generic import View\nfrom django.http import HttpResponse, Http404\nfrom django.urls import reverse\n\nfrom nav.maintengine import check_devices_on_maintenance\nfrom nav.event2 import EventFactory\nfrom nav.models.event import AlertHistory\nfrom nav.models.manage import Netbox, NetboxEntity, Module\nfrom nav.models.msgmaint import MaintenanceTask, MaintenanceComponent\nfrom nav.models.fields import INFINITY\nfrom nav.web.auth.utils import get_account, set_account\nfrom . import forms, STATELESS_THRESHOLD\n\n_logger = logging.getLogger(__name__)\n\ndevice_event = EventFactory('ipdevpoll', 'eventEngine', 'deviceState')\n\n\nclass StatusView(View):\n    \"\"\"Generic Status view\"\"\"\n\n    def get_status_preferences(self):\n        \"\"\"Gets the status preferences for the user on the request\"\"\"\n        account = get_account(self.request)\n        preferences = account.preferences.get(account.PREFERENCE_KEY_STATUS)\n        if preferences:\n            try:\n                if preferences.startswith(\"b'\") and preferences.endswith(\"'\"):\n                    # Status filter was incorrectly saved as a string representation of\n                    # bytes without being decoded (\"b'1234\", instead of \"1234\")\n                    preferences = preferences[2:-1]\n                    account.preferences[account.PREFERENCE_KEY_STATUS] = preferences\n                    account.save()\n                data = base64.b64decode(preferences)\n                set_account(self.request, account, cycle_session_id=False)\n                return pickle.loads(data)\n            except Exception:  # noqa: BLE001 - maybe an old, none-base64 pickle\n                _logger.exception(\n                    \"Ignoring potential legacy status preferences for user %s\",\n                    account.login,\n                )\n                return self.set_default_parameters({})\n\n    @staticmethod\n    def set_default_parameters(parameters):\n        \"\"\"Populates the parameters with the default stateless threshold.\"\"\"\n        if 'stateless_threshold' not in parameters:\n            parameters.update({'stateless_threshold': STATELESS_THRESHOLD})\n\n    def get_permits(self):\n        \"\"\"Get the permits relevant for the page for the account\"\"\"\n        account = get_account(self.request)\n        can_acknowledge_alerts = account.has_perm('can_acknowledge_alert', '')\n        can_clear_alerts = account.has_perm('can_clear_alert', '')\n        can_put_on_maintenance = account.has_perm(\n            'web_access', reverse('maintenance-new')\n        )\n        return {\n            'any': any(\n                [can_acknowledge_alerts, can_clear_alerts, can_put_on_maintenance]\n            ),\n            'can_acknowledge_alerts': can_acknowledge_alerts,\n            'can_clear_alerts': can_clear_alerts,\n            'can_put_on_maintenance': can_put_on_maintenance,\n        }\n\n    def get(self, request):\n        \"\"\"Produces a list view of AlertHistory entries\"\"\"\n        if request.GET:\n            parameters = request.GET.copy()\n            self.set_default_parameters(parameters)\n            form = forms.StatusPanelForm(parameters)\n        else:\n            form = forms.StatusPanelForm(self.get_status_preferences())\n\n        return render(\n            request,\n            'status2/status.html',\n            {\n                'title': 'NAV - Status',\n                'navpath': [('Home', '/'), ('Status', '')],\n                'form': form,\n                'permits': self.get_permits(),\n            },\n        )\n\n\ndef save_status_preferences(request):\n    \"\"\"Saves the status preferences for the logged in user.\"\"\"\n\n    form = forms.StatusPanelForm(request.POST)\n    if form.is_valid():\n        account = get_account(request)\n        datastring = base64.b64encode(pickle.dumps(form.cleaned_data)).decode()\n        account.preferences[account.PREFERENCE_KEY_STATUS] = datastring\n        account.save()\n        set_account(request, account, cycle_session_id=False)\n        return HttpResponse()\n    else:\n        return HttpResponse('Form was not valid', status=400)\n\n\ndef get_alerts_from_request(request, event_type_filter=None):\n    \"\"\"Gets all the alerts from the request by looking for a list of ids\n\n    If no alerts are found, raises 404\n\n    :param event_type_filter: event type ids to filter on\n    :type event_type_filter: list[string]\n    \"\"\"\n    alerts = AlertHistory.objects.filter(pk__in=request.POST.getlist('id[]'))\n    if event_type_filter is not None:\n        alerts = [a for a in alerts if a.event_type.id in event_type_filter]\n    if not alerts:\n        raise Http404\n    return alerts\n\n\ndef handle_resolve_alerts(request):\n    \"\"\"Handles a resolve alerts request\"\"\"\n    if request.method == 'POST':\n        resolve_alerts(get_alerts_from_request(request))\n        return HttpResponse()\n    else:\n        return HttpResponse(status=400)\n\n\ndef resolve_alerts(alerts):\n    \"\"\"Resolves alerts by setting end_time of the alerts to now\"\"\"\n    for alert in alerts:\n        alert.end_time = datetime.datetime.now()\n        alert.save()\n\n\ndef acknowledge_alert(request):\n    \"\"\"Acknowledges all alerts and gives them the same comment\"\"\"\n    if request.method == 'POST':\n        alerts = get_alerts_from_request(request)\n        comment = request.POST.get('comment')\n        account = get_account(request)\n        for alert in alerts:\n            alert.acknowledge(account, comment)\n        return HttpResponse()\n    else:\n        return HttpResponse('Wrong request type', status=400)\n\n\ndef put_on_maintenance(request):\n    \"\"\"Puts the subject of the alerts on maintenance\"\"\"\n    if request.method == 'POST':\n        account = get_account(request)\n        alerts = get_alerts_from_request(request)\n        netboxes = Netbox.objects.filter(pk__in=[x.netbox_id for x in alerts])\n        if not netboxes:\n            return HttpResponse(\"No netboxes found\", status=404)\n\n        default_descr = (\n            \"On maintenance till up again; set from status page by \" + account.login\n        )\n        description = request.POST.get('description') or default_descr\n        candidates = [n for n in netboxes if not is_maintenance_task_posted(n)]\n        if candidates:\n            add_maintenance_task(account, candidates, description)\n            check_devices_on_maintenance()\n        return HttpResponse(status=200)\n    else:\n        return HttpResponse('Wrong request type', status=400)\n\n\ndef delete_module_or_chassis(request):\n    \"\"\"Deletes a module or chassis from the database\n\n    This is done by looking up the device from the alerthistory ids in the\n    request, and deleting all netbox entities and modules corresponding to that\n    device.\n    \"\"\"\n    accepted_event_types = ['moduleState', 'chassisState']\n\n    if request.method == 'POST':\n        alerts = get_alerts_from_request(\n            request, event_type_filter=accepted_event_types\n        )\n        module_ids = []\n        entity_ids = []\n        notify_events = []\n\n        for alert in alerts:\n            if alert.event_type.pk == 'moduleState':\n                module_ids.append(alert.subid)\n                notify_events.append(\n                    (alert.device, alert.netbox, \"deviceDeletedModule\")\n                )\n            elif alert.event_type.pk == 'chassisState':\n                entity_ids.append(alert.subid)\n                notify_events.append(\n                    (alert.device, alert.netbox, \"deviceDeletedChassis\")\n                )\n\n        Module.objects.filter(pk__in=module_ids).delete()\n        NetboxEntity.objects.filter(pk__in=entity_ids).delete()\n        resolve_alerts(alerts)\n\n        for device, netbox, alert_type in notify_events:\n            device_event.notify(\n                device=device,\n                netbox=netbox,\n                alert_type=alert_type,\n            ).save()\n\n        return HttpResponse()\n\n    return HttpResponse('Wrong request type', status=400)\n\n\ndef is_maintenance_task_posted(netbox):\n    \"\"\"Verify that a maintenance task for this netbox is not already posted\"\"\"\n    return MaintenanceComponent.objects.filter(\n        key='netbox',\n        value=str(netbox.id),\n        maintenance_task__state=MaintenanceTask.STATE_ACTIVE,\n        maintenance_task__end_time=datetime.datetime.max,\n    ).count()\n\n\ndef add_maintenance_task(owner, netboxes, description=\"\"):\n    \"\"\"Add a maintenance task with a component for each netbox\"\"\"\n    if not netboxes:\n        return\n\n    task = MaintenanceTask(\n        start_time=datetime.datetime.now(),\n        end_time=INFINITY,\n        description=description,\n        author=owner.login,\n        state=MaintenanceTask.STATE_SCHEDULED,\n    )\n    task.save()\n\n    for netbox in netboxes:\n        component = MaintenanceComponent(\n            maintenance_task=task, key='netbox', value='%d' % netbox.id\n        )\n        component.save()\n"
  },
  {
    "path": "python/nav/web/styleguide.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Renders the styleguide\"\"\"\n\nfrom django.shortcuts import render\nfrom django import forms\n\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    set_flat_form_attributes,\n)\n\n\nclass StyleFormOne(forms.Form):\n    \"\"\"Form displaying use of helptext\"\"\"\n\n    name = forms.CharField(help_text='Your name')\n    address = forms.CharField(help_text='Your address')\n\n\nclass StyleFormTwo(forms.Form):\n    \"\"\"More complex form\"\"\"\n\n    name = forms.CharField(help_text='Your name')\n    address = forms.CharField(help_text='Your address')\n\n    def __init__(self, *args, **kwargs):\n        super(StyleFormTwo, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Address form\",\n                    fields=[\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[self[\"name\"]], css_classes=\"small-6\"\n                                ),\n                                FormColumn(\n                                    fields=[self[\"address\"]], css_classes=\"small-6\"\n                                ),\n                            ]\n                        )\n                    ],\n                )\n            ]\n        )\n\n\ndef styleguide_index(request):\n    \"\"\"Controller for rendering the styleguide\"\"\"\n    context = {'form1': StyleFormOne(), 'form2': StyleFormTwo()}\n\n    return render(request, 'styleguide.html', context)\n"
  },
  {
    "path": "python/nav/web/syslogger/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/syslogger/forms.py",
    "content": "\"\"\"\nforms and functions used for syslogger in NAV\n\"\"\"\n\nfrom django import forms\nfrom nav.models.logger import Priority, LoggerCategory, Origin, LogMessageType\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    FormRow,\n    FormColumn,\n    set_flat_form_attributes,\n)\n\nDATEFORMAT = (\"%Y-%m-%d %H:%M\",)\n\n\ndef _choice_values(model, field_name):\n    \"\"\"\n    Generates a choice_values list to be used with ChoiceField etc.\n    :param model: django model\n    :param field_name: field to aggregate on\n    :return: values_list based on model and field_name\n    \"\"\"\n    choice_list = model.objects.values_list(field_name).distinct()\n    choices = [(choice[0], choice[0]) for choice in choice_list]\n    choices.sort()\n    choices.insert(0, ('', '(All)'))\n    return choices\n\n\nclass LoggerGroupSearchForm(forms.Form):\n    \"\"\"LoggerSearchForm\"\"\"\n\n    facility = forms.ChoiceField(required=False)\n    priority = forms.ChoiceField(required=False)\n    mnemonic = forms.ChoiceField(required=False)\n    origin = forms.ChoiceField(required=False)\n    category = forms.ModelChoiceField(\n        queryset=LoggerCategory.objects.all(), required=False, empty_label='(All)'\n    )\n    timestamp_from = forms.DateTimeField(input_formats=DATEFORMAT)\n    timestamp_to = forms.DateTimeField(input_formats=DATEFORMAT)\n    show_log = forms.BooleanField(required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(LoggerGroupSearchForm, self).__init__(*args, **kwargs)\n        self.fields['facility'].choices = _choice_values(LogMessageType, 'facility')\n        self.fields['priority'].choices = _choice_values(Priority, 'keyword')\n        self.fields['mnemonic'].choices = _choice_values(LogMessageType, 'mnemonic')\n        self.fields['origin'].choices = _choice_values(Origin, 'name')\n\n        self.fields['timestamp_from'].widget.format = DATEFORMAT[0]\n        self.fields['timestamp_to'].widget.format = DATEFORMAT[0]\n\n        for field in ('facility', 'priority', 'mnemonic', 'origin', 'category'):\n            self.fields[field].widget.attrs.update({\"class\": \"select2\"})\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend='Filter',\n                                    fields=[\n                                        FormRow(\n                                            fields=[\n                                                FormColumn(\n                                                    fields=[self['facility']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['priority']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['mnemonic']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['origin']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['category']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['timestamp_from']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['timestamp_to']],\n                                                    css_classes='medium-12',\n                                                ),\n                                                FormColumn(\n                                                    fields=[self['show_log']],\n                                                    css_classes='medium-12',\n                                                ),\n                                            ]\n                                        )\n                                    ],\n                                    template='syslogger/frag-search-form-fieldset.html',\n                                )\n                            ],\n                            css_classes='medium-12',\n                        )\n                    ]\n                )\n            ]\n        )\n"
  },
  {
    "path": "python/nav/web/syslogger/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"syslogger Django URL config\"\"\"\n\nfrom django.urls import path\nfrom nav.web.syslogger import views\n\n\nurlpatterns = [\n    path('', views.index, name='logger_index'),\n    path('search/group/', views.group_search, name='logger_search_group'),\n    path('exceptions/', views.exceptions_response, name='logger_priority_exceptions'),\n    path('errors/', views.errors_response, name='logger_errors'),\n]\n"
  },
  {
    "path": "python/nav/web/syslogger/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"syslogger view definitions\"\"\"\n\nimport json\nimport datetime\nfrom configparser import ConfigParser\n\nfrom django.db.models.aggregates import Count\nfrom django.http import HttpResponseRedirect, HttpResponseForbidden\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\nfrom nav.config import NAV_CONFIG, find_config_file\n\nfrom nav.web.auth.utils import get_account\n\nfrom nav.models.logger import LogMessage\nfrom nav.models.logger import ErrorError\nfrom nav.web.syslogger.forms import LoggerGroupSearchForm\nfrom nav.web.utils import create_title, is_ajax\n\n\nDATEFORMAT = \"%Y-%m-%d %H:%M:%S\"\n\ntry:\n    DOMAIN_SUFFICES = NAV_CONFIG.get(\"DOMAIN_SUFFIX\", \"\").split(\",\")\nexcept IOError:\n    DOMAIN_SUFFICES = []\nDOMAIN_SUFFICES = [s.strip() for s in DOMAIN_SUFFICES]\n\n\ndef _strip_empty_arguments(request):\n    \"\"\"Strips empty arguments and their related operator arguments from the\n    QueryDict in request.GET and returns a new, possibly modified QueryDict.\n\n    \"\"\"\n    query = request.GET.copy()\n\n    deletable = [key for key, value in query.items() if not value.strip()]\n    for key in deletable:\n        del query[key]\n    return query\n\n\ndef _build_context(request):\n    nav_path = [('Home', '/'), ('Syslogger', reverse('logger_index'))]\n    results = []\n    context = {}\n    aggregates = {}\n\n    if request.GET:\n        query_dict = request.GET.copy()\n\n        form = LoggerGroupSearchForm(query_dict)\n        if form.is_valid():\n            results = LogMessage.objects.filter(\n                time__gte=form.cleaned_data['timestamp_from'],\n                time__lte=form.cleaned_data['timestamp_to'],\n            ).select_related()\n            if form.cleaned_data.get('priority', None):\n                priority_keyword = form.cleaned_data['priority']\n                if not isinstance(form.cleaned_data['priority'], list):\n                    priority_keyword = [form.cleaned_data['priority']]\n\n                results = results.filter(newpriority__keyword__in=priority_keyword)\n\n            if form.cleaned_data.get('mnemonic', None):\n                message_type_mnemonic = form.cleaned_data['mnemonic']\n                if not isinstance(form.cleaned_data['mnemonic'], list):\n                    message_type_mnemonic = [form.cleaned_data['mnemonic']]\n\n                results = results.filter(type__mnemonic__in=message_type_mnemonic)\n\n            if form.cleaned_data.get('facility', None):\n                message_type_facility = form.cleaned_data['facility']\n                if not isinstance(form.cleaned_data['facility'], list):\n                    message_type_facility = [form.cleaned_data['facility']]\n\n                results = results.filter(type__facility__in=message_type_facility)\n\n            if form.cleaned_data[\"category\"]:\n                categories = form.cleaned_data['category']\n                if not isinstance(form.cleaned_data['category'], list):\n                    categories = [form.cleaned_data['category']]\n\n                results = results.filter(origin__category__in=categories)\n\n            if 'origin' in form.cleaned_data and form.cleaned_data['origin']:\n                origin_name = form.cleaned_data['origin']\n                if not isinstance(form.cleaned_data['origin'], list):\n                    origin_name = [form.cleaned_data['origin']]\n\n                results = results.filter(origin__name__in=origin_name)\n\n            priorities = results.values('newpriority__keyword').annotate(\n                sum=Count('newpriority__keyword')\n            )\n            priorities_headers = ['Priority']\n            message_types = results.values(\n                'type__facility', 'type__priority__keyword', 'type__mnemonic'\n            ).annotate(sum=Count('type'))\n            message_types_headers = ['Facility', 'Priority', 'State']\n            origins = results.values('origin__name').annotate(sum=Count('origin__name'))\n            origins_headers = ['Origin']\n\n            aggregates.update(\n                {\n                    'Priorities': {\n                        'values': priorities,\n                        'headers': priorities_headers,\n                        'colspan': 1,\n                    }\n                }\n            )\n            aggregates.update(\n                {\n                    'Type': {\n                        'values': message_types,\n                        'headers': message_types_headers,\n                        'colspan': 3,\n                    }\n                }\n            )\n            aggregates.update(\n                {\n                    'Origin': {\n                        'values': origins,\n                        'headers': origins_headers,\n                        'colspan': 1,\n                    }\n                }\n            )\n\n            def _update_show_log_context(value, results):\n                if value:\n                    context.update({'log_messages': results})\n                    context.update({'show_log': value})\n                form.data = form.data.copy()  # mutable QueryDict, yes please\n                form.data['show_log'] = value\n\n            if form.cleaned_data.get('show_log', None):\n                show_log = bool(form.cleaned_data['show_log'])\n                _update_show_log_context(show_log, results)\n\n            if len(priorities) <= 1 and len(origins) <= 1:\n                _update_show_log_context(True, results)\n            elif len(message_types) <= 1 and len(priorities) <= 1:\n                _update_show_log_context(True, results)\n\n    else:\n        initial_context = {\n            'timestamp_from': (datetime.datetime.now() - datetime.timedelta(days=1)),\n            'timestamp_to': datetime.datetime.now(),\n        }\n        form = LoggerGroupSearchForm(initial=initial_context)\n\n    strip_query_args = _strip_empty_arguments(request)\n    strip_query_args = strip_query_args.urlencode() if strip_query_args else \"\"\n\n    context.update(\n        {\n            'form': form,\n            'bookmark': \"{0}?{1}\".format(reverse(index), strip_query_args),\n            'aggregates': aggregates,\n            'timestamp': datetime.datetime.now().strftime(DATEFORMAT),\n            'domain_strip': json.dumps(DOMAIN_SUFFICES),\n            'navpath': nav_path,\n            'title': create_title(nav_path),\n        }\n    )\n    return context\n\n\ndef handle_search(request, _searchform, form_target):\n    account = get_account(request)\n    if not account:\n        return HttpResponseForbidden(\"You must be logged in to access this resource\")\n\n    context = _build_context(request)\n\n    context.update({'form_target': form_target})\n\n    return render(request, 'syslogger/frag-search.html', context)\n\n\ndef index(request):\n    return render(request, 'syslogger/index.html', _build_context(request))\n\n\ndef group_search(request):\n    if not is_ajax(request):\n        return HttpResponseRedirect(reverse(index) + '?' + request.GET.urlencode())\n    return handle_search(request, LoggerGroupSearchForm, reverse(group_search))\n\n\ndef exceptions_response(request):\n    \"\"\"\n    Handler for exception-mode.\n    \"\"\"\n    if not is_ajax(request):\n        return HttpResponseRedirect(reverse(index) + '?' + request.GET.urlencode())\n\n    account = get_account(request)\n    if not account:\n        return HttpResponseRedirect('/')\n    config = ConfigParser()\n    config.read(find_config_file('logger.conf'))\n    options = config.options(\"priorityexceptions\")\n    excepts = []\n    context = {}\n    for option in options:\n        newpriority = config.get(\"priorityexceptions\", option)\n        excepts.append((option, newpriority))\n    context['exceptions'] = excepts\n    context['exceptions_mode'] = True\n    return render(request, 'syslogger/frag-exceptions.html', context)\n\n\ndef errors_response(request):\n    \"\"\"\n    Handler for error-mode.\n    \"\"\"\n    if not is_ajax(request):\n        return HttpResponseRedirect(reverse(index) + '?' + request.GET.urlencode())\n\n    account = get_account(request)\n    if not account:\n        return HttpResponseRedirect('/')\n    context = {}\n    errs = []\n    for err in ErrorError.objects.all():\n        errs.append(err.message)\n    context['errors'] = errs\n    context['errors_count'] = len(errs)\n    context['errors_mode'] = True\n    return render(request, 'syslogger/frag-errors.html', context)\n"
  },
  {
    "path": "python/nav/web/templates/404.html",
    "content": "<!Doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"stylesheet\" href=\"/static/css/nav.css\" />\n\t\t<link rel=\"stylesheet\" href=\"/static/css/nav/errorpages.css\" />\n\t</head>\n\t<body>\n\t\t<div class=\"row hero\">\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<h1>Not found <i class=\"fa fa-thumbs-down\"></i></h1>\n\t\t\t\t<p>Our highly trained beavers did not find anything on {{ request_path }}, sorry.</p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"row info\">\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<p>If this seems wrong to you, we suggest you contact the site administrator.</p>\n\t\t\t</div>\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<a href=\"/\" class=\"button button-medium primary\">Front page</a>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "python/nav/web/templates/500.html",
    "content": "<!Doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"stylesheet\" href=\"/static/css/nav.css\" />\n\t\t<link rel=\"stylesheet\" href=\"/static/css/nav/errorpages.css\" />\n\n\t\t<script src=\"/static/js/require_config.js\"></script>\n    \t<script src=\"/static/js/libs/require-2.0.4.min.js\" data-main='src/main'></script>\n    \t<script>require(['src/500']);</script>\n\t</head>\n\t<body>\n\t\t<div class=\"row hero\">\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<h1>Ouch... <i class=\"fa fa-bug\"></i></h1>\n\t\t\t\t<p>Something went wrong while processing your request. Please try again.</p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"row info\">\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<p>\n\t\t\t\t\tAn email has been sent to the site administrator explaining what went wrong.<br />\n\t\t\t\t\tIf the problem persists, please contact the administrator\n\n{% if current_user_data.account.is_anonymous %}\n\t\t\t\t\t.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n{% else %}\n\t\t\t\t\tand/or report a bug on <a href=\"https://github.com/Uninett/nav/issues\">NAV bugtracker</a>.<br />\n\t\t\t\t\t(Please include the traceback from below in the bug report.)\n\t\t\t\t</p>\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t\t<div class=\"large-12 columns\">\n\t\t\t\t<a id=\"traceback\" href=\"#\">View traceback <i id=\"chevron\" class=\"fa fa-chevron-down\"></i></a>\n\t\t\t\t<div class=\"traceback-info\" style=\"display:none;\">\n\t\t\t\t\t<pre>{{ traceback }}</pre>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"large-12 columns frontpage-button\">\n\t\t\t\t<a href=\"/\" class=\"button button-medium primary\">Front page</a>\n\t\t\t</div>\n\t\t</div>\n\n{% endif %}\n\t</body>\n</html>\n"
  },
  {
    "path": "python/nav/web/templates/_breadcrumbs.html",
    "content": "{% load breadcrumbs %}\n\n{% if navpath %}\n    {% include \"_breadcrumbs_list.html\" with breadcrumbs=navpath %}\n{% else %}\n    {% include \"_breadcrumbs_list.html\" with breadcrumbs=request.path|to_breadcrumbs %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/_breadcrumbs_list.html",
    "content": "{% if breadcrumbs %}\n<ul id=\"nav-breadcrumbs\" class=\"breadcrumbs\">\n    {% for element in breadcrumbs %}\n        {% if element|length > 1 and element.1 %}\n            <li><a href=\"{{ element.1 }}\">{{ element.0 }}</a></li>\n        {% else %}\n            <li class=\"current\"><a href=\"#\">{{ element.0 }}</a></li>\n        {% endif %}\n    {% endfor %}\n</ul>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/account/login.html",
    "content": "{% extends \"account/base_entrance.html\" %}\n{% load i18n allauth %}\n{% block head_title %}NAV Login{% endblock head_title %}\n{% block content %}\n    {% if \"noaccess\" in request.GET %}\n        <div class=\"alert-box alert\">\n            You need to log in to access this resource\n        </div>\n    {% endif %}\n    {% with redirect_url=redirect_field_value %}\n    {% if redirect_url %}\n        <div class=\"alert-box secondary origin\">\n            After successfully logging in, you will be redirected to:<br/>\n            <strong>{{ redirect_url }}</strong>\n        </div>\n    {% endif %}\n    {% endwith %}\n\n    {% url 'account_login' as login_url %}\n    <form method=\"post\" action=\"{{ login_url }}\">\n        {% csrf_token %}\n        {{ redirect_field }}\n        {% for field in form.hidden_fields %}\n            {{ field }}\n        {% endfor %}\n\n        <div class=\"row collapse\">\n            <div class=\"small-1 column\">\n                <span class=\"prefix\"><i class=\"fa fa-user\"></i></span>\n            </div>\n            <div class=\"small-11 column\">\n                {{ form.login }}\n            </div>\n        </div>\n        {% for error in form.login.errors %}\n            <small class=\"error\">{{ error }}</small>\n        {% endfor %}\n\n        <div class=\"row collapse\">\n            <div class=\"small-1 column\">\n                <span class=\"prefix\"><i class=\"fa fa-lock\"></i></span>\n            </div>\n            <div class=\"small-11 column\">\n                {{ form.password }}\n            </div>\n        </div>\n        {% for error in form.password.errors %}\n            <small class=\"error\">{{ error }}</small>\n        {% endfor %}\n\n        <div class=\"login-options\">\n            <label for=\"{{ form.remember.id_for_label }}\">{{ form.remember }} <span class=\"remember-label\">Remember me?</span></label>\n            {% url 'account_reset_password' as password_reset_url %}\n            <a href=\"{{ password_reset_url }}\">{% trans \"Forgot password?\" %}</a>\n        </div>\n\n        {% for error in form.non_field_errors %}\n            <div class=\"alert-box alert\">{{ error }}</div>\n        {% endfor %}\n        <input type=\"submit\" value=\"Log in\" class=\"button expand\"/>\n    </form>\n\n    <div class=\"login-alt-section\">\n        <div class=\"login-divider\">\n            <hr/>\n            <span>{% trans \"or\" %}</span>\n            <hr/>\n        </div>\n        <div class=\"login-alternatives\">\n            {% if PASSKEY_LOGIN_ENABLED %}\n                <button type=\"submit\" form=\"mfa_login\" id=\"passkey_login\" class=\"button expand secondary\">\n                    <i class=\"fa fa-key\"></i> {% trans \"Continue with a passkey\" %}\n                </button>\n            {% endif %}\n            {% if LOGIN_BY_CODE_ENABLED %}\n                <a href=\"{{ request_login_code_url }}\" class=\"button expand secondary\">\n                    <i class=\"fa fa-envelope\"></i> {% trans \"Continue with a sign-in code\" %}\n                </a>\n            {% endif %}\n            {% if SOCIALACCOUNT_ENABLED %}\n                {% include \"socialaccount/snippets/login.html\" with page_layout=\"entrance\" %}\n            {% endif %}\n        </div>\n    </div>\n\n    <a\n        class=\"audit-logging-link\"\n        hx-get=\"{% url 'webfront-audit-logging-modal' %}\"\n        hx-target=\"body\"\n        hx-swap=\"beforeend\"\n    >\n        <small>About audit logging in NAV</small>\n    </a>\n\n    <script>document.getElementById('{{ form.login.id_for_label }}').focus();</script>\n{% endblock content %}\n{% block extra_body %}\n    {{ block.super }}\n    {% if PASSKEY_LOGIN_ENABLED %}\n        {% include \"mfa/webauthn/snippets/login_script.html\" with button_id=\"passkey_login\" %}\n    {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/account/password_change.html",
    "content": "{% extends \"account/base_manage_password.html\" %}\n{% load allauth i18n %}\n{% block head_title %}\n    {% trans \"Change Password\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>\n        {% trans \"Change Password\" %}\n    </h3>\n    {% if request.account.ext_sync %}\n        <p class='alert-box secondary' style=\"width: max-content;\">\n            You are not allowed to change your password from this page. Your\n            account is managed through an external system, known as \"{{ request.account.ext_sync }}\".\n        </p>\n    {% else %}\n        {% url 'account_change_password' as action_url %}\n        {% element form form=form method=\"post\" action=action_url %}\n            {% slot body %}\n                {% csrf_token %}\n                {{ redirect_field }}\n                {% element fields form=form %}\n                {% endelement %}\n            {% endslot %}\n            {% slot actions %}\n                {% element button type=\"submit\" %}\n                    {% trans \"Change Password\" %}\n                {% endelement %}\n                <a href=\"{% url 'account_reset_password' %}\">{% trans \"Forgot Password?\" %}</a>\n            {% endslot %}\n        {% endelement %}\n    {% endif %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/account/signup_closed.html",
    "content": "{% extends \"account/base_entrance.html\" %}\n{% load i18n %}\n{% block head_title %}{% trans \"Sign Up Not Available\" %}{% endblock head_title %}\n{% block content %}\n    <h3>{% trans \"Sign Up Not Available\" %}</h3>\n    <p style=\"margin-bottom: 0.5em\">{% trans \"Sign up is not enabled for this NAV installation.\" %}</p>\n    <p style=\"margin-bottom: 0.5em\">{% trans \"If you already have an account, you may need to connect it to your external identity under\" %}<br><strong>{% trans \"My Account\" %}</strong>.</p>\n    <p>{% trans \"Otherwise, please contact your administrator to get access.\" %}</p>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/alertmsg/base.html",
    "content": "{% block event-content %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertmsg/bgpState/bgpDown.html",
    "content": "{% extends \"alertmsg/base.html\" %}\n{% block event-content %}\n\n    {% with session=alert.get_subject %}\n\n        <a href=\"{{ netbox.get_absolute_url }}\">{{ netbox }}</a>\n\n        BGP session with\n\n        {% with peer=session.get_peer_as_netbox %}\n            {% if peer %}\n                <a href=\"{{ peer.get_absolute_url }}\">\n            {% else %}\n                <a href=\"{% url 'ipdevinfo-details-by-addr' session.peer %}\">\n            {% endif %}\n            {{ session.get_peer_display  }}\n            </a>\n        {% endwith %}\n\n        has transitioned away from <code>established</code> state.\n        The last known state was <code>{{ session.state }}</code>.\n\n    {% endwith %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertmsg/linkState/linkDown.html",
    "content": "{% extends \"alertmsg/base.html\" %}\n{% block event-content %}\n    {% with interface=alert.get_subject %}\n\n        <p>\n        Link is down on interface\n        <a href=\"{{ interface.get_absolute_url }}\">{{ interface.ifname }}\n\n        {% if interface.ifalias %}({{ interface.ifalias }}){% endif %}\n\n        at {{ interface.netbox }}</a>.\n        </p>\n\n        {% if interface.to_netbox %}\n            <p>\n            Connected to\n                {% if interface.to_interface %}\n\n                    interface <a href=\"{{ interface.to_interface.get_absolute_url }}\">{{ interface.to_interface.ifname }}\n                    {% if interface.to_interface.ifalias %}({{ interface.to_interface.ifalias }}){% endif %}\n                    at {{ interface.to_interface.netbox }}</a>.\n\n                {% else %}\n\n                    <a href=\"{{ interface.to_netbox.get_absolute_url }}\">{{ interface.to_netbox }}</a>.\n\n                {% endif %}\n            </p>\n        {% endif %}\n\n    {% endwith %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/_add_expression_operator_help_modal.html",
    "content": "<h5>\n    Operators\n</h5>\n<p>\n    Below are short descriptions for each available operator. Note that for\n    lists only \"equals\" and \"in\" makes sense.\n</p>\n<p>\n    An admin can make every operator available for any matchfield, even the\n    ones that allows for list selection.\n</p>\n<table class=\"vertitable\">\n    <tbody>\n    <tr>\n        <th>Equals</th>\n        <td>\n            Exact match\n        </td>\n    </tr>\n    <tr>\n        <th>Is greater</th>\n        <td>\n            Match field value must be greater than entered value.\n        </td>\n    </tr>\n    <tr>\n        <th>Is greater or equal</th>\n        <td>\n            Match field value must be greater than or equal entered value.\n        </td>\n    </tr>\n    <tr>\n        <th>Is less</th>\n        <td>\n            Match field value must be less than entered value.\n        </td>\n    </tr>\n    <tr>\n        <th>Is less or equal</th>\n        <td>\n            Match field value must be less than or equal entered value.\n        </td>\n    </tr>\n    <tr>\n        <th>Not equals</th>\n        <td>\n            Oposite of equals. Match field value and entered value must not be\n            the same.\n        </td>\n    </tr>\n    <tr>\n        <th>Starts with</th>\n        <td>\n            Match field value must start with entered value. Will also return\n            true if match field and entered value are the same.\n        </td>\n    </tr>\n    <tr>\n        <th>Ends with</th>\n        <td>\n            Match field value must end with entered value. Will also return true\n            if match field and entered value are the same.\n        </td>\n    </tr>\n    <tr>\n        <th>Contains</th>\n        <td>\n            Somewhere in the match field value the entered value must\n            appear. Will also return true if match field and entered value are\n            the same.\n        </td>\n    </tr>\n    <tr>\n        <th>Regexp</th>\n        <td>\n            Enter a regular expression to compare against the match field value.\n        </td>\n    </tr>\n    <tr>\n        <th>Wildcard</th>\n        <td>\n            Same as equals, except you can use wildcards (? or *) to denote\n            \"anything goes here\".\n        </td>\n    </tr>\n    <tr>\n        <th>In</th>\n        <td>\n            Match field value must be one of the selected values. For lists,\n            just select multiple values, for text fields you can separate the\n            different values with space.\n        </td>\n    </tr>\n    </tbody>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/_filter_group_operator_help_modal.html",
    "content": "<h5>Operator help</h5>\n<p>\n    The four operators are in the database represented by to flags, one\n    for «include» and one for «positive». The table below shows how\n    these operators affect the filters added.\n</p>\n<p>\n    Notice that priority affects how the final set will be, as each\n    filter is checked according to it's priority, ie: number 1 first,\n    then number two and so on.\n</p>\n<table class=\"listtable\">\n    <thead>\n    <tr>\n        <th>Operator</th>\n        <th>Include flag</th>\n        <th>Positive flag</th>\n        <th>Description</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Add</td>\n        <td>1</td>\n        <td>1</td>\n        <td>Union in set theory.<br/>Adds all matching alerts to the\n            set.\n        </td>\n    </tr>\n    <tr>\n        <td>Subtract</td>\n        <td>0</td>\n        <td>1</td>\n        <td>Exclusion.<br/>Removes all matching alerts from the\n            set.\n        </td>\n    </tr>\n    <tr>\n        <td>And</td>\n        <td>0</td>\n        <td>0</td>\n        <td>Intersection in set theory.<br/>Removes all alerts but\n            those who are in both the current set and those in the set\n            matched by this filter.\n        </td>\n    </tr>\n    <tr>\n        <td>Add inverse</td>\n        <td>1</td>\n        <td>0</td>\n        <td>Complement of set.<br/>Adds the oposite of whats\n            matched. Ie: with a filter that checks for severity &gt;\n            70, using this operator will check for severity &lt;=\n            70.\n        </td>\n    </tr>\n    </tbody>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/_groups_and_permissions_modal.html",
    "content": "{% load tools %}\n<div class=\"row\">\n    <div class=\"column medium-4\">\n        <h5>Groups you are member of</h5>\n        <ul>\n            {% for group in groups %}\n            <li><em>{{ group.name }}</em><br/>{{ group.description }}</li>\n            {% endfor %}\n        </ul>\n    </div>\n    <div class=\"column medium-4\">\n        <h5>Alerts you have permissions to receive</h5>\n        <ul>\n            {% for filter_group in filter_groups %}\n            <li><em>{{ filter_group.name }}</em><br/>{{ filter_group.description }}</li>\n            {% endfor %}\n        </ul>\n    </div>\n    <div class=\"column medium-4\">\n        <h5>Alert language</h5>\n        <form action=\"{% url 'alertprofiles-language-save' %}\" method=\"post\" class=\"inline-form custom\">\n            {% csrf_token %}\n            {{ language_form.language }}\n            <input type=\"submit\" value=\"Save changes\" class=\"button tiny\"/>\n        </form>\n        <p>\n            <img\n                src=\"{{ STATIC_URL }}images/lys/{{ sms_privilege|yesno:'green,red' }}.png\"\n                alt=\"{{ sms_privilege|yesno:'SMS permissions enabled,SMS permissions disabled'}}\"\n            />\n            You {% if not sms_privilege %}<em>do not</em> {% endif %}have\n            permissions to be alerted by SMS.\n        </p>\n    </div>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/_permissions_help_modal.html",
    "content": "<p>\n  Set which filter groups the different user groups are allowed\n  to receive alerts for.\n</p>\n\n<p>\n  Denying a user group to receive alerts from a certain filter group will\n  not hide that filter group from the interface, so the users of that\n  user group can still add the filter group to their profiles. They\n  still won't receive any alerts that matches that filter group though.\n</p>\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/account_detail.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n<a\n    class=\"right\"\n    hx-get=\"{% url 'alertprofiles-groups-and-permissions' %}\"\n    hx-target=\"body\"\n    hx-swap=\"beforeend\"\n>\n    Groups and permissions\n</a>\n\n{% if active_profile %}\n<h4>Active profile:\n    <a href=\"{% url 'alertprofiles-profile-detail' active_profile.id %}\">\n        {{ active_profile.name }}\n    </a>\n</h4>\n{% include \"alertprofiles/timeperiods.html\" %}\n{% else %}\n<h4>Account details</h4>\n<p>\n    There is no active profile set.\n</p>\n\n<a href=\"{% url 'alertprofiles-profile' %}\" class=\"button small\">\n    Activate an existing one\n</a>\n<a href=\"{% url 'alertprofiles-profile-new' %}\" class=\"button small\">\n    Create a new profile\n</a>\n\n{% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/address_form.html",
    "content": "{% extends \"alertprofiles/base_detail.html\" %}\n\n{% block url_edit %}{% url 'alertprofiles-address-save' %}{% endblock %}\n{% block backnavigation %}\n  <p><a href=\"{% url 'alertprofiles-address' %}\">Back to addresses</a></p>\n{% endblock %}\n\n{% block headercontent %}\n    {{ detail_id|yesno:\"Edit,New\" }} address\n{% endblock %}\n\n{% block filter_content %}{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/address_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block top_links %}\n  <a href=\"{% url 'alertprofiles-address-new' %}\" class=\"button small\">Add address</a>\n{% endblock %}\n\n{% block captioncontent %}\n    Addresses\n{% endblock %}\n\n{% block tablecolspan %}3{% endblock %}\n\n{% block theadcols %}\n    <th>&nbsp;</th>\n\n    <th>\n    {% if order_by == \"address\" %}\n      <a href=\"{% url 'alertprofiles-address' %}?page={{ page_obj.number }}&amp;order_by=-address\">\n        Address\n        <i class=\"fa fa-caret-down\"></i>\n      </a>\n    {% else %}\n      <a href=\"{% url 'alertprofiles-address' %}?page={{ page_obj.number }}&amp;order_by=address\">\n        Address\n        {% if order_by == \"-address\" %}\n        <i class=\"fa fa-caret-up\"></i>\n        {% endif %}\n      </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"type\" %}\n      <a href=\"{% url 'alertprofiles-address' %}?page={{ page_obj.number }}&amp;order_by=-type\">\n        Type\n        <i class=\"fa fa-caret-down\"></i>\n      </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-address' %}?page={{ page_obj.number }}&amp;order_by=type\">\n          Type\n          {% if order_by == \"-type\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n{% endblock %}\n\n{% block tbodycontent %}\n    {% for a in object_list %}\n        <tr>\n            <td><input type=\"checkbox\" name=\"address\" value=\"{{ a.id }}\" /></td>\n            <td>\n                <a href=\"{% url 'alertprofiles-address-detail' a.id %}\">\n                    {% if not a.type.supported %}\n                    <del>{{ a.address }}</del>\n                    {% else %}\n                    {{ a.address }}\n                    {% endif %}\n                </a>\n            </td>\n            <td>\n                {% if not a.type.supported %}\n                    <div class=\"alert-box error with-icon inside-table\">{{ a.type.name }}: No longer supported</div>\n                {% elif a.type.blacklisted_reason %}\n                    <div class=\"alert-box warning inside-table\">{{ a.type.name }} is currently non-functional: {{ a.type.blacklisted_reason }}</div>\n                {% else %}\n                    {{ a.type.name }}\n                {% endif %}\n            </td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/alertprofiles.css\" />\n  <script>\n   require(['src/alertprofiles']);\n  </script>\n{% endblock %}\n\n{% block base_content %}\n\n{% with tool=current_user_data.tools|get_tool:'Alert Profiles' %}\n  {% include 'nav_header.html' %}\n{% endwith %}\n\n\n<div class=\"tabs\">\n    {% block tabs %}\n    <ul>\n        <li class=\"{{ active.overview|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-overview' %}\">Account details</a>\n        </li>\n        <li class=\"{{ active.address|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-address' %}\">Alert addresses</a>\n        </li>\n        <li class=\"{{ active.profile|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-profile' %}\">Profiles</a>\n        </li>\n        <li class=\"{{ active.filter_groups|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-filter_groups' %}\">Filter groups</a>\n        </li>\n        <li class=\"{{ active.filters|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-filters' %}\">Filters</a>\n        </li>\n        <li class=\"{{ active.sms|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'alertprofiles-sms' %}\">My SMS</a>\n        </li>\n\n        {% if request.user.is_admin %}\n            <li class=\"{{ active.matchfields|yesno:\"tabactive,\" }}\">\n                <a href=\"{% url 'alertprofiles-matchfields' %}\">Matchfields</a>\n            </li>\n            <li class=\"{{ active.permissions|yesno:\"tabactive,\" }}\">\n                <a href=\"{% url 'alertprofiles-permissions' %}\">Permissions</a>\n            </li>\n        {% endif %}\n    </ul>\n    {% endblock %}\n\n    <div class=\"tabcontent\">\n\n      {% if current_user_data.messages %}\n        {% for m in current_user_data.messages %}\n          <div class=\"alert-box {{ m.type }}\">{{ m.message }}</div>\n        {% endfor %}\n      {% endif %}\n\n      {% block tabcontent %}\n      {% endblock %}\n\n    </div>\n\n</div>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/base_detail.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n  {% block backnavigation %}{% endblock %}\n\n  <h4>\n    {% block headercontent %}\n      {% if detail_id %}\n        Filter details\n      {% else %}\n        New filter\n      {% endif %}\n    {% endblock %}\n  </h4>\n\n  <form action=\"{% block url_edit %}{% endblock %}\" method=\"post\" >\n    {% include 'custom_crispy_templates/_form_content.html' %}\n\n    {% block form_additional_fields %}\n    {% endblock %}\n\n    {% if owner %}\n      {% if detail_id %}\n        <input type=\"submit\" value=\"Save changes\" class=\"button small\"/>\n      {% else %}\n        <input type=\"submit\" value=\"Save new\" class=\"button small\"/>\n      {% endif %}\n    {% endif %}\n  </form>\n\n  {% if detail_id %}\n\n    {% block filter_content %}\n\n    <div class=\"expressionstable\">\n        {% block expressions %}\n        <h5>\n          {% block expressions_caption_content %}\n          {% endblock %}\n        </h5>\n        <form action=\"{% block url_remove_expression %}{% endblock %}\" method=\"post\">\n            {% csrf_token %}\n            <table class=\"listtable\">\n                <thead>\n                    <tr>\n                    {% block expressions_thead_cols %}\n                    {% endblock %}\n                    </tr>\n                </thead>\n\n                <tbody>\n                {% block expressions_tbody_content %}\n                {% endblock %}\n                </tbody>\n            </table>\n\n            {% if owner%}\n                {% block expressions_extra_fields %}\n                <p>\n                    <input type=\"hidden\" name=\"id\" value=\"{{ detail_id }}\" />\n                    <input type=\"submit\" name=\"delete\" value=\"Delete selected\" class=\"button small secondary\" />\n                </p>\n                {% endblock %}\n            {% endif %}\n        </form>\n        {% endblock expressions %}\n    </div>\n\n    <div class=\"addexpressionform\">\n        <form action=\"{% block url_add_expression %}{% endblock %}\" method=\"post\">\n        {% csrf_token %}\n        {% block addexpression %}\n            <p>\n                <input type=\"hidden\" name=\"id\" value=\"{{ detail_id }}\" />\n                <input type=\"submit\" value=\"Add\" class=\"button small\" />\n            </p>\n        {% endblock addexpression %}\n        </form>\n    </div>\n\n    {% endblock filter_content %}\n\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/base_list.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n\n{% block top_links %}\n{% endblock %}\n\n<form action=\"{{ form_action }}\" method=\"post\">\n  {% csrf_token %}\n\n  <h4>{% block captioncontent %}{% endblock %}</h4>\n\n  <table class=\"listtable\">\n    <thead>\n        <tr>\n        {% block theadcols %}\n            <th></th>\n            <th>Name</th>\n        {% endblock %}\n        </tr>\n    </thead>\n\n    {% if object_list %}\n        <tbody>\n        {% block tbodycontent %}\n        {% endblock %}\n        </tbody>\n    {% endif %}\n\n    {# FIXME colspan=\"0\", replace with block override perhaps? #}\n    <tfoot>\n        <tr>\n            <th colspan=\"{% block tablecolspan %}2{% endblock %}\">\n                {% include \"alertprofiles/paginator.html\" %}\n            </th>\n        </tr>\n    </tfoot>\n</table>\n\n{% block bottom_form %}\n<div>\n    {% block additional_fields %}\n    {% endblock %}\n    <input type=\"submit\" value=\"Delete selected\" class=\"button small secondary\" />\n</div>\n{% endblock %}\n\n</form>\n\n{% block bottom_links %}\n{% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/confirmation_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block top_links %}\n    <p><a href=\"{{ request.META.HTTP_REFERER }}\">Back</a></p>\n{% endblock %}\n\n{% block captioncontent %}\n    Confirm deletion\n{% endblock %}\n\n{% block theadcols %}\n    {{ block.super }}\n    <th>Warnings</th>\n{% endblock %}\n\n{% block tablecolspan %}3{% endblock %}\n\n{% block tbodycontent %}\n    {% for element in object_list %}\n    <tr>\n        <td><input type=\"checkbox\" name=\"element\" value=\"{{ element.id }}\" id=\"elementid_{{ element.id }}\" checked=\"checked\" /></td>\n        <td>\n            <label for=\"elementid_{{ element.id }}\">{{ element.description }}</label>\n        </td>\n        <td>\n            <ul class=\"errorlist\">\n                {% for warning in element.warnings %}\n                    <li>\n                        {{ warning.message }}\n                        {% if warning.link %}\n                            <a href=\"{{ warning.link }}\">View</a>\n                        {% endif %}\n                   </li>\n                {% endfor %}\n            </ul>\n        </td>\n    </tr>\n    {% endfor %}\n{% endblock %}\n\n{% block additional_fields %}\n    {% if perform_on %}\n        <input type=\"hidden\" name=\"perform_on\" value=\"{{ perform_on }}\" />\n    {% endif %}\n    <input type=\"hidden\" name=\"confirm\" value=\"true\" />\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/expression_form.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n  <h4>\n    Add expression\n  </h4>\n\n  <form action=\"{% url 'alertprofiles-filters-saveexpression' %}\" method=\"post\" class=\"custom\">\n    {% csrf_token %}\n    <table class=\"vertitable\">\n      <tbody>\n        <tr>\n          <th>Filter</th>\n          <td>{{ filter.name }}{{ form.filter }}</td>\n        </tr>\n        <tr>\n          <th>Match field</th>\n          <td>{{ matchfield.name }}{{ form.match_field }}</td>\n        </tr>\n        <tr>\n          <th>\n            <label for=\"id_operator\">{{ form.operator.label }}\n              <a\n                  hx-get=\"{% url 'alertprofiles-filters-addexpression-operator-help' %}\"\n                  hx-target=\"body\"\n                  hx-swap=\"beforeend\"\n              >\n                <i class=\"fa fa-info-circle\"></i>\n              </a>\n            </label>\n          </th>\n          <td>{{ form.operator }}</td>\n        </tr>\n        <tr>\n          <th>\n            <label for=\"id_value\">{{ form.value.label }}</label><br />\n          </th>\n          <td>\n            {% if list_limited %}\n              <p>\n                There are more available options than the list_limit\n                permits to show.<br />\n              </p>\n              <p>\n                Showing {{ matchfield.list_limit }} of\n                {{ form.number_of_choices }} available options.\n              </p>\n            {% endif %}\n            <div>\n              {{ form.value }}\n            </div>\n            <div>\n              {# FIXME it's not good practice to trust stuff in the database #}\n              {% if matchfield.value_help %}\n                {{ matchfield.value_help|safe }}\n              {% endif %}\n            </div>\n          </td>\n        </tr>\n        <tr>\n          <th></th>\n          <td><input type=\"submit\" value=\"Save\" class=\"button small\"/></td>\n        </tr>\n      </tbody>\n    </table>\n  </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/filter_form.html",
    "content": "{% extends \"alertprofiles/base_detail.html\" %}\n\n{% block url_edit %}{% url 'alertprofiles-filters-save' %}{% endblock %}\n{% block url_remove_expression %}{% url 'alertprofiles-filters-removeexpression' %}{% endblock %}\n{% block url_add_expression %}{% url 'alertprofiles-filters-addexpression' %}{% endblock %}\n\n{% block backnavigation %}\n  <p><a href=\"{% url 'alertprofiles-filters' %}\">Back to filters</a></p>\n{% endblock %}\n\n{% block expressions_caption_content %}\n  Expressions\n{% endblock %}\n\n{% block expressions_thead_cols %}\n  {% if owner %}\n    <th></th>\n  {% endif %}\n  <th>Field</th>\n  <th>Condition</th>\n  <th>Value</th>\n{% endblock %}\n\n{% block expressions_tbody_content %}\n  {% for e in expressions %}\n    <tr>\n      {% if owner %}\n        <td>\n          <input type=\"checkbox\" name=\"expression\" value=\"{{ e.id }}\" id=\"expressionid_{{ e.id }}\" />\n        </td>\n        <td>\n          <label for=\"expressionid_{{ e.id }}\">{{ e.match_field }}</label>\n        </td>\n      {% else %}\n        <td>{{ e.match_field }}</td>\n      {% endif %}\n\n      <td>{{ e.get_operator_display }}</td>\n\n      {% if e.operator == 11 %}\n        <td><ul class=\"inside\">{{ e.value|unordered_list }}</ul></td>\n      {% else %}\n        <td>{{ e.value }}</td>\n      {% endif %}\n    </tr>\n  {% endfor %}\n{% endblock %}\n\n{% block addexpression %}\n  {% if owner %}\n    <h5>\n      Add another expression to this filter\n        <span class=\"nav-tooltip\">\n            <i class=\"fa fa-info-circle\" aria-describedby=\"expressions-tooltip\"></i>\n            <span id=\"expressions-tooltip\" class=\"small\" role=\"tooltip\">\n                Expressions are ANDed together.<br /> This means that an alert must match\n                all the above expressions to match this filter.\n            </span>\n        </span>\n    </h5>\n\n    <div class=\"row\">\n      <div class=\"medium-6 column\">\n        <div class=\"row\">\n          <div class=\"medium-8 column\">\n            <label for=\"select_matchfield\">Field to match</label>\n            <select name=\"matchfield\" id=\"select_matchfield\" class=\"select2\">\n              {% for m in matchfields %}\n                <option value=\"{{ m.id }}\">{{ m.name }}</option>\n              {% endfor %}\n            </select>\n\n          </div>\n\n          <div class=\"medium-4 column\">\n            <label>&nbsp;</label>\n            <input type=\"hidden\" name=\"id\" value=\"{{ detail_id }}\" />\n            <input type=\"submit\" class=\"postfix button\" value=\"Build expression\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  {% endif%}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/filter_group_form.html",
    "content": "{% extends \"alertprofiles/base_detail.html\" %}\n\n{% block url_edit %}{% url 'alertprofiles-filter_groups-save' %}{% endblock %}\n{% block url_remove_expression %}{% url 'alertprofiles-filter_groups-removefilter' %}{% endblock %}\n{% block url_add_expression %}{% url 'alertprofiles-filter_groups-addfilter' %}{% endblock %}\n\n{% block backnavigation %}\n  <p><a href=\"{% url 'alertprofiles-filter_groups' %}\">Back to filter-groups</a></p>\n{% endblock %}\n\n\n{% block headercontent %}\n    {% if detail_id %}\n        Filter group details\n    {% else %}\n        New filter group\n    {% endif %}\n{% endblock %}\n\n{% block expressions_caption_content %}\n    Filters\n{% endblock %}\n\n{% block expressions_thead_cols %}\n    {% if owner %}\n    <th></th>\n    {% endif %}\n    <th>Priority</th>\n    <th>Operation</th>\n    <th>Filter</th>\n    <th></th>\n    <th></th>\n{% endblock %}\n\n{% block expressions_tbody_content %}\n    {% for f in filter_group_content %}\n        <tr>\n            {% if owner %}\n            <td><input type=\"checkbox\" name=\"filter\" value=\"{{ f.id }}\" /></td>\n            {% endif %}\n\n            <td>{{ f.priority }}</td>\n\n            <td>\n                {% if f.include %}\n                    {{ f.positive|yesno:\"Add,Add inverse\" }}\n                {% else %}\n                    {{ f.positive|yesno:\"Subtract,And\" }}\n                {% endif %}\n            </td>\n\n            <td><a href=\"{% url 'alertprofiles-filters-detail' f.filter.id  %}\">{{ f.filter }}</a></td>\n\n            <td>\n                {% if not forloop.first %}\n                <input type=\"submit\" name=\"moveup={{ f.id }}\" value=\"Move up\" class=\"button secondary tiny\"/>\n                {% endif %}\n            </td>\n\n            <td>\n                {% if not forloop.last %}\n                <input type=\"submit\" name=\"movedown={{ f.id }}\" value=\"Move down\" class=\"button secondary tiny\" />\n                {% endif %}\n            </td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n\n{% block addexpression %}\n    {% if owner %}\n      <div class=\"row\">\n        <div class=\"column small-12\">\n          <button\n              class=\"button small secondary right\"\n              hx-get=\"{% url 'alertprofiles-filter_groups-operator-help' %}\"\n              hx-target=\"body\"\n              hx-swap=\"beforeend\"\n          >\n              Operator help\n          </button>\n          <h5>Add filter</h5>\n        </div>\n      </div>\n\n    <div class=\"row\">\n\n      <div class=\"column medium-6\">\n        <label for=\"select_operation\">Use operation\n          <select name=\"operator\" id=\"select_operation\" class=\"select2\">\n              <option value=\"11\">Add</option>\n              <option value=\"01\">Subtract</option>\n              <option value=\"00\">And</option>\n              <option value=\"10\">Add inverse</option>\n          </select>\n        </label>\n      </div>\n\n      <div class=\"column medium-6\">\n        <label for=\"select_filter\">on filter\n          <select name=\"filter\" id=\"select_filter\" class=\"select2\">\n          {% for f in filters %}\n              <option value=\"{{ f.id }}\">{{ f.name }}</option>\n          {% endfor %}\n          </select>\n        </label>\n      </div>\n\n    </div>\n\n    <br/>\n    {{ block.super }}  {% comment %}This is the form submit button....{% endcomment %}\n    {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/filter_group_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block top_links %}\n  <a href=\"{% url 'alertprofiles-filter_groups-new' %}\" class=\"button small\">Add filter group</a>\n{% endblock %}\n\n{% block captioncontent %}\n    Filter groups\n{% endblock %}\n\n{% block theadcols %}\n    <th></th>\n\n    <th>\n    {% if order_by == \"name\" %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page_obj.number }}&amp;order_by=-name\">\n          Name\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page_obj.number }}&amp;order_by=name\">\n          Name\n          {% if order_by == \"-name\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"owner\" %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page}}&amp;order_by=-owner\">\n          Owner\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page}}&amp;order_by=owner\">\n          Owner\n          {% if order_by == \"-owner\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"description\" %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page }}&amp;order_by=-description\">\n          Description\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-filter_groups' %}?page={{ page }}&amp;order_by=description\">\n          Description\n          {% if order_by == \"-description\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n{% endblock %}\n\n{% block tablecolspan %}4{% endblock %}\n\n{% block tbodycontent %}\n    {% for filter in object_list %}\n        <tr>\n            <td>\n                <input name=\"filter_group\" value=\"{{ filter.id }}\"\n                type=\"checkbox\"\n                {% if not admin and not filter.owner %}disabled=\"disabled\"{% endif %}\n                />\n            </td>\n            <td><a href=\"{% url 'alertprofiles-filter_groups-detail' filter.id %}\">\n                {{ filter.name }}</a></td>\n            <td>{% if filter.owner %}Private{% else %}Public{% endif %}</td>\n            <td>{{ filter.description }}</td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/filter_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block top_links %}\n  <a href=\"{% url 'alertprofiles-filters-new' %}\" class=\"button small\">New filter</a>\n{% endblock %}\n\n{% block captioncontent %}\n    Filters\n{% endblock %}\n\n{% block theadcols %}\n    <th></th>\n\n    <th>\n    {% if order_by == \"name\" %}\n        <a href=\"{% url 'alertprofiles-filters' %}?page={{ page_obj.number }}&amp;order_by=-name\">\n          Name\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-filters' %}?page={{ page_obj.number }}&amp;order_by=name\">\n          Name\n          {% if order_by == \"-name\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"owner\" %}\n        <a href=\"{% url 'alertprofiles-filters' %}?page={{ page_obj.number }}&amp;order_by=-owner\">\n          Owner\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-filters' %}?page={{ page_obj.number }}&amp;order_by=owner\">\n          Owner\n          {% if order_by == \"-owner\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n{% endblock %}\n\n{% block tablecolspan %}3{% endblock %}\n\n{% block tbodycontent %}\n    {% for filter in object_list %}\n        <tr>\n            <td>\n                <input name=\"filter\" value=\"{{ filter.id }}\"\n                type=\"checkbox\"\n                {% if not admin and not filter.owner %}disabled=\"disabled\" {% endif %}/>\n            </td>\n            <td><a href=\"{% url 'alertprofiles-filters-detail' filter.id %}\">\n                {{ filter.name }}</a></td>\n            <td>{% if filter.owner %}Private{% else %}Public{% endif %}</td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/matchfield_form.html",
    "content": "{% extends \"alertprofiles/base_detail.html\" %}\n\n{% block url_edit %}{% url 'alertprofiles-matchfields-save' %}{% endblock %}\n\n{% block backnavigation %}\n    <p><a href=\"{% url 'alertprofiles-matchfields' %}\">Back to matchfields</a></p>\n{% endblock %}\n\n{% block headercontent %}\n    {% if detail_id %}\n        Matchfield details\n    {% else %}\n        New matchfield\n    {% endif %}\n{% endblock %}\n\n{% block form_additional_fields %}\n  <div class=\"row\">\n    <div class=\"medium-4 column\">\n      <label for=\"id_operator\">\n        Available operators\n          <span class=\"nav-tooltip\">\n              <i class=\"fa fa-info-circle\" aria-describedby=\"available-operators\"></i>\n              <span id=\"available-operators\" class=\"small\" role=\"tooltip\">\n                  The operators that will be available to use on this match field.\n                  &nbsp;&nbsp;\n                  Note:\n                  Only 'equals' and 'in' makes sense when 'Show list' is checked, there\n                  is however nothing that will prevent you from selecting them all for\n                  use on a list, but alert engine won't understand it.\n              </span>\n          </span>\n\n      </label>\n\n      <select name=\"operator\" id=\"id_operator\" multiple=\"multiple\">\n        {% for o in operators %}\n          <option value=\"{{ o.id }}\"\n                  {% if o.selected %}selected=\"selected\"{% endif %}\n                  >{{ o.name }}</option>\n        {% endfor %}\n      </select>\n    </div>\n  </div>\n{% endblock %}\n\n{% block filter_content %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/matchfield_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block top_links %}\n  <a href=\"{% url 'alertprofiles-matchfields-new' %}\" class=\"button small\">New match field</a>\n{% endblock %}\n\n{% block captioncontent %}\n    Matchfields\n{% endblock %}\n\n{% block tablecolspan %}3{% endblock %}\n\n{% block theadcols %}\n    <th></th>\n    <th>\n    {% if order_by == \"name\" %}\n        <a href=\"{% url 'alertprofiles-matchfields' %}?page={{ page_obj.number }}&amp;order_by=-name\">\n          Name\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-matchfields' %}?page={{ page_obj.number }}&amp;order_by=name\">\n        Name\n          {% if order_by == \"-name\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n    <th>\n    {% if order_by == \"description\" %}\n        <a href=\"{% url 'alertprofiles-matchfields' %}?page={{ page_obj.number }}&amp;order_by=-description\">\n          Description\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-matchfields' %}?page={{ page_obj.number }}&amp;order_by=description\">\n          Description\n          {% if order_by == \"-description\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n{% endblock %}\n\n{% block tbodycontent %}\n    {% for matchfield in object_list %}\n        <tr>\n            <td><input name=\"matchfield\" value=\"{{ matchfield.id }}\" type=\"checkbox\" /></td>\n            <td><a href=\"{% url 'alertprofiles-matchfields-detail' matchfield.id %}\">\n                {{ matchfield.name }}</a></td>\n            <td>{{ matchfield.description }}</td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/paginator.html",
    "content": "{% block paginator %}\n{% if page_obj %}\n    {% if page_obj.has_previous %}\n        <a href=\"{{ page_link }}?page={{ page_obj.previous_page_number }}&amp;order_by={{ order_by }}\"\n        title=\"Previous page\"\n        ><img src=\"{{ STATIC_URL }}images/alertprofiles/go-previous.png\" alt=\"Previous page\" /></a>\n    {% endif %}\n    Showing {{ page_obj.start_index }} to {{ page_obj.end_index }} of\n    {{ paginator.count }}.\n    {% if page_obj.has_next %}\n        <a href=\"{{ page_link }}?page={{ page_obj.next_page_number }}&amp;order_by={{ order_by }}\"\n        title=\"Next page\"\n        ><img src=\"{{ STATIC_URL }}images/alertprofiles/go-next.png\" alt=\"Next page\" /></a>\n    {% endif %}\n{% else %}\n    &nbsp;\n{% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/permissions.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n  <div class=\"row\">\n   <div class=\"small-12 column\">\n     <button\n             class=\"button small secondary right\"\n             hx-get=\"{% url 'alertprofiles-permissions-help' %}\"\n             hx-target=\"body\"\n             hx-swap=\"beforeend\"\n     >\n         Help\n     </button>\n     <h4>Choose a group to set it's permissions</h4>\n   </div>\n  </div>\n\n\n  <table class=\"listtable\">\n    <caption>Groups</caption>\n\n    <thead>\n      <tr>\n        <th>Name</th>\n        {# if not selected_group #}\n        <th>Description</th>\n        {# endif #}\n      </tr>\n    </thead>\n\n    <tbody>\n    {% for group in groups %}\n      <tr>\n        <td>\n            <a href=\"{% url 'alertprofiles-permissions-detail' group.id %}\">{{ group.name }}</a>\n        </td>\n        {# if not selected_group #}\n        <td>{{ group.description }}</td>\n        {# endif #}\n      </tr>\n    {% endfor %}\n    </tbody>\n  </table>\n\n\n  {% if selected_group %}\n    <form action=\"{% url 'alertprofiles-permissions-save' %}\" method=\"post\">\n      {% csrf_token %}\n      <table class=\"listtable full-width\">\n        <caption>Set permissions for {{ selected_group.name }}</caption>\n\n        <thead>\n        <tr>\n          <th></th>\n          <th>Name</th>\n          <th>Description</th>\n        </tr>\n        </thead>\n\n        <tbody>\n        {% for fg in filter_groups %}\n          <tr>\n            <td>\n              <input type=\"checkbox\" name=\"filter_group\" value=\"{{ fg.id }}\" id=\"filterid_{{ fg.id }}\"\n              {% for perm in permissions %}\n                {% if perm.id == fg.id %}\n                checked=\"checked\"\n                {% endif %}\n              {% endfor %}\n                />\n            </td>\n            <td><label for=\"filterid_{{ fg.id }}\">{{ fg.name }}</label></td>\n            <td>{{ fg.description }}</td>\n          </tr>\n        {% endfor %}\n        </tbody>\n      </table>\n      <div>\n        <input type=\"hidden\" name=\"group\" value=\"{{ selected_group.id }}\" />\n        <input type=\"submit\" value=\"Save permissions\" class=\"button small\" />\n      </div>\n    </form>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/profile.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block tabcontent %}\n\n  <a href=\"{% url 'alertprofiles-profile-new' %}\" class=\"button small\">New profile</a>\n  <h4>Profiles</h4>\n\n\n  <form action=\"{% url 'alertprofiles-profile-remove' %}\" method=\"post\">\n    {% csrf_token %}\n    <table class=\"listtable\">\n      <thead>\n      <tr>\n        <th>&nbsp;</th>\n\n        <th>\n          {% if order_by == \"name\" %}\n            <a href=\"{% url 'alertprofiles-profile' %}?page={{ page_obj.number }}&amp;order_by=-name\">\n              Name <i class=\"fa fa-caret-down\"></i>\n            </a>\n          {% else %}\n            <a href=\"{% url 'alertprofiles-profile' %}?page={{ page_obj.number }}&amp;order_by=name\">\n              Name\n            {% if order_by == \"-name\" %}\n              <i class=\"fa fa-caret-up\"></i>\n            {% endif %}\n            </a>\n          {% endif %}\n        </th>\n\n        <th>\n          Active\n        </th>\n\n        <th>&nbsp;</th>\n      </tr>\n      </thead>\n\n      {% if profiles %}\n        <tbody>\n        {% for profile in profiles %}\n          <tr>\n            <td>\n              <input type=\"checkbox\" name=\"profile\" value=\"{{ profile.id }}\"/>\n            </td>\n\n            <td>\n              <a href=\"{% url 'alertprofiles-profile-detail' profile.id %}\">{{ profile.name }}</a>\n            </td>\n\n            {% if profile.id == active_profile.id %}\n              <td>\n                Active\n              </td>\n              <td>\n                <input type=\"submit\" name=\"deactivate={{ profile.id }}\" value=\"Deactivate\" class=\"button secondary tiny\"/>\n              </td>\n            {% else %}\n              <td>\n                Inactive\n              </td>\n              <td>\n                <input type=\"submit\" name=\"activate={{ profile.id }}\" value=\"Activate\" class=\"button secondary tiny\"/>\n              </td>\n            {% endif %}\n          </tr>\n        {% endfor %}\n        </tbody>\n      {% endif %}\n    </table>\n\n    {% if profiles %}\n    <p>\n      <input type=\"submit\" name=\"remove\" value=\"Remove selected\" class=\"button secondary small\"/>\n    </p>\n    {% endif %}\n\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/profile_detail.html",
    "content": "{% extends \"alertprofiles/base_detail.html\" %}\n\n{% block url_edit %}{% url 'alertprofiles-profile-save' %}{% endblock %}\n{% block url_add_expression %}{% url 'alertprofiles-profile-timeperiod-add' %}{% endblock %}\n\n{% block backnavigation %}\n  <p><a href=\"{% url 'alertprofiles-profile' %}\">Back to profiles</a></p>\n{% endblock %}\n\n\n{% block headercontent %}\n    {% if detail_id %}\n       Profile details\n    {% else %}\n        New profile\n    {% endif %}\n{% endblock %}\n\n{% block form_additional_fields %}\n{% if time_period_templates %}\n  <div>\n    <label for=\"id_template\">Choose a template for time periods:</label>\n    <select name=\"template\" id=\"id_template\" class=\"select2\">\n      <option value=\"\">No template</option>\n      {% for key, template in time_period_templates.items %}\n        <option value=\"{{ key }}\" {% if key == request.POST.template %}selected{% endif %}>\n          {{ template.main.description }}\n        </option>\n      {% endfor %}\n    </select>\n  </div>\n{% endif %}\n{% endblock %}\n\n{% block expressions_caption_content  %}\n    Time periods\n{% endblock %}\n\n{% block expressions %}\n    <h4>Time periods</h4>\n\n<form action=\"{% url 'alertprofiles-profile-timeperiod-remove' %}\" method=\"post\">\n    {% csrf_token %}\n    {% include \"alertprofiles/timeperiods.html\" %}\n    <p>\n        <input type=\"hidden\" name=\"profile\" value=\"{{ detail_id }}\" />\n        <input type=\"submit\" value=\"Delete selected periods\" class=\"button small\" />\n    </p>\n</form>\n{% endblock %}\n\n{% block addexpression %}\n    {% include \"alertprofiles/timeperiod_form.html\" %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/sms_list.html",
    "content": "{% extends \"alertprofiles/base_list.html\" %}\n\n{% block captioncontent %}\n    My SMS\n{% endblock %}\n\n{% block theadcols %}\n    <th>\n    {% if order_by == \"time\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-time\">\n          Time\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=time\">\n          Time\n          {% if order_by == \"-time\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"time_sent\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-time_sent\">\n          Sent\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=time_sent\">\n          Sent\n          {% if order_by == \"-time_sent\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"phone\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-phone\">\n          Phone\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=phone\">\n          Phone\n          {% if order_by == \"-phone\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"message\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-message\">\n          Message\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=message\">\n          Message\n          {% if order_by == \"-message\" %}\n            <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n\n    <th>\n    {% if order_by == \"severity\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-severity\">\n          Severity\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=severity\">\n          Severity\n          {% if order_by == \"-severity\" %}\n              <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n    <th>\n    {% if order_by == \"sent\" %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=-sent\">\n          Status\n          <i class=\"fa fa-caret-down\"></i>\n        </a>\n    {% else %}\n        <a href=\"{% url 'alertprofiles-sms' %}?page={{ page_obj.number }}&amp;order_by=sent\">\n          Status\n          {% if order_by == \"-sent\" %}\n              <i class=\"fa fa-caret-up\"></i>\n          {% endif %}\n        </a>\n    {% endif %}\n    </th>\n{% endblock %}\n\n{% block tablecolspan %}6{% endblock %}\n\n{% block tbodycontent %}\n    {% for sms in object_list %}\n        <tr>\n            <td>{{ sms.time|date:\"DATETIME_FORMAT\" }}</td>\n            <td>\n                {% if sms.time_sent %}\n                    {{ sms.time_sent|date:\"DATETIME_FORMAT\" }}\n                {% endif %}\n            </td>\n            <td>{{ sms.phone }}</td>\n            <td>{{ sms.message }}</td>\n            <td>{{ sms.severity }}</td>\n            <td\n                {% if sms.sent == 'Y' %}\n                    style=\"color: green\">\n                    <img src=\"{{ STATIC_URL }}images/lys/green.png\" alt=\"\" />\n                    Sent\n                {% endif %}\n                {% if sms.sent == 'N' %}\n                    style=\"color: red\">\n                    <img src=\"{{ STATIC_URL }}images/lys/red.png\" alt=\"\" />\n                    Not sent\n                {% endif %}\n                {% if sms.sent == 'I' %}\n                    style=\"color: orange\">\n                    <img src=\"{{ STATIC_URL }}images/lys/yellow.png\" alt=\"\" />\n                    Ignored\n                {% endif %}\n            </td>\n        </tr>\n    {% endfor %}\n{% endblock %}\n\n{% block bottom_form %}{% endblock %}\n\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/subscription_form.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n  <h4>\n    Subscriptions\n  </h4>\n\n  {% if profile %}\n    <p><a href=\"{% url 'alertprofiles-profile-detail' profile.id %}\">Back to profile</a></p>\n  {% else %}\n    <p><a href=\"{% url 'alertprofiles-profile' %}\">Back to profiles</a></p>\n  {% endif %}\n\n  {% if not editing %}\n  <p>\n     For profile \"{{ time_period.profile.name }}\".\n     Time period starting at {{ time_period.start }} on\n     {{ time_period.get_valid_during_display }}.\n  </p>\n  {% endif %}\n\n{% block subscriptions %}\n{% if subscriptions %}\n\n<form action=\"{% url 'alertprofiles-profile-timeperiod-subscription-remove' %}\" method=\"post\">\n    {% csrf_token %}\n    <table class=\"listtable full-width\">\n        <thead>\n            <tr>\n                <th></th>\n                <th>Watched filter group</th>\n                <th>Alert address</th>\n                <th>Dispatch</th>\n                <th>Ignore resolved</th>\n                <th></th>\n            </tr>\n        </thead>\n\n        <tbody>\n        {% for s in subscriptions %}\n            <tr>\n                <td><input type=\"checkbox\" name=\"subscription\"\n                id=\"id_subscription_{{ s.id }}\" value=\"{{ s.id }}\" /></td>\n                <td><a href=\"{% url 'alertprofiles-filter_groups-detail' s.filter_group.id %}\">{{ s.filter_group.name }}</a></td>\n                <td>\n                    {% if not s.alert_address.type.supported %}<div class=\"alert-box error with-icon inside-table\" title=\"{{ s.alert_address.type.name }} is no longer supported\">{% endif %}\n                    {% if s.alert_address.type.blacklisted_reason %}<div class=\"alert-box warning inside-table\" title=\"{{ s.alert_address.type.name }} is currently non-functional: {{ s.alert_address.type.blacklisted_reason }}\">{% endif %}\n                    <a href=\"{% url 'alertprofiles-address-detail' s.alert_address.id %}\">{{ s.alert_address }}</a>\n                    {% if not s.alert_address.type.supported or s.alert_address.type.blacklisted_reason %}</div>{% endif %}\n                </td>\n                <td>{{ s.get_type_display|capfirst }}</td>\n                <td>{{ s.ignore_resolved_alerts|yesno:\"Yes,No\" }}</td>\n                <td><a href=\"{% url 'alertprofiles-profile-timeperiod-subscription' s.id %}\">\n                    Edit</a></td>\n            </tr>\n        {% endfor %}\n        </tbody>\n    </table>\n    <p>\n        <input type=\"hidden\" name=\"id\" value=\"{{ time_period.id }}\" />\n        <input type=\"submit\" value=\"Delete selected\" class=\"button small secondary\" />\n    </p>\n</form>\n{% endif %}\n{% endblock subscriptions %}\n\n{% block subscription_form %}\n\n<div class=\"addexpressionform\">\n    <form action=\"{% url 'alertprofiles-profile-timeperiod-subscription-add' %}\" method=\"post\">\n        {% csrf_token %}\n        <h5>{{ editing|yesno:\"Edit,Add new\" }} subscription</h5>\n        <div class=\"formcontainer\">\n\n        {% if not num_addresses %}\n            <div class=\"alert-box alert\">\n              There are no alert addresses.\n              <a href=\"{% url 'alertprofiles-address-new' %}\">Add your first address</a> to fix this problem.\n            </div>\n        {% endif %}\n\n        {% if not num_filter_groups %}\n            <div class=\"alert-box alert\">\n              There are no available filter groups.\n              <a href=\"{% url 'alertprofiles-filter_groups-new' %}\">Add your first filter group</a> to fix this problem.\n            </div>\n        {% endif %}\n          {% include 'custom_crispy_templates/_form_content.html' %}\n          <input type=\"submit\" value=\"{{ editing|yesno:\"Save,Add\" }}\" class=\"button small\"/>\n        </div>\n    </form>\n</div>\n\n{% endblock subscription_form %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/subsection_tabs.html",
    "content": "{% comment %}\n    {# Subcategory tabs are stored in their own files to avoid clutter #}\n    {% if active.profile %}\n        {% include \"alertprofiles/profile_tab.html\" %}\n    {% else %}\n        {% if active.address %}\n            {% include \"alertprofiles/address_tab.html\" %}\n        {% else %}\n            {% if active.filters %}\n                {% include \"alertprofiles/filter_tab.html\" %}\n            {% else %}\n                {% if active.filter_groups %}\n                    {% include \"alertprofiles/filter_group_tab.html\" %}\n                {% else %}\n                    {% if active.matchfields %}\n                        {% include \"alertprofiles/matchfield_tab.html\" %}\n                    {% endif %}\n                {% endif %}\n            {% endif %}\n        {% endif %}\n    {% endif %}\n{% endcomment%}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/timeperiod_edit.html",
    "content": "{% extends \"alertprofiles/base.html\" %}\n\n{% block tabcontent %}\n\n<form action=\"{% url 'alertprofiles-profile-timeperiod-add' %}\" method=\"post\">\n    <input type=\"hidden\" name=\"valid_during\" value=\"{{ time_period.valid_during }}\" />\n    {% include 'custom_crispy_templates/_form_content.html' with form=time_period_form %}\n</form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/timeperiod_form.html",
    "content": "{% if time_period %}\n    <h4>Edit time period</h4>\n{% else %}\n    <h4>Add new time period</h4>\n{% endif %}\n\n{% include 'custom_crispy_templates/_form_content.html' with form=time_period_form %}\n"
  },
  {
    "path": "python/nav/web/templates/alertprofiles/timeperiods.html",
    "content": "{% load date_and_time %}\n\n<div id=\"timeperiods_table_container\" class=\"row\">\n{% for type in alert_subscriptions %}\n  <div class=\"column medium-6\">\n<table class=\"listtable full-width\">\n    <caption>\n        {{ type.title }}\n        <span class=\"nav-tooltip\" data-align=\"end\" style=\"float: right;\">\n            <i class=\"fa fa-info-circle right\" aria-describedby=\"subscription-tooltip-{{ type.title }}\"></i>\n            <span id=\"subscription-tooltip-{{ type.title }}\" class=\"small\" role=\"tooltip\">\n                If, when hovering over one period in one of the tables, two rows\n                in different tables are highlighted, those two periods are\n                actually the one and same period. It's just an <em>all days</em> period.\n            </span>\n        </span>\n    </caption>\n\n    <thead>\n        <tr>\n            <th></th>\n            <th>Valid during</th>\n            <th>Subscriptions</th>\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for a in type.subscriptions %}\n      <tr class=\"{% if a.time_period.get_valid_during_display == 'all days' %}all_days_period period_{{ a.time_period.id }} {% endif %}align-top\">\n        {# The same time period may appear in both tables, so we need to #}\n        {# identify by both the parent loops counter and the time_periods id. #}\n\n        <td class=\"{{ a.time_period.css_class }}\">\n          {% if active.profile %}\n            <input type=\"checkbox\" name=\"period\"\n                   id=\"id_period_weekday_{{ a.time_period.id }}\"\n                   value=\"{{ a.time_period.id }}\"\n                   class=\"all_day_checkbox_{{ a.time_period.id }}\"/>\n          {% endif %}\n        </td>\n\n        <td>\n          <a href=\"{% url 'alertprofiles-profile-timeperiod'  a.time_period.id %}\">\n            {{ a.time_period.start|short_time_format }} - {{ a.time_period.end|short_time_format }}\n          </a>\n        </td>\n\n        <td>\n          <ul class=\"inside\">\n          {% if a.alert_subscriptions %}\n            {% for b in a.alert_subscriptions %}\n            <li>\n                Watch <em><a href=\"{% url 'alertprofiles-filter_groups-detail' b.filter_group.id %}\">{{ b.filter_group.name }}</a></em>,\n                send to\n                {% if not b.alert_address.type.supported %}<div class=\"alert-box error with-icon inside-table\" title=\"{{ b.alert_address.type.name }} is no longer supported\">{% endif %}\n                {% if b.alert_address.type.blacklisted_reason %}<div class=\"alert-box warning inside-table\" title=\"{{ b.alert_address.type.name }} is currently non-functional: {{b.alert_address.type.blacklisted_reason}}\">{% endif %}\n                <em><a href=\"{% url 'alertprofiles-address-detail' b.alert_address.id %}\">{{ b.alert_address.address }}</a></em>\n                {% if not b.alert_address.type.supported or b.alert_address.type.blacklisted_reason %}</div>{% endif %},\n                {{ b.get_type_display }}.\n            </li>\n            {% endfor %}\n          {% else %}\n            <li><em>No subscriptions in this time period.</em></li>\n          {% endif %}\n          </ul>\n          <a href=\"{% url 'alertprofiles-profile-timeperiod-setup' a.time_period.id %}\"\n             class=\"button tiny secondary\">\n            Edit subscriptions\n          </a>\n        </td>\n\n      </tr>\n    {% endfor %}\n    </tbody>\n</table>\n  </div>\n{% endfor %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/allauth/elements/button.html",
    "content": "{% load allauth %}\n{% comment %} djlint:off {% endcomment %}\n<{% if attrs.href %}a href=\"{{ attrs.href }}\"{% else %}button{% endif %}\n{% if attrs.form %}form=\"{{ attrs.form }}\"{% endif %}\n{% if attrs.id %}id=\"{{ attrs.id }}\"{% endif %}\n{% if attrs.name %}name=\"{{ attrs.name }}\"{% endif %}\n{% if attrs.value %}value=\"{{ attrs.value }}\"{% endif %}\n{% if attrs.type %}type=\"{{ attrs.type }}\"{% endif %}\nclass=\"button small{% if attrs.tags %}{% if \"danger\" in attrs.tags or \"delete\" in attrs.tags %} alert{% elif \"secondary\" in attrs.tags %} secondary{% endif %}{% endif %}\"\n>\n{% slot %}\n{% endslot %}\n</{% if attrs.href %}a{% else %}button{% endif %}>\n"
  },
  {
    "path": "python/nav/web/templates/allauth/elements/panel.html",
    "content": "{% load allauth %}\n<section>\n    <h4>\n        {% slot title %}\n        {% endslot %}\n    </h4>\n    {% slot body %}\n    {% endslot %}\n    {% if slots.actions %}\n        <ul class=\"allauth-actions\">\n            {% for action in slots.actions %}<li>{{ action }}</li>{% endfor %}\n        </ul>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "python/nav/web/templates/allauth/elements/provider.html",
    "content": "<a title=\"{{ attrs.name }}\" href=\"{{ attrs.href }}\" class=\"button secondary\">\n    <i class=\"fa fa-sign-in\"></i> {{ attrs.name }}\n</a>\n"
  },
  {
    "path": "python/nav/web/templates/allauth/elements/provider_list.html",
    "content": "{% load allauth %}\n<div class=\"provider-list\">\n    {% slot %}\n    {% endslot %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/allauth/layouts/_tabs_list.html",
    "content": "{% load i18n string_manipulation socialaccount %}\n{% if request.user.is_authenticated %}\n    <ul>\n        {% url 'webfront-preferences' as my_account_url_ %}\n        {% if my_account_url_ %}\n            <li class=\"{% if request.path == my_account_url_  %}tabactive{% endif %}\">\n                <a href=\"{{ my_account_url_ }}\">Account</a>\n            </li>\n        {% endif %}\n        {% url 'account_change_password' as change_password_url_ %}\n        {% if change_password_url_ %}\n            <li class=\"{% if request.path|starts_with:change_password_url_ %}tabactive{% endif %}\">\n                <a href=\"{{ change_password_url_ }}\">{% trans \"Change Password\" %}</a>\n            </li>\n        {% endif %}\n        {% get_providers as socialaccount_providers %}\n        {% if socialaccount_providers %}\n            {% url 'socialaccount_connections' as connections_url_ %}\n            {% if connections_url_ %}\n                <li class=\"{% if request.path|starts_with:connections_url_ %}tabactive{% endif %}\">\n                    <a href=\"{{ connections_url_ }}\">{% trans \"Account Connections\" %}</a>\n                </li>\n            {% endif %}\n        {% endif %}\n        {% url 'mfa_index' as mfa_url_ %}\n        {% if mfa_url_ %}\n            <li class=\"{% if request.path|starts_with:mfa_url_ %}tabactive{% endif %}\">\n                <a href=\"{{ mfa_url_ }}\">{% trans \"Two-Factor Authentication\" %}</a>\n            </li>\n        {% endif %}\n        {% url 'usersessions_list' as usersessions_list_url_ %}\n        {% if usersessions_list_url_ %}\n            <li class=\"{% if request.path|starts_with:usersessions_list_url_ %}tabactive{% endif %}\">\n                <a href=\"{{ usersessions_list_url_ }}\">{% trans \"Sessions\" %}</a>\n            </li>\n        {% endif %}\n        {% url 'account_logout' as logout_url_ %}\n    </ul>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/allauth/layouts/base.html",
    "content": "{% extends \"base.html\" %}\n{% load i18n %}\n{% load socialaccount %}\n{% block base_content %}\n    <div class=\"tabs\">\n      {% include \"allauth/layouts/_tabs_list.html\" %}\n      <section id=\"account-tab-content\" class=\"tabcontent\">\n        <div>\n          {% block content %}\n          {% endblock content %}\n        </div>\n      </section>\n    </div>\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/allauth/layouts/entrance.html",
    "content": "{% load i18n %}\n<!DOCTYPE html>\n<html lang=\"{{ LANGUAGE_CODE }}\">\n\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>{% block head_title %}{% endblock head_title %}</title>\n    <link rel=\"shortcut icon\" href=\"{{ STATIC_URL }}images/main/favicon.ico\">\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav.css\" />\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/login.css\" />\n    <script src=\"{{ STATIC_URL }}js/libs/htmx-2.0.4.min.js\"></script>\n    {% block extra_head %}\n    {% endblock extra_head %}\n</head>\n\n<body>\n    <div class=\"row\">\n        <div class=\"small-12 column\">\n            <div class=\"panel logincontainer\">\n                <div class=\"logo-wrapper\">\n                    <a href=\"/\">\n                        <img src=\"{{ STATIC_URL }}images/main/nav-logo-black.svg\" alt=\"NAV\"\n                             class=\"navlogo\"/>\n                    </a>\n                </div>\n\n                {% if messages %}\n                    {% for message in messages %}\n                        <div class=\"alert-box {% if message.tags %}{{ message.tags }}{% endif %}\">\n                            {{ message }}\n                        </div>\n                    {% endfor %}\n                {% endif %}\n\n                {% block content %}\n                {% endblock content %}\n            </div>\n        </div>\n    </div>\n\n    {% block extra_body %}\n    {% endblock extra_body %}\n</body>\n\n</html>\n"
  },
  {
    "path": "python/nav/web/templates/arnold/back.html",
    "content": "<p><a href=\"{% url 'arnold_index' %}\">Back</a></p>\n"
  },
  {
    "path": "python/nav/web/templates/arnold/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link href=\"{{ STATIC_URL }}css/nav/arnold.css\" rel=\"stylesheet\">\n  <script>require([\"src/arnold\"]);</script>\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Arnold' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n  <ul class=\"button-group\">\n    <li>\n      <a href=\"{% url 'arnold-search' %}\" class=\"button small secondary {% if active.search  %}active{% endif %}\">\n\t\t<i class=\"fa fa-search pad-right\"></i>\n        Search\n      </a>\n    </li>\n    <li>\n      <a href=\"{% url 'arnold-manual-detention' %}\" class=\"button small secondary {% if active.manualdetention %}active{% endif %}\">\n\t\t<i class=\"fa fa-lock pad-right\"></i>\n        Manual detention\n      </a>\n    </li>\n  </ul>\n\n  {% block content %}\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/choose_detentions.html",
    "content": "{% extends 'arnold/tabs.html' %}\n\n{% block tabcontent %}\n\n    <form action=\"{% url 'arnold-lift-detentions' %}\" method=\"POST\">\n        {% csrf_token %}\n        <table class=\"listtable\">\n            <caption>\n                Choose which ports to open\n            </caption>\n\n            <thead>\n            <tr>\n                <th>IP</th>\n                <th>MAC</th>\n                <th>DNS</th>\n                <th>Netbios</th>\n                <th>Switch</th>\n                <th>Interface</th>\n                <th>_</th>\n            </tr>\n            </thead>\n\n            <tbody>\n            {% for detention in detentions %}\n                <tr>\n                    <td>\n                        <a href=\"{% query 'machinetracker-ip' ip_range=detention.ip days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\" target=\"_blank\">\n                            {{ detention.ip }}\n                        </a>\n                    </td>\n\n                    <td>\n                        <a href=\"{% query 'machinetracker-mac' mac=detention.mac days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\" target=\"_blank\">\n                            {{ detention.mac }}\n                        </a>\n                    </td>\n\n                    <td>{{ detention.dns }}</td>\n                    <td>{{ detention.netbios }}</td>\n\n                    <td>\n                        {% if detention.interface %}\n                        <a href=\"{% url 'ipdevinfo-details-by-name' detention.interface.netbox.sysname %}\"\n                           title=\"Link to Ip Device Info\" target=\"_blank\">\n                            {{ detention.interface.netbox.sysname }}\n                        </a>\n                        {% else %}\n                            N/A\n                        {% endif %}\n                    </td>\n\n                    <td>\n                        {% if detention.interface %}\n                        <a href=\"{% url 'ipdevinfo-interface-details' detention.interface.netbox.sysname detention.interface.id %}\"\n                           title=\"Link to interface details\" target=\"_blank\">\n                            {{ detention.interface.ifname }}\n                        </a>\n                        {% else %}\n                            Detention was at {{ detention.textual_interface }}.\n                        {% endif %}\n                    </td>\n\n                    <td><input type=\"checkbox\" name=\"detentions\" value=\"{{ detention.id }}\" checked=\"checked\"/>\n                </tr>\n            {% endfor %}\n\n            <tr>\n                <td colspan='7'><input type=\"submit\" value=\"Enable selected ports\" class=\"button small\"/></td>\n            </tr>\n            </tbody>\n\n        </table>\n\n    </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/details.html",
    "content": "{% extends 'arnold/base.html' %}\n\n{% block content %}\n\n  {% include 'arnold/back.html' %}\n\n  {% if error %}\n    <div class=\"error\">{{ error }}</div>\n  {% endif %}\n\n  {% comment %} Display info for this identity {% endcomment %}\n  <table class=\"vertitable left\" style=\"margin-right: 2em;\">\n    <caption>Details for {{ identity.ip }}</caption>\n\n    <tbody>\n\n      <tr>\n        <th>Ip</th>\n        <td>\n          <a href=\"{% query 'machinetracker-ip' ip_range=identity.ip days=100 dns='on' %}\"\n             title=\"Link to Machine Tracker\">\n            {{ identity.ip }}\n          </a>\n        </td>\n      </tr>\n\n      <tr>\n        <th>Dns</th>\n        <td>{{ identity.dns }}</td>\n      </tr>\n\n      <tr>\n        <th>Netbios</th>\n        <td>{{ identity.netbios }}</td>\n      </tr>\n\n      <tr>\n        <th>Mac</th>\n        <td>\n          <a href=\"{% query 'machinetracker-mac' mac=identity.mac days=100 dns='on' %}\"\n             title=\"Link to Machine Tracker\">\n            {{ identity.mac }}\n          </a>\n        </td>\n      </tr>\n\n      <tr>\n        <th>Switch</th>\n        <td>\n          {% if identity.interface %}\n            <a href=\"{% url 'ipdevinfo-details-by-name' identity.interface.netbox.sysname %}\"\n               title=\"Link to Ip Device Info\">\n              {{ identity.interface.netbox.sysname }}\n            </a>\n          {% else %}\n            Last interface was {{ identity.textual_interface }}\n          {% endif %}\n        </td>\n      </tr>\n\n      <tr>\n        <th>Port</th>\n        <td>\n          {% if identity.interface %}\n            <a href=\"{% url 'ipdevinfo-interface-details' identity.interface.netbox.sysname identity.interface.id %}\"\n               title=\"Link to interface details\">\n          {% endif %}\n          {{ identity.interface.ifname|default_if_none:'' }}\n          {% if identity.interface %}\n            </a>\n          {% endif %}\n        </td>\n      </tr>\n\n      <tr>\n        <th>Vlan</th>\n        <td>\n          {{ identity.interface.vlan|default_if_none:'' }}\n        </td>\n      </tr>\n\n      <tr>\n        <th>\n          Status\n        </th>\n        <td>\n          {{ identity.status }}\n          {% if identity.status != 'enabled' %}\n            <a href=\"{% url 'arnold-choose-detentions' identity.id %}\"\n               class=\"button table-button right\">\n              {% if identity.interface %}\n                Enable\n              {% else %}\n                Close detention\n              {% endif %}\n            </a>\n          {% endif %}\n        </td>\n      </tr>\n\n      <tr>\n        <th>Autoenable</th>\n        <td>\n          {{ identity.autoenable|date:'DATETIME_FORMAT'|default_if_none:'' }}\n        </td>\n      </tr>\n\n      <tr>\n        <th>Mail</th>\n        <td>{{ identity.mail }}</td>\n      </tr>\n\n    </tbody>\n\n  </table>\n\n\n  {% comment %}Display list of events regarding this identity{% endcomment %}\n  {% with identity.events.all as events %}\n\n    <table class=\"listtable left\">\n      <caption>History</caption>\n\n      <thead>\n        <tr>\n          <th>Eventtime</th>\n          <th>Action</th>\n          <th>Reason</th>\n          <th>Comment</th>\n          <th>User</th>\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for event in events %}\n          <tr>\n            <td>{{ event.event_time|date:\"Y-m-d H:i:s\" }}</td>\n            <td>{{ event.action }}</td>\n            <td>{{ event.justification }}</td>\n            <td>{{ event.comment }}</td>\n            <td>{{ event.executor }}</td>\n          </tr>\n        {% endfor %}\n      </tbody>\n\n      <tfoot>\n        <tr>\n          <th colspan=\"5\">{{ events|length }} entr{{ events|pluralize:'y,ies' }} in history</th>\n        </tr>\n      </tfoot>\n\n    </table>\n\n  {% endwith %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/detainedports.html",
    "content": "{% extends \"arnold/tabs.html\" %}\n{% block tabcontent %}\n\n    <table class=\"listtable tablesorter arnold-detainedports\">\n        <caption>Currently detained ports</caption>\n\n        <thead>\n        <tr>\n            <th>Ip</th>\n            <th>DNS</th>\n            <th>Netbios</th>\n            <th>Status</th>\n            <th>Reason</th>\n            <th>Switch</th>\n            <th>Last Changed</th>\n            <th>_</th>\n            <th>_</th>\n        </tr>\n        </thead>\n\n        {% if identities %}\n            <tbody>\n            {% for identity in identities %}\n                <tr>\n                    <td>\n                        <a href=\"{% query 'machinetracker-ip' ip_range=identity.ip days=100 dns='on' %}\" title=\"Link to Machine Tracker\">\n                            {{ identity.ip }}\n                        </a>\n                    </td>\n\n                    <td>{{ identity.dns }}</td>\n                    <td>{{ identity.netbios }}</td>\n                    <td>{{ identity.status }}</td>\n                    <td>{{ identity.justification.name }}</td>\n                    <td>\n                        {% if identity.interface %}\n                        <a href=\"{% url 'ipdevinfo-details-by-name' identity.interface.netbox.sysname %}\"\n                           title=\"Link to Ip Device Info\">\n                            {{ identity.interface.netbox.sysname }}\n                        </a>\n                        {% else %}\n                            Could not find interface. Last interface was {{ identity.textual_interface }}\n                        {% endif %}\n                    </td>\n                    <td data-sort=\"{{ identity.last_changed|date:'c' }}\">{{ identity.last_changed|date:\"DATETIME_FORMAT\" }}</td>\n                    <td>\n                        <a href=\"{% url 'arnold-choose-detentions' identity.id %}\" class=\"button tiny secondary\">\n                            {% if identity.interface %}\n                                Enable\n                            {% else %}\n                                Close detention\n                            {% endif %}\n                        </a>\n                    </td>\n                    <td>\n                        <a href=\"{% url 'arnold-details' identity.id %}\">Details</a>\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n        {% endif %}\n\n        <tfoot>\n        <tr>\n            <th colspan=\"9\">{{ identities|length }}\n                port{{ identities|pluralize:'s' }} detained\n            </th>\n        </tr>\n        </tfoot>\n\n    </table>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/detention_profiles.html",
    "content": "{% extends 'arnold/tabs.html' %}\n\n{% block tabcontent %}\n\n    <table class=\"listtable\">\n        <caption>List of current detention profiles</caption>\n\n        <thead>\n            <tr>\n                <th>Id</th>\n                <th>Title</th>\n                <th>Description</th>\n                <th>Active</th>\n                <th>_</th>\n            </tr>\n        </thead>\n\n        {% if profiles %}\n            <tbody>\n            {% for profile in profiles %}\n                <tr>\n                    <td>{{ profile.id }}</td>\n                    <td>{{ profile.name }}</td>\n                    <td>{{ profile.description }}</td>\n                    <td>{{ profile.active|yesno:'Yes,No' }}</td>\n                    <td>\n                        <a href=\"{% url 'arnold-detention-profile-edit' profile.id %}\" class=\"button small secondary\">Edit</a>\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n        {% endif %}\n\n        <tfoot>\n            <tr>\n                <th colspan=\"5\">{{ profiles|length }} profile{{ profiles|pluralize:'s' }} registered</th>\n            </tr>\n        </tfoot>\n\n    </table>\n\n    <a href=\"{% url 'arnold-detention-profile-add' %}\" class=\"button small\">Add new detention profile</a>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/edit_detention_profile.html",
    "content": "{% extends 'arnold/base.html' %}\n\n{% block content %}\n\n  {% include 'arnold/back.html' %}\n\n  <h4>Predefined Detention</h4>\n\n  <div class=\"row\">\n    <div class=\"large-8 column\">\n      <div class=\"panel white\">\n\n        {% include 'custom_crispy_templates/flat_form.html' %}\n\n        {% if profile %}\n          <p>Last changed {{ profile.last_edited|date:'DATETIME_FORMAT' }}\n            by {{ profile.edited_by }}</p>\n        {% endif %}\n\n      </div>\n    </div>\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/history.html",
    "content": "{% extends \"arnold/tabs.html\" %}\n\n{% block tabcontent %}\n\n\n    {% comment %} Display history {% endcomment %}\n    <table class=\"listtable tablesorter arnold-history\">\n        <caption>History</caption>\n        <thead>\n        <tr>\n            <th>IP</th>\n            <th>DNS</th>\n            <th>MAC</th>\n            <th>Netbios</th>\n            <th>Orgid</th>\n            <th>Status</th>\n            <th>Reason</th>\n            <th>Last Changed</th>\n            <th>_</th>\n        </tr>\n        </thead>\n\n        {% if identities %}\n            <tbody>\n            {% for identity in identities %}\n                <tr>\n                    <td>\n                        <a href=\"{% query 'machinetracker-ip' ip_range=identity.ip days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\">\n                            {{ identity.ip }}\n                        </a>\n                    </td>\n\n                    <td>{{ identity.dns }}</td>\n\n                    <td>\n                        <a href=\"{% query 'machinetracker-mac' mac=identity.mac days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\">\n                            {{ identity.mac }}\n                        </a>\n                    </td>\n\n                    <td>{{ identity.netbios }}</td>\n                    <td>{{ identity.organization|default_if_none:'' }}</td>\n                    <td>{{ identity.status }}</td>\n                    <td>{{ identity.justification.name }}</td>\n                    <td data-sort=\"{{ identity.last_changed|date:'c' }}\">{{ identity.last_changed|date:\"DATETIME_FORMAT\" }}</td>\n                    <td>\n                        <a href=\"{% url 'arnold-details' identity.id %}\">\n                          Details\n                        </a>\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n        {% endif %}\n\n        <tfoot>\n        <tr>\n            <th colspan=\"9\">\n                {{ identities|length }} hit{{ identities|pluralize:'s' }} in history for the last {{ form.initial.days }} days\n            </th>\n        </tr>\n        </tfoot>\n    </table>\n\n\n    {% comment %} Display form for searching in history {% endcomment %}\n    <form action=\"{% url 'arnold-history' %}\" method=\"GET\" class=\"inline-form\">\n        {{ form.days }} days of history. <input type=\"submit\" value=\"Change\" class=\"button small\">\n    </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/justifications.html",
    "content": "{% extends \"arnold/tabs.html\" %}\n\n{% block tabcontent %}\n\n    {% comment %} List all existing justifications {% endcomment %}\n    <div class=\"row\">\n        <div class=\"medium-6 column\">\n            <table class=\"listtable expand\">\n                <caption>Existing reasons for detention</caption>\n\n                <thead>\n                <tr>\n                    <th>Reason</th>\n                    <th>Description</th>\n                    <th>&nbsp;</th>\n                    <th>&nbsp;</th>\n                </tr>\n                </thead>\n\n                {% if justifications %}\n                    <tbody>\n                    {% for justification in justifications %}\n                        <tr>\n                            <td>{{ justification.name }}</td>\n                            <td>{{ justification.description }}</td>\n                            <td>\n                                <a href=\"{% url 'arnold-justifications-edit' justification.id %}\"\n                                   class=\"button tiny secondary\">\n                                    Edit\n                                </a>\n                            </td>\n                            <td>\n                                {% if justification.deletable %}\n                                    <a href=\"{% url 'arnold-justifications-delete' justification.id %}\"\n                                       class=\"button tiny alert\">\n                                        Delete\n                                    </a>\n                                {% else %}\n                                    &nbsp;\n                                {% endif %}\n                            </td>\n                        </tr>\n                    {% endfor %}\n                    </tbody>\n\n                {% endif %}\n\n            </table>\n        </div>\n\n        {% comment %} Form for creating new justifications {% endcomment %}\n        <div class=\"medium-6 column\">\n            {% include 'custom_crispy_templates/flat_form.html' %}\n        </div>\n\n    </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/manualdetain-step2.html",
    "content": "{% extends 'arnold/base.html' %}\n\n{% load info %}\n\n{% block content %}\n\n  {% include 'arnold/back.html' %}\n\n  {% if error %}\n    <div class=\"alert-box alert\">{{ error }}</div>\n  {% endif %}\n\n  <div class=\"row\">\n    <div class=\"large-8 column\">\n      <div class=\"panel white\">\n\n      {% comment %}\n      This form consists of a manually added list of radio buttons to choose interfaces.\n      It is not feasible to add all the information to the labels otherwise.\n      {% endcomment %}\n      <form action=\"\" method=\"POST\" class=\"manualDetentionForm\">\n        {% csrf_token %}\n        <fieldset>\n          <legend>Manual detention of {{ target }}</legend>\n\n          {# Wrapper for radio button port list #}\n          <div id=\"div_interface-list\" class=\"ctrlHolder {% if form.camtuple.errors %}error{% endif %}\">\n            <label for=\"interface-list\">Choose port (trunks can not be detained)*</label>\n            {% for error in form.camtuple.errors %}\n              <small class=\"errorField\">{{ error }}</small>\n            {% endfor %}\n\n            <ul id=\"interface-list\" class=\"no-bullet\">\n            {% for candidate in candidates %}\n              <li>\n                <label>\n                  {# Show input field. Disable if interface is a trunk. #}\n                  <input type=\"radio\" name=\"camtuple\" value=\"{{ candidate.camid }}\"\n                         {% if candidate.interface.trunk %}disabled{% endif %}\n                         {% if form.camtuple.value == candidate.camid|slugify %}checked{% endif %}> {# slugify converts to string. #}\n\n                  {# Add link to port details #}\n                  Port\n                  <a target=\"_blank\" href=\"{% url 'ipdevinfo-interface-details' candidate.interface.netbox.sysname candidate.interface.id %}\">\n                    {{ candidate.interface.ifname }}\n                  </a>\n                  at\n                  {# Add link to ipdevinfo #}\n                  <a target=\"_blank\" href=\"{% url 'ipdevinfo-details-by-name' candidate.interface.netbox.sysname %}\">\n                    {{ candidate.interface.netbox.sysname }}\n                  </a>\n\n                  {# If port is a trunk, mark it. #}\n                  {% if candidate.interface.trunk %}\n                    <span class=\"label alert\">Trunk</span>\n                  {% endif %}\n\n                  {# Format endtime #}\n                  {% if candidate.endtime > now %}\n                    <span class=\"label secondary\">Active now</span>\n                  {% else %}\n                    &nbsp;<strong>Last active:</strong> {{ candidate.endtime|time_since }} ago\n                  {% endif %}\n                </label>\n              </li>\n            {% endfor %}\n            </ul>\n          </div>\n\n          {# Display form for setting detention choices. #}\n          {% include 'custom_crispy_templates/_form_content.html' %}\n        </fieldset>\n      </form>\n      </div>  {# formcontainer #}\n\n    </div>  {# column #}\n  </div>  {# row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/manualdetain.html",
    "content": "{% extends 'arnold/base.html' %}\n\n{% block content %}\n\n  {% include 'arnold/back.html' %}\n\n  <h4>Manual detention</h4>\n\n  {% if error %}\n    <div class=\"alert-box alert\">{{ error }}</div>\n  {% endif %}\n\n  <div class=\"row\">\n    <div class=\"medium-4 column\">\n      {% include 'custom_crispy_templates/flat_form.html' %}\n    </div>\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/quarantinevlans.html",
    "content": "{% extends \"arnold/tabs.html\" %}\n\n{% block tabcontent %}\n\n    <div class=\"row\">\n\n        <div class=\"medium-6 column\">\n            {% comment %} List all existing quarantine vlans{% endcomment %}\n            <table class=\"listtable expand\">\n                <caption>Current quarantine vlans</caption>\n\n                <thead>\n                <tr>\n                    <th>Vlan</th>\n                    <th>Description</th>\n                    <th>&nbsp;</th>\n                </tr>\n                </thead>\n\n                {% if qvlans %}\n                    <tbody>\n                    {% for qvlan in qvlans %}\n                        <tr>\n                            <td>{{ qvlan.vlan }}</td>\n                            <td>{{ qvlan.description }}</td>\n                            <td>\n                                <a href=\"{% url 'arnold-quarantinevlans-edit' qvlan.id %}\" class=\"button tiny secondary\">\n                                    Edit\n                                </a>\n                            </td>\n                        </tr>\n                    {% endfor %}\n                    </tbody>\n                {% endif %}\n\n            </table>\n        </div>\n\n        {% comment %} Display form for creating a new quarantine vlan {% endcomment %}\n        <div class=\"medium-6 column\">\n            {% include 'custom_crispy_templates/flat_form.html' %}\n        </div>\n\n    </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/search.html",
    "content": "{% extends \"arnold/base.html\" %}\n\n{% block content %}\n\n  {% include 'arnold/back.html' %}\n\n\n  <h4>Search</h4>\n\n    {% comment %} Display form for defining search parameters {% endcomment %}\n  <div class=\"row\">\n    <div class=\"medium-6 column\">\n      <div class=\"panel white\">\n        {% include 'custom_crispy_templates/flat_form.html' %}\n      </div>\n    </div>\n  </div>\n\n\n  {% comment %} Display search results {% endcomment %}\n    {% if form.is_bound and not form.errors %}\n        <table class=\"listtable\">\n\n            <caption>Result</caption>\n\n            <thead>\n            <tr>\n                <th>IP</th>\n                <th>DNS</th>\n                <th>MAC</th>\n                <th>Netbios</th>\n                <th>Status</th>\n                <th>Reason</th>\n                <th>Last changed</th>\n                <th>&nbsp;</th>\n            </tr>\n            </thead>\n\n            <tbody>\n            {% for result in search_result %}\n                <tr>\n                    <td>\n                        <a href=\"{% query 'machinetracker-ip' ip_range=result.ip days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\" target=\"_blank\">\n                            {{ result.ip }}\n                        </a>\n                    </td>\n\n                    <td>{{ result.dns }}</td>\n\n                    <td>\n                        <a href=\"{% query 'machinetracker-mac' mac=result.mac days=100 dns='on' %}\"\n                           title=\"Link to Machine Tracker\" target=\"_blank\">\n                            {{ result.mac }}\n                        </a>\n                    </td>\n\n                    <td>{{ result.netbios }}</td>\n                    <td>{{ result.status }}</td>\n                    <td>{{ result.justification }}</td>\n                    <td>{{ result.last_changed|date:\"DATETIME_FORMAT\" }}</td>\n                    <td><a href=\"{% url 'arnold-details' result.id %}\">Details</a></td>\n                </tr>\n            {% endfor %}\n            </tbody>\n\n            <tfoot>\n                <tr>\n                    <th colspan=\"8\">\n                        {{ search_result|length }} result{{ search_result|pluralize:'s' }} found\n                    </th>\n                </tr>\n            </tfoot>\n\n        </table>\n    {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/arnold/tabs.html",
    "content": "{% extends 'arnold/base.html' %}\n\n{% block content %}\n  <div class=\"tabs\">\n\n    <ul>\n      <li class=\"{{ active.history|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'arnold-history' %}\">History</a>\n      </li>\n      <li class=\"{{ active.detentions|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'arnold-detainedports' %}\">Detained ports</a>\n      </li>\n      {#            <li class=\"{{ active.search|yesno:\"tabactive,\" }}\"><a href=\"{% url 'arnold-search' %}\">Search</a></li>#}\n      <li class=\"{{ active.justifications|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'arnold-justifications' %}\">Detention reasons</a>\n      </li>\n{#      <li class=\"{{ active.manualdetention|yesno:\"tabactive,\" }}\">#}\n{#        <a href=\"{% url 'arnold-manual-detention' %}\">Manual detention</a>#}\n{#      </li>#}\n      <li class=\"{{ active.quarantinevlans|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'arnold-quarantinevlans' %}\">Quarantine vlans</a>\n      </li>\n      <li class=\"{{ active.detentionprofiles|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'arnold-detention-profiles' %}\">Detention profiles</a>\n      </li>\n    </ul>\n\n    <div class=\"tabcontent\">\n      {% block tabcontent %}\n      {% endblock %}\n    </div>\n\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/auditlog/_logentry_list.html",
    "content": "<label id=\"filter-verb-label\" style=\"display:none\">\n  Filter by verb\n  <select id=\"filter-verb\">\n    <option value=\"\">------------</option>\n    {% for verb in auditlog_verbs %}\n      <option value=\"{{ verb }}\">{{ verb }}</option>\n    {% endfor %}\n  </select>\n</label>\n\n{% if netbox %}\n  <h3>{{ netbox }}</h3>\n{% endif %}\n\n<table id=\"auditlog\" class=\"listtable\" width=\"100%\">\n  <thead>\n    <tr>\n      <th>Timestamp</th>\n      <th>Actor</th>\n      <th>Verb</th>\n      <th>Object</th>\n      <th>Target</th>\n      <th>Summary</th>\n    </tr>\n  </thead>\n</table>\n\n<style>\n #auditlog-top > div { display: inline-block; margin-right: 1em; }\n #auditlog-top label { display: inline-block; }\n #auditlog-top input, #auditlog-top select { display: block; max-width: 15em; }\n</style>\n\n<script type=\"text/javascript\">\n require(['libs/urijs/URI', 'moment', 'datatables', 'dt_config'], function(Uri, moment, DataTable) {\n     var api_parameters = {{ auditlog_api_parameters|safe|default:'{}' }};\n     var orderingFields = {\n         0: 'timestamp',\n         1: 'actor_sortkey',\n         2: 'verb',\n         3: 'object_sortkey',\n         4: 'target_sortkey'\n     };\n\n     /* Utility function to escape HTML special characters to prevent XSS */\n     function escapeHtml(text) {\n         if (!text) return text;\n\n         const div = document.createElement('div');\n         div.textContent = text; // The browser automatically escapes special characters\n         return div.innerHTML;\n     }\n\n     /* Render an entity (actor/object/target) as a link if URL is available */\n     function renderEntity(data) {\n         if (!data) return '';\n         const name = escapeHtml(data.name);\n         if (data.url) {\n             return '<a href=\"' + escapeHtml(data.url) + '\">' + name + '</a>';\n         }\n         return name;\n     }\n\n     var dt_config = {\n         serverSide: true,  // Everything is done serverside - sorting, filtering, etc.\n         ajax: {\n             url: '/api/2/auditlog/',\n             data: function(d) {\n                 // Override the original parameters that we get when using serverSide rendering\n                 var parameters = {\n                     page: d.start / d.length + 1,\n                     search: d.search.value,\n                     page_size: d.length,\n                     ordering: d.order.map(function(order) {\n                         var direction = order.dir === 'asc' ? '' : '-';\n                         return direction + orderingFields[order.column];\n                     }).join(',')\n                 }\n                 return Object.assign(parameters, api_parameters);\n             },\n             dataFilter: function(data) {\n                 // Map the response to something datatables understands\n                 const json = JSON.parse( data );\n                 json.recordsTotal = json.count;\n                 json.recordsFiltered = json.count;\n                 json.data = json.results;\n                 return JSON.stringify( json );\n             }\n         },\n         columns: [\n             {\n                 data: 'timestamp',\n                 render: function(data, type, row, meta) {\n                     return moment(data).format('YYYY-MM-DD HH:mm:ss');\n                 }\n             },\n             {\n                 data: 'actor',\n                 render: renderEntity\n             },\n             { data: 'verb' },\n             {\n                 data: 'object',\n                 render: renderEntity\n             },\n             {\n                 data: 'target',\n                 render: renderEntity\n             },\n             {\n                 data: 'summary',\n                 orderable: false,\n                 render: escapeHtml\n             }\n         ],\n         autowidth: false,\n         info: false,\n         searching: true,\n         searchDelay: 350,\n         ordering: true,\n         dom: '<\"#auditlog-top\"l<\"#dataTables_verbs\">f>t<p>',\n         order: [[0, 'desc']],\n         paging: true,\n         pagingType: 'full_numbers',\n         lengthChange: true,  // Change number of visible rows\n         lengthMenu: [\n             [10, 25, 50, -1],   // Choices for number of rows to display\n             [10, 25, 50, \"All\"] // Text for the choices\n         ],\n         language: {\n             lengthMenu: \"Rows _MENU_\",\n             search: \"Search\"\n         },\n         drawCallback: drawCallback,\n     };\n\n     var dataTable = $('table#auditlog').DataTable(dt_config);\n\n     // Listen to an event for reloading of data\n     $(document).on('nav-portadmin-ajax-success', function(){\n         dataTable.ajax.reload();\n     });\n\n     {% if auditlog_verbs %}\n     // Add form for filtering on verbs\n     $('#filter-verb-label').appendTo('#dataTables_verbs').show();\n     $('#filter-verb').on('change', function(e) {\n         var url = Uri(dataTable.ajax.url()).setQuery('verb', e.target.value);\n         dataTable.ajax.url(url).load()\n     });\n     {% endif %}\n\n\n     function drawCallback(oSettings) {\n         $('.paginate_button').removeClass('secondary').addClass('button tiny');\n         $('.paginate_button.current').addClass('secondary');\n         $('.ellipsis').addClass('button tiny secondary disabled paginate_button');\n     }\n\n });\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/auditlog/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n<link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\">\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:\"Audit Log\" %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% if messages %}\n    {% for message in messages %}\n      <div class=\"alert-box {{ message.tags }}\">\n        {{ message }}\n      </div>\n    {% endfor %}\n  {% endif %}\n\n  {% block page_content %}\n\n  {% block content %}{% endblock %}\n\n  {% endblock page_content %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/auditlog/overview.html",
    "content": "{% extends \"auditlog/base.html\" %}\n\n{% block content %}\n  {% include \"auditlog/_logentry_list.html\" %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/base.html",
    "content": "{% block base_header %}<!DOCTYPE html>\n<html>\n\n{# FIXME Hardcoded urls #}\n\n{% block base_header_head %}\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <title>{% block base_header_title %}{{ title }}{% endblock %}</title>\n    <link rel=\"shortcut icon\" href=\"{{ STATIC_URL }}images/main/favicon.ico\">\n\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav.css\" />\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/custom.css\" />\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/calendar.css\" />\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/treeselect.css\" />\n    {% comment %} Javascript global variables {% endcomment %}\n    <script src=\"{{ STATIC_URL }}js/libs/jquery-4.0.0.min.js\"></script>\n    <script src=\"{{ STATIC_URL }}js/libs/htmx-2.0.4.min.js\"></script>\n    <script src=\"{{ STATIC_URL }}js/src/plugins/csrf-utils.js\"></script>\n    <script>\n      // Global CSRF token setup for all HTMX requests.\n      // This approach is used because we have 7+ locations in the codebase with\n      // hx-post elements outside forms that lack CSRF tokens, which would break\n      // when CSRF protection is enabled. A global handler provides a safety net.\n      // See: https://docs.djangoproject.com/en/5.0/howto/csrf/\n      document.addEventListener('htmx:configRequest', function(event) {\n          const token = getCsrfToken();\n          if (token) {\n              event.detail.headers['X-CSRFToken'] = token;\n          }\n      });\n    </script>\n    {% include 'navurls.html' %}\n    <script src=\"{{ STATIC_URL }}js/require_config.js\"></script>\n    {% if debug %}\n      <script src=\"{{ STATIC_URL }}js/require_config_dev.js\"></script>\n    {% endif %}\n    <script src=\"{{ STATIC_URL }}js/libs/require-2.0.4.min.js\" data-main='src/main'></script>\n    <script>\n      require.config({ urlArgs: 'bust={{ nav_version }}' });\n    </script>\n    {% block base_header_additional_head %}\n    {% endblock %}\n</head>\n{% endblock %}\n\n\n{% block base_body_start %}\n<body class='nav-body'>\n{% endblock %}\n\n\n{% comment %} TOP BAR {% endcomment %}\n<nav class=\"top-bar\">\n  <ul class=\"title-area\">\n    <li class=\"name\">\n      <h1>\n        <a href=\"/\" title=\"Network Administration Visualized\">\n          <img class=\"nav-logo\" src=\"{{ STATIC_URL }}images/main/nav-logo.svg\" alt=\"NAV\">\n        </a>\n      </h1>\n    </li>\n    <li class=\"toggle-topbar menu-icon\">\n      <a href=\"#\"><span>Menu</span></a>\n    </li>\n  </ul>\n\n\n  <section class=\"top-bar-section\">\n    <ul class=\"left\">\n      <li class=\"has-form search\">\n        {% include \"info/_navbar_search_form.html\" %}\n      </li>\n    </ul>\n\n    <ul class=\"right\">\n      {% comment %} This dropdown only visible on small screens {% endcomment %}\n      <li class=\"has-dropdown hide-for-medium-up\">\n        <a href=\"{% url 'webfront-toolbox' %}\">\n          Tools\n        </a>\n        <ul id=\"toolboxdropdown\" class=\"dropdown\">\n          {% for tool in current_user_data.tools %}\n            <li>\n              <a href=\"{{ tool.uri }}\">\n                <img src=\"{{ tool.icon }}\" alt=\"{{ tool.name }}\">\n                {{ tool.name }}\n              </a>\n            </li>\n          {% endfor %}\n        </ul>\n      </li>\n\n      <li class=\"hide-for-small text-center\"><a id=\"megadroptoggler\" href=\"javascript:void(0);\">Tools <i class=\"fa fa-caret-down\"></i></a></li>\n\n      {% if not current_user_data.account.is_anonymous %}\n        <li class=\"has-dropdown\">\n          <a href=\"javascript:void(0);\">\n            My stuff\n          </a>\n          <ul class=\"dropdown\">\n            {% for link in current_user_data.my_links %}\n              <li><a href=\"{{ link.uri }}\">{{ link.name }}</a></li>\n            {% endfor %}\n            <li class=\"divider\"><a href=\"{% url 'webfront-preferences' %}\">My account <i class=\"fa fa-gear\"></i></a></li>\n            <li class=\"divider\"><a hx-get=\"{% url 'webfront-qr-code' %}\" hx-target=\"body\" hx-swap=\"beforeend\">QR Code <i class=\"fa fa-qrcode\"></i></a></li>\n          </ul>\n        </li>\n      {% endif %}\n      {% if current_user_data.account.is_anonymous %}\n        <li>\n            <a class=\"navbar login button secondary\" href=\"{{ login_url }}\">Login</a>\n        </li>\n      {% else %}\n        <li>\n            <a class=\"navbar logout button secondary\" href=\"{{ logout_url }}\">Logout {{ current_user_data.account.login }}</a>\n        </li>\n      {% endif %}\n    </ul>\n  </section>\n</nav>\n\n  {% comment %}\n\n  MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP\n  MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP\n  MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP\n  MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP\n  MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP MEGADROP\n\n  {% endcomment %}\n  <div class=\"megadropcontainer\">\n    <div id=\"megadrop\" class=\"row hidden\">\n      {% comment %} split_tools are split into 3 lists of tools {% endcomment %}\n      <div class=\"small-12 column\">\n\n        <h5>NAV Tools</h5>\n\n        <hr>\n\n        <div class=\"row\">\n          {% for column in current_user_data.split_tools %}\n            <div class=\"medium-4 column\">\n              <ul class=\"no-bullet\">\n                {% for tool in column %}\n                  <li>\n                    <a href=\"{{ tool.uri }}\" title=\"{{ tool.description }}\">\n                      <img src=\"{{ tool.icon }}\" alt=\"\">\n                      {{ tool.name }}\n                    </a>\n                  </li>\n                {% endfor %}\n              </ul>\n            </div>\n          {% endfor %}\n        </div>\n\n        <div class=\"row\">\n          <div class=\"small-12 column\">\n            <p><a href=\"{% url 'webfront-toolbox' %}\">Go to toolbox</a></p>\n          </div>\n        </div>\n\n      </div>\n    </div>\n  </div> {# End megadropcontainer #}\n\n\n  {% if current_user_data.sudoer %}\n    <div class=\"info-bar\">\n        <form action=\"{% url 'webfront-logout' %}\" method=\"post\">\n            {% csrf_token %}\n            <img src=\"{{ STATIC_URL }}images/main/emblem-important.png\"\n                 alt=\"Important information\"/>\n            Hi <em>{{ current_user_data.sudoer.name }}</em>, you are currently\n            logged in as <em>{{ current_user_data.account.name }}</em>.\n            <input type=\"submit\" name=\"submit_desudo\" value=\"Log back in as {{ current_user_data.sudoer.login }}\" class=\"button secondary small\"/>\n        </form>\n    </div>\n{% endif %}\n\n{% if current_user_data.password_issues %}\n    <div id=\"password-issues-bar\" class=\"info-bar\">\n        <img src=\"{{ STATIC_URL }}images/main/emblem-important.png\"/>\n        {{ current_user_data.password_issues.message }}\n        <a href=\"{{ current_user_data.password_issues.link }}\">{{ current_user_data.password_issues.link_message }}</a>\n    </div>\n{% endif %}\n\n{% comment %} BREADCRUMB {% endcomment %}\n{% include \"_breadcrumbs.html\" %}\n\n{% endblock base_header %}\n\n{% comment %} MAIN CONTENT {% endcomment %}\n{% block base_navbody_start %}\n<div class=\"row\">\n    <div class=\"large-12 columns navbody\">\n{% endblock %}\n\n    {% block base_content %}\n    {% endblock %}\n\n{% block base_navbody_end %}\n    </div>\n</div>\n{% endblock %}\n\n{% block base_footer %}\n  {% include 'footer.html' %}\n\n  {% block base_debug %}\n    {% if debug %}\n      {% if not current_user_data.account.is_anonymous %}\n        {% include \"debug.html\" %}\n      {% endif %}\n    {% endif %}\n  {% endblock %}\n\n\n  {% block footer_scripts %}{% endblock %}\n\n  </body>\n</html>\n\n{% endblock base_footer %}\n"
  },
  {
    "path": "python/nav/web/templates/business/base.html",
    "content": "{% extends 'base.html' %}\n{% load tools %}\n\n\n{% block base_header_additional_head %}\n  <script>require(['src/business']);</script>\n  <script>\n   NAV.urls.render_report_subscriptions = \"{% url 'render-report-subscriptions' %}\";\n   NAV.urls.remove_report_subscription = \"{% url 'remove-report-subscription' %}\";\n   NAV.urls.save_report_subscription = \"{% url 'save-report-subscription' %}\";\n  </script>\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/business.css\">\n{% endblock %}\n\n\n{% block base_content %}\n\n\n  {% with tool=current_user_data.tools|get_tool:'Business reports' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n  {% block content %}\n    <h3>Available reports</h3>\n    <ul id=\"report-list\" class=\"small-block-grid-2 medium-block-grid-3 large-block-grid-4\">\n      {% for report in available_reports %}\n        <li>\n          {% include 'business/frag-report-card.html' %}\n        </li>\n      {% endfor %}\n    </ul>\n\n\n    <div class=\"panel white\">\n\n      <h4>Subscribe to email reports</h4>\n      <p class=\"alert-box info\">\n        The first day of a new period an email containing last periods report will be sent to you.\n      </p>\n      <form id=\"subscription-form\" class=\"inline-form\" method=\"post\" action=\"{% url 'save-report-subscription' %}\">\n        {% csrf_token %}\n        <input type=\"hidden\" name=\"report_type\" value=\"{{ report_type }}\"/>\n        Send\n        <select name=\"period\">\n          {% for period in subscription_periods  %}\n            <option value=\"{{ period.0 }}\">{{ period.1 }}</option>\n          {% endfor %}\n        </select>\n        reports for\n        <select name=\"report_type\">\n          {% for report_type in report_types  %}\n            <option value=\"{{ report_type.0 }}\">{{ report_type.1 }}</option>\n          {% endfor %}\n        </select>\n        to\n        {% if request.user.get_email_addresses|length %}\n          <select name=\"address\">\n            {% for address in request.user.get_email_addresses  %}\n              <option value=\"{{ address.pk }}\">{{ address.address }}</option>\n            {% endfor %}\n          </select>\n        {% else %}\n          <input type=\"email\" name=\"new_address\" placeholder=\"email address\">\n        {% endif %}\n        <label>\n          Exclude maintenance\n          <input type=\"checkbox\" name=\"exclude_maintenance\">\n        </label>\n        <input type=\"submit\" class=\"button small\" value=\"Subscribe\">\n      </form>\n\n      <h5>Your subscriptions</h5>\n      <ul id=\"subscription-list\">\n        {% include 'business/frag-report-items.html' %}\n      </ul>\n\n      <p id=\"undounsubscribe\"\n         class=\"alert-box warning\"\n         style=\"max-width: 30em; display: none; justify-content: space-between; align-items: center;\">\n        Subscription removed.\n        <button class=\"tiny\" style=\"margin-bottom: 0\">Undo</button>\n      </p>\n\n\n    </div>\n  {% endblock %}\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/business/email.html",
    "content": "<style>\n td, th { padding-right: 1em; }\n th { text-align: left; }\n table { margin-bottom: 2em; }\n</style>\n\n<table>\n  <caption>\n    Downtime for period {{ start }} - {{ end }}\n  </caption>\n  <thead>\n    <tr>\n      <th>Subject</th>\n      <th>Incidents</th>\n      <th>Downtime</th>\n      <th>Availability</th>\n    </tr>\n  </thead>\n\n  <tbody>\n    {% for record in records %}\n      <tr>\n        <td>\n          {{ record.subject }}\n          {% if record.maintenances %}\n            *\n          {% endif %}\n        </td>\n        <td>{{ record.incidents|length }}</td>\n        <td>{{ record.downtime }}</td>\n        <td>{{ record.availability }}</td>\n      </tr>\n    {% empty %}\n      <tr>\n        <td>No downtime this period</td>\n      </tr>\n    {% endfor %}\n  </tbody>\n</table>\n\n{% if exclude_maintenance %}\n  <p>* = time in maintenance subtracted</p>\n{% endif %}\n\n\n<p>\n  {% include 'business/frag-unsubscribe.html' %}\n</p>\n"
  },
  {
    "path": "python/nav/web/templates/business/email.txt",
    "content": "Downtime for period {{ start }} - {{ end }}\n{% if exclude_maintenance %}\n* Time in maintenance subtracted\n{% endif %}\n{{ 'Subject'|stringformat:subject_format }} {{ 'Incidents'|stringformat:\"-10s\" }} {{ 'Downtime'|stringformat:\"-20s\" }} {{ 'Availability' }}\n------------------------------------------------------------------------------------------{% for record in records %}\n{{ record.subject|stringformat:subject_format }} {% if record.maintenances %}*{% else %} {% endif %} {{ record.incidents|length|stringformat:\"-10s\" }} {{ record.downtime|stringformat:\"-20s\" }} {{ record.availability }}{% empty %}\nNo downtime this period\n{% endfor %}\n\n\n{% include 'business/frag-unsubscribe.html' %}\n"
  },
  {
    "path": "python/nav/web/templates/business/frag-report-card.html",
    "content": "<a href=\"{{ report.get_url }}\" class=\"button full-width\">\n  <h3>{{ report.report_name }}</h3>\n  <p>\n    {{ report.description }}\n  </p>\n  <small>Click to view report</small>\n</a>\n"
  },
  {
    "path": "python/nav/web/templates/business/frag-report-items.html",
    "content": "{% for subscription in request.user.report_subscriptions.all  %}\n  <li>\n    {{ subscription }}\n    <button class=\"table-button secondary\"\n            data-subscription-object='{{ subscription.serialize }}'\n            data-subscription-id=\"{{ subscription.pk }}\">\n      Unsubscribe\n    </button>\n  </li>\n{% empty %}\n  <li>You have no subscriptions</li>\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/business/frag-unsubscribe.html",
    "content": "To stop getting these emails you go to the \"Business Reports\" tool in NAV and unsubscribe from the list of subscriptions there.\n"
  },
  {
    "path": "python/nav/web/templates/business/report-availability.html",
    "content": "{% extends 'business/report.html' %}\n{% load info %}\n{% load date_and_time %}\n\n\n{% block report-content %}\n\n  <h3>{{ report.report_name }}</h3>\n\n  <p>\n    {{ report.description  }}\n  </p>\n\n\n  {# Form for choosing period #}\n  I want a report for\n  <form id=\"report-form\" class=\"inline-form\">\n    <select name=\"report-month\">\n      {% for month in months %}\n        {{ start }}\n        {{ month }}\n        <option value=\"{{ month.year }}-{{ month.month }}\"\n                {% if start == month %}selected{% endif %}\n        >\n          {{ month|date:'F Y' }}\n        </option>\n      {% endfor %}\n    </select>\n    <input type=\"submit\" class=\"button small\" value=\"Fetch report\">\n    <label>\n      Exclude maintenance\n      <input name=\"exclude_maintenance\"\n             type=\"checkbox\"\n             {% if exclude_maintenance %}checked=\"checked\"{% endif %}></input>\n    </label>\n  </form>\n\n\n  {# Display records #}\n  {% if 'report-month' in request.GET %}\n\n    <table id=\"record-table\" class=\"listtable expandable\">\n      <caption>\n        Availability report for {{ start|date:'F Y' }}\n      </caption>\n\n      {# Table header #}\n      <thead>\n        <tr>\n          <th>Subject</th>\n          <th title=\"Number of incidents this month (click 'Show' for details)\">Incidents</th>\n          <th title=\"Total downtime this month\">Downtime</th>\n          <th title=\"Availability as a percentage of total uptime this month\">Availability</th>\n        </tr>\n      </thead>\n\n      {# Table body #}\n      <tbody>\n\n        {% for record in records %}\n          {# Main information row #}\n          <tr class=\"record-row\">\n            <td>\n              {% if record.subject %}\n                <a href=\"{{ record.subject.get_absolute_url }}\">\n                  {{ record.subject }}\n                </a>\n              {% else %}\n                <em>N/A</em>\n              {% endif %}\n            </td>\n            <td>\n              {{ record.incidents|length }}\n              <a href=\"javascript:void(0);\" class=\"toggle-incident pull-right\">\n                Show\n              </a>\n            </td>\n            <td>{{ record.downtime }}</td>\n            <td>\n              {{ record.availability|floatformat:\"-3\" }}%\n            </td>\n          </tr>\n\n          {# Hidden incidents row #}\n          <tr class=\"hidden incident-row\">\n            <td colspan=\"4\">\n              <div>\n                <b>{{ record.incidents|length }} incident{{ record.incidents|pluralize }}</b>\n                <ul>\n                  {% for incident in record.incidents %}\n                    <li>\n                      <em>{{ incident.alert_type.name }}</em> &mdash;\n                      {{ incident.start_time }} -\n                      {% if incident.end_time|is_max_timestamp %}\n                        Incident has not ended\n                      {% else %}\n                        {{ incident.end_time }}\n                      {% endif %}\n                      &mdash;\n                      Total downtime: {{ incident.get_downtime|remove_microseconds }}\n                    </li>\n                  {% endfor %}\n                  {% for maintenance in record.maintenances  %}\n                    <li>\n                      <em>On maintenance</em> &mdash;\n                      {{ maintenance.start_time }} -\n                      {% if maintenance.end_time|is_max_timestamp %}\n                        Maintenance has not ended\n                      {% else %}\n                        {{ maintenance.end_time }}\n                      {% endif %}\n\n                    </li>\n                  {% endfor %}\n                </ul>\n              </div>\n            </td>\n          </tr>\n\n        {% empty %}\n          <tr>\n            <td colspan=\"4\">\n              No downtime in {{ start|date:'F Y' }}\n            </td>\n          </tr>\n        {% endfor %} {# End listing of records #}\n      </tbody>\n\n    </table>\n\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/business/report.html",
    "content": "{% extends 'business/base.html' %}\n\n{% block content %}\n\n  <a href=\"{% url 'business-index' %}\">Back to report index</a>\n\n  <section id=\"report-content\" class=\"panel white\">\n    {% block report-content %}\n\n    {% endblock %}\n  </section>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/components/popover/_close_button.html",
    "content": "{# Close button for use inside popovers #}\n<button type=\"button\" class=\"button small {{ classes }} close-button\" data-close-popover>{{ text }}</button>\n"
  },
  {
    "path": "python/nav/web/templates/components/popover/_confirm_popover.html",
    "content": "{# Confirmation popover with form action #}\n<div id=\"{{ id }}\" class=\"popover with-arrow\"{% if side != \"bottom\" %} data-side=\"{{ side }}\"{% endif %}{% if align != \"start\" %} data-align=\"{{ align }}\"{% endif %}>\n  {% if trigger_text %}\n  <button\n      class=\"{{ trigger_classes }}\"\n      data-popover-target=\"#{{ id }}\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n  >\n      {% if trigger_icon %}<i class=\"fa {{ trigger_icon }} deleteicon\"></i> {% endif %}{{ trigger_text }}\n  </button>\n  {% else %}\n  <a\n      data-popover-target=\"#{{ id }}\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n  >\n      <i class=\"fa {{ trigger_icon }} deleteicon\"></i>\n  </a>\n  {% endif %}\n  <div class=\"popover-content {{ size }}\">\n    <h5>{{ title }}</h5>\n    <form action=\"{{ action_url }}\" method=\"POST\">\n      {% csrf_token %}\n      <button type=\"submit\" class=\"button small alert left\">{{ confirm_text }}</button>\n      <button type=\"button\" class=\"button small secondary close-button left\" data-close-popover>{{ cancel_text }}</button>\n    </form>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/_form_content.html",
    "content": "{# NB! This template can be used directly (without form template wrapper) for cases where form.helper.form_tag is set to False. #}\n{% load forms %}\n\n{% if not disable_csrf %}\n    {% csrf_token %}\n{% endif %}\n\n{% include 'foundation-5/errors.html' %}\n\n{% block form_fields %}\n  {% if form.attrs.form_fields %}\n    {% include 'custom_crispy_templates/_form_fields.html' with fields=form.attrs.form_fields %}\n  {% else %}\n    {% for field in form %}\n      {% show_field field %}\n    {% endfor %}\n  {% endif %}\n  {% if form.attrs.submit_field %}\n    {% include 'custom_crispy_templates/submit_field.html' with input=form.attrs.submit_field %}\n  {% endif %}\n{% endblock form_fields %}\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/_form_field.html",
    "content": "{% load forms %}\n\n{% if field.template %}\n  {% include field.template %}\n{% elif field.input_type == 'submit' or field.input_type == 'button' %}\n  {% include 'custom_crispy_templates/submit_field.html' with input=field %}\n{% elif field.input_type == 'helpfield' %}\n  {% include 'custom_crispy_templates/field_helptext_as_icon.html' with field=field.field %}\n{% else %}\n  {% show_field field %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/_form_fields.html",
    "content": "{% for field in form.attrs.form_fields %}\n  {% include 'custom_crispy_templates/_form_field.html' %}\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/field_helptext_as_icon.html",
    "content": "{% load forms %}\n{% spaceless %}\n  {% if field.is_hidden %}\n    {{ field }}\n  {% else %}\n      <div id=\"div_{{ field.auto_id }}\" class=\"ctrlHolder{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.errors %} error{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}\">\n        {% if field.label %}\n          {% if field|is_checkbox %}\n            {{ field }}\n          {% endif %}\n\n            <label for=\"{{ field.id_for_label }}\" {% if field.field.required %}class=\"requiredField\"{% endif %}>\n              {{ field.label|safe }}{% if field.field.required %}<span class=\"asteriskField\">*</span>{% endif %}\n              {% if field.help_text %}\n                  <span class=\"nav-tooltip\">\n                      &nbsp;<i aria-describedby=\"hint_{{ field.auto_id }}\" class=\"fa fa-info-circle\" ></i>\n                      <span id=\"hint_{{ field.auto_id }}\" role=\"tooltip\">\n                          {{ field.help_text }}\n                      </span>\n                  </span>\n              {% endif %}\n            </label>\n        {% endif %}\n\n        {% if not field|is_checkbox %}\n          {{ field }}\n        {% endif %}\n\n        {% for error in field.errors %}\n          <small id=\"error_{{ forloop.counter }}_{{ field.auto_id }}\"\n                class=\"errorField\">\n            {{ error }}\n          </small>\n        {% endfor %}\n\n      </div>\n  {% endif %}\n{% endspaceless %}\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/flat_fieldset.html",
    "content": "<fieldset\n    {% if field.css_class %} class=\"{{ field.css_class }}\" {% endif %}\n>\n  {% if field.legend %}\n    <legend>\n      {% block fieldset_legend %}\n        {{ field.legend }}\n      {% endblock %}\n    </legend>{% endif %}\n  {% block fieldset_fields %}\n    {% for field in field.fields %}\n      {% include 'custom_crispy_templates/_form_field.html' %}\n    {% endfor %}\n  {% endblock %}\n</fieldset>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/flat_form.html",
    "content": "<form method=\"{{ form.attrs.method }}\"\n      {% if form.attrs.action %}action=\"{% url form.attrs.action %}\"{% endif %}\n      {% if form.attrs.form_class %}class=\"{{ form.attrs.form_class }}\"{% endif %}\n      {% if form.attrs.form_id %}id=\"{{ form.attrs.form_id }}\"{% endif %}\n>\n  {% block form_content %}\n    {% include 'custom_crispy_templates/_form_content.html' %}\n  {% endblock %}\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/form_checkbox.html",
    "content": "{% with input=field.field %}\n    <div id=\"div_{{ input.auto_id }}\" class=\"ctrlHolder{% if input.errors %} error{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}\">\n        <label for=\"{{ input.id_for_label }}\">\n            {{ input.label}}{% if input.field.required %}<span class=\"asteriskField\">*</span>{% endif %}\n            {{ input }}\n        </label>\n        {% for error in input.errors %}\n            <small id=\"error_{{ forloop.counter }}_{{ input.auto_id }}\" class=\"errorField\">\n                {{ error }}\n            </small>\n        {% endfor %}\n    </div>\n{% endwith %}\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/form_column.html",
    "content": "{# NB! This form row can only render fields that are supported by custom_crispy_templates/_form_field.html #}\n\n<div\n    class=\"columns {{ field.css_classes|default:'large-12' }}\"\n>\n  {% block formcolumn_content %}\n    {% for field in field.fields %}\n      {% include 'custom_crispy_templates/_form_field.html' %}\n    {% endfor %}\n  {% endblock %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/form_div.html",
    "content": "{# NB! This form div can only render fields that are supported by custom_crispy_templates/_form_field.html #}\n\n<div\n  {% if field.css_classes %} class=\"{{ field.css_classes }}\" {% endif %}\n>\n  {% block formdiv_content %}\n    {% for field in field.fields %}\n      {% include 'custom_crispy_templates/_form_field.html' %}\n    {% endfor %}\n  {% endblock %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/form_row.html",
    "content": "{# NB! This form row can only render fields that are supported by custom_crispy_templates/_form_field.html #}\n\n<div\n    class=\"row{% if field.css_classes %} {{ field.css_classes }}{% endif %}\"\n>\n  {% block formrow_content %}\n    {% for field in field.fields %}\n      {% include 'custom_crispy_templates/_form_field.html' %}\n    {% endfor %}\n  {% endblock %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/horizontal_checkbox.html",
    "content": "<div id=\"div_{{ field.auto_id }}\" class=\"ctrlHolder{% if field.errors and form_show_errors %} error{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}\">\n    <label for=\"{{ field.id_for_label }}\">\n        {{ field.label|safe }}{% if field.field.required %}<span class=\"asteriskField\">*</span>{% endif %}\n        {{ field }}\n    </label>\n    {% if form_show_errors %}\n        {% for error in field.errors %}\n            <small id=\"error_{{ forloop.counter }}_{{ field.auto_id }}\" class=\"errorField\">\n                {{ error }}\n            </small>\n        {% endfor %}\n    {% endif %}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/custom_crispy_templates/submit_field.html",
    "content": "{# NB! This field can be used as a replacement of crispy's Submit #}\n{% if input.has_empty_label %}\n   <label>&nbsp;</label>\n{% endif %}\n<input type=\"submit\"\n       name=\"{% if input.name|wordcount > 1 %}{{ input.name|slugify }}{% else %}{{ input.name }}{% endif %}\"\n       value=\"{{ input.value }}\"\n    {% if input.input_type != \"hidden\" %}\n       class=\"submit button {{ input.css_classes }}\"\n       id=\"{% if input.id %}{{ input.id }}{% else %}{{ input.input_type }}-id-{{ input.name|slugify }}{% endif %}\"\n    {% endif %}\n/>\n"
  },
  {
    "path": "python/nav/web/templates/debug.html",
    "content": "<div id=\"debug\">\n    <p>\n        Debug: {{ sql_queries|length }} Quer{{ sql_queries|pluralize:\"y,ies\" }}\n        {% if sql_queries %}\n        (<span style=\"cursor: pointer;\" onclick=\"var s=document.getElementById('query_table').style; s.display=s.display=='none' ? '' : 'none'; this.innerHTML=this.innerHTML=='Show' ? 'Hide' : 'Show';\">Show</span>)\n        {% endif %}\n    </p>\n\n    {% if sql_queries %}\n    <table class=\"listtable reporttable\" id=\"query_table\" style=\"display: none;\">\n        <thead>\n            <tr>\n                <th>#</th>\n                <th>Query</th>\n                <th>Time</th>\n            </tr>\n        </thead>\n        <tbody>\n            {% for query in sql_queries %}\n            <tr>\n                <td>{{ forloop.counter }}</td>\n                <td>{{ query.sql|escape }}</td>\n                <td>{{ query.time }}</td>\n            </tr>\n            {% endfor %}\n        </tbody>\n    </table>\n    {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/_component-search-results.html",
    "content": "{% if results %}\n    {% for component_type, result in results.items %}\n        <div>\n            <label for=\"id_{{ component_type }}\" style=\"font-weight: bold;\">{{ result.label }}</label>\n            <select multiple id=\"id_{{ component_type }}\" name=\"{{ component_type }}\">\n                {% if result.has_grouping %}\n                    {% for optgroup, options in result.values %}\n                        <optgroup label=\"{{ optgroup }}\">\n                            {% for id, label in options %}\n                                <option value=\"{{ id }}\">{{ label }}</option>\n                            {% endfor %}\n                        </optgroup>\n                    {% endfor %}\n                {% else %}\n                    {% for id, label in result.values %}\n                        <option value=\"{{ id }}\">{{ label }}</option>\n                    {% endfor %}\n                {% endif %}\n            </select>\n            <div class=\"row\">\n                <button type=\"submit\" class=\"small secondary\" name=\"submit_{component_type}\">\n                    {{ result.button }}\n                </button>\n                <button\n                    type=\"button\" class=\"secondary small\"\n                    onclick=\"Array.from(document.getElementById('id_{{ component_type }}').options).forEach(opt => opt.selected = true);\"\n                >\n                    Select all\n                </button>\n            </div>\n        </div>\n    {% endfor %}\n{% else %}\n    <strong>No hits</strong>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/_component_search_input.html",
    "content": "<div class=\"row\">\n    <div class=\"large-8 column\">\n        <label for=\"component-search\" style=\"font-weight: bold;\">Search</label>\n        <input\n            id=\"component-search\"\n            name=\"search\"\n            class=\"form-control\"\n            type=\"search\"\n            placeholder=\"Begin typing to search for components...\"\n            hx-post=\"{% url post_url %}\"\n            hx-trigger=\"input changed delay:500ms, search\"\n            hx-target=\"#search-results\"\n            hx-indicator=\".htmx-indicator\"\n        />\n        <span class=\"htmx-indicator\">\n            <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"Loading spinner\" /> Searching...\n        </span>\n        <div id=\"search-results\"></div>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/_history_view_results.html",
    "content": "{% for group_name, group in history.items %}\n<table class=\"listtable full-width align-top\">\n    <caption>\n      {{ group_name }}\n      <span class=\"subtitle right\">{{ group|length }} items.</span>\n    </caption>\n\n    <thead>\n      <tr>\n        <th scope=\"col\">Netbox</th>\n        <th scope=\"col\">Serial</th>\n        <th scope=\"col\">Start time</th>\n        <th scope=\"col\">End time</th>\n        <th scope=\"col\">Event type</th>\n        <th scope=\"col\">Alert type</th>\n        <th scope=\"col\">Message</th>\n      </tr>\n    </thead>\n\n    <tfoot>\n      <tr>\n        <th scope=\"row\" colspan=\"10\">\n          {{ group|length }} items.\n        </th>\n      </tr>\n    </tfoot>\n\n    <tbody>\n      {% for h in group %}\n        <tr>\n            <td>\n                {% if h.netbox %}\n                    <a href=\"{{ h.netbox.get_absolute_url }}\">\n                        <div id=\"sysname-tooltip-{{ h.id }}\" class=\"nav-tooltip medium\">\n                        <span class=\"unstyled-tooltip\" aria-describedby=\"sysname-tooltip-{{ h.id }}\">\n                                {{ h.netbox.sysname }}\n                        </span>\n                            <div class=\"medium\" role=\"tooltip\">\n                                <span><strong>Location: </strong> {{ h.netbox.room.location }}</span><br/>\n                                <span><strong>Room: </strong> {{ h.netbox.room }}</span>\n                            </div>\n                        </div>\n                    </a>\n                {% else %}\n                    <div>None</div>\n                {% endif %}\n            </td>\n\n          <td>{{ h.device.serial|default_if_none:\"\" }}</td>\n          <td>{{ h.start_time }}</td>\n          <td>\n            {% if h.is_open %}\n              Unresolved\n            {% else %}\n              {{ h.end_time }}\n            {% endif %}\n          </td>\n          <td>{{ h.event_type.id }}</td>\n          <td>{{ h.alert_type.name }}</td>\n          <td>\n            {% if h.extra_messages %}\n              <ul class=\"no-bullet\">\n                {% for state,m in h.extra_messages.items %}\n                  <li class=\"sms_message\" id=\"sms_{{ forloop.parentloop.parentloop.counter }}-{{ forloop.parentloop.counter }}-{{ forloop.counter }}\">\n                    <i class=\"fa fa-envelope\" title=\"{{ m.email|linebreaks }}\"></i>\n                    <span>\n                      <a href=\"{% url 'event-details' h.pk %}\" title=\"See event details\">\n                        {{ m.sms }}\n                      </a>\n                    </span>\n                  </li>\n                {% endfor %}\n              </ul>\n            {% endif %}\n          </td>\n        </tr>\n      {% endfor %}\n    </tbody>\n</table>\n{% empty %}\n    <div class=\"alert-box info with-icon\">\n        No history entries found for the selected parameters.\n    </div>\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n    <link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/devicehistory.css\" />\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Device History' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n<div class=\"tabs\">\n    {% block tabs %}\n    <ul>\n        <li class=\"{{ active.device|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'devicehistory-search' %}\">Device History</a>\n        </li>\n        <li class=\"{{ active.error|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'devicehistory-registererror' %}\">Register Error\n            Event</a>\n        </li>\n        <li class=\"{{ active.module|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'devicehistory-module' %}\">Delete Module</a>\n        </li>\n    </ul>\n    {% endblock %}\n\n    <div class=\"tabcontent\">\n        {% if current_user_data.messages %}\n            <div class=\"alert-box\">\n                <ul class=\"messages no-bullet\">\n                    {% for m in current_user_data.messages %}\n                        <li class=\"{{ m.type }}\">{{ m.message }}</li>\n                    {% endfor %}\n                </ul>\n            </div>\n        {% endif %}\n\n        {% block tabcontent %}\n        {% endblock %}\n\n    </div>\n\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/base_history.html",
    "content": "{% extends \"devicehistory/base.html\" %}\n\n{% block tabcontent %}\n<div class=\"tabs\">\n    <ul>\n        <li class=\"{{ active.device.search|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'devicehistory-search' %}\">New search</a>\n        </li>\n        <li class=\"{{ active.device.history|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'devicehistory-view' %}\">Results</a>\n        </li>\n    </ul>\n    <div class=\"tabcontent\">\n        {% block devicehistory-content %}\n        {% endblock %}\n    </div>\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/confirm_error.html",
    "content": "{% extends \"devicehistory/register_error.html\" %}\n\n{% block devices %}\n    <h3>Selected devices</h3>\n    <ul class=\"no-bullet\">\n        {% for d in netbox %}\n            <li>\n                {{ d.sysname }}\n                <input type=\"hidden\" name=\"netbox\" value=\"{{ d.id }}\" />\n            </li>\n        {% endfor %}\n        {% for d in module %}\n            <li>\n                {{ d.netbox.sysname }} module: {{ d.module_number }}\n                <input type=\"hidden\" name=\"module\" value=\"{{ d.id }}\" />\n            </li>\n        {% endfor %}\n    </ul>\n    <div>\n        <input type=\"hidden\" name=\"confirm\" value=\"yes\" />\n        <input type=\"submit\" class=\"button small\" value=\"Confirm\" />\n    </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/debug.html",
    "content": "<div id=\"debug\">\n\n<p>Debug: {{ sql_queries|length }} Quer{{ sql_queries|pluralize:\"y,ies\" }}\n{% if sql_queries %}\n(<span style=\"cursor: pointer;\" onclick=\"var s=document.getElementById('query_table').style; s.display=s.display=='none' ? '' : 'none'; this.innerHTML=this.innerHTML=='Show' ? 'Hide' : 'Show';\">Show</span>)\n{% endif %}</p>\n\n{% if sql_queries %}\n<table class=\"listtable reporttable\" id=\"query_table\" style=\"display: none;\">\n    <thead>\n        <tr>\n            <th>#</th>\n            <th>Query</th>\n            <th>Time</th>\n        </tr>\n    </thead>\n    <tbody>\n        {% for query in sql_queries %}\n        <tr>\n            <td>{{ forloop.counter }}</td>\n            <td>{{ query.sql|escape }}</td>\n            <td>{{ query.time }}</td>\n        </tr>\n        {% endfor %}\n    </tbody>\n</table>\n{% endif %}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/delete_module.html",
    "content": "{% extends \"devicehistory/base.html\" %}\n\n{% block tabcontent %}\n\n  {% if modules %}\n\n    {% if confirm_delete %}\n      <h4>Do you really want to remove the selected modules?</h4>\n    {% else %}\n      <p class=\"panel\">\n        These modules are down. If you know that they are permanently gone, you\n        may remove them.\n      </p>\n    {% endif %}\n\n    <form method=\"post\"\n            {% if confirm_delete %}\n          action=\"{% url 'devicehistory-do_delete_module' %}\"\n            {% else %}\n          action=\"{% url 'devicehistory-module' %}\"\n            {% endif %}\n            >\n      {% csrf_token %}\n\n      {% include 'devicehistory/frag_moduletable.html' %}\n\n      {% if confirm_delete %}\n        <input type=\"hidden\" name=\"confirm_delete\" value=\"1\"/>\n        <button type=\"submit\">Yes</button>\n        <a href=\"{% url 'devicehistory-module' %}\" class=\"button secondary\">No</a>\n      {% else %}\n        <button type=\"submit\">Remove modules</button>\n      {% endif %}\n\n    </form>\n\n  {% else %}\n    <p class=\"panel\">\n      No modules down\n    </p>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/frag_moduletable.html",
    "content": "<table class=\"listtable\">\n  <caption>\n    {% if confirm_delete %}\n      Selected modules\n    {% else %}\n      Modules down\n    {% endif %}\n    <span class=\"subtitle right\">{{ modules|length }} entr{{ modules|pluralize:\"y,ies\" }}</span>\n  </caption>\n\n  <thead>\n  <tr>\n    <th>&nbsp;</th>\n    <th>Sysname</th>\n    <th>Name</th>\n    <th>Description</th>\n    <th>Down since</th>\n    <th>Downtime</th>\n  </tr>\n  </thead>\n\n  {% if modules %}\n    <tbody>\n    {% for m in modules %}\n      <tr>\n        <td>\n          <input type=\"checkbox\" name=\"module\" value=\"{{ m.moduleid }}\" {% if confirm_delete %}checked=\"checked\"{% endif %}/>\n        </td>\n        <td>\n          <a href=\"{% url 'ipdevinfo-details-by-name' m.sysname %}\">{{ m.sysname|default_if_none:\"\" }}</a>\n        </td>\n        <td>\n          <a href=\"{% url 'ipdevinfo-module-details' m.sysname m.name %}\">{{ m.name }}</a>\n        </td>\n        <td>{{ m.descr|default_if_none:\"\" }}</td>\n        <td>{{ m.start_time|date:'DATETIME_FORMAT' }}</td>\n        <td>{{ m.start_time|timesince }}</td>\n      </tr>\n    {% endfor %}\n    </tbody>\n  {% endif %}\n\n  <tfoot>\n  <tr>\n    <th colspan=\"6\">\n      {{ modules|length }}\n      entr{{ modules|pluralize:\"y,ies\" }}\n    </th>\n  </tr>\n  </tfoot>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/history_search.html",
    "content": "{% extends \"devicehistory/base.html\" %}\n\n{% block tabcontent %}\n    <p class=\"panel\">\n        Search for a location, room, box, module, serial number, hostname, or IP to view device history. No components are shown until you search.\n    </p>\n    <form action=\"{% url 'devicehistory-search' %}\" method=\"get\">\n        <div class=\"row\">\n            <div class=\"large-8 column\">\n              {% include 'custom_crispy_templates/_form_content.html' with disable_csrf=True %}\n            </div>\n        </div>\n        {% include 'devicehistory/_component_search_input.html' with post_url='devicehistory-component-search' %}\n    </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/history_view.html",
    "content": "{% extends \"devicehistory/base.html\" %}\n\n{% block tabcontent %}\n  <a href=\"{% url 'devicehistory-search' %}\" class=\"button small secondary\">New search</a>\n\n  <div class=\"row\">\n    <div class=\"medium-9 columns\">\n      <form\n              hx-get=\"{% url 'devicehistory-view' %}\"\n              hx-target=\"#device-history-search-results\"\n              hx-swap=\"innerHTML\"\n      >\n        {% for type, elements in selection.items %}\n          {% for id in elements %}\n            <input type=\"hidden\" name=\"{{ type }}\" value=\"{{ id }}\" />\n          {% endfor %}\n        {% endfor %}\n        {% include 'custom_crispy_templates/_form_content.html' with disable_csrf=True %}\n        <input type=\"submit\" class=\"button small\" value=\"Filter\">\n      </form>\n    </div>\n\n    <div class=\"medium-3 columns\">\n      <div class=\"panel searchparams\">\n        <h5>Search parameters</h5>\n        {% for type, elements in search_description.items %}\n          <h6>{{ type|capfirst }}</h6>\n          <ul class=\"no-bullet\">\n            {% for id in elements %}\n              <li>{{ id }}</li>\n            {% endfor %}\n          </ul>\n        {% endfor %}\n      </div>\n    </div>\n\n  </div>\n\n  <div id=\"device-history-search-results\">\n    {% include \"./_history_view_results.html\" %}\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/devicehistory/register_error.html",
    "content": "{% extends \"devicehistory/base.html\" %}\n\n{% block tabcontent %}\n    <p class=\"panel\">\n        Register an error by searching for a box or module in the search box below.\n        Select one or more units and enter a description of the error.\n    </p>\n\n    <form action=\"{% url 'devicehistory-do-registererror' %}\" method=\"post\">\n        {% csrf_token %}\n        <div>\n            <label>Error comment<br />\n                <textarea name=\"error_comment\" rows=\"5\" cols=\"70\">{{ error_comment }}</textarea>\n            </label>\n        </div>\n        {% block devices %}\n        {% include 'devicehistory/_component_search_input.html' with post_url='devicehistory-registererror-component-search' %}\n        {% endblock %}\n    </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/footer.html",
    "content": "<footer class=\"row\">\n\n  {% comment %}\n    Left side column\n  {% endcomment %}\n  <div class=\"medium-4 column\">\n\n    <div class=\"about\">\n      <img class=\"footer-logo nav-logo\"\n           src=\"{{ STATIC_URL }}images/main/nav-logo-grey.svg\" alt=\"NAV\">\n\n      <p>\n        <a href=\"{% url 'webfront-about' %}\">NAV (Network Administration Visualized)</a> is a free network management\n        utility from Sikt, suitable for monitoring large computer networks.\n      </p>\n    </div>\n\n    <div class=\"about\">\n      <img class=\"footer-logo sikt-logo\"\n           src=\"{{ STATIC_URL }}images/main/sikt-logo-grey.svg\" alt=\"Sikt - Norwegian Agency for Shared Services in Research and Education\">\n\n      <p>\n        <a href=\"https://sikt.no/en/about-sikt\">Sikt</a> develops and delivers services for education and research that\n        makes life easier for students and employees. Sikt aims to ensure that everyone working in the education\n        and research sector has access to secure, stable and comprehensive services.\n      </p>\n    </div>\n\n  </div>\n\n\n  {% comment %}\n    Middle column\n  {% endcomment %}\n  <div class=\"medium-4 column\">\n\n    <div class=\"content-with-icon\">\n      <i class=\"fa fa-tachometer\"></i>\n\n      <div>\n        <h4 class=\"subheader\">NAV version</h4>\n\n        <p>\n          You are running <a\n                href=\"https://github.com/Uninett/nav/releases/tag/{{ nav_version }}/\">{{ nav_version }}</a>\n          , released under a <a\n                href=\"http://www.gnu.org/licenses/gpl-3.0.html\"> GNU GPLv3\n          license</a>.\n        </p>\n      </div>\n    </div>\n\n\n    <div class=\"content-with-icon\">\n      <i class=\"fa fa-book\"></i>\n\n      <div>\n        <h4 id=\"footer-documentation-link\" class=\"subheader\">Documentation</h4>\n\n        <p>\n          The <a href=\"/doc\" title=\"Documentation\">technical documentation</a>\n          includes how-to guides, troubleshooting and other reference material.\n          There is also a (mostly) self-documenting <a href=\"/api/\">REST API</a>.\n        </p>\n      </div>\n    </div>\n\n\n    <div class=\"content-with-icon\">\n      <i class=\"fa fa-picture-o\"></i>\n\n      <div>\n        <h4 class=\"subheader\">Postcards please</h4>\n\n        <p>\n          If NAV makes you happy, <a href=\"https://nav.uninett.no/wiki/postcard\">send\n          us a postcard</a> by snail mail, preferably with a picture from your\n          city or locale.\n        </p>\n      </div>\n    </div>\n\n  </div>\n\n\n  {% comment %}\n    Right side column\n  {% endcomment %}\n  <div class=\"medium-4 column\">\n\n    <div clasS=\"content-with-icon\">\n      <i class=\"fa fa-file-text\"></i>\n\n      <div>\n        {{ contact_information|safe }}\n      </div>\n    </div>\n\n  </div>\n</footer>\n"
  },
  {
    "path": "python/nav/web/templates/foundation-5/README.txt",
    "content": "Place templates for globally overriding crispy_forms_foundation templates in this directory.\n"
  },
  {
    "path": "python/nav/web/templates/foundation-5/errors.html",
    "content": "{% if form.errors and form.non_field_errors %}{% spaceless %}\n  {% if form_error_title %}<h3>{{ form_error_title }}</h3>{% endif %}\n  {% for non_field_error in form.non_field_errors %}\n    <div class=\"alert-box alert\">\n      {{ non_field_error }}\n    </div>\n  {% endfor %}\n{% endspaceless %}{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/foundation-5/errors_formset.html",
    "content": "{% if formset.non_form_errors %}\n  {% if formset_error_title %}<h3>{{ formset_error_title }}</h3>{% endif %}\n  {% for non_form_error in formset.non_form_errors %}\n    <div class=\"alert-box alert\">\n      {{ non_form_error }}\n    </div>\n  {% endfor %}\n\n{% endif %}\n\n"
  },
  {
    "path": "python/nav/web/templates/foundation-5/field.html",
    "content": "{% load forms %}\n\n{% if field.is_hidden %}\n  {{ field }}\n{% else %}\n  <div id=\"div_{{ field.auto_id }}\"\n       class=\"ctrlHolder{% if field.errors %} error{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}\"\n  >\n    {% spaceless %}\n\n      {% if field.label %}\n        {% if field|is_checkbox %}\n          {{ field }}\n        {% endif %}\n\n        <label for=\"{{ field.id_for_label }}\"\n               {% if field.field.required %}class=\"requiredField\"{% endif %}>\n          {{ field.label }}\n          {% if field.field.required %}\n            <span class=\"asteriskField\">*</span>\n          {% endif %}\n          {% if field.help_text %}\n            <span class=\"nav-tooltip\">\n                &nbsp;<i aria-describedby=\"hint_{{ field.auto_id }}\" class=\"fa fa-info-circle right\"></i>\n                <span id=\"hint_{{ field.auto_id }}\" class=\"medium\" role=\"tooltip\">\n                    {{ field.help_text }}\n                </span>\n            </span>\n          {% endif %}\n        </label>\n\n      {% endif %}\n\n      {% if not field|is_checkbox %}\n        {{ field }}\n      {% endif %}\n\n      {% for error in field.errors %}\n        <small id=\"error_{{ forloop.counter }}_{{ field.auto_id }}\"\n               class=\"error\">\n          {{ error }}\n        </small>\n      {% endfor %}\n\n    {% endspaceless %}\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/geomap/geomap-data-kml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n  <Document>\n    {% for feature in features %}\n    {% if feature.type == 'node' %}\n    <Placemark>\n      <name>Point {{ feature.id }}</name>\n      <description>\n        <![CDATA[{{ feature.popup.content }}]]>\n      </description>\n      <Point>\n        <coordinates>\n\t  {% for c in feature.geometry.coordinates %}{{ c }}{% if forloop.first %},{% endif %}{% endfor %}\n\t</coordinates>\n      </Point>\n    </Placemark>\n    {% else %}\n    <Placemark>\n      <name>Line {{ feature.id }}</name>\n      <description>\n        <![CDATA[{{ feature.popup.content }}]]>\n      </description>\n      <LineString>\n        <coordinates>\n\t  {% for lon, lat in feature.geometry.coordinates %}\n\t  {{ lon }},{{ lat }}\n\t  {% endfor %}\n        </coordinates>\n      </LineString>\n    </Placemark>\n    {% endif %}\n    {% endfor %}\n  </Document>\n</kml>\n"
  },
  {
    "path": "python/nav/web/templates/geomap/geomap.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/proj4js-compressed.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/projdefs/EPSG326xx.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/projdefs/EPSG327xx.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/libs/openlayers-2.12.min.js\"></script>\n  <script>OpenLayers.ImgPath = NAV.imagePath + '/openlayers/';</script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/util.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/coordinates.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/NetworkLayer.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/PopupControl.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/MyHTTPProtocol.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/Calendar.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/Time.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/TimeInterval.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/TimeNavigator.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/Permalink.js\"></script>\n  <script type=\"text/javascript\" src=\"{{ STATIC_URL }}js/geomap/geomap.js\"></script>\n\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/geomap.css\" />\n{% endblock %}\n\n\n{% block base_body_start %}\n  <body>\n{% endblock %}\n\n\n{% block base_content %}\n\n  <div class=\"row\">\n    <div class=\"small-12 columns\">\n      {% with tool=current_user_data.tools|get_tool:'Geomap' %}\n\t{% include 'nav_header.html' %}\n      {% endwith %}\n\n      <a href=\"javascript:void(0);\" id=\"time-panel-toggler\" class=\"button small secondary right\">\n\tMap options\n\t<i class=\"fa fa-caret-down\"></i>\n      </a>\n\n      <p>Variant:\n\t{% for other_variant in config.variants.values %}\n\t  {% if other_variant.identifier == variant %}\n\t    {{ other_variant.name }}\n\t  {% else %}\n\t    <a href=\"/geomap/{{ other_variant.identifier }}/\">{{ other_variant.name }}</a>\n\t  {% endif %}\n\t  {% if not forloop.last %}\n\t    |\n\t  {% endif %}\n\t{% endfor %}\n      </p>\n\n      <div id=\"position-hint\" class=\"alert-box warning hidden\">\n        No room positions found. You can add positions to your rooms in\n        <a href=\"{% url 'seeddb-room' %}\" title=\"Go to Seed DB\">Seed Database</a>.\n      </div>\n\n    </div>\n\n  </div>\n\n  <div class=\"row\">\n\n    <div id=\"time-panel\" class=\"small-12 column hidden map-control-bar\">\n      <div class=\"panel\">\n\t<div class=\"row\">\n\n          <div class=\"medium-4 columns\">\n            <h5>Time interval for load data</h5>\n            <p id=\"time-navigation-selected-time\"></p>\n            <p class=\"permalink\">\n              <a id=\"permalink\">Link to this configuration</a>\n            </p>\n\n            <!-- Form for toggling map state -->\n            <div style=\"overflow: auto;\">\n\t      <div class=\"left\" style=\"margin-right: 1em\">\n\t        <span>Show edges</span>\n\t        <div class=\"switch small round\">\n\t          <input id=\"edge-toggler\" type=\"checkbox\" checked>\n\t          <label for=\"edge-toggler\"></label>\n\t        </div>\n\t      </div>\n\t      <div class=\"left\">\n\t        <span>Show CPU and interface load</span>\n\t        <div class=\"switch small round\">\n\t          <input id=\"data-toggler\" type=\"checkbox\" checked>\n\t          <label for=\"data-toggler\"></label>\n\t        </div>\n\t      </div>\n            </div>\n\n          </div> {# end column #}\n\n          <div class=\"medium-4 columns\">\n            <div id=\"time-navigation\">\n              <p><h6>Interval size:</h6> <select id=\"time-navigation-interval-size\"></select></p>\n              <p>\n\t\t<span id=\"time-navigation-prev-jump\"></span>\n\t\t<span id=\"time-navigation-prev\"></span>\n\t\t<span id=\"time-navigation-next\"></span>\n\t\t<span id=\"time-navigation-next-jump\"></span>\n\t\t<span id=\"time-navigation-last\"></span>\n\t\t<span id=\"time-navigation-up\"></span>\n\t\t<select id=\"time-navigation-down\"></select>\n              </p>\n            </div>\n          </div>\n\n          <div class=\"medium-4 columns\">\n\n            <table id=\"time-navigation-calendar\">\n              <tr id=\"time-navigation-calendar-head-row\">\n\t\t<td id=\"time-navigation-calendar-prev-year\" title=\"Previous year\">&lt;&lt;</td>\n\t\t<td id=\"time-navigation-calendar-prev-month\" title=\"Previous month\">&lt;</td>\n\t\t<td id=\"time-navigation-calendar-header\"></td>\n\t\t<td id=\"time-navigation-calendar-next-month\" title=\"Next month\">&gt;</td>\n\t\t<td id=\"time-navigation-calendar-next-year\" title=\"Next year\">&gt;&gt;</td>\n              </tr>\n              <tr id=\"time-navigation-calendar-body\">\n\t\t<td colspan=\"5\">\n                  <table id=\"time-navigation-calendar-month\"></table>\n\t\t</td>\n              </tr>\n            </table>\n          </div>\n\n\t</div>\n      </div>\n    </div>\n\n  </div>\n\n  <div class=\"row\">\n    <div class=\"large-12 columns\" id=\"map-container\">\n      <!-- The map element -->\n      <div id=\"map\"></div>\n    </div>\n  </div>\n\n  <div class=\"row\">\n\n    <div class=\"small-12 columns\">\n      <div id=\"legend\" class=\"panel\">\n\t<div class=\"row\">\n\n          {% for indicator_list in variant_config.indicators.values %}\n            {% for indicator in indicator_list %}\n              <div class=\"small-6 medium-3 columns\">\n                <table>\n                  <thead>\n                    <tr>\n                      <th colspan=\"2\">{{ indicator.name }}</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {% for option in indicator.options %}\n                      <tr>\n\t\t\t<td>\n                          {% if indicator.property == 'color' %}\n                            <div class=\"colorbox\"\n\t\t\t\t style=\"background-color: {{ option.value }}\">\n                            </div>\n                          {% endif %}\n                          {% if indicator.property == 'size' %}\n                            {% if indicator.type == 'node' %}\n                              <div class=\"node-size-indicator\"\n\t\t\t\t   style=\"width: {{ option.value }}px; height: {{ option.value }}px\">\n                              </div>\n                            {% elif indicator.type == 'edge' %}\n                              <div class=\"edge-size-indicator\"\n\t\t\t\t   style=\"height: {{ option.value }}px\">\n                              </div>\n                            {% endif %}\n                          {% endif %}\n\t\t\t</td>\n\t\t\t<td>{{ option.label }}</td>\n                      </tr>\n                    {% endfor %}\n                  </tbody>\n\t\t</table>\n              </div>\n            {% endfor %}\n          {% endfor %}\n\n\t</div>\n      </div> {# End Panel #}\n    </div>\n\n  </div> {# End Row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/_image_help_modal.html",
    "content": "<ul class=\"inside\">\n  <li>\n    Add an image by clicking the file dialog, locating the image you want and clicking \"Upload image\"\n  </li>\n  <li>\n    Sort the images by dragging the <i class=\"fa fa-arrows\"></i> (if more than 1 image)\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/info/_image_upload_header.html",
    "content": "<div class=\"row\">\n    <div class=\"column small-12\">\n      <button\n          class=\"small secondary button right\"\n          hx-get=\"{% url 'info-image-help-modal' %}\"\n          hx-target=\"body\"\n          hx-swap=\"beforeend\"\n      >\n          Help\n      </button>\n      <h3>Images for &laquo;{{ id }}&raquo;</h3>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/_navbar_search_form.html",
    "content": "<form\n    id=\"navbar-search-form-mobile\"\n    class=\"hide-for-medium-up\"\n    action=\"{% url 'info-search' %}\"\n    method=\"get\"\n>\n  <div class=\"search-input-wrapper\">\n      <input id=\"query\" type=\"text\" name=\"query\" maxlength=\"100\"/>\n      <button class=\"secondary tiny\" type=\"submit\">Search</button>\n  </div>\n</form>\n<div id=\"navbar-search-form\" class=\"popover show-for-medium-up\">\n    <form\n        action=\"{% url 'info-search' %}\" method=\"get\"\n        autocomplete=\"off\"\n    >\n        <div class=\"search-input-wrapper\">\n            <input\n                id=\"query\"\n                aria-label=\"Search\"\n                type=\"text\"\n                name=\"query\"\n                maxlength=\"100\"\n                hx-get=\"{% url 'info-search-preview' %}\"\n                hx-trigger=\"input changed delay:500ms, query\"\n                hx-target=\"#navbar-search-results\"\n            />\n            <button class=\"secondary tiny\" type=\"submit\">Search</button>\n        </div>\n        <div id=\"navbar-search-results\" class=\"popover-content large\"></div>\n    </form>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/_navbar_search_results.html",
    "content": "{% load info %}\n{% if show_results %}\n    {% if not results %}\n    <div class=\"alert-box secondary\">No results for \"{{ query }}\"</div>\n    {% else %}\n        {% for provider in results %}\n        <div class=\"panel result-group\">\n            <h5>{{ provider.name }} ({{ provider.count }})</h5>\n            <div>\n                {% for item in provider.results %}\n                <a href=\"{{ item.href }}\" class=\"result-item\">\n                    {{ item.inst }}\n                    {% if item.matched_aliases %}\n                        aka {% for alias in item.matched_aliases %}\"{{ alias|highlight:query }}\"{% if not forloop.last %}, {% endif %}{% endfor %}\n                    {% endif %}\n                </a>\n                {% endfor %}\n            </div>\n            {% if provider.truncated %}\n            <div class=\"truncate-count\"><small>... {{ provider.truncated_count }} results hidden</small></div>\n            <button class=\"secondary tiny view-all-button\" type=\"submit\">\n                View all results\n            </button>\n            {% endif %}\n        </div>\n        {% endfor %}\n    {% endif %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/_search_form.html",
    "content": "<form\n      class=\"info-search-form\"\n      {% if form.attrs.action %}\n      hx-get=\"{% url form.attrs.action %}\"\n      hx-target=\"#search-results\"\n      hx-swap=\"innerHTML\"\n      hx-push-url=\"true\"\n      hx-indicator=\".htmx-indicator\"\n      {% endif %}\n      {% if form.attrs.form_class %}class=\"{{ form.attrs.form_class }}\"{% endif %}\n      {% if form.attrs.form_id %}id=\"{{ form.attrs.form_id }}\"{% endif %}\n>\n    {% block form_content %}\n        {% include 'custom_crispy_templates/_form_content.html' with disable_csrf=True %}\n    {% endblock %}\n    <div class=\"htmx-indicator\">\n        <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"Loading spinner\" />\n        <span>Searching...</span>\n    </div>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/info/_search_results.html",
    "content": "{% load info %}\n<div id=\"searchtabs\" class=\"ui-helper-hidden\">\n  {% if searchproviders and searchproviders|length > 0 %}\n    <ul>\n      {% for searchprovider in searchproviders %}\n        {% if searchprovider.results %}\n          <li><a href=\"#{{ searchprovider.name|cut:\" \" }}\">{{ searchprovider.name }} ({{ searchprovider.results|length }})</a></li>\n        {% endif %}\n      {% endfor %}\n    </ul>\n\n    {% for searchprovider in searchproviders %}\n      {% if searchprovider.results %}\n        <div id=\"{{ searchprovider.name|cut:\" \" }}\">\n          <table class=\"listtable full-width table-hover\">\n            <caption>\n              {{ searchprovider.name }}\n              <span class=\"subtitle right\">\n                {{ searchprovider.results|length }} result{{ searchprovider.results|pluralize:'s' }}\n              </span>\n            </caption>\n\n            <thead>\n              <tr>\n                {% for header, getter in searchprovider.headers %}\n                  <th>{{ header }}</th>\n                {% endfor %}\n              </tr>\n            </thead>\n\n            <tbody>\n              {% for result in searchprovider.results %}\n                <tr>\n                  {% for header, getter in searchprovider.headers %}\n                    <td>\n                      {% if header == searchprovider.link %}\n                        <a href=\"{{ result.href }}\">\n                          {{ result.inst|get_attr:getter }}\n                        </a>\n                      {% else %}\n                        {{ result.inst|get_attr:getter }}\n                      {% endif %}\n                    </td>\n                  {% endfor %}\n                </tr>\n              {% endfor %}\n            </tbody>\n          </table>\n        </div>\n      {% endif %}\n    {% endfor %}\n  {% else %}\n    <div class=\"alert-box secondary\">No results for \"{{ form.data.query }}\"</div>\n  {% endif %}\n</div>\n\n{% if failed_providers %}\n  <div class=\"alert-box alert\">\n    <p>Additionally, these search providers crashed:</p>\n    <ul>\n      {% for provider, error in failed_providers %}\n        <li><var>{{ provider }}</var>:<br/><blockquote>{{ error|stringformat:'r' }}</blockquote></li>\n      {% endfor %}\n    </ul>\n    <p>Error details have been logged.</p>\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <style>\n   .info-search-form {\n      display: flex;\n      gap: 1rem;\n      max-width: 500px;\n      & > div:first-child {\n        flex: 1;\n      }\n      .htmx-indicator {\n        margin-top: 6px;\n      }\n    }\n  </style>\n{% endblock %}\n\n\n{% block footer_scripts %}\n  <script>\n   require(['jquery-ui'], function () {\n        function initTabs() {\n            $('#searchtabs').tabs().show();\n        }\n        $(initTabs);\n        document.body.addEventListener('htmx:afterSwap', function(evt) {\n           if (evt.detail.target.id === 'search-results' ||\n                $(evt.detail.target).find('#searchtabs').length > 0) {\n              setTimeout(initTabs, 50);\n            }\n        });\n   });\n  </script>\n{% endblock %}\n\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Search' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <ul class=\"button-group\">\n    <li>\n      <a href=\"{% url 'ipdevinfo-search' %}\" class=\"button small secondary\">IP Device search</a>\n    </li>\n    <li>\n      <a href=\"{% url 'room-search' %}\" class=\"button small secondary\">Room search</a>\n    </li>\n    <li>\n      <a href=\"{% url 'location-search' %}\" class=\"button small secondary\">Location search</a>\n    </li>\n    <li>\n      <a href=\"{% url 'vlan-index' %}\" class=\"button small secondary\">VLAN search</a>\n    </li>\n    <li>\n      <a href=\"{% url 'prefix-index' %}\" class=\"button small secondary\">Prefix search</a>\n    </li>\n    <li>\n      <a href=\"{% url 'netbox-group' %}\" class=\"button small secondary\">Device group search</a>\n    </li>\n  </ul>\n\n\n  <div class=\"panel\">\n    {% block content %}\n\n      <div class=\"alert-box info\">\n        Search for IP devices, interfaces, rooms and vlans. This search is the\n        same as searching in the navbar.\n      </div>\n\n      {% include 'info/_search_form.html' %}\n\n      <div class=\"row\">\n        <div id=\"search-results\" class=\"large-6 medium-10 small-12 column\">\n          {% if form.is_bound %}\n            {% include 'info/_search_results.html' %}\n          {% endif %}\n        </div>\n      </div>\n\n    {% endblock content %}\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/_about_acknowledge_info.html",
    "content": "{% load popover %}\n{% popover popover_id=\"acknowledge-info\" trigger_text=\"About\" trigger_element=\"a\" title=\"About acknowledging\" %}\n  <p>\n    Acknowledged alerts will be hidden for all users, but not removed. When\n    an end event arrives the alert will be cleared normally.\n  </p>\n{% endpopover %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/_about_delete_info.html",
    "content": "{% load popover %}\n{% popover popover_id=\"delete-info\" trigger_text=\"About\" trigger_element=\"a\" title=\"About deleting module or chassis\" %}\n  <p>\n    NAV does not know if a module or chassis that has disappeared did so\n    because of an error or because it was removed on purpose. Thus, modules\n    and chassis that disappear are all listed in status until manually\n    deleted from NAV by a manual module/chassis delete.\n  </p>\n{% endpopover %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/_about_maintenance_info.html",
    "content": "{% load popover %}\n{% popover popover_id=\"maintenance-info\" trigger_text=\"About\" trigger_element=\"a\" title=\"Put on maintenance\" %}\n  <p>\n    Putting an alert on maintenance only makes sense if the subject can be\n    put on maintenance, for instance IP Devices and Services.\n  </p>\n{% endpopover %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/_about_resolve_info.html",
    "content": "{% load popover %}\n{% popover popover_id=\"resolve-info\" trigger_text=\"About\" trigger_element=\"a\" title=\"About clearing alerts\" size=\"medium\" %}\n  <p>\n    Clearing an alert will set its end time, thereby closing it and removing\n    it from the list of problems. Use this to remove alerts that have become\n    invalid, where there is no way for NAV to automatically detect this.\n  </p>\n  <p>\n    Be aware that if the root cause of the alert is still there, NAV may end\n    up posting a new alert for the same issue.\n  </p>\n{% endpopover %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/base.html",
    "content": "{% extends 'base.html' %}\n\n\n{% block base_header_additional_head %}\n  <style>\n\n   #user-actions {\n       overflow: visible;\n   }\n   #event-messages {\n       max-height: 30vh;\n       overflow: auto;\n   }\n   #event-messages p {\n       font-size: 80%;\n   }\n   .action-container {\n       display: none;\n   }\n   #related-events-container {\n       max-height: 70vh;\n       overflow: auto;\n   }\n  </style>\n{% endblock %}\n\n\n{% block base_content %}\n\n  <h1>Event details</h1>\n\n  <div id=\"api-event-details\"> </div>\n\n  <div class=\"row\">\n    <div class=\"column large-4\">\n\n      <div class=\"panel white\">\n        {% block event_details %}{% endblock %}\n\n      </div>\n\n      <div class=\"panel white\">\n        <div id=\"user-actions\">\n          {% block user_actions %}{% endblock %}\n        </div>\n      </div>\n\n\n      <div id=\"event-messages\" class=\"panel white\">\n        {% block event_messages %}{% endblock %}\n      </div>\n\n    </div>\n\n    {% if event.netbox %}\n      <div class=\"column large-8\">\n        <div class=\"panel white\">\n          {% block related_netbox_events %}{% endblock %}\n        </div>\n      </div>\n    {% endif %}\n\n    <div class=\"column large-8\">\n      <div class=\"panel white\">\n        {% block related_type_events %}{% endblock %}\n      </div>\n    </div>\n\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/details.html",
    "content": "{% extends 'info/event/base.html' %}\n{% load date_and_time %}\n{% load info %}\n\n{# EVENT DETAILS #}\n\n{% block event_details %}\n  <h4> {{ event.alert_type.name }} event </h4>\n  <p>\n    <small>{{ event.alert_type.description }}</small>\n  </p>\n\n  {% with ack=event.is_acknowledged %}\n    {% if ack %}\n      <div class=\"alert-box info\">\n        Acknowledged {{ ack.date }} by {{ ack.account.name }}\n        {% if ack.comment %}\n          <div>\"{{ ack.comment }}\"</div>\n        {% endif %}\n      </div>\n    {% endif %}\n  {% endwith %}\n\n  <table class=\"vertitable full-width\">\n    <tbody>\n\n      <tr>\n        <th>Source</th>\n        <td>{{ event.source }}</td>\n      </tr>\n\n\n      {% if event.is_stateful %}\n        <tr>\n          <th>Start</th>\n          <td>{{ event.start_time }}</td>\n        </tr>\n\n        <tr>\n          <th>End</th>\n          <td>\n            {% if event.is_open %}\n              Unresolved\n            {% else %}\n              {{ event.end_time }}\n            {% endif %}\n          </td>\n        </tr>\n\n        <tr>\n          <th>Duration</th>\n          <td>{{ event.get_downtime|remove_microseconds }}</td>\n        </tr>\n\n      {% else %}\n\n        <tr>\n          <th>Time</th>\n          <td>{{ event.start_time }}</td>\n        </tr>\n\n      {% endif %}\n\n      <tr>\n        <th>\n          Subject\n        </th>\n        <td>\n          {% with subject=event.get_subject %}\n            {% include 'info/event/frag_subject_details.html' %}\n          {% endwith %}\n        </td>\n      </tr>\n\n      <tr>\n        <th>\n          Severity\n        </th>\n        <td><span class=\"event-severity-{{ event.severity }}\">{{ event.severity }}</span></td>\n      </tr>\n\n      {% if event.netbox %}\n        <tr>\n          <th>Links</th>\n          <td>\n            <ul>\n              <li>\n                <a href=\"{% url 'ipdevinfo-details-by-id' event.netbox.pk %}\">\n                  Device Info\n                </a>\n              </li>\n              <li>\n                <a href=\"{% url 'devicehistory-view-netbox' event.netbox.pk %}\">\n                  Device History\n                </a>\n              </li>\n            </ul>\n          </td>\n        </tr>\n      {% endif %}\n\n    </tbody>\n  </table>\n{% endblock %}\n\n\n{# RELATED NETBOX EVENTS #}\n{% block related_netbox_events %}\n  <h4>\n    Last 10 events for {{ event.netbox }}\n  </h4>\n  <div id=\"related-events-container\">\n    <table class=\"listtable\">\n      <thead>\n        <tr>\n          <th>Type</th>\n          <th>Start</th>\n          <th>End</th>\n          <th>Duration</th>\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for event in related_netbox_events %}\n          <tr>\n            <td>\n              <a href=\"{% url 'event-details' event.pk %}\" title=\"{{ event.alert_type.description }}\">\n                {{ event.alert_type.name }}\n              </a>\n            </td>\n            <td>{{ event.start_time }}</td>\n            <td>\n              {% if event.is_open %}\n                Unresolved\n              {% else %}\n                {{ event.end_time|default:'' }}\n              {% endif %}\n            </td>\n            <td>\n              {{ event.get_downtime|remove_microseconds|default:'' }}\n            </td>\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n    <a href=\"{% url 'devicehistory-view-netbox' event.netbox.pk %}\">See more in Device History</a>\n  </div>\n{% endblock %}\n\n\n{# RELATED EVENT TYPE EVENTS #}\n{% block related_type_events %}\n  <h4>\n    Last 10 {{ event.alert_type.name }} events\n  </h4>\n  <div id=\"related-type-container\">\n    <table class=\"listtable\">\n      <thead>\n        <tr>\n          <th>Start</th>\n          <th>End</th>\n          <th>Duration</th>\n          <th>Subject</th>\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for event in related_type_events %}\n          <tr>\n            <td>\n              <a href=\"{% url 'event-details' event.pk %}\">\n                {{ event.start_time }}\n              </a>\n            </td>\n            <td>\n              {% if event.is_open %}\n                Unresolved\n              {% else %}\n                {{ event.end_time|default:'' }}\n              {% endif %}\n            </td>\n            <td>\n              {{ event.get_downtime|remove_microseconds|default:'' }}\n            </td>\n            <td>\n              {% with subject=event.get_subject %}\n                {% include 'info/event/frag_subject_details.html' %}\n              {% endwith %}\n            </td>\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n    <a href=\"{% url 'devicehistory-view' %}?eventtype=a_{{ event.alert_type.name }}\">See more in Device History</a>\n  </div>\n{% endblock %}\n\n\n{# EVENT MESSAGES #}\n\n{% block event_messages %}\n  <h4>Alert messages</h4>\n\n  {% if event.is_stateful %}\n\n    <h5>Start messages</h5>\n    {% for m in messages|lookup:'s' %}\n      {% include 'info/event/frag_event_message.html' %}\n    {% endfor %}\n\n    {% if not event.is_open %}\n      <hr/>\n\n      <h5>End messages</h5>\n      {% for m in messages|lookup:'e' %}\n        {% include 'info/event/frag_event_message.html' %}\n      {% endfor %}\n    {% endif %}\n\n  {% else %}\n    {% for m in messages|lookup:'x' %}\n      {% include 'info/event/frag_event_message.html' %}\n    {% endfor %}\n  {% endif %}\n\n{% endblock %}\n\n\n{# ACTIONS #}\n\n{% block user_actions %}\n  <h4>Available actions</h4>\n\n  <select id=\"action-chooser\" name=\"action\">\n    <option value=\"\">----------</option>\n    <option value=\"actions-acknowledge\">Acknowledge alert</option>\n    {% if event.is_open %}\n      <option value=\"actions-resolve\">Clear alert</option>\n    {% endif %}\n    {% if event.get_subject.pk %}\n      <option value=\"actions-maintenance\">Put on maintenance</option>\n    {% endif %}\n    {% if is_module_or_chassis %}\n      <option value=\"actions-delete\">Delete module or chassis</option>\n    {% endif %}\n  </select>\n\n  {# Acknowledge alert #}\n  <div id=\"actions-acknowledge\" class=\"action-container\">\n    <form action=\"{% url 'status2_acknowledge_alert' %}\">\n      {% csrf_token %}\n      <input type=\"hidden\" name=\"id[]\" value=\"{{ event.pk }}\" />\n\n      <label>\n        Description\n        <input type=\"text\" name=\"description\" placeholder=\"\" />\n      </label>\n\n      <input type=\"submit\" class=\"button small secondary right\" value=\"Acknowledge alert\" />\n    </form>\n    {% include 'info/event/_about_acknowledge_info.html' %}\n\n\n\n  </div>\n\n  {# Resolve/clear alert #}\n  <div id=\"actions-resolve\" class=\"action-container\">\n    <form action=\"{% url 'status2_clear_alert' %}\">\n      {% csrf_token %}\n      <input type=\"hidden\" name=\"id[]\" value=\"{{ event.pk }}\" />\n      <input type=\"submit\" class=\"button small secondary right\" value=\"Clear alert\" />\n    </form>\n    {% include 'info/event/_about_resolve_info.html' %}\n  </div>\n\n  {# Put on maintenance #}\n  <div id=\"actions-maintenance\" class=\"action-container\">\n    <form action=\"{% url 'status2_put_on_maintenance' %}\">\n      {% csrf_token %}\n      <input type=\"hidden\" name=\"id[]\" value=\"{{ event.pk }}\" />\n      <label>\n        Description\n        <input type=\"text\" name=\"description\" placeholder=\"\" />\n      </label>\n      <input type=\"submit\" class=\"button small secondary right\" value=\"Put on maintenance\" />\n    </form>\n\n    {% include 'info/event/_about_maintenance_info.html' %}\n  </div>\n\n  {# Delete module or chassis #}\n  <div id=\"actions-delete\" class=\"action-container\">\n    <form action=\"{% url 'status2_delete_module_or_chassis' %}\">\n      {% csrf_token %}\n      <input type=\"hidden\" name=\"id[]\" value=\"{{ event.pk }}\" />\n      <input type=\"submit\" class=\"button small secondary full-width\" value=\"Delete module or chassis\" />\n    </form>\n\n    {% include 'info/event/_about_delete_info.html' %}\n  </div>\n\n{% endblock %}\n\n\n{% block footer_scripts %}\n  <script>\n   {# Shows the correct action form #}\n   $('#action-chooser').on('change', function() {\n       $('.action-container').hide();\n       $('#' + this.value).show();\n   });\n\n   {# submits the action  #}\n   $('.action-container form').on('submit', function(e) {\n       e.preventDefault();\n       var request = $.post(this.action, $(this).serialize());\n       request.done(function() {\n           window.location = {% url 'status2-index' %}\n       })\n       request.fail(function(error) {\n           alert('Error submitting form');\n       });\n   });\n\n   {# Fetches any custom alert template and displays it #}\n   var request = $.ajax('/api/1/alert/{{event.pk}}', {\n       method: 'GET',\n       headers: {Accept: 'text/x-nav-html'}\n   });\n   request.done(function(response) {\n       if ($(response).html()) {\n           $('#api-event-details').append($('<div class=\"panel white\">').html(response));\n       }\n   });\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/event/frag_event_message.html",
    "content": "<dl>\n  <dt>{{ m.type }}</dt>\n  <dd>\n    {{ m.message|linebreaks }}\n  </dd>\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/info/event/frag_subject_details.html",
    "content": "{% with subject_url=subject.get_absolute_url %}\n  {% if subject_url %}\n    <a href=\"{{ subject_url }}\">{{ subject }}</a>\n  {% else %}\n    {{ subject }}\n  {% endif %}\n{% endwith %}\n\n{% if event.is_open and subject.is_on_maintenance %}\n  <span class=\"label warning\">On maintenance</span>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/fragments/netboxes.html",
    "content": "{% load info %}\n<thead>\n<tr>\n    <th>Name</th>\n    <th>IP-address</th>\n    <th>Category</th>\n    <th>Type</th>\n    <th>Organization</th>\n    <th>#swp</th>\n    <th>#gwp</th>\n    <th>Up</th>\n    <th>Availability (week)</th>\n    <th>Availability (month)</th>\n</tr>\n</thead>\n{% if netboxes %}\n    <tbody>\n    {% for netbox in netboxes %}\n        <tr>\n            <td>\n                <a href=\"{% url 'ipdevinfo-details-by-name' netbox.sysname %}\">{{ netbox.sysname }}</a>\n            </td>\n            <td>{{ netbox.ip }}</td>\n            <td>\n                <a href=\"/report/netbox?catid={{ netbox.category.id }}\">{{ netbox.category.id }}</a>\n            </td>\n            <td>\n                <a href=\"/report/netbox?typeid={{ netbox.type.id }}\">{{ netbox.type.name }}</a>\n            </td>\n            <td>\n                <a href=\"/report/netbox?orgid={{ netbox.organization.id }}\">{{ netbox.organization }}</a>\n            </td>\n            <td>\n                <a href=\"/report/swport?netboxid={{ netbox.id }}\">{{ netbox.get_swport_count }}</a>\n            </td>\n            <td>\n                <a href=\"/report/gwport?netboxid={{ netbox.id }}\">{{ netbox.get_gwport_count }}</a>\n            </td>\n            <td>\n              <img src=\"{{ STATIC_URL }}images/lys/{% if netbox.up == 'y' %}green.png{% else %}red.png{% endif %}\">\n            </td>\n\n            {% if availabilities %}\n                {% with data=availabilities|get_value:netbox.id %}\n                {% with availability=data|get_value:'availability' %}\n                    <td class=\"numeric\">{{ availability|get_value:'week'|floatformat:'2' }}%</td>\n                    <td class=\"numeric\">{{ availability|get_value:'month'|floatformat:'2' }}%</td>\n                {% endwith %}\n                {% endwith %}\n            {% elif graphite_error %}\n                <td><span class=\"label alert\">Graphite unreachable</span></td>\n                <td><span class=\"label alert\">Graphite unreachable</span></td>\n            {% else %}\n                N/A\n            {% endif %}\n        </tr>\n    {% endfor %}\n    </tbody>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/images/upload.html",
    "content": "<form id=\"uploadform\" method=\"POST\" enctype=\"multipart/form-data\">\n  {% csrf_token %}\n  <input id=\"file\" type=\"file\" name=\"images\" multiple class=\"inputfile\" data-multiple-caption=\"{count} files selected\">\n  <label for=\"file\" class=\"button small\"><i class=\"fa fa-upload\"></i><span>Select images to upload</span></label>\n  <input type=\"submit\" class=\"button small secondary\" value=\"Upload selected images\">\n</form>\n\n<div class=\"user-feedback\">\n  {% for message in messages %}\n  <div class=\"alert-box {{ message.tags }}\" data-nav-alert>\n    {{ message|safe }}\n  </div>\n  {% endfor %}\n</div>\n\n<ul id=\"editimages\" class=\"large-block-grid-4\">\n  {% for image in object.images.all %}\n  <li class=\"imagecardcontainer\">\n    <div data-imageid=\"{{ image.id }}\" class=\"imagecard\">\n      <div class=\"actions\">\n        <i class=\"fa fa-times right delete\" title=\"Delete image\"></i>\n        <i class=\"fa fa-edit right edit\" title=\"Edit image caption\"></i>\n        <i class=\"fa fa-arrows right drag\"\n           title=\"Change display order by dragging the image\"></i>\n      </div>\n      <h5 class=\"heading\">{{ image.title|safe }}</h5>\n\n      {% if image.image_exists and image.is_readable %}\n      <img src=\"{{ image.thumb_url }}\">\n      {% else %}\n      {% if not image.image_exists %}\n      <span class=\"alert-box alert\">Image does not exist</span>\n      {% else %}\n      <span class=\"alert-box alert\">Image exists but is not readable</span>\n      {% endif %}\n      {% endif %}\n\n      <div class=\"meta\">\n        <div class=\"left\">{{ image.uploader.name }}</div>\n        <div class=\"right\">{{ image.created }}</div>\n      </div>\n      <div class=\"float-clear\"></div>\n    </div>\n  </li>\n\n  {% endfor %}\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/info/location/_search_results.html",
    "content": "{% if locations %}\n<table class=\"listtable\">\n  <caption>{{ locations|length }} result{{ locations|pluralize:\",s\" }}\n    for \"{{ searchform.data.query }}\"\n  </caption>\n\n  <thead>\n    <tr>\n      <th>Location</th>\n      <th>Description</th>\n      <th>Aliases</th>\n    </tr>\n  </thead>\n\n  <tbody>\n    {% for location in locations %}\n      <tr>\n        <td>\n          <a href=\"{% url 'location-info' location.id %}\">{{ location.id }}</a>\n        </td>\n        <td>\n          {{ location.description }}\n        </td>\n        <td>\n          {{ location.aliases_string }}\n        </td>\n      </tr>\n    {% endfor %}\n  </tbody>\n</table>\n{% else %}\n<div class=\"alert-box\">No location(s) found</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/location/base.html",
    "content": "{% extends \"info/base.html\" %}\n{% load silent_include %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <link href=\"{{ STATIC_URL }}css/nav/info_room.css\"  rel=\"stylesheet\">\n  <script>require([\"src/info_location\"]);</script>\n  {% try_to_include 'info/room/header_extras.html' %}\n{% endblock %}\n\n{% block content %}\n  {% block locationinfo %}\n\n    <h3>Location search</h3>\n    {% include 'info/_search_form.html' with form=searchform %}\n\n    <div id=\"search-results\">\n    {% if searchform.is_bound %}\n      {% include 'info/location/_search_results.html' with form=searchform locations=locations %}\n    {% endif %}  {# bound check #}\n    </div>\n\n    <div id=\"mapcontainer\" class=\"mapwrapper smallmap\"></div>\n    <div id=\"coordinates\"></div>\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/location/fragment_sublocation.html",
    "content": "<li class=\"branch\" data-locationid=\"{{ location.pk }}\">\n  {% if location.has_children %}\n  <i class=\"fa fa-toggle-down\"></i>\n  {% endif %}\n  <a href=\"{% url 'location-info' location.pk %}\">\n    {{ location.verbose_string }}\n  </a>\n\n  {% if location.has_children %}\n  <ul class=\"child\">\n    {% for child in location.get_children %}\n    {% with location=child %}\n    {% include 'info/location/fragment_sublocation.html' %}\n    {% endwith %}\n    {% endfor %}\n  </ul>\n  {% endif %}\n\n</li>\n"
  },
  {
    "path": "python/nav/web/templates/info/location/locationinfo.html",
    "content": "{% extends \"info/location/base.html\" %}\n\n{% block base_content %}\n\n    <h4>Location view for {{ location.id }}</h4>\n\n    <ul class=\"button-group\">\n        <li>\n            <a href=\"{% url 'seeddb-location-edit' location.id %}\" class=\"button secondary small\">\n                Edit location\n                <i class=\"fa fa-edit\"></i>\n            </a>\n        </li>\n\n        <li>\n          <a href=\"{% url 'location-info-upload' location.id %}\" class=\"button secondary small\">\n            Edit images\n            <i class=\"fa fa-camera\"></i>\n          </a>\n        </li>\n\n        <li>\n            <a href=\"{% url 'devicehistory-view-location' location.id %}\" class=\"button secondary small\">\n                View location history\n                <i class=\"fa fa-clock-o\"></i>\n            </a>\n        </li>\n\n    </ul>\n\n    <div id=\"infotabs\" class=\"ui-helper-hidden\">\n        <ul>\n            <li aria-controls=\"locationinfo\">\n              <a href=\"#locationinfo\">Location info</a>\n            </li>\n            <li aria-controls=\"sublocations\">\n              <a href=\"#sublocations\">Sub-Locations</a>\n            </li>\n            <li aria-controls=\"rooms\">\n              <a href=\"#rooms\">Rooms</a>\n            </li>\n\n        </ul>\n\n        <div id=\"locationinfo\">\n          {% include 'info/location/locationinfo_main.html' %}\n        </div>\n\n        <div id=\"sublocations\">\n          {% include 'info/location/locationinfo_sublocations.html' %}\n        </div>\n\n        <div id=\"rooms\">\n          {% include 'info/location/locationinfo_rooms.html' %}\n        </div>\n\n    </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/location/locationinfo_main.html",
    "content": "\n<div class=\"row\">\n\n\n  <div class=\"medium-6 column\">\n    <table id=\"locationinfotable\" class=\"vertitable full-width\">\n      <caption>Locationinfo</caption>\n      <tbody>\n      <tr>\n        <th>Name</th>\n        <td class=\"locationid\" data-locationid=\"{{location.id}}\">{{ location.id }}</td>\n      </tr>\n      <tr>\n        <th>Description</th>\n        <td>{{ location.description }}</td>\n      </tr>\n      {% if location.aliases %}\n        <tr>\n          <th>Aliases</th>\n          <td>{{ location.aliases_string }}</td>\n        </tr>\n      {% endif %}\n      {% if location.parent %}\n      <tr>\n        <th>Location</th>\n        <td><a href=\"{% url 'location-info' location.parent.id %}\">{{ location.parent.description|default:location.parent.id }}</a></td>\n      </tr>\n      {% endif %}\n      {% for key, value in location.sorted_data %}\n      <tr>\n        <th>{{ key }}</th>\n        <td>{{ value|urlize }}</td>\n      </tr>\n      {% endfor %}\n      </tbody>\n    </table>\n\n  </div> {# End of column #}\n\n  <div class=\"medium-6 column\">\n    <div class=\"mapwrapper\">\n      <div id=\"room_map\"></div>\n    </div>\n  </div>\n\n</div>\n{% include \"webfront/_lightbox_gallery.html\" with images=images gallery_id=\"location-gallery\" title=\"Images for this location\" %}\n\n{% if not images|length %}\n<a href=\"{% url 'location-info-upload' location.id %}\" class=\"button secondary small\">\n  Add images\n  <i class=\"fa fa-camera\"></i>\n</a>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/location/locationinfo_rooms.html",
    "content": "\n<div class=\"row\">\n\n\n  <div class=\"medium-6 column\">\n    {% if location.rooms.exists %}\n    <table id=\"roomtable\" class=\"vertitable full-width\">\n      <caption>Rooms in {{location}}</caption>\n      <thead>\n        <tr>\n          <th>Name</th>\n          <th>Description</th>\n        </tr>\n      </thead>\n      <tbody>\n      {% for room in location.rooms.all %}\n      <tr>\n        <td><a href=\"{% url 'room-info' room.id %}\">{{ room.id }}</a></td>\n        <td>{{ room.description }}</td>\n      </tr>\n      {% endfor %}\n      </tbody>\n    </table>\n    {% else %}\n    <div class=\"alert-box\">This location does not contain any rooms</div>\n    {% endif %}\n\n  </div> {# End of column #}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/location/locationinfo_sublocations.html",
    "content": "\n<div class=\"row\">\n\n\n  <div class=\"medium-6 column\">\n    {% if location.child_locations.exists %}\n    <button id=\"collapse-all\" class=\"button small\">Collapse all</button>\n    <button id=\"expand-all\" class=\"button small\">Expand all</button>\n\n    <ul class=\"tree-list no-bullet\">\n      {% for subloc in location.child_locations.all %}\n      {% with location=subloc %}\n      {% include 'info/location/fragment_sublocation.html' %}\n      {% endwith %}\n      {% endfor %}\n    </ul>\n    {% else %}\n    <div class=\"alert-box\">This location has no sub-locations</div>\n    {% endif %}\n\n  </div> {# End of column #}\n\n</div>\n\n{% block footer_scripts %}\n<script>\n $('.tree-list').on('click', '.branch > i.fa', function(event) {\n     $(event.target).toggleClass('fa-toggle-right fa-toggle-down').nextAll('.child').slideToggle();\n });\n\n $('#collapse-all').click(function(){\n     $('.tree-list .child').hide();\n     $('.tree-list [class*=\"fa-toggle-\"]').removeClass('fa-toggle-down').addClass('fa-toggle-right');\n });\n\n $('#expand-all').click(function(){\n     $('.child').show();\n     $('.tree-list [class*=\"fa-toggle-\"]').removeClass('fa-toggle-right').addClass('fa-toggle-down');\n });\n</script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/location/upload.html",
    "content": "{% extends \"info/location/base.html\" %}\n\n{% block base_header_additional_head %}\n  <link href=\"{{ STATIC_URL }}css/nav/info_room.css\" rel=\"stylesheet\">\n  <link href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\"\n        rel=\"stylesheet\">\n  <script>require([\"src/image_upload\"]);</script>\n  <script>\n    NAV.urls['image-update-title'] = \"{% url 'image-update-title' %}\";\n    NAV.urls['image-delete-image'] = \"{% url 'image-delete-image' %}\";\n    NAV.urls['image-update-priority'] = \"{% url 'image-update-priority' %}\";\n  </script>\n  <style>\n    {# Styles for the form file input #}\n    .inputfile {\n      width: 0.1px;\n      height: 0.1px;\n      opacity: 0;\n      overflow: hidden;\n      position: absolute;\n      z-index: -1;\n    }\n\n    .fa.fa-upload { margin-right: .8em; }\n\n  </style>\n{% endblock %}\n\n{% block base_content %}\n\n  {% include \"info/_image_upload_header.html\" with id=object.id %}\n\n  <p><a href=\"{% url 'location-info' object.id %}\">Back to location</a></p>\n\n  {% include 'info/images/upload.html' %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/netboxgroup/_search_results.html",
    "content": "<table id=\"device-groups-table\" class=\"listtable\">\n<caption>Device Groups</caption>\n\n<thead>\n  <tr>\n    <th>Group</th>\n    <th class=\"description\">Description</th>\n    <th>Devices</th>\n    <th>&nbsp;</th>\n  </tr>\n</thead>\n\n<tbody>\n  {% for netboxgroup in netboxgroups %}\n    <tr>\n      <td>\n        <a href=\"{% url 'netbox-group-detail' netboxgroup.pk %}\">{{ netboxgroup.pk }}</a>\n      </td>\n      <td class=\"description\">{{ netboxgroup.description }}</td>\n      <td>\n        <ul class=\"netboxgroup inside\">\n          {% with netboxgroup.netboxes.all as netboxes %}\n            {% if netboxes %}\n              {% for netbox in netboxes %}\n                <li>\n                  <a href=\"{% url 'ipdevinfo-details-by-name' netbox.sysname %}\">\n                    {{ netbox.sysname }}\n                  </a>\n                </li>\n              {% endfor %}\n            {% else %}\n              <li>No devices in this group</li>\n            {% endif %}\n          {% endwith %}\n        </ul>\n      </td>\n      <td>\n        <a href=\"{% url 'netbox-group-edit' netboxgroup.pk %}\">Edit</a>\n      </td>\n    </tr>\n  {% endfor %}\n</tbody>\n\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/info/netboxgroup/base.html",
    "content": "{% extends \"info/base.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <script>require(['src/info_netboxgroup']);</script>\n{% endblock %}\n\n{% block content %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/netboxgroup/group_detail.html",
    "content": "{% extends \"info/netboxgroup/base.html\" %}\n\n{% block content %}\n\n    <h4>Details for group {{ netboxgroup.pk }}</h4>\n\n    <a href=\"{% url 'netbox-group-edit' netboxgroup.pk %}\" class=\"button small\">Edit device group</a>\n\n    <table class=\"listtable netbox_availability_list\">\n        <caption>Netboxes in {{ netboxgroup.pk }}</caption>\n        {% include 'info/fragments/netboxes.html' %}\n    </table>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/netboxgroup/group_edit.html",
    "content": "{% extends \"info/netboxgroup/base.html\" %}\n\n{% block content %}\n\n  <h4>Edit devices in {{ netboxgroup.pk }}</h4>\n\n  {% block netboxgroup_content %}\n\n    <div class=\"row\">\n      <div class=\"column medium-6\">\n\n        <form method=\"POST\" action=\"\">\n          {% csrf_token %}\n\n          <div class=\"multiple-select-container\">\n\n            <input type=\"search\" placeholder=\"Filter devices not in group\">\n\n            <div class=\"row\">\n              <div class=\"column medium-6\">\n                <label for=\"not_in_group\">Devices not in group</label>\n                <select id=\"not_in_group\" multiple=\"multiple\" class=\"multiple-select multiple-select-choices\" name=\"choices\">\n                  {% for netbox in netboxes %}\n                    <option value=\"{{ netbox.pk }}\">{{ netbox.sysname }}</option>\n                  {% endfor %}\n\n                </select>\n              </div>\n\n              <div class=\"column medium-6\">\n                <label for=\"in_group\">Devices in group</label>\n                <select id=\"in_group\" multiple=\"multiple\" name=\"netboxes\" class=\"multiple-select multiple-select-initial\">\n                  {% for netbox in netboxgroup.netboxes.all %}\n                    <option value=\"{{ netbox.pk }}\">{{ netbox.sysname }}</option>\n                  {% endfor %}\n                </select>\n              </div>\n            </div>\n\n          </div>\n\n          <input type=\"submit\" value=\"Save changes\" class=\"small button\">\n        </form>\n\n      </div>\n    </div>\n\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/netboxgroup/list_groups.html",
    "content": "{% extends \"info/netboxgroup/base.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   #device-groups-table {\n       width: 100%;\n       max-width: 1300px;\n   }\n   #device-groups-table th.description, td.description {\n      width: 100%;\n      overflow-wrap: anywhere;\n   }\n   #device-groups-table th:not(.description), td:not(.description) {\n      white-space: nowrap;\n      width: 1%;\n   }\n   #device-groups-table .netboxgroup {\n       max-height: 10em;\n       overflow: auto;\n       margin-left: 0;\n   }\n  </style>\n{% endblock %}\n\n\n\n{% block content %}\n\n  <h3>Device Group search</h3>\n  {% include 'info/_search_form.html' with form=searchform %}\n  <div id=\"search-results\">\n  {% include 'info/netboxgroup/_search_results.html' with netboxgroups=netboxgroups %}\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/prefix/_search_results.html",
    "content": "<table id=\"prefix-search-results\" class=\"listtable\">\n  <caption>\n    {{ query_results|length }} result{{ query_results|pluralize }} for <em>{{ query }}</em>\n  </caption>\n  <thead>\n    <tr>\n        <th>Address</th>\n        <th>VLAN</th>\n    </tr>\n  </thead>\n  <tbody>\n    {% for result in query_results %}\n      <tr>\n        <td>\n          <a href=\"{{ result.get_absolute_url }}\" title=\"View details for this prefix\">{{ result.net_address }}</a>\n        </td>\n        <td>\n          {{ result.vlan }}\n        </td>\n      </tr>\n    {% endfor %}\n  </tbody>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/info/prefix/base.html",
    "content": "{% extends \"info/base.html\" %}\n\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   #prefix-search-results {\n       min-width: 450px;\n   }\n  </style>\n{% endblock %}\n\n{% block content %}\n\n  <h3>Prefix search</h3>\n  {% include 'info/_search_form.html' with form=form %}\n  <div id=\"search-results\">\n  {% if form.is_bound and form.is_valid %}\n    {% include 'info/prefix/_search_results.html' with query_results=query_results %}\n  {% endif %}\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/prefix/details.html",
    "content": "{% extends \"info/prefix/base.html\" %}\n{% load report %}\n\n{% block base_header_additional_head %}\n  <style>\n   .info-tables { max-width: 500px; }\n  </style>\n  <link rel=\"stylesheet\" href=\"/static/css/nav/local_rickshaw.css\"/>\n{% endblock %}\n\n\n{# Javascripts that run after DOM loaded #}\n{% block footer_scripts %}\n  <script>\n   require(['plugins/graphfetcher'], function (GraphFetcher) {\n       $('.prefixgraph').each(function (index, element) {\n           new GraphFetcher($(element), element.dataset.url);\n       });\n       $('.dhcpgraph').each(function (index, element) {\n           new GraphFetcher($(element), element.dataset.url);\n       });\n   });\n  </script>\n\n  {% if can_edit %}\n    {# Scripts for adding more tags to the prefix #}\n    <script>\n     (function(){\n         var $form = $('#add-tag-form');\n         var $alertBox = $form.find('.alert-box');\n\n         $('.add-more-tags, .close-tag-interface').on('click', function(){\n             $form.toggle();\n             $alertBox.removeClass('alert success').hide();\n         });\n\n         $('#add-tag-form').submit(function(event){\n             event.preventDefault();\n             $alertBox.removeClass('alert success').hide();\n\n             var request = $.post(\"{% url 'prefix-add-tags' prefix.pk %}\", $form.serialize());\n             request.done(function() {\n                 var reload = $.get(\"{% url 'prefix-reload-tags' prefix.pk %}\");\n                 reload.done(function(data){\n                     $('#tags-list').find('dd').html(data);\n                     $alertBox.addClass('success')\n                              .html('Tags updated')\n                              .show();\n                 });\n             });\n             request.error(function(response) {\n                 console.log(response);\n                 $alertBox.addClass('alert')\n                          .html('<strong>Error ' + response.status + ':</strong> ' + response.responseText)\n                          .show();\n             });\n         });\n\n     })();\n    </script>\n  {% endif %}\n{% endblock %}\n\n\n{% block base_content %}\n\n  <h3>Prefix details for {{ prefix.net_address }}</h3>\n\n  <a href=\"{% report 'prefix' prefixid=prefix.pk %}\" class=\"button small\">\n    View prefix report\n  </a>\n  {% if prefix.vlan.net_type.edit %}\n    <a href=\"{% url 'seeddb-prefix-edit' prefix.pk  %}\" class=\"button small\">\n      Edit prefix in SeedDb\n    </a>\n  {% endif %}\n\n\n  <div class=\"row\">\n\n    {# left column #}\n    <div class=\"large-6 column\">\n\n      <div class=\"info-tables panel\">\n\n        {% if can_edit %}\n          <button class=\"tiny right add-more-tags\">Add tags</button>\n        {% endif %}\n\n        {# Tags  #}\n        <dl id=\"tags-list\">\n          <dt>Tags:</dt>\n          <dd>\n            {% include 'info/prefix/frag_tags.html' %}\n          </dd>\n        </dl>\n\n        {% if can_edit %}\n          <form id=\"add-tag-form\" class=\"hidden\">\n            {% csrf_token %}\n            {{ form.as_p }}\n            <input type=\"submit\" class=\"button tiny\" value=\"Save tags\"/>\n            <a class=\"button tiny secondary close-tag-interface\">Close</a>\n            <div class=\"alert-box alert\" style=\"display: none\">Test</div>\n          </form>\n        {% endif %}\n\n\n        {# Print gwportprefixes #}\n\n        <table id=\"gwportprefixinfo\" class=\"listtable full-width\">\n          <caption>Router ports</caption>\n\n          <thead>\n            <tr>\n              <th>Netbox</th>\n              <th>Address</th>\n              <th>Interface</th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {% for gwportprefix in prefix.get_router_ports %}\n              <tr>\n                <td>\n                  <a href=\"{% url 'ipdevinfo-details-by-name' gwportprefix.interface.netbox.sysname %}\">\n                    {{ gwportprefix.interface.netbox.sysname }}\n                  </a>\n                </td>\n                <td>\n                  <a href=\"{% url 'ipdevinfo-details-by-addr' gwportprefix.gw_ip %}\">\n                    {{ gwportprefix.gw_ip }}\n                  </a>\n                </td>\n                <td>\n                  <a href=\"{% url 'ipdevinfo-interface-details' gwportprefix.interface.netbox.sysname gwportprefix.interface.id %}\">\n                    {{ gwportprefix.interface.ifname }}\n                  </a>\n                </td>\n              </tr>\n\n            {% endfor %}\n          </tbody>\n\n        </table>\n\n\n\n        {# Print vlan information #}\n\n        {% with vlan=prefix.vlan %}\n          <table id=\"vlaninfo\" class=\"vertitable full-width\">\n            <caption>Assigned to vlan {{ vlan }}</caption>\n\n            <tbody>\n              <tr>\n                <th>Vlan</th>\n                <td>\n                  <a href=\"{% url 'vlan-details' vlan.pk %}\" title=\"Go to vlan details page\">\n                    {{ vlan.vlan|default_if_none:\"N/A\" }}\n                  </a>\n                </td>\n              </tr>\n              <tr>\n                <th>Type</th>\n                <td>{{ vlan.net_type|default_if_none:\"\" }}</td>\n              </tr>\n\n\n              <tr>\n                <th>Organization</th>\n                <td>{{ vlan.organization|default_if_none:\"\" }}</td>\n              </tr>\n\n\n              <tr>\n                <th>Net Ident</th>\n                <td>{{ vlan.net_ident|default_if_none:\"\" }}</td>\n              </tr>\n\n              <tr>\n                <th>Usage</th>\n                <td>{{ vlan.usage|default_if_none:\"\" }}</td>\n              </tr>\n\n              <tr>\n                <th>Description</th>\n                <td>{{ vlan.description|default_if_none:\"\" }}</td>\n              </tr>\n            </tbody>\n\n          </table>\n\n        {% endwith %}\n\n      </div>\n\n    </div> {# end left column #}\n\n\n    {# Right column #}\n    <div class=\"large-6 column\">\n      <div class=\"prefixgraph graphitegraph\" data-url=\"{{ prefix.get_graph_url }}\">\n        <div class=\"rickshaw-container\"></div>\n      </div>\n    </div>\n\n    {% if dhcp_graph_urls or graphite_error %}\n      {% if graphite_error %}\n        <span class=\"label alert\">Graphite unreachable</span>\n      {% else %}\n        <div class=\"large-6 column\">\n          {% for graph in dhcp_graph_urls %}\n            <div class=\"dhcpgraph graphitegraph\" data-url=\"{{ graph }}\">\n              <div class=\"rickshaw-container\"></div>\n            </div>\n          {% endfor %}\n        </div>\n      {% endif %}\n    {% endif %}\n\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/prefix/frag_tags.html",
    "content": "{% for usage in prefix.usages.all %}\n  <span class=\"label secondary\">{{ usage.description }}</span>\n{% empty %}\n  No tags\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_about_the_search_modal.html",
    "content": "<h4>About the search</h4>\n\n<p>\n    The search text matches the whole row, including some of the HTML. You can,\n    for instance, search for <em>\"down\"</em> to see all interfaces with status\n    down.\n</p>\n\n<p>\n    To improve the filtering you can use the other search boxes that filter on\n    specific columns.\n</p>\n\n<p>\n    You can also use predefined keywords in the main search box to filter what\n    you want to see. The following keywords are currently supported:\n</p>\n<ul>\n    <li>\n        <code>$vlan</code> -\n        Example: <code>$vlan:130</code> -\n        Only show interfaces on vlan 130\n    </li>\n    <li>\n        <code>$days</code> -\n        Example: <code>$days:5</code> -\n        Only show rows where <em>\"last active\"</em> is 5 days or more\n    </li>\n</ul>\n\n\n<p>\n    You can combine the filters if you want to, by separating each search term\n    with spaces. <code>fa1/2 $days:5 $vlan:10</code> is a valid filter.\n    Combining keywords and search boxes also works, but keywords take\n    precedence.\n</p>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_add_rack_modal.html",
    "content": "<h3>Add new rack</h3>\n<form\n        hx-post=\"{% url 'room-info-racks-add-rack' room.pk %}\"\n        hx-target=\"#add-rack-button-container\"\n        hx-swap=\"beforebegin\"\n>\n    {% csrf_token %}\n    <input type=\"hidden\" name=\"roomid\" value=\"{{ room.pk }}\">\n    <label>\n        Rack name\n        <input type=\"text\" name=\"rackname\">\n    </label>\n    <input type=\"submit\" class=\"button small\" value=\"Add new rack\">\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_add_sensor_diff_form.html",
    "content": "<form\n        hx-post=\"{% url 'room-info-racks-save-sensor' room.pk %}\"\n        hx-target=\"{{ hx_target }}\"\n        hx-swap=\"beforeend\"\n>\n  {% csrf_token %}\n  <label>\n    Primary {{ sensortype }}\n    <select class=\"sensordropdown\" name=\"minuendid\" style=\"width: 100%\">\n      <option value=\"\">----------</option>\n      {% for sensor in sensors %}\n        <option value=\"{{ sensor.pk }}\">{{ sensor }}</option>\n      {% endfor %}\n    </select>\n  </label>\n  <label>\n      Subtract {{ sensortype }}\n      <select class=\"sensordropdown\" name=\"subtrahendid\" style=\"width: 100%\">\n          <option value=\"\">----------</option>\n          {% for sensor in sensors %}\n          <option value=\"{{ sensor.pk }}\">{{ sensor }}</option>\n          {% endfor %}\n      </select>\n  </label>\n  <input type=\"hidden\" name=\"item_type\" value=\"SensorsDiff\">\n  <input type=\"hidden\" name=\"rackid\" value=\"{{ rack.pk }}\">\n  <input type=\"hidden\" name=\"column\" value=\"{{ column }}\">\n  <input type=\"submit\" class=\"button\" value=\"Add sensor\">\n  <button class=\"secondary right cancelbutton\">Cancel</button>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_add_sensor_modal.html",
    "content": "<h4>Add {{ sensortype }} to rack {{ rack.rackname }}</h4>\n\n{% if not sensors %}\n  <div class=\"alert-box\">There are no {{ sensortype }}s to add</div>\n{% else %}\n\n  <div id=\"add-rackitem-tabs\">\n    <ul>\n        <li aria-controls=\"sensortab\"><a href=\"#sensortab\">Sensor</a></li>\n        <li aria-controls=\"difftab\"><a href=\"#difftab\">Difference between sensors</a></li>\n        <li aria-controls=\"sumtab\"><a href=\"#sumtab\">Sum of sensors</a></li>\n    </ul>\n    <div class=\"tabs-content\">\n        <section role=\"tabpanel\" aria-hidden=\"false\" class=\"content active\" id=\"sensortab\">\n            {% include 'info/room/_add_sensor_single_form.html' %}\n        </section>\n        <section role=\"tabpanel\" aria-hidden=\"true\" class=\"content\" id=\"difftab\">\n          {% include 'info/room/_add_sensor_diff_form.html' %}\n        </section>\n        <section role=\"tabpanel\" aria-hidden=\"true\" class=\"content\" id=\"sumtab\">\n          {% include 'info/room/_add_sensor_sum_form.html' %}\n        </section>\n        <section role=\"tabpanel\" aria-hidden=\"true\" class=\"content\" id=\"panel2-4\">\n            <h2>Fourth panel content goes here...</h2>\n        </section>\n    </div>\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_add_sensor_single_form.html",
    "content": "<form\n        method=\"post\"\n        hx-post=\"{% url 'room-info-racks-save-sensor' room.pk %}\"\n        hx-target=\"{{ hx_target }}\"\n        hx-swap=\"beforeend\"\n>\n  {% csrf_token %}\n  <label>\n    Choose {{ sensortype }}\n    <select class=\"sensordropdown\" name=\"sensorid\">\n      <option value=\"\">----------</option>\n      {% for sensor in sensors %}\n        <option value=\"{{ sensor.pk }}\">{{ sensor }}</option>\n      {% endfor %}\n    </select>\n  </label>\n  <input type=\"hidden\" name=\"item_type\" value=\"Sensor\">\n  <input type=\"hidden\" name=\"rackid\" value=\"{{ rack.pk }}\">\n  <input type=\"hidden\" name=\"column\" value=\"{{ column }}\">\n  <input type=\"submit\" class=\"button\" value=\"Add sensor\">\n  <button class=\"secondary right cancelbutton\">Cancel</button>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_add_sensor_sum_form.html",
    "content": "<form\n        class=\"sumform\"\n        hx-post=\"{% url 'room-info-racks-save-sensor' room.pk %}\"\n        hx-target=\"{{ hx_target }}\"\n        hx-swap=\"beforeend\"\n>\n  {% csrf_token %}\n  <label>Title<input type=\"text\" name=\"title\" placeholder=\"Sum of sensors\"></label>\n  <label>\n    {{ sensortype }}\n    <select class=\"sensordropdown sumsensors\" name=\"sensors[]\" style=\"width: 100%\">\n      <option value=\"\">----------</option>\n      {% for sensor in sensors %}\n        <option value=\"{{ sensor.pk }}\">{{ sensor }}</option>\n      {% endfor %}\n    </select>\n  </label>\n  <input type=\"hidden\" name=\"item_type\" value=\"SensorsSum\">\n  <input type=\"hidden\" name=\"rackid\" value=\"{{ rack.pk }}\">\n  <input type=\"hidden\" name=\"column\" value=\"{{ column }}\">\n  <input type=\"submit\" class=\"button\" value=\"Add sensor\">\n  <button class=\"secondary right cancelbutton\">Cancel</button>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/_search_results.html",
    "content": "{% if rooms %}\n<table class=\"listtable\">\n  <caption>{{ rooms|length }} result{{ rooms|pluralize:\",s\" }}\n    for \"{{ searchform.data.query }}\"\n  </caption>\n\n  <thead>\n    <tr>\n      <th>Room</th>\n      <th>Location</th>\n      <th>Description</th>\n      <th>Aliases</th>\n      <th>#Netboxes</th>\n    </tr>\n  </thead>\n\n  <tbody>\n    {% for room in rooms %}\n      <tr>\n        <td>\n          <a href=\"{% url 'room-info' room.id %}\">{{ room.id }}</a>\n        </td>\n        <td>\n          {{ room.location.id }}\n        </td>\n        <td>\n          {{ room.description }}\n        </td>\n        <td>\n          {{ room.aliases_string }}\n        </td>\n        <td>\n          {{ room.filtered_netboxes.count }}\n        </td>\n      </tr>\n    {% endfor %}\n  </tbody>\n</table>\n{% else %}\n<div class=\"alert-box\">No room(s) found</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/base.html",
    "content": "{% extends \"info/base.html\" %}\n{% load silent_include %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <link href=\"{{ STATIC_URL }}css/nav/info_room.css\"  rel=\"stylesheet\">\n  <script>require([\"src/info_room\"]);</script>\n  {% try_to_include 'info/room/header_extras.html' %}\n{% endblock %}\n\n{% block content %}\n  {% block roominfo %}\n\n    <h3>Room search</h3>\n    {% include 'info/_search_form.html' with form=searchform %}\n    <div id=\"search-results\">\n    {% if searchform.is_bound %}\n    {% include 'info/room/_search_results.html' %}\n    {% endif %}  {# bound check #}\n    </div>\n    <div id=\"mapcontainer\" class=\"mapwrapper smallmap\"></div>\n    <div id=\"coordinates\"></div>\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/fragment_rack.html",
    "content": "<div\n        id=\"rack_{{ rack.pk }}\"\n        class=\"rack{% if editmode %} editmode{% endif %}\"\n        data-rackid=\"{{ rack.pk }}\"\n>\n  <h5 class=\"rack-heading flex-when-noedit\">\n    <span class=\"rackname\">{{ rack.rackname|default:\"&nbsp;\" }}</span>\n    {% comment %}\n\n    This if-statement only prevents toggling the edit-mode on. Everything\n    related to edit-mode is still present. To prevent possible circumvention,\n    the admin state must be verified in the backend where data is actually\n    altered aswell.\n\n    {% endcomment %}\n    {% if current_user_data.is_admin %}\n      <small class=\"icon-container\">\n        <i class=\"fa fa-arrows\" title=\"Click and drag\"></i>\n        <i class=\"edit-rack fa fa-gear\" title=\"Edit the rack\"></i>\n        <i class=\"fa fa-times-circle remove-rack\" title=\"Remove rack\"></i>\n      </small>\n    {% endif %}\n  </h5>\n\n  <form action=\"{% url 'room-info-racks-rename-rack' room.pk rack.pk %}\"\n        method=\"post\"\n        class=\"rename-rack-form block-when-edit\">\n    {% csrf_token %}\n    <label>\n      Change rack name\n      <small class=\"icon-container\">\n        <i class=\"fa fa-arrows\" title=\"Click and drag\"></i>\n        <i class=\"close-edit-rack fa fa-check-square-o\" title=\"Close edit mode\"></i>\n        <i class=\"fa fa-times-circle remove-rack\" title=\"Remove rack\"></i>\n      </small>\n    </label>\n\n    <input type=\"submit\" value=\"Save name\" class=\"button small right\">\n    <div style=\"overflow: hidden;\">\n      <input type=\"text\" name=\"rackname\" value=\"{{ rack.rackname }}\">\n    </div>\n  </form>\n\n  {# Body contains the sensors #}\n  <div class=\"rack-body {{ rack.configuration.body_class }}\">\n\n    <div class=\"rack-left rack-pdu rack-column\">\n      {% with 0 as column %}\n      <div class=\"sensors\" data-column=\"{{ column }}\">\n        {% for racksensor in rack.left_column %}\n          {% include 'info/room/fragment_rackpdusensor.html' %}\n        {% endfor %}\n      </div>\n      <button class=\"tiny block-when-edit\"\n              title=\"Add PDU sensor to left column\"\n              hx-post=\"{% url 'room-info-racks-add-sensor-modal' room.pk %}\"\n              hx-vals='{\"rackid\": \"{{ rack.pk }}\", \"column\": \"{{ column }}\" }'\n              hx-target=\"body\"\n              hx-swap=\"beforeend\">\n        <i class=\"fa fa-plus\"></i>\n      </button>\n      {% endwith %}\n    </div>\n\n    <div class=\"rack-center rack-column\">\n      {% with 1 as column %}\n      <div class=\"sensors\" data-column=\"{{ column }}\">\n        {% for racksensor in rack.center_column %}\n          {% include 'info/room/fragment_racksensor.html' %}\n        {% endfor %}\n      </div>\n      <button class=\"tiny full-width block-when-edit\"\n              title=\"Add sensor to middle column\"\n              hx-post=\"{% url 'room-info-racks-add-sensor-modal' room.pk %}\"\n              hx-vals='{\"rackid\": \"{{ rack.pk }}\", \"column\": \"{{ column }}\" }'\n              hx-target=\"body\"\n              hx-swap=\"beforeend\">\n              Add sensor\n      </button>\n      {% endwith %}\n    </div>\n\n    <div class=\"rack-right rack-pdu rack-column\">\n      {% with 2 as column %}\n      <div class=\"sensors\" data-column=\"{{ column }}\">\n        {% for racksensor in rack.right_column %}\n          {% include 'info/room/fragment_rackpdusensor.html' %}\n        {% endfor %}\n      </div>\n      <button class=\"tiny block-when-edit\"\n              title=\"Add PDU sensor to right column\"\n              hx-post=\"{% url 'room-info-racks-add-sensor-modal' room.pk %}\"\n              hx-vals='{\"rackid\": \"{{ rack.pk }}\", \"column\": \"{{ column }}\" }'\n              hx-target=\"body\"\n              hx-swap=\"beforeend\">\n        <i class=\"fa fa-plus\"></i>\n      </button>\n      {% endwith %}\n    </div>\n\n  </div>\n\n  {# Form for choosing background color on the rack body #}\n  <div class=\"block-when-edit\">\n    <h6>Set background color</h6>\n    <form class=\"color-chooser\">\n      {% csrf_token %}\n      {% for color_class in color_classes %}\n        <label>\n          <span class=\"color-indicator {{ color_class }}\"></span>\n          <input type=\"radio\"\n                 name=\"rack-color\"\n                 value=\"{{ color_class }}\"\n                 {% if rack.configuration.body_class == color_class %}\n                 checked\n                 {% endif %}\n          >\n        </label>\n      {% endfor %}\n    </form>\n  </div>\n\n  <button class=\"full-width small block-when-edit close-edit-rack\">Close edit mode</button>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/fragment_rackpdusensor.html",
    "content": "<div id=\"item_{{ rack.id }}_{{ racksensor.id }}\"\n     class=\"rack-sensor\"\n     title=\"{{ racksensor.title }}\"\n     data-metric=\"{{ racksensor.get_metric }}\"\n     data-id=\"{{ racksensor.id }}\"\n     data-display-range=\"{{ racksensor.get_display_range }}\"\n     data-sortid=\"item_{{ racksensor.id }}\"\n     data-column=\"{{ column }}\">\n  <div class=\"heading\">\n    <i class=\"fa fa-arrows inline-when-edit\" title=\"Click and drag\"></i>\n    <i class=\"fa fa-remove remove-sensor inline-when-edit\" title=\"Remove sensor\"></i>\n  </div>\n  <a href=\"{{ racksensor.get_absolute_url }}\">\n    <div id=\"sensor-{{ rack.id }}-{{ racksensor.id }}\" class=\"pdu-gauge\"></div>\n  </a>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/fragment_racksensor.html",
    "content": "<div id=\"item_{{ rack.id }}_{{ racksensor.id }}\"\n     class=\"rack-sensor\"\n     title=\"{{ racksensor.title }}\"\n     data-metric=\"{{ racksensor.get_metric }}\"\n     data-id=\"{{ racksensor.id }}\"\n     data-sortid=\"item_{{ racksensor.id }}\"\n     data-column=\"{{ column }}\"\n     data-unit=\"{{ racksensor.unit_of_measurement }}\"\n     {% if racksensor.unit_of_measurement == 'boolean' %}\n     data-on-state=\"{{ racksensor.sensor.on_state }}\"\n     {% else %}\n     data-display-range=\"{{ racksensor.get_display_range }}\"\n     {% endif %}\n>\n  <div class=\"heading\">\n    <span class=\"right\">\n      <i class=\"fa fa-arrows inline-when-edit\" title=\"Click and drag\"></i>\n      <i class=\"fa fa-remove remove-sensor inline-when-edit\" title=\"Remove sensor\"></i>\n    </span>\n    <a href=\"{{ racksensor.get_absolute_url }}\">\n      {{ racksensor.human_readable }}\n    </a>\n  </div>\n  {% if racksensor.unit_of_measurement == racksensor.sensor.UNIT_TRUTHVALUE %}\n    <a href=\"{{ racksensor.get_absolute_url }}\">\n      <div class=\"on alert-box {{ racksensor.sensor.alert_type_class }} hidden\">{{ racksensor.sensor.on_message }}</div>\n      <div class=\"off alert-box success hidden\">{{ racksensor.sensor.off_message }}</div>\n    </a>\n  {% else %}\n  <div class=\"sparkline\"></div>\n  <small class=\"textvalue\"></small>\n  <small>{{ racksensor.unit_of_measurement }}</small>\n  {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/netboxview.html",
    "content": "{% load info %}\n<div id=\"netboxes\">\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n      <button\n         class=\"small button right secondary\"\n         hx-get=\"{% url 'room-info-about-the-search' %}\"\n         hx-target=\"body\"\n         hx-swap=\"beforeend\"\n      >\n        About the search\n      </button>\n      <h4>{{ room.id }}: {{ netboxes|length }}\n        netbox{{ netboxes|pluralize:\"es\" }}</h4>\n    </div>\n  </div>\n\n  <div class=\"row\">\n    <div id=\"global-search\" class=\"small-3 columns\">\n      <label>\n        Search\n        <input id=\"netbox-global-search\" type=\"text\"/>\n      </label>\n    </div>\n\n    <div id=\"vlanfilter\" class=\"small-3 columns\">\n      <label>\n        Vlan\n        <input type=\"text\">\n      </label>\n    </div>\n\n    <div id=\"lastseenfilter\" class=\"small-3 columns\">\n      <label for=\"lastseen-input\">Last Seen</label>\n      <div class=\"form-inline\">\n        <select id=\"lastseen-mode\" name=\"lastseen_mode\">\n          <option value=\"ago\">more than</option>\n          <option value=\"since\">less than</option>\n        </select>\n\n        <input id=\"lastseen-input\" type=\"number\" min=\"0\">\n        <span>days ago</span>\n      </div>\n    </div>\n\n    <div class=\"small-3 columns\">\n      <label>\n        CSV\n          <span class=\"nav-tooltip\" data-align=\"end\">\n              <i class=\"fa fa-question-circle has-tip\" aria-describedby=\"csv-tooltip\"></i>\n              <span id=\"csv-tooltip\" role=\"tooltip\">\n                  To open this in Microsoft Excel, you need to change the file to a .txt file, start Excel and import the file.\n              </span>\n          </span>\n      </label>\n\n      <form id=\"csv-download-form\" action=\"{% url 'room-csv' %}\" method=\"POST\">\n        {% csrf_token %}\n        <input type=\"hidden\" name=\"rows\" value=\"\">\n        <input type=\"hidden\" name=\"roomid\" value=\"{{ room.id }}\">\n        <input type=\"submit\" class=\"button small secondary\" value=\"Download as CSV\">\n      </form>\n    </div>\n  </div>\n\n\n\n  {% for netbox in netboxes %}\n\n    <table class=\"listtable netbox compact cluttered\">\n\n      <caption>\n        <a href=\"{% url 'ipdevinfo-details-by-name' netbox.sysname %}\">\n          {{ netbox.sysname }}\n        </a> {% if netbox.type.name %} - {{ netbox.type.name }} {% endif %}\n      </caption>\n\n      <thead>\n      <tr>\n        <th>Name</th>\n        <th>Portname</th>\n        <th>Status</th>\n        <th>Vlan</th>\n        <th>Last active</th>\n      </tr>\n      </thead>\n\n      <tbody>\n      {% for interface in netbox.interfaces_list %}\n        <tr>\n\n          <td title=\"Interface speed: {{ interface.speed }}\">\n            <a href=\"{% url 'ipdevinfo-interface-details' netbox.sysname interface.id %}\">\n              {{ interface.ifname }}\n            </a>\n          </td>\n\n          <td>{{ interface.ifalias }}</td>\n\n          <td class=\"center-content help\">\n            <img title=\"Link status (green=link, red=no link)\"\n                 src=\"{{ STATIC_URL }}images/lys/{% if interface.ifoperstatus == interface.OPER_UP %}green.png{% else %}red.png{% endif %}\"\n                 alt=\"{% if interface.ifoperstatus == interface.OPER_UP %}Up{% else %}Down{% endif %}\"/>\n          </td>\n\n          <td class=\"numeric\">\n            {% if interface.trunk %}\n              <span class=\"help\" title=\"Allowed vlans: {{ interface.get_trunkvlans_as_range }}\">\n                Trunk\n              </span>\n            {% else %}\n              {% if interface.vlan %}\n                {{ interface.vlan }}\n              {% endif %}\n            {% endif %}\n          </td>\n\n          {% if interface.to_netbox and not interface.trunk %}\n            {# If the interface is connected to other equipment, it should be considered active #}\n            <td title=\"To netbox: {{ interface.to_netbox }}\"\n                class=\"numeric brighten\">\n              <a href=\"{{ interface.to_netbox.get_absolute_url }}\">\n                {{ interface.to_netbox }}\n              </a>\n\n              <span class=\"hidden\" title=\"{{ maxtime|date:\"Y-m-d H:i\" }}\"></span>\n            </td>\n          {% else %}\n            {# If not connected to other equipment, use information from the cam table to indicate last used #}\n            <td\n              {% if not interface.last_cam|is_max_timestamp %}\n                title=\"{{ interface.last_cam|date:\"Y-m-d H:i\" }}\"\n              {% else %}\n                title=\"Active now\"\n              {% endif %}\n              class=\"numeric {% if interface.last_cam|is_max_timestamp %}brighten{% endif %}\">\n\n              {% if not interface.trunk %}\n                {{ interface.last_cam|days_since }}\n                <span class=\"hidden\" title=\"{{ interface.last_cam|date:\"Y-m-d H:i\"|default:'Never' }}\"></span>\n              {% endif %}\n            </td>\n          {% endif %}\n\n        </tr>\n      {% endfor %}\n      </tbody>\n\n    </table>\n\n  {% endfor %}\n\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/roominfo.html",
    "content": "{% extends \"info/room/base.html\" %}\n{% load silent_include %}\n\n{% block base_content %}\n\n    <h4>Room view for {{ room.id }}</h4>\n\n    <ul class=\"button-group\">\n        <li>\n            <a href=\"{% url 'seeddb-room-edit' room.id %}\" class=\"button secondary small\">\n                Edit room\n                <i class=\"fa fa-edit\"></i>\n            </a>\n        </li>\n\n        <li>\n            <a href=\"{% url 'room-info-upload' room.id %}\" class=\"button secondary small\">\n                Edit images\n                <i class=\"fa fa-camera\"></i>\n            </a>\n        </li>\n\n        <li>\n            <a href=\"{% query 'maintenance-new' room=room.id %}\" class=\"button secondary small\">\n                Schedule Maintenance\n                <i class=\"fa fa-wrench\"></i>\n            </a>\n        </li>\n\n        <li>\n            <a href=\"{% url 'devicehistory-view-room' room.id %}\" class=\"button secondary small\">\n                View room history\n                <i class=\"fa fa-clock-o\"></i>\n            </a>\n        </li>\n\n    </ul>\n\n    <div id=\"infotabs\" class=\"ui-helper-hidden\">\n        <ul>\n            <li aria-controls=\"roominfo\">\n              <a href=\"#roominfo\">Room info</a>\n            </li>\n\n\n            <li aria-controls=\"deviceinfo\">\n              <a href=\"{% url 'room-info-deviceinfo' room.id %}\">\n                Device info\n              </a>\n            </li>\n\n            <li aria-controls=\"netboxinterfaces\">\n              <a href=\"{% url 'room-info-netboxes' room.id %}\">\n                Netbox interfaces\n              </a>\n            </li>\n\n            <li aria-controls=\"sensors\">\n              <a href=\"{% url 'room-info-sensors' room.id %}\">\n                Environment sensors\n              </a>\n            </li>\n\n            <li aria-controls=\"racks\">\n              <a href=\"{% url 'room-info-racks' room.id %}\">\n                Sensors in racks\n              </a>\n            </li>\n\n            {% try_to_include \"info/room/custom-tabs.html\" %}\n\n        </ul>\n\n        <div id=\"roominfo\">\n          {% include 'info/room/roominfo_main.html' %}\n        </div>\n\n        <div id=\"deviceinfo\"></div>\n\n        <div id=\"netboxinterfaces\"></div>\n\n        <div id=\"sensors\"></div>  {# sensors #}\n\n        <div id=\"racks\"></div>\n\n        {% try_to_include \"info/room/custom-fragments.html\" %}\n\n    </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/roominfo_devices.html",
    "content": "<table id=\"deviceinfotable\" class=\"listtable netbox_availability_list\">\n    <caption>Netboxes</caption>\n\n    {% include 'info/fragments/netboxes.html' %}\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/roominfo_main.html",
    "content": "{# -*- web-mode-markup-indent-offset: 2 -*- #}\n<div class=\"row\">\n\n\n  <div class=\"medium-6 column\">\n    <table id=\"roominfotable\" class=\"vertitable full-width\">\n      <caption>Roominfo</caption>\n      <tbody>\n        <tr>\n          <th>Name</th>\n          <td>{{ room.id }}</td>\n        </tr>\n        <tr>\n          <th>Description</th>\n          <td>{{ room.description }}</td>\n        </tr>\n        <tr>\n          <th>Aliases</th>\n          <td>{{ room.aliases_string }}</td>\n        </tr>\n        <tr>\n          <th>Location</th>\n          <td>\n            <a href=\"{% url 'location-info' room.location.id %}\">{{ room.location.description|default:room.location.id }}</a>\n          </td>\n        </tr>\n        <tr>\n          <th>Position</th>\n          <td class=\"position\" data-roomname=\"{{ room.id }}\">\n            {% if room.position %}\n              <div class=\"geo\">\n                <span class=\"latitude\">{{ room.latitude }}</span>\n                <span class=\"longitude\">{{ room.longitude }}</span>\n              </div>\n            {% endif %}\n          </td>\n        </tr>\n        <tr>\n          <th>Room summary</th>\n          <td>\n            <ul>\n              <li>Devices: <strong>{{ room.meta_data.devices }}</strong></li>\n              <li>\n                Interfaces: <strong>{{ room.meta_data.interfaces }}</strong>\n              </li>\n              <li>Interfaces with link: <strong>{{ room.meta_data.interfaces_with_link }}</strong></li>\n              <li>Trunk interfaces: <strong>{{ room.meta_data.trunk_interfaces }}</strong></li>\n            </ul>\n          </td>\n        </tr>\n        {% for key, value in room.sorted_data %}\n          <tr>\n            <th>{{ key }}</th>\n            <td>{{ value|urlize }}</td>\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n\n  </div> {# End of column #}\n\n  <div class=\"medium-6 column\">\n    <div class=\"mapwrapper\">\n      <div id=\"room_map\"></div>\n    </div>\n  </div>\n\n</div>\n\n{% include \"webfront/_lightbox_gallery.html\" with images=images gallery_id=\"room-gallery\" title=\"Images for this room\" %}\n\n{% if not images|length %}\n<a href=\"{% url 'room-info-upload' room.id %}\" class=\"button secondary small\">\n  Add images\n  <i class=\"fa fa-camera\"></i>\n</a>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/roominfo_racks.html",
    "content": "{% block base_header_additional_head %}\n  <link href=\"{{ STATIC_URL }}css/nav/rack.css\" rel=\"stylesheet\">\n  <script>\n    require([\"src/info_room_rack\", 'plugins/vue_rack']);\n    NAV.urls.render_add_sensor = \"{% url 'room-info-racks-add-sensor-modal' room.pk %}\"\n    NAV.urls.remove_sensor = \"{% url 'room-info-racks-remove-sensor' room.pk %}\"\n    NAV.urls.remove_rack = \"{% url 'room-info-racks-remove-rack' room.pk %}\"\n    NAV.urls.save_sensor_order = \"{% url 'room-info-racks-save-sensor-order' room.pk %}\"\n    NAV.urls.save_rack_order = \"{% url 'room-info-racks-save-rack-order' room.pk %}\"\n    NAV.urls.save_rack_color = \"{% url 'room-info-racks-save-rack-color' room.pk %}\"\n    // Process content added by AJAX to enable htmx features\n    htmx.process(document.getElementById(\"racks-container\"));\n  </script>\n{% endblock %}\n\n<h3>Environment sensors in racks in {{ room.pk }}</h3>\n\n{% if not racks %}\n  <p class=\"alert-box\" data-id=\"no-racks-alert\">There are no racks in this room.</p>\n{% endif %}\n\n<div id=\"racks-container\" class=\"racks-container\">\n  {% for rack in racks %}\n    {% include 'info/room/fragment_rack.html' %}\n  {% endfor %}\n\n  {% if current_user_data.is_admin %}\n    <div id=\"add-rack-button-container\">\n      <h5 class=\"rack-heading\">&nbsp;</h5>\n      <button\n          class=\"button small\"\n          hx-get=\"{% url 'room-info-racks-add-rack-modal' room.pk %}\"\n          hx-target=\"body\"\n          hx-swap=\"beforeend\"\n      >\n          Add a rack\n      </button>\n    </div>\n  {% endif %}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/info/room/roominfo_sensors.html",
    "content": "{% load thresholds %}\n\n{% if has_sensors %}\n\n  <dl class=\"sub-nav\">\n    <dt>Filter:</dt>\n    <dd class=\"active\"><a href=\"javascript:void(0);\" data-action=\"all\">All</a></dd>\n    <dd><a href=\"javascript:void(0);\" data-action=\"gauges\">Gauges</a></dd>\n    <dd><a href=\"javascript:void(0);\" data-action=\"charts\">Charts</a></dd>\n  </dl>\n\n  {% for netbox in netboxes %}\n    {% if netbox.get_environment_sensors.count > 0 %}\n      <div class=\"netbox-sensor-container left\">\n        <h4>Sensors for\n          <a href=\"{% url 'ipdevinfo-details-by-name' netbox.sysname %}#!sysmetrics!metricsensors\"\n             title=\"See all sensor metrics for this IP device\">\n            {{ netbox.sysname }}\n          </a>\n        </h4>\n        <div class=\"room-sensors\">\n          {% for sensor in netbox.get_environment_sensors %}\n            <div class=\"room-sensor\"\n                 data-url=\"{{ sensor.get_graph_url }}\"\n                 data-unit=\"{{ sensor.normalized_unit }}\"\n                 data-sensorid=\"{{ sensor.id }}\"\n                 data-sensorname=\"{{ sensor.human_readable }}\"\n                 data-display-range=\"{{ sensor.get_display_range }}\"\n                 data-dashboard_url=\"{% url 'add-user-navlet-sensor' %}?sensor_id={{ sensor.pk }}\"\n                 data-thresholds=\"{{ sensor.get_metric_name|find_thresholds }}\"\n            ></div>\n          {% endfor %}\n        </div>\n      </div>\n    {% endif %}\n  {% endfor %}\n\n  <div class=\"float-clear\"></div>\n\n{% else %}\n\n  {# There are no sensors in this room #}\n  <div class=\"alert-box\">\n    {% if netboxes %}\n\n      <p>We could not find any IP devices in the <em>environment category</em> with environment sensors in this room.</p>\n\n      {% if netboxes %}\n        <p>The following IP devices with category ENV are in this room:</p>\n        <ul>\n          {% for netbox in netboxes %}\n            <li>\n              <a href=\"{{ netbox.get_absolute_url }}\" title=\"See this device in IpDeviceInfo\">\n                {{ netbox }}\n              </a>\n            </li>\n          {% endfor %}\n        </ul>\n      {% endif %}\n\n    {% else %}\n\n      There are no IP devices in the <em>environment category</em> in this room.\n\n    {% endif %}\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/room/upload.html",
    "content": "{% extends \"info/room/base.html\" %}\n\n{% block base_header_additional_head %}\n  <link href=\"{{ STATIC_URL }}css/nav/info_room.css\" rel=\"stylesheet\">\n  <link href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\"\n        rel=\"stylesheet\">\n  <script>require([\"src/image_upload\"]);</script>\n  <script>\n    NAV.urls['image-update-title'] = \"{% url 'image-update-title' %}\";\n    NAV.urls['image-delete-image'] = \"{% url 'image-delete-image' %}\";\n    NAV.urls['image-update-priority'] = \"{% url 'image-update-priority' %}\";\n  </script>\n  <style>\n    {# Styles for the form file input #}\n    .inputfile {\n      width: 0.1px;\n      height: 0.1px;\n      opacity: 0;\n      overflow: hidden;\n      position: absolute;\n      z-index: -1;\n    }\n\n    .fa.fa-upload { margin-right: .8em; }\n\n  </style>\n{% endblock %}\n\n{% block base_content %}\n\n  {% include \"info/_image_upload_header.html\" with id=room.id %}\n\n  <p><a href=\"{% url 'room-info' room.id %}\">Back to room</a></p>\n\n  {% include 'info/images/upload.html' %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/vlan/_search_results.html",
    "content": "{% if vlans %}\n<table class=\"listtable searchresults\">\n  <caption>{{ vlans|length }} result{{ vlans|pluralize:\",s\" }}\n    for \"{{ form.data.query }}\"\n  </caption>\n\n  <thead>\n    <tr>\n      <th>Vlan</th>\n      <th>Type</th>\n      <th>Netident</th>\n      <th>Description</th>\n    </tr>\n  </thead>\n\n  <tbody>\n    {% for vlan in vlans %}\n      <tr>\n        <td>\n          <a href=\"{% url 'vlan-details' vlan.id %}\">{{ vlan.vlan }}</a>\n        </td>\n        <td>\n          {{ vlan.net_type }}\n        </td>\n        <td>\n          {{ vlan.net_ident }}\n        </td>\n        <td>\n          {{ vlan.description }}\n        </td>\n      </tr>\n    {% endfor %}\n  </tbody>\n</table>\n{% else %}\n<div class=\"alert-box\">No VLAN(s) found</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/info/vlan/base.html",
    "content": "{% extends \"info/base.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   #tablecontainer {\n       overflow: auto;\n   }\n\n   #tablecontainer > table {\n       float: left;\n       margin-right: 1em;\n   }\n\n   table caption {\n       white-space: nowrap;\n   }\n\n   table.searchresults {\n       width: 500px;\n   }\n  </style>\n{% endblock %}\n\n\n\n{% block content %}\n\n  {% block vlandetails %}\n\n    <h3>VLAN search</h3>\n\n    {% include 'info/_search_form.html' with form=form %}\n    <div id=\"search-results\">\n    {% if form.is_bound %}\n        {% include 'info/vlan/_search_results.html' with form=form vlans=vlans %}\n    {% endif %}\n    </div>\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/info/vlan/vlandetails.html",
    "content": "{% extends 'info/vlan/base.html' %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <link rel=\"stylesheet\" href=\"/static/css/nav/local_rickshaw.css\"/>\n{% endblock %}\n\n\n{% block footer_scripts %}\n  <script>\n   require(['plugins/graphfetcher'], function (GraphFetcher) {\n       $('.vlangraph').each(function (index, element) {\n           new GraphFetcher($(element), element.dataset.url);\n       });\n\n       $('.prefixgraph').each(function (index, element) {\n           new GraphFetcher($(element), element.dataset.url);\n       });\n       $('.dhcpgraph').each(function (index, element) {\n           new GraphFetcher($(element), element.dataset.url);\n       });\n   });\n  </script>\n{% endblock %}\n\n\n{% block vlandetails %}\n\n  <h3>Vlan details</h3>\n\n  <div id=\"tablecontainer\">\n    {% comment %} Print vlan information {% endcomment %}\n    <table id=\"vlaninfo\" class=\"vertitable\">\n      <caption>Vlan {{ vlan }}</caption>\n\n      <tbody>\n        <tr>\n          <th>Vlan</th>\n          <td>{{ vlan.vlan|default_if_none:\"N/A\" }}</td>\n        </tr>\n        <tr>\n          <th>Type</th>\n          <td>{{ vlan.net_type|default_if_none:\"\" }}</td>\n        </tr>\n\n\n        <tr>\n          <th>Organization</th>\n          <td>{{ vlan.organization|default_if_none:\"\" }}</td>\n        </tr>\n\n\n        <tr>\n          <th>Net Ident</th>\n          <td>{{ vlan.net_ident|default_if_none:\"\" }}</td>\n        </tr>\n\n        <tr>\n          <th>Usage</th>\n          <td>{{ vlan.usage|default_if_none:\"\" }}</td>\n        </tr>\n\n        <tr>\n          <th>Description</th>\n          <td>{{ vlan.description|default_if_none:\"\" }}</td>\n        </tr>\n      </tbody>\n\n    </table>\n\n\n    {% comment %} Print gwportprefixes {% endcomment %}\n    <table id=\"gwportprefixinfo\" class=\"listtable\">\n      <caption>Router ports</caption>\n\n      <thead>\n        <tr>\n          <th>Netbox</th>\n          <th>Address</th>\n          <th>Interface</th>\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for gwportprefix in gwportprefixes %}\n          <tr>\n            <td>\n              <a href=\"{% url 'ipdevinfo-details-by-name' gwportprefix.interface.netbox.sysname %}\">\n                {{ gwportprefix.interface.netbox.sysname }}\n              </a>\n            </td>\n            <td>\n              <a href=\"{% url 'ipdevinfo-details-by-addr' gwportprefix.gw_ip %}\">\n                {{ gwportprefix.gw_ip }}\n              </a>\n            </td>\n            <td>\n              <a href=\"{% url 'ipdevinfo-interface-details' gwportprefix.interface.netbox.sysname gwportprefix.interface.id %}\">\n                {{ gwportprefix.interface.ifname }}\n              </a>\n            </td>\n          </tr>\n\n        {% endfor %}\n      </tbody>\n\n    </table>\n\n\n    {% comment %} Print prefixes {% endcomment %}\n    <table id=\"prefixinfo\" class=\"listtable\">\n      <caption>Prefixes</caption>\n\n      <thead>\n        <tr>\n          <th>Net address</th>\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for prefix in prefixes %}\n          <tr>\n            <td>\n              <a href=\"{% url 'prefix-details' prefix.id %}\">\n                {{ prefix.net_address }}\n              </a>\n            </td>\n          </tr>\n        {% endfor %}\n\n      </tbody>\n\n    </table>\n\n  </div>\n\n  {% comment %} Graph with stacked ip-address count from all ipv4 and ipv6 prefixes {% endcomment %}\n  <h2>Vlan graphs</h2>\n\n  <ul class=\"small-block-grid-1 large-block-grid-2\">\n    {% for graph_url in vlan.get_graph_urls %}\n      <li class=\"vlangraph graphitegraph\" data-url=\"{{ graph_url }}\">\n        <div class=\"rickshaw-container\"></div>\n      </li>\n    {% endfor %}\n  </ul>\n\n\n  {% comment %} Graph for each prefix containing ip-addresses, mac-addresses and size of range {% endcomment %}\n  <h2>Prefix graphs</h2>\n\n  <ul class=\"small-block-grid-1 large-block-grid-2\">\n    {% for prefix in prefixes %}\n      <li class=\"prefixgraph graphitegraph\" data-url=\"{{ prefix.get_graph_url }}\">\n        <div class=\"rickshaw-container\"></div>\n      </li>\n    {% endfor %}\n  </ul>\n\n  {% comment %} Graph containing DHCP statistics for total, assigned and declined addresses {% endcomment %}\n  {% if dhcp_graph_urls or graphite_error %}\n    <h2>DHCP graphs</h2>\n    {% if graphite_error %}\n      <span class=\"label alert\">Graphite unreachable</span>\n    {% else %}\n      <ul class=\"small-block-grid-1 large-block-grid-2\">\n        {% for graph in dhcp_graph_urls %}\n          <li class=\"dhcpgraph graphitegraph\" data-url=\"{{ graph }}\">\n            <div class=\"rickshaw-container\"></div>\n          </li>\n        {% endfor %}\n      </ul>\n    {% endif %}\n  {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/interface_browser/base.html",
    "content": "{% extends 'base.html' %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link href=\"{{ STATIC_URL }}css/nav/interface_browser.css\" rel=\"stylesheet\" />\n{% endblock %}\n\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Interface browser' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <form id=\"filters\">\n    <label class=\"label-netbox-filter\">\n      Device\n      <div>\n        <select id=\"netbox-filter\" multiple></select>\n      </div>\n    </label>\n\n    <label>\n      Port Filters\n      <div>\n        <select id=\"ifclassfilter\" name=\"ifclass\">\n          <option value=\"\">----------</option>\n          <option value=\"swport\" selected>Swport</option>\n          <option value=\"gwport\">Gwport</option>\n          <option value=\"trunk\">Trunk</option>\n        </select>\n      </div>\n    </label>\n\n    <label class=\"label-query-filter\">\n      Search\n      <div>\n        <input id=\"queryfilter\"\n               name=\"query\"\n               placeholder=\"Search in ifalias, ifdescr and ifname\"\n               type=\"text\"\n               />\n      </div>\n    </label>\n\n    <label>\n      LinkStatus\n      <div>\n        <select id=\"operstatus-filter\" name=\"operstatus\">\n          <option value=\"\">----------</option>\n          <option value=\"1\">Up</option>\n          <option value=\"2\">Down</option>\n        </select>\n      </div>\n    </label>\n\n    <label class=\"label-vlan-filter\">\n      Vlan\n      <div>\n        <input id=\"vlanfilter\"\n               name=\"vlan\"\n               type=\"text\"\n        />\n      </div>\n    </label>\n\n    <label>\n      &nbsp;\n      <div>\n        <input type=\"submit\" value=\"Fetch interfaces\" class=\"button small\" />\n      </div>\n    </label>\n  </form>\n\n  <div id=\"column-toggler\">\n    <button class=\"toggle-header tiny\">\n      <i class=\"fa fa-caret-right\"></i>\n      Column visibility\n    </button>\n    <form class=\"toggle-container\" style=\"display: none\">\n      <ul> </ul>\n    </form>\n  </div>\n\n  <table id=\"portlist-table\"></table>\n\n{% endblock %}\n\n\n{% block footer_scripts %}\n  <script>\n   require(['src/interface_browser'], function(Browser) {\n       Browser();\n   })\n\n   NAV.urls.vlan_index = \"{% url 'vlan-index' %}\";\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipam/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'IPAM' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% block content %}\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/_subnet_diagram_help_modal.html",
    "content": "<h4>How to use the subnet diagram</h4>\n<img src=\"/static/images/ipam/subnetallocator_whole.png\" alt=\"the user interface of the subnet diagram\"/>\n<ol>\n  <li>Select a prefix by clicking on it. This will display more information about the prefix. If it's an unused prefix, you will also be able to reserve it.</li>\n  <li>Need more detail? You can select an area to focus to zoom into it. You can also zoom using your scroll wheel and by double clicking. To reset the zoom, you can press outside the selected area (dark grey) in the selector.</li>\n</ol>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/allocate-subnet.html",
    "content": "<script type=\"text/template\" id=\"prefix-available-subnets\">\n  <div class=\"allocation-tree panel\">\n    <% if (state === \"FETCHING_STATS\") { %>\n    <div class=\"prefix-allocate-flash alert-box\">\n      <i class=\"fa fa-spinner fa-spin\"></i>\n      Getting data for allocation tree\n    </div>\n    <% } %>\n    <div class=\"treemap\">\n      <button\n              title=\"Help\"\n              class=\"button secondary small right\"\n              hx-get=\"{% url 'ipam-subnet-allocator-help' %}\"\n              hx-target=\"body\"\n              hx-swap=\"beforeend\"\n      >\n          Help\n      </button>\n      <!-- container for main tree viz -->\n      <div class=\"legends\"></div>\n      <div class=\"viz\"></div>\n    </div>\n    <div class=\"allocation-tree-info region\">\n      <!-- container for information about the currently selected node -->\n    </div>\n    <div class=\"allocation-tree-reservation region\">\n    </div>\n  </div>\n</script>\n\n<script type=\"text/template\" id=\"prefix-allocate-reservation\">\n  <div class=\"panel white\">\n    <h5>Creating new reservation</h5>\n    <form class=\"allocation-tree-reserve-form\">\n      <label for=\"Size of network\">Wanted prefix length</label>\n      <input type=\"number\" class=\"size-of-network\" value=\"<%= network_size %>\" min=\"2\" />\n      <button class=\"button small choose-network-size\">Suggest subnets of this size</button>\n      <% if (state === \"CHOSEN_RESERVATION_SIZE\" || state === \"CHOSEN_SUBNET\") { %>\n      <select class=\"prefix-list\" style=\"width: 100%;\"><option></option></select>\n      <% } %>\n    </form>\n    <button class=\"button small cancel-reservation\">Cancel</button>\n    <% if (state === \"CHOSEN_SUBNET\") { %>\n    <a href=\"<%= creation_url %>\" class=\"button small send-reservation\" target=\"_blank\">\n      Create reservation for <span class=\"selected-prefix\"><%= selected_prefix %></span>\n    </a>\n    <% } %>\n  </div>\n</script>\n\n<script type=\"text/template\" id=\"prefix-allocate-info\">\n  <h4>\n    Currently selected: <strong><%= node.prefix %></strong>\n    <% if (!node.is_mock_node) { %>\n    (<%= node.net_type %>)\n    <a class=\"button small\" href=\"<%= node.edit_url %>\" target=\"_blank\">Edit in SeedDB</a>\n    <% } %>\n  </h4>\n  <ul>\n    <% if (!node.is_mock_node) { %>\n    <li><strong>VLAN:</strong> <%= node.vlan_number || \"None\" %></li>\n    <li><strong>Description:</strong> <%= node.description || \"Nothing\" %></li>\n    <li><strong>Organization:</strong> <%= node.organization %></li>\n    <% } %>\n  </ul>\n  <% if (node.is_reservable && state !== \"CREATING_RESERVATION\") { %>\n  <p>This network can be partially or wholly reserved.</p>\n  <button class=\"reserve-subnet button small\">Allocate new subnet within <%= node.prefix %></button>\n  <% } %>\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/tree-form-advanced.html",
    "content": "<!-- address types to display -->\n<div class=\"prefix-tree-control-checkboxes\">\n  <label>\n    VLAN (number, optional)\n    <input type=\"number\" class=\"search-param\" id=\"prefix-vlan\"\n      name=\"vlan\" value=\"<%= queryParams.vlan %>\">\n  </label>\n\n  <label>\n    Description (optional)\n    <input type=\"text\" class=\"search-param\" id=\"prefix-vlan\"\n      name=\"description\" value=\"<%= queryParams.description %>\">\n  </label>\n\n  <label>\n    Prefix\n    <select id=\"prefix-search-box\" class=\"search-param\" name=\"within\" style=\"width: 100%;\">\n      <option></option>\n    </select>\n  </label>\n\n  <label>\n    Organization (optional)\n    <select class=\"select2 search-param\" name=\"organization\" multiple=\"multiple\" style=\"width: 100%;\">\n    {% for organization in organizations %}\n      <option value=\"{{ organization.id }}\" <%= _.contains(queryParams.organization, '{{ organization.id }}') ? \"selected\" : null %>>\n        {{ organization }}\n      </option>\n      {% endfor %}\n    </select>\n  </label>\n\n  <label>\n    Usage (optional)\n    <select class=\"select2 search-param\" name=\"usage\" multiple=\"multiple\" style=\"width: 100%;\">\n      {% for usage in usages %}\n      <option value=\"{{ usage.id }}\" <%= _.contains(queryParams.usage, '{{ usage.id }}') ? \"selected\" : null %>>\n        {{ usage }}\n      </option>\n      {% endfor %}\n    </select>\n  </label>\n\n  <h5>Address family</h5>\n\n  <label>\n    <input id=\"prefix-flag-ipv4\" class=\"search-flag\" type=\"checkbox\" name=\"type\" value=\"ipv4\"\n    <%= _.contains(queryParams.type, \"ipv4\") ? \"checked\" : null %>>\n    Public IPv4\n  </label>\n\n  <label>\n    <input id=\"prefix-flag-ipv6\" class=\"search-flag\", type=\"checkbox\" name=\"type\" value=\"rfc1918\"\n    <%= _.contains(queryParams.type, \"rfc1918\") ? \"checked\" : null %>>\n    Private IPv4 (RFC1918)\n  </label>\n\n  <label>\n    <input id=\"prefix-flag-ipv6\" class=\"search-flag\" type=\"checkbox\" name=\"type\" value=\"ipv6\"\n    <%= _.contains(queryParams.type, \"ipv6\") ? \"checked\" : null %>>\n    IPv6\n  </label>\n\n  <label>\n    Net type\n    {% comment %}\n    yo, templates in your templates. the net_types context attribute is a list\n    of all net types registered in NAV, except scope and reserved, which are\n    given special treatment.\n    {% endcomment %}\n    <select class=\"select2 search-param\" name=\"net_type\" multiple=\"multiple\" style=\"width: 100%;\">\n      <option value=\"scope\">scope</option>\n      <option value=\"reserved\" <%= _.contains(queryParams.net_type, 'reserved') ? \"selected\" : null %>>\n        reserved\n      </option>\n      {% for net_type in net_types %}\n      <option value=\"{{ net_type }}\" <%= _.contains(queryParams.net_type, '{{ net_type }}') ? \"selected\" : null %>>\n        {{ net_type }}\n      </option>\n      {% endfor %}\n    </select>\n  </label>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/tree-form.html",
    "content": "<form id=\"prefix-tree-control\" class=\"prefix-tree-control\" onsubmit=\"return false;\">\n\n  <h3>Search</h3>\n\n  <div>\n    <button class=\"submit-search btn small\">Search</button>\n    <button class=\"submit-reset btn small\">Reset</button>\n  </div>\n\n  <% if (state === \"SIMPLE_SEARCH\") { %>\n  <!-- free text search -->\n  <div class=\"prefix-tree-control-search\">\n    <label>\n      Search (in organization ID or VLAN description)\n    </label>\n    <input autofocus\n      name=\"search\"\n      id=\"prefix-tree-query\"\n      class=\"search-param prefix-tree-query\"\n      value=\"<%= queryParams.search %>\">\n  </div>\n  <div>\n    <input type=\"hidden\" class=\"search-param\" id=\"prefix-net-type\" name=\"net_type\" value=\"scope\">\n  </div>\n  <% } %>\n\n  {% include \"ipam/includes/tree-form-advanced.html\" %}\n  <div>\n    <button class=\"submit-search btn small\">Search</button>\n    <button class=\"submit-reset btn small\">Reset</button>\n  </div>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/tree-node.html",
    "content": "<a id=\"prefix-<%= pk %>\" href=\"#prefix-<%= pk %>\" class=\"prefix-tree-item-title\">\n    <div class=\"prefix-graphs\"></div>\n    <h3 class=\"ip\">\n        <%= prefix %>\n        <% if (description) { %>\n        <span style=\"font-size: 60%\">&nbsp;&ndash; <%= description %></span>\n        <% } %>\n        <% if (length >= 1) { %>\n        <span title=\"<%= length %> children\" class=\"number-of-children label round\">\n            <%= length %>\n        </span>\n        <% } %>\n    </h3>\n    <% if (vlan_number) { %>\n    <span class=\"vlan\"><strong>VLAN <%= vlan_number %>:</strong> </span>\n    <% } %>\n    <% if (net_ident) { %>\n    <span class=\"net_ident\"><%= net_ident %></span> &mdash;\n    <% } %>\n    <span class=\"net-type\"><%= net_type %></span>\n</a>\n<div class=\"content prefix-tree-item-content\">\n  <div class=\"prefix-tree-item-content-data\">\n    <a class=\"button small\" href=\"<%= NAV.urls['prefix-index'] %><%= pk %>\" target=\"_blank\">\n      View details\n    </a>\n    <% if (edit_url && ['reserved', 'scope'].indexOf(net_type) >= 0) { %>\n    <a class=\"button small\" href=\"<%= edit_url %>\" target=\"_blank\">Edit in SeedDB</a>\n    <% } %>\n    <% if (net_type === \"scope\") { %>\n    <a class=\"button small\"\n       href=\"<%= NAV.urls['report-matrix'] %>/<%= prefix %>\"\n       target=\"_blank\">\n      Open in Subnet Matrix\n    </a>\n    <% } %>\n    <% if (net_type === \"lan\") { %>\n    <a class=\"button small\"\n       href=\"<%= NAV.urls['machinetracker-ip'] %>?ip_range=<%= prefix %>\"\n       target=\"_blank\">\n      Search in Machine Tracker\n    </a>\n    <% } %>\n    <ul class=\"prefix-metadata\">\n      <% if (vlan_number) { %>\n      <li><strong>VLAN (number):</strong> <%= vlan_number %></li>\n      <% } %>\n      <% if (organization) { %>\n      <li><strong>Organization:</strong> <%= organization %></li>\n      <% } %>\n      <% if (description) { %>\n      <li><strong>Description</strong> <%= description %></li>\n      <% } %>\n      <% if (vlan_usage) { %>\n      <li><strong>Usage:</strong> <%= vlan_usage %></li>\n      <% } %>\n    </ul>\n    <div class=\"prefix-tree-available-subnets\">\n      <!-- container for available subnets within this prefix -->\n    </div>\n  </div>\n  <div class=\"prefix-tree-children-container\">\n    <!-- container for any child nodes -->\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/includes/tree-root.html",
    "content": "<div id=\"ipam-flash\"></div>\n<div class=\"prefix-tree-root\">\n  <ul class=\"prefix-tree-children\">\n  </ul>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipam/index.html",
    "content": "{% extends \"ipam/base.html\" %}\n\n\n{% block base_header_additional_head %}\n<link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\"/>\n<link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/ipam.css\">\n<script>\n NAV.urls['machinetracker-ip'] = \"{% url 'machinetracker-ip' %}\";\n NAV.urls['report-matrix'] = \"{% url 'report-matrix' %}\";\n NAV.urls['prefix-index'] = \"{% url 'prefix-index' %}\";\n</script>\n<script>require([\"src/ipam/ipam\"]);</script>\n{% endblock %}\n\n{% block content %}\n\n<div class=\"ipam\">\n  <!-- helper modal for the subnet allocator -->\n  {% if has_registered_scopes %}\n  <div class=\"ipam-sidebar panel white\">\n    <div class=\"sidebar-wrapper\">\n      <div class=\"row\" id=\"ipam-controls\"></div>\n    </div>\n  </div>\n\n  <div id=\"prefix-tree\">\n    <div class=\"content\">\n    </div>\n    <!-- container for prefix tree -->\n  </div>\n\n  <script type=\"text/template\" id=\"prefix-control-form\">\n    {% include \"ipam/includes/tree-form.html\" %}\n  </script>\n\n  <script type=\"text/template\" id=\"prefix-control-form-advanced\">\n    {% include \"ipam/includes/tree-form-advanced.html\" %}\n  </script>\n\n  {% include \"ipam/includes/allocate-subnet.html\" %}\n\n  <script type=\"text/template\" id=\"prefix-graphs\">\n    <div class=\"allocation-graph\"></div>\n    <div class=\"usage-graph\"></div>\n  </script>\n\n  <script type=\"text/template\" id=\"prefix-list\">\n    {% include \"ipam/includes/tree-root.html\" %}\n  </script>\n\n  <script type=\"text/template\" id=\"prefix-children\">\n\n    <div class=\"prefix-children-header\">\n      <div class=\"tree-control\">\n        <button class=\"button small close-all\">Close all open nodes</button>\n        <select name=\"item-order\" class=\"sort-by\">\n          <% _.each([\n          {name: \"prefix (CIDR)\", unit: \"prefix\"},\n          {name: \"VLAN number\", unit: \"vlan\"},\n          {name: \"usage (%)\", unit: \"usage\"},\n          {name: \"allocated (%)\", unit: \"allocated\"}\n          ],\n          function(opt) { %>\n          <% if (opt.unit === currentComparator) { %>\n          <option value=\"<%= opt.unit %>\" selected>Order by <%= opt.name %></option>\n          <% } else { %>\n          <option value=\"<%= opt.unit %>\">Order by <%= opt.name %></option>\n          <% }}) %>\n        </select>\n      </div>\n      <% if (parent) { %>\n      <h3>Children of <%= parent %></h3>\n      <% } %>\n    </div>\n\n    <ul class=\"prefix-tree-children\"></ul>\n  </script>\n\n  <script type=\"text/template\" id=\"prefix-tree-node\">\n    {% include \"ipam/includes/tree-node.html\" %}\n  </script>\n\n  {% else %}\n\n  <p class=\"alert-box secondary\">\n    The NAV-database does not contain any network scopes.\n    Please <a href=\"{% url 'seeddb-prefix-edit' %}\">seed the database</a>\n    and return here to use the IPAM.\n  </p>\n\n  {% endif %}\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/_poe_classification_hint_modal.html",
    "content": "<p>\n  The classification column shows PoE device classification for this port. Valid values:\n</p>\n\n<dl>\n  <dt>class0</dt><dd> Unclassified (15.4W)</dd>\n  <dt>class1</dt><dd> Very low power (4W)</dd>\n  <dt>class2</dt><dd> Low power (7W)</dd>\n  <dt>class3</dt><dd> Mid power (15.4W)</dd>\n  <dt>class4</dt><dd> High power (30W)</dd>\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/_poe_status_hint_modal.html",
    "content": "<p>\n  The status column shows PoE device detection status for this port. Valid values:\n</p>\n\n<dl>\n  <dt>disabled</dt><dd> Power over ethernet is disabled for this port</dd>\n  <dt>searching</dt><dd> No power over ethernet device is detected on this port</dd>\n  <dt>delivering power</dt><dd> Power over ethernet is active for this port and delivers power to the connected device</dd>\n  <dt>fault</dt><dd> The port has been tested and found faulty</dd>\n  <dt>test</dt><dd> The port is under testing</dd>\n  <dt>other fault</dt><dd> The port is idle because of error conditions</dd>\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/_search_results.html",
    "content": "{% if netboxes %}\n    <table class=\"listtable\">\n        <caption>\n            {{ netboxes|length }} result{{ netboxes|pluralize:\",s\" }}\n            for \"{{ query }}\"\n        </caption>\n\n        <thead>\n        <tr>\n            <th>#</th>\n            <th>Sysname</th>\n            <th>IP</th>\n        </tr>\n        </thead>\n\n        <tbody>\n        {% for netbox in netboxes %}\n            <tr>\n                <td>{{ forloop.counter }}</td>\n                <td>\n                    <a href=\"{{ netbox.get_absolute_url }}\">{{ netbox }}</a>\n                </td>\n                <td>{{ netbox.ip }}</td>\n            </tr>\n        {% endfor %}\n        </tbody>\n    </table>\n{% else %}\n    {% if query %}\n        <div class=\"alert-box\">No IP device(s) found</div>\n    {% endif %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/base.html",
    "content": "{% extends \"base.html\" %}\n\n{# FIXME hardcoded urls #}\n{% block base_header_additional_head %}\n    <script>require(['src/ipdevinfo'])</script>\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/ipdevinfo.css\"/>\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/local_rickshaw.css\"/>\n{% endblock %}\n\n{% block base_content %}\n    {% if netbox.deleted_at %}\n    <h3><del>{{ heading }}</del></h3>\n    {% else %}\n    <h3>{{ heading }}</h3>\n    {% endif %}\n\n        {% if netbox.deleted_at %}\n\n          <div class=\"alert-box warning with-icon\">This IP Device was scheduled for deletion at {{ netbox.deleted_at }}</div>\n\n      {% endif %}\n\n    {% if errors %}\n        <ul class=\"error\">\n            {% for error in errors %}\n                <li>{{ error }}</li>\n            {% endfor %}\n        </ul>\n    {% endif %}\n\n    {% block content %}\n    {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-affected.html",
    "content": "{% load silent_include %}\n<h4>\n    If this IP device stops working the following will likely be affected.\n</h4>\n\n<div class=\"panel\">\n  {# List of affected ip-devices #}\n  {% if affected %}\n    <section>\n      <h4>\n        Affected devices\n        <i class=\"fa fa-question-circle\"\n           title=\"Devices with or behind devices with redundant links\"></i>\n      </h4>\n\n      <ul>\n        {% for netbox in affected %}\n          <li>\n            <a href=\"{% url 'ipdevinfo-details-by-id' netbox.id %}\">{{ netbox }}</a>\n            ({{ netbox.category.id }})\n          </li>\n        {% endfor %}\n      </ul>\n    </section>\n  {% endif %}\n\n\n  {# List of unreachable ip-devices #}\n  {% if unreachable %}\n    <section>\n      <h4>Devices unreachable</h4>\n\n      <ul>\n        {% for netbox in unreachable %}\n          <li>\n            <a href=\"{% url 'ipdevinfo-details-by-id' netbox.id %}\">{{ netbox }}</a>\n            ({{ netbox.category.id }})\n          </li>\n        {% endfor %}\n      </ul>\n    </section>\n\n    <section>\n      <h4>Affected hosts</h4>\n\n      <p>{{ affected_hosts }} active hosts/users</p>\n    </section>\n  {% endif %}\n\n\n  {# List of unreachable services #}\n  {% if services %}\n    <section>\n      <h4>Services on devices going down</h4>\n\n      <ul>\n        {% for service in services %}\n          <li>{{ service }}</li>\n        {% endfor %}\n      </ul>\n    </section>\n  {% endif %}\n\n\n  {# List of contacts that are involved #}\n  <section>\n    <h4>Organizations</h4>\n    <ul>\n      {% for organization in organizations %}\n        <li>{{ organization }} - {{ organization.contact|default:'No contact info' }}</li>\n      {% empty %}\n        <li>No organizations affected</li>\n      {% endfor %}\n    </ul>\n  </section>\n\n  {# Form to send mail to involved contacts #}\n  <form action=\"mailto:{{ contacts|join:\",\" }}\">\n    <input type=\"submit\"\n           class=\"button small\"\n           value=\"Send mail to affected organizations\"\n           {% if not contacts %}disabled{% endif %}>\n  </form>\n\n  {% try_to_include \"ipdevinfo/custom-affected.html\" %}\n\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-alerts.html",
    "content": "<div id=\"alerts\">\n  {% if netbox %}\n\n    {# Table for listing recent alerts #}\n    <h4>\n      Alerts last {{ alert_info.days_back }}\n      day{{ alert_info.days_back|pluralize }}\n    </h4>\n    <table class=\"listtable\">\n      <thead>\n        <tr>\n          <th>Event</th>\n          <th>Message</th>\n          <th>Start</th>\n          <th>End</th>\n          <th>Downtime</th>\n        </tr>\n      </thead>\n\n      <tfoot>\n        <tr>\n          <th colspan=\"5\">\n            {% if alert_info.is_more_alerts %}\n              Showing {{ alert_info.alerts|length }} of\n              {{ alert_info.count }} alerts, see\n              <a href=\"{% url 'devicehistory-view-netbox' netbox.id %}\">\n                Device History</a> for all\n            {% else %}\n              {{ alert_info.alerts|length }}\n              alert{{ alert_info.alerts|length|pluralize }}\n              found,\n              see\n              <a href=\"{% url 'devicehistory-view-netbox' netbox.id %}\">Device\n                History</a> for details\n            {% endif %}\n          </th>\n        </tr>\n      </tfoot>\n\n      <tbody>\n        {% if alert_info.count %}\n          {% for a in alert_info.alerts %}\n            <tr>\n              <td>{{ a.type }}</td>\n              <td>\n\t\t<a href=\"{% url 'event-details' a.alert.pk %}\" title=\"See event details\">\n                  {{ a.message|default:\"N/A\" }}\n                </a>\n\t      </td>\n              <td>{{ a.alert.start_time|date|default:\"N/A\" }}\n                {{ a.alert.start_time|time }}</td>\n              {% if a.alert.is_open %}\n                <td class=\"status_down\">Unresolved</td>\n              {% else %}\n                <td>{{ a.alert.end_time|date|default:\"N/A\" }}\n                  {{ a.alert.end_time|time }}</td>\n              {% endif %}\n              <td>\n                {% if a.alert.is_stateful %}\n                  {% if a.alert.is_open %}\n                    {{ a.alert.start_time|timesince }}\n                  {% else %}\n                    {{ a.alert.start_time|timesince:a.alert.end_time }}\n                  {% endif %}\n                {% endif %}\n              </td>\n            </tr>\n          {% endfor %}\n        {% else %}\n          <tr>\n            <td>No matching alerts found.</td>\n          </tr>\n        {% endif %}\n      </tbody>\n    </table>\n\n  {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-disclaimer.html",
    "content": "<div class=\"right\">\n  <span class=\"nav-tooltip\" data-align=\"end\">\n    <i class=\"fa fa-info-circle\" aria-describedby=\"tooltip-disclaimer\"></i>\n      <span id=\"tooltip-disclaimer\" class=\"medium\" role=\"tooltip\">\n        <p>NAV gathers information by periodically running\n        jobs. None of the information you see here is gathered\n        real time.</p>\n        <p style=\"margin-bottom: 0;\"><em>Jobs</em> table in Ip Device Info has\n        information about when the different jobs have run on a\n        device. To see a description of what information the\n          job collects, hover the mouse above the job name.</p>\n      </span>\n  </span>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-hostinfo.html",
    "content": "<table class=\"listtable\">\n    <caption>DNS: {{ host_info.host }}</caption>\n\n    <thead>\n    <tr>\n        <th>IP address</th>\n        <th>Reverse name</th>\n    </tr>\n    </thead>\n\n    <tfoot>\n    <tr>\n        <th colspan=\"2\">\n            {{ host_info.addresses|length }}\n            address{{ host_info.addresses|length|pluralize:\"es\" }}\n            found\n        </th>\n    </tr>\n    </tfoot>\n\n    <tbody>\n    {% if host_info.addresses %}\n        {% for address in host_info.addresses %}\n            <tr>\n                <td>\n                    <a href=\"{% url 'ipdevinfo-details-by-addr' address.addr %}\">\n                        {{ address.addr }}</a>\n                </td>\n                <td>\n                    {% if address.name %}\n                        <a href=\"{% url 'ipdevinfo-details-by-name' address.name %}\">{{ address.name }}</a>\n                    {% endif %}\n                    {% if address.error %}\n                        ({{ address.error }})\n                    {% endif %}\n                </td>\n            </tr>\n        {% endfor %}\n    {% else %}\n        <tr>\n            <td colspan=\"2\">No addresses found.</td>\n        </tr>\n    {% endif %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-ipdevinfo-refresh-button.html",
    "content": "<button class=\"table-button secondary refresh-button\"\n        hx-get=\"{% url 'refresh-ipdevinfo-job' netbox_sysname=netbox_sysname job_name=job_name %}\"\n        hx-swap=\"outerHTML\"\n>\n    Refresh\n</button>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-ipdevinfo-refresh-error.html",
    "content": "{% include 'ipdevinfo/frag-ipdevinfo-refresh-button.html' with netbox_sysname=netbox_sysname job_name=job_name %}\n<div id=\"ipdevpoll-jobs-alert\" hx-swap-oob=\"true\">\n  <div class=\"alert-box with-icon {{ alert_level }}\" data-nav-alert>\n      {{ alert_message }}\n      <span class=\"close\">x</span>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-ipdevinfo-refresh-ongoing-button.html",
    "content": "<button class=\"table-button secondary refresh-button\"\n        hx-get=\"{% url 'refresh-ipdevinfo-job-status-query' netbox_sysname=netbox_sysname job_name=job_name job_started_timestamp=job_started_timestamp %}\"\n        hx-trigger=\"load delay:2s\"\n        hx-swap=\"outerHTML\">\n    <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"refresh ongoing\"/>\n</button>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-ipdevinfo.html",
    "content": "{% load info %}\n{% load report %}\n<div id=\"deviceinfo\">\n\n  <div class=\"row\">\n\n    {% if netbox %}\n\n\n      {% comment %} IP DEVICE {% endcomment %}\n      <div class=\"medium-6 column\">\n\n        <table class=\"vertitable full-width\">\n          <caption>\n            IP Device: {{ netbox.get_short_sysname }}\n            {% include 'ipdevinfo/frag-disclaimer.html' %}\n          </caption>\n          <tbody>\n            <tr>\n              <th>Full sysname</th>\n              <td>\n                {{ netbox.sysname }}\n                <button class=\"table-button secondary right\"\n                    hx-get=\"{% url 'ipdevinfo-hostinfo' netbox.sysname %}\"\n                    hx-target=\"body\"\n                    hx-swap=\"beforeend\"\n                >\n                  DNS\n                </button>\n              </td>\n            </tr>\n\n            {% if netbox.master %}\n              <tr>\n                <th>Virtual instance of</th>\n                <td><a href=\"{{ netbox.master.get_absolute_url }}\">{{ netbox.master }}</a></td>\n              </tr>\n            {% endif %}\n\n            <tr>\n              <th>Type</th>\n              <td>\n                {% if netbox.type %}\n                  <a href=\"{% report 'type' typeid=netbox.type.id %}\">\n                    {{ netbox.type }}</a>\n                {% else %}\n                  N/A\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>Category</th>\n              <td>\n                <a href=\"{% report 'netbox' catid=netbox.category.id %}\">\n                  {{ netbox.category }}\n                </a>\n              </td>\n            </tr>\n\n            {% if netboxgroups %}\n              <tr>\n                <th>Device groups</th>\n                <td>\n                  {% for netboxgroup in netboxgroups %}\n                    <span class=\"label secondary\">\n                      <a href=\"{% url 'netbox-group-detail' netboxgroup.category_id %}\">\n                        {{ netboxgroup.category_id }}\n                      </a>\n                    </span>\n                  {% endfor %}\n                </td>\n              </tr>\n            {% endif %}\n\n            <tr>\n              <th>Function</th>\n              <td>{{ netbox.get_function|default:\"N/A\" }}</td>\n            </tr>\n\n            <tr>\n              <th>Organization</th>\n              <td>\n                <a href=\"{% report 'org' orgid=netbox.organization.id %}\">\n                  {{ netbox.organization }}</a></td>\n            </tr>\n\n            <tr>\n              <th>Room</th>\n              <td>\n                {% if netbox.room.aliases %}\n                  <span class=\"nav-tooltip\" data-align=\"center\">\n                    <a href=\"{% url 'room-info' netbox.room.id %}\" class=\"unstyled-tooltip\" aria-describedby=\"aliases-tooltip\">\n                      {{ netbox.room }}</a>\n                    <span id=\"aliases-tooltip\" role=\"tooltip\" class=\"medium\">Aliases: {{ netbox.room.aliases_string }}</span>\n                  </span>\n                {% else %}\n                  <a href=\"{% url 'room-info' netbox.room.id %}\">{{ netbox.room }}</a>\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>Chassis</th>\n              <td>\n                {% with netbox.get_chassis as chassis %}\n                  {% if chassis %}\n\n                    <ul class=\"no-bullet\">\n                      {% for chass in chassis %}\n                        <li>\n                          {% firstof chass.name chass.model chass.device.serial 'N/A' %}\n                          (serial: {{ chass.device.serial|default:\"N/A\" }},\n                          {% if chass.model_name %}\n                            model:\n                            <span class=\"nav-tooltip\">\n                                <span aria-describedby=\"model-description-tooltip\">\n                                  {{ chass.model_name }}\n                                </span>\n                                <span id=\"model-description-tooltip\" role=\"tooltip\">\n                                    {{ chass.descr }}\n                                </span>\n                            </span>,\n                          {% endif %}\n                          software: {{ chass.get_software_revision|default:\"N/A\" }})\n                          {% if chass.gone_since %}\n                            <span class=\"label alert\"\n                                  title=\"Down since {{ chass.gone_since }}\">\n                              Down\n                            </span>\n                          {% endif %}\n                        </li>\n                      {% endfor %}\n                    </ul>\n\n                  {% else %}\n\n                    N/A\n\n                  {% endif %}\n                {% endwith %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>IP address</th>\n              <td><a href=\"{% url 'ipdevinfo-details-by-addr' netbox.ip %}\">\n                {{ netbox.ip }}</a></td>\n            </tr>\n\n            <tr>\n              <th>MAC address</th>\n              <td>\n                {% if mac %}\n                    {{ mac }}\n                {% else %}\n                  N/A\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>Prefix</th>\n              <td>\n                {% with netbox.get_filtered_prefix as prefix %}\n                  {% if prefix %}\n                    <a href=\"{% url 'prefix-details' prefix.id %}\">\n                      {{ prefix }}</a>\n                  {% else %}\n                    N/A\n                  {% endif %}\n                {% endwith %}\n              </td>\n            </tr>\n\n            <tr>\n              {% with netbox.get_uplinks as uplinks %}\n                <th>Uplink{{ uplinks|pluralize }}</th>\n                <td>\n                  {% if uplinks %}\n                    {% if uplinks|length_is:1 %}\n                      {% if uplinks.0.this %}\n                        From <a href=\"{{ uplinks.0.this.get_absolute_url }}\">\n                        {{ uplinks.0.this }}</a><br/>\n                        To\n                      {% endif %}\n                      <a href=\"{{ uplinks.0.other.get_absolute_url }}\">\n                        {{ uplinks.0.other }}</a>\n                    {% else %}\n                      <ul>\n                        {% for uplink in uplinks %}\n                          <li>\n                            {% if uplinks.0.this %}\n                              From <a href=\"{{ uplink.this.get_absolute_url }}\">\n                              {{ uplink.this }}</a><br/>\n                              To\n                            {% endif %}\n                            <a href=\"{{ uplink.other.get_absolute_url }}\">\n                              {{ uplink.other }}</a>\n                          </li>\n                        {% endfor %}\n                      </ul>\n                    {% endif %}\n                  {% else %}\n                    N/A\n                  {% endif %}\n                </td>\n              {% endwith %}\n            </tr>\n\n            <tr>\n              <th>Modules</th>\n              <td><a href=\"{% report 'modules' netboxid=netbox.id %}\">\n                {{ netbox.modules.count }}</a></td>\n            </tr>\n\n            <tr>\n              <th>Interfaces</th>\n              <td><a href=\"{% report 'interfaces' netboxid=netbox.id %}\">\n                {{ netbox.interfaces.count }}</a></td>\n            </tr>\n\n            <tr>\n              <th>Switch ports</th>\n              <td><a href=\"{% report 'swport' netboxid=netbox.id %}\">\n                {{ netbox.get_swports.count }}</a></td>\n            </tr>\n\n            <tr>\n              <th>Router ports</th>\n              <td><a href=\"{% report 'gwport' netboxid=netbox.id %}\">\n                {{ netbox.get_gwports.count }}</a></td>\n            </tr>\n\n            {% if netbox.instances.count > 0 %}\n              <tr>\n                <th>Virtual instances</th>\n                <td>\n                  <ul class=\"no-bullet\">\n                    {% for instance in netbox.instances.all %}\n                      <li>\n                        <a href=\"{{ instance.get_absolute_url }}\">\n                          {{ instance }}\n                        </a>\n                      </li>\n                    {% endfor %}\n                  </ul>\n                </td>\n              </tr>\n            {% endif %}\n\n          </tbody>\n        </table>\n      </div>\n\n      {% comment %} STATUS {% endcomment %}\n      <div class=\"medium-6 column\">\n        <table class=\"vertitable full-width align-top\">\n          <caption>\n            Status\n          </caption>\n          <tbody>\n            <tr>\n              <th>Uptime</th>\n              <td>\n                {{ netbox.get_up_display|capfirst }}\n                {% if netbox.up == netbox.UP_UP %}\n                  for {{ netbox.up_since|timesince }}\n                {% endif %}\n              </td>\n            </tr>\n\n            {% with netbox_availability as stats %}\n              <tr>\n                <th>Availability</th>\n                <td>\n                  {% if stats %}\n                    {% with stats.availability as a %}\n                      {% if a.day %}\n                        {{ a.day|floatformat:2 }}%\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last day,\n\n                      {% if a.week %}\n                        {{ a.week|floatformat:2 }}%\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last week,\n\n                      {% if a.month %}\n                        {{ a.month|floatformat:2 }}%\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last month\n                    {% endwith %}\n                  {% elif graphite_error %}\n                    <span class=\"label alert\">Graphite unreachable</span>\n                  {% else %}\n                    N/A\n                  {% endif %}\n                </td>\n              </tr>\n\n              <tr>\n                <th>Response time</th>\n                <td>\n                  {% if stats %}\n                    {% with stats.response_time as rt %}\n                      {% if rt.day %}\n                        {{ rt.day|floatformat:3 }}s\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last day,\n\n                      {% if rt.week %}\n                        {{ rt.week|floatformat:3 }}s\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last week,\n\n                      {% if rt.month %}\n                        {{ rt.month|floatformat:3 }}s\n                      {% else %}\n                        (N/A)\n                      {% endif %}\n                      last month\n                    {% endwith %}\n                  {% elif graphite_error %}\n                    <span class=\"label alert\">Graphite unreachable</span>\n                  {% else %}\n                    N/A\n                  {% endif %}\n                </td>\n              </tr>\n            {% endwith %}\n\n            <tr>\n              <th>First discovered</th>\n              <td>{{ netbox.discovered|date|default:\"N/A\" }}\n                {{ netbox.discovered|time }}</td>\n            </tr>\n\n            <tr>\n              <th>Active maintenance</th>\n              <td>\n                {% if current_maintenance_tasks %}\n                  <ul class=\"normalize-font-size\">\n                    {% for task in current_maintenance_tasks %}\n                      <li>\n                        <a href=\"{% url 'maintenance-view' task.id %}\">\n                          {{ task.description }}\n\n                        </a>\n                        <div>\n                          ({{ task.start_time }} -\n                          {% if task.is_endless %}\n                            No endtime\n                          {% else %}\n                            {{ task.end_time }}\n                          {% endif %})\n                          {% if not netbox.is_on_maintenance %}\n                            <div class=\"nav-tooltip\">\n                                <i class=\"fa fa-exclamation-triangle\" aria-describedby=\"task-not-yet-active\" style=\"color:#8a6d3b;\"></i>\n                                <div id=\"task-not-yet-active\" role=\"tooltip\">\n                                    <ul style=\"list-style-type:none\">\n                                        <li>Task not yet active</li>\n                                        <li>(Maintenance tasks are activated by default in 5 minute intervals)</li>\n                                    </ul>\n                                </div>\n                            </div>\n                          {% endif %}\n                        </div>\n                      </li>\n                    {% endfor %}\n                  </ul>\n                {% else %}\n                  Not on maintenance\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>Planned maintenance</th>\n              <td>\n                {% if future_maintenance_tasks %}\n                  <ul class=\"normalize-font-size\">\n                    {% for task in future_maintenance_tasks %}\n                      <li>\n                        <a href=\"{% url 'maintenance-view' task.id %}\">\n                          {{ task.description }}\n                        </a>\n                        <div>\n                          ({{ task.start_time }} -\n                          {% if task.is_endless %}\n                            No endtime)\n                          {% else %}\n                            {{ task.end_time }})\n                          {% endif %}\n                        </div>\n                      </li>\n                    {% endfor %}\n                  </ul>\n                {% else %}\n                  Not scheduled for maintenance\n                {% endif %}\n              </td>\n            </tr>\n\n          </tbody>\n        </table>\n\n\n        {# Custom key value fields #}\n        {% with dunderless_dict=netbox.data|dunderless %}\n        {% if dunderless_dict %}\n          <table class=\"vertitable full-width\">\n            <caption>Custom data</caption>\n\n            <tbody>\n              {% for key, value in dunderless_dict.items %}\n                <tr>\n                  <th>{{ key }}</th>\n                  <td>{{ value|urlize }}</td>\n                </tr>\n              {% endfor %}\n            </tbody>\n\n          </table>\n        {% endif %}\n        {% endwith %}\n\n\n        {% with netbox.get_last_jobs as jobs %}\n          {% if jobs %}\n            <table id=\"ipdevpoll-jobs\" class=\"listtable full-width\">\n              <caption>Jobs</caption>\n              <thead>\n                <tr>\n                  <th>Name</th>\n                  <th>End time</th>\n                  <th>Duration</th>\n                  <th class=\"cell-center\">Status</th>\n                  <th class=\"cell-center\">Actions</th>\n                </tr>\n              </thead>\n\n              <tbody>\n                {% for job in jobs|dictsortreversed:'end_time' %}\n                  <tr>\n                    <td title=\"{{ job_descriptions|lookup:job.job_name|default:'No description' }}\">\n                      {{ job.job_name|capfirst }}\n                    </td>\n                    <td title=\"Next run expected at {{ job.end_time|add_interval:job.interval|date:\"DATETIME_FORMAT\" }}\">\n                      {{ job.end_time|date:\"DATETIME_FORMAT\" }}\n                    </td>\n                    <td>\n                      <span class=\"sparkline\" data-values=\"{{ job.get_last_runtimes }}\"></span>\n                      {{ job.duration|stringformat:\".2f\" }}s\n                    </td>\n                    <td class=\"cell-center\">\n                      {% if job.is_overdue %}\n                        <img src=\"{{ STATIC_URL }}images/lys/yellow.png\"\n                             alt=\"Overdue\"\n                             title=\"Overdue - interval is {{ job.interval|interval }}\">\n                      {% else %}\n                        {% if job.has_result %}\n                          {% if job.success %}\n                            <img src=\"{{ STATIC_URL }}images/lys/green.png\"\n                                 alt=\"Success\" title=\"Success\">\n                          {% else %}\n                            <img src=\"{{ STATIC_URL }}images/lys/red.png\"\n                                 alt=\"Failed\" title=\"Failed\">\n                          {% endif %}\n                        {% else %}\n                          <img src=\"{{ STATIC_URL }}images/lys/grey.png\"\n                               alt=\"N/A\" title=\"Not applicable\">\n                        {% endif %}\n                      {% endif %}\n                    </td>\n                    <td class=\"cell-center\">\n                        {% include \"ipdevinfo/frag-ipdevinfo-refresh-button.html\" with netbox_sysname=netbox.sysname job_name=job.job_name %}\n                    </td>\n                  </tr>\n                {% endfor %}\n              </tbody>\n            </table>\n            <div id=\"ipdevpoll-jobs-alert\"></div>\n          {% else %}\n            <p>No jobs have run on this netbox</p>\n          {% endif %}\n        {% endwith %}\n      </div>\n\n    {% else %}\n\n\n      {% comment %} IF NO NETBOX SHOW THIS {% endcomment %}\n      <div class=\"small-12 column\">\n        <table id=\"ipdevinfo\" class=\"vertitable\">\n          <caption class=\"nowrap\">IP\n            Address: {{ host_info.addresses.0.addr|default:\"N/A\" }}</caption>\n          <tr>\n            <th>Status</th>\n            <td>Not monitored</td>\n          </tr>\n\n          <tr>\n            <th>DNS</th>\n            <td>\n              <ul class=\"no-bullet\" style=\"font-size: 1em;\">\n                {% for address in host_info.addresses %}\n                  <li>\n                    <a href=\"{% url 'ipdevinfo-details-by-addr' address.addr %}\">\n                      {{ address.addr }}\n                    </a>\n\n                    {% if address.name %}\n                      &ndash; <a href=\"{% url 'ipdevinfo-details-by-name' address.name %}\">{{ address.name }}</a>\n                    {% endif %}\n\n                    {% if address.error %}\n                      ({{ address.error }})\n                    {% endif %}\n\n                  </li>\n                {% empty %}\n                  <li>N/A</li>\n                {% endfor %}\n              </ul>\n            </td>\n          </tr>\n\n          <tr>\n            <th>Prefix</th>\n            <td>\n              {% with no_netbox.prefix as prefix %}\n                {% if prefix %}\n                  <a href=\"{% url 'prefix-details' prefix.id %}\">\n                    {{ prefix.net_address }}\n                  </a>\n                {% else %}\n                  N/A\n                {% endif %}\n              {% endwith %}\n            </td>\n          </tr>\n\n          {% with no_netbox.prefix.vlan as vlan %}\n            <tr>\n              <th>VLAN</th>\n              <td>\n                {% if vlan %}\n                  <a href=\"{% report 'swporttrunk' vlanid=vlan.id %}\">\n                    {{ vlan }}\n                  </a>\n                {% else %}\n                  N/A\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Usage</th>\n              <td>{{ vlan.usage|default:\"N/A\" }}</td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Description</th>\n              <td>{{ vlan.description|default:\"N/A\" }}</td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Organization</th>\n              <td>\n                {% if vlan.organization %}\n                  <a href=\"{% report 'org' orgid=vlan.organization.id %}\">\n                    {{ vlan.organization|default:\"N/A\" }}\n                  </a>\n                {% else %}\n                  N/A\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Optional #1</th>\n              <td>{{ vlan.organization.optional_1|default:\"N/A\" }}</td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Optional #2</th>\n              <td>{{ vlan.organization.optional_2|default:\"N/A\" }}</td>\n            </tr>\n\n            <tr>\n              <th class=\"indent\">Optional #3</th>\n              <td>{{ vlan.organization.optional_3|default:\"N/A\" }}</td>\n            </tr>\n          {% endwith %}\n\n          {% with no_netbox.arp as arp %}\n            <tr>\n              <th>Last active</th>\n              <td>\n                {% if no_netbox.dt_max == arp.end_time %}\n                  <a href=\"{% query 'machinetracker-mac' mac=arp.mac days=1 %}\">\n                    Right now\n                  </a>\n                {% else %}\n                  {% if arp.end_time %}\n                    <a href=\"{% query 'machinetracker-mac' mac=arp.mac days=no_netbox.days_since_active %}\">\n                      {{ arp.end_time|date }}\n                      {{ arp.end_time|time }}\n                    </a>\n                  {% else %}\n                    Never\n                  {% endif %}\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th>Last seen with MAC</th>\n              <td>\n                {% if arp.mac %}\n                  <a href=\"{% query 'machinetracker-mac' mac=arp.mac days=30 %}\">\n                    {{ arp.mac }}\n                  </a>\n                {% else %}\n                  N/A\n                {% endif %}\n              </td>\n            </tr>\n          {% endwith %}\n\n        </table>\n      </div>\n    {% endif %}\n\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-neighbors.html",
    "content": "<div id=\"neighbors\">\n  <div class=\"map_panel\">\n    <form id=\"neighbor-category-filters\">\n      <h5>Filter by category</h5>\n      <div style=\"display: flex\">\n        <label style=\"margin-right: 1em\">\n          <input type=\"checkbox\" value=\"UNRECOGNIZED\">\n          UNRECOGNIZED\n        </label>\n        {% for category in categories %}\n          <label style=\"margin-right: 1em\">\n            <input type=\"checkbox\" value=\"{{ category.pk }}\" checked>\n            {{ category.pk }}\n          </label>\n        {% endfor %}\n      </div>\n    </form>\n  </div>\n  <div class=\"neighbormap\" data-netboxid=\"{{ netbox.id }}\"></div>\n\n  {# Add a normal list of neighbors for easy reading #}\n  {% if netbox.has_unignored_unrecognized_neighbors %}\n    <table id=\"unrecognized-neighbors\" class=\"listtable\">\n      <caption>Unrecognized neighbors</caption>\n      <tr>\n        <th>Remote ID</th>\n        <th>Remote Name</th>\n        <th>Seen on interface</th>\n        <th>Source</th>\n        <th>Since</th>\n      </tr>\n      {% for neighbor in netbox.unrecognized_neighbors.all %}\n        {% if not neighbor.ignored_since %}\n          <tr>\n\n            <td>\n              <span class=\"left\">{{ neighbor.remote_id }}</span>\n              {% if neighbor.remote_id %}\n                <a href=\"{% url 'seeddb-netbox-add-suggestion' neighbor.remote_id|urlencode %}\"\n                   style=\"margin-left: 1em; float: right;\"\n                   title=\"Add unrecognized neighbor to NAV\">\n                  <span class=\"fa fa-plus-square\"></span>\n                </a>\n              {% endif %}\n            </td>\n\n            <td>\n              <span class=\"left\">{{ neighbor.remote_name }}</span>\n              {% if neighbor.remote_name %}\n                <a href=\"{% url 'seeddb-netbox-add-suggestion' neighbor.remote_name|urlencode %}\"\n                   style=\"margin-left: 1em; float: right;\"\n                   title=\"Add unrecognized neighbor to NAV\">\n                  <span class=\"fa fa-plus-square\"></span>\n                </a>\n              {% endif %}\n            </td>\n\n            <td>\n              <a href=\"{{ neighbor.interface.get_absolute_url }}\">\n                {{ neighbor.interface }}\n              </a>\n            </td>\n\n            <td>\n              {{ neighbor.source }}\n            </td>\n\n            <td>\n              {{ neighbor.since }}\n            </td>\n          </tr>\n        {% endif %}\n      {% endfor %}\n    </table>\n  {% endif %}\n</div>\n\n\n<script>\n require([\"plugins/neighbor-map\"], function(NeighborMap) {\n     var $neighbornode = $('.neighbormap');\n     if ($neighbornode.length) {\n         new NeighborMap($neighbornode.get(0));\n     }\n })\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-poe.html",
    "content": "<div id=\"poe\">\n  {% if netbox and netbox.poe_groups.count %}\n    <h2>PoE groups</h2>\n    <div class=\"panel\" style=\"display:inline-block\">This page lists Power over Ethernet modules with current power usage out of max rated for each module</div>\n    <ul class=\"groups\">\n      {% for group in netbox.poe_groups.all %}\n        <li>\n          <h3>\n            <a href=\"{% url 'ipdevinfo-poegroup-details' netbox.sysname group.index %}\">\n              {{ group.name }}\n            </a>\n          </h3>\n          {% if group.status == group.STATUS_ON %}\n            <div id=\"gauge-wrapper\">\n              <div class=\"gauge\"\n                   data-url=\"{{ group.get_graph_url }}\"\n                   data-max=\"{{ group.power }}\"\n              ></div>\n            </div>\n          {% else %}\n            <span class=\"alert-box\">Status: {{group.get_status_display}}</span>\n          {% endif %}\n        </li>\n      {% endfor %}\n    </ul>\n  {% else %}\n    <span class=\"alert-box info\">No PoE support detected</span>\n  {% endif %}\n</div>\n{% block footer_scripts %}\n  <script>\n   require([\n       \"plugins/gauge\",\n   ], function(Gauge) {\n       $(function() {\n           $('.gauge').each(function() {\n               var $this = $(this);\n               var _gauge = new Gauge({\n                   node: this,\n                   min: 0,\n                   max: $this.data('max'),\n                   url: $this.data('url') + \"&format=json\",\n                   symbol: ' ',\n                   unit: \"watt\",\n               });\n           });\n       });\n   });\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-port-metrics.html",
    "content": "<div id=\"portmetrics\">\n\n  <div id=\"portmetrics-{{ counter_type }}\" class=\"nav-metrics-container\">\n    <a href=\"javascript:void(0);\" class=\"all-graph-opener button secondary small\">Show all graphs</a>\n    <a href=\"javascript:void(0);\" class=\"all-graph-closer button secondary small\">Hide all graphs</a>\n\n    <div class=\"toBeFixed-wrapper\">\n      <div class=\"toBeFixed\">\n        <h5>Controls for all graphs</h5>\n        <div class=\"button-bar\">\n          <ul class=\"button-group all-graph-buttons\"></ul>\n          <ul class=\"button-group all-graph-url-switcher\">\n            {% for counter_type in counter_types %}\n              <li>\n                <a href=\"javascript:void(0);\" class=\"graph-switcher button tiny secondary\">{{ counter_type }}</a>\n              </li>\n            {% endfor %}\n          </ul>\n        </div>\n      </div>\n    </div>\n\n    <ul class=\"no-bullet\">\n      {% for ifc in interfaces %}\n\n        <li>\n          <span id=\"port-graph-toggler-{{ ifc.id }}\" class=\"graph-toggler\">\n            <i class=\"fa fa-chevron-right\"></i>\n            <strong>{{ ifc.ifname }}</strong>\n            {% if ifc.ifalias %} ({{ ifc.ifalias }}){% endif %}\n          </span>\n\n          <div class=\"graphitegraph hidden\"\n               data-url=\"{{ ifc.combined_data_urls|join:';' }}\"\n               data-handler-id=\"port-graph-toggler-{{ ifc.id }}\">\n            <div>\n              <a href=\"{% url 'ipdevinfo-interface-details' netbox.sysname ifc.id %}\"\n                 title=\"Port details for {{ ifc.ifname }}\">\n                Port details</a>\n            </div>\n            <div class=\"rickshaw-container\"></div>\n          </div>\n\n        </li>\n\n      {% endfor %}\n    </ul>\n  </div>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-portlist-datatable.html",
    "content": "<table id=\"portlist\" class=\"listtable hover\">\n  <thead>\n    <tr>\n      <th>&nbsp;</th>\n      <th>Port</th>\n      <th>Port description</th>\n      <th>Module</th>\n      <th title=\"Administrative status - is enabled or not\">Admin</th>\n      <th title=\"Operational status - has link or not\">Link</th>\n      <th>Vlan</th>\n      <th title=\"\">Vlan netident</th>\n      <th title=\"Speed in Mbit/s and duplex (full or half)\">Speed</th>\n      <th title=\"Last time a mac-address was seen behind this port\" class=\"last_used\">\n          Last used\n      </th>\n      <th >To Device</th>\n      <th>To Port</th>\n    </tr>\n  </thead>\n</table>\n\n<style>\n #portlist th {cursor: pointer;}\n #portlist td:nth-child(7) { text-align: center; }\n #portlist td:nth-child(9) { text-align: right; }\n #portlist .dim {opacity: .4;}\n\n #portlistform label { margin-right: 1em; }\n #portlistform input { margin-right: .3rem; margin-bottom: 0; }\n #portlistform fieldset { margin: 0 .5rem .5rem 0; padding: 0 0 0.6em 0.8em; display: inline-block; }\n #portlistform fieldset legend { font-size: .8rem; font-weight: normal}\n\n #portlist_filter { max-width: 30em; }\n\n #infoprocessing { overflow: auto; }\n\n .dataTables_info { font-size: small; float: left; margin-right: 1em; }\n .dataTables_processing { font-size: small; }\n</style>\n\n<script>\n $(function() {\n     NAV.urls.portadmin_index = \"{% url 'portadmin-index' %}interfaceid=\";\n     require(['src/porttable'], function(PortTable) {\n         try {\n             new PortTable('#portlist', {{netbox.id}});\n         } catch (e) {\n             console.error(e);\n             $(\"#portlist\").css('visibility', 'hidden');\n             $(\"#ports\").append($('<div class=\"alert-box error\">Error initializing port table</div>'))\n         }\n     });\n });\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-portlist-tabs.html",
    "content": "<div id=\"moduletabs\">\n  <ul>\n    <li>\n      <a href=\"{% url 'ipdevinfo-get-port-view' netbox.sysname 'swportstatus' %}\">\n        Switch port status\n      </a>\n    </li>\n    <li id=\"swportactivetab\">\n      <a href=\"{% url 'ipdevinfo-get-port-view' netbox.sysname 'swportactive' %}\">\n        Switch port activity\n      </a>\n    </li>\n    <li>\n      <a href=\"{% url 'ipdevinfo-get-port-view' netbox.sysname 'gwportstatus' %}\">\n        Router port status\n      </a>\n    </li>\n    <li>\n      <a href=\"{% url 'ipdevinfo-get-port-view' netbox.sysname 'physportstatus' %}\">\n        Physical ports\n      </a>\n    </li>\n  </ul>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-ports.html",
    "content": "<div id=\"ports\">\n  {% if netbox %}\n    {% if netbox.modules.count or netbox.interfaces.count %}\n\n      <form action=\"{% url 'ipdevinfo-save-port-layout' %}\">\n        <input type=\"hidden\" name=\"netboxid\" value=\"{{ netbox.pk }}\">\n        {% if request.user.preferences.ipdevinfo_port_layout == 'old' %}\n          <input type=\"hidden\" name=\"layout\" value=\"new\">\n          <input type=\"submit\" class=\"button small right\" value=\"Try the new layout\" />\n        {% else %}\n          <input type=\"hidden\" name=\"layout\" value=\"old\">\n          <input type=\"submit\" class=\"button small right\" value=\"Revert to old layout\" />\n        {% endif %}\n      </form>\n\n      {% if request.user.preferences.ipdevinfo_port_layout == 'old' %}\n        {% include 'ipdevinfo/frag-portlist-tabs.html' %}\n      {% else %}\n        {% include 'ipdevinfo/frag-portlist-datatable.html' %}\n      {% endif %}\n\n    {% else %}\n      <div class=\"alert-box info\">\n        No ports found.\n      </div>\n    {% endif %}\n  {% endif %}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-psutable.html",
    "content": "<thead>\n    <tr>\n        <th>Name</th>\n        <th>Description</th>\n        <th>Status</th>\n    </tr>\n</thead>\n\n<tbody>\n{% for psu in psus %}\n    <tr>\n        <td>{{ psu.name }}</td>\n        <td>{{ psu.descr }}</td>\n        <td class=\"cell-center\">\n            {% if psu.up == 'y' %}\n                <img src=\"{{ STATIC_URL }}images/lys/green.png\" alt=\"\" title=\"Up\">\n            {% endif %}\n            {% if psu.up == 'n' %}\n                <img src=\"{{ STATIC_URL }}images/lys/red.png\" alt=\"\" title=\"Down\">\n            {% endif %}\n            {% if psu.up == 'u' %}\n                <img src=\"{{ STATIC_URL }}images/lys/grey.png\" alt=\"\" title=\"Unknown\">\n            {% endif %}\n            {% if psu.up == 'w' %}\n                <img src=\"{{ STATIC_URL }}images/lys/yellow.png\" alt=\"\" title=\"Warning\">\n            {% endif %}\n        </td>\n    </tr>\n{% endfor %}\n</tbody>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-sensors.html",
    "content": "<div id=\"sensors\" class=\"multitable nav-metrics-container\">\n\n  <div class=\"row\">\n    <div class=\"large-6 column\">\n      <h4>Power supplies</h4>\n      {% with netbox.get_powersupplies as psus %}\n      {% if psus|length %}\n      <table>\n        {% include \"ipdevinfo/frag-psutable.html\" %}\n      </table>\n      {% else %}\n      <span class=\"alert-box info\">No powersupplies found.</span>\n      {% endif %}\n      {% endwith %}\n    </div>\n    <div class=\"large-6 column\">\n      <h4>Fans</h4>\n      {% with netbox.get_fans as psus %}\n      {% if psus|length %}\n      <table>\n        {% include \"ipdevinfo/frag-psutable.html\" %}\n      </table>\n      {% else %}\n      <span class=\"alert-box info\">No fans found.</span>\n      {% endif %}\n      {% endwith %}\n    </div>\n  </div>\n  <div class=\"row\">\n    <div class=\"large-12 column\">\n      <h4>Sensors</h4>\n      <a href=\"javascript:void(0);\" class=\"all-graph-opener button secondary small\">Show all graphs</a>\n      <a href=\"javascript:void(0);\" class=\"all-graph-closer button secondary small\">Hide all graphs</a>\n      {% with netbox.sensors.all as sensors %}\n      {% if sensors|length %}\n      <table>\n        {% include \"ipdevinfo/frag-sensortable.html\" %}\n      </table>\n      {% else %}\n      <span class=\"alert-box info\">No sensors found.</span>\n      {% endif %}\n      {% endwith %}\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-sensortable.html",
    "content": "<thead>\n    <tr>\n        <th>Name</th>\n        <th>Description</th>\n        <th>Threshold</th>\n        <th>Value</th>\n        <th>Unit</th>\n        <th></th>\n    </tr>\n</thead>\n\n<tbody>\n{% for metric in sensor_metrics %}\n    <tr>\n        {% with metric.sensor as sensor %}\n        <td><a title=\"See details about {{ sensor }}\" href=\"{% url 'sensor-details' sensor.id %}\">{{ sensor.name }}</a></td>\n        <td>{% if sensor.human_readable != sensor.name %}{{ sensor.human_readable }}{% endif %}</td>\n        <td>\n          <div class=\"right\">\n            {% include \"threshold/frag-thresholdlist.html\" %}\n          </div>\n        </td>\n        <td>\n            <div class=\"right\">\n              <span class=\"sensor-value\" data-metric=\"{{sensor.get_metric_name}}\"></span>&nbsp;\n              <a href=\"javascript:void(0)\"\n                 id=\"graph-toggler-sensorstab-{{ forloop.counter }}\"\n                 class=\"graph-toggler\">\n                <i class=\"fa fa-area-chart\" title=\"See values for last day\"></i>\n              </a>\n            </div>\n        </td>\n        <td>{{sensor.data_scale|default:''}}{{sensor.unit_of_measurement}}</td>\n        <td>\n            <div class=\"graphitegraph hidden\"\n                 data-url=\"{{ metric.graphite_data_url }}\"\n                 data-handler-id=\"graph-toggler-sensorstab-{{ forloop.counter }}\">\n                <div class=\"rickshaw-container\"></div>\n            </div>\n        </td>\n        {% endwith %}\n    </tr>\n{% endfor %}\n</tbody>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-services.html",
    "content": "<div id=\"services\">\n    {% if netbox and netbox.services.count %}\n        <table class=\"listtable\">\n            <caption>Services\n                at {{ netbox.get_short_sysname }}</caption>\n            {% with netbox.services.all as service_list %}\n                {% include \"ipdevinfo/service-list-table.html\" %}\n            {% endwith %}\n        </table>\n    {% else %}\n      <span class=\"alert-box info\">No services configured</span>\n\n    {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/frag-sysmetrics.html",
    "content": "{% load thresholds %}\n\n<div id=\"sysmetrics\">\n  {% if netbox %}\n    {% regroup system_metrics|find_rules by group as metric_groups %}\n\n    <div id=\"metrictabs\">\n\n      {% if metric_groups %}\n      <ul>\n        {% for group in metric_groups %}\n          <li>\n            <a href=\"#metric{{ group.grouper }}\">{{ group.grouper|capfirst }}</a>\n          </li>\n        {% endfor %}\n      </ul>\n\n      {% elif graphite_error %}\n\n          <p data-nav-alert class=\"alert-box alert\">\n              Unable to get a response from Graphite!\n          </p>\n\n      {% else %}\n\n          <p data-nav-alert class=\"alert-box secondary\">\n              No metrics were found.\n          </p>\n\n      {% endif %}\n\n      {% for group in metric_groups %}\n        <div id=\"metric{{ group.grouper }}\" class=\"nav-metrics-container\">\n          <a href=\"javascript:void(0);\" class=\"all-graph-opener button secondary small\">Show all graphs</a>\n          <a href=\"javascript:void(0);\" class=\"all-graph-closer button secondary small\">Hide all graphs</a>\n\n          <div class=\"all-graph-buttons\"></div>\n\n          <table class=\"listtable full-width\">\n\n            <caption>{{ group.grouper|capfirst }}</caption>\n\n            <thead>\n            <tr>\n              <th>Metric</th>\n              <th><div class=\"right\">Threshold</div></th>\n            <tr>\n            </thead>\n\n            <tbody>\n            {% for metric in group.list %}\n              <tr>\n                <td id=\"graph-toggler-{{ group.grouper }}-{{ forloop.counter }}\" class=\"graph-toggler\">\n                    <i class=\"fa fa-chevron-right\"></i>&nbsp;{{ metric.suffix }}\n                </td>\n                <td>\n                  <div class=\"right\">\n                    {% include \"threshold/frag-thresholdlist.html\" %}\n                  </div>\n                </td>\n              </tr>\n              <tr>\n                <td class=\"graphitegraph hidden\" colspan=\"3\"\n                    data-url=\"{{ metric.graphite_data_url }}\"\n                    data-handler-id=\"graph-toggler-{{ group.grouper }}-{{ forloop.counter }}\">\n                  <div class=\"rickshaw-container\"></div>\n                </td>\n              </tr>\n            {% endfor %}\n            </tbody>\n\n          </table>\n\n        </div>\n      {% endfor %}\n\n    </div>\n  {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/ipdev-details.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n{% load silent_include %}\n\n{% block content %}\n\n  {% if netbox %}\n    <ul class=\"button-group\">\n      <li>\n        <a href=\"{% url 'seeddb-netbox-edit' netbox.id %}\"\n           class=\"button small secondary\">\n          Edit IP device\n        </a>\n      </li>\n\n      <li>\n        <a href=\"{% query 'maintenance-new' netbox=netbox.id %}\"\n           class=\"button small secondary\">\n          Schedule maintenance\n        </a>\n      </li>\n\n      <li>\n        <a href=\"{% url 'devicehistory-view-netbox' netbox.id %}\"\n           class=\"button small secondary\">\n          View device history\n        </a>\n      </li>\n\n      {% if netbox.get_swports.count %}\n        <li>\n          <a href=\"{% url 'portadmin-sysname' netbox.sysname %}\"\n             class=\"button small secondary\">\n            Configure ports\n          </a>\n        </li>\n      {% endif %}\n\n      {% if request.user.is_admin %}\n        <li>\n          <a href=\"{% url 'auditlog-netbox-detail' netbox.pk %}\"\n             class=\"button small secondary\">\n            View audit log\n          </a>\n        </li>\n      {% endif %}\n\n      {% try_to_include 'ipdevinfo/custom-header-button-extras.html' %}\n\n    </ul>\n\n  {% elif invalid_ip %}\n    <div class=\"alert-box error\">Invalid IP address</div>\n  {% endif %}\n\n  <div id=\"ipdevinfotabs\" class=\"ui-helper-hidden\">\n\n    {% if netbox %}\n      <ul>\n        <li><a href=\"#deviceinfo\">Device Info</a></li>\n        <li aria-controls=\"neighbors\">\n          <a href=\"{% url 'ipdevinfo-unrecognized_neighbors' netbox.pk %}\">\n            Neighbors\n          </a>\n        </li>\n        <li><a href=\"#ports\">Ports</a></li>\n        <li><a href=\"#portmetrics\">Port metrics</a></li>\n        <li><a href=\"#sysmetrics\">System metrics</a></li>\n        <li data-mark-as-error=\"{{ alert_info.has_unresolved_alerts }}\">\n          <a href=\"#alerts\">Recent alerts</a>\n        </li>\n        <li><a href=\"#sensors\">Sensors</a></li>\n\n        {# Only display services for certain instances #}\n        {% if display_services_tab %}\n          <li><a href=\"#services\">Services</a></li>\n        {% endif %}\n\n        <li><a href=\"#poe\">PoE</a></li>\n        <li aria-controls=\"affected\">\n          <a href=\"{% url 'ipdevinfo-affected' netbox.id %}\">\n            What if\n          </a>\n        </li>\n\n        {% try_to_include \"ipdevinfo/custom-tabs.html\" %}\n\n      </ul>\n      {% include \"ipdevinfo/frag-ipdevinfo.html\" %}\n      <div id=\"neighbors\"></div>\n      {% include \"ipdevinfo/frag-ports.html\" %}\n      {% include \"ipdevinfo/frag-port-metrics.html\" %}\n      {% include \"ipdevinfo/frag-sysmetrics.html\" %}\n      {% include \"ipdevinfo/frag-alerts.html\" %}\n      {% include \"ipdevinfo/frag-sensors.html\" %}\n\n      {% if display_services_tab %}\n        {% include \"ipdevinfo/frag-services.html\" %}\n      {% endif %}\n\n      {% include \"ipdevinfo/frag-poe.html\" %}\n      <div id=\"affected\"></div>\n\n      {% try_to_include \"ipdevinfo/custom-fragments.html\" %}\n\n    {% else %}\n\n      <ul>\n        <li><a href=\"#deviceinfo\">Device Info</a></li>\n      </ul>\n      {% include \"ipdevinfo/frag-ipdevinfo.html\" %}\n\n    {% endif %}\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/module-details.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n{% load report %}\n\n{% block content %}\n\n  <p>\n    <a href=\"{% url 'ipdevinfo-details-by-name' module.netbox.sysname %}\">\n      Back to {{ module.netbox.sysname }}\n    </a>\n  </p>\n\n  <div id=\"module-details-tabs\" class=\"notvisible\">\n\n    <ul>\n      <li><a href=\"#module-details-infotables\">Details</a></li>\n      {% if swportstatus_view.ports|length %}\n        <li><a href=\"#module-details-swport-status\">Switch port status</a></li>\n      {% endif %}\n      {% if swportactive_view.ports|length %}\n        <li><a href=\"#module-details-swport-activity\">Switch port activity</a></li>\n      {% endif %}\n      {% if gwportstatus_view.ports|length %}\n        <li><a href=\"#module-details-gwport-status\">Router port status</a></li>\n      {% endif %}\n    </ul>\n\n    <div id=\"module-details-infotables\">\n      <div class=\"row\">\n        <div class=\"large-12 column\">\n          <table class=\"vertitable\">\n            <caption>\n              Module {{ module.name }}<br />\n              at {{ module.netbox.get_short_sysname }}\n            </caption>\n            <tr>\n              <th>At IP device</th>\n              <td><a href=\"{{ module.netbox.get_absolute_url }}\">\n                {{ module.netbox }}</a></td>\n            </tr>\n            <tr>\n              <th>Model</th>\n              <td>{{ module.model }}</td>\n            </tr>\n            <tr>\n              <th>Description</th>\n              <td>{{ module.description }}</td>\n            </tr>\n            <tr>\n              <th>Status</th>\n              <td>\n                {% if module.up == module.UP_UP %}\n                  Up\n                {% else %}\n                  Down for {{ module.down_since|timesince }}\n                {% endif %}\n              </td>\n            </tr>\n            <tr>\n              <th>Switch ports</th>\n              <td><a href=\"{% report 'swport' netboxid=module.netbox.id module=module.name %}\">\n                {{ module.get_swports.count }}</a></td>\n            </tr>\n            <tr>\n              <th>Router ports</th>\n              <td><a href=\"{% report 'gwport' netboxid=module.netbox.id module=module.name %}\">\n                {{ module.get_gwports.count }}</a></td>\n            </tr>\n            {% if module.poe_groups.all|length == 1 %}\n              <tr>\n                <th>Active PoE ports</th>\n                {% with module.poe_groups.first as poegroup %}\n                  <td>\n                    <a href=\"{% url 'ipdevinfo-poegroup-details' module.netbox.sysname poegroup.index %}\">\n                      {{poegroup.get_active_ports|length}}\n                    </a>\n                  </td>\n                {% endwith %}\n              </tr>\n            {% endif %}\n          </table>\n        </div>\n      </div>\n    </div>\n\n    <div id=\"module-details-swport-status\">\n      <div class=\"row\">\n        <div class=\"large-12 columns\">\n          {% if swportstatus_view.ports|length %}\n            {% with swportstatus_view as module %}\n              {% include \"ipdevinfo/module-port-view.html\" %}\n            {% endwith %}\n          {% endif %}\n          {% include \"ipdevinfo/port-legend.html\" %}\n        </div>\n      </div>\n    </div>\n\n    <div id=\"module-details-swport-activity\">\n      <div class=\"row\">\n        <div class=\"large-12 columns\">\n          {% if swportactive_view.ports|length %}\n            {% with swportactive_view as module %}\n              <form action=\"\" method=\"get\">\n                <p class=\"infobox\">\n                  Activity based on CAM records since\n                  {{ module.activity_interval_start|date }}.\n                  {{ activity_interval_form.interval.label }}:\n                  {{ activity_interval_form.interval }}\n                  <button type=\"submit\">Recheck activity</button>\n                  {% if not module.activity_complete_data %}\n                    <em>\n                      Warning: CAM data is only available for\n                      {{ module.activity_data_interval }}\n                      day{{ module.activity_data_interval|pluralize }}.\n                    </em>\n                  {% endif %}\n                </p>\n              </form>\n              {% include \"ipdevinfo/module-port-view.html\" %}\n            {% endwith %}\n          {% endif %}\n          {% include \"ipdevinfo/port-legend.html\" %}\n        </div>\n      </div>\n    </div>\n\n    <div id=\"module-details-gwport-status\">\n      <div class=\"row\">\n        <div class=\"large-12 columns\">\n          {% if gwportstatus_view.ports|length %}\n            {% with gwportstatus_view as module %}\n              {% include \"ipdevinfo/module-port-view.html\" %}\n            {% endwith %}\n          {% endif %}\n          {% include \"ipdevinfo/port-legend.html\" %}\n        </div>\n      </div>\n    </div>\n\n  </div>\n{% endblock %}\n\n{% block footer_scripts %}\n  <script>\n   require([\"jquery-ui\"], function () {\n       var tabs = $('#module-details-tabs').tabs({\n           activate: function (event, ui) {\n               // Resize graphs when tab is shown\n               if (ui.newPanel.attr('id') === \"port-details-activity-graphs\") {\n                   $(window).trigger('resize');\n               }\n           }\n       });\n       tabs.removeClass('notvisible').show();\n        $('.portlegendToggler').on('click', function () {\n            $(this).next().toggle();\n        });\n   });\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/module-port-view.html",
    "content": "{% load string_manipulation %}\n\n{% with module.ports as ports %}\n{% if ports|length %}\n<table class=\"listtable module\">\n    {% if module.object %}\n    <caption><a href=\"{% url 'ipdevinfo-module-details' netbox_sysname=module.object.netbox.sysname module_name=module.object.name %}\">\n        Module {{ module.object.name }}</a></caption>\n    {% else %}\n    <caption>No module</caption>\n    {% endif %}\n    <tr>\n    {% for port in ports %}\n        <td class=\"{{ port.class }}\" style=\"{{ port.style }}\" title=\"{{ port.title }}\">\n            <div class=\"portcell\">\n            <a href=\"{{ port.object.get_absolute_url }}\">\n                {% if port.object.ifname|length >= ifname_too_long %}\n                    {{ port.object.ifname|shorten_ifname }}\n                {% else %}\n                    {{ port.object.ifname }}\n                {% endif %}\n            </a>\n                {% if port.oplayer %}\n                    <span class=\"oplayer\" title=\"OSI layer {{port.oplayer}}\">{{ port.oplayer }}</span>\n                {% endif %}\n            </div>\n        </td>\n        {% if ports|length|divisibleby:12 %}\n            {% if forloop.counter|divisibleby:12 %}</tr><tr>{% endif %}\n        {% else %}\n            {% if ports|length|divisibleby:8 %}\n                {% if forloop.counter|divisibleby:8 %}</tr><tr>{% endif %}\n            {% else %}\n                {% if forloop.counter|divisibleby:10 %}</tr><tr>{% endif %}\n            {% endif %}\n        {% endif %}\n    {% endfor %}\n    </tr>\n</table>\n{% endif %}\n{% endwith %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/modules.html",
    "content": "{% if port_view.perspective == 'swportactive' %}\n  <h5>\n    Activity based on CAM records since\n    {{ port_view.activity_interval_start|date }}.\n  </h5>\n\n  <div class=\"row\">\n    <div class=\"medium-6 column\">\n      <form id=\"switchport_activity_recheck\" action=\"\" method=\"get\">\n        {% include 'custom_crispy_templates/_form_content.html' with form=activity_interval_form disable_csrf=True %}\n      </form>\n    </div>\n    <div class=\"medium-6 column\">\n      {% if not port_view.activity_complete_data %}\n        <div class=\"alert-box warning\">\n          Warning: CAM data is only available\n          for {{ port_view.activity_data_interval }}\n          day{{ port_view.activity_data_interval|pluralize }}.\n        </div>\n      {% endif %}\n    </div>\n  </div>\n\n{% endif %}\n\n{% for module in port_view.modules %}\n  {% include \"ipdevinfo/module-port-view.html\" %}\n{% endfor %}\n\n{% include \"ipdevinfo/port-legend.html\" %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/poegroup-details.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n\n{% block content %}\n  <p>\n    <a href=\"{% url 'ipdevinfo-details-by-name' poegroup.netbox.sysname %}\">\n      Back to {{ poegroup.netbox.sysname }}\n    </a>\n  </p>\n\n  <div class=\"panel white\">\n    <div class=\"row\">\n      <div class=\"large-6 columns\">\n        <table class=\"vertitable full-width\">\n          <caption>\n            PoE Group {{ poegroup.index }}\n            at {{ poegroup.netbox.get_short_sysname }}\n          </caption>\n          <tr>\n            <th>At IP device</th>\n            <td><a href=\"{{ poegroup.netbox.get_absolute_url }}\">\n              {{ poegroup.netbox }}</a></td>\n          </tr>\n          <tr>\n            <th>Status</th>\n            <td>\n              {{poegroup.get_status_display }}\n            </td>\n          </tr>\n          <tr>\n            <th>Power rating</th>\n            <td>{{poegroup.power}}W</td>\n          </tr>\n          {% if poegroup.module %}\n            <tr>\n              <th>Module</th>\n              <td><a href=\"{% url 'ipdevinfo-module-details' poegroup.netbox.sysname poegroup.module.name %}\">{{poegroup.module}}</a></td>\n            </tr>\n          {% endif %}\n        </table>\n        <strong>Total power usage for module (W)</strong>\n        <div class=\"nav-metrics-container\">\n          <div class=\"graphitegraph\"\n               data-url=\"{{ poegroup.get_graph_url }}&format=json\">\n            <div class=\"rickshaw-container\"></div>\n          </div>\n        </div>\n      </div>\n      <div class=\"large-6 columns\">\n        <table class=\"listtable full-width\">\n          <caption>Port details</caption>\n          <thead>\n            <tr>\n              <th>Interface</th>\n              <th>Enabled</th>\n              <th>Status\n                <a\n                    href=\"#\"\n                    hx-get=\"{% url 'ipdevinfo-poe-status-hint-modal' %}\"\n                    hx-target=\"body\"\n                    hx-swap=\"beforeend\"\n                >\n                    <i class=\"fa fa-info-circle\"></i>\n                </a>\n              </th>\n              <th>Priority</th>\n              <th>Classification\n                <a\n                    href=\"#\"\n                    hx-get=\"{% url 'ipdevinfo-poe-classification-hint-modal' %}\"\n                    hx-target=\"body\"\n                    hx-swap=\"beforeend\"\n                >\n                    <i class=\"fa fa-info-circle\"></i>\n                </a>\n              </th>\n            </tr>\n          </thead>\n          <tbody>\n            {% for port in poegroup.poe_ports.all %}\n              <tr>\n                <td>\n                  {% if port.interface %}\n                    <a href=\"{% url 'ipdevinfo-interface-details' port.interface.netbox.sysname port.interface.id%}\">{{port.interface}}</a>\n                  {% else %}\n                    {{port.index}}\n                  {% endif %}\n                </td>\n                <td>{{port.admin_enable}}</td>\n                <td>{{port.get_detection_status_display}}</td>\n                <td>{{port.get_priority_display}}</td>\n                <td>{{port.get_classification_display}}</td>\n              </tr>\n            {% endfor %}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n{% endblock %}\n\n{% block footer_scripts %}\n  <script>\n   require([\n       \"plugins/graphfetcher_controller\"\n   ], function(graphfetcher_controller) {};\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-aggregate-frag.html",
    "content": "{% with port.get_aggregator as aggregator %}{% with port.get_bundled_interfaces as bundled %}\n    {% if aggregator or bundled %}\n        <table class=\"listtable align-top\">\n\n            {% if aggregator %}\n                <caption>Part of aggregate</caption>\n                <tr><td>\n                    <a href=\"{{ aggregator.get_absolute_url }}\">{{ aggregator.ifname }}</a>\n                </td></tr>\n\n            {% elif bundled %}\n\n                <caption>Aggregates</caption>\n                {% for other_port in bundled %}\n                    <tr><td>\n                        <a href=\"{{ other_port.get_absolute_url }}\" title=\"View details for {{ other_port.ifname }}\">\n                            {% if other_port.is_oper_up %}{{ other_port.ifname }}{% else %}<del>{{ other_port.ifname }}</del> <em>(Down)</em>{% endif %}\n                        </a>\n                    </td></tr>\n                {% endfor %}\n\n            {% endif %}\n\n        </table>\n    {% endif %}\n{% endwith %}{% endwith %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-api-frag.html",
    "content": "<div>\n  <h3>Interface {{ ifname }}</h3>\n\n  {% if ifalias %}\n    <p>{{ ifalias }}</p>\n  {% endif %}\n\n  <ul class=\"inline-list\">\n    <li>\n      {% if ifoperstatus == 1 %}\n        <div class=\"label success\">Has link</div>\n      {% else %}\n        <div class=\"label warning\">No link</div>\n      {% endif %}\n    </li>\n\n    <li>\n      {% if ifadminstatus == 1 %}\n        <div class=\"label success\">Enabled</div>\n      {% else %}\n        <div class=\"label warning\">Disabled</div>\n      {% endif %}\n    </li>\n\n    {% if trunk %}\n      <li>\n        <div class=\"label label-info\">Trunk</div>\n      </li>\n    {% endif %}\n  </ul>\n\n  <ul class=\"no-bullet\">\n    <li><strong>Speed</strong>: {{ speed }} Mbps</li>\n    <li><strong>Vlan</strong>: {{ vlan }}</li>\n    {% if to_interface %}\n      <li><strong>To interface</strong>: {{ to_interface.ifname }}</li>\n    {% endif %}\n    {% if to_netbox %}\n      <li><strong>To IP device</strong>: {{ to_netbox.sysname }}</li>\n    {% endif %}\n  </ul>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-main-frag.html",
    "content": "<table class=\"vertitable full-width\">\n  <caption>\n    Interface {{ port }}\n    {% include 'ipdevinfo/frag-disclaimer.html' %}\n  </caption>\n\n  <tr>\n    <th>Interface</th>\n    <td>{{ port.ifdescr }}</td>\n  </tr>\n\n  <tr>\n    <th>At module</th>\n    <td>\n      {% if port.module %}\n        <a href=\"{{ port.module.get_absolute_url }}\">\n          Module {{ port.module.name }}\n        </a>\n      {% else %}\n        No module\n      {% endif %}\n    </td>\n  </tr>\n\n  <tr>\n    <th>Port name</th>\n    <td>{{ port.ifalias|default:\"N/A\" }}</td>\n  </tr>\n\n  <tr>\n    <th>Link</th>\n    <td>\n      {{ port.get_link_display|capfirst }}\n      {% if detention.status == 'disabled' %}\n        (Disabled by <a href=\"{% url 'arnold-details' detention.id %}\" title=\"Link to detention\">Arnold</a>)\n      {% endif %}\n      {% if port.is_degraded %}\n          <small class=\"label warning\" title=\"One or more of the interfaces aggregated under {{ port.ifname }} is down.\">Degraded</small>\n      {% endif %}\n    </td>\n  </tr>\n\n  <tr>\n    <th>Speed</th>\n    <td>\n      {{ port.speed }} Mbit\n      {% if port.duplex %}\n        {{ port.get_duplex_display|capfirst }}\n      {% endif %}\n\n    </td>\n  </tr>\n\n  <tr>\n      <th>Hardware address</th>\n      <td>{{ port.ifphysaddress|default:\"N/A\"|upper }}</td>\n  </tr>\n\n  {% if port.poe_ports.exists %}\n    {%with port.poe_ports.first as poeport %}\n    <tr>\n      <th>PoE Status</th>\n      <td>\n        {% if poeport.admin_enable %}\n          {% if poeport.detection_status != poeport.STATUS_DELIVERING_POWER %}\n            {{ poeport.get_detection_status_display }}\n          {% else %}\n            {{ poeport.get_classification_display }} (priority {{poeport.get_priority_display}})\n          {% endif %}\n        {% else %}\n          Disabled\n        {% endif %}\n      </td>\n    </tr>\n    {% endwith %}\n  {% endif %}\n\n  {% if debug %}\n  <tr>\n    <th>ifIndex</th>\n    <td>{{ port.ifindex }}</td>\n  </tr>\n\n  <tr>\n    <th>Baseport</th>\n    <td>{{ port.baseport }}</td>\n  </tr>\n  {% endif %}\n\n\n\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-metrics-frag.html",
    "content": "{% load thresholds %}\n\n{% with port_metrics|find_rules|dictsort:\"suffix\" as metrics %}\n  {% if metrics|length %}\n    <table class=\"listtable full-width nav-metrics-container\">\n      <caption>Counters</caption>\n      <thead>\n      <tr>\n        <th>Metric</th>\n        <th><div class=\"right\">Threshold</div></th>\n      </tr>\n      </thead>\n      <tbody>\n      {% for metric in metrics %}\n        <tr>\n          <td id=\"metric-graph-{{ forloop.counter }}\" class=\"graph-toggler\">\n            <i class=\"fa fa-chevron-right\"></i>&nbsp;{{ metric.suffix }}\n          </td>\n          <td>\n            <div class=\"right\">\n              {% include \"threshold/frag-thresholdlist.html\" %}\n            </div>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"graphitegraph hidden\" colspan=\"3\"\n              data-url=\"{{ metric.graphite_data_url }}\"\n              data-handler-id=\"metric-graph-{{ forloop.counter }}\">\n            <div class=\"rickshaw-container\"></div>\n          </td>\n        </tr>\n      {% endfor %}\n      </tbody>\n    </table>\n  {% elif graphite_error %}\n      <div data-nav-alert class=\"alert-box alert\">Unable to get a response from Graphite!</div>\n  {% else %}\n      <div data-nav-alert class=\"alert-box secondary\">No metrics for this interface</div>\n  {% endif %}\n{% endwith %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-neighbors-frag.html",
    "content": "{% block content %}\n\n  {% if port.has_unignored_unrecognized_neighbors %}\n    <table class=\"listtable\">\n      <caption>Unrecognized Neighbors</caption>\n      <thead>\n        <tr>\n          <td>Remote Id</td>\n          <td>Remote Name</td>\n          <td>Source</td>\n          <td>Since</td>\n        </tr>\n      </thead>\n      <tbody>\n        {% for neighbor in port.unrecognized_neighbors.all %}\n          {% if not neighbor.ignored_since %}\n            <tr>\n              <td>{{ neighbor.remote_id }}</td>\n              <td>{{ neighbor.remote_name }}</td>\n              <td>{{ neighbor.source }}</td>\n              <td>{{ neighbor.since }}</td>\n              <td></td>\n            </tr>\n          {% endif %}\n        {% endfor %}\n      </tbody>\n    </table>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-recent-alerts-frag.html",
    "content": "<div id=\"alerts\">\n  {% if port %}\n\n    {# Table for listing recent alerts #}\n    <h4>\n      Alerts last {{ alert_info.days_back }}\n      day{{ alert_info.days_back|pluralize }}\n    </h4>\n    <table class=\"listtable\">\n      <thead>\n        <tr>\n          <th>Event</th>\n          <th>Message</th>\n          <th>Start</th>\n          <th>End</th>\n          <th>Downtime</th>\n        </tr>\n      </thead>\n\n      <tfoot>\n        <tr>\n          <th colspan=\"5\">\n            {{ alert_info.alerts|length }}\n            alert{{ alert_info.alerts|length|pluralize }}\n            found\n          </th>\n        </tr>\n      </tfoot>\n\n      <tbody>\n        {% for a in alert_info.alerts %}\n          <tr>\n            <td>{{ a.event_type }}</td>\n            <td>\n\t      <a href=\"{% url 'event-details' a.pk %}\" title=\"See event details\">\n                {{ a.message|default:\"N/A\" }}\n              </a>\n\t    </td>\n            <td>{{ a.start_time|date|default:\"N/A\" }}\n              {{ a.start_time|time }}</td>\n            {% if a.is_open %}\n              <td class=\"status_down\">Unresolved</td>\n            {% else %}\n              <td>{{ a.end_time|date|default:\"N/A\" }}\n                {{ a.end_time|time }}</td>\n            {% endif %}\n            <td>\n              {% if a.is_stateful %}\n                {% if a.is_open %}\n                  {{ a.start_time|timesince }}\n                {% else %}\n                  {{ a.start_time|timesince:a.end_time }}\n                {% endif %}\n              {% endif %}\n            </td>\n          </tr>\n        {% empty %}\n          <tr>\n            <td>No matching alerts found.</td>\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n\n  {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-sensors-frag.html",
    "content": "<div class=\"nav-metrics-container\">\n  {% with port.sensors.all as sensors %}\n    {% if sensors|length %}\n      <a href=\"javascript:void(0);\" class=\"all-graph-opener button secondary small\">Show all graphs</a>\n      <a href=\"javascript:void(0);\" class=\"all-graph-closer button secondary small\">Hide all graphs</a>\n      <table>\n        {% include \"ipdevinfo/frag-sensortable.html\" %}\n      </table>\n    {% else %}\n      <span class=\"alert-box info\">No sensors found.</span>\n    {% endif %}\n  {% endwith %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-stacking-frag.html",
    "content": "{% with port.below_me as below_me %}{% with port.above_me as above_me %}\n  {% if below_me or above_me %}\n    <table class=\"listtable align-top\">\n      <caption>Layering</caption>\n\n      {% if below_me %}\n        <tr>\n          <th>Lower layer</th>\n          <td>\n            <ul class=\"inside\">\n              {% for other_port in below_me %}\n                <li>\n                  <a href=\"{{ other_port.get_absolute_url }}\">{{ other_port.ifname }}</a>\n                </li>\n              {% endfor %}\n            </ul>\n          </td>\n        </tr>\n      {% endif %}\n\n      {% if above_me %}\n        <tr>\n          <th>Higher layer</th>\n          <td>\n            <ul class=\"inside\">\n              {% for other_port in above_me %}\n                <li>\n                  <a href=\"{{ other_port.get_absolute_url }}\">{{ other_port.ifname }}</a>\n                </li>\n              {% endfor %}\n            </ul>\n          </td>\n        </tr>\n      {% endif %}\n\n    </table>\n  {% endif %}\n{% endwith %}{% endwith %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details-vlan-frag.html",
    "content": "{% load port_info %}\n{% load report %}\n<table class=\"vertitable full-width\">\n  <caption>Connection</caption>\n\n  <tr>\n    <th>Trunk</th>\n    <td>{{ port.trunk|yesno:\"Yes,No,N/A\" }}</td>\n  </tr>\n\n  {% if port.trunk %}\n      <tr>\n          <th>Allowed trunk VLANs</th>\n          <td>\n              <ul style=\"margin-left: 0; list-style-type: none; max-height: 10em; overflow: auto;\">\n                  {% for range in port.get_allowed_vlan_ranges %}\n                  <li>{{ range }}</li>\n                  {% endfor %}\n              </ul>\n          </td>\n      </tr>\n  {% endif %}\n\n  <tr>\n    <th>Configured VLAN</th>\n    <td>\n      {{ port.vlan|default:\"N/A\" }}\n      {% if detention.status == 'quarantined' %}\n        (Quarantined by <a href=\"{% url 'arnold-details' detention.id %}\" title=\"Link to detention\">Arnold</a>)\n      {% endif %}\n    </td>\n  </tr>\n\n  <tr class=\"align-top\">\n    <th>Detected VLANs</th>\n    <td>\n      {% with port.get_sorted_vlans as swportvlans %}\n        {% if swportvlans %}\n          <ul class=\"no-bullet limit-size\">\n            {% for swportvlan in swportvlans %}\n              <li>\n                <i class=\"fa {{ swportvlan.get_direction_display|get_direction_class }}\"\n                   title=\"Direction {{ swportvlan.get_direction_display }}\"></i>&nbsp;\n                <a href=\"{% report 'swporttrunk' vlanid=swportvlan.vlan.id %}\">\n                  {{ swportvlan.vlan }}\n                </a>\n\n              </li>\n            {% endfor %}\n          </ul>\n        {% else %}\n          N/A\n        {% endif %}\n      {% endwith %}\n    </td>\n  </tr>\n\n  <tr>\n    <th>To IP device</th>\n    <td>\n      {% if port.to_netbox %}\n        <a href=\"{{ port.to_netbox.get_absolute_url }}\">\n          {{ port.to_netbox }}</a>\n      {% else %}\n        N/A\n      {% endif %}\n\n      <a href=\"{% report 'topology_candidates' from_device=port.netbox.sysname from_interface=port.ifname %}\"\n         title=\"Show the collected candidate neighbor information that was used to arrive at this value\">\n          <i class=\"fa fa-external-link right\"></i>\n      </a>\n    </td>\n  </tr>\n\n  <tr>\n    <th>To port</th>\n    <td>\n      {% if port.to_interface %}\n        <a href=\"{{ port.to_interface.get_absolute_url }}\">\n          {{ port.to_interface }}</a>\n      {% else %}\n        N/A\n      {% endif %}\n    </td>\n  </tr>\n\n  {% if port.baseport %}\n    <tr>\n      <th>Patched to</th>\n      <td>\n        {% if port.patches.count %}\n          <ul class=\"no-bullet\">\n            {% for patch in port.patches.all %}\n              <li>{{ patch.cabling.verbose|capfirst }}, in room\n                <a href=\"{% report 'netbox' roomid=patch.cabling.room.id %}\">\n                  {{ patch.cabling.room.id }}</a></li>\n            {% endfor %}\n          </ul>\n        {% else %}\n          N/A\n        {% endif %}\n      </td>\n    </tr>\n\n    <tr>\n      <th>Last CAM record</th>\n      <td>\n        {% with port.get_last_cam_record.end_time|timesince as time_since %}\n          {% if time_since %}\n            {{ time_since }} ago\n          {% else %}\n            Today\n          {% endif %}\n        {% endwith %}<br/>\n      </td>\n    </tr>\n  {% endif %}\n\n  {% if port.gwport_prefixes.all %}\n    <tr>\n      <th colspan=\"2\">Addresses</th>\n    </tr>\n    <tr>\n      <th></th>\n      <td>\n        <table>\n          <tr>\n            <th>IP</th>\n            <th>Prefix</th>\n          </tr>\n          {% for gwprefix in port.gwport_prefixes.all %}\n            <tr>\n              <td>{{ gwprefix.gw_ip }}</td>\n              <td>\n                <a href=\"{% url 'prefix-details' gwprefix.prefix.id %}\">{{ gwprefix.prefix.net_address }}</a>\n              </td>\n            </tr>\n          {% endfor %}\n        </table>\n      </td>\n    </tr>\n  {% endif %}\n\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-details.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n{% load silent_include %}\n\n{% block footer_scripts %}\n  <script>\n    require([\"jquery-ui\"], function () {\n      var tabs = $('#port-details-tabs').tabs({\n        activate: function (event, ui) {\n          // Resize graphs when tab is shown\n          if (ui.newPanel.attr('id') === \"port-details-activity-graphs\") {\n            $(window).trigger('resize');\n          }\n        }\n      });\n      tabs.removeClass('notvisible').show();\n      // Mark error tab\n      $('li[data-mark-as-error=\"True\"]', tabs).removeClass('ui-state-default').addClass('ui-state-error');\n    });\n  </script>\n{% endblock %}\n\n{% block content %}\n\n  <p>\n    <a href=\"{% url 'ipdevinfo-details-by-name' port.netbox.sysname %}\">\n      Back to {{ port.netbox.sysname }}\n    </a>\n  </p>\n\n  {% if port.baseport %}\n    <div class=\"row\">\n      <div class=\"small-12 column\">\n        <ul class=\"button-group\">\n          <li>\n            <a href=\"{% query 'machinetracker-swp' switch=port.netbox.sysname port=port.ifname %}\"\n               class=\"button small secondary\">\n              Track MAC behind port\n            </a>\n          </li>\n          <li>\n            <a href=\"{% url 'portadmin-interface' port.id %}\"\n               class=\"button small secondary\">\n              Configure port\n            </a>\n          </li>\n        </ul>\n      </div>\n    </div>\n  {% endif %}\n\n  {% if detention %}\n    <div class=\"alert-box alert\">\n      This interface is detained in\n      <a href=\"{% url 'arnold-details' detention.id %}\"\n         title=\"Link to detention\">Arnold</a>\n    </div>\n  {% endif %}\n\n\n  <div id=\"port-details-tabs\" class=\"notvisible\">\n\n    <ul>\n      <li><a href=\"#port-details-infotables\">Details</a></li>\n      <li><a href=\"#port-details-activity-graphs\">Activity graphs</a></li>\n      <li><a href=\"#port-details-metrics-list\">Metric list</a></li>\n      <li><a href=\"#port-details-sensors-list\">Port Sensors</a></li>\n      <li data-mark-as-error=\"{{ alert_info.has_unresolved_alerts }}\">\n        <a href=\"#port-details-recent-alerts\">Recent alerts</a>\n      </li>\n      {% try_to_include \"ipdevinfo/custom-port-tabs.html\" %}\n    </ul>\n\n\n    {# Information tables #}\n    <div id=\"port-details-infotables\">\n      <div class=\"row\">\n\n        <div class=\"column large-4\">\n          {% include 'ipdevinfo/port-details-main-frag.html' %}\n        </div>\n\n        <div class=\"column large-4\">\n          {% include 'ipdevinfo/port-details-vlan-frag.html' %}\n        </div>\n\n        <div class=\"column large-4\">\n          {% include 'ipdevinfo/port-details-neighbors-frag.html' %}\n          {% include 'ipdevinfo/port-details-aggregate-frag.html' %}\n          {% include 'ipdevinfo/port-details-stacking-frag.html' %}\n        </div>\n\n      </div>\n    </div>\n\n\n    {# Activity graphs #}\n    <div id=\"port-details-activity-graphs\">\n      <h3>Activity graphs</h3>\n\n      <ul class=\"large-block-grid-2 nav-metrics-container\">\n\n        {% for url in port.combined_data_urls %}\n\n          <li>\n            <div class=\"graphitegraph\" data-url=\"{{ url }}\">\n              <div class=\"rickshaw-container\"></div>\n            </div>\n          </li>\n\n        {% endfor %}\n\n      </ul>\n    </div>\n\n\n    {# List of metrics for this port #}\n    <div id=\"port-details-metrics-list\">\n      <h3>Metrics</h3>\n      {% include 'ipdevinfo/port-details-metrics-frag.html' %}\n    </div>\n\n    {# List of sensors for this port #}\n    <div id=\"port-details-sensors-list\">\n      <h3>Metrics</h3>\n      {% include 'ipdevinfo/port-details-sensors-frag.html' %}\n    </div>\n\n    {# Recent alerts for this interface #}\n    <div id=\"port-details-recent-alerts\">\n      {% include \"ipdevinfo/port-details-recent-alerts-frag.html\" %}\n    </div>\n\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/port-legend.html",
    "content": "<a href=\"javascript:void(0);\" class=\"portlegendToggler button tiny secondary\">Show port legend</a>\n<div id=\"portlegend\" class=\"portlegend hidden\">\n<table class=\"vertitable\">\n    <caption>\n        Port legend<br />\n        <span class=\"subtitle\">Hold mouse over port for info, click for\n        details</span>\n    </caption>\n    <tr>\n        <th>Port status (color)</th>\n        <td><span class=\"port passive\">11</span> Not active</td>\n        <td><span class=\"port disabled\">11</span> Disabled</td>\n        <td><span class=\"port Mb10\">11</span> 10 Mbit</td>\n        <td><span class=\"port Mb100\">11</span> 100 Mbit</td>\n        <td><span class=\"port Mb1000\">11</span> 1 Gbit</td>\n        <td><span class=\"port Mb10000\">11</span> 10 Gbit</td>\n    </tr>\n    <tr>\n        <th>Port status (frame)</th>\n        <td><span class=\"port hduplex\">11</span> Half duplex</td>\n        <td><span class=\"port fduplex\">11</span> Full duplex</td>\n        <td><span class=\"port trunk\">11</span> Trunk</td>\n        <td><span class=\"port blocked\">11</span> Blocked</td>\n        <td></td>\n        <td></td>\n    </tr>\n    <tr>\n        <th>Port activity</th>\n        <td><span class=\"port inactive\">11</span> Free</td>\n        <td><span style=\"background-color: #e5f5e0\" class=\"port active\">\n            11</span> MAC seen {{ activity_interval }} days ago</td>\n        <td><span style=\"background-color: #74c476\" class=\"port active\">\n            11</span> MAC seen today</td>\n        <td><span style=\"background-color: #74c476\" class=\"port active link\">\n            11</span> Link now</td>\n        <td></td>\n        <td></td>\n    </tr>\n</table>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/search.html",
    "content": "{% extends \"info/base.html\" %}\n\n{% block content %}\n\n<h3>IP Device search</h3>\n{% include 'info/_search_form.html' with form=search_form %}\n\n<div id=\"search-results\">\n{% include \"ipdevinfo/_search_results.html\" with netboxes=netboxes query=query %}\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/sensor-details.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n{% load thresholds %}\n\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   #gauge-wrapper {\n       display: flex;\n       align-items: flex-end;\n   }\n   #gauge-wrapper button {\n       margin-left: 1em;\n       margin-bottom: 0;\n   }\n  </style>\n{% endblock %}\n\n{% block footer_scripts %}\n<script>require([\"src/sensor_details\"]);</script>\n{% endblock %}\n\n{% block content %}\n\n<p>\n  <a href=\"{% url 'ipdevinfo-details-by-name' sensor.netbox.sysname %}\">\n    Back to {{ sensor.netbox.sysname }}\n  </a>\n</p>\n\n<div class=\"panel white\">\n  <div class=\"row\">\n    <div class=\"large-6 column\">\n      <table>\n        <h4>Sensor information</h4>\n        <tr>\n          <th>Name</th>\n          <td>{{sensor.name}}</td>\n        </tr>\n        <tr>\n          <th>Description</th>\n          <td>{{sensor.human_readable}}</td>\n        </tr>\n        {% if sensor.interface %}\n          <tr>\n            <th>Interface</th>\n            <td>\n              <a href=\"{% url 'ipdevinfo-interface-details' sensor.interface.netbox.sysname sensor.interface.id %}\">\n                {{sensor.interface.ifname}}\n              </a>\n            </td>\n          </tr>\n        {% endif %}\n        <tr>\n          <th>Unit</th>\n          <td>{{sensor.unit_of_measurement}}</td>\n        </tr>\n        <tr>\n          <th>Scale</th>\n          <td>{{sensor.data_scale}}</td>\n        </tr>\n        <tr>\n          <th>Thresholds</th>\n          <td>\n            {% include \"threshold/frag-thresholdlist.html\" %}\n          </td>\n        </tr>\n        {% if sensor.unit_of_measurement == 'boolean' %}\n          <tr>\n            <th>Detected alert active message</th>\n            <td>{{sensor.on_message_sys}}</td>\n          </tr>\n          <tr>\n            <th>Detected alert inactive message</th>\n            <td>{{sensor.off_message_sys}}</td>\n          </tr>\n          <tr>\n            <th>Detected alert active value</th>\n            <td>{{sensor.on_state_sys}}</td>\n          </tr>\n        {% else %}\n          <tr>\n            <th>Detected minimum value for graphs</th>\n            <td>{{sensor.display_minimum_sys}}</td>\n          </tr>\n          <tr>\n            <th>Detected maximum value for display</th>\n            <td>{{sensor.display_maximum_sys}}</td>\n          </tr>\n        {% endif %}\n      </table>\n    </div>\n    <div class=\"large-6 column\">\n        {% if sensor.unit_of_measurement == 'boolean' %}\n          <h4>Display values</h4>\n          <div class=\"sensor\"\n               data-url=\"{{ data_url }}\"\n               data-on-state=\"{{ sensor.on_state }}\"/>\n          <div class=\"on alert-box with-icon {{ sensor.alert_type_class }} hidden\">{{ sensor.on_message }}</div>\n          <div class=\"off alert-box with-icon success hidden\">{{ sensor.off_message }}</div>\n          <button id=\"add-to-dashboard-button\"\n                  class=\"tiny secondary\"\n                  data-dashboard-url=\"{% url 'add-user-navlet-sensor' %}?sensor_id={{ sensor.pk }}\">\n            Add to dashboard\n          </button>\n          {% include 'custom_crispy_templates/flat_form.html' %}\n        {% else %}\n          <h4>Gauge display ranges</h4>\n          <div id=\"gauge-wrapper\">\n            <div class=\"sensor-gauge\"\n                 data-url=\"{{ sensor.get_graph_url }}&format=json\"\n                 data-unit=\"{{ sensor.normalized_unit }}\"\n                 data-sensorid=\"{{ sensor.id }}\"\n                 data-sensorname=\"{{ sensor.human_readable }}\"\n                 data-thresholds=\"{{ sensor.get_metric_name|find_thresholds }}\"\n                 data-unit=\"{{sensor.unit_of_measurement}}\"\n                 data-min=\"{{sensor.get_display_range.0}}\"\n                 data-max=\"{{sensor.get_display_range.1}}\"\n            ></div>\n            <button id=\"add-to-dashboard-button\"\n                    class=\"tiny secondary\"\n                    data-dashboard-url=\"{% url 'add-user-navlet-sensor' %}?sensor_id={{ sensor.pk }}\">\n              Add to dashboard\n            </button>\n          </div>\n          {% include 'custom_crispy_templates/flat_form.html' %}\n        {% endif %}\n    </div>\n  </div>\n  <div class=\"row\">\n    <div class=\"medium-12 column\">\n      <div class=\"nav-metrics-container\">\n        <div class=\"graphitegraph\"\n             data-url=\"{{ graphite_data_url }}\">\n          <div class=\"rickshaw-container\"></div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/service-list-table.html",
    "content": "<thead>\n    <tr>\n        <th rowspan=\"2\">Status</th>\n        {% if show_ipdev_info %}\n            <th rowspan=\"2\">IP Device</th>\n        {% endif %}\n        <th rowspan=\"2\">Handler</th>\n        <th rowspan=\"2\">Version</th>\n        <th colspan=\"3\">Availability</th>\n        <th colspan=\"3\">Response time</th>\n        <th rowspan=\"2\">Actions</th>\n    </tr>\n    <tr>\n        <th>Last day</th>\n        <th>Last week</th>\n        <th>Last month</th>\n        <th>Last day</th>\n        <th>Last week</th>\n        <th>Last month</th>\n    </tr>\n</thead>\n<tfoot>\n    <tr>\n        <th colspan=\"0\">\n            {% with service_list.count as hits %}\n                {{ hits }} service{{ hits|pluralize }} found\n            {% endwith %}\n            {% if is_paginated %}\n                | Pages:\n                {% for p in page_range %}\n                    {% if p == page %}\n                        <em>{{ p }}</em>\n                    {% else %}\n                        <a href=\"?page={{ p }}\">{{ p }}</a>\n                    {% endif %}\n                {% endfor %}\n            {% endif %}\n        </th>\n    </tr>\n</tfoot>\n<tbody>\n    {% for service in service_list %}\n    <tr>\n\n        {% if service.is_on_maintenance %}\n            <td class=\"status_maintenance\">\n            {{ service.get_up_display|capfirst }}\n            <i class=\"fa fa-wrench fa-lg\" title=\"On maintenance\"></i></td>\n        {% else %}\n            <td class=\"status_{{ service.get_up_display }}\">\n            {{ service.get_up_display|capfirst }}</td>\n        {% endif %}\n\n        {% if show_ipdev_info %}\n            <td><a href=\"{{ service.netbox.get_absolute_url }}\">\n                {{ service.netbox.get_short_sysname }}</a></td>\n        {% endif %}\n        <td><a href=\"{% url 'ipdevinfo-service-list-handler' service.handler %}\">\n            {{ service.handler }}</a></td>\n        <td>{{ service.version|default:\"N/A\" }}</td>\n        {% with service.get_statistics as stats %}\n        {% with stats.availability as a %}\n        <td class=\"numeric\">\n            {% if a.day %}\n                {{ a.day|floatformat:2 }}%\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        <td class=\"numeric\">\n            {% if a.week %}\n                {{ a.week|floatformat:2 }}%\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        <td class=\"numeric\">\n            {% if a.month %}\n                {{ a.month|floatformat:2 }}%\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        {% endwith %}\n        {% with stats.response_time as rt %}\n        <td class=\"numeric\">\n            {% if rt.day %}\n                {{ rt.day|floatformat:3 }}{{ rt.data_source.units }}\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        <td class=\"numeric\">\n            {% if rt.week %}\n                {{ rt.week|floatformat:3 }}{{ rt.data_source.units }}\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        <td class=\"numeric\">\n            {% if rt.month %}\n                 {{ rt.month|floatformat:3 }}{{ rt.data_source.units }}\n            {% else %}\n                N/A\n            {% endif %}\n        </td>\n        {% endwith %}\n        {% endwith %}\n        <td>\n            <a href=\"{% url 'seeddb-service-edit' service.id %}\">\n                Edit</a>,\n            <a href=\"{% query 'maintenance-new' service=service.id %}\">\n                schedule maintenance</a>\n        </td>\n    </tr>\n    {% endfor %}\n</tbody>\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/service-list.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n\n{% block content %}\n\n{% if service_list %}\n    <table class=\"listtable\">\n        <caption>\n            {% if handler %}\n                Services with handler {{ handler }}\n            {% else %}\n                All services\n            {% endif %}\n        </caption>\n        {% include \"ipdevinfo/service-list-table.html\" %}\n    </table>\n{% else %}\n    {% if handler %}\n        <p>No services with handler \"{{ handler }}\" found.</p>\n    {% else %}\n        <p>No services found.</p>\n    {% endif %}\n{% endif %}\n\n<h3>Filter on handler</h3>\n\n<ul>\n    <li><a href=\"{% url 'ipdevinfo-service-list-all' %}\">\n        All handlers</a></li>\n    {% for h in handler_list %}\n    <li><a href=\"{% url 'ipdevinfo-service-list-handler' h.handler %}\">\n        Handler: {{ h.handler }}</a></li>\n    {% endfor %}\n</ul>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/ipdevinfo/service-matrix.html",
    "content": "{% extends \"ipdevinfo/base.html\" %}\n\n{% block content %}\n\n{% if matrix %}\n    <table class=\"listtable\">\n        <caption>Service matrix</caption>\n        <thead>\n            <tr>\n                <th>IP Device</th>\n                {% for handler in handler_list %}\n                    <th>{{ handler }}</th>\n                {% endfor %}\n            </tr>\n        </thead>\n        <tbody>\n            {% for row in matrix|dictsort:\"sysname\" %}\n                <tr>\n                    <td><a href=\"{{ row.netbox.get_absolute_url }}\">\n                        {{ row.netbox }}</a></td>\n                    {% for service in row.services %}\n                        {% if service %}\n                            {% if service.is_on_maintenance %}\n                                <td class=\"status_maintenance\">\n                                    <span title=\"On maintenance\">{{ service.get_up_display|capfirst }}</span>\n                                </td>\n                            {% else %}\n                                <td class=\"status_{{ service.get_up_display }}\">\n                                    {{ service.get_up_display|capfirst }}\n                                </td>\n                            {% endif %}\n                        {% else %}\n                            <td></td>\n                        {% endif %}\n                    {% endfor %}\n                </tr>\n            {% endfor %}\n        </tbody>\n    </table>\n{% else %}\n    <p>No services found.</p>\n{% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/l2trace/l2trace.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n\n{% block base_content %}\n  {% with tool=current_user_data.tools|get_tool:'Layer 2 Traceroute' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <div id=\"l2trace\">\n\n    <div class=\"row\">\n\n      <div class=\"column medium-6\">\n        {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n      </div>\n\n      <div class=\"column medium-6\">\n          <div class=\"nav-tooltip\" data-align=\"end\">\n            <i class=\"fa fa-info-circle\" aria-describedby=\"hostname-tooltip\"></i>\n            <div id=\"hostname-tooltip\" role=\"tooltip\">\n                <ul>\n                    <li>Enter a hostname or IP address and trace up to its router.</li>\n                    <li>Optionally enter a destination hostname or IP address and trace between the two.</li>\n                    <li>Press the trace button to start.</li>\n                </ul>\n            </div>\n      </div>\n\n    </div>\n\n    <div id=\"results\">\n      {% if l2tracer %}\n\n        <table class=\"listtable\">\n          <caption>Layer 2 Trace Results</caption>\n\n          <thead>\n          <tr>\n            <th>#</th>\n            <th>Level</th>\n            <th>Vlan</th>\n            <th>IP</th>\n            <th>Interface In</th>\n            <th>Sysname</th>\n            <th>Interface Out</th>\n          </tr>\n          </thead>\n\n          <tbody>\n\n          {% for row in l2tracer.make_rows %}\n\n            <tr>\n              <td>{{ row.idx }}</td>\n              <td>{{ row.level }}</td>\n\n              <td>\n                {% if not row.vlan.id %}\n                  {{ row.vlan }}\n                {% else %}\n                  <a href=\"{% url 'vlan-details' row.vlan.id %}\" title=\"View VLAN details\">{{ row.vlan }}</a>\n                {% endif %}\n              </td>\n\n              {% if row.hostOk and row.ipaddr %}\n                <td><a href=\"{% url 'ipdevinfo-details-by-addr' row.ipaddr %}\" title=\"View IP Device details\">{{ row.ipaddr }}</a></td>\n              {% else %}\n                <td>{{ row.ipaddr }}</td>\n              {% endif %}\n\n              {% if row.netboxid %}\n                <td><a href=\"{{ row.if_in.get_absolute_url }}\" title=\"View interface details\">{{ row.if_in.ifname|default:\"\" }}</a></td>\n                <td><a href=\"{% url 'ipdevinfo-details-by-name' row.sysname %}\" title=\"View IP Device details\">{{ row.sysname|default:\"\" }}</a></td>\n                <td><a href=\"{{ row.if_out.get_absolute_url }}\" title=\"View interface details\">{{ row.if_out.ifname|default:\"\" }}</a></td>\n              {% else %}\n                <td>{{ row.if_in|default:\"\" }}</td>\n                <td>{{ row.sysname|default:\"\" }}</td>\n                <td>{{ row.if_out|default:\"\" }}</td>\n              {% endif %}\n\n            </tr>\n\n          {% empty %}\n            <tr>\n              <td colspan=\"7\">Your search did not return any results.</td>\n            </tr>\n          {% endfor %}\n\n          </tbody>\n\n        </table>\n\n      {% endif %}\n    </div> {# results #}\n\n  </div> {# l2trace #}\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/_ip_search_help_modal.html",
    "content": "<h4>Valid Search terms</h4>\n<ul>\n  <li>Single IP addresses</li>\n  <li>Ranges like 10.0.0.0-10.0.1.255, 10.0.0.0-255 or 2001:701::AAA-FFF.</li>\n  <li>CIDR addresses like 129.241.105.0/24.</li>\n  <li>Single addresses with a CIDR slash, 129.241.105.0/ will add subnet mask based on prefixes collected by NAV.</li>\n</ul>\n<h4>Accuracy of the Results</h4>\n<ul>\n  <li>\n    IP search results are based on ARP data from routers. Typically ARP\n    data entries are kept by the routers 4 hours after the last packet\n    seen.  Also keep in mind, the ARP collector only runs twice an hour\n    (0,30).  Subtracting 4-4.5 hours from the end time gives you a\n    fairly good idea.\n  </li>\n  <li>\n    Since NAV 3.3 port numbers have been removed from the search in\n    favor of interface names.  Historical search results will still\n    contain port numbers instead of interface names, as historical port\n    number data cannot be accurately mapped to interface names.\n  </li>\n  <li>\n    Searches will not return more than 4096 results, equivalent to an IPv4 /20 subnet.\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/_mac_search_help_modal.html",
    "content": "<h4>Search Hints</h4>\n<ul>\n  <li>\n    MAC search allows searching for a MAC prefix, e.g. a search for\n    <code>00aabbcc</code> will return all matches between\n    <code>00:aa:bb:cc:00:00</code> and <code>00:aa:bb:cc:ff:ff</code>.\n  </li>\n  <li>\n    The use of colon in the MAC search is optional, e.g.\n    <code>00aabbcc</code> and <code>00:aa:bb:cc</code>\n    are equal.\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/_netbios_search_help_modal.html",
    "content": "<h4>Search Hints</h4>\n<ul>\n  <li>Search for NetBIOS-name, MAC or IP</li>\n  <li>NetBIOS Search does not use the ARP and CAM information\n    collected by NAV, but utilize the <code>netbscan</code>\n    tool to collect NetBIOS over TCP/IP information over the\n    network\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/_search_help_trigger.html",
    "content": "<button\n        title=\"Help\"\n        class=\"button secondary small right\"\n        hx-get=\"{% url 'machinetracker-search-help-modal' tab_name %}\"\n        hx-target=\"body\"\n        hx-swap=\"beforeend\"\n>\n    Help\n</button>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/_switch_search_help_modal.html",
    "content": "<h4>Search Hints</h4>\n<ul>\n  <li>\n    Switch search will search for switches having a sysname that starts\n    with whatever you enter as switch name.  E.g. searching for\n    <code>blapp-sw</code> will retrieve both\n    <code>blapp-sw.ntnu.no</code> and\n    <code>blapp-sw2.ntnu.no</code>\n  </li>\n  <li>\n    Leaving the <i>module</i> or <i>interface</i> fields empty in the\n    switch search will find any module or interface that have matching\n    records for your selected switch.\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n<link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/machinetracker.css\" />\n<script>require(['src/machinetracker']);</script>\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Machine Tracker' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n<div class=\"tabs\">\n    <ul>\n        <li class=\"{{ active.ip|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'machinetracker-ip' %}\">IP Search</a>\n        </li>\n        <li class=\"{{ active.mac|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'machinetracker-mac' %}\">MAC Search</a>\n        </li>\n        <li class=\"{{ active.swp|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'machinetracker-swp' %}\">Switch Search</a>\n        </li>\n        <li class=\"{{ active.netbios|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'machinetracker-netbios' %}\">Netbios Search</a>\n        </li>\n    </ul>\n\n    <div class=\"tabcontent\">\n\n        {% if current_user_data.messages %}\n        <ul class=\"messages\">\n            {% for m in current_user_data.messages %}\n            <li class=\"{{ m.type }}\">{{ m.message }}</li>\n            {% endfor %}\n        </ul>\n        {% endif %}\n\n        {% block content %}\n        {% endblock %}\n\n    </div>\n\n</div>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/fishy.html",
    "content": "<img src=\"{{ STATIC_URL }}images/icons/exclamation-red.png\"\n     title=\"This record may be outdated. Time since last collection from {{ row.fishy.netbox.sysname }} is {{ row.fishy.end_time|timesince }}\">\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/interface_tracker.html",
    "content": "\n<table id=\"tracker-table\" class=\"listtable tablesorter\">\n    <caption>\n        Interface search results\n        <span class=\"subtitle right\">\n            {{ interface_tracker|length }} hit{{ interface_tracker|length|pluralize }}\n        </span>\n    </caption>\n\n    <thead>\n        <tr>\n            <th>Interface</th>\n            <th>Alias</th>\n            <th>Mac</th>\n            {% if form_data.vendor %}\n            <th>Vendor</th>\n            {% endif %}\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for ifc in interface_tracker %}\n        <tr>\n\n            <td>\n                <a href=\"{{ ifc.get_absolute_url }}\">{{ ifc }}</a>\n            </td>\n\n            <td>\n                {{ ifc.ifalias }}\n            </td>\n\n            <td>\n                <a href=\"{% query 'machinetracker-mac' mac=ifc.ifphysaddress days=form_data.days dns=dns %}\" title=\"Search again for this MAC address\">\n                {{ ifc.ifphysaddress }}</a>\n            </td>\n\n            {% if form_data.vendor %}\n            <td>\n                {% if ifc.vendor %}\n                    {{ ifc.vendor }}\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n            {% endif %}\n\n        </tr>\n    {% endfor %}\n    </tbody>\n\n    <tfoot>\n        <tr>\n            <th colspan=\"8\">{{ interface_tracker|length }}\n            hit{{ interface_tracker|length|pluralize }}</th>\n        </tr>\n    </tfoot>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/ip_search.html",
    "content": "{% extends \"machinetracker/base.html\" %}\n\n{% block content %}\n  <form action=\"{% url 'machinetracker-ip' %}\" method=\"get\">\n    <div id=\"search_form\">\n      <div class=\"row\">\n        <div class=\"medium-6 columns\">\n          <div class=\"row collapse\">\n            <div class=\"medium-9 columns {% if form.ip_range.errors %}error{% endif %}\">\n              {{ form.ip_range }}\n              {% if form.ip_range.errors %}\n                <small class=\"error\">{{ form.ip_range.errors }}</small>\n              {% endif %}\n            </div>\n            <div class=\"medium-3 columns\">\n              <input type=\"submit\" value=\"Search\" class=\"button postfix\"/>\n            </div>\n          </div>\n\n        </div>\n\n        <div class=\"medium-6 columns\">\n          {% include 'machinetracker/_search_help_trigger.html' with tab_name='ip' %}\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <div class=\"medium-4 columns\">\n          <fieldset>\n            <legend>Filters</legend>\n            <div class=\"row machinetracker-filter\">\n              {% for filter in form.period_filter %}\n                <div class=\"small-4 column\">\n                  {{ filter }}\n                </div>\n              {% endfor %}\n            </div>\n          </fieldset>\n        </div>\n\n        <div class=\"medium-4 columns\">\n          <fieldset>\n            <legend>Period</legend>\n            <div class=\"row machinetracker-filter\">\n\n              <div class=\"small-6 column machinetracker-filter-days\">\n                <label for=\"{{ form.days.auto_id }}\" title=\"{{ form.days.help_text }}\">\n                  {{ form.days.label }}\n                </label>\n                {{ form.days }}\n                {% if form.days.errors %}\n                  <small class=\"error nomargin\">{{ form.days.errors }}</small>\n                {% endif %}\n              </div>\n\n              <div class=\"small-6 column\">\n                <label for=\"id_hide\" title=\"Only show ip-addresses active now\">\n                  <input id=\"id_hide\" name=\"days\" type=\"checkbox\"\n                         value=\"-1\"\n                         onclick=\"document.getElementById('id_days').disabled = this.checked;\"/>\n                  &nbsp;Only Active\n                </label>\n              </div>\n            </div>\n\n          </fieldset>\n        </div>\n\n        <div class=\"medium-4 columns\">\n          <fieldset>\n            <legend>Columns</legend>\n            <div class=\"row machinetracker-filter\">\n\n              <div class=\"small-3 column\">\n                <label for=\"{{ form.netbios.auto_id }}\"\n                       title=\"{{ form.netbios.help_text }}\">\n                  {{ form.netbios }}\n                  {{ form.netbios.label }}\n                </label>\n              </div>\n\n              <div class=\"small-3 column\">\n                <label for=\"{{ form.dns.auto_id }}\" title=\"{{ form.dns.help_text }}\">\n                  {{ form.dns }}\n                  {{ form.dns.label }}\n                </label>\n              </div>\n\n              <div class=\"small-3 column\">\n                <label for=\"{{ form.source.auto_id }}\"\n                       title=\"{{ form.source.help_text }}\">\n                  {{ form.source }}\n                  {{ form.source.label }}\n                </label>\n              </div>\n\n              <div class=\"small-3 column\">\n                <label for=\"{{ form.vendor.auto_id }}\"\n                       title=\"{{ form.vendor.help_text }}\">\n                  {{ form.vendor }}\n                  {{ form.vendor.label }}\n                </label>\n              </div>\n\n            </div>\n\n          </fieldset>\n        </div>\n\n      </div>\n    </div>\n\n\n  </form>\n\n  {% if ip_tracker %}\n    <div class=\"results\">\n      {% include \"machinetracker/ip_tracker.html\" %}\n    </div>\n  {% elif ip_tracker != None %}\n    <div class=\"alert-box\">\n      No results for {{ subnet_start }}-{{ subnet_end }}\n    </div>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/ip_tracker.html",
    "content": "\n<table id=\"tracker-table\" class=\"listtable tablesorter\">\n    <caption>\n        IP search results\n        {% if not disable_ip_context %}\n            &ndash;\n            <span class=\"subtitle\">From {{ subnet_start }} to {{ subnet_end }}</span>\n        {% endif %}\n        <span class=\"subtitle right\">\n            {{ ip_tracker_count }} hit{{ ip_tracker_count|pluralize }}\n        </span>\n    </caption>\n\n    <thead>\n        <tr>\n            {% if form_data.dns %}\n            <th>DNS</th>\n            {% endif %}\n            {% if form_data.netbios %}\n            <th>Netbios</th>\n            {% endif %}\n            <th>IP</th>\n            <th></th>\n            <th>MAC</th>\n            <th>Start time</th>\n            <th>End time</th>\n            {% if form_data.source %}\n            <th>Source</th>\n            {% endif %}\n            {% if form_data.vendor%}\n            <th>Vendor</th>\n            {% endif %}\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for key, result in ip_tracker.items %}\n        {% for row in result %}\n        {% if row.fishy %}<tr class=\"fishy-item\">{% else %}<tr>{% endif %}\n            {% if form_data.dns %}\n            <td>{{ row.dns_lookup }}</td>\n            {% endif %}\n\n            {% if form_data.netbios %}\n            <td>{{ row.netbiosname|default_if_none:'' }}</td>\n            {% endif %}\n\n            <td>\n                {% with form_data.dns|yesno:\"True,\" as dns %}\n                <span style=\"display:none;\">{{ row.ip_int_value }}</span> <a href=\"{% query 'machinetracker-ip' ip_range=row.ip days=form_data.days dns=dns vendor=form_data.vendor %}\" title=\"Search for this IP address\">\n                    {{ row.ip }}</a>\n            </td>\n            <td>\n                <a href=\"{% url 'ipdevinfo-details-by-addr' row.ip %}\" title=\"Lookup this IP in IP Device Info\">\n                <img src=\"{{ STATIC_URL }}images/arpcam/ipinfolink.png\" alt=\"IP Info search\" /></a>\n            </td>\n            <td>\n                {% if row.mac %}\n                <a href=\"{% query 'machinetracker-mac' mac=row.mac days=form_data.days dns=dns vendor=form_data.vendor %}\" title=\"Search for this MAC address\">\n                {{ row.mac }}</a>\n                {% endif %}\n                {% endwith %}\n            </td>\n            <td>{{ row.start_time|date:\"Y-m-d H:i:s\" }}</td>\n            <td>\n                {% if row.still_active %}\n                    {{ row.still_active }}\n                    {% if row.fishy %}{% include \"machinetracker/fishy.html\" %}{% endif %}\n                {% else %}\n                    {{ row.end_time|date:\"Y-m-d H:i:s\" }}\n                {% endif %}\n            </td>\n            {% if form_data.source %}\n            <td>{{row.sysname}}</td>\n            {% endif %}\n            {% if form_data.vendor %}\n            <td>\n                {% if row.vendor %}\n                    {{ row.vendor }}\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n            {% endif %}\n        </tr>\n        {% endfor %}\n    {% endfor %}\n    </tbody>\n\n    <tfoot>\n        <tr>\n            <th colspan=\"{{ colspan }}\">{{ ip_tracker_count }}\n            hit{{ ip_tracker_count|pluralize }}</th>\n        </tr>\n    </tfoot>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/mac_search.html",
    "content": "{% extends \"machinetracker/base.html\" %}\n\n{% block content %}\n\n  <form action=\"{% url 'machinetracker-mac' %}\" method=\"get\">\n    <div id=\"search_form\">\n      <div class=\"row\">\n        <div class=\"medium-6 column\">\n          <div class=\"row collapse\">\n            <div class=\"medium-9 column {% if form.mac.errors %}error{% endif %}\">\n              {{ form.mac }}\n              {% if form.mac.errors %}\n                <small class=\"error\">{{ form.mac.errors }}</small>\n              {% endif %}\n            </div>\n            <div class=\"medium-3 column\">\n              <input type=\"submit\" value=\"Search\" class=\"button postfix\"/>\n            </div>\n\n          </div>\n        </div>\n\n        <div class=\"medium-6 column\">\n          {% include 'machinetracker/_search_help_trigger.html' with tab_name='mac' %}\n        </div>\n      </div>\n\n\n      {% comment %} FILTERS FOR MAC SEARCH {% endcomment %}\n      <div class=\"row\">\n        <div class=\"medium-6 column\">\n          <fieldset>\n            <legend>Period</legend>\n\n            <div class=\"row machinetracker-filter\">\n              <div class=\"small-6 column\">\n                <div class=\"machinetracker-filter-days\">\n                  <label for=\"{{ form.days.auto_id }}\" title=\"{{ form.days.help_text }}\">\n                    {{ form.days.label }}\n                    {{ form.days }}\n                  </label>\n                </div>\n                {% if form.days.errors %}\n                  <small class=\"error nomargin\">{{ form.days.errors }}</small>\n                {% endif %}\n              </div>\n              <div class=\"small-6 column\">\n                <label for=\"id_hide\" title=\"Only show ip-addresses active now\">\n                  Only active\n                  <input type=\"checkbox\" id=\"id_hide\" name=\"days\" value=\"-1\"\n                         onclick=\"document.getElementById('id_days').disabled = this.checked;\"/>\n                </label>\n              </div>\n            </div>\n          </fieldset>\n        </div>\n\n        <div class=\"medium-6 column\">\n          <fieldset>\n            <legend>Columns</legend>\n\n            <div class=\"row machinetracker-filter\">\n              <div class=\"small-4 column\">\n                <label for=\"{{ form.dns.auto_id }}\" title=\"{{ form.dns.help_text }}\">\n                  {{ form.dns.label }}\n                  {{ form.dns }}\n                </label>\n              </div>\n\n              <div class=\"small-4 column\">\n                <label for=\"{{ form.netbios.auto_id }}\" title=\"{{ form.netbios.help_text }}\">\n                  {{ form.netbios.label }}\n                  {{ form.netbios }}\n                </label>\n              </div>\n\n              <div class=\"small-4 column\">\n                <label for=\"{{ form.vendor.auto_id }}\" title=\"{{ form.vendor.help_text }}\">\n                  {{ form.vendor.label }}\n                  {{ form.vendor }}\n                </label>\n              </div>\n            </div>\n          </fieldset>\n        </div>\n\n      </div>\n    </div>\n  </form>\n\n  {% if mac_tracker or uplink_tracker or ip_tracker or interface_tracker %}\n    {% if uplink_tracker %}\n      <div class=\"results\">\n        {% include \"machinetracker/uplink_tracker.html\" %}\n      </div>\n    {% endif %}\n\n    {% if interface_tracker %}\n      <div class=\"results\">\n        {% include \"machinetracker/interface_tracker.html\" %}\n      </div>\n    {% endif %}\n\n    {% if mac_tracker or not uplink_tracker or not interface_tracker %}\n      <div class=\"results\">\n        {% include \"machinetracker/mac_tracker.html\" with colspan=mac_tracker_colspan %}\n      </div>\n    {% endif %}\n\n    <div class=\"results\">\n      {% include \"machinetracker/ip_tracker.html\" with colspan=ip_tracker_colspan %}\n    </div>\n  {% elif mac_tracker != None %}\n    <div class=\"alert-box\">No results for \"{{ form_data.mac }}\"</div>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/mac_tracker.html",
    "content": "<table id=\"tracker-table\" class=\"listtable tablesorter\">\n    <caption>\n        MAC Search results\n        <span class=\"nav-tooltip\">\n            <i aria-describedby=\"hind_id_mac_result_exposition\" class=\"fa fa-info-circle\"></i>\n            <span id=\"hint_id_mac_result_exposition\" class=\"medium\" role=\"tooltip\">\n                Please note that the MAC search results are <em>historic</em>\n    data, while the information found at the interface details link is the\n                <em>current</em> data on the interface. They may have no other\n    connection than being related to the same interface at different points in\n    time.\n            </span>\n        </span>\n        <span class=\"subtitle right\">\n            {{ mac_tracker_count }} hit{{ mac_tracker_count|pluralize }}\n        </span>\n    </caption>\n\n    <thead>\n        <tr>\n            <th colspan=\"2\">Switch</th>\n            <th>Module</th>\n            <th colspan=\"2\">Interface</th>\n            <th>Start time</th>\n            <th>End time</th>\n            <th>Mac</th>\n            {% if form_data.vendor %}\n            <th>Vendor</th>\n            {% endif %}\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for key, result in mac_tracker.items %}\n        {% for row in result %}\n        {% if row.fishy %}<tr class=\"fishy-item\">{% else %}<tr>{% endif %}\n            <td>\n                {% if row.netbox.sysname %}\n                <a href=\"{% query 'machinetracker-swp' switch=row.netbox.sysname days=form_data.days vendor=form_data.vendor %}\" title=\"Search for other machines on this switch\">\n                {{ row.netbox.sysname }}</a>\n                {% else %}\n                {{ row.sysname }}\n                {% endif %}\n            </td>\n            <td>\n                {% if row.netbox.sysname %}\n                <a href=\"{% url 'ipdevinfo-details-by-name' row.netbox.sysname %}\" title=\"Browse this switch (IP Device Info)\">\n                <img src=\"{{ STATIC_URL }}images/arpcam/ipinfolink.png\" alt=\"IP Device info search\" /></a>\n                {% endif %}\n            </td>\n            <td>\n                {{ row.module|default_if_none:\"\" }}\n            </td>\n            <td>\n                {% with form_data.dns|yesno:\"True,\" as dns %}\n                <a href=\"{% query 'machinetracker-swp' switch=row.sysname module=row.module|default_if_none:'' port=row.port days=form_data.days vendor=form_data.vendor %}\" title=\"Search for other machines on this port\">\n                {{ row.port }}</a>\n                {% endwith %}\n            </td>\n            <td>\n                {% if row.netbox.sysname and row.port %}\n                <a href=\"{% url 'ipdevinfo-interface-details-by-name' row.netbox.sysname row.port %}\" title=\"Browse this interface (IP Device Info)\">\n                <img src=\"{{ STATIC_URL }}images/arpcam/ipinfolink.png\" alt=\"IP Info search\" /></a>\n                {% endif %}\n            </td>\n            <td>{{ row.start_time|date:\"Y-m-d H:i\" }}</td>\n            <td>\n                {% if row.still_active %}\n                {{ row.still_active }}\n                    {% if row.fishy %}{% include \"machinetracker/fishy.html\" %}{% endif %}\n                {% else %}\n                {{ row.end_time|date:\"Y-m-d H:i\" }}\n                {% endif %}\n            </td>\n            <td>\n                {% with form_data.dns|yesno:\"True,\" as dns %}\n                {% if forloop.first %}\n                <a href=\"{% query 'machinetracker-mac' mac=row.mac days=form_data.days dns=dns vendor=form_data.vendor %}\" title=\"Search for this MAC address\">\n                {{ row.mac }}</a>\n                {% endif %}\n                {% endwith %}\n            </td>\n            {% if form_data.vendor %}\n            <td>\n                {% if row.vendor %}\n                    {{ row.vendor }}\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n            {% endif %}\n        </tr>\n        {% endfor %}\n    {% endfor %}\n    </tbody>\n\n    <tfoot>\n        <tr>\n            <th colspan={{ colspan }}>{{ mac_tracker_count }}\n            hit{{ mac_tracker_count|pluralize }}</th>\n        </tr>\n    </tfoot>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/netbios_search.html",
    "content": "{% extends \"machinetracker/base.html\" %}\n\n{% block content %}\n\n  <form action=\"{% url 'machinetracker-netbios' %}\" method=\"get\">\n    <div id=\"search_form\" class=\"row\">\n      <div class=\"medium-6 column\">\n\n        <div class=\"row collapse\">\n          <div class=\"medium-9 column {% if form.search.errors %}error{% endif %}\">\n            {{ form.search }}\n            {% if form.search.errors %}\n              <small class=\"error\">{{ form.search.errors }}</small>\n            {% endif %}\n          </div>\n          <div class=\"medium-3 column\">\n            <input type=\"submit\" value=\"Search\" class=\"button postfix\"/>\n          </div>\n        </div>\n\n      </div>\n\n      <div class=\"medium-1 column machinetracker-filter\">\n        <div>\n          <label for=\"{{ form.dns.auto_id }}\"\n                 title=\"{{ form.dns.help_text }}\">{{ form.dns.label }}\n            {{ form.dns }}\n          </label>\n        </div>\n      </div>\n\n      <div class=\"medium-1 column machinetracker-filter\">\n        <div>\n          <label for=\"{{ form.vendor.auto_id }}\" title=\"{{ form.vendor.help_text }}\">\n            {{ form.vendor.label }}\n            {{ form.vendor }}\n          </label>\n        </div>\n      </div>\n\n\n      <div class=\"medium-1 column machinetracker-filter\">\n        <div class=\"machinetracker-filter-days\">\n          <label for=\"{{ form.days.auto_id }}\"\n                 title=\"{{ form.days.help_text }}\">{{ form.days.label }}\n            {{ form.days }}\n          </label>\n        </div>\n        {% if form.days.errors %}\n          <small class=\"error nomargin\">{{ form.days.errors }}</small>\n        {% endif %}\n      </div>\n\n      <div class=\"medium-2 column\">\n        {% include 'machinetracker/_search_help_trigger.html' with tab_name='netbios' %}\n      </div>\n\n    </div>\n  </form>\n\n  {% if netbios_tracker %}\n\n    <div class=\"results\">\n      {% include \"machinetracker/netbios_tracker.html\" %}\n    </div>\n\n  {% else %}\n    {% if form_data.search %}\n      <div class=\"alert-box\">No results for \"{{ form_data.search }}\"</div>\n    {% endif %}\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/netbios_tracker.html",
    "content": "<table class=\"listtable\">\n  <caption>\n    NetBIOS Search results\n  </caption>\n\n  <thead>\n    <tr>\n      <th>IP</th>\n      {% if form_data.dns %}\n        <th>DNS</th>\n      {% endif %}\n      <th>Name</th>\n      <th>Mac</th>\n      <th>Server</th>\n      <th>Username</th>\n      <th>Start time</th>\n      <th>End time</th>\n      {% if form_data.vendor %}\n      <th>Vendor</th>\n      {% endif %}\n    </tr>\n  </thead>\n\n  <tbody>\n    {% for key, result in netbios_tracker.items %}\n      {% for row in result %}\n        <tr>\n          <td>\n            <a href=\"{% query 'machinetracker-ip' ip_range=row.ip days=form_data.days dns=dns %}\"\n               title=\"Search for this IP address\">{{ row.ip }}\n            </a>\n          </td>\n          {% if form_data.dns %}\n            <td>\n              {{ row.dns_lookup }}\n            </td>\n          {% endif %}\n          <td>\n            {{ row.name }}\n          </td>\n          <td>\n            {% if row.mac %}\n              <a href=\"{% query 'machinetracker-mac' mac=row.mac days=form_data.days dns=dns %}\"\n                 title=\"Search for this MAC address\">{{ row.mac }}\n              </a>\n            {% else %}\n              N/A\n            {% endif %}\n          </td>\n          <td>\n            {{ row.server }}\n          </td>\n          <td>\n            {{ row.username }}\n          </td>\n          <td>\n            {{ row.start_time|date:\"DATETIME_FORMAT\" }}\n          </td>\n          <td>\n            {% if row.still_active %}\n              {{ row.still_active }}\n            {% else %}\n              {{ row.end_time|date:\"DATETIME_FORMAT\" }}\n            {% endif %}\n          </td>\n          {% if form_data.vendor %}\n          <td>\n              {% if row.vendor %}\n                {{ row.vendor }}\n              {% else %}\n                N/A\n              {% endif %}\n          </td>\n          {% endif %}\n        </tr>\n      {% endfor %}\n    {% endfor %}\n  </tbody>\n\n  <tfoot>\n    <tr>\n      <th colspan=\"{{ colspan }}\">\n        {{ netbios_tracker_count }} hit{{ netbios_tracker_count|pluralize }}\n      </th>\n    </tr>\n  </tfoot>\n\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/switch_search.html",
    "content": "{% extends \"machinetracker/base.html\" %}\n\n{% block content %}\n\n  <form action=\"{% url 'machinetracker-swp' %}\" method=\"get\">\n    <div id=\"search_form\" class=\"row\">\n      <div class=\"medium-8 column\">\n        <table class=\"listtable expand\">\n          <caption>Switch search</caption>\n          <tbody>\n            <tr>\n              <th><label for=\"id_switch\">Switch</label></th>\n              <td {% if form.switch.errors %}class=\"error\"{% endif %} >\n                {{ form.switch }}\n                {% if form.switch.errors %}\n                  <small class=\"error\">{{ form.switch.errors }}</small>\n                {% endif %}\n              </td>\n\n              <th><label for=\"id_hide\">Only active</label></th>\n              <td>\n                <input id=\"id_hide\" type=\"checkbox\" name=\"days\" value=\"-1\"\n                       onclick=\"document.getElementById('id_days').disabled = this.checked;\" />\n              </td>\n            </tr>\n\n            <tr>\n              <th><label for=\"id_module\">Module</label></th>\n              <td {% if form.module.errors %}class=\"error\"{% endif %}>\n                {{ form.module }}\n                {% if form.module.errors %}\n                  <small class=\"error\">{{ form.module.errors }}</small>\n                {% endif %}\n              </td>\n\n              <th><label for=\"id_days\">Days</label></th>\n              <td {% if form.days.errors %}class=\"error\"{% endif %}>\n                {{ form.days }}\n                {% if form.days.errors %}\n                  <small class=\"error\">{{ form.days.errors }}</small>\n                {% endif %}\n              </td>\n            </tr>\n\n            <tr>\n              <th><label for=\"id_port\">Port</label></th>\n              <td {% if form.port.errors %}class=\"error\"{% endif %}>\n                {{ form.port }}\n                {% if form.port.errors %}\n                  <small class=\"error\">{{ form.port.errors }}</small>\n                {% endif %}\n              </td>\n\n              <th><label for=\"{{ form.vendor.auto_id }}\" title=\"{{ form.vendor.help_text }}\">{{ form.vendor.label }}</label></th>\n              <td>\n                {{ form.vendor }}\n              </td>\n              <td colspan=\"2\">\n                <input type=\"submit\" value=\"Search\" class=\"button small right\"/>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n\n      <div class=\"medium-4 column\">\n        {% include 'machinetracker/_search_help_trigger.html' with tab_name='switch' %}\n      </div>\n\n    </div>\n  </form>\n\n  {% if mac_tracker %}\n    <div class=\"results\">\n      {% include \"machinetracker/mac_tracker.html\" with colspan=mac_tracker_colspan %}\n    </div>\n  {% elif mac_tracker != None %}\n    <div class=\"alert-box\">No results for \"{{ form_data.switch }}\"</div>\n  {% endif %}\n\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/machinetracker/uplink_tracker.html",
    "content": "<table id=\"tracker-table\" class=\"listtable tablesorter\">\n    <caption>\n        Uplink search results\n        <span class=\"subtitle right\">\n            {{ uplink_tracker|length }} hit{{ uplink_tracker|length|pluralize }}\n        </span>\n    </caption>\n\n    <thead>\n        <tr>\n            <th>Sysname</th>\n            <th>Uplink from</th>\n            <th>Uplink to</th>\n            <th>Mac</th>\n            {% if form_data.vendor %}\n            <th>Vendor</th>\n            {% endif %}\n\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for row in uplink_tracker %}\n        <tr>\n\n            <td>\n                <a href=\"{% url 'ipdevinfo-details-by-name' row.sysname %}\">{{ row.sysname }}</a>\n            </td>\n\n            <td>\n                {% if row.uplink %}\n                    <a href=\"{{ row.uplink.this.get_absolute_url }}\">{{ row.uplink.this.ifname }}</a>\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n\n            <td>\n                {% if row.uplink %}\n                    <a href=\"{{ row.uplink.other.get_absolute_url }}\">{{ row.uplink.other }}</a>\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n\n            <td>\n                <a href=\"{% query 'machinetracker-mac' mac=row.mac days=form_data.days dns=dns %}\" title=\"Search again for this MAC address\">\n                {{ row.mac }}</a>\n            </td>\n\n            {% if form_data.vendor %}\n            <td>\n                {% if row.vendor %}\n                    {{ row.vendor }}\n                {% else %}\n                    N/A\n                {% endif %}\n            </td>\n            {% endif %}\n\n        </tr>\n    {% endfor %}\n    </tbody>\n\n    <tfoot>\n        <tr>\n            <th colspan=\"8\">{{ uplink_tracker|length }}\n            hit{{ uplink_tracker|length|pluralize }}</th>\n        </tr>\n    </tfoot>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/macwatch/addmacwatch.html",
    "content": "{% extends \"macwatch/base.html\" %}\n\n{% block content %}\n\n    <div class=\"row\">\n        <div class=\"large-4 column\">\n            <a href=\"{% url 'listwatch' %}\" class=\"button small secondary\">Back</a>\n            {% include 'custom_crispy_templates/flat_form.html' %}\n        </div>\n    </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/macwatch/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'MAC Watch' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n  {% block content %}\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/macwatch/deletemacwatch.html",
    "content": "{% extends \"macwatch/base.html\" %}\n\n{% block content %}\n\n    <div class=\"row\">\n        <div class=\"large-4 column\">\n            <p class=\"alert-box secondary\">\n                Remove {{ macwatch.mac }} ({{ macwatch.description }} added\n                by {{ macwatch.userid.name }}) from watch?\n            </p>\n\n            <form action=\".\" method=\"post\">\n                {% csrf_token %}\n                <input type=\"submit\" name=\"submit\" class=\"button small alert\"\n                       value=\"Yes\">\n                <input type=\"submit\" name=\"submit\"\n                       class=\"button small secondary\"\n                       value=\"No\">\n            </form>\n\n        </div>\n    </div>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/macwatch/editmacwatch.html",
    "content": "{% extends \"macwatch/base.html\" %}\n\n{% block content %}\n\n<form action=\".\" method=\"post\">\n  {% csrf_token %}\n  <table class=\"vertitable\">\n  <caption>Edit mac watch</caption>\n    {{ form.as_table }}\n  </table>\n  <input type=\"submit\" value=\"Edit mac watch\">\n</form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/macwatch/list_watches.html",
    "content": "{% extends \"macwatch/base.html\" %}\n{% load date_and_time %}\n\n{% block content %}\n\n    <a href=\"/macwatch/add\" class=\"button small\">Add mac watch</a>\n\n    {% if macwatches %}\n        <table class=\"vertitable\">\n            <caption>Current mac addresses on watch</caption>\n\n            <tr>\n                <th>Mac Address</th>\n                <th>Description</th>\n                <th>Added by</th>\n                <th>Created</th>\n                <th>&nbsp;</th>\n            </tr>\n            {% for macwatch in macwatches %}\n\n                <tr>\n                    <td>\n                        <a href=\"{% query 'machinetracker-mac' mac=macwatch.get_mac_addr days=-1 dns='on' %}\">\n                            {{ macwatch.get_mac_addr }}\n                        </a>\n                    </td>\n                    <td>{{ macwatch.description }}</td>\n                    <td>{{ macwatch.userid.name }}</td>\n                    <td>{{ macwatch.created|default_datetime }}</td>\n                    <td>\n                        <a href=\"/macwatch/delete/{{ macwatch.id }}/\" class=\"button tiny alert\">Delete</a>\n                    </td>\n                </tr>\n\n            {% endfor %}\n        </table>\n    {% else %}\n        <p class=\"alert-box secondary\">No active mac watches.</p>\n    {% endif %}\n\n\n{% endblock %}\n\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/_component-browse-location.html",
    "content": "{% if location.browse_children or location.browse_rooms %}\n    <i class=\"fa fa-toggle-right\"></i>\n{% endif %}\n<span class=\"browse-item\">\n    <strong>{{ location.id }}</strong>\n    {% if location.description %}\n        <span class=\"browse-description\">{{ location.description }}</span>\n        <div class=\"nav-tooltip\">\n            <i class=\"fa fa-question-circle-o unstyled-tooltip\" aria-describedby=\"#loc-tooltip-{{ location.pk }}\"></i>\n            <span id=\"loc-tooltip-{{ location.pk }}\" role=\"tooltip\" class=\"small\">{{ location.description }}</span>\n        </div>\n    {% endif %}\n    <button\n        type=\"button\"\n        class=\"button tiny secondary\"\n        hx-post=\"{% url 'maintenance-component-select' %}\"\n        hx-target=\"#selected-components\"\n        hx-include=\"#selected-components input\"\n        hx-vals='{\"add_loc\": \"{{ location.pk|escapejs }}\"}'\n    >Add</button>\n</span>\n\n{% if location.browse_children or location.browse_rooms %}\n<ul class=\"child\">\n    {% for child in location.browse_children %}\n        <li>\n            {% with location=child %}\n                {% include 'maintenance/_component-browse-location.html' %}\n            {% endwith %}\n        </li>\n    {% endfor %}\n    {% for room in location.browse_rooms %}\n        <li>\n            <span class=\"browse-item\">\n                <span class=\"room-connector\">{% if forloop.last %}└─{% else %}├─{% endif %}</span>\n                <strong>{{ room.id }}</strong>\n                {% if room.description %}\n                    <span class=\"browse-description\">{{ room.description }}</span>\n                    <div class=\"nav-tooltip\">\n                        <i class=\"fa fa-question-circle-o unstyled-tooltip\" aria-describedby=\"#room-tooltip-{{ room.pk }}\"></i>\n                        <span id=\"room-tooltip-{{ room.pk }}\" role=\"tooltip\" class=\"small\">{{ room.description }}</span>\n                    </div>\n                {% endif %}\n                <button\n                    type=\"button\"\n                    class=\"button tiny secondary\"\n                    hx-post=\"{% url 'maintenance-component-select' %}\"\n                    hx-target=\"#selected-components\"\n                    hx-include=\"#selected-components input\"\n                    hx-vals='{\"add_room\": \"{{ room.pk|escapejs }}\"}'\n                >Add</button>\n            </span>\n        </li>\n    {% endfor %}\n</ul>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/_component-browse.html",
    "content": "<div id=\"browse-panel\">\n    <div class=\"browse-actions\">\n        <button type=\"button\" class=\"button tiny secondary\" id=\"browse-expand-all\">Expand all</button>\n        <button type=\"button\" class=\"button tiny secondary\" id=\"browse-collapse-all\">Collapse all</button>\n        <button type=\"button\" class=\"button tiny\" id=\"browse-close\">Close</button>\n    </div>\n\n    <div class=\"browse-tree\">\n        <ul class=\"no-bullet\">\n            {% for location in locations %}\n                <li>\n                    {% include 'maintenance/_component-browse-location.html' %}\n                </li>\n            {% empty %}\n                <li>No locations found.</li>\n            {% endfor %}\n        </ul>\n    </div>\n</div>\n\n<script>\n    (() => {\n        const tree = document.querySelector('.browse-tree');\n        const panel = document.getElementById('browse-panel');\n\n        const collapseAll = () => {\n            tree.querySelectorAll('.child').forEach(el => el.classList.remove('open'));\n            tree.querySelectorAll('.fa-toggle-down').forEach(el => {\n                el.classList.replace('fa-toggle-down', 'fa-toggle-right');\n            });\n        };\n\n        tree.addEventListener('click', (event) => {\n            const icon = event.target.closest('.fa-toggle-right, .fa-toggle-down');\n            if (icon) {\n                icon.classList.toggle('fa-toggle-right');\n                icon.classList.toggle('fa-toggle-down');\n                const childList = icon.closest('li').querySelector(':scope > .child');\n                if (childList) {\n                    childList.classList.toggle('open');\n                }\n            }\n        });\n\n        document.getElementById('browse-expand-all').addEventListener('click', () => {\n            tree.querySelectorAll('.child').forEach(el => el.classList.add('open'));\n            tree.querySelectorAll('.fa-toggle-right').forEach(el => {\n                el.classList.replace('fa-toggle-right', 'fa-toggle-down');\n            });\n        });\n\n        document.getElementById('browse-collapse-all').addEventListener('click', collapseAll);\n\n        document.getElementById('browse-close').addEventListener('click', () => {\n            panel.style.display = 'none';\n            collapseAll();\n        });\n\n        tree.querySelectorAll('.nav-tooltip').forEach(tooltip => {\n            tooltip.addEventListener('mouseenter', () => {\n                const trigger = tooltip.querySelector('[aria-describedby]');\n                const popup = tooltip.querySelector('[role=\"tooltip\"]');\n                if (!trigger || !popup) return;\n                popup.style.display = '';\n                const rect = trigger.getBoundingClientRect();\n                popup.style.top = `${rect.bottom + 8}px`;\n                popup.style.left = `${rect.left}px`;\n            });\n        });\n\n        tree.addEventListener('scroll', () => {\n            tree.querySelectorAll('[role=\"tooltip\"]').forEach(popup => {\n                popup.style.display = 'none';\n            });\n        });\n    })();\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/_component-search-results.html",
    "content": "{% if results %}\n    {% for component_type, result in results.items %}\n        <div class=\"component-group\">\n            <label for=\"id_{{ component_type }}\" style=\"font-weight: bold;\">{{ result.label }}</label>\n            <select multiple id=\"id_{{ component_type }}\" name=\"{{ component_type }}\">\n                {% if result.has_grouping %}\n                    {% for optgroup, options in result.values %}\n                        <optgroup label=\"{{ optgroup }}\">\n                            {% for option in options %}\n                                <option value=\"{{ option.id }}\">{{ option }}</option>\n                            {% endfor %}\n                        </optgroup>\n                    {% endfor %}\n                {% else %}\n                    {% for option in result.values %}\n                        <option value=\"{{ option.id }}\">{{ option }}</option>\n                    {% endfor %}\n                {% endif %}\n            </select>\n            <div class=\"row\">\n                <button\n                    type=\"button\"\n                    class=\"button secondary small\"\n                    hx-post=\"{% url 'maintenance-component-select' %}\"\n                    hx-target=\"#selected-components\"\n                    hx-include=\"#id_{{ component_type }}, #selected-components input\"\n                    hx-on::after-request=\"document.getElementById('id_{{ component_type }}').selectedIndex = -1;\"\n                >\n                    Add {{ result.label }}\n                </button>\n                <button\n                    type=\"button\" class=\"button secondary small\"\n                    onclick=\"Array.from(document.getElementById('id_{{ component_type }}').options).forEach(opt => opt.selected = true);\"\n                >\n                    Select all\n                </button>\n            </div>\n        </div>\n    {% endfor %}\n{% else %}\n    <strong>No hits</strong>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/_selected-components-list.html",
    "content": "{% load maintenance %}\n{% for key, identifiers in selected.items %}\n  {% for id in identifiers %}\n    <input type=\"hidden\" name=\"{{ key }}\" value=\"{{ id }}\"/>\n  {% endfor %}\n{% endfor %}\n{% if components %}\n  <div class=\"row\">\n      <button\n          type=\"button\"\n          class=\"button tiny secondary\"\n          onclick=\"document.querySelectorAll('#component-list input[type=checkbox]').forEach(cb => cb.checked = true);\"\n      >\n        Select all\n      </button>\n      <button\n          type=\"button\"\n          class=\"button tiny secondary\"\n          onclick=\"document.querySelectorAll('#component-list input[type=checkbox]').forEach(cb => cb.checked = false);\"\n      >\n        Unselect all\n      </button>\n  </div>\n  <ul id=\"component-list\" class=\"no-bullet\">\n    {% for trail in components %}\n        {% with trail|last as component %}\n          <li>\n            <div>\n              <input type=\"hidden\" name=\"{{ component|component_db_table }}\" value=\"{{ component.pk }}\"/>\n              <input type=\"checkbox\" name=\"remove_{{ component|component_db_table }}\" value=\"{{ component.pk }}\"/>\n                {{ component|model_verbose_name }}:\n            </div>\n            <div>\n              {% include \"maintenance/frag-component-trail.html\" %}\n            </div>\n          </li>\n        {% endwith %}\n    {% endfor %}\n  </ul>\n  <button\n      name=\"remove\"\n      hx-post=\"{% url 'maintenance-component-select' %}\"\n      hx-target=\"#selected-components\"\n      hx-include=\"#selected-components input\"\n      class=\"button small secondary\"\n  >\n      Remove selected\n  </button>\n{% else %}\n  <p>(none)</p>\n  <button disabled=\"disabled\" class=\"button small secondary\">Remove selected</button>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/back.html",
    "content": "<p><a href=\"{% url 'maintenance-calendar' %}\">Back to calendar</a></p>\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n    <script>require([\"src/maintenance\"]);</script>\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/color.css\">\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\">\n{% endblock %}\n\n{% block base_content %}\n\n  {% if current_user_data.messages %}\n      {% for m in current_user_data.messages %}\n          <div class=\"alert-box {{ m.type }}\">{{ m.message }}</div>\n      {% endfor %}\n  {% endif %}\n\n  {% with tool=current_user_data.tools|get_tool:'Maintenance Tasks' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n  {% block content %}\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/calendar.html",
    "content": "{% extends \"maintenance/tabs.html\" %}\n\n{% block tabcontent %}\n  <div class=\"calendar\">\n    <div class=\"calendar_controls\">\n      {% url 'maintenance-calendar' prev_month.year prev_month.month as previous_month %}\n      {% url 'maintenance-calendar' next_month.year next_month.month as next_month %}\n\n      <a href=\"{{ previous_month }}\" rel=\"nofollow\">\n        <i class=\"fa fa-step-backward fa-lg\" title=\"Previous month\"></i>\n      </a>\n\n      <form action=\"{% url 'maintenance-calendar' %}\" method=\"get\" class=\"inline-form\">\n          <input type=\"number\" name=\"year\"\n                 value=\"{{ calendarform.year.value }}\"\n                 min=\"{{ calendarform.year.field.min_value }}\"\n                 max=\"{{ calendarform.year.field.max_value }}\"\n                 required\n                 id=\"id_year\"/>\n          <input type=\"number\" name=\"month\"\n                 value=\"{{ calendarform.month.value }}\"\n                 min=\"{{ calendarform.month.field.min_value }}\"\n                 max=\"{{ calendarform.month.field.max_value }}\"\n                 required\n                 id=\"id_month\"/>\n        <button type=\"submit\" class=\"small secondary\"><i class=\"fa fa-search\"></i></button>\n      </form>\n\n      <form action=\"{% url 'maintenance-calendar' %}\" method=\"get\" class=\"inline-form\">\n        <input type=\"hidden\" name=\"year\" value=\"{{ curr_month.year }}\"/>\n        <input type=\"hidden\" name=\"month\" value=\"{{ curr_month.month }}\"/>\n        <button type=\"submit\" class=\"small secondary\">Current month</button>\n      </form>\n\n      <a href=\"{{ next_month }}\" rel=\"nofollow\">\n        <i class=\"fa fa-step-forward fa-lg\" title=\"Next month\"></i>\n      </a>\n    </div>\n      {% if calendarform.errors %}\n          {{ calendarform.errors }}\n      {% else %}\n          {{ calendar }}\n      {% endif %}\n  </div>\n\n{% endblock %}"
  },
  {
    "path": "python/nav/web/templates/maintenance/cancel.html",
    "content": "{% extends \"maintenance/base.html\" %}\n\n{% block content %}\n  <div class=\"alert-box\">Are you sure you want to cancel the task <b>{{ task.description }}</b>?</div>\n  <form action=\"{% url 'maintenance-cancel' task.id %}\" method=\"post\">\n    {% csrf_token %}\n    <input type=\"hidden\" name=\"task_id\" value=\"{{ task.id }}\"/>\n    <input type=\"submit\" value=\"Yes, cancel it!\" class=\"button small\"/>\n    <a href=\"{% url 'maintenance-active' %}\" class=\"button small secondary\">Do\n      not cancel</a>\n  </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/details.html",
    "content": "{% extends \"maintenance/base.html\" %}\n{% load maintenance %}\n\n{% block content %}\n\n  {% include 'maintenance/back.html' %}\n\n  {% include 'maintenance/heading.html' %}\n\n  <div class=\"panel white\">\n\n    <table class=\"vertitable vertitablefull vevent\">\n      <caption class=\"summary\">\n        {{ task.description }}\n      </caption>\n\n      <tbody>\n        <tr>\n          <th>Start</th>\n          <td>\n            <time class=\"dtstart\" datetime=\"{{ task.start_time }}\">\n              {{ task.start_time|date:\"Y-m-d H:i\" }}\n            </time>\n          </td>\n        </tr>\n        <tr>\n          <th>End</th>\n          {% if task.is_endless %}\n            <td>No end time</td>\n          {% else %}\n            <td>\n              <time class=\"dtend\" datetime=\"{{ task.end_time }}\">\n                {{ task.end_time|date:\"Y-m-d H:i\" }}\n              </time>\n            </td>\n          {% endif %}\n        </tr>\n        <tr>\n          <th>Description</th>\n          <td>{{ task.description }}</td>\n        </tr>\n        <tr>\n          <th>Components</th>\n          <td>\n            {% if components %}\n              <ul class=\"no-bullet\">\n                {% for trail in components %}\n                    <li>\n                        {% with trail|last as component %}\n                            {{ component|model_verbose_name }}:\n                            {% include \"maintenance/frag-component-trail.html\" %}\n                        {% endwith %}\n                    </li>\n                {% endfor %}\n              </ul>\n            {% else %}\n              (none)\n            {% endif %}\n          </td>\n        </tr>\n        <tr>\n          <th>Author</th>\n          <td>{{ task.author }}</td>\n        </tr>\n        {% if not current_user_data.account.is_anonymous %}\n          <tr>\n            <th>State</th>\n            <td>{{ task.state|capfirst }}</td>\n          </tr>\n        {% endif %}\n      </tbody>\n    </table>\n\n    {% if not current_user_data.account.is_anonymous %}\n      <a href=\"{% url 'maintenance-edit' task.id %}\" class=\"button small secondary\">Edit</a>\n      {% if task.state != \"canceled\" %}\n        <a href=\"{% url 'maintenance-cancel' task.id %}\" class=\"button small secondary\">Cancel now</a>\n      {% endif %}\n    {% endif %}\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/frag-component-trail.html",
    "content": "{% load maintenance %}\n{% for element in trail %}\n    {% with element|component_name as name %}\n        {% if element.get_absolute_url %}\n            <a href=\"{{ element.get_absolute_url }}\" title=\"{{ element|component_description }}\">{{ name }}</a>\n        {% else %}\n            {{ name }}\n        {% endif %}\n    {% endwith %}\n    {% if not forloop.last %} → {% endif %}\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/heading.html",
    "content": "<div class=\"row\">\n  <div class=\"small-12 column\">\n    <a href=\"{% url 'maintenance-new' %}\" class=\"button small pull-right\">New task</a>\n    <h4>{{ heading }}</h4>\n  </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/list.html",
    "content": "{% extends \"maintenance/tabs.html\" %}\n\n{% block tabcontent %}\n{% if tasks %}\n<table class=\"listtable\">\n    <caption>Maintenance Tasks</caption>\n\n    <thead>\n        <tr>\n            <th>Start</th>\n            <th>End</th>\n            <th>Description</th>\n            <th>Components</th>\n            <th>Author</th>\n            <th>State</th>\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for task in tasks %}\n        <tr class=\"vevent\">\n            <td>\n              <time class=\"dtstart\" datetime=\"{{ task.start_time }}\">\n                {{ task.start_time|date:\"Y-m-d H:i\" }}\n              </time>\n            </td>\n            {% if task.is_endless %}\n                <td>No end time</td>\n            {% else %}\n                <td>\n                  <time class=\"dtend\" datetime=\"{{ task.end_time }}\">\n                    {{ task.end_time|date:\"Y-m-d H:i\" }}\n                  </time>\n                </td>\n            {% endif %}\n            <td>\n                <a href=\"{% url 'maintenance-view' task.id %}\" class=\"url\">\n                  <span class=\"summary\">\n                    {{ task.description|truncatewords:8 }}\n                  </span>\n                </a>\n            </td>\n            <td>\n                {% if task.netbox %}\n                    <a href=\"{% url 'ipdevinfo-details-by-name' task.netbox.sysname %}\">\n                        {{ task.netbox.get_short_sysname }}</a>\n                {% else %}\n                    {{ task.component_count}}\n                {% endif %}\n            </td>\n            <td>{{ task.author }}</td>\n            <td>{{ task.state }}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n{% else %}\n<p>No maintenance tasks found.</p>\n{% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/new_task.html",
    "content": "{% extends \"maintenance/base.html\" %}\n{% load maintenance %}\n\n{% block content %}\n\n  {% include 'maintenance/back.html' %}\n\n  <h4>{{ heading }}</h4>\n\n  <div class=\"panel white\">\n    <form id=\"new-task-form\" action=\"{{ request.path }}\" method=\"post\">\n      <div class=\"row\">\n        <div class=\"large-4 columns\">\n          <fieldset>\n            <legend>Details</legend>\n            {% include 'custom_crispy_templates/_form_content.html' with form=task_form %}\n          </fieldset>\n        </div>\n\n        <div class=\"large-4 columns\">\n          <fieldset>\n            <legend>Select components</legend>\n            <div class=\"component-search-section\">\n              <label for=\"component-search\">\n                Search\n                <span class=\"htmx-indicator\">\n                  <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"Loading spinner\" /> Searching...\n                </span>\n              </label>\n              <input\n                id=\"component-search\"\n                class=\"form-control\" type=\"search\"\n                name=\"search\"\n                placeholder=\"Search for components...\"\n                hx-post=\"{% url 'maintenance-component-search' %}\"\n                hx-trigger=\"input changed delay:500ms, search\"\n                hx-target=\"#search-results\"\n                hx-indicator=\".htmx-indicator\"\n              />\n              <div class=\"browse-hint\">\n                or\n                <button type=\"button\"\n                  hx-get=\"{% url 'maintenance-component-browse' %}\"\n                  hx-target=\"#search-results\"\n                  hx-indicator=\".htmx-indicator\"\n                >browse locations &amp; rooms</button>\n              </div>\n              <div id=\"search-results\"></div>\n            </div>\n          </fieldset>\n        </div>\n\n        <div class=\"large-4 columns\">\n          <fieldset>\n            <legend>Selected components</legend>\n            <div id=\"selected-components\">\n            {% include 'maintenance/_selected-components-list.html' with components=components selected=selected %}\n            </div>\n          </fieldset>\n\n        </div> {# column #}\n      </div> {# row #}\n\n      <input type=\"submit\" name=\"save\" value=\"Save task\" class=\"button\" />\n    </form>\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/maintenance/tabs.html",
    "content": "{% extends 'maintenance/base.html' %}\n\n{% block content %}\n  <div class=\"tabs\">\n\n    <ul>\n      <li class=\"{{ active.calendar|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'maintenance-calendar' %}\">Calendar</a>\n      </li>\n      <li class=\"{{ active.active|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'maintenance-active' %}\">Active</a>\n      </li>\n      <li class=\"{{ active.planned|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'maintenance-planned' %}\">Scheduled</a>\n      </li>\n      <li class=\"{{ active.historic|yesno:\"tabactive,\" }}\">\n        <a href=\"{% url 'maintenance-historic' %}\">Archive</a>\n      </li>\n    </ul>\n\n    <div class=\"tabcontent\">\n      {% include 'maintenance/heading.html' %}\n      {% block tabcontent %}\n      {% endblock %}\n    </div>\n\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/messages/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\"/>\n  <link rel=\"alternate\" type=\"application/rss+xml\"\n        title=\"Messages Feed (RSS 2.0)\" href=\"{% url 'messages-rss' %}\"/>\n  <script>require(['src/messages']);</script>\n{% endblock %}\n\n{% block base_content %}\n  {% with tool=current_user_data.tools|get_tool:'Messages' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <a href=\"{% url 'messages-rss' %}\">Subscribe to message feed</a>\n\n  {% block content %}\n    <div class=\"tabs\">\n      <ul>\n        <li class=\"{{ active.active|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'messages-active' %}\">Active</a>\n        </li>\n        <li class=\"{{ active.scheduled|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'messages-planned' %}\">Scheduled</a>\n        </li>\n        <li class=\"{{ active.archive|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'messages-historic' %}\">Archive</a>\n        </li>\n      </ul>\n\n      <div class=\"tabcontent\">\n        {% if current_user_data.messages %}\n          <ul class=\"messages\">\n            {% for m in current_user_data.messages %}\n              <li class=\"{{ m.type }}\">{{ m.message }}</li>\n            {% endfor %}\n          </ul>\n        {% endif %}\n\n        {% block tabcontent %}\n        {% endblock tabcontent %}\n      </div>\n\n    </div>\n  {% endblock content %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/messages/list.html",
    "content": "{% extends \"messages/base.html\" %}\n{% block tabcontent %}\n\n  {% if messages %}\n    <table class=\"listtable\">\n      <caption>{{ caption }}</caption>\n      <thead>\n        <tr>\n          <th>Published</th>\n          <th>Title</th>\n          <th>Description</th>\n        </tr>\n      </thead>\n      <tbody>\n        {% for message in messages %}\n          <tr>\n            <td>{{ message.publish_start|date:\"SHORT_DATETIME_FORMAT\" }}</td>\n            <td><a href=\"{% url 'messages-view' message.id %}\">{{ message.title }}</a></td>\n            <td>{{ message.description }}</td>\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n  {% else %}\n    <p class=\"alert-box secondary\">No messages</p>\n  {% endif %}\n\n  {% if not current_user_data.account.is_anonymous %}\n    <a href=\"{% url 'messages-create' %}\" class=\"button small\">Create new message</a>\n  {% endif %}\n{% endblock tabcontent %}\n"
  },
  {
    "path": "python/nav/web/templates/messages/save.html",
    "content": "{% extends \"messages/base.html\" %}\n\n{% block content %}\n\n  <h3>{{ caption }}</h3>\n\n  <p>\n  {% if message %}\n    <a href=\"{% url 'messages-view' message.id %}\">Back to message</a>\n  {% else %}\n    <a href=\"{% url 'messages-home' %}\">See active messages</a>\n  {% endif %}\n  </p>\n\n  {% if replaces %}\n    <p class=\"alert-box secondary\">\n      This message will replace\n      <a href=\"{% url 'messages-view' replaces.id %}\">{{ replaces.title }}</a>\n      from {{ replaces.publish_start|date:\"SHORT_DATETIME_FORMAT\" }}\n      by {{ replaces.author }}\n    </p>\n  {% endif %}\n\n  <div class=\"row\">\n    <div class=\"column medium-6\">\n      {% include 'custom_crispy_templates/flat_form.html' %}\n    </div>\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/messages/view.html",
    "content": "{% extends \"messages/base.html\" %}\n\n{% block content %}\n\n  <p><a href=\"{% url 'messages-home' %}\">See active messages</a></p>\n\n  <table class=\"vertitable\">\n    <caption>{{ message.title }}</caption>\n\n    <tr>\n      <th>Published</th>\n      <td>{{ message.publish_start|date:\"SHORT_DATETIME_FORMAT\" }}</td>\n    </tr>\n\n    <tr>\n      <th>Author</th>\n      <td>{{ message.author }}</td>\n    </tr>\n\n    <tr>\n      <th>Description</th>\n      <td>{{ message.description }}</td>\n    </tr>\n\n    <tr>\n      <th>Technical description</th>\n      <td>{{ message.tech_description }}</td>\n    </tr>\n\n    {% if message.maintenance_tasks.all %}\n      <tr>\n        <th>Related maintenance tasks</th>\n        <td>\n          {% for task in message.maintenance_tasks.all %}\n            <li>\n              <a href=\"{% url 'maintenance-view' task.pk %}\">\n                {{ task.description }}\n              </a>\n              ,\n              from {{ task.start_time|date:\"SHORT_DATETIME_FORMAT\" }}\n              to {{ task.end_time|date:\"SHORT_DATETIME_FORMAT\" }}\n              , current state is\n              <i>{{ task.state }}</i>\n            </li>\n          {% endfor %}\n        </td>\n      </tr>\n    {% endif %}\n\n    <tr>\n      <th>Expires</th>\n      <td>{{ message.publish_end|date:\"SHORT_DATETIME_FORMAT\" }}\n        {% if message.publish_end > now %}\n          <a href=\"{% url 'messages-expire' message.id %}\"\n             class=\"button secondary tiny\">Expire now</a>\n        {% endif %}\n      </td>\n    </tr>\n\n    {% if message.replaces_message %}\n      <tr>\n        <th>Replaces message</th>\n        <td>\n          <a href=\"{% url 'messages-view' message.replaces_message.id %}\">\n            {{ message.replaces_message.title }},\n          </a>\n          from {{ message.replaces_message.publish_start|date:\"SHORT_DATETIME_FORMAT\" }},\n          by {{ message.replaces_message.author }}\n        </td>\n      </tr>\n    {% endif %}\n\n    {% for item in message.replaced_by.all %}\n      <tr>\n        <th>Replaced by</th>\n        <td>\n          <a href=\"{% url 'messages-view' item.id %}\">\n            {{ item.title }},\n          </a>\n          from {{ item.publish_start|date:\"SHORT_DATETIME_FORMAT\" }},\n          by {{ item.author }}\n        </td>\n      </tr>\n    {% endfor %}\n\n  </table>\n\n  {% if not current_user_data.account.is_anonymous %}\n    <a href=\"{% url 'messages-edit' message.id %}\" class=\"button small\">\n      Edit this message\n    </a>\n    <a href=\"{% url 'messages-followup' message.id %}\" class=\"button small\">\n      Follow up this message\n    </a>\n  {% endif %}\n\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/mfa/index.html",
    "content": "{% extends \"mfa/base_manage.html\" %}\n{% load allauth %}\n{% load i18n %}\n{% block head_title %}\n    {% trans \"Two-Factor Authentication\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>{% trans \"Two-Factor Authentication\" %}</h3>\n    {% if not MFA_SUPPORTED_TYPES %}\n        {% element p %}\n            Two-factor authentication is not available.\n        {% endelement %}\n    {% elif is_mfa_enabled %}\n        {% element p %}\n            Two-factor authentication is active for your account.\n        {% endelement %}\n    {% else %}\n        {% element p %}\n            Two-factor authentication is not yet set up for your account.\n        {% endelement %}\n    {% endif %}\n    <div class=\"mfa-panels\">\n        {% if \"totp\" in MFA_SUPPORTED_TYPES %}\n            {% element panel %}\n                {% slot title %}\n                    {% translate \"Authenticator App\" %}\n                    {% if authenticators.totp %}<span class=\"label success\">{% translate \"Active\" %} &#10003;</span>{% endif %}\n                {% endslot %}\n                {% slot body %}\n                    {% if authenticators.totp %}\n                        {% element p %}\n                            {% translate \"Authentication using an authenticator app is active.\" %}\n                        {% endelement %}\n                    {% else %}\n                        {% element p %}\n                            {% translate \"An authenticator app is not active.\" %}\n                        {% endelement %}\n                    {% endif %}\n                {% endslot %}\n                {% slot actions %}\n                    {% url 'mfa_deactivate_totp' as deactivate_url %}\n                    {% url 'mfa_activate_totp' as activate_url %}\n                    {% if authenticators.totp %}\n                        {% element button href=deactivate_url tags=\"danger,delete,panel\" %}\n                            {% translate \"Deactivate\" %}\n                        {% endelement %}\n                    {% else %}\n                        {% element button href=activate_url tags=\"panel\" %}\n                            {% translate \"Activate\" %}\n                        {% endelement %}\n                    {% endif %}\n                {% endslot %}\n            {% endelement %}\n        {% endif %}\n        {% if \"webauthn\" in MFA_SUPPORTED_TYPES %}\n            {% element panel %}\n                {% slot title %}\n                    {% translate \"Security Keys\" %}\n                    {% if authenticators.webauthn|length %}<span class=\"label success\">{% translate \"Active\" %} &#10003;</span>{% endif %}\n                {% endslot %}\n                {% slot body %}\n                    {% if authenticators.webauthn|length %}\n                        {% element p %}\n                            {% blocktranslate count count=authenticators.webauthn|length %}You have added {{ count }} security key.{% plural %}You have added {{ count }} security keys.{% endblocktranslate %}\n                        {% endelement %}\n                    {% else %}\n                        {% element p %}\n                            {% translate \"No security keys have been added.\" %}\n                        {% endelement %}\n                    {% endif %}\n                {% endslot %}\n                {% slot actions %}\n                    {% if authenticators.webauthn|length %}\n                        {% url 'mfa_list_webauthn' as webauthn_list_url %}\n                        {% element button href=webauthn_list_url %}\n                            {% translate \"Manage\" %}\n                        {% endelement %}\n                    {% else %}\n                        {% url 'mfa_add_webauthn' as webauthn_add_url %}\n                        {% element button href=webauthn_add_url %}\n                            {% translate \"Add\" %}\n                        {% endelement %}\n                    {% endif %}\n                {% endslot %}\n            {% endelement %}\n        {% endif %}\n        {% if \"recovery_codes\" in MFA_SUPPORTED_TYPES %}\n            {% with total_count=authenticators.recovery_codes.generate_codes|length unused_count=authenticators.recovery_codes.get_unused_codes|length %}\n                {% element panel %}\n                    {% slot title %}\n                        {% translate \"Recovery Codes\" %}\n                    {% endslot %}\n                    {% slot body %}\n                        {% if authenticators.recovery_codes %}\n                            {% element p %}\n                                {% blocktranslate count unused_count=unused_count %}There is {{ unused_count }} out of {{ total_count }} recovery codes available.{% plural %}There are {{ unused_count }} out of {{ total_count }} recovery codes available.{% endblocktranslate %}\n                                {% if unused_count == 0 %}\n                                    <span class=\"label secondary\">{% translate \"No codes left\" %}</span>\n                                {% endif %}\n                            {% endelement %}\n                            {% if unused_count < 3 and unused_count > 0 %}\n                                <div class=\"alert-box warning\">\n                                    {% blocktranslate %}You are running low on recovery codes. Consider generating a new set.{% endblocktranslate %}\n                                </div>\n                            {% elif unused_count == 0 %}\n                                <div class=\"alert-box alert\">\n                                    {% blocktranslate %}All recovery codes have been used. Generate a new set to maintain account recovery access.{% endblocktranslate %}\n                                </div>\n                            {% endif %}\n                        {% else %}\n                            {% element p %}\n                                {% translate \"No recovery codes set up.\" %}\n                            {% endelement %}\n                        {% endif %}\n                    {% endslot %}\n                    {% if is_mfa_enabled %}\n                        {% if authenticators.recovery_codes %}\n                            {% if unused_count > 0 %}\n                                {% slot actions %}\n                                    {% url 'mfa_view_recovery_codes' as view_url %}\n                                    {% element button href=view_url tags=\"panel\" %}\n                                        {% translate \"View\" %}\n                                    {% endelement %}\n                                {% endslot %}\n                                {% slot actions %}\n                                    {% url 'mfa_download_recovery_codes' as download_url %}\n                                    {% element button href=download_url tags=\"secondary,panel\" %}\n                                        {% translate \"Download\" %}\n                                    {% endelement %}\n                                {% endslot %}\n                            {% endif %}\n                        {% endif %}\n                        {% slot actions %}\n                            {% url 'mfa_generate_recovery_codes' as generate_url %}\n                            {% element button href=generate_url tags=\"secondary,panel\" %}\n                                {% translate \"Generate\" %}\n                            {% endelement %}\n                        {% endslot %}\n                    {% endif %}\n                {% endelement %}\n            {% endwith %}\n        {% endif %}\n    </div>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/mfa/recovery_codes/generate.html",
    "content": "{% extends \"mfa/recovery_codes/base.html\" %}\n{% load i18n %}\n{% load allauth %}\n{% block content %}\n    <h3>{% translate \"Recovery Codes\" %}</h3>\n    {% element p %}\n        {% blocktranslate %}You are about to generate a new set of recovery codes for your account.{% endblocktranslate %}\n    {% endelement %}\n    {% if unused_code_count %}\n        <div class=\"alert-box warning\">\n            {% blocktranslate %}This action will invalidate your existing {{ unused_code_count }} unused codes. Are you sure?{% endblocktranslate %}\n        </div>\n    {% endif %}\n    {% url 'mfa_generate_recovery_codes' as action_url %}\n    {% url 'mfa_index' as mfa_index_url %}\n    {% element form method=\"post\" action=action_url no_visible_fields=True %}\n        {% slot body %}\n            {% csrf_token %}\n            {{ form.as_p }}\n        {% endslot %}\n        {% slot actions %}\n            {% setvar tags %}\n                {% if unused_code_count %}\n                    danger\n                {% else %}\n                {% endif %}\n            {% endsetvar %}\n            {% element button type=\"submit\" tags=tags %}\n                {% trans \"Generate\" %}\n            {% endelement %}\n            <a href=\"{{ mfa_index_url }}\" class=\"button small secondary\">{% translate \"Cancel\" %}</a>\n        {% endslot %}\n    {% endelement %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/mfa/recovery_codes/index.html",
    "content": "{% extends \"mfa/recovery_codes/base.html\" %}\n{% load i18n %}\n{% load allauth %}\n{% block content %}\n    <h3>{% translate \"Recovery Codes\" %}</h3>\n    <div class=\"alert-box info\">\n        {% blocktranslate %}Store these codes in a safe place. Each can be used only once to sign in if you lose access to your authenticator app.{% endblocktranslate %}\n    </div>\n    {% element p %}\n        {% blocktranslate count unused_count=unused_codes|length %}There is {{ unused_count }} out of {{ total_count }} recovery codes available.{% plural %}There are {{ unused_count }} out of {{ total_count }} recovery codes available.{% endblocktranslate %}\n    {% endelement %}\n    {% if unused_codes %}\n        <style>.recovery-codes-list { font-family: monospace; list-style: none; margin: 0; columns: 2; }</style>\n        <ul class=\"recovery-codes-list\">\n            {% for code in unused_codes %}\n                <li>{{ code }}</li>\n            {% endfor %}\n        </ul>\n        <button type=\"button\"\n                class=\"button small secondary\"\n                style=\"margin-top: 0.5rem;\"\n                onclick=\"navigator.clipboard.writeText(this.dataset.text).then(() => this.textContent='{% trans \"Copied!\" %}')\"\n                data-text=\"{% for code in unused_codes %}{{ code }}{% if not forloop.last %}&#10;{% endif %}{% endfor %}\">{% translate \"Copy all codes\" %}</button>\n    {% endif %}\n    <div style=\"margin-top: 1.5rem;\">\n        {% if unused_codes %}\n            {% url 'mfa_download_recovery_codes' as download_url %}\n            {% element button href=download_url %}\n                {% translate \"Download codes\" %}\n            {% endelement %}\n        {% endif %}\n        {% url 'mfa_generate_recovery_codes' as generate_url %}\n        {% element button href=generate_url %}\n            {% translate \"Generate new codes\" %}\n        {% endelement %}\n        {% url 'mfa_index' as mfa_index_url %}\n        {% element button href=mfa_index_url tags=\"secondary\" %}\n            {% translate \"Back\" %}\n        {% endelement %}\n    </div>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/mfa/totp/activate_form.html",
    "content": "{% extends \"mfa/totp/base.html\" %}\n{% load allauth i18n %}\n{% block head_title %}\n    {% translate \"Activate Authenticator App\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>{% translate \"Activate Authenticator App\" %}</h3>\n    {% url 'mfa_activate_totp' as action_url %}\n    {% url 'mfa_index' as mfa_index_url %}\n    {% element form form=form method=\"post\" action=action_url %}\n        {% slot body %}\n            {% csrf_token %}\n            <div style=\"max-width: 640px;\">\n            <ol>\n                <li>\n                    {% blocktranslate %}Scan the QR code below with your authenticator app (such as Google Authenticator or Authy):{% endblocktranslate %}\n                    <div>\n                        {% element img src=totp_svg_data_uri alt=form.secret tags=\"mfa,totp,qr\" %}\n                        {% endelement %}\n                    </div>\n                </li>\n                <li>\n                    {% blocktranslate %}Alternatively, enter this secret manually into your authenticator app:{% endblocktranslate %}\n                    <div>\n                        {% element field id=\"authenticator_secret\" type=\"text\" value=form.secret disabled=True %}\n                            {% slot label %}\n                                {% translate \"Authenticator secret\" %}\n                            {% endslot %}\n                            {% slot help_text %}\n                                {% translate \"You can store this secret and use it to reinstall your authenticator app at a later time.\" %}\n                            {% endslot %}\n                        {% endelement %}\n                        <button type=\"button\"\n                                class=\"button small secondary\"\n                                onclick=\"navigator.clipboard.writeText(this.dataset.text).then(() => this.textContent='{% trans \"Copied!\" %}')\"\n                                data-text=\"{{ form.secret }}\">{% translate \"Copy secret\" %}</button>\n                    </div>\n                </li>\n                <li>\n                    {% blocktranslate %}Enter the 6-digit code shown in your app to confirm setup:{% endblocktranslate %}\n                    {% element fields form=form %}\n                    {% endelement %}\n                </li>\n            </ol>\n            </div>\n        {% endslot %}\n        {% slot actions %}\n            {% element button type=\"submit\" %}\n                {% trans \"Activate\" %}\n            {% endelement %}\n            <a href=\"{{ mfa_index_url }}\" class=\"button small secondary\">{% translate \"Cancel\" %}</a>\n        {% endslot %}\n    {% endelement %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/mfa/totp/deactivate_form.html",
    "content": "{% extends \"mfa/totp/base.html\" %}\n{% load i18n %}\n{% load allauth %}\n{% block head_title %}\n    {% trans \"Deactivate Authenticator App\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>{% trans \"Deactivate Authenticator App\" %}</h3>\n    {% url 'mfa_index' as mfa_index_url %}\n    <div class=\"alert-box alert\">\n        {% blocktranslate %}Are you sure you want to deactivate your authenticator app? You will no longer be able to use it to sign in.{% endblocktranslate %}\n    </div>\n    {% url 'mfa_deactivate_totp' as action_url %}\n    {% element form form=form method=\"post\" action=action_url no_visible_fields=True %}\n        {% slot body %}\n            {% csrf_token %}\n            {% element fields form=form %}\n                {{ form.as_p }}\n            {% endelement %}\n        {% endslot %}\n        {% slot actions %}\n            {% element button tags=\"danger,delete\" type=\"submit\" %}\n                {% trans \"Deactivate\" %}\n            {% endelement %}\n            <a href=\"{{ mfa_index_url }}\" class=\"button small secondary\">{% translate \"Cancel\" %}</a>\n        {% endslot %}\n    {% endelement %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/modals/_nav_modal.html",
    "content": "<dialog\n        id=\"{{ modal_id }}\"\n        class=\"nav-modal \"\n        tabindex=\"-1\"\n>\n    <div class=\"modal-underlay\"{% if close_on_outside_click %} hx-on:click=\"htmx.remove(this.closest('#{{ modal_id }}'))\"{% endif %}></div>\n    <div class=\"modal-content{% if modal_size %} {{ modal_size }}{% endif %}\">\n        {% if show_close_button %}\n        <a class=\"close-reveal-modal\" aria-label=\"Close\" hx-on:click=\"htmx.remove(this.closest('#{{ modal_id }}'))\">&#215;</a>\n        {% endif %}\n        {% include content_template %}\n        <div id=\"{{ modal_id }}-alert\"></div>\n    </div>\n</dialog>\n"
  },
  {
    "path": "python/nav/web/templates/modals/_nav_modal_alert.html",
    "content": "<div id=\"{{ modal_id }}-alert\" class=\"alert-box alert\">{{ message }}</div>\n"
  },
  {
    "path": "python/nav/web/templates/modals/_nav_modal_resolve.html",
    "content": "{% if content_template %}\n{% include content_template %}\n{% endif %}\n<div id=\"{{ modal_id }}\" hx-swap-oob=\"delete\"></div>\n"
  },
  {
    "path": "python/nav/web/templates/nav_header.html",
    "content": "{% comment %}\n  This template requires a tool available in the context\n{% endcomment %}\n\n{% if tool %}\n  <div class=\"nav-header\">\n    <h2>{{ tool.name }}</h2>\n    <h5 class=\"subheader hide-for-small\">\n      {% if tool.doclink %}\n        <a href=\"{{ tool.doclink }}\"\n           title=\"View documentation (opens in another window)\"\n           target=\"_blank\">\n          <i class=\"fa fa-question-circle\"></i>\n        </a>\n      {% endif %}\n      {{ tool.description }}\n    </h5>\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_add_navlet_modal.html",
    "content": "<h4>Add a widget to your page</h4>\n    <ul class=\"small-block-grid-1 medium-block-grid-2 large-block-grid-3\">\n    {% for navlet in navlets %}\n      <li>\n        <div class=\"panel\">\n          <form\n                  class=\"add-user-navlet right\"\n                  hx-post=\"{% url 'add-user-navlet' dashboard_id %}\"\n                  hx-swap=\"beforeend\"\n          >\n            {% csrf_token %}\n            <input type=\"hidden\" name=\"navlet\" value=\"{{ navlet.get_class }}\">\n            <input type=\"submit\" class=\"button tiny\" value=\"Add\">\n          </form>\n          <h5>{{ navlet.title }}</h5>\n          <span>{{ navlet.description }}</span>\n        </div>\n      </li>\n    {% endfor %}\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_add_navlet_response.html",
    "content": "<div hx-swap-oob=\"afterbegin:#navlets-htmx [data-col='1']\">\n    {% include 'navlets/_navlet_item.html' with navlet=navlet %}\n</div>\n<div id=\"navlet-list\" hx-swap-oob=\"delete\"></div>\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_navlet_item.html",
    "content": "<div\n    data-id=\"{{ navlet.id }}\"\n    class=\"navlet {{ navlet.navlet_class }}\"\n    {% if navlet.highlight %}\n    data-highlight=\"true\"\n    {% endif %}\n>\n    <div\n        hx-get=\"{% url 'get-user-navlet' navlet.id %}\"\n        hx-vals='{\"mode\": \"VIEW\"}'\n        hx-target=\"[data-id='{{ navlet.id }}']\"\n        hx-trigger=\"load\"\n        hx-swap=\"innerHTML\"\n    ></div>\n    <script>\n        require(['spin'], function (Spinner) {\n            const node = document.querySelector(\"[data-id='{{ navlet.id }}']\");\n            const spinner = new Spinner({zIndex: 10});\n            node.addEventListener('htmx:beforeRequest', function () {\n                spinner.spin(node);\n                node.classList.add('loading');\n            });\n            node.addEventListener('htmx:afterRequest', function () {\n                spinner.stop();\n                node.classList.remove('loading');\n            });\n        })\n    </script>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_navlet_refresh.html",
    "content": "{% if navlet and navlet.mode == \"VIEW\" and navlet.preferences.refresh_interval %}\n{% if not navlet.ajax_reload %}\n<div\n    class=\"hidden\"\n    hx-get=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-trigger=\"every {{ navlet.preferences.refresh_interval }}ms\"\n    hx-target=\"closest .navlet\"\n></div>\n{% else %}\n<script id=\"navlet-ajax-refresh-{{ navlet.navlet_id }}\">\n(function () {\n    const refreshScript = document.getElementById(\"navlet-ajax-refresh-{{ navlet.navlet_id }}\");\n    if (!refreshScript) return;\n\n    let navletIntervalId = setInterval(function () {\n        const refreshScript = document.getElementById(\"navlet-ajax-refresh-{{ navlet.navlet_id }}\")\n        if (refreshScript) {\n            console.log(\"Refreshing navlet {{ navlet.navlet_id }} via AJAX\");\n            // Trigger 'refresh' event on the navlet element\n            const navletElement = refreshScript.closest('.navlet');\n            if (navletElement) {\n                navletElement.dispatchEvent(new Event('refresh'));\n            }\n        } else {\n            clearInterval(navletIntervalId);\n            navletIntervalId = null;\n        }\n    }, {{ navlet.preferences.refresh_interval }});\n})();\n</script>\n{% endif %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_remove_modal_form.html",
    "content": "<form\n        method=\"POST\"\n        hx-post=\"{% url 'remove-user-navlet' %}\"\n        hx-target=\"[data-id='{{ navlet_id }}']\"\n        hx-swap=\"delete\"\n>\n    {% csrf_token %}\n    <input type=\"hidden\" name=\"navletid\" value=\"{{ navlet_id }}\">\n    <p>Remove the widget from the page?</p>\n    <button class=\"button small full-width\" type=\"submit\">Yes</button>\n    <button\n            class=\"button small secondary full-width\"\n            hx-on:click=\"htmx.remove(this.closest('.nav-modal'))\"\n            type=\"button\"\n    >\n        No\n    </button>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/navlets/_remove_navlet_response.html",
    "content": "{% if navlet_count == 0 %}\n<div hx-swap-oob=\"afterbegin:#navlets-htmx [data-col='1']\">\n    <div id=\"no-widgets-message\" class=\"alert-box info\">No widgets added to this dashboard</div>\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/alert_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <p class=\"alert-box info\">\n    This widget periodically fetches a binary value (the value must be either\n    zero or 1) from Graphite. The value is fetched using the given <em>metric</em>.\n\n    If the value is equal to the <em>on state</em> the widget will display a\n    warning or alert. If not it will say that everything is ok.<br>\n    <strong>Choose either a sensor or write a metric name.</strong>\n  </p>\n\n  <form\n      hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n      method=\"post\"\n      hx-vals='{\"mode\": \"VIEW\"}'\n      hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n      hx-swap=\"innerHTML\"\n  >\n    {% include 'custom_crispy_templates/_form_content.html' %}\n    <button class=\"tiny\" type=\"submit\">Save</button>\n    <button class=\"tiny secondary cancel-button\" type=\"button\">Cancel</button>\n  </form>\n\n  <script>\n   var $navlet = $('[data-id=' + {{ navlet.navlet_id }}+ ']');\n   $navlet.find(\"[name=sensor]\").select2();  // Add select2 component to sensor dropdown\n\n   /* Reset dropdown when altering metric path */\n   $navlet.find(\"[name=metric]\").on('keydown', function(){\n       $navlet.find(\"[name=sensor]\").select2('val', '');\n   });\n\n   /* Reset metric path when altering dropdown*/\n   $navlet.find(\"[name=sensor]\").on('change', function(){\n       $navlet.find(\"[name=metric]\").val('');\n   });\n  </script>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/alert_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if metric %}\n\n    <div class=\"alert-box\"></div>\n    <small class=\"alert-update-timestamp right\">Last update: <span></span></small>\n\n    <script>\n     require(['plugins/navlet_alert'], function (AlertController) {\n         new AlertController(\n             $('[data-id={{ navlet.navlet_id }}]'),\n             {\n                 dataUrl: '{{ data_url }}',\n                 onState: +'{{ on_state }}',\n                 onMessage: '{{ on_message }}',\n                 offMessage: '{{ off_message }}',\n                 alertType: '{{ alert_type }}'\n             }\n         );\n     })\n    </script>\n\n  {% else %}\n\n    {# If we have no metric, we need to ask user to configure widget #}\n    <div class=\"alert-box info\">\n      <a href=\"javascript:void(0);\" class=\"configure-link\">Configure the widget</a> to see alert status.\n    </div>\n\n    <script>\n     (function(){\n         const $navlet = $('[data-id=\"{{ navlet.navlet_id }}\"]');\n         $navlet.find('.configure-link').click(function(e) {\n             e.preventDefault();\n             const $switch = $navlet.find('.navlet-mode-switch')[0];\n             if ($switch) {\n                 htmx.trigger($switch, 'click');\n             }\n         });\n     })();\n    </script>\n\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/base.html",
    "content": "{% include \"navlets/_navlet_refresh.html\" with navlet=navlet %}\n{% if navlet %}\n<div class=\"row navlet-header\">\n  <div class=\"small-12 column\">\n    {% if navlet.can_edit or current_user_data.sudoer %}\n      <ul class=\"navlet-action-group button-group\">\n        <li>\n          <span class=\"navlet-drag-button right\">\n            <i class=\"fa fa-arrows\" title=\"Drag to move widgets to where you want them\"></i>\n          </span>\n        </li>\n{% comment %} Leave this uncommented in case we want it back.\n        <li>\n          <a href=\"javascript:void(0);\" class=\"navlet-reload-button right\">\n            <i class=\"fa fa-refresh\" title=\"Reload\"></i>\n          </a>\n        </li>\n{% endcomment %}\n        {% if navlet.is_editable %}\n          <li>\n            <a\n                class=\"navlet-mode-switch right\"\n                data-mode=\"{{ navlet.mode }}\"\n                hx-get=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n                hx-vals='{\"mode\": \"{% if navlet.mode == \"VIEW\" %}EDIT{% else %}VIEW{% endif %}\"}'\n                hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n                hx-trigger=\"click\"\n            >\n              {% if navlet.mode == 'VIEW' %}\n                <i class=\"fa fa-gear\" title=\"Edit\"></i>\n              {% else %}\n                <i class=\"fa fa-check-square-o\" title=\"View\"></i>\n              {% endif %}\n            </a>\n          </li>\n        {% endif %}\n        <li>\n          <a\n              class=\"right\"\n              hx-get=\"{% url 'remove-user-navlet-modal' navlet.navlet_id %}\"\n              hx-trigger=\"click\"\n              hx-target=\"body\"\n              hx-swap=\"beforeend\"\n          >\n            <i class=\"fa fa-times-circle\" title=\"Remove\"></i>\n          </a>\n        </li>\n      </ul>\n    {% endif %}\n\n    <div class=\"title-container\">\n      <span class=\"subheader\" title=\"{{ navlet.description }}\"\n        {% if navlet.is_title_editable %}\n          {% if navlet.can_edit or current_user_data.sudoer %}\n              data-set-title=\"{% url 'set-navlet-preferences' %}\"\n          {% endif %}\n        {% endif %}>\n        <span class=\"navlet-title\">{{ navlet.title }}</span>\n          {% if navlet.is_title_editable %}\n            {% if navlet.can_edit or current_user_data.sudoer %}\n              <i class=\"fa fa-edit\"></i>\n            {% endif %}\n          {% endif %}\n      </span>\n    </div>\n\n    {% if navlet.is_deprecated %}\n      <div class=\"alert-box warning with-icon deprecated-warning\">\n        This widget is deprecated. You may still use it, but it might not\n        function properly.\n      </div>\n    {% endif %}\n\n  </div>\n</div>\n{% else %}\n<div class=\"row navlet-header\">\n  <div class=\"small-12 column\">\n    <div class=\"title-container\">\n      <span class=\"subheader\" title=\"The requested widget could not be found\">\n        <span class=\"navlet-title\">Widget not found</span>\n      </span>\n    </div>\n  </div>\n</div>\n{% endif %}\n\n<div class=\"row navlet-body\">\n  <div class=\"small-12 columns\">\n    {% block navlet-content %}\n    {% endblock %}\n    {% if error_message %}\n      <div class=\"alert-box error\">\n        {{ error_message }}\n      </div>\n    {% elif errors %}\n        <div class=\"alert-box error\">\n            <ul class=\"no-bullet\">\n            {% for error in errors %}\n                <li>{{ error }}</li>\n            {% endfor %}\n            </ul>\n        </div>\n    {% endif %}\n  </div>\n</div>\n\n<div class=\"float-clear\"></div>\n"
  },
  {
    "path": "python/nav/web/templates/navlets/envrack_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n    {% csrf_token %}\n    {{ form }}\n    <input type=\"submit\" class=\"button tiny\" value=\"Save\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/envrack_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if rackid %}\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/rack.css\">\n\n    <div id=\"envrack-{{ rackid }}\" style=\"display: flex; justify-content: center;\">\n      <my-rack :rack=\"rack\"></my-rack>\n    </div>\n\n    <script>\n     (function(){\n         require(['plugins/vue_rack', 'vue'], function(rack, Vue){\n             var vm = new Vue({\n                 el: '#envrack-{{ rackid }}',\n                 data: {\n                     rack: null\n                 },\n                 components: {\n                     'my-rack': rack\n                 },\n                 methods: {\n                     loadRack: function () {\n                         var self = this;\n                         $.getJSON('{% url 'api:1:rack-detail' rackid %}', function (data) {\n                             self.rack = data;\n                         });\n                     }\n                 },\n                 mounted: function () {\n                     this.loadRack();\n                 }\n             });\n         });\n\n     })();\n    </script>\n\n  {% else %}\n    <p class=\"alert-box\">Configure the widget to add a rack</p>\n  {% endif %}\n\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/error_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <div class=\"panel\">\n\n    <p>\n      This is a replacement for a widget that has been removed from NAV. To\n      avoid\n      headscratching and the dangers that follows, we wanted to inform you\n      about\n      this change.\n    </p>\n\n    <p>\n      You can now delete this widget.\n    </p>\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/feedreader_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n    {% csrf_token %}\n\n    <div class=\"row\">\n      <div class=\"medium-8 column\">\n        <label for=\"feedreader_blog_url\">\n          URL to feed\n          <input id=\"feedreader_blog_url\" type=\"text\" name=\"blogurl\"\n                 placeholder=\"URL\" value=\"{{ blogurl|default_if_none:'' }}\">\n        </label>\n      </div>\n\n      <div class=\"medium-4 column\">\n        <label for=\"max_posts\">\n          Maximum posts\n          <input id=\"max_posts\" type=\"number\" name=\"maxposts\" min=\"1\"\n                 value=\"{{ maxposts|default:'5' }}\">\n        </label>\n      </div>\n\n    </div>\n    <input type=\"submit\" class=\"button small\" value=\"Save\">\n  </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/feedreader_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if feed %}\n    <h4>\n      <a href=\"{{ feed.feed.link }}\" title=\"Link to blog\">{{ feed.feed.title }}</a>\n    </h4>\n    <ul>\n      {% for entry in feed.maxentries %}\n        <li>\n          <a href=\"{{ entry.link }}\" title=\"Read this entry\">{{ entry.title }}</a>\n        </li>\n      {% endfor %}\n    </ul>\n  {% else %}\n    <p>Edit widget to add a blog url</p>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/getting_started_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <p>\n    Welcome to NAV. You have excellent taste in network management utilities.\n  </p>\n\n  <div class=\"row\">\n    {% if request.user.is_admin %}\n      <div class=\"column medium-6\">\n        <button id=\"getting-started-wizard\" class=\"button small full-width\">\n          Take the 30 second tour\n        </button>\n      </div>\n      <div class=\"column medium-6\">\n        <a href=\"{% url 'seeddb-netbox-edit' %}?guide=true\"\n           class=\"button small secondary full-width\">\n          Take me to the setup guide\n        </a>\n      </div>\n    {% else %}\n      <div class=\"column small-12\">\n        <button id=\"getting-started-wizard\" class=\"button small full-width\">\n          Take the 30 second tour\n        </button>\n      </div>\n    {% endif %}\n  </div>\n\n  <img src=\"{{ STATIC_URL }}images/navlets/nav-tour.svg\"\n       class=\"full-width\"\n       alt=\"NAV tour\">\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/graph_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n\n    {% include 'custom_crispy_templates/_form_content.html' %}\n\n    <input type=\"submit\" value=\"Save changes\" class=\"button small\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/graph_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if graph_url %}\n    <div id=\"graph-container-{{ navlet.navlet_id }}\" class=\"graphitegraph\" data-image-reload></div>\n    &nbsp;\n    <script>\n     try {\n         require(['plugins/graphfetcher'], function(Fetcher) {\n             new Fetcher($('#graph-container-{{ navlet.navlet_id }}'), '{{ graph_url|safe }}', {\n                 hideAddGraphButton: true,\n                 hideTimeIntervalButtons: {{ hide_buttons }},\n                 linkTarget: '{{ navlet.preferences.target }}'\n             });\n         });\n     } catch (e) {\n         console.error(e);\n     }\n    </script>\n  {% else %}\n    <span class=\"alert-box\">Edit the widget to add a graph.</span>\n  {% endif %}\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/linklist_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n    <div class=\"row\">\n        <div class=\"large-6 columns\">\n\n            <ul class=\"clean\">\n                {% for title,link in nav_links.items %}\n                    {% if forloop.counter <= half %}\n                        <li><a href=\"{{ link }}\">{{ title }}</a></li>\n                    {% endif %}\n\n                {% endfor %}\n            </ul>\n\n        </div>\n        <div class=\"large-6 columns\">\n\n            <ul class=\"clean\">\n                {% for title,link in nav_links.items %}\n                    {% if forloop.counter > half %}\n                        <li><a href=\"{{ link }}\">{{ title }}</a></li>\n                    {% endif %}\n\n                {% endfor %}\n            </ul>\n\n        </div>\n    </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/machinetracker_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n    <form action=\"{% url 'get-user-navlet' navlet.navlet_id %}\" method=\"post\">\n        {% csrf_token %}\n        <div class=\"row collapse\">\n            <div class=\"large-9 column\">\n                <input type=\"text\" name=\"from_ip\" placeholder=\"IP or MAC-address\">\n            </div>\n            <div class=\"large-3 column\">\n                <input type=\"submit\" value=\"Search\" class=\"button postfix\">\n            </div>\n        </div>\n    </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/messages_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n\n      {% if current_messages %}\n\n        {% for m in current_messages %}\n          <div class=\"panel\">\n            <h6>\n              <a href=\"{% url 'messages-view' m.id %}\">{{ m.title }}</a>\n            </h6>\n            <div class=\"message-card-content\">\n              <p>{{ m.description }}</p>\n            </div>\n            <div class=\"message-card-footer\">\n              <span class=\"message-card-publish\">\n                {{ m.publish_start }}\n              </span>\n              <span class=\"message-card-tasks\">\n                Tasks: {{ m.maintenance_tasks.all|length }}\n              </span>\n            </div>\n          </div>\n        {% endfor %}\n\n      {% else %}\n        <p>No messages</p>\n      {% endif %}\n\n    </div>\n  </div>\n{% endblock navlet-content %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/navblog_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n      {% if feed %}\n        <ul>\n          {% for entry in feed.maxentries %}\n            <li>\n              <a href=\"{{ entry.link }}\"\n                 title=\"Read this entry\">{{ entry.title }}</a>\n            </li>\n          {% endfor %}\n        </ul>\n      {% else %}\n        <p>Edit widget to add a blog url</p>\n      {% endif %}\n    </div>\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/pdu_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n    {% csrf_token %}\n    {{ form }}\n    <input type=\"submit\" class=\"button tiny\" value=\"Save\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/pdu_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if room %}\n\n    <div class=\"alert-box alert\" style=\"display: none\"></div>\n\n    <table class=\"pdu-load-status listtable\"\n           data-limits=\"{{ navlet.preferences.limits }}\" >\n      <caption>PDU load in {{ room }}</caption>\n      <thead>\n        <tr>\n          <th>&nbsp;</th>\n          <th>Total</th>\n          <th>Bank 1</th>\n          <th>Bank 2</th>\n        </tr>\n      </thead>\n      <tbody>\n        {% for pdu in pdus %}\n          <tr>\n            <td>\n              <a href=\"{{ pdu.get_absolute_url }}\">{{ pdu }}</a>\n            </td>\n            {% for sensor in pdu.sensors.all %}\n              <td data-metric=\"{{ sensor.get_metric_name }}\"></td>\n            {% endfor %}\n          </tr>\n        {% endfor %}\n      </tbody>\n    </table>\n    <small class=\"alert-update-timestamp right\">Last update: <span></span></small>\n\n    <script>\n\n\n     require(['plugins/navlet_pdu'], function(Pdu) {\n         new Pdu($('[data-id=' + {{ navlet.navlet_id }}+ ']'),\n                 '{{ data_url|safe }}',\n                 {{ metrics|safe }}\n         );\n     });\n    </script>\n\n  {% else %}\n      {% if doesnotexist %}\n          <div class=\"alert-box error\">\n              The room <q>{{ doesnotexist }}</q> no longer exists.\n              <a href=\"#\" class=\"configure-link\">Choose a new room</a> to show pdu status for.\n          </div>\n      {% else %}\n        <div class=\"alert-box\">\n          <a href=\"#\" class=\"configure-link\">Choose which room</a> to show pdu status for\n        </div>\n      {% endif %}\n    <script>\n     (function(){\n         const $navlet = $('[data-id=\"{{ navlet.navlet_id }}\"]');\n         $navlet.find('.configure-link').click(function(e) {\n             e.preventDefault();\n             const $switch = $navlet.find('.navlet-mode-switch')[0];\n             if ($switch) {\n                 htmx.trigger($switch, 'click');\n             }\n         });\n     })();\n    </script>\n\n\n  {% endif %}\n\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/portadmin_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/report_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n    {% csrf_token %}\n    <label>\n      Choose report\n      <select name=\"report_id\">\n        <option value=\"\">---</option>\n        {% for report in report_list %}\n          <option value=\"{{ report.id }}\"\n                  {% if current_report_id == report.id %}selected{% endif %}>\n            {{ report.title }}\n          </option>\n        {% endfor %}\n      </select>\n    </label>\n    <label>\n      Query string\n      <input type=\"text\" name=\"query_string\" value=\"{{ query_string|default:'' }}\">\n    </label>\n    <input type=\"submit\" class=\"button small\" value=\"Show this report\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/report_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if report %}\n    {% include 'report/frag_report_table.html' %}\n  {% else %}\n    <p class=\"alert-box alert-info\">Edit the widget to choose a report.</p>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/room_location_status_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    id=\"navlet-form-{{ navlet.navlet_id }}\"\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n    hx-preserve=\"true\"\n  >\n    {% include 'custom_crispy_templates/_form_content.html' %}\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/room_location_status_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if items %}\n\n    <div class=\"accordion\">\n      {% for item in items %}\n        <h3 data-itemid=\"{{ item.pk }}\">\n          {{ item }}\n          <small class=\"label radius alert\"\n                 title=\"{{ item.alerts|length }} alerts in {{ item.pk }}\">\n            {{ item.alerts|length }}\n          </small>\n        </h3>\n        <div>\n          <a href=\"{% url history_route item.pk %}\"\n             title=\"Go to device history for this {{name}}\">Alerts</a>\n          in\n          <a href=\"{% url info_route item.pk %}\"\n             title=\"Go to {{name}} info for this {{name}}\">{{ item.pk }}</a>\n\n          <ul>\n            {% for alert in item.alerts %}\n              <li>\n                {{ alert.start_time }} &ndash;\n                <a href=\"{% url 'event-details' alert.pk %}\"\n                   title=\"See alert details\">\n                  {{ alert.sms_message.message }}\n                </a>\n              </li>\n            {% endfor %}\n          </ul>\n        </div>\n      {% endfor %}\n    </div>\n\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui.css\">\n    <script>\n      require(['jquery-ui'], function () {\n        var $navlet = $('[data-id={{ navlet.navlet_id }}]');\n\n        $navlet.find('.accordion').accordion({\n          active: getActiveHeaderIndex(),\n          collapsible: true,\n          heightStyle: 'content',\n          activate: function (event, ui) {\n            if (ui.newHeader.data('itemid')) {\n                $navlet.attr('data-active-header', ui.newHeader.data('itemid'));\n            } else {\n                $navlet.removeAttr('data-active-header');\n            }\n          }\n        });\n\n        function getActiveHeaderIndex() {\n            const activeHeader = $navlet.attr('data-active-header');\n            if (activeHeader) {\n                const headers = $navlet.find('.accordion h3').toArray();\n                const index = headers.findIndex(\n                    el => String($(el).data('itemid')) === String(activeHeader)\n                );\n                return index >= 0 ? index : false;\n            }\n            return false;\n        }\n\n      });\n    </script>\n\n\n  {% else %}\n    <div class=\"alert-box success with-icon\">No alerts in any {{name_plural}}</div>\n  {% endif %}\n\n  <small class=\"right\">\n    Last update: <span class=\"last-update\">{{ last_update }}</span>\n  </small>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/room_map_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n  {% if can_edit_rooms %}\n    <a href=\"{% url 'seeddb-room' %}\">Add position to your rooms</a>\n  {% endif %}\n\n  <div class=\"mapwrapper\">\n    <div id=\"room_map\" class=\"navletmap\"></div>\n  </div>\n\n  {% include 'custom_crispy_templates/flat_form.html' with form=searchform disable_csrf=True %}\n\n{% endblock navlet-content %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/sensor_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n{% load thresholds %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n    class=\"panel\"\n  >\n    {% csrf_token %}\n    <label>\n      {{ form.show_graph }}\n      {{ form.show_graph.label }}\n    </label>\n    <input type=\"submit\" class=\"button small\" value=\"Save preferences\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/sensor_view.html",
    "content": "{% extends 'navlets/base.html' %}\n{% load thresholds %}\n\n{% block navlet-content %}\n\n  {% if sensor %}\n\n    <div class=\"room-sensor\"\n         data-url=\"{{ sensor.get_graph_url }}\"\n         data-unit=\"{{ sensor.unit_of_measurement }}\"\n         data-sensorid=\"{{ sensor.id }}\"\n         data-sensorname=\"{{ sensor.human_readable }}\"\n         data-thresholds=\"{{ sensor.get_metric_name|find_thresholds }}\"\n         data-show-graph=\"{{ navlet.preferences.show_graph }}\"\n         data-display-range=\"{{ sensor.get_display_range }}\"\n         >\n    </div>\n\n  {% else %}\n    <span class=\"alert-box\">\n      Sensor is missing. The sensor or the device in which it was located might\n      have been deleted.\n    </span>\n  {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/status2_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    id=\"navlet-form-{{ navlet.navlet_id }}\"\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n    hx-preserve=\"true\"\n  >\n    {% include 'custom_crispy_templates/_form_content.html' %}\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/status2_view.html",
    "content": "{% extends 'navlets/base.html' %}\n{% load info %}\n\n{% block navlet-content %}\n  {% if results %}\n\n    <table class=\"listtable status2table expand\">\n      <caption>\n        <a href=\"{% url 'status2-index' %}\" title=\"Go to the status page\">Status now</a>\n        <span class=\"last-updated pull-right\">{{ last_updated }}</span>\n      </caption>\n      <thead>\n        <tr>\n          <th>Subject</th>\n          <th>Type</th>\n          <th>Start time</th>\n          {% for key, value in extra_columns %}\n            <th>{{ value }}</th>\n          {% endfor %}\n        </tr>\n      </thead>\n\n      <tbody>\n        {% for result in results %}\n          <tr>\n            <td>\n              {% if result.subject_url %}\n                {# check for interface #}\n                {% if result.subject_type == 'Interface' %}\n                  <div class=\"nav-tooltip\" data-position=\"fixed\">\n                    <a\n                        href=\"{{ result.subject_url }}\"\n                        hx-get=\"{% url 'api:1:interface-detail' result.subid %}\"\n                        hx-headers='{\"Accept\": \"text/x-nav-html\"}'\n                        hx-trigger=\"mouseenter once\"\n                        hx-target=\"#interface-tooltip-{{ result.id }}\"\n                        hx-swap=\"innerHTML\"\n                        class=\"unstyled-tooltip\"\n                        aria-describedby=\"#interface-tooltip-{{ result.id }}\"\n                    >\n                        {{ result.subject }}\n                    </a>\n                    <span id=\"interface-tooltip-{{ result.id }}\" role=\"tooltip\">\n                    </span>\n                  </div>\n                {% else %}\n                  <a href=\"{{ result.subject_url }}\">{{ result.subject }}</a>\n                {% endif %}\n              {% else %}\n                {{ result.subject }}\n              {% endif %}\n              {% if result.on_maintenance %}<i class=\"fa fa-wrench\" title=\"On maintenance\"></i>{% endif %}\n              {% if result.acknowledgement %}<i class=\"fa fa-check-circle-o\" title=\"Acknowledged\"></i>{% endif %}\n            </td>\n            <td>\n              <a href=\"{{ result.event_details_url }}\" title=\"See event details\">\n                {{ result.alert_type.name }}\n              </a>\n            </td>\n            <td class=\"alerttime\">\n              {{ result.formatted_time }}\n              {% if not result.end_time %}<i class=\"fa fa-warning\" title=\"Stateless\" style=\"color: #FF8F00\"></i>{% endif %}\n            </td>\n              {% for key, value in extra_columns %}\n                <td>\n                    {% with result.netbox_object|get_attr:key as column %}\n                        {% if column.get_absolute_url %}\n                            <a href=\"{{ column.get_absolute_url }}\">{{ column }}</a>\n                        {% else %}\n                            {{ column }}\n                        {% endif %}\n                    {% endwith %}\n                </td>\n              {% endfor %}\n          </tr>\n        {% endfor %}\n\n      </tbody>\n\n    </table>\n\n  {% else %}\n    <div class=\"alert-box success\">\n      According to your criteria, everything seems ok\n    </div>\n\n    <div class=\"status2-widget-footer\">\n      <a href=\"{% url 'status2-index' %}\" title=\"Go to the status page\">Go to the status page</a>\n      <small class=\"last-updated\">Last updated: {{ last_updated }}</small>\n    </div>\n\n  {% endif %}\n\n  <script>\n  (function () {\n    const navletid = \"{{ navlet.account_navlet.pk }}\";\n    const navletElement = document.querySelector(`.navlet[data-id=\"${navletid}\"]`);\n    if (typeof globalThis.initializeTooltips === 'function') {\n      globalThis.initializeTooltips(navletElement);\n    }\n  })()\n  </script>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/status_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n    <form\n        hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n        hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n        hx-swap=\"innerHTML\"\n    >\n        {% csrf_token %}\n        <label for=\"status_refresh_interval\">\n            Refresh interval (in seconds)\n            <input id=\"status_refresh_interval\" type=\"text\" name=\"interval\" value=\"{{ interval }}\">\n        </label>\n        <input type=\"submit\" class=\"button small\" value=\"Set interval\">\n    </form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/status_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n    {% if boxes_down %}\n        <table class=\"listtable expand table-hover\">\n\n            <caption>\n                <a href=\"{% url 'status-index' %}\">Status now</a>\n                &ndash;\n                <span class=\"subtitle\">\n                            {{ boxes_down|length }} IP device{{ boxes_down|pluralize }} down,\n                            of these {{ num_shadow }} are in shadow\n                </span>\n            </caption>\n\n            <thead>\n            <tr>\n                <th>Sysname</th>\n                <th class=\"hide-for-medium-down\">IP</th>\n                <th>Downtime</th>\n            </tr>\n            </thead>\n\n            <tbody>\n            {% for b in boxes_down %}\n                <tr>\n                    <td>\n                        <a href=\"{% url 'ipdevinfo-details-by-name' b.netbox.sysname %}\">\n                            {{ b.netbox.sysname }}</a></td>\n                    <td class=\"hide-for-medium-down\">{{ b.netbox.ip }}</td>\n                    <td>{{ b.start_time|timesince:date_now }}</td>\n                </tr>\n            {% endfor %}\n            </tbody>\n        </table>\n\n        {% if problems %}\n          <p class=\"alert-box alert\">\n            There are also {{ problems }} other problems.\n            <a href=\"{% url 'status-index' %}\">See the full list.</a>\n          </p>\n        {% endif %}\n    {% else %}\n        <p class=\"alert-box success\">No IP-devices down</p>\n        {% if problems %}\n          <p class=\"alert-box alert\">\n            However there are {{ problems }} other problems.\n            <a href=\"{% url 'status-index' %}\">See the full list.</a>\n          </p>\n        {% endif %}\n    {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/ups_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  <form\n    hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n    hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n    hx-swap=\"innerHTML\"\n  >\n    {% csrf_token %}\n    {{ form }}\n    <input type=\"submit\" class=\"button tiny\" value=\"Save\">\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/ups_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% if netbox %}\n\n    <h4>\n      <a href=\"{{ netbox.get_absolute_url }}\">{{ netbox }}</a>\n      {% if navlet.preferences.external_link %}\n        (<a rel=\"nofollow\" href=\"{{ navlet.preferences.external_link }}\">external link</a>)\n      {% endif %}\n    </h4>\n\n    {# IO display #}\n\n    <div class=\"io-display\">\n\n      <div class=\"left-wrapper\">\n\n        {# Input node #}\n        <div class=\"input node panel\">\n\n          <h5>Input</h5>\n\n          {% for input_voltage in input_voltages  %}\n            <div class=\"ups-voltage-indicator\">\n              <span>L{{ forloop.counter }}:</span>\n              <span data-metric=\"{{ input_voltage.get_metric_name }}\"></span>\n              {{ input_voltage.unit_of_measurement }}\n            </div>\n          {% endfor %}\n\n        </div>\n\n\n        {# Vertical line #}\n        <div class=\"vertical line\">\n          <div class=\"left-box\"></div>\n          <div class=\"middle-box\"><i class=\"fa fa-arrow-down\"></i></div>\n          <div class=\"right-box\"></div>\n        </div>\n\n\n        {# Output node #}\n        <div class=\"node output panel\">\n          <h5>Output</h5>\n\n          {% for output_voltage, output_power in output  %}\n            <div class=\"ups-voltage-indicator\">\n              <span>L{{ forloop.counter }}:</span>\n              <span data-metric=\"{{ output_voltage.get_metric_name }}\"></span>\n              {{ output_voltage.unit_of_measurement }}\n              {% if output_power %}\n                <span data-metric=\"{{ output_power.get_metric_name }}\"></span>\n                {{ output_power.unit_of_measurement }}\n              {% endif %}\n            </div>\n          {% endfor %}\n\n        </div>\n\n      </div>  {# Wrapper #}\n\n      <div class=\"horizontal line\">\n        <i class=\"fa fa-arrows-h\"></i>\n      </div>\n\n      {# Battery node #}\n      <div class=\"battery-wrapper\">\n        <div class=\"battery node panel\">\n          <h5>Battery&nbsp;&nbsp;<i class=\"fa fa-flash\"></i></h5>\n\n          {% for temp in temperatures  %}\n            <div>\n              <span title=\"Battery or internal temperature\">Temp ({{ temp.unit_of_measurement }}):</span>\n              <span data-metric=\"{{ temp.get_metric_name }}\"></span>\n            </div>\n          {% endfor %}\n\n          {% for battery_time in battery_times %}\n            <div>\n              <span title=\"Estimated battery time remaining\">\n                Time (<span class=\"unit-of-measurement\">{{ battery_time.unit_of_measurement }}</span>):\n              </span>\n              <span data-metric=\"{{ battery_time.get_metric_name }}\"\n                    data-uom=\"{{ battery_time.unit_of_measurement }}\"></span>\n            </div>\n          {% endfor %}\n\n          {% for capacity in battery_capacity %}\n            <div>\n              <span title=\"Estimated battery capacity left\">\n                Capacity:\n              </span>\n              <span data-metric=\"{{ capacity.get_metric_name }}\"></span>\n              %\n            </div>\n          {% endfor %}\n        </div>\n      </div>\n\n\n    </div> {# .io-display #}\n    <small class=\"right\">Last update: <span class=\"update-time\"></span></small>\n\n\n    <script>\n     require(['plugins/navlet_ups'], function(Poller){\n         new Poller($('[data-id={{ navlet.navlet_id }}]'));\n     });\n    </script>\n\n  {% else %}\n\n      {% if doesnotexist %}\n          <div class=\"alert-box error\">\n              The configured UPS <em>(netboxid={{ doesnotexist }})</em> has been deleted from NAV. Please edit the\n              widget to configure a new UPS, or delete this widget from your dashboard.\n          </div>\n      {% else %}\n          <div class=\"alert-box info\">Edit the widget to add UPS</div>\n      {% endif %}\n\n  {% endif %}\n\n\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/vlangraph_edit.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n    <form\n        hx-post=\"{% url 'get-user-navlet' navlet.navlet_id %}\"\n        hx-target=\"[data-id='{{ navlet.navlet_id }}']\"\n        hx-swap=\"innerHTML\"\n        class=\"custom\"\n    >\n        {% csrf_token %}\n        <input type=\"hidden\" name=\"id\" value=\"{{ navlet.navlet_id }}\">\n        <select name=\"vlanid\">\n            <option value=\"-1\">---Select vlan---</option>\n           {% for vlan in vlans %}\n               <option value=\"{{ vlan.id }}\" {% if vlan.id == vlanid %}selected{% endif %}>\n                   {{ vlan.vlan }} - {{ vlan.net_ident }} - {{ vlan.description }}\n               </option>\n           {% endfor %}\n        </select>\n\n        <input type=\"submit\" value=\"Save\" class=\"button small\">\n    </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/vlangraph_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n    {% if graph_url %}\n        <img src=\"{{ graph_url }}\" alt=\"Graph for vlan\" data-image-reload>\n    {% else %}\n        <p>Edit the widget and add a Vlan to graph for.</p>\n    {% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/watchdog_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n\n  {% include 'watchdog/frag_tests.html' %}\n\n  <a href=\"{% url 'watchdog-index' %}\" class=\"right\">\n    <img src=\"{{ STATIC_URL }}images/icons/watchdog_black.svg\" width=\"24\"/>\n  </a>\n  <a href=\"{% url 'watchdog-index' %}\">See full overview</a>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navlets/welcome_view.html",
    "content": "{% extends 'navlets/base.html' %}\n\n{% block navlet-content %}\n  <section>\n    {{ welcome|safe }}\n  </section>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/navurls.html",
    "content": "<script>\n var NAV = {\n     'cssPath': '{{ STATIC_URL }}css/nav',\n     'imagePath': '{{ STATIC_URL }}images',\n     'osmTileUrl': \"https://b.tile.openstreetmap.org\",\n     'addGraphWidgetUrl': \"{% url 'add-user-navlet-graph' %}\",\n     'graphiteRenderUrl': \"{% url 'graphite-render' %}\",\n     urls: {\n         refresh_session: \"{% url 'refresh-session' %}\",\n         api_netbox_list: \"{% url 'api:1:netbox-list' %}\",\n         api_interface_list: \"{% url 'api:1:interface-list' %}\",\n         api_room_list: \"{% url 'api:1:room-list' %}\",\n         api_prefix_usage_list: \"{% url 'api:1:prefix-usage-list' %}\",\n         status2_api_alerthistory: \"{% url 'api:1:alert-list' %}\",\n         set_account_preference: \"{% url 'set-account-preference' %}\",\n         room_info_base: \"{% url 'room-search' %}\",\n     },\n     setTitle: function(title) {\n         document.title = \"NAV - \" + title;\n     }\n };\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/neighbors/base.html",
    "content": "{% extends 'base.html' %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/neighbors.css\">\n  <script>\n   require(['src/neighbors']);\n   NAV.urls.neighbors = {\n       \"neighbors_set_state\": \"{% url 'neighbors-set-state' %}\"\n   }\n  </script>\n{% endblock %}\n\n\n{% block base_content %}\n\n  {# Heading #}\n  <div class=\"row\">\n    <div class=\"small-12 columns\">\n      {% with tool=current_user_data.tools|get_tool:'Unrecognized Neighbors' %}\n        {% include 'nav_header.html' %}\n      {% endwith %}\n    </div>\n  </div>\n\n<form method=\"POST\">\n    {% csrf_token %}\n  <div>\n    <ul id=\"action-buttons\" class=\"button-group\">\n      <li>\n        <button id=\"ignore-selected\" class=\"tiny\" type=\"button\">Ignore selected</button>\n      </li>\n      <li>\n        <button id=\"unignore-selected\" class=\"tiny\" type=\"button\">Unignore selected</button>\n      </li>\n    </ul>\n\n    <span id=\"ignored-feedback\" class=\"alert-box inside-table\">Test</span>\n\n  </div>\n\n  <div>\n    <label style=\"display: inline\">\n      <input id=\"toggle-ignored\" type=\"checkbox\">\n      Show ignored neighbors\n    </label>\n  </div>\n\n  {# Unrecognized neighbors #}\n  <table id=\"unrecognized-neighbors-table\" class=\"listtable hover\">\n    <thead>\n      <tr>\n        <th><input id=\"select_all\" type=\"checkbox\"></th>\n        <th>Remote ID</th>\n        <th>Remote Name</th>\n        <th>Seen on interface</th>\n        <th>Source</th>\n        <th>First seen</th>\n        <th>\n          Ignored since\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      {% include 'neighbors/frag-tbody.html' %}\n    </tbody>\n  </table>\n</form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/neighbors/frag-tbody.html",
    "content": "{# Fragment for loading of neighbors #}\n{% for neighbor in neighbors %}\n  <tr data-ignored=\"{{ neighbor.ignored_since|yesno:'true,false' }}\">\n\n    <td>\n      <input type=\"checkbox\" value=\"{{ neighbor.pk }}\" />\n    </td>\n\n    <td class=\"has-add-button\">\n      <span>{{ neighbor.remote_id }}</span>\n      {% if neighbor.remote_id %}\n        <a href=\"{% url 'seeddb-netbox-add-suggestion' neighbor.remote_id|urlencode %}\"\n           title=\"Add unrecognized neighbor to NAV\">\n          <span class=\"fa fa-plus-square\"></span>\n        </a>\n      {% endif %}\n    </td>\n\n    <td class=\"has-add-button\">\n      <span>{{ neighbor.remote_name }}</span>\n      {% if neighbor.remote_name %}\n        <a href=\"{% url 'seeddb-netbox-add-suggestion' neighbor.remote_name|urlencode %}\"\n           title=\"Add unrecognized neighbor to NAV\">\n          <span class=\"fa fa-plus-square\"></span>\n        </a>\n      {% endif %}\n    </td>\n\n    <td>\n      <a href=\"{{ neighbor.interface.get_absolute_url }}\">{{ neighbor.interface }}</a>\n    </td>\n\n    <td>{{ neighbor.source }}</td>\n\n    <td>{{ neighbor.since }}</td>\n\n    <td class=\"ignored-since\"> {{ neighbor.ignored_since|default:'' }} </td>\n\n  </tr>\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/netmap/admin.html",
    "content": "{% extends \"base.html\" %}\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/netmap.css\" media=\"screen\" />\n{% endblock %}\n{% block base_content %}\n\n  <div id=\"netmap-admin\">\n\n    <table id=\"netmap-admin-list\" class=\"listtable full-width\">\n      <caption>Available Netmap views</caption>\n      <thead>\n      <tr>\n        <td colspan=\"6\">Choosing a private view to be a default view,\n          will convert the view to public!\n        </td>\n      </tr>\n      <tr>\n        <th>Title</th>\n        <th>Description</th>\n        <th>Topology</th>\n        <th>Is public?</th>\n        <th>Owner</th>\n        <th>Action</th>\n      </tr>\n\n      </thead>\n      <tbody>\n\n      {% for view in views %}\n\n        <tr id=\"netmap-view-{{ view.pk }}\" {% if global_default_view.view.pk == view.pk %}class=\"current-global-default\"{% endif %}>\n          <td>{{view.title}}</td>\n          <td>{% if view.description %}{{view.description}}{% else %}N/A{% endif %}</td>\n          <td>{{view.topology_unicode}}</td>\n          <td class=\"visibility\">{{view.is_public}}</td>\n          <td>{{view.owner}}</td>\n          <td>\n            <a class=\"button tiny set-global-default\" data-viewid=\"{{ view.viewid }}\">Set global default</a>\n          </td>\n        </tr>\n      {% endfor %}\n      </tbody>\n    </table>\n  </div>\n  <script type=\"text/javascript\">\n   require(['datatables', 'dt_config'], function(){\n       var dt_config = {\n           bAutoWidth: false,\n           bFilter: false,\n           bInfo: false,\n           bLengthChange: false,\n           bPaginate: false,\n           bSort: true\n       };\n\n       $('table#netmap-admin-list').DataTable(dt_config);\n\n       $('.set-global-default').click(function (e) {\n           e.preventDefault();\n           var viewid = $(e.currentTarget).data('viewid');\n\n           $.ajax({\n               type: 'PUT',\n               url: '{% url 'netmap-defaultview-global' %}',\n               data: {view: viewid, owner: 0}\n           })\n            .done(function () {\n                $('.current-global-default', '#netmap-admin-list').removeClass('current-global-default');\n                $('#netmap-view-' + viewid, '#netmap-admin-list').addClass('current-global-default');\n                $('.visibility', '#netmap-view-' + viewid).html('True');\n            })\n            .fail(function (e) {\n                console.log(e.responseText);\n            });\n       });\n   })\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/netmap/netmap.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/netmap.css\"  />\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui.css\"  />\n    <script>require([\"src/netmap/netmap\"]);</script>\n{% endblock %}\n\n{% block base_content %}\n\n<div class=\"row\">\n  <div class=\"small-12 columns\">\n    {% with tool=current_user_data.tools|get_tool:'Netmap' %}\n      {% include 'nav_header.html' %}\n    {% endwith %}\n  </div>\n</div>\n\n<div id=\"navigation-view\">\n  <form id=\"netmap-view-create-form\" style=\"display: none\">\n    {% csrf_token %}\n    <input type=\"text\" name=\"viewname\" placeholder=\"View name\" required>\n    <textarea name=\"viewdescription\" placeholder=\"View description\"></textarea>\n    <label><input type=\"checkbox\" name=\"public\" checked>Public</label>\n    <input type=\"submit\" class=\"button small\" value=\"Save\">\n  </form>\n\n  {% comment %} jQuery UI is kinda stupid (or maybe we are), so we need two forms {% endcomment %}\n  <form id=\"netmap-view-edit-form\" style=\"display: none\">\n    {% csrf_token %}\n    <input type=\"text\" name=\"viewname\" placeholder=\"View name\" required>\n    <textarea name=\"viewdescription\" placeholder=\"View description\"></textarea>\n    <label><input type=\"checkbox\" name=\"public\" checked>Public</label>\n    <input type=\"submit\" class=\"button small\" value=\"Save\">\n  </form>\n\n  <form id=\"netmap-view-delete-form\" style=\"display: none\">\n    {% csrf_token %}\n  </form>\n\n  <form id=\"netmap-view-settings-form\" style=\"display: none\">\n    {% csrf_token %}\n  </form>\n\n  <div id=\"graph-navigation\" class=\"row\">\n\n    {# The top action row with search, view menu and options toggler #}\n    <div class=\"medium-6 columns\">\n      <form id=\"graph-search-form\">\n        <div class=\"row collapse\">\n\n          <div class=\"medium-8 columns\">\n            <input id=\"graph-search-input\" type=\"text\" placeholder=\"Search graph\">\n          </div>\n          <div class=\"medium-2 columns\">\n            <input id=\"graph-search-submit\" class=\"postfix button\" type=\"submit\" value=\"Search\">\n          </div>\n          <div class=\"medium-2 columns\">\n            <input id=\"graph-search-reset\" class=\"postfix button\" type=\"reset\" value=\"Reset\">\n          </div>\n        </div>\n      </form>\n    </div>\n\n    <div class=\"medium-4 columns\">\n      <div class=\"row collapse\">\n        <div class=\"medium-2 columns\">\n          <span class=\"prefix\">View</span>\n        </div>\n        <div class=\"medium-10 columns\">\n          <select id=\"graph-view-select\">\n            {% for view in netmap_views %}\n              <option id=\"{{ view.pk }}\" value=\"{{ view.pk }}\">\n                {{ view.title }} ({{ view.owner }})\n              </option>\n            {% endfor %}\n          </select>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"medium-2 columns\">\n      <a id=\"netmap-view-panel-toggle\" class=\"expand button secondary small\">\n        View options\n        <i class=\"fa fa-caret-down\"></i>\n      </a>\n    </div>\n\n  </div>\n\n  {# The netmap view panel that contains settings and view configurability #}\n  <div class=\"row\">\n    <div id=\"netmap-view-panel\" class=\"medium-12 columns hidden\">\n      <div class=\"panel\">\n        <div class=\"row\" data-equalizer>\n\n          {# Left panel #}\n          <div class=\"large-3 columns\">\n            <div class=\"panel white\" data-equalizer-watch>\n              <h5>Create and edit views</h5>\n              <a id=\"netmap-view-create\"\n                 class=\"expand button secondary small\">Create new view\n              </a>\n\n              <a id=\"netmap-view-default\"\n                 class=\"expand button secondary small\">Set as default view\n              </a>\n\n              <a id=\"netmap-view-edit\"\n                 class=\"expand button secondary small\">Edit view\n              </a>\n\n              <a id=\"netmap-view-delete\"\n                 class=\"expand button alert small\">Delete view\n              </a>\n\n              {% if account.is_admin %}\n                <p>\n                  <a href=\"{% url 'netmap-admin' %}\" title=\"Go to Netmap admin page\">Manage saved views</a>\n                </p>\n              {% endif %}\n\n              <div id=\"netmap-left-alert-container\"></div>\n\n\n            </div> {# .panel.white #}\n          </div> {# .columns #}\n\n          {# Middle panel #}\n          <div class=\"large-6 columns\">\n            <div class=\"panel white\" data-equalizer-watch>\n              <h5>View settings</h5>\n              <div class=\"row\">\n\n                {# Column for filter categories #}\n                <div class=\"medium-6 columns\">\n                  <ul id=\"filter-category-list\" class=\"no-bullet\">\n                    {% for category in categories %}\n                      <li>\n                        <label for=\"filter-{{ category }}\">\n                          <input type=\"checkbox\" id=\"filter-{{ category }}\" class=\"filter-category\" value=\"{{ category }}\">\n                          {{ category }}\n                        </label>\n                      </li>\n                    {% endfor %}\n                  </ul>\n\n                  <label for=\"filter-orphan-nodes\" class=\"right\">\n                    Display isolated nodes\n                    <input type=\"checkbox\" id=\"filter-orphan-nodes\">\n                  </label>\n                </div> {# .column #}\n\n                {# Column for layer switcher and room/location filter #}\n                <div class=\"medium-6 columns\">\n                  <label>\n                    Layer\n                    <select id=\"graph-layer-select\">\n                      <option value=\"2\">2</option>\n                      <option value=\"3\">3</option>\n                    </select>\n                  </label>\n\n                  <form id=\"filter-room-location-form\">\n                    <div class=\"row collapse\">\n                      <div class=\"medium-9 columns\">\n                        <input type=\"text\" placeholder=\"Filter by room or location\">\n                      </div>\n                      <div class=\"medium-3 columns\">\n                        <input class=\"postfix button\" type=\"submit\" value=\"Filter\">\n                      </div>\n                    </div>\n                  </form>\n\n                  <div id=\"filter-labels\"></div>\n                </div> {# .column #}\n              </div> {# .row inside white panel #}\n\n              <hr>\n\n              <a id=\"netmap-view-save\"\n                 class=\"button small\">Save view settings\n              </a>\n              <div id=\"netmap-middle-alert-container\" style=\"display: inline-block\"></div>\n\n            </div> {# .panel.white #}\n          </div> {# .column #}\n\n          {# Right panel #}\n          <div class=\"large-3 columns\">\n            <div class=\"panel white\" data-equalizer-watch>\n              <h5>Misc</h5>\n              <ul class=\"button-group\">\n                <li><a id=\"netmap-view-fix-nodes\" class=\"button tiny\"\n                       title=\"Freeze the position of all nodes\">Fix all nodes</a></li>\n                <li><a id=\"netmap-view-unfix-nodes\" class=\"button tiny\"\n                        title=\"Makes all nodes move freely\">Unfix all nodes</a></li>\n                <li><a id=\"netmap-view-zoom-to-extent\" class=\"button tiny\"\n                       title=\"Zoom so that all nodes are in the view\">Zoom to fit</a></li>\n                <li><a id=\"netmap-view-reset-transparency\" class=\"button tiny\"\n                       title=\"When nodes have been faded out, this button will fade them in again.\">Reset view</a></li>\n                <li><a id=\"netmap-view-toggle-force\" class=\"button tiny\" data-status=\"off\"\n                      title=\"Start the movement of the nodes\">Start animation <i class=\"fa fa-stop\"></i></a></li>\n              </ul>\n\n              <form id=\"refresh-interval\">\n                <h6>Refresh interval</h6>\n                <label><input name=\"refresh-interval-value\" type=\"radio\" value=\"-1\" checked>Off</label>\n                <label><input name=\"refresh-interval-value\" type=\"radio\" value=\"2\">2 min</label>\n                <label><input name=\"refresh-interval-value\" type=\"radio\" value=\"10\">10 min</label>\n                <label><input type=\"checkbox\" value=\"traffic\">Traffic only</label>\n                <div id=\"refresh-counter\"></div>\n              </form>\n            </div> {# .panel.white #}\n          </div> {# .column #}\n\n\n        </div>\n      </div>\n    </div>\n  </div>\n\n</div>\n\n<div class=\"row\">\n\n  <div id=\"graph\" class=\"large-12 columns\">\n    <div id=\"graph-info-view\"></div>\n    <div id=\"graph-view\"></div>\n  </div>\n\n</div>\n\n<div class=\"row\">\n  <div class=\"large-12 columns\">\n\n    <table id=\"traffic-gradient\">\n      <thead>\n        <tr>\n          {% for _ in traffic_gradient %}\n            <th>\n              {% if forloop.first %}\n                0%\n              {% elif forloop.counter|divisibleby:'10' %}\n                {{ forloop.counter }}%\n              {% endif %}\n            </th>\n          {% endfor %}\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          {% for rgb in traffic_gradient %}\n            <td class=\"traffic-rgb\" style=\"background: rgb({{ rgb.r }}, {{ rgb.g }}, {{ rgb.b }})\"></td>\n          {% endfor %}\n        </tr>\n      </tbody>\n    </table>\n  </div>\n</div>\n\n<script type=\"text/javascript\">\n\n    window.netmapData = {\n        staticURL: '{{ STATIC_URL }}images/netmap/',\n        userID: {{ account.pk }},\n        userLogin: '{{ account.login }}',\n        admin: {% if account.is_admin %}true{% else %}false{% endif %},\n        views: {{ netmap_views_json|safe }},\n        defaultView: {{ default_view|default_if_none:'null' }},\n        roomsAndLocations: {{ rooms_locations|safe }}\n    };\n\n</script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/networkexplorer/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/networkexplorer.css\">\n  <script>require(['src/networkexplorer']);</script>\n{% endblock %}\n\n{% block base_header_title %}NAV - Network explorer{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Network Explorer' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n    <div class=\"row\">\n      <div id=\"notify_area\" class=\"large-12 columns\">\n\n      </div>\n    </div>\n\n  {% block content %}\n    <form action=\"\" method=\"get\" class=\"foundation-form\" id=\"search-form\">\n      <fieldset>\n        <div class=\"medium-5 columns\">\n          <div class=\"row collapse\">\n            {{ form.query }}\n          </div>\n        </div>\n\n        <div class=\"medium-5 columns\">\n          <div class=\"row\">\n            <div class=\"small-2 columns text-right\">\n              {{ form.exact_results }}\n            </div>\n            <div class=\"small-10 columns\">\n              <label for=\"id_exact_results\">\n                {{ form.exact_results.label }}\n              </label>\n            </div>\n          </div>\n          <div class=\"row\">\n            <div class=\"small-2 columns text-right\">\n              {{ form.hide_ports }}\n            </div>\n            <div class=\"small-10 columns\">\n              <label for=\"id_hide_ports\">\n                {{ form.hide_ports.label }}\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"medium-2 columns\">\n          <input class=\"small button\" type=\"submit\" value=\"Search\">\n        </div>\n      </fieldset>\n    </form>\n\n    {# The network tree is a bootstrap app that goes here #}\n    <div id=\"networktree\" class=\"panel white\"></div>\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/networkexplorer/expand_gwport.html",
    "content": "{% if vlans.0 %}\n<dl>\n<dt>Connected swports:</dt>\n{% for vlan in vlans %}\n<dd id=\"swport-{{ vlan.interface.id }}\">\n{% if vlan.interface.has_children %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/expand.gif\" onclick=\"openNode(this);\" class=\"expand\"/>\n{% else %}\n\t{% if forloop.last %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n\t{% else %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n\t{% endif %}\n{% endif %}\n<a href=\"{% url 'ipdevinfo-details-by-name' vlan.interface.netbox.sysname %}\">{{ vlan.swport.module.netbox.sysname }}</a> [{{ vlan.interface.ifname }}]\n{% if vlan.interface.connected_to_switch %}\n  {% if vlan.interface.to_netbox %}\n    {% if vlan.interface.trunk %}\n      <abbr title=\"trunk port\">⇉</abbr>\n    {% else %}\n      <abbr title=\"non-trunk port\">→</abbr>\n    {% endif %}\n    <a name=\"switch-{{ vlan.interface.to_netbox.id }}-{{vlan.vlan.id}}\" href=\"{% url 'ipdevinfo-details-by-name' vlan.interface.to_netbox.sysname %}\" target=\"_blank\">{{ vlan.interface.to_netbox }}</a>\n  {% else %}\n    {% if vlan.interface.to_interface %}\n        {% if vlan.interface.trunk %}\n\t  <abbr title=\"trunk port\">⇉</abbr>\n\t{% else %}\n\t  <abbr title=\"non-trunk port\">→</abbr>\n\t{% endif %}\n\t  <a name=\"switch-{{ vlan.interface.to_interface.netbox.id }}-{{vlan.vlan.id}}\" href=\"{% url 'ipdevinfo-details-by-name' vlan.interface.to_interface.netbox.sysname %}\" target=\"_blank\">{{ vlan.interface.to_interface.netbox }}</a> [{{vlan.interface.to_interface.ifname}}]\n    {% else %}\n        ({{ vlan.interface.ifalias }})\n        {% if vlan.interface.trunk %}\n\t  <abbr title=\"trunk port\">(trunk)</abbr>\n\t{% endif %}\n    {% endif %}\n  {% endif %}\n{% else %}\n  {% if vlan.interface.to_netbox %}\n    {% if vlan.interface.trunk %}\n      <abbr title=\"trunk port\">⇉</abbr>\n    {% else %}\n      <abbr title=\"non-trunk port\">→</abbr>\n    {% endif %}\n    <a href=\"{% url 'ipdevinfo-details-by-name' vlan.interface.to_netbox.sysname %}\" target=\"_blank\">{{ vlan.interface.to_netbox }}</a>\n  {% else %}\n    {% if vlan.interface.to_interface %}\n        {% if vlan.interface.trunk %}\n\t  <abbr title=\"trunk port\">⇉</abbr>\n\t{% else %}\n\t  <abbr title=\"non-trunk port\">→</abbr>\n\t{% endif %}\n\t<a href=\"{% url 'ipdevinfo-details-by-name' vlan.interface.to_interface.netbox.sysname %}\" target=\"_blank\">{{ vlan.interface.to_interface.netbox }}</a>\n\t[{{ vlan.interface.to_interface.ifname }}]\n    {% else %}\n        ({{ vlan.interface.ifalias }})\n        {% if vlan.interface.trunk %}\n\t  <abbr title=\"trunk port\">(trunk)</abbr>\n\t{% endif %}\n    {% endif %}\n  {% endif %}\n{% endif %}\n</dd>\n{% endfor %}\n</dl>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/networkexplorer/expand_router.html",
    "content": "<dl class=\"gwports\">\n<dt>Router ports:</dt>\n{% for gwport in ports %}\n{% if gwport %}\n    <dd id=\"gwport-{{ gwport.id }}\">\n        {% if gwport.has_children %}\n\t        <img src=\"{{ STATIC_URL }}images/networkexplorer/expand.gif\" onclick=\"openNode(this);\" class=\"tree-navigator\"/>\n        {% else %}\n\t\t{% if forloop.last %}\n   \t\t\t<img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n\t\t{% else %}\n\t\t\t<img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n\t\t{% endif %}\n        {% endif %}\n        <a href=\"{{ gwport.get_absolute_url }}\" target=\"_blank\">{{ gwport.ifname }}</a>\n        {% if gwport.to_netbox %}\n            {% if gwport.to_interface.trunk %} <abbr title=\"trunk port\">⇉</abbr> {% else %} <abbr title=\"non-trunk port\">→</abbr> {% endif %}\n             {{ gwport.to_netbox.sysname }}\n        {% endif %}\n\t{% with gwport.prefixes|dictsort:\"display_addr\" as prefix_list %}\n\t{% if prefix_list %}\n        <dl>\n\t\t\t<dt class=\"prefix\">Prefixes:</dt>\n\t\t        {% for prefix in prefix_list %}\n\t        \t<dd class=\"prefix\">\n{% if forloop.last %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n{% else %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n{% endif %}\n\t\t\t\t({{ prefix.display_addr }}, {{prefix.prefix.vlan.net_type}}, {{prefix.prefix.vlan.net_ident}})\n\t\t\t</dd>\n\t\t        {% endfor %}\n        </dl>\n\t{% endif %}\n\t{% endwith %}\n    </dd>\n{% endif %}\n{% endfor %}\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/networkexplorer/expand_switch.html",
    "content": "{% if swportvlans.0 %}\n<dl>\n<dt>Swports on Vlan{{ swportvlans.0.vlan.vlan }} on {{ swportvlans.0.interface.netbox }}</dt>\n{% for swportvlan in swportvlans %}\n<dd id=\"swport-{{ swportvlan.interface.id }}\">\n{% if swportvlan.interface.has_children %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/expand.gif\" onclick=\"openNode(this);\" class=\"expand\"/>\n{% else %}\n{% if forloop.last %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n{% else %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n{% endif %}\n{% endif %}\n<a target=\"_blank\" href=\"{% url 'ipdevinfo-details-by-name' swportvlan.interface.netbox.sysname %}\">{{ swportvlan.interface.netbox.sysname }}</a>\n[{{ swportvlan.interface.ifname }}]\n\n{% if swportvlan.interface.ifalias %}\n({{ swportvlan.interface.ifalias }})\n{% endif %}\n\n{% if swportvlan.interface.to_netbox %}\n    {% if swportvlan.interface.trunk %}\n      <abbr title=\"trunk port\">⇉</abbr>\n    {% else %}\n      <abbr title=\"non-trunk port\">→</abbr>\n    {% endif %}\n    <a target=\"_blank\" href=\"{% url 'ipdevinfo-details-by-name' swportvlan.interface.to_netbox.sysname %}\">{{ swportvlan.interface.to_netbox }}</a>\n{% else %}\n    {% if swportvlan.interface.to_interface %}\n        {% if swportvlan.interface.trunk %}\n\t  <abbr title=\"trunk port\">⇉</abbr>\n\t{% else %}\n\t  <abbr title=\"non-trunk port\">→</abbr>\n\t{% endif %}\n\t<a target=\"_blank\" href=\"{% url 'ipdevinfo-details-by-name' swportvlan.interface.to_interface.netbox.sysname %}\">{{ swportvlan.interface.to_interface.netbox }}</a>\n    {% else %}\n        ({{ swportvlan.interface.ifalias }})\n    \t{% if swportvlan.interface.trunk %}\n      \t<abbr title=\"trunk port\">(trunk)</abbr>\n    \t{% endif %}\n    {% endif %}\n{% endif %}\n</dd>\n{% endfor %}\n</dl>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/networkexplorer/expand_swport.html",
    "content": "<dl>\n    {% for service in services %}\n    {% if forloop.first %}\n    <dt class=\"swport_tree\">Services</dt>\n    {% endif %}\n    <dd>\n{% if forloop.last %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n{% else %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n{% endif %}\n    {{ service.handler }} - Status: {{ service.get_up_display }}</dd>\n    {% endfor %}\n\n    {% for host in active_hosts %}\n    {% if forloop.first %}\n    <dt class=\"swport_tree\">Active hosts behind port</dt>\n    {% endif %}\n    <dd>\n{% if forloop.last %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/end.gif\">\n{% else %}\n   <img src=\"{{ STATIC_URL }}images/networkexplorer/vertical-bound.gif\">\n{% endif %}\n        {{ host|safe }}\n    </dd>\n    {% endfor %}\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/_feedback_modal.html",
    "content": "<h5>Executing configuration changes</h5>\n<ul></ul>\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/_messages.html",
    "content": "<div id=\"portadmin-messages\"{% if hx_swap_oob %} hx-swap-oob=\"true\"{% endif %}>\n    {% if messages %}\n        {% for message in messages %}\n            <div class=\"alert-box {{ message.tags }}\">\n                {{ message }}\n            </div>\n        {% endfor %}\n    {% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/portadmin.css\"/>\n  <script>require(['src/portadmin']);</script>\n{% endblock %}\n\n{% block base_content %}\n\n  <template id=\"portadmin-feedback-template\">\n    {% include 'modals/_nav_modal.html' with modal_id='portadmin-feedback-modal' content_template='portadmin/_feedback_modal.html' modal_size='small' show_close_button=False close_on_outside_click=False %}\n  </template>\n\n  {% with tool=current_user_data.tools|get_tool:'Port Admin' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% include 'portadmin/_messages.html' %}\n\n  {% block page_content %}\n\n    {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n\n    {% block content %}\n      {% if form.is_bound %}\n        <div class=\"row\">\n          <div class=\"medium-5 column\">\n            <h5>IP Devices</h5>\n            <ul>\n              {% for netbox in netboxes %}\n                <li>\n                  <a href=\"{% url 'portadmin-sysname' netbox.sysname %}\">\n                    {{ netbox.sysname }}\n                  </a>\n                </li>\n              {% empty %}\n                <li>No ip devices found</li>\n              {% endfor %}\n            </ul>\n          </div>\n\n          <div class=\"medium-7 column\">\n            <h5>Interfaces</h5>\n            <ul>\n              {% for interface in interfaces %}\n                <li>\n                  <a href=\"{% url 'portadmin-interface' interface.id %}\">\n                    {{ interface.netbox }} - {{ interface.ifname }}\n                    - {{ interface.ifalias }}\n                  </a>\n                </li>\n              {% empty %}\n                <li>No interfaces found</li>\n              {% endfor %}\n            </ul>\n          </div>\n        </div>\n      {% endif %}\n    {% endblock content %}\n\n  {% endblock page_content %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/netbox.html",
    "content": "{% extends \"portadmin/base.html\" %}\n\n{% block content %}\n\n  {% if request.user.is_admin %}\n    <h4 class=\"latest-changes-heading\" style=\"display: inline-block; cursor: pointer\">\n      Latest changes <i class=\"fa fa-caret-square-o-right\"></i>\n    </h4>\n    <div class=\"latest-changes-content row\" style=\"display: none\">\n      <div class=\"small-12 column\">\n        {% include \"auditlog/_logentry_list.html\" %}\n      </div>\n    </div>\n    <script>\n     require(['datatables'], function(){\n         $('.latest-changes-heading').click(function(){\n             $('.latest-changes-content').slideToggle();\n             $('.latest-changes-heading i').toggleClass('fa-caret-square-o-right fa-caret-square-o-down');\n         });\n     });\n    </script>\n  {% endif %}\n\n  {% if interfaces %}\n\n    <div class=\"row\">\n\n      <div class=\"small-12 column\">\n          <div id=\"port-details\">\n            {% if loading %}\n            <div\n                 hx-get=\"{{ load_data_url }}\"\n                 hx-trigger=\"load\"\n                 hx-target=\"#port-details\"\n                 hx-swap=\"innerHTML\">\n                {% include 'portadmin/portlist.html' %}\n            </div>\n            {% else %}\n                {% include 'portadmin/portlist.html' %}\n            {% endif %}\n          </div>\n      </div>\n\n{% comment %}\n      <div class=\"medium-4 column\">\n\n        <div class=\"panel\">\n          <p>\n            Available vlans\n            for {{ account.login }}@{{ netbox.get_short_sysname }}\n          </p>\n\n          <ul>\n            {% for vlan in allowed_vlans %}\n              <li>{{ vlan }}</li>\n            {% endfor %}\n          </ul>\n        </div>\n\n      </div>\n{% endcomment %}\n    </div>\n\n  {% endif %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/portlist.html",
    "content": "{% load portadmin %}\n\n\n{{ aliastemplate }}\n\n{% if messages %}\n{% include 'portadmin/_messages.html' with hx_swap_oob=True %}\n{% endif %}\n\n<div id=\"portadmin-wrapper\" class=\"faketable{% if loading %} loading{% endif %}\">\n  <div class=\"caption\">\n    <a href=\"{{ netbox.get_absolute_url }}\"\n       title=\"Go to Ip Device Info for {{ netbox }}\">\n      {{ netbox.get_short_sysname }}\n    </a>\n    {% if handlertype %}({{ handlertype }}){% endif %}\n    {% if loading %}\n    <div class=\"loading-indicator right\">\n        <span>\n            <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"Loading spinner\" />\n        </span>\n        Loading live data from device\n    </div>\n    {% endif %}\n  </div>\n  <form id=\"save-changes-form\" style=\"display: none;\">\n    {% csrf_token %}\n  </form>\n  <div class=\"row header_row\">\n    <div class=\"hide-for-small medium-2 column\">\n      Port\n    </div>\n    <div class=\"hide-for-small medium-1 column\">\n      Enabled\n    </div>\n    <div class=\"hide-for-small medium-1 column\">\n      Linked\n    </div>\n    <div class=\"hide-for-small {% if readonly or supports_poe %}medium-3{% else %}medium-4{% endif %} column\">\n      Port description\n    </div>\n    <div class=\"hide-for-small medium-2 column\">\n      Vlan\n    </div>\n    {% if readonly %}\n        <div class=\"hide-for-small medium-2 column\"></div>\n    {% endif %}\n    {% if voice_vlan %}\n      <div class=\"hide-for-small medium-1 column \">\n        Tel\n      </div>\n    {% endif %}\n    {% if supports_poe %}\n      <div class=\"hide-for-small medium-1 column\">\n        PoE State\n      </div>\n    {% endif %}\n    {% if not readonly %}\n      <div class=\"column {% if voice_vlan %}medium-1{% else %}medium-2{% endif %} text-right\">\n        <input type=\"button\" class=\"saveall_button button tiny\" value=\"Save all\"/>\n      </div>\n    {% endif %}\n  </div>\n\n\n  {% for interface in interfaces %}\n    <div id=\"{{ interface.id }}\" class=\"row port_row\">\n\n      {# Interface name #}\n      <div class=\"medium-2 small-12 column\">\n        <span class=\"left hide-for-medium-up\">Port&nbsp;</span>\n        <div title=\"{{ interface.ifname }}\" class=\"long-content port-name\">\n            <a href=\"{{ interface.get_absolute_url }}\" title=\"Click to see details of {{ interface.ifname }}\">{{ interface.ifname }}</a></div>\n      </div>\n\n      {# Status indicators / ifadminstatus checkbox #}\n      <div class=\"medium-1 small-6 column portadmin-status\">\n        <span class=\"left hide-for-medium-up\">Enabled&nbsp;</span>\n        {% if interface.detained %}\n          <a href=\"{% url 'arnold-detainedports' %}\">\n            <img src=\"{{ STATIC_URL }}images/toolbox/arnold.png\" width=\"24\" height=\"24\" title=\"Detained in Arnold\">\n          </a>\n        {% else %}\n          <input type=\"checkbox\" class=\"ifadminstatus\" data-orig=\"{{ interface.ifadminstatus }}\"\n                 {% if interface.ifadminstatus == 1 %}checked{% endif %}\n                 {% if not interface.iseditable %}disabled{% endif %}\n          >\n        {% endif %}\n      </div>\n      <div class=\"medium-1 small-6 column portadmin-status\">\n        <span class=\"left hide-for-medium-up\">Linked&nbsp;</span>\n        <img title=\"OperStatus - If red there is no link on the interface\"\n             src=\"{{ STATIC_URL }}images/lys/{{ interface.ifoperstatus|drawLight }}\"\n        />\n      </div>\n\n      {# Port Description - input field #}\n      <div class=\"{% if readonly or supports_poe %}medium-3{% else %}medium-4{% endif %} column\">\n        {% if interface.iseditable and not readonly %}\n          <input class=\"ifalias\" type=\"text\"\n                 value=\"{{ interface.ifalias|default_if_none:'' }}\"\n                 data-orig=\"{{ interface.ifalias|default_if_none:'' }}\"/>\n        {% else %}\n          <div class=\"long-content\">{{ interface.ifalias|default:'&nbsp;' }}</div>\n        {% endif %}\n      </div>\n\n      {# Vlan / Trunk #}\n      <div class=\"medium-2 small-4 column\">\n        {% if interface.dot1xenabled %}\n          {% if interface.dot1x_external_url %}\n            <a class=\"button tiny\" href=\"{{ interface.dot1x_external_url }}\">Dot1x</a>\n          {% else %}\n            Dot1x\n          {% endif %}\n        {% else %}\n          {% if interface.trunk and not interface.voice_activated %}\n            {% if trunk_edit and interface.iseditable %}\n              <a href=\"{% url 'portadmin-render-trunk-edit' interface.id %}\">\n                Trunk\n              </a>\n            {% else %}\n              Trunk\n            {% endif %}\n          {% else %}\n            {% if interface.iseditable and not readonly %}\n              {% if interface.detained %}\n                {{ interface.vlan|default_if_none:'' }}\n                <a href=\"{% url 'arnold-detainedports' %}\">\n                  <img src=\"{{ STATIC_URL }}images/toolbox/arnold.png\" width=\"24\" height=\"24\" title=\"Detained in Arnold\">\n                </a>\n              {% else %}\n                <form class=\"custom\">\n                  {% csrf_token %}\n                  <select class=\"vlanlist\" name=\"{{ interface.ifname }}\">\n                    {% for vlan in allowed_vlans %}\n                      {% if not interface.voice_activated or vlan.vlan != voice_vlan %}\n                        <option value=\"{{ vlan.vlan }}\"\n                                {% if interface.vlan == vlan.vlan %}selected=\"selected\"\n                                data-orig=\"{{ vlan.vlan }}\"{% endif %}>\n                          {{ vlan }}\n                        </option>\n                      {% endif %}\n                    {% endfor %}\n                    {% if interface.dot1x_external_url %}\n                      <option value=\"trunk\" data-url=\"{{ interface.dot1x_external_url }}\">\n                        Dot1x\n                      </option>\n                    {% endif %}\n                    {% if trunk_edit %}\n                      <option value=\"trunk\"\n                              data-url=\"{% url 'portadmin-render-trunk-edit' interface.id %}\">\n                        Trunk\n                      </option>\n                    {% endif %}\n                  </select>\n                </form>\n              {% endif %}\n            {% else %}\n              {{ interface.vlan|default_if_none:'' }}\n            {% endif %}\n          {% endif %}\n        {% endif %}\n      </div>\n\n      {% if readonly %}\n        <div class=\"hide-for-small medium-2 column\"></div>\n      {% endif %}\n\n      {# Optional checkbox for voice vlan #}\n      {% if voice_vlan %}\n        <div class=\"small-4 medium-1 column\">\n          {% if interface.voice_activated or not interface.trunk %}\n            <span> {# This span is needed because of the hide-for-medium-up class on the child #}\n              <span class=\"hide-for-medium-up\">Tel:</span>\n              <input class=\"voicevlan\"\n                     type=\"checkbox\"\n                     name=\"voice_vlan\"\n                     data-orig=\"{{ interface.voice_activated|default:'false' }}\"\n                     {% if interface.voice_activated %}checked{% endif %}\n                     {% if readonly or not interface.iseditable %}disabled=\"disabled\"{% endif %}>\n            </span>\n          {% else %}\n            &nbsp;\n          {% endif %}\n        </div>\n      {% endif %}\n\n      {# POE STATE #}\n      {% if supports_poe %}\n        <div class=\"medium-1 small-4 column\">\n          {% if interface.supports_poe %}\n            <form class=\"custom\">\n              {% csrf_token %}\n              <select class=\"poelist\" name=\"{{ interface.ifname }}\">\n                {% for poe_option in poe_options %}\n                  <option value=\"{{ poe_option.name }}\" label=\"{{ poe_option.name }}\"\n                          {% if interface.poe_state.name == poe_option.name %}selected=\"selected\"\n                          data-orig=\"{{ poe_option.name }}\"{% endif %}>\n                {% endfor %}\n              </select>\n            </form>\n          {% endif %}\n        </div>\n      {% endif %}\n\n      {# Button for saving #}\n      {% if interface.iseditable and not readonly %}\n          <div class=\"{% if voice_vlan %}medium-1 small-4{% else %}medium-2 small-8{% endif %}  column text-right\">\n              <button class=\"tiny portadmin-save secondary\">Save</button>\n          </div>\n      {% endif %}\n\n      <div id=\"{{ interface.id }}-errors\" class=\"small-12 column error-column\"></div>\n\n    </div>\n\n  {% endfor %}\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/portadmin/trunk_edit.html",
    "content": "{% extends 'portadmin/base.html' %}\n\n{% block page_content %}\n\n  {% if interface and trunk_edit %}\n\n    <p>\n      <a href=\"{% url 'portadmin-sysname' interface.netbox.sysname %}\"\n         title=\"Go back\">\n        Back to {{ interface.netbox.sysname }}\n      </a>\n    </p>\n\n    <div>\n      <h3>Interface {{ interface }}</h3>\n\n      <form action=\"\" method=\"post\">\n        {% csrf_token %}\n        <table id=\"portadmin-trunktable\" class=\"listtable highlightover\">\n          <caption>Configure trunk</caption>\n          <thead>\n            <tr>\n              <th>Vlan</th>\n              <th>Description</th>\n              <th>Net Ident</th>\n              <th>Native</th>\n              <th>Trunked <input type=\"checkbox\" class=\"toggle-all\"/></th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {% for vlan in available_vlans %}\n              <tr data-vlan=\"{{ vlan.vlan }}\">\n                <td>{{ vlan.vlan }}</td>\n                <td>{{ vlan.descr|default_if_none:\"\" }}</td>\n                <td>{{ vlan.net_ident|default_if_none:\"\" }}</td>\n\n                {% comment %}\n                Users are only allowed to set vlans that is related to their organization.\n                We set the fields to disabled if they should not be able to change the.\n\n                As checkboxes and radio buttons does not provide their values to POST\n                requests when they are disabled, we need to provide a hidden field to submit the\n                values on the request.\n                {% endcomment %}\n\n                <td class=\"text-center\">\n                  {% if vlan in allowed_vlans %}\n                    <input type=\"radio\" name=\"native_vlan\" value=\"{{ vlan.vlan }}\" {% if vlan.vlan == native_vlan %}checked{% endif %}>\n                  {% else %}\n                    <input type=\"radio\"\n                           name=\"native_vlan\"\n                           value=\"{{ vlan.vlan }}\"\n                           {% if vlan.vlan == native_vlan %}checked{% endif %}\n                           disabled=\"disabled\">\n                    {% if vlan.vlan == native_vlan %}\n                      <input type=\"hidden\" name=\"native_vlan\" value=\"{{ vlan.vlan }}\">\n                    {% endif %}\n                  {% endif %}\n                </td>\n\n                {% comment %}Checkbox for tagging this vlan on this interface{% endcomment %}\n                <td class=\"text-center\">\n                  {% if vlan in allowed_vlans %}\n                    <input type=\"checkbox\" name=\"trunk_vlans\" value=\"{{ vlan.vlan }}\" {% if vlan.vlan in trunked_vlans %}checked{% endif %}>\n                  {% else %}\n                    <input type=\"checkbox\"\n                           name=\"trunk_vlans\"\n                           value=\"{{ vlan.vlan }}\"\n                           {% if vlan.vlan in trunked_vlans %}checked{% endif %}\n                           disabled=\"disabled\">\n                    {% if vlan.vlan in trunked_vlans %}\n                      <input type=\"hidden\" name=\"trunk_vlans\" value=\"{{ vlan.vlan }}\">\n                    {% endif %}\n                  {% endif %}\n                </td>\n              </tr>\n            {% endfor %}\n          </tbody>\n        </table>\n        <input type=\"submit\"\n               value=\"Save changes\"\n               class=\"button small\"\n               {% if readonly %}disabled=\"disabled\"{% endif %}>\n      </form>\n\n    </div>\n\n    <p>\n      <a href=\"{% url 'portadmin-sysname' interface.netbox.sysname %}\"\n         title=\"Go back\">\n        Back to {{ interface.netbox.sysname }}\n      </a>\n    </p>\n\n\n  {% else %}\n    {% if not trunk_edit %}\n      <div class=\"alert-box info\">Trunk editing is disabled</div>\n    {% else %}\n      <p class=\"error\">This interface does not exist</p>\n    {% endif %}\n  {% endif %}\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/_account_chart_hints_modal.html",
    "content": "<h3>About top talkers</h3>\n\n<blockquote>\"There are three types of lies - lies, damn lies, and\nstatistics.\" <cite>Mark Twain</cite>\n</blockquote>\n\n<p>\nShows data from sessions that have ended, with an explicit\n<code>Stop</code> message. Top talkers lists sessions using the <em>end\ntime</em> , but the data could actually have been transferred before\nthis period.\n</p>\n"
  },
  {
    "path": "python/nav/web/templates/radius/_account_log_hints_modal.html",
    "content": "<h3>Radius accounting search hints and information</h3>\n\n<h5>Slack</h5>\n\n<p>When choosing timestamp as time filter, the slack is the number of\n    minutes relative to the timestamp that will be used as interval. A\n    timestamp of 2011-03-16 08:57|2 will search between 2011-03-16 08:55 and\n    2011-03-16 08:59</p>\n\n<h5>Username</h5>\n\n<p>Username search allows wildcard searching, e.g. you can search for\n    <code>dat3*</code>. Please note that the more letters of the username you\n    include, the faster the search will be. A search for <code>*</code>, for\n    example, will probably be very slow.</p>\n\n<h5>Switch port</h5>\n\n<p>You can search for switch port on any particular switch by typing the\n    switch hostname/ip address followed by a colon and the name of the switch\n    port. Eg. switch.domain.com:FastEther0/2</p>\n\n<h5>Results</h5>\n\n<p>Some search results do not contain a timestamp in the Stop field. This\n    occurs when\n<ol>\n    <li>the session is still active, or</li>\n    <li>no explicit <code>Stop</code> message has been received by freeradius</li>\n</ol>\nYou will have to check the Duration field to see which one it is.</p>\n\n<h5>Session duration</h5>\n\n<p>Sometimes the displayed session duration does not equal the difference\n    between stop and start time. This occurs if the registered start time was\n    actually not an explicit Start message, but the first sign of life (an\n    Alive message) we got for this session. The Stop message always, as far\n    as I know, contain the length of the session, and so when we have a Stop\n    message this session length is being used during a search for a specific\n    time interval.</p>\n\n<h5>Transfer statistics</h5>\n\n<p>We only know the amount of data transferred for sessions where an\n    explicit Stop message has been received. Transfer statistics may\n    therefore be inaccurate because the numbers don't include currently\n    active sessions and because we have no way of making sure at which point\n    in the session the transfers took place. </p>\n"
  },
  {
    "path": "python/nav/web/templates/radius/_error_log_hints_modal.html",
    "content": "<h3>Radius log search hints and information</h3>\n\n<h5>Search string</h5>\n\n<p>The search string allows wildcards, e.g. you can search for\n  <code>dat3*</code> to search all usernames starting with <code>dat</code>.\n</p>\n\n<h5>Query fields</h5>\n\n<ul>\n  <li>Username - The user name a user is using for login</li>\n  <li>Client - Where the user is connecting.</li>\n  <li>Port - Search for a specific port</li>\n  <li>Message - Search the entire message. Remember to use the wildcard\n    characters if you're searching for a substring. To find all messages\n    that mention id 106, you can use the search string '*ID: 10</li>\n</ul>\n\n<h5>Log entry types</h5>\n\n<ul>\n  <li>All - All categories of logged information</li>\n  <li>Auth - Information relating to authentication</li>\n  <li>Error - Error messages regarding the radius server</li>\n  <li>Info - General information from the radius server</li>\n  <li>Proxy - Show proxy errors</li>\n</ul>\n\n<h5>Common messages explained</h5>\n\n<dl>\n  <dt>\"Login incorrect: [host/PEROTTO] (from client unis port 50010 cli 00-10-60-76-AA-4F)\"</dt>\n  <dd>The computer uses default values from Microsoft, and is therefore not\n    correctly set up for 802.1x. \"PEROTTO\" is in this case the computer\n    name. The \"host/\" part informs that this is host based authentication.\n  </dd>\n\n  <dt>\"Reply from home server 129.242.5.142:3001 - ID: 251 arrived too late\n    for request 674132. Try increasing 'retry_delay' or 'max_request_time'\"\n  </dt>\n  <dd>Time-to-live for a buffered request timed out: It took too long to\n    get an answer from the authentication server, or to finish a request.\n  </dd>\n\n  <dt>\"No outstanding request was found for proxy reply from home server\n    xxx.xxx.xxx.xxx:xxxx - ID xxx\"\n  </dt>\n  <dd>Also related to timeouts, shouldn't be anything to worry about.</dd>\n\n  <dt>\"Dropping conflicting packet from client clientname:1646 - ID: 15 due\n    to unfinished request 709815\"\n  </dt>\n  <dd>Harmless messages that occur when the NAS'es (switches) resends a\n    request before radius has replied to the previous request. Happens\n    because of its own timeout.\n  </dd>\n\n  <dt>\"Rejecting request 709815 due to lack of any response\n    from home server aasgardvn:1646\"</dt>\n  <dd>This message will usually follow, and be related to, the previous\n    message.\n  </dd>\n</dl>\n"
  },
  {
    "path": "python/nav/web/templates/radius/account_charts.html",
    "content": "{% extends \"radius/base.html\" %}\n{% load radius %}\n\n{% block content %}\n\n  <div class=\"row\">\n    <div class=\"small-9 column\">\n      <h4 class=\"subheader\">Show top 6 talkers</h4>\n    </div>\n    <div class=\"small-3 column\">\n      <button\n          class=\"button small secondary right\"\n          hx-get=\"{% url 'radius-account-chart-hints' %}\"\n          hx-target=\"body\"\n          hx-swap=\"beforeend\"\n      >\n          About the data\n      </button>\n    </div>\n  </div>\n\n  <div id=\"form\" class=\"row\">\n    <div class=\"medium-6 columns\">\n      {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n    </div>\n  </div>\n\n  <ul class=\"large-block-grid-2\">\n\n    {% for table in tables %}\n      <li>\n        <table id=\"charttable{{ forloop.counter }}\" class=\"listtable full-width\">\n          <caption>\n            {{ table.0 }}<br>\n          </caption>\n\n          <thead>\n          <tr>\n            <th>Pos.</th>\n            <th>Username</th>\n            <th>Transferred</th>\n            <th>Time</th>\n          </tr>\n          </thead>\n\n          <tbody>\n          {% for row in table.1 %}\n            <tr>\n              <td>{{ forloop.counter }}</td>\n              <td><a>{{ row.username|default:\"\" }}</a></td>\n              <td>{{ row.sortfield|filesizeformat }}</td>\n              <td>{{ row.acctsessiontime|time_from_seconds }}</td>\n            </tr>\n          {% endfor %}\n          </tbody>\n        </table>\n      </li>\n    {% endfor %}\n  </ul>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/account_log.html",
    "content": "{% extends \"radius/base.html\" %}\n\n{% load radius %}\n\n{% block content %}\n\n\n  <div class=\"row\">\n    <div class=\"medium-9 column\">\n      <h4 class=\"subheader\">Search in radius account logs</h4>\n    </div>\n    <div class=\"medium-3 column\">\n      <button\n         class=\"button small secondary right\"\n         hx-get=\"{% url 'radius-account-log-hints' %}\"\n         hx-target=\"body\"\n         hx-swap=\"beforeend\"\n      >\n          Search hints\n      </button>\n    </div>\n  </div>\n\n  <div id=\"forms\">\n    {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n  </div>\n\n  {% if form.is_bound %}\n\n    {% if result %}\n\n    <table id=\"resulttable\" class=\"listtable full-width\">\n        <thead data-nosort='[5, 6]'>\n          <tr>\n            <th class=\"header\">Username</th>\n            <th class=\"header\">Framed IP Address</th>\n            <th class=\"header\">NAS IP Address</th>\n            <th class=\"header\">Session start</th>\n            <th class=\"header\">Session stop</th>\n            <th>Duration</th>\n            <th>Info</th>\n          </tr>\n        </thead>\n\n        <tbody>\n          {% for row in result %}\n            <tr>\n              <td class=\"link\" data-filter=\"{{ row.username }}\">{{ row.username }}</td>\n              <td class=\"link\" data-filter=\"{{ row.framedipaddress }}\">\n                {{ row.framedipaddress|default:\"\" }}\n              </td>\n              <td class=\"link\" data-filter=\"{{ row.nasipaddress }}\">\n                {{ row.nasipaddress|default:\"\" }}\n              </td>\n              <td>{{ row.acctstarttime }}</td>\n              <td>{{ row.acctstoptime }}</td>\n              <td>{{ row.acctsessiontime|time_from_seconds }}</td>\n              <td>\n                <a\n                   hx-get=\"{% url 'radius-account_detail-modal' row.radacctid %}\"\n                   hx-target=\"body\"\n                   hx-swap=\"beforeend\"\n                   title=\"View all available information on this session\">\n                  Details\n                   </a>\n              </td>\n            </tr>\n          {% empty %}\n            <tr>\n              <td colspan=\"7\">No results found</td>\n            </tr>\n          {% endfor %}\n        </tbody>\n    </table>\n\n    <p>\n    <table class=\"vertitable\">\n      <caption>Search summary</caption>\n      <tr>\n        <th>Total online time:</th>\n        <td>{{ total_time|time_from_seconds }}</td>\n      </tr>\n      <tr>\n        <th>Total data sent:</th>\n        <td>{{ total_sent|filesizeformat }}</td>\n      </tr>\n      <tr>\n        <th>Total received data:</th>\n        <td>{{ total_received|filesizeformat }}</td>\n      </tr>\n      <tr>\n        <th>Total traffic:</th>\n        <td>{{ total_sent|add:total_received|filesizeformat }}</td>\n      </tr>\n    </table>\n    </p>\n\n    {% else %}\n      {% if not form.errors %}\n        <p class=\"alert-box\">No results</p>\n      {% endif %}\n    {% endif %}\n\n  {% endif %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <script>require([\"src/radius\"]);</script>\n  <style>\n   form .ctrlHolder ul {\n       list-style: none;\n       margin-left: 0;\n   }\n   \n   #resulttable_wrapper .ftable  {\n       display: table;\n       width: 100%;\n   }\n   #resulttable_wrapper .ftable > div {\n       display: table-cell;\n       width: 50%;\n   }\n   #resulttable_wrapper .ftable .info {\n       vertical-align: bottom;\n       margin-bottom: .3rem;\n   }\n   #resulttable_info { float: right; }\n   #resulttable_filter input { margin-bottom: .5rem; }\n  </style>\n{% endblock base_header_additional_head %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Radius' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {# Place helper div here to make modal come as high as possible #}\n  {% block radius-helper %}{% endblock %}\n\n  {% block page_content %}\n    <div class=\"tabs\">\n      <ul>\n        <li class=\"{{ acctsearch|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'radius-account_search' %}\">Account Log</a>\n        </li>\n        <li class=\"{{ logsearch|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'radius-log_search' %}\">Error Log</a>\n        </li>\n        <li class=\"{{ acctcharts|yesno:\"tabactive,\" }}\">\n          <a href=\"{% url 'radius-account_charts' %}\">Top talkers</a>\n        </li>\n      </ul>\n\n      <div class=\"tabcontent\">\n        {% block content %}\n        {% endblock content %}\n      </div>\n\n    </div>\n  {% endblock page_content %}\n\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/detail.html",
    "content": "{% extends 'radius/base.html' %}\n{% block page_content %}\n  <p><a href=\"{% url 'radius-index' %}\">To radius search</a></p>\n\n  {% include 'radius/details_table.html' %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/detail_modal.html",
    "content": "{% include 'radius/details_table.html' %}\n\n{% if result %}\n<a href=\"{{ reverse }}\">Link to details</a>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/details_table.html",
    "content": "{% if fields %}\n<table class=\"vertitable\">\n  <caption>Details</caption>\n  {% for desc, field in fields %}\n    <tr>\n      <th>\n        {{ desc }}\n      </th>\n      <td>\n        {{ field|default:\"\"|safe }}\n      </td>\n    </tr>\n  {% endfor %}\n</table>\n{% else %}\n<div class=\"alert-box alert\">\n    No details available.\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/radius/error_log.html",
    "content": "{% extends \"radius/base.html\" %}\n{% load report %}\n\n{% block content %}\n\n  <div class=\"row\">\n    <div class=\"small-9 column\">\n      <h4 class=\"subheader\">Search in radius error logs</h4>\n    </div>\n    <div class=\"small-3 column\">\n      <button\n         class=\"button small secondary right\"\n         hx-get=\"{% url 'radius-error-log-hints' %}\"\n         hx-target=\"body\"\n         hx-swap=\"beforeend\"\n      >\n          Search hints\n      </button>\n    </div>\n  </div>\n\n  <div id=\"forms\">\n    {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n  </div>\n\n  {% if form.is_bound %}\n    {% if result %}\n      <table id=\"resulttable\" class=\"listtable full-width\">\n        <thead data-nosort='[-1]'>\n          <tr>\n            {% for desc in field_desc %}\n              <th class=\"header\">{{ desc }}</th>\n            {% endfor %}\n              <th>Info</th>\n          </tr>\n        </thead>\n\n        <tbody>\n          {% for row in result %}\n            <tr>\n              {% for field in row %}\n                {% if not forloop.first %}\n                  <td>{{ field|safe }}</td>\n                {% endif %}\n              {% endfor %}\n               <td>\n                  <a hx-get=\"{% url 'radius-log_detail-modal' row.id %}\"\n                     hx-target=\"body\"\n                     hx-swap=\"beforeend\"\n                     title=\"View all available information on this session\">\n                    Details\n                     </a>\n                </td>\n            </tr>\n          {% empty %}\n            <tr>\n              <td>No results found</td>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n\n    {% else %}\n      {% if not form.errors %}\n        <p class=\"alert-box\">No result</p>\n      {% endif %}\n    {% endif %}\n  {% endif %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/report/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/report.css\"/>\n  <script>require([\"src/report\"]);</script>\n{% endblock base_header_additional_head %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Report' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% block content %}\n  {% endblock content %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/report/frag_matrix_index.html",
    "content": "<h3>Subnet Matrix</h3>\n\n{% if scopes %}\n\n\n  <p class=\"alert-box secondary\">\n    Select scope you want to see the subnet matrix for.\n  </p>\n\n\n  {% if scopes.ipv4 %}\n    <h4>IPv4</h4>\n    {% with prefixes=scopes.ipv4 %}\n      {% include 'report/frag_matrix_report_link.html' %}\n    {% endwith %}\n  {% endif %}\n\n\n  {% if scopes.ipv6 %}\n    <h4>IPv6</h4>\n    {% with prefixes=scopes.ipv6 %}\n      {% include 'report/frag_matrix_report_link.html' %}\n    {% endwith %}\n  {% endif %}\n\n\n  {% if scopes.private %}\n    <h4>Private</h4>\n    {% with prefixes=scopes.private %}\n      {% include 'report/frag_matrix_report_link.html' %}\n    {% endwith %}\n  {% endif %}\n\n\n{% else %}\n\n\n  <p class=\"alert-box secondary\">\n    The NAV-database does not contain any network scopes.\n    <a href=\"{% url 'seeddb-prefix-edit' %}\">Seed the database</a>\n    and return here to see the subnet matrix.\n  </p>\n\n\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/report/frag_matrix_report.html",
    "content": "{% load report %}\n\n<h3>Subnet matrix for {{ matrix.start_net.strCompressed }}</h3>\n\n<p class=\"panel\">\n  Showing utilization for subnets with masklengths\n  {{ matrix.start_net.prefixlen }} to\n  {{ matrix.end_net.prefixlen }}\n</p>\n\n{% with matrix.start_net.strNormal as link %}\n  {% if show_unused %}\n    <a href=\"{% url 'report-matrix-scope' link %}\" class=\"button small\">\n      Hide unused address rows\n    </a>\n  {% else %}\n    {% if ipv4 %}\n      <a href=\"{% url 'report-matrix-scope' link %}?show_unused_addresses=1\" class=\"button small\">\n        Show unused address rows\n      </a>\n    {% endif %}\n  {% endif %}\n{% endwith %}\n\n<div id=\"subnet-matrix-feedback\" class=\"alert-box warning with-icon hidden\"></div>\n\n<table id=\"subnet-matrix\"\n       data-family=\"{{ family }}\"\n       data-scope=\"{{ scope }}\"\n       class=\"full-width {% if ipv4 %}ipv4{% else %}ipv6{% endif %} \">\n  <thead>\n    <tr>\n      <th>\n        {{ matrix.start_net.prefixlen }} ... {{ sub }}\n      </th>\n\n      {% for heading in matrix.visible_column_headings %}\n        <th colspan=\"{{ matrix.heading_colspan }}\">{{ heading }}</th>\n      {% endfor %}\n\n    </tr>\n  </thead>\n\n  {% for node in matrix.nodes %}\n    <tr>\n      <td>\n        {{ node.net.strCompressed }}\n      </td>\n      <td colspan=\"8\">&nbsp;</td>\n    </tr>\n    {% for subnet in node.subnets %}\n      <tr>\n        {% for cell in subnet %}\n\n          {% if cell.is_empty %}\n            <td>&nbsp;</td>\n          {% else %}\n\n            {% if forloop.counter == 1 %}\n              {# First cell contains only the net address #}\n              <td>\n                {% if cell.link %}\n                  <a href=\"{{ cell.link.href }}\" title=\"{{ cell.link.title }}\">\n                    {{ cell.link.text }}\n                  </a>\n\n                {% else %}\n                  {{ cell.content }}\n                {% endif %}\n              </td>\n\n            {% else %}\n\n              <td colspan=\"{{ cell.colspan }}\"\n                  rowspan=\"{{ cell.rowspan }}\"\n                  class=\"has-data\"\n                  {% if cell.netaddr %}data-netaddr=\"{{ cell.netaddr }}\"{% endif %}\n                  {% if cell.dataurl %}data-url=\"{{ cell.dataurl }}\"{% endif %}\n              >\n                <div id=\"cell-tooltip-{{ cell.prefixid }}\" class=\"popover with-arrow\" data-side=\"bottom\">\n                    <span\n                        class=\"popover-trigger\"\n                        aria-haspopup=\"true\"\n                        data-popover-target=\"#cell-tooltip-{{ cell.prefixid }}\"\n                    >\n                        <i class=\"fa fa-info-circle\"></i>\n                        {# cell #}\n                        {% if cell.colspan not in hide_for %}\n                          {% if cell.link %}\n                            <a href=\"{{ cell.link.href }}\" title=\"{{ cell.link.title }}\">\n                              {{ cell.link.text }}\n                            </a>\n                          {% else %}\n                            {{ cell.content }}\n                          {% endif %}\n                        {% endif %}\n                    </span>\n                    {% if cell.netaddr %}\n                        <div class=\"popover-content\"></div>\n                    {% endif %}\n                </div>\n              </td>\n            {% endif %}\n          {% endif %}\n\n        {% empty %}\n          <td class=\"blank\" colspan=\"{{ matrix.num_columns|add:\"1\" }}\"></td>\n        {% endfor %}\n      </tr>\n    {% endfor %}\n  {% endfor %}\n\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/report/frag_matrix_report_link.html",
    "content": "{% load report %}\n\n<ul class=\"no-bullet\">\n  {% for scope in prefixes %}\n    <li>\n      <a href=\"{% url 'report-matrix-scope' scope.net_address %}\">\n        {{ scope.net_address }}\n      </a> &ndash;\n      {{ scope.vlan.description|default:\"<em>No description</em>\" }}\n    </li>\n  {% endfor %}\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/report/frag_report_filters.html",
    "content": "{% load report %}\n\n<form id=\"report_filters_form\" action=\"\" method=\"get\" class=\"custom\">\n\n  <a id=\"advToggle\" class=\"button small\">\n    {% if adv %}\n      Close report filters\n    {% else %}\n      Report filters\n    {% endif %}\n  </a>\n\n  <div class=\"row\">\n    <div id=\"advblock\" {% if not adv %}style=\"display: none;\"{% endif %} class=\"column small-12\">\n      <h5>Advanced Search</h5>\n\n      <div id=\"advforms\" class=\"column medium-6\">\n        <input id=\"adv\" type=\"hidden\" name=\"adv\" value=\"1\"/>\n\n        {% comment %} Wouldn't it be nice if we used Django model- and form objects for this instead? Just sayin'... {% endcomment %}\n\n        <table class=\"full-width\">\n          {% if report.form %}\n            {% for a in report.form %}\n              {% with a.raw as a_raw %}\n                {% with forloop.counter0 as counter %}\n                  <tr>\n                    <th>\n                      <label for=\"adv{{ counter }}\">{{ a.title }}</label>\n                    </th>\n\n                    <td>\n                      <input\n                              type=\"checkbox\"\n                              name=\"not_{{ a_raw }}\"\n                              id=\"not_adv{{ counter }}\"\n                              {% if a_raw in neg %}\n                              checked\n                              {% endif %}>\n                    </td>\n\n                    <td>\n                      <label for=\"not_adv{{ counter }}\">not</label>\n                    </td>\n\n                    <td>\n                      <select name=\"op_{{ a_raw }}\">\n                        {% for element in operatorlist %}\n                          <option\n                                  value=\"{{ element }}\"\n                                  {% if element in descriptions %}\n                                  title=\"{{ descriptions|get_item:element }}\"\n                                  {% endif %}\n                                  {% if element == operator|get_item:a_raw|default:\"\" %}\n                                  selected\n                                  {% endif %}>\n                            {{ operators|get_item:element|safe }}\n                          </option>\n                        {% endfor %}\n                      </select>\n                    </td>\n\n                    <td>\n                      <input\n                              type=\"text\"\n                              name=\"{{ a_raw }}\"\n                              id=\"adv{{ counter }}\"\n                              value=\"{{ contents|get_item:a_raw|default:\"\" }}\">\n                    </td>\n                  </tr>\n\n                {% endwith %}\n              {% endwith %}\n            {% endfor %}\n          {% endif %}\n\n        </table>\n        <input type=\"submit\" class=\"button small\" value=\"Filter\">\n\n        <div class=\"row\">\n          <div class=\"column small-12 medium-6\">\n            <label>\n              Export delimiter\n              <select name=\"export\">\n                {% for delim in delimiters %}\n                  <option value=\"{{ delim }}\">{{ delim }}</option>\n                {% endfor %}\n              </select>\n            </label>\n          </div>\n          <div class=\"column small-12 medium-6\">\n            <label>\n              &nbsp;\n              <button type=\"submit\" name=\"exportcsv\" value=\"1\" class=\"prefix\">Export CSV </button>\n            </label>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"column medium-6\">\n        <div class=\"panel\">\n          <h4>Operator usage</h4>\n\n          <dl class=\"no-bullet\">\n            <dt>=</dt>\n            <dd>\"equals\", enter <code>null</code> for empty string</dd>\n            <dt>~</dt>\n            <dd>case insensitive search, use * as wildcard</dd>\n            <dt>[:]</dt>\n            <dd>\"between\", takes two colon-separated arguments</dd>\n            <dt>(,,)</dt>\n            <dd>\"is one of\", takes a comma-separated list of any\n              size\n              as argument.\n            </dd>\n          </dl>\n\n          <p>&lt;, &gt;, &lt;= and &gt;= needs no explanation.</p>\n\n          <p>All these operators may be negated by clicking the checkbox labeled <em>not</em>.</p>\n        </div>\n      </div>\n\n    </div>\n  </div>\n  {# advblock #}\n\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/report/frag_report_table.html",
    "content": "{% load string_manipulation %}\n<div class=\"report-table-wrapper\">\n\n  <table class=\"listtable full-width\">\n\n    <caption>\n\n      {% if paginate %}\n\n        {# Pagination list #}\n        <ul class=\"pagination right\">\n          <li>\n            Page size:\n            <form id=\"reportPageSize\" style=\"display: inline-block\">\n              <label>\n                <select name=\"page_size\" style=\"padding: 0 0.5em; height: auto\">\n                  {% for page_size in page_sizes %}\n                    <option value=\"{{ page_size }}\"\n                            {% if page_size == page.paginator.per_page %}selected{% endif %}>\n                      {{ page_size }}\n                    </option>\n                  {% endfor %}\n                </select>\n              </label>\n            </form>\n          </li>\n\n          <li>\n            <small>Page {{ page.number }} of {{ page.paginator.num_pages }}</small>\n          </li>\n\n          <li>\n            <a href=\"?page_number=1&{{ query_string }}\">First</a>\n          </li>\n\n          {% if page.has_previous %}\n            <li class=\"arrow\">\n              <a href=\"?page_number={{ page.previous_page_number }}&{{ query_string }}\">&laquo;</a>\n            </li>\n          {% else %}\n            <li class=\"arrow unavailable\"><a>&laquo;</a></li>\n          {% endif %}\n\n\n          {% for page_number in current_page_range  %}\n            <li {% if page_number == page.number %}class=\"current\"{% endif %}>\n              <a href=\"?page_number={{ page_number }}&{{ query_string }}\">{{ page_number }}</a>\n            </li>\n          {% endfor %}\n\n\n          {% if page.has_next %}\n            <li class=\"arrow\">\n              <a href=\"?page_number={{ page.next_page_number }}&{{ query_string }}\">&raquo;</a>\n            </li>\n          {% else %}\n            <li class=\"arrow unavailable\"><a>&raquo;</a></li>\n          {% endif %}\n\n          <li>\n            <a href=\"?page_number={{ page.paginator.page_range|last }}&{{ query_string }}\">Last</a>\n          </li>\n\n        </ul>\n      {% endif %}\n\n      {{ report.title }}\n\n      {% if paginate %}\n        <small>({{ page.start_index }} - {{ page.end_index }} of {{ page.paginator.count }})</small>\n      {% endif %}\n\n    </caption>\n\n    {% if report.table.header.cells %}\n      <thead>\n        <tr>\n          {% for cell in report.table.header.cells %}\n            <th>\n              {% if cell.uri and add_sort_links %}\n                <a class=\"navbar\" href=\"{{ cell.uri }}\"\n                   title=\"{{ cell.explanation }}\">{{ cell.text }}</a>\n              {% else %}\n                <span class=\"navbar\" title=\"{{ cell.explanation }}\">{{ cell.text }}</span>\n              {% endif %}\n            </th>\n          {% endfor %}\n        </tr>\n      </thead>\n    {% endif %}\n\n    <tfoot>\n      {% if report.table.footer.cells %}\n        <tr class=\"tablesum\">\n          {% for cell in report.table.footer.cells %}\n            <th>{{ cell.sum }}</th>\n          {% endfor %}\n        </tr>\n      {% endif %}\n    </tfoot>\n\n    <tbody>\n      {% if page %}\n\n        {% for row in page %}\n          <tr>\n\n            {% for cell in row.cells %}\n              <td>\n\n                {% if cell.text and cell.uri %}\n                  <a href=\"{{ cell.uri }}\">{{ cell.text }}</a>\n                {% else %}\n                  {{ cell.text|deep_urlize|default:\"\"|safe }}\n                {% endif %}\n\n              </td>\n            {% endfor %}\n\n          </tr>\n        {% endfor %}\n\n      {% else %}\n        <tr>\n          <td>&nbsp;</td>\n        </tr>\n      {% endif %}\n    </tbody>\n  </table>\n\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/report/index.html",
    "content": "{% extends \"report/base.html\" %}\n\n{% block content %}\n\n  {{ index|safe }}\n\n{% endblock content %}"
  },
  {
    "path": "python/nav/web/templates/report/matrix.html",
    "content": "{% extends \"base.html\" %}\n\n{% block base_header_additional_head %}\n  <script>require([\"src/subnetmatrix\"]);</script>\n  <link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/subnet_matrix.css\" />\n{% endblock base_header_additional_head %}\n\n{% block base_content %}\n\n  {% if matrix %}\n    {% include 'report/frag_matrix_report.html' %}\n  {% else %}\n    {% include 'report/frag_matrix_index.html' %}\n  {% endif %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/report/report.html",
    "content": "{% extends \"report/base.html\" %}\n\n{% block content %}\n\n  <div id=\"add-report-widget-wrapper\" class=\"right\">\n    <span class=\"alert-box hidden\"></span>\n    <button class=\"small\"\n            data-report_url=\"{% url 'report-add-widget' %}\"\n            data-report_id=\"{{ report.report_id }}\"\n            data-report_qs=\"{{ query_string }}\">\n      Add this report as a widget\n    </button>\n  </div>\n\n  {% include 'report/frag_report_filters.html' %}\n\n  {% if report %}\n    {% if report.database_error %}\n      <div class=\"alert-box alert\">\n        {{ report.database_error }}\n      </div>\n    {% else %}\n      {% include \"report/frag_report_table.html\" %}\n      <p>Result generated {{ result_time }}</p>\n    {% endif %}\n\n\n  {% else %}\n    <p class=\"error\">No results found!</p>\n  {% endif %}\n\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/report/report_list.html",
    "content": "{% extends \"report/base.html\" %}\n{# This does not need to extend ReportTemplate #}\n\n{% block content %}\n\n    <table class=\"listtable full-width\">\n        <caption>Reports</caption>\n        <thead>\n            <tr>\n                <th>Name</th>\n                <th>Description</th>\n            </tr>\n        </thead>\n        <tbody>\n        {% for report in report_list %}\n            <tr>\n                <td><a href=\"/report/{{ report.id }}\">{{ report.title}}</a></td>\n                <td title=\"Source(s): {{ report.report_files }}\">{{ report.description }}</td>\n            </tr>\n        {% endfor %}\n        </tbody>\n    </table>\n\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/rest_framework/api.html",
    "content": "{% extends \"rest_framework/base.html\" %}\n\n{% block style %}\n  <link rel=\"stylesheet\"\n        href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css\"\n        integrity=\"sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7\"\n        crossorigin=\"anonymous\">\n  <style>\n    .page-header { margin: 0 0 20px; padding: 0; }\n    .navbar { margin-bottom: 0; }\n    .breadcrumb {\n      padding: 7px 5px;\n      margin-bottom: 0;\n    }\n  </style>\n{% endblock %}\n\n{% block navbar %}\n  <nav class=\"navbar navbar-static-top navbar-inverse\">\n    <div class=\"container\">\n      <a class=\"navbar-brand\" href=\"#\">NAV API</a>\n    </div>\n  </nav>\n  {% if debug %}\n    {% if not current_user_data.account.is_anonymous %}\n      {% include \"debug.html\" %}\n    {% endif %}\n  {% endif %}\n{% endblock %}\n\n{% block footer %}{% endblock %}\n\n{% block script %}\n  <script>\n    document.getElementById('get-form').style.display = 'none';\n    document.querySelector('.button-form').style.display = 'none';\n  </script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/rrdviewer/base.html",
    "content": "{% extends \"base.html\" %}\n\n{% block base_header_title %}\nNAV - RRD Viewer\n{% endblock %}\n\n{% block base_header_navpath %}\n<a href=\"/\">Home</a> > <a href=\"/rrd/\">RRD Viewer</a>\n{% endblock %}\n\n{% block base_content %}\n\n<h2>RRD Viewer </h2>\n\n{% if errors %}\n<ul class=\"error\">\n    {% for error in errors %}\n    <li>{{ error }}</li>\n    {% endfor %}\n</ul>\n{% endif %}\n\n{% block content %}\n{% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/rrdviewer/rrd-details.html",
    "content": "{% extends \"rrdviewer/base.html\" %}\n\n{% block content %}\n\n{% if presenter_page %}\n    <h3>\n        {{ rrddatasource.description }} \n        {% if port %}\n            for <a href=\"{{ port.get_absolute_url }}\">{{ port.ifname }}</a>\n        {% endif %}\n        {% with rrddatasource.rrd_file.netbox as netbox %}\n            at <a href=\"{{ netbox.get_absolute_url }}\">{{ netbox }}</a>\n        {% endwith %}\n        for the last {{ time_frame }}\n    </h3>\n\n    {% for image in presenter_page.presentations %}\n        <div class=\"rrd-image\"><img src=\"{{ image.graph_url }}\" /></div>\n    {% endfor %}\n\n    <h3>Time frame</h3>\n\n    <ul>\n        <li><a href=\"{% url 'rrdviewer-rrd-by-ds-tf' rrddatasource.id \"year\" %}\">\n            Year</a></li>\n        <li><a href=\"{% url 'rrdviewer-rrd-by-ds-tf' rrddatasource.id \"month\" %}\">\n            Month</a></li>\n        <li><a href=\"{% url 'rrdviewer-rrd-by-ds-tf' rrddatasource.id \"week\" %}\">\n            Week</a></li>\n        <li><a href=\"{% url 'rrdviewer-rrd-by-ds-tf' rrddatasource.id \"day\" %}\">\n            Day</a></li>\n        <li><a href=\"{% url 'rrdviewer-rrd-by-ds-tf' rrddatasource.id \"hour\" %}\">\n            Hour</a></li>\n    </ul>\n{% endif %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_add_patch_modal.html",
    "content": "<h4>Add patch</h4>\n<p>Connect interface <em class=\"interfacename\">{{ interface_name }}</em> to</p>\n<form\n        hx-post=\"{% url 'seeddb-patch-save' %}\"\n        hx-target=\"tr[data-interfaceid='{{ interface_id }}']\"\n        hx-swap=\"outerHTML\"\n>\n    {% csrf_token %}\n    <select id=\"cable-search\" name=\"cableid\" style=\"width: 100%;\">\n        <option></option>\n    </select>\n    <input name=\"split\" type=\"text\" placeholder=\"Split\" value=\"\">\n    <input class=\"interfaceid\" name=\"interfaceid\" type=\"hidden\" value=\"{{ interface_id }}\">\n    <button id=\"save-patch-button\" class=\"button small\">Save patch</button>\n</form>\n\n{% block base_header_additional_head %}\n<script>\n    require(['select2'], function () {\n        $(document).ready(function () {\n            $('#cable-search').select2({\n                placeholder: 'Search for cable',\n                allowClear: true,\n                ajax: {\n                    url: '/api/1/cabling/',\n                    dataType: 'json',\n                    data: getDataPayload,\n                    processResults: handleResults\n                },\n                minimumInputLength: 2\n            });\n        })\n\n        function getDataPayload(params) {\n            return {\n                search: params.term,\n                room: NAV.seeddb_add_patch.room,\n                available: 1\n            };\n        }\n\n        function handleResults(data) {\n            return {\n                results: processSearchResults(data),\n            };\n        }\n\n        function processSearchResults(data) {\n            return data.results.map(function (obj) {\n                return {\n                    id: obj.id,\n                    text: getSearchResultsText(obj),\n                };\n            });\n        }\n\n        function getSearchResultsText(result) {\n            const baseText = 'Jack ' + result.jack;\n            const details = [result.building, result.target_room, result.description]\n                .filter(function (x) {\n                    return Boolean(x);\n                }).join(', ');\n            return [baseText, details].join(' - ');\n\n        }\n    });\n</script>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_patch_table_row.html",
    "content": "<tr data-interfaceid=\"{{ interface.pk }}\">\n  <td>{{ interface.ifname }}</td>\n  <td>{{ interface.ifalias }}</td>\n  <td class=\"patch-cell\">\n    {% include 'seeddb/fragments/patches.html' %}\n  </td>\n  <td class=\"patch-button-cell\">\n    {% if interface.patches.all %}\n      <button\n              class=\"table-button secondary\"\n              hx-get=\"{% url 'seeddb-show-patch-modal'%}?modal=remove&interfaceid={{interface.pk}}\"\n              hx-target=\"body\"\n              hx-swap=\"beforeend\"\n      >\n        Remove patch\n      </button>\n    {% else %}\n      <button\n          class=\"table-button\"\n          hx-get=\"{% url 'seeddb-show-patch-modal' %}?modal=add&interfaceid={{interface.pk}}\"\n          hx-target=\"body\"\n          hx-swap=\"beforeend\"\n      >\n        Add patch\n      </button>\n    {% endif %}\n  </td>\n</tr>\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_remove_patch_modal.html",
    "content": "<h4>Remove patch</h4>\n<p>Remove patch from interface <em class=\"interfacename\">{{ interface_name }}</em>?</p>\n<form\n        hx-post=\"{% url 'seeddb-patch-remove' %}\"\n        class=\"left\"\n        hx-target=\"tr[data-interfaceid='{{ interface_id }}']\"\n        hx-swap=\"outerHTML\"\n>\n    {% csrf_token %}\n    <input class=\"interfaceid\" type=\"hidden\" name=\"interfaceid\" value=\"{{ interface_id }}\">\n    <button type=\"submit\" class=\"button small warning\">Yes</button>\n    <button type=\"button\" class=\"button small secondary\" hx-on:click=\"htmx.remove(this.closest('.nav-modal'))\">No</button>\n</form>\n<div class=\"alert-box alert\" style=\"display: none\">Error removing patch</div>\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_seeddb_check_connectivity_response.html",
    "content": "{% if status == \"loading\" %}\n    <div\n        hx-post=\"{% url 'seeddb-netbox-check-connectivity-load' %}\"\n        hx-trigger=\"load\"\n        hx-swap=\"innerHTML\"\n        hx-target=\"#connectivity-results\"\n        hx-include=\"#id_ip, #id_profiles\"\n        hx-indicator=\".connectivity-indicator\"\n    ></div>\n    <script>\n        document.querySelector(\"#seeddb-netbox-form\").classList.add(\"loading\")\n    </script>\n{% elif status == \"error\" %}\n    <div class=\"alert-box error\">\n        {{ message }}\n    </div>\n{% endif %}\n{% if status == \"select-address\" %}\n    <div id=\"verify-address-feedback\" hx-swap-oob=\"true\">\n        <div class=\"alert-box alert\">\n            <span>The hostname \"{{ hostname }}\" resolves to multiple IP addresses.</span>\n            <label for=\"address-select\">\n                Please choose an IP address\n            </label>\n            <select id=\"address-select\" onchange=\"document.querySelector('#id_ip').value = this.value;\">\n                <option value=\"\">---------</option>\n                {% for addr in addresses %}\n                    <option value=\"{{ addr }}\">{{ addr }}</option>\n                {% endfor %}\n            </select>\n        </div>\n    </div>\n{% else %}\n    <div id=\"verify-address-feedback\" hx-swap-oob=\"true\"></div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_seeddb_check_connectivity_results.html",
    "content": "{% if not profiles %}\n    <div class=\"alert-box error\">\n        No profiles found.\n    </div>\n{% endif %}\n{% if profiles.succeeded %}\n    <div class=\"alert-box success\">\n        <ul>\n            {% for profile in profiles.succeeded %}\n                <li>\n                    <em>\n                        {% if profile.url %}\n                            <a href=\"{{ profile.url }}\" title=\"View profile details\">{{ profile.name }}</a>\n                        {% else %}\n                            {{ profile.name }}\n                        {% endif %}\n                    </em>: <strong>OK</strong>\n                </li>\n            {% endfor %}\n        </ul>\n    </div>\n{% endif %}\n{% if profiles.failed %}\n    <div class=\"alert-box error\">\n        <ul>\n            {% for profile in profiles.failed %}\n                <li>\n                    <em>\n                        {% if profile.url %}\n                            <a href=\"{{ profile.url }}\" title=\"View profile details\">{{ profile.name }}</a>\n                        {% else %}\n                            {{ profile.name }}\n                        {% endif %}\n                    </em>\n                    <br>\n                    {% if profile.custom_error == 'UnicodeDecodeError' %}\n                        <span>Connection failed due to character encoding issues, perhaps because of\n                        non-ASCII characters in the sysLocation field.</span><br>\n                        <strong>sysLocation:</strong> {{ profile.syslocation }}\n                    {% else %}\n                        <strong>Error</strong>:\n                        <span>{{ profile.error_message|default:\"Connection failed due to unknown error\" }}</span>\n                    {% endif %}\n                </li>\n            {% endfor %}\n        </ul>\n    </div>\n{% endif %}\n\n<div id=\"collected-info-fields\" hx-swap-oob=\"true\">\n    {% include \"seeddb/_seeddb_collected_info.html\" with sysname=sysname type=netbox_type %}\n</div>\n\n<script id=\"remove-me\">\n    document.querySelector(\"#seeddb-netbox-form\").classList.remove(\"loading\")\n    document.querySelector(\"#remove-me\").remove()\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_seeddb_collected_info.html",
    "content": "{% if sysname %}\n<div>\n    <label for=\"id_sysname\">Sysname</label>\n    <input id=\"id_sysname\" name=\"sysname\" value=\"{{ sysname }}\" type=\"text\" disabled>\n</div>\n<div>\n    <label for=\"id_type\">Type</label>\n    {% if type %}\n    <input id=\"id_type\" name=\"type\" value=\"{{ type }}\" type=\"text\" disabled />\n    <input id=\"id_type\" name=\"type\" value=\"{{ type.id }}\" type=\"hidden\" />\n    {% else %}\n    <input id=\"id_type\" name=\"type\" value=\"---------\" type=\"text\" disabled />\n    {% endif %}\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/_seeddb_netbox_form_content.html",
    "content": "{% extends 'custom_crispy_templates/_form_content.html' %}\n{% load forms %}\n\n{% block form_fields %}\n  <div class=\"row\">\n    <div class=\"columns large-4\">\n      <fieldset>\n        <legend>Inventory</legend>\n        {% show_field form.ip %}\n        <div id=\"verify-address-feedback\"></div>\n        {% show_field form.room %}\n        {% show_field form.category %}\n        {% show_field form.organization %}\n      </fieldset>\n    </div>\n\n    <div class=\"columns large-4\">\n      <fieldset>\n        <legend>Management profiles</legend>\n        {% show_field form.profiles %}\n        <div id=\"check-connectivity-button\">\n            <button\n                name=\"check_connectivity\"\n                class=\"small\"\n                hx-post=\"{% url 'seeddb-netbox-check-connectivity' %}\"\n                hx-include=\"#id_ip, #id_profiles\"\n                hx-target=\"#connectivity-results\"\n                hx-trigger=\"click\"\n                hx-indicator=\".connectivity-indicator\"\n                type=\"button\"\n            >\n                Check connectivity\n            </button>\n            <div class=\"htmx-indicator connectivity-indicator\">\n                <img src=\"/static/images/select2/select2-spinner.gif\" alt=\"Loading spinner\" />\n            </div>\n        </div>\n        <div id=\"connectivity-results\"></div>\n      </fieldset>\n\n      <fieldset>\n        <legend>Collected info</legend>\n        <div id=\"collected-info-fields\">\n            {% include 'seeddb/_seeddb_collected_info.html' with sysname=form.instance.sysname type=form.instance.type %}\n        </div>\n      </fieldset>\n    </div>\n\n    <div class=\"columns large-4\">\n      <fieldset>\n        <legend>Meta information</legend>\n        {% show_field form.function %}\n        {% show_field form.groups %}\n        {% show_field form.data %}\n        <a class='advanced-toggle'>\n          <i class='fa fa-caret-square-o-right'>&nbsp;</i>Advanced options\n        </a>\n        <div class=\"advanced\">\n          <small class=\"alert-box\">NB: An IP Device cannot both have a master and have virtual instances</small>\n          {% show_field form.master %}\n          {% show_field form.virtual_instance %}\n        </div>\n      </fieldset>\n    </div>\n  </div>\n{% endblock form_fields %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n    <link href=\"{{ STATIC_URL }}css/nav/seeddb.css\" rel=\"stylesheet\" />\n    <script>require([\"src/seeddb\"]);</script>\n    {% block additional_seeddb_head %}\n    {% endblock %}\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Seed Database' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% if current_user_data.messages %}\n    {% for m in current_user_data.messages %}\n      <div class=\"alert-box {{ m.type }}\">\n      {{ m.message }}\n      </div>\n    {% endfor %}\n  {% endif %}\n\n\n<div class=\"tabs tabs-vertical\">\n    <ul>\n        <li class=\"{{ active.index|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-index' %}\">Seed DB</a>\n        </li>\n        <li class=\"{{ active.netbox|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-netbox' %}\">IP device</a>\n        </li>\n        <li class=\"{{ active.service|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-service' %}\">Service</a>\n        </li>\n        <li class=\"{{ active.management_profile|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-management-profile' %}\">Management Profile</a>\n        </li>\n        <li class=\"{{ active.room|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-room' %}\">Room</a>\n        </li>\n        <li class=\"{{ active.location|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-location' %}\">Location</a>\n        </li>\n        <li class=\"{{ active.organization|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-organization' %}\">Organization</a>\n        </li>\n        <li class=\"{{ active.usage|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-usage' %}\">Usage</a>\n        </li>\n        <li class=\"{{ active.type|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-type' %}\">Type</a>\n        </li>\n        <li class=\"{{ active.vendor|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-vendor' %}\">Vendor</a>\n        </li>\n        <li class=\"{{ active.netboxgroup|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-netboxgroup' %}\">Device Group</a>\n        </li>\n        <li class=\"{{ active.vlan|yesno:\"tabactive,\" }}\">\n           <a href=\"{% url 'seeddb-vlan' %}\">Vlan</a>\n        </li>\n        <li class=\"{{ active.prefix|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-prefix' %}\">Prefix</a>\n        </li>\n        <li class=\"{{ active.cabling|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-cabling' %}\">Cabling</a>\n        </li>\n        <li class=\"{{ active.patch|yesno:\"tabactive,\" }}\">\n            <a href=\"{% url 'seeddb-patch' %}\">Patch</a>\n        </li>\n    </ul>\n\n    <div class=\"tabcontent\" data-active-page=\"{{ active_page }}\">\n      <div class=\"row\">\n        <div class=\"small-12 column\">\n\n          {% if tab_template %}\n            <div class=\"row\">\n              <div class=\"small-12 column\">\n                <ul class=\"button-group right\">\n                  {% include tab_template %}\n                </ul>\n                <h3>{% block heading %}{{ caption }}{% endblock %}</h3>\n                {% if documentation_url %}\n                  <a href=\"{{ documentation_url }}\" target=\"_blank\" class=\"documentation-subheader\"\n                     title=\"View documentation (opens in another window)\">\n                    <i class=\"fa fa-question-circle\"></i>\n                    Documentation\n                  </a>\n                {% endif %}\n\n              </div>\n            </div>\n          {% endif %}\n\n          {% block content %}\n          {% endblock %}\n\n        </div>\n      </div>\n    </div>\n\n</div>\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/bulk_import.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n  <h4>Bulk import</h4>\n\n    <form enctype=\"multipart/form-data\" action=\"\" method=\"post\">\n        {% csrf_token %}\n        {% if form.non_field_errors %}\n            <div class=\"alert-box alert\">{{ form.non_field_errors }}</div>\n        {% endif %}\n\n        {% if processed_objects %}\n            <table class=\"listtable\">\n                <thead>\n                    <tr>\n                        <th>Status</th>\n                        <th>Line</th>\n                        <th>Input</th>\n                        <th>Remark</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {% for obj in processed_objects %}\n                    <tr>\n                        <td>\n                          {% if obj.status == \"ok\" %}\n                            <img src=\"{{ STATIC_URL }}images/lys/green.png\" alt=\"{{ obj.status }}\" />\n                          {% else %}{% if obj.status == \"other\" %}\n                            <img src=\"{{ STATIC_URL }}images/lys/yellow.png\" alt=\"{{ obj.status }}\" />\n                          {% else %}{% if obj.status == \"syntax\" %}\n                            <img src=\"{{ STATIC_URL }}images/lys/red.png\" alt=\"{{ obj.status }}\" />\n                          {% else %}\n                            {{ obj.status }}\n                          {% endif %}{% endif %}{% endif %}\n                        </td>\n                        <td>{{ obj.line_number }}</td>\n                        <td>{{ obj.input }}</td>\n                        <td>{{ obj.message|capfirst }}</td>\n                    </tr>\n                    {% endfor %}\n                </tbody>\n            </table>\n\n            <input type=\"submit\" name=\"confirm\" value=\"Import\" class=\"button small\"/>\n        {% endif %}\n\n        {% comment %}\n        If elements are hidden it'a a part of the preview. We need to print\n        out the form hidden to get it in the request\n        {% endcomment %}\n        {% if form.bulk_file.is_hidden %}\n            {{ form.bulk_file }}\n        {% else %}\n          <fieldset>\n            <legend>{{ form.bulk_file.label }}</legend>\n            {{ form.bulk_file }}\n          </fieldset>\n        {% endif %}\n\n        {% if form.bulk_data.is_hidden %}\n            <input type=\"hidden\" name=\"bulk_data\" value=\"{{ form.cleaned_data.bulk_data }}\" id=\"id_bulk_data\">\n        {% else %}\n          <fieldset>\n            <legend>{{ form.bulk_data.label }}</legend>\n            {{ form.bulk_data }}\n          </fieldset>\n        {% endif %}\n\n        {% if not form.is_bound or not form.is_valid %}\n            <input type=\"submit\" value=\"Preview import\" class=\"button small\"/>\n        {% endif %}\n\n    </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/delete.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n<form action=\"\" method=\"post\">\n  {% csrf_token %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n<table class=\"listtable\">\n    <thead>\n        <tr>\n            <th></th>\n            <th>Name</th>\n            <th>Referenced by</th>\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for o in objects %}\n        <tr>\n            <td>\n                <input type=\"checkbox\" name=\"object\" value=\"{{ o.id }}\" checked=\"checked\" />\n            </td>\n            <td>{{ o }}</td>\n            <td>\n                <ul>\n                {% for related in o.related_objects %}\n                    <li>{{ related.object_name|capfirst }}, {{ related }}</li>\n                {% endfor %}\n                </ul>\n            </td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n<p>\n    <input type=\"hidden\" name=\"delete\" value=\"true\" />\n    <input type=\"submit\" name=\"confirm\" value=\"Confirm delete\" class=\"button small\"/>\n</p>\n\n</form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/edit.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   form .listtable .select2-container {\n       margin: 0;\n   }\n  </style>\n{% endblock %}\n\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n  {% comment %}\n  Because of the generic build of seeddb, we need to handle a special case\n  when a map is present.\n  {% endcomment %}\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n      <h4>{{ title }}\n        {% if detail_page_url %}\n          <a href=\"{{ detail_page_url }}\"\n              title=\"See more information\">\n              {{ detail_page_name }}\n          </a>\n        {% else %}\n          {% if detail_page_name %}\n              \"{{ detail_page_name }}\"\n          {% endif %}\n        {% endif %}\n      </h4>\n    </div>\n\n    <div class=\"large-6 column{% if not map %} end{% endif %}\">\n      <form class=\"seeddb-edit\" action=\"\" method=\"post\">\n        <fieldset>\n          <legend>Attributes</legend>\n          {% block formfields %}\n  \t        {% include 'custom_crispy_templates/_form_content.html' %}\n          {% endblock %}\n        </fieldset>\n        <input type=\"submit\" name=\"submit\" value=\"Save {{ verbose_name }}\" class=\"submit button small left\" id=\"submit-id-submit\">\n      </form>\n\n      {% if object and object.pk %}\n      <ul class=\"button-group right\">\n        {% if delete_url_name %}\n        <li>\n          <a href=\"{% url delete_url_name object_id=object.pk %}\" class=\"button small secondary\" title=\"Delete this {{ verbose_name }}\">Delete</a>\n        </li>\n        {% endif %}\n        {% if copy_url %}\n        <li>\n          <a href=\"{{ copy_url }}\" class=\"button small secondary\" title=\"{{ copy_title }}\">Copy</a>\n        </li>\n        {% endif %}\n      </ul>\n      {% endif %}\n\n    </div>\n\n    {% if map %}\n      <script>\n       var rooms = [];\n       {% for position in roompositions %}\n       rooms.push({{ position }});\n       {% endfor %}\n      </script>\n\n      <div class=\"large-6 column\">\n        <div id=\"map-container\">\n\n          <div style=\"overflow: auto;\">\n            <button id=\"get_location_trigger\" class=\"tiny right\">Use my location</button>\n            <h5>Click the map to update the geo position</h5>\n          </div>\n          <div id=\"map\" class=\"mapwrapper\"></div>\n        </div>\n      </div>\n    {% endif %}\n\n  </div> {# row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/edit_patch.html",
    "content": "{% extends 'seeddb/base.html' %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <script>\n   NAV.seeddb_add_patch = {\n       room: \"{{ netbox.room.pk }}\"\n   }\n  </script>\n  <style>\n   #choose-netbox-form input { vertical-align: top; }\n  </style>\n{% endblock %}\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n  <form id=\"choose-netbox-form\" method=\"get\" action=\"\">\n    <select name=\"netboxid\" class=\"select2\" style=\"width: 25em;\">\n      <option value=\"\">--- Choose IP Device ---</option>\n      {% for n in netboxes %}\n        <option value=\"{{ n.pk }}\"\n                {% if n.pk == netbox.pk %}selected=\"selected\"{% endif %}>\n          {{ n }}\n        </option>\n      {% endfor %}\n    </select>\n    <input type=\"submit\" class=\"button small\" value=\"See patch list\">\n  </form>\n\n  {% if netbox %}\n    {% if cables %}\n      <table id=\"interface-table\" class=\"listtable\">\n        <caption>{{ netbox }} located in {{ netbox.room }}</caption>\n        <thead>\n          <tr>\n            <td>IfName</td>\n            <td>IfAlias</td>\n            <td>Patch</td>\n            <td>&nbsp;</td>\n          </tr>\n        </thead>\n\n        <tbody>\n          {% for interface in netbox.get_physical_ports_sorted %}\n            {% include 'seeddb/_patch_table_row.html' with interface=interface %}\n          {% endfor %}\n        </tbody>\n      </table>\n\n    {% else %}\n      <div class=\"alert-box info\">There are no cables in {{ netbox.room }}</div>\n    {% endif %}\n  {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/edit_prefix.html",
    "content": "{% extends \"seeddb/edit.html\" %}\n{% block formfields %}\n{{ block.super }}\n{% include 'custom_crispy_templates/_form_content.html' with form=vlan_form %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/edit_vlan.html",
    "content": "{% extends \"seeddb/edit.html\" %}\n{% block formfields %}\n<div>\n    <p>Net type<br/>\n    {{ object.net_type }}</p>\n</div>\n<div>\n    <p>Net ident<br/>\n    {{ object.net_ident }}</p>\n</div>\n<div>\n    <p>Description<br/>\n    {{ object.description }}</p>\n</div>\n{{ block.super }}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/fragments/branch.html",
    "content": "<li class=\"branch\" data-orgid=\"{{ branch.pk }}\">\n  {% if branch.has_children %}\n    <i class=\"fa fa-toggle-down\"></i>\n  {% endif %}\n  <a href=\"{% url edit_url_name branch.pk %}\">\n    {% if branch.verbose_string %}\n      {{ branch.verbose_string }}\n    {% else %}\n      {{ branch }}\n    {% endif %}\n    <div class=\"nav-tooltip\">\n        <i class=\"fa fa-question-circle-o unstyled-tooltip\" aria-describedby=\"#branch-tooltip-{{ branch.pk }}\"></i>\n        <span id=\"branch-tooltip-{{ branch.pk }}\" role=\"tooltip\">\n            {% include 'seeddb/fragments/branch_tooltip.html' %}\n        </span>\n    </div>\n\n  </a>\n\n  {% if branch.has_children %}\n    <ul class=\"child\">\n      {% for child in branch.get_children %}\n        {% with branch=child %}\n          {% include 'seeddb/fragments/branch.html' %}\n        {% endwith %}\n      {% endfor %}\n    </ul>\n  {% endif %}\n\n</li>\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/fragments/branch_tooltip.html",
    "content": "<h5>{{ branch }}</h5>\n<dl>\n\n  {% if branch.contact %}\n    <dt>Contact</dt><dd>{{ branch.contact }}</dd>\n  {% endif %}\n\n  {% for key, value in branch.data.items %}\n    <dt>{{ key }}</dt><dd>{{ value }}</dd>\n  {% endfor %}\n\n</dl>\n\n{% if branch.has_children %}\n  <em>\n    {{ branch.get_children.count }}\n    child{{ branch.get_children.count|pluralize:'ren' }}\n    {% with num_descendants=branch.get_descendants %}\n      ({{ num_descendants|length }} descendant{{ num_descendants|length|pluralize }})\n    {% endwith %}\n  </em>\n{% endif %}\n\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/fragments/patches.html",
    "content": "{% for patch in interface.patches.all %}\n  <span>{{ patch.cabling.verbose }}</span>\n{% endfor %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/index.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>IP devices and services</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-netbox' %}\">IP Devices</a>\n            </td>\n            <td class=\"info\">\n                Input seed information on the IP devices you want to monitor.\n            </td>\n            <td><a href=\"{% url 'seeddb-netbox-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-netbox-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-service' %}\">Services</a>\n            </td>\n            <td class=\"info\">\n                Set up service monitoring.\n            </td>\n            <td><a href=\"{% url 'seeddb-service-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-service-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n          <td>\n            <a href=\"{% url 'seeddb-management-profile' %}\">Management Profiles</a>\n          </td>\n          <td class=\"info\">\n            Set up management profiles for IP devices\n          </td>\n          <td><a href=\"{% url 'seeddb-management-profile-edit' %}\">Add</a></td>\n          <td><a href=\"{% url 'seeddb-management-profile-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>Rooms and locations</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-room' %}\">Rooms</a>\n            </td>\n            <td class=\"info\">\n              Register all wiring closets and server rooms that contain IP\n              devices which NAV monitors.\n            </td>\n            <td><a href=\"{% url 'seeddb-room-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-room-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-location' %}\">Locations</a>\n            </td>\n            <td class=\"info\">\n              Rooms are organised in locations.\n            </td>\n            <td><a href=\"{% url 'seeddb-location-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-location-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>Organizations and usage categories</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-organization' %}\">Organizations</a>\n            </td>\n            <td class=\"info\">\n              Register all organizational units that are relevant, i.e. all\n              units that have their own subnets or devices.\n            </td>\n            <td><a href=\"{% url 'seeddb-organization-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-organization-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-usage' %}\">Usage categories</a>\n            </td>\n            <td class=\"info\">\n              Subnet usage categories.\n            </td>\n            <td><a href=\"{% url 'seeddb-usage-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-usage-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>Types and vendors</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-type' %}\">Types</a>\n            </td>\n            <td class=\"info\">\n              The type registry lists all types of SNMP-enabled network\n              equipment that are recognizable by NAV, identified by their\n              sysObjectID.\n            </td>\n            <td><a href=\"{% url 'seeddb-type-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-type-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-vendor' %}\">Vendors</a>\n            </td>\n            <td class=\"info\">\n              A simple list of known device vendors in use in your network.\n            </td>\n            <td><a href=\"{% url 'seeddb-vendor-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-vendor-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-netboxgroup' %}\">Device groups</a>\n            </td>\n            <td class=\"info\">\n              Create groups to further categorize your devices.\n            </td>\n            <td><a href=\"{% url 'seeddb-netboxgroup-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-netboxgroup-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>Vlans and special subnets</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-vlan' %}\">Vlan</a>\n            </td>\n            <td class=\"info\">\n                Update the organization, usage and vlan value of a vlan in\n                cases where this is not automatically discovered by NAV.\n                Organization and usage will only be automatically discovered\n                when the NAV router interface description guidelines are\n                followed.\n            </td>\n            <td></td>\n            <td></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-prefix' %}\">Prefix</a>\n            </td>\n            <td class=\"info\">\n                All prefixes that are routed are automatically detected by NAV.\n                In addition you should manually register one or more scope\n                prefixes that defines your total IP address pool (both for IPv4\n                and IPv6).  To complete the picture of prefix allocation you\n                may also manually register reserved prefixes (when these\n                prefixes later are routed the prefix will automatically change\n                to the proper network type).\n            </td>\n            <td><a href=\"{% url 'seeddb-prefix-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-prefix-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n<table class=\"listtable seeddbtable expand\">\n    <caption>Cabling system</caption>\n    <tbody>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-cabling' %}\">Cabling</a>\n            </td>\n            <td class=\"info\">\n                Document your horizontal cabling system.\n            </td>\n            <td><a href=\"{% url 'seeddb-cabling-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-cabling-bulk' %}\">Bulk import</a></td>\n        </tr>\n        <tr>\n            <td>\n                <a href=\"{% url 'seeddb-patch' %}\">Patch</a>\n            </td>\n            <td class=\"info\">\n                Register the cross connects in the wiring closets.\n            </td>\n            <td><a href=\"{% url 'seeddb-patch-edit' %}\">Add</a></td>\n            <td><a href=\"{% url 'seeddb-patch-bulk' %}\">Bulk import</a></td>\n        </tr>\n    </tbody>\n</table>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/list.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n  {% if filter_form %}\n    {% if filter_form.base_fields|length >= 3 %}\n      {% include 'custom_crispy_templates/flat_form.html' with form=filter_form disable_csrf=True %}\n    {% else %}\n      <div class=\"row\">\n        <div class=\"medium-6 column\">\n          {% include 'custom_crispy_templates/flat_form.html' with form=filter_form disable_csrf=True %}\n        </div>\n      </div>\n    {% endif %}\n  {% endif %}\n\n  <form action=\"{{ request.path }}\" method=\"post\">\n    {% csrf_token %}\n    {% if not hide_move or not hide_delete or not hide_qr_code %}\n      <div>\n        {% if not hide_move %}\n          <input type=\"submit\" name=\"move\" value=\"Move selected\" class=\"button small secondary\" />\n        {% endif %}\n        {% if not hide_delete %}\n          <input type=\"submit\" name=\"delete\" value=\"Delete selected\" class=\"button small secondary\"/>\n        {% endif %}\n        {% if not hide_qr_code %}\n          <input type=\"submit\" name=\"qr_code\" value=\"Download QR codes for selected\" class=\"button small secondary\"/>\n        {% endif %}\n      </div>\n    {% endif %}\n\n    <div id=\"tablewrapper\" class=\"notvisible\" data-forpage=\"{{ request.path }}\" data-page=\"{{ active_page }}\">\n      <table id=\"seeddb-content\" class=\"listtable\" width=\"100%\">\n        <caption>\n          {{ caption }}\n        </caption>\n\n        <thead>\n          <tr>\n            <th id=\"select\"></th>\n            {% for label in labels %}\n              <th>\n                {{ label.0|capfirst }}\n              </th>\n            {% endfor %}\n          </tr>\n        </thead>\n\n        <tbody>\n          {% if object_list %}\n            {% for object in object_list %}\n              <tr>\n                <td>\n                  <input type=\"checkbox\" name=\"object\" value=\"{{ object.pk }}\" class=\"selector\" />\n                </td>\n              {% block row %}\n                {% for element in object.values_list %}\n                  <td {% if object.description %}title=\"{{ object.description }}\"{% endif %}>\n                    {% if forloop.first %}\n                      {% if object.url %}\n                        <a href=\"{{ object.url }}\">{{ element }}</a>\n                      {% else %}\n                        {{ element }}\n                      {% endif %}\n                    {% else %}\n                        {{ element|default_if_none:\"\" }}\n                    {% endif %}\n                  </td>\n                {% endfor %}\n              {% endblock %}\n              </tr>\n            {% endfor %}\n          {% else %}\n\t    <tr><td colspan=\"100\">No entries</td></tr>\n          {% endif %}\n        </tbody>\n\n      </table>\n\n    </div>\n\n  </form>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/list_cables.html",
    "content": "{% extends \"seeddb/list.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   .filters .select2-container {\n       display: inline-block;\n       width: 25em;\n       margin-top: .8em;\n       margin-right: .6em;\n   }\n  </style>\n  <script>\n   NAV.urls.seeddb_cabling_edit = \"{% url 'seeddb-cabling-edit' %}\";\n  </script>\n{% endblock %}\n\n{% block content %}\n  {{ block.super }}\n\n  <select id=\"id_room\">\n    <option value=\"\">--- Room filter ---</option>\n    {% for room in rooms %}\n      <option value=\"{{ room.pk }}\">{{ room.verbose_string }}</option>\n    {% endfor %}\n  </select>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/list_netbox.html",
    "content": "{% extends \"seeddb/list.html\" %}\n{% load info %}\n\n{% block row %}\n\n  {% for element in object.values_list %}\n    <td {% if object.description %}title=\"{{ object.description }}\"{% endif %}\n        style=\"white-space: nowrap\">\n      {% if forloop.first %}  {# first column is always sysname #}\n\n        {% if object.model.deleted_at %}\n        <a href=\"{{ object.url }}\"><del>{{ element }}</del> {{object.master }}</a>\n        {% else %}\n        <a href=\"{{ object.url }}\">{{ element }} {{object.master }}</a>\n        {% endif %}\n          {% if object.model.master %}\n              <span class=\"label secondary\"\n                    title=\"This is a virtual instance of {{ object.model.master }}\">V</span>\n          {% elif object.model.instances.all|length > 0 %}\n              <span class=\"label secondary\"\n                    title=\"This is a master with virtual instances\">M</span>\n          {% endif %}\n\n      {% else %}\n        {% if element|is_list %}\n            <span title=\"{{ element|join:\", \" }}\">{{ element|join:\", \"|truncatechars:30}}</span>\n        {% else %}\n          {{ element|default_if_none:\"\" }}\n        {% endif %}\n      {% endif %}\n\n    </td>\n  {% endfor %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/list_patches.html",
    "content": "{% extends \"seeddb/list.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   .filters .select2-container {\n       display: inline-block;\n       width: 25em;\n       margin-top: .8em;\n       margin-right: .6em;\n   }\n  </style>\n  <script>\n   NAV.urls.seeddb_patch_edit = \"{% url 'seeddb-patch-edit' %}\";\n  </script>\n{% endblock %}\n\n{% block content %}\n  {{ block.super }}\n\n  <select id=\"id_room\">\n    <option value=\"\">--- Room filter ---</option>\n    {% for room in rooms %}\n      <option value=\"{{ room.pk }}\">{{ room.verbose_string }}</option>\n    {% endfor %}\n  </select>\n\n  <select id=\"id_netbox\">\n    <option value=\"\">--- Device filter ---</option>\n    {% for netbox in netboxes %}\n      <option value=\"{{ netbox.pk }}\">{{ netbox }}</option>\n    {% endfor %}\n  </select>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/list_tree.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block base_header_additional_head %}\n  <style>\n   .tree-list .fa {\n       cursor: pointer;\n   }\n   .nav-tooltip dl {\n       font-size: inherit;\n       margin-bottom: 0;\n   }\n   .nav-tooltip h5 {\n       border-bottom: 1px solid salmon;\n   }\n  </style>\n{% endblock %}\n\n\n{% block footer_scripts %}\n  {{ block.super }}\n  <script>\n   $('.tree-list').on('click', '.branch > i.fa', function(event) {\n       $(event.target).toggleClass('fa-toggle-right fa-toggle-down').nextAll('.child').slideToggle();\n   });\n\n   $('#collapse-all').click(function(){\n       $('.tree-list .child').hide();\n       $('.tree-list [class*=\"fa-toggle-\"]').removeClass('fa-toggle-down').addClass('fa-toggle-right');\n   });\n\n   $('#expand-all').click(function(){\n       $('.child').show();\n       $('.tree-list [class*=\"fa-toggle-\"]').removeClass('fa-toggle-right').addClass('fa-toggle-down');\n   });\n  </script>\n{% endblock %}\n\n\n{% block content %}\n\n  <button id=\"collapse-all\" class=\"button small\">Collapse all</button>\n  <button id=\"expand-all\" class=\"button small\">Expand all</button>\n\n  <ul class=\"tree-list no-bullet\">\n    {% for branch in roots %}\n      {% include 'seeddb/fragments/branch.html' %}\n    {% endfor %}\n  </ul>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/management-profile/edit.html",
    "content": "{% extends \"seeddb/base.html\" %}\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n\n  {% for message in messages %}\n    <div class=\"alert-box with-icon {{ message.tags }}\">\n      {{ message }}\n    </div>\n  {% endfor %}\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n      {% if object %}\n          <h4>Edit {{ object }}</h4>\n      {% else %}\n        <h4>Add new management profile</h4>\n      {% endif %}\n    </div>\n  </div>\n\n    <form id=\"seeddb-management-profile-form\" method=\"post\">\n\n        <div class=\"row\">\n            <div class=\"columns large-4\">\n                <fieldset>\n                    <legend>Basic profile data</legend>\n                    {% include 'custom_crispy_templates/_form_content.html' %}\n                </fieldset>\n            </div>\n\n            <div class=\"columns large-8\">\n                {% for form in protocol_forms %}\n                    <fieldset class=\"protocol-configuration\" id=\"protocol-{{ form.PROTOCOL }}\">\n                        <legend>{{ form.PROTOCOL_NAME }} configuration</legend>\n                        {% if form.NOTABENE %}\n                            <div class=\"alert-box warning with-icon\">{{ form.NOTABENE }}</div>\n                        {% endif %}\n                        {% include 'custom_crispy_templates/_form_content.html' %}\n                    </fieldset>\n                {% endfor %}\n            </div>\n        </div>\n\n        {% if object %}{% if num_netboxes > 0 %}\n        <div class=\"alert-box warning\">\n            <strong><a href=\"{% url \"seeddb-netbox\" %}?profile={{ object.pk }}\">{{ num_netboxes }} IP device{{ num_netboxes|pluralize:\"s\" }}</a></strong>\n            will be affected by changes to this profile.\n        </div>\n        {% else %}\n        <div class=\"alert-box info\">\n            No IP devices will currently be affected by changes to this profile.\n        </div>\n        {% endif %}{% endif %}\n\n        <input type=\"submit\" name=\"submit\" value=\"Save {{ verbose_name }}\" class=\"submit button small left\" id=\"submit-id-submit\">\n\n    </form>\n\n    {% if object and object.pk %}\n    <ul class=\"button-group right\">\n      {% if delete_url_name %}\n      <li>\n        <a href=\"{% url delete_url_name object_id=object.pk %}\" class=\"button small secondary\" title=\"Delete this {{ verbose_name }}\">Delete</a>\n      </li>\n      {% endif %}\n      {% if copy_url %}\n      <li>\n        <a href=\"{{ copy_url }}\" class=\"button small secondary\" title=\"{{ copy_title }}\">Copy</a>\n      </li>\n      {% endif %}\n    </ul>\n    {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/move.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n    <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n\n<form action=\"\" method=\"post\">\n{% csrf_token %}\n<table class=\"listtable\">\n    <caption>\n        {{ title }}\n    </caption>\n    <thead>\n        <tr>\n        {% for values in values.0.values %}\n            <th>{{ values.0 }}</th>\n        {% endfor %}\n        </tr>\n    </thead>\n\n    <tbody>\n    {% for row in values %}\n        <tr>\n        {% if not confirm %}\n            <input type=\"hidden\" name=\"object\" value=\"{{ row.pk }}\" />\n        {% endif %}\n        {% for value in row.values %}\n            <td>{{ value.1|default_if_none:\"\" }}</td>\n        {% endfor %}\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n\n{% if confirm %}\n<p>\n    {{ operation_form }}\n    {% for key,value in data.items %}\n    <input type=\"hidden\" name=\"{{ key }}\" value=\"{{ value.pk }}\" />\n    {% endfor %}\n    {% for row in values %}\n    <input type=\"hidden\" name=\"object\" value=\"{{ row.pk }}\" />\n    {% endfor %}\n    <input type=\"hidden\" name=\"move\" value=\"yes\" />\n    <input type=\"submit\" name=\"save\" value=\"Confirm and save changes\" class=\"button small\"/>\n</p>\n{% else %}\n<table class=\"listtable\">\n    {{ form.as_table }}\n    <tr>\n        <th></th>\n        <td>\n            <input type=\"hidden\" name=\"move\" value=\"yes\" />\n            <input type=\"submit\" name=\"preview\" value=\"Next\" class=\"button small\"/>\n        </td>\n    </tr>\n</table>\n{% endif %}\n\n<input type=\"hidden\" name=\"step\" value=\"{{ step }}\" />\n</form>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/netbox_wizard.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <script>\n    NAV.urls.seeddb = NAV.urls.seeddb || {};\n    NAV.urls.seeddb.validateIpAddress = \"{% url 'seeddb-netbox-validate-ip-address' %}\";\n    require(['src/seeddb_netbox', 'src/seeddb_netbox_wizard']);\n  </script>\n{% endblock %}\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n{% if object.deleted_at %}\n<div class=\"alert-box warning with-icon\">{{object}} was scheduled for deletion at {{ object.deleted_at }}</div>\n{% else %}\n\n  {% for message in messages %}\n    <div class=\"alert-box with-icon {{ message.tags }}\">\n      {{ message }}\n    </div>\n  {% endfor %}\n\n  <div class=\"row\">\n    <div class=\"small-12 column\">\n      {% if object and object.pk %}\n      <h4>{{ action|capfirst }}\n        <a href=\"{% url 'ipdevinfo-details-by-id' object.pk %}\"\n           title=\"See device info for {{ object.sysname }}\">\n          {{ object.sysname }}\n        </a>\n      </h4>\n      {% else %}\n      <h4>{{ title }}</h4>\n      {% endif %}\n    </div>\n  </div>\n\n  <form  id=\"seeddb-netbox-form\" method=\"post\">\n    {% include 'seeddb/_seeddb_netbox_form_content.html' %}\n    <input type=\"submit\" name=\"save_ip_device\" value=\"Save IP device\" class=\"submit button small left\" id=\"submit-id-save_ip_device\" />\n  </form>\n\n  {% endif %}\n\n  {% if object and object.pk%}\n  <ul class=\"button-group right\">\n    {% if delete_url_name %}\n    <li><a href=\"{% url delete_url_name object_id=object.pk %}\" class=\"button small secondary\" title=\"Delete this {{ verbose_name }}\">Delete</a></li>\n    {% endif %}\n    {% if copy_url and not object.deleted_at %}\n    <li><a href=\"{{ copy_url }}\" class=\"button small secondary\" title=\"{{ copy_title }}\">Copy</a></li>\n    {% endif %}\n  </ul>\n  {% endif %}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/service_netbox_form.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n  <h4>\n    Choose IP Device and service handler\n  </h4>\n\n  <div class=\"row\">\n    <div class=\"column large-6 small-12\">\n\n      {# This form is ONLY FOR ADDING new service checkers (netbox-service combo) #}\n      {% include 'custom_crispy_templates/flat_form.html' with form=choice_form %}\n\n    </div>\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/service_property_form.html",
    "content": "{% extends \"seeddb/base.html\" %}\n\n{% block content %}\n\n  <p><a href=\"{{ back_url }}\">Back to list</a></p>\n\n  {% if object %}\n    <h4>\n      Editing service <em>{{ handler }}</em> on <em>{{ netbox }}</em>\n    </h4>\n  {% else %}\n    <h4>\n      Add new service checker for <em>{{ handler }}</em> on <em>{{ netbox }}</em>\n    </h4>\n  {% endif %}\n\n  <div class=\"row\">\n    <div class=\"column large-6 small-12\">\n      <form action=\"\" method=\"post\">\n        <fieldset>\n          <legend>Attributes</legend>\n          {% include 'custom_crispy_templates/_form_content.html' with form=service_form %}\n          {% if property_form.fields %}\n            {% include 'custom_crispy_templates/_form_content.html' with form=property_form %}\n          {% else %}\n            <div class=\"alert-box\">\n              There are no attributes for this service.\n              <strong>You just need to save the service</strong>.\n            </div>\n          {% endif %}\n        </fieldset>\n        <input class=\"button small left\" type=\"submit\" name=\"save\" value=\"Save {{ verbose_name }}\" />\n      </form>\n\n      {% if object and object.pk %}\n      <ul class=\"button-group right\">\n        {% if delete_url_name %}\n        <li>\n          <a href=\"{% url delete_url_name object_id=object.pk %}\" class=\"button small secondary\" title=\"Delete this {{ verbose_name }}\">Delete</a>\n        </li>\n        {% endif %}\n        {% if copy_url %}\n        <li>\n          <a href=\"{{ copy_url }}\" class=\"button small secondary\" title=\"{{ copy_title }}\">Copy</a>\n        </li>\n        {% endif %}\n      </ul>\n      {% endif %}\n\n    </div>\n  </div>\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/tabs_generic.html",
    "content": "<li>\n  <a href=\"{{ add_url }}\" class=\"button small secondary\">\n    Add new {{ verbose_name }}\n  </a>\n</li>\n\n<li>\n  <a href=\"{{ bulk_url }}\" class=\"button small secondary\">\n    Bulk import\n  </a>\n</li>\n"
  },
  {
    "path": "python/nav/web/templates/seeddb/tabs_vlan.html",
    "content": ""
  },
  {
    "path": "python/nav/web/templates/seeddb/widgets/alias_list.html",
    "content": "<div class=\"alias-tags\" id=\"alias-tags-{{ widget.name }}\">\n  <div class=\"alias-tags-list\">\n    {% for alias in aliases %}\n    <span class=\"badge alias-tag\" data-value=\"{{ alias }}\">\n      {{ alias }}\n      <button type=\"button\" class=\"alias-tag-remove\" aria-label=\"Remove {{ alias }}\">&times;</button>\n    </span>\n    {% endfor %}\n    <span class=\"alias-tags-input-wrapper\">\n      <input type=\"text\" class=\"alias-tags-input\"\n             placeholder=\"Add alias...\"\n             aria-label=\"Add alias\"\n             maxlength=\"64\">\n      <small class=\"alias-tags-counter\" id=\"alias-counter-{{ widget.name }}\" hidden></small>\n    </span>\n  </div>\n  <input type=\"hidden\" name=\"{{ widget.name }}_json\" value=\"\">\n  <span class=\"sr-only\" aria-live=\"polite\" id=\"alias-status-{{ widget.name }}\"></span>\n  <script>\n    (function() {\n      const container = document.getElementById('alias-tags-{{ widget.name }}');\n      const list = container.querySelector('.alias-tags-list');\n      const inputWrapper = container.querySelector('.alias-tags-input-wrapper');\n      const input = container.querySelector('.alias-tags-input');\n      const hidden = container.querySelector('input[type=hidden]');\n      const status = document.getElementById('alias-status-{{ widget.name }}');\n      const counter = document.getElementById('alias-counter-{{ widget.name }}');\n\n      function announce(message) {\n        status.textContent = message;\n      }\n\n      function syncHidden() {\n        const tags = list.querySelectorAll('.alias-tag');\n        const values = Array.from(tags).map(t => t.dataset.value);\n        hidden.value = JSON.stringify(values);\n      }\n\n      function addTag(value) {\n        const trimmed = value.trim();\n        if (!trimmed) return;\n        const existing = Array.from(list.querySelectorAll('.alias-tag'))\n          .map(t => t.dataset.value);\n        if (existing.includes(trimmed)) return;\n\n        const tag = document.createElement('span');\n        tag.className = 'badge alias-tag';\n        tag.dataset.value = trimmed;\n\n        const btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'alias-tag-remove';\n        btn.setAttribute('aria-label', 'Remove ' + trimmed);\n        btn.innerHTML = '&times;';\n        tag.append(trimmed + ' ', btn);\n        inputWrapper.before(tag);\n        syncHidden();\n      }\n\n      const SEPARATORS = new Set([',', ';', 'Enter', 'Tab']);\n      let pendingBackspace = false;\n\n      input.addEventListener('keydown', function(e) {\n        if (SEPARATORS.has(e.key)) {\n          if (input.value.trim()) {\n            e.preventDefault();\n            addTag(input.value);\n            input.value = '';\n          } else if (e.key !== 'Tab') {\n            e.preventDefault();\n          }\n          pendingBackspace = false;\n          return;\n        }\n        if (e.key === 'Backspace' && input.value === '') {\n          const tags = list.querySelectorAll('.alias-tag');\n          if (tags.length) {\n            if (pendingBackspace) {\n              const value = tags[tags.length - 1].dataset.value;\n              tags[tags.length - 1].remove();\n              syncHidden();\n              announce('Removed alias ' + value);\n              pendingBackspace = false;\n            } else {\n              tags[tags.length - 1].classList.add('alias-tag--pending');\n              announce('Press backspace again to remove ' + tags[tags.length - 1].dataset.value);\n              pendingBackspace = true;\n            }\n          }\n          return;\n        }\n        pendingBackspace = false;\n        const dimmed = list.querySelector('.alias-tag--pending');\n        if (dimmed) dimmed.classList.remove('alias-tag--pending');\n      });\n\n      const COUNTER_THRESHOLD = 0.75;\n      input.addEventListener('input', function() {\n        const len = input.value.length;\n        const max = input.maxLength;\n        if (len >= max * COUNTER_THRESHOLD) {\n          counter.textContent = len + '/' + max;\n          counter.hidden = false;\n          input.style.paddingRight = '3rem';\n        } else {\n          counter.hidden = true;\n          input.style.paddingRight = '';\n        }\n      });\n\n      input.addEventListener('blur', function() {\n        pendingBackspace = false;\n        const dimmed = list.querySelector('.alias-tag--pending');\n        if (dimmed) dimmed.classList.remove('alias-tag--pending');\n      });\n\n      input.addEventListener('paste', function(e) {\n        e.preventDefault();\n        const text = e.clipboardData.getData('text');\n        text.split(/[,;\\n]/).forEach(v => addTag(v));\n      });\n\n      list.addEventListener('click', function(e) {\n        const btn = e.target.closest('.alias-tag-remove');\n        if (btn) {\n          const value = btn.closest('.alias-tag').dataset.value;\n          btn.closest('.alias-tag').remove();\n          syncHidden();\n          announce('Removed alias ' + value);\n          input.focus();\n        }\n      });\n\n      syncHidden();\n    })();\n  </script>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/socialaccount/authentication_error.html",
    "content": "{% extends \"socialaccount/base_entrance.html\" %}\n{% load i18n %}\n{% load allauth %}\n{% block head_title %}\n    {% trans \"Third-Party Login Failure\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>\n        {% trans \"Third-Party Login Failure\" %}\n    </h3>\n    <p>\n        {% trans \"An error occurred while attempting to login via your third-party account.\" %}\n    </p>\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/socialaccount/connections.html",
    "content": "{% extends \"allauth/layouts/base.html\" %}\n{% load i18n allauth socialaccount %}\n{% block head_title %}\n    {% trans \"Account Connections\" %}\n{% endblock head_title %}\n{% block content %}\n    <h3>{% trans \"Account Connections\" %}</h3>\n    {% if form.accounts %}\n        <p>\n            {% blocktrans %}You can sign in to your account using any of the following third-party accounts:{% endblocktrans %}\n        </p>\n        {% url 'socialaccount_connections' as action_url %}\n        <form method=\"post\" action=\"{{ action_url }}\">\n            {% csrf_token %}\n            <ul class=\"connected-accounts\">\n                {% for account in form.accounts %}\n                    <li class=\"connected-account\">\n                        <label for=\"id_account_{{ account.pk }}\">\n                            <input type=\"checkbox\"\n                                   name=\"account\"\n                                   value=\"{{ account.pk }}\"\n                                   id=\"id_account_{{ account.pk }}\">\n                            {% with provider_account=account.get_provider_account %}\n                                <span class=\"connected-account-info\">\n                                    <strong>{{ provider_account.get_brand.name }}</strong>\n                                    <span class=\"connected-account-detail\">{{ provider_account }}</span>\n                                </span>\n                            {% endwith %}\n                        </label>\n                    </li>\n                {% endfor %}\n            </ul>\n            <button type=\"submit\" class=\"button small alert\">\n                {% trans 'Remove' %}\n            </button>\n        </form>\n    {% else %}\n        <p>\n            {% trans 'You currently have no third-party accounts connected to this account.' %}\n        </p>\n    {% endif %}\n    <h4>{% trans 'Add a Third-Party Account' %}</h4>\n    {% get_providers as socialaccount_providers %}\n    {% if socialaccount_providers %}\n        <div class=\"provider-list\">\n            {% for provider in socialaccount_providers %}\n                {% provider_login_url provider process=\"connect\" as href %}\n                {% if provider.id in connected_providers %}\n                    <span class=\"nav-tooltip\">\n                        <span class=\"button secondary disabled\" aria-disabled=\"true\">\n                            <i class=\"fa fa-sign-in\"></i> {{ provider.name }}\n                        </span>\n                        <span role=\"tooltip\">\n                            {% blocktrans with name=provider.name %}Already connected to {{ name }}{% endblocktrans %}\n                        </span>\n                    </span>\n                {% else %}\n                    <a title=\"{{ provider.name }}\" href=\"{{ href }}\" class=\"button secondary\">\n                        <i class=\"fa fa-sign-in\"></i> {{ provider.name }}\n                    </a>\n                {% endif %}\n            {% endfor %}\n        </div>\n    {% endif %}\n    {% include \"socialaccount/snippets/login_extra.html\" %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/socialaccount/login.html",
    "content": "{% extends \"socialaccount/base_entrance.html\" %}\n{% load i18n %}\n{% load allauth %}\n{% block head_title %}\n    {% trans \"Sign In\" %}\n{% endblock head_title %}\n{% block content %}\n    {% if process == \"connect\" %}\n        <h3>\n            {% blocktrans with provider.name as provider %}Connect {{ provider }}{% endblocktrans %}\n        </h3>\n        <p>\n            {% blocktrans with provider.name as provider %}You are about to connect a new third-party account from {{ provider }}.{% endblocktrans %}\n        </p>\n    {% else %}\n        <h3>\n            {% blocktrans with provider.name as provider %}Sign In Via {{ provider }}{% endblocktrans %}\n        </h3>\n        <p>\n            {% blocktrans with provider.name as provider %}You are about to sign in using a third-party account from {{ provider }}.{% endblocktrans %}\n        </p>\n    {% endif %}\n    {% element form method=\"post\" no_visible_fields=True %}\n        {% slot actions %}\n            {% csrf_token %}\n            {% element button type=\"submit\" %}\n                {% trans \"Continue\" %}\n            {% endelement %}\n        {% endslot %}\n    {% endelement %}\n{% endblock content %}\n"
  },
  {
    "path": "python/nav/web/templates/socialaccount/snippets/login.html",
    "content": "{% load socialaccount %}\n{% get_providers as socialaccount_providers %}\n{% if socialaccount_providers %}\n    {% include \"socialaccount/snippets/provider_list.html\" with process=\"login\" %}\n    {% include \"socialaccount/snippets/login_extra.html\" %}\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/sortedstats/sortedstats.html",
    "content": "{% extends \"base.html\" %} {# Don't need a deeper hierarchy for one template #}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <style type=\"text/css\">\n    .statistics-chart {\n       margin: 0 2em 2em 0;\n    }\n  </style>\n  <script type=\"text/javascript\">require(['src/statistics']);</script>\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Ranked Statistics' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% if cache_misconfigured %}\n    <div class=\"alert-box error\">\n      The cache for Ranked Statistics is not configured correctly.\n    </div>\n  {% endif %}\n\n  {% include 'custom_crispy_templates/flat_form.html' with disable_csrf=True %}\n\n  {# Display view if exists #}\n  {% if result %}\n    {% if result.graph_url %}\n      <div>\n        {% if from_cache %}\n          <p>Showing cached results ({{ duration }} sec) </p>\n        {% else %}\n          <p>Showing live results ({{ duration }} sec) </p>\n        {% endif %}\n      </div>\n\n      <ul class=\"button-group\">\n        <li>\n          <a id=\"line-chart\" href=\"javascript:void(0);\" class=\"button small active\">Line chart</a>\n        </li>\n        <li>\n          <a id=\"pie-chart\" href=\"javascript:void(0);\" class=\"button small\">Pie chart</a>\n        </li>\n      </ul>\n\n      <img src=\"{{ result.graph_url }}\" alt=\"Chart\" title=\"Chart\" class=\"left statistics-chart\">\n\n      <table class=\"listtable left\">\n        <caption>Average values</caption>\n        {% for metric, value, obj in result.display_data %}\n          <tr>\n            <td>\n              {% if obj and obj.get_absolute_url %}\n                <a href=\"{{ obj.get_absolute_url }}\" title=\"See info about this metric\">\n                  {{ metric }}\n                </a>\n              {% else %}\n                {{ metric }}\n              {% endif %}\n            </td>\n            <td>\n              {{ value }}{{ result.graph_args.vtitle }}\n            </td>\n          </tr>\n        {% endfor %}\n\n      </table>\n    {% elif graphite_unreachable %}\n      <div class=\"alert-box error\">\n        The statistics could not be displayed due to a problem with reaching the\n        Graphite server. Try again or contact a NAV admin to resolve the issue.\n      </div>\n    {% else %}\n      <div class=\"alert-box error\">\n        No data was found for the given timeframe. This may indicate a problem\n        with the data collection and/or presentation. Try choosing a longer\n        timeframe to see when the problem started.\n      </div>\n    {% endif %}\n  {% endif %}\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/status2/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Status2' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n\n  {% if current_user_data.messages %}\n    {% for m in current_user_data.messages %}\n      <div class=\"alert-box {{ m.type }}\">{{ m.message }}</div>\n    {% endfor %}\n  {% endif %}\n\n  {% block content %}\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/status2/status.html",
    "content": "{% extends \"status2/base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ STATIC_URL }}css/nav/status.css\"/>\n  <script type=\"text/javascript\">require(['status/status']);</script>\n  <script type=\"text/javascript\">\n   var NAV = NAV || {};\n   NAV.urls = NAV.urls || {};\n   NAV.urls.status2_api_alerthistory = \"{% url 'api:1:alert-list' %}\";\n   NAV.urls.status2_clear_alert = \"{% url 'status2_clear_alert' %}\";\n   NAV.urls.status2_acknowledge_alert = \"{% url 'status2_acknowledge_alert' %}\";\n   NAV.urls.status2_put_on_maintenance = \"{% url 'status2_put_on_maintenance' %}\";\n   NAV.urls.status2_delete_module_or_chassis = \"{% url 'status2_delete_module_or_chassis' %}\";\n   NAV.urls.status2_save_preferences = \"{% url 'status2_save_preferences' %}\";\n   NAV.urls.alert_endpoint = \"{% url 'api:1:alert-list' %}\";\n  </script>\n{% endblock %}\n\n\n{% block content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Status' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <div id=\"status-page\" class=\"hidden\">\n\n    {# Form for filtering events #}\n    <a href=\"javascript:void(0);\" class=\"button small secondary toggle-panel\"></a>\n    <div id=\"status-panel\" class=\"hidden panel\">\n      {% include 'custom_crispy_templates/flat_form.html' %}\n    <hr>\n      <a href=\"javascript:void(0);\" class=\"button small secondary set-default\">Save as my default status filter</a>\n      <button id=\"clear-status-form\" class=\"small secondary\">Clear form</button>\n    </div>\n\n    <div id=\"status-page-fetch-alert\" class=\"alert-box alert with-icon hidden\">\n      Failed to fetch events\n    </div>\n\n\n    {# Table displaying filtered events #}\n\n    <table id=\"events-list\" class=\"listtable hover expand tablesorter expandable\">\n        <caption>Events<span class=\"pull-right\"><span id=\"fetch-spinner\"></span><span class=\"last-changed\"></span></span></caption>\n      <thead>\n        <tr>\n          <th>\n            <label>\n              <input class=\"alert-action\" type=\"checkbox\">\n            </label>\n          </th>\n          <th>&nbsp;</th>\n          <th>&nbsp;</th>\n          <th>Subject</th>\n          <th>Type</th>\n          <th>Time</th>\n          <th>Duration</th>\n        </tr>\n      </thead>\n      <tbody></tbody>\n    </table>\n\n    {# Panel to do stuff with selected alerts #}\n    <form id=\"action-panel-revised\" class=\"row\" method=\"POST\">\n      {% csrf_token %}\n      <div class=\"column medium-8 large-4\">\n        <label for=\"alert-action-select\">\n            Select action for chosen alerts\n            <a\n                href=\"#\"\n                class=\"help-toggle right\"\n                aria-describedby=\"help-toggle-description\"\n                aria-controls=\"action-help-content\"\n                aria-expanded=\"false\"\n            >\n              <span class=\"fa fa-question-circle\"></span>\n              <span class=\"help-text\">Show action details</span>\n              <span id=\"help-toggle-description\" class=\"sr-only\">Toggle help content for alert action descriptions</span>\n            </a>\n        </label>\n        <div id=\"action-help-content\" class=\"hidden\" aria-label=\"Alert action descriptions\">\n          <h5>Acknowledge the alerts</h5>\n          <p>\n              Acknowledged alerts will be hidden for all users, but not removed. When an end event arrives the alert\n              will be cleared normally. Acknowledged alerts can still be viewed by checking the\n              <em>Acknowledged</em> checkbox in your status filter.\n          </p>\n          <h5>Clear the alerts</h5>\n          <p>\n              Clearing an alert will set its end time, thereby closing it and removing it from the list of problems.\n              Use this to remove alerts that have become invalid, where there is no way for NAV to automatically\n              detect this.\n          </p>\n          <p>\n              <strong>Note:</strong> Be aware that if the root cause of the alert is still there, NAV\n              may end up posting a new alert for the same issue.\n          </p>\n          <h5>Put on maintenance</h5>\n          <p>Putting an alert on maintenance is only meaningful if the subject can be put on maintenance, for\n              instance IP Devices and Services.\n          </p>\n          <h5>Delete module or chassis</h5>\n          <p>\n              NAV does not know if a module or chassis that has disappeared did so\n              because of an error or because it was removed on purpose. Thus, modules\n              and chassis that disappear are all listed in status until manually\n              deleted from NAV by a manual module/chassis delete.\n          </p>\n        </div>\n        <select id=\"alert-action-select\" aria-describedby=\"action-help-content\">\n          <option value=\"\">--- Choose action ---</option>\n          <option value=\"acknowledge\">Acknowledge the alerts</option>\n          <option value=\"clear\">Clear the alerts</option>\n          <option value=\"maintenance\">Put on maintenance</option>\n          <option value=\"delete\">Delete module or chassis</option>\n        </select>\n        <div style=\"display: none\" class=\"usercomment-wrapper\">\n          <label>Description\n            <input type=\"text\" placeholder=\"Write a description\" class=\"usercomment\">\n          </label>\n        </div>\n\n        <a href=\"javascript:void(0);\" class=\"button small submit-action\">Do it</a>\n        <div style=\"display: none\" class=\"feedback with-icon alert-box\"></div>\n\n      </div>\n    </form>\n\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/styleguide/sparklines.html",
    "content": "<!-- D3-based sparkline examples. See js/src/plugins/d3_sparkline.js for implementation -->\n<h3 class=\"underline\">Sparklines</h3>\n<div class=\"row\">\n  <div class=\"small-6 column\">\n    <div class=\"panel white\">\n      <h5>Line sparklines</h5>\n      <table class=\"vertitable\">\n        <tr>\n          <!-- Used in: js/src/interface_browser_dynamic_columns_controller.js -->\n          <th>Basic</th>\n          <td><div id=\"sparkline-basic\"></div></td>\n        </tr>\n        <tr>\n          <th>Custom size</th>\n          <td><div id=\"sparkline-wide\"></div></td>\n        </tr>\n        <tr>\n          <th>Custom colors</th>\n          <td><div id=\"sparkline-styled\"></div></td>\n        </tr>\n        <tr>\n          <th>With null gaps</th>\n          <td><div id=\"sparkline-gaps\"></div></td>\n        </tr>\n        <tr>\n          <!-- Used in: js/src/subnetmatrix.js, js/src/ipdevinfo.js -->\n          <th>Full width with tooltip</th>\n          <td style=\"width: 200px\"><div id=\"sparkline-fullwidth\"></div></td>\n        </tr>\n      </table>\n    </div>\n  </div>\n\n  <div class=\"small-6 column\">\n    <div class=\"panel white\">\n      <h5>Bullet sparklines</h5>\n      <table class=\"vertitable\">\n        <tr>\n          <th>Basic</th>\n          <td style=\"width: 200px\"><div id=\"sparkline-bullet-basic\"></div></td>\n        </tr>\n        <tr>\n          <!-- Used in: js/src/info_room_rack.js, js/src/plugins/vue_rack.js -->\n          <th>Sensor style</th>\n          <td><div id=\"sparkline-bullet-sensor\"></div></td>\n        </tr>\n        <tr>\n          <!-- Used in: js/src/plugins/navlet_pdu.js -->\n          <th>With color ranges</th>\n          <td><div id=\"sparkline-bullet-ranges\"></div></td>\n        </tr>\n        <tr>\n          <!-- Used in: js/src/plugins/navlet_pdu.js -->\n          <th>With tooltip (hover)</th>\n          <td><div id=\"sparkline-bullet-tooltip\"></div></td>\n        </tr>\n      </table>\n    </div>\n  </div>\n</div>\n\n<script>\nrequire(['plugins/d3_sparkline'], function(d3Sparkline) {\n    const lineData = [5, 10, 8, 15, 12, 20, 18, 25, 22, 30, 28, 35];\n    const lineDataWithGaps = [5, 10, null, 15, 12, null, null, 25, 22, 30];\n    const timeSeriesData = [];\n    const now = Math.floor(Date.now() / 1000);\n    for (let i = 0; i < 20; i++) {\n        timeSeriesData.push([now - (20 - i) * 3600, crypto.getRandomValues(new Uint32Array(1))[0] / 0xFFFFFFFF * 100]);\n    }\n\n    // Line sparklines\n    // Used in: js/src/interface_browser_dynamic_columns_controller.js\n    d3Sparkline.line(document.getElementById('sparkline-basic'), lineData);\n    d3Sparkline.line(document.getElementById('sparkline-wide'), lineData, {\n        width: 200, height: 30\n    });\n    d3Sparkline.line(document.getElementById('sparkline-styled'), lineData, {\n        strokeColor: '#e74c3c', fillColor: 'rgba(231, 76, 60, 0.2)'\n    });\n    d3Sparkline.line(document.getElementById('sparkline-gaps'), lineDataWithGaps);\n    // Used in: js/src/subnetmatrix.js, js/src/ipdevinfo.js\n    d3Sparkline.line(document.getElementById('sparkline-fullwidth'), timeSeriesData, {\n        width: '100%',\n        tooltipFormatter: function(data) {\n            const date = new Date(data.x * 1000).toLocaleString();\n            return '<span style=\"color:' + data.color + '\">●</span> ' + data.y.toFixed(1) + '<br>' + date;\n        }\n    });\n\n    // Bullet sparklines\n    d3Sparkline.bullet(document.getElementById('sparkline-bullet-basic'), [null, 75, 100]);\n    // Used in: js/src/info_room_rack.js, js/src/plugins/vue_rack.js\n    d3Sparkline.bullet(document.getElementById('sparkline-bullet-sensor'), [null, 75, 100], {\n        performanceColor: 'lightsteelblue',\n        rangeColors: ['#fff']\n    });\n    // Used in: js/src/plugins/navlet_pdu.js\n    d3Sparkline.bullet(document.getElementById('sparkline-bullet-ranges'), [null, 65, 50, 75, 100], {\n        rangeColors: ['#A5D6A7', '#FFEE58', '#EF9A9A']\n    });\n    // Used in: js/src/plugins/navlet_pdu.js\n    d3Sparkline.bullet(document.getElementById('sparkline-bullet-tooltip'), [null, 42, 30, 60, 100], {\n        rangeColors: ['#A5D6A7', '#FFEE58', '#EF9A9A'],\n        tooltipFormatter: function(data) {\n            return 'Value: ' + data.values[1] + ' (limits: ' + data.values.slice(2).join(', ') + ')';\n        }\n    });\n});\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/styleguide.html",
    "content": "{% extends 'base.html' %}\n\n{% block base_header_additional_head %}\n  <style>\n   h3.underline {\n       border-bottom: 1px solid #cccccc;\n   };\n  </style>\n{% endblock %}\n\n{% block footer_scripts %}\n  <script>\n   require(['plugins/gauge', 'jquery-ui'], function (JohnGauge) {\n      $(function () {\n\n          /* Code for activating jquery ui tabs. We usually hide the tabs until\n             they are rendered to avoid screen jumping */\n          $('#jqueryuitabs').tabs().show();\n\n          // Draw the gauge tests\n          var element = document.querySelector('#gauges');\n\n          function createGauges(values, config) {\n              element.appendChild(document.createElement('h5')).innerHTML = \"Config: \" + JSON.stringify(config);\n              var container = document.createElement('div');\n              container.style.cssText = \"display: flex; flex-wrap: wrap; margin-bottom: 1em\";\n              var gauges = element.appendChild(container);\n              values.forEach(function(value) {\n                  new JohnGauge(Object.assign(\n                      {node: gauges.appendChild(document.createElement('div')),\n                       value: value},\n                      config\n                  ));\n              });\n          }\n\n          createGauges([5, 25, 50, 75, 95, 100, 150], {});\n          createGauges([-20, -10, 0, 25, 75, 100], {min: -20});\n          createGauges([5, 25, 45, 50, 55], {thresholds: ['>50']});\n          createGauges([45, 50, 55, 75, 95], {thresholds: ['<50']});\n          createGauges([25, 35, 45, 55, 65], {thresholds: ['<30','>60']});\n\n      });\n    });\n  </script>\n{% endblock %}\n\n{% block base_content %}\n\n\n\n  <h2>NAV Style Guide</h2>\n\n\n  {# INTRODUCTION #}\n  <div class=\"panel white\">\n    <p>\n      Use this guide to get a hint of what components you should use when\n      creating content for NAV. The code is not provided - we expect that you\n      are familiar enough with developer tools to get the information you need.\n    </p>\n\n    <p>\n      As we use <a href=\"http://foundation.zurb.com/\">Foundation 5</a>,\n      the components <a href=\"http://foundation.zurb.com/docs/\" title=\"Foundation 5 documentation\">available there</a>\n      will not be listed unless there is relevant information regarding the component and how we use it.\n    </p>\n  </div>\n\n  {# Page headers #}\n  <h3 class=\"underline\">Page headers</h3>\n  <p>\n    The page header for a tool or equivalent is created by including the\n    template <code>nav_header.html</code>. This template expects a tool\n    to be defined. It must contain 'name' and 'description' members.\n  </p>\n\n  <p>\n    For existing tools:\n      {% verbatim %}\n      <pre class=\"prettyprint\">\n      {% load tools %}\n      {% with tool=current_user_data.tools|get_tool:'toolname' %}\n        {% include 'nav_header.html' %}\n      {% endwith %}</pre>\n      {% endverbatim %}\n  </p>\n\n  <p>\n    A fake tool for a page that is not a tool: create a dictionary with a\n    'name' and a 'description' key. Pass it to the template.\n      {% verbatim %}\n      <pre class=\"prettyprint\">\n      {% with tool=somedict %}\n        {% include 'nav_header.html' %}\n      {% endwith %}</pre>\n      {% endverbatim %}\n  </p>\n\n\n  <div class=\"row\">\n    {# Headings #}\n    <div class=\"small-6 column\">\n      <h3 class=\"underline\">Headings</h3>\n      <h1>h1 - never used</h1>\n      <h2>h2 - also never used</h2>\n      <h3>h3 - Normally used as heading</h3>\n      <h4>h4 - seldom used</h4>\n      <h5>h5 - Normally used as 'second' heading</h5>\n      <h6>h6 - not used</h6>\n    </div> {# Left column #}\n\n    {# PANELS #}\n    <div class=\"small-6 column\">\n      <h3 class=\"underline\">Panels</h3>\n\n      <p>Used to divide content into groups. Also useful if the page is very\n        'grey'. White panel should be used in almost all cases</p>\n      <div class=\"panel\">.panel</div>\n      <div class=\"panel white\">.panel .white</div>\n    </div> {# Right column #}\n  </div>\n\n\n\n\n  <div class=\"row\">\n    {# BUTTONS #}\n    <div class=\"small-6 column\">\n      <h3 class=\"underline\">Buttons</h3>\n      <table>\n        <tbody>\n        <tr>\n          <td><a href=\"#\" class=\"button\">.button</a></td>\n          <td>This color is the primary color, used for intended primary actions</td>\n        </tr>\n        <tr>\n          <td><a href=\"#\" class=\"button small\">.button.small</a></td>\n          <td>The most used buttonsize</td>\n        </tr>\n        <tr>\n          <td>\n            <a href=\"#\" class=\"button small\">\n              <i class=\"fa fa-arrows\"></i>\n              .button.small\n            </a>\n          </td>\n          <td>Icons should be on the left, otherwise they serve no purpose in helping the user scan</td>\n        </tr>\n        <tr>\n          <td>\n            <a href=\"#\" class=\"button small\">\n              <i class=\"fa fa-arrows pad-right\"></i>\n              .button.small i.pad-right\n            </a>\n          </td>\n          <td>Use .pad-right to create some margin to the icon</td>\n        </tr>\n        <tr>\n          <td><a href=\"#\" class=\"button tiny\">.button .tiny</a></td>\n          <td>A very small button.</td>\n        </tr>\n        <tr>\n          <td><a href=\"#\" class=\"button secondary\">.button .secondary</a></td>\n          <td>Used for actions that are not primary</td>\n        </tr>\n        <tr>\n          <td><a href=\"#\" class=\"button alert\">.button .alert</a></td>\n          <td> Used for instance for deleting stuff</td>\n        </tr>\n        <tr>\n          <td><a href=\"#\" class=\"button success\">.button .success</a></td>\n          <td>This button exists</td>\n        </tr>\n        <tr>\n          <td colspan=\"2\"><a href=\"#\" class=\"button small expand\">.button .small .expand</a></td>\n        </tr>\n        </tbody>\n      </table>\n\n      <h4>Labels</h4>\n      <ul>\n        <li><span class=\"label\">Default</span></li>\n        <li><span class=\"label alert\">Alert</span></li>\n        <li><span class=\"label warning\">Warning</span></li>\n        <li><span class=\"label success\">Success</span></li>\n        <li><span class=\"label secondary\">Secondary</span></li>\n      </ul>\n\n    </div> {# Left column #}\n\n    {# Alert boxes #}\n    <div class=\"small-6 column\">\n      <h3 class=\"underline\">Alert boxes</h3>\n      <div class=\"panel white\">\n        <div class=\"alert-box\">.alert-box &mdash; This is <a href=\"\">a link</a> inside text</div>\n        <div class=\"alert-box\">.alert-box with close span anchor <span class=\"close\">x</span></div>\n        <div class=\"alert-box success\">.alert-box.success &mdash; This is <a href=\"\">a link</a> inside text</div>\n        <div class=\"alert-box success with-icon\">.alert-box.success.with-icon</div>\n        <div class=\"alert-box alert\">.alert-box.alert &mdash; This is <a href=\"\">a link</a> inside text</div>\n        <div class=\"alert-box alert with-icon\">.alert-box.alert.with-icon</div>\n        <div class=\"alert-box warning\">.alert-box.warning &mdash; This is <a href=\"\">a link</a> inside text</div>\n        <div class=\"alert-box warning with-icon\">.alert-box.warning.with-icon</div>\n        <div class=\"alert-box info\">.alert-box.info &mdash; This is <a href=\"\">a link</a> inside text</div>\n        <div class=\"alert-box info with-icon\">.alert-box.info.with-icon</div>\n      </div>\n\n    </div> {# Right column #}\n  </div>\n\n\n  {# TABLES #}\n  <h3 class=\"underline\">Tables</h3>\n  <div class=\"row\">\n    <div class=\"small-4 column\">\n      <table class=\"listtable\">\n        <caption>table .listtable</caption>\n        <thead>\n          <tr>\n            <th>Heading 1</th>\n            <th>Heading 2</th>\n            <th>Heading 3</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>\n              Content 1\n              <button class=\"table-button\">.table-button</button>\n            </td>\n            <td>Content 2</td>\n            <td>Content 3</td>\n          </tr>\n          <tr>\n            <td>\n              Content 1\n              <button class=\"table-button secondary\">.table-button secondary</button>\n            </td>\n            <td>Content 2</td>\n            <td>Content 3</td>\n          </tr>\n          <tr>\n            <td>\n              Content 1\n              <button class=\"table-button alert\">.table-button alert</button>\n            </td>\n            <td>Content 2</td>\n            <td>Content 3</td>\n          </tr>\n        </tbody>\n        <tfoot>\n          <tr>\n            <td colspan=\"3\">Footer 1</td>\n          </tr>\n        </tfoot>\n      </table>\n      </div>\n\n      <div class=\"column small-4\">\n      <table class=\"listtable expand\">\n        <caption>table .listtable.expand</caption>\n        <thead>\n          <tr>\n            <th>Heading 1</th>\n            <th>Heading 2</th>\n            <th>Heading 3</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Content 1 <div class=\"alert-box inside-table\">.alert-box.inside-table</div></td>\n            <td>Content 2</td>\n            <td>Content 3</td>\n          </tr>\n          <tr>\n            <td colspan=\"2\">Content 1 <div class=\"alert-box warning inside-table\">.alert-box.warning.inside-table</div></td>\n            <td>Content 2</td>\n          </tr>\n          <tr>\n            <td colspan=\"3\">Content 1 <div class=\"alert-box error with-icon inside-table\">.alert-box.error.inside-table.with-icon</div></td>\n          </tr>\n        </tbody>\n        <tfoot>\n          <tr>\n            <td colspan=\"3\">Footer 1</td>\n          </tr>\n        </tfoot>\n      </table>\n      </div>\n\n      <div class=\"small-4 column\">\n      <table class=\"vertitable\">\n        <caption>table .vertitable</caption>\n        <tr>\n          <th>Heading</th>\n          <td>Something</td>\n          <td>Something else</td>\n        </tr>\n        <tr>\n          <th>Longer Heading</th>\n          <td>Something</td>\n          <td>Something else</td>\n        </tr>\n        <tr>\n          <th>Head</th>\n          <td>Something</td>\n          <td>Something else</td>\n        </tr>\n      </table>\n\n    </div>\n  </div>\n\n\n\n  {# TABS #}\n  <h3 class=\"underline\">Tabs</h3>\n  <div class=\"row\">\n    <div class=\"small-6 column\">\n\n      {# NAV tabs #}\n      <h5>NAV Tabs</h5>\n      <div class=\"tabs\">\n        <ul>\n          <li class=\"tabactive\"><a href=\"#\">Tab 1</a></li>\n          <li><a href=\"#\">Tab 2</a></li>\n        </ul>\n\n        <div class=\"tabcontent\">\n          <p>\n            These tabs work by loading a new page for each tab, that is, the\n            tab goes to the same page where the tab content changes. They do\n            not require javascript to work.\n          </p>\n          <p>\n            The advantage with these tabs is that, in addition to not require\n            Javascript (if that is an advantage), they also collapse to\n            accordion layout on small screens.\n          </p>\n        </div>\n      </div>\n\n      {# JQuery UI tabs #}\n      <h5>jQuery UI Tabs</h5>\n\n      <div id=\"jqueryuitabs\" class=\"ui-helper-hidden\">\n        <ul>\n          <li><a href=\"#jqueryuitab1\">Tab 1</a></li>\n          <li><a href=\"/doc/py-modindex.html\">Tab 2</a></li>\n        </ul>\n\n        <div id=\"jqueryuitab1\">\n          <p>\n            These tabs need javascript to work. You can link to url to access\n            content with AJAX. If you do that you can use the aria-controls\n            attribute on the list element to say what element the content\n            should go in. Otherwise it just follows order.\n          </p>\n        </div>\n\n        <div id=\"jqueryuitab2\"></div>\n\n      </div> {# Tabs #}\n\n    </div>\n\n    {# TABS #}\n    <div class=\"small-6 column\">\n\n      <div class=\"tabs tabs-vertical\">\n        <ul>\n          <li class=\"tabactive\"><a href=\"#\">Tab 1</a></li>\n          <li><a href=\"#\">Tab 2</a></li>\n        </ul>\n\n        <div class=\"tabcontent\">\n          <p>\n            We have vertical tabs. They also collapse to accordion layout\n            on small screens. As you see, they are far from perfect...\n          </p>\n        </div>\n      </div>\n\n    </div>  {# Right column #}\n  </div> {# Row #}\n\n\n\n\n  <div class=\"row\">\n\n    {# FORMS #}\n    <div class=\"small-6 column\">\n      <h3 class=\"underline\">Forms</h3>\n      <p>\n        We use a \"django-crispy-forms-inspired\" template system for \"easy\" and nice form layout.\n        The advantages are:\n      </p>\n\n      <ul>\n        <li>you never need more than one line in the template to display a form.</li>\n        <li>errors are automatically displayed</li>\n        <li>form input is automatically remembered</li>\n        <li>all forms are customized to look like they should</li>\n      </ul>\n\n      <p>\n        Use existing forms as examples for how to build your own. If you have questions, ask them\n        on the NAV mailing lists or GitHub discussion forums.\n      </p>\n\n      {% include 'custom_crispy_templates/flat_form.html' with form=form1 %}\n      {% include 'custom_crispy_templates/flat_form.html' with form=form2 %}\n\n    </div>\n\n    {# FONTS #}\n    <div class=\"small-6 column\">\n\n      <h3 class=\"underline\">Icons</h3>\n      <p>\n        We use <a href=\"http://fortawesome.github.io/Font-Awesome/\">Font\n        Awesome</a> icon fonts. They are used in buttons as well as general\n        icons. Example: <i class=\"fa fa-fighter-jet\"></i>\n      </p>\n\n      <a href=\"javascript:void(0);\" class=\"button\">Awesome<i class=\"fa fa-thumbs-up\"></i></a>\n\n      <p>\n        They can also be used in css-classes. That requires a bit of black magic which someone has\n        <a href=\"http://stackoverflow.com/questions/20782368/use-font-awesome-icon-as-css-content\">posted\n          solutions to</a>. Here is a brief teaser:\n      </p>\n\n      <pre class=\"prettyprint\">\n  .someclass:after|before {\n      font-family: FontAwesome;\n      content: \"\\f06a\";\n  }   </pre>\n      <br>\n\n      <p>\n        The list of codes is located\n        <a href=\"http://fortawesome.github.io/Font-Awesome/cheatsheet/\">here</a>\n        (replace the <code>&#x</code> with a <code>\\</code>).\n      </p>\n\n    </div> {# column #}\n  </div> {# row #}\n\n\n\n\n  {# OTHER TIDBITS #}\n  <div class=\"row\">\n    <div class=\"columns\">\n        <h3 class=\"underline\">Popover</h3>\n    </div>\n    <div class=\"columns large-6\">\n        <p>Interactive popover component for confirmation dialogs and contextual actions. Provides accessible, non-intrusive user interactions without navigating away from the current page.</p>\n        <h4>Options</h4>\n        <ul>\n          <li><strong>Alignment:</strong> <code>data-align</code> Options: <code>start</code> (default), <code>end</code></li>\n          <li><strong>Side:</strong> <code>data-side</code> Options: <code>bottom</code> (default), <code>left</code>, <code>right</code>, <code>top</code></li>\n          <li><strong>Size:</strong> <code>tiny</code>, <code>small</code>, <code>medium</code>, or <code>large</code> classes on popover-content</li>\n          <li><strong>Arrow:</strong> Add <code>with-arrow</code> class to display a pointing arrow</li>\n          <li><strong>Close button:</strong> Add <code>data-close-popover</code> attribute to any element to make it close the popover when clicked</li>\n        </ul>\n        <div style=\"margin-bottom: 1rem;\">\n            <h4>Example popover</h4>\n            <div id=\"demo-popover\" class=\"popover with-arrow\" data-side=\"right\" data-align=\"start\">\n              <button\n                  class=\"secondary\" style=\"margin-bottom: 0;\"\n                  data-popover-target=\"#demo-popover\"\n                  aria-haspopup=\"true\"\n                  aria-expanded=\"false\"\n              >\n                  <i class=\"fa fa-times-circle deleteicon\"></i> Delete Action\n              </button>\n              <div class=\"popover-content small\">\n                <h5>Confirm Action</h5>\n                <p>Are you sure you want to delete this item?</p>\n                <button type=\"button\" class=\"button small alert left\">Confirm</button>\n                <button type=\"button\" class=\"button small secondary close-button left\" data-close-popover>Cancel</button>\n              </div>\n            </div>\n        </div>\n      </div>\n      <div class=\"columns large-6\">\n          <div class=\"panel white\">\n            <pre class=\"prettyprint\">\n&lt;div id=\"demo-popover\" class=\"popover with-arrow\" data-side=\"right\" data-align=\"start\"&gt;\n    &lt;button\n        class=\"secondary\"\n        data-popover-target=\"#demo-popover\"\n        aria-haspopup=\"true\"\n        aria-expanded=\"false\"\n    &gt;\n        &lt;i class=\"fa fa-times-circle deleteicon\"&gt;&lt;/i&gt; Delete Action\n    &lt;/button&gt;\n    &lt;div class=\"popover-content tiny\"&gt;\n        &lt;h5&gt;Confirm Action&lt;/h5&gt;\n        &lt;p&gt;Are you sure you want to delete this item?&lt;/p&gt;\n        &lt;button class=\"button small alert left\"&gt;Confirm&lt;/button&gt;\n        &lt;button\n            class=\"button small secondary close-button left\"\n            data-close-popover\n        &gt;\n            Cancel\n        &lt;/button&gt;\n    &lt;/div&gt;\n&lt;/div&gt;</pre>\n          </div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"columns\">\n        <h4>Template Tags</h4>\n        <p>Use Django template tags for cleaner, more maintainable popover markup with built-in ARIA attributes.</p>\n    </div>\n    <div class=\"columns large-6\">\n        <h5>Confirmation Popover</h5>\n        <p>For delete/confirmation dialogs with a form action:</p>\n        {% load popover %}\n        {% confirm_popover popover_id=\"styleguide-demo\" action_url=\"#\" title=\"Delete this item?\" trigger_text=\"Delete Action\" confirm_text=\"Delete\" cancel_text=\"Keep it\" side=\"right\" %}\n    </div>\n    <div class=\"columns large-6\">\n        <div class=\"panel white\">\n            <pre class=\"prettyprint\">\n{&percnt; load popover &percnt;}\n{&percnt; confirm_popover popover_id=\"delete-item\" action_url=delete_url title=\"Delete this item?\" &percnt;}\n\n{# With all options: #}\n{&percnt; confirm_popover\n    popover_id=\"delete-rule\"\n    action_url=rule.delete_url\n    title=\"Delete this rule?\"\n    confirm_text=\"Yes\"\n    cancel_text=\"No way!\"\n    trigger_icon=\"fa-trash\"\n    size=\"tiny\"\n    side=\"bottom\"\n    align=\"end\"\n&percnt;}</pre>\n        </div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"columns large-6\">\n        <h5>Generic Popover Block</h5>\n        <p>For custom popover content:</p>\n        {% popover popover_id=\"styleguide-info\" trigger_text=\"More Info\" trigger_element=\"a\" title=\"About This Feature\" %}\n            <p>Custom HTML content goes here. You can include any markup needed.</p>\n            {% popover_close_button \"Got it\" classes=\"secondary\" %}\n        {% endpopover %}\n    </div>\n    <div class=\"columns large-6\">\n        <div class=\"panel white\">\n            <pre class=\"prettyprint\">\n{&percnt; load popover &percnt;}\n{&percnt; popover popover_id=\"info\" trigger_text=\"About\" trigger_element=\"a\" title=\"About This\" &percnt;}\n    &lt;p&gt;Custom content here...&lt;/p&gt;\n    {&percnt; popover_close_button \"Close\" classes=\"secondary\" &percnt;}\n{&percnt; endpopover &percnt;}</pre>\n        </div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"column\">\n        <h3 class=\"underline\">Tooltips</h3>\n    </div>\n    <div class=\"large-6 column\">\n        <p>Accessible tooltip component that provides additional context or help text on hover or focus. Uses semantic ARIA attributes for screen reader compatibility.</p>\n\n        <h4>Options</h4>\n        <ul>\n          <li><strong>Alignment:</strong> <code>data-align=\"start\"</code>, <code>data-align=\"center\"</code>, or <code>data-align=\"end\"</code> on the trigger element</li>\n          <li><strong>Size:</strong> <code>tiny</code>, <code>small</code>, <code>medium</code>, or <code>large</code> classes on the <code>role=\"tooltip\"</code> element</li>\n        </ul>\n\n        <h4>Accessibility</h4>\n        <ul>\n            <li><strong><code>aria-describedby</code>:</strong> Links the trigger element to tooltip content by referencing the tooltip's <code>id</code>. Screen readers will announce the tooltip text when the trigger receives focus.</li>\n            <li><strong><code>role=\"tooltip\"</code>:</strong> Identifies the element as tooltip content for assistive technologies, ensuring proper semantic understanding and handling.</li>\n            <li><strong>Automatic positioning:</strong> Tooltips automatically adjust their alignment if they would overflow the viewport, ensuring content remains visible and accessible.</li>\n        </ul>\n    </div>\n    <div class=\"large-6 column\">\n        <div style=\"margin-bottom: 1rem;\">\n          <h4>Example tooltip</h4>\n          <p>\n            Hover over or focus on this help icon to see the tooltip:\n            <span class=\"nav-tooltip\" data-align=\"end\">\n              <i class=\"fa fa-question-circle\" aria-describedby=\"example-tooltip\"></i>\n              <span id=\"example-tooltip\" role=\"tooltip\" class=\"small\">\n                This is an example tooltip with helpful information.\n              </span>\n            </span>\n          </p>\n\n          <p>\n            You can also add tooltips to text elements like\n            <span class=\"nav-tooltip\" data-align=\"center\">\n              <span aria-describedby=\"text-tooltip\">this underlined text</span>\n              <span id=\"text-tooltip\" role=\"tooltip\" class=\"medium\">\n                Tooltips work on any element, not just icons.\n              </span>\n            </span>\n          </p>\n        </div>\n        <div class=\"panel white\">\n          <pre class=\"prettyprint\">\n&lt;span class=\"nav-tooltip\" data-align=\"end\"&gt;\n    &lt;i class=\"fa fa-question-circle has-tip\" aria-describedby=\"example-tooltip\"&gt;&lt;/i&gt;\n    &lt;span id=\"example-tooltip\" role=\"tooltip\" class=\"small\"&gt;\n        This is an example tooltip with helpful information.\n    &lt;/span&gt;\n&lt;/span&gt;\n          </pre>\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"column\">\n        <h3 class=\"underline\">Modal</h3>\n    </div>\n    <div class=\"large-6 column\">\n        <p>Modal dialogs are used for important information and user tasks that require focused attention. They disable interaction with the main content until the modal is dismissed, ensuring users complete critical actions without distraction.</p>\n\n        <h4>Usage with HTMX</h4>\n        <p>NAV uses Django HTMX for dynamic modal rendering. Use the utility functions in <code>nav.web.modals</code> for consistent modal behavior:</p>\n        <ul>\n            <li><strong><code>render_modal()</code>:</strong> Render a modal with custom template and context</li>\n            <li><strong><code>resolve_modal()</code>:</strong> Close modal using <code>hx-swap-oob=\"delete\"</code></li>\n            <li><strong><code>render_modal_alert()</code>:</strong> Display alert messages within modals</li>\n        </ul>\n\n        <h4>Modal Structure</h4>\n        <p>NAV modals use the HTML5 <code>&lt;dialog&gt;</code> element with:</p>\n        <ul>\n            <li><strong>Modal underlay:</strong> Click outside to close</li>\n            <li><strong>Close button:</strong> Standard × button in top-right corner</li>\n            <li><strong>Alert area:</strong> Dedicated space for error messages</li>\n        </ul>\n\n        <h4>Accessibility</h4>\n        <ul>\n            <li><strong>Manual close actions:</strong> Close button and underlay clicks remove modal from DOM</li>\n            <li><strong>ARIA attributes:</strong> Close button has <code>aria-label=\"Close\"</code></li>\n        </ul>\n\n        <h4>Options</h4>\n        <ul>\n            <li><strong>Size:</strong> <code>tiny</code>, <code>small</code>, <code>medium</code>, <code>large</code>, or <code>fit-content</code> (default)</li>\n            <li><strong>Modal ID:</strong> Custom ID for targeting specific modals (default: <code>'modal'</code>)</li>\n            <li><strong>Show close button:</strong> <code>show_close_button=True</code> (default) or <code>False</code> to hide the × button</li>\n            <li><strong>Close on outside click:</strong> <code>close_on_outside_click=True</code> (default) or <code>False</code> to disable underlay closing</li>\n        </ul>\n    </div>\n       <div class=\"large-6 column\">\n        <h4>Python Example</h4>\n        <div class=\"panel white\">\n            <pre class=\"prettyprint\">\nfrom nav.web.modals import render_modal, render_modal_alert, resolve_modal\n\n# Basic modal\ndef my_modal_view(request):\n    context = {'items': ['item1', 'item2']}\n    return render_modal(\n        request,\n        'my_template.html',\n        context,\n        modal_id='my-modal',\n        size='medium'\n    )\n\n# Alert modal (swaps content, retargets to alert area)\ndef error_modal_view(request):\n    return render_modal_alert(\n        request,\n        'Operation failed. Please try again.',\n        modal_id='error-modal'\n    )\n\n# Close/resolve modal\ndef close_modal_view(request):\n    return resolve_modal(request, modal_id='my-modal')</pre>\n        </div>\n\n        <h4>Template Example</h4>\n        <div class=\"panel white\">\n          {% verbatim %}\n    <pre class=\"prettyprint\">\n&lt;!-- Modal trigger button --&gt;\n&lt;button\n    class=\"button small\"\n    hx-get=\"{% url 'my-modal-view' %}\"\n    hx-target=\"body\"\n    hx-swap=\"beforeend\"\n&gt;\n    Open Modal\n&lt;/button&gt;\n\n&lt;!-- Form inside modal that processes and closes modal --&gt;\n&lt;form hx-post=\"{% url 'process-form' %}\" &gt;\n    {% csrf_token %}\n    &lt;!-- form fields --&gt;\n    &lt;button type=\"submit\" class=\"button alert\"&gt;Confirm&lt;/button&gt;\n    &lt;button type=\"button\" class=\"button secondary\"\n            hx-on:click=\"htmx.remove(this.closest('dialog'))\"&gt;Cancel&lt;/button&gt;\n&lt;/form&gt;</pre>\n         {% endverbatim %}\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"large-6 column\">\n      {# Dropdowns #}\n      <h3 class=\"underline\">Dropdowns</h3>\n      <p>\n        In addition to the Foundation dropdowns we use <a\n              href=\"http://ivaynberg.github.io/select2/\">Select2</a> dropdowns.\n        Select2 is nice when the content in the dropdown needs to be\n        searchable, and it supports optgroups which Foundation does not.\n        Also, Select2 has a wealth of other stuff it can do.\n      </p>\n\n      <form>\n        <label>\n          Select2 dropdown\n          <select class=\"select2\">\n            <option>Just add</option>\n            <option>class</option>\n            <option>.select2</option>\n          </select>\n        </label>\n      </form>\n\n      <form>\n        <label>\n          Foundation dropdown\n          <select>\n            <option>Option 1</option>\n            <option>Option 2</option>\n            <option>Option 3</option>\n          </select>\n        </label>\n      </form>\n\n\n    </div>\n</div>\n\n  <div class=\"panel white\">\n    <h3>Gauge ranges</h3>\n\n    <div id=\"gauges\"></div>\n  </div>\n\n  {% include \"styleguide/sparklines.html\" %}\n\n  <script src=\"https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js\"></script>\n\n{% endblock base_content %}\n"
  },
  {
    "path": "python/nav/web/templates/syslogger/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_additional_head %}\n  <script>require([\"src/syslogger\"]);</script>\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/syslogger.css\"/>\n{% endblock %}\n\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'Syslog Analyzer' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% block content %}\n\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/syslogger/frag-errors.html",
    "content": "{% if errors %}\n<table class=\"listtable\">\n    <caption>Parsing errors</caption>\n    <tbody>\n    {% for err in errors %}\n    <tr>\n        <td>{{ err }}</td>\n    </tr>\n    {% endfor %}\n    </tbody>\n    <tbody class=\"footer\">\n    <tr>\n        <th>Total {{ errors_count }} error conditions</th>\n    </tr>\n    </tbody>\n</table>\n{% else %}\n<div>\n    <p>No error conditions from the parsing of the syslog files has been saved.\n        This probably means all the log messages have been parsed successfully.</p>\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/syslogger/frag-exceptions.html",
    "content": "{% if exceptions_mode %}\n{% if exceptions %}\n<table class=\"listtable\">\n    <caption>Priority exceptions</caption>\n    <tbody>\n    {% for option, pri in exceptions %}\n    <tr>\n        <td>{{ option }}</td>\n        <td>{{ pri }}</td>\n    </tr>\n    {% endfor %}\n    </tbody>\n</table>\n{% else %}\n<div>\n    <p>You have not defined any priority exceptions in the <code>logger.conf</code>\n        configuration file.</p>\n</div>\n{% endif %}\n{% endif %}"
  },
  {
    "path": "python/nav/web/templates/syslogger/frag-results.html",
    "content": "<div class=\"logger_search_results\">\n    {% if aggregates %}\n        <p>Request generated at {{ timestamp }}. <a href=\"{{ bookmark }}\">Hotlink for search</a></p>\n        <div class=\"multitable\">\n            {% for name, aggregate in aggregates.items %}\n                <table class=\"listtable\" >\n                    <caption>{{ name }}</caption>\n                    <thead>\n                        <tr>\n                            <th>Count</th>\n                            {% for key in aggregate.headers %}\n                                <th>{{ key }}</th>\n                            {% endfor %}\n                        </tr>\n                    </thead>\n                    <tbody>\n                        {% for title in aggregate.values %}\n                            <tr>\n                                {# Someone find a better way to do this please #}\n                                {% for key, value in title.items %}\n                                    {% if name == \"Origin\" %}\n                                        {% if key == \"sum\" %}\n                                            <td><a class=\"syslog_origin\" data-show_log=\"on\"  data-origin=\"{{title.origin__name}}\" href=\"{{ bookmark }}&origin={{title.origin__name}}&show_log=on\">{{ title.sum }}</a></td>\n                                        {% else %}\n                                            <td><a class=\"syslog_origin\" data-origin=\"{{title.origin__name}}\" href=\"{{ bookmark }}&origin={{title.origin__name}}\">{{ title.origin__name }}</a></td>\n                                        {% endif %}\n                                    {% endif %}\n                                    {% if name == \"Type\" %}\n                                        {% if key == 'type__facility' %}\n                                        <td><a data-facility=\"{{value}}\" href=\"{{ bookmark }}&facility={{value}}\">{{ value }}</a></td>\n                                        {% endif %}\n                                        {% if key == 'type__priority__keyword' %}\n                                            <td><a data-priority=\"{{value}}\" href=\"{{ bookmark }}&priority={{value}}\">{{ value }}</a></td>\n                                        {% endif %}\n                                        {% if key == 'type__mnemonic' %}\n                                            <td><a data-mnemonic=\"{{value}}\" href=\"{{ bookmark }}&mnemonic={{value}}\">{{ value }}</a></td>\n                                        {% endif %}\n                                        {% if key == 'sum' %}\n                                            <td><a data-show_log=\"on\" data-facility=\"{{title.type__priority__keyword}}\" data-mnemonic=\"{{title.type__mnemonic}}\" data-priority=\"{{title.type__priority__keyword}}\" href=\"{{ bookmark }}&facility={{value}}\">{{ value }}</a></td>\n                                        {% endif %}\n                                    {% endif %}\n                                    {% if name == \"Priorities\" %}\n                                        {% if key == \"sum\" %}\n                                            <td><a data-show_log=\"on\" data-priority=\"{{title.newpriority__keyword}}\" href=\"{{ bookmark }}&priority={{title.newpriority__keyword}}\">{{ value }}</a></td>\n                                        {% else %}\n                                            <td><a data-priority=\"{{value}}\" href=\"{{ bookmark }}&priority={{value}}\">{{ value }}</a></td>\n                                        {% endif %}\n\n                                    {% endif %}\n                                {% endfor %}\n                            </tr>\n                        {% endfor %}\n                    </tbody>\n                </table>\n            {% endfor %}\n        </div>\n    {% endif %}\n    {% if show_log %}\n        {% if log_messages %}\n            <table class=\"listtable full-width log\">\n                <caption>Log</caption>\n                <thead>\n                <tr>\n                    <th>Time</th>\n                    <th>Origin</th>\n                    <th>Message type</th>\n                    <th>Message</th>\n                </tr>\n                </thead>\n                <tbody>\n                    {% for mess in log_messages %}\n                        <tr>\n                            <td>{{ mess.time }}</td>\n                            <td class=\"syslog_origin\">{{ mess.origin.name }}</td>\n                            <td>{{ mess.type.priority.keyword }}</td>\n                            <td>{{ mess.message }}</td>\n                        </tr>\n                    {% endfor %}\n                </tbody>\n            </table>\n        {% else %}\n            <div id=\"no_log_messages\">\n                No log-messages\n            </div>\n        {% endif %}\n    {% endif %}\n</div>"
  },
  {
    "path": "python/nav/web/templates/syslogger/frag-search-form-fieldset.html",
    "content": "{% extends \"custom_crispy_templates/flat_fieldset.html\" %}\n\n{% block fieldset_legend %}\n  {{ block.super }}\n  <a href=\"http://www.cisco.com/en/US/docs/ios/system/messages/guide/sm_cnovr.html\"><i\n      class=\"fa fa-info-circle\"></i></a>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/syslogger/frag-search.html",
    "content": "<div id=\"syslog_search\">\n    <div id=\"domain_strip\" class=\"hidden\">{{ domain_strip }}</div>\n    <div class=\"row\">\n        <div class=\"large-3 column\">\n\n            {% if form %}\n            <form id=\"syslog_search_form\" action=\"{{ form_target }}\" method=\"get\">\n                {% include 'custom_crispy_templates/_form_content.html' %}\n                <button name=\"send\" data-target=\"{{ form_target }}\" class=\"button\">Search</button>\n            </form>\n\n\n            {% endif %}\n        </div>\n        <div class=\"large-9 column\">\n            <div id=\"syslog_loader\"></div>\n            {% include \"syslogger/frag-results.html\" %}\n        </div>\n    </div>\n</div>\n<script>\n    $(function () {\n        $('.select2').select2();\n    });\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/syslogger/index.html",
    "content": "{% extends \"syslogger/base.html\" %}\n\n\n\n{% block content %}\n\n<div id=\"loggerinfotabs\" class=\"ui-helper-hidden\">\n\n<div id=\"moduletabs\">\n    <ul>\n        <li><a title=\"search\" href=\"{% url 'logger_search_group' %}\">Search</a>\n        </li>\n        <li><a title=\"parsing_errors\" href=\"{% url 'logger_errors' %}\">Parsing\n            errors?</a></li>\n        <li><a title=\"priority_exceptions\" href=\"{% url 'logger_priority_exceptions' %}\">Priority\n            exceptions</a></li>\n    </ul>\n</div>\n\n</div>\n{% endblock %}\n\n"
  },
  {
    "path": "python/nav/web/templates/threshold/_threshold_help_modal.html",
    "content": "<h4>How to create a threshold rule</h4>\n\n<h4 class=\"subheader\">Finding the target</h4>\n<p>\n    To create a threshold rule you need to find the target of the threshold.\n    The target is the value you want to create a threshold for, for instance\n    memory and cpu usage, response time and so on.\n</p>\n\n<p>\n    To find the target, start typing in the target field. All devices in NAV\n    are located under 'nav.devices'. Use that as a starting point. Then use a\n    dot (.) to list the devices we collect statistics from. A star (*)\n    indicates a wildcard.\n</p>\n\n<p>\n    Continue searching until you find the target you are looking for. When\n    you select a valid target, a graph will be displayed showing the last\n    values for the selected target.\n    <strong>Examples:</strong>\n</p>\n<ul class=\"inside\">\n    <li><code>nav.devices.*.ping.roundTripTime</code> - matches all\n        roundtriptimes of all the devices.\n    </li>\n    <li><code>nav.devices.*.sensors.*Temp*</code> - matches all temperature\n        sensors of all the devices.\n    </li>\n</ul>\n\n<h4 class=\"subheader\">Setting the threshold</h4>\n\n<p>\n    When you have found the target you must set a threshold. We also\n    recommend setting a clear-value. The clear-value determines when a value\n    is considered 'back to normal'.\n</p>\n\n<p>\n    <strong>Example:</strong> The graph shows us that the cpu usage of a\n    switch is normally\n    between 5-10%. We set a threshold of >30%. We will then get an alert when\n    this threshold is surpassed. We set a clear-value of <20%. This means\n    that when the cpu usage goes below 20% a clear alert is sent and the\n    value is considered back to normal. If we do not set a clear-value it\n    will automatically be set to the negation of the threshold, in this case\n    <30%.\n</p>\n"
  },
  {
    "path": "python/nav/web/templates/threshold/base.html",
    "content": "{% extends \"base.html\" %}\n{% load popover tools %}\n\n{% block footer_scripts %}\n  <script>\n    require(['src/libs/tablesort_extensions'], function (tablesort) {\n      var table = document.getElementById('thresholdrules');\n      if (table) {\n        tablesort.init(table, {\n          headers: {\n            1: {sorter: \"number\"},\n            2: {sorter: \"number\"},\n            6: {sorter: \"iso-datetime\"},\n            7: {sorter: false}\n          }\n        });\n      }\n    });\n  </script>\n{% endblock %}\n\n{% block base_content %}\n  {% with tool=current_user_data.tools|get_tool:'Thresholds' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% if rules %}\n    <a href=\"{% url 'threshold-add' %}\" class=\"button small\">Add rule</a>\n\n    <table id=\"thresholdrules\" class=\"listtable tablesorter\">\n      <caption>Existing threshold rules</caption>\n      <thead>\n      <tr>\n        <th>Target</th>\n        <th>Threshold</th>\n        <th>Clear</th>\n        <th class=\"hide-for-small\">Description</th>\n        <th class=\"hide-for-medium-down\">Period</th>\n        <th class=\"hide-for-medium-down\">Creator</th>\n        <th class=\"hide-for-medium-down\">Last edited</th>\n        <th>&nbsp;</th>\n      </tr>\n      </thead>\n      <tbody>\n      {% for rule in rules %}\n        <tr>\n          <td>\n            <a href=\"{% url 'threshold-edit' rule.id %}\">{{ rule.target }}</a>\n          </td>\n          <td>{{ rule.alert }}</td>\n          <td>{{ rule.clear }}</td>\n          <td class=\"hide-for-small\">{{ rule.description }}</td>\n          <td class=\"hide-for-medium-down\">{{ rule.period|default_if_none:'' }}</td>\n          <td class=\"hide-for-medium-down\">{{ rule.creator.name }}</td>\n          <td class=\"hide-for-medium-down\" data-sort=\"{{ rule.created|date:'c' }}\">{{ rule.created }}</td>\n          <td>\n            {% with rule_id_str=rule.id|stringformat:\"s\" %}\n              {% with popover_id=\"delete-popover-\"|add:rule_id_str %}\n                {% url 'threshold-delete' rule.id as delete_url %}\n                {% confirm_popover popover_id=popover_id action_url=delete_url title=\"Delete this rule?\" cancel_text=\"No way!\" align=\"end\" %}\n              {% endwith %}\n            {% endwith %}\n          </td>\n        </tr>\n      {% endfor %}\n      </tbody>\n    </table>\n\n  {% else %}\n    <p>\n      No threshold rules defined. <a href=\"{% url 'threshold-add' %}\">Add one.</a>\n    </p>\n  {% endif %}\n\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/threshold/frag-thresholdlist.html",
    "content": "  {% if metric.thresholds %}\n  {% for rule in metric.thresholds %}\n  <strong>\n    <a href=\"{% url 'threshold-edit' rule.id %}\"\n       {% if rule.description %}title=\"{{ rule.description }}\"{% endif %}>\n      {{ rule.alert }}\n    </a>\n  </strong>{% if not forloop.last %},{% endif %}\n  {% endfor %}\n  <a href=\"{% url 'threshold-add' metric.id %}\"\n     title=\"Add a new threshold rule for this metric\"\n     class=\"table-button secondary\">\n    +\n  </a>\n  {% else %}\n  <a href=\"{% url 'threshold-add' metric.id %}\"\n     title=\"Add a new threshold rule for this metric\"\n     class=\"table-button secondary\">\n    Add threshold\n  </a>\n  {% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/threshold/set_threshold.html",
    "content": "{% extends \"base.html\" %}\n{% load popover %}\n\n{% block base_header_additional_head %}\n  <script>require(['src/threshold']);</script>\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/jquery-ui-1.8.21.custom.css\">\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/threshold.css\">\n{% endblock %}\n\n{% block base_content %}\n  <h4>{{ heading }}</h4>\n\n  <p><a href=\"{% url 'threshold-index' %}\">Back to thresholds</a></p>\n\n  <button\n          class=\"button small secondary\"\n          hx-get=\"{% url 'threshold-help-modal' %}\"\n          hx-target=\"body\"\n          hx-swap=\"beforeend\"\n  >\n      Help\n  </button>\n\n  <div class=\"row\">\n\n    <div class=\"column medium-6\">\n      <div class=\"dataelement\"\n           data-url=\"{% url 'threshold-search' %}\"\n           data-renderurl=\"{% url 'threshold-graph' %}\"\n           data-metric=\"{{ metric|default_if_none:'' }}\">\n        {% include 'custom_crispy_templates/flat_form.html' %}\n      </div>\n      {% if id %}\n        {% url 'threshold-delete' id as delete_url %}\n        {% confirm_popover popover_id=\"confirm-delete\" action_url=delete_url title=\"Delete this rule?\" trigger_text=\"Delete\" trigger_icon=\"\" trigger_classes=\"button alert\" cancel_text=\"No way!\" %}\n      {% endif %}\n    </div>\n\n    <div class=\"column medium-6\">\n      <button id=\"refresh-graph\" class=\"small secondary\">Reload graph</button>\n      <div class=\"metricGraph\"></div>\n    </div>\n\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/toolbar.html",
    "content": "<div id=\"toolbar\">\n    <ul>\n        {% for t in available_tools %}\n        <li>\n            <a href=\"{{ t.uri}}\">\n                <img src=\"{{ t.icon }}\" alt=\"{{ t.name }}\" />\n                <span class=\"tool_name\">{{ t.name }}</span>\n            </a>\n        </li>\n        {% endfor %}\n    </ul>\n    <div>&ensp;</div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/_confirm_token_delete.html",
    "content": "{# Display form for deleting a token #}\n{% load popover %}\n{% url delete_url token.pk as action_url %}\n{% confirm_popover popover_id=\"confirm-token-delete\" action_url=action_url title=\"Delete this token?\" confirm_text=\"Yes, delete\" cancel_text=\"No, don't delete\" trigger_text=\"Delete token\" trigger_classes=\"button small alert\" side=\"top\" %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/account_detail.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block content %}\n\n  <a href=\"{% url 'useradmin-account_list' %}\">Back to account list</a>\n\n  <div class=\"panel white\">\n\n    {# Heading and actions buttons #}\n    <div class=\"row\">\n\n      {# HEADING #}\n      <div class=\"column large-6\">\n        <h4>\n          {% if account %}\n            Editing account \"{{ account.name }}\" (#{{ account.id }})\n          {% else %}\n            Create new account\n          {% endif %}\n        </h4>\n      </div> {# column #}\n\n\n      {% comment %} ACTION BUTTONS {% endcomment %}\n      <div class=\"column large-6\">\n\n        <ul class=\"inline-list action-list\">\n          {% if account and current_user_data.is_admin and not current_user_data.sudoer %}\n            {% if current_user_data.account.id != account.id %}\n              <li>\n                <form action=\".\" method=\"post\">\n                  {% csrf_token %}\n                  <input type=\"hidden\" name=\"account\" value=\"{{ account.id }}\"/>\n                  <input type=\"submit\" value=\"Operate as this user\"\n                         name=\"submit_sudo\" class=\"button small\"/>\n                </form>\n              </li>\n            {% endif %}\n          {% endif %}\n\n          {% if account and not account.is_system_account %}\n            <li>\n              <a href=\"{% url 'useradmin-account_delete' account.id %}\"\n                 class=\"button alert small\">\n                Delete account\n              </a>\n            </li>\n          {% endif %}\n        </ul>\n\n      </div>\n\n    </div> {# row #}\n\n\n    {# AUDITLOG #}\n    {% if account and request.user.is_admin %}\n      {% include 'useradmin/frag-auditlog.html' %}\n    {% endif %}\n\n    <div class=\"row\">\n\n      {% comment %} ACCOUNT FORM {% endcomment %}\n      {% if account_form %}\n        <div class=\"column medium-6 large-3\">\n          {% include 'custom_crispy_templates/flat_form.html' with form=account_form %}\n        </div>\n      {% endif %}\n\n\n      {% if account %}\n\n        {% comment %} ORGANIZATIONS {% endcomment %}\n        <div class=\"column medium-6 large-3\">\n          <fieldset>\n            <legend>Organizations</legend>\n            {% if account.organizations.all %}\n              <div class=\"long-listing\">\n                <table class=\"hover expand\">\n                  <tbody>\n                    {% for org in account.organizations.all %}\n                      <tr>\n                        <td>{{ org }}</td>\n                        <td class=\"text-right\">\n                          <a href=\"{% url 'useradmin-account_organization_remove' account.id org.id %}\"\n                             class=\"table-button secondary\">Remove</a>\n                        </td>\n                      </tr>\n                    {% endfor %}\n                  </tbody>\n                </table>\n              </div>\n            {% else %}\n              <p>Not member of any organizations.</p>\n            {% endif %}\n\n            {% if org_form %}\n              <h6>Add organization membership</h6>\n              {% include 'custom_crispy_templates/flat_form.html' with form=org_form %}\n            {% endif %}\n\n          </fieldset>\n\n        </div>\n        {# END ORGANIZATIONS #}\n\n\n        {# GROUP MEMBERSHIPS #}\n        <div class=\"column medium-12 large-6\">\n          <fieldset>\n            <legend>Group memberships</legend>\n\n            {% if account.groups.all %}\n              <div class=\"long-listing\">\n                <table class=\"hover expand\">\n                  <tbody>\n                    {% for group in account.groups.all %}\n                      <tr>\n                        <td>\n                          <a href=\"{% url 'useradmin-group_detail' group.id %}\">{{ group }}</a>\n                        </td>\n                        <td>\n                          {{ group.description }}\n                        </td>\n                        <td class=\"text-right\">\n                          {% if not group.is_protected_group %}\n                            <a href=\"{% url 'useradmin-account_group_remove' account.id group.id %}\"\n                               class=\"table-button secondary\">Remove</a>\n                          {% else %}\n                            &nbsp;\n                          {% endif %}\n                        </td>\n                      </tr>\n                    {% endfor %}\n                  </tbody>\n                </table>\n              </div>\n            {% else %}\n              <p>Not member of any groups.</p>\n            {% endif %}\n\n            {% if group_form %}\n              <h6>Add group membership</h6>\n              {% include 'custom_crispy_templates/flat_form.html' with form=group_form %}\n            {% endif %}\n          </fieldset>\n        </div> {# end column #}\n        {# END GROUP MEMBERSHIPS #}\n\n\n      {% endif %} {# endif account #}\n    </div> {# end row #}\n\n  </div> {# panel #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/account_list.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block content %}\n\n  <div class=\"tabs\">\n    {% include 'useradmin/tabs.html' %}\n\n    <div class=\"tabcontent\">\n      {% include 'useradmin/feedback.html' %}\n\n      <a href=\"{% url 'useradmin-account_new' %}\" class=\"button small\">\n        Create new account\n      </a>\n\n      {% if request.user.is_admin %}\n        <div>\n          {% include 'useradmin/frag-auditlog.html' %}\n        </div>\n      {% endif %}\n\n      <table class=\"listtable\">\n        <caption>\n          Account List\n        </caption>\n        <thead>\n          <tr>\n            <th>Login</th>\n            <th>Name</th>\n            <th>Status</th>\n            <th># of groups</th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for account in accounts %}\n            <tr>\n              <td>\n                <a href=\"{% url 'useradmin-account_detail' account.id %}\">{{ account.login }}</a>\n              </td>\n              <td>{{ account.name }}</td>\n              <td>\n                  {% if account.ext_sync %}<span class=\"label info\" title=\"This account is managed externally via {{ account.ext_sync }}\">{{ account.ext_sync }}</span>{% endif %}\n\n                  {% if account.locked %}\n                      <i class=\"fa fa-lock warning\" title=\"This account is locked: It cannot be used to log in.\"></i>\n                  {% elif account.has_plaintext_password %}\n                      <i class=\"fa fa-warning warning\" title=\"This account uses an insecure plaintext password. It should be reset.\"></i>\n                  {% elif account.has_old_style_password_hash %}\n                      <i class=\"fa fa-warning warning\" title=\"This account has a password using an old style insecure hashing method. Its password has probably not been changed in years - or, in the case of an LDAP user, they might not have logged in in years.\"></i>\n                  {% elif account.has_deprecated_password_hash_method %}\n                      <i class=\"fa fa-warning warning\" title=\"This account has a password hashed with an older, deprecated method. Its password has probably not been changed in a long time - or, in the case of an LDAP user, they might not have logged in in a long time.\"></i>\n                  {% endif %}\n              </td>\n              <td>{{ account.groups.all|length }}</td>\n            </tr>\n          {% endfor %}\n        </tbody>\n        <tfoot>\n          <tr>\n            <th colspan=\"4\">{{ accounts|length }} accounts</th>\n          </tr>\n        </tfoot>\n      </table>\n\n    </div>\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/base.html",
    "content": "{% extends \"base.html\" %}\n{% load tools %}\n\n{% block base_header_title %}NAV - User Administration{% endblock %}\n\n{% block base_header_additional_head %}\n    <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/useradmin.css\" />\n\n  <style>\n   .long-listing {\n       border: 1px solid lightgray;\n       margin-bottom: 1em;\n       max-height: 250px;\n       overflow: auto;\n   }\n\n   .long-listing > table {\n       border: none;\n       margin-bottom: 0;\n   }\n   .action-list .button {\n       margin-bottom: 0;\n   }\n  </style>\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'User and API Administration' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  {% if messages %}\n    {% for message in messages %}\n      <div class=\"alert-box with-icon {% if message.tags %}{{ message.tags }}{% endif %}\"\">\n        {{ message }}\n      </div>\n    {% endfor %}\n  {% endif %}\n\n  {% block content %}\n  {% endblock %}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/delete.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block content %}\n\n  <a href=\"{{ back }}\" title=\"Go back to where you came from\">Go back</a>\n  <div class=\"panel white\">\n\n    <h4>{{ action|capfirst }}</h4>\n\n    <p>\n      Are you sure you want to {{ action }} {{ name }}?\n    </p>\n\n    <form action=\"\" method=\"post\">\n      {% csrf_token %}\n      {% if type and id %}\n        <input type=\"hidden\" name=\"{{ type }}\" value=\"{{ id }}\"/>\n      {% endif %}\n      <input type=\"submit\" value=\"Yes, {{ action }}\" class=\"button small\"/>\n      <a href=\"{{ back }}\" class=\"button small secondary\">No, do not {{ action }}</a>\n    </form>\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/feedback.html",
    "content": "{% if current_user_data.messages %}\n  <div class=\"alert-box\">\n    <ul class=\"no-bullet\">\n      {% for m in current_user_data.messages %}\n        <li class=\"{{ m.type }}\">{{ m.message }}</li>\n      {% endfor %}\n    </ul>\n  </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/frag-auditlog.html",
    "content": "<h5 class=\"latest-changes-heading\" style=\"display: inline-block; cursor: pointer\">\n  AuditLog <i class=\"fa fa-caret-square-o-right\"></i>\n</h5>\n<div class=\"latest-changes-content row\" style=\"display: none\">\n  <div class=\"small-12 column\">\n    {% include \"auditlog/_logentry_list.html\" %}\n  </div>\n</div>\n<script>\n $(function(){\n     $('.latest-changes-heading').click(function(){\n         $('.latest-changes-content').slideToggle();\n         $('.latest-changes-heading i').toggleClass('fa-caret-square-o-right fa-caret-square-o-down');\n     });\n });\n</script>\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/frag-external-account-fieldset.html",
    "content": "{% extends \"custom_crispy_templates/flat_fieldset.html\" %}\n\n{% block fieldset_fields %}\n    <p class='alert-box'>External authenticator: {{ account.ext_sync }}</p>\n    {{ block.super }}\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/group_detail.html",
    "content": "{% extends \"useradmin/base.html\" %}\n{% block base_header_additional_head %}\n  {{ block.super }}\n  <style>\n   #grant-privileges-header {\n       [aria-describedby] {\n           cursor: pointer;\n           font-size: 12px;\n           margin-left: 4px;\n       }\n   }\n\n  </style>\n{% endblock %}\n{% block content %}\n\n  <a href=\"{% url 'useradmin-group_list' %}\">Back to group list</a>\n\n\n  <div class=\"panel white\">\n\n    {% if group %}\n      <a href=\"{% url 'useradmin-group_delete' group.id %}\"\n         class=\"button small alert right\">Delete group</a>\n      <h4>Editing group \"{{ group.name }}\"</h4>\n    {% else %}\n      <h4>Create new group</h4>\n    {% endif %}\n\n\n    <div class=\"float-clear\"></div>\n\n\n    {# Forms start here #}\n    <div class=\"row\">\n\n\n      {# GROUP FORM #}\n      <div class=\"column medium-6 large-3\">\n        {% if group_form %}\n          {% include 'custom_crispy_templates/flat_form.html' with form=group_form %}\n        {% endif %}\n      </div>\n\n\n      {% if group %}\n        {% comment %} START GROUP MEMBERS {% endcomment %}\n        <div class=\"column medium-6 large-3\">\n\n          <fieldset id=\"group-members-fieldset\">\n            <legend>Group members</legend>\n\n            {% if group.accounts.all %}\n              <div class=\"long-listing\">\n                <table class=\"listtable hover expand\">\n                  <tbody>\n                    {% for account in group.accounts.all %}\n                      <tr>\n                        <td>\n                          <a href=\"{% url 'useradmin-account_detail' account.id %}\">{{ account }}</a>\n                        </td>\n                        <td class=\"text-right\">\n                          {% if not group.is_protected_group %}\n                            <a href=\"{% url 'useradmin-group_account_remove' group.id account.id %}\"\n                               class=\"table-button small secondary\">Remove</a>\n                          {% endif %}\n                        </td>\n                      </tr>\n                    {% endfor %}\n                  </tbody>\n                </table>\n              </div>\n            {% else %}\n              <p>Group does not have any members.</p>\n            {% endif %}\n\n            <h6>Add group member</h6>\n            {% include 'custom_crispy_templates/flat_form.html' with form=account_form %}\n          </fieldset>\n        </div>\n        {# END GROUP MEMBERS #}\n\n\n        {% comment %} START GROUP PRIVILEGES {% endcomment %}\n        <div class=\"column large-6\">\n\n          <fieldset>\n            <legend>Group privileges</legend>\n\n            {% if group.privileges.all %}\n              <div class=\"long-listing\">\n                <table class=\"listtable expand hover\">\n                  <thead>\n                    <tr>\n                      <th>Type</th>\n                      <th>Target</th>\n                      <th>&nbsp;</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {% for privilege in group.privileges.all %}\n                      <tr>\n                        <td>{{ privilege.type }}</td>\n                        <td class=\"break-word\">{{ privilege.target }}</td>\n                        <td class=\"text-right\">\n                          <a href=\"{% url 'useradmin-group_privilege_remove' group.id privilege.id %}\"\n                             class=\"table-button secondary\">\n                            Revoke\n                          </a>\n                        </td>\n                      </tr>\n                    {% endfor %}\n                  </tbody>\n                </table>\n              </div>\n            {% else %}\n              <p>Group has no privileges set.</p>\n            {% endif %}\n\n            {% if privilege_form %}\n\n              <h6 id=\"grant-privileges-header\">\n                Grant privileges\n                  <span class=\"nav-tooltip\">\n                    <a href=\"http://docs.python.org/howto/regex.html\" aria-describedby=\"grant-tooltip\">\n                        <i class=\"fa fa-info-circle\" ></i>\n                        <span>How to guide</span>\n                    </a>\n                    <span id=\"grant-tooltip\" role=\"tooltip\">\n                        See the <em>How to guide</em> for more information\n                        on the Regular expressions used for matching targets for\n                        privileges like 'web_access'.\n                    </span>\n                  </span>\n              </h6>\n\n              {% include 'custom_crispy_templates/flat_form.html' with form=privilege_form %}\n            {% endif %}\n\n          </fieldset>\n        </div>\n        {# END GROUP PRIVILEGES #}\n\n\n      {% endif %} {# if group #}\n\n    </div> {# end row #}\n\n  </div> {# end panel #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/group_list.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block content %}\n\n  <div class=\"tabs\">\n    {% include 'useradmin/tabs.html' %}\n\n    <div class=\"tabcontent\">\n      {% include 'useradmin/feedback.html' %}\n\n      <a href=\"{% url 'useradmin-group_new' %}\" class=\"button small\">\n        Create new group\n      </a>\n\n      <table class=\"listtable\">\n\n        <caption>\n          Group List\n        </caption>\n\n        <thead>\n        <tr>\n          <th>Name</th>\n          <th>Description</th>\n          <th># of members</th>\n        </tr>\n        </thead>\n\n        <tbody>\n        {% for group in groups %}\n          <tr>\n            <td>\n              <a href=\"{% url 'useradmin-group_detail' group.id %}\">{{ group.name }}</a>\n            </td>\n            <td>{{ group.description }}</td>\n            <td>{{ group.accounts.all|length }}</td>\n          </tr>\n        {% endfor %}\n        </tbody>\n\n        <tfoot>\n        <tr>\n          <th colspan=\"3\">{{ groups|length }} groups</th>\n        </tr>\n        </tfoot>\n\n      </table>\n\n    </div>\n\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_created.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block base_header_additional_head %}\n  {% include \"useradmin/token_card_style.html\" %}\n{% endblock %}\n\n\n{% block content %}\n\n  Back to\n  <a href=\"{% url 'useradmin-jwt_list' %}\">token list</a>\n\n  <div id=\"form-panel\" class=\"token-card panel white\">\n\n    <h3>\n        {{ object.name }}\n    </h3>\n\n    <code id=\"token\" style=\"display:block; white-space:pre-wrap\">{{ token }}</code>\n\n    <button onclick=\"myFunction()\">Copy to clipboard</button>\n\n    <script>\n        function myFunction() {\n        var copyText = document.getElementById(\"token\");\n        navigator.clipboard.writeText(copyText.innerHTML);\n        }\n    </script>\n\n\n    <div class=\"float-clear\"></div>\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_detail.html",
    "content": "{% extends \"useradmin/base.html\" %}\n{% load info %}\n\n{#  Display information about a single Json Web Token #}\n\n{% block base_header_additional_head %}\n  {% include \"useradmin/token_card_style.html\" %}\n{% endblock %}\n\n{% block content %}\n\n  <a href=\"{% url 'useradmin-jwt_list' %}\">Back to token list</a>\n\n  <div class=\"row\">\n    <div class=\"column small-12\">\n\n      <div class=\"token-card panel white\">\n        <a href=\"{% url 'useradmin-jwt_edit' object.pk %}\" class=\"right\">Edit token</a>\n\n        <h3>Token details</h3>\n\n        <h5>Name</h5>\n        <p>\n          <code>{{ object.name }}</code>\n        </p>\n\n        {% if object.description %}\n          <h5>Description</h5>\n          <div class=\"panel\">\n            <p>\n              {{ object.description }}\n            </p>\n          </div>\n        {% endif %}\n\n        <h5>Status:\n          {% if object.revoked %}\n            <span class=\"label alert\" title=\"Token Revoked\">\n              Revoked\n            </span>\n          {% elif not object.is_active%}\n          <span class=\"label warning\" title=\"Token Inactive\">\n            Inactive\n          </span>\n          {% else %}\n          <span class=\"label success\" title=\"Token Active\">\n            Active\n          </span>\n          {% endif %}\n        </h5>\n\n        {% if object.revoked %}\n        <div class=\"alert-box warning with-icon\">\n          This token has been revoked\n        </div>\n        {% else %}\n        <div class=\"alert-box {% if not object.is_active %}warning with-icon{% endif %}\">\n          Active from {{ object.activates }} to {{ object.expires }}\n        </div>\n        {% endif %}\n\n        <h5>Permission:\n          {{ object.permission }}\n            <span class=\"nav-tooltip\">\n                <i class=\"fa fa-icon-circle\" aria-describedby=\"permission-help-text\"></i>\n                <span id=\"permission-help-text\" role=\"tooltip\">\n                  {{ object.permission_help_text }}\n                </span>\n            </span>\n        </h5>\n\n        <h5>Endpoints:</h5>\n        <p>\n        {% if object.endpoints %}\n          {% for key, value in object.endpoints|sortdict  %}\n            <span class=\"label\" title=\"{{ value }}\">\n              {{ key }}\n            </span>\n          {% endfor %}\n        {% else %}\n            No endpoints set\n        {% endif %}\n        </p>\n\n\n        <ul class=\"no-bullet\">\n          <li>\n              <small>Created: {{ object.created|default:'N/A' }}</small>\n          </li>\n          <li>\n            <small>Last successfully used: {{ object.last_used|default:'Never' }}</small>\n          </li>\n        </ul>\n\n      </div> {# end panel #}\n\n\n    </div> {# end column #}\n  </div> {# end row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_edit.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/multi-select.css\">\n  <style>\n    #edit-jwt-form input[type=submit] { float:left; margin-right: 1.25rem }\n    label[for='id_endpoints'] { display: none; }\n  </style>\n  <script>\n    require(['jquery-multi-select'], function(){\n      $(function(){\n        /* Add multiselect for selecting endpoints */\n        var msSelector = '#id_endpoints';\n        $(msSelector).multiselect({\n          selectableHeader: 'Available endpoints <a id=\"select-all-endpoints\" class=\"right\">Select all</a>',\n          selectionHeader: 'Selected endpoints <a id=\"remove-all-endpoints\" class=\"right\">Remove all</a>',\n          afterInit: function(){\n            $('#select-all-endpoints').click(function(){ $(msSelector).multiSelect('select_all') });\n            $('#remove-all-endpoints').click(function(){ $(msSelector).multiSelect('deselect_all') });\n          }\n        });\n      });\n    });\n  </script>\n{% endblock %}\n\n\n{% block content %}\n\n  Back to\n  <a href=\"{% url 'useradmin-jwt_list' %}\">token list</a>\n  {% if object %}\n    | <a href=\"{% url 'useradmin-jwt_detail' object.pk %}\">token details</a>\n  {% endif %}\n\n  <div id=\"form-panel\" class=\"panel white\">\n\n    <h4>\n      {% if object %}\n        Edit token\n      {% else %}\n        Create new token\n      {% endif %}\n    </h4>\n\n\n    {% include 'custom_crispy_templates/flat_form.html' %}\n\n\n    {% if object %}\n      {# Display button for revoking a token #}\n      <form action=\"{% url 'useradmin-jwt_revoke' object.pk %}\" method=\"post\">\n        {% csrf_token %}\n        <input type=\"submit\" value=\"Revoke token\" class=\"button small\">\n      </form>\n\n      {# Display button for recreating a token #}\n      <form action=\"{% url 'useradmin-jwt_recreate' object.pk %}\" method=\"post\">\n        {% csrf_token %}\n        <input type=\"submit\" value=\"Recreate token\" class=\"button small\">\n      </form>\n\n      {% include 'useradmin/_confirm_token_delete.html' with delete_url='useradmin-jwt_delete' token=object %}\n    {% endif %}\n\n    <div class=\"float-clear\"></div>\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_list.html",
    "content": "{% extends \"useradmin/base.html\" %}\n{% load info %}\n\n{% block base_header_additional_head %}\n  <style>\n    #jwt-list-table .label { cursor: help; margin-bottom: 1px; }\n  </style>\n  <script>\n    require(['src/libs/tablesort_extensions'], function(tablesort) {\n      const table = document.getElementById('jwt-list-table');\n      if (table && table.querySelector('tbody tr')) {\n        tablesort.init(table, {\n          sortList: [[2, 0]],\n          headers: {\n            2: {sorter: 'iso-datetime'},\n            3: {sorter: 'iso-datetime'},\n            4: {sorter: 'iso-datetime'},\n            5: {sorter: false},\n            6: {sorter: false},\n            7: {sorter: false},\n            8: {sorter: false}\n          }\n        });\n      }\n    });\n  </script>\n{% endblock %}\n\n{% block content %}\n\n  <div class=\"tabs\">\n    {% include 'useradmin/tabs.html' %}\n\n    <div class=\"tabcontent\">\n\n      {% if not is_configured %}\n        {% include 'useradmin/jwt_not_enabled_content.html' %}\n      {% else %}\n\n      <a href=\"{% url 'useradmin-jwt_create' %}\" class=\"button small\">\n        Create new token\n      </a>\n\n      {% if request.user.is_admin %}\n        <div>\n          {% include 'useradmin/frag-auditlog.html' %}\n        </div>\n      {% endif %}\n\n      {# Show table with tokens if there are any #}\n      {% if object_list %}\n\n        <table id=\"jwt-list-table\" class=\"listtable hover tablesorter\">\n          <caption>\n            List of issued API tokens\n          </caption>\n\n          <thead>\n            <tr>\n              <th>Name</th>\n              <th>Permission</th>\n              <th>Activates</th>\n              <th>Expires</th>\n              <th class=\"show-for-large-up\">Created</th>\n              <th class=\"show-for-large-up\">Last used</th>\n              <th class=\"show-for-medium-up\">Endpoints</th>\n              <th>Status</th>\n              <th>&nbsp;</th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {% for token in object_list %}\n              <tr>\n                {# Name #}\n                <td>\n                  <a href=\"{% url 'useradmin-jwt_detail' token.pk %}\" title=\"Details\">{{ token.name }}</a>\n                </td>\n\n                {# Permission #}\n                <td>\n                  {{ token.permission }}\n                </td>\n\n                {# Activates #}\n                <td data-sort=\"{{ token.activates|date:'c' }}\">\n                  {{ token.activates }}\n                </td>\n\n                {# Expires #}\n                <td data-sort=\"{{ token.expires|date:'c' }}\">\n                  {{ token.expires }}\n                </td>\n\n                {# Created #}\n                <td class=\"show-for-large-up\" data-sort=\"{{ token.created|date:'c'|default:'last' }}\">{{ token.created|default:'' }}</td>\n\n                {# Last used #}\n                <td class=\"show-for-large-up\" data-sort=\"{{ token.last_used|date:'c'|default:'last' }}\">{{ token.last_used|default:'Never' }}</td>\n\n                {# Endpoints #}\n                <td class=\"show-for-medium-up\">\n                {% if token.endpoints %}\n                  {% for key, value in token.endpoints|sortdict %}\n                    <span class=\"label endpoint\" title=\"{{ value }}\">\n                      {{ key }}\n                    </span>\n                  {% endfor %}\n                {% endif %}\n                </td>\n\n                {# Status #}\n                <td>\n                    {% if token.revoked %}\n                      <span class=\"label alert\" title=\"Token Revoked\">\n                        Revoked\n                      </span>\n                    {% elif not token.is_active %}\n                      <span class=\"label warning\" title=\"Token Inactive\">\n                        Inactive\n                      </span>\n                    {% else %}\n                      <span class=\"label success\" title=\"Token Active\">\n                        Active\n                      </span>\n                    {% endif %}\n                </td>\n\n                {# Link to token edit #}\n                <td>\n                  <a href=\"{% url 'useradmin-jwt_edit' token.pk %}\" title=\"Edit this token\">Edit</a>\n                </td>\n              </tr>\n            {% endfor %}\n          </tbody>\n        </table>\n\n      {% else %}\n\n        {# If there are no tokens, show information about creating one #}\n        <div class=\"alert-box info\">No tokens are issued. Do you want to\n          <a href=\"{% url 'useradmin-jwt_create' %}\">create one</a>?\n        </div>\n\n      {% endif %}\n\n    </div>  {# .tabcontent #}\n    {% endif %}\n  </div>  {# .tabs #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_not_enabled.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block content %}\n<div id=\"form-panel\" class=\"panel white\">\n  {% include 'useradmin/jwt_not_enabled_content.html' %}\n    <div class=\"float-clear\"></div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/jwt_not_enabled_content.html",
    "content": "<h4>\n    You must configure local tokens in\n    <a target=\"_blank\" href=\"/doc/reference/jwt.html#configuring-local-jwt-token-generation\">jwt.conf</a>\n    before using this feature.\n</h4>\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/not-logged-in.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n{% block tabs %}{% endblock %}\n\n{% block outercontent %}\n    <p>Sorry, you are not logged inn. Nothing to see here</p>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/tabs.html",
    "content": "<ul>\n  <li{% if active.account_list %} class=\"tabactive\"{% endif %}>\n    <a href=\"{% url 'useradmin-account_list' %}\">Account List</a>\n  </li>\n  {% block extra_tab_account %}{% endblock %}\n  <li{% if active.group_list %} class=\"tabactive\"{% endif %}>\n    <a href=\"{% url 'useradmin-group_list' %}\">Group List</a>\n  </li>\n  <li{% if active.token_list %} class=\"tabactive\"{% endif %}>\n    <a href=\"{% url 'useradmin-token_list' %}\">API Token List</a>\n  </li>\n  <li{% if active.jwt_list %} class=\"tabactive\"{% endif %}>\n    <a href=\"{% url 'useradmin-jwt_list' %}\">JWT API Token List</a>\n  </li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/token_card_style.html",
    "content": "<style>\n  .token-card { max-width: 470px; overflow-wrap: break-word; }\n  .token-card .label { cursor: help; margin-bottom: 1px; }\n  .token-card code { display: inline-block; width: 100%; }\n</style>\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/token_detail.html",
    "content": "{% extends \"useradmin/base.html\" %}\n{% load info %}\n\n{#  Display information about a single token #}\n\n{% block base_header_additional_head %}\n  {% include \"useradmin/token_card_style.html\" %}\n{% endblock %}\n\n{% block content %}\n\n  <a href=\"{% url 'useradmin-token_list' %}\">Back to token list</a>\n\n  <div class=\"row\">\n    <div class=\"column small-12\">\n\n      <div class=\"token-card panel white\">\n        <a href=\"{% url 'useradmin-token_edit' object.pk %}\" class=\"right\">Edit token</a>\n\n        <h3>Token details</h3>\n\n        <p>\n          <code>{{ object.token }}</code>\n        </p>\n\n        <p>\n          Permission:\n          {{ object.permission }}\n            <span class=\"nav-tooltip\">\n                <i class=\"fa fa-info-circle\" aria-describedby=\"permission-help\"></i>\n                <span id=\"permission-help\" role=\"tooltip\">\n                    {{ object.permission_help_text }}\n                </span>\n            </span>\n        </p>\n\n        <div class=\"alert-box {% if object.is_expired %}warning with-icon{% endif %}\">\n          {% if object.is_expired %}\n            Expired\n          {% else %}\n            Expires\n          {% endif %}\n          {{ object.expires|date:'DATE_FORMAT' }}\n        </div>\n\n        <p class=\"comment\">{{ object.comment|default:'' }}</p>\n\n        <h5>Endpoints</h5>\n        <p>\n        {% if object.endpoints %}\n          {% for key, value in object.endpoints|sortdict  %}\n            <span class=\"label\" title=\"{{ value }}\">\n              {{ key }}\n            </span>\n          {% endfor %}\n        {% else %}\n            No endpoints set\n        {% endif %}\n        </p>\n\n        <ul class=\"no-bullet\">\n          <li>\n              <small>Created: {{ object.created|default:'N/A' }}</small>\n          </li>\n          <li>\n            <small>Last successfully used: {{ object.last_used|default:'Never' }}</small>\n          </li>\n        </ul>\n\n      </div> {# end panel #}\n\n\n    </div> {# end column #}\n  </div> {# end row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/token_edit.html",
    "content": "{% extends \"useradmin/base.html\" %}\n\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/multi-select.css\">\n  <style>\n    #edit-token-form input[type=submit] { float:left; margin-right: 1.25rem }\n    label[for='id_endpoints'] { display: none; }\n  </style>\n  <script>\n    require(['jquery-multi-select'], function(){\n      $(function(){\n        /* Add multiselect for selecting endpoints */\n        var msSelector = '#id_endpoints';\n        $(msSelector).multiselect({\n          selectableHeader: 'Available endpoints <a id=\"select-all-endpoints\" class=\"right\">Select all</a>',\n          selectionHeader: 'Selected endpoints <a id=\"remove-all-endpoints\" class=\"right\">Remove all</a>',\n          afterInit: function(){\n            $('#select-all-endpoints').click(function(){ $(msSelector).multiSelect('select_all') });\n            $('#remove-all-endpoints').click(function(){ $(msSelector).multiSelect('deselect_all') });\n          }\n        });\n      });\n    });\n  </script>\n{% endblock %}\n\n\n{% block content %}\n\n  Back to\n  <a href=\"{% url 'useradmin-token_list' %}\">token list</a>\n  {% if object %}\n    | <a href=\"{% url 'useradmin-token_detail' object.pk %}\">token details</a>\n  {% endif %}\n\n  <div id=\"form-panel\" class=\"panel white\">\n\n    <h4>\n      {% if object %}\n        Edit token\n      {% else %}\n        Create new token\n      {% endif %}\n    </h4>\n\n\n    {% include 'custom_crispy_templates/flat_form.html' %}\n\n\n    {% if object %}\n      {# Display button for revoking a token #}\n      <form action=\"{% url 'useradmin-token_expire' object.pk %}\" method=\"post\">\n        {% csrf_token %}\n        <input type=\"submit\" value=\"Expire token\" class=\"button small\">\n      </form>\n\n      {% include 'useradmin/_confirm_token_delete.html' with delete_url='useradmin-token_delete' token=object %}\n    {% endif %}\n\n    <div class=\"float-clear\"></div>\n\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/useradmin/token_list.html",
    "content": "{% extends \"useradmin/base.html\" %}\n{% load info %}\n\n{% block base_header_additional_head %}\n  <style>\n    #token-list-table .label { cursor: help; margin-bottom: 1px; }\n  </style>\n  <script>\n    require(['src/libs/tablesort_extensions'], function(tablesort) {\n      const table = document.getElementById('token-list-table');\n      if (table && table.querySelector('tbody tr')) {\n        tablesort.init(table, {\n          sortList: [[2, 0]],\n          headers: {\n            2: {sorter: \"iso-datetime\"},\n            3: {sorter: \"iso-datetime\"},\n            4: {sorter: \"iso-datetime\"},\n            5: {sorter: false},\n            6: {sorter: false},\n            7: {sorter: false}\n          }\n        });\n      }\n    });\n  </script>\n{% endblock %}\n\n{% block content %}\n\n  <div class=\"tabs\">\n    {% include 'useradmin/tabs.html' %}\n\n    <div class=\"tabcontent\">\n      <a href=\"{% url 'useradmin-token_create' %}\" class=\"button small\">\n        Create new token\n      </a>\n\n      {% if request.user.is_admin %}\n        <div>\n          {% include 'useradmin/frag-auditlog.html' %}\n        </div>\n      {% endif %}\n\n      {# Show table with tokens if there are any #}\n      {% if object_list %}\n\n        <table id=\"token-list-table\" class=\"listtable hover tablesorter\">\n          <caption>\n            List of issued API tokens\n          </caption>\n\n          <thead>\n            <tr>\n              <th>Token</th>\n              <th>Permission</th>\n              <th>Expires</th>\n              <th class=\"show-for-large-up\">Created</th>\n              <th class=\"show-for-large-up\">Last used</th>\n              <th class=\"show-for-medium-up\">Endpoints</th>\n              <th class=\"show-for-medium-up\">Comment</th>\n              <th>&nbsp;</th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {% for token in object_list %}\n              <tr>\n                <td>\n                  <a href=\"{% url 'useradmin-token_detail' token.pk %}\"\n                     title=\"See details for this token\">\n                    {{ token.token|truncatechars:10 }}\n                  </a>\n                </td>\n                <td>\n                  {{ token.permission }}\n                </td>\n                <td data-sort=\"{{ token.expires|date:'c' }}\">\n                  {% if token.is_expired %}\n                    <span class=\"label warning\"\n                          title=\"Token expired {{ token.expires|date:'DATE_FORMAT' }}\">\n                      Expired\n                    </span>\n                  {% else %}\n                    {{ token.expires|date:'DATE_FORMAT' }}\n                  {% endif %}\n                </td>\n\n                {# Created #}\n                <td class=\"show-for-large-up\" data-sort=\"{{ token.created|date:'c'|default:'last' }}\">{{ token.created|default:'' }}</td>\n\n                {# Last used #}\n                <td class=\"show-for-large-up\" data-sort=\"{{ token.last_used|date:'c'|default:'last' }}\">{{ token.last_used|default:'Never' }}</td>\n\n                {# Token endpoints #}\n                <td class=\"show-for-medium-up\">\n                {% if token.endpoints %}\n                  {% for key, value in token.endpoints|sortdict %}\n                    <span class=\"label endpoint\" title=\"{{ value }}\">\n                      {{ key }}\n                    </span>\n                  {% endfor %}\n                {% endif %}\n                </td>\n\n                {# Token comment #}\n                <td class=\"show-for-medium-up\">{{ token.comment|default:'' }}</td>\n\n                {# Link to token edit #}\n                <td>\n                  <a href=\"{% url 'useradmin-token_edit' token.pk %}\" title=\"Edit this token\">Edit</a>\n                </td>\n              </tr>\n            {% endfor %}\n          </tbody>\n        </table>\n\n      {% else %}\n\n        {# If there are no tokens, show information about creating one #}\n        <div class=\"alert-box info\">No tokens are issued. Do you want to\n          <a href=\"{% url 'useradmin-token_create' %}\">create one</a>?\n        </div>\n\n      {% endif %}\n\n    </div>  {# .tabcontent #}\n  </div>  {# .tabs #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/watchdog/base.html",
    "content": "{% extends 'base.html' %}\n{% load tools %}\n\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ STATIC_URL }}css/nav/watchdog.css\"/>\n  <script type=\"text/javascript\">require(['src/watchdog']);</script>\n{% endblock %}\n\n{% block base_content %}\n\n  {% with tool=current_user_data.tools|get_tool:'WatchDog' %}\n    {% include 'nav_header.html' %}\n  {% endwith %}\n\n  <div class=\"row\">\n    <div class=\"medium-6 column\">\n      <h4>NAV status tests</h4>\n\n      <div id=\"watchdog-tests\" class=\"panel white\">\n        {% include 'watchdog/frag_tests.html' %}\n      </div>\n    </div>\n    {# .column #}\n\n    <div class=\"medium-6 column\">\n      <h4>NAV by the numbers</h4>\n      {% include 'watchdog/frag_overview.html' %}\n      \n    </div>\n    {# .column #}\n  </div> {# .row #}\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/watchdog/frag_overview.html",
    "content": "<table class=\"vertitable\">\n  <tbody>\n    <tr>\n      <th title=\"A regular count of the IP Devices\">IP Devices</th>\n      <td><span id=\"netbox-count\">Fetching...</span></td>\n    </tr>\n    <tr>\n      <th title=\"An estimation of all the arp records\">Estimated Arp records</th>\n      <td><span id=\"arp-count\">Fetching...</span></td>\n    </tr>\n    <tr>\n      <th title=\"A estimation of all the arp records\">Estimated Cam records</th>\n      <td><span id=\"cam-count\">Fetching...</span></td>\n    </tr>\n    <tr>\n      <th title=\"All the distinct serial numbers\">Serial numbers</th>\n      <td><span id=\"serial-numbers\">Fetching...</span></td>\n    </tr>\n    <tr>\n      <th title=\"Current active ip-addresses. The split of version 4\n                 and version 6 can be seen after the main number.\">\n        Active IPs (v4/v6)</th>\n      <td><span id=\"active-addresses\">Fetching...</span></td>\n    </tr>\n    <tr>\n      <th title=\"The on-disk size of the NAV PostgreSQL database\">Database size</th>\n      <td><span id=\"db-size\">Fetching...</span></td>\n    </tr>\n  </tbody>\n</table>\n"
  },
  {
    "path": "python/nav/web/templates/watchdog/frag_tests.html",
    "content": "{% load watchdog %}\n\n<ul class=\"watchdog-tests no-bullet\">\n  {% for test in tests %}\n  <li>\n      {{ test.name }}\n      <span class=\"nav-tooltip wd-test-description\">\n          <i class=\"fa fa-info-circle\" aria-describedby=\"test-tooltip-{{ test.name }}\"></i>\n          <span id=\"test-tooltip-{{ test.name }}\" role=\"tooltip\">\n              {{ test.description }}\n          </span>\n      </span>\n    <span class=\"label {{ test.status|map_to_class }} right\">\n      <i class=\"fa fa-lg {{ test.status|map_to_faclass }}\"></i>\n    </span>\n\n    <ul class=\"hidden\">\n      {% for error in test.errors %}\n      <li style=\"list-style-type: circle\">\n        <small>\n\t  {% if error.obj.get_absolute_url %}\n\t    <a href=\"{{ error.obj.get_absolute_url }}\">{{ error }}</a>\n\t  {% else %}\n\t    {{ error }}\n\t  {% endif %}\n\t</small>\n      </li>\n      {% endfor %}\n    </ul>\n\n  </li>\n  {% empty %}\n    <p class=\"alert-box success\">Everything is running smoothly</p>\n  {% endfor %}\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_about_audit_logging_modal.html",
    "content": "<h2>Audit logging</h2>\n\n<p>\n  To ensure traceability of user initiated changes to the NAV database,\n  some user actions are logged. This log is only available to the NAV\n  administrators for your local installation.\n</p>\n\n<p>\n  Typical examples are:\n</p>\n\n<ul>\n  <li>a user logs in</li>\n  <li>updating IP Device configuration in SeedDB</li>\n  <li>updating an interface in PortAdmin</li>\n</ul>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_nav.html",
    "content": "{# Buttons for selecting dashboards #}\n<div class=\"dashboard-nav-wrapper\">\n    <ul id=\"dashboard-nav\" class=\"pagination\">\n      <li class=\"unavailable\"><a href=\"\">Dashboards:</a></li>\n      {% for d in dashboards %}\n        <li {% if d.pk == current_dashboard.pk %}class=\"current\"{% endif %}>\n          {% if d.pk != current_dashboard.pk %}\n            <div class=\"alert-box hidden\" data-dashboardname=\"{{ d.name }}\"></div>\n          {% endif %}\n          <a href=\"{{ d.get_absolute_url }}\"\n             title=\"Go to dashboard «{{ d.name }}»\"\n             data-dashboard=\"{{ d.pk }}\"\n             data-url=\"{% url 'moveto-dashboard' d.pk %}\"\n          >\n            <span>\n                {{ d.name }}\n            </span>\n            <i class=\"fa fa-star {% if not d.is_default %}hidden{% endif %}\"\n               title=\"This is the default dashboard &mdash; it will be loaded when you log in. To change default, change to another dashboard and set it as default in the dashboard settings.\"></i>\n            <i class=\"fa fa-share-alt {% if not d.shared_by_other %}hidden{% endif %}\"\n               title=\"This dashboard is shared by another account.\"></i>\n          </a>\n        </li>\n      {% endfor %}\n      <li id=\"dropdown-dashboard-add\" class=\"popover with-arrow\">\n        <a\n                title=\"Add new dashboard\"\n                data-popover-target=\"#dropdown-dashboard-add\"\n                aria-haspopup=\"true\"\n        >\n            <i class=\"fa fa-plus\"></i>\n        </a>\n        <div class=\"popover-content small\">\n            <form id=\"form-add-dashboard\" method=\"post\" action=\"{% url 'add-dashboard' %}\">\n                {% csrf_token %}\n                <label>\n                    Add dashboard\n                    <input type=\"text\" name=\"dashboard-name\" placeholder=\"Dashboard name\">\n                </label>\n                <input type=\"submit\" class=\"small button full-width\" value=\"Add dashboard\">\n            </form>\n\n            <div style=\"display: flex; flex-direction: column; gap: 0.5em;\">\n                <a\n                    hx-get=\"{% url 'import-dashboard-modal' %}\"\n                    hx-target=\"body\"\n                    hx-swap=\"beforeend\"\n                >\n                    <i class=\"fa fa-upload\"></i> Import dashboard\n                </a>\n                <a\n                    hx-get=\"{% url 'dashboard-search-modal' %}\"\n                    hx-target=\"body\"\n                    hx-swap=\"beforeend\"\n                >\n                    <i class=\"fa fa-search\"></i> Find shared dashboard\n                </a>\n            </div>\n        </div>\n      </li>\n    </ul>\n    <div class=\"dashboard-meta-wrapper\">\n        {% include \"webfront/_dashboard_subscribe_button.html\" with dashboard=current_dashboard %}\n        {% include \"webfront/_dashboard_nav_shared_indicator.html\" with dashboard=dashboard %}\n        <div class=\"nav-tooltip\" data-align=\"end\">\n            <div class=\"badge unstyled-tooltip\" aria-describedby=\"owner-tooltip\">\n                <i class=\"fa fa-user\"></i>\n                <span>{{ dashboard.account.name }}</span>\n            </div>\n            <div id=\"owner-tooltip\" role=\"tooltip\">\n                This dashboard belongs to <br /><strong>{{ dashboard.account.name }}</strong>.\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_nav_shared_indicator.html",
    "content": "<div\n        id=\"is-shared-badge\"\n        class=\"nav-tooltip{% if not dashboard.is_shared %} hidden{% endif %}\"\n        {% if swap %}\n        hx-swap-oob=\"true\"\n        {% endif %}\n        data-align=\"end\"\n>\n    <div class=\"badge unstyled-tooltip\" aria-describedby=\"shared-tooltip\">\n        <i class=\"fa fa-share-alt\"></i>\n        <span>Shared</span>\n    </div>\n    <div id=\"shared-tooltip\" role=\"tooltip\">\n        This dashboard is shared with other users.\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_navlets.html",
    "content": "<div class=\"row{% if compact %} collapse{% endif %}\">\n{% if has_navlets %}\n{% for col_num, navlets in columns.items %}\n    <div class=\"column navletColumn {{ column_class }}\" data-col=\"{{ col_num }}\">\n        {% for navlet in navlets %}\n            {% include 'navlets/_navlet_item.html' with navlet=navlet %}\n        {% endfor %}\n    </div>\n{% endfor %}\n{% else %}\n{% for col_num in columns.keys %}\n    <div class=\"column navletColumn {{ column_class }}\" data-col=\"{{ col_num }}\">\n        {% if col_num == 1 %}\n            <div id=\"no-widgets-message\" class=\"alert-box info\">No widgets added to this dashboard</div>\n        {% endif %}\n    </div>\n{% endfor %}\n{% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_search_form.html",
    "content": "<h4>Dashboard Search</h4>\n<p class=\"description\">\n    Find dashboards shared by other users. Search by dashboard name or account name.\n</p>\n<form\n    hx-post=\"{% url 'dashboard-search' %}\"\n    hx-trigger=\"input changed delay:500ms, search\"\n    hx-target=\"#dashboard-search-results\"\n    autocomplete=\"off\"\n>\n    {% csrf_token %}\n        <div class=\"form-group\">\n            <label for=\"dashboard-search\">\n                Search Dashboards\n            </label>\n            <input\n                id=\"dashboard-search\"\n                class=\"form-control\"\n                type=\"search\"\n                name=\"search\"\n                placeholder=\"Begin typing to search...\"\n                autofocus\n            />\n        </div>\n    <div id=\"dashboard-search-results\"></div>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_search_results.html",
    "content": "{% if dashboards %}\n    <ul>\n        {% for dashboard in dashboards %}\n            <li class=\"panel search-result-item\">\n                <div class=\"search-result-name\">\n                    <p class=\"dashboard-name\">{{ dashboard.name }}</p>\n                    <p class=\"dashboard-owner\">\n                        <i class=\"fa fa-user\" aria-label=\"Owner\"></i>\n                        {{ dashboard.account.name }}\n                    </p>\n                </div>\n                {% if dashboard.is_subscribed %}\n                    <span class=\"badge white small\">\n                        <i class=\"fa fa-bell\" aria-hidden=\"true\"></i>\n                        Subscribed\n                    </span>\n                {% endif %}\n                <a href=\"{% url 'dashboard-index-id' dashboard.pk %}\" class=\"button secondary tiny\">\n                    View\n                </a>\n            </li>\n        {% endfor %}\n    </ul>\n{% elif search %}\n    <div class=\"alert-box\">\n        No dashboards found matching your search.\n    </div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_set_default_response.html",
    "content": "<div class=\"alert-box {{ status }}\">{{ message }}</div>\n{% if dashboard.shared_by_other %}\n{% include \"webfront/_dashboard_subscribe_button.html\" with dashboard=dashboard is_subscribed=is_subscribed oob=True %}\n{% endif %}\n<div id=\"no-default-dashboard-warning\" hx-swap-oob=\"delete\"></div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_settings_columns_form.html",
    "content": "<form\n        hx-post=\"{% url 'save-dashboard-columns' dashboard.pk %}\"\n        hx-trigger=\"click\"\n        hx-swap=\"outerHTML\"\n>\n    <ul class=\"button-group\">\n        <li>\n            <button type=\"submit\"\n                    class=\"button tiny {% if dashboard.num_columns == 1 %}primary{% else %}secondary{% endif %}\"\n                    name=\"num_columns\" value=\"1\">One\n            </button>\n        </li>\n        <li>\n            <button type=\"submit\"\n                    class=\"button tiny {% if dashboard.num_columns == 2 %}primary{% else %}secondary{% endif %}\"\n                    name=\"num_columns\" value=\"2\">Two\n            </button>\n        </li>\n        <li>\n            <button type=\"submit\"\n                    class=\"button tiny {% if dashboard.num_columns == 3 %}primary{% else %}secondary{% endif %}\"\n                    name=\"num_columns\" value=\"3\">Three\n            </button>\n        </li>\n        <li>\n            <button type=\"submit\"\n                    class=\"button tiny {% if dashboard.num_columns == 4 %}primary{% else %}secondary{% endif %}\"\n                    name=\"num_columns\" value=\"4\">Four\n            </button>\n        </li>\n    </ul>\n</form>\n\n{% if message %}\n<div id=\"dashboard-settings-feedback\" hx-swap-oob=\"innerHtml\">\n    <div class=\"alert-box success\">\n        {{ message }}\n    </div>\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_settings_delete_confirmation.html",
    "content": "{% if not error_message %}\n<h4>Delete Dashboard?</h4>\n<p>\n    Are you sure you want to permanently delete the dashboard <em>{{ dashboard.name }}</em> and all its associated navlets?\n</p>\n{% if subscribers_count > 0 %}\n<p data-test-id=\"subscriber-warning\">\n    This dashboard has <strong>{{ subscribers_count }}</strong>\n    {{ subscribers_count|pluralize:\"subscriber,subscribers\" }}.\n    They will lose access if you proceed.\n</p>\n{% endif %}\n<form hx-post=\"{% url 'delete-dashboard' dashboard.pk %}\">\n    {% csrf_token %}\n    <input type=\"hidden\" name=\"confirm_delete\" value=\"true\">\n    <button class=\"small alert\" type=\"submit\">Yes, delete this dashboard</button>\n    <button class=\"small secondary\" type=\"button\" hx-on:click=\"htmx.remove(this.closest('.nav-modal'))\">\n        Cancel\n    </button>\n</form>\n{% else %}\n<div class=\"alert-box error\">\n    {{ error_message }}\n</div>\n<button class=\"small secondary\" type=\"button\" hx-on:click=\"htmx.remove(this.closest('.nav-modal'))\">\n    Close modal\n</button>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_settings_form.html",
    "content": "<div id=\"dropdown-dashboard-settings\" class=\"popover with-arrow dashboard-settings\" data-side=\"left\">\n    <div id=\"rightaction-dashboard-config\"\n         title=\"Settings for current dashboard\"\n         class=\"widget-action\"\n         data-popover-target=\"#dropdown-dashboard-settings\"\n         aria-haspopup=\"true\"\n    >\n        <i class=\"fa fa-gear fa-lg\"></i>\n    </div>\n    <div class=\"popover-content large {% if can_edit %}settings-popover{% else %}shared-settings-popover{% endif %}\">\n        {% if can_edit %}\n        <form id=\"form-rename-dashboard\"\n              method=\"post\"\n              data-dashboard=\"{{ dashboard.pk }}\"\n              action=\"{% url 'rename-dashboard' dashboard.pk %}\">\n            {% csrf_token %}\n            <input aria-label=\"Dashboard name\" name=\"dashboard-name\" placeholder=\"Dashboard name\" type=\"text\"\n                   value=\"{{ dashboard.name }}\">\n            <input type=\"submit\" class=\"small button\" value=\"Rename dashboard\">\n        </form>\n        {% else %}\n        <p aria-label=\"Dashboard name\">{{ dashboard.name }}</p>\n        {% endif %}\n\n        <div class=\"row\">\n\n            <div class=\"column medium-6\">\n                <div id=\"default-dashboard-container\"\n                     data-is-default-dashboard=\"{{ dashboard.is_default|yesno:'1,0' }}\">\n                    <div id=\"is-default-dashboard-alert\" class=\"alert-box\">This is the default dashboard</div>\n                    <form id=\"form-set-default-dashboard\"\n                          hx-post=\"{% url 'set-default-dashboard' dashboard.pk %}\"\n                          hx-target=\"#dashboard-settings-feedback\">\n                        {% csrf_token %}\n                        <input type=\"submit\" value=\"Set as default dashboard\"\n                               class=\"small button secondary expand\">\n                    </form>\n                </div>\n            </div>\n            <div class=\"column medium-6\">\n                <a href=\"{% url 'export-dashboard' dashboard.pk %}\" class=\"small button expand\">Export dashboard\n                </a><br/>\n                <div class=\"nav-tooltip\">\n                    <small aria-describedby=\"download-dashboard-tooltip\">what's this?</small>\n                    <span id=\"download-dashboard-tooltip\" role=\"tooltip\">\n              Download this dashboards definition into a file that can later be imported by pressing the + next to the tab list\n          </span>\n                </div>\n            </div>\n\n            {% if can_edit %}\n            <div class=\"column medium-4\">\n                {% if request.account.account_dashboards.count > 1 and not dashboard.is_default %}\n                    <form\n                        hx-post=\"{% url 'delete-dashboard' dashboard.pk %}\"\n                            hx-target=\"body\"\n                            hx-swap=\"beforeend\"\n                    >\n                        {% csrf_token %}\n                        <button\n                                class=\"small alert expand\"\n                                type=\"submit\"\n                                data-close-popover\n                        >\n                            Delete dashboard\n                        </button>\n                    </form>\n                {% endif %}\n\n            </div>\n            {% endif %}\n        </div>\n        {% if can_edit %}\n        <div class=\"row\">\n            <div class=\"column medium-4\">\n                <h5>Columns</h5>\n                {% include 'webfront/_dashboard_settings_columns_form.html' with dashboard=dashboard %}\n            </div>\n            <div class=\"column medium-8\">\n                {# Toggle dashboard shared #}\n                <h5>Sharing</h5>\n                {% include 'webfront/_dashboard_settings_shared_form.html' with dashboard=dashboard %}\n            </div>\n            <div class=\"column medium-4\"></div>\n        </div>\n        {% endif %}\n        <div id=\"dashboard-settings-feedback\">\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_settings_shared_form.html",
    "content": "<form\n        id=\"toggle-dashboard-shared-form\"\n        hx-post=\"{% url 'dashboard-toggle-shared' dashboard.pk %}\"\n        hx-swap=\"outerHTML\"\n>\n    <div class=\"alert-box\">Sharing this dashboard will allow other NAV users to view, search for, and subscribe to it. Only share dashboards you want to be accessible to others.</div>\n    {% csrf_token %}\n    <div>\n        <input type=\"hidden\" name=\"is_shared\" value=\"off\" />\n        <input\n            id=\"checkbox-dashboard-shared\"\n            name=\"is_shared\"\n            type=\"checkbox\"\n            {% if dashboard.is_shared %}checked{% endif %}\n            {% if dashboard.is_shared %}\n            onchange=\"document.getElementById('unshare-warning').classList.toggle('hidden');\"\n            {% endif %}\n        >\n        <label for=\"checkbox-dashboard-shared\">\n            Share dashboard\n        </label>\n    </div>\n    <div id=\"unshare-warning\" class=\"alert-box warning hidden\">\n        Unsharing this dashboard will remove access for users who currently are subscribed to it.\n    </div>\n    <input type=\"submit\" class=\"button small\" value=\"Save sharing settings\">\n</form>\n\n{% if changed %}\n{% include \"webfront/_dashboard_nav_shared_indicator.html\" with dashboard=dashboard swap=True %}\n{% endif %}\n\n{% if message %}\n<div id=\"dashboard-settings-feedback\" hx-swap-oob=\"innerHtml\">\n    <div class=\"alert-box success\">\n        {{ message }}\n    </div>\n</div>\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_dashboard_subscribe_button.html",
    "content": "<div id=\"dashboard-subscribe-button\" {% if oob %}hx-swap-oob=\"true\"{% endif %}>\n{% if dashboard.shared_by_other %}\n    {% if is_subscribed %}\n        <button class=\"tiny secondary\" style=\"margin-bottom: 0;\" hx-post=\"{% url 'dashboard-toggle-subscribe' dashboard.pk %}\">\n            <i class=\"fa fa-bell-slash\" style=\"margin-right: 0.25rem;\"></i><span>Unsubscribe</span>\n        </button>\n    {% else %}\n        <button class=\"tiny info\" style=\"margin-bottom: 0;\" hx-post=\"{% url 'dashboard-toggle-subscribe' dashboard.pk %}\">\n            <i class=\"fa fa-bell\" style=\"margin-right: 0.25rem;\"></i><span>Subscribe</span>\n        </button>\n    {% endif %}\n{% endif %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_import_dashboard_form_modal.html",
    "content": "<h4>Import dashboard</h4>\n\n<form\n    hx-post=\"{% url 'import-dashboard' %}\"\n    hx-encoding=\"multipart/form-data\"\n>\n    {% csrf_token %}\n    <fieldset>\n        <legend>Select file to import</legend>\n        <input name=\"file\" type=\"file\" id=\"dashboard-import-file\">\n    </fieldset>\n    <button type=\"submit\" class=\"button\" aria-label=\"submit form\">Import</button>\n</form>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_lightbox_gallery.html",
    "content": "{# Reusable lightbox gallery template #}\n{# Usage: {% include \"_lightbox_gallery.html\" with images=images gallery_id=\"unique-id\" title=\"Gallery Title\" %} #}\n\n{% if images|length > 0 %}\n\n{% if title %}<h4>{{ title }}</h4>{% endif %}\n\n<ul class=\"small-block-grid-2 medium-block-grid-6\">\n    {% for image in images %}\n    <li>\n        <a href=\"{{ image.url }}\"\n           class=\"lightbox-gallery-thumb\"\n           data-lightbox=\"{{ gallery_id|default:'gallery' }}\"\n           data-title=\"{{ image.title|safe }}\">\n            <img src=\"{{ image.thumb_url }}\" alt=\"{{ image.title|safe }}\">\n        </a>\n    </li>\n    {% endfor %}\n</ul>\n\n<div id=\"lightbox-{{ gallery_id|default:'gallery' }}\" class=\"lightbox\">\n    <div class=\"lightbox-content\">\n        <span class=\"lightbox-close\">&times;</span>\n        <div class=\"lightbox-image-container\">\n            <img class=\"lightbox-image\" src=\"\" alt=\"\">\n            <div class=\"lightbox-caption\"></div>\n            <div class=\"lightbox-nav\">\n                <button class=\"lightbox-prev\"><span></span></button>\n                <button class=\"lightbox-next\"><span></span></button>\n            </div>\n        </div>\n        <div class=\"lightbox-thumbnails\">\n            <ul class=\"lightbox-thumbnail-list\"></ul>\n        </div>\n    </div>\n</div>\n\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_navbar_link_form.html",
    "content": "{% load forms %}\n<div class=\"row\">\n  {% for field in form %}\n    {% if field in form.attrs.form_fields %}\n      <div class=\"columns medium-5\">\n        {% show_field field %}\n      </div>\n    {% elif field.name == 'DELETE' and navbar_formset.can_delete %}\n      <div class=\"columns link-delete medium-2\">\n        {% include 'custom_crispy_templates/horizontal_checkbox.html' %}\n      </div>\n    {% elif form.render_unmentioned_fields %}\n      {{ field }}\n    {% endif %}\n  {% endfor %}\n</div>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/_qr_code.html",
    "content": "{% if file_format == \"svg\" %}\n    <img src=\"data:image/svg+xml;base64,{{qr_code}}\" alt=\"QR Code linking to current page\">\n{% else %}\n    <img src=\"data:image/png;base64,{{qr_code}}\" alt=\"QR Code linking to current page\" style=\"display: block; margin-left: auto; margin-right: auto;\">\n{% endif %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/about.html",
    "content": "{% extends \"base.html\" %}\n\n{% block base_content %}\n<h2>About NAV</h2>\n\n<h3>What is NAV?</h3>\n\n<div style=\"float: right;\">\n        <a href=\"http://sikt.no/en/about-sikt\"><img\n        src=\"{{ STATIC_URL }}images/about/sikt.png\" width=\"157\" height=\"43\" alt=\"Sikt\"\n        style=\"margin: 22px; margin-top: 0;\"/></a><br />\n        <a href=\"http://www.ntnu.no/\"><img src=\"{{ STATIC_URL }}images/about/ntnu.jpg\"\n        width=\"200\" height=\"58\" alt=\"NTNU\" /></a>\n\n</div>\n\n<p>\n  Network Administration Visualized is an advanced software suite to monitor\n  large computer networks. It automatically discovers network topology,\n  monitors network load and outages, and can send alerts on network events by\n  e-mail and SMS, allowing for flexible configuration of alert profiles.\n</p>\n\n<p>\n  NAV was originally developed at the Norwegian University of Science and\n  Technology (<a href=\"http://www.ntnu.no/\">NTNU</a>) since 1999, to meet the\n  needs of the university's campus network operators.  The Norwegian national\n  research network, <em>Uninett</em>, became involved in 2001, and has been\n  leading the development of NAV since 2006, on behalf of all universities and\n  university colleges in Norway.\n</p>\n\n<p>\n  On January 1st 2022, Uninett, NSD and Unit (all entities owned by the\n  Norwegian government) were merged into the new government\n  agency <a href=\"https://sikt.no/about-sikt\">Sikt - Norwegian Agency for\n  Shared Services in Education and Research</a>. Sikt continues to develop NAV.\n</p>\n\n<p>\n  NAV is free, available under the <em>GNU GPLv3</em> license.\n</p>\n\n<h3>More information</h3>\n\n<p>For more information about NAV, go to the following addresses:</p>\n\n<ul>\n        <li><a href=\"https://nav.uninett.no/\">NAV</a>\n        &mdash; Homepage with wiki and online documentation</li>\n        <li><a href=\"https://github.com/Uninett/nav\">NAV on GitHub</a>\n          &mdash; our GitHub project site where you among other things\n          can register issues.</li>\n</ul>\n\n<h3>Show us your appreciation!</h3>\n\n<p>NAV is free - no strings attached - apart from these two;</p>\n\n<ol>\n        <li>If you are using NAV please add yourself to <a\n        href=\"https://nav.uninett.no/wiki/navusers\">this list</a>.</li>\n\n        <li>\n          <p>If NAV makes you happy - make us happy! Send us a postcard,\n             preferably with a picture from your location / city. No\n             electronic postcards - use snail mail - send the postcard to:</p>\n\n          <p class=\"infobox\">\n            Sikt<br />\n            Att: The NAV project team / Morten Brekkevold / Vidar Faltinsen<br />\n            Professor Brochs gate 8A<br />\n            NO-7030 Trondheim<br />\n            Norway<br />\n          </p>\n\n\t  <p>...and we will decorate our wall :)</p>\n        </li>\n</ol>\n\n<h3>Contributors</h3>\n<p>\n    We wish to thank the following people who have contributed to NAV in some\n    form over the years:\n</p>\n\n<ul>\n    <li>Vidar Faltinsen</li>\n    <li>Morten Brekkevold</li>\n    <li>Hanne Moa</li>\n    <li>Johanna England</li>\n    <li>Simon Oliver Tveit</li>\n    <li>Ilona Podliashanyk</li>\n    <li>Jørund Hellebø</li>\n    <li>Simen Abelsen</li>\n    <li>John-Magne Bredal</li>\n    <li>Sigmund Augdal</li>\n    <li>Paulo Pamplona</li>\n    <li>Joar Heimonen</li>\n    <li>Ragnhild Bodsberg</li>\n    <li>Philipp Petermann</li>\n    <li>Leigh Murray</li>\n    <li>Ruben Andreassen</li>\n    <li>Bård Schjander Flugon</li>\n    <li>Emil Henry Flakk</li>\n    <li>Pär Stolpe</li>\n    <li>Christian Strand Young</li>\n    <li>Christine Anne Sætre</li>\n    <li>Morten Werner Forsbring</li>\n    <li>Roy Sindre Norangshol</li>\n    <li>Eivind Lysne</li>\n    <li>Trond Kandal</li>\n    <li>Ole Martin Bjørndalen</li>\n    <li>Kai Arne Bjørnenak</li>\n    <li>Magnus Motzfeldt Eide</li>\n    <li>Marius Halden</li>\n    <li>Matej Gregr</li>\n    <li>Fredrik Skolmli</li>\n    <li>Thomas Adamcik</li>\n    <li>Jørgen Abrahamsen</li>\n    <li>Kristian Klette</li>\n    <li>Øystein Skartsæterhagen</li>\n    <li>Roger Kristiansen</li>\n    <li>Stein Magnus Jodal</li>\n    <li>Erlend Midttun</li>\n    <li>Jostein Gogstad</li>\n    <li>Kristian Eide</li>\n    <li>Gro-Anita Vindheim</li>\n    <li>Magnar Sveen</li>\n    <li>Hans Jørgen Hoel</li>\n    <li>Arne Øslebø</li>\n    <li>Andreas Åkre Solberg</li>\n    <li>Stian Søiland</li>\n    <li>Magnus Thanem Nordseth</li>\n    <li>Sigurd Gartmann</li>\n    <li>Arve Vanvik</li>\n    <li>Erlend Mjåvatten</li>\n    <li>Bjørn Ove Grøtan</li>\n    <li>Daniel Sandvold</li>\n    <li>Erik Gorset</li>\n    <li>Knut-Helge Vindheim</li>\n    <li>Trygve Lunheim</li>\n    <li>Stig Venås</li>\n    <li>Eric Sandnes</li>\n    <li>Tor-Arne Kvaløy</li>\n</ul>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/index.html",
    "content": "{% extends \"base.html\" %}\n\n{% block base_header_additional_head %}\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/index.css\" />\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/navlets.css\" />\n  <link rel=\"stylesheet\" href=\"{{ STATIC_URL }}css/nav/navlets_compact.css\" />\n  <style>\n   #navlet-list input[type='submit'] { margin-bottom: 0; }\n   #navlet-list .panel {\n       background-color: #dfdfdf;\n       border: 1px solid #ccc;\n       margin-bottom: 0;\n       padding: 0.9rem;\n   }\n   /* Light adaption of pagination styles */\n   ul.pagination li { background-color: gainsboro; }\n   ul.pagination li a.drop-active { border: 1px dashed black; }\n   ul.pagination li .alert-box { position: absolute; top: -4em }\n   ul.pagination li.unavailable { background-color: initial; }\n   ul.pagination li.unavailable a { color: grey; }\n\n  </style>\n  <script>\n   require([\"src/webfront\"]);\n   NAV.preference_keys = NAV.preference_keys || {};\n   NAV.preference_keys.widget_display_density = '{{ request.user.PREFERENCE_KEY_WIDGET_DISPLAY_DENSITY }}';\n   NAV.urls.dashboard_index = \"{% url 'dashboard-index' %}\";\n  </script>\n{% endblock %}\n\n\n{% block base_content %}\n\n  {# Dashboard and widget actions for logged in users #}\n  {% if not current_user_data.account.is_anonymous or current_user_data.sudoer %}\n\n    <div id=\"widgets-actions\" class=\"hide-for-small\" >\n      {% if can_edit %}\n          <div\n              id=\"widgets-action-add\"\n              title=\"Add widget\"\n              class=\"widget-action\"\n              hx-get=\"{% url 'add-navlet-modal' dashboard.id %}\"\n              hx-target=\"body\"\n              hx-swap=\"beforeend\"\n          >\n            <i class=\"fa fa-plus\"></i>\n          </div>\n      {% endif %}\n      <div id=\"widgets-show-fullscreen\" class=\"widget-action\" title=\"Show dashboard in fullscreen\">\n        <i class=\"fa fa-arrows-alt\"></i>\n      </div>\n\n      <div id=\"widgets-layout-normal\"\n           class=\"widgets-layout-toggler widget-action\n                  {% if request.user.preferences.widget_display_density == 'normal' %}hide{% endif %}\n                  {% if not request.user.preferences.widget_display_density %}hide{% endif %}\"\n           title=\"Use normal layout for dashboard\">\n        <i class=\"fa fa-expand\"></i>\n      </div>\n\n      <div id=\"widgets-layout-compact\"\n           class=\"widgets-layout-toggler widget-action\n                  {% if request.user.preferences.widget_display_density == 'compact' %}hide{% endif %}\"\n           title=\"Use compact layout for dashboard\">\n        <i class=\"fa fa-compress\"></i>\n      </div>\n      {% include 'webfront/_dashboard_settings_form.html' %}\n    </div>\n\n    {# Buttons for selecting dashboards #}\n    {%  include 'webfront/_dashboard_nav.html' with current_dashboard=dashboard dashboards=dashboards %}\n\n    {% if dashboard.needs_default_set %}\n    <div id=\"no-default-dashboard-warning\" class=\"alert-box warning with-icon\">\n        No default dashboard is set. The default dashboard is shown when you log in.\n        <button class=\"button tiny\" style=\"margin-bottom: 0;\"\n                hx-post=\"{% url 'set-default-dashboard' dashboard.pk %}\"\n                hx-target=\"#dashboard-settings-feedback\">\n            Set this dashboard as default\n        </button>\n    </div>\n    {% endif %}\n\n  {% endif %}\n\n\n  {% comment %} Main container for navlets {% endcomment %}\n  <form id=\"navlets-action-form\" style=\"display: none;\">\n    {% csrf_token %}\n  </form>\n  <div\n       id=\"navlets-htmx\"\n       {% if widget_display_density == 'compact' %}class=\"compact\"{% endif %}\n       hx-get=\"{% url 'dashboard-load' dashboard.pk %}\"\n       hx-trigger=\"load, nav.dashboard.reload from:body\"\n       hx-target=\"#navlets-htmx\"\n       data-save-order-url=\"{% url 'save-navlet-order' %}\"\n       data-columns=\"{{ dashboard.num_columns }}\"\n  >\n  </div>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/login.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE html>\n<html>\n\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <title>NAV Login</title>\n  <link rel=\"stylesheet\" href=\"/static/css/nav.css\"/>\n  <link rel=\"stylesheet\" href=\"/static/css/nav/login.css\"/>\n  <script src=\"{{ STATIC_URL }}js/libs/htmx-2.0.4.min.js\"></script>\n  <script src=\"{{ STATIC_URL }}js/require_config.js\"></script>\n  {% if debug %}\n    <script src=\"{{ STATIC_URL }}js/require_config_dev.js\"></script>\n  {% endif %}\n  <script src=\"{{ STATIC_URL }}js/libs/require-2.0.4.min.js\" data-main='src/main'></script>\n  <script>\n   require.config({ urlArgs: 'bust={{ nav_version }}' });\n  </script>\n  {% include 'navurls.html' %}\n</head>\n\n<body onload=\"document.getElementById('id_username').focus();\">\n\n<div class=\"row\">\n  <div class=\"small-12 column\">\n\n    <div class=\"panel logincontainer\">\n      <div class=\"logo-wrapper\">\n        <a href=\"/\">\n          <img src=\"{{ STATIC_URL }}images/main/nav-logo-black.svg\" alt=\"NAV\"\n               class=\"navlogo\"/>\n        </a>\n      </div>\n\n      {% for e in errors %}\n        <div class=\"alert-box alert\">\n          {{ e }}\n        </div>\n      {% endfor %}\n\n      {% if origin %}\n        <div class=\"alert-box secondary origin\">\n          After successfully logging in, you will be redirected to:<br/>\n          {{ origin }}\n        </div>\n      {% endif %}\n\n      {% include 'custom_crispy_templates/flat_form.html' %}\n\n        <a\n            hx-get=\"{% url 'webfront-audit-logging-modal' %}\"\n            hx-target=\"body\"\n            hx-swap=\"beforeend\"\n            type=\"button\"\n        >\n            <small>About audit logging in NAV</small>\n        </a>\n    </div>\n  </div>\n</div>\n\n</body>\n\n</html>\n"
  },
  {
    "path": "python/nav/web/templates/webfront/preferences.html",
    "content": "{% extends \"allauth/layouts/base.html\" %}\n\n{% block base_header_additional_head %}\n<link rel=\"stylesheet\"  href=\"{{ STATIC_URL }}css/nav/my_account.css\" />\n<script>require(['src/navigation_preferences']);</script>\n{% endblock %}\n\n{% block content %}\n    <div class=\"row\">\n        <div class=\"medium-12 columns\">\n            {% include 'nav_header.html' %}\n        </div>\n    </div>\n    {% for m in current_user_data.messages %}\n        <div class=\"alert-box {{ m.type }}\">{{ m.message }}</div>\n    {% endfor %}\n<div class=\"row\">\n    <div class=\"columns medium-6\">\n\n        <table class=\"vertitable full-width\">\n            <caption>User information</caption>\n            <tr>\n                <th>Login</th>\n                <td>{{ account.login }}</td>\n            </tr>\n            <tr>\n                <th>Name</th>\n                <td>{{ account.name }}</td>\n            </tr>\n            <tr>\n                <th>Groups</th>\n                <td>\n                    {% if account.groups.all %}\n                        <ul class=\"inside\">\n                            {% for g in account.groups.all %}\n                                <li>{{ g }}</li>\n                            {% endfor %}\n                        </ul>\n                    {% else %}\n                        None\n                    {% endif %}\n                </td>\n            </tr>\n            <tr>\n                <th>Organizations</th>\n                <td>\n                    {% if account.organizations.all %}\n                        <ul class=\"inside\">\n                            {% for o in account.organizations.all %}\n                                <li>{{ o }}</li>\n                            {% endfor %}\n                        </ul>\n                    {% else %}\n                        None\n                    {% endif %}\n                </td>\n            </tr>\n        </table>\n    </div>\n    <!--\n    <div class=\"medium-6 large-5\">\n    {% if account.ext_sync %}\n        <p class='alert-box secondary'>\n            You are not allowed to change your password from this page. Your\n            account is managed through an external system, known as \"{{ account.ext_sync }}\".\n        </p>\n    {% endif %}\n    </div>\n    -->\n    <div class=\"column medium-6\">\n        <form method=\"post\" id=\"navigation-preferences\" action=\"{% url 'webfront-preferences-savelinks' %}\">\n            <fieldset>\n                <legend>'My stuff' quick links</legend>\n                <p>A quick link requires both link text and URL.</p>\n                {% csrf_token %}\n                <div>{{ navbar_formset.management_form }}</div>\n                {% include 'foundation-5/errors_formset.html' %}\n                {% for form in navbar_formset %}\n                  {% include 'webfront/_navbar_link_form.html' %}\n                  {% empty %}\n                  {{ navbar_formset }}\n                {% endfor %}\n                <input type=\"submit\" class=\"button primary small\" name=\"submit\" value=\"Save changes\" />\n            </fieldset>\n\n        </form>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/templates/webfront/toolbox.html",
    "content": "{% extends \"base.html\" %}\n\n{% block base_header_additional_head %}\n  <style>\n   #tool_list img {\n       width: 48px;\n       height: 48px;\n   }\n  </style>\n{% endblock %}\n\n{% block base_content %}\n  <h2>Toolbox</h2>\n\n  <table id=\"tool_list\" class=\"table-hover\">\n    <tbody>\n      {% for tool in tools %}\n        <tr data-toolid=\"{{ tool.name }}\">\n          <td>\n            <a href=\"{{ tool.uri }}\" title=\"{{ tool.description }}\">\n              <img src=\"{{ tool.icon }}\" alt=\"\">\n            </a>\n          </td>\n          <td>\n            <a href=\"{{ tool.uri }}\" title=\"{{ tool.description }}\">\n              <span>{{ tool.name }}</span>\n            </a>\n          </td>\n          <td>\n            {{ tool.description }}\n          </td>\n        </tr>\n      {% endfor %}\n    </tbody>\n  </table>\n\n{% endblock %}\n"
  },
  {
    "path": "python/nav/web/threshold/__init__.py",
    "content": "\"\"\"The Threshold Manager Django-based web app\"\"\"\n"
  },
  {
    "path": "python/nav/web/threshold/forms.py",
    "content": "#\n# Copyright 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for threshold app\"\"\"\n\nimport re\n\nfrom django import forms\n\nfrom nav.metrics.thresholds import ThresholdEvaluator, InvalidExpressionError\nfrom nav.models.thresholds import ThresholdRule\nfrom nav.util import parse_interval\nfrom nav.web.crispyforms import (\n    FlatFieldset,\n    SubmitField,\n    set_flat_form_attributes,\n    FormRow,\n    FormColumn,\n    HelpFormField,\n)\n\n\nclass ThresholdForm(forms.ModelForm):\n    \"\"\"Form for creating a threshold rule\"\"\"\n\n    period = forms.CharField(\n        max_length=200,\n        required=False,\n        help_text=\"The threshold monitor will calculate an average value from \"\n        \"the data points that span this time interval. You should \"\n        \"ensure that the metric has at least two data points in this \"\n        \"interval. For interface counters, the recommended minimum \"\n        \"value is 15 minutes ('15m'). If omitted, the period \"\n        \"defaults to 5 minutes.\",\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(ThresholdForm, self).__init__(*args, **kwargs)\n        self.fields['alert'].label = 'Alert threshold'\n        self.fields['clear'].label = 'Clear alert'\n        self.fields[\n            'raw'\n        ].help_text = (\n            \"(Advanced): Do not transform the target according to NAV's own rules\"\n        )\n\n        if self.instance.pk is None:\n            action_text = 'Create rule'\n        else:\n            action_text = 'Edit rule'\n\n        column_class = 'small-4'\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=action_text,\n                    fields=[\n                        self['target'],\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[HelpFormField(self['alert'])],\n                                    css_classes=column_class,\n                                ),\n                                FormColumn(\n                                    fields=[HelpFormField(self['clear'])],\n                                    css_classes=column_class,\n                                ),\n                                FormColumn(\n                                    fields=[HelpFormField(self['period'])],\n                                    css_classes=column_class,\n                                ),\n                            ]\n                        ),\n                        self['description'],\n                        FormRow(\n                            fields=[\n                                FormColumn(\n                                    fields=[\n                                        SubmitField(value='Save', css_classes='small')\n                                    ],\n                                    css_classes='small-6',\n                                ),\n                                FormColumn(\n                                    fields=[HelpFormField(self['raw'])],\n                                    css_classes='small-6',\n                                ),\n                            ]\n                        ),\n                    ],\n                )\n            ],\n        )\n\n    def clean(self):\n        cleaned_data = super(ThresholdForm, self).clean()\n        if 'target' not in cleaned_data:\n            raise forms.ValidationError('Target is required')\n\n        period = cleaned_data.get('period')\n        if not period and is_interface(cleaned_data['target']):\n            cleaned_data['period'] = parse_interval('15m')\n        return cleaned_data\n\n    def clean_period(self):\n        \"\"\"Verify that period is correctly formatted\"\"\"\n        period = self.cleaned_data['period']\n        if not period:\n            return None\n\n        try:\n            period = parse_interval(period)\n        except ValueError:\n            raise forms.ValidationError('Invalid period')\n\n        return period\n\n    def clean_alert(self):\n        \"\"\"Validate that the threshold is correctly formatted\"\"\"\n        alert = self.cleaned_data['alert']\n        validate_expression(alert, self)\n        return alert\n\n    def clean_clear(self):\n        \"\"\"Validate that the clear threshold is correctly formatted\"\"\"\n        clear = self.cleaned_data['clear']\n        if not clear:\n            return clear\n        validate_expression(clear, self)\n        return clear\n\n    class Meta(object):\n        model = ThresholdRule\n        fields = ('target', 'alert', 'clear', 'period', 'description', 'raw')\n        widgets = {'description': forms.Textarea()}\n\n\ndef validate_expression(expression, form):\n    \"\"\"Validate the expression\"\"\"\n    target = form.cleaned_data.get('target', '')\n    evaluator = ThresholdEvaluator(target)\n    try:\n        evaluator.evaluate(expression)\n    except InvalidExpressionError:\n        raise forms.ValidationError('Invalid threshold expression')\n\n\ndef is_interface(metric):\n    \"\"\"Returns true if this metric is an interface counter\"\"\"\n    return re.match(r'nav\\.devices\\..*\\.ports\\..*', metric)\n"
  },
  {
    "path": "python/nav/web/threshold/urls.py",
    "content": "#\n# Copyright 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"url config for thresholds app\"\"\"\n\nfrom django.urls import path, re_path\nfrom nav.web.threshold import views\n\n\nurlpatterns = [\n    path('', views.index, name='threshold-index'),\n    path('add', views.add_threshold, name='threshold-add'),\n    re_path(r'^add/(?P<metric>.*)$', views.add_threshold, name='threshold-add'),\n    path('edit/<int:rule_id>', views.edit_threshold, name='threshold-edit'),\n    path('delete/<int:rule_id>', views.delete_threshold, name='threshold-delete'),\n    path('helpmodal', views.threshold_help_modal, name='threshold-help-modal'),\n    path('search/', views.threshold_search, name='threshold-search'),\n    path('graph_url/', views.get_graph_url, name='threshold-graph'),\n]\n"
  },
  {
    "path": "python/nav/web/threshold/views.py",
    "content": "#\n# Copyright 2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers for threshold app\"\"\"\n\nimport datetime\nfrom django.http import HttpResponse, JsonResponse\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.urls import reverse\n\nfrom nav.metrics.names import raw_metric_query\nfrom nav.metrics.graphs import get_simple_graph_url, Graph\nfrom nav.models.thresholds import ThresholdRule\nfrom nav.web.modals import render_modal\nfrom nav.web.threshold.forms import ThresholdForm\nfrom nav.web.auth.utils import get_account\nfrom nav.web.utils import create_title\n\n\nTITLE = 'Thresholds'\n\n\ndef get_path():\n    \"\"\"Get default navpath for this app\"\"\"\n    return [('Home', '/'), (TITLE, reverse('threshold-index'))]\n\n\ndef index(request):\n    \"\"\"Base controller\"\"\"\n\n    rules = ThresholdRule.objects.all().order_by('id')\n    context = {'title': TITLE, 'navpath': get_path(), 'rules': rules}\n    return render(request, 'threshold/base.html', context)\n\n\ndef add_threshold(request, metric=None):\n    \"\"\"Controller for threshold search\"\"\"\n\n    if request.method == 'POST':\n        form = ThresholdForm(request.POST)\n        metric = request.POST.get('target')\n        if form.is_valid():\n            handle_threshold_form(form, request)\n            return redirect('threshold-index')\n    else:\n        if metric:\n            form = ThresholdForm(initial={'target': metric})\n        else:\n            form = ThresholdForm()\n\n    heading = 'Add threshold rule'\n    navpath = get_path() + [(heading,)]\n    title = create_title(navpath)\n    context = {\n        'heading': heading,\n        'form': form,\n        'metric': metric,\n        'title': title,\n        'navpath': navpath,\n        'id': None,\n    }\n\n    return render(request, 'threshold/set_threshold.html', context)\n\n\ndef edit_threshold(request, rule_id):\n    \"\"\"Controller for editing threshold rules\"\"\"\n\n    rule = get_object_or_404(ThresholdRule, pk=rule_id)\n\n    if request.method == 'POST':\n        form = ThresholdForm(request.POST, instance=rule)\n        metric = request.POST.get('target')\n        if form.is_valid():\n            handle_threshold_form(form, request)\n            return redirect('threshold-index')\n    else:\n        form = ThresholdForm(instance=rule)\n        metric = rule.target\n\n    heading = 'Edit threshold rule'\n    navpath = get_path() + [(heading,)]\n    title = create_title(navpath)\n    context = {\n        'heading': heading,\n        'form': form,\n        'metric': metric,\n        'title': title,\n        'navpath': navpath,\n        'id': rule.id,\n    }\n    return render(request, 'threshold/set_threshold.html', context)\n\n\ndef delete_threshold(request, rule_id):\n    \"\"\"Controller for deleting threshold rules\"\"\"\n    if request.method == 'POST':\n        rule = get_object_or_404(ThresholdRule, pk=rule_id)\n        rule.delete()\n\n    return redirect('threshold-index')\n\n\ndef handle_threshold_form(form, request):\n    \"\"\"Create threshold based on form data\n\n    :param ThresholdForm form: A user defined threshold\n    :param HttpRequest request: The request object\n    \"\"\"\n    threshold = form.save(commit=False)\n    threshold.created = datetime.datetime.now()\n    threshold.creator = get_account(request)\n    threshold.save()\n\n\ndef threshold_help_modal(request):\n    \"\"\"\n    Render a modal with help information for adding threshold rules\n    \"\"\"\n    return render_modal(\n        request,\n        'threshold/_threshold_help_modal.html',\n        modal_id='threshold-help-modal',\n        size=\"large\",\n    )\n\n\ndef threshold_search(request):\n    \"\"\"Returns json formatted searchresult\"\"\"\n    result = []\n    if 'term' in request.GET:\n        term = enhance_term(request.GET['term'])\n        metrics = get_metrics(term)\n        for metric in metrics:\n            result.append(\n                {\n                    'label': metric['id'],\n                    'value': metric['id'],\n                    'expandable': metric['expandable'],\n                }\n            )\n\n    return JsonResponse({\"items\": result})\n\n\ndef enhance_term(term):\n    \"\"\"Format the term based on certain rules\n\n    :type term: str\n    \"\"\"\n    if term.endswith('.'):\n        term += '*'\n\n    return term\n\n\ndef get_metrics(term):\n    \"\"\"Get metrics based on search term\n\n    :type term: str\n    \"\"\"\n    metrics = raw_metric_query(term)\n    if not metrics:\n        term += '*'\n        metrics = raw_metric_query(term)\n\n    if len(metrics) > 1 and is_all_leaves(metrics):\n        metrics.insert(0, {'id': term, 'expandable': False})\n\n    return metrics\n\n\ndef is_all_leaves(metrics):\n    \"\"\"Determine if all metrics are leaf nodes\n\n    :type metrics: list\n    :rtype: bool\n    \"\"\"\n    all_leaves = True\n    for metric in metrics:\n        if metric['expandable']:\n            all_leaves = False\n            break\n    return all_leaves\n\n\ndef get_graph_url(request):\n    \"\"\"Get graph url based on metric\"\"\"\n    graph_args = {'title': 'Latest values for this metric', 'width': 600, 'height': 400}\n    if 'metric' in request.GET:\n        metric = request.GET['metric']\n        if 'raw' in request.GET:\n            graph = Graph(targets=[metric], **graph_args)\n            return redirect(str(graph))\n        else:\n            return redirect(get_simple_graph_url([metric], **graph_args))\n\n    return HttpResponse()\n"
  },
  {
    "path": "python/nav/web/useradmin/__init__.py",
    "content": "\"\"\"useradmin\n\nA web user administration interface.\n\n\"\"\"\n"
  },
  {
    "path": "python/nav/web/useradmin/forms.py",
    "content": "#\n# Copyright (C) 2008 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Forms for the user admin system\"\"\"\n\nfrom datetime import date, timedelta\n\nfrom django import forms\nfrom django.utils.encoding import force_str\nfrom django.views.decorators.debug import sensitive_variables\n\nfrom nav.web.crispyforms import (\n    set_flat_form_attributes,\n    FlatFieldset,\n    FormColumn,\n    FormRow,\n    SubmitField,\n)\n\nfrom nav.models.profiles import Account, AccountGroup, PrivilegeType\nfrom nav.models.manage import Organization\nfrom nav.models.api import APIToken, JWTRefreshToken\nfrom nav.web.api.v1.views import get_endpoints as get_api_endpoints\nfrom nav.util import auth_token\n\n\nclass AccountGroupForm(forms.ModelForm):\n    \"\"\"Form for adding or editing a group on the group page\"\"\"\n\n    name = forms.CharField(required=True)\n    description = forms.CharField(required=True)\n\n    def __init__(self, *args, **kwargs):\n        super(AccountGroupForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Group info\",\n                    fields=[\n                        self[\"name\"],\n                        self[\"description\"],\n                        SubmitField(\n                            name=\"submit_group\",\n                            value=\"Save changes\",\n                            css_classes=\"small\",\n                        ),\n                    ],\n                )\n            ]\n        )\n\n    class Meta(object):\n        model = AccountGroup\n        fields = ('name', 'description')\n\n\nclass AccountForm(forms.ModelForm):\n    \"\"\"Form for creating and editing an account\"\"\"\n\n    password1 = forms.CharField(\n        label='New password (>= 8 characters)',\n        min_length=Account.MIN_PASSWD_LENGTH,\n        widget=forms.widgets.PasswordInput,\n    )\n    password2 = forms.CharField(\n        label='Repeat password',\n        min_length=Account.MIN_PASSWD_LENGTH,\n        widget=forms.widgets.PasswordInput,\n        required=False,\n    )\n    login = forms.CharField(required=True)\n    name = forms.CharField(required=True)\n\n    def __init__(self, *args, **kwargs):\n        super(AccountForm, self).__init__(*args, **kwargs)\n        account = kwargs.get('instance', False)\n\n        if account:\n            self.fields['password1'].required = False\n\n            if kwargs[\"instance\"].id == Account.DEFAULT_ACCOUNT:\n                # We don't want to enable significant changes to the anonymous account\n                self.fields[\"password1\"].widget.attrs[\"readonly\"] = True\n                self.fields[\"password2\"].widget.attrs[\"readonly\"] = True\n                self.fields[\"login\"].widget.attrs[\"readonly\"] = True\n\n        submit_value = \"Save changes\" if account else \"Create account\"\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Account\",\n                    fields=[\n                        self[\"login\"],\n                        self[\"name\"],\n                        self[\"password1\"],\n                        self[\"password2\"],\n                        SubmitField(\n                            \"submit_account\", submit_value, css_classes=\"small\"\n                        ),\n                    ],\n                )\n            ],\n        )\n\n    @sensitive_variables('password1', 'password2')\n    def clean_password1(self):\n        \"\"\"Validate password\"\"\"\n        password1 = self.data.get('password1')\n        password2 = self.data.get('password2')\n\n        if password1 != password2:\n            raise forms.ValidationError('Passwords did not match')\n        return password1\n\n    def is_valid(self):\n        if not super(AccountForm, self).is_valid():\n            self.data = self.data.copy()\n            if 'password1' in self.data:\n                del self.data['password1']\n            if 'password2' in self.data:\n                del self.data['password2']\n            return False\n        return True\n\n    class Meta(object):\n        model = Account\n        exclude = ('password', 'ext_sync', 'organizations', 'preferences')\n\n\nclass ExternalAccountForm(AccountForm):\n    \"\"\"Form for editing an externally managed account\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super(AccountForm, self).__init__(*args, **kwargs)\n\n        # We don't want to enable local password editing for accounts that are\n        # managed externally.\n        del self.fields['password1']\n        del self.fields['password2']\n        self.fields['login'].widget.attrs['readonly'] = True\n\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FlatFieldset(\n                    legend=\"Account\",\n                    fields=[\n                        self[\"login\"],\n                        self[\"name\"],\n                        SubmitField(\n                            \"submit_account\", \"Save changes\", css_classes=\"small\"\n                        ),\n                    ],\n                    template=\"useradmin/frag-external-account-fieldset.html\",\n                )\n            ],\n        )\n\n\nclass PrivilegeForm(forms.Form):\n    \"\"\"Form for adding a privilege to a group from the group page\"\"\"\n\n    type = forms.models.ModelChoiceField(PrivilegeType.objects.all(), label='')\n    target = forms.CharField(\n        required=True, label='', widget=forms.TextInput(attrs={'placeholder': 'Target'})\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(PrivilegeForm, self).__init__(*args, **kwargs)\n        self.fields['type'].widget.attrs.update({\"class\": \"select2\"})\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self[\"type\"]], css_classes=\"medium-3\"),\n                        FormColumn(fields=[self[\"target\"]], css_classes=\"medium-6\"),\n                        FormColumn(\n                            fields=[\n                                SubmitField(\n                                    \"submit_privilege\", \"Grant\", css_classes=\"postfix\"\n                                )\n                            ],\n                            css_classes=\"medium-3\",\n                        ),\n                    ]\n                )\n            ]\n        )\n\n\nclass OrganizationAddForm(forms.Form):\n    \"\"\"Form for adding an organization to an account\"\"\"\n\n    def __init__(self, account, *args, **kwargs):\n        super(OrganizationAddForm, self).__init__(*args, **kwargs)\n        if account:\n            query = Organization.objects.exclude(id__in=account.organizations.all())\n        else:\n            query = Organization.objects.all()\n\n        self.fields['organization'] = forms.models.ModelChoiceField(\n            queryset=query, required=True, label=''\n        )\n        self.fields['organization'].widget.attrs.update({\"class\": \"select2\"})\n        self.attrs = set_flat_form_attributes(\n            form_fields=[self[\"organization\"]],\n            submit_field=SubmitField(\n                \"submit_org\", \"Add organization\", css_classes=\"postfix\"\n            ),\n        )\n\n\nclass GroupAddForm(forms.Form):\n    \"\"\"Form for adding a group to an account from the account page\"\"\"\n\n    def __init__(self, account, *args, **kwargs):\n        super(GroupAddForm, self).__init__(*args, **kwargs)\n        if account:\n            query = AccountGroup.objects.exclude(id__in=account.groups.all())\n        else:\n            query = AccountGroup.objects.all()\n\n        self.fields['group'] = forms.models.ModelChoiceField(\n            queryset=query, required=True, label=''\n        )\n        self.fields['group'].widget.attrs.update({'class': 'select2'})\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(fields=[self['group']], css_classes='medium-8'),\n                        FormColumn(\n                            fields=[\n                                SubmitField(\n                                    'submit_group',\n                                    'Add membership',\n                                    css_classes='postfix',\n                                )\n                            ],\n                            css_classes='medium-4',\n                        ),\n                    ]\n                )\n            ]\n        )\n\n\nclass AccountAddForm(forms.Form):\n    \"\"\"Form for adding a user to a group from the group page\"\"\"\n\n    def __init__(self, group, *args, **kwargs):\n        super(AccountAddForm, self).__init__(*args, **kwargs)\n        if group:\n            query = Account.objects.exclude(id__in=group.accounts.all())\n        else:\n            query = Account.objects.all()\n\n        self.fields['account'] = forms.models.ModelChoiceField(\n            query,\n            required=True,\n            widget=forms.Select(attrs={'class': 'select2'}),\n            label='',\n        )\n        self.attrs = set_flat_form_attributes(\n            submit_field=SubmitField(\n                'submit_account', 'Add to group', css_classes='postfix'\n            )\n        )\n\n\ndef _get_default_expires():\n    return date.today() + timedelta(days=365)\n\n\nclass ReadonlyField(forms.CharField):\n    \"\"\"A readonly text field\"\"\"\n\n    def widget_attrs(self, widget):\n        attrs = super(ReadonlyField, self).widget_attrs(widget)\n        attrs.update({'readonly': 'True'})\n        return attrs\n\n\nclass TokenForm(forms.ModelForm):\n    \"\"\"Form for creating a new token\"\"\"\n\n    token = ReadonlyField(initial=auth_token)\n    permission = forms.ChoiceField(\n        choices=APIToken.permission_choices,\n        help_text=APIToken.permission_help_text,\n        initial='read',\n    )\n    available_endpoints = get_api_endpoints()\n    endpoints = forms.MultipleChoiceField(\n        required=False, choices=sorted(available_endpoints.items())\n    )\n    expires = forms.DateField(\n        initial=_get_default_expires, widget=forms.DateInput(attrs={'type': 'date'})\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(TokenForm, self).__init__(*args, **kwargs)\n\n        # If we are editing an existing token, convert the previously chosen\n        # endpoints from a dictionary to a list of keys. The 'clean_endpoints'\n        # method does the opposite when saving.\n        if self.instance and self.instance.endpoints:\n            self.initial['endpoints'] = list(self.instance.endpoints.keys())\n\n        if self.instance.id:\n            submit_message = \"Save token\"\n        else:\n            submit_message = \"Save new token\"\n\n        self.attrs = set_flat_form_attributes(\n            form_id=\"edit-token-form\",\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend=\"Token details\",\n                                    fields=[\n                                        self[\"token\"],\n                                        self[\"permission\"],\n                                        self[\"expires\"],\n                                        self[\"comment\"],\n                                    ],\n                                )\n                            ],\n                            css_classes=\"large-4 small-12\",\n                        ),\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend=\"Token endpoints\", fields=[self[\"endpoints\"]]\n                                )\n                            ],\n                            css_classes=\"large-8 small-12\",\n                        ),\n                    ]\n                )\n            ],\n            submit_field=SubmitField(\"submit\", submit_message, css_classes=\"small\"),\n        )\n\n    def clean_endpoints(self):\n        \"\"\"Convert endpoints from list to dictionary\"\"\"\n        endpoints = self.cleaned_data.get('endpoints')\n        return {x: force_str(self.available_endpoints.get(x)) for x in endpoints}\n\n    class Meta(object):\n        model = APIToken\n        fields = ['token', 'permission', 'expires', 'comment', 'endpoints']\n\n\nclass JWTRefreshTokenCreateForm(forms.ModelForm):\n    \"\"\"Form for creating a new refresh token\"\"\"\n\n    name = forms.CharField(label='Token name')\n    permission = forms.ChoiceField(\n        choices=APIToken.permission_choices,\n        help_text=APIToken.permission_help_text,\n        initial='read',\n    )\n    available_endpoints = get_api_endpoints()\n    endpoints = forms.MultipleChoiceField(\n        required=False, choices=sorted(available_endpoints.items())\n    )\n    description = forms.CharField(label='Description', required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(JWTRefreshTokenCreateForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_id=\"edit-jwt-form\",\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend=\"Token details\",\n                                    fields=[\n                                        self[\"name\"],\n                                        self[\"description\"],\n                                        self[\"permission\"],\n                                    ],\n                                )\n                            ],\n                            css_classes=\"large-4 small-12\",\n                        ),\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend=\"Token endpoints\", fields=[self[\"endpoints\"]]\n                                )\n                            ],\n                            css_classes=\"large-8 small-12\",\n                        ),\n                    ]\n                )\n            ],\n            submit_field=SubmitField(\"submit\", \"Save token\", css_classes=\"small\"),\n        )\n\n    def clean_endpoints(self):\n        \"\"\"Convert endpoints from list to dictionary\"\"\"\n        endpoints = self.cleaned_data.get('endpoints')\n        return {x: force_str(self.available_endpoints.get(x)) for x in endpoints}\n\n    class Meta(object):\n        model = JWTRefreshToken\n        fields = ['name', 'description', 'permission', 'endpoints']\n\n\nclass JWTRefreshTokenEditForm(forms.ModelForm):\n    \"\"\"Form for editing an existing refresh token\"\"\"\n\n    name = forms.CharField(label='Token name')\n    description = forms.CharField(label='Description', required=False)\n\n    def __init__(self, *args, **kwargs):\n        super(JWTRefreshTokenEditForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_id=\"edit-jwt-form\",\n            form_fields=[\n                FormRow(\n                    fields=[\n                        FormColumn(\n                            fields=[\n                                FlatFieldset(\n                                    legend=\"Token details\",\n                                    fields=[self[\"name\"], self[\"description\"]],\n                                )\n                            ],\n                            css_classes=\"large-4 small-12\",\n                        ),\n                    ]\n                )\n            ],\n            submit_field=SubmitField(\"submit\", \"Save token\", css_classes=\"small\"),\n        )\n\n    class Meta(object):\n        model = JWTRefreshToken\n        fields = ['name', 'description']\n"
  },
  {
    "path": "python/nav/web/useradmin/urls.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright 2008, 2011 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n#\n\"\"\"Django URL config for useradmin\"\"\"\n\nfrom django.urls import path\nfrom django.urls import re_path\nfrom nav.web.useradmin import views\n\n# The patterns are relative to the base URL of the subsystem\nurlpatterns = [\n    # List accounts and groups\n    path('', views.account_list, name='useradmin'),\n    path('accounts/', views.account_list, name='useradmin-account_list'),\n    path('groups/', views.group_list, name='useradmin-group_list'),\n    # Edit/Create accounts\n    path('account/new/', views.account_detail, name='useradmin-account_new'),\n    path(\n        'account/<int:account_id>/',\n        views.account_detail,\n        name='useradmin-account_detail',\n    ),\n    # Deletion\n    path(\n        'account/<int:account_id>/delete/',\n        views.account_delete,\n        name='useradmin-account_delete',\n    ),\n    path(\n        'account/<int:account_id>/remove/group/<int:group_id>/',\n        views.account_group_remove,\n        name='useradmin-account_group_remove',\n    ),\n    re_path(\n        r'^account/(?P<account_id>\\d+)/remove/org/(?P<org_id>[^\\\\]+)/$',\n        views.account_organization_remove,\n        name='useradmin-account_organization_remove',\n    ),\n    # Edit/Create groups\n    path('group/new/', views.group_detail, name='useradmin-group_new'),\n    path('group/<int:group_id>/', views.group_detail, name='useradmin-group_detail'),\n    path(\n        'group/<int:group_id>/delete/',\n        views.group_delete,\n        name='useradmin-group_delete',\n    ),\n    path(\n        'group/<int:group_id>/remove/account/<int:account_id>/',\n        views.group_account_remove,\n        name='useradmin-group_account_remove',\n    ),\n    path(\n        'group/<int:group_id>/remove/privilege/<int:privilege_id>/',\n        views.group_privilege_remove,\n        name='useradmin-group_privilege_remove',\n    ),\n    # Manage tokens\n    path('tokens/', views.TokenList.as_view(), name='useradmin-token_list'),\n    path('tokens/create/', views.TokenCreate.as_view(), name='useradmin-token_create'),\n    path(\n        'tokens/edit/<int:pk>/',\n        views.TokenEdit.as_view(),\n        name='useradmin-token_edit',\n    ),\n    path(\n        'tokens/detail/<int:pk>/',\n        views.TokenDetail.as_view(),\n        name='useradmin-token_detail',\n    ),\n    path(\n        'tokens/delete/<int:pk>/',\n        views.TokenDelete.as_view(),\n        name='useradmin-token_delete',\n    ),\n    path(\n        'tokens/expire/<int:pk>/',\n        views.token_expire,\n        name='useradmin-token_expire',\n    ),\n    # Manage JWT tokens\n    path('jwt_tokens/', views.JWTList.as_view(), name='useradmin-jwt_list'),\n    path('jwt_tokens/create/', views.JWTCreate.as_view(), name='useradmin-jwt_create'),\n    path(\n        'jwt_tokens/edit/<int:pk>/',\n        views.JWTEdit.as_view(),\n        name='useradmin-jwt_edit',\n    ),\n    path(\n        'jwt_tokens/detail/<int:pk>/',\n        views.JWTDetail.as_view(),\n        name='useradmin-jwt_detail',\n    ),\n    path(\n        'jwt_tokens/delete/<int:pk>/',\n        views.JWTDelete.as_view(),\n        name='useradmin-jwt_delete',\n    ),\n    path(\n        'jwt_tokens/expire/<int:pk>/',\n        views.jwt_revoke,\n        name='useradmin-jwt_revoke',\n    ),\n    path(\n        'jwt_tokens/recreate/<int:pk>/',\n        views.jwt_recreate,\n        name='useradmin-jwt_recreate',\n    ),\n]\n"
  },
  {
    "path": "python/nav/web/useradmin/views.py",
    "content": "#\n# Copyright (C) 2008, 2011, 2020 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controller functions for the useradmin interface\"\"\"\n\nimport copy\nfrom datetime import datetime, timezone\n\nfrom django.contrib import messages\nfrom django.core.cache import cache\nfrom django.http import HttpResponseRedirect\nfrom django.shortcuts import render, get_object_or_404, redirect\nfrom django.db import transaction\nfrom django.urls import reverse, reverse_lazy\nfrom django.views import generic\nfrom django.views.decorators.http import require_POST\nfrom django.views.decorators.debug import sensitive_post_parameters\n\nfrom nav.auditlog.models import LogEntry\nfrom nav.models.profiles import Account, AccountGroup, Privilege\nfrom nav.models.manage import Organization\nfrom nav.models.api import APIToken, JWTRefreshToken\n\nfrom nav.web.auth.sudo import sudo\nfrom nav.web.auth.utils import get_account\nfrom nav.web.useradmin import forms\nfrom nav.web.jwtgen import generate_refresh_token, hash_token, decode_token\nfrom nav.config import ConfigurationError\nfrom nav.django.settings import LOCAL_JWT_IS_CONFIGURED\n\n\nDEFAULT_NAVPATH = {'navpath': [('Home', '/'), ('User Administration',)]}\n\n\ndef account_list(request):\n    \"\"\"Controller for displaying the account list\"\"\"\n    accounts = Account.objects.all()\n    context = {\n        'active': {'account_list': 1},\n        'accounts': accounts,\n        'auditlog_api_parameters': {'object_model': 'account'},\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/account_list.html', context)\n\n\n@sensitive_post_parameters('password1', 'password2')\ndef account_detail(request, account_id=None):\n    \"\"\"Displays details and processes POST-requests for an account\"\"\"\n    try:\n        account = Account.objects.get(id=account_id)\n    except Account.DoesNotExist:\n        account = None\n\n    old_account = copy.deepcopy(account)\n    external_authentication = getattr(account, \"ext_sync\", False)\n    if external_authentication:\n        account_form_class = forms.ExternalAccountForm\n    else:\n        account_form_class = forms.AccountForm\n    account_form = account_form_class(instance=account)\n    org_form = forms.OrganizationAddForm(account)\n    group_form = forms.GroupAddForm(account)\n\n    if request.method == 'POST':\n        if 'submit_account' in request.POST:\n            account_form = account_form_class(request.POST, instance=account)\n            if account_form.is_valid():\n                return save_account(request, account_form, old_account)\n\n        elif 'submit_org' in request.POST:\n            org_form = forms.OrganizationAddForm(account, request.POST)\n            if org_form.is_valid():\n                return save_account_org(request, account, org_form)\n\n        elif 'submit_group' in request.POST:\n            group_form = forms.GroupAddForm(account, request.POST)\n            if group_form.is_valid():\n                return save_account_group(request, account, group_form)\n\n        elif 'submit_sudo' in request.POST:\n            return sudo_to_user(request)\n\n    if account:\n        active = {\"account_detail\": True}\n        auditlog_api_parameters = {\"object_model\": \"account\", \"object_pk\": account.pk}\n        add_warnings_for_account(account, request)\n    else:\n        active = {\"account_new\": True}\n        auditlog_api_parameters = {}\n\n    context = {\n        'auditlog_api_parameters': auditlog_api_parameters,\n        'active': active,\n        'account': account,\n        'account_form': account_form,\n        'org_form': org_form,\n        'group_form': group_form,\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/account_detail.html', context)\n\n\ndef add_warnings_for_account(account, request):\n    \"\"\"Adds session warning messages about issues with an Account's configuration\n\n    :type account: Account\n    :type request: HttpRequest\n    \"\"\"\n    if account.id == Account.DEFAULT_ACCOUNT:\n        if account.locked:\n            messages.warning(\n                request,\n                \"This account represents all non-logged in users. Be wary of making \"\n                \"changes to it.\",\n            )\n        else:\n            messages.warning(\n                request,\n                \"This account represents all non-logged in users, but has been UNLOCKED\"\n                \" so it can be used to log in. Please LOCK this account immediately\",\n            )\n    else:\n        if account.locked:\n            messages.warning(request, \"This account is locked and cannot log in.\")\n\n    if not account.locked and account.has_plaintext_password():\n        messages.warning(\n            request,\n            \"This account's password is stored in plain text. Its password should be \"\n            \"changed immediately, or the account disabled.\",\n        )\n    if account.has_old_style_password_hash():\n        messages.warning(\n            request,\n            \"This account's password is stored using an outdated and INSECURE hashing \"\n            \"method. The user has either not logged in or not changed its password in \"\n            \"years. Its password should be changed or the account disabled.\",\n        )\n    if account.has_deprecated_password_hash_method():\n        messages.warning(\n            request,\n            \"This account's password is stored using an older hash method. The user \"\n            \"has either not logged in or not changed its password in a long time. Its \"\n            \"password should be changed or the account disabled.\",\n        )\n\n\ndef save_account(request, account_form, old_account):\n    \"\"\"Save an account based on post data\"\"\"\n    account = account_form.save(commit=False)\n\n    should_set_password = (\n        'password1' in account_form.cleaned_data\n        and account_form.cleaned_data['password1']\n        and not account.ext_sync\n    )\n\n    if should_set_password:\n        account.set_password(account_form.cleaned_data['password1'])\n\n    account.save()\n    logged_in_account = get_account(request)\n    log_account_change(logged_in_account, old_account, account)\n\n    messages.success(request, '\"%s\" has been saved.' % (account))\n    return HttpResponseRedirect(reverse('useradmin-account_detail', args=[account.id]))\n\n\ndef save_account_org(request, account, org_form):\n    \"\"\"Add an organization to an account\"\"\"\n    organization = org_form.cleaned_data['organization']\n\n    try:\n        account.organizations.get(id=organization.id)\n        messages.warning(\n            request, 'Organization was not added as it has already been added.'\n        )\n    except Organization.DoesNotExist:\n        account.organizations.add(organization)\n        log_add_account_to_org(request, organization, account)\n        messages.success(\n            request, 'Added organization \"%s\" to account \"%s\"' % (organization, account)\n        )\n\n    return HttpResponseRedirect(reverse('useradmin-account_detail', args=[account.id]))\n\n\ndef save_account_group(request, account, group_form):\n    \"\"\"Add a group to an account\"\"\"\n    group = group_form.cleaned_data['group']\n\n    special_case = (\n        group.is_admin_group() or group.is_protected_group()\n    ) and account.is_anonymous\n\n    if special_case:\n        messages.error(request, 'Default user may not be added to \"%s\" group.' % group)\n    else:\n        try:\n            account.groups.get(id=group.id)\n            messages.warning(\n                request, 'Group was not added as it has already been added.'\n            )\n        except AccountGroup.DoesNotExist:\n            account.groups.add(group)\n            messages.success(request, 'Added \"%s\" to group \"%s\"' % (account, group))\n            log_add_account_to_group(request, group, account)\n\n    return HttpResponseRedirect(reverse('useradmin-account_detail', args=[account.id]))\n\n\ndef sudo_to_user(request):\n    \"\"\"Sudo to a user based on POST data\"\"\"\n    sudo_account_id = request.POST.get('account')\n    try:\n        sudo_account = Account.objects.get(pk=sudo_account_id)\n    except Account.DoesNotExist:\n        messages.error(request, 'Account not found.')\n    else:\n        sudo(request, sudo_account)\n    return HttpResponseRedirect(reverse('webfront-index'))\n\n\ndef account_delete(request, account_id):\n    \"\"\"Controller for displaying the delete account page\"\"\"\n    try:\n        account = Account.objects.get(id=account_id)\n    except Account.DoesNotExist:\n        messages.error(request, 'Account %s does not exist.' % (account_id))\n        return HttpResponseRedirect(reverse('useradmin-account_list'))\n\n    if account.is_system_account():\n        messages.error(\n            request,\n            'Account %s can not be deleted as it is a system account.' % (account.name),\n        )\n        return HttpResponseRedirect(\n            reverse('useradmin-account_detail', args=[account.id])\n        )\n\n    if request.method == 'POST':\n        from nav.web.auth.utils import PASSWORD_ISSUES_CACHE_KEY\n\n        with transaction.atomic():\n            logged_in_account = get_account(request)\n            LogEntry.add_delete_entry(logged_in_account, account)\n            account.delete()\n            messages.success(request, 'Account %s has been deleted.' % (account.name))\n            # Delete cache entry of how many accounts have password issues\n            cache.delete(PASSWORD_ISSUES_CACHE_KEY)\n            return HttpResponseRedirect(reverse('useradmin-account_list'))\n\n    context = {\n        'name': '%s (%s)' % (account.name, account.login),\n        'type': 'account',\n        'action': 'delete account',\n        'back': reverse('useradmin-account_detail', args=[account.id]),\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/delete.html', context)\n\n\ndef account_organization_remove(request, account_id, org_id):\n    \"\"\"Controller for removing an organization from an account\"\"\"\n    try:\n        account = Account.objects.get(id=account_id)\n    except Account.DoesNotExist:\n        messages.error(request, 'Account %s does not exist.' % (account_id))\n        return HttpResponseRedirect(reverse('useradmin-account_list'))\n\n    try:\n        organization = account.organizations.get(id=org_id)\n    except Organization.DoesNotExist:\n        messages.error(\n            request,\n            'Organization %s does not exist or it is not associated '\n            'with %s.' % (org_id, account),\n        )\n        return HttpResponseRedirect(\n            reverse('useradmin-account_detail', args=[account.id])\n        )\n\n    if request.method == 'POST':\n        account.organizations.remove(organization)\n        messages.success(\n            request,\n            'Organization %s has been removed from account %s.'\n            % (organization, account),\n        )\n\n        logged_in_account = get_account(request)\n        LogEntry.add_log_entry(\n            logged_in_account,\n            'edit-account-remove-org',\n            '{actor} removed user {object} from organization {target}',\n            target=organization,\n            object=account,\n        )\n\n        return HttpResponseRedirect(\n            reverse('useradmin-account_detail', args=[account.id])\n        )\n\n    context = {\n        'name': 'in %s from %s' % (organization, account),\n        'type': 'organization',\n        'action': 'remove organization membership',\n        'back': reverse('useradmin-account_detail', args=[account.id]),\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/delete.html', context)\n\n\ndef account_group_remove(request, account_id, group_id, caller='account'):\n    \"\"\"Controller for removing a group from an account\n\n    :param caller: indicate if account or group is caller. Used to define\n                   redirect url\n    \"\"\"\n    if caller == 'account':\n        back_url = reverse('useradmin-account_detail', args=[account_id])\n        list_redirect = HttpResponseRedirect(reverse('useradmin-account_list'))\n        detail_redirect = HttpResponseRedirect(back_url)\n    else:\n        back_url = reverse('useradmin-group_detail', args=[group_id])\n        list_redirect = HttpResponseRedirect(reverse('useradmin-group_list'))\n        detail_redirect = HttpResponseRedirect(back_url)\n\n    try:\n        account = Account.objects.get(id=account_id)\n    except Account.DoesNotExist:\n        messages.error(request, 'Account %s does not exist.' % (account_id))\n        return list_redirect\n\n    try:\n        group = account.groups.get(id=group_id)\n    except AccountGroup.DoesNotExist:\n        messages.warning(\n            request,\n            'Group %s does not exist or it is not '\n            'associated with %s.' % (group_id, account),\n        )\n        return detail_redirect\n\n    if group.is_protected_group():\n        messages.error(\n            request,\n            '%s can not be removed from %s as it is a '\n            'protected group.' % (account, group),\n        )\n        return detail_redirect\n\n    if group.is_admin_group() and account.is_admin_account():\n        messages.error(request, '%s can not be removed from %s.' % (account, group))\n        return detail_redirect\n\n    if request.method == 'POST':\n        account.groups.remove(group)\n        messages.success(request, '%s has been removed from %s.' % (account, group))\n\n        logged_in_account = get_account(request)\n        LogEntry.add_log_entry(\n            logged_in_account,\n            'edit-account-remove-group',\n            '{actor} removed user {object} from group {target}',\n            target=group,\n            object=account,\n        )\n\n        return detail_redirect\n\n    context = {\n        'name': '%s from the group %s' % (account, group),\n        'type': 'account',\n        'action': 'remove group member',\n        'back': back_url,\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/delete.html', context)\n\n\ndef group_list(request):\n    \"\"\"Controller for listing all user groups in NAV\"\"\"\n    groups = AccountGroup.objects.all()\n    context = {\n        'active': {'group_list': True},\n        'groups': groups,\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/group_list.html', context)\n\n\ndef group_detail(request, group_id=None):\n    \"\"\"Controller for showing details for a user group\"\"\"\n    try:\n        group = AccountGroup.objects.get(id=group_id)\n    except AccountGroup.DoesNotExist:\n        group = None\n\n    group_form = forms.AccountGroupForm(instance=group)\n    account_form = forms.AccountAddForm(group)\n    privilege_form = forms.PrivilegeForm()\n\n    if request.method == 'POST':\n        if 'submit_group' in request.POST:\n            group_form = forms.AccountGroupForm(request.POST, instance=group)\n\n            if group_form.is_valid():\n                group = group_form.save()\n\n                messages.success(request, '\"%s\" has been saved.' % (group))\n                return HttpResponseRedirect(\n                    reverse('useradmin-group_detail', args=[group.id])\n                )\n\n        elif 'submit_privilege' in request.POST:\n            privilege_form = forms.PrivilegeForm(request.POST)\n\n            if privilege_form.is_valid():\n                message_type = privilege_form.cleaned_data['type']\n                target = privilege_form.cleaned_data['target']\n\n                try:\n                    group.privileges.get(type=message_type, target=target)\n                    messages.warning(\n                        request, 'Privilege was not added as it already exists.'\n                    )\n                except Privilege.DoesNotExist:\n                    group.privileges.create(type=message_type, target=target)\n                    messages.success(request, 'Privilege has been added.')\n\n                return HttpResponseRedirect(\n                    reverse('useradmin-group_detail', args=[group.id])\n                )\n        elif 'submit_account' in request.POST:\n            account_form = forms.AccountAddForm(group, request.POST)\n\n            if account_form.is_valid():\n                try:\n                    account = account_form.cleaned_data['account']\n                    group.accounts.get(login=account.login)\n                    messages.warning(\n                        request,\n                        'Account %s was not added as it is '\n                        'already a member of the group.' % account,\n                    )\n                except Account.DoesNotExist:\n                    group.accounts.add(account)\n                    log_add_account_to_group(request, group, account)\n                    messages.success(request, 'Account %s has been added.' % account)\n\n                return HttpResponseRedirect(\n                    reverse('useradmin-group_detail', args=[group.id])\n                )\n\n    active = {'group_detail': True} if group else {'group_new': True}\n\n    context = {\n        'active': active,\n        'group': group,\n        'group_form': group_form,\n        'account_form': account_form,\n        'privilege_form': privilege_form,\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/group_detail.html', context)\n\n\ndef group_delete(request, group_id):\n    \"\"\"Controller for deleting a user group\"\"\"\n    try:\n        group = AccountGroup.objects.get(id=group_id)\n    except AccountGroup.DoesNotExist:\n        messages.error(request, 'Group %s does not exist.' % (group_id))\n        return HttpResponseRedirect(reverse('useradmin-group_list'))\n\n    if group.is_system_group():\n        messages.error(\n            request, 'Group %s is a system group and can not be deleted.' % (group)\n        )\n        return HttpResponseRedirect(reverse('useradmin-group_detail', args=[group.id]))\n\n    if request.method == 'POST':\n        group.delete()\n        messages.success(request, 'Group %s has been deleted.' % (group))\n        return HttpResponseRedirect(reverse('useradmin-group_list'))\n\n    context = {\n        'name': group,\n        'type': 'group',\n        'action': 'delete group',\n        'back': reverse('useradmin-group_detail', args=[group.id]),\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/delete.html', context)\n\n\ndef group_account_remove(request, group_id, account_id):\n    \"\"\"Controller for removing an account from a group\"\"\"\n    return account_group_remove(request, account_id, group_id, caller='group')\n\n\ndef group_privilege_remove(request, group_id, privilege_id):\n    \"\"\"Controller for revoking a privilege from a group\"\"\"\n    try:\n        group = AccountGroup.objects.get(id=group_id)\n    except AccountGroup.DoesNotExist:\n        messages.error(request, 'Group %s does not exist.' % (group_id))\n        return HttpResponseRedirect(reverse('useradmin-group_list'))\n\n    try:\n        privilege = group.privileges.get(id=privilege_id)\n    except Privilege.DoesNotExist:\n        messages.warning(\n            request,\n            'Privilege %s does not exist or it is not associated '\n            'with %s.' % (privilege_id, group),\n        )\n        account = get_account(request)\n        return HttpResponseRedirect(\n            reverse('useradmin-account_detail', args=[account.id])\n        )\n\n    if request.method == 'POST':\n        privilege.delete()\n        messages.success(\n            request, 'Privilege %s has been removed from group %s.' % (privilege, group)\n        )\n        return HttpResponseRedirect(reverse('useradmin-group_detail', args=[group.id]))\n\n    context = {\n        'name': '%s from %s' % (privilege, group),\n        'type': 'privilege',\n        'action': 'revoke privilege',\n        'back': reverse('useradmin-group_detail', args=[group.id]),\n    }\n    context.update(DEFAULT_NAVPATH)\n    return render(request, 'useradmin/delete.html', context)\n\n\nclass NavPathMixin(object):\n    def get_context_data(self, **kwargs):\n        context = super(NavPathMixin, self).get_context_data(**kwargs)\n        context.update(DEFAULT_NAVPATH)\n        return context\n\n\nclass TokenList(NavPathMixin, generic.ListView):\n    \"\"\"Class based view for a token listing\"\"\"\n\n    model = APIToken\n    template_name = 'useradmin/token_list.html'\n\n    def get_context_data(self, **kwargs):\n        context = super(TokenList, self).get_context_data(**kwargs)\n        context['active'] = {'token_list': True}\n        context['auditlog_api_parameters'] = {'object_model': 'apitoken'}\n        return context\n\n\nclass TokenCreate(NavPathMixin, generic.CreateView):\n    \"\"\"Class based view for creating a new token\"\"\"\n\n    model = APIToken\n    form_class = forms.TokenForm\n    template_name = 'useradmin/token_edit.html'\n\n    def post(self, request, *args, **kwargs):\n        response = super(TokenCreate, self).post(request, *args, **kwargs)\n        messages.success(request, 'New token created')\n        account = get_account(request)\n        LogEntry.add_create_entry(account, self.object)\n        return response\n\n\nclass TokenEdit(NavPathMixin, generic.UpdateView):\n    \"\"\"Class based view for editing a token\"\"\"\n\n    model = APIToken\n    form_class = forms.TokenForm\n    template_name = 'useradmin/token_edit.html'\n\n    def post(self, request, *args, **kwargs):\n        old_object = copy.deepcopy(self.get_object())\n        response = super(TokenEdit, self).post(request, *args, **kwargs)\n        messages.success(request, 'Token saved')\n        account = get_account(request)\n        LogEntry.compare_objects(\n            account,\n            old_object,\n            self.get_object(),\n            ['expires', 'permission', 'endpoints', 'comment'],\n        )\n        return response\n\n\nclass TokenDelete(generic.DeleteView):\n    \"\"\"Delete a token\"\"\"\n\n    model = APIToken\n\n    def get_success_url(self):\n        return reverse_lazy('useradmin-token_list')\n\n    def form_valid(self, form):\n        # Add custom logic before deletion\n        token = self.get_object()\n\n        # Call the parent's form_valid() method to perform the actual deletion\n        response = super().form_valid(form)\n\n        # Add custom logic after deletion\n        messages.success(self.request, 'Token deleted')\n        account = get_account(self.request)\n        LogEntry.add_delete_entry(account, token)\n\n        return response\n\n\nclass TokenDetail(NavPathMixin, generic.DetailView):\n    \"\"\"Display details for a token\"\"\"\n\n    model = APIToken\n    template_name = 'useradmin/token_detail.html'\n\n\n@require_POST\ndef token_expire(request, pk):\n    \"\"\"Expire a token\n\n    :param pk: Primary key\n    :type request: django.http.request.HttpRequest\n    \"\"\"\n    token = get_object_or_404(APIToken, pk=pk)\n    token.expires = datetime.now()\n    token.save()\n\n    account = get_account(request)\n    LogEntry.add_log_entry(\n        account,\n        'edit-apitoken-expiry',\n        '{actor} expired {object}',\n        object=token,\n    )\n    messages.success(request, 'Token has been manually expired')\n    return redirect(token)\n\n\ndef log_account_change(actor, old, new):\n    \"\"\"Log change to account\"\"\"\n    if not old:\n        LogEntry.add_create_entry(actor, new)\n        return\n\n    attribute_list = ['login', 'name', 'password', 'ext_sync']\n    LogEntry.compare_objects(\n        actor, old, new, attribute_list, censored_attributes=['password']\n    )\n\n\ndef log_add_account_to_group(request, group, account):\n    logged_in_account = get_account(request)\n    LogEntry.add_log_entry(\n        logged_in_account,\n        'edit-account-add-group',\n        '{actor} added user {object} to group {target}',\n        target=group,\n        object=account,\n    )\n\n\ndef log_add_account_to_org(request, organization, account):\n    logged_in_account = get_account(request)\n    LogEntry.add_log_entry(\n        logged_in_account,\n        'edit-account-add-org',\n        '{actor} added user {object} to organization {target}',\n        target=organization,\n        object=account,\n    )\n\n\nclass JWTList(NavPathMixin, generic.ListView):\n    \"\"\"Class based view for a token listing\"\"\"\n\n    model = JWTRefreshToken\n    template_name = 'useradmin/jwt_list.html'\n\n    def get_context_data(self, **kwargs):\n        context = super(JWTList, self).get_context_data(**kwargs)\n        context['is_configured'] = LOCAL_JWT_IS_CONFIGURED\n        context['active'] = {'jwt_list': True}\n        context['auditlog_api_parameters'] = {'object_model': 'jwtrefreshtoken'}\n        return context\n\n\nclass JWTCreate(NavPathMixin, generic.CreateView):\n    \"\"\"Class based view for creating a new token\"\"\"\n\n    model = JWTRefreshToken\n    form_class = forms.JWTRefreshTokenCreateForm\n    template_name = 'useradmin/jwt_edit.html'\n\n    def form_valid(self, form):\n        # Raises error if form is not valid\n        token = form.save(commit=False)\n        # Use get_context_data so breadcrumbs work correctly\n        context = self.get_context_data()\n\n        if not LOCAL_JWT_IS_CONFIGURED:\n            return render(\n                self.request,\n                'useradmin/jwt_not_enabled.html',\n                context,\n            )\n        encoded_token = generate_refresh_token_from_model(token)\n        claims = decode_token(encoded_token)\n        token.expires = datetime.fromtimestamp(claims['exp'], tz=timezone.utc)\n        token.activates = datetime.fromtimestamp(claims['nbf'], tz=timezone.utc)\n        token.hash = hash_token(encoded_token)\n        self.object = token.save()\n\n        messages.success(self.request, 'New token created')\n        account = get_account(self.request)\n        LogEntry.add_create_entry(account, token)\n        context[\"object\"] = token\n        context[\"token\"] = encoded_token\n        # Render manually to add encoded token to context\n        return render(\n            self.request,\n            'useradmin/jwt_created.html',\n            context,\n        )\n\n\nclass JWTEdit(NavPathMixin, generic.UpdateView):\n    \"\"\"Class based view for creating a new token\"\"\"\n\n    model = JWTRefreshToken\n    form_class = forms.JWTRefreshTokenEditForm\n    template_name = 'useradmin/jwt_edit.html'\n\n    def form_valid(self, form):\n        # Add custom logic before editing\n        old_object = copy.deepcopy(self.get_object())\n\n        # Call the parent's form_valid() method to perform the actual editing\n        response = super().form_valid(form)\n\n        # Add custom logic after editing\n        messages.success(self.request, 'Token saved')\n        account = get_account(self.request)\n        LogEntry.compare_objects(\n            account,\n            old_object,\n            self.get_object(),\n            ['name', 'description'],\n        )\n\n        return response\n\n\nclass JWTDetail(NavPathMixin, generic.DetailView):\n    \"\"\"Display details for a token\"\"\"\n\n    model = JWTRefreshToken\n    template_name = 'useradmin/jwt_detail.html'\n\n\nclass JWTDelete(generic.DeleteView):\n    \"\"\"Delete a token\"\"\"\n\n    model = JWTRefreshToken\n\n    def get_success_url(self):\n        return reverse_lazy('useradmin-jwt_list')\n\n    def form_valid(self, form):\n        # Add custom logic before deletion\n        token = self.get_object()\n\n        # Call the parent's form_valid() method to perform the actual deletion\n        response = super().form_valid(form)\n\n        # Add custom logic after deletion\n        messages.success(self.request, 'Token deleted')\n        account = get_account(self.request)\n        LogEntry.add_delete_entry(account, token)\n\n        return response\n\n\n@require_POST\ndef jwt_revoke(request, pk):\n    \"\"\"Revoke a jwt token\n    :param pk: Primary key\n    :type request: django.http.request.HttpRequest\n    \"\"\"\n    token = get_object_or_404(JWTRefreshToken, pk=pk)\n    token.revoked = True\n    token.save()\n\n    account = get_account(request)\n    LogEntry.add_log_entry(\n        account,\n        'edit-jwttoken-revoked',\n        '{actor} revoked {object}',\n        object=token,\n    )\n    messages.success(request, 'Token has been manually revoked')\n    return redirect('useradmin-jwt_detail', pk=token.pk)\n\n\n@require_POST\ndef jwt_recreate(request, pk):\n    \"\"\"Recreate a jwt token. This will invalidate the old token\n    related to this object.\n    :param pk: Primary key\n    :type request: django.http.request.HttpRequest\n    \"\"\"\n    token = get_object_or_404(JWTRefreshToken, pk=pk)\n    try:\n        encoded_token = generate_refresh_token_from_model(token)\n    except ConfigurationError:\n        return render(\n            request,\n            'useradmin/jwt_not_enabled.html',\n        )\n    claims = decode_token(encoded_token)\n    token.expires = datetime.fromtimestamp(claims['exp'], tz=timezone.utc)\n    token.activates = datetime.fromtimestamp(claims['nbf'], tz=timezone.utc)\n    token.hash = hash_token(encoded_token)\n    token.revoked = False\n    token.save()\n\n    account = get_account(request)\n    LogEntry.add_log_entry(\n        account,\n        'edit-jwttoken-recreated',\n        '{actor} recreated {object}',\n        object=token,\n    )\n    messages.success(request, 'Token has been manually recreated')\n    return render(\n        request, 'useradmin/jwt_created.html', {\"object\": token, \"token\": encoded_token}\n    )\n\n\ndef generate_refresh_token_from_model(token: JWTRefreshToken):\n    endpoint_list = [endpoint for endpoint in token.endpoints.values()]\n    encoded_token = generate_refresh_token(\n        {\n            \"write\": True if token.permission == 'write' else False,\n            \"endpoints\": endpoint_list,\n        }\n    )\n    return encoded_token\n"
  },
  {
    "path": "python/nav/web/utils.py",
    "content": "#\n# Copyright (C) 2012 (SD -311000) Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Utils for views\"\"\"\n\nimport base64\nimport io\nimport os\nimport xml.etree.ElementTree as ET\nimport zipfile\nfrom datetime import datetime, timedelta\nfrom typing import Literal\n\nfrom django import forms\nfrom django.http import FileResponse, HttpRequest, HttpResponse\nfrom django.views.generic.list import ListView\n\nimport qrcode\nimport qrcode.image.svg\nfrom PIL import ImageDraw, ImageFont\n\n\ndef is_ajax(request: HttpRequest) -> bool:\n    \"\"\"Returns True if this request is an AJAX (XMLHttpRequest) request\"\"\"\n    return request.headers.get(\"x-requested-with\") == \"XMLHttpRequest\"\n\n\ndef get_navpath_root():\n    \"\"\"Returns the default navpath root\n\n    To be used in the navpath argument to the base template\n    navpath = [get_navpath_root(), ('Tool', )]\n    \"\"\"\n    return 'Home', '/'\n\n\ndef create_title(navpath):\n    \"\"\"Create title from navpath (or any other array of tuples)\"\"\"\n    return \" - \".join([x[0] for x in navpath])\n\n\nclass SubListView(ListView):\n    \"\"\"Subclass of the generic list ListView to allow extra context\"\"\"\n\n    extra_context = {}\n\n    def get_context_data(self, *args, **kwargs):\n        context = super(SubListView, self).get_context_data(*args, **kwargs)\n        context.update(self.extra_context)\n        return context\n\n\ndef require_param(parameter):\n    \"\"\"A decorator for requiring parameters\n\n    Will check both GET and POST querydict for the parameter.\n    \"\"\"\n\n    def wrap(func):\n        def wrapper(request, *args, **kwargs):\n            if parameter in request.GET or parameter in request.POST:\n                return func(request, *args, **kwargs)\n            else:\n                return HttpResponse(\n                    \"Missing parameter {}\".format(parameter), status=400\n                )\n\n        return wrapper\n\n    return wrap\n\n\ndef generate_png_qr_code(url: str, caption: str = \"\") -> bytes:\n    \"\"\"\n    Generate a QR code from a given url, and, if given, adds a caption to it\n\n    Returns the generated png image as bytes\n    \"\"\"\n    # Creating QR code\n    qr = qrcode.QRCode(box_size=10)\n    qr.add_data(url)\n    img = qr.make_image()\n    draw = ImageDraw.Draw(img)\n\n    # Adding caption\n    if caption:\n        img_width, img_height = img.size\n        font_path = os.path.join(os.path.dirname(__file__), \"static/fonts/OS600.woff\")\n        if len(caption) < 25:\n            font = ImageFont.truetype(font_path, 25)\n        elif len(caption) < 50:\n            font = ImageFont.truetype(font_path, 15)\n        else:\n            font = ImageFont.truetype(font_path, 10)\n        caption_width = font.getlength(caption)\n        draw.text(\n            ((img_width - caption_width) / 2, img_height - 40),\n            text=caption,\n            font=font,\n            fill=\"black\",\n        )\n\n    file_object = io.BytesIO()\n    img.save(file_object, \"PNG\")\n    img.close()\n\n    return file_object.getvalue()\n\n\ndef generate_svg_qr_code(url: str, caption: str = \"\") -> bytes:\n    \"\"\"\n    Generate a QR code from a given url, and, if given, adds a caption to it\n\n    Returns the generated svg image as bytes\n    \"\"\"\n    img = qrcode.make(url, image_factory=qrcode.image.svg.SvgPathImage)\n\n    root = ET.fromstring(img.to_string(encoding=\"unicode\"))\n    if caption:\n        if len(caption) < 25:\n            font_size = \"3\"\n        elif len(caption) < 50:\n            font_size = \"1.5\"\n        else:\n            font_size = \"1\"\n        text = ET.SubElement(\n            root,\n            \"text\",\n            {\n                \"x\": \"50%\",\n                \"y\": \"96%\",\n                \"text-anchor\": \"middle\",\n                \"font-size\": font_size,\n            },\n        )\n        text.text = caption\n\n    del root.attrib[\"height\"]\n    del root.attrib[\"width\"]\n\n    ET.register_namespace(\"\", \"http://www.w3.org/2000/svg\")\n\n    return ET.tostring(root)\n\n\ndef generate_qr_code_as_string(\n    url: str, caption: str = \"\", file_format: Literal[\"png\", \"svg\"] = \"png\"\n) -> str:\n    \"\"\"\n    Takes an url, a caption (optional) and which file format the QR code should be and\n    returns a QR code as string\n    \"\"\"\n    qr_code_bytes = b\"\"\n    if file_format == \"png\":\n        qr_code_bytes = generate_png_qr_code(url=url, caption=caption)\n    elif file_format == \"svg\":\n        qr_code_bytes = generate_svg_qr_code(url=url, caption=caption)\n\n    return base64.b64encode(qr_code_bytes).decode('utf-8')\n\n\ndef generate_qr_codes_as_zip_response(\n    url_dict: dict[str, str], file_format: Literal[\"png\", \"svg\"] = \"png\"\n) -> FileResponse:\n    \"\"\"\n    Takes a dict of the form {name:url} and returns a FileResponse object that\n    represents a ZIP file consisting of named PNG images of QR codes which map\n    each name of the element to its url\n\n    Returning the FileResponse in a Django view causes the ZIP file to be delivered\n    in the form of a download attachment in web browsers\n    \"\"\"\n    qr_codes_dict = dict()\n    for caption, url in url_dict.items():\n        if file_format == \"png\":\n            qr_codes_dict[caption] = generate_png_qr_code(url=url, caption=caption)\n        elif file_format == \"svg\":\n            qr_codes_dict[caption] = generate_svg_qr_code(url=url, caption=caption)\n\n    buf = io.BytesIO()\n    with zipfile.ZipFile(buf, \"w\", compression=zipfile.ZIP_DEFLATED) as zf:\n        for image_name, qr_code_bytes in qr_codes_dict.items():\n            zf.writestr(image_name + \".\" + file_format, qr_code_bytes)\n    buf.seek(0)\n\n    return FileResponse(buf, as_attachment=True, filename=\"nav_qr_codes.zip\")\n\n\ndef validate_timedelta_for_overflow(days: int = 0, hours: int = 0):\n    \"\"\"\n    Validates that the given numbers of days and hours when subtracted from the\n    current time will not result in an overflow error\n\n\n    If that happens this function will raise a forms.ValidationError\n    \"\"\"\n    try:\n        datetime.now() - timedelta(days=days, hours=hours)\n    except OverflowError:\n        raise forms.ValidationError(\"They did not have computers that long ago\")\n"
  },
  {
    "path": "python/nav/web/watchdog/__init__.py",
    "content": ""
  },
  {
    "path": "python/nav/web/watchdog/urls.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"URL config for WatchDog\"\"\"\n\nfrom django.urls import path\nfrom nav.web.watchdog import views\n\n\nurlpatterns = [\n    path('', views.render_index, name='watchdog-index'),\n    path(\n        'active_addresses',\n        views.get_active_addresses,\n        name='watchdog-active-addresses',\n    ),\n    path('serial_numbers', views.get_serial_numbers, name='watchdog-serial-numbers'),\n    path('cam_and_arp', views.get_cam_and_arp, name='watchdog-cam-and-arp'),\n    path('db_size', views.get_database_size, name='watchdog-db-size'),\n]\n"
  },
  {
    "path": "python/nav/web/watchdog/views.py",
    "content": "#\n# Copyright (C) 2014, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Controllers for WatchDog requests\"\"\"\n\nfrom django.shortcuts import render\nfrom django.http import JsonResponse\nfrom django.db import connection\n\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Arp, Device\nfrom nav.web.utils import create_title\nfrom nav.watchdog.util import get_statuses\n\n\ndef render_index(request):\n    \"\"\"Controller for WatchDog index\"\"\"\n    navpath = [(\"Home\", \"/\"), (\"WatchDog\",)]\n\n    context = {\n        \"navpath\": navpath,\n        \"title\": create_title(navpath),\n        \"tests\": get_statuses(),\n    }\n\n    return render(request, \"watchdog/base.html\", context)\n\n\ndef get_active_addresses(_):\n    \"\"\"Get active addresses on the network\"\"\"\n    active = Arp.objects.filter(end_time=INFINITY)\n    num_active = active.count()\n    num_active_ipv6 = active.extra(where=[\"family(ip)=6\"]).count()\n    num_active_ipv4 = active.extra(where=[\"family(ip)=4\"]).count()\n    return JsonResponse(\n        {\"active\": num_active, \"ipv6\": num_active_ipv6, \"ipv4\": num_active_ipv4}\n    )\n\n\ndef get_cam_and_arp(_request):\n    \"\"\"Get cam and arp numbers\"\"\"\n    cursor = connection.cursor()\n    return JsonResponse(\n        {\n            \"cam\": get_cam(cursor),\n            \"arp\": get_arp(cursor),\n            \"oldest_cam\": get_oldest_cam_date(cursor),\n            \"oldest_arp\": get_oldest_arp_date(cursor),\n        }\n    )\n\n\ndef get_database_size(_request):\n    \"\"\"Gets the size of the PostgreSQL database\"\"\"\n    cursor = connection.cursor()\n    return JsonResponse({\"size\": get_postgres_db_size(cursor)})\n\n\n#\n# Helper functions\n#\n\n\ndef get_cam(cursor):\n    \"\"\"Gets number of cam records\"\"\"\n    return get_tuple_count_estimate(cursor, \"cam\")\n\n\ndef get_oldest_cam_date(cursor):\n    \"\"\"Returns the date of the oldest closed CAM record\"\"\"\n    return get_oldest_start_time_date(cursor, \"cam\")\n\n\ndef get_arp(cursor):\n    \"\"\"Gets number of arp records\"\"\"\n    return get_tuple_count_estimate(cursor, \"arp\")\n\n\ndef get_oldest_arp_date(cursor):\n    \"\"\"Returns the date of the oldest closed ARP record\"\"\"\n    return get_oldest_start_time_date(cursor, \"arp\")\n\n\ndef get_tuple_count_estimate(cursor, table):\n    \"\"\"Returns PostgreSQL's estimate number of live tuples in table\"\"\"\n    query = \"\"\"SELECT n_live_tup\n               FROM pg_stat_all_tables\n               WHERE relname = %s\"\"\"\n    cursor.execute(query, (table,))\n    row = cursor.fetchone()\n    return row[0]\n\n\ndef get_oldest_start_time_date(cursor, table):\n    \"\"\"Returns the date of the oldest closed ARP/CAM record (or from any log table\n    using the same start_time/end_time principle as the arp/cam tables\n\n    \"\"\"\n    query = \"\"\"SELECT start_time::DATE\n                FROM\n                 (SELECT start_time\n                  FROM {table}\n                  WHERE end_time < 'infinity'\n                  ORDER BY start_time ASC\n                  LIMIT 1) AS foo\"\"\"\n    cursor.execute(query.format(table=table))\n    row = cursor.fetchone()\n    return row[0] if row else None\n\n\ndef get_postgres_db_size(cursor):\n    \"\"\"Returns the size of the PostgreSQL database as a pretty string\"\"\"\n    query = \"\"\"SELECT pg_size_pretty( pg_database_size( current_database() ) )\"\"\"\n    cursor.execute(query)\n    row = cursor.fetchone()\n    return row[0] if row else None\n\n\ndef get_serial_numbers(_):\n    \"\"\"Get number of distinct serial numbers in NAV\"\"\"\n    return JsonResponse({\"count\": Device.objects.distinct(\"serial\").count()})\n"
  },
  {
    "path": "python/nav/web/webfront/__init__.py",
    "content": "\"\"\"NAV web common package.\"\"\"\n\nimport os\n\nfrom django.db.models import Count, Q\nfrom django.http import Http404\n\nfrom nav.config import find_config_file\nfrom nav.models.profiles import AccountDashboard\n\nWELCOME_ANONYMOUS_PATH = find_config_file(\n    os.path.join(\"webfront\", \"welcome-anonymous.txt\")\n)\nWELCOME_REGISTERED_PATH = find_config_file(\n    os.path.join(\"webfront\", \"welcome-registered.txt\")\n)\nNAV_LINKS_PATH = find_config_file(os.path.join(\"webfront\", \"nav-links.conf\"))\n\n\ndef find_dashboard(account, dashboard_id=None):\n    \"\"\"Find a dashboard for this account\n\n    Either find a specific one or the default one. If none of those exist we\n    find the one with the most widgets.\n    \"\"\"\n    dashboard = (\n        _find_dashboard_by_id(account, dashboard_id)\n        if dashboard_id\n        else _find_default_dashboard(account)\n    )\n    dashboard.shared_by_other = dashboard.is_shared and dashboard.account != account\n    dashboard.is_default = dashboard.is_default_for_account(account)\n    # Only show warning on root view, not when navigating to specific dashboards\n    dashboard.needs_default_set = not account.has_default_dashboard and not dashboard_id\n\n    return dashboard\n\n\ndef _find_dashboard_by_id(account, dashboard_id):\n    \"\"\"Find a specific dashboard by ID for this account\"\"\"\n    try:\n        dashboard = AccountDashboard.objects.get(\n            (Q(account=account) | Q(is_shared=True)), pk=dashboard_id\n        )\n        return dashboard\n\n    except AccountDashboard.DoesNotExist:\n        raise Http404\n\n\ndef _find_default_dashboard(account):\n    \"\"\"Find the default dashboard for this account\"\"\"\n    if account.has_default_dashboard:\n        return account.default_dashboard\n\n    # No default dashboard? Find the one with the most widgets\n    dashboards = AccountDashboard.objects.filter(account=account)\n    if dashboards.count() == 0:\n        raise Http404\n    dashboard = (\n        dashboards.annotate(widget_count=Count('widgets'))\n        .order_by('-widget_count')\n        .first()\n    )\n\n    return dashboard\n\n\ndef get_dashboards_for_account(account) -> list[AccountDashboard]:\n    \"\"\"\n    Returns a queryset of dashboards for the given account,\n    including those the account subscribes to.\n    \"\"\"\n    default_dashboard = account.default_dashboard\n    default_dashboard_id = default_dashboard.id if default_dashboard else None\n    dashboards = (\n        AccountDashboard.objects.filter(\n            Q(account=account)\n            | Q(subscribers__account=account)\n            | Q(pk=default_dashboard_id)\n        )\n        .select_related('account')\n        .distinct()\n    )\n    for dash in dashboards:\n        dash.can_edit = dash.can_edit(account)\n        dash.shared_by_other = dash.is_shared and dash.account_id != account.id\n        dash.is_default = dash.id == default_dashboard_id\n\n    return list(dashboards)\n"
  },
  {
    "path": "python/nav/web/webfront/forms.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom django import forms\nfrom django.forms.models import modelformset_factory\nfrom django.views.decorators.debug import sensitive_variables\n\nfrom nav.models.profiles import NavbarLink, Account\nfrom nav.web.crispyforms import (\n    SubmitField,\n    set_flat_form_attributes,\n    FlatFieldset,\n)\n\n\nclass LoginForm(forms.Form):\n    origin = forms.CharField(widget=forms.HiddenInput, required=False)\n    username = forms.CharField(label='Username')\n    password = forms.CharField(\n        label='Password', widget=forms.PasswordInput(render_value=False)\n    )\n\n    def __init__(self, *args, **kwargs):\n        super(LoginForm, self).__init__(*args, **kwargs)\n        self.attrs = set_flat_form_attributes(\n            form_action='webfront-login',\n            form_fields=[self['username'], self['password'], self['origin']],\n            submit_field=SubmitField(value='Log in', css_classes='small expand'),\n        )\n\n\nclass NavbarlinkForm(forms.ModelForm):\n    def __init__(self, *args, **kwargs):\n        super(NavbarlinkForm, self).__init__(*args, **kwargs)\n        self.empty_permitted = True\n        self.render_unmentioned_fields = True\n        self.attrs = set_flat_form_attributes(\n            form_fields=[\n                self['name'],\n                self['uri'],\n            ]\n        )\n\n\nNavbarLinkFormSet = modelformset_factory(\n    NavbarLink, exclude=('account',), form=NavbarlinkForm, extra=2, can_delete=1\n)\n\n\nclass ChangePasswordForm(forms.Form):\n    \"\"\"Form for changing password for an account\"\"\"\n\n    old_password = forms.CharField(\n        label='Old password', widget=forms.widgets.PasswordInput\n    )\n    new_password1 = forms.CharField(\n        label='New password (>= 8 characters)',\n        min_length=Account.MIN_PASSWD_LENGTH,\n        widget=forms.widgets.PasswordInput,\n    )\n    new_password2 = forms.CharField(\n        label='Repeat password',\n        min_length=Account.MIN_PASSWD_LENGTH,\n        widget=forms.widgets.PasswordInput,\n    )\n\n    def __init__(self, *args, **kwargs):\n        if 'my_account' in kwargs:\n            self.account = kwargs.pop('my_account')\n        else:\n            self.account = None\n\n        super(ChangePasswordForm, self).__init__(*args, **kwargs)\n\n        self.attrs = set_flat_form_attributes(\n            form_id=\"change-password-form\",\n            form_action='webfront-preferences-changepassword',\n            form_fields=[\n                FlatFieldset(\n                    legend='Change password',\n                    fields=[\n                        self['old_password'],\n                        self['new_password1'],\n                        self['new_password2'],\n                        SubmitField(value='Change password', css_classes='small'),\n                    ],\n                )\n            ],\n        )\n\n    @sensitive_variables('old_password')\n    def clean_old_password(self):\n        \"\"\"Verify that old password is correct\"\"\"\n        old_password = self.cleaned_data['old_password']\n        is_valid_password = self.account.check_password(old_password)\n        if not is_valid_password:\n            self.clear_passwords(self.cleaned_data)\n            raise forms.ValidationError('Password is incorrect')\n        return\n\n    @sensitive_variables('cleaned_data', 'password1', 'password2')\n    def clean(self):\n        \"\"\"Check that passwords match. If not clear form data\"\"\"\n        cleaned_data = super(ChangePasswordForm, self).clean()\n        password1 = cleaned_data.get('new_password1')\n        password2 = cleaned_data.get('new_password2')\n\n        if password1 != password2:\n            self.clear_passwords(cleaned_data)\n            raise forms.ValidationError('Passwords did not match')\n        return cleaned_data\n\n    @sensitive_variables('cleaned_data')\n    @staticmethod\n    def clear_passwords(cleaned_data):\n        \"\"\"Clear passwords from the cleaned data\"\"\"\n        if 'new_password1' in cleaned_data:\n            del cleaned_data['new_password1']\n        if 'new_password2' in cleaned_data:\n            del cleaned_data['new_password2']\n        if 'old_password' in cleaned_data:\n            del cleaned_data['old_password']\n"
  },
  {
    "path": "python/nav/web/webfront/urls.py",
    "content": "#\n# Copyright (C) 2009 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Django URL configuration for webfront\"\"\"\n\nfrom django.urls import path, re_path\nfrom django.views.generic import RedirectView\n\nfrom nav.web.webfront import views\n\nurlpatterns = [\n    path('', views.index, name='webfront-index'),\n    path('index/login/', views.login, name='webfront-login'),\n    path(\n        'index/audit-logging-modal/',\n        views.audit_logging_modal,\n        name='webfront-audit-logging-modal',\n    ),\n    path('index/logout/', views.logout, name='webfront-logout'),\n    # Dashboard\n    path('index/dashboard/<int:did>/', views.index, name='dashboard-index-id'),\n    path(\n        'index/dashboard/<int:dashboard_id>/load',\n        views.load_dashboard,\n        name='dashboard-load',\n    ),\n    path(\n        'index/dashboard/toggle-shared/<int:did>/',\n        views.toggle_dashboard_shared,\n        name='dashboard-toggle-shared',\n    ),\n    path(\n        'index/dashboard/toggle-subscribe/<int:did>/',\n        views.toggle_subscribe,\n        name='dashboard-toggle-subscribe',\n    ),\n    path(\n        'index/dashboard/search/modal/',\n        views.dashboard_search_modal,\n        name='dashboard-search-modal',\n    ),\n    path('index/dashboard/search/', views.dashboard_search, name='dashboard-search'),\n    path('index/dashboard/add/', views.add_dashboard, name='add-dashboard'),\n    path(\n        'index/dashboard/set_default/<int:did>/',\n        views.set_default_dashboard,\n        name='set-default-dashboard',\n    ),\n    path(\n        'index/dashboard/rename/<int:did>/',\n        views.rename_dashboard,\n        name='rename-dashboard',\n    ),\n    path(\n        'index/dashboard/delete/<int:did>/',\n        views.delete_dashboard,\n        name='delete-dashboard',\n    ),\n    path(\n        'index/dashboard/columns/<int:did>/',\n        views.save_dashboard_columns,\n        name='save-dashboard-columns',\n    ),\n    path(\n        'index/dashboard/moveto/<int:did>/',\n        views.moveto_dashboard,\n        name='moveto-dashboard',\n    ),\n    path(\n        'index/dashboard/export/<int:did>',\n        views.export_dashboard,\n        name='export-dashboard',\n    ),\n    path('index/dashboard/import', views.import_dashboard, name='import-dashboard'),\n    path(\n        'index/dashboard/importmodal',\n        views.import_dashboard_modal,\n        name='import-dashboard-modal',\n    ),\n    path('index/dashboard/', views.index, name='dashboard-index'),\n    path('about/', views.about, name='webfront-about'),\n    path(\n        'doc/<path:path>',\n        RedirectView.as_view(url='/static/doc/%(path)s', permanent=True),\n    ),\n    path('doc/', RedirectView.as_view(url='/static/doc/index.html', permanent=True)),\n    re_path(\n        r'^uploads/(?P<path>.*)$',\n        RedirectView.as_view(url='/static/uploads/%(path)s', permanent=True),\n    ),\n    path('toolbox/', views.toolbox, name='webfront-toolbox'),\n    path('preferences/', RedirectView.as_view(url='/accounts/', permanent=True)),\n    path('accounts/', views.preferences, name='webfront-preferences'),\n    path(\n        'accounts/savelinks',\n        views.save_links,\n        name='webfront-preferences-savelinks',\n    ),\n    path(\n        'accounts/changepassword',\n        views.change_password,\n        name='webfront-preferences-changepassword',\n    ),\n    path(\n        'accounts/set_account_preference',\n        views.set_account_preference,\n        name='set-account-preference',\n    ),\n    path('qr-code/', views.qr_code, name='webfront-qr-code'),\n]\n"
  },
  {
    "path": "python/nav/web/webfront/utils.py",
    "content": "\"\"\"Utility functions for various parts of the frontpage, navbar etc.\"\"\"\n\n#\n# Copyright (C) 2009, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport io\nimport os\nfrom datetime import datetime\nimport logging\n\nfrom django.db.models import Q\n\nfrom nav.config import get_config_locations\nfrom nav.web import webfrontConfig\nfrom nav.models.msgmaint import Message\nfrom nav.models.event import AlertHistory\nfrom nav.models.manage import Netbox\nfrom nav.models.profiles import AccountTool\n\n_logger = logging.getLogger('nav.web.tools.utils')\n\n\nclass Tool(object):\n    \"\"\"Class representing a tool\"\"\"\n\n    def __init__(\n        self, name, uri, icon, description, priority=0, display=True, doclink=None\n    ):\n        self.name = name\n        self.uri = uri\n        self.icon = icon\n        self.description = description\n        self.priority = int(priority)\n        self.display = display\n        self.doclink = doclink\n\n    def __str__(self):\n        return self.name\n\n    def __eq__(self, other):\n        return self.name == other.name\n\n    def __lt__(self, other):\n        return self.priority < other.priority\n\n    def __repr__(self):\n        return \"Tool('%s')\" % self.name\n\n\ndef quick_read(filename):\n    \"\"\"Read and return the contents of a file, or None if something went wrong.\"\"\"\n    try:\n        return open(filename).read().strip()\n    except IOError:\n        return None\n\n\ndef current_messages():\n    \"\"\"Finds current messages\"\"\"\n    return Message.objects.filter(\n        publish_start__lt=datetime.today().isoformat(' '),\n        publish_end__gt=datetime.today().isoformat(' '),\n        replaced_by__isnull=True,\n    )\n\n\ndef boxes_down():\n    \"\"\"Finds boxes that are down and not currently on maintenance\"\"\"\n    infinity = datetime.max\n    on_maintenance = Netbox.objects.filter(\n        alerthistory__event_type='maintenanceState',\n        alerthistory__end_time__gte=infinity,\n    )\n    _boxes_down = (\n        AlertHistory.objects.select_related('netbox')\n        .filter(\n            Q(netbox__up=Netbox.UP_DOWN) | Q(netbox__up=Netbox.UP_SHADOW),\n            end_time__gte=infinity,\n            event_type='boxState',\n        )\n        .exclude(netbox__in=on_maintenance)\n        .order_by('-start_time')\n    )\n    return _boxes_down\n\n\ndef tool_list(account):\n    \"\"\"Get the list of tools existing in the tool directories\"\"\"\n\n    def parse_tool(tool_file):\n        \"\"\"Parse the tool file and return a Tool object\"\"\"\n        attrs = (\n            line.split('=', 1)\n            for line in io.open(tool_file, encoding='utf-8')\n            if line.strip()\n        )\n        attrs = {key.strip(): value.strip() for key, value in attrs}\n        return Tool(**attrs)\n\n    paths = [str(path / 'toolbox') for path in get_config_locations()]\n    if webfrontConfig.has_option('toolbox', 'path'):\n        paths = webfrontConfig.get('toolbox', 'path').split(os.pathsep)\n\n    _tool_list = []\n    for path in paths:\n        if os.access(path, os.F_OK):\n            filelist = os.listdir(path)\n            for filename in filelist:\n                if filename[-5:] == '.tool':\n                    fullpath = os.path.join(path, filename)\n                    try:\n                        tool = parse_tool(fullpath)\n                    except Exception as error:  # noqa: BLE001\n                        _logger.error('Error parsing tool in %s: %s', filename, error)\n                        continue\n\n                    if account.has_perm('web_access', tool.uri):\n                        _tool_list.append(tool)\n    _tool_list.sort()\n    return _tool_list\n\n\ndef get_account_tools(account, all_tools):\n    \"\"\"Get tools for this account\"\"\"\n    account_tools = account.account_tools.all()\n    tools = []\n    for tool in all_tools:\n        try:\n            account_tool = account_tools.get(toolname=tool.name)\n        except AccountTool.DoesNotExist:\n            tools.append(tool)\n        else:\n            tool.priority = account_tool.priority\n            tool.display = account_tool.display\n            tools.append(tool)\n    return tools\n\n\ndef split_tools(tools, parts=3):\n    \"\"\"Split tools into even parts for megadropdown\"\"\"\n    columns = []\n    tools_in_column = len(tools) // parts\n    remainder = len(tools) % parts\n    first_index = 0\n    for _column in range(parts):\n        tools_in_this_column = tools_in_column\n        if remainder:\n            tools_in_this_column += 1\n            remainder -= 1\n        last_index = first_index + tools_in_this_column\n        columns.append(tools[first_index:last_index])\n        first_index += tools_in_this_column\n    return columns\n"
  },
  {
    "path": "python/nav/web/webfront/views.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009-2011 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Navbar (tools, preferences) and login related controllers\"\"\"\n\nimport json\nimport logging\nfrom datetime import datetime\nfrom operator import attrgetter\nfrom typing import Optional\nfrom urllib.parse import quote as urlquote\n\nfrom django.db import models\nfrom django.db.models import Q\nfrom django.contrib.auth import authenticate, login as django_login\nfrom django.http import (\n    HttpRequest,\n    HttpResponse,\n    HttpResponseForbidden,\n    HttpResponseRedirect,\n    JsonResponse,\n)\nfrom django.shortcuts import get_object_or_404, render\nfrom django.urls import reverse\nfrom django.views.decorators.debug import sensitive_variables, sensitive_post_parameters\nfrom django.views.decorators.http import require_GET, require_POST\nfrom django_htmx.http import (\n    HttpResponseClientRedirect,\n    HttpResponseClientRefresh,\n    trigger_client_event,\n)\n\nfrom nav.auditlog.models import LogEntry\nfrom nav.models.profiles import (\n    AccountDashboard,\n    AccountDashboardSubscription,\n    AccountDefaultDashboard,\n    AccountNavlet,\n    NavbarLink,\n)\nfrom nav.web import webfrontConfig\nfrom nav.web.auth import get_post_logout_redirect_url\nfrom nav.web.auth.sudo import desudo\nfrom nav.web.auth.utils import clear_session, get_account, set_account\nfrom nav.web.message import new_message, Messages\nfrom nav.web.modals import render_modal, render_modal_alert\nfrom nav.web.navlets import can_modify_navlet, create_navlet_object\nfrom nav.web.utils import generate_qr_code_as_string\nfrom nav.web.utils import require_param\nfrom nav.web.webfront import (\n    find_dashboard,\n    get_dashboards_for_account,\n    WELCOME_ANONYMOUS_PATH,\n    WELCOME_REGISTERED_PATH,\n)\nfrom nav.web.webfront.forms import (\n    LoginForm,\n    NavbarLinkFormSet,\n    ChangePasswordForm,\n)\nfrom nav.web.webfront.utils import quick_read, tool_list\n\n_logger = logging.getLogger('nav.web.tools')\n\n\nCOLUMNS_MAPPER = {\n    '1': 'medium-12',\n    '2': 'medium-6',\n    '3': 'medium-4',\n    '4': 'medium-3',\n}\n\n\ndef index(request, did=None):\n    \"\"\"Controller for main page.\"\"\"\n    # Read files that will be displayed on front page\n    account = get_account(request)\n    if account.is_default_account():\n        welcome = quick_read(WELCOME_ANONYMOUS_PATH)\n    else:\n        welcome = quick_read(WELCOME_REGISTERED_PATH)\n\n    dashboard = find_dashboard(account, did)\n    dashboards = get_dashboards_for_account(account)\n\n    dashboard_ids = [d.id for d in dashboards]\n    if dashboard.id not in dashboard_ids:\n        dashboards.append(dashboard)\n\n    context = {\n        'navpath': [('Home', '/')],\n        'date_now': datetime.today(),\n        'welcome': welcome,\n        'dashboard': dashboard,\n        'dashboards': dashboards,\n        'can_edit': dashboard.can_edit(account),\n        'is_subscribed': dashboard.is_subscribed(account),\n        'title': 'NAV - {}'.format(dashboard.name),\n        'widget_display_density': account.preferences.get('widget_display_density', ''),\n    }\n\n    return render(request, 'webfront/index.html', context)\n\n\ndef load_dashboard(request, dashboard_id=None):\n    \"\"\"Renders the dashboard widgets for a given dashboard.\"\"\"\n    account = get_account(request)\n    dashboard = find_dashboard(account, dashboard_id)\n    usernavlets = dashboard.widgets.all()\n    compact = account.preferences.get('widget_display_density') == 'compact'\n\n    columns = dashboard.num_columns\n    column_map = {i: [] for i in range(1, columns + 1)}\n\n    for navlet in usernavlets:\n        col = max(1, min(navlet.column, columns))\n        column_map[col].append(create_navlet_object(navlet))\n\n    return render(\n        request,\n        'webfront/_dashboard_navlets.html',\n        {\n            'has_navlets': len(usernavlets) > 0,\n            'dashboard_id': dashboard.id,\n            'columns': column_map,\n            'column_count': columns,\n            'compact': compact,\n            'column_class': COLUMNS_MAPPER.get(str(columns), 'medium-4'),\n        },\n    )\n\n\n@require_POST\ndef toggle_dashboard_shared(request, did):\n    \"\"\"Toggle shared status for this dashboard\"\"\"\n    account = get_account(request)\n    dashboard = get_object_or_404(AccountDashboard, pk=did, account=account)\n\n    # Checkbox input returns 'on' if checked\n    is_shared = request.POST.get('is_shared') == 'on'\n    if is_shared == dashboard.is_shared:\n        return _render_share_form_response(\n            request,\n            dashboard,\n        )\n\n    dashboard.is_shared = is_shared\n    dashboard.save()\n\n    if not is_shared:\n        AccountDashboardSubscription.objects.filter(dashboard=dashboard).delete()\n        AccountDefaultDashboard.objects.exclude(account=account).filter(\n            dashboard=dashboard\n        ).delete()\n\n    return _render_share_form_response(\n        request,\n        dashboard,\n        message=\"Dashboard sharing is now {}.\".format(\n            \"enabled\" if is_shared else \"disabled\"\n        ),\n    )\n\n\ndef _render_share_form_response(\n    request, dashboard: AccountDashboard, message: str = None\n):\n    \"\"\"Render the share dashboard form response.\"\"\"\n    return render(\n        request,\n        'webfront/_dashboard_settings_shared_form.html',\n        {\n            'dashboard': dashboard,\n            'message': message,\n            'changed': True,\n        },\n    )\n\n\n@require_POST\ndef toggle_subscribe(request, did):\n    \"\"\"Toggle subscription status for this dashboard\"\"\"\n    dashboard = get_object_or_404(AccountDashboard, pk=did, is_shared=True)\n    account = get_account(request)\n    if dashboard.is_subscribed(account):\n        AccountDashboardSubscription.objects.filter(\n            account=account, dashboard=dashboard\n        ).delete()\n    else:\n        AccountDashboardSubscription(account=account, dashboard=dashboard).save()\n\n    return HttpResponseClientRefresh()\n\n\n@require_GET\ndef dashboard_search_modal(request):\n    \"\"\"Render the dashboard search modal dialog\"\"\"\n\n    return render_modal(\n        request,\n        'webfront/_dashboard_search_form.html',\n        modal_id='dashboard-search-form',\n        size='small',\n    )\n\n\n@require_POST\ndef dashboard_search(request):\n    \"\"\"Search for shared dashboards\"\"\"\n    raw_search = request.POST.get('search', '')\n    search = raw_search.strip() if raw_search else ''\n    if not search:\n        return render(\n            request,\n            'webfront/_dashboard_search_results.html',\n            {\n                'dashboards': [],\n                'search': search,\n            },\n        )\n\n    account = get_account(request)\n    dashboards = (\n        AccountDashboard.objects.exclude(account=account)\n        .filter(\n            Q(name__icontains=search)\n            | Q(account__login__icontains=search)\n            | Q(account__name__icontains=search),\n            is_shared=True,\n        )\n        .select_related('account')\n        .annotate(\n            is_subscribed=models.Exists(\n                AccountDashboardSubscription.objects.filter(\n                    dashboard=models.OuterRef('pk'), account=account\n                )\n            )\n        )\n    )\n\n    return render(\n        request,\n        'webfront/_dashboard_search_results.html',\n        {\n            'dashboards': dashboards,\n            'search': search,\n        },\n    )\n\n\ndef export_dashboard(request, did):\n    \"\"\"Export dashboard as JSON.\"\"\"\n    account = get_account(request)\n    dashboard = find_dashboard(account, did)\n\n    response = JsonResponse(dashboard.to_json_dict())\n    response['Content-Disposition'] = 'attachment; filename={name}.json'.format(\n        name=urlquote(dashboard.name)\n    )\n    return response\n\n\ndashboard_fields = {\n    'name': str,\n    'num_columns': int,\n    'widgets': list,\n    'version': int,\n}\n\nwidget_fields = {\n    'navlet': str,\n    'column': int,\n    'preferences': dict,\n    'order': int,\n}\n\n\n@require_POST\ndef import_dashboard(request):\n    \"\"\"Receive an uploaded dashboard file and store in database\"\"\"\n    account = get_account(request)\n    if not can_modify_navlet(account, request):\n        return HttpResponseForbidden()\n\n    if 'file' not in request.FILES:\n        return render_modal_alert(\n            request, \"You need to provide a file\", modal_id=\"import-dashboard-form\"\n        )\n\n    try:\n        # Ensure file is interpreted as utf-8 regardless of locale\n        blob = request.FILES['file'].read()\n        data = json.loads(blob.decode(\"utf-8\"))\n        if not isinstance(data, dict):\n            raise ValueError()\n        for field, dtype in dashboard_fields.items():\n            if field not in data:\n                raise ValueError()\n            if not isinstance(data[field], dtype):\n                raise ValueError()\n        dashboard = AccountDashboard(account=account, name=data['name'])\n        dashboard.num_columns = data['num_columns']\n        widgets = []\n        for widget in data['widgets']:\n            if not isinstance(widget, dict):\n                raise ValueError()\n            for field, dtype in widget_fields.items():\n                if field not in widget:\n                    raise ValueError()\n                if not isinstance(widget[field], dtype):\n                    raise ValueError()\n                if widget['column'] > dashboard.num_columns:\n                    raise ValueError()\n            widget = {k: v for k, v in widget.items() if k in widget_fields}\n            widgets.append(widget)\n        dashboard.save()\n        for widget in widgets:\n            dashboard.widgets.create(account=account, **widget)\n        dashboard.save()\n        dashboard_url = reverse('dashboard-index-id', args=(dashboard.id,))\n        return HttpResponseClientRedirect(dashboard_url)\n    except ValueError:\n        _logger.exception('Failed to parse dashboard file for import')\n        return render_modal_alert(\n            request,\n            \"File is not a valid dashboard file\",\n            modal_id=\"import-dashboard-form\",\n        )\n\n\ndef import_dashboard_modal(request):\n    \"\"\"Render the import dashboard modal dialog\"\"\"\n    return render_modal(\n        request,\n        'webfront/_import_dashboard_form_modal.html',\n        modal_id=\"import-dashboard-form\",\n        size=\"small\",\n    )\n\n\n@sensitive_post_parameters('password')\ndef login(request):\n    \"\"\"Controller for the login page\"\"\"\n    if request.method == 'POST':\n        return do_login(request)\n\n    origin = request.GET.get('origin', '').strip()\n    if 'noaccess' in request.GET:\n        account = get_account(request)\n        if account.is_default_account():\n            errors = ['You need to log in to access this resource']\n        else:\n            errors = [\n                'You have insufficient privileges to access this '\n                'resource. Please log in as another user.'\n            ]\n    else:\n        errors = []\n\n    return render(\n        request,\n        'webfront/login.html',\n        {\n            'form': LoginForm(initial={'origin': origin}),\n            'origin': origin,\n            'errors': errors,\n        },\n    )\n\n\ndef audit_logging_modal(request):\n    \"\"\"Render the audit logging info modal\"\"\"\n    return render_modal(\n        request,\n        'webfront/_about_audit_logging_modal.html',\n        modal_id='about-audit-logging',\n        size=\"small\",\n    )\n\n\n@sensitive_variables('password')\ndef do_login(request: HttpRequest) -> HttpResponse:\n    \"\"\"Do a login based on post parameters\"\"\"\n    errors = []\n    form = LoginForm(request.POST)\n    origin = request.POST.get('origin', '').strip()\n\n    if form.is_valid():\n        username = form.cleaned_data['username']\n        password = form.cleaned_data['password']\n\n        account = authenticate(request, username=username, password=password)\n        if account is not None:\n            LogEntry.add_log_entry(\n                account, 'log-in', '{actor} logged in', before=account\n            )\n            django_login(request, account)\n            set_account(request, account)  # NAV legacy specific\n            _logger.info(\"%s successfully logged in\", account.login)\n            if not origin:\n                origin = reverse('webfront-index')\n            return HttpResponseRedirect(origin)\n        else:\n            _logger.info(\"failed login: %r\", username)\n            errors.append(\n                'Username or password is incorrect, or the account is locked.'\n            )\n\n    # Something went wrong. Display login page with errors.\n    return render(\n        request,\n        'webfront/login.html',\n        {\n            'form': form,\n            'errors': errors,\n            'origin': origin,\n        },\n    )\n\n\ndef logout(request: HttpRequest) -> HttpResponse:\n    \"\"\"Controller for doing a logout\"\"\"\n    nexthop = _logout_helper(request)\n    return HttpResponseRedirect(nexthop)\n\n\n# not a view, here to avoid import loops\ndef _logout_helper(request: HttpRequest, sudo=False) -> Optional[str]:\n    \"\"\"Log out a user from a request\n\n    Returns a safe, public path useful for callers building a redirect.\"\"\"\n    # Ensure that logout can safely be called whenever\n    if not (hasattr(request, 'session') and hasattr(request, 'account')):\n        _logger.debug('logout: not logged in')\n        return None\n    if sudo or request.method == 'POST' and 'submit_desudo' in request.POST:\n        desudo(request)\n        return reverse('webfront-index')\n    else:\n        account = get_account(request)\n        clear_session(request)\n        _logger.debug('logout: logout %s', account.login)\n        LogEntry.add_log_entry(account, 'log-out', '{actor} logged out', before=account)\n    _logger.debug('logout: redirect to \"/\" after logout')\n    return get_post_logout_redirect_url(request)\n\n\ndef about(request):\n    \"\"\"Controller for the about page\"\"\"\n    return render(\n        request,\n        'webfront/about.html',\n        {\n            'navpath': [('Home', '/'), ('About', None)],\n            'title': 'About NAV',\n        },\n    )\n\n\ndef toolbox(request):\n    \"\"\"Render the toolbox\"\"\"\n    account = get_account(request)\n    tools = sorted(tool_list(account), key=attrgetter('name'))\n\n    return render(\n        request,\n        'webfront/toolbox.html',\n        {\n            'navpath': [('Home', '/'), ('Toolbox', None)],\n            'tools': tools,\n            'title': 'NAV toolbox',\n        },\n    )\n\n\ndef _create_preference_context(request):\n    \"\"\"\n    Creates a context used by different views for the multiform preference page\n    \"\"\"\n    account = get_account(request)\n\n    if account.ext_sync:\n        password_form = None\n    else:\n        password_form = ChangePasswordForm()\n\n    context = {\n        'navpath': [('Home', '/'), ('Account', None)],\n        'title': 'Personal NAV preferences',\n        'password_form': password_form,\n        'account': account,\n        'tool': {\n            'name': 'My account',\n            'description': 'Edit your personal NAV account settings',\n        },\n        'navbar_formset': NavbarLinkFormSet(\n            queryset=NavbarLink.objects.filter(account=account)\n        ),\n    }\n\n    return context\n\n\ndef preferences(request):\n    \"\"\"My preferences\"\"\"\n    context = _create_preference_context(request)\n\n    return render(request, 'webfront/preferences.html', context)\n\n\ndef qr_code(request):\n    \"\"\"Render a model with a qr code linking to current page\"\"\"\n    url = request.headers.get(\"referer\")\n    file_format = webfrontConfig.get(\"qr_codes\", \"file_format\")\n    qr_code = generate_qr_code_as_string(url=url, caption=url, file_format=file_format)\n\n    return render_modal(\n        request,\n        'webfront/_qr_code.html',\n        context={'qr_code': qr_code, 'file_format': file_format},\n        modal_id='qr-code',\n        size='small',\n    )\n\n\n@sensitive_post_parameters('old_password', 'new_password1', 'new_password2')\ndef change_password(request):\n    \"\"\"Handles POST requests to change a users password\"\"\"\n    context = _create_preference_context(request)\n    account = get_account(request)\n\n    if account.is_default_account():\n        return render(request, 'useradmin/not-logged-in.html', {})\n\n    if request.method == 'POST':\n        password_form = ChangePasswordForm(request.POST, my_account=account)\n\n        if password_form.is_valid():\n            account.set_password(password_form.cleaned_data['new_password1'])\n            account.save()\n            new_message(\n                request, 'Your password has been changed.', type=Messages.SUCCESS\n            )\n        else:\n            context['password_form'] = password_form\n            return render(request, 'webfront/preferences.html', context)\n\n    return HttpResponseRedirect(reverse('webfront-preferences'))\n\n\ndef save_links(request):\n    \"\"\"Saves navigation preference links on a user\"\"\"\n    account = get_account(request)\n    context = _create_preference_context(request)\n\n    if request.method == 'POST':\n        formset = NavbarLinkFormSet(request.POST)\n        if formset.is_valid():\n            instances = formset.save(commit=False)\n            for instance in instances:\n                instance.account = account\n                instance.save()\n            for form in formset.deleted_objects:\n                instance = form.delete()\n            new_message(request, 'Your links were updated.', type=Messages.SUCCESS)\n        else:\n            context['navbar_formset'] = formset\n\n            return render(request, 'webfront/preferences.html', context)\n\n    return HttpResponseRedirect(reverse('webfront-preferences'))\n\n\ndef set_account_preference(request):\n    \"\"\"Set account preference using url attributes\"\"\"\n    account = get_account(request)\n    account.preferences.update(request.GET.dict())\n    account.save()\n    return HttpResponse()\n\n\n@require_POST\ndef set_default_dashboard(request, did):\n    \"\"\"Set the default dashboard for the user\"\"\"\n    account = get_account(request)\n    dash = find_dashboard(account, did)\n    account.set_default_dashboard(dash.id)\n\n    dash.shared_by_other = dash.is_shared and dash.account_id != account.id\n    response = render(\n        request,\n        'webfront/_dashboard_set_default_response.html',\n        {\n            'dashboard': dash,\n            'is_subscribed': dash.is_subscribed(account),\n            'message': f'Default dashboard set to «{dash.name}»',\n            'status': 'success',\n        },\n    )\n    return trigger_client_event(response, name='nav.dashboard.defaultChanged')\n\n\n@require_POST\ndef add_dashboard(request):\n    \"\"\"Add a new dashboard to this user\"\"\"\n    name = request.POST.get('dashboard-name', 'New dashboard')\n    account = get_account(request)\n    dashboard = AccountDashboard(account=account, name=name)\n    dashboard.save()\n    return JsonResponse({'dashboard_id': dashboard.pk})\n\n\n@require_POST\ndef delete_dashboard(request, did):\n    \"\"\"Delete this dashboard and all widgets on it, with confirmation modal\"\"\"\n    account = get_account(request)\n    dashboard = get_object_or_404(AccountDashboard, pk=did, account=account)\n\n    is_last = AccountDashboard.objects.filter(account=account).count() == 1\n    if is_last or dashboard.is_default_for_account(account):\n        error_message = (\n            \"Cannot delete last dashboard\"\n            if is_last\n            else \"Cannot delete default dashboard\"\n        )\n        return render_modal(\n            request,\n            'webfront/_dashboard_settings_delete_confirmation.html',\n            context={'error_message': error_message},\n            modal_id='delete-dashboard-confirmation',\n            size='small',\n        )\n\n    confirm_delete = request.POST.get(\"confirm_delete\", None) == \"true\"\n    if confirm_delete:\n        dashboard.delete()\n        return HttpResponseClientRedirect(reverse('webfront-index'))\n\n    subscribers_count = dashboard.subscribers.count()\n\n    return render_modal(\n        request,\n        'webfront/_dashboard_settings_delete_confirmation.html',\n        context={'dashboard': dashboard, 'subscribers_count': subscribers_count},\n        modal_id='delete-dashboard-confirmation',\n        size='small',\n    )\n\n\n@require_POST\ndef rename_dashboard(request, did):\n    \"\"\"Rename this dashboard\"\"\"\n    account = get_account(request)\n    dash = get_object_or_404(AccountDashboard, pk=did, account=account)\n    dash.name = request.POST.get('dashboard-name', dash.name)\n    dash.save()\n    return HttpResponse('Dashboard renamed to «{}»'.format(dash.name))\n\n\n@require_POST\ndef save_dashboard_columns(request, did):\n    \"\"\"Save the number of columns for this dashboard\"\"\"\n\n    # Explicit fetch on account to prevent other people to change settings\n    account = get_account(request)\n    num_columns = request.POST.get('num_columns')\n    if not num_columns or not num_columns.isdigit():\n        return HttpResponse(status=400)\n\n    new_column_count = int(num_columns)\n\n    dashboard = get_object_or_404(AccountDashboard, pk=did, account=account)\n    dashboard.num_columns = new_column_count\n    dashboard.save()\n\n    response = render(\n        request,\n        \"webfront/_dashboard_settings_columns_form.html\",\n        {\n            'dashboard': dashboard,\n            'message': 'Dashboard updated to {} columns.'.format(new_column_count),\n        },\n    )\n    return trigger_client_event(response, name='nav.dashboard.reload')\n\n\n@require_POST\n@require_param('widget_id')\ndef moveto_dashboard(request, did):\n    \"\"\"Move a widget to this dashboard\"\"\"\n    account = get_account(request)\n    dashboard = get_object_or_404(AccountDashboard, account=account, pk=did)\n    widget = get_object_or_404(\n        AccountNavlet, account=account, pk=request.POST.get('widget_id')\n    )\n    widget.dashboard = dashboard\n    widget.save()\n    return HttpResponse('Widget moved to {}'.format(dashboard))\n"
  },
  {
    "path": "python/nav/wsgi.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"A NAV wsgi application\"\"\"\n\nfrom nav.bootstrap import bootstrap_django\nfrom nav.web import loginit\n\nbootstrap_django(__file__)\n\n\nloginit()\nfrom django.core.wsgi import get_wsgi_application\n\napplication = get_wsgi_application()\n"
  },
  {
    "path": "requirements/base.txt",
    "content": "# for debian build-deps, see the apt-get commands in\n# Dockerfile\n\nasciitree==0.3.3  # optional, for naventity\npsycopg2==2.9.10  # requires libpq to build\nIPy==1.01\npyaml\n\ntwisted>=24.7\n\nnetworkx==2.6.3\n# Cannot be removed as long as qrcode is included\nPillow>3.3.2\nqrcode>7.4\npyrad==2.1\nsphinx==7.4.7\nsphinxcontrib-programoutput==0.17\nsphinxcontrib-django\n# Needed for autogenerated docs\nMarkdown==3.8.1\n\nfeedparser==6.0.11\ndnspython<3.0.0,>=2.1.0\n\ndjango-filter>=2\ndjangorestframework>=3.14\ndjango-htmx\n\n# REST framework\niso8601\n\npynetsnmp-2>=0.1.10\n\nnapalm>=5.1.0,<5.2.0\n\ndrf-jwt-multi-auth\n\n# The following modules are really sub-requirements of Twisted, not of\n# NAV directly.  They may be optional from Twisted's point of view,\n# but they are required for parts of the Twisted library that NAV uses:\n#\n# PyOpenSSL is required for TLS verification during PaloAlto API GET operations\nPyOpenSSL==23.3.0\n# service-identity is required to make TLS communication libraries shut up about potential MITM attacks\nservice-identity==21.1.0\n\nrequests\n\npyjwt>=2.6.0\ndistro\n\ndjango-allauth[mfa,socialaccount]\n"
  },
  {
    "path": "requirements/django42.txt",
    "content": "Django>=4.2,<4.3\npytz\n"
  },
  {
    "path": "requirements/django50.txt",
    "content": "Django>=5.0,<5.1\n"
  },
  {
    "path": "requirements/django51.txt",
    "content": "Django>=5.1,<5.2\n"
  },
  {
    "path": "requirements/django52.txt",
    "content": "Django>=5.2,<5.3\n"
  },
  {
    "path": "requirements/optional.txt",
    "content": "python-ldap==3.4.5 # optional for LDAP authentication, requires libldap (OpenLDAP) to build\n"
  },
  {
    "path": "requirements.txt",
    "content": "-r requirements/django42.txt\n-r requirements/base.txt\n-r requirements/optional.txt\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/conftest.py",
    "content": "\"\"\"pytest setup and fixtures common for all tests, regardless of suite\"\"\"\n\nimport platform\n\nimport pytest\n\n\ndef pytest_configure(config):\n    from .setup_test_config import ensure_config_dir\n\n    ensure_config_dir()\n\n    # Bootstrap Django config\n    from nav.bootstrap import bootstrap_django\n\n    bootstrap_django('pytest')\n\n    from django.test.utils import setup_test_environment\n\n    setup_test_environment()\n\n    if platform.system() == 'Linux':\n        # Install custom reactor for Twisted tests\n        from nav.ipdevpoll.epollreactor2 import install\n\n        install()\n\n\n@pytest.fixture(scope='session')\ndef admin_username():\n    return 'admin'\n\n\n@pytest.fixture(scope='session')\ndef admin_password():\n    from .setup_test_config import ADMIN_PASSWORD\n\n    return ADMIN_PASSWORD\n\n\n@pytest.fixture(scope=\"session\")\ndef rsa_private_key() -> str:\n    \"\"\"Yields a private key in PEM format\"\"\"\n    key = \"\"\"-----BEGIN PRIVATE KEY-----\nMIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCp+4AEZM4uYZKu\n/hrKzySMTFFx3/ncWo6XAFpADQHXLOwRB9Xh1/OwigHiqs/wHRAAmnrlkwCCQA8r\nxiHBAMjp5ApbkyggQz/DVijrpSba6Tiy1cyBTZC3cvOK2FpJzsakJLhIXD1HaULO\nClyIJB/YrmHmQc8SL3Uzou5mMpdcBC2pzwmEW1cvQURpnvgrDF8V86GrQkjK6nIP\nIEeuW6kbD5lWFAPfLf1ohDWex3yxeSFyXNRApJhbF4HrKFemPkOi7acsky38UomQ\njZgAMHPotJNkQvAHcnXHhg0FcWGdohv5bc/Ctt9GwZOzJxwyJLBBsSewbE310TZi\n3oLU1TmvAgMBAAECgf8zrhi95+gdMeKRpwV+TnxOK5CXjqvo0vTcnr7Runf/c9On\nWeUtRPr83E4LxuMcSGRqdTfoP0loUGb3EsYwZ+IDOnyWWvytfRoQdExSA2RM1PDo\nGRiUN4Dy8CrGNqvnb3agG99Ay3Ura6q5T20n9ykM4qKL3yDrO9fmWyMgRJbAOAYm\nxzf7H910mDZghXPpq8nzDky0JLNZcaqbxuPQ3+EI4p2dLNXbNqMPs8Y20JKLeOPs\nHikRM0zfhHEJSt5IPFQ54/CzscGHGeCleQINWTgvDLMcE5fJMvbLLZixV+YsBfAq\ne2JsSubS+9RI2ktMlSKaemr8yeoIpsXfAiJSHkECgYEA0NKU18xK+9w5IXfgNwI4\npeu2tWgwyZSp5R2pdLT7O1dJoLYRoAmcXNePB0VXNARqGxTNypJ9zmMawNmf3YRS\nBqG8aKz7qpATlx9OwYlk09fsS6MeVmaur8bHGHP6O+gt7Xg+zhiFPvU9P5LB+C0Z\n0d4grEmIxNhJCtJRQOThD8ECgYEA0GKRO9SJdnhw1b6LPLd+o/AX7IEzQDHwdtfi\n0h7hKHHGBlUMbIBwwjKmyKm6cSe0PYe96LqrVg+cVf84wbLZPAixhOjyplLznBzF\nLqOrfFPfI5lQVhslE1H1CdLlk9eyT96jDgmLAg8EGSMV8aLGj++Gi2l/isujHlWF\nBI4YpW8CgYEAsyKyhJzABmbYq5lGQmopZkxapCwJDiP1ypIzd+Z5TmKGytLlM8CK\n3iocjEQzlm/jBfBGyWv5eD8UCDOoLEMCiqXcFn+uNJb79zvoN6ZBVGl6TzhTIhNb\n73Y5/QQguZtnKrtoRSxLwcJnFE41D0zBRYOjy6gZJ6PSpPHeuiid2QECgYACuZc+\nmgvmIbMQCHrXo2qjiCs364SZDU4gr7gGmWLGXZ6CTLBp5tASqgjmTNnkSumfeFvy\nZCaDbJbVxQ2f8s/GajKwEz/BDwqievnVH0zJxmr/kyyqw5Ybh5HVvA1GfqaVRssJ\nDvTjZQDft0a9Lyy7ix1OS2XgkcMjTWj840LNPwKBgDPXMBgL5h41jd7jCsXzPhyr\nV96RzQkPcKsoVvrCoNi8eoEYgRd9jwfiU12rlXv+fgVXrrfMoJBoYT6YtrxEJVdM\nRAjRpnE8PMqCUA8Rd7RFK9Vp5Uo8RxTNvk9yPvDv1+lHHV7lEltIk5PXuKPHIrc1\nnNUyhzvJs2Qba2L/huNC\n-----END PRIVATE KEY-----\"\"\"\n    return key\n\n\n@pytest.fixture(scope=\"session\")\ndef rsa_public_key() -> str:\n    \"\"\"Yields a public key in PEM format\"\"\"\n    key = \"\"\"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqfuABGTOLmGSrv4ays8k\njExRcd/53FqOlwBaQA0B1yzsEQfV4dfzsIoB4qrP8B0QAJp65ZMAgkAPK8YhwQDI\n6eQKW5MoIEM/w1Yo66Um2uk4stXMgU2Qt3LzithaSc7GpCS4SFw9R2lCzgpciCQf\n2K5h5kHPEi91M6LuZjKXXAQtqc8JhFtXL0FEaZ74KwxfFfOhq0JIyupyDyBHrlup\nGw+ZVhQD3y39aIQ1nsd8sXkhclzUQKSYWxeB6yhXpj5Dou2nLJMt/FKJkI2YADBz\n6LSTZELwB3J1x4YNBXFhnaIb+W3PwrbfRsGTsyccMiSwQbEnsGxN9dE2Yt6C1NU5\nrwIDAQAB\n-----END PUBLIC KEY-----\"\"\"\n    return key\n"
  },
  {
    "path": "tests/free-port.sh",
    "content": "#!/bin/bash\n# Helper script for Hudson CI setup\n# Prints a random port number > 9000 that appears to be unused.\n# Is only confirmed to work on a Debian system.\n#\nBASE=9000\nRANGE=5000\n\nrandport() {\n  echo -e $((RANDOM % $RANGE + $BASE))\n}\n\nPORT=$(randport)\nUSED_PORTS=$(netstat -atn|awk '/^tcp/ {print $4}'| sed 's/^.*://' | sort -n | uniq)\n\nwhile (echo $USED_PORTS | grep -q $PORT);\ndo\n\tPORT=$(randport)\ndone\necho $PORT\n"
  },
  {
    "path": "tests/functional/__init__.py",
    "content": ""
  },
  {
    "path": "tests/functional/arnold_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Playwright tests for arnold\"\"\"\n\nimport re\n\nfrom playwright.sync_api import expect\n\n\ndef test_when_visiting_arnold_then_title_should_contain_detentions(authenticated_page):\n    page, base_url = authenticated_page\n    page.goto(f\"{base_url}/arnold/\")\n    expect(page).to_have_title(re.compile(\"Detentions\"))\n"
  },
  {
    "path": "tests/functional/conftest.py",
    "content": "from nav.django.defaults import NAV_LOGIN_URL as LOGIN_URL\n\nimport pytest\nfrom django.contrib.staticfiles.handlers import StaticFilesHandler\nfrom django.test.testcases import LiveServerThread\nfrom playwright.sync_api import Page\n\n########################################################################\n#                                                                      #\n# Set up the required components for a functional test. PostgreSQL is  #\n# assumed to already be available, with connection details in the PG*  #\n# environment variables.  The connecting role must have CREATEDB       #\n# privileges.                                                          #\n#                                                                      #\n########################################################################\n\n\ndef pytest_configure(config):\n    from ..setup_test_config import ensure_config_dir, create_test_database\n\n    ensure_config_dir()\n    create_test_database()\n    _ensure_playwright_browser()\n\n\ndef _ensure_playwright_browser():\n    \"\"\"Download the Chromium binary if not already present.\"\"\"\n    import subprocess\n\n    subprocess.check_call([\"playwright\", \"install\", \"chromium\"])\n\n\n@pytest.fixture(scope='session')\ndef live_server():\n    \"\"\"Start a threaded Django live server for functional tests\"\"\"\n    server_thread = LiveServerThread('localhost', StaticFilesHandler, port=0)\n    server_thread.daemon = True\n    server_thread.start()\n    server_thread.is_ready.wait()\n    if server_thread.error:\n        raise server_thread.error\n    yield f'http://{server_thread.host}:{server_thread.port}'\n    server_thread.terminate()\n    server_thread.join()\n\n\n@pytest.fixture\ndef authenticated_page(page: Page, live_server, admin_username, admin_password):\n    \"\"\"Fixture providing a Playwright page logged in as admin\"\"\"\n    page.goto(f\"{live_server}{LOGIN_URL}\")\n    page.locator(\"#id_username\").fill(admin_username)\n    page.locator(\"#id_password\").fill(admin_password)\n    page.locator(\"#submit-id-submit\").click()\n    page.wait_for_url(f\"{live_server}/\")\n    yield page, live_server\n"
  },
  {
    "path": "tests/functional/geomap_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Playwright tests for geomap\"\"\"\n\nfrom playwright.sync_api import expect\n\n\ndef test_when_loading_geomap_then_map_viewport_should_exist(authenticated_page):\n    page, base_url = authenticated_page\n    page.goto(f\"{base_url}/geomap/\")\n    expect(page.locator(\".olMapViewport\")).to_be_visible()\n"
  },
  {
    "path": "tests/functional/ipdevinfo_test.py",
    "content": "\"\"\"Playwright tests for ipdevinfo\"\"\"\n\nfrom playwright.sync_api import expect\n\n\ndef test_when_loading_port_details_activity_graphs_should_load(authenticated_page):\n    \"\"\"Verify that Activity Graphs load on the port details page.\"\"\"\n\n    page, base_url = authenticated_page\n    page.goto(\n        f\"{base_url}/ipdevinfo/test-gsw.example.org/interface=1/#port-details-activity-graphs\"\n    )\n\n    activity_tab = page.locator(\"#port-details-activity-graphs\")\n    expect(activity_tab).to_be_visible()\n\n    graphite_graphs = activity_tab.locator(\".graphitegraph[data-url]\")\n    expect(graphite_graphs).to_have_count(6)\n\n    rickshaw_containers = activity_tab.locator(\".graphitegraph .rickshaw-container\")\n    expect(rickshaw_containers).to_have_count(6)\n\n    # Assume that graphs are loaded if every container has non-zero width and height\n    for i in range(rickshaw_containers.count()):\n        expect(rickshaw_containers.nth(i)).to_be_visible()\n        box = rickshaw_containers.nth(i).bounding_box()\n        assert box[\"width\"] > 0, f\"Graph {i} width is zero\"\n        assert box[\"height\"] > 0, f\"Graph {i} height is zero\"\n"
  },
  {
    "path": "tests/functional/navbar_test.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Playwright tests for simple searches on the navbar\"\"\"\n\nfrom playwright.sync_api import expect\n\n\ndef test_when_searching_for_ip_then_it_should_return_result(authenticated_page):\n    page, base_url = authenticated_page\n    ipaddr = \"192.168.42.42\"\n\n    page.goto(base_url)\n    page.locator(\"#navbar-search-form #query\").fill(ipaddr)\n    page.locator(\"#navbar-search-form button[type='submit']\").click()\n\n    expect(page.locator(\"caption\")).to_contain_text(ipaddr)\n"
  },
  {
    "path": "tests/functional/netmap_test.py",
    "content": "\"\"\"Playwright tests for netmap\"\"\"\n\n\ndef test_when_loading_netmap_then_it_should_not_have_syntax_errors(authenticated_page):\n    page, base_url = authenticated_page\n    errors = []\n    page.on(\"pageerror\", lambda error: errors.append(error))\n    page.goto(f\"{base_url}/netmap/\")\n\n    syntax_errors = [e for e in errors if \"syntaxerror\" in str(e).lower()]\n    assert not syntax_errors, f\"JavaScript syntax errors found: {syntax_errors}\"\n"
  },
  {
    "path": "tests/functional/room_test.py",
    "content": "\"\"\"Playwright tests for room views\"\"\"\n\nimport os\n\nfrom playwright.sync_api import expect\n\n\ndef test_when_uploading_room_image_then_it_should_appear(authenticated_page):\n    page, base_url = authenticated_page\n    filedir = os.path.abspath(os.path.dirname(__file__))\n    filename = \"closet.jpg\"\n    filepath = os.path.join(filedir, filename)\n\n    page.goto(f\"{base_url}/search/room/myroom/upload/\")\n    page.locator(\"#file\").set_input_files(filepath)\n    page.locator(\"input[type='submit'][value='Upload selected images']\").click()\n\n    expect(page.locator(\"li.imagecardcontainer div h5\")).to_contain_text(filename)\n"
  },
  {
    "path": "tests/functional/status_test.py",
    "content": "#\n# Copyright (C) 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Playwright tests for Status\"\"\"\n\nimport pytest\nfrom playwright.sync_api import expect\n\n\n@pytest.fixture\ndef status_page(authenticated_page):\n    page, base_url = authenticated_page\n    page.goto(f\"{base_url}/status/\")\n    return page\n\n\ndef test_when_clicking_filter_toggle_then_panel_should_toggle(status_page):\n    panel = status_page.locator(\"#status-panel\")\n    filter_toggle = status_page.locator(\".toggle-panel\")\n\n    initial_visible = panel.is_visible()\n    filter_toggle.click()\n\n    if initial_visible:\n        expect(panel).to_be_hidden()\n    else:\n        expect(panel).to_be_visible()\n\n\ndef test_when_refreshing_page_then_panel_state_should_persist(status_page):\n    panel = status_page.locator(\"#status-panel\")\n    filter_toggle = status_page.locator(\".toggle-panel\")\n\n    expect(panel).to_be_hidden()\n    filter_toggle.click()\n    expect(panel).to_be_visible()\n\n    # Wait for state to be saved before reloading\n    status_page.wait_for_timeout(1000)\n    status_page.reload()\n    status_page.wait_for_selector(\"#status-page\")\n\n    expect(status_page.locator(\"#status-panel\")).to_be_visible()\n"
  },
  {
    "path": "tests/integration/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/alertengine_test.py",
    "content": "from nav.models.profiles import AlertSender\nfrom nav.alertengine.dispatchers import Dispatcher\n\n\ndef test_all_handlers_should_be_loadable():\n    for sender in AlertSender.objects.filter(supported=True):\n        dispatcher = sender.load_dispatcher_class()\n        assert issubclass(dispatcher, Dispatcher)\n"
  },
  {
    "path": "tests/integration/api_test.py",
    "content": "# -*- coding: utf-8 -*-\nfrom django.utils.encoding import force_str\n\nfrom datetime import datetime, timedelta\nimport json\nimport pytest\nfrom django.urls import reverse\n\nfrom nav.django.forms import MAX_ALIAS_LENGTH\nfrom nav.models.event import AlertHistory\nfrom nav.models.fields import INFINITY\nfrom nav.web.api.v1.views import get_endpoints\nfrom nav.models.oui import OUI\nfrom nav.models.manage import NetboxEntity, NetboxGroup, Room\nfrom nav.models.msgmaint import MaintenanceComponent, MaintenanceTask\nfrom nav.models.service import Service\n\n\nENDPOINTS = {name: force_str(url) for name, url in get_endpoints().items()}\n\n\n# Data for writable endpoints\n\nTEST_DATA = {\n    'account': {'login': 'testuser', 'name': 'Test User', 'accountgroups': [2, 3]},\n    'location': {\n        'id': 'Kulsås',\n        'data': {'a': 'b'},\n        'parent': 'mylocation',\n        'description': 'ÆØÅ descr',\n        'aliases': ['localias1', 'localias2'],\n    },\n    'netbox': {\n        \"ip\": \"158.38.152.169\",\n        \"roomid\": \"myroom\",\n        \"organizationid\": \"myorg\",\n        \"categoryid\": \"SW\",\n        \"snmp_version\": 2,\n    },\n    'room': {\n        'id': 'blapp',\n        'location': 'mylocation',\n        'description': 'ÅÆØ descr',\n        'aliases': ['roomalias1', 'roomalias2'],\n    },\n    'vlan': {\n        'net_type': 'scope',\n    },\n    'prefix': {'net_address': '158.38.240.0/25'},\n}\n\n\n# Generic tests\n\n\n@pytest.mark.parametrize(\"url\", ENDPOINTS.values())\ndef test_forbidden_endpoints(db, api_client, url):\n    response = api_client.get(url)\n    if url == ENDPOINTS['jwt_refresh']:\n        # JWT refresh endpoint only accepts POST requests\n        assert response.status_code == 405\n    else:\n        assert response.status_code == 403\n\n\n@pytest.mark.parametrize(\"name, url\", ENDPOINTS.items())\ndef test_allowed_endpoints(db, api_client, token, serializer_models, name, url):\n    create_token_endpoint(token, name)\n    if name in ['arp', 'cam']:\n        # ARP and CAM wants filters\n        response = api_client.get(\"{}?active=1\".format(url))\n    else:\n        response = api_client.get(url)\n    if name == 'jwt_refresh':\n        # JWT refresh endpoint only accepts POST requests\n        assert response.status_code == 405\n    else:\n        assert response.status_code == 200\n\n\ndef test_unauthenticated_user_can_access_api_root(db):\n    from rest_framework.test import APIClient\n\n    client = APIClient()\n\n    url = reverse(\"api:1:root\")\n\n    response = client.get(url)\n    assert response.status_code == 200\n\n\n@pytest.mark.parametrize(\"endpoint\", ['account', 'location', 'room', 'vlan'])\ndef test_delete(db, api_client, token, endpoint):\n    create_token_endpoint(token, endpoint)\n    response_create = create(api_client, endpoint, TEST_DATA.get(endpoint))\n    res = json.loads(response_create.content.decode('utf-8'))\n    response_delete = delete(api_client, endpoint, res.get('id'))\n    response_get = get(api_client, endpoint, res.get('id'))\n\n    assert response_delete.status_code == 204\n    assert response_get.status_code == 404\n\n\n@pytest.mark.parametrize(\"endpoint\", ['account', 'netbox', 'location', 'room', 'vlan'])\ndef test_create(db, api_client, token, endpoint):\n    create_token_endpoint(token, endpoint)\n    response = create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    assert response.status_code == 201\n\n\ndef test_page_size(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, {'id': 'blapp1', 'location': 'mylocation'})\n    create(api_client, endpoint, {'id': 'blapp2', 'location': 'mylocation'})\n    response = api_client.get('/api/1/room/?page_size=1')\n\n    assert len(response.data.get('results')) == 1\n\n\ndef test_ordering_should_not_crash(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, endpoint)\n    response = api_client.get('/api/1/room/?ordering=whatever')\n\n    assert response.status_code == 200\n\n\n# Account specific tests\n\n\ndef test_update_org_on_account(db, api_client, token):\n    endpoint = 'account'\n    create_token_endpoint(token, endpoint)\n    data = {\"organizations\": [\"myorg\"]}\n    response = update(api_client, endpoint, 1, data)\n\n    assert response.status_code == 200\n\n    data = {\"organizations\": []}\n    response = update(api_client, endpoint, 1, data)\n\n    assert response.status_code == 200\n\n\ndef test_update_group_on_org(db, api_client, token):\n    endpoint = 'account'\n    create_token_endpoint(token, endpoint)\n    # Only admin group\n    data = {\"accountgroups\": [1]}\n    response = update(api_client, endpoint, 1, data)\n\n    assert response.status_code == 200\n\n\n# Netbox specific tests\n\n\ndef test_filter_netbox_by_invalid_ip(db, api_client, token):\n    create_token_endpoint(token, 'netbox')\n    response = api_client.get('{}?ip=10'.format(ENDPOINTS['netbox']))\n\n    assert response.status_code == 200\n\n\ndef test_filter_netbox_by_invalid_ip_that_cannot_be_converted_throws_error(\n    db, api_client, token\n):\n    create_token_endpoint(token, 'netbox')\n    response = api_client.get('{}?ip=x'.format(ENDPOINTS['netbox']))\n\n    assert response.status_code == 400\n\n\ndef test_update_netbox(db, api_client, token):\n    endpoint = 'netbox'\n    create_token_endpoint(token, endpoint)\n    response_create = create(api_client, endpoint, TEST_DATA.get(endpoint))\n    res = json.loads(response_create.content.decode('utf-8'))\n    data = {'categoryid': 'GW'}\n    response_update = update(api_client, endpoint, res['id'], data)\n\n    assert response_update.status_code == 200\n\n\ndef test_delete_netbox(db, api_client, token):\n    endpoint = 'netbox'\n    create_token_endpoint(token, endpoint)\n    response_create = create(api_client, endpoint, TEST_DATA.get(endpoint))\n    json_create = json.loads(response_create.content.decode('utf-8'))\n    response_delete = delete(api_client, endpoint, json_create['id'])\n    response_get = get(api_client, endpoint, json_create['id'])\n    json_get = json.loads(response_get.content.decode('utf-8'))\n\n    assert response_delete.status_code == 204\n    assert json_get['deleted_at'] is not None\n\n\n# Room specific tests\n\n\ndef test_get_wrong_room(db, api_client, token):\n    create_token_endpoint(token, 'room')\n    response = api_client.get('{}blapp/'.format(ENDPOINTS['room']))\n\n    assert response.status_code == 404\n\n\ndef test_get_new_room(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n    response = api_client.get('/api/1/room/blapp/')\n\n    assert response.status_code == 200\n\n\ndef test_when_room_has_dot_in_id_the_api_should_still_find_it(db, api_client, token):\n    create_token_endpoint(token, \"room\")\n\n    room = Room(id=\"foo.bar\", location_id=\"mylocation\")\n    room.save()\n\n    response = api_client.get(f\"/api/1/room/{room.id}/\")\n\n    assert response.status_code == 200\n\n\ndef test_when_location_has_dot_in_id_the_api_should_still_find_it(\n    db, api_client, token\n):\n    create_token_endpoint(token, \"location\")\n    from nav.models.manage import Location\n\n    location = Location(id=\"foo.bar\")\n    location.save()\n\n    response = api_client.get(f\"/api/1/location/{location.id}/\")\n\n    assert response.status_code == 200\n\n\ndef test_patch_room_not_found(db, api_client, token):\n    create_token_endpoint(token, 'room')\n    data = {'location': 'mylocation'}\n    response = api_client.patch('/api/1/room/blapp/', data, format='json')\n\n    assert response.status_code == 404\n\n\ndef test_patch_room_wrong_location(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n    data = {'location': 'mylocatio'}\n    response = api_client.patch('/api/1/room/blapp/', data, format='json')\n\n    assert response.status_code == 400\n\n\ndef test_patch_room(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, 'room')\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n    data = {'location': 'mylocation'}\n    response = api_client.patch('/api/1/room/blapp/', data, format='json')\n\n    assert response.status_code == 200\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_patch_alias(db, api_client, token, endpoint):\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    object_id = TEST_DATA[endpoint]['id']\n\n    new_aliases = ['newalias1', 'newalias2']\n    response = api_client.patch(\n        f'/api/1/{endpoint}/{object_id}/',\n        {'aliases': new_aliases},\n        format='json',\n    )\n\n    assert response.status_code == 200\n\n    data = json.loads(response.content.decode('utf-8'))\n    assert data.get('aliases') == new_aliases\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_patch_alias_with_pipe(db, api_client, token, endpoint):\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    object_id = TEST_DATA[endpoint]['id']\n\n    new_aliases = ['aliaswithpipe|']\n    response = api_client.patch(\n        f'/api/1/{endpoint}/{object_id}/',\n        {'aliases': new_aliases},\n        format='json',\n    )\n\n    assert response.status_code == 400\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_patch_alias_too_long(db, api_client, token, endpoint):\n    create_token_endpoint(token, endpoint)\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    object_id = TEST_DATA[endpoint]['id']\n\n    new_aliases = ['a' * (MAX_ALIAS_LENGTH + 1)]\n    response = api_client.patch(\n        f'/api/1/{endpoint}/{object_id}/',\n        {'aliases': new_aliases},\n        format='json',\n    )\n\n    assert response.status_code == 400\n\n\ndef test_delete_room_wrong_room(db, api_client, token):\n    endpoint = 'room'\n    create_token_endpoint(token, 'room')\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n    response = api_client.delete('/api/1/room/blap/')\n\n    assert response.status_code == 404\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_when_filtering_by_alias_then_it_should_return_matching_results(\n    db, api_client, token, endpoint\n):\n    create_token_endpoint(token, endpoint)\n\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    other_object_data = TEST_DATA.get(endpoint).copy()\n    other_object_data['id'] = 'otherid'\n    other_object_data.pop('aliases')\n\n    create(api_client, endpoint, other_object_data)\n\n    object_id = TEST_DATA[endpoint]['id']\n    alias = TEST_DATA[endpoint]['aliases'][0]\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?alias={alias}\")\n\n    assert response.status_code == 200\n\n    ids = [obj['id'] for obj in response.data['results']]\n    assert object_id in ids\n    assert 'otherid' not in ids\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_when_filtering_by_id_then_it_should_return_matching_results(\n    db, api_client, token, endpoint\n):\n    create_token_endpoint(token, endpoint)\n\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    other_object_data = TEST_DATA.get(endpoint).copy()\n    other_object_data['id'] = 'otherid'\n\n    create(api_client, endpoint, other_object_data)\n\n    object_id = TEST_DATA[endpoint]['id']\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?id={object_id}\")\n\n    assert response.status_code == 200\n\n    ids = [obj['id'] for obj in response.data['results']]\n    assert object_id in ids\n    assert 'otherid' not in ids\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_when_filtering_by_description_then_it_should_return_matching_results(\n    db, api_client, token, endpoint\n):\n    create_token_endpoint(token, endpoint)\n\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    other_object_data = TEST_DATA.get(endpoint).copy()\n    other_object_data['id'] = 'otherid'\n    other_object_data['description'] = 'some non-matching description'\n\n    create(api_client, endpoint, other_object_data)\n\n    object_id = TEST_DATA[endpoint]['id']\n    description = TEST_DATA[endpoint]['description']\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?description={description}\")\n\n    assert response.status_code == 200\n\n    ids = [obj['id'] for obj in response.data['results']]\n    assert object_id in ids\n    assert 'otherid' not in ids\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_when_searching_by_alias_then_it_should_return_matching_results(\n    db, api_client, token, endpoint\n):\n    create_token_endpoint(token, endpoint)\n\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    other_object_data = TEST_DATA.get(endpoint).copy()\n    other_object_data['id'] = 'otherid'\n    other_object_data.pop('aliases')\n\n    create(api_client, endpoint, other_object_data)\n\n    object_id = TEST_DATA[endpoint]['id']\n    alias = TEST_DATA[endpoint]['aliases'][0]\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?search={alias}\")\n\n    assert response.status_code == 200\n\n    ids = [obj['id'] for obj in response.data['results']]\n    assert object_id in ids\n    assert 'otherid' not in ids\n\n\n@pytest.mark.parametrize(\"endpoint\", ['room', 'location'])\ndef test_when_searching_by_description_then_it_should_return_matching_results(\n    db, api_client, token, endpoint\n):\n    create_token_endpoint(token, endpoint)\n\n    create(api_client, endpoint, TEST_DATA.get(endpoint))\n\n    other_object_data = TEST_DATA.get(endpoint).copy()\n    other_object_data['id'] = 'otherid'\n    other_object_data['description'] = 'some non-matching description'\n\n    create(api_client, endpoint, other_object_data)\n\n    object_id = TEST_DATA[endpoint]['id']\n    description = TEST_DATA[endpoint]['description']\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?search={description}\")\n\n    assert response.status_code == 200\n\n    ids = [obj['id'] for obj in response.data['results']]\n    assert object_id in ids\n    assert 'otherid' not in ids\n\n\n@pytest.mark.parametrize(\n    \"filter_param,alias_type,object_id\",\n    [\n        ('room_alias', 'room', 'bø-123'),\n        ('room_location_alias', 'location', 'bø'),\n    ],\n)\ndef test_when_filtering_netbox_by_alias_then_it_should_return_matching_results(\n    db, api_client, token, alias_filter_models, filter_param, alias_type, object_id\n):\n    # test-gsw.example.org is in room bø-123 (location bø) per test-data.sql\n    create_token_endpoint(token, alias_type)\n    aliases = patch_object_with_aliases(api_client, token, alias_type, object_id)\n\n    endpoint = 'netbox'\n    create_token_endpoint(token, endpoint)\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?{filter_param}={aliases[0]}\")\n\n    assert response.status_code == 200\n\n    sysnames = [r[\"sysname\"] for r in response.data[\"results\"]]\n    assert \"test-gsw.example.org\" in sysnames\n    assert 'test-gsw-2.example.org' not in sysnames\n\n\ndef test_when_searching_by_cabling_room_alias_then_it_should_return_matching_results(\n    db, api_client, token, alias_filter_models\n):\n    endpoint = 'cabling'\n    room_aliases = patch_object_with_aliases(api_client, token, 'room', 'myroom')\n    create_token_endpoint(token, endpoint)\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?search={room_aliases[0]}\")\n\n    assert response.status_code == 200\n    room_ids = [r[\"room\"] for r in response.data[\"results\"]]\n    assert 'myroom' in room_ids\n    assert 'anotherroom' not in room_ids\n\n\n@pytest.mark.parametrize(\n    \"endpoint,filter_param, room_id_function\",\n    [\n        ('patch', 'cabling_room_alias', lambda data: data[\"cabling\"][\"room\"][\"id\"]),\n        (\n            'patch',\n            'cabling_target_room_alias',\n            lambda data: data[\"cabling\"][\"room\"][\"id\"],\n        ),\n        ('cabling', 'room_alias', lambda data: data[\"room\"]),\n        ('cabling', 'target_room_alias', lambda data: data[\"room\"]),\n        ('rack', 'room_alias', lambda data: data[\"room\"]),\n    ],\n)\ndef test_when_filtering_by_room_alias_then_it_should_return_matching_results(\n    db, api_client, token, alias_filter_models, endpoint, filter_param, room_id_function\n):\n    room_aliases = patch_object_with_aliases(api_client, token, 'room', 'myroom')\n    create_token_endpoint(token, endpoint)\n\n    response = api_client.get(f\"{ENDPOINTS[endpoint]}?{filter_param}={room_aliases[0]}\")\n\n    assert response.status_code == 200\n    room_ids = [room_id_function(r) for r in response.data[\"results\"]]\n    assert 'myroom' in room_ids\n    assert 'anotherroom' not in room_ids\n\n\ndef test_validate_vlan(db, api_client, token):\n    endpoint = 'vlan'\n    create_token_endpoint(token, 'vlan')\n    testdata = dict(TEST_DATA.get(endpoint))\n    testdata.update({'net_type': 'core'})\n    response = create(api_client, endpoint, testdata)\n\n    assert response.status_code == 400\n\n\ndef prepare_prefix_test(db, api_client, token):\n    token.endpoints = {'prefix': ENDPOINTS.get('prefix'), 'vlan': ENDPOINTS.get('vlan')}\n    token.save()\n    testdata = dict(TEST_DATA.get('prefix'))\n\n    vlan_response = create(api_client, 'vlan', TEST_DATA.get('vlan'))\n    vlan = json.loads(vlan_response.content.decode('utf-8'))\n    testdata.update({'vlan': vlan.get('id')})\n    return testdata\n\n\ndef test_create_prefix(db, api_client, token):\n    endpoint = 'prefix'\n    testdata = prepare_prefix_test(db, api_client, token)\n    response = create(api_client, endpoint, testdata)\n\n    assert response.status_code == 201\n\n\ndef test_create_prefix_with_usage(db, api_client, token, serializer_models):\n    endpoint = 'prefix'\n    testdata = prepare_prefix_test(db, api_client, token)\n    testdata.update({'usages': ['ans']})\n\n    response = create(api_client, endpoint, testdata)\n    json_response = json.loads(response.content.decode('utf-8'))\n    assert json_response.get('usages') == ['ans']\n\n\ndef test_update_prefix_remove_usage(db, api_client, token, serializer_models):\n    endpoint = 'prefix'\n    testdata = prepare_prefix_test(db, api_client, token)\n    testdata.update({'usages': ['ans', 'student']})\n    response = create(api_client, endpoint, testdata)\n    prefix = json.loads(response.content.decode('utf-8'))\n\n    testdata.update({'usages': ['ans']})\n    response = update(api_client, endpoint, prefix.get('id'), testdata)\n    json_response = json.loads(response.content.decode('utf-8'))\n    assert json_response.get('usages') == ['ans']\n\n\n# Alert specific tests\n\n\ndef test_nonexistent_alert_should_give_404(db, api_client, token):\n    create_token_endpoint(token, 'alert')\n    response = api_client.get('{}9999/'.format(ENDPOINTS['alert']))\n\n    assert response.status_code == 404\n\n\ndef test_alert_should_be_visible_in_api(db, api_client, token, serializer_models):\n    create_token_endpoint(token, 'alert')\n    alert = AlertHistory.objects.filter(netbox__isnull=False)[0]\n    response = api_client.get('{url}{id}/'.format(url=ENDPOINTS['alert'], id=alert.id))\n\n    assert response.status_code == 200\n    content = response.content.decode('utf-8')\n    # Simple string tests, but they might just as well parse the JSON structure\n    assert str(alert.id) in content\n    assert str(alert.netbox.id) in content\n\n\n# Interface specific tests\n\n\ndef test_interface_with_last_used_should_be_listable(\n    db, api_client, token, serializer_models\n):\n    endpoint = 'interface'\n    create_token_endpoint(token, endpoint)\n    response = api_client.get('/api/1/interface/?last_used=on')\n\n    assert response.status_code == 200\n\n\nclass TestVendorLookupGet:\n    def test_if_vendor_is_found_it_should_include_vendor_in_response(\n        self, db, api_client, vendor_endpoint, oui\n    ):\n        test_mac = 'aa:bb:cc:dd:ee:ff'\n        response = api_client.get(f\"{ENDPOINTS[vendor_endpoint]}?mac={test_mac}\")\n        assert response.status_code == 200\n        assert response.data[test_mac] == oui.vendor\n\n    def test_should_always_return_mac_with_correct_format(\n        self, db, api_client, vendor_endpoint, oui\n    ):\n        test_mac = 'AA-BB-CC-DD-EE-FF'\n        response = api_client.get(f\"{ENDPOINTS[vendor_endpoint]}?mac={test_mac}\")\n        assert response.status_code == 200\n        assert response.data['aa:bb:cc:dd:ee:ff'] == oui.vendor\n\n    def test_if_vendor_is_not_found_it_should_return_empty_dict(\n        self, db, api_client, vendor_endpoint\n    ):\n        test_mac = 'aa:bb:cc:dd:ee:ff'\n        response = api_client.get(f\"{ENDPOINTS[vendor_endpoint]}?mac={test_mac}\")\n        assert response.status_code == 200\n        assert response.data == {}\n\n    def test_if_mac_is_invalid_it_should_return_400(\n        self, db, api_client, vendor_endpoint\n    ):\n        test_mac = 'invalidmac'\n        response = api_client.get(f\"{ENDPOINTS[vendor_endpoint]}?mac={test_mac}\")\n        assert response.status_code == 400\n\n    def test_if_mac_is_not_provided_it_should_return_empty_dict(\n        self, db, api_client, vendor_endpoint\n    ):\n        response = api_client.get(ENDPOINTS[vendor_endpoint])\n        assert response.status_code == 200\n        assert response.data == {}\n\n\nclass TestVendorLookupPost:\n    def test_if_vendor_is_found_it_should_include_vendor_in_response(\n        self, db, api_client, vendor_endpoint, oui\n    ):\n        test_mac = 'aa:bb:cc:dd:ee:ff'\n        response = create(api_client, vendor_endpoint, [test_mac])\n        assert response.status_code == 200\n        assert response.data[test_mac] == oui.vendor\n\n    def test_should_always_return_macs_with_correct_format(\n        self, db, api_client, vendor_endpoint, oui\n    ):\n        test_mac = 'AA-BB-CC-DD-EE-FF'\n        response = create(api_client, vendor_endpoint, [test_mac])\n        assert response.status_code == 200\n        assert response.data['aa:bb:cc:dd:ee:ff'] == oui.vendor\n\n    def test_if_vendor_is_not_found_it_should_be_omitted_from_response(\n        self, db, api_client, vendor_endpoint, oui\n    ):\n        test_mac = '11:22:33:44:55:66'\n        response = create(api_client, vendor_endpoint, [test_mac])\n        assert response.status_code == 200\n        assert test_mac not in response.data\n\n    def test_if_empty_list_is_provided_it_should_return_empty_dict(\n        self, db, api_client, vendor_endpoint\n    ):\n        response = create(api_client, vendor_endpoint, [])\n        assert response.status_code == 200\n        assert response.data == {}\n\n    def test_if_mac_is_invalid_it_should_return_400(\n        self, db, api_client, vendor_endpoint\n    ):\n        response = create(api_client, vendor_endpoint, [\"invalidmac\"])\n        assert response.status_code == 400\n\n\nclass TestNetboxEntityViewSet:\n    def test_should_return_list_of_entities(\n        self, db, api_client, netboxentity_endpoint, netboxentity\n    ):\n        endpoint = netboxentity_endpoint\n        response = get(api_client, endpoint)\n        assert response.status_code == 200\n        assert response.data['results'][0]['id'] == netboxentity.id\n\n    def test_should_get_correct_entity_when_accessing_with_id(\n        self, db, api_client, netboxentity_endpoint, netboxentity\n    ):\n        endpoint = netboxentity_endpoint\n        response = get(api_client, endpoint, id=netboxentity.id)\n        assert response.status_code == 200\n        assert response.data['id'] == netboxentity.id\n\n\nclass TestMaintenanceTaskViewSetList:\n    def test_when_getting_list_of_tasks_then_return_tasks(\n        self, db, api_client, maintenance_endpoint, current_maintenance_task\n    ):\n        response = get(api_client, maintenance_endpoint)\n        assert response.status_code == 200\n        result_ids = [result[\"id\"] for result in response.data[\"results\"]]\n        assert current_maintenance_task.id in result_ids\n\n    def test_when_searching_by_description_then_return_matching_results(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        future_maintenance_task,\n    ):\n        response = api_client.get(\n            f\"{ENDPOINTS[maintenance_endpoint]}?search={current_maintenance_task.description}\"\n        )\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert future_maintenance_task.id not in ids\n\n    def test_when_filtering_by_id_then_return_matching_results(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        future_maintenance_task,\n    ):\n        response = api_client.get(\n            f\"{ENDPOINTS[maintenance_endpoint]}?id={current_maintenance_task.id}\"\n        )\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert future_maintenance_task.id not in ids\n\n    def test_when_filtering_by_description_then_return_matching_results(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        future_maintenance_task,\n    ):\n        response = api_client.get(\n            f\"{ENDPOINTS[maintenance_endpoint]}?description={current_maintenance_task.description}\"\n        )\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert future_maintenance_task.id not in ids\n\n    def test_when_filtering_by_author_then_return_matching_results(\n        self, db, api_client, maintenance_endpoint, current_maintenance_task\n    ):\n        other_task = MaintenanceTask.objects.create(\n            start_time=datetime.now(),\n            end_time=datetime.now() + timedelta(hours=1),\n            description=\"Other description\",\n            author=\"otheruser\",\n            state=MaintenanceTask.STATE_SCHEDULED,\n        )\n\n        response = api_client.get(\n            f\"{ENDPOINTS[maintenance_endpoint]}?author={current_maintenance_task.author}\"\n        )\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert other_task.id not in ids\n\n    def test_when_filtering_by_state_then_return_matching_results(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n    ):\n        response = api_client.get(\n            f\"{ENDPOINTS[maintenance_endpoint]}?state={current_maintenance_task.state}\"\n        )\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert passed_maintenance_task.id not in ids\n\n    def test_when_filtering_by_current_true_then_return_ongoing_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?current=true\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert passed_maintenance_task.id not in ids\n\n    def test_when_filtering_by_current_false_then_return_not_ongoing_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n        future_maintenance_task,\n        canceled_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?current=false\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert passed_maintenance_task.id in ids\n        assert future_maintenance_task.id in ids\n        assert canceled_maintenance_task.id in ids\n        assert current_maintenance_task.id not in ids\n\n    def test_when_filtering_by_past_true_then_return_passed_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?past=true\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert passed_maintenance_task.id in ids\n        assert current_maintenance_task.id not in ids\n\n    def test_when_filtering_by_past_false_then_return_current_or_future_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n        future_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?past=false\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert future_maintenance_task.id in ids\n        assert current_maintenance_task.id in ids\n        assert passed_maintenance_task.id not in ids\n\n    def test_when_filtering_by_future_true_then_return_future_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        future_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?future=true\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert future_maintenance_task.id in ids\n        assert current_maintenance_task.id not in ids\n\n    def test_when_filtering_by_endless_true_then_return_tasks_with_end_time_infinite(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        endless_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?endless=true\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert endless_maintenance_task.id in ids\n        assert current_maintenance_task.id not in ids\n\n    def test_when_filtering_by_endless_false_then_return_finite_tasks(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        current_maintenance_task,\n        passed_maintenance_task,\n        future_maintenance_task,\n        endless_maintenance_task,\n    ):\n        response = api_client.get(f\"{ENDPOINTS[maintenance_endpoint]}?endless=false\")\n\n        assert response.status_code == 200\n\n        ids = [result['id'] for result in response.data['results']]\n        assert current_maintenance_task.id in ids\n        assert passed_maintenance_task.id in ids\n        assert future_maintenance_task.id in ids\n        assert endless_maintenance_task.id not in ids\n\n\nclass TestMaintenanceTaskViewSetRetrieve:\n    def test_when_getting_specific_task_then_return_task(\n        self, db, api_client, maintenance_endpoint, current_maintenance_task\n    ):\n        response = get(api_client, maintenance_endpoint, id=current_maintenance_task.id)\n        assert response.status_code == 200\n        assert response.data[\"id\"] == current_maintenance_task.id\n\n    def test_when_getting_specific_task_with_components_then_list_components(\n        self, db, api_client, maintenance_endpoint, current_maintenance_task, localhost\n    ):\n        response = get(api_client, maintenance_endpoint, id=current_maintenance_task.id)\n        assert response.status_code == 200\n        assert localhost.pk in response.data[\"components\"][\"netbox\"]\n\n\nclass TestMaintenanceTaskViewSetCreate:\n    def test_given_task_without_end_time_then_create_infinite_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        start_time = datetime.now()\n        data = {\n            \"start_time\": start_time.isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"room\": [\"myroom\"]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        assert task.start_time == start_time\n        assert task.end_time == INFINITY\n\n    def test_given_task_end_time_none_then_create_infinite_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        start_time = datetime.now()\n        data = {\n            \"start_time\": start_time.isoformat(),\n            \"end_time\": None,\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"room\": [\"myroom\"]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        assert task.start_time == start_time\n        assert task.end_time == INFINITY\n\n    def test_given_task_with_end_time_then_create_finite_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        start_time = datetime.now()\n        end_time = datetime.now() + timedelta(days=1)\n        data = {\n            \"start_time\": start_time.isoformat(),\n            \"end_time\": end_time.isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"room\": [\"myroom\"]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        assert task.start_time == start_time\n        assert task.end_time == end_time\n\n    def test_given_task_with_end_time_in_past_then_create_passed_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        start_time = datetime.now() - timedelta(days=2)\n        end_time = datetime.now() - timedelta(days=1)\n        data = {\n            \"start_time\": start_time.isoformat(),\n            \"end_time\": end_time.isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"room\": [\"myroom\"]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        assert task.state == MaintenanceTask.STATE_PASSED\n\n    def test_given_invalid_start_time_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": \"invalid\",\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"room\": [\"myroom\"]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"Datetime has wrong format\" in str(response.data[\"start_time\"])\n\n    def test_given_invalid_end_time_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"end_time\": \"invalid\",\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"room\": [\"myroom\"]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"Datetime has wrong format\" in str(response.data[\"end_time\"])\n\n    def test_given_end_time_before_start_time_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": (datetime.now() + timedelta(days=1)).isoformat(),\n                \"end_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"room\": [\"myroom\"]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"End_time must be later than start_time\" in str(response.data)\n\n    def test_given_non_existent_author_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": \"doesnotexist\",\n                \"components\": {\"room\": [\"myroom\"]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"No account with this login exists\" in str(response.data[\"author\"])\n\n    def test_given_task_with_rooms_then_create_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        second_room = Room(id=\"secondroom\", location_id=\"mylocation\")\n        second_room.save()\n        data = {\n            \"start_time\": datetime.now().isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"room\": [\"myroom\", second_room.pk]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        component_pks = [component.id for component in task.get_components()]\n        assert \"myroom\" in component_pks\n        assert second_room.pk in component_pks\n\n    def test_given_task_with_netbox_then_create_task(\n        self,\n        db,\n        api_client,\n        maintenance_endpoint,\n        admin_username,\n        localhost,\n    ):\n        data = {\n            \"start_time\": datetime.now().isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"netbox\": [localhost.id]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        component_pks = [component.id for component in task.get_components()]\n        assert localhost.id in component_pks\n\n    def test_given_task_with_location_then_create_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        data = {\n            \"start_time\": datetime.now().isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"location\": [\"mylocation\"]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        component_pks = [component.id for component in task.get_components()]\n        assert \"mylocation\" in component_pks\n\n    def test_given_task_with_netboxgroup_then_create_task(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        netboxgroup = NetboxGroup.objects.first()\n        data = {\n            \"start_time\": datetime.now().isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"netboxgroup\": [netboxgroup.id]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        component_pks = [component.id for component in task.get_components()]\n        assert netboxgroup.id in component_pks\n\n    def test_given_task_with_service_then_create_task(\n        self, db, api_client, maintenance_endpoint, localhost, admin_username\n    ):\n        service = Service(netbox=localhost)\n        service.save()\n        data = {\n            \"start_time\": datetime.now().isoformat(),\n            \"description\": \"Test\",\n            \"author\": admin_username,\n            \"components\": {\"service\": [service.id]},\n        }\n        response = create(api_client, maintenance_endpoint, data)\n        assert response.status_code == 201\n        task = MaintenanceTask.objects.filter(description=data['description']).first()\n        assert task\n        component_pks = [component.id for component in task.get_components()]\n        assert service.id in component_pks\n\n    def test_given_no_components_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {},\n            },\n        )\n        assert response.status_code == 400\n        assert \"No components selected\" in str(response.data[\"components\"])\n\n    def test_given_non_existing_netbox_id_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"netbox\": [99999]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"netbox: no elements with the given identifiers found\" in str(\n            response.data[\"components\"]\n        )\n\n    def test_given_non_number_netbox_id_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"netbox\": [\"notanumber\"]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"A valid integer is required\" in str(response.data[\"components\"])\n\n    def test_given_non_string_room_id_then_return_400(\n        self, db, api_client, maintenance_endpoint, admin_username\n    ):\n        response = create(\n            api_client,\n            maintenance_endpoint,\n            {\n                \"start_time\": datetime.now().isoformat(),\n                \"description\": \"Test\",\n                \"author\": admin_username,\n                \"components\": {\"room\": [{\"wrong\": \"type\"}]},\n            },\n        )\n        assert response.status_code == 400\n        assert \"Not a valid string\" in str(response.data[\"components\"])\n\n\nclass TestMaintenanceTaskViewSetDestroy:\n    def test_when_deleting_task_then_delete_task_and_components(\n        self, db, api_client, maintenance_endpoint, current_maintenance_task\n    ):\n        response = delete(\n            api_client, maintenance_endpoint, id=current_maintenance_task.id\n        )\n        assert response.status_code == 204\n        assert not MaintenanceTask.objects.filter(\n            id=current_maintenance_task.id\n        ).exists()\n        assert not MaintenanceComponent.objects.filter(\n            maintenance_task_id=current_maintenance_task.id\n        ).exists()\n\n\n# Helpers\n\n\ndef create_token_endpoint(token, name):\n    token.endpoints = {name: ENDPOINTS.get(name)}\n    token.save()\n\n\ndef get(api_client, endpoint, id=None):\n    endpoint = ENDPOINTS[endpoint]\n    if id:\n        endpoint = endpoint + force_str(id) + '/'\n    return api_client.get(endpoint)\n\n\ndef create(api_client, endpoint, data):\n    \"\"\"Sends a post request to endpoint with data\"\"\"\n    return api_client.post(ENDPOINTS[endpoint], data, format='json')\n\n\ndef update(api_client, endpoint, id, data):\n    \"\"\"Sends a patch request to endpoint with data\"\"\"\n    return api_client.patch(\n        ENDPOINTS[endpoint] + force_str(id) + '/', data, format='json'\n    )\n\n\ndef delete(api_client, endpoint, id):\n    \"\"\"Sends a delete request to endpoint\"\"\"\n    return api_client.delete(ENDPOINTS[endpoint] + force_str(id) + '/')\n\n\n@pytest.mark.parametrize(\n    \"urlname, arg\",\n    [\n        (\"api:1:alert-detail\", 1),\n        (\"api:1:alert-list\", None),\n        (\"api:1:interface-detail\", 1),\n        (\"api:1:interface-list\", None),\n        (\"api:1:netbox-list\", None),\n        (\"api:1:prefix-usage-list\", None),\n        (\"api:1:rack-detail\", 1),\n        (\"api:1:room-list\", None),\n    ],\n)\ndef test_api_urls_should_resolve(urlname, arg):\n    \"\"\"Regression test to verify that the view names generated by Django REST framework\n    are still valid.\n    \"\"\"\n    if arg is None:\n        assert reverse(urlname)\n    else:\n        assert reverse(urlname, args=(arg,))\n\n\ndef patch_object_with_aliases(api_client, token, endpoint, object_id):\n    create_token_endpoint(token, endpoint)\n    aliases = [f\"test{object_id}alias1\", f\"test{object_id}alias2\"]\n    api_client.patch(\n        f\"/api/1/{endpoint}/{object_id}/\",\n        {'aliases': aliases},\n        format='json',\n    )\n\n    return aliases\n\n\n# Fixtures\n\n\n@pytest.fixture()\ndef serializer_models(db, localhost, admin_account):\n    \"\"\"Fixture for testing API serializers\n\n    - unrecognized_neighbor\n    - auditlog\n    \"\"\"\n    from nav.models import cabling, event, manage, rack\n    from nav.auditlog import models as auditlog\n\n    netbox = localhost\n\n    group = manage.NetboxGroup.objects.all()[0]\n    manage.NetboxCategory(netbox=netbox, category=group).save()\n\n    interface = manage.Interface(\n        netbox=netbox, ifindex=1, ifname='if1', ifdescr='ifdescr', iftype=1, speed=10\n    )\n    interface.save()\n    manage.Cam(\n        sysname='asd', mac='aa:aa:aa:aa:aa:aa', ifindex=1, end_time=datetime.now()\n    ).save()\n    manage.Arp(\n        sysname='asd',\n        mac='aa:bb:cc:dd:ee:ff',\n        ip='123.123.123.123',\n        end_time=datetime.now(),\n    ).save()\n    manage.Prefix(net_address='123.123.123.123').save()\n    manage.Vlan(vlan=10, net_type_id='lan').save()\n    rack.Rack(room_id='myroom').save()\n    cabel = cabling.Cabling(room_id='myroom', jack='1')\n    cabel.save()\n    cabling.Patch(interface=interface, cabling=cabel).save()\n\n    source = event.Subsystem.objects.get(pk='pping')\n    target = event.Subsystem.objects.get(pk='eventEngine')\n    event_type = event.EventType.objects.get(pk='boxState')\n\n    boxdown_id = 3\n\n    event.EventQueue(\n        source=source, target=target, event_type=event_type, netbox=netbox\n    ).save()\n    event.AlertHistory(\n        source=source,\n        event_type=event_type,\n        netbox=netbox,\n        start_time=datetime.now() - timedelta(days=1),\n        value=1,\n        severity=3,\n        alert_type_id=boxdown_id,\n        end_time=INFINITY,\n    ).save()\n    auditlog.LogEntry.add_log_entry(admin_account, verb='verb', template='asd')\n    manage.Usage(id='ans', description='Ansatte').save()\n    manage.Usage(id='student', description='Studenter').save()\n\n\n@pytest.fixture()\ndef alias_filter_models(localhost):\n    \"\"\"Fixture for testing alias based filtering\"\"\"\n    from nav.models import cabling, manage, rack\n\n    location = manage.Location(\n        id='anotherlocation',\n        description='Random location',\n    )\n    location.save()\n\n    room = manage.Room(\n        id='anotherroom',\n        location_id='anotherlocation',\n        description='Random room',\n    )\n    room.save()\n    netbox = manage.Netbox(\n        ip='127.0.0.2',\n        sysname='test-gsw-2.example.org',\n        organization_id='myorg',\n        room_id='anotherroom',\n        category_id='SW',\n    )\n    netbox.save()\n    interface = manage.Interface(\n        netbox=netbox, ifindex=1, ifname='if1', ifdescr='ifdescr', iftype=1, speed=10\n    )\n    interface.save()\n\n    # Objects in relevant room / location\n    rack.Rack(room_id='myroom').save()\n    cabling1 = cabling.Cabling(room_id='myroom', target_room='myroom', jack='1')\n    cabling1.save()\n    cabling.Patch(interface=interface, cabling=cabling1).save()\n\n    # Objects that should not be found\n    rack2 = rack.Rack(room_id='anotherroom')\n    rack2.save()\n    cabling2 = cabling.Cabling(\n        room_id='anotherroom', target_room='anotherroom', jack='1'\n    )\n    cabling2.save()\n    cabling.Patch(interface=interface, cabling=cabling2).save()\n\n\n@pytest.fixture()\ndef oui(db):\n    oui = OUI(oui='aa:bb:cc:00:00:00', vendor='myvendor')\n    oui.save()\n    yield oui\n    oui.delete()\n\n\n@pytest.fixture()\ndef vendor_endpoint(db, token):\n    endpoint = 'vendor'\n    create_token_endpoint(token, endpoint)\n    return endpoint\n\n\n@pytest.fixture()\ndef netboxentity_endpoint(db, token):\n    endpoint = 'netboxentity'\n    create_token_endpoint(token, endpoint)\n    return endpoint\n\n\n@pytest.fixture()\ndef netboxentity(db, localhost):\n    netbox_entity = NetboxEntity(netbox=localhost, index=0)\n    netbox_entity.save()\n    yield netbox_entity\n    netbox_entity.delete()\n\n\n@pytest.fixture()\ndef maintenance_endpoint(db, token):\n    endpoint = 'maintenance'\n    create_token_endpoint(token, endpoint)\n    return endpoint\n\n\n@pytest.fixture\ndef current_maintenance_task(db, localhost):\n    task = MaintenanceTask(\n        start_time=datetime.now(),\n        end_time=datetime.now() + timedelta(hours=1),\n        description=\"Test task\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_SCHEDULED,\n    )\n    task.save()\n    MaintenanceComponent.objects.create(\n        maintenance_task=task,\n        key=localhost._meta.db_table,\n        value=localhost.pk,\n        description=f\"netbox {localhost.id}\",\n    )\n    return task\n\n\n@pytest.fixture\ndef passed_maintenance_task(db):\n    task = MaintenanceTask.objects.create(\n        start_time=datetime.now() - timedelta(days=2),\n        end_time=datetime.now() - timedelta(days=1),\n        description=\"Passed maintenance task\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_PASSED,\n    )\n    yield task\n\n\n@pytest.fixture\ndef future_maintenance_task(db):\n    task = MaintenanceTask.objects.create(\n        start_time=datetime.now() + timedelta(days=2),\n        end_time=datetime.now() + timedelta(days=3),\n        description=\"Future maintenance task\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_SCHEDULED,\n    )\n    yield task\n\n\n@pytest.fixture\ndef canceled_maintenance_task(db):\n    task = MaintenanceTask.objects.create(\n        start_time=datetime.now(),\n        end_time=datetime.now() + timedelta(days=1),\n        description=\"Canceled maintenance task\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_CANCELED,\n    )\n    yield task\n\n\n@pytest.fixture\ndef endless_maintenance_task(db):\n    task = MaintenanceTask.objects.create(\n        start_time=datetime.now(),\n        end_time=INFINITY,\n        description=\"Other description\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_SCHEDULED,\n    )\n    yield task\n"
  },
  {
    "path": "tests/integration/auditlog_test.py",
    "content": "from django.test import TestCase\n\nfrom nav.models.arnold import Justification\nfrom nav.models.profiles import Account\n\nfrom nav.auditlog import find_modelname\nfrom nav.auditlog.models import LogEntry\nfrom nav.auditlog.utils import get_auditlog_entries\n\n\nclass AuditlogModelTestCase(TestCase):\n    def setUp(self):\n        # This specific model is used because it is very simple\n        self.justification = Justification.objects.create(name='testarossa')\n\n    def test_str(self):\n        LogEntry.add_log_entry(self.justification, 'str test', 'foo')\n        log_entry = LogEntry.objects.filter(verb='str test').get()\n        self.assertEqual(str(log_entry), 'foo')\n        log_entry.delete()\n\n    def test_add_log_entry_bad_template(self):\n        with self.assertLogs(level='ERROR') as log:\n            LogEntry.add_log_entry(\n                self.justification, 'bad template test', 'this is a {bad} template'\n            )\n            log_entry = LogEntry.objects.filter(verb='bad template test').get()\n            self.assertEqual(\n                log_entry.summary, 'Error creating summary - see error log'\n            )\n            log_entry.delete()\n            self.assertEqual(len(log.output), 1)\n            self.assertEqual(len(log.records), 1)\n            self.assertIn('KeyError when creating summary:', log.output[0])\n\n    def test_add_log_entry_actor_only(self):\n        LogEntry.add_log_entry(\n            self.justification, 'actor test', 'actor \"{actor}\" only is tested'\n        )\n        log_entry = LogEntry.objects.filter(verb='actor test').get()\n        self.assertEqual(log_entry.summary, 'actor \"testarossa\" only is tested')\n        log_entry.delete()\n\n    def test_add_create_entry(self):\n        LogEntry.add_create_entry(self.justification, self.justification)\n        log_entry = LogEntry.objects.filter(verb='create-justification').get()\n        self.assertEqual(log_entry.summary, 'testarossa created testarossa')\n        log_entry.delete()\n\n    def test_add_delete_entry(self):\n        LogEntry.add_delete_entry(self.justification, self.justification)\n        log_entry = LogEntry.objects.filter(verb='delete-justification').get()\n        self.assertEqual(log_entry.summary, 'testarossa deleted testarossa')\n        log_entry.delete()\n\n    def test_compare_objects(self):\n        justification_1 = Justification.objects.create(\n            name='ferrari', description='Psst!'\n        )\n        justification_2 = Justification.objects.create(name='lambo', description='Hush')\n        LogEntry.compare_objects(\n            self.justification,\n            justification_1,\n            justification_2,\n            ('name', 'description'),\n            ('description',),\n        )\n        log_entry = LogEntry.objects.filter(verb='edit-justification-name').get()\n        self.assertEqual(\n            log_entry.summary,\n            'testarossa edited lambo: name changed from \\'ferrari\\' to \\'lambo\\'',\n        )\n        log_entry.delete()\n        log_entry = LogEntry.objects.filter(verb='edit-justification-description').get()\n        self.assertEqual(\n            log_entry.summary, 'testarossa edited lambo: description changed'\n        )\n        log_entry.delete()\n\n    def test_addLog_entry_before(self):\n        LogEntry.add_log_entry(self.justification, 'actor test', 'blbl', before=1)\n        log_entry = LogEntry.objects.filter(verb='actor test').get()\n        self.assertEqual(log_entry.before, '1')\n        log_entry.delete()\n\n    def test_find_name(self):\n        name = find_modelname(self.justification)\n        self.assertEqual(name, 'blocked_reason')\n\n    def test_when_log_entry_created_then_actor_sortkey_should_be_set(self):\n        LogEntry.add_log_entry(\n            self.justification, 'sortkey test', '{actor} did something'\n        )\n        log_entry = LogEntry.objects.filter(verb='sortkey test').get()\n        self.assertEqual(log_entry.actor_sortkey, str(self.justification))\n\n    def test_when_log_entry_has_object_then_object_sortkey_should_be_set(self):\n        other = Justification.objects.create(name='object_test')\n        LogEntry.add_log_entry(\n            self.justification,\n            'object sortkey test',\n            '{actor} edited {object}',\n            object=other,\n        )\n        log_entry = LogEntry.objects.filter(verb='object sortkey test').get()\n        self.assertEqual(log_entry.object_sortkey, str(other))\n\n    def test_when_log_entry_has_no_object_then_object_sortkey_should_be_null(self):\n        LogEntry.add_log_entry(\n            self.justification, 'no object test', '{actor} did something'\n        )\n        log_entry = LogEntry.objects.filter(verb='no object test').get()\n        self.assertIsNone(log_entry.object_sortkey)\n\n    def test_when_log_entry_has_target_then_target_sortkey_should_be_set(self):\n        obj = Justification.objects.create(name='target_obj')\n        target = Justification.objects.create(name='target_test')\n        LogEntry.add_log_entry(\n            self.justification,\n            'target sortkey test',\n            '{actor} sent {object} to {target}',\n            object=obj,\n            target=target,\n        )\n        log_entry = LogEntry.objects.filter(verb='target sortkey test').get()\n        self.assertEqual(log_entry.target_sortkey, str(target))\n\n    def test_when_log_entry_has_no_target_then_target_sortkey_should_be_null(self):\n        LogEntry.add_log_entry(\n            self.justification, 'no target test', '{actor} did something'\n        )\n        log_entry = LogEntry.objects.filter(verb='no target test').get()\n        self.assertIsNone(log_entry.target_sortkey)\n\n\nclass AuditlogUtilsTestCase(TestCase):\n    def setUp(self):\n        # This specific model is used because it is very simple\n        self.justification = Justification.objects.create(name='testarossa')\n\n    def test_get_auditlog_entries(self):\n        modelname = 'blocked_reason'  # Justification's db_table\n        justification_1 = Justification.objects.create(name='j1')\n        justification_2 = Justification.objects.create(name='j2')\n        LogEntry.add_create_entry(self.justification, justification_1)\n        LogEntry.add_log_entry(\n            self.justification,\n            'greet',\n            '{actor} greets {object}',\n            object=justification_2,\n            subsystem=\"hello\",\n        )\n        LogEntry.add_log_entry(\n            self.justification,\n            'deliver',\n            '{actor} delivers {object} to {target}',\n            object=justification_1,\n            target=justification_2,\n            subsystem='delivery',\n        )\n        entries = get_auditlog_entries(modelname=modelname)\n        self.assertEqual(entries.count(), 3)\n        entries = get_auditlog_entries(modelname=modelname, subsystem='hello')\n        self.assertEqual(entries.count(), 1)\n        entries = get_auditlog_entries(modelname=modelname, pks=[justification_1.pk])\n        self.assertEqual(entries.count(), 2)\n\n\ndef test_v1_api_should_return_plain_strings_for_backward_compatibility(\n    db, token, api_client\n):\n    \"\"\"Test that v1 API returns plain strings (backward compatibility)\"\"\"\n    # Configure token to allow access to v1 auditlog endpoint\n    token.endpoints = {'auditlog': '/auditlog/'}\n    token.save()\n\n    # Create an account that will be the actor\n    account = Account.objects.create(\n        login='testuser', name='Test User', password='unused'\n    )\n    # Create a justification as the object\n    justification = Justification.objects.create(name='test_object')\n\n    # Create a log entry\n    entry = LogEntry.add_log_entry(\n        account,\n        'test-action',\n        '{actor} performed action on {object}',\n        object=justification,\n    )\n\n    # Fetch the entry via v1 API\n    response = api_client.get(f'/api/1/auditlog/{entry.id}/')\n\n    assert response.status_code == 200\n    data = response.json()\n\n    # Verify v1 returns plain strings\n    assert isinstance(data['actor'], str)\n    assert data['actor'] == 'testuser'\n    assert isinstance(data['object'], str)\n    assert data['object'] == 'test_object'\n\n\ndef test_v2_api_retrieve_should_return_entity_objects_with_urls(db, token, api_client):\n    \"\"\"Test that v2 retrieve endpoint returns objects with {name, url}\"\"\"\n    # Configure token to allow access to v2 auditlog endpoint\n    # Note: TokenPermission.version=1 strips /api/1, so v2 paths become /2/auditlog/\n    token.endpoints = {'auditlog': '/2/auditlog/'}\n    token.save()\n\n    # Create an account that will be the actor (accounts have get_absolute_url)\n    account = Account.objects.create(\n        login='testuser', name='Test User', password='unused'\n    )\n    # Create a justification as the object\n    justification = Justification.objects.create(name='test_object')\n\n    # Create a log entry\n    entry = LogEntry.add_log_entry(\n        account,\n        'test-action',\n        '{actor} performed action on {object}',\n        object=justification,\n    )\n\n    # Fetch the entry via v2 API retrieve endpoint\n    response = api_client.get(f'/api/2/auditlog/{entry.id}/')\n\n    assert response.status_code == 200\n    data = response.json()\n\n    # Verify actor has both name and url\n    assert isinstance(data['actor'], dict)\n    assert data['actor']['name'] == 'testuser'\n    assert data['actor']['url'] is not None\n    assert '/useradmin/account/' in data['actor']['url']\n\n    # Verify object has name (url may be None if Justification lacks get_absolute_url)\n    assert isinstance(data['object'], dict)\n    assert data['object']['name'] == 'test_object'\n\n\ndef test_v2_api_list_should_return_entity_objects_with_urls(db, token, api_client):\n    \"\"\"Test that v2 list endpoint returns objects with {name, url}\"\"\"\n    # Configure token to allow access to v2 auditlog endpoint\n    # Note: TokenPermission.version=1 strips /api/1, so v2 paths become /2/auditlog/\n    token.endpoints = {'auditlog': '/2/auditlog/'}\n    token.save()\n\n    # Create an account that will be the actor\n    account = Account.objects.create(\n        login='testuser', name='Test User', password='unused'\n    )\n    # Create a justification as the object\n    justification = Justification.objects.create(name='test_object')\n\n    # Create a log entry\n    LogEntry.add_log_entry(\n        account,\n        'test-action',\n        '{actor} performed action on {object}',\n        object=justification,\n    )\n\n    # Fetch entries via v2 API list endpoint\n    response = api_client.get('/api/2/auditlog/')\n\n    assert response.status_code == 200\n    data = response.json()\n    assert len(data['results']) > 0\n\n    # Check the first entry\n    first_entry = data['results'][0]\n    assert isinstance(first_entry['actor'], dict)\n    assert 'name' in first_entry['actor']\n    assert 'url' in first_entry['actor']\n"
  },
  {
    "path": "tests/integration/bin_test.py",
    "content": "from shutil import which\nimport subprocess\nimport sys\n\nimport pytest\n\n\nBINDIR = './python/nav/bin'\n\n\ndef test_script_runs(script):\n    \"\"\"Verifies that a script defined in pyproject.toml runs with a zero exit code\"\"\"\n    if \"netbiostracker\" in script[0] and not which(\"nbtscan\"):\n        pytest.skip(\"nbtscan is not installed\")\n\n    proc = subprocess.Popen(script, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)\n    (done, fail) = proc.communicate()\n    retcode = proc.wait()\n\n    print(done.decode('utf-8'))\n\n    assert retcode == 0\n\n\n@pytest.mark.timeout(20)\ndef test_naventity_runs_without_error_with_arguments(localhost, snmpsim):\n    \"\"\"\n    Verifies that naventity runs with a zero exit code when given an\n    ip address and a port\n\n    Added in regards to: https://github.com/Uninett/nav/issues/2433\n    \"\"\"\n    params = [BINDIR + \"/naventity.py\", localhost.ip, \"-p\", \"1024\"]\n    if sys.version_info[0:2] == (3, 12):  # Python 3.12 is weird\n        params += [\"-t\", \"5.0\"]\n    proc = subprocess.Popen(\n        params,\n        stderr=subprocess.STDOUT,\n        stdout=subprocess.PIPE,\n    )\n    (done, fail) = proc.communicate()\n    retcode = proc.wait()\n\n    if done:\n        print(done.decode('utf-8'))\n    if fail:\n        print(fail.decode('utf-8'))\n\n    assert retcode == 0\n\n\ndef test_nav_runs_without_error_without_arguments():\n    \"\"\"\n    Verifies that nav runs with a zero exit code when given no arguments\n\n    Added in regards to: https://github.com/Uninett/nav/issues/2601\n    \"\"\"\n    proc = subprocess.Popen(\n        [BINDIR + \"/navmain.py\"],\n        stderr=subprocess.STDOUT,\n        stdout=subprocess.PIPE,\n    )\n    (done, fail) = proc.communicate()\n    retcode = proc.wait()\n\n    if done:\n        print(done.decode('utf-8'))\n    if fail:\n        print(fail.decode('utf-8'))\n\n    assert retcode == 0\n"
  },
  {
    "path": "tests/integration/bulkimport_test.py",
    "content": "\"\"\"Tests for bulkimport\"\"\"\n\nfrom unittest import TestCase\n\nfrom nav.django.forms import MAX_ALIAS_LENGTH\nfrom nav.models import manage\nfrom nav.tests.cases import DjangoTransactionTestCase\nfrom nav import bulkimport, bulkparse\n\n\nclass TestGenericBulkImport(TestCase):\n    def test_is_generator(self):\n        importer = bulkimport.BulkImporter(None)\n        self.assertTrue(hasattr(importer, '__next__'))\n        self.assertTrue(callable(getattr(importer, '__next__')))\n        self.assertTrue(iter(importer) == importer)\n\n\nclass TestNetboxImporter(DjangoTransactionTestCase):\n    def setUp(self):\n        \"\"\"Sets up some management profiles to refer to when importing\"\"\"\n        self.read_profile = manage.ManagementProfile(\n            name='SNMP v1 read profile',\n            protocol=manage.ManagementProfile.PROTOCOL_SNMP,\n            configuration={\n                'community': 'public',\n                'version': 1,\n                'write': False,\n            },\n        )\n        self.write_profile = manage.ManagementProfile(\n            name='SNMP v1 write profile',\n            protocol=manage.ManagementProfile.PROTOCOL_SNMP,\n            configuration={\n                'community': 'secret',\n                'version': 1,\n                'write': True,\n            },\n        )\n\n        self.read_profile.save()\n        self.write_profile.save()\n\n    def test_simple_import_yields_netbox_and_device_model(self):\n        data = 'myroom:10.0.90.252:myorg:SW:{}::'.format(\n            self.read_profile.name,\n        )\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n\n        self.assertTrue(isinstance(objects, list), repr(objects))\n        self.assertTrue(len(objects) == 2, repr(objects))\n        self.assertTrue(any(isinstance(o, manage.Netbox) for o in objects), msg=objects)\n        self.assertTrue(\n            any(isinstance(o, manage.NetboxProfile) for o in objects), msg=objects\n        )\n\n    def test_server_import_yields_netbox_and_device_model(self):\n        data = 'myroom:10.0.90.253:myorg:SRV'\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n\n        self.assertTrue(isinstance(objects, list), repr(objects))\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(any(isinstance(o, manage.Netbox) for o in objects), msg=objects)\n\n    def test_simple_import_yields_objects_with_proper_values(self):\n        data = 'myroom:10.0.90.252:myorg:SW:{}::'.format(\n            self.read_profile.name,\n        )\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n\n        (netbox, profile) = objects\n        self.assertEqual(netbox.ip, '10.0.90.252')\n        self.assertEqual(netbox.room_id, 'myroom')\n        self.assertEqual(netbox.organization_id, 'myorg')\n        self.assertEqual(netbox.category_id, 'SW')\n        self.assertEqual(profile.profile, self.read_profile)\n\n    def test_invalid_room_gives_error(self):\n        data = 'invalid:10.0.90.252:myorg:SW:{}::'.format(\n            self.read_profile.name,\n        )\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n        self.assertTrue(isinstance(objects, bulkimport.DoesNotExist))\n\n    def test_netbox_function_is_set(self):\n        data = 'myroom:10.0.90.252:myorg:SW:{}::does things:'.format(\n            self.read_profile.name,\n        )\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n\n        types = dict((type(c), c) for c in objects)\n        self.assertTrue(manage.NetboxInfo in types, types)\n\n    def test_get_netboxinfo_from_function(self):\n        importer = bulkimport.NetboxImporter(None)\n        netbox = manage.Netbox()\n        netboxinfo = importer._get_netboxinfo_from_function(netbox, 'hella')\n        self.assertTrue(isinstance(netboxinfo, manage.NetboxInfo))\n        self.assertTrue(netboxinfo.key is None)\n        self.assertEqual(netboxinfo.variable, 'function')\n        self.assertEqual(netboxinfo.value, 'hella')\n\n    def test_netbox_groups_are_set(self):\n        data = 'myroom:10.0.90.10:myorg:SRV:::fileserver::WEB:UNIX:MAIL'\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n\n        netboxgroups = [o for o in objects if isinstance(o, manage.NetboxCategory)]\n        self.assertTrue(len(netboxgroups) > 0, objects)\n\n    def test_get_groups_from_group(self):\n        importer = bulkimport.NetboxImporter(None)\n        netbox = manage.Netbox()\n        netbox.category = manage.Category.objects.get(id='SRV')\n\n        netboxgroups = ['LDAP', 'UNIX']\n        ncategories = importer._get_groups_from_group(netbox, netboxgroups)\n        self.assertTrue(len(ncategories) == 2)\n\n        for netboxgroup, ncategory in zip(netboxgroups, ncategories):\n            self.assertTrue(isinstance(ncategory, manage.NetboxCategory), ncategory)\n            self.assertEqual(ncategory.category_id, netboxgroup)\n\n    def test_duplicate_locations_should_give_error(self):\n        netbox = manage.Netbox(\n            sysname='10.1.0.1',\n            ip='10.1.0.1',\n            room=manage.Room.objects.get(id='myroom'),\n            category=manage.Category.objects.get(id='SRV'),\n            organization=manage.Organization.objects.get(id='myorg'),\n        )\n        netbox.save()\n\n        data = 'myroom:10.1.0.1:myorg:SRV:::fileserver::WEB:UNIX:MAIL'\n        objects = self.parse_to_objects(data)\n\n        self.assertTrue(isinstance(objects, bulkimport.AlreadyExists))\n\n    def test_created_objects_can_be_saved(self):\n        data = 'myroom:10.0.90.10:myorg:SRV:::fileserver::WEB:UNIX:MAIL'\n        objects = self.parse_to_objects(data)\n\n        self.assertNotIsInstance(\n            objects, Exception, msg='Got exception instead of object list'\n        )\n\n        for obj in objects:\n            bulkimport.reset_object_foreignkeys(obj)\n            print(repr(obj))\n            obj.save()\n\n    def test_invalid_master_should_give_error(self):\n        data = 'myroom:10.0.90.10:myorg:SW::badmaster:functionality'\n        objects = self.parse_to_objects(data)\n        self.assertTrue(isinstance(objects, bulkimport.DoesNotExist))\n\n    @staticmethod\n    def parse_to_objects(data):\n        parser = bulkparse.NetboxBulkParser(data)\n        importer = bulkimport.NetboxImporter(parser)\n        _line_num, objects = next(importer)\n        return objects\n\n\nclass TestManagementProfileImporter(DjangoTransactionTestCase):\n    def test_import(self):\n        name = \"SNMP v1 read profile\"\n        data = name + ':SNMP:\"{\"\"version\"\":1, \"\"community\"\":\"\"public\"\"}\"'\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.ManagementProfile))\n        self.assertEqual(objects[0].name, name)\n\n    @staticmethod\n    def parse_to_objects(data):\n        parser = bulkparse.ManagementProfileBulkParser(data)\n        importer = bulkimport.ManagementProfileImporter(parser)\n        _line_num, objects = next(importer)\n        return objects\n\n\nclass TestLocationImporter(DjangoTransactionTestCase):\n    def test_import(self):\n        data = \"somewhere::Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Location))\n        self.assertEqual(objects[0].id, 'somewhere')\n\n    def test_import_no_description(self):\n        \"\"\"Description field was previously mandatory, not optional\"\"\"\n        data = \"somewhere\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Location))\n        self.assertEqual(objects[0].id, 'somewhere')\n\n    def test_imported_objects_can_be_saved(self):\n        data = \"somewhere::Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        for obj in objects:\n            bulkimport.reset_object_foreignkeys(obj)\n            print(repr(obj))\n            obj.save()\n\n    def test_duplicate_locations_should_give_error(self):\n        _loc = manage.Location.objects.get_or_create(\n            id='somewhere', description='original somewhere'\n        )\n\n        data = \"somewhere::Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(isinstance(objects, bulkimport.AlreadyExists))\n\n    def test_location_can_have_parent(self):\n        parent, _created = manage.Location.objects.get_or_create(\n            id='somewhere', description='original somewhere'\n        )\n\n        data = \"otherplace:somewhere:descr\"\n        objects = self.parse_to_objects(data)\n        self.assertEqual(len(objects), 1)\n        self.assertEqual(objects[0].pk, 'otherplace')\n        self.assertEqual(objects[0].parent, parent)\n        self.assertEqual(objects[0].description, 'descr')\n\n    def test_location_nodescr_can_have_parent(self):\n        parent, _created = manage.Location.objects.get_or_create(\n            id='somewhere', description='original somewhere'\n        )\n\n        data = \"otherplace:somewhere\"\n        objects = self.parse_to_objects(data)\n        self.assertEqual(len(objects), 1)\n        self.assertEqual(objects[0].pk, 'otherplace')\n        self.assertEqual(objects[0].parent, parent)\n        self.assertFalse(objects[0].description)\n\n    def test_too_long_locationid_should_raise_error(self):\n        data = 'this-id-is-simply-too-long-according-to-the-schema-but-lets-try'\n        objects = self.parse_to_objects(data)\n        self.assertIsInstance(\n            objects, Exception, msg=\"Too long id didn't raise exception\"\n        )\n\n    def test_location_can_have_single_alias(self):\n        data = \"somewhere:::locationalias\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Location))\n        self.assertEqual(objects[0].aliases, [\"locationalias\"])\n\n    def test_location_can_have_multiple_aliases(self):\n        data = \"somewhere:::locationalias1|locationalias2\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Location))\n        self.assertEqual(objects[0].aliases, [\"locationalias1\", \"locationalias2\"])\n\n    def test_too_long_alias_should_raise_error(self):\n        data = f\"somewhere:::{'a' * (MAX_ALIAS_LENGTH + 1)}\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(isinstance(objects, bulkimport.BulkImportError))\n\n    @staticmethod\n    def parse_to_objects(data):\n        parser = bulkparse.LocationBulkParser(data)\n        importer = bulkimport.LocationImporter(parser)\n        _line_num, objects = next(importer)\n        return objects\n\n\nclass TestPrefixImporter(DjangoTransactionTestCase):\n    def setUp(self):\n        org, _created = manage.Organization.objects.get_or_create(id='uninett')\n        org.save()\n\n        usage, _created = manage.Usage.objects.get_or_create(id='employee')\n        usage.save()\n\n    def test_import(self):\n        data = \"10.0.1.0/24:lan:uninett:here-there:employee:Employee LAN:20\"\n        parser = bulkparse.PrefixBulkParser(data)\n        importer = bulkimport.PrefixImporter(parser)\n        _line_num, objects = next(importer)\n\n        if isinstance(objects, Exception):\n            raise objects\n        self.assertEqual(len(objects), 2)\n        self.assertTrue(isinstance(objects[0], manage.Vlan))\n        self.assertTrue(isinstance(objects[1], manage.Prefix))\n\n\nclass TestRoomImporter(DjangoTransactionTestCase):\n    def test_import(self):\n        data = \"somewhere:mylocation:Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Room))\n        self.assertEqual(objects[0].id, 'somewhere')\n\n    def test_import_no_description(self):\n        data = \"somewhere:mylocation\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Room))\n        self.assertEqual(objects[0].id, 'somewhere')\n\n    def test_imported_objects_can_be_saved(self):\n        data = \"somewhere:mylocation:Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        for obj in objects:\n            bulkimport.reset_object_foreignkeys(obj)\n            print(repr(obj))\n            obj.save()\n\n    def test_duplicate_rooms_should_give_error(self):\n        manage.Room.objects.get_or_create(\n            id='somewhere', location_id='mylocation', description='original somewhere'\n        )\n\n        data = \"somewhere:mylocation:Over the rainbow\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(isinstance(objects, bulkimport.AlreadyExists))\n\n    def test_too_long_roomid_should_raise_error(self):\n        data = 'this-id-is-simply-too-long-according-to-the-schema-but-lets-try'\n        objects = self.parse_to_objects(data)\n        self.assertIsInstance(\n            objects, Exception, msg=\"Too long id didn't raise exception\"\n        )\n\n    def test_room_can_have_single_alias(self):\n        data = \"somewhere:mylocation::roomalias\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Room))\n        self.assertEqual(objects[0].aliases, [\"roomalias\"])\n\n    def test_room_can_have_multiple_aliases(self):\n        data = \"somewhere:mylocation::roomalias1|roomalias2\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(len(objects) == 1, repr(objects))\n        self.assertTrue(isinstance(objects[0], manage.Room))\n        self.assertEqual(objects[0].aliases, [\"roomalias1\", \"roomalias2\"])\n\n    def test_too_long_alias_should_raise_error(self):\n        data = f\"somewhere:mylocation::{'a' * (MAX_ALIAS_LENGTH + 1)}\"\n        objects = self.parse_to_objects(data)\n        self.assertTrue(isinstance(objects, bulkimport.BulkImportError))\n\n    @staticmethod\n    def parse_to_objects(data):\n        parser = bulkparse.RoomBulkParser(data)\n        importer = bulkimport.RoomImporter(parser)\n        _line_num, objects = next(importer)\n        return objects\n"
  },
  {
    "path": "tests/integration/collectstatic_test.py",
    "content": "#\n# Copyright (C) 2025 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom django.core.management import call_command\nfrom django.test import override_settings\n\n\ndef test_collectstatic_should_succeed(tmp_path):\n    \"\"\"Verify collectstatic works with NAV's staticfiles configuration.\"\"\"\n    with override_settings(STATIC_ROOT=str(tmp_path)):\n        call_command('collectstatic', '--noinput', verbosity=0)\n    collected = list(tmp_path.rglob('*'))\n    assert any(f.is_file() for f in collected), \"No files were collected\"\n"
  },
  {
    "path": "tests/integration/conftest.py",
    "content": "import importlib.util\nimport io\nimport re\nimport shlex\nfrom itertools import cycle\nfrom pathlib import Path\nfrom shutil import which\nimport subprocess\nimport time\n\nimport toml\nimport pytest\nfrom django.contrib.staticfiles.handlers import StaticFilesHandler\nfrom django.test import Client\nfrom django.test.testcases import LiveServerThread\n\n\n########################################################################\n#                                                                      #\n# Set up the required components for an integration test. PostgreSQL   #\n# is assumed to already be available, with connection details in the   #\n# PG* environment variables.  The connecting role must have CREATEDB   #\n# privileges.                                                          #\n#                                                                      #\n########################################################################\n\n\ndef pytest_configure(config):\n    from ..setup_test_config import ensure_config_dir, create_test_database\n\n    ensure_config_dir()\n    create_test_database()\n\n\n@pytest.fixture(scope='session')\ndef live_server():\n    \"\"\"Start a threaded Django live server for integration tests.\"\"\"\n    server_thread = LiveServerThread('localhost', StaticFilesHandler, port=0)\n    server_thread.daemon = True\n    server_thread.start()\n    server_thread.is_ready.wait()\n    if server_thread.error:\n        raise server_thread.error\n    yield f'http://{server_thread.host}:{server_thread.port}'\n    server_thread.terminate()\n    server_thread.join()\n\n\n########################################################################\n#                                                                      #\n# All to do with discovering all NAV binaries and building fixtures to #\n# generate tests for each of them                                      #\n#                                                                      #\n########################################################################\nTESTARGS_PATTERN = re.compile(\n    r'^# +-\\*-\\s*testargs:\\s*(?P<args>.*?)\\s*(-\\*-)?\\s*$', re.MULTILINE\n)\nNOTEST_PATTERN = re.compile(r'^# +-\\*-\\s*notest\\s*(-\\*-)?\\s*$', re.MULTILINE)\nBINDIR = './python/nav/bin'\n\n\ndef pytest_generate_tests(metafunc):\n    if 'script' in metafunc.fixturenames:\n        scripts = _nav_script_tests()\n        ids = [s[0] for s in scripts]\n        metafunc.parametrize(\"script\", _nav_script_tests(), ids=ids)\n    elif 'admin_navlet' in metafunc.fixturenames:\n        from nav.models.profiles import AccountNavlet\n\n        navlets = AccountNavlet.objects.filter(account__login='admin')\n        metafunc.parametrize(\"admin_navlet\", navlets)\n\n\ndef _nav_script_tests():\n    \"\"\"Generates a list of command lines to run to test all the NAV scripts defined\n    in pyproject.toml.\n\n    Each NAV script can define 0 to many sets of test arguments that should be used\n    when executing the script, using comments at the top of the file.  This is because\n    some of the scripts are designed to require some arguments to be present in order\n    to run without exiting with an error.\n    \"\"\"\n    for script, module_name in _nav_scripts_map().items():\n        spec = importlib.util.find_spec(module_name)\n        for args in _scan_testargs(spec.origin):\n            if args:\n                yield [script] + args[1:]\n\n\ndef _nav_scripts_map() -> dict[str, str]:\n    \"\"\"Returns a map of installable script names to NAV module names from\n    pyproject.toml.\n    \"\"\"\n    data = toml.load('pyproject.toml')\n    scripts: dict[str, str] = data.get('project', {}).get('scripts', {})\n    return {\n        script: module.split(':', maxsplit=1)[0]\n        for script, module in scripts.items()\n        if module.startswith('nav.')\n    }\n\n\ndef _scan_testargs(filename):\n    \"\"\"\n    Scans filename for testargs comments and returns a list of elements\n    suitable for invocation of this binary with the given testargs\n    \"\"\"\n    print(\"Getting test args from {}\".format(filename))\n    contents = io.open(filename, encoding=\"utf-8\").read()\n    matches = TESTARGS_PATTERN.findall(contents)\n    if matches:\n        retval = []\n        for testargs, _ in matches:\n            testargs = shlex.split(testargs)\n            retval.append([filename] + testargs)\n        return retval\n    else:\n        matches = NOTEST_PATTERN.search(contents)\n        if not matches:\n            return [[filename]]\n        else:\n            return []\n\n\n##################\n#                #\n# Other fixtures #\n#                #\n##################\n\n\n@pytest.fixture()\ndef management_profile():\n    from nav.models.manage import ManagementProfile\n\n    profile = ManagementProfile(\n        name=\"Test connection profile\",\n        protocol=ManagementProfile.PROTOCOL_SNMP,\n        configuration={\n            \"version\": 2,\n            \"community\": \"public\",\n            \"write\": False,\n        },\n    )\n    profile.save()\n    yield profile\n    profile.delete()\n\n\n@pytest.fixture()\ndef localhost(management_profile):\n    from nav.models.manage import Netbox, NetboxProfile\n\n    box = Netbox(\n        ip='127.0.0.1',\n        sysname='localhost.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SRV',\n    )\n    box.save()\n    NetboxProfile(netbox=box, profile=management_profile).save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n\n\n@pytest.fixture()\ndef netbox_type(localhost):\n    from nav.models.manage import NetboxType, Vendor\n\n    vendor = Vendor(id=\"testvendor\")\n    vendor.save()\n    netbox_type = NetboxType(\n        description='Test device type',\n        vendor=vendor,\n        name='testtype',\n    )\n    netbox_type.save()\n    yield netbox_type\n    netbox_type.delete()\n    vendor.delete()\n\n\n@pytest.fixture()\ndef localhost_using_legacy_db():\n    \"\"\"Alternative to the Django-based localhost fixture, for tests that operate on\n    code that uses legacy database connections.\n    \"\"\"\n    from nav.db import getConnection\n\n    conn = getConnection('default')\n    cursor = conn.cursor()\n\n    sql = \"\"\"\n    INSERT INTO netbox\n    (ip, sysname, orgid, roomid, catid)\n    VALUES\n    (%s, %s, %s, %s, %s)\n    RETURNING netboxid;\n    \"\"\"\n    cursor.execute(\n        sql, ('127.0.0.1', 'localhost.example.org', 'myorg', 'myroom', 'SRV')\n    )\n    netboxid = cursor.fetchone()[0]\n    conn.commit()\n    yield netboxid\n\n    print(\"teardown localhost device using legacy connection\")\n    cursor.execute(\"DELETE FROM netbox WHERE netboxid=%s\", (netboxid,))\n    conn.commit()\n\n\n@pytest.fixture(scope='function')\ndef client(admin_username, admin_password):\n    \"\"\"Provides a Django test Client object already logged in to the web UI as\n    an admin\"\"\"\n    from django.urls import reverse\n\n    client_ = Client()\n    url = reverse('webfront-login')\n    client_.post(url, {'username': admin_username, 'password': admin_password})\n    return client_\n\n\n@pytest.fixture(scope='function')\ndef db(request):\n    \"\"\"Ensures db modifications are rolled back after the test ends.\n\n    This is done by disabling transaction management, running everything\n    inside a transaction that is rolled back after the test is done.\n    Effectively, it reuses the functionality of Django's own TestCase\n    implementation, just fitted for pytest.\n\n    This idea is entirely lifted from pytest-django; we can't use\n    pytest-django directly, yet, because it won't work on Django 1.7 (and NAV\n    has fairly non-standard use of Django, anyway)\n\n    \"\"\"\n    if _is_django_unittest(request):\n        return\n\n    from nav.tests.cases import DjangoTransactionTestCase as django_case\n\n    test_case = django_case(methodName='__init__')\n    test_case._pre_setup()\n    request.addfinalizer(test_case._post_teardown)\n\n\ndef _is_django_unittest(request_or_item):\n    \"\"\"Returns True if the request_or_item is a Django test case, otherwise\n    False\n    \"\"\"\n    from django.test import SimpleTestCase\n\n    cls = getattr(request_or_item, 'cls', None)\n\n    if cls is None:\n        return False\n\n    return issubclass(cls, SimpleTestCase)\n\n\n@pytest.fixture(scope='function')\ndef token(db):\n    \"\"\"Creates a write enabled token for API access but without endpoints\n\n    Tests should manipulate the endpoints as they see fit.\n    \"\"\"\n    from nav.models.api import APIToken\n    from datetime import datetime, timedelta\n\n    token = APIToken(\n        token='xxxxxx',\n        expires=datetime.now() + timedelta(days=1),\n        client_id=1,\n        permission='write',\n    )\n    token.save()\n    return token\n\n\n@pytest.fixture(scope='function')\ndef api_client(token):\n    \"\"\"Creates a client for API access\"\"\"\n\n    from rest_framework.test import APIClient\n\n    client = APIClient()\n    client.credentials(HTTP_AUTHORIZATION='Token ' + token.token)\n    return client\n\n\n@pytest.fixture(scope='session')\ndef snmpsim():\n    \"\"\"Sets up an external snmpsimd process so that SNMP communication can be simulated\n    by the test that declares a dependency to this fixture. Data fixtures are loaded\n    from the snmp_fixtures subdirectory.\n    \"\"\"\n    snmpsimd = which('snmpsim-command-responder')\n    assert snmpsimd, \"Could not find snmpsimd.py\"\n    workspace = str(Path(__file__).resolve().parent.parent.parent)\n    proc = subprocess.Popen(\n        [\n            snmpsimd,\n            '--data-dir={}/tests/integration/snmp_fixtures'.format(workspace),\n            '--log-level=error',\n            '--agent-udpv4-endpoint=127.0.0.1:1024',\n        ],\n        env={'HOME': workspace},\n    )\n\n    while not _lookfor('0100007F:0400', '/proc/net/udp'):\n        print(\"Still waiting for snmpsimd to listen for queries\")\n        proc.poll()\n        time.sleep(0.1)\n\n    yield\n    proc.kill()\n\n\n@pytest.fixture()\ndef snmp_agent_proxy(snmpsim, snmp_ports):\n    \"\"\"Returns an AgentProxy instance prepared to talk to localhost. The open() method\n    has not been called, so its attributes can be changed before the socket is opened.\n    \"\"\"\n    from nav.ipdevpoll.snmp import AgentProxy\n    from nav.ipdevpoll.snmp.common import SNMPParameters\n\n    port = next(snmp_ports)\n    agent = AgentProxy(\n        '127.0.0.1',\n        1024,\n        community='placeholder',\n        snmpVersion='v2c',\n        protocol=port.protocol,\n        snmp_parameters=SNMPParameters(timeout=1, max_repetitions=5, throttle_delay=0),\n    )\n    return agent\n\n\n_ports = None  # to store a cycling generator of snmp client ports\n\n\n@pytest.fixture(scope='session')\ndef snmp_ports():\n    \"\"\"Returns a cyclic generator of snmpprotocol.port() to use for agent proxies\"\"\"\n    from pynetsnmp.twistedsnmp import snmpprotocol\n\n    global _ports\n\n    if _ports is None:\n        _ports = cycle(snmpprotocol.port() for i in range(50))\n    return _ports\n\n\ndef _lookfor(string, filename):\n    \"\"\"Very simple grep-like function\"\"\"\n    data = io.open(filename, 'r', encoding='utf-8').read()\n    return string in data\n\n\n@pytest.fixture\ndef admin_account(db):\n    from nav.models.profiles import Account\n\n    yield Account.objects.get(id=Account.ADMIN_ACCOUNT)\n\n\n@pytest.fixture()\ndef non_admin_account(db):\n    from nav.models.profiles import Account\n\n    account = Account(login=\"other_user\", name=\"Other User\")\n    account.set_password(\"password\")\n    account.save()\n    yield account\n    account.delete()\n"
  },
  {
    "path": "tests/integration/django_check_test.py",
    "content": "import warnings\n\nfrom django.core.checks import ERROR\nfrom django.core.checks import run_checks\n\n\ndef test_django_check_should_not_produce_errors():\n    \"\"\"Verify that Django's system checks pass without errors.\n\n    Issues below ERROR are emitted as Python warnings so they remain visible in the\n    pytest warning summary.\n    \"\"\"\n    issues = run_checks()\n    for issue in issues:\n        if issue.level < ERROR:\n            warnings.warn(str(issue), stacklevel=1)\n    errors = [i for i in issues if i.level >= ERROR]\n    assert not errors, f\"Django system check errors: {errors}\"\n"
  },
  {
    "path": "tests/integration/djangodb_test.py",
    "content": "import os\nfrom nav.django import settings\nfrom nav.db import get_connection_parameters\n\n\ndef test_db_password_should_not_be_blank():\n    params = get_connection_parameters('default')\n    print(\"get_connection_parameters: {!r}\".format(params))\n    host, port, db, user, password = params\n    assert password\n\n\ndef test_django_db_password_should_be_correct():\n    \"\"\"verifies that the configured Django database uses the same password as\n    NAV reads from its config file.\n    \"\"\"\n    params = get_connection_parameters('django')\n    print(\"get_connection_parameters: {!r}\".format(params))\n    print(\"ENVIRONMENT:\\n{!r}\".format(os.environ))\n    print(\"DATABASES:\\n{!r}\".format(settings.DATABASES))\n\n    host, port, db, user, password = params\n    assert settings.DATABASES['default']['PASSWORD'] == password\n"
  },
  {
    "path": "tests/integration/event_test.py",
    "content": "from nav.event import Event\nfrom nav.models.event import EventQueue\n\n\nclass TestEvent:\n    def test_should_post_simple_event_without_error(self, localhost_using_legacy_db):\n        event = Event(\n            source='ipdevpoll',\n            target='eventEngine',\n            netboxid=localhost_using_legacy_db,\n            eventtypeid='snmpAgentState',\n            state=EventQueue.STATE_START,\n        )\n\n        assert event.post()\n"
  },
  {
    "path": "tests/integration/eventengine/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/eventengine/alerts_test.py",
    "content": "from nav.eventengine.alerts import (\n    get_list_of_templates_for,\n    TemplateDetails,\n    ensure_alert_templates_are_available,\n    _render_template,\n    AlertGenerator,\n)\nfrom mock import Mock\nfrom django.template import loader\n\n\ndef test_should_be_able_to_find_snmpagentdown_alert_msg_templates():\n    details = get_list_of_templates_for('snmpAgentState', 'snmpAgentDown')\n    print(details)\n    assert len(details) > 0\n    assert all(isinstance(d, TemplateDetails) for d in details)\n\n\ndef test_should_be_able_to_load_snmpagentdown_alert_msg_template():\n    details = TemplateDetails(\n        name='snmpAgentState/snmpAgentDown-email.txt', msgtype='email', language='en'\n    )\n    ensure_alert_templates_are_available()\n    template = loader.get_template(details.name)\n    assert template\n\n\ndef test_should_be_able_to_render_snmpagentdown_alert_msg_template():\n    details = TemplateDetails(\n        name='snmpAgentState/snmpAgentDown-email.txt', msgtype='email', language='en'\n    )\n    ensure_alert_templates_are_available()\n    event = Mock(varmap={})\n    alert = AlertGenerator(event)\n    _, output = _render_template(details, alert)\n    assert output\n"
  },
  {
    "path": "tests/integration/eventengine/boxdown_test.py",
    "content": "\"\"\"Black-box integration tests for the apparent proper processing of boxState events\"\"\"\n\nimport os\n\nimport pytest\n\nfrom nav.config import find_config_file\nfrom nav.eventengine import get_eventengine_output\nfrom nav.models.manage import Netbox\nfrom nav.models.event import EventQueue as Event\n\n\ndef test_eventengine_should_declare_box_down(host_going_down, eventengine_test_config):\n    post_fake_boxdown(host_going_down)\n    get_eventengine_output(6)\n    states = host_going_down.get_unresolved_alerts(\"boxState\")\n    assert states.count() > 0, \"netbox has not been marked as down\"\n\n\n########################\n#                      #\n# fixtures and helpers #\n#                      #\n########################\ndef post_fake_boxdown(netbox):\n    event = Event(\n        source_id=\"pping\",\n        target_id=\"eventEngine\",\n        event_type_id=\"boxState\",\n        netbox=netbox,\n        state=Event.STATE_START,\n    )\n    event.save()\n\n\n@pytest.fixture()\ndef host_going_down():\n    box = Netbox(\n        ip=\"10.254.254.254\",\n        sysname=\"downhost.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SRV\",\n    )\n    box.save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n\n\n@pytest.fixture(scope=\"module\")\ndef eventengine_test_config():\n    print(\"placing temporary eventengine config\")\n    configfile = find_config_file(\"eventengine.conf\")\n    tmpfile = configfile + \".bak\"\n    os.rename(configfile, tmpfile)\n    with open(configfile, \"w\") as config:\n        config.write(\n            \"\"\"\n[timeouts]\nboxDown.warning = 1s\nboxDown.alert = 2s\n\"\"\"\n        )\n    yield configfile\n    print(\"restoring eventengine config\")\n    os.remove(configfile)\n    os.rename(tmpfile, configfile)\n"
  },
  {
    "path": "tests/integration/eventengine/juniper_alert_count_test.py",
    "content": "\"\"\"Integration tests for the proper processing of juniperYellowAlarmState and\njuniperRedAlarmState events\n\"\"\"\n\nimport datetime\nimport logging\nimport pytest\n\n\nfrom nav.eventengine import unresolved, get_eventengine_output\nfrom nav.eventengine.engine import EventEngine\nfrom nav.eventengine.plugins.juniperalertcount import JuniperAlertCountHandler\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Netbox, NetboxEntity\nfrom nav.models.event import AlertHistory, AlertType, EventQueue as Event\n\nLOGGER = logging.getLogger(__name__)\n\n\nclass TestBlackBox:\n    def test_eventengine_should_copy_alert_count_to_alert_history_on_yellow_start_event(  # noqa:E501\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        count = 2\n        post_fake_yellow_alarm_start_event(netbox_having_new_alarm_count, count)\n        get_eventengine_output(6)\n        alert = (\n            netbox_having_new_alarm_count.get_unresolved_alerts(\n                \"juniperYellowAlarmState\"\n            )\n            .filter(variables__isnull=False)\n            .first()\n        )\n        assert alert, \"no alert was posted on changed alarm count\"\n        variables = alert.variables.all()\n        assert int(variables.get(variable=\"count\").value) == count\n\n    def test_eventengine_should_create_new_alert_history_entry_on_second_yellow_start_event_with_changed_count(  # noqa:E501\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        old_count = 2\n        new_count = 3\n        post_fake_yellow_alarm_start_event(netbox_having_new_alarm_count, old_count)\n        post_fake_yellow_alarm_start_event(netbox_having_new_alarm_count, new_count)\n        get_eventengine_output(6)\n        alerts = netbox_having_new_alarm_count.get_unresolved_alerts(\n            \"juniperYellowAlarmState\"\n        ).filter(variables__isnull=False)\n        alert_count = alerts.count()\n        assert alert_count == 1, (\n            \"more or less than one unresolved alerts exist after changing alarm count\"\n        )\n        variables = alerts.first().variables.all()\n        assert int(variables.get(variable=\"count\").value) == new_count\n\n    def test_eventengine_should_set_alert_history_entry_to_closed_on_yellow_end_event(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        post_fake_yellow_alarm_start_event(netbox_having_new_alarm_count)\n        post_fake_yellow_alarm_end_event(netbox_having_new_alarm_count)\n        get_eventengine_output(6)\n        assert not netbox_having_new_alarm_count.get_unresolved_alerts(\n            \"juniperYellowAlarmState\"\n        ).exists(), \"an unresolved alert exists after posting end event\"\n\n    def test_eventengine_should_copy_alert_count_to_alert_history_on_red_start_event(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        count = 2\n        post_fake_red_alarm_start_event(netbox_having_new_alarm_count, count)\n        get_eventengine_output(6)\n        alert = (\n            netbox_having_new_alarm_count.get_unresolved_alerts(\"juniperRedAlarmState\")\n            .filter(variables__isnull=False)\n            .first()\n        )\n        assert alert, \"no alert was posted on changed alarm count\"\n        variables = alert.variables.all()\n        assert int(variables.get(variable=\"count\").value) == count\n\n    def test_eventengine_should_create_new_alert_history_entry_on_second_red_start_event_with_changed_count(  # noqa:E501\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        old_count = 2\n        new_count = 3\n        post_fake_red_alarm_start_event(netbox_having_new_alarm_count, old_count)\n        post_fake_red_alarm_start_event(netbox_having_new_alarm_count, new_count)\n        get_eventengine_output(6)\n        alerts = netbox_having_new_alarm_count.get_unresolved_alerts(\n            \"juniperRedAlarmState\"\n        ).filter(variables__isnull=False)\n        alert_count = alerts.count()\n        assert alert_count == 1, (\n            \"more or less than one unresolved alerts exist after changing alarm count\"\n        )\n        variables = alerts.first().variables.all()\n        assert int(variables.get(variable=\"count\").value) == new_count\n\n    def test_eventengine_should_set_alert_history_entry_to_closed_on_red_end_event(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        post_fake_red_alarm_start_event(netbox_having_new_alarm_count)\n        post_fake_red_alarm_end_event(netbox_having_new_alarm_count)\n        get_eventengine_output(6)\n        assert not netbox_having_new_alarm_count.get_unresolved_alerts(\n            \"juniperRedAlarmState\"\n        ), \"an unresolved alert exists after posting end event\"\n\n\nclass TestStatelessEvent:\n    def test_ignore_stateless_events(self, netbox_having_new_alarm_count, caplog):\n        stateless_event = post_fake_stateless_event(netbox_having_new_alarm_count)\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=stateless_event, engine=eventengine)\n        with caplog.at_level(logging.INFO):\n            handler.handle()\n\n        assert \"Ignoring stateless juniperYellowAlarmState event\" in caplog.text\n        with pytest.raises(Event.DoesNotExist):\n            stateless_event.refresh_from_db()\n        assert getattr(handler, \"event\", None)\n\n\nclass TestHandleStart:\n    def test_handle_start_ignores_irrelevant_alert_type(\n        self, netbox_having_new_alarm_count, caplog\n    ):\n        start_event = post_fake_yellow_alarm_start_event(netbox_having_new_alarm_count)\n        start_event.varmap = {\n            \"count\": start_event.varmap[\"count\"],\n            \"alerttype\": \"wrong_type\",\n        }\n        start_event.save()\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=start_event, engine=eventengine)\n        with caplog.at_level(logging.INFO):\n            handler.handle()\n\n        assert (\n            \"Ignoring juniperYellowAlarmState start event with alert type wrong_type\"\n            in caplog.text\n        )\n        with pytest.raises(Event.DoesNotExist):\n            start_event.refresh_from_db()\n        assert getattr(handler, \"event\", None)\n\n    def test_handle_start_posts_alert_if_none_is_yet_posted(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        count = 2\n        start_event = post_fake_yellow_alarm_start_event(\n            netbox_having_new_alarm_count, count\n        )\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=start_event, engine=eventengine)\n        handler.handle()\n\n        alert = (\n            netbox_having_new_alarm_count.get_unresolved_alerts(\n                \"juniperYellowAlarmState\"\n            )\n            .filter(variables__isnull=False)\n            .first()\n        )\n        assert alert, \"no alert was posted on start event\"\n        variables = alert.variables.all()\n        assert int(variables.get(variable=\"count\").value) == count\n\n    def test_handle_start_resolves_existing_alert_with_different_count(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        start_event = post_fake_yellow_alarm_start_event(\n            netbox_having_new_alarm_count, 3\n        )\n        alert = AlertHistory.objects.create(\n            source_id=\"ipdevpoll\",\n            netbox=netbox_having_new_alarm_count,\n            start_time=datetime.datetime.now(),\n            end_time=INFINITY,\n            event_type_id=\"juniperYellowAlarmState\",\n            alert_type=AlertType.objects.get(name=\"juniperYellowAlarmOn\"),\n            value=100,\n        )\n        alert.varmap = {\"s\": {\"count\": 3}}\n        alert.save()\n        unresolved.update()\n        start_event.varmap.update({\"count\": 2})\n        start_event.save()\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=start_event, engine=eventengine)\n        handler.handle()\n\n        alert.refresh_from_db()\n\n        assert getattr(alert, \"end_time\", None) == start_event.time\n\n    def test_handle_start_does_nothing_if_alert_exists_with_same_count(\n        self, netbox_having_new_alarm_count, caplog\n    ):\n        start_event = post_fake_yellow_alarm_start_event(\n            netbox_having_new_alarm_count, 3\n        )\n        alert = AlertHistory.objects.create(\n            source_id=\"ipdevpoll\",\n            netbox=netbox_having_new_alarm_count,\n            start_time=datetime.datetime.now(),\n            end_time=INFINITY,\n            event_type_id=\"juniperYellowAlarmState\",\n            alert_type=AlertType.objects.get(name=\"juniperYellowAlarmOn\"),\n            value=100,\n        )\n        alert.varmap = {\"s\": {\"count\": 3}}\n        alert.save()\n        unresolved.update()\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=start_event, engine=eventengine)\n        with caplog.at_level(logging.INFO):\n            handler.handle()\n\n        assert \"Ignoring duplicate juniperYellowAlarmState start event\" in caplog.text\n        with pytest.raises(Event.DoesNotExist):\n            start_event.refresh_from_db()\n        assert getattr(handler, \"event\", None)\n\n\nclass TestHandleEnd:\n    def test_handle_end_ignores_irellevant_alert_type(\n        self, netbox_having_new_alarm_count, caplog\n    ):\n        end_event = post_fake_yellow_alarm_end_event(netbox_having_new_alarm_count)\n        end_event.varmap = {\n            \"alerttype\": \"wrong_type\",\n        }\n        end_event.save()\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=end_event, engine=eventengine)\n        with caplog.at_level(logging.INFO):\n            handler.handle()\n\n        assert (\n            \"Ignoring juniperYellowAlarmState end event with alert type wrong_type\"\n            in caplog.text\n        )\n        with pytest.raises(Event.DoesNotExist):\n            end_event.refresh_from_db()\n        assert getattr(handler, \"event\", None)\n\n    def test_handle_end_resolves_start_alert(\n        self,\n        netbox_having_new_alarm_count,\n    ):\n        start_alert = AlertHistory.objects.create(\n            source_id=\"ipdevpoll\",\n            netbox=netbox_having_new_alarm_count,\n            start_time=datetime.datetime.now(),\n            end_time=INFINITY,\n            event_type_id=\"juniperYellowAlarmState\",\n            alert_type=AlertType.objects.get(name=\"juniperYellowAlarmOn\"),\n            value=100,\n        )\n        start_alert.varmap = {\"s\": {\"count\": 3}}\n        start_alert.save()\n        unresolved.update()\n        end_event = post_fake_yellow_alarm_end_event(\n            netbox_having_new_alarm_count,\n        )\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=end_event, engine=eventengine)\n        handler.handle()\n\n        assert not netbox_having_new_alarm_count.get_unresolved_alerts(\n            \"juniperYellowAlarmState\"\n        ).exists(), \"there are still unresolved alerts\"\n\n    def test_handle_end_does_nothing_if_no_start_alert_exists(\n        self, netbox_having_new_alarm_count, caplog\n    ):\n        end_event = post_fake_yellow_alarm_end_event(netbox_having_new_alarm_count)\n        eventengine = EventEngine()\n        handler = JuniperAlertCountHandler(event=end_event, engine=eventengine)\n        with caplog.at_level(logging.INFO):\n            handler.handle()\n\n        subject = end_event.get_subject()\n        assert (\n            f\"no unresolved juniperYellowAlarmState for {subject}, ignoring end event\"\n            in caplog.text\n        )\n        with pytest.raises(Event.DoesNotExist):\n            end_event.refresh_from_db()\n        assert getattr(handler, \"event\", None)\n\n\n########################\n#                      #\n# fixtures and helpers #\n#                      #\n########################\ndef post_fake_yellow_alarm_start_event(netbox, count: int = 2):\n    event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"juniperYellowAlarmState\",\n        netbox=netbox,\n        state=Event.STATE_START,\n    )\n    event.varmap = {\n        \"count\": count,\n        \"alerttype\": \"juniperYellowAlarmOn\",\n    }\n    event.save()\n\n    return event\n\n\ndef post_fake_yellow_alarm_end_event(netbox):\n    event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"juniperYellowAlarmState\",\n        netbox=netbox,\n        state=Event.STATE_END,\n    )\n    event.varmap = {\n        \"alerttype\": \"juniperYellowAlarmOff\",\n    }\n    event.save()\n\n    return event\n\n\ndef post_fake_red_alarm_start_event(netbox, count: int = 2):\n    event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"juniperRedAlarmState\",\n        netbox=netbox,\n        state=Event.STATE_START,\n    )\n    event.varmap = {\n        \"count\": count,\n        \"alerttype\": \"juniperRedAlarmOn\",\n    }\n    event.save()\n\n    return event\n\n\ndef post_fake_red_alarm_end_event(netbox):\n    event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"juniperRedAlarmState\",\n        netbox=netbox,\n        state=Event.STATE_END,\n    )\n    event.varmap = {\n        \"alerttype\": \"juniperRedAlarmOff\",\n    }\n    event.save()\n\n    return event\n\n\ndef post_fake_stateless_event(netbox):\n    event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"juniperYellowAlarmState\",\n        netbox=netbox,\n        state=Event.STATE_STATELESS,\n    )\n    event.save()\n\n    return event\n\n\n@pytest.fixture()\ndef netbox_having_new_alarm_count():\n    box = Netbox(\n        ip=\"10.254.254.254\",\n        sysname=\"upgradehost.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SW\",\n    )\n    box.save()\n    entity = NetboxEntity(\n        index=1,\n        netbox=box,\n        software_revision=\"new version\",\n    )\n    entity.save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n    entity.delete()\n"
  },
  {
    "path": "tests/integration/eventengine/severity_test.py",
    "content": "from nav.config import find_config_file\n\nfrom nav.eventengine.severity import SeverityRules, CONFIG_FILE\n\n\nclass TestThatExampleSeverityRules:\n    def test_should_be_valid(self):\n        full_path = find_config_file(CONFIG_FILE)\n        assert full_path, f\"Could not find severity rule config file {CONFIG_FILE}\"\n        assert SeverityRules.load_from_file(full_path)\n"
  },
  {
    "path": "tests/integration/eventengine/upgrade_test.py",
    "content": "\"\"\"Integration tests for the apparent proper processing of deviceNotice events\"\"\"\n\nfrom mock import Mock\n\nimport pytest\n\nfrom nav.eventengine.plugins.upgrade import UpgradeHandler\nfrom nav.models.manage import Netbox, NetboxEntity\nfrom nav.models.event import EventQueue as Event\n\n\ndef test_upgrade_handler_should_copy_old_and_new_version_to_alert_history_if_they_exist(\n    netbox_having_sw_upgrade,\n):\n    fake_engine = Mock()\n    fake_event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"deviceNotice\",\n        netbox=netbox_having_sw_upgrade,\n        state=Event.STATE_STATELESS,\n    )\n    fake_event.varmap = {\n        \"old_version\": \"old version\",\n        \"new_version\": \"new version\",\n        \"alerttype\": \"deviceSwUpgrade\",\n    }\n    fake_event.save()\n    plugin = UpgradeHandler(fake_event, fake_engine)\n    plugin.handle()\n\n    alert = (\n        netbox_having_sw_upgrade.alert_history_set.filter(event_type__id=\"deviceNotice\")\n        .filter(variables__isnull=False)\n        .first()\n    )\n    assert alert, \"no alert was posted on software upgrade\"\n    variables = alert.variables.all()\n    assert variables.get(variable=\"old_version\").value == \"old version\"\n    assert variables.get(variable=\"new_version\").value == \"new version\"\n\n\ndef test_upgrade_handler_should_not_fail_if_old_and_new_version_do_not_exist(\n    netbox_having_sw_upgrade,\n):\n    fake_engine = Mock()\n    fake_event = Event(\n        source_id=\"ipdevpoll\",\n        target_id=\"eventEngine\",\n        event_type_id=\"deviceNotice\",\n        netbox=netbox_having_sw_upgrade,\n        state=Event.STATE_STATELESS,\n    )\n    fake_event.varmap = {\n        \"alerttype\": \"deviceSwUpgrade\",\n    }\n    fake_event.save()\n    plugin = UpgradeHandler(fake_event, fake_engine)\n    plugin.handle()\n\n    alert = (\n        netbox_having_sw_upgrade.alert_history_set.filter(event_type__id=\"deviceNotice\")\n        .filter(variables__isnull=False)\n        .first()\n    )\n    assert alert, \"no alert was posted on software upgrade\"\n    variables = alert.variables.all()\n    assert variables.get(variable=\"old_version\").value == \"N/A\"\n    assert variables.get(variable=\"new_version\").value == \"N/A\"\n\n\n########################\n#                      #\n# fixtures and helpers #\n#                      #\n########################\n\n\n@pytest.fixture()\ndef netbox_having_sw_upgrade():\n    box = Netbox(\n        ip=\"10.254.254.254\",\n        sysname=\"upgradehost.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SW\",\n    )\n    box.save()\n    entity = NetboxEntity(\n        index=1,\n        netbox=box,\n        software_revision=\"even newer version\",\n    )\n    entity.save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n    entity.delete()\n"
  },
  {
    "path": "tests/integration/ipdevpoll/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/ipdevpoll/db_test.py",
    "content": "from nav.ipdevpoll.db import django_debug_cleanup\nfrom nav.models.manage import Netbox\nfrom django.conf import settings\nimport pytest\n\n\n@pytest.mark.skipif(\n    not settings.DEBUG, reason=\"can only test when Django DEBUG is enabled\"\n)\ndef test_django_debug_cleanup_should_run_without_errors():\n    from django.db import connection\n\n    list(Netbox.objects.all())  # generate a query\n    assert len(connection.queries) > 0, \"no query was logged by Django\"\n\n    assert django_debug_cleanup() is None\n\n\ndef test_delete_stale_job_refresh_notifications_should_delete_stale_notifications(\n    stale_refresh_event,\n):\n    from nav.ipdevpoll.db import delete_stale_job_refresh_notifications\n    from nav.models.event import EventQueue\n\n    assert EventQueue.objects.filter(target='ipdevpoll').count() > 0, (\n        \"no stale job refresh notifications found\"\n    )\n    delete_stale_job_refresh_notifications()\n    assert EventQueue.objects.filter(target='ipdevpoll').count() == 0, (\n        \"stale job refresh notifications still found\"\n    )\n\n\n@pytest.fixture\ndef stale_refresh_event(localhost):\n    from nav.event2 import EventFactory\n\n    factory = EventFactory(\"devBrowse\", \"ipdevpoll\", event_type=\"notification\")\n    event = factory.notify(netbox=localhost, subid=\"inventory\")\n    event.save()\n\n    yield event\n"
  },
  {
    "path": "tests/integration/ipdevpoll/plugins/entity_test.py",
    "content": "from nav.ipdevpoll.plugins.entity import Entity\nfrom nav.ipdevpoll.shadows import Device\nfrom nav.ipdevpoll.storage import ContainerRepository\n\n\ndef test_entity_sets_software_version_of_entity_with_lowest_index(localhost):\n    result = {\n        2: {\n            'entPhysicalIndex': None,\n            'entPhysicalDescr': 'ProCurve J9086A Switch 2610-24/12PWR',\n            'entPhysicalVendorType': '.1.3.6.1.4.1.11.2.3.7.11.80',\n            'entPhysicalContainedIn': 0,\n            'entPhysicalClass': 'chassis',\n            'entPhysicalParentRelPos': -1,\n            'entPhysicalName': 'Chassis',\n            'entPhysicalHardwareRev': '1990-3656',\n            'entPhysicalFirmwareRev': 'R.10.06',\n            'entPhysicalSoftwareRev': 'R.11.25',\n            'entPhysicalSerialNum': 'CN931ZQ0H6',\n            'entPhysicalMfgName': 'Hewlett-Packard',\n            'entPhysicalModelName': 'J9086A',\n            'entPhysicalAlias': '',\n            'entPhysicalAssetID': '',\n            'entPhysicalIsFRU': True,\n            'entPhysicalMfgDate': None,\n            'entPhysicalUris': None,\n            'entPhysicalUUID': None,\n            0: 2,\n        },\n        1: {\n            'entPhysicalIndex': None,\n            'entPhysicalDescr': 'ProCurve J9086A Switch 2610-24/12PWR',\n            'entPhysicalVendorType': '.1.3.6.1.4.1.11.2.3.7.11.80',\n            'entPhysicalContainedIn': 0,\n            'entPhysicalClass': 'chassis',\n            'entPhysicalParentRelPos': -1,\n            'entPhysicalName': 'Chassis',\n            'entPhysicalHardwareRev': '1990-3656',\n            'entPhysicalFirmwareRev': 'R.10.06',\n            'entPhysicalSoftwareRev': 'R.12.25',\n            'entPhysicalSerialNum': 'CN931ZQ0H6',\n            'entPhysicalMfgName': 'Hewlett-Packard',\n            'entPhysicalModelName': 'J9086A',\n            'entPhysicalAlias': '',\n            'entPhysicalAssetID': '',\n            'entPhysicalIsFRU': True,\n            'entPhysicalMfgDate': None,\n            'entPhysicalUris': None,\n            'entPhysicalUUID': None,\n            0: 1,\n        },\n    }\n    entity = Entity(netbox=localhost, agent=None, containers=ContainerRepository())\n    entity.ignored_serials = []\n    entity._process_entities(result)\n\n    assert entity.containers[Device][\"CN931ZQ0H6\"].software_version == 'R.12.25'\n"
  },
  {
    "path": "tests/integration/ipdevpoll/plugins/juniper_alarm_test.py",
    "content": "from mock import Mock\n\nimport pytest\nimport pytest_twisted\n\nfrom nav.ipdevpoll.jobs import JobHandler\nfrom nav.ipdevpoll.plugins import juniperalarm, plugin_registry\nfrom nav.models.event import EventQueue\nfrom nav.models.manage import NetboxInfo, NetboxType\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_start_events_should_be_posted_on_new_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 1,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 2,\n    }\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() != 0\n    assert yellow_start_events.count() != yellow_start_events_count\n    assert red_start_events.count() != 0\n    assert red_start_events.count() != red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 1\n    assert int(red_saved_count) == 2\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_no_start_event_should_be_posted_on_new_zero_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 0,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 0,\n    }\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() == yellow_start_events_count\n    assert red_start_events.count() == red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 0\n    assert int(red_saved_count) == 0\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_no_start_event_should_be_posted_on_old_zero_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 0,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 0,\n    }\n\n    yield job.run()\n\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 0,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 0,\n    }\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() == yellow_start_events_count\n    assert red_start_events.count() == red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 0\n    assert int(red_saved_count) == 0\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_no_start_event_should_be_posted_on_old_non_zero_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 1,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 2,\n    }\n\n    yield job.run()\n\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 1,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 2,\n    }\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() == yellow_start_events_count\n    assert red_start_events.count() == red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 1\n    assert int(red_saved_count) == 2\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_start_events_should_be_posted_on_changed_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 2,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 1,\n    }\n\n    yield job.run()\n\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 3,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 2,\n    }\n\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() != 0\n    assert yellow_start_events.count() != yellow_start_events_count\n    assert red_start_events.count() != 0\n    assert red_start_events.count() != red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 3\n    assert int(red_saved_count) == 2\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_start_events_should_be_posted_on_changed_from_zero_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 0,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 0,\n    }\n\n    yield job.run()\n\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 3,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 2,\n    }\n\n    start_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_START,\n    )\n    yellow_start_events = start_events.filter(event_type='juniperYellowAlarmState')\n    red_start_events = start_events.filter(event_type='juniperRedAlarmState')\n    yellow_start_events_count = yellow_start_events.count()\n    red_start_events_count = red_start_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_start_events.count() != 0\n    assert yellow_start_events.count() != yellow_start_events_count\n    assert red_start_events.count() != 0\n    assert red_start_events.count() != red_start_events_count\n\n    netbox_info = NetboxInfo.objects.filter(netbox__id=juniper_netbox.id).filter(\n        key=\"juniperalarm\"\n    )\n    yellow_saved_count = netbox_info.filter(variable=\"yellow_count\").first().value\n    red_saved_count = netbox_info.filter(variable=\"red_count\").first().value\n    assert yellow_saved_count.isdigit()\n    assert red_saved_count.isdigit()\n    assert int(yellow_saved_count) == 3\n    assert int(red_saved_count) == 2\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_end_events_should_be_posted_on_changed_to_zero_alarms(juniper_netbox, db):\n    plugin_registry['juniperalarm'] = juniperalarm.JuniperChassisAlarm\n    job = JobHandler('juniperalarm', juniper_netbox.pk, plugins=['juniperalarm'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 2,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 1,\n    }\n\n    yield job.run()\n\n    agent.walk.return_value = {\n        '.1.3.6.1.4.1.2636.3.4.2.2.2.0': 0,\n        '.1.3.6.1.4.1.2636.3.4.2.3.2.0': 0,\n    }\n\n    end_events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        netbox_id=juniper_netbox.pk,\n        state=EventQueue.STATE_END,\n    )\n    yellow_end_events = end_events.filter(event_type='juniperYellowAlarmState')\n    red_end_events = end_events.filter(event_type='juniperRedAlarmState')\n    yellow_end_events_count = yellow_end_events.count()\n    red_end_events_count = red_end_events.count()\n\n    yield job.run()\n\n    assert agent.walk.called\n    assert yellow_end_events.count() != 0\n    assert yellow_end_events.count() != yellow_end_events_count\n    assert red_end_events.count() != 0\n    assert red_end_events.count() != red_end_events_count\n\n\n@pytest.fixture()\ndef juniper_netbox(management_profile):\n    from nav.models.manage import Netbox, NetboxProfile\n\n    box = Netbox(\n        ip='127.0.0.1',\n        sysname='localhost.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SRV',\n    )\n    box.save()\n    box.type = NetboxType.objects.get(sysobjectid=\"1.3.6.1.4.1.2636.1.1.1.2.6\")\n    box.save()\n    NetboxProfile(netbox=box, profile=management_profile).save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n"
  },
  {
    "path": "tests/integration/ipdevpoll/plugins/paloaltoarp_test.py",
    "content": "from unittest.mock import Mock\n\nfrom django.urls import reverse\nimport pytest\nimport pytest_twisted\nfrom twisted.internet import defer\n\nfrom nav.models.manage import ManagementProfile, Netbox, NetboxProfile\nfrom nav.ipdevpoll.jobs import JobHandler\nfrom nav.ipdevpoll.plugins.paloaltoarp import PaloaltoArp\nfrom nav.ipdevpoll.plugins import plugin_registry\n\n\nclass TestCanHandleNetbox:\n    \"\"\"\n    Check that the PaloaltoArp plugin signifies it can handle netboxes with at\n    least one management profile containing a paloalto configuration.\n    \"\"\"\n\n    @pytest.mark.parametrize(\n        \"netbox\",\n        [\"paloalto_netbox_1234\", \"paloalto_netbox_5678\"],\n    )\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_it_should_accept_netbox_having_some_paloalto_http_api_management_profile(\n        self, netbox, request\n    ):\n        netbox = request.getfixturevalue(netbox)\n\n        can_handle = yield PaloaltoArp.can_handle(netbox)\n        assert can_handle\n\n    @pytest.mark.parametrize(\n        \"netbox\",\n        [\"no_paloalto_http_api_netbox\", \"no_http_api_netbox\"],\n    )\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_it_should_not_accept_netbox_without_any_paloalto_http_api_management_profile(  # noqa: E501\n        self, netbox, request\n    ):\n        netbox = request.getfixturevalue(netbox)\n\n        can_handle = yield PaloaltoArp.can_handle(netbox)\n        assert not can_handle\n\n\nclass TestGetArpMappings:\n    \"\"\"\n    Run the PaloaltoArp plugin on disparate pre-configured netboxes, then check\n    that the expected arp mappings are assigned afterwards.\n    \"\"\"\n\n    @pytest.mark.parametrize(\n        \"netbox\",\n        [\"paloalto_netbox_1234\"],\n    )\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_it_should_get_arp_mappings_of_netbox_having_some_paloalto_management_profile_with_valid_api_key(  # noqa: E501\n        self, netbox, monkeypatch, request\n    ):\n        netbox = request.getfixturevalue(netbox)\n\n        # Set up a single ipdevpoll job for this netbox:\n        # Assure PaloAltoArp is a known ipdevpoll plugin\n        plugin_registry['paloaltoarp'] = PaloaltoArp\n        job = JobHandler('paloaltoarp', netbox.pk, plugins=['paloaltoarp'])\n        # Disable implicit SNMP requests done during job.run()\n        job._create_agentproxy = Mock()\n        job._destroy_agentproxy = Mock()\n\n        monkeypatch.setattr(PaloaltoArp, \"_do_request\", _only_accept_1234)\n\n        assert netbox.arp_set.count() == 0\n\n        yield job.run()\n\n        actual = [(arp.ip, arp.mac) for arp in netbox.arp_set.all()]\n        expected = [\n            ('192.168.0.1', '00:00:00:00:00:01'),\n            ('192.168.0.2', '00:00:00:00:00:02'),\n            ('192.168.0.3', '00:00:00:00:00:03'),\n        ]\n        assert sorted(actual) == sorted(expected)\n\n    @pytest.mark.parametrize(\n        \"netbox\",\n        [\"paloalto_netbox_5678\", \"no_paloalto_http_api_netbox\", \"no_http_api_netbox\"],\n    )\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_it_should_not_get_arp_mappings_of_netbox_without_any_paloalto_http_api_management_profile_with_valid_api_key(  # noqa: E501\n        self, netbox, monkeypatch, request\n    ):\n        netbox = request.getfixturevalue(netbox)\n\n        plugin_registry['paloaltoarp'] = PaloaltoArp\n        job = JobHandler('paloaltoarp', netbox.pk, plugins=['paloaltoarp'])\n        job._create_agentproxy = Mock()\n        job._destroy_agentproxy = Mock()\n\n        monkeypatch.setattr(PaloaltoArp, \"_do_request\", _only_accept_1234)\n\n        assert netbox.arp_set.count() == 0\n        yield job.run()\n        assert netbox.arp_set.count() == 0\n\n\nclass TestEndToEnd:\n    \"\"\"Tests that mimic actual usage of the plugin\"\"\"\n\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_it_should_get_arp_mappings_of_netbox_configured_with_paloalto_management_profile_using_seeddb(  # noqa: E501\n        self, client, no_http_api_netbox, blank_management_profile, monkeypatch\n    ):\n        \"\"\"\n        Manually configure a netbox for use with the PaloaltoArp plugin, using\n        SeedDB. Then run the PaloaltoArp plugin on this netbox and check that the\n        expected arp mappings are assigned afterwards.\n        \"\"\"\n\n        # Using SeedDB, edit a blank profile so that it now configures access to Palo\n        # Alto ARP\n        profile = blank_management_profile\n        management_profile_url = reverse(\n            \"seeddb-management-profile-edit\", args=(profile.id,)\n        )\n        client.post(\n            management_profile_url,\n            follow=True,\n            data={\n                \"name\": profile.name,\n                \"description\": \"\",\n                \"protocol\": ManagementProfile.PROTOCOL_HTTP_API,\n                \"service\": \"Palo Alto ARP\",\n                \"api_key\": \"1234\",\n            },\n        )\n\n        # Using SeedDB, add the profile to a netbox with no prior Palo Alto ARP\n        # management profile\n        netbox = no_http_api_netbox\n        netbox_url = reverse(\"seeddb-netbox-edit\", args=(netbox.id,))\n        client.post(\n            netbox_url,\n            follow=True,\n            data={\n                \"ip\": netbox.ip,\n                \"room\": netbox.room_id,\n                \"category\": netbox.category_id,\n                \"organization\": netbox.organization_id,\n                \"profiles\": [profile.id],\n            },\n        )\n        profile.refresh_from_db()\n        netbox.refresh_from_db()\n\n        # Now check that the plugin correctly fetches arp mappings from this netbox\n        plugin_registry['paloaltoarp'] = PaloaltoArp\n        job = JobHandler('paloaltoarp', netbox.pk, plugins=['paloaltoarp'])\n\n        job._create_agentproxy = Mock()\n        job._destroy_agentproxy = Mock()\n\n        monkeypatch.setattr(PaloaltoArp, \"_do_request\", _only_accept_1234)\n\n        assert netbox.arp_set.count() == 0\n\n        yield job.run()\n\n        actual = [(arp.ip, arp.mac) for arp in netbox.arp_set.all()]\n        expected = [\n            ('192.168.0.1', '00:00:00:00:00:01'),\n            ('192.168.0.2', '00:00:00:00:00:02'),\n            ('192.168.0.3', '00:00:00:00:00:03'),\n        ]\n        assert sorted(actual) == sorted(expected)\n\n\nvalid_http_response_body = b'''\n    <response status=\"success\">\n    <result>\n            <max>132000</max>\n            <total>3</total>\n            <timeout>1800</timeout>\n            <dp>s3dp1</dp>\n            <entries>\n                <entry>\n                    <status>  s  </status>\n                    <ip>192.168.0.1</ip>\n                    <mac>00:00:00:00:00:01</mac>\n                    <ttl>100</ttl>\n                    <interface>ae2</interface>\n                    <port>ae2</port>\n                </entry>\n                <entry>\n                    <status>  e  </status>\n                    <ip>192.168.0.2</ip>\n                    <mac>00:00:00:00:00:02</mac>\n                    <ttl>200</ttl>\n                    <interface>ae2</interface>\n                    <port>ae2</port>\n                </entry>\n                <entry>\n                    <status>  c  </status>\n                    <ip>192.168.0.3</ip>\n                    <mac>00:00:00:00:00:03</mac>\n                    <ttl>300</ttl>\n                    <interface>ae3.61</interface>\n                    <port>ae3</port>\n                </entry>\n                <entry>\n                    <status>  i  </status>\n                    <ip>192.168.0.4</ip>\n                    <mac>00:00:00:00:00:04</mac>\n                    <ttl>400</ttl>\n                    <interface>ae3.61</interface>\n                    <port>ae3</port>\n                </entry>\n            </entries>\n        </result>\n    </response>\n    '''\n\n\ndef _only_accept_1234(self, address, key, *args, **kwargs):\n    \"\"\"Mimic PaloaltoArp._do_request() but only succeed if supplied key is '1234'\"\"\"\n    if key == \"1234\":\n        return defer.succeed(valid_http_response_body)\n    return defer.succeed(None)\n\n\n@pytest.fixture\ndef paloalto_netbox_1234():\n    \"\"\"\n    Netbox with a PaloAlto HTTP\n    \"\"\"\n    netbox = Netbox(\n        ip=\"10.0.0.1\",\n        sysname=\"fw1.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SRV\",\n    )\n    netbox.save()\n\n    profile = ManagementProfile(\n        name=\"PaloAlto Profile 1\",\n        protocol=ManagementProfile.PROTOCOL_HTTP_API,\n        configuration={\n            \"api_key\": \"1234\",\n            \"service\": \"Palo Alto ARP\",\n        },\n    )\n    profile.save()\n    NetboxProfile(netbox=netbox, profile=profile).save()\n\n    yield netbox\n    netbox.delete()\n    profile.delete()\n\n\n@pytest.fixture\ndef paloalto_netbox_5678():\n    netbox = Netbox(\n        ip=\"10.0.0.2\",\n        sysname=\"fw2.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SRV\",\n    )\n    netbox.save()\n\n    profile = ManagementProfile(\n        name=\"PaloAlto Profile 2\",\n        protocol=ManagementProfile.PROTOCOL_HTTP_API,\n        configuration={\n            \"api_key\": \"5678\",\n            \"service\": \"Palo Alto ARP\",\n        },\n    )\n    profile.save()\n    NetboxProfile(netbox=netbox, profile=profile).save()\n\n    yield netbox\n    netbox.delete()\n    profile.delete()\n\n\n@pytest.fixture\ndef no_http_api_netbox():\n    netbox = Netbox(\n        ip=\"10.0.0.3\",\n        sysname=\"gw1.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"GW\",\n    )\n    netbox.save()\n\n    profile = ManagementProfile(\n        name=\"SNMP v1 write profile\",\n        protocol=ManagementProfile.PROTOCOL_SNMP,\n        configuration={\n            \"community\": \"secret\",\n            \"version\": 1,\n            \"write\": True,\n            \"api_key\": \"1234\",\n            \"service\": \"Palo Alto ARP\",\n        },\n    )\n    profile.save()\n    NetboxProfile(netbox=netbox, profile=profile).save()\n\n    yield netbox\n    netbox.delete()\n    profile.delete()\n\n\n@pytest.fixture\ndef no_paloalto_http_api_netbox():\n    netbox = Netbox(\n        ip=\"10.0.0.4\",\n        sysname=\"dns.example.org\",\n        organization_id=\"myorg\",\n        room_id=\"myroom\",\n        category_id=\"SRV\",\n    )\n    netbox.save()\n\n    profile = ManagementProfile(\n        name=\"PaloAlto Test Management Profile\",\n        protocol=ManagementProfile.PROTOCOL_HTTP_API,\n        configuration={\n            \"api_key\": \"1234\",\n            \"service\": \"DNS\",\n        },\n    )\n    profile.save()\n    NetboxProfile(netbox=netbox, profile=profile).save()\n\n    yield netbox\n    netbox.delete()\n    profile.delete()\n\n\n@pytest.fixture\ndef blank_management_profile():\n    profile = ManagementProfile(\n        name=\"Manually Configured Paloaltoarp Profile\",\n        protocol=ManagementProfile.PROTOCOL_DEBUG,\n        configuration={},\n    )\n    profile.save()\n    yield profile\n    profile.delete()\n"
  },
  {
    "path": "tests/integration/ipdevpoll/plugins/snmpcheck_test.py",
    "content": "from mock import Mock\nfrom datetime import datetime\n\nimport pytest\nimport pytest_twisted\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll.jobs import JobHandler, SuggestedReschedule\nfrom nav.ipdevpoll.plugins import snmpcheck, plugin_registry\nfrom nav.models.event import EventQueue, AlertHistory\nfrom nav.models.fields import INFINITY\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_short_outage(localhost, db):\n    plugin_registry['snmpcheck'] = snmpcheck.SnmpCheck\n    job = JobHandler('snmpcheck', localhost.pk, plugins=['snmpcheck'])\n    agent = Mock()\n    job.agent = agent\n    job._create_agentproxy = Mock()\n    job._destroy_agentproxy = Mock()\n    agent.walk.return_value = defer.succeed(False)\n    events = EventQueue.objects.filter(\n        source_id='ipdevpoll',\n        target_id='eventEngine',\n        event_type='snmpAgentState',\n        netbox_id=localhost.pk,\n    )\n    start_events = events.filter(state=EventQueue.STATE_START)\n    end_events = events.filter(state=EventQueue.STATE_END)\n    start_events_first_count = start_events.count()\n    end_events_first_count = end_events.count()\n\n    with pytest.raises(SuggestedReschedule):\n        yield job.run()\n\n    assert agent.walk.called\n    assert localhost.info_set.filter(\n        key=snmpcheck.INFO_KEY_NAME, variable=snmpcheck.INFO_VARIABLE_NAME, value=\"down\"\n    ).exists()\n    assert start_events.count() == start_events_first_count + 1\n\n    with pytest.raises(SuggestedReschedule):\n        yield job.run()\n    assert localhost.info_set.filter(\n        key=snmpcheck.INFO_KEY_NAME, variable=snmpcheck.INFO_VARIABLE_NAME, value=\"down\"\n    ).exists()\n    assert start_events.count() == start_events_first_count + 2\n\n    # now fake an AlertHist entry from event engine\n    AlertHistory(\n        source_id='ipdevpoll',\n        event_type_id='snmpAgentState',\n        netbox_id=localhost.pk,\n        start_time=datetime.now(),\n        end_time=INFINITY,\n        value=100,\n        severity=3,\n    ).save()\n\n    # and make sure snmpcheck tries to resolve it when the box is up\n    agent.walk.return_value = defer.succeed(True)\n    yield job.run()\n    assert localhost.info_set.filter(\n        key=snmpcheck.INFO_KEY_NAME, variable=snmpcheck.INFO_VARIABLE_NAME, value=\"up\"\n    ).exists()\n    assert end_events.count() == end_events_first_count + 1\n"
  },
  {
    "path": "tests/integration/ipdevpoll/plugins/typeoid_test.py",
    "content": "from nav.ipdevpoll.plugins import typeoid\nfrom nav.models import manage\n\n\ndef test_get_vendor_should_return_expected_vendor():\n    sysobjectid = \"1.3.6.1.4.1.11.2.3.7.11.51\"\n    result = typeoid.TypeOid._get_vendor(sysobjectid)\n    assert isinstance(result, manage.Vendor)\n    assert result.id == \"hp\"\n\n\ndef test_make_new_vendor_should_return_expected_vendor_object():\n    sysobjectid = \"1.3.6.1.4.1.11.2.3.7.11.51\"\n    result = typeoid.TypeOid._make_new_vendor(sysobjectid)\n    assert isinstance(result, manage.Vendor)\n    assert result.id == \"hewlettpackard\"\n"
  },
  {
    "path": "tests/integration/ipdevpoll/pool_test.py",
    "content": "import os\n\nimport pytest\nimport pytest_twisted\n\nfrom mock import patch\n\nfrom nav.models.manage import NetboxProfile\nfrom nav.config import find_config_file\nfrom nav.ipdevpoll import config, jobs, plugins\nfrom nav.ipdevpoll.pool import InlinePool, WorkerPool\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_reschedule(localhost, ipdevpoll_test_config, pool):\n    with pytest.raises(jobs.SuggestedReschedule):\n        yield pool.execute_job(\n            'noop',\n            localhost.pk,\n            [\n                'snmpcheck',\n            ],\n            0,\n        )\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_success(localhost, ipdevpoll_test_config, pool):\n    res = yield pool.execute_job(\n        'noop',\n        localhost.pk,\n        [\n            'noop',\n        ],\n        0,\n    )\n    assert res is True\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_fail(localhost, ipdevpoll_test_config, pool):\n    res = yield pool.execute_job(\n        'noop',\n        localhost.pk,\n        [\n            'fail',\n        ],\n        0,\n    )\n    assert res is True  # TODO: Check job status in database\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_not_done(localhost, ipdevpoll_test_config, pool):\n    NetboxProfile.objects.filter(netbox=localhost).delete()\n    res = yield pool.execute_job(\n        'noop',\n        localhost.pk,\n        [\n            'snmpcheck',\n        ],\n        0,\n    )\n    assert res is False\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_crash(localhost, ipdevpoll_test_config, pool):\n    with pytest.raises(jobs.AbortedJobError):\n        yield pool.execute_job(\n            'noop',\n            localhost.pk,\n            [\n                'crash',\n            ],\n            0,\n        )\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_cancel(localhost, ipdevpoll_test_config, pool):\n    with pytest.raises(jobs.AbortedJobError):\n        defered = pool.execute_job(\n            'noop',\n            localhost.pk,\n            [\n                'sleep',\n            ],\n            0,\n        )\n        pool.cancel(defered)\n        yield defered\n\n\n@pytest.fixture(params=[\"WorkerPool\", \"InlinePool\"])\ndef pool(request):\n    with patch('nav.ipdevpoll.control.get_process_command') as gpc:\n        gpc.return_value = 'ipdevpolld'\n        if request.param == \"WorkerPool\":\n            yield WorkerPool(1, 1)\n        elif request.param == \"InlinePool\":\n            yield InlinePool()\n\n\n@pytest.fixture(scope=\"module\")\ndef ipdevpoll_test_config():\n    print(\"placing temporary ipdevpoll config\")\n    configfile = find_config_file(\"ipdevpoll.conf\")\n    tmpfile = configfile + '.bak'\n    os.rename(configfile, tmpfile)\n    with open(configfile, \"w\") as config_handle:\n        config_handle.write(\n            \"\"\"\n[snmp]\n# we don't need timeout tests to take forever:\ntimeout=0.1\n\n[plugins]\nsnmpcheck=\ncrash=nav.ipdevpoll.plugins.debugging.Crash\nerror=nav.ipdevpoll.plugins.debugging.Error\nfail=nav.ipdevpoll.plugins.debugging.Fail\nsleep=nav.ipdevpoll.plugins.debugging.Sleep\nnoop=nav.ipdevpoll.plugins.debugging.Noop\n\"\"\"\n        )\n    config.ipdevpoll_conf = config.IpdevpollConfig()  # test load from scratch\n    plugins.import_plugins()\n    yield configfile\n    print(\"restoring ipdevpoll config\")\n    os.remove(configfile)\n    os.rename(tmpfile, configfile)\n"
  },
  {
    "path": "tests/integration/ipdevpoll/utils_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport pytest\nimport pytest_twisted\n\nfrom nav.ipdevpoll.utils import get_arista_vrf_instances\nfrom nav.mibs.types import LogicalMibInstance\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_get_arista_vrf_instances_should_return_expected_instances(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'arista'\n    snmp_agent_proxy.open()\n\n    result = yield get_arista_vrf_instances(snmp_agent_proxy)\n    expected = [\n        LogicalMibInstance(description='', community='arista'),\n        LogicalMibInstance(description='IOT', community='arista@IOT'),\n        LogicalMibInstance(description='MGMT', community='arista@MGMT'),\n        LogicalMibInstance(description='STUDENT', community='arista@STUDENT'),\n        LogicalMibInstance(description='VR', community='arista@VR'),\n    ]\n    assert set(result) == set(expected)\n"
  },
  {
    "path": "tests/integration/jwt_refresh_endpoint_test.py",
    "content": "import hashlib\nfrom datetime import datetime, timedelta, timezone\nfrom typing import Generator\nfrom unittest.mock import patch\n\nimport jwt\nimport pytest\nfrom django.urls import reverse\nfrom nav.models.api import JWTRefreshToken\n\n\ndef test_token_not_in_database_should_be_rejected(db, api_client, url, active_token):\n    token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    assert not JWTRefreshToken.objects.filter(hash=token_hash).exists()\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 403\n\n\ndef test_inactive_token_should_be_rejected(db, api_client, url, inactive_token):\n    now = datetime.now()\n    token_hash = hashlib.sha256(inactive_token.encode('utf-8')).hexdigest()\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=now - timedelta(hours=1),\n        activates=now - timedelta(hours=2),\n    )\n    db_token.save()\n\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': inactive_token,\n        },\n    )\n\n    assert response.status_code == 403\n\n\ndef test_revoked_token_should_be_rejected(db, api_client, url, active_token):\n    token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    data = jwt.decode(active_token, options={'verify_signature': False})\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=datetime.fromtimestamp(data['exp']),\n        activates=datetime.fromtimestamp(data['nbf']),\n        revoked=True,\n    )\n    db_token.save()\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 403\n\n\ndef test_valid_token_should_be_accepted(db, api_client, url, active_token):\n    data = jwt.decode(active_token, options={'verify_signature': False})\n    token_hash = token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=datetime.fromtimestamp(data['exp']),\n        activates=datetime.fromtimestamp(data['nbf']),\n    )\n    db_token.save()\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 200\n\n\ndef test_valid_token_should_be_replaced_by_new_token_in_db(\n    db, api_client, url, active_token\n):\n    token_hash = token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    data = jwt.decode(active_token, options={'verify_signature': False})\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=datetime.fromtimestamp(data['exp']),\n        activates=datetime.fromtimestamp(data['nbf']),\n    )\n    db_token.save()\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 200\n    assert not JWTRefreshToken.objects.filter(hash=token_hash).exists()\n    new_token = response.data.get(\"refresh_token\")\n    new_hash = hashlib.sha256(new_token.encode('utf-8')).hexdigest()\n    assert JWTRefreshToken.objects.filter(hash=new_hash).exists()\n\n\ndef test_should_include_access_and_refresh_token_in_response(\n    db, api_client, url, active_token\n):\n    token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    data = jwt.decode(active_token, options={'verify_signature': False})\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=datetime.fromtimestamp(data['exp']),\n        activates=datetime.fromtimestamp(data['nbf']),\n    )\n    db_token.save()\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 200\n    assert \"access_token\" in response.data\n    assert \"refresh_token\" in response.data\n\n\ndef test_last_used_should_be_updated_after_token_is_used(\n    db, api_client, url, active_token\n):\n    token_hash = hashlib.sha256(active_token.encode('utf-8')).hexdigest()\n    data = jwt.decode(active_token, options={'verify_signature': False})\n    db_token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=token_hash,\n        expires=datetime.fromtimestamp(data['exp']),\n        activates=datetime.fromtimestamp(data['nbf']),\n    )\n    db_token.save()\n    assert db_token.last_used is None\n    response = api_client.post(\n        url,\n        follow=True,\n        data={\n            'refresh_token': active_token,\n        },\n    )\n    assert response.status_code == 200\n    new_token = response.data.get(\"refresh_token\")\n    new_hash = hashlib.sha256(new_token.encode('utf-8')).hexdigest()\n    assert JWTRefreshToken.objects.get(hash=new_hash).last_used is not None\n\n\n@pytest.fixture()\ndef inactive_token(nav_name, rsa_private_key) -> str:\n    now = datetime.now(timezone.utc)\n    claims = {\n        'exp': (now - timedelta(hours=1)).timestamp(),\n        'nbf': (now - timedelta(hours=2)).timestamp(),\n        'iat': (now - timedelta(hours=2)).timestamp(),\n        'aud': nav_name,\n        'iss': nav_name,\n        'token_type': 'refresh_token',\n    }\n    token = jwt.encode(claims, rsa_private_key, algorithm=\"RS256\")\n    return token\n\n\n@pytest.fixture()\ndef active_token(nav_name, rsa_private_key) -> str:\n    now = datetime.now(timezone.utc)\n    claims = {\n        'exp': (now + timedelta(hours=1)).timestamp(),\n        'nbf': now.timestamp(),\n        'iat': now.timestamp(),\n        'aud': nav_name,\n        'iss': nav_name,\n        'token_type': 'refresh_token',\n    }\n    token = jwt.encode(claims, rsa_private_key, algorithm=\"RS256\")\n    return token\n\n\n@pytest.fixture()\ndef url():\n    return reverse('api:1:jwt-refresh')\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_private_key_mock(rsa_private_key) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_PRIVATE_KEY setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_PRIVATE_KEY\", rsa_private_key):\n        yield rsa_private_key\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_public_key_mock(rsa_public_key) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_PUBLIC_KEY setting\"\"\"\n    with patch(\"nav.web.api.v1.views.JWT_PUBLIC_KEY\", rsa_public_key):\n        yield rsa_public_key\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_name_mock(nav_name) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_NAME setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_NAME\", nav_name):\n        with patch(\"nav.web.api.v1.views.JWT_NAME\", nav_name):\n            yield nav_name\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_access_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_ACCESS_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(hours=1)\n    with patch(\"nav.web.jwtgen.JWT_ACCESS_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_refresh_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_REFRESH_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(days=1)\n    with patch(\"nav.web.jwtgen.JWT_REFRESH_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_is_configured_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the LOCAL_JWT_IS_CONFIGURED setting\"\"\"\n    with patch(\"nav.web.api.v1.views.LOCAL_JWT_IS_CONFIGURED\", True):\n        yield True\n\n\n@pytest.fixture(scope=\"module\")\ndef nav_name() -> str:\n    return \"nav\"\n"
  },
  {
    "path": "tests/integration/l2trace_test.py",
    "content": "\"\"\"Integration tests for nav.web.l2trace\"\"\"\n\nimport types\nfrom datetime import datetime\nfrom unittest.mock import Mock, patch\n\nimport pytest\n\nfrom nav.models.manage import (\n    Arp,\n    Cam,\n    GwPortPrefix,\n    Interface,\n    Location,\n    Netbox,\n    Organization,\n    Prefix,\n    Room,\n    SwPortVlan,\n    Vlan,\n)\nfrom nav.web import l2trace\n\n\n###\n#\n# Test Classes\n#\n###\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestGetNetboxVlan:\n    def test_when_netbox_has_no_prefix_it_should_return_none(self, l2trace_topology):\n        \"\"\"Regression test: get_netbox_vlan should not crash when the netbox\n        has no associated prefix (GitHub issue from prod error report).\"\"\"\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        orphan = Netbox(\n            ip='192.168.99.1',\n            sysname='orphan-sw.example.org',\n            room=foo_gw.room,\n            organization=foo_gw.organization,\n            category_id='SW',\n        )\n        orphan.save()\n        assert l2trace.get_netbox_vlan(orphan) is None\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestGetVlanFromThings:\n    def test_arbitrary_ip_is_on_vlan_10(self, l2trace_topology):\n        vlan = l2trace.get_vlan_from_ip('10.0.0.99')\n        assert vlan is not None\n        assert vlan.vlan == 10\n        assert vlan.net_ident == 'adminvlan'\n\n    def test_router_is_on_vlan_10(self, l2trace_topology):\n        host = l2trace.Host('10.0.0.1')\n        vlan = l2trace.get_vlan_from_host(host)\n        assert vlan is not None\n        assert vlan.vlan == 10\n        assert vlan.net_ident == 'adminvlan'\n\n    def test_switch_is_on_vlan_10(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        vlan = l2trace.get_netbox_vlan(foo_sw1)\n        assert vlan is not None\n        assert vlan.vlan == 10\n        assert vlan.net_ident == 'adminvlan'\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestNetboxFromHost:\n    def test_known_ip_is_router(self, l2trace_topology):\n        host = l2trace.Host('10.0.0.1')\n        found = l2trace.get_netbox_from_host(host)\n        assert found is not None\n        assert found.sysname == 'foo-gw.example.org'\n\n    def test_unknown_ip_gives_none_as_result(self, l2trace_topology):\n        unknown_host = l2trace.Host('10.0.0.99')\n        assert l2trace.get_netbox_from_host(unknown_host) is None\n\n    def test_known_ip_is_netbox(self, l2trace_topology):\n        h = l2trace.get_host_or_netbox_from_addr('10.0.0.1')\n        assert hasattr(h, 'sysname')\n        assert h.sysname == 'foo-gw.example.org'\n\n    def test_unknown_ip_is_host(self, l2trace_topology):\n        ip = '10.99.99.99'\n        h = l2trace.get_host_or_netbox_from_addr(ip)\n        assert hasattr(h, 'hostname')\n        assert h.hostname == ip\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestGateway:\n    def test_foo_gw_is_router_for_employee_vlan(self, l2trace_topology):\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        employee_vlan = Vlan.objects.get(net_ident='employeevlan')\n        assert l2trace.get_vlan_gateway(employee_vlan) == foo_gw\n\n    def test_foo_gw_is_router_for_admin_vlan(self, l2trace_topology):\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        admin_vlan = Vlan.objects.get(net_ident='adminvlan')\n        assert l2trace.get_vlan_gateway(admin_vlan) == foo_gw\n\n    def test_foo_gw_is_router(self, l2trace_topology):\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        assert l2trace.is_netbox_gateway(foo_gw)\n\n    def test_foo_sw1_is_not_a_router(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        assert not l2trace.is_netbox_gateway(foo_sw1)\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestVlanEquality:\n    def test_ips_should_be_on_same_vlan(self, l2trace_topology):\n        assert l2trace.are_hosts_on_same_vlan('10.0.0.1', '10.0.0.2')\n\n    def test_ips_should_not_be_on_same_vlan(self, l2trace_topology):\n        assert not l2trace.are_hosts_on_same_vlan('10.0.20.1', '10.0.0.2')\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestDownlink:\n    def test_employee1_downlink_should_be_foo_sw1_gi_0_10(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        host = l2trace.Host('10.0.20.10')\n        host.hostname = 'employee10.example.org'\n\n        swpvlan = l2trace.get_vlan_downlink_to_host(host)\n        assert swpvlan is not None\n        assert swpvlan.interface.ifname == 'Gi0/10'\n        assert swpvlan.interface.netbox == foo_sw1\n        assert swpvlan.vlan.vlan == 20\n\n    def test_foo_sw1_vlan_downlink_should_be_on_foo_gw_gi_0_13(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n\n        swpvlan = l2trace.get_vlan_downlink_to_netbox(foo_sw1)\n        assert swpvlan is not None\n        assert swpvlan.vlan.vlan == 10\n        assert swpvlan.interface.ifname == 'Gi0/13'\n        assert swpvlan.interface.netbox == foo_gw\n\n    def test_foo_sw1_employee_vlan_uplink_should_be_foo_gw_gi_0_13(\n        self, l2trace_topology\n    ):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        employee_vlan = Vlan.objects.get(net_ident='employeevlan')\n\n        swpvlan = l2trace.get_vlan_downlink_to_netbox(foo_sw1, employee_vlan)\n        assert swpvlan is not None\n        assert swpvlan.vlan.vlan == 20\n        assert swpvlan.interface.ifname == 'Gi0/13'\n        assert swpvlan.interface.netbox == foo_gw\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestUplink:\n    def test_foo_sw1_vlan_uplink_should_be_gi_0_1(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n\n        swpvlan = l2trace.get_vlan_uplink_from_netbox(foo_sw1)\n        assert swpvlan is not None\n        assert swpvlan.vlan.vlan == 10\n        assert swpvlan.interface.ifname == 'Gi0/1'\n\n    def test_foo_sw1_employee_vlan_uplink_should_be_gi_0_1(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        employee_vlan = Vlan.objects.get(net_ident='employeevlan')\n\n        swpvlan = l2trace.get_vlan_uplink_from_netbox(foo_sw1, employee_vlan)\n        assert swpvlan is not None\n        assert swpvlan.vlan == employee_vlan\n        assert swpvlan.interface.ifname == 'Gi0/1'\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestHost:\n    def test_host_without_resolvable_name(self, l2trace_topology):\n        ip = '10.99.99.99'\n        h = l2trace.Host(ip)\n        assert h.host == ip\n        assert h.ip == ip\n        assert h.hostname == ip\n\n    def test_hosts_are_equal(self, l2trace_topology):\n        host1 = l2trace.Host('10.99.99.99')\n        host2 = l2trace.Host('10.99.99.99')\n        assert host1 == host2\n\n    def test_host_with_host_argument_returns_equal_instance(self, l2trace_topology):\n        host1 = l2trace.Host('10.99.99.99')\n        host2 = l2trace.Host(host1)\n        assert host1 == host2\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestStartPath:\n    def test_start_path_for_foo_sw1_ip_should_be_on_vlan_10(self, l2trace_topology):\n        node = l2trace.get_start_path('10.0.0.11')\n        assert node is not None\n        assert node.vlan.vlan == 10\n        assert node.if_in is None\n        assert isinstance(node.host, Netbox)\n        assert node.host.sysname == 'foo-sw1.example.org'\n\n    def test_start_path_for_employee1_should_be_on_vlan_20(self, l2trace_topology):\n        ip = '10.0.20.10'\n        node = l2trace.get_start_path(ip)\n        assert node is not None\n        assert node.vlan.vlan == 20\n        assert node.if_in is None\n        assert isinstance(node.host, l2trace.Host)\n        assert node.host.hostname == ip\n        assert node.if_out is None\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestPath:\n    def test_path_for_foo_sw1_should_be_2_long(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        path = l2trace.get_path(foo_sw1.ip)\n        assert len(path) == 2\n\n    def test_path_for_foo_sw1_should_start_with_foo_sw1(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        path = l2trace.get_path(foo_sw1.ip)\n        assert path[0].host == foo_sw1\n\n    def test_path_for_foo_sw1_should_end_at_foo_gw(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        path = l2trace.get_path(foo_sw1.ip)\n        assert path[-1].host == foo_gw\n\n    def test_path_for_foo_sw1_should_be_on_vlan_10(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        path = l2trace.get_path(foo_sw1.ip)\n        assert path[0].vlan.vlan == 10\n        assert path[1].vlan.vlan == 10\n\n    def test_path_for_employee1_should_be_3_long(self, l2trace_topology):\n        path = l2trace.get_path('10.0.20.10')\n        assert len(path) == 3\n\n    def test_path_for_employee2_should_be_3_long(self, l2trace_topology):\n        path = l2trace.get_path('10.0.20.90')\n        assert len(path) == 3, path\n\n    def test_path_for_employee1_should_be_on_vlan_20(self, l2trace_topology):\n        path = l2trace.get_path('10.0.20.10')\n        assert path[0].vlan.vlan == 20\n        assert path[1].vlan.vlan == 20\n\n    def test_path_for_employee1_should_start_with_employee_1(self, l2trace_topology):\n        path = l2trace.get_path('10.0.20.10')\n        assert isinstance(path[0].host, l2trace.Host)\n\n    def test_path_for_employee1_should_end_with_foo_gw(self, l2trace_topology):\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        path = l2trace.get_path('10.0.20.10')\n        assert path[-1].host == foo_gw\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestTrace:\n    def test_make_rows_returns_generator(self, l2trace_topology):\n        tracequery = l2trace.L2TraceQuery('10.0.20.10', '')\n        tracequery.trace()\n        assert isinstance(tracequery.make_rows(), types.GeneratorType)\n\n    def test_make_rows_generates_result_rows(self, l2trace_topology):\n        tracequery = l2trace.L2TraceQuery('10.0.20.10', '')\n        tracequery.trace()\n        generator = tracequery.make_rows()\n        first = next(generator)\n        assert isinstance(first, l2trace.ResultRow)\n\n    def test_first_row_is_host_from(self, l2trace_topology):\n        ip = '10.0.20.10'\n        tracequery = l2trace.L2TraceQuery(ip, '')\n        tracequery.trace()\n        first_row = next(tracequery.make_rows())\n        assert first_row.sysname == ip\n\n    def test_first_and_last_rows_match_hosts(self, l2trace_topology):\n        ip1 = '10.0.20.10'\n        ip2 = '10.0.20.90'\n        tracequery = l2trace.L2TraceQuery(ip1, ip2)\n        tracequery.trace()\n        rows = list(tracequery.make_rows())\n        assert rows[0].sysname == ip1, tracequery.path\n        assert rows[-1].sysname == ip2, tracequery.path\n\n    def test_employee_path_passes_through_foo_sw1(self, l2trace_topology):\n        ip1 = '10.0.20.10'\n        ip2 = '10.0.20.90'\n        tracequery = l2trace.L2TraceQuery(ip1, ip2)\n        tracequery.trace()\n        rows = list(tracequery.make_rows())\n        assert len(rows) == 3, rows\n        switch_row = rows[1]\n        assert switch_row.sysname == 'foo-sw1.example.org'\n\n    def test_should_not_fail_on_invalid_hosts(self, l2trace_topology):\n        tracequery = l2trace.L2TraceQuery('s;dfl', \"923urfk';\")\n        tracequery.trace()\n        list(tracequery.make_rows())\n\n\n@patch('nav.web.l2trace.Host.get_host_by_name', new=Mock(return_value=None))\n@patch('nav.web.l2trace.Host.get_host_by_addr', new=Mock(return_value=None))\nclass TestJunction:\n    def test_find_junction_should_return_same_host(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        from_path, to_path = self._make_paths(foo_sw1, foo_gw)\n        (node1, node2) = l2trace.find_junction(from_path, to_path)\n        assert node1.host == node2.host\n\n    def test_find_junction_should_return_foo_sw1(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        from_path, to_path = self._make_paths(foo_sw1, foo_gw)\n        (node1, node2) = l2trace.find_junction(from_path, to_path)\n        assert node1.host == foo_sw1\n        assert node2.host == foo_sw1\n\n    def test_find_junction_should_return_nodes_from_paths(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        from_path, to_path = self._make_paths(foo_sw1, foo_gw)\n        (from_node, to_node) = l2trace.find_junction(from_path, to_path)\n        assert from_node in from_path\n        assert to_node in to_path\n\n    def test_join_at_junction_should_be_3_long(self, l2trace_topology):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        from_path, to_path = self._make_paths(foo_sw1, foo_gw)\n        new_path = l2trace.join_at_junction(from_path, to_path)\n        assert len(new_path) == 3, new_path\n\n    def test_joined_path_should_start_and_end_with_correct_hosts(\n        self, l2trace_topology\n    ):\n        foo_sw1 = Netbox.objects.get(sysname='foo-sw1.example.org')\n        foo_gw = Netbox.objects.get(sysname='foo-gw.example.org')\n        from_path, to_path = self._make_paths(foo_sw1, foo_gw)\n        new_path = l2trace.join_at_junction(from_path, to_path)\n        assert new_path[0] == from_path[0]\n        assert new_path[-1] == to_path[-1]\n\n    @staticmethod\n    def _make_paths(foo_sw1, foo_gw):\n        \"\"\"Helper to create test paths for junction tests.\"\"\"\n        Host = l2trace.Host\n        from_path = [\n            l2trace.PathNode(None, None, Host('10.0.20.10'), None),\n            l2trace.PathNode(None, None, foo_sw1, None),\n            l2trace.PathNode(None, None, foo_gw, None),\n        ]\n        to_path = [\n            l2trace.PathNode(None, None, foo_gw, None),\n            l2trace.PathNode(None, None, foo_sw1, None),\n            l2trace.PathNode(None, None, Host('10.0.20.90'), None),\n        ]\n        return from_path, to_path\n\n\n###\n#\n# Fixtures\n#\n###\n\n\n@pytest.fixture\ndef l2trace_topology(db):\n    \"\"\"Creates a complete network topology for l2trace testing.\n\n    Topology:\n    - foo-gw (router/GSW) at 10.0.0.1\n      - Interfaces: Vl10, Vl20, Vl30, Gi0/13 (trunk to foo-sw1)\n    - foo-sw1 (switch/SW) at 10.0.0.11\n      - Interfaces: Gi0/1 (trunk to foo-gw), Gi0/10, Gi0/11, Gi0/12\n\n    VLANs:\n    - scope: 10.0.0.0/8\n    - adminvlan (vlan 10): 10.0.0.0/24\n    - employeevlan (vlan 20): 10.0.20.0/24\n    - studentvlan (vlan 30): 10.0.30.0/24\n    \"\"\"\n    # Create location, room, organization (use get_or_create to avoid conflicts)\n    location, _ = Location.objects.get_or_create(id='somewhere')\n    room, _ = Room.objects.get_or_create(id='testroom', defaults={'location': location})\n    org, _ = Organization.objects.get_or_create(id='testorg')\n\n    # Create netboxes\n    foo_gw = Netbox(\n        ip='10.0.0.1',\n        sysname='foo-gw.example.org',\n        room=room,\n        organization=org,\n        category_id='GSW',\n        up='y',\n        up_since=datetime(2010, 10, 6, 11, 40, 36),\n    )\n    foo_gw.save()\n\n    foo_sw1 = Netbox(\n        ip='10.0.0.11',\n        sysname='foo-sw1.example.org',\n        room=room,\n        organization=org,\n        category_id='SW',\n        up='y',\n        up_since=datetime(2010, 10, 6, 11, 40, 36),\n    )\n    foo_sw1.save()\n\n    # Create VLANs\n    scope_vlan = Vlan(net_type_id='scope', net_ident='l2trace_scope')\n    scope_vlan.save()\n\n    admin_vlan = Vlan(vlan=10, net_type_id='lan', net_ident='adminvlan')\n    admin_vlan.save()\n\n    employee_vlan = Vlan(vlan=20, net_type_id='lan', net_ident='employeevlan')\n    employee_vlan.save()\n\n    student_vlan = Vlan(vlan=30, net_type_id='lan', net_ident='studentvlan')\n    student_vlan.save()\n\n    # Create prefixes (use get_or_create for scope prefix which may exist)\n    scope_prefix, _ = Prefix.objects.get_or_create(\n        net_address='10.0.0.0/8', defaults={'vlan': scope_vlan}\n    )\n\n    admin_prefix = Prefix(net_address='10.0.0.0/24', vlan=admin_vlan)\n    admin_prefix.save()\n\n    employee_prefix = Prefix(net_address='10.0.20.0/24', vlan=employee_vlan)\n    employee_prefix.save()\n\n    student_prefix = Prefix(net_address='10.0.30.0/24', vlan=student_vlan)\n    student_prefix.save()\n\n    # Create interfaces on foo-sw1\n    sw1_gi01 = Interface(\n        netbox=foo_sw1,\n        ifindex=1,\n        ifname='Gi0/1',\n        ifalias='o: foo-gw',\n        vlan=1,\n        trunk=True,\n        to_netbox=foo_gw,\n    )\n    sw1_gi01.save()\n\n    sw1_gi010 = Interface(\n        netbox=foo_sw1,\n        ifindex=10,\n        ifname='Gi0/10',\n        ifalias='Employee 1',\n        vlan=20,\n        trunk=False,\n    )\n    sw1_gi010.save()\n\n    sw1_gi011 = Interface(\n        netbox=foo_sw1,\n        ifindex=11,\n        ifname='Gi0/11',\n        ifalias='Employee 2',\n        vlan=20,\n        trunk=False,\n    )\n    sw1_gi011.save()\n\n    sw1_gi012 = Interface(\n        netbox=foo_sw1,\n        ifindex=12,\n        ifname='Gi0/12',\n        ifalias='Student 13',\n        vlan=30,\n        trunk=False,\n    )\n    sw1_gi012.save()\n\n    # Create interfaces on foo-gw\n    gw_vl10 = Interface(\n        netbox=foo_gw,\n        ifindex=10,\n        ifname='Vl10',\n        trunk=False,\n    )\n    gw_vl10.save()\n\n    gw_vl20 = Interface(\n        netbox=foo_gw,\n        ifindex=20,\n        ifname='Vl20',\n        trunk=False,\n    )\n    gw_vl20.save()\n\n    gw_vl30 = Interface(\n        netbox=foo_gw,\n        ifindex=30,\n        ifname='Vl30',\n        trunk=False,\n    )\n    gw_vl30.save()\n\n    gw_gi013 = Interface(\n        netbox=foo_gw,\n        ifindex=13,\n        ifname='Gi0/13',\n        ifalias='d: switch1',\n        vlan=1,\n        trunk=True,\n        to_netbox=foo_sw1,\n    )\n    gw_gi013.save()\n\n    # Create SwPortVlan entries (switch port to vlan mappings)\n    SwPortVlan(interface=sw1_gi010, vlan=employee_vlan, direction='n').save()\n    SwPortVlan(interface=gw_gi013, vlan=admin_vlan, direction='n').save()\n    SwPortVlan(interface=gw_gi013, vlan=employee_vlan, direction='n').save()\n    SwPortVlan(interface=sw1_gi01, vlan=admin_vlan, direction='o').save()\n    SwPortVlan(interface=sw1_gi01, vlan=employee_vlan, direction='o').save()\n    SwPortVlan(interface=sw1_gi011, vlan=employee_vlan, direction='n').save()\n    SwPortVlan(interface=gw_gi013, vlan=student_vlan, direction='n').save()\n    SwPortVlan(interface=sw1_gi01, vlan=student_vlan, direction='o').save()\n    SwPortVlan(interface=sw1_gi012, vlan=student_vlan, direction='d').save()\n\n    # Create GwPortPrefix entries (router interface to prefix mappings)\n    GwPortPrefix(\n        interface=gw_vl10, prefix=admin_prefix, gw_ip='10.0.1.1', virtual=False\n    ).save()\n    GwPortPrefix(\n        interface=gw_vl20, prefix=employee_prefix, gw_ip='10.0.20.1', virtual=False\n    ).save()\n    GwPortPrefix(\n        interface=gw_vl20, prefix=student_prefix, gw_ip='10.0.30.1', virtual=False\n    ).save()\n\n    # Create ARP entries\n    Arp(\n        netbox=foo_gw,\n        sysname='foo-gw.example.org',\n        ip='10.0.20.10',\n        mac='00:01:02:03:04:05',\n        start_time=datetime(2010, 10, 6, 11, 40, 36),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    Arp(\n        netbox=foo_gw,\n        sysname='foo-gw.example.org',\n        ip='10.0.20.90',\n        mac='00:01:02:03:04:90',\n        start_time=datetime(2010, 10, 6, 10, 13, 20),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    Arp(\n        netbox=foo_gw,\n        sysname='foo-gw.example.org',\n        ip='10.0.30.13',\n        mac='00:01:02:03:04:13',\n        start_time=datetime(2010, 10, 6, 9, 13, 20),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    # Create CAM entries\n    Cam(\n        netbox=foo_sw1,\n        sysname='foo-sw1.example.org',\n        ifindex=10,\n        module='',\n        port='Gi0/10',\n        mac='00:01:02:03:04:05',\n        start_time=datetime(2010, 10, 6, 11, 40, 36),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    Cam(\n        netbox=foo_sw1,\n        sysname='foo-sw1.example.org',\n        ifindex=11,\n        module='',\n        port='Gi0/11',\n        mac='00:01:02:03:04:90',\n        start_time=datetime(2010, 10, 6, 10, 13, 0),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    Cam(\n        netbox=foo_sw1,\n        sysname='foo-sw1.example.org',\n        ifindex=12,\n        module='',\n        port='Gi0/12',\n        mac='00:01:02:03:04:13',\n        start_time=datetime(2010, 10, 6, 9, 13, 20),\n        end_time=datetime(9999, 12, 31, 23, 59, 59, 999999),\n    ).save()\n\n    yield {\n        'foo_gw': foo_gw,\n        'foo_sw1': foo_sw1,\n        'admin_vlan': admin_vlan,\n        'employee_vlan': employee_vlan,\n        'student_vlan': student_vlan,\n    }\n"
  },
  {
    "path": "tests/integration/logs_test.py",
    "content": "from nav.logs import reopen_log_files\n\n\ndef test_reopen_log_files_runs_without_error():\n    \"\"\"tests syntax regressions, not actual functionality\"\"\"\n    assert reopen_log_files() is None\n"
  },
  {
    "path": "tests/integration/maintengine_test.py",
    "content": "from datetime import datetime, timedelta\n\nimport pytest\n\nfrom nav import maintengine\nfrom nav.models.msgmaint import MaintenanceTask, MaintenanceComponent\n\n\nclass TestCancelTasksWithoutComponents:\n    def test_it_should_cancel_active_empty_tasks(self, empty_task):\n        assert empty_task.state == MaintenanceTask.STATE_ACTIVE\n        maintengine.cancel_tasks_without_components()\n        empty_task.refresh_from_db()\n        assert empty_task.state == MaintenanceTask.STATE_CANCELED\n\n    def test_it_should_not_cancel_scheduled_empty_tasks(self, scheduled_empty_task):\n        assert scheduled_empty_task.state == MaintenanceTask.STATE_SCHEDULED\n        maintengine.cancel_tasks_without_components()\n        scheduled_empty_task.refresh_from_db()\n        assert scheduled_empty_task.state == MaintenanceTask.STATE_SCHEDULED\n\n    def test_it_should_not_cancel_nonempty_tasks(self, half_empty_task):\n        assert half_empty_task.state == MaintenanceTask.STATE_ACTIVE\n        maintengine.cancel_tasks_without_components()\n        half_empty_task.refresh_from_db()\n        assert half_empty_task.state == MaintenanceTask.STATE_ACTIVE\n\n\n@pytest.fixture\ndef empty_task(db):\n    task = MaintenanceTask(\n        start_time=datetime.now() - timedelta(minutes=30),\n        end_time=datetime.now() + timedelta(minutes=30),\n        description=\"Test task\",\n        state=MaintenanceTask.STATE_ACTIVE,\n    )\n    task.save()\n    component = MaintenanceComponent(\n        maintenance_task=task,\n        key=\"netbox\",\n        value=99999,\n    )\n    component.save()\n\n    yield task\n\n\n@pytest.fixture\ndef scheduled_empty_task(empty_task):\n    empty_task.state = MaintenanceTask.STATE_SCHEDULED\n    empty_task.start_time = datetime.now() + timedelta(minutes=30)\n    empty_task.end_time = datetime.now() + timedelta(minutes=60)\n    empty_task.save()\n    yield empty_task\n\n\n@pytest.fixture\ndef half_empty_task(empty_task, localhost):\n    component = MaintenanceComponent(maintenance_task=empty_task, component=localhost)\n    component.save()\n    yield empty_task\n"
  },
  {
    "path": "tests/integration/mibs/arista_vrf_mib_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport pytest\nimport pytest_twisted\n\nfrom nav.mibs.arista_vrf_mib import AristaVrfMib\n\n\nclass TestAristaVrfMib:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_vrf_states_should_return_expected_vrfs(self, snmp_agent_proxy):\n        snmp_agent_proxy.community = 'arista'\n        snmp_agent_proxy.open()\n        mib = AristaVrfMib(snmp_agent_proxy)\n\n        result = yield mib.get_vrf_states()\n        assert result == {\n            'IOT': 'active',\n            'MGMT': 'active',\n            'STUDENT': 'active',\n            'VR': 'active',\n        }\n\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_vrf_states_should_not_return_vrfs_with_nonmatching_states(\n        self, snmp_agent_proxy\n    ):\n        snmp_agent_proxy.community = 'arista'\n        snmp_agent_proxy.open()\n        mib = AristaVrfMib(snmp_agent_proxy)\n\n        result = yield mib.get_vrf_states(only='inactive')\n        assert result == {}\n"
  },
  {
    "path": "tests/integration/mibs/ip_mib_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport pytest\nimport pytest_twisted\n\nfrom nav.ip import IP\nfrom nav.mibs.ip_mib import MultiIpMib\nfrom nav.ipdevpoll.utils import get_arista_vrf_instances\n\n\nclass TestMultiIpMib:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_ifindex_ip_mac_mappings_should_find_mappings_across_arista_vrfs(\n        self, snmp_agent_proxy\n    ):\n        snmp_agent_proxy.community = 'arista'\n        snmp_agent_proxy.open()\n        instances = yield get_arista_vrf_instances(snmp_agent_proxy)\n        mib = MultiIpMib(snmp_agent_proxy, instances=instances)\n\n        result = yield mib.get_ifindex_ip_mac_mappings()\n        # assert at least one from each VRF with a mapping (main, STUDENT and MGMT)\n        assert (2000223, IP('fe80::a8aa:aaff:feaa:aaaa'), 'aa:aa:aa:aa:aa:aa') in result\n        assert (40, IP('10.103.0.0'), 'f4:cc:55:44:3d:29') in result\n        assert (50001, IP('10.101.1.12'), 'fc:bd:67:d0:fb:5d') in result\n"
  },
  {
    "path": "tests/integration/mibs/juniper_alarm_mib_test.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport pytest\nimport pytest_twisted\n\nfrom nav.mibs.juniper_alarm_mib import JuniperAlarmMib\n\n\nclass TestJuniperAlarmMib:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_alarm_count_should_get_the_correct_red_and_yellow_alarm_counts(\n        self, snmp_agent_proxy\n    ):\n        snmp_agent_proxy.community = 'juniper-alarm'\n        snmp_agent_proxy.open()\n        mib = JuniperAlarmMib(snmp_agent_proxy)\n\n        yellow_alarm_count = yield mib.get_yellow_alarm_count()\n        red_alarm_count = yield mib.get_red_alarm_count()\n\n        assert yellow_alarm_count == 0\n        assert red_alarm_count == 2\n\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_alarm_count_should_get_the_correct_red_and_yellow_alarm_counts_for_result_None(  # noqa: E501\n        self, snmp_agent_proxy\n    ):\n        snmp_agent_proxy.community = 'juniper-alarm-none'\n        snmp_agent_proxy.open()\n        mib = JuniperAlarmMib(snmp_agent_proxy)\n\n        yellow_alarm_count = yield mib.get_yellow_alarm_count()\n        red_alarm_count = yield mib.get_red_alarm_count()\n\n        assert yellow_alarm_count == 0\n        assert red_alarm_count == 0\n"
  },
  {
    "path": "tests/integration/mibs/memory_test.py",
    "content": "import pytest\nimport pytest_twisted\n\nfrom nav.mibs import cisco_memory_pool_mib, juniper_mib, netswitch_mib\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_juniper_get_memory_usage(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'juniper-memory'\n    snmp_agent_proxy.open()\n    mib = juniper_mib.JuniperMib(snmp_agent_proxy)\n    res = yield mib.get_memory_usage()\n\n    assert set(res.keys()) == {\n        '\"FPC: EX2200-48T-4G @ 0/*/*\"',\n        '\"FPC: EX2200-48T-4G @ 1/*/*\"',\n        '\"FPC: EX2200-48T-4G @ 2/*/*\"',\n        '\"Routing Engine 0\"',\n        '\"Routing Engine 1\"',\n    }\n    assert res['\"FPC: EX2200-48T-4G @ 0/*/*\"'] == (\n        pytest.approx(257698037.76),\n        pytest.approx(279172874.24),\n    )\n    assert res['\"FPC: EX2200-48T-4G @ 1/*/*\"'] == (\n        pytest.approx(204010946.56),\n        pytest.approx(332859965.44),\n    )\n    assert res['\"FPC: EX2200-48T-4G @ 2/*/*\"'] == (\n        pytest.approx(182536110.08),\n        pytest.approx(354334801.91999996),\n    )\n    assert res['\"Routing Engine 0\"'] == (\n        pytest.approx(257698037.76),\n        pytest.approx(279172874.24),\n    )\n    assert res['\"Routing Engine 1\"'] == (\n        pytest.approx(204010946.56),\n        pytest.approx(332859965.44),\n    )\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_hp_get_memory_usage(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'hp-memory'\n    snmp_agent_proxy.open()\n    mib = netswitch_mib.NetswitchMib(snmp_agent_proxy)\n    res = yield mib.get_memory_usage()\n    assert res == {'global1': (5103056, 12299872), 'local1': (5103056, 12299872)}\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_cisco_get_memory_usage(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'cisco-memory'\n    snmp_agent_proxy.open()\n    mib = cisco_memory_pool_mib.CiscoMemoryPoolMib(snmp_agent_proxy)\n    res = yield mib.get_memory_usage()\n    assert res == {\n        '\"Driver text\"': (40, 1048536),\n        '\"I/O\"': (1664884, 2521228),\n        '\"Processor\"': (10204640, 20055088),\n    }\n"
  },
  {
    "path": "tests/integration/mibs/sensors_test.py",
    "content": "import pytest\nimport pytest_twisted\n\nfrom nav.mibs import comet, comet_t3611, pdu2_mib, powernet_mib\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_apc_pdu(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'apc-pdu'\n    snmp_agent_proxy.open()\n    mib = powernet_mib.PowerNetMib(snmp_agent_proxy)\n    res = yield mib.get_all_sensors()\n    assert res == [\n        {\n            'description': 'PDU Phase 1 ampere load',\n            'internal_name': 'rPDULoadStatusLoad1',\n            'mib': 'PowerNet-MIB',\n            'name': 'PDU Phase 1',\n            'oid': '.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': 'amperes',\n        },\n        {\n            'description': 'PDU Bank 1 ampere load',\n            'internal_name': 'rPDULoadStatusLoad2',\n            'mib': 'PowerNet-MIB',\n            'name': 'PDU Bank 1',\n            'oid': '.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.2',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': 'amperes',\n        },\n        {\n            'description': 'PDU Bank 2 ampere load',\n            'internal_name': 'rPDULoadStatusLoad3',\n            'mib': 'PowerNet-MIB',\n            'name': 'PDU Bank 2',\n            'oid': '.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.3',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': 'amperes',\n        },\n    ]\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_P8652(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'P8652'\n    snmp_agent_proxy.open()\n    mib = comet.Comet(snmp_agent_proxy)\n    res = yield mib.get_all_sensors()\n    assert res == [\n        {\n            'description': 'Channel 1',\n            'internal_name': 'channel1',\n            'mib': 'P8652-MIB',\n            'name': 'Channel 1',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.1.3.0',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': 'celsius',\n        },\n        {\n            'description': 'Channel 2',\n            'internal_name': 'channel2',\n            'mib': 'P8652-MIB',\n            'name': 'Channel 2',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.2.3.0',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': '%RH',\n        },\n        {\n            'description': 'Channel 3',\n            'internal_name': 'channel3',\n            'mib': 'P8652-MIB',\n            'name': 'Channel 3',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.3.3.0',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': '',\n        },\n        {\n            'description': 'Channel 4',\n            'internal_name': 'channel4',\n            'mib': 'P8652-MIB',\n            'name': 'Channel 4',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.4.3.0',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': '',\n        },\n        {\n            'description': 'vann-gulv-gang',\n            'internal_name': 'bin1',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 1',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.6.3.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n        },\n        {\n            'description': 'vann-gulv-gang alarm',\n            'internal_name': 'bin1Alarm',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 1 Alarm',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.6.5.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n            'on_message': 'vann-gulv-gang alarm triggered',\n            'off_message': 'vann-gulv-gang alarm not triggered',\n            'on_state': 1,\n        },\n        {\n            'description': 'vann-gulv-A',\n            'internal_name': 'bin2',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 2',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.7.3.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n        },\n        {\n            'description': 'vann-gulv-A alarm',\n            'internal_name': 'bin2Alarm',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 2 Alarm',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.7.5.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n            'on_message': 'vann-gulv-A alarm triggered',\n            'off_message': 'vann-gulv-A alarm not triggered',\n            'on_state': 1,\n        },\n        {\n            'description': 'vann-lagerrom',\n            'internal_name': 'bin3',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 3',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.8.3.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n        },\n        {\n            'description': 'vann-lagerrom alarm',\n            'internal_name': 'bin3Alarm',\n            'mib': 'P8652-MIB',\n            'name': 'BIN 3 Alarm',\n            'oid': '.1.3.6.1.4.1.22626.1.5.2.8.5.0',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'boolean',\n            'on_message': 'vann-lagerrom alarm triggered',\n            'off_message': 'vann-lagerrom alarm not triggered',\n            'on_state': 1,\n        },\n    ]\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_given_a_P8652_then_T3611_MIB_should_not_crash(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'P8652'\n    snmp_agent_proxy.open()\n    mib = comet_t3611.CometT3611(snmp_agent_proxy)\n    res = yield mib.get_all_sensors()\n    assert res == []\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_T3611(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'T3611'\n    snmp_agent_proxy.open()\n    mib = comet_t3611.CometT3611(snmp_agent_proxy)\n    res = yield mib.get_all_sensors()\n    assert res == [\n        {\n            'oid': '.1.3.6.1.4.1.22626.1.2.1.1.0',\n            'unit_of_measurement': 'celsius',\n            'precision': 0,\n            'scale': None,\n            'description': 'temperature',\n            'name': 'temperature',\n            'internal_name': 'temperature sensor.example.com',\n            'mib': 'T3611-MIB',\n        },\n        {\n            'oid': '.1.3.6.1.4.1.22626.1.2.1.2.0',\n            'unit_of_measurement': 'percentRH',\n            'precision': 0,\n            'scale': None,\n            'description': 'humidity',\n            'name': 'humidity',\n            'internal_name': 'humidity sensor.example.com',\n            'mib': 'T3611-MIB',\n        },\n    ]\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_raritan_pdu(snmp_agent_proxy):\n    snmp_agent_proxy.community = 'raritan'\n    snmp_agent_proxy.open()\n    mib = pdu2_mib.PDU2Mib(snmp_agent_proxy)\n    res = yield mib.get_all_sensors()\n    res = sorted(res, key=lambda x: x['description'])\n    assert res == [\n        {\n            'description': 'pdu 1 inlet I1 activeEnergy',\n            'internal_name': 'pdu1_I1_activeEnergy',\n            'maximum': None,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 activeEnergy',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.8',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'watthours',\n        },\n        {\n            'description': 'pdu 1 inlet I1 activePower',\n            'internal_name': 'pdu1_I1_activePower',\n            'maximum': 10000.0,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 activePower',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.5',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'watts',\n        },\n        {\n            'description': 'pdu 1 inlet I1 apparentPower',\n            'internal_name': 'pdu1_I1_apparentPower',\n            'maximum': 10000.0,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 apparentPower',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.6',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'voltsamperes',\n        },\n        {\n            'description': 'pdu 1 inlet I1 powerFactor',\n            'internal_name': 'pdu1_I1_powerFactor',\n            'maximum': 1.0,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 powerFactor',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.7',\n            'precision': 2,\n            'scale': None,\n            'unit_of_measurement': 'unknown',\n        },\n        {\n            'description': 'pdu 1 inlet I1 rmsCurrent',\n            'internal_name': 'pdu1_I1_rmsCurrent',\n            'maximum': 32.0,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 rmsCurrent',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.1',\n            'precision': 1,\n            'scale': None,\n            'unit_of_measurement': 'amperes',\n        },\n        {\n            'description': 'pdu 1 inlet I1 rmsVoltage',\n            'internal_name': 'pdu1_I1_rmsVoltage',\n            'maximum': 264.0,\n            'mib': 'PDU2-MIB',\n            'minimum': 0.0,\n            'name': 'pdu 1 inlet I1 rmsVoltage',\n            'oid': '.1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.4',\n            'precision': 0,\n            'scale': None,\n            'unit_of_measurement': 'voltsAC',\n        },\n    ]\n"
  },
  {
    "path": "tests/integration/mibs/wlsx_systemext_mib_test.py",
    "content": "import pytest\nimport pytest_twisted\n\nfrom nav.mibs.wlsx_systemext_mib import WLSXSystemextMib\n\n\nclass TestWLSXSystemextMib:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_get_serial_number_should_return_expected_value(self, snmp_agent_proxy):\n        snmp_agent_proxy.community = 'aruba-wlc'  # using the arub-wlc.snmprec fixture\n        snmp_agent_proxy.open()\n        mib = WLSXSystemextMib(snmp_agent_proxy)\n\n        result = yield mib.get_serial_number()\n        assert result == \"BEEBLEBROX\"\n"
  },
  {
    "path": "tests/integration/models/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/models/account_test.py",
    "content": "import unittest\nfrom nav.models.profiles import Account\n\n\nclass AccountTest(unittest.TestCase):\n    def setUp(self):\n        self.admin_user = Account.objects.get(pk=Account.ADMIN_ACCOUNT)\n        self.default_user = Account.objects.get(pk=Account.DEFAULT_ACCOUNT)\n\n    def test_is_admin_returns_true_if_administrator(self):\n        self.assertTrue(self.admin_user.is_admin())\n\n    def test_is_admin_returns_false_if_default_account(self):\n        self.assertFalse(self.default_user.is_admin())\n"
  },
  {
    "path": "tests/integration/models/alert_test.py",
    "content": "from datetime import datetime\n\nfrom nav.alertengine.dispatchers import InvalidAlertAddressError\nfrom nav.models.profiles import (\n    AccountAlertQueue,\n    AlertAddress,\n    AlertProfile,\n    AlertSender,\n    AlertSubscription,\n    FilterGroup,\n    TimePeriod,\n)\nfrom nav.models.event import AlertQueue, Subsystem\n\nimport pytest\n\n\ndef test_delete_alert_subscription(db, alert, alertsub, account_alert_queue):\n    alertsub.delete()\n    assert not AccountAlertQueue.objects.filter(pk=account_alert_queue.pk).exists()\n    assert not AlertQueue.objects.filter(pk=alert.pk).exists()\n\n\ndef test_sending_alert_to_alert_address_with_empty_address_will_raise_error(\n    db, alert_address, alert, alertsub\n):\n    with pytest.raises(InvalidAlertAddressError):\n        alert_address.send(alert, alertsub)\n\n\ndef test_sending_alert_to_alert_address_with_invalid_address_will_raise_error(\n    db, alert_address, alert, alertsub\n):\n    alert_address.address = \"abc\"\n    alert_address.save()\n    with pytest.raises(InvalidAlertAddressError):\n        alert_address.send(alert, alertsub)\n\n\ndef test_sending_alert_to_alert_address_with_invalid_address_will_delete_alert_and_fail(\n    db, alert, account_alert_queue\n):\n    assert not account_alert_queue.send()\n    assert not AlertQueue.objects.filter(pk=alert.pk).exists()\n\n\n@pytest.fixture\ndef alert_address(db, admin_account):\n    addr = AlertAddress(\n        account=admin_account,\n        type=AlertSender.objects.get(name=AlertSender.SMS),\n    )\n    addr.save()\n    yield addr\n    if addr.pk:\n        addr.delete()\n\n\n@pytest.fixture\ndef alert_profile(db, admin_account):\n    profile = AlertProfile(account=admin_account)\n    profile.save()\n    yield profile\n    if profile.pk:\n        profile.delete()\n\n\n@pytest.fixture\ndef time_period(db, alert_profile):\n    time_period = TimePeriod(profile=alert_profile)\n    time_period.save()\n    yield time_period\n    if time_period.pk:\n        time_period.delete()\n\n\n@pytest.fixture\ndef alertsub(db, alert_address, time_period):\n    alertsub = AlertSubscription(\n        alert_address=alert_address,\n        time_period=time_period,\n        filter_group=FilterGroup.objects.first(),\n    )\n    alertsub.save()\n    yield alertsub\n    if alertsub.pk:\n        alertsub.delete()\n\n\n@pytest.fixture\ndef alert(db):\n    alert = AlertQueue(\n        source=Subsystem.objects.first(), time=datetime.now(), value=1, severity=3\n    )\n    alert.save()\n    yield alert\n    if alert.pk:\n        alert.delete()\n\n\n@pytest.fixture\ndef account_alert_queue(db, alert, alertsub):\n    account_queue = AccountAlertQueue(alert=alert, subscription=alertsub)\n    account_queue.save()\n    yield account_queue\n    if account_queue.pk:\n        account_queue.delete()\n"
  },
  {
    "path": "tests/integration/models/alerthistvarmap_test.py",
    "content": "from datetime import datetime\n\nfrom nav.models.event import EventQueue, AlertHistory\nimport pytest\n\n\ndef test_plain_alerthist_can_be_posted(simple_alerthist):\n    simple_alerthist.save()\n    assert simple_alerthist.id > 0\n\n\ndef test_alerthist_varmap_can_be_saved(simple_alerthist):\n    simple_alerthist.save()\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'startvalue'},\n        EventQueue.STATE_END: {'test': 'endvalue'},\n    }\n\n\ndef test_alerthist_varmap_can_be_retrieved_after_save(simple_alerthist):\n    simple_alerthist.save()\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'startvalue'},\n        EventQueue.STATE_END: {'test': 'endvalue'},\n    }\n    hist_copy = AlertHistory.objects.get(pk=simple_alerthist.pk)\n    assert EventQueue.STATE_START in hist_copy.varmap\n    assert EventQueue.STATE_END in hist_copy.varmap\n    assert 'test' in hist_copy.varmap[EventQueue.STATE_START]\n    assert hist_copy.varmap[EventQueue.STATE_START]['test'] == 'startvalue'\n\n\ndef test_alerthist_varmap_can_be_replaced(simple_alerthist):\n    simple_alerthist.save()\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'startvalue'},\n        EventQueue.STATE_END: {'test': 'endvalue'},\n    }\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'thingamabob': 'another startvalue'},\n        EventQueue.STATE_END: {'thingamabob': 'another endvalue'},\n    }\n\n\ndef test_alerthist_varmap_single_key_can_be_updated(simple_alerthist):\n    simple_alerthist.save()\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'Johann Gambolputty'},\n        EventQueue.STATE_END: {'test': 'von Ulm'},\n    }\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'Johann Gambolputty'},\n        EventQueue.STATE_END: {'test': 'de von Ausfern-schplenden...'},\n    }\n\n\ndef test_alerthist_varmap_single_key_can_be_updated_after_reload(simple_alerthist):\n    simple_alerthist.save()\n    simple_alerthist.varmap = {\n        EventQueue.STATE_START: {'test': 'Johann Gambolputty'},\n        EventQueue.STATE_END: {'test': 'von Ulm'},\n    }\n    hist_copy = AlertHistory.objects.get(pk=simple_alerthist.pk)\n    hist_copy.varmap = {\n        EventQueue.STATE_START: {'test': 'Johann Gambolputty'},\n        EventQueue.STATE_END: {'test': 'de von Ausfern-schplenden...'},\n    }\n\n\n@pytest.fixture\ndef simple_alerthist():\n    hist = AlertHistory(\n        source_id='ipdevpoll',\n        event_type_id='info',\n        start_time=datetime.now(),\n        value=0,\n        severity=3,\n    )\n    yield hist\n    if hist.pk:\n        hist.delete()\n"
  },
  {
    "path": "tests/integration/models/eventvarmap_test.py",
    "content": "from nav.models.event import EventQueue\nimport pytest\n\n\ndef test_plain_event_can_be_posted(simple_event):\n    simple_event.save()\n    assert simple_event.id > 0\n\n\ndef test_event_varmap_can_be_saved(simple_event):\n    simple_event.save()\n    simple_event.varmap = {'test': 'value'}\n\n\ndef test_event_varmap_can_be_retrieved_after_save(simple_event):\n    simple_event.save()\n    simple_event.varmap = {'test': 'value'}\n    event_copy = EventQueue.objects.get(pk=simple_event.pk)\n    assert 'test' in event_copy.varmap\n    assert event_copy.varmap['test'] == 'value'\n\n\ndef test_event_varmap_can_be_replaced(simple_event):\n    simple_event.save()\n    simple_event.varmap = {'test': 'value'}\n    simple_event.varmap = {'something': 'else'}\n\n\ndef test_event_varmap_single_key_can_be_updated(simple_event):\n    simple_event.save()\n    simple_event.varmap = {'test': 'value'}\n    simple_event.varmap = {'test': 'new value'}\n\n\ndef test_event_varmap_single_key_can_be_updated_after_reload(simple_event):\n    simple_event.save()\n    simple_event.varmap = {'test': 'value'}\n    event_copy = EventQueue.objects.get(pk=simple_event.pk)\n    event_copy.varmap = {'test': 'new value'}\n\n\n@pytest.fixture\ndef simple_event():\n    event = EventQueue(\n        source_id='ipdevpoll', target_id='eventEngine', event_type_id='info'\n    )\n    yield event\n    if event.pk:\n        event.delete()\n"
  },
  {
    "path": "tests/integration/models/fields_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom datetime import datetime as dt\n\n\nfrom nav.tests.cases import DjangoTransactionTestCase\nfrom nav.models.msgmaint import MaintenanceComponent, MaintenanceTask\nfrom nav.models.logger import ErrorError\n\n\nclass LegacyGenericForeignKeyTest(DjangoTransactionTestCase):\n    def setUp(self):\n        self.task = MaintenanceTask(\n            start_time=dt(2018, 1, 1),\n            end_time=dt(2018, 12, 1),\n            description='blbl',\n            author='barbar',\n            state=MaintenanceTask.STATE_ACTIVE,\n        )\n        self.ee1 = ErrorError(message='a message')\n        self.ee1.save()\n        self.task.save()\n\n    def test_save_model_with_lgfk(self):\n        mc = MaintenanceComponent(\n            maintenance_task=self.task,\n            key=self.ee1._meta.db_table,\n            value=str(self.ee1.id),\n        )\n        mc.save()\n        self.assertEqual(mc.key, self.ee1._meta.db_table)\n        self.assertEqual(mc.value, str(self.ee1.id))\n\n    def test_get_via_lgfk(self):\n        mc = MaintenanceComponent(\n            maintenance_task=self.task,\n            key=self.ee1._meta.db_table,\n            value=str(self.ee1.id),\n        )\n        mc.save()\n        self.assertEqual(mc.component, self.ee1)\n\n    def test_set_via_lgfk(self):\n        ee2 = ErrorError(message='another message')\n        ee2.save()\n        mc = MaintenanceComponent(\n            maintenance_task=self.task,\n            key=self.ee1._meta.db_table,\n            value=str(self.ee1.id),\n        )\n        mc.component = ee2\n        mc.save()\n        self.assertEqual(mc.component, ee2)\n"
  },
  {
    "path": "tests/integration/models/model_test.py",
    "content": "\"\"\"\nQuery DB using Django models test\n\nIntended purpose is to catch obvious omissions in DB state or the Django models\nthemselves.\n\"\"\"\n\nimport os\n\nfrom django.db import connection\n\nimport django.apps\n\nget_models = django.apps.apps.get_models\ndel django.apps\n\n\nimport pytest\n\nimport nav.models\n\n# Ensure that all modules are loaded\nfor file_name in os.listdir(os.path.dirname(nav.models.__file__)):\n    if file_name.endswith('.py') and not file_name.startswith('__init__'):\n        module_name = file_name.removesuffix('.py')\n        __import__('nav.models.%s' % module_name)\n\n\n@pytest.mark.parametrize(\"model\", get_models())\ndef test_django_model(model):\n    connection.close()  # Ensure clean connection\n    list(model.objects.all()[:5])\n"
  },
  {
    "path": "tests/integration/models/netbox_test.py",
    "content": "from nav.models.manage import (\n    NetboxEntity,\n    Netbox,\n    Device,\n)\n\n\ndef test_netbox_should_be_annotated_with_chassis_serial(db, localhost):\n    \"\"\"Mainly, this verifies that regressions haven't rendered the raw SQL used to\n    annotate netboxes with serial numbers incompatible with the current schema.\n    \"\"\"\n    for index, serial in enumerate([\"first\", \"second\"]):\n        device = Device(serial=serial)\n        device.save()\n        chassis = NetboxEntity(\n            netbox=localhost,\n            device=device,\n            index=index,\n            physical_class=NetboxEntity.CLASS_CHASSIS,\n        )\n        chassis.save()\n\n    netbox = Netbox.objects.with_chassis_serials().filter(id=localhost.id)[0]\n    assert netbox.chassis_serial == \"first\"\n\n\ndef test_netbox_mac_addresses_should_return_distinct_set_of_addresses(\n    db, localhost: Netbox\n):\n    mac = \"00:c0:ff:ee:ba:be\"\n    localhost.info_set.create(key=\"lldp\", variable=\"chassis_mac\", value=mac)\n    localhost.info_set.create(key=\"bridge_info\", variable=\"base_address\", value=mac)\n\n    assert localhost.mac_addresses == set([mac])\n"
  },
  {
    "path": "tests/integration/models/netbox_type_test.py",
    "content": "from nav.enterprise.ids import VENDOR_ID_H3C\nfrom nav.models.manage import NetboxType\n\n\nclass TestNetboxType(object):\n    def test_get_enterprise_id_returns_correctly_for_sysobjectid_with_leading_period(\n        self,\n    ):\n        sysobjectid = \".1.3.6.1.4.1.25506.1.517\"\n        netbox_type = NetboxType(\n            vendor_id=\"hp\",\n            name=\"A5120-48P-EI-2\",\n            description=\"HP Procurve A5120 V2\",\n            sysobjectid=sysobjectid,\n        )\n\n        assert netbox_type.get_enterprise_id() == VENDOR_ID_H3C\n\n    def test_get_enterprise_id_returns_correctly_for_sysobjectid_without_leading_period(\n        self,\n    ):\n        sysobjectid = \"1.3.6.1.4.1.25506.1.517\"\n        netbox_type = NetboxType(\n            vendor_id=\"hp\",\n            name=\"A5120-48P-EI-2\",\n            description=\"HP Procurve A5120 V2\",\n            sysobjectid=sysobjectid,\n        )\n\n        assert netbox_type.get_enterprise_id() == VENDOR_ID_H3C\n\n    def test_get_enterprise_id_returns_none_for_sysobjectid_of_wrong_format(\n        self,\n    ):\n        sysobjectid = \"abc\"\n        netbox_type = NetboxType(\n            vendor_id=\"hp\",\n            name=\"A5120-48P-EI-2\",\n            description=\"HP Procurve A5120 V2\",\n            sysobjectid=sysobjectid,\n        )\n\n        assert netbox_type.get_enterprise_id() is None\n"
  },
  {
    "path": "tests/integration/models/oui_test.py",
    "content": "import pytest\n\nfrom django.db.utils import IntegrityError\n\nfrom nav.models.oui import OUI\n\n\nclass TestOUI:\n    def test_string_representation_should_match_oui(self, valid_oui):\n        assert str(valid_oui) == valid_oui.oui\n\n    def test_save_should_raise_error_if_last_3_bytes_are_not_zero(self, invalid_oui):\n        with pytest.raises(IntegrityError):\n            invalid_oui.save()\n\n    def test_save_should_allow_oui_if_last_3_bytes_are_zero(self, valid_oui):\n        valid_oui.save()\n\n\n@pytest.fixture()\ndef valid_oui():\n    oui = \"aa:bb:cc:00:00:00\"\n    instance = OUI(oui=oui, vendor=\"myvendor\")\n    yield instance\n    instance.delete()\n\n\n@pytest.fixture()\ndef invalid_oui():\n    oui = \"aa:bb:cc:dd:ee:ff\"\n    instance = OUI(oui=oui, vendor=\"myvendor\")\n    yield instance\n    instance.delete()\n"
  },
  {
    "path": "tests/integration/models/rack_test.py",
    "content": "import pytest\n\nfrom nav.models.manage import Sensor\nfrom nav.models.rack import Rack, SensorRackItem\n\n\nclass TestRack:\n    def test_that_rack_configuration_can_be_saved_without_error(self, test_rack):\n        test_rack.save()\n        assert test_rack.id\n\n    def test_that_rack_configuration_is_a_dict(self, test_rack):\n        test_rack.save()\n        rack = Rack.objects.get(id=test_rack.id)\n        print(repr(Rack._configuration))\n        assert isinstance(rack._configuration, dict)\n\n    def test_that_rack_configuration_can_be_loaded_without_error(self, test_rack):\n        test_rack.save()\n        rack = Rack.objects.get(id=test_rack.id)\n        assert rack.configuration\n\n\n@pytest.fixture\ndef test_rack(test_sensor):\n    rack = Rack(room=test_sensor.netbox.room, rackname=\"Rack 1\")\n    item = SensorRackItem(test_sensor)\n    rack.add_left_item(item)\n    return rack\n\n\n@pytest.fixture\ndef test_sensor(localhost):\n    sensor = Sensor(\n        netbox=localhost, oid=\"1.2.3\", unit_of_measurement=Sensor.UNIT_CELSIUS\n    )\n    sensor.save()\n    yield sensor\n    sensor.delete()\n"
  },
  {
    "path": "tests/integration/networkexplorer_test.py",
    "content": "from unittest import TestCase\n\nimport pytest\nfrom django.test.client import RequestFactory\n\nfrom nav.models.manage import Room\nfrom nav.web.networkexplorer import search\nfrom nav.web.networkexplorer.forms import NetworkSearchForm\nfrom nav.web.networkexplorer.views import (\n    IndexView,\n    RouterJSONView,\n    SearchView,\n)\n\n\nclass NetworkExplorerSearchTest(TestCase):\n    \"\"\"Tests that the various network explorer search functions don't raise\n    database exceptions.\n\n    Will not cover all code paths on an empty database.\n\n    \"\"\"\n\n    def test_search_expand_swport(self):\n        search.search_expand_swport(1)\n\n    def test_search_expand_netbox(self):\n        search.search_expand_netbox(1)\n\n    def test_search_expand_sysname(self):\n        search.search_expand_sysname('foo-gw.example.org')\n\n    def test_search_expand_mac(self):\n        search.search_expand_mac('00:12:34:56:78:90')\n\n    def test_sysname_search(self):\n        search.sysname_search('foo-gw.example.org')\n\n    def test_ip_search(self):\n        search.ip_search('10.0.1')\n\n    def test_ip_search_exact(self):\n        search.ip_search('10.0.1.0', exact=True)\n\n    def test_portname_search(self):\n        search.portname_search('KX182')\n\n    def test_portname_search_exact(self):\n        search.portname_search('KX182', exact=True)\n\n    def test_room_search(self):\n        search.room_search('myroom')\n\n    def test_room_search_exact(self):\n        search.room_search('myroom', exact=True)\n\n    def test_room_alias_search(self):\n        search.room_search('alias')\n\n    def test_room_alias_search_exact(self):\n        search.room_search('roomalias', exact=True)\n\n    def test_mac_search(self):\n        search.mac_search('00:12:34:56:78:90')\n\n    def test_vlan_search(self):\n        search.vlan_search('20')\n\n    def test_vlan_search_exact(self):\n        search.vlan_search('20', exact=True)\n\n\nclass TestDataMixin(object):\n    valid_data = {\n        'query_0': 'somequery',\n        'query_1': 'sysname',\n    }\n    invalid_data = {\n        'query_0': 'somequery',\n        # Missing query type\n    }\n\n\nclass ViewsTest(TestDataMixin, TestCase):\n    def setUp(self):\n        self.factory = RequestFactory()\n        self.url_root = '/networkexplorer/'\n\n    def test_index_view(self):\n        request = self.factory.get(self.url_root)\n        response = IndexView.as_view()(request)\n\n        self.assertEqual(response.status_code, 200)\n\n    def test_router_json_view(self):\n        request = self.factory.get(self.url_root + 'routers/')\n        response = RouterJSONView.as_view()(request)\n\n        self.assertEqual(response.status_code, 200)\n\n    def test_search_view_with_valid_query(self):\n        request = self.factory.get(\n            self.url_root + 'search/',\n            self.valid_data,\n        )\n        response = SearchView.as_view()(request)\n        content = response.content.decode('utf-8')\n\n        self.assertEqual(response.status_code, 200)\n        self.assertTrue('routers' in content)\n        self.assertTrue('gwports' in content)\n        self.assertTrue('swports' in content)\n\n    def test_search_view_with_invalid_query(self):\n        request = self.factory.get(\n            self.url_root + 'search/',\n            self.invalid_data,\n        )\n        response = SearchView.as_view()(request)\n        content = response.content.decode('utf-8')\n\n        self.assertEqual(response.status_code, 400)\n        self.assertFalse('routers' in content)\n        self.assertFalse('gwports' in content)\n        self.assertFalse('swports' in content)\n\n    def test_search_view_will_return_status_400_on_invalid_exact_ip_search(self):\n        request = self.factory.get(\n            self.url_root + 'search/',\n            {\n                'query_0': 'invalid',\n                'query_1': 'ip',\n                'exact_results': 'on',\n            },\n        )\n        response = SearchView.as_view()(request)\n        content = response.content.decode('utf-8')\n\n        assert response.status_code == 400\n        assert \"Invalid IP address\" in content\n\n\nclass FormsTest(TestDataMixin, TestCase):\n    def test_search_form_with_valid_data_is_valid(self):\n        valid_form = NetworkSearchForm(self.valid_data)\n\n        self.assertTrue(valid_form.is_valid(), msg='Valid form failed validaion')\n\n    def test_search_form_with_missing_argument_is_invalid(self):\n        invalid_form = NetworkSearchForm(self.invalid_data)\n\n        self.assertFalse(invalid_form.is_valid(), msg='Invalid form passed validation')\n\n    def test_search_form_with_invalid_ip_for_exact_search_is_invalid(self):\n        invalid_ip_form = NetworkSearchForm(\n            {\n                \"query_0\": \"invalid_ip\",\n                \"query_1\": \"ip\",\n                \"exact_results\": True,\n            }\n        )\n\n        self.assertFalse(\n            invalid_ip_form.is_valid(), msg=\"Invalid IP form passed validation\"\n        )\n\n\n@pytest.fixture\ndef room_with_alias(db):\n    room = Room.objects.create(\n        id=\"testroom\", location_id=\"mylocation\", aliases=[\"roomalias\"]\n    )\n\n    yield room\n"
  },
  {
    "path": "tests/integration/pping_test.py",
    "content": "\"\"\"\nvarious pping integration tests\n\"\"\"\n\nimport os\nimport getpass\nfrom shutil import which\nfrom subprocess import STDOUT, check_output, CalledProcessError\n\nimport pytest\n\nfrom nav.models.manage import Netbox, NetboxProfile\nfrom nav.models.event import EventQueue\nfrom nav.config import find_config_file\n\nTIMEOUT_COMMAND_LINE = \"/usr/bin/timeout\"\n\n\nBINDIR = './python/nav/bin'\n\n\n#\n# These helpers need to be defined first because they are used in test skip rules\n#\ndef can_be_root():\n    try:\n        get_root_method()\n        return True\n    except (OSError, AssertionError):\n        return False\n\n\ndef get_root_method():\n    if os.geteuid() == 0:\n        return []\n    elif os.system(\"sudo -nv\") == 0:\n        return [\"sudo\", \"-E\"]\n    elif os.system(\"gosu root true\") == 0:\n        return [\"gosu\", \"root\"]\n    else:\n        assert False, \"cannot become root\"\n\n\ndef timeout_command_line_program_exists():\n    return os.access(TIMEOUT_COMMAND_LINE, os.X_OK)\n\n\n#\n# Actual tests begin here\n#\n@pytest.mark.timeout(20)\n@pytest.mark.skipif(\n    not timeout_command_line_program_exists(),\n    reason=\"{} is not available\".format(TIMEOUT_COMMAND_LINE),\n)\n@pytest.mark.skipif(\n    not can_be_root(), reason=\"pping can only be tested with root privileges\"\n)\ndef test_pping_localhost_should_work(localhost, pping_test_config):\n    output = get_pping_output()\n    assert \"hosts checked\" in output\n    assert (\n        \"{sysname} ({ip}) marked as down\".format(\n            sysname=localhost.sysname, ip=localhost.ip\n        )\n        not in output\n    )\n\n\n@pytest.mark.timeout(20)\n@pytest.mark.skipif(\n    not timeout_command_line_program_exists(),\n    reason=\"{} is not available\".format(TIMEOUT_COMMAND_LINE),\n)\n@pytest.mark.skipif(\n    not can_be_root(), reason=\"pping can only be tested with root privileges\"\n)\ndef test_pping_nonavailable_host_should_fail(\n    host_expected_to_be_down, pping_test_config\n):\n    expected = \"{sysname} ({ip}) marked as down\".format(\n        sysname=host_expected_to_be_down.sysname, ip=host_expected_to_be_down.ip\n    )\n    output = get_pping_output()\n    assert expected in output\n\n\n@pytest.mark.timeout(20)\n@pytest.mark.skipif(\n    not timeout_command_line_program_exists(),\n    reason=\"{} is not available\".format(TIMEOUT_COMMAND_LINE),\n)\n@pytest.mark.skipif(\n    not can_be_root(), reason=\"pping can only be tested with root privileges\"\n)\ndef test_pping_should_post_event_when_host_is_unreachable(\n    host_expected_to_be_down, pping_test_config\n):\n    get_pping_output()\n    assert EventQueue.objects.filter(\n        netbox=host_expected_to_be_down,\n        event_type_id='boxState',\n        state=EventQueue.STATE_START,\n    ), \"The expected boxState start event was not found on the event queue\"\n\n\n########################\n#                      #\n# fixtures and helpers #\n#                      #\n########################\n\n\ndef get_pping_output(timeout=5):\n    \"\"\"\n    Runs pping in foreground mode, kills it after timeout seconds and\n    returns the combined stdout+stderr output from the process.\n\n    Also asserts that pping shouldn't unexpectedly exit with a zero exitcode.\n    \"\"\"\n    pping = which(\"pping\")\n    assert pping, \"Cannot find pping in PATH\"\n    cmd = get_root_method() + [TIMEOUT_COMMAND_LINE, str(timeout), pping, \"-f\"]\n    try:\n        output = check_output(cmd, stderr=STDOUT)\n    except CalledProcessError as error:\n        if error.returncode == 124:  # timeout\n            # this is the normal case, since we need to kill pping after the timeout\n            print(error.output.decode('utf-8'))\n            return error.output.decode('utf-8')\n        print(error.output.decode('utf-8'))\n        raise\n    else:\n        print(output)\n        assert False, \"pping exited unexpectedly\"\n\n\n@pytest.fixture()\ndef host_expected_to_be_down(management_profile):\n    box = Netbox(\n        ip='10.254.254.254',\n        sysname='downhost.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SRV',\n    )\n    box.save()\n    NetboxProfile(netbox=box, profile=management_profile).save()\n    yield box\n    print(\"teardown test device\")\n    box.delete()\n\n\n@pytest.fixture(scope=\"module\")\ndef pping_test_config():\n    print(\"placing temporary pping config\")\n    configfile = find_config_file(\"pping.conf\")\n    tmpfile = configfile + '.bak'\n    os.rename(configfile, tmpfile)\n    with open(configfile, \"w\") as config:\n        config.write(\n            \"\"\"\nuser = {user}\ncheckinterval = 2\npacketsize = 64\ntimeout = 1\nnrping = 2\ndelay = 2\n\"\"\".format(user=getpass.getuser())\n        )\n    yield configfile\n    print(\"restoring ping config\")\n    os.remove(configfile)\n    os.rename(tmpfile, configfile)\n"
  },
  {
    "path": "tests/integration/querysets_test.py",
    "content": "import datetime as dt\n\nfrom django.test import TestCase\n\nfrom nav.models.event import AlertHistory\nfrom nav.models.event import AlertHistoryVariable\nfrom nav.models.event import EventType\nfrom nav.models.event import Subsystem\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Netbox\nfrom nav.models.manage import Category\nfrom nav.models.manage import Room\nfrom nav.models.manage import Organization\n\n\nclass NetboxQuerysetTest(TestCase):\n    def setUp(self):\n        # Some rows have already been created\n        _netbox_data = {\n            \"room\": Room.objects.get(id=\"myroom\"),\n            \"organization\": Organization.objects.get(id=\"myorg\"),\n            \"category\": Category.objects.get(id=\"SW\"),\n        }\n        TEST_NETBOX_DATA = [\n            dict(sysname=\"foo.bar.com\", ip=\"158.38.152.169\", **_netbox_data),\n            dict(sysname=\"bar.bar.com\", ip=\"158.38.152.231\", **_netbox_data),\n            dict(sysname=\"spam.bar.com\", ip=\"158.38.152.9\", **_netbox_data),\n        ]\n\n        self.netboxes = [\n            Netbox.objects.create(**netbox_data) for netbox_data in TEST_NETBOX_DATA\n        ]\n        ah = AlertHistory.objects.create(\n            source=Subsystem.objects.first(),\n            netbox=self.netboxes[2],\n            event_type=EventType.objects.get(id=\"maintenanceState\"),\n            start_time=dt.datetime.now(),\n            value=0,\n            end_time=INFINITY,  # UNRESOLVED\n            severity=3,\n        )\n        AlertHistoryVariable.objects.create(alert_history=ah, variable=\"netbox\")\n\n    def test_on_maintenance_true(self):\n        on_maintenance = Netbox.objects.on_maintenance(True)\n        self.assertEqual(on_maintenance.count(), 1)\n        self.assertEqual(on_maintenance[0], self.netboxes[2])\n\n    def test_on_maintenance_false(self):\n        # A netbox not used in this test has already been created\n        not_on_maintenance = Netbox.objects.on_maintenance(False)\n        self.assertIn(self.netboxes[0], not_on_maintenance)\n        self.assertIn(self.netboxes[1], not_on_maintenance)\n        self.assertNotIn(self.netboxes[2], not_on_maintenance)\n"
  },
  {
    "path": "tests/integration/report/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/report/generator_test.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\nTest report generators for basic errors.\n\nThese tests simply enumerate all known reports and ensure that the dbresult is\nerror free. This only ensures that the SQL can be run, no further verification\nis performed.\n\"\"\"\n\nimport pytest\n\nfrom django.http import QueryDict\nfrom django.urls import reverse\n\nfrom nav import db\nfrom nav.report.generator import ReportList, Generator\nfrom nav.config import find_config_dir, list_config_files_from_dir\n\nfrom os.path import join\n\nconfig_files_dir = join(find_config_dir() or \"\", \"report\", \"report.conf.d/\")\n\n\ndef report_list():\n    result = ReportList(list_config_files_from_dir(config_files_dir))\n    return [report.id for report in result.reports]\n\n\n@pytest.mark.parametrize(\"report_name\", report_list())\ndef test_report(report_name):\n    # uri = 'http://example.com/report/%s/' % report_name\n    uri = QueryDict('').copy()\n    db.closeConnections()  # Ensure clean connection for each test\n\n    generator = Generator()\n    report, contents, neg, operator, adv, config, dbresult = generator.make_report(\n        report_name, list_config_files_from_dir(config_files_dir), uri, None, None\n    )\n\n    assert dbresult, 'dbresult is None'\n    assert not dbresult.error, dbresult.error + '\\n' + dbresult.sql\n\n\ndef test_non_ascii_filter_should_work(client):\n    url = reverse('report-by-name', kwargs={'report_name': 'room'})\n    url = \"{}?roomid=æøå\".format(url)\n    response = client.get(url, follow=True)\n    assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/seeddb_test.py",
    "content": "import io\nfrom zipfile import ZipFile\n\nfrom django.urls import reverse\nfrom django.http import Http404\nfrom django.test.client import RequestFactory\nfrom mock import MagicMock\n\nfrom django.utils.encoding import smart_str\nfrom nav.models.manage import Interface, Netbox, NetboxInfo, Room\nfrom nav.models.cabling import Cabling, Patch\nfrom nav.web.auth.utils import set_account\nfrom nav.web.seeddb.page.netbox.edit import netbox_edit, log_netbox_change\nfrom nav.web.seeddb.utils.delete import dependencies\n\nimport pytest\n\n\n@pytest.mark.parametrize(\n    \"endpoint\",\n    [\n        'seeddb-room-edit',\n        'seeddb-room-delete',\n        'seeddb-location-edit',\n        'seeddb-location-delete',\n        'seeddb-organization-edit',\n        'seeddb-organization-delete',\n        'seeddb-usage-edit',\n        'seeddb-usage-delete',\n        'seeddb-netboxgroup-edit',\n        'seeddb-netboxgroup-delete',\n    ],\n)\ndef test_urls_should_allow_name_with_slashes(db, endpoint):\n    assert reverse(endpoint, args=(\"TEST/SLASH\",))\n\n\ndef test_editing_deleted_netboxes_should_raise_404(admin_account):\n    netboxid = 666  # Assuming no such netbox exists in test data set!\n    factory = RequestFactory()\n    url = reverse('seeddb-netbox-edit', args=(netboxid,))\n    request = factory.get(url)\n    request.session = MagicMock()\n    set_account(request, admin_account, cycle_session_id=False)\n\n    with pytest.raises(Http404):\n        netbox_edit(request, netboxid)\n\n\ndef test_adding_netbox_with_invalid_ip_should_fail(db, client):\n    url = reverse('seeddb-netbox-edit')\n    ip = (\n        \"195.88.54.16'))) OR 2121=(SELECT COUNT(*) FROM GENERATE_SERIES(1,15000000)) \"\n        \"AND ((('FRyc' LIKE 'FRyc\"\n    )\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"ip\": ip,\n            \"room\": \"myroom\",\n            \"category\": \"GW\",\n            \"organization\": \"myorg\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert 'Form was not valid' in smart_str(response.content)\n    assert 'Could not resolve name' in smart_str(response.content)\n\n\ndef test_adding_netbox_with_invalid_profiles_should_fail(db, client):\n    url = reverse('seeddb-netbox-edit')\n    ip = \"10.254.254.253\"\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"ip\": ip,\n            \"room\": \"myroom\",\n            \"category\": \"GW\",\n            \"organization\": \"myorg\",\n            \"profiles\": \"-5785')) ORDER BY 1-- qAPu\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert 'Form was not valid' in smart_str(response.content)\n    assert not Netbox.objects.filter(ip=ip).exists()\n\n\n@pytest.fixture()\ndef netbox(management_profile):\n    box = Netbox(\n        ip='10.254.254.254',\n        sysname='downhost.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SRV',\n    )\n    box.save()\n    yield box\n    box.delete()\n\n\ndef test_dependencies(netbox):\n    \"\"\"Tests the related objects listed when deleting objects in seeddb\"\"\"\n    qs = Room.objects.filter(pk='myroom')\n    deps = dependencies(qs, [Netbox])\n    assert 'myroom' in deps\n    assert [netbox] == deps.get('myroom')\n\n\ndef test_dependencies_no_whitelist(netbox):\n    \"\"\"Tests the related objects listed when deleting objects in seeddb\"\"\"\n    qs = Room.objects.filter(pk='myroom')\n    deps = dependencies(qs, [])\n    assert Netbox.objects.get(pk=netbox.pk)\n    assert deps == {}\n\n\ndef test_log_netbox_change_should_not_crash(admin_account, netbox):\n    \"\"\"Regression test to ensure this function doesn't try to access removed or\n    invalid attributes on Netbox.\n    \"\"\"\n    old = Netbox.objects.get(id=netbox.id)\n    new = netbox\n    new.category_id = \"OTHER\"\n\n    assert log_netbox_change(admin_account, old, new) is None\n\n\ndef test_empty_function_field_in_netbox_edit_form_should_delete_respective_netboxinfo_instance(  # noqa: E501\n    netbox, db, client\n):\n    \"\"\"\n    Empty function fields in the webform should cause the function's\n    corresponding NetboxInfo to be deleted; This is the correct thing\n    to do because NAV prefills user forms with previously assigned\n    values. Hence, if NAV receives a form with an empty function\n    string, this means the user has explicitly cleared the function\n    string.\n    \"\"\"\n    url = reverse('seeddb-netbox-edit', args=(netbox.id,))\n\n    def post(func):\n        return client.post(\n            url,\n            follow=True,\n            data={\n                \"ip\": netbox.ip,\n                \"room\": netbox.room_id,\n                \"category\": netbox.category_id,\n                \"organization\": netbox.organization_id,\n                \"function\": func,\n            },\n        )\n\n    assert len(NetboxInfo.objects.filter(netbox=netbox, variable='function')) == 0\n    post(\"\")\n    assert len(NetboxInfo.objects.filter(netbox=netbox, variable='function')) == 0\n    post(\"foo\")\n    assert (\n        NetboxInfo.objects.filter(netbox=netbox, variable='function').get().value\n        == 'foo'\n    )\n    post(\"\")\n    assert len(NetboxInfo.objects.filter(netbox=netbox, variable='function')) == 0\n\n\ndef test_generating_qr_codes_for_netboxes_should_succeed(client, netbox):\n    url = reverse('seeddb-netbox')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"qr_code\": \"Generate+QR+codes+for+selected\",\n            \"object\": [netbox.id],\n        },\n    )\n\n    # Check response headers\n    assert response.status_code == 200\n    assert response.headers[\"Content-Type\"] == \"application/zip\"\n    assert int(response.headers[\"Content-Length\"]) > 0\n    assert \"attachment\" in response.headers[\"Content-Disposition\"]\n    assert \"qr_codes.zip\" in response.headers[\"Content-Disposition\"]\n\n    # Check response content\n    buf = io.BytesIO(b\"\".join(response.streaming_content))\n    assert ZipFile(buf, \"r\").namelist() == [f\"{netbox.sysname}.png\"]\n\n\ndef test_generating_qr_codes_for_no_selected_netboxes_should_show_error(client, netbox):\n    url = reverse('seeddb-netbox')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"qr_code\": \"Generate+QR+codes+for+selected\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert (\n        'You need to select at least one object to generate QR codes for'\n        in smart_str(response.content)\n    )\n\n\ndef test_generating_qr_codes_for_rooms_should_succeed(client):\n    url = reverse('seeddb-room')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"qr_code\": \"Generate+QR+codes+for+selected\",\n            \"object\": [\"myroom\"],\n        },\n    )\n\n    # Check response headers\n    assert response.status_code == 200\n    assert response.headers[\"Content-Type\"] == \"application/zip\"\n    assert int(response.headers[\"Content-Length\"]) > 0\n    assert \"attachment\" in response.headers[\"Content-Disposition\"]\n    assert \"qr_codes.zip\" in response.headers[\"Content-Disposition\"]\n\n    # Check response content\n    buf = io.BytesIO(b\"\".join(response.streaming_content))\n    assert ZipFile(buf, \"r\").namelist() == [\"myroom.png\"]\n\n\ndef test_generating_qr_codes_for_no_selected_rooms_should_show_error(client, netbox):\n    url = reverse('seeddb-room')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"qr_code\": \"Generate+QR+codes+for+selected\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert (\n        'You need to select at least one object to generate QR codes for'\n        in smart_str(response.content)\n    )\n\n\nclass TestPatchModalViews:\n    \"\"\"Integration tests for showing add and remove patch modals\"\"\"\n\n    def test_should_render_add_patch_modal(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=add'\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'Add patch' in smart_str(response.content)\n\n    def test_add_patch_modal_should_include_interface_name(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=add'\n        )\n        response = client.get(url)\n        assert interface.ifname in smart_str(response.content)\n        assert interface.ifalias in smart_str(response.content)\n\n    def test_add_patch_modal_should_include_interface_id(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=add'\n        )\n        response = client.get(url)\n        assert f'value=\"{interface.id}\"' in smart_str(response.content)\n\n    def test_add_patch_modal_should_include_cable_search(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=add'\n        )\n        response = client.get(url)\n        assert 'id=\"cable-search\"' in smart_str(response.content)\n\n    def test_add_patch_modal_should_include_cableid(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=add'\n        )\n        response = client.get(url)\n        assert 'name=\"cableid\"' in smart_str(response.content)\n\n    def test_should_render_remove_patch_modal(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=remove'\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'Remove patch' in smart_str(response.content)\n\n    def test_remove_patch_modal_should_include_interface_id(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=remove'\n        )\n        response = client.get(url)\n        assert f'value=\"{interface.id}\"' in smart_str(response.content)\n\n    def test_remove_patch_modal_should_include_interface_name(self, client, interface):\n        url = (\n            reverse('seeddb-show-patch-modal')\n            + f'?interfaceid={interface.id}&modal=remove'\n        )\n        response = client.get(url)\n        assert interface.ifname in smart_str(response.content)\n        assert interface.ifalias in smart_str(response.content)\n\n\nclass TestSavePatchView:\n    \"\"\"Integration tests for adding patches\"\"\"\n\n    def test_given_valid_data_then_create_patch(self, client, interface, cable):\n        url = reverse('seeddb-patch-save')\n        data = {\n            'interfaceid': interface.id,\n            'cableid': cable.id,\n        }\n        response = client.post(url, data=data)\n        assert response.status_code == 200\n        assert Patch.objects.filter(interface=interface, cabling=cable).exists()\n\n    def test_given_invalid_data_then_return_alert(self, client):\n        url = reverse('seeddb-patch-save')\n        data = {}\n        response = client.post(url, data=data)\n        assert 'patch-modal-alert' in smart_str(response.content)\n\n    def test_given_valid_data_then_return_updated_patch_row(\n        self, client, interface, cable\n    ):\n        url = reverse('seeddb-patch-save')\n        data = {\n            'interfaceid': interface.id,\n            'cableid': cable.id,\n        }\n        response = client.post(url, data=data)\n        assert response.status_code == 200\n        assert f'tr data-interfaceid=\"{interface.pk}\"' in smart_str(response.content)\n\n\nclass TestRemovePatchView:\n    \"\"\"Integration tests for removing patches\"\"\"\n\n    def test_given_existing_patch_then_remove_from_interface(\n        self, client, interface, cable\n    ):\n        # First create a patch to remove\n        patch = Patch.objects.create(interface=interface, cabling=cable)\n\n        url = reverse('seeddb-patch-remove')\n        data = {\n            'interfaceid': interface.id,\n        }\n        client.post(url, data=data)\n        assert not Patch.objects.filter(id=patch.id).exists()\n\n    def test_given_existing_patch_then_return_updated_patch_row(\n        self, client, interface, cable\n    ):\n        Patch.objects.create(interface=interface, cabling=cable)\n\n        url = reverse('seeddb-patch-remove')\n        data = {\n            'interfaceid': interface.id,\n        }\n        response = client.post(url, data=data)\n        assert f'tr data-interfaceid=\"{interface.pk}\"' in smart_str(response.content)\n\n    # When removing a non-existing patch, the response should still be 200 OK\n    # The test should return an updated patch row with an 'Add patch' button\n    def test_given_non_existing_patch_then_return_add_patch_row(\n        self, client, interface\n    ):\n        url = reverse('seeddb-patch-remove')\n        data = {\n            'interfaceid': interface.id,\n        }\n        response = client.post(url, data=data)\n        assert f'tr data-interfaceid=\"{interface.pk}\"' in smart_str(response.content)\n        assert 'Add patch' in smart_str(response.content)\n\n\n@pytest.fixture\ndef interface(localhost):\n    \"\"\"Create a test interface\"\"\"\n    interface = Interface(\n        netbox=localhost,\n        ifname='GigabitEthernet0/1',\n        ifalias='Test Interface',\n        ifindex=1,\n        iftype=6,\n    )\n    interface.save()\n    yield interface\n    interface.delete()\n\n\n@pytest.fixture\ndef cable(localhost):\n    \"\"\"Create a test cable\"\"\"\n    cable = Cabling(\n        room=localhost.room,\n        jack='sparrow',\n        building='TestBuilding',\n        target_room='TestTargetRoom',\n        description='Test Cable',\n    )\n    cable.save()\n    yield cable\n    cable.delete()\n"
  },
  {
    "path": "tests/integration/smidump_test.py",
    "content": "\"\"\"Regression tests to validate smidump file contents\"\"\"\n\nimport os\n\nimport pynetsnmp.netsnmp\nimport pytest\n\nfrom nav.Snmp.pynetsnmp import Snmp\nfrom nav.Snmp import errors\nfrom nav.smidumps import get_mib\n\n\n#\n# Parametrization helpers\n#\n\n\ndef get_smi_dumps():\n    \"\"\"Returns a list of all MIB modules found in the nav.smidump namespace\"\"\"\n    import nav.smidumps\n\n    directory = os.path.dirname(nav.smidumps.__file__)\n    files = [f for f in os.listdir(directory) if f.endswith('.py') and f[0] not in '_.']\n    modules = [os.path.splitext(f)[0] for f in files]\n    return set(modules)\n\n\n#\n# Tests\n#\n\n\n@pytest.mark.parametrize(\"smidump\", get_smi_dumps())\ndef test_all_oids_in_smidumped_mib_should_be_valid(smidump, validator):\n    \"\"\"Naively tests that all OIDs represented in an smidumped MIB module is encodeable\n    by NET-SNMP. Specifically written to discover issues with incomplete MIB information\n    as described in https://github.com/Uninett/nav/issues/2494\n    \"\"\"\n    mib = get_mib(smidump)\n    for node in mib['nodes'].values():\n        assert validator(node['oid']), \"{} seems to contain invalid OID {}\".format(\n            smidump, node['oid']\n        )\n\n\n#\n# Fixtures\n#\n\n\n@pytest.fixture(scope=\"session\")\ndef validator():\n    \"\"\"Returns a session-scoped OID validator function\"\"\"\n    snmp = Snmp('0.0.0.0', version='2c', timeout=0.0001)\n\n    def is_valid(oid):\n        \"\"\"Attempts to send an SNMP get operation using NET-SNMP, translating\n        failures to a False result and success to True\n        \"\"\"\n        try:\n            # Uses the internal handle to avoid synchronously waiting for a response\n            # that will never come\n            snmp.handle.get([oid])\n        except (errors.SnmpError, pynetsnmp.netsnmp.SnmpError) as err:\n            print(err)\n            return False\n        return True\n\n    return is_valid\n"
  },
  {
    "path": "tests/integration/smsd_test.py",
    "content": "\"\"\"\nsmsd integration tests\n\"\"\"\n\nimport os\nimport os.path\nfrom subprocess import STDOUT, check_output, TimeoutExpired, CalledProcessError\n\nimport pytest\n\nfrom nav.config import find_config_file, find_config_dir\n\nBINDIR = \"./python/nav/bin\"\n\n\ndef test_smsd_test_message_with_uninettmaildispatcher_should_work(\n    smsd_test_config,\n    django_settings_email_backend_file,\n):\n    output = get_smsd_test_output('99999999')\n    print(output)\n    assert 'SMS sent' in output\n\n\n########################\n#                      #\n# fixtures and helpers #\n#                      #\n########################\n\n\n@pytest.fixture(scope=\"module\")\ndef smsd_test_config():\n    print(\"placing temporary smsd config\")\n    configfile = find_config_file(\"smsd.conf\")\n    tmpfile = configfile + '.bak'\n    os.rename(configfile, tmpfile)\n    with open(configfile, \"w\") as config:\n        config.write(\n            \"\"\"\n[main]\nmailwarnlevel: CRITICAL\n\n[dispatcher]\ndispatcher1: UninettMailDispatcher\n\n[UninettMailDispatcher]\nmailaddr: root@localhost\n\"\"\"\n        )\n    yield configfile\n    print(\"restoring smsd config\")\n    os.remove(configfile)\n    os.rename(tmpfile, configfile)\n\n\n@pytest.fixture(scope=\"module\")\ndef django_settings_email_backend_file():\n    \"\"\"Fixture to ensure any NAV Django process does not attempt to contact an\n    actual SMTP server when using the Django e-mail framework - since we\n    probably don't have one in the test container.\n\n    \"\"\"\n    print(\"placing temporary local_settings config\")\n    pythondir = os.path.join(find_config_dir(), 'python')\n    if not os.path.exists(pythondir):\n        os.mkdir(pythondir, 0o755)\n\n    configfile = os.path.join(pythondir, 'local_settings.py')\n    with open(configfile, \"w\") as config:\n        config.write(\n            \"\"\"\nLOCAL_SETTINGS = True\nfrom nav.django.settings import *\n\nEMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'\nEMAIL_FILE_PATH = '/tmp/app-messages'\n\"\"\"\n        )\n    yield configfile\n    print(\"restoring temporary local_settings config\")\n    os.remove(configfile)\n\n\ndef get_smsd_test_output(phone_no, timeout=5):\n    \"\"\"\n    Runs smsd in foreground mode, kills it after timeout seconds and\n    returns the combined stdout+stderr output from the process.\n\n    \"\"\"\n    cmd = [os.path.join(BINDIR, 'smsd.py'), '-t', phone_no]\n    try:\n        # remove environment var that may interfere with our test - this mimicks\n        # a production environment\n        env = os.environ.copy()\n        if 'DJANGO_SETTINGS_MODULE' in env:\n            del env['DJANGO_SETTINGS_MODULE']\n        output = check_output(cmd, stderr=STDOUT, timeout=timeout, env=env)\n    except TimeoutExpired as error:\n        print(error.output.decode('utf-8'))\n        return error.output.decode('utf-8')\n    except CalledProcessError as error:\n        print(error.output.decode('utf-8'))\n        raise\n    else:\n        print(output)\n        return output.decode('utf-8')\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/P8652.snmprec",
    "content": "1.3.6.1.4.1.22626.1.5.1.1.0|4x|76616e6e2d736572762e756e696e6574742e6e6f\n1.3.6.1.4.1.22626.1.5.1.2.0|4|15940633\n1.3.6.1.4.1.22626.1.5.1.3.0|2|4360\n1.3.6.1.4.1.22626.1.5.2.1.1.0|4x|4368616e6e656c2031\n1.3.6.1.4.1.22626.1.5.2.1.2.0|4x|32332e38\n1.3.6.1.4.1.22626.1.5.2.1.3.0|2|238\n1.3.6.1.4.1.22626.1.5.2.1.4.0|2|0\n1.3.6.1.4.1.22626.1.5.2.1.5.0|2|450\n1.3.6.1.4.1.22626.1.5.2.1.6.0|2|0\n1.3.6.1.4.1.22626.1.5.2.1.7.0|2|10\n1.3.6.1.4.1.22626.1.5.2.1.8.0|2|30\n1.3.6.1.4.1.22626.1.5.2.1.9.0|4x|b043\n1.3.6.1.4.1.22626.1.5.2.1.10.0|4|none\n1.3.6.1.4.1.22626.1.5.2.1.11.0|4x|31362e38\n1.3.6.1.4.1.22626.1.5.2.1.12.0|4x|33302e35\n1.3.6.1.4.1.22626.1.5.2.2.1.0|4x|4368616e6e656c2032\n1.3.6.1.4.1.22626.1.5.2.2.2.0|4x|33392e33\n1.3.6.1.4.1.22626.1.5.2.2.3.0|2|393\n1.3.6.1.4.1.22626.1.5.2.2.4.0|2|0\n1.3.6.1.4.1.22626.1.5.2.2.5.0|2|900\n1.3.6.1.4.1.22626.1.5.2.2.6.0|2|0\n1.3.6.1.4.1.22626.1.5.2.2.7.0|2|10\n1.3.6.1.4.1.22626.1.5.2.2.8.0|2|30\n1.3.6.1.4.1.22626.1.5.2.2.9.0|4x|255248\n1.3.6.1.4.1.22626.1.5.2.2.10.0|4|none\n1.3.6.1.4.1.22626.1.5.2.2.11.0|4x|31312e36\n1.3.6.1.4.1.22626.1.5.2.2.12.0|4x|35392e34\n1.3.6.1.4.1.22626.1.5.2.3.1.0|4x|4368616e6e656c2033\n1.3.6.1.4.1.22626.1.5.2.3.2.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.3.3.0|2|-11000\n1.3.6.1.4.1.22626.1.5.2.3.4.0|2|0\n1.3.6.1.4.1.22626.1.5.2.3.5.0|2|500\n1.3.6.1.4.1.22626.1.5.2.3.6.0|2|0\n1.3.6.1.4.1.22626.1.5.2.3.7.0|2|10\n1.3.6.1.4.1.22626.1.5.2.3.8.0|2|30\n1.3.6.1.4.1.22626.1.5.2.3.9.0|4|\n1.3.6.1.4.1.22626.1.5.2.3.10.0|4|none\n1.3.6.1.4.1.22626.1.5.2.3.11.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.3.12.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.4.1.0|4x|4368616e6e656c2034\n1.3.6.1.4.1.22626.1.5.2.4.2.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.4.3.0|2|-11000\n1.3.6.1.4.1.22626.1.5.2.4.4.0|2|0\n1.3.6.1.4.1.22626.1.5.2.4.5.0|2|500\n1.3.6.1.4.1.22626.1.5.2.4.6.0|2|0\n1.3.6.1.4.1.22626.1.5.2.4.7.0|2|10\n1.3.6.1.4.1.22626.1.5.2.4.8.0|2|30\n1.3.6.1.4.1.22626.1.5.2.4.9.0|4|\n1.3.6.1.4.1.22626.1.5.2.4.10.0|4|none\n1.3.6.1.4.1.22626.1.5.2.4.11.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.4.12.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.5.1.0|4x|4368616e6e656c2035\n1.3.6.1.4.1.22626.1.5.2.5.2.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.5.3.0|2|-11000\n1.3.6.1.4.1.22626.1.5.2.5.4.0|2|0\n1.3.6.1.4.1.22626.1.5.2.5.5.0|2|500\n1.3.6.1.4.1.22626.1.5.2.5.6.0|2|0\n1.3.6.1.4.1.22626.1.5.2.5.7.0|2|10\n1.3.6.1.4.1.22626.1.5.2.5.8.0|2|30\n1.3.6.1.4.1.22626.1.5.2.5.9.0|4|\n1.3.6.1.4.1.22626.1.5.2.5.10.0|4|none\n1.3.6.1.4.1.22626.1.5.2.5.11.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.5.12.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.6.1.0|4x|76616e6e2d67756c762d67616e67\n1.3.6.1.4.1.22626.1.5.2.6.2.0|4|Normalt\n1.3.6.1.4.1.22626.1.5.2.6.3.0|2|1\n1.3.6.1.4.1.22626.1.5.2.6.4.0|4|none\n1.3.6.1.4.1.22626.1.5.2.6.5.0|2|0\n1.3.6.1.4.1.22626.1.5.2.7.1.0|4x|76616e6e2d67756c762d41\n1.3.6.1.4.1.22626.1.5.2.7.2.0|4|Normalt\n1.3.6.1.4.1.22626.1.5.2.7.3.0|2|1\n1.3.6.1.4.1.22626.1.5.2.7.4.0|4|none\n1.3.6.1.4.1.22626.1.5.2.7.5.0|2|0\n1.3.6.1.4.1.22626.1.5.2.8.1.0|4x|76616e6e2d6c61676572726f6d\n1.3.6.1.4.1.22626.1.5.2.8.2.0|4|Normalt\n1.3.6.1.4.1.22626.1.5.2.8.3.0|2|1\n1.3.6.1.4.1.22626.1.5.2.8.4.0|4|none\n1.3.6.1.4.1.22626.1.5.2.8.5.0|2|0\n1.3.6.1.4.1.22626.1.5.2.9.1.0|4x|42494e20696e7075742034\n1.3.6.1.4.1.22626.1.5.2.9.2.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.9.3.0|2|-11000\n1.3.6.1.4.1.22626.1.5.2.9.4.0|4|none\n1.3.6.1.4.1.22626.1.5.2.9.5.0|2|0\n1.3.6.1.4.1.22626.1.5.2.10.1.0|4x|42494e20696e7075742035\n1.3.6.1.4.1.22626.1.5.2.10.2.0|4x|6e2f61\n1.3.6.1.4.1.22626.1.5.2.10.3.0|2|-11000\n1.3.6.1.4.1.22626.1.5.2.10.4.0|4|none\n1.3.6.1.4.1.22626.1.5.2.10.5.0|2|0\n1.3.6.1.4.1.22626.1.5.3.1.0|4x|4e54502073796e6368726f6e697a6174696f6e206572726f72\n1.3.6.1.4.1.22626.1.5.4.1.1.1.1|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.2|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.3|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.4|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.5|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.6|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.7|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.8|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.9|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.10|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.11|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.12|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.13|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.14|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.15|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.16|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.17|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.18|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.19|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.20|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.21|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.22|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.23|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.24|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.25|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.26|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.27|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.28|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.29|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.30|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.31|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.32|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.33|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.34|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.35|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.36|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.37|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.38|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.39|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.40|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.41|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.42|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.43|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.44|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.45|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.46|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.47|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.48|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.49|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.50|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.51|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.52|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.53|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.54|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.55|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.56|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.57|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.58|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.59|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.60|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.61|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.62|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.63|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.64|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.65|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.66|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.67|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.68|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.69|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.70|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.71|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.72|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.73|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.74|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.75|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.76|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.77|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.78|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.79|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.80|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.81|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.82|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.83|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.84|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.85|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.86|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.87|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.88|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.89|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.90|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.91|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.92|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.93|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.94|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.95|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.96|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.97|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.98|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.99|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.100|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.101|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.102|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.103|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.104|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.105|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.106|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.107|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.108|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.109|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.110|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.111|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.112|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.113|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.114|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.115|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.116|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.117|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.118|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.119|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.120|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.121|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.122|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.123|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.124|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.125|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.126|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.127|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.128|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.129|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.130|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.131|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.132|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.133|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.134|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.135|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.136|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.137|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.138|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.139|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.140|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.141|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.142|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.143|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.144|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.145|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.146|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.147|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.148|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.149|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.150|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.151|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.152|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.153|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.154|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.155|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.156|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.157|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.158|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.159|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.160|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.161|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.162|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.163|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.164|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.165|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.166|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.167|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.168|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.169|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.170|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.171|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.172|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.173|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.174|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.175|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.176|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.177|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.178|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.179|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.180|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.181|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.182|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.183|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.184|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.185|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.186|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.187|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.188|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.189|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.190|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.191|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.192|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.193|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.194|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.195|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.196|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.197|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.198|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.199|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.200|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.201|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.202|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.203|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.204|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.205|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.206|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.207|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.208|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.209|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.210|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.211|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.212|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.213|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.214|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.215|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.216|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.217|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.218|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.219|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.220|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.221|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.222|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.223|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.224|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.225|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.226|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.227|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.228|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.229|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.230|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.231|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.232|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.233|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.234|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.235|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.236|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.237|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.238|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.239|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.240|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.241|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.242|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.243|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.244|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.245|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.246|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.247|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.248|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.249|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.250|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.251|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.252|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.253|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.254|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.255|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.256|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.257|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.258|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.259|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.260|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.261|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.262|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.263|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.264|2|248\n1.3.6.1.4.1.22626.1.5.4.1.1.1.265|2|246\n1.3.6.1.4.1.22626.1.5.4.1.1.1.266|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.267|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.268|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.269|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.270|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.271|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.272|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.273|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.274|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.275|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.276|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.277|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.278|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.279|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.280|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.281|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.282|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.283|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.284|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.285|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.286|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.287|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.288|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.289|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.290|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.291|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.292|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.293|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.294|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.295|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.296|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.297|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.298|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.299|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.300|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.301|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.302|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.303|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.304|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.305|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.306|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.307|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.308|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.309|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.310|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.311|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.312|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.313|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.314|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.315|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.316|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.317|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.318|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.319|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.320|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.321|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.322|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.323|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.324|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.325|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.326|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.327|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.328|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.329|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.330|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.331|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.332|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.333|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.334|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.335|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.336|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.337|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.338|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.339|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.340|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.341|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.342|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.343|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.344|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.345|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.346|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.347|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.348|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.349|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.350|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.351|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.352|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.353|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.354|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.355|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.356|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.357|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.358|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.359|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.360|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.361|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.362|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.363|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.364|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.365|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.366|2|245\n1.3.6.1.4.1.22626.1.5.4.1.1.1.367|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.368|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.369|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.370|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.371|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.372|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.373|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.374|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.375|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.376|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.377|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.378|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.379|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.380|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.381|2|211\n1.3.6.1.4.1.22626.1.5.4.1.1.1.382|2|211\n1.3.6.1.4.1.22626.1.5.4.1.1.1.383|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.384|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.385|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.386|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.387|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.388|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.389|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.390|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.391|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.392|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.393|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.394|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.395|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.396|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.397|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.398|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.399|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.400|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.401|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.402|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.403|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.404|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.405|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.406|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.407|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.408|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.409|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.410|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.411|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.412|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.413|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.414|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.415|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.416|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.417|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.418|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.419|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.420|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.421|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.422|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.423|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.424|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.425|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.426|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.427|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.428|2|240\n1.3.6.1.4.1.22626.1.5.4.1.1.1.429|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.430|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.431|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.432|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.433|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.434|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.435|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.436|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.437|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.438|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.439|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.440|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.441|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.442|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.443|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.444|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.445|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.446|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.447|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.448|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.449|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.450|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.451|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.452|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.453|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.454|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.455|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.456|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.457|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.458|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.459|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.460|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.461|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.462|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.463|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.464|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.465|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.466|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.467|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.468|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.469|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.470|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.471|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.472|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.473|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.474|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.475|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.476|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.477|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.478|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.479|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.480|2|245\n1.3.6.1.4.1.22626.1.5.4.1.1.1.481|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.482|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.483|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.484|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.485|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.486|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.487|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.488|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.489|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.490|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.491|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.492|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.493|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.494|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.495|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.496|2|211\n1.3.6.1.4.1.22626.1.5.4.1.1.1.497|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.498|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.499|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.500|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.501|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.502|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.503|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.504|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.505|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.506|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.507|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.508|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.509|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.510|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.511|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.512|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.513|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.514|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.515|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.516|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.517|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.518|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.519|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.520|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.521|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.522|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.523|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.524|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.525|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.526|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.527|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.528|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.529|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.530|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.531|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.532|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.533|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.534|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.535|2|246\n1.3.6.1.4.1.22626.1.5.4.1.1.1.536|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.537|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.538|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.539|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.540|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.541|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.542|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.543|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.544|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.545|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.546|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.547|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.548|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.549|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.550|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.551|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.552|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.553|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.554|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.555|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.556|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.557|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.558|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.559|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.560|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.561|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.562|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.563|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.564|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.565|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.566|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.567|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.568|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.569|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.570|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.571|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.572|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.573|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.574|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.575|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.576|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.577|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.578|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.579|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.580|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.581|2|247\n1.3.6.1.4.1.22626.1.5.4.1.1.1.582|2|245\n1.3.6.1.4.1.22626.1.5.4.1.1.1.583|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.584|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.585|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.586|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.587|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.588|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.589|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.590|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.591|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.592|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.593|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.594|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.595|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.596|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.597|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.598|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.599|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.600|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.601|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.602|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.603|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.604|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.605|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.606|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.607|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.608|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.609|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.610|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.611|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.612|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.613|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.614|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.615|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.616|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.617|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.618|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.619|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.620|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.621|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.622|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.623|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.624|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.625|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.626|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.627|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.628|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.629|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.630|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.631|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.632|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.633|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.634|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.635|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.636|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.637|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.638|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.639|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.640|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.641|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.642|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.643|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.644|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.645|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.646|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.647|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.648|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.649|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.650|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.651|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.652|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.653|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.654|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.655|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.656|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.657|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.658|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.659|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.660|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.661|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.662|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.663|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.664|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.665|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.666|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.667|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.668|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.669|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.670|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.671|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.672|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.673|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.674|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.675|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.676|2|240\n1.3.6.1.4.1.22626.1.5.4.1.1.1.677|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.678|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.679|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.680|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.681|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.682|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.683|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.684|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.685|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.686|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.687|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.688|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.689|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.690|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.691|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.692|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.693|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.694|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.695|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.696|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.697|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.698|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.699|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.700|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.701|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.702|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.703|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.704|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.705|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.706|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.707|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.708|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.709|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.710|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.711|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.712|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.713|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.714|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.715|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.716|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.717|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.718|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.719|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.720|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.721|2|246\n1.3.6.1.4.1.22626.1.5.4.1.1.1.722|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.723|2|240\n1.3.6.1.4.1.22626.1.5.4.1.1.1.724|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.725|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.726|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.727|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.728|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.729|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.730|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.731|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.732|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.733|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.734|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.735|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.736|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.737|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.738|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.739|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.740|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.741|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.742|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.743|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.744|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.745|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.746|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.747|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.748|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.749|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.750|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.751|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.752|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.753|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.754|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.755|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.756|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.757|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.758|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.759|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.760|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.761|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.762|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.763|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.764|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.765|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.766|2|240\n1.3.6.1.4.1.22626.1.5.4.1.1.1.767|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.768|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.769|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.770|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.771|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.772|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.773|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.774|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.775|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.776|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.777|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.778|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.779|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.780|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.781|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.782|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.783|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.784|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.785|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.786|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.787|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.788|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.789|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.790|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.791|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.792|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.793|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.794|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.795|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.796|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.797|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.798|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.799|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.800|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.801|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.802|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.803|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.804|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.805|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.806|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.807|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.808|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.809|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.810|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.811|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.812|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.813|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.814|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.815|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.816|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.817|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.818|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.819|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.820|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.821|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.822|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.823|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.824|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.825|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.826|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.827|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.828|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.829|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.830|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.831|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.832|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.833|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.834|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.835|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.836|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.837|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.838|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.839|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.840|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.841|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.842|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.843|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.844|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.845|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.846|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.847|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.848|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.849|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.850|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.851|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.852|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.853|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.854|2|235\n1.3.6.1.4.1.22626.1.5.4.1.1.1.855|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.856|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.857|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.858|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.859|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.860|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.861|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.862|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.863|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.864|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.865|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.866|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.867|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.868|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.869|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.870|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.871|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.872|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.873|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.874|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.875|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.876|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.877|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.878|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.879|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.880|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.881|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.882|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.883|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.884|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.885|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.886|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.887|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.888|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.889|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.890|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.891|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.892|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.893|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.894|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.895|2|232\n1.3.6.1.4.1.22626.1.5.4.1.1.1.896|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.897|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.898|2|242\n1.3.6.1.4.1.22626.1.5.4.1.1.1.899|2|245\n1.3.6.1.4.1.22626.1.5.4.1.1.1.900|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.901|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.902|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.903|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.904|2|234\n1.3.6.1.4.1.22626.1.5.4.1.1.1.905|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.906|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.907|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.908|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.909|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.910|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.911|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.912|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.913|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.914|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.915|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.916|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.917|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.918|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.919|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.920|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.921|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.922|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.923|2|217\n1.3.6.1.4.1.22626.1.5.4.1.1.1.924|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.925|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.926|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.927|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.928|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.929|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.930|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.931|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.932|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.933|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.934|2|222\n1.3.6.1.4.1.22626.1.5.4.1.1.1.935|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.936|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.937|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.1.938|2|229\n1.3.6.1.4.1.22626.1.5.4.1.1.1.939|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.940|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.941|2|237\n1.3.6.1.4.1.22626.1.5.4.1.1.1.942|2|240\n1.3.6.1.4.1.22626.1.5.4.1.1.1.943|2|244\n1.3.6.1.4.1.22626.1.5.4.1.1.1.944|2|243\n1.3.6.1.4.1.22626.1.5.4.1.1.1.945|2|241\n1.3.6.1.4.1.22626.1.5.4.1.1.1.946|2|239\n1.3.6.1.4.1.22626.1.5.4.1.1.1.947|2|238\n1.3.6.1.4.1.22626.1.5.4.1.1.1.948|2|236\n1.3.6.1.4.1.22626.1.5.4.1.1.1.949|2|233\n1.3.6.1.4.1.22626.1.5.4.1.1.1.950|2|231\n1.3.6.1.4.1.22626.1.5.4.1.1.1.951|2|230\n1.3.6.1.4.1.22626.1.5.4.1.1.1.952|2|228\n1.3.6.1.4.1.22626.1.5.4.1.1.1.953|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.954|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.955|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.956|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.957|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.958|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.959|2|212\n1.3.6.1.4.1.22626.1.5.4.1.1.1.960|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.961|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.962|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.963|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.964|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.965|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.966|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.967|2|213\n1.3.6.1.4.1.22626.1.5.4.1.1.1.968|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.969|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.970|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.971|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.972|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.973|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.974|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.975|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.976|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.977|2|214\n1.3.6.1.4.1.22626.1.5.4.1.1.1.978|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.979|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.980|2|215\n1.3.6.1.4.1.22626.1.5.4.1.1.1.981|2|216\n1.3.6.1.4.1.22626.1.5.4.1.1.1.982|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.983|2|218\n1.3.6.1.4.1.22626.1.5.4.1.1.1.984|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.985|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.986|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.987|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.988|2|219\n1.3.6.1.4.1.22626.1.5.4.1.1.1.989|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.990|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.991|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.992|2|220\n1.3.6.1.4.1.22626.1.5.4.1.1.1.993|2|221\n1.3.6.1.4.1.22626.1.5.4.1.1.1.994|2|223\n1.3.6.1.4.1.22626.1.5.4.1.1.1.995|2|224\n1.3.6.1.4.1.22626.1.5.4.1.1.1.996|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.997|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.998|2|225\n1.3.6.1.4.1.22626.1.5.4.1.1.1.999|2|226\n1.3.6.1.4.1.22626.1.5.4.1.1.1.1000|2|227\n1.3.6.1.4.1.22626.1.5.4.1.1.2.1|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.2|2|391\n1.3.6.1.4.1.22626.1.5.4.1.1.2.3|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.4|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.5|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.6|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.7|2|391\n1.3.6.1.4.1.22626.1.5.4.1.1.2.8|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.9|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.10|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.11|2|386\n1.3.6.1.4.1.22626.1.5.4.1.1.2.12|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.13|2|386\n1.3.6.1.4.1.22626.1.5.4.1.1.2.14|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.15|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.16|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.17|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.18|2|391\n1.3.6.1.4.1.22626.1.5.4.1.1.2.19|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.20|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.21|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.22|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.23|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.24|2|391\n1.3.6.1.4.1.22626.1.5.4.1.1.2.25|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.26|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.27|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.28|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.29|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.30|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.31|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.32|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.33|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.34|2|396\n1.3.6.1.4.1.22626.1.5.4.1.1.2.35|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.36|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.37|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.38|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.39|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.40|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.41|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.42|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.43|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.44|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.45|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.46|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.47|2|398\n1.3.6.1.4.1.22626.1.5.4.1.1.2.48|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.49|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.50|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.51|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.52|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.53|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.54|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.55|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.56|2|403\n1.3.6.1.4.1.22626.1.5.4.1.1.2.57|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.58|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.59|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.60|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.61|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.62|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.63|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.64|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.65|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.66|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.67|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.68|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.69|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.70|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.71|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.72|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.73|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.74|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.75|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.76|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.77|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.78|2|410\n1.3.6.1.4.1.22626.1.5.4.1.1.2.79|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.80|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.81|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.82|2|405\n1.3.6.1.4.1.22626.1.5.4.1.1.2.83|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.84|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.85|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.86|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.87|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.88|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.89|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.90|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.91|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.92|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.93|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.94|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.95|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.96|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.97|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.98|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.99|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.100|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.101|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.102|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.103|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.104|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.105|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.106|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.107|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.108|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.109|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.110|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.111|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.112|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.113|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.114|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.115|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.116|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.117|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.118|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.119|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.120|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.121|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.122|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.123|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.124|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.125|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.126|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.127|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.128|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.129|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.130|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.131|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.132|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.133|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.134|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.135|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.136|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.137|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.138|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.139|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.140|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.141|2|423\n1.3.6.1.4.1.22626.1.5.4.1.1.2.142|2|418\n1.3.6.1.4.1.22626.1.5.4.1.1.2.143|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.144|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.145|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.146|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.147|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.148|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.149|2|408\n1.3.6.1.4.1.22626.1.5.4.1.1.2.150|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.151|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.152|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.153|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.154|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.155|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.156|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.157|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.158|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.159|2|413\n1.3.6.1.4.1.22626.1.5.4.1.1.2.160|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.161|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.162|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.163|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.164|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.165|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.166|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.167|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.168|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.169|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.170|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.171|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.172|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.173|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.174|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.175|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.176|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.177|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.178|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.179|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.180|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.181|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.182|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.183|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.184|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.185|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.186|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.187|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.188|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.189|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.190|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.191|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.192|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.193|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.194|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.195|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.196|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.197|2|400\n1.3.6.1.4.1.22626.1.5.4.1.1.2.198|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.199|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.200|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.201|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.202|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.203|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.204|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.205|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.206|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.207|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.208|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.209|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.210|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.211|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.212|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.213|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.214|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.215|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.216|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.217|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.218|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.219|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.220|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.221|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.222|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.223|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.224|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.225|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.226|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.227|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.228|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.229|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.230|2|405\n1.3.6.1.4.1.22626.1.5.4.1.1.2.231|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.232|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.233|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.234|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.235|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.236|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.237|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.238|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.239|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.240|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.241|2|400\n1.3.6.1.4.1.22626.1.5.4.1.1.2.242|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.243|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.244|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.245|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.246|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.247|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.248|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.249|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.250|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.251|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.252|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.253|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.254|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.255|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.256|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.257|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.258|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.259|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.260|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.261|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.262|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.263|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.264|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.265|2|445\n1.3.6.1.4.1.22626.1.5.4.1.1.2.266|2|455\n1.3.6.1.4.1.22626.1.5.4.1.1.2.267|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.268|2|473\n1.3.6.1.4.1.22626.1.5.4.1.1.2.269|2|483\n1.3.6.1.4.1.22626.1.5.4.1.1.2.270|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.271|2|500\n1.3.6.1.4.1.22626.1.5.4.1.1.2.272|2|510\n1.3.6.1.4.1.22626.1.5.4.1.1.2.273|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.274|2|518\n1.3.6.1.4.1.22626.1.5.4.1.1.2.275|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.276|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.277|2|519\n1.3.6.1.4.1.22626.1.5.4.1.1.2.278|2|473\n1.3.6.1.4.1.22626.1.5.4.1.1.2.279|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.280|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.281|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.282|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.283|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.284|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.285|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.286|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.287|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.288|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.289|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.290|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.291|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.292|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.293|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.294|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.295|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.296|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.297|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.298|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.299|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.300|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.301|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.302|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.303|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.304|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.305|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.306|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.307|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.308|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.309|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.310|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.311|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.312|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.313|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.314|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.315|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.316|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.317|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.318|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.319|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.320|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.321|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.322|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.323|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.324|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.325|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.326|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.327|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.328|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.329|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.330|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.331|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.332|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.333|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.334|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.335|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.336|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.337|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.338|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.339|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.340|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.341|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.342|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.343|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.344|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.345|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.346|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.347|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.348|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.349|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.350|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.351|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.352|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.353|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.354|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.355|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.356|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.357|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.358|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.359|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.360|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.361|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.362|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.363|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.364|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.365|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.366|2|399\n1.3.6.1.4.1.22626.1.5.4.1.1.2.367|2|425\n1.3.6.1.4.1.22626.1.5.4.1.1.2.368|2|435\n1.3.6.1.4.1.22626.1.5.4.1.1.2.369|2|448\n1.3.6.1.4.1.22626.1.5.4.1.1.2.370|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.371|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.372|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.373|2|498\n1.3.6.1.4.1.22626.1.5.4.1.1.2.374|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.375|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.376|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.377|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.378|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.379|2|529\n1.3.6.1.4.1.22626.1.5.4.1.1.2.380|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.381|2|462\n1.3.6.1.4.1.22626.1.5.4.1.1.2.382|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.383|2|411\n1.3.6.1.4.1.22626.1.5.4.1.1.2.384|2|411\n1.3.6.1.4.1.22626.1.5.4.1.1.2.385|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.386|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.387|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.388|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.389|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.390|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.391|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.392|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.393|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.394|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.395|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.396|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.397|2|405\n1.3.6.1.4.1.22626.1.5.4.1.1.2.398|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.399|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.400|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.401|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.402|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.403|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.404|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.405|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.406|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.407|2|400\n1.3.6.1.4.1.22626.1.5.4.1.1.2.408|2|400\n1.3.6.1.4.1.22626.1.5.4.1.1.2.409|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.410|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.411|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.412|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.413|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.414|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.415|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.416|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.417|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.418|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.419|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.420|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.421|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.422|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.423|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.424|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.425|2|394\n1.3.6.1.4.1.22626.1.5.4.1.1.2.426|2|435\n1.3.6.1.4.1.22626.1.5.4.1.1.2.427|2|440\n1.3.6.1.4.1.22626.1.5.4.1.1.2.428|2|453\n1.3.6.1.4.1.22626.1.5.4.1.1.2.429|2|467\n1.3.6.1.4.1.22626.1.5.4.1.1.2.430|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.431|2|490\n1.3.6.1.4.1.22626.1.5.4.1.1.2.432|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.433|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.434|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.435|2|518\n1.3.6.1.4.1.22626.1.5.4.1.1.2.436|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.437|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.438|2|524\n1.3.6.1.4.1.22626.1.5.4.1.1.2.439|2|509\n1.3.6.1.4.1.22626.1.5.4.1.1.2.440|2|447\n1.3.6.1.4.1.22626.1.5.4.1.1.2.441|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.442|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.443|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.444|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.445|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.446|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.447|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.448|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.449|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.450|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.451|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.452|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.453|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.454|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.455|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.456|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.457|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.458|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.459|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.460|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.461|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.462|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.463|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.464|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.465|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.466|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.467|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.468|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.469|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.470|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.471|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.472|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.473|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.474|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.475|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.476|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.477|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.478|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.479|2|399\n1.3.6.1.4.1.22626.1.5.4.1.1.2.480|2|435\n1.3.6.1.4.1.22626.1.5.4.1.1.2.481|2|450\n1.3.6.1.4.1.22626.1.5.4.1.1.2.482|2|460\n1.3.6.1.4.1.22626.1.5.4.1.1.2.483|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.484|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.485|2|493\n1.3.6.1.4.1.22626.1.5.4.1.1.2.486|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.487|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.488|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.489|2|535\n1.3.6.1.4.1.22626.1.5.4.1.1.2.490|2|532\n1.3.6.1.4.1.22626.1.5.4.1.1.2.491|2|540\n1.3.6.1.4.1.22626.1.5.4.1.1.2.492|2|535\n1.3.6.1.4.1.22626.1.5.4.1.1.2.493|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.494|2|452\n1.3.6.1.4.1.22626.1.5.4.1.1.2.495|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.496|2|425\n1.3.6.1.4.1.22626.1.5.4.1.1.2.497|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.498|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.499|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.500|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.501|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.502|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.503|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.504|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.505|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.506|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.507|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.508|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.509|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.510|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.511|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.512|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.513|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.514|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.515|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.516|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.517|2|410\n1.3.6.1.4.1.22626.1.5.4.1.1.2.518|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.519|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.520|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.521|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.522|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.523|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.524|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.525|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.526|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.527|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.528|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.529|2|390\n1.3.6.1.4.1.22626.1.5.4.1.1.2.530|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.531|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.532|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.533|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.534|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.535|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.536|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.537|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.538|2|424\n1.3.6.1.4.1.22626.1.5.4.1.1.2.539|2|434\n1.3.6.1.4.1.22626.1.5.4.1.1.2.540|2|450\n1.3.6.1.4.1.22626.1.5.4.1.1.2.541|2|462\n1.3.6.1.4.1.22626.1.5.4.1.1.2.542|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.543|2|487\n1.3.6.1.4.1.22626.1.5.4.1.1.2.544|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.545|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.546|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.547|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.548|2|524\n1.3.6.1.4.1.22626.1.5.4.1.1.2.549|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.550|2|483\n1.3.6.1.4.1.22626.1.5.4.1.1.2.551|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.552|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.553|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.554|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.555|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.556|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.557|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.558|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.559|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.560|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.561|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.562|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.563|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.564|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.565|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.566|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.567|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.568|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.569|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.570|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.571|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.572|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.573|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.574|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.575|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.576|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.577|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.578|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.579|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.580|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.581|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.582|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.583|2|425\n1.3.6.1.4.1.22626.1.5.4.1.1.2.584|2|432\n1.3.6.1.4.1.22626.1.5.4.1.1.2.585|2|445\n1.3.6.1.4.1.22626.1.5.4.1.1.2.586|2|460\n1.3.6.1.4.1.22626.1.5.4.1.1.2.587|2|470\n1.3.6.1.4.1.22626.1.5.4.1.1.2.588|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.589|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.590|2|503\n1.3.6.1.4.1.22626.1.5.4.1.1.2.591|2|510\n1.3.6.1.4.1.22626.1.5.4.1.1.2.592|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.593|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.594|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.595|2|535\n1.3.6.1.4.1.22626.1.5.4.1.1.2.596|2|534\n1.3.6.1.4.1.22626.1.5.4.1.1.2.597|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.598|2|457\n1.3.6.1.4.1.22626.1.5.4.1.1.2.599|2|424\n1.3.6.1.4.1.22626.1.5.4.1.1.2.600|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.601|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.602|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.603|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.604|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.605|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.606|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.607|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.608|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.609|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.610|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.611|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.612|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.613|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.614|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.615|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.616|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.617|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.618|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.619|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.620|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.621|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.622|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.623|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.624|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.625|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.626|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.627|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.628|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.629|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.630|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.631|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.632|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.633|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.634|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.635|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.636|2|424\n1.3.6.1.4.1.22626.1.5.4.1.1.2.637|2|434\n1.3.6.1.4.1.22626.1.5.4.1.1.2.638|2|450\n1.3.6.1.4.1.22626.1.5.4.1.1.2.639|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.640|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.641|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.642|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.643|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.644|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.645|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.646|2|529\n1.3.6.1.4.1.22626.1.5.4.1.1.2.647|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.648|2|468\n1.3.6.1.4.1.22626.1.5.4.1.1.2.649|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.650|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.651|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.652|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.653|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.654|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.655|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.656|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.657|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.658|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.659|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.660|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.661|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.662|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.663|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.664|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.665|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.666|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.667|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.668|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.669|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.670|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.671|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.672|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.673|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.674|2|394\n1.3.6.1.4.1.22626.1.5.4.1.1.2.675|2|419\n1.3.6.1.4.1.22626.1.5.4.1.1.2.676|2|429\n1.3.6.1.4.1.22626.1.5.4.1.1.2.677|2|439\n1.3.6.1.4.1.22626.1.5.4.1.1.2.678|2|452\n1.3.6.1.4.1.22626.1.5.4.1.1.2.679|2|460\n1.3.6.1.4.1.22626.1.5.4.1.1.2.680|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.681|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.682|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.683|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.684|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.685|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.686|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.687|2|530\n1.3.6.1.4.1.22626.1.5.4.1.1.2.688|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.689|2|478\n1.3.6.1.4.1.22626.1.5.4.1.1.2.690|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.691|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.692|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.693|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.694|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.695|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.696|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.697|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.698|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.699|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.700|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.701|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.702|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.703|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.704|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.705|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.706|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.707|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.708|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.709|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.710|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.711|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.712|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.713|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.714|2|405\n1.3.6.1.4.1.22626.1.5.4.1.1.2.715|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.716|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.717|2|388\n1.3.6.1.4.1.22626.1.5.4.1.1.2.718|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.719|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.720|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.721|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.722|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.723|2|435\n1.3.6.1.4.1.22626.1.5.4.1.1.2.724|2|444\n1.3.6.1.4.1.22626.1.5.4.1.1.2.725|2|460\n1.3.6.1.4.1.22626.1.5.4.1.1.2.726|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.727|2|490\n1.3.6.1.4.1.22626.1.5.4.1.1.2.728|2|500\n1.3.6.1.4.1.22626.1.5.4.1.1.2.729|2|512\n1.3.6.1.4.1.22626.1.5.4.1.1.2.730|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.731|2|535\n1.3.6.1.4.1.22626.1.5.4.1.1.2.732|2|535\n1.3.6.1.4.1.22626.1.5.4.1.1.2.733|2|534\n1.3.6.1.4.1.22626.1.5.4.1.1.2.734|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.735|2|452\n1.3.6.1.4.1.22626.1.5.4.1.1.2.736|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.737|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.738|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.739|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.740|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.741|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.742|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.743|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.744|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.745|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.746|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.747|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.748|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.749|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.750|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.751|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.752|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.753|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.754|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.755|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.756|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.757|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.758|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.759|2|393\n1.3.6.1.4.1.22626.1.5.4.1.1.2.760|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.761|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.762|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.763|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.764|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.765|2|424\n1.3.6.1.4.1.22626.1.5.4.1.1.2.766|2|434\n1.3.6.1.4.1.22626.1.5.4.1.1.2.767|2|442\n1.3.6.1.4.1.22626.1.5.4.1.1.2.768|2|452\n1.3.6.1.4.1.22626.1.5.4.1.1.2.769|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.770|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.771|2|500\n1.3.6.1.4.1.22626.1.5.4.1.1.2.772|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.773|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.774|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.775|2|524\n1.3.6.1.4.1.22626.1.5.4.1.1.2.776|2|509\n1.3.6.1.4.1.22626.1.5.4.1.1.2.777|2|458\n1.3.6.1.4.1.22626.1.5.4.1.1.2.778|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.779|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.780|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.781|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.782|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.783|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.784|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.785|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.786|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.787|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.788|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.789|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.790|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.791|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.792|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.793|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.794|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.795|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.796|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.797|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.798|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.799|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.800|2|385\n1.3.6.1.4.1.22626.1.5.4.1.1.2.801|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.802|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.803|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.804|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.805|2|377\n1.3.6.1.4.1.22626.1.5.4.1.1.2.806|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.807|2|383\n1.3.6.1.4.1.22626.1.5.4.1.1.2.808|2|399\n1.3.6.1.4.1.22626.1.5.4.1.1.2.809|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.810|2|419\n1.3.6.1.4.1.22626.1.5.4.1.1.2.811|2|434\n1.3.6.1.4.1.22626.1.5.4.1.1.2.812|2|449\n1.3.6.1.4.1.22626.1.5.4.1.1.2.813|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.814|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.815|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.816|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.817|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.818|2|525\n1.3.6.1.4.1.22626.1.5.4.1.1.2.819|2|524\n1.3.6.1.4.1.22626.1.5.4.1.1.2.820|2|504\n1.3.6.1.4.1.22626.1.5.4.1.1.2.821|2|442\n1.3.6.1.4.1.22626.1.5.4.1.1.2.822|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.823|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.824|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.825|2|401\n1.3.6.1.4.1.22626.1.5.4.1.1.2.826|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.827|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.828|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.829|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.830|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.831|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.832|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.833|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.834|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.835|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.836|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.837|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.838|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.839|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.840|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.841|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.842|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.843|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.844|2|380\n1.3.6.1.4.1.22626.1.5.4.1.1.2.845|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.846|2|377\n1.3.6.1.4.1.22626.1.5.4.1.1.2.847|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.848|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.849|2|399\n1.3.6.1.4.1.22626.1.5.4.1.1.2.850|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.851|2|429\n1.3.6.1.4.1.22626.1.5.4.1.1.2.852|2|444\n1.3.6.1.4.1.22626.1.5.4.1.1.2.853|2|450\n1.3.6.1.4.1.22626.1.5.4.1.1.2.854|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.855|2|472\n1.3.6.1.4.1.22626.1.5.4.1.1.2.856|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.857|2|500\n1.3.6.1.4.1.22626.1.5.4.1.1.2.858|2|510\n1.3.6.1.4.1.22626.1.5.4.1.1.2.859|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.860|2|520\n1.3.6.1.4.1.22626.1.5.4.1.1.2.861|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.862|2|483\n1.3.6.1.4.1.22626.1.5.4.1.1.2.863|2|422\n1.3.6.1.4.1.22626.1.5.4.1.1.2.864|2|414\n1.3.6.1.4.1.22626.1.5.4.1.1.2.865|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.866|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.867|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.868|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.869|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.870|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.871|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.872|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.873|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.874|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.875|2|391\n1.3.6.1.4.1.22626.1.5.4.1.1.2.876|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.877|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.878|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.879|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.880|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.881|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.882|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.883|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.884|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.885|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.886|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.887|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.888|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.889|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.890|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.891|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.892|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.893|2|377\n1.3.6.1.4.1.22626.1.5.4.1.1.2.894|2|372\n1.3.6.1.4.1.22626.1.5.4.1.1.2.895|2|372\n1.3.6.1.4.1.22626.1.5.4.1.1.2.896|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.897|2|368\n1.3.6.1.4.1.22626.1.5.4.1.1.2.898|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.899|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.900|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.901|2|424\n1.3.6.1.4.1.22626.1.5.4.1.1.2.902|2|439\n1.3.6.1.4.1.22626.1.5.4.1.1.2.903|2|449\n1.3.6.1.4.1.22626.1.5.4.1.1.2.904|2|459\n1.3.6.1.4.1.22626.1.5.4.1.1.2.905|2|475\n1.3.6.1.4.1.22626.1.5.4.1.1.2.906|2|485\n1.3.6.1.4.1.22626.1.5.4.1.1.2.907|2|495\n1.3.6.1.4.1.22626.1.5.4.1.1.2.908|2|510\n1.3.6.1.4.1.22626.1.5.4.1.1.2.909|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.910|2|509\n1.3.6.1.4.1.22626.1.5.4.1.1.2.911|2|493\n1.3.6.1.4.1.22626.1.5.4.1.1.2.912|2|437\n1.3.6.1.4.1.22626.1.5.4.1.1.2.913|2|401\n1.3.6.1.4.1.22626.1.5.4.1.1.2.914|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.915|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.916|2|396\n1.3.6.1.4.1.22626.1.5.4.1.1.2.917|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.918|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.919|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.920|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.921|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.922|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.923|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.924|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.925|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.926|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.927|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.928|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.929|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.930|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.931|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.932|2|390\n1.3.6.1.4.1.22626.1.5.4.1.1.2.933|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.934|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.935|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.936|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.937|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.938|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.2.939|2|377\n1.3.6.1.4.1.22626.1.5.4.1.1.2.940|2|377\n1.3.6.1.4.1.22626.1.5.4.1.1.2.941|2|373\n1.3.6.1.4.1.22626.1.5.4.1.1.2.942|2|378\n1.3.6.1.4.1.22626.1.5.4.1.1.2.943|2|404\n1.3.6.1.4.1.22626.1.5.4.1.1.2.944|2|432\n1.3.6.1.4.1.22626.1.5.4.1.1.2.945|2|437\n1.3.6.1.4.1.22626.1.5.4.1.1.2.946|2|450\n1.3.6.1.4.1.22626.1.5.4.1.1.2.947|2|455\n1.3.6.1.4.1.22626.1.5.4.1.1.2.948|2|465\n1.3.6.1.4.1.22626.1.5.4.1.1.2.949|2|478\n1.3.6.1.4.1.22626.1.5.4.1.1.2.950|2|487\n1.3.6.1.4.1.22626.1.5.4.1.1.2.951|2|492\n1.3.6.1.4.1.22626.1.5.4.1.1.2.952|2|505\n1.3.6.1.4.1.22626.1.5.4.1.1.2.953|2|510\n1.3.6.1.4.1.22626.1.5.4.1.1.2.954|2|515\n1.3.6.1.4.1.22626.1.5.4.1.1.2.955|2|522\n1.3.6.1.4.1.22626.1.5.4.1.1.2.956|2|524\n1.3.6.1.4.1.22626.1.5.4.1.1.2.957|2|514\n1.3.6.1.4.1.22626.1.5.4.1.1.2.958|2|488\n1.3.6.1.4.1.22626.1.5.4.1.1.2.959|2|417\n1.3.6.1.4.1.22626.1.5.4.1.1.2.960|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.961|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.962|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.963|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.964|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.965|2|406\n1.3.6.1.4.1.22626.1.5.4.1.1.2.966|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.967|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.968|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.969|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.970|2|401\n1.3.6.1.4.1.22626.1.5.4.1.1.2.971|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.972|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.973|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.974|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.975|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.976|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.977|2|412\n1.3.6.1.4.1.22626.1.5.4.1.1.2.978|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.979|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.980|2|407\n1.3.6.1.4.1.22626.1.5.4.1.1.2.981|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.982|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.983|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.984|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.985|2|402\n1.3.6.1.4.1.22626.1.5.4.1.1.2.986|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.987|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.988|2|397\n1.3.6.1.4.1.22626.1.5.4.1.1.2.989|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.990|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.991|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.992|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.993|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.994|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.995|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.996|2|392\n1.3.6.1.4.1.22626.1.5.4.1.1.2.997|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.998|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.999|2|387\n1.3.6.1.4.1.22626.1.5.4.1.1.2.1000|2|382\n1.3.6.1.4.1.22626.1.5.4.1.1.3.1|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.2|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.3|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.4|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.5|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.6|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.7|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.8|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.9|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.10|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.11|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.12|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.13|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.14|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.15|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.16|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.17|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.18|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.19|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.20|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.21|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.22|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.23|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.24|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.25|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.26|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.27|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.28|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.29|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.30|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.31|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.32|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.33|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.34|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.35|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.36|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.37|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.38|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.39|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.40|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.41|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.42|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.43|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.44|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.45|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.46|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.47|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.48|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.49|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.50|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.51|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.52|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.53|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.54|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.55|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.56|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.57|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.58|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.59|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.60|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.61|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.62|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.63|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.64|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.65|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.66|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.67|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.68|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.69|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.70|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.71|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.72|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.73|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.74|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.75|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.76|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.77|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.78|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.79|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.80|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.81|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.82|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.83|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.84|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.85|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.86|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.87|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.88|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.89|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.90|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.91|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.92|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.93|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.94|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.95|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.96|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.97|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.98|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.99|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.100|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.101|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.102|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.103|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.104|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.105|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.106|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.107|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.108|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.109|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.110|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.111|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.112|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.113|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.114|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.115|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.116|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.117|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.118|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.119|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.120|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.121|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.122|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.123|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.124|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.125|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.126|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.127|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.128|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.129|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.130|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.131|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.132|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.133|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.134|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.135|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.136|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.137|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.138|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.139|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.140|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.141|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.142|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.143|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.144|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.145|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.146|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.147|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.148|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.149|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.150|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.151|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.152|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.153|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.154|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.155|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.156|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.157|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.158|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.159|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.160|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.161|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.162|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.163|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.164|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.165|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.166|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.167|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.168|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.169|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.170|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.171|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.172|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.173|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.174|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.175|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.176|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.177|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.178|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.179|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.180|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.181|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.182|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.183|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.184|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.185|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.186|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.187|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.188|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.189|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.190|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.191|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.192|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.193|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.194|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.195|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.196|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.197|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.198|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.199|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.200|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.201|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.202|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.203|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.204|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.205|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.206|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.207|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.208|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.209|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.210|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.211|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.212|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.213|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.214|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.215|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.216|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.217|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.218|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.219|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.220|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.221|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.222|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.223|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.224|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.225|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.226|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.227|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.228|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.229|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.230|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.231|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.232|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.233|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.234|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.235|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.236|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.237|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.238|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.239|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.240|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.241|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.242|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.243|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.244|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.245|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.246|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.247|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.248|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.249|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.250|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.251|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.252|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.253|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.254|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.255|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.256|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.257|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.258|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.259|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.260|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.261|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.262|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.263|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.264|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.265|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.266|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.267|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.268|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.269|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.270|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.271|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.272|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.273|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.274|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.275|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.276|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.277|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.278|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.279|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.280|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.281|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.282|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.283|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.284|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.285|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.286|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.287|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.288|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.289|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.290|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.291|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.292|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.293|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.294|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.295|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.296|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.297|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.298|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.299|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.300|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.301|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.302|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.303|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.304|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.305|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.306|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.307|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.308|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.309|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.310|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.311|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.312|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.313|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.314|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.315|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.316|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.317|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.318|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.319|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.320|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.321|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.322|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.323|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.324|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.325|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.326|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.327|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.328|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.329|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.330|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.331|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.332|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.333|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.334|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.335|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.336|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.337|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.338|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.339|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.340|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.341|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.342|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.343|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.344|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.345|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.346|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.347|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.348|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.349|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.350|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.351|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.352|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.353|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.354|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.355|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.356|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.357|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.358|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.359|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.360|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.361|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.362|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.363|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.364|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.365|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.366|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.367|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.368|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.369|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.370|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.371|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.372|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.373|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.374|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.375|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.376|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.377|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.378|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.379|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.380|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.381|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.382|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.383|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.384|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.385|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.386|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.387|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.388|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.389|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.390|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.391|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.392|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.393|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.394|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.395|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.396|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.397|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.398|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.399|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.400|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.401|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.402|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.403|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.404|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.405|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.406|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.407|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.408|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.409|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.410|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.411|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.412|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.413|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.414|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.415|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.416|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.417|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.418|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.419|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.420|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.421|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.422|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.423|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.424|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.425|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.426|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.427|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.428|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.429|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.430|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.431|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.432|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.433|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.434|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.435|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.436|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.437|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.438|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.439|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.440|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.441|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.442|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.443|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.444|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.445|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.446|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.447|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.448|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.449|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.450|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.451|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.452|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.453|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.454|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.455|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.456|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.457|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.458|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.459|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.460|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.461|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.462|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.463|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.464|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.465|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.466|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.467|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.468|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.469|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.470|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.471|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.472|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.473|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.474|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.475|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.476|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.477|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.478|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.479|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.480|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.481|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.482|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.483|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.484|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.485|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.486|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.487|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.488|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.489|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.490|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.491|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.492|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.493|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.494|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.495|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.496|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.497|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.498|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.499|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.500|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.501|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.502|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.503|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.504|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.505|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.506|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.507|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.508|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.509|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.510|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.511|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.512|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.513|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.514|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.515|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.516|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.517|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.518|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.519|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.520|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.521|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.522|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.523|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.524|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.525|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.526|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.527|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.528|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.529|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.530|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.531|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.532|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.533|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.534|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.535|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.536|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.537|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.538|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.539|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.540|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.541|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.542|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.543|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.544|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.545|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.546|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.547|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.548|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.549|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.550|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.551|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.552|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.553|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.554|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.555|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.556|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.557|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.558|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.559|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.560|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.561|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.562|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.563|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.564|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.565|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.566|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.567|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.568|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.569|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.570|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.571|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.572|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.573|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.574|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.575|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.576|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.577|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.578|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.579|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.580|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.581|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.582|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.583|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.584|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.585|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.586|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.587|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.588|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.589|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.590|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.591|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.592|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.593|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.594|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.595|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.596|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.597|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.598|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.599|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.600|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.601|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.602|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.603|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.604|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.605|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.606|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.607|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.608|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.609|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.610|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.611|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.612|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.613|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.614|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.615|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.616|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.617|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.618|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.619|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.620|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.621|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.622|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.623|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.624|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.625|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.626|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.627|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.628|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.629|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.630|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.631|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.632|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.633|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.634|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.635|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.636|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.637|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.638|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.639|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.640|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.641|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.642|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.643|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.644|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.645|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.646|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.647|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.648|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.649|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.650|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.651|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.652|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.653|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.654|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.655|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.656|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.657|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.658|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.659|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.660|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.661|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.662|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.663|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.664|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.665|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.666|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.667|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.668|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.669|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.670|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.671|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.672|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.673|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.674|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.675|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.676|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.677|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.678|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.679|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.680|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.681|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.682|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.683|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.684|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.685|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.686|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.687|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.688|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.689|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.690|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.691|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.692|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.693|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.694|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.695|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.696|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.697|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.698|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.699|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.700|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.701|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.702|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.703|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.704|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.705|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.706|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.707|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.708|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.709|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.710|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.711|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.712|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.713|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.714|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.715|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.716|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.717|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.718|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.719|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.720|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.721|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.722|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.723|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.724|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.725|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.726|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.727|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.728|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.729|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.730|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.731|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.732|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.733|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.734|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.735|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.736|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.737|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.738|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.739|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.740|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.741|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.742|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.743|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.744|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.745|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.746|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.747|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.748|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.749|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.750|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.751|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.752|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.753|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.754|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.755|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.756|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.757|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.758|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.759|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.760|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.761|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.762|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.763|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.764|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.765|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.766|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.767|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.768|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.769|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.770|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.771|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.772|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.773|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.774|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.775|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.776|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.777|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.778|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.779|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.780|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.781|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.782|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.783|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.784|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.785|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.786|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.787|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.788|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.789|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.790|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.791|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.792|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.793|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.794|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.795|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.796|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.797|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.798|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.799|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.800|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.801|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.802|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.803|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.804|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.805|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.806|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.807|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.808|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.809|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.810|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.811|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.812|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.813|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.814|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.815|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.816|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.817|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.818|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.819|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.820|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.821|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.822|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.823|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.824|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.825|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.826|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.827|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.828|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.829|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.830|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.831|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.832|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.833|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.834|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.835|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.836|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.837|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.838|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.839|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.840|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.841|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.842|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.843|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.844|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.845|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.846|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.847|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.848|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.849|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.850|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.851|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.852|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.853|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.854|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.855|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.856|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.857|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.858|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.859|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.860|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.861|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.862|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.863|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.864|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.865|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.866|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.867|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.868|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.869|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.870|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.871|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.872|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.873|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.874|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.875|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.876|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.877|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.878|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.879|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.880|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.881|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.882|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.883|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.884|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.885|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.886|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.887|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.888|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.889|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.890|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.891|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.892|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.893|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.894|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.895|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.896|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.897|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.898|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.899|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.900|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.901|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.902|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.903|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.904|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.905|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.906|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.907|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.908|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.909|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.910|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.911|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.912|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.913|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.914|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.915|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.916|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.917|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.918|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.919|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.920|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.921|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.922|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.923|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.924|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.925|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.926|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.927|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.928|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.929|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.930|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.931|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.932|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.933|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.934|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.935|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.936|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.937|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.938|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.939|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.940|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.941|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.942|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.943|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.944|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.945|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.946|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.947|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.948|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.949|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.950|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.951|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.952|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.953|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.954|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.955|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.956|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.957|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.958|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.959|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.960|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.961|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.962|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.963|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.964|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.965|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.966|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.967|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.968|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.969|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.970|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.971|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.972|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.973|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.974|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.975|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.976|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.977|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.978|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.979|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.980|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.981|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.982|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.983|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.984|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.985|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.986|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.987|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.988|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.989|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.990|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.991|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.992|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.993|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.994|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.995|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.996|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.997|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.998|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.999|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.3.1000|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.1|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.2|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.3|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.4|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.5|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.6|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.7|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.8|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.9|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.10|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.11|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.12|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.13|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.14|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.15|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.16|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.17|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.18|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.19|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.20|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.21|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.22|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.23|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.24|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.25|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.26|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.27|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.28|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.29|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.30|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.31|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.32|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.33|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.34|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.35|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.36|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.37|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.38|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.39|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.40|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.41|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.42|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.43|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.44|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.45|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.46|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.47|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.48|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.49|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.50|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.51|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.52|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.53|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.54|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.55|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.56|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.57|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.58|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.59|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.60|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.61|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.62|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.63|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.64|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.65|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.66|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.67|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.68|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.69|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.70|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.71|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.72|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.73|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.74|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.75|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.76|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.77|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.78|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.79|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.80|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.81|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.82|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.83|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.84|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.85|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.86|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.87|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.88|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.89|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.90|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.91|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.92|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.93|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.94|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.95|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.96|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.97|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.98|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.99|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.100|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.101|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.102|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.103|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.104|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.105|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.106|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.107|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.108|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.109|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.110|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.111|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.112|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.113|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.114|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.115|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.116|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.117|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.118|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.119|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.120|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.121|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.122|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.123|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.124|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.125|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.126|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.127|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.128|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.129|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.130|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.131|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.132|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.133|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.134|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.135|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.136|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.137|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.138|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.139|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.140|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.141|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.142|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.143|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.144|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.145|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.146|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.147|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.148|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.149|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.150|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.151|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.152|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.153|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.154|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.155|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.156|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.157|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.158|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.159|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.160|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.161|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.162|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.163|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.164|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.165|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.166|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.167|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.168|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.169|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.170|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.171|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.172|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.173|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.174|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.175|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.176|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.177|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.178|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.179|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.180|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.181|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.182|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.183|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.184|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.185|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.186|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.187|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.188|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.189|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.190|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.191|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.192|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.193|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.194|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.195|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.196|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.197|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.198|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.199|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.200|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.201|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.202|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.203|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.204|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.205|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.206|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.207|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.208|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.209|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.210|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.211|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.212|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.213|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.214|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.215|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.216|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.217|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.218|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.219|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.220|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.221|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.222|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.223|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.224|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.225|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.226|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.227|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.228|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.229|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.230|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.231|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.232|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.233|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.234|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.235|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.236|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.237|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.238|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.239|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.240|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.241|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.242|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.243|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.244|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.245|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.246|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.247|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.248|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.249|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.250|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.251|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.252|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.253|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.254|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.255|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.256|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.257|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.258|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.259|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.260|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.261|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.262|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.263|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.264|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.265|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.266|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.267|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.268|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.269|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.270|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.271|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.272|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.273|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.274|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.275|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.276|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.277|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.278|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.279|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.280|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.281|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.282|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.283|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.284|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.285|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.286|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.287|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.288|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.289|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.290|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.291|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.292|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.293|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.294|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.295|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.296|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.297|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.298|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.299|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.300|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.301|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.302|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.303|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.304|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.305|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.306|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.307|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.308|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.309|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.310|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.311|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.312|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.313|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.314|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.315|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.316|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.317|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.318|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.319|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.320|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.321|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.322|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.323|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.324|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.325|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.326|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.327|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.328|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.329|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.330|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.331|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.332|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.333|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.334|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.335|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.336|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.337|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.338|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.339|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.340|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.341|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.342|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.343|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.344|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.345|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.346|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.347|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.348|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.349|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.350|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.351|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.352|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.353|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.354|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.355|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.356|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.357|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.358|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.359|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.360|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.361|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.362|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.363|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.364|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.365|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.366|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.367|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.368|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.369|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.370|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.371|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.372|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.373|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.374|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.375|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.376|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.377|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.378|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.379|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.380|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.381|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.382|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.383|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.384|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.385|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.386|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.387|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.388|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.389|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.390|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.391|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.392|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.393|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.394|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.395|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.396|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.397|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.398|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.399|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.400|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.401|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.402|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.403|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.404|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.405|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.406|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.407|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.408|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.409|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.410|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.411|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.412|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.413|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.414|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.415|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.416|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.417|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.418|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.419|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.420|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.421|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.422|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.423|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.424|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.425|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.426|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.427|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.428|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.429|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.430|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.431|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.432|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.433|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.434|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.435|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.436|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.437|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.438|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.439|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.440|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.441|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.442|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.443|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.444|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.445|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.446|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.447|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.448|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.449|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.450|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.451|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.452|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.453|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.454|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.455|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.456|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.457|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.458|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.459|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.460|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.461|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.462|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.463|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.464|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.465|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.466|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.467|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.468|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.469|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.470|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.471|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.472|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.473|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.474|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.475|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.476|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.477|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.478|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.479|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.480|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.481|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.482|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.483|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.484|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.485|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.486|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.487|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.488|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.489|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.490|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.491|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.492|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.493|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.494|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.495|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.496|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.497|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.498|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.499|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.500|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.501|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.502|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.503|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.504|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.505|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.506|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.507|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.508|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.509|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.510|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.511|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.512|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.513|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.514|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.515|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.516|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.517|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.518|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.519|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.520|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.521|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.522|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.523|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.524|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.525|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.526|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.527|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.528|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.529|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.530|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.531|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.532|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.533|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.534|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.535|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.536|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.537|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.538|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.539|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.540|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.541|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.542|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.543|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.544|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.545|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.546|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.547|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.548|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.549|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.550|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.551|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.552|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.553|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.554|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.555|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.556|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.557|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.558|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.559|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.560|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.561|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.562|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.563|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.564|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.565|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.566|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.567|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.568|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.569|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.570|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.571|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.572|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.573|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.574|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.575|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.576|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.577|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.578|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.579|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.580|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.581|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.582|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.583|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.584|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.585|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.586|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.587|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.588|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.589|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.590|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.591|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.592|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.593|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.594|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.595|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.596|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.597|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.598|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.599|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.600|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.601|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.602|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.603|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.604|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.605|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.606|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.607|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.608|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.609|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.610|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.611|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.612|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.613|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.614|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.615|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.616|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.617|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.618|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.619|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.620|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.621|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.622|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.623|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.624|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.625|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.626|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.627|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.628|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.629|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.630|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.631|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.632|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.633|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.634|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.635|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.636|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.637|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.638|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.639|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.640|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.641|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.642|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.643|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.644|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.645|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.646|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.647|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.648|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.649|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.650|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.651|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.652|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.653|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.654|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.655|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.656|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.657|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.658|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.659|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.660|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.661|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.662|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.663|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.664|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.665|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.666|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.667|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.668|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.669|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.670|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.671|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.672|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.673|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.674|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.675|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.676|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.677|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.678|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.679|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.680|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.681|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.682|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.683|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.684|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.685|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.686|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.687|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.688|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.689|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.690|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.691|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.692|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.693|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.694|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.695|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.696|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.697|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.698|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.699|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.700|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.701|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.702|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.703|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.704|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.705|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.706|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.707|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.708|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.709|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.710|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.711|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.712|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.713|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.714|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.715|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.716|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.717|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.718|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.719|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.720|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.721|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.722|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.723|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.724|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.725|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.726|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.727|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.728|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.729|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.730|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.731|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.732|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.733|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.734|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.735|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.736|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.737|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.738|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.739|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.740|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.741|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.742|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.743|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.744|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.745|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.746|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.747|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.748|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.749|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.750|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.751|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.752|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.753|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.754|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.755|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.756|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.757|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.758|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.759|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.760|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.761|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.762|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.763|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.764|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.765|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.766|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.767|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.768|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.769|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.770|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.771|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.772|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.773|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.774|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.775|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.776|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.777|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.778|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.779|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.780|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.781|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.782|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.783|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.784|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.785|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.786|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.787|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.788|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.789|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.790|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.791|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.792|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.793|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.794|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.795|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.796|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.797|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.798|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.799|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.800|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.801|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.802|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.803|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.804|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.805|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.806|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.807|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.808|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.809|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.810|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.811|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.812|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.813|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.814|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.815|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.816|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.817|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.818|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.819|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.820|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.821|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.822|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.823|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.824|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.825|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.826|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.827|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.828|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.829|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.830|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.831|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.832|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.833|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.834|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.835|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.836|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.837|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.838|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.839|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.840|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.841|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.842|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.843|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.844|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.845|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.846|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.847|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.848|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.849|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.850|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.851|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.852|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.853|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.854|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.855|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.856|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.857|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.858|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.859|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.860|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.861|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.862|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.863|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.864|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.865|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.866|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.867|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.868|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.869|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.870|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.871|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.872|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.873|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.874|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.875|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.876|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.877|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.878|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.879|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.880|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.881|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.882|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.883|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.884|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.885|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.886|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.887|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.888|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.889|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.890|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.891|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.892|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.893|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.894|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.895|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.896|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.897|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.898|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.899|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.900|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.901|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.902|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.903|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.904|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.905|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.906|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.907|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.908|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.909|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.910|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.911|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.912|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.913|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.914|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.915|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.916|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.917|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.918|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.919|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.920|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.921|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.922|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.923|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.924|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.925|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.926|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.927|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.928|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.929|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.930|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.931|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.932|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.933|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.934|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.935|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.936|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.937|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.938|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.939|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.940|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.941|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.942|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.943|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.944|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.945|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.946|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.947|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.948|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.949|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.950|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.951|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.952|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.953|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.954|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.955|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.956|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.957|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.958|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.959|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.960|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.961|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.962|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.963|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.964|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.965|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.966|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.967|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.968|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.969|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.970|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.971|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.972|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.973|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.974|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.975|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.976|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.977|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.978|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.979|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.980|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.981|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.982|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.983|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.984|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.985|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.986|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.987|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.988|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.989|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.990|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.991|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.992|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.993|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.994|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.995|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.996|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.997|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.998|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.999|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.4.1000|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.1|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.2|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.3|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.4|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.5|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.6|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.7|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.8|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.9|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.10|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.11|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.12|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.13|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.14|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.15|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.16|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.17|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.18|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.19|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.20|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.21|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.22|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.23|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.24|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.25|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.26|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.27|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.28|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.29|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.30|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.31|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.32|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.33|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.34|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.35|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.36|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.37|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.38|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.39|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.40|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.41|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.42|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.43|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.44|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.45|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.46|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.47|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.48|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.49|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.50|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.51|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.52|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.53|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.54|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.55|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.56|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.57|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.58|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.59|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.60|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.61|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.62|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.63|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.64|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.65|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.66|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.67|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.68|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.69|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.70|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.71|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.72|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.73|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.74|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.75|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.76|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.77|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.78|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.79|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.80|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.81|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.82|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.83|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.84|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.85|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.86|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.87|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.88|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.89|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.90|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.91|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.92|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.93|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.94|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.95|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.96|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.97|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.98|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.99|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.100|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.101|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.102|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.103|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.104|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.105|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.106|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.107|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.108|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.109|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.110|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.111|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.112|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.113|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.114|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.115|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.116|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.117|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.118|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.119|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.120|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.121|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.122|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.123|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.124|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.125|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.126|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.127|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.128|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.129|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.130|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.131|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.132|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.133|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.134|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.135|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.136|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.137|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.138|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.139|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.140|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.141|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.142|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.143|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.144|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.145|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.146|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.147|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.148|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.149|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.150|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.151|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.152|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.153|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.154|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.155|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.156|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.157|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.158|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.159|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.160|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.161|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.162|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.163|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.164|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.165|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.166|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.167|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.168|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.169|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.170|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.171|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.172|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.173|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.174|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.175|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.176|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.177|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.178|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.179|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.180|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.181|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.182|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.183|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.184|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.185|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.186|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.187|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.188|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.189|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.190|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.191|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.192|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.193|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.194|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.195|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.196|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.197|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.198|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.199|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.200|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.201|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.202|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.203|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.204|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.205|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.206|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.207|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.208|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.209|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.210|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.211|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.212|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.213|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.214|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.215|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.216|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.217|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.218|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.219|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.220|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.221|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.222|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.223|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.224|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.225|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.226|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.227|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.228|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.229|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.230|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.231|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.232|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.233|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.234|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.235|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.236|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.237|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.238|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.239|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.240|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.241|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.242|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.243|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.244|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.245|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.246|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.247|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.248|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.249|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.250|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.251|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.252|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.253|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.254|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.255|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.256|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.257|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.258|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.259|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.260|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.261|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.262|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.263|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.264|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.265|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.266|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.267|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.268|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.269|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.270|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.271|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.272|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.273|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.274|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.275|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.276|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.277|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.278|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.279|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.280|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.281|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.282|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.283|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.284|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.285|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.286|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.287|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.288|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.289|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.290|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.291|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.292|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.293|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.294|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.295|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.296|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.297|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.298|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.299|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.300|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.301|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.302|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.303|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.304|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.305|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.306|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.307|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.308|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.309|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.310|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.311|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.312|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.313|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.314|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.315|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.316|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.317|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.318|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.319|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.320|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.321|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.322|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.323|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.324|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.325|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.326|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.327|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.328|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.329|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.330|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.331|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.332|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.333|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.334|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.335|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.336|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.337|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.338|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.339|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.340|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.341|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.342|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.343|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.344|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.345|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.346|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.347|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.348|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.349|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.350|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.351|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.352|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.353|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.354|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.355|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.356|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.357|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.358|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.359|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.360|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.361|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.362|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.363|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.364|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.365|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.366|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.367|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.368|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.369|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.370|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.371|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.372|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.373|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.374|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.375|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.376|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.377|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.378|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.379|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.380|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.381|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.382|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.383|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.384|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.385|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.386|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.387|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.388|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.389|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.390|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.391|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.392|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.393|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.394|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.395|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.396|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.397|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.398|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.399|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.400|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.401|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.402|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.403|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.404|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.405|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.406|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.407|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.408|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.409|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.410|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.411|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.412|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.413|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.414|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.415|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.416|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.417|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.418|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.419|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.420|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.421|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.422|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.423|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.424|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.425|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.426|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.427|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.428|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.429|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.430|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.431|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.432|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.433|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.434|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.435|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.436|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.437|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.438|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.439|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.440|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.441|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.442|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.443|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.444|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.445|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.446|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.447|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.448|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.449|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.450|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.451|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.452|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.453|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.454|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.455|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.456|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.457|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.458|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.459|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.460|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.461|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.462|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.463|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.464|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.465|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.466|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.467|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.468|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.469|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.470|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.471|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.472|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.473|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.474|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.475|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.476|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.477|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.478|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.479|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.480|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.481|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.482|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.483|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.484|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.485|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.486|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.487|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.488|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.489|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.490|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.491|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.492|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.493|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.494|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.495|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.496|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.497|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.498|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.499|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.500|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.501|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.502|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.503|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.504|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.505|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.506|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.507|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.508|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.509|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.510|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.511|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.512|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.513|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.514|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.515|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.516|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.517|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.518|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.519|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.520|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.521|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.522|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.523|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.524|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.525|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.526|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.527|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.528|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.529|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.530|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.531|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.532|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.533|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.534|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.535|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.536|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.537|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.538|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.539|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.540|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.541|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.542|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.543|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.544|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.545|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.546|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.547|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.548|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.549|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.550|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.551|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.552|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.553|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.554|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.555|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.556|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.557|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.558|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.559|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.560|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.561|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.562|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.563|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.564|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.565|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.566|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.567|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.568|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.569|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.570|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.571|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.572|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.573|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.574|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.575|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.576|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.577|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.578|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.579|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.580|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.581|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.582|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.583|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.584|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.585|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.586|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.587|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.588|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.589|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.590|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.591|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.592|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.593|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.594|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.595|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.596|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.597|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.598|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.599|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.600|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.601|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.602|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.603|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.604|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.605|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.606|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.607|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.608|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.609|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.610|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.611|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.612|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.613|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.614|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.615|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.616|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.617|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.618|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.619|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.620|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.621|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.622|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.623|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.624|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.625|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.626|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.627|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.628|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.629|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.630|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.631|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.632|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.633|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.634|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.635|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.636|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.637|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.638|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.639|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.640|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.641|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.642|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.643|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.644|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.645|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.646|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.647|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.648|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.649|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.650|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.651|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.652|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.653|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.654|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.655|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.656|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.657|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.658|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.659|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.660|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.661|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.662|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.663|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.664|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.665|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.666|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.667|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.668|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.669|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.670|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.671|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.672|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.673|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.674|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.675|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.676|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.677|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.678|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.679|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.680|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.681|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.682|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.683|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.684|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.685|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.686|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.687|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.688|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.689|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.690|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.691|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.692|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.693|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.694|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.695|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.696|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.697|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.698|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.699|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.700|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.701|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.702|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.703|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.704|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.705|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.706|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.707|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.708|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.709|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.710|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.711|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.712|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.713|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.714|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.715|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.716|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.717|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.718|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.719|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.720|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.721|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.722|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.723|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.724|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.725|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.726|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.727|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.728|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.729|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.730|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.731|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.732|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.733|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.734|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.735|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.736|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.737|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.738|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.739|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.740|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.741|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.742|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.743|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.744|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.745|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.746|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.747|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.748|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.749|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.750|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.751|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.752|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.753|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.754|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.755|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.756|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.757|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.758|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.759|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.760|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.761|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.762|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.763|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.764|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.765|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.766|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.767|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.768|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.769|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.770|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.771|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.772|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.773|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.774|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.775|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.776|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.777|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.778|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.779|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.780|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.781|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.782|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.783|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.784|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.785|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.786|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.787|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.788|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.789|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.790|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.791|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.792|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.793|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.794|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.795|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.796|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.797|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.798|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.799|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.800|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.801|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.802|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.803|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.804|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.805|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.806|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.807|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.808|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.809|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.810|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.811|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.812|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.813|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.814|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.815|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.816|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.817|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.818|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.819|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.820|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.821|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.822|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.823|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.824|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.825|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.826|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.827|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.828|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.829|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.830|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.831|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.832|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.833|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.834|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.835|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.836|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.837|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.838|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.839|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.840|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.841|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.842|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.843|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.844|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.845|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.846|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.847|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.848|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.849|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.850|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.851|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.852|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.853|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.854|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.855|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.856|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.857|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.858|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.859|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.860|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.861|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.862|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.863|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.864|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.865|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.866|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.867|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.868|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.869|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.870|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.871|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.872|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.873|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.874|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.875|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.876|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.877|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.878|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.879|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.880|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.881|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.882|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.883|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.884|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.885|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.886|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.887|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.888|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.889|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.890|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.891|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.892|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.893|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.894|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.895|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.896|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.897|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.898|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.899|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.900|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.901|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.902|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.903|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.904|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.905|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.906|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.907|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.908|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.909|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.910|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.911|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.912|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.913|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.914|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.915|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.916|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.917|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.918|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.919|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.920|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.921|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.922|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.923|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.924|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.925|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.926|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.927|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.928|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.929|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.930|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.931|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.932|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.933|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.934|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.935|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.936|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.937|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.938|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.939|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.940|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.941|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.942|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.943|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.944|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.945|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.946|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.947|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.948|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.949|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.950|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.951|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.952|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.953|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.954|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.955|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.956|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.957|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.958|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.959|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.960|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.961|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.962|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.963|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.964|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.965|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.966|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.967|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.968|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.969|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.970|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.971|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.972|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.973|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.974|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.975|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.976|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.977|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.978|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.979|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.980|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.981|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.982|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.983|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.984|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.985|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.986|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.987|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.988|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.989|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.990|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.991|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.992|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.993|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.994|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.995|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.996|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.997|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.998|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.999|2|-11000\n1.3.6.1.4.1.22626.1.5.4.1.1.5.1000|2|-11000\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/T3611.snmprec",
    "content": "1.3.6.1.4.1.22626.1.2.1.1.0|4x|3135\n1.3.6.1.4.1.22626.1.2.1.10.0|4x|70657263656e745248\n1.3.6.1.4.1.22626.1.2.1.2.0|4x|3230\n1.3.6.1.4.1.22626.1.2.1.9.0|4x|63656c73697573\n1.3.6.1.4.1.22626.1.2.2.1.0|4x|73656e736f722e6578616d706c652e636f6d\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/apc-pdu.snmprec",
    "content": "1.3.6.1.4.1.318.1.1.4.1.1.0|4|B2\n1.3.6.1.4.1.318.1.1.4.1.2.0|4x|76332e372e34\n1.3.6.1.4.1.318.1.1.4.1.3.0|4x|30352f31382f32303133\n1.3.6.1.4.1.318.1.1.4.1.4.0|4|AP7853\n1.3.6.1.4.1.318.1.1.4.1.5.0|4|ZA1320014895\n1.3.6.1.4.1.318.1.1.4.4.1.0|2|0\n1.3.6.1.4.1.318.1.1.4.5.1.0|2|0\n1.3.6.1.4.1.318.1.1.12.1.1.0|4|RackPDU\n1.3.6.1.4.1.318.1.1.12.1.2.0|4|B2\n1.3.6.1.4.1.318.1.1.12.1.3.0|4x|76332e372e34\n1.3.6.1.4.1.318.1.1.12.1.4.0|4x|30352f31382f32303133\n1.3.6.1.4.1.318.1.1.12.1.5.0|4|AP7853\n1.3.6.1.4.1.318.1.1.12.1.6.0|4|ZA1320014895\n1.3.6.1.4.1.318.1.1.12.1.7.0|2|32\n1.3.6.1.4.1.318.1.1.12.1.8.0|2|24\n1.3.6.1.4.1.318.1.1.12.1.9.0|2|1\n1.3.6.1.4.1.318.1.1.12.1.10.0|2|2\n1.3.6.1.4.1.318.1.1.12.1.11.0|2|16\n1.3.6.1.4.1.318.1.1.12.1.12.0|2|2\n1.3.6.1.4.1.318.1.1.12.1.13.0|2|1\n1.3.6.1.4.1.318.1.1.12.1.14.0|2|1\n1.3.6.1.4.1.318.1.1.12.1.15.0|2|230\n1.3.6.1.4.1.318.1.1.12.1.16.0|2|0\n1.3.6.1.4.1.318.1.1.12.1.17.0|2|1000\n1.3.6.1.4.1.318.1.1.12.1.18.0|2|0\n1.3.6.1.4.1.318.1.1.12.1.19.0|2|0\n1.3.6.1.4.1.318.1.1.12.2.1.1.0|2|0\n1.3.6.1.4.1.318.1.1.12.2.1.2.0|2|1\n1.3.6.1.4.1.318.1.1.12.2.1.3.0|2|32\n1.3.6.1.4.1.318.1.1.12.2.1.4.0|2|2\n1.3.6.1.4.1.318.1.1.12.2.1.5.0|2|3\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.1.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.1.2|2|2\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.1.3|2|3\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.2.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.2.2|2|2\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.2.3|2|3\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.3.1|2|16\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.3.2|2|16\n1.3.6.1.4.1.318.1.1.12.2.1.6.1.3.3|2|32\n1.3.6.1.4.1.318.1.1.12.2.1.7.0|2|0\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.1.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.1.2|2|2\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.1.3|2|3\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1|66|0\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.2|66|0\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.3|66|0\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.3.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.3.2|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.3.3|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.4.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.4.2|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.4.3|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.5.1|2|0\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.5.2|2|1\n1.3.6.1.4.1.318.1.1.12.2.3.1.1.5.3|2|2\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.1.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.1.2|2|2\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.1.3|2|3\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.2.1|2|0\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.2.2|2|0\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.2.3|2|0\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.3.1|2|12\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.3.2|2|12\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.3.3|2|24\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.4.1|2|16\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.4.2|2|16\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.4.3|2|32\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.5.1|2|1\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.5.2|2|1\n1.3.6.1.4.1.318.1.1.12.2.4.1.1.5.3|2|1\n1.3.6.1.4.1.318.1.1.12.3.1.3.0|2|0\n1.3.6.1.4.1.318.1.1.12.3.1.4.0|2|24\n1.3.6.1.4.1.318.1.1.12.3.1.5.0|2|0\n1.3.6.1.4.1.318.1.1.12.3.4.2.0|2|0\n1.3.6.1.4.1.318.1.1.12.4.1.1.0|2|1\n1.3.6.1.4.1.318.1.1.12.4.1.2.0|2|3\n1.3.6.1.4.1.318.1.1.12.4.1.3.0|2|1\n1.3.6.1.4.1.318.1.1.12.5.1.0|2|2\n1.3.6.1.4.1.318.1.1.12.5.2.1.1.1|2|1\n1.3.6.1.4.1.318.1.1.12.5.2.1.1.2|2|2\n1.3.6.1.4.1.318.1.1.12.5.2.1.2.1|2|1\n1.3.6.1.4.1.318.1.1.12.5.2.1.2.2|2|2\n1.3.6.1.4.1.318.1.1.12.5.2.1.3.1|2|1\n1.3.6.1.4.1.318.1.1.12.5.2.1.3.2|2|1\n1.3.6.1.4.1.318.1.1.12.5.3.0|2|0\n1.3.6.1.4.1.318.1.1.12.5.5.0|2|0\n1.3.6.1.4.1.318.1.4.2.1.0|2|1\n1.3.6.1.4.1.318.1.4.2.2.1.1.1|2|1\n1.3.6.1.4.1.318.1.4.2.2.1.2.1|4x|5261636b205044555f495358\n1.3.6.1.4.1.318.1.4.2.2.1.3.1|4|ZA1320014895\n1.3.6.1.4.1.318.1.4.2.2.1.4.1|2|2\n1.3.6.1.4.1.318.1.4.2.2.1.5.1|4x|5261636b20504455\n1.3.6.1.4.1.318.1.4.2.2.1.6.1|4|1\n1.3.6.1.4.1.318.1.4.2.2.1.7.1|4|Unknown\n1.3.6.1.4.1.318.1.4.2.2.1.8.1|2|255\n1.3.6.1.4.1.318.1.4.2.2.1.9.1|4|RackPDU\n1.3.6.1.4.1.318.1.4.2.2.1.10.1|2|255\n1.3.6.1.4.1.318.1.4.2.2.1.11.1|2|1\n1.3.6.1.4.1.318.1.4.2.2.1.12.1|4|0\n1.3.6.1.4.1.318.1.4.2.2.1.13.1|2|1\n1.3.6.1.4.1.318.1.4.2.2.1.14.1|4x|53422d31\n1.3.6.1.4.1.318.1.4.2.3.0|2|2\n1.3.6.1.4.1.318.1.4.2.4.1.1.1|2|1\n1.3.6.1.4.1.318.1.4.2.4.1.1.2|2|2\n1.3.6.1.4.1.318.1.4.2.4.1.2.1|4|ZA1320014895\n1.3.6.1.4.1.318.1.4.2.4.1.2.2|4|ZA1320014895\n1.3.6.1.4.1.318.1.4.2.4.1.3.1|4x|6170635f687730325f616f735f3337342e62696e\n1.3.6.1.4.1.318.1.4.2.4.1.3.2|4x|6170635f687730325f727064755f3337342e62696e\n1.3.6.1.4.1.318.1.4.2.4.1.4.1|4x|76332e372e34\n1.3.6.1.4.1.318.1.4.2.4.1.4.2|4x|76332e372e34\n1.3.6.1.4.1.318.1.4.2.5.0|2|19\n1.3.6.1.4.1.318.1.4.2.6.1.1.1|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.1.2|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.1.3|2|3\n1.3.6.1.4.1.318.1.4.2.6.1.1.4|2|4\n1.3.6.1.4.1.318.1.4.2.6.1.1.5|2|5\n1.3.6.1.4.1.318.1.4.2.6.1.1.6|2|6\n1.3.6.1.4.1.318.1.4.2.6.1.1.7|2|7\n1.3.6.1.4.1.318.1.4.2.6.1.1.8|2|8\n1.3.6.1.4.1.318.1.4.2.6.1.1.9|2|9\n1.3.6.1.4.1.318.1.4.2.6.1.1.10|2|10\n1.3.6.1.4.1.318.1.4.2.6.1.1.11|2|11\n1.3.6.1.4.1.318.1.4.2.6.1.1.12|2|12\n1.3.6.1.4.1.318.1.4.2.6.1.1.13|2|13\n1.3.6.1.4.1.318.1.4.2.6.1.1.14|2|14\n1.3.6.1.4.1.318.1.4.2.6.1.1.15|2|15\n1.3.6.1.4.1.318.1.4.2.6.1.1.16|2|16\n1.3.6.1.4.1.318.1.4.2.6.1.1.17|2|17\n1.3.6.1.4.1.318.1.4.2.6.1.1.18|2|18\n1.3.6.1.4.1.318.1.4.2.6.1.1.19|2|19\n1.3.6.1.4.1.318.1.4.2.6.1.2.1|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.2.2|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.2.3|2|3\n1.3.6.1.4.1.318.1.4.2.6.1.2.4|2|4\n1.3.6.1.4.1.318.1.4.2.6.1.2.5|2|5\n1.3.6.1.4.1.318.1.4.2.6.1.2.6|2|6\n1.3.6.1.4.1.318.1.4.2.6.1.2.7|2|7\n1.3.6.1.4.1.318.1.4.2.6.1.2.8|2|8\n1.3.6.1.4.1.318.1.4.2.6.1.2.9|2|9\n1.3.6.1.4.1.318.1.4.2.6.1.2.10|2|10\n1.3.6.1.4.1.318.1.4.2.6.1.2.11|2|11\n1.3.6.1.4.1.318.1.4.2.6.1.2.12|2|12\n1.3.6.1.4.1.318.1.4.2.6.1.2.13|2|13\n1.3.6.1.4.1.318.1.4.2.6.1.2.14|2|14\n1.3.6.1.4.1.318.1.4.2.6.1.2.15|2|15\n1.3.6.1.4.1.318.1.4.2.6.1.2.16|2|16\n1.3.6.1.4.1.318.1.4.2.6.1.2.17|2|17\n1.3.6.1.4.1.318.1.4.2.6.1.2.18|2|18\n1.3.6.1.4.1.318.1.4.2.6.1.2.19|2|19\n1.3.6.1.4.1.318.1.4.2.6.1.3.1|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.2|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.3|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.4|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.5|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.6|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.7|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.8|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.9|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.10|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.11|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.12|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.13|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.14|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.15|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.16|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.17|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.18|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.3.19|4|0\n1.3.6.1.4.1.318.1.4.2.6.1.4.1|4|MTYx\n1.3.6.1.4.1.318.1.4.2.6.1.4.2|4x|4d6a4d3d\n1.3.6.1.4.1.318.1.4.2.6.1.4.3|4x|4f44413d\n1.3.6.1.4.1.318.1.4.2.6.1.4.4|4x|4f546b314d413d3d\n1.3.6.1.4.1.318.1.4.2.6.1.4.5|4x|4f546b314d413d3d\n1.3.6.1.4.1.318.1.4.2.6.1.4.6|4|NDQz\n1.3.6.1.4.1.318.1.4.2.6.1.4.7|4x|4d6a493d\n1.3.6.1.4.1.318.1.4.2.6.1.4.8|4x|4d6a493d\n1.3.6.1.4.1.318.1.4.2.6.1.4.9|4|MTIz\n1.3.6.1.4.1.318.1.4.2.6.1.4.10|4x|4d6a553d\n1.3.6.1.4.1.318.1.4.2.6.1.4.11|4x|4d6a453d\n1.3.6.1.4.1.318.1.4.2.6.1.4.12|4x|4d6a453d\n1.3.6.1.4.1.318.1.4.2.6.1.4.13|4x|4e6a673d\n1.3.6.1.4.1.318.1.4.2.6.1.4.14|4|NTQ2\n1.3.6.1.4.1.318.1.4.2.6.1.4.15|4x|4d5467784d673d3d\n1.3.6.1.4.1.318.1.4.2.6.1.4.16|4|MTYx\n1.3.6.1.4.1.318.1.4.2.6.1.4.17|4x|4d6a453d\n1.3.6.1.4.1.318.1.4.2.6.1.4.18|4x|4d6a453d\n1.3.6.1.4.1.318.1.4.2.6.1.4.19|4x|4f546b314d513d3d\n1.3.6.1.4.1.318.1.4.2.6.1.5.1|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.2|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.3|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.4|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.5|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.6|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.7|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.8|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.9|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.10|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.11|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.12|2|2\n1.3.6.1.4.1.318.1.4.2.6.1.5.13|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.14|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.15|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.16|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.17|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.18|2|1\n1.3.6.1.4.1.318.1.4.2.6.1.5.19|2|1\n1.3.6.1.4.1.318.1.4.2.7.0|2|1\n1.3.6.1.4.1.318.1.4.2.8.1.1.1|2|1\n1.3.6.1.4.1.318.1.4.2.8.1.2.1|4|power\n1.3.6.1.4.1.318.1.4.2.8.1.3.1|4|pdu\n1.3.6.1.4.1.318.1.4.2.8.1.4.1|4|rpdu\n1.3.6.1.4.1.318.1.4.2.8.1.5.1|4|version7\n1.3.6.1.4.1.318.1.4.2.8.1.6.1|2|1\n1.3.6.1.4.1.318.1.4.2.9.0|2|0\n1.3.6.1.4.1.318.1.4.2.10.0|2|0\n1.3.6.1.4.1.318.1.4.2.12.0|2|1\n1.3.6.1.4.1.318.1.4.4.1.0|2|0\n1.3.6.1.4.1.318.1.4.4.3.0|4x|3c486f7374204e616d65206f722049503e2c3c312064696769742074797065206964656e7469666965723e\n1.3.6.1.4.1.318.1.4.4.4.0|2|0\n1.3.6.1.4.1.318.1.4.5.1.0|2|12\n1.3.6.1.4.1.318.1.4.5.2.1.1.1|2|1\n1.3.6.1.4.1.318.1.4.5.2.1.1.2|2|2\n1.3.6.1.4.1.318.1.4.5.2.1.1.3|2|3\n1.3.6.1.4.1.318.1.4.5.2.1.1.4|2|4\n1.3.6.1.4.1.318.1.4.5.2.1.1.5|2|5\n1.3.6.1.4.1.318.1.4.5.2.1.1.6|2|6\n1.3.6.1.4.1.318.1.4.5.2.1.1.7|2|7\n1.3.6.1.4.1.318.1.4.5.2.1.1.8|2|8\n1.3.6.1.4.1.318.1.4.5.2.1.1.9|2|9\n1.3.6.1.4.1.318.1.4.5.2.1.1.10|2|10\n1.3.6.1.4.1.318.1.4.5.2.1.1.11|2|11\n1.3.6.1.4.1.318.1.4.5.2.1.1.12|2|12\n1.3.6.1.4.1.318.1.4.5.2.1.2.1|2|3841\n1.3.6.1.4.1.318.1.4.5.2.1.2.2|2|3843\n1.3.6.1.4.1.318.1.4.5.2.1.2.3|2|3845\n1.3.6.1.4.1.318.1.4.5.2.1.2.4|2|3848\n1.3.6.1.4.1.318.1.4.5.2.1.2.5|2|3862\n1.3.6.1.4.1.318.1.4.5.2.1.2.6|2|3864\n1.3.6.1.4.1.318.1.4.5.2.1.2.7|2|3856\n1.3.6.1.4.1.318.1.4.5.2.1.2.8|2|3858\n1.3.6.1.4.1.318.1.4.5.2.1.2.9|2|3860\n1.3.6.1.4.1.318.1.4.5.2.1.2.10|2|3871\n1.3.6.1.4.1.318.1.4.5.2.1.2.11|2|3873\n1.3.6.1.4.1.318.1.4.5.2.1.2.12|2|3875\n1.3.6.1.4.1.318.1.4.6.1.1.0|4x|07000000\n1.3.6.1.4.1.318.1.4.7.1.0|2|4\n1.3.6.1.4.1.318.1.4.7.3.0|2|4\n1.3.6.1.4.1.318.1.4.7.4.0|2|3\n1.3.6.1.4.1.318.1.4.7.5.0|2|3\n1.3.6.1.4.1.318.2.1.1.0|2|4\n1.3.6.1.4.1.318.2.1.2.1.1.1|2|1\n1.3.6.1.4.1.318.2.1.2.1.1.2|2|2\n1.3.6.1.4.1.318.2.1.2.1.1.3|2|3\n1.3.6.1.4.1.318.2.1.2.1.1.4|2|4\n1.3.6.1.4.1.318.2.1.2.1.2.1|64x|00000000\n1.3.6.1.4.1.318.2.1.2.1.2.2|64x|00000000\n1.3.6.1.4.1.318.2.1.2.1.2.3|64x|00000000\n1.3.6.1.4.1.318.2.1.2.1.2.4|64x|00000000\n1.3.6.1.4.1.318.2.1.2.1.3.1|4|public\n1.3.6.1.4.1.318.2.1.2.1.3.2|4|public\n1.3.6.1.4.1.318.2.1.2.1.3.3|4|public\n1.3.6.1.4.1.318.2.1.2.1.3.4|4|public\n1.3.6.1.4.1.318.2.1.2.1.4.1|2|0\n1.3.6.1.4.1.318.2.1.2.1.4.2|2|0\n1.3.6.1.4.1.318.2.1.2.1.4.3|2|0\n1.3.6.1.4.1.318.2.1.2.1.4.4|2|0\n1.3.6.1.4.1.318.2.1.2.1.5.1|2|1\n1.3.6.1.4.1.318.2.1.2.1.5.2|2|1\n1.3.6.1.4.1.318.2.1.2.1.5.3|2|1\n1.3.6.1.4.1.318.2.1.2.1.5.4|2|1\n1.3.6.1.4.1.318.2.1.2.1.6.1|2|1\n1.3.6.1.4.1.318.2.1.2.1.6.2|2|1\n1.3.6.1.4.1.318.2.1.2.1.6.3|2|1\n1.3.6.1.4.1.318.2.1.2.1.6.4|2|1\n1.3.6.1.4.1.318.2.1.3.0|2|1\n1.3.6.1.4.1.318.2.1.4.0|64x|00000000\n1.3.6.1.4.1.318.2.1.5.0|2|0\n1.3.6.1.4.1.318.2.1.6.1.0|4x|30352f32302f32303139\n1.3.6.1.4.1.318.2.1.6.2.0|4x|31343a35313a3236\n1.3.6.1.4.1.318.2.2.1.0|2|2\n1.3.6.1.4.1.318.2.3.1.0|2|40360\n1.3.6.1.4.1.318.2.3.2.0|64x|00000000\n1.3.6.1.4.1.318.2.3.3.0|4|97560\n1.3.6.1.4.1.318.2.3.4.0|66|12808\n1.3.6.1.4.1.318.2.3.5.0|67|0\n1.3.6.1.4.1.318.2.3.6.0|2|0\n1.3.6.1.4.1.318.2.3.7.0|2|0\n1.3.6.1.4.1.318.2.3.8.0|64x|00000000\n1.3.6.1.4.1.318.2.3.9.0|64x|00000000\n1.3.6.1.4.1.318.2.3.10.0|4|80840\n1.3.6.1.4.1.318.2.3.11.0|4x|00\n1.3.6.1.4.1.318.2.3.12.0|66|0\n1.3.6.1.4.1.318.2.3.13.0|66|0\n1.3.6.1.4.1.318.2.3.14.0|67|0\n1.3.6.1.4.1.318.2.3.15.0|67|0\n1.3.6.1.4.1.318.2.4.1.1.0|2|0\n1.3.6.1.4.1.318.2.4.2.1.1.0|4|Unknown\n1.3.6.1.4.1.318.2.4.2.2.1.0|4x|302e302e302e30\n1.3.6.1.4.1.318.2.4.2.3.1.0|4x|2a2a2a\n1.3.6.1.4.1.318.2.4.2.3.2.0|4x|2a2a2a\n1.3.6.1.4.1.318.2.4.2.3.3.0|4x|2a2a2a\n1.3.6.1.4.1.318.2.4.3.1.0|2|1\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/arista.snmprec",
    "content": "1.3.6.1.2.1.4.22.1.1.49001.10.101.1.4|2|49001\n1.3.6.1.2.1.4.22.1.1.50001.10.101.1.12|2|50001\n1.3.6.1.2.1.4.22.1.2.49001.10.101.1.4|4x|fcbd67d0e6bd\n1.3.6.1.2.1.4.22.1.2.50001.10.101.1.12|4x|fcbd67d0fb5d\n1.3.6.1.2.1.4.22.1.3.49001.10.101.1.4|64x|0a650104\n1.3.6.1.2.1.4.22.1.3.50001.10.101.1.12|64x|0a65010c\n1.3.6.1.2.1.4.22.1.4.49001.10.101.1.4|2|3\n1.3.6.1.2.1.4.22.1.4.50001.10.101.1.12|2|3\n1.3.6.1.2.1.4.35.1.4.49001.1.4.10.101.1.4|4x|fcbd67d0e6bd\n1.3.6.1.2.1.4.35.1.4.50001.1.4.10.101.1.12|4x|fcbd67d0fb5d\n1.3.6.1.2.1.4.35.1.5.49001.1.4.10.101.1.4|67|146044173\n1.3.6.1.2.1.4.35.1.5.50001.1.4.10.101.1.12|67|144713262\n1.3.6.1.2.1.4.35.1.6.49001.1.4.10.101.1.4|2|3\n1.3.6.1.2.1.4.35.1.6.50001.1.4.10.101.1.12|2|3\n1.3.6.1.2.1.4.35.1.7.49001.1.4.10.101.1.4|2|6\n1.3.6.1.2.1.4.35.1.7.50001.1.4.10.101.1.12|2|6\n1.3.6.1.2.1.4.35.1.8.49001.1.4.10.101.1.4|2|1\n1.3.6.1.2.1.4.35.1.8.50001.1.4.10.101.1.12|2|1\n1.3.6.1.4.1.30065.3.18.1.1.1.2.2.86.82|4x|c0\n1.3.6.1.4.1.30065.3.18.1.1.1.2.3.73.79.84|4x|c0\n1.3.6.1.4.1.30065.3.18.1.1.1.2.4.77.71.77.84|4x|c0\n1.3.6.1.4.1.30065.3.18.1.1.1.2.7.83.84.85.68.69.78.84|4x|c0\n1.3.6.1.4.1.30065.3.18.1.1.1.3.2.86.82|4x|31302e3130312e302e343a38\n1.3.6.1.4.1.30065.3.18.1.1.1.3.3.73.79.84|4x|31302e3130312e302e343a37\n1.3.6.1.4.1.30065.3.18.1.1.1.3.4.77.71.77.84|4x|31302e3130312e302e343a31\n1.3.6.1.4.1.30065.3.18.1.1.1.3.7.83.84.85.68.69.78.84|4x|31302e3130312e302e343a35\n1.3.6.1.4.1.30065.3.18.1.1.1.4.2.86.82|2|1\n1.3.6.1.4.1.30065.3.18.1.1.1.4.3.73.79.84|2|1\n1.3.6.1.4.1.30065.3.18.1.1.1.4.4.77.71.77.84|2|1\n1.3.6.1.4.1.30065.3.18.1.1.1.4.7.83.84.85.68.69.78.84|2|1\n1.3.6.1.4.1.30065.3.18.1.2.1.1.40|4|MGMT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000001|4|MGMT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000012|4|STUDENT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000040|4|MGMT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000222|4|STUDENT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000223|4|STUDENT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000500|4|STUDENT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000701|4|MGMT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.2000702|4|MGMT\n1.3.6.1.4.1.30065.3.18.1.2.1.1.5000001|4|MGMT\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/arista@IOT.snmprec",
    "content": ""
  },
  {
    "path": "tests/integration/snmp_fixtures/arista@MGMT.snmprec",
    "content": "1.3.6.1.2.1.4.22.1.1.40.10.103.0.0|2|40\n1.3.6.1.2.1.4.22.1.1.2000040.10.101.4.6|2|2000040\n1.3.6.1.2.1.4.22.1.1.2000040.10.101.4.7|2|2000040\n1.3.6.1.2.1.4.22.1.1.2000040.10.101.4.8|2|2000040\n1.3.6.1.2.1.4.22.1.2.40.10.103.0.0|4x|f4cc55443d29\n1.3.6.1.2.1.4.22.1.2.2000040.10.101.4.6|4x|fcbd6783a593\n1.3.6.1.2.1.4.22.1.2.2000040.10.101.4.7|4x|fcbd67e94a21\n1.3.6.1.2.1.4.22.1.2.2000040.10.101.4.8|4x|fcbd67e94631\n1.3.6.1.2.1.4.22.1.3.40.10.103.0.0|64x|0a670000\n1.3.6.1.2.1.4.22.1.3.2000040.10.101.4.6|64x|0a650406\n1.3.6.1.2.1.4.22.1.3.2000040.10.101.4.7|64x|0a650407\n1.3.6.1.2.1.4.22.1.3.2000040.10.101.4.8|64x|0a650408\n1.3.6.1.2.1.4.22.1.4.40.10.103.0.0|2|3\n1.3.6.1.2.1.4.22.1.4.2000040.10.101.4.6|2|4\n1.3.6.1.2.1.4.22.1.4.2000040.10.101.4.7|2|3\n1.3.6.1.2.1.4.22.1.4.2000040.10.101.4.8|2|4\n1.3.6.1.2.1.4.35.1.4.40.1.4.10.103.0.0|4x|f4cc55443d29\n1.3.6.1.2.1.4.35.1.4.2000040.1.4.10.101.4.6|4x|fcbd6783a593\n1.3.6.1.2.1.4.35.1.4.2000040.1.4.10.101.4.7|4x|fcbd67e94a21\n1.3.6.1.2.1.4.35.1.4.2000040.1.4.10.101.4.8|4x|fcbd67e94631\n1.3.6.1.2.1.4.35.1.5.40.1.4.10.103.0.0|67|457391962\n1.3.6.1.2.1.4.35.1.5.2000040.1.4.10.101.4.6|67|698382138\n1.3.6.1.2.1.4.35.1.5.2000040.1.4.10.101.4.7|67|327390581\n1.3.6.1.2.1.4.35.1.5.2000040.1.4.10.101.4.8|67|698982146\n1.3.6.1.2.1.4.35.1.6.40.1.4.10.103.0.0|2|3\n1.3.6.1.2.1.4.35.1.6.2000040.1.4.10.101.4.6|2|4\n1.3.6.1.2.1.4.35.1.6.2000040.1.4.10.101.4.7|2|3\n1.3.6.1.2.1.4.35.1.6.2000040.1.4.10.101.4.8|2|4\n1.3.6.1.2.1.4.35.1.7.40.1.4.10.103.0.0|2|6\n1.3.6.1.2.1.4.35.1.7.2000040.1.4.10.101.4.6|2|6\n1.3.6.1.2.1.4.35.1.7.2000040.1.4.10.101.4.7|2|6\n1.3.6.1.2.1.4.35.1.7.2000040.1.4.10.101.4.8|2|6\n1.3.6.1.2.1.4.35.1.8.40.1.4.10.103.0.0|2|1\n1.3.6.1.2.1.4.35.1.8.2000040.1.4.10.101.4.6|2|1\n1.3.6.1.2.1.4.35.1.8.2000040.1.4.10.101.4.7|2|1\n1.3.6.1.2.1.4.35.1.8.2000040.1.4.10.101.4.8|2|1\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/arista@STUDENT.snmprec",
    "content": "1.3.6.1.2.1.4.35.1.4.2000222.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|4x|aaaaaaaaaaaa\n1.3.6.1.2.1.4.35.1.4.2000223.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|4x|aaaaaaaaaaaa\n1.3.6.1.2.1.4.35.1.4.2000500.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|4x|aaaaaaaaaaaa\n1.3.6.1.2.1.4.35.1.5.2000222.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|67|1266793864\n1.3.6.1.2.1.4.35.1.5.2000223.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|67|1267607398\n1.3.6.1.2.1.4.35.1.5.2000500.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|67|1266578758\n1.3.6.1.2.1.4.35.1.6.2000222.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|5\n1.3.6.1.2.1.4.35.1.6.2000223.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|5\n1.3.6.1.2.1.4.35.1.6.2000500.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|5\n1.3.6.1.2.1.4.35.1.7.2000222.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n1.3.6.1.2.1.4.35.1.7.2000223.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n1.3.6.1.2.1.4.35.1.7.2000500.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n1.3.6.1.2.1.4.35.1.8.2000222.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n1.3.6.1.2.1.4.35.1.8.2000223.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n1.3.6.1.2.1.4.35.1.8.2000500.2.16.254.128.0.0.0.0.0.0.168.170.170.255.254.170.170.170|2|1\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/arista@VR.snmprec",
    "content": ""
  },
  {
    "path": "tests/integration/snmp_fixtures/aruba-wlc.snmprec",
    "content": "1.3.6.1.4.1.14823.2.2.1.2.1.1.0|64x|0a00002a\n1.3.6.1.4.1.14823.2.2.1.2.1.2.0|4x|61727562612d776c63\n1.3.6.1.4.1.14823.2.2.1.2.1.3.0|4|A7240XM\n1.3.6.1.4.1.14823.2.2.1.2.1.4.0|2|2\n1.3.6.1.4.1.14823.2.2.1.2.1.5.0|64x|9e26810a\n1.3.6.1.4.1.14823.2.2.1.2.1.6.0|4x|323032322d31312d32342031313a31353a3135\n1.3.6.1.4.1.14823.2.2.1.2.1.7.0|4x|001a1e06a538\n1.3.6.1.4.1.14823.2.2.1.2.1.8.0|4|\n1.3.6.1.4.1.14823.2.2.1.2.1.9.0|4|\n1.3.6.1.4.1.14823.2.2.1.2.1.10.0|4x|33362e303020646567726565732043656c7369757320284e4f524d414c29\n1.3.6.1.4.1.14823.2.2.1.2.1.11.0|4|ZAPHOD\n1.3.6.1.4.1.14823.2.2.1.2.1.12.0|2|0\n1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4|BEEBLEBROX\n1.3.6.1.4.1.14823.2.2.1.2.1.30.0|66|5\n1.3.6.1.4.1.14823.2.2.1.2.1.31.0|66|37\n1.3.6.1.4.1.14823.2.2.1.2.1.32.0|2|0\n1.3.6.1.4.1.14823.2.2.1.2.1.33.0|2|0\n1.3.6.1.4.1.14823.2.2.1.2.1.34.0|4x|20\n1.3.6.1.4.1.14823.2.2.1.2.1.35.0|4x|584c5034333220526576204232202853656375726520426f6f74292020202046505520204031353030204d487a\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/cisco-memory.snmprec",
    "content": "1.3.6.1.4.1.9.9.48.1.1.1.2.1|4|\"Processor\"\n1.3.6.1.4.1.9.9.48.1.1.1.2.2|4|\"I/O\"\n1.3.6.1.4.1.9.9.48.1.1.1.2.16|4|\"Driver text\"\n1.3.6.1.4.1.9.9.48.1.1.1.4.1|2|1\n1.3.6.1.4.1.9.9.48.1.1.1.4.2|2|1\n1.3.6.1.4.1.9.9.48.1.1.1.4.16|2|1\n1.3.6.1.4.1.9.9.48.1.1.1.5.1|66|10204640\n1.3.6.1.4.1.9.9.48.1.1.1.5.2|66|1664884\n1.3.6.1.4.1.9.9.48.1.1.1.5.16|66|40\n1.3.6.1.4.1.9.9.48.1.1.1.6.1|66|20055088\n1.3.6.1.4.1.9.9.48.1.1.1.6.2|66|2521228\n1.3.6.1.4.1.9.9.48.1.1.1.6.16|66|1048536"
  },
  {
    "path": "tests/integration/snmp_fixtures/hp-memory.snmprec",
    "content": "1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.1.1|2|1\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.2.1|65|10004\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.3.1|65|385\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.4.1|65|9619\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.5.1|2|17402928\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.6.1|2|12299872\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7.1|2|5103056\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.1.1|2|1\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.6.1|2|12299872\n1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.7.1|2|5103056\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/juniper-alarm-none.snmprec",
    "content": "1.3.6.1.4.1.2636.3.4.2.2.2.0|66|\n1.3.6.1.4.1.2636.3.4.2.3.2.0|66|"
  },
  {
    "path": "tests/integration/snmp_fixtures/juniper-alarm.snmprec",
    "content": "1.3.6.1.4.1.2636.3.4.2.2.2.0|66|0\n1.3.6.1.4.1.2636.3.4.2.3.2.0|66|2"
  },
  {
    "path": "tests/integration/snmp_fixtures/juniper-memory.snmprec",
    "content": "1.3.6.1.4.1.2636.3.1.13.1.5.7.1.0.0|4|\"FPC: EX2200-48T-4G @ 0/*/*\"\n1.3.6.1.4.1.2636.3.1.13.1.5.7.2.0.0|4|\"FPC: EX2200-48T-4G @ 1/*/*\"\n1.3.6.1.4.1.2636.3.1.13.1.5.7.3.0.0|4|\"FPC: EX2200-48T-4G @ 2/*/*\"\n1.3.6.1.4.1.2636.3.1.13.1.5.9.1.0.0|4|\"Routing Engine 0\"\n1.3.6.1.4.1.2636.3.1.13.1.5.9.2.0.0|4|\"Routing Engine 1\"\n1.3.6.1.4.1.2636.3.1.13.1.11.7.1.0.0|66|48\n1.3.6.1.4.1.2636.3.1.13.1.11.7.2.0.0|66|38\n1.3.6.1.4.1.2636.3.1.13.1.11.7.3.0.0|66|34\n1.3.6.1.4.1.2636.3.1.13.1.11.9.1.0.0|66|48\n1.3.6.1.4.1.2636.3.1.13.1.11.9.2.0.0|66|38\n1.3.6.1.4.1.2636.3.1.13.1.15.7.1.0.0|2|512\n1.3.6.1.4.1.2636.3.1.13.1.15.7.2.0.0|2|512\n1.3.6.1.4.1.2636.3.1.13.1.15.7.3.0.0|2|512\n1.3.6.1.4.1.2636.3.1.13.1.15.9.1.0.0|2|512\n1.3.6.1.4.1.2636.3.1.13.1.15.9.2.0.0|2|512"
  },
  {
    "path": "tests/integration/snmp_fixtures/public.snmprec",
    "content": "1.3.6.1.2.1.47.1.1.1.1.2.1|4x|50726f4375727665204a3439303042205377697463682032363236\n1.3.6.1.2.1.47.1.1.1.1.2.2|4x|50726f4375727665204a343930304220537769746368206261636b706c616e65\n1.3.6.1.2.1.47.1.1.1.1.2.5|4x|50726f4375727665204a3439303042205377697463682066616e\n1.3.6.1.2.1.47.1.1.1.1.2.6|4x|50726f4375727665204a3439303042205377697463682066616e\n1.3.6.1.2.1.47.1.1.1.1.2.9|4x|50726f4375727665204a34393030422053776974636820706f77657220737570706c79\n1.3.6.1.2.1.47.1.1.1.1.2.11|4x|50726f4375727665204a34393030422053776974636820706f7274206d6f64756c6520736c6f74\n1.3.6.1.2.1.47.1.1.1.1.2.13|4x|50726f43757276652046697865642032342d706f72742031302f3130302d54202b20322d706f72742047696761626974\n1.3.6.1.2.1.47.1.1.1.1.2.14|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.15|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.16|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.17|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.18|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.19|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.20|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.21|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.22|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.23|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.24|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.25|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.26|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.27|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.28|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.29|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.30|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.31|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.32|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.33|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.34|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.35|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.36|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.37|4x|50726f4375727665204669786564203130424153452d542f313030424153452d545820506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.38|4x|50726f4375727665204669786564203130302f31303030424153452d5420506f7274\n1.3.6.1.2.1.47.1.1.1.1.2.39|4x|50726f4375727665204669786564203130302f31303030424153452d5420506f7274\n1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.11.2.3.7.11.45\n1.3.6.1.2.1.47.1.1.1.1.3.2|6|1.3.6.1.4.1.11.2.3.7.8.6.4\n1.3.6.1.2.1.47.1.1.1.1.3.5|6|1.3.6.1.4.1.11.2.3.7.8.3.2\n1.3.6.1.2.1.47.1.1.1.1.3.6|6|1.3.6.1.4.1.11.2.3.7.8.3.2\n1.3.6.1.2.1.47.1.1.1.1.3.9|6|1.3.6.1.4.1.11.2.3.7.8.3.1\n1.3.6.1.2.1.47.1.1.1.1.3.11|6|1.3.6.1.4.1.11.2.3.7.8.7.21\n1.3.6.1.2.1.47.1.1.1.1.3.13|6|1.3.6.1.4.1.11.2.3.7.11.45.1\n1.3.6.1.2.1.47.1.1.1.1.3.14|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.15|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.16|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.17|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.18|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.19|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.20|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.21|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.22|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.23|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.24|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.25|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.26|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.27|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.28|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.29|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.30|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.31|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.32|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.33|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.34|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.35|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.36|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.37|6|1.3.6.1.4.1.11.2.3.7.8.10.1\n1.3.6.1.2.1.47.1.1.1.1.3.38|6|1.3.6.1.4.1.11.2.3.7.8.10.7\n1.3.6.1.2.1.47.1.1.1.1.3.39|6|1.3.6.1.4.1.11.2.3.7.8.10.7\n1.3.6.1.2.1.47.1.1.1.1.4.1|2|0\n1.3.6.1.2.1.47.1.1.1.1.4.2|2|1\n1.3.6.1.2.1.47.1.1.1.1.4.5|2|1\n1.3.6.1.2.1.47.1.1.1.1.4.6|2|1\n1.3.6.1.2.1.47.1.1.1.1.4.9|2|1\n1.3.6.1.2.1.47.1.1.1.1.4.11|2|1\n1.3.6.1.2.1.47.1.1.1.1.4.13|2|11\n1.3.6.1.2.1.47.1.1.1.1.4.14|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.15|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.16|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.17|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.18|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.19|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.20|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.21|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.22|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.23|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.24|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.25|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.26|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.27|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.28|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.29|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.30|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.31|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.32|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.33|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.34|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.35|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.36|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.37|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.38|2|13\n1.3.6.1.2.1.47.1.1.1.1.4.39|2|13\n1.3.6.1.2.1.47.1.1.1.1.5.1|2|3\n1.3.6.1.2.1.47.1.1.1.1.5.2|2|4\n1.3.6.1.2.1.47.1.1.1.1.5.5|2|7\n1.3.6.1.2.1.47.1.1.1.1.5.6|2|7\n1.3.6.1.2.1.47.1.1.1.1.5.9|2|6\n1.3.6.1.2.1.47.1.1.1.1.5.11|2|5\n1.3.6.1.2.1.47.1.1.1.1.5.13|2|9\n1.3.6.1.2.1.47.1.1.1.1.5.14|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.15|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.16|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.17|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.18|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.19|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.20|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.21|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.22|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.23|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.24|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.25|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.26|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.27|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.28|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.29|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.30|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.31|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.32|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.33|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.34|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.35|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.36|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.37|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.38|2|10\n1.3.6.1.2.1.47.1.1.1.1.5.39|2|10\n1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1\n1.3.6.1.2.1.47.1.1.1.1.6.2|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.5|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.6|2|2\n1.3.6.1.2.1.47.1.1.1.1.6.9|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.11|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.13|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.14|2|1\n1.3.6.1.2.1.47.1.1.1.1.6.15|2|2\n1.3.6.1.2.1.47.1.1.1.1.6.16|2|3\n1.3.6.1.2.1.47.1.1.1.1.6.17|2|4\n1.3.6.1.2.1.47.1.1.1.1.6.18|2|5\n1.3.6.1.2.1.47.1.1.1.1.6.19|2|6\n1.3.6.1.2.1.47.1.1.1.1.6.20|2|7\n1.3.6.1.2.1.47.1.1.1.1.6.21|2|8\n1.3.6.1.2.1.47.1.1.1.1.6.22|2|9\n1.3.6.1.2.1.47.1.1.1.1.6.23|2|10\n1.3.6.1.2.1.47.1.1.1.1.6.24|2|11\n1.3.6.1.2.1.47.1.1.1.1.6.25|2|12\n1.3.6.1.2.1.47.1.1.1.1.6.26|2|13\n1.3.6.1.2.1.47.1.1.1.1.6.27|2|14\n1.3.6.1.2.1.47.1.1.1.1.6.28|2|15\n1.3.6.1.2.1.47.1.1.1.1.6.29|2|16\n1.3.6.1.2.1.47.1.1.1.1.6.30|2|17\n1.3.6.1.2.1.47.1.1.1.1.6.31|2|18\n1.3.6.1.2.1.47.1.1.1.1.6.32|2|19\n1.3.6.1.2.1.47.1.1.1.1.6.33|2|20\n1.3.6.1.2.1.47.1.1.1.1.6.34|2|21\n1.3.6.1.2.1.47.1.1.1.1.6.35|2|22\n1.3.6.1.2.1.47.1.1.1.1.6.36|2|23\n1.3.6.1.2.1.47.1.1.1.1.6.37|2|24\n1.3.6.1.2.1.47.1.1.1.1.6.38|2|25\n1.3.6.1.2.1.47.1.1.1.1.6.39|2|26\n1.3.6.1.2.1.47.1.1.1.1.7.1|4|Chassis\n1.3.6.1.2.1.47.1.1.1.1.7.2|4|Backplane\n1.3.6.1.2.1.47.1.1.1.1.7.5|4x|46616e2031\n1.3.6.1.2.1.47.1.1.1.1.7.6|4x|46616e2032\n1.3.6.1.2.1.47.1.1.1.1.7.9|4x|506f77657220537570706c79\n1.3.6.1.2.1.47.1.1.1.1.7.11|4x|536c6f7420\n1.3.6.1.2.1.47.1.1.1.1.7.13|4|\n1.3.6.1.2.1.47.1.1.1.1.7.14|4x|506f72742031\n1.3.6.1.2.1.47.1.1.1.1.7.15|4x|506f72742032\n1.3.6.1.2.1.47.1.1.1.1.7.16|4x|506f72742033\n1.3.6.1.2.1.47.1.1.1.1.7.17|4x|506f72742034\n1.3.6.1.2.1.47.1.1.1.1.7.18|4x|506f72742035\n1.3.6.1.2.1.47.1.1.1.1.7.19|4x|506f72742036\n1.3.6.1.2.1.47.1.1.1.1.7.20|4x|506f72742037\n1.3.6.1.2.1.47.1.1.1.1.7.21|4x|506f72742038\n1.3.6.1.2.1.47.1.1.1.1.7.22|4x|506f72742039\n1.3.6.1.2.1.47.1.1.1.1.7.23|4x|506f7274203130\n1.3.6.1.2.1.47.1.1.1.1.7.24|4x|506f7274203131\n1.3.6.1.2.1.47.1.1.1.1.7.25|4x|506f7274203132\n1.3.6.1.2.1.47.1.1.1.1.7.26|4x|506f7274203133\n1.3.6.1.2.1.47.1.1.1.1.7.27|4x|506f7274203134\n1.3.6.1.2.1.47.1.1.1.1.7.28|4x|506f7274203135\n1.3.6.1.2.1.47.1.1.1.1.7.29|4x|506f7274203136\n1.3.6.1.2.1.47.1.1.1.1.7.30|4x|506f7274203137\n1.3.6.1.2.1.47.1.1.1.1.7.31|4x|506f7274203138\n1.3.6.1.2.1.47.1.1.1.1.7.32|4x|506f7274203139\n1.3.6.1.2.1.47.1.1.1.1.7.33|4x|506f7274203230\n1.3.6.1.2.1.47.1.1.1.1.7.34|4x|506f7274203231\n1.3.6.1.2.1.47.1.1.1.1.7.35|4x|506f7274203232\n1.3.6.1.2.1.47.1.1.1.1.7.36|4x|506f7274203233\n1.3.6.1.2.1.47.1.1.1.1.7.37|4x|506f7274203234\n1.3.6.1.2.1.47.1.1.1.1.7.38|4x|506f7274203235\n1.3.6.1.2.1.47.1.1.1.1.7.39|4x|506f7274203236\n1.3.6.1.2.1.47.1.1.1.1.8.1|4|0\n1.3.6.1.2.1.47.1.1.1.1.8.2|4|0\n1.3.6.1.2.1.47.1.1.1.1.8.5|4|\n1.3.6.1.2.1.47.1.1.1.1.8.6|4|\n1.3.6.1.2.1.47.1.1.1.1.8.9|4|\n1.3.6.1.2.1.47.1.1.1.1.8.11|4|\n1.3.6.1.2.1.47.1.1.1.1.8.13|4|\n1.3.6.1.2.1.47.1.1.1.1.8.14|4|\n1.3.6.1.2.1.47.1.1.1.1.8.15|4|\n1.3.6.1.2.1.47.1.1.1.1.8.16|4|\n1.3.6.1.2.1.47.1.1.1.1.8.17|4|\n1.3.6.1.2.1.47.1.1.1.1.8.18|4|\n1.3.6.1.2.1.47.1.1.1.1.8.19|4|\n1.3.6.1.2.1.47.1.1.1.1.8.20|4|\n1.3.6.1.2.1.47.1.1.1.1.8.21|4|\n1.3.6.1.2.1.47.1.1.1.1.8.22|4|\n1.3.6.1.2.1.47.1.1.1.1.8.23|4|\n1.3.6.1.2.1.47.1.1.1.1.8.24|4|\n1.3.6.1.2.1.47.1.1.1.1.8.25|4|\n1.3.6.1.2.1.47.1.1.1.1.8.26|4|\n1.3.6.1.2.1.47.1.1.1.1.8.27|4|\n1.3.6.1.2.1.47.1.1.1.1.8.28|4|\n1.3.6.1.2.1.47.1.1.1.1.8.29|4|\n1.3.6.1.2.1.47.1.1.1.1.8.30|4|\n1.3.6.1.2.1.47.1.1.1.1.8.31|4|\n1.3.6.1.2.1.47.1.1.1.1.8.32|4|\n1.3.6.1.2.1.47.1.1.1.1.8.33|4|\n1.3.6.1.2.1.47.1.1.1.1.8.34|4|\n1.3.6.1.2.1.47.1.1.1.1.8.35|4|\n1.3.6.1.2.1.47.1.1.1.1.8.36|4|\n1.3.6.1.2.1.47.1.1.1.1.8.37|4|\n1.3.6.1.2.1.47.1.1.1.1.8.38|4|\n1.3.6.1.2.1.47.1.1.1.1.8.39|4|\n1.3.6.1.2.1.47.1.1.1.1.9.1|4x|482e30382e3032\n1.3.6.1.2.1.47.1.1.1.1.9.2|4|\n1.3.6.1.2.1.47.1.1.1.1.9.5|4|\n1.3.6.1.2.1.47.1.1.1.1.9.6|4|\n1.3.6.1.2.1.47.1.1.1.1.9.9|4|\n1.3.6.1.2.1.47.1.1.1.1.9.11|4|\n1.3.6.1.2.1.47.1.1.1.1.9.13|4|\n1.3.6.1.2.1.47.1.1.1.1.9.14|4|\n1.3.6.1.2.1.47.1.1.1.1.9.15|4|\n1.3.6.1.2.1.47.1.1.1.1.9.16|4|\n1.3.6.1.2.1.47.1.1.1.1.9.17|4|\n1.3.6.1.2.1.47.1.1.1.1.9.18|4|\n1.3.6.1.2.1.47.1.1.1.1.9.19|4|\n1.3.6.1.2.1.47.1.1.1.1.9.20|4|\n1.3.6.1.2.1.47.1.1.1.1.9.21|4|\n1.3.6.1.2.1.47.1.1.1.1.9.22|4|\n1.3.6.1.2.1.47.1.1.1.1.9.23|4|\n1.3.6.1.2.1.47.1.1.1.1.9.24|4|\n1.3.6.1.2.1.47.1.1.1.1.9.25|4|\n1.3.6.1.2.1.47.1.1.1.1.9.26|4|\n1.3.6.1.2.1.47.1.1.1.1.9.27|4|\n1.3.6.1.2.1.47.1.1.1.1.9.28|4|\n1.3.6.1.2.1.47.1.1.1.1.9.29|4|\n1.3.6.1.2.1.47.1.1.1.1.9.30|4|\n1.3.6.1.2.1.47.1.1.1.1.9.31|4|\n1.3.6.1.2.1.47.1.1.1.1.9.32|4|\n1.3.6.1.2.1.47.1.1.1.1.9.33|4|\n1.3.6.1.2.1.47.1.1.1.1.9.34|4|\n1.3.6.1.2.1.47.1.1.1.1.9.35|4|\n1.3.6.1.2.1.47.1.1.1.1.9.36|4|\n1.3.6.1.2.1.47.1.1.1.1.9.37|4|\n1.3.6.1.2.1.47.1.1.1.1.9.38|4|\n1.3.6.1.2.1.47.1.1.1.1.9.39|4|\n1.3.6.1.2.1.47.1.1.1.1.10.1|4x|482e30382e3938\n1.3.6.1.2.1.47.1.1.1.1.10.2|4|\n1.3.6.1.2.1.47.1.1.1.1.10.5|4|\n1.3.6.1.2.1.47.1.1.1.1.10.6|4|\n1.3.6.1.2.1.47.1.1.1.1.10.9|4|\n1.3.6.1.2.1.47.1.1.1.1.10.11|4|\n1.3.6.1.2.1.47.1.1.1.1.10.13|4x|482e30382e3938\n1.3.6.1.2.1.47.1.1.1.1.10.14|4|\n1.3.6.1.2.1.47.1.1.1.1.10.15|4|\n1.3.6.1.2.1.47.1.1.1.1.10.16|4|\n1.3.6.1.2.1.47.1.1.1.1.10.17|4|\n1.3.6.1.2.1.47.1.1.1.1.10.18|4|\n1.3.6.1.2.1.47.1.1.1.1.10.19|4|\n1.3.6.1.2.1.47.1.1.1.1.10.20|4|\n1.3.6.1.2.1.47.1.1.1.1.10.21|4|\n1.3.6.1.2.1.47.1.1.1.1.10.22|4|\n1.3.6.1.2.1.47.1.1.1.1.10.23|4|\n1.3.6.1.2.1.47.1.1.1.1.10.24|4|\n1.3.6.1.2.1.47.1.1.1.1.10.25|4|\n1.3.6.1.2.1.47.1.1.1.1.10.26|4|\n1.3.6.1.2.1.47.1.1.1.1.10.27|4|\n1.3.6.1.2.1.47.1.1.1.1.10.28|4|\n1.3.6.1.2.1.47.1.1.1.1.10.29|4|\n1.3.6.1.2.1.47.1.1.1.1.10.30|4|\n1.3.6.1.2.1.47.1.1.1.1.10.31|4|\n1.3.6.1.2.1.47.1.1.1.1.10.32|4|\n1.3.6.1.2.1.47.1.1.1.1.10.33|4|\n1.3.6.1.2.1.47.1.1.1.1.10.34|4|\n1.3.6.1.2.1.47.1.1.1.1.10.35|4|\n1.3.6.1.2.1.47.1.1.1.1.10.36|4|\n1.3.6.1.2.1.47.1.1.1.1.10.37|4|\n1.3.6.1.2.1.47.1.1.1.1.10.38|4|\n1.3.6.1.2.1.47.1.1.1.1.10.39|4|\n1.3.6.1.2.1.47.1.1.1.1.11.1|4x|434e363530534530474a20\n1.3.6.1.2.1.47.1.1.1.1.11.2|4|\n1.3.6.1.2.1.47.1.1.1.1.11.5|4|\n1.3.6.1.2.1.47.1.1.1.1.11.6|4|\n1.3.6.1.2.1.47.1.1.1.1.11.9|4|\n1.3.6.1.2.1.47.1.1.1.1.11.11|4|\n1.3.6.1.2.1.47.1.1.1.1.11.13|4|\n1.3.6.1.2.1.47.1.1.1.1.11.14|4|\n1.3.6.1.2.1.47.1.1.1.1.11.15|4|\n1.3.6.1.2.1.47.1.1.1.1.11.16|4|\n1.3.6.1.2.1.47.1.1.1.1.11.17|4|\n1.3.6.1.2.1.47.1.1.1.1.11.18|4|\n1.3.6.1.2.1.47.1.1.1.1.11.19|4|\n1.3.6.1.2.1.47.1.1.1.1.11.20|4|\n1.3.6.1.2.1.47.1.1.1.1.11.21|4|\n1.3.6.1.2.1.47.1.1.1.1.11.22|4|\n1.3.6.1.2.1.47.1.1.1.1.11.23|4|\n1.3.6.1.2.1.47.1.1.1.1.11.24|4|\n1.3.6.1.2.1.47.1.1.1.1.11.25|4|\n1.3.6.1.2.1.47.1.1.1.1.11.26|4|\n1.3.6.1.2.1.47.1.1.1.1.11.27|4|\n1.3.6.1.2.1.47.1.1.1.1.11.28|4|\n1.3.6.1.2.1.47.1.1.1.1.11.29|4|\n1.3.6.1.2.1.47.1.1.1.1.11.30|4|\n1.3.6.1.2.1.47.1.1.1.1.11.31|4|\n1.3.6.1.2.1.47.1.1.1.1.11.32|4|\n1.3.6.1.2.1.47.1.1.1.1.11.33|4|\n1.3.6.1.2.1.47.1.1.1.1.11.34|4|\n1.3.6.1.2.1.47.1.1.1.1.11.35|4|\n1.3.6.1.2.1.47.1.1.1.1.11.36|4|\n1.3.6.1.2.1.47.1.1.1.1.11.37|4|\n1.3.6.1.2.1.47.1.1.1.1.11.38|4|\n1.3.6.1.2.1.47.1.1.1.1.11.39|4|\n1.3.6.1.2.1.47.1.1.1.1.12.1|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.2|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.5|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.6|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.9|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.11|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.13|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.14|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.15|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.16|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.17|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.18|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.19|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.20|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.21|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.22|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.23|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.24|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.25|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.26|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.27|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.28|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.29|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.30|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.31|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.32|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.33|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.34|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.35|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.36|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.37|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.38|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.12.39|4x|4865776c6574742d5061636b617264\n1.3.6.1.2.1.47.1.1.1.1.13.1|4|J4900B\n1.3.6.1.2.1.47.1.1.1.1.13.2|4|J4900B\n1.3.6.1.2.1.47.1.1.1.1.13.5|4|\n1.3.6.1.2.1.47.1.1.1.1.13.6|4|\n1.3.6.1.2.1.47.1.1.1.1.13.9|4|\n1.3.6.1.2.1.47.1.1.1.1.13.11|4|\n1.3.6.1.2.1.47.1.1.1.1.13.13|4|\n1.3.6.1.2.1.47.1.1.1.1.13.14|4|\n1.3.6.1.2.1.47.1.1.1.1.13.15|4|\n1.3.6.1.2.1.47.1.1.1.1.13.16|4|\n1.3.6.1.2.1.47.1.1.1.1.13.17|4|\n1.3.6.1.2.1.47.1.1.1.1.13.18|4|\n1.3.6.1.2.1.47.1.1.1.1.13.19|4|\n1.3.6.1.2.1.47.1.1.1.1.13.20|4|\n1.3.6.1.2.1.47.1.1.1.1.13.21|4|\n1.3.6.1.2.1.47.1.1.1.1.13.22|4|\n1.3.6.1.2.1.47.1.1.1.1.13.23|4|\n1.3.6.1.2.1.47.1.1.1.1.13.24|4|\n1.3.6.1.2.1.47.1.1.1.1.13.25|4|\n1.3.6.1.2.1.47.1.1.1.1.13.26|4|\n1.3.6.1.2.1.47.1.1.1.1.13.27|4|\n1.3.6.1.2.1.47.1.1.1.1.13.28|4|\n1.3.6.1.2.1.47.1.1.1.1.13.29|4|\n1.3.6.1.2.1.47.1.1.1.1.13.30|4|\n1.3.6.1.2.1.47.1.1.1.1.13.31|4|\n1.3.6.1.2.1.47.1.1.1.1.13.32|4|\n1.3.6.1.2.1.47.1.1.1.1.13.33|4|\n1.3.6.1.2.1.47.1.1.1.1.13.34|4|\n1.3.6.1.2.1.47.1.1.1.1.13.35|4|\n1.3.6.1.2.1.47.1.1.1.1.13.36|4|\n1.3.6.1.2.1.47.1.1.1.1.13.37|4|\n1.3.6.1.2.1.47.1.1.1.1.13.38|4|\n1.3.6.1.2.1.47.1.1.1.1.13.39|4|\n1.3.6.1.2.1.47.1.1.1.1.14.1|4|\n1.3.6.1.2.1.47.1.1.1.1.14.2|4|\n1.3.6.1.2.1.47.1.1.1.1.14.5|4|\n1.3.6.1.2.1.47.1.1.1.1.14.6|4|\n1.3.6.1.2.1.47.1.1.1.1.14.9|4|\n1.3.6.1.2.1.47.1.1.1.1.14.11|4|\n1.3.6.1.2.1.47.1.1.1.1.14.13|4|\n1.3.6.1.2.1.47.1.1.1.1.14.14|4|\n1.3.6.1.2.1.47.1.1.1.1.14.15|4|\n1.3.6.1.2.1.47.1.1.1.1.14.16|4|\n1.3.6.1.2.1.47.1.1.1.1.14.17|4|\n1.3.6.1.2.1.47.1.1.1.1.14.18|4|\n1.3.6.1.2.1.47.1.1.1.1.14.19|4|\n1.3.6.1.2.1.47.1.1.1.1.14.20|4|\n1.3.6.1.2.1.47.1.1.1.1.14.21|4|\n1.3.6.1.2.1.47.1.1.1.1.14.22|4|\n1.3.6.1.2.1.47.1.1.1.1.14.23|4|\n1.3.6.1.2.1.47.1.1.1.1.14.24|4|\n1.3.6.1.2.1.47.1.1.1.1.14.25|4|\n1.3.6.1.2.1.47.1.1.1.1.14.26|4|\n1.3.6.1.2.1.47.1.1.1.1.14.27|4|\n1.3.6.1.2.1.47.1.1.1.1.14.28|4|\n1.3.6.1.2.1.47.1.1.1.1.14.29|4|\n1.3.6.1.2.1.47.1.1.1.1.14.30|4|\n1.3.6.1.2.1.47.1.1.1.1.14.31|4|\n1.3.6.1.2.1.47.1.1.1.1.14.32|4|\n1.3.6.1.2.1.47.1.1.1.1.14.33|4|\n1.3.6.1.2.1.47.1.1.1.1.14.34|4|\n1.3.6.1.2.1.47.1.1.1.1.14.35|4|\n1.3.6.1.2.1.47.1.1.1.1.14.36|4|\n1.3.6.1.2.1.47.1.1.1.1.14.37|4|\n1.3.6.1.2.1.47.1.1.1.1.14.38|4|\n1.3.6.1.2.1.47.1.1.1.1.14.39|4|\n1.3.6.1.2.1.47.1.1.1.1.15.1|4|\n1.3.6.1.2.1.47.1.1.1.1.15.2|4|\n1.3.6.1.2.1.47.1.1.1.1.15.5|4|\n1.3.6.1.2.1.47.1.1.1.1.15.6|4|\n1.3.6.1.2.1.47.1.1.1.1.15.9|4|\n1.3.6.1.2.1.47.1.1.1.1.15.11|4|\n1.3.6.1.2.1.47.1.1.1.1.15.13|4|\n1.3.6.1.2.1.47.1.1.1.1.15.14|4|\n1.3.6.1.2.1.47.1.1.1.1.15.15|4|\n1.3.6.1.2.1.47.1.1.1.1.15.16|4|\n1.3.6.1.2.1.47.1.1.1.1.15.17|4|\n1.3.6.1.2.1.47.1.1.1.1.15.18|4|\n1.3.6.1.2.1.47.1.1.1.1.15.19|4|\n1.3.6.1.2.1.47.1.1.1.1.15.20|4|\n1.3.6.1.2.1.47.1.1.1.1.15.21|4|\n1.3.6.1.2.1.47.1.1.1.1.15.22|4|\n1.3.6.1.2.1.47.1.1.1.1.15.23|4|\n1.3.6.1.2.1.47.1.1.1.1.15.24|4|\n1.3.6.1.2.1.47.1.1.1.1.15.25|4|\n1.3.6.1.2.1.47.1.1.1.1.15.26|4|\n1.3.6.1.2.1.47.1.1.1.1.15.27|4|\n1.3.6.1.2.1.47.1.1.1.1.15.28|4|\n1.3.6.1.2.1.47.1.1.1.1.15.29|4|\n1.3.6.1.2.1.47.1.1.1.1.15.30|4|\n1.3.6.1.2.1.47.1.1.1.1.15.31|4|\n1.3.6.1.2.1.47.1.1.1.1.15.32|4|\n1.3.6.1.2.1.47.1.1.1.1.15.33|4|\n1.3.6.1.2.1.47.1.1.1.1.15.34|4|\n1.3.6.1.2.1.47.1.1.1.1.15.35|4|\n1.3.6.1.2.1.47.1.1.1.1.15.36|4|\n1.3.6.1.2.1.47.1.1.1.1.15.37|4|\n1.3.6.1.2.1.47.1.1.1.1.15.38|4|\n1.3.6.1.2.1.47.1.1.1.1.15.39|4|\n1.3.6.1.2.1.47.1.1.1.1.16.1|2|1\n1.3.6.1.2.1.47.1.1.1.1.16.2|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.5|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.6|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.9|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.11|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.13|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.14|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.15|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.16|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.17|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.18|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.19|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.20|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.21|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.22|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.23|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.24|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.25|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.26|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.27|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.28|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.29|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.30|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.31|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.32|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.33|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.34|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.35|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.36|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.37|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.38|2|2\n1.3.6.1.2.1.47.1.1.1.1.16.39|2|2\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/raritan.snmprec",
    "content": "1.3.6.1.4.1.13742.6.3.1.0|2|1\n1.3.6.1.4.1.13742.6.3.2.1.1.2.1|4|Raritan\n1.3.6.1.4.1.13742.6.3.2.1.1.3.1|4x|5058452d31383437\n1.3.6.1.4.1.13742.6.3.2.1.1.4.1|4|PA66360082\n1.3.6.1.4.1.13742.6.3.2.1.1.5.1|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.2.1.1.6.1|4|32A\n1.3.6.1.4.1.13742.6.3.2.1.1.7.1|4x|35302f3630487a\n1.3.6.1.4.1.13742.6.3.2.1.1.8.1|4x|362e342d372e376b5641\n1.3.6.1.4.1.13742.6.3.2.1.1.9.1|4|\n1.3.6.1.4.1.13742.6.3.2.2.1.2.1|2|1\n1.3.6.1.4.1.13742.6.3.2.2.1.3.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.4.1|2|42\n1.3.6.1.4.1.13742.6.3.2.2.1.5.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.6.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.7.1|2|32\n1.3.6.1.4.1.13742.6.3.2.2.1.8.1|64x|9e2681eb\n1.3.6.1.4.1.13742.6.3.2.2.1.9.1|64x|ffffff00\n1.3.6.1.4.1.13742.6.3.2.2.1.10.1|64x|9e268101\n1.3.6.1.4.1.13742.6.3.2.2.1.11.1|4x|000d5d0eda77\n1.3.6.1.4.1.13742.6.3.2.2.1.12.1|4x|30323a3030\n1.3.6.1.4.1.13742.6.3.2.2.1.13.1|4x|504455205231342d41\n1.3.6.1.4.1.13742.6.3.2.2.1.14.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.34.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.35.1|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.2.2.1.41.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.42.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.50.1|2|1\n1.3.6.1.4.1.13742.6.3.2.2.1.51.1|4x|9e2681eb\n1.3.6.1.4.1.13742.6.3.2.2.1.52.1|4x|ffffff00\n1.3.6.1.4.1.13742.6.3.2.2.1.53.1|4x|9e268101\n1.3.6.1.4.1.13742.6.3.2.2.1.56.1|2|64\n1.3.6.1.4.1.13742.6.3.2.2.1.58.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.59.1|2|1\n1.3.6.1.4.1.13742.6.3.2.2.1.60.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.61.1|2|16\n1.3.6.1.4.1.13742.6.3.2.2.1.62.1|4x|6e74702e756e696e6574742e6e6f\n1.3.6.1.4.1.13742.6.3.2.2.1.63.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.64.1|4|\n1.3.6.1.4.1.13742.6.3.2.2.1.65.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.66.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.67.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.68.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.70.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.71.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.72.1|2|1\n1.3.6.1.4.1.13742.6.3.2.2.1.73.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.74.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.75.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.77.1|2|2\n1.3.6.1.4.1.13742.6.3.2.2.1.78.1|2|1\n1.3.6.1.4.1.13742.6.3.2.2.1.79.1|2|0\n1.3.6.1.4.1.13742.6.3.2.2.1.80.1|2|0\n1.3.6.1.4.1.13742.6.3.2.3.1.4.1.1.1|4|0x02\n1.3.6.1.4.1.13742.6.3.2.3.1.6.1.1.1|4x|332e352e302e352d3435333731\n1.3.6.1.4.1.13742.6.3.2.3.1.8.1.1.1|66|1552288778\n1.3.6.1.4.1.13742.6.3.2.4.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.2.4.1.2.1|2|1\n1.3.6.1.4.1.13742.6.3.2.4.1.3.1|2|60\n1.3.6.1.4.1.13742.6.3.2.4.1.4.1|2|120\n1.3.6.1.4.1.13742.6.3.2.4.1.5.1|2|2\n1.3.6.1.4.1.13742.6.3.2.6.1.3.1.1|2|1\n1.3.6.1.4.1.13742.6.3.2.6.1.3.1.2|2|1\n1.3.6.1.4.1.13742.6.3.2.6.1.4.1.1|4x|9e260001\n1.3.6.1.4.1.13742.6.3.2.6.1.4.1.2|4x|9e260002\n1.3.6.1.4.1.13742.6.3.2.6.1.5.1.1|2|1\n1.3.6.1.4.1.13742.6.3.2.6.1.5.1.2|2|1\n1.3.6.1.4.1.13742.6.3.2.7.1.3.1.1|2|16\n1.3.6.1.4.1.13742.6.3.2.7.1.4.1.1|4x|6e74702e756e696e6574742e6e6f\n1.3.6.1.4.1.13742.6.3.2.7.1.5.1.1|2|1\n1.3.6.1.4.1.13742.6.3.3.3.1.2.1.1|4|I1\n1.3.6.1.4.1.13742.6.3.3.3.1.3.1.1|4|\n1.3.6.1.4.1.13742.6.3.3.3.1.4.1.1|2|10\n1.3.6.1.4.1.13742.6.3.3.3.1.5.1.1|2|2\n1.3.6.1.4.1.13742.6.3.3.3.1.6.1.1|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.3.3.1.7.1.1|4|32A\n1.3.6.1.4.1.13742.6.3.3.3.1.8.1.1|4|\n1.3.6.1.4.1.13742.6.3.3.3.1.9.1.1|4|\n1.3.6.1.4.1.13742.6.3.3.3.1.10.1.1|4x|9f000000000000\n1.3.6.1.4.1.13742.6.3.3.3.1.11.1.1|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.3.3.1.12.1.1|4x|4945432036303330392032502b4520366820333241\n1.3.6.1.4.1.13742.6.3.3.3.1.13.1.1|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.4|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.5|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.6|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.7|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.4.1.1.8|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.1|2|2\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.4|2|1\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.5|2|3\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.6|2|4\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.7|2|-1\n1.3.6.1.4.1.13742.6.3.3.4.1.6.1.1.8|2|5\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.1|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.4|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.7|66|2\n1.3.6.1.4.1.13742.6.3.3.4.1.7.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.4|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.8.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.1|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.4|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.5|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.6|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.7|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.9.1.1.8|66|1\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.4|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.10.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.1|66|320\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.4|66|264\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.5|66|10000\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.6|66|10000\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.7|66|100\n1.3.6.1.4.1.13742.6.3.3.4.1.11.1.1.8|66|4294967295\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.4|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.12.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.1|66|10\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.4|66|2\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.13.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.4|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.14.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.4|66|188\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.21.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.1|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.4|66|194\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.22.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.1|66|256\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.4|66|254\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.23.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.1|66|208\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.4|66|247\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.5|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.6|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.7|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.24.1.1.8|66|0\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.1|4|0\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.4|4x|f0\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.5|4x|00\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.6|4x|00\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.7|4x|00\n1.3.6.1.4.1.13742.6.3.3.4.1.25.1.1.8|4x|00\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.1|2|320\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.4|2|264\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.5|2|10000\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.6|2|10000\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.7|2|100\n1.3.6.1.4.1.13742.6.3.3.4.1.26.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.1|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.4|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.5|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.6|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.7|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.27.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.1|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.4|2|188\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.5|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.6|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.7|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.28.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.1|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.4|2|194\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.5|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.6|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.7|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.29.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.1|2|256\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.4|2|254\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.5|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.6|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.7|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.30.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.1|2|208\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.4|2|247\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.5|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.6|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.7|2|0\n1.3.6.1.4.1.13742.6.3.3.4.1.31.1.1.8|2|0\n1.3.6.1.4.1.13742.6.3.3.5.1.1.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.3.5.1.1.1.1.2|2|4\n1.3.6.1.4.1.13742.6.3.3.5.1.2.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.3.5.1.2.1.1.2|2|2\n1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1|4|C1\n1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2|4|C2\n1.3.6.1.4.1.13742.6.3.4.3.1.3.1.1|4x|42616e6b2031\n1.3.6.1.4.1.13742.6.3.4.3.1.3.1.2|4x|42616e6b2032\n1.3.6.1.4.1.13742.6.3.4.3.1.4.1.1|2|1\n1.3.6.1.4.1.13742.6.3.4.3.1.4.1.2|2|1\n1.3.6.1.4.1.13742.6.3.4.3.1.5.1.1|4|16A\n1.3.6.1.4.1.13742.6.3.4.3.1.5.1.2|4|16A\n1.3.6.1.4.1.13742.6.3.4.3.1.6.1.1|2|1\n1.3.6.1.4.1.13742.6.3.4.3.1.6.1.2|2|1\n1.3.6.1.4.1.13742.6.3.4.3.1.9.1.1|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.4.3.1.9.1.2|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.4.3.1.10.1.1|6|1.3.6.1.4.1.13742.6.3.3.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.4.3.1.10.1.2|6|1.3.6.1.4.1.13742.6.3.3.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.4.5.1.2.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.4.5.1.2.1.2.1|2|1\n1.3.6.1.4.1.13742.6.3.4.5.1.3.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.4.5.1.3.1.2.1|2|1\n1.3.6.1.4.1.13742.6.3.4.5.1.4.1.1.1|2|3\n1.3.6.1.4.1.13742.6.3.4.5.1.4.1.2.1|2|4\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.1|4|1\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.2|4|2\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.3|4|3\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.4|4|4\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.5|4|5\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.6|4|6\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.7|4|7\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.8|4|8\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.9|4|9\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.10|4|10\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.11|4|11\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.12|4|12\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.13|4|13\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.14|4|14\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.15|4|15\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.16|4|16\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.17|4|17\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.18|4|18\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.19|4|19\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.20|4|20\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.21|4|21\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.22|4|22\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.23|4|23\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.24|4|24\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.25|4|25\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.26|4|26\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.27|4|27\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.28|4|28\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.29|4|29\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.30|4|30\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.31|4|31\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.32|4|32\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.33|4|33\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.34|4|34\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.35|4|35\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.36|4|36\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.37|4|37\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.38|4|38\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.39|4|39\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.40|4|40\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.41|4|41\n1.3.6.1.4.1.13742.6.3.5.3.1.2.1.42|4|42\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.1|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.2|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.3|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.4|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.5|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.6|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.7|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.8|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.9|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.10|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.11|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.12|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.13|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.14|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.15|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.16|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.17|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.18|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.19|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.20|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.21|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.22|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.23|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.24|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.25|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.26|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.27|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.28|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.29|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.30|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.31|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.32|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.33|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.34|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.35|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.36|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.37|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.38|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.39|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.40|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.41|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.3.1.42|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.1|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.2|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.3|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.4|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.5|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.6|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.7|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.8|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.9|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.10|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.11|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.12|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.13|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.14|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.15|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.16|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.17|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.18|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.19|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.20|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.21|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.22|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.23|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.24|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.25|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.26|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.27|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.28|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.29|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.30|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.31|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.32|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.33|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.34|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.35|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.36|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.37|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.38|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.39|2|5\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.40|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.41|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.4.1.42|2|6\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.1|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.2|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.3|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.4|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.5|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.6|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.7|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.8|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.9|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.10|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.11|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.12|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.13|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.14|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.15|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.16|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.17|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.18|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.19|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.20|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.21|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.22|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.23|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.24|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.25|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.26|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.27|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.28|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.29|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.30|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.31|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.32|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.33|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.34|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.35|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.36|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.37|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.38|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.39|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.40|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.41|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.5.1.42|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.1|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.2|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.3|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.4|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.5|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.6|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.7|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.8|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.9|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.10|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.11|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.12|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.13|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.14|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.15|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.16|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.17|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.18|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.19|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.20|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.21|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.22|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.23|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.24|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.25|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.26|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.27|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.28|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.29|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.30|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.31|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.32|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.33|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.34|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.35|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.36|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.37|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.38|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.39|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.40|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.41|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.6.1.42|4x|3230302d32343056\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.1|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.2|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.3|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.4|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.5|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.6|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.7|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.8|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.9|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.10|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.11|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.12|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.13|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.14|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.15|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.16|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.17|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.18|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.19|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.20|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.21|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.22|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.23|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.24|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.25|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.26|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.27|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.28|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.29|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.30|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.31|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.32|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.33|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.34|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.35|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.36|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.37|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.38|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.39|4|10A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.40|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.41|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.7.1.42|4|16A\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.1|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.2|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.3|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.4|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.5|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.6|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.7|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.8|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.9|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.10|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.11|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.12|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.13|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.14|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.15|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.16|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.17|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.18|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.19|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.20|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.21|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.22|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.23|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.24|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.25|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.26|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.27|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.28|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.29|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.30|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.31|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.32|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.33|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.34|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.35|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.36|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.37|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.38|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.39|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.40|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.41|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.8.1.42|4|\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.1|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.2|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.3|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.4|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.5|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.6|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.7|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.8|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.9|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.10|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.11|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.12|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.13|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.14|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.15|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.16|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.17|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.18|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.19|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.20|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.21|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.22|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.23|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.24|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.25|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.26|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.27|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.28|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.29|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.30|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.31|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.32|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.33|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.34|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.35|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.36|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.37|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.38|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.39|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.40|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.41|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.10.1.42|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.1|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.2|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.3|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.4|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.5|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.6|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.7|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.8|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.9|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.10|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.11|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.12|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.13|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.14|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.15|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.16|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.17|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.18|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.19|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.20|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.21|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.22|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.23|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.24|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.25|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.26|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.27|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.28|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.29|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.30|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.31|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.32|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.33|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.34|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.35|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.36|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.37|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.38|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.39|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.40|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.41|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.11.1.42|4x|00000000000000\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.1|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.2|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.3|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.4|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.5|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.6|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.7|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.8|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.9|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.10|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.11|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.12|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.13|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.14|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.15|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.16|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.17|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.18|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.19|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.20|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.21|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.22|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.23|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.24|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.25|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.26|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.27|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.28|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.29|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.30|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.31|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.32|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.33|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.34|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.35|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.36|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.37|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.38|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.39|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.40|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.41|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.28.1.42|2|2\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.1|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.2|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.3|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.4|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.5|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.6|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.7|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.8|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.9|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.10|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.11|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.12|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.13|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.14|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.15|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.16|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.17|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.18|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.19|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.20|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.21|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.22|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.23|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.24|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.25|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.26|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.27|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.28|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.29|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.30|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.31|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.32|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.33|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.34|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.35|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.36|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.37|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.38|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.39|4x|49454320363033323020433133\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.40|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.41|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.29.1.42|4x|49454320363033323020433139\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.1|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.2|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.3|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.4|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.5|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.6|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.7|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.8|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.9|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.10|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.11|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.12|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.13|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.14|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.15|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.16|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.17|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.18|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.19|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.20|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.21|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.1\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.22|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.23|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.24|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.25|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.26|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.27|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.28|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.29|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.30|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.31|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.32|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.33|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.34|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.35|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.36|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.37|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.38|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.39|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.40|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.41|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.3.1.33.1.42|6|1.3.6.1.4.1.13742.6.3.4.3.1.2.1.2\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.1.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.1.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.2.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.2.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.3.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.3.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.4.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.4.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.5.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.5.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.6.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.6.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.7.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.7.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.8.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.8.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.9.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.9.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.10.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.10.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.11.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.11.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.12.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.12.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.13.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.13.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.14.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.14.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.15.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.15.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.16.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.16.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.17.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.17.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.18.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.18.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.19.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.19.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.20.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.20.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.21.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.21.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.22.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.22.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.23.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.23.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.24.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.24.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.25.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.25.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.26.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.26.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.27.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.27.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.28.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.28.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.29.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.29.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.30.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.30.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.31.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.31.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.32.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.32.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.33.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.33.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.34.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.34.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.35.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.35.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.36.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.36.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.37.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.37.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.38.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.38.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.39.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.39.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.40.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.40.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.41.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.41.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.42.1|2|1\n1.3.6.1.4.1.13742.6.3.5.5.1.1.1.42.2|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.1.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.1.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.2.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.2.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.3.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.3.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.4.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.4.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.5.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.5.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.6.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.6.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.7.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.7.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.8.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.8.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.9.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.9.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.10.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.10.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.11.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.11.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.12.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.12.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.13.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.13.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.14.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.14.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.15.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.15.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.16.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.16.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.17.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.17.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.18.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.18.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.19.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.19.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.20.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.20.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.21.1|2|3\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.21.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.22.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.22.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.23.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.23.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.24.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.24.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.25.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.25.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.26.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.26.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.27.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.27.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.28.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.28.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.29.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.29.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.30.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.30.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.31.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.31.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.32.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.32.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.33.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.33.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.34.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.34.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.35.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.35.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.36.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.36.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.37.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.37.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.38.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.38.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.39.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.39.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.40.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.40.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.41.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.41.2|2|2\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.42.1|2|4\n1.3.6.1.4.1.13742.6.3.5.5.1.2.1.42.2|2|2\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.10|66|10\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.11|66|1\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.12|66|10\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.13|66|30\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.16|66|30\n1.3.6.1.4.1.13742.6.3.6.4.1.3.1.28|66|10\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.10|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.11|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.12|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.13|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.16|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.4.1.28|66|0\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.10|2|100\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.11|2|10\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.12|2|40\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.13|2|0\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.16|2|0\n1.3.6.1.4.1.13742.6.3.6.4.1.5.1.28|2|20\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.10|2|150\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.11|2|15\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.12|2|80\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.13|2|0\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.16|2|0\n1.3.6.1.4.1.13742.6.3.6.4.1.6.1.28|2|40\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.10|2|350\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.11|2|90\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.12|2|320\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.13|2|1000\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.16|2|100\n1.3.6.1.4.1.13742.6.3.6.4.1.7.1.28|2|220\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.10|2|300\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.11|2|85\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.12|2|260\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.13|2|800\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.16|2|50\n1.3.6.1.4.1.13742.6.3.6.4.1.8.1.28|2|200\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.10|4x|f0\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.11|4x|f0\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.12|4x|f0\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.13|4|0\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.16|4|0\n1.3.6.1.4.1.13742.6.3.6.4.1.9.1.28|4x|f0\n1.3.6.1.4.1.13742.6.4.5.2.1.2.1.1|2|-1\n1.3.6.1.4.1.13742.6.4.6.1.1.1.1.1.8|2|0\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.1|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.4|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.5|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.6|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.7|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.2.1.1.8|2|1\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.1|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.4|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.5|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.6|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.7|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.3.1.1.8|2|4\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.1|66|32\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.4|66|231\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.5|66|654\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.6|66|728\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.7|66|90\n1.3.6.1.4.1.13742.6.5.2.3.1.4.1.1.8|66|777036\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.1|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.4|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.5|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.6|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.7|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.5.1.1.8|66|1558363593\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.1|2|32\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.4|2|231\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.5|2|654\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.6|2|728\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.7|2|90\n1.3.6.1.4.1.13742.6.5.2.3.1.6.1.1.8|2|0\n1.3.6.1.4.1.13742.6.6.1.1.1.2.1|2|84\n1.3.6.1.4.1.13742.6.6.1.1.1.3.1|2|83\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.1|66|1558358640\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.2|66|1558358701\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.3|66|1558358760\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.4|66|1558358820\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.5|66|1558358880\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.6|66|1558358940\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.7|66|1558359000\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.8|66|1558359060\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.9|66|1558359120\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.10|66|1558359180\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.11|66|1558359240\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.12|66|1558359301\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.13|66|1558359360\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.14|66|1558359420\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.15|66|1558359480\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.16|66|1558359540\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.17|66|1558359600\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.18|66|1558359660\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.19|66|1558359720\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.20|66|1558359780\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.21|66|1558359840\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.22|66|1558359900\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.23|66|1558359960\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.24|66|1558360020\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.25|66|1558360080\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.26|66|1558360140\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.27|66|1558360200\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.28|66|1558360260\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.29|66|1558360320\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.30|66|1558360380\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.31|66|1558360440\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.32|66|1558360500\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.33|66|1558360560\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.34|66|1558360620\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.35|66|1558360680\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.36|66|1558360740\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.37|66|1558360800\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.38|66|1558360860\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.39|66|1558360920\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.40|66|1558360980\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.41|66|1558361040\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.42|66|1558361101\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.43|66|1558361160\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.44|66|1558361220\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.45|66|1558361280\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.46|66|1558361340\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.47|66|1558361400\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.48|66|1558361460\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.49|66|1558361520\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.50|66|1558361580\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.51|66|1558361640\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.52|66|1558361701\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.53|66|1558361760\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.54|66|1558361820\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.55|66|1558361880\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.56|66|1558361940\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.57|66|1558362000\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.58|66|1558362060\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.59|66|1558362120\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.60|66|1558362180\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.61|66|1558362240\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.62|66|1558362300\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.63|66|1558362360\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.64|66|1558362420\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.65|66|1558362480\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.66|66|1558362540\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.67|66|1558362600\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.68|66|1558362660\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.69|66|1558362720\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.70|66|1558362780\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.71|66|1558362840\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.72|66|1558362901\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.73|66|1558362960\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.74|66|1558363020\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.75|66|1558363080\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.76|66|1558363140\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.77|66|1558363200\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.78|66|1558363260\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.79|66|1558363320\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.80|66|1558363380\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.81|66|1558363440\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.82|66|1558363500\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.83|66|1558363560\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.84|66|1558356420\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.85|66|1558356480\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.86|66|1558356540\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.87|66|1558356600\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.88|66|1558356660\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.89|66|1558356720\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.90|66|1558356780\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.91|66|1558356840\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.92|66|1558356901\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.93|66|1558356960\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.94|66|1558357020\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.95|66|1558357080\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.96|66|1558357140\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.97|66|1558357200\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.98|66|1558357260\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.99|66|1558357320\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.100|66|1558357380\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.101|66|1558357440\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.102|66|1558357500\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.103|66|1558357560\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.104|66|1558357620\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.105|66|1558357680\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.106|66|1558357740\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.107|66|1558357800\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.108|66|1558357860\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.109|66|1558357920\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.110|66|1558357980\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.111|66|1558358040\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.112|66|1558358101\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.113|66|1558358160\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.114|66|1558358220\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.115|66|1558358280\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.116|66|1558358340\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.117|66|1558358400\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.118|66|1558358460\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.119|66|1558358520\n1.3.6.1.4.1.13742.6.6.1.2.1.2.1.120|66|1558358580\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.1.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.4.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.5.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.6.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.7.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.1|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.2|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.3|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.4|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.5|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.6|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.7|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.8|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.9|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.10|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.11|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.12|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.13|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.14|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.15|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.16|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.17|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.18|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.19|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.20|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.21|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.22|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.23|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.24|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.25|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.26|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.27|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.28|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.29|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.30|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.31|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.32|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.33|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.34|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.35|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.36|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.37|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.38|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.39|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.40|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.41|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.42|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.43|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.44|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.45|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.46|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.47|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.48|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.49|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.50|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.51|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.52|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.53|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.54|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.55|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.56|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.57|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.58|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.59|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.60|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.61|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.62|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.63|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.64|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.65|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.66|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.67|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.68|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.69|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.70|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.71|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.72|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.73|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.74|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.75|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.76|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.77|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.78|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.79|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.80|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.81|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.82|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.83|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.84|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.85|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.86|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.87|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.88|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.89|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.90|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.91|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.92|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.93|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.94|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.95|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.96|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.97|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.98|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.99|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.100|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.101|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.102|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.103|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.104|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.105|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.106|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.107|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.108|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.109|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.110|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.111|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.112|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.113|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.114|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.115|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.116|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.117|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.118|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.119|2|1\n1.3.6.1.4.1.13742.6.6.2.3.1.2.1.1.8.120|2|2\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.1.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.4.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.5.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.6.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.7.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.1|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.2|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.3|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.4|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.5|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.6|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.7|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.8|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.9|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.10|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.11|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.12|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.13|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.14|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.15|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.16|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.17|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.18|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.19|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.20|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.21|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.22|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.23|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.24|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.25|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.26|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.27|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.28|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.29|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.30|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.31|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.32|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.33|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.34|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.35|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.36|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.37|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.38|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.39|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.40|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.41|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.42|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.43|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.44|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.45|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.46|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.47|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.48|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.49|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.50|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.51|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.52|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.53|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.54|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.55|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.56|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.57|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.58|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.59|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.60|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.61|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.62|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.63|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.64|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.65|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.66|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.67|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.68|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.69|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.70|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.71|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.72|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.73|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.74|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.75|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.76|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.77|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.78|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.79|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.80|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.81|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.82|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.83|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.84|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.85|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.86|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.87|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.88|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.89|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.90|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.91|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.92|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.93|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.94|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.95|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.96|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.97|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.98|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.99|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.100|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.101|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.102|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.103|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.104|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.105|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.106|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.107|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.108|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.109|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.110|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.111|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.112|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.113|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.114|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.115|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.116|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.117|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.118|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.119|2|4\n1.3.6.1.4.1.13742.6.6.2.3.1.3.1.1.8.120|2|-1\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.1|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.2|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.3|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.4|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.5|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.6|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.7|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.8|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.9|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.10|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.11|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.12|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.13|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.14|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.15|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.16|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.17|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.18|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.19|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.20|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.21|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.22|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.23|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.24|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.25|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.26|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.27|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.28|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.29|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.30|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.31|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.32|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.33|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.34|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.35|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.36|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.37|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.38|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.39|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.40|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.41|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.42|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.43|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.44|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.45|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.46|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.47|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.48|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.49|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.50|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.51|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.52|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.53|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.54|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.55|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.56|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.57|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.58|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.59|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.60|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.61|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.62|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.63|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.64|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.65|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.66|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.67|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.68|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.69|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.70|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.71|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.72|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.73|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.74|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.75|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.76|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.77|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.78|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.79|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.80|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.81|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.82|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.83|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.84|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.85|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.86|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.87|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.88|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.89|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.90|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.91|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.92|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.93|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.94|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.95|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.96|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.97|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.98|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.99|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.100|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.101|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.102|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.103|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.104|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.105|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.106|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.107|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.108|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.109|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.110|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.111|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.112|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.113|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.114|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.115|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.116|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.117|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.118|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.119|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.1.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.1|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.2|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.3|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.4|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.5|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.6|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.7|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.8|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.9|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.10|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.11|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.12|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.13|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.14|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.15|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.16|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.17|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.18|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.19|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.20|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.21|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.22|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.23|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.24|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.25|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.26|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.27|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.28|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.29|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.30|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.31|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.32|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.33|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.34|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.35|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.36|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.37|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.38|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.39|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.40|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.41|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.42|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.43|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.44|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.45|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.46|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.47|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.48|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.49|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.50|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.51|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.52|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.53|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.54|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.55|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.56|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.57|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.58|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.59|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.60|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.61|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.62|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.63|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.64|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.65|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.66|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.67|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.68|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.69|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.70|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.71|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.72|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.73|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.74|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.75|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.76|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.77|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.78|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.79|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.80|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.81|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.82|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.83|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.84|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.85|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.86|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.87|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.88|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.89|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.90|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.91|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.92|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.93|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.94|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.95|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.96|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.97|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.98|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.99|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.100|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.101|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.102|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.103|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.104|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.105|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.106|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.107|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.108|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.109|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.110|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.111|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.112|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.113|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.114|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.115|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.116|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.117|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.118|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.119|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.4.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.1|66|655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.2|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.3|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.4|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.5|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.6|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.7|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.8|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.9|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.10|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.11|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.12|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.13|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.14|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.15|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.16|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.17|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.18|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.19|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.20|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.21|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.22|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.23|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.24|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.25|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.26|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.27|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.28|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.29|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.30|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.31|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.32|66|656\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.33|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.34|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.35|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.36|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.37|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.38|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.39|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.40|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.41|66|656\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.42|66|655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.43|66|655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.44|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.45|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.46|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.47|66|655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.48|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.49|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.50|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.51|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.52|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.53|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.54|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.55|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.56|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.57|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.58|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.59|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.60|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.61|66|655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.62|66|656\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.63|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.64|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.65|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.66|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.67|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.68|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.69|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.70|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.71|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.72|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.73|66|657\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.74|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.75|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.76|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.77|66|656\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.78|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.79|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.80|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.81|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.82|66|653\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.83|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.84|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.85|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.86|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.87|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.88|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.89|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.90|66|648\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.91|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.92|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.93|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.94|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.95|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.96|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.97|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.98|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.99|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.100|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.101|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.102|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.103|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.104|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.105|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.106|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.107|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.108|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.109|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.110|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.111|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.112|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.113|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.114|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.115|66|648\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.116|66|652\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.117|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.118|66|650\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.119|66|651\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.5.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.1|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.2|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.3|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.4|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.5|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.6|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.7|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.8|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.9|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.10|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.11|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.12|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.13|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.14|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.15|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.16|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.17|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.18|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.19|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.20|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.21|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.22|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.23|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.24|66|723\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.25|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.26|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.27|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.28|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.29|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.30|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.31|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.32|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.33|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.34|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.35|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.36|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.37|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.38|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.39|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.40|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.41|66|730\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.42|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.43|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.44|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.45|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.46|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.47|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.48|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.49|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.50|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.51|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.52|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.53|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.54|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.55|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.56|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.57|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.58|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.59|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.60|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.61|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.62|66|729\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.63|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.64|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.65|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.66|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.67|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.68|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.69|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.70|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.71|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.72|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.73|66|730\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.74|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.75|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.76|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.77|66|730\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.78|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.79|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.80|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.81|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.82|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.83|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.84|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.85|66|723\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.86|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.87|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.88|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.89|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.90|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.91|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.92|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.93|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.94|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.95|66|723\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.96|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.97|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.98|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.99|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.100|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.101|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.102|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.103|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.104|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.105|66|722\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.106|66|727\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.107|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.108|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.109|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.110|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.111|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.112|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.113|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.114|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.115|66|722\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.116|66|726\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.117|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.118|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.119|66|725\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.6.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.1|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.2|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.3|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.4|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.5|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.6|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.7|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.8|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.9|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.10|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.11|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.12|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.13|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.14|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.15|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.16|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.17|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.18|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.19|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.20|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.21|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.22|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.23|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.24|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.25|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.26|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.27|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.28|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.29|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.30|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.31|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.32|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.33|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.34|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.35|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.36|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.37|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.38|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.39|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.40|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.41|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.42|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.43|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.44|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.45|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.46|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.47|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.48|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.49|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.50|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.51|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.52|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.53|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.54|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.55|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.56|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.57|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.58|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.59|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.60|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.61|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.62|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.63|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.64|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.65|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.66|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.67|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.68|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.69|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.70|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.71|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.72|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.73|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.74|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.75|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.76|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.77|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.78|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.79|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.80|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.81|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.82|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.83|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.84|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.85|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.86|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.87|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.88|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.89|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.90|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.91|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.92|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.93|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.94|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.95|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.96|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.97|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.98|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.99|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.100|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.101|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.102|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.103|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.104|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.105|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.106|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.107|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.108|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.109|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.110|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.111|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.112|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.113|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.114|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.115|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.116|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.117|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.118|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.119|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.7.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.1|66|776133\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.2|66|776144\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.3|66|776155\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.4|66|776166\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.5|66|776177\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.6|66|776188\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.7|66|776198\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.8|66|776209\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.9|66|776220\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.10|66|776231\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.11|66|776242\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.12|66|776253\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.13|66|776264\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.14|66|776275\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.15|66|776285\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.16|66|776296\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.17|66|776307\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.18|66|776318\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.19|66|776329\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.20|66|776340\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.21|66|776351\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.22|66|776361\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.23|66|776372\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.24|66|776383\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.25|66|776394\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.26|66|776405\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.27|66|776416\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.28|66|776426\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.29|66|776437\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.30|66|776448\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.31|66|776459\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.32|66|776470\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.33|66|776481\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.34|66|776492\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.35|66|776503\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.36|66|776513\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.37|66|776524\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.38|66|776535\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.39|66|776546\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.40|66|776557\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.41|66|776568\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.42|66|776579\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.43|66|776590\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.44|66|776601\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.45|66|776611\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.46|66|776622\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.47|66|776633\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.48|66|776644\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.49|66|776655\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.50|66|776666\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.51|66|776677\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.52|66|776688\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.53|66|776699\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.54|66|776709\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.55|66|776720\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.56|66|776731\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.57|66|776742\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.58|66|776753\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.59|66|776764\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.60|66|776774\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.61|66|776785\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.62|66|776796\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.63|66|776807\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.64|66|776818\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.65|66|776829\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.66|66|776840\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.67|66|776851\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.68|66|776861\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.69|66|776872\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.70|66|776883\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.71|66|776894\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.72|66|776905\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.73|66|776916\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.74|66|776927\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.75|66|776938\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.76|66|776948\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.77|66|776959\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.78|66|776970\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.79|66|776981\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.80|66|776992\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.81|66|777003\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.82|66|777014\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.83|66|777025\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.84|66|775733\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.85|66|775743\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.86|66|775754\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.87|66|775765\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.88|66|775776\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.89|66|775787\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.90|66|775797\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.91|66|775808\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.92|66|775819\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.93|66|775830\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.94|66|775841\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.95|66|775852\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.96|66|775862\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.97|66|775873\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.98|66|775884\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.99|66|775895\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.100|66|775906\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.101|66|775917\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.102|66|775927\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.103|66|775938\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.104|66|775949\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.105|66|775960\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.106|66|775971\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.107|66|775982\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.108|66|775992\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.109|66|776003\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.110|66|776014\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.111|66|776025\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.112|66|776036\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.113|66|776047\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.114|66|776057\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.115|66|776068\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.116|66|776079\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.117|66|776090\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.118|66|776101\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.119|66|776112\n1.3.6.1.4.1.13742.6.6.2.3.1.4.1.1.8.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.1|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.2|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.3|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.4|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.5|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.6|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.7|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.8|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.9|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.10|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.11|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.12|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.13|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.14|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.15|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.16|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.17|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.18|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.19|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.20|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.21|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.22|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.23|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.24|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.25|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.26|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.27|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.28|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.29|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.30|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.31|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.32|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.33|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.34|66|33\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.35|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.36|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.37|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.38|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.39|66|33\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.40|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.41|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.42|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.43|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.44|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.45|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.46|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.47|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.48|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.49|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.50|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.51|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.52|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.53|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.54|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.55|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.56|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.57|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.58|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.59|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.60|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.61|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.62|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.63|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.64|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.65|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.66|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.67|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.68|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.69|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.70|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.71|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.72|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.73|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.74|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.75|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.76|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.77|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.78|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.79|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.80|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.81|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.82|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.83|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.84|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.85|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.86|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.87|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.88|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.89|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.90|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.91|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.92|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.93|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.94|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.95|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.96|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.97|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.98|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.99|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.100|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.101|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.102|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.103|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.104|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.105|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.106|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.107|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.108|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.109|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.110|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.111|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.112|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.113|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.114|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.115|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.116|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.117|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.118|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.119|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.1.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.1|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.2|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.3|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.4|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.5|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.6|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.7|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.8|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.9|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.10|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.11|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.12|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.13|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.14|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.15|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.16|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.17|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.18|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.19|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.20|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.21|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.22|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.23|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.24|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.25|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.26|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.27|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.28|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.29|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.30|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.31|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.32|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.33|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.34|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.35|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.36|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.37|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.38|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.39|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.40|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.41|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.42|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.43|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.44|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.45|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.46|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.47|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.48|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.49|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.50|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.51|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.52|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.53|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.54|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.55|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.56|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.57|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.58|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.59|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.60|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.61|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.62|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.63|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.64|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.65|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.66|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.67|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.68|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.69|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.70|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.71|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.72|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.73|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.74|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.75|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.76|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.77|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.78|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.79|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.80|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.81|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.82|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.83|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.84|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.85|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.86|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.87|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.88|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.89|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.90|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.91|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.92|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.93|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.94|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.95|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.96|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.97|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.98|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.99|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.100|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.101|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.102|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.103|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.104|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.105|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.106|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.107|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.108|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.109|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.110|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.111|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.112|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.113|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.114|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.115|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.116|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.117|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.118|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.119|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.4.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.1|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.2|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.3|66|659\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.4|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.5|66|660\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.6|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.7|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.8|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.9|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.10|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.11|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.12|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.13|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.14|66|671\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.15|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.16|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.17|66|673\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.18|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.19|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.20|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.21|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.22|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.23|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.24|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.25|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.26|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.27|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.28|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.29|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.30|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.31|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.32|66|671\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.33|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.34|66|677\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.35|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.36|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.37|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.38|66|673\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.39|66|681\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.40|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.41|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.42|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.43|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.44|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.45|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.46|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.47|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.48|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.49|66|678\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.50|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.51|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.52|66|675\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.53|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.54|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.55|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.56|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.57|66|661\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.58|66|661\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.59|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.60|66|671\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.61|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.62|66|675\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.63|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.64|66|674\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.65|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.66|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.67|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.68|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.69|66|671\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.70|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.71|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.72|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.73|66|673\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.74|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.75|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.76|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.77|66|672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.78|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.79|66|671\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.80|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.81|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.82|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.83|66|669\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.84|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.85|66|654\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.86|66|664\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.87|66|659\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.88|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.89|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.90|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.91|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.92|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.93|66|661\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.94|66|666\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.95|66|659\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.96|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.97|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.98|66|661\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.99|66|673\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.100|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.101|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.102|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.103|66|660\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.104|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.105|66|659\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.106|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.107|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.108|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.109|66|667\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.110|66|673\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.111|66|660\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.112|66|668\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.113|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.114|66|670\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.115|66|660\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.116|66|665\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.117|66|662\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.118|66|663\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.119|66|676\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.5.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.1|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.2|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.3|66|733\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.4|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.5|66|734\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.6|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.7|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.8|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.9|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.10|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.11|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.12|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.13|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.14|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.15|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.16|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.17|66|745\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.18|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.19|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.20|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.21|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.22|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.23|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.24|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.25|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.26|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.27|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.28|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.29|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.30|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.31|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.32|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.33|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.34|66|749\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.35|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.36|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.37|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.38|66|746\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.39|66|752\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.40|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.41|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.42|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.43|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.44|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.45|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.46|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.47|66|745\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.48|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.49|66|750\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.50|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.51|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.52|66|748\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.53|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.54|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.55|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.56|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.57|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.58|66|734\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.59|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.60|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.61|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.62|66|747\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.63|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.64|66|746\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.65|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.66|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.67|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.68|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.69|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.70|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.71|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.72|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.73|66|745\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.74|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.75|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.76|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.77|66|745\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.78|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.79|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.80|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.81|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.82|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.83|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.84|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.85|66|728\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.86|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.87|66|733\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.88|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.89|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.90|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.91|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.92|66|744\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.93|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.94|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.95|66|733\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.96|66|739\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.97|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.98|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.99|66|746\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.100|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.101|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.102|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.103|66|734\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.104|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.105|66|733\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.106|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.107|66|742\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.108|66|737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.109|66|740\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.110|66|746\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.111|66|733\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.112|66|741\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.113|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.114|66|743\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.115|66|734\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.116|66|738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.117|66|735\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.118|66|736\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.119|66|748\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.6.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.1|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.2|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.3|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.4|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.5|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.6|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.7|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.8|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.9|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.10|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.11|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.12|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.13|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.14|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.15|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.16|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.17|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.18|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.19|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.20|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.21|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.22|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.23|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.24|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.25|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.26|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.27|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.28|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.29|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.30|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.31|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.32|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.33|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.34|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.35|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.36|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.37|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.38|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.39|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.40|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.41|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.42|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.43|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.44|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.45|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.46|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.47|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.48|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.49|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.50|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.51|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.52|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.53|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.54|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.55|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.56|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.57|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.58|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.59|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.60|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.61|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.62|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.63|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.64|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.65|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.66|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.67|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.68|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.69|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.70|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.71|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.72|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.73|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.74|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.75|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.76|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.77|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.78|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.79|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.80|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.81|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.82|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.83|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.84|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.85|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.86|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.87|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.88|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.89|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.90|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.91|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.92|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.93|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.94|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.95|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.96|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.97|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.98|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.99|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.100|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.101|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.102|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.103|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.104|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.105|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.106|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.107|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.108|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.109|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.110|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.111|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.112|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.113|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.114|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.115|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.116|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.117|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.118|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.119|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.7.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.1|66|776139\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.2|66|776150\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.3|66|776161\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.4|66|776172\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.5|66|776182\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.6|66|776193\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.7|66|776204\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.8|66|776215\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.9|66|776226\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.10|66|776237\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.11|66|776248\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.12|66|776259\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.13|66|776269\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.14|66|776280\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.15|66|776291\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.16|66|776302\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.17|66|776313\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.18|66|776324\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.19|66|776335\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.20|66|776345\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.21|66|776356\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.22|66|776367\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.23|66|776378\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.24|66|776389\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.25|66|776400\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.26|66|776411\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.27|66|776421\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.28|66|776432\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.29|66|776443\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.30|66|776454\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.31|66|776465\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.32|66|776476\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.33|66|776487\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.34|66|776498\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.35|66|776508\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.36|66|776519\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.37|66|776530\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.38|66|776541\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.39|66|776552\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.40|66|776563\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.41|66|776574\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.42|66|776585\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.43|66|776595\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.44|66|776606\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.45|66|776617\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.46|66|776628\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.47|66|776639\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.48|66|776650\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.49|66|776661\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.50|66|776672\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.51|66|776682\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.52|66|776693\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.53|66|776704\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.54|66|776715\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.55|66|776726\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.56|66|776737\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.57|66|776748\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.58|66|776759\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.59|66|776769\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.60|66|776780\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.61|66|776791\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.62|66|776802\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.63|66|776813\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.64|66|776824\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.65|66|776835\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.66|66|776846\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.67|66|776856\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.68|66|776867\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.69|66|776878\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.70|66|776889\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.71|66|776900\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.72|66|776911\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.73|66|776922\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.74|66|776933\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.75|66|776943\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.76|66|776954\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.77|66|776965\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.78|66|776976\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.79|66|776987\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.80|66|776998\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.81|66|777009\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.82|66|777020\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.83|66|777030\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.84|66|775738\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.85|66|775749\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.86|66|775760\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.87|66|775771\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.88|66|775782\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.89|66|775792\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.90|66|775803\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.91|66|775814\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.92|66|775825\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.93|66|775836\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.94|66|775847\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.95|66|775857\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.96|66|775868\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.97|66|775879\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.98|66|775890\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.99|66|775901\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.100|66|775912\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.101|66|775922\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.102|66|775933\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.103|66|775944\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.104|66|775955\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.105|66|775966\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.106|66|775976\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.107|66|775987\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.108|66|775998\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.109|66|776009\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.110|66|776020\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.111|66|776031\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.112|66|776041\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.113|66|776052\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.114|66|776063\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.115|66|776074\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.116|66|776085\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.117|66|776096\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.118|66|776106\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.119|66|776117\n1.3.6.1.4.1.13742.6.6.2.3.1.5.1.1.8.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.1|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.2|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.3|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.4|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.5|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.6|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.7|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.8|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.9|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.10|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.11|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.12|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.13|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.14|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.15|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.16|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.17|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.18|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.19|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.20|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.21|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.22|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.23|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.24|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.25|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.26|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.27|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.28|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.29|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.30|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.31|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.32|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.33|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.34|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.35|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.36|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.37|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.38|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.39|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.40|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.41|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.42|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.43|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.44|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.45|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.46|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.47|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.48|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.49|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.50|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.51|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.52|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.53|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.54|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.55|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.56|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.57|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.58|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.59|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.60|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.61|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.62|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.63|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.64|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.65|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.66|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.67|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.68|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.69|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.70|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.71|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.72|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.73|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.74|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.75|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.76|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.77|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.78|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.79|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.80|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.81|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.82|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.83|66|32\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.84|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.85|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.86|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.87|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.88|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.89|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.90|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.91|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.92|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.93|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.94|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.95|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.96|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.97|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.98|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.99|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.100|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.101|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.102|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.103|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.104|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.105|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.106|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.107|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.108|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.109|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.110|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.111|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.112|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.113|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.114|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.115|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.116|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.117|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.118|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.119|66|31\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.1.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.1|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.2|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.3|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.4|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.5|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.6|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.7|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.8|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.9|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.10|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.11|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.12|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.13|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.14|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.15|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.16|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.17|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.18|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.19|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.20|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.21|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.22|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.23|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.24|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.25|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.26|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.27|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.28|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.29|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.30|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.31|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.32|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.33|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.34|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.35|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.36|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.37|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.38|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.39|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.40|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.41|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.42|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.43|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.44|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.45|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.46|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.47|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.48|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.49|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.50|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.51|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.52|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.53|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.54|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.55|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.56|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.57|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.58|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.59|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.60|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.61|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.62|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.63|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.64|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.65|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.66|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.67|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.68|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.69|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.70|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.71|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.72|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.73|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.74|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.75|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.76|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.77|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.78|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.79|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.80|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.81|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.82|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.83|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.84|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.85|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.86|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.87|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.88|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.89|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.90|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.91|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.92|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.93|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.94|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.95|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.96|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.97|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.98|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.99|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.100|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.101|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.102|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.103|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.104|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.105|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.106|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.107|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.108|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.109|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.110|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.111|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.112|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.113|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.114|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.115|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.116|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.117|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.118|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.119|66|231\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.4.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.1|66|644\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.2|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.3|66|648\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.4|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.5|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.6|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.7|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.8|66|643\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.9|66|645\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.10|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.11|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.12|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.13|66|647\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.14|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.15|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.16|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.17|66|644\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.18|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.19|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.20|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.21|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.22|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.23|66|634\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.24|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.25|66|646\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.26|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.27|66|634\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.28|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.29|66|645\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.30|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.31|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.32|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.33|66|645\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.34|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.35|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.36|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.37|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.38|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.39|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.40|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.41|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.42|66|649\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.43|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.44|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.45|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.46|66|630\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.47|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.48|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.49|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.50|66|643\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.51|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.52|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.53|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.54|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.55|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.56|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.57|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.58|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.59|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.60|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.61|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.62|66|642\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.63|66|646\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.64|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.65|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.66|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.67|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.68|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.69|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.70|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.71|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.72|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.73|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.74|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.75|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.76|66|632\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.77|66|643\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.78|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.79|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.80|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.81|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.82|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.83|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.84|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.85|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.86|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.87|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.88|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.89|66|645\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.90|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.91|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.92|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.93|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.94|66|629\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.95|66|630\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.96|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.97|66|640\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.98|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.99|66|641\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.100|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.101|66|630\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.102|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.103|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.104|66|631\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.105|66|629\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.106|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.107|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.108|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.109|66|635\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.110|66|638\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.111|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.112|66|634\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.113|66|645\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.114|66|633\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.115|66|627\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.116|66|639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.117|66|637\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.118|66|636\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.119|66|634\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.5.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.1|66|719\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.2|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.3|66|722\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.4|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.5|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.6|66|722\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.7|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.8|66|718\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.9|66|718\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.10|66|721\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.11|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.12|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.13|66|722\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.14|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.15|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.16|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.17|66|719\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.18|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.19|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.20|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.21|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.22|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.23|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.24|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.25|66|721\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.26|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.27|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.28|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.29|66|720\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.30|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.31|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.32|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.33|66|720\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.34|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.35|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.36|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.37|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.38|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.39|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.40|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.41|66|724\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.42|66|723\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.43|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.44|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.45|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.46|66|706\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.47|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.48|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.49|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.50|66|718\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.51|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.52|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.53|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.54|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.55|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.56|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.57|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.58|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.59|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.60|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.61|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.62|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.63|66|720\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.64|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.65|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.66|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.67|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.68|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.69|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.70|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.71|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.72|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.73|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.74|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.75|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.76|66|708\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.77|66|718\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.78|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.79|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.80|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.81|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.82|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.83|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.84|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.85|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.86|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.87|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.88|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.89|66|720\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.90|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.91|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.92|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.93|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.94|66|707\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.95|66|707\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.96|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.97|66|716\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.98|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.99|66|717\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.100|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.101|66|707\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.102|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.103|66|713\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.104|66|708\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.105|66|706\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.106|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.107|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.108|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.109|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.110|66|714\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.111|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.112|66|711\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.113|66|720\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.114|66|709\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.115|66|703\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.116|66|715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.117|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.118|66|712\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.119|66|710\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.6.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.1|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.2|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.3|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.4|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.5|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.6|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.7|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.8|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.9|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.10|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.11|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.12|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.13|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.14|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.15|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.16|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.17|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.18|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.19|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.20|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.21|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.22|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.23|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.24|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.25|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.26|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.27|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.28|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.29|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.30|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.31|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.32|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.33|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.34|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.35|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.36|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.37|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.38|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.39|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.40|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.41|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.42|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.43|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.44|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.45|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.46|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.47|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.48|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.49|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.50|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.51|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.52|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.53|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.54|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.55|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.56|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.57|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.58|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.59|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.60|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.61|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.62|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.63|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.64|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.65|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.66|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.67|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.68|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.69|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.70|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.71|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.72|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.73|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.74|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.75|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.76|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.77|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.78|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.79|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.80|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.81|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.82|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.83|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.84|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.85|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.86|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.87|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.88|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.89|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.90|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.91|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.92|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.93|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.94|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.95|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.96|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.97|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.98|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.99|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.100|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.101|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.102|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.103|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.104|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.105|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.106|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.107|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.108|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.109|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.110|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.111|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.112|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.113|66|90\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.114|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.115|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.116|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.117|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.118|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.119|66|89\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.7.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.1|66|776128\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.2|66|776139\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.3|66|776150\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.4|66|776161\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.5|66|776172\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.6|66|776182\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.7|66|776193\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.8|66|776204\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.9|66|776215\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.10|66|776226\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.11|66|776237\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.12|66|776248\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.13|66|776259\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.14|66|776269\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.15|66|776280\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.16|66|776291\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.17|66|776302\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.18|66|776313\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.19|66|776324\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.20|66|776335\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.21|66|776345\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.22|66|776356\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.23|66|776367\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.24|66|776378\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.25|66|776389\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.26|66|776400\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.27|66|776411\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.28|66|776421\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.29|66|776432\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.30|66|776443\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.31|66|776454\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.32|66|776465\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.33|66|776476\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.34|66|776487\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.35|66|776498\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.36|66|776508\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.37|66|776519\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.38|66|776530\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.39|66|776541\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.40|66|776552\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.41|66|776563\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.42|66|776574\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.43|66|776585\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.44|66|776595\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.45|66|776606\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.46|66|776617\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.47|66|776628\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.48|66|776639\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.49|66|776650\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.50|66|776661\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.51|66|776672\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.52|66|776682\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.53|66|776693\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.54|66|776704\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.55|66|776715\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.56|66|776726\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.57|66|776737\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.58|66|776748\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.59|66|776759\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.60|66|776769\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.61|66|776780\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.62|66|776791\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.63|66|776802\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.64|66|776813\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.65|66|776824\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.66|66|776835\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.67|66|776846\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.68|66|776856\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.69|66|776867\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.70|66|776878\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.71|66|776889\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.72|66|776900\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.73|66|776911\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.74|66|776922\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.75|66|776933\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.76|66|776943\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.77|66|776954\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.78|66|776965\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.79|66|776976\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.80|66|776987\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.81|66|776998\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.82|66|777009\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.83|66|777020\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.84|66|775727\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.85|66|775738\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.86|66|775749\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.87|66|775760\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.88|66|775771\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.89|66|775782\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.90|66|775792\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.91|66|775803\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.92|66|775814\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.93|66|775825\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.94|66|775836\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.95|66|775847\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.96|66|775857\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.97|66|775868\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.98|66|775879\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.99|66|775890\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.100|66|775901\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.101|66|775912\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.102|66|775922\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.103|66|775933\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.104|66|775944\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.105|66|775955\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.106|66|775966\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.107|66|775976\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.108|66|775987\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.109|66|775998\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.110|66|776009\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.111|66|776020\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.112|66|776031\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.113|66|776041\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.114|66|776052\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.115|66|776063\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.116|66|776074\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.117|66|776085\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.118|66|776096\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.119|66|776106\n1.3.6.1.4.1.13742.6.6.2.3.1.6.1.1.8.120|66|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.1|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.2|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.3|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.4|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.5|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.6|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.7|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.8|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.9|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.10|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.11|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.12|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.13|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.14|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.15|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.16|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.17|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.18|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.19|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.20|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.21|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.22|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.23|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.24|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.25|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.26|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.27|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.28|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.29|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.30|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.31|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.32|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.33|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.34|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.35|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.36|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.37|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.38|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.39|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.40|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.41|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.42|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.43|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.44|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.45|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.46|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.47|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.48|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.49|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.50|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.51|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.52|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.53|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.54|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.55|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.56|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.57|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.58|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.59|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.60|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.61|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.62|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.63|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.64|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.65|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.66|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.67|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.68|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.69|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.70|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.71|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.72|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.73|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.74|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.75|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.76|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.77|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.78|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.79|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.80|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.81|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.82|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.83|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.84|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.85|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.86|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.87|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.88|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.89|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.90|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.91|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.92|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.93|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.94|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.95|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.96|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.97|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.98|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.99|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.100|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.101|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.102|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.103|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.104|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.105|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.106|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.107|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.108|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.109|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.110|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.111|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.112|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.113|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.114|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.115|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.116|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.117|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.118|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.119|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.1.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.1|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.2|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.3|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.4|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.5|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.6|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.7|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.8|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.9|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.10|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.11|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.12|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.13|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.14|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.15|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.16|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.17|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.18|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.19|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.20|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.21|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.22|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.23|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.24|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.25|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.26|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.27|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.28|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.29|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.30|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.31|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.32|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.33|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.34|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.35|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.36|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.37|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.38|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.39|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.40|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.41|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.42|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.43|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.44|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.45|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.46|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.47|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.48|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.49|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.50|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.51|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.52|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.53|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.54|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.55|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.56|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.57|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.58|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.59|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.60|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.61|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.62|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.63|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.64|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.65|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.66|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.67|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.68|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.69|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.70|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.71|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.72|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.73|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.74|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.75|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.76|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.77|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.78|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.79|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.80|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.81|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.82|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.83|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.84|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.85|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.86|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.87|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.88|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.89|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.90|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.91|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.92|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.93|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.94|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.95|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.96|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.97|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.98|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.99|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.100|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.101|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.102|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.103|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.104|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.105|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.106|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.107|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.108|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.109|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.110|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.111|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.112|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.113|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.114|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.115|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.116|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.117|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.118|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.119|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.4.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.1|2|655\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.2|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.3|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.4|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.5|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.6|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.7|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.8|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.9|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.10|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.11|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.12|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.13|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.14|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.15|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.16|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.17|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.18|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.19|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.20|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.21|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.22|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.23|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.24|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.25|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.26|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.27|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.28|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.29|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.30|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.31|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.32|2|656\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.33|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.34|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.35|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.36|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.37|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.38|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.39|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.40|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.41|2|656\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.42|2|655\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.43|2|655\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.44|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.45|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.46|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.47|2|655\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.48|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.49|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.50|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.51|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.52|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.53|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.54|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.55|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.56|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.57|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.58|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.59|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.60|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.61|2|655\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.62|2|656\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.63|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.64|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.65|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.66|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.67|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.68|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.69|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.70|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.71|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.72|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.73|2|657\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.74|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.75|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.76|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.77|2|656\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.78|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.79|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.80|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.81|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.82|2|653\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.83|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.84|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.85|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.86|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.87|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.88|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.89|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.90|2|648\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.91|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.92|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.93|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.94|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.95|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.96|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.97|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.98|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.99|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.100|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.101|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.102|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.103|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.104|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.105|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.106|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.107|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.108|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.109|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.110|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.111|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.112|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.113|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.114|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.115|2|648\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.116|2|652\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.117|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.118|2|650\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.119|2|651\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.5.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.1|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.2|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.3|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.4|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.5|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.6|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.7|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.8|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.9|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.10|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.11|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.12|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.13|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.14|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.15|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.16|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.17|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.18|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.19|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.20|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.21|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.22|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.23|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.24|2|723\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.25|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.26|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.27|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.28|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.29|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.30|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.31|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.32|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.33|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.34|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.35|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.36|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.37|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.38|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.39|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.40|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.41|2|730\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.42|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.43|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.44|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.45|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.46|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.47|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.48|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.49|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.50|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.51|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.52|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.53|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.54|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.55|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.56|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.57|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.58|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.59|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.60|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.61|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.62|2|729\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.63|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.64|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.65|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.66|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.67|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.68|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.69|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.70|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.71|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.72|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.73|2|730\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.74|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.75|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.76|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.77|2|730\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.78|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.79|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.80|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.81|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.82|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.83|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.84|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.85|2|723\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.86|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.87|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.88|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.89|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.90|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.91|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.92|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.93|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.94|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.95|2|723\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.96|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.97|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.98|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.99|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.100|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.101|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.102|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.103|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.104|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.105|2|722\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.106|2|727\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.107|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.108|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.109|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.110|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.111|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.112|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.113|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.114|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.115|2|722\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.116|2|726\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.117|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.118|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.119|2|725\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.6.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.1|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.2|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.3|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.4|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.5|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.6|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.7|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.8|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.9|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.10|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.11|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.12|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.13|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.14|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.15|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.16|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.17|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.18|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.19|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.20|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.21|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.22|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.23|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.24|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.25|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.26|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.27|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.28|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.29|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.30|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.31|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.32|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.33|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.34|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.35|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.36|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.37|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.38|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.39|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.40|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.41|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.42|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.43|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.44|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.45|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.46|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.47|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.48|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.49|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.50|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.51|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.52|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.53|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.54|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.55|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.56|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.57|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.58|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.59|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.60|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.61|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.62|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.63|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.64|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.65|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.66|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.67|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.68|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.69|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.70|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.71|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.72|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.73|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.74|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.75|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.76|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.77|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.78|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.79|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.80|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.81|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.82|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.83|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.84|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.85|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.86|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.87|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.88|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.89|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.90|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.91|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.92|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.93|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.94|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.95|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.96|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.97|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.98|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.99|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.100|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.101|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.102|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.103|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.104|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.105|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.106|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.107|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.108|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.109|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.110|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.111|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.112|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.113|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.114|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.115|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.116|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.117|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.118|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.119|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.7.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.1|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.2|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.3|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.4|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.5|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.6|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.7|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.8|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.9|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.10|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.11|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.12|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.13|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.14|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.15|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.16|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.17|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.18|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.19|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.20|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.21|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.22|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.23|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.24|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.25|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.26|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.27|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.28|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.29|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.30|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.31|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.32|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.33|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.34|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.35|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.36|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.37|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.38|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.39|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.40|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.41|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.42|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.43|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.44|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.45|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.46|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.47|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.48|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.49|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.50|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.51|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.52|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.53|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.54|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.55|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.56|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.57|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.58|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.59|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.60|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.61|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.62|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.63|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.64|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.65|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.66|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.67|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.68|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.69|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.70|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.71|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.72|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.73|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.74|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.75|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.76|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.77|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.78|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.79|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.80|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.81|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.82|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.83|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.84|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.85|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.86|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.87|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.88|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.89|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.90|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.91|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.92|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.93|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.94|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.95|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.96|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.97|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.98|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.99|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.100|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.101|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.102|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.103|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.104|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.105|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.106|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.107|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.108|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.109|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.110|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.111|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.112|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.113|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.114|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.115|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.116|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.117|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.118|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.119|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.7.1.1.8.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.1|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.2|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.3|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.4|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.5|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.6|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.7|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.8|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.9|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.10|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.11|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.12|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.13|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.14|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.15|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.16|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.17|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.18|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.19|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.20|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.21|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.22|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.23|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.24|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.25|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.26|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.27|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.28|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.29|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.30|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.31|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.32|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.33|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.34|2|33\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.35|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.36|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.37|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.38|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.39|2|33\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.40|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.41|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.42|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.43|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.44|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.45|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.46|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.47|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.48|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.49|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.50|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.51|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.52|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.53|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.54|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.55|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.56|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.57|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.58|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.59|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.60|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.61|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.62|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.63|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.64|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.65|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.66|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.67|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.68|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.69|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.70|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.71|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.72|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.73|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.74|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.75|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.76|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.77|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.78|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.79|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.80|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.81|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.82|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.83|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.84|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.85|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.86|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.87|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.88|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.89|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.90|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.91|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.92|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.93|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.94|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.95|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.96|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.97|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.98|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.99|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.100|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.101|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.102|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.103|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.104|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.105|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.106|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.107|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.108|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.109|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.110|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.111|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.112|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.113|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.114|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.115|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.116|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.117|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.118|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.119|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.1.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.1|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.2|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.3|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.4|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.5|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.6|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.7|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.8|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.9|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.10|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.11|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.12|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.13|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.14|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.15|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.16|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.17|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.18|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.19|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.20|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.21|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.22|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.23|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.24|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.25|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.26|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.27|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.28|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.29|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.30|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.31|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.32|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.33|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.34|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.35|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.36|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.37|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.38|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.39|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.40|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.41|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.42|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.43|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.44|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.45|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.46|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.47|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.48|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.49|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.50|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.51|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.52|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.53|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.54|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.55|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.56|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.57|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.58|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.59|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.60|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.61|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.62|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.63|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.64|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.65|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.66|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.67|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.68|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.69|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.70|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.71|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.72|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.73|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.74|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.75|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.76|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.77|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.78|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.79|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.80|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.81|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.82|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.83|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.84|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.85|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.86|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.87|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.88|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.89|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.90|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.91|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.92|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.93|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.94|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.95|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.96|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.97|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.98|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.99|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.100|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.101|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.102|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.103|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.104|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.105|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.106|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.107|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.108|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.109|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.110|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.111|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.112|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.113|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.114|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.115|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.116|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.117|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.118|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.119|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.4.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.1|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.2|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.3|2|659\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.4|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.5|2|660\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.6|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.7|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.8|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.9|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.10|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.11|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.12|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.13|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.14|2|671\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.15|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.16|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.17|2|673\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.18|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.19|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.20|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.21|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.22|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.23|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.24|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.25|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.26|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.27|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.28|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.29|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.30|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.31|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.32|2|671\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.33|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.34|2|677\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.35|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.36|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.37|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.38|2|673\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.39|2|681\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.40|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.41|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.42|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.43|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.44|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.45|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.46|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.47|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.48|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.49|2|678\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.50|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.51|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.52|2|675\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.53|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.54|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.55|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.56|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.57|2|661\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.58|2|661\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.59|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.60|2|671\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.61|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.62|2|675\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.63|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.64|2|674\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.65|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.66|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.67|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.68|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.69|2|671\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.70|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.71|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.72|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.73|2|673\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.74|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.75|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.76|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.77|2|672\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.78|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.79|2|671\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.80|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.81|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.82|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.83|2|669\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.84|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.85|2|654\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.86|2|664\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.87|2|659\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.88|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.89|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.90|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.91|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.92|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.93|2|661\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.94|2|666\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.95|2|659\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.96|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.97|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.98|2|661\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.99|2|673\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.100|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.101|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.102|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.103|2|660\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.104|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.105|2|659\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.106|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.107|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.108|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.109|2|667\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.110|2|673\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.111|2|660\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.112|2|668\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.113|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.114|2|670\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.115|2|660\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.116|2|665\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.117|2|662\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.118|2|663\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.119|2|676\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.5.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.1|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.2|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.3|2|733\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.4|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.5|2|734\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.6|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.7|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.8|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.9|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.10|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.11|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.12|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.13|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.14|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.15|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.16|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.17|2|745\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.18|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.19|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.20|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.21|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.22|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.23|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.24|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.25|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.26|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.27|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.28|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.29|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.30|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.31|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.32|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.33|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.34|2|749\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.35|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.36|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.37|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.38|2|746\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.39|2|752\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.40|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.41|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.42|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.43|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.44|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.45|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.46|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.47|2|745\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.48|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.49|2|750\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.50|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.51|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.52|2|748\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.53|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.54|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.55|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.56|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.57|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.58|2|734\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.59|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.60|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.61|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.62|2|747\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.63|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.64|2|746\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.65|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.66|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.67|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.68|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.69|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.70|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.71|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.72|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.73|2|745\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.74|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.75|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.76|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.77|2|745\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.78|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.79|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.80|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.81|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.82|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.83|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.84|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.85|2|728\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.86|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.87|2|733\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.88|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.89|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.90|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.91|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.92|2|744\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.93|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.94|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.95|2|733\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.96|2|739\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.97|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.98|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.99|2|746\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.100|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.101|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.102|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.103|2|734\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.104|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.105|2|733\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.106|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.107|2|742\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.108|2|737\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.109|2|740\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.110|2|746\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.111|2|733\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.112|2|741\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.113|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.114|2|743\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.115|2|734\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.116|2|738\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.117|2|735\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.118|2|736\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.119|2|748\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.6.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.1|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.2|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.3|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.4|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.5|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.6|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.7|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.8|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.9|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.10|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.11|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.12|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.13|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.14|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.15|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.16|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.17|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.18|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.19|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.20|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.21|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.22|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.23|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.24|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.25|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.26|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.27|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.28|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.29|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.30|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.31|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.32|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.33|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.34|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.35|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.36|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.37|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.38|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.39|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.40|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.41|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.42|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.43|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.44|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.45|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.46|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.47|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.48|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.49|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.50|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.51|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.52|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.53|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.54|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.55|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.56|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.57|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.58|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.59|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.60|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.61|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.62|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.63|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.64|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.65|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.66|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.67|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.68|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.69|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.70|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.71|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.72|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.73|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.74|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.75|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.76|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.77|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.78|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.79|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.80|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.81|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.82|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.83|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.84|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.85|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.86|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.87|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.88|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.89|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.90|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.91|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.92|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.93|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.94|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.95|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.96|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.97|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.98|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.99|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.100|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.101|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.102|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.103|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.104|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.105|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.106|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.107|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.108|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.109|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.110|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.111|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.112|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.113|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.114|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.115|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.116|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.117|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.118|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.119|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.7.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.1|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.2|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.3|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.4|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.5|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.6|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.7|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.8|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.9|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.10|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.11|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.12|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.13|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.14|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.15|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.16|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.17|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.18|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.19|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.20|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.21|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.22|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.23|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.24|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.25|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.26|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.27|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.28|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.29|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.30|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.31|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.32|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.33|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.34|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.35|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.36|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.37|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.38|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.39|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.40|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.41|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.42|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.43|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.44|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.45|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.46|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.47|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.48|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.49|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.50|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.51|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.52|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.53|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.54|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.55|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.56|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.57|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.58|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.59|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.60|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.61|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.62|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.63|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.64|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.65|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.66|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.67|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.68|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.69|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.70|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.71|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.72|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.73|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.74|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.75|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.76|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.77|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.78|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.79|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.80|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.81|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.82|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.83|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.84|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.85|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.86|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.87|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.88|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.89|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.90|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.91|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.92|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.93|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.94|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.95|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.96|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.97|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.98|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.99|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.100|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.101|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.102|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.103|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.104|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.105|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.106|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.107|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.108|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.109|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.110|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.111|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.112|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.113|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.114|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.115|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.116|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.117|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.118|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.119|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.8.1.1.8.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.1|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.2|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.3|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.4|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.5|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.6|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.7|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.8|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.9|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.10|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.11|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.12|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.13|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.14|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.15|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.16|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.17|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.18|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.19|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.20|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.21|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.22|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.23|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.24|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.25|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.26|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.27|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.28|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.29|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.30|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.31|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.32|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.33|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.34|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.35|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.36|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.37|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.38|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.39|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.40|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.41|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.42|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.43|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.44|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.45|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.46|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.47|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.48|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.49|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.50|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.51|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.52|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.53|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.54|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.55|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.56|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.57|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.58|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.59|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.60|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.61|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.62|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.63|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.64|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.65|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.66|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.67|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.68|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.69|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.70|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.71|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.72|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.73|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.74|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.75|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.76|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.77|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.78|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.79|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.80|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.81|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.82|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.83|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.84|2|32\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.85|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.86|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.87|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.88|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.89|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.90|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.91|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.92|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.93|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.94|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.95|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.96|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.97|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.98|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.99|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.100|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.101|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.102|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.103|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.104|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.105|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.106|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.107|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.108|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.109|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.110|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.111|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.112|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.113|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.114|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.115|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.116|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.117|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.118|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.119|2|31\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.1.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.1|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.2|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.3|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.4|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.5|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.6|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.7|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.8|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.9|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.10|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.11|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.12|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.13|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.14|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.15|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.16|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.17|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.18|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.19|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.20|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.21|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.22|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.23|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.24|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.25|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.26|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.27|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.28|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.29|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.30|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.31|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.32|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.33|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.34|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.35|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.36|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.37|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.38|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.39|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.40|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.41|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.42|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.43|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.44|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.45|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.46|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.47|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.48|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.49|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.50|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.51|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.52|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.53|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.54|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.55|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.56|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.57|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.58|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.59|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.60|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.61|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.62|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.63|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.64|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.65|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.66|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.67|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.68|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.69|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.70|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.71|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.72|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.73|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.74|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.75|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.76|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.77|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.78|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.79|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.80|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.81|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.82|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.83|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.84|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.85|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.86|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.87|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.88|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.89|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.90|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.91|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.92|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.93|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.94|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.95|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.96|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.97|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.98|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.99|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.100|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.101|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.102|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.103|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.104|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.105|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.106|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.107|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.108|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.109|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.110|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.111|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.112|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.113|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.114|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.115|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.116|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.117|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.118|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.119|2|231\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.4.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.1|2|644\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.2|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.3|2|648\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.4|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.5|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.6|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.7|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.8|2|643\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.9|2|645\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.10|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.11|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.12|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.13|2|647\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.14|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.15|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.16|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.17|2|644\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.18|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.19|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.20|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.21|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.22|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.23|2|634\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.24|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.25|2|646\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.26|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.27|2|634\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.28|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.29|2|645\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.30|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.31|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.32|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.33|2|645\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.34|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.35|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.36|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.37|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.38|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.39|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.40|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.41|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.42|2|649\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.43|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.44|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.45|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.46|2|630\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.47|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.48|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.49|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.50|2|643\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.51|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.52|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.53|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.54|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.55|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.56|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.57|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.58|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.59|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.60|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.61|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.62|2|642\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.63|2|646\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.64|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.65|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.66|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.67|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.68|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.69|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.70|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.71|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.72|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.73|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.74|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.75|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.76|2|632\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.77|2|643\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.78|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.79|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.80|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.81|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.82|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.83|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.84|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.85|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.86|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.87|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.88|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.89|2|645\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.90|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.91|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.92|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.93|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.94|2|629\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.95|2|630\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.96|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.97|2|640\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.98|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.99|2|641\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.100|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.101|2|630\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.102|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.103|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.104|2|631\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.105|2|629\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.106|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.107|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.108|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.109|2|635\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.110|2|638\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.111|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.112|2|634\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.113|2|645\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.114|2|633\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.115|2|627\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.116|2|639\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.117|2|637\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.118|2|636\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.119|2|634\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.5.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.1|2|719\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.2|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.3|2|722\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.4|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.5|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.6|2|722\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.7|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.8|2|718\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.9|2|718\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.10|2|721\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.11|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.12|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.13|2|722\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.14|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.15|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.16|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.17|2|719\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.18|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.19|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.20|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.21|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.22|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.23|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.24|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.25|2|721\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.26|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.27|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.28|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.29|2|720\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.30|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.31|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.32|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.33|2|720\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.34|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.35|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.36|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.37|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.38|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.39|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.40|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.41|2|724\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.42|2|723\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.43|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.44|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.45|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.46|2|706\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.47|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.48|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.49|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.50|2|718\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.51|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.52|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.53|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.54|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.55|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.56|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.57|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.58|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.59|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.60|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.61|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.62|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.63|2|720\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.64|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.65|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.66|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.67|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.68|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.69|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.70|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.71|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.72|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.73|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.74|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.75|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.76|2|708\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.77|2|718\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.78|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.79|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.80|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.81|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.82|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.83|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.84|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.85|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.86|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.87|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.88|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.89|2|720\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.90|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.91|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.92|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.93|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.94|2|707\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.95|2|707\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.96|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.97|2|716\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.98|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.99|2|717\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.100|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.101|2|707\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.102|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.103|2|713\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.104|2|708\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.105|2|706\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.106|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.107|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.108|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.109|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.110|2|714\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.111|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.112|2|711\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.113|2|720\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.114|2|709\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.115|2|703\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.116|2|715\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.117|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.118|2|712\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.119|2|710\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.6.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.1|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.2|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.3|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.4|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.5|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.6|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.7|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.8|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.9|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.10|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.11|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.12|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.13|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.14|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.15|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.16|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.17|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.18|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.19|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.20|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.21|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.22|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.23|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.24|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.25|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.26|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.27|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.28|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.29|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.30|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.31|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.32|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.33|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.34|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.35|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.36|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.37|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.38|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.39|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.40|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.41|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.42|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.43|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.44|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.45|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.46|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.47|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.48|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.49|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.50|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.51|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.52|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.53|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.54|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.55|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.56|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.57|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.58|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.59|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.60|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.61|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.62|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.63|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.64|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.65|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.66|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.67|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.68|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.69|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.70|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.71|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.72|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.73|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.74|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.75|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.76|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.77|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.78|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.79|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.80|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.81|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.82|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.83|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.84|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.85|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.86|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.87|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.88|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.89|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.90|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.91|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.92|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.93|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.94|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.95|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.96|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.97|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.98|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.99|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.100|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.101|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.102|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.103|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.104|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.105|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.106|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.107|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.108|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.109|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.110|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.111|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.112|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.113|2|90\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.114|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.115|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.116|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.117|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.118|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.119|2|89\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.7.120|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.1|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.2|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.3|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.4|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.5|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.6|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.7|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.8|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.9|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.10|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.11|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.12|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.13|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.14|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.15|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.16|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.17|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.18|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.19|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.20|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.21|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.22|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.23|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.24|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.25|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.26|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.27|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.28|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.29|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.30|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.31|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.32|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.33|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.34|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.35|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.36|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.37|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.38|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.39|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.40|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.41|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.42|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.43|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.44|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.45|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.46|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.47|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.48|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.49|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.50|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.51|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.52|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.53|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.54|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.55|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.56|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.57|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.58|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.59|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.60|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.61|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.62|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.63|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.64|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.65|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.66|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.67|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.68|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.69|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.70|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.71|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.72|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.73|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.74|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.75|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.76|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.77|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.78|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.79|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.80|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.81|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.82|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.83|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.84|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.85|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.86|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.87|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.88|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.89|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.90|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.91|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.92|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.93|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.94|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.95|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.96|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.97|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.98|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.99|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.100|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.101|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.102|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.103|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.104|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.105|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.106|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.107|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.108|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.109|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.110|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.111|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.112|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.113|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.114|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.115|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.116|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.117|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.118|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.119|2|0\n1.3.6.1.4.1.13742.6.6.2.3.1.9.1.1.8.120|2|0\n1.3.6.1.4.1.13742.6.10.1.1.0|2|1\n1.3.6.1.4.1.13742.6.10.1.2.1.2.1|4|POH\n1.3.6.1.4.1.13742.6.10.1.2.1.2.2|4x|43422e43312e54524950434e54\n1.3.6.1.4.1.13742.6.10.1.2.1.2.3|4x|43422e43322e54524950434e54\n1.3.6.1.4.1.13742.6.10.1.2.1.2.4|4x|31574952452e4353554d455252434e54\n1.3.6.1.4.1.13742.6.10.1.2.1.2.5|4x|31574952452e4353554d45525252415445\n1.3.6.1.4.1.13742.6.10.1.2.1.3.1|66|98\n1.3.6.1.4.1.13742.6.10.1.2.1.3.2|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.3.3|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.3.4|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.3.5|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.4.1|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.4.2|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.4.3|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.4.4|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.4.5|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.5.1|66|98\n1.3.6.1.4.1.13742.6.10.1.2.1.5.2|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.5.3|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.5.4|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.5.5|66|100\n1.3.6.1.4.1.13742.6.10.1.2.1.6.1|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.6.2|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.6.3|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.6.4|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.6.5|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.7.1|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.7.2|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.7.3|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.7.4|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.7.5|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.8.1|66|1754\n1.3.6.1.4.1.13742.6.10.1.2.1.8.2|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.8.3|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.8.4|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.8.5|66|0\n1.3.6.1.4.1.13742.6.10.1.2.1.9.1|4x|00000000\n1.3.6.1.4.1.13742.6.10.1.2.1.9.2|4x|00000000\n1.3.6.1.4.1.13742.6.10.1.2.1.9.3|4x|00000000\n1.3.6.1.4.1.13742.6.10.1.2.1.9.4|4x|00000000\n1.3.6.1.4.1.13742.6.10.1.2.1.9.5|4x|00000000\n1.3.6.1.4.1.13742.7.1.1.0|2|0\n"
  },
  {
    "path": "tests/integration/snmp_fixtures/snmpwalk.snmprec",
    "content": "1.3.6.1.2.1.47.1.1.1.1.16.39|2|2"
  },
  {
    "path": "tests/integration/snmp_walk_test.py",
    "content": "import pytest\nfrom nav.Snmp.defines import AuthenticationProtocol, PrivacyProtocol, SecurityLevel\nfrom nav.Snmp.errors import UnsupportedSnmpVersionError\nfrom nav.Snmp.pynetsnmp import Snmp\n\n\ndef test_snmp_walk_does_not_raise_error_at_end_of_mib_with_snmp_version_1(snmpsim):\n    snmp_v1 = Snmp(host='127.0.0.1', community=\"snmpwalk\", version=\"1\", port=1024)\n    result = snmp_v1.walk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n    assert result == []\n\n\ndef test_snmp_walk_does_not_raise_error_at_end_of_mib_with_snmp_version_2(snmpsim):\n    snmp_v2 = Snmp(host='127.0.0.1', community=\"snmpwalk\", version=\"2c\", port=1024)\n    result = snmp_v2.walk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n    assert result == []\n\n\ndef test_snmp_bulkwalk_does_not_raise_error_at_end_of_mib(snmpsim):\n    snmp_v2 = Snmp(host='127.0.0.1', community=\"snmpwalk\", version=\"2c\", port=1024)\n    result = snmp_v2.bulkwalk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n    assert result == []\n\n\ndef test_given_an_snmpv1_session_then_snmp_bulkwalk_should_raise_unsupported_version_error(  # noqa: E501\n    snmpsim,\n):\n    snmp_v1 = Snmp(host='127.0.0.1', community=\"snmpwalk\", version=\"1\", port=1024)\n    with pytest.raises(UnsupportedSnmpVersionError):\n        snmp_v1.bulkwalk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n\n\ndef test_given_an_snmpv2c_session_then_snmp_bulkwalk_should_not_raise_unsupported_version_error(  # noqa: E501\n    snmpsim,\n):\n    snmp_v2 = Snmp(host='127.0.0.1', community=\"snmpwalk\", version=\"2c\", port=1024)\n    try:\n        snmp_v2.bulkwalk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n    except UnsupportedSnmpVersionError:\n        pytest.fail(\n            \"UnsupportedSnmpVersionError was raised unexpectedly for SNMPv2c session\"\n        )\n\n\ndef test_given_an_snmpv3_session_then_snmp_bulkwalk_should_not_raise_unsupported_version_error(  # noqa: E501\n    snmpsim,\n):\n    snmp_v3 = Snmp(\n        host='127.0.0.1',\n        version=\"3\",\n        sec_level=SecurityLevel.AUTH_PRIV,\n        auth_protocol=AuthenticationProtocol.SHA,\n        sec_name=\"vogon-guard\",\n        auth_password=\"foobar123\",\n        priv_protocol=PrivacyProtocol.AES,\n        priv_password=\"zaphod123\",\n        port=1024,\n    )\n    try:\n        snmp_v3.bulkwalk(query=\"1.3.6.1.2.1.47.1.1.1.1.16.39\")\n    except UnsupportedSnmpVersionError:\n        pytest.fail(\n            \"UnsupportedSnmpVersionError was raised unexpectedly for SNMPv3 session\"\n        )\n    except Exception:  # noqa: BLE001\n        # snmpsim doesn't really support v3, AFAIK, so we will get other errors here,\n        # but we don't care\n        pass\n"
  },
  {
    "path": "tests/integration/snmptrapd_test.py",
    "content": "import configparser\nimport pytest\nimport signal\nimport time\nfrom nav.config import find_config_file\nfrom nav.snmptrapd.plugin import load_handler_modules\nfrom nav.snmptrapd.trap import SNMPTrap\n\n# Implementation tests for plugins\n\n\ndef test_loading_plugin_with_initialize_method_raises_no_exception():\n    loader = load_handler_modules(['nav.snmptrapd.handlers.weathergoose'])\n\n    assert loader[0] == __import__(\n        'nav.snmptrapd.handlers.weathergoose', globals(), locals(), ['weathergoose']\n    )\n\n    assert hasattr(loader[0], 'initialize')\n\n\ndef test_plugin_loader_raises_no_exception_if_plugin_has_no_initialize_method():\n    loader = load_handler_modules(['nav.snmptrapd.handlers.airespace'])\n\n    assert loader[0] == __import__(\n        'nav.snmptrapd.handlers.airespace', globals(), locals(), 'airespace'\n    )\n    assert not hasattr(loader[0], 'initialize')\n\n\ndef test_plugin_loader_reading_in_modules_from_config_file():\n    configfile = find_config_file(\"snmptrapd.conf\")\n    config = configparser.ConfigParser()\n    config.read(configfile)\n    list_from_config = config.get('snmptrapd', 'handlermodules').split(',')\n\n    assert isinstance(list_from_config, list)\n    if len(list_from_config) <= 0:\n        pytest.skip(\n            \"Requires at least one plugin in snmptrapd.conf to run\"\n            \" this integration test with loading plugins\"\n        )\n\n    loaded_modules = load_handler_modules(list_from_config)\n    assert len(list_from_config) == len(loaded_modules)\n\n\ndef test_traplistener_does_not_raise_error_on_signals():\n    class TestIsOk(Exception):\n        pass\n\n    def second_alarm(*_):\n        print(\"Second ALRM signal received\")\n        raise TestIsOk()\n\n    def first_alarm(*_):\n        print(\"First ALRM signal received\")\n        signal.signal(signal.SIGALRM, second_alarm)\n        signal.alarm(1)\n\n    signal.signal(signal.SIGALRM, first_alarm)\n\n    from nav.snmptrapd.agent_pynetsnmp import TrapListener\n\n    handler = TrapListener(('127.0.0.1', 0))\n    signal.alarm(1)\n    time.sleep(0.5)\n    handler.open()\n    try:\n        with pytest.raises(TestIsOk):\n            handler.listen('public', lambda x, y: None)\n    finally:\n        handler.close()\n        signal.signal(signal.SIGALRM, signal.SIG_DFL)\n        signal.alarm(0)\n\n\nclass TestSnmpTrap:\n    def test_trap_agent_should_be_correctly_identified(self, localhost_using_legacy_db):\n        trap = SNMPTrap(\n            src=\"127.0.0.1\",\n            agent=\"127.0.0.1\",\n            type=None,\n            genericType=None,\n            snmpTrapOID=None,\n            uptime=None,\n            community=\"public\",\n            version=2,\n            varbinds={},\n        )\n        netbox = trap.netbox\n        assert netbox.netboxid == localhost_using_legacy_db\n\n    def test_trap_agent_should_be_correctly_identified_if_sent_from_different_ip(\n        self, localhost_using_legacy_db, gwportprefix_using_legacy_db\n    ):\n        trap = SNMPTrap(\n            src=localhost_using_legacy_db,\n            agent=gwportprefix_using_legacy_db,\n            type=None,\n            genericType=None,\n            snmpTrapOID=None,\n            uptime=None,\n            community=\"public\",\n            version=2,\n            varbinds={},\n        )\n        netbox = trap.netbox\n        assert netbox.netboxid == localhost_using_legacy_db\n\n\n@pytest.fixture()\ndef interface_using_legacy_db(localhost_using_legacy_db):\n    from nav.db import getConnection\n\n    conn = getConnection('default')\n    cursor = conn.cursor()\n\n    sql = \"\"\"\n        INSERT INTO interface\n        (netboxid)\n        VALUES\n        (%s)\n        RETURNING interfaceid;\n        \"\"\"\n    cursor.execute(sql, (localhost_using_legacy_db,))\n    interfaceid = cursor.fetchone()[0]\n    conn.commit()\n    yield interfaceid\n\n    print(\"teardown interface using legacy connection\")\n    cursor.execute(\"DELETE FROM interface WHERE interfaceid=%s\", (interfaceid,))\n    conn.commit()\n\n\n@pytest.fixture()\ndef gwportprefix_using_legacy_db(interface_using_legacy_db):\n    gwip = \"127.0.0.2\"\n\n    from nav.db import getConnection\n\n    conn = getConnection('default')\n    cursor = conn.cursor()\n\n    sql = \"\"\"\n        INSERT INTO gwportprefix\n        (interfaceid, prefixid, gwip)\n        VALUES\n        (%s, 1, %s)\n        RETURNING gwip;\n        \"\"\"\n    cursor.execute(sql, (interface_using_legacy_db, gwip))\n    gwip = cursor.fetchone()[0]\n    conn.commit()\n    yield gwip\n\n    print(\"teardown gwportprefix using legacy connection\")\n    cursor.execute(\"DELETE FROM gwportprefix WHERE gwip=%s\", (gwip,))\n    conn.commit()\n"
  },
  {
    "path": "tests/integration/sql_test.py",
    "content": "# testing the sql schemas\nfrom nav.db import getConnection\n\n\ndef test_public_namespace_should_be_empty():\n    cursor = getConnection('default').cursor()\n    cursor.execute(\n        \"\"\"SELECT relname\n                      FROM pg_class c\n                      JOIN pg_namespace n ON (c.relnamespace=n.oid)\n                      WHERE nspname='public'\n                      ORDER BY nspname\"\"\"\n    )\n\n    names = [n for (n,) in cursor.fetchall()]\n    assert len(names) == 0, (\n        \"Objects have been defined in the public namespace: \" + \".\".join(names)\n    )\n"
  },
  {
    "path": "tests/integration/statemon/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/statemon/radius_test.py",
    "content": "from nav.statemon.checker.RadiusChecker import DEFAULT_DICTIONARY\n\nfrom pyrad.dictionary import Dictionary\n\n\ndef test_installed_pyrad_can_parse_default_dictionary():\n    assert Dictionary(DEFAULT_DICTIONARY)\n"
  },
  {
    "path": "tests/integration/statemondb_test.py",
    "content": "\"\"\"Some simple integration tests for the legacy statemon system\"\"\"\n\nfrom nav.statemon import db\n\n\ndef test_get_checkers_does_not_raise():\n    conn = db.db()\n    assert conn.get_checkers(True) is not None\n"
  },
  {
    "path": "tests/integration/thresholdmon/test_events.py",
    "content": "import pytest\n\nfrom nav.models.thresholds import ThresholdRule\nfrom nav import thresholdmon\n\n\ndef test_events(rule):\n    assert thresholdmon.get_unresolved_threshold_alerts() == {}\n\n    event = thresholdmon.start_event(rule, 'foo.bar', 2)\n    assert event.state == event.STATE_START\n    assert event.source_id == 'thresholdMon'\n    assert event.target_id == 'eventEngine'\n    assert event.event_type_id == 'thresholdState'\n\n    event = thresholdmon.end_event(rule, 'foo.bar', 0)\n    assert event.state == event.STATE_END\n    assert event.source_id == 'thresholdMon'\n    assert event.target_id == 'eventEngine'\n    assert event.event_type_id == 'thresholdState'\n\n    assert thresholdmon.get_unresolved_threshold_alerts() == {}\n\n\n@pytest.fixture\ndef rule():\n    rule = ThresholdRule(target='foo.bar>1', alert='high foobar')\n    rule.save()\n    yield rule\n    rule.delete()\n"
  },
  {
    "path": "tests/integration/update_ouis_test.py",
    "content": "\"\"\"Tests nav/bin/update_ouis.py script for updating OUI records\"\"\"\n\nfrom unittest.mock import Mock\nimport pytest\n\nfrom nav.models.oui import OUI\nfrom nav.bin.update_ouis import run as update_ouis\n\n\ndef test_vendor_name_should_be_registered_correctly(db, mock_oui_file):\n    update_ouis()\n    ingram = OUI.objects.get(oui=\"10-E9-92-00-00-00\")\n    assert ingram.vendor == \"INGRAM MICRO SERVICES\"\n\n\ndef test_oui_should_be_registered_as_mac_address_with_last_3_octets_as_zeros(\n    db, mock_oui_file\n):\n    update_ouis()\n    assert OUI.objects.filter(oui=\"10-E9-92-00-00-00\").exists()\n\n\ndef test_all_unique_ouis_should_be_registered(db, mock_oui_file):\n    update_ouis()\n    assert OUI.objects.count() == 5\n\n\ndef test_duplicate_ouis_should_not_be_registered(db, mock_duplicate_oui_file):\n    \"\"\"\n    The OUI file we use is known to have duplicate OUIs, but only one should be\n    registered\n    \"\"\"\n    update_ouis()\n    assert OUI.objects.count() == 1\n\n\ndef test_old_ouis_should_be_deleted_if_they_dont_exist_in_new_oui_file(\n    db, mock_oui_file\n):\n    old_vendor_oui = \"AA-AA-AA-00-00-00\"\n    OUI.objects.create(oui=old_vendor_oui, vendor=\"Old vendor\")\n    update_ouis()\n    assert OUI.objects.count() == 5\n    assert not OUI.objects.filter(oui=old_vendor_oui).exists()\n\n\ndef test_invalid_oui_should_not_be_registered(db, mock_invalid_oui_file):\n    update_ouis()\n    assert OUI.objects.count() == 0\n\n\n@pytest.fixture()\ndef mock_oui_file(monkeypatch):\n    mocked_oui_data = \"\"\"\nOUI/MA-L                                                    Organization\ncompany_id                                                  Organization\n                                                            Address\n\n10-E9-92   (hex)\t\t    INGRAM MICRO SERVICES\n10E992     (base 16)\t\tINGRAM MICRO SERVICES\n                            100 CHEMIN DE BAILLOT\n                            MONTAUBAN    82000\n                            FR\n\n78-F2-76   (hex)\t\t    Cyklop Fastjet Technologies (Shanghai) Inc.\n78F276     (base 16)\t\tCyklop Fastjet Technologies (Shanghai) Inc.\n                            No 18?Lane 699, Zhang Wengmiao Rd,  Fengxian district, Shanghai China\n                            Shanghai    201401\n                            CN\n\n28-6F-B9   (hex)\t\t    Nokia Shanghai Bell Co., Ltd.\n286FB9     (base 16)\t\tNokia Shanghai Bell Co., Ltd.\n                            No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai\n                            Shanghai     201206\n                            CN\n\nE0-A1-29   (hex)\t\t    Extreme Networks Headquarters\nE0A129     (base 16)\t\tExtreme Networks Headquarters\n                            2121 RDU Center Drive\n                            Morrisville  NC  27560\n                            US\n\nA8-C6-47   (hex)\t\t    Extreme Networks Headquarters\nA8C647     (base 16)\t\tExtreme Networks Headquarters\n                            2121 RDU Center Drive\n                            Morrisville  NC  27560\n                            US\n    \"\"\"  # noqa: E501\n    download_file_mock = Mock(return_value=mocked_oui_data)\n    monkeypatch.setattr(\"nav.bin.update_ouis._download_oui_file\", download_file_mock)\n\n\n@pytest.fixture()\ndef mock_duplicate_oui_file(monkeypatch):\n    mocked_oui_data = \"\"\"\nOUI/MA-L                                                    Organization\ncompany_id                                                  Organization\n                                                            Address\n\n08-00-30   (hex)\t\t    NETWORK RESEARCH CORPORATION\n080030     (base 16)\t\tNETWORK RESEARCH CORPORATION\n                            2380 N. ROSE AVENUE\n                            OXNARD  CA  93010\n                            US\n\n08-00-30   (hex)\t\t    ROYAL MELBOURNE INST OF TECH\n080030     (base 16)\t\tROYAL MELBOURNE INST OF TECH\n                            GPO BOX 2476V\n                            MELBOURNE  VIC  3001\n                            AU\n\n08-00-30   (hex)\t\t    CERN\n080030     (base 16)\t\tCERN\n                            CH-1211\n                            GENEVE  SUISSE/SWITZ  023\n                            CH\n    \"\"\"\n    download_file_mock = Mock(return_value=mocked_oui_data)\n    monkeypatch.setattr(\"nav.bin.update_ouis._download_oui_file\", download_file_mock)\n\n\n@pytest.fixture()\ndef mock_invalid_oui_file(monkeypatch):\n    mocked_oui_data = \"\"\"\nOUI/MA-L                                                    Organization\ncompany_id                                                  Organization\n                                                            Address\n\ninvalidhex   (hex)\t\t    INGRAM MICRO SERVICES\n10E992     (base 16)\t\tINGRAM MICRO SERVICES\n                            100 CHEMIN DE BAILLOT\n                            MONTAUBAN    82000\n                            FR\n    \"\"\"\n    download_file_mock = Mock(return_value=mocked_oui_data)\n    monkeypatch.setattr(\"nav.bin.update_ouis._download_oui_file\", download_file_mock)\n"
  },
  {
    "path": "tests/integration/watchdog_test.py",
    "content": "from nav.watchdog.util import get_statuses\n\n\ndef test_get_status_cache_does_not_raise():\n    \"\"\"Regression test for issue where pickle cache is poisoned from\n    cross-environment testing - get_statuses() cache handling was bad\n    \"\"\"\n    assert get_statuses()\n"
  },
  {
    "path": "tests/integration/web/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/web/ajax_test.py",
    "content": "from django.urls import reverse\n\n\ndef test_neighbormap_loads_without_crashing(db, localhost, client):\n    url = reverse(\"ajax-get-neighbors\", args=(localhost.pk,))\n    response = client.get(url)\n    assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/web/alertprofiles_test.py",
    "content": "# -*- coding: utf-8 -*-\nfrom random import randint\n\nfrom mock import MagicMock, patch\nimport pytest\n\nfrom django.test.client import RequestFactory\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom nav.models.profiles import (\n    AlertAddress,\n    AlertPreference,\n    AlertProfile,\n    AlertSender,\n    AlertSubscription,\n    Expression,\n    Filter,\n    FilterGroup,\n    MatchField,\n    Operator,\n    TimePeriod,\n)\nfrom nav.web.alertprofiles.views import set_active_profile\nfrom nav.web.auth.utils import set_account\n\n\n@pytest.mark.parametrize(\n    \"view\",\n    [\n        'alertprofiles-overview',\n        'alertprofiles-profile',\n        'alertprofiles-profile-new',\n        'alertprofiles-sms',\n        'alertprofiles-address',\n        'alertprofiles-address-new',\n        'alertprofiles-filters',\n        'alertprofiles-filters-new',\n        'alertprofiles-filter_groups',\n        'alertprofiles-filter_groups-new',\n        'alertprofiles-matchfields',\n        'alertprofiles-matchfields-new',\n        'alertprofiles-permissions',\n    ],\n)\ndef test_alertprofiles_view(client, view):\n    \"\"\"Simple GET tests for various non-modifying alertprofiles views\"\"\"\n    url = reverse(view)\n    response = client.get(url)\n    assert \"admin\" in smart_str(response.content)\n\n\nclass TestsOverview:\n    def test_show_active_profile(self, db, client, activated_dummy_profile):\n        response = client.get(reverse('alertprofiles-overview'))\n\n        assert response.status_code == 200\n        assert activated_dummy_profile.name in smart_str(response.content)\n\n    def test_when_no_active_profile_is_set_show_message(self, db, client):\n        response = client.get(reverse('alertprofiles-overview'))\n\n        assert response.status_code == 200\n        assert \"There is no active profile set\" in smart_str(response.content)\n\n    def test_show_subscriptions(\n        self,\n        db,\n        client,\n        dummy_alert_address,\n        dummy_filter_group,\n        dummy_alert_subscription,\n    ):\n        response = client.get(reverse('alertprofiles-overview'))\n\n        assert response.status_code == 200\n        assert dummy_alert_address.address in smart_str(response.content)\n        assert str(dummy_filter_group) in smart_str(response.content)\n\n    def test_should_include_modal_trigger(self, client):\n        url = reverse('alertprofiles-overview')\n        modal_url = reverse('alertprofiles-groups-and-permissions')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert f'hx-get=\"{modal_url}\"' in smart_str(response.content)\n\n    def test_should_render_permissions_modal(self, client):\n        url = reverse('alertprofiles-groups-and-permissions')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"groups-and-permissions\"' in smart_str(response.content)\n\n\nclass TestsAlertProfiles:\n    def test_profile_with_nonascii_name_should_be_saved(self, db, admin_account):\n        factory = RequestFactory()\n        request = factory.get(reverse('alertprofiles-profile-save'))\n        request.session = MagicMock()\n        set_account(request, admin_account)\n        profile = AlertProfile(account=admin_account, name='ÆØÅ')\n        profile.save()\n\n        assert set_active_profile(request, profile) is None\n\n    def test_show_non_existent_profile(self, db, client):\n        last_alert_profile_id = getattr(AlertProfile.objects.last(), \"pk\", 0)\n        response = client.get(\n            path=reverse(\n                'alertprofiles-profile-detail', args=(last_alert_profile_id + 1,)\n            ),\n            follow=True,\n        )\n\n        assert response.status_code == 200\n        assert \"The requested profile does not exist.\" in smart_str(response.content)\n\n    def test_alertprofiles_save_profile(self, db, client):\n        url = reverse('alertprofiles-profile-save')\n        profile_name = 'Catch 22'\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'name': profile_name,\n                'daily_dispatch_time': '08:00',\n                'weekly_dispatch_time': '08:00',\n                'weekly_dispatch_day': AlertProfile.MONDAY,\n            },\n        )\n\n        assert response.status_code == 200\n        assert \"Saved profile\" in smart_str(response.content)\n        assert AlertProfile.objects.filter(name=profile_name).count() > 0\n\n    @patch(\"nav.web.alertprofiles.views.read_time_period_templates\")\n    def test_alertprofiles_save_profile_with_time_period_template(\n        self, read_time_period_templates, db, client\n    ):\n        read_time_period_templates.return_value = {\n            'abc': {\n                'all_week': {'period_1': '22:00'},\n                'weekdays': {'period_1': '08:00', 'period_2': '16:00'},\n                'weekends': {'period_1': '08:00'},\n            }\n        }\n\n        url = reverse('alertprofiles-profile-save')\n        profile_name = 'Catch 22'\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'name': profile_name,\n                'daily_dispatch_time': '08:00',\n                'weekly_dispatch_time': '08:00',\n                'weekly_dispatch_day': AlertProfile.MONDAY,\n                'template': 'abc',\n            },\n        )\n\n        assert response.status_code == 200\n        assert \"Saved profile\" in smart_str(response.content)\n        assert TimePeriod.objects.filter(\n            profile__name=profile_name,\n            start=\"22:00\",\n            valid_during=TimePeriod.ALL_WEEK,\n        ).exists()\n        assert TimePeriod.objects.filter(\n            profile__name=profile_name,\n            start=\"08:00\",\n            valid_during=TimePeriod.WEEKDAYS,\n        ).exists()\n        assert TimePeriod.objects.filter(\n            profile__name=profile_name,\n            start=\"16:00\",\n            valid_during=TimePeriod.WEEKDAYS,\n        ).exists()\n        assert TimePeriod.objects.filter(\n            profile__name=profile_name,\n            start=\"08:00\",\n            valid_during=TimePeriod.WEEKENDS,\n        ).exists()\n\n    def test_alertprofiles_save_profile_with_str_id_should_fail(self, db, client):\n        url = reverse('alertprofiles-profile-save')\n        profile_name = 'Catch 22'\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'id': \"-9337'))) ORDER BY 1-- SVmx\",\n                'name': profile_name,\n                'daily_dispatch_time': '08:00',\n                'weekly_dispatch_time': '08:00',\n                'weekly_dispatch_day': AlertProfile.MONDAY,\n            },\n        )\n\n        assert response.status_code == 404\n        assert 'Requested profile does not exist' in smart_str(response.content)\n        assert not AlertProfile.objects.filter(name=profile_name).exists()\n\n    def test_alertprofiles_save_profile_with_non_existent_id_should_fail(\n        self, db, client\n    ):\n        url = reverse('alertprofiles-profile-save')\n        profile_name = 'Catch 22'\n        last_alert_profile_id = getattr(AlertProfile.objects.last(), \"pk\", 0)\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'id': last_alert_profile_id + 1,\n                'name': profile_name,\n                'daily_dispatch_time': '08:00',\n                'weekly_dispatch_time': '08:00',\n                'weekly_dispatch_day': AlertProfile.MONDAY,\n            },\n        )\n\n        assert response.status_code == 404\n        assert 'Requested profile does not exist' in smart_str(response.content)\n        assert not AlertProfile.objects.filter(name=profile_name).exists()\n\n    def test_alertprofiles_confirm_remove_profile(self, db, client, dummy_profile):\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'confirm': '1',\n                'element': [dummy_profile.id],\n            },\n        )\n        assert response.status_code == 200\n        assert AlertProfile.objects.filter(pk=dummy_profile.pk).count() == 0\n\n    def test_alertprofiles_remove_profile(self, db, client, activated_dummy_profile):\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'profile': [activated_dummy_profile.id],\n            },\n        )\n        assert response.status_code == 200\n        assert \"Confirm deletion\" in smart_str(response.content)\n        assert activated_dummy_profile.name in smart_str(response.content)\n        assert AlertProfile.objects.filter(pk=activated_dummy_profile.pk).count() == 1\n\n    def test_alertprofiles_activate_profile(self, db, client, dummy_profile):\n        # remarkably, activation/deactivation of profiles belong in the remove view!\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'activate': dummy_profile.id,\n            },\n        )\n        assert response.status_code == 200\n        assert \"Active profile set\" in smart_str(response.content)\n        assert dummy_profile.name in smart_str(response.content)\n        preference = AlertPreference.objects.get(account=dummy_profile.account)\n        assert preference.active_profile == dummy_profile\n\n    def test_alertprofiles_activate_profile_with_info_in_key(\n        self, db, client, dummy_profile\n    ):\n        # remarkably, activation/deactivation of profiles belong in the remove view!\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                f'activate={dummy_profile.id}': [\"Activate\"],\n            },\n        )\n        assert response.status_code == 200\n        assert \"Active profile set\" in smart_str(response.content)\n        assert dummy_profile.name in smart_str(response.content)\n        preference = AlertPreference.objects.get(account=dummy_profile.account)\n        assert preference.active_profile == dummy_profile\n\n    def test_alertprofiles_deactivate_profile(\n        self, db, client, activated_dummy_profile\n    ):\n        # remarkably, activation/deactivation of profiles belong in the remove view!\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'deactivate': activated_dummy_profile.id,\n            },\n        )\n        assert response.status_code == 200\n        print(type(response.content))\n        assert \"was deactivated\" in smart_str(response.content)\n        assert activated_dummy_profile.name in smart_str(response.content)\n        preference = AlertPreference.objects.get(\n            account=activated_dummy_profile.account\n        )\n        assert preference.active_profile is None\n\n    def test_alertprofiles_deactivate_profile_with_info_in_key(\n        self, db, client, activated_dummy_profile\n    ):\n        # remarkably, activation/deactivation of profiles belong in the remove view!\n        url = reverse('alertprofiles-profile-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                f'deactivate={activated_dummy_profile.id}': [\"Deactivate\"],\n            },\n        )\n        assert response.status_code == 200\n        print(type(response.content))\n        assert \"was deactivated\" in smart_str(response.content)\n        assert activated_dummy_profile.name in smart_str(response.content)\n        preference = AlertPreference.objects.get(\n            account=activated_dummy_profile.account\n        )\n        assert preference.active_profile is None\n\n\nclass TestsFilters:\n    def test_alertprofiles_add_private_filter_should_succeed(self, client):\n        \"\"\"Tests that an admin can POST a new private filter\"\"\"\n        url = reverse(\"alertprofiles-filters-save\")\n        data = {\n            \"id\": \"\",\n            \"name\": \"foobar\",\n            \"owner\": \"admin\",\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n\n    def test_alertprofiles_add_public_filter_should_succeed(self, client):\n        \"\"\"Tests that an admin can POST a new public filter\"\"\"\n        url = reverse(\"alertprofiles-filters-save\")\n        data = {\n            \"id\": \"\",\n            \"name\": \"foobar\",\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n\n\nclass TestsAddExpressions:\n    class TestsIpAddresses:\n        def test_valid_ipv4_address_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a valid IPv4 address can be added\"\"\"\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"172.0.0.1\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_valid_ipv6_address_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a valid IPv6 address can be added\"\"\"\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"2001:db8:3333:4444:5555:6666:7777:8888\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_valid_cidr_address_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a valid CIDR address can be added\"\"\"\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"129.241.190.0/24\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_non_valid_ip_address_should_fail(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a not valid IP address cannot be added\"\"\"\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"wrong\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert not Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Invalid IP address: {data['value']}\" in smart_str(response.content)\n\n        def test_non_valid_cidr_address_should_fail(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a not valid CIDR address cannot be added\"\"\"\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"10.0.2.1/28\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert not Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Invalid IP address: {data['value']}\" in smart_str(response.content)\n\n        def test_multiple_valid_ip_addresses_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with multiple valid IP addresses can be added\"\"\"\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.IN,\n                \"value\": \"172.0.0.1 2001:db8:3333:4444:5555:6666:7777:8888 \"\n                \"129.241.190.0/24\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.IN,\n                value=data[\"value\"].replace(' ', '|'),\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_multiple_non_valid_ip_addresses_should_fail(\n            self, client, dummy_filter\n        ):\n            \"\"\"Tests that an expression with a not valid IP address cannot be added\"\"\"\n            ip_match_field = MatchField.objects.get(data_type=MatchField.IP)\n            valid_ip = \"172.0.0.1\"\n            invalid_ip = \"wrong\"\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": ip_match_field.pk,\n                \"operator\": Operator.IN,\n                \"value\": f\"{valid_ip} {invalid_ip}\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert not Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=ip_match_field,\n                operator=Operator.IN,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Invalid IP address: {invalid_ip}\" in smart_str(response.content)\n\n    class TestsSysname:\n        def test_equal_sysname_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with an equals condition for sysname can be\n            added\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.EQUALS,\n                \"value\": \"abc\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.EQUALS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_not_equal_sysname_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a not equal condition can be added for\n            sysname\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.NOT_EQUAL,\n                \"value\": \"abc\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.NOT_EQUAL,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_starts_with_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a starts with condition can be added for\n            sysname\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.STARTSWITH,\n                \"value\": \"a\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.STARTSWITH,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_ends_with_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a ends with condition can be added for\n            sysname\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.ENDSWITH,\n                \"value\": \"a\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.ENDSWITH,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_contains_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a contains condition can be added for\n            sysname\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.CONTAINS,\n                \"value\": \"a\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.CONTAINS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_regexp_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with a regexp condition can be added for\n            sysname\n            \"\"\"\n            group_match_field = MatchField.objects.get(name=\"Sysname\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.REGEXP,\n                \"value\": \"[^A-Z0-9]\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.REGEXP,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n    class TestsSeverity:\n        def test_greater_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with greater severity can be added\"\"\"\n            group_match_field = MatchField.objects.get(name=\"Severity\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.GREATER,\n                \"value\": \"3\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.GREATER,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_greater_equal_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with greater or equal severity can be added\"\"\"\n            group_match_field = MatchField.objects.get(name=\"Severity\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.GREATER_EQ,\n                \"value\": \"3\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.GREATER_EQ,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_less_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with less severity can be added\"\"\"\n            group_match_field = MatchField.objects.get(name=\"Severity\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.LESS,\n                \"value\": \"3\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.LESS,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_less_equal_condition_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with less or equal severity can be added\"\"\"\n            group_match_field = MatchField.objects.get(name=\"Severity\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.LESS_EQ,\n                \"value\": \"3\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.LESS_EQ,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n        def test_not_equal_severity_should_succeed(self, client, dummy_filter):\n            \"\"\"Tests that an expression with not equal severity can be added\"\"\"\n            group_match_field = MatchField.objects.get(name=\"Severity\")\n            url = reverse(\"alertprofiles-filters-saveexpression\")\n            data = {\n                \"filter\": dummy_filter.pk,\n                \"match_field\": group_match_field.pk,\n                \"operator\": Operator.NOT_EQUAL,\n                \"value\": \"3\",\n            }\n            response = client.post(url, data=data, follow=True)\n            assert response.status_code == 200\n            assert Expression.objects.filter(\n                filter=dummy_filter,\n                match_field=group_match_field,\n                operator=Operator.NOT_EQUAL,\n                value=data[\"value\"],\n            ).exists()\n            assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n                response.content\n            )\n\n    def test_in_condition_should_succeed(self, client, dummy_filter):\n        \"\"\"Tests that an expression with an in condition can be added, alert type is\n        just an example\n        \"\"\"\n        string_match_field = MatchField.objects.get(name=\"Alert type\")\n        url = reverse(\"alertprofiles-filters-saveexpression\")\n        data = {\n            \"filter\": dummy_filter.pk,\n            \"match_field\": string_match_field.pk,\n            \"operator\": Operator.IN,\n            \"value\": [\"apDown\", \"apUp\"],\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert Expression.objects.filter(\n            filter=dummy_filter,\n            match_field=string_match_field,\n            operator=Operator.IN,\n            value=\"|\".join(data[\"value\"]),\n        ).exists()\n        assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n            response.content\n        )\n\n    def test_equal_condition_should_succeed(self, client, dummy_filter):\n        \"\"\"Tests that an expression with an equals condition can be added, group is\n        just an example\n        \"\"\"\n        group_match_field = MatchField.objects.get(name=\"Group\")\n        url = reverse(\"alertprofiles-filters-saveexpression\")\n        data = {\n            \"filter\": dummy_filter.pk,\n            \"match_field\": group_match_field.pk,\n            \"operator\": Operator.EQUALS,\n            \"value\": \"AD\",\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert Expression.objects.filter(\n            filter=dummy_filter,\n            match_field=group_match_field,\n            operator=Operator.EQUALS,\n            value=data[\"value\"],\n        ).exists()\n        assert f\"Added expression to filter {dummy_filter}\" in smart_str(\n            response.content\n        )\n\n\nclass TestsAddExpressionsHelpModal:\n    def test_should_render_add_expression_help_modal(self, client):\n        url = reverse('alertprofiles-filters-addexpression-operator-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"operator-help\"' in smart_str(response.content)\n\n\nclass TestsPermissions:\n    def test_set_accountgroup_permissions_should_not_crash(self, db, client):\n        \"\"\"Regression test for #2281\"\"\"\n        url = reverse('alertprofiles-permissions-save')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'filter_group': '71',  # G01 All alerts, as hardcoded in navprofiles.sql\n                'group': '3',  # Authenticated users\n            },\n        )\n        assert response.status_code == 200\n\n    def test_should_include_permissions_help_trigger(self, client):\n        url = reverse('alertprofiles-permissions')\n        modal_url = reverse('alertprofiles-permissions-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert f'hx-get=\"{modal_url}\"' in smart_str(response.content)\n\n    def test_should_render_permissions_help_modal(self, client):\n        url = reverse('alertprofiles-permissions-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"permissions-help\"' in smart_str(response.content)\n\n\nclass TestsAlertAddresses:\n    def test_alertprofiles_add_slack_address_with_valid_url_should_succeed(\n        self, client\n    ):\n        \"\"\"Tests that a slack address with a valid absolute url can be added\"\"\"\n        valid_url = \"https://example.com\"\n        slack = AlertSender.objects.get(name=AlertSender.SLACK)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_url,\n            \"type\": slack.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=slack,\n            address=valid_url,\n        ).exists()\n        assert f\"Saved address {valid_url}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_slack_address_with_a_valid_but_not_absolute_url_should_fail(  # noqa: E501\n        self,\n        client,\n    ):\n        \"\"\"Tests that a slack address with a not valid url cannot be added\"\"\"\n        non_absolute_url = \"www.example.com\"\n        slack = AlertSender.objects.get(name=AlertSender.SLACK)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": non_absolute_url,\n            \"type\": slack.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert not AlertAddress.objects.filter(\n            type=slack,\n            address=non_absolute_url,\n        ).exists()\n        assert \"Not a valid absolute url.\" in smart_str(response.content)\n\n    def test_alertprofiles_add_slack_address_with_non_valid_url_should_fail(\n        self, client\n    ):\n        \"\"\"Tests that a slack address with a not valid url cannot be added\"\"\"\n        invalid_url = \"abc\"\n        slack = AlertSender.objects.get(name=AlertSender.SLACK)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": invalid_url,\n            \"type\": slack.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert not AlertAddress.objects.filter(\n            type=slack,\n            address=invalid_url,\n        ).exists()\n        assert \"Not a valid absolute url.\" in smart_str(response.content)\n\n    def test_alertprofiles_add_valid_email_address_should_succeed(self, client):\n        \"\"\"Tests that a valid email address can be added\"\"\"\n        valid_email_address = \"hello@example.com\"\n        email = AlertSender.objects.get(name=AlertSender.EMAIL)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_email_address,\n            \"type\": email.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=email,\n            address=valid_email_address,\n        ).exists()\n        assert f\"Saved address {valid_email_address}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_invalid_email_address_should_fail(self, client):\n        \"\"\"Tests that an invalid email address cannot be added\"\"\"\n        invalid_email_address = \"abc\"\n        email = AlertSender.objects.get(name=AlertSender.EMAIL)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": invalid_email_address,\n            \"type\": email.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert not AlertAddress.objects.filter(\n            type=email,\n            address=invalid_email_address,\n        ).exists()\n        assert \"Not a valid email address.\" in smart_str(response.content)\n\n    def test_alertprofiles_add_valid_phone_number_without_country_code_should_succeed(\n        self,\n        client,\n    ):\n        \"\"\"Tests that a valid phone number without a country code can be added\"\"\"\n        valid_phone_number = \"47474747\"\n        sms = AlertSender.objects.get(name=AlertSender.SMS)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_phone_number,\n            \"type\": sms.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=sms,\n            address=valid_phone_number,\n        ).exists()\n        assert f\"Saved address {valid_phone_number}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_valid_non_norwegian_phone_number_without_country_code_should_succeed(  # noqa: E501\n        self,\n        client,\n    ):\n        \"\"\"Tests that a valid phone number without a country code can be added\"\"\"\n        valid_phone_number = \"02227661193\"\n        sms = AlertSender.objects.get(name=AlertSender.SMS)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_phone_number,\n            \"type\": sms.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=sms,\n            address=valid_phone_number,\n        ).exists()\n        assert f\"Saved address {valid_phone_number}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_valid_phone_number_with_country_code_should_succeed(\n        self, client\n    ):\n        \"\"\"Tests that a valid phone number with a country code (+xx) can be added\"\"\"\n        valid_phone_number = \"+4747474747\"\n        sms = AlertSender.objects.get(name=AlertSender.SMS)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_phone_number,\n            \"type\": sms.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=sms,\n            address=valid_phone_number,\n        ).exists()\n        assert f\"Saved address {valid_phone_number}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_valid_phone_number_with_double_zero_country_code_should_succeed(  # noqa: E501\n        self,\n        client,\n    ):\n        \"\"\"\n        Tests that a valid phone number with a country code with double zero (00xx) can\n        be added\"\"\"\n        valid_phone_number = \"004747474747\"\n        sms = AlertSender.objects.get(name=AlertSender.SMS)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": valid_phone_number,\n            \"type\": sms.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert AlertAddress.objects.filter(\n            type=sms,\n            address=valid_phone_number,\n        ).exists()\n        assert f\"Saved address {valid_phone_number}\" in smart_str(response.content)\n\n    def test_alertprofiles_add_invalid_phone_number_should_fail(self, client):\n        \"\"\"Tests that an invalid phone number cannot be added\"\"\"\n        invalid_phone_number = \"abc\"\n        sms = AlertSender.objects.get(name=AlertSender.SMS)\n        url = reverse(\"alertprofiles-address-save\")\n        data = {\n            \"address\": invalid_phone_number,\n            \"type\": sms.pk,\n        }\n        response = client.post(url, data=data, follow=True)\n        assert response.status_code == 200\n        assert not AlertAddress.objects.filter(\n            type=sms,\n            address=invalid_phone_number,\n        ).exists()\n        assert \"Not a valid phone number.\" in smart_str(response.content)\n\n\nclass TestsFilterGroups:\n    def test_alertprofiles_confirm_remove_filter_group(\n        self, db, client, dummy_filter_group\n    ):\n        url = reverse('alertprofiles-filter_groups-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'confirm': '1',\n                'element': [dummy_filter_group.id],\n            },\n        )\n        assert response.status_code == 200\n        assert not FilterGroup.objects.filter(pk=dummy_filter_group.pk).exists()\n\n    def test_alertprofiles_remove_filter_group(self, db, client, dummy_filter_group):\n        url = reverse('alertprofiles-filter_groups-remove')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'filter_group': [dummy_filter_group.id],\n            },\n        )\n        assert response.status_code == 200\n        assert \"Confirm deletion\" in smart_str(response.content)\n        assert dummy_filter_group.name in smart_str(response.content)\n        assert FilterGroup.objects.filter(pk=dummy_filter_group.pk).count() == 1\n\n    def test_alertprofiles_move_filter_within_group_should_not_crash(\n        self, db, client, dummy_filter_group\n    ):\n        \"\"\"Regression test for #2979: Ensuring that pre-processing of request data\n        doesn't crash unexpectedly.\n        \"\"\"\n        url = reverse('alertprofiles-filter_groups-removefilter')\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                \"moveup=23\": \"Move+up\",\n                \"id\": dummy_filter_group.id,\n            },\n        )\n        assert response.status_code in (200, 404)\n\n    def test_should_include_operator_help_trigger(self, client, dummy_filter_group):\n        url = reverse(\n            'alertprofiles-filter_groups-detail', args=[dummy_filter_group.pk]\n        )\n        modal_url = reverse('alertprofiles-filter_groups-operator-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert f'hx-get=\"{modal_url}\"' in smart_str(response.content)\n\n    def test_should_render_operator_help_modal(self, client):\n        url = reverse('alertprofiles-filter_groups-operator-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"operator-help\"' in smart_str(response.content)\n\n\n#\n# fixtures and helpers\n#\n\n\n@pytest.fixture(scope='function')\ndef dummy_profile(db, admin_account):\n    account = admin_account\n    profile = AlertProfile(account=account, name='ÆØÅ Profile %d' % randint(1, 1000))\n    profile.save()\n    return profile\n\n\n@pytest.fixture(scope='function')\ndef activated_dummy_profile(db, dummy_profile):\n    preference = AlertPreference(\n        account=dummy_profile.account, active_profile=dummy_profile\n    )\n    preference.save()\n    return dummy_profile\n\n\n@pytest.fixture(scope=\"function\")\ndef dummy_time_period(db, activated_dummy_profile):\n    time_period = TimePeriod(profile=activated_dummy_profile)\n    time_period.save()\n    return time_period\n\n\n@pytest.fixture(scope=\"function\")\ndef dummy_alert_address(db, admin_account):\n    alert_address = AlertAddress(\n        account=admin_account,\n        type=AlertSender.objects.get(name=AlertSender.SMS),\n        address=\"admin@example.com\",\n    )\n    alert_address.save()\n    return alert_address\n\n\n@pytest.fixture(scope=\"function\")\ndef dummy_alert_subscription(\n    dummy_alert_address, dummy_time_period, dummy_filter_group\n):\n    alert_subscription = AlertSubscription(\n        alert_address=dummy_alert_address,\n        time_period=dummy_time_period,\n        filter_group=dummy_filter_group,\n    )\n    alert_subscription.save()\n    return alert_subscription\n\n\n@pytest.fixture(scope=\"function\")\ndef dummy_filter(admin_account):\n    filtr = Filter(name=\"dummy\", owner=admin_account)\n    filtr.save()\n    return filtr\n\n\n@pytest.fixture(scope=\"function\")\ndef dummy_filter_group(admin_account):\n    filter_group = FilterGroup(name=\"dummy_group\", owner=admin_account)\n    filter_group.save()\n    return filter_group\n"
  },
  {
    "path": "tests/integration/web/arnold_test.py",
    "content": "import pytest\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nfrom nav.models.arnold import Justification, QuarantineVlan\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Cam, Device, Interface, Module, Netbox\n\n\nclass TestManualDetention:\n    def test_search_for_valid_ip_should_not_crash(self, client):\n        url = reverse('arnold-manual-detention')\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'submit': 'Find',\n                'target': '10.0.0.1',\n            },  # any address will do\n        )\n\n        assert response.status_code == 200\n\n    def test_given_netbox_without_read_write_profile_blocking_should_show_error(\n        self, client, cam_entry\n    ):\n        qvlan = QuarantineVlan.objects.create(vlan=1, description='')\n        justification = Justification.objects.create(name='justification')\n\n        url = reverse(\"arnold-manual-detention-step-two\", args=(cam_entry.mac,))\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                \"camtuple\": str(cam_entry.pk),\n                \"target\": cam_entry.mac,\n                \"method\": \"disable\",\n                \"qvlan\": str(qvlan.pk),\n                \"justification\": str(justification.pk),\n                \"submit\": \"Detain\",\n            },\n        )\n\n        assert response.status_code == 200\n        assert (\n            str(response.context.get(\"error\"))\n            == \"example-sw.example.org has no read-write management profile\"\n        )\n\n    def test_given_netbox_without_read_write_profile_quarantining_should_show_error(\n        self, client, cam_entry\n    ):\n        qvlan = QuarantineVlan.objects.create(vlan=1, description='')\n        justification = Justification.objects.create(name='justification')\n\n        url = reverse(\"arnold-manual-detention-step-two\", args=(cam_entry.mac,))\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                \"camtuple\": str(cam_entry.pk),\n                \"target\": cam_entry.mac,\n                \"method\": \"quarantine\",\n                \"qvlan\": str(qvlan.pk),\n                \"justification\": str(justification.pk),\n                \"submit\": \"Detain\",\n            },\n        )\n\n        assert response.status_code == 200\n        assert (\n            str(response.context.get(\"error\"))\n            == \"example-sw.example.org has no read-write management profile\"\n        )\n\n\nclass TestQuarantineVlan:\n    def test_quarantine_vlan_twice_should_show_error_message(self, client, db):\n        url = reverse('arnold-quarantinevlans')\n\n        vlan_id = 1\n        QuarantineVlan.objects.create(vlan=vlan_id, description='')\n\n        response = client.post(\n            url,\n            follow=True,\n            data={\n                'vlan': vlan_id,\n                'description': '',\n                'qid': '',\n                'submit': 'Add+vlan',\n            },\n        )\n\n        assert response.status_code == 200\n        assert \"This vlan is already quarantined.\" in smart_str(response.content)\n\n\n@pytest.fixture()\ndef cam_entry(db):\n    box = Netbox(\n        ip='10.254.254.254',\n        sysname='example-sw.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SW',\n    )\n    box.save()\n\n    device = Device(serial=\"1234test\")\n    device.save()\n    module = Module(device=device, netbox=box, name='Module 1', model='')\n    module.save()\n\n    interface = Interface(\n        netbox=box,\n        module=module,\n        ifindex=1,\n    )\n    interface.save()\n\n    cam = Cam.objects.create(\n        netbox_id=box.id,\n        mac='aa:aa:aa:aa:aa:aa',\n        ifindex=interface.ifindex,\n        end_time=INFINITY,\n    )\n\n    yield cam\n\n    cam.delete()\n    interface.delete()\n    module.delete()\n    device.delete()\n    box.delete()\n"
  },
  {
    "path": "tests/integration/web/auth/auth_test.py",
    "content": "from nav.web.webfront.views import _logout_helper\nfrom nav.web.auth.utils import ACCOUNT_ID_VAR, set_account\nfrom nav.web.auth.sudo import sudo\n\n\nclass TestLogout:\n    def test_non_sudo_logout_should_remove_session_data(\n        self, db, session_request, admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        _logout_helper(session_request)\n        assert not hasattr(session_request, 'account')\n        assert ACCOUNT_ID_VAR not in session_request.session\n\n    def test_non_sudo_logout_should_return_path_to_index(\n        self, db, session_request, admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        result = _logout_helper(session_request)\n        assert result == '/'\n\n    def test_sudo_logout_should_set_session_to_original_user(\n        self, db, session_request, admin_account, non_admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        sudo(session_request, non_admin_account)\n        assert session_request.account is non_admin_account\n        result = _logout_helper(session_request, sudo=True)\n        assert result == '/'\n        assert session_request.account == admin_account\n\n    def test_non_sudo_logout_should_change_session_id(\n        self, db, session_request, admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        pre_session_id = session_request.session.session_key\n        _logout_helper(session_request)\n        post_session_id = session_request.session.session_key\n        assert post_session_id != pre_session_id\n\n    def test_sudo_logout_should_change_session_id(\n        self, db, session_request, admin_account, non_admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        sudo(session_request, non_admin_account)\n        pre_session_id = session_request.session.session_key\n        _logout_helper(session_request, sudo=True)\n        post_session_id = session_request.session.session_key\n        assert post_session_id != pre_session_id\n"
  },
  {
    "path": "tests/integration/web/auth/conftest.py",
    "content": "import pytest\n\nfrom django.test import RequestFactory\nfrom django.contrib.sessions.middleware import SessionMiddleware\n\n\n@pytest.fixture()\ndef session_request(db):\n    \"\"\"Request object with a real session\"\"\"\n    r = RequestFactory()\n    session_request = r.post('/anyurl')\n\n    # use middleware to make session for session_request\n    middleware = SessionMiddleware(lambda request: None)\n    middleware.process_request(session_request)\n    session_request.session.save()\n    return session_request\n\n\n@pytest.fixture()\ndef locked_account(db):\n    from nav.models.profiles import Account\n\n    account = Account(login=\"locked_user\")\n    account.save()\n    yield account\n    account.delete()\n\n\n@pytest.fixture()\ndef default_account(db):\n    from nav.models.profiles import Account\n\n    return Account.objects.get(id=Account.DEFAULT_ACCOUNT)\n"
  },
  {
    "path": "tests/integration/web/auth/ldap_auth_backend_test.py",
    "content": "from unittest.mock import Mock, patch\n\nimport pytest\nfrom django.core.exceptions import PermissionDenied\n\nfrom nav.models.profiles import Account\nfrom nav.web.auth.ldap import NoAnswerError\nfrom nav.web.auth.ldap_auth_backend import LdapBackend\n\n\nclass TestAuthenticate:\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', False)\n    def test_given_ldap_not_available_return_none(self, db):\n        assert (\n            LdapBackend().authenticate(username=\"username\", password=\"password\") is None\n        )\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    def test_given_no_username_and_no_password_return_none(self, db):\n        assert LdapBackend().authenticate() is None\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    def test_given_user_without_ldap_sync_return_none(self, db, non_admin_account):\n        assert (\n            LdapBackend().authenticate(\n                username=non_admin_account.login, password=non_admin_account.password\n            )\n            is None\n        )\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    @patch('nav.web.auth.ldap_auth_backend.ldap.authenticate')\n    def test_given_valid_ldap_user_info_with_linked_nav_account_return_existing_nav_account(  # noqa\n        self, mock_authenticate, db, ldap_synced_account, non_admin_ldap_user\n    ):\n        mock_authenticate.return_value = non_admin_ldap_user\n        assert (\n            LdapBackend().authenticate(\n                username=ldap_synced_account.login,\n                password=ldap_synced_account.password,\n            )\n            == ldap_synced_account\n        )\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    @patch('nav.web.auth.ldap_auth_backend.ldap.authenticate')\n    def test_given_valid_ldap_user_info_without_linked_nav_account_create_nav_account(\n        self, mock_authenticate, db, non_admin_ldap_user\n    ):\n        ldap_synced_accounts = list(Account.objects.filter(ext_sync=\"ldap\"))\n        mock_authenticate.return_value = non_admin_ldap_user\n        new_nav_user = LdapBackend().authenticate(\n            username=\"username\",\n            password=\"password\",\n        )\n        assert new_nav_user\n        assert new_nav_user not in ldap_synced_accounts\n        assert new_nav_user.login == non_admin_ldap_user.username\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    @patch('nav.web.auth.ldap_auth_backend.ldap.authenticate')\n    def test_given_invalid_ldap_user_info_raise_permission_denied_exception(\n        self, mock_authenticate, db, ldap_synced_account\n    ):\n        mock_authenticate.return_value = False\n\n        with pytest.raises(PermissionDenied):\n            LdapBackend().authenticate(\n                username=ldap_synced_account.login,\n                password=ldap_synced_account.password,\n            )\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    @patch('nav.web.auth.ldap_auth_backend.ldap.authenticate')\n    def test_given_locked_nav_user_info_raise_permission_denied_exception(\n        self, mock_authenticate, db, ldap_synced_account, non_admin_ldap_user\n    ):\n        mock_authenticate.return_value = non_admin_ldap_user\n        ldap_synced_account.locked = True\n        ldap_synced_account.save()\n\n        with pytest.raises(PermissionDenied):\n            LdapBackend().authenticate(\n                username=ldap_synced_account.login,\n                password=ldap_synced_account.password,\n            )\n\n    @patch('nav.web.auth.ldap_auth_backend.ldap.available', True)\n    @patch('nav.web.auth.ldap_auth_backend.ldap.authenticate')\n    def test_given_no_response_from_ldap_return_none(\n        self,\n        mock_authenticate,\n        db,\n        ldap_synced_account,\n    ):\n        mock_authenticate.side_effect = NoAnswerError\n        assert (\n            LdapBackend().authenticate(\n                username=ldap_synced_account.login,\n                password=ldap_synced_account.password,\n            )\n            is None\n        )\n\n\nclass TestSyncNavAccount:\n    def test_given_ldap_user_and_nav_account_updates_nav_account_password(\n        self, db, non_admin_ldap_user, ldap_synced_account\n    ):\n        old_password = ldap_synced_account.password\n        LdapBackend._sync_nav_account(\n            non_admin_ldap_user, ldap_synced_account, \"new_password\"\n        )\n        ldap_synced_account.refresh_from_db()\n\n        assert ldap_synced_account.password != old_password\n\n\nclass TestSyncNavAccountAdminPrivileges:\n    def test_given_ldapuser_admin_adds_admin_group_to_nav_account(\n        self, db, non_admin_account\n    ):\n        ldap_user = Mock()\n        ldap_user.is_admin.return_value = True\n\n        LdapBackend()._sync_nav_account_admin_privileges_from_ldap(\n            ldap_user=ldap_user, nav_account=non_admin_account\n        )\n\n        non_admin_account.refresh_from_db()\n        assert non_admin_account.is_admin()\n\n    def test_given_ldap_user_not_admin_removes_admin_group_from_nav_account(\n        self, db, admin_account\n    ):\n        ldap_user = Mock()\n        ldap_user.is_admin.return_value = False\n\n        LdapBackend()._sync_nav_account_admin_privileges_from_ldap(\n            ldap_user=ldap_user, nav_account=admin_account\n        )\n\n        admin_account.refresh_from_db()\n        assert not admin_account.is_admin()\n\n\n@pytest.fixture\ndef ldap_synced_account(db):\n    from nav.models.profiles import Account\n\n    account = Account(login=\"ldap_user\", name=\"LDAP User\", ext_sync=\"ldap\")\n    account.set_password(\"password\")\n    account.save()\n    yield account\n    account.delete()\n\n\n@pytest.fixture\ndef non_admin_ldap_user():\n    ldap_user = Mock()\n    ldap_user.username = \"ldap_user\"\n    ldap_user.get_real_name.return_value = \"LDAP User\"\n    ldap_user.is_admin.return_value = False\n\n    yield ldap_user\n"
  },
  {
    "path": "tests/integration/web/auth/login_redirect_test.py",
    "content": "#\n# Copyright (C) 2026 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom urllib.parse import urlparse, parse_qs\n\nfrom django.test import Client\nfrom django.urls import reverse\n\n\nclass TestLoginRedirect:\n    def test_when_unauthenticated_user_accesses_protected_page_then_login_should_redirect_back(  # noqa: E501\n        self, db, admin_username, admin_password\n    ):\n        client = Client()\n        protected_url = '/ipdevinfo/'\n\n        # Unauthenticated request to a protected page should redirect to login\n        response = client.get(protected_url)\n        assert response.status_code == 302\n        redirect_url = response['Location']\n\n        parsed = urlparse(redirect_url)\n        query = parse_qs(parsed.query)\n\n        # The redirect should use 'next', not 'origin'\n        assert 'next' in query, f\"Expected 'next' in query params, got: {parsed.query}\"\n        assert 'origin' not in query\n        assert query['next'][0] == protected_url\n\n        # Log in via the redirect URL\n        login_url = reverse('account_login')\n        response = client.post(\n            login_url,\n            {\n                'login': admin_username,\n                'password': admin_password,\n                'next': query['next'][0],\n            },\n        )\n        # allauth redirects to the 'next' URL after successful login\n        assert response.status_code == 302\n        assert response['Location'] == protected_url\n"
  },
  {
    "path": "tests/integration/web/auth/sudo_test.py",
    "content": "from nav.web.auth.utils import set_account\nfrom nav.web.auth.sudo import sudo, desudo\n\n\ndef test_sudo_should_change_session_id(\n    db, session_request, admin_account, non_admin_account\n):\n    # login with admin acount\n    set_account(session_request, admin_account)\n\n    pre_sudo_session_id = session_request.session.session_key\n    sudo(session_request, non_admin_account)\n    post_sudo_session_id = session_request.session.session_key\n\n    assert pre_sudo_session_id != post_sudo_session_id\n\n\ndef test_desudo_should_change_session_id(\n    db, session_request, admin_account, non_admin_account\n):\n    # login with admin acount\n    set_account(session_request, admin_account)\n\n    sudo(session_request, non_admin_account)\n\n    pre_desudo_session_id = session_request.session.session_key\n    desudo(session_request)\n    post_desudo_session_id = session_request.session.session_key\n\n    assert pre_desudo_session_id != post_desudo_session_id\n"
  },
  {
    "path": "tests/integration/web/auth/utils_test.py",
    "content": "from django.contrib.auth import SESSION_KEY as DJANGO_USER_SESSION_KEY\nfrom django.core.cache import cache\nfrom django.test import RequestFactory\nfrom django.urls import reverse\n\nfrom nav.web.auth.sudo import SUDOER_ID_VAR\nfrom nav.web.auth.utils import (\n    default_account,\n    get_account,\n    set_account,\n    clear_session,\n    ensure_account,\n    get_number_of_accounts_with_password_issues,\n    PASSWORD_ISSUES_CACHE_KEY,\n)\n\n\nclass TestGetAccount:\n    class Account:\n        id = 3465\n\n    def test_return_account_if_request_account_set(self):\n        r = RequestFactory()\n        request = r.get('/')\n        user = self.Account()\n        request.account = user\n        result = get_account(request)\n        assert result == user\n\n    def test_return_account_if_request_user_set_and_request_account_not_set(self):\n        r = RequestFactory()\n        request = r.get('/')\n        user = self.Account()\n        request.user = user\n        result = get_account(request)\n        # Cannot use \"result == user\" or \"result is user\" because request.user\n        # must be copied to be safely used thanks to SimpleLazyObject\n        # shenaningans. The self.Account-class does not define __eq__ and can\n        # thus falls back to using \"is\"\n        assert result.id == user.id\n\n    # Needs to be an integration test due to default_account()\n    def test_return_default_account_if_neither_request_user_nor_request_account_is_set(\n        self,\n        db,\n    ):\n        r = RequestFactory()\n        request = r.get('/')\n        result = get_account(request)\n        assert result == default_account()\n\n\nclass TestClearSession:\n    def test_should_create_new_session_id(self, db, session_request):\n        pre_session_id = session_request.session.session_key\n        clear_session(session_request)\n        post_session_id = session_request.session.session_key\n        assert pre_session_id != post_session_id\n\n    def test_should_remove_account_from_request(\n        self, db, session_request, admin_account\n    ):\n        # login with admin acount\n        set_account(session_request, admin_account)\n        assert session_request.account\n        clear_session(session_request)\n        assert not hasattr(session_request, \"account\")\n\n    def test_should_clear_session_dict(self, db, session_request, admin_account):\n        set_account(session_request, admin_account)\n        # Make sure there is something to be deleted\n        assert session_request.session.keys()\n        clear_session(session_request)\n        assert not session_request.session.keys()\n\n\nclass TestEnsureAccount:\n    def test_account_should_be_set_if_request_does_not_already_have_an_account(\n        self, db, session_request\n    ):\n        assert not hasattr(session_request, \"account\")\n        ensure_account(session_request)\n        assert DJANGO_USER_SESSION_KEY in session_request.session, (\n            'Account id is not in the session'\n        )\n        assert hasattr(session_request, 'account'), 'Account not set'\n        assert session_request.account.id == int(\n            session_request.session[DJANGO_USER_SESSION_KEY]\n        ), 'Correct user not set'\n\n    def test_account_should_be_switched_to_default_if_locked(\n        self, db, session_request, locked_account, default_account\n    ):\n        set_account(session_request, locked_account)\n        ensure_account(session_request)\n        assert (\n            int(session_request.session[DJANGO_USER_SESSION_KEY]) == default_account.id\n        )\n        assert session_request.account == default_account, 'Correct user not set'\n\n    def test_account_should_be_unchanged_if_ok(\n        self, db, session_request, non_admin_account\n    ):\n        set_account(session_request, non_admin_account)\n        ensure_account(session_request)\n        assert session_request.account == non_admin_account\n        assert (\n            int(session_request.session[DJANGO_USER_SESSION_KEY])\n            == non_admin_account.id\n        )\n\n    def test_session_should_not_be_flushed_if_account_is_default(\n        self, db, session_request, default_account, admin_account\n    ):\n        session_request.session[SUDOER_ID_VAR] = admin_account.id\n\n        set_account(session_request, default_account)\n        ensure_account(session_request)\n        assert session_request.account == default_account\n        assert session_request.session.get(SUDOER_ID_VAR) == admin_account.id\n\n    def test_session_id_should_be_changed_if_going_from_locked_to_default_account(\n        self, db, session_request, locked_account, default_account\n    ):\n        set_account(session_request, locked_account)\n        pre_session_id = session_request.session.session_key\n        ensure_account(session_request)\n        assert session_request.account == default_account\n        post_session_id = session_request.session.session_key\n        assert post_session_id != pre_session_id\n\n\nclass TestGetNumberOfAccountsWithPasswordIssues:\n    def test_returns_correct_number_of_accounts_with_password_issues(self, db):\n        cache.delete(PASSWORD_ISSUES_CACHE_KEY)\n\n        # Admin user in tests has deprecated password hash method\n        assert get_number_of_accounts_with_password_issues() == 1\n\n    def test_ignores_default_account(self, db, default_account):\n        cache.delete(PASSWORD_ISSUES_CACHE_KEY)\n\n        # Admin user in tests has deprecated password hash method\n        assert get_number_of_accounts_with_password_issues() == 1\n\n    def test_sets_cache_on_function_call(self, db):\n        cache.delete(PASSWORD_ISSUES_CACHE_KEY)\n\n        get_number_of_accounts_with_password_issues()\n\n        assert cache.get(PASSWORD_ISSUES_CACHE_KEY) is not None\n\n    def test_cache_entry_gets_deleted_on_password_change(self, db, non_admin_account):\n        get_number_of_accounts_with_password_issues()\n\n        non_admin_account.set_password(\"new_password\")\n        non_admin_account.save()\n\n        assert cache.get(PASSWORD_ISSUES_CACHE_KEY) is None\n\n    def test_cache_entry_gets_deleted_on_user_deletion(\n        self, db, client, non_admin_account\n    ):\n        get_number_of_accounts_with_password_issues()\n\n        url = reverse('useradmin-account_delete', args=(non_admin_account.id,))\n\n        client.post(url, follow=True)\n\n        assert cache.get(PASSWORD_ISSUES_CACHE_KEY) is None\n"
  },
  {
    "path": "tests/integration/web/crawler_test.py",
    "content": "\"\"\"Webcrawler tests for reachability and HTML validation.\n\nThe crawler attempts to retrieve any NAV web UI page that can be reached with\nparameterless GET requests, while logged in as an administrator.\n\nIn some respects, it would be preferable to generate 1 named test for each\nreachable page, but the tests need to be generated during the test collection\nphase, which means that a full web server needs to be running before pytest\nruns - and it would also be preferable that the web server is started from a\nfixture. Instead, the webcrawler is itself a fixture that allows iteration over\nall reachable pages.\n\"\"\"\n\nfrom collections import namedtuple\nfrom http.client import BadStatusLine\nfrom lxml.html import fromstring\nimport lxml.html\n\nimport pytest\n\nfrom tidylib import tidy_document\nfrom urllib.request import (\n    HTTPCookieProcessor,\n    Request,\n    build_opener,\n    install_opener,\n    urlopen,\n)\nfrom urllib.error import HTTPError, URLError\nfrom urllib.parse import (\n    quote,\n    urlencode,\n    urljoin,\n    urlparse,\n    urlsplit,\n    urlunparse,\n)\n\nfrom nav.django.settings import LOGIN_URL\n\n\nTIMEOUT = 90  # seconds?\n\nTIDY_OPTIONS = {\n    'doctype': 'auto',\n    'output_xhtml': True,\n    'input_encoding': 'utf8',\n    'show-warnings': False,\n}\n\nTIDY_IGNORE = [\n    # put list of error messages to ignore here (substring matches)\n]\n\nTIDY_BLACKLIST = [\n    # put list of URIs to not run HTML validation for here\n]\n\nBLACKLISTED_PATHS = [\n    '/cricket',\n    '/index/logout',\n    '/doc',\n    # getting these endpoints without args results in 400 bad request\n    '/api/1/cam',\n    '/api/1/arp',\n    '/graphite',\n]\n\n#\n# Web Crawler code and related utility functions\n#\n\nPage = namedtuple('Page', 'url response content_type content')\n\n\ndef normalize_path(url):\n    url = urlsplit(url).path.rstrip('/')\n    return '/' + url if not url.startswith('/') else url\n\n\nclass WebCrawler(object):\n    blacklist = set(normalize_path(path) for path in BLACKLISTED_PATHS)\n\n    def __init__(self, base_url, username, password):\n        self.base_url = base_url\n        self.netloc = urlsplit(base_url).netloc\n        self.username = username\n        self.password = password\n        self.seen_pages = {}\n        self.queue = []\n\n    def crawl(self):\n        if self.seen_pages:\n            for page in self.seen_pages.values():\n                yield page\n            return\n\n        self.login()\n        self.queue.append(self.base_url)\n\n        while self.queue:\n            url = self.queue.pop()\n            page = self._visit_with_error_handling(url)\n            if page:\n                yield page\n\n    def crawl_only_html(self):\n        \"\"\"Only yields crawled pages that have a content-type of html and is not\n        blacklisted.\n        \"\"\"\n        yield from filter(should_validate, self.crawl())\n\n    def _visit_with_error_handling(self, url):\n        try:\n            page = self._visit(url)\n        except HTTPError as error:\n            content = error.fp.read()\n            page = Page(url, error.code, error, content)\n            self._add_seen(page)\n\n        except URLError as error:\n            page = Page(url, None, error, None)\n            self._add_seen(page)\n\n        except BadStatusLine as error:\n            content = 'Server abruptly closed connection'\n            page = Page(url, 500, error, content)\n            self._add_seen(page)\n\n        return page\n\n    def _visit(self, url):\n        if self._is_seen(url):\n            return\n        req = Request(_quote_url(url), headers={'Accept': 'text/html'})\n        resp = urlopen(req, timeout=TIMEOUT)\n        content_type = resp.info()['Content-type']\n\n        if 'html' in content_type.lower():\n            content = resp.read()\n            self._queue_links_from(content, url)\n        else:\n            content = None\n\n        page = Page(url, resp.getcode(), content_type, content)\n        self._add_seen(page)\n        return page\n\n    def _queue_links_from(self, content, base_url):\n        html = fromstring(content)\n        html.make_links_absolute(base_url)\n\n        for element, attribute, link, pos in html.iterlinks():\n            url = urlsplit(link)\n            path = normalize_path(link)\n\n            if url.scheme not in ['http', 'https']:\n                continue\n            elif url.netloc != self.netloc:\n                continue\n            elif element.tag in ('form', 'object') or attribute == 'style':\n                continue\n            elif self._is_blacklisted(path):\n                continue\n            elif element.attrib.get(\"rel\") == \"nofollow\":\n                continue  # ignore nofollow links\n            elif not self._is_seen(path):\n                self.queue.append('%s://%s%s' % (url.scheme, url.netloc, url.path))\n\n    def login(self):\n        login_url = urljoin(self.base_url, LOGIN_URL)\n        opener = build_opener(HTTPCookieProcessor())\n        login_url = urljoin(self.base_url, \"/index/login/\")\n        login_response = opener.open(login_url)\n        login_html = lxml.html.parse(login_response)\n        login_form = login_html.find(\"//form[@method='post'][@action='/index/login/']\")\n        login_form.fields[\"username\"] = self.username\n        login_form.fields[\"password\"] = self.password\n        login_data = urlencode(login_form.form_values()).encode(\"utf-8\")\n        opener.open(login_form.action, login_data, TIMEOUT)\n        install_opener(opener)\n\n    def _add_seen(self, page, url=None):\n        if not url:\n            url = page.url\n        url = normalize_path(url)\n        self.seen_pages[url] = page\n\n    def _is_seen(self, url):\n        return normalize_path(url) in self.seen_pages\n\n    def _is_blacklisted(self, url):\n        path = normalize_path(url)\n        for url in self.blacklist:\n            if path.startswith(url):\n                return True\n        return False\n\n\ndef _quote_url(url):\n    \"\"\"Ensures non-ascii URL paths are quoted\"\"\"\n    parsed = urlparse(url)\n    try:\n        parsed.path.encode('ascii')\n    except UnicodeError:\n        path = quote(parsed.path.encode('utf-8'))\n    else:\n        path = parsed.path\n    quoted = (\n        parsed.scheme,\n        parsed.netloc,\n        path,\n        parsed.params,\n        parsed.query,\n        parsed.fragment,\n    )\n    return urlunparse(quoted)\n\n\n#\n# fixtures\n#\n\n\n@pytest.fixture(scope=\"session\")\ndef webcrawler(live_server, admin_username, admin_password):\n    crawler = WebCrawler(live_server, admin_username, admin_password)\n    yield crawler\n\n\n#\n# test functions\n#\n\n\ndef test_all_links_should_be_reachable(webcrawler):\n    unreachable = []\n    for page in webcrawler.crawl():\n        if page.response != 200:\n            # No need to fill up the test report files with contents of OK pages\n            print(_content_as_string(page.content))\n            unreachable.append(f\"{page.url} ({page.response})\")\n    assert not unreachable, f\"{len(unreachable)} unreachable pages:\\n\" + '\\n'.join(\n        unreachable\n    )\n\n\ndef _content_as_string(content):\n    if isinstance(content, str) or content is None:\n        return content\n    else:\n        return content.decode('utf-8')\n\n\ndef test_page_should_be_valid_html(webcrawler):\n    try:\n        tidy_document(\"\")\n    except OSError as error:\n        pytest.skip(\"tidylib is not available: {!r}\".format(error))\n\n    invalid = []\n    for page in webcrawler.crawl_only_html():\n        if page.response != 200 or not page.content:\n            continue\n\n        document, errors = tidy_document(page.content, TIDY_OPTIONS)\n        errors = filter_errors(errors)\n        if errors:\n            print(f\"{page.url} :\")\n            print(errors)\n            invalid.append(page.url)\n\n    assert not invalid, f\"{len(invalid)} invalid HTML pages:\\n\" + '\\n'.join(invalid)\n\n\ndef should_validate(page: Page):\n    \"\"\"Returns True if page is eligible for HTML validation, False if not\"\"\"\n    if (\n        page.response == 500\n        or not page.content_type\n        or not isinstance(page.content_type, str)\n        or 'html' not in page.content_type.lower()\n    ):\n        return False\n    path = normalize_path(page.url)\n    for blacklisted_path in TIDY_BLACKLIST:\n        if path.startswith(blacklisted_path):\n            return False\n    return True\n\n\ndef filter_errors(errors):\n    if errors:\n        return \"\\n\".join(msg for msg in errors.split('\\n') if not _should_ignore(msg))\n\n\ndef _should_ignore(msg):\n    for ignore in TIDY_IGNORE:\n        if ignore in msg:\n            return True\n    return False\n"
  },
  {
    "path": "tests/integration/web/devicehistory/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/web/devicehistory/componentsearch_test.py",
    "content": "import pytest\n\nfrom nav.web.devicehistory.utils.componentsearch import get_component_search_results\nfrom nav.models.manage import Device, Location, Room\n\nBUTTON_TEXT_PATTERN = 'Submit %s components'\n\n\nclass TestGetComponentSearchResults:\n    def test_should_return_result_for_existing_room(self, db, new_room):\n        results = get_component_search_results(new_room.id, BUTTON_TEXT_PATTERN)\n        assert 'room' in results\n\n    def test_should_return_existing_room_in_search_results(self, db, new_room):\n        results = get_component_search_results(new_room.id, BUTTON_TEXT_PATTERN)\n        room_result = results['room']\n        search_values = room_result['values']\n\n        room_ids = [room_id for _, rooms in search_values for room_id, _ in rooms]\n        assert new_room.id in room_ids\n\n    def test_given_alias_as_query_should_return_existing_room_in_search_results(\n        self, db, new_room\n    ):\n        results = get_component_search_results(new_room.aliases[0], BUTTON_TEXT_PATTERN)\n        room_result = results['room']\n        search_values = room_result['values']\n\n        room_ids = [room_id for _, rooms in search_values for room_id, _ in rooms]\n        assert new_room.id in room_ids\n\n    def test_given_alias_as_query_should_return_existing_location_in_search_results(\n        self, db, new_location\n    ):\n        results = get_component_search_results(\n            new_location.aliases[0], BUTTON_TEXT_PATTERN\n        )\n\n        location_result = results['location']\n        search_values = location_result['values']\n\n        location_ids = [location[0] for location in search_values]\n        assert new_location.id in location_ids\n\n    def test_should_include_component_name_in_button_text_pattern(self, db, new_room):\n        results = get_component_search_results(new_room.id, BUTTON_TEXT_PATTERN)\n        room_result = results['room']\n        assert 'Room' in room_result['button']\n\n    def test_should_correctly_format_button_text(self, db, new_room):\n        results = get_component_search_results(new_room.id, BUTTON_TEXT_PATTERN)\n        room_result = results['room']\n        assert room_result['button'] == 'Submit Room components'\n\n    def test_when_button_text_pattern_is_invalid_then_throw_value_error(\n        self, db, new_room\n    ):\n        with pytest.raises(ValueError):\n            get_component_search_results(new_room.id, 'Invalid pattern')\n\n    def test_when_room_component_is_excluded_should_not_return_existing_room_in_results(\n        self, db, new_room\n    ):\n        results = get_component_search_results(\n            new_room.id, button_text=BUTTON_TEXT_PATTERN, exclude=[Room]\n        )\n        assert 'room' not in results\n\n    def test_should_return_empty_results_for_non_existing_component(self, db):\n        results = get_component_search_results(\n            \"non-existing-component\", BUTTON_TEXT_PATTERN\n        )\n        assert results == {}\n\n    def test_when_given_inactive_device_serial_return_results(self, inactive_device):\n        results = get_component_search_results(\n            inactive_device.serial, BUTTON_TEXT_PATTERN\n        )\n        inactive_result = results['inactive_device']\n        assert inactive_result is not None\n\n        search_values = inactive_result['values']\n        device_ids = [result[0] for result in search_values]\n        assert inactive_device.id in device_ids\n\n    def test_when_given_inactive_device_serial_return_correct_select_label(\n        self, inactive_device\n    ):\n        results = get_component_search_results(\n            inactive_device.serial, BUTTON_TEXT_PATTERN\n        )\n        inactive_result = results['inactive_device']\n        assert inactive_result['label'] == 'Inactive Device'\n\n\n@pytest.fixture\ndef new_location(db):\n    location = Location(id=\"testlocation\", aliases=[\"locationalias\"])\n    location.save()\n    yield location\n    location.delete()\n\n\n@pytest.fixture\ndef new_room(db, new_location):\n    room = Room(\n        id=\"testroom\",\n        description=\"Test Room\",\n        location=new_location,\n        aliases=[\"roomalias\"],\n    )\n    room.save()\n    yield room\n    room.delete()\n\n\n@pytest.fixture\ndef inactive_device(db):\n    device = Device(serial=\"inactivedevice\")\n    device.save()\n    yield device\n    device.delete()\n"
  },
  {
    "path": "tests/integration/web/devicehistory/views_test.py",
    "content": "from datetime import datetime\n\nimport pytest\nfrom django.urls import reverse\n\nfrom django.utils.encoding import smart_str\n\nfrom nav.models.event import AlertHistory\nfrom nav.models.manage import Device, Location, Netbox, Room\n\n\nclass TestSearchDeviceHistoryComponents:\n    def test_given_an_existing_room_then_component_search_should_return_results(\n        self, db, client, new_room\n    ):\n        url = reverse('devicehistory-component-search')\n        response = client.post(url, {'search': new_room.id})\n        assert response.status_code == 200\n        assert new_room.id in smart_str(response.content)\n\n    def test_given_alias_of_existing_room_then_component_search_should_return_results(\n        self, db, client, new_room\n    ):\n        url = reverse('devicehistory-component-search')\n        response = client.post(url, {'search': new_room.aliases[0]})\n        assert response.status_code == 200\n        assert new_room.id in smart_str(response.content)\n\n    def test_given_alias_of_existing_location_then_component_search_should_return_results(  # noqa: E501\n        self, db, client, new_location\n    ):\n        url = reverse('devicehistory-component-search')\n        response = client.post(url, {'search': new_location.aliases[0]})\n        assert response.status_code == 200\n        assert new_location.id in smart_str(response.content)\n\n    def test_given_a_non_existing_component_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('devicehistory-component-search')\n        response = client.post(url, {'search': 'nonexistent-component'})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n    def test_given_an_empty_query_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('devicehistory-component-search')\n        response = client.post(url, {'search': ''})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n\nclass TestSearchDeviceHistoryRegisterErrorComponents:\n    def test_given_an_existing_netbox_then_component_search_should_return_results(\n        self, db, client\n    ):\n        url = reverse('devicehistory-registererror-component-search')\n        netbox = Netbox.objects.first()\n        response = client.post(url, {'search': netbox.sysname})\n        assert response.status_code == 200\n        assert netbox.sysname in smart_str(response.content)\n\n    def test_given_a_non_existing_component_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('devicehistory-registererror-component-search')\n        response = client.post(url, {'search': 'nonexistent-component'})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n    def test_given_an_empty_query_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('devicehistory-registererror-component-search')\n        response = client.post(url, {'search': ''})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n\nclass TestDeviceHistorySearch:\n    def test_when_query_parameter_is_empty_then_return_search_page(self, client):\n        url = reverse('devicehistory-search')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'Search' in smart_str(response.content)\n\n    def test_when_from_date_is_set_then_return_search_results(self, client):\n        url = reverse('devicehistory-search') + '?from_date=2023-01-01'\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"device-history-search-results\"' in smart_str(response.content)\n\n\nclass TestRegisterError:\n    def test_when_no_devices_are_selected_then_return_error_message(self, client):\n        url = reverse('devicehistory-do-registererror')\n        response = client.post(url, follow=True)\n        assert response.status_code == 200\n        assert \"No devices selected\" in smart_str(response.content)\n\n    def test_when_devices_are_selected_then_show_selected_devices(\n        self, client, localhost\n    ):\n        url = reverse('devicehistory-do-registererror')\n        response = client.post(url, data={'netbox': [localhost.id]}, follow=True)\n        assert response.status_code == 200\n        assert localhost.sysname in smart_str(response.content)\n\n    def test_when_no_error_comment_supplied_then_require_confirmation(\n        self, client, localhost\n    ):\n        url = reverse('devicehistory-do-registererror')\n        response = client.post(\n            url, data={'netbox': [localhost.id], 'error_comment': ''}, follow=True\n        )\n        assert response.status_code == 200\n        assert \"Confirm\" in smart_str(response.content)\n\n    def test_when_selected_devices_and_error_comment_supplied_then_register_error(\n        self, client, localhost\n    ):\n        url = reverse('devicehistory-do-registererror')\n        response = client.post(\n            url,\n            data={'netbox': [localhost.id], 'error_comment': 'Test error'},\n            follow=True,\n        )\n        assert response.status_code == 200\n        assert \"Registered error\" in smart_str(response.content)\n\n\nclass TestInactiveDeviceHistoryView:\n    def test_get_inactive_device_history_should_succeed(self, client, inactive_device):\n        url = reverse('devicehistory-view')\n        response = client.get(\n            f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n            f\"&inactive_device={inactive_device.id}\",\n            follow=True,\n        )\n\n        assert response.status_code == 200\n\n    def test_get_inactive_device_history_should_redirect_with_group_by_set_to_device(\n        self, client, inactive_device\n    ):\n        url = reverse('devicehistory-search')\n        response = client.get(\n            f\"{url}?from_date=2023-01-01&eventtype=all\"\n            f\"&inactive_device={inactive_device.id}\",\n        )\n        assert response.status_code == 302\n        assert 'group_by=device' in response.url\n\n    def test_given_inactive_device_with_alert_history_then_it_should_return_results(\n        self, client, db, inactive_device\n    ):\n        created_history = create_alert_history_for_device(inactive_device, count=3)\n\n        url = reverse('devicehistory-view')\n        response = client.get(\n            f\"{url}?from_date=2025-01-01&to_date=2025-12-31&eventtype=all&group_by=device\"\n            f\"&inactive_device={inactive_device.id}\",\n            follow=True,\n        )\n\n        assert response.status_code == 200\n        response_history = response.context['history']\n        assert inactive_device.serial in response_history\n        device_history = response_history[inactive_device.serial]\n        assert len(device_history) == len(created_history)\n\n\ndef create_alert_history_for_device(device, count=1):\n    for day in range(count):\n        activity = AlertHistory(\n            device=device,\n            event_type_id='boxState',\n            alert_type_id=1,\n            source_id='pping',\n            start_time=datetime(2025, 1, day + 1),\n            end_time=datetime(2025, 1, day + 10),\n            value=42,\n        )\n        activity.save()\n    return AlertHistory.objects.filter(device=device)\n\n\n@pytest.fixture\ndef new_location(db):\n    location = Location(id=\"testlocation\", aliases=[\"locationalias\"])\n    location.save()\n    yield location\n    location.delete()\n\n\n@pytest.fixture\ndef new_room(db, new_location):\n    room = Room(\n        id=\"123\", description=\"Test Room\", location=new_location, aliases=[\"roomalias\"]\n    )\n    room.save()\n    yield room\n    room.delete()\n\n\n@pytest.fixture\ndef inactive_device(db):\n    device = Device(serial=\"inactivedevice\")\n    device.save()\n    yield device\n    device.delete()\n"
  },
  {
    "path": "tests/integration/web/devicehistory_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom datetime import datetime, timedelta\n\nfrom nav.models.event import AlertHistory, EventQueue, EventQueueVar\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Device, Module, NetboxGroup\nfrom nav.web.devicehistory.forms import DeviceHistoryViewFilter\n\nfrom django.http.request import QueryDict\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nimport pytest\n\n\ndef test_post_device_error_should_succeed(client, localhost):\n    error_comment = \"comment\"\n    url = reverse('devicehistory-do-registererror')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"netbox\": str(localhost.id),\n            \"error_comment\": error_comment,\n            \"submit_netbox\": \"Add+IP+device+error+event\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert f\"Registered error on netbox {localhost.sysname}\" in smart_str(\n        response.content\n    )\n    event = EventQueue.objects.filter(\n        event_type_id=\"deviceNotice\", source_id=\"deviceManagement\", netbox=localhost\n    ).first()\n    assert event\n    eventvars = EventQueueVar.objects.filter(event_queue=event)\n    assert eventvars\n    assert eventvars.filter(variable=\"alerttype\", value=\"deviceError\")\n    assert eventvars.filter(variable=\"comment\", value=error_comment)\n\n\ndef test_post_device_error_without_comment_should_ask_for_confirmation(\n    client, localhost\n):\n    url = reverse('devicehistory-do-registererror')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"netbox\": str(localhost.id),\n            \"error_comment\": \"\",\n            \"submit_netbox\": \"Add+IP+device+error+event\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert (\n        \"There&#x27;s no error message supplied. Are you sure you want to continue?\"\n        in smart_str(response.content)\n    )\n    event = EventQueue.objects.filter(\n        event_type_id=\"deviceNotice\", source_id=\"deviceManagement\", netbox=localhost\n    ).first()\n    assert not event\n\n\ndef test_post_device_error_without_comment_should_succeed_with_confirmation(\n    client, localhost\n):\n    url = reverse('devicehistory-do-registererror')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"netbox\": str(localhost.id),\n            \"error_comment\": \"\",\n            \"confirm\": \"yes\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert f\"Registered error on netbox {localhost.sysname}\" in smart_str(\n        response.content\n    )\n    event = EventQueue.objects.filter(\n        event_type_id=\"deviceNotice\", source_id=\"deviceManagement\", netbox=localhost\n    ).first()\n    assert event\n    eventvars = EventQueueVar.objects.filter(event_queue=event)\n    assert eventvars\n    assert eventvars.filter(variable=\"alerttype\", value=\"deviceError\")\n    assert eventvars.filter(variable=\"comment\", value=\"\")\n\n\ndef test_get_location_history_should_succeed(client, localhost):\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&loc={localhost.room.location.id}&submit_module=View+location+history\"\n    )\n\n    assert response.status_code == 200\n\n\ndef test_get_location_history_with_only_location_parameter_should_succeed(\n    client, localhost_with_alert\n):\n    url = reverse('devicehistory-view')\n    response = client.get(f\"{url}?loc={localhost_with_alert.room.location.id}\")\n\n    assert response.status_code == 200\n    assert str(localhost_with_alert) in smart_str(response.content)\n\n\ndef test_get_room_history_should_succeed(client, localhost):\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&room={localhost.room.id}&submit_module=View+room+history\"\n    )\n\n    assert response.status_code == 200\n\n\ndef test_get_ip_device_history_should_succeed(client, localhost):\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&netbox={localhost.id}&submit_module=View+IP+device+history\"\n    )\n\n    assert response.status_code == 200\n\n\ndef test_get_device_group_history_should_succeed(client, localhost):\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&netboxgroup={NetboxGroup.objects.first()}\"\n        \"&submit_module=View+device+group+history\"\n    )\n\n    assert response.status_code == 200\n\n\ndef test_get_module_history_should_succeed(db, client, localhost):\n    device = Device(serial=\"1234test\")\n    device.save()\n    module = Module(device=device, netbox=localhost, name='Module 1', model='')\n    module.save()\n\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&module={module.id}&submit_module=View+romoduleom+history\"\n    )\n\n    assert response.status_code == 200\n\n\ndef test_get_device_history_with_htmx_should_return_partial(client, localhost):\n    url = reverse('devicehistory-view')\n    response = client.get(\n        f\"{url}?from_date=2023-01-01&to_date=2025-01-01&eventtype=all\"\n        f\"&netbox={localhost.id}&submit_module=View+IP+device+history\",\n        HTTP_HX_REQUEST=\"true\",\n    )\n\n    assert response.status_code == 200\n    rendered_templates = [t.name for t in response.templates]\n    assert 'devicehistory/_history_view_results.html' in rendered_templates\n    assert 'devicehistory/device_history_view.html' not in rendered_templates\n\n\ndef test_device_history_view_filter_with_initial_values_is_valid():\n    initial_values = DeviceHistoryViewFilter.get_initial()\n    form = DeviceHistoryViewFilter(initial_values)\n    assert form.is_valid()\n\n\ndef test_device_history_view_filter_with_initial_values_is_same_as_same_get_parameters():  # noqa: E501\n    initial_values = DeviceHistoryViewFilter.get_initial()\n    form = DeviceHistoryViewFilter(initial_values)\n    form.is_valid()\n\n    query_string = (\n        f\"from_date={str(initial_values['from_date'])}\"\n        f\"&to_date={str(initial_values['to_date'])}\"\n        f\"&eventtype={initial_values['eventtype']}\"\n    )\n    form_get_parameters = DeviceHistoryViewFilter(QueryDict(query_string))\n    form_get_parameters.is_valid()\n\n    assert form.cleaned_data == form_get_parameters.cleaned_data\n\n\n@pytest.fixture()\ndef localhost_with_alert(db, localhost):\n    alert = AlertHistory(\n        source_id='ipdevpoll',\n        netbox=localhost,\n        start_time=datetime.now() - timedelta(hours=1),\n        end_time=INFINITY,\n        event_type_id='boxState',\n        value=100,\n        severity=3,\n    )\n    alert.save()\n\n    yield localhost\n    alert.delete()\n"
  },
  {
    "path": "tests/integration/web/geomap_test.py",
    "content": "def test_geomap_data_should_not_crash(client):\n    url = (\n        '/geomap/normal/data?format=geojson&limit=30&viewportWidth=1789'\n        '&viewportHeight=817&create_edges=true&fetch_data=true'\n        '&timeStart=10%3A10_20181109&timeEnd=10%3A20_20181109'\n        '&bbox=10.381361116473,63.411482408125,10.419748891889,63.419327821103'\n    )\n    response = client.get(url)\n    assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/web/graphite_test.py",
    "content": "#\n# Copyright (C) 2024 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport http.server\nimport socketserver\nimport threading\nimport time\n\nimport nav.web.graphite.views\nimport pytest\nimport requests\n\n\ndef test_graphite_proxy_should_not_log_503_error_from_graphite_web(\n    client, mock_graphite_config, fake_graphite_web_server, capsys, monkeypatch\n):\n    from django.conf import settings\n\n    url = (\n        \"/graphite/render/?width=815&height=364&_salt=1400078618.531&from=-1hours\"\n        \"&target=alias%28sumSeries%28group%28carbon.agents.%2A.metricsReceived%29%29%2C%\"\n        \"22Metrics+received%22%29&target=alias%28sumSeries%28group%28carbon.agents.%2A.\"\n        \"committedPoints%29%29%2C%22Committed+points%22%29&target=alias%28secondYAxis\"\n        \"%28sumSeries%28group%28carbon.agents.%2A.cache.size%29%29%29%2C%22Cache+size\"\n        \"%22%29\"\n    )\n    monkeypatch.setattr(\n        settings, \"EMAIL_BACKEND\", \"django.core.mail.backends.console.EmailBackend\"\n    )\n    monkeypatch.setattr(settings, \"DEBUG\", False)\n    client.get(url)\n    captured = capsys.readouterr()\n    assert \"[Django] ERROR\" not in captured.out\n    assert \"Service Unavailable\" not in captured.out\n\n\ndef test_graphite_proxy_should_respond_with_graphite_web_status_code(\n    client, mock_graphite_config, fake_graphite_web_server\n):\n    url = (\n        \"/graphite/render/?width=815&height=364&_salt=1400078618.531&from=-1hours\"\n        \"&target=alias%28sumSeries%28group%28carbon.agents.%2A.metricsReceived\"\n        \"%29%29%2C%22Metrics+received%22%29&target=alias%28sumSeries%28group%28\"\n        \"carbon.agents.%2A.committedPoints%29%29%2C%22Committed+points%22%29\"\n        \"&target=alias%28secondYAxis%28sumSeries%28group%28carbon.agents.%2A.cache.\"\n        \"size%29%29%29%2C%22Cache+size%22%29\"\n    )\n    response = client.get(url)\n    assert response.status_code == 503\n\n\ndef test_fake_graphite_server_should_respond_with_503_error(fake_graphite_web_server):\n    response = requests.get(f\"http://localhost:{fake_graphite_web_server}\")\n    assert response.status_code == 503\n\n\n#\n# Helpers and fixtures\n#\n\n\n@pytest.fixture(scope=\"module\")\ndef fake_graphite_web_server():\n    \"\"\"A fixture that starts a fake graphite web server that always responds with a\n    503 status code.  The fixture returns the localhost port number the server\n    listens to.\n    \"\"\"\n    response_code = 503\n\n    handler = lambda *args, **kwargs: SingleStatusHandler(\n        *args, response_code=response_code, **kwargs\n    )\n    socketserver.TCPServer.allow_reuse_address = True\n    httpd = socketserver.TCPServer((\"\", 0), handler)\n    port = httpd.server_address[1]\n\n    thread = threading.Thread(target=httpd.serve_forever)\n    thread.daemon = True\n    thread.start()\n    time.sleep(0.1)\n\n    yield port\n\n    httpd.shutdown()\n    thread.join()\n\n\n@pytest.fixture\ndef mock_graphite_config(fake_graphite_web_server, monkeypatch):\n    def mock_getter(*args, **kwargs):\n        return f\"http://localhost:{fake_graphite_web_server}/\"\n\n    monkeypatch.setattr(nav.web.graphite.views.CONFIG, \"get\", mock_getter)\n    yield monkeypatch\n\n\nclass SingleStatusHandler(http.server.SimpleHTTPRequestHandler):\n    \"\"\"A request handler that responds to all requests with the same response code\n    and dummy content (for testing response code handling)\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        self.response_code = kwargs.pop(\"response_code\", 200)\n        super().__init__(*args, **kwargs)\n\n    def do_GET(self):\n        self.send_response(self.response_code)\n        self.send_header(\"Content-type\", \"text/html\")\n        self.end_headers()\n        self.wfile.write(b\"Test server response\")\n\n    def do_POST(self):\n        self.send_response(self.response_code)\n        self.send_header(\"Content-type\", \"text/html\")\n        self.end_headers()\n        self.wfile.write(b\"Test server response\")\n\n\ndef main():\n    \"\"\"Main function for manual test usage of the fake server\"\"\"\n    port = 54321\n    handler = lambda *args, **kwargs: SingleStatusHandler(\n        *args, response_code=503, **kwargs\n    )\n    httpd = socketserver.TCPServer((\"\", port), handler)\n    httpd.serve_forever()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests/integration/web/info/info_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport os\n\nimport pytest\nfrom django.test import RequestFactory\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom mock import MagicMock\n\nfrom nav.web.auth.utils import set_account\nfrom nav.web.info.images.utils import save_thumbnail\nfrom nav.web.info.room.views import create_csv\nfrom nav.web.info.searchproviders import SearchProvider\n\n#########\n# Tests #\n#########\n\n\ndef test_search_for_nonascii_characters_should_not_crash(client):\n    url = reverse('info-search') + '?query=æøå'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_failing_searchprovider_should_not_crash_search_page(\n    client, failing_searchprovider\n):\n    url = reverse('info-search') + '?query=Da%20Truf'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_failures_should_be_mentioned_in_search_page(client, failing_searchprovider):\n    url = reverse('info-search') + '?query=Da%20Truf'\n    response = client.get(url)\n    assert failing_searchprovider in response.content.decode('utf-8')\n\n\ndef test_room_csv_download_should_not_produce_bytestring_representations(admin_account):\n    factory = RequestFactory()\n    request = factory.post(\n        reverse(\"room-csv\"), data={\"roomid\": \"myroom\", \"rows\": \"one;two;three\\n\"}\n    )\n    request.session = MagicMock()\n    set_account(request, admin_account, cycle_session_id=False)\n\n    response = create_csv(request)  # type: django.http.response.HttpResponse\n    assert not response.content.startswith(b\"b'\")\n\n\ndef test_save_thumbnail_should_produce_a_file(tmpdir):\n    \"\"\"This is more or less a regression test for the third party library Pillow\"\"\"\n    image = \"closet.jpg\"\n    save_thumbnail(\n        imagename=image,\n        imagedirectory=\"tests/functional\",\n        thumb_dir=tmpdir,\n    )\n    assert os.path.exists(os.path.join(tmpdir, image))\n\n\nclass TestImageUploadHeader:\n    def test_when_rendering_location_image_upload_then_include_location_id(\n        self, client\n    ):\n        url = reverse('location-info-upload', args=['mylocation'])\n        response = client.get(url)\n        assert 'Images for &laquo;mylocation&raquo;' in smart_str(response.content)\n\n    def test_when_rendering_room_image_upload_then_include_room_id(self, client):\n        url = reverse('room-info-upload', args=['myroom'])\n        response = client.get(url)\n        assert 'Images for &laquo;myroom&raquo;' in smart_str(response.content)\n\n    def test_should_render_image_help_modal(self, client):\n        url = reverse('info-image-help-modal')\n        response = client.get(url)\n        assert 'id=\"image-help\"' in smart_str(response.content)\n\n\n############\n# Fixtures #\n############\n\n\n@pytest.fixture\ndef failing_searchprovider():\n    \"\"\"\n    Inserts (into NAV's list of search providers to use) a provider that\n    raises an exception.\n    \"\"\"\n    from django.conf import settings\n\n    provider = '{module}.{klass}'.format(\n        module=__name__, klass=FailingSearchProvider.__name__\n    )\n    if provider not in settings.SEARCHPROVIDERS:\n        settings.SEARCHPROVIDERS.append(provider)\n\n    yield provider\n\n    if provider in settings.SEARCHPROVIDERS:\n        index = settings.SEARCHPROVIDERS.index(provider)\n        del settings.SEARCHPROVIDERS[index]\n\n\nclass FailingSearchProvider(SearchProvider):\n    \"\"\"A search provider that only raises exceptions\"\"\"\n\n    def fetch_results(self):\n        raise Exception(\"Riddikulus\")\n"
  },
  {
    "path": "tests/integration/web/info/location_test.py",
    "content": "import pytest\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nfrom nav.models.manage import Location\n\n\nclass TestLocationInfoView:\n    def test_location_info_url_should_allow_slashes(self, client, location_with_slash):\n        url = reverse('location-info', args=[location_with_slash.id])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert location_with_slash.id in smart_str(response.content)\n\n    def test_location_info_upload_url_should_allow_slashes(\n        self, client, location_with_slash\n    ):\n        url = reverse('location-info-upload', args=[location_with_slash.id])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert location_with_slash.id in smart_str(response.content)\n\n\n@pytest.fixture\ndef location_with_slash(db):\n    location = Location.objects.create(id='TEST/SLASH')\n    yield location\n    location.delete()\n"
  },
  {
    "path": "tests/integration/web/info/room_test.py",
    "content": "import pytest\nfrom django.test import Client\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nfrom nav.models.manage import Room, Sensor\nfrom nav.models.rack import Rack\nfrom nav.web.info.room.views import ADD_SENSOR_MODAL_ID\n\n\nclass TestRoomInfoView:\n    def test_room_info_url_should_allow_slashes(self, client, room_with_slash):\n        url = reverse('room-info', args=[room_with_slash.id])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert room_with_slash.id in smart_str(response.content)\n\n\nclass TestRoomNetboxInterfacesView:\n    def test_should_render_about_search_modal_trigger(self, client):\n        url = reverse('room-info-netboxes', args=['myroom'])\n        modal_url = reverse('room-info-about-the-search')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert f'hx-get=\"{modal_url}' in smart_str(response.content)\n\n    def test_should_render_about_search_modal(self, client):\n        url = reverse('room-info-about-the-search')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"about-the-search\"' in smart_str(response.content)\n\n\nclass TestAddRoomRackViews:\n    def test_should_render_add_rack_modal_trigger(self, client):\n        url = reverse('room-info-racks', args=['myroom'])\n        modal_url = reverse('room-info-racks-add-rack-modal', args=['myroom'])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert f'hx-get=\"{modal_url}' in smart_str(response.content)\n\n    def test_should_render_add_rack_modal(self, client):\n        url = reverse('room-info-racks-add-rack-modal', args=['myroom'])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"add-rack-modal\"' in smart_str(response.content)\n\n    def test_when_account_is_not_admin_then_return_403(self, non_admin_client):\n        url = reverse('room-info-racks-add-rack', args=['myroom'])\n        response = non_admin_client.post(url, {'rackname': 'Test Rack'})\n        assert response.status_code == 403\n\n    def test_when_account_is_admin_then_add_rack(self, client):\n        url = reverse('room-info-racks-add-rack', args=['myroom'])\n        response = client.post(url, {'rackname': 'Test Rack'})\n        assert response.status_code == 200\n        assert 'Test Rack' in smart_str(response.content)\n\n    def test_when_rack_is_added_then_return_template_with_editmode(self, client):\n        url = reverse('room-info-racks-add-rack', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'rackname': 'Test Rack',\n            },\n        )\n        assert response.status_code == 200\n        assert 'class=\"rack editmode\"' in smart_str(response.content)\n\n    def test_when_rack_is_added_then_return_color_chooser_options(self, client):\n        url = reverse('room-info-racks-add-rack', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'rackname': 'Test Rack',\n            },\n        )\n        assert response.status_code == 200\n        assert 'name=\"rack-color\"' in smart_str(response.content)\n\n    def test_when_rack_is_added_then_return_rack_added_event(self, client):\n        url = reverse('room-info-racks-add-rack', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'rackname': 'Test Rack',\n            },\n        )\n        assert response.status_code == 200\n        assert 'room.rack.added' in response.headers['HX-Trigger']\n\n    def test_should_add_rack_for_room_id_with_slash(self, client, room_with_slash):\n        url = reverse('room-info-racks-add-rack', args=[room_with_slash.id])\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'room.rack.added' in response.headers['HX-Trigger']\n\n\nclass TestAddSensorModalView:\n    def test_should_render_add_sensor_modal(self, client, test_rack):\n        url = reverse('room-info-racks-add-sensor-modal', args=[test_rack.room.id])\n        response = client.post(url, data={'rackid': test_rack.id, 'column': 1})\n        assert response.status_code == 200\n        assert f'id=\"{ADD_SENSOR_MODAL_ID}\"' in smart_str(response.content)\n\n    def test_should_render_modal_with_rackid(self, client, test_rack):\n        url = reverse('room-info-racks-add-sensor-modal', args=[test_rack.room.id])\n        response = client.post(url, data={'rackid': test_rack.id, 'column': 1})\n        assert response.status_code == 200\n        assert f'name=\"rackid\" value=\"{test_rack.id}\"' in smart_str(response.content)\n\n    def test_should_render_modal_with_column(self, client, test_rack):\n        url = reverse('room-info-racks-add-sensor-modal', args=[test_rack.room.id])\n        response = client.post(url, data={'rackid': test_rack.id, 'column': 1})\n        assert response.status_code == 200\n        assert 'name=\"column\" value=\"1\"' in smart_str(response.content)\n\n    def test_given_no_rackid_then_return_400(self, client):\n        url = reverse('room-info-racks-add-sensor-modal', args=['myroom'])\n        response = client.post(url, data={'column': 1})\n        assert response.status_code == 400\n\n    def test_given_invalid_column_then_return_400(self, client, test_rack):\n        url = reverse('room-info-racks-add-sensor-modal', args=[test_rack.room.id])\n        response = client.post(url, data={'rackid': test_rack.id, 'column': '-1'})\n        assert response.status_code == 400\n\n    def test_given_non_existing_roomid_then_return_404(self, client, test_rack):\n        url = reverse('room-info-racks-add-sensor-modal', args=[999])\n        response = client.post(url, data={'rackid': test_rack.id, 'column': 1})\n        assert response.status_code == 404\n\n    def test_given_non_existing_rackid_then_return_404(self, client):\n        url = reverse('room-info-racks-add-sensor-modal', args=['myroom'])\n        response = client.post(url, data={'column': 1, 'rackid': 999})\n        assert response.status_code == 404\n\n\nclass TestSaveSensorView:\n    def test_when_saving_single_sensor_then_return_rack_item(\n        self, client, test_rack, test_sensor\n    ):\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'Sensor',\n                'sensorid': test_sensor.id,\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert f'id=\"item_{test_rack.id}_' in smart_str(response.content)\n\n    def test_when_saving_sensor_diff_then_return_rack_item(\n        self, db, client, test_rack, test_sensor\n    ):\n        # Create another sensor for diff\n        sensor2 = Sensor.objects.create(\n            netbox=test_sensor.netbox,\n            oid=\"1.2.4\",\n            unit_of_measurement=test_sensor.unit_of_measurement,\n        )\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'SensorsDiff',\n                'minuendid': test_sensor.id,\n                'subtrahendid': sensor2.id,\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert f'id=\"item_{test_rack.id}_' in smart_str(response.content)\n\n    def test_when_saving_sensor_sum_then_return_rack_item(\n        self, db, client, test_rack, test_sensor\n    ):\n        # Create two more sensors for sum\n        sensor2 = Sensor.objects.create(\n            netbox=test_sensor.netbox,\n            oid=\"1.2.5\",\n            unit_of_measurement=test_sensor.unit_of_measurement,\n        )\n        sensor3 = Sensor.objects.create(\n            netbox=test_sensor.netbox,\n            oid=\"1.2.6\",\n            unit_of_measurement=test_sensor.unit_of_measurement,\n        )\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'SensorsSum',\n                'sensors[]': [test_sensor.id, sensor2.id, sensor3.id],\n                'title': 'Sum Test',\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert f'id=\"item_{test_rack.id}_' in smart_str(response.content)\n\n    def test_given_missing_sensorid_when_saving_sensor_then_return_error(\n        self, client, test_rack\n    ):\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'Sensor',\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert response.status_code == 200\n        assert b'No sensor selected' in response.content\n\n    def test_given_missing_subtrahend_when_saving_sensor_diff_then_return_error(\n        self, client, test_rack, test_sensor\n    ):\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'SensorsDiff',\n                'minuendid': test_sensor.id,\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert response.status_code == 200\n        assert b'Two sensors must be selected' in response.content\n\n    def test_given_invalid_sum_data_when_saving_sensor_sum_then_return_error(\n        self, client, test_rack, test_sensor\n    ):\n        url = reverse('room-info-racks-save-sensor', args=['myroom'])\n        response = client.post(\n            url,\n            {\n                'item_type': 'SensorsSum',\n                'sensors[]': [test_sensor.id],\n                'title': '',\n                'rackid': test_rack.id,\n                'column': 1,\n            },\n        )\n        assert response.status_code == 200\n        assert (\n            b'At least two sensors must be selected and a title given'\n            in response.content\n        )\n\n\n@pytest.fixture\ndef test_rack(db, test_sensor):\n    rack = Rack(room=test_sensor.netbox.room, rackname=\"Test Rack\")\n    rack.save()\n    yield rack\n    rack.delete()\n\n\n@pytest.fixture\ndef test_sensor(db, localhost):\n    sensor = Sensor(\n        netbox=localhost, oid=\"1.2.3\", unit_of_measurement=Sensor.UNIT_CELSIUS\n    )\n    sensor.save()\n    yield sensor\n    sensor.delete()\n\n\n@pytest.fixture(scope='function')\ndef non_admin_client(client, non_admin_account):\n    client_ = Client()\n    url = reverse('webfront-login')\n    client_.post(url, {'username': non_admin_account.login, 'password': 'password'})\n    return client_\n\n\n@pytest.fixture\ndef room_with_slash(db):\n    room = Room.objects.create(id='TEST/SLASH', location_id='mylocation')\n    yield room\n    room.delete()\n"
  },
  {
    "path": "tests/integration/web/info/search_test.py",
    "content": "# -*- coding: utf-8 -*-\nimport pytest\nfrom django.db import models\nfrom django.urls import reverse\n\nfrom nav.models.manage import Interface, Location, NetType, Room, Vlan, NetboxGroup\nfrom nav.web.info.forms import SearchForm\nfrom nav.web.info.views import process_form\n\n\ndef test_search_for_ip_devices_should_not_crash(client):\n    url = reverse('info-search') + '?query=a'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_search_for_vlans_should_not_crash(client):\n    url = reverse('vlan-index') + '?query=a'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_search_for_prefixes_should_not_crash(client):\n    url = reverse('prefix-index') + '?query=a'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_search_for_device_groups_should_not_crash(client):\n    url = reverse('netbox-group') + '?query=a'\n    response = client.get(url)\n    assert response.status_code == 200\n\n\nclass TestProcessFormDescriptionSearch:\n    \"\"\"Tests for process_form view searching by description.\"\"\"\n\n    def test_location_search_by_description_should_return_results(self, db):\n        location = Location.objects.create(\n            id=\"testlocation\", description=\"test location description\"\n        )\n\n        self.assert_search_provider_result(\n            instance=location,\n            provider_name='Locations',\n        )\n\n    def test_room_search_by_description_should_return_results(self, db):\n        room = Room.objects.create(\n            id=\"testroom\", description=\"test room description\", location_id=\"mylocation\"\n        )\n\n        self.assert_search_provider_result(\n            instance=room,\n            provider_name='Rooms',\n        )\n\n    def test_vlan_search_by_description_should_return_results(self, db):\n        nettype = NetType.objects.create(description=\"testdescription\")\n        vlan = Vlan.objects.create(\n            vlan=\"20\", description=\"test vlan description\", net_type=nettype\n        )\n        self.assert_search_provider_result(\n            instance=vlan,\n            provider_name='Vlans',\n        )\n\n    def test_devicegroup_search_by_description_should_return_results(\n        self, db, localhost\n    ):\n        device_group = NetboxGroup.objects.create(\n            id='test-group-001', description='Core network switches group'\n        )\n        self.assert_search_provider_result(\n            instance=device_group,\n            provider_name='Device groups',\n        )\n\n    @staticmethod\n    def assert_search_provider_result(instance: models.Model, provider_name: str):\n        \"\"\"\n        Helper method to assert that a search by description returns\n        the expected instance.\n        \"\"\"\n\n        form = SearchForm({'query': instance.description}, auto_id=False)\n        form.is_valid()\n        providers, _ = process_form(form)\n\n        provider = next((p for p in providers if p.name == provider_name), None)\n        assert provider is not None\n        assert len(provider.results) == 1\n        assert provider.results[0].inst.id == instance.id\n\n\nclass TestInfoSearchViews:\n    \"\"\"Tests for the info search views.\"\"\"\n\n    def test_info_search_general_query_should_return_base_template(self, client):\n        \"\"\"Should render base template for general query.\"\"\"\n        url = reverse('info-search') + '?query=a'\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'info/base.html' in [t.name for t in response.templates]\n\n    def test_info_search_query_matching_single_resource_should_redirect(\n        self, client, localhost\n    ):\n        \"\"\"Should redirect when query matches a single resource.\"\"\"\n        url = reverse('info-search') + f'?query={localhost.sysname}'\n        response = client.get(url)\n        assert response.status_code == 302\n        assert response.url == reverse(\n            'ipdevinfo-details-by-name', kwargs={'name': localhost.sysname}\n        )\n\n    def test_info_search_general_query_using_htmx_should_return_search_results(\n        self, client\n    ):\n        \"\"\"Should return search results partial for HTMX request.\"\"\"\n        url = reverse('info-search') + '?query=a'\n        response = client.get(url, HTTP_HX_REQUEST='true')\n        assert response.status_code == 200\n        assert 'info/_search_results.html' in [t.name for t in response.templates]\n\n    def test_info_search_query_matching_single_resource_using_htmx_should_redirect(\n        self, client, localhost\n    ):\n        \"\"\"\n        Should return HX-Redirect header for HTMX request matching single resource.\n        \"\"\"\n        url = reverse('info-search') + f'?query={localhost.sysname}'\n        response = client.get(url, HTTP_HX_REQUEST='true')\n        assert response.status_code == 200\n        assert 'HX-Redirect' in response.headers\n\n    def test_ipdevinfo_search_query_that_matches_single_netbox_should_redirect(\n        self, client, localhost\n    ):\n        \"\"\"Should redirect for ipdevinfo search matching single netbox.\"\"\"\n        url = reverse('ipdevinfo-search') + f'?query={localhost.sysname}'\n        response = client.get(url)\n        assert response.status_code == 302\n        assert response.url == reverse(\n            'ipdevinfo-details-by-name', kwargs={'name': localhost.sysname}\n        )\n\n    def test_ipdevinfo_single_netbox_query_should_redirect_with_htmx(\n        self, client, localhost\n    ):\n        \"\"\"\n        Should return HX-Redirect for HTMX ipdevinfo search matching single netbox.\n        \"\"\"\n        url = reverse('ipdevinfo-search') + f'?query={localhost.sysname}'\n        response = client.get(url, HTTP_HX_REQUEST='true')\n        assert response.status_code == 200\n        assert 'HX-Redirect' in response.headers\n\n    @pytest.mark.parametrize(\n        'url_name,template',\n        [\n            ('ipdevinfo-search', 'info/base.html'),\n            ('room-search', 'info/room/base.html'),\n            ('location-search', 'info/location/base.html'),\n            ('vlan-index', 'info/vlan/base.html'),\n            ('prefix-index', 'info/prefix/base.html'),\n            ('netbox-group', 'info/netboxgroup/list_groups.html'),\n        ],\n    )\n    def test_search_views_should_render_base_template_on_initial_load(\n        self, client, url_name, template\n    ):\n        \"\"\"Should render correct base template for each search view.\"\"\"\n        url = reverse(url_name) + '?query=unmatched'\n        response = client.get(url)\n        assert response.status_code == 200\n        assert template in [t.name for t in response.templates]\n\n    @pytest.mark.parametrize(\n        'url_name,template',\n        [\n            ('ipdevinfo-search', 'ipdevinfo/_search_results.html'),\n            ('room-search', 'info/room/_search_results.html'),\n            ('location-search', 'info/location/_search_results.html'),\n            ('vlan-index', 'info/vlan/_search_results.html'),\n            ('prefix-index', 'info/prefix/_search_results.html'),\n            ('netbox-group', 'info/netboxgroup/_search_results.html'),\n        ],\n    )\n    def test_search_views_should_render_results_with_htmx(\n        self, client, url_name, template\n    ):\n        url = reverse(url_name) + '?query=unmatched'\n        response = client.get(url, HTTP_HX_REQUEST='true')\n        assert response.status_code == 200\n        assert template in [t.name for t in response.templates]\n\n    def test_given_alias_for_room_in_info_search_should_redirect_to_room(\n        self, client, room_with_alias\n    ):\n        url = reverse('info-search') + f'?query={room_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 302\n        assert response.url == reverse(\n            'room-info', kwargs={'roomid': room_with_alias.pk}\n        )\n\n    def test_given_alias_for_location_in_info_search_should_redirect_to_location(\n        self, client, location_with_alias\n    ):\n        url = reverse('info-search') + f'?query={location_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 302\n        assert response.url == reverse(\n            'location-info', kwargs={'locationid': location_with_alias.pk}\n        )\n\n\nclass TestRoomSearchView:\n    def test_given_standard_query_then_should_not_crash(self, client):\n        url = reverse('room-search') + '?query=a'\n        response = client.get(url)\n        assert response.status_code == 200\n\n    def test_given_alias_for_room_then_should_return_room(\n        self, client, room_with_alias\n    ):\n        url = reverse('room-search') + f'?query={room_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert room_with_alias.pk in response.content.decode('utf-8')\n\n    def test_given_alias_for_location_then_should_return_room_in_location(\n        self, client, location_with_alias, room_with_alias\n    ):\n        url = reverse('room-search') + f'?query={location_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert room_with_alias.pk in response.content.decode('utf-8')\n\n\nclass TestLocationSearchView:\n    def test_given_standard_query_then_it_should_not_crash(self, client):\n        url = reverse('location-search') + '?query=a'\n        response = client.get(url)\n        assert response.status_code == 200\n\n    def test_given_alias_for_location_then_it_should_return_location(\n        self, client, location_with_alias\n    ):\n        url = reverse('location-search') + f'?query={location_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert location_with_alias.pk in response.content.decode('utf-8')\n\n    def test_given_alias_for_location_then_it_should_return_parent_location(\n        self, client, location_with_alias\n    ):\n        parent_location = Location.objects.create(id=\"parent_location\")\n        location_with_alias.parent = parent_location\n        location_with_alias.save()\n\n        url = reverse('location-search') + f'?query={location_with_alias.aliases[0]}'\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert parent_location.pk in response.content.decode('utf-8')\n\n    def test_when_location_has_multiple_matching_children_then_it_should_not_return_duplicates(  # noqa: E501\n        self, client, location_with_alias\n    ):\n        \"\"\"\n        Turns out that the way child_locations are joined in the search for locations\n        if we have a locations with multiple child locations where both the id of the\n        parent and the ids of the children match the query without having a distinct()\n        added we get the same parent location returned multiple times\n        \"\"\"\n        mylocation = Location.objects.get(id=\"mylocation\")\n        mylocation.parent = location_with_alias\n        mylocation.save()\n\n        second_child = Location.objects.create(id='secondlocation')\n        second_child.parent = location_with_alias\n        second_child.save()\n\n        url = reverse('location-search') + '?query=location'\n        response = client.get(url)\n\n        assert response.status_code == 200\n        ids = response.context[\"locations\"].values_list(\"id\", flat=True)\n        assert len(ids) == len(set(ids))\n\n\nclass TestIndexSearchPreviewView:\n    \"\"\"Tests for the search preview feature.\"\"\"\n\n    def test_given_empty_query_it_should_return_no_results(self, client):\n        response = self._handle_search_request(client, '')\n        assert response.status_code == 200\n        assert response.context['results'] is None\n\n    def test_given_empty_query_it_should_return_close_popover_event(self, client):\n        response = self._handle_search_request(client, '')\n        assert 'HX-Trigger' in response.headers\n        assert 'popover.close' in response.headers['HX-Trigger']\n\n    def test_given_existing_resource_it_should_return_results(self, client):\n        response = self._handle_search_request(client, \"myroom\")\n        assert response.status_code == 200\n        assert len(response.context['results']) > 0\n\n    def test_given_valid_query_it_should_return_results(self, client, db, localhost):\n        response = self._handle_search_request(client, localhost.sysname)\n        assert response.status_code == 200\n        results = response.context['results']\n        assert results is not None\n        # At least one provider should have results\n        assert any(len(provider.results) > 0 for provider in results)\n\n    def test_given_more_than_five_results_then_it_should_truncate_results(\n        self, client, db, localhost\n    ):\n        # Create more than 5 interfaces to trigger truncation\n        for i in range(10):\n            create_interface(localhost, ifname=f'GigabitEthernet0/{i}')\n        response = self._handle_search_request(client, \"Test Interface\")\n        results = response.context['results']\n        # Find the Interfaces provider\n        provider = next((p for p in results if p.name == 'Interfaces'), None)\n        assert provider is not None\n        assert provider.count == 10\n        assert len(provider.results) == 5  # Should be truncated to 5\n        assert provider.truncated is True\n        assert provider.truncated_count == 5\n\n    @staticmethod\n    def _handle_search_request(client, query):\n        url = reverse('info-search-preview') + f'?query={query}'\n        return client.get(url)\n\n\ndef create_interface(\n    netbox, ifname='GigabitEthernet0/1', ifalias='Test Interface', **kwargs\n):\n    \"\"\"Create a test interface\"\"\"\n    interface = Interface(netbox=netbox, ifname=ifname, ifalias=ifalias, **kwargs)\n    interface.save()\n    return interface\n\n\n@pytest.fixture\ndef room_with_alias(db, location_with_alias):\n    room = Room.objects.create(\n        id='roomwithalias', location_id=location_with_alias.id, aliases=[\"roomalias\"]\n    )\n\n    yield room\n\n\n@pytest.fixture\ndef location_with_alias(db):\n    location = Location.objects.create(\n        id='locationwithalias', aliases=[\"locationalias\"]\n    )\n\n    yield location\n"
  },
  {
    "path": "tests/integration/web/ipam/api_test.py",
    "content": "class TestPrefixViewSet:\n    def test_when_prefix_address_is_unknown_it_should_not_crash(self, client):\n        response = client.get(\n            \"/ipam/api/\",\n            follow=True,\n            data={\n                \"net_type\": \"all\",\n                \"within\": \"192.168.42.0/24\",\n                \"show_all\": \"True\",\n            },\n        )\n        assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/web/ipam/util_test.py",
    "content": "\"\"\"Tests for nav.web.ipam.util\"\"\"\n\nimport pytest\nfrom IPy import IP\n\nfrom nav.models.manage import Prefix, Vlan\nfrom nav.web.ipam.util import get_available_subnets\n\n\nclass TestGetAvailableSubnets:\n    def test_get_available_subnets(self, prefixes):\n        available = get_available_subnets(\"10.0.160.0/19\")\n        assert available is not None\n        # only 10.0.160.0/21 should be available\n        assert len(available) == 1\n        assert available[0] == IP(\"10.0.160.0/21\")\n\n\n###\n#\n# Fixtures\n#\n###\n\n\n@pytest.fixture\ndef vlan(db):\n    \"\"\"Creates a VLAN for testing prefix availability.\"\"\"\n    vlan = Vlan(vlan=1337, net_type_id='lan', net_ident='cool_vlans')\n    vlan.save()\n    yield vlan\n    # Cleanup handled by db fixture's transaction rollback\n\n\n@pytest.fixture\ndef prefixes(vlan):\n    \"\"\"Creates a parent prefix with several \"child\" prefixes to test availability.\n\n    The 10.0.160.0/19 scope contains four /21 subnets:\n    - 10.0.160.0/21 (available)\n    - 10.0.168.0/21 (used)\n    - 10.0.176.0/21 (used)\n    - 10.0.184.0/21 (used)\n    \"\"\"\n    parent = Prefix(net_address='10.0.160.0/19', vlan=vlan)\n    parent.save()\n\n    child1 = Prefix(net_address='10.0.168.0/21', vlan=vlan)\n    child1.save()\n\n    child2 = Prefix(net_address='10.0.176.0/21', vlan=vlan)\n    child2.save()\n\n    child3 = Prefix(net_address='10.0.184.0/21', vlan=vlan)\n    child3.save()\n\n    yield [parent, child1, child2, child3]\n    # Cleanup handled by db fixture's transaction rollback\n"
  },
  {
    "path": "tests/integration/web/ipam/views_test.py",
    "content": "from django.urls import reverse\n\n\nclass TestSubnetAllocatorHelpModal:\n    def test_should_render_help_modal(self, client):\n        url = reverse('ipam-subnet-allocator-help')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert b'How to use the subnet diagram' in response.content\n"
  },
  {
    "path": "tests/integration/web/ipdevinfo_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom datetime import datetime, timedelta\n\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nfrom nav.event2 import EventFactory\nfrom nav.models.event import EventQueue\nfrom nav.models.manage import (\n    Netbox,\n    Module,\n    Interface,\n    Device,\n    NetboxProfile,\n    IpdevpollJobLog,\n)\nfrom nav.web.ipdevinfo.utils import get_module_view\n\nimport pytest\n\n\ndef test_device_details_should_include_sysname(client, netbox):\n    url = reverse('ipdevinfo-details-by-name', args=(netbox.sysname,))\n    response = client.get(url)\n    assert netbox.sysname in smart_str(response.content)\n\n\ndef test_device_details_should_match_sysname_case_insensitively(client, netbox):\n    url = reverse('ipdevinfo-details-by-name', args=(netbox.sysname.upper(),))\n    response = client.get(url)\n    assert netbox.sysname in smart_str(response.content)\n\n\ndef test_port_search_should_match_case_insensitively(client, netbox):\n    ifc = netbox.interfaces.all()[0]\n    url = reverse(\n        'ipdevinfo-interface-details-by-name',\n        kwargs={\n            'netbox_sysname': netbox.sysname,\n            'port_name': ifc.ifdescr.upper(),\n        },\n    )\n    response = client.get(url)\n    assert response.status_code == 200\n    assert ifc.ifdescr in smart_str(response.content)\n\n\ndef test_get_port_view_should_not_crash_on_big_interval(client, netbox):\n    url = reverse(\n        'ipdevinfo-get-port-view',\n        kwargs={\n            'netbox_sysname': netbox.sysname,\n            'perspective': 'swportactive',\n        },\n    )\n    url = url + '?interval=123123123123'\n    response = client.get(url)\n    assert response.status_code == 200\n    assert \"They did not have computers\" in smart_str(response.content)\n\n\n@pytest.mark.parametrize(\n    \"perspective\",\n    [\n        'swportstatus',\n        'swportactive',\n        'gwportstatus',\n        'physportstatus',\n    ],\n)\ndef test_get_module_view(netbox, perspective):\n    module = netbox.modules.all()[0]\n    result = get_module_view(module, perspective='swportstatus', netbox=netbox)\n    assert result['object'] == module\n    assert 'ports' in result\n\n\n@pytest.mark.parametrize(\n    \"badname\",\n    [\n        \"02.44.02\",  # Looks like an IP address\n        \"\\x01\\x9e$ü\\x86\",  # Cannot be encoded using IDNA for DNS lookups\n    ],\n)\ndef test_bad_name_should_not_crash_ipdevinfo(client, badname):\n    \"\"\"Tests \"bad\" device names to ensure they dont crash ipdevinfo lookup views\"\"\"\n    url = reverse(\"ipdevinfo-details-by-name\", kwargs={\"name\": badname})\n    response = client.get(url)\n    assert response.status_code == 200\n    assert badname in smart_str(response.content)\n\n\ndef test_when_module_name_contains_slash_then_module_details_should_not_crash(\n    client, netbox\n):\n    module = netbox.modules.first()\n    module.name = \"1/A\"\n    module.save()\n    url = reverse('ipdevinfo-module-details', args=(netbox.sysname, \"1/A\"))\n    response = client.get(url)\n    assert netbox.sysname in smart_str(response.content)\n    assert module.name in smart_str(response.content)\n\n\nclass TestRefreshIpdevinfoJob:\n    def test_given_netbox_and_job_posts_refresh_event(db, client, netbox):\n        now = datetime.now()\n        url = reverse(\n            \"refresh-ipdevinfo-job\",\n            kwargs={\"netbox_sysname\": netbox.sysname, \"job_name\": \"dns\"},\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert EventQueue.objects.filter(\n            source_id=\"devBrowse\",\n            target_id=\"ipdevpoll\",\n            event_type_id=\"notification\",\n            netbox=netbox,\n            subid=\"dns\",\n            state=EventQueue.STATE_STATELESS,\n            time__gte=now,\n        ).exists()\n\n    def test_returns_loading_indicator(db, client, netbox):\n        url = reverse(\n            \"refresh-ipdevinfo-job\",\n            kwargs={\"netbox_sysname\": netbox.sysname, \"job_name\": \"dns\"},\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert (\n            '<img src=\"/static/images/select2/select2-spinner.gif\" '\n            'alt=\"refresh ongoing\"/>' in smart_str(response.content)\n        )\n\n\nclass TestRefreshIpdevinfoJobStatusQuery:\n    def test_when_job_finished_returns_client(db, client, netbox):\n        an_hour_ago = datetime.now() - timedelta(hours=1)\n        IpdevpollJobLog.objects.create(netbox=netbox, job_name=\"dns\", duration=30)\n        url = reverse(\n            \"refresh-ipdevinfo-job-status-query\",\n            kwargs={\n                \"netbox_sysname\": netbox.sysname,\n                \"job_name\": \"dns\",\n                \"job_started_timestamp\": str(an_hour_ago),\n            },\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert response.headers[\"HX-Refresh\"]\n\n    def test_when_job_still_running_returns_loading_indicator(db, client, netbox):\n        an_hour_ago = datetime.now() - timedelta(hours=1)\n        for i in range(30):\n            log = IpdevpollJobLog.objects.create(\n                netbox=netbox,\n                job_name=\"dns\",\n                duration=1,\n            )\n            # this needs to be done after creation due to the `auto_now_add` setting of\n            # the end_time field\n            log.end_time = an_hour_ago - timedelta(minutes=i)\n            log.save()\n        url = reverse(\n            \"refresh-ipdevinfo-job-status-query\",\n            kwargs={\n                \"netbox_sysname\": netbox.sysname,\n                \"job_name\": \"dns\",\n                \"job_started_timestamp\": str(datetime.now()),\n            },\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert (\n            '<img src=\"/static/images/select2/select2-spinner.gif\" '\n            'alt=\"refresh ongoing\"/>' in smart_str(response.content)\n        )\n\n    def test_when_job_runs_for_too_long_returns_error(db, client, netbox):\n        an_hour_ago = datetime.now() - timedelta(hours=1)\n        for i in range(30):\n            log = IpdevpollJobLog.objects.create(\n                netbox=netbox,\n                job_name=\"dns\",\n                duration=1,\n            )\n            # this needs to be done after creation due to the `auto_now_add` setting of\n            # the end_time field\n            log.end_time = an_hour_ago - timedelta(minutes=i)\n            log.save()\n        url = reverse(\n            \"refresh-ipdevinfo-job-status-query\",\n            kwargs={\n                \"netbox_sysname\": netbox.sysname,\n                \"job_name\": \"dns\",\n                \"job_started_timestamp\": str(datetime.now() - timedelta(minutes=5)),\n            },\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert (\n            \"Job &#x27;dns&#x27; has been running for an unusually long time. Check the\"\n            \" log messages for eventual errors.\" in smart_str(response.content)\n        )\n\n    def test_when_refresh_event_exists_returns_error(db, client, netbox):\n        log = IpdevpollJobLog.objects.create(\n            netbox=netbox,\n            job_name=\"dns\",\n            duration=1,\n        )\n        # this needs to be done after creation due to the `auto_now_add`    setting of\n        # the end_time field\n        log.end_time = datetime.now() - timedelta(hours=1)\n        log.save()\n        refresh_event = EventFactory(\n            \"devBrowse\", \"ipdevpoll\", event_type=\"notification\"\n        )\n        event = refresh_event.notify(netbox=netbox, subid=\"dns\")\n        event.save()\n\n        url = reverse(\n            \"refresh-ipdevinfo-job-status-query\",\n            kwargs={\n                \"netbox_sysname\": netbox.sysname,\n                \"job_name\": \"dns\",\n                \"job_started_timestamp\": str(datetime.now() - timedelta(minutes=5)),\n            },\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert (\n            \"Job &#x27;dns&#x27; was not started. Make sure that ipdevpoll is running.\"\n            in smart_str(response.content)\n        )\n\n\nclass TestHostInfoModal:\n    def test_should_render_modal(self, client, netbox):\n        url = reverse(\n            \"ipdevinfo-hostinfo\",\n            args=[netbox.sysname],\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"hostinfo\"' in smart_str(response.content)\n\n    def test_when_rendering_modal_then_include_sysname(self, client, netbox):\n        url = reverse(\n            \"ipdevinfo-hostinfo\",\n            args=[netbox.sysname],\n        )\n        response = client.get(url)\n        assert response.status_code == 200\n        assert netbox.sysname in smart_str(response.content)\n\n\nclass TestPoeHintModals:\n    def test_should_render_status_hint_modal(self, client, netbox):\n        url = reverse('ipdevinfo-poe-status-hint-modal')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"poe-status-hint\"' in smart_str(response.content)\n\n    def test_should_render_classification_hint_modal(self, client, netbox):\n        url = reverse('ipdevinfo-poe-classification-hint-modal')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"poe-classification-hint\"' in smart_str(response.content)\n\n\n###\n#\n# Fixtures\n#\n###\n\n\n@pytest.fixture()\ndef netbox(db, management_profile):\n    box = Netbox(\n        ip='10.254.254.254',\n        sysname='example-sw.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SW',\n    )\n    box.save()\n    NetboxProfile(netbox=box, profile=management_profile).save()\n\n    device = Device(serial=\"1234test\")\n    device.save()\n    module = Module(device=device, netbox=box, name='Module 1', model='')\n    module.save()\n\n    interface = Interface(netbox=box, module=module, ifname='1', ifdescr='Port 1')\n    interface.save()\n\n    return box\n"
  },
  {
    "path": "tests/integration/web/jwt_test.py",
    "content": "from mock import patch\nimport pytest\nfrom typing import Generator\nfrom datetime import datetime, timedelta\nfrom django.urls import reverse\n\nfrom nav.models.api import JWTRefreshToken\nfrom nav.auditlog.models import LogEntry\n\n\ndef test_posting_valid_data_to_create_endpoint_should_create_token(db, client):\n    \"\"\"Tests that a token can be created\"\"\"\n    url = reverse(\"useradmin-jwt_create\")\n    with patch(\"nav.web.useradmin.views.LOCAL_JWT_IS_CONFIGURED\", True):\n        response = client.post(\n            url,\n            data={\n                'name': 'mytesttoken',\n                'permission': 'read',\n            },\n            follow=True,\n        )\n\n    assert response.status_code == 200\n    assert JWTRefreshToken.objects.filter(name='mytesttoken').exists()\n\n\ndef test_posting_existing_token_id_to_delete_endpoint_should_delete_token(\n    db, client, token\n):\n    \"\"\"Tests that a token can be deleted\"\"\"\n    url = reverse(\"useradmin-jwt_delete\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert not JWTRefreshToken.objects.filter(name='mytesttoken').exists()\n\n\ndef test_posting_existing_token_id_to_revoke_endpoint_should_revoke_token(\n    db, client, token\n):\n    \"\"\"Tests that a token can be revoked\"\"\"\n    url = reverse(\"useradmin-jwt_revoke\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    token.refresh_from_db()\n    assert token.revoked is True\n\n\ndef test_recreating_token_should_unrevoke_it(db, client, token):\n    token.revoked = True\n    token.save()\n    url = reverse(\"useradmin-jwt_recreate\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    token.refresh_from_db()\n    assert not token.revoked\n\n\ndef test_posting_valid_data_to_edit_endpoint_should_edit_token(db, client, token):\n    url = reverse(\"useradmin-jwt_edit\", args=[token.id])\n    new_desc = \"newdesc\"\n    response = client.post(\n        url,\n        data={\n            'name': token.name,\n            'description': new_desc,\n        },\n        follow=True,\n    )\n\n    assert response.status_code == 200\n    token.refresh_from_db()\n    assert token.description == new_desc\n\n\ndef test_creating_token_should_add_auditlog_entry(db, client):\n    url = reverse(\"useradmin-jwt_create\")\n    with patch(\"nav.web.useradmin.views.LOCAL_JWT_IS_CONFIGURED\", True):\n        response = client.post(\n            url,\n            data={\n                'name': 'mytesttoken',\n                'permission': 'read',\n            },\n            follow=True,\n        )\n\n    assert response.status_code == 200\n    token = JWTRefreshToken.objects.get(name='mytesttoken')\n    assert LogEntry.objects.filter(\n        object_pk=token.pk, verb='create-jwtrefreshtoken'\n    ).exists()\n\n\ndef test_deleting_token_should_add_auditlog_entry(db, client, token):\n    url = reverse(\"useradmin-jwt_delete\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert LogEntry.objects.filter(\n        object_pk=token.id, verb='delete-jwtrefreshtoken'\n    ).exists()\n\n\ndef test_revoking_token_should_add_auditlog_entry(db, client, token):\n    url = reverse(\"useradmin-jwt_revoke\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert LogEntry.objects.filter(\n        object_pk=token.id, verb='edit-jwttoken-revoked'\n    ).exists()\n\n\ndef test_recreating_token_should_add_auditlog_entry(db, client, token):\n    token.revoked = True\n    token.save()\n    url = reverse(\"useradmin-jwt_recreate\", args=[token.id])\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert LogEntry.objects.filter(\n        object_pk=token.id, verb='edit-jwttoken-recreated'\n    ).exists()\n\n\ndef test_editing_token_should_add_auditlog_entry(db, client, token):\n    url = reverse(\"useradmin-jwt_edit\", args=[token.id])\n    new_desc = \"newdesc\"\n    response = client.post(\n        url,\n        data={\n            'name': token.name,\n            'description': new_desc,\n        },\n        follow=True,\n    )\n\n    assert response.status_code == 200\n    assert LogEntry.objects.filter(\n        object_pk=token.id, verb='edit-jwtrefreshtoken-description'\n    ).exists()\n\n\n@pytest.fixture()\ndef token(db) -> Generator[JWTRefreshToken, None, None]:\n    \"\"\"Fixture to create a JWTRefreshToken instance for testing\"\"\"\n    token = JWTRefreshToken.objects.create(\n        name='mytesttoken',\n        permission='read',\n        expires=datetime.now() + timedelta(days=1),\n        activates=datetime.now() - timedelta(hours=1),\n    )\n    yield token\n    if token.id:\n        token.delete()\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_private_key_mock(rsa_private_key) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_PRIVATE_KEY setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_PRIVATE_KEY\", rsa_private_key):\n        yield rsa_private_key\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_name_mock() -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_NAME setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_NAME\", \"localnav\"):\n        with patch(\"nav.web.api.v1.views.JWT_NAME\", \"localnav\"):\n            yield \"localnav\"\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_access_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_ACCESS_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(hours=1)\n    with patch(\"nav.web.jwtgen.JWT_ACCESS_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_refresh_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_REFRESH_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(days=1)\n    with patch(\"nav.web.jwtgen.JWT_REFRESH_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n"
  },
  {
    "path": "tests/integration/web/machinetracker_test.py",
    "content": "from datetime import datetime\n\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\nfrom nav.models.fields import INFINITY\nfrom nav.models.manage import Arp\nfrom nav.web.machinetracker.views import VALID_HELP_TAB_NAMES, get_netbios_query\n\n\ndef test_get_netbios_query_should_not_fail(db):\n    mac = \"ca:fe:ba:be:f0:01\"\n    Arp(ip=\"10.0.0.42\", mac=mac, start_time=datetime.now(), end_time=INFINITY).save()\n    result = Arp.objects.filter(mac=mac, end_time=INFINITY).extra(\n        select={\"netbiosname\": get_netbios_query()}\n    )\n    assert len(result) == 1\n\n\nclass TestRenderSearchHelpModal:\n    def test_given_valid_tab_names_then_return_200_for_all(self, client):\n        for tab_name in VALID_HELP_TAB_NAMES:\n            url = reverse('machinetracker-search-help-modal', args=[tab_name])\n            response = client.get(url)\n            assert response.status_code == 200\n\n    def test_given_valid_tab_names_then_return_correct_modal_id_for_all(self, client):\n        for tab_name in VALID_HELP_TAB_NAMES:\n            url = reverse('machinetracker-search-help-modal', args=[tab_name])\n            response = client.get(url)\n            assert f'id=\"{tab_name}-search-help\"' in smart_str(response.content)\n\n    def test_given_invalid_tab_name_then_return_400(self, client):\n        url = reverse('machinetracker-search-help-modal', args=['invalid-tab-name'])\n        response = client.get(url)\n        assert response.status_code == 400\n"
  },
  {
    "path": "tests/integration/web/maintenance/__init__.py",
    "content": ""
  },
  {
    "path": "tests/integration/web/maintenance/utils_test.py",
    "content": "from nav.models.manage import Netbox, Room\nfrom nav.web.maintenance.utils import prefetch_and_group_components\n\n\nclass TestPrefetchAndGroupComponents:\n    def test_should_return_list_of_tuples(self):\n        netbox_query = Netbox.objects.all()\n        results = prefetch_and_group_components(Netbox, netbox_query, Room)\n        assert results and all(isinstance(item, tuple) for item in results), (\n            \"Results should be tuples.\"\n        )\n\n    def test_should_group_by_room(self):\n        netbox = Netbox.objects.first()\n        netbox_query = Netbox.objects.filter(id=netbox.id)\n        results = prefetch_and_group_components(Netbox, netbox_query, Room)\n        room_name, netbox_list = results[0]\n        assert room_name == str(netbox.room) and netbox.id == netbox_list[0].id, (\n            \"Room name and Netbox ID do not match expected values.\"\n        )\n\n    def test_when_group_by_is_none_it_should_return_flat_list(self):\n        netbox_query = Netbox.objects.all()\n        results = prefetch_and_group_components(Netbox, netbox_query, None)\n        assert all(isinstance(item, Netbox) for item in results), (\n            \"Results should be Netbox instances.\"\n        )\n"
  },
  {
    "path": "tests/integration/web/maintenance/views_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport datetime\n\nimport pytest\nfrom django.urls import reverse\n\nfrom django.utils.encoding import smart_str\nfrom nav.models.manage import Netbox, Room, Location\nfrom nav.models.msgmaint import MaintenanceTask\n\n\nclass TestMaintenanceCalendarView:\n    def test_calendar_renders_when_no_arguments_given(self, client):\n        response = client.get('/maintenance/', follow=True)\n        assert response.status_code == 200\n\n    def test_calendar_still_renders_when_invalid_arguments_given(self, client):\n        response = client.get('/maintenance/?year=invalid&month=invalid', follow=True)\n        assert response.status_code == 200\n\n\nclass TestAddMaintenanceTask:\n    def test_valid_data_without_end_time_should_suceed(self, db, client, localhost):\n        url = reverse('maintenance-new')\n        data = {\n            \"start_time\": \"2023-11-21 12:40\",\n            \"no_end_time\": \"on\",\n            \"description\": \"maintenance\",\n            \"netbox\": localhost.pk,\n            \"save\": \"Save+task\",\n        }\n\n        response = client.post(\n            url,\n            follow=True,\n            data=data,\n        )\n\n        assert response.status_code == 200\n        assert f'Saved task {data[\"description\"]}' in smart_str(response.content)\n        assert MaintenanceTask.objects.filter(description=data[\"description\"]).exists()\n\n    def test_valid_data_with_end_time_should_suceed(self, db, client, localhost):\n        url = reverse('maintenance-new')\n        data = {\n            \"start_time\": \"2023-11-21 12:40\",\n            \"end_time\": \"2023-11-25 12:40\",\n            \"description\": \"maintenance\",\n            \"netbox\": localhost.pk,\n            \"save\": \"Save+task\",\n        }\n\n        response = client.post(\n            url,\n            follow=True,\n            data=data,\n        )\n\n        assert response.status_code == 200\n        assert f'Saved task {data[\"description\"]}' in smart_str(response.content)\n        assert MaintenanceTask.objects.filter(description=data[\"description\"]).exists()\n\n    def test_with_non_int_netbox_key_should_fail(self, db, client):\n        url = reverse('maintenance-new')\n        data = {\n            \"start_time\": \"2023-11-21 12:40\",\n            \"no_end_time\": \"on\",\n            \"description\": \"maintenance\",\n            \"netbox\": \"137'\",\n            \"save\": \"Save+task\",\n        }\n\n        response = client.post(\n            url,\n            follow=True,\n            data=data,\n        )\n\n        assert response.status_code == 200\n        assert \"netbox: argument needs to be a number\" in smart_str(response.content)\n        assert not MaintenanceTask.objects.filter(\n            description=data[\"description\"]\n        ).exists()\n\n    def test_with_non_int_netbox_key_in_url_should_fail(self, db, client):\n        url = reverse('maintenance-new') + '?netbox=foobar'\n\n        response = client.get(url, follow=True)\n\n        assert response.status_code == 200\n        assert \"netbox: argument needs to be a number\" in smart_str(response.content)\n\n    def test_with_non_existent_netbox_key_in_url_should_fail(self, db, client):\n        last_netbox_id = getattr(Netbox.objects.last(), \"pk\", 0)\n        url = (\n            reverse('maintenance-new')\n            + f'?netbox={last_netbox_id + 1}&netbox={last_netbox_id + 2}'\n        )\n\n        response = client.get(url, follow=True)\n\n        assert response.status_code == 200\n        assert \"netbox: no elements with the given identifiers found\" in smart_str(\n            response.content\n        )\n\n    def test_with_end_time_before_start_time_should_fail(self, db, client, localhost):\n        url = reverse('maintenance-new')\n        data = {\n            \"start_time\": \"2023-11-22 14:35\",\n            \"end_time\": \"2023-11-08 14:35\",\n            \"description\": \"maintenance\",\n            \"netbox\": localhost.pk,\n            \"save\": \"Save+task\",\n        }\n\n        response = client.post(\n            url,\n            follow=True,\n            data=data,\n        )\n\n        assert response.status_code == 200\n        assert \"End time must be after start time\" in smart_str(response.content)\n        assert not MaintenanceTask.objects.filter(\n            description=data[\"description\"]\n        ).exists()\n\n\nclass TestEditMaintenanceTask:\n    def test_when_existing_task_is_requested_it_should_render_with_intact_description(\n        self, db, client, localhost, empty_maintenance_task\n    ):\n        url = reverse(\"maintenance-edit\", kwargs={\"task_id\": empty_maintenance_task.id})\n        response = client.get(url, follow=True)\n\n        assert response.status_code == 200\n        assert empty_maintenance_task.description in smart_str(response.content)\n\n\nclass TestSearchMaintenanceComponents:\n    def test_given_an_existing_room_then_component_search_should_return_results(\n        self, db, client, new_room\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': new_room.id})\n        assert response.status_code == 200\n        assert new_room.id in smart_str(response.content)\n\n    def test_given_a_non_existing_component_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': 'nonexistent-component'})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n    def test_given_an_empty_query_then_component_search_should_return_no_hits(\n        self, client\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': ''})\n        assert response.status_code == 200\n        assert \"No hits\" in smart_str(response.content)\n\n    def test_when_searching_by_room_description_then_it_should_return_matching_rooms(\n        self, db, client, new_room\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': 'Test Room'})\n        assert response.status_code == 200\n        assert new_room.id in smart_str(response.content)\n\n    def test_when_searching_by_room_alias_then_it_should_return_matching_rooms(\n        self, db, client, new_room\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': new_room.aliases[0]})\n        assert response.status_code == 200\n        assert new_room.id in smart_str(response.content)\n\n    def test_when_searching_by_location_description_then_it_should_return_results(\n        self, db, client, location_with_description\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': 'Building'})\n        assert response.status_code == 200\n        assert location_with_description.id in smart_str(response.content)\n\n    def test_when_searching_by_location_alias_then_it_should_return_results(\n        self, db, client, location_with_description\n    ):\n        url = reverse('maintenance-component-search')\n        response = client.post(url, {'search': location_with_description.aliases[0]})\n        assert response.status_code == 200\n        assert location_with_description.id in smart_str(response.content)\n\n\nclass TestBrowseMaintenanceComponents:\n    def test_when_component_browse_is_called_with_post_then_it_should_fail(\n        self, db, client\n    ):\n        url = reverse('maintenance-component-browse')\n        response = client.post(url, {})\n        assert response.status_code == 405\n\n    def test_when_no_locations_exist_then_component_browse_should_show_empty_message(\n        self, db, client\n    ):\n        Location.objects.all().delete()\n        url = reverse('maintenance-component-browse')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'No locations found' in smart_str(response.content)\n\n    def test_when_locations_exist_then_component_browse_should_include_them(\n        self, db, client, location_with_description\n    ):\n        url = reverse('maintenance-component-browse')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert location_with_description.id in smart_str(response.content)\n\n    def test_when_nested_locations_exist_then_component_browse_should_show_hierarchy(\n        self, db, client, nested_locations\n    ):\n        parent_location, child_location = nested_locations\n        url = reverse('maintenance-component-browse')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert parent_location.id in smart_str(response.content)\n        assert child_location.id in smart_str(response.content)\n\n    def test_when_rooms_exist_then_component_browse_should_group_them_under_location(\n        self, db, client, location_with_rooms\n    ):\n        location, rooms = location_with_rooms\n        url = reverse('maintenance-component-browse')\n        response = client.get(url)\n        content = smart_str(response.content)\n        assert response.status_code == 200\n        assert location.id in content\n        for room in rooms:\n            assert room.id in content\n\n\nclass TestSelectMaintenanceComponents:\n    def test_given_an_existing_room_then_component_select_should_return_results(\n        self, db, client, new_room\n    ):\n        url = reverse('maintenance-component-select')\n        response = client.post(\n            url,\n            {\n                'room': new_room.id,\n            },\n        )\n        assert response.status_code == 200\n        assert f\"name=\\\"room\\\" value=\\\"{new_room.id}\\\"\" in smart_str(response.content)\n\n    def test_when_adding_room_via_add_room_then_it_should_merge_with_existing_rooms(\n        self, db, client, location_with_rooms\n    ):\n        location, rooms = location_with_rooms\n        room1, room2 = rooms\n        url = reverse('maintenance-component-select')\n        response = client.post(\n            url,\n            {\n                'room': room1.id,\n                'add_room': room2.id,\n            },\n        )\n        assert response.status_code == 200\n        content = smart_str(response.content)\n        assert f\"name=\\\"room\\\" value=\\\"{room1.id}\\\"\" in content\n        assert f\"name=\\\"room\\\" value=\\\"{room2.id}\\\"\" in content\n\n    def test_when_adding_location_via_add_loc_then_it_should_merge_with_existing(\n        self, db, client, nested_locations\n    ):\n        parent, child = nested_locations\n        url = reverse('maintenance-component-select')\n        response = client.post(\n            url,\n            {\n                'location': parent.id,\n                'add_loc': child.id,\n            },\n        )\n        assert response.status_code == 200\n        content = smart_str(response.content)\n        assert f\"name=\\\"location\\\" value=\\\"{parent.id}\\\"\" in content\n        assert f\"name=\\\"location\\\" value=\\\"{child.id}\\\"\" in content\n\n    def test_should_remove_given_room_from_response(self, db, client, new_room):\n        url = reverse('maintenance-component-select')\n        response = client.post(\n            url,\n            {\n                'room': new_room.id,\n                'remove_room': new_room.id,\n                'remove': [''],\n            },\n        )\n        assert response.status_code == 200\n        assert f\"name=\\\"room\\\" value=\\\"{new_room.id}\\\"\" not in smart_str(\n            response.content\n        )\n\n    def test_when_given_all_components_to_remove_then_it_should_return_none(\n        self, db, client, new_room\n    ):\n        url = reverse('maintenance-component-select')\n        room = new_room\n        location_id = room.location.id\n        response = client.post(\n            url,\n            {\n                'room': room.id,\n                'remove_room': room.id,\n                'location': location_id,\n                'remove_location': location_id,\n                'remove': [''],\n            },\n        )\n        assert response.status_code == 200\n        assert \"(none)\" in smart_str(response.content)\n\n\n@pytest.fixture\ndef empty_maintenance_task(db):\n    now = datetime.datetime.now()\n    task = MaintenanceTask(\n        start_time=now,\n        end_time=now + datetime.timedelta(hours=1),\n        description=\"Temporary test fixture task\",\n    )\n    task.save()\n    yield task\n    task.delete()\n\n\n@pytest.fixture\ndef new_room(db):\n    location = Location(id=\"testlocation\")\n    location.save()\n    room = Room(\n        id=\"123\", description=\"Test Room\", location=location, aliases=[\"roomalias\"]\n    )\n    room.save()\n    yield room\n    room.delete()\n    location.delete()\n\n\n@pytest.fixture\ndef location_with_description(db):\n    location = Location(\n        id=\"testloc\", description=\"Building A\", aliases=[\"locationalias\"]\n    )\n    location.save()\n    yield location\n    location.delete()\n\n\n@pytest.fixture\ndef nested_locations(db):\n    parent = Location(id=\"parentloc\", description=\"Parent Location\")\n    parent.save()\n    child = Location(id=\"childloc\", description=\"Child Location\", parent=parent)\n    child.save()\n    yield parent, child\n    child.delete()\n    parent.delete()\n\n\n@pytest.fixture\ndef location_with_rooms(db):\n    location = Location(id=\"testloc2\", description=\"Location with Rooms\")\n    location.save()\n    room1 = Room(id=\"testroom1\", description=\"Room 1\", location=location)\n    room1.save()\n    room2 = Room(id=\"testroom2\", description=\"Room 2\", location=location)\n    room2.save()\n    yield location, [room1, room2]\n    room1.delete()\n    room2.delete()\n    location.delete()\n"
  },
  {
    "path": "tests/integration/web/messages_test.py",
    "content": "\"\"\"Integration tests for the messages form\"\"\"\n\nfrom datetime import datetime, timedelta\n\nimport pytest\n\nfrom nav.models.msgmaint import (\n    MaintenanceTask,\n    Message,\n    MessageToMaintenanceTask,\n)\nfrom nav.web.messages.forms import MessageForm\n\n\nclass TestMessageForm:\n    def test_when_instance_is_unsaved_then_it_should_not_raise(self, db):\n        form = MessageForm(instance=Message())\n        assert form.initial['maintenance_tasks'] == []\n\n    def test_when_instance_is_saved_then_it_should_fetch_maintenance_tasks(\n        self, message, maintenance_task\n    ):\n        MessageToMaintenanceTask(\n            message=message, maintenance_task=maintenance_task\n        ).save()\n\n        form = MessageForm(instance=message)\n        assert form.initial['maintenance_tasks'] == [maintenance_task.pk]\n\n\n@pytest.fixture\ndef message(db):\n    message = Message(\n        title=\"Test message\",\n        description=\"A test message\",\n        publish_start=datetime.now(),\n        publish_end=datetime.now() + timedelta(days=7),\n        author=\"testuser\",\n        last_changed=datetime.now(),\n    )\n    message.save()\n    return message\n\n\n@pytest.fixture\ndef maintenance_task(db):\n    task = MaintenanceTask(\n        start_time=datetime.now(),\n        end_time=datetime.now() + timedelta(hours=1),\n        description=\"Test task\",\n        author=\"testuser\",\n        state=MaintenanceTask.STATE_SCHEDULED,\n    )\n    task.save()\n    return task\n"
  },
  {
    "path": "tests/integration/web/navlets_test.py",
    "content": "from unittest.mock import Mock, patch\n\nimport pytest\nfrom django import forms\nfrom django.test.client import RequestFactory\nfrom django.urls import reverse\n\nfrom nav.models.profiles import Account, AccountDashboard, AccountNavlet\nfrom nav.web.navlets import Navlet, add_navlet, get_navlet_from_name, modify_navlet\n\n\nclass TestAddUserNavletView:\n    def test_when_using_get_method_then_it_should_return_405(self, client, dashboard):\n        response = client.get(_get_dashboard_url(dashboard))\n        assert response.status_code == 405\n\n    def test_given_payload_without_navlet_then_return_400(self, client, dashboard):\n        response = client.post(_get_dashboard_url(dashboard), data={})\n        assert response.status_code == 400\n\n    def test_given_payload_with_navlet_then_return_200(\n        self, client, admin_account, dashboard\n    ):\n        payload = {'navlet': 'nav.web.navlets.alert.AlertWidget'}\n        response = client.post(_get_dashboard_url(dashboard), data=payload)\n        assert response.status_code == 200\n\n    def test_given_payload_with_navlet_for_different_account_then_return_404(\n        self, client, other_account_dashboard\n    ):\n        payload = {'navlet': 'nav.web.navlets.alert.AlertWidget'}\n        response = client.post(\n            _get_dashboard_url(other_account_dashboard), data=payload\n        )\n        assert response.status_code == 404\n\n\nclass TestAddNavletModalView:\n    \"\"\"Integrations tests for showing the add navlet modal.\"\"\"\n\n    def test_should_render_add_navlet_modal(self, client, dashboard):\n        response = client.get(reverse('add-navlet-modal', args=[dashboard.id]))\n        assert response.status_code == 200\n        assert 'id=\"navlet-list\"' in str(response.content)\n\n\nclass TestAddNavletView:\n    \"\"\"Integration tests for the creation of a new navlet.\"\"\"\n\n    def test_add_navlet_with_no_preferences(self, admin_account, dashboard):\n        navlet_class = 'nav.web.navlets.alert.AlertWidget'\n        navlet_obj = add_navlet(admin_account, navlet_class, dashboard=dashboard)\n        assert navlet_obj.preferences == {} or isinstance(navlet_obj.preferences, dict)\n\n\nclass TestModifyNavlet:\n    @patch('nav.web.navlets.can_modify_navlet', return_value=False)\n    def test_when_account_is_not_permitted_to_modify_then_return_403(\n        self, client, admin_account, dashboard\n    ):\n        def dummy_func(navlet, _request):\n            return navlet\n\n        request = RequestFactory().post('/fake-url')\n        response = modify_navlet(\n            dummy_func, admin_account, request, \"Something went wrong\"\n        )\n        assert response.status_code == 403\n\n\nclass TestRemoveUserNavletModalView:\n    \"\"\"Integration tests for showing the remove navlet modal.\"\"\"\n\n    def test_should_render_remove_navlet_modal(self, client, new_navlet):\n        response = client.get(reverse('remove-user-navlet-modal', args=[new_navlet.pk]))\n        assert response.status_code == 200\n        assert f'name=\"navletid\" value=\"{new_navlet.id}\"' in str(response.content)\n\n\nclass TestRemoveUserNavletView:\n    \"\"\"Integration tests for removing a user navlet.\"\"\"\n\n    def test_when_navletid_not_in_payload_then_return_400(self, client):\n        response = client.post(reverse('remove-user-navlet'), data={})\n        assert response.status_code == 400\n\n    def test_given_existing_navlet_then_remove_it(self, client, new_navlet):\n        payload = {'navletid': new_navlet.pk}\n        response = client.post(reverse('remove-user-navlet'), data=payload)\n        assert response.status_code == 200\n\n    def test_given_existing_navlet_and_insufficient_permissions_then_return_error(\n        self, client, new_navlet\n    ):\n        with patch('nav.web.navlets.can_modify_navlet', return_value=False):\n            response = client.post(\n                reverse('remove-user-navlet'), data={'navletid': new_navlet.pk}\n            )\n        assert b\"You are not permitted to remove this widget\" in response.content\n\n    def test_given_non_existing_navlet_then_return_error(self, client):\n        payload = {'navletid': 99999}\n        response = client.post(reverse('remove-user-navlet'), data=payload)\n        assert b\"This widget no longer exists\" in response.content\n\n\nclass TestNavletPost:\n    \"\"\"Tests for the Navlet.post method.\"\"\"\n\n    def test_when_no_form_supplied_it_should_return_400(self, admin_account, dashboard):\n        request = RequestFactory().post('/fake-url')\n        navlet = Navlet()\n        navlet.request = request\n        navlet.account_navlet = AccountNavlet(\n            account=admin_account,\n            dashboard=dashboard,\n            navlet='nav.web.navlets.alert.AlertWidget',\n            preferences={},\n        )\n\n        response = navlet.post(request)\n        assert response.status_code == 400\n        assert b'No form supplied' in response.content\n\n    def test_given_valid_form_it_should_save_preferences(\n        self, admin_account, dashboard\n    ):\n        request = RequestFactory().post('/fake-url')\n        navlet = Navlet()\n        navlet.request = request\n        navlet.account_navlet = AccountNavlet(\n            account=admin_account,\n            dashboard=dashboard,\n            navlet='nav.web.navlets.alert.AlertWidget',\n            preferences={},\n        )\n\n        # Mock valid form\n        mock_form = Mock()\n        mock_form.is_valid.return_value = True\n        mock_form.cleaned_data = {'test_pref': 'test_value'}\n\n        with patch.object(navlet, 'get') as mock_get:\n            mock_get.return_value = Mock()\n            navlet.post(request, form=mock_form)\n\n        assert navlet.account_navlet.preferences['test_pref'] == 'test_value'\n\n    def test_given_invalid_form_it_should_call_handle_error_response(\n        self, admin_account, dashboard\n    ):\n        request = RequestFactory().post('/fake-url')\n        navlet = Navlet()\n        navlet.request = request\n        navlet.account_navlet = AccountNavlet(\n            account=admin_account,\n            dashboard=dashboard,\n            navlet='nav.web.navlets.alert.AlertWidget',\n            preferences={},\n        )\n\n        # Mock invalid form\n        mock_form = Mock()\n        mock_form.is_valid.return_value = False\n\n        with patch.object(navlet, 'handle_error_response') as mock_handle_error:\n            mock_handle_error.return_value = Mock()\n            navlet.post(request, form=mock_form)\n            mock_handle_error.assert_called_once()\n\n\nclass TestNavletHandleErrorResponse:\n    \"\"\"Tests for the Navlet.handle_error_response method.\"\"\"\n\n    def test_should_render_form_errors_in_context(self, admin_account, new_navlet):\n        # Create a simple form class for testing\n        class TestForm(forms.Form):\n            test_field = forms.CharField(required=True)\n\n        # Create an invalid form with errors, and trigger validation to populate errors\n        form = TestForm(data={})\n        form.is_valid()\n\n        request = RequestFactory().post('/fake-url')\n        # Set up the navlet instance\n        navlet_cls = get_navlet_from_name(new_navlet.navlet)\n        navlet = navlet_cls()\n        navlet.request = request\n        navlet.account_navlet = new_navlet\n        navlet.navlet_id = new_navlet.id\n\n        # Call handle_error_response\n        response = navlet.handle_error_response(request, form=form)\n\n        # Verify the response contains error information\n        assert response.status_code == 200\n        assert (\n            b'test_field' in response.content or b'required' in response.content.lower()\n        )\n\n\ndef _get_dashboard_url(dashboard: AccountDashboard):\n    return reverse('add-user-navlet', args=[dashboard.id])\n\n\n@pytest.fixture\ndef dashboard(db, admin_account):\n    dashboard = AccountDashboard(account=admin_account, name='Test Dashboard')\n    dashboard.save()\n    yield dashboard\n    dashboard.delete()\n\n\n@pytest.fixture\ndef other_account_dashboard(db):\n    account = Account(\n        login='other_user',\n        name='Other User',\n        password='apasswordthatislongenough123',\n    )\n    account.save()\n    dashboard = AccountDashboard(account=account, name='Other Dashboard')\n    dashboard.save()\n    yield dashboard\n    account.delete()\n\n\n@pytest.fixture\ndef new_navlet(db, admin_account, dashboard):\n    navlet = AccountNavlet(\n        account=admin_account,\n        dashboard=dashboard,\n        navlet='nav.web.navlets.alert.AlertWidget',\n        preferences={},\n    )\n    navlet.save()\n    yield navlet\n    navlet.delete()\n"
  },
  {
    "path": "tests/integration/web/netboxtype_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom nav.models.manage import NetboxType\nfrom nav.web.seeddb.forms import SEPARATOR\n\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\n\ndef test_post_netboxtype_with_sysobjectid_without_leading_period_should_succeed(client):\n    vendor = \"hp\"\n    name = \"A5120-48P-EI\"\n    sysobjectid = \"1.3.6.1.4.1.25506.1.516\"\n    description = \"HP Procurve A5120\"\n    url = reverse('seeddb-type-edit')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"vendor\": vendor,\n            \"name\": name,\n            \"sysobjectid\": sysobjectid,\n            \"description\": description,\n            \"submit\": \"Save+netbox+type\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert f\"Saved netbox type {name} ({description} from {vendor})\" in smart_str(\n        response.content\n    )\n    assert NetboxType.objects.filter(sysobjectid=sysobjectid.strip(SEPARATOR)).exists()\n\n\ndef test_post_netboxtype_with_sysobjectid_with_leading_period_should_succeed(client):\n    vendor = \"hp\"\n    name = \"A5120-48P-EI-2\"\n    sysobjectid = \".1.3.6.1.4.1.25506.1.517\"\n    description = \"HP Procurve A5120 V2\"\n    url = reverse('seeddb-type-edit')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"vendor\": vendor,\n            \"name\": name,\n            \"sysobjectid\": sysobjectid,\n            \"description\": description,\n            \"submit\": \"Save+netbox+type\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert f\"Saved netbox type {name} ({description} from {vendor})\" in smart_str(\n        response.content\n    )\n    assert NetboxType.objects.filter(sysobjectid=sysobjectid.strip(SEPARATOR)).exists()\n\n\ndef test_post_netboxtype_with_sysobjectid_being_invalid_should_fail(client):\n    vendor = \"hp\"\n    name = \"A5120-48P-EI-3\"\n    sysobjectid = \"not just periods and numbers\"\n    description = \"HP Procurve A5120 V3\"\n    url = reverse('seeddb-type-edit')\n\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"vendor\": vendor,\n            \"name\": name,\n            \"sysobjectid\": sysobjectid,\n            \"description\": description,\n            \"submit\": \"Save+netbox+type\",\n        },\n    )\n\n    assert response.status_code == 200\n    assert \"Sysobjectid can only contain digits and periods.\" in smart_str(\n        response.content\n    )\n    assert not NetboxType.objects.filter(sysobjectid=sysobjectid).exists()\n"
  },
  {
    "path": "tests/integration/web/netmap_test.py",
    "content": "import pytest\nfrom django.urls import reverse\n\n\n@pytest.mark.parametrize(\"layer\", [2, 3])\ndef test_netmap_layer_graph_should_load(layer, client):\n    url = reverse('netmap-graph', kwargs={'layer': layer})\n    response = client.get(url)\n    assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/web/portadmin_test.py",
    "content": "import uuid\n\nimport pytest\nfrom django.http import HttpResponse\nfrom django.test.client import RequestFactory\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom jnpr.junos.exception import ConnectRefusedError\nfrom mock import patch, Mock\n\nfrom nav.models.manage import Interface, Netbox, NetboxProfile\nfrom nav.portadmin.handlers import ManagementHandler\nfrom nav.web.portadmin.views import populate_infodict, load_portadmin_data_by_kwargs\n\n\nclass TestPortadminSearchViews:\n    \"\"\"Combined tests for all search view types\"\"\"\n\n    @pytest.mark.parametrize(\n        \"url_name,fixture_name,attr_name,expected_status\",\n        [\n            (\"portadmin-interface\", \"interface\", \"id\", 200),\n            (\"portadmin-sysname\", \"valid_netbox\", \"sysname\", 200),\n            (\"portadmin-ip\", \"valid_netbox\", \"ip\", 200),\n        ],\n    )\n    def test_when_resource_exists_it_should_return_200(\n        self, client, request, url_name, fixture_name, attr_name, expected_status\n    ):\n        fixture = request.getfixturevalue(fixture_name)\n        value = getattr(fixture, attr_name)\n\n        url = reverse(url_name, args=[value])\n        response = client.get(url)\n        assert response.status_code == expected_status\n\n    @pytest.mark.parametrize(\n        \"url_name,arg,expected_error\",\n        [\n            (\"portadmin-interface\", 9999, \"Could not find interface\"),\n            (\"portadmin-sysname\", \"nonexistent\", \"Could not find IP device\"),\n            (\"portadmin-ip\", \"123.5.6.12\", \"Could not find IP device\"),\n        ],\n    )\n    def test_when_resource_does_not_exist_it_should_return_error(\n        self, client, url_name, arg, expected_error\n    ):\n        url = reverse(url_name, args=[arg])\n        response = client.get(url)\n        assert expected_error in smart_str(response.content)\n\n    @pytest.mark.parametrize(\n        \"url_name,fixture_name,attr_name\",\n        [\n            (\"portadmin-interface\", \"interface\", \"id\"),\n            (\"portadmin-sysname\", \"valid_netbox\", \"sysname\"),\n            (\"portadmin-ip\", \"valid_netbox\", \"ip\"),\n        ],\n    )\n    def test_when_resource_exists_it_should_return_correct_data_url(\n        self, client, request, url_name, fixture_name, attr_name\n    ):\n        fixture = request.getfixturevalue(fixture_name)\n        value = getattr(fixture, attr_name)\n\n        url = reverse(url_name, args=[value])\n        response = client.get(url)\n        expected_url = reverse(url_name + '-data', args=[value])\n\n        assert response.status_code == 200\n        assert f'hx-get=\"{expected_url}\"' in smart_str(response.content)\n\n    @pytest.mark.parametrize(\n        \"url_name,fixture_name,attr_name,expected_error\",\n        [\n            (\n                \"portadmin-sysname\",\n                \"netbox_without_type\",\n                \"sysname\",\n                \"IP device found but has no type\",\n            ),\n            (\n                \"portadmin-ip\",\n                \"netbox_without_type\",\n                \"ip\",\n                \"IP device found but has no type\",\n            ),\n            (\n                \"portadmin-sysname\",\n                \"netbox_without_ports\",\n                \"sysname\",\n                \"IP device has no ports\",\n            ),\n            (\n                \"portadmin-ip\",\n                \"netbox_without_ports\",\n                \"ip\",\n                \"IP device has no ports\",\n            ),\n        ],\n    )\n    def test_when_netbox_preconditions_are_not_met_then_response_should_contain_expected_error_message(  # noqa: E501\n        self, client, request, url_name, fixture_name, attr_name, expected_error\n    ):\n        fixture = request.getfixturevalue(fixture_name)\n        value = getattr(fixture, attr_name)\n\n        url = reverse(url_name, args=[value])\n        response = client.get(url)\n        assert expected_error in smart_str(response.content)\n\n\nclass TestPortadminDataLoading:\n    \"\"\"Tests for load_portadmin_data_by_kwargs and populate_infodict functions\"\"\"\n\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    @patch('nav.web.portadmin.views.render')\n    def test_load_portadmin_data_by_kwargs_should_load_data_for_valid_interface_id(\n        self, mock_render, mock_get_livedata, mock_request, interface, mock_handler\n    ):\n        \"\"\"Test loading data by interface ID\"\"\"\n        mock_get_livedata.return_value = mock_handler\n        mock_render.return_value = HttpResponse('rendered')\n\n        load_portadmin_data_by_kwargs(mock_request, interfaceid=interface.id)\n\n        mock_get_livedata.assert_called_once_with(interface.netbox, [interface])\n        mock_render.assert_called_once()\n        assert mock_render.call_args[0][0] == mock_request\n        assert mock_render.call_args[0][1] == 'portadmin/portlist.html'\n\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    @patch('nav.web.portadmin.views.render')\n    def test_load_portadmin_data_by_kwargs_should_load_data_for_valid_sysname(\n        self,\n        mock_render,\n        mock_get_livedata,\n        mock_request,\n        valid_netbox,\n        mock_handler,\n    ):\n        \"\"\"Test loading data by sysname\"\"\"\n        mock_get_livedata.return_value = mock_handler\n        mock_render.return_value = HttpResponse('rendered')\n\n        load_portadmin_data_by_kwargs(mock_request, sysname=valid_netbox.sysname)\n\n        interfaces = valid_netbox.get_swports_sorted()\n        mock_get_livedata.assert_called_once_with(valid_netbox, interfaces)\n\n    def test_load_portadmin_data_by_kwargs_should_return_error_when_interface_not_found(\n        self, mock_request\n    ):\n        \"\"\"Test handling of non-existent interface\"\"\"\n        response = load_portadmin_data_by_kwargs(mock_request, interfaceid=9999)\n\n        assert isinstance(response, HttpResponse)\n        assert b'Interface not found' in response.content\n\n    def test_load_portadmin_data_by_kwargs_should_return_error_when_netbox_not_found(\n        self, mock_request\n    ):\n        \"\"\"Test handling of non-existent netbox\"\"\"\n        response = load_portadmin_data_by_kwargs(mock_request, sysname='nonexistent')\n\n        assert isinstance(response, HttpResponse)\n        assert b'IP device not found' in response.content\n\n    def test_load_portadmin_data_by_kwargs_should_return_error_when_no_interfaces_exist(\n        self, mock_request, valid_netbox\n    ):\n        \"\"\"Test handling of netbox with no interfaces\"\"\"\n        valid_netbox.interfaces.all().delete()\n\n        response = load_portadmin_data_by_kwargs(\n            mock_request, sysname=valid_netbox.sysname\n        )\n\n        assert isinstance(response, HttpResponse)\n        assert b'No interfaces found' in response.content\n\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    def test_populate_infodict_should_set_readonly_mode_when_handler_not_configurable(\n        self, mock_get_livedata, mock_request, interface, mock_handler\n    ):\n        \"\"\"Test populate_infodict in readonly mode\"\"\"\n        mock_handler.is_configurable.return_value = False\n        mock_get_livedata.return_value = mock_handler\n\n        netbox = interface.netbox\n        interfaces = [interface]\n        result = populate_infodict(mock_request, netbox, interfaces)\n\n        mock_get_livedata.assert_called_once_with(netbox, interfaces)\n        assert result['readonly'] is True\n        assert result['netbox'] == netbox\n        assert result['interfaces'] == interfaces\n        assert result['handlertype'] == 'MockHandler'\n\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    @patch('nav.web.portadmin.views.find_and_populate_allowed_vlans')\n    @patch('nav.web.portadmin.views._setup_voice_vlan')\n    @patch('nav.web.portadmin.views._setup_poe_if_supported')\n    @patch('nav.web.portadmin.views._setup_dot1x_if_enabled')\n    @patch('nav.web.portadmin.views.mark_detained_interfaces')\n    def test_populate_infodict_should_configure_all_features_when_handler_is_configurable(  # noqa: E501\n        self,\n        mock_mark_detained,\n        mock_setup_dot1x,\n        mock_setup_poe,\n        mock_setup_voice,\n        mock_find_vlans,\n        mock_get_livedata,\n        mock_request,\n        interface,\n        mock_handler,\n    ):\n        \"\"\"Test populate_infodict in configurable mode\"\"\"\n        mock_handler.is_configurable.return_value = True\n        mock_get_livedata.return_value = mock_handler\n        mock_find_vlans.return_value = []\n        mock_setup_voice.return_value = None\n        mock_setup_poe.return_value = (True, ['auto', 'on', 'off'])\n\n        netbox = interface.netbox\n        interfaces = [interface]\n        result = populate_infodict(mock_request, netbox, interfaces)\n\n        mock_find_vlans.assert_called_once_with(\n            mock_request.account, netbox, interfaces, mock_handler\n        )\n        mock_setup_voice.assert_called_once_with(\n            mock_request, netbox, interfaces, mock_handler\n        )\n        mock_mark_detained.assert_called_once_with(interfaces)\n        mock_setup_dot1x.assert_called_once_with(interfaces, mock_handler)\n        mock_setup_poe.assert_called_once_with(interfaces, mock_handler)\n\n        assert result['readonly'] is False\n        assert result['supports_poe'] is True\n        assert result['poe_options'] == ['auto', 'on', 'off']\n\n    @patch('nav.web.portadmin.views.messages')\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    def test_populate_infodict_should_set_readonly_mode_when_handler_raises_exception(\n        self, mock_get_livedata, mock_messages, mock_request, interface\n    ):\n        \"\"\"Test populate_infodict when handler raises exception\"\"\"\n        from nav.portadmin.handlers import NoResponseError\n\n        mock_get_livedata.side_effect = NoResponseError(\"Device not responding\")\n\n        netbox = interface.netbox\n        interfaces = [interface]\n        result = populate_infodict(mock_request, netbox, interfaces)\n\n        # Should be readonly when handler fails\n        assert result['readonly'] is True\n        assert result['handlertype'] == 'NoneType'\n\n        # Verify error message was added\n        mock_messages.error.assert_called_once()\n\n    @pytest.mark.parametrize(\n        \"exception,expected_msg\",\n        [\n            (ConnectRefusedError(\"refused\"), \"Connection refused when contacting\"),\n            (Exception(\"generic error\"), \"Unknown error when contacting\"),\n        ],\n    )\n    @patch(\"nav.web.portadmin.views.get_and_populate_livedata\")\n    @patch(\"nav.web.portadmin.views.messages\")\n    def test_populate_infodict_should_handle_livedata_exceptions_and_add_error_message(\n        self,\n        mock_messages,\n        mock_get_livedata,\n        mock_request,\n        interface,\n        exception,\n        expected_msg,\n    ):\n        mock_get_livedata.side_effect = exception\n        netbox = interface.netbox\n        interfaces = [interface]\n        result = populate_infodict(mock_request, netbox, interfaces)\n\n        assert result[\"readonly\"] is True\n        assert expected_msg in mock_messages.error.call_args[0][1]\n\n    @patch('nav.web.portadmin.views.get_and_populate_livedata')\n    @patch('nav.web.portadmin.views.json')\n    def test_populate_infodict_should_format_auditlog_parameters_correctly(\n        self, mock_json, mock_get_livedata, mock_request, interface, mock_handler\n    ):\n        \"\"\"Test that auditlog parameters are correctly formatted\"\"\"\n        mock_handler.is_configurable.return_value = True\n        mock_get_livedata.return_value = mock_handler\n        mock_json.dumps.return_value = '{\"test\": \"json\"}'\n\n        interfaces = [interface]\n        result = populate_infodict(mock_request, interface.netbox, interfaces)\n\n        expected_params = {\n            'object_model': 'interface',\n            'object_pks': str(interface.pk),\n            'subsystem': 'portadmin',\n        }\n        mock_json.dumps.assert_called_once_with(expected_params)\n        assert result['auditlog_api_parameters'] == '{\"test\": \"json\"}'\n\n\n@pytest.fixture\ndef mock_request(admin_account):\n    factory = RequestFactory()\n    request = factory.get('/')\n    request.account = admin_account\n    return request\n\n\n@pytest.fixture\ndef mock_handler():\n    handler = Mock(spec=ManagementHandler)\n    handler.is_configurable.return_value = True\n    handler.__class__.__name__ = 'MockHandler'\n    # Mock the get_interfaces method to return interface data\n    handler.get_interfaces.return_value = [\n        {\n            'name': 'GigabitEthernet0/1',\n            'description': 'Test interface',\n            'vlan': 100,\n            'admin': 1,\n            'oper': 1,\n        }\n    ]\n    handler.get_netbox_vlans.return_value = []\n    handler.get_netbox_vlan_tags.return_value = []\n    handler.get_poe_state_options.return_value = []\n    handler.get_poe_states.return_value = {}\n    handler.is_port_access_control_enabled.return_value = False\n    return handler\n\n\n@pytest.fixture\ndef valid_netbox(db, management_profile, netbox_type):\n    box = create_netbox_with_profile(management_profile, type=netbox_type)\n    new_interface = create_interface(box)\n    yield box\n    new_interface.delete()\n    box.delete()\n\n\n@pytest.fixture\ndef interface(db, management_profile, netbox_type):\n    netbox = create_netbox_with_profile(management_profile, type=netbox_type)\n    interface = create_interface(netbox)\n    interface.save()\n    yield interface\n    interface.delete()\n    netbox.delete()\n\n\n@pytest.fixture\ndef netbox_without_type(db, management_profile):\n    box = create_netbox_with_profile(management_profile)\n    new_interface = create_interface(box)\n    yield box\n    new_interface.delete()\n    box.delete()\n\n\n@pytest.fixture\ndef netbox_without_ports(db, management_profile, netbox_type):\n    box = create_netbox_with_profile(management_profile, type=netbox_type)\n    yield box\n    box.delete()\n\n\ndef create_netbox_with_profile(management_profile, **kwargs):\n    # Generate unique IP to avoid constraint violations\n    unique_id = uuid.uuid4().int % 1000000\n    ip = f'192.168.{(unique_id // 1000) % 256}.{unique_id % 256}'\n\n    box = Netbox(\n        ip=ip,\n        sysname='test.example.org',\n        organization_id='myorg',\n        room_id='myroom',\n        category_id='SRV',\n        **kwargs,\n    )\n    box.save()\n    NetboxProfile(netbox=box, profile=management_profile).save()\n    return box\n\n\ndef create_interface(netbox, **kwargs):\n    interface = Interface(\n        netbox=netbox,\n        ifname='GigabitEthernet0/1',\n        ifalias='Test Interface',\n        ifindex=1,\n        iftype=6,\n        baseport=1,\n        **kwargs,\n    )\n    interface.save()\n    return interface\n"
  },
  {
    "path": "tests/integration/web/prefixviewset_test.py",
    "content": "import json\nimport pytest\n\nfrom nav.models.manage import Prefix, Vlan, NetType\nfrom django.utils.encoding import force_str\nfrom nav.web.api.v1.views import get_endpoints\n\nENDPOINTS = {name: force_str(url) for name, url in get_endpoints().items()}\nprefix_url = ENDPOINTS['prefix']\n\n\nclass TestContainsAddressFilter:\n    def test_prefix_is_returned_when_no_given_containing_address(self, client, prefix):\n        response = client.get(prefix_url, {\"contains_address\": \"\"})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n    def test_prefix_containing_given_address_is_returned(self, client, prefix):\n        response = client.get(prefix_url, {\"contains_address\": \"10.1.1.0/24\"})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n    def test_prefix_that_does_not_contain_given_address_is_not_returned(\n        self, client, prefix\n    ):\n        response = client.get(prefix_url, {\"contains_address\": \"20.4.111.0/24\"})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id not in prefix_ids\n\n    def test_error_is_returned_if_given_address_is_not_valid_cidr_address(\n        self, client, prefix\n    ):\n        response = client.get(prefix_url, {\"contains_address\": \"invalid_address\"})\n        assert response.status_code == 400\n\n    def test_prefix_identical_to_given_address_is_returned(self, client, prefix):\n        response = client.get(prefix_url, {\"contains_address\": prefix.net_address})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n\nclass TestVlanFilter:\n    def test_prefix_with_matching_vlan_id_is_returned(self, client, prefix):\n        response = client.get(prefix_url, {\"vlan\": prefix.vlan.id})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n\nclass TestIsNetAddressFilter:\n    def test_prefix_is_returned_when_no_given_address(self, client, prefix):\n        response = client.get(prefix_url, {\"net_address\": \"\"})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n    def test_prefix_with_given_address_is_returned(self, client, prefix):\n        response = client.get(prefix_url, {\"net_address\": prefix.net_address})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id in prefix_ids\n\n    def test_prefix_that_is_not_given_address_is_not_returned(self, client, prefix):\n        response = client.get(prefix_url, {\"net_address\": \"20.4.111.0/24\"})\n        assert response.status_code == 200\n        content = json.loads(response.content.decode('utf-8'))\n        prefix_ids = [prefix['id'] for prefix in content['results']]\n        assert prefix.id not in prefix_ids\n\n    def test_error_is_returned_if_given_address_is_not_valid_cidr_address(\n        self, client, prefix\n    ):\n        response = client.get(prefix_url, {\"net_address\": \"invalid_address\"})\n        assert response.status_code == 400\n\n\n###\n#\n# Fixtures\n#\n###\n\n\n@pytest.fixture()\ndef nettype(db):\n    nettype = NetType(description=\"test nettype\")\n    nettype.save()\n    yield nettype\n    if nettype.pk:\n        nettype.delete()\n\n\n@pytest.fixture()\ndef vlan(db, nettype):\n    vlan = Vlan(vlan=\"10\", net_type=nettype)\n    vlan.save()\n    yield vlan\n    if vlan.pk:\n        vlan.delete()\n\n\n@pytest.fixture()\ndef prefix(db, vlan):\n    prefix = Prefix(net_address='10.1.0.0/16', vlan=vlan)\n    prefix.save()\n    yield prefix\n    if prefix.pk:\n        prefix.delete()\n"
  },
  {
    "path": "tests/integration/web/radius_test.py",
    "content": "from datetime import datetime\nfrom urllib.parse import urlencode\n\nimport pytest\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom mock import MagicMock, patch\n\n\nclass TestAccountLogSearch:\n    def test_all_time_search_should_return_no_results_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-account_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'time_0': '',\n            'port_type': '',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No results' in smart_str(response.content)\n\n    def test_day_search_should_return_no_results_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-account_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'time_0': 'days',\n            'time_1': 3,\n            'port_type': '',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No results' in smart_str(response.content)\n\n    def test_day_search_should_not_crash_on_big_days(db, client, admin_username):\n        url = reverse('radius-account_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'time_0': 'days',\n            'time_1': 123123123123123,\n            'port_type': '',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'They did not have computers' in smart_str(response.content)\n\n    def test_timespan_search_should_return_no_results_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-account_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'time_0': 'timestamp',\n            'time_1': '2025-09-05 09:06|1440',\n            'port_type': '',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No results' in smart_str(response.content)\n\n\nclass TestErrorLogSearch:\n    def test_all_time_search_should_return_no_result_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-log_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'log_entry_type': '',\n            'time_0': '',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No result' in smart_str(response.content)\n\n    def test_hour_search_should_return_no_result_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-log_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'log_entry_type': '',\n            'time_0': 'hours',\n            'time_1': 3,\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No result' in smart_str(response.content)\n\n    def test_hour_search_should_not_crash_on_big_hours(db, client, admin_username):\n        url = reverse('radius-log_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'log_entry_type': '',\n            'time_0': 'hours',\n            'time_1': 123123123123123,\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'They did not have computers' in smart_str(response.content)\n\n    def test_timespan_search_should_return_no_result_for_no_entries(\n        db, client, admin_username\n    ):\n        url = reverse('radius-log_search')\n        params = {\n            'query_0': 'username',\n            'query_1': admin_username,\n            'log_entry_type': '',\n            'time_0': 'timestamp',\n            'time_1': '2025-09-05 09:06|1440',\n            'send': 'Search',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'No result' in smart_str(response.content)\n\n\nclass TestTopTalkers:\n    def test_day_search_should_return_tables_with_top_talkers(db, client):\n        url = reverse('radius-account_charts')\n        params = {\n            'days': 7,\n            'charts': 'sentrecv',\n            'send': 'Show me',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'Bandwidth Hogs (Upload+Downloads)' in smart_str(response.content)\n\n    def test_day_search_should_not_crash_on_big_days(db, client):\n        url = reverse('radius-account_charts')\n        params = {\n            'days': 123123123123,\n            'charts': 'sentrecv',\n            'send': 'Show me',\n        }\n        url = url + '?' + urlencode(params)\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'They did not have computers' in smart_str(response.content)\n\n\nclass TestRadiusSearchHintModalViews:\n    def test_should_render_account_log_hints_modal(self, db, client):\n        url = reverse('radius-account-log-hints')\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'id=\"account-log-hints\"' in smart_str(response.content)\n\n    def test_should_render_error_log_hints_modal(self, db, client):\n        url = reverse('radius-error-log-hints')\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'id=\"error-log-hints\"' in smart_str(response.content)\n\n    def test_should_render_account_chart_hints_modal(self, db, client):\n        url = reverse('radius-account-chart-hints')\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'id=\"account-chart-hints\"' in smart_str(response.content)\n\n\nclass TestRadiusAccountDetailViews:\n    @patch('nav.web.radius.views.AcctDetailQuery')\n    def test_should_render_account_detail_page(\n        self, mock_query_class, db, client, mock_account_detail_query\n    ):\n        mock_query_class.return_value = mock_account_detail_query()\n\n        url = reverse('radius-account_detail', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'Account Detail' in smart_str(response.content)\n        assert 'navpath' in response.context\n\n    @patch('nav.web.radius.views.AcctDetailQuery')\n    def test_should_render_account_detail_modal(\n        self, mock_query_class, db, client, mock_account_detail_query\n    ):\n        mock_query_class.return_value = mock_account_detail_query()\n\n        url = reverse('radius-account_detail-modal', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'id=\"account-detail\"' in smart_str(response.content)\n        assert (\n            'navpath' not in response.context or response.context.get('navpath') is None\n        )\n\n    @patch('nav.web.radius.views.AcctDetailQuery')\n    def test_account_detail_handles_empty_result(self, mock_query_class, db, client):\n        # Override for empty result test\n        mock_query = MagicMock()\n        mock_query.result = []\n        mock_query_class.return_value = mock_query\n\n        url = reverse('radius-account_detail', args=[999])\n        response = client.get(url)\n\n        assert \"No details available\" in smart_str(response.content)\n\n    @patch('nav.web.radius.views.AcctDetailQuery')\n    def test_with_custom_username(\n        self, mock_query_class, db, client, mock_account_detail_query\n    ):\n        # Example of customizing the mock data\n        mock_query_class.return_value = mock_account_detail_query(\n            {'username': 'custom_user'}\n        )\n\n        url = reverse('radius-account_detail', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n\n\nclass TestRadiusLogDetailViews:\n    @patch('nav.web.radius.views.LogDetailQuery')\n    def test_should_render_log_detail_page(\n        self, mock_query_class, db, client, mock_log_detail_query\n    ):\n        mock_query_class.return_value = mock_log_detail_query()\n\n        url = reverse('radius-log_detail', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'Log Detail' in smart_str(response.content)\n        assert 'navpath' in response.context\n\n    @patch('nav.web.radius.views.LogDetailQuery')\n    def test_should_render_log_detail_modal(\n        self, mock_query_class, db, client, mock_log_detail_query\n    ):\n        mock_query_class.return_value = mock_log_detail_query()\n\n        url = reverse('radius-log_detail-modal', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'id=\"log-detail\"' in smart_str(response.content)\n        assert (\n            'navpath' not in response.context or response.context.get('navpath') is None\n        )\n\n    @patch('nav.web.radius.views.LogDetailQuery')\n    def test_log_detail_handles_empty_result(self, mock_query_class, db, client):\n        mock_query = MagicMock()\n        mock_query.result = []\n        mock_query_class.return_value = mock_query\n\n        url = reverse('radius-log_detail', args=[999])\n        response = client.get(url)\n\n        assert \"No details available\" in smart_str(response.content)\n\n    @patch('nav.web.radius.views.LogDetailQuery')\n    def test_log_detail_with_custom_message(\n        self, mock_query_class, db, client, mock_log_detail_query\n    ):\n        mock_query_class.return_value = mock_log_detail_query(\n            {'message': 'Custom [error] message', 'type': 'Auth-Reject'}\n        )\n\n        url = reverse('radius-log_detail', args=[1])\n        response = client.get(url)\n\n        assert response.status_code == 200\n\n\n@pytest.fixture\ndef mock_account_detail_query():\n    \"\"\"Factory fixture for creating mocked AcctDetailQuery\"\"\"\n\n    def _create_mock(custom_attributes=None):\n        mock_result = MagicMock()\n\n        default_attributes = {\n            'acctuniqueid': '1309f5d67b0a752d',\n            'username': 'test_user',\n            'nasipaddress': '192.168.1.1 (test-nas.example.com)',\n            'framedipaddress': '10.0.0.1 (10.0.0.1)',\n            'acctstarttime': datetime(2023, 1, 1, 12, 0, 0),\n            'acctstoptime': '2023-01-01 12:30:00',\n            'acctsessiontime': '30m',\n            'acctterminatecause': 'User-Request',\n            'acctinputoctets': '130.445 KB',\n            'acctoutputoctets': '357.501 KB',\n        }\n\n        if custom_attributes:\n            default_attributes.update(custom_attributes)\n\n        for attr, value in default_attributes.items():\n            setattr(mock_result, attr, value)\n\n        mock_query = MagicMock()\n        mock_query.result = [mock_result]\n\n        return mock_query\n\n    return _create_mock\n\n\n@pytest.fixture\ndef mock_log_detail_query():\n    \"\"\"Factory fixture for creating mocked LogDetailQuery\"\"\"\n\n    def _create_mock(custom_attributes=None):\n        mock_result = MagicMock()\n\n        default_attributes = {\n            'id': 12345,\n            'username': 'test_user',\n            'time': datetime(2023, 1, 1, 12, 0, 0),\n            'type': 'Auth-Accept',\n            'message': 'Login OK [user/test_realm]',\n            'realm': 'test_realm',\n        }\n\n        if custom_attributes:\n            default_attributes.update(custom_attributes)\n\n        for attr, value in default_attributes.items():\n            setattr(mock_result, attr, value)\n\n        mock_query = MagicMock()\n        mock_query.result = [mock_result]\n\n        return mock_query\n\n    return _create_mock\n"
  },
  {
    "path": "tests/integration/web/seeddb_netbox_test.py",
    "content": "import socket\n\nimport pytest\nfrom django.http import HttpResponse\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom mock import Mock, patch\n\nfrom nav.models.manage import ManagementProfile, NetboxType, Vendor\nfrom nav.Snmp.errors import SnmpError\nfrom nav.web.seeddb.page.netbox.edit import (\n    get_snmp_read_only_variables,\n    snmp_write_test,\n)\n\n\nclass TestCheckConnectivityView:\n    \"\"\"\n    Test cases for the check_connectivity view.\n\n    This view validates IP addresses/hostnames and returns appropriate responses\n    for use with HTMX frontend interactions.\n    \"\"\"\n\n    url = reverse('seeddb-netbox-check-connectivity')\n\n    @staticmethod\n    def _get_post_data(ip_address: str = '', profiles=None):\n        \"\"\"Helper method to create consistent POST data for connectivity tests\"\"\"\n        if profiles is None:\n            profiles = [123]\n        return {'ip': ip_address, 'profiles': profiles}\n\n    def test_given_no_address_it_should_return_error_response(self, client):\n        \"\"\"Test that missing address parameter returns error response\"\"\"\n        response = client.post(self.url)\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n\n    def test_given_empty_address_it_should_return_error_response(self, client):\n        \"\"\"Test that empty address parameter returns 400\"\"\"\n        response = client.post(self.url, data=self._get_post_data(ip_address=''))\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n\n    def test_given_whitespace_only_ip_it_should_return_error_response(self, client):\n        \"\"\"Test that IP address with only whitespace returns error response\"\"\"\n        response = client.post(self.url, data=self._get_post_data(ip_address='   '))\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n\n    def test_given_no_profiles_parameter_it_should_return_error_response(\n        self, client, valid_ipv4\n    ):\n        \"\"\"Test that missing profiles parameter returns error response\"\"\"\n        response = client.post(self.url, {'ip': valid_ipv4})\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n        assert response.context['message']\n\n    def test_given_empty_profiles_list_it_should_return_error_response(\n        self, client, valid_ipv4\n    ):\n        \"\"\"Test that empty profiles list returns error response\"\"\"\n        response = client.post(self.url, {'ip': valid_ipv4, 'profiles': []})\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n\n    def test_given_valid_ipv4_address_it_should_return_loading_response(\n        self, client, valid_ipv4\n    ):\n        \"\"\"\n        Test that a valid IP address returns a loading status.\n\n        When a valid IP is provided, the view should return a loading status\n        to indicate that connectivity tests can proceed.\n        \"\"\"\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address=valid_ipv4)\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'loading'\n\n    def test_given_valid_ipv6_address_it_should_return_loading_response(\n        self, client, valid_ipv6\n    ):\n        \"\"\"Test that valid IPv6 address returns loading status\"\"\"\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address=valid_ipv6)\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'loading'\n\n    def test_given_malformed_ip_address_it_should_attempt_hostname_resolution(\n        self, client\n    ):\n        \"\"\"Test that malformed IP is treated as hostname and resolved\"\"\"\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='999.999.999.999')\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n\n    @patch('socket.getaddrinfo')\n    def test_given_valid_hostname_then_return_sorted_ip_addresses(\n        self, mock_getaddrinfo, client\n    ):\n        \"\"\"Test that valid hostname returns associated IP addresses sorted\"\"\"\n        mock_getaddrinfo.return_value = [\n            (2, 1, 6, '', ('192.168.1.10', 0)),\n            (2, 1, 6, '', ('192.168.1.5', 0)),\n        ]\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='example.com')\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'select-address'\n        assert response.context['addresses'] == ['192.168.1.5', '192.168.1.10']\n\n    @patch('socket.getaddrinfo')\n    def test_given_hostname_with_mixed_ipv4_ipv6_then_return_sorted_addresses(\n        self, mock_getaddrinfo, client\n    ):\n        \"\"\"\n        Test that hostname resolving to both IPv4 and IPv6 returns sorted addresses\n        \"\"\"\n        mock_getaddrinfo.return_value = [\n            (socket.AF_INET6, 1, 6, '', ('2001:db8::2', 0, 0, 0)),\n            (socket.AF_INET, 1, 6, '', ('192.168.1.10', 0)),\n            (socket.AF_INET6, 1, 6, '', ('2001:db8::1', 0, 0, 0)),\n            (socket.AF_INET, 1, 6, '', ('192.168.1.5', 0)),\n        ]\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='example.com')\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'select-address'\n        # Verify both IPv4 and IPv6 addresses are included and sorted as expected\n        addresses = response.context['addresses']\n        expected_order = ['2001:db8::1', '2001:db8::2', '192.168.1.5', '192.168.1.10']\n        assert addresses == expected_order\n\n    @patch('socket.getaddrinfo')\n    def test_given_socket_error_then_return_error_message(\n        self, mock_getaddrinfo, client\n    ):\n        \"\"\"Test that socket error returns appropriate error message\"\"\"\n        mock_getaddrinfo.side_effect = socket.error(\"Socket error\")\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='example.com')\n        )\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n        assert response.context['message'] == 'Socket error'\n\n    def test_given_unknown_hostname_then_return_error_message(self, client):\n        \"\"\"Test that unknown host returns appropriate error message\"\"\"\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='unknown.host')\n        )\n\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n        assert 'Name or service not known' in response.context['message']\n\n    @patch('socket.getaddrinfo')\n    def test_given_unicode_error_then_return_error_message(\n        self, mock_getaddrinfo, client\n    ):\n        \"\"\"Test that unicode error returns appropriate error message\"\"\"\n        mock_getaddrinfo.side_effect = UnicodeError(\"Invalid Unicode characters\")\n        response = client.post(\n            self.url, data=self._get_post_data(ip_address='test.example.com')\n        )\n\n        assert response.status_code == 200\n        assert response.context['status'] == 'error'\n        assert response.context['message'] == 'Invalid Unicode characters'\n\n\nclass TestLoadConnectivityTestResultsView:\n    url = reverse('seeddb-netbox-check-connectivity-load')\n\n    @staticmethod\n    def _get_profile_from_response(\n        response: HttpResponse, profile_id: int, key: str = \"succeeded\"\n    ):\n        profiles = response.context.get('profiles', {})  # Add .get() with default\n        if key not in profiles:\n            return None\n        profile_list = profiles[key]\n        return next((p for p in profile_list if p['id'] == profile_id), None)\n\n    def test_given_no_profile_ids_then_return_not_found_response(\n        self, client, valid_ipv4\n    ):\n        \"\"\"Test that missing profiles returns not found response\"\"\"\n\n        response = client.post(self.url, {'ip': valid_ipv4})\n        assert response.status_code == 200\n        assert response.context.get('profiles') is None\n        assert \"No profiles found\" in smart_str(response.content)\n\n    def test_given_non_existent_profiles_then_return_not_found_response(\n        self, client, valid_ipv4\n    ):\n        \"\"\"Test that invalid profile IDs returns not found response\"\"\"\n\n        response = client.post(\n            self.url, {'ip': valid_ipv4, 'profiles': ['9999', '8888']}\n        )\n        assert response.status_code == 200\n        assert response.context.get('profiles') is None\n        assert \"No profiles found\" in smart_str(response.content)\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_read_only_variables')\n    def test_given_snmp_profile_then_set_sysname_and_netbox_type_in_response(\n        self,\n        mock_snmp_vars,\n        mock_sysname,\n        client,\n        snmp_profile,\n        netbox_type,\n        valid_ipv4,\n    ):\n        \"\"\"Test that valid profile returns sysname and netbox_type\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        mock_snmp_vars.return_value = {'status': True, 'type': netbox_type}\n        response = client.post(\n            self.url,\n            {'ip': valid_ipv4, 'profiles': [str(snmp_profile.id)]},\n        )\n        assert response.status_code == 200\n        assert response.context['sysname'] == 'test-device.example.com'\n        assert response.context['netbox_type'] == netbox_type\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_read_only_variables')\n    def test_given_snmp_profile_then_return_snmp_data(\n        self,\n        mock_snmp_vars,\n        mock_sysname,\n        client,\n        snmp_profile,\n        netbox_type,\n        valid_ipv4,\n    ):\n        \"\"\"Test that SNMP profile returns SNMP data\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        mock_snmp_vars.return_value = {'status': True, 'type': netbox_type}\n\n        response = client.post(\n            self.url,\n            {'ip': valid_ipv4, 'profiles': [str(snmp_profile.id)]},\n        )\n\n        profile_data = self._get_profile_from_response(response, snmp_profile.id)\n\n        assert response.status_code == 200\n        assert profile_data and profile_data['status'] is True\n        assert profile_data and profile_data['name'] == snmp_profile.name\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_read_only_variables')\n    def test_given_snmp_profile_with_failure_then_return_in_failed_section(\n        self, mock_snmp_vars, mock_sysname, client, snmp_profile, valid_ipv4\n    ):\n        \"\"\"Test that failed SNMP profile appears in failed section\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        mock_snmp_vars.return_value = {\n            'status': False,\n            'error_message': 'Connection timeout',\n        }\n\n        response = client.post(\n            self.url, {'ip': valid_ipv4, 'profiles': [str(snmp_profile.id)]}\n        )\n\n        profile_data = self._get_profile_from_response(\n            response, snmp_profile.id, key=\"failed\"\n        )\n        assert profile_data is not None\n        assert profile_data['status'] is False\n        assert profile_data['error_message'] == 'Connection timeout'\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.test_napalm_connectivity')\n    def test_given_napalm_profile_then_return_napalm_data(\n        self, mock_napalm, mock_sysname, client, napalm_profile, valid_ipv4\n    ):\n        \"\"\"Test that NAPALM profile returns NAPALM connectivity data\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        mock_napalm.return_value = {'status': True}\n\n        response = client.post(\n            self.url,\n            {'ip': valid_ipv4, 'profiles': [str(napalm_profile.id)]},\n        )\n        profile_data = self._get_profile_from_response(response, napalm_profile.id)\n\n        assert response.status_code == 200\n        assert profile_data['name'] == 'Test napalm profile'\n        assert profile_data['status'] is True\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.test_napalm_connectivity')\n    def test_given_napalm_profile_with_exception_then_return_in_failed_section(\n        self, mock_napalm, mock_sysname, client, napalm_profile, valid_ipv4\n    ):\n        \"\"\"Test that NAPALM profile with connection error appears in failed section\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        mock_napalm.return_value = {\n            'status': False,\n            'error_message': 'Authentication failed',\n        }\n\n        response = client.post(\n            self.url, {'ip': valid_ipv4, 'profiles': [str(napalm_profile.id)]}\n        )\n\n        profile_data = self._get_profile_from_response(\n            response, napalm_profile.id, key=\"failed\"\n        )\n        assert profile_data is not None\n        assert profile_data['status'] is False\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    def test_given_unhandled_profile_then_include_profile_in_failed_response(\n        self, mock_sysname, client, unhandled_profile, valid_ipv4\n    ):\n        \"\"\"Test that unsupported profile appears in failed section\"\"\"\n        mock_sysname.return_value = 'test-device.example.com'\n        response = client.post(\n            self.url,\n            {'ip': valid_ipv4, 'profiles': [str(unhandled_profile.id)]},\n        )\n        profile_data = self._get_profile_from_response(\n            response, unhandled_profile.id, key=\"failed\"\n        )\n\n        assert response.status_code == 200\n        assert response.context['netbox_type'] is None\n        assert profile_data['name'] == unhandled_profile.name\n        assert profile_data['status'] is False\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_sysname')\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_read_only_variables')\n    @patch('nav.web.seeddb.page.netbox.edit.test_napalm_connectivity')\n    def test_given_multiple_profiles_then_return_all_profiles(\n        self,\n        mock_napalm,\n        mock_snmp_vars,\n        mock_sysname,\n        client,\n        snmp_profile,\n        napalm_profile,\n        netbox_type,\n        valid_ipv4,\n    ):\n        \"\"\"Test that multiple profiles return data for each\"\"\"\n        mock_sysname.return_value = 'multi-device.example.com'\n        mock_snmp_vars.return_value = {'status': True, 'type': netbox_type}\n        mock_napalm.return_value = {\n            'status': True,\n        }\n\n        response = client.post(\n            self.url,\n            {\n                'ip': valid_ipv4,\n                'profiles': [str(snmp_profile.id), str(napalm_profile.id)],\n            },\n        )\n\n        snmp_check = self._get_profile_from_response(response, snmp_profile.id)\n        napalm_check = self._get_profile_from_response(response, napalm_profile.id)\n        assert response.status_code == 200\n        assert snmp_check is not None\n        assert napalm_check is not None\n\n\nclass TestValidateIpAddressView:\n    def test_given_valid_ipv4_it_should_return_200(self, client, valid_ipv4):\n        \"\"\"Test that valid IPv4 address returns 200 response\"\"\"\n        url = reverse('seeddb-netbox-validate-ip-address')\n        response = client.get(url, {'address': valid_ipv4})\n        assert response.status_code == 200\n\n    def test_given_valid_ipv6_it_should_return_200(self, client, valid_ipv6):\n        \"\"\"Test that valid IPv6 address returns 200 response\"\"\"\n        url = reverse('seeddb-netbox-validate-ip-address')\n        response = client.get(url, {'address': valid_ipv6})\n        assert response.status_code == 200\n\n    def test_given_invalid_address_it_should_return_400(self, client):\n        \"\"\"Test that invalid address returns 400 response\"\"\"\n        url = reverse('seeddb-netbox-validate-ip-address')\n        response = client.get(url, {'address': 'invalid_address'})\n        assert response.status_code == 400\n\n\nclass TestGetSnmpReadOnlyVariables:\n    \"\"\"Test cases for get_snmp_read_only_variables function\"\"\"\n\n    @patch('nav.web.seeddb.page.netbox.edit.snmp_write_test')\n    def test_given_write_profile_then_call_write_test(\n        self, mock_write_test, snmp_write_profile, valid_ipv4\n    ):\n        \"\"\"Test that write profiles trigger write test\"\"\"\n        mock_write_test.return_value = {'status': True, 'syslocation': 'test'}\n\n        result = get_snmp_read_only_variables(valid_ipv4, snmp_write_profile)\n\n        mock_write_test.assert_called_once_with(valid_ipv4, snmp_write_profile)\n        assert result == {'status': True, 'syslocation': 'test'}\n\n    @patch('nav.web.seeddb.page.netbox.edit.check_snmp_version')\n    @patch('nav.web.seeddb.page.netbox.edit.get_netbox_type')\n    def test_given_read_profile_success_then_return_type_and_status(\n        self, mock_get_type, mock_check_version, snmp_profile, netbox_type, valid_ipv4\n    ):\n        \"\"\"Test successful read-only profile returns type and status\"\"\"\n        mock_get_type.return_value = netbox_type\n        mock_check_version.return_value = True\n\n        result = get_snmp_read_only_variables(valid_ipv4, snmp_profile)\n\n        assert result['type'] == netbox_type\n        assert result['status'] is True\n        assert 'error_message' not in result\n\n    @patch('nav.web.seeddb.page.netbox.edit.check_snmp_version')\n    @patch('nav.web.seeddb.page.netbox.edit.get_netbox_type')\n    def test_given_read_profile_failure_then_return_error_message(\n        self, mock_get_type, mock_check_version, snmp_profile, netbox_type, valid_ipv4\n    ):\n        \"\"\"Test failed read-only profile returns error message\"\"\"\n        mock_get_type.return_value = netbox_type\n        mock_check_version.return_value = False\n\n        result = get_snmp_read_only_variables(valid_ipv4, snmp_profile)\n\n        assert result['type'] == netbox_type\n        assert result['status'] is False\n        assert result['error_message'] == \"SNMP connection failed\"\n\n\nclass TestSnmpWriteTest:\n    \"\"\"Test cases for snmp_write_test function\"\"\"\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_session_for_profile')\n    def test_given_successful_write_then_return_success_status(\n        self, mock_session_factory, snmp_write_profile, valid_ipv4\n    ):\n        \"\"\"Test successful SNMP write operation\"\"\"\n        mock_snmp = Mock()\n        mock_snmp.get.return_value = 'Test Location'\n        mock_snmp.set.return_value = None\n        mock_session_factory.return_value = Mock(return_value=mock_snmp)\n\n        result = snmp_write_test(valid_ipv4, snmp_write_profile)\n\n        assert result['status'] is True\n        assert result['syslocation'] == 'Test Location'\n        assert result['error_message'] == ''\n        mock_snmp.get.assert_called_once_with('1.3.6.1.2.1.1.6.0')\n        mock_snmp.set.assert_called_once_with(\n            '1.3.6.1.2.1.1.6.0', 's', b'Test Location'\n        )\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_session_for_profile')\n    def test_given_snmp_error_then_return_failure_status(\n        self, mock_session_factory, snmp_write_profile, valid_ipv4\n    ):\n        \"\"\"Test SNMP error during write operation\"\"\"\n        mock_snmp = Mock()\n        mock_snmp.get.side_effect = SnmpError(\"Authentication failed\")\n        mock_session_factory.return_value = Mock(return_value=mock_snmp)\n\n        result = snmp_write_test(valid_ipv4, snmp_write_profile)\n\n        assert result['status'] is False\n        assert result['error_message'] == 'Authentication failed'\n        assert result['syslocation'] == ''\n\n    @patch('nav.web.seeddb.page.netbox.edit.get_snmp_session_for_profile')\n    def test_given_unicode_error_then_return_custom_error(\n        self, mock_session_factory, snmp_write_profile, valid_ipv4\n    ):\n        \"\"\"Test Unicode decode error during write operation\"\"\"\n        mock_snmp = Mock()\n        mock_snmp.get.return_value = b'\\x80'\n        mock_snmp.set.side_effect = UnicodeDecodeError(\n            'utf-8', b'\\x80', 0, 1, 'invalid start byte'\n        )\n        mock_session_factory.return_value = Mock(return_value=mock_snmp)\n\n        result = snmp_write_test(valid_ipv4, snmp_write_profile)\n\n        assert result['status'] is False\n        assert result['custom_error'] == 'UnicodeDecodeError'\n        assert result['error_message'] == \"Could not decode SNMP response\"\n\n\n@pytest.fixture()\ndef netbox_type():\n    vendor = Vendor(id=\"TestVendor\")\n    vendor.save()\n    netbox_type = NetboxType(\n        id=123,\n        vendor=vendor,\n        name=\"TEST-12A-BC-3\",\n        description=\"Test Device Type\",\n    )\n    netbox_type.save()\n    yield netbox_type\n    netbox_type.delete()\n    vendor.delete()\n\n\n@pytest.fixture\ndef valid_ipv4():\n    return '192.168.1.1'\n\n\n@pytest.fixture\ndef valid_ipv6():\n    return '2001:db8::1'\n\n\n@pytest.fixture\ndef invalid_hostname():\n    return 'nonexistent.invalid.domain'\n\n\n@pytest.fixture()\ndef snmp_profile():\n    yield from create_profile(\"Test SNMP profile\", ManagementProfile.PROTOCOL_SNMP)\n\n\n@pytest.fixture()\ndef snmp_write_profile():\n    \"\"\"Create an SNMP profile with write access\"\"\"\n    yield from create_profile(\n        \"Test SNMP write profile\", ManagementProfile.PROTOCOL_SNMP, write=True\n    )\n\n\n@pytest.fixture()\ndef napalm_profile():\n    yield from create_profile(\"Test napalm profile\", ManagementProfile.PROTOCOL_NAPALM)\n\n\n@pytest.fixture()\ndef unhandled_profile():\n    yield from create_profile(\"Unsupported profile\", 99)\n\n\n# This configuration dict is only relevant for SNMP profiles.\n# For NAPALM and unsupported profiles, it is dummy data and not used,\n# since all external interactions are mocked in tests.\ndef create_profile(name: str, protocol: int, write=False):\n    profile = ManagementProfile(\n        name=name,\n        protocol=protocol,\n        configuration={\n            \"version\": 2,\n            \"community\": \"public\",\n            \"write\": write,\n        },\n    )\n    profile.save()\n    yield profile\n    profile.delete()\n"
  },
  {
    "path": "tests/integration/web/status_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport base64\nimport pickle\n\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\n\n\n#########\n# Tests #\n#########\n\n\ndef test_set_and_get_default_status_filter_should_show_filter(client):\n    url = reverse('status2_save_preferences')\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"status_filters\": \"alert_type\",\n            \"alert_type\": \"linkDegraded\",\n            \"stateless_threshold\": \"24\",\n        },\n    )\n    assert response.status_code == 200\n\n    url = reverse('status2-index')\n    response = client.get(url)\n    assert response.status_code == 200\n    assert '<option value=\"linkDegraded\" selected>linkDegraded</option>' in smart_str(\n        response.content\n    )\n\n\ndef test_get_default_status_filter_should_show_filter_for_encoded_filter(\n    client, admin_account\n):\n    datastring = base64.b64encode(\n        pickle.dumps(\n            {\n                \"status_filters\": \"alert_type\",\n                \"alert_type\": \"linkDegraded\",\n                \"stateless_threshold\": \"24\",\n            }\n        )\n    )\n    admin_account.preferences[admin_account.PREFERENCE_KEY_STATUS] = datastring\n    admin_account.save()\n\n    url = reverse('status2-index')\n    response = client.get(url)\n    assert response.status_code == 200\n    assert '<option value=\"linkDegraded\" selected>linkDegraded</option>' in smart_str(\n        response.content\n    )\n"
  },
  {
    "path": "tests/integration/web/templatesyntax_test.py",
    "content": "\"\"\"Generates syntax tests for all NAV Django templates\"\"\"\n\nimport os\nfrom os.path import join, relpath\nfrom django.conf import settings\nfrom django.template import loader\n\nfrom nav.eventengine.alerts import (\n    ensure_alert_templates_are_available,\n    ALERT_TEMPLATE_DIR,\n)\nimport pytest\n\n\ndef test_templates_can_be_found():\n    templates = list(get_template_list())\n    assert templates, \"Can't find any Django templates\"\n\n\ndef test_alert_templates_can_be_found():\n    templates = list(get_template_list([ALERT_TEMPLATE_DIR]))\n    assert templates, \"Can't find any Django alert message templates\"\n\n\ndef get_template_list(directories=None):\n    templates = getattr(settings, 'TEMPLATES', [{}])\n    template_dirs = list(getattr(templates[0], 'DIRS', []))\n    if not template_dirs:\n        template_dirs = list(\n            getattr(settings, 'TEMPLATE_DIRS', [])\n        )  # Outdated, remove when on 1.11\n    if not directories:\n        ensure_alert_templates_are_available()\n        directories = template_dirs + list(get_nav_app_template_dirs())\n\n    for tmpldir in directories:\n        for dirname, _subdirs, files in os.walk(tmpldir):\n            for name in files:\n                if name[0] == \".\":\n                    # Do not test generated files, swap files, hidden files!\n                    continue\n                fullpath = join(dirname, name)\n                yield relpath(fullpath, tmpldir)\n\n\ndef get_nav_app_template_dirs():\n    \"\"\"\n    This replaces django.template.loads.get_app_template_dirs, to just\n    return templates that belong to apps in the nav namespace.\n    \"\"\"\n    from django.apps import apps\n\n    template_dirs = []\n    for app_config in apps.get_app_configs():\n        if not app_config.path or not app_config.name.startswith('nav.'):\n            continue\n        template_dir = os.path.join(app_config.path, 'templates')\n        if os.path.isdir(template_dir):\n            template_dirs.append(template_dir)\n\n    # Immutable return value because it will be cached and shared by callers.\n    return tuple(template_dirs)\n\n\n@pytest.mark.parametrize(\"template_name\", get_template_list())\ndef test_template_syntax(template_name):\n    loader.get_template(template_name)\n"
  },
  {
    "path": "tests/integration/web/threshold_test.py",
    "content": "from django.urls import reverse\nfrom django.utils.encoding import smart_str\n\n\nclass TestThresholdModalView:\n    def test_should_render_threshold_help_modal(self, client):\n        url = reverse('threshold-help-modal')\n        response = client.get(url)\n        assert response.status_code == 200\n        assert 'id=\"threshold-help-modal\"' in smart_str(response.content)\n"
  },
  {
    "path": "tests/integration/web/useradmin_test.py",
    "content": "from django.urls import reverse\n\n\ndef test_operate_as_this_user_should_not_crash(db, client, admin_account):\n    url = reverse('useradmin-account_detail', args=(admin_account.pk,))\n    response = client.post(\n        url,\n        follow=True,\n        data={\n            \"account\": admin_account.pk,\n            \"submit_sudo\": \"Operate+as+this+user\",\n        },\n    )\n\n    assert response.status_code == 200\n"
  },
  {
    "path": "tests/integration/web/webfront_test.py",
    "content": "import json\nfrom io import BytesIO\nfrom urllib.parse import quote\n\nimport pytest\nfrom django.http import Http404\nfrom django.test import Client\nfrom django.urls import reverse\nfrom django.utils.encoding import smart_str\nfrom mock import Mock, patch\n\nfrom nav.models.profiles import (\n    Account,\n    AccountDashboard,\n    AccountDashboardSubscription,\n    AccountNavlet,\n)\nfrom nav.web.webfront import find_dashboard, get_dashboards_for_account\nfrom nav.web.webfront.utils import tool_list\n\n\ndef test_tools_should_be_readable():\n    admin = Mock()\n    tools = tool_list(admin)\n    assert len(tools) > 0\n\n\ndef test_set_default_dashboard_should_succeed(db, client, admin_account):\n    \"\"\"Tests that a default dashboard can be set\"\"\"\n    dashboard = AccountDashboard.objects.create(\n        name=\"new_default\",\n        account=admin_account,\n    )\n    url = reverse(\"set-default-dashboard\", args=(dashboard.pk,))\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert f\"Default dashboard set to «{dashboard.name}»\" in smart_str(response.content)\n    assert dashboard.is_default_for_account(admin_account)\n\n\ndef test_set_default_dashboard_with_previous_default_should_succeed(\n    db, client, admin_account\n):\n    \"\"\"Tests that a default dashboard can be set when another default exists\"\"\"\n    default_dashboard = admin_account.default_dashboard\n    dashboard = create_dashboard(\n        name=\"new_default\",\n        account=admin_account,\n    )\n    url = reverse(\"set-default-dashboard\", args=(dashboard.pk,))\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert f\"Default dashboard set to «{dashboard.name}»\" in smart_str(response.content)\n    assert dashboard.is_default_for_account(admin_account)\n    assert not default_dashboard.is_default_for_account(admin_account)\n\n\ndef test_when_setting_shared_dashboard_as_default_then_it_should_subscribe(\n    db, client, admin_account, non_admin_account\n):\n    \"\"\"Tests that setting a shared dashboard as default also subscribes to it\"\"\"\n    shared_dashboard = create_dashboard(\n        account=non_admin_account,\n        name=\"shared_dashboard\",\n        is_shared=True,\n    )\n    url = reverse(\"set-default-dashboard\", args=(shared_dashboard.pk,))\n    response = client.post(url, follow=True)\n\n    assert response.status_code == 200\n    assert shared_dashboard.is_default_for_account(admin_account)\n    assert shared_dashboard.is_subscribed(admin_account)\n\n\ndef test_when_no_default_dashboard_set_then_it_should_set_needs_default_flag(\n    db, admin_account\n):\n    \"\"\"Tests that find_dashboard sets needs_default_set when no default exists\"\"\"\n    # Clear any existing dashboards and defaults for a clean slate\n    AccountDashboard.objects.filter(account=admin_account).delete()\n    create_dashboard(account=admin_account)\n\n    # Verify no default is set\n    admin_account.refresh_from_db()\n    assert not admin_account.has_default_dashboard\n\n    # Find dashboard should set needs_default_set to True\n    dashboard = find_dashboard(admin_account)\n    assert dashboard.needs_default_set is True\n\n\ndef test_when_setting_shared_default_then_it_should_toggle_subscribe_button(\n    db, client, admin_account, non_admin_account\n):\n    \"\"\"Tests that setting a shared dashboard as default updates the subscribe button\"\"\"\n    shared_dashboard = create_dashboard(\n        account=non_admin_account,\n        name=\"shared_dashboard\",\n        is_shared=True,\n    )\n    url = reverse(\"set-default-dashboard\", args=(shared_dashboard.pk,))\n    response = client.post(url)\n\n    assert response.status_code == 200\n    content = smart_str(response.content)\n    assert 'id=\"dashboard-subscribe-button\"' in content\n    assert 'hx-swap-oob=\"true\"' in content\n\n\nclass TestDeleteDashboardView:\n    \"\"\"Tests for the delete_dashboard view which allows deleting dashboards\"\"\"\n\n    def test_given_dashboard_when_delete_unconfirmed_then_do_not_delete_dashboard(\n        self, db, client, admin_account\n    ):\n        \"\"\"\n        Tests that the dashboard is not deleted when deletion is not yet confirmed\n        \"\"\"\n        dashboard = self._create_dashboard(\n            admin_account,\n            name=\"to_be_deleted\",\n        )\n        url = reverse(\"delete-dashboard\", args=(dashboard.pk,))\n        response = client.post(url)\n\n        assert response.status_code == 200\n        assert AccountDashboard.objects.filter(id=dashboard.id).exists()\n\n    def test_given_dashboard_id_when_delete_unconfirmed_then_render_confirmation(\n        self, db, client, admin_account\n    ):\n        \"\"\"\n        Tests that the deletion confirmation is rendered when deletion is unconfirmed\n        \"\"\"\n        dashboard = self._create_dashboard(\n            admin_account,\n            name=\"to_be_deleted\",\n        )\n        url = reverse(\"delete-dashboard\", args=(dashboard.pk,))\n        response = client.post(url)\n\n        assert response.status_code == 200\n        assert 'id=\"delete-dashboard-confirmation\"' in smart_str(response.content)\n\n    def test_given_dashboard_with_subscribers_then_render_subscriber_warning(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that the deletion confirmation shows subscriber info when applicable\"\"\"\n        dashboard = self._create_dashboard(\n            admin_account,\n            is_shared=True,\n        )\n        AccountDashboardSubscription.objects.create(\n            account=non_admin_account,\n            dashboard=dashboard,\n        )\n        url = reverse(\"delete-dashboard\", args=(dashboard.pk,))\n        response = client.post(url)\n        response_content = smart_str(response.content)\n\n        assert response.status_code == 200\n        assert 'data-test-id=\"subscriber-warning\"' in response_content\n\n    def test_given_dashboard_when_delete_confirmed_then_delete_dashboard(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that an existing dashboard can be deleted\"\"\"\n        dashboard = self._create_dashboard(admin_account)\n        url = reverse(\"delete-dashboard\", args=(dashboard.pk,))\n        response = client.post(\n            url,\n            data={\"confirm_delete\": \"true\"},\n            follow=True,\n        )\n\n        assert response.status_code == 200\n        assert not AccountDashboard.objects.filter(id=dashboard.id).exists()\n\n    def test_given_last_dashboard_of_account_then_render_error_message(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the last dashboard cannot be deleted\"\"\"\n\n        # Ensure only one dashboard exists for the account\n        AccountDashboard.objects.filter(account=admin_account).delete()\n        dashboard = self._create_dashboard(admin_account, name=\"last_dashboard\")\n\n        url = reverse(\"delete-dashboard\", args=(dashboard.pk,))\n        response = client.post(\n            url,\n        )\n\n        assert response.status_code == 200\n        assert \"Cannot delete last dashboard\" in smart_str(response.content)\n        assert AccountDashboard.objects.filter(id=dashboard.id).exists()\n\n    def test_given_default_dashboard_of_account_then_render_error_message(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the default dashboard cannot be deleted\"\"\"\n        # Ensure at least one non-default dashboard exists\n        self._create_dashboard(admin_account, name=\"non_default_dashboard\")\n        default_dashboard = admin_account.default_dashboard\n        url = reverse(\"delete-dashboard\", args=(default_dashboard.pk,))\n        response = client.post(url)\n\n        assert response.status_code == 200\n        assert \"Cannot delete default dashboard\" in smart_str(response.content)\n        assert AccountDashboard.objects.filter(id=default_dashboard.id).exists()\n\n    @staticmethod\n    def _create_dashboard(account, name=\"to_be_deleted\", is_shared=False):\n        return AccountDashboard.objects.create(\n            name=name,\n            account=account,\n            is_shared=is_shared,\n        )\n\n\ndef test_when_logging_in_it_should_change_the_session_id(\n    db, client, admin_username, admin_password\n):\n    login_url = reverse('webfront-login')\n    logout_url = reverse('webfront-logout')\n    # log out first to compare before and after being logged in\n    client.post(logout_url)\n    assert client.session.session_key, \"the initial session lacks an ID\"\n    session_id_pre_login = client.session.session_key\n    client.post(login_url, {'username': admin_username, 'password': admin_password})\n    session_id_post_login = client.session.session_key\n    assert session_id_post_login != session_id_pre_login\n\n\ndef test_non_expired_session_id_should_not_be_changed_on_request_unrelated_to_login(\n    db, client\n):\n    \"\"\"Client should be fresh and guaranteed to not be expired\"\"\"\n    index_url = reverse('webfront-index')\n    assert client.session.session_key, \"the initial session lacks an ID\"\n    session_id_pre_login = client.session.session_key\n    client.get(index_url)\n    session_id_post_login = client.session.session_key\n    assert session_id_post_login == session_id_pre_login\n\n\ndef test_shows_password_issue_banner_on_own_password_issues(db, client):\n    \"\"\"\n    The admin user has a password with an outdated password hashing method, so a\n    banner indicating a problem with the password should be shown\n    \"\"\"\n    index_url = reverse('webfront-index')\n    response = client.get(index_url)\n\n    assert (\n        \"Your account has an insecure or old password. It should be reset.\"\n        in smart_str(response.content)\n    )\n\n\ndef test_shows_password_issue_banner_to_admins_on_other_users_password_issues(\n    db, admin_account\n):\n    \"\"\"\n    If other users have insecure or old passwords a banner should be shown to admins\n    \"\"\"\n\n    # Admin account has a password with outdated password hashing method\n    # This needs to be fixed, otherwise the \"Your password is insecure...\" banner will\n    # be shown\n    new_password = 'new_password'\n    admin_account.set_password(new_password)\n    admin_account.save()\n    assert not admin_account.has_password_issues(), (\n        'Admin account should not have password issues'\n    )\n\n    account = Account.objects.create(login=\"plaintext_pw_user\", password=\"plaintext_pw\")\n\n    assert account.has_password_issues(), 'Test account SHOULD have password issues'\n\n    # login with a password only used for this test\n    client_ = Client()\n    url = reverse('webfront-login')\n    client_.post(url, {'username': admin_account.login, 'password': new_password})\n\n    # test\n    index_url = reverse('webfront-index')\n    response = client_.get(index_url)\n    assert \"There are 1 accounts that have insecure or old passwords.\" in smart_str(\n        response.content\n    )\n\n\ndef test_show_qr_code_returns_fragment_with_qr_code(client):\n    \"\"\"\n    Tests that calling the qr_code view will return a fragment with a generated QR\n    code\n    \"\"\"\n    url = reverse(\"webfront-qr-code\")\n    header = {'HTTP_REFERER': 'www.example.com'}\n    response = client.get(url, follow=True, **header)\n\n    assert response.status_code == 200\n    assert \"qr-code\" in smart_str(response.content)\n    assert \"img\" in smart_str(response.content)\n    assert \"QR Code linking to current page\" in smart_str(response.content)\n\n\ndef test_should_render_about_logging_modal(client):\n    \"\"\"\n    Tests that calling the about_audit_logging_modal view will return a modal with\n    information about audit logging\n    \"\"\"\n    url = reverse(\"webfront-audit-logging-modal\")\n    response = client.get(url)\n\n    assert response.status_code == 200\n    assert 'id=\"about-audit-logging\"' in smart_str(response.content)\n\n\nclass TestDashboardIndexView:\n    def test_given_no_dashboard_id_then_return_default_dashboard(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the default dashboard is shown when no ID is given\"\"\"\n        default_dashboard = admin_account.default_dashboard\n        url = reverse('dashboard-index')\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['dashboard'].id == default_dashboard.id\n\n    def test_given_valid_dashboard_id_then_return_that_dashboard(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the specified dashboard is shown when a valid ID is given\"\"\"\n        dashboard = create_dashboard(admin_account)\n        url = reverse('dashboard-index-id', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['dashboard'].id == dashboard.id\n\n    def test_given_dashboard_id_that_does_not_exist_then_return_404(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that 404 is returned when a non-existing ID is given\"\"\"\n        url = reverse('dashboard-index-id', args=(9999,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_given_dashboard_id_for_other_account_when_shared_then_return_dashboard(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that a shared dashboard of another account can be accessed\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        url = reverse('dashboard-index-id', args=(other_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['dashboard'].id == other_dashboard.id\n\n    def test_given_dashboard_id_for_other_account_when_not_shared_then_return_404(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that 404 is returned when trying to access another account's dashboard\n        \"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=False)\n        url = reverse('dashboard-index-id', args=(other_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_given_subscribed_dashboard_id_then_return_dashboard(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that a subscribed dashboard of another account can be accessed\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        AccountDashboardSubscription.objects.create(\n            account=admin_account,\n            dashboard=other_dashboard,\n        )\n        url = reverse('dashboard-index-id', args=(other_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['dashboard'].id == other_dashboard.id\n\n    def test_given_subscribed_dashboard_id_then_return_is_subscribed(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that a subscribed dashboard of another account can be accessed\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        AccountDashboardSubscription.objects.create(\n            account=admin_account,\n            dashboard=other_dashboard,\n        )\n        url = reverse('dashboard-index-id', args=(other_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['is_subscribed'] is True\n\n    def test_given_own_dashboard_id_then_return_can_edit_true(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that can_edit is True for own dashboards\"\"\"\n        own_dashboard = create_dashboard(admin_account, is_shared=False)\n        url = reverse('dashboard-index-id', args=(own_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['can_edit'] is True\n\n    def test_given_other_account_dashboard_id_then_return_can_edit_false(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that can_edit is False for other account's dashboards\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        url = reverse('dashboard-index-id', args=(other_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['can_edit'] is False\n\n    def test_given_subscribed_dashboard_then_include_dashboard_in_response_list(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that subscribed dashboards of other accounts are included in the list\n        \"\"\"\n        subscribed_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        AccountDashboardSubscription.objects.create(\n            account=admin_account,\n            dashboard=subscribed_dashboard,\n        )\n        url = reverse('dashboard-index')\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert subscribed_dashboard in response.context['dashboards']\n\n    def test_given_shared_dashboard_id_when_not_subscribed_then_include_dashboard_last(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that a shared dashboard of another account is included last in the list\n        when the current account is not subscribed\n        \"\"\"\n        shared_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        url = reverse('dashboard-index-id', args=(shared_dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        dashboards = response.context['dashboards']\n        assert dashboards[-1] == shared_dashboard\n\n\nclass TestToggleDashboardSubscriptionView:\n    def test_when_not_subscribed_then_subscribe(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that a dashboard can be subscribed to\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        url = reverse('dashboard-toggle-subscribe', args=(other_dashboard.id,))\n        client.post(url, follow=True)\n\n        assert other_dashboard.is_subscribed(admin_account) is True\n\n    def test_when_subscribed_then_unsubscribe(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that a dashboard can be unsubscribed from\"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        AccountDashboardSubscription.objects.create(\n            account=admin_account,\n            dashboard=other_dashboard,\n        )\n        url = reverse('dashboard-toggle-subscribe', args=(other_dashboard.id,))\n        client.post(url, follow=True)\n\n        assert other_dashboard.is_subscribed(admin_account) is False\n\n    def test_given_dashboard_that_does_not_exist_then_return_404(\n        self, db, client, admin_account\n    ):\n        \"\"\"\n        Tests that 404 is returned when trying to subscribe to a non-existing dashboard\n        \"\"\"\n        url = reverse('dashboard-toggle-subscribe', args=(9999,))\n        response = client.post(url)\n\n        assert response.status_code == 404\n\n    def test_given_existing_dashboard_when_not_shared_then_return_404(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that 404 is returned when trying to subscribe to a non-shared dashboard\n        \"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=False)\n        url = reverse('dashboard-toggle-subscribe', args=(other_dashboard.id,))\n        response = client.post(url)\n\n        assert response.status_code == 404\n\n    def test_given_existing_shared_dashboard_id_then_return_refresh_header(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that subscribing to a shared dashboard returns a response with\n        HX-Refresh header set to true\n        \"\"\"\n        shared_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        url = reverse('dashboard-toggle-subscribe', args=(shared_dashboard.id,))\n        response = client.post(url)\n\n        assert response.status_code == 200\n        assert 'HX-Refresh' in response.headers\n        assert response.headers['HX-Refresh'] == 'true'\n\n\nclass TestToggleDashboardSharingView:\n    def test_given_unshared_dashboard_it_should_toggle_is_shared(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that a dashboard can be shared\"\"\"\n        dashboard = create_dashboard(admin_account, is_shared=False)\n        self._post_toggle_shared(client, dashboard.id, True)\n\n        dashboard.refresh_from_db()\n        assert dashboard.is_shared is True\n\n    def test_given_shared_dashboard_it_should_toggle_is_shared(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that a dashboard can be unshared\"\"\"\n        dashboard = create_dashboard(admin_account, is_shared=True)\n        self._post_toggle_shared(client, dashboard.id, False)\n\n        dashboard.refresh_from_db()\n        assert dashboard.is_shared is False\n\n    def test_given_any_dashboard_when_is_shared_is_unchanged_it_should_do_nothing(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that nothing changes when the sharing status is unchanged\"\"\"\n        for is_shared in (False, True):\n            dashboard = create_dashboard(admin_account, is_shared=is_shared)\n            self._post_toggle_shared(client, dashboard.id, is_shared)\n\n            dashboard.refresh_from_db()\n            assert dashboard.is_shared is is_shared\n\n    def test_given_shared_dashboard_with_subscriptions_when_unsharing_it_should_remove_subscriptions(  # noqa: E501\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that all subscriptions are removed when a dashboard is unshared\"\"\"\n        dashboard = create_dashboard(admin_account, is_shared=True)\n        AccountDashboardSubscription.objects.create(\n            account=non_admin_account,\n            dashboard=dashboard,\n        )\n        self._post_toggle_shared(client, dashboard.id, False)\n\n        assert not AccountDashboardSubscription.objects.filter(\n            dashboard=dashboard\n        ).exists()\n\n    def test_given_dashboard_that_does_not_exist_it_should_return_404(\n        self, client, admin_account\n    ):\n        \"\"\"\n        Tests that 404 is returned when trying to change sharing of a non-existing\n        dashboard\n        \"\"\"\n        response = self._post_toggle_shared(client, 9999, True)\n        assert response.status_code == 404\n\n    def test_given_dashboard_of_other_account_it_should_return_404(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"\n        Tests that 404 is returned when trying to change sharing of another account's\n        dashboard\n        \"\"\"\n        other_dashboard = create_dashboard(non_admin_account, is_shared=True)\n        response = self._post_toggle_shared(client, other_dashboard.id, True)\n\n        assert response.status_code == 404\n\n    @staticmethod\n    def _post_toggle_shared(client: Client, dashboard_id: int, is_shared: bool):\n        # Checkbox input returns 'on' if checked\n        is_shared_param = 'on' if is_shared else 'off'\n        url = reverse('dashboard-toggle-shared', args=(dashboard_id,))\n        return client.post(url, data={'is_shared': is_shared_param})\n\n\nclass TestImportDashboardViews:\n    @staticmethod\n    def _get_file_object(data, name='test.json'):\n        \"\"\"Helper to create a file-like object from a dictionary\"\"\"\n        file_content = json.dumps(data).encode('utf-8')\n        file_obj = BytesIO(file_content)\n        file_obj.name = name\n        return file_obj\n\n    def test_should_render_import_dashboard_modal(self, client):\n        \"\"\"\n        Tests that calling the import_dashboard_modal view will return a fragment\n        with a form to import a dashboard\n        \"\"\"\n        url = reverse('import-dashboard-modal')\n        response = client.get(url, follow=True)\n\n        assert 'id=\"import-dashboard-form\"' in smart_str(response.content)\n\n    def test_when_method_is_not_post_then_return_method_not_allowed(self, client):\n        \"\"\"Tests that import_dashboard only accepts POST requests\"\"\"\n        url = reverse('import-dashboard')\n        response = client.get(url)\n        assert response.status_code == 405\n\n    @patch(\"nav.web.webfront.views.can_modify_navlet\", return_value=False)\n    def test_when_user_is_without_permission_then_return_forbidden(\n        self, mock_can_modify, client\n    ):\n        \"\"\"Tests that users without permission cannot import dashboards\"\"\"\n        url = reverse('import-dashboard')\n        response = client.post(url)\n        assert response.status_code == 403\n\n    def test_when_no_file_is_provided_then_return_error(self, client):\n        \"\"\"Tests that importing without a file returns an error modal\"\"\"\n        url = reverse('import-dashboard')\n        response = client.post(url)\n\n        assert 'You need to provide a file' in smart_str(response.content)\n\n    def test_given_a_valid_dashboard_file_then_create_dashboard(\n        self, db, client, valid_dashboard_data\n    ):\n        \"\"\"Tests that importing a valid dashboard file creates a new dashboard\"\"\"\n        file_obj = self._get_file_object(\n            valid_dashboard_data, name='test_dashboard.json'\n        )\n\n        url = reverse('import-dashboard')\n        client.post(url, {'file': file_obj})\n\n        # Verify dashboard was created\n        assert AccountDashboard.objects.filter(\n            account_id=valid_dashboard_data['account'],\n            name=valid_dashboard_data['name'],\n        ).exists()\n\n    def test_given_a_valid_dashboard_file_then_return_redirect_header(\n        self, db, client, valid_dashboard_data\n    ):\n        \"\"\"Tests that importing a valid dashboard file returns a redirect header\"\"\"\n        file_obj = self._get_file_object(\n            valid_dashboard_data, name='test_dashboard.json'\n        )\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        dashboard = AccountDashboard.objects.get(\n            account_id=valid_dashboard_data['account'],\n            name=valid_dashboard_data['name'],\n        )\n\n        assert 'HX-Redirect' in response.headers\n        assert response.headers['HX-Redirect'] == reverse(\n            'dashboard-index-id', args=(dashboard.id,)\n        )\n\n    def test_given_dashboard_file_with_invalid_json_then_return_error(self, client):\n        \"\"\"Tests that importing invalid JSON returns an error message\"\"\"\n        file_content = b'invalid json content'\n        file_obj = BytesIO(file_content)\n        file_obj.name = 'invalid.json'\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n        assert 'import-dashboard-form' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_missing_fields_then_return_error(self, client):\n        \"\"\"Tests that importing JSON missing required fields returns an error\"\"\"\n        dashboard_data = {\n            'name': 'Test Dashboard',\n            # Missing num_columns, version, widgets\n        }\n\n        file_obj = self._get_file_object(dashboard_data, name='incomplete.json')\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_widgets_with_invalid_column_numbers_then_return_error(\n        self, client, admin_account\n    ):\n        \"\"\"Tests that widgets with invalid column numbers return an error\"\"\"\n        dashboard_data = {\n            'name': 'Test Dashboard',\n            'num_columns': 2,\n            'version': 1,\n            'account': admin_account.id,\n            'widgets': [\n                {\n                    'navlet': 'test_navlet',\n                    'column': 5,  # Invalid: greater than num_columns\n                    'order': 1,\n                    'preferences': {},\n                }\n            ],\n        }\n\n        file_obj = self._get_file_object(dashboard_data, name='invalid_column.json')\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_wrong_field_types_then_return_error(\n        self, client\n    ):\n        \"\"\"Tests that invalid field types return an error\"\"\"\n        dashboard_data = {\n            'name': 'Test Dashboard',\n            'num_columns': 'not_an_int',  # Should be int\n            'version': 1,\n            'widgets': [],\n        }\n\n        file_obj = self._get_file_object(dashboard_data, name='wrong_types.json')\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_non_dictionary_data_then_return_error(\n        self, client\n    ):\n        \"\"\"Tests that non-dictionary JSON data returns an error\"\"\"\n        dashboard_data = ['not', 'a', 'dictionary']\n\n        file_obj = self._get_file_object(dashboard_data, name='not_dict.json')\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_invalid_widget_structure_then_return_error(\n        self, client, valid_dashboard_data\n    ):\n        \"\"\"Tests that widgets that are not dictionaries return an error\"\"\"\n        dashboard_data = valid_dashboard_data.copy()\n        dashboard_data['widgets'] = [\n            \"not_a_dict\",  # This should be a dict\n            42,  # This should also be a dict\n        ]\n\n        file_obj = self._get_file_object(\n            dashboard_data, name='invalid_widget_structure.json'\n        )\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_widget_missing_required_fields_then_return_error(\n        self, client, valid_dashboard_data\n    ):\n        \"\"\"Tests that widgets missing required fields return an error\"\"\"\n        dashboard_data = valid_dashboard_data.copy()\n        dashboard_data['widgets'] = [\n            {\n                'navlet': 'test_navlet',\n                'column': 1,\n                # Missing 'preferences' and 'order' fields\n            }\n        ]\n\n        file_obj = self._get_file_object(\n            dashboard_data, name='widget_missing_fields.json'\n        )\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n    def test_given_dashboard_file_with_widget_wrong_field_types_then_return_error(\n        self, client, valid_dashboard_data\n    ):\n        \"\"\"Tests that widgets with wrong field types return an error\"\"\"\n        dashboard_data = valid_dashboard_data.copy()\n        dashboard_data['widgets'] = [\n            {\n                'navlet': None,  # Should be string\n                'column': 1.5,  # Should be int\n                'preferences': [],  # Should be dict\n                'order': True,  # Should be int\n            }\n        ]\n\n        file_obj = self._get_file_object(dashboard_data, name='widget_wrong_types.json')\n\n        url = reverse('import-dashboard')\n        response = client.post(url, {'file': file_obj})\n\n        assert response.status_code == 200\n        assert 'File is not a valid dashboard file' in smart_str(response.content)\n\n\nclass TestExportDashboardView:\n    \"\"\"\n    Tests for the export_dashboard view which allows exporting a dashboard as JSON\n    \"\"\"\n\n    def test_given_dashboard_id_when_account_is_owner_then_return_file(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the owner of a dashboard can export it\"\"\"\n        dashboard = create_dashboard(admin_account, name=\"My Dashboard\")\n        create_widget(dashboard)\n\n        url = reverse('export-dashboard', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.json()['name'] == dashboard.name\n\n    def test_given_shared_dashboard_id_when_account_is_not_owner_then_return_file(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that a shared dashboard can be exported by another account\"\"\"\n        dashboard = create_dashboard(\n            non_admin_account, name=\"Shared Dashboard\", is_shared=True\n        )\n        create_widget(dashboard)\n\n        url = reverse('export-dashboard', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.json()['name'] == dashboard.name\n\n    def test_given_unshared_dashboard_id_when_account_is_not_owner_then_return_404(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that an unshared dashboard cannot be exported by another account\"\"\"\n        dashboard = create_dashboard(\n            non_admin_account, name=\"Private Dashboard\", is_shared=False\n        )\n        create_widget(dashboard)\n\n        url = reverse('export-dashboard', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_given_dashboard_id_that_does_not_exist_then_return_404(self, client):\n        \"\"\"Tests that 404 is returned when trying to export a non-existing dashboard\"\"\"\n        url = reverse('export-dashboard', args=(9999,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_exported_file_should_have_correct_headers(self, db, client, admin_account):\n        \"\"\"Tests that the exported file has the correct headers\"\"\"\n        dashboard = create_dashboard(admin_account, name=\"My Dashboard\")\n        create_widget(dashboard)\n\n        url = reverse('export-dashboard', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response['Content-Type'] == 'application/json'\n        assert (\n            response['Content-Disposition']\n            == f'attachment; filename={quote(dashboard.name)}.json'\n        )\n\n\nclass TestFindDashboardUtil:\n    \"\"\"\n    Tests for the find_dashboard utility function which determines which dashboard\n    to show based on the given account and optional dashboard ID\n    \"\"\"\n\n    def test_given_no_dashboard_id_then_return_default_dashboard(\n        self, db, non_admin_account\n    ):\n        \"\"\"Tests that the default dashboard is returned when no ID is given\"\"\"\n        default_dashboard = non_admin_account.default_dashboard\n\n        dashboard = find_dashboard(non_admin_account)\n        assert dashboard == default_dashboard\n\n    def test_given_valid_dashboard_id_then_return_that_dashboard(\n        self, db, non_admin_account\n    ):\n        \"\"\"Tests that the specified dashboard is returned when a valid ID is given\"\"\"\n        dashboard = create_dashboard(non_admin_account, name=\"Test dashboard\")\n\n        found_dashboard = find_dashboard(non_admin_account, dashboard_id=dashboard.id)\n        assert found_dashboard == dashboard\n\n    def test_given_dashboard_id_that_does_not_exist_then_return_404(\n        self, db, non_admin_account\n    ):\n        \"\"\"Tests that 404 is raised when a non-existing dashboard ID is given\"\"\"\n\n        with pytest.raises(Http404):\n            find_dashboard(non_admin_account, dashboard_id=9999)\n\n    def test_given_no_dashboard_id_when_no_default_and_no_dashboards_then_return_404(\n        self, db, non_admin_account\n    ):\n        \"\"\"Tests that 404 is raised when no dashboards exist for the account\"\"\"\n        # Clean up any existing dashboards\n        AccountDashboard.objects.filter(account=non_admin_account).delete()\n        with pytest.raises(Http404):\n            find_dashboard(non_admin_account)\n\n    def test_given_no_dashboard_id_then_returns_dashboard_with_most_widgets(\n        self, db, non_admin_account\n    ):\n        \"\"\"\n        Tests that when no ID is given and no default dashboard is set, the dashboard\n        with the most widgets is returned\n        \"\"\"\n        # Clean up any existing dashboards\n        AccountDashboard.objects.filter(account=non_admin_account).delete()\n        # Create first dashboard with three widgets\n        first_dashboard = create_dashboard(non_admin_account, name=\"First\")\n        for _ in range(3):\n            create_widget(first_dashboard)\n            create_widget(first_dashboard)\n        # Create second dashboard with no widgets\n        create_dashboard(non_admin_account, name=\"Second\")\n\n        dashboard = find_dashboard(non_admin_account)\n        assert dashboard == first_dashboard\n\n    def test_given_dashboard_id_for_other_account_when_shared_then_return_dashboard(\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"Tests that a shared dashboard of another account can be accessed\"\"\"\n        other_dashboard = create_dashboard(admin_account, name=\"Other\", is_shared=True)\n        found_dashboard = find_dashboard(\n            non_admin_account, dashboard_id=other_dashboard.id\n        )\n        assert found_dashboard == other_dashboard\n\n    def test_given_dashboard_id_for_other_account_when_not_shared_then_return_404(\n        self, db, client, non_admin_account, admin_account\n    ):\n        \"\"\"\n        Test that 404 is raised when accessing a non-shared dashboard of another account\n        \"\"\"\n        other_dashboard = create_dashboard(admin_account, name=\"Other\", is_shared=False)\n\n        with pytest.raises(Http404):\n            find_dashboard(non_admin_account, dashboard_id=other_dashboard.id)\n\n    def test_given_own_dashboard_then_find_dashboard_sets_shared_by_other_to_false(\n        self, db, non_admin_account\n    ):\n        \"\"\"Tests that find_dashboard sets shared_by_other to False for own dashboards\"\"\"\n        dashboard = create_dashboard(non_admin_account, name=\"Own\", is_shared=True)\n        found_dashboard = find_dashboard(non_admin_account, dashboard_id=dashboard.id)\n        assert found_dashboard.shared_by_other is False\n\n    def test_given_dashboard_of_another_account_then_find_dashboard_sets_shared_by_other_to_true(  # noqa: E501\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"\n        Test that find_dashboard sets shared_by_other to True for other a dashboard\n        of another account\n        \"\"\"\n        other_dashboard = create_dashboard(admin_account, name=\"Other\", is_shared=True)\n        found_dashboard = find_dashboard(\n            non_admin_account, dashboard_id=other_dashboard.id\n        )\n        assert found_dashboard.shared_by_other is True\n\n\nclass TestGetDashboardsForAccount:\n    \"\"\"\n    Tests for the get_dashboards_for_account utility function which retrieves all\n    dashboards for a given account, including shared dashboards from other accounts\n    \"\"\"\n\n    def test_given_account_then_return_all_own_dashboards(self, db, non_admin_account):\n        \"\"\"Tests that all own dashboards are returned\"\"\"\n        default_dashboard = non_admin_account.default_dashboard\n        other_dashboard = create_dashboard(\n            non_admin_account, name=\"Own 1\", is_shared=False\n        )\n\n        dashboards = get_dashboards_for_account(non_admin_account)\n        assert default_dashboard in dashboards\n        assert other_dashboard in dashboards\n\n    def test_given_account_with_no_subscriptions_then_return_own_dashboards(\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"\n        Tests that only own dashboards are returned when there are no subscriptions\n        \"\"\"\n        own_dashboard = create_dashboard(non_admin_account, name=\"Own\", is_shared=False)\n        shared_dashboard = create_dashboard(\n            admin_account, name=\"Shared\", is_shared=True\n        )\n\n        dashboards = get_dashboards_for_account(non_admin_account)\n        assert own_dashboard in dashboards\n        assert shared_dashboard not in dashboards\n\n    def test_given_account_with_subscriptions_then_return_shared_dashboards(\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"Tests that shared dashboards are returned when there are subscriptions\"\"\"\n        own_dashboard = create_dashboard(non_admin_account, name=\"Own\", is_shared=False)\n        shared_dashboard = create_dashboard(\n            admin_account, name=\"Shared\", is_shared=True\n        )\n        AccountDashboardSubscription.objects.create(\n            account=non_admin_account,\n            dashboard=shared_dashboard,\n        )\n\n        dashboards = get_dashboards_for_account(non_admin_account)\n\n        assert own_dashboard in dashboards\n        assert shared_dashboard in dashboards\n\n    def test_given_dashboard_subscription_then_shared_by_other_is_set_correctly(\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"\n        Tests that shared_by_other is set correctly for shared dashboards\n        \"\"\"\n        shared_dashboard = create_dashboard(\n            admin_account, name=\"Shared\", is_shared=True\n        )\n        AccountDashboardSubscription.objects.create(\n            account=non_admin_account,\n            dashboard=shared_dashboard,\n        )\n\n        dashboards = get_dashboards_for_account(non_admin_account)\n        assert all(\n            dashboard.shared_by_other is (dashboard.account != non_admin_account)\n            for dashboard in dashboards\n        )\n\n    def test_given_dashboard_subscription_then_can_edit_is_set_correctly(\n        self, db, non_admin_account, admin_account\n    ):\n        \"\"\"\n        Tests that can_edit is set correctly for shared dashboards\n        \"\"\"\n        shared_dashboard = create_dashboard(\n            admin_account, name=\"Shared\", is_shared=True\n        )\n        AccountDashboardSubscription.objects.create(\n            account=non_admin_account,\n            dashboard=shared_dashboard,\n        )\n        dashboards = get_dashboards_for_account(non_admin_account)\n        assert all(\n            dashboard.can_edit is (dashboard.account == non_admin_account)\n            for dashboard in dashboards\n        )\n        assert len(dashboards) == 2  # Default + shared\n\n\nclass TestDashboardSearchViews:\n    def test_should_render_search_dashboard_modal(self, client):\n        \"\"\"\n        Tests that calling the search_dashboard_modal view will return a fragment\n        with a form to search dashboards\n        \"\"\"\n        url = reverse('dashboard-search-modal')\n        response = client.get(url)\n\n        assert 'id=\"dashboard-search-form\"' in smart_str(response.content)\n\n    def test_given_dashboard_name_then_return_matching_dashboards(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that searching returns matching dashboards\"\"\"\n        shared_dashboard = create_dashboard(\n            non_admin_account, name=\"A cool dashboard\", is_shared=True\n        )\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': 'cool'})\n\n        assert response.status_code == 200\n        assert shared_dashboard in response.context['dashboards']\n\n    def test_given_account_name_then_return_matching_dashboards(\n        self, db, client, non_admin_account, admin_account\n    ):\n        \"\"\"Tests that searching returns matching dashboards by account name\"\"\"\n        shared_dashboard = create_dashboard(\n            non_admin_account, name=\"A cool dashboard\", is_shared=True\n        )\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': non_admin_account.name})\n\n        assert response.status_code == 200\n        assert shared_dashboard in response.context['dashboards']\n\n    def test_given_account_login_then_return_matching_dashboards(\n        self, db, client, non_admin_account, admin_account\n    ):\n        \"\"\"Tests that searching returns matching dashboards by account login\"\"\"\n        shared_dashboard = create_dashboard(\n            non_admin_account, name=\"A cool dashboard\", is_shared=True\n        )\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': non_admin_account.login})\n\n        assert response.status_code == 200\n        assert shared_dashboard in response.context['dashboards']\n\n    def test_given_empty_search_then_return_empty_list(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that searching with an empty string returns an empty list\"\"\"\n        create_dashboard(non_admin_account, name=\"A cool dashboard\", is_shared=True)\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': ''})\n\n        assert response.status_code == 200\n        assert len(response.context['dashboards']) == 0\n\n    def test_given_empty_search_then_return_empty_template(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that searching with an empty string returns an empty template\"\"\"\n        create_dashboard(non_admin_account, name=\"A cool dashboard\", is_shared=True)\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': ''})\n\n        assert response.status_code == 200\n        assert 'No dashboards found' not in smart_str(response.content)\n        assert 'search-result-item' not in smart_str(response.content)\n\n    def test_given_no_matching_dashboards_then_return_empty_list(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that searching returns an empty list when there are no matches\"\"\"\n        create_dashboard(non_admin_account, name=\"A cool dashboard\", is_shared=True)\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': 'nonexistent'})\n\n        assert response.status_code == 200\n        assert len(response.context['dashboards']) == 0\n\n    def test_given_dashboard_name_when_account_is_owner_then_return_empty_list(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that searching does not return own dashboards\"\"\"\n        own_dashboard = create_dashboard(\n            admin_account, name=\"A cool dashboard\", is_shared=False\n        )\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': 'cool'})\n\n        assert response.status_code == 200\n        assert own_dashboard not in response.context['dashboards']\n        assert len(response.context['dashboards']) == 0\n\n    def test_given_empty_result_then_return_no_dashboards_message(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that searching with no results returns a no dashboards message\"\"\"\n        create_dashboard(non_admin_account, name=\"A cool dashboard\", is_shared=True)\n\n        url = reverse('dashboard-search')\n        response = client.post(url, {'search': 'nonexistent'})\n\n        assert response.status_code == 200\n        assert 'No dashboards found' in smart_str(response.content)\n\n\nclass TestSaveDashboardColumns:\n    def test_given_valid_column_count_then_it_should_update_dashboard(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that valid column count updates the dashboard\"\"\"\n        dashboard = create_dashboard(admin_account)\n        new_columns = 4\n        url = reverse('save-dashboard-columns', args=(dashboard.id,))\n        response = client.post(url, data={'num_columns': new_columns})\n        dashboard.refresh_from_db()\n\n        assert response.status_code == 200\n        assert dashboard.num_columns == new_columns\n        assert f'Dashboard updated to {new_columns} columns' in smart_str(\n            response.content\n        )\n\n    def test_given_dashboard_that_does_not_exist_then_it_should_return_404(\n        self, client\n    ):\n        \"\"\"Tests that updating a non-existing dashboard returns 404\"\"\"\n        url = reverse('save-dashboard-columns', args=(9999,))\n        response = client.post(url, data={'num_columns': 3})\n\n        assert response.status_code == 404\n\n    def test_given_dashboard_of_other_account_then_it_should_return_404(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that updating another account's dashboard returns 404\"\"\"\n        other_dashboard = create_dashboard(non_admin_account)\n        url = reverse('save-dashboard-columns', args=(other_dashboard.id,))\n        response = client.post(url, data={'num_columns': 3})\n\n        assert response.status_code == 404\n\n    def test_given_missing_num_columns_parameter_then_it_should_return_400(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that missing num_columns parameter returns 400\"\"\"\n        dashboard = create_dashboard(admin_account)\n        url = reverse('save-dashboard-columns', args=(dashboard.id,))\n        response = client.post(url, data={})\n\n        assert response.status_code == 400\n\n    def test_given_non_digit_num_columns_then_it_should_return_400(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that 400 is returned when num_columns is not a digit\"\"\"\n        dashboard = create_dashboard(admin_account)\n\n        url = reverse('save-dashboard-columns', args=(dashboard.id,))\n        response = client.post(url, {'num_columns': 'not_a_number'})\n\n        assert response.status_code == 400\n\n    def test_response_should_contain_nav_dashboard_reload_event(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that response triggers client event for dashboard reload\"\"\"\n        dashboard = create_dashboard(admin_account)\n        new_columns = 5\n\n        url = reverse('save-dashboard-columns', args=(dashboard.id,))\n        response = client.post(url, {'num_columns': str(new_columns)})\n\n        assert response.status_code == 200\n        assert 'nav.dashboard.reload' in response.headers['HX-Trigger']\n\n\nclass TestLoadDashboardView:\n    def test_given_existing_dashboard_it_should_return_navlets_template(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that loading an existing dashboard returns the navlets template\"\"\"\n        dashboard = create_dashboard(admin_account, name=\"Load Test Dashboard\")\n        create_widget(dashboard)\n\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'class=\"row' in smart_str(response.content)\n\n    def test_given_nonexistent_dashboard_it_should_return_404(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that loading a non-existent dashboard returns 404\"\"\"\n        url = reverse('dashboard-load', args=(9999,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_given_other_users_private_dashboard_it_should_return_404(\n        self, db, client, non_admin_account\n    ):\n        \"\"\"Tests that loading another user's private dashboard returns 404\"\"\"\n        dashboard = create_dashboard(non_admin_account, is_shared=False)\n\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 404\n\n    def test_given_other_users_shared_dashboard_it_should_return_navlets(\n        self, db, client, admin_account, non_admin_account\n    ):\n        \"\"\"Tests that loading another user's shared dashboard works\"\"\"\n        dashboard = create_dashboard(non_admin_account, is_shared=True)\n        create_widget(dashboard)\n\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'class=\"row' in smart_str(response.content)\n\n    def test_given_dashboard_with_compact_preference_it_should_add_collapse_class(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that compact preference adds collapse class to row\"\"\"\n        admin_account.preferences['widget_display_density'] = 'compact'\n        admin_account.save()\n\n        dashboard = create_dashboard(admin_account)\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert 'class=\"row collapse\"' in smart_str(response.content)\n\n    def test_given_dashboard_with_no_widgets_it_should_show_empty_state(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that dashboard with no widgets shows proper empty state\"\"\"\n        dashboard = create_dashboard(admin_account)\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        assert response.context['has_navlets'] is False\n        assert \"no-widgets-message\" in smart_str(response.content)\n\n    def test_dashboard_load_should_contain_correct_number_of_columns(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that the loaded dashboard contains the correct number of columns\"\"\"\n        num_columns = 4\n        dashboard = create_dashboard(admin_account)\n        dashboard.num_columns = num_columns\n        dashboard.save()\n\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n\n        assert response.status_code == 200\n        content = smart_str(response.content)\n        for col_index in range(1, num_columns + 1):\n            assert f'data-col=\"{col_index}\"' in content\n        assert f'data-col=\"{num_columns + 1}\"' not in content\n\n    def test_given_navlets_in_different_columns_it_should_distribute_them_correctly(\n        self, db, client, admin_account\n    ):\n        \"\"\"Tests that navlets are distributed correctly across columns when loading\"\"\"\n        dashboard = create_dashboard(admin_account)\n        widget1 = create_widget(dashboard, column=1, order=0)\n        widget2 = create_widget(dashboard, column=2, order=0)\n        widget3 = create_widget(dashboard, column=1, order=1)\n\n        url = reverse('dashboard-load', args=(dashboard.id,))\n        response = client.get(url)\n        assert response.status_code == 200\n\n        columns = response.context['columns']\n        assert isinstance(columns, dict)\n        assert set(columns.keys()) >= {1, 2}\n\n        # Check widgets are in the correct columns and orders\n        column1_ids = [w['id'] for w in columns[1]]\n        column2_ids = [w['id'] for w in columns[2]]\n\n        assert column1_ids == [widget1.id, widget3.id]\n        assert column2_ids == [widget2.id]\n\n\ndef create_dashboard(account, name=\"Test Dashboard\", is_shared=False):\n    return AccountDashboard.objects.create(\n        name=name,\n        account=account,\n        is_shared=is_shared,\n    )\n\n\ndef create_widget(\n    dashboard, navlet='nav.web.navlets.welcome.WelcomeNavlet', column=1, order=0\n):\n    return AccountNavlet.objects.create(\n        dashboard=dashboard,\n        account=dashboard.account,\n        navlet=navlet,\n        column=column,\n        order=order,\n    )\n\n\n@pytest.fixture\ndef valid_dashboard_data(admin_account):\n    dashboard_data = {\n        'name': 'Valid Dashboard',\n        'num_columns': 3,\n        'account': admin_account.id,\n        'version': 1,\n        'widgets': [],\n    }\n    yield dashboard_data\n"
  },
  {
    "path": "tests/integration/widget_test.py",
    "content": "from datetime import datetime, timedelta\n\nfrom django.urls import reverse\n\nfrom nav.web.navlets.roomstatus import RoomStatus\nfrom nav.web.navlets.feedreader import FeedReaderNavlet\nfrom nav.models.event import AlertHistory, AlertHistoryMessage\nfrom nav.models.profiles import AccountDashboard, AccountNavlet\nfrom nav.models.fields import INFINITY\n\nimport pytest\n\n\ndef test_roomstatus_should_not_fail_on_multiple_messages(alerthist_with_two_messages):\n    widget = RoomStatus()\n    result = widget.get_context_data_view({})\n    print(result)\n    assert 'results' in result\n\n    matching = [\n        r\n        for r in result['results']\n        if r['netbox'] == alerthist_with_two_messages.netbox.id\n    ]\n    assert len(matching) == 1\n    assert matching[0]['netbox_object'] == alerthist_with_two_messages.netbox\n\n\ndef test_feedreader_widget_should_get_nav_blog_posts():\n    widget = FeedReaderNavlet()\n    feed = widget._get_feed('http://blog.nav.uninett.no/rss', maxposts=0)\n    print(repr(feed))\n    assert len(feed) > 0\n\n\ndef test_get_navlet_should_return_200(client, admin_navlet):\n    \"\"\"Tests a GET request against each of the admin user's navlets\"\"\"\n    url = reverse('get-user-navlet', kwargs={'navlet_id': admin_navlet.id})\n    print(\n        \"Testing admin navlet instance of {!r} at {!r}\".format(admin_navlet.navlet, url)\n    )\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_get_pdu_navlet_in_edit_mode_should_return_200(client, admin_account):\n    \"\"\"Tests a GET request against the pdu navlet in edit mode\"\"\"\n    dashboard = AccountDashboard.objects.create(\n        account=admin_account, name=\"Test Dashboard\"\n    )\n    pdu_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.pdu.PduWidget\",\n        account=admin_account,\n        dashboard=dashboard,\n    )\n    url = reverse('get-user-navlet', kwargs={'navlet_id': pdu_navlet.id}) + \"?mode=EDIT\"\n    print(\n        \"Testing admin navlet instance of {!r} at {!r}\".format(pdu_navlet.navlet, url)\n    )\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_get_navlet_with_invalid_id_should_return_404(client):\n    \"\"\"Tests a GET request against a non-existing navlet id\"\"\"\n    url = reverse('get-user-navlet', kwargs={'navlet_id': 999})\n    response = client.get(url)\n    assert response.status_code == 404\n\n\ndef test_given_navlet_belonging_to_other_account_when_shared_then_return_200(\n    client, admin_account, non_admin_account\n):\n    \"\"\"\n    Tests a GET request against a navlet belonging to another account\n\n    Should return 200 if `dashboard.is_shared == True`\n    \"\"\"\n    dashboard = AccountDashboard.objects.create(\n        account=non_admin_account, name=\"User Dashboard\", is_shared=True\n    )\n    user_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.welcome.WelcomeNavlet\",\n        account=non_admin_account,\n        dashboard=dashboard,\n    )\n    url = reverse('get-user-navlet', kwargs={'navlet_id': user_navlet.id})\n    response = client.get(url)\n    assert response.status_code == 200\n\n\ndef test_given_navlet_belonging_to_other_account_when_not_shared_then_return_403(\n    client, admin_account, non_admin_account\n):\n    \"\"\"\n    Tests a GET request against a navlet belonging to another account\n\n    Should return 403 unless `dashboard.is_shared == True`\n    \"\"\"\n    dashboard = AccountDashboard.objects.create(\n        account=non_admin_account, name=\"User Dashboard\"\n    )\n    user_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.welcome.WelcomeNavlet\",\n        account=non_admin_account,\n        dashboard=dashboard,\n    )\n    url = reverse('get-user-navlet', kwargs={'navlet_id': user_navlet.id})\n    response = client.get(url)\n    assert response.status_code == 403\n\n\ndef test_given_navlet_id_when_navlet_type_is_invalid_then_return_error_widget(\n    client, admin_account\n):\n    \"\"\"\n    Tests a GET request against a navlet with an invalid navlet type\n\n    Should return a navlet with title \"Error\"\n    \"\"\"\n\n    dashboard = AccountDashboard.objects.create(\n        account=admin_account, name=\"Test Dashboard\"\n    )\n    invalid_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.invalid.InvalidNavlet\",\n        account=admin_account,\n        dashboard=dashboard,\n    )\n    url = reverse('get-user-navlet', kwargs={'navlet_id': invalid_navlet.id})\n    response = client.get(url)\n\n    navlet = response.context['navlet']\n    assert navlet.title == \"Error\"\n\n\ndef test_given_htmx_request_with_non_existent_navlet_id_then_it_should_return_htmx_error_response(  # noqa: E501\n    client, admin_account\n):\n    \"\"\"\n    Tests that dispatcher returns HTMX error response for non-existent navlet ID\n    on HTMX requests\n    \"\"\"\n    url = reverse('get-user-navlet', kwargs={'navlet_id': 999})\n    response = client.get(url, HTTP_HX_REQUEST='true')\n\n    assert response.status_code == 200\n    assert response.context['error_message'] == 'This widget does not exist'\n\n\ndef test_given_htmx_request_with_unauthorized_navlet_then_it_should_return_htmx_error_response(  # noqa: E501\n    client, admin_account, non_admin_account\n):\n    \"\"\"\n    Tests that dispatcher returns HTMX error response for unauthorized access\n    on HTMX requests\n    \"\"\"\n    dashboard = AccountDashboard.objects.create(\n        account=non_admin_account, name=\"Private Dashboard\", is_shared=False\n    )\n    private_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.welcome.WelcomeNavlet\",\n        account=non_admin_account,\n        dashboard=dashboard,\n    )\n\n    # Admin account tries to access non_admin_account's private navlet via HTMX\n    url = reverse('get-user-navlet', kwargs={'navlet_id': private_navlet.id})\n    response = client.get(url, HTTP_HX_REQUEST='true')\n\n    assert response.status_code == 200\n    assert response.context['error_message'] == 'Not authorized to view this widget'\n\n\ndef test_when_sudoer_requests_unauthorized_navlet_via_htmx_then_it_should_not_crash(\n    client, admin_account, non_admin_account\n):\n    \"\"\"Regression test: the error response template should render without\n    NoReverseMatch even when the user is a sudoer (which causes the navlet\n    header action buttons to be rendered).\n    \"\"\"\n    dashboard = AccountDashboard.objects.create(\n        account=non_admin_account, name=\"Private Dashboard\", is_shared=False\n    )\n    private_navlet = AccountNavlet.objects.create(\n        navlet=\"nav.web.navlets.welcome.WelcomeNavlet\",\n        account=non_admin_account,\n        dashboard=dashboard,\n    )\n\n    # Simulate admin having sudoed into another account\n    session = client.session\n    session['sudoer'] = admin_account.id\n    session.save()\n\n    url = reverse('get-user-navlet', kwargs={'navlet_id': private_navlet.id})\n    response = client.get(url, HTTP_HX_REQUEST='true')\n\n    assert response.status_code == 200\n    assert response.context['error_message'] == 'Not authorized to view this widget'\n\n\n#\n# Fixtures\n#\n\n\n@pytest.fixture()\ndef alerthist_with_two_messages(db, localhost):\n    alert = AlertHistory(\n        source_id='ipdevpoll',\n        netbox=localhost,\n        start_time=datetime.now() - timedelta(hours=1),\n        end_time=INFINITY,\n        event_type_id='boxState',\n        value=100,\n        severity=3,\n    )\n    alert.save()\n    msg1 = AlertHistoryMessage(\n        alert_history=alert,\n        state=AlertHistoryMessage.STATE_START,\n        type='sms',\n        language='en',\n        message='Problem detected',\n    )\n    msg1.save()\n    msg2 = AlertHistoryMessage(\n        alert_history=alert,\n        state=AlertHistoryMessage.STATE_END,\n        type='sms',\n        language='en',\n        message='Problem resolved',\n    )\n    msg2.save()\n\n    yield alert\n    alert.delete()\n"
  },
  {
    "path": "tests/javascript-test.sh",
    "content": "#!/bin/bash -e\nif [ ! -n \"$1\" ]; then\n    echo \"Need path to workspace\"\n    exit 1\nfi\n\nWORKSPACE=\"$(realpath $1)\"\nJSDIR=\"python/nav/web/static/js\"\nREPORTDIR=\"$WORKSPACE/reports\"\n\nNPM=`which npm`\n\ncd ${JSDIR}\nnpm ci\n\necho \"Running jshint\"\ncd \"${WORKSPACE}\"\nJAVASCRIPT_FILES=( $(find ${JSDIR}/src -iname \"*.js\" -print) )\n\njshint() {\n    local JSHINTDIR=${JSDIR}/node_modules/jshint/bin\n    for cmd in hint jshint; do\n\tif [ -x ${JSHINTDIR}/${cmd} ]; then\n\t    ${JSHINTDIR}/${cmd} \"$@\" || true\n\t    return\n\tfi\n    done\n    echo \"jshint executable was not found\"\n}\njshint --config ${JSDIR}/.jshintrc ${JAVASCRIPT_FILES[@]} --jslint-reporter > \"${REPORTDIR}/javascript-jshint.xml\" || true\n\n# Verify that jshint was running as jshint will have non-zero exit if ANY linting errors is found.\n[ -s \"${REPORTDIR}/javascript-jshint.xml\" ]\n\n# Point to Playwright's Chromium if CHROME_BIN is not already set.\n# Playwright's directory layout varies across versions:\n#   Old: chromium-<rev>/chrome-linux/chrome, chromium-<rev>/chrome-mac/Chromium.app/...\n#   New: chromium-<rev>/chrome-linux-x64/chrome, chromium-<rev>/chrome-mac-arm64/Google Chrome for Testing.app/...\n# PLAYWRIGHT_BROWSERS_PATH may override the default cache location (e.g. in devcontainers).\nif [[ -z \"$CHROME_BIN\" ]]; then\n    PLAYWRIGHT_CHROME=$(find \\\n        ${PLAYWRIGHT_BROWSERS_PATH:+\"$PLAYWRIGHT_BROWSERS_PATH\"} \\\n        \"$HOME/.cache/ms-playwright\" \\\n        \"$HOME/Library/Caches/ms-playwright\" \\\n        \"$WORKSPACE/.cache/ms-playwright\" \\\n        \\( -path \"*/chromium-*/chrome-linux*/chrome\" \\\n           -o \\( -path \"*/chromium-*/chrome-mac*/*.app/Contents/MacOS/*\" \\\n                 ! -path \"*/Helpers/*\" ! -path \"*/Frameworks/*\" \\) \\) \\\n        2>/dev/null | sort -Vr | head -1)\n    [[ -n \"$PLAYWRIGHT_CHROME\" ]] && export CHROME_BIN=\"$PLAYWRIGHT_CHROME\"\nfi\n\n\"${JSDIR}/node_modules/karma/bin/karma\" start \"${JSDIR}/test/karma.conf.buildserver.js\"\n"
  },
  {
    "path": "tests/requirements.txt",
    "content": "coverage>=7.0.0\nmock==2.0.0\npytest>=8.3.3\npytest-metadata==3.1.1\npytest-cov>=6.0.0\npytest-html>=4.0.0\npytest-playwright>=0.6.2\npytest-timeout==2.3.1\npytest-twisted==1.14.3\npytidylib==0.3.2\nsnmpsim>=1.0,!=1.1.6,!=1.2.2\ntoml\nwhisper>=0.9.9\n"
  },
  {
    "path": "tests/setup_test_config.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Test environment setup helper.\n\nProvides functions to create a temporary NAV config directory and initialize\na test database.\n\"\"\"\n\nimport getpass\nimport os\nimport subprocess\nimport tempfile\nfrom pathlib import Path\n\n# Password used for the NAV admin user during test runs\nADMIN_PASSWORD = \"omicronpersei8\"\n\n\ndef ensure_config_dir() -> Path:\n    \"\"\"Create a temporary NAV config dir with pristine example configs.\n\n    Sets ``NAV_CONFIG_DIR`` so that all subsequent NAV imports find these\n    files.  Returns the path to the new directory.  Idempotent: if a\n    config dir has already been created this session (or the environment variable has\n    been overridden by the test suite initiator), it is returned as-is.\n    \"\"\"\n    existing = os.environ.get(\"NAV_CONFIG_DIR\")\n    if existing:\n        return Path(existing)\n\n    config_dir = Path(tempfile.mkdtemp(prefix=\"nav_test_config_\"))\n    print(f\"Using {config_dir} as NAV config directory for this test session.\")\n    os.environ[\"NAV_CONFIG_DIR\"] = str(config_dir)\n\n    from nav.config import install_example_config_files\n\n    install_example_config_files(str(config_dir))\n\n    _write_db_conf(config_dir)\n    _patch_nav_conf(config_dir)\n    _patch_graphite_conf(config_dir)\n    _refresh_nav_config()\n    return config_dir\n\n\ndef create_test_database() -> None:\n    \"\"\"Drop, recreate and populate the NAV test database.\n\n    Expects ``NAV_CONFIG_DIR`` to already be set (done by `ensure_config_dir`).\n    \"\"\"\n    subprocess.check_call([\"navsyncdb\", \"-c\", \"--drop-database\"])\n    _load_test_data()\n    _set_admin_password()\n\n\n# --- helpers ----------------------------------------------------------------\n\n\ndef _get_test_database_name() -> str:\n    name = os.environ.get(\"PGDATABASE\", \"nav_test\")\n    print(f\"Using {name} as NAV test database for this test session\")\n    return name\n\n\ndef _write_db_conf(config_dir: Path) -> None:\n    host = os.environ.get(\"PGHOST\", \"localhost\")\n    port = os.environ.get(\"PGPORT\", \"5432\")\n    user = os.environ.get(\"PGUSER\", \"nav\")\n    password = os.environ.get(\"PGPASSWORD\", \"\")\n    dbname = _get_test_database_name()\n\n    db_conf = config_dir / \"db.conf\"\n    db_conf.write_text(\n        f\"dbhost={host}\\n\"\n        f\"dbport={port}\\n\"\n        f\"db_nav={dbname}\\n\"\n        f\"script_default={user}\\n\"\n        f\"userpw_{user}={password}\\n\"\n    )\n\n\ndef _patch_nav_conf(config_dir: Path) -> None:\n    nav_conf = config_dir / \"nav.conf\"\n    text = nav_conf.read_text()\n\n    upload_dir = config_dir / \"uploads\"\n    upload_dir.mkdir(exist_ok=True)\n\n    replacements = {\n        \"NAV_USER=navcron\": f\"NAV_USER={getpass.getuser()}\",\n        \"#DJANGO_DEBUG=True\": \"DJANGO_DEBUG=True\",\n        \"#UPLOAD_DIR=/usr/share/nav/var/uploads\": f\"UPLOAD_DIR={upload_dir}\",\n    }\n    for old, new in replacements.items():\n        text = text.replace(old, new)\n\n    nav_conf.write_text(text)\n\n\ndef _patch_graphite_conf(config_dir: Path) -> None:\n    graphite_conf = config_dir / \"graphite.conf\"\n    text = graphite_conf.read_text()\n    text = text.replace(\n        \"#base=http://localhost:8000/\",\n        \"base=http://localhost:9000\",\n    )\n    graphite_conf.write_text(text)\n\n\ndef _refresh_nav_config() -> None:\n    \"\"\"Re-read nav.conf into the already-imported NAV_CONFIG dict.\"\"\"\n    from nav.config import NAV_CONFIG, read_flat_config\n\n    NAV_CONFIG.update(read_flat_config(\"nav.conf\"))\n\n\ndef _load_test_data() -> None:\n    test_data = Path(__file__).resolve().parent / \"test-data.sql\"\n    dbname = _get_test_database_name()\n    subprocess.check_call([\"psql\", \"-f\", str(test_data), dbname])\n\n\ndef _set_admin_password() -> None:\n    dbname = _get_test_database_name()\n    subprocess.check_call(\n        [\n            \"psql\",\n            \"-c\",\n            f\"UPDATE account SET password = '{ADMIN_PASSWORD}' WHERE login = 'admin'\",\n            dbname,\n        ]\n    )\n"
  },
  {
    "path": "tests/test-data.sql",
    "content": "-- -*- coding: utf-8 -*-\n\\set ON_ERROR_STOP on\n\n-- Add non-ASCII chars to the admin user's login name to test encoding\n-- compliance for all pages\nUPDATE account SET name = 'Administrator ÆØÅ' WHERE login = 'admin';\n\n-- Add some non-ASCII test data to reveal more potential problems during\n-- the shift to Python 3\nINSERT INTO location (locationid) VALUES ('bø');\nINSERT INTO room (roomid, locationid) VALUES ('bø-123', 'bø');\n\n-- Add a test netbox\nINSERT INTO netbox (ip, typeid, sysname, catid, orgid, roomid)\nVALUES ('192.168.0.42', (SELECT typeid FROM TYPE WHERE typename = 'hp2626A'), 'test-gsw.example.org', 'GSW', 'myorg', 'bø-123');\nINSERT INTO interface (netboxid, ifindex, ifname, ifdescr, iftype, speed, ifphysaddress, ifadminstatus, ifoperstatus, ifalias, vlan)\nVALUES ((SELECT netboxid FROM netbox WHERE sysname='test-gsw.example.org'), 1000, '1', 'Port #1', 6, 1000, '0c:0f:fe:eb:00:b5', 1, 1, 'Uplink to space', 42);\n\n-- Add some test prefixes\nINSERT INTO vlan (nettype, netident) VALUES ('scope', 'test scope');\nINSERT INTO prefix (netaddr, vlanid) VALUES ('10.0.0.0/8', (SELECT vlanid FROM vlan WHERE netident='test scope'));\n\nINSERT INTO vlan (nettype, netident) VALUES ('lan', 'test lan');\nINSERT INTO prefix (netaddr, vlanid) VALUES ('10.42.0.0/24', (SELECT vlanid FROM vlan WHERE netident='test lan'));\n\n-- Add some arp data\nINSERT INTO arp (netboxid, sysname, ip, mac, start_time)\nVALUES (\n    (SELECT netboxid FROM netbox WHERE sysname='test-gsw.example.org'),\n    'test-gsw.example.org',\n    '10.42.0.1',\n    '00:00:ca:fe:ba:be',\n    '2019-10-02 12:00'::TIMESTAMP);\n"
  },
  {
    "path": "tests/unittests/Snmp/Snmp_test.py",
    "content": "# ruff: noqa: F401 - importing to test availability\n\nimport unittest\nfrom mock import Mock, patch\nimport pytest\nimport sys\n\n\nclass SnmpTestCase(unittest.TestCase):\n    def _patch_cleaning(self, patched_sys_modules_to_modify):\n        for module in ('nav.Snmp.pynetsnmp', 'nav.Snmp.errors', 'nav.Snmp'):\n            if module in patched_sys_modules_to_modify:\n                del patched_sys_modules_to_modify[module]\n\n    def _import(self, implementation):\n        return __import__(\n            'nav.Snmp.' + implementation, globals(), locals(), ['Snmp']\n        ).Snmp\n\n\nclass SnmpTestPynetsnmp(SnmpTestCase):\n    def setUp(self):\n        self.pynetsnmp = Mock(name='pynetsnmp')\n        self.modules = {\n            'pynetsnmp': self.pynetsnmp,\n            'pynetsnmp.netsnmp': self.pynetsnmp.netsnmp,\n        }\n        self.patcher = patch.dict(sys.modules, self.modules)\n        self.patcher.start()\n        self._patch_cleaning(sys.modules)\n\n    def tearDown(self):\n        for name, module in self.modules.items():\n            assert sys.modules[name] == module\n        self.patcher.stop()\n\n    def test_load_pynetsnmp_if_available_as_first_choice(self):\n        # This import should be fine\n        import nav.Snmp.pynetsnmp as _\n\n        # wrapper should also be fine to import\n        from nav.Snmp import Snmp\n\n        # should be of nav.Snmp.pynetsnmp ...\n        assert Snmp == self._import('pynetsnmp')\n\n\nclass OtherSnmpTests(SnmpTestCase):\n    def test_raise_no_supported_snmp_backend_found_raised_if_no_snmp_libraries_are_available(  # noqa: E501\n        self,\n    ):\n        modules = {\n            'pynetsnmp': None,\n        }\n\n        with patch.dict(sys.modules, modules):\n            self._patch_cleaning(sys.modules)\n            with pytest.raises(ImportError):\n                import pynetsnmp\n\n            with pytest.raises(ImportError):\n                import nav.Snmp.pynetsnmp\n\n            try:\n                from nav.Snmp import Snmp\n\n                pytest.fail(\"Should never happen\")\n            except ImportError as foo:\n                assert str(foo) == 'No supported SNMP backend was found'\n"
  },
  {
    "path": "tests/unittests/Snmp/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/Snmp/encodings_test.py",
    "content": "from unittest import TestCase\n\nfrom nav.Snmp import safestring\n\n\nclass EncodingTests(TestCase):\n    def test_latin1_encoded_ifalias_should_be_properly_decoded(self):\n        result = safestring(b'A m\\xf8\\xf8se once bit my sister')\n        expected = 'A m\\xf8\\xf8se once bit my sister'\n        self.assertEqual(result, expected)\n\n    def test_utf_8_encoded_ifalias_should_be_properly_decoded(self):\n        result = safestring(b'A m\\xc3\\xb8\\xc3\\xb8se once bit my sister')\n        expected = 'A m\\xf8\\xf8se once bit my sister'\n        self.assertEqual(result, expected)\n\n    def test_none_should_be_returned_unchanged(self):\n        result = safestring(None)\n        self.assertTrue(result is None)\n\n    def test_unknown_encoding_should_not_raise_error(self):\n        result = safestring(b'A m\\x9b\\x9bse once bit my sister')\n        self.assertTrue(isinstance(result, str))\n\n    def test_number_should_be_encoded(self):\n        result = safestring(42)\n        self.assertEqual(result, \"42\")\n"
  },
  {
    "path": "tests/unittests/Snmp/profile_test.py",
    "content": "#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom unittest.mock import Mock\n\nimport pytest\n\nfrom nav.Snmp import Snmp\nfrom nav.Snmp.profile import get_snmp_session_for_profile\n\n\nclass TestGetSnmpSessionForProfile:\n    def test_when_valid_snmpv2_profile_is_given_it_should_return_a_valid_snmp_partial(\n        self, mock_snmpv2_profile\n    ):\n        snmp = get_snmp_session_for_profile(mock_snmpv2_profile)\n        assert callable(snmp)\n        session = snmp(\"127.0.0.1\")\n        assert isinstance(session, Snmp)\n\n    def test_when_valid_snmpv3_profile_is_given_it_should_return_a_valid_snmp_partial(\n        self, mock_snmpv3_profile\n    ):\n        snmp = get_snmp_session_for_profile(mock_snmpv3_profile)\n        assert callable(snmp)\n        session = snmp(\"127.0.0.1\")\n        assert isinstance(session, Snmp)\n\n        conf = mock_snmpv3_profile.configuration\n        assert session.sec_level.value == conf[\"sec_level\"]\n        assert session.auth_protocol.value == conf[\"auth_protocol\"]\n        assert session.sec_name == conf[\"sec_name\"]\n        assert session.auth_password == conf[\"auth_password\"]\n\n    def test_when_non_snmp_profile_is_given_it_should_raise_valueerror(self):\n        profile = Mock(is_snmp=False)\n        with pytest.raises(ValueError):\n            get_snmp_session_for_profile(profile)\n\n\n@pytest.fixture\ndef mock_snmpv2_profile():\n    profile = Mock(is_snmp=True, snmp_version=2)\n    profile.configuration = {\n        \"version\": \"2c\",\n        \"write\": False,\n        \"community\": \"public\",\n    }\n    return profile\n\n\n@pytest.fixture\ndef mock_snmpv3_profile():\n    profile = Mock(is_snmp=True, snmp_version=3)\n    profile.configuration = {\n        \"version\": \"3\",\n        \"sec_level\": \"authNoPriv\",\n        \"auth_protocol\": \"SHA\",\n        \"sec_name\": \"foobar\",\n        \"auth_password\": \"zaphodbeeblebrox\",\n    }\n    return profile\n"
  },
  {
    "path": "tests/unittests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/alertengine/__init__.py",
    "content": "\"\"\"alertengine tests\"\"\"\n"
  },
  {
    "path": "tests/unittests/alertengine/accountalertqueue_test.py",
    "content": "from unittest import TestCase\nfrom datetime import datetime\nfrom mock import Mock\n\nfrom nav.models.profiles import AlertSubscription\nfrom nav.alertengine.base import alert_should_be_ignored\n\n\nclass HandleQueuedAlertsTest(TestCase):\n    def test_alert_should_not_be_ignored_on_invalid_subscription(self):\n        now = datetime.now()\n        qd_alert = Mock()\n        qd_alert.alert.history.end_time = datetime(2010, 1, 1, 0, 0, 0)\n\n        self.assertFalse(alert_should_be_ignored(qd_alert, None, now))\n\n    def test_alert_should_be_ignored_when_subscription_says_so(self):\n        before = datetime(2010, 1, 1, 23, 59, 0)\n        later = datetime(2010, 1, 2, 0, 0, 0)\n\n        qd_alert = Mock()\n        qd_alert.alert.history.end_time = before\n\n        sub = Mock()\n        sub.ignored_resolved_alerts = True\n        sub.type = AlertSubscription.DAILY\n\n        self.assertTrue(alert_should_be_ignored(qd_alert, sub, later))\n"
  },
  {
    "path": "tests/unittests/alertengine/base_test.py",
    "content": "from datetime import time, datetime\nfrom mock import Mock\nfrom nav.alertengine.base import _calculate_timeperiod_start\n\n\ndef test_calculate_timeperiod_start_should_detect_period_starting_yesterday():\n    mock_now = datetime(year=2020, month=8, day=1, hour=7, minute=50)\n    timeperiod = Mock(start=time(hour=8, minute=0))\n    result = _calculate_timeperiod_start(timeperiod, now=mock_now)\n    assert result.date() < mock_now.date()\n\n\ndef test_calculate_timeperiod_start_should_detect_period_starting_today():\n    mock_now = datetime(year=2020, month=8, day=1, hour=8, minute=50)\n    timeperiod = Mock(start=time(hour=8, minute=0))\n    result = _calculate_timeperiod_start(timeperiod, now=mock_now)\n    assert result.date() == mock_now.date()\n"
  },
  {
    "path": "tests/unittests/api/__init__.py",
    "content": "\n"
  },
  {
    "path": "tests/unittests/api/api_test.py",
    "content": "# -*- coding: utf-8 -*-\n\n\nfrom nav.web.api.v1.auth import TokenPermission\n\n\ndef test_path_in_endpoints():\n    path = '/api/1/room/'\n    endpoints = {'room': '/api/1/room/'}\n\n    assert TokenPermission.is_path_in_endpoints(path, endpoints)\n\n\ndef test_missing_slashes():\n    path = '/api/1/room/'\n    endpoints = {'room': '/api/1/room'}\n\n    assert TokenPermission.is_path_in_endpoints(path, endpoints)\n\n\ndef test_no_version():\n    path = '/api/room/'\n    endpoints = {'room': '/api/1/room'}\n\n    assert TokenPermission.is_path_in_endpoints(path, endpoints)\n\n\ndef test_multiple_endpoints():\n    path = '/api/room/'\n    endpoints = {\n        'room': '/api/1/room',\n        'netbox': '/api/1/netbox',\n        'account': '/api/1/account',\n    }\n\n    assert TokenPermission.is_path_in_endpoints(path, endpoints)\n\n\ndef test_miss_on_multiple_endpoints():\n    path = '/api/1/alert'\n    endpoints = {\n        'room': '/api/1/room',\n        'netbox': '/api/1/netbox',\n        'account': '/api/1/account',\n    }\n\n    assert not TokenPermission.is_path_in_endpoints(path, endpoints)\n\n\ndef test_sub_endpoints():\n    path = '/api/1/prefix/usage/'\n    endpoints = {\n        'room': '/api/1/prefix',\n    }\n\n    assert TokenPermission.is_path_in_endpoints(path, endpoints)\n"
  },
  {
    "path": "tests/unittests/api/jwtpermission_test.py",
    "content": "from nav.web.api.v1.auth import JWTPermission\n\n\nclass TestIsPathInEndpoints:\n    def test_when_path_is_in_endpoints_then_it_should_return_true(self):\n        path = '/api/1/room/'\n        endpoints = [path]\n        assert JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_path_is_not_in_endpoints_then_it_should_return_false(self):\n        path = '/api/1/room/'\n        endpoints = ['/api/1/netbox/']\n        assert not JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_endpoint_matches_path_except_endpoint_lacks_trailing_slash_then_it_should_return_true(  # noqa: E501\n        self,\n    ):\n        path = '/api/1/room/'\n        endpoints = ['/api/1/room']\n        assert JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_endpoint_matches_path_except_path_lacks_version_then_it_should_return_true(  # noqa: E501\n        self,\n    ):\n        path = '/api/room/'\n        endpoints = ['/api/1/room/']\n\n        assert JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_path_is_in_list_with_multiple_endpoints_then_it_should_return_true(\n        self,\n    ):\n        path = '/api/1/room/'\n        endpoints = [\n            '/api/1/room/',\n            '/api/1/netbox/',\n            '/api/1/account/',\n        ]\n\n        assert JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_path_is_not_in_list_with_multiple_endpoints_then_it_should_return_false(  # noqa: E501\n        self,\n    ):\n        path = '/api/1/alert/'\n        endpoints = [\n            '/api/1/room/',\n            '/api/1/netbox/',\n            '/api/1/account/',\n        ]\n\n        assert not JWTPermission.is_path_in_endpoints(path, endpoints)\n\n    def test_when_path_is_sub_endpoint_of_another_endpoint_then_it_should_return_true(\n        self,\n    ):\n        path = '/api/1/prefix/usage/'\n        endpoints = [\n            '/api/1/prefix/',\n        ]\n\n        assert JWTPermission.is_path_in_endpoints(path, endpoints)\n"
  },
  {
    "path": "tests/unittests/arnold/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/arnold/arnold_memo_test.py",
    "content": "\"\"\"Testcase for Arnold's memoisation class used for fetching info from files\"\"\"\n\nimport unittest\nfrom mock import Mock, patch\nfrom nav.arnold import Memo\n\n\n@patch('os.path.getmtime')\nclass ArnoldMemoTest(unittest.TestCase):\n    \"\"\"Run the tests\"\"\"\n\n    def setUp(self):\n        self.fun = Mock()\n        self.decorated_fun = Memo(self.fun)\n\n    def test_basic_store(self, getmtime):\n        \"\"\"Test that function is actually run\"\"\"\n        getmtime.return_value = 100\n        self.decorated_fun(1)\n        self.assertTrue(self.fun.called)\n\n    def test_cache(self, getmtime):\n        \"\"\"Test that cache is used when calling function\"\"\"\n        getmtime.return_value = 100\n        self.decorated_fun(1)\n        self.decorated_fun(1)\n        self.assertEqual(self.fun.call_count, 1)\n\n    def test_invalidate_cache(self, getmtime):\n        \"\"\"Test that getmtime affects storage\"\"\"\n        getmtime.return_value = 100\n        self.decorated_fun(1)\n        getmtime.return_value = 200\n        self.decorated_fun(1)\n        self.assertEqual(self.fun.call_count, 2)\n\n    def test_another_store(self, getmtime):\n        \"\"\"Test storage of two different values\"\"\"\n        getmtime.return_value = 100\n        self.decorated_fun(1)\n        self.decorated_fun(2)\n        self.assertEqual(self.fun.call_count, 2)\n"
  },
  {
    "path": "tests/unittests/arnold/arnold_should_detain_test.py",
    "content": "\"\"\"Tests for should_detain\"\"\"\n\nimport pytest\n\nfrom mock import Mock, patch\nfrom nav.arnold import (\n    InExceptionListError,\n    WrongCatidError,\n    BlockonTrunkError,\n    raise_if_detainment_not_allowed,\n    check_non_block,\n)\n\n\n@patch('nav.arnold.get_config')\ndef test_should_detain_inexceptionlist(mock_getconfig):\n    \"\"\"Test that InExceptionListError is properly thrown\"\"\"\n    with patch('nav.arnold.parse_nonblock_file') as parse:\n        parse.return_value = {'ip': {'10.0.0.1': 1}}\n        with pytest.raises(InExceptionListError):\n            check_non_block('10.0.0.1')\n\n\n@patch('nav.arnold.get_config')\ndef test_should_detain_wrongcatid(mock_getconfig, interface):\n    \"\"\"Test that WrongCatidError is properly thrown\"\"\"\n    get_config = mock_getconfig.return_value\n    get_config.get.return_value = 'SW,EDGE'\n\n    category = interface.netbox.category\n    category.id = 'GW'\n\n    with pytest.raises(WrongCatidError):\n        raise_if_detainment_not_allowed(interface)\n\n\n@patch('nav.arnold.get_config')\ndef test_should_detain_blockontrunk(mock_getconfig, interface):\n    \"\"\"Test that BlockonTrunkError is properly thrown\"\"\"\n    get_config = mock_getconfig.return_value\n    get_config.get.return_value = 'SW,EDGE'\n\n    interface.trunk = True\n\n    with pytest.raises(BlockonTrunkError):\n        raise_if_detainment_not_allowed(interface)\n\n\n@pytest.fixture\ndef interface():\n    \"\"\"Mock interface model instance for testing\"\"\"\n    category = Mock()\n    category.id = 'SW'\n\n    netbox = Mock()\n    netbox.category = category\n\n    interface = Mock()\n    interface.netbox = netbox\n    interface.trunk = True\n\n    return interface\n"
  },
  {
    "path": "tests/unittests/arnold/arnold_snmp_test.py",
    "content": "\"\"\"Tests for Arnold using snmp objects\"\"\"\n\nfrom nav.arnold import change_port_status\nfrom unittest.mock import Mock, patch\nimport unittest\n\nfrom nav.models.manage import ManagementProfile\n\n\n@patch('nav.Snmp.Snmp', autospec=True)\nclass TestArnoldSnmp(unittest.TestCase):\n    \"\"\"Testclass for Arnold\"\"\"\n\n    def setUp(self):\n        self.ip = '10.0.0.1'\n        self.read_write = 'public'\n        self.read_only = 'private'\n        self.ifindex = 1\n        self.port_status_oid = '.1.3.6.1.2.1.2.2.1.7'\n\n        self.profile = self.create_management_profile_mock()\n        self.netbox = self.create_netbox_mock()\n        self.interface = self.create_interface_mock()\n\n    def create_interface_mock(self):\n        \"\"\"Create interface model mock object\"\"\"\n        interface = Mock()\n        interface.netbox = self.netbox\n        interface.ifindex = self.ifindex\n        return interface\n\n    def create_management_profile_mock(self):\n        \"\"\"Create management profile model mock object\"\"\"\n        profile = ManagementProfile(\n            protocol=ManagementProfile.PROTOCOL_SNMP,\n            configuration={\n                \"version\": 1,\n                \"community\": \"public\",\n            },\n        )\n        return profile\n\n    def create_netbox_mock(self):\n        \"\"\"Create netbox model mock object\"\"\"\n        netbox = Mock()\n        netbox.ip = self.ip\n        netbox.type.vendor.id = 'cisco'\n        netbox.get_preferred_snmp_management_profile.return_value = self.profile\n        return netbox\n\n    def test_change_port_status_enable(self, snmp):\n        \"\"\"Test enabling of a port\"\"\"\n        instance = snmp.return_value\n        identity = Mock()\n        identity.interface = self.interface\n        change_port_status('enable', identity, agent_getter=lambda profile: snmp)\n\n        snmp.assert_called_once_with(self.ip)\n        instance.set.assert_called_once_with(\n            self.port_status_oid + '.' + str(self.ifindex), 'i', 1\n        )\n\n    def test_change_port_status_disable(self, snmp):\n        \"\"\"Test disabling of a port\"\"\"\n        instance = snmp.return_value\n        identity = Mock()\n        identity.interface = self.interface\n        change_port_status('disable', identity, agent_getter=lambda profile: snmp)\n\n        snmp.assert_called_once_with(self.ip)\n        instance.set.assert_called_once_with(\n            self.port_status_oid + '.' + str(self.ifindex), 'i', 2\n        )\n"
  },
  {
    "path": "tests/unittests/arnold/arnold_test.py",
    "content": "\"\"\"Basic tests for nav.arnold\"\"\"\n\nimport unittest\nfrom nav.arnold import find_input_type\n\n\nclass TestArnold(unittest.TestCase):\n    \"\"\"Tests for nav.arnold\"\"\"\n\n    def test_find_input_type(self):\n        \"\"\"Test find_input_type\"\"\"\n        ip_address = '158.38.129.113'\n        mac = '5c:f9:dd:78:72:8a'\n        self.assertEqual(find_input_type(ip_address), 'IP')\n        self.assertEqual(find_input_type(mac), 'MAC')\n        self.assertEqual(find_input_type(123), 'SWPORTID')\n\n    def test_typo_not_accepted(self):\n        \"\"\"Tests for weakness in IPy library\"\"\"\n        ip_address = '158.38.129'\n        self.assertEqual(find_input_type(ip_address), 'UNKNOWN')\n\n    def test_end_on_zero(self):\n        \"\"\"Tests that IP-addresses that ends on zero are accepted\"\"\"\n        ip_address = '158.38.129.0'\n        self.assertEqual(find_input_type(ip_address), 'IP')\n\n    def test_ipv6(self):\n        \"\"\"Tests that a simple ipv6 address is recognized\"\"\"\n        ip_address = 'FE80:0000:0000:0000:0202:B3FF:FE1E:8329'\n        self.assertEqual(find_input_type(ip_address), 'IP')\n"
  },
  {
    "path": "tests/unittests/asyncdns_test.py",
    "content": "from mock import Mock\nfrom twisted.names import dns\n\nfrom nav.asyncdns import ForwardResolver\n\nBUICK_NAME = \"buick.lab.uninett.no\"\n\n\ndef test_forward_lookup_should_work_with_ipv4_results():\n    record = Mock()\n    record.name = BUICK_NAME\n    record.type = dns.A\n    record.payload.address = b\"\\xac\\x00\\x00\\x01\"\n    result = [[record]]\n    result_name, address_list = ForwardResolver._extract_records(result, BUICK_NAME)\n\n    assert result_name == BUICK_NAME\n    assert address_list == [\"172.0.0.1\"]\n\n\ndef test_forward_lookup_should_work_with_ipv6_results():\n    record = Mock()\n    record.name = BUICK_NAME\n    record.type = dns.AAAA\n    record.payload.address = b\" \\x01\\r\\xb833DDUUffww\\x88\\x88\"\n    result = [[record]]\n    result_name, address_list = ForwardResolver._extract_records(result, BUICK_NAME)\n\n    assert result_name == BUICK_NAME\n    assert address_list == [\"2001:db8:3333:4444:5555:6666:7777:8888\"]\n\n\ndef test_forward_lookup_should_work_with_different_case_name_results():\n    record = Mock()\n    record.name = \"bUiCk.LaB.uNiNeTt.No\"\n    record.type = dns.A\n    record.payload.address = b\"\\x9e&\\x98\\xa2\"\n    result = [[record]]\n    result_name, address_list = ForwardResolver._extract_records(result, BUICK_NAME)\n\n    assert result_name == BUICK_NAME\n    assert address_list == [\"158.38.152.162\"]\n"
  },
  {
    "path": "tests/unittests/buildconf_test.py",
    "content": "# ruff: noqa: F401 - importing to test availability\n\nfrom unittest import TestCase\n\nimport nav.buildconf\n\n\nclass TestBuildconf(TestCase):\n    def test_VERSION_can_be_imported(self):\n        try:\n            from nav.buildconf import VERSION\n        except ImportError:\n            self.fail('VERSION could not be imported')\n\n    def test_VERSION_contains_dot(self):\n        \"\"\"\n        Assumes that VERSION containing a '.' implies\n        it is set to a valid version string\n        \"\"\"\n        assert \".\" in nav.buildconf.VERSION\n"
  },
  {
    "path": "tests/unittests/business/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/business/business_test.py",
    "content": "\"\"\"Basic tests for nav.arnold\"\"\"\n\nimport unittest\nfrom datetime import datetime, timedelta\n\nfrom nav.web.business import utils\nfrom nav.models.event import AlertHistory\n\n\nclass TestBusinessUtils(unittest.TestCase):\n    \"\"\"Tests for nav.arnold\"\"\"\n\n    def setUp(self):\n        self.alert1 = AlertHistory(\n            start_time=datetime(2014, 1, 1), end_time=datetime(2014, 1, 3)\n        )\n        self.alert2 = AlertHistory(\n            start_time=datetime(2014, 1, 20), end_time=datetime(2014, 1, 21)\n        )\n        self.maintenance0 = AlertHistory(\n            start_time=datetime(2013, 12, 31), end_time=datetime(2014, 1, 1)\n        )\n        self.maintenance1 = AlertHistory(\n            start_time=datetime(2014, 1, 2), end_time=datetime(2014, 1, 5)\n        )\n        self.maintenance2 = AlertHistory(\n            start_time=datetime(2014, 1, 7), end_time=datetime(2014, 1, 13)\n        )\n        self.maintenance3 = AlertHistory(\n            start_time=datetime(2014, 1, 15), end_time=datetime(2014, 1, 21)\n        )\n        self.maintenance5 = AlertHistory(\n            start_time=datetime(2014, 1, 29), end_time=datetime(2014, 2, 2)\n        )\n        self.downtime1 = self.alert1.end_time - self.alert1.start_time\n        self.downtime2 = self.alert2.end_time - self.alert2.start_time\n        self.alerts = [self.alert1, self.alert2]\n\n    def test_full_availability(self):\n        start = datetime(2014, 2, 1)\n        end = datetime(2014, 2, 27)\n        interval = end - start\n        avail = utils.compute_availability(timedelta(0), interval)\n        self.assertEqual(avail, 100)\n\n    def test_no_availability(self):\n        start = datetime(2014, 2, 1)\n        end = datetime(2014, 2, 2)\n        interval = end - start\n        avail = utils.compute_availability(timedelta(days=1), interval)\n        self.assertEqual(avail, 0)\n"
  },
  {
    "path": "tests/unittests/config_test.py",
    "content": "from pathlib import Path\nfrom unittest import TestCase\n\nfrom nav.config import _config_resource_walk, find_config_file, get_config_locations\n\n\nclass TestConfigResourceWalk(TestCase):\n    def test_should_read_relative_paths_as_strings_from_nav_package_and_return_a_long_list_of_strings(  # noqa: E501\n        self,\n    ):\n        # result should be many, many relative paths as strings\n        result = tuple(_config_resource_walk())  # generator\n        self.assertTrue(len(result) > 20)\n        for relpath in result:\n            self.assertIsInstance(relpath, str)\n            self.assertFalse(relpath.startswith(\"/\"))\n\n\nclass TestNavConfigDir:\n    def test_get_config_locations_should_include_nav_config_dir_first_when_set(\n        self, tmp_path_factory, monkeypatch\n    ):\n        \"\"\"Test that NAV_CONFIG_DIR appears first in config locations when set\"\"\"\n        tmpdir = tmp_path_factory.mktemp(\"foo\")\n        monkeypatch.setenv(\"NAV_CONFIG_DIR\", str(tmpdir))\n\n        first_location = next(get_config_locations())\n        assert first_location == Path(tmpdir)\n\n    def test_get_config_locations_should_work_without_nav_config_dir(self, monkeypatch):\n        \"\"\"Test that config locations work normally when NAV_CONFIG_DIR is not set\"\"\"\n        # Ensure NAV_CONFIG_DIR is not set\n        monkeypatch.delenv(\"NAV_CONFIG_DIR\", raising=False)\n\n        locations = list(get_config_locations())\n        # Should have some default locations\n        assert len(locations) > 0\n        # All should be Path objects\n        for location in locations:\n            assert isinstance(location, Path)\n\n    def test_find_config_file_should_find_file_in_nav_config_dir(\n        self, tmp_path_factory, monkeypatch\n    ):\n        \"\"\"Test that find_config_file finds files in NAV_CONFIG_DIR when set\"\"\"\n        tmpdir = tmp_path_factory.mktemp(\"foo\")\n        # Create a test config file\n        test_file = Path(tmpdir) / \"test.conf\"\n        test_file.write_text(\"[test]\\nvalue=true\\n\")\n\n        # Set NAV_CONFIG_DIR\n        monkeypatch.setenv(\"NAV_CONFIG_DIR\", str(tmpdir))\n\n        # Should find our test file\n        found_path = find_config_file(\"test.conf\")\n        assert found_path == str(test_file)\n\n    def test_find_config_file_should_skip_permission_errors(\n        self, tmp_path_factory, monkeypatch\n    ):\n        # Create two temporary directories\n        inaccessible_dir = tmp_path_factory.mktemp(\"inaccessible\")\n        accessible_dir = tmp_path_factory.mktemp(\"accessible\")\n\n        # Create the config file only in the accessible directory\n        test_file = accessible_dir / \"test.conf\"\n        test_file.write_text(\"[test]\\nvalue=true\\n\")\n\n        # Mock get_config_locations to return our directories in order\n        def mock_get_config_locations():\n            # Create a mock Path that raises PermissionError on exists()\n            class InaccessiblePath:\n                def __init__(self, path):\n                    self._path = path\n\n                def __truediv__(self, other):\n                    return InaccessiblePath(self._path / other)\n\n                def exists(self):\n                    raise PermissionError(\"Permission denied\")\n\n            yield InaccessiblePath(inaccessible_dir)\n            yield accessible_dir\n\n        monkeypatch.setattr(\n            \"nav.config.get_config_locations\", mock_get_config_locations\n        )\n\n        # Should still find the file in the accessible directory\n        found_path = find_config_file(\"test.conf\")\n        assert found_path == str(test_file)\n\n    def test_when_all_config_locations_are_inaccessible_then_find_config_file_should_return_none(  # noqa: E501\n        self, monkeypatch\n    ):\n        def mock_get_config_locations():\n            class InaccessiblePath:\n                def __init__(self, name):\n                    self._name = name\n\n                def __truediv__(self, other):\n                    return InaccessiblePath(f\"{self._name}/{other}\")\n\n                def exists(self):\n                    raise PermissionError(\"Permission denied\")\n\n            yield InaccessiblePath(\"/fake/path1\")\n            yield InaccessiblePath(\"/fake/path2\")\n\n        monkeypatch.setattr(\n            \"nav.config.get_config_locations\", mock_get_config_locations\n        )\n\n        found_path = find_config_file(\"nonexistent.conf\")\n        assert found_path is None\n"
  },
  {
    "path": "tests/unittests/config_toml_test.py",
    "content": "from unittest import TestCase\n\nfrom nav.config.toml import TOMLConfigParser, merge_dict_with_defaults\n\n\nclass TOMLConfigParserTest(TestCase):\n    def test_merge_with_default_returns_the_combined_output(self):\n        class TestConfig(TOMLConfigParser):\n            DEFAULT_CONFIG = {\n                \"a\": 1,\n                \"b\": True,\n            }\n\n        tc = TestConfig()\n        tc._merge_with_default({\"b\": False, \"c\": \"foo\"})\n        expected = {\n            \"a\": 1,\n            \"b\": False,\n            \"c\": \"foo\",\n        }\n        self.assertEqual(tc.data, expected)\n\n    def test_if_section_is_set_and_no_default_config_get_item_fetches_from_inputted_subdict(  # noqa: E501\n        self,\n    ):\n        class TestConfig(TOMLConfigParser):\n            SECTION = \"bar\"\n            DEFAULT_CONFIG = {}\n\n        tc = TestConfig({\"bar\": {\"a\": 3}})\n        self.assertEqual(tc[\"a\"], 3)\n\n    def test_if_section_is_set_and_no_input_get_item_fetches_from_default_subdict(self):\n        class TestConfig(TOMLConfigParser):\n            SECTION = \"bar\"\n            DEFAULT_CONFIG = {\n                \"a\": 2,\n                SECTION: {\n                    \"a\": 1,\n                },\n            }\n\n        tc = TestConfig()\n        self.assertEqual(tc[\"a\"], 1)\n\n\nclass MergeDictWithDefaults(TestCase):\n    def test_golden_path(self):\n        data = {\n            1: 1,\n            2: {\n                3: 3,\n                6: {7: 7},\n                8: None,\n            },\n            4: 4,\n        }\n        defaults = {\n            0: 0,\n            2: {\n                3: 0,\n                5: 0,\n                6: None,\n                8: {9: 0},\n            },\n            4: 0,\n        }\n        expected = {\n            0: 0,\n            1: 1,\n            2: {\n                3: 3,\n                5: 0,\n                6: {7: 7},\n                8: None,\n            },\n            4: 4,\n        }\n        result = merge_dict_with_defaults(data, defaults)\n        self.assertEqual(result, expected)\n\n    def test_deeper_recursion(self):\n        # four levels is the maximum that allauth social auth config needs\n        data = {\n            1: 1,\n            0: {\n                2: 2,\n                1: {\n                    3: 3,\n                    2: {\n                        3: {\n                            4: {6: 6},\n                        },\n                    },\n                },\n            },\n        }\n        defaults = {\n            0: {\n                1: {\n                    2: {\n                        3: {\n                            4: {5: 0},\n                        },\n                    },\n                }\n            },\n        }\n        expected = {\n            1: 1,\n            0: {\n                2: 2,\n                1: {\n                    3: 3,\n                    2: {\n                        3: {\n                            4: {\n                                5: 0,\n                                6: 6,\n                            },\n                        },\n                    },\n                },\n            },\n        }\n        result = merge_dict_with_defaults(data, defaults)\n        self.assertEqual(result, expected)\n"
  },
  {
    "path": "tests/unittests/conftest.py",
    "content": "# nothing to see here, move along\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django(__file__)\n"
  },
  {
    "path": "tests/unittests/dhcpstats/common_test.py",
    "content": "from dataclasses import dataclass, replace\nfrom itertools import chain\nimport logging\nimport random\nimport re\n\nimport IPy\nimport pytest\n\nfrom nav.dhcpstats.common import (\n    DhcpPath,\n    drop_groups_not_in_prefixes,\n    fetch_paths_from_graphite,\n    group_paths,\n    range_str,\n)\nfrom nav.metrics.templates import metric_path_for_dhcp\n\n\n@dataclass\nclass Path:\n    native: DhcpPath\n    graphite: str\n\n\n@pytest.fixture(\n    params=[\n        Path(\n            DhcpPath(\n                ip_version=4,\n                server_name=\"server1\",\n                allocation_type=\"range\",\n                group_name=\"group1\",\n                group_name_source=\"custom_groups\",\n                first_ip=IPy.IP(\"192.0.0.1\"),\n                last_ip=IPy.IP(\"192.0.0.255\"),\n            ),\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.4.192_0_0_1.192_0_0_255\",\n        ),\n        Path(\n            DhcpPath(\n                ip_version=6,\n                server_name=\"server1\",\n                allocation_type=\"range\",\n                group_name=\"group1\",\n                group_name_source=\"custom_groups\",\n                first_ip=IPy.IP(\"::1\"),\n                last_ip=IPy.IP(\"::ffff\"),\n            ),\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.6.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n        ),\n        Path(\n            DhcpPath(\n                ip_version=6,\n                server_name=\"server1\",\n                allocation_type=\"range\",\n                group_name=\"standalone\",\n                group_name_source=\"special_groups\",\n                first_ip=IPy.IP(\"::1\"),\n                last_ip=IPy.IP(\"::ffff\"),\n            ),\n            \"nav.dhcp.servers.server1.range.special_groups.standalone.6.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n        ),\n    ]\n)\ndef path(request):\n    return request.param\n\n\nclass TestDhcpPath:\n    def test_to_graphite_path_should_return_expected_value(self, path):\n        assert path.native.to_graphite_path(metric_name=\"foo\") == path.graphite + \".foo\"\n\n    def test_to_graphite_path_should_be_reversed_by_from_graphite_path(self, path):\n        assert (\n            DhcpPath.from_graphite_path(path.native.to_graphite_path(metric_name=\"foo\"))\n            == path.native\n        )\n\n    def test_from_graphite_path_should_be_reversed_by_to_graphite_path(self, path):\n        assert (\n            DhcpPath.from_graphite_path(path.graphite).to_graphite_path(\n                metric_name=\"foo\"\n            )\n            == path.graphite + \".foo\"\n        )\n\n    @pytest.mark.parametrize(\n        \"graphite_path\",\n        [\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.6.0_0_0_1.0_0_0_255\",\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.4.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.6.0_0_0_1.0_0_0_0_0_0_0_ffff\",\n            \"nav.dhcp.servers.server1.range.custom_groups.group1.6.0_0_0_0_0_0_0_1.0_0_0_255\",\n        ],\n    )\n    def test_from_graphite_path_should_fail_on_ip_version_mismatch(self, graphite_path):\n        with pytest.raises(ValueError):\n            DhcpPath.from_graphite_path(graphite_path)\n\n    @pytest.mark.parametrize(\n        \"graphite_path,reason\",\n        [\n            (\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.6.0_0_0_0_0_0_0_1\",\n                \"missing <last_ip> segment\",\n            ),\n            (\n                \"nav.dhcp.servers.server1.range.invalid.group1.6.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n                \"invalid <group_name_source> segment\",\n            ),\n            (\n                \"nav.dhcp.servers.server1.invalid.custom_groups.group1.6.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n                \"invalid <allocation_type> segment\",\n            ),\n            (\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.invalid.0_0_0_0_0_0_0_1.0_0_0_0_0_0_0_ffff\",\n                \"invalid <ip_version> segment\",\n            ),\n        ],\n    )\n    def test_from_graphite_path_should_fail_on_invalid_names(\n        self, graphite_path, reason\n    ):\n        with pytest.raises(ValueError):\n            DhcpPath.from_graphite_path(graphite_path)\n            pytest.fail(f\"Didn't fail when {reason!r}\")\n\n    def test_from_graphite_path_should_work_with_metric_path_for_dhcp(self):\n        path_kwargs = {\n            \"ip_version\": 4,\n            \"server_name\": \"server1\",\n            \"allocation_type\": \"range\",\n            \"group_name_source\": \"custom_groups\",\n            \"group_name\": \"group1\",\n            \"first_ip\": IPy.IP(\"192.0.0.1\"),\n            \"last_ip\": IPy.IP(\"192.0.0.255\"),\n        }\n        assert DhcpPath.from_graphite_path(\n            metric_path_for_dhcp(metric_name=\"foo\", **path_kwargs)\n        ) == DhcpPath(**path_kwargs)\n        assert DhcpPath.from_graphite_path(\n            metric_path_for_dhcp(metric_name=\"foo\", **path_kwargs)\n        ).to_graphite_path(metric_name=\"foo\") == metric_path_for_dhcp(\n            metric_name=\"foo\", **path_kwargs\n        )\n\n    @pytest.mark.parametrize(\n        \"server_name,allocation_type,group_name,first_ip,last_ip,expected\",\n        [\n            (\n                \"server1\",\n                \"range\",\n                \"group1\",\n                \"192.0.0.1\",\n                \"192.0.0.255\",\n                DhcpPath(\n                    ip_version=4,\n                    server_name=\"server1\",\n                    allocation_type=\"range\",\n                    group_name=\"group1\",\n                    group_name_source=\"custom_groups\",\n                    first_ip=IPy.IP(\"192.0.0.1\"),\n                    last_ip=IPy.IP(\"192.0.0.255\"),\n                ),\n            ),\n            (\n                \"server1\",\n                \"subnet\",\n                None,\n                \"0.0.0.0\",\n                \"255.255.255.255\",\n                DhcpPath(\n                    ip_version=4,\n                    server_name=\"server1\",\n                    allocation_type=\"subnet\",\n                    group_name=\"standalone\",\n                    group_name_source=\"special_groups\",\n                    first_ip=IPy.IP(\"0.0.0.0\"),\n                    last_ip=IPy.IP(\"255.255.255.255\"),\n                ),\n            ),\n            (\n                \"server2\",\n                \"pool\",\n                \"group2\",\n                \"::1\",\n                \"::ffff\",\n                DhcpPath(\n                    ip_version=6,\n                    server_name=\"server2\",\n                    allocation_type=\"pool\",\n                    group_name=\"group2\",\n                    group_name_source=\"custom_groups\",\n                    first_ip=IPy.IP(\"::1\"),\n                    last_ip=IPy.IP(\"::ffff\"),\n                ),\n            ),\n        ],\n    )\n    def test_from_external_info_should_work_when_given_valid_arguments(\n        self, server_name, allocation_type, group_name, first_ip, last_ip, expected\n    ):\n        assert (\n            DhcpPath.from_external_info(\n                server_name, allocation_type, group_name, first_ip, last_ip\n            )\n            == expected\n        )\n\n    @pytest.mark.parametrize(\n        \"server_name,allocation_type,group_name,first_ip,last_ip,reason\",\n        [\n            (\n                \"server1\",\n                \"range\",\n                \"group1\",\n                \"::1\",\n                \"0.0.0.255\",\n                \"first_ip being IPv6 and last_ip being IPv4\",\n            ),\n            (\n                \"server1\",\n                \"range\",\n                \"group1\",\n                \"0.0.0.1\",\n                \"::ffff\",\n                \"first_ip being IPv4 and last_ip being IPv6\",\n            ),\n            (\n                \"server1\",\n                \"range\",\n                \"192.0.0.1\",\n                \"192.0.0.255\",\n                \"group1\",\n                \"last_ip being an invalid IP address\",\n            ),\n            (\n                \"server1\",\n                \"range\",\n                \"group1\",\n                \"192.0.0.255\",\n                \"192.0.0.1\",\n                \"first_ip being a greater IP address than last_ip\",\n            ),\n            (\n                \"server2\",\n                \"pool\",\n                \"group2\",\n                \"::1:\",\n                \"::ffff\",\n                \"first_ip being an invalid IP address\",\n            ),\n            (\n                \"server2\",\n                \"pool\",\n                \"group2\",\n                \"::1\",\n                \"::fffff\",\n                \"last_ip being an invalid IP address\",\n            ),\n            (\n                \"server2\",\n                \"pool\",\n                \"group2\",\n                \"::1\",\n                \"::ffff:\",\n                \"last_ip being an invalid IP address\",\n            ),\n        ],\n    )\n    def test_from_external_info_should_fail_when_given_invalid_arguments(\n        self, server_name, allocation_type, group_name, first_ip, last_ip, reason\n    ):\n        # We skip checking for errors that should be caught by a static type\n        # checker such as invalid argument types\n        with pytest.raises(ValueError):\n            DhcpPath.from_external_info(\n                server_name, allocation_type, group_name, first_ip, last_ip\n            )\n            pytest.fail(f\"Didn't fail when {reason!r}\")\n\n\ndef test_group_paths_should_group_special_standalone_groups_paths_individually():\n    path0 = DhcpPath(\n        ip_version=6,\n        server_name=\"server1\",\n        allocation_type=\"range\",\n        group_name=\"standalone\",\n        group_name_source=\"special_groups\",\n        first_ip=IPy.IP(\"::0:1\"),\n        last_ip=IPy.IP(\"::0:ffff\"),\n    )\n    path1 = replace(path0, first_ip=IPy.IP(\"::1:1\"), last_ip=IPy.IP(\"::1:ffff\"))\n    path2 = replace(path0, first_ip=IPy.IP(\"::2:1\"), last_ip=IPy.IP(\"::2:ffff\"))\n    assert sorted(group_paths([path0, path1, path2])) == sorted(\n        [[path0], [path1], [path2]]\n    )\n\n\ndef test_group_paths_should_group_special_groups_paths_separately_from_custom_groups_paths():  # noqa: E501\n    path0 = DhcpPath(\n        ip_version=6,\n        server_name=\"server1\",\n        allocation_type=\"range\",\n        group_name=\"standalone\",\n        group_name_source=\"special_groups\",\n        first_ip=IPy.IP(\"::0:1\"),\n        last_ip=IPy.IP(\"::0:ffff\"),\n    )\n    path1 = replace(path0, first_ip=IPy.IP(\"::1:1\"), last_ip=IPy.IP(\"::1:ffff\"))\n    path2 = replace(\n        path0,\n        first_ip=IPy.IP(\"::2:1\"),\n        last_ip=IPy.IP(\"::2:ffff\"),\n        group_name_source=\"custom_groups\",\n    )\n    path3 = replace(\n        path0,\n        first_ip=IPy.IP(\"::3:1\"),\n        last_ip=IPy.IP(\"::3:ffff\"),\n        group_name_source=\"custom_groups\",\n    )\n    assert sorted(group_paths([path0, path1, path2, path3])) == sorted(\n        [[path0], [path1], [path2, path3]]\n    )\n\n\ndef test_group_paths_should_group_custom_groups_paths_together_when_only_ip_addresses_differ():  # noqa: E501\n    path0 = DhcpPath(\n        ip_version=6,\n        server_name=\"server1\",\n        allocation_type=\"range\",\n        group_name=\"group1\",\n        group_name_source=\"custom_groups\",\n        first_ip=IPy.IP(\"::0:1\"),\n        last_ip=IPy.IP(\"::0:ffff\"),\n    )\n    path1 = replace(path0, first_ip=IPy.IP(\"::1:1\"), last_ip=IPy.IP(\"::1:ffff\"))\n    path2 = replace(\n        path0,\n        first_ip=IPy.IP(\"::2:1\"),\n        last_ip=IPy.IP(\"::2:ffff\"),\n        group_name=\"different\",\n    )\n    path3 = replace(\n        path0,\n        first_ip=IPy.IP(\"::3:1\"),\n        last_ip=IPy.IP(\"::3:ffff\"),\n        allocation_type=\"pool\",\n    )\n    path4 = replace(\n        path0,\n        first_ip=IPy.IP(\"::4:1\"),\n        last_ip=IPy.IP(\"::4:ffff\"),\n        server_name=\"different\",\n    )\n    path5 = replace(\n        path0, first_ip=IPy.IP(\"0.0.5.1\"), last_ip=IPy.IP(\"0.0.5.255\"), ip_version=4\n    )\n    assert sorted(group_paths([path0, path1, path2, path3, path4, path5])) == sorted(\n        [[path0, path1], [path2], [path3], [path4], [path5]]\n    )\n\n\ndef test_group_paths_should_group_custom_groups_paths_separately_when_other_than_ip_addresses_differ():  # noqa: E501\n    path0 = DhcpPath(\n        ip_version=6,\n        server_name=\"server1\",\n        allocation_type=\"range\",\n        group_name=\"group1\",\n        group_name_source=\"custom_groups\",\n        first_ip=IPy.IP(\"::1\"),\n        last_ip=IPy.IP(\"::ff\"),\n    )\n    path1 = replace(path0, group_name=\"different\")\n    path2 = replace(path0, server_name=\"different\")\n    path3 = replace(path0, allocation_type=\"subnet\")\n    path4 = replace(\n        path0, first_ip=IPy.IP(\"0.0.0.1\"), last_ip=IPy.IP(\"0.0.0.255\"), ip_version=4\n    )\n    assert sorted(group_paths([path0, path1, path2, path3, path4])) == sorted(\n        [[path0], [path1], [path2], [path3], [path4]]\n    )\n\n\n@pytest.mark.parametrize(\n    \"prefixes,test_input,expected_output\",\n    [\n        (\n            [IPy.IP(\"0.0.0.0/0\")],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group3.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group1.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Inside  # noqa: E501\n            ],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group3.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group1.4.1_1_100_0.1_1_101_0.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Inside  # noqa: E501\n            ],\n        ),\n        (\n            [IPy.IP(\"1.1.252.0/24\"), IPy.IP(\"1.1.253.0/24\")],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Another path in the group is inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Another path in the group is inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group3.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group1.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Partially Inside  # noqa: E501\n            ],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Another path in the group is inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Another path in the group inside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Partially Inside  # noqa: E501\n            ],\n        ),\n        (\n            [IPy.IP(\"1.1.252.0/24\")],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group3.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group1.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Partially Inside  # noqa: E501\n            ],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Inside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Partially Inside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Partially Inside  # noqa: E501\n            ],\n        ),\n        (\n            [],\n            [\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_0.1_1_252_12.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group1.4.1_1_252_64.1_1_252_127.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_253_1.1_1_253_8.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group2.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server1.range.custom_groups.group3.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group1.4.1_1_100_0.1_1_101_0.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group2.4.1_1_254_0.1_1_254_15.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server2.range.custom_groups.group3.4.1_1_253_1.1_1_253_8.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server3.range.custom_groups.group1.4.1_1_250_1.1_1_255_1.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server4.range.custom_groups.group1.4.1_1_253_1.1_1_255_1.foo\",  # Outside  # noqa: E501\n                \"nav.dhcp.servers.server5.range.custom_groups.group1.4.1_1_250_1.1_1_253_1.foo\",  # Outside  # noqa: E501\n            ],\n            [],\n        ),\n    ],\n)\ndef test_drop_groups_not_in_prefixes_should_work_as_expected(\n    prefixes, test_input, expected_output\n):\n    native_paths = [DhcpPath.from_graphite_path(path) for path in test_input]\n    grouped_paths = group_paths(native_paths)\n    remaining_grouped_paths = drop_groups_not_in_prefixes(grouped_paths, prefixes)\n    remaining_graphite_paths = [\n        path.to_graphite_path(\"foo\")\n        for path in chain.from_iterable(remaining_grouped_paths)\n    ]\n    assert sorted(remaining_graphite_paths) == sorted(expected_output)\n\n\n@pytest.mark.parametrize(\n    \"path,log_pattern\",\n    [\n        (\n            \"nav.dhcp.servers.kea-trd.range.custom_groups.staff.4.193_0_2_1.192_0_2_16\",\n            r\"first_ip.{0,10}193\\.0\\.2\\.1.{0,10}greater than.{0,10}last_ip.{0,10}192\\.0\\.2\\.16\",  # noqa: E501\n        ),\n        (\n            \"nav.dhcp.servers.kea-trd.Range.custom_groups.staff.4.192_0_2_1.192_0_2_16\",\n            r\"allocation_type.{0,10}Range.{0,10}is not in.{0,30}range\",\n        ),\n        (\n            \"nav.dhcp.servers.kea-trd.range.Custom_groups.staff.4.192_0_2_1.192_0_2_16\",\n            r\"group_source_name.{0,10}Custom_groups.{0,10}is not.{0,50}custom_groups\",\n        ),\n        (\n            \"nav.dhcp.servers.kea-trd.range.custom_groups.staff.6.192_0_2_1.192_0_2_16\",\n            r\"expected ip_version.{0,3}6\",\n        ),\n        (\n            \"nav.dhcp.servers.kea-trd.range.custom_groups.staff.6.0_0_0_0_c0_0_2_1.192_0_2_16\",\n            r\"expected ip_version.{0,3}6|first_ip.{0,10}c0:0:2:1.{0,10}not.{0,10}same version as last_ip.{0,10}192\\.0\\.2\\.16\",  # noqa: E501\n        ),\n        (\n            \"nav.dhcp.servers.kea-trd.range.custom_groups.staff.6.192_0_2_1.0_0_0_0_c0_0_2_10\",\n            r\"expected ip_version.{0,3}6|first_ip.{0,10}192\\.0\\.2\\.1.{0,10}not.{0,10}same version as last_ip.{0,10}c0:0:2:10\",  # noqa: E501\n        ),\n        (\n            \"dhcp.servers.kea-trd.range.custom_groups.staff.4.192_0_2_1.192_0_2_16\",\n            r\"expected.{0,20}dhcp\\.servers\\.kea-trd\\.range\\.custom_groups\\.staff\\.4\\.192_0_2_1\\.192_0_2_16.{0,20}to have.{0,20}10.{0,20}segments\",  # noqa: E501\n        ),\n    ],\n)\ndef test_fetch_paths_from_graphite_should_warn_when_paths_from_graphite_are_bad(\n    path, log_pattern, caplog, monkeypatch\n):\n    monkeypatch.setattr(\n        \"nav.dhcpstats.common.get_expanded_nodes\", lambda *args, **kwargs: [path]\n    )\n    with caplog.at_level(logging.WARNING):\n        fetch_paths_from_graphite()\n        assert re.search(log_pattern, caplog.text, flags=re.IGNORECASE)\n\n\ndef test_range_str_should_use_cidr_notation_when_possible():\n    r = random.Random()\n    r.seed(1, version=2)\n    for totalbits, ipversion in ((32, 4), (128, 6)):\n        for i in range(128):\n            base = r.randint(0, 2**totalbits - 1)\n            hostbits = i % totalbits + 1\n            netbits = totalbits - hostbits\n            netmask = ((2**totalbits - 1) << hostbits) & (2**totalbits - 1)\n            net = IPy.IP(base & netmask, ipversion=ipversion).make_net(netbits)\n            assert range_str(net[0], net[-1]) == f\"{net[0]}/{netbits}\"\n\n\ndef test_range_str_output_should_represent_inputs():\n    r = random.Random()\n    r.seed(2, version=2)\n    for totalbits, ipversion in ((32, 4), (128, 6)):\n        for _ in range(128):\n            ip1 = IPy.IP(r.randint(0, 2**totalbits - 1), ipversion=ipversion)\n            ip2 = IPy.IP(r.randint(0, 2**totalbits - 1), ipversion=ipversion)\n            ip1, ip2 = min(ip1, ip2), max(ip1, ip2)\n            output = range_str(ip1, ip2)\n            if \"-\" in output:\n                actual_ip1, _, actual_ip2 = output.partition(\"-\")\n                actual_ip1 = IPy.IP(actual_ip1)\n                actual_ip2 = IPy.IP(actual_ip2)\n            else:\n                temp = IPy.IP(output)\n                actual_ip1, actual_ip2 = temp[0], temp[-1]\n            assert (actual_ip1, actual_ip2) == (ip1, ip2)\n\n\ndef test_range_str_output_should_be_a_single_address_when_inputs_are_equal():\n    r = random.Random()\n    r.seed(3, version=2)\n    for totalbits, ipversion in ((32, 4), (128, 6)):\n        for _ in range(128):\n            ip = IPy.IP(r.randint(0, 2**totalbits - 1), ipversion=ipversion)\n            assert range_str(ip, ip) == str(ip)\n"
  },
  {
    "path": "tests/unittests/dhcpstats/kea_dhcp_test.py",
    "content": "from collections import deque, namedtuple\nfrom copy import deepcopy\nfrom datetime import datetime, timedelta\nfrom itertools import chain\nimport json\nimport logging\nimport pytest\nfrom requests.exceptions import JSONDecodeError\nfrom typing import Callable, Union\n\nimport requests\n\nfrom nav.dhcpstats.errors import CommunicationError\nfrom nav.dhcpstats.kea_dhcp import Client, KeaUnexpected\nfrom nav.dhcpstats.kea_dhcp import _KeaStatus\nfrom nav.errors import ConfigurationError\n\n\nSERVER_NICKNAME = \"dhcp-server-foo\"\n\n\nclass TestExpectedAPIResponses:\n    \"\"\"\n    Checks that the client acts as expected when the Kea API responds in an\n    expected way\n    \"\"\"\n\n    def test_fetch_stats_should_return_correct_stats(self, valid_dhcp4, api_mock):\n        \"\"\"\n        This test checks that fetch_stats() returns the correct and most up to\n        date stats from the API for each <pool> and <stat type>.\n        \"\"\"\n\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n\n        actual_stats = client.fetch_stats()\n\n        def normalize(stats):\n            \"\"\"\n            Set stat timestamps to zero, because we do not care to compare the\n            time a stat was fetched into NAV in this test.\n            \"\"\"\n            return sorted((path, (0, value)) for (path, (_time, value)) in stats)\n\n        assert normalize(actual_stats) == normalize(expected_stats)\n\n    def test_fetch_stats_should_only_have_recent_timestamps(\n        self, valid_dhcp4, api_mock\n    ):\n        \"\"\"\n        This test checks that fetch_stats() returns stats that have recent\n        enough timestamps (instead of the potentially very old timestamps\n        representing the last time the stat was changed that the API assigns\n        each stat).\n\n        When fetched stats have recent timestamps, they will form an evenly\n        spaced timeseries in graphite.\n        \"\"\"\n\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n\n        actual_stats = client.fetch_stats()\n        assert len(actual_stats) > 0\n        for _path, (time, _value) in actual_stats:\n            assert time >= (datetime.now() - timedelta(minutes=5)).timestamp()\n\n    def test_fetch_stats_should_handle_empty_config_api_response(\n        self, valid_dhcp4, api_mock\n    ):\n        \"\"\"\n        The client should handle the case where the Kea DHCP server responds\n        with an empty JSON object as the dhcp4 configuration returned by a\n        'config-get' request.  We assume in this case that the Kea DHCP server\n        we query just doesn't have any pools configured.  The correct thing to\n        do in this case is to just return an empty list of stats since there are\n        no pools to fetch from.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=None, statistics=statistics)\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response({\"Dhcp4\": {}}),\n        )\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        assert list(client.fetch_stats()) == []\n\n    def test_fetch_stats_should_handle_empty_statistic_in_statistics_api_response(\n        self, valid_dhcp4, api_mock\n    ):\n        \"\"\"\n        If the Kea DHCP server returns no values for a specific statistic,\n        disregard that stat when creating a list of stats. In the extreme case\n        that all statistics from the API are empty, 'fetch_stats()' should\n        return an empty list.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        statistics = {key: [] for key, value in statistics.items()}\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        assert list(client.fetch_stats()) == []\n\n    def test_fetch_stats_should_handle_empty_statistics_api_response(\n        self, valid_dhcp4, api_mock\n    ):\n        \"\"\"\n        If the Kea DHCP server returns an empty JSON object when querying for\n        all of its recorded statistics with the API call 'statistic-get-all',\n        then it has recorded no statistics and 'fetch_stats()' should return an\n        empty list.\n        \"\"\"\n\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=config, statistics=None)\n        api_mock.add(\n            \"statistic-get-all\",\n            lambda kea_arguments, kea_service: make_api_response({}),\n        )\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        assert list(client.fetch_stats()) == []\n\n    @pytest.mark.parametrize(\"http_status\", chain(range(400, 430), range(500, 530)))\n    def test_fetch_stats_should_raise_an_exception_on_http_error_response(\n        self, valid_dhcp4, api_mock, http_status\n    ):\n        \"\"\"\n        If the server responds with an HTTP error, the client should raise an\n        error.\n        \"\"\"\n\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\n            \"dhcp4\",\n            config=config,\n            statistics=statistics,\n            attrs={\"status_code\": http_status},\n        )\n\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n\n        with pytest.raises(CommunicationError):\n            client.fetch_stats()\n\n    @pytest.mark.parametrize(\n        \"kea_status\", [status for status in _KeaStatus if status != _KeaStatus.SUCCESS]\n    )\n    def test_fetch_stats_should_raise_an_exception_on_error_status_in_config_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, kea_status\n    ):\n        \"\"\"\n        If the server reports an API-specific error regarding serving its\n        configuration, the client should raise an error.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=None, statistics=statistics)\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response(\n                config, status=kea_status\n            ),\n        )\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        with pytest.raises(CommunicationError):\n            client.fetch_stats()\n\n    @pytest.mark.parametrize(\n        \"status\",\n        [\n            status\n            for status in _KeaStatus\n            if status not in (_KeaStatus.SUCCESS, _KeaStatus.EMPTY)\n        ],\n    )\n    def test_fetch_stats_should_raise_an_exception_on_error_status_in_statistic_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, status\n    ):\n        \"\"\"\n        If the server reports an API-specific error regarding serving\n        statistics, the client should raise an error.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        api_mock.autofill(\"dhcp4\", config=config, statistics=None)\n        api_mock.add(\n            \"statistic-get-all\",\n            lambda kea_arguments, kea_service: make_api_response(\n                statistics, status=status\n            ),\n        )\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        with pytest.raises(CommunicationError):\n            client.fetch_stats()\n\n    @pytest.mark.parametrize(\n        \"status\",\n        [\n            status\n            for status in _KeaStatus\n            if status not in (_KeaStatus.SUCCESS, _KeaStatus.UNSUPPORTED)\n        ],\n    )\n    def test_fetch_stats_should_not_raise_an_exception_on_error_status_in_config_hash_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, status\n    ):\n        \"\"\"\n        We don't depend on get-config-hash to work\n        \"\"\"\n        foohash = \"b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        config[\"Dhcp4\"][\"hash\"] = foohash\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n        api_mock.add(\n            \"config-hash-get\", make_api_response({\"hash\": foohash}, status=status)\n        )\n        client.fetch_stats()\n\n    def test_fetch_stats_should_check_and_warn_if_server_config_changed_during_call(\n        self, valid_dhcp4, api_mock, caplog\n    ):\n        \"\"\"\n        Due to how the Kea API works, we must fetch the Kea DHCP configuration,\n        and then fetch the Kea DHCP statistics, and only after that can we\n        create some mapping from values in the configuration to values in the\n        statistics.\n\n        A warning should be logged when the Kea DHCP configuration changes after\n        we've fetched the configuration but before we've fully fetched and\n        processed the statistics to signify that we might have relied upon a\n        stale configuration while fetching/processing and thus may have created\n        a bad mapping from configuration to statistics.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        api_mock.autofill(\"dhcp4\", config=None, statistics=statistics)\n        api_mock.add(\"config-get\", make_api_response(config))\n        updated_config = deepcopy(config)\n        updated_config[\"Dhcp4\"][\"subnet4\"][0][\"pools\"][0][\"pool\"] = \"42.0.1.1-42.0.1.5\"\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response(updated_config),\n        )\n\n        with caplog.at_level(logging.WARNING):\n            client.fetch_stats()\n\n        assert (\n            \"configuration was modified while stats were being fetched\" in caplog.text\n        )\n\n\n@pytest.mark.parametrize(\"invalid_response\", [\"{}\", \"foo\", \"\\x00\", \"[]\", \"1\"])\nclass TestUnexpectedAPIResponses:\n    \"\"\"\n    Checks that the client fails loudly if the Kea API responds in an unexpected\n    way.\n    \"\"\"\n\n    def test_fetch_stats_should_raise_an_exception_on_unrecognizable_config_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, invalid_response\n    ):\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n\n        api_mock.autofill(\"dhcp4\", config=None, statistics=statistics)\n        api_mock.add(\"config-get\", invalid_response)\n        with pytest.raises(KeaUnexpected):\n            client.fetch_stats()\n\n    def test_fetch_stats_should_raise_an_exception_on_unrecognizable_statistic_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, invalid_response\n    ):\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n\n        api_mock.autofill(\"dhcp4\", config=config, statistics=None)\n        api_mock.add(\"statistic-get-all\", invalid_response)\n        with pytest.raises(KeaUnexpected):\n            client.fetch_stats()\n\n    def test_fetch_stats_should_not_raise_an_exception_on_unrecognizable_config_hash_api_response(  # noqa: E501\n        self, valid_dhcp4, api_mock, invalid_response\n    ):\n        \"\"\"\n        We don't depend on get-config-hash to work\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        config[\"Dhcp4\"][\"hash\"] = \"foo\"\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n        api_mock.add(\"config-hash-get\", invalid_response)\n        client.fetch_stats()\n\n\nclass TestConfigCaching:\n    \"\"\"\n    Checks that the '_fetch_kea_config()' method doesn't request the DHCP\n    configuration from the Kea DHCP server more often than necessary.\n    \"\"\"\n\n    def test_fetch_kea_config_should_not_refetch_config_if_its_hash_is_unchanged(\n        self, api_mock\n    ):\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response(\n                {\"Dhcp4\": {\"hash\": \"1\"}}\n            ),\n        )\n        api_mock.add(\n            \"config-hash-get\",\n            lambda kea_arguments, kea_service: make_api_response({\"hash\": \"1\"}),\n        )\n\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        client._fetch_kea_config()\n        client._fetch_kea_config()\n\n        assert len(api_mock.requests[\"config-get\"]) == 1\n\n    def test_fetch_kea_config_should_refetch_config_if_its_hash_is_changed(\n        self, api_mock\n    ):\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response(\n                {\"Dhcp4\": {}, \"hash\": \"1\"}\n            ),\n        )\n        api_mock.add(\n            \"config-hash-get\",\n            lambda kea_arguments, kea_service: make_api_response({\"hash\": \"2\"}),\n        )\n\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        client._fetch_kea_config()\n        client._fetch_kea_config()\n\n        assert len(api_mock.requests[\"config-get\"]) == 2\n\n    def test_fetch_kea_config_should_refetch_config_if_its_hash_is_missing(\n        self, api_mock\n    ):\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response({\"Dhcp4\": {}}),\n        )\n        api_mock.add(\n            \"config-hash-get\",\n            lambda kea_arguments, kea_service: make_api_response({\"hash\": \"1\"}),\n        )\n\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        client._fetch_kea_config()\n        client._fetch_kea_config()\n\n        assert len(api_mock.requests[\"config-get\"]) == 2\n\n    def test_fetch_kea_config_should_refetch_config_if_config_hash_is_unsupported(\n        self, api_mock\n    ):\n        api_mock.add(\n            \"config-get\",\n            lambda kea_arguments, kea_service: make_api_response(\n                {\"Dhcp4\": {}, \"hash\": \"1\"}\n            ),\n        )\n\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        client._fetch_kea_config()\n        client._fetch_kea_config()\n\n        assert len(api_mock.requests[\"config-get\"]) == 2\n\n\nclass TestHTTPSession:\n    \"\"\"\n    Checks that the client creates and uses HTTP sessions the way we want it to.\n    \"\"\"\n\n    def test_fetch_stats_should_warn_if_using_http(self, valid_dhcp4, api_mock, caplog):\n        \"\"\"\n        A warning should be logged when the scheme is HTTP since config responses\n        from the Kea API may contain sensitive data such as passwords in plaintext.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(SERVER_NICKNAME, \"http://example.org/\")\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n\n        with caplog.at_level(logging.WARNING):\n            client.fetch_stats()\n\n        assert (\n            \"Using HTTP to request potentially sensitive data such as API passwords\"\n            in caplog.text\n        )\n\n    def test_fetch_stats_should_warn_if_using_http_basic_auth_with_http(\n        self, valid_dhcp4, api_mock, caplog\n    ):\n        \"\"\"\n        An extra warning when the scheme is HTTP should be logged when HTTP Basic\n        Authentication is being used since this entails passwords being sent in\n        plaintext from client to server.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(\n            SERVER_NICKNAME,\n            \"http://example.org/\",\n            http_basic_username=\"nav\",\n            http_basic_password=\"nav\",\n        )\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n\n        with caplog.at_level(logging.WARNING):\n            client.fetch_stats()\n\n        assert \"Using HTTP Basic Authentication without HTTPS\" in caplog.text\n\n    def test_fetch_stats_should_error_if_using_client_certificate_with_http(\n        self, valid_dhcp4, api_mock\n    ):\n        \"\"\"\n        Client authentication is part of the TLS spec so it doesn't make sense to\n        continue if it is configured and the specified scheme is HTTP as we would\n        have to either ignore the wish to use HTTP or the wish to use TLS\n        certificates or both.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(\n            SERVER_NICKNAME, \"http://example.org/\", client_cert_path=\"/bar/baz.pem\"\n        )\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n\n        with pytest.raises(ConfigurationError):\n            client.fetch_stats()\n\n    def test_fetch_stats_should_use_http_basic_auth_when_this_is_configured(\n        self, valid_dhcp4, api_mock, monkeypatch\n    ):\n        \"\"\"\n        Checks that the requests.Session object used during a call to\n        Client.fetch_stats() has HTTP Basic Authentication parameters configured\n        throughout the call if HTTP Basic Authentication was configured during\n        client init.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(\n            SERVER_NICKNAME,\n            \"http://example.org/\",\n            http_basic_username=\"bar\",\n            http_basic_password=\"baz\",\n        )\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n\n        post = requests.Session.post\n        check_was_called = False\n\n        def check_auth(self, *args, **kwargs):\n            nonlocal check_was_called\n            check_was_called = True\n            assert self.auth == (\"bar\", \"baz\")\n            return post(self, *args, **kwargs)\n\n        monkeypatch.setattr(requests.Session, 'post', check_auth)\n        client.fetch_stats()\n\n        assert check_was_called\n\n    def test_fetch_stats_should_use_client_certificates_when_this_is_configured(\n        self, valid_dhcp4, api_mock, monkeypatch\n    ):\n        \"\"\"\n        Checks that the requests.Session object used during a call to\n        Client.fetch_stats() has certificate parameters configured throughout the\n        call if client TLS certificates was configured during client init.\n        \"\"\"\n        config, statistics, expected_stats = valid_dhcp4\n        client = Client(\n            SERVER_NICKNAME,\n            \"https://example.org/\",\n            client_cert_path=\"/bar/baz.pem\",\n        )\n        api_mock.autofill(\"dhcp4\", config=config, statistics=statistics)\n\n        post = requests.Session.post\n        check_was_called = False\n\n        def check_cert(self, *args, **kwargs):\n            nonlocal check_was_called\n            check_was_called = True\n            assert self.cert == \"/bar/baz.pem\"\n            return post(self, *args, **kwargs)\n\n        monkeypatch.setattr(requests.Session, 'post', check_cert)\n        client.fetch_stats()\n\n        assert check_was_called\n\n\nTestData = namedtuple(\"TestData\", [\"config\", \"statistics\", \"expected_stats\"])\nTestData.__test__ = False  # pytest: this is not a test case\n\n\n@pytest.fixture\ndef valid_dhcp4():\n    config = {\n        \"Dhcp4\": {\n            \"control-socket\": {\n                \"socket-name\": \"/run/kea/control_socket_4\",\n                \"socket-type\": \"unix\",\n            },\n            \"hooks-libraries\": [],\n            \"lease-database\": {\n                \"name\": \"/var/lib/kea/kea-leases4.csv\",\n                \"type\": \"memfile\",\n            },\n            \"shared-networks\": [\n                {\n                    \"name\": \"shared-network-1\",\n                    \"subnet4\": [\n                        {\n                            \"id\": 3,\n                            \"pools\": [\n                                {\n                                    \"option-data\": [],\n                                    \"pool\": \"42.0.3.1-42.0.3.10\",\n                                    \"pool-id\": 1,\n                                    \"user-context\": {\n                                        \"group\": \"oslo-student\",\n                                    },\n                                },\n                            ],\n                            \"subnet\": \"42.0.3.0/24\",\n                        },\n                        {\n                            \"id\": 4,\n                            \"option-data\": [],\n                            \"pools\": [\n                                {\n                                    \"option-data\": [],\n                                    \"pool\": \"42.0.4.1-42.0.4.5\",\n                                    \"pool-id\": 1,\n                                    # This is a Kea pool with 'group' in 'user-context'\n                                    \"user-context\": {\n                                        \"group\": \"oslo-staff\",\n                                    },\n                                },\n                            ],\n                            \"subnet\": \"42.0.4.1/24\",\n                        },\n                    ],\n                    \"valid-lifetime\": 4000,\n                },\n                {\n                    \"name\": \"shared-network-2\",\n                    \"subnet4\": [\n                        {\n                            \"id\": 5,\n                            \"option-data\": [],\n                            \"pools\": [\n                                {\n                                    \"option-data\": [],\n                                    \"pool\": \"42.0.5.1-42.0.5.5\",\n                                    \"pool-id\": 1,\n                                    # This is a Kea pool without 'user-context'\n                                },\n                            ],\n                            \"subnet\": \"42.0.5.0/24\",\n                        },\n                    ],\n                    \"valid-lifetime\": 4000,\n                },\n                {\n                    \"name\": \"shared-network-3\",\n                    \"subnet4\": [\n                        {\n                            \"id\": 6,\n                            \"option-data\": [],\n                            \"pools\": [\n                                {\n                                    \"option-data\": [],\n                                    \"pool\": \"42.0.6.1-42.0.6.5\",\n                                    \"pool-id\": 1,\n                                    # This is a Kea pool with 'user-context' but\n                                    # without 'group' in 'user-context'\n                                    \"user-context\": {\n                                        \"name\": \"bob\",\n                                    },\n                                },\n                            ],\n                            \"subnet\": \"42.0.6.0/24\",\n                        },\n                    ],\n                    \"valid-lifetime\": 4000,\n                },\n            ],\n            \"subnet4\": [\n                {\n                    \"id\": 1,\n                    \"option-data\": [],\n                    \"pools\": [\n                        {\n                            \"option-data\": [],\n                            \"pool\": \"42.0.1.1-42.0.1.10\",\n                            \"pool-id\": 1,\n                            \"user-context\": {\n                                \"group\": \"bergen-staff\",\n                            },\n                        },\n                    ],\n                    \"subnet\": \"42.0.1.0/24\",\n                },\n                {\n                    \"id\": 2,\n                    \"option-data\": [],\n                    \"pools\": [\n                        {\n                            \"option-data\": [],\n                            # First range format: x.x.x.x/m\n                            \"pool\": \"42.0.2.1-42.0.2.10\",\n                            \"pool-id\": 1,\n                            \"user-context\": {\n                                \"group\": \"bergen-student\",\n                            },\n                        },\n                        {\n                            \"option-data\": [],\n                            # Second range format: x.x.x.x - x.x.x.x\n                            \"pool\": \"42.0.2.32/28\",\n                            \"pool-id\": 3,\n                            \"user-context\": {\n                                \"group\": \"bergen-student\",\n                            },\n                        },\n                        {\n                            \"option-data\": [],\n                            \"pool\": \"42.0.2.128/25\",\n                            \"pool-id\": 2,\n                            \"user-context\": {\n                                \"group\": \"bergen-student\",\n                            },\n                        },\n                    ],\n                    \"subnet\": \"42.0.2.0/24\",\n                },\n            ],\n            \"valid-lifetime\": 4000,\n        },\n    }\n\n    statistics = {\n        \"subnet[1].pool[1].assigned-addresses\": [\n            [2, \"2025-05-30 05:49:49.467993\"],\n            [0, \"2025-05-29 05:49:49.467993\"],\n            [0, \"2025-05-28 05:49:49.467993\"],\n        ],\n        \"subnet[1].pool[1].declined-addresses\": [\n            [1, \"2025-05-30 05:49:49.467995\"],\n            [0, \"2025-05-29 05:49:49.467995\"],\n            [0, \"2025-05-28 05:49:49.467995\"],\n        ],\n        \"subnet[1].pool[1].total-addresses\": [\n            [10, \"2025-05-30 05:49:49.467930\"],\n            [8, \"2025-05-29 05:49:49.467930\"],\n        ],\n        \"subnet[2].pool[1].assigned-addresses\": [\n            [0, \"2025-05-30 05:49:49.468017\"],\n            [1, \"2025-05-29 05:49:49.468017\"],\n        ],\n        \"subnet[2].pool[1].declined-addresses\": [[1, \"2025-05-30 05:49:49.468019\"]],\n        \"subnet[2].pool[1].total-addresses\": [[10, \"2025-05-30 05:49:49.467941\"]],\n        \"subnet[2].pool[2].assigned-addresses\": [[1, \"2025-05-30 05:49:49.468033\"]],\n        \"subnet[2].pool[2].declined-addresses\": [[0, \"2025-05-30 05:49:49.468035\"]],\n        \"subnet[2].pool[2].total-addresses\": [[128, \"2025-05-30 05:49:49.467949\"]],\n        \"subnet[2].pool[3].assigned-addresses\": [\n            [0, \"2025-05-30 05:49:49.468025\"],\n            [2, \"2025-05-29 05:49:49.468025\"],\n        ],\n        \"subnet[2].pool[3].declined-addresses\": [\n            [0, \"2025-05-30 05:49:49.468027\"],\n            [3, \"2025-05-29 05:49:49.468027\"],\n        ],\n        \"subnet[2].pool[3].total-addresses\": [\n            [16, \"2025-05-30 05:49:49.467945\"],\n            [16, \"2025-05-29 05:49:49.467945\"],\n            [16, \"2025-05-28 05:49:49.467945\"],\n        ],\n        \"subnet[3].pool[1].assigned-addresses\": [[0, \"2025-05-30 05:49:49.468051\"]],\n        \"subnet[3].pool[1].declined-addresses\": [[0, \"2025-05-30 05:49:49.468053\"]],\n        \"subnet[3].pool[1].total-addresses\": [[10, \"2025-05-30 05:49:49.467959\"]],\n        \"subnet[4].pool[1].assigned-addresses\": [[0, \"2025-05-30 05:49:49.468067\"]],\n        \"subnet[4].pool[1].declined-addresses\": [[0, \"2025-05-30 05:49:49.468070\"]],\n        \"subnet[4].pool[1].total-addresses\": [[5, \"2025-05-30 05:49:49.467968\"]],\n        \"subnet[5].pool[1].assigned-addresses\": [[0, \"2025-05-30 05:49:49.468085\"]],\n        \"subnet[5].pool[1].declined-addresses\": [[0, \"2025-05-30 05:49:49.468087\"]],\n        \"subnet[5].pool[1].total-addresses\": [[5, \"2025-05-30 05:49:49.467976\"]],\n        \"subnet[6].pool[1].assigned-addresses\": [[0, \"2025-05-30 05:49:49.468085\"]],\n        \"subnet[6].pool[1].declined-addresses\": [[0, \"2025-05-30 05:49:49.468087\"]],\n        \"subnet[6].pool[1].total-addresses\": [[5, \"2025-05-30 05:49:49.467976\"]],\n        # Some irrelevant values that won't be used by the client:\n        \"subnet[1].cumulative-assigned-addresses\": [[0, \"2022-02-11 17:54:17.487528\"]],\n        \"subnet[1].declined-addresses\": [[0, \"2022-02-11 17:54:17.487585\"]],\n        \"subnet[1].reclaimed-declined-addresses\": [[0, \"2022-02-11 17:54:17.487595\"]],\n        \"subnet[1].reclaimed-leases\": [[0, \"2022-02-11 17:54:17.487604\"]],\n        \"subnet[1].total-addresses\": [[10, \"2022-02-11 17:54:17.487512\"]],\n    }\n\n    # Each list in the 'statistics' response from the api (see above dict) is a\n    # timeseries for a specific stat type for a specific pool.  The first\n    # stat in each list is assumed to be the most recent, and this is the\n    # stat we expect to get for each stat type and pool after processing\n    # the api response.\n    expected_stats = [\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-staff.4.42_0_1_1.42_0_1_10.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 2),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-staff.4.42_0_1_1.42_0_1_10.declined\",\n            (\"2025-05-30 05:49:49.467993\", 1),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-staff.4.42_0_1_1.42_0_1_10.total\",\n            (\"2025-05-30 05:49:49.467993\", 10),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-staff.4.42_0_1_1.42_0_1_10.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 8),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_1.42_0_2_10.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_1.42_0_2_10.declined\",\n            (\"2025-05-30 05:49:49.467993\", 1),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_1.42_0_2_10.total\",\n            (\"2025-05-30 05:49:49.467993\", 10),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_1.42_0_2_10.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 10),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_128.42_0_2_255.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 1),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_128.42_0_2_255.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_128.42_0_2_255.total\",\n            (\"2025-05-30 05:49:49.467993\", 128),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_128.42_0_2_255.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 127),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_32.42_0_2_47.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_32.42_0_2_47.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_32.42_0_2_47.total\",\n            (\"2025-05-30 05:49:49.467993\", 16),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.bergen-student.4.42_0_2_32.42_0_2_47.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 16),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-student.4.42_0_3_1.42_0_3_10.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-student.4.42_0_3_1.42_0_3_10.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-student.4.42_0_3_1.42_0_3_10.total\",\n            (\"2025-05-30 05:49:49.467993\", 10),\n        ),\n        (\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-student.4.42_0_3_1.42_0_3_10.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 10),\n        ),\n        (\n            # From Kea pool with 'group': 'oslo-staff' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-staff.4.42_0_4_1.42_0_4_5.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool with 'group': 'oslo-staff' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-staff.4.42_0_4_1.42_0_4_5.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool with 'group': 'oslo-staff' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-staff.4.42_0_4_1.42_0_4_5.total\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n        (\n            # From Kea pool with 'group': 'oslo-staff' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.custom_groups.oslo-staff.4.42_0_4_1.42_0_4_5.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n        (\n            # From Kea pool without 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_5_1.42_0_5_5.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool without 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_5_1.42_0_5_5.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool without 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_5_1.42_0_5_5.total\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n        (\n            # From Kea pool without 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_5_1.42_0_5_5.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n        (\n            # From Kea pool with 'user-context' but without 'group' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_6_1.42_0_6_5.assigned\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool with 'user-context' but without 'group' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_6_1.42_0_6_5.declined\",\n            (\"2025-05-30 05:49:49.467993\", 0),\n        ),\n        (\n            # From Kea pool with 'user-context' but without 'group' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_6_1.42_0_6_5.total\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n        (\n            # From Kea pool with 'user-context' but without 'group' in 'user-context'\n            f\"nav.dhcp.servers.{SERVER_NICKNAME}.range.special_groups.standalone.4.42_0_6_1.42_0_6_5.unassigned\",\n            (\"2025-05-30 05:49:49.467993\", 5),\n        ),\n    ]\n\n    return TestData(config=config, statistics=statistics, expected_stats=expected_stats)\n\n\ndef make_api_response(val: dict, status: _KeaStatus = _KeaStatus.SUCCESS):\n    \"\"\"\n    Make a Kea API conformant response body whose response value (called\n    response 'arguments' in the specification) is given by the dictionary `val`.\n    \"\"\"\n    return f'''\n[\n    {{\n        \"result\": {status},\n        \"arguments\": {json.dumps(val)}\n    }}\n]\n    '''\n\n\n@pytest.fixture\ndef api_mock(monkeypatch):\n    \"\"\"\n    Any test that include this fixture, will automatically mock\n    requests.Session.post() and requests.post(). The fixture returns a\n    namespace with three functions:\n\n    api_mock.add(command, text_or_func, attrs=None) --- appends the given\n    text_or_func, which is either a string or a function f(dict, list) ->\n    string, to the given command string's associated fifo queue to use in\n    generating responses for Kea API requests for command. On any calls to\n    requests.post() or requests.Session().post() in the code under test, the Kea\n    API command is extracted from the request body and the text of the next\n    element in that command's fifo becomes the text-value of the mocked\n    requests.post() requests.Response return value. Text strings are popped from\n    the fifo after use, while functions are not. If the fifo was empty, an API\n    conformant \"command not supported\" response is returned instead. The attrs\n    keyword (see again the function signature at the top of this paragraph) can\n    optionally be set to a dictionary of attributes to set on the\n    requests.Response response. Setting attrs={\"status\": 404} will cause the\n    response to be an HTTP 404 error.\n\n    api_mock.clear() --- Empty the fifo queues of all commands. This\n    removes all previously configured command responses.\n\n    api_mock.autofill(service, config, statistics) --- fill the queue for\n    the \"config-get\" and \"statistic-get-all\" commands to mimic the response\n    texts actually sent by the Kea API for a Kea DHCP server named `service`\n    (\"dhcp4\" for ipv4 DHCP \"dhcp6\" for ipv6 DHCP) with config `config` and\n    statistics `statistics`.\n\n    The returned namespace contains a dictionary in addition to the three above\n    functions:\n\n    api_mock.responses --- dictionary mapping Kea API command names\n    to a list of ordered pairs (<request-arguments>, <request-service>),\n    one pair per request for that API command recorded so far.\n    \"\"\"\n    command_requests: dict[str, list[tuple[dict, list]]] = {}\n    command_responses: dict[\n        str, deque[tuple[Union[str, Callable[[dict, list], str]], dict]]\n    ] = {}\n    unknown_command_response = \"\"\"[\n  {{\n    \"result\": 2,\n    \"text\": \"'{0}' command not supported.\"\n  }}\n]\"\"\"\n\n    def post_function_mock(url, *args, data=\"{}\", **kwargs):\n        \"\"\"This function will replace requests.post()\"\"\"\n        if isinstance(data, dict):\n            data = json.dumps(data)\n        elif isinstance(data, bytes):\n            data = data.decode(\"utf8\")\n        if not isinstance(data, str):\n            pytest.fail(\n                f\"data argument to the mocked requests.post() is of unknown type \"\n                f\"{type(data)}\"\n            )\n\n        try:\n            data = json.loads(data)\n            command = data[\"command\"]\n        except (JSONDecodeError, KeyError):\n            pytest.fail(\n                \"All post requests that NAV sends to the Kea API\"\n                \"should be a JSON with a 'command' key. Instead, NAV sent \"\n                f\"\\n\\n{data!r}\\n\\n to the test's Kea API mock\"\n            )\n\n        kea_arguments = data.get(\"arguments\", {})\n        kea_service = data.get(\"service\", [])\n\n        command_requests.setdefault(command, [])\n        command_requests[command].append((kea_arguments, kea_service))\n\n        response_text = unknown_command_response.format(command)\n        attrs = {}\n        fifo = command_responses.get(command, deque())\n        if fifo:\n            text_or_func, attrs = fifo[0]\n            if callable(text_or_func):\n                response_text = text_or_func(kea_arguments, kea_service)\n            else:\n                response_text = str(text_or_func)\n                fifo.popleft()\n\n        response = requests.Response()\n        response._content = response_text.encode(\"utf8\")\n        response.encoding = \"utf8\"\n        response.status_code = 200\n        response.reason = \"OK\"\n        response.headers = kwargs.get(\"headers\", {})\n        response.cookies = kwargs.get(\"cookies\", {})\n        response.url = url\n        response.close = lambda: None\n\n        for attr, value in attrs.items():\n            setattr(response, attr, value)\n\n        return response\n\n    def post_method_mock(self, url, *args, **kwargs):\n        \"\"\"This function will replace requests.Session.post()\"\"\"\n        return post_function_mock(url, *args, **kwargs)\n\n    def add_command_response(command_name, text_or_func, attrs=None):\n        attrs = attrs or {}\n        command_responses.setdefault(command_name, deque())\n        command_responses[command_name].append((text_or_func, attrs))\n\n    def clear_command_responses():\n        command_responses.clear()\n\n    def autofill_command_responses(\n        expected_service, config=None, statistics=None, attrs=None\n    ):\n        attrs = attrs or {}\n\n        if config is not None:\n\n            def config_response(arguments, service):\n                assert service == [expected_service], (\n                    f\"API Client for service '{expected_service}' should not send \"\n                    f\"requests to service '{service}'\"\n                )\n                return make_api_response(config)\n\n            add_command_response(\"config-get\", config_response, attrs)\n\n        if statistics is not None:\n\n            def statistic_response(arguments, service):\n                assert service == [expected_service], (\n                    f\"API Client for service '{expected_service}' should not send \"\n                    f\"requests to service '{service}'\"\n                )\n                return make_api_response(statistics)\n\n            add_command_response(\"statistic-get-all\", statistic_response, attrs)\n\n    class ResponseQueue:\n        add = add_command_response\n        clear = clear_command_responses\n        autofill = autofill_command_responses\n        requests = command_requests\n\n    monkeypatch.setattr(requests, 'post', post_function_mock)\n    monkeypatch.setattr(requests.Session, 'post', post_method_mock)\n\n    return ResponseQueue\n"
  },
  {
    "path": "tests/unittests/django/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/django/aliases_field_test.py",
    "content": "\"\"\"Tests for AliasListField and AliasListWidget\"\"\"\n\nimport pytest\nfrom django.core.exceptions import ValidationError\nfrom django.http import QueryDict\n\nfrom nav.django.forms import (\n    MAX_ALIAS_LENGTH,\n    AliasListField,\n    AliasListWidget,\n    validate_aliases,\n)\n\n\nclass TestAliasListFieldClean:\n    def test_when_value_is_none_then_it_should_return_empty_list(self):\n        field = AliasListField(required=False)\n        assert field.clean(None) == []\n\n    def test_when_value_is_empty_list_then_it_should_return_empty_list(self):\n        field = AliasListField(required=False)\n        assert field.clean([]) == []\n\n    def test_when_value_has_strings_then_it_should_return_them(self):\n        field = AliasListField(required=False)\n        assert field.clean(['foo', 'bar']) == ['foo', 'bar']\n\n    def test_when_value_has_whitespace_then_it_should_strip(self):\n        field = AliasListField(required=False)\n        assert field.clean(['  foo  ', ' bar ']) == ['foo', 'bar']\n\n    def test_when_value_has_empty_strings_then_it_should_remove_them(self):\n        field = AliasListField(required=False)\n        assert field.clean(['foo', '', '  ', 'bar']) == ['foo', 'bar']\n\n    def test_when_value_has_duplicates_then_it_should_deduplicate(self):\n        field = AliasListField(required=False)\n        assert field.clean(['foo', 'bar', 'foo']) == ['foo', 'bar']\n\n    def test_when_value_has_non_string_then_it_should_raise_validation_error(self):\n        field = AliasListField(required=False)\n        with pytest.raises(ValidationError):\n            field.clean([123])\n\n    def test_when_alias_exceeds_max_length_then_it_should_raise_validation_error(self):\n        field = AliasListField(required=False)\n        long_alias = 'a' * (MAX_ALIAS_LENGTH + 1)\n        with pytest.raises(ValidationError):\n            field.clean([long_alias])\n\n    def test_when_alias_contains_pipe_then_it_should_raise_validation_error(self):\n        field = AliasListField(required=False)\n        with pytest.raises(ValidationError):\n            field.clean(['foo|bar'])\n\n\nclass TestAliasListWidgetValueFromDatadict:\n    def test_when_data_has_json_then_it_should_return_list(self):\n        widget = AliasListWidget()\n        data = QueryDict(mutable=True)\n        data['aliases_json'] = '[\"foo\", \"bar\"]'\n        assert widget.value_from_datadict(data, {}, 'aliases') == ['foo', 'bar']\n\n    def test_when_data_has_no_json_then_it_should_return_empty_list(self):\n        widget = AliasListWidget()\n        data = QueryDict(mutable=True)\n        assert widget.value_from_datadict(data, {}, 'aliases') == []\n\n    def test_when_data_has_invalid_json_then_it_should_return_empty_list(self):\n        widget = AliasListWidget()\n        data = QueryDict(mutable=True)\n        data['aliases_json'] = 'not valid json'\n        assert widget.value_from_datadict(data, {}, 'aliases') == []\n\n    def test_when_data_has_non_list_json_then_it_should_return_empty_list(self):\n        widget = AliasListWidget()\n        data = QueryDict(mutable=True)\n        data['aliases_json'] = '{\"key\": \"value\"}'\n        assert widget.value_from_datadict(data, {}, 'aliases') == []\n\n\nclass TestAliasListFieldPrepareValue:\n    def test_when_value_is_list_then_it_should_return_it(self):\n        field = AliasListField(required=False)\n        assert field.prepare_value(['a', 'b']) == ['a', 'b']\n\n    def test_when_value_is_json_string_then_it_should_parse(self):\n        field = AliasListField(required=False)\n        assert field.prepare_value('[\"a\", \"b\"]') == ['a', 'b']\n\n    def test_when_value_is_none_then_it_should_return_empty_list(self):\n        field = AliasListField(required=False)\n        assert field.prepare_value(None) == []\n\n\nclass TestValidateAliases:\n    def test_when_value_is_none_then_it_should_return_empty_list(self):\n        assert validate_aliases(None) == []\n\n    def test_when_value_is_empty_list_then_it_should_return_empty_list(self):\n        assert validate_aliases([]) == []\n\n    def test_when_value_has_strings_then_it_should_return_them(self):\n        assert validate_aliases(['foo', 'bar']) == ['foo', 'bar']\n\n    def test_when_value_has_whitespace_then_it_should_strip(self):\n        assert validate_aliases(['  foo  ', ' bar ']) == ['foo', 'bar']\n\n    def test_when_value_has_empty_strings_then_it_should_remove_them(self):\n        assert validate_aliases(['foo', '', '  ', 'bar']) == ['foo', 'bar']\n\n    def test_when_value_has_duplicates_then_it_should_deduplicate(self):\n        assert validate_aliases(['foo', 'bar', 'foo']) == ['foo', 'bar']\n\n    def test_when_value_has_non_string_then_it_should_raise_validation_error(self):\n        with pytest.raises(ValidationError):\n            validate_aliases([123])\n\n    def test_when_alias_exceeds_max_length_then_it_should_raise_validation_error(self):\n        long_alias = 'a' * (MAX_ALIAS_LENGTH + 1)\n        with pytest.raises(ValidationError):\n            validate_aliases([long_alias])\n\n    def test_when_alias_contains_pipe_then_it_should_raise_validation_error(self):\n        with pytest.raises(ValidationError):\n            validate_aliases(['foo|bar'])\n"
  },
  {
    "path": "tests/unittests/django/filter_test.py",
    "content": "import pytest\n\nfrom django.test import RequestFactory\n\nfrom nav.django.filter import NAVExceptionReporterFilter\n\n\n@pytest.fixture\ndef reporter_filter():\n    return NAVExceptionReporterFilter()\n\n\nclass TestNAVExceptionReporterFilter:\n    \"\"\"Tests for NAVExceptionReporterFilter.get_post_parameters()\"\"\"\n\n    def test_when_sensitive_post_parameters_not_used_then_password_should_still_be_masked(  # noqa: E501\n        self, reporter_filter\n    ):\n        request = RequestFactory().post(\n            '/', data={'username': 'admin', 'password': 's3cret'}\n        )\n        result = reporter_filter.get_post_parameters(request)\n        assert result['password'] == reporter_filter.cleansed_substitute\n        assert result['username'] == 'admin'\n\n    def test_password_like_post_fields_should_be_masked(self, reporter_filter):\n        request = RequestFactory().post(\n            '/',\n            data={\n                'password': 's3cret',\n                'old_password': 'old',\n                'new_password1': 'new1',\n                'new_password2': 'new2',\n            },\n        )\n        result = reporter_filter.get_post_parameters(request)\n        for key in ('password', 'old_password', 'new_password1', 'new_password2'):\n            assert result[key] == reporter_filter.cleansed_substitute\n\n    def test_non_password_fields_should_pass_through(self, reporter_filter):\n        request = RequestFactory().post(\n            '/', data={'username': 'admin', 'next': '/foo/'}\n        )\n        result = reporter_filter.get_post_parameters(request)\n        assert result['username'] == 'admin'\n        assert result['next'] == '/foo/'\n\n    def test_when_sensitive_post_parameters_set_password_it_should_still_be_masked(\n        self, reporter_filter\n    ):\n        request = RequestFactory().post(\n            '/', data={'username': 'admin', 'password': 's3cret'}\n        )\n        request.sensitive_post_parameters = ('password',)\n        result = reporter_filter.get_post_parameters(request)\n        assert result['password'] == reporter_filter.cleansed_substitute\n        assert result['username'] == 'admin'\n"
  },
  {
    "path": "tests/unittests/django/formats_test.py",
    "content": "\"\"\"Tests for NAV's custom date format module\"\"\"\n\nimport datetime\n\nfrom django.template import Context, Template\nfrom django.utils.formats import get_format\n\nSAMPLE_DATETIME = datetime.datetime(2026, 3, 20, 14, 5, 9)\n\n\nclass TestDateFormatSpecifiers:\n    \"\"\"Verify NAV's custom format module provides ISO format specifiers\"\"\"\n\n    def test_when_l10n_active_datetime_format_should_be_iso(self):\n        assert get_format('DATETIME_FORMAT') == 'Y-m-d H:i:s'\n\n    def test_when_l10n_active_date_format_should_be_iso(self):\n        assert get_format('DATE_FORMAT') == 'Y-m-d'\n\n    def test_when_l10n_active_short_datetime_format_should_be_iso(self):\n        assert get_format('SHORT_DATETIME_FORMAT') == 'Y-m-d H:i'\n\n    def test_when_l10n_active_time_format_should_be_24h(self):\n        assert get_format('TIME_FORMAT') == 'H:i:s'\n\n\nclass TestRenderedDateOutput:\n    \"\"\"Verify that template date filters produce ISO-formatted output\"\"\"\n\n    def _render(self, format_name):\n        template = Template('{{ val|date:\"' + format_name + '\" }}')\n        return template.render(Context({'val': SAMPLE_DATETIME}))\n\n    def test_when_rendering_datetime_format_should_produce_iso_string(self):\n        assert self._render('DATETIME_FORMAT') == '2026-03-20 14:05:09'\n\n    def test_when_rendering_date_format_should_produce_iso_string(self):\n        assert self._render('DATE_FORMAT') == '2026-03-20'\n\n    def test_when_rendering_short_datetime_format_should_produce_iso_string(self):\n        assert self._render('SHORT_DATETIME_FORMAT') == '2026-03-20 14:05'\n\n    def test_when_rendering_time_format_should_produce_24h_string(self):\n        assert self._render('TIME_FORMAT') == '14:05:09'\n"
  },
  {
    "path": "tests/unittests/django/forms_test.py",
    "content": "from unittest import TestCase\nimport json\n\nfrom nav.django.forms import JSONWidget\n\n\nclass JSONWidgetTest(TestCase):\n    def test_render_empty_value(self):\n        widget = JSONWidget()\n        expected = ''\n        value = ''\n        result = widget._render_value(value)\n        self.assertEqual(result, expected)\n        value = None\n        result = widget._render_value(value)\n        self.assertEqual(result, expected)\n        value = {}\n        result = widget._render_value(value)\n        self.assertEqual(result, expected)\n\n    def test_render_good_value(self):\n        widget = JSONWidget()\n        value = {'a': b'a'}\n        expected = {'a': 'a'}\n        result = widget._render_value(value)\n        from_json = json.loads(result)\n        self.assertEqual(expected, from_json)\n        value = [1, None, b'q', 'foo']\n        expected = [1, None, 'q', 'foo']\n        result = widget._render_value(value)\n        from_json = json.loads(result)\n        self.assertEqual(expected, from_json)\n"
  },
  {
    "path": "tests/unittests/django/settings_test.py",
    "content": "import logging\n\nfrom nav.django.settings import Suppress503\n\n\nclass TestSuppress503:\n    def test_when_status_code_is_503_it_should_reject_record(self):\n        record = logging.LogRecord(\"test\", logging.ERROR, \"\", 0, \"msg\", (), None)\n        record.status_code = 503\n\n        assert Suppress503().filter(record) is False\n\n    def test_when_status_code_is_500_it_should_accept_record(self):\n        record = logging.LogRecord(\"test\", logging.ERROR, \"\", 0, \"msg\", (), None)\n        record.status_code = 500\n\n        assert Suppress503().filter(record) is True\n\n    def test_when_no_status_code_it_should_accept_record(self):\n        record = logging.LogRecord(\"test\", logging.ERROR, \"\", 0, \"msg\", (), None)\n\n        assert Suppress503().filter(record) is True\n"
  },
  {
    "path": "tests/unittests/django/templatetags/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/django/templatetags/info_test.py",
    "content": "import unittest\n\nfrom datetime import timedelta, datetime\n\nfrom nav.django.templatetags.info import (\n    time_since,\n    is_max_timestamp,\n    get_attr,\n    find_attr,\n    highlight,\n)\n\n\nclass DummyObject(object):\n    def __init__(self):\n        self.test = \"A String\"\n        self.dummyobject = AnotherDummyObject()\n\n\nclass AnotherDummyObject(object):\n    def __init__(self):\n        self.test = \"A String\"\n\n\nclass TemplateTagsTest(unittest.TestCase):\n    def setUp(self):\n        self.dummy = DummyObject()\n\n    def test_time_since(self):\n        def timestamp_calc(*args, **kwargs):\n            return datetime.now() - timedelta(*args, **kwargs)\n\n        minute = 60\n\n        self.assertEqual(time_since(None), \"Never\")\n        self.assertEqual(\n            time_since(timestamp_calc(seconds=(10 * minute + 10))), \"10\\xa0mins\"\n        )\n        self.assertEqual(\n            time_since(timestamp_calc(seconds=(1 * minute + 5))), \"1\\xa0min\"\n        )\n        self.assertEqual(time_since(timestamp_calc(0)), \"Now\")\n        self.assertEqual(time_since(datetime.max), \"Now\")\n\n    def test_is_max_timestamp(self):\n        self.assertTrue(is_max_timestamp(datetime.max))\n        self.assertFalse(is_max_timestamp(datetime(3, 2, 1)))\n\n    def test_get_attr_basic_lookup(self):\n        \"\"\"Test template filter for getting attributes from objects\"\"\"\n\n        self.assertTrue(isinstance(get_attr(self.dummy, 'test'), str))\n        self.assertTrue(\n            isinstance(get_attr(self.dummy, 'dummyobject'), AnotherDummyObject)\n        )\n        self.assertEqual(get_attr(self.dummy, 'tes'), \"\")\n\n    def test_get_attr_chained_lookup(self):\n        \"\"\"Test template filter for getting attributes from objects\"\"\"\n\n        self.assertTrue(isinstance(get_attr(self.dummy, 'dummyobject.test'), str))\n\n    def test_get_attr_chained_lookup_error(self):\n        \"\"\"Test template filter for getting attributes from objects\"\"\"\n\n        self.assertEqual(get_attr(self.dummy, 'dummyobject.tes'), \"\")\n\n    def test_find_attr_basic_lookup(self):\n        \"\"\"Test helper function for getting attributes from objects\"\"\"\n\n        self.assertTrue(\n            isinstance(find_attr(self.dummy, ['dummyobject']), AnotherDummyObject)\n        )\n\n    def test_find_attr_chained_lookup(self):\n        \"\"\"Test helper function for getting attributes from objects\"\"\"\n\n        self.assertTrue(isinstance(find_attr(self.dummy, ['dummyobject', 'test']), str))\n\n    def test_find_attr_error_lookup(self):\n        \"\"\"Test helper function for getting attributes from objects\"\"\"\n\n        self.assertEqual(find_attr(self.dummy, ['dummyobjec']), \"\")\n\n    def test_find_attr_chained_error_lookup(self):\n        \"\"\"Test helper function for getting attributes from objects\"\"\"\n\n        self.assertEqual(find_attr(self.dummy, ['dummyobject', 'test', 'nothere']), \"\")\n\n    def test_find_attr_middle_chained_error_lookup(self):\n        \"\"\"Test helper function for getting attributes from objects\"\"\"\n\n        self.assertEqual(find_attr(self.dummy, ['dummyobjec', 'test', 'nothere']), \"\")\n\n\nclass HighlightFilterTest(unittest.TestCase):\n    def test_when_query_matches_then_it_should_wrap_in_mark_tags(self):\n        assert str(highlight(\"Building A\", \"build\")) == \"<mark>Build</mark>ing A\"\n\n    def test_when_match_is_case_insensitive_then_it_should_preserve_case(self):\n        assert str(highlight(\"FOOBAR\", \"foo\")) == \"<mark>FOO</mark>BAR\"\n\n    def test_when_query_does_not_match_then_it_should_return_escaped_text(self):\n        assert str(highlight(\"Hello World\", \"xyz\")) == \"Hello World\"\n\n    def test_when_text_contains_html_then_it_should_escape_it(self):\n        result = str(highlight(\"<script>alert(1)</script>\", \"alert\"))\n        assert \"&lt;script&gt;\" in result\n        assert \"<mark>alert</mark>\" in result\n\n    def test_when_query_is_empty_then_it_should_return_text_unchanged(self):\n        assert highlight(\"Hello\", \"\") == \"Hello\"\n\n    def test_when_query_has_multiple_matches_then_it_should_highlight_all(self):\n        result = str(highlight(\"foo bar foo\", \"foo\"))\n        assert result == \"<mark>foo</mark> bar <mark>foo</mark>\"\n"
  },
  {
    "path": "tests/unittests/django/templatetags/popover_test.py",
    "content": "\"\"\"Tests for popover template tags\"\"\"\n\nimport pytest\nfrom django.template import Context, Template, TemplateSyntaxError\n\nfrom nav.django.templatetags.popover import confirm_popover\n\n\nclass TestConfirmPopover:\n    \"\"\"Tests for the confirm_popover inclusion tag\"\"\"\n\n    def test_when_minimal_params_then_it_should_render_correctly(self):\n        template = Template(\n            '{% load popover %}'\n            '{% confirm_popover popover_id=\"test-id\" action_url=\"/delete/\" %}'\n        )\n        rendered = template.render(Context({}))\n\n        # Basic structure\n        assert 'id=\"test-id\"' in rendered\n        assert 'class=\"popover with-arrow\"' in rendered\n        assert 'action=\"/delete/\"' in rendered\n        assert 'data-popover-target=\"#test-id\"' in rendered\n        # ARIA attributes\n        assert 'aria-haspopup=\"true\"' in rendered\n        assert 'aria-expanded=\"false\"' in rendered\n        # Default values\n        assert 'Are you sure?' in rendered\n        assert '>Yes</button>' in rendered\n        assert '>No</button>' in rendered\n        assert 'fa-times-circle' in rendered\n        assert 'popover-content tiny' in rendered\n\n    def test_when_custom_title_then_it_should_render_title(self):\n        template = Template(\n            '{% load popover %}'\n            '{% confirm_popover popover_id=\"test-id\" action_url=\"/delete/\" '\n            'title=\"Delete this?\" %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert 'Delete this?' in rendered\n\n    def test_when_custom_button_text_then_it_should_render_button_text(self):\n        template = Template(\n            '{% load popover %}'\n            '{% confirm_popover popover_id=\"test-id\" action_url=\"/delete/\" '\n            'confirm_text=\"Confirm\" cancel_text=\"Abort\" %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert '>Confirm</button>' in rendered\n        assert '>Abort</button>' in rendered\n\n    def test_when_trigger_text_then_it_should_pass_trigger_text_to_context(self):\n        result = confirm_popover(\n            context={},\n            popover_id=\"test-id\",\n            action_url=\"/delete/\",\n            trigger_text=\"Delete\",\n            trigger_icon=\"\",\n        )\n\n        assert result['trigger_text'] == \"Delete\"\n        assert result['trigger_icon'] == \"\"\n        assert result['trigger_classes'] == \"secondary\"\n\n    @pytest.mark.parametrize(\n        \"param,value,expected\",\n        [\n            (\"align\", \"end\", 'data-align=\"end\"'),\n            (\"side\", \"top\", 'data-side=\"top\"'),\n            (\"size\", \"medium\", \"popover-content medium\"),\n        ],\n    )\n    def test_when_param_set_then_it_should_render_in_output(\n        self, param, value, expected\n    ):\n        template = Template(\n            '{% load popover %}'\n            '{% confirm_popover popover_id=\"test-id\" action_url=\"/delete/\" '\n            f'{param}=\"{value}\" %}}'\n        )\n        rendered = template.render(Context({}))\n\n        assert expected in rendered\n\n    def test_when_variable_id_then_it_should_resolve_variable(self):\n        template = Template(\n            '{% load popover %}'\n            '{% confirm_popover popover_id=item_id action_url=delete_url %}'\n        )\n        rendered = template.render(\n            Context({'item_id': 'dynamic-123', 'delete_url': '/items/123/delete/'})\n        )\n\n        assert 'id=\"dynamic-123\"' in rendered\n        assert 'action=\"/items/123/delete/\"' in rendered\n\n\nclass TestPopoverCloseButton:\n    \"\"\"Tests for the popover_close_button inclusion tag\"\"\"\n\n    def test_when_minimal_params_then_it_should_render_defaults(self):\n        template = Template('{% load popover %}{% popover_close_button %}')\n        rendered = template.render(Context({}))\n\n        assert '>Cancel</button>' in rendered\n        assert 'secondary' in rendered\n        assert 'data-close-popover' in rendered\n\n    def test_when_custom_text_then_it_should_render_text(self):\n        template = Template('{% load popover %}{% popover_close_button \"Dismiss\" %}')\n        rendered = template.render(Context({}))\n\n        assert '>Dismiss</button>' in rendered\n\n    def test_when_custom_classes_then_it_should_include_classes(self):\n        template = Template(\n            '{% load popover %}{% popover_close_button \"Close\" classes=\"alert\" %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert 'alert' in rendered\n\n\nclass TestPopoverBlockTag:\n    \"\"\"Tests for the {% popover %}...{% endpopover %} block tag\"\"\"\n\n    def test_when_basic_usage_then_it_should_render_correctly(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=\"About\" %}'\n            '<p>Content here</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(Context({}))\n\n        # Basic structure\n        assert 'id=\"info\"' in rendered\n        assert 'class=\"popover with-arrow\"' in rendered\n        assert '<p>Content here</p>' in rendered\n        assert '>About</button>' in rendered\n        # ARIA attributes\n        assert 'aria-haspopup=\"true\"' in rendered\n        assert 'aria-expanded=\"false\"' in rendered\n\n    def test_when_trigger_element_a_then_it_should_render_anchor(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=\"About\" trigger_element=\"a\" %}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert '<a ' in rendered\n        assert 'href' not in rendered  # No href to avoid scroll-to-top\n        assert '>About</a>' in rendered\n\n    def test_when_title_then_it_should_render_header(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=\"About\" title=\"Information\" %}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert '<h5>Information</h5>' in rendered\n\n    def test_when_no_arrow_then_it_should_not_have_arrow_class(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=\"About\" with_arrow=False %}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert 'with-arrow' not in rendered\n\n    @pytest.mark.parametrize(\n        \"params,expected\",\n        [\n            ('size=\"medium\"', \"popover-content medium\"),\n            ('side=\"right\"', 'data-side=\"right\"'),\n            ('align=\"end\"', 'data-align=\"end\"'),\n        ],\n    )\n    def test_when_param_set_then_it_should_render_in_output(self, params, expected):\n        template = Template(\n            '{% load popover %}'\n            f'{{% popover popover_id=\"info\" trigger_text=\"About\" {params} %}}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(Context({}))\n\n        assert expected in rendered\n\n    def test_when_variable_params_then_it_should_resolve_variables(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=popover_id trigger_text=link_text title=header %}'\n            '<p>{{ body }}</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(\n            Context(\n                {\n                    'popover_id': 'dynamic-info',\n                    'link_text': 'Click here',\n                    'header': 'Dynamic Title',\n                    'body': 'Dynamic content',\n                }\n            )\n        )\n\n        assert 'id=\"dynamic-info\"' in rendered\n        assert '>Click here</button>' in rendered\n        assert '<h5>Dynamic Title</h5>' in rendered\n        assert '<p>Dynamic content</p>' in rendered\n\n    def test_when_missing_popover_id_then_it_should_raise_error(self):\n        with pytest.raises(TemplateSyntaxError) as exc_info:\n            Template(\n                '{% load popover %}'\n                '{% popover trigger_text=\"About\" %}'\n                '<p>Content</p>'\n                '{% endpopover %}'\n            )\n        assert \"requires 'popover_id' argument\" in str(exc_info.value)\n\n    def test_when_missing_trigger_text_then_it_should_raise_error(self):\n        with pytest.raises(TemplateSyntaxError) as exc_info:\n            Template(\n                '{% load popover %}'\n                '{% popover popover_id=\"info\" %}'\n                '<p>Content</p>'\n                '{% endpopover %}'\n            )\n        assert \"requires 'trigger_text' argument\" in str(exc_info.value)\n\n    def test_when_trigger_text_contains_html_then_it_should_escape(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=malicious_text %}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(\n            Context({'malicious_text': '<script>alert(\"XSS\")</script>'})\n        )\n\n        assert '<script>' not in rendered\n        assert '&lt;script&gt;' in rendered\n\n    def test_when_title_contains_html_then_it_should_escape(self):\n        template = Template(\n            '{% load popover %}'\n            '{% popover popover_id=\"info\" trigger_text=\"About\" title=malicious_title %}'\n            '<p>Content</p>'\n            '{% endpopover %}'\n        )\n        rendered = template.render(\n            Context({'malicious_title': '<img onerror=\"alert(1)\">'})\n        )\n\n        assert '<img onerror' not in rendered\n        assert '&lt;img onerror' in rendered\n\n    def test_when_invalid_trigger_element_then_it_should_raise_error(self):\n        with pytest.raises(TemplateSyntaxError) as exc_info:\n            Template(\n                '{% load popover %}'\n                '{% popover popover_id=\"info\" trigger_text=\"X\" '\n                'trigger_element=\"div\" %}'\n                '<p>Content</p>'\n                '{% endpopover %}'\n            )\n        assert \"trigger_element must be one of\" in str(exc_info.value)\n        assert \"'div'\" in str(exc_info.value)\n\n    def test_when_invalid_side_then_it_should_raise_error(self):\n        with pytest.raises(TemplateSyntaxError) as exc_info:\n            Template(\n                '{% load popover %}'\n                '{% popover popover_id=\"info\" trigger_text=\"About\" side=\"center\" %}'\n                '<p>Content</p>'\n                '{% endpopover %}'\n            )\n        assert \"side must be one of\" in str(exc_info.value)\n        assert \"'center'\" in str(exc_info.value)\n\n    def test_when_invalid_align_then_it_should_raise_error(self):\n        with pytest.raises(TemplateSyntaxError) as exc_info:\n            Template(\n                '{% load popover %}'\n                '{% popover popover_id=\"info\" trigger_text=\"About\" align=\"middle\" %}'\n                '<p>Content</p>'\n                '{% endpopover %}'\n            )\n        assert \"align must be one of\" in str(exc_info.value)\n        assert \"'middle'\" in str(exc_info.value)\n"
  },
  {
    "path": "tests/unittests/django/templatetags/string_manipulation_test.py",
    "content": "import unittest\n\nfrom nav.django.templatetags.string_manipulation import deep_urlize\n\n\nclass DeepUrlizeTest(unittest.TestCase):\n    def test_deep_urlize_noturl(self):\n        for noturl in (None, '', 'blbl', 'a2'):\n            durl = deep_urlize(noturl)\n            self.assertEqual(durl, noturl)\n\n    def test_deep_urlize_correct_url(self):\n        teststr = 'https://x:y@www.vg.no/x-4312432;a=b?q=a#foo'\n        durl = deep_urlize(teststr)\n        self.assertEqual(durl, '<a href=\"{}\">{}</a>'.format(teststr, teststr))\n"
  },
  {
    "path": "tests/unittests/django/utils_test.py",
    "content": "# -*- coding: utf-8 -*-\nimport logging\nfrom unittest import TestCase\n\nfrom django.test import RequestFactory\n\nfrom nav.django.utils import (\n    get_os_version,\n    get_verbose_name,\n    pformat_request,\n    reverse_with_query,\n)\n\nfrom unittest.mock import patch\n\n_logger = logging.getLogger(__name__)\n\n\ndef test_verbose_name():\n    \"\"\"Test that get_verbose_name() works on all supported Django versions\"\"\"\n    from nav.models.manage import Netbox\n\n    name = get_verbose_name(Netbox, 'type__name')\n    assert name == 'type name'\n\n\ndef test_reverse_with_query_should_work_with_unicode():\n    \"\"\"Reveals issues with PY2/PY3 co-compatibility\"\"\"\n    assert reverse_with_query(\"maintenance-new\", roomid=\"bø-123\")\n\n\nclass TestPFormatRequest(TestCase):\n    def test_should_log_more_lines_than_there_are_attributes_in_request(\n        self,\n    ):\n        r = RequestFactory()\n        request = r.get('/')\n        num_request_attributes = len(vars(request))\n        with self.assertLogs(level=logging.DEBUG) as logs:\n            pformat_request(request, _logger.debug)\n            self.assertTrue(len(logs.records) > num_request_attributes)\n\n    def test_should_log_nothing_for_nonexistent_attribute(self):\n        r = RequestFactory()\n        request = r.get('/')\n        with self.assertRaises(AssertionError):\n            with self.assertLogs():\n                pformat_request(request, _logger.debug, 'doesnotexist-nanana')\n\n    def test_should_log_one_line_for_content_type(self):\n        r = RequestFactory()\n        request = r.get('/')\n        with self.assertLogs(level=logging.DEBUG) as logs:\n            pformat_request(request, _logger.debug, 'content_type')\n            self.assertEqual(len(logs.records), 1)\n\n\nclass TestGetValidOSVersion(TestCase):\n    def test_given_linux_os_returns_pretty_print_version(self):\n        with (\n            patch(\"platform.system\", return_value=\"Linux\"),\n            patch(\"distro.name\", return_value=\"Ubuntu 22.04\"),\n        ):\n            assert get_os_version() == \"Linux Ubuntu 22.04\"\n\n    def test_given_mac_os_returns_pretty_print_version(self):\n        with (\n            patch(\"platform.system\", return_value=\"Darwin\"),\n            patch(\"platform.mac_ver\", return_value=(\"13.2\", (\"\", \"\", \"\"), \"\")),\n        ):\n            assert get_os_version() == \"macOS 13.2\"\n\n    def test_given_windows_os_returns_pretty_print_version(self):\n        with (\n            patch(\"platform.system\", return_value=\"Windows\"),\n            patch(\"platform.release\", return_value=\"10\"),\n            patch(\"platform.version\", return_value=\"10.0.19042\"),\n        ):\n            assert get_os_version() == \"Windows 10 (10.0.19042)\"\n\n    def test_given_freebsd_os_returns_pretty_print_version(self):\n        with (\n            patch(\"platform.system\", return_value=\"FreeBSD\"),\n            patch(\"platform.release\", return_value=\"13.0\"),\n            patch(\"platform.version\", return_value=\"GENERIC\"),\n        ):\n            assert get_os_version() == \"FreeBSD 13.0 (GENERIC)\"\n"
  },
  {
    "path": "tests/unittests/django/validators_test.py",
    "content": "import pytest\nfrom nav.django.validators import (\n    is_valid_point_string,\n    validate_hstore,\n    ValidationError,\n)\n\n\nclass TestValidPointString(object):\n    def test_valid_point_string(self):\n        point_string = \"(2.3,4.5)\"\n        assert is_valid_point_string(point_string)\n\n    def test_valid_point_parens_and_sapce(self):\n        point_string = \"(9.888, 3.2222)\"\n        assert is_valid_point_string(point_string)\n\n    def test_valid_point_no_parens(self):\n        point_string = \"5.5,8.7\"\n        assert is_valid_point_string(point_string)\n\n    def test_valid_point_no_parens_and_space(self):\n        point_string = \"77.22134124, 543.3342\"\n        assert is_valid_point_string(point_string)\n\n    def test_valid_point_no_comma(self):\n        point_string = \"(2.4)\"\n        assert not is_valid_point_string(point_string)\n\n    def test_valid_point_chars(self):\n        point_string = \"foo, bar\"\n        assert not is_valid_point_string(point_string)\n\n\nclass TestValidHStoreField(object):\n    def test_empty_hstore_field(self):\n        inputs = ('', None, {})\n        for input in inputs:\n            result = validate_hstore(input)\n            assert result == {}\n\n    def test_non_dict(self):\n        inputs = ((), [], 0)\n        for input in inputs:\n            with pytest.raises(ValidationError):\n                validate_hstore(input)\n\n    def test_bytes_json(self):\n        input = b'{\"a\": \"b\"}'\n        result = validate_hstore(input)\n        assert result == {'a': 'b'}\n\n    def test_good_json(self):\n        input = '{\"a\": \"b\"}'\n        result = validate_hstore(input)\n        assert result == {'a': 'b'}\n"
  },
  {
    "path": "tests/unittests/eventengine/__init__.py",
    "content": "\"event engine tests\"\n"
  },
  {
    "path": "tests/unittests/eventengine/alerts_test.py",
    "content": "from unittest import TestCase\nimport datetime\nfrom nav.models.event import EventQueue as Event, Subsystem, EventType\nfrom nav.models.manage import Netbox, Device\nfrom nav.eventengine.alerts import AlertGenerator\n\n\nclass MockedAlertGenerator(AlertGenerator):\n    def get_alert_type(self):\n        return None\n\n    def _find_existing_alert_history(self):\n        return None\n\n\nclass AlertFromEventBase(TestCase):\n    def setUp(self):\n        self.event = Event(\n            source=Subsystem('someone'),\n            netbox=Netbox(),\n            device=Device(),\n            subid=\"thing\",\n            event_type=EventType('boxState'),\n            state=Event.STATE_START,\n            time=datetime.datetime.now(),\n            value=50,\n            severity=2,\n        )\n\n\nclass AlertFromEventTests(AlertFromEventBase):\n    def test_alert_from_event_copies_attributes(self):\n        alert = MockedAlertGenerator(self.event).make_alert()\n\n        self.assertEqual(alert.source, self.event.source)\n        self.assertEqual(alert.netbox, self.event.netbox)\n        self.assertEqual(alert.device, self.event.device)\n        self.assertEqual(alert.subid, self.event.subid)\n        self.assertEqual(alert.state, self.event.state)\n        self.assertEqual(alert.time, self.event.time)\n        self.assertEqual(alert.value, self.event.value)\n        self.assertEqual(alert.severity, self.event.severity)\n\n    def test_alert_from_event_copies_variables(self):\n        self.event.varmap = dict(foo='bar', parrot='dead')\n        alert = MockedAlertGenerator(self.event).make_alert()\n\n        self.assertEqual(alert.varmap, self.event.varmap)\n\n\nclass AlertHistoryFromEventTests(AlertFromEventBase):\n    def test_alerthist_from_event_copies_attributes(self):\n        history = MockedAlertGenerator(self.event).make_alert_history()\n\n        self.assertEqual(history.source, self.event.source)\n        self.assertEqual(history.netbox, self.event.netbox)\n        self.assertEqual(history.device, self.event.device)\n        self.assertEqual(history.subid, self.event.subid)\n        self.assertEqual(history.start_time, self.event.time)\n        self.assertEqual(history.value, self.event.value)\n        self.assertEqual(history.severity, self.event.severity)\n        self.assertEqual(history.end_time, datetime.datetime.max)\n\n    def test_should_not_create_alerthist_from_end_event(self):\n        self.event.state = self.event.STATE_END\n        alert = MockedAlertGenerator(self.event)\n        self.assertTrue(alert.make_alert_history() is None)\n"
  },
  {
    "path": "tests/unittests/eventengine/engine_test.py",
    "content": "\"\"\"Unit tests for EventEngine scheduler yield behavior\"\"\"\n\nimport time\nfrom unittest.mock import Mock, patch\n\nimport pytest\n\nfrom nav.eventengine.config import EventEngineConfig\nfrom nav.eventengine.engine import EventEngine\n\n\nclass TestHasOverdueCallbacks:\n    def test_when_queue_is_empty_it_should_return_false(self, engine):\n        assert engine._has_overdue_callbacks() is False\n\n    def test_when_entry_is_in_future_it_should_return_false(self, engine):\n        engine._scheduler.enter(1000, 0, lambda: None, ())\n        assert engine._has_overdue_callbacks() is False\n\n    def test_when_entry_is_past_due_it_should_return_true(self, engine):\n        engine._scheduler.enter(0, 0, lambda: None, ())\n        future = time.time() + 10\n        with patch(\"time.time\", return_value=future):\n            assert engine._has_overdue_callbacks() is True\n\n\nclass TestLoadNewEventsYieldBehavior:\n    \"\"\"Tests for the yield-to-scheduler logic inside load_new_events()\"\"\"\n\n    @patch(\"nav.eventengine.engine.unresolved\")\n    def test_when_nothing_is_overdue_then_load_new_events_should_process_all_events(\n        self, mock_unresolved, engine\n    ):\n        events = [_make_fake_event(i) for i in range(1, 4)]\n\n        with (\n            patch(\"nav.eventengine.engine.Event.objects\") as mock_objects,\n            patch.object(engine, \"handle_event\") as mock_handle,\n            patch.object(engine, \"_has_overdue_callbacks\", return_value=False),\n            patch.object(engine, \"_schedule_next_queuecheck\") as mock_reschedule,\n        ):\n            mock_objects.filter.return_value.order_by.return_value = events\n            engine.load_new_events.__wrapped__.__wrapped__(engine)\n\n            assert mock_handle.call_count == 3\n            mock_reschedule.assert_not_called()\n\n    @patch(\"nav.eventengine.engine.unresolved\")\n    def test_when_callbacks_are_overdue_then_load_new_events_should_break_early(\n        self, mock_unresolved, engine\n    ):\n        events = [_make_fake_event(i) for i in range(1, 4)]\n\n        with (\n            patch(\"nav.eventengine.engine.Event.objects\") as mock_objects,\n            patch.object(engine, \"handle_event\") as mock_handle,\n            patch.object(\n                engine,\n                \"_has_overdue_callbacks\",\n                side_effect=[False, True],\n            ),\n            patch.object(engine, \"_schedule_next_queuecheck\") as mock_reschedule,\n        ):\n            mock_objects.filter.return_value.order_by.return_value = events\n            engine.load_new_events.__wrapped__.__wrapped__(engine)\n\n            assert mock_handle.call_count == 2\n            mock_reschedule.assert_called_once()\n\n    @patch(\"nav.eventengine.engine.unresolved\")\n    def test_when_resumed_after_yield_then_load_new_events_should_process_remaining(\n        self, mock_unresolved, engine\n    ):\n        events = [_make_fake_event(i) for i in range(1, 4)]\n\n        def track_as_unfinished(event):\n            engine._unfinished.add(event.id)\n\n        with (\n            patch(\"nav.eventengine.engine.Event.objects\") as mock_objects,\n            patch.object(\n                engine, \"handle_event\", side_effect=track_as_unfinished\n            ) as mock_handle,\n            patch.object(\n                engine,\n                \"_has_overdue_callbacks\",\n                side_effect=[False, True],\n            ),\n            patch.object(engine, \"_schedule_next_queuecheck\"),\n        ):\n            mock_objects.filter.return_value.order_by.return_value = events\n            engine.load_new_events.__wrapped__.__wrapped__(engine)\n            assert mock_handle.call_count == 2\n\n        # Second run: all 3 events still in queue, but the 2 already handled\n        # are in _unfinished, so only event 3 is new\n        with (\n            patch(\"nav.eventengine.engine.Event.objects\") as mock_objects,\n            patch.object(engine, \"handle_event\") as mock_handle,\n            patch.object(engine, \"_has_overdue_callbacks\", return_value=False),\n            patch.object(engine, \"_schedule_next_queuecheck\"),\n        ):\n            mock_objects.filter.return_value.order_by.return_value = events\n            engine.load_new_events.__wrapped__.__wrapped__(engine)\n            assert mock_handle.call_count == 1\n            mock_handle.assert_called_once_with(events[2])\n\n\n@pytest.fixture\ndef engine():\n    config = EventEngineConfig()\n    config.DEFAULT_CONFIG_FILES = ()\n    return EventEngine(config=config)\n\n\ndef _make_fake_event(event_id, event_type_id=\"boxState\"):\n    event = Mock()\n    event.id = event_id\n    event.event_type_id = event_type_id\n    event.netbox = Mock()\n    return event\n"
  },
  {
    "path": "tests/unittests/eventengine/plugin_test.py",
    "content": "import pytest\nfrom mock import Mock\n\nfrom nav.eventengine.config import EventEngineConfig\nfrom nav.eventengine.engine import EventEngine\nfrom nav.eventengine.plugin import UnsupportedEvent, EventHandler\nfrom nav.eventengine.plugin import _find_package_modules\nfrom nav.eventengine.plugins.delayedstate import DelayedStateHandler\n\n\nclass _EmptyHandler(EventHandler):\n    handled_types = ()\n\n\ndef test_can_handle_should_return_true_by_default():\n    assert _EmptyHandler.can_handle(object())\n\n\nclass _BoxStateHandler(EventHandler):\n    handled_types = ['boxState']\n\n\ndef test_handler_should_raise_on_unsupported_event():\n    with pytest.raises(UnsupportedEvent):\n        event = Mock()\n        event.event_type_id = 'something'\n        _BoxStateHandler(event, None)\n\n\ndef test_handler_should_construct_fine_on_supported_event():\n    event = Mock()\n    event.event_type_id = 'boxState'\n    assert _BoxStateHandler(event, None)\n\n\ndef test_find_package_modules_is_list():\n    modules = _find_package_modules('nav.eventengine.plugins')\n    assert not isinstance(modules, str)\n    assert len(modules) >= 0\n\n\ndef test_boxstate_plugin_should_be_found():\n    from nav.eventengine.plugins.boxstate import BoxStateHandler\n\n    classes = EventHandler.load_and_find_subclasses()\n    assert BoxStateHandler in classes\n\n\ndef test_delayedhandler_sets_timeouts_from_config():\n    class TestHandler(DelayedStateHandler):\n        handled_types = ('testState',)\n        ALERT_WAIT_TIME = 'test.alert'\n        WARNING_WAIT_TIME = 'test.warning'\n\n    class MockedConfig(EventEngineConfig):\n        DEFAULT_CONFIG_FILES = ()\n\n    config = MockedConfig()\n    config.set('timeouts', 'test.warning', '20s')\n    config.set('timeouts', 'test.alert', '1m')\n    engine = EventEngine(config=config)\n    event = Mock('Event')\n    event.event_type_id = 'testState'\n\n    handler = TestHandler(event, engine)\n    assert handler.WARNING_WAIT_TIME == 20\n    assert handler.ALERT_WAIT_TIME == 60\n"
  },
  {
    "path": "tests/unittests/eventengine/severity_test.py",
    "content": "import pytest\nfrom mock import Mock\nimport yaml\n\nfrom nav.eventengine.severity import (\n    Severity,\n    Expression,\n    SeverityRules,\n)\n\n\nclass TestThatSeverity:\n    def test_should_never_instantiate_to_higher_than_5(self):\n        assert Severity(32) == 5\n\n    def test_should_never_instantiate_to_lower_than_1(self):\n        assert Severity(0) == 1\n        assert Severity(-13) == 1\n\n    @pytest.mark.parametrize(\"value\", range(1, 6))\n    def test_should_retain_all_values_from_1_to_5(self, value):\n        assert Severity(value) == value\n\n    def test_should_not_add_to_values_above_5(self):\n        assert (Severity(3) + 42) == 5\n\n    def test_should_not_subtract_to_values_below_1(self):\n        assert (Severity(3) - 42) == 1\n\n\nclass TestThatSeverityParser:\n    \"\"\"Tests for the internal parsing methods of the SeverityRules class\"\"\"\n\n    def test_should_return_original_severity_on_empty_ruleset(self):\n        rules = SeverityRules._parse_raw_severity_rules({})\n        expressions, modifier = next(rules)\n        assert expressions == ()\n        assert modifier(5) == 5\n\n    def test_should_load_simple_ruleset_without_error(self, simple_severity_ruleset):\n        assert list(SeverityRules._parse_raw_severity_rules(simple_severity_ruleset))\n\n    def test_should_parse_default_severity_correctly(self, simple_severity_ruleset):\n        rules = SeverityRules._parse_raw_severity_rules(simple_severity_ruleset)\n        expressions, modifier = next(rules)\n        assert expressions == ()\n        assert modifier(None) == 2, \"first rule isn't the default severity level\"\n\n    def test_should_find_perfectly_cromulent_rule(self, simple_severity_ruleset):\n        rules = SeverityRules._parse_raw_severity_rules(simple_severity_ruleset)\n        _ = next(rules)  # toss default severity level rule\n        expressions, modifier = next(rules)\n        assert expressions == (Expression(\"foo\", \"perfectly-cromulent\"),), (\n            \"the second rule in the ruleset was not parsed correctly\"\n        )\n        assert callable(modifier)\n\n    def test_should_parse_nested_rule_correctly(self, nested_severity_ruleset):\n        rules = SeverityRules._parse_raw_severity_rules(nested_severity_ruleset)\n        _ = next(rules), next(rules)  # skip two first rules\n        expressions, modifier = next(rules)\n        assert expressions == (\n            Expression(\"first\", \"level-one\"),\n            Expression(\"second\", \"level-two\"),\n        ), \"could not find a properly parsed nested rule\"\n        assert callable(modifier)\n\n    def test_should_parse_compound_rule_correctly(self, nested_severity_ruleset):\n        rules = SeverityRules._parse_raw_severity_rules(nested_severity_ruleset)\n        _ = next(rules), next(rules), next(rules)  # skip first three\n        expressions, modifier = next(rules)\n        assert expressions == (\n            Expression(\"foo\", \"0xc0ffee\"),\n            Expression(\"bar\", \"0xbadc0de\"),\n        ), \"could not find a properly parsed compound rule\"\n        assert callable(modifier)\n\n    def test_should_return_modifiers_that_take_int_and_return_int(\n        self, nested_severity_ruleset\n    ):\n        for expressions, modifier in SeverityRules._parse_raw_severity_rules(\n            nested_severity_ruleset\n        ):\n            assert callable(modifier), (\n                f\"modifier isn't callable for rule {expressions!r}\"\n            )\n            assert isinstance(modifier(Severity(3)), int), (\n                f\"modifier does not follow protocol for rule {expressions!r}\"\n            )\n\n\nclass TestThatModifierParser:\n    \"\"\"Testing for the SeverityRules class internal parser of modifier strings\"\"\"\n\n    def test_should_parse_int_correctly(self):\n        modifier = SeverityRules._parse_modifier(3)\n        assert modifier(None) == 3\n\n    def test_should_parse_subtraction_correctly(self):\n        modifier = SeverityRules._parse_modifier(\"-2\")\n        assert modifier(5) == 5 - 2\n\n    def test_should_parse_addition_correctly(self):\n        modifier = SeverityRules._parse_modifier(\"+2\")\n        assert modifier(1) == 1 + 2\n\n    def should_raise_value_error_on_invalid_value(self):\n        with pytest.raises(ValueError):\n            SeverityRules._parse_modifier(\"foo\")\n\n\nclass TestThatSeverityRules:\n    \"\"\"Tests for the external interface of the SeverityRules class\"\"\"\n\n    def test_should_translate_ruleset_without_errors(\n        self, simple_severity_ruleset_source\n    ):\n        assert SeverityRules.load(simple_severity_ruleset_source)\n\n    def test_should_set_default_severity(self, simple_severity_ruleset_source):\n        rules = SeverityRules.load(simple_severity_ruleset_source)\n        alert = Mock()\n        assert rules.evaluate(alert) == 2\n\n    def test_should_add_to_severity_for_simple_rule(\n        self, simple_severity_ruleset_source\n    ):\n        rules = SeverityRules.load(simple_severity_ruleset_source)\n        alert = Mock()\n        alert.foo = \"perfectly-cromulent\"\n        assert rules.evaluate(alert) == 3\n\n    def test_should_add_to_severity_for_nested_rule(\n        self, nested_severity_ruleset_source\n    ):\n        rules = SeverityRules.load(nested_severity_ruleset_source)\n        alert = Mock()\n        alert.first = \"level-one\"\n        alert.second = \"level-two\"\n        assert rules.evaluate(alert) == 5\n\n    def test_should_properly_set_severity_based_on_nested_attributes(\n        self, nested_severity_ruleset_source\n    ):\n        rules = SeverityRules.load(nested_severity_ruleset_source)\n        alert = Mock()\n        alert.netbox.room.id = \"Milliways\"\n        alert.netbox.room.location.id = \"The end of the Universe\"\n        alert.netbox.category = \"SW\"\n        assert rules.evaluate(alert) == 1\n\n    def test_should_reset_severity_according_to_rule(\n        self, nested_severity_ruleset_source\n    ):\n        rules = SeverityRules.load(nested_severity_ruleset_source)\n        alert = Mock()\n        alert.foo = \"0xc0ffee\"\n        alert.bar = \"0xbadc0de\"\n        assert rules.evaluate(alert) == 5\n\n    def test_should_evaluate_to_single_rule_on_empty_rulesets(\n        self, empty_ruleset_source\n    ):\n        \"\"\"Tests that an empty ruleset is parsed into a single default-value rule\"\"\"\n        rules = SeverityRules.load(empty_ruleset_source)\n        assert len(rules) == 1\n\n    def test_should_return_original_severity_when_no_default_is_set(\n        self, empty_ruleset_source\n    ):\n        rules = SeverityRules.load(empty_ruleset_source)\n        alert = Mock()\n        alert.severity = 1\n        assert rules.evaluate(alert) == 1\n\n    def test_should_ignore_broken_rules(self, broken_ruleset_source):\n        rules = SeverityRules.load(broken_ruleset_source)\n\n        class MockAlert:\n            \"\"\"Simple Alert mock that does NOT ignore illegal attribute accesses\"\"\"\n\n            severity = 5\n\n        assert rules.evaluate(MockAlert()) == 5\n\n\n#\n# Fixtures\n#\n@pytest.fixture(scope=\"session\")\ndef simple_severity_ruleset(simple_severity_ruleset_source):\n    return yaml.safe_load(simple_severity_ruleset_source)\n\n\n@pytest.fixture(scope=\"session\")\ndef simple_severity_ruleset_source():\n    return \"\"\"\n---\ndefault-severity: 2\nrules:\n  - foo: perfectly-cromulent\n    severity: '+1'\n\"\"\"\n\n\n@pytest.fixture(scope=\"session\")\ndef nested_severity_ruleset(nested_severity_ruleset_source):\n    return yaml.safe_load(nested_severity_ruleset_source)\n\n\n@pytest.fixture(scope=\"session\")\ndef nested_severity_ruleset_source():\n    return \"\"\"\n---\ndefault-severity: 2\nrules:\n  - first: level-one\n    severity: '+1'\n    rules:\n    - second: level-two\n      severity: '+2'\n  - foo: '0xc0ffee'\n    bar: '0xbadc0de'\n    severity: 5\n  - netbox.category: SW\n    netbox.room.id: Milliways\n    severity: '-1'\n\"\"\"\n\n\n@pytest.fixture(scope=\"session\")\ndef empty_ruleset_source():\n    return \"\"\"\n---\n\"\"\"\n\n\n@pytest.fixture(scope=\"session\")\ndef broken_ruleset_source():\n    return \"\"\"\n---\nrules:\n  - invalid-attribute: foo\n    severity: 1\n\"\"\"\n"
  },
  {
    "path": "tests/unittests/general/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/general/bitvector_test.py",
    "content": "# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport unittest\n\nfrom nav import bitvector\n\n\nclass BitVectorTestCase(unittest.TestCase):\n    \"\"\"Tests for nav.bitvector.BitVector class\"\"\"\n\n    def setUp(self):\n        self.zerobits = bitvector.BitVector(b'\\x00' * 8)\n\n        self.somebits = bitvector.BitVector(b'\\x00' * 8)\n        self.somebits[5] = True\n        self.somebits[50] = True\n\n    def test_unmodified_vector_size(self):\n        self.assertEqual(64, len(self.zerobits))\n\n    def test_modified_vector_size(self):\n        self.assertEqual(64, len(self.somebits))\n\n    def test_individual_modified_bits(self):\n        self.assertEqual(True, bool(self.somebits[5]))\n        self.assertEqual(True, bool(self.somebits[50]))\n\n    def test_modified_string(self):\n        self.assertEqual(b'\\x04\\x00\\x00\\x00\\x00\\x00 \\x00', self.somebits.to_bytes())\n\n    def test_modified_binary_string(self):\n        self.assertEqual(\n            '0000010000000000000000000000000000000000000000000010000000000000',\n            self.somebits.to_binary(),\n        )\n\n    def test_unmodified_binary_string(self):\n        self.assertEqual('0' * 64, self.zerobits.to_binary())\n"
  },
  {
    "path": "tests/unittests/general/bulkparse_test.py",
    "content": "\"\"\"Tests for bulkparse\"\"\"\n\nimport pytest\n\nfrom nav import bulkparse\n\n\nclass TestBulkParser(object):\n    def test_init(self):\n        data = b\"room1:10.0.0.186:myorg:OTHER::parrot::\"\n        b = bulkparse.BulkParser(data)\n        assert isinstance(b, bulkparse.BulkParser)\n\n    def test_overriden_validator(self):\n        class TestParser(bulkparse.BulkParser):\n            format = ('one', 'two')\n            required = 2\n\n            def _validate_one(self, value):\n                return value == '1'\n\n        data = b\"1:2\\nonce:twice\"\n        b = TestParser(data)\n        try:\n            list(b)\n        except bulkparse.InvalidFieldValue as error:\n            assert error.line_num == 2\n            assert error.field == 'one'\n            assert error.value == 'once'\n        else:\n            self.fail(\"No exception raised\")\n\n\nclass TestNetboxBulkParser(object):\n    def test_parse_returns_iterator(self):\n        data = b\"room1:10.0.0.186:myorg:OTHER:SNMP v1 read profile:::\"\n        b = bulkparse.NetboxBulkParser(data)\n        assert hasattr(b, '__next__')\n\n    def test_parse_single_line_should_yield_value(self):\n        data = b\"room1:10.0.0.186:myorg:OTHER:SNMP v2c read profile:::\"\n        b = bulkparse.NetboxBulkParser(data)\n        out_data = next(b)\n        assert out_data is not None\n\n    def test_parse_single_line_yields_columns(self):\n        data = (\n            b\"room1:10.0.0.186:myorg:SW:SNMP v2c read profile:amaster:doesthings:\"\n            b\"key=value:blah1:blah2\"\n        )\n        b = bulkparse.NetboxBulkParser(data)\n        out_data = next(b)\n        assert isinstance(out_data, dict)\n        assert out_data['roomid'] == 'room1'\n        assert out_data['ip'] == '10.0.0.186'\n        assert out_data['orgid'] == 'myorg'\n        assert out_data['catid'] == 'SW'\n        assert out_data['master'] == 'amaster'\n        assert out_data['data'] == 'key=value'\n        assert out_data['netboxgroup'] == ['blah1', 'blah2']\n\n    def test_get_header(self):\n        assert (\n            bulkparse.NetboxBulkParser.get_header() == \"#roomid:ip:orgid:catid\"\n            \"[:management_profiles:master:function:data:netboxgroup:...]\"\n        )\n\n    def test_two_rows_returned_with_empty_lines_in_input(self):\n        data = (\n            b\"room1:10.0.0.186:myorg:SW:SNMP v1 read profile::\\n\"\n            b\"\\n\"\n            b\"room1:10.0.0.187:myorg:OTHER:SNMP v1 read profile::\\n\"\n        )\n        b = bulkparse.NetboxBulkParser(data)\n        out_data = list(b)\n        assert len(out_data) == 2\n\n    def test_three_lines_with_two_rows_should_be_counted_as_three(self):\n        data = (\n            b\"room1:10.0.0.186:myorg:SW:SNMP v1 read profile::\\n\"\n            b\"\\n\"\n            b\"room1:10.0.0.187:myorg:OTHER:SNMP v2c read profile::\\n\"\n        )\n        b = bulkparse.NetboxBulkParser(data)\n        list(b)  # Generator needs to be consumed for this test to succeed\n        assert b.line_num == 3\n\n    def test_short_line_should_raise_error(self):\n        data = b\"room1:10.0.0.8\"\n        b = bulkparse.NetboxBulkParser(data)\n        with pytest.raises(bulkparse.RequiredFieldMissing):\n            b.__next__()\n\n    def test_invalid_ip_should_raise_error(self):\n        data = b\"room1:10.0.x.x:myorg:SW:SNMP v2c read profile::\\n\"\n        b = bulkparse.NetboxBulkParser(data)\n        with pytest.raises(bulkparse.InvalidFieldValue):\n            next(b)\n\n    def test_when_ip_has_trailing_whitespace_it_should_be_stripped(self):\n        data = b\"room1:10.0.0.186\\t:myorg:OTHER:SNMP v1 read profile::\\n\"\n        b = bulkparse.NetboxBulkParser(data)\n        row = next(b)\n        assert row['ip'] == '10.0.0.186'\n\n    def test_short_line_should_raise_error_with_correct_details(self):\n        data = b\"room1:10.0.0.8\"\n        b = bulkparse.NetboxBulkParser(data)\n        try:\n            next(b)\n        except bulkparse.RequiredFieldMissing as error:\n            assert error.line_num == 1\n            assert error.missing_field == 'orgid'\n        else:\n            self.fail(\"No exception raised\")\n\n\nclass TestManagementProfileBulkParser(object):\n    def test_configuration_should_be_parsed(self):\n        config = b'{\"version\":1, \"community\":\"public\"}'\n        data = b'SNMP v1 read profile:SNMP:\"' + config.replace(b'\"', b'\"\"') + b'\"'\n        b = bulkparse.ManagementProfileBulkParser(data)\n        first_row = next(b)\n        assert 'configuration' in first_row\n        assert first_row['configuration'] == config.decode('utf-8')\n\n\nclass TestUsageBulkParser(object):\n    def test_get_header(self):\n        assert bulkparse.UsageBulkParser.get_header() == \"#usageid:descr\"\n\n    def test_leading_comments_should_be_stripped(self):\n        data = b\"#comment\\nsby:student village\"\n        b = bulkparse.UsageBulkParser(data)\n        first_row = next(b)\n        assert first_row['usageid'] == 'sby'\n\n\nclass TestPrefixBulkParser(object):\n    def test_invalid_prefix_should_raise_error(self):\n        data = b\"10.0.0.x/3f:scope\"\n        b = bulkparse.PrefixBulkParser(data)\n        with pytest.raises(bulkparse.InvalidFieldValue):\n            next(b)\n\n    def test_valid_prefix_should_not_raise_error(self):\n        data = b\"10.0.0.0/8:scope\"\n        b = bulkparse.PrefixBulkParser(data)\n        assert next(b)\n\n\nclass TestServiceBulkParser(object):\n    def test_invalid_service_arguments_should_raise_error(self):\n        data = b\"host.example.org;http;port80\"\n        b = bulkparse.ServiceBulkParser(data)\n        with pytest.raises(bulkparse.InvalidFieldValue):\n            next(b)\n\n    def test_valid_service_arguments_should_not_raise_error(self):\n        data = b\"host.example.org;http;port=80;uri=/\"\n        b = bulkparse.ServiceBulkParser(data)\n        assert next(b)\n\n\nclass TestCommentStripper(object):\n    def test_leading_comment_should_be_stripped(self):\n        data = iter(['#leadingcomment\\n', 'something\\n'])\n        stripper = bulkparse.CommentStripper(data)\n        assert next(stripper) == '\\n'\n        assert next(stripper) == 'something\\n'\n\n    def test_suffix_comment_should_be_stripped(self):\n        data = iter(['somedata\\n', 'otherdata    # ignore this\\n'])\n        stripper = bulkparse.CommentStripper(data)\n        assert next(stripper) == 'somedata\\n'\n        assert next(stripper) == 'otherdata\\n'\n\n\nclass TestHeaderGenerator(object):\n    def test_simple(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two', 'three')\n            required = 3\n\n        assert C.get_header() == \"#one:two:three\"\n\n    def test_one_optional(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two', 'three', 'optional')\n            required = 3\n\n        assert C.get_header() == \"#one:two:three[:optional]\"\n\n    def test_two_optional(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two', 'three', 'opt1', 'opt2')\n            required = 3\n\n        assert C.get_header() == \"#one:two:three[:opt1:opt2]\"\n\n    def test_optional_with_restkey(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two', 'three', 'optional')\n            restkey = 'arg'\n            required = 3\n\n        assert C.get_header() == \"#one:two:three[:optional:arg:...]\"\n\n    def test_two_required_plus_restkey(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two')\n            restkey = 'rest'\n            required = 2\n\n        assert C.get_header() == \"#one:two[:rest:...]\"\n\n    def test_two_required_plus_restkey_format(self):\n        class C(bulkparse.BulkParser):\n            format = ('one', 'two')\n            restkey = 'rest'\n            restkey_format = 'thing=value'\n            required = 2\n\n        assert C.get_header() == \"#one:two[:thing=value:...]\"\n"
  },
  {
    "path": "tests/unittests/general/config_test.py",
    "content": "# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nfrom io import StringIO\nfrom os import makedirs, remove, rmdir, listdir\nfrom os.path import join\n\nimport pytest\n\nfrom nav import config\n\n\n@pytest.fixture\ndef mockfile():\n    return StringIO(\n        \"\".join(\n            [\n                '# mock config file\\n',\n                'foo1=bar1\\n',\n                'foo2 =  bar2  \\n',\n                '#foo3=invalid\\n',\n                'foo4 = bar4 # comment\\n',\n                '# eof',\n            ]\n        )\n    )\n\n\n@pytest.fixture\ndef mockinifile():\n    return StringIO(\n        \"\".join(\n            [\n                '# mock config file\\n',\n                '[section1]\\n',\n                'foo1=bar1\\n',\n                'foo2 =  bar2  \\n',\n                '[section2] \\n',\n                '#foo3=invalid\\n',\n                'foo4 = bar4 \\n',\n                '# eof',\n            ]\n        )\n    )\n\n\ndef test_read_flat_config(mockfile):\n    values = config.read_flat_config(mockfile)\n    assert values['foo1'] == 'bar1'\n    assert values['foo2'] == 'bar2'\n    assert values['foo4'] == 'bar4'\n    assert 'foo3' not in values\n\n\ndef test_getconfig(mockinifile):\n    values = config.getconfig(mockinifile)\n    assert 2 == len(values.keys())\n    assert 'section1' in values\n    assert 'section2' in values\n\n    assert values['section1']['foo1'] == 'bar1'\n    assert values['section1']['foo2'] == 'bar2'\n    assert values['section2']['foo4'] == 'bar4'\n    assert 'foo3' not in values['section2']\n\n\nclass TestListConfigFiles:\n    \"\"\"Tests for listing the report config files from a given dir\"\"\"\n\n    @pytest.mark.parametrize(\n        \"create_files\",\n        [[\"abc.txt\", \"hello.py\", \"a.sh\", \"b.yaml\", \"c.xml\"]],\n        indirect=True,\n    )\n    def test_should_not_include_other_fileendings(self, create_files):\n        output_files = []\n        gathered_files = config.list_config_files_from_dir(create_files)\n\n        assert gathered_files == output_files\n\n    @pytest.mark.parametrize(\n        \"create_files\",\n        [[\".abc.conf\", \".hello.conf\", \".a.conf\", \".b.conf\", \".c.conf\"]],\n        indirect=True,\n    )\n    def test_should_not_include_dot_files(self, create_files):\n        output_files = []\n        gathered_files = config.list_config_files_from_dir(create_files)\n\n        assert gathered_files == output_files\n\n    @pytest.mark.parametrize(\n        \"create_files\",\n        [\n            [\n                \"abc.conf\",\n                \"hello.conf\",\n                \"a.conf\",\n                \"b.conf\",\n                \"_test.conf\",\n                \"c.conf\",\n            ]\n        ],\n        indirect=True,\n    )\n    def test_should_be_sorted_alphabetically(self, create_files):\n        filenames = [\n            \"_test.conf\",\n            \"a.conf\",\n            \"abc.conf\",\n            \"b.conf\",\n            \"c.conf\",\n            \"hello.conf\",\n        ]\n        output_files = [join(create_files, filename) for filename in filenames]\n        gathered_files = config.list_config_files_from_dir(create_files)\n\n        assert gathered_files == output_files\n\n\n#\n# Fixtures\n#\n@pytest.fixture(scope=\"module\")\ndef create_files(request):\n    test_dir = \"report.conf.d/\"\n    makedirs(test_dir)\n    for name in request.param:\n        open(join(test_dir, name), \"x\")\n    yield test_dir\n    for f in listdir(test_dir):\n        remove(join(test_dir, f))\n    rmdir(test_dir)\n"
  },
  {
    "path": "tests/unittests/general/conftest.py",
    "content": "import pytest\n\n\nclass FakeSession(dict):\n    def set_expiry(self, *_):\n        pass\n\n    def save(self, *_):\n        pass\n\n    def cycle_key(self, *_):\n        pass\n\n    def flush(self):\n        pass\n\n\n@pytest.fixture\ndef fake_session():\n    return FakeSession()\n"
  },
  {
    "path": "tests/unittests/general/daemon_test.py",
    "content": "import string\nimport random\nimport errno\n\nimport pytest\nfrom mock import patch\n\nfrom nav.daemon import daemonexit, PidFileWriteError\n\n\ndef test_daemonexit_should_pass_on_unexpected_exceptions():\n    with patch('os.remove') as os_remove:\n        expected = Exception(\"Bull\")\n        os_remove.side_effect = expected\n        with pytest.raises(Exception) as error:\n            daemonexit('/tmp/foobar.pid')\n\n        assert error.value is expected\n\n\ndef test_daemonexit_should_ignore_nonexistent_pidfile():\n    assert daemonexit(random_filename())\n\n\ndef test_daemonexit_should_raise_pidfilewriteerror_on_other_os_errors():\n    with patch('os.remove') as os_remove:\n        os_remove.side_effect = OSError(errno.EPERM, \"Access denied\")\n\n        with pytest.raises(PidFileWriteError):\n            daemonexit(random_filename())\n\n\n# Helper functions\n\n\ndef random_filename():\n    rand = ''.join(\n        random.choice(string.ascii_uppercase + string.digits) for _ in range(12)\n    )\n    return '/tmp/non-existant-{}.pid'.format(rand)\n"
  },
  {
    "path": "tests/unittests/general/logengine_test.py",
    "content": "# ruff: noqa: E501\n\nimport datetime\nimport pytest\nfrom mock import Mock, patch\nimport random\nimport logging\n\nlogging.raiseExceptions = False\n\nfrom nav import logengine\n\n\nclass _MockDatetime(datetime.datetime):\n    \"\"\"A datetime subclass that converts to UTC when astimezone() is called without\n    args.\n    \"\"\"\n\n    def astimezone(self, tz=None):\n        if tz is None:\n            tz = datetime.timezone.utc\n        return super().astimezone(tz)\n\n\n@pytest.fixture\ndef utc_timezone():\n    \"\"\"Mock datetime to convert to UTC for predictable timestamp conversion tests.\"\"\"\n    with patch.object(logengine.datetime, \"datetime\", _MockDatetime):\n        yield\n\n\nnow = datetime.datetime.now()\n\n\n@pytest.fixture\ndef loglines():\n    return \"\"\"\nOct 28 13:15:06 10.0.42.103 1030: Oct 28 13:15:05.310 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/29, changed state to up\nOct 28 13:15:21 10.0.42.103 1031: Oct 28 13:15:20.191 CEST: %EC-5-COMPATIBLE: Gi1/0/30 is compatible with port-channel members\nOct 28 13:15:21 10.0.42.103 1032: Oct 28 13:15:21.181 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/29, changed state to down\nOct 28 13:15:23 10.0.42.103 1033: Oct 28 13:15:22.196 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/29, changed state to down\nOct 28 13:15:27 10.0.42.103 1034: Oct 28 13:15:26.390 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/29, changed state to up\nOct 28 13:15:28 10.0.80.11 877630: Oct 28 13:15:27.383 CEST: %SEC-6-IPACCESSLOGP: list hpc-v2 denied udp 87.202.31.111(59646) (TenGigabitEthernet3/3 0022.bd37.c800) -> 128.39.62.195(45134), 1 packet\nOct 28 13:15:28 10.0.42.103 1035: Oct 28 13:15:27.388 CEST: %EC-5-CANNOT_BUNDLE2: Gi1/0/29 is not compatible with Gi1/0/30 and will be suspended (speed of Gi1/0/29 is 1000M, Gi1/0/30 is 100M)\nOct 28 13:15:40 10.0.42.103 1036: Oct 28 13:15:39.769 CEST: %EC-5-COMPATIBLE: Gi1/0/29 is compatible with port-channel members\nOct 28 13:15:42 10.0.42.103 1037: Oct 28 13:15:41.774 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/30, changed state to down\nOct 28 13:15:44 10.0.42.103 1038: Oct 28 13:15:43.468 CEST: %SPANTREE-5-TOPOTRAP: Topology Change Trap for vlan 1\nOct 28 13:15:44 10.0.42.103 1039: Oct 28 13:15:44.382 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/29, changed state to up\nOct 28 13:15:46 10.0.42.103 1040: Oct 28 13:15:45.372 CEST: %LINK-3-UPDOWN: Interface Port-channel10, changed state to up\nOct 28 13:15:46 10.0.42.103 1041: Oct 28 13:15:46.379 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel10, changed state to up\nOct 28 13:15:52 10.0.42.103 1042: Oct 28 13:15:51.915 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/30, changed state to up\nOct 28 13:15:52 10.0.128.13 71781: *Oct 28 2010 12:08:49 CET: %MV64340_ETHERNET-5-LATECOLLISION: GigabitEthernet0/1, late collision error\nOct 28 13:15:58 10.0.42.103 1043: Oct 28 13:15:57.560 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/30, changed state to up\n2026-01-05T13:54:43.262668+01:00 example-sw.example.org 441412: 441407: Jan  5 13:54:42 MET: %SISF-4-PAK_DROP: Message dropped A=FE80::BAAD:C0FF:EE15:BAAD G=- V=3 I=Gi1/0/1 P=NDP::NS Reason=Advertise while TENTATIVE\n\"\"\".strip().split(\"\\n\")\n\n\ndef test_parse_without_exceptions(loglines):\n    for line in loglines:\n        msg = logengine.create_message(line)\n        assert msg, \"unparseable: %s\" % line\n        assert msg.facility is not None, \"Message has no facility: {0!r}\\n{1!r}\".format(\n            line, vars(msg)\n        )\n\n\ndef test_insert(loglines):\n    for line in loglines:\n        database = Mock('cursor')\n        database.fetchone = lambda: [random.randint(1, 10000)]\n\n        def execute(sql, params=()):\n            return sql % params\n\n        database.execute = execute\n        message = logengine.create_message(line)\n        assert message, \"unparseable: %s\" % line\n        logengine.insert_message(message, database, {}, {}, {}, {}, {}, {})\n\n\ndef test_swallow_generic_exceptions():\n    @logengine.swallow_all_but_db_exceptions\n    def raiser():\n        raise Exception(\"This is an ex-parrot\")\n\n    raiser()\n\n\ndef test_raise_db_exception():\n    from nav.db import driver\n\n    @logengine.swallow_all_but_db_exceptions\n    def raiser():\n        raise driver.Error(\"This is an ex-database\")\n\n    with pytest.raises(driver.Error):\n        raiser()\n\n\ndef test_non_failing_function_should_run_fine():\n    @logengine.swallow_all_but_db_exceptions\n    def nonraiser(input):\n        return input\n\n    value = 'foo'\n    assert nonraiser(value) == value\n\n\nclass TestParsing(object):\n    message = \"Oct 28 13:15:58 10.0.42.103 1043: Oct 28 13:15:57.560 CEST: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/30, changed state to up\"\n    timestamp = datetime.datetime(now.year, 10, 28, 13, 15, 57, 560000)\n    facility = 'LINEPROTO'\n    priority = 5\n    mnemonic = 'UPDOWN'\n    description = (\n        \"Line protocol on Interface GigabitEthernet1/0/30, changed state to up\"\n    )\n\n    def test_should_parse_without_exception(self):\n        assert logengine.create_message(self.message)\n\n    def test_should_parse_timestamp_correctly(self):\n        msg = logengine.create_message(self.message)\n        assert msg.time == self.timestamp\n\n    def test_should_parse_facility_correctly(self):\n        msg = logengine.create_message(self.message)\n        assert msg.facility == self.facility\n\n    def test_should_parse_priority_correctly(self):\n        msg = logengine.create_message(self.message)\n        assert msg.priorityid == self.priority\n\n    def test_should_parse_mnemonic_correctly(self):\n        msg = logengine.create_message(self.message)\n        assert msg.mnemonic == self.mnemonic\n\n    def test_should_parse_description_correctly(self):\n        msg = logengine.create_message(self.message)\n        assert msg.description == self.description\n\n\nclass TestParseMessageWithStrangeGarbage(TestParsing):\n    message = \"Mar 25 10:54:25 somedevice 72: AP:000b.adc0.ffee: *Mar 25 10:15:51.666: %LINK-3-UPDOWN: Interface Dot11Radio0, changed state to up\"\n\n    timestamp = datetime.datetime(now.year, 3, 25, 10, 15, 51, 666000)\n    facility = 'LINK'\n    priority = 3\n    mnemonic = 'UPDOWN'\n    description = \"Interface Dot11Radio0, changed state to up\"\n\n\nclass TestParseMessageEndingWithColon(TestParsing):\n    \"\"\"Regression test for issue LP#720024\"\"\"\n\n    message = \"Feb 16 11:55:08 10.0.1.15 22877425: Feb 16 11:55:09.436 MET: %HA_EM-6-LOG: on_high_cpu: CPU utilization is over 80%:\"\n\n    timestamp = datetime.datetime(now.year, 2, 16, 11, 55, 9, 436000)\n    facility = 'HA_EM'\n    priority = 6\n    mnemonic = 'LOG'\n    description = \"on_high_cpu: CPU utilization is over 80%:\"\n\n\nclass TestParseMessageWithNoOriginTimestamp(TestParsing):\n    message = \"Nov 13 11:21:02 10.0.1.15 : %ASA-3-321007: System is low on free memory blocks of size 8192 (0 CNT out of 250 MAX)\"\n\n    timestamp = datetime.datetime(now.year, 11, 13, 11, 21, 2)\n    facility = 'ASA'\n    priority = 3\n    mnemonic = '321007'\n    description = (\n        \"System is low on free memory blocks of size 8192 (0 CNT out of 250 MAX)\"\n    )\n\n\n@pytest.mark.usefixtures(\"utc_timezone\")\nclass TestParseTimestamp:\n    \"\"\"Tests for the parse_timestamp() function.\"\"\"\n\n    @pytest.mark.parametrize(\n        \"timestamp_str,expected\",\n        [\n            # RFC 3339 formats (converted to local time, which is UTC in these tests)\n            (\"2026-01-05T13:54:43.262668+01:00\", (2026, 1, 5, 12, 54, 43, 262668)),\n            (\"2024-12-25T08:30:15.123456-05:00\", (2024, 12, 25, 13, 30, 15, 123456)),\n            (\"2025-06-15T12:00:00Z\", (2025, 6, 15, 12, 0, 0, 0)),\n            (\"2025-03-10T09:45:30+02:00\", (2025, 3, 10, 7, 45, 30, 0)),\n            # Traditional formats with timezone\n            (\"Oct 28 13:15:57.560 CEST\", (now.year, 10, 28, 13, 15, 57, 560000)),\n            (\"Nov 13 11:21:02 MET\", (now.year, 11, 13, 11, 21, 2, 0)),\n            # Traditional formats without timezone\n            (\"Mar 25 10:15:51.666\", (now.year, 3, 25, 10, 15, 51, 666000)),\n            # Year is not included in this timestamp, find_year() is used to guesstimate\n            # the correct year based on the current time.\n            (\"Dec 20 15:16:04\", (logengine.find_year(12), 12, 20, 15, 16, 4, 0)),\n            # With explicit year\n            (\"Oct 28 2010 12:08:49 CET\", (2010, 10, 28, 12, 8, 49, 0)),\n            # Cisco format with leading asterisk\n            (\"*Mar 25 10:15:51.666\", (now.year, 3, 25, 10, 15, 51, 666000)),\n            # Space-padded single-digit day\n            (\"Jan  5 13:54:42 MET\", (now.year, 1, 5, 13, 54, 42, 0)),\n            (\"Feb  3 08:00:00\", (now.year, 2, 3, 8, 0, 0, 0)),\n        ],\n    )\n    def test_parse_timestamp_valid(self, timestamp_str, expected):\n        \"\"\"Test that valid timestamps are parsed correctly.\"\"\"\n        result = logengine.parse_timestamp(timestamp_str)\n        assert result == datetime.datetime(*expected)\n\n    @pytest.mark.parametrize(\n        \"timestamp_str\",\n        [\n            \"not a timestamp\",\n            \"\",\n            \"Oct 28\",\n            \"13:15:57\",\n        ],\n    )\n    def test_parse_timestamp_invalid(self, timestamp_str):\n        \"\"\"Test that invalid timestamps raise ValueError.\"\"\"\n        with pytest.raises(ValueError):\n            logengine.parse_timestamp(timestamp_str)\n\n\nnon_conforming_lines = [\n    \"Dec 20 15:16:04 10.0.101.179 SNTP[141365768]: sntp_client.c(1917) 2945474 %% SNTP: system clock synchronized on THU DEC 20 15:16:04 2012 UTC. Indicates that SNTP has successfully synchronized the time of the box with the server.\",\n    \"Dec 20 16:23:37 10.0.3.15 2605010: CPU utilization for five seconds: 86%/14%; one minute: 33%; five minutes: 31%\",\n    \"Jan 29 10:21:26 10.0.129.61 %LINK-W-Down:  e30\",\n    \"pr 18 05:12:59.716 CEST: %SISF-6-ENTRY_CHANGED: Entry changed A=FE80::10F1:F7E9:6EDF:2129 V=204 I=Gi0/8 P=0005 M=\",\n]\n\n\n@pytest.mark.parametrize(\"line\", non_conforming_lines)\ndef test_non_conforming_lines(line):\n    msg = logengine.create_message(line)\n    assert msg is None, \"line shouldn't be parseable: %s\" % line\n"
  },
  {
    "path": "tests/unittests/general/login_not_required_backport_test.py",
    "content": "from django.test import RequestFactory\n\nfrom nav.web.auth.middleware import AuthorizationMiddleware\n\n\nclass TestLoginNotRequiredBackport:\n    def test_when_login_not_required_then_it_should_bypass_authorization(\n        self,\n    ):\n        from allauth.account.internal.decorators import login_not_required\n\n        @login_not_required\n        def allauth_view(request):\n            return None\n\n        r = RequestFactory()\n        fake_request = r.get('/accounts/dataporten/login/callback/')\n        response = AuthorizationMiddleware(lambda x: x).process_view(\n            fake_request,\n            allauth_view,\n            (),\n            (),\n        )\n        assert response is None\n"
  },
  {
    "path": "tests/unittests/general/modpython_test.py",
    "content": "from unittest.mock import patch\n\nfrom django.test import RequestFactory\n\nfrom nav.models import profiles\nfrom nav.web.modpython import ModPythonAuthorizationMiddleware\n\n\nPLAIN_ACCOUNT = profiles.Account(id=101, login='tim', password='wizard', locked=False)\n\n\nclass TestModPythonAuthorizationMiddleware:\n    def test_when_authorized_then_process_request_should_return_none(self):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.user = PLAIN_ACCOUNT\n        with patch('nav.web.modpython.authorize_request', return_value=True):\n            result = ModPythonAuthorizationMiddleware(lambda x: x).process_request(\n                fake_request\n            )\n            assert result is None\n\n    def test_when_not_authorized_process_request_should_redirect_to_login(self):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.user = PLAIN_ACCOUNT\n        with patch('nav.web.modpython.authorize_request', return_value=False):\n            with patch(\n                'nav.web.modpython.redirect_to_login',\n                return_value='here',\n            ):\n                result = ModPythonAuthorizationMiddleware(lambda x: x).process_request(\n                    fake_request\n                )\n                assert result == 'here'\n"
  },
  {
    "path": "tests/unittests/general/objectcache_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom nav import ObjectCache, CacheableObject\nfrom unittest import TestCase\n\n\nclass ObjectCacheTest(TestCase):\n    def setUp(self):\n        self.cache = ObjectCache()\n        self.obj = CacheableObject()\n\n    def test_can_cache_simple_object(self):\n        self.cache.cache(self.obj)\n\n    def test_can_run_invalidate_check_flawlessly(self):\n        self.cache.cache(self.obj)\n        self.cache.invalidate()\n\n    def test_can_refresh_cached_objects_flawlessly(self):\n        self.cache.cache(self.obj)\n        self.cache.refresh()\n"
  },
  {
    "path": "tests/unittests/general/prefix_ip_collector_test.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"Tests for prefix_ip_collector\"\"\"\n\nimport unittest\nfrom datetime import datetime, timezone\nfrom nav.activeipcollector.manager import find_range, get_timestamp\n\n\nclass TestPrefixIpCollector(unittest.TestCase):\n    def test_find_range(self):\n        self.assertEqual(find_range('129.241.1.0/24'), 254)\n        self.assertEqual(find_range('129.241.1.1'), 0)\n        self.assertEqual(find_range('2001:700:0:251e::/64'), 0)\n\n    def test_find_timestamp(self):\n        ts = datetime(2012, 10, 4, 14, 30, tzinfo=timezone.utc)\n        self.assertEqual(get_timestamp(ts), 1349361000)\n"
  },
  {
    "path": "tests/unittests/general/pwhash_test.py",
    "content": "# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport pytest\n\nfrom nav import pwhash\n\n\nclass TestPwHash(object):\n    \"\"\"Tests for nav.pwhash.Hash class\"\"\"\n\n    def test_methods_are_callable(self):\n        \"\"\"All values in the known_methods dictionary must be callable\"\"\"\n        for method in pwhash.KNOWN_METHODS.values():\n            assert callable(method)\n\n    def test_sha1_hash(self):\n        hash = pwhash.Hash('sha1', 'e7MaFMQE', 'foobar')\n        assert '{sha1}e7MaFMQE$cCqMIINS5t85J0MIgNwMprXBfLA=' == str(hash)\n\n    def test_md5_hash(self):\n        hash = pwhash.Hash('md5', 'e7MaFMQE', 'foobar')\n        assert '{md5}e7MaFMQE$wbzoUnM9Jju9ob9bY29+hA==' == str(hash)\n\n    def test_pbkdf25_hash(self):\n        hash = pwhash.Hash('pbkdf2', 'e7MaFMQE', 'foobar')\n        assert '{pbkdf2}e7MaFMQE$7j7bgQb8xED7mEY+8g1QM2zs/ispKZVeNEv/nMCYPX0=' == str(\n            hash\n        )\n\n    def test_unknown_hash(self):\n        with pytest.raises(pwhash.UnknownHashMethodError):\n            pwhash.Hash('montyhash', 'e7MaFMQE', 'foobar')\n\n    def test_verify_sha1_hash(self):\n        hash = pwhash.Hash()\n        hash.set_hash('{sha1}e7MaFMQE$cCqMIINS5t85J0MIgNwMprXBfLA=')\n        assert hash.verify('foobar')\n        assert not hash.verify('blueparrot')\n\n    def test_verify_md5_hash(self):\n        hash = pwhash.Hash()\n        hash.set_hash('{md5}e7MaFMQE$wbzoUnM9Jju9ob9bY29+hA==')\n        assert hash.verify('foobar')\n        assert not hash.verify('blueparrot')\n\n    def test_bad_hash(self):\n        hash = pwhash.Hash()\n        with pytest.raises(pwhash.InvalidHashStringError):\n            hash.set_hash('badc0ffee')\n\n    def test_verifyable_hash(self):\n        password = 'foobar'\n        hash = pwhash.Hash(password=password)\n        hashed = str(hash)\n        hash2 = pwhash.Hash()\n        hash2.set_hash(hashed)\n        assert hash2.verify(password)\n"
  },
  {
    "path": "tests/unittests/general/test_tableformat.py",
    "content": "from unittest import TestCase\nfrom nav.tableformat import SimpleTableFormatter\n\n\nclass TestSimpleTableFormatter(TestCase):\n    def test_column_count(self):\n        data = (('one', 'two', 'three'), ('alice', 'bob', 'charlie'))\n        s = SimpleTableFormatter(data)\n        self.assertEqual(s._get_column_count(), 3)\n\n    def test_get_max_width_of_column(self):\n        data = (('1234', '12345', '1234567'), ('123', '12', '123456'))\n        s = SimpleTableFormatter(data)\n        self.assertEqual(s._get_max_width_of_column(0), 4)\n        self.assertEqual(s._get_max_width_of_column(1), 5)\n        self.assertEqual(s._get_max_width_of_column(2), 7)\n\n    def test_get_max_width_of_column_with_integers(self):\n        data = ((1234, '12345', '1234567'), ('123', 12, '123456'))\n        s = SimpleTableFormatter(data)\n        self.assertEqual(s._get_max_width_of_column(0), 4)\n        self.assertEqual(s._get_max_width_of_column(1), 5)\n        self.assertEqual(s._get_max_width_of_column(2), 7)\n\n    def test_find_widest_elements(self):\n        data = (('1234', '12345', '1234567'), ('123', '12', '123456'))\n        s = SimpleTableFormatter(data)\n        self.assertEqual(s._find_widest_elements(), [4, 5, 7])\n\n    def test_format_row(self):\n        row = ['one', 'two', 'three']\n        widths = [len(i) for i in row]\n        s = SimpleTableFormatter(None)\n        self.assertEqual(s._format_row(row, widths), 'one | two | three')\n\n    def test_get_formatted_table(self):\n        data = (('1234', '12345', '1234567'), ('123', '12', '123456'))\n        s = SimpleTableFormatter(data)\n        self.assertEqual(\n            s.get_formatted_table(), \"1234 | 12345 | 1234567\\n 123 |    12 |  123456\"\n        )\n"
  },
  {
    "path": "tests/unittests/general/util_test.py",
    "content": "# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport time\nimport pytest\n\nfrom nav import util\nfrom nav.util import IPRange, first_true\nfrom IPy import IP\n\n\nclass TestGradient(object):\n    \"\"\"tests for the gradient function\"\"\"\n\n    gradient_start = 0\n    gradient_stop = 952\n    gradient_steps = 20\n    gradient = util.gradient(gradient_start, gradient_stop, gradient_steps)\n    reverse_gradient = util.gradient(gradient_stop, gradient_start, gradient_steps)\n\n    def test_gradient_size(self):\n        assert self.gradient_steps == len(self.gradient)\n\n    def test_gradient_end_points(self):\n        assert self.gradient_start == self.gradient[0]\n        assert self.gradient_stop == self.gradient[-1]\n\n    def test_gradient_order(self):\n        ordered = sorted(self.gradient)\n        assert ordered == self.gradient\n\n        ordered = sorted(self.reverse_gradient)\n        ordered.reverse()\n        assert ordered == self.reverse_gradient\n\n\ndef test_colortohex():\n    assert 'ea702a' == util.colortohex((234, 112, 42))\n\n\ndef test_is_valid_ip():\n    valid_ips = ['129.241.75.1', '10.0.25.62', '2001:700:1::abcd', 'fe80::baad']\n    invalid_ips = ['www.uninett.no', '92835235', '5:4', '-5325']\n\n    for ip in valid_ips:\n        assert util.is_valid_ip(ip), \"%s should be valid\" % ip\n\n    for ip in invalid_ips:\n        assert not util.is_valid_ip(ip), \"%s should be invalid\" % ip\n\n\nclass TestIPRange(object):\n    def test_ipv4_range_length_should_be_correct(self):\n        i = IPRange(IP('10.0.42.0'), IP('10.0.42.127'))\n        assert len(i) == 128\n\n    def test_ipv6_range_length_should_be_correct(self):\n        i = IPRange(IP('fe80:700:1::'), IP('fe80:700:1::f'))\n        assert len(i) == 16\n\n    def test_indexed_access_should_work(self):\n        i = IPRange(IP('10.0.42.0'), IP('10.0.42.127'))\n        assert i[5] == IP('10.0.42.5')\n\n    def test_out_of_bounds_positive_index_should_raise(self):\n        i = IPRange(IP('10.0.42.0'), IP('10.0.42.127'))\n        with pytest.raises(IndexError):\n            i[129]\n\n    def test_out_of_bounds_negative_index_should_raise(self):\n        i = IPRange(IP('10.0.42.0'), IP('10.0.42.127'))\n        with pytest.raises(IndexError):\n            i[-129]\n\n\nclass TestIPRangeString(object):\n    def test_simple_ipv4_range_should_parse(self):\n        i = IPRange.from_string('10.0.42.0-10.0.42.63')\n        assert i[0] == IP('10.0.42.0')\n        assert i[-1] == IP('10.0.42.63')\n\n    def test_simple_ipv6_range_should_parse(self):\n        i = IPRange.from_string('fe80:700:1::-fe80:700:1::f')\n        assert i[0] == IP('fe80:700:1::')\n        assert i[-1] == IP('fe80:700:1::f')\n\n    def test_assembled_ipv4_range_should_parse(self):\n        i = IPRange.from_string('10.0.42.0-127')\n        assert i[0] == IP('10.0.42.0')\n        assert i[-1] == IP('10.0.42.127')\n\n    def test_assembled_ipv6_range_should_parse(self):\n        i = IPRange.from_string('fe80:700:1::aaa-fff')\n        assert i[0] == IP('fe80:700:1::aaa')\n        assert i[-1] == IP('fe80:700:1::fff')\n\n    def test_ipv4_subnet_should_parse(self):\n        i = IPRange.from_string('10.0.99.0/24')\n        assert i[0] == IP('10.0.99.0')\n        assert i[-1] == IP('10.0.99.255')\n\n    def test_ipv4_short_subnet_should_parse(self):\n        i = IPRange.from_string('10.0.99/24')\n        assert i[0] == IP('10.0.99.0')\n        assert i[-1] == IP('10.0.99.255')\n\n    def test_ipv4_with_unspecified_mask_should_parse(self):\n        i = IPRange.from_string('192.168.63/')\n        assert len(i) > 1\n\n    def test_ipv6_with_unspecified_mask_should_parse(self):\n        i = IPRange.from_string('fe80:800:1::/')\n        assert i.len() > 1\n\n    def test_range_with_no_end_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('10.0.42.0-')\n\n    def test_garbage_range_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('blapp')\n\n    def test_empty_range_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('')\n\n    def test_invalid_netmask_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('10.0.0.0/2000')\n\n    def test_multi_range_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('10.0.0.0-10.0.1.0-42')\n\n    def test_multi_mask_should_raise(self):\n        with pytest.raises(ValueError):\n            IPRange.from_string('10.0.0.0/8/24')\n\n\nclass TestFirstTrue(object):\n    def test_first_true_should_find_true_element(self):\n        elems = [False, False, True, False]\n        assert first_true(elems) is True\n\n    def test_first_true_should_return_default_value_when_no_true_found(self):\n        elems = [False, False, False]\n        default = object()\n        assert first_true(elems, default=default) is default\n\n    def test_first_true_should_parse_predicate_correctly(self):\n        elems = [\"foo\", \"bar\", \"baz\", \"frobnicate\"]\n        assert first_true(elems, pred=lambda x: x == \"baz\") == \"baz\"\n\n\nclass TestTimer:\n    def test_when_block_completes_elapsed_should_be_a_positive_float(self):\n        timer = util.Timer()\n        with timer:\n            time.sleep(0.01)\n        assert isinstance(timer.elapsed, float)\n        assert timer.elapsed > 0\n\n    def test_before_entering_context_elapsed_should_be_none(self):\n        timer = util.Timer()\n        assert timer.elapsed is None\n\n    def test_when_block_raises_elapsed_should_still_be_set(self):\n        timer = util.Timer()\n        with pytest.raises(ValueError):\n            with timer:\n                raise ValueError(\"boom\")\n        assert timer.elapsed is not None\n\n    def test_when_used_as_context_variable_it_should_return_self(self):\n        with util.Timer() as t:\n            assert isinstance(t, util.Timer)\n"
  },
  {
    "path": "tests/unittests/general/web_middleware_test.py",
    "content": "from mock import patch, Mock\nimport os\n\nimport pytest\n\nfrom django.contrib.auth.models import AnonymousUser\nfrom django.contrib.sessions.backends.base import UpdateError\nfrom django.core.exceptions import ImproperlyConfigured\nfrom django.http import HttpResponseRedirect\nfrom django.test import RequestFactory\nfrom django_htmx.http import HttpResponseClientRedirect\n\nfrom nav.web.auth.utils import ACCOUNT_ID_VAR, get_account, set_account\nfrom nav.web.auth.sudo import SUDOER_ID_VAR\nfrom nav.web.auth.middleware import AuthorizationMiddleware\nfrom nav.web.auth.middleware import NAVAuthenticationMiddleware\nfrom nav.web.auth.middleware import NAVRemoteUserMiddleware\nfrom nav.web.auth.middleware import authorize_request\nfrom nav.web.auth.middleware import redirect_to_login\nfrom nav.web.webfront.views import _logout_helper\nfrom nav.models import profiles\n\n\nPLAIN_ACCOUNT = profiles.Account(id=101, login='tim', password='wizard', locked=False)\nANOTHER_PLAIN_ACCOUNT = profiles.Account(\n    id=102, login='tom', password='pa$$w0rd', locked=False\n)\nSUDO_ACCOUNT = profiles.Account(\n    id=1337, login='bofh', password='alakazam', locked=False\n)\nLOCKED_ACCOUNT = profiles.Account(id=42, login='evil', password='haxxor', locked=True)\nDEFAULT_ACCOUNT = profiles.Account(\n    id=profiles.Account.DEFAULT_ACCOUNT, login='anonymous', password='bah', locked=False\n)\n\n\ndef test_set_account(fake_session):\n    r = RequestFactory()\n    request = r.get('/')\n    request.session = fake_session\n    set_account(request, DEFAULT_ACCOUNT)\n    assert ACCOUNT_ID_VAR in request.session, 'Account id is not in the session'\n    assert hasattr(request, 'user'), 'request.user not set'\n    assert hasattr(request, 'account'), 'Account not set'\n    assert request.account.id == request.session[ACCOUNT_ID_VAR], 'Correct user not set'\n    assert request.user == request.account\n    assert request.session[ACCOUNT_ID_VAR] == DEFAULT_ACCOUNT.id\n\n\nclass TestGetAccount:\n    def test_get_account_golden_path(self, fake_session):\n        r = RequestFactory()\n        request = r.get('/')\n        request.session = fake_session\n        set_account(request, PLAIN_ACCOUNT)\n        session_account = get_account(request)\n        assert session_account.id == PLAIN_ACCOUNT.id\n\n    def test_get_account_when_account_not_set_returns_default_account(\n        self, fake_session\n    ):\n        r = RequestFactory()\n        request = r.get('/')\n        with patch(\"nav.web.auth.utils.default_account\", return_value=DEFAULT_ACCOUNT):\n            session_account = get_account(request)\n            assert session_account.id == DEFAULT_ACCOUNT.id\n\n\nclass TestAuthorizeRequest:\n    def teardown_method(self, method):\n        if 'REMOTE_USER' in os.environ:\n            del os.environ['REMOTE_USER']\n\n    def test_requires_request_user(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.session = fake_session\n        with pytest.raises(ImproperlyConfigured):\n            authorize_request(fake_request)\n\n    def test_process_request_anonymous(self):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.account = DEFAULT_ACCOUNT\n        fake_request.user = DEFAULT_ACCOUNT\n        with patch('nav.web.auth.utils.authorization_not_required', return_value=True):\n            with patch('nav.web.auth.utils.get_account', return_value=DEFAULT_ACCOUNT):\n                result = authorize_request(fake_request)\n                assert result is True\n\n    def test_process_request_authorized(self):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.account = PLAIN_ACCOUNT\n        fake_request.user = PLAIN_ACCOUNT\n        with patch('nav.web.auth.utils.authorization_not_required', return_value=True):\n            result = authorize_request(fake_request)\n            assert result is True\n\n    def test_process_request_not_authorized(self):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.account = PLAIN_ACCOUNT\n        fake_request.user = PLAIN_ACCOUNT\n        with patch('nav.web.auth.utils.authorization_not_required', return_value=False):\n            with patch('nav.models.profiles.Account.has_perm', return_value=False):\n                result = authorize_request(fake_request)\n                assert result is False\n\n\nclass TestAuthorizationMiddleware(object):\n    def test_when_explicit_login_required_then_it_should_call_authorize_request_and_return_none(  # noqa: E501\n        self,\n    ):\n        # Golden path!\n        viewfunc = lambda request: None\n        r = RequestFactory()\n        fake_request = r.get('/')\n        with patch(\n            'nav.web.auth.middleware.authorize_request', return_value=True\n        ) as ar:\n            response = AuthorizationMiddleware(lambda x: x).process_view(\n                fake_request,\n                viewfunc,\n                (),\n                (),\n            )\n            ar.assert_called_once()\n            assert response is None\n\n    def test_when_explicit_login_required_and_not_authorized_then_it_should_call_redirect_to_login(  # noqa: E501\n        self,\n    ):\n        viewfunc = lambda request: None\n        r = RequestFactory()\n        fake_request = r.get('/')\n        with patch('nav.web.auth.middleware.authorize_request', return_value=False):\n            with patch('nav.web.auth.middleware.redirect_to_login') as rtl:\n                AuthorizationMiddleware(lambda x: x).process_view(\n                    fake_request,\n                    viewfunc,\n                    (),\n                    (),\n                )\n                rtl.assert_called_once()\n\n    def test_when_explicit_login_is_not_required_then_it_should_return_none(self):\n        viewfunc = lambda request: None\n        viewfunc.login_required = False\n        r = RequestFactory()\n        fake_request = r.get('/')\n        response = AuthorizationMiddleware(lambda x: x).process_view(\n            fake_request,\n            viewfunc,\n            (),\n            (),\n        )\n        assert response is None\n\n\nclass TestRedirectToLogin:\n    \"\"\"Tests for redirect_to_login\"\"\"\n\n    def test_when_request_is_regular_then_it_should_return_http_redirect(self):\n        \"\"\"A regular unauthenticated request should get a standard HTTP redirect\"\"\"\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.htmx = False\n        with patch('nav.web.auth.utils.is_ajax', return_value=False):\n            response = redirect_to_login(fake_request)\n        assert isinstance(response, HttpResponseRedirect)\n        assert response.status_code == 302\n\n    def test_when_request_is_ajax_then_it_should_return_401_response(self):\n        \"\"\"An AJAX request should get a 401 response, not a redirect\"\"\"\n        r = RequestFactory()\n        fake_request = r.get('/')\n        with patch('nav.web.auth.utils.is_ajax', return_value=True):\n            response = redirect_to_login(fake_request)\n        assert response.status_code == 401\n\n    def test_htmx_request_should_return_client_redirect(self):\n        \"\"\"An HTMX request should get an HX-Redirect header for full page redirect\"\"\"\n        request = RequestFactory().get('/protected/')\n        request.htmx = Mock()\n        request.htmx.current_url_abs_path = '/some/page/'\n\n        with patch('nav.web.auth.utils.is_ajax', return_value=False):\n            response = redirect_to_login(request)\n        assert isinstance(response, HttpResponseClientRedirect)\n        assert 'HX-Redirect' in response\n\n    def test_htmx_request_without_origin_should_return_401(self):\n        \"\"\"An HTMX request without a recoverable origin URL should get a 401\"\"\"\n        request = RequestFactory().get('/protected/')\n        request.htmx = Mock()\n        request.htmx.current_url_abs_path = None\n\n        with patch('nav.web.auth.utils.is_ajax', return_value=False):\n            response = redirect_to_login(request)\n        assert response.status_code == 401\n\n\nclass TestLogout(object):\n    def test_logout_before_login(self):\n        r = RequestFactory()\n        fake_request = r.get('/anyurl')\n        with patch('nav.auditlog.models.LogEntry.add_log_entry'):\n            result = _logout_helper(fake_request)\n            assert result is None\n\n    def test_sudo_logout(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.post('/anyurl', data={'submit_desudo': True})\n        fake_session[ACCOUNT_ID_VAR] = PLAIN_ACCOUNT.id\n        fake_request.session = fake_session\n        fake_request.account = PLAIN_ACCOUNT\n        with patch('nav.web.webfront.views.desudo'):\n            with patch('nav.web.webfront.views.reverse', return_value='parrot'):\n                result = _logout_helper(fake_request)\n                assert result == 'parrot'\n                # Side effects of desudo() tested elsewhere\n\n\ndef test_NAVRemoteUserMiddleware_init():\n    return_value = \"fillifjong\"\n    with patch(\n        'nav.web.auth.remote_user.CONFIG.get_remote_user_varname',\n        return_value=return_value,\n    ):\n        middleware = NAVRemoteUserMiddleware(lambda x: x)\n        assert middleware.header == return_value\n\n\nclass TestNAVRemoteUserMiddlewareProcessRequest:\n    def test_fail_if_request_user_not_already_set(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.session = fake_session\n        with pytest.raises(ImproperlyConfigured):\n            NAVRemoteUserMiddleware(lambda x: x).process_request(fake_request)\n\n    def test_disabled_remote_user_changes_nothing(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.user = DEFAULT_ACCOUNT\n        fake_request.session = fake_session\n        with patch(\n            'nav.web.auth.remote_user.CONFIG.is_remote_user_enabled',\n            return_value=False,\n        ):\n            result = NAVRemoteUserMiddleware(lambda x: x).process_request(fake_request)\n            assert result is None\n            assert fake_request.user == DEFAULT_ACCOUNT\n\n    def test_enabled_remote_user_calls_djangos_remote_user_middleware(\n        self, fake_session\n    ):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.user = DEFAULT_ACCOUNT\n        fake_request.session = fake_session\n        with patch(\n            'nav.web.auth.remote_user.CONFIG.is_remote_user_enabled',\n            return_value=True,\n        ):\n            with patch(\n                'django.contrib.auth.middleware.RemoteUserMiddleware.process_request',\n                side_effect=lambda x: setattr(fake_request, \"user\", PLAIN_ACCOUNT),\n                return_value=None,\n            ) as middleware:\n                result = NAVRemoteUserMiddleware(lambda x: x).process_request(\n                    fake_request\n                )\n                assert fake_request.user == PLAIN_ACCOUNT\n                assert result is None\n                middleware.assert_called_once()\n\n\nclass TestNAVAuthenticationMiddleware:\n    def test_requires_request_user(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_request.session = fake_session\n        with pytest.raises(ImproperlyConfigured):\n            NAVAuthenticationMiddleware(lambda x: x).process_request(fake_request)\n\n    def test_process_request_logged_in(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_session[ACCOUNT_ID_VAR] = PLAIN_ACCOUNT.id\n        fake_request.session = fake_session\n        with patch(\n            'nav.web.auth.middleware.ensure_account',\n            side_effect=set_account(fake_request, PLAIN_ACCOUNT),\n        ):\n            NAVAuthenticationMiddleware(lambda x: x).process_request(fake_request)\n            assert fake_request.account == PLAIN_ACCOUNT\n            assert fake_request.user == PLAIN_ACCOUNT\n            assert fake_request.session[ACCOUNT_ID_VAR] == fake_request.account.id\n\n    def test_process_request_set_sudoer(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_session[ACCOUNT_ID_VAR] = PLAIN_ACCOUNT.id\n        fake_session[SUDOER_ID_VAR] = SUDO_ACCOUNT.id\n        fake_request.session = fake_session\n        with patch(\n            'nav.web.auth.middleware.ensure_account',\n            side_effect=set_account(fake_request, PLAIN_ACCOUNT),\n        ):\n            with patch('nav.web.auth.middleware.get_sudoer', return_value=SUDO_ACCOUNT):\n                NAVAuthenticationMiddleware(lambda x: x).process_request(fake_request)\n                assert (\n                    getattr(fake_request.account, 'sudo_operator', None) == SUDO_ACCOUNT\n                )\n\n    def test_process_request_sudoed_to_anonymoususer(self, fake_session):\n        r = RequestFactory()\n        fake_request = r.get('/')\n        fake_session[ACCOUNT_ID_VAR] = DEFAULT_ACCOUNT.id\n        fake_session[SUDOER_ID_VAR] = SUDO_ACCOUNT.id\n        fake_request.user = AnonymousUser\n        fake_request.account = fake_request.user\n        fake_request.session = fake_session\n        with patch(\n            'nav.web.auth.middleware.ensure_account',\n            side_effect=set_account(fake_request, DEFAULT_ACCOUNT),\n        ):\n            assert fake_request.user == DEFAULT_ACCOUNT\n\n\nclass TestSetAccountSessionRecovery:\n    \"\"\"Tests for UpdateError recovery in set_account()\"\"\"\n\n    def test_when_session_save_raises_update_error_it_should_create_new_session(\n        self, fake_session\n    ):\n        request = RequestFactory().get('/')\n        request.session = fake_session\n        request.session.save = Mock(side_effect=UpdateError)\n        request.session.create = Mock()\n\n        set_account(request, DEFAULT_ACCOUNT)\n\n        request.session.create.assert_called_once()\n\n    def test_when_session_save_succeeds_it_should_not_call_create(self, fake_session):\n        request = RequestFactory().get('/')\n        request.session = fake_session\n        request.session.save = Mock()\n        request.session.create = Mock()\n\n        set_account(request, DEFAULT_ACCOUNT)\n\n        request.session.create.assert_not_called()\n"
  },
  {
    "path": "tests/unittests/general/webfront_test.py",
    "content": "# -*- coding: utf-8 -*-\nfrom mock import patch, Mock\nfrom django.test import RequestFactory\n\ntry:\n    import ldap\nexcept ImportError:\n    ldap = None\n\nimport pytest\n\nimport nav.web.auth.ldap\nfrom nav.web import auth\nfrom nav.models import profiles\n\nLDAP_ACCOUNT = profiles.Account(login='knight', ext_sync='ldap', password='shrubbery')\nPLAIN_ACCOUNT = profiles.Account(login='knight', password='shrubbery')\nREMOTE_USER_ACCOUNT = profiles.Account(\n    login='knight', ext_sync='REMOTE_USER', password='shrubbery'\n)\n\n\nclass TestGetStandardUrls(object):\n    def test_get_login_url_default(self):\n        r = RequestFactory()\n        request = r.get('/')\n        raw_login_url = auth.LOGIN_URL\n        result = auth.get_login_url(request)\n        assert result.startswith(raw_login_url)\n\n    def test_when_path_is_not_root_then_get_login_url_should_use_next_parameter(self):\n        r = RequestFactory()\n        request = r.get('/ipdevinfo/')\n        result = auth.get_login_url(request)\n        assert 'next=' in result\n        assert 'origin=' not in result\n\n    def test_get_remote_login_url(self):\n        r = RequestFactory()\n        request = r.get('/')\n        request.META['REMOTE_USER'] = 'knight'\n        with patch(\"nav.web.auth.remote_user.CONFIG.getboolean\", return_value=True):\n            with patch(\"nav.web.auth.remote_user.CONFIG.get\", return_value='foo'):\n                result = auth.get_login_url(request)\n                assert result == 'foo'\n\n    def test_get_logout_url_default(self):\n        r = RequestFactory()\n        request = r.get('/')\n        result = auth.get_logout_url(request)\n        assert result == auth.LOGOUT_URL\n\n    def test_get_remote_logout_url(self):\n        r = RequestFactory()\n        request = r.get('/')\n        request.META['REMOTE_USER'] = 'knight'\n        with patch(\"nav.web.auth.remote_user.CONFIG.getboolean\", return_value=True):\n            with patch(\"nav.web.auth.remote_user.CONFIG.get\", return_value='foo'):\n                result = auth.get_logout_url(request)\n                assert result == 'foo'\n\n\n@pytest.mark.skipif(not ldap, reason=\"ldap module is not available\")\nclass TestLdapUser(object):\n    @patch.dict(\n        \"nav.web.auth.ldap._config._sections\",\n        {\n            'ldap': {\n                '__name__': 'ldap',\n                'basedn': 'empty',\n                'manager': 'empty',\n                'manager_password': 'empty',\n                'uid_attr': 'sAMAccountName',\n                'encoding': 'utf-8',\n            },\n        },\n    )\n    def test_search_result_with_referrals_should_be_considered_empty(self):\n        \"\"\"LP#1207737\"\"\"\n        conn = Mock(\n            **{\n                'search_s.return_value': [\n                    (None, \"restaurant\"),\n                    (None, \"at the end of the universe\"),\n                ]\n            }\n        )\n        u = nav.web.auth.ldap.LDAPUser(\"zaphod\", conn)\n        with pytest.raises(nav.web.auth.ldap.UserNotFound):\n            u.search_dn()\n\n    @patch.dict(\n        \"nav.web.auth.ldap._config._sections\",\n        {\n            'ldap': {\n                '__name__': 'ldap',\n                'basedn': 'empty',\n                'lookupmethod': 'direct',\n                'uid_attr': 'uid',\n                'encoding': 'utf-8',\n                'suffix': '',\n            }\n        },\n    )\n    def test_non_ascii_password_should_work(self):\n        \"\"\"LP#1213818\"\"\"\n        conn = Mock(\n            **{\n                'simple_bind_s.side_effect': lambda x, y: (\n                    str(x),\n                    str(y),\n                ),\n            }\n        )\n        u = nav.web.auth.ldap.LDAPUser(\"zaphod\", conn)\n        u.bind(\"æøå\")\n\n    @patch.dict(\n        \"nav.web.auth.ldap._config._sections\",\n        {\n            'ldap': {\n                '__name__': 'ldap',\n                'basedn': 'cn=users,dc=example,dc=org',\n                'lookupmethod': 'direct',\n                'uid_attr': 'uid',\n                'encoding': 'utf-8',\n                'group_search': '(member=%%s)',\n            },\n        },\n    )\n    def test_is_group_member_for_non_ascii_user_should_not_raise(self):\n        \"\"\"LP#1301794\"\"\"\n\n        def fake_search(base, scope, filtr):\n            str(base)\n            str(filtr)\n            return []\n\n        conn = Mock(\n            **{\n                'search_s.side_effect': fake_search,\n            }\n        )\n        u = nav.web.auth.ldap.LDAPUser(\"Ægir\", conn)\n        u.is_group_member('cn=noc-operators,cn=groups,dc=example,dc=com')\n\n\n@patch.dict(\n    \"nav.web.auth.ldap._config._sections\",\n    {\n        'ldap': {\n            '__name__': 'ldap',\n            'basedn': 'cn=users,dc=example,dc=org',\n            'lookupmethod': 'direct',\n            'uid_attr': 'uid',\n            'encoding': 'utf-8',\n            'require_entitlement': 'president',\n            'admin_entitlement': 'boss',\n            'entitlement_attribute': 'eduPersonEntitlement',\n        },\n    },\n)\n@pytest.mark.skipif(not ldap, reason=\"ldap module is not available\")\nclass TestLdapEntitlements(object):\n    def test_required_entitlement_should_be_verified(self, user_zaphod):\n        u = nav.web.auth.ldap.LDAPUser(\"zaphod\", user_zaphod)\n        assert u.has_entitlement('president')\n\n    def test_missing_entitlement_should_not_be_verified(self, user_marvin):\n        u = nav.web.auth.ldap.LDAPUser(\"marvin\", user_marvin)\n        assert not u.has_entitlement('president')\n\n    def test_admin_entitlement_should_be_verified(self, user_zaphod):\n        u = nav.web.auth.ldap.LDAPUser(\"zaphod\", user_zaphod)\n        assert u.is_admin()\n\n    def test_missing_admin_entitlement_should_be_verified(self, user_marvin):\n        u = nav.web.auth.ldap.LDAPUser(\"marvin\", user_marvin)\n        assert not u.is_admin()\n\n\n@patch.dict(\n    \"nav.web.auth.ldap._config._sections\",\n    {\n        'ldap': {\n            '__name__': 'ldap',\n            'basedn': 'cn=users,dc=example,dc=org',\n            'lookupmethod': 'direct',\n            'uid_attr': 'uid',\n            'encoding': 'utf-8',\n            'require_entitlement': 'president',\n            'admin_entitlement': '',\n            'entitlement_attribute': 'eduPersonEntitlement',\n        },\n    },\n)\ndef test_no_admin_entitlement_option_should_make_no_admin_decision(user_zaphod):\n    u = nav.web.auth.ldap.LDAPUser(\"zaphod\", user_zaphod)\n    assert u.is_admin() is None\n\n\n#\n# Pytest fixtures\n#\n\n\n@pytest.fixture\ndef user_zaphod():\n    return Mock(\n        **{\n            'search_s.return_value': [\n                (\n                    'uid=zaphod,cn=users,dc=example,dc=org',\n                    {'eduPersonEntitlement': [b'president', b'boss']},\n                )\n            ]\n        }\n    )\n\n\n@pytest.fixture\ndef user_marvin():\n    return Mock(\n        **{\n            'search_s.return_value': [\n                (\n                    'uid=marvin,cn=users,dc=example,dc=org',\n                    {'eduPersonEntitlement': [b'paranoid']},\n                )\n            ]\n        }\n    )\n"
  },
  {
    "path": "tests/unittests/info/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/info/room_views_test.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Unittests for web/info/room\"\"\"\n\nimport unittest\n\nfrom mock import Mock\nfrom nav.models.manage import Netbox\n\n\nclass RoomViewsTest(unittest.TestCase):\n    \"\"\"Testclass for helper functions in roominfo's views module\"\"\"\n\n    def setUp(self):\n        \"\"\"Test setup\"\"\"\n\n        netbox1 = Netbox()\n        netbox1.get_availability = Mock(\n            return_value={'availability': {'day': None, 'month': 100.0, 'week': 100.0}}\n        )\n        netbox2 = Netbox()\n        netbox2.get_availability = Mock(\n            return_value={'availability': {'day': None, 'month': 100.0, 'week': None}}\n        )\n        self.netboxes = [netbox1, netbox2]\n"
  },
  {
    "path": "tests/unittests/info/views_test.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\n\"\"\"Unittests for web/info\"\"\"\n\nimport unittest\n\nfrom nav.web.info.searchproviders import (\n    SearchResult,\n    SearchProvider,\n    _find_matching_aliases,\n)\nfrom nav.web.info.views import has_results, has_only_one_result\nfrom nav.web.info.forms import SearchForm\n\n\nclass MockProvider(SearchProvider):\n    def fetch_results(self):\n        return []\n\n\nclass ViewsTest(unittest.TestCase):\n    \"\"\"Testclass for helperfunctions in info's views module\"\"\"\n\n    def setUp(self):\n        \"\"\"Test setup\"\"\"\n\n        searchresult = SearchResult('test', None)\n        self.searchprovider0 = MockProvider()\n        self.searchprovider1 = MockProvider()\n        self.searchprovider2 = MockProvider()\n\n        self.searchprovider1.results.append(searchresult)\n        self.searchprovider2.results.extend([searchresult, searchresult])\n\n    def test_has_results(self):\n        \"\"\"Tests for the has_results function\"\"\"\n\n        providers = [self.searchprovider0, self.searchprovider1, self.searchprovider2]\n\n        self.assertTrue(has_results(providers))\n        self.assertTrue(len(has_results(providers)) == 2)\n        self.assertFalse(has_results([self.searchprovider0]))\n\n    def test_has_only_one_result(self):\n        \"\"\"Tests for the has_only_one_result function\"\"\"\n\n        self.assertFalse(has_only_one_result([self.searchprovider0]))\n\n        self.assertTrue(\n            has_only_one_result([self.searchprovider0, self.searchprovider1])\n        )\n\n        self.assertFalse(\n            has_only_one_result(\n                [self.searchprovider0, self.searchprovider1, self.searchprovider2]\n            )\n        )\n\n        self.assertFalse(has_only_one_result([self.searchprovider2]))\n\n    def test_search_form(self):\n        form = SearchForm({'query': 'Test '})\n        form.is_valid()\n        self.assertEqual(form.cleaned_data['query'], 'Test')\n\n\nclass TestFindMatchingAliases:\n    def test_when_alias_matches_query_then_it_should_return_alias(self):\n        assert _find_matching_aliases([\"Building A\", \"Bygg A\"], \"bygg\") == [\"Bygg A\"]\n\n    def test_when_no_alias_matches_then_it_should_return_none(self):\n        assert _find_matching_aliases([\"Building A\"], \"xyz\") is None\n\n    def test_when_aliases_is_empty_then_it_should_return_none(self):\n        assert _find_matching_aliases([], \"test\") is None\n\n    def test_when_multiple_aliases_match_then_it_should_return_all(self):\n        assert _find_matching_aliases([\"Alpha Foo\", \"Beta Foo\"], \"foo\") == [\n            \"Alpha Foo\",\n            \"Beta Foo\",\n        ]\n\n    def test_when_query_matches_case_insensitively_then_it_should_return_alias(self):\n        assert _find_matching_aliases([\"ROOM-101\"], \"room\") == [\"ROOM-101\"]\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/ipdevpoll/config_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for config module\"\"\"\n\nfrom configparser import NoOptionError\n\nimport pytest\n\nfrom nav.config import NAVConfigParser\nfrom nav.ipdevpoll.config import (\n    get_job_sections,\n    get_jobs,\n    get_job_descriptions,\n    JobDescriptor,\n)\n\n\n@pytest.fixture\ndef config():\n    class TestConfig(NAVConfigParser):\n        DEFAULT_CONFIG = \"\"\"\n[job_one]\ninterval = 5m\nplugins = foo\ndescription:\n blapp\n blupp\n[job_two]\ninterval = 5m\nplugins = foo\ndescriptio= blapp\n[not_a_job]\ninterval = 5m\nplugins = foo\ndescription=blipp\n[job_three]\ninterval = 5m\nplugins = foo\ndescription = blepp\n\"\"\"\n\n    return TestConfig()\n\n\nclass TestConfig(object):\n    def test_find_all_job_sections(self, config):\n        assert len(get_job_sections(config)) == 3\n\n    def test_should_not_fail_on_missing_description(self, config):\n        try:\n            get_jobs(config)\n        except NoOptionError:\n            self.fail('Failed to ignore missing option')\n\n    def test_job_prefix_must_be_filtered(self, config):\n        descriptions = get_job_descriptions(config)\n        for desc in descriptions:\n            assert not desc.startswith('job_')\n\n    def test_description_should_not_contain_newline(self, config):\n        descr = get_job_descriptions(config)\n        assert descr['one'] == 'blapp blupp'\n\n    def test_job_two_descr(self, config):\n        assert get_job_descriptions(config)['two'] == ''\n\n    def test_job_three_descr(self, config):\n        assert get_job_descriptions(config)['three'] == 'blepp'\n\n\n@pytest.fixture\ndef invalid_config():\n    class TestConfig(NAVConfigParser):\n        DEFAULT_CONFIG = \"\"\"\n[job_one]\nplugins = foo\n[job_two]\ninterval = 0\nplugins = foo\n[job_negative]\ninterval = -5m\nplugins = foo\n[job_noplugins]\ninterval = 5m\n[job_emptyplugins]\ninterval = 5m\nplugins =\n\n\"\"\"\n\n    return TestConfig()\n\n\nclass TestJobDescriptor(object):\n    def test_should_raise_on_no_interval(self, invalid_config):\n        with pytest.raises(NoOptionError):\n            JobDescriptor.from_config_section(invalid_config, 'job_one')\n\n    def test_should_raise_on_zero_interval(self, invalid_config):\n        with pytest.raises(ValueError):\n            JobDescriptor.from_config_section(invalid_config, 'job_two')\n\n    def test_should_raise_on_negative_interval(self, invalid_config):\n        with pytest.raises(ValueError):\n            JobDescriptor.from_config_section(invalid_config, 'job_negative')\n\n    def test_should_raise_on_no_plugins(self, invalid_config):\n        with pytest.raises(NoOptionError):\n            JobDescriptor.from_config_section(invalid_config, 'job_noplugins')\n\n    def test_should_raise_on_empty_plugins(self, invalid_config):\n        with pytest.raises(ValueError):\n            JobDescriptor.from_config_section(invalid_config, 'job_emptyplugins')\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/descrparsers_test.py",
    "content": "#\n# Copyright (C) 2010 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Unit tests for descrparser module.\"\"\"\n\nfrom nav.ipdevpoll import descrparsers\n\n\nclass TestNtnuConvention(object):\n    sysname = 'foo-sw'\n\n    def test_lan(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'lan,math,staff')\n        assert d is not None\n        assert d['org'] == 'math'\n        assert d['usage'] == 'staff'\n        assert d['netident'] == 'math,staff'\n\n    def test_lan_with_comment_and_vlan(self):\n        d = descrparsers.parse_ntnu_convention(\n            self.sysname, 'lan,physics,students,campus_dragv,340'\n        )\n        d is not None\n        assert d['org'] == 'physics'\n        assert d['usage'] == 'students'\n        assert d['comment'] == 'campus_dragv'\n        assert d['netident'] == 'physics,students,campus_dragv'\n        assert d['vlan'] == 340\n\n    def test_lan_with_numbered_usage_and_comment(self):\n        d = descrparsers.parse_ntnu_convention(\n            self.sysname, 'lan,math,staff12,campus_lade'\n        )\n        d is not None\n        assert d['org'] == 'math'\n        assert d['usage'] == 'staff'\n        assert d['n'] == 12\n        assert d['netident'] == 'math,staff12,campus_lade'\n        assert d['comment'] == 'campus_lade'\n\n    def test_lan_with_spaces(self):\n        d = descrparsers.parse_ntnu_convention(\n            self.sysname, 'lan ,physics,students,  campus_dragv, 340'\n        )\n        d is not None\n        assert d['org'] == 'physics'\n        assert d['usage'] == 'students'\n        assert d['comment'] == 'campus_dragv'\n        assert d['netident'] == 'physics,students,campus_dragv'\n        assert d['vlan'] == 340\n\n    def test_lan_invalid(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'lan,foo')\n        assert d is None\n\n    def test_link(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'link,mts-gw')\n        d is not None\n        assert d['to_router'] == 'mts-gw'\n\n    def test_link_with_comment_and_vlan(self):\n        d = descrparsers.parse_ntnu_convention(\n            self.sysname, 'link,moholt-gw,Tn_20022350,923'\n        )\n        assert d['to_router'] == 'moholt-gw'\n        assert d['comment'] == 'Tn_20022350'\n        assert d['netident'] == '%s,%s' % (self.sysname, 'moholt-gw')\n        assert d['vlan'] == 923\n\n    def test_core(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'core,it,wlan')\n        d is not None\n        assert d['org'] == 'it'\n        assert d['usage'] == 'wlan'\n        assert d['netident'] == 'it,wlan'\n\n    def test_core_with_comment_and_vlan(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'core,it,fddi,manring,180')\n        d is not None\n        assert d['org'] == 'it'\n        assert d['usage'] == 'fddi'\n        assert d['comment'] == 'manring'\n        assert d['netident'] == 'it,fddi,manring'\n        assert d['vlan'] == 180\n\n    def test_core_invalid(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'core,foo')\n        assert d is None\n\n    def test_elink(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'elink,trd-gw,uninett')\n        d is not None\n        assert d['to_router'] == 'trd-gw'\n        assert d['to_org'] == 'uninett'\n        assert d['netident'] == '%s,%s' % (self.sysname, 'trd-gw')\n\n    def test_elink_with_empty_comment(self):\n        d = descrparsers.parse_ntnu_convention(\n            self.sysname, 'elink,sintef-gw,sintef,,902'\n        )\n        d is not None\n        assert d['to_router'] == 'sintef-gw'\n        assert d['to_org'] == 'sintef'\n        assert not d['comment']\n        assert d['netident'] == '%s,%s' % (self.sysname, 'sintef-gw')\n        assert d['vlan'] == 902\n\n    def test_invalid(self):\n        d = descrparsers.parse_ntnu_convention(self.sysname, 'foobar,bar,baz')\n        assert d is None\n\n\nclass TestUninettConvention(object):\n    def test_simple(self):\n        d = descrparsers.parse_uninett_convention(\n            'foo-sw', 'lokal link, uninett-gw.teknobyen-gw2'\n        )\n        assert d['comment'] == 'lokal link'\n        assert d['netident'] == 'uninett-gw.teknobyen-gw2'\n\n    def test_invalid(self):\n        d = descrparsers.parse_uninett_convention('foo-sw', 'KX182')\n        assert d is None\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/dnsname_test.py",
    "content": "from unittest import TestCase\nfrom mock import Mock\n\nfrom nav.ipdevpoll.shadows import Netbox\nfrom nav.ipdevpoll.storage import ContainerRepository\nfrom nav.ipdevpoll.plugins.dnsname import DnsName\n\n\nclass StrangeDnsResponsesTest(TestCase):\n    def test_empty_result_should_not_set_sysname(self):\n        containers = ContainerRepository()\n        netbox = containers.factory(None, Netbox)\n        netbox.sysname = 'original-sw.example.org'\n\n        netbox_in = Mock('NetBox')\n        netbox_in.sysname = 'original-sw.example.org'\n        netbox_in.ip = '127.0.0.1'\n\n        plugin = DnsName(netbox_in, Mock('agent'), containers)\n        plugin._verify_name_change(None)\n\n        self.assertEqual(netbox.sysname, 'original-sw.example.org')\n\n    def test_response_without_ptr_record_should_translate_to_none(self):\n        plugin = DnsName(Mock(), Mock(), Mock())\n        self.assertTrue(plugin._find_ptr_response([[Mock()]]) is None)\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/interfaces_test.py",
    "content": "from unittest import TestCase\nfrom mock import Mock\n\nimport pytest\n\nfrom nav.ipdevpoll import IpdevpollConfig\nfrom nav.ipdevpoll.storage import ContainerRepository\nfrom nav.ipdevpoll.plugins.interfaces import Interfaces\n\n\nclass EncodingTests(TestCase):\n    def test_ifalias_should_be_unicode(self):\n        netbox = Mock('Netbox')\n        agent = Mock('AgentProxy')\n        containers = ContainerRepository()\n        plugin = Interfaces(netbox, agent, containers, FakeConfig())\n\n        row = {\n            'ifDescr': 'GigabitEthernet0/1',\n            'ifName': 'Gi0/1',\n            'ifAlias': 'The Larch',\n        }\n        required_keys = (\n            'ifType',\n            'ifSpeed',\n            'ifSpeed',\n            'ifHighSpeed',\n            'ifAdminStatus',\n            'ifOperStatus',\n            'ifPhysAddress',\n            'ifConnectorPresent',\n        )\n        for k in required_keys:\n            row[k] = None\n\n        interface = plugin._convert_row_to_container(netbox, 1, row)\n        self.assertTrue(isinstance(interface.ifalias, str))\n\n\nclass TestExtractInterfaceSpeed:\n    def test_should_use_highspeed_value_when_speed_is_maxed_out(self):\n        assert Interfaces._extract_interface_speed(4294967295, 10000) == pytest.approx(\n            10000.0\n        )\n\n    def test_should_use_speed_value_when_not_maxed_out(self):\n        assert Interfaces._extract_interface_speed(1073741824, 0) == pytest.approx(\n            1073.741824\n        )\n\n    def test_should_use_highspeed_value_when_equal_to_speed(self):\n        \"\"\"Tests the behavior when agent implementation is buggy\"\"\"\n        assert Interfaces._extract_interface_speed(1000, 1000) == pytest.approx(1000.0)\n\n    def test_should_return_highspeed_when_flag_is_set(self):\n        assert Interfaces._extract_interface_speed(\n            69, 42, always_use_highspeed=True\n        ) == pytest.approx(42.0)\n\n\nclass FakeConfig(IpdevpollConfig):\n    \"\"\"Represents the default ipdevpoll config, but prevents the parent from attempting\n    a read from the file system\n    \"\"\"\n\n    DEFAULT_CONFIG_FILES = []\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/ipdevpoll_test.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2008, 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport unittest\nimport os\nfrom random import shuffle\nfrom IPy import IP\n\nimport django\n\ndjango.setup()\nos.environ['DJANGO_SETTINGS_MODULE'] = 'nav.django.settings'\n\nfrom nav.models.manage import Prefix\nfrom nav.ipdevpoll.utils import (\n    find_prefix,\n    truncate_mac,\n    binary_mac_to_hex,\n    is_invalid_utf8,\n)\n\n\nclass UtilsTest(unittest.TestCase):\n    def test_find_prefix(self):\n        correct_ipv4 = IP('192.0.2.1')\n        correct_ipv6 = IP('2001:db8:1234::1')\n\n        loose_v6_prefix = Prefix(net_address='2001:db8::/32')\n        tight_v6_prefix = Prefix(net_address='2001:db8:1234::/48')\n        loose_v4_prefix = Prefix(net_address='192.0.2/24')\n        tight_v4_prefix = Prefix(net_address='192.0.2.0/26')\n\n        prefix_list = [\n            loose_v6_prefix,\n            tight_v6_prefix,\n            loose_v4_prefix,\n            tight_v4_prefix,\n        ]\n        shuffle(prefix_list)\n\n        prefix1 = find_prefix(correct_ipv6, prefix_list)\n        prefix2 = find_prefix(correct_ipv4, prefix_list)\n\n        self.assertEqual(prefix1, tight_v6_prefix)\n        self.assertEqual(prefix2, tight_v4_prefix)\n\n    def test_binary_mac_to_hex(self):\n        # Make a simple \"binary\" mac\n        binary_mac = b'123456'\n        mac = '31:32:33:34:35:36'\n        converted_mac = binary_mac_to_hex(binary_mac)\n        self.assertEqual(converted_mac, mac)\n\n    def test_truncate_mac(self):\n        mac = '01:02:03:04:05:06'\n        long_mac = mac + ':07:08:09'\n        trunc_mac = truncate_mac(long_mac)\n        self.assertEqual(trunc_mac, mac)\n\n    def test_binary_mac_too_short(self):\n        binary_mac = b'23456'\n        mac = '00:32:33:34:35:36'\n        converted_mac = binary_mac_to_hex(binary_mac)\n        self.assertEqual(converted_mac, mac)\n\n    def test_binary_mac_too_long_should_return_last_part(self):\n        binary_mac = b'x123456'\n        mac = '31:32:33:34:35:36'\n        converted_mac = binary_mac_to_hex(binary_mac)\n        self.assertEqual(converted_mac, mac)\n\n    def test_invalid_utf8(self):\n        self.assertTrue(is_invalid_utf8(b'P%\\xe4\\xb8D\\xb6\\x108B\\x1d'))\n\n    def test_valid_utf8(self):\n        self.assertFalse(is_invalid_utf8(b\"ABC-123\"))\n        self.assertFalse(is_invalid_utf8(b'\\xc3\\x86\\xc3\\x98\\xc3\\x85'))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/mibs_test.py",
    "content": "#\n# Copyright (C) 2008, 2009, 2011, 2012, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport datetime\nfrom unittest.mock import Mock, patch\n\nimport pytest\nimport pytest_twisted\nfrom IPy import IP\nfrom nav.ipdevpoll.shadows import Device, PowerSupplyOrFan\nfrom nav.mibs import itw_mib, itw_mibv3, itw_mibv4\nfrom nav.mibs.cisco_hsrp_mib import CiscoHSRPMib\nfrom nav.mibs.entity_mib import (\n    EntityMib,\n    _entity_to_powersupply_or_fan,\n    parse_dateandtime_tc,\n)\nfrom nav.mibs.ip_mib import IndexToIpException, IpMib\nfrom nav.mibs.ipv6_mib import Ipv6Mib\nfrom nav.mibs.snmpv2_mib import Snmpv2Mib\nfrom nav.models.manage import NetboxEntity\nfrom nav.oids import OID\nfrom twisted.internet import defer\nfrom twisted.python import failure\n\n\nclass TestIpMib(object):\n    def test_ipv4_syntax_with_length_should_be_parsed_correctly(self):\n        ip_tuple = (1, 4, 192, 0, 2, 1)\n        expected = IP('192.0.2.1')\n        ip = IpMib.inetaddress_to_ip(ip_tuple)\n        assert ip == expected\n\n    def test_invalid_ipv4_syntax_should_raise_error(self):\n        ip_tuple = (1, 4, 300, 300, 300, 300)\n        with pytest.raises(ValueError):\n            IpMib.inetaddress_to_ip(ip_tuple)\n\n    def test_too_short_ipv4_address_should_raise_exception(self):\n        ip_tuple = (1, 4, 1, 2)\n        with pytest.raises(IndexToIpException):\n            IpMib.inetaddress_to_ip(ip_tuple)\n\n    def test_ipv4_syntax_not_annotated_with_size_should_parse_ok(self):\n        ip_tuple = (1, 192, 0, 2, 1)\n        expected = IP('192.0.2.1')\n        ip = IpMib.inetaddress_to_ip(ip_tuple)\n        assert ip == expected\n\n    def test_too_long_ipv6_address_should_raise_exception(self):\n        ip_tuple = (2, 16, 32, 1, 13, 184, 18, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)\n        with pytest.raises(IndexToIpException):\n            IpMib.inetaddress_to_ip(ip_tuple)\n\n    def test_ipv6_syntax_with_length_should_be_parsed_correctly(self):\n        ip_tuple = (2, 16, 32, 1, 13, 184, 18, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)\n        expected = IP('2001:db8:1234::1')\n        ip = IpMib.inetaddress_to_ip(ip_tuple)\n        assert ip == expected\n\n    _ipAddressPrefixEntry = (1, 3, 6, 1, 2, 1, 4, 32, 1)\n\n    def test_ipv4_prefix_rowpointer_should_be_parsed_correctly(self):\n        rowpointer = self._ipAddressPrefixEntry + (\n            5,\n            439541760,\n            1,\n            4,\n            192,\n            168,\n            70,\n            0,\n            24,\n        )\n        expected = IP('192.168.70/24')\n        prefix = IpMib.prefix_index_to_ip(rowpointer)\n        assert prefix == expected\n\n    def test_ipv6_prefix_rowpointer_should_be_parsed_correctly(self):\n        rowpointer = self._ipAddressPrefixEntry + (\n            5,\n            11,\n            2,\n            16,\n            32,\n            1,\n            7,\n            0,\n            0,\n            0,\n            5,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            64,\n        )\n        expected = IP('2001:700:0:500::/64')\n        prefix = IpMib.prefix_index_to_ip(rowpointer)\n        assert prefix == expected\n\n    def test_nxos_ipv4_prefix_rowpointer_should_be_parsed_correctly(self):\n        rowpointer = self._ipAddressPrefixEntry + (439541760, 1, 4, 192, 168, 70, 0, 24)\n        expected = IP('192.168.70/24')\n        prefix = IpMib.prefix_index_to_ip(rowpointer)\n        assert prefix == expected\n\n    def test_nxos_ipv6_prefix_rowpointer_should_be_parsed_correctly(self):\n        rowpointer = self._ipAddressPrefixEntry + (\n            11,\n            2,\n            16,\n            32,\n            1,\n            7,\n            0,\n            0,\n            0,\n            5,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            64,\n        )\n        expected = IP('2001:700:0:500::/64')\n        prefix = IpMib.prefix_index_to_ip(rowpointer)\n        assert prefix == expected\n\n\nclass TestIpv6Mib(object):\n    def test_ipv6mib_index(self):\n        ip_tuple = (32, 1, 13, 184, 18, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)\n        expected = IP('2001:db8:1234::1')\n        ip = Ipv6Mib.ipv6address_to_ip(ip_tuple)\n        assert ip == expected\n\n\nclass TestEntityMib(object):\n    @pytest_twisted.ensureDeferred\n    async def test_empty_logical_type_should_not_raise(self):\n        mib = EntityMib(Mock('AgentProxy'))\n\n        with patch.object(mib, 'retrieve_columns') as mock_retrieve:\n            mock_retrieve.return_value = defer.succeed(\n                {\n                    1: {\n                        'entLogicalDescr': None,\n                        'entLogicalType': None,\n                        'entLogicalCommunity': None,\n                    }\n                }\n            )\n            result = await mib.retrieve_alternate_bridge_mibs()\n            assert isinstance(result, list)\n\n    def test_entity_to_powersupply_or_fan(self):\n        entity = {\n            \"entPhysicalName\": \"PSU 1\",\n            \"entPhysicalModelName\": \"ABCDEF 720\",\n            \"entPhysicalDescr\": \"Next-gen PSU Power fidelity foobar\",\n            \"entPhysicalClass\": NetboxEntity.CLASS_POWERSUPPLY,\n            \"entPhysicalSerialNum\": \"123ABC\",\n            0: OID('.1'),\n        }\n        unit = _entity_to_powersupply_or_fan(entity)\n        assert isinstance(unit, PowerSupplyOrFan)\n        assert isinstance(unit.device, Device)\n\n    @pytest.mark.parametrize(\n        \"func,expected_count\", [(\"get_power_supplies\", 2), (\"get_fans\", 1)]\n    )\n    def test_get_power_supplies_or_fans_should_return_correct_number_of_units(\n        self, entity_physical_table, func, expected_count\n    ):\n        \"\"\"Tests that the correct number of fans or psus are filtered from an\n        entPhysicalTable result.\n\n        \"\"\"\n        result = self._get_units(func, entity_physical_table)\n        assert len(result) == expected_count\n\n    @pytest.mark.parametrize(\"func\", [\"get_power_supplies\", \"get_fans\"])\n    def test_get_power_supplies_or_fans_should_return_lists_of_correct_type(\n        self, entity_physical_table, func\n    ):\n        result = self._get_units(func, entity_physical_table)\n        assert result\n        assert all(isinstance(unit, PowerSupplyOrFan) for unit in result)\n\n    @staticmethod\n    def _get_units(func, entity_physical_table):\n        mib = EntityMib(Mock(\"AgentProxy\"))\n\n        def mock_retrieve(columns):\n            return defer.succeed(entity_physical_table)\n\n        mib.retrieve_columns = mock_retrieve\n        df = getattr(mib, func)()\n        assert df.called\n        if isinstance(df.result, failure.Failure):\n            df.result.raiseException()\n        return df.result\n\n\nclass TestSnmpv2Mib(object):\n    def test_simple_uptime_deviation_should_be_correct(self):\n        first_uptime = (1338372778.0, 10000)\n        second_uptime = (1338372900.0, 22200)\n        dev = Snmpv2Mib.get_uptime_deviation(first_uptime, second_uptime)\n        assert abs(dev) < 0.5, \"deviation is higher than 0.5: %r\" % dev\n\n    def test_wrapped_uptime_deviation_should_be_correct(self):\n        first_uptime = (1338372778.0, 4294967196)\n        second_uptime = (1338372900.0, 12100)\n        dev = Snmpv2Mib.get_uptime_deviation(first_uptime, second_uptime)\n        assert abs(dev) < 0.5, \"deviation is higher than 0.5: %r\" % dev\n\n    def test_none_uptime_should_not_crash(self):\n        uptime1 = (0, None)\n        uptime2 = (10, 10)\n        dev = Snmpv2Mib.get_uptime_deviation(uptime1, uptime2)\n        assert dev is None\n\n\nclass TestCiscoHSRPMib(object):\n    def test_virtual_address_map(self):\n        class MockedMib(CiscoHSRPMib):\n            def retrieve_column(self, column):\n                return defer.succeed(\n                    {\n                        OID('.153.1'): '10.0.1.1',\n                        OID('.155.1'): '10.0.42.1',\n                    }\n                )\n\n        mib = MockedMib(None)\n        df = mib.get_virtual_addresses()\n        assert df.called\n        assert (IP('10.0.1.1'), 153) in df.result.items()\n        assert (IP('10.0.42.1'), 155) in df.result.items()\n\n\ndef test_short_dateandtime_parses_properly():\n    parsed = parse_dateandtime_tc(b'\\xdf\\x07\\x05\\x0e\\x0c\\x1e*\\x05')\n    assert parsed == datetime.datetime(2015, 5, 14, 12, 30, 42, 500000)\n\n\ndef test_long_dateandtime_parses_properly():\n    parsed = parse_dateandtime_tc(b'\\xdf\\x07\\x05\\x0e\\x0c\\x1e*\\x05+\\x02\\x00')\n    assert parsed == datetime.datetime(2015, 5, 14, 12, 30, 42, 500000)\n\n\ndef test_zero_dateandtime_parses_properly():\n    parsed = parse_dateandtime_tc(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')\n    assert parsed is None\n\n\ndef test_non_bytes_dateandtime_should_not_be_parsed():\n    parsed = parse_dateandtime_tc('\\xdf\\x07\\x05\\x0e\\x0c\\x1e*\\x05+\\x02\\x00')\n    assert parsed is None\n\n\ndef test_crazy_dateandtime_should_not_crash():\n    assert parse_dateandtime_tc(b\"FOOBAR\") is None\n\n\ndef is_col_of(mib, col, table):\n    return mib['nodes'][table]['oid'].is_a_prefix_of(mib['nodes'][col]['oid'])\n\n\n@pytest.mark.parametrize(\n    'cls',\n    [itw_mib.ItWatchDogsMib, itw_mibv3.ItWatchDogsMibV3, itw_mibv4.ItWatchDogsMibV4],\n)\ndef test_itw_tables(cls):\n    mib = cls.mib\n    for table, groups in cls.TABLES.items():\n        for group in groups:\n            cols = ['serial', 'name']\n            if 'avail' in group:\n                cols.append('avail')\n            for col in cols:\n                assert group[col] in mib['nodes'], group[col]\n                assert is_col_of(mib, group[col], table)\n            for sensor in group['sensors']:\n                assert sensor in mib['nodes'], sensor\n                assert is_col_of(mib, sensor, table)\n\n\n@pytest.fixture\ndef entity_physical_table(scope=\"session\"):\n    \"\"\"Returns a sample entPhysicalTable response\"\"\"\n    return {\n        OID(\".1\"): {\n            0: OID(\".1\"),\n            \"entPhysicalDescr\": \"Chassis\",\n            \"entPhysicalContainedIn\": 0,\n            \"entPhysicalClass\": NetboxEntity.CLASS_CHASSIS,\n            \"entPhysicalParentRelPos\": 0,\n            \"entPhysicalName\": \"My Chassis\",\n            \"entPhysicalHardwareRev\": None,\n            \"entPhysicalFirmwareRev\": None,\n            \"entPhysicalSoftwareRev\": None,\n            \"entPhysicalSerialNum\": None,\n            \"entPhysicalModelName\": None,\n            \"entPhysicalIsFRU\": 0,\n        },\n        OID(\".2\"): {\n            0: OID(\".2\"),\n            \"entPhysicalDescr\": \"A power supply\",\n            \"entPhysicalContainedIn\": 1,\n            \"entPhysicalClass\": NetboxEntity.CLASS_POWERSUPPLY,\n            \"entPhysicalParentRelPos\": 0,\n            \"entPhysicalName\": \"PSU 1\",\n            \"entPhysicalHardwareRev\": None,\n            \"entPhysicalFirmwareRev\": None,\n            \"entPhysicalSoftwareRev\": None,\n            \"entPhysicalSerialNum\": None,\n            \"entPhysicalModelName\": None,\n            \"entPhysicalIsFRU\": 1,\n        },\n        OID(\".3\"): {\n            0: OID(\".3\"),\n            \"entPhysicalDescr\": \"Another power supply\",\n            \"entPhysicalContainedIn\": 1,\n            \"entPhysicalClass\": NetboxEntity.CLASS_POWERSUPPLY,\n            \"entPhysicalParentRelPos\": 1,\n            \"entPhysicalName\": \"PSU 2\",\n            \"entPhysicalHardwareRev\": None,\n            \"entPhysicalFirmwareRev\": None,\n            \"entPhysicalSoftwareRev\": None,\n            \"entPhysicalSerialNum\": None,\n            \"entPhysicalModelName\": None,\n            \"entPhysicalIsFRU\": 1,\n        },\n        OID(\".4\"): {\n            0: OID(\".4\"),\n            \"entPhysicalDescr\": \"A fan\",\n            \"entPhysicalContainedIn\": 1,\n            \"entPhysicalClass\": NetboxEntity.CLASS_FAN,\n            \"entPhysicalParentRelPos\": 0,\n            \"entPhysicalName\": \"FAN 1\",\n            \"entPhysicalHardwareRev\": None,\n            \"entPhysicalFirmwareRev\": None,\n            \"entPhysicalSoftwareRev\": None,\n            \"entPhysicalSerialNum\": None,\n            \"entPhysicalModelName\": None,\n            \"entPhysicalIsFRU\": 1,\n        },\n    }\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/modules_test.py",
    "content": "from configparser import ConfigParser\n\nfrom nav.ipdevpoll.plugins import modules\n\n\nclass TestGetIgnoredSerials:\n    def test_should_return_correct_list_items(self):\n        cp = ConfigParser()\n        cp.read_string(\n            \"\"\"\n        [modules]\n        ignored-serials = one   two three\n        \"\"\"\n        )\n\n        result = modules.get_ignored_serials(cp)\n        assert result == [\"one\", \"two\", \"three\"]\n\n    def test_should_return_default_value_if_none_is_configured(self):\n        cp = ConfigParser()\n        result = modules.get_ignored_serials(cp)\n        assert result == [\"BUILTIN\"]\n\n\nclass TestModulesPlugin:\n    def test_should_load_default_config_without_error(self):\n        modules.Modules.on_plugin_load()\n        assert modules.Modules.ignored_serials == ['BUILTIN']\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/neighbor_test.py",
    "content": "from unittest import TestCase\nfrom nav.ipdevpoll.neighbor import _get_netbox_macs\nfrom nav.ipdevpoll.plugins.cdp import CDPNeighbor\nfrom mock import patch, Mock\n\n\nclass IgnoredMacTest(TestCase):\n    def test_vrrp_addresses_are_ignored(self):\n        with patch('django.db.connection') as cx:\n            vrrp1 = '00:00:5e:00:01:28'\n            vrrp2 = '00:00:5e:00:02:19'\n            my_cursor = Mock()\n            my_cursor.fetchall.return_value = [\n                ('00:12:34:56:78:9a', 1),\n                (vrrp1, 2),\n                (vrrp2, 3),\n            ]\n            cx.cursor.return_value = my_cursor\n            result = _get_netbox_macs()\n            self.assertTrue(len(result) > 0, msg=\"Non-VRRP addresses were ignored\")\n            self.assertFalse(\n                vrrp1 in result or vrrp2 in result,\n                msg=\"VRRP addresses are present in result\",\n            )\n\n\nclass _MockedCDPNeighbor(CDPNeighbor):\n    def identify(self):\n        # bypass the regular identification routine on instantiation\n        pass\n\n\nclass IgnoreCDPSelfLoopsTest(TestCase):\n    def test_apparent_cdp_self_loop_should_be_ignored(self):\n        test_ip = '10.0.1.41'\n        neighbor = _MockedCDPNeighbor(None, test_ip)\n        self.assertTrue(neighbor._netbox_from_ip(test_ip) is None)\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/plugins_arp_test.py",
    "content": "from datetime import datetime\nfrom unittest.mock import patch\n\nimport pytest\nimport pytest_twisted\n\nfrom nav.ipdevpoll import shadows\nfrom nav.ipdevpoll.storage import ContainerRepository\nfrom nav.ipdevpoll.plugins.arp import ipv6_address_in_mappings, Arp\n\n\nclass TestCheckAndUpdatePrefixCache:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_when_cache_is_expired_it_should_call_update(self):\n        with patch.object(Arp, \"_update_prefix_cache\") as update:\n            Arp.prefix_cache_update_time = datetime.now() - Arp.prefix_cache_max_age * 2\n            yield Arp._check_and_update_prefix_cache()\n            assert update.called\n\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_when_cache_is_not_expired_it_should_not_call_update(self):\n        with patch.object(Arp, \"_update_prefix_cache\") as update:\n            Arp.prefix_cache_update_time = datetime.now()\n            yield Arp._check_and_update_prefix_cache()\n            assert not update.called\n\n\ndef test_none_in_mappings_should_not_raise():\n    mappings = [(None, None, None)]\n    assert not ipv6_address_in_mappings(mappings)\n\n\ndef test_make_new_mappings_should_not_raise_on_empty_ip():\n    a = Arp(None, None, ContainerRepository())\n    mappings = [(None, '00:0b:ad:c0:ff:ee')]\n    a._make_new_mappings(mappings)\n\n\ndef test_when_arp_records_exist_is_arp_already_collected_should_return_true():\n    containers = ContainerRepository()\n    containers.factory(('192.168.0.1', '00:co:ff:ee:ba:be'), shadows.Arp)\n    plugin = Arp(None, None, containers)\n    assert plugin._is_arp_already_collected()\n\n\ndef test_when_arp_records_do_not_exist_is_arp_already_collected_should_return_false():\n    plugin = Arp(None, None, ContainerRepository())\n    assert not plugin._is_arp_already_collected()\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/plugins_lldp_test.py",
    "content": "from django.db.models import Q\nfrom mock import Mock, patch\n\nfrom nav.ipdevpoll.plugins.lldp import (\n    INFO_KEY_LLDP_INFO,\n    INFO_VAR_CHASSIS_ID,\n    LLDP,\n    LLDPNeighbor,\n)\nfrom nav.ipdevpoll.storage import ContainerRepository\n\n\ndef test_non_ascii_chassis_id_should_not_crash():\n    record = Mock(chassid_id='a\\x9enon-ascii')\n    plugin = LLDP(None, None, ContainerRepository())\n    plugin._store_unidentified(record)\n\n\ndef test_given_local_id_with_nullbytes_then_netbox_from_local_should_not_crash():\n    with patch.object(LLDPNeighbor, 'identify'):\n        with patch.object(\n            LLDPNeighbor, '_netbox_query', return_value=None\n        ) as mock_query:\n            neighbor = LLDPNeighbor(Mock())\n            neighbor._netbox_from_local(\"somedevice\\x00\\x00\")\n\n            # Verify the first query was called with null bytes stripped\n            # (the method makes two queries: first via info_set,\n            # then via sysname fallback)\n            first_call_q = mock_query.call_args_list[0][0][0]\n            expected_q = Q(\n                info_set__key=INFO_KEY_LLDP_INFO,\n                info_set__variable=INFO_VAR_CHASSIS_ID,\n                info_set__value=\"somedevice\",\n            )\n            assert repr(first_call_q) == repr(expected_q)\n\n\ndef test_given_local_id_with_only_nullbytes_then_netbox_from_local_should_not_crash():\n    with patch.object(LLDPNeighbor, 'identify'):\n        with patch.object(LLDPNeighbor, '_netbox_query', return_value=None):\n            neighbor = LLDPNeighbor(Mock())\n            assert not neighbor._netbox_from_local(\"\\x00\\x00\\x00\")\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/plugins_paloaltoarp_test.py",
    "content": "from unittest.mock import patch, Mock\n\nimport pytest_twisted\nimport pytest\n\nfrom IPy import IP\nfrom nav.ipdevpoll.plugins.paloaltoarp import PaloaltoArp, _parse_arp\nfrom twisted.internet import defer\nfrom twisted.web.client import Agent, Response\n\nvalid_http_response_body = b'''\n    <response status=\"success\">\n    <result>\n            <max>132000</max>\n            <total>3</total>\n            <timeout>1800</timeout>\n            <dp>s3dp1</dp>\n            <entries>\n                <entry>\n                    <status>  s  </status>\n                    <ip>192.168.0.1</ip>\n                    <mac>00:00:00:00:00:01</mac>\n                    <ttl>100</ttl>\n                    <interface>ae2</interface>\n                    <port>ae2</port>\n                </entry>\n                <entry>\n                    <status>  e  </status>\n                    <ip>192.168.0.2</ip>\n                    <mac>00:00:00:00:00:02</mac>\n                    <ttl>200</ttl>\n                    <interface>ae2</interface>\n                    <port>ae2</port>\n                </entry>\n                <entry>\n                    <status>  c  </status>\n                    <ip>192.168.0.3</ip>\n                    <mac>00:00:00:00:00:03</mac>\n                    <ttl>300</ttl>\n                    <interface>ae3.61</interface>\n                    <port>ae3</port>\n                </entry>\n                <entry>\n                    <status>  i  </status>\n                    <ip>192.168.0.4</ip>\n                    <mac>00:00:00:00:00:04</mac>\n                    <ttl>400</ttl>\n                    <interface>ae3.61</interface>\n                    <port>ae3</port>\n                </entry>\n            </entries>\n        </result>\n    </response>\n    '''\n\n\ndef test_parse_arp_should_correctly_parse_valid_http_response_body():\n    assert _parse_arp(valid_http_response_body) == [\n        ('ifindex', IP('192.168.0.1'), '00:00:00:00:00:01'),\n        ('ifindex', IP('192.168.0.2'), '00:00:00:00:00:02'),\n        ('ifindex', IP('192.168.0.3'), '00:00:00:00:00:03'),\n    ]\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_get_paloalto_arp_mappings_should_return_arp_mappings_on_valid_http_response(\n    paloaltoarp,\n):\n    with patch.object(\n        PaloaltoArp, \"_do_request\", return_value=defer.succeed(valid_http_response_body)\n    ):\n        assert paloaltoarp._do_request.call_count == 0\n        mappings = yield paloaltoarp._get_paloalto_arp_mappings(\n            IP(\"0.0.0.0\"), \"abcdefghijklmnop\"\n        )\n        assert sorted(mappings) == [\n            ('ifindex', IP('192.168.0.1'), '00:00:00:00:00:01'),\n            ('ifindex', IP('192.168.0.2'), '00:00:00:00:00:02'),\n            ('ifindex', IP('192.168.0.3'), '00:00:00:00:00:03'),\n        ]\n        assert paloaltoarp._do_request.call_count == 1\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_get_paloalto_arp_mappings_should_return_empty_list_on_request_error(\n    paloaltoarp,\n):\n    with patch.object(PaloaltoArp, \"_do_request\", return_value=defer.succeed(None)):\n        mappings = yield paloaltoarp._get_paloalto_arp_mappings(\n            IP(\"10.0.0.0\"), \"incorrect_key\"\n        )\n        assert mappings == []\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_do_request_should_form_correct_api_query_url(paloaltoarp):\n    mock_response = Mock(spec=Response)\n    mock_agent = Mock(spec=Agent)\n    mock_agent.request.return_value = defer.succeed(mock_response)\n\n    sentinel = object()\n\n    with (\n        patch('nav.ipdevpoll.plugins.paloaltoarp.Agent', return_value=mock_agent),\n        patch('twisted.web.client.readBody', return_value=sentinel),\n    ):\n        address = IP(\"127.0.0.1\")\n        key = \"secret\"\n\n        result = yield paloaltoarp._do_request(address, key)\n\n        expected_url = f\"https://{address}/api/?type=op&cmd=<show><arp><entry+name+=+'all'/></arp></show>&key={key}\".encode(\n            \"utf-8\"\n        )\n\n        mock_agent.request.assert_called()\n        args, kwargs = mock_agent.request.call_args\n        assert expected_url in args\n\n        assert result == sentinel\n\n\n@pytest.fixture\ndef paloaltoarp():\n    \"\"\"\n    No method in PaloaltoArp except PaloaltoArp.handle() utilize the state of an\n    instance, so as long as we defer testing PaloaltoArp.handle() to integration\n    tests, we can make do with a fully mocked internal state for the unit\n    tests. (The reason we do not declare the methods as static, so that we can\n    skip this mocking step when testing, is to not mess with logging\n    granularity.)\n    \"\"\"\n    return PaloaltoArp(Mock(), Mock(), Mock())\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/plugins_snmpcheck_test.py",
    "content": "from mock import Mock\n\nimport pytest\nimport pytest_twisted\nfrom twisted.internet import defer\n\nfrom nav.ipdevpoll.jobs import SuggestedReschedule\nfrom nav.ipdevpoll.plugins.snmpcheck import SnmpCheck\n\n\n@pytest.fixture\ndef plugin():\n    netbox = Mock()\n    agent = Mock()\n    containers = dict()\n    return SnmpCheck(netbox, agent, containers)\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_should_not_mark_as_up_when_already_up(plugin):\n    plugin._currently_down = Mock(return_value=False)\n    plugin._currently_down.__name__ = '_currently_down'\n    plugin.agent.walk.return_value = defer.succeed(True)\n    plugin._mark_as_up = Mock()\n    plugin._mark_as_down = Mock()\n    yield plugin.handle()\n    plugin._mark_as_up.assert_not_called()\n    plugin._mark_as_down.assert_not_called()\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_should_keep_sending_down_events_when_down(plugin):\n    plugin._currently_down = Mock(return_value=True)\n    plugin._currently_down.__name__ = '_currently_down'\n    plugin.agent.walk.return_value = defer.succeed(False)\n    plugin._mark_as_up = Mock()\n    plugin._mark_as_down = Mock()\n    with pytest.raises(SuggestedReschedule):\n        yield plugin.handle()\n    plugin._mark_as_up.assert_not_called()\n    plugin._mark_as_down.assert_called()\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_should_mark_as_down_when_transitioning_from_up_to_down(plugin):\n    plugin._currently_down = Mock(return_value=False)\n    plugin._currently_down.__name__ = '_currently_down'\n    plugin.agent.walk.return_value = defer.succeed(False)\n    plugin._mark_as_up = Mock()\n    plugin._mark_as_down = Mock()\n    with pytest.raises(SuggestedReschedule):\n        yield plugin.handle()\n    plugin._mark_as_up.assert_not_called()\n    plugin._mark_as_down.assert_called()\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_should_mark_as_up_when_transitioning_from_down_to_up(plugin):\n    plugin._currently_down = Mock(return_value=True)\n    plugin._currently_down.__name__ = '_currently_down'\n    plugin.agent.walk.return_value = defer.succeed(True)\n    plugin._mark_as_up = Mock()\n    plugin._mark_as_down = Mock()\n    yield plugin.handle()\n    plugin._mark_as_down.assert_not_called()\n    plugin._mark_as_up.assert_called()\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_do_check_should_report_false_on_timeout(plugin):\n    plugin.agent.walk.return_value = defer.fail(defer.TimeoutError())\n    res = yield plugin._do_check()\n    assert res is False\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/pool_test.py",
    "content": "import signal\nfrom unittest.mock import patch, Mock\n\nimport pytest\nimport pytest_twisted\nimport twisted.internet.defer\n\nfrom nav.ipdevpoll.pool import Worker\n\n\nclass TestWorker:\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_mock_process_should_not_respond_to_ping(self):\n        worker = Worker(pool=None, threadpoolsize=0, max_jobs=5)\n        worker.process = Mock()\n        ping_response = yield worker.responds_to_ping()\n        assert not ping_response  # Mock process cannot respond\n\n    @pytest.mark.twisted\n    @pytest_twisted.inlineCallbacks\n    def test_unresponsive_worker_should_be_euthanized(self):\n        worker = Worker(pool=None, threadpoolsize=0, max_jobs=5)\n        worker._pid = 666\n        with patch.object(worker, 'responds_to_ping') as ping:\n            ping.side_effect = twisted.internet.defer.TimeoutError(\"Mock timeout\")\n            with patch('os.kill') as mock_kill:\n                yield worker._euthanize_unresponsive_worker()\n\n                mock_kill.assert_called_with(worker.pid, signal.SIGTERM)\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/prefix_test.py",
    "content": "from unittest import TestCase\nfrom mock import Mock\nfrom IPy import IP\nfrom random import randint\n\nfrom nav.ipdevpoll.plugins import prefix\n\n\nclass IgnoredPrefixConfigTest(TestCase):\n    def test_single_prefix(self):\n        config = Mock()\n        config.get.return_value = '127.0.0.0/8'\n\n        result = prefix.get_ignored_prefixes(config)\n        self.assertEqual(len(result), 1)\n        self.assertTrue(result[0] is not None)\n        self.assertEqual(result[0], IP('127.0.0.0/8'))\n\n    def test_two_prefixes(self):\n        config = Mock()\n        config.get.return_value = '127.0.0.0/8, fe80::/16'\n\n        expected = [IP('127.0.0.0/8'), IP('fe80::/16')]\n        result = prefix.get_ignored_prefixes(config)\n\n        self.assertEqual(len(result), 2)\n        self.assertTrue(result[0] is not None)\n        self.assertTrue(result[1] is not None)\n        self.assertTrue(result[0] in expected)\n        self.assertTrue(result[1] in expected)\n\n    def test_invalid_prefix_should_be_silently_ignored(self):\n        config = Mock()\n        config.get.return_value = '127.0.0.1/8, fe80::/16'\n\n        result = prefix.get_ignored_prefixes(config)\n        self.assertEqual(len(result), 1)\n        self.assertTrue(result[0] is not None)\n        self.assertEqual(result[0], IP('fe80::/16'))\n\n    def test_prefix_with_match_specifier_should_parse(self):\n        config = Mock()\n        config.get.return_value = '=10.0.0.0/23'\n\n        result = prefix.get_ignored_prefixes(config)\n        self.assertEqual(len(result), 1)\n        self.assertEqual(result[0], IP('10.0.0.0/23'))\n\n    def test_prefix_with_match_specifier_should_parse2(self):\n        config = Mock()\n        config.get.return_value = '=10.0.0.0/23, <<=10.1.0.0/23'\n\n        expected = [IP('10.0.0.0/23'), IP('10.1.0.0/23')]\n        result = prefix.get_ignored_prefixes(config)\n        self.assertEqual(len(result), 2)\n        self.assertIn(result[0], expected)\n        self.assertIn(result[1], expected)\n\n\nclass IgnoredPrefixTest(TestCase):\n    def test_contained_in_default_match(self):\n        pfx = prefix.IgnoredPrefix('192.168.1.0/24')\n        self.assertTrue(pfx.matches('192.168.1.128/25'))\n        self.assertFalse(pfx.matches('192.168.2.128/25'))\n\n    def test_contained_in_operator_match(self):\n        pfx = prefix.IgnoredPrefix('<<=192.168.1.0/24')\n        self.assertTrue(pfx.matches('192.168.1.128/25'))\n        self.assertFalse(pfx.matches('192.168.2.128/25'))\n\n    def test_contained_in_equals_match(self):\n        pfx = prefix.IgnoredPrefix('=192.168.1.0/24')\n        self.assertTrue(pfx.matches('192.168.1.0/24'))\n        self.assertFalse(pfx.matches('192.168.1.128/25'))\n\n\nclass PrefixPluginTest(TestCase):\n    def test_instantiation(self):\n        netbox = Mock('Netbox')\n        netbox.sysname = 'foo-sw.example.org'\n        prefix.Prefix(netbox, None, None)\n\n\nclass VlanPatternTest(TestCase):\n    def setUp(self):\n        self.vlan = str(randint(0, 4096))\n\n    def test_cisco_long_names_should_match(self):\n        match = prefix.VLAN_PATTERN.match(\"VLAN\" + self.vlan)\n        self.assertEqual(match.group('vlan'), self.vlan)\n\n    def test_cisco_short_names_should_match(self):\n        match = prefix.VLAN_PATTERN.match(\"Vl\" + self.vlan)\n        self.assertEqual(match.group('vlan'), self.vlan)\n\n    def test_juniper_irb_names_should_match(self):\n        match = prefix.VLAN_PATTERN.match(\"irb.\" + self.vlan)\n        self.assertEqual(match.group('vlan'), self.vlan)\n\n    def test_juniper_reth_names_should_match(self):\n        match = prefix.VLAN_PATTERN.match(\"reth0.\" + self.vlan)\n        self.assertEqual(match.group('vlan'), self.vlan)\n\n    def test_checkpoint_vlan_names_should_match(self):\n        match = prefix.VLAN_PATTERN.match(\"bond0.\" + self.vlan)\n        self.assertEqual(match.group('vlan'), self.vlan)\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/schedule_test.py",
    "content": "from mock import Mock\n\nimport pytest\nfrom twisted.internet import defer, task\n\nfrom nav.ipdevpoll import schedule\n\n\n@pytest.fixture\ndef netbox_job_scheduler():\n    job = Mock()\n    job.name = 'myjob'\n    job.interval = 10\n    job.plugins = []\n    job.intensity = 0\n    netbox = Mock()\n    netbox.id = 1\n    pool = Mock()\n    return schedule.NetboxJobScheduler(job, netbox, pool)\n\n\ndef test_netbox_job_scheduler_reschedule_on_success(netbox_job_scheduler):\n    pool = netbox_job_scheduler.pool\n    pool.execute_job.return_value = defer.succeed(True)\n    clock = task.Clock()\n    netbox_job_scheduler.callLater = clock.callLater\n    netbox_job_scheduler.start()\n    clock.advance(1)\n    pool.execute_job.assert_called_once_with('myjob', 1, plugins=[], interval=10)\n    clock.advance(10)\n    assert pool.execute_job.call_count == 2\n    pool.execute_job.assert_called_with('myjob', 1, plugins=[], interval=10)\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/shadows_adjacency_test.py",
    "content": "from nav.ipdevpoll.shadows.adjacency import UnrecognizedNeighbor\n\n\ndef test_nonascii_remote_name_should_be_changed():\n    remote_name = b'a\\x9enon-ascii'\n    u = UnrecognizedNeighbor()\n    u.remote_name = remote_name\n    u.prepare()\n    assert u.remote_name != remote_name\n\n\ndef test_nonascii_remote_id_should_be_changed():\n    remote_id = b'a\\x9enon-ascii'\n    u = UnrecognizedNeighbor()\n    u.remote_id = remote_id\n    u.prepare()\n    assert u.remote_id != remote_id\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/shadows_test.py",
    "content": "from unittest import TestCase\nfrom nav.ipdevpoll.storage import ContainerRepository\nfrom nav.ipdevpoll.shadows import Vlan, Prefix, Netbox, Interface\nfrom mock import patch, Mock\n\n\nclass MixedNetTypeTest(TestCase):\n    \"\"\"Tests for guesstimation of net_type on Vlan's with mixed prefixes\"\"\"\n\n    def setUp(self):\n        repo = ContainerRepository()\n        netbox = repo.factory(None, Netbox)\n        netbox.id = 1\n        vlan = repo.factory('20', Vlan)\n\n        for addr in ('2001:700:1::/64', '10.0.1.0/30', 'fe80::/64'):\n            prefix = repo.factory(addr, Prefix)\n            prefix.vlan = vlan\n            prefix.net_address = addr\n\n        self.vlan = vlan\n        self.repo = repo\n\n    def test_link_net_with_big_ipv6_addr(self):\n        with patch.multiple(\n            self.vlan,\n            _get_router_count_for_prefix=Mock(return_value=2),\n            _get_virtual_address_count=Mock(return_value=0),\n        ):\n            net_type = self.vlan._guesstimate_net_type(self.repo)\n            self.assertTrue(net_type is not None)\n            self.assertEqual(\"link\", net_type.id)\n\n    def test_elink_net_with_big_ipv6_addr(self):\n        with patch.multiple(\n            self.vlan,\n            _get_router_count_for_prefix=Mock(return_value=1),\n            _get_virtual_address_count=Mock(return_value=0),\n        ):\n            net_type = self.vlan._guesstimate_net_type(self.repo)\n            self.assertTrue(net_type is not None)\n            self.assertEqual(\"elink\", net_type.id)\n\n\nclass RFC3021NetTypeTest(TestCase):\n    \"\"\"RFC3021 Tests for guesstimation of net_type on Vlan's\"\"\"\n\n    def setUp(self):\n        repo = ContainerRepository()\n        netbox = repo.factory(None, Netbox)\n        netbox.id = 1\n        vlan = repo.factory('42', Vlan)\n        self.shadow_prefixes = []\n        for addr in ('2001:700:1::/64', '10.0.42.0/31'):\n            prefix = repo.factory(addr, Prefix)\n            prefix.vlan = vlan\n            prefix.net_address = addr\n            self.shadow_prefixes.append(prefix)\n\n        self.vlan = vlan\n        self.repo = repo\n\n    def test_elink_net_with_subnet_31_rfc3021_router_count_as_1(self):\n        with patch.multiple(\n            self.vlan,\n            _get_router_count_for_prefix=Mock(return_value=1),\n            _get_virtual_address_count=Mock(return_value=0),\n        ):\n            net_type = self.vlan._guesstimate_net_type(self.repo)\n            self.assertEqual(\"elink\", net_type.id)\n\n    def test_link_net_with_subnet_31_rfc3021_router_count_as_2(self):\n        with patch.multiple(\n            self.vlan,\n            _get_router_count_for_prefix=Mock(return_value=2),\n            _get_virtual_address_count=Mock(return_value=0),\n        ):\n            net_type = self.vlan._guesstimate_net_type(self.repo)\n            self.assertEqual('link', net_type.id)\n\n\nclass TestInterfaces(object):\n    def test_strip_null_bytes_should_leave_normal_strings_unchanged(self):\n        ifc = Interface()\n        ifc.ifname = ifc.ifalias = ifc.ifdescr = \"Foobar\"\n        ifc._strip_null_bytes(None)\n        assert ifc.ifname == ifc.ifalias == ifc.ifdescr == \"Foobar\"\n\n    def test_strip_null_bytes_should_strip_nullbytes(self):\n        ifc = Interface()\n        ifc.ifname = ifc.ifalias = ifc.ifdescr = \"Foobar\\x00\"\n        ifc._strip_null_bytes(None)\n        assert ifc.ifname == ifc.ifalias == ifc.ifdescr == \"Foobar\"\n\n    def test_strip_null_bytes_should_ignore_nonstrings(self):\n        ifc = Interface()\n        ifc.ifname = ifc.ifalias = ifc.ifdescr = 42\n        ifc._strip_null_bytes(None)\n        assert ifc.ifname == ifc.ifalias == ifc.ifdescr == 42\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/snmp/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/ipdevpoll/snmp/common_test.py",
    "content": "from unittest.mock import Mock\n\nimport pytest\n\nfrom nav.ipdevpoll.snmp.common import SNMPParameters\nfrom nav.Snmp.defines import AuthenticationProtocol, PrivacyProtocol, SecurityLevel\nfrom nav.models.manage import ManagementProfile\n\n\nclass TestSNMPParameters:\n    def test_when_instantiated_with_no_arguments_it_should_not_complain(self):\n        assert SNMPParameters()\n\n    def test_when_sec_level_is_given_as_string_it_should_be_convert_to_enum(self):\n        param = SNMPParameters(sec_level=\"authPriv\")\n        assert param.sec_level == SecurityLevel.AUTH_PRIV\n\n    def test_when_auth_protocol_is_given_as_string_it_should_be_convert_to_enum(self):\n        param = SNMPParameters(auth_protocol=\"MD5\")\n        assert param.auth_protocol == AuthenticationProtocol.MD5\n\n    def test_when_priv_protocol_is_given_as_string_it_should_be_convert_to_enum(self):\n        param = SNMPParameters(priv_protocol=\"AES\")\n        assert param.priv_protocol == PrivacyProtocol.AES\n\n\nclass TestSNMPParametersAsAgentProxyArgs:\n    def test_should_contain_cmdline_args(self, snmpv3_params):\n        kwargs = snmpv3_params.as_agentproxy_args()\n        assert \"cmdLineArgs\" in kwargs\n\n    def test_should_contain_version_argument(self, snmpv3_params):\n        kwargs = snmpv3_params.as_agentproxy_args()\n        assert kwargs.get(\"snmpVersion\") == \"v3\"\n\n    def test_should_contain_sec_level_cmdline_argument(self, snmpv3_params):\n        kwargs = snmpv3_params.as_agentproxy_args()\n        args = \" \".join(kwargs[\"cmdLineArgs\"])\n        assert \"-l authPriv\" in args\n\n    def test_should_contain_sec_name_cmdline_argument(self, snmpv3_params):\n        kwargs = snmpv3_params.as_agentproxy_args()\n        args = \" \".join(kwargs[\"cmdLineArgs\"])\n        assert \"-u foobar\" in args\n\n    def test_should_contain_context_name_cmdline_argument(\n        self, snmpv3_params_with_context\n    ):\n        kwargs = snmpv3_params_with_context.as_agentproxy_args()\n        args = \" \".join(kwargs[\"cmdLineArgs\"])\n        assert \"-n vlan100\" in args\n\n    def test_should_contain_context_engine_id_cmdline_argument(\n        self, snmpv3_params_with_context\n    ):\n        kwargs = snmpv3_params_with_context.as_agentproxy_args()\n        args = \" \".join(kwargs[\"cmdLineArgs\"])\n        assert \"-E 800000090300001234\" in args\n\n    def test_should_not_contain_context_args_when_not_set(self, snmpv3_params):\n        kwargs = snmpv3_params.as_agentproxy_args()\n        args = \" \".join(kwargs[\"cmdLineArgs\"])\n        assert \"-n\" not in args\n        assert \"-E\" not in args\n\n\nclass TestSNMPParametersFactory:\n    @pytest.mark.parametrize(\"version_value\", (2, \"2\", \"2c\"))\n    def test_snmp_v2_profile_should_be_parsed_without_error(\n        self, snmpv2c_profile, version_value\n    ):\n        mock_netbox = Mock()\n        mock_netbox.get_preferred_snmp_management_profile.return_value = snmpv2c_profile\n        snmpv2c_profile.configuration[\"version\"] = version_value\n        params = SNMPParameters.factory(mock_netbox)\n        assert params.version == 2\n\n\n@pytest.fixture\ndef snmpv3_params():\n    param = SNMPParameters(\n        version=3,\n        sec_level=SecurityLevel.AUTH_PRIV,\n        sec_name=\"foobar\",\n        auth_protocol=AuthenticationProtocol.SHA,\n        auth_password=\"secret\",\n        priv_protocol=PrivacyProtocol.AES,\n        priv_password=\"secret2\",\n    )\n    yield param\n\n\n@pytest.fixture\ndef snmpv3_params_with_context():\n    param = SNMPParameters(\n        version=3,\n        sec_level=SecurityLevel.AUTH_PRIV,\n        sec_name=\"foobar\",\n        auth_protocol=AuthenticationProtocol.SHA,\n        auth_password=\"secret\",\n        priv_protocol=PrivacyProtocol.AES,\n        priv_password=\"secret2\",\n        context_name=\"vlan100\",\n        context_engine_id=\"800000090300001234\",\n    )\n    yield param\n\n\n@pytest.fixture\ndef snmpv2c_profile():\n    profile = ManagementProfile(\n        protocol=ManagementProfile.PROTOCOL_SNMP,\n        configuration={\n            \"version\": \"2c\",\n            \"community\": \"private\",\n            \"write\": True,\n        },\n    )\n    yield profile\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/storage_test.py",
    "content": "from nav.ipdevpoll.storage import get_shadow_sort_order\nfrom nav.ipdevpoll import shadows\n\n\n# debateable whether this is a proper unit test, since it is in reality\n# testing the functional combo of NetboxInfo.get_dependencies and\n# nav.toposort.build_graph()\ndef test_netboxinfo_should_always_sort_last():\n    classes = get_shadow_sort_order()\n    assert classes[-1] is shadows.NetboxInfo\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/system_test.py",
    "content": "# ruff: noqa E501\n\nfrom unittest import TestCase\n\nfrom nav.ipdevpoll.plugins.system import parse_version\n\n\nclass SysDescrParseTests(TestCase):\n    def test_should_parse_cisco2950_sysdescr(self):\n        sysdescr = \"\"\"Cisco Internetwork Operating System Software\nIOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA11, RELEASE SOFTWARE (fc2)\nCopyright (c) 1986-2008 by cisco Systems, Inc.\nCompiled Tue 08-Jan-08 11:12 by amvarma\"\"\"\n\n        self.assertEqual(parse_version(sysdescr), \"12.1(22)EA11\")\n\n    def test_should_parse_cisco6509_sysdescr(self):\n        sysdescr = \"\"\"Cisco IOS Software, s72033_rp Software (s72033_rp-ADVIPSERVICESK9_WAN-M), Version 12.2(33)SXI4a, RELEASE SOFTWARE (fc2)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2010 by Cisco Systems, Inc.\nCompiled Fri 16-Jul-10 19:51 by p\"\"\"\n\n        self.assertEqual(parse_version(sysdescr), \"12.2(33)SXI4a\")\n\n    def test_should_parse_nortel5510_sysdescr(self):\n        sysdescr = \"\"\"Ethernet Routing Switch 5510-48T      HW:31       FW:6.0.0.8   SW:v6.1.1.017 BN:17 (c) Nortel Networks\"\"\"\n\n        self.assertEqual(parse_version(sysdescr), \"v6.1.1.017\")\n\n    def test_should_parse_virtual_hp_rack_sysdescr(self):\n        sysdescr = \"\"\"HP 1/10Gb VC-Enet Module Virtual Connect 2.34\"\"\"\n        self.assertEqual(parse_version(sysdescr), \"2.34\")\n\n    def test_should_parse_juniper_t640_sysdescr(self):\n        sysdescr = \"\"\"Juniper Networks, Inc. t640 internet router, kernel JUNOS 10.4R5.5 #0: 2011-06-14 02:02:06 UTC     builder@warth.juniper.net:/volume/build/junos/10.4/release/10.4R5.5/obj-i386/bsd/sys/compile/JUNIPER Build date: 2011-06-14 01:35:21 UTC Copyright (c) 1996\"\"\"\n\n        self.assertEqual(parse_version(sysdescr), \"10.4R5.5\")\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/timestamps_test.py",
    "content": "\"\"\"Tests for ipdevpoll's TimestampChecker utility class\"\"\"\n\nfrom mock import Mock, patch\n\nimport pytest\nimport pytest_twisted\n\nfrom nav.ipdevpoll.timestamps import TimestampChecker\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_invalid_serialized_value_should_be_interpreted_as_change():\n    ts = TimestampChecker(Mock(), Mock(), 'uptime')\n    invalid_time_pickle = 'foobar'\n    with patch(\n        'nav.models.manage.NetboxInfo.objects.get', return_value=invalid_time_pickle\n    ):\n        yield ts.load()\n        assert ts.is_changed()\n\n\n@pytest.mark.twisted\n@pytest_twisted.inlineCallbacks\ndef test_representation_inconsistencies_should_not_matter():\n    \"\"\"Tests that loaded and collected timestamps can be compared, even if the internal\n    and the persisted representations may differ between being tuples and lists.\n\n    The internal representation was always with tuples, but the new JSON-based db\n    persistence converts this to lists, since tuples don't exist in JSON.\n    \"\"\"\n    ts = TimestampChecker(Mock(), Mock(), 'sometime')\n    json_data = \"[[1559907627.0, 28245286]]\"\n    ts.collected_times = ((1559907627.0, 28245286),)\n    mock_info = Mock(value=json_data)\n    with patch('nav.models.manage.NetboxInfo.objects.get', return_value=mock_info):\n        yield ts.load()\n        assert not ts.is_changed(max_deviation=60)\n\n\n@pytest.mark.parametrize(\n    \"loaded, collected, max_deviation, expected, description\",\n    [\n        ((1559904661.0, 0), (1559904661.0, 0), 60, False, \"identical timestamps\"),\n        ((1559904661.0, 0), (1559904671.0, 1000), 60, False, \"10 seconds have passed\"),\n        (\n            (1559904661.0, 0),\n            (1559904760.0, 0),\n            100,\n            False,\n            \"deviation less than 100 seconds is acceptable\",\n        ),\n        (\n            (1559904661.0, 0),\n            (1559905661.0, 1000),\n            60,\n            True,\n            \"1000 seconds have passed, but only 10 on agent\",\n        ),\n        (\n            None,\n            (1559904671.0, 424242),\n            60,\n            True,\n            \"no previously saved timestamps were available\",\n        ),\n    ],\n)\ndef test_is_changed(loaded, collected, max_deviation, expected, description):\n    ts = TimestampChecker(Mock(), Mock(), 'sometime')\n    ts.loaded_times = [loaded] if loaded else None\n    ts.collected_times = [collected]\n    assert ts.is_changed(max_deviation=max_deviation) == expected, description\n"
  },
  {
    "path": "tests/unittests/ipdevpoll/utils_test.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for nav.ipdevpoll.utils module\"\"\"\n\nfrom nav.ipdevpoll.utils import _workaround_broken_aruba_alternate_communities\nfrom nav.mibs.types import LogicalMibInstance\n\n\nclass TestWorkaroundBrokenArubaAlternateCommunities:\n    \"\"\"Tests for _workaround_broken_aruba_alternate_communities()\"\"\"\n\n    def test_should_append_vlan_index_when_missing(self):\n        instances = [LogicalMibInstance(description=\"vlan100\", community=\"public\")]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community == \"public@100\"\n\n    def test_should_not_modify_when_already_indexed(self):\n        instances = [LogicalMibInstance(description=\"vlan100\", community=\"public@100\")]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community == \"public@100\"\n\n    def test_should_preserve_context_fields(self):\n        engine_id = bytes.fromhex(\"800000090300001234\")\n        instances = [\n            LogicalMibInstance(\n                description=\"vlan100\",\n                community=\"public\",\n                context=\"vlan-100\",\n                context_engine_id=engine_id,\n            )\n        ]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community == \"public@100\"\n        assert result[0].context == \"vlan-100\"\n        assert result[0].context_engine_id == engine_id\n\n    def test_should_not_modify_non_vlan_descriptions(self):\n        instances = [LogicalMibInstance(description=\"bridge1\", community=\"public\")]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community == \"public\"\n\n    def test_should_handle_case_insensitive_vlan_names(self):\n        instances = [\n            LogicalMibInstance(description=\"VLAN200\", community=\"public\"),\n            LogicalMibInstance(description=\"Vlan300\", community=\"public\"),\n        ]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community == \"public@200\"\n        assert result[1].community == \"public@300\"\n\n    def test_should_not_modify_when_community_is_none(self):\n        instances = [LogicalMibInstance(description=\"vlan100\", community=None)]\n\n        result = _workaround_broken_aruba_alternate_communities(instances)\n\n        assert result[0].community is None\n"
  },
  {
    "path": "tests/unittests/jwtconf_test.py",
    "content": "import datetime\nfrom mock import patch, mock_open\nfrom unittest import TestCase\nfrom nav.jwtconf import JWTConf, LocalJWTConfig\nfrom nav.config import ConfigurationError\n\n\nclass TestJWTConf(TestCase):\n    def setUp(self):\n        pass\n\n    def test_issuer_settings_include_valid_jwks_issuer(self):\n        config = \"\"\"\n            [jwks-issuer]\n            keytype=JWKS\n            aud=nav\n            key=www.example.com\n            \"\"\"\n        expected_settings = {\n            'key': 'www.example.com',\n            'type': 'JWKS',\n            'claims_options': {\n                'aud': {'values': ['nav'], 'essential': True},\n            },\n        }\n\n        def read_file_patch(self, file):\n            return \"key\"\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings['jwks-issuer'], expected_settings)\n\n    def test_issuer_settings_include_valid_pem_issuer(self):\n        config = \"\"\"\n            [pem-issuer]\n            keytype=PEM\n            aud=nav\n            key=key_path\n            \"\"\"\n        pem_key = \"PEM KEY\"\n        expected_settings = {\n            'key': pem_key,\n            'type': 'PEM',\n            'claims_options': {\n                'aud': {'values': ['nav'], 'essential': True},\n            },\n        }\n\n        def read_file_patch(self, file):\n            return pem_key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings['pem-issuer'], expected_settings)\n\n    def test_issuer_settings_include_valid_local_issuer(self):\n        config = \"\"\"\n            [nav]\n            private_key=key\n            public_key=key\n            name=nav\n            \"\"\"\n        key = \"PEM KEY\"\n        expected_settings = {\n            'key': key,\n            'type': 'PEM',\n            'claims_options': {\n                'aud': {'values': ['nav'], 'essential': True},\n                'token_type': {'values': ['access_token'], 'essential': True},\n            },\n        }\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings['nav'], expected_settings)\n\n    def test_invalid_config_for_internal_tokens_should_return_empty_dict(self):\n        config = \"\"\"\n            [wrong-section-name]\n            private_key=key\n            public_key=key\n            name=nav-issuer\n            \"\"\"\n\n        def read_file_patch(self, file):\n            return \"key\"\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings, dict())\n\n    def test_invalid_config_for_external_tokens_should_return_empty_dict(self):\n        config = \"\"\"\n            [pem-issuer]\n            keytype=INVALID\n            aud=nav\n            key=key_path\n            \"\"\"\n\n        def read_file_patch(self, file):\n            return \"key\"\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings, dict())\n\n    def test_validate_key_should_raise_error_if_key_is_empty(self):\n        jwtconf = JWTConf()\n        with self.assertRaises(ConfigurationError):\n            jwtconf._validate_key(\"\")\n\n    def test_validate_key_should_allow_non_empty_string(self):\n        key = \"key\"\n        jwtconf = JWTConf()\n        validated_key = jwtconf._validate_key(key)\n        self.assertEqual(validated_key, key)\n\n    def test_validate_audience_should_raise_error_if_audience_is_empty(self):\n        jwtconf = JWTConf()\n        with self.assertRaises(ConfigurationError):\n            jwtconf._validate_audience(\"\")\n\n    def test_validate_audience_should_allow_non_empty_string(self):\n        aud = \"key\"\n        jwtconf = JWTConf()\n        validated_aud = jwtconf._validate_key(aud)\n        self.assertEqual(validated_aud, aud)\n\n    def test_validate_type_should_raise_error_if_type_is_invalid(self):\n        jwtconf = JWTConf()\n        with self.assertRaises(ConfigurationError):\n            jwtconf._validate_type(\"invalid\")\n\n    def test_JWKS_should_be_a_valid_type(self):\n        type = \"JWKS\"\n        jwtconf = JWTConf()\n        validated_type = jwtconf._validate_type(type)\n        self.assertEqual(validated_type, type)\n\n    def test_PEM_should_be_a_valid_type(self):\n        type = \"PEM\"\n        jwtconf = JWTConf()\n        validated_type = jwtconf._validate_type(type)\n        self.assertEqual(validated_type, type)\n\n    def test_validate_issuer_should_fail_if_external_name_matches_local_name(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=issuer-name\n        [issuer-name]\n        keytype=PEM\n        aud=aud\n        key=key\n        \"\"\"\n        key = \"key_value\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                with self.assertRaises(ConfigurationError):\n                    jwtconf._validate_issuer('issuer-name')\n\n    def test_validate_issuer_should_raise_error_if_issuer_is_empty(self):\n        jwtconf = JWTConf()\n        with self.assertRaises(ConfigurationError):\n            jwtconf._validate_issuer(\"\")\n\n    def test_get_nav_private_key_returns_correct_private_key(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=issuer-name\n        \"\"\"\n        key = \"private-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                self.assertEqual(jwtconf.get_nav_private_key(), key)\n\n    def test_get_nav_public_key_returns_correct_public_key(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=issuer-name\n        \"\"\"\n        key = \"private-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                self.assertEqual(jwtconf.get_nav_public_key(), key)\n\n    def test_get_nav_name_should_raise_error_if_name_empty(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            with self.assertRaises(ConfigurationError):\n                jwtconf.get_nav_name()\n\n    def test_get_nav_name_returns_configured_name(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            self.assertEqual(jwtconf.get_nav_name(), \"nav\")\n\n    def test_missing_option_should_raise_error(self):\n        config_with_missing_keytype = \"\"\"\n            [pem-issuer]\n            aud=nav\n            key=key_path\n            \"\"\"\n\n        def read_file_patch(self, file):\n            return \"key\"\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config_with_missing_keytype):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                with self.assertRaises(ConfigurationError):\n                    jwtconf._get_settings_for_external_tokens()\n\n    def test_non_existing_file_should_raise_error(self):\n        config = \"\"\"\n            [pem-issuer]\n            aud=nav\n            key=key_path\n            \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            with self.assertRaises(ConfigurationError):\n                jwtconf._read_key_from_path(\"fakepath\")\n\n    def test_return_correct_key_if_file_exists(self):\n        jwtconf = JWTConf()\n        mock_key = \"key\"\n        with patch(\"builtins.open\", mock_open(read_data=mock_key)):\n            self.assertEqual(jwtconf._read_key_from_path(\"path\"), mock_key)\n\n    def test_file_with_permission_problems_should_raise_error(self):\n        config = \"\"\"\n            [pem-issuer]\n            aud=nav\n            key=key_path\n            \"\"\"\n        with patch(\"builtins.open\", mock_open(read_data=\"key\")) as mocked_open:\n            mocked_open.side_effect = PermissionError\n            with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n                jwtconf = JWTConf()\n                with self.assertRaises(ConfigurationError):\n                    jwtconf._read_key_from_path(\"fakepath\")\n\n    def test_empty_config_should_give_empty_issuer_settings(self):\n        config = \"\"\"\n            \"\"\"\n        expected_settings = {}\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            settings = jwtconf.get_issuers_setting()\n        self.assertEqual(settings, expected_settings)\n\n    def test_empty_config_should_give_empty_external_settings(self):\n        config = \"\"\"\n            \"\"\"\n        expected_settings = {}\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            settings = jwtconf._get_settings_for_external_tokens()\n        self.assertEqual(settings, expected_settings)\n\n    def test_empty_config_should_give_empty_local_settings(self):\n        config = \"\"\"\n            \"\"\"\n        expected_settings = {}\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            settings = jwtconf._get_settings_for_nav_issued_tokens()\n        self.assertEqual(settings, expected_settings)\n\n    def test_settings_should_include_local_and_external_settings(self):\n        config = \"\"\"\n            [nav]\n            private_key=key\n            public_key=key\n            name=local-issuer\n            [jwks-issuer]\n            keytype=JWKS\n            aud=nav\n            key=www.example.com\n            [pem-issuer]\n            keytype=PEM\n            aud=aud\n            key=key\n            \"\"\"\n\n        def read_file_patch(self, file):\n            return \"key\"\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                jwtconf = JWTConf()\n                settings = jwtconf.get_issuers_setting()\n        assert 'jwks-issuer' in settings\n        assert 'pem-issuer' in settings\n        assert 'local-issuer' in settings\n\n    def test_get_access_token_lifetime_should_return_configured_lifetime(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            self.assertEqual(\n                jwtconf.get_access_token_lifetime(), datetime.timedelta(hours=2)\n            )\n\n    def test_get_refresh_token_lifetime_should_return_configured_lifetime(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        refresh_token_lifetime=2d\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            self.assertEqual(\n                jwtconf.get_refresh_token_lifetime(), datetime.timedelta(days=2)\n            )\n\n    def test_if_lifetime_is_not_configured_then_get_access_token_lifetime_should_return_default_lifetime(  # noqa: E501\n        self,\n    ):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            self.assertEqual(\n                jwtconf.get_access_token_lifetime(),\n                jwtconf.DEFAULT_ACCESS_TOKEN_LIFETIME,\n            )\n\n    def test_if_lifetime_is_not_configured_then_get_refresh_token_lifetime_should_return_default_lifetime(  # noqa: E501\n        self,\n    ):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            jwtconf = JWTConf()\n            self.assertEqual(\n                jwtconf.get_refresh_token_lifetime(),\n                jwtconf.DEFAULT_REFRESH_TOKEN_LIFETIME,\n            )\n\n    def test_get_local_config_returns_correct_private_key(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        refresh_token_lifetime=2d\n        \"\"\"\n        key = \"private-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                local_config = JWTConf().get_local_config()\n                self.assertEqual(local_config.private_key, key)\n\n    def test_get_local_config_returns_correct_public_key(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        refresh_token_lifetime=2d\n        \"\"\"\n        key = \"public-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                local_config = JWTConf().get_local_config()\n                self.assertEqual(local_config.public_key, key)\n\n    def test_get_local_config_returns_correct_name(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        refresh_token_lifetime=2d\n        \"\"\"\n        key = \"public-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                local_config = JWTConf().get_local_config()\n                self.assertEqual(local_config.name, \"nav\")\n\n    def test_get_local_config_returns_correct_access_token_lifetime(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        refresh_token_lifetime=2d\n        \"\"\"\n        key = \"public-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                local_config = JWTConf().get_local_config()\n                self.assertEqual(\n                    local_config.access_token_lifetime, datetime.timedelta(hours=2)\n                )\n\n    def test_get_local_config_returns_correct_refresh_token_lifetime(self):\n        config = \"\"\"\n        [nav]\n        private_key=key\n        public_key=key\n        name=nav\n        access_token_lifetime=2h\n        refresh_token_lifetime=2d\n        \"\"\"\n        key = \"public-key\"\n\n        def read_file_patch(self, file):\n            return key\n\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            with patch.object(JWTConf, '_read_key_from_path', read_file_patch):\n                local_config = JWTConf().get_local_config()\n                self.assertEqual(\n                    local_config.refresh_token_lifetime, datetime.timedelta(days=2)\n                )\n\n    def test_get_local_config_returns_empty_config_when_config_is_invalid(self):\n        config = \"\"\"\n        [nav]\n        public_key=key\n        name=nav\n        access_token_lifetime=qweqwe\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            local_config = JWTConf().get_local_config()\n            self.assertEqual(local_config, LocalJWTConfig())\n\n    def test_get_local_config_returns_empty_config_when_local_tokens_are_not_configured(\n        self,\n    ):\n        config = \"\"\"\n        \"\"\"\n        with patch.object(JWTConf, 'DEFAULT_CONFIG', config):\n            local_config = JWTConf().get_local_config()\n            self.assertEqual(local_config, LocalJWTConfig())\n"
  },
  {
    "path": "tests/unittests/logs_test.py",
    "content": "\"\"\"Tests for nav.logs module\"\"\"\n\nimport os\nfrom unittest import mock\n\nimport pytest\n\nfrom nav import logs\n\n\ndef test_get_logging_yaml(valid_logging_yaml):\n    \"\"\"Tests the happy path.\n\n    The failure path is covered implicitly by many other tests.\n    \"\"\"\n    with mock.patch.dict(os.environ, {\"NAV_LOGGING_YAML\": str(valid_logging_yaml)}):\n        config = logs._get_logging_yaml()\n        assert isinstance(config, dict)\n\n\n@pytest.fixture\ndef valid_logging_yaml(tmp_path):\n    \"\"\"Provides a minimally valid logging config file in YAML format\"\"\"\n    filename = tmp_path / \"logging.yml\"\n    with open(filename, \"w\") as yaml:\n        yaml.write(\n            \"\"\"\n        version: 1\n        \"\"\"\n        )\n    yield filename\n"
  },
  {
    "path": "tests/unittests/macaddress/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/macaddress/macaddress_test.py",
    "content": "#\n# Copyright (C) 2012 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport pytest\n\nfrom nav.macaddress import MacAddress, MacPrefix\n\n\ndef test_mac_address_too_short():\n    with pytest.raises(ValueError):\n        MacAddress(\"e4:2f\")\n\n\ndef test_mac_address_too_long():\n    with pytest.raises(ValueError):\n        MacAddress(\"e4:2f:45:72:6e:76:01\")\n\n\ndef test_mac_address_wrong_parameter_type_list():\n    with pytest.raises(ValueError):\n        MacAddress([])\n\n\ndef test_mac_address_wrong_parameter_type_dict():\n    with pytest.raises(ValueError):\n        MacAddress({})\n\n\ndef test_mac_address_address_contains_illegal_value():\n    with pytest.raises(ValueError):\n        MacAddress(\"e4:2f:45:72:6e:o6\")\n\n\ndef test_mac_address_should_return_same_address_value_with_colon():\n    param = 'e42f45726e76'\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_mac_addres_as_parameter_should_return_same_address():\n    param = 'e42f45726e76'\n    ma = MacAddress(param)\n    mac_addr = MacAddress(ma)\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_return_same_address_value_with_colon():\n    param = 'e4:2f:45:72:6e:76'\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == param\n\n\ndef test_mac_address_return_same_address_value_without_dash():\n    param = 'e4-2f-45-72-6e-76'\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_return_same_address_value_without_spaces():\n    param = 'e4 2f 45 72 6e 76'\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_return_same_address_value_without_dot():\n    param = 'e42f.4572.6e76'\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_return_same_address_value_when_byte_string():\n    param = b'\\xe4\\x2f\\x45\\x72\\x6e\\x76'\n    mac_addr = MacAddress(MacAddress.from_octets(param))\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_with_byte_string_prefix_should_return_same_address():\n    param = b'\\xe4\\x2f\\x45\\x72\\x6e\\x76'\n    mac_addr = MacAddress(MacAddress.from_octets(param))\n    assert str(mac_addr) == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_to_string_without_delimiter_return_same_address():\n    param = 'e42f.4572.6e76'\n    mac_addr = MacAddress(param)\n    assert mac_addr.to_string() == 'e42f45726e76'\n\n\ndef test_mac_address_to_string_with_colon_delimiter_return_same_address():\n    param = 'e4-2f-45-72-6e76'\n    mac_addr = MacAddress(param)\n    assert mac_addr.to_string(':') == 'e4:2f:45:72:6e:76'\n\n\ndef test_mac_address_to_string_with_dash_delimiter_return_same_address():\n    param = 'e42f.4572.6e76'\n    mac_addr = MacAddress(param)\n    assert mac_addr.to_string('-') == 'e4-2f-45-72-6e-76'\n\n\ndef test_mac_address_to_string_with_dot_delimiter_return_same_address():\n    param = 'e4:2f:45:72:6e:76'\n    mac_addr = MacAddress(param)\n    assert mac_addr.to_string('.') == 'e42f.4572.6e76'\n\n\ndef test_mac_address_param_as_int_should_return_same_in_hex():\n    param = 11111110000\n    mac_addr = MacAddress(param)\n    assert str(mac_addr) == '00:02:96:46:15:70'\n\n\ndef test_mac_addresses_are_equal():\n    mac_addr1 = MacAddress('01:23:45:67:89:ab')\n    mac_addr2 = MacAddress('01:23:45:67:89:ab')\n    assert mac_addr1 == mac_addr2\n\n\ndef test_mac_addresses_hash_the_same():\n    mac_addr1 = MacAddress('01:23:45:67:89:ab')\n    mac_addr2 = MacAddress('01:23:45:67:89:ab')\n    assert hash(mac_addr1) == hash(mac_addr2)\n\n\ndef test_mac_addresses_hash_not_the_same():\n    mac_addr1 = MacAddress('01:23:45:67:89:ab')\n    mac_addr2 = MacAddress('01:23:45:67:89:ac')\n    assert hash(mac_addr1) != hash(mac_addr2)\n\n\ndef test_mac_addresses_are_comparable():\n    mac_addr1 = MacAddress('01:23:45:67:89:ab')\n    mac_addr2 = MacAddress('01:23:45:67:89:cc')\n    assert mac_addr1 < mac_addr2\n    assert mac_addr2 > mac_addr1\n    assert mac_addr1 <= mac_addr2\n    assert mac_addr2 >= mac_addr1\n    assert mac_addr1 != mac_addr2\n\n\ndef test_mac_address_should_compare_with_int():\n    mac = MacAddress('01:23:45:67:89:ab')\n    assert mac != 5\n\n\ndef test_mac_address_should_compare_with_string():\n    mac = MacAddress('01:23:45:67:89:ab')\n    assert mac == '01:23:45:67:89:ab'\n    assert mac != 'blah'\n\n\ndef test_mac_address_with_byte_string_prefix_should_return_zero_padded_addr():\n    param = b'\\xe4\\x2f\\x45\\x72'\n    mac_addr = MacAddress.from_octets(param)\n    assert str(mac_addr) == '00:00:e4:2f:45:72'\n\n\ndef test_macprefix_with_colon_prefix_should_return_same_prefix():\n    param = 'e4:2f:45:f'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr) == 'e4:2f:45:f'\n\n\ndef test_macprefix_with_dash_prefix_should_return_same_prefix():\n    param = 'e4-2f-45-f'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr) == 'e4:2f:45:f'\n\n\ndef test_macprefix_with_dot_prefix_should_return_same_prefix():\n    param = 'e42f.45f'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr) == 'e4:2f:45:f'\n\n\ndef test_macprefix_should_return_zero_padded_when_address_start_with_zero():\n    param = '01:01:01'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr) == '01:01:01'\n\n\ndef test_macprefix_should_return_zero_padded_when_address_start_with_5_zeros():\n    param = '00:00:01'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr) == '00:00:01'\n\n\ndef test_macprefix_has_correct_length_with_prefix_length_six():\n    param = 'e4:2f:45'\n    mac_addr = MacPrefix(param)\n    assert len(mac_addr) == 16777216\n\n\ndef test_macprefix_has_correct_length_with_prefix_length_seven():\n    param = 'e4-2f-45-3'\n    mac_addr = MacPrefix(param)\n    assert len(mac_addr) == 1048576\n\n\ndef test_macprefix_has_correct_length_with_prefix_length_eigth():\n    param = 'e42f.453d'\n    mac_addr = MacPrefix(param)\n    assert len(mac_addr) == 65536\n\n\ndef test_macprefix_has_correct_length_with_full_length_address():\n    param = 'e4:2f:45:72:6e:76'\n    mac_addr = MacPrefix(param)\n    assert len(mac_addr) == 1\n\n\ndef test_macprefix_should_return_correct_value_with_zero_key():\n    param = 'e42f.45'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr[0]) == 'e4:2f:45:00:00:00'\n\n\ndef test_macprefix_should_return_correct_value_with_key_equal_256():\n    param = 'e4:2f:45:3d'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr[157]) == 'e4:2f:45:3d:00:9d'\n\n\ndef test_macprefix_should_return_correct_value_with_last_key():\n    param = 'e4-2f-45'\n    mac_addr = MacPrefix(param)\n    assert str(mac_addr[-1]) == 'e4:2f:45:ff:ff:ff'\n"
  },
  {
    "path": "tests/unittests/metrics/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/metrics/data_test.py",
    "content": "import pytest\nfrom mock import patch\nfrom io import BytesIO\n\nfrom nav.metrics.errors import GraphiteUnreachableError\nfrom nav.metrics.data import get_metric_data\n\n\ndef test_get_metric_data_without_target_should_return_empty_list():\n    assert get_metric_data(None) == []\n\n\ndef test_get_metric_data_with_no_graphite_server_should_fail():\n    target = \"nav.devices.example-sw_example_org.ports.1.ifInOctets\"\n    with patch('nav.metrics.data.CONFIG') as config:\n        config.get.return_value = 'http://localhost:65042/'\n        with pytest.raises(GraphiteUnreachableError):\n            get_metric_data(target)\n\n\ndef test_get_metric_data_can_parse_response():\n    target = \"nav.devices.example-sw_example_org.ports.1.ifInOctets\"\n    with patch('nav.metrics.data.urlopen') as urlopen:\n        urlopen.return_value = BytesIO(b'[1]')\n        assert get_metric_data(target) == [1]\n"
  },
  {
    "path": "tests/unittests/metrics/graphs_test.py",
    "content": "from mock import patch\nimport pytest\n\nfrom nav.metrics.graphs import extract_series_name, translate_serieslist_to_regex\nfrom nav.metrics.graphs import get_sensor_meta\nfrom nav.models.manage import Sensor\n\n\ndef test_get_sensor_meta_should_not_crash_on_missing_human_readable():\n    sensor = Sensor(human_readable=None)\n\n    with patch('nav.metrics.lookup.lookup') as lookup:\n        lookup.return_value = sensor\n        meta = get_sensor_meta('bogus')\n        assert meta, \"result is empty\"\n\n\nseries_name_data = (\n    (\n        'scaleToSeconds(nonNegativeDerivative(scale(nav.devices.example-sw_example_org.ports.Po3.ifOutOctets,8)),1)',\n        'nav.devices.example-sw_example_org.ports.Po3.ifOutOctets',\n    ),\n    ('scale(nav.something.*.{in,out}data, 8)', 'nav.something.*.{in,out}data'),\n)\n\n\n@pytest.mark.parametrize(\"series, expected\", series_name_data)\ndef test_extract_series_name(series, expected):\n    assert extract_series_name(series) == expected\n\n\ntranslate_data = (\n    ('plain.jane', ['plain.jane'], ['plain.joe']),\n    (\n        'far.out.in.the.*.western.spiral.{arm,leg}',\n        [\n            'far.out.in.the.uncharted.western.spiral.arm',\n            'far.out.in.the.charted.western.spiral.leg',\n        ],\n        ['far.out.in.the.forgotten.western.spiral.neck'],\n    ),\n    ('one.two.thre?', ['one.two.three', 'one.two.threx'], ['one.two.throws']),\n)\n\n\n@pytest.mark.parametrize(\"series,matches,nonmatches\", translate_data)\ndef test_translate_serieslist_to_regex(series, matches, nonmatches):\n    pattern = translate_serieslist_to_regex(series)\n    for string in matches:\n        assert pattern.match(string), \"%s doesn't match %s\" % (string, series)\n\n    for string in nonmatches:\n        assert not pattern.match(string), \"%s matches %s\" % (string, series)\n"
  },
  {
    "path": "tests/unittests/metrics/names_test.py",
    "content": "import pytest\nfrom unittest import TestCase\nfrom unittest.mock import patch\nfrom nav.metrics.names import (\n    join_series,\n    escape_metric_name,\n    get_expanded_nodes,\n    safe_name,\n)\n\n\nclass MetricNamingTests(TestCase):\n    def test_join_series(self):\n        series1 = 'nav.zaphod.banana'\n        series2 = 'nav.arthur.banana'\n        result = join_series([series1, series2])\n        self.assertEqual(result, 'nav.{zaphod,arthur}.banana')\n\n    def test_join_single_series_should_return_same(self):\n        series = 'oh.freddled.gruntbuggly'\n        self.assertEqual(join_series([series]), series)\n\n\nclass TestGetExpandedNodes:\n    def test_when_valid_response_should_return_results(self):\n        raw_response = {\n            \"results\": [\n                \"nav.foo.1\",\n                \"nav.foo.2\",\n                \"nav.foo.3\",\n                \"nav.bar.baz\",\n            ]\n        }\n\n        with patch(\"nav.metrics.names.raw_metric_query\", return_value=raw_response):\n            assert get_expanded_nodes(\"whatever.path\") == raw_response[\"results\"]\n\n    @pytest.mark.parametrize(\"raw_response\", [[], {}, \"foo\", \"\", {\"results\": \"foo\"}])\n    def test_when_invalid_response_should_return_empty_list(self, raw_response):\n        with patch(\"nav.metrics.names.raw_metric_query\", return_value=raw_response):\n            assert get_expanded_nodes(\"whatever.path\") == []\n\n\n@pytest.mark.parametrize(\n    \"test_input,expected\",\n    [\n        (None, None),\n        ('', ''),\n        ('foobar', 'foobar'),\n        ('strangeness\\x00', 'strangeness'),\n        ('dot.warner', 'dot_warner'),\n        ('ge-1/0/0.1', 'ge-1_0_0_1'),\n        ('temperature [chassis 1]', 'temperature__chassis_1_'),\n        ('something in (parens)', 'something_in__parens_'),\n        ('temperature, top', 'temperature__top'),\n    ],\n)\nclass TestEscapeMetricName:\n    def test_should_escape_by_default(self, test_input, expected):\n        assert escape_metric_name(test_input) == expected\n\n    def test_should_not_escape_safe_names(self, test_input, expected):\n        assert escape_metric_name(safe_name(test_input)) == str(test_input)\n        assert escape_metric_name(str(safe_name(test_input))) == str(test_input)\n"
  },
  {
    "path": "tests/unittests/metrics/templates_test.py",
    "content": "import pytest\n\nfrom nav.metrics.names import safe_name\nfrom nav.metrics.templates import metric_path_for_dhcp\n\n\n@pytest.mark.parametrize(\n    \"test_input,expected\",\n    [\n        (\n            dict(\n                allocation_type=\"range\",\n                ip_version=4,\n                server_name=\"foo\",\n                group_name=\"bar\",\n                group_name_source=\"custom_groups\",\n                first_ip=\"192.0.2.0\",\n                last_ip=\"192.0.2.9\",\n                metric_name=\"baz\",\n            ),\n            \"nav.dhcp.servers.foo.range.custom_groups.bar.4.192_0_2_0.192_0_2_9.baz\",\n        ),\n        (\n            dict(\n                allocation_type=\"range\",\n                ip_version=4,\n                server_name=\"foo\",\n                group_name=\"bar\",\n                group_name_source=\"custom_groups\",\n                first_ip=safe_name(\"192.0.2.0\"),\n                last_ip=safe_name(\"192.0.2.9\"),\n                metric_name=\"baz\",\n            ),\n            \"nav.dhcp.servers.foo.range.custom_groups.bar.4.192.0.2.0.192.0.2.9.baz\",\n        ),\n        (\n            dict(\n                allocation_type=\"range\",\n                ip_version=4,\n                server_name=\"foo\",\n                group_name=\"bar\",\n                group_name_source=\"custom_groups\",\n                first_ip=\"*\",\n                last_ip=\"*\",\n                metric_name=\"baz\",\n            ),\n            \"nav.dhcp.servers.foo.range.custom_groups.bar.4._._.baz\",\n        ),\n        (\n            dict(\n                allocation_type=\"range\",\n                ip_version=4,\n                server_name=\"foo\",\n                group_name=\"bar\",\n                group_name_source=\"custom_groups\",\n                first_ip=safe_name(\"*\"),\n                last_ip=safe_name(\"*\"),\n                metric_name=\"baz\",\n            ),\n            \"nav.dhcp.servers.foo.range.custom_groups.bar.4.*.*.baz\",\n        ),\n        (\n            dict(\n                allocation_type=\"range*\",\n                ip_version=\"4!\",\n                server_name=\"foo?\",\n                group_name=\"bar{\",\n                group_name_source=\"special_groups}\",\n                first_ip=\"*_*_0_0\",\n                last_ip=\"*.*.0.1\",\n                metric_name=\"baz baz!\",\n            ),\n            \"nav.dhcp.servers.foo_.range_.special_groups_.bar_.4_.____0_0.____0_1.baz_baz_\",\n        ),\n        (\n            dict(\n                allocation_type=safe_name(\"range*\"),\n                ip_version=safe_name(\"4!\"),\n                server_name=safe_name(\"foo?\"),\n                group_name=safe_name(\"bar{\"),\n                group_name_source=safe_name(\"special_groups}\"),\n                first_ip=safe_name(\"*_*_0_0\"),\n                last_ip=safe_name(\"*.*.0.1\"),\n                metric_name=safe_name(\"baz baz!\"),\n            ),\n            \"nav.dhcp.servers.foo?.range*.special_groups}.bar{.4!.*_*_0_0\"\n            \".*.*.0.1.baz baz!\",\n        ),\n    ],\n)\ndef test_metric_path_for_dhcp(test_input, expected):\n    assert metric_path_for_dhcp(**test_input) == expected\n"
  },
  {
    "path": "tests/unittests/metrics/thresholds_test.py",
    "content": "\"\"\"Unit tests for nav.metrics.thresholds\"\"\"\n\nfrom nav.metrics.thresholds import ThresholdEvaluator\n\n\nclass TestThatThresholdEvaluator:\n    def test_evaluates_zero_as_less_than_positive_number(self):\n        \"\"\"A regression test for #2447\"\"\"\n        t = ThresholdEvaluator('data.*')\n        t.result = {\n            'data.good': {'value': 200.0},\n            'data.zero': {'value': 0.0},\n        }\n\n        assert ('data.zero', 0.0) in t.evaluate('<120')\n\n    def test_evaluates_zero_as_greater_than_negative_number(self):\n        \"\"\"A regression test for #2447\"\"\"\n        t = ThresholdEvaluator('data.*')\n        t.result = {\n            'data.good': {'value': -50.0},\n            'data.zero': {'value': 0.0},\n        }\n\n        assert ('data.zero', 0.0) in t.evaluate('>-120')\n"
  },
  {
    "path": "tests/unittests/mibs/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/mibs/entity_mib_test.py",
    "content": "from unittest import TestCase\nfrom nav.mibs.entity_mib import EntityTable\n\n\nclass TestEntityMIB(TestCase):\n    def setUp(self):\n        self.entity_table = EntityTable(\n            {\n                1: {\n                    'entPhysicalDescr': 'Transceiver Port',\n                    'entPhysicalContainedIn': 0,\n                    'entPhysicalClass': 'port',\n                    'entPhysicalSerialNum': '',\n                    'entPhysicalIsFRU': False,\n                    0: 1,\n                },\n                2: {\n                    'entPhysicalDescr': 'Transceiver Port Container',\n                    'entPhysicalContainedIn': 1,\n                    'entPhysicalClass': 'container',\n                    'entPhysicalSerialNum': '',\n                    'entPhysicalIsFRU': False,\n                    0: 2,\n                },\n            }\n        )\n\n    def test_module_is_module(self):\n        module = {\n            'entPhysicalDescr': 'Chassis',\n            'entPhysicalContainedIn': 1,\n            'entPhysicalClass': 'module',\n            'entPhysicalSerialNum': '1',\n            'entPhysicalIsFRU': True,\n        }\n\n        self.assertTrue(EntityTable.is_module(self.entity_table, module))\n\n    def test_transceiver_is_not_module(self):\n        transceiver = {\n            'entPhysicalDescr': 'Transceiver',\n            'entPhysicalContainedIn': 2,\n            'entPhysicalClass': 'module',\n            'entPhysicalSerialNum': '1',\n            'entPhysicalIsFRU': True,\n        }\n\n        self.assertFalse(EntityTable.is_module(self.entity_table, transceiver))\n\n    def test_sensor_is_not_module(self):\n        sensor = {\n            'entPhysicalDescr': 'Sensor',\n            'entPhysicalContainedIn': 1,\n            'entPhysicalClass': 'sensor',\n            'entPhysicalSerialNum': '',\n            'entPhysicalIsFRU': False,\n        }\n\n        self.assertFalse(EntityTable.is_module(self.entity_table, sensor))\n\n    def test_not_FRU_is_not_module(self):\n        sensor = {\n            'entPhysicalDescr': 'Chassis',\n            'entPhysicalContainedIn': 1,\n            'entPhysicalClass': 'module',\n            'entPhysicalSerialNum': '1',\n            'entPhysicalIsFRU': False,\n        }\n\n        self.assertFalse(EntityTable.is_module(self.entity_table, sensor))\n\n    def test_entity_without_serial_number_is_not_module(self):\n        sensor = {\n            'entPhysicalDescr': 'Chassis',\n            'entPhysicalContainedIn': 1,\n            'entPhysicalClass': 'module',\n            'entPhysicalSerialNum': '',\n            'entPhysicalIsFRU': True,\n        }\n\n        self.assertFalse(EntityTable.is_module(self.entity_table, sensor))\n"
  },
  {
    "path": "tests/unittests/mibs/lldp_mib_test.py",
    "content": "import pytest\nfrom nav.mibs.lldp_mib import LLDPMib\n\n\ndef test_broken_remote_table_result_should_be_detected(\n    table_with_too_short_index, table_with_too_long_index\n):\n    assert LLDPMib._is_remote_table_index_broken(table_with_too_short_index)\n    assert LLDPMib._is_remote_table_index_broken(table_with_too_long_index)\n\n\ndef test_ok_remote_table_result_should_be_detected(ok_remote_table):\n    assert not LLDPMib._is_remote_table_index_broken(ok_remote_table)\n\n\n#\n# Fixtures go here\n#\n\n\n@pytest.fixture\ndef table_with_too_short_index():\n    return {index: {0: index} for index in ((1000,), (1002,))}\n\n\n@pytest.fixture\ndef table_with_too_long_index():\n    return {index: {0: index} for index in ((0, 1000, 2, 3), (0, 1002, 2, 3))}\n\n\n@pytest.fixture\ndef ok_remote_table():\n    return {index: {0: index} for index in ((0, 1000, 2), (0, 1002, 2))}\n"
  },
  {
    "path": "tests/unittests/mibs/mibretriever_test.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for nav.mibs.mibretriever module\"\"\"\n\nfrom unittest.mock import Mock\n\nfrom nav.ipdevpoll.snmp.common import SNMPParameters\nfrom nav.mibs.mibretriever import MultiMibMixIn\nfrom nav.mibs.types import LogicalMibInstance\n\n\nclass TestMultiMibMixInGetAlternateAgent:\n    \"\"\"Tests for MultiMibMixIn._get_alternate_agent()\"\"\"\n\n    def test_should_use_community_for_snmpv2(self):\n        agent = Mock()\n        agent.community = \"public\"\n        agent.ip = \"10.0.0.1\"\n        agent.port = 161\n        agent.snmp_parameters = SNMPParameters(version=2, community=\"public\")\n\n        mixin = MultiMibMixIn(agent, [])\n        instance = LogicalMibInstance(\n            description=\"vlan100\", community=\"public@100\", context=\"vlan-100\"\n        )\n\n        alt_agent = mixin._get_alternate_agent(instance)\n\n        assert alt_agent.snmp_parameters.community == \"public@100\"\n        assert alt_agent.snmp_parameters.context_name is None\n\n    def test_should_use_context_for_snmpv3(self):\n        agent = Mock()\n        agent.community = \"public\"\n        agent.ip = \"10.0.0.1\"\n        agent.port = 161\n        agent.snmp_parameters = SNMPParameters(version=3, sec_name=\"user\")\n\n        mixin = MultiMibMixIn(agent, [])\n        instance = LogicalMibInstance(\n            description=\"vlan100\", community=\"public@100\", context=\"vlan-100\"\n        )\n\n        alt_agent = mixin._get_alternate_agent(instance)\n\n        assert alt_agent.snmp_parameters.context_name == \"vlan-100\"\n        # community should remain unchanged for v3\n        assert alt_agent.snmp_parameters.community == \"public\"\n\n    def test_should_include_context_engine_id_for_snmpv3_when_provided(self):\n        agent = Mock()\n        agent.community = \"public\"\n        agent.ip = \"10.0.0.1\"\n        agent.port = 161\n        agent.snmp_parameters = SNMPParameters(version=3, sec_name=\"user\")\n\n        mixin = MultiMibMixIn(agent, [])\n        engine_id = bytes.fromhex(\"800000090300001234\")\n        instance = LogicalMibInstance(\n            description=\"vlan100\",\n            community=\"public@100\",\n            context=\"vlan-100\",\n            context_engine_id=engine_id,\n        )\n\n        alt_agent = mixin._get_alternate_agent(instance)\n\n        assert alt_agent.snmp_parameters.context_engine_id == \"800000090300001234\"\n\n    def test_should_not_include_context_engine_id_when_not_provided(self):\n        agent = Mock()\n        agent.community = \"public\"\n        agent.ip = \"10.0.0.1\"\n        agent.port = 161\n        agent.snmp_parameters = SNMPParameters(version=3, sec_name=\"user\")\n\n        mixin = MultiMibMixIn(agent, [])\n        instance = LogicalMibInstance(\n            description=\"vlan100\", community=\"public@100\", context=\"vlan-100\"\n        )\n\n        alt_agent = mixin._get_alternate_agent(instance)\n\n        assert alt_agent.snmp_parameters.context_engine_id is None\n\n    def test_should_copy_protocol_from_base_agent(self):\n        agent = Mock()\n        agent.community = \"public\"\n        agent.ip = \"10.0.0.1\"\n        agent.port = 161\n        agent.protocol = Mock()\n        agent.snmp_parameters = SNMPParameters(version=2, community=\"public\")\n\n        mixin = MultiMibMixIn(agent, [])\n        instance = LogicalMibInstance(description=\"vlan100\", community=\"public@100\")\n\n        alt_agent = mixin._get_alternate_agent(instance)\n\n        assert alt_agent.protocol is agent.protocol\n"
  },
  {
    "path": "tests/unittests/mibs/qbridge_mib_test.py",
    "content": "from mock import Mock, patch\nfrom twisted.internet.defer import succeed\nfrom nav.mibs.qbridge_mib import QBridgeMib\n\n\ndef test_get_vlan_static_names_should_strip_nullbytes():\n    mib = QBridgeMib(Mock())\n    with patch('nav.mibs.qbridge_mib.QBridgeMib.retrieve_column') as retrieve:\n        retrieve.return_value = succeed(\n            {(1,): \"normal\", (2,): \"bad\\x00\", (3,): \"\\x00crazy\\x00\"}\n        )\n        deferred = mib.get_vlan_static_names()\n        result = deferred.result\n\n    assert \"bad\" in result.values()\n    assert \"crazy\" in result.values()\n"
  },
  {
    "path": "tests/unittests/mibs/types_test.py",
    "content": "#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for nav.mibs.types module\"\"\"\n\nfrom nav.mibs.types import LogicalMibInstance\n\n\nclass TestLogicalMibInstance:\n    \"\"\"Tests for LogicalMibInstance dataclass\"\"\"\n\n    def test_should_have_default_none_for_context(self):\n        instance = LogicalMibInstance(description=\"vlan1\", community=\"public@1\")\n        assert instance.context is None\n\n    def test_should_have_default_none_for_context_engine_id(self):\n        instance = LogicalMibInstance(description=\"vlan1\", community=\"public@1\")\n        assert instance.context_engine_id is None\n\n    def test_should_accept_context_parameter(self):\n        instance = LogicalMibInstance(\n            description=\"vlan1\", community=\"public@1\", context=\"vlan-1\"\n        )\n        assert instance.context == \"vlan-1\"\n\n    def test_should_accept_context_engine_id_parameter(self):\n        engine_id = bytes.fromhex(\"800000090300001234\")\n        instance = LogicalMibInstance(\n            description=\"vlan1\",\n            community=\"public@1\",\n            context=\"vlan-1\",\n            context_engine_id=engine_id,\n        )\n        assert instance.context_engine_id == engine_id\n\n    def test_should_be_hashable_for_set_operations(self):\n        instance1 = LogicalMibInstance(description=\"vlan1\", community=\"public@1\")\n        instance2 = LogicalMibInstance(description=\"vlan1\", community=\"public@1\")\n        instance3 = LogicalMibInstance(description=\"vlan2\", community=\"public@2\")\n\n        instances = {instance1, instance2, instance3}\n        assert len(instances) == 2\n\n    def test_equal_instances_should_be_equal(self):\n        instance1 = LogicalMibInstance(\n            description=\"vlan1\", community=\"public@1\", context=\"ctx\"\n        )\n        instance2 = LogicalMibInstance(\n            description=\"vlan1\", community=\"public@1\", context=\"ctx\"\n        )\n        assert instance1 == instance2\n\n    def test_different_instances_should_not_be_equal(self):\n        instance1 = LogicalMibInstance(description=\"vlan1\", community=\"public@1\")\n        instance2 = LogicalMibInstance(description=\"vlan2\", community=\"public@2\")\n        assert instance1 != instance2\n\n    def test_can_access_fields_by_name(self):\n        instance = LogicalMibInstance(\n            description=\"desc\",\n            community=\"comm\",\n            context=\"ctx\",\n            context_engine_id=b\"\\x00\\x01\",\n        )\n        assert instance.description == \"desc\"\n        assert instance.community == \"comm\"\n        assert instance.context == \"ctx\"\n        assert instance.context_engine_id == b\"\\x00\\x01\"\n"
  },
  {
    "path": "tests/unittests/models/event_test.py",
    "content": "from nav.models.event import (\n    EventMixIn,\n    ThresholdEvent,\n    EventQueue,\n    UnknownEventSubject,\n)\nfrom nav.models.manage import Interface\nfrom mock import Mock, patch\nimport pytest\n\n\nclass TestEventMixIn(object):\n    def test_subidless_netbox_event_should_return_netbox_subject(self, event):\n        event.event_type_id = 'boxState'\n\n        assert event.get_subject() is event.netbox\n\n    def test_linkstate_event_should_return_interface_subject(self, event):\n        event.event_type_id = 'linkState'\n        event.subid = '42'\n\n        expected_interface = Mock()\n        with patch(\n            \"nav.models.manage.Interface.objects.get\",\n            return_value=expected_interface,\n        ):\n            assert event.get_subject() is expected_interface\n\n    def test_thresholdstate_event_should_return_thresholdevent_object(self, event):\n        event.event_type_id = 'thresholdState'\n        event.subid = '42:some.random.metric'\n\n        class MockedThresholdEvent(object):\n            def __init__(self, *args, **kwargs):\n                pass\n\n        with patch(\"nav.models.event.ThresholdEvent\", MockedThresholdEvent):\n            assert isinstance(event.get_subject(), MockedThresholdEvent)\n\n    def test_service_maintenance_event_should_return_service(self, event):\n        event.event_type_id = 'maintenanceState'\n        event.varmap = {\n            EventQueue.STATE_START: {\n                'service': 'http',\n            }\n        }\n        event.subid = '42'\n\n        expected_service = Mock()\n        with patch(\n            \"nav.models.service.Service.objects.get\",\n            return_value=expected_service,\n        ):\n            assert event.get_subject() is expected_service\n\n    def test_non_existent_subid_reference_should_return_unknown_event_subject(\n        self,\n        event,\n    ):\n        event.event_type_id = 'linkState'\n        event.subid = '42'\n\n        with patch(\n            \"nav.models.manage.Interface.objects.get\",\n            side_effect=Interface.DoesNotExist(),\n        ):\n            assert isinstance(event.get_subject(), UnknownEventSubject)\n\n    def test_netboxless_event_should_return_device_subject(\n        self,\n        event,\n    ):\n        event.event_type_id = 'boxState'\n        event.netbox = None\n\n        assert event.get_subject() is event.device\n\n    def test_netbox_and_deviceless_event_should_return_unknown_event_subject(\n        self,\n        event,\n    ):\n        event.event_type_id = 'boxState'\n        event.netbox = None\n        event.device = None\n\n        assert isinstance(event.get_subject(), UnknownEventSubject)\n\n\ndef test_thresholdevent_should_lookup_thresholdrule(event):\n    event.event_type_id = 'thresholdState'\n    expected_metric = 'a.random.metric'\n    event.subid = '42:' + expected_metric\n\n    expected_rule = Mock()\n    with patch(\n        \"nav.models.thresholds.ThresholdRule.objects.get\",\n        return_value=expected_rule,\n    ):\n        threvent = ThresholdEvent(event)\n        assert threvent.rule is expected_rule\n        assert threvent.metric == expected_metric\n\n\n#\n# Fixtures\n#\n\n\n@pytest.fixture\ndef event():\n    e = EventMixIn()\n    e.event_type_id = None\n    e.netbox = object()\n    e.device = object()\n    e.subid = None\n    return e\n"
  },
  {
    "path": "tests/unittests/models/fields_test.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom datetime import datetime as dt\nfrom decimal import Decimal\nimport pickle\n\nfrom django.core import exceptions\nfrom django.db import connection\n\nimport pytest\n\nfrom nav.models.fields import CIDRField\nfrom nav.models.fields import DateTimeInfinityField\nfrom nav.models.fields import DictAsJsonField\nfrom nav.models.fields import LegacyGenericForeignKey\nfrom nav.models.fields import PointField\n\n\nclass TestCIDRField(object):\n    def test_to_python_empty(self):\n        falsey = (None, '', 0, False, [], {}, set(), 0.0)\n        field = CIDRField()\n        for value in falsey:\n            result = field.to_python(value)\n            assert result == value\n\n    def test_to_python_valid_cidr(self):\n        field = CIDRField()\n        cidr4 = '192.168.0.0/23'\n        result4 = field.to_python(cidr4)\n        assert cidr4 == result4\n        cidr6 = '1234:dead:beef::/64'\n        result6 = field.to_python(cidr6)\n        assert cidr6 == result6\n\n    def test_to_python_valid_ip(self):\n        field = CIDRField()\n        ip4 = '192.168.0.0'\n        result4 = field.to_python(ip4)\n        assert ip4 == result4\n        bip4 = b'192.168.0.0'\n        bresult4 = field.to_python(bip4)\n        assert ip4 == bresult4\n        ip6 = '1234:dead:beef::63'\n        result6 = field.to_python(ip6)\n        assert ip6 == result6\n        bip6 = b'1234:dead:beef::63'\n        bresult6 = field.to_python(bip6)\n        assert ip6 == bresult6\n\n    def test_to_python_invalid(self):\n        field = CIDRField()\n        values = ('333.222.999.0', 'blåbærsyltetøy', 300, 3.1415, [True])\n        for value in values:\n            with pytest.raises(exceptions.ValidationError):\n                field.to_python(value)\n\n    def test_to_python_seemingly_valid(self):\n        # IPY works on CIDRs for networks, not hosts\n        field = CIDRField()\n        ip6 = '1234:dead:beef::63/23'\n        with pytest.raises(exceptions.ValidationError):\n            field.to_python(ip6)\n\n\nclass TestDateTimeInfinityField(object):\n    def test_get_db_prep_value_infinity(self):\n        field = DateTimeInfinityField()\n        result_min = field.get_db_prep_value(dt.min, connection)\n        assert result_min == '-infinity'\n        result_max = field.get_db_prep_value(dt.max, connection)\n        assert result_max == 'infinity'\n\n    def test_get_db_prep_value_prepared_other(self):\n        field = DateTimeInfinityField()\n        test_val = dt(2018, 3, 5)\n        result = field.get_db_prep_value(test_val, connection, prepared=True)\n\n        # The actual result here will vary with Django versions and which\n        # database engine has been selected in the Django settings!\n        expected = super(DateTimeInfinityField, field).get_db_prep_value(\n            test_val, connection, prepared=True\n        )\n\n        assert result == expected\n\n    def test_get_db_prep_value_unprepared_other(self):\n        field = DateTimeInfinityField()\n        test_val = dt(2018, 3, 5)\n        result = field.get_db_prep_value(test_val, connection, prepared=False)\n\n        # The actual result here will vary with Django versions and which\n        # database engine has been selected in the Django settings!\n        expected = super(DateTimeInfinityField, field).get_db_prep_value(\n            test_val, connection, prepared=False\n        )\n\n        assert result == expected\n\n\nclass TestDictAsJsonField(object):\n    def test_to_python_dict(self):\n        field = DictAsJsonField()\n        value = {'a': 'b'}\n        result = field.to_python(value)\n        assert result == value\n\n    def test_to_python_json(self):\n        field = DictAsJsonField()\n        value = '{\"a\": \"b\"}'\n        result = field.to_python(value)\n        assert result == {\"a\": \"b\"}\n        value = '[1, 2, 3]'\n        result = field.to_python(value)\n        assert result == [1, 2, 3]\n        value = b'[1, 2, 3]'\n        result = field.to_python(value)\n        assert result == [1, 2, 3]\n\n    def test_to_python_pickle(self):\n        field = DictAsJsonField()\n        orig_value = 2\n        value = pickle.dumps(orig_value, protocol=1)\n        result = field.to_python(value)\n        assert result == orig_value\n\n    def test_to_python_pickle_str(self):\n        # Github issue #2085\n        # Not all pickles can be converted to Py3 str at all so use an actual\n        # production value\n        field = DictAsJsonField()\n        orig_value = {'refresh_interval': 600000}\n        value = \"(dp0\\nS'refresh_interval'\\np1\\nI600000\\ns.\"\n        result = field.to_python(value)\n        assert result == orig_value\n\n    def test_get_prep_value_empty(self):\n        field = DictAsJsonField()\n        result = field.get_prep_value(None)\n        assert result is None\n\n    def test_get_prep_value_filled(self):\n        field = DictAsJsonField()\n        result = field.get_prep_value({'a': 'b'})\n        assert result == '{\"a\": \"b\"}'\n\n\nclass TestLegacyGenericForeignKey(object):\n    def test_get_model_class_unknown_model(self):\n        mc = LegacyGenericForeignKey.get_model_class('doesnotexistindb')\n        assert mc is None\n\n    def test_get_model_class_known_model(self):\n        # use existing class\n        mc = LegacyGenericForeignKey.get_model_class('subsystem')\n        assert bool(mc)\n\n\nclass TestPointField(object):\n    def test_to_python_from_string(self):\n        expected_point = (Decimal(\"1.2\"), Decimal(\"3.4\"))\n        point_string = \"(1.2, 3.4)\"\n        field = PointField()\n        point = field.to_python(point_string)\n        assert expected_point == point\n\n    def get_db_prep_value(self):\n        expected_db_string = \"(7.1,5.12)\"\n        point = (Decimal(\"7.1\"), Decimal(\"5.12\"))\n        field = PointField()\n        db_string = field.get_db_prep_value(point)\n        assert expected_db_string == db_string\n"
  },
  {
    "path": "tests/unittests/models/jwtrefreshtoken_test.py",
    "content": "from datetime import datetime, timedelta\nfrom unittest.mock import patch\n\nfrom nav.models.api import JWTRefreshToken\n\n\nclass TestIsActive:\n    def test_when_token_activates_in_the_future_it_should_return_false(self):\n        now = datetime.now()\n        token = JWTRefreshToken(\n            name=\"testtoken\",\n            hash=\"dummyhash\",\n            expires=now + timedelta(hours=1),\n            activates=now + timedelta(hours=1),\n        )\n        assert not token.is_active()\n\n    def test_when_token_expired_in_the_past_it_should_return_false(self):\n        now = datetime.now()\n        token = JWTRefreshToken(\n            name=\"testtoken\",\n            hash=\"dummyhash\",\n            expires=now - timedelta(hours=1),\n            activates=now - timedelta(hours=1),\n        )\n        assert not token.is_active()\n\n    def test_when_token_activated_in_the_past_and_expires_in_the_future_it_should_return_true(  # noqa: E501\n        self,\n    ):\n        now = datetime.now()\n        token = JWTRefreshToken(\n            name=\"testtoken\",\n            hash=\"dummyhash\",\n            expires=now + timedelta(hours=1),\n            activates=now - timedelta(hours=1),\n        )\n        assert token.is_active()\n\n    def test_when_token_activates_now_and_expires_in_the_future_it_should_return_true(\n        self,\n    ):\n        now = datetime.now()\n        token = JWTRefreshToken(\n            name=\"testtoken\",\n            hash=\"dummyhash\",\n            expires=now + timedelta(hours=1),\n            activates=now,\n        )\n        # Make sure the value we use for `activates` here matches\n        # the `now` value in jwtgen.is_active\n        with patch('nav.web.jwtgen.get_now', return_value=now):\n            assert token.is_active()\n\n\ndef test_string_representation_should_match_name():\n    now = datetime.now()\n    token = JWTRefreshToken(\n        name=\"testtoken\",\n        hash=\"dummyhash\",\n        expires=now + timedelta(hours=1),\n        activates=now - timedelta(hours=1),\n    )\n    assert str(token) == token.name\n"
  },
  {
    "path": "tests/unittests/models/netbox_test.py",
    "content": "from unittest.mock import patch\n\nfrom nav.models.manage import Netbox, ManagementProfile\n\nimport pytest\n\n\nclass TestGetPreferredSnmpProfiles:\n    def test_when_write_required_is_false_then_it_should_prefer_a_read_profile(\n        self, mocked_netbox\n    ):\n        profile = mocked_netbox.get_preferred_snmp_management_profile()\n        assert profile.name == \"v2 read\"\n\n    def test_when_write_required_is_true_then_it_should_return_a_write_profile(\n        self, mocked_netbox\n    ):\n        profile = mocked_netbox.get_preferred_snmp_management_profile(\n            require_write=True\n        )\n        assert profile.name.startswith(\"v2 write\")\n\n    def test_when_write_required_is_false_it_should_return_a_writable_profile_of_a_higher_snmp_version(  # noqa: E501\n        self, mocked_netbox\n    ):\n        profiles = mocked_netbox.profiles.filter()\n        profiles.append(\n            ManagementProfile(\n                name=\"v3 write\",\n                protocol=ManagementProfile.PROTOCOL_SNMPV3,\n                configuration={\"write\": True},\n            )\n        )\n        profile = mocked_netbox.get_preferred_snmp_management_profile()\n        assert profile.name == \"v3 write\"\n\n\n@pytest.fixture\ndef mocked_netbox(mock_profiles):\n    with patch.object(Netbox, \"profiles\") as profiles:\n        netbox = Netbox(sysname=\"test\", ip=\"127.0.0.1\")\n        profiles.filter.return_value = mock_profiles\n        yield netbox\n\n\n@pytest.fixture\ndef mock_profiles():\n    profiles = [\n        ManagementProfile(\n            name=\"v2 write first\",\n            protocol=ManagementProfile.PROTOCOL_SNMP,\n            configuration={\"version\": 2, \"write\": True},\n        ),\n        ManagementProfile(\n            name=\"v2 write second\",\n            protocol=ManagementProfile.PROTOCOL_SNMP,\n            configuration={\"version\": 2, \"write\": True},\n        ),\n        ManagementProfile(\n            name=\"v2 read\",\n            protocol=ManagementProfile.PROTOCOL_SNMP,\n            configuration={\"version\": 2, \"write\": False},\n        ),\n    ]\n    yield profiles\n"
  },
  {
    "path": "tests/unittests/models/sensor_test.py",
    "content": "from nav.models.manage import Sensor\n\n\ndef test_sensor_normalized_units_should_accept_blank_units():\n    \"\"\"Some sensors just count things that have no unit of measurement\"\"\"\n    sensor = Sensor(unit_of_measurement=None)\n    assert sensor.normalized_unit == \"\"\n"
  },
  {
    "path": "tests/unittests/models/varmap_test.py",
    "content": "from nav.models.event import EventQueue as Event\n\n\ndef test_setting_varmap_on_new_event_should_not_raise():\n    event = Event()\n    varmap = dict(foo='bar')\n    event.varmap = varmap\n    assert event.varmap == varmap\n"
  },
  {
    "path": "tests/unittests/napalm_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport pytest\nfrom unittest.mock import Mock\n\nfrom nav.models import manage\nfrom nav.napalm import connect, NapalmError\n\n\n@pytest.fixture()\ndef netbox_mock():\n    \"\"\"Create netbox model mock object\"\"\"\n    netbox = Mock()\n    netbox.ip = '10.0.0.1'\n    return netbox\n\n\n@pytest.fixture()\ndef profile_mock():\n    \"\"\"Create management profile model mock object\"\"\"\n    profile = Mock()\n    profile.protocol = manage.ManagementProfile.PROTOCOL_NAPALM\n    profile.PROTOCOL_NAPALM = manage.ManagementProfile.PROTOCOL_NAPALM\n    profile.configuration = {\"driver\": \"mock\"}\n    return profile\n\n\nclass TestNapalm:\n    def test_napalm_connect_runs_without_errors_for_correct_netbox_and_profile(\n        self, netbox_mock, profile_mock\n    ):\n        device = connect(\n            host=netbox_mock,\n            profile=profile_mock,\n        )\n\n        assert device\n\n    def test_napalm_connect_throws_exception_for_snmp_profile(\n        self, netbox_mock, profile_mock\n    ):\n        profile_mock.protocol = manage.ManagementProfile.PROTOCOL_SNMP\n\n        with pytest.raises(NapalmError):\n            connect(host=netbox_mock, profile=profile_mock)\n\n    def test_napalm_connect_throws_exception_for_profile_without_driver(\n        self, netbox_mock, profile_mock\n    ):\n        profile_mock.configuration = {}\n        with pytest.raises(NapalmError):\n            connect(host=netbox_mock, profile=profile_mock)\n"
  },
  {
    "path": "tests/unittests/natsort_test.py",
    "content": "import pytest\nfrom random import shuffle\n\nfrom nav import natsort\n\n\n@pytest.mark.parametrize(\n    \"string,expected\",\n    [\n        (\"abc123def\", [\"abc\", 123, \"def\"]),\n        (\"123\", [123]),\n        (\"foo-123\", [\"foo-\", 123]),\n        (\"bar\", [\"bar\"]),\n    ],\n)\ndef test_natsort_split_should_split_correctly(string, expected):\n    assert natsort.split(string) == expected\n\n\ndef test_natsort_splits_can_be_sorted():\n    expected = [\n        \"1 January 1970\",\n        \"1 January 2020\",\n        \"10 January 1970\",\n        \"Tenth of January 1986\",\n    ]\n    data = list(expected)\n    for i in range(5):\n        shuffle(data)\n        result = sorted(data, key=natsort.split)\n        assert result == expected\n"
  },
  {
    "path": "tests/unittests/netmap/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/netmap/cache_test.py",
    "content": "\"\"\"Tests for netmap cache utilities\"\"\"\n\nfrom unittest.mock import patch\n\nfrom nav.web.netmap.cache import (\n    _safe_cache_set,\n    cache_topology,\n    cache_traffic,\n)\n\n\nclass TestSafeCacheSet:\n    def test_when_cache_set_succeeds_it_should_call_cache_set(self):\n        with patch('nav.web.netmap.cache.cache') as mock_cache:\n            _safe_cache_set('key', 'value', 60)\n            mock_cache.set.assert_called_once_with('key', 'value', 60)\n\n    def test_when_cache_set_raises_it_should_log_warning_not_raise(self):\n        with patch('nav.web.netmap.cache.cache') as mock_cache:\n            mock_cache.set.side_effect = Exception('object too large for cache')\n            with patch('nav.web.netmap.cache._logger') as mock_logger:\n                _safe_cache_set('key', 'value', 60)\n                mock_logger.warning.assert_called_once()\n\n\nclass TestCacheTopology:\n    def test_when_cache_set_fails_it_should_still_return_result(self):\n        with patch('nav.web.netmap.cache.cache') as mock_cache:\n            mock_cache.get.return_value = None\n            mock_cache.set.side_effect = Exception('object too large for cache')\n\n            @cache_topology(\"layer 2\")\n            def my_func(view=None):\n                return {'nodes': {}, 'links': []}\n\n            result = my_func(view=None)\n            assert result == {'nodes': {}, 'links': []}\n\n    def test_when_cached_data_exists_it_should_return_cached_data(self):\n        cached_data = {'nodes': {'a': 1}, 'links': []}\n        with patch('nav.web.netmap.cache.cache') as mock_cache:\n            mock_cache.get.return_value = cached_data\n\n            @cache_topology(\"layer 2\")\n            def my_func(view=None):\n                return {'nodes': {}, 'links': []}\n\n            result = my_func(view=None)\n            assert result == cached_data\n\n\nclass TestCacheTraffic:\n    def test_when_cache_set_fails_it_should_still_return_result(self):\n        with patch('nav.web.netmap.cache.cache') as mock_cache:\n            mock_cache.get.return_value = None\n            mock_cache.set.side_effect = Exception('object too large for cache')\n\n            @cache_traffic(\"layer 2\")\n            def my_func(location_or_room_id):\n                return [{'source': 1, 'target': 2}]\n\n            result = my_func(None)\n            assert result == [{'source': 1, 'target': 2}]\n"
  },
  {
    "path": "tests/unittests/netmap/metaclass_testcase.py",
    "content": "from mock import Mock\nimport unittest\nfrom nav.models.manage import Netbox, Room\n\n\nclass MetaClassTestCase(unittest.TestCase):\n    def setUp(self):\n        self.maxDiff = None\n        self.netbox = Mock(name='Netbox', spec=Netbox)\n        self.netbox.pk = 1337\n        self.netbox.id = self.netbox.pk\n        self.netbox.sysname = 'fuu.example.net'\n        self.netbox.category_id = 'GW'\n        self.netbox.ip = '192.168.42.1'\n        self.netbox.up = 'y'\n        self.netbox.room = Mock(name='Room', spec=Room)\n        self.netbox.room.__unicode__ = Mock(\n            return_value='Galaxy (Universe Far Far away)'\n        )\n        self.netbox.room.id = 'Galaxy'\n        self.netbox.room.location.id = 'Universe'\n        self.netbox.room.location.description = 'Far far away'\n"
  },
  {
    "path": "tests/unittests/netmap/metadata_json_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport unittest\nfrom nav.models.manage import SwPortVlan, Vlan\nfrom nav.models.profiles import NetmapViewNodePosition\nfrom nav.netmap import stubs, metadata\nfrom nav.netmap.metadata import Edge, Group\nfrom .metaclass_testcase import MetaClassTestCase\nfrom .topology_layer3_testcase import TopologyLayer3TestCase\nfrom .topology_layer2_testcase import TopologyLayer2TestCase\n\n\nclass MetaClassesJsonTests(MetaClassTestCase):\n    def test_allow_group_interface_to_be_none(self):\n        json = Group(self.netbox).to_json()\n        self.assertFalse('interface' in json['netbox'])\n\n    def test_group_renders_gw_ip_if_included(self):\n        assert self.netbox is not None\n        group = Group(self.netbox)\n        group.gw_ip = '192.168.42.254'\n        json = group.to_json()\n        self.assertTrue('gw_ip' in json)\n        self.assertEqual('192.168.42.254', json['gw_ip'])\n\n    def test_group_renders_virtual_if_included_and_value_is_true(self):\n        group = Group(self.netbox)\n        group.virtual = True\n        json = group.to_json()\n        self.assertTrue('virtual' in json)\n        self.assertEqual(True, json['virtual'])\n\n    def test_group_renders_virtual_if_included_and_value_is_false(self):\n        group = Group(self.netbox)\n        group.virtual = False\n        json = group.to_json()\n        self.assertTrue('virtual' in json)\n        self.assertEqual(False, json['virtual'])\n\n\nclass SharedJsonMetadataTests:\n    def test_not_failing_when_both_interface_speed_is_undefined(self):\n        self.a1.speed = None\n        self.b1.speed = None\n        results = Edge((self.a, self.b), (self.a1, self.b1))\n        self.assertTrue(results.link_speed is None)\n\n    def test_json_edge_is_NA_if_speed_is_undefined(self):\n        self.a1.speed = None\n        self.b1.speed = None\n\n        results = Edge((self.a, self.b), (self.a1, self.b1)).to_json()\n\n        self.assertEqual(results['link_speed'], 'N/A')\n\n    def test_stubbed_netbox_always_gives_is_elink(self):\n        netbox = stubs.Netbox()\n        netbox.sysname = 'IamStub'\n        netbox.id = netbox.sysname\n        netbox.category_id = 'ELINK'\n        self.assertEqual(\n            {\n                'category': 'ELINK',\n                'id': 'IamStub',\n                'is_elink_node': True,\n                'position': {'x': 1.3, 'y': 3.7},\n                'sysname': 'IamStub',\n            },\n            metadata.Node(netbox, self.nx_edge_metadata).to_json()['IamStub'],\n        )\n\n    def test_json_id_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('id' in foo)\n        self.assertEqual('2', foo['id'])\n\n    def test_json_sysname_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('sysname' in foo)\n        self.assertEqual('a', foo['sysname'])\n\n    def test_json_category_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('category' in foo)\n        self.assertEqual('GW', foo['category'])\n\n    def test_json_ip_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('ip' in foo)\n        self.assertEqual('::2', foo['ip'])\n\n    def test_json_ipdevinfo_link_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('ipdevinfo_link' in foo)\n        self.assertEqual('/ipdevinfo/a/', foo['ipdevinfo_link'])\n\n    def test_json_position_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('position' in foo)\n        self.assertEqual({'x': 1.3, 'y': 3.7}, foo['position'])\n\n    def test_json_position_is_not_in_json_if_position_data_not_available_from_graph(\n        self,\n    ):\n        del self.nx_edge_metadata['metadata']['position']\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertFalse('position' in foo)\n\n    def test_json_up_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('up' in foo)\n        self.assertEqual('y', foo['up'])\n\n    def test_json_up_image_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('up_image' in foo)\n        self.assertEqual('green.png', foo['up_image'])\n\n    def test_json_roomid_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('roomid' in foo)\n        self.assertEqual('Pegasus', foo['roomid'])\n\n    def test_json_locationid_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('locationid' in foo)\n        self.assertEqual('galaxy', foo['locationid'])\n\n    def test_json_location_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('location' in foo)\n        self.assertEqual('galaxy: In a galaxy far far away', foo['location'])\n\n    def test_json_room_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('room' in foo)\n        self.assertEqual('Pegasus: room description', foo['room'])\n\n    def test_json_is_elink_node_is_included_in_metadata_from_node(self):\n        foo = metadata.Node(self.a, self.nx_edge_metadata).to_json()['2']\n        self.assertTrue('is_elink_node' in foo)\n        self.assertFalse(foo['is_elink_node'])\n\n\nclass Layer2JsonMetadataTests(SharedJsonMetadataTests, TopologyLayer2TestCase):\n    def setUp(self):\n        super(Layer2JsonMetadataTests, self).setUp()\n\n        a_position = NetmapViewNodePosition()\n        a_position.x = 1.3\n        a_position.y = 3.7\n        self.nx_edge_metadata = {'metadata': {'position': a_position}}\n        self.nx_node_metadata = {\n            'metadata': {\n                'vlans': [\n                    (\n                        1337,\n                        SwPortVlan(\n                            id=1231,\n                            interface=self.a1,\n                            vlan=Vlan(id=1337, vlan=10, net_ident='unittest vlan'),\n                        ),\n                    )\n                ]\n            }\n        }\n\n    def test_json_node_contains_vlan_data(self):\n        foo = metadata.node_to_json_layer2(self.a, self.nx_node_metadata)['2']\n        self.assertTrue('vlans' in foo)\n        self.assertEqual(1, len(foo['vlans']))\n\n        # nav_vlan_id (key) should equal swpv.vlan.id\n        self.assertEqual(\n            self.nx_node_metadata.get('metadata')['vlans'][0][0],\n            self.nx_node_metadata.get('metadata')['vlans'][0][1].vlan.id,\n        )\n\n        # nav_vlan_id == swpv.vlan.id\n        self.assertEqual(1337, foo['vlans'][0])  # vlan.nav_vlan\n\n\nclass Layer3JsonMetadataTests(SharedJsonMetadataTests, TopologyLayer3TestCase):\n    def setUp(self):\n        super(Layer3JsonMetadataTests, self).setUp()\n\n        a_position = NetmapViewNodePosition()\n        a_position.x = 1.3\n        a_position.y = 3.7\n        self.nx_edge_metadata = {'metadata': {'position': a_position}}\n\n    def test_layer3_prefix_is_added_between_a_and_b(self):\n        nx_meta = self.netmap_graph.get_edge_data(self.a, self.b)\n        edge_json_metadata = metadata.edge_to_json_layer3((self.a, self.b), nx_meta)\n\n        self.assertEqual(1, len(edge_json_metadata['edges']))\n        self.assertEqual(\n            '158.38.0.0/30',\n            edge_json_metadata['edges'][2111][0]['prefix']['net_address'],\n        )\n\n    def test_layer3_v4_and_v6_prefixes_added_between_a_and_c(self):\n        edge_json_metadata = metadata.edge_to_json_layer3(\n            (self.a, self.b), self.netmap_graph.get_edge_data(self.a, self.c)\n        )\n\n        self.assertEqual(1, len(edge_json_metadata['edges']))\n        self.assertEqual(2, len(edge_json_metadata['edges'][2112]))\n        expected_prefixes = ('158.38.0.4/30', 'feed:dead:cafe:babe::/64')\n        for i, prefix in enumerate(expected_prefixes):\n            self.assertEqual(\n                edge_json_metadata['edges'][2112][i]['prefix']['net_address'], prefix\n            )\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/unittests/netmap/metadata_nx_test.py",
    "content": "from mock import Mock\nfrom nav.models.manage import Interface, Netbox\nfrom nav.netmap.metadata import Edge, Group\nfrom .topology_layer2_testcase import TopologyLayer2TestCase\nfrom .topology_layer3_testcase import TopologyLayer3TestCase\nfrom .metaclass_testcase import MetaClassTestCase\n\n\nclass MetaClassesTests(MetaClassTestCase):\n    def test_group_does_not_raise_exception_when_interface_is_none(self):\n        Group(Mock(name='netbox', spec=Netbox), None)\n\n    def test_edge_allows_both_interface_linkspeed_in_group_to_be_none(self):\n        netbox_a = Mock(name='netbox a', sepc=Netbox)\n        netbox_a.id = 'foo'\n        a = Mock(name='interface a', spec=Interface)\n        a.speed = None\n\n        netbox_b = Mock(name='netbox b', spec=Netbox)\n        netbox_b.id = 'bar'\n        b = Mock(name='interface b', spec=Interface)\n        b.speed = None\n\n        Edge((netbox_a, netbox_b), (a, b))\n\n\nclass Layer2NetworkXMetadataTests(TopologyLayer2TestCase):\n    def _get_metadata(self, node_a, node_b, metadata_key='metadata'):\n        return self.netmap_graph.get_edge_data(node_a, node_b).get(metadata_key)\n\n    def test_metadata_contains_edge_objects(self):\n        for node_a, node_b, metadata in self.netmap_graph.edges(data=True):\n            for pair in metadata.get('metadata'):\n                assert isinstance(pair, Edge)\n\n    def test_node_a1_and_b1_contains_vlan_metadata(self):\n        vlans = self.netmap_graph.nodes[self.a]['metadata']['vlans']\n\n        self.assertEqual(1, len(vlans))\n        self.assertEqual(vlans[0][1], self.vlan__a1_b1)\n        # nav_vlan_id == SwPortVlan.Vlan.Id\n        self.assertEqual(vlans[0][0], self.vlan__a1_b1.vlan.id)\n\n    def test_edge_between_a_and_b_has_2_edges_as_metdata(self):\n        edge_meta = self._get_metadata(self.a, self.b)\n        self.assertEqual(2, len(edge_meta))\n\n    def test_edge_between_a_and_b_contains_a1_b1__and__a2_b2_uplinks(self):\n        first, second = list(self._get_metadata(self.a, self.b))\n        self.assertEqual(\n            frozenset((self.a1, self.b1)),\n            frozenset((first.u.interface, first.v.interface)),\n        )\n\n        self.assertEqual(\n            frozenset((self.a2, self.b2)),\n            frozenset((second.u.interface, second.v.interface)),\n        )\n\n    def test_netmap_metadata_shows_2_links_for_edge_between_a_and_b(self):\n        self.assertEqual(2, len(self._get_metadata(self.a, self.b)))\n\n    def test_netmap_metadata_is_correct_for_2_links_edge_between_a_and_b(self):\n        self.maxDiff = None\n        metadata = (self.netmap_graph.get_edge_data(self.a, self.b) or {}).get(\n            'metadata'\n        )\n        assert Edge(nx_edge=(self.a, self.b), meta_edge=(self.a1, self.b1)) in metadata\n        assert Edge(nx_edge=(self.a, self.b), meta_edge=(self.a2, self.b2)) in metadata\n\n\nclass Layer3NetworkXMetadataTests(TopologyLayer3TestCase):\n    def test_link_between_a_and_c_contains_both_v4_and_v6_prefix(self):\n        prefixes = {\n            edge.prefix\n            for edge in self.netmap_graph.get_edge_data(self.a, self.c)\n            .get('metadata')\n            .get(2112)\n        }\n        expected = {self.prefix_bar, self.prefix_bar_ipv6}\n        self.assertSetEqual(prefixes, expected)\n\n    def test_link_got_prefixed_attached(self):\n        self.assertEqual(\n            self.prefix_foo,\n            self.netmap_graph.get_edge_data(self.a, self.b)\n            .get('metadata')\n            .get(self.prefix_foo.vlan.id)[0]\n            .prefix,\n        )\n\n        self.assertEqual(\n            self.prefix_baz,\n            self.netmap_graph.get_edge_data(self.b, self.d)\n            .get('metadata')\n            .get(self.prefix_baz.vlan.id)[0]\n            .prefix,\n        )\n\n        self.assertEqual(\n            self.prefix_baz,\n            self.netmap_graph.get_edge_data(self.b, self.e)\n            .get('metadata')\n            .get(self.prefix_baz.vlan.id)[0]\n            .prefix,\n        )\n\n        self.assertEqual(\n            self.prefix_zar,\n            self.netmap_graph.get_edge_data(self.f, self.unknown)\n            .get('metadata')\n            .get(self.prefix_zar.vlan.id)[0]\n            .prefix,\n        )\n\n    def test_edge_has_correct_metadata(self):\n        # 2111 is VLAN.id\n        #\n        # the netmap code is really b0rked, since it assumes directionality\n        # in an undirected graph. this test will work around that fact,\n        # but the code still needs to be fixed.\n        metadata = self.netmap_graph.get_edge_data(self.a, self.b)\n        edge = metadata.get('metadata').get(2111)[0]\n        u, v = (edge.u, edge.v)\n\n        if self.a == v or self.a == getattr(v, 'netbox', None):\n            # there is no source and target in an undirected graph\n            u, v = v, u\n\n        self.assertEqual(u.interface, self.a1)\n        self.assertEqual(u.netbox, self.a)\n        self.assertEqual(u.gw_ip, '158.38.0.1')\n        self.assertFalse(u.virtual)\n\n        self.assertEqual(v.interface, self.b1)\n        self.assertEqual(v.netbox, self.b)\n        self.assertEqual(v.gw_ip, '158.38.0.2')\n        self.assertFalse(v.virtual)\n\n    def test_uplink_has_all_layer3_properties_it_should_for_source(self):\n        should_have = ('gw_ip', 'virtual')\n\n        for edge in (\n            self.netmap_graph.get_edge_data(self.a, self.b).get('metadata').get(2111)\n        ):\n            self.assertTrue(\n                all([hasattr(edge.u, attribute) for attribute in should_have]),\n                msg=\"Didn't find all keys {0}, only found: {1}\".format(\n                    should_have, edge.__dict__.keys()\n                ),\n            )\n\n    def test_uplink_has_all_layer3_properties_it_should_for_target(self):\n        should_have = ('gw_ip', 'virtual')\n\n        for edge in (\n            self.netmap_graph.get_edge_data(self.a, self.b).get('metadata').get(2111)\n        ):\n            self.assertTrue(\n                all([hasattr(edge.v, attribute) for attribute in should_have]),\n                msg=\"Didn't find all keys {0}, only found: {1}\".format(\n                    should_have, edge.__dict__.keys()\n                ),\n            )\n\n    def test_uplink_has_all_layer3_properties_it_should(self):\n        should_have = ('prefix', 'vlan')\n\n        for edge in (\n            self.netmap_graph.get_edge_data(self.a, self.b).get('metadata').get(2111)\n        ):\n            self.assertTrue(\n                all([hasattr(edge, y) for y in should_have]),\n                msg=\"Didn't find all keys {0}, only found: {1}\".format(\n                    should_have, edge.__dict__.keys()\n                ),\n            )\n"
  },
  {
    "path": "tests/unittests/netmap/multidigraph_to_undirect_test.py",
    "content": "import unittest\n\nfrom nav.netmap import topology\nfrom nav.netmap.topology import build_netmap_layer2_graph\n\nfrom .topology_layer2_testcase import TopologyLayer2TestCase\nfrom .topology_layer3_testcase import TopologyLayer3TestCase\n\n\nclass Layer2MultiGraphToUndirectTests(TopologyLayer2TestCase):\n    def test_b1_and_b2_netbox_is_the_same(self):\n        self.assertEqual(\n            self.b1.netbox,\n            self.b2.netbox,\n            msg=\"Critical, interfaces connected to same netbox must be of the same\"\n            \"netbox instance\",\n        )\n\n    # This is basically what a standard NAV topology graph looks like...\n    # we need to make it unidirectional while keeping attr_dict\n    # from all edges\n\n    # [1 / 2]\n    def test_nodes_length_of_orignal_graph_consists_with_nav_topology_behavior(self):\n        self.assertEqual(\n            4,\n            len(self.nav_graph.nodes()),\n            msg=\"Original NAV graph should only contain 2 nodes, it contains: \"\n            + str(self.nav_graph.nodes()),\n        )\n\n    # [2 / 2]\n    def test_edges_length_of_orginal_graph_consists_with_nav_topology_behavior(self):\n        self.assertEqual(6, len(self.nav_graph.edges()))\n\n    # netmap graphs tests below\n\n    def test_nodes_length_of_netmap_graph_is_reduced_properly(self):\n        # four nodes, A, B, C and D\n        self.assertEqual(4, len(self.netmap_graph.nodes()))\n\n    def test_edges_length_of_netmap_graph_is_reduced_properly(self):\n        # one LINE between A and B.\n        # one LINE between A and C\n        # one line between C and D\n        self.assertEqual(3, len(self.netmap_graph.edges()))\n        self.assertIn((self.a, self.b), self.netmap_graph.edges())\n        self.assertIn((self.a, self.c), self.netmap_graph.edges())\n        self.assertIn((self.c, self.d), self.netmap_graph.edges())\n\n    def test_layer2_create_directional_metadata_from_nav_graph(self):\n        self.netmap_graph = build_netmap_layer2_graph(\n            self.nav_graph,\n            topology._get_vlans_map_layer2(self.nav_graph)[0],\n            topology._get_vlans_map_layer2(self.nav_graph)[1],\n        )\n\n        # should be the same as\n        #  test_edges_length_of_netmap_graph_is_reduced_properly\n        self.assertIn((self.a, self.b), self.netmap_graph.edges())\n        self.assertIn((self.a, self.c), self.netmap_graph.edges())\n        self.assertIn((self.c, self.d), self.netmap_graph.edges())\n\n        self.assertEqual(\n            2, len(self.netmap_graph.get_edge_data(self.a, self.b).get('metadata', []))\n        )\n\n\nclass Layer3MultiGraphToUndirectTests(TopologyLayer3TestCase):\n    def test_nodes_length_of_orignal_graph_consists_with_nav_topology_behavior(self):\n        # 11 gwport prefixes.\n        self.assertEqual(11, len(self.nav_graph.nodes()))\n\n    def test_edges_length_of_original_graph_consiits_with_nav_topology_behavior(self):\n        # 7 edges between gw port prefixes keyed on gw port prefix.\n        self.assertEqual(7, len(self.nav_graph.edges()))\n\n    def test_nodes_length_of_netmap_graph_is_reduced_properly(self):\n        print(self.netmap_graph.nodes())\n        self.assertEqual(7, len(self.netmap_graph.nodes()))\n\n    def test_edges_length_of_netmap_graph_is_reduced_properly(self):\n        self.assertEqual(6, len(self.netmap_graph.edges()))\n\n    def test_layer3_edges_is_as_expected_in_netmap_graph(self):\n        for edge in [\n            (self.a, self.b),\n            (self.a, self.c),\n            (self.b, self.d),\n            (self.b, self.e),\n            (self.d, self.e),\n            (self.f, self.unknown),\n        ]:\n            self.assertTrue(self.netmap_graph.has_edge(*edge))\n\n    def test_layer3_only_one_vlan_on_all_edges(self):\n        \"\"\" \"\"\"\n        self.assertEqual(\n            1,\n            len(self.netmap_graph.get_edge_data(self.a, self.b).get('metadata').keys()),\n        )\n        self.assertEqual(\n            1,\n            len(self.netmap_graph.get_edge_data(self.a, self.c).get('metadata').keys()),\n        )\n        self.assertEqual(\n            1,\n            len(self.netmap_graph.get_edge_data(self.b, self.d).get('metadata').keys()),\n        )\n        self.assertEqual(\n            1,\n            len(self.netmap_graph.get_edge_data(self.b, self.e).get('metadata').keys()),\n        )\n        self.assertEqual(\n            1,\n            len(self.netmap_graph.get_edge_data(self.d, self.e).get('metadata').keys()),\n        )\n        self.assertEqual(\n            1,\n            len(\n                self.netmap_graph.get_edge_data(self.f, self.unknown)\n                .get('metadata')\n                .keys()\n            ),\n        )\n\n    def test_layer3__a__c__vlan_contains_both_v4_and_v6_prefixes(self):\n        self.assertEqual(\n            2,\n            len(\n                self.netmap_graph.get_edge_data(self.a, self.c)\n                .get('metadata')\n                .get(2112)\n            ),\n        )\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/unittests/netmap/stubs_test.py",
    "content": "from nav.netmap.stubs import Netbox\nfrom nav.models import manage\n\n\nclass TestNetboxEqWithNonStubValues:\n    def test_when_value_is_orm_model_with_same_sysname_it_should_return_true(self):\n        localhost = manage.Netbox(sysname='localhost')\n        stub = Netbox()\n        stub.sysname = localhost.sysname\n        assert stub == localhost\n\n    def test_when_value_is_orm_model_with_different_sysname_it_should_return_false(\n        self,\n    ):\n        localhost = manage.Netbox(sysname='localhost')\n        stub = Netbox()\n        stub.sysname = \"stubhost\"\n        assert stub != localhost\n"
  },
  {
    "path": "tests/unittests/netmap/topology_layer2_testcase.py",
    "content": "from mock import patch\nimport networkx as nx\nfrom nav.models.manage import SwPortVlan, Vlan\nfrom nav.netmap import topology\nfrom nav.topology import vlan\nfrom .topology_testcase import TopologyTestCase\n\n\nclass TopologyLayer2TestCase(TopologyTestCase):\n    def setUp(self):\n        super(TopologyLayer2TestCase, self).setUp()\n\n        self.model_id = 1\n        self.nav_graph = nx.MultiDiGraph()\n\n        self.a = a = self._netbox_factory('a')\n        self.b = b = self._netbox_factory('b')\n        self.c = c = self._netbox_factory('c')\n        self.d = d = self._netbox_factory('d')\n\n        self.a1 = a1 = self._interface_factory('a1', a)\n        self.a2 = a2 = self._interface_factory('a2', a)\n        self.a3 = a3 = self._interface_factory('a3', a)\n        self.b1 = b1 = self._interface_factory('b1', b)\n        self.b2 = b2 = self._interface_factory('b2', b)\n        self.c3 = c3 = self._interface_factory('c3', c)\n        self.c4 = c4 = self._interface_factory('c4', c)\n        self.d4 = d4 = self._interface_factory('d4', d)\n\n        self._add_edge(self.nav_graph, a1.netbox, a1, b1.netbox, b1)\n        self._add_edge(self.nav_graph, b1.netbox, b1, a1.netbox, a1)\n        self._add_edge(self.nav_graph, a2.netbox, a2, b2.netbox, b2)\n        self._add_edge(self.nav_graph, b2.netbox, b2, a2.netbox, a2)\n        self._add_edge(self.nav_graph, a3.netbox, a3, c3.netbox, c3)\n        self._add_edge(self.nav_graph, d4.netbox, d4, c4.netbox, c4)\n\n        self.vlan__a1_b1 = a_vlan_between_a1_and_b1 = SwPortVlan(\n            id=self._next_id(), interface=self.a1, vlan=Vlan(id=201, vlan=2)\n        )\n\n        self.vlans = patch.object(\n            topology,\n            '_get_vlans_map_layer2',\n            return_value=(\n                {\n                    self.a1: [a_vlan_between_a1_and_b1],\n                    self.b1: [a_vlan_between_a1_and_b1],\n                    self.a2: [],\n                    self.b2: [],\n                    self.a3: [],\n                    self.c3: [],\n                },\n                {\n                    self.a: {201: a_vlan_between_a1_and_b1},\n                    self.b: {201: a_vlan_between_a1_and_b1},\n                    self.c: {},\n                },\n            ),\n        )\n        self.vlans.start()\n\n        self.build_l2 = patch.object(\n            vlan, 'build_layer2_graph', return_value=self.nav_graph\n        )\n        self.build_l2.start()\n\n        vlan_by_interfaces, vlan_by_netbox = topology._get_vlans_map_layer2(\n            self.nav_graph\n        )\n\n        self.netmap_graph = topology.build_netmap_layer2_graph(\n            vlan.build_layer2_graph(), vlan_by_interfaces, vlan_by_netbox, None\n        )\n\n    def tearDown(self):\n        self.vlans.stop()\n        self.build_l2.stop()\n\n    def test_noop_layer2_testcase_setup(self):\n        self.assertTrue(True)\n\n    def _add_edge(self, g, node_a, interface_a, node_b, interface_b):\n        interface_a.to_interface = interface_b\n        g.add_edge(node_a, node_b, key=interface_a)\n"
  },
  {
    "path": "tests/unittests/netmap/topology_layer3_testcase.py",
    "content": "from mock import patch\nimport networkx as nx\nfrom nav.models.manage import Prefix, Vlan, GwPortPrefix, NetType\nfrom nav.netmap import topology, stubs\nfrom nav.topology import vlan\nfrom .topology_testcase import TopologyTestCase\n\n\nclass TopologyLayer3TestCase(TopologyTestCase):\n    def setUp(self):\n        \"\"\"\n        Build a graph with the following network:\n\n        node a and node b connected with a linknet prefix 158.38.0.0/30\n         with it's first pair of interfaces {a1: 1, b1: 2}\n        node a and node c connected with a linknet prefix 158.38.0.4/30\n         with it's second pair of interfaces {a3: 5, c3: 6}\n        node b and node d and node e connected as a core linknet on prefix\n         158.38.1.0/29  {b4: 1, d4: 2, , e4: 3}\n        node f connected to unknown node (elink) as a linknet on prefix\n         158.38.99.0/30 { f5: 1, UNKNOWN }\n        \"\"\"\n        super(TopologyLayer3TestCase, self).setUp()\n\n        self.model_id = 1\n        self.nav_graph = nx.MultiGraph()\n\n        self.net_type_link = NetType(id=1, description='link')\n        self.net_type_elink = NetType(id=2, description='elink')\n        self.net_type_core = NetType(id=3, description='core')\n\n        self.a = a = self._netbox_factory('a')\n        self.b = b = self._netbox_factory('b')\n        self.c = c = self._netbox_factory('c')\n        self.d = d = self._netbox_factory('d')\n        self.e = e = self._netbox_factory('e')\n        self.f = f = self._netbox_factory('f')\n\n        self.a1 = self._interface_factory('a1', a)\n        self.a3 = self._interface_factory('a3', a)\n\n        self.b1 = self._interface_factory('b1', b)\n        self.b4 = self._interface_factory('b4', b)\n\n        self.c3 = self._interface_factory('c3', c)\n\n        self.d4 = self._interface_factory('d4', d)\n\n        self.e4 = self._interface_factory('e4', e)\n\n        self.f5 = self._interface_factory('f5', f)\n\n        self.prefix_foo = Prefix(\n            id=1111,\n            net_address=\"158.38.0.0/30\",\n            vlan=Vlan(id=2111, vlan=50, net_type=self.net_type_link),\n        )\n\n        self.prefix_bar_vlan = Vlan(id=2112, vlan=50, net_type=self.net_type_link)\n        self.prefix_bar = Prefix(\n            id=1112, net_address=\"158.38.0.4/30\", vlan=self.prefix_bar_vlan\n        )\n        self.prefix_bar_ipv6 = Prefix(\n            id=6112, net_address=\"feed:dead:cafe:babe::/64\", vlan=self.prefix_bar_vlan\n        )\n\n        self.prefix_baz = Prefix(\n            id=1113,\n            net_address=\"158.38.1.0/29\",\n            vlan=Vlan(id=2113, vlan=50, net_type=self.net_type_core),\n        )\n        self.prefix_zar = Prefix(\n            id=1114,\n            net_address=\"158.38.99.0/30\",\n            vlan=Vlan(id=2114, vlan=50, net_type=self.net_type_elink),\n        )\n\n        # fictive netbox, interface, gwportprefix for F to UNKNOWN\n        self.unknown = unknown = stubs.Netbox()\n        unknown.sysname = 'fictive netbox'\n        unknown.category_id = 'elink'\n\n        self.unknown_interface = unknown_interface = stubs.Interface()\n        self.unknown_interface.netbox = unknown\n        self.unknown_interface.ifname = \"?\"\n        self.unknown_interface.speed = None\n\n        # node a and node b connected with a linknet prefix 158.38.0.0/30\n        # with it's first pair of interfaces {a1: 1, b1: 2}\n        self.linknet_a1_for_a_b = GwPortPrefix(\n            interface=self.a1, prefix=self.prefix_foo, gw_ip='158.38.0.1', virtual=False\n        )\n        self.linknet_b1_for_a_b = GwPortPrefix(\n            interface=self.b1, prefix=self.prefix_foo, gw_ip='158.38.0.2', virtual=False\n        )\n\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_a1_for_a_b,\n            self.linknet_b1_for_a_b,\n            self.prefix_foo,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_b1_for_a_b,\n            self.linknet_a1_for_a_b,\n            self.prefix_foo,\n        )\n\n        # node a and node c connected with a linknet prefix 158.38.0.4/30\n        # with it's second pair of interfaces {a2: 5, c2: 6}\n        self.linknet_a3_for_a_c = GwPortPrefix(\n            interface=self.a3, prefix=self.prefix_bar, gw_ip='158.38.0.5', virtual=False\n        )\n        self.linknet_c3_for_a_c = GwPortPrefix(\n            interface=self.c3, prefix=self.prefix_bar, gw_ip='158.38.0.6', virtual=False\n        )\n        self.linknet_v6_a3_for_a_c = GwPortPrefix(\n            interface=self.a3,\n            prefix=self.prefix_bar_ipv6,\n            gw_ip='feed:dead:cafe:babe::5',\n            virtual=False,\n        )\n        self.linknet_v6_c3_for_a_c = GwPortPrefix(\n            interface=self.c3,\n            prefix=self.prefix_bar_ipv6,\n            gw_ip='feed:dead:cafe:babe::3',\n            virtual=False,\n        )\n\n        # v4 prefix\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_a3_for_a_c,\n            self.linknet_c3_for_a_c,\n            self.prefix_bar,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_c3_for_a_c,\n            self.linknet_a3_for_a_c,\n            self.prefix_bar,\n        )\n        # v6 prefix\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_v6_a3_for_a_c,\n            self.linknet_v6_c3_for_a_c,\n            self.prefix_bar_ipv6,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_v6_c3_for_a_c,\n            self.linknet_v6_a3_for_a_c,\n            self.prefix_bar_ipv6,\n        )\n\n        # node b and node d and node e connected as a core linknet on prefix\n        # 158.38.1.0/29  {b3: 1, d3: 2, , e3: 3}\n        self.linknet_b4_for_b_d_e = GwPortPrefix(\n            interface=self.b4, prefix=self.prefix_baz, gw_ip='158.38.1.1', virtual=False\n        )\n        self.linknet_d4_for_b_d_e = GwPortPrefix(\n            interface=self.d4, prefix=self.prefix_baz, gw_ip='158.38.1.2', virtual=False\n        )\n        self.linknet_e4_for_b_d_e = GwPortPrefix(\n            interface=self.e4, prefix=self.prefix_baz, gw_ip='158.38.1.3', virtual=False\n        )\n\n        # core is a STAR.\n        # b3, d3\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_b4_for_b_d_e,\n            self.linknet_d4_for_b_d_e,\n            self.prefix_baz,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_b4_for_b_d_e,\n            self.linknet_e4_for_b_d_e,\n            self.prefix_baz,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_d4_for_b_d_e,\n            self.linknet_b4_for_b_d_e,\n            self.prefix_baz,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_d4_for_b_d_e,\n            self.linknet_e4_for_b_d_e,\n            self.prefix_baz,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_e4_for_b_d_e,\n            self.linknet_b4_for_b_d_e,\n            self.prefix_baz,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_e4_for_b_d_e,\n            self.linknet_d4_for_b_d_e,\n            self.prefix_baz,\n        )\n\n        # node f connected to unknown node (elink) as a linknet on prefix\n        # 158.38.99.0/30 { f4: 1, UNKNOWN }\n        self.linknet_f5_for_f_unknown = GwPortPrefix(\n            interface=self.f5,\n            prefix=self.prefix_zar,\n            gw_ip='158.38.99.1',\n            virtual=False,\n        )\n        self.linknet_unknown4_for_f_unknown = stubs.GwPortPrefix()\n        self.linknet_unknown4_for_f_unknown.interface = unknown_interface\n        self.linknet_unknown4_for_f_unknown.gw_ip = unknown.sysname\n        self.linknet_unknown4_for_f_unknown.prefix = self.prefix_zar\n\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_f5_for_f_unknown,\n            self.linknet_unknown4_for_f_unknown,\n            self.prefix_zar,\n        )\n        self._add_edge(\n            self.nav_graph,\n            self.linknet_unknown4_for_f_unknown,\n            self.linknet_f5_for_f_unknown,\n            self.prefix_zar,\n        )\n\n        self.vlans = patch.object(\n            topology,\n            '_get_vlans_map_layer3',\n            return_value={\n                2111: [self.prefix_foo],\n                2112: [self.prefix_bar, self.prefix_bar_ipv6],\n                2113: [self.prefix_baz],\n                2114: [self.prefix_zar],\n            },\n        )\n        self.vlans.start()\n\n        self.l3 = patch.object(vlan, 'build_layer3_graph', return_value=self.nav_graph)\n        self.l3.start()\n\n        self.netmap_graph = topology.build_netmap_layer3_graph(self.nav_graph, None)\n\n    def tearDown(self):\n        self.vlans.stop()\n        self.l3.stop()\n\n    def _add_edge(self, graph, netbox_a, netbox_b, prefix):\n        graph.add_edge(netbox_a, netbox_b, key=prefix)\n\n    def test_noop_layer3_testcase_setup(self):\n        self.assertTrue(True)\n\n    def test_noop_setup_netmap_graph_layer3(self):\n        self.assertTrue(self.netmap_graph)\n"
  },
  {
    "path": "tests/unittests/netmap/topology_testcase.py",
    "content": "import unittest\nfrom nav.models.manage import Netbox, Interface, Room, Location, Category\n\n\nclass TopologyTestCase(unittest.TestCase):\n    def setUp(self):\n        self.room = room = Room()\n        room.id = 'Pegasus'\n        room.description = 'room description'\n        room.location = Location()\n        room.location.id = 'galaxy'\n        room.location.description = 'In a galaxy far far away'\n\n        self.category_gw = Category(id='GW')\n\n    def _next_id(self):\n        self.model_id = self.model_id + 1\n        return self.model_id\n\n    def _netbox_factory(self, sysname, interface=None):\n        netbox = Netbox()\n        netbox.id = self._next_id()\n        netbox.sysname = sysname\n        netbox.interface = interface\n        netbox.category = self.category_gw\n        netbox.room = self.room\n        netbox.ip = '::{0}'.format(self.model_id)\n        return netbox\n\n    def _interface_factory(self, ifname, netbox):\n        interface = Interface()\n        interface.id = self._next_id()\n        interface.ifname = ifname\n        if netbox and isinstance(netbox, Netbox):\n            interface.netbox = netbox\n        elif netbox:\n            interface.netbox = self._netbox_factory(netbox, interface)\n        return interface\n"
  },
  {
    "path": "tests/unittests/pgsync_test.py",
    "content": "from nav.pgsync import ChangeScriptFinder, Synchronizer\n\n\nfrom unittest import TestCase\n\n\nclass TestChangeScriptFinder(TestCase):\n    def test_init_should_read_sql_filenames_from_package_and_return_list_of_relative_filenames(  # noqa: E501\n        self,\n    ):\n        csf = ChangeScriptFinder('nav.models')\n        self.assertTrue(len(csf) > 40)\n        for sql_filename in csf:\n            self.assertTrue(sql_filename.startswith('sql/'))\n            self.assertTrue(sql_filename.endswith('.sql'))\n\n\nclass TestSynchronizer(TestCase):\n    def test_should_read_sql_file_from_package_and_return_bytes(self):\n        syncer = Synchronizer('nav.models', config=True)\n        filename = \"sql/baseline/manage.sql\"\n        sql = syncer._read_sql_file(filename)\n        self.assertIn(\"CREATE TABLE org\", str(sql))\n"
  },
  {
    "path": "tests/unittests/portadmin/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/portadmin/conftest.py",
    "content": "from mock import Mock\n\nimport pytest\n\nfrom nav.enterprise.ids import VENDOR_ID_HEWLETT_PACKARD, VENDOR_ID_CISCOSYSTEMS\nfrom nav.models.manage import ManagementProfile\nfrom nav.portadmin.management import ManagementFactory\n\n\n@pytest.fixture\ndef profile():\n    profile = ManagementProfile(\n        protocol=ManagementProfile.PROTOCOL_SNMP,\n        configuration={\"version\": 2, \"community\": \"public\"},\n    )\n    return profile\n\n\n@pytest.fixture\ndef netbox_hp(profile):\n    vendor = Mock()\n    vendor.id = 'hp'\n\n    netbox_type = Mock()\n    netbox_type.vendor = vendor\n    netbox_type.sysobjectid = '1.3.6.1.4.1.11.2.3.7.11.45'\n    netbox_type.get_enterprise_id.return_value = VENDOR_ID_HEWLETT_PACKARD\n\n    netbox = Mock()\n    netbox.type = netbox_type\n    netbox.ip = '10.240.160.39'\n    netbox.get_preferred_snmp_management_profile.return_value = profile\n\n    return netbox\n\n\n@pytest.fixture\ndef netbox_cisco(profile):\n    vendor = Mock()\n    vendor.id = 'cisco'\n\n    netbox_type = Mock()\n    netbox_type.vendor = vendor\n    netbox_type.sysobjectid = '1.3.6.1.4.1.9.1.278'\n    netbox_type.get_enterprise_id.return_value = VENDOR_ID_CISCOSYSTEMS\n\n    netbox = Mock()\n    netbox.type = netbox_type\n    netbox.ip = '10.240.160.38'\n    netbox.get_preferred_snmp_management_profile.return_value = profile\n\n    return netbox\n\n\n@pytest.fixture\ndef netbox_cisco_smb(netbox_cisco):\n    netbox_cisco.type.sysobjectid = '1.3.6.1.4.1.9.6.1.1004.10.1'\n    return netbox_cisco\n\n\n@pytest.fixture\ndef handler_hp(netbox_hp):\n    return ManagementFactory.get_instance(netbox_hp)\n\n\n@pytest.fixture\ndef handler_cisco(netbox_cisco):\n    return ManagementFactory.get_instance(netbox_cisco)\n"
  },
  {
    "path": "tests/unittests/portadmin/napalm/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/portadmin/napalm/conftest.py",
    "content": "import pytest\nfrom unittest.mock import Mock\n\nfrom nav.enterprise.ids import VENDOR_ID_JUNIPER_NETWORKS_INC\nfrom nav.models import manage\nfrom nav.portadmin.napalm.juniper import Juniper\n\n\n@pytest.fixture()\ndef netbox_mock(interface1_mock, interface2_mock):\n    \"\"\"Create netbox model mock object\"\"\"\n    netbox = Mock()\n    netbox.ip = '10.0.0.1'\n    netbox.type.get_enterprise_id.return_value = VENDOR_ID_JUNIPER_NETWORKS_INC\n    netbox.interfaces = [interface1_mock, interface2_mock]\n    yield netbox\n\n\n@pytest.fixture()\ndef profile_mock():\n    \"\"\"Create management profile model mock object\"\"\"\n    profile = Mock()\n    profile.protocol = manage.ManagementProfile.PROTOCOL_NAPALM\n    profile.PROTOCOL_NAPALM = manage.ManagementProfile.PROTOCOL_NAPALM\n    profile.configuration = {\"driver\": \"mock\"}\n    yield profile\n\n\n@pytest.fixture()\ndef handler_mock(netbox_mock, profile_mock):\n    \"\"\"Create management handler mock object\"\"\"\n    juniper = Juniper(netbox=netbox_mock)\n    juniper._profile = profile_mock\n    yield juniper\n\n\n@pytest.fixture()\ndef interface1_mock():\n    interface = Mock()\n    interface.ifname = \"ge-0/0/1\"\n    interface.ifindex = 1\n    yield interface\n\n\n@pytest.fixture()\ndef interface2_mock():\n    interface = Mock()\n    interface.ifname = \"ge-0/0/2\"\n    interface.ifindex = 2\n    yield interface\n"
  },
  {
    "path": "tests/unittests/portadmin/napalm/juniper_poe_test.py",
    "content": "import pytest\nfrom unittest.mock import Mock\n\nfrom lxml import etree\n\nfrom nav.portadmin.handlers import (\n    POEStateNotSupportedError,\n    POENotSupportedError,\n    XMLParseError,\n)\nfrom nav.portadmin.napalm.juniper import Juniper\n\n\ndef test_returns_correct_state_options(handler_mock):\n    state_options = handler_mock.get_poe_state_options()\n    assert Juniper.POE_ENABLED in state_options\n    assert Juniper.POE_DISABLED in state_options\n\n\ndef test_state_converter_returns_correct_states(handler_mock):\n    assert handler_mock._poe_string_to_state(\"enabled\") == Juniper.POE_ENABLED\n    assert handler_mock._poe_string_to_state(\"disabled\") == Juniper.POE_DISABLED\n\n\ndef test_state_converter_raises_error_for_invalid_states(handler_mock):\n    with pytest.raises(POEStateNotSupportedError):\n        handler_mock._poe_string_to_state(\"invalid_state\")\n\n\nclass TestGetPoeStates:\n    def test_interfaces_from_db_is_used_if_input_is_none(self, handler_mock, xml_bulk):\n        expected_interfaces = handler_mock.netbox.interfaces\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_bulk)\n        return_dict = handler_mock.get_poe_states()\n        for interface in expected_interfaces:\n            assert interface.ifname in return_dict\n\n    def test_interfaces_from_db_is_used_if_input_is_empty(self, handler_mock, xml_bulk):\n        expected_interfaces = handler_mock.netbox.interfaces\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_bulk)\n        return_dict = handler_mock.get_poe_states([])\n        for interface in expected_interfaces:\n            assert interface.ifname in return_dict\n\n    def test_returns_empty_dict_if_no_input_and_no_interfaces_in_db(\n        self, handler_mock, xml_bulk\n    ):\n        handler_mock.netbox.interfaces = []\n        return_dict = handler_mock.get_poe_states()\n        assert return_dict == {}\n\n    def test_returns_correct_state_if_input_has_one_interface(\n        self, handler_mock, xml, interface1_mock\n    ):\n        handler_mock._get_poe_interface_information = Mock(return_value=xml)\n        return_dict = handler_mock.get_poe_states([interface1_mock])\n        assert return_dict[interface1_mock.ifname] == handler_mock.POE_ENABLED\n\n    def test_returns_correct_states_if_input_has_multiple_interfaces(\n        self, handler_mock, xml_bulk, interface1_mock, interface2_mock\n    ):\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_bulk)\n        return_dict = handler_mock.get_poe_states([interface1_mock, interface2_mock])\n        assert return_dict[interface1_mock.ifname] == Juniper.POE_ENABLED\n        assert return_dict[interface2_mock.ifname] == Juniper.POE_DISABLED\n\n    def test_returns_none_for_single_interface_that_does_not_support_poe(\n        self, handler_mock, interface1_mock\n    ):\n        handler_mock._get_single_poe_state = Mock(side_effect=POENotSupportedError)\n        return_dict = handler_mock.get_poe_states([interface1_mock])\n        assert return_dict[interface1_mock.ifname] is None\n\n    def test_returns_none_for_multiple_interfaces_that_does_not_support_poe(\n        self, handler_mock, interface1_mock, interface2_mock\n    ):\n        bulk_return_dict = {interface1_mock.ifname: None, interface2_mock.ifname: None}\n        handler_mock._get_poe_states_bulk = Mock(return_value=bulk_return_dict)\n        return_dict = handler_mock.get_poe_states([interface1_mock, interface2_mock])\n        assert return_dict[interface1_mock.ifname] is None\n        assert return_dict[interface2_mock.ifname] is None\n\n\nclass TestGetSinglePoeState:\n    def test_returns_correct_state_for_interface_that_exists_in_xml_response(\n        self, handler_mock, xml, interface1_mock\n    ):\n        handler_mock._get_poe_interface_information = Mock(return_value=xml)\n        state = handler_mock._get_single_poe_state(interface1_mock)\n        assert state == Juniper.POE_ENABLED\n\n    def test_raises_exception_if_no_interfaces_in_xml(\n        self, handler_mock, interface1_mock, xml_empty\n    ):\n        handler_mock._get_poe_interface_information = Mock(return_value=xml_empty)\n        with pytest.raises(POENotSupportedError):\n            handler_mock._get_single_poe_state(interface1_mock)\n\n    def test_raises_exception_if_multiple_interfaces_in_xml(\n        self, handler_mock, interface1_mock, xml_bulk_wrong_format\n    ):\n        handler_mock._get_poe_interface_information = Mock(\n            return_value=xml_bulk_wrong_format\n        )\n        with pytest.raises(XMLParseError):\n            handler_mock._get_single_poe_state(interface1_mock)\n\n\nclass TestGetPoeStatesBulk:\n    def test_returns_correct_states(\n        self, handler_mock, xml_bulk, interface1_mock, interface2_mock\n    ):\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_bulk)\n        states = handler_mock._get_poe_states_bulk([interface1_mock, interface2_mock])\n        assert states[interface1_mock.ifname] == Juniper.POE_ENABLED\n        assert states[interface2_mock.ifname] == Juniper.POE_DISABLED\n\n    def test_maps_interface_to_none_if_poe_not_supported(self, handler_mock, xml_bulk):\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_bulk)\n        if_mock = Mock()\n        if_mock.ifname == \"random_if\"\n        if_mock.ifindex = 0\n        states = handler_mock._get_poe_states_bulk([if_mock])\n        assert states[if_mock.ifname] is None\n\n    def test_returns_none_values_if_no_interfaces_in_xml(\n        self, handler_mock, interface1_mock, interface2_mock, xml_empty\n    ):\n        handler_mock._get_all_poe_interface_information = Mock(return_value=xml_empty)\n        return_dict = handler_mock._get_poe_states_bulk(\n            [interface1_mock, interface2_mock]\n        )\n        assert return_dict[interface1_mock.ifname] is None\n        assert return_dict[interface2_mock.ifname] is None\n\n\n@pytest.fixture()\ndef xml(interface1_mock):\n    \"\"\"Creates a ElementTree containing poe information for one interface\"\"\"\n    tree_string = f\"\"\"\n        <poe>\n            <interface-information-detail>\n                <interface-name-detail>{interface1_mock.ifname}</interface-name-detail>\n                <interface-enabled-detail>Enabled</interface-enabled-detail>\n            </interface-information-detail>\n        </poe>\"\"\"\n    tree = etree.fromstring(tree_string)\n    yield tree\n\n\n@pytest.fixture()\ndef xml_bulk_wrong_format(interface1_mock, interface2_mock):\n    \"\"\"\n    Creates a ElementTree with the format meant for a single interface in the response,\n    but it contains poe information for two interfaces\n    \"\"\"\n    tree_string = f\"\"\"\n        <poe>\n            <interface-information-detail>\n                <interface-name-detail>{interface1_mock.ifname}</interface-name-detail>\n                <interface-enabled-detail>Enabled</interface-enabled-detail>\n            </interface-information-detail>\n            <interface-information-detail>\n                <interface-name-detail>{interface2_mock.ifname}</interface-name-detail>\n                <interface-enabled-detail>Enabled</interface-enabled-detail>\n            </interface-information-detail>\n        </poe>\"\"\"\n    tree = etree.fromstring(tree_string)\n    yield tree\n\n\n@pytest.fixture()\ndef xml_bulk(interface1_mock, interface2_mock):\n    \"\"\"Creates a ElementTree containing poe information for two interfaces\"\"\"\n    tree_string = f\"\"\"\n        <poe>\n            <interface-information>\n                <interface-name>{interface1_mock.ifname}</interface-name>\n                <interface-enabled>Enabled</interface-enabled>\n            </interface-information>\n            <interface-information>\n                <interface-name>{interface2_mock.ifname}</interface-name>\n                <interface-enabled>Disabled</interface-enabled>\n            </interface-information>\n        </poe>\"\"\"\n    tree = etree.fromstring(tree_string)\n    yield tree\n\n\n@pytest.fixture()\ndef xml_empty():\n    \"\"\"Creates a ElementTree containing no poe state for any interface\"\"\"\n    tree_string = \"\"\"\n        <poe>\n        </poe>\"\"\"\n    tree = etree.fromstring(tree_string)\n    yield tree\n"
  },
  {
    "path": "tests/unittests/portadmin/napalm/juniper_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport napalm\nimport pytest\nfrom unittest.mock import Mock, patch\n\nfrom jnpr.junos.exception import RpcError\n\nfrom nav.enterprise.ids import VENDOR_ID_RESERVED\nfrom nav.portadmin.handlers import (\n    DeviceNotConfigurableError,\n    ProtocolError,\n)\nfrom nav.portadmin.napalm.juniper import wrap_unhandled_rpc_errors, Juniper\n\n\nclass TestWrapUnhandledRpcErrors:\n    def test_rpcerrors_should_become_protocolerrors(self):\n        @wrap_unhandled_rpc_errors\n        def wrapped_function():\n            raise RpcError(\"bogus\")\n\n        with pytest.raises(ProtocolError):\n            wrapped_function()\n\n    def test_non_rpcerrors_should_pass_through(self):\n        @wrap_unhandled_rpc_errors\n        def wrapped_function():\n            raise TypeError(\"bogus\")\n\n        with pytest.raises(TypeError):\n            wrapped_function()\n\n\nclass TestJuniper:\n    def test_juniper_device_returns_device_connection(self, handler_mock):\n        driver = napalm.get_network_driver('mock')\n        device = driver(\n            hostname='foo',\n            username='user',\n            password='pass',\n            optional_args={},\n        )\n        device.open()\n        assert handler_mock.device\n\n    def test_juniper_device_raises_error_if_vendor_not_juniper(\n        self, netbox_mock, profile_mock\n    ):\n        netbox_mock.type.get_enterprise_id.return_value = VENDOR_ID_RESERVED\n        juniper = Juniper(netbox=netbox_mock)\n        juniper._profile = profile_mock\n\n        with pytest.raises(DeviceNotConfigurableError):\n            juniper.device\n\n    def test_juniper_device_raises_error_if_no_connected_profile(self, netbox_mock):\n        juniper = Juniper(netbox=netbox_mock)\n        netbox_mock.profiles.filter.return_value.first.return_value = None\n\n        with pytest.raises(DeviceNotConfigurableError):\n            juniper.device\n\n    @patch('nav.models.manage.Vlan.objects', Mock(return_value=[]))\n    def test_get_netbox_vlans_should_ignore_vlans_with_non_integer_tags(self):\n        \"\"\"Regression test for #2452\"\"\"\n\n        class MockedJuniperHandler(Juniper):\n            @property\n            def vlans(self):\n                \"\"\"Mock a VLAN table response from the device\"\"\"\n                return [Mock(tag='NA'), Mock(tag='10')]\n\n        m = MockedJuniperHandler(Mock())\n        assert len(m.get_netbox_vlans()) == 1\n"
  },
  {
    "path": "tests/unittests/portadmin/portadmin_poe_cisco_test.py",
    "content": "from mock import Mock, patch\n\nimport pytest\n\nfrom nav.portadmin.snmp.cisco import Cisco\nfrom nav.portadmin.handlers import POEStateNotSupportedError\nfrom nav.models import manage\n\n\nclass TestGetPoeStateOptions:\n    def test_returns_correct_options(self, handler_cisco):\n        state_options = handler_cisco.get_poe_state_options()\n        assert Cisco.POE_AUTO in state_options\n        assert Cisco.POE_STATIC in state_options\n        assert Cisco.POE_LIMIT in state_options\n        assert Cisco.POE_DISABLE in state_options\n\n\nclass TestGetPoeState:\n    @pytest.mark.usefixtures('poeport_get_mock')\n    def test_should_raise_exception_if_unknown_poe_state(self, handler_cisco):\n        handler_cisco._query_netbox = Mock(return_value=76)\n        interface = Mock(ifname=\"interface\")\n        with pytest.raises(POEStateNotSupportedError):\n            handler_cisco.get_poe_states([interface])\n\n    @pytest.mark.usefixtures('poeport_get_mock_error')\n    def test_dict_should_give_none_if_interface_does_not_have_poeport(\n        self, handler_cisco\n    ):\n        interface = Mock(ifname=\"interface\")\n        states = handler_cisco.get_poe_states([interface])\n        assert states[interface.ifname] is None\n\n    @pytest.mark.usefixtures('poeport_get_mock')\n    def test_dict_should_give_none_if_interface_does_not_support_poe(\n        self, handler_cisco\n    ):\n        handler_cisco._query_netbox = Mock(return_value=None)\n        interface = Mock(ifname=\"interface\")\n        states = handler_cisco.get_poe_states([interface])\n        assert states[interface.ifname] is None\n\n    @pytest.mark.usefixtures('poeport_get_mock')\n    def test_returns_correct_poe_state(self, handler_cisco):\n        expected_state = Cisco.POE_AUTO\n        handler_cisco._query_netbox = Mock(return_value=expected_state.state)\n        interface = Mock(ifname=\"interface\")\n        state = handler_cisco.get_poe_states([interface])\n        assert state[interface.ifname] == expected_state\n\n    @pytest.mark.usefixtures('poeport_get_mock')\n    def test_use_interfaces_from_db_if_empty_interfaces_arg(self, handler_cisco):\n        expected_state = Cisco.POE_AUTO\n        handler_cisco._query_netbox = Mock(return_value=expected_state.state)\n        interface = Mock(ifname=\"interface\")\n        handler_cisco.netbox.interfaces = [interface]\n        state = handler_cisco.get_poe_states()\n        assert interface.ifname in state\n\n\n@pytest.fixture()\ndef poeport_get_mock():\n    with patch(\"nav.portadmin.snmp.cisco.manage.POEPort.objects.get\") as get_mock:\n        poegroup_mock = Mock(index=1)\n        poeport_mock = Mock(poegroup=poegroup_mock, index=1)\n        get_mock.return_value = poeport_mock\n        yield get_mock\n\n\n@pytest.fixture()\ndef poeport_get_mock_error():\n    with patch(\"nav.portadmin.snmp.cisco.manage.POEPort.objects.get\") as get_mock:\n        get_mock.side_effect = manage.POEPort.DoesNotExist\n        yield get_mock\n"
  },
  {
    "path": "tests/unittests/portadmin/portadmin_test.py",
    "content": "from mock import Mock\n\nfrom nav.oids import OID\nfrom nav.portadmin.management import ManagementFactory\nfrom nav.portadmin.snmp.base import SNMPHandler\nfrom nav.portadmin.snmp.hp import HP\nfrom nav.portadmin.snmp.cisco import Cisco\n\n\nclass TestPortadminManagementFactory:\n    def test_get_hp(self, netbox_hp):\n        handler = ManagementFactory.get_instance(netbox_hp)\n        assert handler is not None, \"Could not get handler-object\"\n        assert isinstance(handler, HP), \"Wrong handler-type\"\n\n    def test_get_cisco(self, netbox_cisco):\n        handler = ManagementFactory.get_instance(netbox_cisco)\n        assert handler is not None, \"Could not get handler-object\"\n        assert isinstance(handler, Cisco), \"Wrong handler-type\"\n\n    def test_when_device_is_cisco_smb_switch_it_should_return_generic_snmp_handler(\n        self, netbox_cisco_smb\n    ):\n        handler = ManagementFactory.get_instance(netbox_cisco_smb)\n        assert handler is not None, \"Could not get handler-object\"\n        assert type(handler) is SNMPHandler, \"Wrong handler-type\"\n\n\nclass TestPortadminResponseHP:\n    def test_get_vlan_hp(self, handler_hp):\n        # get hold of the read-only Snmp-object\n        snmp_read_only_handler = handler_hp._get_read_only_handle()\n        # replace get-method on Snmp-object with a mock-method\n        # this get-method returns a vlan-number\n        snmp_read_only_handler.get = Mock(return_value=666)\n        ifc = Mock(baseport=1)\n        assert handler_hp.get_interface_native_vlan(ifc) == 666, \"getVlan-test failed\"\n        snmp_read_only_handler.get.assert_called_with(\n            OID('.1.3.6.1.2.1.17.7.1.4.5.1.1.1')\n        )\n\n    def test_get_ifaliases_hp(self, handler_hp):\n        # get hold of the read-only Snmp-object\n        snmp_read_only_handler = handler_hp._get_read_only_handle()\n        # replace get-method on Snmp-object with a mock-method\n        # for getting all IfAlias\n        walkdata = [('.1', b'hjalmar'), ('.2', b'snorre'), ('.3', b'bjarne')]\n        expected = {1: 'hjalmar', 2: 'snorre', 3: 'bjarne'}\n        snmp_read_only_handler.bulkwalk = Mock(return_value=walkdata)\n        assert handler_hp._get_all_ifaliases() == expected, \"getAllIfAlias failed.\"\n\n    def test_set_ifalias_hp(self, handler_hp):\n        # get hold of the read-write Snmp-object\n        snmp_read_only_handler = handler_hp._get_read_write_handle()\n        # replace set-method on Snmp-object with a mock-method\n        # all set-methods return None\n        snmp_read_only_handler.set = Mock(return_value=None)\n        interface = Mock()\n        interface.ifindex = 1\n        assert handler_hp.set_interface_description(interface, \"punkt1\") is None, (\n            \"setIfAlias failed\"\n        )\n\n\nclass TestPortadminResponseCisco:\n    def test_get_vlan_cisco(self, handler_cisco):\n        # get hold of the read-only Snmp-object\n        snmp_read_only_handler = handler_cisco._get_read_only_handle()\n        # replace get-method on Snmp-object with a mock-method\n        # this get-method returns a vlan-number\n        snmp_read_only_handler.get = Mock(return_value=77)\n        ifc = Mock(ifindex=1)\n        assert handler_cisco.get_interface_native_vlan(ifc) == 77, \"getVlan-test failed\"\n        snmp_read_only_handler.get.assert_called_with('1.3.6.1.4.1.9.9.68.1.2.2.1.2.1')\n\n    def test_get_ifaliases_cisco(self, handler_cisco):\n        # get hold of the read-only Snmp-object\n        snmp_read_only_handler = handler_cisco._get_read_only_handle()\n        # replace get-method on Snmp-object with a mock-method\n        # for getting all IfAlias\n        walkdata = [('.1', b'jomar'), ('.2', b'knut'), ('.3', b'hjallis')]\n        expected = {1: 'jomar', 2: 'knut', 3: 'hjallis'}\n        snmp_read_only_handler.bulkwalk = Mock(return_value=walkdata)\n        assert handler_cisco._get_all_ifaliases() == expected, \"getAllIfAlias failed.\"\n"
  },
  {
    "path": "tests/unittests/portadmin/portadmin_util_test.py",
    "content": "\"\"\"Testing\"\"\"\n\nimport unittest\nfrom mock import Mock\nfrom nav.web.portadmin.utils import (\n    find_allowed_vlans_for_user,\n    find_vlans_in_org,\n    filter_vlans,\n)\nfrom nav.portadmin.vlan import FantasyVlan\n\n\nclass TestPortAdminUtil(unittest.TestCase):\n    \"\"\"Test PortAdmin util functions\"\"\"\n\n    def setUp(self):\n        \"\"\"Pre-test setup\"\"\"\n        self.vlan1 = Mock()\n        self.vlan1.vlan = 1\n\n        self.vlan2 = Mock()\n        self.vlan2.vlan = 2\n\n        self.vlan3 = Mock()\n        self.vlan3.vlan = 3\n\n        self.org1 = Mock()\n        self.org2 = Mock()\n        self.org3 = Mock()\n\n        self.org1.vlans.all.return_value = [self.vlan1]\n        self.org1.child_organizations.all.return_value = [self.org2]\n\n        self.org2.vlans.all.return_value = [self.vlan2]\n        self.org2.child_organizations.all.return_value = [self.org3]\n\n        self.org3.vlans.all.return_value = [self.vlan3]\n        self.org3.child_organizations.all.return_value = []\n\n    def test_find_vlans_in_org_no_children(self):\n        \"\"\"Should return all vlans in this org\"\"\"\n        self.assertEqual(find_vlans_in_org(self.org3), [FantasyVlan(self.vlan3.vlan)])\n\n    def test_find_vlans_in_org_one_child(self):\n        \"\"\"Should return all vlans in this org and child org\"\"\"\n        self.assertEqual(\n            sorted(find_vlans_in_org(self.org2)),\n            sorted([FantasyVlan(self.vlan3.vlan), FantasyVlan(self.vlan2.vlan)]),\n        )\n\n    def test_find_vlans_in_org_two_children(self):\n        \"\"\"Should return all vlans in this org and all children orgs\"\"\"\n        self.assertEqual(\n            sorted(find_vlans_in_org(self.org1)),\n            sorted(\n                [\n                    FantasyVlan(self.vlan3.vlan),\n                    FantasyVlan(self.vlan2.vlan),\n                    FantasyVlan(self.vlan1.vlan),\n                ]\n            ),\n        )\n\n    def test_find_vlans_in_org_no_duplicates(self):\n        \"\"\"Should filter duplicates\"\"\"\n        self.org3.vlans.all.return_value = [self.vlan3, self.vlan2]\n        self.assertEqual(\n            sorted(find_vlans_in_org(self.org1)),\n            sorted(\n                [\n                    FantasyVlan(self.vlan3.vlan),\n                    FantasyVlan(self.vlan2.vlan),\n                    FantasyVlan(self.vlan1.vlan),\n                ]\n            ),\n        )\n\n    def test_find_vlans_in_org_filter_nonevalues(self):\n        \"\"\"Should filter vlans with no vlan value\"\"\"\n        self.vlan1.vlan = None\n        self.assertEqual(\n            sorted(find_vlans_in_org(self.org1)),\n            sorted([FantasyVlan(self.vlan3.vlan), FantasyVlan(self.vlan2.vlan)]),\n        )\n\n    def test_find_allowed_vlans_for_user(self):\n        \"\"\"Should return all vlans for this users org and child orgs\"\"\"\n\n        account = Mock()\n        account.organizations.all.return_value = [self.org1]\n\n        self.assertEqual(\n            sorted(find_allowed_vlans_for_user(account)),\n            sorted(\n                [\n                    FantasyVlan(self.vlan1.vlan),\n                    FantasyVlan(self.vlan2.vlan),\n                    FantasyVlan(self.vlan3.vlan),\n                ]\n            ),\n        )\n\n    def test_filter_vlans_add(self):\n        vlans_from_request = [1, 2, 3]\n        old_trunked_vlans = [3]  # Vlans from querying the netbox\n        allowed_vlans = range(1, 10)\n\n        self.assertEqual(\n            filter_vlans(vlans_from_request, old_trunked_vlans, allowed_vlans),\n            [1, 2, 3],\n        )\n\n    def test_filter_vlans_add_deny(self):\n        \"\"\"Only add vlans that are in allowed vlans\"\"\"\n        vlans_from_request = [1, 2, 3]\n        old_trunked_vlans = [3]  # Vlans from querying the netbox\n        allowed_vlans = [1]\n\n        self.assertEqual(\n            filter_vlans(vlans_from_request, old_trunked_vlans, allowed_vlans), [1, 3]\n        )\n\n    def test_filter_vlans_remove(self):\n        \"\"\"It should be possible to remove vlans by not including them\"\"\"\n        vlans_from_request = [1, 2]\n        old_trunked_vlans = [3]\n        allowed_vlans = range(1, 10)\n\n        self.assertEqual(\n            filter_vlans(vlans_from_request, old_trunked_vlans, allowed_vlans), [1, 2]\n        )\n\n    def test_filter_vlans_remove_deny(self):\n        \"\"\"Only remove vlans that are in allowed vlans list\"\"\"\n        vlans_from_request = [2]\n        old_trunked_vlans = [1, 2, 3]\n        allowed_vlans = range(1, 3)\n\n        self.assertEqual(\n            filter_vlans(vlans_from_request, old_trunked_vlans, allowed_vlans), [2, 3]\n        )\n"
  },
  {
    "path": "tests/unittests/portadmin/snmputils_test.py",
    "content": "#\n# Copyright (C) 2013 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for snmp_utils\"\"\"\n\nimport unittest\n\nfrom nav.portadmin.snmp.base import SNMPHandler\nfrom nav.bitvector import BitVector\n\n\nclass SnmpUtilsTest(unittest.TestCase):\n    \"\"\"Tests for snmp_utils\"\"\"\n\n    def test_chunkify(self):\n        vlans = [10, 33, 513, 1023, 1025, 2048, 4095]\n        b = BitVector(512 * b'\\000')\n        for vlan in vlans:\n            b[vlan] = 1\n\n        self.assertEqual(b.get_set_bits(), vlans)\n        first, second, third, fourth = SNMPHandler._chunkify(b, 4)\n\n        self.assertEqual(first.get_set_bits(), [10, 33, 513, 1023])\n        self.assertEqual(second.get_set_bits(), [1])\n        self.assertEqual(third.get_set_bits(), [0])\n        self.assertEqual(fourth.get_set_bits(), [1023])\n"
  },
  {
    "path": "tests/unittests/report/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/report/iptools_test.py",
    "content": "from unittest import TestCase\nfrom IPy import IP\n\nfrom nav.report.IPtools import andIpMask\n\n\nclass IPtoolTest(TestCase):\n    def test_ipv6_andIpMask(self):\n        ip = IP('fe80:1234:5678:9012:a00:27ff:fe8e:df69')\n        mask = IP('fe80:5678::/64')\n        expected = IP('fe80:1230::/64')\n\n        self.assertEqual(andIpMask(ip, mask), expected)\n"
  },
  {
    "path": "tests/unittests/report/util_test.py",
    "content": "\"\"\"Tests for report view utility functions\"\"\"\n\nfrom nav.web.report.views import find_page_range\n\n\nclass TestPageRangeForPage1(object):\n    \"\"\"Tests for find_page_range\"\"\"\n\n    @classmethod\n    def setup_class(cls):\n        cls.page_num = 1\n        cls.pages = range(1, 28)\n        cls.result = find_page_range(cls.page_num, cls.pages, 5)\n\n    def test_current_page_is_in_range(self):\n        assert self.page_num in self.result\n\n    def test_returns_num_visible_pages(self):\n        assert len(self.result) == 5\n\n\nclass TestGenericPageRangeCalls(object):\n    def test_except_when_total_is_less(self):\n        result = find_page_range(1, range(1, 3), 3)\n        assert len(result) == 2\n\n    def test_start_at_first_returns_correct_number(self):\n        result = find_page_range(1, range(1, 11), 5)\n        assert len(result) == 5\n\n    def test_start_at_last_returns_correct_number(self):\n        result = find_page_range(11, range(1, 11), 5)\n        assert len(result) == 5\n\n    def test_page_should_be_center(self):\n        result = find_page_range(3, range(1, 11), 5)\n        assert result[2] == 3\n\n    def test_page_in_middle_of_long_range_should_not_crash(self):\n        result = find_page_range(5, range(1, 11), 5)\n        assert result[2] == 5\n"
  },
  {
    "path": "tests/unittests/seeddb/management_profile_test.py",
    "content": "from nav.web.seeddb.page.management_profile.forms import SnmpV3Form\n\n\nclass TestSnmpv3Form:\n    def test_when_seclevel_is_noauth_then_it_should_not_require_auth_password(self):\n        form = SnmpV3Form(\n            dict(\n                sec_level=\"noAuthNoPriv\",\n                auth_protocol=\"MD5\",\n                sec_name=\"foo\",\n                auth_password=\"\",\n            )\n        )\n        assert form.is_valid()\n\n    def test_when_seclevel_is_auth_then_it_should_require_auth_password(self):\n        form = SnmpV3Form(\n            dict(\n                sec_level=\"authNoPriv\",\n                auth_protocol=\"MD5\",\n                sec_name=\"foo\",\n                auth_password=\"\",\n            )\n        )\n        assert not form.is_valid()\n\n    def test_when_seclevel_is_priv_then_it_should_require_priv_password(self):\n        form = SnmpV3Form(\n            dict(\n                sec_level=\"authPriv\",\n                auth_protocol=\"MD5\",\n                sec_name=\"foo\",\n                auth_password=\"bar\",\n            )\n        )\n        assert not form.is_valid()\n\n    def test_when_seclevel_is_priv_then_it_should_accept_priv_password(self):\n        form = SnmpV3Form(\n            dict(\n                sec_level=\"authPriv\",\n                auth_protocol=\"MD5\",\n                sec_name=\"foo\",\n                auth_password=\"bar\",\n                priv_password=\"cromulent\",\n            )\n        )\n        assert form.is_valid()\n"
  },
  {
    "path": "tests/unittests/seeddb/seeddb_test.py",
    "content": "# -*- coding: utf-8 -*-#\nimport unittest\n\nfrom mock import MagicMock\nfrom nav.web.seeddb.forms import get_prefix, tree_pad, create_choices, BOX_CHARS\n\n\nclass PrefixTest(unittest.TestCase):\n    SPACES = 2 * BOX_CHARS['SPACE']\n    PIPE = BOX_CHARS['VERTICAL'] + BOX_CHARS['SPACE']\n\n    def test_no_ancestors(self):\n        self.assertEqual(get_prefix([]), '')\n\n    def test_should_ignore_first_ancestor(self):\n        self.assertEqual(get_prefix([False]), '')\n\n    def test_should_map_true_to_two_spaces(self):\n        self.assertEqual(get_prefix([False, True]), PrefixTest.SPACES)\n\n    def test_should_map_false_to_pipeish_and_space(self):\n        self.assertEqual(get_prefix([False, False]), PrefixTest.PIPE)\n\n    def test_should_map_several_chars(self):\n        self.assertEqual(\n            get_prefix([False, False, False, False, False]),\n            \"\".join(\n                [PrefixTest.PIPE, PrefixTest.PIPE, PrefixTest.PIPE, PrefixTest.PIPE]\n            ),\n        )\n\n    def test_should_map_mixed_chars(self):\n        self.assertEqual(\n            get_prefix([False, True, False, True, False]),\n            \"\".join(\n                [PrefixTest.SPACES, PrefixTest.PIPE, PrefixTest.SPACES, PrefixTest.PIPE]\n            ),\n        )\n\n\nclass TreePadTest(unittest.TestCase):\n    CORNER = BOX_CHARS['UP_AND_RIGHT'] + BOX_CHARS['SPACE']\n    PIPE = BOX_CHARS['VERTICAL_AND_RIGHT'] + BOX_CHARS['SPACE']\n\n    def setUp(self):\n        self.string = 'string'\n\n    def test_no_ancestors(self):\n        self.assertEqual(tree_pad(self.string, []), self.string)\n\n    def test_one_ancestor_last_child(self):\n        \"\"\"Should only care about its own position\"\"\"\n        self.assertEqual(\n            tree_pad(self.string, [False], last=True), TreePadTest.CORNER + self.string\n        )\n\n    def test_one_ancestor_not_last_child(self):\n        \"\"\"Should only care about its own position\"\"\"\n        self.assertEqual(\n            tree_pad(self.string, [False], last=False), TreePadTest.PIPE + self.string\n        )\n\n    def test_multiple_ancestors(self):\n        result = tree_pad(self.string, [False, True, False, False, True], last=False)\n        self.assertTrue(result.endswith(TreePadTest.PIPE + self.string))\n\n\nclass TestCreateChoices(unittest.TestCase):\n    def my_setup(self, children=None):\n        if children is None:\n            children = []\n\n        root = MagicMock(pk='root')\n        mock_children = MagicMock()\n        mock_children.__iter__ = MagicMock(return_value=iter(children))\n        mock_children.count.return_value = len(children)\n\n        root.get_children.return_value = mock_children\n        self.root = root\n\n    def test_root_node(self):\n        self.my_setup()\n        result = create_choices(self.root, [], is_last_child=True)\n        self.assertEqual(result, [('root', 'root')])\n\n    def test_one_child(self):\n        self.my_setup([MagicMock(pk='child1')])\n\n        result = create_choices(self.root, [], is_last_child=True)\n        self.assertEqual(len(result), 2)\n\n    def test_two_children(self):\n        self.my_setup([MagicMock(pk='child1'), MagicMock(pk='child2')])\n\n        result = create_choices(self.root, [], is_last_child=True)\n        self.assertEqual(len(result), 3)\n\n    def test_two_children_prefix_first(self):\n        self.my_setup([MagicMock(pk='child1'), MagicMock(pk='child2')])\n        result = create_choices(self.root, [], is_last_child=True)\n        self.assertTrue(result[1][1].startswith(TreePadTest.PIPE))\n\n    def test_two_children_prefix_second(self):\n        self.my_setup([MagicMock(pk='child1'), MagicMock(pk='child2')])\n        result = create_choices(self.root, [], is_last_child=True)\n        self.assertTrue(result[2][1].startswith(TreePadTest.CORNER))\n"
  },
  {
    "path": "tests/unittests/smsd/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/smsd/dispatcher_test.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2009 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Unit tests for the dispatcher module.\"\"\"\n\nimport types\n\nimport pytest\n\nfrom nav.smsd import dispatcher\n\n\nclass TestDispatcherHandler(object):\n    \"\"\"Tests for the DispatcherHandler class.\n\n    Uses a subclass of the DispatcherHandler to provide a fake\n    dispatcher loader function.  This loads a faked dispatcher\n    module/class that will cooperate with this unit test.\n\n    \"\"\"\n\n    config = {\n        'main': {'exit_on_permanent_error': 'yes'},\n        'dispatcher': {'dispatcherretry': '30', 'dispatcher1': 'FakeDispatcher'},\n        'FakeDispatcher': {},\n    }\n\n    def test_init_with_simple_config(self):\n        assert FakeDispatcherHandler(self.config)\n\n    def test_empty_message_list(self):\n        handler = FakeDispatcherHandler(self.config)\n        assert handler.sendsms('fakenumber', [])\n\n    def test_dispatcher_exception(self):\n        handler = FakeDispatcherHandler(self.config)\n        with pytest.raises(dispatcher.DispatcherError):\n            handler.sendsms('failure', [])\n\n    def test_dispatcher_unhandled_exception(self):\n        handler = FakeDispatcherHandler(self.config)\n        with pytest.raises(dispatcher.DispatcherError):\n            handler.sendsms('unhandled', [])\n\n\nclass FakeDispatcherHandler(dispatcher.DispatcherHandler):\n    def importbyname(self, name):\n        print(\"import by name: %r\" % name)\n        fakemodule = types.ModuleType('fakedispatcher')\n        fakemodule.FakeDispatcher = FakeDispatcher\n        return fakemodule\n\n\nclass FakeDispatcher(object):\n    def __init__(self, *args, **kwargs):\n        self.lastfailed = None\n        pass\n\n    def sendsms(self, phone, msgs):\n        print(\"got phone %r and msgs %r\" % (phone, msgs))\n        if phone == 'failure':\n            raise dispatcher.DispatcherError('FakeDispatcher failed')\n        elif phone == 'unhandled':\n            raise Exception('This exception should be unknown')\n        return (None, 1, 0, 1, 1)\n"
  },
  {
    "path": "tests/unittests/smsd/gammudispatcher_test.py",
    "content": "# mock/patch/hack/workaround: gammudispatcher normally requires gammu to be\n# installed, but we're only testing functionality from the module that is not\n# dependent on this. If there is no gammu module, we fake it so we can import\n# gammudispather without failures.\nimport pytest\nfrom mock import Mock, patch\n\nfrom nav.smsd.dispatcher import PermanentDispatcherError, DispatcherError\n\ntry:\n    import gammu\nexcept ImportError:\n    import sys\n\n    # Mock a minimum gammu module when one isn't present to patch\n    gammu = sys.modules['gammu'] = type(sys)('gammu')\n    mock_statemachine = Mock(SendSMS=Mock(return_value=42))\n    gammu.StateMachine = Mock(return_value=mock_statemachine)\n    gammu.GSMError = Exception\n\nfrom nav.smsd.gammudispatcher import decode_sms_to_unicode, GammuDispatcher\n\nDUMMY_SENDSMS_ARGS = (\"999999\", [\"Message 1\", \"Message 2\"])\n\n\nclass TestThatDecodeSmsToUnicode:\n    def test_should_decode_ascii_bytes_to_comparable_string(self):\n        sms = 'Hello'\n        unicode_sms = decode_sms_to_unicode(sms)\n        assert sms == unicode_sms\n\n    def test_should_decode_string_to_comparable_string(self):\n        sms = 'A m\\xf8\\xf8se once bit my sister'\n        unicode_sms = decode_sms_to_unicode(sms)\n        assert sms == unicode_sms\n\n    def test_should_decode_utf8_string_properly(self):\n        sms = b'A m\\xc3\\xb8\\xc3\\xb8se once bit my sister'\n        unicode_sms = decode_sms_to_unicode(sms)\n        expected = 'A m\\xf8\\xf8se once bit my sister'\n        assert unicode_sms == expected\n\n\nclass TestThatGammuDispatcher:\n    def test_can_be_initialized(self):\n        assert GammuDispatcher(None)\n\n    @patch('gammu.StateMachine', new=Mock())\n    def test_should_send_sms_without_error(self):\n        dispatcher = GammuDispatcher(None)\n        result = dispatcher.sendsms(*DUMMY_SENDSMS_ARGS)\n        assert result\n\n    def test_should_raise_permanent_error_when_gammu_cannot_read_config(self):\n        mocked_statemachine = Mock(ReadConfig=Mock(side_effect=IOError('Fake')))\n        with patch('gammu.StateMachine') as statemachine:\n            statemachine.return_value = mocked_statemachine\n            dispatcher = GammuDispatcher(None)\n            with pytest.raises(PermanentDispatcherError):\n                dispatcher.sendsms(*DUMMY_SENDSMS_ARGS)\n\n    def test_should_raise_permanent_error_when_gammu_errors_during_init(\n        self, mock_gsm_error\n    ):\n        mocked_statemachine = Mock(Init=Mock(side_effect=mock_gsm_error))\n        with patch('gammu.StateMachine') as statemachine:\n            statemachine.return_value = mocked_statemachine\n            dispatcher = GammuDispatcher(None)\n            with pytest.raises(PermanentDispatcherError):\n                dispatcher.sendsms(*DUMMY_SENDSMS_ARGS)\n\n    def test_should_raise_temporary_when_gammu_send_fails(self, mock_gsm_error):\n        mocked_statemachine = Mock(SendSMS=Mock(side_effect=mock_gsm_error))\n        with patch('gammu.StateMachine') as statemachine:\n            statemachine.return_value = mocked_statemachine\n            dispatcher = GammuDispatcher(None)\n            with pytest.raises(DispatcherError):\n                dispatcher.sendsms(*DUMMY_SENDSMS_ARGS)\n\n\n@pytest.fixture(scope='module')\ndef mock_gsm_error():\n    return gammu.GSMError({\"Where\": Mock(), 'Code': 666, 'Text': Mock()})\n"
  },
  {
    "path": "tests/unittests/snmptrapd/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/snmptrapd/plugin_test.py",
    "content": "from mock import Mock, patch\nimport pytest\nfrom unittest import TestCase\nimport sys\nfrom nav.snmptrapd.plugin import load_handler_modules, ModuleLoadError\n\n\nclass SnmptrapdPluginTest(TestCase):\n    def setUp(self):\n        self.plugin_a = Mock(name='snmptrapd plugin a')\n        self.plugin_a.strip.return_value = 'nav.snmptrapd.handlers.foo'\n\n        self.plugin_b = Mock(name='snmptrapd plguin b')\n        self.plugin_b.strip.return_value = 'nav.snmptrapd.handlers.bar'\n        del self.plugin_b.initialize\n\n        def raise_exception():\n            raise Exception('boom')\n\n        self.bad_plugin = Mock(name='snmptrapd plugin which is bad')\n        self.bad_plugin.strip.return_value = 'nav.snmptrapd.handlers.bad_plugin'\n        self.bad_plugin.initialize = raise_exception\n\n        self.patcher = patch.dict(\n            sys.modules,\n            {\n                'nav.snmptrapd.handlers.foo': self.plugin_a,\n                'nav.snmptrapd.handlers.bar': self.plugin_b,\n                'nav.snmptrapd.handlers.bad_plugin': self.bad_plugin,\n                'nav.snmptrapd.handlers.non_existent': None,\n            },\n        )\n        self.patcher.start()\n\n    def tearDown(self):\n        self.patcher.stop()\n\n    def test_plugin_loader_raises_no_exception_if_plugin_has_initialize_method(self):\n        loader = load_handler_modules([self.plugin_a])\n        assert loader[0] == __import__(\n            'nav.snmptrapd.handlers.foo', globals(), locals(), ['foo']\n        )\n\n        assert hasattr(loader[0], 'initialize')\n\n    def test_plugin_loader_raises_no_exception_if_plugin_has_no_initialize_method(self):\n        loader = load_handler_modules([self.plugin_b])\n        assert loader[0] == __import__(\n            'nav.snmptrapd.handlers.bar', globals(), locals(), ['bar']\n        )\n\n        assert not hasattr(loader[0], 'initialize')\n\n    def test_plugin_loader_calls_initialize_method_if_it_exists(self):\n        loader = load_handler_modules([self.plugin_a])\n\n        assert self.plugin_a.initialize.call_count == 1\n        assert loader[0] == self.plugin_a\n\n    def test_plugin_loads_all_plugins(self):\n        loader = load_handler_modules([self.plugin_a, self.plugin_b])\n\n        assert self.plugin_a.initialize.call_count == 1\n        assert loader == [self.plugin_a, self.plugin_b]\n\n    def test_plugin_raises_module_load_error_on_bad_plugin(self):\n        with pytest.raises(ModuleLoadError):\n            load_handler_modules([self.bad_plugin])\n\n    def test_plugin_raises_module_load_error_import_error(self):\n        with pytest.raises(ModuleLoadError):\n            load_handler_modules(['nav.snmptrapd.handlers.non_existent'])\n"
  },
  {
    "path": "tests/unittests/snmptrapd/weathergoose_test.py",
    "content": "from mock import patch, Mock\nimport pytest\n\nfrom nav.snmptrapd.handlers import weathergoose as wg\n\n\nclass TestWeatherGoose1Class(object):\n    def test_should_not_handle_a_weathergoose2_trap(self):\n        assert not (wg.WeatherGoose1.can_handle('.1.3.6.1.4.1.17373.3.32767.0.10205'))\n\n    def test_should_handle_a_weathergoose1_trap(self):\n        assert wg.WeatherGoose1.can_handle('.1.3.6.1.4.1.17373.0.10205')\n\n    def test_should_map_oid_to_correct_trigger(self):\n        assert (\n            wg.WeatherGoose1.map_oid_to_trigger('.1.3.6.1.4.1.17373.0.10205')\n            == 'cmClimateTempCTRAP'\n        )\n\n    def test_init_should_raise_on_invalid_oid(self):\n        trap = Mock(snmpTrapOID='5')\n        with pytest.raises(Exception):\n            wg.WeatherGoose1(trap, None, None, None)\n\n\nclass Event(dict):\n    def post(self):\n        pass\n\n\n@patch('nav.event.Event', new=Mock(side_effect=Event))\nclass TestWeatherGoose1Trap(object):\n    trap = Mock(snmpTrapOID='.1.3.6.1.4.1.17373.0.10205')\n    TRIP_TYPE_HIGH = 2\n    goosename = 'cleese'\n    temperature = 32\n    trap.varbinds = {\n        '.1.3.6.1.4.1.17373.2.1.6': TRIP_TYPE_HIGH,\n        '.1.3.6.1.4.1.17373.2.2.1.3.1': goosename,\n        '.1.3.6.1.4.1.17373.2.2.1.5.1': temperature,\n    }\n\n    def test_init_should_parse_trap_without_error(self):\n        assert wg.WeatherGoose1(self.trap, None, None, None)\n\n    def test_should_find_correct_alert_type(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose._get_alert_type() == 'cmClimateTempCTRAP'\n\n    def test_should_find_correct_goosename(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose.goosename == self.goosename\n\n    def test_should_find_climate_values(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose.climatevalue == self.temperature\n\n    def test_should_find_triptype_high(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose.triptype == 'High'\n\n    def test_event_event_post(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose.post_event()\n\n    def test_should_find_correct_sensorname(self):\n        goose = wg.WeatherGoose1(self.trap, None, None, None)\n        assert goose._get_sensorname() == 'cleese'\n\n\nclass TestWeatherGoose2(object):\n    def test_should_not_handle_a_weathergoose1_trap(self):\n        assert not (wg.WeatherGoose2.can_handle('.1.3.6.1.4.1.17373.0.10205'))\n\n    def test_should_handle_a_weathergoose2_trap(self):\n        assert wg.WeatherGoose2.can_handle('.1.3.6.1.4.1.17373.3.32767.0.10205')\n\n    def test_should_handle_a_weathergoose2_remote_trap(self):\n        assert wg.WeatherGoose2.can_handle('.1.3.6.1.4.1.17373.3.32767.0.10405')\n\n    def test_should_map_oid_to_correct_trigger(self):\n        assert (\n            wg.WeatherGoose2.map_oid_to_trigger('.1.3.6.1.4.1.17373.3.32767.0.10205')\n            == 'cmClimateTempCNOTIFY'\n        )\n\n    def test_should_map_oid_to_correct_trigger_for_remote(self):\n        assert (\n            wg.WeatherGoose2.map_oid_to_trigger('.1.3.6.1.4.1.17373.3.32767.0.10405')\n            == 'cmTempSensorTempCNOTIFY'\n        )\n\n    def test_should_find_correct_alert_type(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10205'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {'.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH}\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_alert_type() == 'cmClimateTempCNOTIFY'\n\n    def test_should_find_correct_alert_type_remote(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10405'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {'.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH}\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_alert_type() == 'cmTempSensorTempCNOTIFY'\n\n    def test_should_add_subid_when_alarminstance_defined(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10205'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {\n            '.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH,\n            '.1.3.6.1.4.1.17373.3.1.12.0': 4,\n        }\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_subid() == 4\n\n    def test_should_not_add_subid_when_not_in_varbinds(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10205'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {\n            '.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH,\n        }\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_subid() is None\n\n    def test_should_find_correct_value_from_external_trap(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10405'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {\n            '.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH,\n            '.1.3.6.1.4.1.17373.3.4.1.5.1': 16,\n        }\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_trigger_values()[0] == 16\n\n    def test_should_find_correct_internal_sensorname(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10205'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {\n            '.1.3.6.1.4.1.17373.3.1.3.0': 'SuperGoose II',\n            '.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH,\n            '.1.3.6.1.4.1.17373.3.2.1.3.1': 'SuperDuperGoose II',\n        }\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_sensorname() == 'SuperDuperGoose II'\n        assert goose.goosename == 'SuperGoose II'\n\n    def test_should_find_correct_external_sensorname(self):\n        trap = Mock('trap')\n        trap.snmpTrapOID = '.1.3.6.1.4.1.17373.3.32767.0.10405'\n        TRIP_TYPE_HIGH = 2\n        trap.varbinds = {\n            '.1.3.6.1.4.1.17373.3.1.3.0': 'SuperGoose II',\n            '.1.3.6.1.4.1.17373.3.1.6.0': TRIP_TYPE_HIGH,\n            '.1.3.6.1.4.1.17373.3.4.1.3.1': 'SuperDuperGoose II',\n        }\n        goose = wg.WeatherGoose2(trap, None, None, None)\n        assert goose._get_sensorname() == 'SuperDuperGoose II'\n        assert goose.goosename == 'SuperGoose II'\n\n\nclass TestGeistWeatherGoose(object):\n    def test_should_handle_a_geist_weathergoose_trap(self):\n        assert wg.GeistWeatherGoose.can_handle('.1.3.6.1.4.1.21239.2.32767.0.10205')\n\n    def test_should_handle_a_geist_weathergoose_remote_trap(self):\n        assert wg.GeistWeatherGoose.can_handle('.1.3.6.1.4.1.21239.2.32767.0.10405')\n"
  },
  {
    "path": "tests/unittests/statemon/conftest.py",
    "content": "import os\nimport pytest\n\n\n@pytest.fixture\ndef modulo_pid():\n    \"\"\"Returns this process' PID number, modulo 2^16. Because that's what pping uses\n    to produce ping packet IDs\n    \"\"\"\n    yield os.getpid() % 2**16\n"
  },
  {
    "path": "tests/unittests/statemon/db_test.py",
    "content": "# Copyright (C) 2020 Universitetet i Oslo\n# ruff: noqa E501\n\nfrom nav.statemon.db import db\nfrom unittest import TestCase\n\n\nclass DBTestcase(TestCase):\n    def test_build_host_query(self):\n        db_instance = db()\n\n        # Make groups\n        groups_included = [\"INC_GROUP_ONE\", \"INC_GROUP_TWO\"]\n        groups_excluded = [\"EXC_GROUP_ONE\", \"EXC_GROUP_TWO\"]\n\n        # Make query string for both groups\n        query_both_groups = \"\"\"SELECT distinct(netbox.netboxid), sysname, ip, up FROM netbox\n                   LEFT JOIN netboxcategory USING (netboxid) WHERE netboxcategory.category IN %s AND (netboxcategory.category IS NULL OR netboxcategory.category NOT IN %s)\"\"\"\n\n        # make query string for only included groups\n        query_included_groups = \"\"\"SELECT distinct(netbox.netboxid), sysname, ip, up FROM netbox\n                   LEFT JOIN netboxcategory USING (netboxid) WHERE netboxcategory.category IN %s\"\"\"\n\n        # make query string for only excluded groups\n        query_excluded_groups = \"\"\"SELECT distinct(netbox.netboxid), sysname, ip, up FROM netbox\n                   LEFT JOIN netboxcategory USING (netboxid) WHERE (netboxcategory.category IS NULL OR netboxcategory.category NOT IN %s)\"\"\"\n\n        # make query string for no groups\n        query_no_groups = \"\"\"SELECT distinct(netbox.netboxid), sysname, ip, up FROM netbox\n                   LEFT JOIN netboxcategory USING (netboxid)\"\"\"\n\n        # Both Groups Checks\n        query, params = db_instance.build_host_query(\n            groups_included=groups_included, groups_excluded=groups_excluded\n        )\n        # Check if the params of the query are correct\n        self.assertListEqual(params, [tuple(groups_included), tuple(groups_excluded)])\n        # Check the query string is correct\n        self.assertEqual(query, query_both_groups)\n\n        # Included Groups Checks\n        query, params = db_instance.build_host_query(groups_included=groups_included)\n        # Check if the params of the query are correct\n        self.assertListEqual(params, [tuple(groups_included)])\n        # Check the query string is correct\n        self.assertEqual(query, query_included_groups)\n\n        # Excluded Groups Checks\n        query, params = db_instance.build_host_query(groups_excluded=groups_excluded)\n        # Check if the params of the query are correct\n        self.assertListEqual(params, [tuple(groups_excluded)])\n        # Check the query string is correct\n        self.assertEqual(query, query_excluded_groups)\n\n        # No Groups Checks\n        query, params = db_instance.build_host_query()\n        # Check if the params of the query are correct\n        self.assertListEqual(params, [])\n        # Check the query string is correct\n        self.assertEqual(query, query_no_groups)\n"
  },
  {
    "path": "tests/unittests/statemon/host_test.py",
    "content": "from nav.statemon.megaping import Host\nfrom nav.statemon.icmppacket import PacketV4, PacketV6\n\n\nclass TestHost:\n    \"\"\"Tests for the Host class\"\"\"\n\n    def test_make_v4_packet(self, modulo_pid):\n        \"\"\"Test to make a v4 packet\"\"\"\n        host = Host('127.0.0.1')\n        assert not host.is_v6()\n\n        assert host.packet\n        assert isinstance(host.packet, PacketV4)\n\n        packet, cookie = host.make_packet(64)\n\n        assert packet\n        assert cookie\n        assert len(packet) == 64\n        assert len(cookie) == 16\n\n        assert host.packet.sequence == 0\n        assert host.packet.id, modulo_pid\n\n    def test_make_v6_packet(self, modulo_pid):\n        \"\"\"Test to make a v6 packet\"\"\"\n        host = Host('2001:701::FFFF')\n        assert host.is_v6()\n\n        assert host.packet\n        assert isinstance(host.packet, PacketV6)\n\n        packet, cookie = host.make_packet(64)\n\n        assert packet\n        assert cookie\n        assert len(packet) == 64\n        assert len(cookie) == 16\n\n        assert host.packet.sequence == 0\n        assert host.packet.id == modulo_pid\n\n    def test_ip_validation(self):\n        \"\"\"Test the IP valdidation helper methods for both v6 & v4\"\"\"\n        assert Host('129.241.105.210').is_valid_ipv4()\n        assert not Host('129.241.105.256').is_valid_ipv4()\n\n        assert Host('2001:701::FFFF').is_valid_ipv6()\n        assert not Host('127.0.0.1').is_valid_ipv6()\n"
  },
  {
    "path": "tests/unittests/statemon/icmp_test.py",
    "content": "from nav.statemon.icmppacket import PacketV6, PacketV4, inet_checksum\n\n\nclass TestICMPPacket:\n    def test_assemble_v6_packet_echo(self, modulo_pid):\n        # Make packet\n        packet = PacketV6()\n        packet.data = b'Testing'\n        packet.id = modulo_pid\n        packet.sequence = 3\n        packet = packet.assemble()\n\n        # Make Packet object which disassembles the raw packet\n        v6_packet = PacketV6(packet, False)\n\n        # Check if ICMP_ECHO\n        assert v6_packet.type == PacketV6.ICMP_ECHO\n\n        # Check sequence number\n        assert v6_packet.sequence == 3\n\n        # Check payload\n        assert v6_packet.data == b'Testing'\n\n        # Check if Id of the packet is process id\n        assert modulo_pid == v6_packet.id\n\n        # Check if the checksum is correct\n        unpacked_packet = packet[v6_packet.packet_slice]\n        assert inet_checksum(unpacked_packet) == 0\n\n    def test_assemble_v4_packet_echo(self, modulo_pid):\n        # Make packet\n        packet = PacketV4()\n        packet.data = b'Testing'\n        packet.id = modulo_pid\n        packet.sequence = 3\n        packet = packet.assemble()\n\n        # Mocking the IP header and prepending it to the packet so disassembling of\n        # packet works\n        IP_header = b'\\x00' * 20\n        packet = IP_header + packet\n\n        # Make Packet object which disassembles the raw packet\n        v4_packet = PacketV4(packet, False)\n\n        # Check if ICMP_ECHO\n        assert v4_packet.type == PacketV4.ICMP_ECHO\n\n        # Check sequence number\n        assert v4_packet.sequence == 3\n\n        # Check if Id of the packet is process id\n        assert modulo_pid == v4_packet.id\n\n        # Check payload\n        assert v4_packet.data == b'Testing'\n\n        # Check if the checksum is correct\n        unpacked_packet = packet[v4_packet.packet_slice]\n        assert inet_checksum(unpacked_packet) == 0\n"
  },
  {
    "path": "tests/unittests/statemon/runqueue_test.py",
    "content": "# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nimport mock\nimport pytest\n\nfrom nav.statemon.RunQueue import _RunQueue, TerminateException\n\n\n@mock.patch('nav.statemon.RunQueue.config')\nclass TestRunQueue(object):\n    \"\"\"Tests for nav.statemon.RunQueue._RunQueue class\"\"\"\n\n    def test_deq_should_wait_if_queue_is_empty(self, config):\n        rq = _RunQueue()\n        rq.await_work.wait = mock.Mock(side_effect=RuntimeError)\n        with pytest.raises(RuntimeError):\n            rq.deq()\n        rq.await_work.wait.assert_called_once_with()\n\n    @mock.patch('time.time')\n    def test_queue_is_read_in_correct_order(self, mocktime, config):\n        rq = _RunQueue()\n        t = [100]\n        mocktime.side_effect = lambda: t[0]\n\n        def advance_time(x):\n            t[0] += x\n\n        rq.await_work.wait = mock.Mock(side_effect=advance_time)\n        rq._start_worker_if_needed = mock.Mock()\n        rq.enq(2)\n        rq.enq((t[0] + 100, 3))\n        rq.enq((t[0] - 100, 1))\n        assert rq.deq() == 1\n        assert rq.deq() == 2\n        rq.await_work.wait.assert_not_called()\n        assert rq.deq() == 3\n        rq.await_work.wait.assert_called_once_with(100)\n\n    def test_deq_raises_when_stopped(self, config):\n        rq = _RunQueue()\n        rq.await_work.wait = mock.Mock()\n        rq._start_worker_if_needed = mock.Mock()\n        rq.stop = True\n        with pytest.raises(TerminateException):\n            rq.deq()\n        rq.enq(1)\n        with pytest.raises(TerminateException):\n            rq.deq()\n"
  },
  {
    "path": "tests/unittests/thresholdmon_test.py",
    "content": "from mock import patch\nfrom nav.thresholdmon import _add_subject_details\n\n\ndef test_non_model_subject_should_not_crash():\n    varmap = {}\n    with patch(\"nav.thresholdmon.lookup\", return_value=\"bar\"):\n        _add_subject_details(None, 'foo', varmap)\n"
  },
  {
    "path": "tests/unittests/topology/analyze_test.py",
    "content": "# Copyright (C) 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\nimport networkx as nx\n\nfrom nav.topology.analyze import AdjacencyReducer, Box, Port\n\n\nclass TestAdjecencyReducer(object):\n    \"\"\"Tests for nav.topology.analyze.AdjecencyReducer class\"\"\"\n\n    @classmethod\n    def setup_class(cls):\n        cls.router_id = 1\n        cls.switch_a_id = 2\n        cls.switch_b_id = 3\n        cls.router = Box(cls.router_id)\n        cls.router.name = \"router\"\n        cls.switch_a = Box(cls.switch_a_id)\n        cls.switch_a.name = \"switch a\"\n        cls.switch_b = Box(cls.switch_b_id)\n        cls.switch_b.name = \"switch b\"\n        cls.router_port_a = Port((cls.router_id, cls.switch_a_id))\n        cls.router_port_a.name = \"router port a\"\n        cls.router_port_b = Port((cls.router_id, cls.switch_b_id))\n        cls.router_port_b.name = \"router port b\"\n        cls.switch_port_a = Port((cls.switch_a_id, 1))\n        cls.switch_port_a.name = \"switch port a\"\n        cls.switch_port_b = Port((cls.switch_b_id, 1))\n        cls.switch_port_b.name = \"switch port b\"\n\n    def test_reduce_simple_case_cam(self):\n        graph = nx.MultiDiGraph(name=\"simple case cam\")\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n        graph.add_edge(self.switch_port_a, self.switch_b, \"cam\")\n        graph.add_edge(self.switch_port_b, self.switch_a, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.switch_port_b)\n        assert result.has_edge(self.switch_port_b, self.switch_port_a)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n\n    def test_reduce_simple_case_lldp(self):\n        graph = nx.MultiDiGraph(name=\"simple case lldp\")\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n        graph.add_edge(self.switch_port_a, self.switch_port_b, \"lldp\")\n        graph.add_edge(self.switch_port_b, self.switch_port_a, \"lldp\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.switch_port_b)\n        assert result.has_edge(self.switch_port_b, self.switch_port_a)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n\n    def test_reduce_simple_tree_lldp(self):\n        graph = nx.MultiDiGraph(name=\"simple tree lldp\")\n        graph.add_edge(self.router, self.router_port_a)\n        graph.add_edge(self.router, self.router_port_b)\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n        graph.add_edge(self.switch_port_a, self.router_port_a, \"lldp\")\n        graph.add_edge(self.switch_port_b, self.router_port_b, \"lldp\")\n        graph.add_edge(self.router_port_a, self.switch_port_a, \"lldp\")\n        graph.add_edge(self.router_port_b, self.switch_port_b, \"lldp\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.router_port_a)\n        assert result.has_edge(self.switch_port_b, self.router_port_b)\n        assert result.has_edge(self.router_port_a, self.switch_port_a)\n        assert result.has_edge(self.router_port_b, self.switch_port_b)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n        assert result.out_degree(self.router_port_a) == 1\n        assert result.out_degree(self.router_port_b) == 1\n\n    def test_reduce_simple_tree_cam(self):\n        graph = nx.MultiDiGraph()\n        graph.add_edge(self.router, self.router_port_a)\n        graph.add_edge(self.router, self.router_port_b)\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n\n        graph.add_edge(self.switch_port_a, self.router, \"cam\")\n        graph.add_edge(self.switch_port_b, self.router, \"cam\")\n        graph.add_edge(self.router_port_a, self.switch_a, \"cam\")\n        graph.add_edge(self.router_port_b, self.switch_b, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.router_port_a)\n        assert result.has_edge(self.switch_port_b, self.router_port_b)\n        assert result.has_edge(self.router_port_a, self.switch_port_a)\n        assert result.has_edge(self.router_port_b, self.switch_port_b)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n        assert result.out_degree(self.router_port_a) == 1\n        assert result.out_degree(self.router_port_b) == 1\n\n    def test_reduce_tree_cam(self):\n        graph = nx.MultiDiGraph()\n        graph.add_edge(self.router, self.router_port_a)\n        graph.add_edge(self.router, self.router_port_b)\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n\n        graph.add_edge(self.switch_port_a, self.router, \"cam\")\n        graph.add_edge(self.switch_port_a, self.switch_b, \"cam\")\n        graph.add_edge(self.switch_port_b, self.router, \"cam\")\n        graph.add_edge(self.switch_port_b, self.switch_a, \"cam\")\n        graph.add_edge(self.router_port_a, self.switch_a, \"cam\")\n        graph.add_edge(self.router_port_b, self.switch_b, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.router_port_a)\n        assert result.has_edge(self.switch_port_b, self.router_port_b)\n        assert result.has_edge(self.router_port_a, self.switch_port_a)\n        assert result.has_edge(self.router_port_b, self.switch_port_b)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n        assert result.out_degree(self.router_port_a) == 1\n        assert result.out_degree(self.router_port_b) == 1\n\n    def test_reduce_simple_lldp_tree_and_cam(self):\n        graph = nx.MultiDiGraph(name=\"simple tree lldp\")\n        graph.add_edge(self.router, self.router_port_a)\n        graph.add_edge(self.router, self.router_port_b)\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n        graph.add_edge(self.switch_port_a, self.router_port_a, \"lldp\")\n        graph.add_edge(self.switch_port_b, self.router_port_b, \"lldp\")\n        graph.add_edge(self.router_port_a, self.switch_port_a, \"lldp\")\n        graph.add_edge(self.router_port_b, self.switch_port_b, \"lldp\")\n        graph.add_edge(self.switch_port_a, self.router, \"cam\")\n        graph.add_edge(self.switch_port_a, self.switch_b, \"cam\")\n        graph.add_edge(self.switch_port_b, self.router, \"cam\")\n        graph.add_edge(self.switch_port_b, self.switch_a, \"cam\")\n        graph.add_edge(self.router_port_a, self.switch_a, \"cam\")\n        graph.add_edge(self.router_port_b, self.switch_b, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.router_port_a)\n        assert result.has_edge(self.switch_port_b, self.router_port_b)\n        assert result.has_edge(self.router_port_a, self.switch_port_a)\n        assert result.has_edge(self.router_port_b, self.switch_port_b)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert result.out_degree(self.switch_port_b) == 1\n        assert result.out_degree(self.router_port_a) == 1\n        assert result.out_degree(self.router_port_b) == 1\n\n    def test_self_loop(self):\n        graph = nx.MultiDiGraph(name=\"self loop\")\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_port_a, self.switch_a, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert not result.has_edge(self.switch_port_a, self.switch_a)\n\n    def test_no_return_path(self):\n        graph = nx.MultiDiGraph()\n        graph.add_edge(self.switch_a, self.switch_port_a)\n        graph.add_edge(self.switch_b, self.switch_port_b)\n        graph.add_edge(self.switch_port_a, self.switch_b, \"cam\")\n        reducer = AdjacencyReducer(graph)\n        print(\"input:\")\n        print(reducer.format_connections())\n        reducer.reduce()\n        print(\"result:\")\n        print(reducer.format_connections())\n        result = reducer.graph\n        assert result.has_edge(self.switch_port_a, self.switch_b)\n        assert not result.has_edge(self.switch_port_b, self.switch_port_a)\n        assert result.out_degree(self.switch_port_a) == 1\n        assert self.switch_port_b not in result\n"
  },
  {
    "path": "tests/unittests/watchdog/tests_test.py",
    "content": "#\n# Copyright (C) 2014 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Tests for the WatchDog tests...\"\"\"\n\nfrom mock import Mock, patch\nfrom datetime import datetime, timedelta\n\nimport pytest\n\nfrom nav.watchdog import tests\n\n\n@pytest.fixture\ndef netboxes():\n    with patch('nav.watchdog.tests.Netbox') as netbox:\n        n1 = Mock()\n        n1.ip = '129.241.23.23'\n        n2 = Mock()\n        n2.ip = '129.241.23.24'\n        netbox.objects.all = Mock(return_value=[n1, n2])\n        yield netbox\n\n\n@patch(\n    'nav.watchdog.tests.reverse_lookup',\n    new=Mock(\n        return_value={\n            '129.241.23.23': ['netbox1'],\n            '129.241.23.24': ['netbox1'],\n            \"10.0.0.42\": ValueError(\"DNS Error when looking up 10.0.0.42\"),\n        }\n    ),\n)\nclass TestDuplicateHostname(object):\n    def test_get_status(self, netboxes):\n        self.test = tests.TestDuplicateHostnameForIP()\n        assert self.test.get_status() == tests.STATUS_NOT_OK\n\n    def test_status_when_initialized_is_unknown(self, netboxes):\n        self.test = tests.TestDuplicateHostnameForIP()\n        assert self.test.status == tests.STATUS_UNKNOWN\n\n    def test_length_of_errors_when_initialized_is_zero(self, netboxes):\n        self.test = tests.TestDuplicateHostnameForIP()\n        assert len(self.test.errors) == 0\n\n    def test_length_of_errors_when_run_is_one(self, netboxes):\n        self.test = tests.TestDuplicateHostnameForIP()\n        self.test.run()\n        assert len(self.test.errors) == 1\n\n    def test_errors_should_be_of_type_testresult(self, netboxes):\n        self.test = tests.TestDuplicateHostnameForIP()\n        self.test.run()\n        assert isinstance(self.test.errors.pop(), tests.TestResult)\n\n\n@patch('nav.watchdog.tests.TestNewCamAndArpRecords.get_latest')\nclass TestNewCamAndArp(object):\n    def create_mock_time(self, seconds, endtime=None):\n        if endtime is None:\n            endtime = datetime.max\n        return Mock(\n            start_time=datetime.now() - timedelta(seconds=seconds), end_time=endtime\n        )\n\n    def test_no_arp_or_cam_records(self, get_latest):\n        get_latest.return_value = None\n        test = tests.TestNewCamAndArpRecords()\n        assert test.get_status() == tests.STATUS_OK\n\n    def test_cam_not_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack + 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert isinstance(test.test_cam(), tests.TestResult)\n\n    def test_cam_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack - 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert test.test_cam() is None\n\n    def test_arp_not_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack + 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert isinstance(test.test_arp(), tests.TestResult)\n\n    def test_arp_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack - 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert test.test_arp() is None\n\n    def test_both_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack - 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert test.get_status() == tests.STATUS_OK\n        assert len(test.errors) == 0\n\n    def test_none_collected(self, get_latest):\n        get_latest.return_value = self.create_mock_time(\n            tests.TestNewCamAndArpRecords.slack + 10\n        )\n        test = tests.TestNewCamAndArpRecords()\n        assert test.get_status() == tests.STATUS_NOT_OK\n        assert len(test.errors) == 2\n"
  },
  {
    "path": "tests/unittests/web/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/web/auth/allauth_config_test.py",
    "content": "try:\n    import tomllib\nexcept ImportError:\n    import tomli as tomllib\n\nfrom unittest import TestCase\nfrom unittest.mock import patch\n\nfrom nav.config.toml import TOMLConfigParser\nfrom nav.web.auth.allauth import (\n    SocialProviderHelper,\n    SocialConfigParser,\n    OIDCConfigParser,\n)\n\n\nclass SocialProviderHelperTest(TestCase):\n    class MyConfig(SocialProviderHelper, TOMLConfigParser):\n        _subkey = \"bar\"\n        SECTION = \"foo\"\n        DEFAULT_CONFIG = {SECTION: {}}\n\n    def test_when_providers_exist_then_get_providers_should_return_subkey_value(self):  # noqa: E501\n        config = {\n            \"foo\": {\n                \"bar\": 1,\n                \"xux\": 2,\n            },\n        }\n        mc = self.MyConfig(default_config=config)\n        result = mc.get_providers()\n        self.assertEqual(result, 1)\n\n    def test_when_no_providers_exist_then_get_providers_should_return_empty_dict(self):  # noqa: E501\n        mc = self.MyConfig()\n        result = mc.get_providers()\n        self.assertEqual(result, {})\n\n\nclass SocialConfigParserTests(TestCase):\n    def test_when_providers_configured_then_generate_SOCIALACCOUNT_PROVIDERS_should_return_translated_config(  # noqa: E501\n        self,\n    ):\n        config_string = \"\"\"\n[social.providers.testprovider1]\nclient_id = \"not.optional\"\nsecret = \"not.optional\"\nscope = [\"email\"]\n\n[social.providers.testprovider2]\nclient_id = \"not.optional2\"\nsecret = \"not.optional2\"\n\n[social.providers.testprovider2.settings]\nfoo = 1  # This is not a valid setting, just for tests!\n\"\"\"\n        config = tomllib.loads(config_string)\n        sc = SocialConfigParser(default_config=config)\n        expected = {\n            \"testprovider1\": {\n                \"APP\": {\n                    \"client_id\": \"not.optional\",\n                    \"secret\": \"not.optional\",\n                },\n                \"SCOPE\": [\"email\"],\n            },\n            \"testprovider2\": {\n                \"APP\": {\n                    \"client_id\": \"not.optional2\",\n                    \"secret\": \"not.optional2\",\n                    \"settings\": {\n                        \"foo\": 1,\n                    },\n                },\n            },\n        }\n        result = sc.generate_SOCIALACCOUNT_PROVIDERS()\n        self.assertEqual(result, expected)\n\n    def test_when_no_config_then_generate_SOCIALACCOUNT_PROVIDERS_should_return_empty_dict(  # noqa: E501\n        self,\n    ):\n        sc = SocialConfigParser()\n        result = sc.generate_SOCIALACCOUNT_PROVIDERS()\n        self.assertEqual(result, {})\n\n\nclass OIDCConfigParserTests(TestCase):\n    def test_when_idps_configured_then_generate_SOCIALACCOUNT_PROVIDERS_should_return_translated_config(  # noqa: E501\n        self,\n    ):\n        config_string = \"\"\"\n[oidc.idps.testprovider1]\nname=\"Provider 1\"\nclient_id = \"not.optional\"\nsecret = \"not.optional\"\nserver_url = \"https://server1.example.com\"\n\n[oidc.idps.testprovider1.settings]\nfoo = 1  # This is not a valid setting, just for tests!\n\"\"\"\n        config = tomllib.loads(config_string)\n        with patch.object(OIDCConfigParser, '_read', return_value=None):\n            sc = OIDCConfigParser(default_config=config)\n        sc._merge_with_default(config)\n        expected = {\n            \"openid_connect\": {\n                \"OAUTH_PKCE_ENABLED\": False,\n                \"APPS\": [\n                    {\n                        \"provider_id\": \"testprovider1\",\n                        \"name\": \"Provider 1\",\n                        \"client_id\": \"not.optional\",\n                        \"secret\": \"not.optional\",\n                        \"settings\": {\n                            \"server_url\": \"https://server1.example.com\",\n                            \"uid_field\": \"sub\",\n                            \"foo\": 1,\n                        },\n                    },\n                ],\n            },\n        }\n        result = sc.generate_SOCIALACCOUNT_PROVIDERS()\n        self.assertEqual(result, expected)\n\n    def test_when_no_config_then_generate_SOCIALACCOUNT_PROVIDERS_should_return_empty_dict(  # noqa: E501\n        self,\n    ):\n        sc = OIDCConfigParser()\n        result = sc.generate_SOCIALACCOUNT_PROVIDERS()\n        self.assertEqual(result, {})\n\n    def test_when_no_uid_field_set_then_it_should_fall_back_to_sub(self):\n        config_string = \"\"\"\n[oidc.idps.testprovider1]\nname=\"Provider 1\"\nclient_id = \"not.optional\"\nsecret = \"not.optional\"\nserver_url = \"https://server1.example.com\"\n\"\"\"\n        config = tomllib.loads(config_string)\n        with patch.object(OIDCConfigParser, '_read', return_value=None):\n            sc = OIDCConfigParser(default_config=config)\n        sc._merge_with_default(config)\n        expected = {\n            \"provider_id\": \"testprovider1\",\n            \"name\": \"Provider 1\",\n            \"client_id\": \"not.optional\",\n            \"secret\": \"not.optional\",\n            \"settings\": {\n                \"server_url\": \"https://server1.example.com\",\n                \"uid_field\": \"sub\",\n            },\n        }\n        result = sc.translate_entry_for_provider(\"testprovider1\")\n        self.assertEqual(result, expected)\n"
  },
  {
    "path": "tests/unittests/web/auth/allauth_views_test.py",
    "content": "from unittest.mock import Mock, patch\n\nfrom nav.web.auth.allauth.views import NAVConnectionsView\n\n\nclass TestNAVConnectionsView:\n    def test_when_user_has_connections_then_it_should_include_connected_providers(self):\n        mock_accounts = Mock()\n        mock_accounts.values_list.return_value = [\"google\", \"github\"]\n\n        mock_form = Mock()\n        mock_form.accounts = mock_accounts\n\n        parent_context = {\"form\": mock_form}\n\n        view = NAVConnectionsView()\n        with patch.object(\n            NAVConnectionsView.__bases__[0],\n            \"get_context_data\",\n            return_value=parent_context,\n        ):\n            context = view.get_context_data()\n\n        assert context[\"connected_providers\"] == {\"google\", \"github\"}\n        mock_accounts.values_list.assert_called_once_with(\"provider\", flat=True)\n\n    def test_when_user_has_no_connections_then_it_should_have_empty_set(self):\n        mock_accounts = Mock()\n        mock_accounts.values_list.return_value = []\n\n        mock_form = Mock()\n        mock_form.accounts = mock_accounts\n\n        parent_context = {\"form\": mock_form}\n\n        view = NAVConnectionsView()\n        with patch.object(\n            NAVConnectionsView.__bases__[0],\n            \"get_context_data\",\n            return_value=parent_context,\n        ):\n            context = view.get_context_data()\n\n        assert context[\"connected_providers\"] == set()\n\n    def test_when_user_has_connections_then_it_should_preserve_parent_context(self):\n        mock_accounts = Mock()\n        mock_accounts.values_list.return_value = [\"google\"]\n\n        mock_form = Mock()\n        mock_form.accounts = mock_accounts\n\n        parent_context = {\"form\": mock_form, \"existing_key\": \"existing_value\"}\n\n        view = NAVConnectionsView()\n        with patch.object(\n            NAVConnectionsView.__bases__[0],\n            \"get_context_data\",\n            return_value=parent_context,\n        ):\n            context = view.get_context_data()\n\n        assert context[\"existing_key\"] == \"existing_value\"\n        assert \"connected_providers\" in context\n"
  },
  {
    "path": "tests/unittests/web/auth/backends_test.py",
    "content": "from mock import Mock, patch\n\nfrom nav.web.auth.backends import NAVRemoteUserBackend\nfrom nav.models.profiles import Account\n\n\nclass TestNAVRemoteUserBackend:\n    def test_init_sets_create_unknown_user(self):\n        expected = 6\n        with patch(\n            'nav.web.auth.backends.remote_user.CONFIG.will_autocreate_user',\n            return_value=expected,\n        ):\n            backend = NAVRemoteUserBackend()\n            assert backend.create_unknown_user == expected\n\n    def test_authenticate_returns_None_if_backend_not_enabled(self):\n        backend = NAVRemoteUserBackend()\n        with patch(\n            'nav.web.auth.backends.remote_user.CONFIG.is_remote_user_enabled',\n            return_value=False,\n        ):\n            result = backend.authenticate(None, None)\n            assert result is None\n\n    def test_authenticate_returns_user_if_backend_is_enabled(self):\n        expected = 7\n        backend = NAVRemoteUserBackend()\n        mock_backend = Mock()\n        mock_backend.authenticate.return_value = expected\n        with patch(\n            'nav.web.auth.backends.remote_user.CONFIG.is_remote_user_enabled',\n            return_value=True,\n        ):\n            with patch('builtins.super', return_value=mock_backend):\n                result = backend.authenticate(None, expected)\n                assert result == expected\n\n    def test_clean_username_golden_path(self):\n        # no need to test how clean_username works here‥\n        username = 'bob'\n        backend = NAVRemoteUserBackend()\n        result = backend.clean_username(username)\n        assert result == username\n\n    def test_configure_user_when_not_created_returns_user_unchanged(self):\n        user = 5\n        backend = NAVRemoteUserBackend()\n        result = backend.configure_user(None, user, created=False)\n        assert result == user\n\n    def test_configure_user_when_created_sets_ext_sync_and_adds_auditlog(self):\n        account = Account(login=\"blbl\", password=\"hgjg\", ext_sync='')\n        account.save = Mock()\n        backend = NAVRemoteUserBackend()\n        with patch('nav.web.auth.backends.LogEntry.add_log_entry') as auditlog:\n            result = backend.configure_user(None, account, created=True)\n            assert result.ext_sync == 'REMOTE_USER'\n            assert result.is_active\n            auditlog.assert_called_once()\n            account.save.assert_called_once()\n\n    def test_user_can_authenticate_if_user_is_active_returns_True(self):\n        account = Account(login=\"blbl\", password=\"hgjg\")\n        backend = NAVRemoteUserBackend()\n        result = backend.user_can_authenticate(account)\n        assert result == account.is_active == True  # noqa: E712\n\n    def test_user_can_authenticate_if_user_is_not_active_returns_False_and_adds_auditlog(  # noqa: E501\n        self,\n    ):\n        account = Account(login=\"blbl\", password=\"!\")\n        backend = NAVRemoteUserBackend()\n        with patch('nav.web.auth.backends.LogEntry.add_log_entry') as auditlog:\n            result = backend.user_can_authenticate(account)\n            assert result == account.is_active == False  # noqa: E712\n            auditlog.assert_called_once()\n"
  },
  {
    "path": "tests/unittests/web/auth/remote_user_test.py",
    "content": "from mock import patch\n\nfrom nav.web.auth import remote_user\n\n\ndef test_workaround_feide_oidc_returns_colonless_username():\n    username = 'a:b'\n    result = remote_user._workaround_feide_oidc(username)\n    assert result == 'b'\n\n\ndef test_fake_password_returns_string_longer_than_given_length():\n    length = 12\n    result = remote_user.fake_password(length)\n    print(result)\n    assert len(result) > length\n\n\ndef test_get_remote_url_for_nonexistent_urltype_returns_None():\n    with patch(\n        'nav.web.auth.remote_user.CONFIG.is_remote_user_enabled', return_value=True\n    ):\n        result = remote_user.CONFIG.get_remote_url(None, 'nonexistent urltype')\n        assert result is None\n\n\ndef test_get_remote_user_varname_should_fallback_to_REMOTE_USER_if_missing_config():\n    with patch('nav.web.auth.remote_user.CONFIG.get', side_effect=ValueError):\n        result = remote_user.CONFIG.get_remote_user_varname()\n        assert result == 'REMOTE_USER'\n"
  },
  {
    "path": "tests/unittests/web/geomap/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/web/geomap/utils_test.py",
    "content": "from nav.web.geomap.utils import argmax\n\n\ndef test_argmax_plus_one():\n    fun = lambda n: n + 1\n    assert argmax(fun, [1, 2, 3]) == 3\n\n\ndef test_argmax_negative():\n    fun = lambda n: -n\n    assert argmax(fun, [1, 2, 3]) == 1\n"
  },
  {
    "path": "tests/unittests/web/ipam/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/web/ipam/prefix_tree_test.py",
    "content": "import pytest\nfrom nav.web.ipam.prefix_tree import make_tree_from_ip\n\n# TODO: Mock prefixes via fixtures?\n\n\ndef test_prefix_tree_invalid_cidr():\n    cidrs = [\"192.168.1.1/42\"]\n    with pytest.raises(ValueError):\n        make_tree_from_ip(cidrs)\n\n\ndef test_prefix_tree_valid_cidr():\n    cidrs = [\"10.0.0.0/16\", \"10.0.1.0/24\"]\n    tree = make_tree_from_ip(cidrs)\n    # sanity check: tree root should have children\n    assert tree.children_count > 0\n    # sanity check: spanned prefix should be within spanning prefix\n    child = tree.children[0].children[0]\n    assert child.prefix == \"10.0.1.0/24\"\n    assert child.prefixlen == 24\n"
  },
  {
    "path": "tests/unittests/web/ipam/util_test.py",
    "content": "import unittest\nfrom IPy import IPSet, IP\nfrom nav.web.ipam.util import suggest_range, partition_subnet, _get_available_subnets\n\n\nclass IpamUtilTest(unittest.TestCase):\n    def test_partition_subnet(self):\n        prefix = IP(\"10.0.0.0/8\")\n        partitions = partition_subnet(24, prefix)\n        # partition_subnet returns a lazy sequence, so let`s step through it\n        partition = next(partitions)\n        # should round partition to nearest power of two\n        self.assertEqual(partition.len(), 256)\n        # should be a part of the partitioned prefix\n        self.assertTrue(partition in prefix)\n        # TODO: test for number of partitions?\n\n    def test_partition_subnet6(self):\n        prefix = IP(\"fe80::/40\")\n        partitions = partition_subnet(64, prefix)\n        # partition_subnet returns a lazy sequence, so let`s step through it\n        partition = next(partitions)\n        # should round partition to nearest power of two\n        self.assertEqual(partition.prefixlen(), 64)\n        # should be a part of the partitioned prefix\n        self.assertTrue(partition in prefix)\n        # TODO: test for number of partitions?\n\n    def test_suggest_range_valid(self):\n        prefix = IP(\"10.0.0.0/8\")\n        prefixlen = 24\n        n = 16\n        suggested_ranges = suggest_range(prefix, prefixlen, n=n)\n        self.assertEqual(len(suggested_ranges[\"candidates\"]), 16)\n        # make sure all suggestions are within bounds\n        for suggested_range in suggested_ranges[\"candidates\"]:\n            self.assertTrue(suggested_range[\"prefix\"] in prefix)\n\n    def test_suggest_range_invalid(self):\n        prefix = IP(\"10.0.0.0/24\")\n        prefixlen = 23\n        candidates = suggest_range(prefix, prefixlen)[\"candidates\"]\n        # a too large range should only return the original prefix\n        self.assertEqual(len(candidates), 1)\n        self.assertEqual(IP(candidates[0][\"prefix\"]), prefix)\n\n    # To test this function, we should really mock some prefixes, but for\n    # simplicity reason, explicit dependency injection will do\n    def test_get_available_subnets(self):\n        base = [\"10.0.0.0/8\"]\n        used = [\"10.0.0.0/9\"]\n        available_subnets = _get_available_subnets(base, used)\n        # sanity check: only 10.128.0.0/9 should be available\n        self.assertTrue(IP(\"10.128.0.0/9\") in IPSet(available_subnets))\n        self.assertEqual(len(available_subnets), 1)\n        self.assertEqual(available_subnets, sorted(available_subnets))\n"
  },
  {
    "path": "tests/unittests/web/ipdevinfo_test.py",
    "content": "# -*- coding: utf-8 -*-\nfrom nav.web.ipdevinfo.utils import get_interface_counter_graph_url\nfrom mock import Mock\n\n\ndef test_get_interface_counter_graph_url_should_handle_utf8():\n    ifc = Mock()\n    ifc.netbox.sysname = \"example-sw.example.org\"\n    ifc.ifname = \"Ethernet1/1\"\n    ifc.ifalias = \"æøå\"\n    assert get_interface_counter_graph_url(ifc) != \"\"\n"
  },
  {
    "path": "tests/unittests/web/jwtgen_test.py",
    "content": "from datetime import datetime, timedelta\nfrom typing import Any, Generator\nfrom unittest.mock import patch\n\nimport jwt\nimport pytest\nfrom nav.web.jwtgen import (\n    decode_token,\n    generate_access_token,\n    generate_refresh_token,\n    hash_token,\n    is_active,\n)\n\n\nclass TestTokenGeneration:\n    \"\"\"\n    Tests behaviour that should be identical for both access and refresh token\n    generation\n    \"\"\"\n\n    @pytest.mark.parametrize(\"func\", [generate_access_token, generate_refresh_token])\n    def test_nbf_should_be_in_the_past(self, func):\n        encoded_token = func()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['nbf'] < datetime.now().timestamp()\n\n    @pytest.mark.parametrize(\"func\", [generate_access_token, generate_refresh_token])\n    def test_exp_should_be_in_the_future(self, func):\n        encoded_token = func()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['exp'] > datetime.now().timestamp()\n\n    @pytest.mark.parametrize(\"func\", [generate_access_token, generate_refresh_token])\n    def test_iat_should_be_in_the_past(self, func):\n        encoded_token = func()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['iat'] < datetime.now().timestamp()\n\n    @pytest.mark.parametrize(\"func\", [generate_access_token, generate_refresh_token])\n    def test_aud_should_match_name_from_jwt_conf(self, func, nav_name):\n        encoded_token = func()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['aud'] == nav_name\n\n    @pytest.mark.parametrize(\"func\", [generate_access_token, generate_refresh_token])\n    def test_iss_should_match_name_from_jwt_conf(self, func, nav_name):\n        encoded_token = func()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['iss'] == nav_name\n\n\nclass TestGenerateAccessToken:\n    def test_token_type_should_be_access_token(self):\n        encoded_token = generate_access_token()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['token_type'] == \"access_token\"\n\n\nclass TestGenerateRefreshToken:\n    def test_token_type_should_be_refresh_token(self):\n        encoded_token = generate_refresh_token()\n        data = jwt.decode(encoded_token, options={'verify_signature': False})\n        assert data['token_type'] == \"refresh_token\"\n\n\nclass TestIsActive:\n    def test_when_nbf_is_in_the_future_it_should_return_false(self):\n        now = datetime.now()\n        nbf = now + timedelta(hours=1)\n        exp = now + timedelta(hours=1)\n        assert not is_active(exp.timestamp(), nbf.timestamp())\n\n    def test_when_exp_is_in_the_past_it_should_return_false(self):\n        now = datetime.now()\n        nbf = now - timedelta(hours=1)\n        exp = now - timedelta(hours=1)\n        assert not is_active(exp.timestamp(), nbf.timestamp())\n\n    def test_when_nbf_is_in_the_past_and_exp_is_in_the_future_it_should_return_true(\n        self,\n    ):\n        now = datetime.now()\n        nbf = now - timedelta(hours=1)\n        exp = now + timedelta(hours=1)\n        assert is_active(exp.timestamp(), nbf.timestamp())\n\n    def test_when_nbf_is_now_and_exp_is_in_the_future_it_should_return_true(self):\n        now = datetime.now()\n        exp = now + timedelta(hours=1)\n        # Make sure the value we use for `nbf` here matches the `now` value in\n        # jwtgen.is_active\n        with patch('nav.web.jwtgen.get_now', return_value=now):\n            assert is_active(exp.timestamp(), now.timestamp())\n\n\nclass TestHashToken:\n    def test_should_return_correct_hash(self, token_string, token_hash):\n        assert hash_token(token_string) == token_hash\n\n\nclass TestDecodeToken:\n    def test_should_return_expected_data(self, token_string, token_data):\n        assert decode_token(token_string) == token_data\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_private_key_mock(rsa_private_key) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_PRIVATE_KEY setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_PRIVATE_KEY\", rsa_private_key):\n        yield rsa_private_key\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_name_mock(nav_name) -> Generator[str, None, None]:\n    \"\"\"Mocks the JWT_NAME setting\"\"\"\n    with patch(\"nav.web.jwtgen.JWT_NAME\", nav_name):\n        yield nav_name\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_access_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_ACCESS_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(hours=1)\n    with patch(\"nav.web.jwtgen.JWT_ACCESS_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n\n\n@pytest.fixture(scope=\"module\", autouse=True)\ndef jwt_refresh_token_lifetime_mock() -> Generator[timedelta, None, None]:\n    \"\"\"Mocks the JWT_REFRESH_TOKEN_LIFETIME setting\"\"\"\n    lifetime = timedelta(days=1)\n    with patch(\"nav.web.jwtgen.JWT_REFRESH_TOKEN_LIFETIME\", lifetime):\n        yield lifetime\n\n\n@pytest.fixture(scope=\"module\")\ndef nav_name() -> str:\n    yield \"nav\"\n\n\n@pytest.fixture(scope=\"module\")\ndef token_string() -> str:\n    \"\"\"String representation of a token. Matching data is in `token_data`\n    and expected hash is in `token_hash`\n    \"\"\"\n    token = (\n        \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQ\"\n        \"iOjE3NDA0Nzg4NTQsImV4cCI6MTc0MDU2NTI1NH0.2GbcpbwzVOAV7\"\n        \"nv4lAS_ISrw-g9WKvhKKnpN9dhSL6s\"\n    )\n    return token\n\n\n@pytest.fixture(scope=\"module\")\ndef token_hash() -> str:\n    \"\"\"SHA256 hash of a token. Matching data is in `token_data`\n    and the actual token string is in `token_string`\n    \"\"\"\n    return \"91d0d189dde6a7423b884f8bb285b17f9706d21e6d0ce45aac028a22b3067395\"\n\n\n@pytest.fixture(scope=\"module\")\ndef token_data() -> dict[str, Any]:\n    \"\"\"Payload of a token. The actual token string is in `token_string`\n    and hash of the token in `token_hash`\n    \"\"\"\n    return {\n        \"iat\": 1740478854,\n        \"exp\": 1740565254,\n    }\n"
  },
  {
    "path": "tests/unittests/web/ldapauth_test.py",
    "content": "import importlib.util\nimport pytest\n\nfrom nav.config import NAVConfigParser\nfrom nav.web.auth.ldap import LDAPUser, authenticate, open_ldap\nfrom mock import Mock, patch\n\nfound = importlib.util.find_spec('ldap')\nif not found:\n    pytestmark = pytest.mark.skip(reason=\"ldap module is not available\")\n\n\nclass LdapTestConfig(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = []\n    DEFAULT_CONFIG = \"\"\"\n[ldap]\nbasedn=cn=people,dc=example,dc=org\nuid_attr=samAccountName\nname_attr=cn\nmanager=\nmanager_password=\nencoding=utf-8\n\"\"\"\n\n\n@patch('nav.web.auth.ldap._config', LdapTestConfig())\ndef test_ldapuser_search_dn_decode_regression():\n    \"\"\"Verifies that LDAPUser.search_dn() returns user's DN untouched\"\"\"\n    connection = Mock()\n    connection.search_s.return_value = [\n        (\n            'CN=Zaphod Beeblebr\\xf6x,CN=people,DC=example,DC=org',\n            {\n                'cn': b'Zaphod Beeblebr\\xc3\\xb6x',\n                'displayName': b'Zaphod Beeblebr\\xc3\\xb6x',\n            },\n        )\n    ]\n\n    user = LDAPUser('zaphod', connection)\n    dn, uid = user.search_dn()\n    assert dn == 'CN=Zaphod Beeblebr\\xf6x,CN=people,DC=example,DC=org'\n\n\nclass LdapOpenTestConfig(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = []\n    DEFAULT_CONFIG = \"\"\"\n[ldap]\nserver=ldap.example.org\nport=636\nencryption=tls\ntimeout=3\ndebug=true\n\"\"\"\n\n\n@patch('nav.web.auth.ldap._config', LdapOpenTestConfig())\ndef test_open_ldap_should_run_without_error():\n    with patch('ldap.initialize'):\n        assert open_ldap()\n\n\nclass LdapOpenTestInvalidEncryptionConfig(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = []\n    DEFAULT_CONFIG = \"\"\"\n[ldap]\nserver=ldap.example.org\nport=636\nencryption=invalid\ntimeout=3\ndebug=true\n\"\"\"\n\n\n@patch('nav.web.auth.ldap._config', LdapOpenTestInvalidEncryptionConfig())\ndef test_when_encryption_setting_is_invalid_open_ldap_should_run_without_encryption():\n    with patch('ldap.initialize'):\n        assert open_ldap()\n\n\nclass LdapGroupTestConfig(NAVConfigParser):\n    DEFAULT_CONFIG_FILES = []\n    DEFAULT_CONFIG = \"\"\"\n[ldap]\nserver=ldap.example.org\nport=389\nencryption=none\nbasedn=cn=people,dc=example,dc=org\nuid_attr=sAMAccountName\nname_attr=cn\nmanager=cn=admin,dc=example,dc=org\nmanager_password=secret\nencoding=utf-8\nlookupmethod=search\nrequire_group=cn=navusers,cn=groups,dc=example,dc=org\ntimeout=2\ndebug=no\nsuffix=\ngroup_search=(member=%%s)\nrequire_entitlement=\nadmin_entitlement=\nentitlement_attribute=eduPersonEntitlement\n\"\"\"\n\n\nclass TestAuthenticate:\n    @patch('nav.web.auth.ldap._config', LdapGroupTestConfig())\n    @patch('nav.web.auth.ldap.open_ldap')\n    def test_when_user_not_found_during_group_check_it_should_return_false(  # noqa: E501\n        self, open_ldap_mock\n    ):\n        \"\"\"A UserNotFound during group membership verification should not crash\"\"\"\n        connection = open_ldap_mock.return_value\n        # bind succeeds (user authenticates)\n        connection.simple_bind_s.return_value = None\n        # But DN search during group check returns no results\n        connection.search_s.return_value = []\n\n        result = authenticate('rudolf', 'secret')\n        assert result is False\n"
  },
  {
    "path": "tests/unittests/web/maintenance/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/web/maintenance/forms_test.py",
    "content": "#\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\nfrom datetime import date\n\nimport pytest\n\nfrom nav.web.maintenance.forms import MaintenanceCalendarForm\n\n\nclass TestMaintenanceCalendarForm:\n    def test_cleaned_year_returns_integer(self, valid_form):\n        assert valid_form.cleaned_year == 2022\n\n    def test_cleaned_month_returns_integer(self, valid_form):\n        assert valid_form.cleaned_month == 7\n\n    def test_this_month_start_returns_the_first_day_of_the_month(self, valid_form):\n        assert valid_form.this_month_start == date(2022, 7, 1)\n\n    def test_next_month_start_returns_the_first_day_of_the_next_month(self, valid_form):\n        assert valid_form.next_month_start == date(2022, 8, 1)\n\n    def test_previous_month_start_returns_the_first_day_of_the_previous_month(\n        self, valid_form\n    ):\n        assert valid_form.previous_month_start == date(2022, 6, 1)\n\n    def test_when_month_is_december_next_month_start_returns_january(\n        self, december_form\n    ):\n        assert december_form.next_month_start == date(2023, 1, 1)\n\n    def test_when_month_is_january_previous_month_start_returns_december(\n        self, january_form\n    ):\n        assert january_form.previous_month_start == date(2021, 12, 1)\n\n\n@pytest.fixture\ndef valid_form() -> MaintenanceCalendarForm:\n    return MaintenanceCalendarForm(data={'year': '2022', 'month': '7'})\n\n\n@pytest.fixture\ndef december_form() -> MaintenanceCalendarForm:\n    return MaintenanceCalendarForm(data={'year': '2022', 'month': '12'})\n\n\n@pytest.fixture\ndef january_form() -> MaintenanceCalendarForm:\n    return MaintenanceCalendarForm(data={'year': '2022', 'month': '1'})\n"
  },
  {
    "path": "tests/unittests/web/maintenance/utils_test.py",
    "content": "from nav.models.manage import Netbox, Room, Location\nfrom nav.web.maintenance.utils import get_component_name\n\n\nclass TestGetComponentName:\n    def test_get_component_names(self):\n        components = [Netbox, Room, Location]\n        expected_names = [\"netbox\", \"room\", \"loc\"]\n        calculated_names = [get_component_name(component) for component in components]\n        assert calculated_names == expected_names, (\n            \"Component names do not match expected values.\"\n        )\n\n    def test_should_return_short_name_for_location(self):\n        name = get_component_name(Location)\n        assert name == \"loc\"\n"
  },
  {
    "path": "tests/unittests/web/modals_test.py",
    "content": "from unittest.mock import patch\nfrom django.test import RequestFactory\nfrom django.http import HttpResponse\n\nfrom nav.web.modals import (\n    DEFAULT_MODAL_ID,\n    DEFAULT_MODAL_SIZE,\n    render_modal,\n    resolve_modal,\n    render_modal_alert,\n)\n\n\nclass TestModalUtilities:\n    \"\"\"Test case for modal utility functions\"\"\"\n\n    def setup_method(self):\n        self.factory = RequestFactory()\n        self.request = self.factory.get('/')\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_defaults(self, mock_render):\n        mock_render.return_value = HttpResponse('modal content')\n        result = render_modal(self.request, 'test_template.html')\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': 'test_template.html',\n            'modal_size': DEFAULT_MODAL_SIZE,\n            'show_close_button': True,\n            'close_on_outside_click': True,\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n        assert result == mock_render.return_value\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_custom_context(self, mock_render):\n        mock_render.return_value = HttpResponse('modal content')\n        template_name = 'custom_template.html'\n        context = {'netboxid': '123'}\n        modal_id = 'custom-modal'\n\n        render_modal(self.request, template_name, context, modal_id)\n\n        expected_context = {\n            'modal_id': modal_id,\n            'content_template': template_name,\n            'modal_size': DEFAULT_MODAL_SIZE,\n            'show_close_button': True,\n            'close_on_outside_click': True,\n            'netboxid': '123',\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_custom_size(self, mock_render):\n        \"\"\"Test render_modal with custom size\"\"\"\n        mock_render.return_value = HttpResponse('modal content')\n        template_name = 'size_template.html'\n        modal_size = 'large'\n\n        render_modal(self.request, template_name, size=modal_size)\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': template_name,\n            'modal_size': modal_size,\n            'show_close_button': True,\n            'close_on_outside_click': True,\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_resolve_modal_with_defaults(self, mock_render):\n        \"\"\"Test resolve_modal with default parameters\"\"\"\n        mock_render.return_value = HttpResponse('modal content')\n        resolve_modal(self.request)\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': None,\n        }\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal_resolve.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_resolve_modal_with_custom_template(self, mock_render):\n        \"\"\"Test resolve_modal with template and context\"\"\"\n        mock_render.return_value = HttpResponse('resolve content')\n        template_name = 'resolve_template.html'\n        context = {'success': True}\n        modal_id = 'resolve-modal'\n\n        resolve_modal(self.request, template_name, context, modal_id)\n\n        expected_context = {\n            'modal_id': modal_id,\n            'content_template': template_name,\n            'success': True,\n        }\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal_resolve.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_render_modal_alert_custom_modal_id(self, mock_render):\n        \"\"\"Test render_modal_alert with custom modal_id\"\"\"\n        mock_render.return_value = HttpResponse('alert content')\n        message = 'Error occurred!'\n        modal_id = 'error-alert'\n\n        render_modal_alert(self.request, message, modal_id)\n\n        expected_context = {'message': message, 'modal_id': modal_id}\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal_alert.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_close_button_disabled(self, mock_render):\n        \"\"\"Test render_modal with close button disabled\"\"\"\n        mock_render.return_value = HttpResponse('modal content')\n        template_name = 'test_template.html'\n\n        render_modal(self.request, template_name, show_close_button=False)\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': template_name,\n            'modal_size': DEFAULT_MODAL_SIZE,\n            'show_close_button': False,\n            'close_on_outside_click': True,\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_outside_click_disabled(self, mock_render):\n        \"\"\"Test render_modal with outside click closing disabled\"\"\"\n        mock_render.return_value = HttpResponse('modal content')\n        template_name = 'test_template.html'\n\n        render_modal(self.request, template_name, close_on_outside_click=False)\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': template_name,\n            'modal_size': DEFAULT_MODAL_SIZE,\n            'show_close_button': True,\n            'close_on_outside_click': False,\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n\n    @patch('nav.web.modals.render')\n    def test_should_render_modal_with_both_close_options_disabled(self, mock_render):\n        \"\"\"Test render_modal with both close options disabled for manual control\"\"\"\n        mock_render.return_value = HttpResponse('modal content')\n        template_name = 'test_template.html'\n\n        render_modal(\n            self.request,\n            template_name,\n            show_close_button=False,\n            close_on_outside_click=False,\n        )\n\n        expected_context = {\n            'modal_id': DEFAULT_MODAL_ID,\n            'content_template': template_name,\n            'modal_size': DEFAULT_MODAL_SIZE,\n            'show_close_button': False,\n            'close_on_outside_click': False,\n        }\n\n        mock_render.assert_called_once_with(\n            self.request, 'modals/_nav_modal.html', expected_context\n        )\n"
  },
  {
    "path": "tests/unittests/web/navlets_test.py",
    "content": "from urllib.parse import urlparse, parse_qs\n\nfrom nav.web.navlets import Navlet\n\n\nclass TestAddBustParamToUrl:\n    def test_when_url_has_no_query_params_then_it_should_use_question_mark(self):\n        result = Navlet.add_bust_param_to_url('http://example.com/image.jpg')\n        assert '?bust=' in result\n\n    def test_when_url_has_existing_query_params_then_it_should_preserve_them(self):\n        result = Navlet.add_bust_param_to_url(\n            'http://example.com/graph?target=foo&filter=a&filter=b&simple'\n        )\n        parsed = urlparse(result)\n        params = parse_qs(parsed.query, keep_blank_values=True)\n        assert params['target'] == ['foo']\n        assert sorted(params['filter']) == ['a', 'b']\n        assert params['simple'] == ['']\n        assert 'bust' in params\n\n    def test_when_url_has_fragment_then_bust_should_be_in_query_not_fragment(self):\n        result = Navlet.add_bust_param_to_url('http://example.com/image.jpg#section')\n        parsed = urlparse(result)\n        assert 'bust' in parse_qs(parsed.query)\n        assert parsed.fragment == 'section'\n\n    def test_when_url_has_params_and_fragment_then_bust_should_be_in_query(self):\n        result = Navlet.add_bust_param_to_url(\n            'http://example.com/graph?target=foo#section'\n        )\n        parsed = urlparse(result)\n        params = parse_qs(parsed.query)\n        assert 'target' in params\n        assert 'bust' in params\n        assert parsed.fragment == 'section'\n"
  },
  {
    "path": "tests/unittests/web/portadmin/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unittests/web/portadmin/utils_test.py",
    "content": "from unittest.mock import patch, Mock\n\nfrom nav.web.portadmin.utils import set_editable_flag_on_interfaces\n\n\nclass TestSetEditableFlagOnInterfaces:\n    def test_when_user_is_admin_it_should_set_all_interfaces_to_editable(self):\n        with patch(\n            \"nav.web.portadmin.utils.should_check_access_rights\", return_value=False\n        ):\n            mock_admin = Mock()\n            mock_interfaces = [Mock(iseditable=False)] * 3\n            set_editable_flag_on_interfaces(mock_interfaces, [], mock_admin)\n\n            assert all(ifc.iseditable for ifc in mock_interfaces)\n\n    def test_when_user_is_not_admin_it_should_set_only_matching_interfaces_to_editable(\n        self,\n    ):\n        with patch(\n            \"nav.web.portadmin.utils.should_check_access_rights\", return_value=True\n        ):\n            mock_user = Mock()\n            mock_vlans = [Mock(vlan=42), Mock(vlan=69), Mock(vlan=666)]\n            editable_interface = Mock(vlan=666, iseditable=False)\n            mock_interfaces = [\n                Mock(vlan=99, iseditable=False),\n                editable_interface,\n                Mock(vlan=27, iseditable=False),\n            ]\n\n            set_editable_flag_on_interfaces(mock_interfaces, mock_vlans, mock_user)\n\n            assert editable_interface.iseditable\n            assert all(\n                not ifc.iseditable\n                for ifc in mock_interfaces\n                if ifc is not editable_interface\n            )\n"
  },
  {
    "path": "tests/unittests/web/portadmin/views_test.py",
    "content": "from unittest.mock import Mock, patch\n\nfrom django.test import RequestFactory\n\nfrom nav.portadmin.handlers import ManagementError\nfrom nav.web.portadmin.views import commit_configuration\n\n\nclass TestCommitConfiguration:\n    @patch(\"nav.web.portadmin.views.CONFIG\")\n    def test_when_commit_disabled_it_should_return_200(self, mock_config):\n        mock_config.is_commit_enabled.return_value = False\n        response = commit_configuration(_make_post_request())\n        assert response.status_code == 200\n\n    @patch(\"nav.web.portadmin.views.get_management_handler\")\n    @patch(\"nav.web.portadmin.views.get_object_or_404\")\n    @patch(\"nav.web.portadmin.views.CONFIG\")\n    def test_when_handler_succeeds_it_should_return_200(\n        self, mock_config, mock_get_obj, mock_get_handler\n    ):\n        mock_config.is_commit_enabled.return_value = True\n        mock_get_obj.return_value = Mock(netbox=Mock())\n        mock_handler = Mock()\n        mock_get_handler.return_value = mock_handler\n\n        response = commit_configuration(_make_post_request())\n\n        mock_handler.commit_configuration.assert_called_once()\n        assert response.status_code == 200\n\n    @patch(\"nav.web.portadmin.views.get_management_handler\")\n    @patch(\"nav.web.portadmin.views.get_object_or_404\")\n    @patch(\"nav.web.portadmin.views.CONFIG\")\n    def test_when_management_error_it_should_return_503(\n        self, mock_config, mock_get_obj, mock_get_handler\n    ):\n        mock_config.is_commit_enabled.return_value = True\n        mock_get_obj.return_value = Mock(netbox=Mock())\n        mock_handler = Mock()\n        mock_handler.commit_configuration.side_effect = ManagementError(\"timeout\")\n        mock_get_handler.return_value = mock_handler\n\n        response = commit_configuration(_make_post_request())\n\n        assert response.status_code == 503\n        assert b\"timeout\" in response.content\n\n    @patch(\"nav.web.portadmin.views.get_management_handler\")\n    @patch(\"nav.web.portadmin.views.get_object_or_404\")\n    @patch(\"nav.web.portadmin.views.CONFIG\")\n    def test_when_commit_not_supported_it_should_return_503(\n        self, mock_config, mock_get_obj, mock_get_handler\n    ):\n        mock_config.is_commit_enabled.return_value = True\n        mock_get_obj.return_value = Mock(netbox=Mock())\n        mock_handler = Mock()\n        mock_handler.commit_configuration.side_effect = NotImplementedError\n        mock_get_handler.return_value = mock_handler\n\n        response = commit_configuration(_make_post_request())\n\n        assert response.status_code == 503\n        assert b\"not supported\" in response.content.lower()\n\n    @patch(\"nav.web.portadmin.views.get_management_handler\")\n    @patch(\"nav.web.portadmin.views.get_object_or_404\")\n    @patch(\"nav.web.portadmin.views.CONFIG\")\n    def test_when_no_handler_it_should_return_503(\n        self, mock_config, mock_get_obj, mock_get_handler\n    ):\n        mock_config.is_commit_enabled.return_value = True\n        mock_get_obj.return_value = Mock(netbox=Mock())\n        mock_get_handler.return_value = None\n\n        response = commit_configuration(_make_post_request())\n\n        assert response.status_code == 503\n        assert b\"Could not obtain\" in response.content\n\n\ndef _make_post_request(interfaceid=1):\n    factory = RequestFactory()\n    return factory.post(\"/portadmin/commit\", {\"interfaceid\": str(interfaceid)})\n"
  },
  {
    "path": "tests/unittests/web/qrcode_test.py",
    "content": "import io\nimport zipfile\n\nfrom nav.web.utils import (\n    generate_png_qr_code,\n    generate_svg_qr_code,\n    generate_qr_code_as_string,\n    generate_qr_codes_as_zip_response,\n)\n\n\ndef test_generate_png_qr_code_returns_bytes():\n    qr_code = generate_png_qr_code(\n        url=\"www.example.com\", caption=\"buick.lab.uninett.no\"\n    )\n    assert isinstance(qr_code, bytes)\n\n\ndef test_generate_svg_qr_code_returns_bytes():\n    qr_code = generate_svg_qr_code(\n        url=\"www.example.com\", caption=\"buick.lab.uninett.no\"\n    )\n    assert isinstance(qr_code, bytes)\n\n\ndef test_generate_qr_code_as_string_returns_string():\n    qr_code = generate_qr_code_as_string(\n        url=\"www.example.com\", caption=\"buick.lab.uninett.no\"\n    )\n    assert isinstance(qr_code, str)\n\n\ndef test_generate_qr_codes_as_zip_response_should_return_zip_with_correct_filenames():\n    response = generate_qr_codes_as_zip_response(\n        {\n            \"buick.lab.uninett.no\": \"www.example.com\",\n            \"buick2.lab.uninett.no\": \"www2.example.com\",\n        }\n    )\n\n    buf = io.BytesIO(b\"\".join(response.streaming_content))\n    zip_ = zipfile.ZipFile(buf, \"r\")\n\n    actual_filenames = set(zip_.namelist())\n    expected_filenames = set([\"buick.lab.uninett.no.png\", \"buick2.lab.uninett.no.png\"])\n\n    assert actual_filenames == expected_filenames\n"
  },
  {
    "path": "tests/unittests/web/servicecheckers_test.py",
    "content": "from unittest import TestCase\nfrom nav.statemon.abstractchecker import AbstractChecker\nfrom nav.web.servicecheckers import load_checker_classes, get_description\n\n\nclass ServiceCheckersTest(TestCase):\n    def test_load_checkers(self):\n        checkers = load_checker_classes()\n        self.assertTrue(checkers, msg=\"no service checkers found\")\n        for checker in checkers:\n            self.assertTrue(issubclass(checker, AbstractChecker))\n            self.assertFalse(\n                checker is AbstractChecker,\n                msg=\"AbstractChecker returned as real checker\",\n            )\n\n    def test_get_ssh_description(self):\n        descr = get_description('ssh')\n        self.assertTrue(descr)\n        self.assertTrue('description' in descr)\n        self.assertTrue('args' in descr)\n        self.assertTrue('optargs' in descr)\n"
  },
  {
    "path": "tests/unittests/web/sortedstats/sortedstats_test.py",
    "content": "import datetime\nfrom mock import patch, MagicMock\nfrom unittest import TestCase\n\nimport nav.web.sortedstats.views as views\n\n\nclass TestSortedStats(TestCase):\n    def setUp(self):\n        pass\n\n    def timestamp_to_datetime(self, timestamp):\n        return datetime.datetime.strptime(timestamp, views.GRAPHITE_TIME_FORMAT)\n\n    def test_get_timestamps_has_correct_delta(self):\n        start_ts, end_ts = views.get_timestamps('hour')\n        start_dt = self.timestamp_to_datetime(start_ts)\n        end_dt = self.timestamp_to_datetime(end_ts)\n        self.assertEqual(end_dt - start_dt, datetime.timedelta(hours=1))\n\n    def test_cache_key_is_correct(self):\n        view = \"uptime\"\n        timeframe = \"hour\"\n        rows = 5\n        expected_cache_key = \"uptime_hour_5\"\n        cache_key = views.get_cache_key(view, timeframe, rows)\n        self.assertEqual(cache_key, expected_cache_key)\n\n    @patch('nav.web.sortedstats.views.get_cache')\n    def test_process_form_returns_cache_value_if_cache_exists(self, cache_mock):\n        data = \"cached\"\n        cache_mock.return_value.get.return_value.data = data\n        fake_form = MagicMock()\n        fake_form.cleaned_data = {\n            'view': 'uptime',\n            'timeframe': 'hour',\n            'rows': 5,\n            'use_cache': True,\n        }\n        result, from_cache = views.process_form(fake_form)\n        self.assertTrue(from_cache)\n        self.assertEqual(result.data, data)\n\n    @patch('nav.web.sortedstats.views.collect_result')\n    @patch('nav.web.sortedstats.views.get_cache')\n    def test_cache_not_used_if_empty_and_use_cache_is_on(\n        self, cache_mock, collect_mock\n    ):\n        data = \"new\"\n        cache_mock.return_value.get.return_value.data = \"\"\n        collect_mock.return_value.data = data\n        fake_form = MagicMock()\n        fake_form.cleaned_data = {\n            'view': 'uptime',\n            'timeframe': 'hour',\n            'rows': 5,\n            'use_cache': True,\n        }\n        result, from_cache = views.process_form(fake_form)\n        self.assertFalse(from_cache)\n        self.assertEqual(result.data, data)\n\n    @patch('nav.web.sortedstats.views.collect_result')\n    @patch('nav.web.sortedstats.views.get_cache')\n    def test_cache_not_used_if_empty_and_use_cache_is_off(\n        self, cache_mock, collect_mock\n    ):\n        data = \"new\"\n        cache_mock.return_value.get.return_value.data = \"\"\n        collect_mock.return_value.data = data\n        fake_form = MagicMock()\n        fake_form.cleaned_data = {\n            'view': 'uptime',\n            'timeframe': 'hour',\n            'rows': 5,\n            'use_cache': False,\n        }\n        result, from_cache = views.process_form(fake_form)\n        self.assertFalse(from_cache)\n        self.assertEqual(result.data, data)\n"
  },
  {
    "path": "tests/unittests/web/sortedstats/sortedstatsconfig_test.py",
    "content": "from mock import patch\nfrom unittest import TestCase\nfrom nav.web.sortedstats.config import SortedStatsConfig\n\n\nclass TestSortedStatsConfif(TestCase):\n    def setUp(self):\n        pass\n\n    def test_correct_config_should_pass(self):\n        config = \"\"\"\n            [myreport]\n            view=cpu_routers_highestmax\n            timeframe=hour\n            rows=5\n            \"\"\"\n        expected_reports = {\n            'myreport': {\n                'timeframe': 'hour',\n                'view': 'cpu_routers_highestmax',\n                'rows': 5,\n            }\n        }\n        with patch.object(SortedStatsConfig, 'DEFAULT_CONFIG', config):\n            conf = SortedStatsConfig()\n            reports = conf.get_reports('hour')\n        self.assertEqual(reports, expected_reports)\n\n    def test_config_ignores_other_timestamps(self):\n        config = \"\"\"\n            [myreport]\n            view=cpu_routers_highestmax\n            timeframe=day\n            rows=5\n            \"\"\"\n        with patch.object(SortedStatsConfig, 'DEFAULT_CONFIG', config):\n            conf = SortedStatsConfig()\n            reports = conf.get_reports('hour')\n        self.assertEqual(reports, dict())\n\n    def test_invalid_config_returns_no_report(self):\n        config = \"\"\"\n            [myreport]\n            view=cpu_routers_highestmax\n            timeframe=invalid\n            rows=5\n            \"\"\"\n        with patch.object(SortedStatsConfig, 'DEFAULT_CONFIG', config):\n            conf = SortedStatsConfig()\n            reports = conf.get_reports('hour')\n        self.assertEqual(reports, dict())\n\n    def test_invalid_timeframe_should_raise_exception(self):\n        conf = SortedStatsConfig()\n        with self.assertRaises(ValueError):\n            conf.validate_timeframe('invalid_timeframe')\n\n    def test_invalid_view_should_raise_exception(self):\n        conf = SortedStatsConfig()\n        with self.assertRaises(ValueError):\n            conf.validate_timeframe('invalid_view')\n\n    def test_invalid_rows_should_raise_exception(self):\n        conf = SortedStatsConfig()\n        with self.assertRaises(ValueError):\n            conf.validate_timeframe(0)\n"
  },
  {
    "path": "tests/unittests/web/threshold_test.py",
    "content": "from nav.web.threshold.forms import ThresholdForm\n\n\ndef test_empty_thresholdform_should_not_validate():\n    form = ThresholdForm()\n    assert not form.is_valid()\n\n\ndef test_thresholdform_with_invalid_period_should_not_validate():\n    form = ThresholdForm(\n        dict(\n            target='some.graphite.metric',\n            alert='>15',\n            clear='<14',\n            period='bad value',\n        )\n    )\n    assert not form.is_valid()\n\n\ndef test_thresholdform_with_invalid_alert_expression_should_not_validate():\n    form = ThresholdForm(\n        dict(\n            target='some.graphite.metric',\n            alert='>><15',\n            clear='<14',\n            period='10m',\n        )\n    )\n    assert not form.is_valid()\n\n\ndef test_filled_thresholdform_should_validate():\n    form = ThresholdForm(\n        dict(\n            target='some.graphite.metric',\n            alert='>15',\n            clear='<14',\n            period='15m',\n        )\n    )\n    assert form.is_valid()\n"
  },
  {
    "path": "tests/unittests/web/urls_test.py",
    "content": "from django.urls import reverse\n\n\ndef test_ipdevinfo_interface_details_should_support_typical_sysnames():\n    assert reverse(\n        'ipdevinfo-interface-details',\n        args=('example-name123_underscore.example.org', '123'),\n    )\n\n\ndef test_ipdevinfo_interface_details_should_support_ipv4_address():\n    assert reverse('ipdevinfo-interface-details', args=('10.1.2.3', '123'))\n\n\ndef test_ipdevinfo_interface_details_should_support_ipv6_address():\n    assert reverse('ipdevinfo-interface-details', args=('fe80::1234:abcd', '123'))\n\n\ndef test_ipdevinfo_interface_details_by_name_should_support_typical_sysnames():\n    assert reverse(\n        'ipdevinfo-interface-details-by-name',\n        args=('example-name123_underscore.example.org', '123'),\n    )\n\n\ndef test_ipdevinfo_interface_details_by_name_should_support_ipv4_address():\n    assert reverse('ipdevinfo-interface-details-by-name', args=('10.1.2.3', '123'))\n\n\ndef test_ipdevinfo_interface_details_by_name_should_support_ipv6_address():\n    assert reverse(\n        'ipdevinfo-interface-details-by-name', args=('fe80::1234:abcd', '123')\n    )\n"
  },
  {
    "path": "tests/unittests/web/webfront_test.py",
    "content": "from nav.web.webfront.utils import split_tools, Tool\n\n\ndef test_tools_should_be_split_in_3_columns():\n    icon = ''\n    description = ''\n    tools = [\n        Tool('one', '/one', icon, description),\n        Tool('two', '/two', icon, description),\n        Tool('three', '/three', icon, description),\n        Tool('four', '/four', icon, description),\n    ]\n    split = split_tools(tools, parts=3)\n    assert len(split) == 3\n"
  },
  {
    "path": "tools/README",
    "content": "This directory contains developer tools for NAV.  The tools are not to be\nincluded in an actual NAV installation.\n\n"
  },
  {
    "path": "tools/buglog.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2008, 2011, 2017, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nExtracts closed issues from a NAV milestone on GitHub to produce a list of\nfixed issues for a release changelog entry.\n\"\"\"\n\nimport re\nimport sys\nimport textwrap\nimport operator\nfrom argparse import ArgumentParser\n\nfrom github import Github  # pip install PyGithub\nfrom git import Repo  # pip install GitPython\n\nCOMMIT_LOG_ISSUE_PATTERN = re.compile(\n    r\"\\b(merge.*|close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved) \"\n    r\"#(?P<issueno>[0-9]+)\",\n    re.IGNORECASE,\n)\n\n\ndef main():\n    parser = ArgumentParser(description=__doc__)\n    parser.add_argument(\"version\")\n    parser.add_argument(\"--token\", \"-t\", type=str, help=\"GitHub API token to use\")\n    parser.add_argument(\n        \"--no-markdown\",\n        \"-m\",\n        action=\"store_true\",\n        help=\"Output in legacy format rather than markdown\",\n    )\n    parser.add_argument(\n        \"--gitlog\",\n        action=\"store_true\",\n        help=\"Get issue list from git log comments rather than a milestone. Uses git \"\n        \"log output for -r <version>..HEAD\",\n    )\n    args = parser.parse_args()\n\n    if args.token:\n        hub = Github(args.token)\n    else:\n        hub = Github()\n\n    repo = hub.get_user('Uninett').get_repo('nav')\n    if args.gitlog:\n        issues = get_issues_from_gitlog(repo, args.version)\n    else:\n        issues = get_issues_from_milestone(repo, args.version)\n\n    formatter = format_issue if args.no_markdown else format_issue_markdown\n    for issue in sorted(issues, key=operator.attrgetter('number')):\n        print(formatter(issue))\n\n\ndef get_issues_from_milestone(github_repo, version):\n    milestones = [\n        m for m in github_repo.get_milestones(state='all') if m.title == version\n    ]\n    if milestones:\n        mstone = milestones[0]\n    else:\n        print(\"Couldn't find milestone for {}\".format(version), file=sys.stderr)\n        sys.exit(1)\n\n    return github_repo.get_issues(state='closed', milestone=mstone)\n\n\ndef get_issues_from_gitlog(github_repo, version):\n    issue_numbers = set()\n    local_repo = Repo('.', search_parent_directories=True)\n    for commit in local_repo.iter_commits(rev=f\"{version}..HEAD\"):\n        for match in COMMIT_LOG_ISSUE_PATTERN.finditer(commit.message):\n            issue_numbers.add(int(match.group('issueno')))\n\n    queue = list(issue_numbers)\n    while queue:\n        number = queue.pop()\n        issue = github_repo.get_issue(number)\n        yield issue\n        if issue.pull_request and issue.body:\n            for match in COMMIT_LOG_ISSUE_PATTERN.finditer(issue.body):\n                linked_issue_no = int(match.group('issueno'))\n                if linked_issue_no not in issue_numbers:\n                    issue_numbers.add(linked_issue_no)\n                    queue.append(linked_issue_no)\n\n\ndef format_issue(issue):\n    lead_in = \"  * #{:<4} (\".format(issue.number)\n    indent = \" \" * len(lead_in)\n    line = \"{}{})\".format(lead_in, issue.title)\n\n    return '\\n'.join(textwrap.wrap(line, width=72, subsequent_indent=indent))\n\n\ndef format_issue_markdown(issue):\n    line = \"- {title} ([#{number:<4}]({url}))\"\n    return line.format(number=issue.number, title=issue.title, url=issue.html_url)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/docker/build.sh",
    "content": "#!/bin/bash\n\nset -ex\n\nif [[ ! -f \"/source/pyproject.toml\" ]]; then\n  echo NAV source code does not appear to be mounted at /source\n  exit 1\nfi\n\ncd /source\npip install -e .\nmake sassbuild\n\nif [[ ! -f \"/etc/nav/nav.conf\" ]]; then\n    echo \"Copying initial NAV config files into this container\"\n    nav config install --verbose /etc/nav\n    cd /etc/nav\n    sed -e 's/^#\\s*\\(DJANGO_DEBUG.*\\)$/\\1/' -i nav.conf  # Enable django debug.\n    sed -e 's/^NAV_USER\\s*=.*/NAV_USER=nav/' -i nav.conf  # Set the nav user\n    sed -e 's/dbhost=.*/dbhost=postgres/g' -i db.conf  # Set nav as db password.\n    sed -e 's/userpw_nav=.*/userpw_nav=nav/g' -i db.conf  # Set nav as db password.\n\n    cp /source/tools/docker/graphite.conf /etc/nav/graphite.conf\nfi\n\nsudo chown -R nav /tmp/nav_cache\n"
  },
  {
    "path": "tools/docker/doc-watch.sh",
    "content": "#!/bin/bash -ex\n# Rebuilds Sphinx documentation on changes\n#\ncd /source\n# Build once first\npip install -e .\nsphinx-build doc/ build/sphinx/html/\n# Then re-build on any changes to the doc directory\nwhile inotifywait -e modify -e move -e create -e delete -r --exclude \\# /source/doc /source/NOTES.rst\ndo\n  sphinx-build doc/ build/sphinx/html/\ndone\n"
  },
  {
    "path": "tools/docker/full-nav-restore.sh",
    "content": "#!/bin/bash -e\n# This simple script is designed to run inside a docker development instance,\n# doing a full database drop-and-restore cycle\n#\n# Usage example (from host system):\n# ssh <production-nav> /usr/lib/nav/navpgdump --only-open-arp --only-open-cam | \\\n#   docker exec -i <container-id> full-nav-restore.sh\n#\nif ! which navsyncdb 2>/dev/null; then\n    echo \"NAV source directory not correctly mounted on /source\" > /dev/stderr\n    exit 1\nfi\nsudo nav stop\nexport PGHOST=postgres\nexport PGUSER=postgres\n\necho \"Forcefully terminating all other connections to the database:\"\npsql -c \"\nSELECT pg_terminate_backend(pg_stat_activity.pid)\nFROM pg_stat_activity\nWHERE pg_stat_activity.datname = 'nav'\n  AND pid <> pg_backend_pid();\n\"\n\nnavsyncdb --drop-database --create --restore -\necho \"NOT starting NAV after db restore, please do it manually!\"\n\n# If Django runserver is running, this ensures it reloads after the database is\n# replaced:\ntest -f /source/python/nav/__init__.py && touch /source/python/nav/__init__.py\n"
  },
  {
    "path": "tools/docker/graphite/Dockerfile",
    "content": "FROM debian:bookworm\n\n#### Prepare the OS base setup ###\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN apt-get update && \\\n    apt-get -y --no-install-recommends install \\\n            locales \\\n            sudo python3 supervisor \\\n\t        gnupg debian-keyring debian-archive-keyring ca-certificates\n\nARG TIMEZONE=Europe/Oslo\nARG LOCALE=en_US.UTF-8\nARG ENCODING=UTF-8\nRUN echo \"${LOCALE} ${ENCODING}\" > /etc/locale.gen && locale-gen ${LOCALE} && update-locale LANG=${LOCALE} LC_ALL=${LOCALE}\nENV LANG=${LOCALE}\nENV LC_ALL=${LOCALE}\nRUN echo \"${TIMEZONE}\" > /etc/timezone && cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime\n\nRUN apt-get update \\\n   && apt-get -y install graphite-carbon graphite-web\n\nCOPY carbon.conf /etc/carbon/\nCOPY supervisord.conf /etc/supervisor/conf.d/graphite.conf\n\nRUN echo \"TIME_ZONE = 'Europe/Oslo'\" >> /etc/graphite/local_settings.py && \\\n    echo \"SECRET_KEY = '$(gpg -a --gen-random 1 51)'\" >> /etc/graphite/local_settings.py && \\\n    echo \"DEBUG=True\" >> /etc/graphite/local_settings.py\nUSER _graphite\nENV DJANGO_SETTINGS_MODULE=graphite.settings\nRUN django-admin migrate auth --noinput --settings=graphite.settings \\\n    && django-admin migrate --run-syncdb --noinput --settings=graphite.settings\nUSER root\n\nEXPOSE 2003/udp 2003 2004 8000\nCMD    [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "tools/docker/graphite/carbon.conf",
    "content": "# Carbon configuration file for NAV developer Docker image\n[cache]\nUSER = _graphite\n\nSTORAGE_DIR    = /var/lib/graphite/\nLOCAL_DATA_DIR = /var/lib/graphite/whisper/\nCONF_DIR       = /etc/carbon/\nLOG_DIR        = /var/log/carbon/\nPID_DIR        = /var/run/\n\nDATABASE = whisper\n\nMAX_CACHE_SIZE = inf\nMAX_UPDATES_PER_SECOND = 500\nMAX_CREATES_PER_MINUTE = inf\nLINE_RECEIVER_INTERFACE = ::\nLINE_RECEIVER_PORT = 2003\nENABLE_UDP_LISTENER = True\nUDP_RECEIVER_INTERFACE = ::\nUDP_RECEIVER_PORT = 2003\nPICKLE_RECEIVER_INTERFACE = ::\nPICKLE_RECEIVER_PORT = 2004\nUSE_INSECURE_UNPICKLER = False\nCACHE_QUERY_INTERFACE = ::\nCACHE_QUERY_PORT = 7002\nUSE_FLOW_CONTROL = True\nLOG_UPDATES = False\nWHISPER_AUTOFLUSH = False\n"
  },
  {
    "path": "tools/docker/graphite/supervisord.conf",
    "content": "[supervisord]\nnodaemon = true\n\n[program:carbon-cache]\n#user =\ncommand = /usr/bin/carbon-cache --config /etc/carbon/carbon.conf --debug start\n#stdout_logfile = /var/log/supervisor/%(program_name)s.log\n#redirect_stderr=true\nautorestart = true\npriority = 20\n\n[program:graphite-web]\nuser = _graphite\ndirectory = /\ncommand = django-admin runserver --settings=graphite.settings 0.0.0.0:8000\n#stdout_logfile = /var/log/supervisor/%(program_name)s.log\n#redirect_stderr=true\nautorestart = true\n"
  },
  {
    "path": "tools/docker/graphite.conf",
    "content": "[carbon]\nhost = graphite\nport = 2003\n\n[graphiteweb]\nbase=http://graphite:8000/\n"
  },
  {
    "path": "tools/docker/nav-apache-site.conf",
    "content": "<VirtualHost *:80>\n    ServerAdmin webmaster@localhost\n    Include /etc/nav/apache/apache.conf\n</VirtualHost>\n"
  },
  {
    "path": "tools/docker/nav-start.sh",
    "content": "#!/bin/bash\nif [ \"$NONAVSTART\" -gt 0 ]; then\n    echo \"NONAVSTART is set, not starting NAV backend processes\" >&2\n    exit 0\nelse\n    exec nav start\nfi\n"
  },
  {
    "path": "tools/docker/run.sh",
    "content": "#!/bin/bash\n\nset -ex\n\n# Ensure latest NAV code is built\nmydir=$(dirname $0)\n\"$mydir/build.sh\"\n\n\"$mydir/syncdb.sh\" || exit\n\n# Start supervisor to control the rest of the runtime\n[[ -f /source/tools/docker/supervisord.conf ]] && \\\n  sudo cp /source/tools/docker/supervisord.conf /etc/supervisor/conf.d/nav.conf\nexec sudo -E /usr/bin/supervisord -c /etc/supervisor/supervisord.conf\n"
  },
  {
    "path": "tools/docker/sass-watch.sh",
    "content": "#!/usr/bin/env bash\n# ensures CSS files are rebuilt on SASS file changes\n#\ncd /source\nmake sasswatch\n"
  },
  {
    "path": "tools/docker/supervisord.conf",
    "content": "[supervisord]\nnodaemon = true\n\n[program:cron]\ncommand = /usr/sbin/cron -f\nstdout_logfile = /var/log/supervisor/%(program_name)s.log\nredirect_stderr=true\nautorestart = true\npriority = 30\n\n[program:nav]\ncommand = /source/tools/docker/nav-start.sh\nautorestart = false\nstartsecs = 0\n\n[program:sass-watcher]\nuser = nav\ncommand = /source/tools/docker/sass-watch.sh\nstdout_logfile = /var/log/supervisor/%(program_name)s.log\nredirect_stderr=true\nautorestart = true\n"
  },
  {
    "path": "tools/docker/syncdb.sh",
    "content": "#!/bin/bash -ex\ncd /source\nexport PGHOST=postgres PGUSER=postgres\npsql -l -t | grep -q '^ *nav' || navsyncdb -c\nnavsyncdb -o\n"
  },
  {
    "path": "tools/docker/web.sh",
    "content": "#!/bin/bash\n\nset -ex\n\n# Ensure latest NAV code is built\nmydir=$(dirname $0)\n\"$mydir/build.sh\"\ncd /source\n\n\ndjango-admin check && exec django-admin runserver --insecure 0.0.0.0:8080\n"
  },
  {
    "path": "tools/dump-remote-db.sh",
    "content": "#!/bin/sh -e\nREMOTE=\"$1\"\n\nif [ -z \"$REMOTE\" ]; then\n    echo \"Must give remote SSH host/username combo as argument\" >> /dev/stderr\n    exit 1\nfi\necho \"Dumping NAV database from $REMOTE\"\n\n# This filters potentially huge amounts of old log data and also user alert\n# profiles (so as not to start sending notifications to real users from a dev\n# environment):\nssh \"$REMOTE\" navpgdump --only-open-arp --only-open-cam -e alertprofile -e alerthist\n"
  },
  {
    "path": "tools/eventgenerators/boxevent.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2015, 2019 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Script to simulate up/down events from pping\"\"\"\n\nimport argparse\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.models.event import EventQueue as Event, Subsystem, EventType\nfrom nav.models.manage import Netbox\nfrom django.db import transaction\n\n\nDEFAULT_KWARGS = {\n    'source': Subsystem.objects.get(pk='pping'),\n    'target': Subsystem.objects.get(pk='eventEngine'),\n    'event_type': EventType.objects.get(pk='boxState'),\n}\n\n\n@transaction.atomic\ndef main():\n    \"\"\"Main script controller\"\"\"\n    args = create_parser().parse_args()\n\n    for sysname in args.sysname:\n        boxes = Netbox.objects.filter(sysname__icontains=sysname)\n        if boxes.exists():\n            for netbox in boxes:\n                send_event(netbox, args.event, send=args.dry_run)\n        else:\n            print(\"No netboxes matched: %r\" % args.sysname, file=sys.stderr)\n            exit(1)\n\n\ndef create_parser():\n    \"\"\"Create a parser for the script arguments\"\"\"\n    parser = argparse.ArgumentParser(\n        description='Script to simulate up/down events from pping'\n    )\n    parser.add_argument(\n        'event', help='Type of event to simulate', choices=['up', 'down']\n    )\n    parser.add_argument('sysname', nargs='+', help='Sysname used to filter netboxes')\n    parser.add_argument(\n        '--dry-run',\n        action='store_false',\n        help='Print the events to be sent without sending them',\n    )\n    return parser\n\n\ndef send_event(netbox, event_spec, send=True):\n    \"\"\"Send a boxstate event for a given netbox\"\"\"\n    event = Event(**DEFAULT_KWARGS)\n    event.netbox = netbox\n    event.state = Event.STATE_END if event_spec == 'up' else Event.STATE_START\n    print(event)\n\n    if send:\n        event.save()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/devicenotice.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2023 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom argparse import ArgumentParser\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.event2 import EventFactory\nfrom nav.models.manage import Device\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    args = parse_options()\n\n    device = Device.objects.get(serial=args.serial)\n    event = EventFactory('ipdevpoll', 'eventEngine', 'deviceNotice')\n    event.notify(\n        device=device,\n        alert_type=args.alerttype,\n        varmap={\n            \"old_version\": \"old\",\n            \"new_version\": \"new\",\n        },\n    ).save()\n\n\ndef parse_options():\n    \"\"\"Parse command line options and args\"\"\"\n    parser = ArgumentParser()\n    parser.add_argument('-s', dest='serial', required=True, help='Serial of device')\n    parser.add_argument(\n        '-a', dest='alerttype', required=True, help='The name of the alert type'\n    )\n    return parser.parse_args()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/genericstate.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module comment\"\"\"\n\nfrom argparse import ArgumentParser\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.event import Event\nfrom nav.models.event import EventQueue, EventType\nfrom nav.models.manage import Netbox\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    namespace = parse_options()\n\n    netbox = Netbox.objects.get(sysname__icontains=namespace.sysname)\n    eventtype = EventType.objects.get(pk__icontains=namespace.eventtype)\n    event = Event(\n        source=\"ipdevpoll\",\n        target=\"eventEngine\",\n        netboxid=netbox.id,\n        subid=namespace.subid,\n        eventtypeid=eventtype.id,\n        state=get_state(namespace),\n    )\n\n    if namespace.alerttype:\n        event['alerttype'] = namespace.alerttype\n    event.post()\n\n\ndef parse_options():\n    \"\"\"Parse command line options and args\"\"\"\n    parser = ArgumentParser()\n    parser.add_argument(\n        '-e', dest='eventtype', required=True, help='The name of the event type'\n    )\n    parser.add_argument('-n', dest='sysname', required=True, help='Netbox sysname')\n    parser.add_argument('-a', dest='alerttype', help='The name of the alert type')\n    parser.add_argument('--subid', dest='subid', default=None, help='The subid to use')\n    parser.add_argument(\n        'state',\n        choices=('s', 'e'),\n        help='The state of the event (nothing if stateless)',\n    )\n    return parser.parse_args()\n\n\ndef get_state(args):\n    \"\"\"Return correct event state based on args\"\"\"\n    if not args:\n        return EventQueue.STATE_STATELESS\n    else:\n        return (\n            EventQueue.STATE_START\n            if args.state.startswith('s')\n            else EventQueue.STATE_END\n        )\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/linkevent.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2007, 2012, 2015 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Script to simulate link up/down events from snmptrapd / ipdevpoll\"\"\"\n\nimport argparse\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.models.event import EventQueue as Event, Subsystem, EventType\nfrom nav.models.manage import Interface\nfrom django.db import transaction\n\n\nDEFAULT_KWARGS = {\n    'source': Subsystem.objects.get(pk='ipdevpoll'),\n    'target': Subsystem.objects.get(pk='eventEngine'),\n    'event_type': EventType.objects.get(pk='linkState'),\n}\n\n\n@transaction.atomic\ndef main():\n    \"\"\"Main script controller\"\"\"\n    args = create_parser().parse_args()\n\n    for sysname, ifname in args.interfaces:\n        for interface in Interface.objects.filter(\n            netbox__sysname__icontains=sysname, ifname=ifname\n        ):\n            send_event(interface, args.event, send=args.dry_run)\n\n\ndef interface_spec(spec):\n    sysname, ifname = spec.split(\":\", 1)\n    return sysname, ifname\n\n\ndef create_parser():\n    \"\"\"Create a parser for the script arguments\"\"\"\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\n        'event', help='Type of event to simulate', choices=['up', 'down']\n    )\n    parser.add_argument(\n        'interfaces',\n        metavar='sysname:ifname',\n        nargs='+',\n        type=interface_spec,\n        help='Select which interfaces to make events for',\n    )\n    parser.add_argument(\n        '--dry-run',\n        action='store_false',\n        help='Print the events to be sent without sending them',\n    )\n    return parser\n\n\ndef send_event(interface, event_spec, send=True):\n    \"\"\"Send a linkState event for a given interface\"\"\"\n    event = Event(**DEFAULT_KWARGS)\n    event.netbox = interface.netbox\n    event.subid = interface.pk\n    event.state = Event.STATE_END if event_spec == 'up' else Event.STATE_START\n    print(\n        \"{type} {state} event for {subject}\".format(\n            type=event.event_type_id,\n            state=\"start\" if event.state == Event.STATE_START else \"end\",\n            subject=event.get_subject(),\n        )\n    )\n\n    if send:\n        event.save()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/moduleevent.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2007, 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"Script to simulate up/down module events from moduleMon\"\n\nimport sys\nfrom nav import db\n\n\ndef handler(cursor, boxlist, state):\n    for deviceid, netboxid, subid in boxlist:\n        sql = \"\"\"INSERT INTO eventq\n                   (source, target, deviceid, netboxid, subid, eventtypeid,\n                    state,severity)\n                 VALUES (%s, %s, %s, %s, %s, %s, %s, %s)\"\"\"\n        cursor.execute(\n            sql,\n            (\n                'moduleMon',\n                'eventEngine',\n                deviceid,\n                netboxid,\n                subid,\n                'moduleState',\n                state,\n                1,\n            ),\n        )\n\n\ndef main():\n    if len(sys.argv) <= 2:\n        print(\"Not enough arguments (%d), <match spec> <up|down>\" % (len(sys.argv),))\n        sys.exit(0)\n\n    connection = db.getConnection('getDeviceData', 'manage')\n    cursor = connection.cursor()\n\n    netboxes = []\n    device_dupes = set()\n    sysnames = []\n\n    for spec in sys.argv[1:-1]:\n        sql = \"\"\"SELECT module.deviceid,netboxid,moduleid,sysname,name\n                 FROM netbox\n                 JOIN module USING (netboxid)\n                 WHERE ip IS NOT NULL\n                    AND sysname ILIKE %s AND name ILIKE %s\"\"\"\n\n        box, module = spec.split(\":\")\n        cursor.execute(sql, (box, module))\n        for deviceid, netboxid, moduleid, sysname, modulename in cursor.fetchall():\n            if deviceid not in device_dupes:\n                netboxes.append((deviceid, netboxid, moduleid))\n                sysnames.append((sysname, modulename))\n            device_dupes.add(deviceid)\n\n    if sys.argv[-1].startswith(\"u\"):\n        state = \"e\"\n    elif sys.argv[-1].startswith(\"d\"):\n        state = \"s\"\n    else:\n        print(\"Unknown state: \" + sys.argv[-1])\n        sys.exit(0)\n\n    updown = \"up\" if (state == \"e\") else \"down\"\n    print(\"Modules going %s: %r\" % (updown, sysnames))\n    handler(cursor, netboxes, state)\n    connection.commit()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/servicestate.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module to fake servicestate events\n\nThis will create fake events and insert them into the database. Use for\ntesting purposes only.\n\n\"\"\"\n\nimport sys\nfrom optparse import OptionParser\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.models.event import EventQueue as Event, Subsystem, EventType\nfrom nav.models.manage import Netbox\nfrom nav.models.service import Service\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n\n    parser = create_parser()\n    (options, _) = parser.parse_args()\n    verify_options(options, parser)\n\n    if options.list_services:\n        print_services()\n        sys.exit()\n\n    try:\n        netbox = Netbox.objects.get(sysname__icontains=options.netbox)\n    except Netbox.DoesNotExist:\n        parser.error(\"No netbox found\")\n        sys.exit()\n\n    source = Subsystem.objects.get(pk='serviceping')\n    target = Subsystem.objects.get(pk='eventEngine')\n    eventtype = EventType.objects.get(pk='serviceState')\n\n    state = 's' if options.state.startswith('d') else 'e'\n\n    event = Event(\n        source=source,\n        target=target,\n        subid=options.subid,\n        netbox=netbox,\n        event_type=eventtype,\n        device=netbox.device,\n        state=state,\n    )\n    event.save()\n\n\ndef create_parser():\n    \"\"\"Create optionparser\"\"\"\n    parser = OptionParser(usage=\"Event needs netbox, state and subid\")\n    parser.add_option(\"-n\", dest=\"netbox\", help=\"part of sysname for netbox\")\n    parser.add_option(\"-i\", dest=\"subid\", help=\"id of service to send event for\")\n    parser.add_option(\"-s\", dest=\"state\", help=\"specify [u]p or [d]own event\")\n    parser.add_option(\n        \"-l\", action=\"store_true\", dest=\"list_services\", help=\"List current services\"\n    )\n    return parser\n\n\ndef verify_options(options, parser):\n    \"\"\"Verify the input from the user\"\"\"\n\n    if options.list_services:\n        return\n\n    if not (options.netbox and options.subid and options.state):\n        parser.error(\"Need all options to post event\")\n\n    if options.state[0].lower() not in ['u', 'd']:\n        parser.error(\"Specify [u]p or [d]own event\")\n\n\ndef print_services():\n    \"\"\"Print services used for subid\"\"\"\n    services = Service.objects.all()\n    string_format = \"%3s - %s\"\n    print(string_format % (\"ID\", \"Service\"))\n    for service in services:\n        print(string_format % (service.id, service))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/eventgenerators/snmpevent.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2007, 2012, 2017 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"Script to simulate snmpAgentState events from ipdevpoll\"\n\nimport sys\nfrom nav import db\nfrom nav.event import Event\n\nconnection = db.getConnection('default')\ndatabase = connection.cursor()\n\n\ndef handler(nblist, state):\n    for netboxid in nblist:\n        e = Event(\n            'ipdevpoll',\n            'eventEngine',\n            netboxid=netboxid,\n            eventtypeid='snmpAgentState',\n            state=state,\n            severity=1,\n        )\n        e['alerttype'] = 'snmpAgentDown' if state == 's' else 'snmpAgentUp'\n        e.post()\n\n\nif len(sys.argv) <= 2:\n    print(\"Not enough arguments (%d), <match spec> <up|down>\" % len(sys.argv))\n    sys.exit(0)\n\nnb = []\nnbdup = set()\nsysnames = []\n\nfor ii in range(1, len(sys.argv) - 1):\n    sql = (\n        \"SELECT netboxid,sysname,typeid FROM netbox JOIN room USING(roomid) \"\n        \"WHERE ip IS NOT NULL\"\n    )\n    qn = sys.argv[ii]\n    if (\n        qn.startswith(\"_\")\n        or qn.startswith(\"-\")\n        or qn.startswith(\"%\")\n        or qn.find(\",\") >= 0\n    ):\n        if qn.startswith(\"-\"):\n            qn = qn[1 : len(qn)]\n            sql += \" AND typeid IN (\"\n        elif qn.startswith(\"_\"):\n            qn = qn[1 : len(qn)]\n            sql += \" AND catid IN (\"\n        elif qn.startswith(\"%\"):\n            qn = qn[1 : len(qn)]\n            sql += \" AND roomid IN (\"\n        else:\n            sql += \" AND sysname IN (\"\n        ids = qn.split(\",\")\n        for i in range(0, len(ids)):\n            sql += \"'\" + ids[i] + \"',\"\n        if len(ids) > 0:\n            sql = sql[0 : len(sql) - 1]\n        sql += \")\"\n    else:\n        sql += \" AND sysname LIKE '\" + qn + \"'\"\n\n    database.execute(sql)\n    for netboxid, sysname, typeid in database.fetchall():\n        if netboxid not in nbdup:\n            nb.append(netboxid)\n            sysnames.append(sysname)\n        nbdup.add(netboxid)\n\nif sys.argv[len(sys.argv) - 1].startswith(\"u\"):\n    state = \"e\"\nelif sys.argv[len(sys.argv) - 1].startswith(\"d\"):\n    state = \"s\"\nelse:\n    print(\"Unknown state: \" + sys.argv[len(sys.argv) - 1])\n    sys.exit(0)\n\n\nif state == \"e\":\n    updown = \"up\"\nelse:\n    updown = \"down\"\nprint(\"SNMP agents going %s on: %r\" % (updown, sysnames))\nhandler(nb, state)\nconnection.commit()\n"
  },
  {
    "path": "tools/eventgenerators/thresholdstate.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2012 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n# more details.  You should have received a copy of the GNU General Public\n# License along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Module to fake thresholdstate events\n\nThis will create fake events and insert them into the database. Use for\ntesting purposes only.\n\n\"\"\"\n\nimport sys\n\nfrom nav.bootstrap import bootstrap_django\n\nbootstrap_django()\n\nfrom nav.models.event import EventQueue as Event, Subsystem, EventType\nfrom nav.models.manage import Netbox\n\n\ndef main():\n    \"\"\"Main controller\"\"\"\n    if len(sys.argv) <= 2:\n        print(\"Need netbox and eventstate\")\n        sys.exit()\n\n    netboxarg = sys.argv[1]\n    eventstate = sys.argv[2]\n    try:\n        subid = sys.argv[3]\n    except IndexError:\n        subid = \"\"\n\n    try:\n        netbox = Netbox.objects.get(sysname__icontains=netboxarg)\n    except Netbox.DoesNotExist:\n        print(\"No netbox found\")\n        sys.exit()\n\n    if eventstate[0] not in ['u', 'd']:\n        print(\"Specify [u]p or [d]own event\")\n        sys.exit()\n\n    source = Subsystem.objects.get(pk='thresholdMon')\n    target = Subsystem.objects.get(pk='eventEngine')\n    eventtype = EventType.objects.get(pk='thresholdState')\n\n    state = 's' if eventstate.startswith('d') else 'e'\n\n    #    oid = 'cpu1min'\n    #    value = '90'\n    event = Event(\n        source=source,\n        target=target,\n        subid=subid,\n        netbox=netbox,\n        event_type=eventtype,\n        state=state,\n    )\n    event.save()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/forward/Dockerfile",
    "content": "FROM debian:bookworm\nRUN apt-get update && apt-get install -y openssh-server socat sudo tini\nRUN echo '%adm ALL=NOPASSWD: /usr/bin/socat' > /etc/sudoers.d/socat\nRUN chmod 0440 /etc/sudoers.d/socat\nARG USER\nARG UID\nRUN useradd -u $UID -g adm --no-create-home $USER\nUSER $USER\n\nCOPY snmp_forward.sh /\nENTRYPOINT [\"tini\", \"/snmp_forward.sh\"]\n"
  },
  {
    "path": "tools/forward/snmp_forward.sh",
    "content": "#!/bin/bash\n# -----------------------------------------------------------------------\n# Shell script snmp_forward.sh\n# Create an SNMP tunnel to remote Agent through a hop host\n#\n# Inspired from:\n#   http://www.morch.com/2011/07/05/forwarding-snmp-ports-over-ssh-using-socat/\n# See also:\n#   https://gist.github.com/n-st/8886963\n# Created by Vegard Vesterheim (<vegardv@uninett.no>) 2017-04-07\n# -----------------------------------------------------------------------\n\nPROGNAME=$0\nPGID=$$\n\nsnmp_agent=${1:-158.38.12.155}\nhop_host=${2:-teknobyen-vk.uninett.no}\ntunnel_port=${3:-10000}\n\nremote_tunnel ()\n{\n    echo \"Setting up SSH tunnel to $snmp_agent via $hop_host ...\"\n    if [[ \"$snmp_agent\" == *\":\"* ]]; then\n        echo \"$snmp_agent looks like an IPv6 address, using an IPv6 tunnel\"\n        remote_addr=UDP6:\\\\[${snmp_agent}\\]:161\n    else\n        remote_addr=UDP4:${snmp_agent}:161\n    fi\n    ssh -tt -o ConnectTimeout=4 -L${tunnel_port}:127.0.0.1:${tunnel_port} $hop_host socat -T10 TCP4-LISTEN:${tunnel_port},fork ${remote_addr}\n}\n\nlocal_tunnel ()\n{\n    echo \"Setting up local socat tunnel to SSH tunnel...\"\n    sudo socat UDP4-LISTEN:161,fork TCP4:localhost:${tunnel_port}\n}\n\n\n# Ensure everything in process group is stopped if either tunnel process dies\ntrap \"echo A tunnel subprocess died, stopping all forwarding; kill -HUP -$PGID\" CHLD\n\nremote_tunnel &\nlocal_tunnel &\nwait  # Just wait for all background processes to die\n\n"
  },
  {
    "path": "tools/iana-enterprise.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2015 Uninett AS\n# Copyright (C) 2022 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nRetrieves IANAs current list of assigned enterprise numbers, and outputs\nthe data NAV wants, as Python code.\n\"\"\"\n\nimport sys\nimport os\nfrom collections import namedtuple, Counter\nfrom urllib.request import urlopen\nimport re\nimport string\nfrom datetime import datetime\n\nfrom nav.enterprise import ids\n\nIANA_URL = \"http://www.iana.org/assignments/enterprise-numbers\"\nEnterprise = namedtuple('Enterprise', 'decimal organization contact email')\n\nVENDOR_MAP = {\n    value: constant\n    for constant, value in vars(ids).items()\n    if constant.startswith('VENDOR_ID_')\n}\n_used_names = Counter(VENDOR_MAP)\n\nREPLACE_PATTERN = re.compile(r'[/_-]', re.UNICODE)\nSTRIP_UNDERSCORES = re.compile(r'(^_+|_+$)')\nSTRIP_MULTI_UNDERSCORES = re.compile(r'__+')\n\n\ndef main():\n    req = urlopen(IANA_URL)\n    enterprises = list(parse_enterprises(req))\n    print(\"# IANA assigned enterprise numbers\")\n    print(\"# As published at {}\".format(IANA_URL))\n    print(\n        \"# Generated by {} on {}\".format(os.path.basename(sys.argv[0]), datetime.now())\n    )\n    print(\"#\")\n\n    entmap = {}\n    for ent in enterprises:\n        var = get_vendor_variable(ent)\n        if var:\n            entmap[ent] = var\n            print(\"{} = {}\".format(var, ent.decimal))\n\n    # Is this map really necessary? It's huge!\n    # print(\"\\n# Name map\\n\")\n    # print(\"VENDOR_NAMES = {\")\n    #\n    # for ent in enterprises:\n    #     if ent in entmap:\n    #         print(\"    {}: {!r},\".format(entmap[ent], ent.organization))\n    #\n    # print(\"}\")\n\n\ndef parse_enterprises(filehandle):\n    \"\"\"Extracts Enterprise tuples from the given filehandle\"\"\"\n    line = filehandle.readline()\n    while line != \"\":\n        if line.rstrip().isdigit():\n            decimal = int(line.strip())\n            organization = filehandle.readline().decode('utf-8').strip()\n            contact = filehandle.readline().decode('utf-8').strip()\n            email = filehandle.readline().decode('utf-8').strip().replace('&', '@')\n            if email == '---none---':\n                email = None\n            yield Enterprise(decimal, organization, contact, email)\n\n        line = filehandle.readline()\n\n\ndef get_vendor_variable(ent):\n    \"\"\"Returns a suitable vendor id variable name for the given ent\"\"\"\n    if ent.decimal in VENDOR_MAP:\n        # Keep existing variable names from NAV for, stability and glory!\n        name = VENDOR_MAP[ent.decimal]\n        return name\n\n    if not ent.organization:\n        return\n\n    name = REPLACE_PATTERN.sub(' ', ent.organization.upper())\n    name = ''.join(c for c in name if c not in string.punctuation)\n    name = name.encode('ascii', errors='ignore').replace(' ', '_')\n    name = STRIP_UNDERSCORES.sub('', name)\n    name = STRIP_MULTI_UNDERSCORES.sub('_', name)\n    name = \"VENDOR_ID_{}\".format(name)\n\n    _used_names.update([name])\n    if _used_names[name] > 1:\n        name = \"{}_{}\".format(name, _used_names[name])\n\n    return name\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/release/announcement.py",
    "content": "#!/usr/bin/env -S uv run --script\n# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#     \"jinja2\",\n#     \"mistletoe\",\n# ]\n# ///\n#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under the\n# terms of the GNU General Public License version 3 as published by the Free\n# Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n# You should have received a copy of the GNU General Public License along with\n# NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"\nGenerate release announcement artifacts from CHANGELOG.md.\n\nProduces three outputs:\n1. GitHub release notes (markdown)\n2. Hugo blog post (markdown with frontmatter)\n3. Email announcement (plain text)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport re\nimport subprocess\nimport sys\nimport tempfile\nimport textwrap\nimport tomllib\nimport webbrowser\nfrom dataclasses import dataclass, field\nfrom datetime import datetime, timezone\nfrom pathlib import Path\n\nimport jinja2\nimport mistletoe\nfrom mistletoe.block_token import Heading\nfrom mistletoe.markdown_renderer import MarkdownRenderer\n\n\n# -----------------------------------------------------------------------------\n# Data structures\n# -----------------------------------------------------------------------------\n\n\n@dataclass\nclass ChangelogEntry:\n    \"\"\"Represents a single version entry from the changelog.\"\"\"\n\n    version: str\n    date: str\n    sections: dict[str, str] = field(default_factory=dict)\n\n\n# -----------------------------------------------------------------------------\n# Main entry point\n# -----------------------------------------------------------------------------\n\n\ndef main() -> int:\n    \"\"\"Main entry point.\"\"\"\n    parser = create_argument_parser()\n    args = parser.parse_args()\n\n    config = load_config(args.config)\n    if config is None:\n        return 1\n\n    entry = parse_changelog(args.changelog, args.version)\n    if entry is None:\n        return 1\n\n    # If no output flags specified, generate all\n    generate_all = not (args.github or args.blog or args.email)\n    do_github = args.github or generate_all\n    do_blog = args.blog or generate_all\n    do_email = args.email or generate_all\n\n    print(f\"Generating announcements for NAV {entry.version} ({entry.date})\")\n\n    github_md = generate_github_release(entry) if do_github else None\n\n    # Blog is always generated if email is needed (email derives from blog)\n    blog_md = (\n        generate_blog_post(entry, config, args.security)\n        if do_blog or do_email\n        else None\n    )\n\n    email_subject, email_body = (\n        generate_email(entry, config, blog_md, args.security)\n        if do_email\n        else (None, None)\n    )\n\n    # Only include blog in output if explicitly requested\n    # (not just for email derivation)\n    blog_output = blog_md if do_blog else None\n\n    if args.dry_run:\n        print_outputs(github_md, blog_output, email_subject, email_body)\n    else:\n        write_outputs(\n            args.output_dir, entry, github_md, blog_output, email_subject, email_body\n        )\n\n    if args.enact:\n        enact_announcements(\n            entry, config, github_md, blog_output, email_subject, email_body\n        )\n\n    return 0\n\n\ndef create_argument_parser() -> argparse.ArgumentParser:\n    \"\"\"Create and configure the argument parser.\"\"\"\n    parser = argparse.ArgumentParser(\n        description=__doc__,\n        formatter_class=argparse.RawDescriptionHelpFormatter,\n    )\n    parser.add_argument(\n        \"version\",\n        nargs=\"?\",\n        help=\"Version to extract (default: latest in changelog)\",\n    )\n    parser.add_argument(\n        \"--security\",\n        action=\"store_true\",\n        help=\"Mark as security release (affects email subject)\",\n    )\n    parser.add_argument(\n        \"--output-dir\",\n        type=Path,\n        default=Path(\".\"),\n        help=\"Write files to DIR (default: current directory)\",\n    )\n    parser.add_argument(\n        \"--changelog\",\n        type=Path,\n        default=Path(\"CHANGELOG.md\"),\n        help=\"Path to CHANGELOG.md (default: ./CHANGELOG.md)\",\n    )\n    parser.add_argument(\n        \"--config\",\n        type=Path,\n        default=Path(__file__).parent / \"announcement.toml\",\n        help=\"Path to config file\",\n    )\n    parser.add_argument(\n        \"--dry-run\",\n        action=\"store_true\",\n        help=\"Print to stdout only, don't write files\",\n    )\n    parser.add_argument(\n        \"--github\",\n        action=\"store_true\",\n        help=\"Generate GitHub release notes\",\n    )\n    parser.add_argument(\n        \"--blog\",\n        action=\"store_true\",\n        help=\"Generate Hugo blog post\",\n    )\n    parser.add_argument(\n        \"--email\",\n        action=\"store_true\",\n        help=\"Generate email announcement\",\n    )\n    parser.add_argument(\n        \"--enact\",\n        action=\"store_true\",\n        help=\"Enact announcements (copy blog, create GitHub draft, open email)\",\n    )\n    return parser\n\n\n# -----------------------------------------------------------------------------\n# Configuration and input parsing\n# -----------------------------------------------------------------------------\n\n\ndef load_config(config_path: Path) -> dict | None:\n    \"\"\"Load configuration from TOML file.\"\"\"\n    if not config_path.exists():\n        print(f\"Error: Config file not found: {config_path}\", file=sys.stderr)\n        return None\n    return tomllib.loads(config_path.read_text())\n\n\ndef parse_changelog(\n    changelog_path: Path, target_version: str | None = None\n) -> ChangelogEntry | None:\n    \"\"\"Parse CHANGELOG.md and extract the specified version entry.\n\n    Args:\n        changelog_path: Path to CHANGELOG.md\n        target_version: Version to extract, or None for the latest\n\n    Returns:\n        ChangelogEntry with parsed data, or None on error\n    \"\"\"\n    if not changelog_path.exists():\n        print(f\"Error: Changelog not found: {changelog_path}\", file=sys.stderr)\n        return None\n\n    try:\n        return extract_changelog_entry(changelog_path, target_version)\n    except ValueError as e:\n        print(f\"Error: {e}\", file=sys.stderr)\n        return None\n\n\ndef extract_changelog_entry(\n    changelog_path: Path, target_version: str | None\n) -> ChangelogEntry:\n    \"\"\"Extract a version entry from the changelog.\n\n    Raises:\n        ValueError: If version not found or changelog has no entries\n    \"\"\"\n    content = changelog_path.read_text()\n\n    with MarkdownRenderer() as renderer:\n        doc = mistletoe.Document(content)\n        entries = find_version_entries(doc, renderer)\n\n        if not entries:\n            raise ValueError(\"No version entries found in changelog\")\n\n        target_idx = find_target_version_index(entries, target_version)\n        return build_changelog_entry(doc, renderer, entries, target_idx)\n\n\ndef find_version_entries(doc, renderer) -> list[tuple[int, str, str]]:\n    \"\"\"Find all version headings in the document.\n\n    Returns:\n        List of (index, version, date) tuples\n    \"\"\"\n    version_pattern = re.compile(r\"\\[(\\d+\\.\\d+\\.\\d+)\\]\\s*-\\s*(\\d{4}-\\d{2}-\\d{2})\")\n    entries: list[tuple[int, str, str]] = []\n\n    for i, child in enumerate(doc.children):\n        if isinstance(child, Heading) and child.level == 2:\n            heading_text = renderer.render(child).strip().lstrip(\"#\").strip()\n            match = version_pattern.search(heading_text)\n            if match:\n                entries.append((i, match.group(1), match.group(2)))\n\n    return entries\n\n\ndef find_target_version_index(\n    entries: list[tuple[int, str, str]], target_version: str | None\n) -> int:\n    \"\"\"Find the index of the target version in entries.\n\n    Raises:\n        ValueError: If specified version not found\n    \"\"\"\n    if target_version is None:\n        return 0  # Latest version\n\n    for idx, (_, version, _) in enumerate(entries):\n        if version == target_version:\n            return idx\n\n    raise ValueError(f\"Version {target_version} not found in changelog\")\n\n\ndef build_changelog_entry(\n    doc, renderer, entries: list[tuple[int, str, str]], target_idx: int\n) -> ChangelogEntry:\n    \"\"\"Build a ChangelogEntry from the document at the given index.\"\"\"\n    heading_idx, version, date = entries[target_idx]\n\n    # Find where this version's content ends in the document\n    if target_idx + 1 < len(entries):\n        # Content ends at the next version's heading\n        content_end_idx = entries[target_idx + 1][0]\n    else:\n        # This is the last version, content goes to end of document\n        content_end_idx = len(doc.children)\n\n    entry = ChangelogEntry(version=version, date=date)\n    current_section: str | None = None\n    section_content: list[str] = []\n\n    for child in doc.children[heading_idx + 1 : content_end_idx]:\n        if isinstance(child, Heading) and child.level == 3:\n            if current_section and section_content:\n                content = \"\\n\".join(section_content).strip()\n                entry.sections[current_section] = normalize_list_items(content)\n            current_section = renderer.render(child).strip().lstrip(\"#\").strip()\n            section_content = []\n        elif current_section is not None:\n            rendered = renderer.render(child).strip()\n            if rendered:\n                section_content.append(rendered)\n\n    if current_section and section_content:\n        content = \"\\n\".join(section_content).strip()\n        entry.sections[current_section] = normalize_list_items(content)\n\n    return entry\n\n\ndef normalize_list_items(text: str) -> str:\n    \"\"\"Join continuation lines in markdown list items.\n\n    GitHub-flavored markdown preserves newlines, so multi-line list items\n    need to be collapsed to single lines for proper display.\n    \"\"\"\n    lines = text.split(\"\\n\")\n    result: list[str] = []\n    current_item: list[str] = []\n\n    for line in lines:\n        if line.startswith(\"- \"):\n            # Start of new list item - flush previous\n            if current_item:\n                result.append(\"- \" + \" \".join(current_item))\n            current_item = [line[2:]]  # Remove \"- \" prefix\n        elif current_item and line.startswith(\"  \"):\n            # Continuation of list item (indented)\n            current_item.append(line.strip())\n        else:\n            # Not a list item\n            if current_item:\n                result.append(\"- \" + \" \".join(current_item))\n                current_item = []\n            result.append(line)\n\n    # Flush any remaining item\n    if current_item:\n        result.append(\"- \" + \" \".join(current_item))\n\n    return \"\\n\".join(result)\n\n\n# -----------------------------------------------------------------------------\n# Output generators\n# -----------------------------------------------------------------------------\n\n\ndef create_jinja_env() -> jinja2.Environment:\n    \"\"\"Create Jinja environment with custom filters.\"\"\"\n    template_dir = Path(__file__).parent / \"templates\"\n    env = jinja2.Environment(\n        loader=jinja2.FileSystemLoader(template_dir),\n        keep_trailing_newline=True,\n        trim_blocks=True,\n    )\n    env.filters[\"ordinal\"] = ordinal\n    env.filters[\"join_and\"] = lambda items: \", \".join(items[:-1]) + \" and \" + items[-1]\n    return env\n\n\ndef ordinal(n: int) -> str:\n    \"\"\"Return ordinal string for a number (first, second, 3rd, etc.).\n\n    Uses words for 1-2 and numeric ordinals thereafter.\n    \"\"\"\n    if n == 1:\n        return \"first\"\n    elif n == 2:\n        return \"second\"\n    elif 11 <= n % 100 <= 13:\n        suffix = \"th\"\n    else:\n        suffix = {1: \"st\", 2: \"nd\", 3: \"rd\"}.get(n % 10, \"th\")\n    return f\"{n}{suffix}\"\n\n\ndef generate_github_release(entry: ChangelogEntry) -> str:\n    \"\"\"Generate GitHub release notes from changelog entry.\"\"\"\n    lines: list[str] = []\n\n    for section, content in entry.sections.items():\n        lines.append(f\"## {section}\\n\")\n        lines.append(content)\n        lines.append(\"\")\n\n    return \"\\n\".join(lines).strip()\n\n\ndef generate_blog_post(\n    entry: ChangelogEntry,\n    config: dict,\n    is_security: bool = False,\n) -> str:\n    \"\"\"Generate Hugo blog post from changelog entry using Jinja template.\"\"\"\n    major, minor, patch = parse_version(entry.version)\n\n    env = create_jinja_env()\n    template = env.get_template(\"announcement.md.j2\")\n\n    now = datetime.now(timezone.utc).astimezone()\n    date_str = now.strftime(\"%Y-%m-%dT%H:%M:%S%z\")\n    date_str = date_str[:-2] + \":\" + date_str[-2:]\n\n    return template.render(\n        version=entry.version,\n        date=date_str,\n        major=major,\n        minor=minor,\n        patch=patch,\n        series=f\"{major}.{minor}\",\n        is_security=is_security,\n        sections=entry.sections,\n        urls=config[\"urls\"],\n        debian_releases=config[\"debian\"][\"releases\"],\n    )\n\n\ndef generate_email(\n    entry: ChangelogEntry,\n    config: dict,\n    blog_md: str,\n    is_security: bool = False,\n) -> tuple[str, str]:\n    \"\"\"Generate email announcement by converting blog markdown to plain text.\n\n    The blog post is treated as the canonical version. Email is derived by:\n    - Stripping YAML frontmatter\n    - Converting markdown links to numbered references\n    - Converting issue links [#1234](url) to just #1234\n    - Stripping other markdown formatting\n\n    Returns:\n        Tuple of (subject, body)\n    \"\"\"\n    subject = generate_email_subject(config, entry.version, is_security)\n\n    # Strip YAML frontmatter\n    body = strip_frontmatter(blog_md)\n\n    # Convert markdown to plain text with numbered references\n    body, urls = markdown_to_plaintext(body)\n\n    # Add links section if there are any URLs\n    if urls:\n        body = body.rstrip() + \"\\n\\n\\n## Links\\n\\n\"\n        for i, url in enumerate(urls, 1):\n            body += f\"[{i}] {url}\\n\"\n\n    return subject, wrap_email_body(body)\n\n\ndef generate_email_subject(config: dict, version: str, is_security: bool) -> str:\n    \"\"\"Generate email subject line.\"\"\"\n    template_key = \"security_subject_template\" if is_security else \"subject_template\"\n    return config[\"email\"][template_key].format(version=version)\n\n\ndef wrap_email_body(body: str) -> str:\n    \"\"\"Word wrap email body at 72 characters.\"\"\"\n    wrapped_lines: list[str] = []\n    for line in body.split(\"\\n\"):\n        if line.startswith(\"##\") or line.startswith(\"[\") or len(line) <= 72:\n            wrapped_lines.append(line)\n        elif line.startswith(\"- \"):\n            # Wrap list items with hanging indent\n            wrapped = textwrap.wrap(\n                line, width=72, initial_indent=\"\", subsequent_indent=\"  \"\n            )\n            wrapped_lines.extend(wrapped)\n        else:\n            wrapped_lines.extend(textwrap.wrap(line, width=72))\n    return \"\\n\".join(wrapped_lines)\n\n\ndef strip_frontmatter(text: str) -> str:\n    \"\"\"Strip YAML frontmatter from markdown text.\n\n    Frontmatter is delimited by --- at the start and end.\n    \"\"\"\n    if not text.startswith(\"---\"):\n        return text\n\n    # Find the closing ---\n    end_idx = text.find(\"---\", 3)\n    if end_idx == -1:\n        return text\n\n    # Skip past the closing --- and any following newlines\n    return text[end_idx + 3 :].lstrip(\"\\n\")\n\n\ndef markdown_to_plaintext(text: str) -> tuple[str, list[str]]:\n    \"\"\"Convert markdown to plain text with numbered link references.\n\n    Returns:\n        Tuple of (converted_text, list_of_urls)\n    \"\"\"\n    urls: list[str] = []\n\n    # Convert issue references: ([#1234](url)) -> (#1234)\n    text = re.sub(r\"\\(\\[#(\\d+)\\]\\([^)]+\\)\\)\", r\"(#\\1)\", text)\n\n    # Also handle bare issue links: [#1234](url) -> #1234\n    text = re.sub(r\"\\[#(\\d+)\\]\\([^)]+\\)\", r\"#\\1\", text)\n\n    def collect_link(match: re.Match) -> str:\n        \"\"\"Collect URL and return text with reference number.\"\"\"\n        link_text = match.group(1)\n        url = match.group(2)\n        urls.append(url)\n        return f\"{link_text} [{len(urls)}]\"\n\n    # Convert other links: [text](url) -> text [N]\n    text = re.sub(r\"\\[([^\\]]+)\\]\\(([^)]+)\\)\", collect_link, text)\n\n    # Convert backticks to nothing\n    text = re.sub(r\"`([^`]+)`\", r\"\\1\", text)\n\n    return text, urls\n\n\n# -----------------------------------------------------------------------------\n# Output writers\n# -----------------------------------------------------------------------------\n\n\ndef print_outputs(\n    github_md: str | None,\n    blog_md: str | None,\n    email_subject: str | None,\n    email_body: str | None,\n) -> None:\n    \"\"\"Print selected outputs to stdout (dry-run mode).\"\"\"\n    if github_md is not None:\n        print(\"\\n\" + \"=\" * 60)\n        print(\"GITHUB RELEASE NOTES\")\n        print(\"=\" * 60)\n        print(github_md)\n\n    if blog_md is not None:\n        print(\"\\n\" + \"=\" * 60)\n        print(\"BLOG POST\")\n        print(\"=\" * 60)\n        print(blog_md)\n\n    if email_body is not None:\n        print(\"\\n\" + \"=\" * 60)\n        print(f\"EMAIL (Subject: {email_subject})\")\n        print(\"=\" * 60)\n        print(email_body)\n\n\ndef write_outputs(\n    output_dir: Path,\n    entry: ChangelogEntry,\n    github_md: str | None,\n    blog_md: str | None,\n    email_subject: str | None,\n    email_body: str | None,\n) -> None:\n    \"\"\"Write selected outputs to files.\"\"\"\n    output_dir.mkdir(parents=True, exist_ok=True)\n\n    if github_md is not None:\n        github_file = output_dir / f\"nav-{entry.version}-github.md\"\n        github_file.write_text(github_md)\n        print(f\"  Wrote: {github_file}\")\n\n    if blog_md is not None:\n        blog_version = entry.version.replace(\".\", \"-\")\n        blog_file = output_dir / f\"nav-{blog_version}-released.md\"\n        blog_file.write_text(blog_md)\n        print(f\"  Wrote: {blog_file}\")\n\n    if email_body is not None:\n        email_file = output_dir / f\"nav-{entry.version}-email.txt\"\n        email_file.write_text(email_body)\n        print(f\"  Wrote: {email_file}\")\n        print(f\"  Email subject: {email_subject}\")\n\n\n# -----------------------------------------------------------------------------\n# Enactment functions\n# -----------------------------------------------------------------------------\n\n\ndef enact_announcements(\n    entry: ChangelogEntry,\n    config: dict,\n    github_md: str | None,\n    blog_md: str | None,\n    email_subject: str | None,\n    email_body: str | None,\n) -> None:\n    \"\"\"Enact the announcements (copy blog, create GitHub draft, open email).\"\"\"\n    print(\"\\nEnacting announcements...\")\n\n    if blog_md is not None:\n        enact_blog(entry, config, blog_md)\n\n    if github_md is not None:\n        enact_github(entry, github_md)\n\n    if email_body is not None:\n        enact_email(config, email_subject, email_body)\n\n\ndef enact_blog(entry: ChangelogEntry, config: dict, blog_md: str) -> None:\n    \"\"\"Copy blog post to landing page repository and stage it.\"\"\"\n    blog_config = config.get(\"blog\", {})\n    landing_page_path = blog_config.get(\"landing_page_blog_path\")\n\n    if not landing_page_path:\n        print(\"  Blog: Skipped (no landing_page_blog_path configured)\")\n        return\n\n    dest_dir = Path(landing_page_path).expanduser()\n    if not dest_dir.exists():\n        print(f\"  Blog: Error - directory not found: {dest_dir}\")\n        return\n\n    blog_version = entry.version.replace(\".\", \"-\")\n    dest_file = dest_dir / f\"nav-{blog_version}-released.md\"\n\n    dest_file.write_text(blog_md)\n    print(f\"  Blog: Wrote {dest_file}\")\n\n    # Add to git and show status\n    repo_dir = dest_dir.parent.parent  # Go up from content/blog to repo root\n    subprocess.run([\"git\", \"add\", str(dest_file)], cwd=repo_dir)\n    print(\"  Blog: Added to git staging area\")\n    print()\n    result = subprocess.run(\n        [\"git\", \"status\", \"--short\"], cwd=repo_dir, capture_output=True, text=True\n    )\n    print(f\"  Git status in {repo_dir}:\")\n    for line in result.stdout.strip().split(\"\\n\"):\n        print(f\"    {line}\")\n\n\ndef enact_github(entry: ChangelogEntry, github_md: str) -> None:\n    \"\"\"Create GitHub draft release and open in browser.\"\"\"\n    tag = entry.version\n    title = f\"NAV {entry.version}\"\n\n    # Write release notes to temp file for gh CLI\n    with tempfile.NamedTemporaryFile(\n        mode=\"w\", suffix=\".md\", delete=False\n    ) as notes_file:\n        notes_file.write(github_md)\n        notes_path = notes_file.name\n\n    try:\n        # Create draft release using gh CLI\n        result = subprocess.run(\n            [\n                \"gh\",\n                \"release\",\n                \"create\",\n                tag,\n                \"--draft\",\n                \"--title\",\n                title,\n                \"--notes-file\",\n                notes_path,\n            ],\n            capture_output=True,\n            text=True,\n        )\n\n        if result.returncode != 0:\n            print(f\"  GitHub: Error creating release: {result.stderr}\")\n            return\n\n        # Extract URL from output (gh outputs the release URL)\n        release_url = result.stdout.strip()\n        if release_url:\n            print(f\"  GitHub: Created draft release at {release_url}\")\n            # Open edit page in browser\n            edit_url = release_url.replace(\"/releases/tag/\", \"/releases/edit/\")\n            webbrowser.open(edit_url)\n            print(f\"  GitHub: Opened {edit_url} in browser\")\n        else:\n            print(\"  GitHub: Draft release created (no URL returned)\")\n\n    finally:\n        Path(notes_path).unlink()\n\n\ndef enact_email(config: dict, subject: str, body: str) -> None:\n    \"\"\"Open email client with announcement ready to send.\"\"\"\n    email_config = config.get(\"email\", {})\n    compose_command = email_config.get(\"compose_command\")\n    to_addresses = email_config.get(\"to\", [])\n\n    if not compose_command:\n        print(\"  Email: Skipped (no compose_command configured)\")\n        return\n\n    # Write subject and body to temp files\n    with tempfile.NamedTemporaryFile(\n        mode=\"w\", suffix=\".txt\", delete=False\n    ) as subject_file:\n        subject_file.write(subject)\n        subject_path = subject_file.name\n\n    with tempfile.NamedTemporaryFile(\n        mode=\"w\", suffix=\".txt\", delete=False\n    ) as body_file:\n        body_file.write(body)\n        body_path = body_file.name\n\n    try:\n        # Substitute placeholders in command\n        to_str = \", \".join(to_addresses) if to_addresses else \"\"\n        cmd = compose_command.format(\n            subject=subject,\n            subject_file=subject_path,\n            body_file=body_path,\n            to=to_str,\n        )\n\n        print(\"  Email: Running compose command...\")\n        subprocess.run(cmd, shell=True)\n        print(\"  Email: Compose command executed\")\n\n    finally:\n        Path(subject_path).unlink()\n        Path(body_path).unlink()\n\n\n# -----------------------------------------------------------------------------\n# Utility functions\n# -----------------------------------------------------------------------------\n\n\ndef parse_version(version: str) -> tuple[int, int, int]:\n    \"\"\"Parse version string into (major, minor, patch) tuple.\"\"\"\n    parts = version.split(\".\")\n    return int(parts[0]), int(parts[1]), int(parts[2])\n\n\n# -----------------------------------------------------------------------------\n# Script entry point\n# -----------------------------------------------------------------------------\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
  },
  {
    "path": "tools/release/announcement.toml",
    "content": "[debian]\nreleases = [\"11 (Bullseye)\", \"12 (Bookworm)\", \"13 (Trixie)\"]\n\n[urls]\ngithub_releases = \"https://github.com/Uninett/nav/releases\"\napt_repo = \"https://nav.uninett.no/install-instructions/#debian\"\nrelease_notes_base = \"https://nav.readthedocs.io/en/latest/release-notes.html\"\n\n[blog]\n# Path to nav-landing-page blog directory for --enact\nlanding_page_blog_path = \"~/d/nav-landing-page/content/blog\"\n\n[email]\nsubject_template = \"Announcement: NAV {version} released\"\nsecurity_subject_template = \"Security announcement: NAV {version} released\"\n# Recipients for --enact\nto = [\"nav-users@lister.sikt.no\"]\n# Command to open email client for --enact\n# Available placeholders: {subject}, {subject_file}, {body_file}, {to}\n# Example for mu4e in Emacs:\ncompose_command = '''emacsclient -cn --eval \"(nav-announcement-compose \\\"{to}\\\" \\\"{subject}\\\" \\\"{body_file}\\\")\"'''\n"
  },
  {
    "path": "tools/release/templates/announcement.md.j2",
    "content": "---\ntitle: 'NAV {{ version }} released'\ndate: {{ date }}\ndraft: false\ntags:\n- release\n---\n\n{% if is_security -%}\nA security release for the {{ series }} series of NAV is now out!\n{% elif patch == 0 -%}\nThe first feature release of the {{ series }} series of NAV is now out!\n{% else -%}\nThe {{ patch | ordinal }} maintenance release of the {{ series }} series of NAV is now out!\n{% endif %}\n\nThe source code is available for download at [GitHub]({{ urls.github_releases }}).\n\nNew packages for Debian {{ debian_releases | join_and }} are available in our [APT repository]({{ urls.apt_repo }}).\n\n{% for section, content in sections.items() %}\n## {{ section }}\n\n{{ content }}\n\n{% endfor %}\n## Release notes\n\nWe always advise you to have a look at [NAV's accompanying release notes]({{ urls.release_notes_base }}#nav-{{ major }}-{{ minor }}) before upgrading.\n\nHappy NAVing everyone!\n"
  },
  {
    "path": "tools/reset-db-from-remote.sh",
    "content": "#!/bin/sh\nmydir=\"$(dirname $0)\"\n\nexec \"${mydir}/dump-remote-db.sh\" \"$@\" | \"${mydir}/restore-db.sh\"\n"
  },
  {
    "path": "tools/reset-jwt-keys.sh",
    "content": "#!/bin/sh -e\nconfig_dir=$(dirname $(nav config where))\njwt_conf=\"${config_dir}/webfront/jwt.conf\"\nkey_file=/tmp/jwtRS256.key\npubkey_file=/tmp/jwtRS256.key.pub\n\necho \"This script will overwrite existing NAV JWT signing keys and re-configure the [nav] section of ${jwt_conf}\"\nread -p \"Continue? (y/n): \" continue\ncase $continue in\n    [Yy]* ) ;;\n    * ) echo \"Aborted.\"; exit 1;;\nesac\n\necho \"Generating new RSA keys..\"\nopenssl genrsa -out \"${key_file}\" 4096\nopenssl rsa -in \"${key_file}\" -pubout -outform PEM -out \"${pubkey_file}\"\n\necho \"Updating [nav] section of ${jwt_conf} ...\"\nuvx crudini --set \"${jwt_conf}\" nav private_key \"${key_file}\"\nuvx crudini --set \"${jwt_conf}\" nav public_key \"${pubkey_file}\"\nuvx crudini --set \"${jwt_conf}\" nav name \"localhost\"\nuvx crudini --set \"${jwt_conf}\" nav access_token_lifetime \"1h\"\nuvx crudini --set \"${jwt_conf}\" nav refresh_token_lifetime \"1d\"\n\necho \"Please restart the web server to ensure changes take effect\"\n"
  },
  {
    "path": "tools/restore-db.sh",
    "content": "#!/bin/bash -e\n# This simple script is designed to run inside a devcontainer doing a full\n# database drop-and-restore cycle.  It expects the SQL schema to load to\n# be its input on stdin.\n#\nif ! which navsyncdb 2>/dev/null; then\n    echo \"navsyncdb not available on PATH\" > /dev/stderr\n    exit 1\nfi\necho \"Stopping NAV background daemons:\"\nsudo nav stop\n\necho \"Forcefully terminating all other connections to the database:\"\npsql -c \"\nSELECT pg_terminate_backend(pg_stat_activity.pid)\nFROM pg_stat_activity\nWHERE pg_stat_activity.datname = 'nav'\n  AND pid <> pg_backend_pid();\n\"\n\necho \"Resetting database, expecting dump on stdin...\"\nnavsyncdb --drop-database --create --restore -\necho \"================================================================\"\necho \"Restore complete. Please start NAV processes manually as needed.\"\n"
  },
  {
    "path": "tools/snmpdv3/Dockerfile",
    "content": "FROM polinux/snmpd\nCOPY snmpd.conf /etc/snmp/snmpd.conf\nEXPOSE 161:161/udp\nCMD [\"-c\", \"/etc/snmp/snmpd.conf\"]\n"
  },
  {
    "path": "tools/snmpdv3/README.md",
    "content": "# SNMPv3 enabled SNMP daemon for SNMPv3 testing\n\nThis directory defines a simple docker image for a NET-SNMP-based SNMP daemon\nthat is enabled for responding to SNMPv3 requests.\n\n## Building the image\n\n```sh\ndocker build -t snmpd .\n```\n\n## Running a container to respond to SNMP locally\n\n```sh\ndocker run --name snmpd -p 161:161/udp snmpd\n```\n\n## Authentication and privacy\n\nUsing the SNMPv3 user security model (USM), this image sets up a read&write user\nnamed `myv3user`, with an authentication password of `my_authpass`, using AES\nencryption for security with a privacy password of `my_privpass`.\n\nFor SNMP v1 or v2c communication, it sets up a default read-only community of\n`public` and a read-write community of `private`.\n\n## Local testing\n\nThe entirety of the daemon's mib view can be queried using SNMPv3 by running\nthe following `snmpwalk` command:\n\n```sh\nsnmpwalk -v3 -l authPriv -u myv3user -a SHA -A \"my_authpass\" -x AES -X \"my_privpass\" localhost\n```\n"
  },
  {
    "path": "tools/snmpdv3/snmpd.conf",
    "content": "#        sec.name   source   community\ncom2sec  read       default  public\ncom2sec  readwrite  default  private\n\n#      groupName       securityModel  securityName\ngroup  readGroup       v1             read\ngroup  readGroup       v2c            read\ngroup  readwriteGroup  v1             readwrite\ngroup  readwriteGroup  v2c            readwrite\ngroup  readwriteGroup  usm            readwrite\n\n#     group       context   sec.model       sec.level  prefix  read  write  notif\nview  allview     included  .1\nview  publicview  included  .1.3.6.1.2.1.1\n\n#       group           context  sec.model  sec.level  prefix  read        write    notif\naccess  readGroup       \"\"       any        noauth     exact   publicview  none     none\naccess  readwriteGroup  \"\"       any        noauth     exact   allview     allview  none\n\ncreateUser myv3user SHA \"my_authpass\" AES \"my_privpass\"\nrwuser myv3user\n\n# Setting these here will make them read-only, unfortunately.\n# NAV/SeedDB needs them to be writeable to test for write-access\n#syslocation Milliways\n#syscontact NAV Developer <somebody@example.org>\ndontLogTCPWrappersConnects yes\n"
  },
  {
    "path": "tools/testsql.sh",
    "content": "#!/usr/bin/env bash\n#\n# Copyright 2008 Uninett AS\n#\n# This file is part of Network Administration Visualized (NAV)\n#\n# NAV is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# NAV is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with NAV; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n#\n# This script will run an SQL file through PostgreSQL and create an\n# error report if errors are found.\n#\n\nif test -z \"$1\"; then\n  echo You must supply an SQL script as a parameter\n  exit 1\nfi\nsql=\"$1\"\nif ! test -f \"$sql\"; then\n  echo The file $sql does not exist or is not a regular file\n  exit 1\nfi\ntmp=${TMPDIR:-/var/tmp}\nuniq=$$\n\nif test -z \"$PGUSER\"; then\n  read -p \"Enter a PostgreSQL user name: \" PGUSER\n  export PGUSER\nfi\nif test -z \"$PGPASSWORD\"; then\n  read -p \"Enter a password for this user: \" -s PGPASSWORD\n  echo\n  export PGPASSWORD\nfi\n\ndb=test_${uniq}\necho Creating test database \\(${db}\\)\ncreatedb ${db} && createlang plpgsql ${db}\n\nerrorlog=${tmp}/sqltest.error.${uniq}\necho Processing SQL\npsql -f ${sql} ${db} > /dev/null 2> ${errorlog}\nfgrep ERROR ${errorlog}\nrm -f ${errorlog}\n\necho Dropping test database \\(${db}\\)\ndropdb ${db}\n"
  },
  {
    "path": "tools/vendor.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (C) 2026 Sikt\n#\n# This file is part of Network Administration Visualized (NAV).\n#\n# NAV is free software: you can redistribute it and/or modify it under\n# the terms of the GNU General Public License version 3 as published by\n# the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n# details.  You should have received a copy of the GNU General Public License\n# along with NAV. If not, see <http://www.gnu.org/licenses/>.\n#\n\"\"\"Manage vendored JS libraries via npm.\"\"\"\n\nimport argparse\nimport json\nimport re\nimport shutil\nimport subprocess\nimport sys\nfrom pathlib import Path\n\nROOT = Path(__file__).resolve().parent.parent\nLIBS = ROOT / \"python/nav/web/static/js/libs\"\nCONFIG = ROOT / \"python/nav/web/static/js/require_config.js\"\nNODE = ROOT / \"node_modules\"\nVERSION_RE = re.compile(r\"-(\\d+\\.\\d+[\\d.a-zA-Z-]*?)(\\.min)?\\.js$\")\n\n\ndef _load_json(path):\n    with open(path) as f:\n        return json.load(f)\n\n\ndef get_deps():\n    return _load_json(ROOT / \"package.json\").get(\"dependencies\", {})\n\n\ndef resolve_source(npm_name):\n    \"\"\"Find the .min.js dist file and version for a package in node_modules.\n\n    Returns (source_path, version) or (None, None).\n    \"\"\"\n    pkg_path = NODE / npm_name / \"package.json\"\n    if not pkg_path.exists():\n        return None, None\n    pkg = _load_json(pkg_path)\n    for field in (\"jsdelivr\", \"unpkg\", \"browser\", \"main\"):\n        path = pkg.get(field)\n        if not isinstance(path, str) or not path.endswith(\".js\"):\n            continue\n        # Check both .min.js and -min.js naming conventions\n        for min_path in (\n            path.removesuffix(\".js\") + \".min.js\",\n            path.removesuffix(\".js\") + \"-min.js\",\n        ):\n            if (NODE / npm_name / min_path).exists():\n                return min_path, pkg[\"version\"]\n        if (NODE / npm_name / path).exists():\n            return path, pkg[\"version\"]\n    return None, None\n\n\nGENERIC_STEMS = {\"cdn\", \"index\", \"dist\", \"main\", \"umd\", \"bundle\"}\n\n\ndef _derive_name(npm_name, source_path):\n    \"\"\"Derive a short library name from the dist file, or fall back to npm name.\n\n    'dist/jquery.min.js' -> 'jquery'\n    'cdn.min.js'         -> falls back to npm_name\n    \"\"\"\n    stem = Path(source_path).stem.removesuffix(\".min\").removesuffix(\"-min\").lower()\n    if stem in GENERIC_STEMS:\n        return npm_name\n    return stem\n\n\ndef local_name(npm_name, source_path, version):\n    \"\"\"'jquery', 'dist/jquery.min.js', '4.0.0' -> 'jquery-4.0.0.min.js'\"\"\"\n    return f\"{_derive_name(npm_name, source_path)}-{version}.min.js\"\n\n\ndef find_old_file(base):\n    \"\"\"Find existing file in libs/ matching a base name.\"\"\"\n    for f in LIBS.glob(\"*.js\"):\n        m = VERSION_RE.search(f.name)\n        if m and f.name[: m.start()].lower() == base:\n            return f.name\n    return None\n\n\ndef sync_one(npm_name, config_text=None):\n    \"\"\"Sync one package. Returns (old, new, updated_config_text) or None.\n\n    If config_text is provided, references are updated in-memory and the\n    modified text is returned so the caller can batch-write once.\n    \"\"\"\n    source, version = resolve_source(npm_name)\n    if not source:\n        return None\n\n    name = _derive_name(npm_name, source)\n    new = local_name(npm_name, source, version)\n    if (LIBS / new).exists():\n        return None\n\n    old = find_old_file(name)\n\n    shutil.copy2(NODE / npm_name / source, LIBS / new)\n\n    if old and old != new:\n        (LIBS / old).unlink(missing_ok=True)\n        old_ref = f\"libs/{old.removesuffix('.js')}\"\n        new_ref = f\"libs/{new.removesuffix('.js')}\"\n        if config_text is None:\n            config_text = CONFIG.read_text()\n        config_text = config_text.replace(old_ref, new_ref)\n\n    return old, new, config_text\n\n\ndef npm_install(*args):\n    r = subprocess.run(\n        [\"npm\", \"install\", \"--legacy-peer-deps\", *args],\n        cwd=ROOT,\n        capture_output=True,\n        text=True,\n    )\n    if r.returncode != 0:\n        sys.exit(f\"npm install failed:\\n{r.stderr}\")\n\n\ndef _check_node_modules():\n    if not NODE.exists():\n        print(\"Note: node_modules not found. Run 'npm install --legacy-peer-deps'\")\n        print(\"      to enable version resolution from installed packages.\\n\")\n        return False\n    return True\n\n\ndef cmd_list():\n    _check_node_modules()\n    managed_files = set()\n    rows = []\n    for npm_name, version in sorted(get_deps().items()):\n        source, _ = resolve_source(npm_name)\n        name = _derive_name(npm_name, source) if source else npm_name\n        local = find_old_file(name)\n        if local:\n            managed_files.add(local)\n        rows.append((npm_name, version, local or \"(not synced)\"))\n    for f in sorted(LIBS.glob(\"*.js\")):\n        if f.name not in managed_files and VERSION_RE.search(f.name):\n            rows.append((\"(untracked)\", \"\", f.name))\n    if not rows:\n        print(\"No vendored libraries\")\n        return\n    w0 = max(len(r[0]) for r in rows + [(\"Name\",)])\n    w1 = max(len(r[1]) for r in rows + [(\"\", \"Version\")])\n    print(f\"  {'Name':<{w0}}  {'Version':<{w1}}  File\")\n    print(f\"  {'-' * w0}  {'-' * w1}  {'-' * max(len(r[2]) for r in rows)}\")\n    for name, version, local in rows:\n        print(f\"  {name:<{w0}}  {version:<{w1}}  {local}\")\n\n\ndef cmd_check():\n    \"\"\"Check for version mismatches, missing files, and untracked vendors.\"\"\"\n    _check_node_modules()\n    problems = []\n    managed_files = set()\n\n    for npm_name, version in sorted(get_deps().items()):\n        source, _ = resolve_source(npm_name)\n        if not source:\n            problems.append(f\"  {npm_name}: cannot resolve dist file\")\n            continue\n        name = _derive_name(npm_name, source)\n        expected = local_name(npm_name, source, version)\n        actual = find_old_file(name)\n        if actual:\n            managed_files.add(actual)\n        if not actual:\n            problems.append(f\"  {npm_name}: not synced (expected {expected})\")\n        elif actual != expected:\n            problems.append(f\"  {npm_name}: version mismatch ({actual} != {expected})\")\n\n    for f in sorted(LIBS.glob(\"*.js\")):\n        if f.name not in managed_files and VERSION_RE.search(f.name):\n            problems.append(f\"  {f.name}: untracked\")\n\n    if problems:\n        print(\"Problems found:\")\n        for p in problems:\n            print(p)\n        sys.exit(1)\n    else:\n        print(\"All vendored libraries OK\")\n\n\ndef cmd_sync():\n    if not NODE.exists():\n        print(\"node_modules not found, running npm install...\")\n        npm_install()\n    original_config = CONFIG.read_text()\n    config_text = original_config\n    n = 0\n    for pkg in sorted(get_deps()):\n        result = sync_one(pkg, config_text)\n        if result:\n            old, new, config_text = result\n            print(f\"  {pkg}: {old or '(new)'} -> {new}\")\n            n += 1\n    if config_text != original_config:\n        CONFIG.write_text(config_text)\n    print(f\"\\nSynced {n} library(ies)\" if n else \"Everything up to date\")\n\n\ndef _install_and_sync(name, version=None):\n    \"\"\"Install a package via npm and sync the vendored file.\n\n    Returns (old, new) on success, or None.\n    \"\"\"\n    spec = f\"{name}@{version}\" if version else f\"{name}@latest\"\n    npm_install(\"--save-exact\", spec)\n    result = sync_one(name)\n    if not result:\n        return None\n    old, new, config_text = result\n    if config_text is not None:\n        CONFIG.write_text(config_text)\n    return old, new\n\n\ndef cmd_update(name, version=None):\n    result = _install_and_sync(name, version)\n    if result:\n        old, new = result\n        print(f\"Updated: {old} -> {new}\")\n    else:\n        print(f\"{name} already up to date\")\n\n\ndef cmd_add(name, version=None):\n    result = _install_and_sync(name, version)\n    if result:\n        _, new = result\n        alias = VERSION_RE.sub(\"\", new).removesuffix(\".min.js\")\n        ref = new.removesuffix(\".js\")\n        print(f\"Added: {new}\")\n        print(f'Add to require_config.js: \"{alias}\": \"libs/{ref}\",')\n    else:\n        print(\"Could not resolve dist file. Copy manually from node_modules/\")\n\n\ndef cmd_remove(npm_name):\n    source, _ = resolve_source(npm_name)\n    if source:\n        old = find_old_file(_derive_name(npm_name, source))\n        if old:\n            (LIBS / old).unlink()\n            print(f\"Removed: {old}\")\n            old_ref = f\"libs/{old.removesuffix('.js')}\"\n            config_text = CONFIG.read_text()\n            lines = config_text.splitlines(keepends=True)\n            new_lines = [line for line in lines if old_ref not in line]\n            if len(new_lines) < len(lines):\n                CONFIG.write_text(\"\".join(new_lines))\n                print(\"Removed entry from require_config.js\")\n    else:\n        print(f\"Could not resolve dist file for {npm_name}, skipping file cleanup\")\n    r = subprocess.run([\"npm\", \"uninstall\", npm_name], cwd=ROOT)\n    if r.returncode != 0:\n        sys.exit(f\"npm uninstall failed for {npm_name}\")\n\n\ndef build_parser():\n    parser = argparse.ArgumentParser(description=__doc__)\n    sub = parser.add_subparsers(dest=\"command\", required=True)\n\n    sub.add_parser(\"list\", help=\"List vendored libraries and their status\")\n    sub.add_parser(\"check\", help=\"Check for version mismatches and untracked files\")\n    sub.add_parser(\"sync\", help=\"Sync all vendored libraries from node_modules\")\n\n    update = sub.add_parser(\"update\", help=\"Update a vendored package\")\n    update.add_argument(\"pkg\", help=\"npm package name\")\n    update.add_argument(\"--version\", dest=\"version\", help=\"Target version\")\n\n    add = sub.add_parser(\"add\", help=\"Add a new vendored package\")\n    add.add_argument(\"pkg\", help=\"npm package name\")\n    add.add_argument(\"--version\", dest=\"version\", help=\"Target version\")\n\n    remove = sub.add_parser(\"remove\", help=\"Remove a vendored package\")\n    remove.add_argument(\"pkg\", help=\"npm package name\")\n\n    return parser\n\n\nif __name__ == \"__main__\":\n    parser = build_parser()\n    args = parser.parse_args()\n\n    if args.command == \"list\":\n        cmd_list()\n    elif args.command == \"check\":\n        cmd_check()\n    elif args.command == \"sync\":\n        cmd_sync()\n    elif args.command == \"update\":\n        cmd_update(args.pkg, args.version)\n    elif args.command == \"add\":\n        cmd_add(args.pkg, args.version)\n    elif args.command == \"remove\":\n        cmd_remove(args.pkg)\n"
  },
  {
    "path": "tools/whatsgone.sh",
    "content": "#!/bin/sh -e\n\n# This script will try to determine which installed files have been removed\n# between two versions of NAV. It requires all the build prerequisites of both\n# versions to be present.\n\nOLDVER=\"$1\"\nNEWVER=\"$2\"\ntest -z \"$NEWVER\" && NEWVER=tip\n\nif [ -z \"$OLDVER\" ]; then\n    cat <<EOF \nThis script will try to determine which installed files have been removed\nbetween two versions of NAV. It requires all the build prerequisites of both\nversions to be present.\n\nUsage: whatsgone.sh <oldversion> [<newversion>]\nEOF\n    exit 1\nfi\n\nHG=$(which hg)\n\nif [ -z \"$HG\" ]; then\n    echo \"Cannot find a hg executable\"\n    exit 2\nfi\n\nREPO=$($HG root)\n\nif [ -z \"$REPO\" ]; then\n    echo \"Not inside a Mercurial repository\"\n    exit 2\nfi\n\n############# now start the good stuff ###############\n\nbuild() {\n    make distclean\n    ./autogen.sh\n    ./configure\n    make\n    DESTDIR=\"$1\" make install\n}\n\nbuild_version() {\n    local version=\"$1\"\n    local DESTDIR=\"build-$version\"\n    if [ -d \"$DESTDIR\" ]; then\n\techo \"$DESTDIR already exists, not building again\"\n\treturn\n    fi\n    hg up \"$version\"\n    mkdir \"$DESTDIR\"\n    build \"$PWD/$DESTDIR\"\n    (cd \"$DESTDIR\" && find) | sort | sed 's/^\\.//' > \"manifest-$version\"\n}\n\ncd \"$REPO\"\nbuild_version \"$OLDVER\"\nbuild_version \"$NEWVER\"\n\necho -----\necho \"These files appear to have been removed between $OLDVER and $NEWVER:\"\necho -----\ndiff -u \"manifest-$OLDVER\" \"manifest-$NEWVER\" | grep '^-' | grep -v '^---' | sed 's/^-//'\n\n"
  },
  {
    "path": "tox.ini",
    "content": "# -*- indent-tabs-mode: nil; -*-\n\n# When changing the python or django version also change it in the tox example\n# of the documentation in hacking.rst\n[tox]\nenvlist =\n    {unit,integration}-py{39,310,311}-django{42}\n    javascript\n    docs\nbasepython = python3.9\n\n[pytest]\naddopts = --failed-first\nmarkers =\n    twisted: marks tests as needing twisted async to run\n\n[gh-actions]\npython =\n    3.9: py39\n    3.10: py310\n    3.11: py311\n    3.12: py312\n    3.13: py313\n\n[testenv]\n# Baseline test environment\ndependency_groups =\n    test\nextras =\n    ldap\n\nsetenv =\n    LC_ALL=C.UTF-8\n    LANG=C.UTF-8\n    PYTHONPATH = {toxinidir}/tests\n    BUILDDIR = {envdir}\n    DJANGO_SETTINGS_MODULE = nav.django.settings\n    COVERAGE_FILE = {toxinidir}/reports/coverage/.coverage\n    PYTHONFAULTHANDLER=1\n    DJANGO_VER=42\n    django42: DJANGO_VER=42\n    django50: DJANGO_VER=50\n    django51: DJANGO_VER=51\n    django52: DJANGO_VER=52\n    UV_OVERRIDE=requirements/django{env:DJANGO_VER}.txt\n\npassenv =\n    C_INCLUDE_PATH\n    GITHUB_ACTIONS\n    GITHUB_RUN_ID\n    USER\n    PGHOST\n    PGPORT\n    PGDATABASE\n    PGUSER\n    PGPASSWORD\n    DISPLAY\n    DYLD_LIBRARY_PATH\n    LD_LIBRARY_PATH\nallowlist_externals =\n                      sh\n                      mkdir\n                      chmod\n                      make\n\npackage = editable\ncommands_pre =\n         mkdir -p {toxinidir}/reports/coverage\n         chmod 777 {toxinidir}/reports/coverage\n\ncommands =\n         unit: pytest -o junit_suite_name=\"{envname} unit tests\" --cov-config {toxinidir}/tests/.coveragerc --cov={toxinidir}/python --cov-report=xml:reports/{envname}/coverage.xml --junitxml=reports/{envname}/unit-results.xml --verbose {posargs:tests/unittests}\n\n         integration: make sassbuild\n\n         integration: pytest -o junit_suite_name=\"{envname} integration tests\" --cov-config {toxinidir}/tests/.coveragerc --cov={toxinidir}/python --cov-report=xml:reports/{envname}/coverage.xml --html reports/{envname}/integration-report.html --junitxml=reports/{envname}/integration-results.xml --verbose --showlocals --browser chromium {posargs:tests/integration tests/functional}\n\n\n[testenv:javascript]\nsetenv =\n         OPENSSL_CONF=/dev/null\nusedevelop=True\nallowlist_externals = {toxinidir}/tests/javascript-test.sh\ncommands_pre =\ndeps =\ncommands =\n         {toxinidir}/tests/javascript-test.sh \"{toxinidir}\"\n\n[testenv:docs]\ndescription = Just build the Sphinx documentation\nextras =\n    docs\n    ldap\n\npackage = editable\nsetenv =\n    PYTHONPATH = {toxinidir}/python:{toxinidir}/tests\n    DJANGO_SETTINGS_MODULE = nav.django.settings\n    LC_ALL=C.UTF-8\n    LANG=C.UTF-8\nallowlist_externals = sh\ncommands_pre =\ncommands =\n         sphinx-build doc/ doc/_build/\n         sh -c \"cd doc; python -c 'import conf; print(conf.version)' > {toxinidir}/reports/doc_version\"\n\n[testenv:django-warnings]\ndescription = Fail if Django produces warnings at or above the configured level\nextras =\n    ldap\nsetenv =\n    DJANGO_SETTINGS_MODULE = nav.django.settings\ncommands =\n    python -Wd -m nav.django.manage check --fail-level=ERROR\n"
  },
  {
    "path": "version.sh",
    "content": "#!/bin/sh\n# Update the package version number\nGIT=`which git`\n\nshow_help() {\n    cat <<EOF\n$0 [-h] [-r]\n\nThis script is used to bump NAV version numbers.\n\nOptions:\n\n  -h   Print this help.\n  -t   Sets and git-tags a production version from the\n       latest changelog entry\nEOF\n}\n\nin_git_repo() {\n  test -e .git && test -x \"$GIT\"\n}\n\ndo_describe() {\n  ${GIT} describe --tags\n}\n\nget_version() {\n    do_describe\n}\n\nget_version_from_changelog() {\n    head -n15 CHANGELOG.md | awk '/^## \\[[0-9]/ { print $2 }' | tr -d '[]'\n}\n\ngit_tag_exists() {\n    local tag=\"$1\"\n    ${GIT} rev-parse \"$tag\" >/dev/null 2>/dev/null\n}\n\ntag_from_changelog() {\n    local version=$(get_version_from_changelog)\n    if [ -z \"$version\" ]; then\n        >&2 echo \"Could not get version from changelog\"\n        exit 1\n    elif ! in_git_repo; then\n\t>&2 echo \"I would have tagged ${version}, but I'm not in a Git repository\"\n\texit 2\n    elif git_tag_exists \"${version}\"; then\n\t>&2 echo \"Cannot tag ${version}, tag already exists:\\n\"\n\t${GIT} tag -v \"$version\"\n\texit 3\n    else\n        echo \"Tagging version ${version}\"\n    fi\n    ${GIT} tag --annotate --sign -m \"Tag release ${version}\" \"$version\"\n    ${GIT} tag -v \"$version\"\n}\n\n# Parse options\nOPTIND=1\nwhile getopts \"hdt\" opt; do\n    case \"$opt\" in\n    h)\n        show_help\n        exit 0\n        ;;\n    t)  tag_from_changelog\n        exit 0\n        ;;\n    esac\ndone\n\n# If we got this far, just print the current version\nget_version\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const path = require('path');\nconst glob = require('glob');\n\nconst MiniCssExtractPlugin = require('mini-css-extract-plugin');\nconst RemoveEmptyScriptsPlugin = require('webpack-remove-empty-scripts');\n\nconst stylesHandler = MiniCssExtractPlugin.loader;\n\nmodule.exports = [\n    {\n        name: 'sass',\n        entry: {\n            nav: path.resolve(__dirname, './python/nav/web/sass/nav.scss'),\n            ...glob.sync(path.resolve(__dirname, './python/nav/web/sass/nav/**.scss')).filter(v => !path.parse(v).name.startsWith('_')).reduce(function (obj, el) {\n                obj[`nav/${path.parse(el).name}`] = el;\n                return obj\n            }, {}),\n            'font-awesome/font-awesome': path.resolve(__dirname, './python/nav/web/sass/font-awesome/font-awesome.scss'),\n        },\n        output: {\n            path: path.join(__dirname, './python/nav/web/static/css'),\n            clean: true,\n        },\n        plugins: [\n            new MiniCssExtractPlugin(),\n            new RemoveEmptyScriptsPlugin(),\n        ],\n        module: {\n            rules: [\n                {\n                    test: /\\.s[ac]ss$/i,\n                    use: [stylesHandler, 'css-loader', 'sass-loader'],\n                },\n                {\n                    test: /\\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i,\n                    type: 'asset' // webpack will individually pick the best way to include each asset it encounters\n                },\n            ],\n        },\n        // TODO: fix warnings instead of ignoring them\n        ignoreWarnings: [/./], // Suppress all warnings in the console\n    },\n];\n"
  }
]